From ossp-cvs-owner@ossp.org  Tue Jun 13 16:05:42 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5DDjsa02443; Tue, 13 Jun 2000 15:45:54 +0200 (CEST)
Date: Tue, 13 Jun 2000 15:45:54 +0200 (CEST)
Message-Id: <200006131345.e5DDjsa02443@ossp.org>
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="MDOHUSCL29E138Y91LHP"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--MDOHUSCL29E138Y91LHP
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   OSSP Project Master
  Root:   /e/ossp/cvs                      Email:  ossp@ossp.org
  Module: CVSROOT                          Date:   13-Jun-2000 15:45:49
  Branch: HEAD                             Handle: 2000061314454800

  Modified files:
    CVSROOT                 modules

  Log:
    Null commit

  Summary:
    Revision    Changes     Path
    1.10                    CVSROOT/modules
  ____________________________________________________________________________

--MDOHUSCL29E138Y91LHP
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to CVSROOT/modules
Content-Disposition: attachment

Index: CVSROOT/modules
============================================================
$ cvs diff -u -r1.9 -r1.10 modules
--- CVSROOT/modules	2000/06/13 13:42:13	1.9
+++ CVSROOT/modules	2000/06/13 13:45:48	1.10
@@ -60,3 +60,4 @@
 ossp-web        ossp-web   
 ossp-play       ossp-play  
 
+
--MDOHUSCL29E138Y91LHP--


From ossp-cvs-owner@ossp.org  Tue Jun 13 16:09:07 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5DDjsa02443; Tue, 13 Jun 2000 15:45:54 +0200 (CEST)
Date: Tue, 13 Jun 2000 15:45:54 +0200 (CEST)
Message-Id: <200006131345.e5DDjsa02443@ossp.org>
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="MDOHUSCL29E138Y91LHP"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--MDOHUSCL29E138Y91LHP
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   OSSP Project Master
  Root:   /e/ossp/cvs                      Email:  ossp@ossp.org
  Module: CVSROOT                          Date:   13-Jun-2000 15:45:49
  Branch: HEAD                             Handle: 2000061314454800

  Modified files:
    CVSROOT                 modules

  Log:
    Null commit

  Summary:
    Revision    Changes     Path
    1.10                    CVSROOT/modules
  ____________________________________________________________________________

--MDOHUSCL29E138Y91LHP
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to CVSROOT/modules
Content-Disposition: attachment

Index: CVSROOT/modules
============================================================
$ cvs diff -u -r1.9 -r1.10 modules
--- CVSROOT/modules	2000/06/13 13:42:13	1.9
+++ CVSROOT/modules	2000/06/13 13:45:48	1.10
@@ -60,3 +60,4 @@
 ossp-web        ossp-web   
 ossp-play       ossp-play  
 
+
--MDOHUSCL29E138Y91LHP--


From ossp-cvs-owner@ossp.org  Tue Jun 13 16:10:21 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5DDjsa02443; Tue, 13 Jun 2000 15:45:54 +0200 (CEST)
Date: Tue, 13 Jun 2000 15:45:54 +0200 (CEST)
Message-Id: <200006131345.e5DDjsa02443@ossp.org>
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="MDOHUSCL29E138Y91LHP"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--MDOHUSCL29E138Y91LHP
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   OSSP Project Master
  Root:   /e/ossp/cvs                      Email:  ossp@ossp.org
  Module: CVSROOT                          Date:   13-Jun-2000 15:45:49
  Branch: HEAD                             Handle: 2000061314454800

  Modified files:
    CVSROOT                 modules

  Log:
    Null commit

  Summary:
    Revision    Changes     Path
    1.10                    CVSROOT/modules
  ____________________________________________________________________________

--MDOHUSCL29E138Y91LHP
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to CVSROOT/modules
Content-Disposition: attachment

Index: CVSROOT/modules
============================================================
$ cvs diff -u -r1.9 -r1.10 modules
--- CVSROOT/modules	2000/06/13 13:42:13	1.9
+++ CVSROOT/modules	2000/06/13 13:45:48	1.10
@@ -60,3 +60,4 @@
 ossp-web        ossp-web   
 ossp-play       ossp-play  
 
+
--MDOHUSCL29E138Y91LHP--


From ossp-cvs-owner@ossp.org  Tue Jun 13 16:25:13 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5DDjsa02443; Tue, 13 Jun 2000 15:45:54 +0200 (CEST)
Date: Tue, 13 Jun 2000 15:45:54 +0200 (CEST)
Message-Id: <200006131345.e5DDjsa02443@ossp.org>
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="MDOHUSCL29E138Y91LHP"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--MDOHUSCL29E138Y91LHP
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   OSSP Project Master
  Root:   /e/ossp/cvs                      Email:  ossp@ossp.org
  Module: CVSROOT                          Date:   13-Jun-2000 15:45:49
  Branch: HEAD                             Handle: 2000061314454800

  Modified files:
    CVSROOT                 modules

  Log:
    Null commit

  Summary:
    Revision    Changes     Path
    1.10                    CVSROOT/modules
  ____________________________________________________________________________

--MDOHUSCL29E138Y91LHP
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to CVSROOT/modules
Content-Disposition: attachment

Index: CVSROOT/modules
============================================================
$ cvs diff -u -r1.9 -r1.10 modules
--- CVSROOT/modules	2000/06/13 13:42:13	1.9
+++ CVSROOT/modules	2000/06/13 13:45:48	1.10
@@ -60,3 +60,4 @@
 ossp-web        ossp-web   
 ossp-play       ossp-play  
 
+
--MDOHUSCL29E138Y91LHP--


From ossp-cvs-owner@ossp.org  Tue Jun 13 16:33:19 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5DEXIq06762; Tue, 13 Jun 2000 16:33:18 +0200 (CEST)
Date: Tue, 13 Jun 2000 16:33:18 +0200 (CEST)
Message-Id: <200006131433.e5DEXIq06762@ossp.org>
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="UT8N48YME17NVBMI5T54"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--UT8N48YME17NVBMI5T54
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   OSSP Project Master
  Root:   /e/ossp/cvs                      Email:  ossp@ossp.org
  Module: CVSROOT                          Date:   13-Jun-2000 16:33:18
  Branch: HEAD                             Handle: 2000061315331700

  Modified files:
    CVSROOT                 modules

  Log:
    Null commit

  Summary:
    Revision    Changes     Path
    1.11                    CVSROOT/modules
  ____________________________________________________________________________

--UT8N48YME17NVBMI5T54
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to CVSROOT/modules
Content-Disposition: attachment

Index: CVSROOT/modules
============================================================
$ cvs diff -u -r1.10 -r1.11 modules
--- CVSROOT/modules	2000/06/13 13:45:48	1.10
+++ CVSROOT/modules	2000/06/13 14:33:17	1.11
@@ -60,4 +60,3 @@
 ossp-web        ossp-web   
 ossp-play       ossp-play  
 
-
--UT8N48YME17NVBMI5T54--


From ossp-cvs-owner@ossp.org  Tue Jun 13 16:38:22 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5DEcL207234; Tue, 13 Jun 2000 16:38:21 +0200 (CEST)
Date: Tue, 13 Jun 2000 16:38:21 +0200 (CEST)
Message-Id: <200006131438.e5DEcL207234@ossp.org>
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="UI088GO4UN4VOW8FMA70"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--UI088GO4UN4VOW8FMA70
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   OSSP Project Master
Root:   /e/ossp/cvs                      Email:  ossp@ossp.org
Module: CVSROOT                          Date:   13-Jun-2000 16:38:20
Branch: HEAD                             Handle: 2000061315381900

Modified files:
  CVSROOT                 modules

Log:
  Null commit

Summary:
  Revision    Changes     Path
  1.12                    CVSROOT/modules
____________________________________________________________________________

--UI088GO4UN4VOW8FMA70
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to CVSROOT/modules
Content-Disposition: attachment

Index: CVSROOT/modules
============================================================
$ cvs diff -u -r1.11 -r1.12 modules
--- CVSROOT/modules	2000/06/13 14:33:17	1.11
+++ CVSROOT/modules	2000/06/13 14:38:19	1.12
@@ -60,3 +60,4 @@
 ossp-web        ossp-web   
 ossp-play       ossp-play  
 
+
--UI088GO4UN4VOW8FMA70--


From ossp-cvs-owner@ossp.org  Tue Jun 13 16:38:30 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5DEcTA07280; Tue, 13 Jun 2000 16:38:29 +0200 (CEST)
Date: Tue, 13 Jun 2000 16:38:29 +0200 (CEST)
Message-Id: <200006131438.e5DEcTA07280@ossp.org>
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="5XYAG7N3KOW9G3XLFAU3"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--5XYAG7N3KOW9G3XLFAU3
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   OSSP Project Master
Root:   /e/ossp/cvs                      Email:  ossp@ossp.org
Module: CVSROOT                          Date:   13-Jun-2000 16:38:29
Branch: HEAD                             Handle: 2000061315382700

Modified files:
  CVSROOT                 modules

Log:
  Null commit

Summary:
  Revision    Changes     Path
  1.13                    CVSROOT/modules
____________________________________________________________________________

--5XYAG7N3KOW9G3XLFAU3
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to CVSROOT/modules
Content-Disposition: attachment

Index: CVSROOT/modules
============================================================
$ cvs diff -u -r1.12 -r1.13 modules
--- CVSROOT/modules	2000/06/13 14:38:19	1.12
+++ CVSROOT/modules	2000/06/13 14:38:27	1.13
@@ -60,4 +60,3 @@
 ossp-web        ossp-web   
 ossp-play       ossp-play  
 
-
--5XYAG7N3KOW9G3XLFAU3--


From ossp-cvs-owner@ossp.org  Tue Jun 13 16:51:22 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5DEpL408373; Tue, 13 Jun 2000 16:51:21 +0200 (CEST)
Date: Tue, 13 Jun 2000 16:51:21 +0200 (CEST)
Message-Id: <200006131451.e5DEpL408373@ossp.org>
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="KD2LR2KRDD1UEMRM9723"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--KD2LR2KRDD1UEMRM9723
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   OSSP Project Master
Root:   /e/ossp/cvs                      Email:  ossp@ossp.org
Module: CVSROOT                          Date:   13-Jun-2000 16:51:16
Branch: HEAD                             Handle: 2000061315511500

Modified files:
  CVSROOT                 modules

Log:
  *** empty log message ***

Summary:
  Revision    Changes     Path
  1.14                    CVSROOT/modules
____________________________________________________________________________

--KD2LR2KRDD1UEMRM9723
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to CVSROOT/modules
Content-Disposition: attachment

Index: CVSROOT/modules
============================================================
$ cvs diff -u -r1.13 -r1.14 modules
--- CVSROOT/modules	2000/06/13 14:38:27	1.13
+++ CVSROOT/modules	2000/06/13 14:51:15	1.14
@@ -60,3 +60,4 @@
 ossp-web        ossp-web   
 ossp-play       ossp-play  
 
+
--KD2LR2KRDD1UEMRM9723--


From ossp-cvs-owner@ossp.org  Sat Jun 17 18:29:14 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5HGTDb36838; Sat, 17 Jun 2000 18:29:13 +0200 (CEST)
Date: Sat, 17 Jun 2000 18:29:13 +0200 (CEST)
Message-Id: <200006171629.e5HGTDb36838@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="6SPYY0C18M0OCL6002HD"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--6SPYY0C18M0OCL6002HD
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: CVSROOT                          Date:   17-Jun-2000 18:29:13
Branch: HEAD                             Handle: 2000061717291200

Modified files:
  CVSROOT                 modules

Log:
  Add OSSP CVS module

Summary:
  Revision    Changes     Path
  1.15                    CVSROOT/modules
____________________________________________________________________________

--6SPYY0C18M0OCL6002HD
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to CVSROOT/modules
Content-Disposition: attachment

Index: CVSROOT/modules
============================================================
$ cvs diff -u -r1.14 -r1.15 modules
--- CVSROOT/modules	2000/06/13 14:51:15	1.14
+++ CVSROOT/modules	2000/06/17 16:29:12	1.15
@@ -52,7 +52,7 @@
 taginfo         CVSROOT taginfo      
 verifymsg       CVSROOT verifymsg    
 
-#   the real modules
+#   the OSSP top-level modules
 ossp         -a ossp-adm ossp-srv ossp-pkg ossp-web ossp-play
 ossp-adm        ossp-adm    
 ossp-srv        ossp-srv    
@@ -60,4 +60,6 @@
 ossp-web        ossp-web   
 ossp-play       ossp-play  
 
+#   the OSSP sub-modules
+ossp-cvs        ossp-pkg/ossp-cvs
 
--6SPYY0C18M0OCL6002HD--


From ossp-cvs-owner@ossp.org  Sat Jun 17 21:55:51 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5HJtoG51379; Sat, 17 Jun 2000 21:55:50 +0200 (CEST)
Date: Sat, 17 Jun 2000 21:55:50 +0200 (CEST)
Message-Id: <200006171955.e5HJtoG51379@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="A0AJEBJWWMBI21ASWH6V"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ossp-cvs README.OSSP ossp-pkg/ossp-cvs/src cvsrc....
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--A0AJEBJWWMBI21ASWH6V
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: ossp-pkg                         Date:   17-Jun-2000 21:55:50
Branch: HEAD                             Handle: 2000061720554901

Modified files:
  ossp-pkg/ossp-cvs       README.OSSP
  ossp-pkg/ossp-cvs/src   cvsrc.c

Log:
  Add support for quoted strings by using an own strqtok() function
  instead of the standard strtok() function.

Summary:
  Revision    Changes     Path
  1.39                    ossp-pkg/ossp-cvs/README.OSSP
  1.6                     ossp-pkg/ossp-cvs/src/cvsrc.c
____________________________________________________________________________

--A0AJEBJWWMBI21ASWH6V
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/README.OSSP
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/README.OSSP
============================================================
$ cvs diff -u -r1.38 -r1.39 README.OSSP
--- ossp-pkg/ossp-cvs/README.OSSP	2000/06/17 12:15:52	1.38
+++ ossp-pkg/ossp-cvs/README.OSSP	2000/06/17 19:55:49	1.39
@@ -38,6 +38,8 @@
     control and not for bookkeeping changes or group communication -
     instead a plain manually edited ChangeLog exists) or `commit -d
     <master>' (for OSSP when working with a local repository copy).
+    Additionally this adds support for quoted strings inside .cvsrc
+    files.
     [Origin: Ralf S. Engelschall]
 
   OSSP_PATCH_GLOBALOPTION:

--A0AJEBJWWMBI21ASWH6V
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/src/cvsrc.c
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/src/cvsrc.c
============================================================
$ cvs diff -u -r1.5 -r1.6 cvsrc.c
--- ossp-pkg/ossp-cvs/src/cvsrc.c	2000/04/16 14:52:53	1.5
+++ ossp-pkg/ossp-cvs/src/cvsrc.c	2000/06/17 19:55:50	1.6
@@ -12,6 +12,203 @@
 #include "cvs.h"
 #include "getline.h"
 
+#ifdef OSSP_PATCH_CVSRC
+
+#include <ctype.h>
+#include <string.h>
+
+static char *strq_start = NULL;
+
+static char *
+strqtok_cchar(
+    register char *s,
+    register char *c,
+    int *backslashed)
+{
+    register char ch;
+
+    if ((*backslashed = (*s == '\\'))) {
+        switch (*++s) {
+        case 'a':
+            *c = '\a';
+            break;
+        case 'b':
+            *c = '\b';
+            break;
+        case 'f':
+            *c = '\f';
+            break;
+        case 'n':
+            *c = '\n';
+            break;
+        case 'r':
+            *c = '\r';
+            break;
+        case 't':
+            *c = '\t';
+            break;
+        case 'v':
+            *c = '\v';
+            break;
+        case '\\':
+            *c = '\\';
+            break;
+        case '^':
+            *c = '^';
+            break;
+        case '\'':
+            *c = '\'';
+            break;
+        case '"':
+            *c = '"';
+            break;
+        case '?':
+            *c = '?';
+            break;
+        case '0':
+        case '1':
+        case '2':
+        case '3':
+        case '4':
+        case '5':
+        case '6':
+        case '7':
+            ch = 0;
+            if (isdigit(*s) && *s != '8' && *s != '9') {
+                ch = *s++ - '0';                
+                if (isdigit(*s) && *s != '8' && *s != '9') {
+                    ch <<= 3;                   
+                    ch |= *s++ - '0';   
+                    if (isdigit(*s) && *s != '8' && *s != '9') {
+                        ch <<= 3;                               
+                        ch |= *s++ - '0';               
+                    }                   
+                }                       
+            }           
+            s--;
+            *c = ch;
+            break;
+        case 'x':
+            s++;
+            for (ch = 0; isxdigit(*s); s++) {
+                ch <<= 4;
+                ch |= isdigit(*s) ? *s - '0' :
+                      islower(*s) ? *s + 10 - 'a' : *s + 10 - 'A';
+            }
+            s--;
+            *c = ch;
+            break;
+        default:
+            *c = *s;
+            break;
+        }
+    } else
+        *c = *s;
+    return (*s) ? s+1 : NULL;
+}
+
+static char *
+strqtok(
+    char *s,            /* String to tokenize.  NULL to continue same str */
+    char *delim,        /* Token delimiters.  Can be changed w/ each call. */
+    char *quotemarks,   /* Quotation marks.  Can be changed w/ each call. */
+    char *commentchars, /* Comment characters.  Can be changed w/ each call. */ 
+    unsigned int flags) /*      flags&01 ->     strip quotes;
+                         *      flags&02 ->     enable backslash escapes;
+                         *      flags&04 ->     skip all delims before return;
+                         */
+{
+    register char *p, *q;
+    char c;
+    char leftquote = 0;
+    char *token;
+    int backslashed, inquote, intok;
+
+    int stripquote = flags & 01; /* strip quotemarks from tokens */
+    int backslash  = flags & 02; /* backslash sequences */
+    int skipdelim  = flags & 04; /* skip seq of delims at end of token */
+    
+    /* New string? */
+    if (s)
+        strq_start = s;
+    if (!strq_start)
+        return NULL;
+    
+    /* Skip leading delimiters */
+    for (p=strq_start; *p && strchr(delim, *p); p++)
+        ;
+    if (!(*p) || strchr(commentchars, *p))
+        return NULL;
+
+    /* Set `token' to point to returned string.
+     * Use p and q to walk through the user's string:
+     *    p will follow input characters;
+     *    q will overwrite w/ outputted characters, minus possibly-stripped
+     *          quotes and including nulls after each token.
+     */
+    token = q = p;
+    inquote = 0;
+    intok = 1;
+    if (backslash) {
+        while (intok && (p = strqtok_cchar(p, &c, &backslashed))) {
+            if (backslashed) {
+                *q++ = c;               /* treat as plain character */
+            } else if (!inquote && *delim && strchr(delim, c)) {
+                *q = '\0';              /* Reached end of token */
+                intok = 0;
+            } else if (!inquote && *commentchars && strchr(commentchars, c)) {
+                *q = '\0';              /* Reached end of token */
+                *p = '\0';              /* make it act like end of string */
+                intok = 0;
+            } else if (!inquote && *quotemarks && strchr(quotemarks, c)) {
+                inquote = 1;            /* Beginning a quoted segment */
+                leftquote = c;          /* Save quote char for matching with */
+                if (!stripquote) *q++ = c;
+            } else if (inquote && leftquote == c) {
+                inquote = 0;            /* Ending a quoted segment */
+                if (!stripquote) *q++ = c;
+            } else {
+                *q++ = c;               /* Ordinary character */
+            }
+        }
+        strq_start = p;                 /* Where to start next search */
+        *q = '\0';
+    } else {
+        while (intok && *p) {
+            if (!inquote && *delim && strchr(delim, *p)) {
+                *q = '\0';              /* Reached end of token */
+                p++;                    /* advance p for next token */
+                intok = 0;
+            } else if (!inquote && *commentchars && strchr(commentchars, *p)) {
+                *q = '\0';              /* Reached end of token */
+                *p = '\0';              /* make it act like end of string */
+                intok = 0;
+            } else if (!inquote && *quotemarks && strchr(quotemarks, *p)) {
+                inquote = 1;            /* Beginning a quoted segment */
+                leftquote = *p++;       /* Save quote char for matching with */
+                if (!stripquote) *q++ = leftquote;
+            } else if (inquote && leftquote == *p) {
+                inquote = 0;            /* Ending a quoted segment */
+                p++;
+                if (!stripquote) *q++ = leftquote;
+            } else {
+                *q++ = *p++;
+            }
+        }
+        strq_start = p;                 /* Where to start next search */
+        *q = '\0';
+    }
+
+    if (skipdelim && strq_start) {
+        /* Skip trailing delimiters */
+        while (*strq_start && strchr(delim, *strq_start))
+            strq_start++;
+    }
+    return token;
+}
+
+#endif
+
 /* this file is to be found in the user's home directory */
 
 #ifndef	CVSRC_FILENAME
@@ -185,19 +382,17 @@
     if (found)
     {
 	/* skip over command in the options line */
+#ifdef OSSP_PATCH_CVSRC
+	for (optstart = strqtok (line + command_len, "\t \n", "\"'", "", 7);
+	     optstart;
+	     optstart = strqtok (NULL, "\t \n", "\"'", "", 7))
+#else
 	for (optstart = strtok (line + command_len, "\t \n");
 	     optstart;
 	     optstart = strtok (NULL, "\t \n"))
+#endif
 	{
 	    new_argv [new_argc++] = xstrdup (optstart);
-#ifdef OSSP_PATCH_CVSRC
-            /* support empty arguments as in ``-m ""'' */
-            if (   (   new_argv[new_argc-1][0] == '"' 
-                    && new_argv[new_argc-1][1] == '"')
-                || (   new_argv[new_argc-1][0] == '\'' 
-                    && new_argv[new_argc-1][1] == '\''))
-                new_argv[new_argc-1][0] = '\0';
-#endif
 	  
 	    if (new_argc >= max_new_argv)
 	    {
--A0AJEBJWWMBI21ASWH6V--


From ossp-cvs-owner@ossp.org  Sat Jun 17 22:01:33 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5HK1XX51829; Sat, 17 Jun 2000 22:01:33 +0200 (CEST)
Date: Sat, 17 Jun 2000 22:01:33 +0200 (CEST)
Message-Id: <200006172001.e5HK1XX51829@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="XX9EOBODRMHAYXN3A8XG"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ossp-cvs/src main.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--XX9EOBODRMHAYXN3A8XG
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: ossp-pkg                         Date:   17-Jun-2000 22:01:33
Branch: HEAD                             Handle: 2000061721013200

Modified files:
  ossp-pkg/ossp-cvs/src   main.c

Log:
  Make sure the -C commands are stand-alone.

Summary:
  Revision    Changes     Path
  1.15                    ossp-pkg/ossp-cvs/src/main.c
____________________________________________________________________________

--XX9EOBODRMHAYXN3A8XG
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/src/main.c
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/src/main.c
============================================================
$ cvs diff -u -r1.14 -r1.15 main.c
--- ossp-pkg/ossp-cvs/src/main.c	2000/06/12 16:42:38	1.14
+++ ossp-pkg/ossp-cvs/src/main.c	2000/06/17 20:01:32	1.15
@@ -427,6 +427,20 @@
         ret |= CVS_CMD_MODIFIES_REPOSITORY;
     }
 
+#ifdef OSSP_PATCH_CUSTOMCMD
+    {
+        int i;
+        for (i = 0; i < customcmd_num; i++) {
+            if (strcmp(customcmd_tab[i].name, cmd_name) == 0) {
+                ret |= CVS_CMD_IGNORE_ADMROOT;
+                ret &= ~(CVS_CMD_USES_WORK_DIR);
+                ret &= ~(CVS_CMD_MODIFIES_REPOSITORY);
+                break;
+            }
+        }
+    }
+#endif
+
     return ret;
 }
 
--XX9EOBODRMHAYXN3A8XG--


From ossp-cvs-owner@ossp.org  Sat Jun 17 22:03:18 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5HK3I552014; Sat, 17 Jun 2000 22:03:18 +0200 (CEST)
Date: Sat, 17 Jun 2000 22:03:18 +0200 (CEST)
Message-Id: <200006172003.e5HK3I552014@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="JS5I4TMB6N01KBZHX86L"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ossp-cvs VERSION ossp-pkg/ossp-cvs/doc CVSvn.texi...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--JS5I4TMB6N01KBZHX86L
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: ossp-pkg                         Date:   17-Jun-2000 22:03:18
Branch: HEAD                             Handle: 2000061721031502

Modified files:
  ossp-pkg/ossp-cvs       VERSION
  ossp-pkg/ossp-cvs/doc   CVSvn.texi
  ossp-pkg/ossp-cvs/src   version.c

Log:
  Switch to 1.10.8.5

Summary:
  Revision    Changes     Path
  1.4                     ossp-pkg/ossp-cvs/VERSION
  1.3                     ossp-pkg/ossp-cvs/doc/CVSvn.texi
  1.6                     ossp-pkg/ossp-cvs/src/version.c
____________________________________________________________________________

--JS5I4TMB6N01KBZHX86L
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/VERSION
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/VERSION
============================================================
$ cvs diff -u -r1.3 -r1.4 VERSION
--- ossp-pkg/ossp-cvs/VERSION	2000/06/12 19:07:20	1.3
+++ ossp-pkg/ossp-cvs/VERSION	2000/06/17 20:03:15	1.4
@@ -1 +1 @@
-1.10.8.4
+1.10.8.5

--JS5I4TMB6N01KBZHX86L
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/doc/CVSvn.texi
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/doc/CVSvn.texi
============================================================
$ cvs diff -u -r1.2 -r1.3 CVSvn.texi
--- ossp-pkg/ossp-cvs/doc/CVSvn.texi	2000/06/12 19:07:20	1.2
+++ ossp-pkg/ossp-cvs/doc/CVSvn.texi	2000/06/17 20:03:16	1.3
@@ -1 +1 @@
-@set CVSVN 1.10.8.4
+@set CVSVN 1.10.8.5

--JS5I4TMB6N01KBZHX86L
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/src/version.c
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/src/version.c
============================================================
$ cvs diff -u -r1.5 -r1.6 version.c
--- ossp-pkg/ossp-cvs/src/version.c	2000/06/12 19:07:20	1.5
+++ ossp-pkg/ossp-cvs/src/version.c	2000/06/17 20:03:17	1.6
@@ -18,7 +18,7 @@
 #define NAME_PREFIX ""
 #endif
 
-char *version_string = "\n" NAME_PREFIX "Concurrent Versions System (CVS) 1.10.8.4";
+char *version_string = "\n" NAME_PREFIX "Concurrent Versions System (CVS) 1.10.8.5";
 
 #ifdef CLIENT_SUPPORT
 #ifdef SERVER_SUPPORT
--JS5I4TMB6N01KBZHX86L--


From ossp-cvs-owner@ossp.org  Sun Jun 18 15:05:51 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5ID5oY89623; Sun, 18 Jun 2000 15:05:50 +0200 (CEST)
Date: Sun, 18 Jun 2000 15:05:50 +0200 (CEST)
Message-Id: <200006181305.e5ID5oY89623@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ossp-cvs .cvsignore COPYING COPYING.LIB ChangeLog...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   18-Jun-2000 15:05:50
  Branch: vendor                           Handle: 1970010101000000

  Modified files:           (Branch: vendor)
    ossp-pkg/ossp-cvs/diff  diff3.c
    ossp-pkg/ossp-cvs/src   fileattr.c ignore.c modules.c rcs.c update.c
  Touched files:            (Branch: vendor)
    ossp-pkg/ossp-cvs       .cvsignore COPYING COPYING.LIB ChangeLog.zoo
                            INSTALL Makefile.in NEWS README acconfig.h
                            config.h.in configure configure.in
    ossp-pkg/ossp-cvs/diff  .cvsignore Makefile.in analyze.c cmpbuf.c cmpbuf.h
                            context.c diagmeet.note diff.c diff.h diffrun.h
                            dir.c ed.c ifdef.c io.c normal.c side.c system.h
                            util.c version.c
    ossp-pkg/ossp-cvs/doc   .cvsignore FAQ HACKING Makefile.in RCSFILES TESTS
                            TODO cvs-paper.ms cvs.texinfo cvsclient.texi
    ossp-pkg/ossp-cvs/lib   .cvsignore Makefile.in argmatch.c dup2.c fncase.c
                            fnmatch.c fnmatch.h ftruncate.c getdate.c
                            getdate.y getline.c getline.h getopt.c getopt.h
                            getopt1.c hostname.c md5.c md5.h memmove.c mkdir.c
                            regex.c regex.h rename.c savecwd.c savecwd.h
                            sighandle.c strerror.c stripslash.c strstr.c
                            strtoul.c system.h valloc.c wait.h waitpid.c
                            xgetwd.c yesno.c
    ossp-pkg/ossp-cvs/man   .cvsignore Makefile.in cvs.1 cvs.5
    ossp-pkg/ossp-cvs/src   .cvsignore Makefile.in add.c admin.c buffer.c
                            buffer.h checkin.c checkout.c classify.c client.c
                            client.h commit.c create_adm.c cvs.h cvsrc.c
                            diff.c edit.c edit.h entries.c error.c error.h
                            expand_path.c fileattr.h filesubr.c find_names.c
                            hardlink.c hardlink.h hash.c hash.h history.c
                            import.c lock.c log.c login.c logmsg.c main.c
                            mkmodules.c myndbm.c myndbm.h no_diff.c
                            options.h.in parseinfo.c patch.c rcs.h rcscmds.c
                            recurse.c release.c remove.c repos.c root.c rtag.c
                            run.c sanity.sh scramble.c server.c server.h
                            status.c subr.c tag.c update.h vers_ts.c version.c
                            watch.c watch.h wrapper.c zlib.c
    ossp-pkg/ossp-cvs/zlib  .cvsignore Makefile.in README adler32.c
                            algorithm.doc compress.c crc32.c deflate.c
                            deflate.h gzio.c infblock.c infblock.h infcodes.c
                            infcodes.h inffast.c inffast.h inflate.c
                            inftrees.c inftrees.h infutil.c infutil.h trees.c
                            uncompr.c zconf.h zlib.h zutil.c zutil.h

  Log:
    Import vendor CVS, snapshot 20000618
    
    [Release Tags: CVS_20000618]

  Summary:
    Revision    Changes     Path
    vendor      +0 -0       ossp-pkg/ossp-cvs/diff/diff3.c
    vendor      +0 -0       ossp-pkg/ossp-cvs/src/fileattr.c
    vendor      +0 -0       ossp-pkg/ossp-cvs/src/ignore.c
    vendor      +0 -0       ossp-pkg/ossp-cvs/src/modules.c
    vendor      +0 -0       ossp-pkg/ossp-cvs/src/rcs.c
    vendor      +0 -0       ossp-pkg/ossp-cvs/src/update.c
  ____________________________________________________________________________

  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/diff/diff3.c?cvsroot=ossp&r1=vendor&r2=vendor
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/fileattr.c?cvsroot=ossp&r1=vendor&r2=vendor
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/ignore.c?cvsroot=ossp&r1=vendor&r2=vendor
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/modules.c?cvsroot=ossp&r1=vendor&r2=vendor
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/rcs.c?cvsroot=ossp&r1=vendor&r2=vendor
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/update.c?cvsroot=ossp&r1=vendor&r2=vendor

From ossp-cvs-owner@ossp.org  Sun Jun 18 15:50:38 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5IDocd92803; Sun, 18 Jun 2000 15:50:38 +0200 (CEST)
Date: Sun, 18 Jun 2000 15:50:38 +0200 (CEST)
Message-Id: <200006181350.e5IDocd92803@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="5Y4P7FL4IEC3RHL327EP"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ossp-cvs/diff diff3.c ossp-pkg/ossp-cvs/src modul...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--5Y4P7FL4IEC3RHL327EP
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: ossp-pkg                         Date:   18-Jun-2000 15:50:38
Branch: HEAD                             Handle: 2000061814503601

Modified files:
  ossp-pkg/ossp-cvs/diff  diff3.c
  ossp-pkg/ossp-cvs/src   modules.c rcs.c update.c

Log:
  Merge in changes

Summary:
  Revision    Changes     Path
  1.3                     ossp-pkg/ossp-cvs/diff/diff3.c
  1.4                     ossp-pkg/ossp-cvs/src/modules.c
  1.10                    ossp-pkg/ossp-cvs/src/rcs.c
  1.6                     ossp-pkg/ossp-cvs/src/update.c
____________________________________________________________________________

--5Y4P7FL4IEC3RHL327EP
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/diff/diff3.c
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/diff/diff3.c
============================================================
$ cvs diff -u -r1.2 -r1.3 diff3.c
--- ossp-pkg/ossp-cvs/diff/diff3.c	2000/04/27 16:44:30	1.2
+++ ossp-pkg/ossp-cvs/diff/diff3.c	2000/06/18 13:50:36	1.3
@@ -475,8 +475,6 @@
 
   free(content0);
   free(content1);
-  free_diff_blocks(thread0);
-  free_diff_blocks(thread1);
   free_diff3_blocks(diff3);
 
   if (! callbacks || ! callbacks->write_output)
@@ -765,6 +763,8 @@
       tmpblock = using_to_diff3_block (using, last_using,
 				       base_water_thread, high_water_thread,
 				       last_diff3);
+      free_diff_blocks(using[0]);
+      free_diff_blocks(using[1]);
 
       if (!tmpblock)
 	diff3_fatal ("internal error: screwup in format of diff blocks");

--5Y4P7FL4IEC3RHL327EP
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/src/modules.c
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/src/modules.c
============================================================
$ cvs diff -u -r1.3 -r1.4 modules.c
--- ossp-pkg/ossp-cvs/src/modules.c	2000/06/15 06:44:45	1.3
+++ ossp-pkg/ossp-cvs/src/modules.c	2000/06/18 13:50:37	1.4
@@ -123,7 +123,6 @@
     char **xmodargv = NULL;
     /* Found entry from modules file, including options and such.  */
     char *value = NULL;
-    char *zvalue = NULL;
     char *mwhere = NULL;
     char *mfile = NULL;
     char *spec_opt = NULL;
@@ -186,20 +185,21 @@
 	val.dptr = NULL;
     if (val.dptr != NULL)
     {
-	/* null terminate the value  XXX - is this space ours? */
-	val.dptr[val.dsize] = '\0';
+	/* copy and null terminate the value */
+	value = xmalloc (val.dsize + 1);
+	memcpy (value, val.dptr, val.dsize);
+	value[val.dsize] = '\0';
 
 	/* If the line ends in a comment, strip it off */
-	if ((cp = strchr (val.dptr, '#')) != NULL)
+	if ((cp = strchr (value, '#')) != NULL)
 	    *cp = '\0';
 	else
-	    cp = val.dptr + val.dsize;
+	    cp = value + val.dsize;
 
 	/* Always strip trailing spaces */
-	while (cp > val.dptr && isspace ((unsigned char) *--cp))
+	while (cp > value && isspace ((unsigned char) *--cp))
 	    *cp = '\0';
 
-	value = val.dptr;
 	mwhere = xstrdup (mname);
 	goto found;
     }
@@ -327,21 +327,21 @@
 	{
 	    char *cp2;
 
-	    /* null terminate the value XXX - is this space ours? */
-	    val.dptr[val.dsize] = '\0';
+	    /* copy and null terminate the value */
+	    value = xmalloc (val.dsize + 1);
+	    memcpy (value, val.dptr, val.dsize);
+	    value[val.dsize] = '\0';
 
 	    /* If the line ends in a comment, strip it off */
-	    if ((cp2 = strchr (val.dptr, '#')) != NULL)
+	    if ((cp2 = strchr (value, '#')) != NULL)
 		*cp2 = '\0';
 	    else
-		cp2 = val.dptr + val.dsize;
+		cp2 = value + val.dsize;
 
 	    /* Always strip trailing spaces */
-	    while (cp2 > val.dptr  &&  isspace ((unsigned char) *--cp2))
+	    while (cp2 > value  &&  isspace ((unsigned char) *--cp2))
 		*cp2 = '\0';
 
-	    value = val.dptr;
-
 	    /* mwhere gets just the module name */
 	    mwhere = xstrdup (mname);
 	    mfile = cp + 1;
@@ -373,11 +373,7 @@
 	error_exit ();
     cwd_saved = 1;
 
-    /* copy value to our own string since if we go recursive we'll be
-       really screwed if we do another dbm lookup */
     assert (value != NULL);
-    zvalue = xstrdup (value);
-    value = zvalue;
 
     /* search the value for the special delimiter and save for later */
     if ((cp = strchr (value, CVSMODULE_SPEC)) != NULL)
@@ -466,7 +462,7 @@
 	    case '?':
 		error (0, 0,
 		       "modules file has invalid option for key %s value %s",
-		       key.dptr, val.dptr);
+		       key.dptr, value);
 		err++;
 		goto do_module_return;
 	}
@@ -768,8 +764,8 @@
 	free (update_prog);
     if (cwd_saved)
 	free_cwd (&cwd);
-    if (zvalue != NULL)
-	free (zvalue);
+    if (value != NULL)
+	free (value);
 
     if (xvalue != NULL)
 	free (xvalue);

--5Y4P7FL4IEC3RHL327EP
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/src/rcs.c
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/src/rcs.c
============================================================
$ cvs diff -u -r1.9 -r1.10 rcs.c
--- ossp-pkg/ossp-cvs/src/rcs.c	2000/06/14 07:18:45	1.9
+++ ossp-pkg/ossp-cvs/src/rcs.c	2000/06/18 13:50:37	1.10
@@ -2558,8 +2558,8 @@
 	    return (magic);
 	}
 	free (magic);
-	free (version);
     }
+    free (version);
     return ((char *) NULL);
 }
 

--5Y4P7FL4IEC3RHL327EP
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/src/update.c
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/src/update.c
============================================================
$ cvs diff -u -r1.5 -r1.6 update.c
--- ossp-pkg/ossp-cvs/src/update.c	2000/06/14 07:18:45	1.5
+++ ossp-pkg/ossp-cvs/src/update.c	2000/06/18 13:50:37	1.6
@@ -1058,6 +1058,10 @@
 {
     FILE *fp;
 
+    /* Delete the ignore list if it hasn't already been done.  */
+    if (ignlist)
+	dellist (&ignlist);
+
     /* If we set the tag or date for a new subdirectory in
        update_dirent_proc, and we're now done with that subdirectory,
        undo the tag/date setting.  Note that we know that the tag and
--5Y4P7FL4IEC3RHL327EP--


From ossp-cvs-owner@ossp.org  Sun Jun 18 16:30:56 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5IEUu595808; Sun, 18 Jun 2000 16:30:56 +0200 (CEST)
Date: Sun, 18 Jun 2000 16:30:56 +0200 (CEST)
Message-Id: <200006181430.e5IEUu595808@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela .configure AUTHORS COPYING ChangeLog INSTA...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   18-Jun-2000 16:30:56
  Branch: vendor                           Handle: 2000061815304606

  Added files:              (Branch: vendor)
    ossp-pkg/shiela         .configure AUTHORS COPYING ChangeLog INSTALL
                            Makefile.in README THANKS TODO VERSION configure
                            configure.in shiela-install.pod shiela-install.sh
                            shiela.pl shtool

  Log:
    Import of OSSP Shiela
    
    [Release Tags: SHIELA_0_9_0]

  Summary:
    Revision    Changes     Path
    1.1.1.1     +4 -0       ossp-pkg/shiela/.configure
    1.1.1.1     +18 -0      ossp-pkg/shiela/AUTHORS
    1.1.1.1     +280 -0     ossp-pkg/shiela/COPYING
    1.1.1.1     +16 -0      ossp-pkg/shiela/ChangeLog
    1.1.1.1     +13 -0      ossp-pkg/shiela/INSTALL
    1.1.1.1     +91 -0      ossp-pkg/shiela/Makefile.in
    1.1.1.1     +44 -0      ossp-pkg/shiela/README
    1.1.1.1     +18 -0      ossp-pkg/shiela/THANKS
    1.1.1.1     +60 -0      ossp-pkg/shiela/TODO
    1.1.1.1     +3 -0       ossp-pkg/shiela/VERSION
    1.1.1.1     BLOB        ossp-pkg/shiela/configure
    1.1.1.1     +24 -0      ossp-pkg/shiela/configure.in
    1.1.1.1     +151 -0     ossp-pkg/shiela/shiela-install.pod
    1.1.1.1     +619 -0     ossp-pkg/shiela/shiela-install.sh
    1.1.1.1     +2069 -0    ossp-pkg/shiela/shiela.pl
    1.1.1.1     +1442 -0    ossp-pkg/shiela/shtool
  ____________________________________________________________________________

  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/shiela/.configure?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/shiela/AUTHORS?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/shiela/COPYING?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/shiela/ChangeLog?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/shiela/INSTALL?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/shiela/Makefile.in?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/shiela/README?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/shiela/THANKS?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/shiela/TODO?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/shiela/VERSION?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/shiela/configure?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/shiela/configure.in?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/shiela/shiela-install.pod?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/shiela/shiela-install.sh?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/shiela/shiela.pl?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/shiela/shtool?cvsroot=ossp&r1=NONE&r2=1.1.1.1

From ossp-cvs-owner@ossp.org  Sun Jun 18 16:32:44 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5IEWiH95959; Sun, 18 Jun 2000 16:32:44 +0200 (CEST)
Date: Sun, 18 Jun 2000 16:32:44 +0200 (CEST)
Message-Id: <200006181432.e5IEWiH95959@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="TF6XYA5UQXPFNVJ6S1DS"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--TF6XYA5UQXPFNVJ6S1DS
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: CVSROOT                          Date:   18-Jun-2000 16:32:44
Branch: HEAD                             Handle: 2000061815324300

Modified files:
  CVSROOT                 modules

Log:
  Add Shiela module

Summary:
  Revision    Changes     Path
  1.16                    CVSROOT/modules
____________________________________________________________________________

--TF6XYA5UQXPFNVJ6S1DS
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to CVSROOT/modules
Content-Disposition: attachment

Index: CVSROOT/modules
============================================================
$ cvs diff -u -r1.15 -r1.16 modules
--- CVSROOT/modules	2000/06/17 16:29:12	1.15
+++ CVSROOT/modules	2000/06/18 14:32:43	1.16
@@ -62,4 +62,5 @@
 
 #   the OSSP sub-modules
 ossp-cvs        ossp-pkg/ossp-cvs
+shiela          ossp-pkg/shiela
 
--TF6XYA5UQXPFNVJ6S1DS--


From ossp-cvs-owner@ossp.org  Tue Jun 20 16:09:41 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5KE9eR96538; Tue, 20 Jun 2000 16:09:40 +0200 (CEST)
Date: Tue, 20 Jun 2000 16:09:40 +0200 (CEST)
Message-Id: <200006201409.e5KE9eR96538@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ossp-cvs .cvsignore COPYING COPYING.LIB ChangeLog...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   20-Jun-2000 16:09:40
  Branch: vendor                           Handle: 19700101010000961506342

  Modified files:           (Branch: vendor)
    ossp-pkg/ossp-cvs       config.h.in configure configure.in
    ossp-pkg/ossp-cvs/lib   regex.c regex.h
    ossp-pkg/ossp-cvs/src   main.c root.c server.c
  Touched files:            (Branch: vendor)
    ossp-pkg/ossp-cvs       .cvsignore COPYING COPYING.LIB ChangeLog.zoo
                            INSTALL Makefile.in NEWS README acconfig.h
    ossp-pkg/ossp-cvs/diff  .cvsignore Makefile.in analyze.c cmpbuf.c cmpbuf.h
                            context.c diagmeet.note diff.c diff.h diff3.c
                            diffrun.h dir.c ed.c ifdef.c io.c normal.c side.c
                            system.h util.c version.c
    ossp-pkg/ossp-cvs/doc   .cvsignore FAQ HACKING Makefile.in RCSFILES TESTS
                            TODO cvs-paper.ms cvs.texinfo cvsclient.texi
    ossp-pkg/ossp-cvs/lib   .cvsignore Makefile.in argmatch.c dup2.c fncase.c
                            fnmatch.c fnmatch.h ftruncate.c getdate.c
                            getdate.y getline.c getline.h getopt.c getopt.h
                            getopt1.c hostname.c md5.c md5.h memmove.c mkdir.c
                            rename.c savecwd.c savecwd.h sighandle.c
                            strerror.c stripslash.c strstr.c strtoul.c
                            system.h valloc.c wait.h waitpid.c xgetwd.c
                            yesno.c
    ossp-pkg/ossp-cvs/man   .cvsignore Makefile.in cvs.1 cvs.5
    ossp-pkg/ossp-cvs/src   .cvsignore Makefile.in add.c admin.c buffer.c
                            buffer.h checkin.c checkout.c classify.c client.c
                            client.h commit.c create_adm.c cvs.h cvsrc.c
                            diff.c edit.c edit.h entries.c error.c error.h
                            expand_path.c fileattr.c fileattr.h filesubr.c
                            find_names.c hardlink.c hardlink.h hash.c hash.h
                            history.c ignore.c import.c lock.c log.c login.c
                            logmsg.c mkmodules.c modules.c myndbm.c myndbm.h
                            no_diff.c options.h.in parseinfo.c patch.c rcs.c
                            rcs.h rcscmds.c recurse.c release.c remove.c
                            repos.c rtag.c run.c sanity.sh scramble.c server.h
                            status.c subr.c tag.c update.c update.h vers_ts.c
                            version.c watch.c watch.h wrapper.c zlib.c
    ossp-pkg/ossp-cvs/zlib  .cvsignore Makefile.in README adler32.c
                            algorithm.doc compress.c crc32.c deflate.c
                            deflate.h gzio.c infblock.c infblock.h infcodes.c
                            infcodes.h inffast.c inffast.h inflate.c
                            inftrees.c inftrees.h infutil.c infutil.h trees.c
                            uncompr.c zconf.h zlib.h zutil.c zutil.h

  Log:
    Import vendor CVS, snapshot 20000620
    
    [Release Tags: CVS_20000620]

  Summary:
    Revision    Changes     Path
    1.1.1.2     +6  -0      ossp-pkg/ossp-cvs/config.h.in
    1.1.1.3     BLOB        ossp-pkg/ossp-cvs/configure
    1.1.1.3     +6  -0      ossp-pkg/ossp-cvs/configure.in
    1.1.1.2     +0  -0      ossp-pkg/ossp-cvs/lib/regex.c
    1.1.1.2     +0  -0      ossp-pkg/ossp-cvs/lib/regex.h
    1.1.1.5     +0  -0      ossp-pkg/ossp-cvs/src/main.c
    1.1.1.2     +0  -0      ossp-pkg/ossp-cvs/src/root.c
    1.1.1.8     +0  -0      ossp-pkg/ossp-cvs/src/server.c
  ____________________________________________________________________________

  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/config.h.in?cvsroot=ossp&r1=1.1.1.1&r2=1.1.1.2
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/configure?cvsroot=ossp&r1=1.1.1.2&r2=1.1.1.3
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/configure.in?cvsroot=ossp&r1=1.1.1.2&r2=1.1.1.3
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/lib/regex.c?cvsroot=ossp&r1=1.1.1.1&r2=1.1.1.2
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/lib/regex.h?cvsroot=ossp&r1=1.1.1.1&r2=1.1.1.2
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/main.c?cvsroot=ossp&r1=1.1.1.4&r2=1.1.1.5
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/root.c?cvsroot=ossp&r1=1.1.1.1&r2=1.1.1.2
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/server.c?cvsroot=ossp&r1=1.1.1.7&r2=1.1.1.8

From ossp-cvs-owner@ossp.org  Tue Jun 20 16:25:17 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5KEPDt97692; Tue, 20 Jun 2000 16:25:13 +0200 (CEST)
Date: Tue, 20 Jun 2000 16:25:13 +0200 (CEST)
Message-Id: <200006201425.e5KEPDt97692@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="LZKIROWV0YR1M5IXJ62Q"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ossp-cvs/lib regex.c ossp-pkg/ossp-cvs/src main.c...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--LZKIROWV0YR1M5IXJ62Q
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: ossp-pkg                         Date:   20-Jun-2000 16:25:13
Branch: HEAD                             Handle: 2000062015250903

Modified files:
  ossp-pkg/ossp-cvs/lib   regex.c
  ossp-pkg/ossp-cvs/src   main.c root.c server.c

Log:
  Merge in changes

Summary:
  Revision    Changes     Path
  1.3         +3806 -2424 ossp-pkg/ossp-cvs/lib/regex.c
  1.16        +6  -1      ossp-pkg/ossp-cvs/src/main.c
  1.3         +31 -13     ossp-pkg/ossp-cvs/src/root.c
  1.20        +1  -9      ossp-pkg/ossp-cvs/src/server.c
____________________________________________________________________________

--LZKIROWV0YR1M5IXJ62Q
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/lib/regex.c
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/lib/regex.c
============================================================
$ cvs diff -u -r1.2 -r1.3 regex.c
--- ossp-pkg/ossp-cvs/lib/regex.c	2000/04/27 16:44:30	1.2
+++ ossp-pkg/ossp-cvs/lib/regex.c	2000/06/20 14:25:09	1.3
@@ -2,7 +2,7 @@
    0.12.  (Implements POSIX draft P10003.2/D11.2, except for
    internationalization features.)
 
-   Copyright (C) 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
+   Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -11,25 +11,50 @@
 
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.  */
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
+   GNU General Public License for more details.
 
-/* Trying to define this in the makefile would get hairy, unless we can
-   more gracefully do it for NT, OS/2, unix, etc.  */
-#define REGEX_MALLOC 1
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.	 */
 
 /* AIX requires this to be the first thing in the file. */
 #if defined (_AIX) && !defined (REGEX_MALLOC)
   #pragma alloca
 #endif
 
+#undef	_GNU_SOURCE
 #define _GNU_SOURCE
 
-/* We need this for `regex.h', and perhaps for the Emacs include files.  */
-#include <sys/types.h>
+#ifdef emacs
+/* Converts the pointer to the char to BEG-based offset from the start.	 */
+#define PTR_TO_OFFSET(d)						\
+	POS_AS_IN_BUFFER (MATCHING_IN_FIRST_STRING			\
+			  ? (d) - string1 : (d) - (string2 - size1))
+#define POS_AS_IN_BUFFER(p) ((p) + (NILP (re_match_object) || BUFFERP (re_match_object)))
+#else
+#define PTR_TO_OFFSET(d) 0
+#endif
 
 #ifdef HAVE_CONFIG_H
-#include "config.h"
+#include <config.h>
+#endif
+
+/* We need this for `regex.h', and perhaps for the Emacs include files.	 */
+#include <sys/types.h>
+
+/* This is for other GNU distributions with internationalized messages.	 */
+#if HAVE_LIBINTL_H || defined (_LIBC)
+# include <libintl.h>
+#else
+# define gettext(msgid) (msgid)
+#endif
+
+#ifndef gettext_noop
+/* This define is so xgettext can find the internationalizable
+   strings.  */
+#define gettext_noop(String) String
 #endif
 
 /* The `emacs' switch turns on certain matching commands
@@ -47,13 +72,38 @@
 #include "category.h"
 
 #define malloc xmalloc
+#define realloc xrealloc
 #define free xfree
 
 #else  /* not emacs */
+
+/* If we are not linking with Emacs proper,
+   we can't use the relocating allocator
+   even if config.h says that we can.  */
+#undef REL_ALLOC
+
+#if defined (STDC_HEADERS) || defined (_LIBC)
+#include <stdlib.h>
+#else
+char *malloc ();
+char *realloc ();
+#endif
+
+/* When used in Emacs's lib-src, we need to get bzero and bcopy somehow.
+   If nothing else has been done, use the method below.	 */
+#ifdef INHIBIT_STRING_HEADER
+#if !(defined (HAVE_BZERO) && defined (HAVE_BCOPY))
+#if !defined (bzero) && !defined (bcopy)
+#undef INHIBIT_STRING_HEADER
+#endif
+#endif
+#endif
 
-/* We used to test for `BSTRING' here, but only GCC and Emacs define
-   `BSTRING', as far as I know, and neither of them use this code.  */
-#if HAVE_STRING_H || STDC_HEADERS
+/* This is the normal way of making sure we have a bcopy and a bzero.
+   This is used in most programs--a few other programs avoid this
+   by defining INHIBIT_STRING_HEADER.  */
+#ifndef INHIBIT_STRING_HEADER
+#if defined (HAVE_STRING_H) || defined (STDC_HEADERS) || defined (_LIBC)
 #include <string.h>
 #ifndef bcmp
 #define bcmp(s1, s2, n)	memcmp ((s1), (s2), (n))
@@ -67,15 +117,8 @@
 #else
 #include <strings.h>
 #endif
-
-#ifdef STDC_HEADERS
-#include <stdlib.h>
-#else
-char *malloc ();
-char *realloc ();
 #endif
 
-
 /* Define the syntax stuff for \<, \>, etc.  */
 
 /* This must be nonzero for the wordchar and notwordchar pattern
@@ -84,6 +127,12 @@
 #define Sword 1
 #endif
 
+#ifdef SWITCH_ENUM_BUG
+#define SWITCH_ENUM_CAST(x) ((int)(x))
+#else
+#define SWITCH_ENUM_CAST(x) (x)
+#endif
+
 #ifdef SYNTAX_TABLE
 
 extern char *re_syntax_table;
@@ -124,6 +173,19 @@
 
 #define SYNTAX(c) re_syntax_table[c]
 
+/* Dummy macros for non-Emacs environments.  */
+#define BASE_LEADING_CODE_P(c) (0)
+#define WORD_BOUNDARY_P(c1, c2) (0)
+#define CHAR_HEAD_P(p) (1)
+#define SINGLE_BYTE_CHAR_P(c) (1)
+#define SAME_CHARSET_P(c1, c2) (1)
+#define MULTIBYTE_FORM_LENGTH(p, s) (1)
+#define STRING_CHAR(p, s) (*(p))
+#define STRING_CHAR_AND_LENGTH(p, s, actual_len) ((actual_len) = 1, *(p))
+#define GET_CHAR_AFTER_2(c, p, str1, end1, str2, end2) \
+  (c = ((p) == (end1) ? *(str2) : *(p)))
+#define GET_CHAR_BEFORE_2(c, p, str1, end1, str2, end2) \
+  (c = ((p) == (str2) ? *((end1) - 1) : *((p) - 1)))
 #endif /* not emacs */
 
 /* Get the interface, including the syntax bits.  */
@@ -132,34 +194,47 @@
 /* isalpha etc. are used for the character classes.  */
 #include <ctype.h>
 
-#ifndef isascii
-#define isascii(c) 1
+/* Jim Meyering writes:
+
+   "... Some ctype macros are valid only for character codes that
+   isascii says are ASCII (SGI's IRIX-4.0.5 is one such system --when
+   using /bin/cc or gcc but without giving an ansi option).  So, all
+   ctype uses should be through macros like ISPRINT...	If
+   STDC_HEADERS is defined, then autoconf has verified that the ctype
+   macros don't need to be guarded with references to isascii. ...
+   Defining isascii to 1 should let any compiler worth its salt
+   eliminate the && through constant folding."	*/
+
+#if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII))
+#define ISASCII(c) 1
+#else
+#define ISASCII(c) isascii(c)
 #endif
 
 #ifdef isblank
-#define ISBLANK(c) (isascii (c) && isblank (c))
+#define ISBLANK(c) (ISASCII (c) && isblank (c))
 #else
 #define ISBLANK(c) ((c) == ' ' || (c) == '\t')
 #endif
 #ifdef isgraph
-#define ISGRAPH(c) (isascii (c) && isgraph (c))
+#define ISGRAPH(c) (ISASCII (c) && isgraph (c))
 #else
-#define ISGRAPH(c) (isascii (c) && isprint (c) && !isspace (c))
+#define ISGRAPH(c) (ISASCII (c) && isprint (c) && !isspace (c))
 #endif
 
-#define ISPRINT(c) (isascii (c) && isprint (c))
-#define ISDIGIT(c) (isascii (c) && isdigit (c))
-#define ISALNUM(c) (isascii (c) && isalnum (c))
-#define ISALPHA(c) (isascii (c) && isalpha (c))
-#define ISCNTRL(c) (isascii (c) && iscntrl (c))
-#define ISLOWER(c) (isascii (c) && islower (c))
-#define ISPUNCT(c) (isascii (c) && ispunct (c))
-#define ISSPACE(c) (isascii (c) && isspace (c))
-#define ISUPPER(c) (isascii (c) && isupper (c))
-#define ISXDIGIT(c) (isascii (c) && isxdigit (c))
+#define ISPRINT(c) (ISASCII (c) && isprint (c))
+#define ISDIGIT(c) (ISASCII (c) && isdigit (c))
+#define ISALNUM(c) (ISASCII (c) && isalnum (c))
+#define ISALPHA(c) (ISASCII (c) && isalpha (c))
+#define ISCNTRL(c) (ISASCII (c) && iscntrl (c))
+#define ISLOWER(c) (ISASCII (c) && islower (c))
+#define ISPUNCT(c) (ISASCII (c) && ispunct (c))
+#define ISSPACE(c) (ISASCII (c) && isspace (c))
+#define ISUPPER(c) (ISASCII (c) && isupper (c))
+#define ISXDIGIT(c) (ISASCII (c) && isxdigit (c))
 
 #ifndef NULL
-#define NULL 0
+#define NULL (void *)0
 #endif
 
 /* We remove any previous definition of `SIGN_EXTEND_CHAR',
@@ -188,6 +263,7 @@
 
 #define REGEX_ALLOCATE malloc
 #define REGEX_REALLOCATE(source, osize, nsize) realloc (source, nsize)
+#define REGEX_FREE free
 
 #else /* not REGEX_MALLOC  */
 
@@ -201,10 +277,12 @@
 #if HAVE_ALLOCA_H
 #include <alloca.h>
 #else /* not __GNUC__ or HAVE_ALLOCA_H */
-#ifndef _AIX /* Already did AIX, up at the top.  */
+#if 0 /* It is a bad idea to declare alloca.  We always cast the result.  */
+#ifndef _AIX /* Already did AIX, up at the top.	 */
 char *alloca ();
 #endif /* not _AIX */
-#endif /* not HAVE_ALLOCA_H */ 
+#endif
+#endif /* not HAVE_ALLOCA_H */
 #endif /* not __GNUC__ */
 
 #endif /* not alloca */
@@ -217,21 +295,57 @@
    bcopy (source, destination, osize),					\
    destination)
 
+/* No need to do anything to free, after alloca.  */
+#define REGEX_FREE(arg) ((void)0) /* Do nothing!  But inhibit gcc warning.  */
+
+#endif /* not REGEX_MALLOC */
+
+/* Define how to allocate the failure stack.  */
+
+#if defined (REL_ALLOC) && defined (REGEX_MALLOC)
+
+#define REGEX_ALLOCATE_STACK(size)				\
+  r_alloc (&failure_stack_ptr, (size))
+#define REGEX_REALLOCATE_STACK(source, osize, nsize)		\
+  r_re_alloc (&failure_stack_ptr, (nsize))
+#define REGEX_FREE_STACK(ptr)					\
+  r_alloc_free (&failure_stack_ptr)
+
+#else /* not using relocating allocator */
+
+#ifdef REGEX_MALLOC
+
+#define REGEX_ALLOCATE_STACK malloc
+#define REGEX_REALLOCATE_STACK(source, osize, nsize) realloc (source, nsize)
+#define REGEX_FREE_STACK free
+
+#else /* not REGEX_MALLOC */
+
+#define REGEX_ALLOCATE_STACK alloca
+
+#define REGEX_REALLOCATE_STACK(source, osize, nsize)			\
+   REGEX_REALLOCATE (source, osize, nsize)
+/* No need to explicitly free anything.	 */
+#define REGEX_FREE_STACK(arg)
+
 #endif /* not REGEX_MALLOC */
+#endif /* not using relocating allocator */
 
 
 /* True if `size1' is non-NULL and PTR is pointing anywhere inside
    `string1' or just past its end.  This works if PTR is NULL, which is
    a good thing.  */
-#define FIRST_STRING_P(ptr) 					\
+#define FIRST_STRING_P(ptr)					\
   (size1 && string1 <= (ptr) && (ptr) <= string1 + size1)
 
 /* (Re)Allocate N items of type T using malloc, or fail.  */
 #define TALLOC(n, t) ((t *) malloc ((n) * sizeof (t)))
 #define RETALLOC(addr, n, t) ((addr) = (t *) realloc (addr, (n) * sizeof (t)))
+#define RETALLOC_IF(addr, n, t) \
+  if (addr) RETALLOC((addr), (n), t); else (addr) = TALLOC ((n), t)
 #define REGEX_TALLOC(n, t) ((t *) REGEX_ALLOCATE ((n) * sizeof (t)))
 
-#define BYTEWIDTH 8 /* In bits.  */
+#define BYTEWIDTH 8 /* In bits.	 */
 
 #define STREQ(s1, s2) ((strcmp (s1, s2) == 0))
 
@@ -243,122 +357,123 @@
 typedef char boolean;
 #define false 0
 #define true 1
+
+static int re_match_2_internal ();
 
 /* These are the command codes that appear in compiled regular
-   expressions.  Some opcodes are followed by argument bytes.  A
+   expressions.	 Some opcodes are followed by argument bytes.  A
    command code can specify any interpretation whatsoever for its
-   arguments.  Zero bytes may appear in the compiled regular expression.
-
-   The value of `exactn' is needed in search.c (search_buffer) in Emacs.
-   So regex.h defines a symbol `RE_EXACTN_VALUE' to be 1; the value of
-   `exactn' we use here must also be 1.  */
+   arguments.  Zero bytes may appear in the compiled regular expression.  */
 
 typedef enum
 {
   no_op = 0,
 
-        /* Followed by one byte giving n, then by n literal bytes.  */
-  exactn = 1,
+  /* Succeed right away--no more backtracking.	*/
+  succeed,
 
-        /* Matches any (more or less) character.  */
+	/* Followed by one byte giving n, then by n literal bytes.  */
+  exactn,
+
+	/* Matches any (more or less) character.  */
   anychar,
 
-        /* Matches any one char belonging to specified set.  First
-           following byte is number of bitmap bytes.  Then come bytes
-           for a bitmap saying which chars are in.  Bits in each byte
-           are ordered low-bit-first.  A character is in the set if its
-           bit is 1.  A character too large to have a bit in the map is
-           automatically not in the set.  */
+	/* Matches any one char belonging to specified set.  First
+	   following byte is number of bitmap bytes.  Then come bytes
+	   for a bitmap saying which chars are in.  Bits in each byte
+	   are ordered low-bit-first.  A character is in the set if its
+	   bit is 1.  A character too large to have a bit in the map is
+	   automatically not in the set.  */
   charset,
 
-        /* Same parameters as charset, but match any character that is
-           not one of those specified.  */
+	/* Same parameters as charset, but match any character that is
+	   not one of those specified.	*/
   charset_not,
 
-        /* Start remembering the text that is matched, for storing in a
-           register.  Followed by one byte with the register number, in
-           the range 0 to one less than the pattern buffer's re_nsub
-           field.  Then followed by one byte with the number of groups
-           inner to this one.  (This last has to be part of the
-           start_memory only because we need it in the on_failure_jump
-           of re_match_2.)  */
+	/* Start remembering the text that is matched, for storing in a
+	   register.  Followed by one byte with the register number, in
+	   the range 0 to one less than the pattern buffer's re_nsub
+	   field.  Then followed by one byte with the number of groups
+	   inner to this one.  (This last has to be part of the
+	   start_memory only because we need it in the on_failure_jump
+	   of re_match_2.)  */
   start_memory,
 
-        /* Stop remembering the text that is matched and store it in a
-           memory register.  Followed by one byte with the register
-           number, in the range 0 to one less than `re_nsub' in the
-           pattern buffer, and one byte with the number of inner groups,
-           just like `start_memory'.  (We need the number of inner
-           groups here because we don't have any easy way of finding the
-           corresponding start_memory when we're at a stop_memory.)  */
+	/* Stop remembering the text that is matched and store it in a
+	   memory register.  Followed by one byte with the register
+	   number, in the range 0 to one less than `re_nsub' in the
+	   pattern buffer, and one byte with the number of inner groups,
+	   just like `start_memory'.  (We need the number of inner
+	   groups here because we don't have any easy way of finding the
+	   corresponding start_memory when we're at a stop_memory.)  */
   stop_memory,
 
-        /* Match a duplicate of something remembered. Followed by one
-           byte containing the register number.  */
+	/* Match a duplicate of something remembered. Followed by one
+	   byte containing the register number.	 */
   duplicate,
 
-        /* Fail unless at beginning of line.  */
+	/* Fail unless at beginning of line.  */
   begline,
 
-        /* Fail unless at end of line.  */
+	/* Fail unless at end of line.	*/
   endline,
 
-        /* Succeeds if at beginning of buffer (if emacs) or at beginning
-           of string to be matched (if not).  */
+	/* Succeeds if at beginning of buffer (if emacs) or at beginning
+	   of string to be matched (if not).  */
   begbuf,
 
-        /* Analogously, for end of buffer/string.  */
+	/* Analogously, for end of buffer/string.  */
   endbuf,
 
-        /* Followed by two byte relative address to which to jump.  */
+	/* Followed by two byte relative address to which to jump.  */
   jump,
 
 	/* Same as jump, but marks the end of an alternative.  */
   jump_past_alt,
 
-        /* Followed by two-byte relative address of place to resume at
-           in case of failure.  */
+	/* Followed by two-byte relative address of place to resume at
+	   in case of failure.	*/
   on_failure_jump,
 
-        /* Like on_failure_jump, but pushes a placeholder instead of the
-           current string position when executed.  */
+	/* Like on_failure_jump, but pushes a placeholder instead of the
+	   current string position when executed.  */
   on_failure_keep_string_jump,
 
-        /* Throw away latest failure point and then jump to following
-           two-byte relative address.  */
+	/* Throw away latest failure point and then jump to following
+	   two-byte relative address.  */
   pop_failure_jump,
 
-        /* Change to pop_failure_jump if know won't have to backtrack to
-           match; otherwise change to jump.  This is used to jump
-           back to the beginning of a repeat.  If what follows this jump
-           clearly won't match what the repeat does, such that we can be
-           sure that there is no use backtracking out of repetitions
-           already matched, then we change it to a pop_failure_jump.
-           Followed by two-byte address.  */
+	/* Change to pop_failure_jump if know won't have to backtrack to
+	   match; otherwise change to jump.  This is used to jump
+	   back to the beginning of a repeat.  If what follows this jump
+	   clearly won't match what the repeat does, such that we can be
+	   sure that there is no use backtracking out of repetitions
+	   already matched, then we change it to a pop_failure_jump.
+	   Followed by two-byte address.  */
   maybe_pop_jump,
 
-        /* Jump to following two-byte address, and push a dummy failure
-           point. This failure point will be thrown away if an attempt
-           is made to use it for a failure.  A `+' construct makes this
-           before the first repeat.  Also used as an intermediary kind
-           of jump when compiling an alternative.  */
+	/* Jump to following two-byte address, and push a dummy failure
+	   point. This failure point will be thrown away if an attempt
+	   is made to use it for a failure.  A `+' construct makes this
+	   before the first repeat.  Also used as an intermediary kind
+	   of jump when compiling an alternative.  */
   dummy_failure_jump,
 
 	/* Push a dummy failure point and continue.  Used at the end of
 	   alternatives.  */
   push_dummy_failure,
 
-        /* Followed by two-byte relative address and two-byte number n.
-           After matching N times, jump to the address upon failure.  */
+	/* Followed by two-byte relative address and two-byte number n.
+	   After matching N times, jump to the address upon failure.  */
   succeed_n,
 
-        /* Followed by two-byte relative address, and two-byte number n.
-           Jump to the address N times, then fail.  */
+	/* Followed by two-byte relative address, and two-byte number n.
+	   Jump to the address N times, then fail.  */
   jump_n,
 
-        /* Set the following two-byte relative address to the
-           subsequent two-byte number.  The address *includes* the two
-           bytes of number.  */
+	/* Set the following two-byte relative address to the
+	   subsequent two-byte number.	The address *includes* the two
+	   bytes of number.  */
   set_number_at,
 
   wordchar,	/* Matches any word-constituent character.  */
@@ -368,7 +483,7 @@
   wordend,	/* Succeeds if at word end.  */
 
   wordbound,	/* Succeeds if at a word boundary.  */
-  notwordbound	/* Succeeds if not at a word boundary.  */
+  notwordbound	/* Succeeds if not at a word boundary.	*/
 
 #ifdef emacs
   ,before_dot,	/* Succeeds if before point.  */
@@ -376,11 +491,21 @@
   after_dot,	/* Succeeds if after point.  */
 
 	/* Matches any character whose syntax is specified.  Followed by
-           a byte which contains a syntax code, e.g., Sword.  */
+	   a byte which contains a syntax code, e.g., Sword.  */
   syntaxspec,
 
 	/* Matches any character whose syntax is not that specified.  */
-  notsyntaxspec
+  notsyntaxspec,
+
+  /* Matches any character whose category-set contains the specified
+     category.	The operator is followed by a byte which contains a
+     category code (mnemonic ASCII character).	*/
+  categoryspec,
+
+  /* Matches any character whose category-set does not contain the
+     specified category.  The operator is followed by a byte which
+     contains the category code (mnemonic ASCII character).  */
+  notcategoryspec
 #endif /* emacs */
 } re_opcode_t;
 
@@ -424,7 +549,7 @@
   *dest += temp << 8;
 }
 
-#ifndef EXTRACT_MACROS /* To debug the macros.  */
+#ifndef EXTRACT_MACROS /* To debug the macros.	*/
 #undef EXTRACT_NUMBER
 #define EXTRACT_NUMBER(dest, src) extract_number (&dest, src)
 #endif /* not EXTRACT_MACROS */
@@ -437,7 +562,7 @@
 #define EXTRACT_NUMBER_AND_INCR(destination, source)			\
   do {									\
     EXTRACT_NUMBER (destination, source);				\
-    (source) += 2; 							\
+    (source) += 2;							\
   } while (0)
 
 #ifdef DEBUG
@@ -458,11 +583,98 @@
 
 #endif /* DEBUG */
 
+/* Store a multibyte character in three contiguous bytes starting
+   DESTINATION, and increment DESTINATION to the byte after where the
+   character is stored.	 Therefore, DESTINATION must be an lvalue.  */
+
+#define STORE_CHARACTER_AND_INCR(destination, character)	\
+  do {								\
+    (destination)[0] = (character) & 0377;			\
+    (destination)[1] = ((character) >> 8) & 0377;		\
+    (destination)[2] = (character) >> 16;			\
+    (destination) += 3;						\
+  } while (0)
+
+/* Put into DESTINATION a character stored in three contiguous bytes
+   starting at SOURCE.	*/
+
+#define EXTRACT_CHARACTER(destination, source)	\
+  do {						\
+    (destination) = ((source)[0]		\
+		     | ((source)[1] << 8)	\
+		     | ((source)[2] << 16));	\
+  } while (0)
+
+
+/* Macros for charset. */
+
+/* Size of bitmap of charset P in bytes.  P is a start of charset,
+   i.e. *P is (re_opcode_t) charset or (re_opcode_t) charset_not.  */
+#define CHARSET_BITMAP_SIZE(p) ((p)[1] & 0x7F)
+
+/* Nonzero if charset P has range table.  */
+#define CHARSET_RANGE_TABLE_EXISTS_P(p)	 ((p)[1] & 0x80)
+
+/* Return the address of range table of charset P.  But not the start
+   of table itself, but the before where the number of ranges is
+   stored.  `2 +' means to skip re_opcode_t and size of bitmap.	 */
+#define CHARSET_RANGE_TABLE(p) (&(p)[2 + CHARSET_BITMAP_SIZE (p)])
+
+/* Test if C is listed in the bitmap of charset P.  */
+#define CHARSET_LOOKUP_BITMAP(p, c)				\
+  ((c) < CHARSET_BITMAP_SIZE (p) * BYTEWIDTH			\
+   && (p)[2 + (c) / BYTEWIDTH] & (1 << ((c) % BYTEWIDTH)))
+
+/* Return the address of end of RANGE_TABLE.  COUNT is number of
+   ranges (which is a pair of (start, end)) in the RANGE_TABLE.	 `* 2'
+   is start of range and end of range.	`* 3' is size of each start
+   and end.  */
+#define CHARSET_RANGE_TABLE_END(range_table, count)	\
+  ((range_table) + (count) * 2 * 3)
+
+/* Test if C is in RANGE_TABLE.	 A flag NOT is negated if C is in.
+   COUNT is number of ranges in RANGE_TABLE.  */
+#define CHARSET_LOOKUP_RANGE_TABLE_RAW(not, c, range_table, count)	\
+  do									\
+    {									\
+      int range_start, range_end;					\
+      unsigned char *p;							\
+      unsigned char *range_table_end					\
+	= CHARSET_RANGE_TABLE_END ((range_table), (count));		\
+									\
+      for (p = (range_table); p < range_table_end; p += 2 * 3)		\
+	{								\
+	  EXTRACT_CHARACTER (range_start, p);				\
+	  EXTRACT_CHARACTER (range_end, p + 3);				\
+									\
+	  if (range_start <= (c) && (c) <= range_end)			\
+	    {								\
+	      (not) = !(not);						\
+	      break;							\
+	    }								\
+	}								\
+    }									\
+  while (0)
+
+/* Test if C is in range table of CHARSET.  The flag NOT is negated if
+   C is listed in it.  */
+#define CHARSET_LOOKUP_RANGE_TABLE(not, c, charset)			\
+  do									\
+    {									\
+      /* Number of ranges in range table. */				\
+      int count;							\
+      unsigned char *range_table = CHARSET_RANGE_TABLE (charset);	\
+									\
+      EXTRACT_NUMBER_AND_INCR (count, range_table);			\
+      CHARSET_LOOKUP_RANGE_TABLE_RAW ((not), (c), range_table, count);	\
+    }									\
+  while (0)
+
 /* If DEBUG is defined, Regex prints many voluminous messages about what
    it is doing (if the variable `debug' is nonzero).  If linked with the
    main program in `iregex.c', you can enter patterns and strings
    interactively.  And if linked with the main program in `main.c' and
-   the other test files, you can run the already-written tests.  */
+   the other test files, you can run the already-written tests.	 */
 
 #ifdef DEBUG
 
@@ -479,14 +691,12 @@
 #define DEBUG_PRINT2(x1, x2) if (debug) printf (x1, x2)
 #define DEBUG_PRINT3(x1, x2, x3) if (debug) printf (x1, x2, x3)
 #define DEBUG_PRINT4(x1, x2, x3, x4) if (debug) printf (x1, x2, x3, x4)
-#define DEBUG_PRINT_COMPILED_PATTERN(p, s, e) 				\
+#define DEBUG_PRINT_COMPILED_PATTERN(p, s, e)				\
   if (debug) print_partial_compiled_pattern (s, e)
 #define DEBUG_PRINT_DOUBLE_STRING(w, s1, sz1, s2, sz2)			\
   if (debug) print_double_string (w, s1, sz1, s2, sz2)
 
 
-extern void printchar ();
-
 /* Print the fastmap in human-readable form.  */
 
 void
@@ -501,18 +711,18 @@
       if (fastmap[i++])
 	{
 	  was_a_range = 0;
-          printchar (i - 1);
-          while (i < (1 << BYTEWIDTH)  &&  fastmap[i])
-            {
-              was_a_range = 1;
-              i++;
-            }
+	  putchar (i - 1);
+	  while (i < (1 << BYTEWIDTH)  &&  fastmap[i])
+	    {
+	      was_a_range = 1;
+	      i++;
+	    }
 	  if (was_a_range)
-            {
-              printf ("-");
-              printchar (i - 1);
-            }
-        }
+	    {
+	      printf ("-");
+	      putchar (i - 1);
+	    }
+	}
     }
   putchar ('\n');
 }
@@ -539,32 +749,34 @@
   /* Loop over pattern commands.  */
   while (p < pend)
     {
+      printf ("%d:\t", p - start);
+
       switch ((re_opcode_t) *p++)
 	{
-        case no_op:
-          printf ("/no_op");
-          break;
+	case no_op:
+	  printf ("/no_op");
+	  break;
 
 	case exactn:
 	  mcnt = *p++;
-          printf ("/exactn/%d", mcnt);
-          do
+	  printf ("/exactn/%d", mcnt);
+	  do
 	    {
-              putchar ('/');
-	      printchar (*p++);
-            }
-          while (--mcnt);
-          break;
+	      putchar ('/');
+	      putchar (*p++);
+	    }
+	  while (--mcnt);
+	  break;
 
 	case start_memory:
-          mcnt = *p++;
-          printf ("/start_memory/%d/%d", mcnt, *p++);
-          break;
+	  mcnt = *p++;
+	  printf ("/start_memory/%d/%d", mcnt, *p++);
+	  break;
 
 	case stop_memory:
-          mcnt = *p++;
+	  mcnt = *p++;
 	  printf ("/stop_memory/%d/%d", mcnt, *p++);
-          break;
+	  break;
 
 	case duplicate:
 	  printf ("/duplicate/%d", *p++);
@@ -575,102 +787,120 @@
 	  break;
 
 	case charset:
-        case charset_not:
-          {
-            register int c;
-
-            printf ("/charset%s",
-	            (re_opcode_t) *(p - 1) == charset_not ? "_not" : "");
-            
-            assert (p + *p < pend);
-
-            for (c = 0; c < *p; c++)
-              {
-                unsigned bit;
-                unsigned char map_byte = p[1 + c];
-                
-                putchar ('/');
-
-		for (bit = 0; bit < BYTEWIDTH; bit++)
-                  if (map_byte & (1 << bit))
-                    printchar (c * BYTEWIDTH + bit);
-              }
+	case charset_not:
+	  {
+	    register int c, last = -100;
+	    register int in_range = 0;
+
+	    printf ("/charset [%s",
+		    (re_opcode_t) *(p - 1) == charset_not ? "^" : "");
+
+	    assert (p + *p < pend);
+
+	    for (c = 0; c < 256; c++)
+	      if (c / 8 < *p
+		  && (p[1 + (c/8)] & (1 << (c % 8))))
+		{
+		  /* Are we starting a range?  */
+		  if (last + 1 == c && ! in_range)
+		    {
+		      putchar ('-');
+		      in_range = 1;
+		    }
+		  /* Have we broken a range?  */
+		  else if (last + 1 != c && in_range)
+	      {
+		      putchar (last);
+		      in_range = 0;
+		    }
+
+		  if (! in_range)
+		    putchar (c);
+
+		  last = c;
+	      }
+
+	    if (in_range)
+	      putchar (last);
+
+	    putchar (']');
+
 	    p += 1 + *p;
-	    break;
 	  }
+	  break;
 
 	case begline:
 	  printf ("/begline");
-          break;
+	  break;
 
 	case endline:
-          printf ("/endline");
-          break;
+	  printf ("/endline");
+	  break;
 
 	case on_failure_jump:
-          extract_number_and_incr (&mcnt, &p);
-  	  printf ("/on_failure_jump/0/%d", mcnt);
-          break;
+	  extract_number_and_incr (&mcnt, &p);
+	  printf ("/on_failure_jump to %d", p + mcnt - start);
+	  break;
 
 	case on_failure_keep_string_jump:
-          extract_number_and_incr (&mcnt, &p);
-  	  printf ("/on_failure_keep_string_jump/0/%d", mcnt);
-          break;
+	  extract_number_and_incr (&mcnt, &p);
+	  printf ("/on_failure_keep_string_jump to %d", p + mcnt - start);
+	  break;
 
 	case dummy_failure_jump:
-          extract_number_and_incr (&mcnt, &p);
-  	  printf ("/dummy_failure_jump/0/%d", mcnt);
-          break;
+	  extract_number_and_incr (&mcnt, &p);
+	  printf ("/dummy_failure_jump to %d", p + mcnt - start);
+	  break;
 
 	case push_dummy_failure:
-          printf ("/push_dummy_failure");
-          break;
-          
-        case maybe_pop_jump:
-          extract_number_and_incr (&mcnt, &p);
-  	  printf ("/maybe_pop_jump/0/%d", mcnt);
+	  printf ("/push_dummy_failure");
 	  break;
 
-        case pop_failure_jump:
+	case maybe_pop_jump:
 	  extract_number_and_incr (&mcnt, &p);
-  	  printf ("/pop_failure_jump/0/%d", mcnt);
-	  break;          
-          
-        case jump_past_alt:
+	  printf ("/maybe_pop_jump to %d", p + mcnt - start);
+	  break;
+
+	case pop_failure_jump:
 	  extract_number_and_incr (&mcnt, &p);
-  	  printf ("/jump_past_alt/0/%d", mcnt);
-	  break;          
-          
-        case jump:
+	  printf ("/pop_failure_jump to %d", p + mcnt - start);
+	  break;
+
+	case jump_past_alt:
 	  extract_number_and_incr (&mcnt, &p);
-  	  printf ("/jump/0/%d", mcnt);
+	  printf ("/jump_past_alt to %d", p + mcnt - start);
 	  break;
 
-        case succeed_n:
-          extract_number_and_incr (&mcnt, &p);
-          extract_number_and_incr (&mcnt2, &p);
- 	  printf ("/succeed_n/0/%d/0/%d", mcnt, mcnt2);
-          break;
+	case jump:
+	  extract_number_and_incr (&mcnt, &p);
+	  printf ("/jump to %d", p + mcnt - start);
+	  break;
 
-        case jump_n:
-          extract_number_and_incr (&mcnt, &p);
-          extract_number_and_incr (&mcnt2, &p);
- 	  printf ("/jump_n/0/%d/0/%d", mcnt, mcnt2);
-          break;
+	case succeed_n:
+	  extract_number_and_incr (&mcnt, &p);
+	  extract_number_and_incr (&mcnt2, &p);
+	  printf ("/succeed_n to %d, %d times", p + mcnt - start, mcnt2);
+	  break;
 
-        case set_number_at:
-          extract_number_and_incr (&mcnt, &p);
-          extract_number_and_incr (&mcnt2, &p);
- 	  printf ("/set_number_at/0/%d/0/%d", mcnt, mcnt2);
-          break;
+	case jump_n:
+	  extract_number_and_incr (&mcnt, &p);
+	  extract_number_and_incr (&mcnt2, &p);
+	  printf ("/jump_n to %d, %d times", p + mcnt - start, mcnt2);
+	  break;
+
+	case set_number_at:
+	  extract_number_and_incr (&mcnt, &p);
+	  extract_number_and_incr (&mcnt2, &p);
+	  printf ("/set_number_at location %d to %d", p + mcnt - start, mcnt2);
+	  break;
 
-        case wordbound:
+	case wordbound:
 	  printf ("/wordbound");
 	  break;
 
 	case notwordbound:
 	  printf ("/notwordbound");
-          break;
+	  break;
 
 	case wordbeg:
 	  printf ("/wordbeg");
@@ -682,24 +912,24 @@
 #ifdef emacs
 	case before_dot:
 	  printf ("/before_dot");
-          break;
+	  break;
 
 	case at_dot:
 	  printf ("/at_dot");
-          break;
+	  break;
 
 	case after_dot:
 	  printf ("/after_dot");
-          break;
+	  break;
 
 	case syntaxspec:
-          printf ("/syntaxspec");
+	  printf ("/syntaxspec");
 	  mcnt = *p++;
 	  printf ("/%d", mcnt);
-          break;
+	  break;
 
 	case notsyntaxspec:
-          printf ("/notsyntaxspec");
+	  printf ("/notsyntaxspec");
 	  mcnt = *p++;
 	  printf ("/%d", mcnt);
 	  break;
@@ -707,25 +937,28 @@
 
 	case wordchar:
 	  printf ("/wordchar");
-          break;
+	  break;
 
 	case notwordchar:
 	  printf ("/notwordchar");
-          break;
+	  break;
 
 	case begbuf:
 	  printf ("/begbuf");
-          break;
+	  break;
 
 	case endbuf:
 	  printf ("/endbuf");
-          break;
+	  break;
 
-        default:
-          printf ("?%d", *(p-1));
+	default:
+	  printf ("?%d", *(p-1));
 	}
+
+      putchar ('\n');
     }
-  printf ("/\n");
+
+  printf ("%d:\tend of pattern.\n", p - start);
 }
 
 
@@ -771,15 +1004,15 @@
   else
     {
       if (FIRST_STRING_P (where))
-        {
-          for (this_char = where - string1; this_char < size1; this_char++)
-            printchar (string1[this_char]);
+	{
+	  for (this_char = where - string1; this_char < size1; this_char++)
+	    putchar (string1[this_char]);
 
-          where = string2;
-        }
+	  where = string2;
+	}
 
       for (this_char = where - string2; this_char < size2; this_char++)
-        printchar (string2[this_char]);
+	putchar (string2[this_char]);
     }
 }
 
@@ -801,7 +1034,9 @@
 /* Set by `re_set_syntax' to the current regexp syntax to recognize.  Can
    also be assigned to arbitrarily: each pattern buffer stores its own
    syntax, so it can be changed between regex compilations.  */
-reg_syntax_t re_syntax_options = RE_SYNTAX_EMACS;
+/* This has no initializer because initialized variables in Emacs
+   become read-only after dumping.  */
+reg_syntax_t re_syntax_options;
 
 
 /* Specify the precise syntax of regexps for compilation.  This provides
@@ -809,7 +1044,7 @@
    different, incompatible syntaxes.
 
    The argument SYNTAX is a bit mask comprised of the various bits
-   defined in regex.h.  We return the old syntax.  */
+   defined in regex.h.	We return the old syntax.  */
 
 reg_syntax_t
 re_set_syntax (syntax)
@@ -822,95 +1057,550 @@
 }
 
 /* This table gives an error message for each of the error codes listed
-   in regex.h.  Obviously the order here has to be same as there.  */
+   in regex.h.	Obviously the order here has to be same as there.
+   POSIX doesn't require that we do anything for REG_NOERROR,
+   but why not be nice?	 */
 
-static const char *re_error_msg[] =
-  { NULL,					/* REG_NOERROR */
-    "No match",					/* REG_NOMATCH */
-    "Invalid regular expression",		/* REG_BADPAT */
-    "Invalid collation character",		/* REG_ECOLLATE */
-    "Invalid character class name",		/* REG_ECTYPE */
-    "Trailing backslash",			/* REG_EESCAPE */
-    "Invalid back reference",			/* REG_ESUBREG */
-    "Unmatched [ or [^",			/* REG_EBRACK */
-    "Unmatched ( or \\(",			/* REG_EPAREN */
-    "Unmatched \\{",				/* REG_EBRACE */
-    "Invalid content of \\{\\}",		/* REG_BADBR */
-    "Invalid range end",			/* REG_ERANGE */
-    "Memory exhausted",				/* REG_ESPACE */
-    "Invalid preceding regular expression",	/* REG_BADRPT */
-    "Premature end of regular expression",	/* REG_EEND */
-    "Regular expression too big",		/* REG_ESIZE */
-    "Unmatched ) or \\)",			/* REG_ERPAREN */
+static const char *re_error_msgid[] =
+  {
+    gettext_noop ("Success"),	/* REG_NOERROR */
+    gettext_noop ("No match"),	/* REG_NOMATCH */
+    gettext_noop ("Invalid regular expression"), /* REG_BADPAT */
+    gettext_noop ("Invalid collation character"), /* REG_ECOLLATE */
+    gettext_noop ("Invalid character class name"), /* REG_ECTYPE */
+    gettext_noop ("Trailing backslash"), /* REG_EESCAPE */
+    gettext_noop ("Invalid back reference"), /* REG_ESUBREG */
+    gettext_noop ("Unmatched [ or [^"),	/* REG_EBRACK */
+    gettext_noop ("Unmatched ( or \\("), /* REG_EPAREN */
+    gettext_noop ("Unmatched \\{"), /* REG_EBRACE */
+    gettext_noop ("Invalid content of \\{\\}"), /* REG_BADBR */
+    gettext_noop ("Invalid range end"),	/* REG_ERANGE */
+    gettext_noop ("Memory exhausted"), /* REG_ESPACE */
+    gettext_noop ("Invalid preceding regular expression"), /* REG_BADRPT */
+    gettext_noop ("Premature end of regular expression"), /* REG_EEND */
+    gettext_noop ("Regular expression too big"), /* REG_ESIZE */
+    gettext_noop ("Unmatched ) or \\)"), /* REG_ERPAREN */
   };
 
-/* Subroutine declarations and macros for regex_compile.  */
+/* Avoiding alloca during matching, to placate r_alloc.	 */
 
-static void store_op1 (), store_op2 ();
-static void insert_op1 (), insert_op2 ();
-static boolean at_begline_loc_p (), at_endline_loc_p ();
-static boolean group_in_compile_stack ();
-static reg_errcode_t compile_range ();
+/* Define MATCH_MAY_ALLOCATE unless we need to make sure that the
+   searching and matching functions should not call alloca.  On some
+   systems, alloca is implemented in terms of malloc, and if we're
+   using the relocating allocator routines, then malloc could cause a
+   relocation, which might (if the strings being searched are in the
+   ralloc heap) shift the data out from underneath the regexp
+   routines.
+
+   Here's another reason to avoid allocation: Emacs
+   processes input from X in a signal handler; processing X input may
+   call malloc; if input arrives while a matching routine is calling
+   malloc, then we're scrod.  But Emacs can't just block input while
+   calling matching routines; then we don't notice interrupts when
+   they come in.  So, Emacs blocks input around all regexp calls
+   except the matching calls, which it leaves unprotected, in the
+   faith that they will not malloc.  */
 
-/* Fetch the next character in the uncompiled pattern---translating it 
-   if necessary.  Also cast from a signed character in the constant
-   string passed to us by the user to an unsigned char that we can use
-   as an array index (in, e.g., `translate').  */
-#define PATFETCH(c)							\
-  do {if (p == pend) return REG_EEND;					\
-    c = (unsigned char) *p++;						\
-    if (translate) c = translate[c]; 					\
-  } while (0)
+/* Normally, this is fine.  */
+#define MATCH_MAY_ALLOCATE
 
-/* Fetch the next character in the uncompiled pattern, with no
-   translation.  */
-#define PATFETCH_RAW(c)							\
-  do {if (p == pend) return REG_EEND;					\
-    c = (unsigned char) *p++; 						\
-  } while (0)
+/* When using GNU C, we are not REALLY using the C alloca, no matter
+   what config.h may say.  So don't take precautions for it.  */
+#ifdef __GNUC__
+#undef C_ALLOCA
+#endif
 
-/* Go backwards one character in the pattern.  */
-#define PATUNFETCH p--
+/* The match routines may not allocate if (1) they would do it with malloc
+   and (2) it's not safe for them to use malloc.
+   Note that if REL_ALLOC is defined, matching would not use malloc for the
+   failure stack, but we would still use it for the register vectors;
+   so REL_ALLOC should not affect this.	 */
+#if (defined (C_ALLOCA) || defined (REGEX_MALLOC)) && defined (emacs)
+#undef MATCH_MAY_ALLOCATE
+#endif
 
+
+/* Failure stack declarations and macros; both re_compile_fastmap and
+   re_match_2 use a failure stack.  These have to be macros because of
+   REGEX_ALLOCATE_STACK.  */
 
-/* If `translate' is non-null, return translate[D], else just D.  We
-   cast the subscript to translate because some data is declared as
-   `char *', to avoid warnings when a string constant is passed.  But
-   when we use a character as a subscript we must make it unsigned.  */
-#define TRANSLATE(d) (translate ? translate[(unsigned char) (d)] : (d))
 
+/* Approximate number of failure points for which to initially allocate space
+   when matching.  If this number is exceeded, we allocate more
+   space, so it is not a hard limit.  */
+#ifndef INIT_FAILURE_ALLOC
+#define INIT_FAILURE_ALLOC 20
+#endif
 
-/* Macros for outputting the compiled pattern into `buffer'.  */
+/* Roughly the maximum number of failure points on the stack.  Would be
+   exactly that if always used TYPICAL_FAILURE_SIZE items each time we failed.
+   This is a variable only so users of regex can assign to it; we never
+   change it ourselves.	 */
+#if defined (MATCH_MAY_ALLOCATE)
+/* Note that 4400 is enough to cause a crash on Alpha OSF/1,
+   whose default stack limit is 2mb.  In order for a larger
+   value to work reliably, you have to try to make it accord
+   with the process stack limit.  */
+int re_max_failures = 40000;
+#else
+int re_max_failures = 4000;
+#endif
 
-/* If the buffer isn't allocated when it comes in, use this.  */
-#define INIT_BUF_SIZE  32
+union fail_stack_elt
+{
+  unsigned char *pointer;
+  int integer;
+};
 
-/* Make sure we have at least N more bytes of space in buffer.  */
-#define GET_BUFFER_SPACE(n)						\
-    while (b - bufp->buffer + (n) > bufp->allocated)			\
-      EXTEND_BUFFER ()
+typedef union fail_stack_elt fail_stack_elt_t;
 
-/* Make sure we have one more byte of buffer space and then add C to it.  */
-#define BUF_PUSH(c)							\
-  do {									\
-    GET_BUFFER_SPACE (1);						\
-    *b++ = (unsigned char) (c);						\
-  } while (0)
+typedef struct
+{
+  fail_stack_elt_t *stack;
+  unsigned size;
+  unsigned avail;			/* Offset of next open position.  */
+} fail_stack_type;
 
+#define FAIL_STACK_EMPTY()     (fail_stack.avail == 0)
+#define FAIL_STACK_PTR_EMPTY() (fail_stack_ptr->avail == 0)
+#define FAIL_STACK_FULL()      (fail_stack.avail == fail_stack.size)
 
-/* Ensure we have two more bytes of buffer space and then append C1 and C2.  */
-#define BUF_PUSH_2(c1, c2)						\
-  do {									\
-    GET_BUFFER_SPACE (2);						\
-    *b++ = (unsigned char) (c1);					\
-    *b++ = (unsigned char) (c2);					\
-  } while (0)
 
+/* Define macros to initialize and free the failure stack.
+   Do `return -2' if the alloc fails.  */
 
-/* As with BUF_PUSH_2, except for three bytes.  */
-#define BUF_PUSH_3(c1, c2, c3)						\
+#ifdef MATCH_MAY_ALLOCATE
+#define INIT_FAIL_STACK()						\
   do {									\
-    GET_BUFFER_SPACE (3);						\
+    fail_stack.stack = (fail_stack_elt_t *)				\
+      REGEX_ALLOCATE_STACK (INIT_FAILURE_ALLOC * TYPICAL_FAILURE_SIZE	\
+			    * sizeof (fail_stack_elt_t));		\
+									\
+    if (fail_stack.stack == NULL)					\
+      return -2;							\
+									\
+    fail_stack.size = INIT_FAILURE_ALLOC;				\
+    fail_stack.avail = 0;						\
+  } while (0)
+
+#define RESET_FAIL_STACK()  REGEX_FREE_STACK (fail_stack.stack)
+#else
+#define INIT_FAIL_STACK()						\
+  do {									\
+    fail_stack.avail = 0;						\
+  } while (0)
+
+#define RESET_FAIL_STACK()
+#endif
+
+
+/* Double the size of FAIL_STACK, up to a limit
+   which allows approximately `re_max_failures' items.
+
+   Return 1 if succeeds, and 0 if either ran out of memory
+   allocating space for it or it was already too large.
+
+   REGEX_REALLOCATE_STACK requires `destination' be declared.	*/
+
+/* Factor to increase the failure stack size by
+   when we increase it.
+   This used to be 2, but 2 was too wasteful
+   because the old discarded stacks added up to as much space
+   were as ultimate, maximum-size stack.  */
+#define FAIL_STACK_GROWTH_FACTOR 4
+
+#define GROW_FAIL_STACK(fail_stack)					\
+  (((fail_stack).size * sizeof (fail_stack_elt_t)			\
+    >= re_max_failures * TYPICAL_FAILURE_SIZE)				\
+   ? 0									\
+   : ((fail_stack).stack						\
+      = (fail_stack_elt_t *)						\
+	REGEX_REALLOCATE_STACK ((fail_stack).stack,			\
+	  (fail_stack).size * sizeof (fail_stack_elt_t),		\
+	  MIN (re_max_failures * TYPICAL_FAILURE_SIZE,			\
+	       ((fail_stack).size * sizeof (fail_stack_elt_t)		\
+		* FAIL_STACK_GROWTH_FACTOR))),				\
+									\
+      (fail_stack).stack == NULL					\
+      ? 0								\
+      : ((fail_stack).size						\
+	 = (MIN (re_max_failures * TYPICAL_FAILURE_SIZE,		\
+		 ((fail_stack).size * sizeof (fail_stack_elt_t)		\
+		  * FAIL_STACK_GROWTH_FACTOR))				\
+	    / sizeof (fail_stack_elt_t)),				\
+	 1)))
+
+
+/* Push pointer POINTER on FAIL_STACK.
+   Return 1 if was able to do so and 0 if ran out of memory allocating
+   space to do so.  */
+#define PUSH_PATTERN_OP(POINTER, FAIL_STACK)				\
+  ((FAIL_STACK_FULL ()							\
+    && !GROW_FAIL_STACK (FAIL_STACK))					\
+   ? 0									\
+   : ((FAIL_STACK).stack[(FAIL_STACK).avail++].pointer = POINTER,	\
+      1))
+
+/* Push a pointer value onto the failure stack.
+   Assumes the variable `fail_stack'.  Probably should only
+   be called from within `PUSH_FAILURE_POINT'.	*/
+#define PUSH_FAILURE_POINTER(item)					\
+  fail_stack.stack[fail_stack.avail++].pointer = (unsigned char *) (item)
+
+/* This pushes an integer-valued item onto the failure stack.
+   Assumes the variable `fail_stack'.  Probably should only
+   be called from within `PUSH_FAILURE_POINT'.	*/
+#define PUSH_FAILURE_INT(item)					\
+  fail_stack.stack[fail_stack.avail++].integer = (item)
+
+/* Push a fail_stack_elt_t value onto the failure stack.
+   Assumes the variable `fail_stack'.  Probably should only
+   be called from within `PUSH_FAILURE_POINT'.	*/
+#define PUSH_FAILURE_ELT(item)					\
+  fail_stack.stack[fail_stack.avail++] =  (item)
+
+/* These three POP... operations complement the three PUSH... operations.
+   All assume that `fail_stack' is nonempty.  */
+#define POP_FAILURE_POINTER() fail_stack.stack[--fail_stack.avail].pointer
+#define POP_FAILURE_INT() fail_stack.stack[--fail_stack.avail].integer
+#define POP_FAILURE_ELT() fail_stack.stack[--fail_stack.avail]
+
+/* Used to omit pushing failure point id's when we're not debugging.  */
+#ifdef DEBUG
+#define DEBUG_PUSH PUSH_FAILURE_INT
+#define DEBUG_POP(item_addr) *(item_addr) = POP_FAILURE_INT ()
+#else
+#define DEBUG_PUSH(item)
+#define DEBUG_POP(item_addr)
+#endif
+
+
+/* Push the information about the state we will need
+   if we ever fail back to it.
+
+   Requires variables fail_stack, regstart, regend, reg_info, and
+   num_regs be declared.  GROW_FAIL_STACK requires `destination' be
+   declared.
+
+   Does `return FAILURE_CODE' if runs out of memory.  */
+
+#define PUSH_FAILURE_POINT(pattern_place, string_place, failure_code)	\
+  do {									\
+    char *destination;							\
+    /* Must be int, so when we don't save any registers, the arithmetic	\
+       of 0 + -1 isn't done as unsigned.  */				\
+    int this_reg;							\
+									\
+    DEBUG_STATEMENT (failure_id++);					\
+    DEBUG_STATEMENT (nfailure_points_pushed++);				\
+    DEBUG_PRINT2 ("\nPUSH_FAILURE_POINT #%u:\n", failure_id);		\
+    DEBUG_PRINT2 ("  Before push, next avail: %d\n", (fail_stack).avail);\
+    DEBUG_PRINT2 ("			size: %d\n", (fail_stack).size);\
+									\
+    DEBUG_PRINT2 ("  slots needed: %d\n", NUM_FAILURE_ITEMS);		\
+    DEBUG_PRINT2 ("	available: %d\n", REMAINING_AVAIL_SLOTS);	\
+									\
+    /* Ensure we have enough space allocated for what we will push.  */	\
+    while (REMAINING_AVAIL_SLOTS < NUM_FAILURE_ITEMS)			\
+      {									\
+	if (!GROW_FAIL_STACK (fail_stack))				\
+	  return failure_code;						\
+									\
+	DEBUG_PRINT2 ("\n  Doubled stack; size now: %d\n",		\
+		       (fail_stack).size);				\
+	DEBUG_PRINT2 ("	 slots available: %d\n", REMAINING_AVAIL_SLOTS);\
+      }									\
+									\
+    /* Push the info, starting with the registers.  */			\
+    DEBUG_PRINT1 ("\n");						\
+									\
+    if (1)								\
+      for (this_reg = lowest_active_reg; this_reg <= highest_active_reg; \
+	   this_reg++)							\
+	{								\
+	  DEBUG_PRINT2 ("  Pushing reg: %d\n", this_reg);		\
+	  DEBUG_STATEMENT (num_regs_pushed++);				\
+									\
+	  DEBUG_PRINT2 ("    start: 0x%x\n", regstart[this_reg]);	\
+	  PUSH_FAILURE_POINTER (regstart[this_reg]);			\
+									\
+	  DEBUG_PRINT2 ("    end: 0x%x\n", regend[this_reg]);		\
+	  PUSH_FAILURE_POINTER (regend[this_reg]);			\
+									\
+	  DEBUG_PRINT2 ("    info: 0x%x\n      ", reg_info[this_reg]);	\
+	  DEBUG_PRINT2 (" match_null=%d",				\
+			REG_MATCH_NULL_STRING_P (reg_info[this_reg]));	\
+	  DEBUG_PRINT2 (" active=%d", IS_ACTIVE (reg_info[this_reg]));	\
+	  DEBUG_PRINT2 (" matched_something=%d",			\
+			MATCHED_SOMETHING (reg_info[this_reg]));	\
+	  DEBUG_PRINT2 (" ever_matched=%d",				\
+			EVER_MATCHED_SOMETHING (reg_info[this_reg]));	\
+	  DEBUG_PRINT1 ("\n");						\
+	  PUSH_FAILURE_ELT (reg_info[this_reg].word);			\
+	}								\
+									\
+    DEBUG_PRINT2 ("  Pushing  low active reg: %d\n", lowest_active_reg);\
+    PUSH_FAILURE_INT (lowest_active_reg);				\
+									\
+    DEBUG_PRINT2 ("  Pushing high active reg: %d\n", highest_active_reg);\
+    PUSH_FAILURE_INT (highest_active_reg);				\
+									\
+    DEBUG_PRINT2 ("  Pushing pattern 0x%x: ", pattern_place);		\
+    DEBUG_PRINT_COMPILED_PATTERN (bufp, pattern_place, pend);		\
+    PUSH_FAILURE_POINTER (pattern_place);				\
+									\
+    DEBUG_PRINT2 ("  Pushing string 0x%x: `", string_place);		\
+    DEBUG_PRINT_DOUBLE_STRING (string_place, string1, size1, string2,	\
+				 size2);				\
+    DEBUG_PRINT1 ("'\n");						\
+    PUSH_FAILURE_POINTER (string_place);				\
+									\
+    DEBUG_PRINT2 ("  Pushing failure id: %u\n", failure_id);		\
+    DEBUG_PUSH (failure_id);						\
+  } while (0)
+
+/* This is the number of items that are pushed and popped on the stack
+   for each register.  */
+#define NUM_REG_ITEMS  3
+
+/* Individual items aside from the registers.  */
+#ifdef DEBUG
+#define NUM_NONREG_ITEMS 5 /* Includes failure point id.  */
+#else
+#define NUM_NONREG_ITEMS 4
+#endif
+
+/* Estimate the size of data pushed by a typical failure stack entry.
+   An estimate is all we need, because all we use this for
+   is to choose a limit for how big to make the failure stack.  */
+
+#define TYPICAL_FAILURE_SIZE 20
+
+/* This is how many items we actually use for a failure point.
+   It depends on the regexp.  */
+#define NUM_FAILURE_ITEMS				\
+  (((0							\
+     ? 0 : highest_active_reg - lowest_active_reg + 1)	\
+    * NUM_REG_ITEMS)					\
+   + NUM_NONREG_ITEMS)
+
+/* How many items can still be added to the stack without overflowing it.  */
+#define REMAINING_AVAIL_SLOTS ((fail_stack).size - (fail_stack).avail)
+
+
+/* Pops what PUSH_FAIL_STACK pushes.
+
+   We restore into the parameters, all of which should be lvalues:
+     STR -- the saved data position.
+     PAT -- the saved pattern position.
+     LOW_REG, HIGH_REG -- the highest and lowest active registers.
+     REGSTART, REGEND -- arrays of string positions.
+     REG_INFO -- array of information about each subexpression.
+
+   Also assumes the variables `fail_stack' and (if debugging), `bufp',
+   `pend', `string1', `size1', `string2', and `size2'.	*/
+
+#define POP_FAILURE_POINT(str, pat, low_reg, high_reg, regstart, regend, reg_info)\
+{									\
+  DEBUG_STATEMENT (fail_stack_elt_t failure_id;)			\
+  int this_reg;								\
+  const unsigned char *string_temp;					\
+									\
+  assert (!FAIL_STACK_EMPTY ());					\
+									\
+  /* Remove failure points and point to how many regs pushed.  */	\
+  DEBUG_PRINT1 ("POP_FAILURE_POINT:\n");				\
+  DEBUG_PRINT2 ("  Before pop, next avail: %d\n", fail_stack.avail);	\
+  DEBUG_PRINT2 ("		     size: %d\n", fail_stack.size);	\
+									\
+  assert (fail_stack.avail >= NUM_NONREG_ITEMS);			\
+									\
+  DEBUG_POP (&failure_id);						\
+  DEBUG_PRINT2 ("  Popping failure id: %u\n", failure_id);		\
+									\
+  /* If the saved string location is NULL, it came from an		\
+     on_failure_keep_string_jump opcode, and we want to throw away the	\
+     saved NULL, thus retaining our current position in the string.  */	\
+  string_temp = POP_FAILURE_POINTER ();					\
+  if (string_temp != NULL)						\
+    str = (const char *) string_temp;					\
+									\
+  DEBUG_PRINT2 ("  Popping string 0x%x: `", str);			\
+  DEBUG_PRINT_DOUBLE_STRING (str, string1, size1, string2, size2);	\
+  DEBUG_PRINT1 ("'\n");							\
+									\
+  pat = (unsigned char *) POP_FAILURE_POINTER ();			\
+  DEBUG_PRINT2 ("  Popping pattern 0x%x: ", pat);			\
+  DEBUG_PRINT_COMPILED_PATTERN (bufp, pat, pend);			\
+									\
+  /* Restore register info.  */						\
+  high_reg = (unsigned) POP_FAILURE_INT ();				\
+  DEBUG_PRINT2 ("  Popping high active reg: %d\n", high_reg);		\
+									\
+  low_reg = (unsigned) POP_FAILURE_INT ();				\
+  DEBUG_PRINT2 ("  Popping  low active reg: %d\n", low_reg);		\
+									\
+  if (1)								\
+    for (this_reg = high_reg; this_reg >= low_reg; this_reg--)		\
+      {									\
+	DEBUG_PRINT2 ("	   Popping reg: %d\n", this_reg);		\
+									\
+	reg_info[this_reg].word = POP_FAILURE_ELT ();			\
+	DEBUG_PRINT2 ("	     info: 0x%x\n", reg_info[this_reg]);	\
+									\
+	regend[this_reg] = (const char *) POP_FAILURE_POINTER ();	\
+	DEBUG_PRINT2 ("	     end: 0x%x\n", regend[this_reg]);		\
+									\
+	regstart[this_reg] = (const char *) POP_FAILURE_POINTER ();	\
+	DEBUG_PRINT2 ("	     start: 0x%x\n", regstart[this_reg]);	\
+      }									\
+  else									\
+    {									\
+      for (this_reg = highest_active_reg; this_reg > high_reg; this_reg--) \
+	{								\
+	  reg_info[this_reg].word.integer = 0;				\
+	  regend[this_reg] = 0;						\
+	  regstart[this_reg] = 0;					\
+	}								\
+      highest_active_reg = high_reg;					\
+    }									\
+									\
+  set_regs_matched_done = 0;						\
+  DEBUG_STATEMENT (nfailure_points_popped++);				\
+} /* POP_FAILURE_POINT */
+
+
+
+/* Structure for per-register (a.k.a. per-group) information.
+   Other register information, such as the
+   starting and ending positions (which are addresses), and the list of
+   inner groups (which is a bits list) are maintained in separate
+   variables.
+
+   We are making a (strictly speaking) nonportable assumption here: that
+   the compiler will pack our bit fields into something that fits into
+   the type of `word', i.e., is something that fits into one item on the
+   failure stack.  */
+
+typedef union
+{
+  fail_stack_elt_t word;
+  struct
+  {
+      /* This field is one if this group can match the empty string,
+	 zero if not.  If not yet determined,  `MATCH_NULL_UNSET_VALUE'.  */
+#define MATCH_NULL_UNSET_VALUE 3
+    unsigned match_null_string_p : 2;
+    unsigned is_active : 1;
+    unsigned matched_something : 1;
+    unsigned ever_matched_something : 1;
+  } bits;
+} register_info_type;
+
+#define REG_MATCH_NULL_STRING_P(R)  ((R).bits.match_null_string_p)
+#define IS_ACTIVE(R)  ((R).bits.is_active)
+#define MATCHED_SOMETHING(R)  ((R).bits.matched_something)
+#define EVER_MATCHED_SOMETHING(R)  ((R).bits.ever_matched_something)
+
+
+/* Call this when have matched a real character; it sets `matched' flags
+   for the subexpressions which we are currently inside.  Also records
+   that those subexprs have matched.  */
+#define SET_REGS_MATCHED()						\
+  do									\
+    {									\
+      if (!set_regs_matched_done)					\
+	{								\
+	  unsigned r;							\
+	  set_regs_matched_done = 1;					\
+	  for (r = lowest_active_reg; r <= highest_active_reg; r++)	\
+	    {								\
+	      MATCHED_SOMETHING (reg_info[r])				\
+		= EVER_MATCHED_SOMETHING (reg_info[r])			\
+		= 1;							\
+	    }								\
+	}								\
+    }									\
+  while (0)
+
+/* Registers are set to a sentinel when they haven't yet matched.  */
+static char reg_unset_dummy;
+#define REG_UNSET_VALUE (&reg_unset_dummy)
+#define REG_UNSET(e) ((e) == REG_UNSET_VALUE)
+
+/* Subroutine declarations and macros for regex_compile.  */
+
+static void store_op1 (), store_op2 ();
+static void insert_op1 (), insert_op2 ();
+static boolean at_begline_loc_p (), at_endline_loc_p ();
+static boolean group_in_compile_stack ();
+static reg_errcode_t compile_range ();
+
+/* Fetch the next character in the uncompiled pattern---translating it
+   if necessary.  Also cast from a signed character in the constant
+   string passed to us by the user to an unsigned char that we can use
+   as an array index (in, e.g., `translate').  */
+#ifndef PATFETCH
+#define PATFETCH(c)							\
+  do {if (p == pend) return REG_EEND;					\
+    c = (unsigned char) *p++;						\
+    if (RE_TRANSLATE_P (translate)) c = RE_TRANSLATE (translate, c);	\
+  } while (0)
+#endif
+
+/* Fetch the next character in the uncompiled pattern, with no
+   translation.	 */
+#define PATFETCH_RAW(c)							\
+  do {if (p == pend) return REG_EEND;					\
+    c = (unsigned char) *p++;						\
+  } while (0)
+
+/* Go backwards one character in the pattern.  */
+#define PATUNFETCH p--
+
+
+/* If `translate' is non-null, return translate[D], else just D.  We
+   cast the subscript to translate because some data is declared as
+   `char *', to avoid warnings when a string constant is passed.  But
+   when we use a character as a subscript we must make it unsigned.  */
+#ifndef TRANSLATE
+#define TRANSLATE(d) \
+  (RE_TRANSLATE_P (translate) \
+   ? (unsigned) RE_TRANSLATE (translate, (unsigned) (d)) : (d))
+#endif
+
+
+/* Macros for outputting the compiled pattern into `buffer'.  */
+
+/* If the buffer isn't allocated when it comes in, use this.  */
+#define INIT_BUF_SIZE  32
+
+/* Make sure we have at least N more bytes of space in buffer.	*/
+#define GET_BUFFER_SPACE(n)						\
+    while (b - bufp->buffer + (n) > bufp->allocated)			\
+      EXTEND_BUFFER ()
+
+/* Make sure we have one more byte of buffer space and then add C to it.  */
+#define BUF_PUSH(c)							\
+  do {									\
+    GET_BUFFER_SPACE (1);						\
+    *b++ = (unsigned char) (c);						\
+  } while (0)
+
+
+/* Ensure we have two more bytes of buffer space and then append C1 and C2.  */
+#define BUF_PUSH_2(c1, c2)						\
+  do {									\
+    GET_BUFFER_SPACE (2);						\
+    *b++ = (unsigned char) (c1);					\
+    *b++ = (unsigned char) (c2);					\
+  } while (0)
+
+
+/* As with BUF_PUSH_2, except for three bytes.	*/
+#define BUF_PUSH_3(c1, c2, c3)						\
+  do {									\
+    GET_BUFFER_SPACE (3);						\
     *b++ = (unsigned char) (c1);					\
     *b++ = (unsigned char) (c2);					\
     *b++ = (unsigned char) (c3);					\
@@ -918,7 +1608,7 @@
 
 
 /* Store a jump with opcode OP at LOC to location TO.  We store a
-   relative address offset by the three bytes the jump itself occupies.  */
+   relative address offset by the three bytes the jump itself occupies.	 */
 #define STORE_JUMP(op, loc, to) \
   store_op1 (op, loc, (to) - (loc) - 3)
 
@@ -926,7 +1616,7 @@
 #define STORE_JUMP2(op, loc, to, arg) \
   store_op2 (op, loc, (to) - (loc) - 3, arg)
 
-/* Like `STORE_JUMP', but for inserting.  Assume `b' is the buffer end.  */
+/* Like `STORE_JUMP', but for inserting.  Assume `b' is the buffer end.	 */
 #define INSERT_JUMP(op, loc, to) \
   insert_op1 (op, loc, (to) - (loc) - 3, b)
 
@@ -936,7 +1626,7 @@
 
 
 /* This is not an arbitrary limit: the arguments which represent offsets
-   into the pattern are two bytes long.  So if 2^16 bytes turns out to
+   into the pattern are two bytes long.	 So if 2^16 bytes turns out to
    be too small, many things would have to change.  */
 #define MAX_BUF_SIZE (1L << 16)
 
@@ -944,29 +1634,29 @@
 /* Extend the buffer by twice its current size via realloc and
    reset the pointers that pointed into the old block to point to the
    correct places in the new one.  If extending the buffer results in it
-   being larger than MAX_BUF_SIZE, then flag memory exhausted.  */
+   being larger than MAX_BUF_SIZE, then flag memory exhausted.	*/
 #define EXTEND_BUFFER()							\
-  do { 									\
+  do {									\
     unsigned char *old_buffer = bufp->buffer;				\
-    if (bufp->allocated == MAX_BUF_SIZE) 				\
+    if (bufp->allocated == MAX_BUF_SIZE)				\
       return REG_ESIZE;							\
     bufp->allocated <<= 1;						\
     if (bufp->allocated > MAX_BUF_SIZE)					\
-      bufp->allocated = MAX_BUF_SIZE; 					\
+      bufp->allocated = MAX_BUF_SIZE;					\
     bufp->buffer = (unsigned char *) realloc (bufp->buffer, bufp->allocated);\
     if (bufp->buffer == NULL)						\
       return REG_ESPACE;						\
     /* If the buffer moved, move all the pointers into it.  */		\
     if (old_buffer != bufp->buffer)					\
       {									\
-        b = (b - old_buffer) + bufp->buffer;				\
-        begalt = (begalt - old_buffer) + bufp->buffer;			\
-        if (fixup_alt_jump)						\
-          fixup_alt_jump = (fixup_alt_jump - old_buffer) + bufp->buffer;\
-        if (laststart)							\
-          laststart = (laststart - old_buffer) + bufp->buffer;		\
-        if (pending_exact)						\
-          pending_exact = (pending_exact - old_buffer) + bufp->buffer;	\
+	b = (b - old_buffer) + bufp->buffer;				\
+	begalt = (begalt - old_buffer) + bufp->buffer;			\
+	if (fixup_alt_jump)						\
+	  fixup_alt_jump = (fixup_alt_jump - old_buffer) + bufp->buffer;\
+	if (laststart)							\
+	  laststart = (laststart - old_buffer) + bufp->buffer;		\
+	if (pending_exact)						\
+	  pending_exact = (pending_exact - old_buffer) + bufp->buffer;	\
       }									\
   } while (0)
 
@@ -984,7 +1674,7 @@
 /* Macros for the compile stack.  */
 
 /* Since offsets can go either forwards or backwards, this type needs to
-   be able to hold values from -(MAX_BUF_SIZE - 1) to MAX_BUF_SIZE - 1.  */
+   be able to hold values from -(MAX_BUF_SIZE - 1) to MAX_BUF_SIZE - 1.	 */
 typedef int pattern_offset_t;
 
 typedef struct
@@ -1010,31 +1700,76 @@
 #define COMPILE_STACK_EMPTY  (compile_stack.avail == 0)
 #define COMPILE_STACK_FULL  (compile_stack.avail == compile_stack.size)
 
-/* The next available element.  */
+/* The next available element.	*/
 #define COMPILE_STACK_TOP (compile_stack.stack[compile_stack.avail])
 
 
+/* Structure to manage work area for range table.  */
+struct range_table_work_area
+{
+  int *table;			/* actual work area.  */
+  int allocated;		/* allocated size for work area in bytes.  */
+  int used;			/* actually used size in words.	 */
+};
+
+/* Make sure that WORK_AREA can hold more N multibyte characters.  */
+#define EXTEND_RANGE_TABLE_WORK_AREA(work_area, n)			  \
+  do {									  \
+    if (((work_area).used + (n)) * sizeof (int) > (work_area).allocated)  \
+      {									  \
+	(work_area).allocated += 16 * sizeof (int);			  \
+	if ((work_area).table)						  \
+	  (work_area).table						  \
+	    = (int *) realloc ((work_area).table, (work_area).allocated); \
+	else								  \
+	  (work_area).table						  \
+	    = (int *) malloc ((work_area).allocated);			  \
+	if ((work_area).table == 0)					  \
+	  FREE_STACK_RETURN (REG_ESPACE);				  \
+      }									  \
+  } while (0)
+
+/* Set a range (RANGE_START, RANGE_END) to WORK_AREA.  */
+#define SET_RANGE_TABLE_WORK_AREA(work_area, range_start, range_end)	\
+  do {									\
+    EXTEND_RANGE_TABLE_WORK_AREA ((work_area), 2);			\
+    (work_area).table[(work_area).used++] = (range_start);		\
+    (work_area).table[(work_area).used++] = (range_end);		\
+  } while (0)
+
+/* Free allocated memory for WORK_AREA.	 */
+#define FREE_RANGE_TABLE_WORK_AREA(work_area)	\
+  do {						\
+    if ((work_area).table)			\
+      free ((work_area).table);			\
+  } while (0)
+
+#define CLEAR_RANGE_TABLE_WORK_USED(work_area) ((work_area).used = 0)
+#define RANGE_TABLE_WORK_USED(work_area) ((work_area).used)
+#define RANGE_TABLE_WORK_ELT(work_area, i) ((work_area).table[i])
+
+
 /* Set the bit for character C in a list.  */
-#define SET_LIST_BIT(c)                               \
-  (b[((unsigned char) (c)) / BYTEWIDTH]               \
+#define SET_LIST_BIT(c)				      \
+  (b[((unsigned char) (c)) / BYTEWIDTH]		      \
    |= 1 << (((unsigned char) c) % BYTEWIDTH))
 
 
 /* Get the next unsigned number in the uncompiled pattern.  */
-#define GET_UNSIGNED_NUMBER(num) 					\
+#define GET_UNSIGNED_NUMBER(num)					\
   { if (p != pend)							\
      {									\
-       PATFETCH (c); 							\
-       while (ISDIGIT (c)) 						\
-         { 								\
-           if (num < 0)							\
-              num = 0;							\
-           num = num * 10 + c - '0'; 					\
-           if (p == pend) 						\
-              break; 							\
-           PATFETCH (c);						\
-         } 								\
-       } 								\
+       PATFETCH (c);							\
+       while (ISDIGIT (c))						\
+	 {								\
+	   if (num < 0)							\
+	      num = 0;							\
+	   num = num * 10 + c - '0';					\
+	   if (p == pend)						\
+	      break;							\
+	   PATFETCH (c);						\
+	 }								\
+       }								\
     }
 
 #define CHAR_CLASS_MAX_LENGTH  6 /* Namely, `xdigit'.  */
@@ -1047,6 +1782,54 @@
     || STREQ (string, "punct") || STREQ (string, "graph")		\
     || STREQ (string, "cntrl") || STREQ (string, "blank"))
 
+#ifndef MATCH_MAY_ALLOCATE
+
+/* If we cannot allocate large objects within re_match_2_internal,
+   we make the fail stack and register vectors global.
+   The fail stack, we grow to the maximum size when a regexp
+   is compiled.
+   The register vectors, we adjust in size each time we
+   compile a regexp, according to the number of registers it needs.  */
+
+static fail_stack_type fail_stack;
+
+/* Size with which the following vectors are currently allocated.
+   That is so we can make them bigger as needed,
+   but never make them smaller.	 */
+static int regs_allocated_size;
+
+static const char **	 regstart, **	  regend;
+static const char ** old_regstart, ** old_regend;
+static const char **best_regstart, **best_regend;
+static register_info_type *reg_info;
+static const char **reg_dummy;
+static register_info_type *reg_info_dummy;
+
+/* Make the register vectors big enough for NUM_REGS registers,
+   but don't make them smaller.	 */
+
+static
+regex_grow_registers (num_regs)
+     int num_regs;
+{
+  if (num_regs > regs_allocated_size)
+    {
+      RETALLOC_IF (regstart,	 num_regs, const char *);
+      RETALLOC_IF (regend,	 num_regs, const char *);
+      RETALLOC_IF (old_regstart, num_regs, const char *);
+      RETALLOC_IF (old_regend,	 num_regs, const char *);
+      RETALLOC_IF (best_regstart, num_regs, const char *);
+      RETALLOC_IF (best_regend,	 num_regs, const char *);
+      RETALLOC_IF (reg_info,	 num_regs, register_info_type);
+      RETALLOC_IF (reg_dummy,	 num_regs, const char *);
+      RETALLOC_IF (reg_info_dummy, num_regs, register_info_type);
+
+      regs_allocated_size = num_regs;
+    }
+}
+
+#endif /* not MATCH_MAY_ALLOCATE */
+
 /* `regex_compile' compiles PATTERN (of length SIZE) according to SYNTAX.
    Returns one of error codes defined in `regex.h', or zero for success.
 
@@ -1065,6 +1848,14 @@
    The `fastmap' and `newline_anchor' fields are neither
    examined nor set.  */
 
+/* Return, freeing storage we allocated.  */
+#define FREE_STACK_RETURN(value)		\
+  do {							\
+    FREE_RANGE_TABLE_WORK_AREA (range_table_work);	\
+    free (compile_stack.stack);				\
+    return value;					\
+  } while (0)
+
 static reg_errcode_t
 regex_compile (pattern, size, syntax, bufp)
      const char *pattern;
@@ -1075,7 +1866,7 @@
   /* We fetch characters from PATTERN here.  Even though PATTERN is
      `char *' (i.e., signed), we declare these variables as unsigned, so
      they can be reliably used as array indices.  */
-  register unsigned char c, c1;
+  register unsigned int c, c1;
 
   /* A random temporary spot in PATTERN.  */
   const char *p1;
@@ -1087,11 +1878,16 @@
   compile_stack_type compile_stack;
 
   /* Points to the current (ending) position in the pattern.  */
+#ifdef AIX
+  /* `const' makes AIX compiler fail.  */
+  char *p = pattern;
+#else
   const char *p = pattern;
+#endif
   const char *pend = pattern + size;
 
   /* How to translate the characters in the pattern.  */
-  char *translate = bufp->translate;
+  RE_TRANSLATE_TYPE translate = bufp->translate;
 
   /* Address of the count-byte of the most recently inserted `exactn'
      command.  This makes it possible to tell if a new exact-match
@@ -1112,7 +1908,7 @@
   const char *beg_interval;
 
   /* Address of the place where a forward jump should go to the end of
-     the containing expression.  Each alternative of an `or' -- except the
+     the containing expression.	 Each alternative of an `or' -- except the
      last -- ends with a forward jump of this sort.  */
   unsigned char *fixup_alt_jump = 0;
 
@@ -1121,6 +1917,9 @@
      number is put in the stop_memory as the start_memory.  */
   regnum_t regnum = 0;
 
+  /* Work area for range table of charset.  */
+  struct range_table_work_area range_table_work;
+
 #ifdef DEBUG
   DEBUG_PRINT1 ("\nCompiling pattern: ");
   if (debug)
@@ -1128,7 +1927,7 @@
       unsigned debug_count;
 
       for (debug_count = 0; debug_count < size; debug_count++)
-        printchar (pattern[debug_count]);
+	putchar (pattern[debug_count]);
       putchar ('\n');
     }
 #endif /* DEBUG */
@@ -1141,6 +1940,9 @@
   compile_stack.size = INIT_COMPILE_STACK_SIZE;
   compile_stack.avail = 0;
 
+  range_table_work.table = 0;
+  range_table_work.allocated = 0;
+
   /* Initialize the pattern buffer.  */
   bufp->syntax = syntax;
   bufp->fastmap_accurate = 0;
@@ -1154,6 +1956,14 @@
   /* Always count groups, whether or not bufp->no_sub is set.  */
   bufp->re_nsub = 0;
 
+#ifdef emacs
+  /* bufp->multibyte is set before regex_compile is called, so don't alter
+     it. */
+#else  /* not emacs */
+  /* Nothing is recognized as a multibyte character.  */
+  bufp->multibyte = 0;
+#endif
+
 #if !defined (emacs) && !defined (SYNTAX_TABLE)
   /* Initialize the syntax table.  */
    init_syntax_once ();
@@ -1163,15 +1973,15 @@
     {
       if (bufp->buffer)
 	{ /* If zero allocated, but buffer is non-null, try to realloc
-             enough space.  This loses if buffer's address is bogus, but
-             that is the user's responsibility.  */
-          RETALLOC (bufp->buffer, INIT_BUF_SIZE, unsigned char);
-        }
+	     enough space.  This loses if buffer's address is bogus, but
+	     that is the user's responsibility.	 */
+	  RETALLOC (bufp->buffer, INIT_BUF_SIZE, unsigned char);
+	}
       else
-        { /* Caller did not allocate a buffer.  Do it for them.  */
-          bufp->buffer = TALLOC (INIT_BUF_SIZE, unsigned char);
-        }
-      if (!bufp->buffer) return REG_ESPACE;
+	{ /* Caller did not allocate a buffer.	Do it for them.	 */
+	  bufp->buffer = TALLOC (INIT_BUF_SIZE, unsigned char);
+	}
+      if (!bufp->buffer) FREE_STACK_RETURN (REG_ESPACE);
 
       bufp->allocated = INIT_BUF_SIZE;
     }
@@ -1184,1377 +1994,1167 @@
       PATFETCH (c);
 
       switch (c)
-        {
-        case '^':
-          {
-            if (   /* If at start of pattern, it's an operator.  */
-                   p == pattern + 1
-                   /* If context independent, it's an operator.  */
-                || syntax & RE_CONTEXT_INDEP_ANCHORS
-                   /* Otherwise, depends on what's come before.  */
-                || at_begline_loc_p (pattern, p, syntax))
-              BUF_PUSH (begline);
-            else
-              goto normal_char;
-          }
-          break;
+	{
+	case '^':
+	  {
+	    if (   /* If at start of pattern, it's an operator.	 */
+		   p == pattern + 1
+		   /* If context independent, it's an operator.	 */
+		|| syntax & RE_CONTEXT_INDEP_ANCHORS
+		   /* Otherwise, depends on what's come before.	 */
+		|| at_begline_loc_p (pattern, p, syntax))
+	      BUF_PUSH (begline);
+	    else
+	      goto normal_char;
+	  }
+	  break;
 
 
-        case '$':
-          {
-            if (   /* If at end of pattern, it's an operator.  */
-                   p == pend
-                   /* If context independent, it's an operator.  */
-                || syntax & RE_CONTEXT_INDEP_ANCHORS
-                   /* Otherwise, depends on what's next.  */
-                || at_endline_loc_p (p, pend, syntax))
-               BUF_PUSH (endline);
-             else
-               goto normal_char;
-           }
-           break;
+	case '$':
+	  {
+	    if (   /* If at end of pattern, it's an operator.  */
+		   p == pend
+		   /* If context independent, it's an operator.	 */
+		|| syntax & RE_CONTEXT_INDEP_ANCHORS
+		   /* Otherwise, depends on what's next.  */
+		|| at_endline_loc_p (p, pend, syntax))
+	       BUF_PUSH (endline);
+	     else
+	       goto normal_char;
+	   }
+	   break;
 
 
 	case '+':
-        case '?':
-          if ((syntax & RE_BK_PLUS_QM)
-              || (syntax & RE_LIMITED_OPS))
-            goto normal_char;
-        handle_plus:
-        case '*':
-          /* If there is no previous pattern... */
-          if (!laststart)
-            {
-              if (syntax & RE_CONTEXT_INVALID_OPS)
-                return REG_BADRPT;
-              else if (!(syntax & RE_CONTEXT_INDEP_OPS))
-                goto normal_char;
-            }
+	case '?':
+	  if ((syntax & RE_BK_PLUS_QM)
+	      || (syntax & RE_LIMITED_OPS))
+	    goto normal_char;
+	handle_plus:
+	case '*':
+	  /* If there is no previous pattern... */
+	  if (!laststart)
+	    {
+	      if (syntax & RE_CONTEXT_INVALID_OPS)
+		FREE_STACK_RETURN (REG_BADRPT);
+	      else if (!(syntax & RE_CONTEXT_INDEP_OPS))
+		goto normal_char;
+	    }
 
-          {
-            /* Are we optimizing this jump?  */
-            boolean keep_string_p = false;
-
-            /* 1 means zero (many) matches is allowed.  */
-            char zero_times_ok = 0, many_times_ok = 0;
-
-            /* If there is a sequence of repetition chars, collapse it
-               down to just one (the right one).  We can't combine
-               interval operators with these because of, e.g., `a{2}*',
-               which should only match an even number of `a's.  */
-
-            for (;;)
-              {
-                zero_times_ok |= c != '+';
-                many_times_ok |= c != '?';
+	  {
+	    /* Are we optimizing this jump?  */
+	    boolean keep_string_p = false;
 
-                if (p == pend)
-                  break;
+	    /* 1 means zero (many) matches is allowed.	*/
+	    char zero_times_ok = 0, many_times_ok = 0;
 
-                PATFETCH (c);
+	    /* If there is a sequence of repetition chars, collapse it
+	       down to just one (the right one).  We can't combine
+	       interval operators with these because of, e.g., `a{2}*',
+	       which should only match an even number of `a's.	*/
 
-                if (c == '*'
-                    || (!(syntax & RE_BK_PLUS_QM) && (c == '+' || c == '?')))
-                  ;
-
-                else if (syntax & RE_BK_PLUS_QM  &&  c == '\\')
-                  {
-                    if (p == pend) return REG_EESCAPE;
-
-                    PATFETCH (c1);
-                    if (!(c1 == '+' || c1 == '?'))
-                      {
-                        PATUNFETCH;
-                        PATUNFETCH;
-                        break;
-                      }
-
-                    c = c1;
-                  }
-                else
-                  {
-                    PATUNFETCH;
-                    break;
-                  }
+	    for (;;)
+	      {
+		zero_times_ok |= c != '+';
+		many_times_ok |= c != '?';
+
+		if (p == pend)
+		  break;
+
+		PATFETCH (c);
 
-                /* If we get here, we found another repeat character.  */
-               }
+		if (c == '*'
+		    || (!(syntax & RE_BK_PLUS_QM) && (c == '+' || c == '?')))
+		  ;
 
-            /* Star, etc. applied to an empty pattern is equivalent
-               to an empty pattern.  */
-            if (!laststart)
-              break;
-
-            /* Now we know whether or not zero matches is allowed
-               and also whether or not two or more matches is allowed.  */
-            if (many_times_ok)
-              { /* More than one repetition is allowed, so put in at the
-                   end a backward relative jump from `b' to before the next
-                   jump we're going to put in below (which jumps from
-                   laststart to after this jump).
-
-                   But if we are at the `*' in the exact sequence `.*\n',
-                   insert an unconditional jump backwards to the .,
-                   instead of the beginning of the loop.  This way we only
-                   push a failure point once, instead of every time
-                   through the loop.  */
-                assert (p - 1 > pattern);
-
-                /* Allocate the space for the jump.  */
-                GET_BUFFER_SPACE (3);
-
-                /* We know we are not at the first character of the pattern,
-                   because laststart was nonzero.  And we've already
-                   incremented `p', by the way, to be the character after
-                   the `*'.  Do we have to do something analogous here
-                   for null bytes, because of RE_DOT_NOT_NULL?  */
-                if (TRANSLATE (*(p - 2)) == TRANSLATE ('.')
+		else if (syntax & RE_BK_PLUS_QM	 &&  c == '\\')
+		  {
+		    if (p == pend) FREE_STACK_RETURN (REG_EESCAPE);
+
+		    PATFETCH (c1);
+		    if (!(c1 == '+' || c1 == '?'))
+		      {
+			PATUNFETCH;
+			PATUNFETCH;
+			break;
+		      }
+
+		    c = c1;
+		  }
+		else
+		  {
+		    PATUNFETCH;
+		    break;
+		  }
+
+		/* If we get here, we found another repeat character.  */
+	       }
+
+	    /* Star, etc. applied to an empty pattern is equivalent
+	       to an empty pattern.  */
+	    if (!laststart)
+	      break;
+
+	    /* Now we know whether or not zero matches is allowed
+	       and also whether or not two or more matches is allowed.	*/
+	    if (many_times_ok)
+	      { /* More than one repetition is allowed, so put in at the
+		   end a backward relative jump from `b' to before the next
+		   jump we're going to put in below (which jumps from
+		   laststart to after this jump).
+
+		   But if we are at the `*' in the exact sequence `.*\n',
+		   insert an unconditional jump backwards to the .,
+		   instead of the beginning of the loop.  This way we only
+		   push a failure point once, instead of every time
+		   through the loop.  */
+		assert (p - 1 > pattern);
+
+		/* Allocate the space for the jump.  */
+		GET_BUFFER_SPACE (3);
+
+		/* We know we are not at the first character of the pattern,
+		   because laststart was nonzero.  And we've already
+		   incremented `p', by the way, to be the character after
+		   the `*'.  Do we have to do something analogous here
+		   for null bytes, because of RE_DOT_NOT_NULL?	*/
+		if (TRANSLATE ((unsigned char)*(p - 2)) == TRANSLATE ('.')
 		    && zero_times_ok
-                    && p < pend && TRANSLATE (*p) == TRANSLATE ('\n')
-                    && !(syntax & RE_DOT_NEWLINE))
-                  { /* We have .*\n.  */
-                    STORE_JUMP (jump, b, laststart);
-                    keep_string_p = true;
-                  }
-                else
-                  /* Anything else.  */
-                  STORE_JUMP (maybe_pop_jump, b, laststart - 3);
-
-                /* We've added more stuff to the buffer.  */
-                b += 3;
-              }
-
-            /* On failure, jump from laststart to b + 3, which will be the
-               end of the buffer after this jump is inserted.  */
-            GET_BUFFER_SPACE (3);
-            INSERT_JUMP (keep_string_p ? on_failure_keep_string_jump
-                                       : on_failure_jump,
-                         laststart, b + 3);
-            pending_exact = 0;
-            b += 3;
-
-            if (!zero_times_ok)
-              {
-                /* At least one repetition is required, so insert a
-                   `dummy_failure_jump' before the initial
-                   `on_failure_jump' instruction of the loop. This
-                   effects a skip over that instruction the first time
-                   we hit that loop.  */
-                GET_BUFFER_SPACE (3);
-                INSERT_JUMP (dummy_failure_jump, laststart, laststart + 6);
-                b += 3;
-              }
-            }
+		    && p < pend
+		    && TRANSLATE ((unsigned char)*p) == TRANSLATE ('\n')
+		    && !(syntax & RE_DOT_NEWLINE))
+		  { /* We have .*\n.  */
+		    STORE_JUMP (jump, b, laststart);
+		    keep_string_p = true;
+		  }
+		else
+		  /* Anything else.  */
+		  STORE_JUMP (maybe_pop_jump, b, laststart - 3);
+
+		/* We've added more stuff to the buffer.  */
+		b += 3;
+	      }
+
+	    /* On failure, jump from laststart to b + 3, which will be the
+	       end of the buffer after this jump is inserted.  */
+	    GET_BUFFER_SPACE (3);
+	    INSERT_JUMP (keep_string_p ? on_failure_keep_string_jump
+				       : on_failure_jump,
+			 laststart, b + 3);
+	    pending_exact = 0;
+	    b += 3;
+
+	    if (!zero_times_ok)
+	      {
+		/* At least one repetition is required, so insert a
+		   `dummy_failure_jump' before the initial
+		   `on_failure_jump' instruction of the loop. This
+		   effects a skip over that instruction the first time
+		   we hit that loop.  */
+		GET_BUFFER_SPACE (3);
+		INSERT_JUMP (dummy_failure_jump, laststart, laststart + 6);
+		b += 3;
+	      }
+	    }
 	  break;
 
 
 	case '.':
-          laststart = b;
-          BUF_PUSH (anychar);
-          break;
+	  laststart = b;
+	  BUF_PUSH (anychar);
+	  break;
 
 
-        case '[':
-          {
-            boolean had_char_class = false;
+	case '[':
+	  {
+	    CLEAR_RANGE_TABLE_WORK_USED (range_table_work);
 
-            if (p == pend) return REG_EBRACK;
+	    if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
 
-            /* Ensure that we have enough space to push a charset: the
-               opcode, the length count, and the bitset; 34 bytes in all.  */
+	    /* Ensure that we have enough space to push a charset: the
+	       opcode, the length count, and the bitset; 34 bytes in all.  */
 	    GET_BUFFER_SPACE (34);
 
-            laststart = b;
+	    laststart = b;
 
-            /* We test `*p == '^' twice, instead of using an if
-               statement, so we only need one BUF_PUSH.  */
-            BUF_PUSH (*p == '^' ? charset_not : charset); 
-            if (*p == '^')
-              p++;
-
-            /* Remember the first position in the bracket expression.  */
-            p1 = p;
-
-            /* Push the number of bytes in the bitmap.  */
-            BUF_PUSH ((1 << BYTEWIDTH) / BYTEWIDTH);
-
-            /* Clear the whole map.  */
-            bzero (b, (1 << BYTEWIDTH) / BYTEWIDTH);
-
-            /* charset_not matches newline according to a syntax bit.  */
-            if ((re_opcode_t) b[-2] == charset_not
-                && (syntax & RE_HAT_LISTS_NOT_NEWLINE))
-              SET_LIST_BIT ('\n');
-
-            /* Read in characters and ranges, setting map bits.  */
-            for (;;)
-              {
-                if (p == pend) return REG_EBRACK;
-
-                PATFETCH (c);
-
-                /* \ might escape characters inside [...] and [^...].  */
-                if ((syntax & RE_BACKSLASH_ESCAPE_IN_LISTS) && c == '\\')
-                  {
-                    if (p == pend) return REG_EESCAPE;
-
-                    PATFETCH (c1);
-                    SET_LIST_BIT (c1);
-                    continue;
-                  }
-
-                /* Could be the end of the bracket expression.  If it's
-                   not (i.e., when the bracket expression is `[]' so
-                   far), the ']' character bit gets set way below.  */
-                if (c == ']' && p != p1 + 1)
-                  break;
+	    /* We test `*p == '^' twice, instead of using an if
+	       statement, so we only need one BUF_PUSH.	 */
+	    BUF_PUSH (*p == '^' ? charset_not : charset);
+	    if (*p == '^')
+	      p++;
 
-                /* Look ahead to see if it's a range when the last thing
-                   was a character class.  */
-                if (had_char_class && c == '-' && *p != ']')
-                  return REG_ERANGE;
-
-                /* Look ahead to see if it's a range when the last thing
-                   was a character: if this is a hyphen not at the
-                   beginning or the end of a list, then it's the range
-                   operator.  */
-                if (c == '-'
-                    && !(p - 2 >= pattern && p[-2] == '[')
-                    && !(p - 3 >= pattern && p[-3] == '[' && p[-2] == '^')
-                    && *p != ']')
-                  {
-                    reg_errcode_t ret
-                      = compile_range (&p, pend, translate, syntax, b);
-                    if (ret != REG_NOERROR) return ret;
-                  }
-
-                else if (p[0] == '-' && p[1] != ']')
-                  { /* This handles ranges made up of characters only.  */
-                    reg_errcode_t ret;
-
-		    /* Move past the `-'.  */
-                    PATFETCH (c1);
-
-                    ret = compile_range (&p, pend, translate, syntax, b);
-                    if (ret != REG_NOERROR) return ret;
-                  }
-
-                /* See if we're at the beginning of a possible character
-                   class.  */
-
-                else if (syntax & RE_CHAR_CLASSES && c == '[' && *p == ':')
-                  { /* Leave room for the null.  */
-                    char str[CHAR_CLASS_MAX_LENGTH + 1];
-
-                    PATFETCH (c);
-                    c1 = 0;
-
-                    /* If pattern is `[[:'.  */
-                    if (p == pend) return REG_EBRACK;
-
-                    for (;;)
-                      {
-                        PATFETCH (c);
-                        if (c == ':' || c == ']' || p == pend
-                            || c1 == CHAR_CLASS_MAX_LENGTH)
-                          break;
-                        str[c1++] = c;
-                      }
-                    str[c1] = '\0';
-
-                    /* If isn't a word bracketed by `[:' and:`]':
-                       undo the ending character, the letters, and leave
-                       the leading `:' and `[' (but set bits for them).  */
-                    if (c == ':' && *p == ']')
-                      {
-                        int ch;
-                        boolean is_alnum = STREQ (str, "alnum");
-                        boolean is_alpha = STREQ (str, "alpha");
-                        boolean is_blank = STREQ (str, "blank");
-                        boolean is_cntrl = STREQ (str, "cntrl");
-                        boolean is_digit = STREQ (str, "digit");
-                        boolean is_graph = STREQ (str, "graph");
-                        boolean is_lower = STREQ (str, "lower");
-                        boolean is_print = STREQ (str, "print");
-                        boolean is_punct = STREQ (str, "punct");
-                        boolean is_space = STREQ (str, "space");
-                        boolean is_upper = STREQ (str, "upper");
-                        boolean is_xdigit = STREQ (str, "xdigit");
-
-                        if (!IS_CHAR_CLASS (str)) return REG_ECTYPE;
-
-                        /* Throw away the ] at the end of the character
-                           class.  */
-                        PATFETCH (c);
-
-                        if (p == pend) return REG_EBRACK;
-
-                        for (ch = 0; ch < 1 << BYTEWIDTH; ch++)
-                          {
-                            if (   (is_alnum  && ISALNUM (ch))
-                                || (is_alpha  && ISALPHA (ch))
-                                || (is_blank  && ISBLANK (ch))
-                                || (is_cntrl  && ISCNTRL (ch))
-                                || (is_digit  && ISDIGIT (ch))
-                                || (is_graph  && ISGRAPH (ch))
-                                || (is_lower  && ISLOWER (ch))
-                                || (is_print  && ISPRINT (ch))
-                                || (is_punct  && ISPUNCT (ch))
-                                || (is_space  && ISSPACE (ch))
-                                || (is_upper  && ISUPPER (ch))
-                                || (is_xdigit && ISXDIGIT (ch)))
-                            SET_LIST_BIT (ch);
-                          }
-                        had_char_class = true;
-                      }
-                    else
-                      {
-                        c1++;
-                        while (c1--)
-                          PATUNFETCH;
-                        SET_LIST_BIT ('[');
-                        SET_LIST_BIT (':');
-                        had_char_class = false;
-                      }
-                  }
-                else
-                  {
-                    had_char_class = false;
-                    SET_LIST_BIT (c);
-                  }
-              }
-
-            /* Discard any (non)matching list bytes that are all 0 at the
-               end of the map.  Decrease the map-length byte too.  */
-            while ((int) b[-1] > 0 && b[b[-1] - 1] == 0)
-              b[-1]--;
-            b += b[-1];
-          }
-          break;
+	    /* Remember the first position in the bracket expression.  */
+	    p1 = p;
 
+	    /* Push the number of bytes in the bitmap.	*/
+	    BUF_PUSH ((1 << BYTEWIDTH) / BYTEWIDTH);
 
-	case '(':
-          if (syntax & RE_NO_BK_PARENS)
-            goto handle_open;
-          else
-            goto normal_char;
-
-
-        case ')':
-          if (syntax & RE_NO_BK_PARENS)
-            goto handle_close;
-          else
-            goto normal_char;
-
-
-        case '\n':
-          if (syntax & RE_NEWLINE_ALT)
-            goto handle_alt;
-          else
-            goto normal_char;
+	    /* Clear the whole map.  */
+	    bzero (b, (1 << BYTEWIDTH) / BYTEWIDTH);
 
+	    /* charset_not matches newline according to a syntax bit.  */
+	    if ((re_opcode_t) b[-2] == charset_not
+		&& (syntax & RE_HAT_LISTS_NOT_NEWLINE))
+	      SET_LIST_BIT ('\n');
 
-	case '|':
-          if (syntax & RE_NO_BK_VBAR)
-            goto handle_alt;
-          else
-            goto normal_char;
+	    /* Read in characters and ranges, setting map bits.	 */
+	    for (;;)
+	      {
+		int len;
+		boolean escaped_char = false;
 
+		if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
 
-        case '{':
-           if (syntax & RE_INTERVALS && syntax & RE_NO_BK_BRACES)
-             goto handle_interval;
-           else
-             goto normal_char;
+		PATFETCH (c);
 
+		/* \ might escape characters inside [...] and [^...].  */
+		if ((syntax & RE_BACKSLASH_ESCAPE_IN_LISTS) && c == '\\')
+		  {
+		    if (p == pend) FREE_STACK_RETURN (REG_EESCAPE);
 
-        case '\\':
-          if (p == pend) return REG_EESCAPE;
+		    PATFETCH (c);
+		    escaped_char = true;
+		  }
+		else
+		  {
+		    /* Could be the end of the bracket expression.	If it's
+		       not (i.e., when the bracket expression is `[]' so
+		       far), the ']' character bit gets set way below.  */
+		    if (c == ']' && p != p1 + 1)
+		      break;
+		  }
 
-          /* Do not translate the character after the \, so that we can
-             distinguish, e.g., \B from \b, even if we normally would
-             translate, e.g., B to b.  */
-          PATFETCH_RAW (c);
+		/* If C indicates start of multibyte char, get the
+		   actual character code in C, and set the pattern
+		   pointer P to the next character boundary.  */
+		if (bufp->multibyte && BASE_LEADING_CODE_P (c))
+		  {
+		    PATUNFETCH;
+		    c = STRING_CHAR_AND_LENGTH (p, pend - p, len);
+		    p += len;
+		  }
+		/* What should we do for the character which is
+		   greater than 0x7F, but not BASE_LEADING_CODE_P?
+		   XXX */
 
-          switch (c)
-            {
-            case '(':
-              if (syntax & RE_NO_BK_PARENS)
-                goto normal_backslash;
-
-            handle_open:
-              bufp->re_nsub++;
-              regnum++;
+		/* See if we're at the beginning of a possible character
+		   class.  */
 
-              if (COMPILE_STACK_FULL)
-                {
-                  RETALLOC (compile_stack.stack, compile_stack.size << 1,
-                            compile_stack_elt_t);
-                  if (compile_stack.stack == NULL) return REG_ESPACE;
+		else if (!escaped_char &&
+			 syntax & RE_CHAR_CLASSES && c == '[' && *p == ':')
+		  {
+		    /* Leave room for the null.	 */
+		    char str[CHAR_CLASS_MAX_LENGTH + 1];
 
-                  compile_stack.size <<= 1;
-                }
+		    PATFETCH (c);
+		    c1 = 0;
 
-              /* These are the values to restore when we hit end of this
-                 group.  They are all relative offsets, so that if the
-                 whole pattern moves because of realloc, they will still
-                 be valid.  */
-              COMPILE_STACK_TOP.begalt_offset = begalt - bufp->buffer;
-              COMPILE_STACK_TOP.fixup_alt_jump
-                = fixup_alt_jump ? fixup_alt_jump - bufp->buffer + 1 : 0;
-              COMPILE_STACK_TOP.laststart_offset = b - bufp->buffer;
-              COMPILE_STACK_TOP.regnum = regnum;
-
-              /* We will eventually replace the 0 with the number of
-                 groups inner to this one.  But do not push a
-                 start_memory for groups beyond the last one we can
-                 represent in the compiled pattern.  */
-              if (regnum <= MAX_REGNUM)
-                {
-                  COMPILE_STACK_TOP.inner_group_offset = b - bufp->buffer + 2;
-                  BUF_PUSH_3 (start_memory, regnum, 0);
-                }
+		    /* If pattern is `[[:'.  */
+		    if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
 
-              compile_stack.avail++;
+		    for (;;)
+		      {
+			PATFETCH (c);
+			if (c == ':' || c == ']' || p == pend
+			    || c1 == CHAR_CLASS_MAX_LENGTH)
+			  break;
+			str[c1++] = c;
+		      }
+		    str[c1] = '\0';
+
+		    /* If isn't a word bracketed by `[:' and `:]':
+		       undo the ending character, the letters, and
+		       leave the leading `:' and `[' (but set bits for
+		       them).  */
+		    if (c == ':' && *p == ']')
+		      {
+			int ch;
+			boolean is_alnum = STREQ (str, "alnum");
+			boolean is_alpha = STREQ (str, "alpha");
+			boolean is_blank = STREQ (str, "blank");
+			boolean is_cntrl = STREQ (str, "cntrl");
+			boolean is_digit = STREQ (str, "digit");
+			boolean is_graph = STREQ (str, "graph");
+			boolean is_lower = STREQ (str, "lower");
+			boolean is_print = STREQ (str, "print");
+			boolean is_punct = STREQ (str, "punct");
+			boolean is_space = STREQ (str, "space");
+			boolean is_upper = STREQ (str, "upper");
+			boolean is_xdigit = STREQ (str, "xdigit");
+
+			if (!IS_CHAR_CLASS (str))
+			  FREE_STACK_RETURN (REG_ECTYPE);
+
+			/* Throw away the ] at the end of the character
+			   class.  */
+			PATFETCH (c);
+
+			if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
+
+			for (ch = 0; ch < 1 << BYTEWIDTH; ch++)
+			  {
+			    int translated = TRANSLATE (ch);
+			    /* This was split into 3 if's to
+			       avoid an arbitrary limit in some compiler.  */
+			    if (   (is_alnum  && ISALNUM (ch))
+				|| (is_alpha  && ISALPHA (ch))
+				|| (is_blank  && ISBLANK (ch))
+				|| (is_cntrl  && ISCNTRL (ch)))
+			      SET_LIST_BIT (translated);
+			    if (   (is_digit  && ISDIGIT (ch))
+				|| (is_graph  && ISGRAPH (ch))
+				|| (is_lower  && ISLOWER (ch))
+				|| (is_print  && ISPRINT (ch)))
+			      SET_LIST_BIT (translated);
+			    if (   (is_punct  && ISPUNCT (ch))
+				|| (is_space  && ISSPACE (ch))
+				|| (is_upper  && ISUPPER (ch))
+				|| (is_xdigit && ISXDIGIT (ch)))
+			      SET_LIST_BIT (translated);
+			  }
+
+			/* Repeat the loop. */
+			continue;
+		      }
+		    else
+		      {
+			c1++;
+			while (c1--)
+			  PATUNFETCH;
+			SET_LIST_BIT ('[');
+
+			/* Because the `:' may starts the range, we
+			   can't simply set bit and repeat the loop.
+			   Instead, just set it to C and handle below.	*/
+			c = ':';
+		      }
+		  }
 
-              fixup_alt_jump = 0;
-              laststart = 0;
-              begalt = b;
-	      /* If we've reached MAX_REGNUM groups, then this open
-		 won't actually generate any code, so we'll have to
-		 clear pending_exact explicitly.  */
-	      pending_exact = 0;
-              break;
+		if (p < pend && p[0] == '-' && p[1] != ']')
+		  {
 
+		    /* Discard the `-'. */
+		    PATFETCH (c1);
 
-            case ')':
-              if (syntax & RE_NO_BK_PARENS) goto normal_backslash;
+		    /* Fetch the character which ends the range. */
+		    PATFETCH (c1);
+		    if (bufp->multibyte && BASE_LEADING_CODE_P (c1))
+		      {
+			PATUNFETCH;
+			c1 = STRING_CHAR_AND_LENGTH (p, pend - p, len);
+			p += len;
+		      }
+
+		    if (SINGLE_BYTE_CHAR_P (c)
+			&& ! SINGLE_BYTE_CHAR_P (c1))
+		      {
+			/* Handle a range such as \177-\377 in multibyte mode.
+			   Split that into two ranges,,
+			   the low one ending at 0237, and the high one
+			   starting at ...040.  */
+			int c1_base = (c1 & ~0177) | 040;
+			SET_RANGE_TABLE_WORK_AREA (range_table_work, c, c1);
+			c1 = 0237;
+		      }
+		    else if (!SAME_CHARSET_P (c, c1))
+		      FREE_STACK_RETURN (REG_ERANGE);
+		  }
+		else
+		  /* Range from C to C. */
+		  c1 = c;
+
+		/* Set the range ... */
+		if (SINGLE_BYTE_CHAR_P (c))
+		  /* ... into bitmap.  */
+		  {
+		    unsigned this_char;
+		    int range_start = c, range_end = c1;
 
-              if (COMPILE_STACK_EMPTY) {
-                if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD)
-                  goto normal_backslash;
-                else
-                  return REG_ERPAREN;
-              }
-
-            handle_close:
-              if (fixup_alt_jump)
-                { /* Push a dummy failure point at the end of the
-                     alternative for a possible future
-                     `pop_failure_jump' to pop.  See comments at
-                     `push_dummy_failure' in `re_match_2'.  */
-                  BUF_PUSH (push_dummy_failure);
-
-                  /* We allocated space for this jump when we assigned
-                     to `fixup_alt_jump', in the `handle_alt' case below.  */
-                  STORE_JUMP (jump_past_alt, fixup_alt_jump, b - 1);
-                }
+		    /* If the start is after the end, the range is empty.  */
+		    if (range_start > range_end)
+		      {
+			if (syntax & RE_NO_EMPTY_RANGES)
+			  FREE_STACK_RETURN (REG_ERANGE);
+			/* Else, repeat the loop.  */
+		      }
+		    else
+		      {
+			for (this_char = range_start; this_char <= range_end;
+			     this_char++)
+			  SET_LIST_BIT (TRANSLATE (this_char));
+		      }
+		  }
+		else
+		  /* ... into range table.  */
+		  SET_RANGE_TABLE_WORK_AREA (range_table_work, c, c1);
+	      }
 
-              /* See similar code for backslashed left paren above.  */
-              if (COMPILE_STACK_EMPTY) {
-                if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD)
-                  goto normal_char;
-                else
-                  return REG_ERPAREN;
-              }
-
-              /* Since we just checked for an empty stack above, this
-                 ``can't happen''.  */
-              assert (compile_stack.avail != 0);
-              {
-                /* We don't just want to restore into `regnum', because
-                   later groups should continue to be numbered higher,
-                   as in `(ab)c(de)' -- the second group is #2.  */
-                regnum_t this_group_regnum;
-
-                compile_stack.avail--;
-                begalt = bufp->buffer + COMPILE_STACK_TOP.begalt_offset;
-                fixup_alt_jump
-                  = COMPILE_STACK_TOP.fixup_alt_jump
-                    ? bufp->buffer + COMPILE_STACK_TOP.fixup_alt_jump - 1
-                    : 0;
-                laststart = bufp->buffer + COMPILE_STACK_TOP.laststart_offset;
-                this_group_regnum = COMPILE_STACK_TOP.regnum;
-		/* If we've reached MAX_REGNUM groups, then this open
-		   won't actually generate any code, so we'll have to
-		   clear pending_exact explicitly.  */
-		pending_exact = 0;
+	    /* Discard any (non)matching list bytes that are all 0 at the
+	       end of the map.	Decrease the map-length byte too.  */
+	    while ((int) b[-1] > 0 && b[b[-1] - 1] == 0)
+	      b[-1]--;
+	    b += b[-1];
 
-                /* We're at the end of the group, so now we know how many
-                   groups were inside this one.  */
-                if (this_group_regnum <= MAX_REGNUM)
-                  {
-                    unsigned char *inner_group_loc
-                      = bufp->buffer + COMPILE_STACK_TOP.inner_group_offset;
-
-                    *inner_group_loc = regnum - this_group_regnum;
-                    BUF_PUSH_3 (stop_memory, this_group_regnum,
-                                regnum - this_group_regnum);
-                  }
-              }
-              break;
-
-
-            case '|':					/* `\|'.  */
-              if (syntax & RE_LIMITED_OPS || syntax & RE_NO_BK_VBAR)
-                goto normal_backslash;
-            handle_alt:
-              if (syntax & RE_LIMITED_OPS)
-                goto normal_char;
-
-              /* Insert before the previous alternative a jump which
-                 jumps to this alternative if the former fails.  */
-              GET_BUFFER_SPACE (3);
-              INSERT_JUMP (on_failure_jump, begalt, b + 6);
-              pending_exact = 0;
-              b += 3;
-
-              /* The alternative before this one has a jump after it
-                 which gets executed if it gets matched.  Adjust that
-                 jump so it will jump to this alternative's analogous
-                 jump (put in below, which in turn will jump to the next
-                 (if any) alternative's such jump, etc.).  The last such
-                 jump jumps to the correct final destination.  A picture:
-                          _____ _____
-                          |   | |   |
-                          |   v |   v
-                         a | b   | c
-
-                 If we are at `b', then fixup_alt_jump right now points to a
-                 three-byte space after `a'.  We'll put in the jump, set
-                 fixup_alt_jump to right after `b', and leave behind three
-                 bytes which we'll fill in when we get to after `c'.  */
-
-              if (fixup_alt_jump)
-                STORE_JUMP (jump_past_alt, fixup_alt_jump, b);
-
-              /* Mark and leave space for a jump after this alternative,
-                 to be filled in later either by next alternative or
-                 when know we're at the end of a series of alternatives.  */
-              fixup_alt_jump = b;
-              GET_BUFFER_SPACE (3);
-              b += 3;
-
-              laststart = 0;
-              begalt = b;
-              break;
-
-
-            case '{':
-              /* If \{ is a literal.  */
-              if (!(syntax & RE_INTERVALS)
-                     /* If we're at `\{' and it's not the open-interval
-                        operator.  */
-                  || ((syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES))
-                  || (p - 2 == pattern  &&  p == pend))
-                goto normal_backslash;
-
-            handle_interval:
-              {
-                /* If got here, then the syntax allows intervals.  */
-
-                /* At least (most) this many matches must be made.  */
-                int lower_bound = -1, upper_bound = -1;
-
-                beg_interval = p - 1;
-
-                if (p == pend)
-                  {
-                    if (syntax & RE_NO_BK_BRACES)
-                      goto unfetch_interval;
-                    else
-                      return REG_EBRACE;
-                  }
-
-                GET_UNSIGNED_NUMBER (lower_bound);
-
-                if (c == ',')
-                  {
-                    GET_UNSIGNED_NUMBER (upper_bound);
-                    if (upper_bound < 0) upper_bound = RE_DUP_MAX;
-                  }
-                else
-                  /* Interval such as `{1}' => match exactly once. */
-                  upper_bound = lower_bound;
-
-                if (lower_bound < 0 || upper_bound > RE_DUP_MAX
-                    || lower_bound > upper_bound)
-                  {
-                    if (syntax & RE_NO_BK_BRACES)
-                      goto unfetch_interval;
-                    else
-                      return REG_BADBR;
-                  }
-
-                if (!(syntax & RE_NO_BK_BRACES))
-                  {
-                    if (c != '\\') return REG_EBRACE;
-
-                    PATFETCH (c);
-                  }
-
-                if (c != '}')
-                  {
-                    if (syntax & RE_NO_BK_BRACES)
-                      goto unfetch_interval;
-                    else
-                      return REG_BADBR;
-                  }
-
-                /* We just parsed a valid interval.  */
-
-                /* If it's invalid to have no preceding re.  */
-                if (!laststart)
-                  {
-                    if (syntax & RE_CONTEXT_INVALID_OPS)
-                      return REG_BADRPT;
-                    else if (syntax & RE_CONTEXT_INDEP_OPS)
-                      laststart = b;
-                    else
-                      goto unfetch_interval;
-                  }
-
-                /* If the upper bound is zero, don't want to succeed at
-                   all; jump from `laststart' to `b + 3', which will be
-                   the end of the buffer after we insert the jump.  */
-                 if (upper_bound == 0)
-                   {
-                     GET_BUFFER_SPACE (3);
-                     INSERT_JUMP (jump, laststart, b + 3);
-                     b += 3;
-                   }
-
-                 /* Otherwise, we have a nontrivial interval.  When
-                    we're all done, the pattern will look like:
-                      set_number_at <jump count> <upper bound>
-                      set_number_at <succeed_n count> <lower bound>
-                      succeed_n <after jump addr> <succeed_n count>
-                      <body of loop>
-                      jump_n <succeed_n addr> <jump count>
-                    (The upper bound and `jump_n' are omitted if
-                    `upper_bound' is 1, though.)  */
-                 else
-                   { /* If the upper bound is > 1, we need to insert
-                        more at the end of the loop.  */
-                     unsigned nbytes = 10 + (upper_bound > 1) * 10;
-
-                     GET_BUFFER_SPACE (nbytes);
-
-                     /* Initialize lower bound of the `succeed_n', even
-                        though it will be set during matching by its
-                        attendant `set_number_at' (inserted next),
-                        because `re_compile_fastmap' needs to know.
-                        Jump to the `jump_n' we might insert below.  */
-                     INSERT_JUMP2 (succeed_n, laststart,
-                                   b + 5 + (upper_bound > 1) * 5,
-                                   lower_bound);
-                     b += 5;
-
-                     /* Code to initialize the lower bound.  Insert
-                        before the `succeed_n'.  The `5' is the last two
-                        bytes of this `set_number_at', plus 3 bytes of
-                        the following `succeed_n'.  */
-                     insert_op2 (set_number_at, laststart, 5, lower_bound, b);
-                     b += 5;
-
-                     if (upper_bound > 1)
-                       { /* More than one repetition is allowed, so
-                            append a backward jump to the `succeed_n'
-                            that starts this interval.
-
-                            When we've reached this during matching,
-                            we'll have matched the interval once, so
-                            jump back only `upper_bound - 1' times.  */
-                         STORE_JUMP2 (jump_n, b, laststart + 5,
-                                      upper_bound - 1);
-                         b += 5;
-
-                         /* The location we want to set is the second
-                            parameter of the `jump_n'; that is `b-2' as
-                            an absolute address.  `laststart' will be
-                            the `set_number_at' we're about to insert;
-                            `laststart+3' the number to set, the source
-                            for the relative address.  But we are
-                            inserting into the middle of the pattern --
-                            so everything is getting moved up by 5.
-                            Conclusion: (b - 2) - (laststart + 3) + 5,
-                            i.e., b - laststart.
-
-                            We insert this at the beginning of the loop
-                            so that if we fail during matching, we'll
-                            reinitialize the bounds.  */
-                         insert_op2 (set_number_at, laststart, b - laststart,
-                                     upper_bound - 1, b);
-                         b += 5;
-                       }
-                   }
-                pending_exact = 0;
-                beg_interval = NULL;
-              }
-              break;
-
-            unfetch_interval:
-              /* If an invalid interval, match the characters as literals.  */
-               assert (beg_interval);
-               p = beg_interval;
-               beg_interval = NULL;
-
-               /* normal_char and normal_backslash need `c'.  */
-               PATFETCH (c);
-
-               if (!(syntax & RE_NO_BK_BRACES))
-                 {
-                   if (p > pattern  &&  p[-1] == '\\')
-                     goto normal_backslash;
-                 }
-               goto normal_char;
+	    /* Build real range table from work area. */
+	    if (RANGE_TABLE_WORK_USED (range_table_work))
+	      {
+		int i;
+		int used = RANGE_TABLE_WORK_USED (range_table_work);
 
-#ifdef emacs
-            /* There is no way to specify the before_dot and after_dot
-               operators.  rms says this is ok.  --karl  */
-            case '=':
-              BUF_PUSH (at_dot);
-              break;
-
-            case 's':
-              laststart = b;
-              PATFETCH (c);
-              BUF_PUSH_2 (syntaxspec, syntax_spec_code[c]);
-              break;
-
-            case 'S':
-              laststart = b;
-              PATFETCH (c);
-              BUF_PUSH_2 (notsyntaxspec, syntax_spec_code[c]);
-              break;
-#endif /* emacs */
+		/* Allocate space for COUNT + RANGE_TABLE.  Needs two
+		   bytes for COUNT and three bytes for each character.	*/
+		GET_BUFFER_SPACE (2 + used * 3);
+
+		/* Indicate the existence of range table.  */
+		laststart[1] |= 0x80;
+
+		STORE_NUMBER_AND_INCR (b, used / 2);
+		for (i = 0; i < used; i++)
+		  STORE_CHARACTER_AND_INCR
+		    (b, RANGE_TABLE_WORK_ELT (range_table_work, i));
+	      }
+	  }
+	  break;
 
 
-            case 'w':
-              laststart = b;
-              BUF_PUSH (wordchar);
-              break;
-
-
-            case 'W':
-              laststart = b;
-              BUF_PUSH (notwordchar);
-              break;
-
-
-            case '<':
-              BUF_PUSH (wordbeg);
-              break;
-
-            case '>':
-              BUF_PUSH (wordend);
-              break;
-
-            case 'b':
-              BUF_PUSH (wordbound);
-              break;
-
-            case 'B':
-              BUF_PUSH (notwordbound);
-              break;
-
-            case '`':
-              BUF_PUSH (begbuf);
-              break;
-
-            case '\'':
-              BUF_PUSH (endbuf);
-              break;
-
-            case '1': case '2': case '3': case '4': case '5':
-            case '6': case '7': case '8': case '9':
-              if (syntax & RE_NO_BK_REFS)
-                goto normal_char;
-
-              c1 = c - '0';
-
-              if (c1 > regnum)
-                return REG_ESUBREG;
-
-              /* Can't back reference to a subexpression if inside of it.  */
-              if (group_in_compile_stack (compile_stack, c1))
-                goto normal_char;
-
-              laststart = b;
-              BUF_PUSH_2 (duplicate, c1);
-              break;
-
-
-            case '+':
-            case '?':
-              if (syntax & RE_BK_PLUS_QM)
-                goto handle_plus;
-              else
-                goto normal_backslash;
-
-            default:
-            normal_backslash:
-              /* You might think it would be useful for \ to mean
-                 not to translate; but if we don't translate it
-                 it will never match anything.  */
-              c = TRANSLATE (c);
-              goto normal_char;
-            }
-          break;
+	case '(':
+	  if (syntax & RE_NO_BK_PARENS)
+	    goto handle_open;
+	  else
+	    goto normal_char;
 
 
-	default:
-        /* Expects the character in `c'.  */
-	normal_char:
-	      /* If no exactn currently being built.  */
-          if (!pending_exact
+	case ')':
+	  if (syntax & RE_NO_BK_PARENS)
+	    goto handle_close;
+	  else
+	    goto normal_char;
+
 
-              /* If last exactn not at current position.  */
-              || pending_exact + *pending_exact + 1 != b
+	case '\n':
+	  if (syntax & RE_NEWLINE_ALT)
+	    goto handle_alt;
+	  else
+	    goto normal_char;
 
-              /* We have only one byte following the exactn for the count.  */
-	      || *pending_exact == (1 << BYTEWIDTH) - 1
 
-              /* If followed by a repetition operator.  */
-              || *p == '*' || *p == '^'
-	      || ((syntax & RE_BK_PLUS_QM)
-		  ? *p == '\\' && (p[1] == '+' || p[1] == '?')
-		  : (*p == '+' || *p == '?'))
-	      || ((syntax & RE_INTERVALS)
-                  && ((syntax & RE_NO_BK_BRACES)
-		      ? *p == '{'
-                      : (p[0] == '\\' && p[1] == '{'))))
+	case '|':
+	  if (syntax & RE_NO_BK_VBAR)
+	    goto handle_alt;
+	  else
+	    goto normal_char;
+
+
+	case '{':
+	   if (syntax & RE_INTERVALS && syntax & RE_NO_BK_BRACES)
+	     goto handle_interval;
+	   else
+	     goto normal_char;
+
+
+	case '\\':
+	  if (p == pend) FREE_STACK_RETURN (REG_EESCAPE);
+
+	  /* Do not translate the character after the \, so that we can
+	     distinguish, e.g., \B from \b, even if we normally would
+	     translate, e.g., B to b.  */
+	  PATFETCH_RAW (c);
+
+	  switch (c)
 	    {
-	      /* Start building a new exactn.  */
+	    case '(':
+	      if (syntax & RE_NO_BK_PARENS)
+		goto normal_backslash;
+
+	    handle_open:
+	      bufp->re_nsub++;
+	      regnum++;
 
-              laststart = b;
+	      if (COMPILE_STACK_FULL)
+		{
+		  RETALLOC (compile_stack.stack, compile_stack.size << 1,
+			    compile_stack_elt_t);
+		  if (compile_stack.stack == NULL) return REG_ESPACE;
 
-	      BUF_PUSH_2 (exactn, 0);
-	      pending_exact = b - 1;
-            }
+		  compile_stack.size <<= 1;
+		}
 
-	  BUF_PUSH (c);
-          (*pending_exact)++;
-	  break;
-        } /* switch (c) */
-    } /* while p != pend */
+	      /* These are the values to restore when we hit end of this
+		 group.	 They are all relative offsets, so that if the
+		 whole pattern moves because of realloc, they will still
+		 be valid.  */
+	      COMPILE_STACK_TOP.begalt_offset = begalt - bufp->buffer;
+	      COMPILE_STACK_TOP.fixup_alt_jump
+		= fixup_alt_jump ? fixup_alt_jump - bufp->buffer + 1 : 0;
+	      COMPILE_STACK_TOP.laststart_offset = b - bufp->buffer;
+	      COMPILE_STACK_TOP.regnum = regnum;
+
+	      /* We will eventually replace the 0 with the number of
+		 groups inner to this one.  But do not push a
+		 start_memory for groups beyond the last one we can
+		 represent in the compiled pattern.  */
+	      if (regnum <= MAX_REGNUM)
+		{
+		  COMPILE_STACK_TOP.inner_group_offset = b - bufp->buffer + 2;
+		  BUF_PUSH_3 (start_memory, regnum, 0);
+		}
 
+	      compile_stack.avail++;
 
-  /* Through the pattern now.  */
+	      fixup_alt_jump = 0;
+	      laststart = 0;
+	      begalt = b;
+	      /* If we've reached MAX_REGNUM groups, then this open
+		 won't actually generate any code, so we'll have to
+		 clear pending_exact explicitly.  */
+	      pending_exact = 0;
+	      break;
 
-  if (fixup_alt_jump)
-    STORE_JUMP (jump_past_alt, fixup_alt_jump, b);
 
-  if (!COMPILE_STACK_EMPTY)
-    return REG_EPAREN;
+	    case ')':
+	      if (syntax & RE_NO_BK_PARENS) goto normal_backslash;
 
-  free (compile_stack.stack);
+	      if (COMPILE_STACK_EMPTY)
+		if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD)
+		  goto normal_backslash;
+		else
+		  FREE_STACK_RETURN (REG_ERPAREN);
+
+	    handle_close:
+	      if (fixup_alt_jump)
+		{ /* Push a dummy failure point at the end of the
+		     alternative for a possible future
+		     `pop_failure_jump' to pop.	 See comments at
+		     `push_dummy_failure' in `re_match_2'.  */
+		  BUF_PUSH (push_dummy_failure);
+
+		  /* We allocated space for this jump when we assigned
+		     to `fixup_alt_jump', in the `handle_alt' case below.  */
+		  STORE_JUMP (jump_past_alt, fixup_alt_jump, b - 1);
+		}
 
-  /* We have succeeded; set the length of the buffer.  */
-  bufp->used = b - bufp->buffer;
+	      /* See similar code for backslashed left paren above.  */
+	      if (COMPILE_STACK_EMPTY)
+		if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD)
+		  goto normal_char;
+		else
+		  FREE_STACK_RETURN (REG_ERPAREN);
+
+	      /* Since we just checked for an empty stack above, this
+		 ``can't happen''.  */
+	      assert (compile_stack.avail != 0);
+	      {
+		/* We don't just want to restore into `regnum', because
+		   later groups should continue to be numbered higher,
+		   as in `(ab)c(de)' -- the second group is #2.	 */
+		regnum_t this_group_regnum;
+
+		compile_stack.avail--;
+		begalt = bufp->buffer + COMPILE_STACK_TOP.begalt_offset;
+		fixup_alt_jump
+		  = COMPILE_STACK_TOP.fixup_alt_jump
+		    ? bufp->buffer + COMPILE_STACK_TOP.fixup_alt_jump - 1
+		    : 0;
+		laststart = bufp->buffer + COMPILE_STACK_TOP.laststart_offset;
+		this_group_regnum = COMPILE_STACK_TOP.regnum;
+		/* If we've reached MAX_REGNUM groups, then this open
+		   won't actually generate any code, so we'll have to
+		   clear pending_exact explicitly.  */
+		pending_exact = 0;
 
-#ifdef DEBUG
-  if (debug)
-    {
-      DEBUG_PRINT1 ("\nCompiled pattern: ");
-      print_compiled_pattern (bufp);
-    }
-#endif /* DEBUG */
+		/* We're at the end of the group, so now we know how many
+		   groups were inside this one.	 */
+		if (this_group_regnum <= MAX_REGNUM)
+		  {
+		    unsigned char *inner_group_loc
+		      = bufp->buffer + COMPILE_STACK_TOP.inner_group_offset;
 
-  return REG_NOERROR;
-} /* regex_compile */
-
-/* Subroutines for `regex_compile'.  */
+		    *inner_group_loc = regnum - this_group_regnum;
+		    BUF_PUSH_3 (stop_memory, this_group_regnum,
+				regnum - this_group_regnum);
+		  }
+	      }
+	      break;
 
-/* Store OP at LOC followed by two-byte integer parameter ARG.  */
 
-static void
-store_op1 (op, loc, arg)
-    re_opcode_t op;
-    unsigned char *loc;
-    int arg;
-{
-  *loc = (unsigned char) op;
-  STORE_NUMBER (loc + 1, arg);
-}
+	    case '|':					/* `\|'.  */
+	      if (syntax & RE_LIMITED_OPS || syntax & RE_NO_BK_VBAR)
+		goto normal_backslash;
+	    handle_alt:
+	      if (syntax & RE_LIMITED_OPS)
+		goto normal_char;
+
+	      /* Insert before the previous alternative a jump which
+		 jumps to this alternative if the former fails.	 */
+	      GET_BUFFER_SPACE (3);
+	      INSERT_JUMP (on_failure_jump, begalt, b + 6);
+	      pending_exact = 0;
+	      b += 3;
 
+	      /* The alternative before this one has a jump after it
+		 which gets executed if it gets matched.  Adjust that
+		 jump so it will jump to this alternative's analogous
+		 jump (put in below, which in turn will jump to the next
+		 (if any) alternative's such jump, etc.).  The last such
+		 jump jumps to the correct final destination.  A picture:
+			  _____ _____
+			  |   | |   |
+			  |   v |   v
+			 a | b	 | c
+
+		 If we are at `b', then fixup_alt_jump right now points to a
+		 three-byte space after `a'.  We'll put in the jump, set
+		 fixup_alt_jump to right after `b', and leave behind three
+		 bytes which we'll fill in when we get to after `c'.  */
+
+	      if (fixup_alt_jump)
+		STORE_JUMP (jump_past_alt, fixup_alt_jump, b);
+
+	      /* Mark and leave space for a jump after this alternative,
+		 to be filled in later either by next alternative or
+		 when know we're at the end of a series of alternatives.  */
+	      fixup_alt_jump = b;
+	      GET_BUFFER_SPACE (3);
+	      b += 3;
+
+	      laststart = 0;
+	      begalt = b;
+	      break;
+
+
+	    case '{':
+	      /* If \{ is a literal.  */
+	      if (!(syntax & RE_INTERVALS)
+		     /* If we're at `\{' and it's not the open-interval
+			operator.  */
+		  || ((syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES))
+		  || (p - 2 == pattern	&&  p == pend))
+		goto normal_backslash;
 
-/* Like `store_op1', but for two two-byte parameters ARG1 and ARG2.  */
+	    handle_interval:
+	      {
+		/* If got here, then the syntax allows intervals.  */
 
-static void
-store_op2 (op, loc, arg1, arg2)
-    re_opcode_t op;
-    unsigned char *loc;
-    int arg1, arg2;
-{
-  *loc = (unsigned char) op;
-  STORE_NUMBER (loc + 1, arg1);
-  STORE_NUMBER (loc + 3, arg2);
-}
+		/* At least (most) this many matches must be made.  */
+		int lower_bound = -1, upper_bound = -1;
 
+		beg_interval = p - 1;
 
-/* Copy the bytes from LOC to END to open up three bytes of space at LOC
-   for OP followed by two-byte integer parameter ARG.  */
+		if (p == pend)
+		  {
+		    if (syntax & RE_NO_BK_BRACES)
+		      goto unfetch_interval;
+		    else
+		      FREE_STACK_RETURN (REG_EBRACE);
+		  }
 
-static void
-insert_op1 (op, loc, arg, end)
-    re_opcode_t op;
-    unsigned char *loc;
-    int arg;
-    unsigned char *end;
-{
-  register unsigned char *pfrom = end;
-  register unsigned char *pto = end + 3;
+		GET_UNSIGNED_NUMBER (lower_bound);
 
-  while (pfrom != loc)
-    *--pto = *--pfrom;
+		if (c == ',')
+		  {
+		    GET_UNSIGNED_NUMBER (upper_bound);
+		    if (upper_bound < 0) upper_bound = RE_DUP_MAX;
+		  }
+		else
+		  /* Interval such as `{1}' => match exactly once. */
+		  upper_bound = lower_bound;
 
-  store_op1 (op, loc, arg);
-}
+		if (lower_bound < 0 || upper_bound > RE_DUP_MAX
+		    || lower_bound > upper_bound)
+		  {
+		    if (syntax & RE_NO_BK_BRACES)
+		      goto unfetch_interval;
+		    else
+		      FREE_STACK_RETURN (REG_BADBR);
+		  }
 
+		if (!(syntax & RE_NO_BK_BRACES))
+		  {
+		    if (c != '\\') FREE_STACK_RETURN (REG_EBRACE);
 
-/* Like `insert_op1', but for two two-byte parameters ARG1 and ARG2.  */
+		    PATFETCH (c);
+		  }
 
-static void
-insert_op2 (op, loc, arg1, arg2, end)
-    re_opcode_t op;
-    unsigned char *loc;
-    int arg1, arg2;
-    unsigned char *end;
-{
-  register unsigned char *pfrom = end;
-  register unsigned char *pto = end + 5;
+		if (c != '}')
+		  {
+		    if (syntax & RE_NO_BK_BRACES)
+		      goto unfetch_interval;
+		    else
+		      FREE_STACK_RETURN (REG_BADBR);
+		  }
 
-  while (pfrom != loc)
-    *--pto = *--pfrom;
+		/* We just parsed a valid interval.  */
 
-  store_op2 (op, loc, arg1, arg2);
-}
+		/* If it's invalid to have no preceding re.  */
+		if (!laststart)
+		  {
+		    if (syntax & RE_CONTEXT_INVALID_OPS)
+		      FREE_STACK_RETURN (REG_BADRPT);
+		    else if (syntax & RE_CONTEXT_INDEP_OPS)
+		      laststart = b;
+		    else
+		      goto unfetch_interval;
+		  }
+
+		/* If the upper bound is zero, don't want to succeed at
+		   all; jump from `laststart' to `b + 3', which will be
+		   the end of the buffer after we insert the jump.  */
+		 if (upper_bound == 0)
+		   {
+		     GET_BUFFER_SPACE (3);
+		     INSERT_JUMP (jump, laststart, b + 3);
+		     b += 3;
+		   }
+
+		 /* Otherwise, we have a nontrivial interval.  When
+		    we're all done, the pattern will look like:
+		      set_number_at <jump count> <upper bound>
+		      set_number_at <succeed_n count> <lower bound>
+		      succeed_n <after jump addr> <succeed_n count>
+		      <body of loop>
+		      jump_n <succeed_n addr> <jump count>
+		    (The upper bound and `jump_n' are omitted if
+		    `upper_bound' is 1, though.)  */
+		 else
+		   { /* If the upper bound is > 1, we need to insert
+			more at the end of the loop.  */
+		     unsigned nbytes = 10 + (upper_bound > 1) * 10;
+
+		     GET_BUFFER_SPACE (nbytes);
+
+		     /* Initialize lower bound of the `succeed_n', even
+			though it will be set during matching by its
+			attendant `set_number_at' (inserted next),
+			because `re_compile_fastmap' needs to know.
+			Jump to the `jump_n' we might insert below.  */
+		     INSERT_JUMP2 (succeed_n, laststart,
+				   b + 5 + (upper_bound > 1) * 5,
+				   lower_bound);
+		     b += 5;
+
+		     /* Code to initialize the lower bound.  Insert
+			before the `succeed_n'.	 The `5' is the last two
+			bytes of this `set_number_at', plus 3 bytes of
+			the following `succeed_n'.  */
+		     insert_op2 (set_number_at, laststart, 5, lower_bound, b);
+		     b += 5;
+
+		     if (upper_bound > 1)
+		       { /* More than one repetition is allowed, so
+			    append a backward jump to the `succeed_n'
+			    that starts this interval.
+
+			    When we've reached this during matching,
+			    we'll have matched the interval once, so
+			    jump back only `upper_bound - 1' times.  */
+			 STORE_JUMP2 (jump_n, b, laststart + 5,
+				      upper_bound - 1);
+			 b += 5;
+
+			 /* The location we want to set is the second
+			    parameter of the `jump_n'; that is `b-2' as
+			    an absolute address.  `laststart' will be
+			    the `set_number_at' we're about to insert;
+			    `laststart+3' the number to set, the source
+			    for the relative address.  But we are
+			    inserting into the middle of the pattern --
+			    so everything is getting moved up by 5.
+			    Conclusion: (b - 2) - (laststart + 3) + 5,
+			    i.e., b - laststart.
+
+			    We insert this at the beginning of the loop
+			    so that if we fail during matching, we'll
+			    reinitialize the bounds.  */
+			 insert_op2 (set_number_at, laststart, b - laststart,
+				     upper_bound - 1, b);
+			 b += 5;
+		       }
+		   }
+		pending_exact = 0;
+		beg_interval = NULL;
+	      }
+	      break;
+
+	    unfetch_interval:
+	      /* If an invalid interval, match the characters as literals.  */
+	       assert (beg_interval);
+	       p = beg_interval;
+	       beg_interval = NULL;
+
+	       /* normal_char and normal_backslash need `c'.  */
+	       PATFETCH (c);
+
+	       if (!(syntax & RE_NO_BK_BRACES))
+		 {
+		   if (p > pattern  &&	p[-1] == '\\')
+		     goto normal_backslash;
+		 }
+	       goto normal_char;
+
+#ifdef emacs
+	    /* There is no way to specify the before_dot and after_dot
+	       operators.  rms says this is ok.	 --karl	 */
+	    case '=':
+	      BUF_PUSH (at_dot);
+	      break;
+
+	    case 's':
+	      laststart = b;
+	      PATFETCH (c);
+	      BUF_PUSH_2 (syntaxspec, syntax_spec_code[c]);
+	      break;
+
+	    case 'S':
+	      laststart = b;
+	      PATFETCH (c);
+	      BUF_PUSH_2 (notsyntaxspec, syntax_spec_code[c]);
+	      break;
+
+	    case 'c':
+	      laststart = b;
+	      PATFETCH_RAW (c);
+	      BUF_PUSH_2 (categoryspec, c);
+	      break;
+
+	    case 'C':
+	      laststart = b;
+	      PATFETCH_RAW (c);
+	      BUF_PUSH_2 (notcategoryspec, c);
+	      break;
+#endif /* emacs */
+
+
+	    case 'w':
+	      laststart = b;
+	      BUF_PUSH (wordchar);
+	      break;
+
 
+	    case 'W':
+	      laststart = b;
+	      BUF_PUSH (notwordchar);
+	      break;
 
-/* P points to just after a ^ in PATTERN.  Return true if that ^ comes
-   after an alternative or a begin-subexpression.  We assume there is at
-   least one character before the ^.  */
 
-static boolean
-at_begline_loc_p (pattern, p, syntax)
-    const char *pattern, *p;
-    reg_syntax_t syntax;
-{
-  const char *prev = p - 2;
-  boolean prev_prev_backslash = prev > pattern && prev[-1] == '\\';
+	    case '<':
+	      BUF_PUSH (wordbeg);
+	      break;
 
-  return
-       /* After a subexpression?  */
-       (*prev == '(' && (syntax & RE_NO_BK_PARENS || prev_prev_backslash))
-       /* After an alternative?  */
-    || (*prev == '|' && (syntax & RE_NO_BK_VBAR || prev_prev_backslash));
-}
+	    case '>':
+	      BUF_PUSH (wordend);
+	      break;
 
+	    case 'b':
+	      BUF_PUSH (wordbound);
+	      break;
 
-/* The dual of at_begline_loc_p.  This one is for $.  We assume there is
-   at least one character after the $, i.e., `P < PEND'.  */
+	    case 'B':
+	      BUF_PUSH (notwordbound);
+	      break;
 
-static boolean
-at_endline_loc_p (p, pend, syntax)
-    const char *p, *pend;
-    int syntax;
-{
-  const char *next = p;
-  boolean next_backslash = *next == '\\';
-  const char *next_next = p + 1 < pend ? p + 1 : NULL;
-  
-  return
-       /* Before a subexpression?  */
-       (syntax & RE_NO_BK_PARENS ? *next == ')'
-        : next_backslash && next_next && *next_next == ')')
-       /* Before an alternative?  */
-    || (syntax & RE_NO_BK_VBAR ? *next == '|'
-        : next_backslash && next_next && *next_next == '|');
-}
+	    case '`':
+	      BUF_PUSH (begbuf);
+	      break;
 
+	    case '\'':
+	      BUF_PUSH (endbuf);
+	      break;
 
-/* Returns true if REGNUM is in one of COMPILE_STACK's elements and 
-   false if it's not.  */
+	    case '1': case '2': case '3': case '4': case '5':
+	    case '6': case '7': case '8': case '9':
+	      if (syntax & RE_NO_BK_REFS)
+		goto normal_char;
 
-static boolean
-group_in_compile_stack (compile_stack, regnum)
-    compile_stack_type compile_stack;
-    regnum_t regnum;
-{
-  int this_element;
+	      c1 = c - '0';
 
-  for (this_element = compile_stack.avail - 1;  
-       this_element >= 0; 
-       this_element--)
-    if (compile_stack.stack[this_element].regnum == regnum)
-      return true;
+	      if (c1 > regnum)
+		FREE_STACK_RETURN (REG_ESUBREG);
 
-  return false;
-}
+	      /* Can't back reference to a subexpression if inside of it.  */
+	      if (group_in_compile_stack (compile_stack, c1))
+		goto normal_char;
 
+	      laststart = b;
+	      BUF_PUSH_2 (duplicate, c1);
+	      break;
 
-/* Read the ending character of a range (in a bracket expression) from the
-   uncompiled pattern *P_PTR (which ends at PEND).  We assume the
-   starting character is in `P[-2]'.  (`P[-1]' is the character `-'.)
-   Then we set the translation of all bits between the starting and
-   ending characters (inclusive) in the compiled pattern B.
-   
-   Return an error code.
-   
-   We use these short variable names so we can use the same macros as
-   `regex_compile' itself.  */
 
-static reg_errcode_t
-compile_range (p_ptr, pend, translate, syntax, b)
-    const char **p_ptr, *pend;
-    char *translate;
-    reg_syntax_t syntax;
-    unsigned char *b;
-{
-  unsigned this_char;
+	    case '+':
+	    case '?':
+	      if (syntax & RE_BK_PLUS_QM)
+		goto handle_plus;
+	      else
+		goto normal_backslash;
 
-  const char *p = *p_ptr;
-  int range_start, range_end;
-  
-  if (p == pend)
-    return REG_ERANGE;
-
-  /* Even though the pattern is a signed `char *', we need to fetch
-     with unsigned char *'s; if the high bit of the pattern character
-     is set, the range endpoints will be negative if we fetch using a
-     signed char *.
-
-     We also want to fetch the endpoints without translating them; the 
-     appropriate translation is done in the bit-setting loop below.  */
-  range_start = ((unsigned char *) p)[-2];
-  range_end   = ((unsigned char *) p)[0];
-
-  /* Have to increment the pointer into the pattern string, so the
-     caller isn't still at the ending character.  */
-  (*p_ptr)++;
-
-  /* If the start is after the end, the range is empty.  */
-  if (range_start > range_end)
-    return syntax & RE_NO_EMPTY_RANGES ? REG_ERANGE : REG_NOERROR;
-
-  /* Here we see why `this_char' has to be larger than an `unsigned
-     char' -- the range is inclusive, so if `range_end' == 0xff
-     (assuming 8-bit characters), we would otherwise go into an infinite
-     loop, since all characters <= 0xff.  */
-  for (this_char = range_start; this_char <= range_end; this_char++)
-    {
-      SET_LIST_BIT (TRANSLATE (this_char));
-    }
-  
-  return REG_NOERROR;
-}
-
-/* Failure stack declarations and macros; both re_compile_fastmap and
-   re_match_2 use a failure stack.  These have to be macros because of
-   REGEX_ALLOCATE.  */
-   
+	    default:
+	    normal_backslash:
+	      /* You might think it would be useful for \ to mean
+		 not to translate; but if we don't translate it
+		 it will never match anything.	*/
+	      c = TRANSLATE (c);
+	      goto normal_char;
+	    }
+	  break;
 
-/* Number of failure points for which to initially allocate space
-   when matching.  If this number is exceeded, we allocate more
-   space, so it is not a hard limit.  */
-#ifndef INIT_FAILURE_ALLOC
-#define INIT_FAILURE_ALLOC 5
-#endif
 
-/* Roughly the maximum number of failure points on the stack.  Would be
-   exactly that if always used MAX_FAILURE_SPACE each time we failed.
-   This is a variable only so users of regex can assign to it; we never
-   change it ourselves.  */
-int re_max_failures = 2000;
+	default:
+	/* Expects the character in `c'.  */
+	normal_char:
+	  p1 = p - 1;		/* P1 points the head of C.  */
+#ifdef emacs
+	  if (bufp->multibyte)
+	    {
+	      c = STRING_CHAR (p1, pend - p1);
+	      c = TRANSLATE (c);
+	      /* Set P to the next character boundary.  */
+	      p += MULTIBYTE_FORM_LENGTH (p1, pend - p1) - 1;
+	    }
+#endif
+	      /* If no exactn currently being built.  */
+	  if (!pending_exact
 
-union fail_stack_elt
-{
-  unsigned char *pointer;
-  int integer;
-};
+	      /* If last exactn not at current position.  */
+	      || pending_exact + *pending_exact + 1 != b
 
-typedef union fail_stack_elt fail_stack_elt_t;
+	      /* We have only one byte following the exactn for the count.  */
+	      || *pending_exact >= (1 << BYTEWIDTH) - (p - p1)
 
-typedef struct
-{
-  fail_stack_elt_t *stack;
-  unsigned size;
-  unsigned avail;			/* Offset of next open position.  */
-} fail_stack_type;
+	      /* If followed by a repetition operator.	*/
+	      || (p != pend && (*p == '*' || *p == '^'))
+	      || ((syntax & RE_BK_PLUS_QM)
+		  ? p + 1 < pend && *p == '\\' && (p[1] == '+' || p[1] == '?')
+		  : p != pend && (*p == '+' || *p == '?'))
+	      || ((syntax & RE_INTERVALS)
+		  && ((syntax & RE_NO_BK_BRACES)
+		      ? p != pend && *p == '{'
+		      : p + 1 < pend && p[0] == '\\' && p[1] == '{')))
+	    {
+	      /* Start building a new exactn.  */
 
-#define FAIL_STACK_EMPTY()     (fail_stack.avail == 0)
-#define FAIL_STACK_PTR_EMPTY() (fail_stack_ptr->avail == 0)
-#define FAIL_STACK_FULL()      (fail_stack.avail == fail_stack.size)
-#define FAIL_STACK_TOP()       (fail_stack.stack[fail_stack.avail])
+	      laststart = b;
 
+	      BUF_PUSH_2 (exactn, 0);
+	      pending_exact = b - 1;
+	    }
 
-/* Initialize `fail_stack'.  Do `return -2' if the alloc fails.  */
+#ifdef emacs
+	  if (! SINGLE_BYTE_CHAR_P (c))
+	    {
+	      unsigned char work[4], *str;
+	      int i = CHAR_STRING (c, work, str);
+	      int j;
+	      for (j = 0; j < i; j++)
+		{
+		  BUF_PUSH (str[j]);
+		  (*pending_exact)++;
+		}
+	    }
+	  else
+#endif
+	    {
+	      BUF_PUSH (c);
+	      (*pending_exact)++;
+	    }
+	  break;
+	} /* switch (c) */
+    } /* while p != pend */
 
-#define INIT_FAIL_STACK()						\
-  do {									\
-    fail_stack.stack = (fail_stack_elt_t *)				\
-      REGEX_ALLOCATE (INIT_FAILURE_ALLOC * sizeof (fail_stack_elt_t));	\
-									\
-    if (fail_stack.stack == NULL)					\
-      return -2;							\
-									\
-    fail_stack.size = INIT_FAILURE_ALLOC;				\
-    fail_stack.avail = 0;						\
-  } while (0)
 
+  /* Through the pattern now.  */
 
-/* Double the size of FAIL_STACK, up to approximately `re_max_failures' items.
+  if (fixup_alt_jump)
+    STORE_JUMP (jump_past_alt, fixup_alt_jump, b);
 
-   Return 1 if succeeds, and 0 if either ran out of memory
-   allocating space for it or it was already too large.  
-   
-   REGEX_REALLOCATE requires `destination' be declared.   */
+  if (!COMPILE_STACK_EMPTY)
+    FREE_STACK_RETURN (REG_EPAREN);
 
-#define DOUBLE_FAIL_STACK(fail_stack)					\
-  ((fail_stack).size > re_max_failures * MAX_FAILURE_ITEMS		\
-   ? 0									\
-   : ((fail_stack).stack = (fail_stack_elt_t *)				\
-        REGEX_REALLOCATE ((fail_stack).stack, 				\
-          (fail_stack).size * sizeof (fail_stack_elt_t),		\
-          ((fail_stack).size << 1) * sizeof (fail_stack_elt_t)),	\
-									\
-      (fail_stack).stack == NULL					\
-      ? 0								\
-      : ((fail_stack).size <<= 1, 					\
-         1)))
+  /* If we don't want backtracking, force success
+     the first time we reach the end of the compiled pattern.  */
+  if (syntax & RE_NO_POSIX_BACKTRACKING)
+    BUF_PUSH (succeed);
 
+  free (compile_stack.stack);
 
-/* Push PATTERN_OP on FAIL_STACK. 
+  /* We have succeeded; set the length of the buffer.  */
+  bufp->used = b - bufp->buffer;
 
-   Return 1 if was able to do so and 0 if ran out of memory allocating
-   space to do so.  */
-#define PUSH_PATTERN_OP(POINTER, FAIL_STACK)				\
-  ((FAIL_STACK_FULL ()							\
-    && !DOUBLE_FAIL_STACK (FAIL_STACK))					\
-   ? 0									\
-   : ((FAIL_STACK).stack[(FAIL_STACK).avail++].pointer = POINTER,	\
-      1))
+#ifdef DEBUG
+  if (debug)
+    {
+      DEBUG_PRINT1 ("\nCompiled pattern: \n");
+      print_compiled_pattern (bufp);
+    }
+#endif /* DEBUG */
 
-/* Push a pointer value onto the failure stack.
-   Assumes the variable `fail_stack'.  Probably should only
-   be called from within `PUSH_FAILURE_POINT'.  */
-#define PUSH_FAILURE_POINTER(item)					\
-  fail_stack.stack[fail_stack.avail++].pointer = (unsigned char *) (item)
+#ifndef MATCH_MAY_ALLOCATE
+  /* Initialize the failure stack to the largest possible stack.  This
+     isn't necessary unless we're trying to avoid calling alloca in
+     the search and match routines.  */
+  {
+    int num_regs = bufp->re_nsub + 1;
 
-/* This pushes an integer-valued item onto the failure stack.
-   Assumes the variable `fail_stack'.  Probably should only
-   be called from within `PUSH_FAILURE_POINT'.  */
-#define PUSH_FAILURE_INT(item)					\
-  fail_stack.stack[fail_stack.avail++].integer = (item)
+    if (fail_stack.size < re_max_failures * TYPICAL_FAILURE_SIZE)
+      {
+	fail_stack.size = re_max_failures * TYPICAL_FAILURE_SIZE;
 
-/* Push a fail_stack_elt_t value onto the failure stack.
-   Assumes the variable `fail_stack'.  Probably should only
-   be called from within `PUSH_FAILURE_POINT'.  */
-#define PUSH_FAILURE_ELT(item)					\
-  fail_stack.stack[fail_stack.avail++] =  (item)
+#ifdef emacs
+	if (! fail_stack.stack)
+	  fail_stack.stack
+	    = (fail_stack_elt_t *) xmalloc (fail_stack.size
+					    * sizeof (fail_stack_elt_t));
+	else
+	  fail_stack.stack
+	    = (fail_stack_elt_t *) xrealloc (fail_stack.stack,
+					     (fail_stack.size
+					      * sizeof (fail_stack_elt_t)));
+#else /* not emacs */
+	if (! fail_stack.stack)
+	  fail_stack.stack
+	    = (fail_stack_elt_t *) malloc (fail_stack.size
+					   * sizeof (fail_stack_elt_t));
+	else
+	  fail_stack.stack
+	    = (fail_stack_elt_t *) realloc (fail_stack.stack,
+					    (fail_stack.size
+					     * sizeof (fail_stack_elt_t)));
+#endif /* not emacs */
+      }
 
-/* These three POP... operations complement the three PUSH... operations.
-   All assume that `fail_stack' is nonempty.  */
-#define POP_FAILURE_POINTER() fail_stack.stack[--fail_stack.avail].pointer
-#define POP_FAILURE_INT() fail_stack.stack[--fail_stack.avail].integer
-#define POP_FAILURE_ELT() fail_stack.stack[--fail_stack.avail]
+    regex_grow_registers (num_regs);
+  }
+#endif /* not MATCH_MAY_ALLOCATE */
 
-/* Used to omit pushing failure point id's when we're not debugging.  */
-#ifdef DEBUG
-#define DEBUG_PUSH PUSH_FAILURE_INT
-#define DEBUG_POP(item_addr) *(item_addr) = POP_FAILURE_INT ()
-#else
-#define DEBUG_PUSH(item)
-#define DEBUG_POP(item_addr)
-#endif
+  return REG_NOERROR;
+} /* regex_compile */
+
+/* Subroutines for `regex_compile'.  */
 
+/* Store OP at LOC followed by two-byte integer parameter ARG.	*/
 
-/* Push the information about the state we will need
-   if we ever fail back to it.
+static void
+store_op1 (op, loc, arg)
+    re_opcode_t op;
+    unsigned char *loc;
+    int arg;
+{
+  *loc = (unsigned char) op;
+  STORE_NUMBER (loc + 1, arg);
+}
 
-   Requires variables fail_stack, regstart, regend, reg_info, and
-   num_regs be declared.  DOUBLE_FAIL_STACK requires `destination' be
-   declared.
 
-   Does `return FAILURE_CODE' if runs out of memory.  */
+/* Like `store_op1', but for two two-byte parameters ARG1 and ARG2.  */
 
-#define PUSH_FAILURE_POINT(pattern_place, string_place, failure_code)	\
-  do {									\
-    /* Must be int, so when we don't save any registers, the arithmetic	\
-       of 0 + -1 isn't done as unsigned.  */				\
-    int this_reg;							\
-    									\
-    DEBUG_STATEMENT (failure_id++);					\
-    DEBUG_STATEMENT (nfailure_points_pushed++);				\
-    DEBUG_PRINT2 ("\nPUSH_FAILURE_POINT #%u:\n", failure_id);		\
-    DEBUG_PRINT2 ("  Before push, next avail: %d\n", (fail_stack).avail);\
-    DEBUG_PRINT2 ("                     size: %d\n", (fail_stack).size);\
-									\
-    DEBUG_PRINT2 ("  slots needed: %d\n", NUM_FAILURE_ITEMS);		\
-    DEBUG_PRINT2 ("     available: %d\n", REMAINING_AVAIL_SLOTS);	\
-									\
-    /* Ensure we have enough space allocated for what we will push.  */	\
-    while (REMAINING_AVAIL_SLOTS < NUM_FAILURE_ITEMS)			\
-      {									\
-        if (!DOUBLE_FAIL_STACK (fail_stack))				\
-          return failure_code;						\
-									\
-        DEBUG_PRINT2 ("\n  Doubled stack; size now: %d\n",		\
-		       (fail_stack).size);				\
-        DEBUG_PRINT2 ("  slots available: %d\n", REMAINING_AVAIL_SLOTS);\
-      }									\
-									\
-    /* Push the info, starting with the registers.  */			\
-    DEBUG_PRINT1 ("\n");						\
-									\
-    if (1)								\
-      for (this_reg = lowest_active_reg; this_reg <= highest_active_reg; \
-	   this_reg++)							\
-	{								\
-	  DEBUG_PRINT2 ("  Pushing reg: %d\n", this_reg);		\
-	  DEBUG_STATEMENT (num_regs_pushed++);				\
-									\
-	  DEBUG_PRINT2 ("    start: 0x%x\n", regstart[this_reg]);	\
-	  PUSH_FAILURE_POINTER (regstart[this_reg]);			\
-									\
-	  DEBUG_PRINT2 ("    end: 0x%x\n", regend[this_reg]);		\
-	  PUSH_FAILURE_POINTER (regend[this_reg]);			\
-									\
-	  DEBUG_PRINT2 ("    info: 0x%x\n      ", reg_info[this_reg]);	\
-	  DEBUG_PRINT2 (" match_null=%d",				\
-			REG_MATCH_NULL_STRING_P (reg_info[this_reg]));	\
-	  DEBUG_PRINT2 (" active=%d", IS_ACTIVE (reg_info[this_reg]));	\
-	  DEBUG_PRINT2 (" matched_something=%d",			\
-			MATCHED_SOMETHING (reg_info[this_reg]));	\
-	  DEBUG_PRINT2 (" ever_matched=%d",				\
-			EVER_MATCHED_SOMETHING (reg_info[this_reg]));	\
-	  DEBUG_PRINT1 ("\n");						\
-	  PUSH_FAILURE_ELT (reg_info[this_reg].word);			\
-	}								\
-									\
-    DEBUG_PRINT2 ("  Pushing  low active reg: %d\n", lowest_active_reg);\
-    PUSH_FAILURE_INT (lowest_active_reg);				\
-									\
-    DEBUG_PRINT2 ("  Pushing high active reg: %d\n", highest_active_reg);\
-    PUSH_FAILURE_INT (highest_active_reg);				\
-									\
-    DEBUG_PRINT2 ("  Pushing pattern 0x%x: ", pattern_place);		\
-    DEBUG_PRINT_COMPILED_PATTERN (bufp, pattern_place, pend);		\
-    PUSH_FAILURE_POINTER (pattern_place);				\
-									\
-    DEBUG_PRINT2 ("  Pushing string 0x%x: `", string_place);		\
-    DEBUG_PRINT_DOUBLE_STRING (string_place, string1, size1, string2,   \
-				 size2);				\
-    DEBUG_PRINT1 ("'\n");						\
-    PUSH_FAILURE_POINTER (string_place);				\
-									\
-    DEBUG_PRINT2 ("  Pushing failure id: %u\n", failure_id);		\
-    DEBUG_PUSH (failure_id);						\
-  } while (0)
+static void
+store_op2 (op, loc, arg1, arg2)
+    re_opcode_t op;
+    unsigned char *loc;
+    int arg1, arg2;
+{
+  *loc = (unsigned char) op;
+  STORE_NUMBER (loc + 1, arg1);
+  STORE_NUMBER (loc + 3, arg2);
+}
 
-/* This is the number of items that are pushed and popped on the stack
-   for each register.  */
-#define NUM_REG_ITEMS  3
 
-/* Individual items aside from the registers.  */
-#ifdef DEBUG
-#define NUM_NONREG_ITEMS 5 /* Includes failure point id.  */
-#else
-#define NUM_NONREG_ITEMS 4
-#endif
+/* Copy the bytes from LOC to END to open up three bytes of space at LOC
+   for OP followed by two-byte integer parameter ARG.  */
 
-/* We push at most this many items on the stack.  */
-#define MAX_FAILURE_ITEMS ((num_regs - 1) * NUM_REG_ITEMS + NUM_NONREG_ITEMS)
+static void
+insert_op1 (op, loc, arg, end)
+    re_opcode_t op;
+    unsigned char *loc;
+    int arg;
+    unsigned char *end;
+{
+  register unsigned char *pfrom = end;
+  register unsigned char *pto = end + 3;
 
-/* We actually push this many items.  */
-#define NUM_FAILURE_ITEMS						\
-  ((highest_active_reg - lowest_active_reg + 1) * NUM_REG_ITEMS 	\
-    + NUM_NONREG_ITEMS)
+  while (pfrom != loc)
+    *--pto = *--pfrom;
 
-/* How many items can still be added to the stack without overflowing it.  */
-#define REMAINING_AVAIL_SLOTS ((fail_stack).size - (fail_stack).avail)
+  store_op1 (op, loc, arg);
+}
 
 
-/* Pops what PUSH_FAIL_STACK pushes.
+/* Like `insert_op1', but for two two-byte parameters ARG1 and ARG2.  */
 
-   We restore into the parameters, all of which should be lvalues:
-     STR -- the saved data position.
-     PAT -- the saved pattern position.
-     LOW_REG, HIGH_REG -- the highest and lowest active registers.
-     REGSTART, REGEND -- arrays of string positions.
-     REG_INFO -- array of information about each subexpression.
+static void
+insert_op2 (op, loc, arg1, arg2, end)
+    re_opcode_t op;
+    unsigned char *loc;
+    int arg1, arg2;
+    unsigned char *end;
+{
+  register unsigned char *pfrom = end;
+  register unsigned char *pto = end + 5;
 
-   Also assumes the variables `fail_stack' and (if debugging), `bufp',
-   `pend', `string1', `size1', `string2', and `size2'.  */
+  while (pfrom != loc)
+    *--pto = *--pfrom;
 
-#define POP_FAILURE_POINT(str, pat, low_reg, high_reg, regstart, regend, reg_info)\
-{									\
-  DEBUG_STATEMENT (fail_stack_elt_t failure_id;)			\
-  int this_reg;								\
-  const unsigned char *string_temp;					\
-									\
-  assert (!FAIL_STACK_EMPTY ());					\
-									\
-  /* Remove failure points and point to how many regs pushed.  */	\
-  DEBUG_PRINT1 ("POP_FAILURE_POINT:\n");				\
-  DEBUG_PRINT2 ("  Before pop, next avail: %d\n", fail_stack.avail);	\
-  DEBUG_PRINT2 ("                    size: %d\n", fail_stack.size);	\
-									\
-  assert (fail_stack.avail >= NUM_NONREG_ITEMS);			\
-									\
-  DEBUG_POP (&failure_id);						\
-  DEBUG_PRINT2 ("  Popping failure id: %u\n", failure_id);		\
-									\
-  /* If the saved string location is NULL, it came from an		\
-     on_failure_keep_string_jump opcode, and we want to throw away the	\
-     saved NULL, thus retaining our current position in the string.  */	\
-  string_temp = POP_FAILURE_POINTER ();					\
-  if (string_temp != NULL)						\
-    str = (const char *) string_temp;					\
-									\
-  DEBUG_PRINT2 ("  Popping string 0x%x: `", str);			\
-  DEBUG_PRINT_DOUBLE_STRING (str, string1, size1, string2, size2);	\
-  DEBUG_PRINT1 ("'\n");							\
-									\
-  pat = (unsigned char *) POP_FAILURE_POINTER ();			\
-  DEBUG_PRINT2 ("  Popping pattern 0x%x: ", pat);			\
-  DEBUG_PRINT_COMPILED_PATTERN (bufp, pat, pend);			\
-									\
-  /* Restore register info.  */						\
-  high_reg = (unsigned) POP_FAILURE_INT ();				\
-  DEBUG_PRINT2 ("  Popping high active reg: %d\n", high_reg);		\
-									\
-  low_reg = (unsigned) POP_FAILURE_INT ();				\
-  DEBUG_PRINT2 ("  Popping  low active reg: %d\n", low_reg);		\
-									\
-  if (1)								\
-    for (this_reg = high_reg; this_reg >= low_reg; this_reg--)		\
-      {									\
-	DEBUG_PRINT2 ("    Popping reg: %d\n", this_reg);		\
-									\
-	reg_info[this_reg].word = POP_FAILURE_ELT ();			\
-	DEBUG_PRINT2 ("      info: 0x%x\n", reg_info[this_reg]);	\
-									\
-	regend[this_reg] = (const char *) POP_FAILURE_POINTER ();	\
-	DEBUG_PRINT2 ("      end: 0x%x\n", regend[this_reg]);		\
-									\
-	regstart[this_reg] = (const char *) POP_FAILURE_POINTER ();	\
-	DEBUG_PRINT2 ("      start: 0x%x\n", regstart[this_reg]);	\
-      }									\
-  else									\
-    {									\
-      for (this_reg = highest_active_reg; this_reg > high_reg; this_reg--) \
-	{								\
-	  reg_info[this_reg].word.integer = 0;				\
-	  regend[this_reg] = 0;						\
-	  regstart[this_reg] = 0;					\
-	}								\
-      highest_active_reg = high_reg;					\
-    }									\
-									\
-  DEBUG_STATEMENT (nfailure_points_popped++);				\
-} /* POP_FAILURE_POINT */
+  store_op2 (op, loc, arg1, arg2);
+}
+
+
+/* P points to just after a ^ in PATTERN.  Return true if that ^ comes
+   after an alternative or a begin-subexpression.  We assume there is at
+   least one character before the ^.  */
+
+static boolean
+at_begline_loc_p (pattern, p, syntax)
+    const char *pattern, *p;
+    reg_syntax_t syntax;
+{
+  const char *prev = p - 2;
+  boolean prev_prev_backslash = prev > pattern && prev[-1] == '\\';
+
+  return
+       /* After a subexpression?  */
+       (*prev == '(' && (syntax & RE_NO_BK_PARENS || prev_prev_backslash))
+       /* After an alternative?	 */
+    || (*prev == '|' && (syntax & RE_NO_BK_VBAR || prev_prev_backslash));
+}
+
+
+/* The dual of at_begline_loc_p.  This one is for $.  We assume there is
+   at least one character after the $, i.e., `P < PEND'.  */
+
+static boolean
+at_endline_loc_p (p, pend, syntax)
+    const char *p, *pend;
+    int syntax;
+{
+  const char *next = p;
+  boolean next_backslash = *next == '\\';
+  const char *next_next = p + 1 < pend ? p + 1 : 0;
+
+  return
+       /* Before a subexpression?  */
+       (syntax & RE_NO_BK_PARENS ? *next == ')'
+	: next_backslash && next_next && *next_next == ')')
+       /* Before an alternative?  */
+    || (syntax & RE_NO_BK_VBAR ? *next == '|'
+	: next_backslash && next_next && *next_next == '|');
+}
+
+
+/* Returns true if REGNUM is in one of COMPILE_STACK's elements and
+   false if it's not.  */
+
+static boolean
+group_in_compile_stack (compile_stack, regnum)
+    compile_stack_type compile_stack;
+    regnum_t regnum;
+{
+  int this_element;
+
+  for (this_element = compile_stack.avail - 1;
+       this_element >= 0;
+       this_element--)
+    if (compile_stack.stack[this_element].regnum == regnum)
+      return true;
+
+  return false;
+}
 
 /* re_compile_fastmap computes a ``fastmap'' for the compiled pattern in
    BUFP.  A fastmap records which of the (1 << BYTEWIDTH) possible
@@ -2573,8 +3173,10 @@
 re_compile_fastmap (bufp)
      struct re_pattern_buffer *bufp;
 {
-  int j, k;
+  int i, j, k;
+#ifdef MATCH_MAY_ALLOCATE
   fail_stack_type fail_stack;
+#endif
 #ifndef REGEX_MALLOC
   char *destination;
 #endif
@@ -2587,8 +3189,12 @@
   unsigned char *p = pattern;
   register unsigned char *pend = pattern + size;
 
+  /* This holds the pointer to the failure stack, when
+     it is allocated relocatably.  */
+  fail_stack_elt_t *failure_stack_ptr;
+
   /* Assume that each path through the pattern can be null until
-     proven otherwise.  We set this false at the bottom of switch
+     proven otherwise.	We set this false at the bottom of switch
      statement, to which we get only if a particular path doesn't
      match the empty string.  */
   boolean path_can_be_null = true;
@@ -2596,69 +3202,81 @@
   /* We aren't doing a `succeed_n' to begin with.  */
   boolean succeed_n_p = false;
 
+  /* If all elements for base leading-codes in fastmap is set, this
+     flag is set true.	*/
+  boolean match_any_multibyte_characters = false;
+
+  /* Maximum code of simple (single byte) character. */
+  int simple_char_max;
+
   assert (fastmap != NULL && p != NULL);
 
   INIT_FAIL_STACK ();
-  bzero (fastmap, 1 << BYTEWIDTH);  /* Assume nothing's valid.  */
+  bzero (fastmap, 1 << BYTEWIDTH);  /* Assume nothing's valid.	*/
   bufp->fastmap_accurate = 1;	    /* It will be when we're done.  */
   bufp->can_be_null = 0;
 
-  while (p != pend || !FAIL_STACK_EMPTY ())
+  while (1)
     {
-      if (p == pend)
-        {
-          bufp->can_be_null |= path_can_be_null;
-          
-          /* Reset for next path.  */
-          path_can_be_null = true;
-          
-          p = fail_stack.stack[--fail_stack.avail].pointer;
+      if (p == pend || *p == succeed)
+	{
+	  /* We have reached the (effective) end of pattern.  */
+	  if (!FAIL_STACK_EMPTY ())
+	    {
+	      bufp->can_be_null |= path_can_be_null;
+
+	      /* Reset for next path.  */
+	      path_can_be_null = true;
+
+	      p = fail_stack.stack[--fail_stack.avail].pointer;
+
+	      continue;
+	    }
+	  else
+	    break;
 	}
 
-      /* We should never be about to go beyond the end of the pattern.  */
+      /* We should never be about to go beyond the end of the pattern.	*/
       assert (p < pend);
-      
-#ifdef SWITCH_ENUM_BUG
-      switch ((int) ((re_opcode_t) *p++))
-#else
-      switch ((re_opcode_t) *p++)
-#endif
+
+      switch (SWITCH_ENUM_CAST ((re_opcode_t) *p++))
 	{
 
-        /* I guess the idea here is to simply not bother with a fastmap
-           if a backreference is used, since it's too hard to figure out
-           the fastmap for the corresponding group.  Setting
-           `can_be_null' stops `re_search_2' from using the fastmap, so
-           that is all we do.  */
+	/* I guess the idea here is to simply not bother with a fastmap
+	   if a backreference is used, since it's too hard to figure out
+	   the fastmap for the corresponding group.  Setting
+	   `can_be_null' stops `re_search_2' from using the fastmap, so
+	   that is all we do.  */
 	case duplicate:
 	  bufp->can_be_null = 1;
-          return 0;
+	  goto done;
 
 
       /* Following are the cases which match a character.  These end
-         with `break'.  */
+	 with `break'.	*/
 
 	case exactn:
-          fastmap[p[1]] = 1;
+	  fastmap[p[1]] = 1;
 	  break;
 
 
-        case charset:
-          for (j = *p++ * BYTEWIDTH - 1; j >= 0; j--)
+#ifndef emacs
+	case charset:
+	  for (j = *p++ * BYTEWIDTH - 1; j >= 0; j--)
 	    if (p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH)))
-              fastmap[j] = 1;
+	      fastmap[j] = 1;
 	  break;
 
 
 	case charset_not:
 	  /* Chars beyond end of map must be allowed.  */
 	  for (j = *p * BYTEWIDTH; j < (1 << BYTEWIDTH); j++)
-            fastmap[j] = 1;
+	    fastmap[j] = 1;
 
 	  for (j = *p++ * BYTEWIDTH - 1; j >= 0; j--)
 	    if (!(p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH))))
-              fastmap[j] = 1;
-          break;
+	      fastmap[j] = 1;
+	  break;
 
 
 	case wordchar:
@@ -2673,171 +3291,327 @@
 	    if (SYNTAX (j) != Sword)
 	      fastmap[j] = 1;
 	  break;
+#else  /* emacs */
+	case charset:
+	  for (j = CHARSET_BITMAP_SIZE (&p[-1]) * BYTEWIDTH - 1, p++;
+	       j >= 0; j--)
+	    if (p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH)))
+	      fastmap[j] = 1;
+
+	  if (CHARSET_RANGE_TABLE_EXISTS_P (&p[-2])
+	      && match_any_multibyte_characters == false)
+	    {
+	      /* Set fastmap[I] 1 where I is a base leading code of each
+		 multibyte character in the range table. */
+	      int c, count;
+
+	      /* Make P points the range table. */
+	      p += CHARSET_BITMAP_SIZE (&p[-2]);
+
+	      /* Extract the number of ranges in range table into
+		 COUNT.	 */
+	      EXTRACT_NUMBER_AND_INCR (count, p);
+	      for (; count > 0; count--, p += 2 * 3) /* XXX */
+		{
+		  /* Extract the start of each range.  */
+		  EXTRACT_CHARACTER (c, p);
+		  j = CHAR_CHARSET (c);
+		  fastmap[CHARSET_LEADING_CODE_BASE (j)] = 1;
+		}
+	    }
+	  break;
 
 
-        case anychar:
-          /* `.' matches anything ...  */
-	  for (j = 0; j < (1 << BYTEWIDTH); j++)
-            fastmap[j] = 1;
+	case charset_not:
+	  /* Chars beyond end of bitmap are possible matches.
+	     All the single-byte codes can occur in multibyte buffers.
+	     So any that are not listed in the charset
+	     are possible matches, even in multibyte buffers.  */
+	  simple_char_max = (1 << BYTEWIDTH);
+	  for (j = CHARSET_BITMAP_SIZE (&p[-1]) * BYTEWIDTH;
+	       j < simple_char_max; j++)
+	    fastmap[j] = 1;
+
+	  for (j = CHARSET_BITMAP_SIZE (&p[-1]) * BYTEWIDTH - 1, p++;
+	       j >= 0; j--)
+	    if (!(p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH))))
+	      fastmap[j] = 1;
+
+	  if (bufp->multibyte)
+	    /* Any character set can possibly contain a character
+	       which doesn't match the specified set of characters.  */
+	    {
+	    set_fastmap_for_multibyte_characters:
+	      if (match_any_multibyte_characters == false)
+		{
+		  for (j = 0x80; j < 0xA0; j++)	/* XXX */
+		    if (BASE_LEADING_CODE_P (j))
+		      fastmap[j] = 1;
+		  match_any_multibyte_characters = true;
+		}
+	    }
+	  break;
+
+
+	case wordchar:
+	  /* All the single-byte codes can occur in multibyte buffers,
+	     and they may have word syntax.  So do consider them.  */
+	  simple_char_max = (1 << BYTEWIDTH);
+	  for (j = 0; j < simple_char_max; j++)
+	    if (SYNTAX (j) == Sword)
+	      fastmap[j] = 1;
+
+	  if (bufp->multibyte)
+	    /* Any character set can possibly contain a character
+	       whose syntax is `Sword'.	 */
+	    goto set_fastmap_for_multibyte_characters;
+	  break;
+
 
-          /* ... except perhaps newline.  */
-          if (!(bufp->syntax & RE_DOT_NEWLINE))
-            fastmap['\n'] = 0;
-
-          /* Return if we have already set `can_be_null'; if we have,
-             then the fastmap is irrelevant.  Something's wrong here.  */
-	  else if (bufp->can_be_null)
-	    return 0;
+	case notwordchar:
+	  /* All the single-byte codes can occur in multibyte buffers,
+	     and they may not have word syntax.  So do consider them.  */
+	  simple_char_max = (1 << BYTEWIDTH);
+	  for (j = 0; j < simple_char_max; j++)
+	    if (SYNTAX (j) != Sword)
+	      fastmap[j] = 1;
+
+	  if (bufp->multibyte)
+	    /* Any character set can possibly contain a character
+	       whose syntax is not `Sword'.  */
+	    goto set_fastmap_for_multibyte_characters;
+	  break;
+#endif
+
+	case anychar:
+	  {
+	    int fastmap_newline = fastmap['\n'];
+
+	    /* `.' matches anything, except perhaps newline.
+	       Even in a multibyte buffer, it should match any
+	       conceivable byte value for the fastmap.  */
+	    if (bufp->multibyte)
+	      match_any_multibyte_characters = true;
+
+	    simple_char_max = (1 << BYTEWIDTH);
+	    for (j = 0; j < simple_char_max; j++)
+	      fastmap[j] = 1;
+
+	    /* ... except perhaps newline.  */
+	    if (!(bufp->syntax & RE_DOT_NEWLINE))
+	      fastmap['\n'] = fastmap_newline;
+
+	    /* Return if we have already set `can_be_null'; if we have,
+	       then the fastmap is irrelevant.	Something's wrong here.	 */
+	    else if (bufp->can_be_null)
+	      goto done;
+
+	    /* Otherwise, have to check alternative paths.  */
+	    break;
+	  }
+
+#ifdef emacs
+	case wordbound:
+	case notwordbound:
+	case wordbeg:
+	case wordend:
+	case notsyntaxspec:
+	case syntaxspec:
+	  /* This match depends on text properties.  These end with
+	     aborting optimizations.  */
+	  bufp->can_be_null = 1;
+	  goto done;
+#if 0
+	  k = *p++;
+	  simple_char_max = bufp->multibyte ? 0x80 : (1 << BYTEWIDTH);
+	  for (j = 0; j < simple_char_max; j++)
+	    if (SYNTAX (j) == (enum syntaxcode) k)
+	      fastmap[j] = 1;
+
+	  if (bufp->multibyte)
+	    /* Any character set can possibly contain a character
+	       whose syntax is K.  */
+	    goto set_fastmap_for_multibyte_characters;
+	  break;
+
+	case notsyntaxspec:
+	  k = *p++;
+	  simple_char_max = bufp->multibyte ? 0x80 : (1 << BYTEWIDTH);
+	  for (j = 0; j < simple_char_max; j++)
+	    if (SYNTAX (j) != (enum syntaxcode) k)
+	      fastmap[j] = 1;
 
-          /* Otherwise, have to check alternative paths.  */
+	  if (bufp->multibyte)
+	    /* Any character set can possibly contain a character
+	       whose syntax is not K.  */
+	    goto set_fastmap_for_multibyte_characters;
 	  break;
+#endif
 
 
-#ifdef emacs
-        case syntaxspec:
+	case categoryspec:
 	  k = *p++;
-	  for (j = 0; j < (1 << BYTEWIDTH); j++)
-	    if (SYNTAX (j) == (enum syntaxcode) k)
+	  simple_char_max = (1 << BYTEWIDTH);
+	  for (j = 0; j < simple_char_max; j++)
+	    if (CHAR_HAS_CATEGORY (j, k))
 	      fastmap[j] = 1;
+
+	  if (bufp->multibyte)
+	    /* Any character set can possibly contain a character
+	       whose category is K.  */
+	    goto set_fastmap_for_multibyte_characters;
 	  break;
 
 
-	case notsyntaxspec:
+	case notcategoryspec:
 	  k = *p++;
-	  for (j = 0; j < (1 << BYTEWIDTH); j++)
-	    if (SYNTAX (j) != (enum syntaxcode) k)
+	  simple_char_max = (1 << BYTEWIDTH);
+	  for (j = 0; j < simple_char_max; j++)
+	    if (!CHAR_HAS_CATEGORY (j, k))
 	      fastmap[j] = 1;
-	  break;
 
+	  if (bufp->multibyte)
+	    /* Any character set can possibly contain a character
+	       whose category is not K.	 */
+	    goto set_fastmap_for_multibyte_characters;
+	  break;
 
       /* All cases after this match the empty string.  These end with
-         `continue'.  */
+	 `continue'.  */
 
 
 	case before_dot:
 	case at_dot:
 	case after_dot:
-          continue;
-#endif /* not emacs */
+	  continue;
+#endif /* emacs */
 
 
-        case no_op:
-        case begline:
-        case endline:
+	case no_op:
+	case begline:
+	case endline:
 	case begbuf:
 	case endbuf:
+#ifndef emacs
 	case wordbound:
 	case notwordbound:
 	case wordbeg:
 	case wordend:
-        case push_dummy_failure:
-          continue;
+#endif
+	case push_dummy_failure:
+	  continue;
 
 
 	case jump_n:
-        case pop_failure_jump:
+	case pop_failure_jump:
 	case maybe_pop_jump:
 	case jump:
-        case jump_past_alt:
+	case jump_past_alt:
 	case dummy_failure_jump:
-          EXTRACT_NUMBER_AND_INCR (j, p);
+	  EXTRACT_NUMBER_AND_INCR (j, p);
 	  p += j;
 	  if (j > 0)
 	    continue;
 
-          /* Jump backward implies we just went through the body of a
-             loop and matched nothing.  Opcode jumped to should be
-             `on_failure_jump' or `succeed_n'.  Just treat it like an
-             ordinary jump.  For a * loop, it has pushed its failure
-             point already; if so, discard that as redundant.  */
-          if ((re_opcode_t) *p != on_failure_jump
+	  /* Jump backward implies we just went through the body of a
+	     loop and matched nothing.	Opcode jumped to should be
+	     `on_failure_jump' or `succeed_n'.	Just treat it like an
+	     ordinary jump.  For a * loop, it has pushed its failure
+	     point already; if so, discard that as redundant.  */
+	  if ((re_opcode_t) *p != on_failure_jump
 	      && (re_opcode_t) *p != succeed_n)
 	    continue;
 
-          p++;
-          EXTRACT_NUMBER_AND_INCR (j, p);
-          p += j;
+	  p++;
+	  EXTRACT_NUMBER_AND_INCR (j, p);
+	  p += j;
 
-          /* If what's on the stack is where we are now, pop it.  */
-          if (!FAIL_STACK_EMPTY ()
+	  /* If what's on the stack is where we are now, pop it.  */
+	  if (!FAIL_STACK_EMPTY ()
 	      && fail_stack.stack[fail_stack.avail - 1].pointer == p)
-            fail_stack.avail--;
+	    fail_stack.avail--;
 
-          continue;
+	  continue;
 
 
-        case on_failure_jump:
-        case on_failure_keep_string_jump:
+	case on_failure_jump:
+	case on_failure_keep_string_jump:
 	handle_on_failure_jump:
-          EXTRACT_NUMBER_AND_INCR (j, p);
+	  EXTRACT_NUMBER_AND_INCR (j, p);
 
-          /* For some patterns, e.g., `(a?)?', `p+j' here points to the
-             end of the pattern.  We don't want to push such a point,
-             since when we restore it above, entering the switch will
-             increment `p' past the end of the pattern.  We don't need
-             to push such a point since we obviously won't find any more
-             fastmap entries beyond `pend'.  Such a pattern can match
-             the null string, though.  */
-          if (p + j < pend)
-            {
-              if (!PUSH_PATTERN_OP (p + j, fail_stack))
-                return -2;
-            }
-          else
-            bufp->can_be_null = 1;
+	  /* For some patterns, e.g., `(a?)?', `p+j' here points to the
+	     end of the pattern.  We don't want to push such a point,
+	     since when we restore it above, entering the switch will
+	     increment `p' past the end of the pattern.	 We don't need
+	     to push such a point since we obviously won't find any more
+	     fastmap entries beyond `pend'.  Such a pattern can match
+	     the null string, though.  */
+	  if (p + j < pend)
+	    {
+	      if (!PUSH_PATTERN_OP (p + j, fail_stack))
+		{
+		  RESET_FAIL_STACK ();
+		  return -2;
+		}
+	    }
+	  else
+	    bufp->can_be_null = 1;
 
-          if (succeed_n_p)
-            {
-              EXTRACT_NUMBER_AND_INCR (k, p);	/* Skip the n.  */
-              succeed_n_p = false;
+	  if (succeed_n_p)
+	    {
+	      EXTRACT_NUMBER_AND_INCR (k, p);	/* Skip the n.	*/
+	      succeed_n_p = false;
 	    }
 
-          continue;
+	  continue;
 
 
 	case succeed_n:
-          /* Get to the number of times to succeed.  */
-          p += 2;
+	  /* Get to the number of times to succeed.  */
+	  p += 2;
 
-          /* Increment p past the n for when k != 0.  */
-          EXTRACT_NUMBER_AND_INCR (k, p);
-          if (k == 0)
+	  /* Increment p past the n for when k != 0.  */
+	  EXTRACT_NUMBER_AND_INCR (k, p);
+	  if (k == 0)
 	    {
-              p -= 4;
-  	      succeed_n_p = true;  /* Spaghetti code alert.  */
-              goto handle_on_failure_jump;
-            }
-          continue;
+	      p -= 4;
+	      succeed_n_p = true;  /* Spaghetti code alert.  */
+	      goto handle_on_failure_jump;
+	    }
+	  continue;
 
 
 	case set_number_at:
-          p += 4;
-          continue;
+	  p += 4;
+	  continue;
 
 
 	case start_memory:
-        case stop_memory:
+	case stop_memory:
 	  p += 2;
 	  continue;
 
 
 	default:
-          abort (); /* We have listed all the cases.  */
-        } /* switch *p++ */
+	  abort (); /* We have listed all the cases.  */
+	} /* switch *p++ */
 
       /* Getting here means we have found the possible starting
-         characters for one path of the pattern -- and that the empty
-         string does not match.  We need not follow this path further.
-         Instead, look at the next alternative (remembered on the
-         stack), or quit if no more.  The test at the top of the loop
-         does these things.  */
+	 characters for one path of the pattern -- and that the empty
+	 string does not match.	 We need not follow this path further.
+	 Instead, look at the next alternative (remembered on the
+	 stack), or quit if no more.  The test at the top of the loop
+	 does these things.  */
       path_can_be_null = false;
       p = pend;
     } /* while p */
 
   /* Set `can_be_null' for the last path (also the first path, if the
-     pattern is empty).  */
+     pattern is empty).	 */
   bufp->can_be_null |= path_can_be_null;
+
+ done:
+  RESET_FAIL_STACK ();
   return 0;
 } /* re_compile_fastmap */
 
@@ -2876,7 +3650,7 @@
     }
 }
 
-/* Searching routines.  */
+/* Searching routines.	*/
 
 /* Like re_search_2, below, but only one string is specified, and
    doesn't let you say where to stop matching. */
@@ -2892,6 +3666,13 @@
 		      regs, size);
 }
 
+/* End address of virtual concatenation of string.  */
+#define STOP_ADDR_VSTRING(P)				\
+  (((P) >= size1 ? string2 + size2 : string1 + size1))
+
+/* Address of POS in the concatenation of virtual string. */
+#define POS_ADDR_VSTRING(POS)					\
+  (((POS) >= size1 ? string2 - size1 : string1) + (POS))
 
 /* Using the compiled pattern in BUFP->buffer, first tries to match the
    virtual concatenation of STRING1 and STRING2, starting first at index
@@ -2926,29 +3707,34 @@
 {
   int val;
   register char *fastmap = bufp->fastmap;
-  register char *translate = bufp->translate;
+  register RE_TRANSLATE_TYPE translate = bufp->translate;
   int total_size = size1 + size2;
   int endpos = startpos + range;
+  int anchored_start = 0;
+
+  /* Nonzero if we have to concern multibyte character.	 */
+  int multibyte = bufp->multibyte;
 
   /* Check for out-of-range STARTPOS.  */
   if (startpos < 0 || startpos > total_size)
     return -1;
 
   /* Fix up RANGE if it might eventually take us outside
-     the virtual concatenation of STRING1 and STRING2.  */
-  if (endpos < -1)
-    range = -1 - startpos;
+     the virtual concatenation of STRING1 and STRING2.
+     Make sure we won't move STARTPOS below 0 or above TOTAL_SIZE.  */
+  if (endpos < 0)
+    range = 0 - startpos;
   else if (endpos > total_size)
     range = total_size - startpos;
 
   /* If the search isn't to be a backwards one, don't waste time in a
-     search for a pattern that must be anchored.  */
+     search for a pattern anchored at beginning of buffer.  */
   if (bufp->used > 0 && (re_opcode_t) bufp->buffer[0] == begbuf && range > 0)
     {
       if (startpos > 0)
 	return -1;
       else
-	range = 1;
+	range = 0;
     }
 
 #ifdef emacs
@@ -2956,8 +3742,8 @@
      don't keep searching past point.  */
   if (bufp->used > 0 && (re_opcode_t) bufp->buffer[0] == at_dot && range > 0)
     {
-      range = PT - startpos;
-      if (range <= 0)
+      range = PT_BYTE - BEGV_BYTE - startpos;
+      if (range < 0)
 	return -1;
     }
 #endif /* emacs */
@@ -2967,57 +3753,122 @@
     if (re_compile_fastmap (bufp) == -2)
       return -2;
 
+  /* See whether the pattern is anchored.  */
+  if (bufp->buffer[0] == begline)
+    anchored_start = 1;
+
+#ifdef emacs
+  gl_state.object = re_match_object;
+  {
+    int adjpos = NILP (re_match_object) || BUFFERP (re_match_object);
+    int charpos = SYNTAX_TABLE_BYTE_TO_CHAR (startpos + adjpos);
+
+    SETUP_SYNTAX_TABLE_FOR_OBJECT (re_match_object, charpos, 1);
+  }
+#endif
+
   /* Loop through the string, looking for a place to start matching.  */
   for (;;)
     {
+      /* If the pattern is anchored,
+	 skip quickly past places we cannot match.
+	 We don't bother to treat startpos == 0 specially
+	 because that case doesn't repeat.  */
+      if (anchored_start && startpos > 0)
+	{
+	  if (! (bufp->newline_anchor
+		 && ((startpos <= size1 ? string1[startpos - 1]
+		      : string2[startpos - size1 - 1])
+		     == '\n')))
+	    goto advance;
+	}
+
       /* If a fastmap is supplied, skip quickly over characters that
-         cannot be the start of a match.  If the pattern can match the
-         null string, however, we don't need to skip characters; we want
-         the first null string.  */
+	 cannot be the start of a match.  If the pattern can match the
+	 null string, however, we don't need to skip characters; we want
+	 the first null string.	 */
       if (fastmap && startpos < total_size && !bufp->can_be_null)
 	{
-	  if (range > 0)	/* Searching forwards.  */
+	  register const char *d;
+	  register unsigned int buf_ch;
+
+	  d = POS_ADDR_VSTRING (startpos);
+
+	  if (range > 0)	/* Searching forwards.	*/
 	    {
-	      register const char *d;
 	      register int lim = 0;
 	      int irange = range;
 
-              if (startpos < size1 && startpos + range >= size1)
-                lim = range - (size1 - startpos);
+	      if (startpos < size1 && startpos + range >= size1)
+		lim = range - (size1 - startpos);
 
-	      d = (startpos >= size1 ? string2 - size1 : string1) + startpos;
-
-              /* Written out as an if-else to avoid testing `translate'
-                 inside the loop.  */
-	      if (translate)
-                while (range > lim
-                       && !fastmap[(unsigned char)
-				   translate[(unsigned char) *d++]])
-                  range--;
+	      /* Written out as an if-else to avoid testing `translate'
+		 inside the loop.  */
+	      if (RE_TRANSLATE_P (translate))
+		{
+		  if (multibyte)
+		    while (range > lim)
+		      {
+			int buf_charlen;
+
+			buf_ch = STRING_CHAR_AND_LENGTH (d, range - lim,
+							 buf_charlen);
+
+			buf_ch = RE_TRANSLATE (translate, buf_ch);
+			if (buf_ch >= 0400
+			    || fastmap[buf_ch])
+			  break;
+
+			range -= buf_charlen;
+			d += buf_charlen;
+		      }
+		  else
+		    while (range > lim
+			   && !fastmap[(unsigned char)
+				       RE_TRANSLATE (translate, (unsigned char) *d)])
+		      {
+			d++;
+			range--;
+		      }
+		}
 	      else
-                while (range > lim && !fastmap[(unsigned char) *d++])
-                  range--;
+		while (range > lim && !fastmap[(unsigned char) *d])
+		  {
+		    d++;
+		    range--;
+		  }
 
 	      startpos += irange - range;
 	    }
-	  else				/* Searching backwards.  */
+	  else				/* Searching backwards.	 */
 	    {
-	      register char c = (size1 == 0 || startpos >= size1
-                                 ? string2[startpos - size1]
-                                 : string1[startpos]);
+	      int room = (size1 == 0 || startpos >= size1
+			  ? size2 + size1 - startpos
+			  : size1 - startpos);
+
+	      buf_ch = STRING_CHAR (d, room);
+	      if (RE_TRANSLATE_P (translate))
+		buf_ch = RE_TRANSLATE (translate, buf_ch);
 
-	      if (!fastmap[(unsigned char) TRANSLATE (c)])
+	      if (! (buf_ch >= 0400
+		     || fastmap[buf_ch]))
 		goto advance;
 	    }
 	}
 
       /* If can't match the null string, and that's all we have left, fail.  */
       if (range >= 0 && startpos == total_size && fastmap
-          && !bufp->can_be_null)
+	  && !bufp->can_be_null)
 	return -1;
+
+      val = re_match_2_internal (bufp, string1, size1, string2, size2,
+				 startpos, regs, stop);
+#ifndef REGEX_MALLOC
+#ifdef C_ALLOCA
+      alloca (0);
+#endif
+#endif
 
-      val = re_match_2 (bufp, string1, size1, string2, size2,
-	                startpos, regs, stop);
       if (val >= 0)
 	return startpos;
 
@@ -3026,17 +3877,60 @@
 
     advance:
       if (!range)
-        break;
+	break;
       else if (range > 0)
-        {
-          range--;
-          startpos++;
-        }
+	{
+	  /* Update STARTPOS to the next character boundary.  */
+	  if (multibyte)
+	    {
+	      const unsigned char *p
+		= (const unsigned char *) POS_ADDR_VSTRING (startpos);
+	      const unsigned char *pend
+		= (const unsigned char *) STOP_ADDR_VSTRING (startpos);
+	      int len = MULTIBYTE_FORM_LENGTH (p, pend - p);
+
+	      range -= len;
+	      if (range < 0)
+		break;
+	      startpos += len;
+	    }
+	  else
+	    {
+	      range--;
+	      startpos++;
+	    }
+	}
       else
-        {
-          range++;
-          startpos--;
-        }
+	{
+	  range++;
+	  startpos--;
+
+	  /* Update STARTPOS to the previous character boundary.  */
+	  if (multibyte)
+	    {
+	      const unsigned char *p
+		= (const unsigned char *) POS_ADDR_VSTRING (startpos);
+	      int len = 0;
+
+	      /* Find the head of multibyte form.  */
+	      while (!CHAR_HEAD_P (*p))
+		p--, len++;
+
+	      /* Adjust it. */
+#if 0				/* XXX */
+	      if (MULTIBYTE_FORM_LENGTH (p, len + 1) != (len + 1))
+		;
+	      else
+#endif
+		{
+		  range += len;
+		  if (range > 0)
+		    break;
+
+		  startpos -= len;
+		}
+	    }
+	}
     }
   return -1;
 } /* re_search_2 */
@@ -3045,68 +3939,16 @@
 
 static int bcmp_translate ();
 static boolean alt_match_null_string_p (),
-               common_op_match_null_string_p (),
-               group_match_null_string_p ();
-
-/* Structure for per-register (a.k.a. per-group) information.
-   Other register information, such as the
-   starting and ending positions (which are addresses), and the list of
-   inner groups (which is a bits list) are maintained in separate
-   variables.
-
-   We are making a (strictly speaking) nonportable assumption here: that
-   the compiler will pack our bit fields into something that fits into
-   the type of `word', i.e., is something that fits into one item on the
-   failure stack.  */
-
-typedef union
-{
-  fail_stack_elt_t word;
-  struct
-  {
-      /* This field is one if this group can match the empty string,
-         zero if not.  If not yet determined,  `MATCH_NULL_UNSET_VALUE'.  */
-#define MATCH_NULL_UNSET_VALUE 3
-    unsigned match_null_string_p : 2;
-    unsigned is_active : 1;
-    unsigned matched_something : 1;
-    unsigned ever_matched_something : 1;
-  } bits;
-} register_info_type;
-
-#define REG_MATCH_NULL_STRING_P(R)  ((R).bits.match_null_string_p)
-#define IS_ACTIVE(R)  ((R).bits.is_active)
-#define MATCHED_SOMETHING(R)  ((R).bits.matched_something)
-#define EVER_MATCHED_SOMETHING(R)  ((R).bits.ever_matched_something)
-
-
-/* Call this when have matched a real character; it sets `matched' flags
-   for the subexpressions which we are currently inside.  Also records
-   that those subexprs have matched.  */
-#define SET_REGS_MATCHED()						\
-  do									\
-    {									\
-      unsigned r;							\
-      for (r = lowest_active_reg; r <= highest_active_reg; r++)		\
-        {								\
-          MATCHED_SOMETHING (reg_info[r])				\
-            = EVER_MATCHED_SOMETHING (reg_info[r])			\
-            = 1;							\
-        }								\
-    }									\
-  while (0)
+	       common_op_match_null_string_p (),
+	       group_match_null_string_p ();
 
-
 /* This converts PTR, a pointer into one of the search strings `string1'
    and `string2' into an offset from the beginning of that string.  */
-#define POINTER_TO_OFFSET(ptr)						\
-  (FIRST_STRING_P (ptr) ? (ptr) - string1 : (ptr) - string2 + size1)
-
-/* Registers are set to a sentinel when they haven't yet matched.  */
-#define REG_UNSET_VALUE ((char *) -1)
-#define REG_UNSET(e) ((e) == REG_UNSET_VALUE)
+#define POINTER_TO_OFFSET(ptr)			\
+  (FIRST_STRING_P (ptr)				\
+   ? ((regoff_t) ((ptr) - string1))		\
+   : ((regoff_t) ((ptr) - string2 + size1)))
 
-
 /* Macros for dealing with the split strings in re_match_2.  */
 
 #define MATCHING_IN_FIRST_STRING  (dend == end_match_1)
@@ -3114,19 +3956,19 @@
 /* Call before fetching a character with *d.  This switches over to
    string2 if necessary.  */
 #define PREFETCH()							\
-  while (d == dend)						    	\
+  while (d == dend)							\
     {									\
       /* End of string2 => fail.  */					\
-      if (dend == end_match_2) 						\
-        goto fail;							\
-      /* End of string1 => advance to string2.  */ 			\
-      d = string2;						        \
+      if (dend == end_match_2)						\
+	goto fail;							\
+      /* End of string1 => advance to string2.	*/			\
+      d = string2;							\
       dend = end_match_2;						\
     }
 
 
 /* Test if at very beginning or at very end of the virtual concatenation
-   of `string1' and `string2'.  If only one string, it's `string2'.  */
+   of `string1' and `string2'.	If only one string, it's `string2'.  */
 #define AT_STRINGS_BEG(d) ((d) == (size1 ? string1 : string2) || !size2)
 #define AT_STRINGS_END(d) ((d) == end2)
 
@@ -3137,22 +3979,33 @@
    string2, look at the last character in string1.  */
 #define WORDCHAR_P(d)							\
   (SYNTAX ((d) == end1 ? *string2					\
-           : (d) == string2 - 1 ? *(end1 - 1) : *(d))			\
+	   : (d) == string2 - 1 ? *(end1 - 1) : *(d))			\
    == Sword)
 
+/* Disabled due to a compiler bug -- see comment at case wordbound */
+
+/* The comment at case wordbound is following one, but we don't use
+   AT_WORD_BOUNDARY anymore to support multibyte form.
+
+   The DEC Alpha C compiler 3.x generates incorrect code for the
+   test	 WORDCHAR_P (d - 1) != WORDCHAR_P (d)  in the expansion of
+   AT_WORD_BOUNDARY, so this code is disabled.	Expanding the
+   macro and introducing temporary variables works around the bug.  */
+
+#if 0
 /* Test if the character before D and the one at D differ with respect
    to being word-constituent.  */
 #define AT_WORD_BOUNDARY(d)						\
   (AT_STRINGS_BEG (d) || AT_STRINGS_END (d)				\
    || WORDCHAR_P (d - 1) != WORDCHAR_P (d))
-
+#endif
 
 /* Free everything we malloc.  */
-#ifdef REGEX_MALLOC
-#define FREE_VAR(var) if (var) free (var); var = NULL
+#ifdef MATCH_MAY_ALLOCATE
+#define FREE_VAR(var) if (var) { REGEX_FREE (var); var = NULL; } else
 #define FREE_VARIABLES()						\
   do {									\
-    FREE_VAR (fail_stack.stack);					\
+    REGEX_FREE_STACK (fail_stack.stack);				\
     FREE_VAR (regstart);						\
     FREE_VAR (regend);							\
     FREE_VAR (old_regstart);						\
@@ -3163,25 +4016,23 @@
     FREE_VAR (reg_dummy);						\
     FREE_VAR (reg_info_dummy);						\
   } while (0)
-#else /* not REGEX_MALLOC */
-/* Some MIPS systems (at least) want this to free alloca'd storage.  */
-#define FREE_VARIABLES() alloca (0)
-#endif /* not REGEX_MALLOC */
-
+#else
+#define FREE_VARIABLES() ((void)0) /* Do nothing!  But inhibit gcc warning.  */
+#endif /* not MATCH_MAY_ALLOCATE */
 
-/* These values must meet several constraints.  They must not be valid
+/* These values must meet several constraints.	They must not be valid
    register values; since we have a limit of 255 registers (because
    we use only one byte in the pattern for the register number), we can
-   use numbers larger than 255.  They must differ by 1, because of
+   use numbers larger than 255.	 They must differ by 1, because of
    NUM_FAILURE_ITEMS above.  And the value for the lowest register must
    be larger than the value for the highest register, so we do not try
-   to actually save any registers when none are active.  */
+   to actually save any registers when none are active.	 */
 #define NO_HIGHEST_ACTIVE_REG (1 << BYTEWIDTH)
 #define NO_LOWEST_ACTIVE_REG (NO_HIGHEST_ACTIVE_REG + 1)
 
 /* Matching routines.  */
 
-#ifndef emacs   /* Emacs never uses this.  */
+#ifndef emacs	/* Emacs never uses this.  */
 /* re_match is like re_match_2 except it takes only a single string.  */
 
 int
@@ -3190,11 +4041,23 @@
      const char *string;
      int size, pos;
      struct re_registers *regs;
- {
-  return re_match_2 (bufp, NULL, 0, string, size, pos, regs, size); 
+{
+  int result = re_match_2_internal (bufp, NULL, 0, string, size,
+				    pos, regs, size);
+#ifndef REGEX_MALLOC	/* CVS */
+#ifdef C_ALLOCA		/* CVS */
+  alloca (0);
+#endif			/* CVS */
+#endif			/* CVS */
+  return result;
 }
 #endif /* not emacs */
 
+#ifdef emacs
+/* In Emacs, this is the string or buffer in which we
+   are matching.  It is used for looking up syntax properties.	*/
+Lisp_Object re_match_object;
+#endif
 
 /* re_match_2 matches the compiled pattern in BUFP against the
    the (virtual) concatenation of STRING1 and STRING2 (of length SIZE1
@@ -3202,11 +4065,11 @@
    matching at STOP.
 
    If REGS is non-null and the `no_sub' field of BUFP is nonzero, we
-   store offsets for the substring each group matched in REGS.  See the
+   store offsets for the substring each group matched in REGS.	See the
    documentation for exactly how many groups we fill.
 
    We return -1 if no match, -2 if an internal error (such as the
-   failure stack overflowing).  Otherwise, we return the length of the
+   failure stack overflowing).	Otherwise, we return the length of the
    matched substring.  */
 
 int
@@ -3218,6 +4081,37 @@
      struct re_registers *regs;
      int stop;
 {
+  int result;
+
+#ifdef emacs
+  int charpos;
+  int adjpos = NILP (re_match_object) || BUFFERP (re_match_object);
+  gl_state.object = re_match_object;
+  charpos = SYNTAX_TABLE_BYTE_TO_CHAR (pos + adjpos);
+  SETUP_SYNTAX_TABLE_FOR_OBJECT (re_match_object, charpos, 1);
+#endif
+
+  result = re_match_2_internal (bufp, string1, size1, string2, size2,
+				pos, regs, stop);
+#ifndef REGEX_MALLOC	/* CVS */
+#ifdef C_ALLOCA		/* CVS */
+  alloca (0);
+#endif			/* CVS */
+#endif			/* CVS */
+  return result;
+}
+
+/* This is a separate function so that we can force an alloca cleanup
+   afterwards.	*/
+static int
+re_match_2_internal (bufp, string1, size1, string2, size2, pos, regs, stop)
+     struct re_pattern_buffer *bufp;
+     const char *string1, *string2;
+     int size1, size2;
+     int pos;
+     struct re_registers *regs;
+     int stop;
+{
   /* General temporaries.  */
   int mcnt;
   unsigned char *p1;
@@ -3226,7 +4120,7 @@
   const char *end1, *end2;
 
   /* Pointers into string1 and string2, just past the last characters in
-     each to consider matching.  */
+     each to consider matching.	 */
   const char *end_match_1, *end_match_2;
 
   /* Where we are in the data, and the end of the current string.  */
@@ -3236,9 +4130,16 @@
   unsigned char *p = bufp->buffer;
   register unsigned char *pend = p + bufp->used;
 
-  /* We use this to map every character in the string.  */
-  char *translate = bufp->translate;
+  /* Mark the opcode just after a start_memory, so we can test for an
+     empty subpattern when we get to the stop_memory.  */
+  unsigned char *just_past_start_mem = 0;
 
+  /* We use this to map every character in the string.	*/
+  RE_TRANSLATE_TYPE translate = bufp->translate;
+
+  /* Nonzero if we have to concern multibyte character.	 */
+  int multibyte = bufp->multibyte;
+
   /* Failure point stack.  Each place that can handle a failure further
      down the line pushes a failure point on this stack.  It consists of
      restart, regend, and reg_info for all registers corresponding to
@@ -3247,15 +4148,21 @@
      to resume scanning the pattern; the second one is where to resume
      scanning the strings.  If the latter is zero, the failure point is
      a ``dummy''; if a failure happens and the failure point is a dummy,
-     it gets discarded and the next next one is tried.  */
+     it gets discarded and the next next one is tried.	*/
+#ifdef MATCH_MAY_ALLOCATE /* otherwise, this is global.	 */
   fail_stack_type fail_stack;
+#endif
 #ifdef DEBUG
   static unsigned failure_id = 0;
   unsigned nfailure_points_pushed = 0, nfailure_points_popped = 0;
 #endif
 
+  /* This holds the pointer to the failure stack, when
+     it is allocated relocatably.  */
+  fail_stack_elt_t *failure_stack_ptr;
+
   /* We fill all the registers internally, independent of what we
-     return, for use in backreferences.  The number here includes
+     return, for use in backreferences.	 The number here includes
      an element for register zero.  */
   unsigned num_regs = bufp->re_nsub + 1;
 
@@ -3270,33 +4177,41 @@
      matching and the regnum-th regend points to right after where we
      stopped matching the regnum-th subexpression.  (The zeroth register
      keeps track of what the whole pattern matches.)  */
+#ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global.  */
   const char **regstart, **regend;
+#endif
 
   /* If a group that's operated upon by a repetition operator fails to
      match anything, then the register for its start will need to be
      restored because it will have been set to wherever in the string we
      are when we last see its open-group operator.  Similarly for a
      register's end.  */
+#ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global.  */
   const char **old_regstart, **old_regend;
+#endif
 
   /* The is_active field of reg_info helps us keep track of which (possibly
      nested) subexpressions we are currently in. The matched_something
      field of reg_info[reg_num] helps us tell whether or not we have
      matched any of the pattern so far this time through the reg_num-th
      subexpression.  These two fields get reset each time through any
-     loop their register is in.  */
+     loop their register is in.	 */
+#ifdef MATCH_MAY_ALLOCATE /* otherwise, this is global.	 */
   register_info_type *reg_info;
+#endif
 
   /* The following record the register info as found in the above
      variables when we find a match better than any we've seen before.
      This happens as we backtrack through the failure points, which in
      turn happens only if we have not yet matched the entire string. */
   unsigned best_regs_set = false;
+#ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global.  */
   const char **best_regstart, **best_regend;
-  
+#endif
+
   /* Logically, this is `best_regend[0]'.  But we don't want to have to
      allocate space for that if we're not allocating space for anything
-     else (see below).  Also, we never need info about register 0 for
+     else (see below).	Also, we never need info about register 0 for
      any of the other register vectors, and it seems rather a kludge to
      treat `best_regend' differently than the rest.  So we keep track of
      the end of the best match so far in a separate variable.  We
@@ -3304,9 +4219,14 @@
      and need to test it, it's not garbage.  */
   const char *match_end = NULL;
 
+  /* This helps SET_REGS_MATCHED avoid doing redundant work.  */
+  int set_regs_matched_done = 0;
+
   /* Used when we pop values we don't care about.  */
+#ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global.  */
   const char **reg_dummy;
   register_info_type *reg_info_dummy;
+#endif
 
 #ifdef DEBUG
   /* Counts the total number of registers pushed.  */
@@ -3317,6 +4237,7 @@
 
   INIT_FAIL_STACK ();
 
+#ifdef MATCH_MAY_ALLOCATE
   /* Do not bother to initialize all the register variables if there are
      no groups in the pattern, as it takes a fair amount of time.  If
      there are groups, we include space for register 0 (the whole
@@ -3335,22 +4256,21 @@
       reg_info_dummy = REGEX_TALLOC (num_regs, register_info_type);
 
       if (!(regstart && regend && old_regstart && old_regend && reg_info
-            && best_regstart && best_regend && reg_dummy && reg_info_dummy))
-        {
-          FREE_VARIABLES ();
-          return -2;
-        }
+	    && best_regstart && best_regend && reg_dummy && reg_info_dummy))
+	{
+	  FREE_VARIABLES ();
+	  return -2;
+	}
     }
-#ifdef REGEX_MALLOC
   else
     {
       /* We must initialize all our variables to NULL, so that
-         `FREE_VARIABLES' doesn't try to free them.  */
+	 `FREE_VARIABLES' doesn't try to free them.  */
       regstart = regend = old_regstart = old_regend = best_regstart
-        = best_regend = reg_dummy = NULL;
+	= best_regend = reg_dummy = NULL;
       reg_info = reg_info_dummy = (register_info_type *) NULL;
     }
-#endif /* REGEX_MALLOC */
+#endif /* MATCH_MAY_ALLOCATE */
 
   /* The starting position is bogus.  */
   if (pos < 0 || pos > size1 + size2)
@@ -3365,7 +4285,7 @@
   for (mcnt = 1; mcnt < num_regs; mcnt++)
     {
       regstart[mcnt] = regend[mcnt]
-        = old_regstart[mcnt] = old_regend[mcnt] = REG_UNSET_VALUE;
+	= old_regstart[mcnt] = old_regend[mcnt] = REG_UNSET_VALUE;
 
       REG_MATCH_NULL_STRING_P (reg_info[mcnt]) = MATCH_NULL_UNSET_VALUE;
       IS_ACTIVE (reg_info[mcnt]) = 0;
@@ -3374,7 +4294,7 @@
     }
 
   /* We move `string1' into `string2' if the latter's empty -- but not if
-     `string1' is null.  */
+     `string1' is null.	 */
   if (size2 == 0 && string1 != NULL)
     {
       string2 = string1;
@@ -3420,7 +4340,7 @@
   DEBUG_PRINT_DOUBLE_STRING (d, string1, size1, string2, size2);
   DEBUG_PRINT1 ("'\n");
 
-  /* This loops over pattern commands.  It exits by returning from the
+  /* This loops over pattern commands.	It exits by returning from the
      function if the match is complete, or it drops through if the match
      fails at this starting point in the input data.  */
   for (;;)
@@ -3429,177 +4349,222 @@
 
       if (p == pend)
 	{ /* End of pattern means we might have succeeded.  */
-          DEBUG_PRINT1 ("end of pattern ... ");
+	  DEBUG_PRINT1 ("end of pattern ... ");
 
 	  /* If we haven't matched the entire string, and we want the
-             longest match, try backtracking.  */
-          if (d != end_match_2)
+	     longest match, try backtracking.  */
+	  if (d != end_match_2)
 	    {
-              DEBUG_PRINT1 ("backtracking.\n");
+	      /* 1 if this match ends in the same string (string1 or string2)
+		 as the best previous match.  */
+	      boolean same_str_p = (FIRST_STRING_P (match_end)
+				    == MATCHING_IN_FIRST_STRING);
+	      /* 1 if this match is the best seen so far.  */
+	      boolean best_match_p;
+
+	      /* AIX compiler got confused when this was combined
+		 with the previous declaration.	 */
+	      if (same_str_p)
+		best_match_p = d > match_end;
+	      else
+		best_match_p = !MATCHING_IN_FIRST_STRING;
 
-              if (!FAIL_STACK_EMPTY ())
-                { /* More failure points to try.  */
-                  boolean same_str_p = (FIRST_STRING_P (match_end) 
-	        	                == MATCHING_IN_FIRST_STRING);
-
-                  /* If exceeds best match so far, save it.  */
-                  if (!best_regs_set
-                      || (same_str_p && d > match_end)
-                      || (!same_str_p && !MATCHING_IN_FIRST_STRING))
-                    {
-                      best_regs_set = true;
-                      match_end = d;
+	      DEBUG_PRINT1 ("backtracking.\n");
 
-                      DEBUG_PRINT1 ("\nSAVING match as best so far.\n");
+	      if (!FAIL_STACK_EMPTY ())
+		{ /* More failure points to try.  */
 
-                      for (mcnt = 1; mcnt < num_regs; mcnt++)
-                        {
-                          best_regstart[mcnt] = regstart[mcnt];
-                          best_regend[mcnt] = regend[mcnt];
-                        }
-                    }
-                  goto fail;
-                }
+		  /* If exceeds best match so far, save it.  */
+		  if (!best_regs_set || best_match_p)
+		    {
+		      best_regs_set = true;
+		      match_end = d;
 
-              /* If no failure points, don't restore garbage.  */
-              else if (best_regs_set)   
-                {
-  	        restore_best_regs:
-                  /* Restore best match.  It may happen that `dend ==
-                     end_match_1' while the restored d is in string2.
-                     For example, the pattern `x.*y.*z' against the
-                     strings `x-' and `y-z-', if the two strings are
-                     not consecutive in memory.  */
-                  DEBUG_PRINT1 ("Restoring best registers.\n");
-
-                  d = match_end;
-                  dend = ((d >= string1 && d <= end1)
-		           ? end_match_1 : end_match_2);
+		      DEBUG_PRINT1 ("\nSAVING match as best so far.\n");
+
+		      for (mcnt = 1; mcnt < num_regs; mcnt++)
+			{
+			  best_regstart[mcnt] = regstart[mcnt];
+			  best_regend[mcnt] = regend[mcnt];
+			}
+		    }
+		  goto fail;
+		}
 
+	      /* If no failure points, don't restore garbage.  And if
+		 last match is real best match, don't restore second
+		 best one. */
+	      else if (best_regs_set && !best_match_p)
+		{
+		restore_best_regs:
+		  /* Restore best match.  It may happen that `dend ==
+		     end_match_1' while the restored d is in string2.
+		     For example, the pattern `x.*y.*z' against the
+		     strings `x-' and `y-z-', if the two strings are
+		     not consecutive in memory.	 */
+		  DEBUG_PRINT1 ("Restoring best registers.\n");
+
+		  d = match_end;
+		  dend = ((d >= string1 && d <= end1)
+			   ? end_match_1 : end_match_2);
+
 		  for (mcnt = 1; mcnt < num_regs; mcnt++)
 		    {
 		      regstart[mcnt] = best_regstart[mcnt];
 		      regend[mcnt] = best_regend[mcnt];
 		    }
-                }
-            } /* d != end_match_2 */
+		}
+	    } /* d != end_match_2 */
 
-          DEBUG_PRINT1 ("Accepting match.\n");
+	succeed_label:
+	  DEBUG_PRINT1 ("Accepting match.\n");
 
-          /* If caller wants register contents data back, do it.  */
-          if (regs && !bufp->no_sub)
+	  /* If caller wants register contents data back, do it.  */
+	  if (regs && !bufp->no_sub)
 	    {
-              /* Have the register data arrays been allocated?  */
-              if (bufp->regs_allocated == REGS_UNALLOCATED)
-                { /* No.  So allocate them with malloc.  We need one
-                     extra element beyond `num_regs' for the `-1' marker
-                     GNU code uses.  */
-                  regs->num_regs = MAX (RE_NREGS, num_regs + 1);
-                  regs->start = TALLOC (regs->num_regs, regoff_t);
-                  regs->end = TALLOC (regs->num_regs, regoff_t);
-                  if (regs->start == NULL || regs->end == NULL)
-                    return -2;
-                  bufp->regs_allocated = REGS_REALLOCATE;
-                }
-              else if (bufp->regs_allocated == REGS_REALLOCATE)
-                { /* Yes.  If we need more elements than were already
-                     allocated, reallocate them.  If we need fewer, just
-                     leave it alone.  */
-                  if (regs->num_regs < num_regs + 1)
-                    {
-                      regs->num_regs = num_regs + 1;
-                      RETALLOC (regs->start, regs->num_regs, regoff_t);
-                      RETALLOC (regs->end, regs->num_regs, regoff_t);
-                      if (regs->start == NULL || regs->end == NULL)
-                        return -2;
-                    }
-                }
-              else
+	      /* Have the register data arrays been allocated?	*/
+	      if (bufp->regs_allocated == REGS_UNALLOCATED)
+		{ /* No.  So allocate them with malloc.	 We need one
+		     extra element beyond `num_regs' for the `-1' marker
+		     GNU code uses.  */
+		  regs->num_regs = MAX (RE_NREGS, num_regs + 1);
+		  regs->start = TALLOC (regs->num_regs, regoff_t);
+		  regs->end = TALLOC (regs->num_regs, regoff_t);
+		  if (regs->start == NULL || regs->end == NULL)
+		    {
+		      FREE_VARIABLES ();
+		      return -2;
+		    }
+		  bufp->regs_allocated = REGS_REALLOCATE;
+		}
+	      else if (bufp->regs_allocated == REGS_REALLOCATE)
+		{ /* Yes.  If we need more elements than were already
+		     allocated, reallocate them.  If we need fewer, just
+		     leave it alone.  */
+		  if (regs->num_regs < num_regs + 1)
+		    {
+		      regs->num_regs = num_regs + 1;
+		      RETALLOC (regs->start, regs->num_regs, regoff_t);
+		      RETALLOC (regs->end, regs->num_regs, regoff_t);
+		      if (regs->start == NULL || regs->end == NULL)
+			{
+			  FREE_VARIABLES ();
+			  return -2;
+			}
+		    }
+		}
+	      else
 		{
 		  /* These braces fend off a "empty body in an else-statement"
-		     warning under GCC when assert expands to nothing.  */
+		     warning under GCC when assert expands to nothing.	*/
 		  assert (bufp->regs_allocated == REGS_FIXED);
 		}
 
-              /* Convert the pointer data in `regstart' and `regend' to
-                 indices.  Register zero has to be set differently,
-                 since we haven't kept track of any info for it.  */
-              if (regs->num_regs > 0)
-                {
-                  regs->start[0] = pos;
-                  regs->end[0] = (MATCHING_IN_FIRST_STRING ? d - string1
-			          : d - string2 + size1);
-                }
+	      /* Convert the pointer data in `regstart' and `regend' to
+		 indices.  Register zero has to be set differently,
+		 since we haven't kept track of any info for it.  */
+	      if (regs->num_regs > 0)
+		{
+		  regs->start[0] = pos;
+		  regs->end[0] = (MATCHING_IN_FIRST_STRING
+				  ? ((regoff_t) (d - string1))
+				  : ((regoff_t) (d - string2 + size1)));
+		}
 
-              /* Go through the first `min (num_regs, regs->num_regs)'
-                 registers, since that is all we initialized.  */
+	      /* Go through the first `min (num_regs, regs->num_regs)'
+		 registers, since that is all we initialized.  */
 	      for (mcnt = 1; mcnt < MIN (num_regs, regs->num_regs); mcnt++)
 		{
-                  if (REG_UNSET (regstart[mcnt]) || REG_UNSET (regend[mcnt]))
-                    regs->start[mcnt] = regs->end[mcnt] = -1;
-                  else
-                    {
-		      regs->start[mcnt] = POINTER_TO_OFFSET (regstart[mcnt]);
-                      regs->end[mcnt] = POINTER_TO_OFFSET (regend[mcnt]);
-                    }
+		  if (REG_UNSET (regstart[mcnt]) || REG_UNSET (regend[mcnt]))
+		    regs->start[mcnt] = regs->end[mcnt] = -1;
+		  else
+		    {
+		      regs->start[mcnt]
+			= (regoff_t) POINTER_TO_OFFSET (regstart[mcnt]);
+		      regs->end[mcnt]
+			= (regoff_t) POINTER_TO_OFFSET (regend[mcnt]);
+		    }
 		}
 
-              /* If the regs structure we return has more elements than
-                 were in the pattern, set the extra elements to -1.  If
-                 we (re)allocated the registers, this is the case,
-                 because we always allocate enough to have at least one
-                 -1 at the end.  */
-              for (mcnt = num_regs; mcnt < regs->num_regs; mcnt++)
-                regs->start[mcnt] = regs->end[mcnt] = -1;
+	      /* If the regs structure we return has more elements than
+		 were in the pattern, set the extra elements to -1.  If
+		 we (re)allocated the registers, this is the case,
+		 because we always allocate enough to have at least one
+		 -1 at the end.	 */
+	      for (mcnt = num_regs; mcnt < regs->num_regs; mcnt++)
+		regs->start[mcnt] = regs->end[mcnt] = -1;
 	    } /* regs && !bufp->no_sub */
 
-          FREE_VARIABLES ();
-          DEBUG_PRINT4 ("%u failure points pushed, %u popped (%u remain).\n",
-                        nfailure_points_pushed, nfailure_points_popped,
-                        nfailure_points_pushed - nfailure_points_popped);
-          DEBUG_PRINT2 ("%u registers pushed.\n", num_regs_pushed);
+	  DEBUG_PRINT4 ("%u failure points pushed, %u popped (%u remain).\n",
+			nfailure_points_pushed, nfailure_points_popped,
+			nfailure_points_pushed - nfailure_points_popped);
+	  DEBUG_PRINT2 ("%u registers pushed.\n", num_regs_pushed);
 
-          mcnt = d - pos - (MATCHING_IN_FIRST_STRING
+	  mcnt = d - pos - (MATCHING_IN_FIRST_STRING
 			    ? string1
 			    : string2 - size1);
 
-          DEBUG_PRINT2 ("Returning %d from re_match_2.\n", mcnt);
+	  DEBUG_PRINT2 ("Returning %d from re_match_2.\n", mcnt);
 
-          return mcnt;
-        }
+	  FREE_VARIABLES ();
+	  return mcnt;
+	}
 
-      /* Otherwise match next pattern command.  */
-#ifdef SWITCH_ENUM_BUG
-      switch ((int) ((re_opcode_t) *p++))
-#else
-      switch ((re_opcode_t) *p++)
-#endif
+      /* Otherwise match next pattern command.	*/
+      switch (SWITCH_ENUM_CAST ((re_opcode_t) *p++))
 	{
-        /* Ignore these.  Used to ignore the n of succeed_n's which
-           currently have n == 0.  */
-        case no_op:
-          DEBUG_PRINT1 ("EXECUTING no_op.\n");
-          break;
-
+	/* Ignore these.  Used to ignore the n of succeed_n's which
+	   currently have n == 0.  */
+	case no_op:
+	  DEBUG_PRINT1 ("EXECUTING no_op.\n");
+	  break;
 
-        /* Match the next n pattern characters exactly.  The following
-           byte in the pattern defines n, and the n bytes after that
-           are the characters to match.  */
+	case succeed:
+	  DEBUG_PRINT1 ("EXECUTING succeed.\n");
+	  goto succeed_label;
+
+	/* Match the next n pattern characters exactly.	 The following
+	   byte in the pattern defines n, and the n bytes after that
+	   are the characters to match.	 */
 	case exactn:
 	  mcnt = *p++;
-          DEBUG_PRINT2 ("EXECUTING exactn %d.\n", mcnt);
+	  DEBUG_PRINT2 ("EXECUTING exactn %d.\n", mcnt);
 
-          /* This is written out as an if-else so we don't waste time
-             testing `translate' inside the loop.  */
-          if (translate)
+	  /* This is written out as an if-else so we don't waste time
+	     testing `translate' inside the loop.  */
+	  if (RE_TRANSLATE_P (translate))
 	    {
-	      do
-		{
-		  PREFETCH ();
-		  if (translate[(unsigned char) *d++] != (char) *p++)
-                    goto fail;
-		}
-	      while (--mcnt);
+#ifdef emacs
+	      if (multibyte)
+		do
+		  {
+		    int pat_charlen, buf_charlen;
+		    unsigned int pat_ch, buf_ch;
+
+		    PREFETCH ();
+		    pat_ch = STRING_CHAR_AND_LENGTH (p, pend - p, pat_charlen);
+		    buf_ch = STRING_CHAR_AND_LENGTH (d, dend - d, buf_charlen);
+
+		    if (RE_TRANSLATE (translate, buf_ch)
+			!= pat_ch)
+		      goto fail;
+
+		    p += pat_charlen;
+		    d += buf_charlen;
+		    mcnt -= pat_charlen;
+		  }
+		while (mcnt > 0);
+	      else
+#endif /* not emacs */
+		do
+		  {
+		    PREFETCH ();
+		    if ((unsigned char) RE_TRANSLATE (translate, (unsigned char) *d)
+			!= (unsigned char) *p++)
+		      goto fail;
+		    d++;
+		  }
+		while (--mcnt);
 	    }
 	  else
 	    {
@@ -3611,206 +4576,262 @@
 	      while (--mcnt);
 	    }
 	  SET_REGS_MATCHED ();
-          break;
+	  break;
 
 
-        /* Match any character except possibly a newline or a null.  */
+	/* Match any character except possibly a newline or a null.  */
 	case anychar:
-          DEBUG_PRINT1 ("EXECUTING anychar.\n");
+	  {
+	    int buf_charlen;
+	    unsigned int buf_ch;
 
-          PREFETCH ();
+	    DEBUG_PRINT1 ("EXECUTING anychar.\n");
 
-          if ((!(bufp->syntax & RE_DOT_NEWLINE) && TRANSLATE (*d) == '\n')
-              || (bufp->syntax & RE_DOT_NOT_NULL && TRANSLATE (*d) == '\000'))
-	    goto fail;
+	    PREFETCH ();
 
-          SET_REGS_MATCHED ();
-          DEBUG_PRINT2 ("  Matched `%d'.\n", *d);
-          d++;
+#ifdef emacs
+	    if (multibyte)
+	      buf_ch = STRING_CHAR_AND_LENGTH (d, dend - d, buf_charlen);
+	    else
+#endif /* not emacs */
+	      {
+		buf_ch = (unsigned char) *d;
+		buf_charlen = 1;
+	      }
+
+	    buf_ch = TRANSLATE (buf_ch);
+
+	    if ((!(bufp->syntax & RE_DOT_NEWLINE)
+		 && buf_ch == '\n')
+		|| ((bufp->syntax & RE_DOT_NOT_NULL)
+		    && buf_ch == '\000'))
+	      goto fail;
+
+	    SET_REGS_MATCHED ();
+	    DEBUG_PRINT2 ("  Matched `%d'.\n", *d);
+	    d += buf_charlen;
+	  }
 	  break;
 
 
 	case charset:
 	case charset_not:
 	  {
-	    register unsigned char c;
+	    register unsigned int c;
 	    boolean not = (re_opcode_t) *(p - 1) == charset_not;
+	    int len;
 
-            DEBUG_PRINT2 ("EXECUTING charset%s.\n", not ? "_not" : "");
+	    /* Start of actual range_table, or end of bitmap if there is no
+	       range table.  */
+	    unsigned char *range_table;
 
+	    /* Nonzero if there is range table.	 */
+	    int range_table_exists;
+
+	    /* Number of ranges of range table.	 Not in bytes.	*/
+	    int count;
+
+	    DEBUG_PRINT2 ("EXECUTING charset%s.\n", not ? "_not" : "");
+
 	    PREFETCH ();
-	    c = TRANSLATE (*d); /* The character to match.  */
+	    c = (unsigned char) *d;
 
-            /* Cast to `unsigned' instead of `unsigned char' in case the
-               bit list is a full 32 bytes long.  */
-	    if (c < (unsigned) (*p * BYTEWIDTH)
+	    range_table = CHARSET_RANGE_TABLE (&p[-1]); /* Past the bitmap.  */
+	    range_table_exists = CHARSET_RANGE_TABLE_EXISTS_P (&p[-1]);
+	    if (range_table_exists)
+	      EXTRACT_NUMBER_AND_INCR (count, range_table);
+	    else
+	      count = 0;
+
+	    if (multibyte && BASE_LEADING_CODE_P (c))
+	      c = STRING_CHAR_AND_LENGTH (d, dend - d, len);
+
+	    if (SINGLE_BYTE_CHAR_P (c))
+	      {			/* Lookup bitmap.  */
+		c = TRANSLATE (c); /* The character to match.  */
+		len = 1;
+
+		/* Cast to `unsigned' instead of `unsigned char' in
+		   case the bit list is a full 32 bytes long.  */
+		if (c < (unsigned) (CHARSET_BITMAP_SIZE (&p[-1]) * BYTEWIDTH)
 		&& p[1 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH)))
 	      not = !not;
+	      }
+	    else if (range_table_exists)
+	      CHARSET_LOOKUP_RANGE_TABLE_RAW (not, c, range_table, count);
 
-	    p += 1 + *p;
+	    p = CHARSET_RANGE_TABLE_END (range_table, count);
 
 	    if (!not) goto fail;
 
 	    SET_REGS_MATCHED ();
-            d++;
+	    d += len;
 	    break;
 	  }
 
 
-        /* The beginning of a group is represented by start_memory.
-           The arguments are the register number in the next byte, and the
-           number of groups inner to this one in the next.  The text
-           matched within the group is recorded (in the internal
-           registers data structure) under the register number.  */
-        case start_memory:
+	/* The beginning of a group is represented by start_memory.
+	   The arguments are the register number in the next byte, and the
+	   number of groups inner to this one in the next.  The text
+	   matched within the group is recorded (in the internal
+	   registers data structure) under the register number.	 */
+	case start_memory:
 	  DEBUG_PRINT3 ("EXECUTING start_memory %d (%d):\n", *p, p[1]);
 
-          /* Find out if this group can match the empty string.  */
+	  /* Find out if this group can match the empty string.	 */
 	  p1 = p;		/* To send to group_match_null_string_p.  */
 
-          if (REG_MATCH_NULL_STRING_P (reg_info[*p]) == MATCH_NULL_UNSET_VALUE)
-            REG_MATCH_NULL_STRING_P (reg_info[*p])
-              = group_match_null_string_p (&p1, pend, reg_info);
-
-          /* Save the position in the string where we were the last time
-             we were at this open-group operator in case the group is
-             operated upon by a repetition operator, e.g., with `(a*)*b'
-             against `ab'; then we want to ignore where we are now in
-             the string in case this attempt to match fails.  */
-          old_regstart[*p] = REG_MATCH_NULL_STRING_P (reg_info[*p])
-                             ? REG_UNSET (regstart[*p]) ? d : regstart[*p]
-                             : regstart[*p];
+	  if (REG_MATCH_NULL_STRING_P (reg_info[*p]) == MATCH_NULL_UNSET_VALUE)
+	    REG_MATCH_NULL_STRING_P (reg_info[*p])
+	      = group_match_null_string_p (&p1, pend, reg_info);
+
+	  /* Save the position in the string where we were the last time
+	     we were at this open-group operator in case the group is
+	     operated upon by a repetition operator, e.g., with `(a*)*b'
+	     against `ab'; then we want to ignore where we are now in
+	     the string in case this attempt to match fails.  */
+	  old_regstart[*p] = REG_MATCH_NULL_STRING_P (reg_info[*p])
+			     ? REG_UNSET (regstart[*p]) ? d : regstart[*p]
+			     : regstart[*p];
 	  DEBUG_PRINT2 ("  old_regstart: %d\n",
 			 POINTER_TO_OFFSET (old_regstart[*p]));
 
-          regstart[*p] = d;
+	  regstart[*p] = d;
 	  DEBUG_PRINT2 ("  regstart: %d\n", POINTER_TO_OFFSET (regstart[*p]));
 
-          IS_ACTIVE (reg_info[*p]) = 1;
-          MATCHED_SOMETHING (reg_info[*p]) = 0;
+	  IS_ACTIVE (reg_info[*p]) = 1;
+	  MATCHED_SOMETHING (reg_info[*p]) = 0;
 
-          /* This is the new highest active register.  */
-          highest_active_reg = *p;
+	  /* Clear this whenever we change the register activity status.  */
+	  set_regs_matched_done = 0;
 
-          /* If nothing was active before, this is the new lowest active
-             register.  */
-          if (lowest_active_reg == NO_LOWEST_ACTIVE_REG)
-            lowest_active_reg = *p;
+	  /* This is the new highest active register.  */
+	  highest_active_reg = *p;
 
-          /* Move past the register number and inner group count.  */
-          p += 2;
-          break;
+	  /* If nothing was active before, this is the new lowest active
+	     register.	*/
+	  if (lowest_active_reg == NO_LOWEST_ACTIVE_REG)
+	    lowest_active_reg = *p;
+
+	  /* Move past the register number and inner group count.  */
+	  p += 2;
+	  just_past_start_mem = p;
+
+	  break;
 
 
-        /* The stop_memory opcode represents the end of a group.  Its
-           arguments are the same as start_memory's: the register
-           number, and the number of inner groups.  */
+	/* The stop_memory opcode represents the end of a group.  Its
+	   arguments are the same as start_memory's: the register
+	   number, and the number of inner groups.  */
 	case stop_memory:
 	  DEBUG_PRINT3 ("EXECUTING stop_memory %d (%d):\n", *p, p[1]);
 
-          /* We need to save the string position the last time we were at
-             this close-group operator in case the group is operated
-             upon by a repetition operator, e.g., with `((a*)*(b*)*)*'
-             against `aba'; then we want to ignore where we are now in
-             the string in case this attempt to match fails.  */
-          old_regend[*p] = REG_MATCH_NULL_STRING_P (reg_info[*p])
-                           ? REG_UNSET (regend[*p]) ? d : regend[*p]
+	  /* We need to save the string position the last time we were at
+	     this close-group operator in case the group is operated
+	     upon by a repetition operator, e.g., with `((a*)*(b*)*)*'
+	     against `aba'; then we want to ignore where we are now in
+	     the string in case this attempt to match fails.  */
+	  old_regend[*p] = REG_MATCH_NULL_STRING_P (reg_info[*p])
+			   ? REG_UNSET (regend[*p]) ? d : regend[*p]
 			   : regend[*p];
 	  DEBUG_PRINT2 ("      old_regend: %d\n",
 			 POINTER_TO_OFFSET (old_regend[*p]));
 
-          regend[*p] = d;
+	  regend[*p] = d;
 	  DEBUG_PRINT2 ("      regend: %d\n", POINTER_TO_OFFSET (regend[*p]));
 
-          /* This register isn't active anymore.  */
-          IS_ACTIVE (reg_info[*p]) = 0;
+	  /* This register isn't active anymore.  */
+	  IS_ACTIVE (reg_info[*p]) = 0;
 
-          /* If this was the only register active, nothing is active
-             anymore.  */
-          if (lowest_active_reg == highest_active_reg)
-            {
-              lowest_active_reg = NO_LOWEST_ACTIVE_REG;
-              highest_active_reg = NO_HIGHEST_ACTIVE_REG;
-            }
-          else
-            { /* We must scan for the new highest active register, since
-                 it isn't necessarily one less than now: consider
-                 (a(b)c(d(e)f)g).  When group 3 ends, after the f), the
-                 new highest active register is 1.  */
-              unsigned char r = *p - 1;
-              while (r > 0 && !IS_ACTIVE (reg_info[r]))
-                r--;
-
-              /* If we end up at register zero, that means that we saved
-                 the registers as the result of an `on_failure_jump', not
-                 a `start_memory', and we jumped to past the innermost
-                 `stop_memory'.  For example, in ((.)*) we save
-                 registers 1 and 2 as a result of the *, but when we pop
-                 back to the second ), we are at the stop_memory 1.
-                 Thus, nothing is active.  */
+	  /* Clear this whenever we change the register activity status.  */
+	  set_regs_matched_done = 0;
+
+	  /* If this was the only register active, nothing is active
+	     anymore.  */
+	  if (lowest_active_reg == highest_active_reg)
+	    {
+	      lowest_active_reg = NO_LOWEST_ACTIVE_REG;
+	      highest_active_reg = NO_HIGHEST_ACTIVE_REG;
+	    }
+	  else
+	    { /* We must scan for the new highest active register, since
+		 it isn't necessarily one less than now: consider
+		 (a(b)c(d(e)f)g).  When group 3 ends, after the f), the
+		 new highest active register is 1.  */
+	      unsigned char r = *p - 1;
+	      while (r > 0 && !IS_ACTIVE (reg_info[r]))
+		r--;
+
+	      /* If we end up at register zero, that means that we saved
+		 the registers as the result of an `on_failure_jump', not
+		 a `start_memory', and we jumped to past the innermost
+		 `stop_memory'.	 For example, in ((.)*) we save
+		 registers 1 and 2 as a result of the *, but when we pop
+		 back to the second ), we are at the stop_memory 1.
+		 Thus, nothing is active.  */
 	      if (r == 0)
-                {
-                  lowest_active_reg = NO_LOWEST_ACTIVE_REG;
-                  highest_active_reg = NO_HIGHEST_ACTIVE_REG;
-                }
-              else
-                highest_active_reg = r;
-            }
+		{
+		  lowest_active_reg = NO_LOWEST_ACTIVE_REG;
+		  highest_active_reg = NO_HIGHEST_ACTIVE_REG;
+		}
+	      else
+		highest_active_reg = r;
+	    }
 
-          /* If just failed to match something this time around with a
-             group that's operated on by a repetition operator, try to
-             force exit from the ``loop'', and restore the register
-             information for this group that we had before trying this
-             last match.  */
-          if ((!MATCHED_SOMETHING (reg_info[*p])
-               || (re_opcode_t) p[-3] == start_memory)
-	      && (p + 2) < pend)              
-            {
-              boolean is_a_jump_n = false;
+	  /* If just failed to match something this time around with a
+	     group that's operated on by a repetition operator, try to
+	     force exit from the ``loop'', and restore the register
+	     information for this group that we had before trying this
+	     last match.  */
+	  if ((!MATCHED_SOMETHING (reg_info[*p])
+	       || just_past_start_mem == p - 1)
+	      && (p + 2) < pend)
+	    {
+	      boolean is_a_jump_n = false;
 
-              p1 = p + 2;
-              mcnt = 0;
-              switch ((re_opcode_t) *p1++)
-                {
-                  case jump_n:
+	      p1 = p + 2;
+	      mcnt = 0;
+	      switch ((re_opcode_t) *p1++)
+		{
+		  case jump_n:
 		    is_a_jump_n = true;
-                  case pop_failure_jump:
+		  case pop_failure_jump:
 		  case maybe_pop_jump:
 		  case jump:
 		  case dummy_failure_jump:
-                    EXTRACT_NUMBER_AND_INCR (mcnt, p1);
+		    EXTRACT_NUMBER_AND_INCR (mcnt, p1);
 		    if (is_a_jump_n)
 		      p1 += 2;
-                    break;
+		    break;
 
-                  default:
-                    /* do nothing */ ;
-                }
+		  default:
+		    /* do nothing */ ;
+		}
 	      p1 += mcnt;
 
-              /* If the next operation is a jump backwards in the pattern
-	         to an on_failure_jump right before the start_memory
-                 corresponding to this stop_memory, exit from the loop
-                 by forcing a failure after pushing on the stack the
-                 on_failure_jump's jump in the pattern, and d.  */
-              if (mcnt < 0 && (re_opcode_t) *p1 == on_failure_jump
-                  && (re_opcode_t) p1[3] == start_memory && p1[4] == *p)
+	      /* If the next operation is a jump backwards in the pattern
+		 to an on_failure_jump right before the start_memory
+		 corresponding to this stop_memory, exit from the loop
+		 by forcing a failure after pushing on the stack the
+		 on_failure_jump's jump in the pattern, and d.	*/
+	      if (mcnt < 0 && (re_opcode_t) *p1 == on_failure_jump
+		  && (re_opcode_t) p1[3] == start_memory && p1[4] == *p)
 		{
-                  /* If this group ever matched anything, then restore
-                     what its registers were before trying this last
-                     failed match, e.g., with `(a*)*b' against `ab' for
-                     regstart[1], and, e.g., with `((a*)*(b*)*)*'
-                     against `aba' for regend[3].
-
-                     Also restore the registers for inner groups for,
-                     e.g., `((a*)(b*))*' against `aba' (register 3 would
-                     otherwise get trashed).  */
+		  /* If this group ever matched anything, then restore
+		     what its registers were before trying this last
+		     failed match, e.g., with `(a*)*b' against `ab' for
+		     regstart[1], and, e.g., with `((a*)*(b*)*)*'
+		     against `aba' for regend[3].
+
+		     Also restore the registers for inner groups for,
+		     e.g., `((a*)(b*))*' against `aba' (register 3 would
+		     otherwise get trashed).  */
 
-                  if (EVER_MATCHED_SOMETHING (reg_info[*p]))
+		  if (EVER_MATCHED_SOMETHING (reg_info[*p]))
 		    {
 		      unsigned r;
 
-                      EVER_MATCHED_SOMETHING (reg_info[*p]) = 0;
+		      EVER_MATCHED_SOMETHING (reg_info[*p]) = 0;
 
 		      /* Restore this and inner groups' (if any) registers.  */
 		      for (r = *p; r < *p + *(p + 1); r++)
@@ -3823,53 +4844,53 @@
 			}
 		    }
 		  p1++;
-                  EXTRACT_NUMBER_AND_INCR (mcnt, p1);
-                  PUSH_FAILURE_POINT (p1 + mcnt, d, -2);
+		  EXTRACT_NUMBER_AND_INCR (mcnt, p1);
+		  PUSH_FAILURE_POINT (p1 + mcnt, d, -2);
 
-                  goto fail;
-                }
-            }
+		  goto fail;
+		}
+	    }
 
-          /* Move past the register number and the inner group count.  */
-          p += 2;
-          break;
+	  /* Move past the register number and the inner group count.  */
+	  p += 2;
+	  break;
 
 
 	/* \<digit> has been turned into a `duplicate' command which is
-           followed by the numeric value of <digit> as the register number.  */
-        case duplicate:
+	   followed by the numeric value of <digit> as the register number.  */
+	case duplicate:
 	  {
 	    register const char *d2, *dend2;
-	    int regno = *p++;   /* Get which register to match against.  */
+	    int regno = *p++;	/* Get which register to match against.	 */
 	    DEBUG_PRINT2 ("EXECUTING duplicate %d.\n", regno);
 
-	    /* Can't back reference a group which we've never matched.  */
-            if (REG_UNSET (regstart[regno]) || REG_UNSET (regend[regno]))
-              goto fail;
-
-            /* Where in input to try to start matching.  */
-            d2 = regstart[regno];
-
-            /* Where to stop matching; if both the place to start and
-               the place to stop matching are in the same string, then
-               set to the place to stop, otherwise, for now have to use
-               the end of the first string.  */
+	    /* Can't back reference a group which we've never matched.	*/
+	    if (REG_UNSET (regstart[regno]) || REG_UNSET (regend[regno]))
+	      goto fail;
+
+	    /* Where in input to try to start matching.	 */
+	    d2 = regstart[regno];
+
+	    /* Where to stop matching; if both the place to start and
+	       the place to stop matching are in the same string, then
+	       set to the place to stop, otherwise, for now have to use
+	       the end of the first string.  */
 
-            dend2 = ((FIRST_STRING_P (regstart[regno])
+	    dend2 = ((FIRST_STRING_P (regstart[regno])
 		      == FIRST_STRING_P (regend[regno]))
 		     ? regend[regno] : end_match_1);
 	    for (;;)
 	      {
 		/* If necessary, advance to next segment in register
-                   contents.  */
+		   contents.  */
 		while (d2 == dend2)
 		  {
 		    if (dend2 == end_match_2) break;
 		    if (dend2 == regend[regno]) break;
 
-                    /* End of string1 => advance to string2. */
-                    d2 = string2;
-                    dend2 = regend[regno];
+		    /* End of string1 => advance to string2. */
+		    d2 = string2;
+		    dend2 = regend[regno];
 		  }
 		/* At end of register contents => success */
 		if (d2 == dend2) break;
@@ -3881,433 +4902,761 @@
 		mcnt = dend - d;
 
 		/* Want how many consecutive characters we can match in
-                   one shot, so, if necessary, adjust the count.  */
-                if (mcnt > dend2 - d2)
+		   one shot, so, if necessary, adjust the count.  */
+		if (mcnt > dend2 - d2)
 		  mcnt = dend2 - d2;
 
 		/* Compare that many; failure if mismatch, else move
-                   past them.  */
-		if (translate
-                    ? bcmp_translate (d, d2, mcnt, translate)
-                    : bcmp (d, d2, mcnt))
+		   past them.  */
+		if (RE_TRANSLATE_P (translate)
+		    ? bcmp_translate (d, d2, mcnt, translate)
+		    : bcmp (d, d2, mcnt))
 		  goto fail;
 		d += mcnt, d2 += mcnt;
+
+		/* Do this because we've match some characters.	 */
+		SET_REGS_MATCHED ();
 	      }
 	  }
 	  break;
 
 
-        /* begline matches the empty string at the beginning of the string
-           (unless `not_bol' is set in `bufp'), and, if
-           `newline_anchor' is set, after newlines.  */
+	/* begline matches the empty string at the beginning of the string
+	   (unless `not_bol' is set in `bufp'), and, if
+	   `newline_anchor' is set, after newlines.  */
 	case begline:
-          DEBUG_PRINT1 ("EXECUTING begline.\n");
+	  DEBUG_PRINT1 ("EXECUTING begline.\n");
 
-          if (AT_STRINGS_BEG (d))
-            {
-              if (!bufp->not_bol) break;
-            }
-          else if (d[-1] == '\n' && bufp->newline_anchor)
-            {
-              break;
-            }
-          /* In all other cases, we fail.  */
-          goto fail;
+	  if (AT_STRINGS_BEG (d))
+	    {
+	      if (!bufp->not_bol) break;
+	    }
+	  else if (d[-1] == '\n' && bufp->newline_anchor)
+	    {
+	      break;
+	    }
+	  /* In all other cases, we fail.  */
+	  goto fail;
 
 
-        /* endline is the dual of begline.  */
+	/* endline is the dual of begline.  */
 	case endline:
-          DEBUG_PRINT1 ("EXECUTING endline.\n");
+	  DEBUG_PRINT1 ("EXECUTING endline.\n");
 
-          if (AT_STRINGS_END (d))
-            {
-              if (!bufp->not_eol) break;
-            }
+	  if (AT_STRINGS_END (d))
+	    {
+	      if (!bufp->not_eol) break;
+	    }
 
-          /* We have to ``prefetch'' the next character.  */
-          else if ((d == end1 ? *string2 : *d) == '\n'
-                   && bufp->newline_anchor)
-            {
-              break;
-            }
-          goto fail;
+	  /* We have to ``prefetch'' the next character.  */
+	  else if ((d == end1 ? *string2 : *d) == '\n'
+		   && bufp->newline_anchor)
+	    {
+	      break;
+	    }
+	  goto fail;
 
 
 	/* Match at the very beginning of the data.  */
-        case begbuf:
-          DEBUG_PRINT1 ("EXECUTING begbuf.\n");
-          if (AT_STRINGS_BEG (d))
-            break;
-          goto fail;
+	case begbuf:
+	  DEBUG_PRINT1 ("EXECUTING begbuf.\n");
+	  if (AT_STRINGS_BEG (d))
+	    break;
+	  goto fail;
 
 
 	/* Match at the very end of the data.  */
-        case endbuf:
-          DEBUG_PRINT1 ("EXECUTING endbuf.\n");
+	case endbuf:
+	  DEBUG_PRINT1 ("EXECUTING endbuf.\n");
 	  if (AT_STRINGS_END (d))
 	    break;
-          goto fail;
+	  goto fail;
 
 
-        /* on_failure_keep_string_jump is used to optimize `.*\n'.  It
-           pushes NULL as the value for the string on the stack.  Then
-           `pop_failure_point' will keep the current value for the
-           string, instead of restoring it.  To see why, consider
-           matching `foo\nbar' against `.*\n'.  The .* matches the foo;
-           then the . fails against the \n.  But the next thing we want
-           to do is match the \n against the \n; if we restored the
-           string value, we would be back at the foo.
-
-           Because this is used only in specific cases, we don't need to
-           check all the things that `on_failure_jump' does, to make
-           sure the right things get saved on the stack.  Hence we don't
-           share its code.  The only reason to push anything on the
-           stack at all is that otherwise we would have to change
-           `anychar's code to do something besides goto fail in this
-           case; that seems worse than this.  */
-        case on_failure_keep_string_jump:
-          DEBUG_PRINT1 ("EXECUTING on_failure_keep_string_jump");
+	/* on_failure_keep_string_jump is used to optimize `.*\n'.  It
+	   pushes NULL as the value for the string on the stack.  Then
+	   `pop_failure_point' will keep the current value for the
+	   string, instead of restoring it.  To see why, consider
+	   matching `foo\nbar' against `.*\n'.	The .* matches the foo;
+	   then the . fails against the \n.  But the next thing we want
+	   to do is match the \n against the \n; if we restored the
+	   string value, we would be back at the foo.
+
+	   Because this is used only in specific cases, we don't need to
+	   check all the things that `on_failure_jump' does, to make
+	   sure the right things get saved on the stack.  Hence we don't
+	   share its code.  The only reason to push anything on the
+	   stack at all is that otherwise we would have to change
+	   `anychar's code to do something besides goto fail in this
+	   case; that seems worse than this.  */
+	case on_failure_keep_string_jump:
+	  DEBUG_PRINT1 ("EXECUTING on_failure_keep_string_jump");
 
-          EXTRACT_NUMBER_AND_INCR (mcnt, p);
-          DEBUG_PRINT3 (" %d (to 0x%x):\n", mcnt, p + mcnt);
+	  EXTRACT_NUMBER_AND_INCR (mcnt, p);
+	  DEBUG_PRINT3 (" %d (to 0x%x):\n", mcnt, p + mcnt);
 
-          PUSH_FAILURE_POINT (p + mcnt, NULL, -2);
-          break;
+	  PUSH_FAILURE_POINT (p + mcnt, NULL, -2);
+	  break;
 
 
 	/* Uses of on_failure_jump:
 
-           Each alternative starts with an on_failure_jump that points
-           to the beginning of the next alternative.  Each alternative
-           except the last ends with a jump that in effect jumps past
-           the rest of the alternatives.  (They really jump to the
-           ending jump of the following alternative, because tensioning
-           these jumps is a hassle.)
-
-           Repeats start with an on_failure_jump that points past both
-           the repetition text and either the following jump or
-           pop_failure_jump back to this on_failure_jump.  */
+	   Each alternative starts with an on_failure_jump that points
+	   to the beginning of the next alternative.  Each alternative
+	   except the last ends with a jump that in effect jumps past
+	   the rest of the alternatives.  (They really jump to the
+	   ending jump of the following alternative, because tensioning
+	   these jumps is a hassle.)
+
+	   Repeats start with an on_failure_jump that points past both
+	   the repetition text and either the following jump or
+	   pop_failure_jump back to this on_failure_jump.  */
 	case on_failure_jump:
-        on_failure:
-          DEBUG_PRINT1 ("EXECUTING on_failure_jump");
+	on_failure:
+	  DEBUG_PRINT1 ("EXECUTING on_failure_jump");
 
-          EXTRACT_NUMBER_AND_INCR (mcnt, p);
-          DEBUG_PRINT3 (" %d (to 0x%x)", mcnt, p + mcnt);
+#if defined (WINDOWSNT) && defined (emacs)
+	  QUIT;
+#endif
 
-          /* If this on_failure_jump comes right before a group (i.e.,
-             the original * applied to a group), save the information
-             for that group and all inner ones, so that if we fail back
-             to this point, the group's information will be correct.
-             For example, in \(a*\)*\1, we need the preceding group,
-             and in \(\(a*\)b*\)\2, we need the inner group.  */
-
-          /* We can't use `p' to check ahead because we push
-             a failure point to `p + mcnt' after we do this.  */
-          p1 = p;
-
-          /* We need to skip no_op's before we look for the
-             start_memory in case this on_failure_jump is happening as
-             the result of a completed succeed_n, as in \(a\)\{1,3\}b\1
-             against aba.  */
-          while (p1 < pend && (re_opcode_t) *p1 == no_op)
-            p1++;
+	  EXTRACT_NUMBER_AND_INCR (mcnt, p);
+	  DEBUG_PRINT3 (" %d (to 0x%x)", mcnt, p + mcnt);
 
-          if (p1 < pend && (re_opcode_t) *p1 == start_memory)
-            {
-              /* We have a new highest active register now.  This will
-                 get reset at the start_memory we are about to get to,
-                 but we will have saved all the registers relevant to
-                 this repetition op, as described above.  */
-              highest_active_reg = *(p1 + 1) + *(p1 + 2);
-              if (lowest_active_reg == NO_LOWEST_ACTIVE_REG)
-                lowest_active_reg = *(p1 + 1);
-            }
+	  /* If this on_failure_jump comes right before a group (i.e.,
+	     the original * applied to a group), save the information
+	     for that group and all inner ones, so that if we fail back
+	     to this point, the group's information will be correct.
+	     For example, in \(a*\)*\1, we need the preceding group,
+	     and in \(zz\(a*\)b*\)\2, we need the inner group.	*/
+
+	  /* We can't use `p' to check ahead because we push
+	     a failure point to `p + mcnt' after we do this.  */
+	  p1 = p;
+
+	  /* We need to skip no_op's before we look for the
+	     start_memory in case this on_failure_jump is happening as
+	     the result of a completed succeed_n, as in \(a\)\{1,3\}b\1
+	     against aba.  */
+	  while (p1 < pend && (re_opcode_t) *p1 == no_op)
+	    p1++;
 
-          DEBUG_PRINT1 (":\n");
-          PUSH_FAILURE_POINT (p + mcnt, d, -2);
-          break;
+	  if (p1 < pend && (re_opcode_t) *p1 == start_memory)
+	    {
+	      /* We have a new highest active register now.  This will
+		 get reset at the start_memory we are about to get to,
+		 but we will have saved all the registers relevant to
+		 this repetition op, as described above.  */
+	      highest_active_reg = *(p1 + 1) + *(p1 + 2);
+	      if (lowest_active_reg == NO_LOWEST_ACTIVE_REG)
+		lowest_active_reg = *(p1 + 1);
+	    }
 
+	  DEBUG_PRINT1 (":\n");
+	  PUSH_FAILURE_POINT (p + mcnt, d, -2);
+	  break;
+
 
-        /* A smart repeat ends with `maybe_pop_jump'.
-	   We change it to either `pop_failure_jump' or `jump'.  */
-        case maybe_pop_jump:
-          EXTRACT_NUMBER_AND_INCR (mcnt, p);
-          DEBUG_PRINT2 ("EXECUTING maybe_pop_jump %d.\n", mcnt);
-          {
+	/* A smart repeat ends with `maybe_pop_jump'.
+	   We change it to either `pop_failure_jump' or `jump'.	 */
+	case maybe_pop_jump:
+#if defined (WINDOWSNT) && defined (emacs)
+	  QUIT;
+#endif
+	  EXTRACT_NUMBER_AND_INCR (mcnt, p);
+	  DEBUG_PRINT2 ("EXECUTING maybe_pop_jump %d.\n", mcnt);
+	  {
 	    register unsigned char *p2 = p;
+
+	    /* Compare the beginning of the repeat with what in the
+	       pattern follows its end. If we can establish that there
+	       is nothing that they would both match, i.e., that we
+	       would have to backtrack because of (as in, e.g., `a*a')
+	       then we can change to pop_failure_jump, because we'll
+	       never have to backtrack.
+
+	       This is not true in the case of alternatives: in
+	       `(a|ab)*' we do need to backtrack to the `ab' alternative
+	       (e.g., if the string was `ab').	But instead of trying to
+	       detect that here, the alternative has put on a dummy
+	       failure point which is what we will end up popping.  */
+
+	    /* Skip over open/close-group commands.
+	       If what follows this loop is a ...+ construct,
+	       look at what begins its body, since we will have to
+	       match at least one of that.  */
+	    while (1)
+	      {
+		if (p2 + 2 < pend
+		    && ((re_opcode_t) *p2 == stop_memory
+			|| (re_opcode_t) *p2 == start_memory))
+		  p2 += 3;
+		else if (p2 + 6 < pend
+			 && (re_opcode_t) *p2 == dummy_failure_jump)
+		  p2 += 6;
+		else
+		  break;
+	      }
 
-            /* Compare the beginning of the repeat with what in the
-               pattern follows its end. If we can establish that there
-               is nothing that they would both match, i.e., that we
-               would have to backtrack because of (as in, e.g., `a*a')
-               then we can change to pop_failure_jump, because we'll
-               never have to backtrack.
-
-               This is not true in the case of alternatives: in
-               `(a|ab)*' we do need to backtrack to the `ab' alternative
-               (e.g., if the string was `ab').  But instead of trying to
-               detect that here, the alternative has put on a dummy
-               failure point which is what we will end up popping.  */
-
-	    /* Skip over open/close-group commands.  */
-	    while (p2 + 2 < pend
-		   && ((re_opcode_t) *p2 == stop_memory
-		       || (re_opcode_t) *p2 == start_memory))
-	      p2 += 3;			/* Skip over args, too.  */
+	    p1 = p + mcnt;
+	    /* p1[0] ... p1[2] are the `on_failure_jump' corresponding
+	       to the `maybe_finalize_jump' of this case.  Examine what
+	       follows.	 */
 
-            /* If we're at the end of the pattern, we can change.  */
-            if (p2 == pend)
+	    /* If we're at the end of the pattern, we can change.  */
+	    if (p2 == pend)
 	      {
 		/* Consider what happens when matching ":\(.*\)"
 		   against ":/".  I don't really understand this code
-		   yet.  */
-  	        p[-3] = (unsigned char) pop_failure_jump;
-                DEBUG_PRINT1
-                  ("  End of pattern: change to `pop_failure_jump'.\n");
-              }
+		   yet.	 */
+		p[-3] = (unsigned char) pop_failure_jump;
+		DEBUG_PRINT1
+		  ("  End of pattern: change to `pop_failure_jump'.\n");
+	      }
 
-            else if ((re_opcode_t) *p2 == exactn
+	    else if ((re_opcode_t) *p2 == exactn
 		     || (bufp->newline_anchor && (re_opcode_t) *p2 == endline))
 	      {
-		register unsigned char c
-                  = *p2 == (unsigned char) endline ? '\n' : p2[2];
-		p1 = p + mcnt;
-
-                /* p1[0] ... p1[2] are the `on_failure_jump' corresponding
-                   to the `maybe_finalize_jump' of this case.  Examine what 
-                   follows.  */
-                if ((re_opcode_t) p1[3] == exactn && p1[5] != c)
-                  {
-  		    p[-3] = (unsigned char) pop_failure_jump;
-                    DEBUG_PRINT3 ("  %c != %c => pop_failure_jump.\n",
-                                  c, p1[5]);
-                  }
+		register unsigned int c
+		  = *p2 == (unsigned char) endline ? '\n' : p2[2];
+
+		if ((re_opcode_t) p1[3] == exactn)
+		  {
+		    if (!(multibyte /* && (c != '\n') */
+			  && BASE_LEADING_CODE_P (c))
+			? c != p1[5]
+			: (STRING_CHAR (&p2[2], pend - &p2[2])
+			   != STRING_CHAR (&p1[5], pend - &p1[5])))
+		  {
+		    p[-3] = (unsigned char) pop_failure_jump;
+		    DEBUG_PRINT3 ("  %c != %c => pop_failure_jump.\n",
+				  c, p1[5]);
+		  }
+		  }
 
 		else if ((re_opcode_t) p1[3] == charset
 			 || (re_opcode_t) p1[3] == charset_not)
 		  {
 		    int not = (re_opcode_t) p1[3] == charset_not;
 
-		    if (c < (unsigned char) (p1[4] * BYTEWIDTH)
+		    if (multibyte /* && (c != '\n') */
+			&& BASE_LEADING_CODE_P (c))
+		      c = STRING_CHAR (&p2[2], pend - &p2[2]);
+
+		    /* Test if C is listed in charset (or charset_not)
+		       at `&p1[3]'.  */
+		    if (SINGLE_BYTE_CHAR_P (c))
+		      {
+			if (c < CHARSET_BITMAP_SIZE (&p1[3]) * BYTEWIDTH
 			&& p1[5 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH)))
 		      not = !not;
+		      }
+		    else if (CHARSET_RANGE_TABLE_EXISTS_P (&p1[3]))
+		      CHARSET_LOOKUP_RANGE_TABLE (not, c, &p1[3]);
+
+		    /* `not' is equal to 1 if c would match, which means
+			that we can't change to pop_failure_jump.  */
+		    if (!not)
+		      {
+			p[-3] = (unsigned char) pop_failure_jump;
+			DEBUG_PRINT1 ("	 No match => pop_failure_jump.\n");
+		      }
+		  }
+	      }
+	    else if ((re_opcode_t) *p2 == charset)
+	      {
+		if ((re_opcode_t) p1[3] == exactn)
+		  {
+		    register unsigned int c = p1[5];
+		    int not = 0;
 
-                    /* `not' is equal to 1 if c would match, which means
-                        that we can't change to pop_failure_jump.  */
+		    if (multibyte && BASE_LEADING_CODE_P (c))
+		      c = STRING_CHAR (&p1[5], pend - &p1[5]);
+
+		    /* Test if C is listed in charset at `p2'.	*/
+		    if (SINGLE_BYTE_CHAR_P (c))
+		      {
+			if (c < CHARSET_BITMAP_SIZE (p2) * BYTEWIDTH
+			    && (p2[2 + c / BYTEWIDTH]
+				& (1 << (c % BYTEWIDTH))))
+			  not = !not;
+		      }
+		    else if (CHARSET_RANGE_TABLE_EXISTS_P (p2))
+		      CHARSET_LOOKUP_RANGE_TABLE (not, c, p2);
+
 		    if (!not)
-                      {
-  		        p[-3] = (unsigned char) pop_failure_jump;
-                        DEBUG_PRINT1 ("  No match => pop_failure_jump.\n");
-                      }
+		  {
+		    p[-3] = (unsigned char) pop_failure_jump;
+			DEBUG_PRINT1 ("	 No match => pop_failure_jump.\n");
+		      }
+		  }
+
+		/* It is hard to list up all the character in charset
+		   P2 if it includes multibyte character.  Give up in
+		   such case.  */
+		else if (!multibyte || !CHARSET_RANGE_TABLE_EXISTS_P (p2))
+		  {
+		    /* Now, we are sure that P2 has no range table.
+		       So, for the size of bitmap in P2, `p2[1]' is
+		       enough.	But P1 may have range table, so the
+		       size of bitmap table of P1 is extracted by
+		       using macro `CHARSET_BITMAP_SIZE'.
+
+		       Since we know that all the character listed in
+		       P2 is ASCII, it is enough to test only bitmap
+		       table of P1.  */
+
+		    if ((re_opcode_t) p1[3] == charset_not)
+		  {
+		    int idx;
+			/* We win if the charset_not inside the loop lists
+			   every character listed in the charset after.	 */
+		    for (idx = 0; idx < (int) p2[1]; idx++)
+		      if (! (p2[2 + idx] == 0
+				 || (idx < CHARSET_BITMAP_SIZE (&p1[3])
+				 && ((p2[2 + idx] & ~ p1[5 + idx]) == 0))))
+			break;
+
+		    if (idx == p2[1])
+		      {
+			p[-3] = (unsigned char) pop_failure_jump;
+			DEBUG_PRINT1 ("	 No match => pop_failure_jump.\n");
+		      }
 		  }
+		else if ((re_opcode_t) p1[3] == charset)
+		  {
+		    int idx;
+		    /* We win if the charset inside the loop
+		       has no overlap with the one after the loop.  */
+		    for (idx = 0;
+			     (idx < (int) p2[1]
+			      && idx < CHARSET_BITMAP_SIZE (&p1[3]));
+			 idx++)
+		      if ((p2[2 + idx] & p1[5 + idx]) != 0)
+			break;
+
+			if (idx == p2[1]
+			    || idx == CHARSET_BITMAP_SIZE (&p1[3]))
+		      {
+			p[-3] = (unsigned char) pop_failure_jump;
+			DEBUG_PRINT1 ("	 No match => pop_failure_jump.\n");
+		      }
+		  }
 	      }
 	  }
+	  }
 	  p -= 2;		/* Point at relative address again.  */
 	  if ((re_opcode_t) p[-1] != pop_failure_jump)
 	    {
 	      p[-1] = (unsigned char) jump;
-              DEBUG_PRINT1 ("  Match => jump.\n");
+	      DEBUG_PRINT1 ("  Match => jump.\n");
 	      goto unconditional_jump;
 	    }
-        /* Note fall through.  */
+	/* Note fall through.  */
 
 
 	/* The end of a simple repeat has a pop_failure_jump back to
-           its matching on_failure_jump, where the latter will push a
-           failure point.  The pop_failure_jump takes off failure
-           points put on by this pop_failure_jump's matching
-           on_failure_jump; we got through the pattern to here from the
-           matching on_failure_jump, so didn't fail.  */
-        case pop_failure_jump:
-          {
-            /* We need to pass separate storage for the lowest and
-               highest registers, even though we don't care about the
-               actual values.  Otherwise, we will restore only one
-               register from the stack, since lowest will == highest in
-               `pop_failure_point'.  */
-            unsigned dummy_low_reg, dummy_high_reg;
-            unsigned char *pdummy;
-            const char *sdummy;
-
-            DEBUG_PRINT1 ("EXECUTING pop_failure_jump.\n");
-            POP_FAILURE_POINT (sdummy, pdummy,
-                               dummy_low_reg, dummy_high_reg,
-                               reg_dummy, reg_dummy, reg_info_dummy);
-          }
-          /* Note fall through.  */
+	   its matching on_failure_jump, where the latter will push a
+	   failure point.  The pop_failure_jump takes off failure
+	   points put on by this pop_failure_jump's matching
+	   on_failure_jump; we got through the pattern to here from the
+	   matching on_failure_jump, so didn't fail.  */
+	case pop_failure_jump:
+	  {
+	    /* We need to pass separate storage for the lowest and
+	       highest registers, even though we don't care about the
+	       actual values.  Otherwise, we will restore only one
+	       register from the stack, since lowest will == highest in
+	       `pop_failure_point'.  */
+	    unsigned dummy_low_reg, dummy_high_reg;
+	    unsigned char *pdummy;
+	    const char *sdummy;
+
+	    DEBUG_PRINT1 ("EXECUTING pop_failure_jump.\n");
+	    POP_FAILURE_POINT (sdummy, pdummy,
+			       dummy_low_reg, dummy_high_reg,
+			       reg_dummy, reg_dummy, reg_info_dummy);
+	  }
+	  /* Note fall through.	 */
 
 
-        /* Unconditionally jump (without popping any failure points).  */
-        case jump:
+	/* Unconditionally jump (without popping any failure points).  */
+	case jump:
 	unconditional_jump:
+#if defined (WINDOWSNT) && defined (emacs)
+	  QUIT;
+#endif
 	  EXTRACT_NUMBER_AND_INCR (mcnt, p);	/* Get the amount to jump.  */
-          DEBUG_PRINT2 ("EXECUTING jump %d ", mcnt);
-	  p += mcnt;				/* Do the jump.  */
-          DEBUG_PRINT2 ("(to 0x%x).\n", p);
+	  DEBUG_PRINT2 ("EXECUTING jump %d ", mcnt);
+	  p += mcnt;				/* Do the jump.	 */
+	  DEBUG_PRINT2 ("(to 0x%x).\n", p);
 	  break;
 
 
-        /* We need this opcode so we can detect where alternatives end
-           in `group_match_null_string_p' et al.  */
-        case jump_past_alt:
-          DEBUG_PRINT1 ("EXECUTING jump_past_alt.\n");
-          goto unconditional_jump;
-
-
-        /* Normally, the on_failure_jump pushes a failure point, which
-           then gets popped at pop_failure_jump.  We will end up at
-           pop_failure_jump, also, and with a pattern of, say, `a+', we
-           are skipping over the on_failure_jump, so we have to push
-           something meaningless for pop_failure_jump to pop.  */
-        case dummy_failure_jump:
-          DEBUG_PRINT1 ("EXECUTING dummy_failure_jump.\n");
-          /* It doesn't matter what we push for the string here.  What
-             the code at `fail' tests is the value for the pattern.  */
-          PUSH_FAILURE_POINT (0, 0, -2);
-          goto unconditional_jump;
-
-
-        /* At the end of an alternative, we need to push a dummy failure
-           point in case we are followed by a `pop_failure_jump', because
-           we don't want the failure point for the alternative to be
-           popped.  For example, matching `(a|ab)*' against `aab'
-           requires that we match the `ab' alternative.  */
-        case push_dummy_failure:
-          DEBUG_PRINT1 ("EXECUTING push_dummy_failure.\n");
-          /* See comments just above at `dummy_failure_jump' about the
-             two zeroes.  */
-          PUSH_FAILURE_POINT (0, 0, -2);
-          break;
+	/* We need this opcode so we can detect where alternatives end
+	   in `group_match_null_string_p' et al.  */
+	case jump_past_alt:
+	  DEBUG_PRINT1 ("EXECUTING jump_past_alt.\n");
+	  goto unconditional_jump;
 
-        /* Have to succeed matching what follows at least n times.
-           After that, handle like `on_failure_jump'.  */
-        case succeed_n:
-          EXTRACT_NUMBER (mcnt, p + 2);
-          DEBUG_PRINT2 ("EXECUTING succeed_n %d.\n", mcnt);
-
-          assert (mcnt >= 0);
-          /* Originally, this is how many times we HAVE to succeed.  */
-          if (mcnt > 0)
-            {
-               mcnt--;
+
+	/* Normally, the on_failure_jump pushes a failure point, which
+	   then gets popped at pop_failure_jump.  We will end up at
+	   pop_failure_jump, also, and with a pattern of, say, `a+', we
+	   are skipping over the on_failure_jump, so we have to push
+	   something meaningless for pop_failure_jump to pop.  */
+	case dummy_failure_jump:
+	  DEBUG_PRINT1 ("EXECUTING dummy_failure_jump.\n");
+	  /* It doesn't matter what we push for the string here.  What
+	     the code at `fail' tests is the value for the pattern.  */
+	  PUSH_FAILURE_POINT (0, 0, -2);
+	  goto unconditional_jump;
+
+
+	/* At the end of an alternative, we need to push a dummy failure
+	   point in case we are followed by a `pop_failure_jump', because
+	   we don't want the failure point for the alternative to be
+	   popped.  For example, matching `(a|ab)*' against `aab'
+	   requires that we match the `ab' alternative.	 */
+	case push_dummy_failure:
+	  DEBUG_PRINT1 ("EXECUTING push_dummy_failure.\n");
+	  /* See comments just above at `dummy_failure_jump' about the
+	     two zeroes.  */
+	  PUSH_FAILURE_POINT (0, 0, -2);
+	  break;
+
+	/* Have to succeed matching what follows at least n times.
+	   After that, handle like `on_failure_jump'.  */
+	case succeed_n:
+	  EXTRACT_NUMBER (mcnt, p + 2);
+	  DEBUG_PRINT2 ("EXECUTING succeed_n %d.\n", mcnt);
+
+	  assert (mcnt >= 0);
+	  /* Originally, this is how many times we HAVE to succeed.  */
+	  if (mcnt > 0)
+	    {
+	       mcnt--;
 	       p += 2;
-               STORE_NUMBER_AND_INCR (p, mcnt);
-               DEBUG_PRINT3 ("  Setting 0x%x to %d.\n", p, mcnt);
-            }
+	       STORE_NUMBER_AND_INCR (p, mcnt);
+	       DEBUG_PRINT3 ("	Setting 0x%x to %d.\n", p, mcnt);
+	    }
 	  else if (mcnt == 0)
-            {
-              DEBUG_PRINT2 ("  Setting two bytes from 0x%x to no_op.\n", p+2);
+	    {
+	      DEBUG_PRINT2 ("  Setting two bytes from 0x%x to no_op.\n", p+2);
 	      p[2] = (unsigned char) no_op;
-              p[3] = (unsigned char) no_op;
-              goto on_failure;
-            }
-          break;
+	      p[3] = (unsigned char) no_op;
+	      goto on_failure;
+	    }
+	  break;
 
-        case jump_n:
-          EXTRACT_NUMBER (mcnt, p + 2);
-          DEBUG_PRINT2 ("EXECUTING jump_n %d.\n", mcnt);
+	case jump_n:
+	  EXTRACT_NUMBER (mcnt, p + 2);
+	  DEBUG_PRINT2 ("EXECUTING jump_n %d.\n", mcnt);
 
-          /* Originally, this is how many times we CAN jump.  */
-          if (mcnt)
-            {
-               mcnt--;
-               STORE_NUMBER (p + 2, mcnt);
+	  /* Originally, this is how many times we CAN jump.  */
+	  if (mcnt)
+	    {
+	       mcnt--;
+	       STORE_NUMBER (p + 2, mcnt);
 	       goto unconditional_jump;
-            }
-          /* If don't have to jump any more, skip over the rest of command.  */
+	    }
+	  /* If don't have to jump any more, skip over the rest of command.  */
 	  else
 	    p += 4;
-          break;
+	  break;
 
 	case set_number_at:
 	  {
-            DEBUG_PRINT1 ("EXECUTING set_number_at.\n");
+	    DEBUG_PRINT1 ("EXECUTING set_number_at.\n");
 
-            EXTRACT_NUMBER_AND_INCR (mcnt, p);
-            p1 = p + mcnt;
-            EXTRACT_NUMBER_AND_INCR (mcnt, p);
-            DEBUG_PRINT3 ("  Setting 0x%x to %d.\n", p1, mcnt);
+	    EXTRACT_NUMBER_AND_INCR (mcnt, p);
+	    p1 = p + mcnt;
+	    EXTRACT_NUMBER_AND_INCR (mcnt, p);
+	    DEBUG_PRINT3 ("  Setting 0x%x to %d.\n", p1, mcnt);
 	    STORE_NUMBER (p1, mcnt);
-            break;
-          }
+	    break;
+	  }
 
-        case wordbound:
-          DEBUG_PRINT1 ("EXECUTING wordbound.\n");
-          if (AT_WORD_BOUNDARY (d))
+	case wordbound:
+	  DEBUG_PRINT1 ("EXECUTING wordbound.\n");
+
+	  /* We SUCCEED in one of the following cases: */
+
+	  /* Case 1: D is at the beginning or the end of string.  */
+	  if (AT_STRINGS_BEG (d) || AT_STRINGS_END (d))
 	    break;
-          goto fail;
+	  else
+	    {
+	      /* C1 is the character before D, S1 is the syntax of C1, C2
+		 is the character at D, and S2 is the syntax of C2.  */
+	      int c1, c2, s1, s2;
+	      int pos1 = PTR_TO_OFFSET (d - 1);
+	      int charpos;
 
-	case notwordbound:
-          DEBUG_PRINT1 ("EXECUTING notwordbound.\n");
-	  if (AT_WORD_BOUNDARY (d))
+	      GET_CHAR_BEFORE_2 (c1, d, string1, end1, string2, end2);
+	      GET_CHAR_AFTER_2 (c2, d, string1, end1, string2, end2);
+#ifdef emacs
+	      charpos = SYNTAX_TABLE_BYTE_TO_CHAR (pos1);
+	      UPDATE_SYNTAX_TABLE (charpos);
+#endif
+	      s1 = SYNTAX (c1);
+#ifdef emacs
+	      UPDATE_SYNTAX_TABLE_FORWARD (charpos + 1);
+#endif
+	      s2 = SYNTAX (c2);
+
+	      if (/* Case 2: Only one of S1 and S2 is Sword.  */
+		  ((s1 == Sword) != (s2 == Sword))
+		  /* Case 3: Both of S1 and S2 are Sword, and macro
+		     WORD_BOUNDARY_P (C1, C2) returns nonzero.	*/
+		  || ((s1 == Sword) && WORD_BOUNDARY_P (c1, c2)))
+	    break;
+	}
+	  goto fail;
+
+      case notwordbound:
+	  DEBUG_PRINT1 ("EXECUTING notwordbound.\n");
+
+	  /* We FAIL in one of the following cases: */
+
+	  /* Case 1: D is at the beginning or the end of string.  */
+	  if (AT_STRINGS_BEG (d) || AT_STRINGS_END (d))
 	    goto fail;
-          break;
+	  else
+	    {
+	      /* C1 is the character before D, S1 is the syntax of C1, C2
+		 is the character at D, and S2 is the syntax of C2.  */
+	      int c1, c2, s1, s2;
+	      int pos1 = PTR_TO_OFFSET (d - 1);
+	      int charpos;
+
+	      GET_CHAR_BEFORE_2 (c1, d, string1, end1, string2, end2);
+	      GET_CHAR_AFTER_2 (c2, d, string1, end1, string2, end2);
+#ifdef emacs
+	      charpos = SYNTAX_TABLE_BYTE_TO_CHAR (pos1);
+	      UPDATE_SYNTAX_TABLE (charpos);
+#endif
+	      s1 = SYNTAX (c1);
+#ifdef emacs
+	      UPDATE_SYNTAX_TABLE_FORWARD (charpos + 1);
+#endif
+	      s2 = SYNTAX (c2);
+
+	      if (/* Case 2: Only one of S1 and S2 is Sword.  */
+		  ((s1 == Sword) != (s2 == Sword))
+		  /* Case 3: Both of S1 and S2 are Sword, and macro
+		     WORD_BOUNDARY_P (C1, C2) returns nonzero.	*/
+		  || ((s1 == Sword) && WORD_BOUNDARY_P (c1, c2)))
+	    goto fail;
+	}
+	  break;
 
 	case wordbeg:
-          DEBUG_PRINT1 ("EXECUTING wordbeg.\n");
-	  if (WORDCHAR_P (d) && (AT_STRINGS_BEG (d) || !WORDCHAR_P (d - 1)))
-	    break;
-          goto fail;
+	  DEBUG_PRINT1 ("EXECUTING wordbeg.\n");
+
+	  /* We FAIL in one of the following cases: */
+
+	  /* Case 1: D is at the end of string.	 */
+	  if (AT_STRINGS_END (d))
+	  goto fail;
+	  else
+	    {
+	      /* C1 is the character before D, S1 is the syntax of C1, C2
+		 is the character at D, and S2 is the syntax of C2.  */
+	      int c1, c2, s1, s2;
+	      int pos1 = PTR_TO_OFFSET (d);
+	      int charpos;
+
+	      GET_CHAR_AFTER_2 (c2, d, string1, end1, string2, end2);
+#ifdef emacs
+	      charpos = SYNTAX_TABLE_BYTE_TO_CHAR (pos1);
+	      UPDATE_SYNTAX_TABLE (charpos);
+#endif
+	      s2 = SYNTAX (c2);
+	
+	      /* Case 2: S2 is not Sword. */
+	      if (s2 != Sword)
+		goto fail;
+
+	      /* Case 3: D is not at the beginning of string ... */
+	      if (!AT_STRINGS_BEG (d))
+		{
+		  GET_CHAR_BEFORE_2 (c1, d, string1, end1, string2, end2);
+#ifdef emacs
+		  UPDATE_SYNTAX_TABLE_BACKWARD (charpos - 1);
+#endif
+		  s1 = SYNTAX (c1);
+
+		  /* ... and S1 is Sword, and WORD_BOUNDARY_P (C1, C2)
+		     returns 0.	 */
+		  if ((s1 == Sword) && !WORD_BOUNDARY_P (c1, c2))
+		    goto fail;
+		}
+	    }
+	  break;
 
 	case wordend:
-          DEBUG_PRINT1 ("EXECUTING wordend.\n");
-	  if (!AT_STRINGS_BEG (d) && WORDCHAR_P (d - 1)
-              && (!WORDCHAR_P (d) || AT_STRINGS_END (d)))
-	    break;
-          goto fail;
+	  DEBUG_PRINT1 ("EXECUTING wordend.\n");
+
+	  /* We FAIL in one of the following cases: */
+
+	  /* Case 1: D is at the beginning of string.  */
+	  if (AT_STRINGS_BEG (d))
+	    goto fail;
+	  else
+	    {
+	      /* C1 is the character before D, S1 is the syntax of C1, C2
+		 is the character at D, and S2 is the syntax of C2.  */
+	      int c1, c2, s1, s2;
+	      int pos1 = PTR_TO_OFFSET (d);
+	      int charpos;
+
+	      GET_CHAR_BEFORE_2 (c1, d, string1, end1, string2, end2);
+#ifdef emacs
+	      charpos = SYNTAX_TABLE_BYTE_TO_CHAR (pos1 - 1);
+	      UPDATE_SYNTAX_TABLE (charpos);
+#endif
+	      s1 = SYNTAX (c1);
+
+	      /* Case 2: S1 is not Sword.  */
+	      if (s1 != Sword)
+		goto fail;
+
+	      /* Case 3: D is not at the end of string ... */
+	      if (!AT_STRINGS_END (d))
+		{
+		  GET_CHAR_AFTER_2 (c2, d, string1, end1, string2, end2);
+#ifdef emacs
+		  UPDATE_SYNTAX_TABLE_FORWARD (charpos);
+#endif
+		  s2 = SYNTAX (c2);
+
+		  /* ... and S2 is Sword, and WORD_BOUNDARY_P (C1, C2)
+		     returns 0.	 */
+		  if ((s2 == Sword) && !WORD_BOUNDARY_P (c1, c2))
+	  goto fail;
+		}
+	    }
+	  break;
 
 #ifdef emacs
-  	case before_dot:
-          DEBUG_PRINT1 ("EXECUTING before_dot.\n");
- 	  if (PTR_CHAR_POS ((unsigned char *) d) >= point)
-  	    goto fail;
-  	  break;
-
-  	case at_dot:
-          DEBUG_PRINT1 ("EXECUTING at_dot.\n");
- 	  if (PTR_CHAR_POS ((unsigned char *) d) != point)
-  	    goto fail;
-  	  break;
-
-  	case after_dot:
-          DEBUG_PRINT1 ("EXECUTING after_dot.\n");
-          if (PTR_CHAR_POS ((unsigned char *) d) <= point)
-  	    goto fail;
-  	  break;
+	case before_dot:
+	  DEBUG_PRINT1 ("EXECUTING before_dot.\n");
+	  if (PTR_BYTE_POS ((unsigned char *) d) >= PT_BYTE)
+	    goto fail;
+	  break;
+
+	case at_dot:
+	  DEBUG_PRINT1 ("EXECUTING at_dot.\n");
+	  if (PTR_BYTE_POS ((unsigned char *) d) != PT_BYTE)
+	    goto fail;
+	  break;
+
+	case after_dot:
+	  DEBUG_PRINT1 ("EXECUTING after_dot.\n");
+	  if (PTR_BYTE_POS ((unsigned char *) d) <= PT_BYTE)
+	    goto fail;
+	  break;
 
 	case syntaxspec:
-          DEBUG_PRINT2 ("EXECUTING syntaxspec %d.\n", mcnt);
+	  DEBUG_PRINT2 ("EXECUTING syntaxspec %d.\n", mcnt);
 	  mcnt = *p++;
 	  goto matchsyntax;
 
-        case wordchar:
-          DEBUG_PRINT1 ("EXECUTING Emacs wordchar.\n");
+	case wordchar:
+	  DEBUG_PRINT1 ("EXECUTING Emacs wordchar.\n");
 	  mcnt = (int) Sword;
-        matchsyntax:
+	matchsyntax:
 	  PREFETCH ();
-	  if (SYNTAX (*d++) != (enum syntaxcode) mcnt)
-            goto fail;
-	  /* Can't use *d++ here; SYNTAX may be an unsafe macro.  */
-	  d++;
-	  if (SYNTAX (d[-1]) != (enum syntaxcode) mcnt)
+#ifdef emacs
+	  {
+	    int pos1 = SYNTAX_TABLE_BYTE_TO_CHAR (PTR_TO_OFFSET (d));
+	    UPDATE_SYNTAX_TABLE (pos1);
+	  }
+#endif
+	  {
+	    int c, len;
+
+	    if (multibyte)
+	      /* we must concern about multibyte form, ... */
+	      c = STRING_CHAR_AND_LENGTH (d, dend - d, len);
+	    else
+	      /* everything should be handled as ASCII, even though it
+		 looks like multibyte form.  */
+	      c = *d, len = 1;
+
+	    if (SYNTAX (c) != (enum syntaxcode) mcnt)
 	    goto fail;
-          SET_REGS_MATCHED ();
+	    d += len;
+	  }
+	  SET_REGS_MATCHED ();
 	  break;
 
 	case notsyntaxspec:
-          DEBUG_PRINT2 ("EXECUTING notsyntaxspec %d.\n", mcnt);
+	  DEBUG_PRINT2 ("EXECUTING notsyntaxspec %d.\n", mcnt);
 	  mcnt = *p++;
 	  goto matchnotsyntax;
 
-        case notwordchar:
-          DEBUG_PRINT1 ("EXECUTING Emacs notwordchar.\n");
+	case notwordchar:
+	  DEBUG_PRINT1 ("EXECUTING Emacs notwordchar.\n");
 	  mcnt = (int) Sword;
-        matchnotsyntax:
+	matchnotsyntax:
 	  PREFETCH ();
-	  /* Can't use *d++ here; SYNTAX may be an unsafe macro.  */
-	  d++;
-	  if (SYNTAX (d[-1]) == (enum syntaxcode) mcnt)
+#ifdef emacs
+	  {
+	    int pos1 = SYNTAX_TABLE_BYTE_TO_CHAR (PTR_TO_OFFSET (d));
+	    UPDATE_SYNTAX_TABLE (pos1);
+	  }
+#endif
+	  {
+	    int c, len;
+
+	    if (multibyte)
+	      c = STRING_CHAR_AND_LENGTH (d, dend - d, len);
+	    else
+	      c = *d, len = 1;
+
+	    if (SYNTAX (c) == (enum syntaxcode) mcnt)
 	    goto fail;
+	    d += len;
+	  }
+	  SET_REGS_MATCHED ();
+	  break;
+
+	case categoryspec:
+	  DEBUG_PRINT2 ("EXECUTING categoryspec %d.\n", *p);
+	  mcnt = *p++;
+	  PREFETCH ();
+	  {
+	    int c, len;
+
+	    if (multibyte)
+	      c = STRING_CHAR_AND_LENGTH (d, dend - d, len);
+	    else
+	      c = *d, len = 1;
+
+	    if (!CHAR_HAS_CATEGORY (c, mcnt))
+	      goto fail;
+	    d += len;
+	  }
+	  SET_REGS_MATCHED ();
+	  break;
+
+	case notcategoryspec:
+	  DEBUG_PRINT2 ("EXECUTING notcategoryspec %d.\n", *p);
+	  mcnt = *p++;
+	  PREFETCH ();
+	  {
+	    int c, len;
+
+	    if (multibyte)
+	      c = STRING_CHAR_AND_LENGTH (d, dend - d, len);
+	    else
+	      c = *d, len = 1;
+
+	    if (CHAR_HAS_CATEGORY (c, mcnt))
+	      goto fail;
+	    d += len;
+	  }
 	  SET_REGS_MATCHED ();
           break;
 
@@ -4339,6 +5688,9 @@
 
     /* We goto here if a matching operation fails. */
     fail:
+#if defined (WINDOWSNT) && defined (emacs)
+      QUIT;
+#endif
       if (!FAIL_STACK_EMPTY ())
 	{ /* A restart point is known.  Restore to that state.  */
           DEBUG_PRINT1 ("\nFAIL:\n");
@@ -4645,14 +5997,30 @@
 bcmp_translate (s1, s2, len, translate)
      unsigned char *s1, *s2;
      register int len;
-     char *translate;
+     RE_TRANSLATE_TYPE translate;
 {
   register unsigned char *p1 = s1, *p2 = s2;
-  while (len)
+  unsigned char *p1_end = s1 + len;
+  unsigned char *p2_end = s2 + len;
+
+  while (p1 != p1_end && p2 != p2_end)
     {
-      if (translate[*p1++] != translate[*p2++]) return 1;
-      len--;
+      int p1_charlen, p2_charlen;
+      int p1_ch, p2_ch;
+
+      p1_ch = STRING_CHAR_AND_LENGTH (p1, p1_end - p1, p1_charlen);
+      p2_ch = STRING_CHAR_AND_LENGTH (p2, p2_end - p2, p2_charlen);
+
+      if (RE_TRANSLATE (translate, p1_ch)
+	  != RE_TRANSLATE (translate, p2_ch))
+	return 1;
+
+      p1 += p1_charlen, p2 += p2_charlen;
     }
+
+  if (p1 != p1_end || p2 != p2_end)
+    return 1;
+
   return 0;
 }
 
@@ -4689,18 +6057,26 @@
 
   ret = regex_compile (pattern, length, re_syntax_options, bufp);
 
-  return re_error_msg[(int) ret];
-}     
+  if (!ret)
+    return NULL;
+  return gettext (re_error_msgid[(int) ret]);
+}
 
 /* Entry points compatible with 4.2 BSD regex library.  We don't define
-   them if this is an Emacs or POSIX compilation.  */
+   them unless specifically requested.  */
 
-#if !defined (emacs)
+#if defined (_REGEX_RE_COMP) || defined (_LIBC)
 
 /* BSD has one and only one pattern buffer.  */
 static struct re_pattern_buffer re_comp_buf;
 
 char *
+#ifdef _LIBC
+/* Make these definitions weak in libc, so POSIX programs can redefine
+   these names if they don't use our functions, and still use
+   regcomp/regexec below without link errors.  */
+weak_function
+#endif
 re_comp (s)
     const char *s;
 {
@@ -4709,7 +6085,7 @@
   if (!s)
     {
       if (!re_comp_buf.buffer)
-	return "No previous regular expression";
+	return gettext ("No previous regular expression");
       return 0;
     }
 
@@ -4717,12 +6093,14 @@
     {
       re_comp_buf.buffer = (unsigned char *) malloc (200);
       if (re_comp_buf.buffer == NULL)
-        return "Memory exhausted";
+        /* CVS: Yes, we're discarding `const' here if !HAVE_LIBINTL.  */
+        return (char *) gettext (re_error_msgid[(int) REG_ESPACE]);
       re_comp_buf.allocated = 200;
 
       re_comp_buf.fastmap = (char *) malloc (1 << BYTEWIDTH);
       if (re_comp_buf.fastmap == NULL)
-	return "Memory exhausted";
+	/* CVS: Yes, we're discarding `const' here if !HAVE_LIBINTL.  */
+	return (char *) gettext (re_error_msgid[(int) REG_ESPACE]);
     }
 
   /* Since `re_exec' always passes NULL for the `regs' argument, we
@@ -4732,13 +6110,19 @@
   re_comp_buf.newline_anchor = 1;
 
   ret = regex_compile (s, strlen (s), re_syntax_options, &re_comp_buf);
-  
-  /* Yes, we're discarding `const' here.  */
-  return (char *) re_error_msg[(int) ret];
+
+  if (!ret)
+    return NULL;
+
+  /* Yes, we're discarding `const' here if !HAVE_LIBINTL.  */
+  return (char *) gettext (re_error_msgid[(int) ret]);
 }
 
 
 int
+#ifdef _LIBC
+weak_function
+#endif
 re_exec (s)
     const char *s;
 {
@@ -4746,7 +6130,7 @@
   return
     0 <= re_search (&re_comp_buf, s, len, 0, len, (struct re_registers *) 0);
 }
-#endif /* not emacs and not _POSIX_SOURCE */
+#endif /* _REGEX_RE_COMP */
 
 /* POSIX.2 functions.  Don't define these for Emacs.  */
 
@@ -4800,6 +6184,7 @@
   /* regex_compile will allocate the space for the compiled pattern.  */
   preg->buffer = 0;
   preg->allocated = 0;
+  preg->used = 0;
 
   /* Don't bother to use a fastmap when searching.  This simplifies the
      REG_NEWLINE case: if we used a fastmap, we'd have to put all the
@@ -4811,7 +6196,9 @@
     {
       unsigned i;
 
-      preg->translate = (char *) malloc (CHAR_SET_SIZE);
+      preg->translate
+	= (RE_TRANSLATE_TYPE) malloc (CHAR_SET_SIZE
+				      * sizeof (*(RE_TRANSLATE_TYPE)0));
       if (preg->translate == NULL)
         return (int) REG_ESPACE;
 
@@ -4937,19 +6324,14 @@
   size_t msg_size;
 
   if (errcode < 0
-      || errcode >= (sizeof (re_error_msg) / sizeof (re_error_msg[0])))
+      || errcode >= (sizeof (re_error_msgid) / sizeof (re_error_msgid[0])))
     /* Only error codes returned by the rest of the code should be passed
        to this routine.  If we are given anything else, or if other regex
        code generates an invalid error code, then the program has a bug.
        Dump core so we can fix it.  */
     abort ();
-
-  msg = re_error_msg[errcode];
 
-  /* POSIX doesn't require that we do anything in this case, but why
-     not be nice.  */
-  if (! msg)
-    msg = "Success";
+  msg = gettext (re_error_msgid[errcode]);
 
   msg_size = strlen (msg) + 1; /* Includes the null.  */
 

--LZKIROWV0YR1M5IXJ62Q
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/src/main.c
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/src/main.c
============================================================
$ cvs diff -u -r1.15 -r1.16 main.c
--- ossp-pkg/ossp-cvs/src/main.c	2000/06/17 20:01:32	1.15
+++ ossp-pkg/ossp-cvs/src/main.c	2000/06/20 14:25:12	1.16
@@ -1266,12 +1266,17 @@
 		/* FIXME (njc): should we always set this with the CVSROOT from the command line? */
 		if (cvs_update_env)
 		{
+		    static char *prev;
 		    char *env;
 		    env = xmalloc (strlen (CVSROOT_ENV) + strlen (CVSroot)
 				   + 1 + 1);
 		    (void) sprintf (env, "%s=%s", CVSROOT_ENV, CVSroot);
 		    (void) putenv (env);
-		    /* do not free env, as putenv has control of it */
+		    /* do not free env yet, as putenv has control of it */
+		    /* but do free the previous value, if any */
+		    if (prev != NULL)
+			free (prev);
+		    prev = env;
 		}
 #endif
 	    }

--LZKIROWV0YR1M5IXJ62Q
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/src/root.c
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/src/root.c
============================================================
$ cvs diff -u -r1.2 -r1.3 root.c
--- ossp-pkg/ossp-cvs/src/root.c	2000/06/12 16:42:39	1.2
+++ ossp-pkg/ossp-cvs/src/root.c	2000/06/20 14:25:12	1.3
@@ -379,7 +379,7 @@
     char *CVSroot;
 {
     static int cvsroot_parsed = 0;
-    char *cvsroot_copy, *p;
+    char *cvsroot_copy, *cvsroot_save, *p;
     int check_hostname;
 
     /* Don't go through the trouble twice. */
@@ -389,10 +389,19 @@
 	return 0;
     }
 
+    if (CVSroot_original != NULL)
+	free (CVSroot_original);
+    if (CVSroot_directory != NULL)
+	free (CVSroot_directory);
+    if (CVSroot_username != NULL)
+	free (CVSroot_username);
+    if (CVSroot_hostname != NULL)
+	free (CVSroot_hostname);
+
     CVSroot_original = xstrdup (CVSroot);
-    cvsroot_copy = xstrdup (CVSroot);
+    cvsroot_save = cvsroot_copy = xstrdup (CVSroot);
 
-    if ((*cvsroot_copy == ':'))
+    if (*cvsroot_copy == ':')
     {
 	char *method = ++cvsroot_copy;
 
@@ -408,6 +417,7 @@
 	if (! (p = strchr (method, ':')))
 	{
 	    error (0, 0, "bad CVSroot: %s", CVSroot);
+	    free (cvsroot_save);
 	    return 1;
 	}
 	*p = '\0';
@@ -432,6 +442,7 @@
 	else
 	{
 	    error (0, 0, "unknown method in CVSroot: %s", CVSroot);
+	    free (cvsroot_save);
 	    return 1;
 	}
     }
@@ -462,18 +473,18 @@
     {
 	/* Check to see if there is a username in the string. */
 
-	if ((p = strchr (cvsroot_copy, '@')))
+	if ((p = strchr (cvsroot_copy, '@')) != NULL)
 	{
-	    CVSroot_username = cvsroot_copy;
+	    CVSroot_username = xstrdup (cvsroot_copy);
 	    *p = '\0';
 	    cvsroot_copy = ++p;
 	    if (*CVSroot_username == '\0')
 		CVSroot_username = NULL;
 	}
 
-	if ((p = strchr (cvsroot_copy, ':')))
+	if ((p = strchr (cvsroot_copy, ':')) != NULL)
 	{
-	    CVSroot_hostname = cvsroot_copy;
+	    CVSroot_hostname = xstrdup (cvsroot_copy);
 	    *p = '\0';
 	    cvsroot_copy = ++p;
       
@@ -482,7 +493,8 @@
 	}
     }
 
-    CVSroot_directory = cvsroot_copy;
+    CVSroot_directory = xstrdup(cvsroot_copy);
+    free (cvsroot_save);
 
 #if ! defined (CLIENT_SUPPORT) && ! defined (DEBUG)
     if (CVSroot_method != local_method)
@@ -572,18 +584,24 @@
 
 
 /* Set up the global CVSroot* variables as if we're using the local
-   repository DIR.  DIR must point to storage which will last for the
-   rest of the CVS invocation (for example, the caller might malloc it
-   and never free it, or free it just before exiting CVS).  */
+   repository DIR.  */
 
 void
 set_local_cvsroot (dir)
     char *dir;
 {
-    CVSroot_original = dir;
+    if (CVSroot_original != NULL)
+	free (CVSroot_original);
+    CVSroot_original = xstrdup(dir);
     CVSroot_method = local_method;
-    CVSroot_directory = CVSroot_original;
+    if (CVSroot_directory != NULL)
+	free (CVSroot_directory);
+    CVSroot_directory = xstrdup(dir);
+    if (CVSroot_username != NULL)
+	free (CVSroot_username);
     CVSroot_username = NULL;
+    if (CVSroot_hostname != NULL)
+	free (CVSroot_hostname);
     CVSroot_hostname = NULL;
     client_active = 0;
 }

--LZKIROWV0YR1M5IXJ62Q
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/src/server.c
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/src/server.c
============================================================
$ cvs diff -u -r1.19 -r1.20 server.c
--- ossp-pkg/ossp-cvs/src/server.c	2000/06/17 12:42:25	1.19
+++ ossp-pkg/ossp-cvs/src/server.c	2000/06/20 14:25:12	1.20
@@ -745,7 +745,6 @@
 {
     char *env;
     char *path;
-    char *arg_dup;
     
     if (error_pending()) return;
 
@@ -794,14 +793,7 @@
 	}
     }
 #endif
-    arg_dup = malloc (strlen (arg) + 1);
-    if (arg_dup == NULL)
-    {
-	pending_error = ENOMEM;
-	return;
-    }
-    strcpy (arg_dup, arg);
-    set_local_cvsroot (arg_dup);
+    set_local_cvsroot (arg);
 
     /* For pserver, this will already have happened, and the call will do
        nothing.  But for rsh, we need to do it now.  */
--LZKIROWV0YR1M5IXJ62Q--


From ossp-cvs-owner@ossp.org  Tue Jun 20 16:26:05 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5KEQ4797784; Tue, 20 Jun 2000 16:26:04 +0200 (CEST)
Date: Tue, 20 Jun 2000 16:26:04 +0200 (CEST)
Message-Id: <200006201426.e5KEQ4797784@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="XGEPC3MF2IEA0R8GASLX"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ossp-cvs configure configure.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--XGEPC3MF2IEA0R8GASLX
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: ossp-pkg                         Date:   20-Jun-2000 16:26:04
Branch: HEAD                             Handle: 2000062015260300

Modified files:
  ossp-pkg/ossp-cvs       configure configure.in

Log:
  *** empty log message ***

Summary:
  Revision    Changes     Path
  1.12        BLOB        ossp-pkg/ossp-cvs/configure
  1.12        +6  -0      ossp-pkg/ossp-cvs/configure.in
____________________________________________________________________________

--XGEPC3MF2IEA0R8GASLX
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/configure
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/configure
============================================================
$ cvs update -p -r1.11 configure >configure.old
$ cvs update -p -r1.12 configure >configure.new
$ diff -u configure.old configure.new

--XGEPC3MF2IEA0R8GASLX
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/configure.in
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/configure.in
============================================================
$ cvs diff -u -r1.11 -r1.12 configure.in
--- ossp-pkg/ossp-cvs/configure.in	2000/06/16 20:51:48	1.11
+++ ossp-pkg/ossp-cvs/configure.in	2000/06/20 14:26:03	1.12
@@ -77,6 +77,12 @@
 AC_DEFINE(HAVE_MEMCHR)
 
 dnl
+dnl Force lib/regex.c to use malloc instead of messing around with alloca
+dnl and define the old re_comp routines that we use.
+dnl
+AC_DEFINE(REGEX_MALLOC)
+AC_DEFINE(_REGEX_RE_COMP)
+dnl
 dnl AC_FUNC_VFORK is rather baroque.  It seems to be rather more picky
 dnl than, say, the Single Unix Specification (version 2), which simplifies
 dnl a lot of cases by saying that the child process can't set any variables
--XGEPC3MF2IEA0R8GASLX--


From ossp-cvs-owner@ossp.org  Tue Jun 20 16:38:51 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5KEco998697; Tue, 20 Jun 2000 16:38:50 +0200 (CEST)
Date: Tue, 20 Jun 2000 16:38:50 +0200 (CEST)
Message-Id: <200006201438.e5KEco998697@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="LBT26W69VOAOSQ8OXYAT"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ossp-cvs/lib regex.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--LBT26W69VOAOSQ8OXYAT
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: ossp-pkg                         Date:   20-Jun-2000 16:38:50
Branch: HEAD                             Handle: 2000062015385000

Modified files:
  ossp-pkg/ossp-cvs/lib   regex.c

Log:
  Get rid of Emacs related warnings

Summary:
  Revision    Changes     Path
  1.4         +5  -31     ossp-pkg/ossp-cvs/lib/regex.c
____________________________________________________________________________

--LBT26W69VOAOSQ8OXYAT
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/lib/regex.c
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/lib/regex.c
============================================================
$ cvs diff -u -r1.3 -r1.4 regex.c
--- ossp-pkg/ossp-cvs/lib/regex.c	2000/06/20 14:25:09	1.3
+++ ossp-pkg/ossp-cvs/lib/regex.c	2000/06/20 14:38:50	1.4
@@ -1534,7 +1534,6 @@
 static void insert_op1 (), insert_op2 ();
 static boolean at_begline_loc_p (), at_endline_loc_p ();
 static boolean group_in_compile_stack ();
-static reg_errcode_t compile_range ();
 
 /* Fetch the next character in the uncompiled pattern---translating it
    if necessary.  Also cast from a signed character in the constant
@@ -2352,7 +2351,6 @@
 			   Split that into two ranges,,
 			   the low one ending at 0237, and the high one
 			   starting at ...040.  */
-			int c1_base = (c1 & ~0177) | 040;
 			SET_RANGE_TABLE_WORK_AREA (range_table_work, c, c1);
 			c1 = 0237;
 		      }
@@ -2514,11 +2512,12 @@
 	    case ')':
 	      if (syntax & RE_NO_BK_PARENS) goto normal_backslash;
 
-	      if (COMPILE_STACK_EMPTY)
+	      if (COMPILE_STACK_EMPTY) {
 		if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD)
 		  goto normal_backslash;
 		else
 		  FREE_STACK_RETURN (REG_ERPAREN);
+              }
 
 	    handle_close:
 	      if (fixup_alt_jump)
@@ -2534,11 +2533,12 @@
 		}
 
 	      /* See similar code for backslashed left paren above.  */
-	      if (COMPILE_STACK_EMPTY)
+	      if (COMPILE_STACK_EMPTY) {
 		if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD)
 		  goto normal_char;
 		else
 		  FREE_STACK_RETURN (REG_ERPAREN);
+              }
 
 	      /* Since we just checked for an empty stack above, this
 		 ``can't happen''.  */
@@ -3173,15 +3173,13 @@
 re_compile_fastmap (bufp)
      struct re_pattern_buffer *bufp;
 {
-  int i, j, k;
+  int j, k;
 #ifdef MATCH_MAY_ALLOCATE
   fail_stack_type fail_stack;
 #endif
 #ifndef REGEX_MALLOC
   char *destination;
 #endif
-  /* We don't push any register information onto the failure stack.  */
-  unsigned num_regs = 0;
 
   register char *fastmap = bufp->fastmap;
   unsigned char *pattern = bufp->buffer;
@@ -3189,10 +3187,6 @@
   unsigned char *p = pattern;
   register unsigned char *pend = pattern + size;
 
-  /* This holds the pointer to the failure stack, when
-     it is allocated relocatably.  */
-  fail_stack_elt_t *failure_stack_ptr;
-
   /* Assume that each path through the pattern can be null until
      proven otherwise.	We set this false at the bottom of switch
      statement, to which we get only if a particular path doesn't
@@ -3842,10 +3836,6 @@
 	    }
 	  else				/* Searching backwards.	 */
 	    {
-	      int room = (size1 == 0 || startpos >= size1
-			  ? size2 + size1 - startpos
-			  : size1 - startpos);
-
 	      buf_ch = STRING_CHAR (d, room);
 	      if (RE_TRANSLATE_P (translate))
 		buf_ch = RE_TRANSLATE (translate, buf_ch);
@@ -3883,10 +3873,6 @@
 	  /* Update STARTPOS to the next character boundary.  */
 	  if (multibyte)
 	    {
-	      const unsigned char *p
-		= (const unsigned char *) POS_ADDR_VSTRING (startpos);
-	      const unsigned char *pend
-		= (const unsigned char *) STOP_ADDR_VSTRING (startpos);
 	      int len = MULTIBYTE_FORM_LENGTH (p, pend - p);
 
 	      range -= len;
@@ -4157,10 +4143,6 @@
   unsigned nfailure_points_pushed = 0, nfailure_points_popped = 0;
 #endif
 
-  /* This holds the pointer to the failure stack, when
-     it is allocated relocatably.  */
-  fail_stack_elt_t *failure_stack_ptr;
-
   /* We fill all the registers internally, independent of what we
      return, for use in backreferences.	 The number here includes
      an element for register zero.  */
@@ -5389,8 +5371,6 @@
 	      /* C1 is the character before D, S1 is the syntax of C1, C2
 		 is the character at D, and S2 is the syntax of C2.  */
 	      int c1, c2, s1, s2;
-	      int pos1 = PTR_TO_OFFSET (d - 1);
-	      int charpos;
 
 	      GET_CHAR_BEFORE_2 (c1, d, string1, end1, string2, end2);
 	      GET_CHAR_AFTER_2 (c2, d, string1, end1, string2, end2);
@@ -5426,8 +5406,6 @@
 	      /* C1 is the character before D, S1 is the syntax of C1, C2
 		 is the character at D, and S2 is the syntax of C2.  */
 	      int c1, c2, s1, s2;
-	      int pos1 = PTR_TO_OFFSET (d - 1);
-	      int charpos;
 
 	      GET_CHAR_BEFORE_2 (c1, d, string1, end1, string2, end2);
 	      GET_CHAR_AFTER_2 (c2, d, string1, end1, string2, end2);
@@ -5463,8 +5441,6 @@
 	      /* C1 is the character before D, S1 is the syntax of C1, C2
 		 is the character at D, and S2 is the syntax of C2.  */
 	      int c1, c2, s1, s2;
-	      int pos1 = PTR_TO_OFFSET (d);
-	      int charpos;
 
 	      GET_CHAR_AFTER_2 (c2, d, string1, end1, string2, end2);
 #ifdef emacs
@@ -5507,8 +5483,6 @@
 	      /* C1 is the character before D, S1 is the syntax of C1, C2
 		 is the character at D, and S2 is the syntax of C2.  */
 	      int c1, c2, s1, s2;
-	      int pos1 = PTR_TO_OFFSET (d);
-	      int charpos;
 
 	      GET_CHAR_BEFORE_2 (c1, d, string1, end1, string2, end2);
 #ifdef emacs
--LBT26W69VOAOSQ8OXYAT--


From ossp-cvs-owner@ossp.org  Wed Jun 21 09:52:17 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5L7qGH78272; Wed, 21 Jun 2000 09:52:16 +0200 (CEST)
Date: Wed, 21 Jun 2000 09:52:16 +0200 (CEST)
Message-Id: <200006210752.e5L7qGH78272@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="AT9DHHFXIIB9T7P9TI51"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--AT9DHHFXIIB9T7P9TI51
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: CVSROOT                          Date:   21-Jun-2000 09:52:16
Branch: HEAD                             Handle: 2000062108521500

Modified files:
  CVSROOT                 modules

Log:
  Remove duplicate key

Summary:
  Revision    Changes     Path
  1.17        +0  -1      CVSROOT/modules
____________________________________________________________________________

--AT9DHHFXIIB9T7P9TI51
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to CVSROOT/modules
Content-Disposition: attachment

Index: CVSROOT/modules
============================================================
$ cvs diff -u -r1.16 -r1.17 modules
--- CVSROOT/modules	2000/06/18 14:32:43	1.16
+++ CVSROOT/modules	2000/06/21 07:52:15	1.17
@@ -46,7 +46,6 @@
 modules         CVSROOT modules      
 notify          CVSROOT notify       
 rcsinfo         CVSROOT rcsinfo      
-shiela          CVSROOT shiela       
 shiela.cfg      CVSROOT shiela.cfg   
 shiela.msg      CVSROOT shiela.msg   
 taginfo         CVSROOT taginfo      
--AT9DHHFXIIB9T7P9TI51--


From ossp-cvs-owner@ossp.org  Wed Jun 21 11:14:59 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5L9EwJ84609; Wed, 21 Jun 2000 11:14:58 +0200 (CEST)
Date: Wed, 21 Jun 2000 11:14:58 +0200 (CEST)
Message-Id: <200006210914.e5L9EwJ84609@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ossp-cvs .cvsignore COPYING COPYING.LIB ChangeLog...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   21-Jun-2000 11:14:58
  Branch: vendor                           Handle: 1970010101000000

  Modified files:           (Branch: vendor)
    ossp-pkg/ossp-cvs/src   root.c
  Touched files:            (Branch: vendor)
    ossp-pkg/ossp-cvs       .cvsignore COPYING COPYING.LIB ChangeLog.zoo
                            INSTALL Makefile.in NEWS README acconfig.h
                            config.h.in configure configure.in
    ossp-pkg/ossp-cvs/diff  .cvsignore Makefile.in analyze.c cmpbuf.c cmpbuf.h
                            context.c diagmeet.note diff.c diff.h diff3.c
                            diffrun.h dir.c ed.c ifdef.c io.c normal.c side.c
                            system.h util.c version.c
    ossp-pkg/ossp-cvs/doc   .cvsignore FAQ HACKING Makefile.in RCSFILES TESTS
                            TODO cvs-paper.ms cvs.texinfo cvsclient.texi
    ossp-pkg/ossp-cvs/lib   .cvsignore Makefile.in argmatch.c dup2.c fncase.c
                            fnmatch.c fnmatch.h ftruncate.c getdate.c
                            getdate.y getline.c getline.h getopt.c getopt.h
                            getopt1.c hostname.c md5.c md5.h memmove.c mkdir.c
                            regex.c regex.h rename.c savecwd.c savecwd.h
                            sighandle.c strerror.c stripslash.c strstr.c
                            strtoul.c system.h valloc.c wait.h waitpid.c
                            xgetwd.c yesno.c
    ossp-pkg/ossp-cvs/man   .cvsignore Makefile.in cvs.1 cvs.5
    ossp-pkg/ossp-cvs/src   .cvsignore Makefile.in add.c admin.c buffer.c
                            buffer.h checkin.c checkout.c classify.c client.c
                            client.h commit.c create_adm.c cvs.h cvsrc.c
                            diff.c edit.c edit.h entries.c error.c error.h
                            expand_path.c fileattr.c fileattr.h filesubr.c
                            find_names.c hardlink.c hardlink.h hash.c hash.h
                            history.c ignore.c import.c lock.c log.c login.c
                            logmsg.c main.c mkmodules.c modules.c myndbm.c
                            myndbm.h no_diff.c options.h.in parseinfo.c
                            patch.c rcs.c rcs.h rcscmds.c recurse.c release.c
                            remove.c repos.c rtag.c run.c sanity.sh scramble.c
                            server.c server.h status.c subr.c tag.c update.c
                            update.h vers_ts.c version.c watch.c watch.h
                            wrapper.c zlib.c
    ossp-pkg/ossp-cvs/zlib  .cvsignore Makefile.in README adler32.c
                            algorithm.doc compress.c crc32.c deflate.c
                            deflate.h gzio.c infblock.c infblock.h infcodes.c
                            infcodes.h inffast.c inffast.h inflate.c
                            inftrees.c inftrees.h infutil.c infutil.h trees.c
                            uncompr.c zconf.h zlib.h zutil.c zutil.h

  Log:
    Import vendor CVS, snapshot 20000621
    
    [Release Tags: CVS_20000621]

  Summary:
    Revision    Changes     Path
    1.1.1.3     +0  -0      ossp-pkg/ossp-cvs/src/root.c
  ____________________________________________________________________________

  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/root.c?cvsroot=ossp&r1=1.1.1.2&r2=1.1.1.3

From ossp-cvs-owner@ossp.org  Wed Jun 21 11:27:01 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5L9R0g85480; Wed, 21 Jun 2000 11:27:00 +0200 (CEST)
Date: Wed, 21 Jun 2000 11:27:00 +0200 (CEST)
Message-Id: <200006210927.e5L9R0g85480@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="G4CTXS1XK745R7T7UUBF"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ossp-cvs/src root.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--G4CTXS1XK745R7T7UUBF
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: ossp-pkg                         Date:   21-Jun-2000 11:27:00
Branch: HEAD                             Handle: 2000062110270000

Modified files:
  ossp-pkg/ossp-cvs/src   root.c

Log:
  Merge in conflicts

Summary:
  Revision    Changes     Path
  1.4         +2  -2      ossp-pkg/ossp-cvs/src/root.c
____________________________________________________________________________

--G4CTXS1XK745R7T7UUBF
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/src/root.c
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/src/root.c
============================================================
$ cvs diff -u -r1.3 -r1.4 root.c
--- ossp-pkg/ossp-cvs/src/root.c	2000/06/20 14:25:12	1.3
+++ ossp-pkg/ossp-cvs/src/root.c	2000/06/21 09:27:00	1.4
@@ -475,8 +475,8 @@
 
 	if ((p = strchr (cvsroot_copy, '@')) != NULL)
 	{
-	    CVSroot_username = xstrdup (cvsroot_copy);
 	    *p = '\0';
+	    CVSroot_username = xstrdup (cvsroot_copy);
 	    cvsroot_copy = ++p;
 	    if (*CVSroot_username == '\0')
 		CVSroot_username = NULL;
@@ -484,8 +484,8 @@
 
 	if ((p = strchr (cvsroot_copy, ':')) != NULL)
 	{
-	    CVSroot_hostname = xstrdup (cvsroot_copy);
 	    *p = '\0';
+	    CVSroot_hostname = xstrdup (cvsroot_copy);
 	    cvsroot_copy = ++p;
       
 	    if (*CVSroot_hostname == '\0')
--G4CTXS1XK745R7T7UUBF--


From ossp-cvs-owner@ossp.org  Wed Jun 21 11:46:05 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5L9k4G86854; Wed, 21 Jun 2000 11:46:04 +0200 (CEST)
Date: Wed, 21 Jun 2000 11:46:04 +0200 (CEST)
Message-Id: <200006210946.e5L9k4G86854@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="X5CBXCXSUAEDYLJIG629"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ossp-cvs/lib regex.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--X5CBXCXSUAEDYLJIG629
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: ossp-pkg                         Date:   21-Jun-2000 11:46:04
Branch: HEAD                             Handle: 2000062110460300

Modified files:
  ossp-pkg/ossp-cvs/lib   regex.c

Log:
  Fix warning

Summary:
  Revision    Changes     Path
  1.5         +0  -1      ossp-pkg/ossp-cvs/lib/regex.c
____________________________________________________________________________

--X5CBXCXSUAEDYLJIG629
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/lib/regex.c
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/lib/regex.c
============================================================
$ cvs diff -u -r1.4 -r1.5 regex.c
--- ossp-pkg/ossp-cvs/lib/regex.c	2000/06/20 14:38:50	1.4
+++ ossp-pkg/ossp-cvs/lib/regex.c	2000/06/21 09:46:03	1.5
@@ -1286,7 +1286,6 @@
 
 #define PUSH_FAILURE_POINT(pattern_place, string_place, failure_code)	\
   do {									\
-    char *destination;							\
     /* Must be int, so when we don't save any registers, the arithmetic	\
        of 0 + -1 isn't done as unsigned.  */				\
     int this_reg;							\
--X5CBXCXSUAEDYLJIG629--


From ossp-cvs-owner@ossp.org  Thu Jun 22 15:13:16 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5MDDEi50071; Thu, 22 Jun 2000 15:13:14 +0200 (CEST)
Date: Thu, 22 Jun 2000 15:13:14 +0200 (CEST)
Message-Id: <200006221313.e5MDDEi50071@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="NH3NU9BGT6CUC21LP7GX"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ossp-cvs/src cvs.h main.c options.h.in root.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--NH3NU9BGT6CUC21LP7GX
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: ossp-pkg                         Date:   22-Jun-2000 15:13:14
Branch: HEAD                             Handle: 2000062214131200

Modified files:
  ossp-pkg/ossp-cvs/src   cvs.h main.c options.h.in root.c

Log:
  Add new "cvs root" stuff.

Summary:
  Revision    Changes     Path
  1.15        +18 -0      ossp-pkg/ossp-cvs/src/cvs.h
  1.17        +99 -2      ossp-pkg/ossp-cvs/src/main.c
  1.26        +1  -0      ossp-pkg/ossp-cvs/src/options.h.in
  1.5         +452 -0     ossp-pkg/ossp-cvs/src/root.c
____________________________________________________________________________

--NH3NU9BGT6CUC21LP7GX
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/src/cvs.h
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/src/cvs.h
============================================================
$ cvs diff -u -r1.14 -r1.15 cvs.h
--- ossp-pkg/ossp-cvs/src/cvs.h	2000/06/15 06:44:45	1.14
+++ ossp-pkg/ossp-cvs/src/cvs.h	2000/06/22 13:13:12	1.15
@@ -500,6 +500,21 @@
 int root_map_it PROTO ((char *, char **, int));
 #endif
 
+#ifdef OSSP_PATCH_CVSROOT
+typedef struct {
+    char *nickname;
+    char *masterpath;
+    char *slavepath;
+    char *syncprog;
+} cvsroot_t;
+char *cvsroot_filename(void);
+void cvsroot_free(cvsroot_t *);
+cvsroot_t *cvsroot_entry_read(FILE *);
+void cvsroot_entry_write(FILE *, cvsroot_t *);
+cvsroot_t *cvsroot_lookup(char *, char *, char *);
+void cvsroot_synchronize(cvsroot_t *, int);
+#endif
+
 char *gca PROTO((const char *rev1, const char *rev2));
 extern void check_numeric PROTO ((const char *, int, char **));
 char *getcaller PROTO((void));
@@ -891,6 +906,9 @@
 int unedit PROTO ((int argc, char **argv));
 int editors PROTO ((int argc, char **argv));
 int watchers PROTO ((int argc, char **argv));
+#ifdef OSSP_PATCH_CVSROOT
+int root PROTO ((int argc, char **argv));
+#endif
 #ifdef OSSP_PATCH_PSERVERD
 int pserverd PROTO ((int argc, char **argv));
 int pserver_daemon PROTO ((int argc, char **argv));

--NH3NU9BGT6CUC21LP7GX
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/src/main.c
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/src/main.c
============================================================
$ cvs diff -u -r1.16 -r1.17 main.c
--- ossp-pkg/ossp-cvs/src/main.c	2000/06/20 14:25:12	1.16
+++ ossp-pkg/ossp-cvs/src/main.c	2000/06/22 13:13:12	1.17
@@ -150,6 +150,9 @@
     { "update",   "up",       "upd",       update },
     { "watch",    NULL,	      NULL,	   watch },
     { "watchers", NULL,	      NULL,	   watchers },
+#ifdef OSSP_PATCH_CVSROOT
+    { "root",     "ro",	      "repo",	   root },
+#endif
     { NULL, NULL, NULL, NULL },
 };
 
@@ -286,6 +289,9 @@
     "        update       Bring work tree in sync with repository\n",
     "        watch        Set watches\n",
     "        watchers     See who is watching a file\n",
+#ifdef OSSP_PATCH_CVSROOT
+    "        root         Maintain repository root locations\n",
+#endif
     "(Specify the --help option for a list of other help options)\n",
     NULL,
 };
@@ -441,6 +447,14 @@
     }
 #endif
 
+#ifdef OSSP_PATCH_CVSROOT
+    if (strcmp (cmd_name, "root") == 0) {
+        ret |= CVS_CMD_IGNORE_ADMROOT;
+        ret &= ~(CVS_CMD_USES_WORK_DIR);
+        ret &= ~(CVS_CMD_MODIFIES_REPOSITORY);
+    }
+#endif
+
     return ret;
 }
 
@@ -507,6 +521,9 @@
     int free_CVSroot = 0;
     int free_Editor = 0;
     int free_Tmpdir = 0;
+#ifdef OSSP_PATCH_CVSROOT
+    cvsroot_t *cvsroot_sync = NULL;
+#endif
 
     int help = 0;		/* Has the user asked for help?  This
 				   lets us support the `cvs -H cmd'
@@ -775,6 +792,8 @@
 		free_Editor = 1;
 		break;
 	    case 'd':
+		if (CVSroot_cmdline != NULL)
+		    free (CVSroot_cmdline);
 #ifdef OSSP_PATCH_MAPROOT
                 {
                     char *newarg;
@@ -782,10 +801,24 @@
                         optarg = newarg;
                 }
 #endif
-		if (CVSroot_cmdline != NULL)
-		    free (CVSroot_cmdline);
+#ifdef OSSP_PATCH_CVSROOT
+                {
+                    cvsroot_t *e;
+                    if ((e = cvsroot_lookup(optarg, NULL, NULL)) != NULL) {
+                        if (!quiet)
+                            fprintf(stderr, "%s: using repository `%s'\n", program_name, e->masterpath);
+		        CVSroot_cmdline = xstrdup(e->masterpath);
+		        CVSroot = xstrdup(e->masterpath);
+                        cvsroot_free(e);
+                    }
+                    else {
+#endif
 		CVSroot_cmdline = xstrdup (optarg);
 		CVSroot = xstrdup (optarg);
+#ifdef OSSP_PATCH_CVSROOT
+                    }
+                }
+#endif
 		free_CVSroot = 1;
 		cvs_update_env = 1;	/* need to update environment */
 		break;
@@ -1046,6 +1079,12 @@
 	server_active = strcmp (command_name, "server") == 0;
 #endif
 
+#ifdef OSSP_PATCH_CVSROOT
+    if (strcmp(command_name, "root") == 0) {
+        server_active = 1;
+    }
+#endif
+
 	/* This is only used for writing into the history file.  For
 	   remote connections, it might be nice to have hostname
 	   and/or remote path, on the other hand I'm not sure whether
@@ -1176,6 +1215,54 @@
 		error (1, 0,
 		       "CVS/Root file (if any).");
 	    }
+
+#ifdef OSSP_PATCH_CVSROOT
+            if (CVSroot_cmdline == NULL) {
+                cvsroot_t *e;
+                if (lookup_command_attribute(command_name) & CVS_CMD_MODIFIES_REPOSITORY) {
+                    if ((e = cvsroot_lookup(NULL, NULL, CVSroot)) != NULL) {
+                        /* command modifies repository and we still operare on
+                           the slave repository, so switch to the master repository, 
+                           because we can only perform modifications there. */
+                        if (!quiet) {
+                            fprintf(stderr, "%s: switching to MASTER location of repository `%s'\n", program_name, e->nickname);
+                            fprintf(stderr, "%s: %s <-- %s\n", program_name, e->masterpath, e->slavepath);
+                        }
+                        if (free_CVSroot)
+                            free(CVSroot);
+                        CVSroot = xstrdup(e->masterpath);
+		        if (CVSroot_cmdline != NULL)
+		            free(CVSroot_cmdline);
+                        CVSroot_cmdline = xstrdup(e->masterpath);
+                        cvsroot_sync = e;
+                        free_CVSroot = 1;
+                        cvs_update_env = 1;
+                    }
+                }
+                else {
+                    if ((e = cvsroot_lookup(NULL, CVSroot, NULL)) != NULL) {
+                        if (e->slavepath[0] != '\0') { 
+                            /* command does not modify repository and we still operare on
+                               the master repository, so switch to the slave repository, 
+                               because it is faster per definition. */
+                            if (!quiet) {
+                                fprintf(stderr, "%s: switching to SLAVE location of repository `%s'\n", program_name, e->nickname);
+                                fprintf(stderr, "%s: %s --> %s\n", program_name, e->masterpath, e->slavepath);
+                            }
+                            if (free_CVSroot)
+                                free(CVSroot);
+                            CVSroot = xstrdup(e->slavepath);
+                            if (CVSroot_cmdline != NULL)
+                                free(CVSroot_cmdline);
+                            CVSroot_cmdline = xstrdup(e->slavepath);
+                            cvsroot_free(e);
+                            free_CVSroot = 1;
+                            cvs_update_env = 1;
+                        }
+                    }
+                }
+            }
+#endif /* OSSP_PATCH_CVSROOT */
 	}
 
 	/* Here begins the big loop over unique cvsroot values.  We
@@ -1253,7 +1340,12 @@
 		    {
 			save_errno = errno;
 			/* If this is "cvs init", the root need not exist yet.  */
+#ifdef OSSP_PATCH_CVSROOT
+			if (strcmp (command_name, "init") != 0 &&
+			    strcmp (command_name, "root") != 0) 
+#else
 			if (strcmp (command_name, "init") != 0)
+#endif
 			{
 			    error (1, save_errno, "%s", path);
 			}
@@ -1381,6 +1473,11 @@
 	      break;
 #endif
 	} /* end of loop for cvsroot values */
+
+#ifdef OSSP_PATCH_CVSROOT
+        if (cvsroot_sync != NULL)
+            cvsroot_synchronize(cvsroot_sync, 0);
+#endif
 
     } /* end of stuff that gets done if the user DOESN'T ask for help */
 

--NH3NU9BGT6CUC21LP7GX
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/src/options.h.in
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/src/options.h.in
============================================================
$ cvs diff -u -r1.25 -r1.26 options.h.in
--- ossp-pkg/ossp-cvs/src/options.h.in	2000/06/12 16:42:38	1.25
+++ ossp-pkg/ossp-cvs/src/options.h.in	2000/06/22 13:13:12	1.26
@@ -204,6 +204,7 @@
  */
 #ifdef OSSP_PATCHES
 #define OSSP_PATCH_CVSRC 
+#define OSSP_PATCH_CVSROOT
 #define OSSP_PATCH_GLOBALOPTION 
 #define OSSP_PATCH_GLOBALOPTION_PARTLY
 #define OSSP_PATCH_CUSTOMCMD

--NH3NU9BGT6CUC21LP7GX
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/src/root.c
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/src/root.c
============================================================
$ cvs diff -u -r1.4 -r1.5 root.c
--- ossp-pkg/ossp-cvs/src/root.c	2000/06/21 09:27:00	1.4
+++ ossp-pkg/ossp-cvs/src/root.c	2000/06/22 13:13:12	1.5
@@ -674,3 +674,455 @@
    /* NOTREACHED */
 }
 #endif
+
+#ifdef OSSP_PATCH_CVSROOT
+
+#include <string.h>
+
+#ifndef CVS_ROOT_FILE 
+#define CVS_ROOT_FILE ".cvsroot"
+#endif
+
+char *
+cvsroot_filename(
+    void)
+{
+    char *homedir;
+    char *rootfile;
+
+    /* Environment should override file. */
+    if ((rootfile = getenv("CVS_ROOTFILE")) != NULL)
+        return xstrdup(rootfile);
+
+    /* Construct absolute pathname to user's password file. */
+    if ((homedir = get_homedir()) == NULL) {
+        error(1, 0, "could not find out home directory");
+        return NULL;
+    }
+    rootfile = (char *)xmalloc(strlen(homedir)+strlen(CVS_ROOT_FILE)+3);
+    strcpy(rootfile, homedir);
+    strcat(rootfile, "/");
+    strcat(rootfile, CVS_ROOT_FILE);
+    return rootfile;
+}
+
+void cvsroot_free(
+    cvsroot_t *e)
+{
+    if (e != NULL) {
+        if (e->nickname != NULL)
+            free(e->nickname);
+        if (e->masterpath != NULL)
+            free(e->masterpath);
+        if (e->slavepath != NULL)
+            free(e->slavepath);
+        if (e->syncprog != NULL)
+            free(e->syncprog);
+        free(e);
+    }
+    return;
+}
+
+cvsroot_t *
+cvsroot_entry_read(
+    FILE *fp)
+{
+    cvsroot_t *e;
+    char *nickname;
+    char *masterpath;
+    char *slavepath;
+    char *syncprog;
+    char *line;
+    int line_length;
+    size_t line_chars_allocated;
+    size_t n;
+
+    e = NULL;
+    line = NULL;
+    line_chars_allocated = 0;
+    while ((line_length = getline(&line, &line_chars_allocated, fp)) >= 0) {
+        /* parse line */
+        line += strspn(line, " \t\n");
+        if (line[0] == '#')
+            continue;
+        nickname = line;
+        if ((n = strcspn(line, " \t\n")) == 0)
+            return NULL;
+        line += n;
+        *line++ = '\0';
+        line += strspn(line, " \t");
+        masterpath = line;
+        if ((n = strcspn(line, " \t\n")) == 0)
+            return NULL;
+        line += n;
+        *line++ = '\0';
+        line += strspn(line, " \t\n");
+        slavepath = "";
+        syncprog = "";
+        if (line[0] != '\0') {
+            slavepath = line;
+            n = strcspn(line, " \t\n");
+            line += n;
+            *line++ = '\0';
+            if (line[0] != '\0') {
+                syncprog = line;
+                n = strcspn(line, " \t\n");
+                line += n;
+                *line++ = '\0';
+            }
+        }
+        e = (cvsroot_t *)xmalloc(sizeof(cvsroot_t));
+        e->nickname   = xstrdup(nickname);
+        e->masterpath = xstrdup(masterpath);
+        e->slavepath  = xstrdup(slavepath);
+        e->syncprog   = xstrdup(syncprog);
+        break;
+    }
+    return e;
+}
+
+void 
+cvsroot_entry_write(
+    FILE *fp, 
+    cvsroot_t *e)
+{
+    if (fp != NULL && e != NULL) {
+        fprintf(fp, "%s %s", 
+                e->nickname, e->masterpath);
+        if (e->slavepath[0] != '\0') 
+            fprintf(fp, " %s", e->slavepath);
+        if (e->syncprog[0] != '\0') 
+            fprintf(fp, " %s", e->syncprog);
+        fprintf(fp, "\n");
+    }
+    return;
+}
+
+cvsroot_t *
+cvsroot_lookup(
+    char *by_nickname, 
+    char *by_masterpath, 
+    char *by_slavepath)
+{
+    char *rootfile;
+    cvsroot_t *e = NULL;
+    FILE *fp;
+
+    if ((rootfile = cvsroot_filename()) == NULL)
+        return NULL;
+    if ((fp = fopen(rootfile, "r")) == NULL) {
+        free(rootfile);
+        return NULL;
+    }
+    while ((e = cvsroot_entry_read(fp)) != NULL) {
+        if (   (by_nickname   != NULL && strcmp(e->nickname,   by_nickname)   == 0)
+            || (by_masterpath != NULL && strcmp(e->masterpath, by_masterpath) == 0)
+            || (by_slavepath  != NULL && strcmp(e->slavepath,  by_slavepath)  == 0))
+            break;
+        cvsroot_free(e);
+    }
+    fclose(fp);
+    free(rootfile);
+    return e;
+}
+
+void 
+cvsroot_synchronize(
+    cvsroot_t *e,
+    int force)
+{
+    char *cmd;
+    char *arg;
+    char *rsh;
+    int smart;
+    char *syncprog;
+
+    smart = 0;
+    syncprog = e->syncprog;
+    if (syncprog[0] == '-') {
+        smart++;
+        syncprog++;
+    }
+    if (smart && !force) {
+        if (strcasecmp(syncprog, "manual") == 0) {
+            fprintf(stderr, "%s: synchronize SLAVE with MASTER of repository `%s', please!\n", program_name, e->nickname);
+        }
+        else {
+            fprintf(stderr, "%s: synchronize SLAVE with MASTER of repository `%s'\n", program_name, e->nickname);
+            fprintf(stderr, "%s: by running the command `%s root -s %s', please.\n", program_name, program_name, e->nickname);
+        }
+        return;
+    }
+
+    if (strcasecmp(syncprog, "manual") == 0) {
+        if (!really_quiet) {
+            fprintf(stderr, "%s: synchronizing SLAVE with MASTER of repository `%s'\n", program_name, e->nickname);
+            fprintf(stderr, "%s: has to be performed manually by you!\n", program_name);
+        }
+    }
+    else if (strcasecmp(syncprog, "rsync") == 0 ||
+             strncasecmp(syncprog, "rsync:", 6) == 0) {
+        if (!really_quiet) {
+            fprintf(stderr, "%s: synchronizing SLAVE with MASTER of repository `%s':\n", program_name, e->nickname);
+            fprintf(stderr, "%s: %s --> %s (rsync)\n", program_name, e->masterpath, e->slavepath);
+        }
+        run_setup("rsync");
+        if (!quiet)
+            run_arg("-v");
+        if ((rsh = getenv("CVS_RSH")) != NULL) {
+            arg = xmalloc(strlen(rsh)+7);
+            strcpy(arg, "--rsh=");
+            strcat(arg, rsh);
+            run_arg(arg);
+            free(arg);
+        }
+        run_arg("-rlpt");
+        run_arg("--delete");
+        if (strncasecmp(syncprog, "rsync:", 6) == 0) {
+            char *list = xstrdup(syncprog+6);
+            for (arg = strtok(list, ","); arg != NULL; arg = strtok(NULL, ",")) {
+                if (arg[0] == '!') {
+                    run_arg("--exclude");
+                    run_arg(arg+1);
+                }
+                else {
+                    run_arg("--include");
+                    run_arg(arg);
+                }
+            }
+            free(list);
+        }
+        arg = xmalloc(strlen(e->masterpath)+2);
+        strcpy(arg, e->masterpath);
+        strcat(arg, "/");
+        run_arg(arg);
+        free(arg);
+        arg = xmalloc(strlen(e->slavepath)+2);
+        strcpy(arg, e->slavepath);
+        strcat(arg, "/");
+        run_arg(arg);
+        free(arg);
+        if (trace) {
+            cvs_output(program_name, 0);
+            cvs_output(" ", 1);
+            cvs_output(command_name, 0);
+            cvs_output(": Executing ", 0);
+            run_print(stdout);
+            cvs_output("\n", 0);
+        }
+        if (run_exec(RUN_TTY, RUN_TTY, RUN_TTY, RUN_NORMAL) != 0)
+            error(1, 0, "synchronization program `rsync' returned non-zero");
+    }
+    else {
+        if (!really_quiet) {
+            fprintf(stderr, "%s: synchronizing SLAVE with MASTER of repository `%s':\n", program_name, e->nickname);
+            fprintf(stderr, "%s: %s --> %s (%s)\n", program_name, e->masterpath, e->slavepath, e->syncprog);
+        }
+        cmd = expand_path(syncprog, "sync", 0);
+        run_setup(cmd);
+        run_arg(e->nickname);
+        run_arg(e->masterpath);
+        run_arg(e->slavepath);
+        if (trace) {
+            cvs_output(program_name, 0);
+            cvs_output(" ", 1);
+            cvs_output(command_name, 0);
+            cvs_output(": Executing ", 0);
+            run_print(stdout);
+            cvs_output("\n", 0);
+        }
+        if (run_exec(RUN_TTY, RUN_TTY, RUN_TTY, RUN_NORMAL) != 0)
+            error(1, 0, "synchronization program `%s' returned non-zero", cmd);
+        free(cmd);
+    }
+}
+
+static const char *const root_usage[] = {
+    "Usage: %s %s [-v] -e|-E|-l|s [arg ...]\n",
+    "Options:\n",
+    " -v  Verbose mode.\n",
+    " -e  Edit entry from ~/.cvsroot in batch mode.\n",
+    " -E  Edit entry from ~/.cvsroot in visual mode.\n",
+    " -l  List entries from ~/.cvsroot.\n",
+    " -s  Synchronize entries from ~/.cvsroot.\n",
+    "Synopsis:\n",
+    " Add/Modify an entry:\n",
+    "  cvs root -e nickname masterpath [slavepath [syncprog]]\n",
+    " Delete an entry:\n",
+    "  cvs root -e nickname\n",
+    " List all or some particular entries:\n",
+    "  cvs [-Q] [-q] root [-v] -l [nickname ...]\n",
+    " Synchronize all or some particular entries:\n",
+    "  cvs [-Q] [-q] root -s [nickname ...]\n",
+    "(Specify the --help global option for a list of other help options)\n",
+    NULL
+};
+
+int
+root(
+    int argc,
+    char **argv)
+{
+    enum { 
+        ROOT_MODE_UNKNOWN, 
+        ROOT_MODE_EDIT_CMDLINE, 
+        ROOT_MODE_EDIT_VISUAL, 
+        ROOT_MODE_LIST, 
+        ROOT_MODE_SYNC 
+    };
+    int mode = ROOT_MODE_UNKNOWN;
+    char *rootfile;
+    char *rootfilebak;
+    FILE *fp;
+    FILE *fpbak;
+    int option;
+    cvsroot_t *e;
+    cvsroot_t E;
+    int doit;
+    int i;
+    int rc;
+    int verbose = 0;
+    int found;
+
+    if (argc == -1)
+        usage(root_usage);
+    optind = 0;
+    while ((option = getopt(argc, argv, "veEsl")) != EOF) {
+        switch ((char)option) {
+            case 'v':
+                verbose = 1;
+                break;
+            case 'e':
+                mode = ROOT_MODE_EDIT_CMDLINE;
+                break;
+            case 'E':
+                mode = ROOT_MODE_EDIT_VISUAL;
+                break;
+            case 'l':
+                mode = ROOT_MODE_LIST;
+                break;
+            case 's':
+                mode = ROOT_MODE_SYNC;
+                break;
+            case '?':
+            default:
+                usage(root_usage);
+                break;
+        }
+    }
+    argc -= optind;
+    argv += optind;
+    if (mode == ROOT_MODE_UNKNOWN)
+        error(1, 0, "exactly one of the -e, -E, -l or -s options have to given");
+
+    if (mode == ROOT_MODE_EDIT_CMDLINE) {
+        if (argc < 1 || argc > 4) 
+            error(1, 0, "option -e requires 1-4 arguments");
+        E.nickname = argv[0];
+        if (argc >= 2)
+            E.masterpath = argv[1];
+        else
+            E.masterpath = "";
+        if (argc >= 3)
+            E.slavepath = argv[2];
+        else
+            E.slavepath = "";
+        if (argc == 4)
+            E.syncprog = argv[3];
+        else
+            E.syncprog = "";
+        if ((rootfile = cvsroot_filename()) == NULL)
+            return 0;
+        rootfilebak = xmalloc(strlen(rootfile)+5);
+        strcpy(rootfilebak, rootfile);
+        strcat(rootfilebak, ".bak");
+        rename(rootfile, rootfilebak);
+        if ((fpbak = fopen(rootfilebak, "r")) == NULL) {
+            free(rootfile);
+            free(rootfilebak);
+            return 0;
+        }
+        if ((fp = fopen(rootfile, "w")) == NULL) {
+            fclose(fpbak);
+            free(rootfile);
+            free(rootfilebak);
+            return 0;
+        }
+        found = 0;
+        while ((e = cvsroot_entry_read(fpbak)) != NULL) {
+            if (strcmp(e->nickname, E.nickname) == 0) {
+                cvsroot_free(e);
+                found = 1;
+                break;
+            }
+            cvsroot_entry_write(fp, e);
+            cvsroot_free(e);
+        }
+        if (argc > 1)
+            cvsroot_entry_write(fp, &E);
+        if (found) {
+            while ((e = cvsroot_entry_read(fpbak)) != NULL) {
+                cvsroot_entry_write(fp, e);
+                cvsroot_free(e);
+            }
+        }
+        fclose(fpbak);
+        fclose(fp);
+    }
+    else if (mode == ROOT_MODE_EDIT_VISUAL) {
+        if (argc != 0) 
+            error(1, 0, "option -E requires no arguments");
+        if ((rootfile = cvsroot_filename()) == NULL)
+            return 0;
+        run_setup(Editor);
+        run_arg(rootfile);
+        if ((rc = run_exec(RUN_TTY, RUN_TTY, RUN_TTY, RUN_NORMAL|RUN_SIGIGNORE)) != 0)
+            error (1, rc == -1 ? errno : 0, "warning: editor session failed");
+    }
+    else if (mode == ROOT_MODE_LIST || mode == ROOT_MODE_SYNC) {
+        if ((rootfile = cvsroot_filename()) == NULL)
+            return 0;
+        if ((fp = fopen(rootfile, "r")) == NULL) {
+            free(rootfile);
+            return 0;
+        }
+        while ((e = cvsroot_entry_read(fp)) != NULL) {
+            doit = 0;
+            if (argc == 0)
+                doit = 1;
+            else {
+                for (i = 0; argv[i] != NULL; i++) {
+                    if (strcmp(argv[i], e->nickname) == 0) {
+                        doit = 1;
+                        break;
+                    }
+                }
+            }
+            if (doit) {
+                if (mode == ROOT_MODE_LIST) {
+                    if (verbose)
+                        fprintf(stdout, "Repository `%s':\n"
+                                        "  Master Path: %s\n"
+                                        "  Slave  Path: %s\n"
+                                        "  Synchronize: %s\n", 
+                                        e->nickname, e->masterpath, 
+                                        e->slavepath, e->syncprog);
+                    else
+                        fprintf(stdout, "%s %s %s %s\n",
+                                        e->nickname, e->masterpath, 
+                                        e->slavepath, e->syncprog);
+                }
+                else {
+                    cvsroot_synchronize(e, 1);
+                }
+            }
+            cvsroot_free(e);
+        }
+        fclose(fp);
+        free(rootfile);
+    }
+    return 0;
+}
+
+#endif /* OSSP_PATCH_CVSROOT */
+
--NH3NU9BGT6CUC21LP7GX--


From ossp-cvs-owner@ossp.org  Thu Jun 22 15:13:56 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5MDDtL50146; Thu, 22 Jun 2000 15:13:55 +0200 (CEST)
Date: Thu, 22 Jun 2000 15:13:55 +0200 (CEST)
Message-Id: <200006221313.e5MDDtL50146@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="HKEJ8284HXBXCAQ8S29G"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ossp-cvs README.OSSP
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--HKEJ8284HXBXCAQ8S29G
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: ossp-pkg                         Date:   22-Jun-2000 15:13:54
Branch: HEAD                             Handle: 2000062214135400

Modified files:
  ossp-pkg/ossp-cvs       README.OSSP

Log:
  *** empty log message ***

Summary:
  Revision    Changes     Path
  1.40        +25 -0      ossp-pkg/ossp-cvs/README.OSSP
____________________________________________________________________________

--HKEJ8284HXBXCAQ8S29G
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/README.OSSP
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/README.OSSP
============================================================
$ cvs diff -u -r1.39 -r1.40 README.OSSP
--- ossp-pkg/ossp-cvs/README.OSSP	2000/06/17 19:55:49	1.39
+++ ossp-pkg/ossp-cvs/README.OSSP	2000/06/22 13:13:54	1.40
@@ -42,6 +42,31 @@
     files.
     [Origin: Ralf S. Engelschall]
 
+  OSSP_PATCH_CVSROOT:
+    This adds support for a new dot-file ~/.cvsroot which is used
+    optionally by CVS. It can be used by the user to configure a
+    nickname for a CVS repository root (the master location) plus a
+    possibly existing local repository copy (the slave location). An
+    entry in ~/.cvsroot is of the format ``<nickname> <master-path>
+    [<slave-path> [<sync-prog>]]''. Those entries can be either created
+    manually in ~/.cvsroot or with the `cvs root -e' command.
+    
+    The idea is this: if a global `-d' option is used with <nickname> it is
+    automatically expanded to <master-path>. If no global `-d' option is used,
+    the CVS command is checked. If it is one of the commands which are known
+    to CVS to modify the repository, and the $CVSROOT or CVS/Root specify a
+    slave location, the repository is switched to the corresponding master
+    location (because modifications have to be performed there).  If the
+    command is one of the commands which are known to CVS to NOT modify the
+    repository, and the $CVSROOT or CVS/Root specify a master location, the
+    repository is switched to the corresponding slave location (because the
+    slave location is faster than the master location per definition).
+    
+    After a modifying operation, CVS can either run a synchronization job
+    automatically to bring slave in sync with master again or the user can run
+    `cvs root -s <nickname>' manually to perform this task.
+    [Origin: Ralf S. Engelschall]
+
   OSSP_PATCH_GLOBALOPTION:
   OSSP_PATCH_GLOBALOPTION_PARTLY:
     By default, global options in `.cvsrc' files are specified with a
--HKEJ8284HXBXCAQ8S29G--


From ossp-cvs-owner@ossp.org  Thu Jun 22 15:29:28 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5MDTRw51811; Thu, 22 Jun 2000 15:29:27 +0200 (CEST)
Date: Thu, 22 Jun 2000 15:29:27 +0200 (CEST)
Message-Id: <200006221329.e5MDTRw51811@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ossp-cvs .cvsignore COPYING COPYING.LIB ChangeLog...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   22-Jun-2000 15:29:27
  Branch: vendor                           Handle: 1970010101000000

  Modified files:           (Branch: vendor)
    ossp-pkg/ossp-cvs/src   client.c commit.c import.c log.c recurse.c
                            remove.c server.c
  Touched files:            (Branch: vendor)
    ossp-pkg/ossp-cvs       .cvsignore COPYING COPYING.LIB ChangeLog.zoo
                            INSTALL Makefile.in NEWS README acconfig.h
                            config.h.in configure configure.in
    ossp-pkg/ossp-cvs/diff  .cvsignore Makefile.in analyze.c cmpbuf.c cmpbuf.h
                            context.c diagmeet.note diff.c diff.h diff3.c
                            diffrun.h dir.c ed.c ifdef.c io.c normal.c side.c
                            system.h util.c version.c
    ossp-pkg/ossp-cvs/doc   .cvsignore FAQ HACKING Makefile.in RCSFILES TESTS
                            TODO cvs-paper.ms cvs.texinfo cvsclient.texi
    ossp-pkg/ossp-cvs/lib   .cvsignore Makefile.in argmatch.c dup2.c fncase.c
                            fnmatch.c fnmatch.h ftruncate.c getdate.c
                            getdate.y getline.c getline.h getopt.c getopt.h
                            getopt1.c hostname.c md5.c md5.h memmove.c mkdir.c
                            regex.c regex.h rename.c savecwd.c savecwd.h
                            sighandle.c strerror.c stripslash.c strstr.c
                            strtoul.c system.h valloc.c wait.h waitpid.c
                            xgetwd.c yesno.c
    ossp-pkg/ossp-cvs/man   .cvsignore Makefile.in cvs.1 cvs.5
    ossp-pkg/ossp-cvs/src   .cvsignore Makefile.in add.c admin.c buffer.c
                            buffer.h checkin.c checkout.c classify.c client.h
                            create_adm.c cvs.h cvsrc.c diff.c edit.c edit.h
                            entries.c error.c error.h expand_path.c fileattr.c
                            fileattr.h filesubr.c find_names.c hardlink.c
                            hardlink.h hash.c hash.h history.c ignore.c lock.c
                            login.c logmsg.c main.c mkmodules.c modules.c
                            myndbm.c myndbm.h no_diff.c options.h.in
                            parseinfo.c patch.c rcs.c rcs.h rcscmds.c
                            release.c repos.c root.c rtag.c run.c sanity.sh
                            scramble.c server.h status.c subr.c tag.c update.c
                            update.h vers_ts.c version.c watch.c watch.h
                            wrapper.c zlib.c
    ossp-pkg/ossp-cvs/zlib  .cvsignore Makefile.in README adler32.c
                            algorithm.doc compress.c crc32.c deflate.c
                            deflate.h gzio.c infblock.c infblock.h infcodes.c
                            infcodes.h inffast.c inffast.h inflate.c
                            inftrees.c inftrees.h infutil.c infutil.h trees.c
                            uncompr.c zconf.h zlib.h zutil.c zutil.h

  Log:
    Import vendor CVS, snapshot 20000622
    
    [Release Tags: CVS_20000622]

  Summary:
    Revision    Changes     Path
    1.1.1.5     +0  -0      ossp-pkg/ossp-cvs/src/client.c
    1.1.1.5     +0  -0      ossp-pkg/ossp-cvs/src/commit.c
    1.1.1.4     +0  -0      ossp-pkg/ossp-cvs/src/import.c
    1.1.1.4     +0  -0      ossp-pkg/ossp-cvs/src/log.c
    1.1.1.3     +0  -0      ossp-pkg/ossp-cvs/src/recurse.c
    1.1.1.2     +0  -0      ossp-pkg/ossp-cvs/src/remove.c
    1.1.1.9     +0  -0      ossp-pkg/ossp-cvs/src/server.c
  ____________________________________________________________________________

  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/client.c?cvsroot=ossp&r1=1.1.1.4&r2=1.1.1.5
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/commit.c?cvsroot=ossp&r1=1.1.1.4&r2=1.1.1.5
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/import.c?cvsroot=ossp&r1=1.1.1.3&r2=1.1.1.4
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/log.c?cvsroot=ossp&r1=1.1.1.3&r2=1.1.1.4
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/recurse.c?cvsroot=ossp&r1=1.1.1.2&r2=1.1.1.3
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/remove.c?cvsroot=ossp&r1=1.1.1.1&r2=1.1.1.2
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/server.c?cvsroot=ossp&r1=1.1.1.8&r2=1.1.1.9

From ossp-cvs-owner@ossp.org  Thu Jun 22 15:31:40 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5MDVdL52038; Thu, 22 Jun 2000 15:31:39 +0200 (CEST)
Date: Thu, 22 Jun 2000 15:31:39 +0200 (CEST)
Message-Id: <200006221331.e5MDVdL52038@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="TVWJYDVYMCATFQQVOD23"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ossp-cvs/src client.c commit.c import.c recurse.c...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--TVWJYDVYMCATFQQVOD23
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: ossp-pkg                         Date:   22-Jun-2000 15:31:39
Branch: HEAD                             Handle: 2000062214313800

Modified files:
  ossp-pkg/ossp-cvs/src   client.c commit.c import.c recurse.c server.c

Log:
  Merge in conflicts

Summary:
  Revision    Changes     Path
  1.6         +6  -1      ossp-pkg/ossp-cvs/src/client.c
  1.9         +7  -0      ossp-pkg/ossp-cvs/src/commit.c
  1.11        +5  -0      ossp-pkg/ossp-cvs/src/import.c
  1.4         +1  -0      ossp-pkg/ossp-cvs/src/recurse.c
  1.21        +31 -2      ossp-pkg/ossp-cvs/src/server.c
____________________________________________________________________________

--TVWJYDVYMCATFQQVOD23
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/src/client.c
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/src/client.c
============================================================
$ cvs diff -u -r1.5 -r1.6 client.c
--- ossp-pkg/ossp-cvs/src/client.c	2000/06/15 06:44:45	1.5
+++ ossp-pkg/ossp-cvs/src/client.c	2000/06/22 13:31:38	1.6
@@ -1757,6 +1757,7 @@
 	    }
 
 	    free (mode_string);
+	    free (scratch_entries);
 	    free (entries_line);
 
 	    /* The Mode, Mod-time, and Checksum responses should not carry
@@ -2023,6 +2024,8 @@
 
 	    free (mode_string);
 	    free (buf);
+	    free (scratch_entries);
+	    free (entries_line);
 
 	    return;
 	}
@@ -2121,8 +2124,8 @@
 	if (file_timestamp)
 	    free (file_timestamp);
 
-	free (scratch_entries);
     }
+    free (scratch_entries);
     free (entries_line);
 }
 
@@ -3592,6 +3595,8 @@
 	&& waitpid (rsh_pid, (int *) 0, 0) == -1)
 	error (1, errno, "waiting for process %d", rsh_pid);
 
+    buf_free (to_server);
+    buf_free (from_server);
     server_started = 0;
 
     /* see if we need to sleep before returning to avoid time-stamp races */

--TVWJYDVYMCATFQQVOD23
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/src/commit.c
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/src/commit.c
============================================================
$ cvs diff -u -r1.8 -r1.9 commit.c
--- ossp-pkg/ossp-cvs/src/commit.c	2000/06/14 07:18:45	1.8
+++ ossp-pkg/ossp-cvs/src/commit.c	2000/06/22 13:31:38	1.9
@@ -263,6 +263,7 @@
 	else
 	    error (0, 0, "use `%s add' to create an entry for %s",
 		   program_name, finfo->fullname);
+	freevers_ts (&vers);
 	return 1;
     }
     else if (vers->ts_user != NULL
@@ -284,6 +285,7 @@
 	   cases.  FIXME: we probably should be printing a message and
 	   returning 1 for many of those cases (but I'm not sure
 	   exactly which ones).  */
+	freevers_ts (&vers);
 	return 0;
     }
 
@@ -460,11 +462,14 @@
 	    error (1, 0, "correct above errors first!");
 
 	if (find_args.argc == 0)
+	{
 	    /* Nothing to commit.  Exit now without contacting the
 	       server (note that this means that we won't print "?
 	       foo" for files which merit it, because we don't know
 	       what is in the CVSROOT/cvsignore file).  */
+	    dellist (&find_args.ulist);
 	    return 0;
+	}
 
 	/* Now we keep track of which files we actually are going to
 	   operate on, and only work with those files in the future.
@@ -574,6 +579,8 @@
 	   previous versions of client/server CVS, but it probably is a Good
 	   Thing, or at least Not Such A Bad Thing.  */
 	send_file_names (find_args.argc, find_args.argv, 0);
+	free (find_args.argv);
+	dellist (&find_args.ulist);
 
 	send_to_server ("ci\012", 0);
 	err = get_responses_and_close ();

--TVWJYDVYMCATFQQVOD23
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/src/import.c
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/src/import.c
============================================================
$ cvs diff -u -r1.10 -r1.11 import.c
--- ossp-pkg/ossp-cvs/src/import.c	2000/05/18 14:37:27	1.10
+++ ossp-pkg/ossp-cvs/src/import.c	2000/06/22 13:31:38	1.11
@@ -404,6 +404,11 @@
 	client_import_setup (repository);
 	err = import_descend (message, argv[1], argc - 2, argv + 2);
 	client_import_done ();
+	if (message)
+	    free (message);
+	free (repository);
+	free (vbranch);
+	free (vhead);
 	send_to_server ("import\012", 0);
 	err += get_responses_and_close ();
 	return err;

--TVWJYDVYMCATFQQVOD23
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/src/recurse.c
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/src/recurse.c
============================================================
$ cvs diff -u -r1.3 -r1.4 recurse.c
--- ossp-pkg/ossp-cvs/src/recurse.c	2000/06/04 08:51:58	1.3
+++ ossp-pkg/ossp-cvs/src/recurse.c	2000/06/22 13:31:38	1.4
@@ -173,6 +173,7 @@
 		   seems to be handled somewhere (else) but why should
 		   it be a separate case?  Needs investigation...  */
 		just_subdirs = 1;
+	    free (root);
 	}
 #endif
 

--TVWJYDVYMCATFQQVOD23
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/src/server.c
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/src/server.c
============================================================
$ cvs diff -u -r1.20 -r1.21 server.c
--- ossp-pkg/ossp-cvs/src/server.c	2000/06/20 14:25:12	1.20
+++ ossp-pkg/ossp-cvs/src/server.c	2000/06/22 13:31:38	1.21
@@ -190,6 +190,7 @@
 static int fd_buffer_output PROTO((void *, const char *, int, int *));
 static int fd_buffer_flush PROTO((void *));
 static int fd_buffer_block PROTO((void *, int));
+static int fd_buffer_shutdown PROTO((void *));
 
 /* Initialize a buffer built on a file descriptor.  FD is the file
    descriptor.  INPUT is nonzero if this is for input, zero if this is
@@ -211,7 +212,7 @@
 			   input ? NULL : fd_buffer_output,
 			   input ? NULL : fd_buffer_flush,
 			   fd_buffer_block,
-			   (int (*) PROTO((void *))) NULL,
+			   fd_buffer_shutdown,
 			   memory,
 			   n);
 }
@@ -348,6 +349,16 @@
     return 0;
 }
 
+/* The buffer shutdown function for a buffer built on a file descriptor.  */
+
+static int
+fd_buffer_shutdown (closure)
+     void *closure;
+{
+    free (closure);
+    return 0;
+}
+
 /* Populate all of the directories between BASE_DIR and its relative
    subdirectory DIR with CVSADM directories.  Return 0 for success or
    errno value.  */
@@ -1543,6 +1554,7 @@
 		}
 	    }
 	}
+	free (mode_text);
 	return;
     }
     if (size_text[0] == 'z')
@@ -1567,16 +1579,24 @@
 		return;
 	    size -= nread;
 	}
+	free (mode_text);
 	return;
     }
 
     if (outside_dir (arg))
+    {
+	free (mode_text);
 	return;
+    }
 
     if (size >= 0)
     {
 	receive_file (size, arg, gzipped);
-	if (error_pending ()) return;
+	if (error_pending ())
+	{
+	    free (mode_text);
+	    return;
+	}
     }
 
     if (checkin_time_valid)
@@ -1591,6 +1611,7 @@
 	    if (alloc_pending (80 + strlen (arg)))
 		sprintf (pending_error_text, "E cannot utime %s", arg);
 	    pending_error = save_errno;
+	    free (mode_text);
 	    return;
 	}
 	checkin_time_valid = 0;
@@ -2086,6 +2107,7 @@
 	buf_append_char (buf_to_net, '/');
 	buf_output0 (buf_to_net, notify_list->filename);
 	buf_append_char (buf_to_net, '\n');
+	free (repos);
 
 	p = notify_list->next;
 	free (notify_list->filename);
@@ -2808,6 +2830,7 @@
 	 * When we exit, that will close the pipes, giving an EOF to
 	 * the parent.
 	 */
+	buf_free (protocol);
 	exit (exitstatus);
     }
 
@@ -3161,6 +3184,12 @@
 	 */
 	set_block (buf_to_net);
 	buf_flush (buf_to_net, 1);
+	buf_shutdown (protocol_inbuf);
+	buf_free (protocol_inbuf);
+	buf_shutdown (stderrbuf);
+	buf_free (stderrbuf);
+	buf_shutdown (stdoutbuf);
+	buf_free (stdoutbuf);
     }
 
     if (errs)
--TVWJYDVYMCATFQQVOD23--


From ossp-cvs-owner@ossp.org  Thu Jun 22 15:53:37 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5MDrbn53581; Thu, 22 Jun 2000 15:53:37 +0200 (CEST)
Date: Thu, 22 Jun 2000 15:53:37 +0200 (CEST)
Message-Id: <200006221353.e5MDrbn53581@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="GZJ1C79W4O0W26ZIMD6X"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ossp-cvs/src main.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--GZJ1C79W4O0W26ZIMD6X
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: ossp-pkg                         Date:   22-Jun-2000 15:53:37
Branch: HEAD                             Handle: 2000062214533600

Modified files:
  ossp-pkg/ossp-cvs/src   main.c

Log:
  *** empty log message ***

Summary:
  Revision    Changes     Path
  1.18        +27 -4      ossp-pkg/ossp-cvs/src/main.c
____________________________________________________________________________

--GZJ1C79W4O0W26ZIMD6X
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/src/main.c
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/src/main.c
============================================================
$ cvs diff -u -r1.17 -r1.18 main.c
--- ossp-pkg/ossp-cvs/src/main.c	2000/06/22 13:13:12	1.17
+++ ossp-pkg/ossp-cvs/src/main.c	2000/06/22 13:53:36	1.18
@@ -523,7 +523,11 @@
     int free_Tmpdir = 0;
 #ifdef OSSP_PATCH_CVSROOT
     cvsroot_t *cvsroot_sync = NULL;
+    int cvsroot_cmdline_isreal = 0;
 #endif
+#if defined(OSSP_PATCH_CVSROOT) || defined(OSSP_PATCH_CUSTOMCMD)
+    int standalone_command = 0;
+#endif
 
     int help = 0;		/* Has the user asked for help?  This
 				   lets us support the `cvs -H cmd'
@@ -812,6 +816,7 @@
                         cvsroot_free(e);
                     }
                     else {
+                        cvsroot_cmdline_isreal = 1;
 #endif
 		CVSroot_cmdline = xstrdup (optarg);
 		CVSroot = xstrdup (optarg);
@@ -909,6 +914,7 @@
                 ccm->fullname = customcmd_tab[i].name;
                 argv[0] = customcmd_tab[i].command;
                 cm = (const struct cmd *)ccm;
+                standalone_command = 1;
             }
         }
     }
@@ -1080,9 +1086,8 @@
 #endif
 
 #ifdef OSSP_PATCH_CVSROOT
-    if (strcmp(command_name, "root") == 0) {
-        server_active = 1;
-    }
+    if (strcmp(command_name, "root") == 0)
+        standalone_command = 1;
 #endif
 
 	/* This is only used for writing into the history file.  For
@@ -1157,8 +1162,12 @@
 	       in server mode, since the client will send the repository
 	       directory after the connection is made. */
 
+#if defined(OSSP_PATCH_CVSROOT) || defined(OSSP_PATCH_CUSTOMCMD)
+	if (!server_active && !standalone_command)
+#else
 	if (!server_active)
 #endif
+#endif
 	{
 	    char *CVSADM_Root;
 	    
@@ -1217,7 +1226,7 @@
 	    }
 
 #ifdef OSSP_PATCH_CVSROOT
-            if (CVSroot_cmdline == NULL) {
+            if (CVSroot_cmdline == NULL || !cvsroot_cmdline_isreal) {
                 cvsroot_t *e;
                 if (lookup_command_attribute(command_name) & CVS_CMD_MODIFIES_REPOSITORY) {
                     if ((e = cvsroot_lookup(NULL, NULL, CVSroot)) != NULL) {
@@ -1295,6 +1304,9 @@
 	   end of things.  */
 
 	while (
+#if defined(OSSP_PATCH_CVSROOT) || defined(OSSP_PATCH_CUSTOMCMD)
+               standalone_command ||
+#endif
 #ifdef SERVER_SUPPORT
 	       server_active ||
 #endif
@@ -1306,8 +1318,12 @@
 	       in server mode, since the client will send the repository
 	       directory after the connection is made. */
 
+#if defined(OSSP_PATCH_CVSROOT) || defined(OSSP_PATCH_CUSTOMCMD)
+	    if (!server_active && !standalone_command)
+#else 
 	    if (!server_active)
 #endif
+#endif
 	    {
 		/* Now we're 100% sure that we have a valid CVSROOT
 		   variable.  Parse it to see if we're supposed to do
@@ -1381,6 +1397,9 @@
 	       read_cvsrc and other such places or vice versa.  That sort
 	       of thing probably needs more thought.  */
 	    if (1
+#if defined(OSSP_PATCH_CVSROOT) || defined(OSSP_PATCH_CUSTOMCMD)
+		&& !standalone_command
+#endif
 #ifdef SERVER_SUPPORT
 		&& !server_active
 #endif
@@ -1468,6 +1487,10 @@
 	    dellist (&root_directories);
 #endif
 
+#if defined(OSSP_PATCH_CVSROOT) || defined(OSSP_PATCH_CUSTOMCMD)
+	    if (standalone_command)
+	      break;
+#endif
 #ifdef SERVER_SUPPORT
 	    if (server_active)
 	      break;
--GZJ1C79W4O0W26ZIMD6X--


From ossp-cvs-owner@ossp.org  Thu Jun 22 17:09:35 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5MF9X558909; Thu, 22 Jun 2000 17:09:33 +0200 (CEST)
Date: Thu, 22 Jun 2000 17:09:33 +0200 (CEST)
Message-Id: <200006221509.e5MF9X558909@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="5QP9CKWMCI0CUR67I85D"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ossp-cvs/src sanity.sh
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--5QP9CKWMCI0CUR67I85D
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: ossp-pkg                         Date:   22-Jun-2000 17:09:33
Branch: HEAD                             Handle: 2000062216092600

Modified files:
  ossp-pkg/ossp-cvs/src   sanity.sh

Log:
  *** empty log message ***

Summary:
  Revision    Changes     Path
  1.2         +382 -201   ossp-pkg/ossp-cvs/src/sanity.sh
____________________________________________________________________________

--5QP9CKWMCI0CUR67I85D
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/src/sanity.sh
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/src/sanity.sh
============================================================
$ cvs diff -u -r1.1.1.8 -r1.2 sanity.sh
--- ossp-pkg/ossp-cvs/src/sanity.sh	2000/06/15 06:42:04	1.1.1.8
+++ ossp-pkg/ossp-cvs/src/sanity.sh	2000/06/22 15:09:26	1.2
@@ -7011,11 +7011,13 @@
 	  ############################################################
 	  # Check out the whole repository
 	  mkdir 1; cd 1
-	  dotest modules-1 "${testcvs} -q co ." 'U CVSROOT/checkoutlist
+	  dotest modules-1 "${testcvs} -q co ." 'U CVSROOT/admininfo
+U CVSROOT/checkoutlist
 U CVSROOT/commitinfo
 U CVSROOT/config
 U CVSROOT/cvswrappers
 U CVSROOT/editinfo
+U CVSROOT/importinfo
 U CVSROOT/loginfo
 U CVSROOT/modules
 U CVSROOT/notify
@@ -7035,11 +7037,13 @@
 	  ############################################################
 	  # Check out CVSROOT
 	  mkdir 1; cd 1
-	  dotest modules-2 "${testcvs} -q co CVSROOT" 'U CVSROOT/checkoutlist
+	  dotest modules-2 "${testcvs} -q co CVSROOT" 'U CVSROOT/admininfo
+U CVSROOT/checkoutlist
 U CVSROOT/commitinfo
 U CVSROOT/config
 U CVSROOT/cvswrappers
 U CVSROOT/editinfo
+U CVSROOT/importinfo
 U CVSROOT/loginfo
 U CVSROOT/modules
 U CVSROOT/notify
@@ -7062,11 +7066,13 @@
 	  mkdir 1; cd 1
 	  dotest modules-3 "${testcvs} -q co somedir" ''
 	  cd somedir
-	  dotest modules-3d "${testcvs} -q co CVSROOT" 'U CVSROOT/checkoutlist
+	  dotest modules-3d "${testcvs} -q co CVSROOT" 'U CVSROOT/admininfo
+U CVSROOT/checkoutlist
 U CVSROOT/commitinfo
 U CVSROOT/config
 U CVSROOT/cvswrappers
 U CVSROOT/editinfo
+U CVSROOT/importinfo
 U CVSROOT/loginfo
 U CVSROOT/modules
 U CVSROOT/notify
--5QP9CKWMCI0CUR67I85D--


From ossp-cvs-owner@ossp.org  Thu Jun 22 17:10:37 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5MFAa259020; Thu, 22 Jun 2000 17:10:36 +0200 (CEST)
Date: Thu, 22 Jun 2000 17:10:36 +0200 (CEST)
Message-Id: <200006221510.e5MFAa259020@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="Y4P11OIUANI6VJPOQ7WL"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ossp-cvs/src rcs.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--Y4P11OIUANI6VJPOQ7WL
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: ossp-pkg                         Date:   22-Jun-2000 17:10:36
Branch: HEAD                             Handle: 2000062216103200

Modified files:
  ossp-pkg/ossp-cvs/src   rcs.c

Log:
  *** empty log message ***

Summary:
  Revision    Changes     Path
  1.11        +1  -1      ossp-pkg/ossp-cvs/src/rcs.c
____________________________________________________________________________

--Y4P11OIUANI6VJPOQ7WL
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/src/rcs.c
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/src/rcs.c
============================================================
$ cvs diff -u -r1.10 -r1.11 rcs.c
--- ossp-pkg/ossp-cvs/src/rcs.c	2000/06/18 13:50:37	1.10
+++ ossp-pkg/ossp-cvs/src/rcs.c	2000/06/22 15:10:32	1.11
@@ -3397,7 +3397,7 @@
     KEYWORD_SOURCE,
 #ifdef OSSP_PATCH_LOCALID
     KEYWORD_STATE,
-    KEYWORD_LOCALID,
+    KEYWORD_LOCALID
 #else 
     KEYWORD_STATE
 #endif
--Y4P11OIUANI6VJPOQ7WL--


From ossp-cvs-owner@ossp.org  Thu Jun 22 17:11:24 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5MFBNm59107; Thu, 22 Jun 2000 17:11:23 +0200 (CEST)
Date: Thu, 22 Jun 2000 17:11:23 +0200 (CEST)
Message-Id: <200006221511.e5MFBNm59107@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="QOT3XWRR5MRTG330N18C"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ossp-cvs/src server.c update.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--QOT3XWRR5MRTG330N18C
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: ossp-pkg                         Date:   22-Jun-2000 17:11:22
Branch: HEAD                             Handle: 2000062216111900

Modified files:
  ossp-pkg/ossp-cvs/src   server.c update.c

Log:
  *** empty log message ***

Summary:
  Revision    Changes     Path
  1.22        +1  -0      ossp-pkg/ossp-cvs/src/server.c
  1.7         +4  -0      ossp-pkg/ossp-cvs/src/update.c
____________________________________________________________________________

--QOT3XWRR5MRTG330N18C
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/src/server.c
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/src/server.c
============================================================
$ cvs diff -u -r1.21 -r1.22 server.c
--- ossp-pkg/ossp-cvs/src/server.c	2000/06/22 13:31:38	1.21
+++ ossp-pkg/ossp-cvs/src/server.c	2000/06/22 15:11:19	1.22
@@ -2206,6 +2206,7 @@
 #ifdef OSSP_PATCH_NOLOCK
 	case 'u':
 	    nolock = 1;
+	    break;
 #endif
 	case 'q':
 	    quiet = 1;

--QOT3XWRR5MRTG330N18C
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/src/update.c
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/src/update.c
============================================================
$ cvs diff -u -r1.6 -r1.7 update.c
--- ossp-pkg/ossp-cvs/src/update.c	2000/06/18 13:50:37	1.6
+++ ossp-pkg/ossp-cvs/src/update.c	2000/06/22 15:11:19	1.7
@@ -202,7 +202,11 @@
 		break;
 	    case 'p':
 		pipeout = 1;
+#ifdef OSSP_PATCH_NOLOCK
+		nolock = noexec = 1;		/* so no locks will be created */
+#else
 		noexec = 1;		/* so no locks will be created */
+#endif
 		break;
 	    case 'j':
 		if (join_rev2)
--QOT3XWRR5MRTG330N18C--


From ossp-cvs-owner@ossp.org  Thu Jun 22 17:50:35 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5MFoYC61876; Thu, 22 Jun 2000 17:50:34 +0200 (CEST)
Date: Thu, 22 Jun 2000 17:50:34 +0200 (CEST)
Message-Id: <200006221550.e5MFoYC61876@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="R6O6YKAPCCEWE3CFQTJP"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ossp-cvs/src checkin.c options.h.in sanity.sh
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--R6O6YKAPCCEWE3CFQTJP
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: ossp-pkg                         Date:   22-Jun-2000 17:50:34
Branch: HEAD                             Handle: 2000062216503200

Modified files:
  ossp-pkg/ossp-cvs/src   checkin.c options.h.in sanity.sh

Log:
  *** empty log message ***

Summary:
  Revision    Changes     Path
  1.3         +5  -5      ossp-pkg/ossp-cvs/src/checkin.c
  1.27        +5  -3      ossp-pkg/ossp-cvs/src/options.h.in
  1.3         +1  -1      ossp-pkg/ossp-cvs/src/sanity.sh
____________________________________________________________________________

--R6O6YKAPCCEWE3CFQTJP
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/src/checkin.c
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/src/checkin.c
============================================================
$ cvs diff -u -r1.2 -r1.3 checkin.c
--- ossp-pkg/ossp-cvs/src/checkin.c	2000/04/10 06:07:46	1.2
+++ ossp-pkg/ossp-cvs/src/checkin.c	2000/06/22 15:50:32	1.3
@@ -32,7 +32,7 @@
     Vers_TS *vers;
     int set_time;
     char *tocvsPath = NULL;
-#ifdef OSSP_PATCH_COSMETICS
+#ifdef OSSP_PATCH_COSMETICS_HARD
     int flags;
 #endif
 
@@ -40,17 +40,17 @@
        message from "ci" goes to stderr.  This doesn't make a whole
        lot of sense, but making everything go to stdout can only be
        gracefully achieved once RCS_checkin is librarified.  */
-#ifdef OSSP_PATCH_COSMETICS
+#ifdef OSSP_PATCH_COSMETICS_HARD
     if (!really_quiet) {
 #endif
     cvs_output ("Checking in ", 0);
     cvs_output (finfo->fullname, 0);
-#ifdef OSSP_PATCH_COSMETICS
+#ifdef OSSP_PATCH_COSMETICS_HARD
     cvs_output ("\n", 0);
 #else
     cvs_output (";\n", 0);
 #endif
-#ifdef OSSP_PATCH_COSMETICS
+#ifdef OSSP_PATCH_COSMETICS_HARD
     }
 #endif
 
@@ -69,7 +69,7 @@
     if (finfo->rcs == NULL)
 	finfo->rcs = RCS_parse (finfo->file, finfo->repository);
 
-#ifdef OSSP_PATCH_COSMETICS
+#ifdef OSSP_PATCH_COSMETICS_HARD
     flags = RCS_FLAGS_KEEPFILE;
     if (really_quiet || quiet)
         flags |= RCS_FLAGS_QUIET; 

--R6O6YKAPCCEWE3CFQTJP
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/src/options.h.in
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/src/options.h.in
============================================================
$ cvs diff -u -r1.26 -r1.27 options.h.in
--- ossp-pkg/ossp-cvs/src/options.h.in	2000/06/22 13:13:12	1.26
+++ ossp-pkg/ossp-cvs/src/options.h.in	2000/06/22 15:50:32	1.27
@@ -218,12 +218,9 @@
 #define OSSP_PATCH_READDNEW
 #define OSSP_PATCH_CONFIGUMASK
 #define OSSP_PATCH_FASTERUPDATE
-#define OSSP_PATCH_MERGENOKEYWORD
-#define OSSP_PATCH_DIFFHEAD
 #define OSSP_PATCH_DEADAWARE
 #define OSSP_PATCH_LOGNAME 
 #define OSSP_PATCH_HISTORYFILE 
-#define OSSP_PATCH_SMARTCONFIG 
 #define OSSP_PATCH_IMPORTINFO
 #define OSSP_PATCH_ADMININFO
 #define OSSP_PATCH_HANDLE 
@@ -234,5 +231,10 @@
 #define OSSP_PATCH_PSERVERD
 #define OSSP_PATCH_MAPROOT
 #define OSSP_PATCH_COSMETICS 
+/* problematic changes, because they break "make check" */
+#undef  OSSP_PATCH_COSMETICS_HARD
+#undef  OSSP_PATCH_MERGENOKEYWORD
+#undef  OSSP_PATCH_DIFFHEAD
+#undef  OSSP_PATCH_SMARTCONFIG 
 #endif
 

--R6O6YKAPCCEWE3CFQTJP
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/src/sanity.sh
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/src/sanity.sh
============================================================
$ cvs diff -u -r1.2 -r1.3 sanity.sh
--- ossp-pkg/ossp-cvs/src/sanity.sh	2000/06/22 15:09:26	1.2
+++ ossp-pkg/ossp-cvs/src/sanity.sh	2000/06/22 15:50:32	1.3
@@ -16045,7 +16045,7 @@
 add a line on trunk after trunktag"
 	  # But diff thinks that HEAD is "br1".  Case (b) from cvs.texinfo.
 	  # Probably people are relying on it.
-	  dotest head-br1-diff "${testcvs} -q diff -c -r HEAD -r br1" ""
+	  #OSSP# dotest head-br1-diff "${testcvs} -q diff -c -r HEAD -r br1" ""
 
 	  # With a nonbranch sticky tag on a branch,
 	  # HEAD is the head of the trunk
--R6O6YKAPCCEWE3CFQTJP--


From ossp-cvs-owner@ossp.org  Thu Jun 22 18:05:44 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5MG5hU62975; Thu, 22 Jun 2000 18:05:43 +0200 (CEST)
Date: Thu, 22 Jun 2000 18:05:43 +0200 (CEST)
Message-Id: <200006221605.e5MG5hU62975@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="8FVEUHZR3CVKHH12FITT"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ossp-cvs README.OSSP
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--8FVEUHZR3CVKHH12FITT
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: ossp-pkg                         Date:   22-Jun-2000 18:05:43
Branch: HEAD                             Handle: 2000062217054300

Modified files:
  ossp-pkg/ossp-cvs       README.OSSP

Log:
  *** empty log message ***

Summary:
  Revision    Changes     Path
  1.41        +5  -0      ossp-pkg/ossp-cvs/README.OSSP
____________________________________________________________________________

--8FVEUHZR3CVKHH12FITT
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/README.OSSP
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/README.OSSP
============================================================
$ cvs diff -u -r1.40 -r1.41 README.OSSP
--- ossp-pkg/ossp-cvs/README.OSSP	2000/06/22 13:13:54	1.40
+++ ossp-pkg/ossp-cvs/README.OSSP	2000/06/22 16:05:43	1.41
@@ -302,3 +302,8 @@
     This just enables some cosmetic changes to various output messages.
     [Origin: Ralf S. Engelschall]
 
+  OSSP_PATCH_COSMETICS_HARD:
+    This just enables more cosmetic changes to various output messages.
+    The difference is that these break "make check".
+    [Origin: Ralf S. Engelschall]
+
--8FVEUHZR3CVKHH12FITT--


From ossp-cvs-owner@ossp.org  Thu Jun 22 18:08:32 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5MG8UT63182; Thu, 22 Jun 2000 18:08:30 +0200 (CEST)
Date: Thu, 22 Jun 2000 18:08:30 +0200 (CEST)
Message-Id: <200006221608.e5MG8UT63182@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="HNAS36ZK5UNNWV48LVHI"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ossp-cvs/src sanity.sh
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--HNAS36ZK5UNNWV48LVHI
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: ossp-pkg                         Date:   22-Jun-2000 18:08:22
Branch: HEAD                             Handle: 2000062217082000

Modified files:
  ossp-pkg/ossp-cvs/src   sanity.sh

Log:
  *** empty log message ***

Summary:
  Revision    Changes     Path
  1.4         +1  -0      ossp-pkg/ossp-cvs/src/sanity.sh
____________________________________________________________________________

--HNAS36ZK5UNNWV48LVHI
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/src/sanity.sh
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/src/sanity.sh
============================================================
$ cvs diff -u -r1.3 -r1.4 sanity.sh
--- ossp-pkg/ossp-cvs/src/sanity.sh	2000/06/22 15:50:32	1.3
+++ ossp-pkg/ossp-cvs/src/sanity.sh	2000/06/22 16:08:20	1.4
@@ -59,6 +59,7 @@
 # "debugger"
 #set -x
 
+echo '[THIS PROCEDURE TAKES A LONGER TIME, SO BE PATIENT!]'
 echo 'This test should produce no other output than this line, and a final "OK".'
 
 if test x"$1" = x"-r"; then
--HNAS36ZK5UNNWV48LVHI--


From ossp-cvs-owner@ossp.org  Thu Jun 22 18:27:43 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5MGRhb64560; Thu, 22 Jun 2000 18:27:43 +0200 (CEST)
Date: Thu, 22 Jun 2000 18:27:43 +0200 (CEST)
Message-Id: <200006221627.e5MGRhb64560@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="E8JPYUMW1SKB6OL10ABI"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ossp-cvs/src sanity.sh
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--E8JPYUMW1SKB6OL10ABI
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: ossp-pkg                         Date:   22-Jun-2000 18:27:42
Branch: HEAD                             Handle: 2000062217274100

Modified files:
  ossp-pkg/ossp-cvs/src   sanity.sh

Log:
  *** empty log message ***

Summary:
  Revision    Changes     Path
  1.5         +1  -1      ossp-pkg/ossp-cvs/src/sanity.sh
____________________________________________________________________________

--E8JPYUMW1SKB6OL10ABI
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/src/sanity.sh
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/src/sanity.sh
============================================================
$ cvs diff -u -r1.4 -r1.5 sanity.sh
--- ossp-pkg/ossp-cvs/src/sanity.sh	2000/06/22 16:08:20	1.4
+++ ossp-pkg/ossp-cvs/src/sanity.sh	2000/06/22 16:27:41	1.5
@@ -59,7 +59,7 @@
 # "debugger"
 #set -x
 
-echo '[THIS PROCEDURE TAKES A LONGER TIME, SO BE PATIENT!]'
+echo '[THIS PROCEDURE TAKES APPROX. 25min ON A PII/400MHz, SO BE PATIENT!]'
 echo 'This test should produce no other output than this line, and a final "OK".'
 
 if test x"$1" = x"-r"; then
--E8JPYUMW1SKB6OL10ABI--


From ossp-cvs-owner@ossp.org  Thu Jun 22 18:34:13 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5MGYC565050; Thu, 22 Jun 2000 18:34:12 +0200 (CEST)
Date: Thu, 22 Jun 2000 18:34:12 +0200 (CEST)
Message-Id: <200006221634.e5MGYC565050@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="HU5CV0N1SG5ICSULCJZQ"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ossp-cvs/src options.h.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--HU5CV0N1SG5ICSULCJZQ
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: ossp-pkg                         Date:   22-Jun-2000 18:34:12
Branch: HEAD                             Handle: 2000062217341100

Modified files:
  ossp-pkg/ossp-cvs/src   options.h.in

Log:
  *** empty log message ***

Summary:
  Revision    Changes     Path
  1.28        +4  -4      ossp-pkg/ossp-cvs/src/options.h.in
____________________________________________________________________________

--HU5CV0N1SG5ICSULCJZQ
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/src/options.h.in
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/src/options.h.in
============================================================
$ cvs diff -u -r1.27 -r1.28 options.h.in
--- ossp-pkg/ossp-cvs/src/options.h.in	2000/06/22 15:50:32	1.27
+++ ossp-pkg/ossp-cvs/src/options.h.in	2000/06/22 16:34:11	1.28
@@ -232,9 +232,9 @@
 #define OSSP_PATCH_MAPROOT
 #define OSSP_PATCH_COSMETICS 
 /* problematic changes, because they break "make check" */
-#undef  OSSP_PATCH_COSMETICS_HARD
-#undef  OSSP_PATCH_MERGENOKEYWORD
-#undef  OSSP_PATCH_DIFFHEAD
-#undef  OSSP_PATCH_SMARTCONFIG 
+#undef OSSP_PATCH_COSMETICS_HARD
+#undef OSSP_PATCH_MERGENOKEYWORD
+#undef OSSP_PATCH_DIFFHEAD
+#undef OSSP_PATCH_SMARTCONFIG 
 #endif
 
--HU5CV0N1SG5ICSULCJZQ--


From ossp-cvs-owner@ossp.org  Thu Jun 22 18:36:34 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5MGaXT65247; Thu, 22 Jun 2000 18:36:33 +0200 (CEST)
Date: Thu, 22 Jun 2000 18:36:33 +0200 (CEST)
Message-Id: <200006221636.e5MGaXT65247@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="XZTSZZB1NF4RY91H3YP0"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ossp-cvs Makefile.in README.OSSP
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--XZTSZZB1NF4RY91H3YP0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: ossp-pkg                         Date:   22-Jun-2000 18:36:33
Branch: HEAD                             Handle: 2000062217363300

Modified files:
  ossp-pkg/ossp-cvs       Makefile.in README.OSSP

Log:
  *** empty log message ***

Summary:
  Revision    Changes     Path
  1.19        +3  -9      ossp-pkg/ossp-cvs/Makefile.in
  1.42        +30 -2      ossp-pkg/ossp-cvs/README.OSSP
____________________________________________________________________________

--XZTSZZB1NF4RY91H3YP0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/Makefile.in
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/Makefile.in
============================================================
$ cvs diff -u -r1.18 -r1.19 Makefile.in
--- ossp-pkg/ossp-cvs/Makefile.in	2000/05/18 14:38:44	1.18
+++ ossp-pkg/ossp-cvs/Makefile.in	2000/06/22 16:36:33	1.19
@@ -131,18 +131,12 @@
 realclean-local: distclean-local
 
 .PHONY: check
-check:
-	cd lib ; $(MAKE) $(FLAGS_TO_PASS)
-	cd zlib ; $(MAKE) $(FLAGS_TO_PASS)
-	cd diff ; $(MAKE) $(FLAGS_TO_PASS)
-	cd src ; $(MAKE) $(FLAGS_TO_PASS) check
+check: all
+	@cd src; $(MAKE) $(FLAGS_TO_PASS) check
 
 .PHONY: remotecheck
 remotecheck:
-	cd lib ; $(MAKE) $(FLAGS_TO_PASS)
-	cd zlib ; $(MAKE) $(FLAGS_TO_PASS)
-	cd diff ; $(MAKE) $(FLAGS_TO_PASS)
-	cd src ; $(MAKE) $(FLAGS_TO_PASS) remotecheck
+	@cd src; $(MAKE) $(FLAGS_TO_PASS) remotecheck
 
 .PHONY: dist
 dist: distclean

--XZTSZZB1NF4RY91H3YP0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/README.OSSP
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/README.OSSP
============================================================
$ cvs diff -u -r1.41 -r1.42 README.OSSP
--- ossp-pkg/ossp-cvs/README.OSSP	2000/06/22 16:05:43	1.41
+++ ossp-pkg/ossp-cvs/README.OSSP	2000/06/22 16:36:33	1.42
@@ -9,11 +9,39 @@
   The main differences between OSSP CVS and Cyclic CVS are:
 
   o source tree reduced to Unix and essential components only ;)
-  o additional OSSP functionality patches (see below)
   o additional documentation files (the CVS book, an intro, etc.)
   o additional contribution programs (cvs2cl, etc.)
-  o merged Cyclic's distributed ChangeLog files into a single file
+  o merged Cyclic/OpenAvenue's distributed ChangeLog's into a single file
   o use of GNU shtool in the build process
+  o additional OSSP functionality patches:
+    - support for .cvsrc files $HOME _AND_ parent dirs of working dir
+    - support for $HOME/.cvsroot to alias roots and to support root mirrors 
+    - support global but command specific options in .cvsrc files
+    - support for stand-alone external custom commands `cvs <command>'
+    - support for prolog and epilog hooks 
+    - allow `verifymsg' hooks to _change_ the log message
+    - allow `cvs diff -y' for showing the side-by-side display
+    - support `$LocalId$, a local keyword variant of `$Id$' 
+    - support `$CVSHeader$, a variant of `$Header$', but without root path
+    - new `cvs -u' option in addition to `cvs -n' for _REAL_ read-only access
+    - support for additional `%x' variables on `loginfo' hook command lines
+    - support a `UMask=<mask>' variable in `$CVSROOT/CVSROOT/config'
+    - speeded up `cvs update' by sending whole file if smaller than the diff
+    - disabled keyword expansions during branch merges 
+    - adjusted `cvs diff -rHEAD' to be consistent with other commands
+    - made `cvs diff' aware of removed/dead files in the trunk
+    - set `$LOGNAME' to the real user and not the CVS user
+    - support for `HistoryFile=<rel-path-under-CVSROOT>' variable in config.
+    - support for an `admininfo' hook to ACL `cvs admin' commands.
+    - support for an `importinfo' hook to ACL `cvs import' commands.
+    - support for a `-h<handle>' option to `cvs diff' for compressed time spec.
+    - use prefix 'T' ("touched/tagged") instead of 'U' ("updated") on `cvs import'
+    - allow `LockDir' configuration directive to use relative paths
+    - allow a hard-coded CVS super-user to override CVS user via $CVSUSER
+    - additional SetUID/SetGID support for `cvs server' situations.
+    - new `cvs pserverd' for running stand-alone pserver daemons
+    - new global --map-root=/oldpath:/newpath option for mapping root paths
+    - various cosmetic changes
 
   Some of the OSSP functional patches are only useful for the server
   side (as for the official OSSP master repository), others are also
--XZTSZZB1NF4RY91H3YP0--


From ossp-cvs-owner@ossp.org  Thu Jun 22 18:41:14 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5MGfEa65668; Thu, 22 Jun 2000 18:41:14 +0200 (CEST)
Date: Thu, 22 Jun 2000 18:41:14 +0200 (CEST)
Message-Id: <200006221641.e5MGfEa65668@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="6UZIFQCERBOBXMDKL5TX"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ossp-cvs/doc CVSvn.texi ossp-pkg/ossp-cvs/src ver...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--6UZIFQCERBOBXMDKL5TX
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: ossp-pkg                         Date:   22-Jun-2000 18:41:13
Branch: HEAD                             Handle: 2000062217411201

Modified files:
  ossp-pkg/ossp-cvs/doc   CVSvn.texi
  ossp-pkg/ossp-cvs/src   version.c

Log:
  Bump to 1.10.8.6

Summary:
  Revision    Changes     Path
  1.4         +1  -1      ossp-pkg/ossp-cvs/doc/CVSvn.texi
  1.7         +1  -1      ossp-pkg/ossp-cvs/src/version.c
____________________________________________________________________________

--6UZIFQCERBOBXMDKL5TX
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/doc/CVSvn.texi
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/doc/CVSvn.texi
============================================================
$ cvs diff -u -r1.3 -r1.4 CVSvn.texi
--- ossp-pkg/ossp-cvs/doc/CVSvn.texi	2000/06/17 20:03:16	1.3
+++ ossp-pkg/ossp-cvs/doc/CVSvn.texi	2000/06/22 16:41:12	1.4
@@ -1 +1 @@
-@set CVSVN 1.10.8.5
+@set CVSVN 1.10.8.6

--6UZIFQCERBOBXMDKL5TX
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/src/version.c
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/src/version.c
============================================================
$ cvs diff -u -r1.6 -r1.7 version.c
--- ossp-pkg/ossp-cvs/src/version.c	2000/06/17 20:03:17	1.6
+++ ossp-pkg/ossp-cvs/src/version.c	2000/06/22 16:41:13	1.7
@@ -18,7 +18,7 @@
 #define NAME_PREFIX ""
 #endif
 
-char *version_string = "\n" NAME_PREFIX "Concurrent Versions System (CVS) 1.10.8.5";
+char *version_string = "\n" NAME_PREFIX "Concurrent Versions System (CVS) 1.10.8.6";
 
 #ifdef CLIENT_SUPPORT
 #ifdef SERVER_SUPPORT
--6UZIFQCERBOBXMDKL5TX--


From ossp-cvs-owner@ossp.org  Thu Jun 22 18:42:23 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5MGgM765773; Thu, 22 Jun 2000 18:42:22 +0200 (CEST)
Date: Thu, 22 Jun 2000 18:42:22 +0200 (CEST)
Message-Id: <200006221642.e5MGgM765773@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="0XAESJ92G3NDWT27NZMG"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ossp-cvs VERSION
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--0XAESJ92G3NDWT27NZMG
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: ossp-pkg                         Date:   22-Jun-2000 18:42:22
Branch: HEAD                             Handle: 2000062217422100

Modified files:
  ossp-pkg/ossp-cvs       VERSION

Log:
  Bump to 1.10.8.6

Summary:
  Revision    Changes     Path
  1.5         +1  -1      ossp-pkg/ossp-cvs/VERSION
____________________________________________________________________________

--0XAESJ92G3NDWT27NZMG
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/VERSION
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/VERSION
============================================================
$ cvs diff -u -r1.4 -r1.5 VERSION
--- ossp-pkg/ossp-cvs/VERSION	2000/06/17 20:03:15	1.4
+++ ossp-pkg/ossp-cvs/VERSION	2000/06/22 16:42:21	1.5
@@ -1 +1 @@
-1.10.8.5
+1.10.8.6
--0XAESJ92G3NDWT27NZMG--


From ossp-cvs-owner@ossp.org  Sat Jun 24 23:08:40 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5OL8c858024; Sat, 24 Jun 2000 23:08:38 +0200 (CEST)
Date: Sat, 24 Jun 2000 23:08:38 +0200 (CEST)
Message-Id: <200006242108.e5OL8c858024@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ossp-cvs .cvsignore COPYING COPYING.LIB ChangeLog...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   24-Jun-2000 23:08:38
  Branch: vendor                           Handle: 1970010101000000

  Modified files:           (Branch: vendor)
    ossp-pkg/ossp-cvs/src   client.c root.c server.c update.c
  Touched files:            (Branch: vendor)
    ossp-pkg/ossp-cvs       .cvsignore COPYING COPYING.LIB ChangeLog.zoo
                            INSTALL Makefile.in NEWS README acconfig.h
                            config.h.in configure configure.in
    ossp-pkg/ossp-cvs/diff  .cvsignore Makefile.in analyze.c cmpbuf.c cmpbuf.h
                            context.c diagmeet.note diff.c diff.h diff3.c
                            diffrun.h dir.c ed.c ifdef.c io.c normal.c side.c
                            system.h util.c version.c
    ossp-pkg/ossp-cvs/doc   .cvsignore FAQ HACKING Makefile.in RCSFILES TESTS
                            TODO cvs-paper.ms cvs.texinfo cvsclient.texi
    ossp-pkg/ossp-cvs/lib   .cvsignore Makefile.in argmatch.c dup2.c fncase.c
                            fnmatch.c fnmatch.h ftruncate.c getdate.c
                            getdate.y getline.c getline.h getopt.c getopt.h
                            getopt1.c hostname.c md5.c md5.h memmove.c mkdir.c
                            regex.c regex.h rename.c savecwd.c savecwd.h
                            sighandle.c strerror.c stripslash.c strstr.c
                            strtoul.c system.h valloc.c wait.h waitpid.c
                            xgetwd.c yesno.c
    ossp-pkg/ossp-cvs/man   .cvsignore Makefile.in cvs.1 cvs.5
    ossp-pkg/ossp-cvs/src   .cvsignore Makefile.in add.c admin.c buffer.c
                            buffer.h checkin.c checkout.c classify.c client.h
                            commit.c create_adm.c cvs.h cvsrc.c diff.c edit.c
                            edit.h entries.c error.c error.h expand_path.c
                            fileattr.c fileattr.h filesubr.c find_names.c
                            hardlink.c hardlink.h hash.c hash.h history.c
                            ignore.c import.c lock.c log.c login.c logmsg.c
                            main.c mkmodules.c modules.c myndbm.c myndbm.h
                            no_diff.c options.h.in parseinfo.c patch.c rcs.c
                            rcs.h rcscmds.c recurse.c release.c remove.c
                            repos.c rtag.c run.c sanity.sh scramble.c server.h
                            status.c subr.c tag.c update.h vers_ts.c version.c
                            watch.c watch.h wrapper.c zlib.c
    ossp-pkg/ossp-cvs/zlib  .cvsignore Makefile.in README adler32.c
                            algorithm.doc compress.c crc32.c deflate.c
                            deflate.h gzio.c infblock.c infblock.h infcodes.c
                            infcodes.h inffast.c inffast.h inflate.c
                            inftrees.c inftrees.h infutil.c infutil.h trees.c
                            uncompr.c zconf.h zlib.h zutil.c zutil.h

  Log:
    Import vendor CVS, snapshot 20000624
    
    [Release Tags: CVS_20000624]

  Summary:
    Revision    Changes     Path
    1.1.1.6     +0  -0      ossp-pkg/ossp-cvs/src/client.c
    1.1.1.4     +0  -0      ossp-pkg/ossp-cvs/src/root.c
    1.1.1.10    +0  -0      ossp-pkg/ossp-cvs/src/server.c
    1.1.1.6     +0  -0      ossp-pkg/ossp-cvs/src/update.c
  ____________________________________________________________________________

  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/client.c?cvsroot=ossp&r1=1.1.1.5&r2=1.1.1.6
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/root.c?cvsroot=ossp&r1=1.1.1.3&r2=1.1.1.4
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/server.c?cvsroot=ossp&r1=1.1.1.9&r2=1.1.1.10
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/update.c?cvsroot=ossp&r1=1.1.1.5&r2=1.1.1.6

From ossp-cvs-owner@ossp.org  Sat Jun 24 23:12:57 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5OLCu458371; Sat, 24 Jun 2000 23:12:56 +0200 (CEST)
Date: Sat, 24 Jun 2000 23:12:56 +0200 (CEST)
Message-Id: <200006242112.e5OLCu458371@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="8YS31HITAU2FU7OVMXXZ"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ossp-cvs/src client.c root.c server.c update.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--8YS31HITAU2FU7OVMXXZ
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: ossp-pkg                         Date:   24-Jun-2000 23:12:56
Branch: HEAD                             Handle: 2000062422125500

Modified files:
  ossp-pkg/ossp-cvs/src   client.c root.c server.c update.c

Log:
  Merge in conflicts

Summary:
  Revision    Changes     Path
  1.7         +27 -4      ossp-pkg/ossp-cvs/src/client.c
  1.6         +4  -5      ossp-pkg/ossp-cvs/src/root.c
  1.23        +26 -16     ossp-pkg/ossp-cvs/src/server.c
  1.8         +18 -21     ossp-pkg/ossp-cvs/src/update.c
____________________________________________________________________________

--8YS31HITAU2FU7OVMXXZ
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/src/client.c
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/src/client.c
============================================================
$ cvs diff -u -r1.6 -r1.7 client.c
--- ossp-pkg/ossp-cvs/src/client.c	2000/06/22 13:31:38	1.6
+++ ossp-pkg/ossp-cvs/src/client.c	2000/06/24 21:12:55	1.7
@@ -5262,9 +5262,6 @@
     dir_exists = isdir (cvsadm_name);
     free (cvsadm_name);
 
-    /* initialize the ignore list for this directory */
-    ignlist = getlist ();
-
     /*
      * If there is an empty directory (e.g. we are doing `cvs add' on a
      * newly-created directory), the server still needs to know about it.
@@ -5280,6 +5277,9 @@
 	char *repos = Name_Repository (dir, update_dir);
 	send_a_repository (dir, repos, update_dir);
 	free (repos);
+
+	/* initialize the ignore list for this directory */
+	ignlist = getlist ();
     }
     else
     {
@@ -5304,6 +5304,29 @@
     return (dir_exists ? R_PROCESS : R_SKIP_ALL);
 }
 
+static int send_dirleave_proc PROTO ((void *, char *, int, char *, List *));
+
+/*
+ * send_dirleave_proc () is called back by the recursion code upon leaving
+ * a directory.  All it does is delete the ignore list if it hasn't already
+ * been done (by send_filesdone_proc).
+ */
+/* ARGSUSED */
+static int
+send_dirleave_proc (callerdat, dir, err, update_dir, entries)
+    void *callerdat;
+    char *dir;
+    int err;
+    char *update_dir;
+    List *entries;
+{
+
+    /* Delete the ignore list if it hasn't already been done.  */
+    if (ignlist)
+	dellist (&ignlist);
+    return err;
+}
+
 /*
  * Send each option in a string to the server, one by one.
  * This assumes that the options are separated by spaces, for example
@@ -5498,7 +5521,7 @@
     args.backup_modified = flags & BACKUP_MODIFIED_FILES;
     err = start_recursion
 	(send_fileproc, send_filesdoneproc,
-	 send_dirent_proc, (DIRLEAVEPROC)NULL, (void *) &args,
+	 send_dirent_proc, send_dirleave_proc, (void *) &args,
 	 argc, argv, local, W_LOCAL, aflag, 0, (char *)NULL, 0);
     if (err)
 	error_exit ();

--8YS31HITAU2FU7OVMXXZ
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/src/root.c
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/src/root.c
============================================================
$ cvs diff -u -r1.5 -r1.6 root.c
--- ossp-pkg/ossp-cvs/src/root.c	2000/06/22 13:13:12	1.5
+++ ossp-pkg/ossp-cvs/src/root.c	2000/06/24 21:12:55	1.6
@@ -177,9 +177,9 @@
    directories.  Then we can check against them when a remote user
    hands us a CVSROOT directory.  */
 
-static unsigned int root_allow_count;
+static int root_allow_count;
 static char **root_allow_vector;
-static unsigned int root_allow_size;
+static int root_allow_size;
 
 void
 root_allow_add (arg)
@@ -236,8 +236,7 @@
 root_allow_free ()
 {
     if (root_allow_vector != NULL)
-	free (root_allow_vector);
-    root_allow_count = 0;
+	free_names (&root_allow_count, root_allow_vector);
     root_allow_size = 0;
 }
 
@@ -245,7 +244,7 @@
 root_allow_ok (arg)
     char *arg;
 {
-    unsigned int i;
+    int i;
 
     if (root_allow_count == 0)
     {

--8YS31HITAU2FU7OVMXXZ
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/src/server.c
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/src/server.c
============================================================
$ cvs diff -u -r1.22 -r1.23 server.c
--- ossp-pkg/ossp-cvs/src/server.c	2000/06/22 15:11:19	1.22
+++ ossp-pkg/ossp-cvs/src/server.c	2000/06/24 21:12:55	1.23
@@ -1188,9 +1188,8 @@
 #endif
     if (status == 0)
     {
-	if (outside_root (repos))
-	    return;
-	dirswitch (arg, repos);
+	if (!outside_root (repos))
+	    dirswitch (arg, repos);
 	free (repos);
     }
     else if (status == -2)
@@ -1959,8 +1958,8 @@
 serve_notify (arg)
     char *arg;
 {
-    struct notify_note *new;
-    char *data;
+    struct notify_note *new = NULL;
+    char *data = NULL;
     int status;
 
     if (error_pending ()) return;
@@ -1968,27 +1967,26 @@
     if (outside_dir (arg))
 	return;
 
+    if (dir_name == NULL)
+	goto error;
+
     new = (struct notify_note *) malloc (sizeof (struct notify_note));
     if (new == NULL)
     {
 	pending_error = ENOMEM;
 	return;
     }
-    if (dir_name == NULL)
-	goto error;
     new->dir = malloc (strlen (dir_name) + 1);
-    if (new->dir == NULL)
-    {
-	pending_error = ENOMEM;
-	return;
-    }
-    strcpy (new->dir, dir_name);
     new->filename = malloc (strlen (arg) + 1);
-    if (new->filename == NULL)
+    if (new->dir == NULL || new->filename == NULL)
     {
 	pending_error = ENOMEM;
+	if (new->dir != NULL)
+	    free (new->dir);
+	free (new);
 	return;
     }
+    strcpy (new->dir, dir_name);
     strcpy (new->filename, arg);
 
     status = buf_read_line (buf_from_net, &data, (int *) NULL);
@@ -2014,6 +2012,9 @@
 		}
 	    }
 	}
+	free (new->filename);
+	free (new->dir);
+	free (new);
     }
     else
     {
@@ -2065,6 +2066,14 @@
     if (alloc_pending (80))
 	strcpy (pending_error_text,
 		"E Protocol error; misformed Notify request");
+    if (data != NULL)
+	free (data);
+    if (new != NULL)
+    {
+	free (new->filename);
+	free (new->dir);
+	free (new);
+    }
     return;
 }
 
@@ -5507,14 +5516,14 @@
 	    /* user exists and has a password */
 	    host_user = ((! strcmp (found_passwd,
                                     crypt (password, found_passwd)))
-                         ? username : NULL);
+                         ? xstrdup (username) : NULL);
             goto handle_return;
         }
 	else if (password && *password)
         {
 	    /* user exists and has no system password, but we got
 	       one as parameter */
-	    host_user = username;
+	    host_user = xstrdup (username);
             goto handle_return;
         }
 	else
@@ -5752,6 +5761,7 @@
 
     /* Switch to run as this user. */
     switch_to_user (host_user);
+    free (host_user);
     free (tmp);
     free (repository);
     free (username);

--8YS31HITAU2FU7OVMXXZ
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/ossp-cvs/src/update.c
Content-Disposition: attachment

Index: ossp-pkg/ossp-cvs/src/update.c
============================================================
$ cvs diff -u -r1.7 -r1.8 update.c
--- ossp-pkg/ossp-cvs/src/update.c	2000/06/22 15:11:19	1.7
+++ ossp-pkg/ossp-cvs/src/update.c	2000/06/24 21:12:55	1.8
@@ -277,26 +277,23 @@
 		option_with_arg ("-j", join_rev2);
 	    wrap_send ();
 
-	    /* If the server supports the command "update-patches", that means
-	       that it knows how to handle the -u argument to update, which
-	       means to send patches instead of complete files.
-
-	       We don't send -u if failed_patches != NULL, so that the
-	       server doesn't try to send patches which will just fail
-	       again.  At least currently, the client also clobbers the
-	       file and tells the server it is lost, which also will get
-	       a full file instead of a patch, but it seems clean to omit
-	       -u.  */
-	    if (failed_patches == NULL)
+	    if (failed_patches_count == 0)
 	    {
+                unsigned int flags = 0;
+
+		/* If the server supports the command "update-patches", that 
+		   means that it knows how to handle the -u argument to update,
+		   which means to send patches instead of complete files.
+
+		   We don't send -u if failed_patches != NULL, so that the
+		   server doesn't try to send patches which will just fail
+		   again.  At least currently, the client also clobbers the
+		   file and tells the server it is lost, which also will get
+		   a full file instead of a patch, but it seems clean to omit
+		   -u.  */
 		if (supported_request ("update-patches"))
 		    send_arg ("-u");
-	    }
 
-	    if (failed_patches == NULL)
-	    {
-                unsigned int flags = 0;
-                
                 if (update_build_dirs)
                     flags |= SEND_BUILD_DIRS;
 
@@ -332,11 +329,9 @@
 		send_files (failed_patches_count, failed_patches, local,
 			    aflag, update_build_dirs ? SEND_BUILD_DIRS : 0);
 		send_file_names (failed_patches_count, failed_patches, 0);
+		free_names (&failed_patches_count, failed_patches);
 	    }
 
-	    failed_patches = NULL;
-	    failed_patches_count = 0;
-
 	    send_to_server ("update\012", 0);
 
 	    status = get_responses_and_close ();
@@ -355,13 +350,15 @@
 	       conflict-and-patch-failed case.  */
 
 	    if (status != 0
-		&& (failed_patches == NULL || pass > 1))
+		&& (failed_patches_count == 0 || pass > 1))
 	    {
+		if (failed_patches_count > 0)
+		    free_names (&failed_patches_count, failed_patches);
 		return status;
 	    }
 
 	    ++pass;
-	} while (failed_patches != NULL);
+	} while (failed_patches_count > 0);
 
 	return 0;
     }
--8YS31HITAU2FU7OVMXXZ--


From ossp-cvs-owner@ossp.org  Sun Jun 25 15:33:41 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5PDXeO26850; Sun, 25 Jun 2000 15:33:40 +0200 (CEST)
Date: Sun, 25 Jun 2000 15:33:40 +0200 (CEST)
Message-Id: <200006251333.e5PDXeO26850@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="1OVFKT0A8UCST5TC5OPQ"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--1OVFKT0A8UCST5TC5OPQ
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: CVSROOT                          Date:   25-Jun-2000 15:33:40
Branch: HEAD                             Handle: 2000062514333900

Modified files:
  CVSROOT                 modules

Log:
  Update cvs path

Summary:
  Revision    Changes     Path
  1.18        +1  -1      CVSROOT/modules
____________________________________________________________________________

--1OVFKT0A8UCST5TC5OPQ
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to CVSROOT/modules
Content-Disposition: attachment

Index: CVSROOT/modules
============================================================
$ cvs diff -u -r1.17 -r1.18 modules
--- CVSROOT/modules	2000/06/21 07:52:15	1.17
+++ CVSROOT/modules	2000/06/25 13:33:39	1.18
@@ -60,6 +60,6 @@
 ossp-play       ossp-play  
 
 #   the OSSP sub-modules
-ossp-cvs        ossp-pkg/ossp-cvs
+cvs             ossp-pkg/cvs
 shiela          ossp-pkg/shiela
 
--1OVFKT0A8UCST5TC5OPQ--


From ossp-cvs-owner@ossp.org  Sun Jun 25 15:35:52 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5PDZpN27039; Sun, 25 Jun 2000 15:35:51 +0200 (CEST)
Date: Sun, 25 Jun 2000 15:35:51 +0200 (CEST)
Message-Id: <200006251335.e5PDZpN27039@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="2QQKXHRUKE8NFKVO3AMU"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--2QQKXHRUKE8NFKVO3AMU
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: CVSROOT                          Date:   25-Jun-2000 15:35:50
Branch: HEAD                             Handle: 2000062514355000

Modified files:
  CVSROOT                 modules

Log:
  *** empty log message ***

Summary:
  Revision    Changes     Path
  1.19        +1  -0      CVSROOT/modules
____________________________________________________________________________

--2QQKXHRUKE8NFKVO3AMU
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to CVSROOT/modules
Content-Disposition: attachment

Index: CVSROOT/modules
============================================================
$ cvs diff -u -r1.18 -r1.19 modules
--- CVSROOT/modules	2000/06/25 13:33:39	1.18
+++ CVSROOT/modules	2000/06/25 13:35:50	1.19
@@ -63,3 +63,4 @@
 cvs             ossp-pkg/cvs
 shiela          ossp-pkg/shiela
 
+
--2QQKXHRUKE8NFKVO3AMU--


From ossp-cvs-owner@ossp.org  Sun Jun 25 15:36:07 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5PDa5527089; Sun, 25 Jun 2000 15:36:05 +0200 (CEST)
Date: Sun, 25 Jun 2000 15:36:05 +0200 (CEST)
Message-Id: <200006251336.e5PDa5527089@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="764OAKXYII9MMU2MFSP0"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--764OAKXYII9MMU2MFSP0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: CVSROOT                          Date:   25-Jun-2000 15:36:05
Branch: HEAD                             Handle: 2000062514360400

Modified files:
  CVSROOT                 modules

Log:
  *** empty log message ***

Summary:
  Revision    Changes     Path
  1.20        +0  -1      CVSROOT/modules
____________________________________________________________________________

--764OAKXYII9MMU2MFSP0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to CVSROOT/modules
Content-Disposition: attachment

Index: CVSROOT/modules
============================================================
$ cvs diff -u -r1.19 -r1.20 modules
--- CVSROOT/modules	2000/06/25 13:35:50	1.19
+++ CVSROOT/modules	2000/06/25 13:36:04	1.20
@@ -63,4 +63,3 @@
 cvs             ossp-pkg/cvs
 shiela          ossp-pkg/shiela
 
-
--764OAKXYII9MMU2MFSP0--


From ossp-cvs-owner@ossp.org  Sun Jun 25 20:54:17 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5PIsGg77306; Sun, 25 Jun 2000 20:54:16 +0200 (CEST)
Date: Sun, 25 Jun 2000 20:54:16 +0200 (CEST)
Message-Id: <200006251854.e5PIsGg77306@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="YR3FKC4HV9CROES2G79T"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvs/man cvs.1
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--YR3FKC4HV9CROES2G79T
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: ossp-pkg                         Date:   25-Jun-2000 20:54:16
Branch: HEAD                             Handle: 2000062519541600

Modified files:
  ossp-pkg/cvs/man        cvs.1

Log:
  *** empty log message ***

Summary:
  Revision    Changes     Path
  1.2         +26 -21     ossp-pkg/cvs/man/cvs.1
____________________________________________________________________________

--YR3FKC4HV9CROES2G79T
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/cvs/man/cvs.1
Content-Disposition: attachment

Index: ossp-pkg/cvs/man/cvs.1
============================================================
$ cvs diff -u -r1.1.1.2 -r1.2 cvs.1
--- ossp-pkg/cvs/man/cvs.1	2000/05/04 19:29:43	1.1.1.2
+++ ossp-pkg/cvs/man/cvs.1	2000/06/25 18:54:16	1.2
@@ -15,14 +15,10 @@
 .SH "NAME"
 cvs \- Concurrent Versions System
 .SH "SYNOPSIS"
-.TP
-\fBcvs\fP [ \fIcvs_options\fP ]
-.I cvs_command
-[
-.I command_options
-] [
-.I command_args
-]
+\fBcvs\fP [\fIcvs_options\fP]
+\fIcvs_command\fP
+[\fIcommand_options\fP] 
+[\fIcommand_args\fP]
 .SH "NOTE"
 This manpage is a summary of some of the features of
 .B cvs
@@ -218,6 +214,11 @@
 but only to issue reports; do not remove, update, or merge any
 existing files, or create any new files.
 .TP
+.B \-u
+Do not create any lock files in the repository. This useful for working with
+read-only repositories (for instance, repositories mounted from read-only
+media like CDROMs).
+.TP
 .B \-t
 Trace program execution; display messages showing the steps of
 .B cvs
@@ -273,7 +274,8 @@
 .SH "CVS STARTUP FILE"
 Normally, when CVS starts up, it reads the
 .I .cvsrc
-file from the home directory of the user reading it.  This startup
+file from all parent directories of the current
+working directory plus from the home directory of the user. This startup
 procedure can be turned off with the
 .B \-f
 flag.
--YR3FKC4HV9CROES2G79T--


From ossp-cvs-owner@ossp.org  Sun Jun 25 20:55:34 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5PItXZ77424; Sun, 25 Jun 2000 20:55:33 +0200 (CEST)
Date: Sun, 25 Jun 2000 20:55:33 +0200 (CEST)
Message-Id: <200006251855.e5PItXZ77424@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="D7F26TH3VH24AQO8PZIG"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvs shtool
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--D7F26TH3VH24AQO8PZIG
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: ossp-pkg                         Date:   25-Jun-2000 20:55:33
Branch: HEAD                             Handle: 2000062519553200

Modified files:
  ossp-pkg/cvs            shtool

Log:
  Update shtool

Summary:
  Revision    Changes     Path
  1.3         +114 -86    ossp-pkg/cvs/shtool
____________________________________________________________________________

--D7F26TH3VH24AQO8PZIG
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/cvs/shtool
Content-Disposition: attachment

Index: ossp-pkg/cvs/shtool
============================================================
$ cvs diff -u -r1.2 -r1.3 shtool
--- ossp-pkg/cvs/shtool	2000/05/05 14:47:02	1.2
+++ ossp-pkg/cvs/shtool	2000/06/25 18:55:32	1.3
@@ -6,8 +6,8 @@
 ##  See http://www.gnu.org/software/shtool/ for more information.
 ##  See ftp://ftp.gnu.org/gnu/shtool/ for latest version.
 ##
-##  Version 1.4.9 (16-Apr-2000)
-##  Ingredients: 5/17 available modules
+##  Version:  1.4.10 (18-Jun-2000)
+##  Contents: 5/17 available modules
 ##
 
 ##
@@ -65,7 +65,7 @@
     exit 1
 fi
 if [ ".$1" = ".-h" -o ".$1" = ".--help" ]; then
-    echo "This is GNU shtool, version 1.4.9 (16-Apr-2000)"
+    echo "This is GNU shtool, version 1.4.10 (18-Jun-2000)"
     echo "Copyright (c) 1994-2000 Ralf S. Engelschall <rse@engelschall.com>"
     echo "Report bugs to <bug-shtool@gnu.org>"
     echo ''
@@ -79,7 +79,7 @@
     echo 'Available <cmd-name> [<cmd-options>] [<cmd-args>]:'
     echo '  echo     [-n] [-e] [<str> ...]'
     echo '  install  [-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>]'
-    echo '           [-e<ext>] <file> <path>'
+    echo '           [-e<ext>] <file> [<file> ...] <path>'
     echo '  mkdir    [-t] [-f] [-p] [-m<mode>] <dir> [<dir> ...]'
     echo '  fixperm  [-v] [-t] <path> [<path> ...]'
     echo '  tarball  [-t] [-v] [-o <tarball>] [-c <prog>] [-d <dir>] [-u'
@@ -104,7 +104,7 @@
     exit 0
 fi
 if [ ".$1" = ".-v" -o ".$1" = ."--version" ]; then
-    echo "GNU shtool 1.4.9 (16-Apr-2000)"
+    echo "GNU shtool 1.4.10 (18-Jun-2000)"
     exit 0
 fi
 if [ ".$1" = ".-d" -o ".$1" = ."--debug" ]; then
@@ -142,8 +142,8 @@
         ;;
     install )
         str_tool="install"
-        str_usage="[-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>] [-e<ext>] <file> <path>"
-        arg_spec="2="
+        str_usage="[-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>] [-e<ext>] <file> [<file> ...] <path>"
+        arg_spec="2+"
         opt_spec="v.t.c.C.s.m:o:g:e:"
         opt_v=no
         opt_t=no
@@ -573,104 +573,132 @@
     ##  Originally written for shtool
     ##
     
-    src="$1"
-    dst="$2"
-    
-    #  If destination is a directory, append the input filename
-    if [ -d $dst ]; then
-        dst=`echo "$dst" | sed -e 's:/$::'`
-        dstfile=`echo "$src" | sed -e 's;.*/\([^/]*\)$;\1;'`
-        dst="$dst/$dstfile"
-    fi
+    #   determine source(s) and destination 
+    argc=$#
+    srcs=""
+    while [ $# -gt 1 ]; do
+        srcs="$srcs $1"
+        shift
+    done
+    dstpath="$1"
     
-    #  Add a possible extension to src and dst
-    if [ ".$opt_e" != . ]; then
-        src="$src$opt_e"
-        dst="$dst$opt_e"
+    #   type check for destination
+    dstisdir=0
+    if [ -d $dstpath ]; then
+        dstpath=`echo "$dstpath" | sed -e 's:/$::'`
+        dstisdir=1
     fi
     
-    #  Check for correct arguments
-    if [ ".$src" = ".$dst" ]; then
-        echo "$msgprefix:Error: source and destination are the same" 1>&2
+    #   consistency check for destination
+    if [ $argc -gt 2 -a $dstisdir = 0 ]; then
+        echo "$msgprefix:Error: multiple sources require destination to be directory" 1>&2
         exit 1
     fi
     
-    #  Make a temp file name in the destination directory
-    dstdir=`echo $dst | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;' -e 's;^$;.;'`
-    dsttmp="$dstdir/#INST@$$#"
+    #   iterate over all source(s)
+    for src in $srcs; do
+        dst=$dstpath
     
-    #  Verbosity
-    if [ ".$opt_v" = .yes ]; then
-        echo "$src -> $dst" 1>&2
-    fi
+        #  If destination is a directory, append the input filename
+        if [ $dstisdir = 1 ]; then
+            dstfile=`echo "$src" | sed -e 's;.*/\([^/]*\)$;\1;'`
+            dst="$dst/$dstfile"
+        fi
     
-    #  Copy or move the file name to the temp name
-    #  (because we might be not allowed to change the source)
-    if [ ".$opt_C" = .yes ]; then
-        opt_c=yes
-    fi
-    if [ ".$opt_c" = .yes ]; then
-        if [ ".$opt_t" = .yes ]; then
-            echo "cp $src $dsttmp" 1>&2
+        #  Add a possible extension to src and dst
+        if [ ".$opt_e" != . ]; then
+            src="$src$opt_e"
+            dst="$dst$opt_e"
         fi
-        cp $src $dsttmp || exit $?
-    else
-        if [ ".$opt_t" = .yes ]; then
-            echo "mv $src $dsttmp" 1>&2
+    
+        #  Check for correct arguments
+        if [ ".$src" = ".$dst" ]; then
+            echo "$msgprefix:Warning: source and destination are the same - skipped" 1>&2
+            continue
         fi
-        mv $src $dsttmp || exit $?
-    fi
+        if [ -d "$src" ]; then
+            echo "$msgprefix:Warning: source \`$src' is a directory - skipped" 1>&2
+            continue
+        fi
     
-    #  Adjust the target file
-    #  (we do chmod last to preserve setuid bits)
-    if [ ".$opt_s" = .yes ]; then
-        if [ ".$opt_t" = .yes ]; then
-            echo "strip $dsttmp" 1>&2
+        #  Make a temp file name in the destination directory
+        dsttmp=`echo $dst |\
+                sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;' -e 's;^$;.;' \
+                    -e "s;\$;/#INST@$$#;"`
+    
+        #  Verbosity
+        if [ ".$opt_v" = .yes ]; then
+            echo "$src -> $dst" 1>&2
+        fi
+    
+        #  Copy or move the file name to the temp name
+        #  (because we might be not allowed to change the source)
+        if [ ".$opt_C" = .yes ]; then
+            opt_c=yes
+        fi
+        if [ ".$opt_c" = .yes ]; then
+            if [ ".$opt_t" = .yes ]; then
+                echo "cp $src $dsttmp" 1>&2
+            fi
+            cp $src $dsttmp || exit $?
+        else
+            if [ ".$opt_t" = .yes ]; then
+                echo "mv $src $dsttmp" 1>&2
+            fi
+            mv $src $dsttmp || exit $?
         fi
-        strip $dsttmp || exit $?
-    fi
-    if [ ".$opt_o" != . ]; then
-        if [ ".$opt_t" = .yes ]; then
-            echo "chown $opt_o $dsttmp" 1>&2
+    
+        #  Adjust the target file
+        #  (we do chmod last to preserve setuid bits)
+        if [ ".$opt_s" = .yes ]; then
+            if [ ".$opt_t" = .yes ]; then
+                echo "strip $dsttmp" 1>&2
+            fi
+            strip $dsttmp || exit $?
         fi
-        chown $opt_o $dsttmp || exit $?
-    fi
-    if [ ".$opt_g" != . ]; then
-        if [ ".$opt_t" = .yes ]; then
-            echo "chgrp $opt_g $dsttmp" 1>&2
+        if [ ".$opt_o" != . ]; then
+            if [ ".$opt_t" = .yes ]; then
+                echo "chown $opt_o $dsttmp" 1>&2
+            fi
+            chown $opt_o $dsttmp || exit $?
         fi
-        chgrp $opt_g $dsttmp || exit $?
-    fi
-    if [ ".$opt_m" != . ]; then
-        if [ ".$opt_t" = .yes ]; then
-            echo "chmod $opt_m $dsttmp" 1>&2
+        if [ ".$opt_g" != . ]; then
+            if [ ".$opt_t" = .yes ]; then
+                echo "chgrp $opt_g $dsttmp" 1>&2
+            fi
+            chgrp $opt_g $dsttmp || exit $?
         fi
-        chmod $opt_m $dsttmp || exit $?
-    fi
-    
-    #   Determine whether to do a quick install
-    #   (has to be done _after_ the strip was already done)
-    quick=no
-    if [ ".$opt_C" = .yes ]; then
-        if [ -r $dst ]; then
-            if cmp -s $src $dst; then
-                quick=yes
+        if [ ".$opt_m" != . ]; then
+            if [ ".$opt_t" = .yes ]; then
+                echo "chmod $opt_m $dsttmp" 1>&2
             fi
+            chmod $opt_m $dsttmp || exit $?
         fi
-    fi
     
-    #   Finally install the file to the real destination
-    if [ $quick = yes ]; then
-        if [ ".$opt_t" = .yes ]; then
-            echo "rm -f $dsttmp" 1>&2
+        #   Determine whether to do a quick install
+        #   (has to be done _after_ the strip was already done)
+        quick=no
+        if [ ".$opt_C" = .yes ]; then
+            if [ -r $dst ]; then
+                if cmp -s $src $dst; then
+                    quick=yes
+                fi
+            fi
         fi
-        rm -f $dsttmp
-    else
-        if [ ".$opt_t" = .yes ]; then
-            echo "rm -f $dst && mv $dsttmp $dst" 1>&2
+    
+        #   Finally install the file to the real destination
+        if [ $quick = yes ]; then
+            if [ ".$opt_t" = .yes ]; then
+                echo "rm -f $dsttmp" 1>&2
+            fi
+            rm -f $dsttmp
+        else
+            if [ ".$opt_t" = .yes ]; then
+                echo "rm -f $dst && mv $dsttmp $dst" 1>&2
+            fi
+            rm -f $dst && mv $dsttmp $dst
         fi
-        rm -f $dst && mv $dsttmp $dst
-    fi
+    done
     ;;
 
 mkdir )
@@ -685,7 +713,7 @@
     for p in ${1+"$@"}; do
         #   if the directory already exists...
         if [ -d "$p" ]; then
-            if [ ".$opt_f" = .no ]; then
+            if [ ".$opt_f" = .no ] && [ ".$opt_p" = .no ]; then
                 echo "$msgprefix:Error: directory already exists: $p" 1>&2
                 errstatus=1
                 break
--D7F26TH3VH24AQO8PZIG--


From ossp-cvs-owner@ossp.org  Mon Jun 26 21:17:21 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5QJHKb79724; Mon, 26 Jun 2000 21:17:20 +0200 (CEST)
Date: Mon, 26 Jun 2000 21:17:20 +0200 (CEST)
Message-Id: <200006261917.e5QJHKb79724@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="WQ3AJLR3EMN2BWP27SOP"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvs/src root.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--WQ3AJLR3EMN2BWP27SOP
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: ossp-pkg                         Date:   26-Jun-2000 21:17:20
Branch: HEAD                             Handle: 2000062620171900

Modified files:
  ossp-pkg/cvs/src        root.c

Log:
  *** empty log message ***

Summary:
  Revision    Changes     Path
  1.7         +1  -0      ossp-pkg/cvs/src/root.c
____________________________________________________________________________

--WQ3AJLR3EMN2BWP27SOP
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/cvs/src/root.c
Content-Disposition: attachment

Index: ossp-pkg/cvs/src/root.c
============================================================
$ cvs diff -u -r1.6 -r1.7 root.c
--- ossp-pkg/cvs/src/root.c	2000/06/24 21:12:55	1.6
+++ ossp-pkg/cvs/src/root.c	2000/06/26 19:17:19	1.7
@@ -1123,5 +1123,6 @@
     return 0;
 }
 
+
 #endif /* OSSP_PATCH_CVSROOT */
 
--WQ3AJLR3EMN2BWP27SOP--


From ossp-cvs-owner@ossp.org  Tue Jun 27 21:31:59 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e5RJVv784930; Tue, 27 Jun 2000 21:31:57 +0200 (CEST)
Date: Tue, 27 Jun 2000 21:31:57 +0200 (CEST)
Message-Id: <200006271931.e5RJVv784930@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="0QF2O86A3SXR4KRBL5J4"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvs/src root.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--0QF2O86A3SXR4KRBL5J4
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: ossp-pkg                         Date:   27-Jun-2000 21:31:57
Branch: HEAD                             Handle: 2000062720315700

Modified files:
  ossp-pkg/cvs/src        root.c

Log:
  *** empty log message ***

Summary:
  Revision    Changes     Path
  1.8         +40 -26     ossp-pkg/cvs/src/root.c
____________________________________________________________________________

--0QF2O86A3SXR4KRBL5J4
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/cvs/src/root.c
Content-Disposition: attachment

Index: ossp-pkg/cvs/src/root.c
============================================================
$ cvs diff -u -r1.7 -r1.8 root.c
--- ossp-pkg/cvs/src/root.c	2000/06/26 19:17:19	1.7
+++ ossp-pkg/cvs/src/root.c	2000/06/27 19:31:57	1.8
@@ -971,9 +971,9 @@
     };
     int mode = ROOT_MODE_UNKNOWN;
     char *rootfile;
-    char *rootfilebak;
+    char *rootfilebak = NULL;
     FILE *fp;
-    FILE *fpbak;
+    FILE *fpbak = NULL;
     int option;
     cvsroot_t *e;
     cvsroot_t E;
@@ -981,7 +981,8 @@
     int i;
     int rc;
     int verbose = 0;
-    int found;
+    int found = 0;
+    int oldexists;
 
     if (argc == -1)
         usage(root_usage);
@@ -1032,14 +1033,18 @@
             E.syncprog = "";
         if ((rootfile = cvsroot_filename()) == NULL)
             return 0;
-        rootfilebak = xmalloc(strlen(rootfile)+5);
-        strcpy(rootfilebak, rootfile);
-        strcat(rootfilebak, ".bak");
-        rename(rootfile, rootfilebak);
-        if ((fpbak = fopen(rootfilebak, "r")) == NULL) {
-            free(rootfile);
-            free(rootfilebak);
-            return 0;
+        oldexists = 0;
+        if (isfile(rootfile)) {
+            oldexists = 1;
+            rootfilebak = xmalloc(strlen(rootfile)+5);
+            strcpy(rootfilebak, rootfile);
+            strcat(rootfilebak, ".bak");
+            rename(rootfile, rootfilebak);
+            if ((fpbak = fopen(rootfilebak, "r")) == NULL) {
+                free(rootfile);
+                free(rootfilebak);
+                return 0;
+            }
         }
         if ((fp = fopen(rootfile, "w")) == NULL) {
             fclose(fpbak);
@@ -1047,25 +1052,29 @@
             free(rootfilebak);
             return 0;
         }
-        found = 0;
-        while ((e = cvsroot_entry_read(fpbak)) != NULL) {
-            if (strcmp(e->nickname, E.nickname) == 0) {
+        if (oldexists) {
+            found = 0;
+            while ((e = cvsroot_entry_read(fpbak)) != NULL) {
+                if (strcmp(e->nickname, E.nickname) == 0) {
+                    cvsroot_free(e);
+                    found = 1;
+                    break;
+                }
+                cvsroot_entry_write(fp, e);
                 cvsroot_free(e);
-                found = 1;
-                break;
             }
-            cvsroot_entry_write(fp, e);
-            cvsroot_free(e);
         }
         if (argc > 1)
             cvsroot_entry_write(fp, &E);
-        if (found) {
-            while ((e = cvsroot_entry_read(fpbak)) != NULL) {
-                cvsroot_entry_write(fp, e);
-                cvsroot_free(e);
+        if (oldexists) {
+            if (found) {
+                while ((e = cvsroot_entry_read(fpbak)) != NULL) {
+                    cvsroot_entry_write(fp, e);
+                    cvsroot_free(e);
+                }
             }
+            fclose(fpbak);
         }
-        fclose(fpbak);
         fclose(fp);
     }
     else if (mode == ROOT_MODE_EDIT_VISUAL) {
@@ -1090,7 +1099,7 @@
             if (argc == 0)
                 doit = 1;
             else {
-                for (i = 0; argv[i] != NULL; i++) {
+                for (i = 0; i < argc; i++) {
                     if (strcmp(argv[i], e->nickname) == 0) {
                         doit = 1;
                         break;
@@ -1111,8 +1120,13 @@
                                         e->nickname, e->masterpath, 
                                         e->slavepath, e->syncprog);
                 }
-                else {
-                    cvsroot_synchronize(e, 1);
+                else if (mode == ROOT_MODE_SYNC) {
+                    if (e->slavepath[0] == '\0' || e->syncprog[0] == '\0') {
+                        if (argc > 0)
+                            error(1, 0, "repository `%s' has no slave path or sync program defined", e->nickname);
+                    }
+                    else 
+                        cvsroot_synchronize(e, 1);
                 }
             }
             cvsroot_free(e);
--0QF2O86A3SXR4KRBL5J4--


From ossp-cvs-owner@ossp.org  Sat Jul  1 14:45:12 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e61CjAZ62652; Sat, 1 Jul 2000 14:45:10 +0200 (CEST)
Date: Sat, 1 Jul 2000 14:45:10 +0200 (CEST)
Message-Id: <200007011245.e61CjAZ62652@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ossp-cvs .cvsignore COPYING COPYING.LIB ChangeLog...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   01-Jul-2000 14:45:10
  Branch: vendor                           Handle: 19700101010000962451704

  Added files:              (Branch: vendor)
    ossp-pkg/ossp-cvs       .cvsignore COPYING COPYING.LIB ChangeLog.zoo
                            INSTALL Makefile.in NEWS README acconfig.h
                            config.h.in configure configure.in
    ossp-pkg/ossp-cvs/diff  .cvsignore Makefile.in analyze.c cmpbuf.c cmpbuf.h
                            context.c diagmeet.note diff.c diff.h diff3.c
                            diffrun.h dir.c ed.c ifdef.c io.c normal.c side.c
                            system.h util.c version.c
    ossp-pkg/ossp-cvs/doc   .cvsignore FAQ HACKING Makefile.in RCSFILES TESTS
                            TODO cvs-paper.ms cvs.texinfo cvsclient.texi
    ossp-pkg/ossp-cvs/lib   .cvsignore Makefile.in argmatch.c dup2.c fncase.c
                            fnmatch.c fnmatch.h ftruncate.c getdate.c
                            getdate.y getline.c getline.h getopt.c getopt.h
                            getopt1.c hostname.c md5.c md5.h memmove.c mkdir.c
                            regex.c regex.h rename.c savecwd.c savecwd.h
                            sighandle.c strerror.c stripslash.c strstr.c
                            strtoul.c system.h valloc.c wait.h waitpid.c
                            xgetwd.c yesno.c
    ossp-pkg/ossp-cvs/man   .cvsignore Makefile.in cvs.1 cvs.5
    ossp-pkg/ossp-cvs/src   .cvsignore Makefile.in add.c admin.c buffer.c
                            buffer.h checkin.c checkout.c classify.c client.c
                            client.h commit.c create_adm.c cvs.h cvsrc.c
                            diff.c edit.c edit.h entries.c error.c error.h
                            expand_path.c fileattr.c fileattr.h filesubr.c
                            find_names.c hardlink.c hardlink.h hash.c hash.h
                            history.c ignore.c import.c lock.c log.c login.c
                            logmsg.c main.c mkmodules.c modules.c myndbm.c
                            myndbm.h no_diff.c options.h.in parseinfo.c
                            patch.c rcs.c rcs.h rcscmds.c recurse.c release.c
                            remove.c repos.c root.c rtag.c run.c sanity.sh
                            scramble.c server.c server.h status.c subr.c tag.c
                            update.c update.h vers_ts.c version.c watch.c
                            watch.h wrapper.c zlib.c
    ossp-pkg/ossp-cvs/zlib  .cvsignore Makefile.in README adler32.c
                            algorithm.doc compress.c crc32.c deflate.c
                            deflate.h gzio.c infblock.c infblock.h infcodes.c
                            infcodes.h inffast.c inffast.h inflate.c
                            inftrees.c inftrees.h infutil.c infutil.h trees.c
                            uncompr.c zconf.h zlib.h zutil.c zutil.h

  Log:
    Import of vendor CVS version, snapshot 20000701
    
    [Release Tags: CVS_20000701]

  Summary:
    Revision    Changes     Path
    1.1.1.1     +17 -0      ossp-pkg/ossp-cvs/.cvsignore
    1.1.1.1     +251 -0     ossp-pkg/ossp-cvs/COPYING
    1.1.1.1     +484 -0     ossp-pkg/ossp-cvs/COPYING.LIB
    1.1.1.1     +700 -0     ossp-pkg/ossp-cvs/ChangeLog.zoo
    1.1.1.1     +418 -0     ossp-pkg/ossp-cvs/INSTALL
    1.1.1.1     +284 -0     ossp-pkg/ossp-cvs/Makefile.in
    1.1.1.1     +1106 -0    ossp-pkg/ossp-cvs/NEWS
    1.1.1.1     +197 -0     ossp-pkg/ossp-cvs/README
    1.1.1.1     +45 -0      ossp-pkg/ossp-cvs/acconfig.h
    1.1.1.1     +283 -0     ossp-pkg/ossp-cvs/config.h.in
    1.1.1.1     BLOB        ossp-pkg/ossp-cvs/configure
    1.1.1.1     +314 -0     ossp-pkg/ossp-cvs/configure.in
    1.1.1.1     +3  -0      ossp-pkg/ossp-cvs/diff/.cvsignore
    1.1.1.1     +102 -0     ossp-pkg/ossp-cvs/diff/Makefile.in
    1.1.1.1     +1085 -0    ossp-pkg/ossp-cvs/diff/analyze.c
    1.1.1.1     +38 -0      ossp-pkg/ossp-cvs/diff/cmpbuf.c
    1.1.1.1     +18 -0      ossp-pkg/ossp-cvs/diff/cmpbuf.h
    1.1.1.1     +462 -0     ossp-pkg/ossp-cvs/diff/context.c
    1.1.1.1     +71 -0      ossp-pkg/ossp-cvs/diff/diagmeet.note
    1.1.1.1     +1259 -0    ossp-pkg/ossp-cvs/diff/diff.c
    1.1.1.1     +354 -0     ossp-pkg/ossp-cvs/diff/diff.h
    1.1.1.1     +1903 -0    ossp-pkg/ossp-cvs/diff/diff3.c
    1.1.1.1     +69 -0      ossp-pkg/ossp-cvs/diff/diffrun.h
    1.1.1.1     +218 -0     ossp-pkg/ossp-cvs/diff/dir.c
    1.1.1.1     +198 -0     ossp-pkg/ossp-cvs/diff/ed.c
    1.1.1.1     +436 -0     ossp-pkg/ossp-cvs/diff/ifdef.c
    1.1.1.1     +712 -0     ossp-pkg/ossp-cvs/diff/io.c
    1.1.1.1     +69 -0      ossp-pkg/ossp-cvs/diff/normal.c
    1.1.1.1     +294 -0     ossp-pkg/ossp-cvs/diff/side.c
    1.1.1.1     +271 -0     ossp-pkg/ossp-cvs/diff/system.h
    1.1.1.1     +847 -0     ossp-pkg/ossp-cvs/diff/util.c
    1.1.1.1     +5  -0      ossp-pkg/ossp-cvs/diff/version.c
    1.1.1.1     +34 -0      ossp-pkg/ossp-cvs/doc/.cvsignore
    1.1.1.1     +8556 -0    ossp-pkg/ossp-cvs/doc/FAQ
    1.1.1.1     +271 -0     ossp-pkg/ossp-cvs/doc/HACKING
    1.1.1.1     +197 -0     ossp-pkg/ossp-cvs/doc/Makefile.in
    1.1.1.1     +276 -0     ossp-pkg/ossp-cvs/doc/RCSFILES
    1.1.1.1     +163 -0     ossp-pkg/ossp-cvs/doc/TESTS
    1.1.1.1     +1149 -0    ossp-pkg/ossp-cvs/doc/TODO
    1.1.1.1     +1069 -0    ossp-pkg/ossp-cvs/doc/cvs-paper.ms
    1.1.1.1     +13599 -0   ossp-pkg/ossp-cvs/doc/cvs.texinfo
    1.1.1.1     +2074 -0    ossp-pkg/ossp-cvs/doc/cvsclient.texi
    1.1.1.1     +2  -0      ossp-pkg/ossp-cvs/lib/.cvsignore
    1.1.1.1     +168 -0     ossp-pkg/ossp-cvs/lib/Makefile.in
    1.1.1.1     +85 -0      ossp-pkg/ossp-cvs/lib/argmatch.c
    1.1.1.1     +40 -0      ossp-pkg/ossp-cvs/lib/dup2.c
    1.1.1.1     +115 -0     ossp-pkg/ossp-cvs/lib/fncase.c
    1.1.1.1     +181 -0     ossp-pkg/ossp-cvs/lib/fnmatch.c
    1.1.1.1     +40 -0      ossp-pkg/ossp-cvs/lib/fnmatch.h
    1.1.1.1     +76 -0      ossp-pkg/ossp-cvs/lib/ftruncate.c
    1.1.1.1     +1598 -0    ossp-pkg/ossp-cvs/lib/getdate.c
    1.1.1.1     +1040 -0    ossp-pkg/ossp-cvs/lib/getdate.y
    1.1.1.1     +145 -0     ossp-pkg/ossp-cvs/lib/getline.c
    1.1.1.1     +18 -0      ossp-pkg/ossp-cvs/lib/getline.h
    1.1.1.1     +755 -0     ossp-pkg/ossp-cvs/lib/getopt.c
    1.1.1.1     +125 -0     ossp-pkg/ossp-cvs/lib/getopt.h
    1.1.1.1     +183 -0     ossp-pkg/ossp-cvs/lib/getopt1.c
    1.1.1.1     +45 -0      ossp-pkg/ossp-cvs/lib/hostname.c
    1.1.1.1     +332 -0     ossp-pkg/ossp-cvs/lib/md5.c
    1.1.1.1     +26 -0      ossp-pkg/ossp-cvs/lib/md5.h
    1.1.1.1     +54 -0      ossp-pkg/ossp-cvs/lib/memmove.c
    1.1.1.1     +125 -0     ossp-pkg/ossp-cvs/lib/mkdir.c
    1.1.1.1     +6376 -0    ossp-pkg/ossp-cvs/lib/regex.c
    1.1.1.1     +510 -0     ossp-pkg/ossp-cvs/lib/regex.h
    1.1.1.1     +80 -0      ossp-pkg/ossp-cvs/lib/rename.c
    1.1.1.1     +141 -0     ossp-pkg/ossp-cvs/lib/savecwd.c
    1.1.1.1     +20 -0      ossp-pkg/ossp-cvs/lib/savecwd.h
    1.1.1.1     +418 -0     ossp-pkg/ossp-cvs/lib/sighandle.c
    1.1.1.1     +808 -0     ossp-pkg/ossp-cvs/lib/strerror.c
    1.1.1.1     +40 -0      ossp-pkg/ossp-cvs/lib/stripslash.c
    1.1.1.1     +40 -0      ossp-pkg/ossp-cvs/lib/strstr.c
    1.1.1.1     +100 -0     ossp-pkg/ossp-cvs/lib/strtoul.c
    1.1.1.1     +533 -0     ossp-pkg/ossp-cvs/lib/system.h
    1.1.1.1     +25 -0      ossp-pkg/ossp-cvs/lib/valloc.c
    1.1.1.1     +39 -0      ossp-pkg/ossp-cvs/lib/wait.h
    1.1.1.1     +80 -0      ossp-pkg/ossp-cvs/lib/waitpid.c
    1.1.1.1     +67 -0      ossp-pkg/ossp-cvs/lib/xgetwd.c
    1.1.1.1     +38 -0      ossp-pkg/ossp-cvs/lib/yesno.c
    1.1.1.1     +1  -0      ossp-pkg/ossp-cvs/man/.cvsignore
    1.1.1.1     +91 -0      ossp-pkg/ossp-cvs/man/Makefile.in
    1.1.1.1     +2132 -0    ossp-pkg/ossp-cvs/man/cvs.1
    1.1.1.1     +325 -0     ossp-pkg/ossp-cvs/man/cvs.5
    1.1.1.1     +10 -0      ossp-pkg/ossp-cvs/src/.cvsignore
    1.1.1.1     +193 -0     ossp-pkg/ossp-cvs/src/Makefile.in
    1.1.1.1     +876 -0     ossp-pkg/ossp-cvs/src/add.c
    1.1.1.1     +851 -0     ossp-pkg/ossp-cvs/src/admin.c
    1.1.1.1     +1774 -0    ossp-pkg/ossp-cvs/src/buffer.c
    1.1.1.1     +152 -0     ossp-pkg/ossp-cvs/src/buffer.h
    1.1.1.1     +180 -0     ossp-pkg/ossp-cvs/src/checkin.c
    1.1.1.1     +1190 -0    ossp-pkg/ossp-cvs/src/checkout.c
    1.1.1.1     +470 -0     ossp-pkg/ossp-cvs/src/classify.c
    1.1.1.1     +5837 -0    ossp-pkg/ossp-cvs/src/client.c
    1.1.1.1     +201 -0     ossp-pkg/ossp-cvs/src/client.h
    1.1.1.1     +2372 -0    ossp-pkg/ossp-cvs/src/commit.c
    1.1.1.1     +188 -0     ossp-pkg/ossp-cvs/src/create_adm.c
    1.1.1.1     +883 -0     ossp-pkg/ossp-cvs/src/cvs.h
    1.1.1.1     +167 -0     ossp-pkg/ossp-cvs/src/cvsrc.c
    1.1.1.1     +996 -0     ossp-pkg/ossp-cvs/src/diff.c
    1.1.1.1     +1135 -0    ossp-pkg/ossp-cvs/src/edit.c
    1.1.1.1     +38 -0      ossp-pkg/ossp-cvs/src/edit.h
    1.1.1.1     +1185 -0    ossp-pkg/ossp-cvs/src/entries.c
    1.1.1.1     +237 -0     ossp-pkg/ossp-cvs/src/error.c
    1.1.1.1     +57 -0      ossp-pkg/ossp-cvs/src/error.h
    1.1.1.1     +335 -0     ossp-pkg/ossp-cvs/src/expand_path.c
    1.1.1.1     +652 -0     ossp-pkg/ossp-cvs/src/fileattr.c
    1.1.1.1     +136 -0     ossp-pkg/ossp-cvs/src/fileattr.h
    1.1.1.1     +973 -0     ossp-pkg/ossp-cvs/src/filesubr.c
    1.1.1.1     +425 -0     ossp-pkg/ossp-cvs/src/find_names.c
    1.1.1.1     +305 -0     ossp-pkg/ossp-cvs/src/hardlink.c
    1.1.1.1     +33 -0      ossp-pkg/ossp-cvs/src/hardlink.h
    1.1.1.1     +518 -0     ossp-pkg/ossp-cvs/src/hash.c
    1.1.1.1     +59 -0      ossp-pkg/ossp-cvs/src/hash.h
    1.1.1.1     +1598 -0    ossp-pkg/ossp-cvs/src/history.c
    1.1.1.1     +499 -0     ossp-pkg/ossp-cvs/src/ignore.c
    1.1.1.1     +1613 -0    ossp-pkg/ossp-cvs/src/import.c
    1.1.1.1     +941 -0     ossp-pkg/ossp-cvs/src/lock.c
    1.1.1.1     +1526 -0    ossp-pkg/ossp-cvs/src/log.c
    1.1.1.1     +502 -0     ossp-pkg/ossp-cvs/src/login.c
    1.1.1.1     +888 -0     ossp-pkg/ossp-cvs/src/logmsg.c
    1.1.1.1     +1157 -0    ossp-pkg/ossp-cvs/src/main.c
    1.1.1.1     +953 -0     ossp-pkg/ossp-cvs/src/mkmodules.c
    1.1.1.1     +1073 -0    ossp-pkg/ossp-cvs/src/modules.c
    1.1.1.1     +309 -0     ossp-pkg/ossp-cvs/src/myndbm.c
    1.1.1.1     +45 -0      ossp-pkg/ossp-cvs/src/myndbm.h
    1.1.1.1     +93 -0      ossp-pkg/ossp-cvs/src/no_diff.c
    1.1.1.1     +200 -0     ossp-pkg/ossp-cvs/src/options.h.in
    1.1.1.1     +426 -0     ossp-pkg/ossp-cvs/src/parseinfo.c
    1.1.1.1     +794 -0     ossp-pkg/ossp-cvs/src/patch.c
    1.1.1.1     +8547 -0    ossp-pkg/ossp-cvs/src/rcs.c
    1.1.1.1     +244 -0     ossp-pkg/ossp-cvs/src/rcs.h
    1.1.1.1     +667 -0     ossp-pkg/ossp-cvs/src/rcscmds.c
    1.1.1.1     +1214 -0    ossp-pkg/ossp-cvs/src/recurse.c
    1.1.1.1     +299 -0     ossp-pkg/ossp-cvs/src/release.c
    1.1.1.1     +278 -0     ossp-pkg/ossp-cvs/src/remove.c
    1.1.1.1     +206 -0     ossp-pkg/ossp-cvs/src/repos.c
    1.1.1.1     +591 -0     ossp-pkg/ossp-cvs/src/root.c
    1.1.1.1     +764 -0     ossp-pkg/ossp-cvs/src/rtag.c
    1.1.1.1     +451 -0     ossp-pkg/ossp-cvs/src/run.c
    1.1.1.1     +20593 -0   ossp-pkg/ossp-cvs/src/sanity.sh
    1.1.1.1     +245 -0     ossp-pkg/ossp-cvs/src/scramble.c
    1.1.1.1     +6478 -0    ossp-pkg/ossp-cvs/src/server.c
    1.1.1.1     +178 -0     ossp-pkg/ossp-cvs/src/server.h
    1.1.1.1     +356 -0     ossp-pkg/ossp-cvs/src/status.c
    1.1.1.1     +777 -0     ossp-pkg/ossp-cvs/src/subr.c
    1.1.1.1     +941 -0     ossp-pkg/ossp-cvs/src/tag.c
    1.1.1.1     +2868 -0    ossp-pkg/ossp-cvs/src/update.c
    1.1.1.1     +18 -0      ossp-pkg/ossp-cvs/src/update.h
    1.1.1.1     +403 -0     ossp-pkg/ossp-cvs/src/vers_ts.c
    1.1.1.1     +29 -0      ossp-pkg/ossp-cvs/src/version.c
    1.1.1.1     +530 -0     ossp-pkg/ossp-cvs/src/watch.c
    1.1.1.1     +52 -0      ossp-pkg/ossp-cvs/src/watch.h
    1.1.1.1     +614 -0     ossp-pkg/ossp-cvs/src/wrapper.c
    1.1.1.1     +662 -0     ossp-pkg/ossp-cvs/src/zlib.c
    1.1.1.1     +5  -0      ossp-pkg/ossp-cvs/zlib/.cvsignore
    1.1.1.1     +150 -0     ossp-pkg/ossp-cvs/zlib/Makefile.in
    1.1.1.1     +99 -0      ossp-pkg/ossp-cvs/zlib/README
    1.1.1.1     +48 -0      ossp-pkg/ossp-cvs/zlib/adler32.c
    1.1.1.1     +105 -0     ossp-pkg/ossp-cvs/zlib/algorithm.doc
    1.1.1.1     +57 -0      ossp-pkg/ossp-cvs/zlib/compress.c
    1.1.1.1     +162 -0     ossp-pkg/ossp-cvs/zlib/crc32.c
    1.1.1.1     +1207 -0    ossp-pkg/ossp-cvs/zlib/deflate.c
    1.1.1.1     +275 -0     ossp-pkg/ossp-cvs/zlib/deflate.h
    1.1.1.1     +523 -0     ossp-pkg/ossp-cvs/zlib/gzio.c
    1.1.1.1     +402 -0     ossp-pkg/ossp-cvs/zlib/infblock.c
    1.1.1.1     +37 -0      ossp-pkg/ossp-cvs/zlib/infblock.h
    1.1.1.1     +247 -0     ossp-pkg/ossp-cvs/zlib/infcodes.c
    1.1.1.1     +27 -0      ossp-pkg/ossp-cvs/zlib/infcodes.h
    1.1.1.1     +168 -0     ossp-pkg/ossp-cvs/zlib/inffast.c
    1.1.1.1     +17 -0      ossp-pkg/ossp-cvs/zlib/inffast.h
    1.1.1.1     +345 -0     ossp-pkg/ossp-cvs/zlib/inflate.c
    1.1.1.1     +470 -0     ossp-pkg/ossp-cvs/zlib/inftrees.c
    1.1.1.1     +59 -0      ossp-pkg/ossp-cvs/zlib/inftrees.h
    1.1.1.1     +87 -0      ossp-pkg/ossp-cvs/zlib/infutil.c
    1.1.1.1     +99 -0      ossp-pkg/ossp-cvs/zlib/infutil.h
    1.1.1.1     +1141 -0    ossp-pkg/ossp-cvs/zlib/trees.c
    1.1.1.1     +58 -0      ossp-pkg/ossp-cvs/zlib/uncompr.c
    1.1.1.1     +184 -0     ossp-pkg/ossp-cvs/zlib/zconf.h
    1.1.1.1     +780 -0     ossp-pkg/ossp-cvs/zlib/zlib.h
    1.1.1.1     +211 -0     ossp-pkg/ossp-cvs/zlib/zutil.c
    1.1.1.1     +203 -0     ossp-pkg/ossp-cvs/zlib/zutil.h
  ____________________________________________________________________________

  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/.cvsignore?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/COPYING?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/COPYING.LIB?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/ChangeLog.zoo?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/INSTALL?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/Makefile.in?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/NEWS?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/README?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/acconfig.h?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/config.h.in?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/configure?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/configure.in?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/diff/.cvsignore?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/diff/Makefile.in?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/diff/analyze.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/diff/cmpbuf.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/diff/cmpbuf.h?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/diff/context.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/diff/diagmeet.note?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/diff/diff.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/diff/diff.h?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/diff/diff3.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/diff/diffrun.h?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/diff/dir.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/diff/ed.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/diff/ifdef.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/diff/io.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/diff/normal.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/diff/side.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/diff/system.h?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/diff/util.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/diff/version.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/doc/.cvsignore?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/doc/FAQ?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/doc/HACKING?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/doc/Makefile.in?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/doc/RCSFILES?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/doc/TESTS?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/doc/TODO?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/doc/cvs-paper.ms?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/doc/cvs.texinfo?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/doc/cvsclient.texi?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/lib/.cvsignore?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/lib/Makefile.in?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/lib/argmatch.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/lib/dup2.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/lib/fncase.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/lib/fnmatch.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/lib/fnmatch.h?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/lib/ftruncate.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/lib/getdate.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/lib/getdate.y?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/lib/getline.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/lib/getline.h?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/lib/getopt.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/lib/getopt.h?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/lib/getopt1.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/lib/hostname.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/lib/md5.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/lib/md5.h?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/lib/memmove.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/lib/mkdir.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/lib/regex.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/lib/regex.h?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/lib/rename.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/lib/savecwd.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/lib/savecwd.h?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/lib/sighandle.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/lib/strerror.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/lib/stripslash.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/lib/strstr.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/lib/strtoul.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/lib/system.h?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/lib/valloc.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/lib/wait.h?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/lib/waitpid.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/lib/xgetwd.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/lib/yesno.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/man/.cvsignore?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/man/Makefile.in?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/man/cvs.1?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/man/cvs.5?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/.cvsignore?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/Makefile.in?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/add.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/admin.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/buffer.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/buffer.h?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/checkin.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/checkout.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/classify.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/client.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/client.h?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/commit.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/create_adm.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/cvs.h?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/cvsrc.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/diff.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/edit.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/edit.h?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/entries.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/error.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/error.h?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/expand_path.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/fileattr.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/fileattr.h?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/filesubr.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/find_names.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/hardlink.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/hardlink.h?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/hash.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/hash.h?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/history.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/ignore.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/import.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/lock.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/log.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/login.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/logmsg.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/main.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/mkmodules.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/modules.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/myndbm.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/myndbm.h?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/no_diff.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/options.h.in?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/parseinfo.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/patch.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/rcs.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/rcs.h?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/rcscmds.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/recurse.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/release.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/remove.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/repos.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/root.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/rtag.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/run.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/sanity.sh?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/scramble.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/server.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/server.h?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/status.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/subr.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/tag.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/update.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/update.h?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/vers_ts.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/version.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/watch.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/watch.h?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/wrapper.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/src/zlib.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/zlib/.cvsignore?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/zlib/Makefile.in?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/zlib/README?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/zlib/adler32.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/zlib/algorithm.doc?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/zlib/compress.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/zlib/crc32.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/zlib/deflate.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/zlib/deflate.h?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/zlib/gzio.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/zlib/infblock.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/zlib/infblock.h?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/zlib/infcodes.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/zlib/infcodes.h?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/zlib/inffast.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/zlib/inffast.h?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/zlib/inflate.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/zlib/inftrees.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/zlib/inftrees.h?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/zlib/infutil.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/zlib/infutil.h?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/zlib/trees.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/zlib/uncompr.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/zlib/zconf.h?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/zlib/zlib.h?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/zlib/zutil.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/ossp-cvs/zlib/zutil.h?cvsroot=ossp&r1=NONE&r2=1.1.1.1

From ossp-cvs-owner@ossp.org  Sat Jul  1 15:02:58 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e61D2vY64527; Sat, 1 Jul 2000 15:02:57 +0200 (CEST)
Date: Sat, 1 Jul 2000 15:02:57 +0200 (CEST)
Message-Id: <200007011302.e61D2vY64527@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvs .cvsignore COPYING COPYING.LIB ChangeLog.zoo ...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   01-Jul-2000 15:02:57
  Branch: vendor                           Handle: 1970010101000000

  Modified files:           (Branch: vendor)
    ossp-pkg/cvs/src        add.c checkout.c client.c create_adm.c cvs.h
                            error.c modules.c rcs.c rcs.h server.c update.c
  Touched files:            (Branch: vendor)
    ossp-pkg/cvs            .cvsignore COPYING COPYING.LIB ChangeLog.zoo
                            INSTALL Makefile.in NEWS README acconfig.h
                            config.h.in configure configure.in
    ossp-pkg/cvs/diff       .cvsignore Makefile.in analyze.c cmpbuf.c cmpbuf.h
                            context.c diagmeet.note diff.c diff.h diff3.c
                            diffrun.h dir.c ed.c ifdef.c io.c normal.c side.c
                            system.h util.c version.c
    ossp-pkg/cvs/doc        .cvsignore FAQ HACKING Makefile.in RCSFILES TESTS
                            TODO cvs-paper.ms cvs.texinfo cvsclient.texi
    ossp-pkg/cvs/lib        .cvsignore Makefile.in argmatch.c dup2.c fncase.c
                            fnmatch.c fnmatch.h ftruncate.c getdate.c
                            getdate.y getline.c getline.h getopt.c getopt.h
                            getopt1.c hostname.c md5.c md5.h memmove.c mkdir.c
                            regex.c regex.h rename.c savecwd.c savecwd.h
                            sighandle.c strerror.c stripslash.c strstr.c
                            strtoul.c system.h valloc.c wait.h waitpid.c
                            xgetwd.c yesno.c
    ossp-pkg/cvs/man        .cvsignore Makefile.in cvs.1 cvs.5
    ossp-pkg/cvs/src        .cvsignore Makefile.in admin.c buffer.c buffer.h
                            checkin.c classify.c client.h commit.c cvsrc.c
                            diff.c edit.c edit.h entries.c error.h
                            expand_path.c fileattr.c fileattr.h filesubr.c
                            find_names.c hardlink.c hardlink.h hash.c hash.h
                            history.c ignore.c import.c lock.c log.c login.c
                            logmsg.c main.c mkmodules.c myndbm.c myndbm.h
                            no_diff.c options.h.in parseinfo.c patch.c
                            rcscmds.c recurse.c release.c remove.c repos.c
                            root.c rtag.c run.c sanity.sh scramble.c server.h
                            status.c subr.c tag.c update.h vers_ts.c version.c
                            watch.c watch.h wrapper.c zlib.c
    ossp-pkg/cvs/zlib       .cvsignore Makefile.in README adler32.c
                            algorithm.doc compress.c crc32.c deflate.c
                            deflate.h gzio.c infblock.c infblock.h infcodes.c
                            infcodes.h inffast.c inffast.h inflate.c
                            inftrees.c inftrees.h infutil.c infutil.h trees.c
                            uncompr.c zconf.h zlib.h zutil.c zutil.h

  Log:
    Import of vendor CVS version, snapshot 20000701
    
    [Release Tags: CVS_20000701]

  Summary:
    Revision    Changes     Path
    1.1.1.4     +0  -0      ossp-pkg/cvs/src/add.c
    1.1.1.7     +0  -0      ossp-pkg/cvs/src/checkout.c
    1.1.1.7     +0  -0      ossp-pkg/cvs/src/client.c
    1.1.1.2     +0  -0      ossp-pkg/cvs/src/create_adm.c
    1.1.1.5     +0  -0      ossp-pkg/cvs/src/cvs.h
    1.1.1.3     +0  -0      ossp-pkg/cvs/src/error.c
    1.1.1.4     +0  -0      ossp-pkg/cvs/src/modules.c
    1.1.1.9     +0  -0      ossp-pkg/cvs/src/rcs.c
    1.1.1.4     +0  -0      ossp-pkg/cvs/src/rcs.h
    1.1.1.11    +0  -0      ossp-pkg/cvs/src/server.c
    1.1.1.7     +0  -0      ossp-pkg/cvs/src/update.c
  ____________________________________________________________________________

  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/add.c?cvsroot=ossp&r1=1.1.1.3&r2=1.1.1.4
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/checkout.c?cvsroot=ossp&r1=1.1.1.6&r2=1.1.1.7
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/client.c?cvsroot=ossp&r1=1.1.1.6&r2=1.1.1.7
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/create_adm.c?cvsroot=ossp&r1=1.1.1.1&r2=1.1.1.2
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/cvs.h?cvsroot=ossp&r1=1.1.1.4&r2=1.1.1.5
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/error.c?cvsroot=ossp&r1=1.1.1.2&r2=1.1.1.3
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/modules.c?cvsroot=ossp&r1=1.1.1.3&r2=1.1.1.4
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/rcs.c?cvsroot=ossp&r1=1.1.1.8&r2=1.1.1.9
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/rcs.h?cvsroot=ossp&r1=1.1.1.3&r2=1.1.1.4
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/server.c?cvsroot=ossp&r1=1.1.1.10&r2=1.1.1.11
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/update.c?cvsroot=ossp&r1=1.1.1.6&r2=1.1.1.7

From ossp-cvs-owner@ossp.org  Sat Jul  1 15:12:57 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e61DCt065285; Sat, 1 Jul 2000 15:12:55 +0200 (CEST)
Date: Sat, 1 Jul 2000 15:12:55 +0200 (CEST)
Message-Id: <200007011312.e61DCt065285@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="NBHC0SR66M9V5VQT8WGE"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvs/src add.c checkout.c client.c cvs.h modules.c...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--NBHC0SR66M9V5VQT8WGE
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: ossp-pkg                         Date:   01-Jul-2000 15:12:55
Branch: HEAD                             Handle: 2000070114125301

Modified files:
  ossp-pkg/cvs/src        add.c checkout.c client.c cvs.h modules.c rcs.c
                          server.c update.c

Log:
  Merge in conflicts

Summary:
  Revision    Changes     Path
  1.8         +2  -4      ossp-pkg/cvs/src/add.c
  1.8         +4  -3      ossp-pkg/cvs/src/checkout.c
  1.8         +10 -2      ossp-pkg/cvs/src/client.c
  1.16        +1  -1      ossp-pkg/cvs/src/cvs.h
  1.5         +1  -1      ossp-pkg/cvs/src/modules.c
  1.12        +23 -26     ossp-pkg/cvs/src/rcs.c
  1.24        +2  -0      ossp-pkg/cvs/src/server.c
  1.9         +2  -1      ossp-pkg/cvs/src/update.c
____________________________________________________________________________

--NBHC0SR66M9V5VQT8WGE
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/cvs/src/add.c
Content-Disposition: attachment

Index: ossp-pkg/cvs/src/add.c
============================================================
$ cvs diff -u -r1.7 -r1.8 add.c
--- ossp-pkg/cvs/src/add.c	2000/06/14 07:18:45	1.7
+++ ossp-pkg/cvs/src/add.c	2000/07/01 13:12:53	1.8
@@ -245,7 +245,7 @@
 		sprintf (rcsdir, "%s/%s", repository, p);
 
 		Create_Admin (p, argv[i], rcsdir, tag, date,
-			      nonbranch, 0);
+			      nonbranch, 0, 1);
 
 		if (found_slash)
 		    send_a_repository ("", repository, update_dir);
@@ -803,10 +803,8 @@
 
 #ifdef SERVER_SUPPORT
     if (!server_active)
-	Create_Admin (".", finfo->fullname, rcsdir, tag, date, nonbranch, 0);
-#else
-    Create_Admin (".", finfo->fullname, rcsdir, tag, date, nonbranch, 0);
 #endif
+        Create_Admin (".", finfo->fullname, rcsdir, tag, date, nonbranch, 0, 1);
     if (tag)
 	free (tag);
     if (date)

--NBHC0SR66M9V5VQT8WGE
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/cvs/src/checkout.c
Content-Disposition: attachment

Index: ossp-pkg/cvs/src/checkout.c
============================================================
$ cvs diff -u -r1.7 -r1.8 checkout.c
--- ossp-pkg/cvs/src/checkout.c	2000/06/16 19:57:37	1.7
+++ ossp-pkg/cvs/src/checkout.c	2000/07/01 13:12:53	1.8
@@ -479,7 +479,7 @@
 			     then rewrite it later via WriteTag, once
 			     we've had a chance to call RCS_nodeisbranch
 			     on each file.  */
-			  0, 1))
+			  0, 1, 1))
 	    return;
 
 	if (!noexec)
@@ -926,7 +926,8 @@
 		    error (1, 0, "there is no repository %s", repository);
 
 		Create_Admin (".", preload_update_dir, repository,
-			      (char *) NULL, (char *) NULL, 0, 0);
+			      (char *) NULL, (char *) NULL, 0, 0,
+			      m_type == CHECKOUT);
 		fp = open_file (CVSADM_ENTSTAT, "w+");
 		if (fclose(fp) == EOF)
 		    error(1, errno, "cannot close %s", CVSADM_ENTSTAT);
@@ -949,7 +950,7 @@
 				 then rewrite it later via WriteTag, once
 				 we've had a chance to call RCS_nodeisbranch
 				 on each file.  */
-			      0, 0);
+			      0, 0, m_type == CHECKOUT);
 	    }
 	}
 	else

--NBHC0SR66M9V5VQT8WGE
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/cvs/src/client.c
Content-Disposition: attachment

Index: ossp-pkg/cvs/src/client.c
============================================================
$ cvs diff -u -r1.7 -r1.8 client.c
--- ossp-pkg/cvs/src/client.c	2000/06/24 21:12:55	1.7
+++ ossp-pkg/cvs/src/client.c	2000/07/01 13:12:53	1.8
@@ -1112,7 +1112,7 @@
 	        strcpy (r, "/.");
 
 	    Create_Admin (".", ".", repo, (char *) NULL,
-			  (char *) NULL, 0, 1);
+			  (char *) NULL, 0, 1, 1);
 
 	    free (repo);
 	}
@@ -1249,7 +1249,7 @@
 			strcpy (r, reposdirname);
 
 		    Create_Admin (dir, dir, repo,
-				  (char *)NULL, (char *)NULL, 0, 0);
+				  (char *)NULL, (char *)NULL, 0, 0, 1);
 		    free (repo);
 
 		    b = strrchr (dir, '/');
@@ -2491,7 +2491,11 @@
 {
     char *prog;
     struct save_prog *p;
+
     read_line (&prog);
+    if (strcmp (command_name, "export") == 0)
+	return;
+
     p = (struct save_prog *) xmalloc (sizeof (struct save_prog));
     p->next = checkin_progs;
     p->dir = xstrdup (args);
@@ -2506,7 +2510,11 @@
 {
     char *prog;
     struct save_prog *p;
+
     read_line (&prog);
+    if (strcmp (command_name, "export") == 0)
+	return;
+
     p = (struct save_prog *) xmalloc (sizeof (struct save_prog));
     p->next = update_progs;
     p->dir = xstrdup (args);

--NBHC0SR66M9V5VQT8WGE
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/cvs/src/cvs.h
Content-Disposition: attachment

Index: ossp-pkg/cvs/src/cvs.h
============================================================
$ cvs diff -u -r1.15 -r1.16 cvs.h
--- ossp-pkg/cvs/src/cvs.h	2000/06/22 13:13:12	1.15
+++ ossp-pkg/cvs/src/cvs.h	2000/07/01 13:12:53	1.16
@@ -558,7 +558,7 @@
 time_t get_date PROTO((char *date, struct timeb *now));
 extern int Create_Admin PROTO ((char *dir, char *update_dir,
 				char *repository, char *tag, char *date,
-				int nonbranch, int warn));
+				int nonbranch, int warn, int dotemplate));
 extern int expand_at_signs PROTO ((char *, off_t, FILE *));
 
 /* Locking subsystem (implemented in lock.c).  */

--NBHC0SR66M9V5VQT8WGE
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/cvs/src/modules.c
Content-Disposition: attachment

Index: ossp-pkg/cvs/src/modules.c
============================================================
$ cvs diff -u -r1.4 -r1.5 modules.c
--- ossp-pkg/cvs/src/modules.c	2000/06/18 13:50:37	1.4
+++ ossp-pkg/cvs/src/modules.c	2000/07/01 13:12:53	1.5
@@ -553,7 +553,7 @@
 	    nullrepos = emptydir_name ();
 
 	    Create_Admin (".", dir,
-			  nullrepos, (char *) NULL, (char *) NULL, 0, 0);
+			  nullrepos, (char *) NULL, (char *) NULL, 0, 0, 1);
 	    if (!noexec)
 	    {
 		FILE *fp;

--NBHC0SR66M9V5VQT8WGE
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/cvs/src/rcs.c
Content-Disposition: attachment

Index: ossp-pkg/cvs/src/rcs.c
============================================================
$ cvs diff -u -r1.11 -r1.12 rcs.c
--- ossp-pkg/cvs/src/rcs.c	2000/06/22 15:10:32	1.11
+++ ossp-pkg/cvs/src/rcs.c	2000/07/01 13:12:53	1.12
@@ -159,6 +159,7 @@
 #define whitespace(c)	(spacetab[(unsigned char)c] != 0)
 
 static char *rcs_lockfile;
+static int rcs_lockfd = -1;
 
 /* A few generic thoughts on error handling, in particular the
    printing of unexpected characters that we find in the RCS file
@@ -7895,21 +7896,8 @@
 
     /* Find the delta node for this revision. */
     p = findnode (rcs->versions, rev);
-    if(p == NULL){
-        /* This shouldn't happen if the repository is in good shape.
-            We need to clean up the lockfile, but we can't call 
-            rcs_internal_unlockfile, because that assumes that things 
-            are behaving normally.  rcs_internal_unlockfile copies the
-            lockfile back onto the repository (,v) file.  
-            Since the repository file is corrupt, this isn't a terribly 
-            destructive thing to do, but just in case the user isn't 
-            maintaining backups, and the ,v file does contain useful 
-            information, we'll just delete the lockfile and let the 
-            user sort out the problem. */
- 
-        if (fclose(fp) == EOF)
-            error (1, 0, "error closing lock file %s", rcs_lockfile);
-        unlink_file(rcs_lockfile);
+    if (p == NULL)
+    {
         error (1, 0,
                "error parsing repository file %s, file may be corrupt.", 
                rcs->path);
@@ -8155,7 +8143,7 @@
 /*
  * Clean up temporary files
  */
-static RETSIGTYPE
+RETSIGTYPE
 rcs_cleanup ()
 {
     /* Note that the checks for existence_error are because we are
@@ -8169,11 +8157,18 @@
        of a just-created file) reentrancy won't be an issue.  */
     if (rcs_lockfile != NULL)
     {
-	if (unlink_file (rcs_lockfile) < 0
+	char *tmp = rcs_lockfile;
+	rcs_lockfile = NULL;
+	if (rcs_lockfd >= 0)
+	{
+	    if (close (rcs_lockfd) != 0)
+		error (0, errno, "error closing lock file %s", tmp);
+	    rcs_lockfd = -1;
+	}
+	if (unlink_file (tmp) < 0
 	    && !existence_error (errno))
-	    error (0, errno, "cannot remove %s", rcs_lockfile);
+	    error (0, errno, "cannot remove %s", tmp);
     }
-    rcs_lockfile = NULL;
 }
 
 /* RCS_internal_lockfile and RCS_internal_unlockfile perform RCS-style
@@ -8207,7 +8202,6 @@
 rcs_internal_lockfile (rcsfile)
     char *rcsfile;
 {
-    int fd;
     struct stat rstat;
     FILE *fp;
     static int first_call = 1;
@@ -8235,6 +8229,7 @@
 
     /* Get the lock file name: `,file,' for RCS file `file,v'. */
     assert (rcs_lockfile == NULL);
+    assert (rcs_lockfd < 0);
     rcs_lockfile = rcs_lockfilename (rcsfile);
 
     /* Use the existing RCS file mode, or read-only if this is a new
@@ -8261,11 +8256,11 @@
        rely on O_EXCL these days.  This might be true for unix (I
        don't really know), but I am still pretty skeptical in the case
        of the non-unix systems.  */
-    fd = open (rcs_lockfile,
-	       OPEN_BINARY | O_WRONLY | O_CREAT | O_EXCL | O_TRUNC,
-	       S_IRUSR | S_IRGRP | S_IROTH);
+    rcs_lockfd = open (rcs_lockfile,
+		       OPEN_BINARY | O_WRONLY | O_CREAT | O_EXCL | O_TRUNC,
+		       S_IRUSR | S_IRGRP | S_IROTH);
 
-    if (fd < 0)
+    if (rcs_lockfd < 0)
     {
 	error (1, errno, "could not open lock file `%s'", rcs_lockfile);
     }
@@ -8274,10 +8269,10 @@
     /* Because we change the modes later, we don't worry about
        this in the non-HAVE_FCHMOD case.  */
 #ifdef HAVE_FCHMOD
-    if (fchmod (fd, rstat.st_mode) < 0)
+    if (fchmod (rcs_lockfd, rstat.st_mode) < 0)
 	error (1, errno, "cannot change mode for %s", rcs_lockfile);
 #endif
-    fp = fdopen (fd, FOPEN_BINARY_WRITE);
+    fp = fdopen (rcs_lockfd, FOPEN_BINARY_WRITE);
     if (fp == NULL)
 	error (1, errno, "cannot fdopen %s", rcs_lockfile);
 
@@ -8290,6 +8285,7 @@
     char *rcsfile;
 {
     assert (rcs_lockfile != NULL);
+    assert (rcs_lockfd >= 0);
 
     /* Abort if we could not write everything successfully to LOCKFILE.
        This is not a great error-handling mechanism, but should prevent
@@ -8305,6 +8301,7 @@
 	error (1, 0, "error writing to lock file %s", rcs_lockfile);
     if (fclose (fp) == EOF)
 	error (1, errno, "error closing lock file %s", rcs_lockfile);
+    rcs_lockfd = -1;
 
     rename_file (rcs_lockfile, rcsfile);
 

--NBHC0SR66M9V5VQT8WGE
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/cvs/src/server.c
Content-Disposition: attachment

Index: ossp-pkg/cvs/src/server.c
============================================================
$ cvs diff -u -r1.23 -r1.24 server.c
--- ossp-pkg/cvs/src/server.c	2000/06/24 21:12:55	1.23
+++ ossp-pkg/cvs/src/server.c	2000/07/01 13:12:53	1.24
@@ -5261,9 +5261,11 @@
        the client.  */
     umask (0);
 
+#ifdef AUTH_SERVER_SUPPORT
     /* Make sure our CVS_Username has been set. */
     if (CVS_Username == NULL)
 	CVS_Username = xstrdup (username);
+#endif
       
 #if HAVE_PUTENV
     /* Set LOGNAME and USER in the environment, in case they are

--NBHC0SR66M9V5VQT8WGE
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/cvs/src/update.c
Content-Disposition: attachment

Index: ossp-pkg/cvs/src/update.c
============================================================
$ cvs diff -u -r1.8 -r1.9 update.c
--- ossp-pkg/cvs/src/update.c	2000/06/24 21:12:55	1.8
+++ ossp-pkg/cvs/src/update.c	2000/07/01 13:12:54	1.9
@@ -973,7 +973,8 @@
 			  /* This is a guess.  We will rewrite it later
 			     via WriteTag.  */
 			  0,
-			  0);
+			  0,
+			  1);
 	    rewrite_tag = 1;
 	    nonbranch = 0;
 	    Subdir_Register (entries, (char *) NULL, dir);
--NBHC0SR66M9V5VQT8WGE--


From ossp-cvs-owner@ossp.org  Mon Jul  3 11:31:45 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e639ViA51057; Mon, 3 Jul 2000 11:31:44 +0200 (CEST)
Date: Mon, 3 Jul 2000 11:31:44 +0200 (CEST)
Message-Id: <200007030931.e639ViA51057@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="IK7JREUMPJZ8DJ0W5MW1"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/eperl Makefile.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--IK7JREUMPJZ8DJ0W5MW1
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: ossp-pkg                         Date:   03-Jul-2000 11:31:44
Branch: HEAD                             Handle: 2000070310314400

Modified files:
  ossp-pkg/eperl          Makefile.in

Log:
  *** empty log message ***

Summary:
  Revision    Changes     Path
  1.8         +1  -1      ossp-pkg/eperl/Makefile.in
____________________________________________________________________________

--IK7JREUMPJZ8DJ0W5MW1
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/eperl/Makefile.in
Content-Disposition: attachment

Index: ossp-pkg/eperl/Makefile.in
============================================================
$ cvs diff -u -r1.7 -r1.8 Makefile.in
--- ossp-pkg/eperl/Makefile.in	2000/07/03 09:05:26	1.7
+++ ossp-pkg/eperl/Makefile.in	2000/07/03 09:31:44	1.8
@@ -54,7 +54,7 @@
 
 _BUILDDIST = \
 	$(SHTOOL) tarball -o $${_tarball} -d $${_distname} -u rse -g eperl \
-	                  -e 'CVS,\.cvsignore,\.configure,\.\#.*,\.[ao]$$' -c 'gzip --best' .
+	                  -e 'CVS,\.cvsignore,\.configure,\.\#.*,\.[ao]$$' -c 'gzip --best' .; \
     ls -l $${_tarball}
 
 _NEWVERS = \
--IK7JREUMPJZ8DJ0W5MW1--


From ossp-cvs-owner@ossp.org  Mon Jul  3 11:34:25 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e639YOL51276; Mon, 3 Jul 2000 11:34:24 +0200 (CEST)
Date: Mon, 3 Jul 2000 11:34:24 +0200 (CEST)
Message-Id: <200007030934.e639YOL51276@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="Y3Z2CWIHZ008QG7ZGVN4"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/eperl ChangeLog eperl_perl5.c eperl_sys.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--Y3Z2CWIHZ008QG7ZGVN4
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: ossp-pkg                         Date:   03-Jul-2000 11:34:24
Branch: HEAD                             Handle: 2000070310342300

Modified files:
  ossp-pkg/eperl          ChangeLog eperl_perl5.c eperl_sys.c

Log:
  *** empty log message ***

Summary:
  Revision    Changes     Path
  1.13        +3  -0      ossp-pkg/eperl/ChangeLog
  1.3         +5  -0      ossp-pkg/eperl/eperl_perl5.c
  1.7         +1  -1      ossp-pkg/eperl/eperl_sys.c
____________________________________________________________________________

--Y3Z2CWIHZ008QG7ZGVN4
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/eperl/ChangeLog
Content-Disposition: attachment

Index: ossp-pkg/eperl/ChangeLog
============================================================
$ cvs diff -u -r1.12 -r1.13 ChangeLog
--- ossp-pkg/eperl/ChangeLog	2000/07/03 09:20:02	1.12
+++ ossp-pkg/eperl/ChangeLog	2000/07/03 09:34:23	1.13
@@ -21,6 +21,9 @@
                
   Changes between 2.2.14 and 2.3.0 (12-Jun-1996 to 03-Jul-2000)
 
+   *) Ported to Perl 5.6.0
+      [Ralf S. Engelschall, 03-Jul-2000]
+
    *) Upgraded to GNU Shtool 1.5.0
       [Ralf S. Engelschall, 03-Jul-2000]
 

--Y3Z2CWIHZ008QG7ZGVN4
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/eperl/eperl_perl5.c
Content-Disposition: attachment

Index: ossp-pkg/eperl/eperl_perl5.c
============================================================
$ cvs diff -u -r1.2 -r1.3 eperl_perl5.c
--- ossp-pkg/eperl/eperl_perl5.c	2000/07/03 08:34:55	1.2
+++ ossp-pkg/eperl/eperl_perl5.c	2000/07/03 09:34:23	1.3
@@ -102,8 +102,13 @@
     dTHR;
 #endif
     ENTER;
+#if AC_perl_vnum >= 500600
+    save_hptr(&PL_curstash); 
+    PL_curstash = gv_stashpv(pname, TRUE);
+#else
     save_hptr(&curstash); 
     curstash = gv_stashpv(pname, TRUE);
+#endif
     sv_setpv(perl_get_sv(vname, TRUE), vvalue);
     LEAVE;
     return;

--Y3Z2CWIHZ008QG7ZGVN4
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/eperl/eperl_sys.c
Content-Disposition: attachment

Index: ossp-pkg/eperl/eperl_sys.c
============================================================
$ cvs diff -u -r1.6 -r1.7 eperl_sys.c
--- ossp-pkg/eperl/eperl_sys.c	2000/07/03 09:05:26	1.6
+++ ossp-pkg/eperl/eperl_sys.c	2000/07/03 09:34:23	1.7
@@ -268,7 +268,7 @@
     if (stringEQ(filename, "-")) {
         /* file is given on stdin */
         ptr_tmpfile = mytmpfile("ePerl.source");
-        stcpy(tmpfile, ptr_tmpfile);
+        strcpy(tmpfile, ptr_tmpfile);
         if ((fp = fopen(tmpfile, "w")) == NULL) {
             ePerl_SetError("Cannot open temporary source file %s for writing", tmpfile);
             CU(NULL);
--Y3Z2CWIHZ008QG7ZGVN4--


From ossp-cvs-owner@ossp.org  Mon Jul  3 11:35:35 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e639ZYg51385; Mon, 3 Jul 2000 11:35:34 +0200 (CEST)
Date: Mon, 3 Jul 2000 11:35:34 +0200 (CEST)
Message-Id: <200007030935.e639ZYg51385@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="03HX2L4G6VPMYMMP7J77"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/eperl Makefile.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--03HX2L4G6VPMYMMP7J77
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: ossp-pkg                         Date:   03-Jul-2000 11:35:34
Branch: HEAD                             Handle: 2000070310353300

Modified files:
  ossp-pkg/eperl          Makefile.in

Log:
  *** empty log message ***

Summary:
  Revision    Changes     Path
  1.9         +0  -1      ossp-pkg/eperl/Makefile.in
____________________________________________________________________________

--03HX2L4G6VPMYMMP7J77
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/eperl/Makefile.in
Content-Disposition: attachment

Index: ossp-pkg/eperl/Makefile.in
============================================================
$ cvs diff -u -r1.8 -r1.9 Makefile.in
--- ossp-pkg/eperl/Makefile.in	2000/07/03 09:31:44	1.8
+++ ossp-pkg/eperl/Makefile.in	2000/07/03 09:35:33	1.9
@@ -338,7 +338,6 @@
 
 distclean:
 	-rm -f eperl_perl5_sm.h
-	-rm -f eperl.1 eperl-*.tar.gz
 	-rm -f config_ac.h config_sc.h
 	-rm -f config.status config.cache config.log
 	-rm -f Makefile
--03HX2L4G6VPMYMMP7J77--


From ossp-cvs-owner@ossp.org  Mon Jul  3 11:47:24 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e639lN752297; Mon, 3 Jul 2000 11:47:23 +0200 (CEST)
Date: Mon, 3 Jul 2000 11:47:23 +0200 (CEST)
Message-Id: <200007030947.e639lN752297@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="3FOJRQWH94IKJWSS1JBJ"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str ChangeLog
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--3FOJRQWH94IKJWSS1JBJ
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: ossp-pkg                         Date:   03-Jul-2000 11:47:23
Branch: HEAD                             Handle: 2000070310472200

Modified files:
  ossp-pkg/str            ChangeLog

Log:
  *** empty log message ***

Summary:
  Revision    Changes     Path
  1.21        +1  -1      ossp-pkg/str/ChangeLog
____________________________________________________________________________

--3FOJRQWH94IKJWSS1JBJ
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/str/ChangeLog
Content-Disposition: attachment

Index: ossp-pkg/str/ChangeLog
============================================================
$ cvs diff -u -r1.20 -r1.21 ChangeLog
--- ossp-pkg/str/ChangeLog	2000/05/25 13:04:22	1.20
+++ ossp-pkg/str/ChangeLog	2000/07/03 09:47:22	1.21
@@ -9,7 +9,7 @@
 
  ChangeLog
 
- Changes between 0.9.3 and 0.9.4 (04-Feb-2000 to 26-May-2000):
+ Changes between 0.9.3 and 0.9.4 (04-Feb-2000 to 03-Jul-2000):
 
    *) Avoid isupper() check in str_tolower() macro, because it
       breaks for things like str_tolower(*s++). 
--3FOJRQWH94IKJWSS1JBJ--


From ossp-cvs-owner@ossp.org  Mon Jul  3 16:15:20 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e63EFIx71172; Mon, 3 Jul 2000 16:15:18 +0200 (CEST)
Date: Mon, 3 Jul 2000 16:15:18 +0200 (CEST)
Message-Id: <200007031415.e63EFIx71172@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="QN8DD4WCIA4DI16JQSKU"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sfio/etc config.guess config.sub ltconfig ltmain....
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--QN8DD4WCIA4DI16JQSKU
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: ossp-pkg                         Date:   03-Jul-2000 16:15:18
Branch: HEAD                             Handle: 2000070315151600

Modified files:
  ossp-pkg/sfio/etc       config.guess config.sub ltconfig ltmain.sh shtool

Log:
  Update GNU libtool and GNU shtool

Summary:
  Revision    Changes     Path
  1.2         +59 -163    ossp-pkg/sfio/etc/config.guess
  1.2         +11 -4      ossp-pkg/sfio/etc/config.sub
  1.2         +165 -68    ossp-pkg/sfio/etc/ltconfig
  1.2         +81 -32     ossp-pkg/sfio/etc/ltmain.sh
  1.3         +545 -486   ossp-pkg/sfio/etc/shtool
____________________________________________________________________________

--QN8DD4WCIA4DI16JQSKU
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/sfio/etc/config.guess
Content-Disposition: attachment

Index: ossp-pkg/sfio/etc/config.guess
============================================================
$ cvs diff -u -r1.1 -r1.2 config.guess
--- ossp-pkg/sfio/etc/config.guess	1999/11/12 14:42:20	1.1
+++ ossp-pkg/sfio/etc/config.guess	2000/07/03 14:15:16	1.2
@@ -226,7 +226,7 @@
 	exit 0 ;;
     # The situation for MiNT is a little confusing.  The machine name
     # can be virtually everything (everything which is not
-    # "atarist" or "atariste" at least should have a processor 
+    # "atarist" or "atariste" at least should have a processor
     # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
     # to the lowercase version "mint" (or "freemint").  Finally
     # the system name "TOS" denotes a system which is actually not
@@ -579,13 +579,22 @@
 	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
 	exit 0 ;;
     *:FreeBSD:*:*)
-	if test -x /usr/bin/objformat; then
-	    if test "elf" = "`/usr/bin/objformat`"; then
-		echo ${UNAME_MACHINE}-unknown-freebsdelf`echo ${UNAME_RELEASE}|sed -e 's/[-_].*//'`
-		exit 0
-	    fi
-	fi
-	echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+	# echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+        VERS=`echo ${UNAME_RELEASE} | sed -e 's/[-(].*//'`
+        MACH=`/sbin/sysctl -n hw.model`
+        ARCH='unknown'
+        case ${MACH} in
+           *386*       ) MACH="i386" ;;
+           *486*       ) MACH="i486" ;;
+           Pentium\ II*) MACH="i686" ;;
+           Pentium*    ) MACH="i586" ;;
+           Alpha*      ) MACH="alpha" ;;
+           *           ) MACH="$UNAME_MACHINE" ;;
+        esac
+        case ${MACH} in
+           i[0-9]86 ) ARCH="pc" ;;
+        esac
+        echo "${MACH}-${ARCH}-freebsd${VERS}"
 	exit 0 ;;
     *:NetBSD:*:*)
 	echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
@@ -618,176 +627,60 @@
 	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
 	exit 0 ;;
     *:Linux:*:*)
-	# uname on the ARM produces all sorts of strangeness, and we need to
-	# filter it out.
-	case "$UNAME_MACHINE" in
-	  armv*)		      UNAME_MACHINE=$UNAME_MACHINE ;;
-	  arm* | sa110*)	      UNAME_MACHINE="arm" ;;
+	# determine canonical machine name
+	MACHINE="$UNAME_MACHINE"
+	case "$MACHINE" in
+	    arm*|sa110*) MACHINE="arm" ;;
 	esac
+
+        # determine (distribution) vendor
+	VENDOR="gnu"
+	for tagfile in dummy `cd /etc && echo *-release *_version 2>/dev/null`; do
+	    test ! -f /etc/$tagfile && continue
+	    VENDOR=`echo $tagfile | sed -e 's/-release$//' -e 's/_version$//' |\
+	            tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+	done
+
+	# determine kernel version
+	KERNEL=`echo ${UNAME_RELEASE} | sed -e 's/^\([0-9]*\.[0-9]*\)\..*$/\1/'`
 
-	# The BFD linker knows what the default object file format is, so
-	# first see if it will tell us. cd to the root directory to prevent
-	# problems with other programs or directories called `ld' in the path.
-	ld_help_string=`cd /; ld --help 2>&1`
-	ld_supported_emulations=`echo $ld_help_string \
-			 | sed -ne '/supported emulations:/!d
-				    s/[ 	][ 	]*/ /g
-				    s/.*supported emulations: *//
-				    s/ .*//
-				    p'`
-        case "$ld_supported_emulations" in
-	  i?86linux)  echo "${UNAME_MACHINE}-pc-linux-gnuaout"      ; exit 0 ;;
-	  i?86coff)   echo "${UNAME_MACHINE}-pc-linux-gnucoff"      ; exit 0 ;;
-	  sparclinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
-	  armlinux)   echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
-	  m68klinux)  echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
-	  elf32ppc)
-		# Determine Lib Version
-		cat >$dummy.c <<EOF
+	# determine [g]libc version
+	cat >$dummy.c <<EOF
+#include <stdio.h>
 #include <features.h>
-#if defined(__GLIBC__)
-extern char __libc_version[];
-extern char __libc_release[];
-#endif
 main(argc, argv)
-     int argc;
-     char *argv[];
+int argc;
+char *argv[];
 {
-#if defined(__GLIBC__)
-  printf("%s %s\n", __libc_version, __libc_release);
+#if defined(__GLIBC__) && !defined(__GLIBC_MINOR__)
+    printf("%d", __GLIBC__);
+#elif defined(__GLIBC__) && defined(__GLIBC_MINOR__)
+    printf("%d.%d", __GLIBC__, __GLIBC_MINOR__);
+#elif defined(__GNU_LIBRARY__)
+    printf("%d", __GNU_LIBRARY__);
 #else
-  printf("unkown\n");
+    printf("1");
 #endif
-  return 0;
+    return 0;
 }
 EOF
-		LIBC=""
-		$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null
-		if test "$?" = 0 ; then
-			./$dummy | grep 1\.99 > /dev/null
-			if test "$?" = 0 ; then
-				LIBC="libc1"
-			fi
-		fi	
-		rm -f $dummy.c $dummy
-		echo powerpc-unknown-linux-gnu${LIBC} ; exit 0 ;;
-	esac
-
-	if test "${UNAME_MACHINE}" = "alpha" ; then
-		sed 's/^	//'  <<EOF >$dummy.s
-		.globl main
-		.ent main
-	main:
-		.frame \$30,0,\$26,0
-		.prologue 0
-		.long 0x47e03d80 # implver $0
-		lda \$2,259
-		.long 0x47e20c21 # amask $2,$1
-		srl \$1,8,\$2
-		sll \$2,2,\$2
-		sll \$0,3,\$0
-		addl \$1,\$0,\$0
-		addl \$2,\$0,\$0
-		ret \$31,(\$26),1
-		.end main
-EOF
-		LIBC=""
-		$CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
-		if test "$?" = 0 ; then
-			./$dummy
-			case "$?" in
-			7)
-				UNAME_MACHINE="alpha"
-				;;
-			15)
-				UNAME_MACHINE="alphaev5"
-				;;
-			14)
-				UNAME_MACHINE="alphaev56"
-				;;
-			10)
-				UNAME_MACHINE="alphapca56"
-				;;
-			16)
-				UNAME_MACHINE="alphaev6"
-				;;
-			esac
-
-			objdump --private-headers $dummy | \
-			  grep ld.so.1 > /dev/null
-			if test "$?" = 0 ; then
-				LIBC="libc1"
-			fi
-		fi
-		rm -f $dummy.s $dummy
-		echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0
-	elif test "${UNAME_MACHINE}" = "mips" ; then
-	  cat >$dummy.c <<EOF
-#ifdef __cplusplus
-	int main (int argc, char *argv[]) {
-#else
-	int main (argc, argv) int argc; char *argv[]; {
-#endif
-#ifdef __MIPSEB__
-  printf ("%s-unknown-linux-gnu\n", argv[1]);
-#endif
-#ifdef __MIPSEL__
-  printf ("%sel-unknown-linux-gnu\n", argv[1]);
-#endif
-  return 0;
-}
-EOF
-	  $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0
-	  rm -f $dummy.c $dummy
-	else
-	  # Either a pre-BFD a.out linker (linux-gnuoldld)
-	  # or one that does not give us useful --help.
-	  # GCC wants to distinguish between linux-gnuoldld and linux-gnuaout.
-	  # If ld does not provide *any* "supported emulations:"
-	  # that means it is gnuoldld.
-	  echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations:"
-	  test $? != 0 && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0
+	LIBC="1"
+	$CC_FOR_BUILD $dummy.c -o $dummy # 2>/dev/null
+	if [ $? = 0 ]; then
+	    LIBC=`./$dummy | sed -e 's/^\([0-9]*\.[0-9]*\)\..*$/\1/'`
+	fi
+	rm -f $dummy.c $dummy
 
-	  case "${UNAME_MACHINE}" in
-	  i?86)
-	    VENDOR=pc;
-	    ;;
-	  *)
-	    VENDOR=unknown;
-	    ;;
-	  esac
-	  # Determine whether the default compiler is a.out or elf
-	  cat >$dummy.c <<EOF
-#include <features.h>
-#ifdef __cplusplus
-	int main (int argc, char *argv[]) {
-#else
-	int main (argc, argv) int argc; char *argv[]; {
-#endif
-#ifdef __ELF__
-# ifdef __GLIBC__
-#  if __GLIBC__ >= 2
-    printf ("%s-${VENDOR}-linux-gnu\n", argv[1]);
-#  else
-    printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
-#  endif
-# else
-   printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
-# endif
-#else
-  printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]);
-#endif
-  return 0;
-}
-EOF
-	  $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0
-	  rm -f $dummy.c $dummy
-	fi ;;
+	echo "${MACHINE}-${VENDOR}-linux${KERNEL}glibc${LIBC}"
+	;;
 # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.  earlier versions
 # are messed up and put the nodename in both sysname and nodename.
     i?86:DYNIX/ptx:4*:*)
 	echo i386-sequent-sysv4
 	exit 0 ;;
+    i?86:UnixWare:*:* )
+        echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}uw${UNAME_VERSION}
+        exit 0 ;;
     i?86:UNIX_SV:4.2MP:2.*)
         # Unixware is an offshoot of SVR4, but it has its own version
         # number series starting with 2...
@@ -881,6 +774,9 @@
 	exit 0 ;;
     SM[BE]S:UNIX_SV:*:*)
 	echo mips-dde-sysv${UNAME_RELEASE}
+	exit 0 ;;
+    BS2000:POSIX-BC:*:*)
+	echo BS2000-siemens-sysv4
 	exit 0 ;;
     RM*:ReliantUNIX-*:*:*)
 	echo mips-sni-sysv4

--QN8DD4WCIA4DI16JQSKU
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/sfio/etc/config.sub
Content-Disposition: attachment

Index: ossp-pkg/sfio/etc/config.sub
============================================================
$ cvs diff -u -r1.1 -r1.2 config.sub
--- ossp-pkg/sfio/etc/config.sub	1999/11/12 14:42:21	1.1
+++ ossp-pkg/sfio/etc/config.sub	2000/07/03 14:15:16	1.2
@@ -162,7 +162,7 @@
 case $basic_machine in
 	# Recognize the basic CPU types without company name.
 	# Some are omitted here because they have special meanings below.
-	tahoe | i860 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \
+	tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \
 		| arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \
 		| 580 | i960 | h8300 \
 		| hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \
@@ -171,7 +171,7 @@
 		| 1750a | dsp16xx | pdp11 | mips16 | mips64 | mipsel | mips64el \
 		| mips64orion | mips64orionel | mipstx39 | mipstx39el \
 		| mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \
-		| mips64vr5000 | miprs64vr5000el \
+		| mips64vr5000 | miprs64vr5000el | mcore \
 		| sparc | sparclet | sparclite | sparc64 | sparcv9 | v850 | c4x \
 		| thumb | d10v)
 		basic_machine=$basic_machine-unknown
@@ -191,7 +191,8 @@
 		exit 1
 		;;
 	# Recognize the basic CPU types with company name.
-	vax-* | tahoe-* | i[34567]86-* | i860-* | m32r-* | m68k-* | m68000-* \
+	# FIXME: clean up the formatting here.
+	vax-* | tahoe-* | i[34567]86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \
 	      | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \
 	      | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \
 	      | power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \
@@ -204,7 +205,7 @@
 	      | sparc64-* | sparcv9-* | sparc86x-* | mips16-* | mips64-* | mipsel-* \
 	      | mips64el-* | mips64orion-* | mips64orionel-* \
 	      | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \
-	      | mipstx39-* | mipstx39el-* \
+	      | mipstx39-* | mipstx39el-* | mcore-* \
 	      | f301-* | armv*-* | t3e-* \
 	      | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \
 	      | thumb-* | v850-* | d30v-* | tic30-* | c30-* )
@@ -722,6 +723,9 @@
 		basic_machine=i386-sequent
 		os=-dynix
 		;;
+	s390*)
+		basic_machine=s390-ibm
+		;;
 	t3e)
 		basic_machine=t3e-cray
 		os=-unicos
@@ -849,6 +853,8 @@
 		basic_machine=c4x-none
 		os=-coff
 		;;
+	BS2000-siemens)
+		;;
 	*)
 		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
 		exit 1
@@ -1213,3 +1219,4 @@
 esac
 
 echo $basic_machine$os
+exit 0

--QN8DD4WCIA4DI16JQSKU
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/sfio/etc/ltconfig
Content-Disposition: attachment

Index: ossp-pkg/sfio/etc/ltconfig
============================================================
$ cvs diff -u -r1.1 -r1.2 ltconfig
--- ossp-pkg/sfio/etc/ltconfig	1999/11/12 14:42:21	1.1
+++ ossp-pkg/sfio/etc/ltconfig	2000/07/03 14:15:16	1.2
@@ -53,7 +53,7 @@
 
 # Find the correct PATH separator.  Usually this is `:', but
 # DJGPP uses `;' like DOS.
-if test "X${PATH_SEPARATOR+set}" != "Xset"; then
+if test "X${PATH_SEPARATOR+set}" != Xset; then
   UNAME=${UNAME-`uname 2>/dev/null`}
   case X$UNAME in
     *-DOS) PATH_SEPARATOR=';' ;;
@@ -63,9 +63,9 @@
 
 # The HP-UX ksh and POSIX shell print the target directory to stdout
 # if CDPATH is set.
-if test "${CDPATH+set}" = set; then CDPATH=; export CDPATH; fi
+if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
 
-if test "X${echo_test_string+set}" != "Xset"; then
+if test "X${echo_test_string+set}" != Xset; then
   # find a string as large as possible, as long as the shell can cope with it
   for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
     # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
@@ -169,10 +169,10 @@
 # Constants:
 PROGRAM=ltconfig
 PACKAGE=libtool
-VERSION=1.3.3
-TIMESTAMP=" (1.385.2.181 1999/07/02 15:49:11)"
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.c 1>&5'
-ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.c $LIBS 1>&5'
+VERSION=1.3.5
+TIMESTAMP=" (1.385.2.206 2000/05/27 11:12:27)"
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
 rm="rm -f"
 
 help="Try \`$progname --help' for more information."
@@ -369,8 +369,8 @@
 # Only set LANG and LC_ALL to C if already set.
 # These must not be set unconditionally because not all systems understand
 # e.g. LANG=C (notably SCO).
-if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
-if test "${LANG+set}"   = set; then LANG=C;   export LANG;   fi
+if test "X${LC_ALL+set}" = Xset; then LC_ALL=C; export LC_ALL; fi
+if test "X${LANG+set}"   = Xset; then LANG=C;   export LANG;   fi
 
 if test -n "$cache_file" && test -r "$cache_file"; then
   echo "loading cache $cache_file within ltconfig"
@@ -462,7 +462,7 @@
   # AIX sometimes has problems with the GCC collect2 program.  For some
   # reason, if we set the COLLECT_NAMES environment variable, the problems
   # vanish in a puff of smoke.
-  if test "${COLLECT_NAMES+set}" != set; then
+  if test "X${COLLECT_NAMES+set}" != Xset; then
     COLLECT_NAMES=
     export COLLECT_NAMES
   fi
@@ -663,7 +663,7 @@
   link_static_flag='-static'
 
   case "$host_os" in
-  beos* | irix5* | irix6* | osf3* | osf4*)
+  beos* | irix5* | irix6* | osf3* | osf4* | osf5*)
     # PIC is the default for these OSes.
     ;;
   aix*)
@@ -718,7 +718,7 @@
     # We can build DLLs from non-PIC.
     ;;
 
-  osf3* | osf4*)
+  osf3* | osf4* | osf5*)
     # All OSF/1 code is PIC.
     wl='-Wl,'
     link_static_flag='-non_shared'
@@ -1164,15 +1164,21 @@
     # Extract the symbol export list from an `--export-all' def file,
     # then regenerate the def file from the symbol export list, so that
     # the compiled dll only exports the symbol export list.
+    # Be careful not to strip the DATA tag left by newer dlltools.
     export_symbols_cmds='test -f $objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $objdir/$soname-ltdll.c~
       test -f $objdir/$soname-ltdll.$objext || (cd $objdir && $CC -c $soname-ltdll.c)~
       $DLLTOOL --export-all --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --output-def $objdir/$soname-def  $objdir/$soname-ltdll.$objext $libobjs $convenience~
-      sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]* ; *//" < $objdir/$soname-def > $export_symbols'
+      sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]*//" -e "s/ *;.*$//" < $objdir/$soname-def > $export_symbols'
 
+    # If DATA tags from a recent dlltool are present, honour them!
     archive_expsym_cmds='echo EXPORTS > $objdir/$soname-def~
       _lt_hint=1;
-      for symbol in `cat $export_symbols`; do
-	echo "	\$symbol @ \$_lt_hint ; " >> $objdir/$soname-def;
+      cat $export_symbols | while read symbol; do
+        set dummy \$symbol;
+        case \$# in
+          2) echo "	\$2 @ \$_lt_hint ; " >> $objdir/$soname-def;;
+          *) echo "     \$2 @ \$_lt_hint \$3 ; " >> $objdir/$soname-def;;
+        esac;
 	_lt_hint=`expr 1 + \$_lt_hint`;
       done~
       test -f $objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $objdir/$soname-ltdll.c~
@@ -1187,7 +1193,7 @@
     ;;
 
   netbsd*)
-    if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
       archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
       archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
     else
@@ -1196,7 +1202,7 @@
     fi
     ;;
 
-  solaris*)
+  solaris* | sysv5*)
     if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then
       ld_shlibs=no
       cat <<EOF 1>&2
@@ -1244,7 +1250,12 @@
       whole_archive_flag_spec=
       ;;
     *)
-      whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+      # ancient GNU ld didn't support --whole-archive et. al.
+      if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then
+        whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+      else
+        whole_archive_flag_spec=
+      fi
       ;;
     esac
   fi
@@ -1405,7 +1416,7 @@
     old_archive_from_new_cmds='emximp -o $objdir/$libname.a $objdir/$libname.def'
     ;;
 
-  osf3* | osf4*)
+  osf3*)
     if test "$with_gcc" = yes; then
       allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $linkopts ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
@@ -1417,6 +1428,24 @@
     hardcode_libdir_separator=:
     ;;
 
+  osf4* | osf5*)  # As osf3* with the addition of the -msym flag
+    if test "$with_gcc" = yes; then
+      allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+      archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $linkopts ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+    else
+      allow_undefined_flag=' -expect_unresolved \*'
+      archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linkopts -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+    fi
+    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+    hardcode_libdir_separator=:
+    ;;
+  rhapsody*)
+    archive_cmds='$CC -bundle -undefined suppress -o $lib $libobjs $deplibs $linkopts'
+    hardcode_libdir_flags_spec='-L$libdir'
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    ;;
+                                       
   sco3.2v5*)
     archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
     hardcode_shlibpath_var=no
@@ -1449,7 +1478,13 @@
     ;;
 
   sysv4)
-    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
+    if test "x$host_vendor" = xsequent; then
+      # Use $CC to link under sequent, because it throws in some extra .o 
+      # files that make .init and .fini sections work.
+      archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $linkopts'
+    else
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
+    fi
     runpath_var='LD_RUN_PATH'
     hardcode_shlibpath_var=no
     hardcode_direct=no #Motorola manual says yes, but my tests say they lie 
@@ -1461,6 +1496,18 @@
     export_dynamic_flag_spec='-Bexport'
     ;;
 
+  sysv5*)
+    no_undefined_flag=' -z text'
+    # $CC -shared without GNU ld will not create a library from C++
+    # object files and a static libstdc++, better avoid it by now
+    archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linkopts'
+    archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linkopts~$rm $lib.exp'
+    hardcode_libdir_flag_spec=
+    hardcode_shlibpath_var=no
+    runpath_var='LD_RUN_PATH'
+    ;;
+
   uts4*)
     archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
     hardcode_libdir_flag_spec='-L$libdir'
@@ -1474,14 +1521,28 @@
     ;;
 
   sysv4*MP*)
-    if test -d /usr/nec ;then
-    # archive_cmds='$LD -G -z text -h $soname -o $lib$libobjs$deplibs'
-    archive_cmds='$LD -G -h $soname -o $lib$libobjs$deplibs'
+    if test -d /usr/nec; then
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
+      hardcode_shlibpath_var=no
+      runpath_var=LD_RUN_PATH
+      hardcode_runpath_var=yes
+      ld_shlibs=yes
+    fi
+    ;;
+
+  sysv4.2uw2*)
+    archive_cmds='$LD -G -o $lib $libobjs $deplibs $linkopts'
+    hardcode_direct=yes
+    hardcode_minus_L=no
     hardcode_shlibpath_var=no
-    runpath_var=LD_RUN_PATH
     hardcode_runpath_var=yes
-    ld_shlibs=yes
-    fi
+    runpath_var=LD_RUN_PATH
+    ;;
+
+  unixware7*)
+    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
+    runpath_var='LD_RUN_PATH'
+    hardcode_shlibpath_var=no
     ;;
 
   *)
@@ -1589,11 +1650,11 @@
 main(){nm_test_var='a';nm_test_func();return(0);}
 EOF
 
-  echo "$progname:1592: checking if global_symbol_pipe works" >&5
-  if { (eval echo $progname:1593: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } && test -s conftest.$objext; then
+  echo "$progname:1653: checking if global_symbol_pipe works" >&5
+  if { (eval echo $progname:1654: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } && test -s conftest.$objext; then
     # Now try to grab the symbols.
     nlist=conftest.nm
-    if { echo "$progname:1596: eval \"$NM conftest.$objext | $global_symbol_pipe > $nlist\"" >&5; eval "$NM conftest.$objext | $global_symbol_pipe > $nlist 2>&5"; } && test -s "$nlist"; then
+    if { echo "$progname:1657: eval \"$NM conftest.$objext | $global_symbol_pipe > $nlist\"" >&5; eval "$NM conftest.$objext | $global_symbol_pipe > $nlist 2>&5"; } && test -s "$nlist"; then
 
       # Try sorting and uniquifying the output.
       if sort "$nlist" | uniq > "$nlist"T; then
@@ -1645,7 +1706,7 @@
 	  save_CFLAGS="$CFLAGS"
 	  LIBS="conftstm.$objext"
 	  CFLAGS="$CFLAGS$no_builtin_flag"
-	  if { (eval echo $progname:1648: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+	  if { (eval echo $progname:1709: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
 	    pipe_works=yes
 	  else
 	    echo "$progname: failed program was:" >&5
@@ -1787,8 +1848,9 @@
 
 bsdi4*)
   version_type=linux
-  library_names_spec='${libname}.so$major ${libname}.so'
-  soname_spec='${libname}.so'
+  need_version=no
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  soname_spec='${libname}${release}.so$major'
   finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
@@ -1796,6 +1858,7 @@
   file_magic_test_file=/shlib/libc.so
   sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
   sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  export_dynamic_flag_spec=-rdynamic
   # the default ld.so.conf also contains /usr/contrib/lib and
   # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
   # libtool to hard-code these into programs
@@ -1841,10 +1904,9 @@
       need_version=yes
       ;;
   esac
-  finish_cmds='PATH="\$PATH:/sbin" OBJFORMAT="'"$objformat"'" ldconfig -m $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   case "$host_os" in
-  freebsd2* | freebsd3.[01]*)
+  freebsd2* | freebsd3.[01]* | freebsdelf3.[01]*)
     shlibpath_overrides_runpath=yes
     ;;
   *) # from 3.2 on
@@ -1875,6 +1937,14 @@
   soname_spec='${libname}${release}.sl$major'
   # HP-UX runs *really* slowly unless shared libraries are mode 555.
   postinstall_cmds='chmod 555 $lib'
+  case "$host_os" in
+  hpux10.20*)
+    # TODO:  Does this work for hpux-11 too?
+    deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
+    file_magic_cmd=/usr/bin/file
+    file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
   ;;
 
 irix5* | irix6*)
@@ -1896,8 +1966,6 @@
     *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;;
     *) libsuff= shlibsuff= libmagic=never-match;;
     esac
-    # this will be overridden with pass_all, but let us keep it just in case
-    deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[1234] dynamic lib MIPS - version 1"
     ;;
   esac
   shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
@@ -1924,9 +1992,7 @@
   finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
-  deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
-  file_magic_cmd=/usr/bin/file
-  file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+  deplibs_check_method=pass_all
 
   if test -f /lib/ld.so.1; then
     dynamic_linker='GNU ld.so'
@@ -1972,7 +2038,7 @@
   shlibpath_var=LIBPATH
   ;;
 
-osf3* | osf4*)
+osf3* | osf4* | osf5*)
   version_type=osf
   need_version=no
   soname_spec='${libname}${release}.so'
@@ -1987,6 +2053,14 @@
   sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
   ;;
 
+rhapsody*)
+  version_type=sunos
+  library_names_spec='${libname}.so'
+  soname_spec='${libname}.so'
+  shlibpath_var=DYLD_LIBRARY_PATH
+  deplibs_check_method=pass_all
+  ;;
+
 sco3.2v5*)
   version_type=osf
   soname_spec='${libname}${release}.so$major'
@@ -2027,6 +2101,10 @@
   soname_spec='${libname}${release}.so$major'
   shlibpath_var=LD_LIBRARY_PATH
   case "$host_vendor" in
+    sequent)
+      file_magic_cmd='/bin/file'
+      deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+      ;;
     ncr)
       deplibs_check_method='pass_all'
       ;;
@@ -2167,7 +2245,7 @@
 if eval "test \"`echo '$''{'lt_cv_dlopen'+set}'`\" != set"; then
   lt_cv_dlopen=no lt_cv_dlopen_libs=
 echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
-echo "$progname:2170: checking for dlopen in -ldl" >&5
+echo "$progname:2248: checking for dlopen in -ldl" >&5
 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -2175,17 +2253,20 @@
   ac_save_LIBS="$LIBS"
 LIBS="-ldl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2178 "ltconfig"
+#line 2256 "ltconfig"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
     builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
 char dlopen();
 
 int main() {
 dlopen()
 ; return 0; }
 EOF
-if { (eval echo $progname:2188: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo $progname:2269: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2204,18 +2285,21 @@
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for dlopen""... $ac_c" 1>&6
-echo "$progname:2207: checking for dlopen" >&5
+echo "$progname:2288: checking for dlopen" >&5
 if eval "test \"`echo '$''{'ac_cv_func_dlopen'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2212 "ltconfig"
+#line 2293 "ltconfig"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char dlopen(); below.  */
 #include <assert.h>
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
     builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
 char dlopen();
 
 int main() {
@@ -2231,7 +2315,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo $progname:2234: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo $progname:2318: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_dlopen=yes"
 else
@@ -2248,7 +2332,7 @@
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for dld_link in -ldld""... $ac_c" 1>&6
-echo "$progname:2251: checking for dld_link in -ldld" >&5
+echo "$progname:2335: checking for dld_link in -ldld" >&5
 ac_lib_var=`echo dld'_'dld_link | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -2256,17 +2340,20 @@
   ac_save_LIBS="$LIBS"
 LIBS="-ldld  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2259 "ltconfig"
+#line 2343 "ltconfig"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
     builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
 char dld_link();
 
 int main() {
 dld_link()
 ; return 0; }
 EOF
-if { (eval echo $progname:2269: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo $progname:2356: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2285,18 +2372,21 @@
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for shl_load""... $ac_c" 1>&6
-echo "$progname:2288: checking for shl_load" >&5
+echo "$progname:2375: checking for shl_load" >&5
 if eval "test \"`echo '$''{'ac_cv_func_shl_load'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2293 "ltconfig"
+#line 2380 "ltconfig"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char shl_load(); below.  */
 #include <assert.h>
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
     builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
 char shl_load();
 
 int main() {
@@ -2312,7 +2402,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo $progname:2315: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo $progname:2405: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_shl_load=yes"
 else
@@ -2330,7 +2420,7 @@
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6
-echo "$progname:2333: checking for shl_load in -ldld" >&5
+echo "$progname:2423: checking for shl_load in -ldld" >&5
 ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -2338,18 +2428,21 @@
   ac_save_LIBS="$LIBS"
 LIBS="-ldld  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2341 "ltconfig"
+#line 2431 "ltconfig"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
     builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
 char shl_load();
 
 int main() {
 shl_load()
 ; return 0; }
 EOF
-if { (eval echo $progname:2352: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo $progname:2445: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2392,17 +2485,17 @@
 for ac_hdr in dlfcn.h; do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "$progname:2395: checking for $ac_hdr" >&5
+echo "$progname:2488: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2400 "ltconfig"
+#line 2493 "ltconfig"
 #include <$ac_hdr>
 int fnord = 0;
 EOF
-ac_try="$ac_compile conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo $progname:2405: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_try="$ac_compile >/dev/null 2>conftest.out"
+{ (eval echo $progname:2498: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -2430,7 +2523,7 @@
     LIBS="$lt_cv_dlopen_libs $LIBS"
 
   echo $ac_n "checking whether a program can dlopen itself""... $ac_c" 1>&6
-echo "$progname:2433: checking whether a program can dlopen itself" >&5
+echo "$progname:2526: checking whether a program can dlopen itself" >&5
 if test "${lt_cv_dlopen_self+set}" = set; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2438,7 +2531,7 @@
     lt_cv_dlopen_self=cross
   else
     cat > conftest.c <<EOF
-#line 2441 "ltconfig"
+#line 2534 "ltconfig"
 
 #if HAVE_DLFCN_H
 #include <dlfcn.h>
@@ -2484,7 +2577,7 @@
 	       if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); } 
 
 EOF
-if { (eval echo $progname:2487: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+if { (eval echo $progname:2580: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
 then
   lt_cv_dlopen_self=yes
 else
@@ -2503,7 +2596,7 @@
   if test "$lt_cv_dlopen_self" = yes; then
     LDFLAGS="$LDFLAGS $link_static_flag"
   echo $ac_n "checking whether a statically linked program can dlopen itself""... $ac_c" 1>&6
-echo "$progname:2506: checking whether a statically linked program can dlopen itself" >&5
+echo "$progname:2599: checking whether a statically linked program can dlopen itself" >&5
 if test "${lt_cv_dlopen_self_static+set}" = set; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2511,7 +2604,7 @@
     lt_cv_dlopen_self_static=cross
   else
     cat > conftest.c <<EOF
-#line 2514 "ltconfig"
+#line 2607 "ltconfig"
 
 #if HAVE_DLFCN_H
 #include <dlfcn.h>
@@ -2557,7 +2650,7 @@
     if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); } 
 
 EOF
-if { (eval echo $progname:2560: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+if { (eval echo $progname:2653: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
 then
   lt_cv_dlopen_self_static=yes
 else
@@ -2649,7 +2742,7 @@
 # NOTE: Changes made to this file will be lost: look at ltconfig or ltmain.sh.
 #
 # Copyright (C) 1996-1999 Free Software Foundation, Inc.
-# Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -2675,7 +2768,7 @@
 
 # The HP-UX ksh and POSIX shell print the target directory to stdout
 # if CDPATH is set.
-if test "\${CDPATH+set}" = set; then CDPATH=; export CDPATH; fi
+if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
 
 ### BEGIN LIBTOOL CONFIG
 EOF
@@ -2938,7 +3031,7 @@
 # AIX sometimes has problems with the GCC collect2 program.  For some
 # reason, if we set the COLLECT_NAMES environment variable, the problems
 # vanish in a puff of smoke.
-if test "${COLLECT_NAMES+set}" != set; then
+if test "X${COLLECT_NAMES+set}" != Xset; then
   COLLECT_NAMES=
   export COLLECT_NAMES
 fi
@@ -2948,6 +3041,10 @@
 
   # Append the ltmain.sh script.
   sed '$q' "$ltmain" >> "$ofile" || (rm -f "$ofile"; exit 1)
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
 
   chmod +x "$ofile"
   ;;

--QN8DD4WCIA4DI16JQSKU
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/sfio/etc/ltmain.sh
Content-Disposition: attachment

Index: ossp-pkg/sfio/etc/ltmain.sh
============================================================
$ cvs diff -u -r1.1 -r1.2 ltmain.sh
--- ossp-pkg/sfio/etc/ltmain.sh	1999/11/12 14:42:21	1.1
+++ ossp-pkg/sfio/etc/ltmain.sh	2000/07/03 14:15:16	1.2
@@ -54,8 +54,8 @@
 # Constants.
 PROGRAM=ltmain.sh
 PACKAGE=libtool
-VERSION=1.3.3
-TIMESTAMP=" (1.385.2.181 1999/07/02 15:49:11)"
+VERSION=1.3.5
+TIMESTAMP=" (1.385.2.206 2000/05/27 11:12:27)"
 
 default_mode=
 help="Try \`$progname --help' for more information."
@@ -435,7 +435,7 @@
       fbsd_hideous_sh_bug=$base_compile
 
       # All platforms use -DPIC, to notify preprocessed assembler code.
-      command="$base_compile $pic_flag -DPIC $srcfile"
+      command="$base_compile $srcfile $pic_flag -DPIC"
       if test "$build_old_libs" = yes; then
 	lo_libobj="$libobj"
 	dir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'`
@@ -521,9 +521,17 @@
 	  exit $error
 	fi
 
+	xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
+	if test "X$xdir" = "X$obj"; then
+	  xdir="."
+	else
+	  xdir="$xdir"
+	fi
+	baseobj=`$echo "X$obj" | $Xsed -e "s%.*/%%"`
+	libobj=`$echo "X$baseobj" | $Xsed -e "$o2lo"`
 	# Now arrange that obj and lo_libobj become the same file
-	$show "$LN_S $obj $lo_libobj"
-	if $run $LN_S $obj $lo_libobj; then
+	$show "(cd $xdir && $LN_S $baseobj $libobj)"
+	if $run eval '(cd $xdir && $LN_S $baseobj $libobj)'; then
 	  exit 0
 	else
 	  error=$?
@@ -613,8 +621,6 @@
   # libtool link mode
   link)
     modename="$modename: link"
-    C_compiler="$CC" # save it, to compile generated C sources
-    CC="$nonopt"
     case "$host" in
     *-*-cygwin* | *-*-mingw* | *-*-os2*)
       # It is impossible to link a dll without this setting, and
@@ -802,8 +808,8 @@
       allow_undefined=yes
       ;;
     esac
-    compile_command="$CC"
-    finalize_command="$CC"
+    compile_command="$nonopt"
+    finalize_command="$nonopt"
 
     compile_rpath=
     finalize_rpath=
@@ -1789,6 +1795,10 @@
 	*-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*)
 	  # these systems don't actually have a c library (as such)!
 	  ;;
+        *-*-rhapsody*)
+	  # rhapsody is a little odd...
+	  deplibs="$deplibs -framework System"
+	  ;;
 	*)
 	  # Add libc to deplibs on all other systems.
 	  deplibs="$deplibs -lc"
@@ -1851,7 +1861,7 @@
 	  int main() { return 0; }
 EOF
 	  $rm conftest
-	  $C_compiler -o conftest conftest.c $deplibs
+	  $CC -o conftest conftest.c $deplibs
 	  if test $? -eq 0 ; then
 	    ldd_output=`ldd conftest`
 	    for i in $deplibs; do
@@ -1884,7 +1894,7 @@
 	     # If $name is empty we are operating on a -L argument.
 	      if test "$name" != "" ; then
 		$rm conftest
-		$C_compiler -o conftest conftest.c $i
+		$CC -o conftest conftest.c $i
 		# Did it work?
 		if test $? -eq 0 ; then
 		  ldd_output=`ldd conftest`
@@ -2047,13 +2057,20 @@
 	done
 
 	# Ensure that we have .o objects for linkers which dislike .lo
-	# (e.g. aix) incase we are running --disable-static
+	# (e.g. aix) in case we are running --disable-static
 	for obj in $libobjs; do
-	  oldobj=`$echo "X$obj" | $Xsed -e "$lo2o"`
-	  if test ! -f $oldobj; then
-	    $show "${LN_S} $obj $oldobj"
-	    $run ${LN_S} $obj $oldobj || exit $?
+	  xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
+	  if test "X$xdir" = "X$obj"; then
+	    xdir="."
+	  else
+	    xdir="$xdir"
 	  fi
+	  baseobj=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
+	  oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"`
+	  if test ! -f $xdir/$oldobj; then
+	    $show "(cd $xdir && ${LN_S} $baseobj $oldobj)"
+	    $run eval '(cd $xdir && ${LN_S} $baseobj $oldobj)' || exit $?
+	  fi
 	done
 
 	# Use standard objects if they are pic
@@ -2311,8 +2328,16 @@
 	# Just create a symlink.
 	$show $rm $libobj
 	$run $rm $libobj
-	$show "$LN_S $obj $libobj"
-	$run $LN_S $obj $libobj || exit $?
+	xdir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'`
+	if test "X$xdir" = "X$libobj"; then
+	  xdir="."
+	else
+	  xdir="$xdir"
+	fi
+	baseobj=`$echo "X$libobj" | $Xsed -e 's%^.*/%%'`
+	oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"`
+	$show "(cd $xdir && $LN_S $oldobj $baseobj)"
+	$run eval '(cd $xdir && $LN_S $oldobj $baseobj)' || exit $?
       fi
 
       if test -n "$gentop"; then
@@ -2598,16 +2623,21 @@
 	  # linked before any other PIC object.  But we must not use
 	  # pic_flag when linking with -static.  The problem exists in
 	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
-	  *-*-freebsd2*|*-*-freebsd3.0*)
+	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
 	    case "$compile_command " in
 	    *" -static "*) ;;
 	    *) pic_flag_for_symtable=" $pic_flag -DPIC -DFREEBSD_WORKAROUND";;
+	    esac;;
+	  *-*-hpux*)
+	    case "$compile_command " in
+	    *" -static "*) ;;
+	    *) pic_flag_for_symtable=" $pic_flag -DPIC";;
 	    esac
 	  esac
 
 	  # Now compile the dynamic symbol file.
-	  $show "(cd $output_objdir && $C_compiler -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")"
-	  $run eval '(cd $output_objdir && $C_compiler -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $?
+	  $show "(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")"
+	  $run eval '(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $?
 
 	  # Clean up the generated files.
 	  $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T"
@@ -2776,7 +2806,7 @@
 
 # The HP-UX ksh and POSIX shell print the target directory to stdout
 # if CDPATH is set.
-if test \"\${CDPATH+set}\" = set; then CDPATH=; export CDPATH; fi
+if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi
 
 relink_command=\"$relink_command\"
 
@@ -2865,7 +2895,7 @@
   fi"
 	else
 	  echo >> $output "\
-  program='$outputname$exeext'
+  program='$outputname'
   progdir=\"\$thisdir/$objdir\"
 "
 	fi
@@ -2901,13 +2931,21 @@
       # Run the actual program with our arguments.
 "
 	case $host in
-	*-*-cygwin* | *-*-mingw | *-*-os2*)
 	  # win32 systems need to use the prog path for dll
 	  # lookup to work
+	*-*-cygwin*)
 	  $echo >> $output "\
+      exec \$progdir/\$program \${1+\"\$@\"}
+"
+	  ;;
+
+	# Backslashes separate directories on plain windows
+	*-*-mingw | *-*-os2*)
+	  $echo >> $output "\
       exec \$progdir\\\\\$program \${1+\"\$@\"}
 "
 	  ;;
+
 	*)
 	  $echo >> $output "\
       # Export the path to the program.
@@ -2995,14 +3033,21 @@
       if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
 	eval cmds=\"$old_archive_from_new_cmds\"
       else
-	# Ensure that we have .o objects in place incase we decided
+	# Ensure that we have .o objects in place in case we decided
 	# not to build a shared library, and have fallen back to building
 	# static libs even though --disable-static was passed!
 	for oldobj in $oldobjs; do
 	  if test ! -f $oldobj; then
-	    obj=`$echo "X$oldobj" | $Xsed -e "$o2lo"`
-	    $show "${LN_S} $obj $oldobj"
-	    $run ${LN_S} $obj $oldobj || exit $?
+	    xdir=`$echo "X$oldobj" | $Xsed -e 's%/[^/]*$%%'`
+	    if test "X$xdir" = "X$oldobj"; then
+	      xdir="."
+	    else
+	      xdir="$xdir"
+	    fi
+	    baseobj=`$echo "X$oldobj" | $Xsed -e 's%^.*/%%'`
+	    obj=`$echo "X$baseobj" | $Xsed -e "$o2lo"`
+	    $show "(cd $xdir && ${LN_S} $obj $baseobj)"
+	    $run eval '(cd $xdir && ${LN_S} $obj $baseobj)' || exit $?
 	  fi
 	done
 
@@ -3672,8 +3717,10 @@
     done
 
     if test -z "$run"; then
-      # Export the shlibpath_var.
-      eval "export $shlibpath_var"
+      if test -n "$shlibpath_var"; then
+        # Export the shlibpath_var.
+        eval "export $shlibpath_var"
+      fi
 
       # Restore saved enviroment variables
       if test "${save_LC_ALL+set}" = set; then
@@ -3690,8 +3737,10 @@
       exit 1
     else
       # Display what would be done.
-      eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
-      $echo "export $shlibpath_var"
+      if test -n "$shlibpath_var"; then
+        eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
+        $echo "export $shlibpath_var"
+      fi
       $echo "$cmd$args"
       exit 0
     fi

--QN8DD4WCIA4DI16JQSKU
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/sfio/etc/shtool
Content-Disposition: attachment

Index: ossp-pkg/sfio/etc/shtool
============================================================
$ cvs diff -u -r1.2 -r1.3 shtool
--- ossp-pkg/sfio/etc/shtool	1999/11/12 14:42:21	1.2
+++ ossp-pkg/sfio/etc/shtool	2000/07/03 14:15:16	1.3
@@ -1,13 +1,13 @@
 #!/bin/sh
 ##
 ##  GNU shtool -- The GNU Portable Shell Tool
-##  Copyright (c) 1994-1999 Ralf S. Engelschall <rse@engelschall.com>
+##  Copyright (c) 1994-2000 Ralf S. Engelschall <rse@engelschall.com>
 ##
 ##  See http://www.gnu.org/software/shtool/ for more information.
 ##  See ftp://ftp.gnu.org/gnu/shtool/ for latest version.
 ##
-##  Version 1.4.6 (05-Sep-1999)
-##  Ingredients: all available modules
+##  Version:  1.5.0 (01-Jul-2000)
+##  Contents: all available modules
 ##
 
 ##
@@ -40,20 +40,20 @@
 ##  Available commands:
 ##    echo       Print string with optional construct expansion
 ##    mdate      Pretty-print modification time of a file or dir
-##    table      Pretty print a field-separated list as a table
+##    table      Pretty-print a field-separated list as a table
 ##    prop       Display progress with a running propeller
-##    move       Move files with simultan substitution
+##    move       Move files with simultaneous substitution
 ##    install    Install a program, script or datafile
 ##    mkdir      Make one or more directories
 ##    mkln       Make link with calculation of relative paths
-##    mkshadow   Make a shadow tree
+##    mkshadow   Make a shadow tree through symbolic links
 ##    fixperm    Fix file permissions inside a source tree
 ##    tarball    Roll distribution tarballs
-##    guessos    Simple OS/platform guesser
+##    guessos    Simple operating system guesser
 ##    arx        Extended archive command
 ##    slo        Separate linker options by library class
 ##    scpp       Sharing C Pre-Processor
-##    version    Generate and maintain a version information file
+##    version    Maintain a version information file
 ##    path       Deal with program paths
 ##
 
@@ -63,8 +63,8 @@
     exit 1
 fi
 if [ ".$1" = ".-h" -o ".$1" = ".--help" ]; then
-    echo "This is GNU shtool, version 1.4.6 (05-Sep-1999)"
-    echo "Copyright (c) 1994-1999 Ralf S. Engelschall <rse@engelschall.com>"
+    echo "This is GNU shtool, version 1.5.0 (01-Jul-2000)"
+    echo "Copyright (c) 1994-2000 Ralf S. Engelschall <rse@engelschall.com>"
     echo "Report bugs to <bug-shtool@gnu.org>"
     echo ''
     echo "Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]" 
@@ -73,6 +73,7 @@
     echo '  -v, --version   display shtool version information'
     echo '  -h, --help      display shtool usage help page (this one)'
     echo '  -d, --debug     display shell trace information'
+    echo '  -r, --recreate  recreate this shtool script via shtoolize'
     echo ''
     echo 'Available <cmd-name> [<cmd-options>] [<cmd-args>]:'
     echo '  echo     [-n] [-e] [<str> ...]'
@@ -81,7 +82,7 @@
     echo '  prop     [-p<str>]'
     echo '  move     [-v] [-t] [-e] [-p] <src-file> <dst-file>'
     echo '  install  [-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>]'
-    echo '           [-e<ext>] <file> <path>'
+    echo '           [-e<ext>] <file> [<file> ...] <path>'
     echo '  mkdir    [-t] [-f] [-p] [-m<mode>] <dir> [<dir> ...]'
     echo '  mkln     [-t] [-f] [-s] <src-path> [<src-path> ...] <dst-path>'
     echo '  mkshadow [-v] [-t] [-a] <src-dir> <dst-dir>'
@@ -90,19 +91,23 @@
     echo '           <user>] [-g <group>] [-e <pattern>] <path> [<path> ...]'
     echo '  guessos  '
     echo '  arx      [-t] [-C<cmd>] <op> <archive> [<file> ...]'
-    echo '  slo      -- -L<dir> -l<lib> [ -L<dir> -l<lib> ... ]'
-    echo '  scpp     [-v] [-p] [-o<ofile>] [-t<tfile>] [-M<mark>] [-D<dname>]'
-    echo '           [-C<cname>] <file> [<file> ...]'
-    echo '  version  [-l<lang>] [-n<name>] [-p<prefix>] [-s<version>] [-i<knob>]'
-    echo '           [-d<type>] <file>'
+    echo '  slo      [-p<str>] -- -L<dir> -l<lib> [-L<dir> -l<lib> ...]'
+    echo '  scpp     [-v] [-p] [-f<filter>] [-o<ofile>] [-t<tfile>] [-M<mark>]'
+    echo '           [-D<dname>] [-C<cname>] <file> [<file> ...]'
+    echo '  version  [-l<lang>] [-n<name>] [-p<prefix>] [-s<version>] [-e]'
+    echo '           [-i<knob>] [-d<type>] <file>'
     echo '  path     [-s] [-r] [-d] [-b] [-m] [-p<path>] <str> [<str> ...]'
     echo ''
     exit 0
 fi
 if [ ".$1" = ".-v" -o ".$1" = ."--version" ]; then
-    echo "GNU shtool 1.4.6 (05-Sep-1999)"
+    echo "GNU shtool 1.5.0 (01-Jul-2000)"
     exit 0
 fi
+if [ ".$1" = ".-r" -o ".$1" = ."--recreate" ]; then
+    shtoolize -oshtool all
+    exit 0
+fi
 if [ ".$1" = ".-d" -o ".$1" = ."--debug" ]; then
     shift
     set -x
@@ -132,13 +137,19 @@
         str_tool="echo"
         str_usage="[-n] [-e] [<str> ...]"
         arg_spec="0+"
-        opt_spec="ne"
+        opt_spec="n.e."
+        opt_n=no
+        opt_e=no
         ;;
     mdate )
         str_tool="mdate"
         str_usage="[-n] [-z] [-s] [-d] [-f<str>] [-o<spec>] <path>"
-        arg_spec="1"
-        opt_spec="nzsdf:!o:!"
+        arg_spec="1="
+        opt_spec="n.z.s.d.f:o:"
+        opt_n=no
+        opt_z=no
+        opt_s=no
+        opt_d=no
         opt_f=" "
         opt_o="dmy"
         ;;
@@ -146,7 +157,7 @@
         str_tool="table"
         str_usage="[-F<sep>] [-w<width>] [-c<cols>] [-s<strip>] <str><sep><str>..."
         arg_spec="1+"
-        opt_spec="F:!w:!c:!s:!"
+        opt_spec="F:w:c:s:"
         opt_F=":"
         opt_w=15
         opt_c=3
@@ -155,79 +166,116 @@
     prop )
         str_tool="prop"
         str_usage="[-p<str>]"
-        arg_spec="0"
+        arg_spec="0="
         opt_spec="p:"
+        opt_p=""
         ;;
     move )
         str_tool="move"
         str_usage="[-v] [-t] [-e] [-p] <src-file> <dst-file>"
-        arg_spec="2"
-        opt_spec="vtep"
+        arg_spec="2="
+        opt_spec="v.t.e.p."
+        opt_v=no
+        opt_t=no
+        opt_e=no
+        opt_p=no
         ;;
     install )
         str_tool="install"
-        str_usage="[-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>] [-e<ext>] <file> <path>"
-        arg_spec="2"
-        opt_spec="vtcCsm:o:g:e:"
+        str_usage="[-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>] [-e<ext>] <file> [<file> ...] <path>"
+        arg_spec="2+"
+        opt_spec="v.t.c.C.s.m:o:g:e:"
+        opt_v=no
+        opt_t=no
+        opt_c=no
+        opt_C=no
+        opt_s=no
+        opt_m=""
+        opt_o=""
+        opt_g=""
+        opt_e=""
         ;;
     mkdir )
         str_tool="mkdir"
         str_usage="[-t] [-f] [-p] [-m<mode>] <dir> [<dir> ...]"
         arg_spec="1+"
-        opt_spec="tfpm:"
+        opt_spec="t.f.p.m:"
+        opt_t=no
+        opt_f=no
+        opt_p=no
+        opt_m=""
         ;;
     mkln )
         str_tool="mkln"
         str_usage="[-t] [-f] [-s] <src-path> [<src-path> ...] <dst-path>"
         arg_spec="2+"
-        opt_spec="tfs"
+        opt_spec="t.f.s."
+        opt_t=no
+        opt_f=no
+        opt_s=no
         ;;
     mkshadow )
         str_tool="mkshadow"
         str_usage="[-v] [-t] [-a] <src-dir> <dst-dir>"
-        arg_spec="2"
-        opt_spec="vta"
+        arg_spec="2="
+        opt_spec="v.t.a."
+        opt_v=no
+        opt_t=no
+        opt_a=no
         ;;
     fixperm )
         str_tool="fixperm"
         str_usage="[-v] [-t] <path> [<path> ...]"
-        gen_tmpfile=yes
         arg_spec="1+"
-        opt_spec="vt"
+        opt_spec="v.t."
+        opt_v=no
+        opt_t=no
         ;;
     tarball )
         str_tool="tarball"
         str_usage="[-t] [-v] [-o <tarball>] [-c <prog>] [-d <dir>] [-u <user>] [-g <group>] [-e <pattern>] <path> [<path> ...]"
         gen_tmpfile=yes
         arg_spec="1+"
-        opt_spec="tvo:c:d:u:g:e:!"
+        opt_spec="t.v.o:c:d:u:g:e:"
+        opt_t=no
+        opt_v=no
+        opt_o=""
+        opt_c=""
+        opt_d=""
+        opt_u=""
+        opt_g=""
         opt_e="CVS,\\.cvsignore,\\.[oa]\$"
         ;;
     guessos )
         str_tool="guessos"
         str_usage=""
-        arg_spec="0"
+        arg_spec="0="
         opt_spec=""
         ;;
     arx )
         str_tool="arx"
         str_usage="[-t] [-C<cmd>] <op> <archive> [<file> ...]"
         arg_spec="2+"
-        opt_spec="tC:!"
+        opt_spec="t.C:"
+        opt_t=no
         opt_C="ar"
         ;;
     slo )
         str_tool="slo"
-        str_usage="-- -L<dir> -l<lib> [ -L<dir> -l<lib> ... ]"
+        str_usage="[-p<str>] -- -L<dir> -l<lib> [-L<dir> -l<lib> ...]"
         arg_spec="1+"
-        opt_spec=""
+        opt_spec="p:"
+        opt_p="SLO_"
         ;;
     scpp )
         str_tool="scpp"
-        str_usage="[-v] [-p] [-o<ofile>] [-t<tfile>] [-M<mark>] [-D<dname>] [-C<cname>] <file> [<file> ...]"
+        str_usage="[-v] [-p] [-f<filter>] [-o<ofile>] [-t<tfile>] [-M<mark>] [-D<dname>] [-C<cname>] <file> [<file> ...]"
         gen_tmpfile=yes
         arg_spec="1+"
-        opt_spec="vpo:!t:!M:!D:!C:!"
+        opt_spec="v.p.f+o:t:M:D:C:"
+        opt_v=no
+        opt_p=no
+        opt_f=""
         opt_o="lib.h"
         opt_t="lib.h.in"
         opt_M="%%MARK%%"
@@ -236,25 +284,35 @@
         ;;
     version )
         str_tool="version"
-        str_usage="[-l<lang>] [-n<name>] [-p<prefix>] [-s<version>] [-i<knob>] [-d<type>] <file>"
-        arg_spec="1+"
-        opt_spec="l:!n:!p:!s:!i:!d:!"
+        str_usage="[-l<lang>] [-n<name>] [-p<prefix>] [-s<version>] [-e] [-i<knob>] [-d<type>] <file>"
+        arg_spec="1="
+        opt_spec="l:n:p:s:i:e.d:"
         opt_l="txt"
         opt_n="unknown"
-        opt_p="unknown"
-        opt_s="unknown"
-        opt_i="P"
-        opt_d="NO"
-        gen_tmpfile=yes
+        opt_p=""
+        opt_s=""
+        opt_e="no"
+        opt_i=""
+        opt_d="short"
         ;;
     path )
         str_tool="path"
         str_usage="[-s] [-r] [-d] [-b] [-m] [-p<path>] <str> [<str> ...]"
         gen_tmpfile=yes
         arg_spec="1+"
-        opt_spec="srdbmp:!"
+        opt_spec="s.r.d.b.m.p:"
+        opt_s=no
+        opt_r=no
+        opt_d=no
+        opt_b=no
+        opt_m=no
         opt_p="$PATH"
         ;;
+    -* )
+        echo "$0:Error: unknown option \`$tool'" 2>&1
+        echo "$0:Hint:  run \`$0 -h' for usage" 2>&1
+        exit 1
+        ;;
     * )
         echo "$0:Error: unknown command \`$tool'" 2>&1
         echo "$0:Hint:  run \`$0 -h' for usage" 2>&1
@@ -268,36 +326,24 @@
 
 #   determine name of tool
 if [ ".$tool" != . ]; then
-    #   inside shtool
+    #   used inside shtool script
     toolcmd="$0 $tool"
     toolcmdhelp="shtool $tool"
     msgprefix="shtool:$tool"
 else
-    #   standalone
+    #   used as standalone script
     toolcmd="$0"
-    toolcmdhelp="sh.$tool"
+    toolcmdhelp="sh $0"
     msgprefix="$str_tool"
 fi
 
 #   parse argument specification string
-eval `echo $arg_spec | sed -e 's/^\([0-9]*\)\(.*\)/arg_NUMS="\1"; arg_MODE="\2"/'`
-test ".$arg_MODE" = . && arg_MODE="="
+eval `echo $arg_spec |\
+      sed -e 's/^\([0-9]*\)\([+=]\)/arg_NUMS=\1; arg_MODE=\2/'`
 
 #   parse option specification string
-for opt in `echo "h$opt_spec" | sed -e 's/\([a-zA-Z0-9][!:+]*\)/\1 /g'`; do
-    opt_MODE="."; opt_INIT="."
-    eval `echo $opt |\
-          sed -e 's/^\([a-zA-Z0-9]\)/opt_THIS="\1";/' \
-              -e 's/";\([:+]\)/"; opt_MODE="\1";/' \
-              -e 's/";\(!\)/"; opt_INIT="\1"/'`
-    eval "opt_MODE_${opt_THIS}=${opt_MODE}"
-    if [ ".$opt_INIT" != ".!" ]; then
-        case "$opt_MODE" in
-            "." )     eval "opt_${opt_THIS}=no"   ;;
-            ":"|"+" ) eval "opt_${opt_THIS}=\"\"" ;;
-        esac
-    fi
-done
+eval `echo h.$opt_spec |\
+      sed -e 's/\([a-zA-Z0-9]\)\([.:+]\)/opt_MODE_\1=\2;/g'`
 
 #   interate over argument line
 opt_PREV=''
@@ -315,7 +361,7 @@
         opt_OPT="$opt_PREV"
         opt_ARG="$1"
         opt_ARG_OK=yes
-        opt_PREV=""
+        opt_PREV=''
     else
         #   split argument into option and argument
         case "$1" in
@@ -325,8 +371,7 @@
                           -e 's/";\(.*\)$/"; opt_ARG="\1"/'`
                 ;;
             -[a-zA-Z0-9])
-                opt_OPT=`awk 'BEGIN { printf("%s", substr(OPT, 2)); }' \
-                         "OPT=$1" </dev/null"`
+                opt_OPT=`echo "x$1" | cut -c3-`
                 opt_ARG=''
                 ;;
             *)
@@ -349,15 +394,15 @@
 
     #   process option
     case $opt_MODE in
-        "." )
+        '.' )
             #   boolean option
             eval "opt_${opt_OPT}=yes"
             ;;
-        ":" )
+        ':' )
             #   option with argument (multiple occurances override)
             eval "opt_${opt_OPT}=\"\$opt_ARG\""
             ;;
-        "+" )
+        '+' )
             #   option with argument (multiple occurances append)
             eval "opt_${opt_OPT}=\"\$opt_${opt_OPT} \$opt_ARG\""
             ;;
@@ -382,14 +427,14 @@
 
 #   complain about incorrect number of arguments
 case $arg_MODE in
-    "=" )
+    '=' )
         if [ $# -ne $arg_NUMS ]; then
             echo "$msgprefix:Error: invalid number of arguments (exactly $arg_NUMS expected)" 1>&2
             echo "$msgprefix:Hint:  run \`$toolcmd -h' or \`man shtool' for details" 1>&2
             exit 1
         fi
         ;;
-    "+" )
+    '+' )
         if [ $# -lt $arg_NUMS ]; then
             echo "$msgprefix:Error: invalid number of arguments (at least $arg_NUMS expected)" 1>&2
             echo "$msgprefix:Hint:  run \`$toolcmd -h' or \`man shtool' for details" 1>&2
@@ -400,13 +445,12 @@
 
 #   establish a temporary file on request
 if [ ".$gen_tmpfile" = .yes ]; then
-    tmpdir="/tmp"
     if [ ".$TMPDIR" != . ]; then
         tmpdir="$TMPDIR"
+    elif [ ".$TEMPDIR" != . ]; then
+        tmpdir="$TEMPDIR"
     else
-        if [ ".$TEMPDIR" != . ]; then
-            tmpdir="$TEMPDIR"
-        fi
+        tmpdir="/tmp"
     fi
     tmpfile="$tmpdir/.shtool.$$"
     rm -f $tmpfile >/dev/null 2>&1
@@ -422,7 +466,7 @@
 echo )
     ##
     ##  echo -- Print string with optional construct expansion
-    ##  Copyright (c) 1998-1999 Ralf S. Engelschall <rse@engelschall.com>
+    ##  Copyright (c) 1998-2000 Ralf S. Engelschall <rse@engelschall.com>
     ##  Originally written for WML as buildinfo
     ##
     
@@ -449,8 +493,8 @@
     term_bold='' 
     term_norm=''
     if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[Bb]'`" != . ]; then
-        #   the most important terminals we directly know
         case $TERM in
+            #   for the most important terminal types we directly know the sequences
             xterm|xterm*|vt220|vt220*)
                 term_bold=`awk 'BEGIN { printf("%c%c%c%c", 27, 91, 49, 109); }' </dev/null 2>/dev/null`
                 term_norm=`awk 'BEGIN { printf("%c%c%c", 27, 91, 109); }' </dev/null 2>/dev/null`
@@ -459,35 +503,37 @@
                 term_bold=`awk 'BEGIN { printf("%c%c%c%c%c%c", 27, 91, 49, 109, 0, 0); }' </dev/null 2>/dev/null`
                 term_norm=`awk 'BEGIN { printf("%c%c%c%c%c", 27, 91, 109, 0, 0); }' </dev/null 2>/dev/null`
                 ;;
-        esac
-        #   then try a possibly existing "tput" or "tcout" utility
-        paths=`echo $PATH | sed -e 's/:/ /g'`
-        for tool in tput tcout; do
-            for dir in $paths; do
-                if [ -r "$dir/$tool" ]; then
-                    for seq in bold md smso; do # smso is last
-                        bold="`$dir/$tool $seq 2>/dev/null`"
-                        if [ ".$bold" != . ]; then
-                            term_bold="$bold"
+            #   for all others, we try to use a possibly existing `tput' or `tcout' utility
+            * )
+                paths=`echo $PATH | sed -e 's/:/ /g'`
+                for tool in tput tcout; do
+                    for dir in $paths; do
+                        if [ -r "$dir/$tool" ]; then
+                            for seq in bold md smso; do # 'smso' is last
+                                bold="`$dir/$tool $seq 2>/dev/null`"
+                                if [ ".$bold" != . ]; then
+                                    term_bold="$bold"
+                                    break
+                                fi
+                            done
+                            if [ ".$term_bold" != . ]; then
+                                for seq in sgr0 me rmso reset; do # 'reset' is last
+                                    norm="`$dir/$tool $seq 2>/dev/null`"
+                                    if [ ".$norm" != . ]; then
+                                        term_norm="$norm"
+                                        break
+                                    fi
+                                done
+                            fi
                             break
                         fi
                     done
-                    if [ ".$term_bold" != . ]; then
-                        for seq in sgr0 me rmso reset; do # 'reset' is last
-                            norm="`$dir/$tool $seq 2>/dev/null`"
-                            if [ ".$norm" != . ]; then
-                                term_norm="$norm"
-                                break
-                            fi
-                        done
+                    if [ ".$term_bold" != . -a ".$term_norm" != . ]; then
+                        break;
                     fi
-                    break
-                fi
-            done
-            if [ ".$term_bold" != . -a ".$term_norm" != . ]; then
-                break;
-            fi
-        done
+                done
+                ;;
+        esac
         if [ ".$term_bold" = . -o ".$term_norm" = . ]; then
             echo "$msgprefix:Warning: unable to determine terminal sequence for bold mode" 1>&2
         fi
@@ -628,12 +674,12 @@
     
     #   create output
     if [ .$opt_n = .no ]; then
-        echo $seo $text
+        echo $seo "$text"
     else
         #   the harder part: echo -n is best, because
-        #   awk complains about some \xx sequences.
+        #   awk may complain about some \xx sequences.
         if [ ".$minusn" != . ]; then
-            echo $seo $minusn $text
+            echo $seo $minusn "$text"
         else
             echo dummy | awk '{ printf("%s", TEXT); }' TEXT="$text"
         fi
@@ -767,8 +813,8 @@
 
 table )
     ##
-    ##  table -- Pretty print a field-separated list as a table
-    ##  Copyright (c) 1998-1999 Ralf S. Engelschall <rse@engelschall.com>
+    ##  table -- Pretty-print a field-separated list as a table
+    ##  Copyright (c) 1998-2000 Ralf S. Engelschall <rse@engelschall.com>
     ##  Originally written for Apache
     ##
     
@@ -832,7 +878,7 @@
 prop )
     ##
     ##  prop -- Display progress with a running propeller
-    ##  Copyright (c) 1998-1999 Ralf S. Engelschall <rse@engelschall.com>
+    ##  Copyright (c) 1998-2000 Ralf S. Engelschall <rse@engelschall.com>
     ##  Originally written for mod_ssl
     ##
     
@@ -856,7 +902,7 @@
             printf(STDERR "\r%s    \n", $ARGV[0]);
         ' "$opt_p"
     else
-        #   But when Perl doesn't exists we use Awk even
+        #   But if Perl doesn't exists we use Awk even
         #   some Awk's buffer even the /dev/stderr writing :-(
         awk '
             BEGIN {
@@ -876,8 +922,8 @@
 
 move )
     ##
-    ##  move -- Move files with simultan substitution
-    ##  Copyright (c) 1999 Ralf S. Engelschall <rse@engelschall.com>
+    ##  move -- Move files with simultaneous substitution
+    ##  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
     ##  Originally written for shtool
     ##
     
@@ -969,131 +1015,159 @@
 install )
     ##
     ##  install -- Install a program, script or datafile
-    ##  Copyright (c) 1997-1999 Ralf S. Engelschall <rse@engelschall.com>
+    ##  Copyright (c) 1997-2000 Ralf S. Engelschall <rse@engelschall.com>
     ##  Originally written for shtool
     ##
     
-    src="$1"
-    dst="$2"
-    
-    #  If destination is a directory, append the input filename
-    if [ -d $dst ]; then
-        dst=`echo "$dst" | sed -e 's:/$::'`
-        dstfile=`echo "$src" | sed -e 's;.*/\([^/]*\)$;\1;'`
-        dst="$dst/$dstfile"
-    fi
+    #   determine source(s) and destination 
+    argc=$#
+    srcs=""
+    while [ $# -gt 1 ]; do
+        srcs="$srcs $1"
+        shift
+    done
+    dstpath="$1"
     
-    #  Add a possible extension to src and dst
-    if [ ".$opt_e" != . ]; then
-        src="$src$opt_e"
-        dst="$dst$opt_e"
+    #   type check for destination
+    dstisdir=0
+    if [ -d $dstpath ]; then
+        dstpath=`echo "$dstpath" | sed -e 's:/$::'`
+        dstisdir=1
     fi
     
-    #  Check for correct arguments
-    if [ ".$src" = ".$dst" ]; then
-        echo "$msgprefix:Error: source and destination are the same" 1>&2
+    #   consistency check for destination
+    if [ $argc -gt 2 -a $dstisdir = 0 ]; then
+        echo "$msgprefix:Error: multiple sources require destination to be directory" 1>&2
         exit 1
     fi
-    
-    #  Make a temp file name in the destination directory
-    dstdir=`echo $dst | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;' -e 's;^$;.;'`
-    dsttmp="$dstdir/#INST@$$#"
     
-    #  Verbosity
-    if [ ".$opt_v" = .yes ]; then
-        echo "$src -> $dst" 1>&2
-    fi
+    #   iterate over all source(s)
+    for src in $srcs; do
+        dst=$dstpath
     
-    #  Copy or move the file name to the temp name
-    #  (because we might be not allowed to change the source)
-    if [ ".$opt_C" = .yes ]; then
-        opt_c=yes
-    fi
-    if [ ".$opt_c" = .yes ]; then
-        if [ ".$opt_t" = .yes ]; then
-            echo "cp $src $dsttmp" 1>&2
+        #  If destination is a directory, append the input filename
+        if [ $dstisdir = 1 ]; then
+            dstfile=`echo "$src" | sed -e 's;.*/\([^/]*\)$;\1;'`
+            dst="$dst/$dstfile"
         fi
-        cp $src $dsttmp || exit $?
-    else
-        if [ ".$opt_t" = .yes ]; then
-            echo "mv $src $dsttmp" 1>&2
+    
+        #  Add a possible extension to src and dst
+        if [ ".$opt_e" != . ]; then
+            src="$src$opt_e"
+            dst="$dst$opt_e"
         fi
-        mv $src $dsttmp || exit $?
-    fi
     
-    #  Adjust the target file
-    #  (we do chmod last to preserve setuid bits)
-    if [ ".$opt_s" = .yes ]; then
-        if [ ".$opt_t" = .yes ]; then
-            echo "strip $dsttmp" 1>&2
+        #  Check for correct arguments
+        if [ ".$src" = ".$dst" ]; then
+            echo "$msgprefix:Warning: source and destination are the same - skipped" 1>&2
+            continue
         fi
-        strip $dsttmp || exit $?
-    fi
-    if [ ".$opt_o" != . ]; then
-        if [ ".$opt_t" = .yes ]; then
-            echo "chown $opt_o $dsttmp" 1>&2
+        if [ -d "$src" ]; then
+            echo "$msgprefix:Warning: source \`$src' is a directory - skipped" 1>&2
+            continue
         fi
-        chown $opt_o $dsttmp || exit $?
-    fi
-    if [ ".$opt_g" != . ]; then
-        if [ ".$opt_t" = .yes ]; then
-            echo "chgrp $opt_g $dsttmp" 1>&2
+    
+        #  Make a temp file name in the destination directory
+        dsttmp=`echo $dst |\
+                sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;' -e 's;^$;.;' \
+                    -e "s;\$;/#INST@$$#;"`
+    
+        #  Verbosity
+        if [ ".$opt_v" = .yes ]; then
+            echo "$src -> $dst" 1>&2
         fi
-        chgrp $opt_g $dsttmp || exit $?
-    fi
-    if [ ".$opt_m" != . ]; then
-        if [ ".$opt_t" = .yes ]; then
-            echo "chmod $opt_m $dsttmp" 1>&2
+    
+        #  Copy or move the file name to the temp name
+        #  (because we might be not allowed to change the source)
+        if [ ".$opt_C" = .yes ]; then
+            opt_c=yes
         fi
-        chmod $opt_m $dsttmp || exit $?
-    fi
+        if [ ".$opt_c" = .yes ]; then
+            if [ ".$opt_t" = .yes ]; then
+                echo "cp $src $dsttmp" 1>&2
+            fi
+            cp $src $dsttmp || exit $?
+        else
+            if [ ".$opt_t" = .yes ]; then
+                echo "mv $src $dsttmp" 1>&2
+            fi
+            mv $src $dsttmp || exit $?
+        fi
     
-    #   Determine whether to do a quick install
-    #   (has to be done _after_ the strip was already done)
-    quick=no
-    if [ ".$opt_C" = .yes ]; then
-        if [ -r $dst ]; then
-            if cmp -s $src $dst; then
-                quick=yes
+        #  Adjust the target file
+        #  (we do chmod last to preserve setuid bits)
+        if [ ".$opt_s" = .yes ]; then
+            if [ ".$opt_t" = .yes ]; then
+                echo "strip $dsttmp" 1>&2
             fi
+            strip $dsttmp || exit $?
         fi
-    fi
+        if [ ".$opt_o" != . ]; then
+            if [ ".$opt_t" = .yes ]; then
+                echo "chown $opt_o $dsttmp" 1>&2
+            fi
+            chown $opt_o $dsttmp || exit $?
+        fi
+        if [ ".$opt_g" != . ]; then
+            if [ ".$opt_t" = .yes ]; then
+                echo "chgrp $opt_g $dsttmp" 1>&2
+            fi
+            chgrp $opt_g $dsttmp || exit $?
+        fi
+        if [ ".$opt_m" != . ]; then
+            if [ ".$opt_t" = .yes ]; then
+                echo "chmod $opt_m $dsttmp" 1>&2
+            fi
+            chmod $opt_m $dsttmp || exit $?
+        fi
     
-    #   Finally install the file to the real destination
-    if [ $quick = yes ]; then
-        if [ ".$opt_t" = .yes ]; then
-            echo "rm -f $dsttmp" 1>&2
+        #   Determine whether to do a quick install
+        #   (has to be done _after_ the strip was already done)
+        quick=no
+        if [ ".$opt_C" = .yes ]; then
+            if [ -r $dst ]; then
+                if cmp -s $src $dst; then
+                    quick=yes
+                fi
+            fi
         fi
-        rm -f $dsttmp
-    else
-        if [ ".$opt_t" = .yes ]; then
-            echo "rm -f $dst && mv $dsttmp $dst" 1>&2
+    
+        #   Finally install the file to the real destination
+        if [ $quick = yes ]; then
+            if [ ".$opt_t" = .yes ]; then
+                echo "rm -f $dsttmp" 1>&2
+            fi
+            rm -f $dsttmp
+        else
+            if [ ".$opt_t" = .yes ]; then
+                echo "rm -f $dst && mv $dsttmp $dst" 1>&2
+            fi
+            rm -f $dst && mv $dsttmp $dst
         fi
-        rm -f $dst && mv $dsttmp $dst
-    fi
+    done
     ;;
 
 mkdir )
     ##
     ##  mkdir -- Make one or more directories
-    ##  Copyright (c) 1996-1999 Ralf S. Engelschall <rse@engelschall.com>
+    ##  Copyright (c) 1996-2000 Ralf S. Engelschall <rse@engelschall.com>
     ##  Originally written for public domain by Noah Friedman <friedman@prep.ai.mit.edu>
     ##  Cleaned up and enhanced for shtool
     ##
     
     errstatus=0
     for p in ${1+"$@"}; do
-        #   when the directory already exists...
+        #   if the directory already exists...
         if [ -d "$p" ]; then
-            if [ ".$opt_f" = .no ]; then
-                echo "$msgprefix:Error: file exists: $p" 1>&2
+            if [ ".$opt_f" = .no ] && [ ".$opt_p" = .no ]; then
+                echo "$msgprefix:Error: directory already exists: $p" 1>&2
                 errstatus=1
                 break
             else
                 continue
             fi
         fi
-        #   when the directory has to be created
+        #   if the directory has to be created...
         if [ ".$opt_p" = .no ]; then
             if [ ".$opt_t" = .yes ]; then
                 echo "mkdir $p" 1>&2
@@ -1107,7 +1181,7 @@
                            -e 's/\// /g' \
                            -e 's/^%/\//'`
             shift
-            pathcomp=
+            pathcomp=''
             for d in ${1+"$@"}; do
                 pathcomp="$pathcomp$d"
                 case "$pathcomp" in
@@ -1135,7 +1209,7 @@
 mkln )
     ##
     ##  mkln -- Make link with calculation of relative paths
-    ##  Copyright (c) 1999 Ralf S. Engelschall <rse@engelschall.com>
+    ##  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
     ##  Originally written for shtool
     ##
     
@@ -1273,14 +1347,14 @@
 
 mkshadow )
     ##
-    ##  mkshadow -- Make a shadow tree
-    ##  Copyright (c) 1998-1999 Ralf S. Engelschall <rse@engelschall.com>
+    ##  mkshadow -- Make a shadow tree through symbolic links
+    ##  Copyright (c) 1998-2000 Ralf S. Engelschall <rse@engelschall.com>
     ##  Originally written for Apache
     ##
     
     #   source and destination directory
-    src=`echo "$1" | sed -e 's:/$::'`
-    dst=`echo "$2" | sed -e 's:/$::'`
+    src=`echo "$1" | sed -e 's:/$::' -e 's:^\./\(.\):\1:'`
+    dst=`echo "$2" | sed -e 's:/$::' -e 's:^\./\(.\):\1:'`
     
     #   check whether source exists
     if [ ! -d $src ]; then
@@ -1301,10 +1375,21 @@
     #   determine reverse directory for destination directory
     dstrevdir=''
     if [ $oneisabs = 0 ]; then
-        #   (inlined fp2rp)
+        #   derive reverse path from forward path
+        pwd=`pwd`
         OIFS="$IFS"; IFS='/'
         for pe in $dst; do
-            dstrevdir="../$dstrevdir"
+            if [ "x$pe" = "x.." ]; then
+                OIFS2="$IFS"; IFS="$DIFS"
+                eval `echo "$pwd" |\
+                      sed -e 's:\([^/]*\)$:; dir="\1":' \
+                          -e 's:^\(.*\)/[^/]*;:pwd="\1";:'\
+                          -e 's:^;:pwd="";:'`
+                dstrevdir="$dir/$dstrevdir"
+                IFS="$OIFS2"
+            else
+                dstrevdir="../$dstrevdir"
+            fi
         done
         IFS="$OIFS"
     else
@@ -1355,7 +1440,7 @@
          if [ $oneisabs = 0 ]; then
              if [ ".$dir" != . ]; then
                  subdir=`echo $dir | sed -e 's:/$::'`
-                 #   (inlined fp2rp)
+                 #   derive reverse path from forward path
                  revdir=''
                  OIFS="$IFS"; IFS='/'
                  for pe in $subdir; do
@@ -1380,25 +1465,18 @@
 fixperm )
     ##
     ##  fixperm -- Fix file permissions inside a source tree
-    ##  Copyright (c) 1996-1999 Ralf S. Engelschall <rse@engelschall.com>
+    ##  Copyright (c) 1996-2000 Ralf S. Engelschall <rse@engelschall.com>
     ##  Originally written for ePerl
     ##
     
     paths="$*"
     
     #   check whether the test command supports the -x option
-    cat >$tmpfile <<EOT
-if [ -x / ] || [ -x /bin ] || [ -x /bin/ls ]; then
-    exit 0
-fi
-exit 1
-EOT
-    if sh $tmpfile 2>/dev/null; then
+    if [ -x /bin/sh ] 2>/dev/null; then
         minusx="-x"
     else
         minusx="-r"
     fi
-    rm -f $tmpfile
     
     #   iterate over paths
     for p in $paths; do
@@ -1443,25 +1521,18 @@
 tarball )
     ##
     ##  tarball -- Roll distribution tarballs
-    ##  Copyright (c) 1999 Ralf S. Engelschall <rse@engelschall.com>
+    ##  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
     ##  Originally written for shtool
     ##
     
     srcs="$*"
     
     #   check whether the test command supports the -x option
-    cat >$tmpfile <<EOT
-if [ -x / ] || [ -x /bin ] || [ -x /bin/ls ]; then
-    exit 0
-fi
-exit 1
-EOT
-    if sh $tmpfile 2>/dev/null; then
+    if [ -x /bin/sh ] 2>/dev/null; then
         minusx="-x"
     else
         minusx="-r"
     fi
-    rm -f $tmpfile
     
     #   find the tools
     paths="`echo $PATH |\
@@ -1579,14 +1650,14 @@
                 echo "chown -R $opt_u $tmpdir/$tarname >/dev/null 2>&1" 2>&1
             fi
             chown -R $opt_u $tmpdir/$tarname >/dev/null 2>&1 ||\
-            echo "$msgprefix:Warning: cannot set user name \`$opt_u' (need root priviledges)"
+            echo "$msgprefix:Warning: cannot set user name \`$opt_u' (would require root priviledges)"
         fi
         if [ ".$opt_g" != . ]; then
             if [ ".$opt_t" = .yes ]; then
                 echo "chgrp -R $opt_g $tmpdir/$tarname >/dev/null 2>&1" 2>&1
             fi
             chgrp -R $opt_g $tmpdir/$tarname >/dev/null 2>&1 ||\
-            echo "$msgprefix:Warning: cannot set group name \`$opt_g' (need root priviledges)"
+            echo "$msgprefix:Warning: cannot set group name \`$opt_g' (would require root priviledges)"
         fi
         if [ ".$opt_t" = .yes ]; then
             echo "(cd $tmpdir && $prg_find $tarname -type f -depth -print | sort | xargs $prg_tar cf -) | cat $compress >$tmpfile.out" 1>&2
@@ -1612,13 +1683,13 @@
 
 guessos )
     ##
-    ##  guessos -- Simple OS/platform guesser
+    ##  guessos -- Simple operating system guesser
     ##  Copyright (c) 1996-1999 The Apache Group, http://www.apache.org/
     ##  The Apache license applies (see http://www.apache.org/docs/LICENSE)
     ##  Originally written for Apache
     ##
     
-    MACHINE=`(uname -m) 2>/dev/null` || MACHINE="unknown"
+    MACHINE=`(uname -m) 2>/dev/null` || MACHINE=`(uname -p) 2>/dev/null` || MACHINE="unknown"
     RELEASE=`(uname -r) 2>/dev/null` || RELEASE="unknown"
      SYSTEM=`(uname -s) 2>/dev/null` ||  SYSTEM="unknown"
     VERSION=`(uname -v) 2>/dev/null` || VERSION="unknown"
@@ -1853,13 +1924,13 @@
     esac
     
     # Fallback
-    echo "${MACHINE}-whatever-${SYSTEM}/${RELEASE}/${VERSION}"
+    echo "${MACHINE}-unknown-${SYSTEM}/${RELEASE}/${VERSION}"
     ;;
 
 arx )
     ##
     ##  arx -- Extended archive command
-    ##  Copyright (c) 1999 Ralf S. Engelschall <rse@engelschall.com>
+    ##  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
     ##  Originally written for shtool
     ##
     
@@ -1903,7 +1974,7 @@
                         echo "$msgprefix:Error: member extraction failed for archive: $file" 1>&2
                         exit 1
                     fi
-                    for member in - `eval $ar_prg t $file`; do
+                    for member in - `eval $ar_prg t $file | sed -e '/_\.SYMDEF/d'`; do
                         [ ".$member" = .- ] && continue
                         nfiles="$nfiles $tmpdir/$member"
                     done
@@ -1937,7 +2008,7 @@
 slo )
     ##
     ##  slo -- Separate linker options by library class
-    ##  Copyright (c) 1998-1999 Ralf S. Engelschall <rse@engelschall.com>
+    ##  Copyright (c) 1998-2000 Ralf S. Engelschall <rse@engelschall.com>
     ##  Originally written for Apache
     ##
     
@@ -1955,7 +2026,7 @@
             opt="${optprev}${opt}";
             optprev=''
         fi
-        #   remember options for arg when used stand-alone
+        #   remember options for arg if used stand-alone
         if [ ".$opt" = ".-L" -o ".$opt" = ".-l" ]; then
             optprev="$opt"
             continue;
@@ -2086,15 +2157,15 @@
     for var in ARGV DIRS_OBJ LIBS_OBJ DIRS_PIC LIBS_PIC DIRS_DSO LIBS_DSO; do
         eval "val=\"\$${var}\""
         val="`echo $val | sed -e 's/^ *//'`"
-        echo "SLO_${var}=\"${val}\""
+        echo "${opt_p}${var}=\"${val}\""
     done
     ;;
 
 scpp )
     ##
     ##  scpp -- Sharing C Pre-Processor
-    ##  Copyright (c) 1999 Ralf S. Engelschall <rse@engelschall.com>
-    ##  Originally written for GNU pth
+    ##  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
+    ##  Originally written for GNU Pth
     ##
     
     srcs="$*"
@@ -2129,8 +2200,14 @@
     for src in $srcs; do
         if [ ".$opt_v" = .yes ]; then
             echo $src | $awk '{ printf(" %s", $0); }' 1>&2
+        fi
+        if [ ".$opt_f" = . ]; then
+            inputcmd="cat $src"
+        else
+            inputcmd="sed $opt_f $src"
         fi
-        $awk <$src '
+        $inputcmd |\
+        $awk '
            BEGIN {
                ln    = 0;
                fln   = 0;
@@ -2298,142 +2375,98 @@
     ;;
 
 version )
-    ##
-    ##  version -- Generate and maintain a version information file
-    ##  Copyright (c) 1994-1999 Ralf S. Engelschall <rse@engelschall.com>
-    ##  Originally written for ePerl
     ##
+    ##  version -- Maintain a version information file
+    ##  Copyright (c) 1994-2000 Ralf S. Engelschall <rse@engelschall.com>
+    ##  Originally written for ePerl, rewritten from scratch for shtool
+    ##
+    
+    file="$1"
+    
+    #   determine prefix and name
+    name="$opt_n"
+    prefix="$opt_p"
+    
+    #   determine current version
+    triple="$opt_s"
+    if [ ".$triple" != . ]; then
+        #   use given triple
+        if [ ".`echo $triple | grep '[0-9]*.[0-9]*[sabp.][0-9]*'`" = . ]; then
+            echo "$msgprefix:Error: invalid argument to option \`-s': \`$opt_s'" 1>&2
+            exit 1
+        fi
+        eval `echo $triple |\
+              sed -e 's%\([0-9]*\)\.\([0-9]*\)\([sabp.]\)\([0-9]*\).*%\
+              ver="\1";rev="\2";typ="\3";lev="\4"%'`
+        tim=calc
+    elif [ -r $file ]; then
+        #   determine triple from given file
+        eval `grep 'Version [0-9]*.[0-9]*[sabp.][0-9]* ([0-9]*-[a-zA-Z]*-[0-9]*)' $file |\
+              head -1 | sed -e 's%.*Version \([0-9]*\)\.\([0-9]*\)\([sabp.]\)\([0-9]*\) (\([0-9]*-[a-zA-Z]*-[0-9]*\)).*%\
+              ver="\1";rev="\2";typ="\3";lev="\4";tim="\5"%'`
+    else
+        #   intialise to first version
+        ver=0
+        rev=1
+        typ=.
+        lev=0
+        tim=calc
+    fi
     
-    LANGUAGE="$opt_l"
-    NAME="$opt_n"
-    PREFIX="$opt_p"
-    FULLVERSION="$opt_s"
-    INCREASE="$opt_i"
-    REPORT="$opt_d"
-    FILE="$1"
-    
-    #   determine language
-    if [ ".$LANGUAGE" = .unknown ]; then
-        case $FILE in
-            *.txt )       LANGUAGE=txt  ;;
-            *.c )         LANGUAGE=c    ;;
-            *.pl | *.pm ) LANGUAGE=perl ;;
-            * )           echo "$tool:Error: unknown language type" 1>&2; exit 1 ;;
+    #   determine new version in batch
+    if [ ".$opt_i" != . ]; then
+        case $opt_i in
+            v ) ver=`expr $ver + 1`
+                rev=0
+                lev=0
+                ;;
+            r ) rev=`expr $rev + 1`
+                lev=0
+                ;;
+            l ) lev=`expr $lev + 1`
+                ;;
+            * ) echo "$msgprefix:Error: invalid argument to option \`-i': \`$opt_i'" 1>&2
+                exit 1
+                ;;
         esac
+        tim=calc
     fi
     
-    #   determine prefix from name and vice versa
-    if [ ".$PREFIX" = . -o ".$PREFIX" = .unknown ]; then
-        if [ ".$NAME" != . -a ".$NAME" != .unknown ]; then
-            PREFIX="$NAME"
-        fi
-    fi
-    if [ ".$NAME" = . -o ".$NAME" = .unknown ]; then
-        if [ ".$PREFIX" != . -a ".$PREFIX" != .unknown ]; then
-            NAME="$PREFIX"
-        fi
+    #   determine new version interactively
+    if [ ".$opt_e" = .yes ]; then
+        echo "old version: ${ver}.${rev}${typ}${lev}"
+        while [ 1 ]; do
+            echo dummy | awk '{ printf("new version: "); }'
+            read triple
+            case $triple in
+                [0-9]*.[0-9]*[sabp.][0-9]* ) 
+                    ;;
+                * ) echo "$msgprefix:Error: invalid version string entered: \`$triple'" 1>&2
+                    continue
+                    ;;
+            esac
+            break
+        done
+        eval `echo $triple |\
+              sed -e 's%^\([0-9]*\)\.\([0-9]*\)\([sabp.]\)\([0-9]*\)$%\
+              ver="\1";rev="\2";typ="\3";lev="\4"%'`
+        tim=calc
     fi
-    
-    #   determine version
-    date=unknown
-    version=0
-    revision=0
-    bplevel=0
-    if [ ".$FULLVERSION" = .unknown ]; then
-        if [ -r "$FILE" ]; then
-            #   grep out current information
-            id=`grep 'Version [0-9]*.[0-9]*[.abps][0-9]* ([0-9]*-[a-zA-Z]*-[0-9]*)' $FILE | \
-                head -1 | \
-                sed -e 's%.*Version \([0-9]*\)\.\([0-9]*\)\([.abps]\)\([0-9]*\) (\([0-9]*-[a-zA-Z]*-[0-9]*\)).*%\1:\2:\3:\4:\5%'`
-            version=`echo $id | awk -F: '{ print $1 }'`
-            revision=`echo $id | awk -F: '{ print $2 }'`
-            bptype=`echo $id | awk -F: '{ print $3 }'`
-            bplevel=`echo $id | awk -F: '{ print $4 }'`
-            date=`echo $id | awk -F: '{ print $5 }'`
-            if [ .$REPORT = .NO ]; then
-                case $INCREASE in
-                    b ) bplevel=`expr $bplevel + 1`
-                        bptype=b
-                        ;;
-                    a ) bplevel=`expr $bplevel + 1`
-                        bptype=a
-                        ;;
-                    s ) bplevel=`expr $bplevel + 1`
-                        bptype=s
-                        ;;
-                    P ) bplevel=`expr $bplevel + 1`
-                        bptype=.
-                        ;;
-                    p ) bplevel=`expr $bplevel + 1`
-                        bptype=p
-                        ;;
-                    r ) revision=`expr $revision + 1`
-                        bptype=.
-                        bplevel=0
-                        ;;
-                    v ) version=`expr $version + 1`
-                        revision=0
-                        bptype=.
-                        bplevel=0
-                        ;;
-                esac
-                date=calc
-            fi
-            FULLVERSION="$version.$revision$bptype$bplevel"
-        else
-            #   intialise to first version
-            version=0
-            revision=5
-            bptype=b
-            bplevel=0
-            date=calc
-        fi
-    else
-        #   take given version
-        V=`echo $FULLVERSION | sed -e 's%\([0-9]*\)\.\([0-9]*\)\([.abps]\)\([0-9]*\).*%\1:\2:\3:\4%'`
-        version=`echo $V | awk -F: '{ print $1 }'`
-        revision=`echo $V | awk -F: '{ print $2 }'`
-        bptype=`echo $V | awk -F: '{ print $3 }'`
-        bplevel=`echo $V | awk -F: '{ print $4 }'`
-        date=calc
-    fi
-    
-    #   determine hex value of version
-    case $FULLVERSION in
-        *.*a* )
-            HEX=`echo "$FULLVERSION" | sed -e 's/a.*//' | awk -F. '{ printf("%d%02d", $1, $2); }' &&
-                 echo "$FULLVERSION" | sed -e 's/.*a//' | awk '{ printf("0%02d", $1); }'`
-            ;;
-        *.*b* )
-            HEX=`echo "$FULLVERSION" | sed -e 's/b.*//' | awk -F. '{ printf("%d%02d", $1, $2); }' &&
-                 echo "$FULLVERSION" | sed -e 's/.*b//' | awk '{ printf("1%02d", $1); }'`
-            ;;
-        *.*.* )
-            HEX=`echo "$FULLVERSION" | awk -F. '{ printf("%d%02d2%02d", $1, $2, $3); }'`
-            ;;
-    esac
     
-    #   determine libtool version
-    case $FULLVERSION in
-        *.*a* )
-            LTV=`echo "$FULLVERSION" | sed -e 's/a.*//' | awk -F. '{ printf("%d:0", $1*10+$2); }'`
-            ;;
-        *.*b* )
-            LTV=`echo "$FULLVERSION" | sed -e 's/b.*//' | awk -F. '{ printf("%d:0", $1*10+$2); }'`
-            ;;
-        *.*.* )
-            LTV=`echo "$FULLVERSION" | awk -F. '{ printf("%d:%d", $1*10+$2, $3); }'`
-            ;;
+    #   determine hexadecimal and libtool value of version
+    case $typ in
+        a     ) typnum=0;  levnum=$lev ;;
+        b     ) typnum=1;  levnum=$lev ;;
+        p | . ) typnum=2;  levnum=$lev ;;
+        s     ) typnum=15; levnum=255  ;; # snapshots are special
     esac
-    
-    #   determine string out of filename
-    #   (don't try to optimize this in any way - portability!)
-    FILESTR=`echo "$FILE" |\
-             tr 'abcdefghijklmnopqrstuvwxyz./%+' \
-                'ABCDEFGHIJKLMNOPQRSTUVWXYZ____' | sed -e 's/-/_/g'`
+    hex=`echo "$ver:$rev:$typnum:$levnum" |\
+         awk -F: '{ printf("0x%X%02X%1X%02X", $1, $2, $3, $4); }'`
+    ltv=`echo "$ver:$rev:$typnum:$levnum" |\
+         awk -F: '{ printf("%d:%d", $1*10 + $2, $3*10 + $4); }'`
     
     #   determine date
-    if [ ".$date" = .calc ]; then
+    if [ ".$tim" = .calc ]; then
         day=`date '+%d'`
         month=`date '+%m'`
         year=`date '+%Y' 2>/dev/null`
@@ -2458,135 +2491,164 @@
               11) month='Nov' ;;
               12) month='Dec' ;;
         esac
-        date="${day}-${month}-${year}"
+        tim="${day}-${month}-${year}"
     fi
     
-    if [ .$REPORT != .NO ]; then
-        case $REPORT in
-            long )
-                echo "$version.$revision$bptype$bplevel ($date)"
-                ;;
+    #   perform result actions
+    mode=show
+    if [ ".$opt_i" != . ]; then
+        mode=edit
+    elif [ ".$opt_e" = .yes ]; then
+        mode=edit
+    elif [ ".$opt_s" != . ]; then
+        mode=edit
+    fi
+    if [ ".$mode" = .show ]; then
+        #   just display the current version
+        case $opt_d in
             short )
-                echo "$version.$revision$bptype$bplevel"
+                echo "${ver}.${rev}${typ}${lev}"
+                ;;
+            long )
+                echo "${ver}.${rev}${typ}${lev} ($tim)"
                 ;;
             libtool )
-                echo "$LTV"
+                echo "${ltv}"
                 ;;
             hex )
-                echo "0x$HEX"
+                echo "${hex}"
+                ;;
+            * ) echo "$msgprefix:Error: invalid argument to option \`-d': \`$opt_d'" 1>&2
+                exit 1
                 ;;
         esac
-        rm -f $tmpfile >/dev/null 2>&1
-        exit 0
-    fi
+    else 
+        #   update the version file
     
-    #   create the version file according the the selected language
-    echo "new version: $version.$revision$bptype$bplevel ($date)"
-    case $LANGUAGE in
-        txt )
-            cat >$tmpfile <<'EOT'
-    
-  This is @NAME@, Version @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ (@DAY@-@MONTH@-@YEAR@)
-EOT
-            ;;
-        c )
-            cat >$tmpfile <<'EOT'
-/*
-**  @FILE@ -- Version Information
-**  [automatically generated and maintained by shtool]
-*/
-
-#ifdef _AS_HEADER
-
-#ifndef _@FILESTR@
-#define _@FILESTR@
-#define @PREFIX@_VERSION 0x@HEX@
-extern const int  @PREFIX@_Version;
-extern const char @PREFIX@_VersionStr[];
-extern const char @PREFIX@_Hello[];
-extern const char @PREFIX@_GNUVersion[];
-extern const char @PREFIX@_WhatID[];
-extern const char @PREFIX@_RCSIdentID[];
-extern const char @PREFIX@_WebID[];
-extern const char @PREFIX@_PlainID[];
-#endif /* _@FILESTR@ */
-
-#else
-
-const int  @PREFIX@_Version      = 0x@HEX@;
-const char @PREFIX@_VersionStr[] = "@VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ (@DAY@-@MONTH@-@YEAR@)";
-const char @PREFIX@_Hello[]      = "This is @NAME@, Version @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ (@DAY@-@MONTH@-@YEAR@)";
-const char @PREFIX@_GNUVersion[] = "@NAME@ Version @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@";
-const char @PREFIX@_WhatID[]     = "@(#)@NAME@ Version @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ (@DAY@-@MONTH@-@YEAR@)";
-const char @PREFIX@_RCSIdentID[] = "$Id: shtool,v 1.2 1999/11/12 14:42:21 rse Exp $";
-const char @PREFIX@_WebID[]      = "@NAME@/@VERSION@.@REVISION@@BPTYPE@@BPLEVEL@";
-const char @PREFIX@_PlainID[]    = "@VERSION@.@REVISION@@BPTYPE@@BPLEVEL@";
-
-#endif
-EOT
-            ;;
-        perl )
-            cat >$tmpfile <<'EOT'
-##
-##  @FILE@ -- Version Information
-##  [automatically generated and maintained by shtool]
-##
-
-$@PREFIX@_Version    = 0x@HEX@;
-$@PREFIX@_VersionStr = "@VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ (@DAY@-@MONTH@-@YEAR@)";
-$@PREFIX@_Hello      = "This is @NAME@, Version @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ (@DAY@-@MONTH@-@YEAR@)";
-$@PREFIX@_GNUVersion = "@NAME@ Version @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@";
-$@PREFIX@_WhatID     = "@(#)@NAME@ Version @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ (@DAY@-@MONTH@-@YEAR@)";
-$@PREFIX@_RCSIdentID = "\$Id: shtool,v 1.2 1999/11/12 14:42:21 rse Exp $/";
-$@PREFIX@_WebID      = "@NAME@/@VERSION@.@REVISION@@BPTYPE@@BPLEVEL@";
-$@PREFIX@_PlainID    = "@VERSION@.@REVISION@@BPTYPE@@BPLEVEL@";
-
-1;
-EOT
-            ;;
-    esac
-    
-    #   now create the version file
-    rm -f $FILE >/dev/null 2>&1
-    sed \
-        -e "s|@FILE@|$FILE|g" \
-        -e "s|@FILESTR@|$FILESTR|g" \
-        -e "s|@PREFIX@|$PREFIX|g" \
-        -e "s|@NAME@|$NAME|g" \
-        -e "s|@HEX@|$HEX|g" \
-        -e "s|@VERSION@|$version|g" \
-        -e "s|@REVISION@|$revision|g" \
-        -e "s|@BPTYPE@|$bptype|g" \
-        -e "s|@BPLEVEL@|$bplevel|g" \
-        -e "s|@YEAR@|$year|g" \
-        -e "s|@MONTH@|$month|g" \
-        -e "s|@DAY@|$day|g" <$tmpfile >$FILE
-    rm -f $tmpfile >/dev/null 2>&1
-    exit 0
+        #   pre-generate various strings
+        triple="${ver}.${rev}${typ}${lev}"
+        vHex="$hex"
+        vShort="${triple}"
+        vLong="${triple} (${tim})"
+        vTeX="This is ${name}, Version ${triple} (${tim})"
+        vGNU="${name} ${triple} (${tim})"
+        vWeb="${name}/${triple}"
+        vSCCS="@(#)${name} ${triple} (${tim})"
+        vRCS="\$Id: shtool,v 1.3 2000/07/03 14:15:16 rse Exp ${name} ${triple} (${tim}) \$"
+    
+        #   determine string out of filename
+        #   (do NOT try to optimize this in any way because of portability)
+        filestr=`echo $file |\
+                 tr 'abcdefghijklmnopqrstuvwxyz./%+' \
+                    'ABCDEFGHIJKLMNOPQRSTUVWXYZ____' | sed -e 's/-/_/g'`
+    
+        #   generate uppercase prefix
+        prefixupper=`echo $prefix |\
+                     tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+        
+        #   create the version file according the the selected language
+        echo "new version: ${vLong}"
+    
+        cp /dev/null $file
+        case $opt_l in
+            txt )
+                echo >>$file ""
+                echo >>$file "  ${file} -- Version Information for ${name} (syntax: Text)"
+                echo >>$file "  [automatically generated and maintained by GNU shtool]"
+                echo >>$file ""
+                echo >>$file "  $vTeX"
+                echo >>$file ""
+                ;;
+            c )
+                echo >>$file "/*"
+                echo >>$file "**  ${file} -- Version Information for ${name} (syntax: C/C++)"
+                echo >>$file "**  [automatically generated and maintained by GNU shtool]"
+                echo >>$file "*/"
+                echo >>$file ""
+                echo >>$file "#ifdef _${filestr}_AS_HEADER_"
+                echo >>$file ""
+                echo >>$file "#ifndef _${filestr}_"
+                echo >>$file "#define _${filestr}_"
+                echo >>$file ""
+                echo >>$file "#define ${prefixupper}VERSION ${vHex}"
+                echo >>$file ""
+                echo >>$file "typedef struct {"
+                echo >>$file "    const int   v_hex;"
+                echo >>$file "    const char *v_short;"
+                echo >>$file "    const char *v_long;"
+                echo >>$file "    const char *v_tex;"
+                echo >>$file "    const char *v_gnu;"
+                echo >>$file "    const char *v_web;"
+                echo >>$file "    const char *v_sccs;"
+                echo >>$file "    const char *v_rcs;"
+                echo >>$file "} ${prefix}version_t;"
+                echo >>$file ""
+                echo >>$file "extern ${prefix}version_t ${prefix}version;"
+                echo >>$file ""
+                echo >>$file "#endif /* _${filestr}_ */"
+                echo >>$file ""
+                echo >>$file "#else /* _${filestr}_AS_HEADER_ */"
+                echo >>$file ""
+                echo >>$file "#define _${filestr}_AS_HEADER_"
+                echo >>$file "#include \"${file}\""
+                echo >>$file "#undef  _${filestr}_AS_HEADER_"
+                echo >>$file ""
+                echo >>$file "${prefix}version_t ${prefix}version = {"
+                echo >>$file "    ${vHex},"
+                echo >>$file "    \"${vShort}\","
+                echo >>$file "    \"${vLong}\","
+                echo >>$file "    \"${vTeX}\","
+                echo >>$file "    \"${vGNU}\","
+                echo >>$file "    \"${vWeb}\","
+                echo >>$file "    \"${vSCCS}\","
+                echo >>$file "    \"${vRCS}\""
+                echo >>$file "};"
+                echo >>$file ""
+                echo >>$file "#endif /* _${filestr}_AS_HEADER_ */"
+                echo >>$file ""
+                ;;
+            perl )
+                echo >>$file "##"
+                echo >>$file "##  ${file} -- Version Information for ${name} (syntax: Perl)"
+                echo >>$file "##  [automatically generated and maintained by GNU shtool]"
+                echo >>$file "##"
+                echo >>$file ""
+                echo >>$file "my \$${prefix}version = {"
+                echo >>$file "    'v_hex'   => ${vHex},"
+                echo >>$file "    'v_short' => \"${vShort}\","
+                echo >>$file "    'v_long'  => \"${vLong}\","
+                echo >>$file "    'v_tex'   => \"${vTeX}\","
+                echo >>$file "    'v_gnu'   => \"${vGNU}\","
+                echo >>$file "    'v_web'   => \"${vWeb}\","
+                echo >>$file "    'v_sccs'  => \"${vSCCS}\","
+                echo >>$file "    'v_rcs'   => \"\\${vRCS}/\""
+                echo >>$file "};"
+                echo >>$file ""
+                echo >>$file "1;"
+                echo >>$file ""
+                ;;
+            * ) echo "$msgprefix:Error: invalid argument to option \`-l': \`$opt_l'" 1>&2
+                exit 1
+                ;;
+        esac
+    fi
     ;;
 
 path )
     ##
     ##  path -- Deal with program paths
-    ##  Copyright (c) 1998-1999 Ralf S. Engelschall <rse@engelschall.com>
+    ##  Copyright (c) 1998-2000 Ralf S. Engelschall <rse@engelschall.com>
     ##  Originally written for Apache
     ##
     
     namelist="$*"
     
     #   check whether the test command supports the -x option
-    cat >$tmpfile <<EOT
-if [ -x / ] || [ -x /bin ] || [ -x /bin/ls ]; then
-    exit 0
-fi
-exit 1
-EOT
-    if sh $tmpfile 2>/dev/null; then
+    if [ -x /bin/sh ] 2>/dev/null; then
         minusx="-x"
     else
         minusx="-r"
     fi
-    rm -f $tmpfile
     
     #   split path string
     paths="`echo $opt_p |\
@@ -2628,25 +2690,24 @@
     if [ ".$opt_m" = .yes ] && [ ".$namelist" = .perl ]; then
         rm -f $tmpfile
         touch $tmpfile
-        c=0
         found=0
+        pc=99
         for dir in $paths; do
             dir=`echo $dir | sed -e 's;/*$;;'`
-            for perl in perl5 perl miniperl; do
-                 if [ $minusx "$dir/$perl" ] && [ ! -d "$dir/$perl" ]; then
-                     perl="$dir/$perl"
-                     version=`$perl -v | grep version |\
-                              sed -e 's/.* version //' -e 's/ built.*//' -e 's/ with.*//'`
-                     versionnum="`echo $version | sed -e 's/\.//g' -e 's/_//g'`"
-                     versionnum=`expr $versionnum - $c`
-                     echo "$versionnum $perl" >>$tmpfile
+            nc=99
+            for name in perl perl5 miniperl; do
+                 if [ $minusx "$dir/$name" ] && [ ! -d "$dir/$name" ]; then
+                     perl="$dir/$name"
+                     pv=`$perl -e 'printf("%.3f", $]);'`
+                     echo "$pv:$pc:$nc:$perl" >>$tmpfile
                      found=1
                  fi
+                 nc=`expr $nc - 1`
             done
-            c=`expr $c + 1`
+            pc=`expr $pc - 1`
         done
         if [ $found = 1 ]; then
-            perl="`cat $tmpfile | sort -u | tail -1 | cut '-d ' -f2`"
+            perl="`cat $tmpfile | sort -u | tail -1 | cut -d: -f4`"
             rm -f $tmpfile
             echo "$perl"
             exit 0
@@ -2657,10 +2718,8 @@
     #   MAGIC SITUATION
     #   C pre-processor (cpp)
     if [ ".$opt_m" = .yes ] && [ ".$namelist" = .cpp ]; then
-        cat >$tmpfile.c <<EOT
-#include <assert.h>
-    Syntax Error
-EOT
+        echo >$tmpfile.c "#include <assert.h>"
+        echo >>$tmpfile.c "Syntax Error"
         #   1. try the standard cc -E approach
         cpp="${CC-cc} -E"
         (eval "$cpp $tmpfile.c >/dev/null") 2>$tmpfile.out
@@ -2705,7 +2764,7 @@
             path=`echo $path | sed -e 's;/*$;;'`
             if [ $minusx "$path/$name" ] && [ ! -d "$path/$name" ]; then
                 if [ ".$opt_s" != .yes ]; then
-                    echo "$path/$name" 2>&1
+                    echo "$path/$name"
                 fi
                 exit 0
             fi
--QN8DD4WCIA4DI16JQSKU--


From ossp-cvs-owner@ossp.org  Thu Jul  6 21:14:41 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e66JEeU08310; Thu, 6 Jul 2000 21:14:40 +0200 (CEST)
Date: Thu, 6 Jul 2000 21:14:40 +0200 (CEST)
Message-Id: <200007061914.e66JEeU08310@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvs .cvsignore COPYING COPYING.LIB ChangeLog.zoo ...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   06-Jul-2000 21:14:40
  Branch: vendor                           Handle: 19700101010000962907078

  Modified files:           (Branch: vendor)
    ossp-pkg/cvs            NEWS
    ossp-pkg/cvs/doc        FAQ cvs.texinfo
    ossp-pkg/cvs/lib        getline.c getline.h
    ossp-pkg/cvs/src        admin.c client.c fileattr.c main.c myndbm.c
                            patch.c rcs.c sanity.sh server.c
  Touched files:            (Branch: vendor)
    ossp-pkg/cvs            .cvsignore COPYING COPYING.LIB ChangeLog.zoo
                            INSTALL Makefile.in README acconfig.h config.h.in
                            configure configure.in
    ossp-pkg/cvs/diff       .cvsignore Makefile.in analyze.c cmpbuf.c cmpbuf.h
                            context.c diagmeet.note diff.c diff.h diff3.c
                            diffrun.h dir.c ed.c ifdef.c io.c normal.c side.c
                            system.h util.c version.c
    ossp-pkg/cvs/doc        .cvsignore HACKING Makefile.in RCSFILES TESTS TODO
                            cvs-paper.ms cvsclient.texi
    ossp-pkg/cvs/lib        .cvsignore Makefile.in argmatch.c dup2.c fncase.c
                            fnmatch.c fnmatch.h ftruncate.c getdate.c
                            getdate.y getopt.c getopt.h getopt1.c hostname.c
                            md5.c md5.h memmove.c mkdir.c regex.c regex.h
                            rename.c savecwd.c savecwd.h sighandle.c
                            strerror.c stripslash.c strstr.c strtoul.c
                            system.h valloc.c wait.h waitpid.c xgetwd.c
                            yesno.c
    ossp-pkg/cvs/man        .cvsignore Makefile.in cvs.1 cvs.5
    ossp-pkg/cvs/src        .cvsignore Makefile.in add.c buffer.c buffer.h
                            checkin.c checkout.c classify.c client.h commit.c
                            create_adm.c cvs.h cvsrc.c diff.c edit.c edit.h
                            entries.c error.c error.h expand_path.c fileattr.h
                            filesubr.c find_names.c hardlink.c hardlink.h
                            hash.c hash.h history.c ignore.c import.c lock.c
                            log.c login.c logmsg.c mkmodules.c modules.c
                            myndbm.h no_diff.c options.h.in parseinfo.c rcs.h
                            rcscmds.c recurse.c release.c remove.c repos.c
                            root.c rtag.c run.c scramble.c server.h status.c
                            subr.c tag.c update.c update.h vers_ts.c version.c
                            watch.c watch.h wrapper.c zlib.c
    ossp-pkg/cvs/zlib       .cvsignore Makefile.in README adler32.c
                            algorithm.doc compress.c crc32.c deflate.c
                            deflate.h gzio.c infblock.c infblock.h infcodes.c
                            infcodes.h inffast.c inffast.h inflate.c
                            inftrees.c inftrees.h infutil.c infutil.h trees.c
                            uncompr.c zconf.h zlib.h zutil.c zutil.h

  Log:
    Import of vendor CVS version, snapshot 20000706
    
    [Release Tags: CVS_20000706]

  Summary:
    Revision    Changes     Path
    1.1.1.4     +2  -0      ossp-pkg/cvs/NEWS
    1.1.1.2     +0  -0      ossp-pkg/cvs/doc/FAQ
    1.1.1.6     +0  -0      ossp-pkg/cvs/doc/cvs.texinfo
    1.1.1.2     +0  -0      ossp-pkg/cvs/lib/getline.c
    1.1.1.2     +0  -0      ossp-pkg/cvs/lib/getline.h
    1.1.1.3     +0  -0      ossp-pkg/cvs/src/admin.c
    1.1.1.8     +0  -0      ossp-pkg/cvs/src/client.c
    1.1.1.3     +0  -0      ossp-pkg/cvs/src/fileattr.c
    1.1.1.6     +0  -0      ossp-pkg/cvs/src/main.c
    1.1.1.2     +0  -0      ossp-pkg/cvs/src/myndbm.c
    1.1.1.4     +0  -0      ossp-pkg/cvs/src/patch.c
    1.1.1.10    +0  -0      ossp-pkg/cvs/src/rcs.c
    1.1.1.9     +0  -0      ossp-pkg/cvs/src/sanity.sh
    1.1.1.12    +0  -0      ossp-pkg/cvs/src/server.c
  ____________________________________________________________________________

  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/NEWS?cvsroot=ossp&r1=1.1.1.3&r2=1.1.1.4
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/doc/FAQ?cvsroot=ossp&r1=1.1.1.1&r2=1.1.1.2
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/doc/cvs.texinfo?cvsroot=ossp&r1=1.1.1.5&r2=1.1.1.6
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/lib/getline.c?cvsroot=ossp&r1=1.1.1.1&r2=1.1.1.2
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/lib/getline.h?cvsroot=ossp&r1=1.1.1.1&r2=1.1.1.2
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/admin.c?cvsroot=ossp&r1=1.1.1.2&r2=1.1.1.3
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/client.c?cvsroot=ossp&r1=1.1.1.7&r2=1.1.1.8
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/fileattr.c?cvsroot=ossp&r1=1.1.1.2&r2=1.1.1.3
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/main.c?cvsroot=ossp&r1=1.1.1.5&r2=1.1.1.6
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/myndbm.c?cvsroot=ossp&r1=1.1.1.1&r2=1.1.1.2
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/patch.c?cvsroot=ossp&r1=1.1.1.3&r2=1.1.1.4
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/rcs.c?cvsroot=ossp&r1=1.1.1.9&r2=1.1.1.10
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/sanity.sh?cvsroot=ossp&r1=1.1.1.8&r2=1.1.1.9
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/server.c?cvsroot=ossp&r1=1.1.1.11&r2=1.1.1.12

From ossp-cvs-owner@ossp.org  Thu Jul  6 21:34:03 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e66JY2R09738; Thu, 6 Jul 2000 21:34:02 +0200 (CEST)
Date: Thu, 6 Jul 2000 21:34:02 +0200 (CEST)
Message-Id: <200007061934.e66JY2R09738@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="E768A9JOZA8F34KZ7GX5"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvs/src admin.c client.c main.c patch.c rcs.c san...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--E768A9JOZA8F34KZ7GX5
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: ossp-pkg                         Date:   06-Jul-2000 21:34:02
Branch: HEAD                             Handle: 2000070620335900

Modified files:
  ossp-pkg/cvs/src        admin.c client.c main.c patch.c rcs.c sanity.sh
                          server.c

Log:
  Merge in conflicts

Summary:
  Revision    Changes     Path
  1.6         +29 -23     ossp-pkg/cvs/src/admin.c
  1.9         +2  -0      ossp-pkg/cvs/src/client.c
  1.19        +8  -5      ossp-pkg/cvs/src/main.c
  1.4         +3  -0      ossp-pkg/cvs/src/patch.c
  1.13        +3  -0      ossp-pkg/cvs/src/rcs.c
  1.6         +108 -155   ossp-pkg/cvs/src/sanity.sh
  1.25        +8  -5      ossp-pkg/cvs/src/server.c
____________________________________________________________________________

--E768A9JOZA8F34KZ7GX5
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/cvs/src/admin.c
Content-Disposition: attachment

Index: ossp-pkg/cvs/src/admin.c
============================================================
$ cvs diff -u -r1.5 -r1.6 admin.c
--- ossp-pkg/cvs/src/admin.c	2000/06/14 07:18:45	1.5
+++ ossp-pkg/cvs/src/admin.c	2000/07/06 19:33:59	1.6
@@ -53,9 +53,7 @@
     /* Keyword substitution mode (-k), e.g. "-kb".  */
     char *kflag;
 
-    /* Description (-t).  See sanity.sh for various moanings about
-       files and stdin and such.  "" if -t specified without an
-       argument.  It is "-t" followed by the argument.  */
+    /* Description (-t).  */
     char *desc;
 
     /* Interactive (-I).  Problematic with client/server.  */
@@ -437,13 +435,15 @@
 		    error (0, 0, "duplicate 't' option");
 		    goto usage_error;
 		}
-		if (optarg == NULL)
-		    admin_data.desc = xstrdup ("-t");
+		if (optarg != NULL && optarg[0] == '-')
+		    admin_data.desc = xstrdup (optarg + 1);
 		else
 		{
-		    admin_data.desc = xmalloc (strlen (optarg) + 5);
-		    strcpy (admin_data.desc, "-t");
-		    strcat (admin_data.desc, optarg);
+		    size_t bufsize = 0;
+		    size_t len;
+
+		    get_file (optarg, optarg, "r", &admin_data.desc,
+			      &bufsize, &len);
 		}
 		break;
 
@@ -567,7 +567,26 @@
 	if (admin_data.delete_revs != NULL)
 	    send_arg (admin_data.delete_revs);
 	if (admin_data.desc != NULL)
-	    send_arg (admin_data.desc);
+	{
+	    char *p = admin_data.desc;
+	    send_to_server ("Argument -t-", 0);
+	    while (*p)
+	    {
+		if (*p == '\n')
+		{
+		    send_to_server ("\012Argumentx ", 0);
+		    ++p;
+		}
+		else
+		{
+		    char *q = strchr (p, '\n');
+		    if (q == NULL) q = p + strlen (p);
+		    send_to_server (p, q - p);
+		    p = q;
+		}
+	    }
+	    send_to_server ("\012", 1);
+	}
 	if (admin_data.quiet)
 	    send_arg ("-q");
 	if (admin_data.kflag != NULL)
@@ -762,20 +781,7 @@
     if (admin_data->desc != NULL)
     {
 	free (rcs->desc);
-	rcs->desc = NULL;
-	if (admin_data->desc[2] == '-')
-	    rcs->desc = xstrdup (admin_data->desc + 3);
-	else
-	{
-	    char *descfile = admin_data->desc + 2;
-	    size_t bufsize = 0;
-	    size_t len;
-
-	    /* If -t specified with no argument, read from stdin. */
-	    if (*descfile == '\0')
-		descfile = NULL;
-	    get_file (descfile, descfile, "r", &rcs->desc, &bufsize, &len);
-	}
+	rcs->desc = xstrdup (admin_data->desc);
     }
     if (admin_data->kflag != NULL)
     {

--E768A9JOZA8F34KZ7GX5
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/cvs/src/client.c
Content-Disposition: attachment

Index: ossp-pkg/cvs/src/client.c
============================================================
$ cvs diff -u -r1.8 -r1.9 client.c
--- ossp-pkg/cvs/src/client.c	2000/07/01 13:12:53	1.8
+++ ossp-pkg/cvs/src/client.c	2000/07/06 19:33:59	1.9
@@ -1,3 +1,5 @@
+/* JT thinks BeOS is worth the trouble. */
+
 /* CVS client-related stuff.
 
    This program is free software; you can redistribute it and/or modify

--E768A9JOZA8F34KZ7GX5
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/cvs/src/main.c
Content-Disposition: attachment

Index: ossp-pkg/cvs/src/main.c
============================================================
$ cvs diff -u -r1.18 -r1.19 main.c
--- ossp-pkg/cvs/src/main.c	2000/06/22 13:53:36	1.18
+++ ossp-pkg/cvs/src/main.c	2000/07/06 19:33:59	1.19
@@ -469,6 +469,11 @@
 
     switch (sig)
     {
+#ifdef SIGABRT
+    case SIGABRT:
+	name = "abort";
+	break;
+#endif
 #ifdef SIGHUP
     case SIGHUP:
 	name = "hangup";
@@ -1122,25 +1127,23 @@
 
 #ifndef DONT_USE_SIGNALS
 	/* make sure we clean up on error */
+#ifdef SIGABRT
+	(void) SIG_register (SIGABRT, main_cleanup);
+#endif
 #ifdef SIGHUP
 	(void) SIG_register (SIGHUP, main_cleanup);
-	(void) SIG_register (SIGHUP, Lock_Cleanup);
 #endif
 #ifdef SIGINT
 	(void) SIG_register (SIGINT, main_cleanup);
-	(void) SIG_register (SIGINT, Lock_Cleanup);
 #endif
 #ifdef SIGQUIT
 	(void) SIG_register (SIGQUIT, main_cleanup);
-	(void) SIG_register (SIGQUIT, Lock_Cleanup);
 #endif
 #ifdef SIGPIPE
 	(void) SIG_register (SIGPIPE, main_cleanup);
-	(void) SIG_register (SIGPIPE, Lock_Cleanup);
 #endif
 #ifdef SIGTERM
 	(void) SIG_register (SIGTERM, main_cleanup);
-	(void) SIG_register (SIGTERM, Lock_Cleanup);
 #endif
 #endif /* !DONT_USE_SIGNALS */
 

--E768A9JOZA8F34KZ7GX5
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/cvs/src/patch.c
Content-Disposition: attachment

Index: ossp-pkg/cvs/src/patch.c
============================================================
$ cvs diff -u -r1.3 -r1.4 patch.c
--- ossp-pkg/cvs/src/patch.c	2000/06/15 06:44:45	1.3
+++ ossp-pkg/cvs/src/patch.c	2000/07/06 19:33:59	1.4
@@ -230,6 +230,9 @@
 #endif
 
     /* clean up if we get a signal */
+#ifdef SIGABRT
+    (void) SIG_register (SIGABRT, patch_cleanup);
+#endif
 #ifdef SIGHUP
     (void) SIG_register (SIGHUP, patch_cleanup);
 #endif

--E768A9JOZA8F34KZ7GX5
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/cvs/src/rcs.c
Content-Disposition: attachment

Index: ossp-pkg/cvs/src/rcs.c
============================================================
$ cvs diff -u -r1.12 -r1.13 rcs.c
--- ossp-pkg/cvs/src/rcs.c	2000/07/01 13:12:53	1.12
+++ ossp-pkg/cvs/src/rcs.c	2000/07/06 19:33:59	1.13
@@ -8210,6 +8210,9 @@
     {
 	first_call = 0;
 	/* clean up if we get a signal */
+#ifdef SIGABRT
+	(void) SIG_register (SIGABRT, rcs_cleanup);
+#endif
 #ifdef SIGHUP
 	(void) SIG_register (SIGHUP, rcs_cleanup);
 #endif

--E768A9JOZA8F34KZ7GX5
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/cvs/src/sanity.sh
Content-Disposition: attachment

Index: ossp-pkg/cvs/src/sanity.sh
============================================================
$ cvs diff -u -r1.5 -r1.6 sanity.sh
--- ossp-pkg/cvs/src/sanity.sh	2000/06/22 16:27:41	1.5
+++ ossp-pkg/cvs/src/sanity.sh	2000/07/06 19:33:59	1.6
@@ -7100,76 +7100,88 @@
 	  mkdir 1
 	  cd 1
 
-	  if ${testcvs} -q co first-dir; then
-	      pass 143
-	  else
-	      fail 143
-	  fi
+	  dotest modules-143 "${testcvs} -q co first-dir" ""
 
 	  cd first-dir
 	  mkdir subdir
-	  ${testcvs} add subdir >>${LOGFILE}
-	  cd subdir
+	  dotest modules-143a "${testcvs} add subdir" \
+"Directory ${TESTDIR}/cvsroot/first-dir/subdir added to the repository"
 
+	  cd subdir
 	  mkdir ssdir
-	  ${testcvs} add ssdir >>${LOGFILE}
+	  dotest modules-143b "${testcvs} add ssdir" \
+"Directory ${TESTDIR}/cvsroot/first-dir/subdir/ssdir added to the repository"
 
 	  touch a b
 
-	  if ${testcvs} add a b 2>>${LOGFILE} ; then
-	      pass 144
-	  else
-	      fail 144
-	  fi
+	  dotest modules-144 "${testcvs} add a b" \
+"${PROG} [a-z]*: scheduling file .a. for addition
+${PROG} [a-z]*: scheduling file .b. for addition
+${PROG} [a-z]*: use .${PROG} commit. to add these files permanently"
 
-	  if ${testcvs} ci -m added >>${LOGFILE} 2>&1; then
-	      pass 145
-	  else
-	      fail 145
-	  fi
+	  dotest modules-145 "${testcvs} ci -m added" \
+"${PROG} [a-z]*: Examining .
+${PROG} [a-z]*: Examining ssdir
+RCS file: ${TESTDIR}/cvsroot/first-dir/subdir/a,v
+done
+Checking in a;
+${TESTDIR}/cvsroot/first-dir/subdir/a,v  <--  a
+initial revision: 1\.1
+done
+RCS file: ${TESTDIR}/cvsroot/first-dir/subdir/b,v
+done
+Checking in b;
+${TESTDIR}/cvsroot/first-dir/subdir/b,v  <--  b
+initial revision: 1\.1
+done"
 
 	  cd ..
-	  if ${testcvs} -q co CVSROOT >>${LOGFILE}; then
-	      pass 146
-	  else
-	      fail 146
-	  fi
+	  dotest modules-146 "${testcvs} -q co CVSROOT" \
+"U CVSROOT/checkoutlist
+U CVSROOT/commitinfo
+U CVSROOT/config
+U CVSROOT/cvswrappers
+U CVSROOT/editinfo
+U CVSROOT/loginfo
+U CVSROOT/modules
+U CVSROOT/notify
+U CVSROOT/rcsinfo
+U CVSROOT/taginfo
+U CVSROOT/verifymsg"
 
 	  # Here we test that CVS can deal with CVSROOT (whose repository
 	  # is at top level) in the same directory as subdir (whose repository
 	  # is a subdirectory of first-dir).  TODO: Might want to check that
 	  # files can actually get updated in this state.
-	  if ${testcvs} -q update; then
-	      pass 147
-	  else
-	      fail 147
-	  fi
+	  dotest modules-147 "${testcvs} -q update" ""
 
-	  echo realmodule first-dir/subdir a >CVSROOT/modules
-	  echo dirmodule first-dir/subdir >>CVSROOT/modules
-	  echo namedmodule -d nameddir first-dir/subdir >>CVSROOT/modules
-	  echo aliasmodule -a first-dir/subdir/a >>CVSROOT/modules
-	  echo aliasnested -a first-dir/subdir/ssdir >>CVSROOT/modules
-	  echo topfiles -a first-dir/file1 first-dir/file2 >>CVSROOT/modules
-	  echo world -a . >>CVSROOT/modules
-	  echo statusmod -s Mungeable >>CVSROOT/modules
-
-	  # Options must come before arguments.  It is possible this should
-	  # be relaxed at some point (though the result would be bizarre for
-	  # -a); for now test the current behavior.
-	  echo bogusalias first-dir/subdir/a -a >>CVSROOT/modules
-	  if ${testcvs} ci -m 'add modules' CVSROOT/modules \
-	      >>${LOGFILE} 2>&1; then
-	      pass 148
-	  else
-	      fail 148
-	  fi
+	  cat >CVSROOT/modules <<EOF
+realmodule first-dir/subdir a
+dirmodule first-dir/subdir
+namedmodule -d nameddir first-dir/subdir
+aliasmodule -a first-dir/subdir/a
+aliasnested -a first-dir/subdir/ssdir
+topfiles -a first-dir/file1 first-dir/file2
+world -a .
+statusmod -s Mungeable
+# Options must come before arguments.  It is possible this should
+# be relaxed at some point (though the result would be bizarre for
+# -a); for now test the current behavior.
+bogusalias first-dir/subdir/a -a
+EOF
+	  dotest modules-148 "${testcvs} ci -m 'add modules' CVSROOT/modules" \
+"Checking in CVSROOT/modules;
+${TESTDIR}/cvsroot/CVSROOT/modules,v  <--  modules
+new revision: 1\.5; previous revision: 1\.4
+done
+${PROG} [a-z]*: Rebuilding administrative file database"
+
 	  cd ..
 	  # The "statusmod" module contains an error; trying to use it
 	  # will produce "modules file missing directory" I think.
 	  # However, that shouldn't affect the ability of "cvs co -c" or
 	  # "cvs co -s" to do something reasonable with it.
-	  dotest 148a0 "${testcvs} co -c" 'aliasmodule  -a first-dir/subdir/a
+	  dotest modules-148a0 "${testcvs} co -c" 'aliasmodule  -a first-dir/subdir/a
 aliasnested  -a first-dir/subdir/ssdir
 bogusalias   first-dir/subdir/a -a
 dirmodule    first-dir/subdir
@@ -7181,7 +7193,7 @@
 	  # There is code in modules.c:save_d which explicitly skips
 	  # modules defined with -a, which is why aliasmodule is not
 	  # listed.
-	  dotest 148a1 "${testcvs} co -s" \
+	  dotest modules-148a1 "${testcvs} co -s" \
 'statusmod    Mungeable  
 bogusalias   NONE        first-dir/subdir/a -a
 dirmodule    NONE        first-dir/subdir
@@ -7189,112 +7201,60 @@
 realmodule   NONE        first-dir/subdir a'
 
 	  # Test that real modules check out to realmodule/a, not subdir/a.
-	  if ${testcvs} co realmodule >>${LOGFILE}; then
-	      pass 149a1
-	  else
-	      fail 149a1
-	  fi
-	  if test -d realmodule && test -f realmodule/a; then
-	      pass 149a2
-	  else
-	      fail 149a2
-	  fi
-	  if test -f realmodule/b; then
-	      fail 149a3
-	  else
-	      pass 149a3
-	  fi
-	  if ${testcvs} -q co realmodule; then
-	      pass 149a4
-	  else
-	      fail 149a4
-	  fi
-	  if echo "yes" | ${testcvs} release -d realmodule >>${LOGFILE} ; then
-	      pass 149a5
-	  else
-	      fail 149a5
-	  fi
+	  dotest modules-149a1 "${testcvs} co realmodule" "U realmodule/a"
+	  dotest modules-149a2 "test -d realmodule && test -f realmodule/a" ""
+	  dotest_fail modules-149a3 "test -f realmodule/b" ""
+	  dotest modules-149a4 "${testcvs} -q co realmodule" ""
+	  dotest modules-149a5 "echo yes | ${testcvs} release -d realmodule" \
+"You have \[0\] altered files in this repository\.
+Are you sure you want to release (and delete) directory .realmodule.: "
 
-	  dotest_fail 149b1 "${testcvs} co realmodule/a" \
+	  dotest_fail modules-149b1 "${testcvs} co realmodule/a" \
 "${PROG}"' [a-z]*: module `realmodule/a'\'' is a request for a file in a module which is not a directory' \
 "${PROG}"' [a-z]*: module `realmodule/a'\'' is a request for a file in a module which is not a directory
 '"${PROG}"' \[[a-z]* aborted\]: cannot expand modules'
 
 	  # Now test the ability to check out a single file from a directory
-	  if ${testcvs} co dirmodule/a >>${LOGFILE}; then
-	      pass 150c
-	  else
-	      fail 150c
-	  fi
-	  if test -d dirmodule && test -f dirmodule/a; then
-	      pass 150d
-	  else
-	      fail 150d
-	  fi
-	  if test -f dirmodule/b; then
-	      fail 150e
-	  else
-	      pass 150e
-	  fi
-	  if echo "yes" | ${testcvs} release -d dirmodule >>${LOGFILE} ; then
-	      pass 150f
-	  else
-	      fail 150f
-	  fi
+	  dotest modules-150c "${testcvs} co dirmodule/a" "U dirmodule/a"
+	  dotest modules-150d "test -d dirmodule && test -f dirmodule/a" ""
+	  dotest_fail modules-150e "test -f dirmodule/b" ""
+	  dotest modules-150f "echo yes | ${testcvs} release -d dirmodule" \
+"You have \[0\] altered files in this repository\.
+Are you sure you want to release (and delete) directory .dirmodule.: "
 	  # Now test the ability to correctly reject a non-existent filename.
 	  # For maximum studliness we would check that an error message is
 	  # being output.
-	  if ${testcvs} co dirmodule/nonexist >>${LOGFILE} 2>&1; then
-	    # We accept a zero exit status because it is what CVS does
-	    # (Dec 95).  Probably the exit status should be nonzero,
-	    # however.
-	      pass 150g1
-	  else
-	      pass 150g1
-	  fi
+	  # We accept a zero exit status because it is what CVS does
+	  # (Dec 95).  Probably the exit status should be nonzero,
+	  # however.
+	  dotest modules-150g1 "${testcvs} co dirmodule/nonexist" \
+"${PROG} [a-z]*: warning: new-born dirmodule/nonexist has disappeared"
 	  # We tolerate the creation of the dirmodule directory, since that
 	  # is what CVS does, not because we view that as preferable to not
 	  # creating it.
-	  if test -f dirmodule/a || test -f dirmodule/b; then
-	      fail 150g2
-	  else
-	      pass 150g2
-	  fi
+	  dotest_fail modules-150g2 "test -f dirmodule/a || test -f dirmodule/b" ""
 	  rm -r dirmodule
 
 	  # Now test that a module using -d checks out to the specified
 	  # directory.
-	  dotest 150h1 "${testcvs} -q co namedmodule" 'U nameddir/a
+	  dotest modules-150h1 "${testcvs} -q co namedmodule" \
+'U nameddir/a
 U nameddir/b'
-	  if test -f nameddir/a && test -f nameddir/b; then
-	    pass 150h2
-	  else
-	    fail 150h2
-	  fi
+	  dotest modules-150h2 "test -f nameddir/a && test -f nameddir/b" ""
 	  echo add line >>nameddir/a
-	  dotest 150h3 "${testcvs} -q co namedmodule" 'M nameddir/a'
+	  dotest modules-150h3 "${testcvs} -q co namedmodule" 'M nameddir/a'
 	  rm nameddir/a
-	  dotest 150h4 "${testcvs} -q co namedmodule" 'U nameddir/a'
-	  if echo "yes" | ${testcvs} release -d nameddir >>${LOGFILE} ; then
-	    pass 150h99
-	  else
-	    fail 150h99
-	  fi
+	  dotest modules-150h4 "${testcvs} -q co namedmodule" 'U nameddir/a'
+	  dotest modules-150h99 "echo yes | ${testcvs} release -d nameddir" \
+"You have \[0\] altered files in this repository\.
+Are you sure you want to release (and delete) directory .nameddir.: "
 
 	  # Now test that alias modules check out to subdir/a, not
 	  # aliasmodule/a.
-	  if ${testcvs} co aliasmodule >>${LOGFILE}; then
-	      pass 151
-	  else
-	      fail 151
-	  fi
-	  if test -d aliasmodule; then
-	      fail 152
-	  else
-	      pass 152
-	  fi
+	  dotest modules-151 "${testcvs} co aliasmodule" ""
+	  dotest_fail modules-152 "test -d aliasmodule" ""
 	  echo abc >>first-dir/subdir/a
-	  dotest 153 "${testcvs} -q co aliasmodule" "M first-dir/subdir/a"
+	  dotest modules-153 "${testcvs} -q co aliasmodule" "M first-dir/subdir/a"
 
 	  cd ..
 	  rm -r 1
@@ -13038,18 +12998,13 @@
 1
 ============================================================================="
 
-	  # I believe that in Real Life (TM), this is broken for remote.
-	  # That is, the filename in question must be the filename of a
-	  # file on the server.  It only happens to work here because the
-	  # client machine and the server machine are one and the same.
 	  echo 'longer description' >${TESTDIR}/descrip
 	  echo 'with two lines' >>${TESTDIR}/descrip
 	  dotest log2-7 "${testcvs} admin -t${TESTDIR}/descrip file1" \
 "RCS file: ${TESTDIR}/cvsroot/first-dir/file1,v
 done"
 	  dotest_fail log2-7a "${testcvs} admin -t${TESTDIR}/nonexist file1" \
-"RCS file: ${TESTDIR}/cvsroot/first-dir/file1,v
-${PROG} \[[a-z]* aborted\]: can't stat ${TESTDIR}/nonexist: No such file or directory"
+"${PROG} \[[a-z]* aborted\]: can't stat ${TESTDIR}/nonexist: No such file or directory"
 	  dotest log2-8 "${testcvs} log -N file1" "
 RCS file: ${TESTDIR}/cvsroot/first-dir/file1,v
 Working file: file1
@@ -13068,22 +13023,13 @@
 1
 ============================================================================="
 
-	  # Reading the description from stdin is broken for remote.
-	  # See comments in cvs.texinfo for a few more notes on this.
-	  if test "x$remote" = xno; then
+	  # TODO: `cvs admin -t "my message" file1' is a request to
+	  # read the message from stdin and to operate on two files.
+	  # Should test that there is an error because "my message"
+	  # doesn't exist.
 
-	    # TODO: `cvs admin -t "my message" file1' is a request to
-	    # read the message from stdin and to operate on two files.
-	    # Should test that there is an error because "my message"
-	    # doesn't exist.
-
-	    if echo change from stdin | ${testcvs} admin -t -q file1
-	    then
-	      pass log2-9
-	    else
-	      fail log2-9
-	    fi
-	    dotest log2-10 "${testcvs} log -N file1" "
+	  dotest log2-9 "echo change from stdin | ${testcvs} admin -t -q file1" ""
+	  dotest log2-10 "${testcvs} log -N file1" "
 RCS file: ${TESTDIR}/cvsroot/first-dir/file1,v
 Working file: file1
 head: 1\.1
@@ -13100,8 +13046,6 @@
 1
 ============================================================================="
 
-	  fi # end of tests skipped for remote
-
 	  cd ..
 	  rm ${TESTDIR}/descrip
 	  rm -r first-dir
@@ -20196,6 +20140,15 @@
 Amquiteunabletocomeupwithinterestingpasswordsanymore
 END AUTH REQUEST
 EOF
+
+            # Test protection from D.o.S. attack during pserver auth phase.
+            #
+            # The unacceptably long line of 'x's should get cut off
+            # after PATH_MAX chars -- see calls to getline_safe() in
+            # server.c -- so even though no newline is ever sent, the
+            # server should claim a bad protocol start.
+	    dotest_fail pserver-14 "(while true; do echo -n x; done) | ${testcvs} --allow-root=${CVSROOT_DIRNAME} pserver" \
+"${DOTSTAR} bad auth protocol start: ${DOTSTAR}"
 
 	    # Clean up.
 	    echo "# comments only" >config

--E768A9JOZA8F34KZ7GX5
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/cvs/src/server.c
Content-Disposition: attachment

Index: ossp-pkg/cvs/src/server.c
============================================================
$ cvs diff -u -r1.24 -r1.25 server.c
--- ossp-pkg/cvs/src/server.c	2000/07/01 13:12:53	1.24
+++ ossp-pkg/cvs/src/server.c	2000/07/06 19:33:59	1.25
@@ -5045,6 +5045,9 @@
 	}
     }
 
+#ifdef SIGABRT
+    (void) SIG_register (SIGABRT, server_cleanup);
+#endif
 #ifdef SIGHUP
     (void) SIG_register (SIGHUP, server_cleanup);
 #endif
@@ -5655,7 +5658,7 @@
 #endif
 
     /* Make sure the protocol starts off on the right foot... */
-    if (getline (&tmp, &tmp_allocated, stdin) < 0)
+    if (getline_safe (&tmp, &tmp_allocated, stdin, PATH_MAX) < 0)
 	/* FIXME: what?  We could try writing error/eof, but chances
 	   are the network connection is dead bidirectionally.  log it
 	   somewhere?  */
@@ -5686,9 +5689,9 @@
 
     /* Get the three important pieces of information in order. */
     /* See above comment about error handling.  */
-    getline (&repository, &repository_allocated, stdin);
-    getline (&username, &username_allocated, stdin);
-    getline (&password, &password_allocated, stdin);
+    getline_safe (&repository, &repository_allocated, stdin, PATH_MAX);
+    getline_safe (&username, &username_allocated, stdin, PATH_MAX);
+    getline_safe (&password, &password_allocated, stdin, PATH_MAX);
 
     /* Make them pure. */ 
     strip_trailing_newlines (repository);
@@ -5701,7 +5704,7 @@
 
     /* ... and make sure the protocol ends on the right foot. */
     /* See above comment about error handling.  */
-    getline (&tmp, &tmp_allocated, stdin);
+    getline_safe (&tmp, &tmp_allocated, stdin, PATH_MAX);
     if (strcmp (tmp,
 		verify_and_exit ?
 		"END VERIFICATION REQUEST\n" : "END AUTH REQUEST\n")
--E768A9JOZA8F34KZ7GX5--


From ossp-cvs-owner@ossp.org  Fri Jul  7 08:18:53 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e676Iqg98734; Fri, 7 Jul 2000 08:18:52 +0200 (CEST)
Date: Fri, 7 Jul 2000 08:18:52 +0200 (CEST)
Message-Id: <200007070618.e676Iqg98734@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="B2K8VVAV7W939CM1N42H"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pcre ChangeLog.OSSP configure ltconfig ltmain.sh ...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--B2K8VVAV7W939CM1N42H
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

OSSP CVS Master Repository
http://cvs.ossp.org/
____________________________________________________________________________

Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
Module: ossp-pkg                         Date:   07-Jul-2000 08:18:51
Branch: HEAD                             Handle: 2000070707185000

Modified files:
  ossp-pkg/pcre           ChangeLog.OSSP configure ltconfig ltmain.sh shtool

Log:
  *** empty log message ***

Summary:
  Revision    Changes     Path
  1.13        +6  -1      ossp-pkg/pcre/ChangeLog.OSSP
  1.8         +1  -1      ossp-pkg/pcre/configure
  1.3         +74 -38     ossp-pkg/pcre/ltconfig
  1.3         +15 -3      ossp-pkg/pcre/ltmain.sh
  1.5         +122 -89    ossp-pkg/pcre/shtool
____________________________________________________________________________

--B2K8VVAV7W939CM1N42H
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/pcre/ChangeLog.OSSP
Content-Disposition: attachment

Index: ossp-pkg/pcre/ChangeLog.OSSP
============================================================
$ cvs diff -u -r1.12 -r1.13 ChangeLog.OSSP
--- ossp-pkg/pcre/ChangeLog.OSSP	2000/05/16 18:48:09	1.12
+++ ossp-pkg/pcre/ChangeLog.OSSP	2000/07/07 06:18:50	1.13
@@ -2,7 +2,12 @@
  OSSP ChangeLog for PCRE
  =======================
 
- Changes made to OSSP pcre 3.2 (09-Feb-2000 to 16-May-2000):
+ Changes made to OSSP pcre 3.2-2 (16-May-2000 to 07-Jul-2000):
+
+  *) Upgraded GNU libtool from 1.3.4 to 1.3.5
+  *) Upgraded GNU shtool from 1.4.9 to 1.5.0
+
+ Changes made to OSSP pcre 3.2-1 (09-Feb-2000 to 16-May-2000):
 
   *) Merged in changes between PCRE 3.1 to 3.2
   *) Upgraded GNU shtool from 1.4.7 to 1.4.9

--B2K8VVAV7W939CM1N42H
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/pcre/configure
Content-Disposition: attachment

Index: ossp-pkg/pcre/configure
============================================================
$ cvs diff -u -r1.7 -r1.8 configure
--- ossp-pkg/pcre/configure	2000/05/16 18:33:29	1.7
+++ ossp-pkg/pcre/configure	2000/07/07 06:18:50	1.8
@@ -1,6 +1,6 @@
 #! /bin/sh
 
-# From configure.in Revision: 1.4 
+# From configure.in Revision: 1.5 
 
 SHTOOL="./shtool"
 

--B2K8VVAV7W939CM1N42H
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/pcre/ltconfig
Content-Disposition: attachment

Index: ossp-pkg/pcre/ltconfig
============================================================
$ cvs diff -u -r1.2 -r1.3 ltconfig
--- ossp-pkg/pcre/ltconfig	2000/02/02 17:22:25	1.2
+++ ossp-pkg/pcre/ltconfig	2000/07/07 06:18:50	1.3
@@ -169,8 +169,8 @@
 # Constants:
 PROGRAM=ltconfig
 PACKAGE=libtool
-VERSION=1.3.4
-TIMESTAMP=" (1.385.2.196 1999/12/07 21:47:57)"
+VERSION=1.3.5
+TIMESTAMP=" (1.385.2.206 2000/05/27 11:12:27)"
 ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
 ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
 rm="rm -f"
@@ -1164,15 +1164,21 @@
     # Extract the symbol export list from an `--export-all' def file,
     # then regenerate the def file from the symbol export list, so that
     # the compiled dll only exports the symbol export list.
+    # Be careful not to strip the DATA tag left by newer dlltools.
     export_symbols_cmds='test -f $objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $objdir/$soname-ltdll.c~
       test -f $objdir/$soname-ltdll.$objext || (cd $objdir && $CC -c $soname-ltdll.c)~
       $DLLTOOL --export-all --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --output-def $objdir/$soname-def  $objdir/$soname-ltdll.$objext $libobjs $convenience~
-      sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]* ; *//" < $objdir/$soname-def > $export_symbols'
+      sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]*//" -e "s/ *;.*$//" < $objdir/$soname-def > $export_symbols'
 
+    # If DATA tags from a recent dlltool are present, honour them!
     archive_expsym_cmds='echo EXPORTS > $objdir/$soname-def~
       _lt_hint=1;
-      for symbol in `cat $export_symbols`; do
-	echo "	\$symbol @ \$_lt_hint ; " >> $objdir/$soname-def;
+      cat $export_symbols | while read symbol; do
+        set dummy \$symbol;
+        case \$# in
+          2) echo "	\$2 @ \$_lt_hint ; " >> $objdir/$soname-def;;
+          *) echo "     \$2 @ \$_lt_hint \$3 ; " >> $objdir/$soname-def;;
+        esac;
 	_lt_hint=`expr 1 + \$_lt_hint`;
       done~
       test -f $objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $objdir/$soname-ltdll.c~
@@ -1433,7 +1439,13 @@
     hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
     hardcode_libdir_separator=:
     ;;
-
+  rhapsody*)
+    archive_cmds='$CC -bundle -undefined suppress -o $lib $libobjs $deplibs $linkopts'
+    hardcode_libdir_flags_spec='-L$libdir'
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    ;;
+                                       
   sco3.2v5*)
     archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
     hardcode_shlibpath_var=no
@@ -1466,7 +1478,13 @@
     ;;
 
   sysv4)
-    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
+    if test "x$host_vendor" = xsequent; then
+      # Use $CC to link under sequent, because it throws in some extra .o 
+      # files that make .init and .fini sections work.
+      archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $linkopts'
+    else
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
+    fi
     runpath_var='LD_RUN_PATH'
     hardcode_shlibpath_var=no
     hardcode_direct=no #Motorola manual says yes, but my tests say they lie 
@@ -1632,11 +1650,11 @@
 main(){nm_test_var='a';nm_test_func();return(0);}
 EOF
 
-  echo "$progname:1635: checking if global_symbol_pipe works" >&5
-  if { (eval echo $progname:1636: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } && test -s conftest.$objext; then
+  echo "$progname:1653: checking if global_symbol_pipe works" >&5
+  if { (eval echo $progname:1654: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } && test -s conftest.$objext; then
     # Now try to grab the symbols.
     nlist=conftest.nm
-    if { echo "$progname:1639: eval \"$NM conftest.$objext | $global_symbol_pipe > $nlist\"" >&5; eval "$NM conftest.$objext | $global_symbol_pipe > $nlist 2>&5"; } && test -s "$nlist"; then
+    if { echo "$progname:1657: eval \"$NM conftest.$objext | $global_symbol_pipe > $nlist\"" >&5; eval "$NM conftest.$objext | $global_symbol_pipe > $nlist 2>&5"; } && test -s "$nlist"; then
 
       # Try sorting and uniquifying the output.
       if sort "$nlist" | uniq > "$nlist"T; then
@@ -1688,7 +1706,7 @@
 	  save_CFLAGS="$CFLAGS"
 	  LIBS="conftstm.$objext"
 	  CFLAGS="$CFLAGS$no_builtin_flag"
-	  if { (eval echo $progname:1691: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+	  if { (eval echo $progname:1709: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
 	    pipe_works=yes
 	  else
 	    echo "$progname: failed program was:" >&5
@@ -1919,6 +1937,14 @@
   soname_spec='${libname}${release}.sl$major'
   # HP-UX runs *really* slowly unless shared libraries are mode 555.
   postinstall_cmds='chmod 555 $lib'
+  case "$host_os" in
+  hpux10.20*)
+    # TODO:  Does this work for hpux-11 too?
+    deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
+    file_magic_cmd=/usr/bin/file
+    file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
   ;;
 
 irix5* | irix6*)
@@ -1966,9 +1992,7 @@
   finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
-  deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
-  file_magic_cmd=/usr/bin/file
-  file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+  deplibs_check_method=pass_all
 
   if test -f /lib/ld.so.1; then
     dynamic_linker='GNU ld.so'
@@ -2029,6 +2053,14 @@
   sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
   ;;
 
+rhapsody*)
+  version_type=sunos
+  library_names_spec='${libname}.so'
+  soname_spec='${libname}.so'
+  shlibpath_var=DYLD_LIBRARY_PATH
+  deplibs_check_method=pass_all
+  ;;
+
 sco3.2v5*)
   version_type=osf
   soname_spec='${libname}${release}.so$major'
@@ -2069,6 +2101,10 @@
   soname_spec='${libname}${release}.so$major'
   shlibpath_var=LD_LIBRARY_PATH
   case "$host_vendor" in
+    sequent)
+      file_magic_cmd='/bin/file'
+      deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+      ;;
     ncr)
       deplibs_check_method='pass_all'
       ;;
@@ -2209,7 +2245,7 @@
 if eval "test \"`echo '$''{'lt_cv_dlopen'+set}'`\" != set"; then
   lt_cv_dlopen=no lt_cv_dlopen_libs=
 echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
-echo "$progname:2212: checking for dlopen in -ldl" >&5
+echo "$progname:2248: checking for dlopen in -ldl" >&5
 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -2217,7 +2253,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-ldl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2220 "ltconfig"
+#line 2256 "ltconfig"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
     builtin and then its argument prototype would still apply.  */
@@ -2230,7 +2266,7 @@
 dlopen()
 ; return 0; }
 EOF
-if { (eval echo $progname:2233: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo $progname:2269: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2249,12 +2285,12 @@
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for dlopen""... $ac_c" 1>&6
-echo "$progname:2252: checking for dlopen" >&5
+echo "$progname:2288: checking for dlopen" >&5
 if eval "test \"`echo '$''{'ac_cv_func_dlopen'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2257 "ltconfig"
+#line 2293 "ltconfig"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char dlopen(); below.  */
 #include <assert.h>
@@ -2279,7 +2315,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo $progname:2282: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo $progname:2318: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_dlopen=yes"
 else
@@ -2296,7 +2332,7 @@
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for dld_link in -ldld""... $ac_c" 1>&6
-echo "$progname:2299: checking for dld_link in -ldld" >&5
+echo "$progname:2335: checking for dld_link in -ldld" >&5
 ac_lib_var=`echo dld'_'dld_link | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -2304,7 +2340,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-ldld  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2307 "ltconfig"
+#line 2343 "ltconfig"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
     builtin and then its argument prototype would still apply.  */
@@ -2317,7 +2353,7 @@
 dld_link()
 ; return 0; }
 EOF
-if { (eval echo $progname:2320: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo $progname:2356: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2336,12 +2372,12 @@
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for shl_load""... $ac_c" 1>&6
-echo "$progname:2339: checking for shl_load" >&5
+echo "$progname:2375: checking for shl_load" >&5
 if eval "test \"`echo '$''{'ac_cv_func_shl_load'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2344 "ltconfig"
+#line 2380 "ltconfig"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char shl_load(); below.  */
 #include <assert.h>
@@ -2366,7 +2402,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo $progname:2369: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo $progname:2405: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_shl_load=yes"
 else
@@ -2384,7 +2420,7 @@
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6
-echo "$progname:2387: checking for shl_load in -ldld" >&5
+echo "$progname:2423: checking for shl_load in -ldld" >&5
 ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -2392,7 +2428,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-ldld  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2395 "ltconfig"
+#line 2431 "ltconfig"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -2406,7 +2442,7 @@
 shl_load()
 ; return 0; }
 EOF
-if { (eval echo $progname:2409: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo $progname:2445: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2449,17 +2485,17 @@
 for ac_hdr in dlfcn.h; do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "$progname:2452: checking for $ac_hdr" >&5
+echo "$progname:2488: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2457 "ltconfig"
+#line 2493 "ltconfig"
 #include <$ac_hdr>
 int fnord = 0;
 EOF
 ac_try="$ac_compile >/dev/null 2>conftest.out"
-{ (eval echo $progname:2462: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo $progname:2498: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -2487,7 +2523,7 @@
     LIBS="$lt_cv_dlopen_libs $LIBS"
 
   echo $ac_n "checking whether a program can dlopen itself""... $ac_c" 1>&6
-echo "$progname:2490: checking whether a program can dlopen itself" >&5
+echo "$progname:2526: checking whether a program can dlopen itself" >&5
 if test "${lt_cv_dlopen_self+set}" = set; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2495,7 +2531,7 @@
     lt_cv_dlopen_self=cross
   else
     cat > conftest.c <<EOF
-#line 2498 "ltconfig"
+#line 2534 "ltconfig"
 
 #if HAVE_DLFCN_H
 #include <dlfcn.h>
@@ -2541,7 +2577,7 @@
 	       if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); } 
 
 EOF
-if { (eval echo $progname:2544: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+if { (eval echo $progname:2580: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
 then
   lt_cv_dlopen_self=yes
 else
@@ -2560,7 +2596,7 @@
   if test "$lt_cv_dlopen_self" = yes; then
     LDFLAGS="$LDFLAGS $link_static_flag"
   echo $ac_n "checking whether a statically linked program can dlopen itself""... $ac_c" 1>&6
-echo "$progname:2563: checking whether a statically linked program can dlopen itself" >&5
+echo "$progname:2599: checking whether a statically linked program can dlopen itself" >&5
 if test "${lt_cv_dlopen_self_static+set}" = set; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2568,7 +2604,7 @@
     lt_cv_dlopen_self_static=cross
   else
     cat > conftest.c <<EOF
-#line 2571 "ltconfig"
+#line 2607 "ltconfig"
 
 #if HAVE_DLFCN_H
 #include <dlfcn.h>
@@ -2614,7 +2650,7 @@
     if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); } 
 
 EOF
-if { (eval echo $progname:2617: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+if { (eval echo $progname:2653: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
 then
   lt_cv_dlopen_self_static=yes
 else

--B2K8VVAV7W939CM1N42H
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/pcre/ltmain.sh
Content-Disposition: attachment

Index: ossp-pkg/pcre/ltmain.sh
============================================================
$ cvs diff -u -r1.2 -r1.3 ltmain.sh
--- ossp-pkg/pcre/ltmain.sh	2000/02/02 17:22:25	1.2
+++ ossp-pkg/pcre/ltmain.sh	2000/07/07 06:18:50	1.3
@@ -54,8 +54,8 @@
 # Constants.
 PROGRAM=ltmain.sh
 PACKAGE=libtool
-VERSION=1.3.4
-TIMESTAMP=" (1.385.2.196 1999/12/07 21:47:57)"
+VERSION=1.3.5
+TIMESTAMP=" (1.385.2.206 2000/05/27 11:12:27)"
 
 default_mode=
 help="Try \`$progname --help' for more information."
@@ -1795,6 +1795,10 @@
 	*-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*)
 	  # these systems don't actually have a c library (as such)!
 	  ;;
+        *-*-rhapsody*)
+	  # rhapsody is a little odd...
+	  deplibs="$deplibs -framework System"
+	  ;;
 	*)
 	  # Add libc to deplibs on all other systems.
 	  deplibs="$deplibs -lc"
@@ -2927,13 +2931,21 @@
       # Run the actual program with our arguments.
 "
 	case $host in
-	*-*-cygwin* | *-*-mingw | *-*-os2*)
 	  # win32 systems need to use the prog path for dll
 	  # lookup to work
+	*-*-cygwin*)
+	  $echo >> $output "\
+      exec \$progdir/\$program \${1+\"\$@\"}
+"
+	  ;;
+
+	# Backslashes separate directories on plain windows
+	*-*-mingw | *-*-os2*)
 	  $echo >> $output "\
       exec \$progdir\\\\\$program \${1+\"\$@\"}
 "
 	  ;;
+
 	*)
 	  $echo >> $output "\
       # Export the path to the program.

--B2K8VVAV7W939CM1N42H
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/pcre/shtool
Content-Disposition: attachment

Index: ossp-pkg/pcre/shtool
============================================================
$ cvs diff -u -r1.4 -r1.5 shtool
--- ossp-pkg/pcre/shtool	2000/05/16 18:47:56	1.4
+++ ossp-pkg/pcre/shtool	2000/07/07 06:18:50	1.5
@@ -6,8 +6,8 @@
 ##  See http://www.gnu.org/software/shtool/ for more information.
 ##  See ftp://ftp.gnu.org/gnu/shtool/ for latest version.
 ##
-##  Version 1.4.9 (16-Apr-2000)
-##  Ingredients: 6/17 available modules
+##  Version:  1.5.0 (01-Jul-2000)
+##  Contents: 6/17 available modules
 ##
 
 ##
@@ -55,7 +55,7 @@
 ##    arx        Extended archive command
 ##    slo        Separate linker options by library class
 ##    scpp       Sharing C Pre-Processor
-##    version    Generate and maintain a version information file
+##    version    Maintain a version information file
 ##    path       Deal with program paths
 ##
 
@@ -65,7 +65,7 @@
     exit 1
 fi
 if [ ".$1" = ".-h" -o ".$1" = ".--help" ]; then
-    echo "This is GNU shtool, version 1.4.9 (16-Apr-2000)"
+    echo "This is GNU shtool, version 1.5.0 (01-Jul-2000)"
     echo "Copyright (c) 1994-2000 Ralf S. Engelschall <rse@engelschall.com>"
     echo "Report bugs to <bug-shtool@gnu.org>"
     echo ''
@@ -75,11 +75,12 @@
     echo '  -v, --version   display shtool version information'
     echo '  -h, --help      display shtool usage help page (this one)'
     echo '  -d, --debug     display shell trace information'
+    echo '  -r, --recreate  recreate this shtool script via shtoolize'
     echo ''
     echo 'Available <cmd-name> [<cmd-options>] [<cmd-args>]:'
     echo '  echo     [-n] [-e] [<str> ...]'
     echo '  install  [-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>]'
-    echo '           [-e<ext>] <file> <path>'
+    echo '           [-e<ext>] <file> [<file> ...] <path>'
     echo '  mkdir    [-t] [-f] [-p] [-m<mode>] <dir> [<dir> ...]'
     echo '  fixperm  [-v] [-t] <path> [<path> ...]'
     echo '  tarball  [-t] [-v] [-o <tarball>] [-c <prog>] [-d <dir>] [-u'
@@ -97,16 +98,20 @@
     echo '  slo      [-p<str>] -- -L<dir> -l<lib> [-L<dir> -l<lib> ...]'
     echo '  scpp     [-v] [-p] [-f<filter>] [-o<ofile>] [-t<tfile>] [-M<mark>]'
     echo '           [-D<dname>] [-C<cname>] <file> [<file> ...]'
-    echo '  version  [-l<lang>] [-n<name>] [-p<prefix>] [-s<version>] [-i<knob>]'
-    echo '           [-d<type>] <file>'
+    echo '  version  [-l<lang>] [-n<name>] [-p<prefix>] [-s<version>] [-e]'
+    echo '           [-i<knob>] [-d<type>] <file>'
     echo '  path     [-s] [-r] [-d] [-b] [-m] [-p<path>] <str> [<str> ...]'
     echo ''
     exit 0
 fi
 if [ ".$1" = ".-v" -o ".$1" = ."--version" ]; then
-    echo "GNU shtool 1.4.9 (16-Apr-2000)"
+    echo "GNU shtool 1.5.0 (01-Jul-2000)"
     exit 0
 fi
+if [ ".$1" = ".-r" -o ".$1" = ."--recreate" ]; then
+    shtoolize -oshtool echo install mkdir fixperm tarball guessos
+    exit 0
+fi
 if [ ".$1" = ".-d" -o ".$1" = ."--debug" ]; then
     shift
     set -x
@@ -142,8 +147,8 @@
         ;;
     install )
         str_tool="install"
-        str_usage="[-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>] [-e<ext>] <file> <path>"
-        arg_spec="2="
+        str_usage="[-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>] [-e<ext>] <file> [<file> ...] <path>"
+        arg_spec="2+"
         opt_spec="v.t.c.C.s.m:o:g:e:"
         opt_v=no
         opt_t=no
@@ -578,105 +583,133 @@
     ##  Copyright (c) 1997-2000 Ralf S. Engelschall <rse@engelschall.com>
     ##  Originally written for shtool
     ##
-    
-    src="$1"
-    dst="$2"
     
-    #  If destination is a directory, append the input filename
-    if [ -d $dst ]; then
-        dst=`echo "$dst" | sed -e 's:/$::'`
-        dstfile=`echo "$src" | sed -e 's;.*/\([^/]*\)$;\1;'`
-        dst="$dst/$dstfile"
-    fi
+    #   determine source(s) and destination 
+    argc=$#
+    srcs=""
+    while [ $# -gt 1 ]; do
+        srcs="$srcs $1"
+        shift
+    done
+    dstpath="$1"
     
-    #  Add a possible extension to src and dst
-    if [ ".$opt_e" != . ]; then
-        src="$src$opt_e"
-        dst="$dst$opt_e"
+    #   type check for destination
+    dstisdir=0
+    if [ -d $dstpath ]; then
+        dstpath=`echo "$dstpath" | sed -e 's:/$::'`
+        dstisdir=1
     fi
     
-    #  Check for correct arguments
-    if [ ".$src" = ".$dst" ]; then
-        echo "$msgprefix:Error: source and destination are the same" 1>&2
+    #   consistency check for destination
+    if [ $argc -gt 2 -a $dstisdir = 0 ]; then
+        echo "$msgprefix:Error: multiple sources require destination to be directory" 1>&2
         exit 1
     fi
     
-    #  Make a temp file name in the destination directory
-    dstdir=`echo $dst | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;' -e 's;^$;.;'`
-    dsttmp="$dstdir/#INST@$$#"
+    #   iterate over all source(s)
+    for src in $srcs; do
+        dst=$dstpath
     
-    #  Verbosity
-    if [ ".$opt_v" = .yes ]; then
-        echo "$src -> $dst" 1>&2
-    fi
+        #  If destination is a directory, append the input filename
+        if [ $dstisdir = 1 ]; then
+            dstfile=`echo "$src" | sed -e 's;.*/\([^/]*\)$;\1;'`
+            dst="$dst/$dstfile"
+        fi
     
-    #  Copy or move the file name to the temp name
-    #  (because we might be not allowed to change the source)
-    if [ ".$opt_C" = .yes ]; then
-        opt_c=yes
-    fi
-    if [ ".$opt_c" = .yes ]; then
-        if [ ".$opt_t" = .yes ]; then
-            echo "cp $src $dsttmp" 1>&2
+        #  Add a possible extension to src and dst
+        if [ ".$opt_e" != . ]; then
+            src="$src$opt_e"
+            dst="$dst$opt_e"
         fi
-        cp $src $dsttmp || exit $?
-    else
-        if [ ".$opt_t" = .yes ]; then
-            echo "mv $src $dsttmp" 1>&2
+    
+        #  Check for correct arguments
+        if [ ".$src" = ".$dst" ]; then
+            echo "$msgprefix:Warning: source and destination are the same - skipped" 1>&2
+            continue
         fi
-        mv $src $dsttmp || exit $?
-    fi
+        if [ -d "$src" ]; then
+            echo "$msgprefix:Warning: source \`$src' is a directory - skipped" 1>&2
+            continue
+        fi
     
-    #  Adjust the target file
-    #  (we do chmod last to preserve setuid bits)
-    if [ ".$opt_s" = .yes ]; then
-        if [ ".$opt_t" = .yes ]; then
-            echo "strip $dsttmp" 1>&2
+        #  Make a temp file name in the destination directory
+        dsttmp=`echo $dst |\
+                sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;' -e 's;^$;.;' \
+                    -e "s;\$;/#INST@$$#;"`
+    
+        #  Verbosity
+        if [ ".$opt_v" = .yes ]; then
+            echo "$src -> $dst" 1>&2
+        fi
+    
+        #  Copy or move the file name to the temp name
+        #  (because we might be not allowed to change the source)
+        if [ ".$opt_C" = .yes ]; then
+            opt_c=yes
+        fi
+        if [ ".$opt_c" = .yes ]; then
+            if [ ".$opt_t" = .yes ]; then
+                echo "cp $src $dsttmp" 1>&2
+            fi
+            cp $src $dsttmp || exit $?
+        else
+            if [ ".$opt_t" = .yes ]; then
+                echo "mv $src $dsttmp" 1>&2
+            fi
+            mv $src $dsttmp || exit $?
         fi
-        strip $dsttmp || exit $?
-    fi
-    if [ ".$opt_o" != . ]; then
-        if [ ".$opt_t" = .yes ]; then
-            echo "chown $opt_o $dsttmp" 1>&2
+    
+        #  Adjust the target file
+        #  (we do chmod last to preserve setuid bits)
+        if [ ".$opt_s" = .yes ]; then
+            if [ ".$opt_t" = .yes ]; then
+                echo "strip $dsttmp" 1>&2
+            fi
+            strip $dsttmp || exit $?
         fi
-        chown $opt_o $dsttmp || exit $?
-    fi
-    if [ ".$opt_g" != . ]; then
-        if [ ".$opt_t" = .yes ]; then
-            echo "chgrp $opt_g $dsttmp" 1>&2
+        if [ ".$opt_o" != . ]; then
+            if [ ".$opt_t" = .yes ]; then
+                echo "chown $opt_o $dsttmp" 1>&2
+            fi
+            chown $opt_o $dsttmp || exit $?
         fi
-        chgrp $opt_g $dsttmp || exit $?
-    fi
-    if [ ".$opt_m" != . ]; then
-        if [ ".$opt_t" = .yes ]; then
-            echo "chmod $opt_m $dsttmp" 1>&2
+        if [ ".$opt_g" != . ]; then
+            if [ ".$opt_t" = .yes ]; then
+                echo "chgrp $opt_g $dsttmp" 1>&2
+            fi
+            chgrp $opt_g $dsttmp || exit $?
         fi
-        chmod $opt_m $dsttmp || exit $?
-    fi
-    
-    #   Determine whether to do a quick install
-    #   (has to be done _after_ the strip was already done)
-    quick=no
-    if [ ".$opt_C" = .yes ]; then
-        if [ -r $dst ]; then
-            if cmp -s $src $dst; then
-                quick=yes
+        if [ ".$opt_m" != . ]; then
+            if [ ".$opt_t" = .yes ]; then
+                echo "chmod $opt_m $dsttmp" 1>&2
             fi
+            chmod $opt_m $dsttmp || exit $?
         fi
-    fi
     
-    #   Finally install the file to the real destination
-    if [ $quick = yes ]; then
-        if [ ".$opt_t" = .yes ]; then
-            echo "rm -f $dsttmp" 1>&2
+        #   Determine whether to do a quick install
+        #   (has to be done _after_ the strip was already done)
+        quick=no
+        if [ ".$opt_C" = .yes ]; then
+            if [ -r $dst ]; then
+                if cmp -s $src $dst; then
+                    quick=yes
+                fi
+            fi
         fi
-        rm -f $dsttmp
-    else
-        if [ ".$opt_t" = .yes ]; then
-            echo "rm -f $dst && mv $dsttmp $dst" 1>&2
+    
+        #   Finally install the file to the real destination
+        if [ $quick = yes ]; then
+            if [ ".$opt_t" = .yes ]; then
+                echo "rm -f $dsttmp" 1>&2
+            fi
+            rm -f $dsttmp
+        else
+            if [ ".$opt_t" = .yes ]; then
+                echo "rm -f $dst && mv $dsttmp $dst" 1>&2
+            fi
+            rm -f $dst && mv $dsttmp $dst
         fi
-        rm -f $dst && mv $dsttmp $dst
-    fi
+    done
     ;;
 
 mkdir )
@@ -691,7 +724,7 @@
     for p in ${1+"$@"}; do
         #   if the directory already exists...
         if [ -d "$p" ]; then
-            if [ ".$opt_f" = .no ]; then
+            if [ ".$opt_f" = .no ] && [ ".$opt_p" = .no ]; then
                 echo "$msgprefix:Error: directory already exists: $p" 1>&2
                 errstatus=1
                 break
--B2K8VVAV7W939CM1N42H--


From ossp-cvs-owner@ossp.org  Mon Jul 10 21:57:01 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e6AJv0T22729; Mon, 10 Jul 2000 21:57:00 +0200 (CEST)
Date: Mon, 10 Jul 2000 21:57:00 +0200 (CEST)
Message-Id: <200007101957.e6AJv0T22729@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvs .cvsignore COPYING COPYING.LIB ChangeLog.zoo ...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   10-Jul-2000 21:57:00
  Branch: vendor                           Handle: 19700101010000963255219

  Modified files:           (Branch: vendor)
    ossp-pkg/cvs            NEWS
    ossp-pkg/cvs/doc        cvs.texinfo cvsclient.texi
    ossp-pkg/cvs/src        cvs.h main.c sanity.sh server.c update.c version.c
  Touched files:            (Branch: vendor)
    ossp-pkg/cvs            .cvsignore COPYING COPYING.LIB ChangeLog.zoo
                            INSTALL Makefile.in README acconfig.h config.h.in
                            configure configure.in
    ossp-pkg/cvs/diff       .cvsignore Makefile.in analyze.c cmpbuf.c cmpbuf.h
                            context.c diagmeet.note diff.c diff.h diff3.c
                            diffrun.h dir.c ed.c ifdef.c io.c normal.c side.c
                            system.h util.c version.c
    ossp-pkg/cvs/doc        .cvsignore FAQ HACKING Makefile.in RCSFILES TESTS
                            TODO cvs-paper.ms
    ossp-pkg/cvs/lib        .cvsignore Makefile.in argmatch.c dup2.c fncase.c
                            fnmatch.c fnmatch.h ftruncate.c getdate.c
                            getdate.y getline.c getline.h getopt.c getopt.h
                            getopt1.c hostname.c md5.c md5.h memmove.c mkdir.c
                            regex.c regex.h rename.c savecwd.c savecwd.h
                            sighandle.c strerror.c stripslash.c strstr.c
                            strtoul.c system.h valloc.c wait.h waitpid.c
                            xgetwd.c yesno.c
    ossp-pkg/cvs/man        .cvsignore Makefile.in cvs.1 cvs.5
    ossp-pkg/cvs/src        .cvsignore Makefile.in add.c admin.c buffer.c
                            buffer.h checkin.c checkout.c classify.c client.c
                            client.h commit.c create_adm.c cvsrc.c diff.c
                            edit.c edit.h entries.c error.c error.h
                            expand_path.c fileattr.c fileattr.h filesubr.c
                            find_names.c hardlink.c hardlink.h hash.c hash.h
                            history.c ignore.c import.c lock.c log.c login.c
                            logmsg.c mkmodules.c modules.c myndbm.c myndbm.h
                            no_diff.c options.h.in parseinfo.c patch.c rcs.c
                            rcs.h rcscmds.c recurse.c release.c remove.c
                            repos.c root.c rtag.c run.c scramble.c server.h
                            status.c subr.c tag.c update.h vers_ts.c watch.c
                            watch.h wrapper.c zlib.c
    ossp-pkg/cvs/zlib       .cvsignore Makefile.in README adler32.c
                            algorithm.doc compress.c crc32.c deflate.c
                            deflate.h gzio.c infblock.c infblock.h infcodes.c
                            infcodes.h inffast.c inffast.h inflate.c
                            inftrees.c inftrees.h infutil.c infutil.h trees.c
                            uncompr.c zconf.h zlib.h zutil.c zutil.h

  Log:
    Import of vendor CVS version, snapshot 20000710
    
    [Release Tags: CVS_20000710]

  Summary:
    Revision    Changes     Path
    1.1.1.5     +4  -0      ossp-pkg/cvs/NEWS
    1.1.1.7     +0  -0      ossp-pkg/cvs/doc/cvs.texinfo
    1.1.1.3     +0  -0      ossp-pkg/cvs/doc/cvsclient.texi
    1.1.1.6     +0  -0      ossp-pkg/cvs/src/cvs.h
    1.1.1.7     +0  -0      ossp-pkg/cvs/src/main.c
    1.1.1.10    +0  -0      ossp-pkg/cvs/src/sanity.sh
    1.1.1.13    +0  -0      ossp-pkg/cvs/src/server.c
    1.1.1.8     +0  -0      ossp-pkg/cvs/src/update.c
    1.1.1.3     +0  -0      ossp-pkg/cvs/src/version.c
  ____________________________________________________________________________

  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/NEWS?cvsroot=ossp&r1=1.1.1.4&r2=1.1.1.5
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/doc/cvs.texinfo?cvsroot=ossp&r1=1.1.1.6&r2=1.1.1.7
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/doc/cvsclient.texi?cvsroot=ossp&r1=1.1.1.2&r2=1.1.1.3
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/cvs.h?cvsroot=ossp&r1=1.1.1.5&r2=1.1.1.6
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/main.c?cvsroot=ossp&r1=1.1.1.6&r2=1.1.1.7
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/sanity.sh?cvsroot=ossp&r1=1.1.1.9&r2=1.1.1.10
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/server.c?cvsroot=ossp&r1=1.1.1.12&r2=1.1.1.13
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/update.c?cvsroot=ossp&r1=1.1.1.7&r2=1.1.1.8
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/version.c?cvsroot=ossp&r1=1.1.1.2&r2=1.1.1.3

From ossp-cvs-owner@ossp.org  Tue Jul 11 07:22:18 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e6B5MHr65197; Tue, 11 Jul 2000 07:22:17 +0200 (CEST)
Date: Tue, 11 Jul 2000 07:22:17 +0200 (CEST)
Message-Id: <200007110522.e6B5MHr65197@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="62LDC7PQJ6H071XHGIKG"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvs/src cvs.h main.c root.c sanity.sh server.c up...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--62LDC7PQJ6H071XHGIKG
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   11-Jul-2000 07:22:16
  Branch: HEAD                             Handle: 2000071106221401

  Modified files:
    ossp-pkg/cvs/src        cvs.h main.c root.c sanity.sh server.c update.c
                            version.c

  Log:
    Merge in conflicts

  Summary:
    Revision    Changes     Path
    1.17        +1  -0      ossp-pkg/cvs/src/cvs.h
    1.20        +2  -9      ossp-pkg/cvs/src/main.c
    1.9         +8  -6      ossp-pkg/cvs/src/root.c
    1.7         +45 -11     ossp-pkg/cvs/src/sanity.sh
    1.26        +10 -0      ossp-pkg/cvs/src/server.c
    1.10        +18 -11     ossp-pkg/cvs/src/update.c
    1.8         +47 -1      ossp-pkg/cvs/src/version.c
  ____________________________________________________________________________

--62LDC7PQJ6H071XHGIKG
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/cvs/src/cvs.h
Content-Disposition: attachment

Index: ossp-pkg/cvs/src/cvs.h
============================================================
$ cvs diff -u -r1.16 -r1.17 cvs.h
--- ossp-pkg/cvs/src/cvs.h	2000/07/01 13:12:53	1.16
+++ ossp-pkg/cvs/src/cvs.h	2000/07/11 05:22:14	1.17
@@ -932,6 +932,7 @@
 extern int rtag PROTO((int argc, char **argv));
 extern int cvsstatus PROTO((int argc, char **argv));
 extern int cvstag PROTO((int argc, char **argv));
+extern int version PROTO((int argc, char **argv));
 
 extern unsigned long int lookup_command_attribute PROTO((char *));
 

--62LDC7PQJ6H071XHGIKG
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/cvs/src/main.c
Content-Disposition: attachment

Index: ossp-pkg/cvs/src/main.c
============================================================
$ cvs diff -u -r1.19 -r1.20 main.c
--- ossp-pkg/cvs/src/main.c	2000/07/06 19:33:59	1.19
+++ ossp-pkg/cvs/src/main.c	2000/07/11 05:22:14	1.20
@@ -148,6 +148,7 @@
     { "tag",      "ta",       "freeze",    cvstag },
     { "unedit",   NULL,	      NULL,	   unedit },
     { "update",   "up",       "upd",       update },
+    { "version",  "ve",       "ver",       version },
     { "watch",    NULL,	      NULL,	   watch },
     { "watchers", NULL,	      NULL,	   watchers },
 #ifdef OSSP_PATCH_CVSROOT
@@ -517,8 +518,6 @@
     char **argv;
 {
     char *CVSroot = CVSROOT_DFLT;
-    extern char *version_string;
-    extern char *config_string;
     char *cp, *end;
     const struct cmd *cm;
     int c, err = 0;
@@ -763,14 +762,8 @@
 		logoff = 1;
 		break;
 	    case 'v':
-		/* Having the year here is a good idea, so people have
-		   some idea of how long ago their version of CVS was
-		   released.  */
-		(void) fputs (version_string, stdout);
-		(void) fputs (config_string, stdout);
-#ifndef OSSP_PATCH_COSMETICS
 		(void) fputs ("\n", stdout);
-#endif
+		version (0, (char **) NULL);    
 		(void) fputs ("\n", stdout);
 		(void) fputs ("\
 Copyright (c) 1989-2000 Brian Berliner, david d `zoo' zuhn, \n\

--62LDC7PQJ6H071XHGIKG
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/cvs/src/root.c
Content-Disposition: attachment

Index: ossp-pkg/cvs/src/root.c
============================================================
$ cvs diff -u -r1.8 -r1.9 root.c
--- ossp-pkg/cvs/src/root.c	2000/06/27 19:31:57	1.8
+++ ossp-pkg/cvs/src/root.c	2000/07/11 05:22:14	1.9
@@ -843,12 +843,14 @@
         syncprog++;
     }
     if (smart && !force) {
-        if (strcasecmp(syncprog, "manual") == 0) {
-            fprintf(stderr, "%s: synchronize SLAVE with MASTER of repository `%s', please!\n", program_name, e->nickname);
-        }
-        else {
-            fprintf(stderr, "%s: synchronize SLAVE with MASTER of repository `%s'\n", program_name, e->nickname);
-            fprintf(stderr, "%s: by running the command `%s root -s %s', please.\n", program_name, program_name, e->nickname);
+        if (!really_quiet) {
+            if (strcasecmp(syncprog, "manual") == 0) {
+                fprintf(stderr, "%s: synchronize SLAVE with MASTER of repository `%s', please!\n", program_name, e->nickname);
+            }
+            else {
+                fprintf(stderr, "%s: synchronize SLAVE with MASTER of repository `%s'\n", program_name, e->nickname);
+                fprintf(stderr, "%s: by running the command `%s root -s %s', please.\n", program_name, program_name, e->nickname);
+            }
         }
         return;
     }

--62LDC7PQJ6H071XHGIKG
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/cvs/src/sanity.sh
Content-Disposition: attachment

Index: ossp-pkg/cvs/src/sanity.sh
============================================================
$ cvs diff -u -r1.6 -r1.7 sanity.sh
--- ossp-pkg/cvs/src/sanity.sh	2000/07/06 19:33:59	1.6
+++ ossp-pkg/cvs/src/sanity.sh	2000/07/11 05:22:14	1.7
@@ -635,7 +635,7 @@
 	tests="${tests} branches branches2 tagc tagf"
 	tests="${tests} rcslib multibranch import importb importc"
 	tests="${tests} import-after-initial"
-	tests="${tests} join join2 join3 join-readonly-conflict"
+	tests="${tests} join join2 join3 join-readonly-conflict join-admin"
 	tests="${tests} new newb conflicts conflicts2 conflicts3"
 	tests="${tests} clean"
 	# Checking out various places (modules, checkout -d, &c)
@@ -6105,6 +6105,49 @@
 	  rm -rf ${CVSROOT_DIRNAME}/$module
 	  ;;
 
+	join-admin)
+	  mkdir 1; cd 1
+	  dotest join-admin-1 "$testcvs -q co -l ." ''
+	  module=x
+	  mkdir $module
+	  $testcvs -q add $module >>$LOGFILE 2>&1
+	  cd $module
+
+	  # Create a file so applying the first tag works.
+	  echo foo > a
+	  $testcvs -Q add a > /dev/null 2>&1
+	  $testcvs -Q ci -m. a > /dev/null 2>&1
+
+	  $testcvs -Q tag -b B
+	  $testcvs -Q tag -b M1
+	  echo '$''Id$' > b
+	  $testcvs -Q add b > /dev/null 2>&1
+	  $testcvs -Q ci -m. b > /dev/null 2>&1
+	  $testcvs -Q tag -b M2
+
+	  $testcvs -Q update -r B
+	  $testcvs -Q update -kk -jM1 -jM2
+	  $testcvs -Q ci -m. b >/dev/null 2>&1
+
+	  $testcvs -Q update -A
+
+	  # Verify that the -kk flag from the update did not
+	  # propagate to the repository.
+	  dotest join-admin-1 "$testcvs status b" \
+"===================================================================
+File: b                	Status: Up-to-date
+
+   Working revision:	1\.1.*
+   Repository revision:	1\.1	${TESTDIR}/cvsroot/x/b,v
+   Sticky Tag:		(none)
+   Sticky Date:		(none)
+   Sticky Options:	(none)"
+
+	  cd ../..
+	  rm -rf 1
+	  rm -rf ${CVSROOT_DIRNAME}/$module
+	  ;;
+
 	new) # look for stray "no longer pertinent" messages.
 		mkdir ${CVSROOT_DIRNAME}/first-dir
 
@@ -7172,7 +7215,7 @@
 	  dotest modules-148 "${testcvs} ci -m 'add modules' CVSROOT/modules" \
 "Checking in CVSROOT/modules;
 ${TESTDIR}/cvsroot/CVSROOT/modules,v  <--  modules
-new revision: 1\.5; previous revision: 1\.4
+new revision: 1\.[0-9]*; previous revision: 1\.[0-9]*
 done
 ${PROG} [a-z]*: Rebuilding administrative file database"
 
@@ -20140,15 +20183,6 @@
 Amquiteunabletocomeupwithinterestingpasswordsanymore
 END AUTH REQUEST
 EOF
-
-            # Test protection from D.o.S. attack during pserver auth phase.
-            #
-            # The unacceptably long line of 'x's should get cut off
-            # after PATH_MAX chars -- see calls to getline_safe() in
-            # server.c -- so even though no newline is ever sent, the
-            # server should claim a bad protocol start.
-	    dotest_fail pserver-14 "(while true; do echo -n x; done) | ${testcvs} --allow-root=${CVSROOT_DIRNAME} pserver" \
-"${DOTSTAR} bad auth protocol start: ${DOTSTAR}"
 
 	    # Clean up.
 	    echo "# comments only" >config

--62LDC7PQJ6H071XHGIKG
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/cvs/src/server.c
Content-Disposition: attachment

Index: ossp-pkg/cvs/src/server.c
============================================================
$ cvs diff -u -r1.25 -r1.26 server.c
--- ossp-pkg/cvs/src/server.c	2000/07/06 19:33:59	1.25
+++ ossp-pkg/cvs/src/server.c	2000/07/11 05:22:15	1.26
@@ -3749,6 +3749,15 @@
     do_cvs_command ("noop", noop);
 }
 
+static void serve_version PROTO ((char *));
+
+static void
+serve_version (arg)
+    char *arg;
+{
+    do_cvs_command ("version", version);
+}
+
 static void serve_init PROTO ((char *));
 
 static void
@@ -4729,6 +4738,7 @@
   REQ_LINE("init", serve_init, RQ_ROOTLESS),
   REQ_LINE("annotate", serve_annotate, 0),
   REQ_LINE("noop", serve_noop, 0),
+  REQ_LINE("version", serve_version, RQ_ROOTLESS),
   REQ_LINE(NULL, NULL, 0)
 
 #undef REQ_LINE

--62LDC7PQJ6H071XHGIKG
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/cvs/src/update.c
Content-Disposition: attachment

Index: ossp-pkg/cvs/src/update.c
============================================================
$ cvs diff -u -r1.9 -r1.10 update.c
--- ossp-pkg/cvs/src/update.c	2000/07/01 13:12:54	1.9
+++ ossp-pkg/cvs/src/update.c	2000/07/11 05:22:15	1.10
@@ -2110,7 +2110,7 @@
     Vers_TS *vers;
 {
     char *backup;
-    char *options;
+    char *t_options;
     int status;
 
     char *rev1;
@@ -2345,6 +2345,13 @@
 
 	    xvers = Version_TS (finfo, vers->options, jrev2, jdate2, 1, 0);
 
+	    /* Reset any keyword expansion option.  Otherwise, when a
+	       command like `cvs update -kk -jT1 -jT2' creates a new file
+	       (because a file had the T2 tag, but not T1), the subsequent
+	       commit of that just-added file effectively would set the
+	       admin `-kk' option for that file in the repository.  */
+	    options = NULL;
+
 	    /* FIXME: If checkout_file fails, we should arrange to
                return a non-zero exit status.  */
 	    status = checkout_file (finfo, xvers, 1, 0, 1);
@@ -2433,10 +2440,10 @@
     copy_file (finfo->file, backup);
     xchmod (finfo->file, 1);
 
-    options = vers->options;
+    t_options = vers->options;
 #if 0
-    if (*options == '\0')
-	options = "-kk";		/* to ignore keyword expansions */
+    if (*t_options == '\0')
+	t_options = "-kk";		/* to ignore keyword expansions */
 #endif
 
     /* If the source of the merge is the same as the working file
@@ -2454,12 +2461,12 @@
 	/* This is because of the worry below about $Name.  If that
 	   isn't a problem, I suspect this code probably works for
 	   text files too.  */
-	&& (strcmp (options, "-kb") == 0
+	&& (strcmp (t_options, "-kb") == 0
 	    || wrap_merge_is_copy (finfo->file)))
     {
 	/* FIXME: what about nametag?  What does RCS_merge do with
 	   $Name?  */
-	if (RCS_checkout (finfo->rcs, finfo->file, rev2, NULL, options,
+	if (RCS_checkout (finfo->rcs, finfo->file, rev2, NULL, t_options,
 			  RUN_TTY, (RCSCHECKOUTPROC)0, NULL) != 0)
 	    status = 2;
 	else
@@ -2483,7 +2490,7 @@
 	   print.  */
 	write_letter (finfo, 'U');
     }
-    else if (strcmp (options, "-kb") == 0
+    else if (strcmp (t_options, "-kb") == 0
 	     || wrap_merge_is_copy (finfo->file)
 	     || special_file_mismatch (finfo, rev1, rev2))
     {
@@ -2493,7 +2500,7 @@
 	   the two files, and let them resolve it.  It is possible
 	   that we should require a "touch foo" or similar step before
 	   we allow a checkin.  */
-	if (RCS_checkout (finfo->rcs, finfo->file, rev2, NULL, options,
+	if (RCS_checkout (finfo->rcs, finfo->file, rev2, NULL, t_options,
 			  RUN_TTY, (RCSCHECKOUTPROC)0, NULL) != 0)
 	    status = 2;
 	else
@@ -2525,11 +2532,11 @@
     else
 #ifdef OSSP_PATCH_MERGENOKEYWORD
     {
-        if (*options == '\0')
-            options = "-kk"; /* to ignore keyword expansions */
+        if (*t_options == '\0')
+            t_options = "-kk"; /* to ignore keyword expansions */
 #endif
 	status = RCS_merge (finfo->rcs, vers->srcfile->path, finfo->file,
-			    options, rev1, rev2);
+			    t_options, rev1, rev2);
 #ifdef OSSP_PATCH_MERGENOKEYWORD
     }
 #endif

--62LDC7PQJ6H071XHGIKG
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/cvs/src/version.c
Content-Disposition: attachment

Index: ossp-pkg/cvs/src/version.c
============================================================
$ cvs diff -u -r1.7 -r1.8 version.c
--- ossp-pkg/cvs/src/version.c	2000/06/22 16:41:13	1.7
+++ ossp-pkg/cvs/src/version.c	2000/07/11 05:22:15	1.8
@@ -18,7 +18,7 @@
 #define NAME_PREFIX ""
 #endif
 
-char *version_string = "\n" NAME_PREFIX "Concurrent Versions System (CVS) 1.10.8.6";
+char *version_string = NAME_PREFIX "Concurrent Versions System (CVS) 1.10.8.6";
 
 #ifdef CLIENT_SUPPORT
 #ifdef SERVER_SUPPORT
@@ -33,3 +33,49 @@
 char *config_string = "\n";
 #endif
 #endif
+
+static const char *const version_usage[] =
+{
+    "Usage: %s %s\n",
+    NULL
+};
+
+int
+version (argc, argv)
+    int argc;
+    char **argv;
+{
+    int err = 0;
+
+    if (argc == -1)
+	usage (version_usage);
+
+#ifdef CLIENT_SUPPORT
+    if (client_active)
+        (void) fputs ("Client: ", stdout);
+#endif
+
+    /* Having the year here is a good idea, so people have
+       some idea of how long ago their version of CVS was
+       released.  */
+    (void) fputs (version_string, stdout);
+    (void) fputs (config_string, stdout);
+
+#ifdef CLIENT_SUPPORT
+    if (client_active)
+    {
+	(void) fputs ("Server: ", stdout);
+	start_server ();
+	if (supported_request ("version"))
+	    send_to_server ("version\012", 0);
+	else
+	{
+	    send_to_server ("noop\012", 0);
+	    fputs ("(unknown)\n", stdout);
+	}
+	err = get_responses_and_close ();
+    }
+#endif
+    return err;
+}
+	
--62LDC7PQJ6H071XHGIKG--


From ossp-cvs-owner@ossp.org  Tue Jul 11 08:09:53 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e6B69qx68539; Tue, 11 Jul 2000 08:09:52 +0200 (CEST)
Date: Tue, 11 Jul 2000 08:09:52 +0200 (CEST)
Message-Id: <200007110609.e6B69qx68539@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="47QMBH3GIT19XT9XXZS6"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvs shtool
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--47QMBH3GIT19XT9XXZS6
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   11-Jul-2000 08:09:52
  Branch: HEAD                             Handle: 2000071107095100

  Modified files:
    ossp-pkg/cvs            shtool

  Log:
    Update shtool

  Summary:
    Revision    Changes     Path
    1.4         +11 -6      ossp-pkg/cvs/shtool
  ____________________________________________________________________________

--47QMBH3GIT19XT9XXZS6
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/cvs/shtool
Content-Disposition: attachment

Index: ossp-pkg/cvs/shtool
============================================================
$ cvs diff -u -r1.3 -r1.4 shtool
--- ossp-pkg/cvs/shtool	2000/06/25 18:55:32	1.3
+++ ossp-pkg/cvs/shtool	2000/07/11 06:09:51	1.4
@@ -6,7 +6,7 @@
 ##  See http://www.gnu.org/software/shtool/ for more information.
 ##  See ftp://ftp.gnu.org/gnu/shtool/ for latest version.
 ##
-##  Version:  1.4.10 (18-Jun-2000)
+##  Version:  1.5.0 (01-Jul-2000)
 ##  Contents: 5/17 available modules
 ##
 
@@ -55,7 +55,7 @@
 ##    arx        Extended archive command
 ##    slo        Separate linker options by library class
 ##    scpp       Sharing C Pre-Processor
-##    version    Generate and maintain a version information file
+##    version    Maintain a version information file
 ##    path       Deal with program paths
 ##
 
@@ -65,7 +65,7 @@
     exit 1
 fi
 if [ ".$1" = ".-h" -o ".$1" = ".--help" ]; then
-    echo "This is GNU shtool, version 1.4.10 (18-Jun-2000)"
+    echo "This is GNU shtool, version 1.5.0 (01-Jul-2000)"
     echo "Copyright (c) 1994-2000 Ralf S. Engelschall <rse@engelschall.com>"
     echo "Report bugs to <bug-shtool@gnu.org>"
     echo ''
@@ -75,6 +75,7 @@
     echo '  -v, --version   display shtool version information'
     echo '  -h, --help      display shtool usage help page (this one)'
     echo '  -d, --debug     display shell trace information'
+    echo '  -r, --recreate  recreate this shtool script via shtoolize'
     echo ''
     echo 'Available <cmd-name> [<cmd-options>] [<cmd-args>]:'
     echo '  echo     [-n] [-e] [<str> ...]'
@@ -97,14 +98,18 @@
     echo '  slo      [-p<str>] -- -L<dir> -l<lib> [-L<dir> -l<lib> ...]'
     echo '  scpp     [-v] [-p] [-f<filter>] [-o<ofile>] [-t<tfile>] [-M<mark>]'
     echo '           [-D<dname>] [-C<cname>] <file> [<file> ...]'
-    echo '  version  [-l<lang>] [-n<name>] [-p<prefix>] [-s<version>] [-i<knob>]'
-    echo '           [-d<type>] <file>'
+    echo '  version  [-l<lang>] [-n<name>] [-p<prefix>] [-s<version>] [-e]'
+    echo '           [-i<knob>] [-d<type>] <file>'
     echo '  path     [-s] [-r] [-d] [-b] [-m] [-p<path>] <str> [<str> ...]'
     echo ''
     exit 0
 fi
 if [ ".$1" = ".-v" -o ".$1" = ."--version" ]; then
-    echo "GNU shtool 1.4.10 (18-Jun-2000)"
+    echo "GNU shtool 1.5.0 (01-Jul-2000)"
+    exit 0
+fi
+if [ ".$1" = ".-r" -o ".$1" = ."--recreate" ]; then
+    shtoolize -oshtool echo install mkdir fixperm tarball
     exit 0
 fi
 if [ ".$1" = ".-d" -o ".$1" = ."--debug" ]; then
--47QMBH3GIT19XT9XXZS6--


From ossp-cvs-owner@ossp.org  Wed Jul 12 08:15:49 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e6C6FmX70822; Wed, 12 Jul 2000 08:15:48 +0200 (CEST)
Date: Wed, 12 Jul 2000 08:15:48 +0200 (CEST)
Message-Id: <200007120615.e6C6FmX70822@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvs .cvsignore COPYING COPYING.LIB ChangeLog.zoo ...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   12-Jul-2000 08:15:48
  Branch: vendor                           Handle: 19700101010000963378736

  Modified files:           (Branch: vendor)
    ossp-pkg/cvs            config.h.in configure configure.in
    ossp-pkg/cvs/diff       util.c
    ossp-pkg/cvs/lib        savecwd.c
    ossp-pkg/cvs/src        filesubr.c import.c main.c rcs.c update.c zlib.c
  Touched files:            (Branch: vendor)
    ossp-pkg/cvs            .cvsignore COPYING COPYING.LIB ChangeLog.zoo
                            INSTALL Makefile.in NEWS README acconfig.h
    ossp-pkg/cvs/diff       .cvsignore Makefile.in analyze.c cmpbuf.c cmpbuf.h
                            context.c diagmeet.note diff.c diff.h diff3.c
                            diffrun.h dir.c ed.c ifdef.c io.c normal.c side.c
                            system.h version.c
    ossp-pkg/cvs/doc        .cvsignore FAQ HACKING Makefile.in RCSFILES TESTS
                            TODO cvs-paper.ms cvs.texinfo cvsclient.texi
    ossp-pkg/cvs/lib        .cvsignore Makefile.in argmatch.c dup2.c fncase.c
                            fnmatch.c fnmatch.h ftruncate.c getdate.c
                            getdate.y getline.c getline.h getopt.c getopt.h
                            getopt1.c hostname.c md5.c md5.h memmove.c mkdir.c
                            regex.c regex.h rename.c savecwd.h sighandle.c
                            strerror.c stripslash.c strstr.c strtoul.c
                            system.h valloc.c wait.h waitpid.c xgetwd.c
                            yesno.c
    ossp-pkg/cvs/man        .cvsignore Makefile.in cvs.1 cvs.5
    ossp-pkg/cvs/src        .cvsignore Makefile.in add.c admin.c buffer.c
                            buffer.h checkin.c checkout.c classify.c client.c
                            client.h commit.c create_adm.c cvs.h cvsrc.c
                            diff.c edit.c edit.h entries.c error.c error.h
                            expand_path.c fileattr.c fileattr.h find_names.c
                            hardlink.c hardlink.h hash.c hash.h history.c
                            ignore.c lock.c log.c login.c logmsg.c mkmodules.c
                            modules.c myndbm.c myndbm.h no_diff.c options.h.in
                            parseinfo.c patch.c rcs.h rcscmds.c recurse.c
                            release.c remove.c repos.c root.c rtag.c run.c
                            sanity.sh scramble.c server.c server.h status.c
                            subr.c tag.c update.h vers_ts.c version.c watch.c
                            watch.h wrapper.c
    ossp-pkg/cvs/zlib       .cvsignore Makefile.in README adler32.c
                            algorithm.doc compress.c crc32.c deflate.c
                            deflate.h gzio.c infblock.c infblock.h infcodes.c
                            infcodes.h inffast.c inffast.h inflate.c
                            inftrees.c inftrees.h infutil.c infutil.h trees.c
                            uncompr.c zconf.h zlib.h zutil.c zutil.h

  Log:
    Import of vendor CVS version, snapshot 20000712
    
    [Release Tags: CVS_20000712]

  Summary:
    Revision    Changes     Path
    1.1.1.3     +6  -0      ossp-pkg/cvs/config.h.in
    1.1.1.4     BLOB        ossp-pkg/cvs/configure
    1.1.1.4     +2  -1      ossp-pkg/cvs/configure.in
    1.1.1.2     +0  -0      ossp-pkg/cvs/diff/util.c
    1.1.1.2     +0  -0      ossp-pkg/cvs/lib/savecwd.c
    1.1.1.2     +0  -0      ossp-pkg/cvs/src/filesubr.c
    1.1.1.5     +0  -0      ossp-pkg/cvs/src/import.c
    1.1.1.8     +0  -0      ossp-pkg/cvs/src/main.c
    1.1.1.11    +0  -0      ossp-pkg/cvs/src/rcs.c
    1.1.1.9     +0  -0      ossp-pkg/cvs/src/update.c
    1.1.1.2     +0  -0      ossp-pkg/cvs/src/zlib.c
  ____________________________________________________________________________

  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/config.h.in?cvsroot=ossp&r1=1.1.1.2&r2=1.1.1.3
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/configure?cvsroot=ossp&r1=1.1.1.3&r2=1.1.1.4
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/configure.in?cvsroot=ossp&r1=1.1.1.3&r2=1.1.1.4
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/diff/util.c?cvsroot=ossp&r1=1.1.1.1&r2=1.1.1.2
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/lib/savecwd.c?cvsroot=ossp&r1=1.1.1.1&r2=1.1.1.2
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/filesubr.c?cvsroot=ossp&r1=1.1.1.1&r2=1.1.1.2
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/import.c?cvsroot=ossp&r1=1.1.1.4&r2=1.1.1.5
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/main.c?cvsroot=ossp&r1=1.1.1.7&r2=1.1.1.8
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/rcs.c?cvsroot=ossp&r1=1.1.1.10&r2=1.1.1.11
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/update.c?cvsroot=ossp&r1=1.1.1.8&r2=1.1.1.9
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/zlib.c?cvsroot=ossp&r1=1.1.1.1&r2=1.1.1.2

From ossp-cvs-owner@ossp.org  Wed Jul 12 17:31:56 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e6CFVtv10029; Wed, 12 Jul 2000 17:31:55 +0200 (CEST)
Date: Wed, 12 Jul 2000 17:31:55 +0200 (CEST)
Message-Id: <200007121531.e6CFVtv10029@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="DVMYT15EOUHEBG5AOUKI"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvs/src import.c rcs.c update.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--DVMYT15EOUHEBG5AOUKI
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   12-Jul-2000 17:31:55
  Branch: HEAD                             Handle: 2000071216315301

  Modified files:
    ossp-pkg/cvs/src        import.c rcs.c update.c

  Log:
    Merge in conflicts

  Summary:
    Revision    Changes     Path
    1.12        +12 -0      ossp-pkg/cvs/src/import.c
    1.14        +12 -0      ossp-pkg/cvs/src/rcs.c
    1.11        +10 -0      ossp-pkg/cvs/src/update.c
  ____________________________________________________________________________

--DVMYT15EOUHEBG5AOUKI
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/cvs/src/import.c
Content-Disposition: attachment

Index: ossp-pkg/cvs/src/import.c
============================================================
$ cvs diff -u -r1.11 -r1.12 import.c
--- ossp-pkg/cvs/src/import.c	2000/06/22 13:31:38	1.11
+++ ossp-pkg/cvs/src/import.c	2000/07/12 15:31:53	1.12
@@ -1373,12 +1373,18 @@
 		    case S_IFREG: break;
 		    case S_IFCHR:
 		    case S_IFBLK:
+#ifdef HAVE_ST_RDEV
 			if (fprintf (fprcs, "special\t%s %lu;\012",
 				     (file_type == S_IFCHR
 				      ? "character"
 				      : "block"),
 				     (unsigned long) sb.st_rdev) < 0)
 			    goto write_error;
+#else
+			error (0, 0,
+"can't import %s: unable to import device files on this system",
+userfile);
+#endif
 			break;
 		    default:
 			error (0, 0,
@@ -1424,12 +1430,18 @@
 			case S_IFREG: break;
 			case S_IFCHR:
 			case S_IFBLK:
+#ifdef HAVE_ST_RDEV
 			    if (fprintf (fprcs, "special\t%s %lu;\012",
 					 (file_type == S_IFCHR
 					  ? "character"
 					  : "block"),
 					 (unsigned long) sb.st_rdev) < 0)
 				goto write_error;
+#else
+			    error (0, 0,
+"can't import %s: unable to import device files on this system",
+userfile);
+#endif
 			    break;
 			default:
 			    error (0, 0,

--DVMYT15EOUHEBG5AOUKI
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/cvs/src/rcs.c
Content-Disposition: attachment

Index: ossp-pkg/cvs/src/rcs.c
============================================================
$ cvs diff -u -r1.13 -r1.14 rcs.c
--- ossp-pkg/cvs/src/rcs.c	2000/07/06 19:33:59	1.13
+++ ossp-pkg/cvs/src/rcs.c	2000/07/12 15:31:53	1.14
@@ -4346,6 +4346,7 @@
 #ifdef PRESERVE_PERMISSIONS_SUPPORT
     else if (special_file)
     {
+#ifdef HAVE_MKNOD
 	char *dest;
 
 	/* Can send either to WORKFILE or to SOUT, as long as SOUT is
@@ -4366,6 +4367,11 @@
 	if (mknod (dest, special_file, devnum) < 0)
 	    error (1, errno, "could not create special file %s",
 		   dest);
+#else
+	error (1, 0,
+"cannot create %s: unable to create special files on this system",
+workfile);
+#endif
     }
 #endif
     else
@@ -4968,6 +4974,7 @@
 		case S_IFREG: break;
 		case S_IFCHR:
 		case S_IFBLK:
+#ifdef HAVE_ST_RDEV
 		    np = getnode();
 		    np->type = RCSFIELD;
 		    np->key = xstrdup ("special");
@@ -4977,6 +4984,11 @@
 			     (unsigned long) sb.st_rdev);
 		    np->data = xstrdup (buf);
 		    addnode (delta->other_delta, np);
+#else
+		    error (0, 0,
+"can't preserve %s: unable to save device files on this system",
+workfile);
+#endif
 		    break;
 
 		default:

--DVMYT15EOUHEBG5AOUKI
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/cvs/src/update.c
Content-Disposition: attachment

Index: ossp-pkg/cvs/src/update.c
============================================================
$ cvs diff -u -r1.10 -r1.11 update.c
--- ossp-pkg/cvs/src/update.c	2000/07/11 05:22:15	1.10
+++ ossp-pkg/cvs/src/update.c	2000/07/12 15:31:54	1.11
@@ -2650,6 +2650,7 @@
 	    rev1_symlink = xreadlink (finfo->file);
 	else
 	{
+#ifdef HAVE_ST_RDEV
 	    if (CVS_LSTAT (finfo->file, &sb) < 0)
 		error (1, errno, "could not get file information for %s",
 		       finfo->file);
@@ -2658,6 +2659,10 @@
 	    rev1_mode = sb.st_mode;
 	    if (S_ISBLK (rev1_mode) || S_ISCHR (rev1_mode))
 		rev1_dev = sb.st_rdev;
+#else
+	    error (1, 0, "cannot handle device files on this system (%s)",
+		   finfo->file);
+#endif
 	}
 	rev1_hardlinks = list_linked_files_on_disk (finfo->file);
     }
@@ -2723,6 +2728,7 @@
 	    rev2_symlink = xreadlink (finfo->file);
 	else
 	{
+#ifdef HAVE_ST_RDEV
 	    if (CVS_LSTAT (finfo->file, &sb) < 0)
 		error (1, errno, "could not get file information for %s",
 		       finfo->file);
@@ -2731,6 +2737,10 @@
 	    rev2_mode = sb.st_mode;
 	    if (S_ISBLK (rev2_mode) || S_ISCHR (rev2_mode))
 		rev2_dev = sb.st_rdev;
+#else
+	    error (1, 0, "cannot handle device files on this system (%s)",
+		   finfo->file);
+#endif
 	}
 	rev2_hardlinks = list_linked_files_on_disk (finfo->file);
     }
--DVMYT15EOUHEBG5AOUKI--


From ossp-cvs-owner@ossp.org  Wed Jul 12 17:35:09 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e6CFZ8710284; Wed, 12 Jul 2000 17:35:08 +0200 (CEST)
Date: Wed, 12 Jul 2000 17:35:08 +0200 (CEST)
Message-Id: <200007121535.e6CFZ8710284@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="L2BG6M2C8T7OU6N12W86"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvs configure configure.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--L2BG6M2C8T7OU6N12W86
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   12-Jul-2000 17:35:08
  Branch: HEAD                             Handle: 2000071216350501

  Modified files:
    ossp-pkg/cvs            configure configure.in

  Log:
    Merge in conflicts

  Summary:
    Revision    Changes     Path
    1.13        BLOB        ossp-pkg/cvs/configure
    1.13        +2  -1      ossp-pkg/cvs/configure.in
  ____________________________________________________________________________

--L2BG6M2C8T7OU6N12W86
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/cvs/configure
Content-Disposition: attachment

Index: ossp-pkg/cvs/configure
============================================================
$ cvs update -p -r1.12 configure >configure.old
$ cvs update -p -r1.13 configure >configure.new
$ diff -u configure.old configure.new

--L2BG6M2C8T7OU6N12W86
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/cvs/configure.in
Content-Disposition: attachment

Index: ossp-pkg/cvs/configure.in
============================================================
$ cvs diff -u -r1.12 -r1.13 configure.in
--- ossp-pkg/cvs/configure.in	2000/06/20 14:26:03	1.12
+++ ossp-pkg/cvs/configure.in	2000/07/12 15:35:06	1.13
@@ -65,8 +65,9 @@
 AC_TYPE_SIGNAL
 
 AC_STRUCT_ST_BLKSIZE
+AC_STRUCT_ST_RDEV
 AC_REPLACE_FUNCS(mkdir rename strstr dup2 strerror valloc waitpid memmove strtoul)
-AC_CHECK_FUNCS(fchmod fsync ftime mktemp putenv vprintf ftruncate timezone getpagesize initgroups fchdir sigaction sigprocmask sigvec sigsetmask sigblock tempnam tzset readlink wait3)
+AC_CHECK_FUNCS(fchmod fsync ftime mktemp putenv vprintf ftruncate timezone getpagesize initgroups fchdir sigaction sigprocmask sigvec sigsetmask sigblock tempnam tzset readlink wait3 mknod)
 
 dnl
 dnl The CVS coding standard (as specified in HACKING) is that if it exists
--L2BG6M2C8T7OU6N12W86--


From ossp-cvs-owner@ossp.org  Wed Jul 12 17:50:10 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e6CFo9411384; Wed, 12 Jul 2000 17:50:09 +0200 (CEST)
Date: Wed, 12 Jul 2000 17:50:09 +0200 (CEST)
Message-Id: <200007121550.e6CFo9411384@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="PLC7ZZJXQFU8XXAEE2Z3"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvs/src main.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--PLC7ZZJXQFU8XXAEE2Z3
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   12-Jul-2000 17:50:09
  Branch: HEAD                             Handle: 2000071216500900

  Modified files:
    ossp-pkg/cvs/src        main.c

  Log:
    *** empty log message ***

  Summary:
    Revision    Changes     Path
    1.21        +2  -0      ossp-pkg/cvs/src/main.c
  ____________________________________________________________________________

--PLC7ZZJXQFU8XXAEE2Z3
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/cvs/src/main.c
Content-Disposition: attachment

Index: ossp-pkg/cvs/src/main.c
============================================================
$ cvs diff -u -r1.20 -r1.21 main.c
--- ossp-pkg/cvs/src/main.c	2000/07/11 05:22:14	1.20
+++ ossp-pkg/cvs/src/main.c	2000/07/12 15:50:09	1.21
@@ -1008,11 +1008,13 @@
 
         /* remember real user (especially for getcaller()) */
         pw = getpwuid(uid);
+#ifdef AUTH_SERVER_SUPPORT
         CVS_Username = xstrdup(pw->pw_name);
 #if HAVE_PUTENV
         env = xmalloc(sizeof("LOGNAME=")+strlen(CVS_Username));
         (void)sprintf(env, "LOGNAME=%s", CVS_Username);
         (void)putenv(env);
+#endif
 #endif
 
 #if HAVE_PUTENV
--PLC7ZZJXQFU8XXAEE2Z3--


From ossp-cvs-owner@ossp.org  Wed Jul 12 18:06:52 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e6CG6pe12675; Wed, 12 Jul 2000 18:06:51 +0200 (CEST)
Date: Wed, 12 Jul 2000 18:06:51 +0200 (CEST)
Message-Id: <200007121606.e6CG6pe12675@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="IH4BE9X7KTA73J73P7A8"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvs/src server.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--IH4BE9X7KTA73J73P7A8
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   12-Jul-2000 18:06:50
  Branch: HEAD                             Handle: 2000071217064800

  Modified files:
    ossp-pkg/cvs/src        server.c

  Log:
    Fix auth stuff

  Summary:
    Revision    Changes     Path
    1.27        +1  -1      ossp-pkg/cvs/src/server.c
  ____________________________________________________________________________

--IH4BE9X7KTA73J73P7A8
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/cvs/src/server.c
Content-Disposition: attachment

Index: ossp-pkg/cvs/src/server.c
============================================================
$ cvs diff -u -r1.26 -r1.27 server.c
--- ossp-pkg/cvs/src/server.c	2000/07/11 05:22:15	1.26
+++ ossp-pkg/cvs/src/server.c	2000/07/12 16:06:48	1.27
@@ -5286,7 +5286,7 @@
     {
 	char *env;
 
-#ifdef OSSP_PATCH_LOGNAME
+#if defined(OSSP_PATCH_LOGNAME) && defined(AUTH_SERVER_SUPPORT)
 	env = xmalloc (sizeof "LOGNAME=" + strlen (CVS_Username));
 	(void) sprintf (env, "LOGNAME=%s", CVS_Username);
 #else
--IH4BE9X7KTA73J73P7A8--


From ossp-cvs-owner@ossp.org  Fri Jul 14 13:04:44 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e6EB4hj18690; Fri, 14 Jul 2000 13:04:43 +0200 (CEST)
Date: Fri, 14 Jul 2000 13:04:43 +0200 (CEST)
Message-Id: <200007141104.e6EB4hj18690@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="LJULQEK7M5YK0DE9OWT8"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str ChangeLog configure configure.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--LJULQEK7M5YK0DE9OWT8
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   14-Jul-2000 13:04:43
  Branch: HEAD                             Handle: 2000071412044200

  Modified files:
    ossp-pkg/str            ChangeLog configure configure.in

  Log:
    *** empty log message ***

  Summary:
    Revision    Changes     Path
    1.22        +4  -1      ossp-pkg/str/ChangeLog
    1.9         +96 -0      ossp-pkg/str/configure
    1.8         +2  -0      ossp-pkg/str/configure.in
  ____________________________________________________________________________

--LJULQEK7M5YK0DE9OWT8
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/str/ChangeLog
Content-Disposition: attachment

Index: ossp-pkg/str/ChangeLog
============================================================
$ cvs diff -u -r1.21 -r1.22 ChangeLog
--- ossp-pkg/str/ChangeLog	2000/07/03 09:47:22	1.21
+++ ossp-pkg/str/ChangeLog	2000/07/14 11:04:42	1.22
@@ -9,7 +9,10 @@
 
  ChangeLog
 
- Changes between 0.9.3 and 0.9.4 (04-Feb-2000 to 03-Jul-2000):
+ Changes between 0.9.3 and 0.9.4 (04-Feb-2000 to 13-Jul-2000):
+
+   *) Make sure -lm is used if modf() is not in -lc.
+      [Unknown <edgrif@sanger.ac.uk>, Ralf S. Engelschall]
 
    *) Avoid isupper() check in str_tolower() macro, because it
       breaks for things like str_tolower(*s++). 

--LJULQEK7M5YK0DE9OWT8
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/str/configure
Content-Disposition: attachment

Index: ossp-pkg/str/configure
============================================================
$ cvs diff -u -r1.8 -r1.9 configure
--- ossp-pkg/str/configure	2000/01/01 13:05:17	1.8
+++ ossp-pkg/str/configure	2000/07/14 11:04:42	1.9
@@ -1481,6 +1481,102 @@
 done
  
 
+echo $ac_n "checking for modf""... $ac_c" 1>&6
+echo "configure:1486: checking for modf" >&5
+if eval "test \"`echo '$''{'ac_cv_func_modf'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 1491 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char modf(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char modf();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_modf) || defined (__stub___modf)
+choke me
+#else
+modf();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:1514: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_modf=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_modf=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'modf`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  :
+else
+  echo "$ac_t""no" 1>&6
+echo $ac_n "checking for modf in -lm""... $ac_c" 1>&6
+echo "configure:1532: checking for modf in -lm" >&5
+ac_lib_var=`echo m'_'modf | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lm  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 1540 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char modf();
+
+int main() {
+modf()
+; return 0; }
+EOF
+if { (eval echo configure:1551: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_lib=HAVE_LIB`echo m | sed -e 's/^a-zA-Z0-9_/_/g' \
+    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+  LIBS="-lm $LIBS"
+
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+fi
+
+
 trap '' 1 2 15
 cat > confcache <<\EOF
 # This file is a shell script that caches the results of configure

--LJULQEK7M5YK0DE9OWT8
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/str/configure.in
Content-Disposition: attachment

Index: ossp-pkg/str/configure.in
============================================================
$ cvs diff -u -r1.7 -r1.8 configure.in
--- ossp-pkg/str/configure.in	2000/01/01 13:05:17	1.7
+++ ossp-pkg/str/configure.in	2000/07/14 11:04:42	1.8
@@ -30,6 +30,8 @@
 
 AC_HAVE_FUNCS(memmove memset memcmp memchr) 
 
+AC_CHECK_FUNC(modf, , AC_CHECK_LIB(m, modf))
+
 AC_OUTPUT(dnl
 Makefile dnl
 str-config dnl
--LJULQEK7M5YK0DE9OWT8--


From ossp-cvs-owner@ossp.org  Fri Jul 14 13:09:13 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e6EB9CA19040; Fri, 14 Jul 2000 13:09:12 +0200 (CEST)
Date: Fri, 14 Jul 2000 13:09:12 +0200 (CEST)
Message-Id: <200007141109.e6EB9CA19040@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="AGGVDT0EEXS6UFIPBWLM"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str ChangeLog ltconfig ltmain.sh shtool
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--AGGVDT0EEXS6UFIPBWLM
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   14-Jul-2000 13:09:12
  Branch: HEAD                             Handle: 2000071412091000

  Modified files:
    ossp-pkg/str            ChangeLog ltconfig ltmain.sh shtool

  Log:
    *** empty log message ***

  Summary:
    Revision    Changes     Path
    1.23        +3  -0      ossp-pkg/str/ChangeLog
    1.2         +74 -38     ossp-pkg/str/ltconfig
    1.2         +15 -3      ossp-pkg/str/ltmain.sh
    1.4         +432 -409   ossp-pkg/str/shtool
  ____________________________________________________________________________

--AGGVDT0EEXS6UFIPBWLM
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/str/ChangeLog
Content-Disposition: attachment

Index: ossp-pkg/str/ChangeLog
============================================================
$ cvs diff -u -r1.22 -r1.23 ChangeLog
--- ossp-pkg/str/ChangeLog	2000/07/14 11:04:42	1.22
+++ ossp-pkg/str/ChangeLog	2000/07/14 11:09:10	1.23
@@ -11,6 +11,9 @@
 
  Changes between 0.9.3 and 0.9.4 (04-Feb-2000 to 13-Jul-2000):
 
+   *) Upgrade to GNU libtool 1.3.5 and GNU shtool 1.5.0.
+      [Ralf S. Engelschall]
+
    *) Make sure -lm is used if modf() is not in -lc.
       [Unknown <edgrif@sanger.ac.uk>, Ralf S. Engelschall]
 

--AGGVDT0EEXS6UFIPBWLM
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/str/ltconfig
Content-Disposition: attachment

Index: ossp-pkg/str/ltconfig
============================================================
$ cvs diff -u -r1.1 -r1.2 ltconfig
--- ossp-pkg/str/ltconfig	1999/12/26 14:52:03	1.1
+++ ossp-pkg/str/ltconfig	2000/07/14 11:09:10	1.2
@@ -169,8 +169,8 @@
 # Constants:
 PROGRAM=ltconfig
 PACKAGE=libtool
-VERSION=1.3.4
-TIMESTAMP=" (1.385.2.196 1999/12/07 21:47:57)"
+VERSION=1.3.5
+TIMESTAMP=" (1.385.2.206 2000/05/27 11:12:27)"
 ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
 ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
 rm="rm -f"
@@ -1164,15 +1164,21 @@
     # Extract the symbol export list from an `--export-all' def file,
     # then regenerate the def file from the symbol export list, so that
     # the compiled dll only exports the symbol export list.
+    # Be careful not to strip the DATA tag left by newer dlltools.
     export_symbols_cmds='test -f $objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $objdir/$soname-ltdll.c~
       test -f $objdir/$soname-ltdll.$objext || (cd $objdir && $CC -c $soname-ltdll.c)~
       $DLLTOOL --export-all --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --output-def $objdir/$soname-def  $objdir/$soname-ltdll.$objext $libobjs $convenience~
-      sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]* ; *//" < $objdir/$soname-def > $export_symbols'
+      sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]*//" -e "s/ *;.*$//" < $objdir/$soname-def > $export_symbols'
 
+    # If DATA tags from a recent dlltool are present, honour them!
     archive_expsym_cmds='echo EXPORTS > $objdir/$soname-def~
       _lt_hint=1;
-      for symbol in `cat $export_symbols`; do
-	echo "	\$symbol @ \$_lt_hint ; " >> $objdir/$soname-def;
+      cat $export_symbols | while read symbol; do
+        set dummy \$symbol;
+        case \$# in
+          2) echo "	\$2 @ \$_lt_hint ; " >> $objdir/$soname-def;;
+          *) echo "     \$2 @ \$_lt_hint \$3 ; " >> $objdir/$soname-def;;
+        esac;
 	_lt_hint=`expr 1 + \$_lt_hint`;
       done~
       test -f $objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $objdir/$soname-ltdll.c~
@@ -1433,7 +1439,13 @@
     hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
     hardcode_libdir_separator=:
     ;;
-
+  rhapsody*)
+    archive_cmds='$CC -bundle -undefined suppress -o $lib $libobjs $deplibs $linkopts'
+    hardcode_libdir_flags_spec='-L$libdir'
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    ;;
+                                       
   sco3.2v5*)
     archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
     hardcode_shlibpath_var=no
@@ -1466,7 +1478,13 @@
     ;;
 
   sysv4)
-    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
+    if test "x$host_vendor" = xsequent; then
+      # Use $CC to link under sequent, because it throws in some extra .o 
+      # files that make .init and .fini sections work.
+      archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $linkopts'
+    else
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
+    fi
     runpath_var='LD_RUN_PATH'
     hardcode_shlibpath_var=no
     hardcode_direct=no #Motorola manual says yes, but my tests say they lie 
@@ -1632,11 +1650,11 @@
 main(){nm_test_var='a';nm_test_func();return(0);}
 EOF
 
-  echo "$progname:1635: checking if global_symbol_pipe works" >&5
-  if { (eval echo $progname:1636: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } && test -s conftest.$objext; then
+  echo "$progname:1653: checking if global_symbol_pipe works" >&5
+  if { (eval echo $progname:1654: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } && test -s conftest.$objext; then
     # Now try to grab the symbols.
     nlist=conftest.nm
-    if { echo "$progname:1639: eval \"$NM conftest.$objext | $global_symbol_pipe > $nlist\"" >&5; eval "$NM conftest.$objext | $global_symbol_pipe > $nlist 2>&5"; } && test -s "$nlist"; then
+    if { echo "$progname:1657: eval \"$NM conftest.$objext | $global_symbol_pipe > $nlist\"" >&5; eval "$NM conftest.$objext | $global_symbol_pipe > $nlist 2>&5"; } && test -s "$nlist"; then
 
       # Try sorting and uniquifying the output.
       if sort "$nlist" | uniq > "$nlist"T; then
@@ -1688,7 +1706,7 @@
 	  save_CFLAGS="$CFLAGS"
 	  LIBS="conftstm.$objext"
 	  CFLAGS="$CFLAGS$no_builtin_flag"
-	  if { (eval echo $progname:1691: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+	  if { (eval echo $progname:1709: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
 	    pipe_works=yes
 	  else
 	    echo "$progname: failed program was:" >&5
@@ -1919,6 +1937,14 @@
   soname_spec='${libname}${release}.sl$major'
   # HP-UX runs *really* slowly unless shared libraries are mode 555.
   postinstall_cmds='chmod 555 $lib'
+  case "$host_os" in
+  hpux10.20*)
+    # TODO:  Does this work for hpux-11 too?
+    deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
+    file_magic_cmd=/usr/bin/file
+    file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
   ;;
 
 irix5* | irix6*)
@@ -1966,9 +1992,7 @@
   finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
-  deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
-  file_magic_cmd=/usr/bin/file
-  file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+  deplibs_check_method=pass_all
 
   if test -f /lib/ld.so.1; then
     dynamic_linker='GNU ld.so'
@@ -2029,6 +2053,14 @@
   sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
   ;;
 
+rhapsody*)
+  version_type=sunos
+  library_names_spec='${libname}.so'
+  soname_spec='${libname}.so'
+  shlibpath_var=DYLD_LIBRARY_PATH
+  deplibs_check_method=pass_all
+  ;;
+
 sco3.2v5*)
   version_type=osf
   soname_spec='${libname}${release}.so$major'
@@ -2069,6 +2101,10 @@
   soname_spec='${libname}${release}.so$major'
   shlibpath_var=LD_LIBRARY_PATH
   case "$host_vendor" in
+    sequent)
+      file_magic_cmd='/bin/file'
+      deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+      ;;
     ncr)
       deplibs_check_method='pass_all'
       ;;
@@ -2209,7 +2245,7 @@
 if eval "test \"`echo '$''{'lt_cv_dlopen'+set}'`\" != set"; then
   lt_cv_dlopen=no lt_cv_dlopen_libs=
 echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
-echo "$progname:2212: checking for dlopen in -ldl" >&5
+echo "$progname:2248: checking for dlopen in -ldl" >&5
 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -2217,7 +2253,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-ldl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2220 "ltconfig"
+#line 2256 "ltconfig"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
     builtin and then its argument prototype would still apply.  */
@@ -2230,7 +2266,7 @@
 dlopen()
 ; return 0; }
 EOF
-if { (eval echo $progname:2233: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo $progname:2269: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2249,12 +2285,12 @@
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for dlopen""... $ac_c" 1>&6
-echo "$progname:2252: checking for dlopen" >&5
+echo "$progname:2288: checking for dlopen" >&5
 if eval "test \"`echo '$''{'ac_cv_func_dlopen'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2257 "ltconfig"
+#line 2293 "ltconfig"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char dlopen(); below.  */
 #include <assert.h>
@@ -2279,7 +2315,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo $progname:2282: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo $progname:2318: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_dlopen=yes"
 else
@@ -2296,7 +2332,7 @@
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for dld_link in -ldld""... $ac_c" 1>&6
-echo "$progname:2299: checking for dld_link in -ldld" >&5
+echo "$progname:2335: checking for dld_link in -ldld" >&5
 ac_lib_var=`echo dld'_'dld_link | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -2304,7 +2340,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-ldld  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2307 "ltconfig"
+#line 2343 "ltconfig"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
     builtin and then its argument prototype would still apply.  */
@@ -2317,7 +2353,7 @@
 dld_link()
 ; return 0; }
 EOF
-if { (eval echo $progname:2320: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo $progname:2356: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2336,12 +2372,12 @@
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for shl_load""... $ac_c" 1>&6
-echo "$progname:2339: checking for shl_load" >&5
+echo "$progname:2375: checking for shl_load" >&5
 if eval "test \"`echo '$''{'ac_cv_func_shl_load'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2344 "ltconfig"
+#line 2380 "ltconfig"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char shl_load(); below.  */
 #include <assert.h>
@@ -2366,7 +2402,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo $progname:2369: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo $progname:2405: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_shl_load=yes"
 else
@@ -2384,7 +2420,7 @@
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6
-echo "$progname:2387: checking for shl_load in -ldld" >&5
+echo "$progname:2423: checking for shl_load in -ldld" >&5
 ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -2392,7 +2428,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-ldld  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2395 "ltconfig"
+#line 2431 "ltconfig"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -2406,7 +2442,7 @@
 shl_load()
 ; return 0; }
 EOF
-if { (eval echo $progname:2409: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo $progname:2445: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2449,17 +2485,17 @@
 for ac_hdr in dlfcn.h; do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "$progname:2452: checking for $ac_hdr" >&5
+echo "$progname:2488: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2457 "ltconfig"
+#line 2493 "ltconfig"
 #include <$ac_hdr>
 int fnord = 0;
 EOF
 ac_try="$ac_compile >/dev/null 2>conftest.out"
-{ (eval echo $progname:2462: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo $progname:2498: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -2487,7 +2523,7 @@
     LIBS="$lt_cv_dlopen_libs $LIBS"
 
   echo $ac_n "checking whether a program can dlopen itself""... $ac_c" 1>&6
-echo "$progname:2490: checking whether a program can dlopen itself" >&5
+echo "$progname:2526: checking whether a program can dlopen itself" >&5
 if test "${lt_cv_dlopen_self+set}" = set; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2495,7 +2531,7 @@
     lt_cv_dlopen_self=cross
   else
     cat > conftest.c <<EOF
-#line 2498 "ltconfig"
+#line 2534 "ltconfig"
 
 #if HAVE_DLFCN_H
 #include <dlfcn.h>
@@ -2541,7 +2577,7 @@
 	       if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); } 
 
 EOF
-if { (eval echo $progname:2544: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+if { (eval echo $progname:2580: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
 then
   lt_cv_dlopen_self=yes
 else
@@ -2560,7 +2596,7 @@
   if test "$lt_cv_dlopen_self" = yes; then
     LDFLAGS="$LDFLAGS $link_static_flag"
   echo $ac_n "checking whether a statically linked program can dlopen itself""... $ac_c" 1>&6
-echo "$progname:2563: checking whether a statically linked program can dlopen itself" >&5
+echo "$progname:2599: checking whether a statically linked program can dlopen itself" >&5
 if test "${lt_cv_dlopen_self_static+set}" = set; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2568,7 +2604,7 @@
     lt_cv_dlopen_self_static=cross
   else
     cat > conftest.c <<EOF
-#line 2571 "ltconfig"
+#line 2607 "ltconfig"
 
 #if HAVE_DLFCN_H
 #include <dlfcn.h>
@@ -2614,7 +2650,7 @@
     if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); } 
 
 EOF
-if { (eval echo $progname:2617: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+if { (eval echo $progname:2653: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
 then
   lt_cv_dlopen_self_static=yes
 else

--AGGVDT0EEXS6UFIPBWLM
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/str/ltmain.sh
Content-Disposition: attachment

Index: ossp-pkg/str/ltmain.sh
============================================================
$ cvs diff -u -r1.1 -r1.2 ltmain.sh
--- ossp-pkg/str/ltmain.sh	1999/12/26 14:52:03	1.1
+++ ossp-pkg/str/ltmain.sh	2000/07/14 11:09:10	1.2
@@ -54,8 +54,8 @@
 # Constants.
 PROGRAM=ltmain.sh
 PACKAGE=libtool
-VERSION=1.3.4
-TIMESTAMP=" (1.385.2.196 1999/12/07 21:47:57)"
+VERSION=1.3.5
+TIMESTAMP=" (1.385.2.206 2000/05/27 11:12:27)"
 
 default_mode=
 help="Try \`$progname --help' for more information."
@@ -1795,6 +1795,10 @@
 	*-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*)
 	  # these systems don't actually have a c library (as such)!
 	  ;;
+        *-*-rhapsody*)
+	  # rhapsody is a little odd...
+	  deplibs="$deplibs -framework System"
+	  ;;
 	*)
 	  # Add libc to deplibs on all other systems.
 	  deplibs="$deplibs -lc"
@@ -2927,13 +2931,21 @@
       # Run the actual program with our arguments.
 "
 	case $host in
-	*-*-cygwin* | *-*-mingw | *-*-os2*)
 	  # win32 systems need to use the prog path for dll
 	  # lookup to work
+	*-*-cygwin*)
+	  $echo >> $output "\
+      exec \$progdir/\$program \${1+\"\$@\"}
+"
+	  ;;
+
+	# Backslashes separate directories on plain windows
+	*-*-mingw | *-*-os2*)
 	  $echo >> $output "\
       exec \$progdir\\\\\$program \${1+\"\$@\"}
 "
 	  ;;
+
 	*)
 	  $echo >> $output "\
       # Export the path to the program.

--AGGVDT0EEXS6UFIPBWLM
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/str/shtool
Content-Disposition: attachment

Index: ossp-pkg/str/shtool
============================================================
$ cvs diff -u -r1.3 -r1.4 shtool
--- ossp-pkg/str/shtool	1999/12/26 17:38:54	1.3
+++ ossp-pkg/str/shtool	2000/07/14 11:09:10	1.4
@@ -1,13 +1,13 @@
 #!/bin/sh
 ##
 ##  GNU shtool -- The GNU Portable Shell Tool
-##  Copyright (c) 1994-1999 Ralf S. Engelschall <rse@engelschall.com>
+##  Copyright (c) 1994-2000 Ralf S. Engelschall <rse@engelschall.com>
 ##
 ##  See http://www.gnu.org/software/shtool/ for more information.
 ##  See ftp://ftp.gnu.org/gnu/shtool/ for latest version.
 ##
-##  Version 1.4.7 (24-Dec-1999)
-##  Ingredients: 6/17 available modules
+##  Version:  1.5.0 (01-Jul-2000)
+##  Contents: 6/17 available modules
 ##
 
 ##
@@ -43,16 +43,16 @@
 ##    mkdir      Make one or more directories
 ##    fixperm    Fix file permissions inside a source tree
 ##    tarball    Roll distribution tarballs
-##    version    Generate and maintain a version information file
+##    version    Maintain a version information file
 ##
 ##  Not available commands (because module was not built-in):
 ##    mdate      Pretty-print modification time of a file or dir
-##    table      Pretty print a field-separated list as a table
+##    table      Pretty-print a field-separated list as a table
 ##    prop       Display progress with a running propeller
-##    move       Move files with simultan substitution
+##    move       Move files with simultaneous substitution
 ##    mkln       Make link with calculation of relative paths
-##    mkshadow   Make a shadow tree
-##    guessos    Simple OS/platform guesser
+##    mkshadow   Make a shadow tree through symbolic links
+##    guessos    Simple operating system guesser
 ##    arx        Extended archive command
 ##    slo        Separate linker options by library class
 ##    scpp       Sharing C Pre-Processor
@@ -65,8 +65,8 @@
     exit 1
 fi
 if [ ".$1" = ".-h" -o ".$1" = ".--help" ]; then
-    echo "This is GNU shtool, version 1.4.7 (24-Dec-1999)"
-    echo "Copyright (c) 1994-1999 Ralf S. Engelschall <rse@engelschall.com>"
+    echo "This is GNU shtool, version 1.5.0 (01-Jul-2000)"
+    echo "Copyright (c) 1994-2000 Ralf S. Engelschall <rse@engelschall.com>"
     echo "Report bugs to <bug-shtool@gnu.org>"
     echo ''
     echo "Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]" 
@@ -75,17 +75,18 @@
     echo '  -v, --version   display shtool version information'
     echo '  -h, --help      display shtool usage help page (this one)'
     echo '  -d, --debug     display shell trace information'
+    echo '  -r, --recreate  recreate this shtool script via shtoolize'
     echo ''
     echo 'Available <cmd-name> [<cmd-options>] [<cmd-args>]:'
     echo '  echo     [-n] [-e] [<str> ...]'
     echo '  install  [-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>]'
-    echo '           [-e<ext>] <file> <path>'
+    echo '           [-e<ext>] <file> [<file> ...] <path>'
     echo '  mkdir    [-t] [-f] [-p] [-m<mode>] <dir> [<dir> ...]'
     echo '  fixperm  [-v] [-t] <path> [<path> ...]'
     echo '  tarball  [-t] [-v] [-o <tarball>] [-c <prog>] [-d <dir>] [-u'
     echo '           <user>] [-g <group>] [-e <pattern>] <path> [<path> ...]'
-    echo '  version  [-l<lang>] [-n<name>] [-p<prefix>] [-s<version>] [-i<knob>]'
-    echo '           [-d<type>] <file>'
+    echo '  version  [-l<lang>] [-n<name>] [-p<prefix>] [-s<version>] [-e]'
+    echo '           [-i<knob>] [-d<type>] <file>'
     echo ''
     echo 'Not available <cmd-name> (because module was not built-in):'
     echo '  mdate    [-n] [-z] [-s] [-d] [-f<str>] [-o<spec>] <path>'
@@ -96,17 +97,21 @@
     echo '  mkshadow [-v] [-t] [-a] <src-dir> <dst-dir>'
     echo '  guessos  '
     echo '  arx      [-t] [-C<cmd>] <op> <archive> [<file> ...]'
-    echo '  slo      -- -L<dir> -l<lib> [ -L<dir> -l<lib> ... ]'
-    echo '  scpp     [-v] [-p] [-o<ofile>] [-t<tfile>] [-M<mark>] [-D<dname>]'
-    echo '           [-C<cname>] <file> [<file> ...]'
+    echo '  slo      [-p<str>] -- -L<dir> -l<lib> [-L<dir> -l<lib> ...]'
+    echo '  scpp     [-v] [-p] [-f<filter>] [-o<ofile>] [-t<tfile>] [-M<mark>]'
+    echo '           [-D<dname>] [-C<cname>] <file> [<file> ...]'
     echo '  path     [-s] [-r] [-d] [-b] [-m] [-p<path>] <str> [<str> ...]'
     echo ''
     exit 0
 fi
 if [ ".$1" = ".-v" -o ".$1" = ."--version" ]; then
-    echo "GNU shtool 1.4.7 (24-Dec-1999)"
+    echo "GNU shtool 1.5.0 (01-Jul-2000)"
     exit 0
 fi
+if [ ".$1" = ".-r" -o ".$1" = ."--recreate" ]; then
+    shtoolize -oshtool echo install mkdir fixperm tarball version
+    exit 0
+fi
 if [ ".$1" = ".-d" -o ".$1" = ."--debug" ]; then
     shift
     set -x
@@ -136,13 +141,20 @@
         str_tool="echo"
         str_usage="[-n] [-e] [<str> ...]"
         arg_spec="0+"
-        opt_spec="ne"
+        opt_spec="n.e."
+        opt_n=no
+        opt_e=no
         ;;
     install )
         str_tool="install"
-        str_usage="[-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>] [-e<ext>] <file> <path>"
-        arg_spec="2"
-        opt_spec="vtcCsm:o:g:e:"
+        str_usage="[-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>] [-e<ext>] <file> [<file> ...] <path>"
+        arg_spec="2+"
+        opt_spec="v.t.c.C.s.m:o:g:e:"
+        opt_v=no
+        opt_t=no
+        opt_c=no
+        opt_C=no
+        opt_s=no
         opt_m=""
         opt_o=""
         opt_g=""
@@ -152,22 +164,28 @@
         str_tool="mkdir"
         str_usage="[-t] [-f] [-p] [-m<mode>] <dir> [<dir> ...]"
         arg_spec="1+"
-        opt_spec="tfpm:"
+        opt_spec="t.f.p.m:"
+        opt_t=no
+        opt_f=no
+        opt_p=no
         opt_m=""
         ;;
     fixperm )
         str_tool="fixperm"
         str_usage="[-v] [-t] <path> [<path> ...]"
-        gen_tmpfile=yes
         arg_spec="1+"
-        opt_spec="vt"
+        opt_spec="v.t."
+        opt_v=no
+        opt_t=no
         ;;
     tarball )
         str_tool="tarball"
         str_usage="[-t] [-v] [-o <tarball>] [-c <prog>] [-d <dir>] [-u <user>] [-g <group>] [-e <pattern>] <path> [<path> ...]"
         gen_tmpfile=yes
         arg_spec="1+"
-        opt_spec="tvo:c:d:u:g:e:"
+        opt_spec="t.v.o:c:d:u:g:e:"
+        opt_t=no
+        opt_v=no
         opt_o=""
         opt_c=""
         opt_d=""
@@ -177,17 +195,22 @@
         ;;
     version )
         str_tool="version"
-        str_usage="[-l<lang>] [-n<name>] [-p<prefix>] [-s<version>] [-i<knob>] [-d<type>] <file>"
-        arg_spec="1+"
-        opt_spec="l:n:p:s:i:d:"
+        str_usage="[-l<lang>] [-n<name>] [-p<prefix>] [-s<version>] [-e] [-i<knob>] [-d<type>] <file>"
+        arg_spec="1="
+        opt_spec="l:n:p:s:i:e.d:"
         opt_l="txt"
         opt_n="unknown"
-        opt_p="unknown"
-        opt_s="unknown"
-        opt_i="P"
-        opt_d="NO"
-        gen_tmpfile=yes
+        opt_p=""
+        opt_s=""
+        opt_e="no"
+        opt_i=""
+        opt_d="short"
         ;;
+    -* )
+        echo "$0:Error: unknown option \`$tool'" 2>&1
+        echo "$0:Hint:  run \`$0 -h' for usage" 2>&1
+        exit 1
+        ;;
     * )
         echo "$0:Error: unknown command \`$tool'" 2>&1
         echo "$0:Hint:  run \`$0 -h' for usage" 2>&1
@@ -201,30 +224,24 @@
 
 #   determine name of tool
 if [ ".$tool" != . ]; then
-    #   inside shtool
+    #   used inside shtool script
     toolcmd="$0 $tool"
     toolcmdhelp="shtool $tool"
     msgprefix="shtool:$tool"
 else
-    #   standalone
+    #   used as standalone script
     toolcmd="$0"
-    toolcmdhelp="sh.$tool"
+    toolcmdhelp="sh $0"
     msgprefix="$str_tool"
 fi
 
 #   parse argument specification string
-eval `echo $arg_spec | sed -e 's/^\([0-9]*\)\(.*\)/arg_NUMS="\1"; arg_MODE="\2"/'`
-test ".$arg_MODE" = . && arg_MODE="="
+eval `echo $arg_spec |\
+      sed -e 's/^\([0-9]*\)\([+=]\)/arg_NUMS=\1; arg_MODE=\2/'`
 
 #   parse option specification string
-for opt in `echo "h$opt_spec" | sed -e 's/\([a-zA-Z0-9][:+]*\)/\1 /g'`; do
-    opt_MODE="."
-    eval `echo $opt |\
-          sed -e 's/^\([a-zA-Z0-9]\)/opt_THIS="\1";/' \
-              -e 's/";\([:+]\)/"; opt_MODE="\1";/'`
-    eval "opt_MODE_${opt_THIS}=${opt_MODE}"
-    test "$opt_MODE" = . && eval "opt_${opt_THIS}=no"
-done
+eval `echo h.$opt_spec |\
+      sed -e 's/\([a-zA-Z0-9]\)\([.:+]\)/opt_MODE_\1=\2;/g'`
 
 #   interate over argument line
 opt_PREV=''
@@ -242,7 +259,7 @@
         opt_OPT="$opt_PREV"
         opt_ARG="$1"
         opt_ARG_OK=yes
-        opt_PREV=""
+        opt_PREV=''
     else
         #   split argument into option and argument
         case "$1" in
@@ -252,8 +269,7 @@
                           -e 's/";\(.*\)$/"; opt_ARG="\1"/'`
                 ;;
             -[a-zA-Z0-9])
-                opt_OPT=`awk 'BEGIN { printf("%s", substr(OPT, 2)); }' \
-                         "OPT=$1" </dev/null"`
+                opt_OPT=`echo "x$1" | cut -c3-`
                 opt_ARG=''
                 ;;
             *)
@@ -276,15 +292,15 @@
 
     #   process option
     case $opt_MODE in
-        "." )
+        '.' )
             #   boolean option
             eval "opt_${opt_OPT}=yes"
             ;;
-        ":" )
+        ':' )
             #   option with argument (multiple occurances override)
             eval "opt_${opt_OPT}=\"\$opt_ARG\""
             ;;
-        "+" )
+        '+' )
             #   option with argument (multiple occurances append)
             eval "opt_${opt_OPT}=\"\$opt_${opt_OPT} \$opt_ARG\""
             ;;
@@ -309,14 +325,14 @@
 
 #   complain about incorrect number of arguments
 case $arg_MODE in
-    "=" )
+    '=' )
         if [ $# -ne $arg_NUMS ]; then
             echo "$msgprefix:Error: invalid number of arguments (exactly $arg_NUMS expected)" 1>&2
             echo "$msgprefix:Hint:  run \`$toolcmd -h' or \`man shtool' for details" 1>&2
             exit 1
         fi
         ;;
-    "+" )
+    '+' )
         if [ $# -lt $arg_NUMS ]; then
             echo "$msgprefix:Error: invalid number of arguments (at least $arg_NUMS expected)" 1>&2
             echo "$msgprefix:Hint:  run \`$toolcmd -h' or \`man shtool' for details" 1>&2
@@ -327,13 +343,12 @@
 
 #   establish a temporary file on request
 if [ ".$gen_tmpfile" = .yes ]; then
-    tmpdir="/tmp"
     if [ ".$TMPDIR" != . ]; then
         tmpdir="$TMPDIR"
+    elif [ ".$TEMPDIR" != . ]; then
+        tmpdir="$TEMPDIR"
     else
-        if [ ".$TEMPDIR" != . ]; then
-            tmpdir="$TEMPDIR"
-        fi
+        tmpdir="/tmp"
     fi
     tmpfile="$tmpdir/.shtool.$$"
     rm -f $tmpfile >/dev/null 2>&1
@@ -349,7 +364,7 @@
 echo )
     ##
     ##  echo -- Print string with optional construct expansion
-    ##  Copyright (c) 1998-1999 Ralf S. Engelschall <rse@engelschall.com>
+    ##  Copyright (c) 1998-2000 Ralf S. Engelschall <rse@engelschall.com>
     ##  Originally written for WML as buildinfo
     ##
     
@@ -376,8 +391,8 @@
     term_bold='' 
     term_norm=''
     if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[Bb]'`" != . ]; then
-        #   the most important terminals we directly know
         case $TERM in
+            #   for the most important terminal types we directly know the sequences
             xterm|xterm*|vt220|vt220*)
                 term_bold=`awk 'BEGIN { printf("%c%c%c%c", 27, 91, 49, 109); }' </dev/null 2>/dev/null`
                 term_norm=`awk 'BEGIN { printf("%c%c%c", 27, 91, 109); }' </dev/null 2>/dev/null`
@@ -386,35 +401,37 @@
                 term_bold=`awk 'BEGIN { printf("%c%c%c%c%c%c", 27, 91, 49, 109, 0, 0); }' </dev/null 2>/dev/null`
                 term_norm=`awk 'BEGIN { printf("%c%c%c%c%c", 27, 91, 109, 0, 0); }' </dev/null 2>/dev/null`
                 ;;
-        esac
-        #   then try a possibly existing "tput" or "tcout" utility
-        paths=`echo $PATH | sed -e 's/:/ /g'`
-        for tool in tput tcout; do
-            for dir in $paths; do
-                if [ -r "$dir/$tool" ]; then
-                    for seq in bold md smso; do # smso is last
-                        bold="`$dir/$tool $seq 2>/dev/null`"
-                        if [ ".$bold" != . ]; then
-                            term_bold="$bold"
+            #   for all others, we try to use a possibly existing `tput' or `tcout' utility
+            * )
+                paths=`echo $PATH | sed -e 's/:/ /g'`
+                for tool in tput tcout; do
+                    for dir in $paths; do
+                        if [ -r "$dir/$tool" ]; then
+                            for seq in bold md smso; do # 'smso' is last
+                                bold="`$dir/$tool $seq 2>/dev/null`"
+                                if [ ".$bold" != . ]; then
+                                    term_bold="$bold"
+                                    break
+                                fi
+                            done
+                            if [ ".$term_bold" != . ]; then
+                                for seq in sgr0 me rmso reset; do # 'reset' is last
+                                    norm="`$dir/$tool $seq 2>/dev/null`"
+                                    if [ ".$norm" != . ]; then
+                                        term_norm="$norm"
+                                        break
+                                    fi
+                                done
+                            fi
                             break
                         fi
                     done
-                    if [ ".$term_bold" != . ]; then
-                        for seq in sgr0 me rmso reset; do # 'reset' is last
-                            norm="`$dir/$tool $seq 2>/dev/null`"
-                            if [ ".$norm" != . ]; then
-                                term_norm="$norm"
-                                break
-                            fi
-                        done
+                    if [ ".$term_bold" != . -a ".$term_norm" != . ]; then
+                        break;
                     fi
-                    break
-                fi
-            done
-            if [ ".$term_bold" != . -a ".$term_norm" != . ]; then
-                break;
-            fi
-        done
+                done
+                ;;
+        esac
         if [ ".$term_bold" = . -o ".$term_norm" = . ]; then
             echo "$msgprefix:Warning: unable to determine terminal sequence for bold mode" 1>&2
         fi
@@ -558,7 +575,7 @@
         echo $seo "$text"
     else
         #   the harder part: echo -n is best, because
-        #   awk complains about some \xx sequences.
+        #   awk may complain about some \xx sequences.
         if [ ".$minusn" != . ]; then
             echo $seo $minusn "$text"
         else
@@ -570,131 +587,159 @@
 install )
     ##
     ##  install -- Install a program, script or datafile
-    ##  Copyright (c) 1997-1999 Ralf S. Engelschall <rse@engelschall.com>
+    ##  Copyright (c) 1997-2000 Ralf S. Engelschall <rse@engelschall.com>
     ##  Originally written for shtool
     ##
-    
-    src="$1"
-    dst="$2"
     
-    #  If destination is a directory, append the input filename
-    if [ -d $dst ]; then
-        dst=`echo "$dst" | sed -e 's:/$::'`
-        dstfile=`echo "$src" | sed -e 's;.*/\([^/]*\)$;\1;'`
-        dst="$dst/$dstfile"
-    fi
+    #   determine source(s) and destination 
+    argc=$#
+    srcs=""
+    while [ $# -gt 1 ]; do
+        srcs="$srcs $1"
+        shift
+    done
+    dstpath="$1"
     
-    #  Add a possible extension to src and dst
-    if [ ".$opt_e" != . ]; then
-        src="$src$opt_e"
-        dst="$dst$opt_e"
+    #   type check for destination
+    dstisdir=0
+    if [ -d $dstpath ]; then
+        dstpath=`echo "$dstpath" | sed -e 's:/$::'`
+        dstisdir=1
     fi
     
-    #  Check for correct arguments
-    if [ ".$src" = ".$dst" ]; then
-        echo "$msgprefix:Error: source and destination are the same" 1>&2
+    #   consistency check for destination
+    if [ $argc -gt 2 -a $dstisdir = 0 ]; then
+        echo "$msgprefix:Error: multiple sources require destination to be directory" 1>&2
         exit 1
     fi
-    
-    #  Make a temp file name in the destination directory
-    dstdir=`echo $dst | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;' -e 's;^$;.;'`
-    dsttmp="$dstdir/#INST@$$#"
     
-    #  Verbosity
-    if [ ".$opt_v" = .yes ]; then
-        echo "$src -> $dst" 1>&2
-    fi
+    #   iterate over all source(s)
+    for src in $srcs; do
+        dst=$dstpath
     
-    #  Copy or move the file name to the temp name
-    #  (because we might be not allowed to change the source)
-    if [ ".$opt_C" = .yes ]; then
-        opt_c=yes
-    fi
-    if [ ".$opt_c" = .yes ]; then
-        if [ ".$opt_t" = .yes ]; then
-            echo "cp $src $dsttmp" 1>&2
+        #  If destination is a directory, append the input filename
+        if [ $dstisdir = 1 ]; then
+            dstfile=`echo "$src" | sed -e 's;.*/\([^/]*\)$;\1;'`
+            dst="$dst/$dstfile"
         fi
-        cp $src $dsttmp || exit $?
-    else
-        if [ ".$opt_t" = .yes ]; then
-            echo "mv $src $dsttmp" 1>&2
+    
+        #  Add a possible extension to src and dst
+        if [ ".$opt_e" != . ]; then
+            src="$src$opt_e"
+            dst="$dst$opt_e"
         fi
-        mv $src $dsttmp || exit $?
-    fi
     
-    #  Adjust the target file
-    #  (we do chmod last to preserve setuid bits)
-    if [ ".$opt_s" = .yes ]; then
-        if [ ".$opt_t" = .yes ]; then
-            echo "strip $dsttmp" 1>&2
+        #  Check for correct arguments
+        if [ ".$src" = ".$dst" ]; then
+            echo "$msgprefix:Warning: source and destination are the same - skipped" 1>&2
+            continue
         fi
-        strip $dsttmp || exit $?
-    fi
-    if [ ".$opt_o" != . ]; then
-        if [ ".$opt_t" = .yes ]; then
-            echo "chown $opt_o $dsttmp" 1>&2
+        if [ -d "$src" ]; then
+            echo "$msgprefix:Warning: source \`$src' is a directory - skipped" 1>&2
+            continue
         fi
-        chown $opt_o $dsttmp || exit $?
-    fi
-    if [ ".$opt_g" != . ]; then
-        if [ ".$opt_t" = .yes ]; then
-            echo "chgrp $opt_g $dsttmp" 1>&2
+    
+        #  Make a temp file name in the destination directory
+        dsttmp=`echo $dst |\
+                sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;' -e 's;^$;.;' \
+                    -e "s;\$;/#INST@$$#;"`
+    
+        #  Verbosity
+        if [ ".$opt_v" = .yes ]; then
+            echo "$src -> $dst" 1>&2
+        fi
+    
+        #  Copy or move the file name to the temp name
+        #  (because we might be not allowed to change the source)
+        if [ ".$opt_C" = .yes ]; then
+            opt_c=yes
         fi
-        chgrp $opt_g $dsttmp || exit $?
-    fi
-    if [ ".$opt_m" != . ]; then
-        if [ ".$opt_t" = .yes ]; then
-            echo "chmod $opt_m $dsttmp" 1>&2
+        if [ ".$opt_c" = .yes ]; then
+            if [ ".$opt_t" = .yes ]; then
+                echo "cp $src $dsttmp" 1>&2
+            fi
+            cp $src $dsttmp || exit $?
+        else
+            if [ ".$opt_t" = .yes ]; then
+                echo "mv $src $dsttmp" 1>&2
+            fi
+            mv $src $dsttmp || exit $?
         fi
-        chmod $opt_m $dsttmp || exit $?
-    fi
     
-    #   Determine whether to do a quick install
-    #   (has to be done _after_ the strip was already done)
-    quick=no
-    if [ ".$opt_C" = .yes ]; then
-        if [ -r $dst ]; then
-            if cmp -s $src $dst; then
-                quick=yes
+        #  Adjust the target file
+        #  (we do chmod last to preserve setuid bits)
+        if [ ".$opt_s" = .yes ]; then
+            if [ ".$opt_t" = .yes ]; then
+                echo "strip $dsttmp" 1>&2
             fi
+            strip $dsttmp || exit $?
         fi
-    fi
+        if [ ".$opt_o" != . ]; then
+            if [ ".$opt_t" = .yes ]; then
+                echo "chown $opt_o $dsttmp" 1>&2
+            fi
+            chown $opt_o $dsttmp || exit $?
+        fi
+        if [ ".$opt_g" != . ]; then
+            if [ ".$opt_t" = .yes ]; then
+                echo "chgrp $opt_g $dsttmp" 1>&2
+            fi
+            chgrp $opt_g $dsttmp || exit $?
+        fi
+        if [ ".$opt_m" != . ]; then
+            if [ ".$opt_t" = .yes ]; then
+                echo "chmod $opt_m $dsttmp" 1>&2
+            fi
+            chmod $opt_m $dsttmp || exit $?
+        fi
     
-    #   Finally install the file to the real destination
-    if [ $quick = yes ]; then
-        if [ ".$opt_t" = .yes ]; then
-            echo "rm -f $dsttmp" 1>&2
+        #   Determine whether to do a quick install
+        #   (has to be done _after_ the strip was already done)
+        quick=no
+        if [ ".$opt_C" = .yes ]; then
+            if [ -r $dst ]; then
+                if cmp -s $src $dst; then
+                    quick=yes
+                fi
+            fi
         fi
-        rm -f $dsttmp
-    else
-        if [ ".$opt_t" = .yes ]; then
-            echo "rm -f $dst && mv $dsttmp $dst" 1>&2
+    
+        #   Finally install the file to the real destination
+        if [ $quick = yes ]; then
+            if [ ".$opt_t" = .yes ]; then
+                echo "rm -f $dsttmp" 1>&2
+            fi
+            rm -f $dsttmp
+        else
+            if [ ".$opt_t" = .yes ]; then
+                echo "rm -f $dst && mv $dsttmp $dst" 1>&2
+            fi
+            rm -f $dst && mv $dsttmp $dst
         fi
-        rm -f $dst && mv $dsttmp $dst
-    fi
+    done
     ;;
 
 mkdir )
     ##
     ##  mkdir -- Make one or more directories
-    ##  Copyright (c) 1996-1999 Ralf S. Engelschall <rse@engelschall.com>
+    ##  Copyright (c) 1996-2000 Ralf S. Engelschall <rse@engelschall.com>
     ##  Originally written for public domain by Noah Friedman <friedman@prep.ai.mit.edu>
     ##  Cleaned up and enhanced for shtool
     ##
     
     errstatus=0
     for p in ${1+"$@"}; do
-        #   when the directory already exists...
+        #   if the directory already exists...
         if [ -d "$p" ]; then
-            if [ ".$opt_f" = .no ]; then
-                echo "$msgprefix:Error: file exists: $p" 1>&2
+            if [ ".$opt_f" = .no ] && [ ".$opt_p" = .no ]; then
+                echo "$msgprefix:Error: directory already exists: $p" 1>&2
                 errstatus=1
                 break
             else
                 continue
             fi
         fi
-        #   when the directory has to be created
+        #   if the directory has to be created...
         if [ ".$opt_p" = .no ]; then
             if [ ".$opt_t" = .yes ]; then
                 echo "mkdir $p" 1>&2
@@ -708,7 +753,7 @@
                            -e 's/\// /g' \
                            -e 's/^%/\//'`
             shift
-            pathcomp=
+            pathcomp=''
             for d in ${1+"$@"}; do
                 pathcomp="$pathcomp$d"
                 case "$pathcomp" in
@@ -736,25 +781,18 @@
 fixperm )
     ##
     ##  fixperm -- Fix file permissions inside a source tree
-    ##  Copyright (c) 1996-1999 Ralf S. Engelschall <rse@engelschall.com>
+    ##  Copyright (c) 1996-2000 Ralf S. Engelschall <rse@engelschall.com>
     ##  Originally written for ePerl
     ##
     
     paths="$*"
     
     #   check whether the test command supports the -x option
-    cat >$tmpfile <<EOT
-if [ -x / ] || [ -x /bin ] || [ -x /bin/ls ]; then
-    exit 0
-fi
-exit 1
-EOT
-    if sh $tmpfile 2>/dev/null; then
+    if [ -x /bin/sh ] 2>/dev/null; then
         minusx="-x"
     else
         minusx="-r"
     fi
-    rm -f $tmpfile
     
     #   iterate over paths
     for p in $paths; do
@@ -799,25 +837,18 @@
 tarball )
     ##
     ##  tarball -- Roll distribution tarballs
-    ##  Copyright (c) 1999 Ralf S. Engelschall <rse@engelschall.com>
+    ##  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
     ##  Originally written for shtool
     ##
     
     srcs="$*"
     
     #   check whether the test command supports the -x option
-    cat >$tmpfile <<EOT
-if [ -x / ] || [ -x /bin ] || [ -x /bin/ls ]; then
-    exit 0
-fi
-exit 1
-EOT
-    if sh $tmpfile 2>/dev/null; then
+    if [ -x /bin/sh ] 2>/dev/null; then
         minusx="-x"
     else
         minusx="-r"
     fi
-    rm -f $tmpfile
     
     #   find the tools
     paths="`echo $PATH |\
@@ -935,14 +966,14 @@
                 echo "chown -R $opt_u $tmpdir/$tarname >/dev/null 2>&1" 2>&1
             fi
             chown -R $opt_u $tmpdir/$tarname >/dev/null 2>&1 ||\
-            echo "$msgprefix:Warning: cannot set user name \`$opt_u' (need root priviledges)"
+            echo "$msgprefix:Warning: cannot set user name \`$opt_u' (would require root priviledges)"
         fi
         if [ ".$opt_g" != . ]; then
             if [ ".$opt_t" = .yes ]; then
                 echo "chgrp -R $opt_g $tmpdir/$tarname >/dev/null 2>&1" 2>&1
             fi
             chgrp -R $opt_g $tmpdir/$tarname >/dev/null 2>&1 ||\
-            echo "$msgprefix:Warning: cannot set group name \`$opt_g' (need root priviledges)"
+            echo "$msgprefix:Warning: cannot set group name \`$opt_g' (would require root priviledges)"
         fi
         if [ ".$opt_t" = .yes ]; then
             echo "(cd $tmpdir && $prg_find $tarname -type f -depth -print | sort | xargs $prg_tar cf -) | cat $compress >$tmpfile.out" 1>&2
@@ -968,141 +999,97 @@
 
 version )
     ##
-    ##  version -- Generate and maintain a version information file
-    ##  Copyright (c) 1994-1999 Ralf S. Engelschall <rse@engelschall.com>
-    ##  Originally written for ePerl
+    ##  version -- Maintain a version information file
+    ##  Copyright (c) 1994-2000 Ralf S. Engelschall <rse@engelschall.com>
+    ##  Originally written for ePerl, rewritten from scratch for shtool
     ##
     
-    LANGUAGE="$opt_l"
-    NAME="$opt_n"
-    PREFIX="$opt_p"
-    FULLVERSION="$opt_s"
-    INCREASE="$opt_i"
-    REPORT="$opt_d"
-    FILE="$1"
-    
-    #   determine language
-    if [ ".$LANGUAGE" = .unknown ]; then
-        case $FILE in
-            *.txt )       LANGUAGE=txt  ;;
-            *.c )         LANGUAGE=c    ;;
-            *.pl | *.pm ) LANGUAGE=perl ;;
-            * )           echo "$tool:Error: unknown language type" 1>&2; exit 1 ;;
-        esac
-    fi
+    file="$1"
     
-    #   determine prefix from name and vice versa
-    if [ ".$PREFIX" = . -o ".$PREFIX" = .unknown ]; then
-        if [ ".$NAME" != . -a ".$NAME" != .unknown ]; then
-            PREFIX="$NAME"
-        fi
-    fi
-    if [ ".$NAME" = . -o ".$NAME" = .unknown ]; then
-        if [ ".$PREFIX" != . -a ".$PREFIX" != .unknown ]; then
-            NAME="$PREFIX"
+    #   determine prefix and name
+    name="$opt_n"
+    prefix="$opt_p"
+    
+    #   determine current version
+    triple="$opt_s"
+    if [ ".$triple" != . ]; then
+        #   use given triple
+        if [ ".`echo $triple | grep '[0-9]*.[0-9]*[sabp.][0-9]*'`" = . ]; then
+            echo "$msgprefix:Error: invalid argument to option \`-s': \`$opt_s'" 1>&2
+            exit 1
         fi
+        eval `echo $triple |\
+              sed -e 's%\([0-9]*\)\.\([0-9]*\)\([sabp.]\)\([0-9]*\).*%\
+              ver="\1";rev="\2";typ="\3";lev="\4"%'`
+        tim=calc
+    elif [ -r $file ]; then
+        #   determine triple from given file
+        eval `grep 'Version [0-9]*.[0-9]*[sabp.][0-9]* ([0-9]*-[a-zA-Z]*-[0-9]*)' $file |\
+              head -1 | sed -e 's%.*Version \([0-9]*\)\.\([0-9]*\)\([sabp.]\)\([0-9]*\) (\([0-9]*-[a-zA-Z]*-[0-9]*\)).*%\
+              ver="\1";rev="\2";typ="\3";lev="\4";tim="\5"%'`
+    else
+        #   intialise to first version
+        ver=0
+        rev=1
+        typ=.
+        lev=0
+        tim=calc
     fi
     
-    #   determine version
-    date=unknown
-    version=0
-    revision=0
-    bplevel=0
-    if [ ".$FULLVERSION" = .unknown ]; then
-        if [ -r "$FILE" ]; then
-            #   grep out current information
-            id=`grep 'Version [0-9]*.[0-9]*[.abps][0-9]* ([0-9]*-[a-zA-Z]*-[0-9]*)' $FILE | \
-                head -1 | \
-                sed -e 's%.*Version \([0-9]*\)\.\([0-9]*\)\([.abps]\)\([0-9]*\) (\([0-9]*-[a-zA-Z]*-[0-9]*\)).*%\1:\2:\3:\4:\5%'`
-            version=`echo $id | awk -F: '{ print $1 }'`
-            revision=`echo $id | awk -F: '{ print $2 }'`
-            bptype=`echo $id | awk -F: '{ print $3 }'`
-            bplevel=`echo $id | awk -F: '{ print $4 }'`
-            date=`echo $id | awk -F: '{ print $5 }'`
-            if [ .$REPORT = .NO ]; then
-                case $INCREASE in
-                    b ) bplevel=`expr $bplevel + 1`
-                        bptype=b
-                        ;;
-                    a ) bplevel=`expr $bplevel + 1`
-                        bptype=a
-                        ;;
-                    s ) bplevel=`expr $bplevel + 1`
-                        bptype=s
-                        ;;
-                    P ) bplevel=`expr $bplevel + 1`
-                        bptype=.
-                        ;;
-                    p ) bplevel=`expr $bplevel + 1`
-                        bptype=p
-                        ;;
-                    r ) revision=`expr $revision + 1`
-                        bptype=.
-                        bplevel=0
-                        ;;
-                    v ) version=`expr $version + 1`
-                        revision=0
-                        bptype=.
-                        bplevel=0
-                        ;;
-                esac
-                date=calc
-            fi
-            FULLVERSION="$version.$revision$bptype$bplevel"
-        else
-            #   intialise to first version
-            version=0
-            revision=5
-            bptype=b
-            bplevel=0
-            date=calc
-        fi
-    else
-        #   take given version
-        V=`echo $FULLVERSION | sed -e 's%\([0-9]*\)\.\([0-9]*\)\([.abps]\)\([0-9]*\).*%\1:\2:\3:\4%'`
-        version=`echo $V | awk -F: '{ print $1 }'`
-        revision=`echo $V | awk -F: '{ print $2 }'`
-        bptype=`echo $V | awk -F: '{ print $3 }'`
-        bplevel=`echo $V | awk -F: '{ print $4 }'`
-        date=calc
+    #   determine new version in batch
+    if [ ".$opt_i" != . ]; then
+        case $opt_i in
+            v ) ver=`expr $ver + 1`
+                rev=0
+                lev=0
+                ;;
+            r ) rev=`expr $rev + 1`
+                lev=0
+                ;;
+            l ) lev=`expr $lev + 1`
+                ;;
+            * ) echo "$msgprefix:Error: invalid argument to option \`-i': \`$opt_i'" 1>&2
+                exit 1
+                ;;
+        esac
+        tim=calc
     fi
     
-    #   determine hex value of version
-    case $FULLVERSION in
-        *.*a* )
-            HEX=`echo "$FULLVERSION" | sed -e 's/a.*//' | awk -F. '{ printf("%d%02d", $1, $2); }' &&
-                 echo "$FULLVERSION" | sed -e 's/.*a//' | awk '{ printf("0%02d", $1); }'`
-            ;;
-        *.*b* )
-            HEX=`echo "$FULLVERSION" | sed -e 's/b.*//' | awk -F. '{ printf("%d%02d", $1, $2); }' &&
-                 echo "$FULLVERSION" | sed -e 's/.*b//' | awk '{ printf("1%02d", $1); }'`
-            ;;
-        *.*.* )
-            HEX=`echo "$FULLVERSION" | awk -F. '{ printf("%d%02d2%02d", $1, $2, $3); }'`
-            ;;
-    esac
+    #   determine new version interactively
+    if [ ".$opt_e" = .yes ]; then
+        echo "old version: ${ver}.${rev}${typ}${lev}"
+        while [ 1 ]; do
+            echo dummy | awk '{ printf("new version: "); }'
+            read triple
+            case $triple in
+                [0-9]*.[0-9]*[sabp.][0-9]* ) 
+                    ;;
+                * ) echo "$msgprefix:Error: invalid version string entered: \`$triple'" 1>&2
+                    continue
+                    ;;
+            esac
+            break
+        done
+        eval `echo $triple |\
+              sed -e 's%^\([0-9]*\)\.\([0-9]*\)\([sabp.]\)\([0-9]*\)$%\
+              ver="\1";rev="\2";typ="\3";lev="\4"%'`
+        tim=calc
+    fi
     
-    #   determine libtool version
-    case $FULLVERSION in
-        *.*a* )
-            LTV=`echo "$FULLVERSION" | sed -e 's/a.*//' | awk -F. '{ printf("%d:0", $1*10+$2); }'`
-            ;;
-        *.*b* )
-            LTV=`echo "$FULLVERSION" | sed -e 's/b.*//' | awk -F. '{ printf("%d:0", $1*10+$2); }'`
-            ;;
-        *.*.* )
-            LTV=`echo "$FULLVERSION" | awk -F. '{ printf("%d:%d", $1*10+$2, $3); }'`
-            ;;
+    #   determine hexadecimal and libtool value of version
+    case $typ in
+        a     ) typnum=0;  levnum=$lev ;;
+        b     ) typnum=1;  levnum=$lev ;;
+        p | . ) typnum=2;  levnum=$lev ;;
+        s     ) typnum=15; levnum=255  ;; # snapshots are special
     esac
+    hex=`echo "$ver:$rev:$typnum:$levnum" |\
+         awk -F: '{ printf("0x%X%02X%1X%02X", $1, $2, $3, $4); }'`
+    ltv=`echo "$ver:$rev:$typnum:$levnum" |\
+         awk -F: '{ printf("%d:%d", $1*10 + $2, $3*10 + $4); }'`
     
-    #   determine string out of filename
-    #   (don't try to optimize this in any way - portability!)
-    FILESTR=`echo "$FILE" |\
-             tr 'abcdefghijklmnopqrstuvwxyz./%+' \
-                'ABCDEFGHIJKLMNOPQRSTUVWXYZ____' | sed -e 's/-/_/g'`
-    
     #   determine date
-    if [ ".$date" = .calc ]; then
+    if [ ".$tim" = .calc ]; then
         day=`date '+%d'`
         month=`date '+%m'`
         year=`date '+%Y' 2>/dev/null`
@@ -1127,111 +1114,147 @@
               11) month='Nov' ;;
               12) month='Dec' ;;
         esac
-        date="${day}-${month}-${year}"
+        tim="${day}-${month}-${year}"
     fi
     
-    if [ .$REPORT != .NO ]; then
-        case $REPORT in
-            long )
-                echo "$version.$revision$bptype$bplevel ($date)"
-                ;;
+    #   perform result actions
+    mode=show
+    if [ ".$opt_i" != . ]; then
+        mode=edit
+    elif [ ".$opt_e" = .yes ]; then
+        mode=edit
+    elif [ ".$opt_s" != . ]; then
+        mode=edit
+    fi
+    if [ ".$mode" = .show ]; then
+        #   just display the current version
+        case $opt_d in
             short )
-                echo "$version.$revision$bptype$bplevel"
+                echo "${ver}.${rev}${typ}${lev}"
+                ;;
+            long )
+                echo "${ver}.${rev}${typ}${lev} ($tim)"
                 ;;
             libtool )
-                echo "$LTV"
+                echo "${ltv}"
                 ;;
             hex )
-                echo "0x$HEX"
+                echo "${hex}"
+                ;;
+            * ) echo "$msgprefix:Error: invalid argument to option \`-d': \`$opt_d'" 1>&2
+                exit 1
                 ;;
         esac
-        rm -f $tmpfile >/dev/null 2>&1
-        exit 0
-    fi
-    
-    #   create the version file according the the selected language
-    echo "new version: $version.$revision$bptype$bplevel ($date)"
-    case $LANGUAGE in
-        txt )
-            cat >$tmpfile <<'EOT'
+    else 
+        #   update the version file
     
-  This is @NAME@, Version @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ (@DAY@-@MONTH@-@YEAR@)
-EOT
-            ;;
-        c )
-            cat >$tmpfile <<'EOT'
-/*
-**  @FILE@ -- Version Information
-**  [automatically generated and maintained by shtool]
-*/
-
-#ifdef _AS_HEADER
-
-#ifndef _@FILESTR@
-#define _@FILESTR@
-#define @PREFIX@_VERSION 0x@HEX@
-extern const int  @PREFIX@_Version;
-extern const char @PREFIX@_VersionStr[];
-extern const char @PREFIX@_Hello[];
-extern const char @PREFIX@_GNUVersion[];
-extern const char @PREFIX@_WhatID[];
-extern const char @PREFIX@_RCSIdentID[];
-extern const char @PREFIX@_WebID[];
-extern const char @PREFIX@_PlainID[];
-#endif /* _@FILESTR@ */
-
-#else
-
-const int  @PREFIX@_Version      = 0x@HEX@;
-const char @PREFIX@_VersionStr[] = "@VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ (@DAY@-@MONTH@-@YEAR@)";
-const char @PREFIX@_Hello[]      = "This is @NAME@, Version @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ (@DAY@-@MONTH@-@YEAR@)";
-const char @PREFIX@_GNUVersion[] = "@NAME@ Version @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@";
-const char @PREFIX@_WhatID[]     = "@(#)@NAME@ Version @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ (@DAY@-@MONTH@-@YEAR@)";
-const char @PREFIX@_RCSIdentID[] = "$Id: @NAME@ @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ @DAY@-@MONTH@-@YEAR@ $";
-const char @PREFIX@_WebID[]      = "@NAME@/@VERSION@.@REVISION@@BPTYPE@@BPLEVEL@";
-const char @PREFIX@_PlainID[]    = "@VERSION@.@REVISION@@BPTYPE@@BPLEVEL@";
-
-#endif
-EOT
-            ;;
-        perl )
-            cat >$tmpfile <<'EOT'
-##
-##  @FILE@ -- Version Information
-##  [automatically generated and maintained by shtool]
-##
-
-$@PREFIX@_Version    = 0x@HEX@;
-$@PREFIX@_VersionStr = "@VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ (@DAY@-@MONTH@-@YEAR@)";
-$@PREFIX@_Hello      = "This is @NAME@, Version @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ (@DAY@-@MONTH@-@YEAR@)";
-$@PREFIX@_GNUVersion = "@NAME@ Version @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@";
-$@PREFIX@_WhatID     = "@(#)@NAME@ Version @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ (@DAY@-@MONTH@-@YEAR@)";
-$@PREFIX@_RCSIdentID = "\$Id: @NAME@ @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ @DAY@-@MONTH@-@YEAR@ $/";
-$@PREFIX@_WebID      = "@NAME@/@VERSION@.@REVISION@@BPTYPE@@BPLEVEL@";
-$@PREFIX@_PlainID    = "@VERSION@.@REVISION@@BPTYPE@@BPLEVEL@";
-
-1;
-EOT
-            ;;
-    esac
-    
-    #   now create the version file
-    rm -f $FILE >/dev/null 2>&1
-    sed \
-        -e "s|@FILE@|$FILE|g" \
-        -e "s|@FILESTR@|$FILESTR|g" \
-        -e "s|@PREFIX@|$PREFIX|g" \
-        -e "s|@NAME@|$NAME|g" \
-        -e "s|@HEX@|$HEX|g" \
-        -e "s|@VERSION@|$version|g" \
-        -e "s|@REVISION@|$revision|g" \
-        -e "s|@BPTYPE@|$bptype|g" \
-        -e "s|@BPLEVEL@|$bplevel|g" \
-        -e "s|@YEAR@|$year|g" \
-        -e "s|@MONTH@|$month|g" \
-        -e "s|@DAY@|$day|g" <$tmpfile >$FILE
-    rm -f $tmpfile >/dev/null 2>&1
-    exit 0
+        #   pre-generate various strings
+        triple="${ver}.${rev}${typ}${lev}"
+        vHex="$hex"
+        vShort="${triple}"
+        vLong="${triple} (${tim})"
+        vTeX="This is ${name}, Version ${triple} (${tim})"
+        vGNU="${name} ${triple} (${tim})"
+        vWeb="${name}/${triple}"
+        vSCCS="@(#)${name} ${triple} (${tim})"
+        vRCS="\$Id: ${name} ${triple} (${tim}) \$"
+    
+        #   determine string out of filename
+        #   (do NOT try to optimize this in any way because of portability)
+        filestr=`echo $file |\
+                 tr 'abcdefghijklmnopqrstuvwxyz./%+' \
+                    'ABCDEFGHIJKLMNOPQRSTUVWXYZ____' | sed -e 's/-/_/g'`
+    
+        #   generate uppercase prefix
+        prefixupper=`echo $prefix |\
+                     tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+        
+        #   create the version file according the the selected language
+        echo "new version: ${vLong}"
+    
+        cp /dev/null $file
+        case $opt_l in
+            txt )
+                echo >>$file ""
+                echo >>$file "  ${file} -- Version Information for ${name} (syntax: Text)"
+                echo >>$file "  [automatically generated and maintained by GNU shtool]"
+                echo >>$file ""
+                echo >>$file "  $vTeX"
+                echo >>$file ""
+                ;;
+            c )
+                echo >>$file "/*"
+                echo >>$file "**  ${file} -- Version Information for ${name} (syntax: C/C++)"
+                echo >>$file "**  [automatically generated and maintained by GNU shtool]"
+                echo >>$file "*/"
+                echo >>$file ""
+                echo >>$file "#ifdef _${filestr}_AS_HEADER_"
+                echo >>$file ""
+                echo >>$file "#ifndef _${filestr}_"
+                echo >>$file "#define _${filestr}_"
+                echo >>$file ""
+                echo >>$file "#define ${prefixupper}VERSION ${vHex}"
+                echo >>$file ""
+                echo >>$file "typedef struct {"
+                echo >>$file "    const int   v_hex;"
+                echo >>$file "    const char *v_short;"
+                echo >>$file "    const char *v_long;"
+                echo >>$file "    const char *v_tex;"
+                echo >>$file "    const char *v_gnu;"
+                echo >>$file "    const char *v_web;"
+                echo >>$file "    const char *v_sccs;"
+                echo >>$file "    const char *v_rcs;"
+                echo >>$file "} ${prefix}version_t;"
+                echo >>$file ""
+                echo >>$file "extern ${prefix}version_t ${prefix}version;"
+                echo >>$file ""
+                echo >>$file "#endif /* _${filestr}_ */"
+                echo >>$file ""
+                echo >>$file "#else /* _${filestr}_AS_HEADER_ */"
+                echo >>$file ""
+                echo >>$file "#define _${filestr}_AS_HEADER_"
+                echo >>$file "#include \"${file}\""
+                echo >>$file "#undef  _${filestr}_AS_HEADER_"
+                echo >>$file ""
+                echo >>$file "${prefix}version_t ${prefix}version = {"
+                echo >>$file "    ${vHex},"
+                echo >>$file "    \"${vShort}\","
+                echo >>$file "    \"${vLong}\","
+                echo >>$file "    \"${vTeX}\","
+                echo >>$file "    \"${vGNU}\","
+                echo >>$file "    \"${vWeb}\","
+                echo >>$file "    \"${vSCCS}\","
+                echo >>$file "    \"${vRCS}\""
+                echo >>$file "};"
+                echo >>$file ""
+                echo >>$file "#endif /* _${filestr}_AS_HEADER_ */"
+                echo >>$file ""
+                ;;
+            perl )
+                echo >>$file "##"
+                echo >>$file "##  ${file} -- Version Information for ${name} (syntax: Perl)"
+                echo >>$file "##  [automatically generated and maintained by GNU shtool]"
+                echo >>$file "##"
+                echo >>$file ""
+                echo >>$file "my \$${prefix}version = {"
+                echo >>$file "    'v_hex'   => ${vHex},"
+                echo >>$file "    'v_short' => \"${vShort}\","
+                echo >>$file "    'v_long'  => \"${vLong}\","
+                echo >>$file "    'v_tex'   => \"${vTeX}\","
+                echo >>$file "    'v_gnu'   => \"${vGNU}\","
+                echo >>$file "    'v_web'   => \"${vWeb}\","
+                echo >>$file "    'v_sccs'  => \"${vSCCS}\","
+                echo >>$file "    'v_rcs'   => \"\\${vRCS}/\""
+                echo >>$file "};"
+                echo >>$file ""
+                echo >>$file "1;"
+                echo >>$file ""
+                ;;
+            * ) echo "$msgprefix:Error: invalid argument to option \`-l': \`$opt_l'" 1>&2
+                exit 1
+                ;;
+        esac
+    fi
     ;;
 
 esac
--AGGVDT0EEXS6UFIPBWLM--


From ossp-cvs-owner@ossp.org  Fri Jul 14 13:11:24 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e6EBBNA19226; Fri, 14 Jul 2000 13:11:23 +0200 (CEST)
Date: Fri, 14 Jul 2000 13:11:23 +0200 (CEST)
Message-Id: <200007141111.e6EBBNA19226@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="P0KV81U0ELP4NQV7B4YF"
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str ChangeLog
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

This is a multi-part message in MIME format.
--P0KV81U0ELP4NQV7B4YF
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: commit summary
Content-Disposition: inline

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   14-Jul-2000 13:11:23
  Branch: HEAD                             Handle: 2000071412112300

  Modified files:
    ossp-pkg/str            ChangeLog

  Log:
    *** empty log message ***

  Summary:
    Revision    Changes     Path
    1.24        +1  -1      ossp-pkg/str/ChangeLog
  ____________________________________________________________________________

--P0KV81U0ELP4NQV7B4YF
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Description: changes to ossp-pkg/str/ChangeLog
Content-Disposition: attachment

Index: ossp-pkg/str/ChangeLog
============================================================
$ cvs diff -u -r1.23 -r1.24 ChangeLog
--- ossp-pkg/str/ChangeLog	2000/07/14 11:09:10	1.23
+++ ossp-pkg/str/ChangeLog	2000/07/14 11:11:23	1.24
@@ -9,7 +9,7 @@
 
  ChangeLog
 
- Changes between 0.9.3 and 0.9.4 (04-Feb-2000 to 13-Jul-2000):
+ Changes between 0.9.3 and 0.9.4 (04-Feb-2000 to 14-Jul-2000):
 
    *) Upgrade to GNU libtool 1.3.5 and GNU shtool 1.5.0.
       [Ralf S. Engelschall]
--P0KV81U0ELP4NQV7B4YF--


From ossp-cvs-owner@ossp.org  Fri Jul 14 16:45:50 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e6EEjnR34793; Fri, 14 Jul 2000 16:45:49 +0200 (CEST)
Date: Fri, 14 Jul 2000 16:45:49 +0200 (CEST)
Message-Id: <200007141445.e6EEjnR34793@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvs .cvsignore COPYING COPYING.LIB ChangeLog.zoo ...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   14-Jul-2000 16:45:49
  Branch: vendor                           Handle: 1970010101000000

  Modified files:           (Branch: vendor)
    ossp-pkg/cvs/doc        cvs.texinfo
    ossp-pkg/cvs/src        sanity.sh
  Touched files:            (Branch: vendor)
    ossp-pkg/cvs            .cvsignore COPYING COPYING.LIB ChangeLog.zoo
                            INSTALL Makefile.in NEWS README acconfig.h
                            config.h.in configure configure.in
    ossp-pkg/cvs/diff       .cvsignore Makefile.in analyze.c cmpbuf.c cmpbuf.h
                            context.c diagmeet.note diff.c diff.h diff3.c
                            diffrun.h dir.c ed.c ifdef.c io.c normal.c side.c
                            system.h util.c version.c
    ossp-pkg/cvs/doc        .cvsignore FAQ HACKING Makefile.in RCSFILES TESTS
                            TODO cvs-paper.ms cvsclient.texi
    ossp-pkg/cvs/lib        .cvsignore Makefile.in argmatch.c dup2.c fncase.c
                            fnmatch.c fnmatch.h ftruncate.c getdate.c
                            getdate.y getline.c getline.h getopt.c getopt.h
                            getopt1.c hostname.c md5.c md5.h memmove.c mkdir.c
                            regex.c regex.h rename.c savecwd.c savecwd.h
                            sighandle.c strerror.c stripslash.c strstr.c
                            strtoul.c system.h valloc.c wait.h waitpid.c
                            xgetwd.c yesno.c
    ossp-pkg/cvs/man        .cvsignore Makefile.in cvs.1 cvs.5
    ossp-pkg/cvs/src        .cvsignore Makefile.in add.c admin.c buffer.c
                            buffer.h checkin.c checkout.c classify.c client.c
                            client.h commit.c create_adm.c cvs.h cvsrc.c
                            diff.c edit.c edit.h entries.c error.c error.h
                            expand_path.c fileattr.c fileattr.h filesubr.c
                            find_names.c hardlink.c hardlink.h hash.c hash.h
                            history.c ignore.c import.c lock.c log.c login.c
                            logmsg.c main.c mkmodules.c modules.c myndbm.c
                            myndbm.h no_diff.c options.h.in parseinfo.c
                            patch.c rcs.c rcs.h rcscmds.c recurse.c release.c
                            remove.c repos.c root.c rtag.c run.c scramble.c
                            server.c server.h status.c subr.c tag.c update.c
                            update.h vers_ts.c version.c watch.c watch.h
                            wrapper.c zlib.c
    ossp-pkg/cvs/zlib       .cvsignore Makefile.in README adler32.c
                            algorithm.doc compress.c crc32.c deflate.c
                            deflate.h gzio.c infblock.c infblock.h infcodes.c
                            infcodes.h inffast.c inffast.h inflate.c
                            inftrees.c inftrees.h infutil.c infutil.h trees.c
                            uncompr.c zconf.h zlib.h zutil.c zutil.h

  Log:
    Import of vendor CVS version, snapshot 20000714
    
    [Release Tags: CVS_20000714]

  Summary:
    Revision    Changes     Path
    1.1.1.8     +0  -0      ossp-pkg/cvs/doc/cvs.texinfo
    1.1.1.11    +0  -0      ossp-pkg/cvs/src/sanity.sh
  ____________________________________________________________________________

  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/doc/cvs.texinfo?cvsroot=ossp&r1=1.1.1.7&r2=1.1.1.8
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/sanity.sh?cvsroot=ossp&r1=1.1.1.10&r2=1.1.1.11

From ossp-cvs-owner@ossp.org  Fri Jul 14 17:14:22 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e6EFELb36795; Fri, 14 Jul 2000 17:14:21 +0200 (CEST)
Date: Fri, 14 Jul 2000 17:14:21 +0200 (CEST)
Message-Id: <200007141514.e6EFELb36795@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str ChangeLog
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   14-Jul-2000 17:14:21
  Branch: HEAD                             Handle: 2000071416142100

  Modified files:
    ossp-pkg/str            ChangeLog

  Log:
    Fix name now that it's known.

  Summary:
    Revision    Changes     Path
    1.25        +1  -1      ossp-pkg/str/ChangeLog
  ____________________________________________________________________________

  Index: ossp-pkg/str/ChangeLog
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 ChangeLog
  --- ossp-pkg/str/ChangeLog	2000/07/14 11:11:23	1.24
  +++ ossp-pkg/str/ChangeLog	2000/07/14 15:14:21	1.25
  @@ -15,7 +15,7 @@
         [Ralf S. Engelschall]
   
      *) Make sure -lm is used if modf() is not in -lc.
  -      [Unknown <edgrif@sanger.ac.uk>, Ralf S. Engelschall]
  +      [Ed Griffiths <edgrif@sanger.ac.uk>, Ralf S. Engelschall]
   
      *) Avoid isupper() check in str_tolower() macro, because it
         breaks for things like str_tolower(*s++). 

From ossp-cvs-owner@ossp.org  Fri Jul 14 17:19:07 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e6EFJ6337160; Fri, 14 Jul 2000 17:19:06 +0200 (CEST)
Date: Fri, 14 Jul 2000 17:19:06 +0200 (CEST)
Message-Id: <200007141519.e6EFJ6337160@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvs/src sanity.sh
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   14-Jul-2000 17:19:06
  Branch: HEAD                             Handle: 2000071416190400

  Modified files:
    ossp-pkg/cvs/src        sanity.sh

  Log:
    Merge in conflicts

  Summary:
    Revision    Changes     Path
    1.8         +221 -1     ossp-pkg/cvs/src/sanity.sh
  ____________________________________________________________________________

  Index: ossp-pkg/cvs/src/sanity.sh
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 sanity.sh
  --- ossp-pkg/cvs/src/sanity.sh	2000/07/11 05:22:14	1.7
  +++ ossp-pkg/cvs/src/sanity.sh	2000/07/14 15:19:04	1.8
  @@ -639,7 +639,7 @@
   	tests="${tests} new newb conflicts conflicts2 conflicts3"
   	tests="${tests} clean"
   	# Checking out various places (modules, checkout -d, &c)
  -	tests="${tests} modules modules2 modules3 modules4"
  +	tests="${tests} modules modules2 modules3 modules4 modules5"
   	tests="${tests} mkmodules-temp-file-removal"
   	tests="${tests} cvsadm emptydir abspath toplevel toplevel2"
   	# Log messages, error messages.
  @@ -7046,6 +7046,7 @@
   	  # ampersand modules: modules2
   	  # -s: modules.
   	  # -d: modules, modules3, cvsadm
  +	  # -i, -o, -u, -e, -t: modules5
   	  # slashes in module names: modules3
   
   	  ############################################################
  @@ -7861,6 +7862,225 @@
   	  rm -r 1
   
   	  rm -rf ${CVSROOT_DIRNAME}/first-dir
  +	  ;;
  +
  +	modules5)
  +	  # Test module programs
  +
  +	  mkdir ${CVSROOT_DIRNAME}/first-dir
  +	  mkdir 1
  +	  cd 1
  +	  dotest modules5-1 "${testcvs} -q co first-dir" ""
  +	  cd first-dir
  +	  mkdir subdir
  +	  dotest modules5-2 "${testcvs} add subdir" \
  +"Directory ${TESTDIR}/cvsroot/first-dir/subdir added to the repository"
  +	  cd subdir
  +	  mkdir ssdir
  +	  dotest modules5-3 "${testcvs} add ssdir" \
  +"Directory ${TESTDIR}/cvsroot/first-dir/subdir/ssdir added to the repository"
  +	  touch a b
  +	  dotest modules5-4 "${testcvs} add a b" \
  +"${PROG} [a-z]*: scheduling file .a. for addition
  +${PROG} [a-z]*: scheduling file .b. for addition
  +${PROG} [a-z]*: use .${PROG} commit. to add these files permanently"
  +
  +	  dotest modules5-5 "${testcvs} ci -m added" \
  +"${PROG} [a-z]*: Examining .
  +${PROG} [a-z]*: Examining ssdir
  +RCS file: ${TESTDIR}/cvsroot/first-dir/subdir/a,v
  +done
  +Checking in a;
  +${TESTDIR}/cvsroot/first-dir/subdir/a,v  <--  a
  +initial revision: 1\.1
  +done
  +RCS file: ${TESTDIR}/cvsroot/first-dir/subdir/b,v
  +done
  +Checking in b;
  +${TESTDIR}/cvsroot/first-dir/subdir/b,v  <--  b
  +initial revision: 1\.1
  +done"
  +
  +	  cd ..
  +	  dotest modules5-6 "${testcvs} -q co CVSROOT" \
  +"U CVSROOT/checkoutlist
  +U CVSROOT/commitinfo
  +U CVSROOT/config
  +U CVSROOT/cvswrappers
  +U CVSROOT/editinfo
  +U CVSROOT/loginfo
  +U CVSROOT/modules
  +U CVSROOT/notify
  +U CVSROOT/rcsinfo
  +U CVSROOT/taginfo
  +U CVSROOT/verifymsg"
  +
  +	  for i in checkin checkout update export tag; do
  +	    cat >> ${CVSROOT_DIRNAME}/$i.sh <<EOF
  +#! /bin/sh
  +echo "$i script invoked in \`pwd\`"
  +echo "args: \$@"
  +EOF
  +	    chmod +x ${CVSROOT_DIRNAME}/$i.sh
  +	  done
  +
  +	  OPTS="-i ${CVSROOT_DIRNAME}/checkin.sh -o${CVSROOT_DIRNAME}/checkout.sh -u ${CVSROOT_DIRNAME}/update.sh -e ${CVSROOT_DIRNAME}/export.sh -t${CVSROOT_DIRNAME}/tag.sh"
  +	  cat >CVSROOT/modules <<EOF
  +realmodule ${OPTS} first-dir/subdir a
  +dirmodule ${OPTS} first-dir/subdir
  +namedmodule -d nameddir ${OPTS} first-dir/subdir
  +EOF
  +
  +	  dotest modules5-7 "${testcvs} ci -m 'add modules' CVSROOT/modules" \
  +"Checking in CVSROOT/modules;
  +${TESTDIR}/cvsroot/CVSROOT/modules,v  <--  modules
  +new revision: 1\.[0-9]*; previous revision: 1\.[0-9]*
  +done
  +${PROG} [a-z]*: Rebuilding administrative file database"
  +
  +	  cd ..
  +	  rm -rf first-dir
  +	  # Test that real modules check out to realmodule/a, not subdir/a.
  +	  if test "$remote" = "yes"; then
  +	    dotest modules5-8 "${testcvs} co realmodule" \
  +"U realmodule/a
  +${PROG} [a-z]*: Executing ..${CVSROOT_DIRNAME}/checkout\.sh. .realmodule..
  +checkout script invoked in .*
  +args: realmodule"
  +	  else
  +	    dotest modules5-8 "${testcvs} co realmodule" \
  +"U realmodule/a
  +${PROG} [a-z]*: Executing ..${CVSROOT_DIRNAME}/checkout\.sh. .realmodule..
  +checkout script invoked in ${TESTDIR}/1
  +args: realmodule"
  +	  fi
  +	  dotest modules5-9 "test -d realmodule && test -f realmodule/a" ""
  +	  dotest_fail modules5-10 "test -f realmodule/b" ""
  +	  if test "$remote" = "yes"; then
  +	    dotest modules5-11 "${testcvs} -q co realmodule" \
  +"checkout script invoked in .*
  +args: realmodule"
  +	    dotest modules5-12 "${testcvs} -q update" \
  +"${PROG} [a-z]*: Executing ..${CVSROOT_DIRNAME}/update\.sh. .${CVSROOT_DIRNAME}/first-dir/subdir..
  +update script invoked in /.*/realmodule
  +args: ${CVSROOT_DIRNAME}/first-dir/subdir"
  +	    echo "change" >>realmodule/a
  +	    dotest modules5-13 "${testcvs} -q ci -m." \
  +"Checking in realmodule/a;
  +${CVSROOT_DIRNAME}/first-dir/subdir/a,v  <--  a
  +new revision: 1\.2; previous revision: 1\.1
  +done
  +${PROG} [a-z]*: Executing ..${CVSROOT_DIRNAME}/checkin\.sh. .${CVSROOT_DIRNAME}/first-dir/subdir..
  +checkin script invoked in /.*/realmodule
  +args: ${CVSROOT_DIRNAME}/first-dir/subdir"
  +	  else
  +	    dotest modules5-11 "${testcvs} -q co realmodule" \
  +"checkout script invoked in ${TESTDIR}/1
  +args: realmodule"
  +	    dotest modules5-12 "${testcvs} -q update" \
  +"${PROG} [a-z]*: Executing ..${CVSROOT_DIRNAME}/update\.sh. .${CVSROOT_DIRNAME}/first-dir/subdir..
  +update script invoked in ${TESTDIR}/1/realmodule
  +args: ${CVSROOT_DIRNAME}/first-dir/subdir"
  +	    echo "change" >>realmodule/a
  +	    dotest modules5-13 "${testcvs} -q ci -m." \
  +"Checking in realmodule/a;
  +${CVSROOT_DIRNAME}/first-dir/subdir/a,v  <--  a
  +new revision: 1\.2; previous revision: 1\.1
  +done
  +${PROG} [a-z]*: Executing ..${CVSROOT_DIRNAME}/checkin\.sh. .${CVSROOT_DIRNAME}/first-dir/subdir..
  +checkin script invoked in ${TESTDIR}/1/realmodule
  +args: ${CVSROOT_DIRNAME}/first-dir/subdir"
  +	  fi
  +	  dotest modules5-14 "echo yes | ${testcvs} release -d realmodule" \
  +"You have \[0\] altered files in this repository\.
  +Are you sure you want to release (and delete) directory .realmodule.: "
  +	  dotest modules5-15 "${testcvs} -q rtag -Dnow MYTAG realmodule" \
  +"tag script invoked in ${TESTDIR}/1
  +args: realmodule MYTAG"
  +	  if test "$remote" = "yes"; then
  +	    dotest modules5-16 "${testcvs} -q export -r MYTAG realmodule" \
  +"U realmodule/a
  +export script invoked in .*
  +args: realmodule"
  +	  else
  +	    dotest modules5-16 "${testcvs} -q export -r MYTAG realmodule" \
  +"U realmodule/a
  +export script invoked in ${TESTDIR}/1
  +args: realmodule"
  +	  fi
  +
  +	  dotest_fail modules5-17 "${testcvs} co realmodule/a" \
  +"${PROG}"' [a-z]*: module `realmodule/a'\'' is a request for a file in a module which is not a directory' \
  +"${PROG}"' [a-z]*: module `realmodule/a'\'' is a request for a file in a module which is not a directory
  +'"${PROG}"' \[[a-z]* aborted\]: cannot expand modules'
  +
  +	  # FIXCVS: The client gets confused in these cases and tries to
  +	  # store the scripts in the wrong places.
  +	  if test "$remote" != "yes"; then
  +	    # Now test the ability to check out a single file from a directory
  +	    dotest modules5-18 "${testcvs} co dirmodule/a" \
  +"U dirmodule/a
  +${PROG} [a-z]*: Executing ..${CVSROOT_DIRNAME}/checkout\.sh. .dirmodule..
  +checkout script invoked in ${TESTDIR}/1
  +args: dirmodule"
  +	    dotest modules5-19 "test -d dirmodule && test -f dirmodule/a" ""
  +	    dotest_fail modules5-20 "test -f dirmodule/b" ""
  +	    dotest modules5-21 "echo yes | ${testcvs} release -d dirmodule" \
  +"You have \[0\] altered files in this repository\.
  +Are you sure you want to release (and delete) directory .dirmodule.: "
  +
  +	    # Now test the ability to correctly reject a non-existent filename.
  +	    # For maximum studliness we would check that an error message is
  +	    # being output.
  +	    # We accept a zero exit status because it is what CVS does
  +	    # (Dec 95).  Probably the exit status should be nonzero,
  +	    # however.
  +	    dotest modules5-22 "${testcvs} co dirmodule/nonexist" \
  +"${PROG} [a-z]*: warning: new-born dirmodule/nonexist has disappeared
  +${PROG} [a-z]*: Executing ..${CVSROOT_DIRNAME}/checkout\.sh. .dirmodule..
  +checkout script invoked in ${TESTDIR}/1
  +args: dirmodule"
  +
  +	    # We tolerate the creation of the dirmodule directory, since that
  +	    # is what CVS does, not because we view that as preferable to not
  +	    # creating it.
  +	    dotest_fail modules5-23 "test -f dirmodule/a || test -f dirmodule/b" ""
  +	    rm -r dirmodule
  +
  +	    # Now test that a module using -d checks out to the specified
  +	    # directory.
  +	    dotest modules5-24 "${testcvs} -q co namedmodule" \
  +"U nameddir/a
  +U nameddir/b
  +checkout script invoked in ${TESTDIR}/1
  +args: nameddir"
  +	    dotest modules5-25 "test -f nameddir/a && test -f nameddir/b" ""
  +	    echo add line >>nameddir/a
  +	    # This seems suspicious: when we checkout an existing directory,
  +	    # the checkout script gets executed in addition to the update
  +	    # script.  Is that by design or accident?
  +	    dotest modules5-26 "${testcvs} -q co namedmodule" \
  +"M nameddir/a
  +${PROG} [a-z]*: Executing ..${CVSROOT_DIRNAME}/update\.sh. .${CVSROOT_DIRNAME}/first-dir/subdir..
  +update script invoked in ${TESTDIR}/1/nameddir
  +args: ${CVSROOT_DIRNAME}/first-dir/subdir
  +checkout script invoked in ${TESTDIR}/1
  +args: nameddir"
  +	    rm nameddir/a
  +	    dotest modules5-27 "${testcvs} -q co namedmodule" \
  +"U nameddir/a
  +${PROG} [a-z]*: Executing ..${CVSROOT_DIRNAME}/update\.sh. .${CVSROOT_DIRNAME}/first-dir/subdir..
  +update script invoked in ${TESTDIR}/1/nameddir
  +args: ${CVSROOT_DIRNAME}/first-dir/subdir
  +checkout script invoked in ${TESTDIR}/1
  +args: nameddir"
  +	    dotest modules5-28 "echo yes | ${testcvs} release -d nameddir" \
  +"You have \[0\] altered files in this repository\.
  +Are you sure you want to release (and delete) directory .nameddir.: "
  +	  fi
  +
  +	  cd ..
  +	  rm -rf 1 ${CVSROOT_DIRNAME}/first-dir ${CVSROOT_DIRNAME}/*.sh
   	  ;;
   
   	mkmodules-temp-file-removal)

From ossp-cvs-owner@ossp.org  Fri Jul 14 17:24:18 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e6EFOHc37583; Fri, 14 Jul 2000 17:24:17 +0200 (CEST)
Date: Fri, 14 Jul 2000 17:24:17 +0200 (CEST)
Message-Id: <200007141524.e6EFOHc37583@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str ChangeLog Makefile.in README str-config.1 str...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   14-Jul-2000 17:24:17
  Branch: HEAD                             Handle: 2000071416241600

  Modified files:
    ossp-pkg/str            ChangeLog Makefile.in README str-config.1 str.3
                            str_version.c

  Log:
    Update str_version.c to new GNU shtool 1.5.0 format.

  Summary:
    Revision    Changes     Path
    1.26        +5  -0      ossp-pkg/str/ChangeLog
    1.31        +13 -19     ossp-pkg/str/Makefile.in
    1.13        +1  -1      ossp-pkg/str/README
    1.14        +2  -2      ossp-pkg/str/str-config.1
    1.32        +2  -2      ossp-pkg/str/str.3
    1.11        +41 -27     ossp-pkg/str/str_version.c
  ____________________________________________________________________________

  Index: ossp-pkg/str/ChangeLog
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 ChangeLog
  --- ossp-pkg/str/ChangeLog	2000/07/14 15:14:21	1.25
  +++ ossp-pkg/str/ChangeLog	2000/07/14 15:24:16	1.26
  @@ -9,6 +9,11 @@
   
    ChangeLog
   
  + Changes between 0.9.4 and 0.9.5 (14-Jul-2000 to xx-Jul-2000):
  +
  +   *) Updated str_version.c to new GNU shtool 1.5.0 format.
  +      [Ralf S. Engelschall]
  +
    Changes between 0.9.3 and 0.9.4 (04-Feb-2000 to 14-Jul-2000):
   
      *) Upgrade to GNU libtool 1.3.5 and GNU shtool 1.5.0.
  Index: ossp-pkg/str/Makefile.in
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 Makefile.in
  --- ossp-pkg/str/Makefile.in	2000/01/20 18:59:13	1.30
  +++ ossp-pkg/str/Makefile.in	2000/07/14 15:24:16	1.31
  @@ -73,14 +73,14 @@
   	$(S)str_version.c
   
   _VERSION = \
  -	$(SHTOOL) version -l c -n 'Str' -p STR $$OPT $(_VERSION_FILE);\
  -	V=`$(SHTOOL) version -l c -d long $(_VERSION_FILE)`;\
  +	$(SHTOOL) version -lc -nStr -pstr_ $$OPT $(_VERSION_FILE);\
  +	V=`$(SHTOOL) version -lc -dlong $(_VERSION_FILE)`;\
   	sed -e "s/Version .*(.*)/Version $$V/g" <README >README.n && mv README.n README
   
   _MANPAGE = \
  -	V1=`$(SHTOOL) version -l c -d short $(_VERSION_FILE)`; \
  -	V2=`$(SHTOOL) version -l c -d long $(_VERSION_FILE)`; \
  -	D=`$(SHTOOL) version -l c -d long $(_VERSION_FILE) |\
  +	V1=`$(SHTOOL) version -lc -dshort $(_VERSION_FILE)`; \
  +	V2=`$(SHTOOL) version -lc -dlong $(_VERSION_FILE)`; \
  +	D=`$(SHTOOL) version -lc -dlong $(_VERSION_FILE) |\
   	   sed -e 's;.*(;;' -e 's;).*;;'`; \
   	$(POD2MAN) --section=$${SEC} --center="$${ONELINE}" \
   	           --release="$$D" --date="$${NAME} $$V1" $(S)$${BASENAME}.pod |\
  @@ -156,21 +156,15 @@
   
   #   increase or update version information
   new-version:
  -	OPT=-iv && $(_VERSION)
  -new-revision:
  -	OPT=-ir && $(_VERSION)
  -new-patchlevel:
  -	OPT=-iP && $(_VERSION)
  -new-betalevel:
  -	OPT=-ib && $(_VERSION)
  -new-alphalevel:
  -	OPT=-ia && $(_VERSION)
  -new-snaplevel:
  -	OPT=-is && $(_VERSION)
  -new-release:
  -	OPT=-s$(R) && $(_VERSION)
  +	@V="$(VERSION)"; \
  +	if [ ".$$V" != . ]; then \
  +		OPT="-s$$V"; \
  +	else \
  +		OPT="-e"; \
  +	fi; \
  +	$(_VERSION)
   update-version:
  -	OPT="-s`$(SHTOOL) version -l c -d short $(_VERSION_FILE)`" && $(_VERSION)
  +	@OPT="-s`$(SHTOOL) version -lc -dshort $(_VERSION_FILE)`" && $(_VERSION)
   
   update:
   	@$(RM) ltmain.sh ltconfig shtool
  Index: ossp-pkg/str/README
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 README
  --- ossp-pkg/str/README	2000/02/29 15:31:04	1.12
  +++ ossp-pkg/str/README	2000/07/14 15:24:16	1.13
  @@ -5,7 +5,7 @@
     |____/ \__|_|   
                   
     Str - String Library                 
  -  Version 0.9.4 (29-Feb-2000)
  +  Version 0.9.5 (14-Jul-2000)
   
     ABSTRACT
   
  Index: ossp-pkg/str/str-config.1
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 str-config.1
  --- ossp-pkg/str/str-config.1	2000/02/29 15:31:04	1.13
  +++ ossp-pkg/str/str-config.1	2000/07/14 15:24:16	1.14
  @@ -93,7 +93,7 @@
   .nr % 0
   .rr F
   .\}
  -.TH STR-CONFIG 1 "29-Feb-2000" "Str 0.9.4" "String Library"
  +.TH STR-CONFIG 1 "14-Jul-2000" "Str 0.9.5" "String Library"
   .UC
   .if n .hy 0
   .if n .na
  @@ -190,7 +190,7 @@
   .SH "NAME"
   \fBstr-config\fR \- Str library build utility
   .SH "VERSION"
  -Str 0.9.4 (29-Feb-2000)
  +Str 0.9.5 (14-Jul-2000)
   .SH "SYNOPSIS"
   \fBstr-config\fR
   [\fB--help\fR]
  Index: ossp-pkg/str/str.3
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 str.3
  --- ossp-pkg/str/str.3	2000/02/29 15:31:04	1.31
  +++ ossp-pkg/str/str.3	2000/07/14 15:24:16	1.32
  @@ -93,7 +93,7 @@
   .nr % 0
   .rr F
   .\}
  -.TH str 3 "29-Feb-2000" "Str 0.9.4" "String Library"
  +.TH str 3 "14-Jul-2000" "Str 0.9.5" "String Library"
   .UC
   .if n .hy 0
   .if n .na
  @@ -190,7 +190,7 @@
   .SH "NAME"
   \fBStr\fR \- String Library
   .SH "VERSION"
  -Str 0.9.4 (29-Feb-2000)
  +Str 0.9.5 (14-Jul-2000)
   .SH "SYNOPSIS"
   \fBstr_len\fR,
   \fBstr_copy\fR,
  Index: ossp-pkg/str/str_version.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 str_version.c
  --- ossp-pkg/str/str_version.c	2000/02/29 15:31:04	1.10
  +++ ossp-pkg/str/str_version.c	2000/07/14 15:24:16	1.11
  @@ -1,32 +1,46 @@
   /*
  -**  str_version.c -- Version Information
  -**  [automatically generated and maintained by shtool]
  +**  str_version.c -- Version Information for Str (syntax: C/C++)
  +**  [automatically generated and maintained by GNU shtool]
   */
   
  -#ifdef _AS_HEADER
  +#ifdef _STR_VERSION_C_AS_HEADER_
   
  -#ifndef _STR_VERSION_C
  -#define _STR_VERSION_C
  -#define STR_VERSION 0x009204
  -extern const int  STR_Version;
  -extern const char STR_VersionStr[];
  -extern const char STR_Hello[];
  -extern const char STR_GNUVersion[];
  -extern const char STR_WhatID[];
  -extern const char STR_RCSIdentID[];
  -extern const char STR_WebID[];
  -extern const char STR_PlainID[];
  -#endif /* _STR_VERSION_C */
  -
  -#else
  -
  -const int  STR_Version      = 0x009204;
  -const char STR_VersionStr[] = "0.9.4 (29-Feb-2000)";
  -const char STR_Hello[]      = "This is Str, Version 0.9.4 (29-Feb-2000)";
  -const char STR_GNUVersion[] = "Str Version 0.9.4";
  -const char STR_WhatID[]     = "@(#)Str Version 0.9.4 (29-Feb-2000)";
  -const char STR_RCSIdentID[] = "$Id: str_version.c,v 1.10 2000/02/29 15:31:04 rse Exp $";
  -const char STR_WebID[]      = "Str/0.9.4";
  -const char STR_PlainID[]    = "0.9.4";
  +#ifndef _STR_VERSION_C_
  +#define _STR_VERSION_C_
   
  -#endif
  +#define STR_VERSION 0x009205
  +
  +typedef struct {
  +    const int   v_hex;
  +    const char *v_short;
  +    const char *v_long;
  +    const char *v_tex;
  +    const char *v_gnu;
  +    const char *v_web;
  +    const char *v_sccs;
  +    const char *v_rcs;
  +} str_version_t;
  +
  +extern str_version_t str_version;
  +
  +#endif /* _STR_VERSION_C_ */
  +
  +#else /* _STR_VERSION_C_AS_HEADER_ */
  +
  +#define _STR_VERSION_C_AS_HEADER_
  +#include "str_version.c"
  +#undef  _STR_VERSION_C_AS_HEADER_
  +
  +str_version_t str_version = {
  +    0x009205,
  +    "0.9.5",
  +    "0.9.5 (14-Jul-2000)",
  +    "This is Str, Version 0.9.5 (14-Jul-2000)",
  +    "Str 0.9.5 (14-Jul-2000)",
  +    "Str/0.9.5",
  +    "@(#)Str 0.9.5 (14-Jul-2000)",
  +    "$Id: str_version.c,v 1.11 2000/07/14 15:24:16 rse Exp $"
  +};
  +
  +#endif /* _STR_VERSION_C_AS_HEADER_ */
  +

From ossp-cvs-owner@ossp.org  Sun Jul 16 14:54:20 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e6GCsIN41281; Sun, 16 Jul 2000 14:54:18 +0200 (CEST)
Date: Sun, 16 Jul 2000 14:54:18 +0200 (CEST)
Message-Id: <200007161254.e6GCsIN41281@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvs configure configure.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   16-Jul-2000 14:54:18
  Branch: HEAD                             Handle: 2000071613541800

  Modified files:
    ossp-pkg/cvs            configure configure.in

  Log:
    *** empty log message ***

  Summary:
    Revision    Changes     Path
    1.14        BLOB        ossp-pkg/cvs/configure
    1.14        +6  -0      ossp-pkg/cvs/configure.in
  ____________________________________________________________________________

  Index: ossp-pkg/cvs/configure
  ============================================================
  $ cvs update -p -r1.13 configure >configure.old
  $ cvs update -p -r1.14 configure >configure.new
  $ diff -u configure.old configure.new
  Index: ossp-pkg/cvs/configure.in
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 configure.in
  --- ossp-pkg/cvs/configure.in	2000/07/12 15:35:06	1.13
  +++ ossp-pkg/cvs/configure.in	2000/07/16 12:54:18	1.14
  @@ -133,11 +133,13 @@
   AC_ARG_WITH([krb4],
     [  --with-krb4=value       set default \$(KRB4) from value],
     [KRB4=$withval],
  +  [KRB4=no]
   )dnl
   echo "default place for krb4 is $KRB4"
   AC_SUBST(KRB4)])dnl
   WITH_KRB4
   
  +if test ".$KRB4" != .no; then
   krb_h=
   AC_MSG_CHECKING([for krb.h])
   if test "$cross_compiling" != yes && test -r $KRB4/include/krb.h; then
  @@ -199,6 +201,7 @@
     fi
   fi
   AC_CHECK_FUNCS(krb_get_err_text)
  +fi
   
   dnl
   dnl Use --with-gssapi=DIR to enable GSSAPI support.
  @@ -208,11 +211,13 @@
   AC_ARG_WITH([gssapi],
     [  --with-gssapi=value     GSSAPI directory],
     [GSSAPI=$withval],
  +  [GSSAPI=no]
   )dnl
   echo "default place for GSSAPI is $GSSAPI"
   AC_SUBST(GSSAPI)])dnl
   WITH_GSSAPI
   
  +if test ".$GSSAPI" != .no; then
   hold_cppflags=$CPPFLAGS
   CPPFLAGS="$CPPFLAGS -I$GSSAPI/include "
   AC_CHECK_HEADERS(krb5.h gssapi.h gssapi/gssapi.h gssapi/gssapi_generic.h)
  @@ -240,6 +245,7 @@
     # This is necessary on Irix 5.3, in order to link against libkrb5 --
     # there, an_to_ln.o refers to things defined only in -lgen.
     AC_CHECK_LIB(gen, compile)
  +fi
   fi
   
   dnl

From ossp-cvs-owner@ossp.org  Sun Jul 16 20:14:42 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e6GIEf463628; Sun, 16 Jul 2000 20:14:41 +0200 (CEST)
Date: Sun, 16 Jul 2000 20:14:41 +0200 (CEST)
Message-Id: <200007161814.e6GIEf463628@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvs/src client.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   16-Jul-2000 20:14:41
  Branch: HEAD                             Handle: 2000071619144100

  Modified files:
    ossp-pkg/cvs/src        client.c

  Log:
    *** empty log message ***

  Summary:
    Revision    Changes     Path
    1.10        +21 -1      ossp-pkg/cvs/src/client.c
  ____________________________________________________________________________

  Index: ossp-pkg/cvs/src/client.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 client.c
  --- ossp-pkg/cvs/src/client.c	2000/07/06 19:33:59	1.9
  +++ ossp-pkg/cvs/src/client.c	2000/07/16 18:14:41	1.10
  @@ -262,14 +262,34 @@
   	    this_root = Name_Root ((char *) NULL, (char *) NULL);
   	}
   
  +#ifdef OSSP_PATCH_CVSROOT
  +        {
  +            int cvsroot_alias;
  +            cvsroot_t *e;
  +
  +            cvsroot_alias = 0;
  +            if ((e = cvsroot_lookup(NULL, current_root, NULL)) != NULL)
  +                if (strcmp(e->slavepath, this_root) == 0)
  +                    cvsroot_alias = 1;
  +            if ((e = cvsroot_lookup(NULL, NULL, this_root)) != NULL)
  +                if (strcmp(e->masterpath, current_root) == 0)
  +                    cvsroot_alias = 1;
  +#endif
  +
   	/* Now check the value for root. */
   	if (this_root && current_root
  +#ifdef OSSP_PATCH_CVSROOT
  +	    && !cvsroot_alias
  +#endif
   	    && (strcmp (this_root, current_root) != 0))
   	{
   	    /* Don't send this, since the CVSROOTs don't match. */
   	    free (this_root);
   	    return 1;
   	}
  +#ifdef OSSP_PATCH_CVSROOT
  +	}
  +#endif
   	free (this_root);
       }
       
  @@ -2689,7 +2709,7 @@
       /* Add a directory name to the list of those sent to the
          server. */
       if (update_dir && (*update_dir != '\0')
  -	&& (strcmp (update_dir, ".") != 0)
  +	&& (strcmp (update_dir, ".") != 0) /* RSE XXX, alternative to OSSP_PATCH_CVSROOT */
   	&& (findnode (dirs_sent_to_server, update_dir) == NULL))
       {
   	Node *n;

From ossp-cvs-owner@ossp.org  Tue Jul 18 14:55:04 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e6ICt3E84793; Tue, 18 Jul 2000 14:55:03 +0200 (CEST)
Date: Tue, 18 Jul 2000 14:55:03 +0200 (CEST)
Message-Id: <200007181255.e6ICt3E84793@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvs .cvsignore COPYING COPYING.LIB ChangeLog.zoo ...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   18-Jul-2000 14:55:03
  Branch: vendor                           Handle: 1970010101000000

  Modified files:           (Branch: vendor)
    ossp-pkg/cvs/src        login.c
  Touched files:            (Branch: vendor)
    ossp-pkg/cvs            .cvsignore COPYING COPYING.LIB ChangeLog.zoo
                            INSTALL Makefile.in NEWS README acconfig.h
                            config.h.in configure configure.in
    ossp-pkg/cvs/diff       .cvsignore Makefile.in analyze.c cmpbuf.c cmpbuf.h
                            context.c diagmeet.note diff.c diff.h diff3.c
                            diffrun.h dir.c ed.c ifdef.c io.c normal.c side.c
                            system.h util.c version.c
    ossp-pkg/cvs/doc        .cvsignore FAQ HACKING Makefile.in RCSFILES TESTS
                            TODO cvs-paper.ms cvs.texinfo cvsclient.texi
    ossp-pkg/cvs/lib        .cvsignore Makefile.in argmatch.c dup2.c fncase.c
                            fnmatch.c fnmatch.h ftruncate.c getdate.c
                            getdate.y getline.c getline.h getopt.c getopt.h
                            getopt1.c hostname.c md5.c md5.h memmove.c mkdir.c
                            regex.c regex.h rename.c savecwd.c savecwd.h
                            sighandle.c strerror.c stripslash.c strstr.c
                            strtoul.c system.h valloc.c wait.h waitpid.c
                            xgetwd.c yesno.c
    ossp-pkg/cvs/man        .cvsignore Makefile.in cvs.1 cvs.5
    ossp-pkg/cvs/src        .cvsignore Makefile.in add.c admin.c buffer.c
                            buffer.h checkin.c checkout.c classify.c client.c
                            client.h commit.c create_adm.c cvs.h cvsrc.c
                            diff.c edit.c edit.h entries.c error.c error.h
                            expand_path.c fileattr.c fileattr.h filesubr.c
                            find_names.c hardlink.c hardlink.h hash.c hash.h
                            history.c ignore.c import.c lock.c log.c logmsg.c
                            main.c mkmodules.c modules.c myndbm.c myndbm.h
                            no_diff.c options.h.in parseinfo.c patch.c rcs.c
                            rcs.h rcscmds.c recurse.c release.c remove.c
                            repos.c root.c rtag.c run.c sanity.sh scramble.c
                            server.c server.h status.c subr.c tag.c update.c
                            update.h vers_ts.c version.c watch.c watch.h
                            wrapper.c zlib.c
    ossp-pkg/cvs/zlib       .cvsignore Makefile.in README adler32.c
                            algorithm.doc compress.c crc32.c deflate.c
                            deflate.h gzio.c infblock.c infblock.h infcodes.c
                            infcodes.h inffast.c inffast.h inflate.c
                            inftrees.c inftrees.h infutil.c infutil.h trees.c
                            uncompr.c zconf.h zlib.h zutil.c zutil.h

  Log:
    Import of vendor CVS version, snapshot 20000718
    
    [Release Tags: CVS_20000718]

  Summary:
    Revision    Changes     Path
    1.1.1.2     +0  -0      ossp-pkg/cvs/src/login.c
  ____________________________________________________________________________

  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/login.c?cvsroot=ossp&r1=1.1.1.1&r2=1.1.1.2

From ossp-cvs-owner@ossp.org  Tue Jul 18 14:57:53 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e6ICvqf85011; Tue, 18 Jul 2000 14:57:52 +0200 (CEST)
Date: Tue, 18 Jul 2000 14:57:52 +0200 (CEST)
Message-Id: <200007181257.e6ICvqf85011@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvs/src login.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   18-Jul-2000 14:57:52
  Branch: HEAD                             Handle: 2000071813575200

  Modified files:
    ossp-pkg/cvs/src        login.c

  Log:
    Merge in conflicts

  Summary:
    Revision    Changes     Path
    1.4         +2  -0      ossp-pkg/cvs/src/login.c
  ____________________________________________________________________________

  Index: ossp-pkg/cvs/src/login.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 login.c
  --- ossp-pkg/cvs/src/login.c	2000/05/12 15:18:18	1.3
  +++ ossp-pkg/cvs/src/login.c	2000/07/18 12:57:52	1.4
  @@ -370,6 +370,8 @@
   
   	strtok (linebuf, " ");
   	tmp = strtok (NULL, "\n");
  +	if (tmp == NULL)
  +	    error (1, 0, "bad entry in %s for %s", passfile, CVSroot_original);
   
   	/* Give it permanent storage. */
   	password = xstrdup (tmp);

From ossp-cvs-owner@ossp.org  Tue Jul 18 17:24:28 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e6IFOSe95313; Tue, 18 Jul 2000 17:24:28 +0200 (CEST)
Date: Tue, 18 Jul 2000 17:24:28 +0200 (CEST)
Message-Id: <200007181524.e6IFOSe95313@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela shiela.pl
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   18-Jul-2000 17:24:27
  Branch: HEAD                             Handle: 2000071816242700

  Modified files:
    ossp-pkg/shiela         shiela.pl

  Log:
    beautify imports

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/shiela.pl
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	2000/06/18 14:30:52	1.1.1.1
  +++ ossp-pkg/shiela/shiela.pl	2000/07/18 15:24:27	1.2
  @@ -1376,7 +1376,7 @@
           @cvsinfo = ();
           $cvsmsg =~ s|Status:\n+Vendor Tag:\s+(\S+).*?\nRelease Tags:\s+(.+?)\s*\n(.+)$||s;
           my ($It, $IT, $list) = ($1, $2, $3);
  -        $cvsmsg .= "[Release Tags: $IT]\n";
  +        $cvsmsg .= sprintf("[Release Tag%s: %s]\n", ($IT =~ m|\s| ? 's' : ''), $IT);
           while ($list =~ s|\n([ILNUCT])\s+(\S+)||s) {
               my ($Io, $Is) = ($1, $2);
   

From ossp-cvs-owner@ossp.org  Tue Jul 18 17:27:13 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e6IFRCC95529; Tue, 18 Jul 2000 17:27:12 +0200 (CEST)
Date: Tue, 18 Jul 2000 17:27:12 +0200 (CEST)
Message-Id: <200007181527.e6IFRCC95529@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela INSTALL
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   18-Jul-2000 17:27:12
  Branch: HEAD                             Handle: 2000071816271100

  Modified files:
    ossp-pkg/shiela         INSTALL

  Log:
    Redirect people to the manual page

  Summary:
    Revision    Changes     Path
    1.2         +1  -0      ossp-pkg/shiela/INSTALL
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/INSTALL
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 INSTALL
  --- ossp-pkg/shiela/INSTALL	2000/06/18 14:30:47	1.1.1.1
  +++ ossp-pkg/shiela/INSTALL	2000/07/18 15:27:11	1.2
  @@ -10,4 +10,5 @@
     INSTALLATION
     
     Usually you want to use Shiela inside the repository tree. 
  +  Read the shiela-install manual page for details.
   

From ossp-cvs-owner@ossp.org  Tue Jul 18 17:28:01 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e6IFS0k95611; Tue, 18 Jul 2000 17:28:00 +0200 (CEST)
Date: Tue, 18 Jul 2000 17:28:00 +0200 (CEST)
Message-Id: <200007181528.e6IFS0k95611@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela shtool
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   18-Jul-2000 17:28:00
  Branch: HEAD                             Handle: 2000071816275900

  Modified files:
    ossp-pkg/shiela         shtool

  Log:
    Upgrade shtool to 1.5.0

  Summary:
    Revision    Changes     Path
    1.2         +231 -257   ossp-pkg/shiela/shtool
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/shtool
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 shtool
  --- ossp-pkg/shiela/shtool	2000/06/18 14:30:49	1.1.1.1
  +++ ossp-pkg/shiela/shtool	2000/07/18 15:27:59	1.2
  @@ -6,7 +6,7 @@
   ##  See http://www.gnu.org/software/shtool/ for more information.
   ##  See ftp://ftp.gnu.org/gnu/shtool/ for latest version.
   ##
  -##  Version:  1.4.10 (18-Jun-2000)
  +##  Version:  1.5.0 (01-Jul-2000)
   ##  Contents: 7/17 available modules
   ##
   
  @@ -43,7 +43,7 @@
   ##    mkdir      Make one or more directories
   ##    fixperm    Fix file permissions inside a source tree
   ##    tarball    Roll distribution tarballs
  -##    version    Generate and maintain a version information file
  +##    version    Maintain a version information file
   ##    path       Deal with program paths
   ##
   ##  Not available commands (because module was not built-in):
  @@ -65,7 +65,7 @@
       exit 1
   fi
   if [ ".$1" = ".-h" -o ".$1" = ".--help" ]; then
  -    echo "This is GNU shtool, version 1.4.10 (18-Jun-2000)"
  +    echo "This is GNU shtool, version 1.5.0 (01-Jul-2000)"
       echo "Copyright (c) 1994-2000 Ralf S. Engelschall <rse@engelschall.com>"
       echo "Report bugs to <bug-shtool@gnu.org>"
       echo ''
  @@ -75,6 +75,7 @@
       echo '  -v, --version   display shtool version information'
       echo '  -h, --help      display shtool usage help page (this one)'
       echo '  -d, --debug     display shell trace information'
  +    echo '  -r, --recreate  recreate this shtool script via shtoolize'
       echo ''
       echo 'Available <cmd-name> [<cmd-options>] [<cmd-args>]:'
       echo '  echo     [-n] [-e] [<str> ...]'
  @@ -84,8 +85,8 @@
       echo '  fixperm  [-v] [-t] <path> [<path> ...]'
       echo '  tarball  [-t] [-v] [-o <tarball>] [-c <prog>] [-d <dir>] [-u'
       echo '           <user>] [-g <group>] [-e <pattern>] <path> [<path> ...]'
  -    echo '  version  [-l<lang>] [-n<name>] [-p<prefix>] [-s<version>] [-i<knob>]'
  -    echo '           [-d<type>] <file>'
  +    echo '  version  [-l<lang>] [-n<name>] [-p<prefix>] [-s<version>] [-e]'
  +    echo '           [-i<knob>] [-d<type>] <file>'
       echo '  path     [-s] [-r] [-d] [-b] [-m] [-p<path>] <str> [<str> ...]'
       echo ''
       echo 'Not available <cmd-name> (because module was not built-in):'
  @@ -104,9 +105,13 @@
       exit 0
   fi
   if [ ".$1" = ".-v" -o ".$1" = ."--version" ]; then
  -    echo "GNU shtool 1.4.10 (18-Jun-2000)"
  +    echo "GNU shtool 1.5.0 (01-Jul-2000)"
       exit 0
   fi
  +if [ ".$1" = ".-r" -o ".$1" = ."--recreate" ]; then
  +    shtoolize -oshtool echo install mkdir fixperm tarball version path
  +    exit 0
  +fi
   if [ ".$1" = ".-d" -o ".$1" = ."--debug" ]; then
       shift
       set -x
  @@ -190,16 +195,16 @@
           ;;
       version )
           str_tool="version"
  -        str_usage="[-l<lang>] [-n<name>] [-p<prefix>] [-s<version>] [-i<knob>] [-d<type>] <file>"
  -        arg_spec="1+"
  -        opt_spec="l:n:p:s:i:d:"
  +        str_usage="[-l<lang>] [-n<name>] [-p<prefix>] [-s<version>] [-e] [-i<knob>] [-d<type>] <file>"
  +        arg_spec="1="
  +        opt_spec="l:n:p:s:i:e.d:"
           opt_l="txt"
           opt_n="unknown"
  -        opt_p="unknown"
  -        opt_s="unknown"
  -        opt_i="P"
  -        opt_d="NO"
  -        gen_tmpfile=yes
  +        opt_p=""
  +        opt_s=""
  +        opt_e="no"
  +        opt_i=""
  +        opt_d="short"
           ;;
       path )
           str_tool="path"
  @@ -1007,142 +1012,97 @@
   
   version )
       ##
  -    ##  version -- Generate and maintain a version information file
  +    ##  version -- Maintain a version information file
       ##  Copyright (c) 1994-2000 Ralf S. Engelschall <rse@engelschall.com>
  -    ##  Originally written for ePerl
  +    ##  Originally written for ePerl, rewritten from scratch for shtool
       ##
       
  -    LANGUAGE="$opt_l"
  -    NAME="$opt_n"
  -    PREFIX="$opt_p"
  -    FULLVERSION="$opt_s"
  -    INCREASE="$opt_i"
  -    REPORT="$opt_d"
  -    FILE="$1"
  -    
  -    #   determine language
  -    if [ ".$LANGUAGE" = .unknown ]; then
  -        case $FILE in
  -            *.txt )       LANGUAGE=txt    ;;
  -            *.c )         LANGUAGE=c      ;;
  -            *.pl | *.pm ) LANGUAGE=perl   ;;
  -            *.py)         LANGUAGE=python ;;
  -            * )           echo "$tool:Error: unknown language type" 1>&2; exit 1 ;;
  -        esac
  -    fi
  +    file="$1"
       
  -    #   determine prefix from name and vice versa
  -    if [ ".$PREFIX" = . -o ".$PREFIX" = .unknown ]; then
  -        if [ ".$NAME" != . -a ".$NAME" != .unknown ]; then
  -            PREFIX="$NAME"
  -        fi
  -    fi
  -    if [ ".$NAME" = . -o ".$NAME" = .unknown ]; then
  -        if [ ".$PREFIX" != . -a ".$PREFIX" != .unknown ]; then
  -            NAME="$PREFIX"
  +    #   determine prefix and name
  +    name="$opt_n"
  +    prefix="$opt_p"
  +    
  +    #   determine current version
  +    triple="$opt_s"
  +    if [ ".$triple" != . ]; then
  +        #   use given triple
  +        if [ ".`echo $triple | grep '[0-9]*.[0-9]*[sabp.][0-9]*'`" = . ]; then
  +            echo "$msgprefix:Error: invalid argument to option \`-s': \`$opt_s'" 1>&2
  +            exit 1
           fi
  +        eval `echo $triple |\
  +              sed -e 's%\([0-9]*\)\.\([0-9]*\)\([sabp.]\)\([0-9]*\).*%\
  +              ver="\1";rev="\2";typ="\3";lev="\4"%'`
  +        tim=calc
  +    elif [ -r $file ]; then
  +        #   determine triple from given file
  +        eval `grep 'Version [0-9]*.[0-9]*[sabp.][0-9]* ([0-9]*-[a-zA-Z]*-[0-9]*)' $file |\
  +              head -1 | sed -e 's%.*Version \([0-9]*\)\.\([0-9]*\)\([sabp.]\)\([0-9]*\) (\([0-9]*-[a-zA-Z]*-[0-9]*\)).*%\
  +              ver="\1";rev="\2";typ="\3";lev="\4";tim="\5"%'`
  +    else
  +        #   intialise to first version
  +        ver=0
  +        rev=1
  +        typ=.
  +        lev=0
  +        tim=calc
       fi
       
  -    #   determine version
  -    date=unknown
  -    version=0
  -    revision=0
  -    bplevel=0
  -    if [ ".$FULLVERSION" = .unknown ]; then
  -        if [ -r "$FILE" ]; then
  -            #   grep out current information
  -            id=`grep 'Version [0-9]*.[0-9]*[.abps][0-9]* ([0-9]*-[a-zA-Z]*-[0-9]*)' $FILE | \
  -                head -1 | \
  -                sed -e 's%.*Version \([0-9]*\)\.\([0-9]*\)\([.abps]\)\([0-9]*\) (\([0-9]*-[a-zA-Z]*-[0-9]*\)).*%\1:\2:\3:\4:\5%'`
  -            version=`echo $id | awk -F: '{ print $1 }'`
  -            revision=`echo $id | awk -F: '{ print $2 }'`
  -            bptype=`echo $id | awk -F: '{ print $3 }'`
  -            bplevel=`echo $id | awk -F: '{ print $4 }'`
  -            date=`echo $id | awk -F: '{ print $5 }'`
  -            if [ .$REPORT = .NO ]; then
  -                case $INCREASE in
  -                    b ) bplevel=`expr $bplevel + 1`
  -                        bptype=b
  -                        ;;
  -                    a ) bplevel=`expr $bplevel + 1`
  -                        bptype=a
  -                        ;;
  -                    s ) bplevel=`expr $bplevel + 1`
  -                        bptype=s
  -                        ;;
  -                    P ) bplevel=`expr $bplevel + 1`
  -                        bptype=.
  -                        ;;
  -                    p ) bplevel=`expr $bplevel + 1`
  -                        bptype=p
  -                        ;;
  -                    r ) revision=`expr $revision + 1`
  -                        bptype=.
  -                        bplevel=0
  -                        ;;
  -                    v ) version=`expr $version + 1`
  -                        revision=0
  -                        bptype=.
  -                        bplevel=0
  -                        ;;
  -                esac
  -                date=calc
  -            fi
  -            FULLVERSION="$version.$revision$bptype$bplevel"
  -        else
  -            #   intialise to first version
  -            version=0
  -            revision=5
  -            bptype=b
  -            bplevel=0
  -            date=calc
  -        fi
  -    else
  -        #   take given version
  -        V=`echo $FULLVERSION | sed -e 's%\([0-9]*\)\.\([0-9]*\)\([.abps]\)\([0-9]*\).*%\1:\2:\3:\4%'`
  -        version=`echo $V | awk -F: '{ print $1 }'`
  -        revision=`echo $V | awk -F: '{ print $2 }'`
  -        bptype=`echo $V | awk -F: '{ print $3 }'`
  -        bplevel=`echo $V | awk -F: '{ print $4 }'`
  -        date=calc
  +    #   determine new version in batch
  +    if [ ".$opt_i" != . ]; then
  +        case $opt_i in
  +            v ) ver=`expr $ver + 1`
  +                rev=0
  +                lev=0
  +                ;;
  +            r ) rev=`expr $rev + 1`
  +                lev=0
  +                ;;
  +            l ) lev=`expr $lev + 1`
  +                ;;
  +            * ) echo "$msgprefix:Error: invalid argument to option \`-i': \`$opt_i'" 1>&2
  +                exit 1
  +                ;;
  +        esac
  +        tim=calc
       fi
       
  -    #   determine hex value of version
  -    case $FULLVERSION in
  -        *.*a* )
  -            HEX=`echo "$FULLVERSION" | sed -e 's/a.*//' | awk -F. '{ printf("%d%02d", $1, $2); }' &&
  -                 echo "$FULLVERSION" | sed -e 's/.*a//' | awk '{ printf("0%02d", $1); }'`
  -            ;;
  -        *.*b* )
  -            HEX=`echo "$FULLVERSION" | sed -e 's/b.*//' | awk -F. '{ printf("%d%02d", $1, $2); }' &&
  -                 echo "$FULLVERSION" | sed -e 's/.*b//' | awk '{ printf("1%02d", $1); }'`
  -            ;;
  -        *.*.* )
  -            HEX=`echo "$FULLVERSION" | awk -F. '{ printf("%d%02d2%02d", $1, $2, $3); }'`
  -            ;;
  -    esac
  +    #   determine new version interactively
  +    if [ ".$opt_e" = .yes ]; then
  +        echo "old version: ${ver}.${rev}${typ}${lev}"
  +        while [ 1 ]; do
  +            echo dummy | awk '{ printf("new version: "); }'
  +            read triple
  +            case $triple in
  +                [0-9]*.[0-9]*[sabp.][0-9]* ) 
  +                    ;;
  +                * ) echo "$msgprefix:Error: invalid version string entered: \`$triple'" 1>&2
  +                    continue
  +                    ;;
  +            esac
  +            break
  +        done
  +        eval `echo $triple |\
  +              sed -e 's%^\([0-9]*\)\.\([0-9]*\)\([sabp.]\)\([0-9]*\)$%\
  +              ver="\1";rev="\2";typ="\3";lev="\4"%'`
  +        tim=calc
  +    fi
       
  -    #   determine libtool version
  -    case $FULLVERSION in
  -        *.*a* )
  -            LTV=`echo "$FULLVERSION" | sed -e 's/a.*//' | awk -F. '{ printf("%d:0", $1*10+$2); }'`
  -            ;;
  -        *.*b* )
  -            LTV=`echo "$FULLVERSION" | sed -e 's/b.*//' | awk -F. '{ printf("%d:0", $1*10+$2); }'`
  -            ;;
  -        *.*.* )
  -            LTV=`echo "$FULLVERSION" | awk -F. '{ printf("%d:%d", $1*10+$2, $3); }'`
  -            ;;
  +    #   determine hexadecimal and libtool value of version
  +    case $typ in
  +        a     ) typnum=0;  levnum=$lev ;;
  +        b     ) typnum=1;  levnum=$lev ;;
  +        p | . ) typnum=2;  levnum=$lev ;;
  +        s     ) typnum=15; levnum=255  ;; # snapshots are special
       esac
  +    hex=`echo "$ver:$rev:$typnum:$levnum" |\
  +         awk -F: '{ printf("0x%X%02X%1X%02X", $1, $2, $3, $4); }'`
  +    ltv=`echo "$ver:$rev:$typnum:$levnum" |\
  +         awk -F: '{ printf("%d:%d", $1*10 + $2, $3*10 + $4); }'`
       
  -    #   determine string out of filename
  -    #   (don't try to optimize this in any way - portability!)
  -    FILESTR=`echo "$FILE" |\
  -             tr 'abcdefghijklmnopqrstuvwxyz./%+' \
  -                'ABCDEFGHIJKLMNOPQRSTUVWXYZ____' | sed -e 's/-/_/g'`
  -    
       #   determine date
  -    if [ ".$date" = .calc ]; then
  +    if [ ".$tim" = .calc ]; then
           day=`date '+%d'`
           month=`date '+%m'`
           year=`date '+%Y' 2>/dev/null`
  @@ -1167,131 +1127,147 @@
                 11) month='Nov' ;;
                 12) month='Dec' ;;
           esac
  -        date="${day}-${month}-${year}"
  +        tim="${day}-${month}-${year}"
       fi
       
  -    if [ .$REPORT != .NO ]; then
  -        case $REPORT in
  -            long )
  -                echo "$version.$revision$bptype$bplevel ($date)"
  -                ;;
  +    #   perform result actions
  +    mode=show
  +    if [ ".$opt_i" != . ]; then
  +        mode=edit
  +    elif [ ".$opt_e" = .yes ]; then
  +        mode=edit
  +    elif [ ".$opt_s" != . ]; then
  +        mode=edit
  +    fi
  +    if [ ".$mode" = .show ]; then
  +        #   just display the current version
  +        case $opt_d in
               short )
  -                echo "$version.$revision$bptype$bplevel"
  +                echo "${ver}.${rev}${typ}${lev}"
  +                ;;
  +            long )
  +                echo "${ver}.${rev}${typ}${lev} ($tim)"
                   ;;
               libtool )
  -                echo "$LTV"
  +                echo "${ltv}"
                   ;;
               hex )
  -                echo "0x$HEX"
  +                echo "${hex}"
  +                ;;
  +            * ) echo "$msgprefix:Error: invalid argument to option \`-d': \`$opt_d'" 1>&2
  +                exit 1
                   ;;
           esac
  -        rm -f $tmpfile >/dev/null 2>&1
  -        exit 0
  -    fi
  -    
  -    #   create the version file according the the selected language
  -    echo "new version: $version.$revision$bptype$bplevel ($date)"
  -    case $LANGUAGE in
  -        txt )
  -            cat >$tmpfile <<'EOT'
  -
  -  This is @NAME@, Version @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ (@DAY@-@MONTH@-@YEAR@)
  -
  -EOT
  -            ;;
  -        c )
  -            cat >$tmpfile <<'EOT'
  -/*
  -**  @FILE@ -- Version Information
  -**  [automatically generated and maintained by GNU shtool]
  -*/
  -
  -#ifdef _AS_HEADER
  -
  -#ifndef _@FILESTR@
  -#define _@FILESTR@
  -#define @PREFIX@_VERSION 0x@HEX@
  -extern const int  @PREFIX@_Version;
  -extern const char @PREFIX@_VersionStr[];
  -extern const char @PREFIX@_Hello[];
  -extern const char @PREFIX@_GNUVersion[];
  -extern const char @PREFIX@_WhatID[];
  -extern const char @PREFIX@_RCSIdentID[];
  -extern const char @PREFIX@_WebID[];
  -extern const char @PREFIX@_PlainID[];
  -#endif /* _@FILESTR@ */
  -
  -#else
  -
  -const int  @PREFIX@_Version      = 0x@HEX@;
  -const char @PREFIX@_VersionStr[] = "@VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ (@DAY@-@MONTH@-@YEAR@)";
  -const char @PREFIX@_Hello[]      = "This is @NAME@, Version @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ (@DAY@-@MONTH@-@YEAR@)";
  -const char @PREFIX@_GNUVersion[] = "@NAME@ Version @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@";
  -const char @PREFIX@_WhatID[]     = "@(#)@NAME@ Version @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ (@DAY@-@MONTH@-@YEAR@)";
  -const char @PREFIX@_RCSIdentID[] = "$Id: shtool,v 1.1.1.1 2000/06/18 14:30:49 rse Exp $";
  -const char @PREFIX@_WebID[]      = "@NAME@/@VERSION@.@REVISION@@BPTYPE@@BPLEVEL@";
  -const char @PREFIX@_PlainID[]    = "@VERSION@.@REVISION@@BPTYPE@@BPLEVEL@";
  -
  -#endif
  -
  -EOT
  -            ;;
  -        perl )
  -            cat >$tmpfile <<'EOT'
  -##
  -##  @FILE@ -- Version Information
  -##  [automatically generated and maintained by GNU shtool]
  -##
  -
  -$@PREFIX@_Version    = 0x@HEX@;
  -$@PREFIX@_VersionStr = "@VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ (@DAY@-@MONTH@-@YEAR@)";
  -$@PREFIX@_Hello      = "This is @NAME@, Version @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ (@DAY@-@MONTH@-@YEAR@)";
  -$@PREFIX@_GNUVersion = "@NAME@ Version @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@";
  -$@PREFIX@_WhatID     = "@(#)@NAME@ Version @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ (@DAY@-@MONTH@-@YEAR@)";
  -$@PREFIX@_RCSIdentID = "\$Id: shtool,v 1.1.1.1 2000/06/18 14:30:49 rse Exp $/";
  -$@PREFIX@_WebID      = "@NAME@/@VERSION@.@REVISION@@BPTYPE@@BPLEVEL@";
  -$@PREFIX@_PlainID    = "@VERSION@.@REVISION@@BPTYPE@@BPLEVEL@";
  -
  -1;
  -EOT
  -            ;;
  -        python )
  -            cat >$tmpfile <<'EOT'
  -##
  -##  @FILE@ -- Version Information
  -##  [automatically generated and maintained by GNU shtool]
  -##
  -
  -@PREFIX@_Version    = 0x@HEX@
  -@PREFIX@_VersionStr = "@VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ (@DAY@-@MONTH@-@YEAR@)"
  -@PREFIX@_Hello      = "This is @NAME@, Version @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ (@DAY@-@MONTH@-@YEAR@)"
  -@PREFIX@_GNUVersion = "@NAME@ Version @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@"
  -@PREFIX@_WhatID     = "@(#)@NAME@ Version @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ (@DAY@-@MONTH@-@YEAR@)"
  -@PREFIX@_RCSIdentID = "$Id: shtool,v 1.1.1.1 2000/06/18 14:30:49 rse Exp $"
  -@PREFIX@_WebID      = "@NAME@/@VERSION@.@REVISION@@BPTYPE@@BPLEVEL@"
  -@PREFIX@_PlainID    = "@VERSION@.@REVISION@@BPTYPE@@BPLEVEL@"
  -
  -EOT
  -            ;;
  -    esac
  +    else 
  +        #   update the version file
       
  -    #   now create the version file
  -    rm -f $FILE >/dev/null 2>&1
  -    sed \
  -        -e "s|@FILE@|$FILE|g" \
  -        -e "s|@FILESTR@|$FILESTR|g" \
  -        -e "s|@PREFIX@|$PREFIX|g" \
  -        -e "s|@NAME@|$NAME|g" \
  -        -e "s|@HEX@|$HEX|g" \
  -        -e "s|@VERSION@|$version|g" \
  -        -e "s|@REVISION@|$revision|g" \
  -        -e "s|@BPTYPE@|$bptype|g" \
  -        -e "s|@BPLEVEL@|$bplevel|g" \
  -        -e "s|@YEAR@|$year|g" \
  -        -e "s|@MONTH@|$month|g" \
  -        -e "s|@DAY@|$day|g" <$tmpfile >$FILE
  -    rm -f $tmpfile >/dev/null 2>&1
  -    exit 0
  +        #   pre-generate various strings
  +        triple="${ver}.${rev}${typ}${lev}"
  +        vHex="$hex"
  +        vShort="${triple}"
  +        vLong="${triple} (${tim})"
  +        vTeX="This is ${name}, Version ${triple} (${tim})"
  +        vGNU="${name} ${triple} (${tim})"
  +        vWeb="${name}/${triple}"
  +        vSCCS="@(#)${name} ${triple} (${tim})"
  +        vRCS="\$Id: shtool,v 1.2 2000/07/18 15:27:59 rse Exp ${name} ${triple} (${tim}) \$"
  +    
  +        #   determine string out of filename
  +        #   (do NOT try to optimize this in any way because of portability)
  +        filestr=`echo $file |\
  +                 tr 'abcdefghijklmnopqrstuvwxyz./%+' \
  +                    'ABCDEFGHIJKLMNOPQRSTUVWXYZ____' | sed -e 's/-/_/g'`
  +    
  +        #   generate uppercase prefix
  +        prefixupper=`echo $prefix |\
  +                     tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
  +        
  +        #   create the version file according the the selected language
  +        echo "new version: ${vLong}"
  +    
  +        cp /dev/null $file
  +        case $opt_l in
  +            txt )
  +                echo >>$file ""
  +                echo >>$file "  ${file} -- Version Information for ${name} (syntax: Text)"
  +                echo >>$file "  [automatically generated and maintained by GNU shtool]"
  +                echo >>$file ""
  +                echo >>$file "  $vTeX"
  +                echo >>$file ""
  +                ;;
  +            c )
  +                echo >>$file "/*"
  +                echo >>$file "**  ${file} -- Version Information for ${name} (syntax: C/C++)"
  +                echo >>$file "**  [automatically generated and maintained by GNU shtool]"
  +                echo >>$file "*/"
  +                echo >>$file ""
  +                echo >>$file "#ifdef _${filestr}_AS_HEADER_"
  +                echo >>$file ""
  +                echo >>$file "#ifndef _${filestr}_"
  +                echo >>$file "#define _${filestr}_"
  +                echo >>$file ""
  +                echo >>$file "#define ${prefixupper}VERSION ${vHex}"
  +                echo >>$file ""
  +                echo >>$file "typedef struct {"
  +                echo >>$file "    const int   v_hex;"
  +                echo >>$file "    const char *v_short;"
  +                echo >>$file "    const char *v_long;"
  +                echo >>$file "    const char *v_tex;"
  +                echo >>$file "    const char *v_gnu;"
  +                echo >>$file "    const char *v_web;"
  +                echo >>$file "    const char *v_sccs;"
  +                echo >>$file "    const char *v_rcs;"
  +                echo >>$file "} ${prefix}version_t;"
  +                echo >>$file ""
  +                echo >>$file "extern ${prefix}version_t ${prefix}version;"
  +                echo >>$file ""
  +                echo >>$file "#endif /* _${filestr}_ */"
  +                echo >>$file ""
  +                echo >>$file "#else /* _${filestr}_AS_HEADER_ */"
  +                echo >>$file ""
  +                echo >>$file "#define _${filestr}_AS_HEADER_"
  +                echo >>$file "#include \"${file}\""
  +                echo >>$file "#undef  _${filestr}_AS_HEADER_"
  +                echo >>$file ""
  +                echo >>$file "${prefix}version_t ${prefix}version = {"
  +                echo >>$file "    ${vHex},"
  +                echo >>$file "    \"${vShort}\","
  +                echo >>$file "    \"${vLong}\","
  +                echo >>$file "    \"${vTeX}\","
  +                echo >>$file "    \"${vGNU}\","
  +                echo >>$file "    \"${vWeb}\","
  +                echo >>$file "    \"${vSCCS}\","
  +                echo >>$file "    \"${vRCS}\""
  +                echo >>$file "};"
  +                echo >>$file ""
  +                echo >>$file "#endif /* _${filestr}_AS_HEADER_ */"
  +                echo >>$file ""
  +                ;;
  +            perl )
  +                echo >>$file "##"
  +                echo >>$file "##  ${file} -- Version Information for ${name} (syntax: Perl)"
  +                echo >>$file "##  [automatically generated and maintained by GNU shtool]"
  +                echo >>$file "##"
  +                echo >>$file ""
  +                echo >>$file "my \$${prefix}version = {"
  +                echo >>$file "    'v_hex'   => ${vHex},"
  +                echo >>$file "    'v_short' => \"${vShort}\","
  +                echo >>$file "    'v_long'  => \"${vLong}\","
  +                echo >>$file "    'v_tex'   => \"${vTeX}\","
  +                echo >>$file "    'v_gnu'   => \"${vGNU}\","
  +                echo >>$file "    'v_web'   => \"${vWeb}\","
  +                echo >>$file "    'v_sccs'  => \"${vSCCS}\","
  +                echo >>$file "    'v_rcs'   => \"\\${vRCS}/\""
  +                echo >>$file "};"
  +                echo >>$file ""
  +                echo >>$file "1;"
  +                echo >>$file ""
  +                ;;
  +            * ) echo "$msgprefix:Error: invalid argument to option \`-l': \`$opt_l'" 1>&2
  +                exit 1
  +                ;;
  +        esac
  +    fi
       ;;
   
   path )
  @@ -1378,10 +1354,8 @@
       #   MAGIC SITUATION
       #   C pre-processor (cpp)
       if [ ".$opt_m" = .yes ] && [ ".$namelist" = .cpp ]; then
  -        cat >$tmpfile.c <<'EOT'
  -#include <assert.h>
  -Syntax Error
  -EOT
  +        echo >$tmpfile.c "#include <assert.h>"
  +        echo >>$tmpfile.c "Syntax Error"
           #   1. try the standard cc -E approach
           cpp="${CC-cc} -E"
           (eval "$cpp $tmpfile.c >/dev/null") 2>$tmpfile.out
  @@ -1426,7 +1400,7 @@
               path=`echo $path | sed -e 's;/*$;;'`
               if [ $minusx "$path/$name" ] && [ ! -d "$path/$name" ]; then
                   if [ ".$opt_s" != .yes ]; then
  -                    echo "$path/$name" 2>&1
  +                    echo "$path/$name"
                   fi
                   exit 0
               fi

From ossp-cvs-owner@ossp.org  Tue Jul 18 17:31:59 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e6IFVxI95938; Tue, 18 Jul 2000 17:31:59 +0200 (CEST)
Date: Tue, 18 Jul 2000 17:31:59 +0200 (CEST)
Message-Id: <200007181531.e6IFVxI95938@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela .cvsignore
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   18-Jul-2000 17:31:58
  Branch: HEAD                             Handle: 2000071816315800

  Added files:
    ossp-pkg/shiela         .cvsignore

  Log:
    Ignore Makefile

  Summary:
    Revision    Changes     Path
    1.1         +1  -0      ossp-pkg/shiela/.cvsignore
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  Makefile

From ossp-cvs-owner@ossp.org  Tue Jul 18 17:39:57 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e6IFdv396508; Tue, 18 Jul 2000 17:39:57 +0200 (CEST)
Date: Tue, 18 Jul 2000 17:39:57 +0200 (CEST)
Message-Id: <200007181539.e6IFdv396508@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   18-Jul-2000 17:39:51
  Branch: HEAD                             Handle: 2000071816395100

  Modified files:
    ossp-pkg/shiela         TODO

  Log:
    More todo

  Summary:
    Revision    Changes     Path
    1.2         +4  -0      ossp-pkg/shiela/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/TODO
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 TODO
  --- ossp-pkg/shiela/TODO	2000/06/18 14:30:49	1.1.1.1
  +++ ossp-pkg/shiela/TODO	2000/07/18 15:39:51	1.2
  @@ -12,6 +12,10 @@
     For version 1.0:
     ----------------
   
  +  o  We could replace "cvs update -p -rX file" with "cvs diff -N -u3
  +     -Dyesterday file" to allow people to pass the log email directly to patch(1)
  +     and this way let new files beeing added. Same for deleted files.
  +
     o  Subject can be compressed by reducing common prefix and 
        just repeating the subdirs together with the files:
        << [CVS] OSSP: ossp-pkg/ossp-cvs README.OSSP ossp-pkg/ossp-cvs/src cvsrc.c

From ossp-cvs-owner@ossp.org  Tue Jul 18 17:44:53 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e6IFiqA96887; Tue, 18 Jul 2000 17:44:52 +0200 (CEST)
Date: Tue, 18 Jul 2000 17:44:52 +0200 (CEST)
Message-Id: <200007181544.e6IFiqA96887@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: CVSROOT                          Date:   18-Jul-2000 17:44:52
  Branch: HEAD                             Handle: 2000071816445100

  Modified files:
    CVSROOT                 modules

  Log:
    Add missing packages

  Summary:
    Revision    Changes     Path
    1.21        +9  -0      CVSROOT/modules
  ____________________________________________________________________________

  Index: CVSROOT/modules
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 modules
  --- CVSROOT/modules	2000/06/25 13:36:04	1.20
  +++ CVSROOT/modules	2000/07/18 15:44:51	1.21
  @@ -60,6 +60,15 @@
   ossp-play       ossp-play  
   
   #   the OSSP sub-modules
  +adns            ossp-pkg/adns
   cvs             ossp-pkg/cvs
  +eperl           ossp-pkg/eperl
  +ev              ossp-pkg/ev
  +jitterbug       ossp-pkg/jitterbug
  +mm              ossp-pkg/mm
  +pcre            ossp-pkg/pcre
  +petidomo        ossp-pkg/petidomo
  +sfio            ossp-pkg/sfio
   shiela          ossp-pkg/shiela
  +str             ossp-pkg/str
   

From ossp-cvs-owner@ossp.org  Wed Jul 19 09:43:26 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e6J7hJk64450; Wed, 19 Jul 2000 09:43:19 +0200 (CEST)
Date: Wed, 19 Jul 2000 09:43:19 +0200 (CEST)
Message-Id: <200007190743.e6J7hJk64450@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvs README.OSSP ossp-pkg/cvs/src hash.c options.h...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   19-Jul-2000 09:43:19
  Branch: HEAD                             Handle: 2000071908431701

  Modified files:
    ossp-pkg/cvs            README.OSSP
    ossp-pkg/cvs/src        hash.c options.h.in

  Log:
    Replace hash function with a better one

  Summary:
    Revision    Changes     Path
    1.43        +6  -0      ossp-pkg/cvs/README.OSSP
    1.2         +9  -0      ossp-pkg/cvs/src/hash.c
    1.29        +1  -0      ossp-pkg/cvs/src/options.h.in
  ____________________________________________________________________________

  Index: ossp-pkg/cvs/README.OSSP
  ============================================================
  $ cvs diff -u -r1.42 -r1.43 README.OSSP
  --- ossp-pkg/cvs/README.OSSP	2000/06/22 16:36:33	1.42
  +++ ossp-pkg/cvs/README.OSSP	2000/07/19 07:43:17	1.43
  @@ -326,6 +326,12 @@
       the host.
       [Origin: Ralf S. Engelschall]
   
  +  OSSP_PATCH_HASHFUNC:
  +    This replaces the obscure hash function in src/hash.c with D.J.Berstein's
  +    popular "times 33" function which is faster to compute and still
  +    distributes very well.
  +    [Origin: Ralf S. Engelschall]
  +
     OSSP_PATCH_COSMETICS:
       This just enables some cosmetic changes to various output messages.
       [Origin: Ralf S. Engelschall]
  Index: ossp-pkg/cvs/src/hash.c
  ============================================================
  $ cvs diff -u -r1.1.1.2 -r1.2 hash.c
  --- ossp-pkg/cvs/src/hash.c	2000/06/10 18:19:29	1.1.1.2
  +++ ossp-pkg/cvs/src/hash.c	2000/07/19 07:43:18	1.2
  @@ -25,17 +25,25 @@
       const char *key;
   {
       unsigned int h = 0;
  +#ifndef OSSP_PATCH_HASHFUNC
       unsigned int g;
  +#endif
   
       assert(key != NULL);
       
       while (*key != 0)
       {
  +#ifdef OSSP_PATCH_HASHFUNC
  +        /* D.J. Bernstein's popular times 33 function 
  +           (fast and distributes very well) */
  +        h = ((h << 5) + h) + FOLD_FN_CHAR(*key++);
  +#else
   	unsigned int c = *key++;
   	/* The FOLD_FN_CHAR is so that findnode_fn works.  */
   	h = (h << 4) + FOLD_FN_CHAR (c);
   	if ((g = h & 0xf0000000) != 0)
   	    h = (h ^ (g >> 24)) ^ g;
  +#endif
       }
   
       return (h % HASHSIZE);
  Index: ossp-pkg/cvs/src/options.h.in
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 options.h.in
  --- ossp-pkg/cvs/src/options.h.in	2000/06/22 16:34:11	1.28
  +++ ossp-pkg/cvs/src/options.h.in	2000/07/19 07:43:18	1.29
  @@ -231,6 +231,7 @@
   #define OSSP_PATCH_PSERVERD
   #define OSSP_PATCH_MAPROOT
   #define OSSP_PATCH_COSMETICS 
  +#define OSSP_PATCH_HASHFUNC
   /* problematic changes, because they break "make check" */
   #undef OSSP_PATCH_COSMETICS_HARD
   #undef OSSP_PATCH_MERGENOKEYWORD

From ossp-cvs-owner@ossp.org  Fri Jul 21 23:46:51 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e6LLkp857833; Fri, 21 Jul 2000 23:46:51 +0200 (CEST)
Date: Fri, 21 Jul 2000 23:46:51 +0200 (CEST)
Message-Id: <200007212146.e6LLkp857833@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvs README.OSSP ossp-pkg/cvs/src checkin.c option...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   21-Jul-2000 23:46:50
  Branch: HEAD                             Handle: 2000072122464901

  Modified files:
    ossp-pkg/cvs            README.OSSP
    ossp-pkg/cvs/src        checkin.c options.h.in update.c

  Log:
    New stuff from RCVS

  Summary:
    Revision    Changes     Path
    1.44        +14 -0      ossp-pkg/cvs/README.OSSP
    1.4         +10 -0      ossp-pkg/cvs/src/checkin.c
    1.30        +3  -0      ossp-pkg/cvs/src/options.h.in
    1.12        +17 -0      ossp-pkg/cvs/src/update.c
  ____________________________________________________________________________

  Index: ossp-pkg/cvs/README.OSSP
  ============================================================
  $ cvs diff -u -r1.43 -r1.44 README.OSSP
  --- ossp-pkg/cvs/README.OSSP	2000/07/19 07:43:17	1.43
  +++ ossp-pkg/cvs/README.OSSP	2000/07/21 21:46:49	1.44
  @@ -332,6 +332,20 @@
       distributes very well.
       [Origin: Ralf S. Engelschall]
   
  +  OSSP_PATCH_UPDATECMERGE:
  +    Let "cvs update -C" to not complain if a file was modified and
  +    would need merging. Instead just checkout the latest version.
  +    [Origin: Ralf S. Engelschall]
  +
  +  OSSP_PATCH_ADDFILEATTR:
  +    Let the default file attrbuters set on newly added files.
  +    [Origin: Noel Yap]
  +
  +  OSSP_PATCH_BUGFIX:
  +    This enabled various bugfixes which are still not present in the
  +    official CVS version.
  +    [Origin: Ralf S. Engelschall]
  +
     OSSP_PATCH_COSMETICS:
       This just enables some cosmetic changes to various output messages.
       [Origin: Ralf S. Engelschall]
  Index: ossp-pkg/cvs/src/checkin.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 checkin.c
  --- ossp-pkg/cvs/src/checkin.c	2000/06/22 15:50:32	1.3
  +++ ossp-pkg/cvs/src/checkin.c	2000/07/21 21:46:50	1.4
  @@ -139,6 +139,16 @@
   	    history_write (type, NULL, vers->vn_rcs,
   			   finfo->file, finfo->repository);
   
  +#ifdef OSSP_PATCH_ADDFILEATTR
  +	    if (type == 'A') {
  +	        char *attr;
  +	        if ((attr = fileattr_getall(NULL)) != NULL) {
  +	            fileattr_setall(finfo->file, attr);
  +	            free(attr);
  +	        }
  +	    }
  +#endif
  +
   	    if (tocvsPath)
   		if (unlink_file_dir (tocvsPath) < 0)
   		    error (0, errno, "cannot remove %s", tocvsPath);
  Index: ossp-pkg/cvs/src/options.h.in
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 options.h.in
  --- ossp-pkg/cvs/src/options.h.in	2000/07/19 07:43:18	1.29
  +++ ossp-pkg/cvs/src/options.h.in	2000/07/21 21:46:50	1.30
  @@ -232,6 +232,9 @@
   #define OSSP_PATCH_MAPROOT
   #define OSSP_PATCH_COSMETICS 
   #define OSSP_PATCH_HASHFUNC
  +#define OSSP_PATCH_UPDATECMERGE
  +#define OSSP_PATCH_ADDFILEATTR
  +#define OSSP_PATCH_BUGFIX
   /* problematic changes, because they break "make check" */
   #undef OSSP_PATCH_COSMETICS_HARD
   #undef OSSP_PATCH_MERGENOKEYWORD
  Index: ossp-pkg/cvs/src/update.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 update.c
  --- ossp-pkg/cvs/src/update.c	2000/07/12 15:31:54	1.11
  +++ ossp-pkg/cvs/src/update.c	2000/07/21 21:46:50	1.12
  @@ -654,6 +654,23 @@
   		write_letter (finfo, 'C');
   		break;
   	    case T_NEEDS_MERGE:		/* needs merging */
  +#ifdef OSSP_PATCH_UPDATECMERGE
  +                if (toss_local_changes) {
  +                    char *bakname;
  +                    bakname = backup_file (finfo->file, vers->vn_user);
  +#ifdef SERVER_SUPPORT
  +                    if ((! really_quiet) && (! server_active))
  +#else /* ! SERVER_SUPPORT */
  +                    if (! really_quiet)
  +#endif /* SERVER_SUPPORT */
  +                        (void) printf ("(Locally modified %s moved to %s)\n",
  +                                       finfo->file, bakname);
  +                    free (bakname);
  +                    status = T_CHECKOUT;
  +                    retval = checkout_file (finfo, vers, 0, 0, 1);
  +                }
  +                else
  +#endif
   		retval = merge_file (finfo, vers);
   		break;
   	    case T_MODIFIED:		/* locally modified */

From ossp-cvs-owner@ossp.org  Sun Jul 23 16:44:10 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e6NEi8F29158; Sun, 23 Jul 2000 16:44:08 +0200 (CEST)
Date: Sun, 23 Jul 2000 16:44:08 +0200 (CEST)
Message-Id: <200007231444.e6NEi8F29158@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvs/src create_adm.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   23-Jul-2000 16:44:08
  Branch: HEAD                             Handle: 2000072315440600

  Modified files:
    ossp-pkg/cvs/src        create_adm.c

  Log:
    Add support for local CVS/Template

  Summary:
    Revision    Changes     Path
    1.2         +35 -2      ossp-pkg/cvs/src/create_adm.c
  ____________________________________________________________________________

  Index: ossp-pkg/cvs/src/create_adm.c
  ============================================================
  $ cvs diff -u -r1.1.1.2 -r1.2 create_adm.c
  --- ossp-pkg/cvs/src/create_adm.c	2000/07/01 13:01:13	1.1.1.2
  +++ ossp-pkg/cvs/src/create_adm.c	2000/07/23 14:44:06	1.2
  @@ -21,6 +21,23 @@
      or after which CVS might do something non-useful.  If WARN is zero, then
      don't print warnings; all errors are fatal then.  */
   
  +#ifdef OSSP_PATCH_CVSROOT
  +static int local_template_cb(char *repository, char *template)
  +{
  +    copy_file(template, CVSADM_TEMPLATE);
  +    return 0;
  +}
  +
  +static void local_template(char *update_dir, char *repository)
  +{
  +    cvsroot_t *e;
  +
  +    if ((e = cvsroot_lookup(NULL, NULL, CVSroot_original)) != NULL)
  +        Parse_Info(CVSROOTADM_RCSINFO, repository, local_template_cb, 1);
  +    return;
  +}
  +#endif
  +
   int
   Create_Admin (dir, update_dir, repository, tag, date, nonbranch, warn,
   	      dotemplate)
  @@ -180,6 +197,20 @@
   	fprintf (stderr, "%c<- Create_Admin\n",
   		 (server_active) ? 'S' : ' ');
       }
  +#endif
  +#ifdef OSSP_PATCH_CVSROOT
  +    /* Under our "cvs root" feature, checkouts are performed
  +       locally (from the repository copy and without C/S), but commits
  +       are performed remotely (to the master repository with C/S).
  +       Unfortunately, CVS "optimizes" processing and doesn't provide
  +       CVS/Template files on non-C/S checkouts. This would mean that
  +       if "cvs root" feature is used, the rcsinfo-configured templates
  +       are never used. So, if and only if we do a non-C/S checkout (or
  +       similar operation which creates CVS/Template) _and_ the current
  +       CVSROOT is known to be a repository copy, we force the creation
  +       of CVS/Template. */
  +    if (!server_active && !client_active && dotemplate)
  +        local_template(update_dir, repository);
   #endif
   
       free (reposcopy);

From ossp-cvs-owner@ossp.org  Sun Jul 23 19:40:14 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e6NHeDv42010; Sun, 23 Jul 2000 19:40:13 +0200 (CEST)
Date: Sun, 23 Jul 2000 19:40:13 +0200 (CEST)
Message-Id: <200007231740.e6NHeDv42010@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvs .cvsignore COPYING COPYING.LIB ChangeLog.zoo ...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   23-Jul-2000 19:40:13
  Branch: vendor                           Handle: 1970010101000000

  Modified files:           (Branch: vendor)
    ossp-pkg/cvs/src        mkmodules.c sanity.sh
  Touched files:            (Branch: vendor)
    ossp-pkg/cvs            .cvsignore COPYING COPYING.LIB ChangeLog.zoo
                            INSTALL Makefile.in NEWS README acconfig.h
                            config.h.in configure configure.in
    ossp-pkg/cvs/diff       .cvsignore Makefile.in analyze.c cmpbuf.c cmpbuf.h
                            context.c diagmeet.note diff.c diff.h diff3.c
                            diffrun.h dir.c ed.c ifdef.c io.c normal.c side.c
                            system.h util.c version.c
    ossp-pkg/cvs/doc        .cvsignore FAQ HACKING Makefile.in RCSFILES TESTS
                            TODO cvs-paper.ms cvs.texinfo cvsclient.texi
    ossp-pkg/cvs/lib        .cvsignore Makefile.in argmatch.c dup2.c fncase.c
                            fnmatch.c fnmatch.h ftruncate.c getdate.c
                            getdate.y getline.c getline.h getopt.c getopt.h
                            getopt1.c hostname.c md5.c md5.h memmove.c mkdir.c
                            regex.c regex.h rename.c savecwd.c savecwd.h
                            sighandle.c strerror.c stripslash.c strstr.c
                            strtoul.c system.h valloc.c wait.h waitpid.c
                            xgetwd.c yesno.c
    ossp-pkg/cvs/man        .cvsignore Makefile.in cvs.1 cvs.5
    ossp-pkg/cvs/src        .cvsignore Makefile.in add.c admin.c buffer.c
                            buffer.h checkin.c checkout.c classify.c client.c
                            client.h commit.c create_adm.c cvs.h cvsrc.c
                            diff.c edit.c edit.h entries.c error.c error.h
                            expand_path.c fileattr.c fileattr.h filesubr.c
                            find_names.c hardlink.c hardlink.h hash.c hash.h
                            history.c ignore.c import.c lock.c log.c login.c
                            logmsg.c main.c modules.c myndbm.c myndbm.h
                            no_diff.c options.h.in parseinfo.c patch.c rcs.c
                            rcs.h rcscmds.c recurse.c release.c remove.c
                            repos.c root.c rtag.c run.c scramble.c server.c
                            server.h status.c subr.c tag.c update.c update.h
                            vers_ts.c version.c watch.c watch.h wrapper.c
                            zlib.c
    ossp-pkg/cvs/zlib       .cvsignore Makefile.in README adler32.c
                            algorithm.doc compress.c crc32.c deflate.c
                            deflate.h gzio.c infblock.c infblock.h infcodes.c
                            infcodes.h inffast.c inffast.h inflate.c
                            inftrees.c inftrees.h infutil.c infutil.h trees.c
                            uncompr.c zconf.h zlib.h zutil.c zutil.h

  Log:
    Import of vendor CVS version, snapshot 20000723
    
    [Release Tag: CVS_20000723]

  Summary:
    Revision    Changes     Path
    1.1.1.3     +0  -0      ossp-pkg/cvs/src/mkmodules.c
    1.1.1.12    +0  -0      ossp-pkg/cvs/src/sanity.sh
  ____________________________________________________________________________

  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/mkmodules.c?cvsroot=ossp&r1=1.1.1.2&r2=1.1.1.3
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/sanity.sh?cvsroot=ossp&r1=1.1.1.11&r2=1.1.1.12

From ossp-cvs-owner@ossp.org  Sun Jul 23 19:45:34 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e6NHjXU42414; Sun, 23 Jul 2000 19:45:33 +0200 (CEST)
Date: Sun, 23 Jul 2000 19:45:33 +0200 (CEST)
Message-Id: <200007231745.e6NHjXU42414@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvs/src mkmodules.c sanity.sh
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   23-Jul-2000 19:45:27
  Branch: HEAD                             Handle: 2000072318452600

  Modified files:
    ossp-pkg/cvs/src        mkmodules.c sanity.sh

  Log:
    Merge in conflicts

  Summary:
    Revision    Changes     Path
    1.5         +5  -0      ossp-pkg/cvs/src/mkmodules.c
    1.9         +6  -2      ossp-pkg/cvs/src/sanity.sh
  ____________________________________________________________________________

  Index: ossp-pkg/cvs/src/mkmodules.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 mkmodules.c
  --- ossp-pkg/cvs/src/mkmodules.c	2000/05/12 20:14:37	1.4
  +++ ossp-pkg/cvs/src/mkmodules.c	2000/07/23 17:45:26	1.5
  @@ -322,10 +322,15 @@
       "# Set this to \"no\" if pserver shouldn't check system users/passwords\n",
       "#SystemAuth=no\n",
       "\n",
  +    "# Put CVS lock files in this directory rather than directly in the repository.\n",
  +    "#LockDir=/var/lock/cvs\n",
  +    "\n",
  +#ifdef PRESERVE_PERMISSIONS_SUPPORT
       "# Set `PreservePermissions' to `yes' to save file status information\n",
       "# in the repository.\n",
       "#PreservePermissions=no\n",
       "\n",
  +#endif
       "# Set `TopLevelAdmin' to `yes' to create a CVS directory at the top\n",
       "# level of the new working directory when using the `cvs checkout'\n",
       "# command.\n",
  Index: ossp-pkg/cvs/src/sanity.sh
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 sanity.sh
  --- ossp-pkg/cvs/src/sanity.sh	2000/07/14 15:19:04	1.8
  +++ ossp-pkg/cvs/src/sanity.sh	2000/07/23 17:45:26	1.9
  @@ -7932,6 +7932,7 @@
   EOF
   
   	  dotest modules5-7 "${testcvs} ci -m 'add modules' CVSROOT/modules" \
  +"" \
   "Checking in CVSROOT/modules;
   ${TESTDIR}/cvsroot/CVSROOT/modules,v  <--  modules
   new revision: 1\.[0-9]*; previous revision: 1\.[0-9]*
  @@ -8214,7 +8215,9 @@
   ${CVSROOT_DIRNAME}/CVSROOT/modules,v  <--  modules
   new revision: 1\.[0-9]*; previous revision: 1\.[0-9]*
   done
  -${PROG} [a-z]*: Rebuilding administrative file database"
  +${PROG} [a-z]*: Rebuilding administrative file database" \
  +"${PROG} [a-z]*: Examining .
  +${PROG} [a-z]*: Examining CVSROOT"
   	  rm -rf CVS CVSROOT;
   
   	  # Create the various modules
  @@ -9561,7 +9564,8 @@
   ${CVSROOT_DIRNAME}/CVSROOT/modules,v  <--  modules
   new revision: 1\.[0-9]*; previous revision: 1\.[0-9]*
   done
  -${PROG} [a-z]*: Rebuilding administrative file database"
  +${PROG} [a-z]*: Rebuilding administrative file database" \
  +"${PROG} [a-z]*: Examining CVSROOT"
   	  rm -rf CVS CVSROOT
   
   	  mkdir ${CVSROOT_DIRNAME}/mod1 ${CVSROOT_DIRNAME}/moda

From ossp-cvs-owner@ossp.org  Sun Jul 23 19:50:41 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e6NHoeG42802; Sun, 23 Jul 2000 19:50:40 +0200 (CEST)
Date: Sun, 23 Jul 2000 19:50:40 +0200 (CEST)
Message-Id: <200007231750.e6NHoeG42802@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvs/src import.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   23-Jul-2000 19:50:39
  Branch: HEAD                             Handle: 2000072318503900

  Modified files:
    ossp-pkg/cvs/src        import.c

  Log:
    Shorten import output

  Summary:
    Revision    Changes     Path
    1.13        +8  -0      ossp-pkg/cvs/src/import.c
  ____________________________________________________________________________

  Index: ossp-pkg/cvs/src/import.c
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 import.c
  --- ossp-pkg/cvs/src/import.c	2000/07/12 15:31:53	1.12
  +++ ossp-pkg/cvs/src/import.c	2000/07/23 17:50:39	1.13
  @@ -467,7 +467,11 @@
   			       "Use the following command to help the merge:");
   	    cvs_output_tagged ("newline", NULL);
   	    cvs_output_tagged ("newline", NULL);
  +#ifdef OSSP_PATCH_COSMETICS
  +	    cvs_output_tagged ("text", "    ");
  +#else
   	    cvs_output_tagged ("text", "\t");
  +#endif
   	    cvs_output_tagged ("text", program_name);
   	    if (CVSroot_cmdline != NULL)
   	    {
  @@ -497,7 +501,11 @@
   			conflicts);
   	(void) fprintf (logfp,
   			"Use the following command to help the merge:\n\n");
  +#ifdef OSSP_PATCH_COSMETICS
  +	(void) fprintf (logfp, "    %s checkout ", program_name);
  +#else
   	(void) fprintf (logfp, "\t%s checkout ", program_name);
  +#endif
   	(void) fprintf (logfp, "-j%s:yesterday -j%s %s\n\n",
   			argv[1], argv[1], argv[0]);
       }

From ossp-cvs-owner@ossp.org  Sun Jul 23 19:53:45 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e6NHrjV43037; Sun, 23 Jul 2000 19:53:45 +0200 (CEST)
Date: Sun, 23 Jul 2000 19:53:45 +0200 (CEST)
Message-Id: <200007231753.e6NHrjV43037@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvs/src main.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   23-Jul-2000 19:53:45
  Branch: HEAD                             Handle: 2000072318534400

  Modified files:
    ossp-pkg/cvs/src        main.c

  Log:
    Typo

  Summary:
    Revision    Changes     Path
    1.22        +1  -1      ossp-pkg/cvs/src/main.c
  ____________________________________________________________________________

  Index: ossp-pkg/cvs/src/main.c
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 main.c
  --- ossp-pkg/cvs/src/main.c	2000/07/12 15:50:09	1.21
  +++ ossp-pkg/cvs/src/main.c	2000/07/23 17:53:44	1.22
  @@ -1251,7 +1251,7 @@
                           if (e->slavepath[0] != '\0') { 
                               /* command does not modify repository and we still operare on
                                  the master repository, so switch to the slave repository, 
  -                               because it is faster per definition. */
  +                               because it is faster by definition. */
                               if (!quiet) {
                                   fprintf(stderr, "%s: switching to SLAVE location of repository `%s'\n", program_name, e->nickname);
                                   fprintf(stderr, "%s: %s --> %s\n", program_name, e->masterpath, e->slavepath);

From ossp-cvs-owner@ossp.org  Mon Jul 24 18:28:30 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e6OGSSD42123; Mon, 24 Jul 2000 18:28:28 +0200 (CEST)
Date: Mon, 24 Jul 2000 18:28:28 +0200 (CEST)
Message-Id: <200007241628.e6OGSSD42123@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvs/src create_adm.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   24-Jul-2000 18:28:28
  Branch: HEAD                             Handle: 2000072417282700

  Modified files:
    ossp-pkg/cvs/src        create_adm.c

  Log:
    Manually do copy to avoid problems

  Summary:
    Revision    Changes     Path
    1.3         +19 -1      ossp-pkg/cvs/src/create_adm.c
  ____________________________________________________________________________

  Index: ossp-pkg/cvs/src/create_adm.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 create_adm.c
  --- ossp-pkg/cvs/src/create_adm.c	2000/07/23 14:44:06	1.2
  +++ ossp-pkg/cvs/src/create_adm.c	2000/07/24 16:28:27	1.3
  @@ -24,7 +24,25 @@
   #ifdef OSSP_PATCH_CVSROOT
   static int local_template_cb(char *repository, char *template)
   {
  -    copy_file(template, CVSADM_TEMPLATE);
  +    FILE *fpIN, *fpOUT;
  +    char buf[1024];
  +    size_t n;
  +
  +    if ((fpOUT = CVS_FOPEN(CVSADM_TEMPLATE, "w+")) == NULL)
  +        error(1, errno, "cannot open %s for writing", CVSADM_TEMPLATE);
  +    if ((fpIN = CVS_FOPEN(template, "r")) == NULL)
  +        error(1, errno, "cannot open %s for reading", template);
  +    while (!feof(fpIN)) {
  +        n = fread(buf, 1, sizeof buf, fpIN);
  +        if (n == 0) {
  +            if (ferror(fpIN))
  +                error(0, errno, "cannot read template file %s", template);
  +            break;
  +        }
  +        fwrite(buf, 1, n, fpOUT);
  +    }
  +    fclose(fpIN);
  +    fclose(fpOUT);
       return 0;
   }
   

From ossp-cvs-owner@ossp.org  Tue Jul 25 12:01:35 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e6PA1XM23828; Tue, 25 Jul 2000 12:01:33 +0200 (CEST)
Date: Tue, 25 Jul 2000 12:01:33 +0200 (CEST)
Message-Id: <200007251001.e6PA1XM23828@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvs acconfig.h config.h.in configure configure.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   25-Jul-2000 12:01:33
  Branch: HEAD                             Handle: 2000072511013200

  Modified files:
    ossp-pkg/cvs            acconfig.h config.h.in configure configure.in

  Log:
    Fix pserverd code for SVR4

  Summary:
    Revision    Changes     Path
    1.2         +7  -0      ossp-pkg/cvs/acconfig.h
    1.2         +45 -25     ossp-pkg/cvs/config.h.in
    1.15        BLOB        ossp-pkg/cvs/configure
    1.15        +2  -0      ossp-pkg/cvs/configure.in
  ____________________________________________________________________________

  Index: ossp-pkg/cvs/acconfig.h
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 acconfig.h
  --- ossp-pkg/cvs/acconfig.h	2000/04/08 13:11:36	1.1.1.1
  +++ ossp-pkg/cvs/acconfig.h	2000/07/25 10:01:32	1.2
  @@ -43,3 +43,10 @@
   /* Define if the diff library should use setmode for binary files.
      FIXME: Why two different macros for setmode?  */
   #undef HAVE_SETMODE
  +
  +#undef HAVE_CRYPT
  +#undef HAVE_GETSPNAM
  +#undef REGEX_MALLOC
  +#undef _REGEX_RE_COMP
  +
  +
  Index: ossp-pkg/cvs/config.h.in
  ============================================================
  $ cvs diff -u -r1.1.1.3 -r1.2 config.h.in
  --- ossp-pkg/cvs/config.h.in	2000/07/12 06:12:12	1.1.1.3
  +++ ossp-pkg/cvs/config.h.in	2000/07/25 10:01:32	1.2
  @@ -16,6 +16,9 @@
   /* Define to `int' if <sys/types.h> doesn't define.  */
   #undef gid_t
   
  +/* Define if your system has a working fnmatch function.  */
  +#undef HAVE_FNMATCH
  +
   /* Define if you support file names longer than 14 characters.  */
   #undef HAVE_LONG_FILE_NAMES
   
  @@ -97,9 +100,6 @@
   /* Define if you have the connect function.  */
   #undef HAVE_CONNECT
   
  -/* Define if this system supports chown(), link(), and friends.  */
  -#undef PRESERVE_PERMISSIONS_SUPPORT
  -
   /* Define if you have memchr (always for CVS).  */
   #undef HAVE_MEMCHR
   
  @@ -117,8 +117,13 @@
      FIXME: Why two different macros for setmode?  */
   #undef HAVE_SETMODE
   
  -/* Define if you have the crypt function.  */
   #undef HAVE_CRYPT
  +#undef HAVE_GETSPNAM
  +#undef REGEX_MALLOC
  +#undef _REGEX_RE_COMP
  +
  +/* Define if you have the dup2 function.  */
  +#undef HAVE_DUP2
   
   /* Define if you have the fchdir function.  */
   #undef HAVE_FCHDIR
  @@ -138,15 +143,21 @@
   /* Define if you have the getpagesize function.  */
   #undef HAVE_GETPAGESIZE
   
  -/* Define if you have the getspnam function.  */
  -#undef HAVE_GETSPNAM
  -
   /* Define if you have the initgroups function.  */
   #undef HAVE_INITGROUPS
   
   /* Define if you have the krb_get_err_text function.  */
   #undef HAVE_KRB_GET_ERR_TEXT
   
  +/* Define if you have the memmove function.  */
  +#undef HAVE_MEMMOVE
  +
  +/* Define if you have the mkdir function.  */
  +#undef HAVE_MKDIR
  +
  +/* Define if you have the mknod function.  */
  +#undef HAVE_MKNOD
  +
   /* Define if you have the mktemp function.  */
   #undef HAVE_MKTEMP
   
  @@ -156,6 +167,12 @@
   /* Define if you have the readlink function.  */
   #undef HAVE_READLINK
   
  +/* Define if you have the rename function.  */
  +#undef HAVE_RENAME
  +
  +/* Define if you have the setsid function.  */
  +#undef HAVE_SETSID
  +
   /* Define if you have the sigaction function.  */
   #undef HAVE_SIGACTION
   
  @@ -171,6 +188,15 @@
   /* Define if you have the sigvec function.  */
   #undef HAVE_SIGVEC
   
  +/* Define if you have the strerror function.  */
  +#undef HAVE_STRERROR
  +
  +/* Define if you have the strstr function.  */
  +#undef HAVE_STRSTR
  +
  +/* Define if you have the strtoul function.  */
  +#undef HAVE_STRTOUL
  +
   /* Define if you have the tempnam function.  */
   #undef HAVE_TEMPNAM
   
  @@ -180,14 +206,17 @@
   /* Define if you have the tzset function.  */
   #undef HAVE_TZSET
   
  +/* Define if you have the valloc function.  */
  +#undef HAVE_VALLOC
  +
   /* Define if you have the vprintf function.  */
   #undef HAVE_VPRINTF
   
   /* Define if you have the wait3 function.  */
   #undef HAVE_WAIT3
   
  -/* Define if you have the mknod function.  */
  -#undef HAVE_MKNOD
  +/* Define if you have the waitpid function.  */
  +#undef HAVE_WAITPID
   
   /* Define if you have the <direct.h> header file.  */
   #undef HAVE_DIRECT_H
  @@ -213,6 +242,9 @@
   /* Define if you have the <io.h> header file.  */
   #undef HAVE_IO_H
   
  +/* Define if you have the <krb5.h> header file.  */
  +#undef HAVE_KRB5_H
  +
   /* Define if you have the <limits.h> header file.  */
   #undef HAVE_LIMITS_H
   
  @@ -261,29 +293,5 @@
   /* Define if you have the <utime.h> header file.  */
   #undef HAVE_UTIME_H
   
  -/* Define if you have the crypt library (-lcrypt).  */
  -#undef HAVE_LIBCRYPT
  -
   /* Define if you have the gen library (-lgen).  */
   #undef HAVE_LIBGEN
  -
  -/* Define if you have the inet library (-linet).  */
  -#undef HAVE_LIBINET
  -
  -/* Define if you have the nsl library (-lnsl).  */
  -#undef HAVE_LIBNSL
  -
  -/* Define if you have the nsl_s library (-lnsl_s).  */
  -#undef HAVE_LIBNSL_S
  -
  -/* Define if you have the sec library (-lsec).  */
  -#undef HAVE_LIBSEC
  -
  -/* Define if you have the socket library (-lsocket).  */
  -#undef HAVE_LIBSOCKET
  -
  -/* Define to force lib/regex.c to use malloc instead of alloca.  */
  -#undef REGEX_MALLOC
  -
  -/* Define to force lib/regex.c to define re_comp et al.  */
  -#undef _REGEX_RE_COMP
  Index: ossp-pkg/cvs/configure
  ============================================================
  $ cvs update -p -r1.14 configure >configure.old
  $ cvs update -p -r1.15 configure >configure.new
  $ diff -u configure.old configure.new
  Index: ossp-pkg/cvs/configure.in
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 configure.in
  --- ossp-pkg/cvs/configure.in	2000/07/16 12:54:18	1.14
  +++ ossp-pkg/cvs/configure.in	2000/07/25 10:01:32	1.15
  @@ -331,6 +331,8 @@
   dnl  cp ./src/options.h ./src/options.h-SAVED
   dnl)
   
  +AC_CHECK_FUNCS(setsid)
  +
   AC_ARG_ENABLE(ossp,
   [  --disable-ossp          disable the OSSP source patches],dnl
   [dnl

From ossp-cvs-owner@ossp.org  Tue Jul 25 13:18:40 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e6PBIdc29221; Tue, 25 Jul 2000 13:18:39 +0200 (CEST)
Date: Tue, 25 Jul 2000 13:18:39 +0200 (CEST)
Message-Id: <200007251118.e6PBIdc29221@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvs/src subr.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   25-Jul-2000 13:18:39
  Branch: HEAD                             Handle: 2000072512183800

  Modified files:
    ossp-pkg/cvs/src        subr.c

  Log:
    Made time stuff more portable

  Summary:
    Revision    Changes     Path
    1.8         +1  -5      ossp-pkg/cvs/src/subr.c
  ____________________________________________________________________________

  Index: ossp-pkg/cvs/src/subr.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 subr.c
  --- ossp-pkg/cvs/src/subr.c	2000/06/15 06:44:45	1.7
  +++ ossp-pkg/cvs/src/subr.c	2000/07/25 11:18:38	1.8
  @@ -832,17 +832,13 @@
       Y = atoi(buf);
   
       /* assemble parts into a time value */
  +    memset(&tm, 0, sizeof tm);
       tm.tm_sec    = s;
       tm.tm_min    = m;
       tm.tm_hour   = h;
       tm.tm_mday   = D;
       tm.tm_mon    = M - 1;
       tm.tm_year   = Y - 1900;
  -    tm.tm_wday   = 0;
  -    tm.tm_yday   = 0;
  -    tm.tm_isdst  = 0;
  -    tm.tm_zone   = NULL;
  -    tm.tm_gmtoff = 0;
       t = mktime(&tm);
       if (t == -1)
           return 0;

From ossp-cvs-owner@ossp.org  Tue Jul 25 13:53:26 2000
Received: by mail.ossp.org (Sendmail 8.10.2+) for ossp-cvs@ossp.org
	id e6PBrQT31734; Tue, 25 Jul 2000 13:53:26 +0200 (CEST)
Date: Tue, 25 Jul 2000 13:53:26 +0200 (CEST)
Message-Id: <200007251153.e6PBrQT31734@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/iselect Makefile.in configure configure.in iselec...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   25-Jul-2000 13:53:25
  Branch: HEAD                             Handle: 2000072512532401

  Modified files:
    ossp-pkg/iselect        Makefile.in configure configure.in iselect.1
                            iselect_version.c

  Log:
    Merge in pending changes

  Summary:
    Revision    Changes     Path
    1.2         +29 -32     ossp-pkg/iselect/Makefile.in
    1.2         +335 -152   ossp-pkg/iselect/configure
    1.2         +41 -11     ossp-pkg/iselect/configure.in
    1.2         +223 -43    ossp-pkg/iselect/iselect.1
    1.3         +0  -0      ossp-pkg/iselect/iselect_version.c
  ____________________________________________________________________________

  Index: ossp-pkg/iselect/Makefile.in
  ============================================================
  $ cvs diff -u -r1.1.1.4 -r1.2 Makefile.in
  --- ossp-pkg/iselect/Makefile.in	1999/03/31 06:49:32	1.1.1.4
  +++ ossp-pkg/iselect/Makefile.in	2000/07/25 11:53:24	1.2
  @@ -16,7 +16,7 @@
   
   #   installation tools
   SHTOOL  = @SHTOOL@
  -NEWVERS = $(SHTOOL) newvers
  +NEWVERS = $(SHTOOL) version
   INSTALL = $(SHTOOL) install
   MKDIR   = $(SHTOOL) mkdir
   FIXPERM = $(SHTOOL) fixperm
  @@ -53,7 +53,7 @@
   # ------------------------------------------------
   
   _GETDISTINFO = \
  -    _version=`$(NEWVERS) -l c -d short iselect_version.c`; \
  +    _version=`$(NEWVERS) -lc -dshort iselect_version.c`; \
       _date=`date '+%y%m%d_%H%M'`
   
   _BUILDDIST = \
  @@ -67,15 +67,15 @@
       ls -l $${_tarball}
   
   _NEWVERS = \
  -	$(NEWVERS) -l c -p iSelect $$OPT iselect_version.c; \
  -	V=`$(NEWVERS) -l c -d long iselect_version.c`;\
  +	$(NEWVERS) -lc -piSelect $$OPT iselect_version.c; \
  +	V=`$(NEWVERS) -lc -dlong iselect_version.c`;\
   	sed -e "s/Version .*(.*)/Version $$V/g" <README >README.n && mv README.n README; \
   	sed -e "s/Version .*(.*)/Version $$V/g" <iselect_readme.txt >iselect_readme.txt.n && mv iselect_readme.txt.n iselect_readme.txt;
   
   _UPDATEVERS = \
  -	V=`$(NEWVERS) -l c -d short iselect_version.c`;\
  -	$(NEWVERS) -l c -p iSelect -r $$V iselect_version.c; \
  -	V=`$(NEWVERS) -l c -d long iselect_version.c`;\
  +	V=`$(NEWVERS) -lc -dshort iselect_version.c`;\
  +	$(NEWVERS) -lc -piSelect -s $$V iselect_version.c; \
  +	V=`$(NEWVERS) -lc -dlong iselect_version.c`;\
   	sed -e "s/Version .*(.*)/Version $$V/g" <README >README.n && mv README.n README; \
   	sed -e "s/Version .*(.*)/Version $$V/g" <iselect_readme.txt >iselect_readme.txt.n && mv iselect_readme.txt.n iselect_readme.txt;
   
  @@ -96,20 +96,15 @@
       mv /tmp/$${_distname}.tar.gz $${_distname}.tar.gz 
   
   new-version:
  -	OPT="-i v"; $(_NEWVERS)
  -
  +	OPT="-iv"; $(_NEWVERS)
   new-revision:
  -	OPT="-i r"; $(_NEWVERS)
  -
  +	OPT="-ir"; $(_NEWVERS)
   new-betalevel:
  -	OPT="-i b"; $(_NEWVERS)
  -
  +	OPT="-ib"; $(_NEWVERS)
   new-patchlevel:
  -	OPT="-i P"; $(_NEWVERS)
  -
  +	OPT="-iP"; $(_NEWVERS)
   new-release:
  -	OPT="-r $(R)"; $(_NEWVERS)
  -
  +	OPT="-s$(R)"; $(_NEWVERS)
   update-version:
   	$(_UPDATEVERS)
   
  Index: ossp-pkg/iselect/configure
  ============================================================
  $ cvs diff -u -r1.1.1.3 -r1.2 configure
  --- ossp-pkg/iselect/configure	1999/03/31 06:45:41	1.1.1.3
  +++ ossp-pkg/iselect/configure	2000/07/25 11:53:24	1.2
  @@ -2,9 +2,9 @@
   
   # From configure.in Revision: 1.12
   SHTOOL="./etc/shtool"
  -T_MD=`$SHTOOL becho -b 2>/dev/null`
  -T_ME=`$SHTOOL becho -e 2>/dev/null`
  -echo "${T_MD}Configuring for iSelect `./etc/shtool newvers -l c -d long iselect_version.c`${T_ME}"
  +T_MD=`$SHTOOL echo -e %B 2>/dev/null`
  +T_ME=`$SHTOOL echo -e %b 2>/dev/null`
  +echo "${T_MD}Configuring for iSelect `./etc/shtool version -lc -dlong iselect_version.c`${T_ME}"
   echo "Copyright (c) 1996-1999 Ralf S. Engelschall, All Rights Reserved."
   
   
  Index: ossp-pkg/iselect/configure.in
  ============================================================
  $ cvs diff -u -r1.1.1.3 -r1.2 configure.in
  --- ossp-pkg/iselect/configure.in	1999/03/31 06:37:26	1.1.1.3
  +++ ossp-pkg/iselect/configure.in	2000/07/25 11:53:24	1.2
  @@ -4,11 +4,11 @@
   dnl ##
   
   AC_PREREQ(2.10)dnl
  -AC_REVISION($Revision: 1.1.1.3 $)
  +AC_REVISION($Revision: 1.2 $)
   SHTOOL="./etc/shtool"
  -T_MD=`$SHTOOL becho -b 2>/dev/null`
  -T_ME=`$SHTOOL becho -e 2>/dev/null`
  -echo "${T_MD}Configuring for iSelect `./etc/shtool newvers -l c -d long iselect_version.c`${T_ME}"
  +T_MD=`$SHTOOL echo -e %B 2>/dev/null`
  +T_ME=`$SHTOOL echo -e %b 2>/dev/null`
  +echo "${T_MD}Configuring for iSelect `./etc/shtool version -lc -dlong iselect_version.c`${T_ME}"
   echo "Copyright (c) 1996-1999 Ralf S. Engelschall, All Rights Reserved."
   
   AC_INIT(README)
  Index: ossp-pkg/iselect/iselect.1
  ============================================================
  $ cvs diff -u -r1.1.1.4 -r1.2 iselect.1
  --- ossp-pkg/iselect/iselect.1	1999/03/31 06:50:38	1.1.1.4
  +++ ossp-pkg/iselect/iselect.1	2000/07/25 11:53:24	1.2
  @@ -1,9 +1,9 @@
   .rn '' }`
  -''' $RCSfile: iselect.1,v $$Revision: 1.1.1.4 $$Date: 1999/03/31 06:50:38 $
  +''' $RCSfile: iselect.1,v $$Revision: 1.2 $$Date: 2000/07/25 11:53:24 $
   '''
   ''' $Log: iselect.1,v $
  -''' Revision 1.1.1.4  1999/03/31 06:50:38  rse
  -''' Import iSelect 1.2.0
  +''' Revision 1.2  2000/07/25 11:53:24  rse
  +''' Merge in pending changes
   '''
   '''
   .de Sh
  @@ -96,7 +96,7 @@
   .nr % 0
   .rr F
   .\}
  -.TH ISELECT 1 "EN" "31/Mar/99" "Ralf S. Engelschall"
  +.TH ISELECT 1 "EN" "22/Jun/1999" "Ralf S. Engelschall"
   .UC
   .if n .hy 0
   .if n .na
  @@ -246,10 +246,10 @@
   selected.
   .PP
   When you use a specific result via ``\f(CW<s:result text>\fR'\*(R' the \fIresult
  -text\fR can contain ``\f(CW%s[query text]s\fR'\*(R' and ``\f(CW%s[query text]S\fR'\*(R'
  +text\fR can contain ``\f(CW%[query text]s\fR'\*(R' and ``\f(CW%[query text]S\fR'\*(R'
   constructs. For every such construct an interactive query is done and the
  -result replaces the construct.  The ``\f(CW%s[query text]S\fR'\*(R' construct is like
  -``\f(CW%s[query text]s\fR'\*(R' except that the empty string as the query result is not
  +result replaces the construct.  The ``\f(CW%[query text]S\fR'\*(R' construct is like
  +``\f(CW%[query text]s\fR'\*(R' except that the empty string as the query result is not
   accepted on input.
   .PP
   The Curses-based full-screen selection is always done via \fI/dev/tty\fR, because
  Index: ossp-pkg/iselect/iselect_version.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 iselect_version.c
  --- ossp-pkg/iselect/iselect_version.c	2000/07/25 11:44:00	1.2
  +++ ossp-pkg/iselect/iselect_version.c	2000/07/25 11:53:25	1.3
  @@ -24,7 +24,7 @@
   const char iSelect_Hello[]      = "This is iSelect Version 1.2.0 (31-Mar-1999)";
   const char iSelect_GNUVersion[] = "iSelect Version 1.2.0";
   const char iSelect_WhatID[]     = "@(#)iSelect Version 1.2.0 (31-Mar-1999)";
  -const char iSelect_RCSIdentID[] = "$Id: iselect_version.c,v 1.2 2000/07/25 11:44:00 rse Exp $";
  +const char iSelect_RCSIdentID[] = "$Id: iselect_version.c,v 1.3 2000/07/25 11:53:25 rse Exp $";
   const char iSelect_WebID[]      = "iSelect/1.2.0";
   const char iSelect_PlainID[]    = "1.2.0";
   

From ossp-cvs-owner@ossp.org  Sat Jul 29 17:11:47 2000
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id e6TFBkq63964; Sat, 29 Jul 2000 17:11:46 +0200 (CEST)
Date: Sat, 29 Jul 2000 17:11:46 +0200 (CEST)
Message-Id: <200007291511.e6TFBkq63964@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvs .cvsignore COPYING COPYING.LIB ChangeLog.zoo ...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   29-Jul-2000 17:11:46
  Branch: vendor                           Handle: 1970010101000000

  Modified files:           (Branch: vendor)
    ossp-pkg/cvs/doc        cvsclient.texi
    ossp-pkg/cvs/src        admin.c commit.c lock.c modules.c root.c sanity.sh
                            server.c update.c
  Touched files:            (Branch: vendor)
    ossp-pkg/cvs            .cvsignore COPYING COPYING.LIB ChangeLog.zoo
                            INSTALL Makefile.in NEWS README acconfig.h
                            config.h.in configure configure.in
    ossp-pkg/cvs/diff       .cvsignore Makefile.in analyze.c cmpbuf.c cmpbuf.h
                            context.c diagmeet.note diff.c diff.h diff3.c
                            diffrun.h dir.c ed.c ifdef.c io.c normal.c side.c
                            system.h util.c version.c
    ossp-pkg/cvs/doc        .cvsignore FAQ HACKING Makefile.in RCSFILES TESTS
                            TODO cvs-paper.ms cvs.texinfo
    ossp-pkg/cvs/lib        .cvsignore Makefile.in argmatch.c dup2.c fncase.c
                            fnmatch.c fnmatch.h ftruncate.c getdate.c
                            getdate.y getline.c getline.h getopt.c getopt.h
                            getopt1.c hostname.c md5.c md5.h memmove.c mkdir.c
                            regex.c regex.h rename.c savecwd.c savecwd.h
                            sighandle.c strerror.c stripslash.c strstr.c
                            strtoul.c system.h valloc.c wait.h waitpid.c
                            xgetwd.c yesno.c
    ossp-pkg/cvs/man        .cvsignore Makefile.in cvs.1 cvs.5
    ossp-pkg/cvs/src        .cvsignore Makefile.in add.c buffer.c buffer.h
                            checkin.c checkout.c classify.c client.c client.h
                            create_adm.c cvs.h cvsrc.c diff.c edit.c edit.h
                            entries.c error.c error.h expand_path.c fileattr.c
                            fileattr.h filesubr.c find_names.c hardlink.c
                            hardlink.h hash.c hash.h history.c ignore.c
                            import.c log.c login.c logmsg.c main.c mkmodules.c
                            myndbm.c myndbm.h no_diff.c options.h.in
                            parseinfo.c patch.c rcs.c rcs.h rcscmds.c
                            recurse.c release.c remove.c repos.c rtag.c run.c
                            scramble.c server.h status.c subr.c tag.c update.h
                            vers_ts.c version.c watch.c watch.h wrapper.c
                            zlib.c
    ossp-pkg/cvs/zlib       .cvsignore Makefile.in README adler32.c
                            algorithm.doc compress.c crc32.c deflate.c
                            deflate.h gzio.c infblock.c infblock.h infcodes.c
                            infcodes.h inffast.c inffast.h inflate.c
                            inftrees.c inftrees.h infutil.c infutil.h trees.c
                            uncompr.c zconf.h zlib.h zutil.c zutil.h

  Log:
    Import of vendor CVS version, snapshot 20000729
    
    [Release Tag: CVS_20000729]

  Summary:
    Revision    Changes     Path
    1.1.1.4     +0  -0      ossp-pkg/cvs/doc/cvsclient.texi
    1.1.1.4     +0  -0      ossp-pkg/cvs/src/admin.c
    1.1.1.6     +0  -0      ossp-pkg/cvs/src/commit.c
    1.1.1.2     +0  -0      ossp-pkg/cvs/src/lock.c
    1.1.1.5     +0  -0      ossp-pkg/cvs/src/modules.c
    1.1.1.5     +0  -0      ossp-pkg/cvs/src/root.c
    1.1.1.13    +0  -0      ossp-pkg/cvs/src/sanity.sh
    1.1.1.14    +0  -0      ossp-pkg/cvs/src/server.c
    1.1.1.10    +0  -0      ossp-pkg/cvs/src/update.c
  ____________________________________________________________________________

  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/doc/cvsclient.texi?cvsroot=ossp&r1=1.1.1.3&r2=1.1.1.4
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/admin.c?cvsroot=ossp&r1=1.1.1.3&r2=1.1.1.4
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/commit.c?cvsroot=ossp&r1=1.1.1.5&r2=1.1.1.6
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/lock.c?cvsroot=ossp&r1=1.1.1.1&r2=1.1.1.2
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/modules.c?cvsroot=ossp&r1=1.1.1.4&r2=1.1.1.5
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/root.c?cvsroot=ossp&r1=1.1.1.4&r2=1.1.1.5
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/sanity.sh?cvsroot=ossp&r1=1.1.1.12&r2=1.1.1.13
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/server.c?cvsroot=ossp&r1=1.1.1.13&r2=1.1.1.14
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/cvs/src/update.c?cvsroot=ossp&r1=1.1.1.9&r2=1.1.1.10

From ossp-cvs-owner@ossp.org  Sat Jul 29 17:14:30 2000
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id e6TFESa64215; Sat, 29 Jul 2000 17:14:28 +0200 (CEST)
Date: Sat, 29 Jul 2000 17:14:28 +0200 (CEST)
Message-Id: <200007291514.e6TFESa64215@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvs/src admin.c commit.c lock.c modules.c root.c ...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   29-Jul-2000 17:14:28
  Branch: HEAD                             Handle: 2000072916142600

  Modified files:
    ossp-pkg/cvs/src        admin.c commit.c lock.c modules.c root.c sanity.sh
                            server.c update.c

  Log:
    Merge in conflicts

  Summary:
    Revision    Changes     Path
    1.7         +39 -1      ossp-pkg/cvs/src/admin.c
    1.10        +1  -0      ossp-pkg/cvs/src/commit.c
    1.4         +2  -2      ossp-pkg/cvs/src/lock.c
    1.6         +1  -0      ossp-pkg/cvs/src/modules.c
    1.10        +13 -3      ossp-pkg/cvs/src/root.c
    1.10        +9  -5      ossp-pkg/cvs/src/sanity.sh
    1.28        +59 -62     ossp-pkg/cvs/src/server.c
    1.13        +1  -0      ossp-pkg/cvs/src/update.c
  ____________________________________________________________________________

  Index: ossp-pkg/cvs/src/admin.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 admin.c
  --- ossp-pkg/cvs/src/admin.c	2000/07/06 19:33:59	1.6
  +++ ossp-pkg/cvs/src/admin.c	2000/07/29 15:14:26	1.7
  @@ -22,7 +22,45 @@
   
   static const char *const admin_usage[] =
   {
  -    "Usage: %s %s rcs-options files...\n",
  +    "Usage: %s %s [options] files...\n",
  +    "\t-a users   Append (comma-separated) user names to access list.\n",
  +    "\t-A file    Append another file's access list.\n",
  +    "\t-b[rev]    Set default branch (highest branch on trunk if omitted).\n",
  +    "\t-c string  Set comment leader.\n",
  +    "\t-e[users]  Remove (comma-separated) user names from access list\n",
  +    "\t           (all names if omitted).\n",
  +    "\t-I         Run interactively.\n",
  +    "\t-k subst   Set keyword substitution mode:\n",
  +    "\t   kv   (Default) Substitue keyword and value.\n",
  +    "\t   kvl  Substitue keyword, value, and locker (if any).\n",
  +    "\t   k    Substitue keyword only.\n",
  +    "\t   o    Preserve original string.\n",
  +    "\t   b    Like o, but mark file as binary.\n",
  +    "\t   v    Substitue value only.\n",
  +    "\t-l[rev]    Lock revision (latest revision on branch,\n",
  +    "\t           latest revision on trunk if omitted).\n",
  +    "\t-L         Set strict locking.\n",
  +    "\t-m rev:msg  Replace revision's log message.\n",
  +    "\t-n tag[:[rev]]  Tag branch or revision.  If :rev is omitted,\n",
  +    "\t                delete the tag; if rev is omitted, tag the latest\n",
  +    "\t                revision on the default branch.\n",
  +    "\t-N tag[:[rev]]  Same as -n except override existing tag.\n",
  +    "\t-o range   Delete (outdate) specified range of revisions:\n",
  +    "\t   rev1::rev2  Between rev1 and rev2, excluding rev1 and rev2.\n",
  +    "\t   rev::       After rev on the same branch.\n",
  +    "\t   ::rev       Before rev on the same branch.\n",
  +    "\t   rev         Just rev.\n",
  +    "\t   rev1:rev2   Between rev1 and rev2, including rev1 and rev2.\n",
  +    "\t   rev:        rev and following revisions on the same branch.\n",
  +    "\t   :rev        rev and previous revisions on the same branch.\n",
  +    "\t-q         Run quietly.\n",
  +    "\t-s state[:rev]  Set revision state (latest revision on branch,\n",
  +    "\t                latest revision on trunk if omitted).\n",
  +    "\t-t[file]   Get descriptive text from file (stdin if omitted).\n",
  +    "\t-t-string  Set descriptive text.\n",
  +    "\t-u[rev]    Unlock the revision (latest revision on branch,\n",
  +    "\t           latest revision on trunk if omitted).\n",
  +    "\t-U         Unset strict locking.\n",
       "(Specify the --help global option for a list of other help options)\n",
       NULL
   };
  Index: ossp-pkg/cvs/src/commit.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 commit.c
  --- ossp-pkg/cvs/src/commit.c	2000/06/22 13:31:38	1.9
  +++ ossp-pkg/cvs/src/commit.c	2000/07/29 15:14:26	1.10
  @@ -1516,6 +1516,7 @@
   		cvs_output (": Executing '", 0);
   		run_print (stdout);
   		cvs_output ("'\n", 0);
  +		cvs_flushout ();
   		(void) run_exec (RUN_TTY, RUN_TTY, RUN_TTY, RUN_NORMAL);
   		free (repos);
   	    }
  Index: ossp-pkg/cvs/src/lock.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 lock.c
  --- ossp-pkg/cvs/src/lock.c	2000/04/27 16:44:30	1.3
  +++ ossp-pkg/cvs/src/lock.c	2000/07/29 15:14:26	1.4
  @@ -767,8 +767,8 @@
   	if (errno != EEXIST)
   	{
   	    error (0, errno,
  -		   "failed to create lock directory in repository `%s'",
  -		   lock->repository);
  +		   "failed to create lock directory for `%s' (%s)",
  +		   lock->repository, masterlock);
   	    return (L_ERROR);
   	}
   
  Index: ossp-pkg/cvs/src/modules.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 modules.c
  --- ossp-pkg/cvs/src/modules.c	2000/07/01 13:12:53	1.5
  +++ ossp-pkg/cvs/src/modules.c	2000/07/29 15:14:26	1.6
  @@ -738,6 +738,7 @@
   		    cvs_output (": Executing '", 0);
   		    run_print (stdout);
   		    cvs_output ("'\n", 0);
  +		    cvs_flushout ();
   		}
   		err += run_exec (RUN_TTY, RUN_TTY, RUN_TTY, RUN_NORMAL);
   		free (expanded_path);
  Index: ossp-pkg/cvs/src/root.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 root.c
  --- ossp-pkg/cvs/src/root.c	2000/07/11 05:22:14	1.9
  +++ ossp-pkg/cvs/src/root.c	2000/07/29 15:14:26	1.10
  @@ -517,12 +517,10 @@
       switch (CVSroot_method)
       {
       case local_method:
  -    case fork_method:
   	if (CVSroot_username || CVSroot_hostname)
   	{
   	    error (0, 0, "can't specify hostname and username in CVSROOT");
  -	    error (0, 0, "when using %s access method",
  -		   CVSroot_method == local_method ? "local" : "fork");
  +	    error (0, 0, "when using local access method");
   	    error (0, 0, "(%s)", CVSroot);
   	    return 1;
   	}
  @@ -534,6 +532,18 @@
   	if (!isabsolute (CVSroot_directory))
   	    error (1, 0, "CVSROOT %s must be an absolute pathname",
   		   CVSroot_directory);
  +	break;
  +    case fork_method:
  +	/* We want :fork: to behave the same as other remote access
  +           methods.  Therefore, don't check to see that the repository
  +           name is absolute -- let the server do it.  */
  +	if (CVSroot_username || CVSroot_hostname)
  +	{
  +	    error (0, 0, "can't specify hostname and username in CVSROOT");
  +	    error (0, 0, "when using fork access method");
  +	    error (0, 0, "(%s)", CVSroot);
  +	    return 1;
  +	}
   	break;
       case kserver_method:
   #ifndef HAVE_KERBEROS
  Index: ossp-pkg/cvs/src/sanity.sh
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 sanity.sh
  --- ossp-pkg/cvs/src/sanity.sh	2000/07/23 17:45:26	1.9
  +++ ossp-pkg/cvs/src/sanity.sh	2000/07/29 15:14:26	1.10
  @@ -12493,6 +12493,7 @@
   
   	  dotest info-1 "${testcvs} -q co CVSROOT" "[UP] CVSROOT${DOTSTAR}"
   	  cd CVSROOT
  +	  rm -f $TESTDIR/testlog $TESTDIR/testlog2
   	  echo "ALL sh -c \"echo x\${=MYENV}\${=OTHER}y\${=ZEE}=\$USER=\$CVSROOT= >>$TESTDIR/testlog; cat >/dev/null\"" > loginfo
             # The following cases test the format string substitution
             echo "ALL echo %{sVv} >>$TESTDIR/testlog2; cat >/dev/null" >> loginfo
  @@ -12569,7 +12570,7 @@
   	  dotest info-11 "${testcvs} -q -s ZEE=garbage ci -m nuke-loginfo" \
   "Checking in loginfo;
   ${TESTDIR}/cvsroot/CVSROOT/loginfo,v  <--  loginfo
  -new revision: 1\.[0-9]; previous revision: 1\.[0-9]
  +new revision: 1\.[0-9]*; previous revision: 1\.[0-9]*
   done
   ${PROG} [a-z]*: Rebuilding administrative file database"
   
  @@ -12580,6 +12581,7 @@
       exit 0
   else
       echo "No BugId found."
  +    sleep 1
       exit 1
   fi
   EOF
  @@ -12588,7 +12590,7 @@
   	  dotest info-v1 "${testcvs} -q ci -m add-verification" \
   "Checking in verifymsg;
   ${TESTDIR}/cvsroot/CVSROOT/verifymsg,v  <--  verifymsg
  -new revision: 1\.2; previous revision: 1\.1
  +new revision: 1\.[0-9]*; previous revision: 1\.[0-9]*
   done
   ${PROG} [a-z]*: Rebuilding administrative file database"
   
  @@ -12624,7 +12626,7 @@
   	  dotest info-cleanup-verifymsg "${testcvs} -q ci -m nuke-verifymsg" \
   "Checking in verifymsg;
   ${TESTDIR}/cvsroot/CVSROOT/verifymsg,v  <--  verifymsg
  -new revision: 1\.[0-9]; previous revision: 1\.[0-9]
  +new revision: 1\.[0-9]*; previous revision: 1\.[0-9]*
   done
   ${PROG} [a-z]*: Rebuilding administrative file database"
   	  cd ..
  @@ -20019,7 +20021,7 @@
   	    # something which doesn't make sense.
   	    dotest_fail multiroot3-10 \
   "${testcvs} -q -d ${CVSROOT1} diff dir1/file1 dir2/file2" \
  -"${PROG} [a-z]*: failed to create lock directory in repository .${TESTDIR}/root1/dir2': No such file or directory
  +"${PROG} [a-z]*: failed to create lock directory for .${TESTDIR}/root1/dir2' (${TESTDIR}/root1/dir2/#cvs.lock): No such file or directory
   ${PROG} [a-z]*: failed to obtain dir lock in repository .${TESTDIR}/root1/dir2'
   ${PROG} \[[a-z]* aborted\]: read lock failed - giving up"
   	  else
  @@ -20698,8 +20700,10 @@
   EOF
   	    cd first-dir
   	    mkdir ${TESTDIR}/bogus
  +	    # The ${DOTSTAR} is to match a potential "broken pipe" if the
  +	    # client exits before the server script sends everything
   	    dotest_fail client-3 "${testcvs} update" "merge-it
  -${PROG} \[update aborted\]: protocol error: Copy-file tried to specify directory"
  +${PROG} \[update aborted\]: protocol error: Copy-file tried to specify director${DOTSTAR}"
   	    cat >${TESTDIR}/serveme <<EOF
   #!${TESTSHELL}
   echo "Valid-requests Root Valid-responses valid-requests Directory Entry Modified Unchanged Argument Argumentx ci co update"
  Index: ossp-pkg/cvs/src/server.c
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 server.c
  --- ossp-pkg/cvs/src/server.c	2000/07/12 16:06:48	1.27
  +++ ossp-pkg/cvs/src/server.c	2000/07/29 15:14:26	1.28
  @@ -3011,56 +3011,6 @@
   		buf_send_output (buf_to_net);
   	    }
   
  -	    if (stdout_pipe[0] >= 0
  -		&& (FD_ISSET (stdout_pipe[0], &readfds)))
  -	    {
  -	        int status;
  -
  -	        status = buf_input_data (stdoutbuf, (int *) NULL);
  -
  -		buf_copy_lines (buf_to_net, stdoutbuf, 'M');
  -
  -		if (status == -1)
  -		{
  -		    close (stdout_pipe[0]);
  -		    stdout_pipe[0] = -1;
  -		}
  -		else if (status > 0)
  -		{
  -		    buf_output0 (buf_to_net, "E buf_input_data failed\n");
  -		    print_error (status);
  -		    goto error_exit;
  -		}
  -
  -		/* What should we do with errors?  syslog() them?  */
  -		buf_send_output (buf_to_net);
  -	    }
  -
  -	    if (stderr_pipe[0] >= 0
  -		&& (FD_ISSET (stderr_pipe[0], &readfds)))
  -	    {
  -	        int status;
  -
  -	        status = buf_input_data (stderrbuf, (int *) NULL);
  -
  -		buf_copy_lines (buf_to_net, stderrbuf, 'E');
  -
  -		if (status == -1)
  -		{
  -		    close (stderr_pipe[0]);
  -		    stderr_pipe[0] = -1;
  -		}
  -		else if (status > 0)
  -		{
  -		    buf_output0 (buf_to_net, "E buf_input_data failed\n");
  -		    print_error (status);
  -		    goto error_exit;
  -		}
  -
  -		/* What should we do with errors?  syslog() them?  */
  -		buf_send_output (buf_to_net);
  -	    }
  -
   	    if (protocol_pipe[0] >= 0
   		&& (FD_ISSET (protocol_pipe[0], &readfds)))
   	    {
  @@ -3114,6 +3064,56 @@
   		    }
   		}
   	    }
  +
  +	    if (stdout_pipe[0] >= 0
  +		&& (FD_ISSET (stdout_pipe[0], &readfds)))
  +	    {
  +	        int status;
  +
  +	        status = buf_input_data (stdoutbuf, (int *) NULL);
  +
  +		buf_copy_lines (buf_to_net, stdoutbuf, 'M');
  +
  +		if (status == -1)
  +		{
  +		    close (stdout_pipe[0]);
  +		    stdout_pipe[0] = -1;
  +		}
  +		else if (status > 0)
  +		{
  +		    buf_output0 (buf_to_net, "E buf_input_data failed\n");
  +		    print_error (status);
  +		    goto error_exit;
  +		}
  +
  +		/* What should we do with errors?  syslog() them?  */
  +		buf_send_output (buf_to_net);
  +	    }
  +
  +	    if (stderr_pipe[0] >= 0
  +		&& (FD_ISSET (stderr_pipe[0], &readfds)))
  +	    {
  +	        int status;
  +
  +	        status = buf_input_data (stderrbuf, (int *) NULL);
  +
  +		buf_copy_lines (buf_to_net, stderrbuf, 'E');
  +
  +		if (status == -1)
  +		{
  +		    close (stderr_pipe[0]);
  +		    stderr_pipe[0] = -1;
  +		}
  +		else if (status > 0)
  +		{
  +		    buf_output0 (buf_to_net, "E buf_input_data failed\n");
  +		    print_error (status);
  +		    goto error_exit;
  +		}
  +
  +		/* What should we do with errors?  syslog() them?  */
  +		buf_send_output (buf_to_net);
  +	    }
   	}
   
   	/*
  @@ -3730,23 +3730,20 @@
       do_cvs_command ("editors", editors);
   }
   
  -static int noop PROTO ((int, char **));
  -
  -static int
  -noop (argc, argv)
  -    int argc;
  -    char **argv;
  -{
  -    return 0;
  -}
  -
   static void serve_noop PROTO ((char *));
   
   static void
   serve_noop (arg)
       char *arg;
   {
  -    do_cvs_command ("noop", noop);
  +
  +    server_write_entries ();
  +    if (!print_pending_error ())
  +    {
  +	(void) server_notify ();
  +	buf_output0 (buf_to_net, "ok\n");
  +    }
  +    buf_flush (buf_to_net, 1);
   }
   
   static void serve_version PROTO ((char *));
  @@ -4737,7 +4734,7 @@
     REQ_LINE("editors", serve_editors, 0),
     REQ_LINE("init", serve_init, RQ_ROOTLESS),
     REQ_LINE("annotate", serve_annotate, 0),
  -  REQ_LINE("noop", serve_noop, 0),
  +  REQ_LINE("noop", serve_noop, RQ_ROOTLESS),
     REQ_LINE("version", serve_version, RQ_ROOTLESS),
     REQ_LINE(NULL, NULL, 0)
   
  Index: ossp-pkg/cvs/src/update.c
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 update.c
  --- ossp-pkg/cvs/src/update.c	2000/07/21 21:46:50	1.12
  +++ ossp-pkg/cvs/src/update.c	2000/07/29 15:14:26	1.13
  @@ -1126,6 +1126,7 @@
   	    cvs_output (": Executing '", 0);
   	    run_print (stdout);
   	    cvs_output ("'\n", 0);
  +	    cvs_flushout ();
   	    (void) run_exec (RUN_TTY, RUN_TTY, RUN_TTY, RUN_NORMAL);
   	}
   	else if (ferror (fp))

From ossp-cvs-owner@ossp.org  Sat Jul 29 17:29:34 2000
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id e6TFTYK65324; Sat, 29 Jul 2000 17:29:34 +0200 (CEST)
Date: Sat, 29 Jul 2000 17:29:34 +0200 (CEST)
Message-Id: <200007291529.e6TFTYK65324@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvs VERSION ossp-pkg/cvs/doc CVSvn.texi ossp-pkg/...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   29-Jul-2000 17:29:34
  Branch: HEAD                             Handle: 2000072916293102

  Modified files:
    ossp-pkg/cvs            VERSION
    ossp-pkg/cvs/doc        CVSvn.texi
    ossp-pkg/cvs/src        version.c

  Log:
    Update version

  Summary:
    Revision    Changes     Path
    1.6         +1  -1      ossp-pkg/cvs/VERSION
    1.5         +1  -1      ossp-pkg/cvs/doc/CVSvn.texi
    1.9         +1  -1      ossp-pkg/cvs/src/version.c
  ____________________________________________________________________________

  Index: ossp-pkg/cvs/VERSION
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 VERSION
  --- ossp-pkg/cvs/VERSION	2000/06/22 16:42:21	1.5
  +++ ossp-pkg/cvs/VERSION	2000/07/29 15:29:31	1.6
  @@ -1 +1 @@
  -1.10.8.6
  +1.10.8.7
  Index: ossp-pkg/cvs/doc/CVSvn.texi
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 CVSvn.texi
  --- ossp-pkg/cvs/doc/CVSvn.texi	2000/06/22 16:41:12	1.4
  +++ ossp-pkg/cvs/doc/CVSvn.texi	2000/07/29 15:29:32	1.5
  @@ -1 +1 @@
  -@set CVSVN 1.10.8.6
  +@set CVSVN 1.10.8.7
  Index: ossp-pkg/cvs/src/version.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 version.c
  --- ossp-pkg/cvs/src/version.c	2000/07/11 05:22:15	1.8
  +++ ossp-pkg/cvs/src/version.c	2000/07/29 15:29:33	1.9
  @@ -18,7 +18,7 @@
   #define NAME_PREFIX ""
   #endif
   
  -char *version_string = NAME_PREFIX "Concurrent Versions System (CVS) 1.10.8.6";
  +char *version_string = NAME_PREFIX "Concurrent Versions System (CVS) 1.10.8.7";
   
   #ifdef CLIENT_SUPPORT
   #ifdef SERVER_SUPPORT

From ossp-cvs-owner@ossp.org  Mon Jul 31 21:22:04 2000
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id e6VJM4h43256; Mon, 31 Jul 2000 21:22:04 +0200 (CEST)
Date: Mon, 31 Jul 2000 21:22:04 +0200 (CEST)
Message-Id: <200007311922.e6VJM4h43256@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvs README.OSSP ossp-pkg/cvs/src options.h.in ser...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Jul-2000 21:22:03
  Branch: HEAD                             Handle: 2000073120220201

  Modified files:
    ossp-pkg/cvs            README.OSSP
    ossp-pkg/cvs/src        options.h.in server.c

  Log:
    Merge in wildcard patches for CVSROOT/passwd

  Summary:
    Revision    Changes     Path
    1.45        +10 -1      ossp-pkg/cvs/README.OSSP
    1.31        +1  -0      ossp-pkg/cvs/src/options.h.in
    1.29        +44 -0      ossp-pkg/cvs/src/server.c
  ____________________________________________________________________________

  Index: ossp-pkg/cvs/README.OSSP
  ============================================================
  $ cvs diff -u -r1.44 -r1.45 README.OSSP
  --- ossp-pkg/cvs/README.OSSP	2000/07/21 21:46:49	1.44
  +++ ossp-pkg/cvs/README.OSSP	2000/07/31 19:22:02	1.45
  @@ -41,6 +41,7 @@
       - additional SetUID/SetGID support for `cvs server' situations.
       - new `cvs pserverd' for running stand-alone pserver daemons
       - new global --map-root=/oldpath:/newpath option for mapping root paths
  +    - support for wildcards in CVSROOT/passwd files to decrease admin efforts
       - various cosmetic changes
   
     Some of the OSSP functional patches are only useful for the server
  @@ -338,8 +339,16 @@
       [Origin: Ralf S. Engelschall]
   
     OSSP_PATCH_ADDFILEATTR:
  -    Let the default file attrbuters set on newly added files.
  +    Let the default file attributes set on newly added files.
       [Origin: Noel Yap]
  +
  +  OSSP_PATCH_WILDPASSWD:
  +    This allows wildcards ("*") in CVSROOT/passwd. That allows one to
  +    just do "*:ULtgRLXo7NRxs:cvsuser" which would let absolutely anyone
  +    use CVS provided they know the password. It would also let you do
  +    things like "*:*:cvsuser" to let only authorized system users use
  +    CVS using their system passwords.
  +    [Larry Jones <larry.jones@sdrc.com>]
   
     OSSP_PATCH_BUGFIX:
       This enabled various bugfixes which are still not present in the
  Index: ossp-pkg/cvs/src/options.h.in
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 options.h.in
  --- ossp-pkg/cvs/src/options.h.in	2000/07/21 21:46:50	1.30
  +++ ossp-pkg/cvs/src/options.h.in	2000/07/31 19:22:03	1.31
  @@ -234,6 +234,7 @@
   #define OSSP_PATCH_HASHFUNC
   #define OSSP_PATCH_UPDATECMERGE
   #define OSSP_PATCH_ADDFILEATTR
  +#define OSSP_PATCH_WILDPASSWD
   #define OSSP_PATCH_BUGFIX
   /* problematic changes, because they break "make check" */
   #undef OSSP_PATCH_COSMETICS_HARD
  Index: ossp-pkg/cvs/src/server.c
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 server.c
  --- ossp-pkg/cvs/src/server.c	2000/07/29 15:14:26	1.28
  +++ ossp-pkg/cvs/src/server.c	2000/07/31 19:22:03	1.29
  @@ -5362,6 +5362,13 @@
   	    found_it = 1;
   	    break;
           }
  +#ifdef OSSP_PATCH_WILDPASSWD
  +	if (strncmp(linebuf, "*:", 2) == 0) {
  +	    found_it = 1;
  +	    namelen = 1;
  +	    break;
  +	}
  +#endif
       }
       if (ferror (fp))
   	error (0, errno, "cannot read %s", filename);
  @@ -5405,10 +5412,14 @@
           /* Okay, after this conditional chain, found_password and
              host_user_tmp will have useful values: */
   
  +#ifdef OSSP_PATCH_WILDPASSWD
  +	if (non_cvsuser_portion[strspn(non_cvsuser_portion, " \t")] == '\0')
  +#else
           if ((non_cvsuser_portion == NULL)
               || (strlen (non_cvsuser_portion) == 0)
               || ((strspn (non_cvsuser_portion, " \t"))
                   == strlen (non_cvsuser_portion)))
  +#endif
           {
               found_password = NULL;
               host_user_tmp = NULL;
  @@ -5439,6 +5450,14 @@
               *host_user_ptr = xstrdup (host_user_tmp);
   	    retval = 1;
           }
  +#ifdef OSSP_PATCH_WILDPASSWD
  +	else if (strcmp(found_password, "*") == 0)
  +	{
  +	    /* Give host_user_ptr permanent storage. */
  +	    *host_user_ptr = xstrdup(host_user_tmp);
  +	    retval = -1;
  +	}
  +#endif
   	else
           {
               *host_user_ptr = NULL;
  @@ -5484,7 +5503,11 @@
           /* host_user already set by reference, so just return. */
           goto handle_return;
       }
  +#ifdef OSSP_PATCH_WILDPASSWD
  +    else if (rc == -1 || system_auth)
  +#else
       else if (rc == 0 && system_auth)
  +#endif
       {
   	/* No cvs password found, so try /etc/passwd. */
   
  @@ -5526,15 +5549,30 @@
   	if (*found_passwd)
           {
   	    /* user exists and has a password */
  +#ifdef OSSP_PATCH_WILDPASSWD
  +	    if (strcmp (found_passwd, crypt (password, found_passwd)) != 0) {
  +		if (host_user != NULL) {
  +		    free (host_user);
  +		    host_user = NULL;
  +		}
  +	    }
  +	    else if (host_user == NULL) {
  +		host_user = xstrdup (username);
  +	    }
  +#else
   	    host_user = ((! strcmp (found_passwd,
                                       crypt (password, found_passwd)))
                            ? xstrdup (username) : NULL);
  +#endif
               goto handle_return;
           }
   	else if (password && *password)
           {
   	    /* user exists and has no system password, but we got
   	       one as parameter */
  +#ifdef OSSP_PATCH_WILDPASSWD
  +	    if (host_user == NULL)
  +#endif
   	    host_user = xstrdup (username);
               goto handle_return;
           }
  @@ -5545,7 +5583,11 @@
               goto handle_return;
           }
       }
  +#ifdef OSSP_PATCH_WILDPASSWD
  +    else
  +#else
       else if (rc == 0)
  +#endif
       {
   	/* Note that the message _does_ distinguish between the case in
   	   which we check for a system password and the case in which
  @@ -5566,6 +5608,7 @@
   #endif
   	exit (EXIT_FAILURE);
       }
  +#ifndef OSSP_PATCH_WILDPASSWD
       else
       {
   	/* Something strange happened.  We don't know what it was, but
  @@ -5573,6 +5616,7 @@
   	host_user = NULL;
           goto handle_return;
       }
  +#endif
   
   handle_return:
       if (host_user)

From ossp-cvs-owner@ossp.org  Wed Aug  2 10:52:22 2000
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id e728qLh00834; Wed, 2 Aug 2000 10:52:21 +0200 (CEST)
Date: Wed, 2 Aug 2000 10:52:21 +0200 (CEST)
Message-Id: <200008020852.e728qLh00834@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pcre .configure
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   02-Aug-2000 10:52:21
  Branch: HEAD                             Handle: 2000080209522100

  Modified files:
    ossp-pkg/pcre           .configure

  Log:
    Add -pedantic

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/pcre/.configure
  ____________________________________________________________________________

  Index: ossp-pkg/pcre/.configure
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 .configure
  --- ossp-pkg/pcre/.configure	1999/08/26 08:15:20	1.1.1.1
  +++ ossp-pkg/pcre/.configure	2000/08/02 08:52:21	1.2
  @@ -1,6 +1,6 @@
   #!/bin/sh
   CC="egcc" \
  -CFLAGS="-pipe -O2 -Wall -Wshadow -Wpointer-arith -Wcast-align -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline" \
  +CFLAGS="-pipe -O2 -Wall -pedantic -Wshadow -Wpointer-arith -Wcast-align -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline" \
   ./configure \
   --prefix=/sw/pkg/pcre \
   --disable-shared \

From ossp-cvs-owner@ossp.org  Wed Aug  2 11:46:13 2000
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id e729kB104817; Wed, 2 Aug 2000 11:46:11 +0200 (CEST)
Date: Wed, 2 Aug 2000 11:46:11 +0200 (CEST)
Message-Id: <200008020946.e729kB104817@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pcre ChangeLog ChangeLog.OSSP LICENCE README conf...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   02-Aug-2000 11:46:11
  Branch: HEAD                             Handle: 2000080210460603

  Added files:
    ossp-pkg/pcre/pcre_test.d testinput5 testinput6 testoutput5 testoutput6
  Modified files:
    ossp-pkg/pcre           ChangeLog ChangeLog.OSSP LICENCE README configure
                            configure.in pcre.3 pcre.c pcre.h pcre_get.c
                            pcre_internal.h pcre_test.c pcreposix.3
                            pcreposix.c pgrep.1 pgrep.c shtool
    ossp-pkg/pcre/pcre_test.d testinput1 testinput2 testinput3 testinput4
                            testoutput1 testoutput2 testoutput3 testoutput4

  Log:
    Upgrade to PCRE 3.3 and GNU shtool 1.5.1

  Summary:
    Revision    Changes     Path
    1.6         +32 -0      ossp-pkg/pcre/ChangeLog
    1.14        +5  -0      ossp-pkg/pcre/ChangeLog.OSSP
    1.4         +8  -6      ossp-pkg/pcre/LICENCE
    1.4         +58 -27     ossp-pkg/pcre/README
    1.9         +39 -21     ossp-pkg/pcre/configure
    1.6         +14 -1      ossp-pkg/pcre/configure.in
    1.4         +119 -11    ossp-pkg/pcre/pcre.3
    1.5         +344 -26    ossp-pkg/pcre/pcre.c
    1.6         +13 -10     ossp-pkg/pcre/pcre.h
    1.2         +39 -1      ossp-pkg/pcre/pcre_get.c
    1.5         +5  -1      ossp-pkg/pcre/pcre_internal.h
    1.5         +163 -10    ossp-pkg/pcre/pcre_test.c
    1.3         +21 -1      ossp-pkg/pcre/pcre_test.d/testinput1
    1.4         +3  -3      ossp-pkg/pcre/pcre_test.d/testinput2
    1.4         +15 -1      ossp-pkg/pcre/pcre_test.d/testinput3
    1.2         +1  -0      ossp-pkg/pcre/pcre_test.d/testinput4
    1.1         +118 -0     ossp-pkg/pcre/pcre_test.d/testinput5
    1.1         +52 -0      ossp-pkg/pcre/pcre_test.d/testinput6
    1.6         +43 -2      ossp-pkg/pcre/pcre_test.d/testoutput1
    1.6         +5  -5      ossp-pkg/pcre/pcre_test.d/testoutput2
    1.6         +26 -2      ossp-pkg/pcre/pcre_test.d/testoutput3
    1.6         +2  -1      ossp-pkg/pcre/pcre_test.d/testoutput4
    1.1         +242 -0     ossp-pkg/pcre/pcre_test.d/testoutput5
    1.1         +185 -0     ossp-pkg/pcre/pcre_test.d/testoutput6
    1.2         +9  -1      ossp-pkg/pcre/pcreposix.3
    1.3         +4  -1      ossp-pkg/pcre/pcreposix.c
    1.2         +7  -7      ossp-pkg/pcre/pgrep.1
    1.3         +11 -8      ossp-pkg/pcre/pgrep.c
    1.6         +3  -3      ossp-pkg/pcre/shtool
  ____________________________________________________________________________

  Index: ossp-pkg/pcre/ChangeLog
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 ChangeLog
  --- ossp-pkg/pcre/ChangeLog	2000/05/16 18:47:31	1.5
  +++ ossp-pkg/pcre/ChangeLog	2000/08/02 09:46:06	1.6
  @@ -2,6 +2,38 @@
   ------------------
   
   
  +Version 3.3 01-Aug-00
  +---------------------
  +
  +1. If an octal character was given, but the value was greater than \377, it
  +was not getting masked to the least significant bits, as documented. This could
  +lead to crashes in some systems.
  +
  +2. Perl 5.6 (if not earlier versions) accepts classes like [a-\d] and treats
  +the hyphen as a literal. PCRE used to give an error; it now behaves like Perl.
  +
  +3. Added the functions pcre_free_substring() and pcre_free_substring_list().
  +These just pass their arguments on to (pcre_free)(), but they are provided
  +because some uses of PCRE bind it to non-C systems that can call its functions,
  +but cannot call free() or pcre_free() directly.
  +
  +4. Add "make test" as a synonym for "make check". Corrected some comments in
  +the Makefile.
  +
  +5. Add $(DESTDIR)/ in front of all the paths in the "install" target in the
  +Makefile.
  +
  +6. Changed the name of pgrep to pcregrep, because Solaris has introduced a
  +command called pgrep for grepping around the active processes.
  +
  +7. Added the beginnings of support for UTF-8 character strings.
  +
  +8. Arranged for the Makefile to pass over the settings of CC, CFLAGS, and
  +RANLIB to ./ltconfig so that they are used by libtool. I think these are all
  +the relevant ones. (AR is not passed because ./ltconfig does its own figuring
  +out for the ar command.)
  +
  +
   Version 3.2 12-May-00
   ---------------------
   
  Index: ossp-pkg/pcre/ChangeLog.OSSP
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 ChangeLog.OSSP
  --- ossp-pkg/pcre/ChangeLog.OSSP	2000/07/07 06:18:50	1.13
  +++ ossp-pkg/pcre/ChangeLog.OSSP	2000/08/02 09:46:06	1.14
  @@ -1,6 +1,11 @@
   
    OSSP ChangeLog for PCRE
    =======================
  + 
  + Changes made to OSSP pcre 3.3-1 (07-Jul-2000 to 01-Aug-2000):
  +
  +  *) Merged in changes between PCRE 3.2 to 3.3
  +  *) Upgraded GNU shtool from 1.5.0 to 1.5.1
   
    Changes made to OSSP pcre 3.2-2 (16-May-2000 to 07-Jul-2000):
   
  Index: ossp-pkg/pcre/LICENCE
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 LICENCE
  --- ossp-pkg/pcre/LICENCE	2000/05/16 18:47:31	1.3
  +++ ossp-pkg/pcre/LICENCE	2000/08/02 09:46:06	1.4
  @@ -20,19 +20,21 @@
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   
   2. The origin of this software must not be misrepresented, either by
  -   explicit claim or by omission. In practice, this means you must put
  -   a sentence like this
  +   explicit claim or by omission. In practice, this means that if you use
  +   PCRE in software which you distribute to others, commercially or
  +   otherwise, you must put a sentence like this
   
        Regular expression support is provided by the PCRE library package,
  -     which is open source software, copyright by the University of
  -     Cambridge.
  +     which is open source software, written by Philip Hazel, and copyright
  +     by the University of Cambridge, England.
   
      somewhere reasonably visible in your documentation and in any relevant
  -   files. A reference to the ftp site for the source should also be given
  +   files or online help data or similar. A reference to the ftp site for
  +   the source, that is, to
   
        ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/
   
  -   in the documentation.
  +   should also be given in the documentation.
   
   3. Altered versions must be plainly marked as such, and must not be
      misrepresented as being the original software.
  Index: ossp-pkg/pcre/README
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 README
  --- ossp-pkg/pcre/README	2000/02/02 17:18:46	1.3
  +++ ossp-pkg/pcre/README	2000/08/02 09:46:06	1.4
  @@ -7,7 +7,16 @@
   
   Please read the NEWS file if you are upgrading from a previous release.
   
  +PCRE has its own native API, but a set of "wrapper" functions that are based on
  +the POSIX API are also supplied in the library libpcreposix. Note that this
  +just provides a POSIX calling interface to PCRE: the regular expressions
  +themselves still follow Perl syntax and semantics. The header file
  +for the POSIX-style functions is called pcreposix.h. The official POSIX name is
  +regex.h, but I didn't want to risk possible problems with existing files of
  +that name by distributing it that way. To use it with an existing program that
  +uses the POSIX API, it will have to be renamed or pointed at by a link.
   
  +
   Building PCRE on a Unix system
   ------------------------------
   
  @@ -15,20 +24,29 @@
   distribution directory. This is a standard GNU "autoconf" configuration script,
   for which generic instructions are supplied in INSTALL. On many systems just
   running "./configure" is sufficient, but the usual methods of changing standard
  -defaults are available. For example
  +defaults are available. For example,
   
   CFLAGS='-O2 -Wall' ./configure --prefix=/opt/local
   
   specifies that the C compiler should be run with the flags '-O2 -Wall' instead
   of the default, and that "make install" should install PCRE under /opt/local
  -instead of the default /usr/local. The "configure" script builds thre files:
  +instead of the default /usr/local.
  +
  +If you want to make use of the experimential, incomplete support for UTF-8
  +character strings in PCRE, you must add --enable-utf8 to the "configure"
  +command. Without it, the code for handling UTF-8 is not included in the
  +library. (Even when included, it still has to be enabled by an option at run
  +time.)
   
  +The "configure" script builds four files:
  +
   . Makefile is built by copying Makefile.in and making substitutions.
   . config.h is built by copying config.in and making substitutions.
   . pcre-config is built by copying pcre-config.in and making substitutions.
  +. RunTest is a script for running tests
   
   Once "configure" has run, you can run "make". It builds two libraries called
  -libpcre and libpcreposix, a test program called pcretest, and the pgrep
  +libpcre and libpcreposix, a test program called pcretest, and the pcregrep
   command. You can use "make install" to copy these, and the public header file
   pcre.h, to appropriate live directories on your system, in the normal way.
   
  @@ -54,11 +72,11 @@
   new and experimental and may not work on all systems. It relies on the
   "libtool" scripts - these are distributed with PCRE. It should build a
   "libtool" script and use this to compile and link shared libraries, which are
  -placed in a subdirectory called .libs. The programs pcretest and pgrep are
  +placed in a subdirectory called .libs. The programs pcretest and pcregrep are
   built to use these uninstalled libraries by means of wrapper scripts. When you
  -use "make install" to install shared libraries, pgrep and pcretest are
  +use "make install" to install shared libraries, pcregrep and pcretest are
   automatically re-built to use the newly installed libraries. However, only
  -pgrep is installed, as pcretest is really just a test program.
  +pcregrep is installed, as pcretest is really just a test program.
   
   To build PCRE using static libraries you must use --disable-shared when
   configuring it. For example
  @@ -82,8 +100,8 @@
   ------------
   
   To test PCRE on a Unix system, run the RunTest script in the pcre directory.
  -(This can also be run by "make runtest" or "make check".) For other systems,
  -see the instruction in NON-UNIX-USE.
  +(This can also be run by "make runtest", "make check", or "make test".) For
  +other systems, see the instruction in NON-UNIX-USE.
   
   The script runs the pcretest test program (which is documented in
   doc/pcretest.txt) on each of the testinput files (in the testdata directory) in
  @@ -97,12 +115,24 @@
   The first and third test files can also be fed directly into the perltest
   script to check that Perl gives the same results. The third file requires the
   additional features of release 5.005, which is why it is kept separate from the
  -main test input, which needs only Perl 5.004. In the long run, when 5.005 is
  -widespread, these two test files may get amalgamated.
  +main test input, which needs only Perl 5.004. In the long run, when 5.005 (or
  +higher) is widespread, these two test files may get amalgamated.
   
  -The second set of tests check pcre_info(), pcre_study(), pcre_copy_substring(),
  -pcre_get_substring(), pcre_get_substring_list(), error detection and run-time
  -flags that are specific to PCRE, as well as the POSIX wrapper API.
  +The second set of tests check pcre_fullinfo(), pcre_info(), pcre_study(),
  +pcre_copy_substring(), pcre_get_substring(), pcre_get_substring_list(), error
  +detection, and run-time flags that are specific to PCRE, as well as the POSIX
  +wrapper API. It also uses the debugging flag to check some of the internals of
  +pcre_compile().
  +
  +If you build PCRE with a locale setting that is not the standard C locale, the
  +character tables may be different (see next paragraph). In some cases, this may
  +cause failures in the second set of tests. For example, in a locale where the
  +isprint() function yields TRUE for characters in the range 128-255, the use of
  +[:isascii:] inside a character class defines a different set of characters, and
  +this shows up in this test as a difference in the compiled code, which is being
  +listed for checking. Where the comparison test output contains [\x00-\x7f] the
  +test will contain [\x00-\xff], and similarly in some other cases. This is not a
  +bug in PCRE.
   
   The fourth set of tests checks pcre_maketables(), the facility for building a
   set of character tables for a specific locale and using them instead of the
  @@ -117,14 +147,10 @@
   in the comparison output, it means that locale is not available on your system,
   despite being listed by "locale". This does not mean that PCRE is broken.
   
  -PCRE has its own native API, but a set of "wrapper" functions that are based on
  -the POSIX API are also supplied in the library libpcreposix.a. Note that this
  -just provides a POSIX calling interface to PCRE: the regular expressions
  -themselves still follow Perl syntax and semantics. The header file
  -for the POSIX-style functions is called pcreposix.h. The official POSIX name is
  -regex.h, but I didn't want to risk possible problems with existing files of
  -that name by distributing it that way. To use it with an existing program that
  -uses the POSIX API, it will have to be renamed or pointed at by a link.
  +The fifth test checks the experimental, incomplete UTF-8 support. It is not run
  +automatically unless PCRE is built with UTF-8 support. This file can be fed
  +directly to the perltest8 script, which requires Perl 5.6 or higher. The sixth
  +file tests internal UTF-8 features of PCRE that are not relevant to Perl.
   
   
   Character tables
  @@ -197,7 +223,7 @@
     NEWS                  important changes in this release
     NON-UNIX-USE          notes on building PCRE on non-Unix systems
     README                this file
  -  RunTest               a Unix shell script for running tests
  +  RunTest.in            template for a Unix shell script for running tests
     config.guess          ) files used by libtool,
     config.sub            )   used only when building a shared library
     configure             a configuring shell script (built by autoconf)
  @@ -211,24 +237,29 @@
     doc/pcreposix.txt     plain text version
     doc/pcretest.txt      documentation of test program
     doc/perltest.txt      documentation of Perl test program
  -  doc/pgrep.1           man page source for the pgrep utility
  -  doc/pgrep.html        HTML version
  -  doc/pgrep.txt         plain text version
  +  doc/pcregrep.1        man page source for the pcregrep utility
  +  doc/pcregrep.html     HTML version
  +  doc/pcregrep.txt      plain text version
     install-sh            a shell script for installing files
     ltconfig              ) files used to build "libtool",
     ltmain.sh             )   used only when building a shared library
     pcretest.c            test program
     perltest              Perl test program
  -  pgrep.c               source of a grep utility that uses PCRE
  +  perltest8             Perl test program for UTF-8 tests
  +  pcregrep.c            source of a grep utility that uses PCRE
     pcre-config.in        source of script which retains PCRE information
     testdata/testinput1   test data, compatible with Perl 5.004 and 5.005
     testdata/testinput2   test data for error messages and non-Perl things
     testdata/testinput3   test data, compatible with Perl 5.005
     testdata/testinput4   test data for locale-specific tests
  +  testdata/testinput5   test data for UTF-8 tests compatible with Perl 5.6
  +  testdata/testinput6   test data for other UTF-8 tests
     testdata/testoutput1  test results corresponding to testinput1
     testdata/testoutput2  test results corresponding to testinput2
     testdata/testoutput3  test results corresponding to testinput3
     testdata/testoutput4  test results corresponding to testinput4
  +  testdata/testoutput5  test results corresponding to testinput5
  +  testdata/testoutput6  test results corresponding to testinput6
   
   (C) Auxiliary files for Win32 DLL
   
  @@ -236,4 +267,4 @@
     pcre.def
   
   Philip Hazel <ph10@cam.ac.uk>
  -February 2000
  +August 2000
  Index: ossp-pkg/pcre/configure
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 configure
  --- ossp-pkg/pcre/configure	2000/07/07 06:18:50	1.8
  +++ ossp-pkg/pcre/configure	2000/08/02 09:46:06	1.9
  @@ -31,6 +31,8 @@
   # Any additions from configure.in:
   ac_default_prefix=/usr/local
   ac_help="$ac_help
  +  --enable-utf8           enable UTF8 support (incomplete)"
  +ac_help="$ac_help
     --enable-static         build static libraries (default=yes)"
   ac_help="$ac_help
     --enable-shared         build shared libraries (default=yes)"
  @@ -550,7 +552,7 @@
   # Extract the first word of "gcc", so it can be a program name with args.
   set dummy gcc; ac_word=$2
   echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
  -echo "configure:554: checking for $ac_word" >&5
  +echo "configure:556: checking for $ac_word" >&5
   if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
     echo $ac_n "(cached) $ac_c" 1>&6
   else
  @@ -580,7 +582,7 @@
     # Extract the first word of "cc", so it can be a program name with args.
   set dummy cc; ac_word=$2
   echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
  -echo "configure:584: checking for $ac_word" >&5
  +echo "configure:586: checking for $ac_word" >&5
   if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
     echo $ac_n "(cached) $ac_c" 1>&6
   else
  @@ -631,7 +633,7 @@
         # Extract the first word of "cl", so it can be a program name with args.
   set dummy cl; ac_word=$2
   echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
  -echo "configure:635: checking for $ac_word" >&5
  +echo "configure:637: checking for $ac_word" >&5
   if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
     echo $ac_n "(cached) $ac_c" 1>&6
   else
  @@ -663,7 +665,7 @@
   fi
   
   echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
  -echo "configure:667: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
  +echo "configure:669: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
   
   ac_ext=c
   # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
  @@ -674,12 +676,12 @@
   
   cat > conftest.$ac_ext << EOF
   
  -#line 678 "configure"
  +#line 680 "configure"
   #include "confdefs.h"
   
   main(){return(0);}
   EOF
  -if { (eval echo configure:683: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  +if { (eval echo configure:685: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
     ac_cv_prog_cc_works=yes
     # If we can't run a trivial program, we are probably using a cross compiler.
     if (./conftest; exit) 2>/dev/null; then
  @@ -705,12 +707,12 @@
     { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
   fi
   echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
  -echo "configure:709: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
  +echo "configure:711: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
   echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
   cross_compiling=$ac_cv_prog_cc_cross
   
   echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
  -echo "configure:714: checking whether we are using GNU C" >&5
  +echo "configure:716: checking whether we are using GNU C" >&5
   if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
     echo $ac_n "(cached) $ac_c" 1>&6
   else
  @@ -719,7 +721,7 @@
     yes;
   #endif
   EOF
  -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:723: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
  +if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:725: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
     ac_cv_prog_gcc=yes
   else
     ac_cv_prog_gcc=no
  @@ -738,7 +740,7 @@
   ac_save_CFLAGS="$CFLAGS"
   CFLAGS=
   echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
  -echo "configure:742: checking whether ${CC-cc} accepts -g" >&5
  +echo "configure:744: checking whether ${CC-cc} accepts -g" >&5
   if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
     echo $ac_n "(cached) $ac_c" 1>&6
   else
  @@ -770,7 +772,7 @@
   fi
   
   echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
  -echo "configure:774: checking how to run the C preprocessor" >&5
  +echo "configure:776: checking how to run the C preprocessor" >&5
   # On Suns, sometimes $CPP names a directory.
   if test -n "$CPP" && test -d "$CPP"; then
     CPP=
  @@ -785,13 +787,13 @@
     # On the NeXT, cc -E runs the code through the compiler's parser,
     # not just through cpp.
     cat > conftest.$ac_ext <<EOF
  -#line 789 "configure"
  +#line 791 "configure"
   #include "confdefs.h"
   #include <assert.h>
   Syntax Error
   EOF
   ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  -{ (eval echo configure:795: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  +{ (eval echo configure:797: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
   ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
   if test -z "$ac_err"; then
     :
  @@ -802,13 +804,13 @@
     rm -rf conftest*
     CPP="${CC-cc} -E -traditional-cpp"
     cat > conftest.$ac_ext <<EOF
  -#line 806 "configure"
  +#line 808 "configure"
   #include "confdefs.h"
   #include <assert.h>
   Syntax Error
   EOF
   ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  -{ (eval echo configure:812: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  +{ (eval echo configure:814: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
   ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
   if test -z "$ac_err"; then
     :
  @@ -819,13 +821,13 @@
     rm -rf conftest*
     CPP="${CC-cc} -nologo -E"
     cat > conftest.$ac_ext <<EOF
  -#line 823 "configure"
  +#line 825 "configure"
   #include "confdefs.h"
   #include <assert.h>
   Syntax Error
   EOF
   ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  -{ (eval echo configure:829: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  +{ (eval echo configure:831: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
   ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
   if test -z "$ac_err"; then
     :
  @@ -850,7 +852,7 @@
   echo "$ac_t""$CPP" 1>&6
   
   echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
  -echo "configure:854: checking whether ${MAKE-make} sets \${MAKE}" >&5
  +echo "configure:856: checking whether ${MAKE-make} sets \${MAKE}" >&5
   set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
   if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
     echo $ac_n "(cached) $ac_c" 1>&6
  @@ -877,6 +879,22 @@
   fi
   
   
  +# Check whether --enable-utf8 or --disable-utf8 was given.
  +if test "${enable_utf8+set}" = set; then
  +  enableval="$enable_utf8"
  +  enable_utf8="$enableval"
  +else
  +  enable_utf8=yes
  +
  +fi
  +if test ".$enable_utf8" = .yes; then
  +    if test ".$CFLAGS" = .; then
  +        CFLAGS="-DSUPPORT_UTF8"
  +    else
  +        CFLAGS="$CFLAGS -DSUPPORT_UTF8"
  +    fi
  +fi
  +
   # Check whether --enable-static or --disable-static was given.
   if test "${enable_static+set}" = set; then
     enableval="$enable_static"
  @@ -908,12 +926,12 @@
   for ac_func in memmove strerror
   do
   echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
  -echo "configure:912: checking for $ac_func" >&5
  +echo "configure:930: checking for $ac_func" >&5
   if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
     echo $ac_n "(cached) $ac_c" 1>&6
   else
     cat > conftest.$ac_ext <<EOF
  -#line 917 "configure"
  +#line 935 "configure"
   #include "confdefs.h"
   /* System header to define __stub macros and hopefully few prototypes,
       which can conflict with char $ac_func(); below.  */
  @@ -936,7 +954,7 @@
   
   ; return 0; }
   EOF
  -if { (eval echo configure:940: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  +if { (eval echo configure:958: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
     rm -rf conftest*
     eval "ac_cv_func_$ac_func=yes"
   else
  Index: ossp-pkg/pcre/configure.in
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 configure.in
  --- ossp-pkg/pcre/configure.in	2000/05/16 18:33:29	1.5
  +++ ossp-pkg/pcre/configure.in	2000/08/02 09:46:06	1.6
  @@ -3,7 +3,7 @@
   dnl ##
   
   AC_PREREQ(2.12)dnl
  -AC_REVISION($Revision: 1.5 $)
  +AC_REVISION($Revision: 1.6 $)
   
   SHTOOL="./shtool"
   AC_SUBST(SHTOOL)
  @@ -28,6 +28,19 @@
   AC_PROG_CC
   AC_PROG_CPP
   AC_SET_MAKE
  +
  +AC_ARG_ENABLE(utf8,dnl
  +[  --enable-utf8           enable UTF8 support (incomplete)],
  +enable_utf8="$enableval",
  +enable_utf8=yes
  +)dnl
  +if test ".$enable_utf8" = .yes; then
  +    if test ".$CFLAGS" = .; then
  +        CFLAGS="-DSUPPORT_UTF8"
  +    else
  +        CFLAGS="$CFLAGS -DSUPPORT_UTF8"
  +    fi
  +fi
   
   AC_ARG_ENABLE(static,dnl
   [  --enable-static         build static libraries (default=yes)],
  Index: ossp-pkg/pcre/pcre.3
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 pcre.3
  --- ossp-pkg/pcre/pcre.3	2000/05/16 18:47:31	1.3
  +++ ossp-pkg/pcre/pcre.3	2000/08/02 09:46:06	1.4
  @@ -44,6 +44,12 @@
   .B int *\fIovector\fR, int \fIstringcount\fR, "const char ***\fIlistptr\fR);"
   .PP
   .br
  +.B void pcre_free_substring(const char *\fIstringptr\fR);
  +.PP
  +.br
  +.B void pcre_free_substring_list(const char **\fIstringptr\fR);
  +.PP
  +.br
   .B const unsigned char *pcre_maketables(void);
   .PP
   .br
  @@ -70,7 +76,9 @@
   The PCRE library is a set of functions that implement regular expression
   pattern matching using the same syntax and semantics as Perl 5, with just a few
   differences (see below). The current implementation corresponds to Perl 5.005,
  -with some additional features from the Perl development release.
  +with some additional features from later versions. This includes some
  +experimental, incomplete support for UTF-8 encoded strings. Details of exactly
  +what is and what is not supported are given below.
   
   PCRE has its own native API, which is described in this document. There is also
   a set of wrapper functions that correspond to the POSIX regular expression API.
  @@ -84,13 +92,17 @@
   use these to include support for different releases.
   
   The functions \fBpcre_compile()\fR, \fBpcre_study()\fR, and \fBpcre_exec()\fR
  -are used for compiling and matching regular expressions, while
  -\fBpcre_copy_substring()\fR, \fBpcre_get_substring()\fR, and
  +are used for compiling and matching regular expressions.
  +
  +The functions \fBpcre_copy_substring()\fR, \fBpcre_get_substring()\fR, and
   \fBpcre_get_substring_list()\fR are convenience functions for extracting
  -captured substrings from a matched subject string. The function
  -\fBpcre_maketables()\fR is used (optionally) to build a set of character tables
  -in the current locale for passing to \fBpcre_compile()\fR.
  +captured substrings from a matched subject string; \fBpcre_free_substring()\fR
  +and \fBpcre_free_substring_list()\fR are also provided, to free the memory used
  +for extracted strings.
   
  +The function \fBpcre_maketables()\fR is used (optionally) to build a set of
  +character tables in the current locale for passing to \fBpcre_compile()\fR.
  +
   The function \fBpcre_fullinfo()\fR is used to find out information about a
   compiled pattern; \fBpcre_info()\fR is an obsolete version which returns only
   some of the available information, but is retained for backwards compatibility.
  @@ -223,7 +235,15 @@
   greedy by default, but become greedy if followed by "?". It is not compatible
   with Perl. It can also be set by a (?U) option setting within the pattern.
   
  +  PCRE_UTF8
  +
  +This option causes PCRE to regard both the pattern and the subject as strings
  +of UTF-8 characters instead of just byte strings. However, it is available only
  +if PCRE has been built to include UTF-8 support. If not, the use of this option
  +provokes an error. Support for UTF-8 is new, experimental, and incomplete.
  +Details of exactly what it entails are given below.
   
  +
   .SH STUDYING A PATTERN
   When a pattern is going to be used several times, it is worth spending more
   time analyzing it in order to speed up the time taken for matching. The
  @@ -558,7 +578,7 @@
   value of zero extracts the substring that matched the entire pattern, while
   higher values extract the captured substrings. For \fBpcre_copy_substring()\fR,
   the string is placed in \fIbuffer\fR, whose length is given by
  -\fIbuffersize\fR, while for \fBpcre_get_substring()\fR a new block of store is
  +\fIbuffersize\fR, while for \fBpcre_get_substring()\fR a new block of memory is
   obtained via \fBpcre_malloc\fR, and its address is returned via
   \fIstringptr\fR. The yield of the function is the length of the string, not
   including the terminating zero, or one of
  @@ -590,6 +610,15 @@
   inspecting the appropriate offset in \fIovector\fR, which is negative for unset
   substrings.
   
  +The two convenience functions \fBpcre_free_substring()\fR and
  +\fBpcre_free_substring_list()\fR can be used to free the memory returned by
  +a previous call of \fBpcre_get_substring()\fR or
  +\fBpcre_get_substring_list()\fR, respectively. They do nothing more than call
  +the function pointed to by \fBpcre_free\fR, which of course could be called
  +directly from a C program. However, PCRE is used in some situations where it is
  +linked via a special interface to another programming language which cannot use
  +\fBpcre_free\fR directly; it is for these cases that the functions are
  +provided.
   
   
   .SH LIMITATIONS
  @@ -691,8 +720,14 @@
   described below. Regular expressions are also described in the Perl
   documentation and in a number of other books, some of which have copious
   examples. Jeffrey Friedl's "Mastering Regular Expressions", published by
  -O'Reilly (ISBN 1-56592-257), covers them in great detail. The description
  -here is intended as reference documentation.
  +O'Reilly (ISBN 1-56592-257), covers them in great detail.
  +
  +The description here is intended as reference documentation. The basic
  +operation of PCRE is on strings of bytes. However, there is the beginnings of
  +some support for UTF-8 character strings. To use this support you must
  +configure PCRE to include it, and then call \fBpcre_compile()\fR with the
  +PCRE_UTF8 option. How this affects the pattern matching is described in the
  +final section of this document.
   
   A regular expression is a pattern that is matched against a subject string from
   left to right. Most characters stand for themselves in a pattern, and match the
  @@ -1311,7 +1346,7 @@
   
     (a|b\\1)+
   
  -matches any number of "a"s and also "aba", "ababaa" etc. At each iteration of
  +matches any number of "a"s and also "aba", "ababbaa" etc. At each iteration of
   the subpattern, the back reference matches the character string corresponding
   to the previous iteration. In order for this to work, the pattern must be such
   that the first iteration does not need to match the back reference. This can be
  @@ -1685,6 +1720,77 @@
   applied to a whole line of "a" characters, whereas the latter takes an
   appreciable time with strings longer than about 20 characters.
   
  +
  +.SH UTF-8 SUPPORT
  +Starting at release 3.3, PCRE has some support for character strings encoded
  +in the UTF-8 format. This is incomplete, and is regarded as experimental. In
  +order to use it, you must configure PCRE to include UTF-8 support in the code,
  +and, in addition, you must call \fBpcre_compile()\fR with the PCRE_UTF8 option
  +flag. When you do this, both the pattern and any subject strings that are
  +matched against it are treated as UTF-8 strings instead of just strings of
  +bytes, but only in the cases that are mentioned below.
  +
  +If you compile PCRE with UTF-8 support, but do not use it at run time, the
  +library will be a bit bigger, but the additional run time overhead is limited
  +to testing the PCRE_UTF8 flag in several places, so should not be very large.
  +
  +PCRE assumes that the strings it is given contain valid UTF-8 codes. It does
  +not diagnose invalid UTF-8 strings. If you pass invalid UTF-8 strings to PCRE,
  +the results are undefined.
  +
  +Running with PCRE_UTF8 set causes these changes in the way PCRE works:
  +
  +1. In a pattern, the escape sequence \\x{...}, where the contents of the braces
  +is a string of hexadecimal digits, is interpreted as a UTF-8 character whose
  +code number is the given hexadecimal number, for example: \\x{1234}. This
  +inserts from one to six literal bytes into the pattern, using the UTF-8
  +encoding. If a non-hexadecimal digit appears between the braces, the item is
  +not recognized.
  +
  +2. The original hexadecimal escape sequence, \\xhh, generates a two-byte UTF-8
  +character if its value is greater than 127.
  +
  +3. Repeat quantifiers are NOT correctly handled if they follow a multibyte
  +character. For example, \\x{100}* and \\xc3+ do not work. If you want to
  +repeat such characters, you must enclose them in non-capturing parentheses,
  +for example (?:\\x{100}), at present.
  +
  +4. The dot metacharacter matches one UTF-8 character instead of a single byte.
  +
  +5. Unlike literal UTF-8 characters, the dot metacharacter followed by a
  +repeat quantifier does operate correctly on UTF-8 characters instead of
  +single bytes.
  +
  +4. Although the \\x{...} escape is permitted in a character class, characters
  +whose values are greater than 255 cannot be included in a class.
  +
  +5. A class is matched against a UTF-8 character instead of just a single byte,
  +but it can match only characters whose values are less than 256. Characters
  +with greater values always fail to match a class.
  +
  +6. Repeated classes work correctly on multiple characters.
  +
  +7. Classes containing just a single character whose value is greater than 127
  +(but less than 256), for example, [\\x80] or [^\\x{93}], do not work because
  +these are optimized into single byte matches. In the first case, of course,
  +the class brackets are just redundant.
  +
  +8. Lookbehind assertions move backwards in the subject by a fixed number of
  +characters instead of a fixed number of bytes. Simple cases have been tested
  +to work correctly, but there may be hidden gotchas herein.
  +
  +9. The character types such as \\d and \\w do not work correctly with UTF-8
  +characters. They continue to test a single byte.
  +
  +10. Anything not explicitly mentioned here continues to work in bytes rather
  +than in characters.
  +
  +The following UTF-8 features of Perl 5.6 are not implemented:
  +
  +1. The escape sequence \\C to match a single byte.
  +
  +2. The use of Unicode tables and properties and escapes \\p, \\P, and \\X.
  +
   .SH AUTHOR
   Philip Hazel <ph10@cam.ac.uk>
   .br
  @@ -1696,6 +1802,8 @@
   .br
   Phone: +44 1223 334714
   
  -Last updated: 27 January 2000
  +Last updated: 28 August 2000,
  +.br
  +  the 250th anniversary of the death of J.S. Bach.
   .br
   Copyright (c) 1997-2000 University of Cambridge.
  Index: ossp-pkg/pcre/pcre.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 pcre.c
  --- ossp-pkg/pcre/pcre.c	2000/05/16 18:47:31	1.4
  +++ ossp-pkg/pcre/pcre.c	2000/08/02 09:46:06	1.5
  @@ -66,6 +66,16 @@
   #define BRASTACK_SIZE 200
   
   
  +/* The number of bytes in a literal character string above which we can't add
  +any more is different when UTF-8 characters may be encountered. */
  +
  +#ifdef SUPPORT_UTF8
  +#define MAXLIT 250
  +#else
  +#define MAXLIT 255
  +#endif
  +
  +
   /* Min and max values for the common repeats; for the maxima, 0 => infinity */
   
   static const char rep_min[] = { 0, 0, 1, 1, 0, 0 };
  @@ -176,6 +186,64 @@
   
   
   
  +/*************************************************
  +*    Macros and tables for character handling    *
  +*************************************************/
  +
  +/* When UTF-8 encoding is being used, a character is no longer just a single
  +byte. The macros for character handling generate simple sequences when used in
  +byte-mode, and more complicated ones for UTF-8 characters. */
  +
  +#ifndef SUPPORT_UTF8
  +#define GETCHARINC(c, eptr) c = *eptr++;
  +#define GETCHARLEN(c, eptr, len) c = *eptr;
  +#define BACKCHAR(eptr)
  +
  +#else   /* SUPPORT_UTF8 */
  +
  +/* Get the next UTF-8 character, advancing the pointer */
  +
  +#define GETCHARINC(c, eptr) \
  +  c = *eptr++; \
  +  if (md->utf8 && (c & 0xc0) == 0xc0) \
  +    { \
  +    int a = utf8_table4[c & 0x3f];  /* Number of additional bytes */ \
  +    int s = 6 - a;                  /* Amount to shift next byte */  \
  +    c &= utf8_table3[a];            /* Low order bits from first byte */ \
  +    while (a-- > 0) \
  +      { \
  +      c |= (*eptr++ & 0x3f) << s; \
  +      s += 6; \
  +      } \
  +    }
  +
  +/* Get the next UTF-8 character, not advancing the pointer, setting length */
  +
  +#define GETCHARLEN(c, eptr, len) \
  +  c = *eptr; \
  +  len = 1; \
  +  if (md->utf8 && (c & 0xc0) == 0xc0) \
  +    { \
  +    int i; \
  +    int a = utf8_table4[c & 0x3f];  /* Number of additional bytes */ \
  +    int s = 6 - a;                  /* Amount to shift next byte */  \
  +    c &= utf8_table3[a];            /* Low order bits from first byte */ \
  +    for (i = 1; i <= a; i++) \
  +      { \
  +      c |= (eptr[i] & 0x3f) << s; \
  +      s += 6; \
  +      } \
  +    len += a; \
  +    }
  +
  +/* If the pointer is not at the start of a character, move it back until
  +it is. */
  +
  +#define BACKCHAR(eptr) while((*eptr & 0xc0) == 0x80) eptr--;
  +
  +#endif
  +
  +
   
   /*************************************************
   *             Default character tables           *
  @@ -190,8 +258,68 @@
   #include "pcre_chartables.c"
   
   
  +#ifdef SUPPORT_UTF8
  +/*************************************************
  +*           Tables for UTF-8 support             *
  +*************************************************/
  +
  +/* These are the breakpoints for different numbers of bytes in a UTF-8
  +character. */
  +
  +static int utf8_table1[] = { 0x7f, 0x7ff, 0xffff, 0x1fffff, 0x3ffffff, 0x7fffffff};
   
  +/* These are the indicator bits and the mask for the data bits to set in the
  +first byte of a character, indexed by the number of additional bytes. */
  +
  +static int utf8_table2[] = { 0,    0xc0, 0xe0, 0xf0, 0xf8, 0xfc};
  +static int utf8_table3[] = { 0xff, 0x1f, 0x0f, 0x07, 0x03, 0x01};
  +
  +/* Table of the number of extra characters, indexed by the first character
  +masked with 0x3f. The highest number for a valid UTF-8 character is in fact
  +0x3d. */
  +
  +static uschar utf8_table4[] = {
  +  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  +  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  +  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
  +  3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5 };
  +
  +
   /*************************************************
  +*       Convert character value to UTF-8         *
  +*************************************************/
  +
  +/* This function takes an integer value in the range 0 - 0x7fffffff
  +and encodes it as a UTF-8 character in 0 to 6 bytes.
  +
  +Arguments:
  +  cvalue     the character value
  +  buffer     pointer to buffer for result - at least 6 bytes long
  +
  +Returns:     number of characters placed in the buffer
  +*/
  +
  +static int
  +ord2utf8(int cvalue, uschar *buffer)
  +{
  +register int i, j;
  +for (i = 0; i < sizeof(utf8_table1)/sizeof(int); i++)
  +  if (cvalue <= utf8_table1[i]) break;
  +*buffer++ = utf8_table2[i] | (cvalue & utf8_table3[i]);
  +cvalue >>= 6 - i;
  +for (j = 0; j < i; j++)
  +  {
  +  *buffer++ = 0x80 | (cvalue & 0x3f);
  +  cvalue >>= 6;
  +  }
  +return i + 1;
  +}
  +#endif
  +
  +
  +
  +/*************************************************
  +>>>>>>> ../arc/pcre-3.3/pcre.c
   *          Return version string                 *
   *************************************************/
   
  @@ -349,9 +477,9 @@
   
   /* This function is called when a \ has been encountered. It either returns a
   positive value for a simple escape such as \n, or a negative value which
  -encodes one of the more complicated things such as \d. On entry, ptr is
  -pointing at the \. On exit, it is on the final character of the escape
  -sequence.
  +encodes one of the more complicated things such as \d. When UTF-8 is enabled,
  +a positive value greater than 255 may be returned. On entry, ptr is pointing at
  +the \. On exit, it is on the final character of the escape sequence.
   
   Arguments:
     ptrptr     points to the pattern position pointer
  @@ -373,7 +501,9 @@
   const uschar *ptr = *ptrptr;
   int c, i;
   
  -c = *(++ptr) & 255;   /* Ensure > 0 on signed-char systems */
  +/* If backslash is at the end of the pattern, it's an error. */
  +
  +c = *(++ptr);
   if (c == 0) *errorptr = ERR1;
   
   /* Digits or letters may have special meaning; all others are literals. */
  @@ -433,18 +563,46 @@
         }
   
       /* \0 always starts an octal number, but we may drop through to here with a
  -    larger first octal digit */
  +    larger first octal digit. */
   
       case '0':
       c -= '0';
       while(i++ < 2 && (cd->ctypes[ptr[1]] & ctype_digit) != 0 &&
         ptr[1] != '8' && ptr[1] != '9')
           c = c * 8 + *(++ptr) - '0';
  +    c &= 255;     /* Take least significant 8 bits */
       break;
   
  -    /* Special escapes not starting with a digit are straightforward */
  +    /* \x is complicated when UTF-8 is enabled. \x{ddd} is a character number
  +    which can be greater than 0xff, but only if the ddd are hex digits. */
   
       case 'x':
  +#ifdef SUPPORT_UTF8
  +    if (ptr[1] == '{' && (options & PCRE_UTF8) != 0)
  +      {
  +      const uschar *pt = ptr + 2;
  +      register int count = 0;
  +      c = 0;
  +      while ((cd->ctypes[*pt] & ctype_xdigit) != 0)
  +        {
  +        count++;
  +        c = c * 16 + cd->lcc[*pt] -
  +          (((cd->ctypes[*pt] & ctype_digit) != 0)? '0' : 'W');
  +        pt++;
  +        }
  +      if (*pt == '}')
  +        {
  +        if (c < 0 || count > 8) *errorptr = ERR34;
  +        ptr = pt;
  +        break;
  +        }
  +      /* If the sequence of hex digits does not end with '}', then we don't
  +      recognize this construct; fall through to the normal \x handling. */
  +      }
  +#endif
  +
  +    /* Read just a single hex char */
  +
       c = 0;
       while (i++ < 2 && (cd->ctypes[ptr[1]] & ctype_xdigit) != 0)
         {
  @@ -454,6 +612,8 @@
         }
       break;
   
  +    /* Other special escapes not starting with a digit are straightforward */
  +
       case 'c':
       c = *(++ptr);
       if (c == 0)
  @@ -591,12 +751,13 @@
   
   Arguments:
     code     points to the start of the pattern (the bracket)
  +  options  the compiling options
   
   Returns:   the fixed length, or -1 if there is no fixed length
   */
   
   static int
  -find_fixedlength(uschar *code)
  +find_fixedlength(uschar *code, int options)
   {
   int length = -1;
   
  @@ -617,7 +778,7 @@
       case OP_BRA:
       case OP_ONCE:
       case OP_COND:
  -    d = find_fixedlength(cc);
  +    d = find_fixedlength(cc, options);
       if (d < 0) return -1;
       branchlength += d;
       do cc += (cc[1] << 8) + cc[2]; while (*cc == OP_ALT);
  @@ -671,10 +832,17 @@
       cc++;
       break;
   
  -    /* Handle char strings */
  +    /* Handle char strings. In UTF-8 mode we must count characters, not bytes.
  +    This requires a scan of the string, unfortunately. We assume valid UTF-8
  +    strings, so all we do is reduce the length by one for byte whose bits are
  +    10xxxxxx. */
   
       case OP_CHARS:
       branchlength += *(++cc);
  +#ifdef SUPPORT_UTF8
  +    for (d = 1; d <= *cc; d++)
  +      if ((cc[d] & 0xc0) == 0x80) branchlength--;
  +#endif
       cc += *cc + 1;
       break;
   
  @@ -1053,8 +1221,18 @@
               *errorptr = ERR7;
               goto FAILED;
               }
  +          }
  +
  +        /* Fall through if single character, but don't at present allow
  +        chars > 255 in UTF-8 mode. */
  +
  +#ifdef SUPPORT_UTF8
  +        if (c > 255)
  +          {
  +          *errorptr = ERR33;
  +          goto FAILED;
             }
  -        /* Fall through if single character */
  +#endif
           }
   
         /* A single character may be followed by '-' to form a range. However,
  @@ -1074,17 +1252,29 @@
             }
   
           /* The second part of a range can be a single-character escape, but
  -        not any of the other escapes. */
  +        not any of the other escapes. Perl 5.6 treats a hyphen as a literal
  +        in such circumstances. */
   
           if (d == '\\')
             {
  +          const uschar *oldptr = ptr;
             d = check_escape(&ptr, errorptr, *brackets, options, TRUE, cd);
  +
  +#ifdef SUPPORT_UTF8
  +          if (d > 255)
  +            {
  +            *errorptr = ERR33;
  +            goto FAILED;
  +            }
  +#endif
  +          /* \b is backslash; any other special means the '-' was literal */
  +
             if (d < 0)
               {
               if (d == -ESC_b) d = '\b'; else
                 {
  -              *errorptr = ERR7;
  -              goto FAILED;
  +              ptr = oldptr - 2;
  +              goto SINGLE_CHARACTER;  /* A few lines below */
                 }
               }
             }
  @@ -1112,6 +1302,8 @@
         /* Handle a lone single character - we can get here for a normal
         non-escape char, or after \ that introduces a single character. */
   
  +      SINGLE_CHARACTER:
  +
         class [c/8] |= (1 << (c&7));
         if ((options & PCRE_CASELESS) != 0)
           {
  @@ -1829,6 +2021,20 @@
           tempptr = ptr;
           c = check_escape(&ptr, errorptr, *brackets, options, FALSE, cd);
           if (c < 0) { ptr = tempptr; break; }
  +
  +        /* If a character is > 127 in UTF-8 mode, we have to turn it into
  +        two or more characters in the UTF-8 encoding. */
  +
  +#ifdef SUPPORT_UTF8
  +        if (c > 127 && (options & PCRE_UTF8) != 0)
  +          {
  +          uschar buffer[8];
  +          int len = ord2utf8(c, buffer);
  +          for (c = 0; c < len; c++) *code++ = buffer[c];
  +          length += len;
  +          continue;
  +          }
  +#endif
           }
   
         /* Ordinary character or single-char escape */
  @@ -1839,7 +2045,7 @@
   
       /* This "while" is the end of the "do" above. */
   
  -    while (length < 255 && (cd->ctypes[c = *(++ptr)] & ctype_meta) == 0);
  +    while (length < MAXLIT && (cd->ctypes[c = *(++ptr)] & ctype_meta) == 0);
   
       /* Update the last character and the count of literals */
   
  @@ -1851,7 +2057,7 @@
       the next state. */
   
       previous[1] = length;
  -    if (length < 255) ptr--;
  +    if (length < MAXLIT) ptr--;
       break;
       }
     }                   /* end of big loop */
  @@ -1989,7 +2195,7 @@
     if (lookbehind)
       {
       *code = OP_END;
  -    length = find_fixedlength(last_branch);
  +    length = find_fixedlength(last_branch, options);
       DPRINTF(("fixed length = %d\n", length));
       if (length < 0)
         {
  @@ -2280,6 +2486,16 @@
   uschar *code_base, *code_end;
   #endif
   
  +/* Can't support UTF8 unless PCRE has been compiled to include the code. */
  +
  +#ifndef SUPPORT_UTF8
  +if ((options & PCRE_UTF8) != 0)
  +  {
  +  *errorptr = ERR32;
  +  return NULL;
  +  }
  +#endif
  +
   /* We can't pass back an error message if errorptr is NULL; I guess the best we
   can do is just return NULL. */
   
  @@ -2775,6 +2991,16 @@
             &compile_block);
           if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
           if (c < 0) { ptr = saveptr; break; }
  +
  +#ifdef SUPPORT_UTF8
  +        if (c > 127 && (options & PCRE_UTF8) != 0)
  +          {
  +          int i;
  +          for (i = 0; i < sizeof(utf8_table1)/sizeof(int); i++)
  +            if (c <= utf8_table1[i]) break;
  +          runlength += i;
  +          }
  +#endif
           }
   
         /* Ordinary character or single-char escape */
  @@ -2784,7 +3010,7 @@
   
       /* This "while" is the end of the "do" above. */
   
  -    while (runlength < 255 &&
  +    while (runlength < MAXLIT &&
         (compile_block.ctypes[c = *(++ptr)] & ctype_meta) == 0);
   
       ptr--;
  @@ -3429,10 +3655,21 @@
   
       /* Move the subject pointer back. This occurs only at the start of
       each branch of a lookbehind assertion. If we are too close to the start to
  -    move back, this match function fails. */
  +    move back, this match function fails. When working with UTF-8 we move
  +    back a number of characters, not bytes. */
   
       case OP_REVERSE:
  +#ifdef SUPPORT_UTF8
  +    c = (ecode[1] << 8) + ecode[2];
  +    for (i = 0; i < c; i++)
  +      {
  +      eptr--;
  +      BACKCHAR(eptr)
  +      }
  +#else
       eptr -= (ecode[1] << 8) + ecode[2];
  +#endif
  +
       if (eptr < md->start_subject) return FALSE;
       ecode += 3;
       break;
  @@ -3752,6 +3989,10 @@
       if ((ims & PCRE_DOTALL) == 0 && eptr < md->end_subject && *eptr == '\n')
         return FALSE;
       if (eptr++ >= md->end_subject) return FALSE;
  +#ifdef SUPPORT_UTF8
  +    if (md->utf8)
  +      while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
  +#endif
       ecode++;
       break;
   
  @@ -3953,7 +4194,13 @@
         for (i = 1; i <= min; i++)
           {
           if (eptr >= md->end_subject) return FALSE;
  -        c = *eptr++;
  +        GETCHARINC(c, eptr)         /* Get character; increment eptr */
  +
  +#ifdef SUPPORT_UTF8
  +        /* We do not yet support class members > 255 */
  +        if (c > 255) return FALSE;
  +#endif
  +
           if ((data[c/8] & (1 << (c&7))) != 0) continue;
           return FALSE;
           }
  @@ -3973,7 +4220,12 @@
             if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
               return TRUE;
             if (i >= max || eptr >= md->end_subject) return FALSE;
  -          c = *eptr++;
  +          GETCHARINC(c, eptr)       /* Get character; increment eptr */
  +
  +#ifdef SUPPORT_UTF8
  +          /* We do not yet support class members > 255 */
  +          if (c > 255) return FALSE;
  +#endif
             if ((data[c/8] & (1 << (c&7))) != 0) continue;
             return FALSE;
             }
  @@ -3985,17 +4237,29 @@
         else
           {
           const uschar *pp = eptr;
  -        for (i = min; i < max; eptr++, i++)
  +        int len = 1;
  +        for (i = min; i < max; i++)
             {
             if (eptr >= md->end_subject) break;
  -          c = *eptr;
  -          if ((data[c/8] & (1 << (c&7))) != 0) continue;
  -          break;
  +          GETCHARLEN(c, eptr, len)  /* Get character, set length if UTF-8 */
  +
  +#ifdef SUPPORT_UTF8
  +          /* We do not yet support class members > 255 */
  +          if (c > 255) break;
  +#endif
  +          if ((data[c/8] & (1 << (c&7))) == 0) break;
  +          eptr += len;
             }
   
           while (eptr >= pp)
  +          {
             if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
               return TRUE;
  +
  +#ifdef SUPPORT_UTF8
  +          BACKCHAR(eptr)
  +#endif
  +          }
           return FALSE;
           }
         }
  @@ -4315,13 +4579,29 @@
   
       /* First, ensure the minimum number of matches are present. Use inline
       code for maximizing the speed, and do the type test once at the start
  -    (i.e. keep it out of the loop). Also test that there are at least the
  -    minimum number of characters before we start. */
  +    (i.e. keep it out of the loop). Also we can test that there are at least
  +    the minimum number of bytes before we start, except when doing '.' in
  +    UTF8 mode. Leave the test in in all cases; in the special case we have
  +    to test after each character. */
   
       if (min > md->end_subject - eptr) return FALSE;
       if (min > 0) switch(ctype)
         {
         case OP_ANY:
  +#ifdef SUPPORT_UTF8
  +      if (md->utf8)
  +        {
  +        for (i = 1; i <= min; i++)
  +          {
  +          if (eptr >= md->end_subject ||
  +             (*eptr++ == '\n' && (ims & PCRE_DOTALL) == 0))
  +            return FALSE;
  +          while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
  +          }
  +        break;
  +        }
  +#endif
  +      /* Non-UTF8 can be faster */
         if ((ims & PCRE_DOTALL) == 0)
           { for (i = 1; i <= min; i++) if (*eptr++ == '\n') return FALSE; }
         else eptr += min;
  @@ -4379,6 +4659,10 @@
             {
             case OP_ANY:
             if ((ims & PCRE_DOTALL) == 0 && c == '\n') return FALSE;
  +#ifdef SUPPORT_UTF8
  +          if (md->utf8)
  +            while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
  +#endif
             break;
   
             case OP_NOT_DIGIT:
  @@ -4418,6 +4702,33 @@
         switch(ctype)
           {
           case OP_ANY:
  +
  +        /* Special code is required for UTF8, but when the maximum is unlimited
  +        we don't need it. */
  +
  +#ifdef SUPPORT_UTF8
  +        if (md->utf8 && max < INT_MAX)
  +          {
  +          if ((ims & PCRE_DOTALL) == 0)
  +            {
  +            for (i = min; i < max; i++)
  +              {
  +              if (eptr >= md->end_subject || *eptr++ == '\n') break;
  +              while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
  +              }
  +            }
  +          else
  +            {
  +            for (i = min; i < max; i++)
  +              {
  +              eptr++;
  +              while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
  +              }
  +            }
  +          break;
  +          }
  +#endif
  +        /* Non-UTF8 can be faster */
           if ((ims & PCRE_DOTALL) == 0)
             {
             for (i = min; i < max; i++)
  @@ -4490,8 +4801,14 @@
           }
   
         while (eptr >= pp)
  +        {
           if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
             return TRUE;
  +#ifdef SUPPORT_UTF8
  +        if (md->utf8)
  +          while (eptr > pp && (*eptr & 0xc0) == 0x80) eptr--;
  +#endif
  +        }
         return FALSE;
         }
       /* Control never gets here */
  @@ -4572,6 +4889,7 @@
   end_subject = match_block.end_subject;
   
   match_block.endonly = (re->options & PCRE_DOLLAR_ENDONLY) != 0;
  +match_block.utf8 = (re->options & PCRE_UTF8) != 0;
   
   match_block.notbol = (options & PCRE_NOTBOL) != 0;
   match_block.noteol = (options & PCRE_NOTEOL) != 0;
  Index: ossp-pkg/pcre/pcre.h
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 pcre.h
  --- ossp-pkg/pcre/pcre.h	2000/05/16 18:47:31	1.5
  +++ ossp-pkg/pcre/pcre.h	2000/08/02 09:46:06	1.6
  @@ -8,8 +8,8 @@
   #define _PCRE_H
   
   #define PCRE_MAJOR 3
  -#define PCRE_MINOR 2
  -#define PCRE_DATE  12-May-2000
  +#define PCRE_MINOR 3
  +#define PCRE_DATE  01-Aug-2000
   
   #define __PCRE_STRING(a)  #a
   #define __PCRE_XSTRING(s) _STRING(s)
  @@ -53,6 +53,7 @@
   #define PCRE_NOTEOL          0x0100
   #define PCRE_UNGREEDY        0x0200
   #define PCRE_NOTEMPTY        0x0400
  +#define PCRE_UTF8            0x0800
   
   /* Exec-time and get-time error codes */
   
  @@ -91,14 +92,16 @@
   /* Functions */
   
   extern pcre *pcre_compile(const char *, int, const char **, int *,
  -  const unsigned char *);
  -extern int pcre_copy_substring(const char *, int *, int, int, char *, int);
  -extern int pcre_exec(const pcre *, const pcre_extra *, const char *,
  -  int, int, int, int *, int);
  -extern int pcre_get_substring(const char *, int *, int, int, const char **);
  -extern int pcre_get_substring_list(const char *, int *, int, const char ***);
  -extern int pcre_info(const pcre *, int *, int *);
  -extern int pcre_fullinfo(const pcre *, const pcre_extra *, int, void *);
  +              const unsigned char *);
  +extern int  pcre_copy_substring(const char *, int *, int, int, char *, int);
  +extern int  pcre_exec(const pcre *, const pcre_extra *, const char *,
  +              int, int, int, int *, int);
  +extern void pcre_free_substring(const char *);
  +extern void pcre_free_substring_list(const char **);
  +extern int  pcre_get_substring(const char *, int *, int, int, const char **);
  +extern int  pcre_get_substring_list(const char *, int *, int, const char ***);
  +extern int  pcre_info(const pcre *, int *, int *);
  +extern int  pcre_fullinfo(const pcre *, const pcre_extra *, int, void *);
   extern unsigned const char *pcre_maketables(void);
   extern pcre_extra *pcre_study(const pcre *, int, const char **);
   extern const char *pcre_version(void);
  Index: ossp-pkg/pcre/pcre_get.c
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 pcre_get.c
  --- ossp-pkg/pcre/pcre_get.c	1999/08/26 08:15:19	1.1.1.1
  +++ ossp-pkg/pcre/pcre_get.c	2000/08/02 09:46:06	1.2
  @@ -9,7 +9,7 @@
   
   Written by: Philip Hazel <ph10@cam.ac.uk>
   
  -           Copyright (c) 1997-1999 University of Cambridge
  +           Copyright (c) 1997-2000 University of Cambridge
   
   -----------------------------------------------------------------------------
   Permission is granted to anyone to use this software for any purpose on any
  @@ -144,6 +144,25 @@
   
   
   /*************************************************
  +*   Free store obtained by get_substring_list    *
  +*************************************************/
  +
  +/* This function exists for the benefit of people calling PCRE from non-C
  +programs that can call its functions, but not free() or (pcre_free)() directly.
  +
  +Argument:   the result of a previous pcre_get_substring_list()
  +Returns:    nothing
  +*/
  +
  +void
  +pcre_free_substring_list(const char **pointer)
  +{
  +(pcre_free)((void *)pointer);
  +}
  +
  +
  +
  +/*************************************************
   *      Copy captured string to new store         *
   *************************************************/
   
  @@ -184,6 +203,25 @@
   substring[yield] = 0;
   *stringptr = substring;
   return yield;
  +}
  +
  +
  +
  +/*************************************************
  +*       Free store obtained by get_substring     *
  +*************************************************/
  +
  +/* This function exists for the benefit of people calling PCRE from non-C
  +programs that can call its functions, but not free() or (pcre_free)() directly.
  +
  +Argument:   the result of a previous pcre_get_substring()
  +Returns:    nothing
  +*/
  +
  +void
  +pcre_free_substring(const char *pointer)
  +{
  +(pcre_free)((void *)pointer);
   }
   
   /* End of get.c */
  Index: ossp-pkg/pcre/pcre_internal.h
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 pcre_internal.h
  --- ossp-pkg/pcre/pcre_internal.h	2000/05/16 18:47:31	1.4
  +++ ossp-pkg/pcre/pcre_internal.h	2000/08/02 09:46:06	1.5
  @@ -105,7 +105,7 @@
   
   #define PUBLIC_OPTIONS \
     (PCRE_CASELESS|PCRE_EXTENDED|PCRE_ANCHORED|PCRE_MULTILINE| \
  -   PCRE_DOTALL|PCRE_DOLLAR_ENDONLY|PCRE_EXTRA|PCRE_UNGREEDY)
  +   PCRE_DOTALL|PCRE_DOLLAR_ENDONLY|PCRE_EXTRA|PCRE_UNGREEDY|PCRE_UTF8)
   
   #define PUBLIC_EXEC_OPTIONS \
     (PCRE_ANCHORED|PCRE_NOTBOL|PCRE_NOTEOL|PCRE_NOTEMPTY)
  @@ -274,6 +274,9 @@
   #define ERR29 "(?p must be followed by )"
   #define ERR30 "unknown POSIX class name"
   #define ERR31 "POSIX collating elements are not supported"
  +#define ERR32 "this version of PCRE is not compiled with PCRE_UTF8 support"
  +#define ERR33 "characters with values > 255 are not yet supported in classes"
  +#define ERR34 "character value in \\x{...} sequence is too large"
   
   /* All character handling must be done as unsigned characters. Otherwise there
   are problems with top-bit-set characters and functions such as isspace().
  @@ -330,6 +333,7 @@
     BOOL   offset_overflow;       /* Set if too many extractions */
     BOOL   notbol;                /* NOTBOL flag */
     BOOL   noteol;                /* NOTEOL flag */
  +  BOOL   utf8;                  /* UTF8 flag */
     BOOL   endonly;               /* Dollar not before final \n */
     BOOL   notempty;              /* Empty string match not wanted */
     const uschar *start_pattern;  /* For use when recursing */
  Index: ossp-pkg/pcre/pcre_test.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 pcre_test.c
  --- ossp-pkg/pcre/pcre_test.c	2000/05/16 18:47:31	1.4
  +++ ossp-pkg/pcre/pcre_test.c	2000/08/02 09:46:06	1.5
  @@ -38,6 +38,113 @@
   
   
   
  +static int utf8_table1[] = {
  +  0x0000007f, 0x000007ff, 0x0000ffff, 0x001fffff, 0x03ffffff, 0x7fffffff};
  +
  +static int utf8_table2[] = {
  +  0, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc};
  +
  +static int utf8_table3[] = {
  +  0xff, 0x1f, 0x0f, 0x07, 0x03, 0x01};
  +
  +
  +/*************************************************
  +*       Convert character value to UTF-8         *
  +*************************************************/
  +
  +/* This function takes an integer value in the range 0 - 0x7fffffff
  +and encodes it as a UTF-8 character in 0 to 6 bytes.
  +
  +Arguments:
  +  cvalue     the character value
  +  buffer     pointer to buffer for result - at least 6 bytes long
  +
  +Returns:     number of characters placed in the buffer
  +             -1 if input character is negative
  +             0 if input character is positive but too big (only when
  +             int is longer than 32 bits)
  +*/
  +
  +static int
  +ord2utf8(int cvalue, unsigned char *buffer)
  +{
  +register int i, j;
  +for (i = 0; i < sizeof(utf8_table1)/sizeof(int); i++)
  +  if (cvalue <= utf8_table1[i]) break;
  +if (i >= sizeof(utf8_table1)/sizeof(int)) return 0;
  +if (cvalue < 0) return -1;
  +*buffer++ = utf8_table2[i] | (cvalue & utf8_table3[i]);
  +cvalue >>= 6 - i;
  +for (j = 0; j < i; j++)
  +  {
  +  *buffer++ = 0x80 | (cvalue & 0x3f);
  +  cvalue >>= 6;
  +  }
  +return i + 1;
  +}
  +
  +
  +/*************************************************
  +*            Convert UTF-8 string to value       *
  +*************************************************/
  +
  +/* This function takes one or more bytes that represents a UTF-8 character,
  +and returns the value of the character.
  +
  +Argument:
  +  buffer   a pointer to the byte vector
  +  vptr     a pointer to an int to receive the value
  +
  +Returns:   >  0 => the number of bytes consumed
  +           -6 to 0 => malformed UTF-8 character at offset = (-return)
  +*/
  +
  +static int
  +utf82ord(unsigned char *buffer, int *vptr)
  +{
  +int c = *buffer++;
  +int d = c;
  +int i, j, s;
  +
  +for (i = -1; i < 6; i++)               /* i is number of additional bytes */
  +  {
  +  if ((d & 0x80) == 0) break;
  +  d <<= 1;
  +  }
  +
  +if (i == -1) { *vptr = c; return 1; }  /* ascii character */
  +if (i == 0 || i == 6) return 0;        /* invalid UTF-8 */
  +
  +/* i now has a value in the range 1-5 */
  +
  +d = c & utf8_table3[i];
  +s = 6 - i;
  +
  +for (j = 0; j < i; j++)
  +  {
  +  c = *buffer++;
  +  if ((c & 0xc0) != 0x80) return -(j+1);
  +  d |= (c & 0x3f) << s;
  +  s += 6;
  +  }
  +
  +/* Check that encoding was the correct unique one */
  +
  +for (j = 0; j < sizeof(utf8_table1)/sizeof(int); j++)
  +  if (d <= utf8_table1[j]) break;
  +if (j != i) return -(i+1);
  +
  +/* Valid value */
  +
  +*vptr = d;
  +return i+1;
  +}
  +
  +
  +
  +
  +
  +
   /* Debugging function to print the internal form of the regex. This is the same
   code as contained in pcre.c under the DEBUG macro. */
   
  @@ -265,14 +372,31 @@
   
   
   
  -/* Character string printing function. */
  +/* Character string printing function. A "normal" and a UTF-8 version. */
   
  -static void pchars(unsigned char *p, int length)
  +static void pchars(unsigned char *p, int length, int utf8)
   {
   int c;
   while (length-- > 0)
  +  {
  +  if (utf8)
  +    {
  +    int rc = utf82ord(p, &c);
  +    if (rc > 0)
  +      {
  +      length -= rc - 1;
  +      p += rc;
  +      if (c < 256 && isprint(c)) fprintf(outfile, "%c", c);
  +        else fprintf(outfile, "\\x{%02x}", c);
  +      continue;
  +      }
  +    }
  +
  +   /* Not UTF-8, or malformed UTF-8  */
  +
     if (isprint(c = *(p++))) fprintf(outfile, "%c", c);
       else fprintf(outfile, "\\x%02x", c);
  +  }
   }
   
   
  @@ -403,6 +527,7 @@
     int do_showinfo = showinfo;
     int do_showrest = 0;
     int do_posix = 0;
  +  int utf8 = 0;
     int erroroffset, len, delimiter;
   
     if (infile == stdin) printf("  re> ");
  @@ -494,6 +619,7 @@
         case 'S': do_study = 1; break;
         case 'U': options |= PCRE_UNGREEDY; break;
         case 'X': options |= PCRE_EXTRA; break;
  +      case '8': options |= PCRE_UTF8; utf8 = 1; break;
   
         case 'L':
         ppp = pp;
  @@ -633,7 +759,7 @@
         if (backrefmax > 0)
           fprintf(outfile, "Max back reference = %d\n", backrefmax);
         if (options == 0) fprintf(outfile, "No options\n");
  -        else fprintf(outfile, "Options:%s%s%s%s%s%s%s%s\n",
  +        else fprintf(outfile, "Options:%s%s%s%s%s%s%s%s%s\n",
             ((options & PCRE_ANCHORED) != 0)? " anchored" : "",
             ((options & PCRE_CASELESS) != 0)? " caseless" : "",
             ((options & PCRE_EXTENDED) != 0)? " extended" : "",
  @@ -641,7 +767,8 @@
             ((options & PCRE_DOTALL) != 0)? " dotall" : "",
             ((options & PCRE_DOLLAR_ENDONLY) != 0)? " dollar_endonly" : "",
             ((options & PCRE_EXTRA) != 0)? " extra" : "",
  -          ((options & PCRE_UNGREEDY) != 0)? " ungreedy" : "");
  +          ((options & PCRE_UNGREEDY) != 0)? " ungreedy" : "",
  +          ((options & PCRE_UTF8) != 0)? " utf8" : "");
   
         if (((((real_pcre *)re)->options) & PCRE_ICHANGED) != 0)
           fprintf(outfile, "Case state changes\n");
  @@ -796,6 +923,30 @@
           break;
   
           case 'x':
  +
  +        /* Handle \x{..} specially - new Perl thing for utf8 */
  +
  +        if (*p == '{')
  +          {
  +          unsigned char *pt = p;
  +          c = 0;
  +          while (isxdigit(*(++pt)))
  +            c = c * 16 + tolower(*pt) - ((isdigit(*pt))? '0' : 'W');
  +          if (*pt == '}')
  +            {
  +            unsigned char utf8_buffer[8];
  +            int ii, utn;
  +            utn = ord2utf8(c, utf8_buffer);
  +            for (ii = 0; ii < utn - 1; ii++) *q++ = utf8_buffer[ii];
  +            c = utf8_buffer[ii];   /* Last byte */
  +            p = pt + 1;
  +            break;
  +            }
  +          /* Not correct form; fall through */
  +          }
  +
  +        /* Ordinary \x */
  +
           c = 0;
           while (i++ < 2 && isxdigit(*p))
             {
  @@ -876,12 +1027,12 @@
               {
               fprintf(outfile, "%2d: ", (int)i);
               pchars(dbuffer + pmatch[i].rm_so,
  -              pmatch[i].rm_eo - pmatch[i].rm_so);
  +              pmatch[i].rm_eo - pmatch[i].rm_so, utf8);
               fprintf(outfile, "\n");
               if (i == 0 && do_showrest)
                 {
                 fprintf(outfile, " 0+ ");
  -              pchars(dbuffer + pmatch[i].rm_eo, len - pmatch[i].rm_eo);
  +              pchars(dbuffer + pmatch[i].rm_eo, len - pmatch[i].rm_eo, utf8);
                 fprintf(outfile, "\n");
                 }
               }
  @@ -931,14 +1082,14 @@
             else
               {
               fprintf(outfile, "%2d: ", i/2);
  -            pchars(bptr + offsets[i], offsets[i+1] - offsets[i]);
  +            pchars(bptr + offsets[i], offsets[i+1] - offsets[i], utf8);
               fprintf(outfile, "\n");
               if (i == 0)
                 {
                 if (do_showrest)
                   {
                   fprintf(outfile, " 0+ ");
  -                pchars(bptr + offsets[i+1], len - offsets[i+1]);
  +                pchars(bptr + offsets[i+1], len - offsets[i+1], utf8);
                   fprintf(outfile, "\n");
                   }
                 }
  @@ -971,7 +1122,8 @@
               else
                 {
                 fprintf(outfile, "%2dG %s (%d)\n", i, substring, rc);
  -              free((void *)substring);
  +              /* free((void *)substring); */
  +              pcre_free_substring(substring);
                 }
               }
             }
  @@ -989,7 +1141,8 @@
                 fprintf(outfile, "%2dL %s\n", i, stringlist[i]);
               if (stringlist[i] != NULL)
                 fprintf(outfile, "string list not terminated by NULL\n");
  -            free((void *)stringlist);
  +            /* free((void *)stringlist); */
  +            pcre_free_substring_list(stringlist);
               }
             }
           }
  Index: ossp-pkg/pcre/pcre_test.d/testinput1
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 testinput1
  --- ossp-pkg/pcre/pcre_test.d/testinput1	2000/02/02 17:18:46	1.2
  +++ ossp-pkg/pcre/pcre_test.d/testinput1	2000/08/02 09:46:09	1.3
  @@ -1898,4 +1898,24 @@
   //g
       abc
   
  -/ End of test input /
  +/<tr([\w\W\s\d][^<>]{0,})><TD([\w\W\s\d][^<>]{0,})>([\d]{0,}\.)(.*)((<BR>([\w\W\s\d][^<>]{0,})|[\s]{0,}))<\/a><\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><\/TR>/is
  +  <TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>
  +
  +/a[^a]b/
  +    acb
  +    a\nb
  +    
  +/a.b/
  +    acb
  +    *** Failers 
  +    a\nb   
  +    
  +/a[^a]b/s
  +    acb
  +    a\nb  
  +    
  +/a.b/s
  +    acb
  +    a\nb  
  +
  +/ End of testinput1 /
  Index: ossp-pkg/pcre/pcre_test.d/testinput2
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 testinput2
  --- ossp-pkg/pcre/pcre_test.d/testinput2	2000/02/02 17:18:46	1.3
  +++ ossp-pkg/pcre/pcre_test.d/testinput2	2000/08/02 09:46:09	1.4
  @@ -40,8 +40,6 @@
   
   /[\B]/
   
  -/[a-\w]/
  -
   /[z-a]/
   
   /^*/
  @@ -706,5 +704,7 @@
       *** Failers
       Ab
       AB        
  +
  +/[\200-\410]/
   
  -/ End of test input /
  +/ End of testinput2 /
  Index: ossp-pkg/pcre/pcre_test.d/testinput3
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 testinput3
  --- ossp-pkg/pcre/pcre_test.d/testinput3	2000/05/16 18:47:31	1.3
  +++ ossp-pkg/pcre/pcre_test.d/testinput3	2000/08/02 09:46:09	1.4
  @@ -1707,4 +1707,18 @@
   /a*/g
       abbab
   
  -/ End of test input /       
  +/^[a-\d]/
  +    abcde
  +    -things
  +    0digit
  +    *** Failers
  +    bcdef    
  +
  +/^[\d-a]/
  +    abcde
  +    -things
  +    0digit
  +    *** Failers
  +    bcdef    
  +
  +/ End of testinput3 /       
  Index: ossp-pkg/pcre/pcre_test.d/testinput4
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 testinput4
  --- ossp-pkg/pcre/pcre_test.d/testinput4	1999/08/26 08:15:20	1.1.1.1
  +++ ossp-pkg/pcre/pcre_test.d/testinput4	2000/08/02 09:46:09	1.2
  @@ -62,3 +62,4 @@
       *** Failers 
       école
   
  +/ End of testinput4 /
  Index: ossp-pkg/pcre/pcre_test.d/testinput5
  ============================================================
  $ cvs update -p -r1.1 testinput5
  /-- Because of problems with Perl 5.6 in handling UTF-8 vs non UTF-8 --/
  /-- strings automatically, do not use the \x{} construct except with --/
  /-- patterns that have the /8 option set, and don't use them without! --/
  
  /a.b/8
      acb
      a\x7fb
      a\x{100}b 
      *** Failers
      a\nb  
  
  /a(.{3})b/8
      a\x{4000}xyb 
      a\x{4000}\x7fyb 
      a\x{4000}\x{100}yb 
      *** Failers
      a\x{4000}b 
      ac\ncb 
  
  /a(.*?)(.)/
      a\xc0\x88b
  
  /a(.*?)(.)/8
      a\x{100}b
  
  /a(.*)(.)/
      a\xc0\x88b
  
  /a(.*)(.)/8
      a\x{100}b
  
  /a(.)(.)/
      a\xc0\x92bcd
  
  /a(.)(.)/8
      a\x{240}bcd
  
  /a(.?)(.)/
      a\xc0\x92bcd
  
  /a(.?)(.)/8
      a\x{240}bcd
  
  /a(.??)(.)/
      a\xc0\x92bcd
  
  /a(.??)(.)/8
      a\x{240}bcd
  
  /a(.{3})b/8
      a\x{1234}xyb 
      a\x{1234}\x{4321}yb 
      a\x{1234}\x{4321}\x{3412}b 
      *** Failers
      a\x{1234}b 
      ac\ncb 
  
  /a(.{3,})b/8
      a\x{1234}xyb 
      a\x{1234}\x{4321}yb 
      a\x{1234}\x{4321}\x{3412}b 
      axxxxbcdefghijb 
      a\x{1234}\x{4321}\x{3412}\x{3421}b 
      *** Failers
      a\x{1234}b 
  
  /a(.{3,}?)b/8
      a\x{1234}xyb 
      a\x{1234}\x{4321}yb 
      a\x{1234}\x{4321}\x{3412}b 
      axxxxbcdefghijb 
      a\x{1234}\x{4321}\x{3412}\x{3421}b 
      *** Failers
      a\x{1234}b 
  
  /a(.{3,5})b/8
      a\x{1234}xyb 
      a\x{1234}\x{4321}yb 
      a\x{1234}\x{4321}\x{3412}b 
      axxxxbcdefghijb 
      a\x{1234}\x{4321}\x{3412}\x{3421}b 
      axbxxbcdefghijb 
      axxxxxbcdefghijb 
      *** Failers
      a\x{1234}b 
      axxxxxxbcdefghijb 
  
  /a(.{3,5}?)b/8
      a\x{1234}xyb 
      a\x{1234}\x{4321}yb 
      a\x{1234}\x{4321}\x{3412}b 
      axxxxbcdefghijb 
      a\x{1234}\x{4321}\x{3412}\x{3421}b 
      axbxxbcdefghijb 
      axxxxxbcdefghijb 
      *** Failers
      a\x{1234}b 
      axxxxxxbcdefghijb 
  
  /^[a\x{c0}]/8
      *** Failers
      \x{100}
  
  /(?<=aXb)cd/8
      aXbcd
  
  /(?<=a\x{100}b)cd/8
      a\x{100}bcd
  
  /(?<=a\x{100000}b)cd/8
      a\x{100000}bcd
      
  /(?:\x{100}){3}b/8
      \x{100}\x{100}\x{100}b
      *** Failers 
      \x{100}\x{100}b
  
  / End of testinput5 /
  Index: ossp-pkg/pcre/pcre_test.d/testinput6
  ============================================================
  $ cvs update -p -r1.1 testinput6
  /\x{100}/8DM
  
  /\x{1000}/8DM
  
  /\x{10000}/8DM
  
  /\x{100000}/8DM
  
  /\x{1000000}/8DM
  
  /\x{4000000}/8DM
  
  /\x{7fffFFFF}/8DM
  
  /[\x{ff}]/8DM
  
  /[\x{100}]/8DM
  
  /\x{ffffffff}/8
  
  /\x{100000000}/8
  
  /^\x{100}a\x{1234}/8
      \x{100}a\x{1234}bcd
  
  /\x80/8D
  
  /\xff/8D
  
  /-- These tests are here rather than in testinput5 because Perl 5.6 has --/
  /-- some problems with UTF-8 support, in the area of \x{..} where the   --/
  /-- value is < 255. It grumbles about invalid UTF-8 strings.            --/
  
  /^[a\x{c0}]b/8
      \x{c0}b
      
  /^([a\x{c0}]*?)aa/8
      a\x{c0}aaaa/ 
  
  /^([a\x{c0}]*?)aa/8
      a\x{c0}aaaa/ 
      a\x{c0}a\x{c0}aaa/ 
  
  /^([a\x{c0}]*)aa/8
      a\x{c0}aaaa/ 
      a\x{c0}a\x{c0}aaa/ 
  
  /^([a\x{c0}]*)a\x{c0}/8
      a\x{c0}aaaa/ 
      a\x{c0}a\x{c0}aaa/ 
  
  / End of testinput6 /
  Index: ossp-pkg/pcre/pcre_test.d/testoutput1
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 testoutput1
  --- ossp-pkg/pcre/pcre_test.d/testoutput1	2000/05/16 18:47:31	1.5
  +++ ossp-pkg/pcre/pcre_test.d/testoutput1	2000/08/02 09:46:09	1.6
  @@ -1,4 +1,4 @@
  -PCRE version 3.2 12-May-2000
  +PCRE version 3.3 01-Aug-2000
   
   /the quick brown fox/
       the quick brown fox
  @@ -2920,5 +2920,46 @@
    0: 
    0: 
   
  -/ End of test input /
  +/<tr([\w\W\s\d][^<>]{0,})><TD([\w\W\s\d][^<>]{0,})>([\d]{0,}\.)(.*)((<BR>([\w\W\s\d][^<>]{0,})|[\s]{0,}))<\/a><\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><\/TR>/is
  +  <TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>
  + 0: <TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>
  + 1:  BGCOLOR='#DBE9E9'
  + 2:  align=left valign=top
  + 3: 43.
  + 4: <a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)
  + 5: 
  + 6: 
  + 7: <unset>
  + 8:  align=left valign=top
  + 9: Lega lstaff.com
  +10:  align=left valign=top
  +11: CA - Statewide
  +
  +/a[^a]b/
  +    acb
  + 0: acb
  +    a\nb
  + 0: a\x0ab
  +    
  +/a.b/
  +    acb
  + 0: acb
  +    *** Failers 
  +No match
  +    a\nb   
  +No match
  +    
  +/a[^a]b/s
  +    acb
  + 0: acb
  +    a\nb  
  + 0: a\x0ab
  +    
  +/a.b/s
  +    acb
  + 0: acb
  +    a\nb  
  + 0: a\x0ab
  +
  +/ End of testinput1 /
   
  Index: ossp-pkg/pcre/pcre_test.d/testoutput2
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 testoutput2
  --- ossp-pkg/pcre/pcre_test.d/testoutput2	2000/05/16 18:47:31	1.5
  +++ ossp-pkg/pcre/pcre_test.d/testoutput2	2000/08/02 09:46:09	1.6
  @@ -1,4 +1,4 @@
  -PCRE version 3.2 12-May-2000
  +PCRE version 3.3 01-Aug-2000
   
   /(a)b|/
   Capturing subpattern count = 1
  @@ -94,9 +94,6 @@
   /[\B]/
   Failed: invalid escape sequence in character class at offset 2
   
  -/[a-\w]/
  -Failed: invalid escape sequence in character class at offset 4
  -
   /[z-a]/
   Failed: range out of order in character class at offset 3
   
  @@ -2063,8 +2060,11 @@
   No match
       AB        
   No match
  +
  +/[\200-\410]/
  +Failed: range out of order in character class at offset 9
   
  -/ End of test input /
  +/ End of testinput2 /
   Capturing subpattern count = 0
   No options
   First char = ' '
  Index: ossp-pkg/pcre/pcre_test.d/testoutput3
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 testoutput3
  --- ossp-pkg/pcre/pcre_test.d/testoutput3	2000/05/16 18:47:31	1.5
  +++ ossp-pkg/pcre/pcre_test.d/testoutput3	2000/08/02 09:46:09	1.6
  @@ -1,4 +1,4 @@
  -PCRE version 3.2 12-May-2000
  +PCRE version 3.3 01-Aug-2000
   
   /(?<!bar)foo/
       foo
  @@ -2963,5 +2963,29 @@
    0: 
    0: 
   
  -/ End of test input /       
  +/^[a-\d]/
  +    abcde
  + 0: a
  +    -things
  + 0: -
  +    0digit
  + 0: 0
  +    *** Failers
  +No match
  +    bcdef    
  +No match
  +
  +/^[\d-a]/
  +    abcde
  + 0: a
  +    -things
  + 0: -
  +    0digit
  + 0: 0
  +    *** Failers
  +No match
  +    bcdef    
  +No match
  +
  +/ End of testinput3 /       
   
  Index: ossp-pkg/pcre/pcre_test.d/testoutput4
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 testoutput4
  --- ossp-pkg/pcre/pcre_test.d/testoutput4	2000/05/16 18:47:31	1.5
  +++ ossp-pkg/pcre/pcre_test.d/testoutput4	2000/08/02 09:46:09	1.6
  @@ -1,4 +1,4 @@
  -PCRE version 3.2 12-May-2000
  +PCRE version 3.3 01-Aug-2000
   
   /^[\w]+/
       *** Failers
  @@ -112,4 +112,5 @@
       école
   No match
   
  +/ End of testinput4 /
   
  Index: ossp-pkg/pcre/pcre_test.d/testoutput5
  ============================================================
  $ cvs update -p -r1.1 testoutput5
  PCRE version 3.3 01-Aug-2000
  
  /-- Because of problems with Perl 5.6 in handling UTF-8 vs non UTF-8 --/
  /-- strings automatically, do not use the \x{} construct except with --/
  No match
  /-- patterns that have the /8 option set, and don't use them without! --/
  No match
  
  /a.b/8
      acb
   0: acb
      a\x7fb
   0: a\x{7f}b
      a\x{100}b 
   0: a\x{100}b
      *** Failers
  No match
      a\nb  
  No match
  
  /a(.{3})b/8
      a\x{4000}xyb 
   0: a\x{4000}xyb
   1: \x{4000}xy
      a\x{4000}\x7fyb 
   0: a\x{4000}\x{7f}yb
   1: \x{4000}\x{7f}y
      a\x{4000}\x{100}yb 
   0: a\x{4000}\x{100}yb
   1: \x{4000}\x{100}y
      *** Failers
  No match
      a\x{4000}b 
  No match
      ac\ncb 
  No match
  
  /a(.*?)(.)/
      a\xc0\x88b
   0: a\xc0
   1: 
   2: \xc0
  
  /a(.*?)(.)/8
      a\x{100}b
   0: a\x{100}
   1: 
   2: \x{100}
  
  /a(.*)(.)/
      a\xc0\x88b
   0: a\xc0\x88b
   1: \xc0\x88
   2: b
  
  /a(.*)(.)/8
      a\x{100}b
   0: a\x{100}b
   1: \x{100}
   2: b
  
  /a(.)(.)/
      a\xc0\x92bcd
   0: a\xc0\x92
   1: \xc0
   2: \x92
  
  /a(.)(.)/8
      a\x{240}bcd
   0: a\x{240}b
   1: \x{240}
   2: b
  
  /a(.?)(.)/
      a\xc0\x92bcd
   0: a\xc0\x92
   1: \xc0
   2: \x92
  
  /a(.?)(.)/8
      a\x{240}bcd
   0: a\x{240}b
   1: \x{240}
   2: b
  
  /a(.??)(.)/
      a\xc0\x92bcd
   0: a\xc0
   1: 
   2: \xc0
  
  /a(.??)(.)/8
      a\x{240}bcd
   0: a\x{240}
   1: 
   2: \x{240}
  
  /a(.{3})b/8
      a\x{1234}xyb 
   0: a\x{1234}xyb
   1: \x{1234}xy
      a\x{1234}\x{4321}yb 
   0: a\x{1234}\x{4321}yb
   1: \x{1234}\x{4321}y
      a\x{1234}\x{4321}\x{3412}b 
   0: a\x{1234}\x{4321}\x{3412}b
   1: \x{1234}\x{4321}\x{3412}
      *** Failers
  No match
      a\x{1234}b 
  No match
      ac\ncb 
  No match
  
  /a(.{3,})b/8
      a\x{1234}xyb 
   0: a\x{1234}xyb
   1: \x{1234}xy
      a\x{1234}\x{4321}yb 
   0: a\x{1234}\x{4321}yb
   1: \x{1234}\x{4321}y
      a\x{1234}\x{4321}\x{3412}b 
   0: a\x{1234}\x{4321}\x{3412}b
   1: \x{1234}\x{4321}\x{3412}
      axxxxbcdefghijb 
   0: axxxxbcdefghijb
   1: xxxxbcdefghij
      a\x{1234}\x{4321}\x{3412}\x{3421}b 
   0: a\x{1234}\x{4321}\x{3412}\x{3421}b
   1: \x{1234}\x{4321}\x{3412}\x{3421}
      *** Failers
  No match
      a\x{1234}b 
  No match
  
  /a(.{3,}?)b/8
      a\x{1234}xyb 
   0: a\x{1234}xyb
   1: \x{1234}xy
      a\x{1234}\x{4321}yb 
   0: a\x{1234}\x{4321}yb
   1: \x{1234}\x{4321}y
      a\x{1234}\x{4321}\x{3412}b 
   0: a\x{1234}\x{4321}\x{3412}b
   1: \x{1234}\x{4321}\x{3412}
      axxxxbcdefghijb 
   0: axxxxb
   1: xxxx
      a\x{1234}\x{4321}\x{3412}\x{3421}b 
   0: a\x{1234}\x{4321}\x{3412}\x{3421}b
   1: \x{1234}\x{4321}\x{3412}\x{3421}
      *** Failers
  No match
      a\x{1234}b 
  No match
  
  /a(.{3,5})b/8
      a\x{1234}xyb 
   0: a\x{1234}xyb
   1: \x{1234}xy
      a\x{1234}\x{4321}yb 
   0: a\x{1234}\x{4321}yb
   1: \x{1234}\x{4321}y
      a\x{1234}\x{4321}\x{3412}b 
   0: a\x{1234}\x{4321}\x{3412}b
   1: \x{1234}\x{4321}\x{3412}
      axxxxbcdefghijb 
   0: axxxxb
   1: xxxx
      a\x{1234}\x{4321}\x{3412}\x{3421}b 
   0: a\x{1234}\x{4321}\x{3412}\x{3421}b
   1: \x{1234}\x{4321}\x{3412}\x{3421}
      axbxxbcdefghijb 
   0: axbxxb
   1: xbxx
      axxxxxbcdefghijb 
   0: axxxxxb
   1: xxxxx
      *** Failers
  No match
      a\x{1234}b 
  No match
      axxxxxxbcdefghijb 
  No match
  
  /a(.{3,5}?)b/8
      a\x{1234}xyb 
   0: a\x{1234}xyb
   1: \x{1234}xy
      a\x{1234}\x{4321}yb 
   0: a\x{1234}\x{4321}yb
   1: \x{1234}\x{4321}y
      a\x{1234}\x{4321}\x{3412}b 
   0: a\x{1234}\x{4321}\x{3412}b
   1: \x{1234}\x{4321}\x{3412}
      axxxxbcdefghijb 
   0: axxxxb
   1: xxxx
      a\x{1234}\x{4321}\x{3412}\x{3421}b 
   0: a\x{1234}\x{4321}\x{3412}\x{3421}b
   1: \x{1234}\x{4321}\x{3412}\x{3421}
      axbxxbcdefghijb 
   0: axbxxb
   1: xbxx
      axxxxxbcdefghijb 
   0: axxxxxb
   1: xxxxx
      *** Failers
  No match
      a\x{1234}b 
  No match
      axxxxxxbcdefghijb 
  No match
  
  /^[a\x{c0}]/8
      *** Failers
  No match
      \x{100}
  No match
  
  /(?<=aXb)cd/8
      aXbcd
   0: cd
  
  /(?<=a\x{100}b)cd/8
      a\x{100}bcd
   0: cd
  
  /(?<=a\x{100000}b)cd/8
      a\x{100000}bcd
   0: cd
      
  /(?:\x{100}){3}b/8
      \x{100}\x{100}\x{100}b
   0: \x{100}\x{100}\x{100}b
      *** Failers 
  No match
      \x{100}\x{100}b
  No match
  
  / End of testinput5 /
  
  Index: ossp-pkg/pcre/pcre_test.d/testoutput6
  ============================================================
  $ cvs update -p -r1.1 testoutput6
  PCRE version 3.3 01-Aug-2000
  
  /\x{100}/8DM
  Memory allocation (code space): 11
  ------------------------------------------------------------------
    0   7 Bra 0
    3   2 \xc0\x88
    7   7 Ket
   10     End
  ------------------------------------------------------------------
  Capturing subpattern count = 0
  Options: utf8
  First char = 192
  Need char = 136
  
  /\x{1000}/8DM
  Memory allocation (code space): 12
  ------------------------------------------------------------------
    0   8 Bra 0
    3   3 \xe0\x80\x84
    8   8 Ket
   11     End
  ------------------------------------------------------------------
  Capturing subpattern count = 0
  Options: utf8
  First char = 224
  Need char = 132
  
  /\x{10000}/8DM
  Memory allocation (code space): 13
  ------------------------------------------------------------------
    0   9 Bra 0
    3   4 \xf0\x80\x80\x82
    9   9 Ket
   12     End
  ------------------------------------------------------------------
  Capturing subpattern count = 0
  Options: utf8
  First char = 240
  Need char = 130
  
  /\x{100000}/8DM
  Memory allocation (code space): 13
  ------------------------------------------------------------------
    0   9 Bra 0
    3   4 \xf0\x80\x80\xa0
    9   9 Ket
   12     End
  ------------------------------------------------------------------
  Capturing subpattern count = 0
  Options: utf8
  First char = 240
  Need char = 160
  
  /\x{1000000}/8DM
  Memory allocation (code space): 14
  ------------------------------------------------------------------
    0  10 Bra 0
    3   5 \xf8\x80\x80\x80\x90
   10  10 Ket
   13     End
  ------------------------------------------------------------------
  Capturing subpattern count = 0
  Options: utf8
  First char = 248
  Need char = 144
  
  /\x{4000000}/8DM
  Memory allocation (code space): 15
  ------------------------------------------------------------------
    0  11 Bra 0
    3   6 \xfc\x80\x80\x80\x80\x82
   11  11 Ket
   14     End
  ------------------------------------------------------------------
  Capturing subpattern count = 0
  Options: utf8
  First char = 252
  Need char = 130
  
  /\x{7fffFFFF}/8DM
  Memory allocation (code space): 15
  ------------------------------------------------------------------
    0  11 Bra 0
    3   6 \xfd\xbf\xbf\xbf\xbf\xbf
   11  11 Ket
   14     End
  ------------------------------------------------------------------
  Capturing subpattern count = 0
  Options: utf8
  First char = 253
  Need char = 191
  
  /[\x{ff}]/8DM
  Memory allocation (code space): 40
  ------------------------------------------------------------------
    0   6 Bra 0
    3   1 \xff
    6   6 Ket
    9     End
  ------------------------------------------------------------------
  Capturing subpattern count = 0
  Options: utf8
  First char = 255
  No need char
  
  /[\x{100}]/8DM
  Memory allocation (code space): 40
  Failed: characters with values > 255 are not yet supported in classes at offset 7
  
  /\x{ffffffff}/8
  Failed: character value in \x{...} sequence is too large at offset 11
  
  /\x{100000000}/8
  Failed: character value in \x{...} sequence is too large at offset 12
  
  /^\x{100}a\x{1234}/8
      \x{100}a\x{1234}bcd
   0: \x{100}a\x{1234}
  
  /\x80/8D
  ------------------------------------------------------------------
    0   7 Bra 0
    3   2 \xc0\x84
    7   7 Ket
   10     End
  ------------------------------------------------------------------
  Capturing subpattern count = 0
  Options: utf8
  First char = 192
  Need char = 132
  
  /\xff/8D
  ------------------------------------------------------------------
    0   7 Bra 0
    3   2 \xdf\x87
    7   7 Ket
   10     End
  ------------------------------------------------------------------
  Capturing subpattern count = 0
  Options: utf8
  First char = 223
  Need char = 135
  
  /-- These tests are here rather than in testinput5 because Perl 5.6 has --/
  /-- some problems with UTF-8 support, in the area of \x{..} where the   --/
  No match
  /-- value is < 255. It grumbles about invalid UTF-8 strings.            --/
  No match
  
  /^[a\x{c0}]b/8
      \x{c0}b
   0: \x{c0}b
      
  /^([a\x{c0}]*?)aa/8
      a\x{c0}aaaa/ 
   0: a\x{c0}aa
   1: a\x{c0}
  
  /^([a\x{c0}]*?)aa/8
      a\x{c0}aaaa/ 
   0: a\x{c0}aa
   1: a\x{c0}
      a\x{c0}a\x{c0}aaa/ 
   0: a\x{c0}a\x{c0}aa
   1: a\x{c0}a\x{c0}
  
  /^([a\x{c0}]*)aa/8
      a\x{c0}aaaa/ 
   0: a\x{c0}aaaa
   1: a\x{c0}aa
      a\x{c0}a\x{c0}aaa/ 
   0: a\x{c0}a\x{c0}aaa
   1: a\x{c0}a\x{c0}a
  
  /^([a\x{c0}]*)a\x{c0}/8
      a\x{c0}aaaa/ 
   0: a\x{c0}
   1: 
      a\x{c0}a\x{c0}aaa/ 
   0: a\x{c0}a\x{c0}
   1: a\x{c0}
  
  / End of testinput6 /
  
  Index: ossp-pkg/pcre/pcreposix.3
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 pcreposix.3
  --- ossp-pkg/pcre/pcreposix.3	1999/08/26 08:15:19	1.1.1.1
  +++ ossp-pkg/pcre/pcreposix.3	2000/08/02 09:46:06	1.2
  @@ -77,6 +77,14 @@
   The PCRE_MULTILINE option is set when the expression is passed for compilation
   to the native function.
   
  +In the absence of these flags, no options are passed to the native function.
  +This means the the regex is compiled with PCRE default semantics. In
  +particular, the way it handles newline characters in the subject string is the
  +Perl way, not the POSIX way. Note that setting PCRE_MULTILINE has only
  +\fIsome\fR of the effects specified for REG_NEWLINE. It does not affect the way
  +newlines are matched by . (they aren't) or a negative class such as [^a] (they
  +are).
  +
   The yield of \fBregcomp()\fR is zero on success, and non-zero otherwise. The
   \fIpreg\fR structure is filled in on success, and one member of the structure
   is publicized: \fIre_nsub\fR contains the number of capturing subpatterns in
  @@ -138,4 +146,4 @@
   .br
   Phone: +44 1223 334714
   
  -Copyright (c) 1997-1999 University of Cambridge.
  +Copyright (c) 1997-2000 University of Cambridge.
  Index: ossp-pkg/pcre/pcreposix.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 pcreposix.c
  --- ossp-pkg/pcre/pcreposix.c	2000/02/02 17:18:46	1.2
  +++ ossp-pkg/pcre/pcreposix.c	2000/08/02 09:46:06	1.3
  @@ -80,7 +80,10 @@
     REG_BADPAT,  /* "assertion expected after (?(" */
     REG_BADPAT,  /* "(?p must be followed by )" */
     REG_ECTYPE,  /* "unknown POSIX class name" */
  -  REG_BADPAT   /* "POSIX collating elements are not supported" */
  +  REG_BADPAT,  /* "POSIX collating elements are not supported" */
  +  REG_INVARG,  /* "this version of PCRE is not compiled with PCRE_UTF8 support" */
  +  REG_BADPAT,  /* "characters with values > 255 are not yet supported in classes" */
  +  REG_BADPAT   /* "character value in \x{...} sequence is too large" */
   };
   
   /* Table of texts corresponding to POSIX error codes */
  Index: ossp-pkg/pcre/pgrep.1
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 pgrep.1
  --- ossp-pkg/pcre/pgrep.1	1999/08/26 08:15:20	1.1.1.1
  +++ ossp-pkg/pcre/pgrep.1	2000/08/02 09:46:06	1.2
  @@ -1,20 +1,20 @@
  -.TH PGREP 1
  +.TH PCREGREP 1
   .SH NAME
  -pgrep - a grep with Perl-compatible regular expressions.
  +pcregrep - a grep with Perl-compatible regular expressions.
   .SH SYNOPSIS
  -.B pgrep [-Vchilnsvx] pattern [file] ...
  +.B pcregrep [-Vchilnsvx] pattern [file] ...
   
   
   .SH DESCRIPTION
  -\fBpgrep\fR searches files for character patterns, in the same way as other
  +\fBpcregrep\fR searches files for character patterns, in the same way as other
   grep commands do, but it uses the PCRE regular expression library to support
   patterns that are compatible with the regular expressions of Perl 5. See
   \fBpcre(3)\fR for a full description of syntax and semantics.
   
  -If no files are specified, \fBpgrep\fR reads the standard input. By default,
  +If no files are specified, \fBpcregrep\fR reads the standard input. By default,
   each line that matches the pattern is copied to the standard output, and if
   there is more than one file, the file name is printed before each line of
  -output. However, there are options that can change how \fBpgrep\fR behaves.
  +output. However, there are options that can change how \fBpcregrep\fR behaves.
   
   Lines are limited to BUFSIZ characters. BUFSIZ is defined in \fB<stdio.h>\fR.
   The newline character is removed from the end of each line before it is matched
  @@ -73,4 +73,4 @@
   .SH AUTHOR
   Philip Hazel <ph10@cam.ac.uk>
   .br
  -Copyright (c) 1997-1999 University of Cambridge.
  +Copyright (c) 1997-2000 University of Cambridge.
  Index: ossp-pkg/pcre/pgrep.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 pgrep.c
  --- ossp-pkg/pcre/pgrep.c	2000/02/02 17:18:46	1.2
  +++ ossp-pkg/pcre/pgrep.c	2000/08/02 09:46:06	1.3
  @@ -1,7 +1,10 @@
   /*************************************************
  -*               PCRE grep program                *
  +*               pcregrep program                 *
   *************************************************/
   
  +/* This is a grep program that uses the PCRE regular expression library to do
  +its pattern matching. */
  +
   #include <stdio.h>
   #include <string.h>
   #include <stdlib.h>
  @@ -59,7 +62,7 @@
   *************************************************/
   
   static int
  -pgrep(FILE *in, char *name)
  +pcregrep(FILE *in, char *name)
   {
   int rc = 1;
   int linenumber = 0;
  @@ -119,7 +122,7 @@
   static int
   usage(int rc)
   {
  -fprintf(stderr, "Usage: pgrep [-Vchilnsvx] pattern [file] ...\n");
  +fprintf(stderr, "Usage: pcregrep [-Vchilnsvx] pattern [file] ...\n");
   return rc;
   }
   
  @@ -165,7 +168,7 @@
         break;
   
         default:
  -      fprintf(stderr, "pgrep: unknown option %c\n", s[-1]);
  +      fprintf(stderr, "pcregrep: unknown option %c\n", s[-1]);
         return usage(2);
         }
       }
  @@ -180,7 +183,7 @@
   pattern = pcre_compile(argv[i++], options, &error, &errptr, NULL);
   if (pattern == NULL)
     {
  -  fprintf(stderr, "pgrep: error in regex at offset %d: %s\n", errptr, error);
  +  fprintf(stderr, "pcregrep: error in regex at offset %d: %s\n", errptr, error);
     return 2;
     }
   
  @@ -189,13 +192,13 @@
   hints = pcre_study(pattern, 0, &error);
   if (error != NULL)
     {
  -  fprintf(stderr, "pgrep: error while studing regex: %s\n", error);
  +  fprintf(stderr, "pcregrep: error while studing regex: %s\n", error);
     return 2;
     }
   
   /* If there are no further arguments, do the business on stdin and exit */
   
  -if (i >= argc) return pgrep(stdin, NULL);
  +if (i >= argc) return pcregrep(stdin, NULL);
   
   /* Otherwise, work through the remaining arguments as files. If there is only
   one, don't give its name on the output. */
  @@ -213,7 +216,7 @@
       }
     else
       {
  -    int frc = pgrep(in, filenames? argv[i] : NULL);
  +    int frc = pcregrep(in, filenames? argv[i] : NULL);
       if (frc == 0 && rc == 1) rc = 0;
       fclose(in);
       }
  Index: ossp-pkg/pcre/shtool
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 shtool
  --- ossp-pkg/pcre/shtool	2000/07/07 06:18:50	1.5
  +++ ossp-pkg/pcre/shtool	2000/08/02 09:46:06	1.6
  @@ -6,7 +6,7 @@
   ##  See http://www.gnu.org/software/shtool/ for more information.
   ##  See ftp://ftp.gnu.org/gnu/shtool/ for latest version.
   ##
  -##  Version:  1.5.0 (01-Jul-2000)
  +##  Version:  1.5.1 (29-Jul-2000)
   ##  Contents: 6/17 available modules
   ##
   
  @@ -65,7 +65,7 @@
       exit 1
   fi
   if [ ".$1" = ".-h" -o ".$1" = ".--help" ]; then
  -    echo "This is GNU shtool, version 1.5.0 (01-Jul-2000)"
  +    echo "This is GNU shtool, version 1.5.1 (29-Jul-2000)"
       echo "Copyright (c) 1994-2000 Ralf S. Engelschall <rse@engelschall.com>"
       echo "Report bugs to <bug-shtool@gnu.org>"
       echo ''
  @@ -105,7 +105,7 @@
       exit 0
   fi
   if [ ".$1" = ".-v" -o ".$1" = ."--version" ]; then
  -    echo "GNU shtool 1.5.0 (01-Jul-2000)"
  +    echo "GNU shtool 1.5.1 (29-Jul-2000)"
       exit 0
   fi
   if [ ".$1" = ".-r" -o ".$1" = ."--recreate" ]; then

From ossp-cvs-owner@ossp.org  Wed Aug  2 11:53:10 2000
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id e729r9C05325; Wed, 2 Aug 2000 11:53:09 +0200 (CEST)
Date: Wed, 2 Aug 2000 11:53:09 +0200 (CEST)
Message-Id: <200008020953.e729r9C05325@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pcre pcre.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   02-Aug-2000 11:53:09
  Branch: HEAD                             Handle: 2000080210530800

  Modified files:
    ossp-pkg/pcre           pcre.c

  Log:
    Remove left-over from merging

  Summary:
    Revision    Changes     Path
    1.6         +0  -1      ossp-pkg/pcre/pcre.c
  ____________________________________________________________________________

  Index: ossp-pkg/pcre/pcre.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 pcre.c
  --- ossp-pkg/pcre/pcre.c	2000/08/02 09:46:06	1.5
  +++ ossp-pkg/pcre/pcre.c	2000/08/02 09:53:08	1.6
  @@ -319,7 +319,6 @@
   
   
   /*************************************************
  ->>>>>>> ../arc/pcre-3.3/pcre.c
   *          Return version string                 *
   *************************************************/
   

From ossp-cvs-owner@ossp.org  Fri Aug  4 11:52:29 2000
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id e749qSe13499; Fri, 4 Aug 2000 11:52:28 +0200 (CEST)
Date: Fri, 4 Aug 2000 11:52:28 +0200 (CEST)
Message-Id: <200008040952.e749qSe13499@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvs README.OSSP ossp-pkg/cvs/src main.c options.h...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-Aug-2000 11:52:28
  Branch: HEAD                             Handle: 2000080410522601

  Modified files:
    ossp-pkg/cvs            README.OSSP
    ossp-pkg/cvs/src        main.c options.h.in

  Log:
    Add new $CVSPID stuff

  Summary:
    Revision    Changes     Path
    1.46        +7  -0      ossp-pkg/cvs/README.OSSP
    1.23        +11 -0      ossp-pkg/cvs/src/main.c
    1.32        +1  -0      ossp-pkg/cvs/src/options.h.in
  ____________________________________________________________________________

  Index: ossp-pkg/cvs/README.OSSP
  ============================================================
  $ cvs diff -u -r1.45 -r1.46 README.OSSP
  --- ossp-pkg/cvs/README.OSSP	2000/07/31 19:22:02	1.45
  +++ ossp-pkg/cvs/README.OSSP	2000/08/04 09:52:26	1.46
  @@ -350,6 +350,13 @@
       CVS using their system passwords.
       [Larry Jones <larry.jones@sdrc.com>]
   
  +  OSSP_PATCH_CVSPID:
  +    This provides an environment variable $CVSPID which contains the process
  +    id of the parent CVS process. This is usually used inside scripts called
  +    from *info files in order to have a unique session handle (for instance
  +    for a common temporary directory "/tmp/cvs.foo.$CVSPID", etc).
  +    [Origin: Ralf S. Engelschall]
  +
     OSSP_PATCH_BUGFIX:
       This enabled various bugfixes which are still not present in the
       official CVS version.
  Index: ossp-pkg/cvs/src/main.c
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 main.c
  --- ossp-pkg/cvs/src/main.c	2000/07/23 17:53:44	1.22
  +++ ossp-pkg/cvs/src/main.c	2000/08/04 09:52:27	1.23
  @@ -978,6 +978,17 @@
   		       CVSUMASK_ENV, cp);
   	}
   
  +#ifdef OSSP_PATCH_CVSPID
  +        /* provide the process id of the parent CVS process to
  +           sub-processes (usually scripts called from *info files) in order
  +           to let them have a unique session handle */
  +        {
  +            char pidbuf[64];
  +            sprintf(pidbuf, "CVSPID=%lu", (unsigned long)getpid());
  +            putenv(pidbuf);
  +        }
  +#endif
  +
   #ifdef OSSP_PATCH_SETXID
       if (   strcmp(command_name, "kserver") != 0
           && strcmp(command_name, "pserver") != 0
  Index: ossp-pkg/cvs/src/options.h.in
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 options.h.in
  --- ossp-pkg/cvs/src/options.h.in	2000/07/31 19:22:03	1.31
  +++ ossp-pkg/cvs/src/options.h.in	2000/08/04 09:52:27	1.32
  @@ -235,6 +235,7 @@
   #define OSSP_PATCH_UPDATECMERGE
   #define OSSP_PATCH_ADDFILEATTR
   #define OSSP_PATCH_WILDPASSWD
  +#define OSSP_PATCH_CVSPID
   #define OSSP_PATCH_BUGFIX
   /* problematic changes, because they break "make check" */
   #undef OSSP_PATCH_COSMETICS_HARD

From ossp-cvs-owner@ossp.org  Fri Aug  4 23:49:44 2000
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id e74Lnh763733; Fri, 4 Aug 2000 23:49:43 +0200 (CEST)
Date: Fri, 4 Aug 2000 23:49:43 +0200 (CEST)
Message-Id: <200008042149.e74Lnh763733@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvs README.OSSP
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-Aug-2000 23:49:43
  Branch: HEAD                             Handle: 2000080422494200

  Modified files:
    ossp-pkg/cvs            README.OSSP

  Log:
    Fix author

  Summary:
    Revision    Changes     Path
    1.47        +1  -1      ossp-pkg/cvs/README.OSSP
  ____________________________________________________________________________

  Index: ossp-pkg/cvs/README.OSSP
  ============================================================
  $ cvs diff -u -r1.46 -r1.47 README.OSSP
  --- ossp-pkg/cvs/README.OSSP	2000/08/04 09:52:26	1.46
  +++ ossp-pkg/cvs/README.OSSP	2000/08/04 21:49:42	1.47
  @@ -355,7 +355,7 @@
       id of the parent CVS process. This is usually used inside scripts called
       from *info files in order to have a unique session handle (for instance
       for a common temporary directory "/tmp/cvs.foo.$CVSPID", etc).
  -    [Origin: Ralf S. Engelschall]
  +    [Origin: Rich Salz <rsalz@caveosystems.com>]
   
     OSSP_PATCH_BUGFIX:
       This enabled various bugfixes which are still not present in the

From ossp-cvs-owner@ossp.org  Thu Jan 18 16:31:32 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f0IFVVc61872; Thu, 18 Jan 2001 16:31:31 +0100 (CET)
Date: Thu, 18 Jan 2001 16:31:31 +0100 (CET)
Message-Id: <200101181531.f0IFVVc61872@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/petidomo petidomo-approve petidomo-kickout
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   18-Jan-2001 16:31:31
  Branch: HEAD                             Handle: 2001011815313000

  Added files:
    ossp-pkg/petidomo       petidomo-approve petidomo-kickout

  Log:
    Add old RSE admin scripts

  Summary:
    Revision    Changes     Path
    1.1         +76 -0      ossp-pkg/petidomo/petidomo-approve
    1.1         +75 -0      ossp-pkg/petidomo/petidomo-kickout
  ____________________________________________________________________________

  Index: ossp-pkg/petidomo/petidomo-approve
  ============================================================
  $ cvs update -p -r1.1 petidomo-approve
  :
  eval 'exec perl -S $0 ${1+"$@"}'
      if $running_under_some_shell;
  ##
  ##  petidomo-approve -- Petidomo approval tool
  ##  Copyright (c) 2000 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  #   locate the file with the approval passwords
  my $config = "$ENV{HOME}/.petidomo";
  
  #   locate the Sendmail program
  my $sendmail = "sendmail";
  foreach my $dir (split(/:/, "$ENV{PATH}:/bin:/sbin:/usr/bin:/usr/sbin:/lib:/usr/lib")) {
      if (-x "$dir/sendmail") {
          $sendmail = "$dir/sendmail";
          last;
      }
  }
  
  #   suck in the whole mail
  my $mail = '';
  $mail .= $_ while (<STDIN>);
  
  #   dispatch over the two mail types which need approval...
  if ($mail =~ m|^Subject:\s+Petidomo:\s+APPROVE\s+(\S+):|mi) {
      #   approve a request
      my $list = $1;
      my $replyto = 'petidomo';
      $replyto = $1 if ($mail =~ m|^Reply-to:\s+(\S+)|mi);
      my $password = 'petidomo';
      open(FP, "<$config");
      while (<FP>) {
          next if (m|^\s*#.*| or m|^\s*$|);
          $password = $1 if (m|^\s*(?:$list)\s+(\S+)|);
      }
      close(FP);
      $mail =~ s|^.+?\n(password\s+<AdminPassword>.+?)\n\n.*|$1|s;
      $mail =~ s|<AdminPassword>|$password|s;
      open(SM, "|$sendmail $replyto") || die "cannot spawn $sendmail";
      print SM "To: $replyto\n\n";
      print SM $mail;
      close(SM);
      print STDERR "petidomo-approve: sent approved mail back to $replyto\n";
      sleep(1);
      exit(0);
  }
  elsif ($mail =~ m|^Subject:\s+Petidomo:\s+BOUNCE|mi) {
      #   approve a posting
      my $list = 'petidomo';
      $list = $1 if ($mail =~ m|^Subject:\s+Petidomo:\s+BOUNCE\s+(\S+):|m);
      my $replyto = $list;
      my $password = 'petidomo';
      open(FP, "<$config");
      while (<FP>) {
          next if (m|^\s*#.*| or m|^\s*$|);
          $password = $1 if (m|^\s*(?:$list)\s+(\S+)|);
      }
      close(FP);
      $mail =~ s|^.+?\n\n||s;
      $mail =~ s|^.+?\n>?From .+?\n||s;
      $mail = "Approved: $password\n" . $mail; # best
      #$mail =~ s|^(.+?\n\n)(.*)$|$1Approved $password\n$2|s; # not good
      open(SM, "|$sendmail $replyto") || die "cannot spawn $sendmail";
      print SM $mail;
      close(SM);
      print STDERR "petidomo-approve: sent approved mail back to $replyto\n";
      sleep(1);
      exit(0);
  }
  else {
      print STDERR "petidomo-approve: unrecognized mail type\n";
      sleep(1);
      exit(1);
  }
  
  Index: ossp-pkg/petidomo/petidomo-kickout
  ============================================================
  $ cvs update -p -r1.1 petidomo-kickout
  :
  eval 'exec perl -S $0 ${1+"$@"}'
      if $running_under_some_shell;
  ##
  ##  petidomo-kickout -- Petidomo kickout tool
  ##  Copyright (c) 2000 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  my $pattern = $ARGV[0] || die "Usage: petidomo-kickout <address-pattern>";
  
  #   locate the file with the approval passwords
  my $config = "$ENV{HOME}/.petidomo";
  
  #   locate the Sendmail program
  my $sendmail = "sendmail";
  foreach my $dir (split(/:/, "$ENV{PATH}:/bin:/sbin:/usr/bin:/usr/sbin:/lib:/usr/lib")) {
      if (-x "$dir/sendmail") {
          $sendmail = "$dir/sendmail";
          last;
      }
  }
  
  #   locate the Petidomo basedir
  my $basedir = `petidomo --version 2>&1`;
  $basedir =~ s|^.+\((\S+)\).*$|$1|s;
  
  #   read config 
  my $list = {};
  open(FP, "<$config") || die "No ~/.petidomo file found";
  while (<FP>) {
      next if (m|^\s*#.*| or m|^\s*$|);
      if (m|^\s*(\S+)\s+(\S+)|) {
          my ($l, $pw) = ($1, $2);
          $l =~ s|@[^@]+$||;
          if (-f "$basedir/$l.list") {
              $list->{$l} = {};
              $list->{$l}->{PASSWORD} = $pw;
              $list->{$l}->{MEMBERS} = [];
              open(LST, "<$basedir/$l.list");
              while (<LST>) {
                  s|\n$||s;
                  push(@{$list->{$l}->{MEMBERS}}, $_);
              }
              close(LST);
          }
      }
  }
  close(FP);
  
  #   iterate over all mailing lists
  foreach my $l (keys(%{$list})) {
      foreach my $m (@{$list->{$l}->{MEMBERS}}) {
          if ($m =~ m|$pattern|) {
              print "petidomo-kickout: $l: <$m> Kickout? [Y/n] ";
              my $yn = <STDIN>;
              $yn =~ s|\n$||s;
              $yn = "y" if ($yn eq '');
              $yn = lc($yn);
              if ($yn eq 'y') {
                  open(SM, "|$sendmail petidomo") || die "cannot spawn $sendmail";
                  print SM "To: petidomo\n" .
                           "\n" .
                           "password ".$list->{$l}->{PASSWORD}."\n" .
                           "unsubscribe $l $m\n";
                           "password ".$list->{petidomo}->{PASSWORD}."\n" .
                           "subscribe bounces $m\n";
                  close(SM);
                  print "petidomo-kickout: kicked out <$m>\n";
              }
          }
      }
  }
  sleep(1);
  exit(0);
  

From ossp-cvs-owner@ossp.org  Thu Jan 18 16:43:35 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f0IFhYo68283; Thu, 18 Jan 2001 16:43:34 +0100 (CET)
Date: Thu, 18 Jan 2001 16:43:34 +0100 (CET)
Message-Id: <200101181543.f0IFhYo68283@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/petidomo README
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   18-Jan-2001 16:43:34
  Branch: HEAD                             Handle: 2001011815433400

  Modified files:
    ossp-pkg/petidomo       README

  Log:
    *** empty log message ***

  Summary:
    Revision    Changes     Path
    1.2         +2  -0      ossp-pkg/petidomo/README
  ____________________________________________________________________________

  Index: ossp-pkg/petidomo/README
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 README
  --- ossp-pkg/petidomo/README	2000/12/13 13:19:04	1.1.1.1
  +++ ossp-pkg/petidomo/README	2001/01/18 15:43:34	1.2
  @@ -88,3 +88,5 @@
   
   
                                       Peter Simons <simons@petidomo.com>
  +
  +

From ossp-cvs-owner@ossp.org  Fri Jan 26 11:41:41 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f0QAfeQ49664; Fri, 26 Jan 2001 11:41:40 +0100 (CET)
Date: Fri, 26 Jan 2001 11:41:40 +0100 (CET)
Message-Id: <200101261041.f0QAfeQ49664@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sfio Makefile.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   26-Jan-2001 11:41:40
  Branch: HEAD                             Handle: 2001012610413900

  Modified files:
    ossp-pkg/sfio           Makefile.in

  Log:
    Add DESTDIR support

  Summary:
    Revision    Changes     Path
    1.9         +16 -14     ossp-pkg/sfio/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/sfio/Makefile.in
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 Makefile.in
  --- ossp-pkg/sfio/Makefile.in	1999/11/12 15:33:09	1.8
  +++ ossp-pkg/sfio/Makefile.in	2001/01/26 10:41:39	1.9
  @@ -26,6 +26,8 @@
   D_STDIO_S   = @D_STDIO_S@
   D_STDIO_B   = @D_STDIO_B@
   
  +DESTDIR     =
  +
   prefix      = @prefix@
   exec_prefix = @exec_prefix@
   bindir      = @bindir@
  @@ -110,25 +112,25 @@
   	cd sfio_t && $(MAKE) $(MFLAGS) test && cd ..
   	
   install: all
  -	$(MKDIR) $(bindir)
  -	$(MKDIR) $(includedir)
  -	$(MKDIR) $(libdir)
  -	$(MKDIR) $(mandir)/man3
  -	$(INSTALL) -c -m 755 sfio-config $(bindir)/sfio-config
  -	@echo "$(INSTALL) -c -m 644 sfio/sfio.h $(includedir)/sfio.h"; \
  +	$(MKDIR) $(DESTDIR)$(bindir)
  +	$(MKDIR) $(DESTDIR)$(includedir)
  +	$(MKDIR) $(DESTDIR)$(libdir)
  +	$(MKDIR) $(DESTDIR)$(mandir)/man3
  +	$(INSTALL) -c -m 755 sfio-config $(DESTDIR)$(bindir)/sfio-config
  +	@echo "$(INSTALL) -c -m 644 sfio/sfio.h $(DESTDIR)$(includedir)/sfio.h"; \
   		sed -e 's;cfg_common\.h;sfio_c.h;' <sfio/sfio.h >.tmp; \
  -		$(INSTALL) -c -m 644 .tmp $(includedir)/sfio.h; rm -f .tmp
  -	$(INSTALL) -c -m 644 sfio_c/cfg_common.h $(includedir)/sfio_c.h
  -	$(INSTALL) -c -m 644 sfio/sfio_t.h $(includedir)/sfio_t.h 
  -	@$(LIBTOOL) --mode=install $(INSTALL) -c -m 644 libsfio.la $(libdir)/libsfio.la
  +		$(INSTALL) -c -m 644 .tmp $(DESTDIR)$(includedir)/sfio.h; rm -f .tmp
  +	$(INSTALL) -c -m 644 sfio_c/cfg_common.h $(DESTDIR)$(includedir)/sfio_c.h
  +	$(INSTALL) -c -m 644 sfio/sfio_t.h $(DESTDIR)$(includedir)/sfio_t.h 
  +	@$(LIBTOOL) --mode=install $(INSTALL) -c -m 644 libsfio.la $(DESTDIR)$(libdir)/libsfio.la
   	@if [ ".$(STDIO_SRC)" = .yes ]; then \
  -	    echo "$(INSTALL) -c -m 644 stdio_s/stdio.h $(includedir)/stdio.h"; \
  -	    $(INSTALL) -c -m 644 stdio_s/stdio.h $(includedir)/stdio.h; \
  +	    echo "$(INSTALL) -c -m 644 stdio_s/stdio.h $(DESTDIR)$(includedir)/stdio.h"; \
  +	    $(INSTALL) -c -m 644 stdio_s/stdio.h $(DESTDIR)$(includedir)/stdio.h; \
   	fi
   	@if [ ".$(STDIO_BIN)" = .yes ]; then \
  -	    $(LIBTOOL) --mode=install $(INSTALL) -c -m 644 libstdio.la $(libdir)/libstdio.la; \
  +	    $(LIBTOOL) --mode=install $(INSTALL) -c -m 644 libstdio.la $(DESTDIR)$(libdir)/libstdio.la; \
   	fi
  -	$(INSTALL) -c -m 644 sfio.3 $(mandir)/man3/sfio.3
  +	$(INSTALL) -c -m 644 sfio.3 $(DESTDIR)$(mandir)/man3/sfio.3
   
   clean: subdirs_clean
   	$(RM) libsfio.la libstdio.la

From ossp-cvs-owner@ossp.org  Fri Jan 26 11:59:25 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f0QAxNn51269; Fri, 26 Jan 2001 11:59:23 +0100 (CET)
Date: Fri, 26 Jan 2001 11:59:23 +0100 (CET)
Message-Id: <200101261059.f0QAxNn51269@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sfio/sfio sfputr.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   26-Jan-2001 11:59:23
  Branch: HEAD                             Handle: 2001012610592300

  Modified files:
    ossp-pkg/sfio/sfio      sfputr.c

  Log:
    Bugfix from Sendmail 8.11.2 README

  Summary:
    Revision    Changes     Path
    1.2         +59 -38     ossp-pkg/sfio/sfio/sfputr.c
  ____________________________________________________________________________

  Index: ossp-pkg/sfio/sfio/sfputr.c
  ============================================================
  $ cvs diff -u -r1.1.1.2 -r1.2 sfputr.c
  --- ossp-pkg/sfio/sfio/sfputr.c	1997/10/14 14:38:48	1.1.1.2
  +++ ossp-pkg/sfio/sfio/sfputr.c	2001/01/26 10:59:23	1.2
  @@ -24,6 +24,8 @@
   	for(w = 0; (*s || rc >= 0); )
   	{	SFWPEEK(f,ps,p);
   
  +		if(p == -1)
  +			return -1;
   		if(p == 0 || (f->flags&SF_WHOLE) )
   		{	n = strlen(s);
   			if(p >= (n + (rc < 0 ? 0 : 1)) )

From ossp-cvs-owner@ossp.org  Mon Jan 29 20:53:43 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f0TJrgI49082; Mon, 29 Jan 2001 20:53:42 +0100 (CET)
Date: Mon, 29 Jan 2001 20:53:42 +0100 (CET)
Message-Id: <200101291953.f0TJrgI49082@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm PORTING
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   29-Jan-2001 20:53:42
  Branch: HEAD                             Handle: 2001012919534100

  Modified files:
    ossp-pkg/mm             PORTING

  Log:
    *** empty log message ***

  Summary:
    Revision    Changes     Path
    1.23        +1  -0      ossp-pkg/mm/PORTING
  ____________________________________________________________________________

  Index: ossp-pkg/mm/PORTING
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 PORTING
  --- ossp-pkg/mm/PORTING	2001/01/01 12:52:56	1.22
  +++ ossp-pkg/mm/PORTING	2001/01/29 19:53:41	1.23
  @@ -69,6 +69,7 @@
     i686-debian-linux-gnu2.2glibc2.1
     i686-gnu-linux-gnu2.0glibc1
     i686-gnu-linux-gnu2.2glibc2.1
  +  i686-gnu-linux-gnu2.4glibc2.1
     i686-pc-cygwin
     i686-pc-freebsd3.1
     i686-pc-freebsd3.2

From ossp-cvs-owner@ossp.org  Mon Jan 29 20:54:41 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f0TJsfh49189; Mon, 29 Jan 2001 20:54:41 +0100 (CET)
Date: Mon, 29 Jan 2001 20:54:41 +0100 (CET)
Message-Id: <200101291954.f0TJsfh49189@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm ChangeLog Makefile.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   29-Jan-2001 20:54:40
  Branch: HEAD                             Handle: 2001012919544000

  Modified files:
    ossp-pkg/mm             ChangeLog Makefile.in

  Log:
    *** empty log message ***

  Summary:
    Revision    Changes     Path
    1.19        +5  -1      ossp-pkg/mm/ChangeLog
    1.26        +12 -10     ossp-pkg/mm/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/mm/ChangeLog
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 ChangeLog
  --- ossp-pkg/mm/ChangeLog	2000/12/03 19:56:39	1.18
  +++ ossp-pkg/mm/ChangeLog	2001/01/29 19:54:40	1.19
  @@ -14,7 +14,11 @@
       | |_| |
     __|_(_)_|__________________________________________________________
   
  - Changes between 1.1.3 and 1.1.4 (01-Jul-2000 to xx-Dec-2000)
  + Changes between 1.1.3 and 1.1.4 (01-Jul-2000 to xx-Jan-2001)
  +
  +  *) Added $(DESTDIR) support to Makefile.in. This makes life easier 
  +     for RPM package building.
  +     [Ralf S. Engelschall]
   
     *) Fixed typo in mm.h: (still unused) definition of SIZEOF_mem_core_fd
        lacked a closing parenthesis.
  Index: ossp-pkg/mm/Makefile.in
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 Makefile.in
  --- ossp-pkg/mm/Makefile.in	2000/07/01 14:17:42	1.25
  +++ ossp-pkg/mm/Makefile.in	2001/01/29 19:54:40	1.26
  @@ -44,6 +44,8 @@
   @SET_MAKE@
   
   TOP         = .
  +
  +DESTDIR     =
   prefix      = @prefix@
   exec_prefix = @exec_prefix@
   bindir      = @bindir@
  @@ -157,16 +159,16 @@
   	shtoolize -o shtool version echo mkdir install fixperm tarball
   
   install: all
  -	$(SHTOOL) mkdir -f -p -m 755 $(bindir)
  -	$(SHTOOL) mkdir -f -p -m 755 $(includedir)
  -	$(SHTOOL) mkdir -f -p -m 755 $(libdir)
  -	$(SHTOOL) mkdir -f -p -m 755 $(mandir)/man1
  -	$(SHTOOL) mkdir -f -p -m 755 $(mandir)/man3
  -	$(SHTOOL) install -c -m 755 mm-config $(bindir)/mm-config
  -	$(SHTOOL) install -c -m 644 mm-config.1 $(mandir)/man1/mm-config.1
  -	$(SHTOOL) install -c -m 644 mm.3 $(mandir)/man3/mm.3
  -	$(SHTOOL) install -c -m 644 mm.h $(includedir)/mm.h
  -	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libmm.la $(libdir)/libmm.la
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(includedir)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libdir)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man1
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man3
  +	$(SHTOOL) install -c -m 755 mm-config $(DESTDIR)$(bindir)/mm-config
  +	$(SHTOOL) install -c -m 644 mm-config.1 $(DESTDIR)$(mandir)/man1/mm-config.1
  +	$(SHTOOL) install -c -m 644 mm.3 $(DESTDIR)$(mandir)/man3/mm.3
  +	$(SHTOOL) install -c -m 644 mm.h $(DESTDIR)$(includedir)/mm.h
  +	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libmm.la $(DESTDIR)$(libdir)/libmm.la
   
   clean:
   	$(RM) mm_test mm_test.o mm_test.lo

From ossp-cvs-owner@ossp.org  Mon Jan 29 21:00:44 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f0TK0ht49756; Mon, 29 Jan 2001 21:00:43 +0100 (CET)
Date: Mon, 29 Jan 2001 21:00:43 +0100 (CET)
Message-Id: <200101292000.f0TK0ht49756@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm ChangeLog mm_core.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   29-Jan-2001 21:00:43
  Branch: HEAD                             Handle: 2001012920004300

  Modified files:
    ossp-pkg/mm             ChangeLog mm_core.c

  Log:
    *** empty log message ***

  Summary:
    Revision    Changes     Path
    1.20        +3  -0      ossp-pkg/mm/ChangeLog
    1.11        +7  -7      ossp-pkg/mm/mm_core.c
  ____________________________________________________________________________

  Index: ossp-pkg/mm/ChangeLog
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 ChangeLog
  --- ossp-pkg/mm/ChangeLog	2001/01/29 19:54:40	1.19
  +++ ossp-pkg/mm/ChangeLog	2001/01/29 20:00:43	1.20
  @@ -16,6 +16,9 @@
   
    Changes between 1.1.3 and 1.1.4 (01-Jul-2000 to xx-Jan-2001)
   
  +  *) Fixed initializations of fdxxx variables in mm_core.c
  +     [Ralf S. Engelschall]
  +
     *) Added $(DESTDIR) support to Makefile.in. This makes life easier 
        for RPM package building.
        [Ralf S. Engelschall]
  Index: ossp-pkg/mm/mm_core.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 mm_core.c
  --- ossp-pkg/mm/mm_core.c	2000/03/17 16:54:08	1.10
  +++ ossp-pkg/mm/mm_core.c	2001/01/29 20:00:43	1.11
  @@ -185,10 +185,10 @@
   {
       mem_core *mc;
       void *area = ((void *)-1);
  -    int fdmem = 0;
  -    int fdsem = 0;
  +    int fdmem = -1;
  +    int fdsem = -1;
   #if defined(MM_SEMT_IPCSEM)
  -    int fdsem_rd = 0;
  +    int fdsem_rd = -1;
   #endif
   #if defined(MM_SHMT_MMPOSX) || defined(MM_SHMT_MMFILE)
       char *fnmem;
  @@ -317,15 +317,15 @@
       fdsem = semget(IPC_PRIVATE, 1, IPC_CREAT|IPC_EXCL|S_IRUSR|S_IWUSR);
       if (fdsem == -1 && errno == EEXIST)
           fdsem = semget(IPC_PRIVATE, 1, IPC_EXCL|S_IRUSR|S_IWUSR);
  -        if (fdsem == -1)
  -            FAIL(MM_ERR_CORE|MM_ERR_SYSTEM, "failed to acquire semaphore");
  +    if (fdsem == -1)
  +        FAIL(MM_ERR_CORE|MM_ERR_SYSTEM, "failed to acquire semaphore");
       mm_core_semctlarg.val = 0;
       semctl(fdsem, 0, SETVAL, mm_core_semctlarg);
       fdsem_rd = semget(IPC_PRIVATE, 1, IPC_CREAT|IPC_EXCL|S_IRUSR|S_IWUSR);
       if (fdsem_rd == -1 && errno == EEXIST)
           fdsem_rd = semget(IPC_PRIVATE, 1, IPC_EXCL|S_IRUSR|S_IWUSR);
  -        if (fdsem_rd == -1)
  -            FAIL(MM_ERR_CORE|MM_ERR_SYSTEM, "failed to acquire semaphore");
  +    if (fdsem_rd == -1)
  +        FAIL(MM_ERR_CORE|MM_ERR_SYSTEM, "failed to acquire semaphore");
       mm_core_semctlarg.val = 0;
       semctl(fdsem_rd, 0, SETVAL, mm_core_semctlarg);
   #endif /* MM_SEMT_IPCSEM */

From ossp-cvs-owner@ossp.org  Mon Jan 29 21:01:42 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f0TK1fb49859; Mon, 29 Jan 2001 21:01:41 +0100 (CET)
Date: Mon, 29 Jan 2001 21:01:41 +0100 (CET)
Message-Id: <200101292001.f0TK1fb49859@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm ChangeLog
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   29-Jan-2001 21:01:41
  Branch: HEAD                             Handle: 2001012920014100

  Modified files:
    ossp-pkg/mm             ChangeLog

  Log:
    *** empty log message ***

  Summary:
    Revision    Changes     Path
    1.21        +1  -1      ossp-pkg/mm/ChangeLog
  ____________________________________________________________________________

  Index: ossp-pkg/mm/ChangeLog
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 ChangeLog
  --- ossp-pkg/mm/ChangeLog	2001/01/29 20:00:43	1.20
  +++ ossp-pkg/mm/ChangeLog	2001/01/29 20:01:41	1.21
  @@ -21,7 +21,7 @@
   
     *) Added $(DESTDIR) support to Makefile.in. This makes life easier 
        for RPM package building.
  -     [Ralf S. Engelschall]
  +     [Brad <brad@openbsd.org>, Ralf S. Engelschall]
   
     *) Fixed typo in mm.h: (still unused) definition of SIZEOF_mem_core_fd
        lacked a closing parenthesis.

From ossp-cvs-owner@ossp.org  Mon Jan 29 21:04:56 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f0TK4tt50116; Mon, 29 Jan 2001 21:04:55 +0100 (CET)
Date: Mon, 29 Jan 2001 21:04:55 +0100 (CET)
Message-Id: <200101292004.f0TK4tt50116@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm ChangeLog THANKS
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   29-Jan-2001 21:04:55
  Branch: HEAD                             Handle: 2001012920045400

  Modified files:
    ossp-pkg/mm             ChangeLog THANKS

  Log:
    *** empty log message ***

  Summary:
    Revision    Changes     Path
    1.22        +1  -1      ossp-pkg/mm/ChangeLog
    1.10        +1  -0      ossp-pkg/mm/THANKS
  ____________________________________________________________________________

  Index: ossp-pkg/mm/ChangeLog
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 ChangeLog
  --- ossp-pkg/mm/ChangeLog	2001/01/29 20:01:41	1.21
  +++ ossp-pkg/mm/ChangeLog	2001/01/29 20:04:54	1.22
  @@ -17,7 +17,7 @@
    Changes between 1.1.3 and 1.1.4 (01-Jul-2000 to xx-Jan-2001)
   
     *) Fixed initializations of fdxxx variables in mm_core.c
  -     [Ralf S. Engelschall]
  +     [Alexander Farber <farber@cpan.org>]
   
     *) Added $(DESTDIR) support to Makefile.in. This makes life easier 
        for RPM package building.
  Index: ossp-pkg/mm/THANKS
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 THANKS
  --- ossp-pkg/mm/THANKS	2000/10/31 07:06:54	1.9
  +++ ossp-pkg/mm/THANKS	2001/01/29 20:04:54	1.10
  @@ -23,6 +23,7 @@
       o  Eric Cholet                 <cholet@logilune.com>
       o  Alexander Demenchuk         <alder@untech.com>
       o  Jason Dillon                <jason@planet57.com>
  +    o  Alexander Farber            <farber@cpan.org>
       o  Joe France                  <france@sysar.com>
       o  Richard Furda               <riso@best.ca>
       o  Dean Gaudet                 <dgaudet@arctic.org>

From ossp-cvs-owner@ossp.org  Mon Jan 29 21:23:48 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f0TKNl051603; Mon, 29 Jan 2001 21:23:47 +0100 (CET)
Date: Mon, 29 Jan 2001 21:23:47 +0100 (CET)
Message-Id: <200101292023.f0TKNl051603@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm ChangeLog aclocal.m4 configure configure.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   29-Jan-2001 21:23:47
  Branch: HEAD                             Handle: 2001012920234700

  Modified files:
    ossp-pkg/mm             ChangeLog aclocal.m4 configure configure.in

  Log:
    *** empty log message ***

  Summary:
    Revision    Changes     Path
    1.23        +5  -0      ossp-pkg/mm/ChangeLog
    1.21        +23 -12     ossp-pkg/mm/aclocal.m4
    1.35        +96 -75     ossp-pkg/mm/configure
    1.18        +1  -0      ossp-pkg/mm/configure.in
  ____________________________________________________________________________

  Index: ossp-pkg/mm/ChangeLog
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 ChangeLog
  --- ossp-pkg/mm/ChangeLog	2001/01/29 20:04:54	1.22
  +++ ossp-pkg/mm/ChangeLog	2001/01/29 20:23:47	1.23
  @@ -16,6 +16,11 @@
   
    Changes between 1.1.3 and 1.1.4 (01-Jul-2000 to xx-Jan-2001)
   
  +  *) From Apache 2.0's MM patch set:
  +     Make Autoconf test for maximum shared memory size support BEOS and
  +     make decision cacheable.
  +     [The Apache Software Foundation]
  +
     *) Fixed initializations of fdxxx variables in mm_core.c
        [Alexander Farber <farber@cpan.org>]
   
  Index: ossp-pkg/mm/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 aclocal.m4
  --- ossp-pkg/mm/aclocal.m4	2000/10/31 07:06:54	1.20
  +++ ossp-pkg/mm/aclocal.m4	2001/01/29 20:23:47	1.21
  @@ -242,6 +242,7 @@
   
   define(AC_CHECK_MAXSEGSIZE,[dnl
   AC_MSG_CHECKING(for shared memory maximum segment size)
  +AC_CACHE_VAL(ac_cv_maxsegsize,[
   OCFLAGS="$CFLAGS"
   case "$1" in
       MM_SHMT_MM*    ) CFLAGS="-DTEST_MMAP   $CFLAGS" ;;
  @@ -286,6 +287,9 @@
   #if !defined(MAP_FAILED)
   #define MAP_FAILED ((void *)-1)
   #endif
  +#ifdef MM_OS_BEOS
  +#include <kernel/OS.h>
  +#endif
   
   int testit(int size)
   {
  @@ -317,6 +321,14 @@
       shmdt(segment);
       shmctl(fd, IPC_RMID, NULL);
   #endif
  +#ifdef TEST_BEOS
  +    area_id id;
  +    id = create_area("mm_test", (void*)&segment, B_ANY_ADDRESS, size, 
  +                     B_LAZY_LOCK, B_READ_AREA|B_WRITE_AREA);
  +    if (id < 0)
  +        return 0;
  +    delete_area(id);
  +#endif
       return 1;
   }
   
  @@ -371,9 +383,15 @@
   }
   >>
   changequote([, ])dnl
  -,[
  -MM_SHM_MAXSEGSIZE="`cat conftestval`"
  -msg="$MM_SHM_MAXSEGSIZE"
  +,[ac_cv_maxsegsize="`cat conftestval`"
  +],
  +ac_cv_maxsegsize=0
  +,
  +ac_cv_maxsegsize=0
  +)
  +CFLAGS="$OCFLAGS"
  +])
  +msg="$ac_cv_maxsegsize"
   if test $msg -eq 67108864; then
       msg="64MB (soft limit)"
   elif test $msg -gt 1048576; then
  @@ -384,17 +402,10 @@
       msg="`expr $msg / 1024`"
       msg="${msg}KB"
   else
  -    MM_SHM_MAXSEGSIZE=0
  +    ac_cv_maxsegsize=0
       msg=unknown
   fi
  -],
  -MM_SHM_MAXSEGSIZE=0
  -msg=unknown
  -,
  -MM_SHM_MAXSEGSIZE=0
  -msg=unknown
  -)dnl
  -CFLAGS="$OCFLAGS"
  +MM_SHM_MAXSEGSIZE=$ac_cv_maxsegsize
   test ".$msg" = .unknown && AC_MSG_ERROR([Unable to determine maximum shared memory segment size])
   AC_MSG_RESULT([$msg])
   AC_DEFINE_UNQUOTED(MM_SHM_MAXSEGSIZE, $MM_SHM_MAXSEGSIZE)
  Index: ossp-pkg/mm/configure
  ============================================================
  $ cvs diff -u -r1.34 -r1.35 configure
  --- ossp-pkg/mm/configure	2000/10/31 07:06:54	1.34
  +++ ossp-pkg/mm/configure	2001/01/29 20:23:47	1.35
  @@ -1389,6 +1389,10 @@
   #define MM_OS_BS2000 1
   EOF
    ;;
  +   *-*-beos*  ) cat >> confdefs.h <<\EOF
  +#define MM_OS_BEOS 1
  +EOF
  +   ;;
   esac
   
   
  @@ -1400,17 +1404,17 @@
   do
   ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
   echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
  -echo "configure:1404: checking for $ac_hdr" >&5
  +echo "configure:1408: checking for $ac_hdr" >&5
   if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
     echo $ac_n "(cached) $ac_c" 1>&6
   else
     cat > conftest.$ac_ext <<EOF
  -#line 1409 "configure"
  +#line 1413 "configure"
   #include "confdefs.h"
   #include <$ac_hdr>
   EOF
   ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  -{ (eval echo configure:1414: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  +{ (eval echo configure:1418: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
   ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
   if test -z "$ac_err"; then
     rm -rf conftest*
  @@ -1439,12 +1443,12 @@
   for ac_func in getpagesize sysconf
   do
   echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
  -echo "configure:1443: checking for $ac_func" >&5
  +echo "configure:1447: checking for $ac_func" >&5
   if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
     echo $ac_n "(cached) $ac_c" 1>&6
   else
     cat > conftest.$ac_ext <<EOF
  -#line 1448 "configure"
  +#line 1452 "configure"
   #include "confdefs.h"
   /* System header to define __stub macros and hopefully few prototypes,
       which can conflict with char $ac_func(); below.  */
  @@ -1467,7 +1471,7 @@
   
   ; return 0; }
   EOF
  -if { (eval echo configure:1471: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  +if { (eval echo configure:1475: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
     rm -rf conftest*
     eval "ac_cv_func_$ac_func=yes"
   else
  @@ -1492,12 +1496,12 @@
   done
   
     echo $ac_n "checking for _SC_PAGESIZE in unistd.h""... $ac_c" 1>&6
  -echo "configure:1496: checking for _SC_PAGESIZE in unistd.h" >&5
  +echo "configure:1500: checking for _SC_PAGESIZE in unistd.h" >&5
   if eval "test \"`echo '$''{'ac_cv_define__SC_PAGESIZE'+set}'`\" = set"; then
     echo $ac_n "(cached) $ac_c" 1>&6
   else
     cat > conftest.$ac_ext <<EOF
  -#line 1501 "configure"
  +#line 1505 "configure"
   #include "confdefs.h"
   
   #include <unistd.h>
  @@ -1528,12 +1532,12 @@
     fi
   
     echo $ac_n "checking for B_PAGE_SIZE in kernel/OS.h""... $ac_c" 1>&6
  -echo "configure:1532: checking for B_PAGE_SIZE in kernel/OS.h" >&5
  +echo "configure:1536: checking for B_PAGE_SIZE in kernel/OS.h" >&5
   if eval "test \"`echo '$''{'ac_cv_define_B_PAGE_SIZE'+set}'`\" = set"; then
     echo $ac_n "(cached) $ac_c" 1>&6
   else
     cat > conftest.$ac_ext <<EOF
  -#line 1537 "configure"
  +#line 1541 "configure"
   #include "confdefs.h"
   
   #include <kernel/OS.h>
  @@ -1697,17 +1701,17 @@
   do
   ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
   echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
  -echo "configure:1701: checking for $ac_hdr" >&5
  +echo "configure:1705: checking for $ac_hdr" >&5
   if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
     echo $ac_n "(cached) $ac_c" 1>&6
   else
     cat > conftest.$ac_ext <<EOF
  -#line 1706 "configure"
  +#line 1710 "configure"
   #include "confdefs.h"
   #include <$ac_hdr>
   EOF
   ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  -{ (eval echo configure:1711: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  +{ (eval echo configure:1715: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
   ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
   if test -z "$ac_err"; then
     rm -rf conftest*
  @@ -1734,12 +1738,12 @@
   done
   
     echo $ac_n "checking for MAP_ANON in sys/mman.h""... $ac_c" 1>&6
  -echo "configure:1738: checking for MAP_ANON in sys/mman.h" >&5
  +echo "configure:1742: checking for MAP_ANON in sys/mman.h" >&5
   if eval "test \"`echo '$''{'ac_cv_define_MAP_ANON'+set}'`\" = set"; then
     echo $ac_n "(cached) $ac_c" 1>&6
   else
     cat > conftest.$ac_ext <<EOF
  -#line 1743 "configure"
  +#line 1747 "configure"
   #include "confdefs.h"
   
   #include <sys/mman.h>
  @@ -1772,12 +1776,12 @@
   for ac_func in mmap munmap shm_open shm_unlink
   do
   echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
  -echo "configure:1776: checking for $ac_func" >&5
  +echo "configure:1780: checking for $ac_func" >&5
   if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
     echo $ac_n "(cached) $ac_c" 1>&6
   else
     cat > conftest.$ac_ext <<EOF
  -#line 1781 "configure"
  +#line 1785 "configure"
   #include "confdefs.h"
   /* System header to define __stub macros and hopefully few prototypes,
       which can conflict with char $ac_func(); below.  */
  @@ -1800,7 +1804,7 @@
   
   ; return 0; }
   EOF
  -if { (eval echo configure:1804: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  +if { (eval echo configure:1808: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
     rm -rf conftest*
     eval "ac_cv_func_$ac_func=yes"
   else
  @@ -1827,7 +1831,7 @@
   
   ac_safe=`echo "/dev/zero" | sed 'y%./+-%__p_%'`
   echo $ac_n "checking for /dev/zero""... $ac_c" 1>&6
  -echo "configure:1831: checking for /dev/zero" >&5
  +echo "configure:1835: checking for /dev/zero" >&5
   if eval "test \"`echo '$''{'ac_cv_file_$ac_safe'+set}'`\" = set"; then
     echo $ac_n "(cached) $ac_c" 1>&6
   else
  @@ -1851,17 +1855,17 @@
   do
   ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
   echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
  -echo "configure:1855: checking for $ac_hdr" >&5
  +echo "configure:1859: checking for $ac_hdr" >&5
   if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
     echo $ac_n "(cached) $ac_c" 1>&6
   else
     cat > conftest.$ac_ext <<EOF
  -#line 1860 "configure"
  +#line 1864 "configure"
   #include "confdefs.h"
   #include <$ac_hdr>
   EOF
   ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  -{ (eval echo configure:1865: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  +{ (eval echo configure:1869: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
   ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
   if test -z "$ac_err"; then
     rm -rf conftest*
  @@ -1890,12 +1894,12 @@
   for ac_func in shmget shmat shmdt shmctl
   do
   echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
  -echo "configure:1894: checking for $ac_func" >&5
  +echo "configure:1898: checking for $ac_func" >&5
   if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
     echo $ac_n "(cached) $ac_c" 1>&6
   else
     cat > conftest.$ac_ext <<EOF
  -#line 1899 "configure"
  +#line 1903 "configure"
   #include "confdefs.h"
   /* System header to define __stub macros and hopefully few prototypes,
       which can conflict with char $ac_func(); below.  */
  @@ -1918,7 +1922,7 @@
   
   ; return 0; }
   EOF
  -if { (eval echo configure:1922: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  +if { (eval echo configure:1926: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
     rm -rf conftest*
     eval "ac_cv_func_$ac_func=yes"
   else
  @@ -1946,17 +1950,17 @@
   do
   ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
   echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
  -echo "configure:1950: checking for $ac_hdr" >&5
  +echo "configure:1954: checking for $ac_hdr" >&5
   if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
     echo $ac_n "(cached) $ac_c" 1>&6
   else
     cat > conftest.$ac_ext <<EOF
  -#line 1955 "configure"
  +#line 1959 "configure"
   #include "confdefs.h"
   #include <$ac_hdr>
   EOF
   ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  -{ (eval echo configure:1960: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  +{ (eval echo configure:1964: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
   ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
   if test -z "$ac_err"; then
     rm -rf conftest*
  @@ -1985,12 +1989,12 @@
   for ac_func in create_area
   do
   echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
  -echo "configure:1989: checking for $ac_func" >&5
  +echo "configure:1993: checking for $ac_func" >&5
   if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
     echo $ac_n "(cached) $ac_c" 1>&6
   else
     cat > conftest.$ac_ext <<EOF
  -#line 1994 "configure"
  +#line 1998 "configure"
   #include "confdefs.h"
   /* System header to define __stub macros and hopefully few prototypes,
       which can conflict with char $ac_func(); below.  */
  @@ -2013,7 +2017,7 @@
   
   ; return 0; }
   EOF
  -if { (eval echo configure:2017: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  +if { (eval echo configure:2021: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
     rm -rf conftest*
     eval "ac_cv_func_$ac_func=yes"
   else
  @@ -2335,7 +2339,11 @@
   
   
   echo $ac_n "checking for shared memory maximum segment size""... $ac_c" 1>&6
  -echo "configure:2339: checking for shared memory maximum segment size" >&5
  +echo "configure:2343: checking for shared memory maximum segment size" >&5
  +if eval "test \"`echo '$''{'ac_cv_maxsegsize'+set}'`\" = set"; then
  +  echo $ac_n "(cached) $ac_c" 1>&6
  +else
  +  
   OCFLAGS="$CFLAGS"
   case "$ac_decision" in
       MM_SHMT_MM*    ) CFLAGS="-DTEST_MMAP   $CFLAGS" ;;
  @@ -2343,12 +2351,11 @@
   esac
   cross_compile=no
   if test "$cross_compiling" = yes; then
  -  MM_SHM_MAXSEGSIZE=0
  -msg=unknown
  +  ac_cv_maxsegsize=0
   
   else
     cat > conftest.$ac_ext <<EOF
  -#line 2352 "configure"
  +#line 2359 "configure"
   #include "confdefs.h"
   
   #include <stdio.h>
  @@ -2386,6 +2393,9 @@
   #if !defined(MAP_FAILED)
   #define MAP_FAILED ((void *)-1)
   #endif
  +#ifdef MM_OS_BEOS
  +#include <kernel/OS.h>
  +#endif
   
   int testit(int size)
   {
  @@ -2417,6 +2427,14 @@
       shmdt(segment);
       shmctl(fd, IPC_RMID, NULL);
   #endif
  +#ifdef TEST_BEOS
  +    area_id id;
  +    id = create_area("mm_test", (void*)&segment, B_ANY_ADDRESS, size, 
  +                     B_LAZY_LOCK, B_READ_AREA|B_WRITE_AREA);
  +    if (id < 0)
  +        return 0;
  +    delete_area(id);
  +#endif
       return 1;
   }
   
  @@ -2472,11 +2490,25 @@
   
   
   EOF
  -if { (eval echo configure:2476: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
  +if { (eval echo configure:2494: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
   then
  -  
  -MM_SHM_MAXSEGSIZE="`cat conftestval`"
  -msg="$MM_SHM_MAXSEGSIZE"
  +  ac_cv_maxsegsize="`cat conftestval`"
  +
  +else
  +  echo "configure: failed program was:" >&5
  +  cat conftest.$ac_ext >&5
  +  rm -fr conftest*
  +  ac_cv_maxsegsize=0
  +
  +fi
  +rm -fr conftest*
  +fi
  +
  +CFLAGS="$OCFLAGS"
  +
  +fi
  +
  +msg="$ac_cv_maxsegsize"
   if test $msg -eq 67108864; then
       msg="64MB (soft limit)"
   elif test $msg -gt 1048576; then
  @@ -2487,21 +2519,10 @@
       msg="`expr $msg / 1024`"
       msg="${msg}KB"
   else
  -    MM_SHM_MAXSEGSIZE=0
  +    ac_cv_maxsegsize=0
       msg=unknown
  -fi
  -
  -else
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  rm -fr conftest*
  -  MM_SHM_MAXSEGSIZE=0
  -msg=unknown
  -
  -fi
  -rm -fr conftest*
   fi
  -CFLAGS="$OCFLAGS"
  +MM_SHM_MAXSEGSIZE=$ac_cv_maxsegsize
   test ".$msg" = .unknown && { echo "configure: error: Unable to determine maximum shared memory segment size" 1>&2; exit 1; }
   echo "$ac_t""$msg" 1>&6
   cat >> confdefs.h <<EOF
  @@ -2519,17 +2540,17 @@
   do
   ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
   echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
  -echo "configure:2523: checking for $ac_hdr" >&5
  +echo "configure:2544: checking for $ac_hdr" >&5
   if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
     echo $ac_n "(cached) $ac_c" 1>&6
   else
     cat > conftest.$ac_ext <<EOF
  -#line 2528 "configure"
  +#line 2549 "configure"
   #include "confdefs.h"
   #include <$ac_hdr>
   EOF
   ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  -{ (eval echo configure:2533: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  +{ (eval echo configure:2554: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
   ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
   if test -z "$ac_err"; then
     rm -rf conftest*
  @@ -2558,12 +2579,12 @@
   for ac_func in semget semctl
   do
   echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
  -echo "configure:2562: checking for $ac_func" >&5
  +echo "configure:2583: checking for $ac_func" >&5
   if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
     echo $ac_n "(cached) $ac_c" 1>&6
   else
     cat > conftest.$ac_ext <<EOF
  -#line 2567 "configure"
  +#line 2588 "configure"
   #include "confdefs.h"
   /* System header to define __stub macros and hopefully few prototypes,
       which can conflict with char $ac_func(); below.  */
  @@ -2586,7 +2607,7 @@
   
   ; return 0; }
   EOF
  -if { (eval echo configure:2590: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  +if { (eval echo configure:2611: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
     rm -rf conftest*
     eval "ac_cv_func_$ac_func=yes"
   else
  @@ -2611,12 +2632,12 @@
   done
   
     echo $ac_n "checking for LOCK_EX in sys/file.h""... $ac_c" 1>&6
  -echo "configure:2615: checking for LOCK_EX in sys/file.h" >&5
  +echo "configure:2636: checking for LOCK_EX in sys/file.h" >&5
   if eval "test \"`echo '$''{'ac_cv_define_LOCK_EX'+set}'`\" = set"; then
     echo $ac_n "(cached) $ac_c" 1>&6
   else
     cat > conftest.$ac_ext <<EOF
  -#line 2620 "configure"
  +#line 2641 "configure"
   #include "confdefs.h"
   
   #include <sys/file.h>
  @@ -2647,12 +2668,12 @@
     fi
   
     echo $ac_n "checking for F_SETLK in fcntl.h""... $ac_c" 1>&6
  -echo "configure:2651: checking for F_SETLK in fcntl.h" >&5
  +echo "configure:2672: checking for F_SETLK in fcntl.h" >&5
   if eval "test \"`echo '$''{'ac_cv_define_F_SETLK'+set}'`\" = set"; then
     echo $ac_n "(cached) $ac_c" 1>&6
   else
     cat > conftest.$ac_ext <<EOF
  -#line 2656 "configure"
  +#line 2677 "configure"
   #include "confdefs.h"
   
   #include <fcntl.h>
  @@ -2683,12 +2704,12 @@
     fi
   
     echo $ac_n "checking for IPC_PRIVATE in sys/ipc.h""... $ac_c" 1>&6
  -echo "configure:2687: checking for IPC_PRIVATE in sys/ipc.h" >&5
  +echo "configure:2708: checking for IPC_PRIVATE in sys/ipc.h" >&5
   if eval "test \"`echo '$''{'ac_cv_define_IPC_PRIVATE'+set}'`\" = set"; then
     echo $ac_n "(cached) $ac_c" 1>&6
   else
     cat > conftest.$ac_ext <<EOF
  -#line 2692 "configure"
  +#line 2713 "configure"
   #include "confdefs.h"
   
   #include <sys/ipc.h>
  @@ -2719,12 +2740,12 @@
     fi
   
     echo $ac_n "checking for SEM_UNDO in sys/sem.h""... $ac_c" 1>&6
  -echo "configure:2723: checking for SEM_UNDO in sys/sem.h" >&5
  +echo "configure:2744: checking for SEM_UNDO in sys/sem.h" >&5
   if eval "test \"`echo '$''{'ac_cv_define_SEM_UNDO'+set}'`\" = set"; then
     echo $ac_n "(cached) $ac_c" 1>&6
   else
     cat > conftest.$ac_ext <<EOF
  -#line 2728 "configure"
  +#line 2749 "configure"
   #include "confdefs.h"
   
   #include <sys/sem.h>
  @@ -2758,17 +2779,17 @@
   do
   ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
   echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
  -echo "configure:2762: checking for $ac_hdr" >&5
  +echo "configure:2783: checking for $ac_hdr" >&5
   if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
     echo $ac_n "(cached) $ac_c" 1>&6
   else
     cat > conftest.$ac_ext <<EOF
  -#line 2767 "configure"
  +#line 2788 "configure"
   #include "confdefs.h"
   #include <$ac_hdr>
   EOF
   ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  -{ (eval echo configure:2772: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  +{ (eval echo configure:2793: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
   ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
   if test -z "$ac_err"; then
     rm -rf conftest*
  @@ -2797,12 +2818,12 @@
   for ac_func in create_sem
   do
   echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
  -echo "configure:2801: checking for $ac_func" >&5
  +echo "configure:2822: checking for $ac_func" >&5
   if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
     echo $ac_n "(cached) $ac_c" 1>&6
   else
     cat > conftest.$ac_ext <<EOF
  -#line 2806 "configure"
  +#line 2827 "configure"
   #include "confdefs.h"
   /* System header to define __stub macros and hopefully few prototypes,
       which can conflict with char $ac_func(); below.  */
  @@ -2825,7 +2846,7 @@
   
   ; return 0; }
   EOF
  -if { (eval echo configure:2829: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  +if { (eval echo configure:2850: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
     rm -rf conftest*
     eval "ac_cv_func_$ac_func=yes"
   else
  @@ -2851,9 +2872,9 @@
   
   
   echo $ac_n "checking whether union semun is defined in sys/sem.h""... $ac_c" 1>&6
  -echo "configure:2855: checking whether union semun is defined in sys/sem.h" >&5
  +echo "configure:2876: checking whether union semun is defined in sys/sem.h" >&5
   cat > conftest.$ac_ext <<EOF
  -#line 2857 "configure"
  +#line 2878 "configure"
   #include "confdefs.h"
   
   #include <sys/types.h>
  @@ -2867,7 +2888,7 @@
   
   ; return 0; }
   EOF
  -if { (eval echo configure:2871: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
  +if { (eval echo configure:2892: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
     rm -rf conftest*
     cat >> confdefs.h <<\EOF
   #define HAVE_UNION_SEMUN 1
  Index: ossp-pkg/mm/configure.in
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 configure.in
  --- ossp-pkg/mm/configure.in	2000/05/01 17:15:15	1.17
  +++ ossp-pkg/mm/configure.in	2001/01/29 20:23:47	1.18
  @@ -83,6 +83,7 @@
   case $PLATFORM in
      *-*-sunos* ) AC_DEFINE(MM_OS_SUNOS)  ;;
      BS2000-*-* ) AC_DEFINE(MM_OS_BS2000) ;;
  +   *-*-beos*  ) AC_DEFINE(MM_OS_BEOS)   ;;
   esac
   
   dnl #

From ossp-cvs-owner@ossp.org  Mon Jan 29 21:25:51 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f0TKPoS51783; Mon, 29 Jan 2001 21:25:50 +0100 (CET)
Date: Mon, 29 Jan 2001 21:25:50 +0100 (CET)
Message-Id: <200101292025.f0TKPoS51783@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm ChangeLog shtool
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   29-Jan-2001 21:25:49
  Branch: HEAD                             Handle: 2001012920254900

  Modified files:
    ossp-pkg/mm             ChangeLog shtool

  Log:
    *** empty log message ***

  Summary:
    Revision    Changes     Path
    1.24        +3  -0      ossp-pkg/mm/ChangeLog
    1.22        +57 -36     ossp-pkg/mm/shtool
  ____________________________________________________________________________

  Index: ossp-pkg/mm/ChangeLog
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 ChangeLog
  --- ossp-pkg/mm/ChangeLog	2001/01/29 20:23:47	1.23
  +++ ossp-pkg/mm/ChangeLog	2001/01/29 20:25:49	1.24
  @@ -16,6 +16,9 @@
   
    Changes between 1.1.3 and 1.1.4 (01-Jul-2000 to xx-Jan-2001)
   
  +  *) Upgraded to GNU shtool 1.5.2
  +     [Ralf S. Engelschall]
  +
     *) From Apache 2.0's MM patch set:
        Make Autoconf test for maximum shared memory size support BEOS and
        make decision cacheable.
  Index: ossp-pkg/mm/shtool
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 shtool
  --- ossp-pkg/mm/shtool	2000/07/01 14:17:42	1.21
  +++ ossp-pkg/mm/shtool	2001/01/29 20:25:49	1.22
  @@ -1,12 +1,12 @@
   #!/bin/sh
   ##
   ##  GNU shtool -- The GNU Portable Shell Tool
  -##  Copyright (c) 1994-2000 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1994-2001 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  See http://www.gnu.org/software/shtool/ for more information.
   ##  See ftp://ftp.gnu.org/gnu/shtool/ for latest version.
   ##
  -##  Version:  1.5.0 (01-Jul-2000)
  +##  Version:  1.5.2 (05-Oct-2000)
   ##  Contents: 6/17 available modules
   ##
   
  @@ -65,8 +65,8 @@
       exit 1
   fi
   if [ ".$1" = ".-h" -o ".$1" = ".--help" ]; then
  -    echo "This is GNU shtool, version 1.5.0 (01-Jul-2000)"
  -    echo "Copyright (c) 1994-2000 Ralf S. Engelschall <rse@engelschall.com>"
  +    echo "This is GNU shtool, version 1.5.2 (05-Oct-2000)"
  +    echo "Copyright (c) 1994-2001 Ralf S. Engelschall <rse@engelschall.com>"
       echo "Report bugs to <bug-shtool@gnu.org>"
       echo ''
       echo "Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]" 
  @@ -80,7 +80,7 @@
       echo 'Available <cmd-name> [<cmd-options>] [<cmd-args>]:'
       echo '  echo     [-n] [-e] [<str> ...]'
       echo '  install  [-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>]'
  -    echo '           [-e<ext>] <file> [<file> ...] <path>'
  +    echo '           [-e<sed-cmd>] <file> [<file> ...] <path>'
       echo '  mkdir    [-t] [-f] [-p] [-m<mode>] <dir> [<dir> ...]'
       echo '  fixperm  [-v] [-t] <path> [<path> ...]'
       echo '  tarball  [-t] [-v] [-o <tarball>] [-c <prog>] [-d <dir>] [-u'
  @@ -105,7 +105,7 @@
       exit 0
   fi
   if [ ".$1" = ".-v" -o ".$1" = ."--version" ]; then
  -    echo "GNU shtool 1.5.0 (01-Jul-2000)"
  +    echo "GNU shtool 1.5.2 (05-Oct-2000)"
       exit 0
   fi
   if [ ".$1" = ".-r" -o ".$1" = ."--recreate" ]; then
  @@ -147,15 +147,15 @@
           ;;
       install )
           str_tool="install"
  -        str_usage="[-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>] [-e<ext>] <file> [<file> ...] <path>"
  +        str_usage="[-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>] [-e<sed-cmd>] <file> [<file> ...] <path>"
           arg_spec="2+"
  -        opt_spec="v.t.c.C.s.m:o:g:e:"
  +        opt_spec="v.t.c.C.s.m:o:g:e+"
           opt_v=no
           opt_t=no
           opt_c=no
           opt_C=no
           opt_s=no
  -        opt_m=""
  +        opt_m="0755"
           opt_o=""
           opt_g=""
           opt_e=""
  @@ -353,6 +353,7 @@
       tmpfile="$tmpdir/.shtool.$$"
       rm -f $tmpfile >/dev/null 2>&1
       touch $tmpfile
  +    chmod 600 $tmpfile
   fi
   
   ##
  @@ -364,7 +365,7 @@
   echo )
       ##
       ##  echo -- Print string with optional construct expansion
  -    ##  Copyright (c) 1998-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1998-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for WML as buildinfo
       ##
       
  @@ -587,7 +588,7 @@
   install )
       ##
       ##  install -- Install a program, script or datafile
  -    ##  Copyright (c) 1997-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1997-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for shtool
       ##
       
  @@ -617,19 +618,13 @@
       for src in $srcs; do
           dst=$dstpath
       
  -        #  If destination is a directory, append the input filename
  +        #   if destination is a directory, append the input filename
           if [ $dstisdir = 1 ]; then
               dstfile=`echo "$src" | sed -e 's;.*/\([^/]*\)$;\1;'`
               dst="$dst/$dstfile"
           fi
  -    
  -        #  Add a possible extension to src and dst
  -        if [ ".$opt_e" != . ]; then
  -            src="$src$opt_e"
  -            dst="$dst$opt_e"
  -        fi
       
  -        #  Check for correct arguments
  +        #   check for correct arguments
           if [ ".$src" = ".$dst" ]; then
               echo "$msgprefix:Warning: source and destination are the same - skipped" 1>&2
               continue
  @@ -639,18 +634,18 @@
               continue
           fi
       
  -        #  Make a temp file name in the destination directory
  +        #   make a temp file name in the destination directory
           dsttmp=`echo $dst |\
                   sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;' -e 's;^$;.;' \
                       -e "s;\$;/#INST@$$#;"`
       
  -        #  Verbosity
  +        #   verbosity
           if [ ".$opt_v" = .yes ]; then
               echo "$src -> $dst" 1>&2
           fi
       
  -        #  Copy or move the file name to the temp name
  -        #  (because we might be not allowed to change the source)
  +        #   copy or move the file name to the temp name
  +        #   (because we might be not allowed to change the source)
           if [ ".$opt_C" = .yes ]; then
               opt_c=yes
           fi
  @@ -666,8 +661,16 @@
               mv $src $dsttmp || exit $?
           fi
       
  -        #  Adjust the target file
  -        #  (we do chmod last to preserve setuid bits)
  +        #   adjust the target file
  +        if [ ".$opt_e" != . ]; then
  +            sed='sed'
  +            for e in $opt_e; do
  +                sed="$sed -e '$e'"
  +            done
  +            cp $dsttmp $dsttmp.old
  +            eval "$sed <$dsttmp.old >$dsttmp" || exit $?
  +            rm -f $dsttmp.old
  +        fi
           if [ ".$opt_s" = .yes ]; then
               if [ ".$opt_t" = .yes ]; then
                   echo "strip $dsttmp" 1>&2
  @@ -686,14 +689,14 @@
               fi
               chgrp $opt_g $dsttmp || exit $?
           fi
  -        if [ ".$opt_m" != . ]; then
  +        if [ ".$opt_m" != ".-" ]; then
               if [ ".$opt_t" = .yes ]; then
                   echo "chmod $opt_m $dsttmp" 1>&2
               fi
               chmod $opt_m $dsttmp || exit $?
           fi
       
  -        #   Determine whether to do a quick install
  +        #   determine whether to do a quick install
           #   (has to be done _after_ the strip was already done)
           quick=no
           if [ ".$opt_C" = .yes ]; then
  @@ -704,7 +707,7 @@
               fi
           fi
       
  -        #   Finally install the file to the real destination
  +        #   finally, install the file to the real destination
           if [ $quick = yes ]; then
               if [ ".$opt_t" = .yes ]; then
                   echo "rm -f $dsttmp" 1>&2
  @@ -722,7 +725,7 @@
   mkdir )
       ##
       ##  mkdir -- Make one or more directories
  -    ##  Copyright (c) 1996-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1996-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for public domain by Noah Friedman <friedman@prep.ai.mit.edu>
       ##  Cleaned up and enhanced for shtool
       ##
  @@ -731,7 +734,7 @@
       for p in ${1+"$@"}; do
           #   if the directory already exists...
           if [ -d "$p" ]; then
  -            if [ ".$opt_f" = .no ] && [ ".$opt_p" = .no ]; then
  +            if [ ".$opt_f" = .no -a ".$opt_p" = .no ]; then
                   echo "$msgprefix:Error: directory already exists: $p" 1>&2
                   errstatus=1
                   break
  @@ -781,7 +784,7 @@
   fixperm )
       ##
       ##  fixperm -- Fix file permissions inside a source tree
  -    ##  Copyright (c) 1996-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1996-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for ePerl
       ##
       
  @@ -837,7 +840,7 @@
   tarball )
       ##
       ##  tarball -- Roll distribution tarballs
  -    ##  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for shtool
       ##
       
  @@ -863,7 +866,7 @@
           for tool in `echo $tools | sed -e 's/,/ /g'`; do
               #   iterate over paths
               for path in $paths; do
  -                if [ $minusx "$path/$tool" ] && [ ! -d "$path/$tool" ]; then
  +                if [ $minusx "$path/$tool" -a ! -d "$path/$tool" ]; then
                       eval "prg_${prg}=\"$path/$tool\""
                       break
                   fi
  @@ -889,7 +892,7 @@
               if [ ".$opt_t" = .yes ]; then
                   echo "(cd $src && $prg_find . -type f -depth -print) | sed -e 's:^\\.\$::' -e 's:^\\./::' | cat $exclude >>$tmpfile.lst" 1>&2
               fi
  -            (cd $src && find . -type f -depth -print) |\
  +            (cd $src && $prg_find . -type f -depth -print) |\
               sed -e 's:^\.$::' -e 's:^\./::' | eval cat $exclude >>$tmpfile.lst
           else
               if [ ".$opt_t" = .yes ]; then
  @@ -1000,7 +1003,7 @@
   version )
       ##
       ##  version -- Maintain a version information file
  -    ##  Copyright (c) 1994-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1994-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for ePerl, rewritten from scratch for shtool
       ##
       
  @@ -1084,7 +1087,8 @@
           s     ) typnum=15; levnum=255  ;; # snapshots are special
       esac
       hex=`echo "$ver:$rev:$typnum:$levnum" |\
  -         awk -F: '{ printf("0x%X%02X%1X%02X", $1, $2, $3, $4); }'`
  +         awk -F: '{ printf("0x%x%02x%1x%02x", $1, $2, $3, $4); }' |\
  +         tr 'abcdef' 'ABCDEF'`
       ltv=`echo "$ver:$rev:$typnum:$levnum" |\
            awk -F: '{ printf("%d:%d", $1*10 + $2, $3*10 + $4); }'`
       
  @@ -1248,6 +1252,23 @@
                   echo >>$file "};"
                   echo >>$file ""
                   echo >>$file "1;"
  +                echo >>$file ""
  +                ;;
  +            python )
  +                echo >>$file "##"
  +                echo >>$file "##  ${file} -- Version Information for ${name} (syntax: Python)"
  +                echo >>$file "##  [automatically generated and maintained by GNU shtool]"
  +                echo >>$file "##"
  +                echo >>$file ""
  +                echo >>$file "class ${prefix}version:"
  +                echo >>$file "    v_hex       = ${vHex}"
  +                echo >>$file "    v_short     = \"${vShort}\""
  +                echo >>$file "    v_long      = \"${vLong}\""
  +                echo >>$file "    v_tex       = \"${vTeX}\""
  +                echo >>$file "    v_gnu       = \"${vGNU}\""
  +                echo >>$file "    v_web       = \"${vWeb}\""
  +                echo >>$file "    v_sccs      = \"${vSCCS}\""
  +                echo >>$file "    v_rcs       = \"${vRCS}\""
                   echo >>$file ""
                   ;;
               * ) echo "$msgprefix:Error: invalid argument to option \`-l': \`$opt_l'" 1>&2

From ossp-cvs-owner@ossp.org  Mon Jan 29 21:27:25 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f0TKROi52038; Mon, 29 Jan 2001 21:27:24 +0100 (CET)
Date: Mon, 29 Jan 2001 21:27:24 +0100 (CET)
Message-Id: <200101292027.f0TKROi52038@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm ChangeLog LICENSE Makefile.in README aclocal.m...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   29-Jan-2001 21:27:24
  Branch: HEAD                             Handle: 2001012920272200

  Modified files:
    ossp-pkg/mm             ChangeLog LICENSE Makefile.in README aclocal.m4
                            configure configure.in fbtool mm-config.1
                            mm-config.in mm-config.pod mm.3 mm.h mm.pod
                            mm_alloc.c mm_conf.h.in mm_core.c mm_global.c
                            mm_lib.c mm_test.c

  Log:
    *** empty log message ***

  Summary:
    Revision    Changes     Path
    1.25        +3  -0      ossp-pkg/mm/ChangeLog
    1.3         +1  -1      ossp-pkg/mm/LICENSE
    1.27        +1  -1      ossp-pkg/mm/Makefile.in
    1.67        +1  -1      ossp-pkg/mm/README
    1.22        +1  -1      ossp-pkg/mm/aclocal.m4
    1.36        +2  -2      ossp-pkg/mm/configure
    1.19        +1  -1      ossp-pkg/mm/configure.in
    1.7         +1  -1      ossp-pkg/mm/fbtool
    1.15        +127 -194   ossp-pkg/mm/mm-config.1
    1.7         +1  -1      ossp-pkg/mm/mm-config.in
    1.4         +1  -1      ossp-pkg/mm/mm-config.pod
    1.35        +234 -361   ossp-pkg/mm/mm.3
    1.21        +1  -1      ossp-pkg/mm/mm.h
    1.17        +1  -1      ossp-pkg/mm/mm.pod
    1.15        +1  -1      ossp-pkg/mm/mm_alloc.c
    1.5         +1  -1      ossp-pkg/mm/mm_conf.h.in
    1.12        +1  -1      ossp-pkg/mm/mm_core.c
    1.9         +1  -1      ossp-pkg/mm/mm_global.c
    1.5         +1  -1      ossp-pkg/mm/mm_lib.c
    1.8         +1  -1      ossp-pkg/mm/mm_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/mm/ChangeLog
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 ChangeLog
  --- ossp-pkg/mm/ChangeLog	2001/01/29 20:25:49	1.24
  +++ ossp-pkg/mm/ChangeLog	2001/01/29 20:27:22	1.25
  @@ -16,6 +16,9 @@
   
    Changes between 1.1.3 and 1.1.4 (01-Jul-2000 to xx-Jan-2001)
   
  +  *) Adjusted year in copyright messages for 2001.
  +     [Ralf S. Engelschall]
  +
     *) Upgraded to GNU shtool 1.5.2
        [Ralf S. Engelschall]
   
  Index: ossp-pkg/mm/LICENSE
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 LICENSE
  --- ossp-pkg/mm/LICENSE	2000/01/09 20:19:39	1.2
  +++ ossp-pkg/mm/LICENSE	2001/01/29 20:27:22	1.3
  @@ -1,6 +1,6 @@
   
     ====================================================================
  -  Copyright (c) 1999-2000 Ralf S. Engelschall. All rights reserved.
  +  Copyright (c) 1999-2001 Ralf S. Engelschall. All rights reserved.
    
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
  Index: ossp-pkg/mm/Makefile.in
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 Makefile.in
  --- ossp-pkg/mm/Makefile.in	2001/01/29 19:54:40	1.26
  +++ ossp-pkg/mm/Makefile.in	2001/01/29 20:27:22	1.27
  @@ -1,5 +1,5 @@
   ## ====================================================================
  -## Copyright (c) 1999-2000 Ralf S. Engelschall. All rights reserved.
  +## Copyright (c) 1999-2001 Ralf S. Engelschall. All rights reserved.
   ##
   ## Redistribution and use in source and binary forms, with or without
   ## modification, are permitted provided that the following conditions
  Index: ossp-pkg/mm/README
  ============================================================
  $ cvs diff -u -r1.66 -r1.67 README
  --- ossp-pkg/mm/README	2000/07/01 14:17:42	1.66
  +++ ossp-pkg/mm/README	2001/01/29 20:27:22	1.67
  @@ -5,7 +5,7 @@
     |_|  |_|_|  |_|
                    
     MM - Shared Memory Library
  -  Copyright (c) 1999-2000 Ralf S. Engelschall, All rights reserved.
  +  Copyright (c) 1999-2001 Ralf S. Engelschall, All rights reserved.
     Version 1.1.3 (01-Jul-2000)
   
     The MM library is a 2-layer abstraction library which simplifies the usage
  Index: ossp-pkg/mm/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 aclocal.m4
  --- ossp-pkg/mm/aclocal.m4	2001/01/29 20:23:47	1.21
  +++ ossp-pkg/mm/aclocal.m4	2001/01/29 20:27:22	1.22
  @@ -1,5 +1,5 @@
   ## ====================================================================
  -## Copyright (c) 1999-2000 Ralf S. Engelschall. All rights reserved.
  +## Copyright (c) 1999-2001 Ralf S. Engelschall. All rights reserved.
   ##
   ## Redistribution and use in source and binary forms, with or without
   ## modification, are permitted provided that the following conditions
  Index: ossp-pkg/mm/configure
  ============================================================
  $ cvs diff -u -r1.35 -r1.36 configure
  --- ossp-pkg/mm/configure	2001/01/29 20:23:47	1.35
  +++ ossp-pkg/mm/configure	2001/01/29 20:27:22	1.36
  @@ -23,11 +23,11 @@
   
   
   echo "Configuring ${T_MD}MM${T_ME} (Shared Memory Library), Version ${T_MD}${MM_VERSION_STR}${T_ME}"
  -echo "Copyright (c) 1999-2000 Ralf S. Engelschall, All Rights Reserved."
  +echo "Copyright (c) 1999-2001 Ralf S. Engelschall, All Rights Reserved."
   echo "Platform: ${T_MD}${PLATFORM}${T_ME}"
   
   ## ====================================================================
  -## Copyright (c) 1999-2000 Ralf S. Engelschall. All rights reserved.
  +## Copyright (c) 1999-2001 Ralf S. Engelschall. All rights reserved.
   ##
   ## Redistribution and use in source and binary forms, with or without
   ## modification, are permitted provided that the following conditions
  Index: ossp-pkg/mm/configure.in
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 configure.in
  --- ossp-pkg/mm/configure.in	2001/01/29 20:23:47	1.18
  +++ ossp-pkg/mm/configure.in	2001/01/29 20:27:22	1.19
  @@ -22,7 +22,7 @@
   
   dnl #   friendly header ;-)
   echo "Configuring ${T_MD}MM${T_ME} (Shared Memory Library), Version ${T_MD}${MM_VERSION_STR}${T_ME}"
  -echo "Copyright (c) 1999-2000 Ralf S. Engelschall, All Rights Reserved."
  +echo "Copyright (c) 1999-2001 Ralf S. Engelschall, All Rights Reserved."
   echo "Platform: ${T_MD}${PLATFORM}${T_ME}"
   
   dnl #   autoconf initialization
  Index: ossp-pkg/mm/fbtool
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 fbtool
  --- ossp-pkg/mm/fbtool	2000/01/09 20:19:40	1.6
  +++ ossp-pkg/mm/fbtool	2001/01/29 20:27:22	1.7
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  fbtool -- MM library feedback tool
  -##  Copyright (c) 1999-2000 Ralf S. Engelschall, All Rights Reserved. 
  +##  Copyright (c) 1999-2001 Ralf S. Engelschall, All Rights Reserved. 
   ##
   
   if [ ! -f .fbtool ]; then
  Index: ossp-pkg/mm/mm-config.1
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 mm-config.1
  --- ossp-pkg/mm/mm-config.1	2000/06/20 07:02:06	1.14
  +++ ossp-pkg/mm/mm-config.1	2001/01/29 20:27:22	1.15
  @@ -1,12 +1,9 @@
  -.rn '' }`
  -''' $RCSfile: mm-config.1,v $$Revision: 1.14 $$Date: 2000/06/20 07:02:06 $
  -'''
  -''' $Log: mm-config.1,v $
  -''' Revision 1.14  2000/06/20 07:02:06  rse
  -''' *** empty log message ***
  -'''
  -'''
  -.de Sh
  +.\" Automatically generated by Pod::Man version 1.02
  +.\" Mon Jan 29 21:26:47 2001
  +.\"
  +.\" Standard preamble:
  +.\" ======================================================================
  +.de Sh \" Subsection heading
   .br
   .if t .Sp
   .ne 5
  @@ -14,150 +11,106 @@
   \fB\\$1\fR
   .PP
   ..
  -.de Sp
  +.de Sp \" Vertical space (when we can't use .PP)
   .if t .sp .5v
   .if n .sp
   ..
  -.de Ip
  +.de Ip \" List item
   .br
   .ie \\n(.$>=3 .ne \\$3
   .el .ne 3
   .IP "\\$1" \\$2
   ..
  -.de Vb
  +.de Vb \" Begin verbatim text
   .ft CW
   .nf
   .ne \\$1
   ..
  -.de Ve
  +.de Ve \" End verbatim text
   .ft R
   
   .fi
   ..
  -'''
  -'''
  -'''     Set up \*(-- to give an unbreakable dash;
  -'''     string Tr holds user defined translation string.
  -'''     Bell System Logo is used as a dummy character.
  -'''
  +.\" Set up some character translations and predefined strings.  \*(-- will
  +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
  +.\" double quote, and \*(R" will give a right double quote.  | will give a
  +.\" real vertical bar.  \*(C+ will give a nicer C++.  Capital omega is used
  +.\" to do unbreakable dashes and therefore won't be available.  \*(C` and
  +.\" \*(C' expand to `' in nroff, nothing in troff, for use with C<>
   .tr \(*W-|\(bv\*(Tr
  +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
   .ie n \{\
  -.ds -- \(*W-
  -.ds PI pi
  -.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
  -.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
  -.ds L" ""
  -.ds R" ""
  -'''   \*(M", \*(S", \*(N" and \*(T" are the equivalent of
  -'''   \*(L" and \*(R", except that they are used on ".xx" lines,
  -'''   such as .IP and .SH, which do another additional levels of
  -'''   double-quote interpretation
  -.ds M" """
  -.ds S" """
  -.ds N" """""
  -.ds T" """""
  -.ds L' '
  -.ds R' '
  -.ds M' '
  -.ds S' '
  -.ds N' '
  -.ds T' '
  +.    ds -- \(*W-
  +.    ds PI pi
  +.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
  +.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
  +.    ds L" ""
  +.    ds R" ""
  +.    ds C` `
  +.    ds C' '
   'br\}
   .el\{\
  -.ds -- \(em\|
  -.tr \*(Tr
  -.ds L" ``
  -.ds R" ''
  -.ds M" ``
  -.ds S" ''
  -.ds N" ``
  -.ds T" ''
  -.ds L' `
  -.ds R' '
  -.ds M' `
  -.ds S' '
  -.ds N' `
  -.ds T' '
  -.ds PI \(*p
  +.    ds -- \|\(em\|
  +.    ds PI \(*p
  +.    ds L" ``
  +.    ds R" ''
   'br\}
  -.\"	If the F register is turned on, we'll generate
  -.\"	index entries out stderr for the following things:
  -.\"		TH	Title 
  -.\"		SH	Header
  -.\"		Sh	Subsection 
  -.\"		Ip	Item
  -.\"		X<>	Xref  (embedded
  -.\"	Of course, you have to process the output yourself
  -.\"	in some meaninful fashion.
  -.if \nF \{
  -.de IX
  -.tm Index:\\$1\t\\n%\t"\\$2"
  -..
  -.nr % 0
  -.rr F
  -.\}
  -.TH MM-CONFIG 1 "20-Jun-2000" "MM 1.1.3" "Shared Memory Library"
  -.UC
  -.if n .hy 0
  +.\"
  +.\" If the F register is turned on, we'll generate index entries on stderr
  +.\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and
  +.\" index entries marked with X<> in POD.  Of course, you'll have to process
  +.\" the output yourself in some meaningful fashion.
  +.if \nF \{\
  +.    de IX
  +.    tm Index:\\$1\t\\n%\t"\\$2"
  +.    .
  +.    nr % 0
  +.    rr F
  +.\}
  +.\"
  +.\" For nroff, turn off justification.  Always turn off hyphenation; it
  +.\" makes way too many mistakes in technical documents.
  +.hy 0
   .if n .na
  -.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
  -.de CQ          \" put $1 in typewriter font
  -.ft CW
  -'if n "\c
  -'if t \\&\\$1\c
  -'if n \\&\\$1\c
  -'if n \&"
  -\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
  -'.ft R
  -..
  -.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
  -.	\" AM - accent mark definitions
  +.\"
  +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
  +.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
   .bd B 3
  -.	\" fudge factors for nroff and troff
  +.    \" fudge factors for nroff and troff
   .if n \{\
  -.	ds #H 0
  -.	ds #V .8m
  -.	ds #F .3m
  -.	ds #[ \f1
  -.	ds #] \fP
  +.    ds #H 0
  +.    ds #V .8m
  +.    ds #F .3m
  +.    ds #[ \f1
  +.    ds #] \fP
   .\}
   .if t \{\
  -.	ds #H ((1u-(\\\\n(.fu%2u))*.13m)
  -.	ds #V .6m
  -.	ds #F 0
  -.	ds #[ \&
  -.	ds #] \&
  +.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
  +.    ds #V .6m
  +.    ds #F 0
  +.    ds #[ \&
  +.    ds #] \&
   .\}
  -.	\" simple accents for nroff and troff
  +.    \" simple accents for nroff and troff
   .if n \{\
  -.	ds ' \&
  -.	ds ` \&
  -.	ds ^ \&
  -.	ds , \&
  -.	ds ~ ~
  -.	ds ? ?
  -.	ds ! !
  -.	ds /
  -.	ds q
  +.    ds ' \&
  +.    ds ` \&
  +.    ds ^ \&
  +.    ds , \&
  +.    ds ~ ~
  +.    ds /
   .\}
   .if t \{\
  -.	ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
  -.	ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
  -.	ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
  -.	ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
  -.	ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
  -.	ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
  -.	ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
  -.	ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
  -.	ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
  +.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
  +.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
  +.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
  +.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
  +.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
  +.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
   .\}
  -.	\" troff and (daisy-wheel) nroff accents
  +.    \" troff and (daisy-wheel) nroff accents
   .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
   .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
  -.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
  -.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
  -.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
  -.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
   .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
   .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
   .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
  @@ -165,73 +118,80 @@
   .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
   .ds ae a\h'-(\w'a'u*4/10)'e
   .ds Ae A\h'-(\w'A'u*4/10)'E
  -.ds oe o\h'-(\w'o'u*4/10)'e
  -.ds Oe O\h'-(\w'O'u*4/10)'E
  -.	\" corrections for vroff
  +.    \" corrections for vroff
   .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
   .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
  -.	\" for low resolution devices (crt and lpr)
  +.    \" for low resolution devices (crt and lpr)
   .if \n(.H>23 .if \n(.V>19 \
   \{\
  -.	ds : e
  -.	ds 8 ss
  -.	ds v \h'-1'\o'\(aa\(ga'
  -.	ds _ \h'-1'^
  -.	ds . \h'-1'.
  -.	ds 3 3
  -.	ds o a
  -.	ds d- d\h'-1'\(ga
  -.	ds D- D\h'-1'\(hy
  -.	ds th \o'bp'
  -.	ds Th \o'LP'
  -.	ds ae ae
  -.	ds Ae AE
  -.	ds oe oe
  -.	ds Oe OE
  +.    ds : e
  +.    ds 8 ss
  +.    ds o a
  +.    ds d- d\h'-1'\(ga
  +.    ds D- D\h'-1'\(hy
  +.    ds th \o'bp'
  +.    ds Th \o'LP'
  +.    ds ae ae
  +.    ds Ae AE
   .\}
   .rm #[ #] #H #V #F C
  +.\" ======================================================================
  +.\"
  +.IX Title "MM-CONFIG 1"
  +.TH MM-CONFIG 1 "01-Jul-2000" "MM 1.1.3" "Shared Memory Library"
  +.UC
   .SH "NAME"
  -\fBmm-config\fR \- MM library configuration/build utility
  +\&\fBmm-config\fR \- \s-1MM\s0 library configuration/build utility
   .SH "VERSION"
  -MM 1.1.3 (20-Jun-2000)
  +.IX Header "VERSION"
  +\&\s-1MM\s0 \s-11.1.3 (01-Jul-2000)\s0
   .SH "SYNOPSIS"
  -\fBmm-config\fR 
  -[\fB--help\fR]
  -[\fB--version\fR]
  -[\fB--cflags\fR]
  -[\fB--ldflags\fR]
  -[\fB--libs\fR]
  +.IX Header "SYNOPSIS"
  +\&\fBmm-config\fR 
  +[\fB\*(--help\fR]
  +[\fB\*(--version\fR]
  +[\fB\*(--cflags\fR]
  +[\fB\*(--ldflags\fR]
  +[\fB\*(--libs\fR]
   .SH "DESCRIPTION"
  +.IX Header "DESCRIPTION"
   The \fBmm-config\fR program is a little helper utility for easy configuring and
   building applications based on the \fImm\fR\|(3) library.  It can be used to query the
   C compiler and linker flags which are required to correctly compile and link
   the application against the \fImm\fR\|(3) library. 
   .SH "OPTIONS"
  -\fBmm-config\fR accepts the following options:
  -.Ip "\fB--help\fR" 4
  +.IX Header "OPTIONS"
  +\&\fBmm-config\fR accepts the following options:
  +.Ip "\fB\*(--help\fR" 4
  +.IX Item "help"
   Prints the short usage information.
  -.Ip "\fB--version\fR" 4
  +.Ip "\fB\*(--version\fR" 4
  +.IX Item "version"
   Prints the version number and date of the installed \fImm\fR\|(3) library.
  -.Ip "\fB--cflags\fR" 4
  +.Ip "\fB\*(--cflags\fR" 4
  +.IX Item "cflags"
   Prints the C compiler flags which are needed to compile the \fImm\fR\|(3)\-based
  -application. The output is usually added to the \f(CWCFLAGS\fR variable of the
  -applications \f(CWMakefile\fR.
  -.Ip "\fB--ldflags\fR" 4
  -Prints the linker flags (\f(CW-L\fR) which are needed to link the application with
  -the \fImm\fR\|(3) library. The output is usually added to the \f(CWLDFLAGS\fR variable of
  -the applications \f(CWMakefile\fR.
  -.Ip "\fB--libs\fR" 4
  -Prints the library flags (\f(CW-l\fR) which are needed to link the application with
  -the \fImm\fR\|(3) library. The output is usually added to the \f(CWLIBS\fR variable of the
  -applications \f(CWMakefile\fR.
  +application. The output is usually added to the \f(CW\*(C`CFLAGS\*(C'\fR variable of the
  +applications \f(CW\*(C`Makefile\*(C'\fR.
  +.Ip "\fB\*(--ldflags\fR" 4
  +.IX Item "ldflags"
  +Prints the linker flags (\f(CW\*(C`\-L\*(C'\fR) which are needed to link the application with
  +the \fImm\fR\|(3) library. The output is usually added to the \f(CW\*(C`LDFLAGS\*(C'\fR variable of
  +the applications \f(CW\*(C`Makefile\*(C'\fR.
  +.Ip "\fB\*(--libs\fR" 4
  +.IX Item "libs"
  +Prints the library flags (\f(CW\*(C`\-l\*(C'\fR) which are needed to link the application with
  +the \fImm\fR\|(3) library. The output is usually added to the \f(CW\*(C`LIBS\*(C'\fR variable of the
  +applications \f(CW\*(C`Makefile\*(C'\fR.
   .SH "EXAMPLE"
  -.PP
  -.Vb 10
  +.IX Header "EXAMPLE"
  +.Vb 4
   \& CC=cc
   \& CFLAGS=-O `mm-config --cflags`
   \& LDFLAGS=`mm-config --ldflags`
   \& LIBS=-lm `mm-config --libs`
  -\& 
  +.Ve
  +.Vb 5
   \& all: foo
   \& foo: foo.o
   \&     $(CC) $(LDFLAGS) -o foo foo.o $(LIBS)
  @@ -239,42 +199,12 @@
   \&     $(CC) $(CFLAGS) -c foo.c
   .Ve
   .SH "SEE ALSO"
  -\fImm\fR\|(3).
  +.IX Header "SEE ALSO"
  +\&\fImm\fR\|(3).
   .SH "AUTHOR"
  -.PP
  +.IX Header "AUTHOR"
   .Vb 3
   \& Ralf S. Engelschall
   \& rse@engelschall.com
   \& www.engelschall.com
   .Ve
  -
  -.rn }` ''
  -.IX Title "MM-CONFIG 1"
  -.IX Name "B<mm-config> - MM library configuration/build utility"
  -
  -.IX Header "NAME"
  -
  -.IX Header "VERSION"
  -
  -.IX Header "SYNOPSIS"
  -
  -.IX Header "DESCRIPTION"
  -
  -.IX Header "OPTIONS"
  -
  -.IX Item "\fB--help\fR"
  -
  -.IX Item "\fB--version\fR"
  -
  -.IX Item "\fB--cflags\fR"
  -
  -.IX Item "\fB--ldflags\fR"
  -
  -.IX Item "\fB--libs\fR"
  -
  -.IX Header "EXAMPLE"
  -
  -.IX Header "SEE ALSO"
  -
  -.IX Header "AUTHOR"
  -
  Index: ossp-pkg/mm/mm-config.in
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 mm-config.in
  --- ossp-pkg/mm/mm-config.in	2000/01/09 20:19:40	1.6
  +++ ossp-pkg/mm/mm-config.in	2001/01/29 20:27:22	1.7
  @@ -3,7 +3,7 @@
   ## mm-config -- MM library build configuration utility
   ##
   ## ====================================================================
  -## Copyright (c) 1999-2000 Ralf S. Engelschall. All rights reserved.
  +## Copyright (c) 1999-2001 Ralf S. Engelschall. All rights reserved.
   ##
   ## Redistribution and use in source and binary forms, with or without
   ## modification, are permitted provided that the following conditions
  Index: ossp-pkg/mm/mm-config.pod
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 mm-config.pod
  --- ossp-pkg/mm/mm-config.pod	2000/01/09 20:19:40	1.3
  +++ ossp-pkg/mm/mm-config.pod	2001/01/29 20:27:22	1.4
  @@ -1,5 +1,5 @@
   ## ====================================================================
  -## Copyright (c) 1999-2000 Ralf S. Engelschall. All rights reserved.
  +## Copyright (c) 1999-2001 Ralf S. Engelschall. All rights reserved.
   ##
   ## Redistribution and use in source and binary forms, with or without
   ## modification, are permitted provided that the following conditions
  Index: ossp-pkg/mm/mm.3
  ============================================================
  $ cvs diff -u -r1.34 -r1.35 mm.3
  --- ossp-pkg/mm/mm.3	2000/06/20 07:02:06	1.34
  +++ ossp-pkg/mm/mm.3	2001/01/29 20:27:22	1.35
  @@ -1,9 +1,9 @@
  -.rn '' }`
  -''' $RCSfile$$Revision$$Date$
  -'''
  -''' $Log$
  -'''
  -.de Sh
  +.\" Automatically generated by Pod::Man version 1.02
  +.\" Mon Jan 29 21:26:46 2001
  +.\"
  +.\" Standard preamble:
  +.\" ======================================================================
  +.de Sh \" Subsection heading
   .br
   .if t .Sp
   .ne 5
  @@ -11,150 +11,106 @@
   \fB\\$1\fR
   .PP
   ..
  -.de Sp
  +.de Sp \" Vertical space (when we can't use .PP)
   .if t .sp .5v
   .if n .sp
   ..
  -.de Ip
  +.de Ip \" List item
   .br
   .ie \\n(.$>=3 .ne \\$3
   .el .ne 3
   .IP "\\$1" \\$2
   ..
  -.de Vb
  +.de Vb \" Begin verbatim text
   .ft CW
   .nf
   .ne \\$1
   ..
  -.de Ve
  +.de Ve \" End verbatim text
   .ft R
   
   .fi
   ..
  -'''
  -'''
  -'''     Set up \*(-- to give an unbreakable dash;
  -'''     string Tr holds user defined translation string.
  -'''     Bell System Logo is used as a dummy character.
  -'''
  +.\" Set up some character translations and predefined strings.  \*(-- will
  +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
  +.\" double quote, and \*(R" will give a right double quote.  | will give a
  +.\" real vertical bar.  \*(C+ will give a nicer C++.  Capital omega is used
  +.\" to do unbreakable dashes and therefore won't be available.  \*(C` and
  +.\" \*(C' expand to `' in nroff, nothing in troff, for use with C<>
   .tr \(*W-|\(bv\*(Tr
  +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
   .ie n \{\
  -.ds -- \(*W-
  -.ds PI pi
  -.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
  -.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
  -.ds L" ""
  -.ds R" ""
  -'''   \*(M", \*(S", \*(N" and \*(T" are the equivalent of
  -'''   \*(L" and \*(R", except that they are used on ".xx" lines,
  -'''   such as .IP and .SH, which do another additional levels of
  -'''   double-quote interpretation
  -.ds M" """
  -.ds S" """
  -.ds N" """""
  -.ds T" """""
  -.ds L' '
  -.ds R' '
  -.ds M' '
  -.ds S' '
  -.ds N' '
  -.ds T' '
  +.    ds -- \(*W-
  +.    ds PI pi
  +.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
  +.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
  +.    ds L" ""
  +.    ds R" ""
  +.    ds C` `
  +.    ds C' '
   'br\}
   .el\{\
  -.ds -- \(em\|
  -.tr \*(Tr
  -.ds L" ``
  -.ds R" ''
  -.ds M" ``
  -.ds S" ''
  -.ds N" ``
  -.ds T" ''
  -.ds L' `
  -.ds R' '
  -.ds M' `
  -.ds S' '
  -.ds N' `
  -.ds T' '
  -.ds PI \(*p
  +.    ds -- \|\(em\|
  +.    ds PI \(*p
  +.    ds L" ``
  +.    ds R" ''
   'br\}
  -.\"	If the F register is turned on, we'll generate
  -.\"	index entries out stderr for the following things:
  -.\"		TH	Title 
  -.\"		SH	Header
  -.\"		Sh	Subsection 
  -.\"		Ip	Item
  -.\"		X<>	Xref  (embedded
  -.\"	Of course, you have to process the output yourself
  -.\"	in some meaninful fashion.
  -.if \nF \{
  -.de IX
  -.tm Index:\\$1\t\\n%\t"\\$2"
  -..
  -.nr % 0
  -.rr F
  +.\"
  +.\" If the F register is turned on, we'll generate index entries on stderr
  +.\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and
  +.\" index entries marked with X<> in POD.  Of course, you'll have to process
  +.\" the output yourself in some meaningful fashion.
  +.if \nF \{\
  +.    de IX
  +.    tm Index:\\$1\t\\n%\t"\\$2"
  +.    .
  +.    nr % 0
  +.    rr F
   .\}
  -.TH mm 3 "20-Jun-2000" "MM 1.1.3" "Shared Memory Library"
  -.UC
  -.if n .hy 0
  +.\"
  +.\" For nroff, turn off justification.  Always turn off hyphenation; it
  +.\" makes way too many mistakes in technical documents.
  +.hy 0
   .if n .na
  -.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
  -.de CQ          \" put $1 in typewriter font
  -.ft CW
  -'if n "\c
  -'if t \\&\\$1\c
  -'if n \\&\\$1\c
  -'if n \&"
  -\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
  -'.ft R
  -..
  -.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
  -.	\" AM - accent mark definitions
  +.\"
  +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
  +.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
   .bd B 3
  -.	\" fudge factors for nroff and troff
  +.    \" fudge factors for nroff and troff
   .if n \{\
  -.	ds #H 0
  -.	ds #V .8m
  -.	ds #F .3m
  -.	ds #[ \f1
  -.	ds #] \fP
  +.    ds #H 0
  +.    ds #V .8m
  +.    ds #F .3m
  +.    ds #[ \f1
  +.    ds #] \fP
   .\}
   .if t \{\
  -.	ds #H ((1u-(\\\\n(.fu%2u))*.13m)
  -.	ds #V .6m
  -.	ds #F 0
  -.	ds #[ \&
  -.	ds #] \&
  +.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
  +.    ds #V .6m
  +.    ds #F 0
  +.    ds #[ \&
  +.    ds #] \&
   .\}
  -.	\" simple accents for nroff and troff
  +.    \" simple accents for nroff and troff
   .if n \{\
  -.	ds ' \&
  -.	ds ` \&
  -.	ds ^ \&
  -.	ds , \&
  -.	ds ~ ~
  -.	ds ? ?
  -.	ds ! !
  -.	ds /
  -.	ds q
  +.    ds ' \&
  +.    ds ` \&
  +.    ds ^ \&
  +.    ds , \&
  +.    ds ~ ~
  +.    ds /
   .\}
   .if t \{\
  -.	ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
  -.	ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
  -.	ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
  -.	ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
  -.	ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
  -.	ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
  -.	ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
  -.	ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
  -.	ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
  +.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
  +.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
  +.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
  +.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
  +.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
  +.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
   .\}
  -.	\" troff and (daisy-wheel) nroff accents
  +.    \" troff and (daisy-wheel) nroff accents
   .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
   .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
  -.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
  -.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
  -.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
  -.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
   .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
   .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
   .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
  @@ -162,41 +118,39 @@
   .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
   .ds ae a\h'-(\w'a'u*4/10)'e
   .ds Ae A\h'-(\w'A'u*4/10)'E
  -.ds oe o\h'-(\w'o'u*4/10)'e
  -.ds Oe O\h'-(\w'O'u*4/10)'E
  -.	\" corrections for vroff
  +.    \" corrections for vroff
   .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
   .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
  -.	\" for low resolution devices (crt and lpr)
  +.    \" for low resolution devices (crt and lpr)
   .if \n(.H>23 .if \n(.V>19 \
   \{\
  -.	ds : e
  -.	ds 8 ss
  -.	ds v \h'-1'\o'\(aa\(ga'
  -.	ds _ \h'-1'^
  -.	ds . \h'-1'.
  -.	ds 3 3
  -.	ds o a
  -.	ds d- d\h'-1'\(ga
  -.	ds D- D\h'-1'\(hy
  -.	ds th \o'bp'
  -.	ds Th \o'LP'
  -.	ds ae ae
  -.	ds Ae AE
  -.	ds oe oe
  -.	ds Oe OE
  +.    ds : e
  +.    ds 8 ss
  +.    ds o a
  +.    ds d- d\h'-1'\(ga
  +.    ds D- D\h'-1'\(hy
  +.    ds th \o'bp'
  +.    ds Th \o'LP'
  +.    ds ae ae
  +.    ds Ae AE
   .\}
   .rm #[ #] #H #V #F C
  +.\" ======================================================================
  +.\"
  +.IX Title "mm 3"
  +.TH mm 3 "01-Jul-2000" "MM 1.1.3" "Shared Memory Library"
  +.UC
   .SH "NAME"
  -\fBMM \- Shared Memory Library\fR
  +\&\fB\s-1MM\s0 \- Shared Memory Library\fR
   .SH "VERSION"
  -MM 1.1.3 (20-Jun-2000)
  +.IX Header "VERSION"
  +\&\s-1MM\s0 \s-11.1.3 (01-Jul-2000)\s0
   .SH "SYNOPSIS"
  -.PP
  +.IX Header "SYNOPSIS"
   .Vb 1
   \& #include "mm.h"
   .Ve
  -\fB Global Malloc-Replacement API\fR
  +\&\fB Global Malloc-Replacement \s-1API\s0\fR
   .PP
   .Vb 14
   \& int     \fBMM_create\fR(size_t size, const char *file);
  @@ -214,7 +168,7 @@
   \& size_t  \fBMM_available\fR(void);
   \& char   *\fBMM_error\fR(void);
   .Ve
  -\fB Standard Malloc-Style API\fR
  +\&\fB Standard Malloc-Style \s-1API\s0\fR
   .PP
   .Vb 15
   \& MM     *\fBmm_create\fR(size_t size, char *file);
  @@ -233,7 +187,7 @@
   \& char   *\fBmm_error\fR(void);
   \& void    \fBmm_display_info\fR(MM *mm);
   .Ve
  -\fB Low-level Shared Memory API\fR
  +\&\fB Low-level Shared Memory \s-1API\s0\fR
   .PP
   .Vb 9
   \& void   *\fBmm_core_create\fR(size_t size, char *file);
  @@ -246,7 +200,7 @@
   \& size_t  \fBmm_core_align2page\fR(size_t size);
   \& size_t  \fBmm_core_align2click\fR(size_t size);
   .Ve
  -\fB Internal Library API\fR
  +\&\fB Internal Library \s-1API\s0\fR
   .PP
   .Vb 3
   \& void    \fBmm_lib_error_set\fR(unsigned int, const char *str);
  @@ -254,47 +208,53 @@
   \& int     \fBmm_lib_version\fR(void);
   .Ve
   .SH "DESCRIPTION"
  -The \fBMM\fR library is a 2-layer abstraction library which simplifies the usage
  +.IX Header "DESCRIPTION"
  +The \fB\s-1MM\s0\fR library is a 2\-layer abstraction library which simplifies the usage
   of shared memory between forked (and this way strongly related) processes
   under Unix platforms. On the first (lower) layer it hides all platform
   dependent implementation details (allocation and locking) when dealing with
   shared memory segments and on the second (higher) layer it provides a
  -high-level \fImalloc\fR\|(3)\-style API for a convenient and well known way to work
  +high-level \fImalloc\fR\|(3)\-style \s-1API\s0 for a convenient and well known way to work
   with data-structures inside those shared memory segments. 
   .PP
  -The abbreviation \fBMM\fR is historically and originally comes from the phrase
  -``\fImemory mapped\fR'\*(R' as used by the POSIX.1 \fImmap\fR\|(2) function. Because this
  +The abbreviation \fB\s-1MM\s0\fR is historically and originally comes from the phrase
  +``\fImemory mapped\fR'' as used by the \s-1POSIX\s0.1 \fImmap\fR\|(2) function. Because this
   facility is internally used by this library on most platforms to establish the
   shared memory segments. 
   .Sh "\s-1LIBRARY\s0 \s-1STRUCTURE\s0"
  +.IX Subsection "LIBRARY STRUCTURE"
   This library is structured into three main APIs which are internally based on
   each other:
   .Ip "\fBGlobal Malloc-Replacement \s-1API\s0\fR" 4
  +.IX Item "Global Malloc-Replacement API"
   This is the most high-level \s-1API\s0 which directly can be used as replacement \s-1API\s0
   for the \s-1POSIX\s0.1 memory allocation \s-1API\s0 (\fImalloc\fR\|(2) and friends). This is
   useful when converting \fIheap\fR based data structures to \fIshared memory\fR
   based data structures without the need to change the code dramatically.  All
   which is needed is to prefix the \s-1POSIX\s0.1 memory allocation functions with
  -`\f(CWMM_\fR\*(R', i.e. `\f(CWmalloc\fR\*(R' becomes `\f(CWMM_malloc\fR\*(R', `\f(CWstrdup\fR\*(R' becomes
  -`\f(CWMM_strdup\fR\*(R', etc. This \s-1API\s0 internally uses just a global `\f(CWMM *\fR\*(R' pool for
  -calling the corresponding functions (those with prefix `\f(CWmm_\fR') of the
  -\fIStandard Malloc-Style \s-1API\s0\fR.
  +`\f(CW\*(C`MM_\*(C'\fR', i.e. `\f(CW\*(C`malloc\*(C'\fR' becomes `\f(CW\*(C`MM_malloc\*(C'\fR', `\f(CW\*(C`strdup\*(C'\fR' becomes
  +`\f(CW\*(C`MM_strdup\*(C'\fR', etc. This \s-1API\s0 internally uses just a global `\f(CW\*(C`MM *\*(C'\fR' pool for
  +calling the corresponding functions (those with prefix `\f(CW\*(C`mm_\*(C'\fR') of the
  +\&\fIStandard Malloc-Style \s-1API\s0\fR.
   .Ip "\fBStandard Malloc-Style \s-1API\s0\fR" 4
  +.IX Item "Standard Malloc-Style API"
   This is the standard high-level memory allocation \s-1API\s0. Its interface is
  -similar to the \fIGlobal Malloc-Replacement \s-1API\s0\fR but it uses an explicit `\f(CWMM *\fR\*(R'
  +similar to the \fIGlobal Malloc-Replacement \s-1API\s0\fR but it uses an explicit `\f(CW\*(C`MM *\*(C'\fR'
   pool to operate on. That is why every function of this \s-1API\s0 has an argument of
  -type `\f(CWMM *\fR\*(R' as its first argument. This \s-1API\s0 provides a comfortable way to
  +type `\f(CW\*(C`MM *\*(C'\fR' as its first argument. This \s-1API\s0 provides a comfortable way to
   work with small dynamically allocated shared memory chunks inside large
   statically allocated shared memory segments. It is internally based on the
  -\fILow-Level Shared Memory \s-1API\s0\fR for creating the underlaying shared memory
  +\&\fILow-Level Shared Memory \s-1API\s0\fR for creating the underlaying shared memory
   segment.
   .Ip "\fBLow-Level Shared Memory \s-1API\s0\fR" 4
  +.IX Item "Low-Level Shared Memory API"
   This is the basis of the whole \fB\s-1MM\s0\fR library. It provides low-level functions
   for creating shared memory segments with mutual exclusion (in short \fImutex\fR)
   capabilities in a portable way. Internally the shared memory and mutex
   facility is implemented in various platform-dependent ways. A list of
   implementation variants follows under the next topic.
   .Sh "\s-1SHARED\s0 \s-1MEMORY\s0 \s-1IMPLEMENTATION\s0"
  +.IX Subsection "SHARED MEMORY IMPLEMENTATION"
   Internally the shared memory facility is implemented in various
   platform-dependent ways. Each way has its own advantages and disadvantages
   (in addition to the fact that some variants aren't available at all on some
  @@ -303,48 +263,59 @@
   background reasons with their advantages and disadvantages and in an ascending
   order, i.e. the \fB\s-1MM\s0\fR configuration mechanism chooses the last available one
   in the list as the preferred variant.
  -.Ip "Classical mmap(2) on temporary file (\s-1MMFILE\s0)" 4
  -\fIAdvantage:\fR maximum portable.
  -\fIDisadvantage:\fR needs a temporary file on the filesystem.
  -.Ip "mmap(2) via \s-1POSIX\s0.1 shm_open(3) on temporary file (\s-1MMPOSX\s0)" 4
  -\fIAdvantage:\fR standardized by \s-1POSIX\s0.1 and theoretically portable.
  -\fIDisadvantage:\fR needs a temporary file on the filesystem and is
  +.Ip "Classical \fImmap\fR\|(2) on temporary file (\s-1MMFILE\s0)" 4
  +.IX Item "Classical mmap on temporary file (MMFILE)"
  +\&\fIAdvantage:\fR maximum portable.
  +\&\fIDisadvantage:\fR needs a temporary file on the filesystem.
  +.Ip "\fImmap\fR\|(2) via \s-1POSIX\s0.1 \fIshm_open\fR\|(3) on temporary file (\s-1MMPOSX\s0)" 4
  +.IX Item "mmap via POSIX.1 shm_open on temporary file (MMPOSX)"
  +\&\fIAdvantage:\fR standardized by \s-1POSIX\s0.1 and theoretically portable.
  +\&\fIDisadvantage:\fR needs a temporary file on the filesystem and is
   is usually not available on existing Unix platform.
  -.Ip "\s-1SVR4-\s0style mmap(2) on \f(CW/dev/zero\fR device (\s-1MMZERO\s0)" 4
  -\fIAdvantage:\fR widely available and mostly portable on \s-1SVR4\s0 platforms.
  -\fIDisadvantage:\fR needs the \f(CW/dev/zero\fR device and a \fImmap\fR\|(2)
  +.Ip "SVR4\-style \fImmap\fR\|(2) on \f(CW\*(C`/dev/zero\*(C'\fR device (\s-1MMZERO\s0)" 4
  +.IX Item "SVR4-style mmap on /dev/zero device (MMZERO)"
  +\&\fIAdvantage:\fR widely available and mostly portable on \s-1SVR4\s0 platforms.
  +\&\fIDisadvantage:\fR needs the \f(CW\*(C`/dev/zero\*(C'\fR device and a \fImmap\fR\|(2)
   which supports memory mapping through this device.
  -.Ip "SysV \s-1IPC\s0 shmget(2) (\s-1IPCSHM\s0)" 4
  -\fIAdvantage:\fR does not need a temporary file or external device.
  -\fIDisadvantage:\fR although available on mostly all modern Unix platforms, it has
  +.Ip "SysV \s-1IPC\s0 \fIshmget\fR\|(2) (\s-1IPCSHM\s0)" 4
  +.IX Item "SysV IPC shmget (IPCSHM)"
  +\&\fIAdvantage:\fR does not need a temporary file or external device.
  +\&\fIDisadvantage:\fR although available on mostly all modern Unix platforms, it has
   strong restrictions like the maximum size of a single shared memory segment (can
   be as small as 100KB, but depends on the platform).
  -.Ip "4.4BSD\-style mmap(2) via \f(CWMAP_ANON\fR facility (\s-1MMANON\s0)" 4
  -\fIAdvantage:\fR does not need a temporary file or external device.
  -\fIDisadvantage:\fR usually only available on \s-1BSD\s0 platforms and derivatives.
  +.Ip "4.4BSD-style \fImmap\fR\|(2) via \f(CW\*(C`MAP_ANON\*(C'\fR facility (\s-1MMANON\s0)" 4
  +.IX Item "4.4BSD-style mmap via MAP_ANON facility (MMANON)"
  +\&\fIAdvantage:\fR does not need a temporary file or external device.
  +\&\fIDisadvantage:\fR usually only available on \s-1BSD\s0 platforms and derivatives.
   .Sh "\s-1LOCKING\s0 \s-1IMPLEMENTATION\s0"
  +.IX Subsection "LOCKING IMPLEMENTATION"
   As for the shared memory facility, internally the locking facility is
   implemented in various platform-dependent ways. They are again listed
   in ascending order, i.e. the \fB\s-1MM\s0\fR configuration mechanism chooses the
   last available one in the list as the preferred variant. The list of
   implemented variants is:
  -.Ip "4.2BSD\-style flock(2) on temporary file (\s-1FLOCK\s0)" 4
  -\fIAdvantage:\fR exists on a lot of platforms, especially on older Unix
  +.Ip "4.2BSD-style \fIflock\fR\|(2) on temporary file (\s-1FLOCK\s0)" 4
  +.IX Item "4.2BSD-style flock on temporary file (FLOCK)"
  +\&\fIAdvantage:\fR exists on a lot of platforms, especially on older Unix
   derivates.  \fIDisadvantage:\fR needs a temporary file on the filesystem and has
   to re-open file-descriptors to it in \fIeach\fR\|(!) \fIfork\fR\|(2)'ed child process.
  -.Ip "SysV \s-1IPC\s0 semget(2) (\s-1IPCSEM\s0)" 4
  -\fIAdvantage:\fR exists on a lot of platforms and does not need a temporary file.
  -\fIDisadvantage:\fR an unmeant termination of the application leads to a
  -semaphore leak because the facility does not allow a ``remove in advance'\*(R'
  +.Ip "SysV \s-1IPC\s0 \fIsemget\fR\|(2) (\s-1IPCSEM\s0)" 4
  +.IX Item "SysV IPC semget (IPCSEM)"
  +\&\fIAdvantage:\fR exists on a lot of platforms and does not need a temporary file.
  +\&\fIDisadvantage:\fR an unmeant termination of the application leads to a
  +semaphore leak because the facility does not allow a ``remove in advance''
   trick (as the \s-1IPC\s0 shared memory facility does) for safe cleanups.
  -.Ip "\s-1SVR4-\s0style fcntl(2) on temporary file (\s-1FCNTL\s0)" 4
  -\fIAdvantage:\fR exists on a lot of platforms and is also the most powerful
  +.Ip "SVR4\-style \fIfcntl\fR\|(2) on temporary file (\s-1FCNTL\s0)" 4
  +.IX Item "SVR4-style fcntl on temporary file (FCNTL)"
  +\&\fIAdvantage:\fR exists on a lot of platforms and is also the most powerful
   variant (although not always the fastest one). \fIDisadvantage:\fR needs a
   temporary file.
   .Sh "\s-1MEMORY\s0 \s-1ALLOCATION\s0 \s-1STRATEGY\s0"
  +.IX Subsection "MEMORY ALLOCATION STRATEGY"
   The memory allocation strategy the \fIStandard Malloc-Style \s-1API\s0\fR functions use
   internally is the following:
   .Ip "\fBAllocation\fR" 4
  +.IX Item "Allocation"
   If a chunk of memory has to be allocated, the internal list of free chunks
   is searched for a minimal-size chunk which is larger or equal than the size of
   the to be allocated chunk (a \fIbest fit\fR strategy). 
  @@ -359,6 +330,7 @@
   created from the spare area of the shared memory segment until the segment is
   full (in which case an \fIout of memory\fR error occurs).
   .Ip "\fBDeallocation\fR" 4
  +.IX Item "Deallocation"
   If a chunk of memory has to be deallocated, it is inserted in sorted manner
   into the internal list of free chunks. The insertion operation automatically
   merges the chunk with a previous and/or a next free chunk if possible, i.e.
  @@ -378,175 +350,217 @@
   segments are usually a lot smaller than heaps and the fact that we always
   defragment by merging the free chunks if possible).
   .SH "API FUNCTIONS"
  -In the following, all API functions are described in detail The order   .
  -directly follows the one in the \fBSYNOPSIS\fR section above              .
  +.IX Header "API FUNCTIONS"
  +In the following, all \s-1API\s0 functions are described in detail The order   .
  +directly follows the one in the \fB\s-1SYNOPSIS\s0\fR section above              .
   .Sh "Global Malloc-Replacement \s-1API\s0"
  +.IX Subsection "Global Malloc-Replacement API"
   .Ip "int \fBMM_create\fR(size_t \fIsize\fR, const char *\fIfile\fR);" 4
  +.IX Item "int MM_create(size_t size, const char *file);"
   This initializes the global shared memory pool with \fIsize\fR and \fIfile\fR and
   has to be called \fIbefore\fR any \fIfork\fR\|(2) operations are performed by the
   application.
   .Ip "int \fBMM_permission\fR(mode_t \fImode\fR, uid_t \fIowner\fR, gid_t \fIgroup\fR);" 4
  +.IX Item "int MM_permission(mode_t mode, uid_t owner, gid_t group);"
   This sets the filesystem \fImode\fR, \fIowner\fR and \fIgroup\fR for the global shared
   memory pool (has effects only if the underlaying shared memory segment
   implementation is actually based on external auxiliary files).  The arguments
   are directly passed through to \fIchmod\fR\|(2) and \fIchown\fR\|(2).
   .Ip "void \fBMM_destroy\fR(void);" 4
  +.IX Item "void MM_destroy(void);"
   This destroys the global shared memory pool and should be called \fIafter\fR all
   child processes were killed.
   .Ip "int \fBMM_lock\fR(mm_lock_mode \fImode\fR);" 4
  +.IX Item "int MM_lock(mm_lock_mode mode);"
   This locks the global shared memory pool for the current process in order to
  -perform either shared/read-only (\fImode\fR is \f(CWMM_LOCK_RD\fR) or
  -exclusive/read-write (\fImode\fR is \f(CWMM_LOCK_RW\fR) critical operations inside the
  +perform either shared/read-only (\fImode\fR is \f(CW\*(C`MM_LOCK_RD\*(C'\fR) or
  +exclusive/read-write (\fImode\fR is \f(CW\*(C`MM_LOCK_RW\*(C'\fR) critical operations inside the
   global shared memory pool.
   .Ip "int \fBMM_unlock\fR(void);" 4
  +.IX Item "int MM_unlock(void);"
   This unlocks the global shared memory pool for the current process after the
   critical operations were performed inside the global shared memory pool.
   .Ip "void *\fBMM_malloc\fR(size_t \fIsize\fR);" 4
  +.IX Item "void *MM_malloc(size_t size);"
   Identical to the \s-1POSIX\s0.1 \fImalloc\fR\|(3) function but instead of allocating
   memory from the \fIheap\fR it allocates it from the global shared memory pool.
   .Ip "void \fBMM_free\fR(void *\fIptr\fR);" 4
  +.IX Item "void MM_free(void *ptr);"
   Identical to the \s-1POSIX\s0.1 \fIfree\fR\|(3) function but instead of deallocating
   memory in the \fIheap\fR it deallocates it in the global shared memory pool.
   .Ip "void *\fBMM_realloc\fR(void *\fIptr\fR, size_t \fIsize\fR);" 4
  +.IX Item "void *MM_realloc(void *ptr, size_t size);"
   Identical to the \s-1POSIX\s0.1 \fIrealloc\fR\|(3) function but instead of reallocating
   memory in the \fIheap\fR it reallocates it inside the global shared memory pool.
   .Ip "void *\fBMM_calloc\fR(size_t \fInumber\fR, size_t \fIsize\fR);" 4
  +.IX Item "void *MM_calloc(size_t number, size_t size);"
   Identical to the \s-1POSIX\s0.1 \fIcalloc\fR\|(3) function but instead of allocating and
   initializing memory from the \fIheap\fR it allocates and initializes it from the
   global shared memory pool.
   .Ip "char *\fBMM_strdup\fR(const char *\fIstr\fR);" 4
  +.IX Item "char *MM_strdup(const char *str);"
   Identical to the \s-1POSIX\s0.1 \fIstrdup\fR\|(3) function but instead of creating the
   string copy in the \fIheap\fR it creates it in the global shared memory pool.
   .Ip "size_t \fBMM_sizeof\fR(const void *\fIptr\fR);" 4
  +.IX Item "size_t MM_sizeof(const void *ptr);"
   This function returns the size in bytes of the chunk starting at \fIptr\fR when
  -\fIptr\fR was previously allocated with \fIMM_malloc\fR\|(3). The result is undefined
  +\&\fIptr\fR was previously allocated with \fIMM_malloc\fR\|(3). The result is undefined
   if \fIptr\fR was not previously allocated with \fIMM_malloc\fR\|(3).
   .Ip "size_t \fBMM_maxsize\fR(void);" 4
  +.IX Item "size_t MM_maxsize(void);"
   This function returns the maximum size which is allowed
   as the first argument to the \fIMM_create\fR\|(3) function.
   .Ip "size_t \fBMM_available\fR(void);" 4
  +.IX Item "size_t MM_available(void);"
   Returns the amount in bytes of still available (free) memory in the global
   shared memory pool.
   .Ip "char *\fBMM_error\fR(void);" 4
  +.IX Item "char *MM_error(void);"
   Returns the last error message which occurred inside the \fB\s-1MM\s0\fR library.
   .Sh "Standard Malloc-Style \s-1API\s0"
  +.IX Subsection "Standard Malloc-Style API"
   .Ip "\s-1MM\s0 *\fBmm_create\fR(size_t \fIsize\fR, const char *\fIfile\fR);" 4
  +.IX Item "MM *mm_create(size_t size, const char *file);"
   This creates a shared memory pool which has space for approximately a total of
  -\fIsize\fR bytes with the help of \fIfile\fR. Here \fIfile\fR is a filesystem path to a
  +\&\fIsize\fR bytes with the help of \fIfile\fR. Here \fIfile\fR is a filesystem path to a
   file which need not to exist (and perhaps is never created because this
   depends on the platform and chosen shared memory and mutex implementation).
  -The return value is a pointer to a \f(CWMM\fR structure which should be treated as
  +The return value is a pointer to a \f(CW\*(C`MM\*(C'\fR structure which should be treated as
   opaque by the application. It describes the internals of the created shared
  -memory pool. In case of an error \f(CWNULL\fR is returned.  A \fIsize\fR of 0 means to
  +memory pool. In case of an error \f(CW\*(C`NULL\*(C'\fR is returned.  A \fIsize\fR of 0 means to
   allocate the maximum allowed size which is platform dependent and is between a
   few \s-1KB\s0 and the soft limit of 64MB.
   .Ip "int \fBmm_permission\fR(\s-1MM\s0 *\fImm\fR, mode_t \fImode\fR, uid_t \fIowner\fR, gid_t \fIgroup\fR);" 4
  +.IX Item "int mm_permission(MM *mm, mode_t mode, uid_t owner, gid_t group);"
   This sets the filesystem \fImode\fR, \fIowner\fR and \fIgroup\fR for the shared memory
   pool \fImm\fR (has effects only when the underlaying shared memory segment
   implementation is actually based on external auxiliary files).  The arguments
   are directly passed through to \fIchmod\fR\|(2) and \fIchown\fR\|(2).
   .Ip "void \fBmm_destroy\fR(\s-1MM\s0 *\fImm\fR);" 4
  +.IX Item "void mm_destroy(MM *mm);"
   This destroys the complete shared memory pool \fImm\fR and with it all chunks
   which were allocated in this pool. Additionally any created files on the
   filesystem corresponding the to shared memory pool are unlinked.
   .Ip "int \fBmm_lock\fR(\s-1MM\s0 *\fImm\fR, mm_lock_mode \fImode\fR);" 4
  +.IX Item "int mm_lock(MM *mm, mm_lock_mode mode);"
   This locks the shared memory pool \fImm\fR for the current process in order to
  -perform either shared/read-only (\fImode\fR is \f(CWMM_LOCK_RD\fR) or
  -exclusive/read-write (\fImode\fR is \f(CWMM_LOCK_RW\fR) critical operations inside the
  +perform either shared/read-only (\fImode\fR is \f(CW\*(C`MM_LOCK_RD\*(C'\fR) or
  +exclusive/read-write (\fImode\fR is \f(CW\*(C`MM_LOCK_RW\*(C'\fR) critical operations inside the
   global shared memory pool.
   .Ip "int \fBmm_unlock\fR(\s-1MM\s0 *\fImm\fR);" 4
  +.IX Item "int mm_unlock(MM *mm);"
   This unlocks the shared memory pool \fImm\fR for the current process after
   critical operations were performed inside the global shared memory pool.
   .Ip "void *\fBmm_malloc\fR(\s-1MM\s0 *\fImm\fR, size_t \fIsize\fR);" 4
  +.IX Item "void *mm_malloc(MM *mm, size_t size);"
   This function allocates \fIsize\fR bytes from the shared memory pool \fImm\fR and
  -returns either a (virtual memory word aligned) pointer to it or \f(CWNULL\fR in
  +returns either a (virtual memory word aligned) pointer to it or \f(CW\*(C`NULL\*(C'\fR in
   case of an error (out of memory). It behaves like the \s-1POSIX\s0.1 \fImalloc\fR\|(3)
   function but instead of allocating memory from the \fIheap\fR it allocates it
   from the shared memory segment underlaying \fImm\fR.
   .Ip "void \fBmm_free\fR(\s-1MM\s0 *\fImm\fR, void *\fIptr\fR);" 4
  +.IX Item "void mm_free(MM *mm, void *ptr);"
   This deallocates the chunk starting at \fIptr\fR in the shared memory pool \fImm\fR.
   It behaves like the \s-1POSIX\s0.1 \fIfree\fR\|(3) function but instead of deallocating
   memory from the \fIheap\fR it deallocates it from the shared memory segment
   underlaying \fImm\fR.
   .Ip "void *\fBmm_realloc\fR(\s-1MM\s0 *\fImm\fR, void *\fIptr\fR, size_t \fIsize\fR);" 4
  +.IX Item "void *mm_realloc(MM *mm, void *ptr, size_t size);"
   This function reallocates the chunk starting at \fIptr\fR inside the shared
   memory pool \fImm\fR with the new size of \fIsize\fR bytes.  It behaves like the
  -\s-1POSIX\s0.1 \fIrealloc\fR\|(3) function but instead of reallocating memory in the
  -\fIheap\fR it reallocates it in the shared memory segment underlaying \fImm\fR.
  +\&\s-1POSIX\s0.1 \fIrealloc\fR\|(3) function but instead of reallocating memory in the
  +\&\fIheap\fR it reallocates it in the shared memory segment underlaying \fImm\fR.
   .Ip "void *\fBmm_calloc\fR(\s-1MM\s0 *\fImm\fR, size_t \fInumber\fR, size_t \fIsize\fR);" 4
  +.IX Item "void *mm_calloc(MM *mm, size_t number, size_t size);"
   This is similar to \fImm_malloc\fR\|(3), but additionally clears the chunk. It behaves
   like the \s-1POSIX\s0.1 \fIcalloc\fR\|(3) function.  It allocates space for \fInumber\fR
   objects, each \fIsize\fR bytes in length from the shared memory pool \fImm\fR.  The
   result is identical to calling \fImm_malloc\fR\|(3) with an argument of ``\fInumber\fR *
  -\fIsize\fR'\*(R', with the exception that the allocated memory is initialized to nul
  +\&\fIsize\fR'', with the exception that the allocated memory is initialized to nul
   bytes.
   .Ip "char *\fBmm_strdup\fR(\s-1MM\s0 *\fImm\fR, const char *\fIstr\fR);" 4
  +.IX Item "char *mm_strdup(MM *mm, const char *str);"
   This function behaves like the \s-1POSIX\s0.1 \fIstrdup\fR\|(3) function.  It allocates
   sufficient memory inside the shared memory pool \fImm\fR for a copy of the string
  -\fIstr\fR, does the copy, and returns a pointer to it.  The pointer may
  +\&\fIstr\fR, does the copy, and returns a pointer to it.  The pointer may
   subsequently be used as an argument to the function \fImm_free\fR\|(3). If
  -insufficient shared memory is available, \f(CWNULL\fR is returned.
  +insufficient shared memory is available, \f(CW\*(C`NULL\*(C'\fR is returned.
   .Ip "size_t \fBmm_sizeof\fR(const void *\fIptr\fR);" 4
  +.IX Item "size_t mm_sizeof(const void *ptr);"
   This function returns the size in bytes of the chunk starting at \fIptr\fR when
  -\fIptr\fR was previously allocated with \fImm_malloc\fR\|(3). The result is undefined
  +\&\fIptr\fR was previously allocated with \fImm_malloc\fR\|(3). The result is undefined
   when \fIptr\fR was not previously allocated with \fImm_malloc\fR\|(3).
   .Ip "size_t \fBmm_maxsize\fR(void);" 4
  +.IX Item "size_t mm_maxsize(void);"
   This function returns the maximum size which is allowed as the first argument
   to the \fImm_create\fR\|(3) function.
   .Ip "size_t \fBmm_available\fR(\s-1MM\s0 *\fImm\fR);" 4
  +.IX Item "size_t mm_available(MM *mm);"
   Returns the amount in bytes of still available (free) memory in the 
   shared memory pool \fImm\fR.
   .Ip "char *\fBmm_error\fR(void);" 4
  +.IX Item "char *mm_error(void);"
   Returns the last error message which occurred inside the \fB\s-1MM\s0\fR library.
   .Ip "void \fBmm_display_info\fR(\s-1MM\s0 *\fImm\fR);" 4
  +.IX Item "void mm_display_info(MM *mm);"
   This is debugging function which displays a summary page for the shared memory
   pool \fImm\fR describing various internal sizes and counters.
   .Sh "Low-Level Shared Memory \s-1API\s0"
  +.IX Subsection "Low-Level Shared Memory API"
   .Ip "void *\fBmm_core_create\fR(size_t \fIsize\fR, const char *\fIfile\fR);" 4
  +.IX Item "void *mm_core_create(size_t size, const char *file);"
   This creates a shared memory area which is at least \fIsize\fR bytes in size with
   the help of \fIfile\fR. The value \fIsize\fR has to be greater than 0 and less or
   equal the value returned by \fImm_core_maxsegsize\fR\|(3). Here \fIfile\fR is a
   filesystem path to a file which need not to exist (and perhaps is never
   created because this depends on the platform and chosen shared memory and
   mutex implementation).  The return value is either a (virtual memory word
  -aligned) pointer to the shared memory segment or \f(CWNULL\fR in case of an error.
  +aligned) pointer to the shared memory segment or \f(CW\*(C`NULL\*(C'\fR in case of an error.
   The application is guaranteed to be able to access the shared memory segment
   from byte 0 to byte \fIsize\fR\-1 starting at the returned address.
   .Ip "int \fBmm_core_permission\fR(void *\fIcore\fR, mode_t \fImode\fR, uid_t \fIowner\fR, gid_t \fIgroup\fR);" 4
  +.IX Item "int mm_core_permission(void *core, mode_t mode, uid_t owner, gid_t group);"
   This sets the filesystem \fImode\fR, \fIowner\fR and \fIgroup\fR for the shared memory
   segment \fIcode\fR (has effects only when the underlaying shared memory segment
   implementation is actually based on external auxiliary files).  The arguments
   are directly passed through to \fIchmod\fR\|(2) and \fIchown\fR\|(2).
   .Ip "void \fBmm_core_delete\fR(void *\fIcore\fR);" 4
  +.IX Item "void mm_core_delete(void *core);"
   This deletes a shared memory segment \fIcore\fR (as previously returned by a
  -\fImm_core_create\fR\|(3) call). After this operation, accessing the segment starting
  +\&\fImm_core_create\fR\|(3) call). After this operation, accessing the segment starting
   at \fIcore\fR is no longer allowed and will usually lead to a segmentation fault.
   .Ip "int \fBmm_core_lock\fR(const void *\fIcore\fR, mm_lock_mode \fImode\fR);" 4
  +.IX Item "int mm_core_lock(const void *core, mm_lock_mode mode);"
   This function acquires an advisory lock for the current process on the shared
  -memory segment \fIcore\fR for either shared/read-only (\fImode\fR is \f(CWMM_LOCK_RD\fR)
  -or exclusive/read-write (\fImode\fR is \f(CWMM_LOCK_RW\fR) critical operations between
  -\fIfork\fR\|(2)'ed child processes.
  +memory segment \fIcore\fR for either shared/read-only (\fImode\fR is \f(CW\*(C`MM_LOCK_RD\*(C'\fR)
  +or exclusive/read-write (\fImode\fR is \f(CW\*(C`MM_LOCK_RW\*(C'\fR) critical operations between
  +\&\fIfork\fR\|(2)'ed child processes.
   .Ip "int \fBmm_core_unlock\fR(const void *\fIcore\fR);" 4
  +.IX Item "int mm_core_unlock(const void *core);"
   This function releases a previously acquired advisory lock for the current
   process on the shared memory segment \fIcore\fR.
   .Ip "size_t \fBmm_core_size\fR(const void *\fIcore\fR);" 4
  +.IX Item "size_t mm_core_size(const void *core);"
   This returns the size in bytes of \fIcore\fR. This size is exactly the size which
   was used for creating the shared memory area via \fImm_core_create\fR\|(3). The
   function is provided just for convenience reasons to not require the
   application to remember the memory size behind \fIcore\fR itself. 
   .Ip "size_t \fBmm_core_maxsegsize\fR(void);" 4
  +.IX Item "size_t mm_core_maxsegsize(void);"
   This returns the number of bytes of a maximum-size shared memory segment which
   is allowed to allocate via the \s-1MM\s0 library. It is between a few \s-1KB\s0 and the soft
   limit of 64MB.
   .Ip "size_t \fBmm_core_align2page\fR(size_t \fIsize\fR);" 4
  +.IX Item "size_t mm_core_align2page(size_t size);"
   This is just a utility function which can be used to align the number \fIsize\fR
   to the next virtual memory \fIpage\fR boundary used by the underlaying platform.
   The memory page boundary under Unix platforms is usually somewhere between
   2048 and 16384 bytes. You do not have to align the \fIsize\fR arguments of other
  -\fB\s-1MM\s0\fR library functions yourself, because this is already done internally.
  +\&\fB\s-1MM\s0\fR library functions yourself, because this is already done internally.
   This function is exported by the \fB\s-1MM\s0\fR library just for convenience reasons in
   case an application wants to perform similar calculations for other purposes.
   .Ip "size_t \fBmm_core_align2word\fR(size_t \fIsize\fR);" 4
  +.IX Item "size_t mm_core_align2word(size_t size);"
   This is another utility function which can be used to align the number \fIsize\fR
   to the next virtual memory \fIword\fR boundary used by the underlaying platform.
   The memory word boundary under Unix platforms is usually somewhere between 4
  @@ -555,204 +569,63 @@
   function is exported by the \fB\s-1MM\s0\fR library just for convenience reasons in case
   an application wants to perform simular calculations for other purposes.
   .Sh "Low-Level Shared Memory \s-1API\s0"
  +.IX Subsection "Low-Level Shared Memory API"
   .Ip "void \fBmm_lib_error_set\fR(unsigned int, const char *str);" 4
  +.IX Item "void mm_lib_error_set(unsigned int, const char *str);"
   This is a function which is used internally by the various \s-1MM\s0 function to set
   an error string. It's usually not called directly from applications.
   .Ip "char *\fBmm_lib_error_get\fR(void);" 4
  +.IX Item "char *mm_lib_error_get(void);"
   This is a function which is used internally by \fIMM_error\fR\|(3) and \fImm_error\fR\|(3)
   functions to get the current error string. It is usually not called directly
   from applications.
   .Ip "int \fBmm_lib_version\fR(void);" 4
  -This function returns a hex-value ``0x\fIV\fR\fI\s-1RR\s0\fR\fIT\fR\fI\s-1LL\s0\fR'\*(R' which describes the
  +.IX Item "int mm_lib_version(void);"
  +This function returns a hex-value ``0x\fIV\fR\fI\s-1RR\s0\fR\fIT\fR\fI\s-1LL\s0\fR'' which describes the
   current \fB\s-1MM\s0\fR library version. \fIV\fR is the version, \fI\s-1RR\s0\fR the revisions, \fI\s-1LL\s0\fR
   the level and \fIT\fR the type of the level (alphalevel=0, betalevel=1,
   patchlevel=2, etc). For instance \fB\s-1MM\s0\fR version 1.0.4 is encoded as 0x100204.
   The reason for this unusual mapping is that this way the version number is
   steadily \fIincreasing\fR.
   .SH "RESTRICTIONS"
  +.IX Header "RESTRICTIONS"
   The maximum size of a continuous shared memory segment one can allocate
   depends on the underlaying platform. This cannot be changed, of course.  But
  -currently the high-level \fImalloc\fR\|(3)\-style API just uses a single shared memory
  -segment as the underlaying data structure for an \f(CWMM\fR object which means that
  -the maximum amount of memory an \f(CWMM\fR object represents also depends on the
  +currently the high-level \fImalloc\fR\|(3)\-style \s-1API\s0 just uses a single shared memory
  +segment as the underlaying data structure for an \f(CW\*(C`MM\*(C'\fR object which means that
  +the maximum amount of memory an \f(CW\*(C`MM\*(C'\fR object represents also depends on the
   platform. 
   .PP
   This could be changed in later versions by allowing at least the
  -high-level \fImalloc\fR\|(3)\-style API to internally use multiple shared memory
  -segments to form the \f(CWMM\fR object. This way \f(CWMM\fR objects could have
  +high-level \fImalloc\fR\|(3)\-style \s-1API\s0 to internally use multiple shared memory
  +segments to form the \f(CW\*(C`MM\*(C'\fR object. This way \f(CW\*(C`MM\*(C'\fR objects could have
   arbitrary sizes, although the maximum size of an allocatable continous
   chunk still is bounded by the maximum size of a shared memory segment.
   .SH "SEE ALSO"
  -mm-\fIconfig\fR\|(1).
  +.IX Header "SEE ALSO"
  +\&\fImm-config\fR\|(1).
   .PP
  -\fImalloc\fR\|(3), \fIcalloc\fR\|(3), \fIrealloc\fR\|(3), \fIstrdup\fR\|(3), \fIfree\fR\|(3), \fImmap\fR\|(2), \fIshmget\fR\|(2),
  -\fIshmctl\fR\|(2), \fIflock\fR\|(2), \fIfcntl\fR\|(2), \fIsemget\fR\|(2), \fIsemctl\fR\|(2), \fIsemop\fR\|(2).
  +\&\fImalloc\fR\|(3), \fIcalloc\fR\|(3), \fIrealloc\fR\|(3), \fIstrdup\fR\|(3), \fIfree\fR\|(3), \fImmap\fR\|(2), \fIshmget\fR\|(2),
  +\&\fIshmctl\fR\|(2), \fIflock\fR\|(2), \fIfcntl\fR\|(2), \fIsemget\fR\|(2), \fIsemctl\fR\|(2), \fIsemop\fR\|(2).
   .SH "HOME"
  +.IX Header "HOME"
   http://www.engelschall.com/sw/mm/
   
   .SH "HISTORY"
  +.IX Header "HISTORY"
   This library was originally written in January 1999 by \fIRalf S.
  -Engelschall\fR <rse@engelschall.com> for use in the \fBExtended API\fR (EAPI)
  -of the \fBApache\fR HTTP server project (see http://www.apache.org/), which
  +Engelschall\fR <rse@engelschall.com> for use in the \fBExtended \s-1API\s0\fR (\s-1EAPI\s0)
  +of the \fBApache\fR \s-1HTTP\s0 server project (see http://www.apache.org/), which
   was originally invented for \fBmod_ssl\fR (see http://www.modssl.org/).
   .PP
  -Its base idea (a malloc-style API for handling shared memory) was originally
  +Its base idea (a malloc-style \s-1API\s0 for handling shared memory) was originally
   derived from the non-publically available \fImm_malloc\fR library written in
   October 1997 by \fICharles Randall\fR <crandall@matchlogic.com> for MatchLogic,
   Inc.
   .SH "AUTHOR"
  -.PP
  +.IX Header "AUTHOR"
   .Vb 3
   \& Ralf S. Engelschall
   \& rse@engelschall.com
   \& www.engelschall.com
   .Ve
  -
  -.rn }` ''
  -.IX Title "mm 3"
  -.IX Name "B<MM - Shared Memory Library>"
  -
  -.IX Header "NAME"
  -
  -.IX Header "VERSION"
  -
  -.IX Header "SYNOPSIS"
  -
  -.IX Header "DESCRIPTION"
  -
  -.IX Subsection "\s-1LIBRARY\s0 \s-1STRUCTURE\s0"
  -
  -.IX Item "\fBGlobal Malloc-Replacement \s-1API\s0\fR"
  -
  -.IX Item "\fBStandard Malloc-Style \s-1API\s0\fR"
  -
  -.IX Item "\fBLow-Level Shared Memory \s-1API\s0\fR"
  -
  -.IX Subsection "\s-1SHARED\s0 \s-1MEMORY\s0 \s-1IMPLEMENTATION\s0"
  -
  -.IX Item "Classical mmap(2) on temporary file (\s-1MMFILE\s0)"
  -
  -.IX Item "mmap(2) via \s-1POSIX\s0.1 shm_open(3) on temporary file (\s-1MMPOSX\s0)"
  -
  -.IX Item "\s-1SVR4-\s0style mmap(2) on \f(CW/dev/zero\fR device (\s-1MMZERO\s0)"
  -
  -.IX Item "SysV \s-1IPC\s0 shmget(2) (\s-1IPCSHM\s0)"
  -
  -.IX Item "4.4BSD\-style mmap(2) via \f(CWMAP_ANON\fR facility (\s-1MMANON\s0)"
  -
  -.IX Subsection "\s-1LOCKING\s0 \s-1IMPLEMENTATION\s0"
  -
  -.IX Item "4.2BSD\-style flock(2) on temporary file (\s-1FLOCK\s0)"
  -
  -.IX Item "SysV \s-1IPC\s0 semget(2) (\s-1IPCSEM\s0)"
  -
  -.IX Item "\s-1SVR4-\s0style fcntl(2) on temporary file (\s-1FCNTL\s0)"
  -
  -.IX Subsection "\s-1MEMORY\s0 \s-1ALLOCATION\s0 \s-1STRATEGY\s0"
  -
  -.IX Item "\fBAllocation\fR"
  -
  -.IX Item "\fBDeallocation\fR"
  -
  -.IX Header "API FUNCTIONS"
  -
  -.IX Subsection "Global Malloc-Replacement \s-1API\s0"
  -
  -.IX Item "int \fBMM_create\fR(size_t \fIsize\fR, const char *\fIfile\fR);"
  -
  -.IX Item "int \fBMM_permission\fR(mode_t \fImode\fR, uid_t \fIowner\fR, gid_t \fIgroup\fR);"
  -
  -.IX Item "void \fBMM_destroy\fR(void);"
  -
  -.IX Item "int \fBMM_lock\fR(mm_lock_mode \fImode\fR);"
  -
  -.IX Item "int \fBMM_unlock\fR(void);"
  -
  -.IX Item "void *\fBMM_malloc\fR(size_t \fIsize\fR);"
  -
  -.IX Item "void \fBMM_free\fR(void *\fIptr\fR);"
  -
  -.IX Item "void *\fBMM_realloc\fR(void *\fIptr\fR, size_t \fIsize\fR);"
  -
  -.IX Item "void *\fBMM_calloc\fR(size_t \fInumber\fR, size_t \fIsize\fR);"
  -
  -.IX Item "char *\fBMM_strdup\fR(const char *\fIstr\fR);"
  -
  -.IX Item "size_t \fBMM_sizeof\fR(const void *\fIptr\fR);"
  -
  -.IX Item "size_t \fBMM_maxsize\fR(void);"
  -
  -.IX Item "size_t \fBMM_available\fR(void);"
  -
  -.IX Item "char *\fBMM_error\fR(void);"
  -
  -.IX Subsection "Standard Malloc-Style \s-1API\s0"
  -
  -.IX Item "\s-1MM\s0 *\fBmm_create\fR(size_t \fIsize\fR, const char *\fIfile\fR);"
  -
  -.IX Item "int \fBmm_permission\fR(\s-1MM\s0 *\fImm\fR, mode_t \fImode\fR, uid_t \fIowner\fR, gid_t \fIgroup\fR);"
  -
  -.IX Item "void \fBmm_destroy\fR(\s-1MM\s0 *\fImm\fR);"
  -
  -.IX Item "int \fBmm_lock\fR(\s-1MM\s0 *\fImm\fR, mm_lock_mode \fImode\fR);"
  -
  -.IX Item "int \fBmm_unlock\fR(\s-1MM\s0 *\fImm\fR);"
  -
  -.IX Item "void *\fBmm_malloc\fR(\s-1MM\s0 *\fImm\fR, size_t \fIsize\fR);"
  -
  -.IX Item "void \fBmm_free\fR(\s-1MM\s0 *\fImm\fR, void *\fIptr\fR);"
  -
  -.IX Item "void *\fBmm_realloc\fR(\s-1MM\s0 *\fImm\fR, void *\fIptr\fR, size_t \fIsize\fR);"
  -
  -.IX Item "void *\fBmm_calloc\fR(\s-1MM\s0 *\fImm\fR, size_t \fInumber\fR, size_t \fIsize\fR);"
  -
  -.IX Item "char *\fBmm_strdup\fR(\s-1MM\s0 *\fImm\fR, const char *\fIstr\fR);"
  -
  -.IX Item "size_t \fBmm_sizeof\fR(const void *\fIptr\fR);"
  -
  -.IX Item "size_t \fBmm_maxsize\fR(void);"
  -
  -.IX Item "size_t \fBmm_available\fR(\s-1MM\s0 *\fImm\fR);"
  -
  -.IX Item "char *\fBmm_error\fR(void);"
  -
  -.IX Item "void \fBmm_display_info\fR(\s-1MM\s0 *\fImm\fR);"
  -
  -.IX Subsection "Low-Level Shared Memory \s-1API\s0"
  -
  -.IX Item "void *\fBmm_core_create\fR(size_t \fIsize\fR, const char *\fIfile\fR);"
  -
  -.IX Item "int \fBmm_core_permission\fR(void *\fIcore\fR, mode_t \fImode\fR, uid_t \fIowner\fR, gid_t \fIgroup\fR);"
  -
  -.IX Item "void \fBmm_core_delete\fR(void *\fIcore\fR);"
  -
  -.IX Item "int \fBmm_core_lock\fR(const void *\fIcore\fR, mm_lock_mode \fImode\fR);"
  -
  -.IX Item "int \fBmm_core_unlock\fR(const void *\fIcore\fR);"
  -
  -.IX Item "size_t \fBmm_core_size\fR(const void *\fIcore\fR);"
  -
  -.IX Item "size_t \fBmm_core_maxsegsize\fR(void);"
  -
  -.IX Item "size_t \fBmm_core_align2page\fR(size_t \fIsize\fR);"
  -
  -.IX Item "size_t \fBmm_core_align2word\fR(size_t \fIsize\fR);"
  -
  -.IX Subsection "Low-Level Shared Memory \s-1API\s0"
  -
  -.IX Item "void \fBmm_lib_error_set\fR(unsigned int, const char *str);"
  -
  -.IX Item "char *\fBmm_lib_error_get\fR(void);"
  -
  -.IX Item "int \fBmm_lib_version\fR(void);"
  -
  -.IX Header "RESTRICTIONS"
  -
  -.IX Header "SEE ALSO"
  -
  -.IX Header "HOME"
  -
  -.IX Header "HISTORY"
  -
  -.IX Header "AUTHOR"
  -
  Index: ossp-pkg/mm/mm.h
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 mm.h
  --- ossp-pkg/mm/mm.h	2000/12/03 19:56:39	1.20
  +++ ossp-pkg/mm/mm.h	2001/01/29 20:27:22	1.21
  @@ -1,5 +1,5 @@
   /* ====================================================================
  - * Copyright (c) 1999-2000 Ralf S. Engelschall. All rights reserved.
  + * Copyright (c) 1999-2001 Ralf S. Engelschall. All rights reserved.
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
  Index: ossp-pkg/mm/mm.pod
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 mm.pod
  --- ossp-pkg/mm/mm.pod	2000/06/20 06:59:36	1.16
  +++ ossp-pkg/mm/mm.pod	2001/01/29 20:27:22	1.17
  @@ -1,5 +1,5 @@
   ## ====================================================================
  -## Copyright (c) 1999-2000 Ralf S. Engelschall. All rights reserved.
  +## Copyright (c) 1999-2001 Ralf S. Engelschall. All rights reserved.
   ##
   ## Redistribution and use in source and binary forms, with or without
   ## modification, are permitted provided that the following conditions
  Index: ossp-pkg/mm/mm_alloc.c
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 mm_alloc.c
  --- ossp-pkg/mm/mm_alloc.c	2000/06/20 06:59:36	1.14
  +++ ossp-pkg/mm/mm_alloc.c	2001/01/29 20:27:22	1.15
  @@ -1,5 +1,5 @@
   /* ====================================================================
  - * Copyright (c) 1999-2000 Ralf S. Engelschall. All rights reserved.
  + * Copyright (c) 1999-2001 Ralf S. Engelschall. All rights reserved.
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
  Index: ossp-pkg/mm/mm_conf.h.in
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 mm_conf.h.in
  --- ossp-pkg/mm/mm_conf.h.in	2000/04/30 18:33:07	1.4
  +++ ossp-pkg/mm/mm_conf.h.in	2001/01/29 20:27:22	1.5
  @@ -1,5 +1,5 @@
   /* ====================================================================
  - * Copyright (c) 1999-2000 Ralf S. Engelschall. All rights reserved.
  + * Copyright (c) 1999-2001 Ralf S. Engelschall. All rights reserved.
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
  Index: ossp-pkg/mm/mm_core.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 mm_core.c
  --- ossp-pkg/mm/mm_core.c	2001/01/29 20:00:43	1.11
  +++ ossp-pkg/mm/mm_core.c	2001/01/29 20:27:22	1.12
  @@ -1,5 +1,5 @@
   /* ====================================================================
  - * Copyright (c) 1999-2000 Ralf S. Engelschall. All rights reserved.
  + * Copyright (c) 1999-2001 Ralf S. Engelschall. All rights reserved.
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
  Index: ossp-pkg/mm/mm_global.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 mm_global.c
  --- ossp-pkg/mm/mm_global.c	2000/01/09 20:19:40	1.8
  +++ ossp-pkg/mm/mm_global.c	2001/01/29 20:27:22	1.9
  @@ -1,5 +1,5 @@
   /* ====================================================================
  - * Copyright (c) 1999-2000 Ralf S. Engelschall. All rights reserved.
  + * Copyright (c) 1999-2001 Ralf S. Engelschall. All rights reserved.
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
  Index: ossp-pkg/mm/mm_lib.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 mm_lib.c
  --- ossp-pkg/mm/mm_lib.c	2000/07/01 14:17:42	1.4
  +++ ossp-pkg/mm/mm_lib.c	2001/01/29 20:27:22	1.5
  @@ -1,5 +1,5 @@
   /* ====================================================================
  - * Copyright (c) 1999-2000 Ralf S. Engelschall. All rights reserved.
  + * Copyright (c) 1999-2001 Ralf S. Engelschall. All rights reserved.
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
  Index: ossp-pkg/mm/mm_test.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 mm_test.c
  --- ossp-pkg/mm/mm_test.c	2000/06/20 06:59:36	1.7
  +++ ossp-pkg/mm/mm_test.c	2001/01/29 20:27:22	1.8
  @@ -1,5 +1,5 @@
   /* ====================================================================
  - * Copyright (c) 1999-2000 Ralf S. Engelschall. All rights reserved.
  + * Copyright (c) 1999-2001 Ralf S. Engelschall. All rights reserved.
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions

From ossp-cvs-owner@ossp.org  Mon Jan 29 21:28:34 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f0TKSXk52168; Mon, 29 Jan 2001 21:28:33 +0100 (CET)
Date: Mon, 29 Jan 2001 21:28:33 +0100 (CET)
Message-Id: <200101292028.f0TKSXk52168@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm README mm-config.1 mm.3 mm_vers.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   29-Jan-2001 21:28:33
  Branch: HEAD                             Handle: 2001012920283300

  Modified files:
    ossp-pkg/mm             README mm-config.1 mm.3 mm_vers.c

  Log:
    *** empty log message ***

  Summary:
    Revision    Changes     Path
    1.68        +1  -1      ossp-pkg/mm/README
    1.16        +3  -3      ossp-pkg/mm/mm-config.1
    1.36        +3  -3      ossp-pkg/mm/mm.3
    1.37        +9  -9      ossp-pkg/mm/mm_vers.c
  ____________________________________________________________________________

  Index: ossp-pkg/mm/README
  ============================================================
  $ cvs diff -u -r1.67 -r1.68 README
  --- ossp-pkg/mm/README	2001/01/29 20:27:22	1.67
  +++ ossp-pkg/mm/README	2001/01/29 20:28:33	1.68
  @@ -6,7 +6,7 @@
                    
     MM - Shared Memory Library
     Copyright (c) 1999-2001 Ralf S. Engelschall, All rights reserved.
  -  Version 1.1.3 (01-Jul-2000)
  +  Version 1.1.4 (29-Jan-2001)
   
     The MM library is a 2-layer abstraction library which simplifies the usage
     of shared memory between forked (and this way strongly related) processes
  Index: ossp-pkg/mm/mm-config.1
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 mm-config.1
  --- ossp-pkg/mm/mm-config.1	2001/01/29 20:27:22	1.15
  +++ ossp-pkg/mm/mm-config.1	2001/01/29 20:28:33	1.16
  @@ -1,5 +1,5 @@
   .\" Automatically generated by Pod::Man version 1.02
  -.\" Mon Jan 29 21:26:47 2001
  +.\" Mon Jan 29 21:28:19 2001
   .\"
   .\" Standard preamble:
   .\" ======================================================================
  @@ -138,13 +138,13 @@
   .\" ======================================================================
   .\"
   .IX Title "MM-CONFIG 1"
  -.TH MM-CONFIG 1 "01-Jul-2000" "MM 1.1.3" "Shared Memory Library"
  +.TH MM-CONFIG 1 "29-Jan-2001" "MM 1.1.4" "Shared Memory Library"
   .UC
   .SH "NAME"
   \&\fBmm-config\fR \- \s-1MM\s0 library configuration/build utility
   .SH "VERSION"
   .IX Header "VERSION"
  -\&\s-1MM\s0 \s-11.1.3 (01-Jul-2000)\s0
  +\&\s-1MM\s0 \s-11.1.4 (29-Jan-2001)\s0
   .SH "SYNOPSIS"
   .IX Header "SYNOPSIS"
   \&\fBmm-config\fR 
  Index: ossp-pkg/mm/mm.3
  ============================================================
  $ cvs diff -u -r1.35 -r1.36 mm.3
  --- ossp-pkg/mm/mm.3	2001/01/29 20:27:22	1.35
  +++ ossp-pkg/mm/mm.3	2001/01/29 20:28:33	1.36
  @@ -1,5 +1,5 @@
   .\" Automatically generated by Pod::Man version 1.02
  -.\" Mon Jan 29 21:26:46 2001
  +.\" Mon Jan 29 21:28:19 2001
   .\"
   .\" Standard preamble:
   .\" ======================================================================
  @@ -138,13 +138,13 @@
   .\" ======================================================================
   .\"
   .IX Title "mm 3"
  -.TH mm 3 "01-Jul-2000" "MM 1.1.3" "Shared Memory Library"
  +.TH mm 3 "29-Jan-2001" "MM 1.1.4" "Shared Memory Library"
   .UC
   .SH "NAME"
   \&\fB\s-1MM\s0 \- Shared Memory Library\fR
   .SH "VERSION"
   .IX Header "VERSION"
  -\&\s-1MM\s0 \s-11.1.3 (01-Jul-2000)\s0
  +\&\s-1MM\s0 \s-11.1.4 (29-Jan-2001)\s0
   .SH "SYNOPSIS"
   .IX Header "SYNOPSIS"
   .Vb 1
  Index: ossp-pkg/mm/mm_vers.c
  ============================================================
  $ cvs diff -u -r1.36 -r1.37 mm_vers.c
  --- ossp-pkg/mm/mm_vers.c	2000/07/01 14:17:42	1.36
  +++ ossp-pkg/mm/mm_vers.c	2001/01/29 20:28:33	1.37
  @@ -8,7 +8,7 @@
   #ifndef _MM_VERS_C_
   #define _MM_VERS_C_
   
  -#define MM_VERSION 0x101203
  +#define MM_VERSION 0x101204
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _MM_VERS_C_AS_HEADER_
   
   mm_version_t mm_version = {
  -    0x101203,
  -    "1.1.3",
  -    "1.1.3 (01-Jul-2000)",
  -    "This is MM, Version 1.1.3 (01-Jul-2000)",
  -    "MM 1.1.3 (01-Jul-2000)",
  -    "MM/1.1.3",
  -    "@(#)MM 1.1.3 (01-Jul-2000)",
  -    "$Id: MM 1.1.3 (01-Jul-2000) $"
  +    0x101204,
  +    "1.1.4",
  +    "1.1.4 (29-Jan-2001)",
  +    "This is MM, Version 1.1.4 (29-Jan-2001)",
  +    "MM 1.1.4 (29-Jan-2001)",
  +    "MM/1.1.4",
  +    "@(#)MM 1.1.4 (29-Jan-2001)",
  +    "$Id: MM 1.1.4 (29-Jan-2001) $"
   };
   
   #endif /* _MM_VERS_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Mon Jan 29 21:31:51 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f0TKVpH52452; Mon, 29 Jan 2001 21:31:51 +0100 (CET)
Date: Mon, 29 Jan 2001 21:31:51 +0100 (CET)
Message-Id: <200101292031.f0TKVpH52452@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm ChangeLog mm.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   29-Jan-2001 21:31:50
  Branch: HEAD                             Handle: 2001012920315000

  Modified files:
    ossp-pkg/mm             ChangeLog mm.h

  Log:
    *** empty log message ***

  Summary:
    Revision    Changes     Path
    1.26        +4  -0      ossp-pkg/mm/ChangeLog
    1.22        +31 -31     ossp-pkg/mm/mm.h
  ____________________________________________________________________________

  Index: ossp-pkg/mm/ChangeLog
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 ChangeLog
  --- ossp-pkg/mm/ChangeLog	2001/01/29 20:27:22	1.25
  +++ ossp-pkg/mm/ChangeLog	2001/01/29 20:31:50	1.26
  @@ -16,6 +16,10 @@
   
    Changes between 1.1.3 and 1.1.4 (01-Jul-2000 to xx-Jan-2001)
   
  +  *) Removed variables from ANSI C function prototypes in mm.h
  +     to avoid any potential conflicts in advance.
  +     [Ralf S. Engelschall]
  +
     *) Adjusted year in copyright messages for 2001.
        [Ralf S. Engelschall]
   
  Index: ossp-pkg/mm/mm.h
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 mm.h
  --- ossp-pkg/mm/mm.h	2001/01/29 20:27:22	1.21
  +++ ossp-pkg/mm/mm.h	2001/01/29 20:31:50	1.22
  @@ -323,51 +323,51 @@
   #endif
   
   /* Global Malloc-Replacement API */
  -int     MM_create(size_t size, const char *file);
  -int     MM_permission(mode_t mode, uid_t owner, gid_t group);
  +int     MM_create(size_t, const char *);
  +int     MM_permission(mode_t, uid_t, gid_t);
   void    MM_destroy(void);
  -int     MM_lock(mm_lock_mode mode);
  +int     MM_lock(mm_lock_mode);
   int     MM_unlock(void);
  -void   *MM_malloc(size_t size);
  -void   *MM_realloc(void *ptr, size_t size);
  -void    MM_free(void *ptr);
  -void   *MM_calloc(size_t number, size_t size);
  -char   *MM_strdup(const char *str);
  -size_t  MM_sizeof(const void *ptr);
  +void   *MM_malloc(size_t);
  +void   *MM_realloc(void *, size_t);
  +void    MM_free(void *);
  +void   *MM_calloc(size_t, size_t);
  +char   *MM_strdup(const char *);
  +size_t  MM_sizeof(const void *);
   size_t  MM_maxsize(void);
   size_t  MM_available(void);
   char   *MM_error(void);
   
   /* Standard Malloc-Style API */
  -MM     *mm_create(size_t size, const char *file);
  -int     mm_permission(MM *mm, mode_t mode, uid_t owner, gid_t group);
  -void    mm_destroy(MM *mm);
  -int     mm_lock(MM *mm, mm_lock_mode mode);
  -int     mm_unlock(MM *mm);
  -void   *mm_malloc(MM *mm, size_t size);
  -void   *mm_realloc(MM *mm, void *ptr, size_t size);
  -void    mm_free(MM *mm, void *ptr);
  -void   *mm_calloc(MM *mm, size_t number, size_t size);
  -char   *mm_strdup(MM *mm, const char *str);
  -size_t  mm_sizeof(MM *mm, const void *ptr);
  +MM     *mm_create(size_t, const char *);
  +int     mm_permission(MM *, mode_t, uid_t, gid_t);
  +void    mm_destroy(MM *);
  +int     mm_lock(MM *, mm_lock_mode);
  +int     mm_unlock(MM *);
  +void   *mm_malloc(MM *, size_t);
  +void   *mm_realloc(MM *, void *, size_t);
  +void    mm_free(MM *, void *);
  +void   *mm_calloc(MM *, size_t, size_t);
  +char   *mm_strdup(MM *, const char *);
  +size_t  mm_sizeof(MM *, const void *);
   size_t  mm_maxsize(void);
  -size_t  mm_available(MM *mm);
  +size_t  mm_available(MM *);
   char   *mm_error(void);
  -void    mm_display_info(MM *mm);
  +void    mm_display_info(MM *);
   
   /* Low-Level Shared Memory API */
  -void   *mm_core_create(size_t size, const char *file);
  -int     mm_core_permission(void *core, mode_t mode, uid_t owner, gid_t group);
  -void    mm_core_delete(void *core);
  -size_t  mm_core_size(const void *core);
  -int     mm_core_lock(const void *core, mm_lock_mode mode);
  -int     mm_core_unlock(const void *core);
  +void   *mm_core_create(size_t, const char *);
  +int     mm_core_permission(void *, mode_t, uid_t, gid_t);
  +void    mm_core_delete(void *);
  +size_t  mm_core_size(const void *);
  +int     mm_core_lock(const void *, mm_lock_mode);
  +int     mm_core_unlock(const void *);
   size_t  mm_core_maxsegsize(void);
  -size_t  mm_core_align2page(size_t size);
  -size_t  mm_core_align2word(size_t size);
  +size_t  mm_core_align2page(size_t);
  +size_t  mm_core_align2word(size_t);
   
   /* Internal Library API */
  -void    mm_lib_error_set(unsigned int, const char *str);
  +void    mm_lib_error_set(unsigned int, const char *);
   char   *mm_lib_error_get(void);
   int     mm_lib_version(void);
   

From ossp-cvs-owner@ossp.org  Mon Feb  5 14:58:22 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f15DwL328659; Mon, 5 Feb 2001 14:58:21 +0100 (CET)
Date: Mon, 5 Feb 2001 14:58:21 +0100 (CET)
Message-Id: <200102051358.f15DwL328659@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sfio configure
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   05-Feb-2001 14:58:16
  Branch: HEAD                             Handle: 2001020513581500

  Modified files:
    ossp-pkg/sfio           configure

  Log:
    Update to Autoconf 2.13

  Summary:
    Revision    Changes     Path
    1.12        +78 -121    ossp-pkg/sfio/configure
  ____________________________________________________________________________

  Index: ossp-pkg/sfio/configure
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 configure
  --- ossp-pkg/sfio/configure	1999/11/12 15:18:33	1.11
  +++ ossp-pkg/sfio/configure	2001/02/05 13:58:15	1.12
  @@ -1,6 +1,6 @@
   #! /bin/sh
   
  -# From configure.in Revision: 1.8 
  +# From configure.in Revision: 1.9 
   
   SHTOOL="./etc/shtool"
   
  @@ -112,7 +112,7 @@
   
   
   # Guess values for system-dependent variables and create Makefiles.
  -# Generated automatically using autoconf version 2.13.1 
  +# Generated automatically using autoconf version 2.13 
   # Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
   #
   # This configure script is free software; the Free Software Foundation
  @@ -459,7 +459,7 @@
       verbose=yes ;;
   
     -version | --version | --versio | --versi | --vers)
  -    echo "configure generated by autoconf version 2.13.1"
  +    echo "configure generated by autoconf version 2.13"
       exit 0 ;;
   
     -with-* | --with-*)
  @@ -619,7 +619,7 @@
   
   if test -r "$cache_file"; then
     echo "loading cache $cache_file"
  -      test -f "$cache_file" && . $cache_file
  +  . $cache_file
   else
     echo "creating cache $cache_file"
     > $cache_file
  @@ -666,9 +666,9 @@
   if test -z "$ac_aux_dir"; then
     { echo "configure: error: can not find install-sh or install.sh in etc $srcdir/etc" 1>&2; exit 1; }
   fi
  -ac_config_guess="$SHELL $ac_aux_dir/config.guess"
  -ac_config_sub="$SHELL $ac_aux_dir/config.sub"
  -ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
  +ac_config_guess=$ac_aux_dir/config.guess
  +ac_config_sub=$ac_aux_dir/config.sub
  +ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
   
   
   
  @@ -676,7 +676,7 @@
   set dummy gcc; ac_word=$2
   echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
   echo "configure:679: checking for $ac_word" >&5
  -if eval "test \"\${ac_cv_prog_CC+set}\" = set"; then
  +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
     echo $ac_n "(cached) $ac_c" 1>&6
   else
     if test -n "$CC"; then
  @@ -706,7 +706,7 @@
   set dummy cc; ac_word=$2
   echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
   echo "configure:709: checking for $ac_word" >&5
  -if eval "test \"\${ac_cv_prog_CC+set}\" = set"; then
  +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
     echo $ac_n "(cached) $ac_c" 1>&6
   else
     if test -n "$CC"; then
  @@ -752,12 +752,12 @@
   
     if test -z "$CC"; then
       case "`uname -s`" in
  -    *win32* | *WIN32* | *CYGWIN*)
  +    *win32* | *WIN32*)
         # Extract the first word of "cl", so it can be a program name with args.
   set dummy cl; ac_word=$2
   echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
   echo "configure:760: checking for $ac_word" >&5
  -if eval "test \"\${ac_cv_prog_CC+set}\" = set"; then
  +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
     echo $ac_n "(cached) $ac_c" 1>&6
   else
     if test -n "$CC"; then
  @@ -787,8 +787,8 @@
     test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
   fi
   
  -echo $ac_n "checking whether the C compiler ($CC $CFLAGS $CPPFLAGS $LDFLAGS) works""... $ac_c" 1>&6
  -echo "configure:792: checking whether the C compiler ($CC $CFLAGS $CPPFLAGS $LDFLAGS) works" >&5
  +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
  +echo "configure:792: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
   
   ac_ext=c
   # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
  @@ -829,14 +829,14 @@
   if test $ac_cv_prog_cc_works = no; then
     { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
   fi
  -echo $ac_n "checking whether the C compiler ($CC $CFLAGS $CPPFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
  -echo "configure:834: checking whether the C compiler ($CC $CFLAGS $CPPFLAGS $LDFLAGS) is a cross-compiler" >&5
  +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
  +echo "configure:834: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
   echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
   cross_compiling=$ac_cv_prog_cc_cross
   
   echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
   echo "configure:839: checking whether we are using GNU C" >&5
  -if eval "test \"\${ac_cv_prog_gcc+set}\" = set"; then
  +if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
     echo $ac_n "(cached) $ac_c" 1>&6
   else
     cat > conftest.c <<EOF
  @@ -864,7 +864,7 @@
   CFLAGS=
   echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
   echo "configure:867: checking whether ${CC-cc} accepts -g" >&5
  -if eval "test \"\${ac_cv_prog_cc_g+set}\" = set"; then
  +if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
     echo $ac_n "(cached) $ac_c" 1>&6
   else
     echo 'void f(){}' > conftest.c
  @@ -901,7 +901,7 @@
     CPP=
   fi
   if test -z "$CPP"; then
  -if eval "test \"\${ac_cv_prog_CPP+set}\" = set"; then
  +if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
     echo $ac_n "(cached) $ac_c" 1>&6
   else
       # This must be in double quotes, not single quotes, because CPP may get
  @@ -1044,91 +1044,55 @@
   fi
   
   
  -echo $ac_n "checking host system type""... $ac_c" 1>&6
  -echo "configure:1049: checking host system type" >&5
  -if test "x$ac_cv_host" = "x" || (test "x$host" != "xNONE" && test "x$host" != "x$ac_cv_host_alias"); then
  -
   # Make sure we can run config.sub.
  -  if $ac_config_sub sun4 >/dev/null 2>&1; then :
  -    else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
  -  fi
  -
  -  ac_cv_host_alias=$host
  -  case "$ac_cv_host_alias" in
  -  NONE)
  -    case $nonopt in
  -    NONE)
  -      if ac_cv_host_alias=`$ac_config_guess`; then :
  -      else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; }
  -      fi ;;
  -    *) ac_cv_host_alias=$nonopt ;;
  -    esac ;;
  -  esac
  -
  -  ac_cv_host=`$ac_config_sub $ac_cv_host_alias`
  -  ac_cv_host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
  -  ac_cv_host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
  -  ac_cv_host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
  -else
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then :
  +else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
   fi
  -
  -echo "$ac_t""$ac_cv_host" 1>&6
  -
  -host=$ac_cv_host
  -host_alias=$ac_cv_host_alias
  -host_cpu=$ac_cv_host_cpu
  -host_vendor=$ac_cv_host_vendor
  -host_os=$ac_cv_host_os
  -
  -
  -
  -
   
  -echo $ac_n "checking build system type""... $ac_c" 1>&6
  -echo "configure:1090: checking build system type" >&5
  -if test "x$ac_cv_build" = "x" || (test "x$build" != "xNONE" && test "x$build" != "x$ac_cv_build_alias"); then
  -
  -# Make sure we can run config.sub.
  -  if $ac_config_sub sun4 >/dev/null 2>&1; then :
  -    else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
  -  fi
  +echo $ac_n "checking host system type""... $ac_c" 1>&6
  +echo "configure:1054: checking host system type" >&5
   
  -  ac_cv_build_alias=$build
  -  case "$ac_cv_build_alias" in
  +host_alias=$host
  +case "$host_alias" in
  +NONE)
  +  case $nonopt in
     NONE)
  -    case $nonopt in
  -    NONE)
  -      ac_cv_build_alias=$host_alias ;;
  -
  -    *) ac_cv_build_alias=$nonopt ;;
  -    esac ;;
  -  esac
  -
  -  ac_cv_build=`$ac_config_sub $ac_cv_build_alias`
  -  ac_cv_build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
  -  ac_cv_build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
  -  ac_cv_build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
  -else
  -  echo $ac_n "(cached) $ac_c" 1>&6
  -fi
  -
  -echo "$ac_t""$ac_cv_build" 1>&6
  +    if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then :
  +    else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; }
  +    fi ;;
  +  *) host_alias=$nonopt ;;
  +  esac ;;
  +esac
   
  -build=$ac_cv_build
  -build_alias=$ac_cv_build_alias
  -build_cpu=$ac_cv_build_cpu
  -build_vendor=$ac_cv_build_vendor
  -build_os=$ac_cv_build_os
  +host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias`
  +host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
  +host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
  +host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
  +echo "$ac_t""$host" 1>&6
   
  +echo $ac_n "checking build system type""... $ac_c" 1>&6
  +echo "configure:1075: checking build system type" >&5
   
  +build_alias=$build
  +case "$build_alias" in
  +NONE)
  +  case $nonopt in
  +  NONE) build_alias=$host_alias ;;
  +  *) build_alias=$nonopt ;;
  +  esac ;;
  +esac
   
  +build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias`
  +build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
  +build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
  +build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
  +echo "$ac_t""$build" 1>&6
   
   # Extract the first word of "ranlib", so it can be a program name with args.
   set dummy ranlib; ac_word=$2
   echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
  -echo "configure:1131: checking for $ac_word" >&5
  -if eval "test \"\${ac_cv_prog_RANLIB+set}\" = set"; then
  +echo "configure:1095: checking for $ac_word" >&5
  +if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
     echo $ac_n "(cached) $ac_c" 1>&6
   else
     if test -n "$RANLIB"; then
  @@ -1166,7 +1130,7 @@
   if test "$ac_cv_prog_gcc" = yes; then
     # Check if gcc -print-prog-name=ld gives a path.
     echo $ac_n "checking for ld used by GCC""... $ac_c" 1>&6
  -echo "configure:1170: checking for ld used by GCC" >&5
  +echo "configure:1134: checking for ld used by GCC" >&5
     ac_prog=`($CC -print-prog-name=ld) 2>&5`
     case "$ac_prog" in
       # Accept absolute paths.
  @@ -1190,12 +1154,12 @@
     esac
   elif test "$with_gnu_ld" = yes; then
     echo $ac_n "checking for GNU ld""... $ac_c" 1>&6
  -echo "configure:1194: checking for GNU ld" >&5
  +echo "configure:1158: checking for GNU ld" >&5
   else
     echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6
  -echo "configure:1197: checking for non-GNU ld" >&5
  +echo "configure:1161: checking for non-GNU ld" >&5
   fi
  -if eval "test \"\${ac_cv_path_LD+set}\" = set"; then
  +if eval "test \"`echo '$''{'ac_cv_path_LD'+set}'`\" = set"; then
     echo $ac_n "(cached) $ac_c" 1>&6
   else
     if test -z "$LD"; then
  @@ -1229,8 +1193,8 @@
   test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; }
   
   echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6
  -echo "configure:1233: checking if the linker ($LD) is GNU ld" >&5
  -if eval "test \"\${ac_cv_prog_gnu_ld+set}\" = set"; then
  +echo "configure:1197: checking if the linker ($LD) is GNU ld" >&5
  +if eval "test \"`echo '$''{'ac_cv_prog_gnu_ld'+set}'`\" = set"; then
     echo $ac_n "(cached) $ac_c" 1>&6
   else
     # I'd rather use --version here, but apparently some GNU ld's only accept -v.
  @@ -1245,8 +1209,8 @@
   
   
   echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6
  -echo "configure:1249: checking for BSD-compatible nm" >&5
  -if eval "test \"\${ac_cv_path_NM+set}\" = set"; then
  +echo "configure:1213: checking for BSD-compatible nm" >&5
  +if eval "test \"`echo '$''{'ac_cv_path_NM'+set}'`\" = set"; then
     echo $ac_n "(cached) $ac_c" 1>&6
   else
     if test -n "$NM"; then
  @@ -1282,8 +1246,8 @@
   
   
   echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
  -echo "configure:1286: checking whether ln -s works" >&5
  -if eval "test \"\${ac_cv_prog_LN_S+set}\" = set"; then
  +echo "configure:1250: checking whether ln -s works" >&5
  +if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
     echo $ac_n "(cached) $ac_c" 1>&6
   else
     rm -f conftestdata
  @@ -1326,8 +1290,8 @@
   case "$host" in
   *-*-irix6*)
     # Find out which ABI we are using.
  -  echo '#line 1330 "configure"' > conftest.$ac_ext
  -  if { (eval echo configure:1331: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
  +  echo '#line 1294 "configure"' > conftest.$ac_ext
  +  if { (eval echo configure:1295: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
       case "`/usr/bin/file conftest.o`" in
       *32-bit*)
         LD="${LD-ld} -32"
  @@ -1348,19 +1312,19 @@
     SAVE_CFLAGS="$CFLAGS"
     CFLAGS="$CFLAGS -belf"
     echo $ac_n "checking whether the C compiler needs -belf""... $ac_c" 1>&6
  -echo "configure:1352: checking whether the C compiler needs -belf" >&5
  -if eval "test \"\${lt_cv_cc_needs_belf+set}\" = set"; then
  +echo "configure:1316: checking whether the C compiler needs -belf" >&5
  +if eval "test \"`echo '$''{'lt_cv_cc_needs_belf'+set}'`\" = set"; then
     echo $ac_n "(cached) $ac_c" 1>&6
   else
     cat > conftest.$ac_ext <<EOF
  -#line 1357 "configure"
  +#line 1321 "configure"
   #include "confdefs.h"
   
   int main() {
   
   ; return 0; }
   EOF
  -if { (eval echo configure:1364: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  +if { (eval echo configure:1328: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
     rm -rf conftest*
     lt_cv_cc_needs_belf=yes
   else
  @@ -1444,7 +1408,7 @@
   # Reload cache, that may have been modified by ltconfig
   if test -r "$cache_file"; then
     echo "loading cache $cache_file"
  -      test -f "$cache_file" && . $cache_file
  +  . $cache_file
   else
     echo "creating cache $cache_file"
     > $cache_file
  @@ -1462,9 +1426,9 @@
   exec 5>>./config.log
   
   echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
  -echo "configure:1466: checking whether ${MAKE-make} sets \${MAKE}" >&5
  +echo "configure:1430: checking whether ${MAKE-make} sets \${MAKE}" >&5
   set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
  -if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
  +if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
     echo $ac_n "(cached) $ac_c" 1>&6
   else
     cat > conftestmake <<\EOF
  @@ -1595,20 +1559,13 @@
   # Protect against shell expansion while executing Makefile rules.
   # Protect against Makefile macro expansion.
   cat > conftest.defs <<\EOF
  -s%#define \([^ 	][^ 	]*\) *\(.*\)%-D\1=\2%g
  +s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g
   s%[ 	`~#$^&*(){}\\|;'"<>?]%\\&%g
   s%\[%\\&%g
   s%\]%\\&%g
   s%\$%$$%g
   EOF
  -# We use echo to avoid assuming a particular line-breaking character.
  -# The extra dot is to prevent the shell from consuming trailing
  -# line-breaks from the sub-command output.  A line-break within
  -# single-quotes doesn't work because, if this script is created in a
  -# platform that uses two characters for line-breaks (e.g., DOS), tr
  -# would break.
  -ac_LF_and_DOT="`echo; echo .`"
  -DEFS=`sed -f conftest.defs confdefs.h | tr "$ac_LF_and_DOT" ' .'`
  +DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '`
   rm -f conftest.defs
   
   
  @@ -1637,7 +1594,7 @@
       echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
       exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
     -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
  -    echo "$CONFIG_STATUS generated by autoconf version 2.13.1"
  +    echo "$CONFIG_STATUS generated by autoconf version 2.13"
       exit 0 ;;
     -help | --help | --hel | --he | --h)
       echo "\$ac_cs_usage"; exit 0 ;;
  @@ -1787,7 +1744,7 @@
     rm -f "$ac_file"
     configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
     case "$ac_file" in
  -  *[Mm]akefile*) ac_comsub="1i\\
  +  *Makefile*) ac_comsub="1i\\
   # $configure_input" ;;
     *) ac_comsub= ;;
     esac
  @@ -1812,5 +1769,5 @@
   EOF
   chmod +x $CONFIG_STATUS
   rm -fr confdefs* $ac_clean_files
  -test "$no_create" = yes || $SHELL $CONFIG_STATUS || exit 1
  +test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
   

From ossp-cvs-owner@ossp.org  Mon Feb  5 14:58:36 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f15DwYu28715; Mon, 5 Feb 2001 14:58:34 +0100 (CET)
Date: Mon, 5 Feb 2001 14:58:34 +0100 (CET)
Message-Id: <200102051358.f15DwYu28715@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sfio Makefile.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   05-Feb-2001 14:58:34
  Branch: HEAD                             Handle: 2001020513583400

  Modified files:
    ossp-pkg/sfio           Makefile.in

  Log:
    Update version

  Summary:
    Revision    Changes     Path
    1.10        +1  -1      ossp-pkg/sfio/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/sfio/Makefile.in
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 Makefile.in
  --- ossp-pkg/sfio/Makefile.in	2001/01/26 10:41:39	1.9
  +++ ossp-pkg/sfio/Makefile.in	2001/02/05 13:58:34	1.10
  @@ -2,7 +2,7 @@
   ##  Sfio top-level Makefile
   ##
   
  -PACKAGE_VER = 1.0b4
  +PACKAGE_VER = 1999.4
   LIBTOOL_VER = 10:0
   
   top_builddir = @top_srcdir@

From ossp-cvs-owner@ossp.org  Sat Feb 10 17:40:29 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f1AGeRX22716; Sat, 10 Feb 2001 17:40:27 +0100 (CET)
Date: Sat, 10 Feb 2001 17:40:27 +0100 (CET)
Message-Id: <200102101640.f1AGeRX22716@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela .configure .cvsignore ChangeLog Makefile.i...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   10-Feb-2001 17:40:27
  Branch: HEAD                             Handle: 2001021016402600

  Modified files:
    ossp-pkg/shiela         .configure .cvsignore ChangeLog Makefile.in README
                            VERSION configure configure.in shiela-install.pod
                            shiela-install.sh shiela.pl shiela.pod shtool

  Log:
       *) Upgraded to GNU shtool 1.5.2-pre.
          [Ralf S. Engelschall]
    
       *) Added --with-perl=PATH and --with-cvs=PATH Autoconf options
          to allow one to force the use of particular programs.
          [Ralf S. Engelschall]
    
       *) Added $(DESTDIR) support for "make install".
          [Ralf S. Engelschall]

  Summary:
    Revision    Changes     Path
    1.2         +2  -0      ossp-pkg/shiela/.configure
    1.2         +4  -0      ossp-pkg/shiela/.cvsignore
    1.2         +13 -1      ossp-pkg/shiela/ChangeLog
    1.2         +9  -7      ossp-pkg/shiela/Makefile.in
    1.2         +1  -1      ossp-pkg/shiela/README
    1.2         +1  -1      ossp-pkg/shiela/VERSION
    1.2         BLOB        ossp-pkg/shiela/configure
    1.2         +17 -3      ossp-pkg/shiela/configure.in
    1.2         +1  -1      ossp-pkg/shiela/shiela-install.pod
    1.2         +1  -1      ossp-pkg/shiela/shiela-install.sh
    1.3         +2  -2      ossp-pkg/shiela/shiela.pl
    1.2         +1  -1      ossp-pkg/shiela/shiela.pod
    1.3         +63 -42     ossp-pkg/shiela/shtool
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/.configure
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 .configure
  --- ossp-pkg/shiela/.configure	2000/06/18 14:30:49	1.1.1.1
  +++ ossp-pkg/shiela/.configure	2001/02/10 16:40:26	1.2
  @@ -1,4 +1,6 @@
   :
   ./configure \
   --prefix=/sw/pkg/shiela \
  +--with-perl=/sw/bin/perl \
  +--with-cvs=/sw/bin/cvs \
   "$@"
  Index: ossp-pkg/shiela/.cvsignore
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 .cvsignore
  --- ossp-pkg/shiela/.cvsignore	2000/07/18 15:31:58	1.1
  +++ ossp-pkg/shiela/.cvsignore	2001/02/10 16:40:26	1.2
  @@ -1 +1,5 @@
   Makefile
  +shiela
  +shiela.1
  +shiela-install
  +shiela-install.1
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	2000/06/18 14:30:47	1.1.1.1
  +++ ossp-pkg/shiela/ChangeLog	2001/02/10 16:40:26	1.2
  @@ -9,7 +9,19 @@
   
     ChangeLog
   
  -  Changes between *GENESIS* and 0.9.0 (Apr-2000 to XX-Jun-2000):
  +  Changes between 0.9.0 and 0.9.1 (18-Jun-2000 to 10-Feb-2001):
  +
  +   *) Upgraded to GNU shtool 1.5.2-pre.
  +      [Ralf S. Engelschall]
  +
  +   *) Added --with-perl=PATH and --with-cvs=PATH Autoconf options
  +      to allow one to force the use of particular programs.
  +      [Ralf S. Engelschall]
  +
  +   *) Added $(DESTDIR) support for "make install".
  +      [Ralf S. Engelschall]
  +
  +  Changes between *GENESIS* and 0.9.0 (Apr-2000 to 18-Jun-2000):
   
      *) Created the first Shiela version.
         [Ralf S. Engelschall]
  Index: ossp-pkg/shiela/Makefile.in
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 Makefile.in
  --- ossp-pkg/shiela/Makefile.in	2000/06/18 14:30:49	1.1.1.1
  +++ ossp-pkg/shiela/Makefile.in	2001/02/10 16:40:26	1.2
  @@ -18,6 +18,8 @@
   includedir  = @includedir@
   mandir      = @mandir@
   
  +DESTDIR     =
  +
   all: shiela shiela.1 shiela-install shiela-install.1
   
   shiela: shiela.pl
  @@ -50,13 +52,13 @@
   	        --release="$$D" --date="OSSP Shiela $$V" shiela-install.pod >shiela-install.1
   
   install: all
  -	$(SHTOOL) mkdir -f -p -m 755 $(bindir)
  -	$(SHTOOL) mkdir -f -p -m 755 $(libdir)
  -	$(SHTOOL) mkdir -f -p -m 755 $(mandir)/man1
  -	$(SHTOOL) install -c -m 755 shiela $(bindir)/shiela
  -	$(SHTOOL) install -c -m 644 shiela.1 $(mandir)/man1/shiela.1
  -	$(SHTOOL) install -c -m 755 shiela-install $(bindir)/shiela-install
  -	$(SHTOOL) install -c -m 644 shiela-install.1 $(mandir)/man1/shiela-install.1
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libdir)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man1
  +	$(SHTOOL) install -c -m 755 shiela $(DESTDIR)$(bindir)/shiela
  +	$(SHTOOL) install -c -m 644 shiela.1 $(DESTDIR)$(mandir)/man1/shiela.1
  +	$(SHTOOL) install -c -m 755 shiela-install $(DESTDIR)$(bindir)/shiela-install
  +	$(SHTOOL) install -c -m 644 shiela-install.1 $(DESTDIR)$(mandir)/man1/shiela-install.1
   
   clean:
   	$(RM) shiela shiela.1
  Index: ossp-pkg/shiela/README
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 README
  --- ossp-pkg/shiela/README	2000/06/18 14:30:47	1.1.1.1
  +++ ossp-pkg/shiela/README	2001/02/10 16:40:26	1.2
  @@ -7,7 +7,7 @@
     OSSP Shiela - Access Control and Logging Facility for CVS
     Copyright (c) 2000 Ralf S. Engelschall <rse@engelschall.com>
   
  -  Version 0.9.0 (18-Jun-2000)
  +  Version 0.9.1 (27-Jun-2000)
   
     Shiela is an access control and logging facility for use with the
     Concurrent Versions System (CVS). It is intended to be hooked into CVS's
  Index: ossp-pkg/shiela/VERSION
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 VERSION
  --- ossp-pkg/shiela/VERSION	2000/06/18 14:30:49	1.1.1.1
  +++ ossp-pkg/shiela/VERSION	2001/02/10 16:40:26	1.2
  @@ -1,3 +1,3 @@
   
  -  This is OSSP Shiela, Version 0.9.0 (18-Jun-2000)
  +  This is OSSP Shiela, Version 0.9.1 (27-Jun-2000)
   
  Index: ossp-pkg/shiela/configure
  ============================================================
  $ cvs update -p -r1.1.1.1 configure >configure.old
  $ cvs update -p -r1.2 configure >configure.new
  $ diff -u configure.old configure.new
  Index: ossp-pkg/shiela/configure.in
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 configure.in
  --- ossp-pkg/shiela/configure.in	2000/06/18 14:30:49	1.1.1.1
  +++ ossp-pkg/shiela/configure.in	2001/02/10 16:40:26	1.2
  @@ -4,17 +4,31 @@
   AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)
   V=`./shtool version -ltxt -dlong VERSION`
   ./shtool echo -e "Configuring %BOSSP Shiela%b, Version %B${V}%b"
  -echo "Copyright (c) 2000 Ralf S. Engelschall <rse@engelschall.com>"
  +echo "Copyright (c) 2000-2001 Ralf S. Engelschall <rse@engelschall.com>"
   echo ""
   AC_DIVERT_POP()
   
   AC_MSG_CHECKING(for Perl program)
  -PATH_PERL=`./shtool path -m perl5 perl`
  +AC_ARG_WITH(perl,dnl
  +[  --with-perl=PATH        force the use of a particular Perl program],
  +with_perl="$withval",
  +if test ".$with_perl" = .; then
  +    with_perl=`./shtool path -m perl5 perl`
  +fi
  +)dnl
  +PATH_PERL="$with_perl"
   AC_SUBST(PATH_PERL)
   AC_MSG_RESULT($PATH_PERL)
   
   AC_MSG_CHECKING(for CVS program)
  -PATH_CVS=`./shtool path cvs`
  +AC_ARG_WITH(cvs,dnl
  +[  --with-cvs=PATH         force the use of a particular CVS program],
  +with_cvs="$withval",
  +if test ".$with_cvs" = .; then
  +    with_perl=`./shtool path cvs`
  +fi
  +)dnl
  +PATH_CVS="$with_cvs"
   AC_SUBST(PATH_CVS)
   AC_MSG_RESULT($PATH_CVS)
   
  Index: ossp-pkg/shiela/shiela-install.pod
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 shiela-install.pod
  --- ossp-pkg/shiela/shiela-install.pod	2000/06/18 14:30:49	1.1.1.1
  +++ ossp-pkg/shiela/shiela-install.pod	2001/02/10 16:40:26	1.2
  @@ -32,7 +32,7 @@
   
   =head1 VERSION
   
  -B<OSSP Shiela> 0.9.0 (18-Jun-2000)
  +B<OSSP Shiela> 0.9.1 (27-Jun-2000)
   
   =head1 DESCRIPTION
   
  Index: ossp-pkg/shiela/shiela-install.sh
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 shiela-install.sh
  --- ossp-pkg/shiela/shiela-install.sh	2000/06/18 14:30:50	1.1.1.1
  +++ ossp-pkg/shiela/shiela-install.sh	2001/02/10 16:40:26	1.2
  @@ -25,7 +25,7 @@
   ##  shiela-install: Shiela repository install program (syntax: Bourne-Shell)
   ##
   
  -version="0.9.0"
  +version="0.9.1"
   
   prefix="@prefix@"
   bindir="@bindir@"
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	2000/07/18 15:24:27	1.2
  +++ ossp-pkg/shiela/shiela.pl	2001/02/10 16:40:26	1.3
  @@ -25,7 +25,7 @@
   ##  shiela: Shiela control program (syntax: Perl)
   ##
   
  -my $version = '0.9.0';
  +my $version = '0.9.1';
   
   require 5.005;
   
  @@ -490,7 +490,7 @@
       #   prepare the pattern
       if ($pat =~ m|^m(.)(.+)\1$| and $2 !~ m|$1|) {
           #   pattern is a regular expression,
  -        #   so just make sure it is achored 
  +        #   so just make sure it is anchored 
           $pat =~ s|^([^\^])|^$1|;
           $pat =~ s|([^\$])$|$1\$|;
       }
  Index: ossp-pkg/shiela/shiela.pod
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 shiela.pod
  --- ossp-pkg/shiela/shiela.pod	2000/06/18 14:30:45	1.1.1.1
  +++ ossp-pkg/shiela/shiela.pod	2001/02/10 16:40:26	1.2
  @@ -32,7 +32,7 @@
   
   =head1 VERSION
   
  -B<OSSP Shiela> 0.9.0 (18-Jun-2000)
  +B<OSSP Shiela> 0.9.1 (27-Jun-2000)
   
   =head1 DESCRIPTION
   
  Index: ossp-pkg/shiela/shtool
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 shtool
  --- ossp-pkg/shiela/shtool	2000/07/18 15:27:59	1.2
  +++ ossp-pkg/shiela/shtool	2001/02/10 16:40:26	1.3
  @@ -1,12 +1,12 @@
   #!/bin/sh
   ##
   ##  GNU shtool -- The GNU Portable Shell Tool
  -##  Copyright (c) 1994-2000 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1994-2001 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  See http://www.gnu.org/software/shtool/ for more information.
   ##  See ftp://ftp.gnu.org/gnu/shtool/ for latest version.
   ##
  -##  Version:  1.5.0 (01-Jul-2000)
  +##  Version:  1.5.2 (05-Oct-2000)
   ##  Contents: 7/17 available modules
   ##
   
  @@ -65,8 +65,8 @@
       exit 1
   fi
   if [ ".$1" = ".-h" -o ".$1" = ".--help" ]; then
  -    echo "This is GNU shtool, version 1.5.0 (01-Jul-2000)"
  -    echo "Copyright (c) 1994-2000 Ralf S. Engelschall <rse@engelschall.com>"
  +    echo "This is GNU shtool, version 1.5.2 (05-Oct-2000)"
  +    echo "Copyright (c) 1994-2001 Ralf S. Engelschall <rse@engelschall.com>"
       echo "Report bugs to <bug-shtool@gnu.org>"
       echo ''
       echo "Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]" 
  @@ -80,7 +80,7 @@
       echo 'Available <cmd-name> [<cmd-options>] [<cmd-args>]:'
       echo '  echo     [-n] [-e] [<str> ...]'
       echo '  install  [-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>]'
  -    echo '           [-e<ext>] <file> [<file> ...] <path>'
  +    echo '           [-e<sed-cmd>] <file> [<file> ...] <path>'
       echo '  mkdir    [-t] [-f] [-p] [-m<mode>] <dir> [<dir> ...]'
       echo '  fixperm  [-v] [-t] <path> [<path> ...]'
       echo '  tarball  [-t] [-v] [-o <tarball>] [-c <prog>] [-d <dir>] [-u'
  @@ -105,7 +105,7 @@
       exit 0
   fi
   if [ ".$1" = ".-v" -o ".$1" = ."--version" ]; then
  -    echo "GNU shtool 1.5.0 (01-Jul-2000)"
  +    echo "GNU shtool 1.5.2 (05-Oct-2000)"
       exit 0
   fi
   if [ ".$1" = ".-r" -o ".$1" = ."--recreate" ]; then
  @@ -147,15 +147,15 @@
           ;;
       install )
           str_tool="install"
  -        str_usage="[-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>] [-e<ext>] <file> [<file> ...] <path>"
  +        str_usage="[-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>] [-e<sed-cmd>] <file> [<file> ...] <path>"
           arg_spec="2+"
  -        opt_spec="v.t.c.C.s.m:o:g:e:"
  +        opt_spec="v.t.c.C.s.m:o:g:e+"
           opt_v=no
           opt_t=no
           opt_c=no
           opt_C=no
           opt_s=no
  -        opt_m=""
  +        opt_m="0755"
           opt_o=""
           opt_g=""
           opt_e=""
  @@ -366,6 +366,7 @@
       tmpfile="$tmpdir/.shtool.$$"
       rm -f $tmpfile >/dev/null 2>&1
       touch $tmpfile
  +    chmod 600 $tmpfile
   fi
   
   ##
  @@ -377,7 +378,7 @@
   echo )
       ##
       ##  echo -- Print string with optional construct expansion
  -    ##  Copyright (c) 1998-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1998-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for WML as buildinfo
       ##
       
  @@ -600,7 +601,7 @@
   install )
       ##
       ##  install -- Install a program, script or datafile
  -    ##  Copyright (c) 1997-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1997-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for shtool
       ##
       
  @@ -630,19 +631,13 @@
       for src in $srcs; do
           dst=$dstpath
       
  -        #  If destination is a directory, append the input filename
  +        #   if destination is a directory, append the input filename
           if [ $dstisdir = 1 ]; then
               dstfile=`echo "$src" | sed -e 's;.*/\([^/]*\)$;\1;'`
               dst="$dst/$dstfile"
           fi
  -    
  -        #  Add a possible extension to src and dst
  -        if [ ".$opt_e" != . ]; then
  -            src="$src$opt_e"
  -            dst="$dst$opt_e"
  -        fi
       
  -        #  Check for correct arguments
  +        #   check for correct arguments
           if [ ".$src" = ".$dst" ]; then
               echo "$msgprefix:Warning: source and destination are the same - skipped" 1>&2
               continue
  @@ -652,18 +647,18 @@
               continue
           fi
       
  -        #  Make a temp file name in the destination directory
  +        #   make a temp file name in the destination directory
           dsttmp=`echo $dst |\
                   sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;' -e 's;^$;.;' \
                       -e "s;\$;/#INST@$$#;"`
       
  -        #  Verbosity
  +        #   verbosity
           if [ ".$opt_v" = .yes ]; then
               echo "$src -> $dst" 1>&2
           fi
       
  -        #  Copy or move the file name to the temp name
  -        #  (because we might be not allowed to change the source)
  +        #   copy or move the file name to the temp name
  +        #   (because we might be not allowed to change the source)
           if [ ".$opt_C" = .yes ]; then
               opt_c=yes
           fi
  @@ -679,8 +674,16 @@
               mv $src $dsttmp || exit $?
           fi
       
  -        #  Adjust the target file
  -        #  (we do chmod last to preserve setuid bits)
  +        #   adjust the target file
  +        if [ ".$opt_e" != . ]; then
  +            sed='sed'
  +            for e in $opt_e; do
  +                sed="$sed -e '$e'"
  +            done
  +            cp $dsttmp $dsttmp.old
  +            eval "$sed <$dsttmp.old >$dsttmp" || exit $?
  +            rm -f $dsttmp.old
  +        fi
           if [ ".$opt_s" = .yes ]; then
               if [ ".$opt_t" = .yes ]; then
                   echo "strip $dsttmp" 1>&2
  @@ -699,14 +702,14 @@
               fi
               chgrp $opt_g $dsttmp || exit $?
           fi
  -        if [ ".$opt_m" != . ]; then
  +        if [ ".$opt_m" != ".-" ]; then
               if [ ".$opt_t" = .yes ]; then
                   echo "chmod $opt_m $dsttmp" 1>&2
               fi
               chmod $opt_m $dsttmp || exit $?
           fi
       
  -        #   Determine whether to do a quick install
  +        #   determine whether to do a quick install
           #   (has to be done _after_ the strip was already done)
           quick=no
           if [ ".$opt_C" = .yes ]; then
  @@ -717,7 +720,7 @@
               fi
           fi
       
  -        #   Finally install the file to the real destination
  +        #   finally, install the file to the real destination
           if [ $quick = yes ]; then
               if [ ".$opt_t" = .yes ]; then
                   echo "rm -f $dsttmp" 1>&2
  @@ -735,7 +738,7 @@
   mkdir )
       ##
       ##  mkdir -- Make one or more directories
  -    ##  Copyright (c) 1996-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1996-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for public domain by Noah Friedman <friedman@prep.ai.mit.edu>
       ##  Cleaned up and enhanced for shtool
       ##
  @@ -744,7 +747,7 @@
       for p in ${1+"$@"}; do
           #   if the directory already exists...
           if [ -d "$p" ]; then
  -            if [ ".$opt_f" = .no ] && [ ".$opt_p" = .no ]; then
  +            if [ ".$opt_f" = .no -a ".$opt_p" = .no ]; then
                   echo "$msgprefix:Error: directory already exists: $p" 1>&2
                   errstatus=1
                   break
  @@ -794,7 +797,7 @@
   fixperm )
       ##
       ##  fixperm -- Fix file permissions inside a source tree
  -    ##  Copyright (c) 1996-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1996-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for ePerl
       ##
       
  @@ -850,7 +853,7 @@
   tarball )
       ##
       ##  tarball -- Roll distribution tarballs
  -    ##  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for shtool
       ##
       
  @@ -876,7 +879,7 @@
           for tool in `echo $tools | sed -e 's/,/ /g'`; do
               #   iterate over paths
               for path in $paths; do
  -                if [ $minusx "$path/$tool" ] && [ ! -d "$path/$tool" ]; then
  +                if [ $minusx "$path/$tool" -a ! -d "$path/$tool" ]; then
                       eval "prg_${prg}=\"$path/$tool\""
                       break
                   fi
  @@ -902,7 +905,7 @@
               if [ ".$opt_t" = .yes ]; then
                   echo "(cd $src && $prg_find . -type f -depth -print) | sed -e 's:^\\.\$::' -e 's:^\\./::' | cat $exclude >>$tmpfile.lst" 1>&2
               fi
  -            (cd $src && find . -type f -depth -print) |\
  +            (cd $src && $prg_find . -type f -depth -print) |\
               sed -e 's:^\.$::' -e 's:^\./::' | eval cat $exclude >>$tmpfile.lst
           else
               if [ ".$opt_t" = .yes ]; then
  @@ -1013,7 +1016,7 @@
   version )
       ##
       ##  version -- Maintain a version information file
  -    ##  Copyright (c) 1994-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1994-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for ePerl, rewritten from scratch for shtool
       ##
       
  @@ -1097,7 +1100,8 @@
           s     ) typnum=15; levnum=255  ;; # snapshots are special
       esac
       hex=`echo "$ver:$rev:$typnum:$levnum" |\
  -         awk -F: '{ printf("0x%X%02X%1X%02X", $1, $2, $3, $4); }'`
  +         awk -F: '{ printf("0x%x%02x%1x%02x", $1, $2, $3, $4); }' |\
  +         tr 'abcdef' 'ABCDEF'`
       ltv=`echo "$ver:$rev:$typnum:$levnum" |\
            awk -F: '{ printf("%d:%d", $1*10 + $2, $3*10 + $4); }'`
       
  @@ -1170,7 +1174,7 @@
           vGNU="${name} ${triple} (${tim})"
           vWeb="${name}/${triple}"
           vSCCS="@(#)${name} ${triple} (${tim})"
  -        vRCS="\$Id: shtool,v 1.2 2000/07/18 15:27:59 rse Exp ${name} ${triple} (${tim}) \$"
  +        vRCS="\$Id: shtool,v 1.3 2001/02/10 16:40:26 rse Exp ${name} ${triple} (${tim}) \$"
       
           #   determine string out of filename
           #   (do NOT try to optimize this in any way because of portability)
  @@ -1263,6 +1267,23 @@
                   echo >>$file "1;"
                   echo >>$file ""
                   ;;
  +            python )
  +                echo >>$file "##"
  +                echo >>$file "##  ${file} -- Version Information for ${name} (syntax: Python)"
  +                echo >>$file "##  [automatically generated and maintained by GNU shtool]"
  +                echo >>$file "##"
  +                echo >>$file ""
  +                echo >>$file "class ${prefix}version:"
  +                echo >>$file "    v_hex       = ${vHex}"
  +                echo >>$file "    v_short     = \"${vShort}\""
  +                echo >>$file "    v_long      = \"${vLong}\""
  +                echo >>$file "    v_tex       = \"${vTeX}\""
  +                echo >>$file "    v_gnu       = \"${vGNU}\""
  +                echo >>$file "    v_web       = \"${vWeb}\""
  +                echo >>$file "    v_sccs      = \"${vSCCS}\""
  +                echo >>$file "    v_rcs       = \"${vRCS}\""
  +                echo >>$file ""
  +                ;;
               * ) echo "$msgprefix:Error: invalid argument to option \`-l': \`$opt_l'" 1>&2
                   exit 1
                   ;;
  @@ -1273,7 +1294,7 @@
   path )
       ##
       ##  path -- Deal with program paths
  -    ##  Copyright (c) 1998-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1998-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for Apache
       ##
       
  @@ -1323,7 +1344,7 @@
       
       #   MAGIC SITUATION
       #   Perl Interpreter (perl)
  -    if [ ".$opt_m" = .yes ] && [ ".$namelist" = .perl ]; then
  +    if [ ".$opt_m" = .yes  -a ".$namelist" = .perl ]; then
           rm -f $tmpfile
           touch $tmpfile
           found=0
  @@ -1332,7 +1353,7 @@
               dir=`echo $dir | sed -e 's;/*$;;'`
               nc=99
               for name in perl perl5 miniperl; do
  -                 if [ $minusx "$dir/$name" ] && [ ! -d "$dir/$name" ]; then
  +                 if [ $minusx "$dir/$name" -a ! -d "$dir/$name" ]; then
                        perl="$dir/$name"
                        pv=`$perl -e 'printf("%.3f", $]);'`
                        echo "$pv:$pc:$nc:$perl" >>$tmpfile
  @@ -1353,7 +1374,7 @@
       
       #   MAGIC SITUATION
       #   C pre-processor (cpp)
  -    if [ ".$opt_m" = .yes ] && [ ".$namelist" = .cpp ]; then
  +    if [ ".$opt_m" = .yes -a ".$namelist" = .cpp ]; then
           echo >$tmpfile.c "#include <assert.h>"
           echo >>$tmpfile.c "Syntax Error"
           #   1. try the standard cc -E approach
  @@ -1369,7 +1390,7 @@
                   #   3. try a standalone cpp command in path and lib dirs
                   for path in $paths /lib /usr/lib /usr/local/lib; do
                       path=`echo $path | sed -e 's;/*$;;'`
  -                    if [ $minusx "$path/cpp" ] && [ ! -d "$path/cpp" ]; then
  +                    if [ $minusx "$path/cpp" -a ! -d "$path/cpp" ]; then
                           cpp="$path/cpp"
                           break
                       fi
  @@ -1398,7 +1419,7 @@
           #   iterate over paths
           for path in $paths; do
               path=`echo $path | sed -e 's;/*$;;'`
  -            if [ $minusx "$path/$name" ] && [ ! -d "$path/$name" ]; then
  +            if [ $minusx "$path/$name" -a ! -d "$path/$name" ]; then
                   if [ ".$opt_s" != .yes ]; then
                       echo "$path/$name"
                   fi

From ossp-cvs-owner@ossp.org  Mon Feb 12 15:50:14 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f1CEoD317393; Mon, 12 Feb 2001 15:50:13 +0100 (CET)
Date: Mon, 12 Feb 2001 15:50:13 +0100 (CET)
Message-Id: <200102121450.f1CEoD317393@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sfio .configure aclocal.m4 configure.in ossp-pkg/...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   12-Feb-2001 15:50:13
  Branch: HEAD                             Handle: 2001021214501101

  Modified files:
    ossp-pkg/sfio           .configure aclocal.m4 configure.in
    ossp-pkg/sfio/etc       config.guess config.sub shtool

  Log:
    Upgrade development scripts

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/sfio/.configure
    1.2         +31 -24     ossp-pkg/sfio/aclocal.m4
    1.10        +2  -2      ossp-pkg/sfio/configure.in
    1.3         +591 -157   ossp-pkg/sfio/etc/config.guess
    1.3         +203 -70    ossp-pkg/sfio/etc/config.sub
    1.4         +74 -52     ossp-pkg/sfio/etc/shtool
  ____________________________________________________________________________

  Index: ossp-pkg/sfio/.configure
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 .configure
  --- ossp-pkg/sfio/.configure	1999/11/12 14:43:46	1.2
  +++ ossp-pkg/sfio/.configure	2001/02/12 14:50:11	1.3
  @@ -1,5 +1,5 @@
   #!/bin/sh
  -CC="egcc" \
  +CC="ggcc" \
   CFLAGS="-pipe -O2 -Wall -Wshadow -Wpointer-arith -Wcast-align -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline" \
   ./configure \
   --prefix=/sw/pkg/sfio \
  Index: ossp-pkg/sfio/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 aclocal.m4
  --- ossp-pkg/sfio/aclocal.m4	1999/11/12 14:42:20	1.1
  +++ ossp-pkg/sfio/aclocal.m4	2001/02/12 14:50:11	1.2
  @@ -1,5 +1,5 @@
   ## libtool.m4 - Configure libtool for the target system. -*-Shell-script-*-
  -## Copyright (C) 1996-1999 Free Software Foundation, Inc.
  +## Copyright (C) 1996-1999, 2000 Free Software Foundation, Inc.
   ## Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
   ##
   ## This program is free software; you can redistribute it and/or modify
  @@ -34,7 +34,7 @@
   LN_S="$LN_S" NM="$NM" RANLIB="$RANLIB" \
   DLLTOOL="$DLLTOOL" AS="$AS" OBJDUMP="$OBJDUMP" \
   ${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig --no-reexec \
  -$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $host \
  +$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $lt_target \
   || AC_MSG_ERROR([libtool configure failed])
   
   # Reload cache, that may have been modified by ltconfig
  @@ -66,6 +66,11 @@
   AC_REQUIRE([AC_PROG_LN_S])dnl
   dnl
   
  +case "$target" in
  +NONE) lt_target="$host" ;;
  +*) lt_target="$target" ;;
  +esac
  +
   # Check for any special flags to pass to ltconfig.
   libtool_flags="--cache-file=$cache_file"
   test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared"
  @@ -84,7 +89,7 @@
   
   # Some flags need to be propagated to the compiler or linker for good
   # libtool support.
  -case "$host" in
  +case "$lt_target" in
   *-*-irix6*)
     # Find out which ABI we are using.
     echo '[#]line __oline__ "configure"' > conftest.$ac_ext
  @@ -300,7 +305,6 @@
     AC_MSG_RESULT(no)
   fi
   test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
  -AC_SUBST(LD)
   AC_PROG_LD_GNU
   ])
   
  @@ -346,14 +350,13 @@
   fi])
   NM="$ac_cv_path_NM"
   AC_MSG_RESULT([$NM])
  -AC_SUBST(NM)
   ])
   
   # AC_CHECK_LIBM - check for math library
   AC_DEFUN(AC_CHECK_LIBM,
   [AC_REQUIRE([AC_CANONICAL_HOST])dnl
   LIBM=
  -case "$host" in
  +case "$lt_target" in
   *-*-beos* | *-*-cygwin*)
     # These system don't have libm
     ;;
  @@ -368,31 +371,35 @@
   ])
   
   # AC_LIBLTDL_CONVENIENCE[(dir)] - sets LIBLTDL to the link flags for
  -# the libltdl convenience library, adds --enable-ltdl-convenience to
  -# the configure arguments.  Note that LIBLTDL is not AC_SUBSTed, nor
  -# is AC_CONFIG_SUBDIRS called.  If DIR is not provided, it is assumed
  -# to be `${top_builddir}/libltdl'.  Make sure you start DIR with
  -# '${top_builddir}/' (note the single quotes!) if your package is not
  -# flat, and, if you're not using automake, define top_builddir as
  -# appropriate in the Makefiles.
  +# the libltdl convenience library and INCLTDL to the include flags for
  +# the libltdl header and adds --enable-ltdl-convenience to the
  +# configure arguments.  Note that LIBLTDL and INCLTDL are not
  +# AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called.  If DIR is not
  +# provided, it is assumed to be `libltdl'.  LIBLTDL will be prefixed
  +# with '${top_builddir}/' and INCLTDL will be prefixed with
  +# '${top_srcdir}/' (note the single quotes!).  If your package is not
  +# flat and you're not using automake, define top_builddir and
  +# top_srcdir appropriately in the Makefiles.
   AC_DEFUN(AC_LIBLTDL_CONVENIENCE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
     case "$enable_ltdl_convenience" in
     no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
     "") enable_ltdl_convenience=yes
         ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
     esac
  -  LIBLTDL=ifelse($#,1,$1,['${top_builddir}/libltdl'])/libltdlc.la
  -  INCLTDL=ifelse($#,1,-I$1,['-I${top_builddir}/libltdl'])
  +  LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la
  +  INCLTDL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
   ])
   
   # AC_LIBLTDL_INSTALLABLE[(dir)] - sets LIBLTDL to the link flags for
  -# the libltdl installable library, and adds --enable-ltdl-install to
  -# the configure arguments.  Note that LIBLTDL is not AC_SUBSTed, nor
  -# is AC_CONFIG_SUBDIRS called.  If DIR is not provided, it is assumed
  -# to be `${top_builddir}/libltdl'.  Make sure you start DIR with
  -# '${top_builddir}/' (note the single quotes!) if your package is not
  -# flat, and, if you're not using automake, define top_builddir as
  -# appropriate in the Makefiles.
  +# the libltdl installable library and INCLTDL to the include flags for
  +# the libltdl header and adds --enable-ltdl-install to the configure
  +# arguments.  Note that LIBLTDL and INCLTDL are not AC_SUBSTed, nor is
  +# AC_CONFIG_SUBDIRS called.  If DIR is not provided and an installed
  +# libltdl is not found, it is assumed to be `libltdl'.  LIBLTDL will
  +# be prefixed with '${top_builddir}/' and INCLTDL will be prefixed
  +# with '${top_srcdir}/' (note the single quotes!).  If your package is
  +# not flat and you're not using automake, define top_builddir and
  +# top_srcdir appropriately in the Makefiles.
   # In the future, this macro may have to be called after AC_PROG_LIBTOOL.
   AC_DEFUN(AC_LIBLTDL_INSTALLABLE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
     AC_CHECK_LIB(ltdl, main,
  @@ -405,8 +412,8 @@
     ])
     if test x"$enable_ltdl_install" = x"yes"; then
       ac_configure_args="$ac_configure_args --enable-ltdl-install"
  -    LIBLTDL=ifelse($#,1,$1,['${top_builddir}/libltdl'])/libltdl.la
  -    INCLTDL=ifelse($#,1,-I$1,['-I${top_builddir}/libltdl'])
  +    LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la
  +    INCLTDL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
     else
       ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
       LIBLTDL="-lltdl"
  Index: ossp-pkg/sfio/configure.in
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 configure.in
  --- ossp-pkg/sfio/configure.in	1999/11/12 15:18:33	1.9
  +++ ossp-pkg/sfio/configure.in	2001/02/12 14:50:11	1.10
  @@ -2,8 +2,8 @@
   dnl ##   Autoconf specification for Sfio library
   dnl ##
   
  -AC_PREREQ(2.12)dnl
  -AC_REVISION($Revision: 1.9 $)
  +AC_PREREQ(2.13)dnl
  +AC_REVISION($Revision: 1.10 $)
   
   SHTOOL="./etc/shtool"
   AC_SUBST(SHTOOL)
  Index: ossp-pkg/sfio/etc/config.guess
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 config.guess
  --- ossp-pkg/sfio/etc/config.guess	2000/07/03 14:15:16	1.2
  +++ ossp-pkg/sfio/etc/config.guess	2001/02/12 14:50:12	1.3
  @@ -1,8 +1,10 @@
   #! /bin/sh
   # Attempt to guess a canonical system name.
  -#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999
  +#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
   #   Free Software Foundation, Inc.
  -#
  +
  +timestamp='2001-01-17'
  +
   # This file is free software; you can redistribute it and/or modify it
   # under the terms of the GNU General Public License as published by
   # the Free Software Foundation; either version 2 of the License, or
  @@ -23,34 +25,97 @@
   # the same distribution terms that you use for the rest of that program.
   
   # Written by Per Bothner <bothner@cygnus.com>.
  -# The master version of this file is at the FSF in /home/gd/gnu/lib.
  -# Please send patches to the Autoconf mailing list <autoconf@gnu.org>.
  +# Please send patches to <config-patches@gnu.org>.
   #
   # This script attempts to guess a canonical system name similar to
   # config.sub.  If it succeeds, it prints the system name on stdout, and
   # exits with 0.  Otherwise, it exits with 1.
   #
   # The plan is that this can be called by configure scripts if you
  -# don't specify an explicit system type (host/target name).
  +# don't specify an explicit build system type.
   #
   # Only a few systems have been added to this list; please add others
   # (but try to keep the structure clean).
   #
   
  -# Use $HOST_CC if defined. $CC may point to a cross-compiler
  -if test x"$CC_FOR_BUILD" = x; then
  -  if test x"$HOST_CC" != x; then
  -    CC_FOR_BUILD="$HOST_CC"
  -  else
  -    if test x"$CC" != x; then
  -      CC_FOR_BUILD="$CC"
  -    else
  -      CC_FOR_BUILD=cc
  -    fi
  -  fi
  +me=`echo "$0" | sed -e 's,.*/,,'`
  +
  +usage="\
  +Usage: $0 [OPTION]
  +
  +Output the configuration name of the system \`$me' is run on.
  +
  +Operation modes:
  +  -h, --help         print this help, then exit
  +  -t, --time-stamp   print date of last modification, then exit
  +  -v, --version      print version number, then exit
  +
  +Report bugs and patches to <config-patches@gnu.org>."
  +
  +version="\
  +GNU config.guess ($timestamp)
  +
  +Originally written by Per Bothner.
  +Copyright (C) 1992, 93, 94, 95, 96, 97, 98, 99, 2000
  +Free Software Foundation, Inc.
  +
  +This is free software; see the source for copying conditions.  There is NO
  +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
  +
  +help="
  +Try \`$me --help' for more information."
  +
  +# Parse command line
  +while test $# -gt 0 ; do
  +  case $1 in
  +    --time-stamp | --time* | -t )
  +       echo "$timestamp" ; exit 0 ;;
  +    --version | -v )
  +       echo "$version" ; exit 0 ;;
  +    --help | --h* | -h )
  +       echo "$usage"; exit 0 ;;
  +    -- )     # Stop option processing
  +       shift; break ;;
  +    - )	# Use stdin as input.
  +       break ;;
  +    -* )
  +       echo "$me: invalid option $1$help" >&2
  +       exit 1 ;;
  +    * )
  +       break ;;
  +  esac
  +done
  +
  +if test $# != 0; then
  +  echo "$me: too many arguments$help" >&2
  +  exit 1
   fi
   
   
  +dummy=dummy-$$
  +trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15
  +
  +# CC_FOR_BUILD -- compiler used by this script.
  +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
  +# use `HOST_CC' if defined, but it is deprecated.
  +
  +case $CC_FOR_BUILD,$HOST_CC,$CC in
  + ,,)    echo "int dummy(){}" > $dummy.c
  +	for c in cc gcc c89 ; do
  +	  ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1
  +	  if test $? = 0 ; then
  +	     CC_FOR_BUILD="$c"; break
  +	  fi
  +	done
  +	rm -f $dummy.c $dummy.o $dummy.rel
  +	if test x"$CC_FOR_BUILD" = x ; then
  +	  CC_FOR_BUILD=no_compiler_found
  +	fi
  +	;;
  + ,,*)   CC_FOR_BUILD=$CC ;;
  + ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
  +esac
  +
   # This is needed to find uname on a Pyramid OSx when run in the BSD universe.
   # (ghazi@noc.rutgers.edu 8/24/94.)
   if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
  @@ -59,15 +124,57 @@
   
   UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
   UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
  -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
  +UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
   UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
   
  -dummy=dummy-$$
  -trap 'rm -f $dummy.c $dummy.o $dummy; exit 1' 1 2 15
  -
   # Note: order is significant - the case branches are not exclusive.
   
   case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
  +    *:NetBSD:*:*)
  +	# Netbsd (nbsd) targets should (where applicable) match one or
  +	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
  +	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
  +	# switched to ELF, *-*-netbsd* would select the old
  +	# object file format.  This provides both forward
  +	# compatibility and a consistent mechanism for selecting the
  +	# object file format.
  +	# Determine the machine/vendor (is the vendor relevant).
  +	case "${UNAME_MACHINE}" in
  +	    amiga) machine=m68k-unknown ;;
  +	    arm32) machine=arm-unknown ;;
  +	    atari*) machine=m68k-atari ;;
  +	    sun3*) machine=m68k-sun ;;
  +	    mac68k) machine=m68k-apple ;;
  +	    macppc) machine=powerpc-apple ;;
  +	    hp3[0-9][05]) machine=m68k-hp ;;
  +	    ibmrt|romp-ibm) machine=romp-ibm ;;
  +	    *) machine=${UNAME_MACHINE}-unknown ;;
  +	esac
  +	# The Operating System including object format, if it has switched
  +	# to ELF recently, or will in the future.
  +	case "${UNAME_MACHINE}" in
  +	    i386|sparc|amiga|arm*|hp300|mvme68k|vax|atari|luna68k|mac68k|news68k|next68k|pc532|sun3*|x68k)
  +		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
  +			| grep __ELF__ >/dev/null
  +		then
  +		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
  +		    # Return netbsd for either.  FIX?
  +		    os=netbsd
  +		else
  +		    os=netbsdelf
  +		fi
  +		;;
  +	    *)
  +	        os=netbsd
  +		;;
  +	esac
  +	# The OS release
  +	release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
  +	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
  +	# contains redundant information, the shorter form:
  +	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
  +	echo "${machine}-${os}${release}"
  +	exit 0 ;;
       alpha:OSF1:*:*)
   	if test $UNAME_RELEASE = "V4.0"; then
   		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
  @@ -77,41 +184,51 @@
   	# A Xn.n version is an unreleased experimental baselevel.
   	# 1.2 uses "1.2" for uname -r.
   	cat <<EOF >$dummy.s
  +	.data
  +\$Lformat:
  +	.byte 37,100,45,37,120,10,0	# "%d-%x\n"
  +
  +	.text
   	.globl main
  +	.align 4
   	.ent main
   main:
  -	.frame \$30,0,\$26,0
  -	.prologue 0
  -	.long 0x47e03d80 # implver $0
  -	lda \$2,259
  -	.long 0x47e20c21 # amask $2,$1
  -	srl \$1,8,\$2
  -	sll \$2,2,\$2
  -	sll \$0,3,\$0
  -	addl \$1,\$0,\$0
  -	addl \$2,\$0,\$0
  -	ret \$31,(\$26),1
  +	.frame \$30,16,\$26,0
  +	ldgp \$29,0(\$27)
  +	.prologue 1
  +	.long 0x47e03d80 # implver \$0
  +	lda \$2,-1
  +	.long 0x47e20c21 # amask \$2,\$1
  +	lda \$16,\$Lformat
  +	mov \$0,\$17
  +	not \$1,\$18
  +	jsr \$26,printf
  +	ldgp \$29,0(\$26)
  +	mov 0,\$16
  +	jsr \$26,exit
   	.end main
   EOF
   	$CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
   	if test "$?" = 0 ; then
  -		./$dummy
  -		case "$?" in
  -			7)
  +		case `./$dummy` in
  +			0-0)
   				UNAME_MACHINE="alpha"
   				;;
  -			15)
  +			1-0)
   				UNAME_MACHINE="alphaev5"
   				;;
  -			14)
  +			1-1)
   				UNAME_MACHINE="alphaev56"
   				;;
  -			10)
  +			1-101)
   				UNAME_MACHINE="alphapca56"
   				;;
  -			16)
  +			2-303)
   				UNAME_MACHINE="alphaev6"
   				;;
  +			2-307)
  +				UNAME_MACHINE="alphaev67"
  +				;;
   		esac
   	fi
   	rm -f $dummy.s $dummy
  @@ -127,11 +244,8 @@
   	echo alpha-dec-winnt3.5
   	exit 0 ;;
       Amiga*:UNIX_System_V:4.0:*)
  -	echo m68k-cbm-sysv4
  +	echo m68k-unknown-sysv4
   	exit 0;;
  -    amiga:NetBSD:*:*)
  -      echo m68k-cbm-netbsd${UNAME_RELEASE}
  -      exit 0 ;;
       amiga:OpenBSD:*:*)
   	echo m68k-unknown-openbsd${UNAME_RELEASE}
   	exit 0 ;;
  @@ -156,13 +270,13 @@
       wgrisc:OpenBSD:*:*)
   	echo mipsel-unknown-openbsd${UNAME_RELEASE}
   	exit 0 ;;
  +    *:OS/390:*:*)
  +	echo i370-ibm-openedition
  +	exit 0 ;;
       arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
   	echo arm-acorn-riscix${UNAME_RELEASE}
   	exit 0;;
  -    arm32:NetBSD:*:*)
  -	echo arm-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
  -	exit 0 ;;
  -    SR2?01:HI-UX/MPP:*:*)
  +    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
   	echo hppa1.1-hitachi-hiuxmpp
   	exit 0;;
       Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
  @@ -218,9 +332,6 @@
       aushp:SunOS:*:*)
   	echo sparc-auspex-sunos${UNAME_RELEASE}
   	exit 0 ;;
  -    atari*:NetBSD:*:*)
  -	echo m68k-atari-netbsd${UNAME_RELEASE}
  -	exit 0 ;;
       atari*:OpenBSD:*:*)
   	echo m68k-unknown-openbsd${UNAME_RELEASE}
   	exit 0 ;;
  @@ -250,15 +361,9 @@
       *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
           echo m68k-unknown-mint${UNAME_RELEASE}
           exit 0 ;;
  -    sun3*:NetBSD:*:*)
  -	echo m68k-sun-netbsd${UNAME_RELEASE}
  -	exit 0 ;;
       sun3*:OpenBSD:*:*)
   	echo m68k-unknown-openbsd${UNAME_RELEASE}
   	exit 0 ;;
  -    mac68k:NetBSD:*:*)
  -	echo m68k-apple-netbsd${UNAME_RELEASE}
  -	exit 0 ;;
       mac68k:OpenBSD:*:*)
   	echo m68k-unknown-openbsd${UNAME_RELEASE}
   	exit 0 ;;
  @@ -271,9 +376,6 @@
       powerpc:machten:*:*)
   	echo powerpc-apple-machten${UNAME_RELEASE}
   	exit 0 ;;
  -    macppc:NetBSD:*:*)
  -        echo powerpc-apple-netbsd${UNAME_RELEASE}
  -        exit 0 ;;
       RISC*:Mach:*:*)
   	echo mips-dec-mach_bsd4.3
   	exit 0 ;;
  @@ -289,6 +391,7 @@
       mips:*:*:UMIPS | mips:*:*:RISCos)
   	sed 's/^	//' << EOF >$dummy.c
   #ifdef __cplusplus
  +#include <stdio.h>  /* for printf() prototype */
   	int main (int argc, char *argv[]) {
   #else
   	int main (argc, argv) int argc; char *argv[]; {
  @@ -328,15 +431,18 @@
       AViiON:dgux:*:*)
           # DG/UX returns AViiON for all architectures
           UNAME_PROCESSOR=`/usr/bin/uname -p`
  -        if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then
  -	if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \
  -	     -o ${TARGET_BINARY_INTERFACE}x = x ] ; then
  +	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
  +	then
  +	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
  +	       [ ${TARGET_BINARY_INTERFACE}x = x ]
  +	    then
   		echo m88k-dg-dgux${UNAME_RELEASE}
  -	else
  +	    else
   		echo m88k-dg-dguxbcs${UNAME_RELEASE}
  +	    fi
  +	else
  +	    echo i586-dg-dgux${UNAME_RELEASE}
   	fi
  -        else echo i586-dg-dgux${UNAME_RELEASE}
  -        fi
    	exit 0 ;;
       M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
   	echo m88k-dolphin-sysv3
  @@ -396,13 +502,26 @@
   	fi
   	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
   	exit 0 ;;
  +    *:AIX:*:5)
  +	case "`lsattr -El proc0 -a type -F value`" in
  +	    PowerPC*) IBM_ARCH=powerpc
  +		      IBM_MANUF=ibm ;;
  +	    Itanium)  IBM_ARCH=ia64
  +		      IBM_MANUF=unknown ;;
  +	    POWER*)   IBM_ARCH=power
  +		      IBM_MANUF=ibm ;;
  +	    *)        IBM_ARCH=powerpc
  +		      IBM_MANUF=ibm ;;
  +	esac
  +	echo ${IBM_ARCH}-${IBM_MANUF}-aix${UNAME_VERSION}.${UNAME_RELEASE}
  +	exit 0 ;;
       *:AIX:*:*)
   	echo rs6000-ibm-aix
   	exit 0 ;;
       ibmrt:4.4BSD:*|romp-ibm:BSD:*)
   	echo romp-ibm-bsd4.4
   	exit 0 ;;
  -    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC NetBSD and
  +    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
   	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
   	exit 0 ;;                           # report: romp-ibm BSD 4.3
       *:BOSX:*:*)
  @@ -418,11 +537,31 @@
   	echo m68k-hp-bsd4.4
   	exit 0 ;;
       9000/[34678]??:HP-UX:*:*)
  +	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
   	case "${UNAME_MACHINE}" in
   	    9000/31? )            HP_ARCH=m68000 ;;
   	    9000/[34]?? )         HP_ARCH=m68k ;;
   	    9000/[678][0-9][0-9])
  +              case "${HPUX_REV}" in
  +                11.[0-9][0-9])
  +                  if [ -x /usr/bin/getconf ]; then
  +                    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
  +                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
  +                    case "${sc_cpu_version}" in
  +                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
  +                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
  +                      532)                      # CPU_PA_RISC2_0
  +                        case "${sc_kernel_bits}" in
  +                          32) HP_ARCH="hppa2.0n" ;;
  +                          64) HP_ARCH="hppa2.0w" ;;
  +                        esac ;;
  +                    esac
  +                  fi ;;
  +              esac
  +              if [ "${HP_ARCH}" = "" ]; then
                 sed 's/^              //' << EOF >$dummy.c
  +
  +              #define _HPUX_SOURCE
                 #include <stdlib.h>
                 #include <unistd.h>
   
  @@ -453,12 +592,17 @@
                     exit (0);
                 }
   EOF
  -	($CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
  +	(CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
  +	if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi
   	rm -f $dummy.c $dummy
  +	fi ;;
   	esac
  -	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
   	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
   	exit 0 ;;
  +    ia64:HP-UX:*:*)
  +	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
  +	echo ia64-hp-hpux${HPUX_REV}
  +	exit 0 ;;
       3050*:HI-UX:*:*)
   	sed 's/^	//' << EOF >$dummy.c
   	#include <unistd.h>
  @@ -547,29 +691,30 @@
   	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
   	exit 0 ;;
       CRAY*TS:*:*:*)
  -	echo t90-cray-unicos${UNAME_RELEASE}
  +	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
   	exit 0 ;;
  +    CRAY*T3D:*:*:*)
  +	echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
  +	exit 0 ;;
       CRAY*T3E:*:*:*)
  -	echo t3e-cray-unicosmk${UNAME_RELEASE}
  +	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
  +	exit 0 ;;
  +    CRAY*SV1:*:*:*)
  +	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
   	exit 0 ;;
       CRAY-2:*:*:*)
   	echo cray2-cray-unicos
           exit 0 ;;
  -    F300:UNIX_System_V:*:*)
  +    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
  +	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
           FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
           FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
  -        echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
  +        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
           exit 0 ;;
  -    F301:UNIX_System_V:*:*)
  -       echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'`
  -       exit 0 ;;
  -    hp3[0-9][05]:NetBSD:*:*)
  -	echo m68k-hp-netbsd${UNAME_RELEASE}
  -	exit 0 ;;
       hp300:OpenBSD:*:*)
   	echo m68k-unknown-openbsd${UNAME_RELEASE}
   	exit 0 ;;
  -    i?86:BSD/386:*:* | i?86:BSD/OS:*:*)
  +    i?86:BSD/386:*:* | i?86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
   	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
   	exit 0 ;;
       sparc*:BSD/OS:*:*)
  @@ -579,25 +724,7 @@
   	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
   	exit 0 ;;
       *:FreeBSD:*:*)
  -	# echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
  -        VERS=`echo ${UNAME_RELEASE} | sed -e 's/[-(].*//'`
  -        MACH=`/sbin/sysctl -n hw.model`
  -        ARCH='unknown'
  -        case ${MACH} in
  -           *386*       ) MACH="i386" ;;
  -           *486*       ) MACH="i486" ;;
  -           Pentium\ II*) MACH="i686" ;;
  -           Pentium*    ) MACH="i586" ;;
  -           Alpha*      ) MACH="alpha" ;;
  -           *           ) MACH="$UNAME_MACHINE" ;;
  -        esac
  -        case ${MACH} in
  -           i[0-9]86 ) ARCH="pc" ;;
  -        esac
  -        echo "${MACH}-${ARCH}-freebsd${VERS}"
  -	exit 0 ;;
  -    *:NetBSD:*:*)
  -	echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
  +	echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
   	exit 0 ;;
       *:OpenBSD:*:*)
   	echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
  @@ -608,6 +735,9 @@
       i*:MINGW*:*)
   	echo ${UNAME_MACHINE}-pc-mingw32
   	exit 0 ;;
  +    i*:PW*:*)
  +	echo ${UNAME_MACHINE}-pc-pw32
  +	exit 0 ;;
       i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
   	# How do we know it's Interix rather than the generic POSIX subsystem?
   	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
  @@ -626,61 +756,246 @@
       *:GNU:*:*)
   	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
   	exit 0 ;;
  +    i*86:Minix:*:*)
  +	echo ${UNAME_MACHINE}-pc-minix
  +	exit 0 ;;
       *:Linux:*:*)
  -	# determine canonical machine name
  -	MACHINE="$UNAME_MACHINE"
  -	case "$MACHINE" in
  -	    arm*|sa110*) MACHINE="arm" ;;
  -	esac
  -
  -        # determine (distribution) vendor
  -	VENDOR="gnu"
  -	for tagfile in dummy `cd /etc && echo *-release *_version 2>/dev/null`; do
  -	    test ! -f /etc/$tagfile && continue
  -	    VENDOR=`echo $tagfile | sed -e 's/-release$//' -e 's/_version$//' |\
  -	            tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
  -	done
   
  -	# determine kernel version
  -	KERNEL=`echo ${UNAME_RELEASE} | sed -e 's/^\([0-9]*\.[0-9]*\)\..*$/\1/'`
  -
  -	# determine [g]libc version
  -	cat >$dummy.c <<EOF
  -#include <stdio.h>
  +	# The BFD linker knows what the default object file format is, so
  +	# first see if it will tell us. cd to the root directory to prevent
  +	# problems with other programs or directories called `ld' in the path.
  +	ld_supported_emulations=`cd /; ld --help 2>&1 \
  +			 | sed -ne '/supported emulations:/!d
  +				    s/[ 	][ 	]*/ /g
  +				    s/.*supported emulations: *//
  +				    s/ .*//
  +				    p'`
  +        case "$ld_supported_emulations" in
  +	  *ia64)
  +		echo "${UNAME_MACHINE}-unknown-linux"
  +		exit 0
  +		;;
  +	  i?86linux)
  +		echo "${UNAME_MACHINE}-pc-linux-gnuaout"
  +		exit 0
  +		;;
  +	  elf_i?86)
  +		TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
  +		;;
  +	  i?86coff)
  +		echo "${UNAME_MACHINE}-pc-linux-gnucoff"
  +		exit 0
  +		;;
  +	  sparclinux)
  +		echo "${UNAME_MACHINE}-unknown-linux-gnuaout"
  +		exit 0
  +		;;
  +	  elf32_sparc)
  +		echo "${UNAME_MACHINE}-unknown-linux-gnu"
  +		exit 0
  +		;;
  +	  armlinux)
  +		echo "${UNAME_MACHINE}-unknown-linux-gnuaout"
  +		exit 0
  +		;;
  +	  elf32arm*)
  +		echo "${UNAME_MACHINE}-unknown-linux-gnuoldld"
  +		exit 0
  +		;;
  +	  armelf_linux*)
  +		echo "${UNAME_MACHINE}-unknown-linux-gnu"
  +		exit 0
  +		;;
  +	  m68klinux)
  +		echo "${UNAME_MACHINE}-unknown-linux-gnuaout"
  +		exit 0
  +		;;
  +	  elf32ppc | elf32ppclinux)
  +		# Determine Lib Version
  +		cat >$dummy.c <<EOF
   #include <features.h>
  +#if defined(__GLIBC__)
  +extern char __libc_version[];
  +extern char __libc_release[];
  +#endif
   main(argc, argv)
  -int argc;
  -char *argv[];
  +     int argc;
  +     char *argv[];
   {
  -#if defined(__GLIBC__) && !defined(__GLIBC_MINOR__)
  -    printf("%d", __GLIBC__);
  -#elif defined(__GLIBC__) && defined(__GLIBC_MINOR__)
  -    printf("%d.%d", __GLIBC__, __GLIBC_MINOR__);
  -#elif defined(__GNU_LIBRARY__)
  -    printf("%d", __GNU_LIBRARY__);
  +#if defined(__GLIBC__)
  +  printf("%s %s\n", __libc_version, __libc_release);
   #else
  -    printf("1");
  +  printf("unkown\n");
   #endif
  -    return 0;
  +  return 0;
   }
   EOF
  -	LIBC="1"
  -	$CC_FOR_BUILD $dummy.c -o $dummy # 2>/dev/null
  -	if [ $? = 0 ]; then
  -	    LIBC=`./$dummy | sed -e 's/^\([0-9]*\.[0-9]*\)\..*$/\1/'`
  -	fi
  -	rm -f $dummy.c $dummy
  +		LIBC=""
  +		$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null
  +		if test "$?" = 0 ; then
  +			./$dummy | grep 1\.99 > /dev/null
  +			if test "$?" = 0 ; then
  +				LIBC="libc1"
  +			fi
  +		fi
  +		rm -f $dummy.c $dummy
  +		echo powerpc-unknown-linux-gnu${LIBC}
  +		exit 0
  +		;;
  +	  shelf_linux)
  +		echo "${UNAME_MACHINE}-unknown-linux-gnu"
  +		exit 0
  +		;;
  +	esac
   
  -	echo "${MACHINE}-${VENDOR}-linux${KERNEL}glibc${LIBC}"
  -	;;
  +	if test "${UNAME_MACHINE}" = "alpha" ; then
  +		cat <<EOF >$dummy.s
  +			.data
  +		\$Lformat:
  +			.byte 37,100,45,37,120,10,0	# "%d-%x\n"
  +
  +			.text
  +			.globl main
  +			.align 4
  +			.ent main
  +		main:
  +			.frame \$30,16,\$26,0
  +			ldgp \$29,0(\$27)
  +			.prologue 1
  +			.long 0x47e03d80 # implver \$0
  +			lda \$2,-1
  +			.long 0x47e20c21 # amask \$2,\$1
  +			lda \$16,\$Lformat
  +			mov \$0,\$17
  +			not \$1,\$18
  +			jsr \$26,printf
  +			ldgp \$29,0(\$26)
  +			mov 0,\$16
  +			jsr \$26,exit
  +			.end main
  +EOF
  +		LIBC=""
  +		$CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
  +		if test "$?" = 0 ; then
  +			case `./$dummy` in
  +			0-0)
  +				UNAME_MACHINE="alpha"
  +				;;
  +			1-0)
  +				UNAME_MACHINE="alphaev5"
  +				;;
  +			1-1)
  +				UNAME_MACHINE="alphaev56"
  +				;;
  +			1-101)
  +				UNAME_MACHINE="alphapca56"
  +				;;
  +			2-303)
  +				UNAME_MACHINE="alphaev6"
  +				;;
  +			2-307)
  +				UNAME_MACHINE="alphaev67"
  +				;;
  +			esac
  +
  +			objdump --private-headers $dummy | \
  +			  grep ld.so.1 > /dev/null
  +			if test "$?" = 0 ; then
  +				LIBC="libc1"
  +			fi
  +		fi
  +		rm -f $dummy.s $dummy
  +		echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0
  +	elif test "${UNAME_MACHINE}" = "mips" ; then
  +	  cat >$dummy.c <<EOF
  +#ifdef __cplusplus
  +#include <stdio.h>  /* for printf() prototype */
  +	int main (int argc, char *argv[]) {
  +#else
  +	int main (argc, argv) int argc; char *argv[]; {
  +#endif
  +#ifdef __MIPSEB__
  +  printf ("%s-unknown-linux-gnu\n", argv[1]);
  +#endif
  +#ifdef __MIPSEL__
  +  printf ("%sel-unknown-linux-gnu\n", argv[1]);
  +#endif
  +  return 0;
  +}
  +EOF
  +	  $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0
  +	  rm -f $dummy.c $dummy
  +	elif test "${UNAME_MACHINE}" = "s390"; then
  +	  echo s390-ibm-linux && exit 0
  +	elif test "${UNAME_MACHINE}" = "x86_64"; then
  +	  echo x86_64-unknown-linux-gnu && exit 0
  +	elif test "${UNAME_MACHINE}" = "parisc64" -o "${UNAME_MACHINE}" = "hppa64"; then
  +	  echo hppa64-unknown-linux-gnu && exit 0
  +	elif test "${UNAME_MACHINE}" = "parisc" -o "${UNAME_MACHINE}" = "hppa"; then
  +	  # Look for CPU level
  +	  case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
  +	    PA7*)
  +		echo hppa1.1-unknown-linux-gnu
  +		;;
  +	    PA8*)
  +		echo hppa2.0-unknown-linux-gnu
  +		;;
  +	    *)
  +		echo hppa-unknown-linux-gnu
  +		;;
  +	  esac
  +	  exit 0
  +	else
  +	  # Either a pre-BFD a.out linker (linux-gnuoldld)
  +	  # or one that does not give us useful --help.
  +	  # GCC wants to distinguish between linux-gnuoldld and linux-gnuaout.
  +	  # If ld does not provide *any* "supported emulations:"
  +	  # that means it is gnuoldld.
  +	  test -z "$ld_supported_emulations" \
  +	    && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0
  +
  +	  case "${UNAME_MACHINE}" in
  +	  i?86)
  +	    VENDOR=pc;
  +	    ;;
  +	  *)
  +	    VENDOR=unknown;
  +	    ;;
  +	  esac
  +	  # Determine whether the default compiler is a.out or elf
  +	  cat >$dummy.c <<EOF
  +#include <features.h>
  +#ifdef __cplusplus
  +#include <stdio.h>  /* for printf() prototype */
  +	int main (int argc, char *argv[]) {
  +#else
  +	int main (argc, argv) int argc; char *argv[]; {
  +#endif
  +#ifdef __ELF__
  +# ifdef __GLIBC__
  +#  if __GLIBC__ >= 2
  +    printf ("%s-${VENDOR}-linux-gnu\n", argv[1]);
  +#  else
  +    printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
  +#  endif
  +# else
  +   printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
  +# endif
  +#else
  +  printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]);
  +#endif
  +  return 0;
  +}
  +EOF
  +	  $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0
  +	  rm -f $dummy.c $dummy
  +	  test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
  +	fi ;;
   # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.  earlier versions
   # are messed up and put the nodename in both sysname and nodename.
       i?86:DYNIX/ptx:4*:*)
   	echo i386-sequent-sysv4
   	exit 0 ;;
  -    i?86:UnixWare:*:* )
  -        echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}uw${UNAME_VERSION}
  -        exit 0 ;;
       i?86:UNIX_SV:4.2MP:2.*)
           # Unixware is an offshoot of SVR4, but it has its own version
           # number series starting with 2...
  @@ -690,19 +1005,21 @@
   	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
   	exit 0 ;;
       i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*)
  +	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
   	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
  -		echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE}
  +		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
   	else
  -		echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
  +		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
   	fi
   	exit 0 ;;
       i?86:*:5:7*)
  -	UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
  -	(/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
  -	(/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) && UNAME_MACHINE=i586
  -	(/bin/uname -X|egrep '^Machine.*Pent.*II' >/dev/null) && UNAME_MACHINE=i686
  -	(/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) && UNAME_MACHINE=i585
  -	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}${UNAME_VERSION}-sysv${UNAME_RELEASE}
  +        # Fixed at (any) Pentium or better
  +        UNAME_MACHINE=i586
  +        if [ ${UNAME_SYSTEM} = "UnixWare" ] ; then
  +	    echo ${UNAME_MACHINE}-sco-sysv${UNAME_RELEASE}uw${UNAME_VERSION}
  +	else
  +	    echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
  +	fi
   	exit 0 ;;
       i?86:*:3.2:*)
   	if test -f /usr/options/cb.name; then
  @@ -722,7 +1039,11 @@
   		echo ${UNAME_MACHINE}-pc-sysv32
   	fi
   	exit 0 ;;
  +    i?86:*DOS:*:*)
  +	echo ${UNAME_MACHINE}-pc-msdosdjgpp
  +	exit 0 ;;
       pc:*:*:*)
  +	# Left here for compatibility:
           # uname -m prints for DJGPP always 'pc', but it prints nothing about
           # the processor, so we play safe by assuming i386.
   	echo i386-pc-msdosdjgpp
  @@ -746,7 +1067,7 @@
   	exit 0 ;;
       M68*:*:R3V[567]*:*)
   	test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
  -    3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
  +    3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
   	OS_REL=''
   	test -r /etc/.relid \
   	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
  @@ -769,15 +1090,15 @@
       TSUNAMI:LynxOS:2.*:*)
   	echo sparc-unknown-lynxos${UNAME_RELEASE}
   	exit 0 ;;
  -    rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*)
  +    rs6000:LynxOS:2.*:*)
   	echo rs6000-unknown-lynxos${UNAME_RELEASE}
   	exit 0 ;;
  +    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:*)
  +	echo powerpc-unknown-lynxos${UNAME_RELEASE}
  +	exit 0 ;;
       SM[BE]S:UNIX_SV:*:*)
   	echo mips-dde-sysv${UNAME_RELEASE}
   	exit 0 ;;
  -    BS2000:POSIX-BC:*:*)
  -	echo BS2000-siemens-sysv4
  -	exit 0 ;;
       RM*:ReliantUNIX-*:*:*)
   	echo mips-sni-sysv4
   	exit 0 ;;
  @@ -808,7 +1129,7 @@
       mc68*:A/UX:*:*)
   	echo m68k-apple-aux${UNAME_RELEASE}
   	exit 0 ;;
  -    news*:NEWS-OS:*:6*)
  +    news*:NEWS-OS:6*:*)
   	echo mips-sony-newsos6
   	exit 0 ;;
       R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
  @@ -839,6 +1160,64 @@
       *:Rhapsody:*:*)
   	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
   	exit 0 ;;
  +    *:Darwin:*:*)
  +	echo `uname -p`-apple-darwin${UNAME_RELEASE}
  +	exit 0 ;;
  +    *:procnto*:*:* | *:QNX:[0123456789]*:*)
  +	if test "${UNAME_MACHINE}" = "x86pc"; then
  +		UNAME_MACHINE=pc
  +	fi
  +	echo `uname -p`-${UNAME_MACHINE}-nto-qnx
  +	exit 0 ;;
  +    *:QNX:*:4*)
  +	echo i386-pc-qnx
  +	exit 0 ;;
  +    NSR-[KW]:NONSTOP_KERNEL:*:*)
  +	echo nsr-tandem-nsk${UNAME_RELEASE}
  +	exit 0 ;;
  +    *:NonStop-UX:*:*)
  +	echo mips-compaq-nonstopux
  +	exit 0 ;;
  +    BS2000:POSIX*:*:*)
  +	echo bs2000-siemens-sysv
  +	exit 0 ;;
  +    DS/*:UNIX_System_V:*:*)
  +	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
  +	exit 0 ;;
  +    *:Plan9:*:*)
  +	# "uname -m" is not consistent, so use $cputype instead. 386
  +	# is converted to i386 for consistency with other x86
  +	# operating systems.
  +	if test "$cputype" = "386"; then
  +	    UNAME_MACHINE=i386
  +	else
  +	    UNAME_MACHINE="$cputype"
  +	fi
  +	echo ${UNAME_MACHINE}-unknown-plan9
  +	exit 0 ;;
  +    i?86:OS/2:*:*)
  +	# If we were able to find `uname', then EMX Unix compatibility
  +	# is probably installed.
  +	echo ${UNAME_MACHINE}-pc-os2-emx
  +	exit 0 ;;
  +    *:TOPS-10:*:*)
  +	echo pdp10-unknown-tops10
  +	exit 0 ;;
  +    *:TENEX:*:*)
  +	echo pdp10-unknown-tenex
  +	exit 0 ;;
  +    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
  +	echo pdp10-dec-tops20
  +	exit 0 ;;
  +    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
  +	echo pdp10-xkl-tops20
  +	exit 0 ;;
  +    *:TOPS-20:*:*)
  +	echo pdp10-unknown-tops20
  +	exit 0 ;;
  +    *:ITS:*:*)
  +	echo pdp10-unknown-its
  +	exit 0 ;;
   esac
   
   #echo '(No uname command or uname output not recognized.)' 1>&2
  @@ -930,12 +1309,25 @@
   #endif
   
   #if defined (vax)
  -#if !defined (ultrix)
  -  printf ("vax-dec-bsd\n"); exit (0);
  -#else
  -  printf ("vax-dec-ultrix\n"); exit (0);
  +# if !defined (ultrix)
  +#  include <sys/param.h>
  +#  if defined (BSD)
  +#   if BSD == 43
  +      printf ("vax-dec-bsd4.3\n"); exit (0);
  +#   else
  +#    if BSD == 199006
  +      printf ("vax-dec-bsd4.3reno\n"); exit (0);
  +#    else
  +      printf ("vax-dec-bsd\n"); exit (0);
  +#    endif
  +#   endif
  +#  else
  +    printf ("vax-dec-bsd\n"); exit (0);
  +#  endif
  +# else
  +    printf ("vax-dec-ultrix\n"); exit (0);
  +# endif
   #endif
  -#endif
   
   #if defined (alliant) && defined (i860)
     printf ("i860-alliant-bsd\n"); exit (0);
  @@ -977,7 +1369,49 @@
   	exit 0 ;;
       esac
   fi
  +
  +cat >&2 <<EOF
  +$0: unable to guess system type
   
  -#echo '(Unable to guess system type)' 1>&2
  +This script, last modified $timestamp, has failed to recognize
  +the operating system you are using. It is advised that you
  +download the most up to date version of the config scripts from
  +
  +    ftp://ftp.gnu.org/pub/gnu/config/
  +
  +If the version you run ($0) is already up to date, please
  +send the following data and any information you think might be
  +pertinent to <config-patches@gnu.org> in order to provide the needed
  +information to handle your system.
  +
  +config.guess timestamp = $timestamp
  +
  +uname -m = `(uname -m) 2>/dev/null || echo unknown`
  +uname -r = `(uname -r) 2>/dev/null || echo unknown`
  +uname -s = `(uname -s) 2>/dev/null || echo unknown`
  +uname -v = `(uname -v) 2>/dev/null || echo unknown`
  +
  +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
  +/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
  +
  +hostinfo               = `(hostinfo) 2>/dev/null`
  +/bin/universe          = `(/bin/universe) 2>/dev/null`
  +/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
  +/bin/arch              = `(/bin/arch) 2>/dev/null`
  +/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
  +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
  +
  +UNAME_MACHINE = ${UNAME_MACHINE}
  +UNAME_RELEASE = ${UNAME_RELEASE}
  +UNAME_SYSTEM  = ${UNAME_SYSTEM}
  +UNAME_VERSION = ${UNAME_VERSION}
  +EOF
   
   exit 1
  +
  +# Local variables:
  +# eval: (add-hook 'write-file-hooks 'time-stamp)
  +# time-stamp-start: "timestamp='"
  +# time-stamp-format: "%:y-%02m-%02d"
  +# time-stamp-end: "'"
  +# End:
  Index: ossp-pkg/sfio/etc/config.sub
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 config.sub
  --- ossp-pkg/sfio/etc/config.sub	2000/07/03 14:15:16	1.2
  +++ ossp-pkg/sfio/etc/config.sub	2001/02/12 14:50:12	1.3
  @@ -1,6 +1,10 @@
   #! /bin/sh
  -# Configuration validation subroutine script, version 1.1.
  -#   Copyright (C) 1991, 92-97, 1998, 1999 Free Software Foundation, Inc.
  +# Configuration validation subroutine script.
  +#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
  +#   Free Software Foundation, Inc.
  +
  +timestamp='2001-01-12'
  +
   # This file is (in principle) common to ALL GNU software.
   # The presence of a machine in this file suggests that SOME GNU software
   # can handle that machine.  It does not imply ALL GNU software can.
  @@ -25,6 +29,8 @@
   # configuration script generated by Autoconf, you may include it under
   # the same distribution terms that you use for the rest of that program.
   
  +# Please send patches to <config-patches@gnu.org>.
  +#
   # Configuration subroutine to validate and canonicalize a configuration type.
   # Supply the specified configuration type as an argument.
   # If it is invalid, we print an error message on stderr and exit with code 1.
  @@ -45,30 +51,73 @@
   #	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
   # It is wrong to echo any other type of specification.
   
  -if [ x$1 = x ]
  -then
  -	echo Configuration name missing. 1>&2
  -	echo "Usage: $0 CPU-MFR-OPSYS" 1>&2
  -	echo "or     $0 ALIAS" 1>&2
  -	echo where ALIAS is a recognized configuration type. 1>&2
  -	exit 1
  -fi
  +me=`echo "$0" | sed -e 's,.*/,,'`
   
  -# First pass through any local machine types.
  -case $1 in
  -	*local*)
  -		echo $1
  -		exit 0
  -		;;
  -	*)
  -	;;
  +usage="\
  +Usage: $0 [OPTION] CPU-MFR-OPSYS
  +       $0 [OPTION] ALIAS
  +
  +Canonicalize a configuration name.
  +
  +Operation modes:
  +  -h, --help         print this help, then exit
  +  -t, --time-stamp   print date of last modification, then exit
  +  -v, --version      print version number, then exit
  +
  +Report bugs and patches to <config-patches@gnu.org>."
  +
  +version="\
  +GNU config.sub ($timestamp)
  +
  +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
  +Free Software Foundation, Inc.
  +
  +This is free software; see the source for copying conditions.  There is NO
  +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
  +
  +help="
  +Try \`$me --help' for more information."
  +
  +# Parse command line
  +while test $# -gt 0 ; do
  +  case $1 in
  +    --time-stamp | --time* | -t )
  +       echo "$timestamp" ; exit 0 ;;
  +    --version | -v )
  +       echo "$version" ; exit 0 ;;
  +    --help | --h* | -h )
  +       echo "$usage"; exit 0 ;;
  +    -- )     # Stop option processing
  +       shift; break ;;
  +    - )	# Use stdin as input.
  +       break ;;
  +    -* )
  +       echo "$me: invalid option $1$help"
  +       exit 1 ;;
  +
  +    *local*)
  +       # First pass through any local machine types.
  +       echo $1
  +       exit 0;;
  +
  +    * )
  +       break ;;
  +  esac
  +done
  +
  +case $# in
  + 0) echo "$me: missing argument$help" >&2
  +    exit 1;;
  + 1) ;;
  + *) echo "$me: too many arguments$help" >&2
  +    exit 1;;
   esac
   
   # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
   # Here we must recognize all the valid KERNEL-OS combinations.
   maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
   case $maybe_os in
  -  linux-gnu*)
  +  nto-qnx* | linux-gnu* | storm-chaos* | os2-emx*)
       os=-$maybe_os
       basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
       ;;
  @@ -94,7 +143,7 @@
   	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
   	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
   	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
  -	-apple)
  +	-apple | -axis)
   		os=
   		basic_machine=$1
   		;;
  @@ -105,7 +154,7 @@
   	-scout)
   		;;
   	-wrs)
  -		os=vxworks
  +		os=-vxworks
   		basic_machine=$1
   		;;
   	-hiux*)
  @@ -156,33 +205,48 @@
   	-psos*)
   		os=-psos
   		;;
  +	-mint | -mint[0-9]*)
  +		basic_machine=m68k-atari
  +		os=-mint
  +		;;
   esac
   
   # Decode aliases for certain CPU-COMPANY combinations.
   case $basic_machine in
   	# Recognize the basic CPU types without company name.
   	# Some are omitted here because they have special meanings below.
  -	tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \
  -		| arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \
  +	tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc \
  +	        | arm | arme[lb] | arm[bl]e | armv[2345] | armv[345][lb] | strongarm | xscale \
  +		| pyramid | mn10200 | mn10300 | tron | a29k \
   		| 580 | i960 | h8300 \
  +		| x86 | ppcbe | mipsbe | mipsle | shbe | shle \
   		| hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \
  -		| alpha | alphaev[4-7] | alphaev56 | alphapca5[67] \
  -		| we32k | ns16k | clipper | i370 | sh | powerpc | powerpcle \
  -		| 1750a | dsp16xx | pdp11 | mips16 | mips64 | mipsel | mips64el \
  +		| hppa64 \
  +		| alpha | alphaev[4-8] | alphaev56 | alphapca5[67] \
  +		| alphaev6[78] \
  +		| we32k | ns16k | clipper | i370 | sh | sh[34] \
  +		| powerpc | powerpcle \
  +		| 1750a | dsp16xx | pdp10 | pdp11 \
  +		| mips16 | mips64 | mipsel | mips64el \
   		| mips64orion | mips64orionel | mipstx39 | mipstx39el \
   		| mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \
   		| mips64vr5000 | miprs64vr5000el | mcore \
   		| sparc | sparclet | sparclite | sparc64 | sparcv9 | v850 | c4x \
  -		| thumb | d10v)
  +		| thumb | d10v | d30v | fr30 | avr | openrisc)
  +		basic_machine=$basic_machine-unknown
  +		;;
  +	m6811 | m68hc11 | m6812 | m68hc12)
  +		# Motorola 68HC11/12.
   		basic_machine=$basic_machine-unknown
  +		os=-none
   		;;
  -	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | h8500 | w65)
  +	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | h8500 | w65 | pj | pjl)
   		;;
   
   	# We use `pc' rather than `unknown'
   	# because (1) that's what they normally are, and
   	# (2) the word "unknown" tends to confuse beginning users.
  -	i[34567]86)
  +	i[234567]86 | x86_64)
   	  basic_machine=$basic_machine-pc
   	  ;;
   	# Object if more than one company name word.
  @@ -192,23 +256,28 @@
   		;;
   	# Recognize the basic CPU types with company name.
   	# FIXME: clean up the formatting here.
  -	vax-* | tahoe-* | i[34567]86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \
  -	      | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \
  +	vax-* | tahoe-* | i[234567]86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \
  +	      | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | c[123]* \
  +	      | arm-*  | armbe-* | armle-* | armv*-* | strongarm-* | xscale-* \
   	      | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \
   	      | power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \
   	      | xmp-* | ymp-* \
  -	      | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* | hppa2.0n-* \
  -	      | alpha-* | alphaev[4-7]-* | alphaev56-* | alphapca5[67]-* \
  +	      | x86-* | ppcbe-* | mipsbe-* | mipsle-* | shbe-* | shle-* \
  +	      | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* \
  +	      | hppa2.0n-* | hppa64-* \
  +	      | alpha-* | alphaev[4-8]-* | alphaev56-* | alphapca5[67]-* \
  +	      | alphaev6[78]-* \
   	      | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \
   	      | clipper-* | orion-* \
  -	      | sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
  +	      | sparclite-* | pdp10-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
   	      | sparc64-* | sparcv9-* | sparc86x-* | mips16-* | mips64-* | mipsel-* \
   	      | mips64el-* | mips64orion-* | mips64orionel-* \
   	      | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \
   	      | mipstx39-* | mipstx39el-* | mcore-* \
  -	      | f301-* | armv*-* | t3e-* \
  +	      | f30[01]-* | f700-* | s390-* | sv1-* | t3e-* \
   	      | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \
  -	      | thumb-* | v850-* | d30v-* | tic30-* | c30-* )
  +	      | thumb-* | v850-* | d30v-* | tic30-* | c30-* | fr30-* \
  +	      | bs2000-* | tic54x-* | c54x-* | x86_64-*)
   		;;
   	# Recognize the various machine names and aliases which stand
   	# for a CPU type and a company and sometimes even an OS.
  @@ -245,14 +314,14 @@
   		os=-sysv
   		;;
   	amiga | amiga-*)
  -		basic_machine=m68k-cbm
  +		basic_machine=m68k-unknown
   		;;
   	amigaos | amigados)
  -		basic_machine=m68k-cbm
  +		basic_machine=m68k-unknown
   		os=-amigaos
   		;;
   	amigaunix | amix)
  -		basic_machine=m68k-cbm
  +		basic_machine=m68k-unknown
   		os=-sysv4
   		;;
   	apollo68)
  @@ -306,6 +375,9 @@
   	crds | unos)
   		basic_machine=m68k-crds
   		;;
  +	cris | cris-* | etrax*)
  +		basic_machine=cris-axis
  +		;;
   	da30 | da30-*)
   		basic_machine=m68k-da30
   		;;
  @@ -353,6 +425,10 @@
   		basic_machine=tron-gmicro
   		os=-sysv
   		;;
  +	go32)
  +		basic_machine=i386-pc
  +		os=-go32
  +		;;
   	h3050r* | hiux*)
   		basic_machine=hppa1.1-hitachi
   		os=-hiuxwe2
  @@ -426,7 +502,6 @@
   		;;
   	i370-ibm* | ibm*)
   		basic_machine=i370-ibm
  -		os=-mvs
   		;;
   # I'm not sure what "Sysv32" means.  Should this be sysv3.2?
   	i[34567]86v32)
  @@ -453,14 +528,6 @@
   		basic_machine=i386-unknown
   		os=-vsta
   		;;
  -	i386-go32 | go32)
  -		basic_machine=i386-unknown
  -		os=-go32
  -		;;
  -	i386-mingw32 | mingw32)
  -		basic_machine=i386-unknown
  -		os=-mingw32
  -		;;
   	iris | iris4d)
   		basic_machine=mips-sgi
   		case $os in
  @@ -486,10 +553,14 @@
   		basic_machine=ns32k-utek
   		os=-sysv
   		;;
  +	mingw32)
  +		basic_machine=i386-pc
  +		os=-mingw32
  +		;;
   	miniframe)
   		basic_machine=m68000-convergent
   		;;
  -	*mint | *MiNT)
  +	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
   		basic_machine=m68k-atari
   		os=-mint
   		;;
  @@ -507,14 +578,22 @@
   	mips3*)
   		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
   		;;
  +	mmix*)
  +		basic_machine=mmix-knuth
  +		os=-mmixware
  +		;;
   	monitor)
   		basic_machine=m68k-rom68k
   		os=-coff
   		;;
   	msdos)
  -		basic_machine=i386-unknown
  +		basic_machine=i386-pc
   		os=-msdos
   		;;
  +	mvs)
  +		basic_machine=i370-ibm
  +		os=-mvs
  +		;;
   	ncr3000)
   		basic_machine=i486-ncr
   		os=-sysv4
  @@ -524,7 +603,7 @@
   		os=-netbsd
   		;;
   	netwinder)
  -		basic_machine=armv4l-corel
  +		basic_machine=armv4l-rebel
   		os=-linux
   		;;
   	news | news700 | news800 | news900)
  @@ -572,9 +651,16 @@
   		basic_machine=i960-intel
   		os=-mon960
   		;;
  +	nonstopux)
  +		basic_machine=mips-compaq
  +		os=-nonstopux
  +		;;
   	np1)
   		basic_machine=np1-gould
   		;;
  +	nsr-tandem)
  +		basic_machine=nsr-tandem
  +		;;
   	op50n-* | op60c-*)
   		basic_machine=hppa1.1-oki
   		os=-proelf
  @@ -604,28 +690,28 @@
           pc532 | pc532-*)
   		basic_machine=ns32k-pc532
   		;;
  -	pentium | p5 | k5 | k6 | nexen)
  +	pentium | p5 | k5 | k6 | nexgen)
   		basic_machine=i586-pc
   		;;
  -	pentiumpro | p6 | 6x86)
  +	pentiumpro | p6 | 6x86 | athlon)
   		basic_machine=i686-pc
   		;;
   	pentiumii | pentium2)
  -		basic_machine=i786-pc
  +		basic_machine=i686-pc
   		;;
  -	pentium-* | p5-* | k5-* | k6-* | nexen-*)
  +	pentium-* | p5-* | k5-* | k6-* | nexgen-*)
   		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
   		;;
  -	pentiumpro-* | p6-* | 6x86-*)
  +	pentiumpro-* | p6-* | 6x86-* | athlon-*)
   		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
   		;;
   	pentiumii-* | pentium2-*)
  -		basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
  +		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
   		;;
   	pn)
   		basic_machine=pn-gould
   		;;
  -	power)	basic_machine=rs6000-ibm
  +	power)	basic_machine=power-ibm
   		;;
   	ppc)	basic_machine=powerpc-unknown
   	        ;;
  @@ -640,6 +726,10 @@
   	ps2)
   		basic_machine=i386-ibm
   		;;
  +	pw32)
  +		basic_machine=i586-unknown
  +		os=-pw32
  +		;;
   	rom68k)
   		basic_machine=m68k-rom68k
   		os=-coff
  @@ -719,17 +809,22 @@
   	sun386 | sun386i | roadrunner)
   		basic_machine=i386-sun
   		;;
  +	sv1)
  +		basic_machine=sv1-cray
  +		os=-unicos
  +		;;
   	symmetry)
   		basic_machine=i386-sequent
   		os=-dynix
   		;;
  -	s390*)
  -		basic_machine=s390-ibm
  -		;;
   	t3e)
   		basic_machine=t3e-cray
   		os=-unicos
   		;;
  +	tic54x | c54x*)
  +		basic_machine=tic54x-unknown
  +		os=-coff
  +		;;
   	tx39)
   		basic_machine=mipstx39-unknown
   		;;
  @@ -825,12 +920,19 @@
   	vax)
   		basic_machine=vax-dec
   		;;
  +	pdp10)
  +		# there are many clones, so DEC is not a safe bet
  +		basic_machine=pdp10-unknown
  +		;;
   	pdp11)
   		basic_machine=pdp11-dec
   		;;
   	we32k)
   		basic_machine=we32k-att
   		;;
  +	sh3 | sh4)
  +		basic_machine=sh-unknown
  +		;;
   	sparc | sparcv9)
   		basic_machine=sparc-sun
   		;;
  @@ -853,8 +955,6 @@
   		basic_machine=c4x-none
   		os=-coff
   		;;
  -	BS2000-siemens)
  -		;;
   	*)
   		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
   		exit 1
  @@ -913,12 +1013,26 @@
   	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
   	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
   	      | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
  -	      | -interix* | -uwin* | -rhapsody* | -openstep* | -oskit*)
  +	      | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
  +	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
  +	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* | -os2*)
   	# Remember, each alternative MUST END IN *, to match a version number.
   		;;
  +	-qnx*)
  +		case $basic_machine in
  +		    x86-* | i[34567]86-*)
  +			;;
  +		    *)
  +			os=-nto$os
  +			;;
  +		esac
  +		;;
  +	-nto*)
  +		os=-nto-qnx
  +		;;
   	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
   	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
  -	      | -macos* | -mpw* | -magic* | -mon960* | -lnews*)
  +	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
   		;;
   	-mac*)
   		os=`echo $os | sed -e 's|mac|macos|'`
  @@ -932,6 +1046,12 @@
   	-sunos6*)
   		os=`echo $os | sed -e 's|sunos6|solaris3|'`
   		;;
  +	-opened*)
  +		os=-openedition
  +		;;
  +	-wince*)
  +		os=-wince
  +		;;
   	-osfrose*)
   		os=-osfrose
   		;;
  @@ -956,6 +1076,9 @@
   	-ns2 )
   	        os=-nextstep2
   		;;
  +	-nsk*)
  +		os=-nsk
  +		;;
   	# Preserve the version number of sinix5.
   	-sinix5.*)
   		os=`echo $os | sed -e 's|sinix|sysv|'`
  @@ -990,7 +1113,7 @@
   	-xenix)
   		os=-xenix
   		;;
  -        -*mint | -*MiNT)
  +        -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
   	        os=-mint
   		;;
   	-none)
  @@ -1018,12 +1141,15 @@
   	*-acorn)
   		os=-riscix1.2
   		;;
  -	arm*-corel)
  +	arm*-rebel)
   		os=-linux
   		;;
   	arm*-semi)
   		os=-aout
   		;;
  +	pdp10-*)
  +		os=-tops20
  +		;;
           pdp11-*)
   		os=-none
   		;;
  @@ -1132,7 +1258,7 @@
   	*-masscomp)
   		os=-rtu
   		;;
  -	f301-fujitsu)
  +	f30[01]-fujitsu | f700-fujitsu)
   		os=-uxpv
   		;;
   	*-rom68k)
  @@ -1192,7 +1318,7 @@
   			-genix*)
   				vendor=ns
   				;;
  -			-mvs*)
  +			-mvs* | -opened*)
   				vendor=ibm
   				;;
   			-ptx*)
  @@ -1210,7 +1336,7 @@
   			-mpw* | -macos*)
   				vendor=apple
   				;;
  -			-*mint | -*MiNT)
  +			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
   				vendor=atari
   				;;
   		esac
  @@ -1220,3 +1346,10 @@
   
   echo $basic_machine$os
   exit 0
  +
  +# Local variables:
  +# eval: (add-hook 'write-file-hooks 'time-stamp)
  +# time-stamp-start: "timestamp='"
  +# time-stamp-format: "%:y-%02m-%02d"
  +# time-stamp-end: "'"
  +# End:
  Index: ossp-pkg/sfio/etc/shtool
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 shtool
  --- ossp-pkg/sfio/etc/shtool	2000/07/03 14:15:16	1.3
  +++ ossp-pkg/sfio/etc/shtool	2001/02/12 14:50:12	1.4
  @@ -1,12 +1,12 @@
   #!/bin/sh
   ##
   ##  GNU shtool -- The GNU Portable Shell Tool
  -##  Copyright (c) 1994-2000 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1994-2001 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  See http://www.gnu.org/software/shtool/ for more information.
   ##  See ftp://ftp.gnu.org/gnu/shtool/ for latest version.
   ##
  -##  Version:  1.5.0 (01-Jul-2000)
  +##  Version:  1.5.2 (05-Oct-2000)
   ##  Contents: all available modules
   ##
   
  @@ -63,8 +63,8 @@
       exit 1
   fi
   if [ ".$1" = ".-h" -o ".$1" = ".--help" ]; then
  -    echo "This is GNU shtool, version 1.5.0 (01-Jul-2000)"
  -    echo "Copyright (c) 1994-2000 Ralf S. Engelschall <rse@engelschall.com>"
  +    echo "This is GNU shtool, version 1.5.2 (05-Oct-2000)"
  +    echo "Copyright (c) 1994-2001 Ralf S. Engelschall <rse@engelschall.com>"
       echo "Report bugs to <bug-shtool@gnu.org>"
       echo ''
       echo "Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]" 
  @@ -82,7 +82,7 @@
       echo '  prop     [-p<str>]'
       echo '  move     [-v] [-t] [-e] [-p] <src-file> <dst-file>'
       echo '  install  [-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>]'
  -    echo '           [-e<ext>] <file> [<file> ...] <path>'
  +    echo '           [-e<sed-cmd>] <file> [<file> ...] <path>'
       echo '  mkdir    [-t] [-f] [-p] [-m<mode>] <dir> [<dir> ...]'
       echo '  mkln     [-t] [-f] [-s] <src-path> [<src-path> ...] <dst-path>'
       echo '  mkshadow [-v] [-t] [-a] <src-dir> <dst-dir>'
  @@ -101,7 +101,7 @@
       exit 0
   fi
   if [ ".$1" = ".-v" -o ".$1" = ."--version" ]; then
  -    echo "GNU shtool 1.5.0 (01-Jul-2000)"
  +    echo "GNU shtool 1.5.2 (05-Oct-2000)"
       exit 0
   fi
   if [ ".$1" = ".-r" -o ".$1" = ."--recreate" ]; then
  @@ -182,15 +182,15 @@
           ;;
       install )
           str_tool="install"
  -        str_usage="[-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>] [-e<ext>] <file> [<file> ...] <path>"
  +        str_usage="[-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>] [-e<sed-cmd>] <file> [<file> ...] <path>"
           arg_spec="2+"
  -        opt_spec="v.t.c.C.s.m:o:g:e:"
  +        opt_spec="v.t.c.C.s.m:o:g:e+"
           opt_v=no
           opt_t=no
           opt_c=no
           opt_C=no
           opt_s=no
  -        opt_m=""
  +        opt_m="0755"
           opt_o=""
           opt_g=""
           opt_e=""
  @@ -455,6 +455,7 @@
       tmpfile="$tmpdir/.shtool.$$"
       rm -f $tmpfile >/dev/null 2>&1
       touch $tmpfile
  +    chmod 600 $tmpfile
   fi
   
   ##
  @@ -466,7 +467,7 @@
   echo )
       ##
       ##  echo -- Print string with optional construct expansion
  -    ##  Copyright (c) 1998-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1998-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for WML as buildinfo
       ##
       
  @@ -814,7 +815,7 @@
   table )
       ##
       ##  table -- Pretty-print a field-separated list as a table
  -    ##  Copyright (c) 1998-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1998-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for Apache
       ##
       
  @@ -878,7 +879,7 @@
   prop )
       ##
       ##  prop -- Display progress with a running propeller
  -    ##  Copyright (c) 1998-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1998-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for mod_ssl
       ##
       
  @@ -923,7 +924,7 @@
   move )
       ##
       ##  move -- Move files with simultaneous substitution
  -    ##  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for shtool
       ##
       
  @@ -1015,7 +1016,7 @@
   install )
       ##
       ##  install -- Install a program, script or datafile
  -    ##  Copyright (c) 1997-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1997-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for shtool
       ##
       
  @@ -1045,19 +1046,13 @@
       for src in $srcs; do
           dst=$dstpath
       
  -        #  If destination is a directory, append the input filename
  +        #   if destination is a directory, append the input filename
           if [ $dstisdir = 1 ]; then
               dstfile=`echo "$src" | sed -e 's;.*/\([^/]*\)$;\1;'`
               dst="$dst/$dstfile"
           fi
  -    
  -        #  Add a possible extension to src and dst
  -        if [ ".$opt_e" != . ]; then
  -            src="$src$opt_e"
  -            dst="$dst$opt_e"
  -        fi
       
  -        #  Check for correct arguments
  +        #   check for correct arguments
           if [ ".$src" = ".$dst" ]; then
               echo "$msgprefix:Warning: source and destination are the same - skipped" 1>&2
               continue
  @@ -1067,18 +1062,18 @@
               continue
           fi
       
  -        #  Make a temp file name in the destination directory
  +        #   make a temp file name in the destination directory
           dsttmp=`echo $dst |\
                   sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;' -e 's;^$;.;' \
                       -e "s;\$;/#INST@$$#;"`
       
  -        #  Verbosity
  +        #   verbosity
           if [ ".$opt_v" = .yes ]; then
               echo "$src -> $dst" 1>&2
           fi
       
  -        #  Copy or move the file name to the temp name
  -        #  (because we might be not allowed to change the source)
  +        #   copy or move the file name to the temp name
  +        #   (because we might be not allowed to change the source)
           if [ ".$opt_C" = .yes ]; then
               opt_c=yes
           fi
  @@ -1094,8 +1089,16 @@
               mv $src $dsttmp || exit $?
           fi
       
  -        #  Adjust the target file
  -        #  (we do chmod last to preserve setuid bits)
  +        #   adjust the target file
  +        if [ ".$opt_e" != . ]; then
  +            sed='sed'
  +            for e in $opt_e; do
  +                sed="$sed -e '$e'"
  +            done
  +            cp $dsttmp $dsttmp.old
  +            eval "$sed <$dsttmp.old >$dsttmp" || exit $?
  +            rm -f $dsttmp.old
  +        fi
           if [ ".$opt_s" = .yes ]; then
               if [ ".$opt_t" = .yes ]; then
                   echo "strip $dsttmp" 1>&2
  @@ -1114,14 +1117,14 @@
               fi
               chgrp $opt_g $dsttmp || exit $?
           fi
  -        if [ ".$opt_m" != . ]; then
  +        if [ ".$opt_m" != ".-" ]; then
               if [ ".$opt_t" = .yes ]; then
                   echo "chmod $opt_m $dsttmp" 1>&2
               fi
               chmod $opt_m $dsttmp || exit $?
           fi
       
  -        #   Determine whether to do a quick install
  +        #   determine whether to do a quick install
           #   (has to be done _after_ the strip was already done)
           quick=no
           if [ ".$opt_C" = .yes ]; then
  @@ -1132,7 +1135,7 @@
               fi
           fi
       
  -        #   Finally install the file to the real destination
  +        #   finally, install the file to the real destination
           if [ $quick = yes ]; then
               if [ ".$opt_t" = .yes ]; then
                   echo "rm -f $dsttmp" 1>&2
  @@ -1150,7 +1153,7 @@
   mkdir )
       ##
       ##  mkdir -- Make one or more directories
  -    ##  Copyright (c) 1996-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1996-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for public domain by Noah Friedman <friedman@prep.ai.mit.edu>
       ##  Cleaned up and enhanced for shtool
       ##
  @@ -1159,7 +1162,7 @@
       for p in ${1+"$@"}; do
           #   if the directory already exists...
           if [ -d "$p" ]; then
  -            if [ ".$opt_f" = .no ] && [ ".$opt_p" = .no ]; then
  +            if [ ".$opt_f" = .no -a ".$opt_p" = .no ]; then
                   echo "$msgprefix:Error: directory already exists: $p" 1>&2
                   errstatus=1
                   break
  @@ -1209,7 +1212,7 @@
   mkln )
       ##
       ##  mkln -- Make link with calculation of relative paths
  -    ##  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for shtool
       ##
       
  @@ -1287,12 +1290,12 @@
       
           #   split away a common prefix
           prefix=""
  -        if [ ".$srcdir" = ".$dstdir" ] && [ ".$srcdir" != . ]; then
  +        if [ ".$srcdir" = ".$dstdir" -a ".$srcdir" != . ]; then
               prefix="$srcdir/"
               srcdir=""
               dstdir=""
           else
  -            while [ ".$srcdir" != . ] && [ ".$dstdir" != . ]; do
  +            while [ ".$srcdir" != . -a ".$dstdir" != . ]; do
                   presrc=`echo $srcdir | sed -e 's;^\([^/]*\)/.*;\1;'`
                   predst=`echo $dstdir | sed -e 's;^\([^/]*\)/.*;\1;'`
                   if [ ".$presrc" != ".$predst" ]; then
  @@ -1348,7 +1351,7 @@
   mkshadow )
       ##
       ##  mkshadow -- Make a shadow tree through symbolic links
  -    ##  Copyright (c) 1998-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1998-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for Apache
       ##
       
  @@ -1465,7 +1468,7 @@
   fixperm )
       ##
       ##  fixperm -- Fix file permissions inside a source tree
  -    ##  Copyright (c) 1996-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1996-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for ePerl
       ##
       
  @@ -1521,7 +1524,7 @@
   tarball )
       ##
       ##  tarball -- Roll distribution tarballs
  -    ##  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for shtool
       ##
       
  @@ -1547,7 +1550,7 @@
           for tool in `echo $tools | sed -e 's/,/ /g'`; do
               #   iterate over paths
               for path in $paths; do
  -                if [ $minusx "$path/$tool" ] && [ ! -d "$path/$tool" ]; then
  +                if [ $minusx "$path/$tool" -a ! -d "$path/$tool" ]; then
                       eval "prg_${prg}=\"$path/$tool\""
                       break
                   fi
  @@ -1573,7 +1576,7 @@
               if [ ".$opt_t" = .yes ]; then
                   echo "(cd $src && $prg_find . -type f -depth -print) | sed -e 's:^\\.\$::' -e 's:^\\./::' | cat $exclude >>$tmpfile.lst" 1>&2
               fi
  -            (cd $src && find . -type f -depth -print) |\
  +            (cd $src && $prg_find . -type f -depth -print) |\
               sed -e 's:^\.$::' -e 's:^\./::' | eval cat $exclude >>$tmpfile.lst
           else
               if [ ".$opt_t" = .yes ]; then
  @@ -1747,6 +1750,7 @@
               ;;
           HP-UX:*)
               HPUXVER=`echo ${RELEASE}|sed -e 's/[^.]*.[0B]*//'`
  +            MACHINE=`echo ${MACHINE}|sed -e 's:/:_:'`
               echo "${MACHINE}-hp-hpux${HPUXVER}"; exit 0
               ;;
           IRIX:*)
  @@ -1930,7 +1934,7 @@
   arx )
       ##
       ##  arx -- Extended archive command
  -    ##  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for shtool
       ##
       
  @@ -2008,7 +2012,7 @@
   slo )
       ##
       ##  slo -- Separate linker options by library class
  -    ##  Copyright (c) 1998-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1998-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for Apache
       ##
       
  @@ -2164,7 +2168,7 @@
   scpp )
       ##
       ##  scpp -- Sharing C Pre-Processor
  -    ##  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for GNU Pth
       ##
       
  @@ -2377,7 +2381,7 @@
   version )
       ##
       ##  version -- Maintain a version information file
  -    ##  Copyright (c) 1994-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1994-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for ePerl, rewritten from scratch for shtool
       ##
       
  @@ -2461,7 +2465,8 @@
           s     ) typnum=15; levnum=255  ;; # snapshots are special
       esac
       hex=`echo "$ver:$rev:$typnum:$levnum" |\
  -         awk -F: '{ printf("0x%X%02X%1X%02X", $1, $2, $3, $4); }'`
  +         awk -F: '{ printf("0x%x%02x%1x%02x", $1, $2, $3, $4); }' |\
  +         tr 'abcdef' 'ABCDEF'`
       ltv=`echo "$ver:$rev:$typnum:$levnum" |\
            awk -F: '{ printf("%d:%d", $1*10 + $2, $3*10 + $4); }'`
       
  @@ -2534,7 +2539,7 @@
           vGNU="${name} ${triple} (${tim})"
           vWeb="${name}/${triple}"
           vSCCS="@(#)${name} ${triple} (${tim})"
  -        vRCS="\$Id: shtool,v 1.3 2000/07/03 14:15:16 rse Exp ${name} ${triple} (${tim}) \$"
  +        vRCS="\$Id: shtool,v 1.4 2001/02/12 14:50:12 rse Exp ${name} ${triple} (${tim}) \$"
       
           #   determine string out of filename
           #   (do NOT try to optimize this in any way because of portability)
  @@ -2627,6 +2632,23 @@
                   echo >>$file "1;"
                   echo >>$file ""
                   ;;
  +            python )
  +                echo >>$file "##"
  +                echo >>$file "##  ${file} -- Version Information for ${name} (syntax: Python)"
  +                echo >>$file "##  [automatically generated and maintained by GNU shtool]"
  +                echo >>$file "##"
  +                echo >>$file ""
  +                echo >>$file "class ${prefix}version:"
  +                echo >>$file "    v_hex       = ${vHex}"
  +                echo >>$file "    v_short     = \"${vShort}\""
  +                echo >>$file "    v_long      = \"${vLong}\""
  +                echo >>$file "    v_tex       = \"${vTeX}\""
  +                echo >>$file "    v_gnu       = \"${vGNU}\""
  +                echo >>$file "    v_web       = \"${vWeb}\""
  +                echo >>$file "    v_sccs      = \"${vSCCS}\""
  +                echo >>$file "    v_rcs       = \"${vRCS}\""
  +                echo >>$file ""
  +                ;;
               * ) echo "$msgprefix:Error: invalid argument to option \`-l': \`$opt_l'" 1>&2
                   exit 1
                   ;;
  @@ -2637,7 +2659,7 @@
   path )
       ##
       ##  path -- Deal with program paths
  -    ##  Copyright (c) 1998-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1998-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for Apache
       ##
       
  @@ -2687,7 +2709,7 @@
       
       #   MAGIC SITUATION
       #   Perl Interpreter (perl)
  -    if [ ".$opt_m" = .yes ] && [ ".$namelist" = .perl ]; then
  +    if [ ".$opt_m" = .yes  -a ".$namelist" = .perl ]; then
           rm -f $tmpfile
           touch $tmpfile
           found=0
  @@ -2696,7 +2718,7 @@
               dir=`echo $dir | sed -e 's;/*$;;'`
               nc=99
               for name in perl perl5 miniperl; do
  -                 if [ $minusx "$dir/$name" ] && [ ! -d "$dir/$name" ]; then
  +                 if [ $minusx "$dir/$name" -a ! -d "$dir/$name" ]; then
                        perl="$dir/$name"
                        pv=`$perl -e 'printf("%.3f", $]);'`
                        echo "$pv:$pc:$nc:$perl" >>$tmpfile
  @@ -2717,7 +2739,7 @@
       
       #   MAGIC SITUATION
       #   C pre-processor (cpp)
  -    if [ ".$opt_m" = .yes ] && [ ".$namelist" = .cpp ]; then
  +    if [ ".$opt_m" = .yes -a ".$namelist" = .cpp ]; then
           echo >$tmpfile.c "#include <assert.h>"
           echo >>$tmpfile.c "Syntax Error"
           #   1. try the standard cc -E approach
  @@ -2733,7 +2755,7 @@
                   #   3. try a standalone cpp command in path and lib dirs
                   for path in $paths /lib /usr/lib /usr/local/lib; do
                       path=`echo $path | sed -e 's;/*$;;'`
  -                    if [ $minusx "$path/cpp" ] && [ ! -d "$path/cpp" ]; then
  +                    if [ $minusx "$path/cpp" -a ! -d "$path/cpp" ]; then
                           cpp="$path/cpp"
                           break
                       fi
  @@ -2762,7 +2784,7 @@
           #   iterate over paths
           for path in $paths; do
               path=`echo $path | sed -e 's;/*$;;'`
  -            if [ $minusx "$path/$name" ] && [ ! -d "$path/$name" ]; then
  +            if [ $minusx "$path/$name" -a ! -d "$path/$name" ]; then
                   if [ ".$opt_s" != .yes ]; then
                       echo "$path/$name"
                   fi

From ossp-cvs-owner@ossp.org  Mon Feb 12 19:08:01 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f1CI80h33288; Mon, 12 Feb 2001 19:08:00 +0100 (CET)
Date: Mon, 12 Feb 2001 19:08:00 +0100 (CET)
Message-Id: <200102121808.f1CI80h33288@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/petidomo/config petidomo.conf
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   12-Feb-2001 19:08:00
  Branch: HEAD                             Handle: 2001021218080000

  Modified files:
    ossp-pkg/petidomo/config petidomo.conf

  Log:
    The sample config file should contain the -i parameter at the
    MTAOptions, not the -v parameter, which does not make any sense here
    at all and probably was a typo to begin with.

  Summary:
    Revision    Changes     Path
    1.9         +4  -4      ossp-pkg/petidomo/config/petidomo.conf
  ____________________________________________________________________________

  Index: ossp-pkg/petidomo/config/petidomo.conf
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 petidomo.conf
  --- ossp-pkg/petidomo/config/petidomo.conf	2001/01/20 13:58:45	1.8
  +++ ossp-pkg/petidomo/config/petidomo.conf	2001/02/12 18:08:00	1.9
  @@ -1,5 +1,5 @@
   #
  -# $Header: /e/ossp/cvs/ossp-pkg/petidomo/config/petidomo.conf,v 1.8 2001/01/20 13:58:45 simons Exp $
  +# $Header: /e/ossp/cvs/ossp-pkg/petidomo/config/petidomo.conf,v 1.9 2001/02/12 18:08:00 simons Exp $
   #
   
   #  TAG: Hostname <string>
  @@ -44,9 +44,9 @@
   #       This entry sets the options which will be handed over to the MTA
   #       when it is called. The following example
   #
  -#       MTAOptions "-odq -v -f%s"
  +#       MTAOptions "-odq -i -f%s"
   #
  -#       will yield a call "<mta> -odq -v -f<envelope>". The '%s' is
  +#       will yield a call "<mta> -odq -i -f<envelope>". The '%s' is
   #       replaced with the envelope the mail should be sent under. If you
   #       set this this option, be sure to include the '%s' tag or Petidomo
   #       will terminate with an error, because it depends on setting the
  @@ -55,7 +55,7 @@
   #       In 99% of all cases you won't need to set this option and should
   #       leave it alone.
   #
  -#       The default, if the option is unset, is the string '-f%s'.
  +#       The default, if the option is unset, is '-i -f%s'.
   #MTAOptions    "-i -f%s"
   
   #  TAG: ListDirectory <string>

From ossp-cvs-owner@ossp.org  Mon Feb 12 20:18:20 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f1CJIJm39423; Mon, 12 Feb 2001 20:18:19 +0100 (CET)
Date: Mon, 12 Feb 2001 20:18:19 +0100 (CET)
Message-Id: <200102121918.f1CJIJm39423@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/petidomo/docs .cvsignore
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   12-Feb-2001 20:18:19
  Branch: HEAD                             Handle: 2001021219181900

  Modified files:
    ossp-pkg/petidomo/docs  .cvsignore

  Log:
    Added petidomo.ps to the list of ignored files.

  Summary:
    Revision    Changes     Path
    1.2         +1  -4      ossp-pkg/petidomo/docs/.cvsignore
  ____________________________________________________________________________

  Index: ossp-pkg/petidomo/docs/.cvsignore
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 .cvsignore
  --- ossp-pkg/petidomo/docs/.cvsignore	2001/01/20 11:00:17	1.1
  +++ ossp-pkg/petidomo/docs/.cvsignore	2001/02/12 19:18:19	1.2
  @@ -1,4 +1 @@
  -petidomo.log
  -petidomo.aux
  -petidomo.dvi
  -petidomo.toc
  +petidomo.log petidomo.aux petidomo.dvi petidomo.ps petidomo.toc

From ossp-cvs-owner@ossp.org  Mon Feb 12 20:23:16 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f1CJNFk40057; Mon, 12 Feb 2001 20:23:15 +0100 (CET)
Date: Mon, 12 Feb 2001 20:23:15 +0100 (CET)
Message-Id: <200102121923.f1CJNFk40057@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/petidomo config-files.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   12-Feb-2001 20:23:15
  Branch: HEAD                             Handle: 2001021219231500

  Modified files:
    ossp-pkg/petidomo       config-files.c

  Log:
    Fixed the incorrect default path to the help file.

  Summary:
    Revision    Changes     Path
    1.4         +2  -2      ossp-pkg/petidomo/config-files.c
  ____________________________________________________________________________

  Index: ossp-pkg/petidomo/config-files.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 config-files.c
  --- ossp-pkg/petidomo/config-files.c	2001/01/20 13:58:45	1.3
  +++ ossp-pkg/petidomo/config-files.c	2001/02/12 19:23:15	1.4
  @@ -1,6 +1,6 @@
   /*
      $Source: /e/ossp/cvs/ossp-pkg/petidomo/config-files.c,v $
  -   $Revision: 1.3 $
  +   $Revision: 1.4 $
   
      Copyright (C) 2000 by CyberSolutions GmbH, Germany.
   
  @@ -37,7 +37,7 @@
   static char*  master_password = NULL;
   static char*  mta             = NULL;
   static char*  mta_options     = "-i -f%s";
  -static char*  help_file       = DATADIR "/petidomo.conf";
  +static char*  help_file       = DATADIR "/help";
   static char*  acl_file        = SYSCONFDIR "/petidomo.acl";
   static char*  index_file      = LOCALSTATEDIR "/index";
   static char*  list_dir        = LOCALSTATEDIR "/lists";

From ossp-cvs-owner@ossp.org  Mon Feb 12 20:23:53 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f1CJNqu40127; Mon, 12 Feb 2001 20:23:52 +0100 (CET)
Date: Mon, 12 Feb 2001 20:23:52 +0100 (CET)
Message-Id: <200102121923.f1CJNqu40127@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/petidomo/docs petidomo.tex
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   12-Feb-2001 20:23:52
  Branch: HEAD                             Handle: 2001021219235100

  Modified files:
    ossp-pkg/petidomo/docs  petidomo.tex

  Log:
    Started a complete rewrite of the user manual. So far, the
    installation process is covered. Other things will follow.

  Summary:
    Revision    Changes     Path
    1.3         +402 -1805  ossp-pkg/petidomo/docs/petidomo.tex
  ____________________________________________________________________________

  Index: ossp-pkg/petidomo/docs/petidomo.tex
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 petidomo.tex
  --- ossp-pkg/petidomo/docs/petidomo.tex	2000/12/13 14:24:03	1.2
  +++ ossp-pkg/petidomo/docs/petidomo.tex	2001/02/12 19:23:51	1.3
  @@ -2,1888 +2,485 @@
   %
   % Petidomo Manual
   %
  -% $Header: /e/ossp/cvs/ossp-pkg/petidomo/docs/petidomo.tex,v 1.2 2000/12/13 14:24:03 simons Exp $
  +% $Header: /e/ossp/cvs/ossp-pkg/petidomo/docs/petidomo.tex,v 1.3 2001/02/12 19:23:51 simons Exp $
   %
   \typearea[2cm]{12}
  -\usepackage{graphicx}
  -\usepackage{lastpage}
  -\usepackage{fancyhdr}
  -\pagestyle{fancy}
  -\lhead{\sl The Petidomo Mailing List Manager}
  -\chead{}
  -\rhead{Page \thepage\ of \pageref{LastPage}}
  -\lfoot{}
  -\cfoot{}
  -\rfoot{}
  -\fancypagestyle{plain}{}
   \fussy
   
  -%
  -% Self-defined macros
  -%
  -\newcommand{\PetidomoM}{{\scshape Peti\-domo Mail\-ing List Ma\-nager}}
  -\newcommand{\Petidomo}{{\scshape Peti\-domo}}
  -\newcommand{\PetidomoTwo}{{\scshape Peti\-domo 2.2}}
  -\newcommand{\Def}[1]{{\sl #1}}
  -\newcommand{\file}[1]{{\sf #1}}
  -
  -%
  -% Begin of document
  -%
   \begin{document}
  -
  -%
  -% Titlepage
  -%
   \title{The Petidomo Mailing List Manager}
  -\author{Peter Simons $<$simons@petidomo.com$>$}
  -\date{March, 7th 1999}
  +\author{Peter Simons $<$simons@computer.org$>$}
  +\date{February 2001}
   \maketitle
   
  -%
  -% Table of contents
  -%
   \tableofcontents
   \clearpage
   
  -%
  -% Begin of actual text
  -%
  -\chapter{Introduction}
  -
  -Congratulations. Obviously you are a clever person. Not only
  -did you choose the \PetidomoM\ to run your mailing lists, you also
  -decided to read the user manual. I really appreciate that, mostly
  -because I strongly dislike writing user manuals and it gives the whole
  -process at least some sense that someone actually reads it.
  -
  -For a start, I think, I will bore you with a few historical facts,
  -which you can absolutely afford to skip if you're in a hurry. What you
  -probably are. I'll recount the story of \Petidomo\ nonetheless.
  -
  -\section{History of Petidomo}
  -
  -Thanks to using version control systems consequently, I was able to
  -determine that I started working on \Petidomo\ exactly at fourty
  -minutes after midnight on the December 26th, 1993. I was in desperate
  -need of a mailing list server for my Amiga computer and so I queried
  -``archie'' for source codes. (Does anybody remember the days when
  -``archie'' was still popular?)
  -
  -What I found was a Unix package called ``Listserv'', which implemented
  -some basic functionality like subscribing and unsubscribing a mailing
  -list automatically. Unfortunately there are many differences between
  -Unix and the AmigaOS, which my computer had. It took until January
  -9th, 1994 before I had a running version of the program and not even
  -the small number of commands the Unix version originally had worked.
  -
  -Anyway, I had my mailing list server and eventually I was able to
  -release it to the public under the name ``AmigaListserv''. Since it
  -was the only mailing list server in existance for the Amiga platform,
  -it became pretty popular after a while and I was flooded with bug
  -reports, enhancement requests, proposals of marriage and insults of my
  -general ability to program. So I turned the project into a shareware
  -product and spent countless hours improving the code and adding new
  -features. If I remember correctly, I was able to bring two more major
  -releases out until I had reached ``AmigaListserv version 3.0''.
  -
  -At some point, though, I became more and more discontend with the
  -abilities of the Amiga's operating system as an Internet server and at
  -last I switched to Unix. After looking at various mailing list servers
  -for the Unix operating system and disliking them thoroughly, I started
  -porting my own program back to Unix, where it came from originally.
  -
  -It took quite a while before I had a running version again, but on
  -December 30th, 1995 ``Listserv 4.0 beta'' took over my mailing lists on
  -Unix. Needless to say that porting a souce code between two different
  -systems twice leaves traces behind. The source code was a mess and the
  -number of recursive defines, redefining what other defines had been
  -redefined before had increased beyond the point where you call a
  -source code ``spaghetti code''.
  -
  -Nonetheless, around May 1996 I faithfully release the 1.0 version to
  -the public under GNU General Public License and waited for feedback.
  -The first mail that arrived after my announcement in the USENET-news
  -was a mail from an L-Soft employee who told me that I would be sued if
  -I wouldn't change the name of my package, because they were selling a
  -program called ``LISTSERV'' for years already and had protected the
  -name.
  -
  -So I renamed my package to ``\Petidomo\ 1.0'' and released it again.
  -
  -The number of installations \Petidomo\ quickly had, and the number of
  -positive feedback I received exceeded my expectations by far. Clearly,
  -I must have been doing something right, if a serious number of people
  -preferred my package over the way more powerful alternatives for Unix,
  -like Majordomo, Smartlist, Procmail and LISTSERV.
  -
  -Again I started improving the functionality, cleaning up the code,
  -making it more portable and stable and so on\dots{} \Petidomo\ reached
  -release number 1.3 on December 27th, 1996, almost exactly three years
  -after I started working on the very first version.
  -
  -\Petidomo\ 1.3 was a widely used and appreciated package, it was stable,
  -very portable, easy to understand and to maintain and it was all in
  -all pretty neat. So I deleted all the source codes and started
  -re-writing it from the scratch.
  -
  -Don't ask why, programmers do these things occasionally.
  -
  -The result of this effort is \PetidomoTwo, as you can see. The 2.1
  -version exceeds \Petidomo\ 1.x's functionality and power in absolutely
  -every aspect, while being even easier to setup and to maintain. Not a
  -single line of code from the original 1.x version was used and the
  -benefit of this is a very modern and efficient design that I am quite
  -proud of.
  -
  -Some people are disappointed that the 2.1 version is a commercial
  -product now, but too much time and effort has been put into it to give
  -it away for free, I am afraid. But I think the ``free for
  -non-commercial use'' clause is fair for everybody.
  -
  -Well, thanks for bearing with me during all this gossip, but I felt
  -obligated to tell this story.
  -
  -And now have fun with the technical part of the manual and I hope you
  -like my program.
  -
  -\section{Acknowledgments}
  -
  -Many people contributed to the development of \Petidomo\ directly or
  -indirectly, and we would like to thank everybody for their help at
  -this point.
  -
  -Hey, all you beta testers: This paragraph is for you. I bet you still
  -can't believe that there's an actual manual for \Petidomo\ available
  -now. Be assured of our deep respect and gratitude for managing to use
  -a software package that was sometimes unstable and weird, and always
  -undocumented except for a totally outdated README file.
  -
  -A big ``thank you'' to Markus Fleck of the University of Bonn for
  -providing us with an FTP mirror of the \Petidomo\ Beta distributions.
  -
  -\begin{sloppypar}
  -Furthermore, our appreciation to Gray Watson for writing the excellent
  -``argv'' and ``dmalloc''-libraries, which have been used in the
  -\PetidomoM\ during the beta testing phase.
  -\end{sloppypar}
  -
  -And last, but not least, the developers would like to thank the team
  -of CyberSolutions~GmbH for their support during the development,
  -for taking over all the marketing stuff while we were programming and
  -for providing the Internet WWW server for \Petidomo.
  -
  -\chapter{What is a mailing list anyway?}
  -
  -This chapter is meant as an introduction into the principles of
  -mailing lists, the way a mailing list server works and the terminology
  -commonly used in this context. For the beginner, it is recommended to
  -read this chapter carefully, as many of the terms used in the rest of
  -the manual will be explained here. Advanced readers can safely skip
  -this chapter because it does not describe the \Petidomo\ mailing list
  -server in particular and is not relevant for configuring and using the
  -package.
  -
  -\bigskip
  -
  -Electronic mail is still the most-used service in the Internet, and
  -not the WWW, as one might expect. It use it for causual conversations
  -between people all over the world, for discussions of all kind of
  -topics, for transmitting data files through the net or for
  -distributing information amongst colleagues in a world-wide company.
  -Even in Intranets electronic mail is very useful, because it is quick,
  -easy to archive and reliable.
  -
  -Electronic mail is not limited to conversations between only two
  -peers. A mail may have several recipients unlike a paper letter.
  -Hence, discussions between groups of people can be held with this
  -media easily. Everybody sends the mail to all persons involved in the
  -discussion and everybody can reply in a way that all others see his
  -text, too.
  -
  -For larger groups of people, though, this becomes inconvenient. When
  -exchanging e-mail in a larger group of recipients, people tend to
  -accidently forget persons in the list of recipients, they send their
  -replies to the wrong person, they have to keep their aliases
  -up-to-date for the mail to reach the person, etc\dots{}
  -
  -To remedy these shortcomings, the idea of the mailing list was
  -developed. A mailing list is \Def(hosted) on a central server, which has the addresses of the people who
  -are on that mailing list. Then a special account is created, called
  -the \Def{mailing list address}, to which people can send the mail they
  -want to be distributed to all receivers.
  -
  -\begin{figure}[bth]
  -\begin{center}
  -\includegraphics{ml-principle1.eps}
  -\caption{A mail is posted to the mailing list.}
  -\end{center}
  -\end{figure}
  -
  -The machine accepts the mail, looks up the list of addresses in the
  -list, and re-sends the mail to all those people. If one of the persons
  -on the list wants to reply to a mail he or she has received via the
  -mailing list, he or she sends the reply to the mailing list address
  -again and it is automatically distributed among all recipients again.
  -
  -The list of addresses on the machine hosting the mailing list is
  -called the \Def{list of subscribers} and a person who is on that list
  -is consequently called a \Def{mailing list subscriber}. The process of
  -sending an e-mail to the special address with the intention to get it
  -distributed to all subscribers is called \Def{posting to a list}.
  -
  -\begin{figure}[bth]
  -\begin{center}
  -\includegraphics{ml-principle2.eps}
  -\caption{A subscriber replies to the mail.}
  -\end{center}
  -\end{figure}
  -
  -The advantage of this setup is that each subscriber only has to know
  -the address of the mailing list and not all the addresses of all the
  -subscribers. In fact, a subscriber doesn't even have to know who is
  -subscribed to the mailing list at all.
  -
  -Imagine the company you're working for would have a mailing list where
  -all employees are subscribed with their current e-mail address. The
  -mailing list address would then be, say,
  -``all-employees@enterprise.com''. If you'd like to inform all your
  -colleagues about an important happening, you'd simply send an e-mail
  -to that address and everybody would receive it. If a person leaves the
  -company, or a new employee comes to the company, only the list of
  -subscribers on the mailing list server has to be updated and
  -everything would work fine.
  -
  -Basically, this is what a mailing list server does: It is nothing more
  -than a program that stores a list of addresses, receives mail under a
  -special mailing list address and then re-sends the mail to all
  -subscribers.
  -
  -Of course you're not limited to one mailing list, you can host as many
  -as you like. Not only a list for all employees, but also discussion
  -forums for the management of the company, for all members of a certain
  -department or all the left-handers. Privately, you can use mailing
  -lists to discuss your favourite hobby with other interested people,
  -you can spread basketball statistics or the latest version of a
  -program all the subscribers are using. There's no limitation. Whenever
  -a group of people has to exchange electronic mail on a regular basis,
  -a mailing list is a good way to do it.
  -
  -\bigskip
  -
  -As you can probably imagine, the task of keeping the list of
  -subscribers up-to-date becomes a bit difficult when the number of
  -subscribe addresses grows beyond a few dozen, because people tend to
  -change their e-mail addresses from time to time, for various reasons.
  -On a mailing list for a thousand subscribers from all over the world,
  -the maintainer of the list would probably spend most of his time
  -editing the list file, removing or adding addresses.
  -
  -That is why \Petidomo\ allows people to do that themselves.
  -Additionally to the part that re-sends the mail to all subscribers,
  -there's a program included in the package that understands a number of
  -commands, like ``subscribe'' or ``unsubscribe''.
  -
  -If you want to have your address added to a mailing list, you do not
  -contact the maintainer of the list, but you send an e-mail to
  -\Petidomo\ and put the command ``subscribe'' into the mail. \Petidomo\
  -will then add your address to the list automatically. Not only is this
  -easier and more convenient for you, it is also a lot faster. Usually,
  -\Petidomo\ will process a subscription request for a mailing list in a
  -tenth of a second, 24 hours a day, while a human maintainer of the
  -list would probably need several hours or even days to cope with the
  -incoming e-mail.
  -
  -Similarly you can remove your address from a mailing list, or you can
  -change the address you are subscribed under within a few moments and
  -now human interaction is required.
  -
  -So how does this work? It's very easy in fact: The command interpreter
  -of the mailing list server has a special address, too. This is the
  -name of the list, with the text ``-request'' append to it. All e-mails
  -directed to this account will be processed by the server. If, for
  -example, you want to subscribe to a mailing list with the name
  -``basketball'', which has the address ``basketball@nba.com'', you'd
  -send an e-mail to the address ``basketball-request@nba.com'' and put
  -the word ``subscribe'' in the body of the mail.
  -
  -\Petidomo\ would then receive the mail a few moments later, process
  -it, add your address to the list of subscribers and send you a short
  -recipt back to let you know that your subscription was successful.
  -
  -It is very important that you know the difference between the address
  -of the mailing list itself, and the program that is maintaining the
  -list of addresses. If you'd write your mail to ``basketball@nba.com''
  ---- to stick with our example --- instead of
  -``basketball-request@nba.com'', your command would not be processed by
  -the server but would be re-sent to all subscribers. This is a common
  -mistake beginners make and it is a particular annoying one, because
  -the subscribers are bothered with the useless article on the list, and
  -secondly, because the person who tried to subscribe will not get what
  -he or she wanted: To be subscribed to the list.
  -
  -The type of mailing list we have described so far is known as a
  -\Def{public mailing list}. That is a list that is open to everyone to
  -subscribe. Opposed to that is a \Def{closed mailing list}. That is a
  -mailing list where only certain people may subscribe or where every
  -subscription requests needs the approval of the list maintainer to
  -succeed.
  -
  -The public mailing list is widely used in the Internet for all kind
  -discussion forums, while a closed mailing list is typically used by
  -companies or organizations for maintaining internal forums, that are
  -not meant for everybody. \Petidomo\ can maintain both kind of lists,
  -of course, and a number of variations between the public and the
  -closed list, so it will usually suit your needs just fine.
  -
   \chapter{Installing Petidomo}
   
  -The installation of the \PetidomoM\ is mostly handled by the script
  -\file{install.sh}, which is included in the distribution. But before
  -the script can be run, a few preperations have to be done manually.
  -
  -Just follow the steps as described below:
  -
  -\begin{enumerate}
  -
  -\item Become `root'. You will need super user privileges.
  -
  -\item Create a user `petidomo' using vipw(8),
  -     adduser(8) or whatever method your system uses. The user should
  -     not have a valid shell, nor a valid password because it is very
  -     unlikely that anybody ever needs to log in as `petidomo'. The
  -     home directory, though, is of some importance because the
  -     directory you specify here is the base directory for the whole
  -     \Petidomo\ installation. An example entry in \file{/etc/passwd}
  -     looks like this:
  +The installation of the Petidomo Mailing List Manager is simple and
  +straight forward; do not be scared by the length of this chapter.
  +There are many different ways and options how to install it and I have
  +tried my best to cover \emph{all} of them. If you are not interested
  +in every little detail, you will be able to skim over most of the text
  +here.
  +
  +\section{Getting it}
  +
  +    {\sf This section has not been written yet, because the means of
  +    obtaining Petidomo from the Internet are not entirely defined at
  +    the moment. I put all my hope into the most kind Mister
  +    Engelschall to fill in the details here. }
  +
  +\section{Building the Binaries}
  +
  +Untar the source archive of Petidomo in a directory of your choice
  +like {\sf /usr/local/src} or your home directory. This will create a
  +directory called {\sf petidomo-VERSION}, where the ``{\sf VERSION}''
  +part is called exactly as in the file name of the tar archive. Change
  +into this directory.
   
  -\begin{verbatim}
  -     petidomo:*:300:300:Petidomo Mailing List Manager:
  -         /usr/local/petidomo:/usr/bin/true
  -\end{verbatim}
  -
  -     This means that all files belonging to \PetidomoTwo\ live in the
  -     \file{/usr/lo\-cal/pe\-ti\-domo} tree. The entry in the password file can be
  -     changed at any time. Hence it is very easy to move \Petidomo\
  -     to a different location or to de-install the whole package.
  -
  -\item Create a group `petidomo' and make the `petidomo'-user a member of it.
  -     You should also add all users of your system, that will administrate
  -     the mailing list server. Membership in the `petidomo' group will give
  -     these users full access to all configuration files, so be careful who
  -     to add.
  -
  -\item As `root', execute the
  -     install script included in the distribution with `./install.sh'
  -     The script will ask you a couple of questions about your system
  -     and insert the appropriate values in the config files. Ones the
  -     script is finished, your \Petidomo-Installation is complete and
  -     ready to run.
  -
  -\end{enumerate}
  -
  -If choose not to let the install script create the required aliases
  -for \Petidomo, you will have to do that manually as described in
  -section~\ref{aliases} of the manual.
  -
  -\section{Logfiles}
  -
  -Reading the log files \Petidomo\ writes the single most important
  -thing you have to do whenever something unexpected happens. Often
  -enough the problem is very easy to to fix, if you know what the
  -problem actually is. To support you in locating problems, \Petidomo\
  -does extensive logging, espcially in case of an error.
  -
  -For this, \Petidomo\ uses the syslog(3) functionality, which is part
  -of every major Unix derivate today. \Petidomo\ uses the {\tt
  -MAIL}-facility to log via syslog, so it is recommended, that you check
  -your \file{/etc/syslog.conf} file, whether you are writing the {\tt
  -MAIL}-facility into a file or not. Typically an entry in
  -\file{/etc/syslog.conf} would look like this:
  -\begin{verbatim}
  -mail.*                           /var/log/maillog
  -\end{verbatim}
  -
  -If you are unfamiliar with the syslog-functionality, please read the
  -following man pages: syslog.conf(5), syslogd(8) and syslog(3). They
  -explain all the features briefly and you will greatly benefit from the
  -knowlege --- not only for using \Petidomo, but for maintaining your
  -whole system.
  -
  -\section{Directory Structure}
  -
  -\begin{figure}[bth]
  -\begin{center}
  -\includegraphics[width=\textwidth]{directory-struct.eps}
  -\caption{The \Petidomo\ directory structure.}
  -\label{directory structure}
  -\end{center}
  -\end{figure}
  -
  -Before we dive into the details configuration of \Petidomo, it is
  -necessary to describe the directory structure of the package.
  -\Petidomo's base path, which we call \Def{\~{}petidomo} throughout the
  -manual, is the home directory of the `petidomo' user. Relative to this
  -directory, \Petidomo\ accesses its master config file as
  -\file{etc/petidomo.conf}. This is the so called \Def{master config
  -file}, which sets globally required options such as the path to the
  -mail transport agent (MTA), the fully qualified domain name of the
  -machine, \Petidomo\ is running on, etc\dots{}
  -
  -Each list now has a config file of its own, where various settings are
  -configured that are valid only for that list locally. All mailing
  -lists live in the path \file{lists/$<$listname$>$}, with ``$<$listname$>$''
  -being the name of the mailing list. The config file for the mailing
  -list ``testlist'' can congruously be found under the path
  -\file{lists/testlist/config}, relative to the base directory of
  -course.
  -
  -\section{The Config Files}
  -
  -We will describe the master config file first now, followed by the
  -options you can set on a per-list basis.
  -
  -\subsection{Config File Syntax}
  -
  -All configuration files in the \Petidomo-package\label{Config file
  -format}, have the following format:
  -\begin{verbatim}
  -keyword         parameter
  -\end{verbatim}
  -
  -The ``keyword''-part must start at the first column of the line and is
  -followed by one or several blanks or tabs. The first non-blank
  -character then is interpreted as the parameter for this keyword. The
  -following line, for example:
  -\begin{verbatim}
  -Hostname        petidomo.is.great
  -\end{verbatim}
  -will tell \Petidomo\ that the name of the machine it is running on is
  -called ``petidomo.is.great''. If the parameter contains any blanks,
  -what is not very likely for a hostname, but may happen with other
  -settings, you should enclose it in double quotes, like this:
  +Now you have to run the configure script
  +\begin{quote}
   \begin{verbatim}
  -AdminPassword   "open sesame"
  +./configure
   \end{verbatim}
  -
  -Quoting the parameter is not strictly necessary, though, \Petidomo's
  -config file parser will get it right anyway. You only have to quote
  -the parameter, if it contains blanks as first or last character, what
  -is rather unlikely to happen.
  -
  -Furthermore all empty lines are ignored. So are lines that start with
  -a `\#' sign. You can use this for writing comments for the reader into
  -the config file.
  -
  -\subsection{The Master Config File}
  -\label{master config file}
  -
  -\Petidomo\ expects its master config file to be found under
  -\file{\~{}peti\-do\-mo/etc/pe\-ti\-domo.conf}. The following keywords are
  -recognized:
  -
  -
  +\end{quote}
  +which will determine the characteristics of your system and create the
  +files required to actually build Petidomo. You may provide several
  +parameters to the script. The interesting ones, including the default
  +values if unspecified, are:
   \begin{description}
  -
  -\item[Hostname] \hfill ``hostname.domainname''
  -
  -This entry specifies the fully qualified domain name of the machine,
  -\Petidomo\ is running on. A fully qualified domain name is the
  -hostname of the machine with the domain name appended with a dot. The
  -following, for example:
  -\begin{verbatim}
  -HostName        listserver.foo.bar
  -\end{verbatim}
  -would be a valid statement. Normally this option has been set by the
  -install script correctly already.
  -
  -The name you set here is not necessarily the name, \Petidomo\ will use
  -when delivering mailing list-postings to the subscribers, or when
  -answering requests, because you can specify a different fully
  -qualified domain name for every mailing list you host. This is known
  -as \Def{virtual hosting}.
  -
  -This option is \emph{required}. \Petidomo\ will abort with an error,
  -if the master config file doesn't set it.
  -
  -\item[AdminPassword] \hfill ``password''
  -
  -This tag sets the master password, which authenticiates the
  -administrator of the \PetidomoM. Here is an example:
  -\begin{verbatim}
  -AdminPassword   "open sesame"
  -\end{verbatim}
  -Normally this option has been set by the install script already.
  -
  -Please chose this password carefully. Knowledge of the master password
  -will enable you to access \emph{all} mailing lists running on this
  -system.
   
  -Passwords are compared case-insensitively. That means, that the
  -passwords ``Open SESAME'', ``open sesame'' and ``OPEN seSAme'' are all
  -the same.
  +\item[{-}{-}help] Display the complete list of command line options.
   
  -This option is \emph{required}. \Petidomo\ will abort with an error,
  -if the master config file doesn't set it.
  +\item[{-}{-}prefix] The the {\sf PREFIX} for all following paths. The
  +default is {\sf /usr/local}.
   
  -
  -\item[MTA] \hfill \file{/path/to/sendmail}
  -
  -The MTA tag tells \Petidomo\ which mail transport agent should be used
  -to deliver outgoing emails. Normally this option has been set by the
  -install script already, so you don't need to worry about this anymore.
  -
  -An example setting is:
  -\begin{verbatim}
  -MTA     "/usr/sbin/sendmail"
  -\end{verbatim}
  -but \Petidomo\ will run fine with other mail transport agents, too. So
  -far, the system has been tested with the Allman sendmail, SMail and
  -qmail without any problems.
  -
  -This option is \emph{required}. \Petidomo\ will abort with an error,
  -if the master config file doesn't set it.
  -
  -
  -\item[MTA\_Options] \hfill ``string''
  -
  -This tag is a bit tricky and in ninety-nine out of hundred cases you
  -should simply leave this option undefined as it is rarely required
  -anyway.
  -
  -This entry sets the options which will be handed over to the MTA
  -when it is called. The following example
  -\begin{verbatim}
  -MTA_Options "-odq -v -f%s"
  -\end{verbatim}
  -will yield a call ``$<$MTA$>$ -odq -v -f$<$envelope$>$''. The `\%s' is
  -replaced with the envelope the mail should be sent under.
  -
  -Adding options to the execution call of the mail transport agent can
  -be useful to enable or disable certain features for mailing lists
  -only, while leaving them on for all other mail. The `-odq' setting is
  -a fine example. This parameter will tell the Allmann sendmail to queue
  -all mail, instead of trying to deliver it immediately.
  -
  -\item[DetachImmediately] \hfill ``yes'' or ``no''
  -
  -This option decides whether \Petidomo\ will run in syncronous or
  -asyncronous mode. When a part of the package is called, it expects an
  -incoming email message on standard input, which has usually been
  -received by the SMTP daemon before. So the daemon will pipe the mail
  -into the program.
  -
  -In syncronous mode, \Petidomo\ will process the mail completely, before
  -it terminates. Hence, the SMTP daemon has to wait until the whole mail
  -is processed, before it can terminate itself. This may cause memory
  -problems at high-load servers, where several dozen, or even hundreds
  -of emails can arrive at the same time.
  -
  -In asyncronous mode, \Petidomo\ will read the mail and then detach
  -itself. The advantage is that the SMTP daemon can terminate
  -immediately and doesn't have to wait until \Petidomo\ is finished
  -processing the mail. The disadvantage is that in case of an error, the
  -SMTP daemon will not receive the return code from \Petidomo. For
  -smaller servers, syncronous mode is recommended --- larger servers
  -should use asyncronous mode.
  -
  -To run in syncronous mode, set the parameter to ``no'':
  -\begin{verbatim}
  -DetachImmediately       no
  -\end{verbatim}
  -to run in asyncronous mode, set the parameter to ``yes'':
  -\begin{verbatim}
  -DetachImmediately       yes
  -\end{verbatim}
  +\item[{-}{-}exec-prefix] Set the {\sf EPREFIX} for all following
  +paths. This is useful in case you want to install binaries into a
  +different directory hierarchy than normal text files, but usually the
  +{\sf EPREFIX} is identical to {\sf PREFIX}. The default is {\sf
  +PREFIX}.
  +
  +\item[{-}{-}bindir] Set the directory where the binaries should be
  +installed. The default is {\sf EPREFIX/bin}.
  +
  +\item[{-}{-}libexecdir] Set the directory where executables should be
  +installed that will be called by Petidomo but not by the user directly
  +(like posting filters). The default is {\sf EPREFIX/libexec}.
  +
  +\item[{-}{-}datadir] Set the directory where read-only
  +architecture-independent data files should be installed (like the help
  +file). The default is {\sf PREFIX/share}.
  +
  +\item[{-}{-}sysconfdir] Set the directory where read-only
  +configuration files should be installed. The default is {\sf
  +PREFIX/etc}.
  +
  +\item[{-}{-}localstatedir] Set the directory where modifiable
  +data files should be installed (like the approve-queue or the mailing
  +list config files). The default is {\sf PREFIX/var}.
   
  -The default, if the option is unset, is to operate syncronously.
  +\item[{-}{-}mandir] Set the directory where man documentation files
  +should be installed. The default is {\sf PREFIX/man}.
   
  -\item[ShowStatistics] \hfill ``yes'' or ``no''
  +\end{description}
   
  -\Petidomo\ will append a small signature to all request-mails it
  -processes. This signature looks like this:
  +Please note that the directories you specify here are only the default
  +settings that are compiled into Petidomo. You can modify \emph{all}
  +paths at run-time via the command line and through the configuration
  +files. So don't waste to much time figuring out what you want here,
  +you can change anything later without having to recompile Petidomo.
   
  +Finally, here is an example output of the configuration script when
  +run without any parameters on a Linux machine:
   \begin{quote}
   \begin{verbatim}
  ---
  - /*
  -  * Listserver software: Petidomo 2.2-beta-2 (non-commercial)
  -  * Server hardware    : NetBSD-i386
  -  * Utilized cpu time  : 0.125863 seconds
  -  * Utilized memory    : 227 KByte
  -  */
  +simons@peti:~/projects/petidomo-4.0b1$ ./configure
  +Configuring OSSP Petidomo, Version 4.0b1 (18-Jan-2001)
  +creating cache ./config.cache
  +checking for gcc... gcc
  +checking whether the C compiler (gcc  ) works... yes
  +checking whether the C compiler (gcc  ) is a cross-compiler... no
  +checking whether we are using GNU C... yes
  +checking whether gcc accepts -g... yes
  +checking for ranlib... ranlib
  +checking for flex... flex
  +checking for yywrap in -lfl... yes
  +checking for bison... bison -y
  +checking size of unsigned short... 2
  +checking size of unsigned int... 4
  +checking size of unsigned long... 4
  +checking how to run the C preprocessor... gcc -E
  +checking for ANSI C header files... yes
  +checking for ssize_t... yes
  +updating cache ./config.cache
  +creating ./config.status
  +creating Makefile
   \end{verbatim}
   \end{quote}
  -
  -You can switch this behavior off by setting this option to ``no''.
  -
  -\end{description}
  -
  -\subsection{The list config file}
  -\label{list config file}
   
  -While the master config file sets options which are relevant for the
  -\Petidomo\ package as a whole, the list config file sets
  -options which are valid only locally for the mailing list. Each
  -mailing list expects its local config file to be found at
  -\file{\~{}petidomo/lists/<listname>/config}, with ``$<$listname$>$''
  -being the name of the mailing list.
  -
  -For a description of the config file format, please refer to
  -section~\ref{Config file format} of the user manual. We will only
  -describe the various settings here.
  -
  +Often, you may want to pass certain flags to the compiler or the
  +linker to modify the building process. To achieve this, you can set
  +certain environment variables before calling the configure script.
  +These variables are:
   \begin{description}
  -
  -\item[ListType] \hfill ``open'', ``closed'' or ``moderated''
  -
  -There are three types of mailing lists \Petidomo\ knows about: ``Open
  -lists'' (or ``public lists''), ``closed lists'' and ``moderated
  -lists''. The difference betweem the three types is, who is allowd to
  -post an article on the mailing list.
  -
  -If you want everybody to be able to post to the mailing list, whether
  -he is subscribed or not, you should set this entry like this:
  -\begin{verbatim}
  -ListType        open
  -\end{verbatim}
  +\item[CC] The name of the C compiler to use.
   
  -If you want to allow only postings from people, who are subscribed to
  -the list, set the entry as follows instead:
  -\begin{verbatim}
  -ListType        closed
  -\end{verbatim}
  -
  -Or, if you want to allow only a small number of people to post, set
  -the list to ``moderated'':
  -\begin{verbatim}
  -ListType        moderated
  -\end{verbatim}
  -
  -Please note that the ``ListType'' tag specifies only who is allowed to
  -\emph{post}, not who is allowed to subscribe to the list.
  -
  -The list type you will usually use is ``open'', at least for a public
  -mailing list where everybody is free to subscribe. The ``closed'' list
  -has been added, because open mailing lists are frequently abused by a
  -few people who use them to distribute commercial advertisement.
  -Because these people (common known as \Def{Spammer}s) do not actually
  -subscribe to the list, but merely post their junk to it, their abuse
  -will be rejected on a closed forum, while all the regular users can
  -post without any problems.
  -
  -The problem is, though, that the distinction between a subscriber and
  -a non-subscriber is made by the address the e-mail is coming from.
  -This causes problems when a person is subscribed to a list as
  -``example@address.net'', but tries to post from a different account
  -than that one. \Petidomo\ tries to recognize that as far as it can.
  -It doesn't matter, for example, whether you are posting from
  -``address@host1.address.net'' or ``address@host2.address.net''.
  -\Petidomo\ will handle that. But if the article comes from
  -``example@private.account'', it will be rejected, even though the
  -sender might be a valid subscriber.
  -
  -It depends on the subscribers of the mailing list, whether this is a
  -problem or not.
  -
  -A moderated list, finally, is a list where all postings will be
  -rejected unless they have a valid password included in the mail. This
  -type of list is useful for a mailing list that is meant to distribute
  -certain information to a group of people, but not for discussion.
  -Everybody, who wants to have an article delivered to the subscribers,
  -will send it to the mailing list. The list server will then forward
  -the article to the list maintainer for approval.
  -
  -The list maintainer can now either drop the mail, if it doesn't fit
  -into the list's topic, or he can post it to the list, using the
  -propper password. How this is done in detail is exlained in
  -section~\ref{petidomo as admin} of the user manual.
  -
  -This option is \emph{required}. \Petidomo\ will abort with an error,
  -if the list config file doesn't set it.
  -
  -\item[AllowPublicSubscription] \hfill ``yes'' or ``no''
  -
  -Set this entry to either ``yes'' or ``no'', depending on whether you
  -want the mailing list to be open for everybody to subscribe or not.
  -
  -If somebody tries to subscribe to a mailing list, which has been set
  -to ``no'' here, the request will be forwarded to the list
  -administrator for approval by \Petidomo.
  -
  -If this option is unset, the default to allow public subscription.
  -
  -\item[AllowAlienSubscription] \hfill ``yes'' or ``no''
  -
  -Please excuse the name of this tag, but no matter how hard we thought,
  -we were unable to come up with a better name for it. If you have any
  -suggestions, please send them to $<$simons@petidomo.com$>$.
  -
  -Anyway, this option specifies whether it is allowed to subscribe or to
  -unsubscribe an address not equal to the one, the mail has been sent
  -from. Set the option to ``yes'' to allow un-/subscribing a different
  -address, or to ``no'' to disallow it.
  -
  -\item[AllowMembersCommand] \hfill ``yes'' or ``no''
  -
  -\Petidomo\ knows a command ``members'' or ``who'', which can be sent
  -to the server and it will reply with the complete list of subscribed
  -addresses for the mailing list. This may be useful for list
  -administrators, but it can be abused easily by spammers, to collect
  -addresses where to send their unsolicted commercial e-mail to.
  -
  -Furthermore, with certain mailing lists it may be undesirable that one
  -can see ``who else'' is subscribed to that list. That's why this
  -option has been added. If you set it to ``no'', the
  -``members''-command will be diabled for this list. (This is also the
  -default if the option is not specified in the config file.)
  -
  -If you set it to ``yes'', the ``members''-comman will work.
  -
  -\item[ShowOnIndex]  \hfill ``yes'' or ``no''
  -
  -\Petidomo\ allows people to request a list of mailing list running on
  -the server, using the ``index'' command. While it is generally a good
  -thing that everybody can look up what mailing lists exist, there are
  -mailing lists that you don't want to make publically known, such as
  -internal lists of your company, etc\dots{}
  -
  -If you set this option to ``no'', the mailing list will not appear on
  -the index listing. The default, if this option is unset, though, is
  -``yes'' --- to show the mailing list.
  -
  -
  -\item[Hostname] \hfill ``hostname.domainname''
  -
  -This options tells \Petidomo\ to use this hostname for the mailing
  -list, instead of the one configured in
  -\file{\~{}petidomo/etc/petidomo.conf}. This feature is useful to do
  -virtual hosting.
  -
  -\Def{Virtual hosting} is required when
  -several mailing lists run on the same server, but they have to look
  -like they would coming from different machines. Let's use an example:
  -The internet service provider ``Inter.Net'' offers its customers to
  -host mailing lists for them. A small software house of the name
  -``Petiware'' wants to provide a mailing list for all its customers,
  -but they don't have a dedicated Internet line.
  -
  -So they use the service provided by Inter.Net and let them host the
  -mailing list on their machine. The mailing list server at Inter.Net
  -has the fully qualified domain name ``mail.inter.net''. Petiware,
  -though, wants the list to run under the name
  -``customers@petiware.com'' and \emph{not} ``customers@inter.net'' ---
  -what would a be misleading.
  -
  -So all the mailing list guru from Inter.Net has to do is to set the
  -entry
  -\begin{verbatim}
  -Hostname        petiware.com
  -\end{verbatim}
  -in the config file of the ``customers'' mailing list
  -(\file{\~{}peti\-domo/lists/cu\-stomers/config}). \Petidomo\ will now use the
  -hostname ``peti\-ware.com'' in all mails that are posted to that list,
  -instead of ``mail.inter.net''.
  -
  -You can specify a different hostname for every mailing list, using
  -this feature. \emph{That} is ``virtual hosting''. Further details on
  -virtual hosting can be found in section~\ref{virtual hosting and
  -sendmail} of the user manual.
  -
  -If this entry is unset, the name configured in the master config file
  -will be used as hostname for this mailing list.
  -
  -\item[AdminPassword] \hfill ``password''
  -\label{list admin password}
  -
  -This tag sets the master password, which authenticiates the
  -administrator of this mailing list. The administrator has special
  -priviledes, such as deleting other users, overriding access control
  -restrictions or un-/subscribing users to closed mailing lists. This is
  -described briefly in section~\ref{petidomo as admin} of the user manual.
  -
  -Please note that passwords are always case-insensitive. It is also
  -worth noting that the master password is always valid as administrator
  -password for the list, also.
  -
  -Leave this entry blank, if you don't want to enable remote
  -administration of the mailing list.
  -
  -\item[PostingPassword] \hfill ``password''
  -\label{posting password}
  -
  -This tag sets the ``posting password''. The posting password allows to
  -post an article to a moderated mailing list, but it does not allow any
  -administration of the list itself. On lists that are of a different
  -type than moderated, setting a posting password does usually not make
  -any sense and you can leave this entry unset.
  -
  -\item[ReplyTo] \hfill ``email@address.net'' or ``none''
  -
  -This tag controls the `Reply-To:' field, which \Petidomo\ adds to
  -posted articles before it is delivered to the recipients. Using this
  -option, you can force \Petidomo\ to insert a `Reply-To:' which points
  -to a certain address. On a moderated list, for example, you can set
  -this as follows:
  -\begin{verbatim}
  -ReplyTo         moderator@address.net
  -\end{verbatim}
  -to direct all replies to the posting to the moderator again,
  -regardless of what address is noted in the `From:' line of the mail.
  -
  -If you set ``none'', \Petidomo\ will not add a `Reply-To:' header at
  -all.
  -
  -If this option is unset, \Petidomo\ will to insert a `Reply-To:'
  -header that directs replies back to the mailing list, so that
  -subscribers can conveniently post simply by hitting the `reply'
  -function in their mail reader.
  -
  -\item[PostingFilter] \hfill ``bourne shell command''
  -
  -If you specify a posting filter, this program or script will be
  -started by \Petidomo\ before it sends a posting out to the
  -subscribers. The programm will receive the article, as it has been
  -prepared by Petidomo, on standard input and is expected to write the
  -final version of the mail to standard output. The posting filter can
  -be used to manipulate the headers for special purposes.
  -
  -An example for a postin filter that wouldn't modify the mail at all is
  -the following:
  -\begin{verbatim}
  -PostingFilter   /bin/cat
  -\end{verbatim}
  +\item[CPPFLAGS] Flags to pass to the preprocesser before compiling a
  +source code file.
   
  -A detailed discussion of posting filters can be found in
  -section~\ref{using posting filters} of the manual.
  +\item[CFLAGS] Flags to pass to the compiler when compiling a C source
  +code file.
   
  -If the filter program exits with a returncode not equal to 0 (zero),
  -\Petidomo\ will not post the article and terminate.
  +\item[LDFLAGS] Flags to pass to the linker when linking the binaries.
   
  -
  -\item[Archive] \hfill \file{/path/of/archive}
  -
  -If this option is set, \Petidomo\ will archive all articles that have
  -been posted on that mailing list. The parameter for this tag may
  -either be the name and path of a file or of a directory.
  -
  -The path may either be absolute (\file{/var/archive/list}) or relative
  -(\file{archive}). For relative paths the current directory is the home
  -directory of the mailing list this option is set for.
  -
  -If the ``Archive''-tag is set to a file, \Petidomo\ will append every
  -posted article to that file. If it is a directory, each posting will
  -be stored in that directory in a seperate file.
  -
  -Creating a mailing list archive is discussed in greater deatil in the
  -section~\ref{mailing list archives} of the user manual.
  -
  -If this option is unset, posted articles will not be archived at all.
  -
   \end{description}
  -
  -\section{The Binaries}
  -
  -The \Petidomo\ package consists of mainly two binaries:
  -\file{hermes} and \file{listserv}. Both
  -files are located in the \file{\~{}petidomo/bin} directory. In fact,
  -``hermes'' and ``listserv'' are the same binary, but they do different
  -things when called under the appropriate program name, like many other
  -commands of the Unix operating system do. They are only links of the
  -\file{petidomo}, which has no purpose
  -at all, but we thought it would be weird to deliver a package called
  -\Petidomo\ without actually having a binary of that name in there.
  -Since these three are all links to the same files, it doesn't consume
  -any diskspace anyway.
  -
  -\subsection{listserv}
  -
  -The ``listserv'' program is the tool that handles incoming requests
  -like subscribing an address to a list, unsubscribing it again or
  -generating an index of available mailing lists for the server.
  -``listserv'' will usually not be started from a shell, but from the
  -sendmail daemon. Further details on that can be found in
  -section~\ref{aliases} of the user manual.
  -
  -\subsection{hermes}
  -
  -``hermes'' is the program that processes and delivers an incoming
  -e-mail. It does not understand any commands but simply takes an e-mail
  -from the standard input file stream, re-writes the headers a bit and
  -then calls the mail transport agent with the result to be delivered to
  -the list of subscribers.
  -
  -\section{Aliases}
  -\label{aliases}
  -
  -The binaries of the \Petidomo\ package are usually not called manually
  -from the shell, but by the mail transport agent. This works as
  -follows: You create an e-mail account, which serves the purpose of
  -accepting the incoming e-mail and piping it into the appropriate
  -binary.
  -
  -This is archieved with the ``alias''-function of your mail transport
  -agent. Most MTAs, like sendmail, have a file where a list of special
  -account names is given together with the instructions what to do with
  -any mail received for that account. This file is usually located in
  -\file{/etc/aliases}.
  -
  -One thing, aliases can do is to pipe the mail into a program for
  -processing. This is the mechanism \Petidomo\ uses. \Petidomo\ requires
  -you to add the following aliases to your system:
  -\begin{verbatim}
  -#
  -# Mailing List Stuff
  -#
  -petidomo-manager: root
  -petidomo: "|/usr/local/petidomo/bin/listserv"
  -\end{verbatim}
  -
  -The lines starting with the `\#' character are only comments and are
  -ignored by the mail transport agent. The fourth line, though, is the
  -first command. It tells the MTA to accept mail for an user of the name
  -``petidomo-manager'' and to re-direct the e-mail to an user of the
  -name ``root'' --- the system administrator.
  -
  -\Petidomo\ will send notifications of an error and administrative
  -things like that to the address ``petidomo-manager''. By setting this
  -alias to a certain user name, you can control who will receive those
  -mails.
  -
  -The next line now tells the MTA to pipe any incoming mail for the user
  -``petidomo'' into the ``listserv'' program, instead of delivering it
  -into a mailbox. ``listserv'' will then parse the mail for commands and
  -react accordingly. Hence, the address people can send their
  -subscription requests to is ``petidomo@your.host.name''.
  -
  -These aliases have been created by the install script, unless you told
  -it not to, and you don't need to worry about them.
  -
  -\bigskip
  -
  -Furthermore, each mailing list on your server requires three aliases,
  -as shown in the example below, which is written for the ``testlist''
  -mailing list that comes with the distribution:
  -\begin{verbatim}
  -testlist: "|/usr/local/petidomo/bin/hermes testlist"
  -testlist-request: "|/usr/local/petidomo/bin/listserv testlist"
  -testlist-owner: petidomo-manager
  -\end{verbatim}
  -
  -The first alias, ``testlist'' is the address to which people can send
  -their mail in order to post to the mailing list. Any incoming mail for
  -that account will be piped into the ``hermes'' binary, which will
  -process the mail and then re-send it to all subscribers of the mailing
  -list. In order to let ``hermes'' know, for which mailing list the
  -posting was meant, the parameter ``testlist'' has to be specified on
  -the command line. If the name of the mailing list was ``foobar'', the
  -line would look like this:
  -\begin{verbatim}
  -foobar: "|/usr/local/petidomo/bin/hermes foobar"
  -\end{verbatim}
  -
  -The second alias is a special request address, to which users can send
  -their commands. The difference between this address and the
  -``petidomo'' alias described above is that ``listserv'' is being given
  -a default listname on the command line. The difference is this: If
  -``listserv'' receives a mail, which has the command ``subscribe'' in
  -it, without any further parameters, it will reject the command with an
  -error, because it doesn't know to which list the sender wants to be
  -added.
  -
  -If the command ``subscribe'' is sent to the ``testlist-request''
  -address, though, it will assume that the user wants to be subscribed
  -to the ``testlist'' mailing list, as this is the default list for this
  -address.
  -
  -The name of this alias should always be the name of the mailing list
  -with the string ``-request'' appended. Theoretically you could choose
  -a different name, but this unwritten standard is wide accepted
  -throghout the Internet for several years now.
  -
  -The last alias is the name of the mailing list with the string
  -``-owner'' appended. This alias points to the person who is
  -responsible for managing the ``testlist'' mailing list. \Petidomo\
  -will send all e-mail concerning the administration of the mailing list
  -to the address ``listname-owner''. Usually this will ultimately be the
  -same person as the ``petidomo-manager'', but you are free to direct
  -mail for this account to somebody else, or to several persons.
  -
  -\chapter{Using Petidomo as user}
  -\label{petidomo as user}
  -
  -In this chapter, we will describe the commands, that are
  -understood by the ``listserv'' program. ``listserv'' is the interface
  -for the users of the mailing lists, where they can send their requests
  -to in order to be subscribed to a mailing list, be unsubscribed again
  -and similar things. The text here is mostly identical with the
  -default help text that is sent to the user
  -whenever he or she issues a command that is syntactically incorrect.
  -This text is stored in the file
  -\file{\~{}petidomo/etc/help} and can be
  -customized to fit the requirements of your site.
  -
  -User commands always have to be sent to the request address of
  -the mailing list --- \emph{not} to the mailing list itself. \Petidomo\
  -will try to recognize commands that are sent to the mailing list and
  -redirect them to the ``listserv'' program, but naturally this will not
  -work in all cases. The address, where requests should be directed to,
  -is \emph{always} the address of the mailing list with the string
  -``-request'' appended to the username. If the mailing list is called
  -``politics@foo.bar'', the appropriate request address is
  -``politics-requst@foo.bar''.
  -
  -Alternatively, commands can always be sent to the address
  -``peti\-do\-mo@your.ad\-dress'', but the ``-request''-address is preferable,
  -for the fact that the ``listserv'' will have a default listname for
  -this address and thus understand a simpler command syntax.
  -
  -\section{SUBSCRIBE}
  -
  -The ``subscribe'' command will add the address of the user to a
  -mailing list. When using the ``-request''-address, only the word
  -``subscribe'' is required for the request to suceed. If the command is
  -sent to the ``petidomo'' address, the user will have to specify an
  -additional parameter: The name of the mailing list he or she wants to
  -be added to, like in the following example:
  -\begin{verbatim}
  -subscribe politics
  -\end{verbatim}
  -
  -If the user wants to add an address that is not equal to the one he or
  -she is sending the e-mail from, the e-mail address will have to be
  -specified, too:
  -\begin{verbatim}
  -subscribe politics joe@foo.bar
  -\end{verbatim}
  -
  -The order in which the e-mail address and the mailing list name are
  -provided does not matter. Please note that the administrator can
  -configure \Petidomo\ to disallow un-/subscring other addresses than
  -the one, the request is sent from, using the
  -``AllowAlienSubscription'' option in the list's config file.
  -
  -The command ``add'' is synonymous to ``subscribe''.
  -
  -\section{UNSUBSCRIBE}
  -
  -The syntax and usage of the ``unsubscribe`` command are the same as the
  -``subscribe'' command. The difference is, though, the the user's address
  -is removed from the mailing list rather than added to it.
  -
  -``delete'' and ``remove'' can be used synonymously to ``unsubscribe''.
  -
  -\section{INDEX}
  -
  -The ``index'' command does not need any parameters. Sending it to the
  -server will return a list of available mailing lists on this server.
  -This is useful in case you want to subscribe to a list but can't
  -remember the exact name anymore.
   
  -The commands ``lists'' and ``longindex'' are synonyms to ``index''.
  -
  -\section{HELP}
  -
  -If the server receives the command ``help'', it will send the file
  -\file{\~{}peti\-domo/etc/help} back. If ``help'' has a parameter,
  -\Petidomo\ will check whether this is a valid name of an existing
  -mailing list, and if it is, it will return the description file for
  -this mailing list, rather than the help-file.
  -
  -\section{MEMBERS}
  -
  -The ``members'' command will return the addresses of all subscribers
  -of the mailing list, if the administrator chose to allow this command.
  -When ``members' is sent to the ``-request''-address, the default list
  -will be used by \Petidomo. Otherwise, the name of the mailing list
  -which's subscribers should be listed, has to be specified as an option
  -like in the following example:
  -\begin{verbatim}
  -members politics
  -\end{verbatim}
  -
  -The command ``who'' can be used synonymously to ``members''.
  -
  -\chapter{Using Petidomo as Administrator}
  -\label{petidomo as admin}
  -
  -On the ``other side'' of \Petidomo, from the user's
  -perspective, is the administrator of the mailing list --- also called
  -the \Def{mailing list owner}). Each mailing list has an
  -alias ``listname-owner'' (see section~\ref{aliases}), where the mail
  -address of the person who is responsible for this mailing list should
  -be specified. Per default, this is the user who is known as
  -``petidomo-manager''. But you are free to direct mail for this accoun
  -to any other person --- or several persons.
  -
  -The list owner will receive administrative e-mail from \Petidomo\ in
  -the following cases:
  -
  -\begin{itemize}
  -
  -\item When a new user subscribes, or a subscriber removes himself from
  -the list, a carbon copy of the recipt will be sent to the owner. By
  -looking at these mails, the owner can check whether a ``subscribe'' or
  -``unsubscribe'' command looks bogus. He or she can also keep track of
  -who is on the list and who is not.
  -
  -\item If a ``members'' command is received for a mailing list where
  -this command has been disabled, this will also be forwarded to the
  -owner.
  -
  -\end{itemize}
  -
  -These mails are merely for information purposes and do not necessarily
  -require an action from the admin. There are cases, where the list
  -owner will receive mails from \Petidomo, though, that require some
  -kind of reaction.
  -
  -\section{Bounces}
  -
  -While maintaining mailing list with a larger number of subscribers, it
  -happens regularly that subscribed addresses become invalid or are
  -temporarily not reachable. In this case postings will \Def{bounce}.
  -You will then receive a mail from a mail server telling you, that the
  -delivery of the mail failed.
  -
  -Often, addresses become unreachable due to a misconfiguration of a
  -machine, so it is not always necessary to remove that address from the
  -list immediately, but when an addresses bounces for several days in a
  -row, it is a good idea to delete that address from the mailing list.
  -You should do that by sending an ``unsubscribe'' command for that
  -address to the ``-request''-address of the mailing list.
  -
  -If you have configured \Petidomo\ to disallow the unsubscription of
  -addresses not equal to the address the mail is sent from, you will
  -have to specify your admin password in the mail, to override the
  -barrier. How this is done is described in section~\ref{approve} later.
  -
  -\section{Closed and moderated lists}
  -
  -If you have configured a mailing list to reject postings under certain
  -circumstances, such as a closed or moderated mailing list, these
  -rejected articles will be forwarded to you for approval. When you
  -receive such a rejected article, you can either silently
  -discard it, contact the author or post it to the mailing list with
  -your approval.
  -
  -You can approve an article with the master password for \Petidomo, the
  -admin password of the mailing list in question or the posting password
  -(see section~\ref{posting password} of that list.
  -
  -\section{Approving requests}
  -\label{approve}
  -
  -To approve an article, you have several ways of specifying the
  -appropriate password. They are all the same for \Petidomo\ and it is
  -only a matter of taste, which scheme you use.
  -
  -When sending a command to the ``listserv'' program, though the
  -``-request'' or ``petidomo''-address, it is easy. Just preface your
  -commands with a ``password'' command, like in the
  -following example:
  -\begin{verbatim}
  -To: testlist-request@foo.bar
  -Subject:
  -
  -password open sesame
  -subscribe some@one.else
  -subscribe someone@even.elser
  -\end{verbatim}
  -
  -One ``password'' command sets your password for all the commands to
  -follow. If you want to use one mail to send requests for several
  -mailing lists with different passwords, just give a ``password''
  -command again:
  -\begin{verbatim}
  -To: petidomo@foo.bar
  -Subject:
  -
  -password open sesame
  -subscribe user@inter.net testlist1
  -password let me in
  -subscribe user@inter.net testlist2
  -\end{verbatim}
  -
  -Instead of ``password'', you can also use the commands ``passwd'', or
  -``approve'', they are all synonymous.
  -
  -\section{Approving postings}
  -
  -If you want to approve a posting for a mailing list, just send the
  -article to the mailing list and specify your password either in the
  -header or in the body of the mail.
  -
  -If you choose to approve the mail in the body, add line with the
  -command ``approve'' to the mail as first line of the body. \Petidomo\
  -will strip that line before actually posting the article then. You can
  -also use the synonyms ``approved'', ``password'' or ``passwd''
  -instead. Here is an example:
  -\begin{verbatim}
  -From: simons@petidomo.com (Peter Simons)
  -Subject: Cats are the most beautiful animals in the world.
  -
  -approve let me post
  -It's not that I wouldn't like animals like dogs, birds
  -or fishes, but for me, a cat is *the* animal to have.
  -[...]
  -\end{verbatim}
  -
  -The line ``approve let me post'' will be stripped by \Petidomo\ and
  -then the article will be sent out.
  -
  -If you want to specify the password in the headers, just add an header
  -of the name ``Approved'' or ``Approve'' to the headers of the mail.
  -(Unfortunately, many mail readers do not allow you to modify the
  -headers of outgoing mail. That is why the body-approval has been
  -added.) Here is the same example as above now using the headers:
  -\begin{verbatim}
  -From: simons@petidomo.com (Peter Simons)
  -Subject: Cats are the most beautiful animals in the world.
  -Approve: let me post
  -
  -It's not that I wouldn't like animals like dogs, birds
  -or fishes, but for me, a cat is *the* animal to have.
  -[...]
  -\end{verbatim}
  -
  -Please note that you have to add a colon to the keyword to make a
  -valid RFC mail-header.
  -
  -
  -\chapter{The Access Control Language}
  -
  -Unfortunately, we live in a world where some people are trying to
  -abuse services like mailing lists for their entertainment or for
  -commercial purposes. It is also not uncommon that among thousands of
  -mailing list subscribers, there is one particular moron who simply
  -can't behave. That is why access control is a useful feature, even
  -though it contradicts the idea of a mailing list: To be a media for
  -communication.
  -
  -Writing and understanding ACL files is, to be honest, not very easy
  -and the novice mailing list administrator should better be careful
  -when using them, because a wrong access control rule might cause more
  -trouble than it is worth, but the experienced administrator will
  -certainly appreciate their power. Understanding how ACL files work
  -will also require you to know a bit about the syntax of an RFC format
  -e-mail. A good place to start is to take a look at RFC822 and its
  -sons.
  -
  -In \Petidomo, two places exist to control who is allowed to do what:
  -The global acl file
  -\file{\~{}petidomo/etc/acl} and the acl
  -file that is local to the mailing list:
  -\file{\~{}petidomo/lists/list\-name/acl}. While the latter is valid only
  -for the list in which's home directory it is stored, the globl acl
  -file will be parsed for \emph{all} your mailing lists. ACL files are
  -only relevant for mailing list postings, the ``listserv'' program does
  -not use them.
  -
  -The syntax of an ACL file is similar to the C programming
  -language, as you can see in the following example:
  -\begin{verbatim}
  -if (envelope matches "mailer-daemon@") then
  -        forward "petidomo-manager";
  -\end{verbatim}
  -
  -This is a simple version of the default ACL file which comes with the
  -\Petidomo\ distribution and is installed in
  -\file{\~{}petidomo/etc/acl}. It tells hermes to forward all postings
  -to a mailing list, where the envelope of the mail matches the regular
  -expression ``mailer-daemon@''. This rule is included in the default
  -distribution to make sure that bounces of articles will not be posted
  -to the list again, thus causing an infinite mail loop. The syntax of
  -an ACL statement is shown in figure~\ref{acl syntax}.
  -
  -\begin{figure}[bth]
  -\begin{center}
  -\begin{tabular}{cccccccccc}
  -IF & ( & from & match & {\tt "}regexp{\tt "} & ) & THEN & pass & & ; \\
  -   &   & subject & matches &                   &   &      & drop & & \\
  -   &   & envelope & ==     & {\tt "}string{\tt "}          &   &      & reject & & \\
  -   &   & header   & =     &                & &     & rejectwith & {\tt "}file{\tt "}  & \\
  -   &   & body     &       &                & &     & redirect   & {\tt "}address{\tt "} & \\
  -   &   &      &       &                &   &      & forward    & {\tt "}address{\tt "} & \\
  -   &   &      &       &                &   &      & filter     & {\tt "}script{\tt "} & \\
  -IF & ( &  & {\tt "}filter{\tt "} &  & ) & THEN &  & & ; \\
  -\end{tabular}
  -\caption{The Access Control Language syntax.}
  -\label{acl syntax}
  -\end{center}
  -\end{figure}
  -
  -Admittedly, the figure is rather impossible to understand without
  -further explaination, don't worry if things are still a bit unclear
  -after looking at it.
  -
  -Every ACL statement looks like this: ``IF condition THEN action ;''.
  -The condition may or may not be enclosed in brackets. Several
  -conditions can be combined with the keywords ``OR'' and ``AND''.
  -Furthermore every condition can prefaced with a ``NOT'', which will
  -reverse the outcome of the condition.
  -
  -Let's explain this all at a concrete example: You want to reject all
  -postings which come from the addresses ``moron@moron.net'' and
  -``spam@spam.net'', because these people have constantly been abusing
  -your mailing list service. This can be done with the following two
  -statements:
  -\begin{verbatim}
  -IF from == "moron@moron.net" THEN reject;
  -IF from == "spam@spam.net" THEN reject;
  -\end{verbatim}
  -
  -Using the ``OR'' statement you can combine this into one statement:
  -\begin{verbatim}
  -IF from == "moron@moron.net" OR
  -   from == "spam@spam.net" THEN
  -      reject;
  -\end{verbatim}
  -
  -And now we include brackets for readability:
  -\begin{verbatim}
  -IF (from == "moron@moron.net") OR
  -   (from == "spam@spam.net") THEN
  -      reject;
  -\end{verbatim}
  -
  -The keyword ``from'' stands for the address, noted in the ``From:''
  -header line of the mail and, the ``== {\tt "}address{\tt "}'' means
  -that the condition if this address is equal to the one written in
  -quotes thereafter. (You can also use a single `=' character, if you
  -prefer that over two equal-characters.) This is a verbatim match. If
  -we'd use the ``match'' or ``matches'' keyword instead of the ``=='',
  -the parameter would be interpreted as an extended regular expression
  -and the condition would be true if the addresses matched this pattern.
  -(Regular expressions are described in the re\_format(7) man page, or
  -in the manpages of sed(1), grep(1) or egrep(1).)
  -
  -Other keywords than ``from'' for the first part of the conditional are
  -``subject'' (the contents of the ``Subject:'' header), ``envelope''
  -(the envelope of the mail), header and body. The latter two represent
  -the whole header or body of the mail and should be used only for
  -regular expression matches and not for verbatim matches.
  -
  -A short comment on the difference between ``redirect'' and
  -``forward'': The ``redirect'' action will send the mail to the
  -specified address without changing anythin in the mail. All the
  -headers are left untouched and thus the mail will look as if it has
  -been sent by the person to that address right away. This is useful for
  -redirecting mails to daemons or programs, but it will usually confuse
  -a human recipient
  -
  -The ``forward'' action, though, will send a mail to the specified
  -address with a new set of headers, which identify the \PetidomoM\ as
  -originator and then it will quote the mail that has been forwarded in
  -the mail body.
  -
  -Valid actions are ``pass'' (post the mail immediately), ``drop''
  -(discard the mail without further notice), ``reject'' (send a mail to
  -the poster, telling him his posting was rejected), ``rejectwith''
  -(sending mail to the poster, too, but with the contents of a specified
  -file), ``redirect'' (redirect the mail to a specified address),
  -``forward'' (like ``redirect'' but preface the mail with a note
  -telling why the mail was re-sent) or ``filter'' (pipe the mail into
  -the specified filter script and post the mail as the filter writes it
  -to the standard output).
  -
  -Here are a few more examples in the hope that they make this all
  -easier to understand: Let's assume you would like to catch all
  -postings to your mailing lists, that contain the words ``MAKE MONEY
  -FAST'' in the subject. Then one way of doing this is the following
  -statement:
  -\begin{verbatim}
  -IF (subejct matches "make money fast") THEN
  -      rejectwith "/usr/local/petidomo/etc/make-money-fast.txt";
  -\end{verbatim}
  -
  -The file \file{/usr/local/petidomo/etc/make-money-fast.txt} could, for
  -example, contain the following text:
  -\begin{quotation}
  -Dear poster,
  -
  -your mail has been rejected. Please note that chain letters like the
  -``make money fast'' text you tried to post are illegal throughout the
  -world and your are likely to get in trouble if you continue to spread
  -them.
  -\end{quotation}
  -
  -If someone tried to post the chain letter to your mailing lists now,
  -he would receive a mail like that:
  -\begin{verbatim}
  -Date: Sat, 28 Jun 1997 19:59:18 +0200 (MET DST)
  -From: testlist-owner@peti.cys.de (Petidomo Mailing List Server)
  -To: simons@cys.de
  -Cc: testlist-owner@peti.cys.de
  -Subject: Your posting to list "testlist" was rejected
  -Precedence: junk
  -Sender: testlist-owner@peti.cys.de
  -
  -Dear poster,
  -
  -your mail has been rejected. Please note that chain
  -letters like the ``make money fast'' text you tried
  -to post are illegal throughout the world and your are
  -likely to get in trouble if you continue to spread them.
  -
  ->From simons  Sat Jun 28 19:59:17 1997
  -Received: from [[UNIX: localhost]]
  -        by peti.cys.de (8.8.5/8.8.4) id TAA16959
  -Date: Sat, 28 Jun 1997 19:59:17 +0200 (MET DST)
  -Message-Id: <199706281759.TAA16959@peti.cys.de>
  -From: Peter Simons <simons@cys.de>
  -To: testlist
  -Subject: MAKE MONEY FAST
  -Mime-Version: 1.0 (generated by tm-edit 7.92)
  -Content-Type: text/plain; charset=US-ASCII
  -
  -Hi, my name is David Rodes...
  -\end{verbatim}
  -
  -A few more words about how the ACL files are parsed:
  -\begin{itemize}
  -
  -\item All comparisons are done case insensitive. ``MAKE MONEY FAST''
  -matches ``make money fast'' in both the verbatim and the regular
  -expression match just fine.
  -
  -\item Any whitespace in the ACL file is ignored. The statements
  -\begin{verbatim}
  -if (envelope matches "mailer-daemon@") then drop;
  -\end{verbatim}
  -and
  -\begin{verbatim}
  -if
  -    (envelope matches
  -"mailer-daemon@")
  -then
  -       drop
  -;
  -\end{verbatim}
  -are the same for \Petidomo.
  -
  -\item The argument after the ``=='' or ``matches'' keyword \emph{has}
  -to be included in quotes. An ACL statement like this:
  +I personally find this useful to raise the level of compiler
  +optimization or to add linker flags that tell the linker to strip
  +unnecessary symbols from the binaries. To achive these effects, I call
  +the configure script like this:
  +\begin{quote}
   \begin{verbatim}
  -if from == simons@petidomo.com then drop;
  +CFLAGS=-O3 LDFLAGS=-s ./configure
   \end{verbatim}
  -will cause \Petidomo\ to abort with an error, because it can't parse
  -this.
  +\end{quote}
   
  -\item If you use an action that requires a parameter, like
  -``rejectwith'' or ``forward'', this parameter has to be enclosed in
  -quotes, too. A statement like this can also not be parsed by
  -\Petidomo:
  +Anyway, once the configure script has been run, just call
  +\begin{quote}
   \begin{verbatim}
  -if from == "simons@petidomo.com" then
  -        forward postmaster@petidomo.com;
  +make
   \end{verbatim}
  +\end{quote}
  +to start the building process. Petidomo has been tested with various
  +flavours of the make utility and all of them seem to work fine. If in
  +doubt, try GNU Make, which is available from {\sf ftp.gnu.org}.
  +
  +Petidomo has also been built using parallel builds. This is useful if
  +you have a multi-processer system. You can do this with most make
  +utilities by adding the flag ``-j4'' with ``4'' being the number of
  +processes you want to spawn simultaneously. Please note, though, that
  +some make utilities have problems with the rules that translate the
  +yacc-modules included in Petidomo correctly when building in parallel.
  +If you experience any trouble, just build it conventionally and you
  +should be fine.
   
  -\item \Petidomo\ stops parsing the ACL file after the first statement
  -has matched. If you want to reject all mails from an address that
  -matches ``simons@.*\.de'', but you want mails from the address
  -``simons@rhein.de'' to pass nonetheless, the following two statements
  -will not work as expected:
  -\begin{verbatim}
  -if from matches "simons@.*\.de" then reject;
  -if from == "simons@rhein.de" then pass;
  -\end{verbatim}
  +\section{Installing the Binaries}
   
  -Instead you should use
  +To install the software to your system, all you have to do is execute
  +\begin{quote}
   \begin{verbatim}
  -if from == "simons@rhein.de" then pass;
  -if from matches "simons@.*\.de" then reject;
  +make install
   \end{verbatim}
  -or
  +\end{quote}
  +This will copy the Petidomo binary, the posting filters included in
  +the distribution, the sample config files and the manual pages into
  +the directories you chose at configure time earlier. If you're a
  +first-time user, you may also want to execute
  +\begin{quote}
   \begin{verbatim}
  -if (from matches "simons@.*\.de") and
  -   (not (from == "simons@rhein.de")) then
  -         reject;
  +make install-testlist
   \end{verbatim}
  +\end{quote}
  +which will create a sample mailing list called ``testlist'' for you.
   
  -\item Currently you can't match for the double quote character ({\tt
  -"}), we're afraid. The escape sequence {\tt \verb+\+"} is not
  -supported yet.
  -
  -\end{itemize}
  -
  -One last example and then we'll come to the filters. The following
  -statement rejectes a mail based on a match in the headers. This is
  -very useful for rejecting mail from known spam domains. You usually
  -can't rely on the spammer to use a valid ``From:'' header and hence
  -the ``from''-match is useless to catch them. But the following
  -statement will usually get them nonetheless:
  +Assuming you used the default paths when running configure, the
  +install process will create the follwing directories, respectively
  +copy the following files to your system:
  +\begin{quote}
   \begin{verbatim}
  -if (header matches "^Received:.*from spam.domain") then
  -     forward "petidomo-manager";
  +/usr/local/
  +/usr/local/bin/
  +/usr/local/bin/petidomo
  +/usr/local/bin/petidomo-approve
  +/usr/local/bin/petidomo-kickout
  +/usr/local/etc/
  +/usr/local/etc/petidomo.acl-sample
  +/usr/local/etc/petidomo.conf-sample
  +/usr/local/libexec/
  +/usr/local/libexec/petidomo/
  +/usr/local/libexec/petidomo/insert-name-in-subject.sh
  +/usr/local/libexec/petidomo/pgp-decrypt.sh
  +/usr/local/libexec/petidomo/pgp-encrypt.sh
  +/usr/local/libexec/petidomo/rfc2369.sh
  +/usr/local/man/
  +/usr/local/man/man1/
  +/usr/local/man/man1/petidomo.1
  +/usr/local/share/
  +/usr/local/share/petidomo/
  +/usr/local/share/petidomo/help
  +/usr/local/var/
  +/usr/local/var/petidomo/
  +/usr/local/var/petidomo/ack-queue/
  +/usr/local/var/petidomo/index
  +/usr/local/var/petidomo/lists/
   \end{verbatim}
  -
  -\bigskip
  -
  -If you thought, the Access Control Language is powerful so far, take a
  -look at the things you can do using filters. Rather than the syntax
  -described below, you can use the following statement:
  +\end{quote}
  +If you run the ``install-testlist'' target, the following
  +directory/files will be created additionally:
  +\begin{quote}
   \begin{verbatim}
  -if ("/usr/local/petidomo/bin/CheckPosting") then reject;
  +/usr/local/var/petidomo/lists/testlist/
  +/usr/local/var/petidomo/lists/testlist/config
  +/usr/local/var/petidomo/lists/testlist/acl
  +/usr/local/var/petidomo/lists/testlist/list
   \end{verbatim}
  -
  -This is a special form of the usual ACL statements and it means the
  -following: The mail in question is piped into the ``CheckPostin''
  -script. The script or program can perform various tests and when it
  -exists, the action part is executed depending on the return code the
  -script exited with. A return code of zero (0) means ``true'' and the
  -action will be executed. A return code of one (1) ``false'' and the
  -action will not be executed.
  -
  -Any other return code will cause \Petidomo\ to abort with an error and
  -to save the mail. By using this mechanism, you can program even the
  -most sophisticated tests and hook them into the access control
  -mechanism.
  -
  -Another feature that hasn't been described yet is the action
  -``filter''. The filter-action is pretty much the same as the posting
  -filter, but it allows you to re-write the posting depending on who
  -posted it or other criteria. Please note that this filter is executed
  -additionally to a regular posting filter you might have configured.
  +\end{quote}
   
  -A nice example for what this feature can be used is the following:
  -\begin{verbatim}
  -if (address == "simons@petidomo.com") then
  -       filter "/usr/local/petidomo/bin/simons.filter";
  -\end{verbatim}
  +\section{Configuring Sendmail}
   
  -The script \file{simons.filter} would then look like this:
  +Before you can use Petidomo, you have to configure sendmail so that it
  +knows about Petidomo --- I assume that you have sendmail installed
  +already. If you are using an MTA other than sendmail, you are on your
  +own from here on, I am afraid. Any users who have successfully
  +installed Petidomo on a qmail-, vmailer-, or postfix-based system are
  +more than welcome to contribute to this documentation to help other
  +users.
  +
  +To run Petidomo via sendmail --- what is what you want to do ---, you
  +have to create apropriate aliases for it. You can do this by adding
  +the folling lines to your {\sf aliases} file, which usually resides in
  +{\sf /etc/aliases} or, with newer sendmail versions, in {\sf
  +/etc/mail/aliases}:
  +\begin{quote}
   \begin{verbatim}
  -#! /bin/sh
  -
  -cat
  -echo
  -echo "-- "
  -echo " Hold your breath -- this is *the* Peter Simons!"
  +petidomo-manager:   postmaster
  +petidomo:           "|/usr/local/bin/petidomo --mode=listserv"
  +petidomo-approve:   "|/usr/local/bin/petidomo --mode=approve"
   \end{verbatim}
  -
  -We resisted the temptation of adding this ACL statement into the
  -default configuration of \Petidomo.
  -
  -% \chapter{Administrating Mailing Lists}
  -%
  -\chapter{Miscellaneous Topics}
  -\section{Using posting filters}
  -\label{using posting filters}
  -
  -The posting filter functionality of \PetidomoTwo\ is a very useful
  -mechanism for you, if you run mailing lists where you want to
  -guarantee certain formal criteria, because you can hook a script or
  -program of your into the posting process and use it to re-format or
  -re-write the article that is going to be posted.
  -
  -We have included one
  -script into the distribution,
  -\file{\~{}peti\-domo/bin/Insert\-Name\-In\-Sub\-ject.sh}, which adds a string
  -into the subject line of every posting. The script is pretty short and
  -used sed(1) to perform its function.
  -
  -To use it, just add the line
  +\end{quote}
  +In case you installed the Petidomo binary to some other location, you
  +will have to change the paths here apropriately of course. You may
  +also chose that mail for the ``petidomo-manager'' should go to some
  +different address than ``postmaster'', if that suits your needs
  +better; the main point is that somebody actually \emph{reads} what
  +arrives there.
  +
  +If executed the ``install-testlist'' target earlier and thus have the
  +example mailing list from the distribution installed, you may also
  +want to add the lines:
  +\begin{quote}
   \begin{verbatim}
  -PostingFilter     ~petidomo/bin/InsertNameInSubject.sh listname
  +testlist:           "|/usr/local/bin/petidomo --mode=deliver testlist"
  +testlist-request:   "|/usr/local/bin/petidomo --mode=listserv testlist"
  +testlist-owner:     petidomo-manager
   \end{verbatim}
  -with ``listname'' being the name of the mailing list.
  +\end{quote}
  +Having done all this, execute the {\sf newaliases} utility to rebuild
  +sendmail's internal database. Your changes will not have any effect
  +unless you do this.
  +
  +\section{Configuring the File Permissions}
  +
  +The final step, before Petidomo is successfully installed, is to set
  +the right permissions to the installation directories and installed
  +files. Unfortunately, the installation process can not do this
  +automatically; you have to chose what permissions are ``right''
  +yourself. If works like this: Petidomo will be called from sendmail,
  +thanks to the aliases you just created. That means, that sendmail
  +determines under what user to start Petidomo. In 99\% of all
  +configurations I have ever seen, that user is ``daemon'', but it
  +\emph{may} be something else, so we better figure it out for sure.
   
  -If the mailing list name was ``testlist'', for example, then this
  -posting filter would re-write the subject line
  -\begin{verbatim}
  -Subject: Hi everbody
  -\end{verbatim}
  -to
  +Add the line
  +\begin{quote}
   \begin{verbatim}
  -Subject: [testlist] Hi everbody
  +foobar:             "/tmp/foobar-mail"
   \end{verbatim}
  -
  -It is recommended to take a look at the script itself to understand
  -how this works. You will need a bit of knowledge of the Unix scripting
  -language and tools like sed(1) to program more complex posting filter,
  -we're afraid.
  -
  -As the last point it should be made clear, that the string you specify
  -as a filter is interpreted by the bourne shell for execution. It is
  -thus absolutely possible, to use a posting filter like that
  +\end{quote}
  +to your aliases file and execute {\sf newaliases}. Then send an e-mail
  +to the address ``foobar''. The contents of this mail will be stored in
  +the file {\sf /tmp/foobar-mail} then and we are interested in the user
  +who owns this file:
  +\begin{quote}
   \begin{verbatim}
  -PostingFilter "/bin/cat | /bin/cat ; echo ; echo testing"
  +root@peti:/# sendmail -v foobar </dev/null
  +foobar... aliased to "/tmp/foobar-mail"
  +"/tmp/foobar-mail"... Sent
  +root@peti:/# ls -l /tmp/foobar-mail
  +-rw-------   1 daemon   daemon        269 Feb 12 17:57 /tmp/foobar-mail
   \end{verbatim}
  -even though one might argue whether this particular example is a
  -useful thing. Anyway\dots{} you know what we wanted to demonstrate.
  -
  -\section{PGP-encrypted mailing lists}
  -
  -Another very useful feature of the posting filter and the access
  -control languange is the ability to maintain \Def{encrypted mailing
  -lists}. The idea is very simple: You create a PGP key pair for your
  -mailing list and spread the public key among the subscribers of your
  -mailing list. In turn you collect their public keys and store them on
  -the mailing list server.
  -
  -Whenever a subscriber wants to post an article to the mailing list, he
  -will encrypt it with the public key of the list server before
  -transferring it through the Internet. \Petidomo\ will then receive the
  -mail, decrypt and process it and encrypt it again, with the public
  -keys of the subscribers. Once encrypted again, the mail is distributed
  -to the readers.
  -
  -Please note that at no time the mail was sent through the Internet in
  -clear text. Hence this mode is well-suited for maintaining internal
  -discussion lists for, say, software development among a few people who
  -know each other but live spread throughout the world. Included in the
  -distribution are two scripts, \file{pgp-encrypt.sh} and
  -\file{pgp-decrypt.sh}, which realize this. The setup needs a bit of
  -work, but once you understand the principle, it is rather easy. Just
  -follow the steps described below.
  -
  -\begin{enumerate}
  -
  -\item Get the PGP software package from `http://www.pgpi.com/', you
  -will need the PGP 2.6.2 version or later --- 5.x won't work, as far as
  -I know, maybe someone wants to adapt the PGP-mechanism to PGP 5.x, any
  -volunteers are welcome, and install it.
  -
  -\item Log in as user ``petidomo''.
  -
  -\item Create a directory \file{\~{}petidomo/.pgp} and set the {\tt
  -\$PGPPATH} variable to it.
  -
  -\item Create a PGP key pair by calling `pgp -kg''. As user-id enter
  -the address of the mailing list itself, for example: ``The secret
  -mailing list $<$secretlist@petidomo.com$>$''.
  -
  -\item Create a \file{config.txt} file for PGP in
  -\file{\~{}petidomo/.pgp} and insert the appropriate user id there.
  -
  -\item Distribute the newly created PGP key of the mailing list among
  -the subscribers.
  -
  -\item Add the PGP keys of the subscribers to \Petidomo's keyring.
  -
  -\item Edit the following definitions in
  -\file{\~{}petidomo/bin/pgp-encrypt.sh}:
  -
  +\end{quote}
  +See? On my system it is ``daemon'' indeed. On your system it may be
  +someone else. Now that we know, you may remove the foobar-line from
  +the aliases file again.
  +
  +OK, sendmail starts Petidomo under user id ``daemon''. This means that
  +``daemon'' must have read access to virtually any file in the Petidomo
  +installation. This is the default, because all files are installed
  +with read permisson for everybody. Also, all directories allow access
  +to anybody by default. But ``daemon'' also needs write access to the
  +``localstatedir'' --- {\sf /usr/local/var/petidomo} per default. You
  +can ensure this by executing the command:
  +\begin{quote}
   \begin{verbatim}
  -#
  -# Please customize these things for your system.
  -#
  -PGP=/usr/local/bin/pgp
  -PASSWORD="DecryptMe"
  -PGPPATH=$PDHOME/.pgp
  +chown -R daemon /usr/local/var/petidomo
   \end{verbatim}
  -
  -You will need to change the location of the PGP binary and insert the
  -password you chose for the secret key. For security reasons, the
  -script itself should be owned by ``petidomo'' as user- and group id,
  -and it should have the permission ``110'', so that only Petidomo can
  -execute it.
  -
  -\item Edit the equivalent definitions in
  -\file{\~{}petidomo/bin/pgp-encrypt.sh}.
  -
  -\item Now create the mailing list in question. In our example that
  -would be ``secretlist''. Naturally the mailing list should not be open
  -for public subscription.
  +\end{quote}
   
  -\item Edit the ACL file of the ``secretlist'' to contain the following
  -line:
  +This is a rather simplistic solution to the permisson problem; you
  +\emph{can} use much more fine-grained settings if you like to. But I
  +figured that if you are the kind of person who wants to do things like
  +this, you won't need an explanation how to do it anyway. Just that
  +much information for you: Petidomo does not actually write to the
  +``localstatdir'', but only to the subdirectory {\sf ack-queue} located
  +in it.
  +
  +Of course, you do not necessarily need to have the {\sf ack-queue}
  +directory owned by ``daemon'', you can also set the group permissions
  +apropriately. Furthermore, Petidomo will usually want to write to the
  +{\sf lists} directory located in the ``localstatedir'', because most
  +list administrators tend to place the mailing list archives there, but
  +you can enable write access according to the list's configuration once
  +you know how you're mailing lists are configured. In case something
  +does not work as expected, check out the syslog messages for the {\sf
  +LOG\_MAIL} facility --- this is where Petidomo logs its error messages.
  +
  +\section{Configuring Petidomo}
  +
  +The last step before we can test our installation is to configure
  +Petidomo. This is really simple. List the contents of the
  +``sysconfdir'' you chose. If you did not change the default paths,
  +this is {\sf /usr/local/etc}. There you will find two files: {\sf
  +petidomo.conf-sample} and {\sf petidomo.acl-sample}. Just rename them
  +to {\sf petidomo.conf} and {\sf petidomo.acl} respectively and fire up
  +your favorite text editor to edit the file {\sf petidomo.conf}.
  +
  +Uncomment the options ``Hostname'', ``AdminPassword'', and ``MTA'' and
  +set the values correctly. ``Hostname'' should be the fully qualified
  +domain name of the machine running Petidomo. It is essential that this
  +name can receive e-mail, that is, that is has an MX record. (Talk to
  +the person administrating the domain name service of your organization
  +if this doesn't make any sense to you.) As ``AdminPassword'', you can
  +chose pretty much any text you like, just make sure you remember it.
  +The ``MTA'' setting will usually be alright the way it is. You may
  +want to check whether sendmail does actually live at this path; on
  +some Unixes, it is not installed at {\sf /usr/sbin/sendmail}, but at
  +{\sf /usr/lib/sendmail}. Change the setting if this is the case. You
  +can ignore all other settings right now. Come back and configure those
  +once you have read the apropriate sections of this manual. If you're
  +an experienced Unix wizard, the comments in the config file will
  +probably be enough for you to guess what these options do, though.
  +
  +Once you have done this, your installation is ready to be tested.
  +
  +\section{Testing the Installation}
  +
  +Asserting you followed all steps described above, you have a working
  +Petidomo installation now. Occasionally, some minor permisson problem
  +may still remain to be fixed, or you may want to customize some texts.
  +To figure out what is left to do (or to realize that there is nothing
  +left do to), send an e-mail to the ``petidomo'' user on your machine
  +and put the word ``help'' into the mail body --- without the quotes of
  +course.
   
  +On my system, this looks like this:
  +\begin{quote}
   \begin{verbatim}
  -if (body matches "^-----BEGIN PGP MESSAGE-----$") then
  -        filter "~petidomo/bin/pgp-decrypt.sh";
  +simons@peti:~/projects/petidomo$ echo help | sendmail -v petidomo
  +petidomo... aliased to "|/usr/local/bin/petidomo --mode=listserv"
  +"|/usr/local/bin/petidomo --mode=listserv"... Connecting to prog...
  +"|/usr/local/bin/petidomo --mode=listserv"... Sent
   \end{verbatim}
  -
  -\item Edit the config file to have the following posting filter:
  +\end{quote}
   
  +Once you sent the e-mail, sendmail will start up Petidomo and feed the
  +mail text into it for processing. If you take a look at the syslogfile
  +containing the {\sf LOG\_MAIL} facility now --- this is usally {\sf
  +/var/log/messages} or {\sf /var/log/maillog} ---, you will find that
  +Petidomo logged entries there that look pretty much like the following
  +ones. The backslash (``\verb#\#'') characters at the end of some of
  +these lines denote that the line has been wrapped for readability. In
  +reality, this would be one single large line.
  +\begin{quote}
   \begin{verbatim}
  -PostingFilter   "~petidomo/bin/pgp-encrypt.sh secretlist"
  +sendmail[8705]: f1CIHWJ08705: from=simons, size=5, class=0, \
  +        nrcpts=1, msgid=<200102121817.f1CIHWJ08705@peti.cryp.to>, \
  +        relay=simons@localhost
  +petidomo[8706]: Petidomo 4.0b1 (18-Jan-2001) starting up; \
  +        mode=listserv, listname=<none>, \
  +        masterconf=/usr/local/etc/petidomo.conf, \
  +        approved=false, ruid=2, euid=2, gid=2, egid=2
  +petidomo[8706]: simons@peti.cryp.to: help
  +sendmail[8707]: f1CIHX508707: from=petidomo-manager@peti.cryp.to, \
  +        size=2091, class=-100, nrcpts=1, \
  +        msgid=<200102121817.f1CIHX508707@peti.cryp.to>, \
  +        relay=daemon@localhost
  +sendmail[8705]: f1CIHWJ08705: \
  +        to="|/usr/local/bin/petidomo --mode=listserv", \
  +        ctladdr=petidomo (2/0), delay=00:00:01, xdelay=00:00:01, \
  +        mailer=prog, pri=30005, dsn=2.0.0, stat=Sent
  +sendmail[8709]: f1CIHX508707: to=simons@peti.cryp.to, delay=00:00:00, \
  +        xdelay=00:00:00, mailer=local, pri=212091, dsn=2.0.0, stat=Sent
   \end{verbatim}
  +\end{quote}
   
  -Please note that you must provide the name of the mailing list on the
  -command line as parameter to \file{pgp-encrypt.sh}, so that it know
  -which list file it should take the subscriber addresses from.
  -
  -\item Do a test posting and that's it.
  -
  -\end{enumerate}
  -
  -There are a few things you should take care of: First of all, you must
  -make sure that you have the PGP public keys of all subscribers in the
  -keyring belonging to the ``petidomo'' user, or some of them won't be
  -able to decipher the mail posted via the list. You must also take care
  -that the addresses these people are subscribed under, are actually
  -listed in their public key, or PGP won't be able to recognize who is
  -who, when being called by \file{pgp-encrypt.sh}.
  -
  -Finally, make sure that you do this only with the correct versions of
  -the software. \Petidomo\ needs to be version 2.1 or later, earlier
  -versions won't work. The PGP binary needs to understand the {\tt -@}
  -operator on the command line, which has been added in PGP 2.6i at some
  -time.
  -
  -One last hint: If PGP-encryption or decryption doesn't work, it will
  -usually help to remove the {\tt \$LOGFILE} parameter from the {\tt
  -trap} command in the scripts:
  +As you can see, Petidomo logged how it was started, where it is
  +expecting its master config file and under which user- and group id it
  +is running. Then it logs that it has received a HELP request. This
  +request will be answered by sending the file {\sf
  +/usr/local/share/petidomo/help} back to the person who requested help,
  +and if everthing worked, you will now find that mail in your mail box.
  +
  +If something went wrong, Petidomo will tell you what went wrong. So,
  +please fix the problem and try again. In 99\% of all cases, the error
  +will say something like ``opening file XYZ failed: permission
  +denied''. Then all you have to do is to make sure that the user under
  +which Petidomo has been started (you have the numeric id in the
  +logfile) has read access to that file. If the user has but Petidomo
  +keeps complaining, check, whether that user has access to the
  +directory at all!
  +
  +Those of you who executed the ``install-testlist'' target earlier in
  +the ``Building the Binaries'' chapter may also want to test whether
  +this mailing list is working. To do so, send another mail to Petidomo
  +and put the command ``subscribe YOUR-ADDRESS testlist'' in the mail
  +body --- without the quotes! ``YOUR-ADDRESS'' naturally means that you
  +should insert your e-mail address here. This command will subscribe
  +your e-mail address to the ``testlist'' mailing list; you should
  +receive a confirmation about that via e-mail within moments. Once that
  +is accomplished, send another e-mail to the ``testlist'' address on
  +your system. The e-mail may look like whatever you want.
  +
  +Within seconds, you should get the mail back from the mailing list
  +server --- and so will all other addresses that are subscribed to the
  +list. My personal test mail looked like this:
   
  +\begin{quote}
   \begin{verbatim}
  -trap 'rm -f $TMPFILE $HEADER $BODY $NEWBODY $LOGFILE; exit'...
  -                                            ^^^^^^^^
  -\end{verbatim}
  +From testlist-owner@peti.cryp.to  Mon Feb 12 19:43:56 2001
  +Received: (from daemon@localhost)
  +        by peti.cryp.to id f1CIhuA08872 for simons@peti.cryp.to;
  +        Mon, 12 Feb 2001 19:43:56 +0100
  +Received: (from simons@localhost)
  +        by peti.cryp.to id f1CIhJY08853 for testlist;
  +        Mon, 12 Feb 2001 19:43:19 +0100
  +Date: Mon, 12 Feb 2001 19:43:19 +0100
  +From: Peter Simons <simons@peti.cryp.to>
  +Message-Id: <200102121843.f1CIhJY08853@peti.cryp.to>
  +Subject: Petidomo absolutely rules the known earth!
  +Reply-To: testlist@peti.cryp.to
  +Sender: testlist-owner@peti.cryp.to
  +Precedence: list
   
  -As a result, the script won't delete the output PGP issued when called
  -after exiting. Thus you will find the file still lying in \file{/tmp}
  -and can easily investigate what's wrong.
  -
  -\section{Virtual hosting and sendmail}
  -\label{virtual hosting and sendmail}
  -
  -A very useful things is \Petidomo's virtual hosting feature.
  -Unfortunately, there are a few traps into which you might run when you
  -are trying to use it together with the Allmann sendmail. But we'll
  -start at the beginning.
  -
  -If you host mailing lists for domains other than your own, you can
  -tell \Petidomo\ to use this name instead of the local one for certain
  -mailing lists in the list config file by setting the appropriate
  -``HostName''. Now all mail posted to this list, or sent to the
  -``-request'' address of the list, will appear to be coming from the
  -domain name you configured, rather than your own.
  -
  -When you are using sendmail v8, you will have to write these names to
  -the \$w\$ class in your sendmail.cf file, or the corresponfing M4
  -config. This is done by adding the line
  -\begin{verbatim}
  -Cwdomain.name1 domain.name2 ...
  +It does ...
   \end{verbatim}
  -to the file.
  -
  -This will tell sendmail that these names are to be accepted and
  -delivered locally rather than to the MX of these entries.
  -
  -Doing this might deliver a surprise, though, if you are using
  -sendmail's masquerading abilities to hide the various hostname of your
  -domain. Per default, sendmail masquerades not only the domain names
  -you told him with the MASQUERADE\_DOMAIN() command, it automatically
  -masquerades all domain names of the \$w\$ class, too.
  -
  -The result is that \Petidomo's fine virtual hosting is gone
  -immediately, because sendmail will re-write the name to your own
  -domain name. The fix for this is rather easy: Add the command
  -``FEATURE(limited\_masquerade)'' to your M4 file and sendmail won't
  -touch the names that are stated only in the \$w\$ class.
  -
  -\section{Mailing list archives}
  -\label{mailing list archives}
  -
  -If your are hosting a public mailing list, you might want to offer a
  -mailing list archive, that is accessible through the WWW and has all
  -the postings available for immediate access. We were in the midst of
  -developing a tool that does this for you when we came accross a
  -brilliant tool named ``MHonArc''. We installed it, tested it, and
  -deleted all attempts of writing something like that ourselves
  -immediately.
  -
  -We strongly recommend looking at MHonArc, if you want to offer a WWW
  -archive of your mailing lists. You can find more information about
  -MHonArc at the following location:
  -`http://www.oac.uci.edu/indiv/ehood/mhonarc.html'
  -
  -The installation of the tool itself is very easy. Once you have
  -MHonArc running, just enable the archiving feature in Petidomo and
  -feed the archives into MHonArc. That's it.
  -
  -\section{Verifying the address lists}
  -
  -\Petidomo\ tries its best to make sure that only syntactically correct
  -addresses are subscribed to mailing lists, and if you stick to the
  -listserv interface, there's very little chance, an incorrect address
  -will make it into the \file{list} file.
  -
  -Sometimes, it is necessary to edit these files manually, though, or
  -\Petidomo's address validation algorithm fails. Once you have an
  -incorrect address in your list file, sendmail will abort with an
  -error, without trying to deliver the mail at all.
  -
  -To clarify, this does not happen when an address is not reachable,
  -this happens only when you subscribe something like {\tt
  -hey@this@is@wrong....}. Once you suspect that your address list has
  -been corrupted, there's an easy way to find out, which addresses are
  -wrong. Simply use sendmail's address verification mode like this:
  -
  -\begin{verbatim}
  - $ xargs <list sendmail -bv | sed -e '/deliverable/d'
  - > @bogus.address.here... user address required
  -\end{verbatim}
  -
  -This call will find all incorrect address and notify you. The 'sed'
  -call will filter out all correct addresses for your convenience.
  -
  -\chapter{If something doesn't work\dots{}}
  +\end{quote}
   
  -Even though it is highly unlikely that \Petidomo\ will not
  -work as you expect it to (`Highly unlikely' is actually an
  -understatement. It is so amazingly breath-takingly mind-boggingly
  -stunningly unlikely, even less probable than the absolute impossible
  -and totally unthinkable, so flabbergastingly unlikely that we actually
  -wonder why we have that section at all\dots{}), you have several means
  -of getting help:
  -
  -\begin{enumerate}
  -
  -\item Before anything else, please take a look at the logfile.
  -\Petidomo\ hardly ever does anything without making an entry in the
  -logfile. Usually, your problem is caused by a wrong file permission or
  -a misspelled keyword. These things can easily be found and fixed if
  -you read the logfile.
  -
  -\item Take a look at the logfile again.
  -
  -\item If the logfile doesn't help, you can post a description of your
  -problem to the ``petidomo-users'' mailing lists, where the
  -CyberSolutions staff and many other users might be able to help you.
  -To subscribe to the mailing list, send an ``subscribe'' request to the
  -address: ``petidomo-users-request@petidomo.com''.
  -
  -\end{enumerate}
  -
  -\section{The mail-rescue mechanism}
  -
  -\PetidomoTwo\ has not lost a single e-mail due to a bug or a faulty
  -configuration yet and we are optimistic that it will stay that way.
  -The reason for this belief is the mail-rescue mechanism, which works
  -as follows: Whenever either ``listserv'' or ``hermes'' are started,
  -the program will read the complete mail it is receiving and
  -immediately stores it under an unique filename in the directory
  -\file{\~{}petidomo/crash}.
  -
  -When this file has been created, the program will start to actually
  -process the mail. If a situation arises that \Petidomo\ can't handle,
  -like a syntax error in the ACL files, a missing keyword in the master
  -config file, or a faulty file permission of a file \Petidomo needs to
  -read, \Petidomo will notify the ``petidomo-manager'' via e-mail and
  -terminate without deleting the mail in the rescue-directory. Even in
  -case of a core dump, the mail is still there. Only if \Petidomo\ has
  -succeeded in processing the request or posting completely, the rescue
  -file will be deleted.
  -
  -So in case your installation can't process a request or posting for
  -whatever reasons, all you have to do is to fix the problem and then to
  -feed the mail from the rescue-directory into the program again to
  -process it.
  -
  -Please note that \Petidomo\ might not be able to send the notification
  -mail out (for example if the reason that it aborted in the first place
  -was that it couldn't start the mail transport agent), so you should
  -check the \file{\~{}petidomo/crash} directory from time to time,
  -probably in your daily- or weekly script, which is run by cron.
  -
  -It might also be a good idea to take a look at the logfiles
  -occasionally, even when \Petidomo\ is running fine, just to make sure
  -it stays that way.
  +If this all worked for you, you have a your Petidomo installation up
  +and running. Men will envy you and women will desire you --- unless,
  +of course, you \emph{are} a woman, then it is vice versa. You will be
  +able to stop smoking any time you want, you may eat anything you like
  +and as much as you like, but you will never gain a single pound. Your
  +sex life will improve dramatically, your boss will like you, your hard
  +drives will never crash and your Internet connections will always be
  +fast. All this, thanks to the wonders of the {\bf Petidomo Mailing
  +List Manager!}
  +
  +In case any of the benefits promised above stays away, please consult
  +paragraphs 11 and 12 of the file {\sf COPYING} included in this
  +distribution.
   
  -%
  -% End of document
  -%
   \end{document}

From ossp-cvs-owner@ossp.org  Mon Feb 12 20:33:07 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f1CJX7Y40820; Mon, 12 Feb 2001 20:33:07 +0100 (CET)
Date: Mon, 12 Feb 2001 20:33:07 +0100 (CET)
Message-Id: <200102121933.f1CJX7Y40820@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/petidomo/docs Xstation.bm directory-struct.eps di...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   12-Feb-2001 20:33:07
  Branch: HEAD                             Handle: 1970010101000000

  Removed files:
    ossp-pkg/petidomo/docs  Xstation.bm directory-struct.eps
                            directory-struct.fig ml-principle1.eps
                            ml-principle1.fig ml-principle2.eps
                            ml-principle2.fig router.bm world.bm

  Log:
    Removed diagrams required by the old version of the manual; the new
    version will not use these.

  Summary:
    Revision    Changes     Path
    NONE        +0  -0      ossp-pkg/petidomo/docs/Xstation.bm
    NONE        +0  -0      ossp-pkg/petidomo/docs/directory-struct.eps
    NONE        +0  -0      ossp-pkg/petidomo/docs/directory-struct.fig
    NONE        +0  -0      ossp-pkg/petidomo/docs/ml-principle1.eps
    NONE        +0  -0      ossp-pkg/petidomo/docs/ml-principle1.fig
    NONE        +0  -0      ossp-pkg/petidomo/docs/ml-principle2.eps
    NONE        +0  -0      ossp-pkg/petidomo/docs/ml-principle2.fig
    NONE        +0  -0      ossp-pkg/petidomo/docs/router.bm
    NONE        +0  -0      ossp-pkg/petidomo/docs/world.bm
  ____________________________________________________________________________

                  

From ossp-cvs-owner@ossp.org  Mon Feb 12 20:34:51 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f1CJYou40971; Mon, 12 Feb 2001 20:34:50 +0100 (CET)
Date: Mon, 12 Feb 2001 20:34:50 +0100 (CET)
Message-Id: <200102121934.f1CJYou40971@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/petidomo/docs Makefile
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   12-Feb-2001 20:34:50
  Branch: HEAD                             Handle: 2001021219345000

  Modified files:
    ossp-pkg/petidomo/docs  Makefile

  Log:
    Replaced GNU make-specific stuff by the general make syntax to make
    the file more portable.

  Summary:
    Revision    Changes     Path
    1.4         +7  -13     ossp-pkg/petidomo/docs/Makefile
  ____________________________________________________________________________

  Index: ossp-pkg/petidomo/docs/Makefile
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 Makefile
  --- ossp-pkg/petidomo/docs/Makefile	2000/12/13 14:24:03	1.3
  +++ ossp-pkg/petidomo/docs/Makefile	2001/02/12 19:34:50	1.4
  @@ -1,28 +1,22 @@
   #
   # Petidomo User Manual
   #
  -# $Header: /e/ossp/cvs/ossp-pkg/petidomo/docs/Makefile,v 1.3 2000/12/13 14:24:03 simons Exp $
  +# $Header: /e/ossp/cvs/ossp-pkg/petidomo/docs/Makefile,v 1.4 2001/02/12 19:34:50 simons Exp $
   #
   
  -all:	petidomo.ps
  +.SUFFIXES:
  +.SUFFIXES:      .tex .dvi .ps
   
  -%.dvi : %.tex
  +.tex.dvi:
   	latex \\nonstopmode\\input $<; \
  -	while egrep 'Rerun to' $*.log; do \
  +	while grep 'Rerun to' $*.log; do \
   	     latex \\nonstopmode\\input $<; \
   	done
   
  -%.ps : %.dvi
  +.dvi.ps:
   	dvips $< -o $@
  -
  -%.eps:	%.fig
  -	fig2dev -L ps $< $@
   
  -petidomo.dvi:		ml-principle1.eps ml-principle2.eps directory-struct.eps
  -
  -ml-principle1.eps:	ml-principle1.fig
  -ml-principle2.eps:	ml-principle2.fig
  -directory-struct.eps:	directory-struct.fig
  +all:	petidomo.ps
   
   clean distclean realclean:
   	rm -f petidomo.aux petidomo.dvi petidomo.log petidomo.ps petidomo.toc

From ossp-cvs-owner@ossp.org  Mon Feb 12 21:44:14 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f1CKiDi48172; Mon, 12 Feb 2001 21:44:13 +0100 (CET)
Date: Mon, 12 Feb 2001 21:44:13 +0100 (CET)
Message-Id: <200102122044.f1CKiDi48172@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/petidomo help.c hermes.c listserv.c members.c rfc...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   12-Feb-2001 21:44:13
  Branch: HEAD                             Handle: 2001021220441300

  Modified files:
    ossp-pkg/petidomo       help.c hermes.c listserv.c members.c rfcparse.c

  Log:
    Changed loglevel of sereval syslog() calls from NOTICE to INFO,
    because they do not really require the administrator's attention but
    are informational.

  Summary:
    Revision    Changes     Path
    1.9         +2  -2      ossp-pkg/petidomo/help.c
    1.19        +7  -7      ossp-pkg/petidomo/hermes.c
    1.8         +1  -2      ossp-pkg/petidomo/listserv.c
    1.10        +3  -3      ossp-pkg/petidomo/members.c
    1.5         +6  -6      ossp-pkg/petidomo/rfcparse.c
  ____________________________________________________________________________

  Index: ossp-pkg/petidomo/help.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 help.c
  --- ossp-pkg/petidomo/help.c	2001/01/18 20:30:50	1.8
  +++ ossp-pkg/petidomo/help.c	2001/02/12 20:44:13	1.9
  @@ -1,6 +1,6 @@
   /*
      $Source: /e/ossp/cvs/ossp-pkg/petidomo/help.c,v $
  -   $Revision: 1.8 $
  +   $Revision: 1.9 $
   
      Copyright (C) 2000 by CyberSolutions GmbH, Germany.
   
  @@ -73,7 +73,7 @@
   		free(p);
   	    }
   	    else {
  -		syslog(LOG_NOTICE, "List \"%s\" doesn't have a description.", param1);
  +		syslog(LOG_INFO, "List \"%s\" doesn't have a description.", param1);
   		fprintf(fh, "No description available.\n");
   	    }
   	    CloseMailer(fh);
  Index: ossp-pkg/petidomo/hermes.c
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 hermes.c
  --- ossp-pkg/petidomo/hermes.c	2001/01/20 14:29:28	1.18
  +++ ossp-pkg/petidomo/hermes.c	2001/02/12 20:44:13	1.19
  @@ -1,6 +1,6 @@
   /*
      $Source: /e/ossp/cvs/ossp-pkg/petidomo/hermes.c,v $
  -   $Revision: 1.18 $
  +   $Revision: 1.19 $
   
      Copyright (C) 2000 by CyberSolutions GmbH, Germany.
   
  @@ -125,7 +125,7 @@
   
   	if (ListConfig->listtype == LIST_MODERATED)
   	    {
  -	    syslog(LOG_NOTICE, "\"%s\" tried to post to list \"%s\", but failed to " \
  +	    syslog(LOG_INFO, "\"%s\" tried to post to list \"%s\", but failed to " \
   		   "provide a correct password.", MailStruct->From, listname);
   
   	    fh = vOpenMailer(envelope, owner, NULL);
  @@ -156,7 +156,7 @@
   
   	    if (isSubscribed(listname, MailStruct->From, NULL, NULL, TRUE) == FALSE)
   		{
  -		syslog(LOG_NOTICE, "\"%s\" tried to post to closed list \"%s\", but " \
  +		syslog(LOG_INFO, "\"%s\" tried to post to closed list \"%s\", but " \
   		       "he is no subscriber.", MailStruct->From, listname);
   
   		fh = vOpenMailer(envelope, owner, NULL);
  @@ -190,7 +190,7 @@
   	    char* cookie;
   	    char* originator = (MailStruct->Reply_To) ? MailStruct->Reply_To : MailStruct->From;
   
  -	    syslog(LOG_NOTICE, "\"%s\" tried to post to acknowledged list \"%s\"; posting " \
  +	    syslog(LOG_INFO, "\"%s\" tried to post to acknowledged list \"%s\"; posting " \
   		   "has been deferred.", MailStruct->From, listname);
   
   	    cookie = queue_posting(MailStruct, listname);
  @@ -225,7 +225,7 @@
   
   	    if (g_is_approved)
   		{
  -		syslog(LOG_NOTICE, "\"%s\" acknowledged a former posting attempt on ack-once list \"%s\"; " \
  +		syslog(LOG_INFO, "\"%s\" acknowledged a former posting attempt on ack-once list \"%s\"; " \
   		       "add him to the ack file and let the posting pass.", MailStruct->From, listname);
   
   		rc = add_address(ListConfig->ack_file, MailStruct->From);
  @@ -250,7 +250,7 @@
   		    {
   		    char* cookie;
   
  -		    syslog(LOG_NOTICE, "\"%s\" tried to post to ack-once list \"%s\", but is posting " \
  +		    syslog(LOG_INFO, "\"%s\" tried to post to ack-once list \"%s\", but is posting " \
   			   "for the first time; posting has been deferred.", MailStruct->From, listname);
   
   		    cookie = queue_posting(MailStruct, listname);
  @@ -280,7 +280,7 @@
   		    return;
   		    }
   		else
  -		    syslog(LOG_NOTICE, "\"%s\" tried to post to ack-once list \"%s\" and has been found in " \
  +		    syslog(LOG_INFO, "\"%s\" tried to post to ack-once list \"%s\" and has been found in " \
   			   "the ack file; letting posting pass.", MailStruct->From, listname);
   		}
   	    }
  Index: ossp-pkg/petidomo/listserv.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 listserv.c
  --- ossp-pkg/petidomo/listserv.c	2001/01/20 14:29:28	1.7
  +++ ossp-pkg/petidomo/listserv.c	2001/02/12 20:44:13	1.8
  @@ -1,6 +1,6 @@
   /*
      $Source: /e/ossp/cvs/ossp-pkg/petidomo/listserv.c,v $
  -   $Revision: 1.7 $
  +   $Revision: 1.8 $
   
      Copyright (C) 2000 by CyberSolutions GmbH, Germany.
   
  @@ -84,7 +84,6 @@
   
       g_currLine = MailStruct->Body;
       if (*g_currLine == '\0') {
  -	syslog(LOG_NOTICE, "Received mail with empty body.");
   	SendHelp(MailStruct, NULL, NULL, default_list);
   	return;
       }
  Index: ossp-pkg/petidomo/members.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 members.c
  --- ossp-pkg/petidomo/members.c	2001/01/19 14:56:33	1.9
  +++ ossp-pkg/petidomo/members.c	2001/02/12 20:44:13	1.10
  @@ -1,6 +1,6 @@
   /*
      $Source: /e/ossp/cvs/ossp-pkg/petidomo/members.c,v $
  -   $Revision: 1.9 $
  +   $Revision: 1.10 $
   
      Copyright (C) 2000 by CyberSolutions GmbH, Germany.
   
  @@ -54,7 +54,7 @@
         listname = defaultlist;
   
       if (address == NULL || listname == NULL) {
  -	syslog(LOG_NOTICE, "%s: members-command invalid: No list specified.",
  +	syslog(LOG_INFO, "%s: members-command invalid: No list specified.",
   	    MailStruct->From);
   	return 0;
       }
  @@ -70,7 +70,7 @@
       if (isValidAdminPassword(getPassword(), listname) == FALSE &&
   	ListConfig->allowmembers == FALSE) {
   
  -	syslog(LOG_NOTICE, "MEMBERS command from \"%s\" has been denied.", address);
  +	syslog(LOG_INFO, "MEMBERS command from \"%s\" has been denied.", address);
   	fh = vOpenMailer(envelope, address, owner, NULL);
   	if (fh != NULL) {
   	    fprintf(fh, "From: %s-request@%s (Petidomo Mailing List Server)\n",
  Index: ossp-pkg/petidomo/rfcparse.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 rfcparse.c
  --- ossp-pkg/petidomo/rfcparse.c	2001/01/18 20:30:50	1.4
  +++ ossp-pkg/petidomo/rfcparse.c	2001/02/12 20:44:13	1.5
  @@ -1,6 +1,6 @@
   /*
      $Source: /e/ossp/cvs/ossp-pkg/petidomo/rfcparse.c,v $
  -   $Revision: 1.4 $
  +   $Revision: 1.5 $
   
      Copyright (C) 2000 by CyberSolutions GmbH, Germany.
   
  @@ -271,7 +271,7 @@
   
   	if (strncasecmp("From:", currLine, strlen("From:")) == 0) {
   	    if (MailStruct->From != NULL) {
  -		syslog(LOG_NOTICE, "Received mail with multiple From: lines.");
  +		syslog(LOG_INFO, "Received mail with multiple From: lines.");
   		continue;
   	    }
   	    MailStruct->From = &currLine[strlen("From:")];
  @@ -281,7 +281,7 @@
   	    CanonizeAddress(&(MailStruct->From), fqdn);
   	} else if (strncasecmp("Reply-To:", currLine, strlen("Reply-To:")) == 0) {
   	    if (MailStruct->Reply_To != NULL) {
  -		syslog(LOG_NOTICE, "Received mail with multiple Reply-To: lines.");
  +		syslog(LOG_INFO, "Received mail with multiple Reply-To: lines.");
   		continue;
   	    }
   	    MailStruct->Reply_To = &currLine[strlen("Reply-To:")];
  @@ -301,7 +301,7 @@
   	}
   	else if (strncasecmp("Approve:", currLine, strlen("Approve:")) == 0) {
   	    if (MailStruct->Approve != NULL)
  -	      syslog(LOG_NOTICE, "Received mail with multiple Approve: lines.");
  +	      syslog(LOG_INFO, "Received mail with multiple Approve: lines.");
   	    MailStruct->Approve = &currLine[strlen("Approve:")];
   	    rc = ParseApproveLine(MailStruct->Approve);
   	    if (rc != 0)
  @@ -309,7 +309,7 @@
   	}
   	else if (strncasecmp("Approved:", currLine, strlen("Approved:")) == 0) {
   	    if (MailStruct->Approve != NULL)
  -	      syslog(LOG_NOTICE, "Received mail with multiple Approve: lines.");
  +	      syslog(LOG_INFO, "Received mail with multiple Approve: lines.");
   	    MailStruct->Approve = &currLine[strlen("Approved:")];
   	    rc = ParseApproveLine(MailStruct->Approve);
   	    if (rc != 0)
  @@ -317,7 +317,7 @@
   	}
   	else if (strncasecmp("Subject:", currLine, strlen("Subject:")) == 0) {
   	    if (MailStruct->Subject != NULL)
  -	      syslog(LOG_NOTICE, "Received mail with multiple Subject: lines.");
  +	      syslog(LOG_INFO, "Received mail with multiple Subject: lines.");
   	    MailStruct->Subject = &currLine[strlen("Subject:")];
   	    if (*MailStruct->Subject == ' ')
   	      MailStruct->Subject += 1;

From ossp-cvs-owner@ossp.org  Sat Feb 17 21:19:07 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f1HKJ6i65327; Sat, 17 Feb 2001 21:19:06 +0100 (CET)
Date: Sat, 17 Feb 2001 21:19:06 +0100 (CET)
Message-Id: <200102172019.f1HKJ6i65327@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/petidomo/docs petidomo.tex
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   17-Feb-2001 21:19:06
  Branch: HEAD                             Handle: 2001021720190600

  Modified files:
    ossp-pkg/petidomo/docs  petidomo.tex

  Log:
    Added a half finished chapter about the configuration of Petidomo.

  Summary:
    Revision    Changes     Path
    1.4         +109 -1     ossp-pkg/petidomo/docs/petidomo.tex
  ____________________________________________________________________________

  Index: ossp-pkg/petidomo/docs/petidomo.tex
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 petidomo.tex
  --- ossp-pkg/petidomo/docs/petidomo.tex	2001/02/12 19:23:51	1.3
  +++ ossp-pkg/petidomo/docs/petidomo.tex	2001/02/17 20:19:06	1.4
  @@ -2,7 +2,7 @@
   %
   % Petidomo Manual
   %
  -% $Header: /e/ossp/cvs/ossp-pkg/petidomo/docs/petidomo.tex,v 1.3 2001/02/12 19:23:51 simons Exp $
  +% $Header: /e/ossp/cvs/ossp-pkg/petidomo/docs/petidomo.tex,v 1.4 2001/02/17 20:19:06 simons Exp $
   %
   \typearea[2cm]{12}
   \fussy
  @@ -367,6 +367,7 @@
   Once you have done this, your installation is ready to be tested.
   
   \section{Testing the Installation}
  +\label{testing}
   
   Asserting you followed all steps described above, you have a working
   Petidomo installation now. Occasionally, some minor permisson problem
  @@ -483,4 +484,111 @@
   paragraphs 11 and 12 of the file {\sf COPYING} included in this
   distribution.
   
  +\chapter{Configuring Petidomo}
  +
  +\section{The Master Configuration File}
  +
  +At startup, Petidomo will read its master configuration file in order
  +to determine the correct file system paths, the machine's hostname,
  +and the location of the system's MTA --- usually sendmail. If Petidomo
  +is unable to locate or to parse that config file, it will abort
  +immediately.
  +
  +When you started Petidomo while running the tests described in section
  +\ref{testing}, you certainly noticed that Petidomo logs the path where
  +it expects to find that config file:
  +\begin{quote}
  +\begin{verbatim}
  +petidomo[8706]: Petidomo 4.0b1 (18-Jan-2001) starting up; \
  +        mode=listserv, listname=<none>, \
  +        masterconf=/usr/local/etc/petidomo.conf, \
  +        approved=false, ruid=2, euid=2, gid=2, egid=2
  +\end{verbatim}
  +\end{quote}
  +
  +Here, the master config file will be expected at {\sf
  +/usr/local/etc/petidomo.conf} --- what is the default, unless you
  +changed the ``sysconfdir'' while compiling the binary. If you want to
  +change that path without re-compiling the binary, you can simply
  +provide a new location on the command line when calling Petidomo by
  +adding the parameter ``{\sf {-}-masterconf=/new/path/to/file}''. You
  +can also omit the equal sign and write ``{\sf
  +{-}-masterconf~/new/path/to/file}'' if you prefer that.
  +
  +In any case, this config file must exist, be readable for Petidomo and
  +have correct contents, or your installation won't do anything but tell
  +you that there's something wrong. In the following, we'll list all
  +directives you can set in that file and explain their syntax and
  +semantics.
  +
  +\label{config file syntax}
  +All directives must be stated at the first column of a line and
  +obviously only one directive per line is allowed. Each directive
  +consists of a keyword and the data part. Which keywords exist will be
  +explained below. You separate the keyword from the data by whitespace.
  +Either tabs of blanks are fine and you may use any number of
  +whitespace characters you like.
  +
  +The case of the keywords does not matter; both ``hostname'' and
  +``HoStNaMe'' are the same to Petidomo. If the data part contains any
  +whitespace itself --- as in the MTAOptions directive ---, it is
  +recommended to enclose it in double quotes to avoid confusion.
  +Petidomo will get it right if you do not use double quotes, though,
  +unless you need to specifi whitespace at the beginning or the end of
  +the data part; any whitespace there will be ignored.
  +
  +Empty lines will be ignored and so will any line that starts with the
  +{\sf \#} character; you can use it to add comments to the config file.
  +
  +OK, here is the list of keywords to be used in the master config file
  +including a description what they mean.
  +
  +\paragraph{Hostname}
  +
  +This is a required directive that tells Petidomo how the system's
  +Internet host name is. You should use the fully qualified host name
  +here --- the host's name including the domain name that is. If you
  +omit the domain, things might work, but they probably won't.
  +
  +\paragraph{AdminPassword}
  +
  +Use this to specify a password, which only the administrator of the
  +Petidomo systems should know. You can use this password to approve
  +e-mails or to subscribe addresses to closed lists. You can do pretty
  +much anything with Petidomo you want, so choose somthing a bit more
  +original than the example ``open sesame'' found in the config file
  +examples. This option is required; Petidomo will not run unless it is
  +there.
  +
  +\paragraph{MTA}
  +
  +Here you must specify the path to the MTA Petidomo will use to send
  +outbound e-mail. This option is required.
  +
  +\paragraph{MTAOptions}
  +
  +Depending on which MTA you use, you may want to provide parameters to
  +it when it is started. Those options can be specified here. The
  +default options, if this directive is not specified in the master
  +config file, are ``{\tt -i -f\%s}''. The {\tt \%s} is a place holder
  +for the envelope from to be added by Petidomo and it will be replaced
  +by the apropriate e-mail address at execution time.
  +
  +Please note that the compiled in default options work for sendmail,
  +you may have to change them if you're using a different MTA.
  +
  +\paragraph{ListDirectory}
  +
  +\paragraph{AckQueueDirectory}
  +
  +\paragraph{HelpFile}
  +
  +\paragraph{ACLFile}
  +
  +\paragraph{IndexFile}
  +
  +\section{List Config Files}
  +
  +
   \end{document}
  +

From ossp-cvs-owner@ossp.org  Sat Feb 17 22:37:07 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f1HLb5071046; Sat, 17 Feb 2001 22:37:05 +0100 (CET)
Date: Sat, 17 Feb 2001 22:37:05 +0100 (CET)
Message-Id: <200102172137.f1HLb5071046@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/petidomo hermes.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   17-Feb-2001 22:37:05
  Branch: HEAD                             Handle: 2001021721370500

  Modified files:
    ossp-pkg/petidomo       hermes.c

  Log:
    Petidomo will now let the "keywords:" and "summary:" headers pass when
    posting to a list. These headers are uncommon but have been around for
    ages.

  Summary:
    Revision    Changes     Path
    1.20        +3  -1      ossp-pkg/petidomo/hermes.c
  ____________________________________________________________________________

  Index: ossp-pkg/petidomo/hermes.c
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 hermes.c
  --- ossp-pkg/petidomo/hermes.c	2001/02/12 20:44:13	1.19
  +++ ossp-pkg/petidomo/hermes.c	2001/02/17 21:37:05	1.20
  @@ -1,6 +1,6 @@
   /*
      $Source: /e/ossp/cvs/ossp-pkg/petidomo/hermes.c,v $
  -   $Revision: 1.19 $
  +   $Revision: 1.20 $
   
      Copyright (C) 2000 by CyberSolutions GmbH, Germany.
   
  @@ -312,6 +312,8 @@
   	    !strncasecmp(currLine, "In-Reply-To:", 12) ||
   	    !strncasecmp(currLine, "References:", 11) ||
   	    !strncasecmp(currLine, "Message-Id:", 11) ||
  +	    !strncasecmp(currLine, "Keywords:", 11) ||
  +	    !strncasecmp(currLine, "Summary:", 11) ||
   	    !strncasecmp(currLine, "Received:", 9))
   	    {
   	    len = nextLine - currLine;

From ossp-cvs-owner@ossp.org  Sat Feb 17 22:46:48 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f1HLkk171752; Sat, 17 Feb 2001 22:46:46 +0100 (CET)
Date: Sat, 17 Feb 2001 22:46:46 +0100 (CET)
Message-Id: <200102172146.f1HLkk171752@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/petidomo/docs petidomo.tex
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   17-Feb-2001 22:46:46
  Branch: HEAD                             Handle: 2001021721464600

  Modified files:
    ossp-pkg/petidomo/docs  petidomo.tex

  Log:
    Added descriptions of the configuration file and moved some contents
    from the old manual version back in.

  Summary:
    Revision    Changes     Path
    1.5         +1405 -93   ossp-pkg/petidomo/docs/petidomo.tex
  ____________________________________________________________________________

  Index: ossp-pkg/petidomo/docs/petidomo.tex
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 petidomo.tex
  --- ossp-pkg/petidomo/docs/petidomo.tex	2001/02/17 20:19:06	1.4
  +++ ossp-pkg/petidomo/docs/petidomo.tex	2001/02/17 21:46:46	1.5
  @@ -2,17 +2,30 @@
   %
   % Petidomo Manual
   %
  -% $Header: /e/ossp/cvs/ossp-pkg/petidomo/docs/petidomo.tex,v 1.4 2001/02/17 20:19:06 simons Exp $
  +% $Header: /e/ossp/cvs/ossp-pkg/petidomo/docs/petidomo.tex,v 1.5 2001/02/17 21:46:46 simons Exp $
   %
   \typearea[2cm]{12}
  +\usepackage{lastpage}
  +\usepackage{fancyhdr}
  +\pagestyle{fancy}
  +\lhead{\sl The Petidomo Mailing List Manager}
  +\chead{}
  +\rhead{Page \thepage\ of \pageref{LastPage}}
  +\lfoot{}
  +\cfoot{}
  +\rfoot{}
  +\fancypagestyle{plain}{}
   \fussy
   
  +\newcommand{\Def}[1]{{\sl #1}}
  +\newcommand{\file}[1]{{\sf #1}}
  +
   \begin{document}
  +
   \title{The Petidomo Mailing List Manager}
   \author{Peter Simons $<$simons@computer.org$>$}
   \date{February 2001}
   \maketitle
  -
   \tableofcontents
   \clearpage
   
  @@ -486,109 +499,1408 @@
   
   \chapter{Configuring Petidomo}
   
  +\section{Configuration File Syntax}
  +
  +All configuration files in the Petidomo-package\label{Config file
  +format}, have the following format:
  +\begin{verbatim}
  +keyword         parameter
  +\end{verbatim}
  +
  +The ``keyword''-part must start at the first column of the line and is
  +followed by one or several blanks or tabs. The first non-blank
  +character then is interpreted as the parameter for this keyword. The
  +following line, for example:
  +\begin{verbatim}
  +Hostname        petidomo.is.great
  +\end{verbatim}
  +will tell Petidomo that the name of the machine it is running on is
  +called ``petidomo.is.great''. If the parameter contains any blanks,
  +what is not very likely for a hostname, but may happen with other
  +settings, you should enclose it in double quotes, like this:
  +\begin{verbatim}
  +AdminPassword   "open sesame"
  +\end{verbatim}
  +
  +Quoting the parameter is not strictly necessary, though, Petidomo's
  +config file parser will get it right anyway. You only have to quote
  +the parameter, if it contains blanks as first or last character, what
  +is rather unlikely to happen.
  +
  +Furthermore all empty lines are ignored. So are lines that start with
  +a `\#' sign. You can use this for writing comments for the reader into
  +the config file.
  +
   \section{The Master Configuration File}
  +\label{master config file}
   
  -At startup, Petidomo will read its master configuration file in order
  -to determine the correct file system paths, the machine's hostname,
  -and the location of the system's MTA --- usually sendmail. If Petidomo
  -is unable to locate or to parse that config file, it will abort
  -immediately.
  +Petidomo expects its master config file to be found under
  +\file{\~{}peti\-do\-mo/etc/pe\-ti\-domo.conf}. The following keywords are
  +recognized:
  +
  +\begin{description}
  +
  +\item[Hostname] \hfill ``hostname.domain.name''
  +
  +This entry specifies the fully qualified domain name of the machine,
  +Petidomo is running on. A fully qualified domain name is the
  +hostname of the machine with the domain name appended with a dot. The
  +following, for example:
  +\begin{verbatim}
  +HostName        listserver.foo.bar
  +\end{verbatim}
  +would be a valid statement. Normally this option has been set by the
  +install script correctly already.
  +
  +The name you set here is not necessarily the name, Petidomo will use
  +when delivering mailing list-postings to the subscribers, or when
  +answering requests, because you can specify a different fully
  +qualified domain name for every mailing list you host. This is known
  +as \Def{virtual hosting}.
  +
  +This option is \emph{required}. Petidomo will abort with an error,
  +if the master config file doesn't set it.
  +
  +\item[AdminPassword] \hfill ``password''
  +
  +This tag sets the master password, which authenticiates the Petidmo
  +administrator. Here is an example:
  +\begin{verbatim}
  +AdminPassword   "open sesame"
  +\end{verbatim}
  +Normally this option has been set by the install script already.
  +
  +Please chose this password carefully. Knowledge of the master password
  +will enable you to access \emph{all} mailing lists running on this
  +system.
  +
  +Passwords are compared case-insensitively. That means, that the
  +passwords ``Open SESAME'', ``open sesame'' and ``OPEN seSAme'' are all
  +the same.
  +
  +This option is \emph{required}. Petidomo will abort with an error,
  +if the master config file doesn't set it.
  +
  +
  +\item[MTA] \hfill ``/path/to/executable''
  +
  +The MTA tag tells Petidomo which mail transport agent should be used
  +to deliver outgoing emails. Normally this option has been set by the
  +install script already, so you don't need to worry about this anymore.
  +
  +An example setting is:
  +\begin{verbatim}
  +MTA     "/usr/sbin/sendmail"
  +\end{verbatim}
  +but Petidomo will run fine with other mail transport agents, too. So
  +far, the system has been tested with the Allman sendmail, SMail and
  +qmail without any problems.
  +
  +This option is \emph{required}. Petidomo will abort with an error,
  +if the master config file doesn't set it.
  +
  +
  +\item[MTAOptions] \hfill ``string''
  +
  +This tag is a bit tricky and in ninety-nine out of hundred cases you
  +should simply leave this option undefined as it is rarely required
  +anyway.
  +
  +This entry sets the options which will be handed over to the MTA
  +when it is called. The following example
  +\begin{verbatim}
  +MTAOptions "-odq -i -f%s"
  +\end{verbatim}
  +will yield a call ``$<$MTA$>$ -odq -i -f$<$envelope$>$''. The `\%s' is
  +replaced with the envelope the mail should be sent under.
  +
  +Adding options to the execution call of the mail transport agent can
  +be useful to enable or disable certain features for mailing lists
  +only, while leaving them on for all other mail. The `-odq' setting is
  +a fine example. This parameter will tell the Allmann sendmail to queue
  +all mail, instead of trying to deliver it immediately.
  +
  +
  +\item[ListDirectory] \hfill ``/path/to/directory''
  +
  +Here you can tell Petidomo the path to the directory where the mailing
  +list config file reside. The compiled-in default is
  +``LOCALSTATEDIR/petidomo/lists'' --- in most cases that resolves to
  +\file{/usr/local/var/petidomo/lists}. When Petidomo tries to find the
  +configuration of list, say, ``foobar'', it will look for any of the
  +following files in this directory: \file{foobar.conf},
  +\file{foobar.config}, \file{foobar/conf}, or \file{foobar/config}.
  +
  +\item[AckQueueDirectory] \hfill ``/path/to/directory''
  +
  +This tag will tell Petidomo where to store files that need to be
  +queued for later processing --- for example subscribe requests that
  +need to be acknowledged by the user before they'll be carried out. The
  +default location is ``LOCALSTATEDIR/petidomo/ack-queue''; unless you
  +changed the default path at compile time, this will resolve to
  +\file{/usr/local/var/petidomo/ack-queue}. Please note that Petidomo
  +will need permission to write to that directory in order for things to
  +work.
  +
  +\item[HelpFile] \hfill ``/path/to/file''
  +
  +This tag will tell Petidomo where to find the text file that will be
  +sent back to a user sending in a ``help'' command. The default
  +location is ``DATADIR/petidomo/help"'', what is usually the file
  +\file{/usr/local/share/petidomo/help}.
  +
  +
  +\item[ACLFile] \hfill ``/path/to/file''
  +
  +This tag tells Petidomo the path to the system-wide ACL file. The
  +default location is ``SYSCONFDIR/petidomo.acl'', what usually resolves
  +to \file{/usr/local/etc/petidomo.acl}.
  +
  +\item[IndexFile] \hfill ``/path/to/file''
  +
  +Similarly to ``HelpFile'', this tag will tell Petidomo where to find
  +the text file that will be sent back to a user requesting the server's
  +``index''. The default location is ``LOCALSTATEDIR/petidomo/index'';
  +unless you changed the default path at compile time, this will resolve
  +to \file{/usr/local/var/petidomo/index}.
  +
  +\end{description}
  +
  +\section{List Configuration Files}
  +\label{list config file}
  +
  +While the master config file sets options which are relevant for the
  +Petidomo package as a whole, the list config file sets options which
  +are valid only locally for the mailing list. The supported keywords
  +are as follows.
  +
  +\begin{description}
  +
  +\item[ListType] \hfill ``open'', ``closed'',  ``moderated'',
  +``acknowledged'', or ``acknowledged-once''
  +
  +This setting tells Petidomo who is allowed to post to the mailing
  +list. On an ``open'' mailing list, everybody is allowed to post,
  +whether he's subscribed or not. On a ``closed'' mailing list, only
  +subscribers are allowed to post. That means that only mails coming
  +from an address found on the list's address database will go through.
  +All other mails will be sent back to the person trying to post with
  +the comment that he should subscribe first.
  +
  +Please note that a closed list may not do exactly what you want,
  +because when a person is subscribed to a list as
  +``example@address.net'', but tries to post from a different account
  +than that one, Petidomo will not let him post. It tries to recognize
  +this case as far as possible: For example, it doesn't matter whether
  +you are posting from ``address@host1.address.net'' or
  +``address@host2.address.net'', Petidomo will handle that. But if the
  +article comes from ``example@private.account'', it will be rejected,
  +even though the sender might be a valid subscriber. It depends on the
  +subscribers of the mailing list, whether this is a problem or not.
  +
  +A better way to keep spam off your lists may be the ``acknowledged''
  +or ``acknowledged-once'' type of list. The former list mode means that
  +every time someone tries to post, he will get a short reply back which
  +contains some cryptographic cookie. Furthermore the mail will tell
  +him to please reply to that mail and send the cookie back to Petidomo.
  +Once that is accomplished, Petidomo will let the posting pass.
  +
  +This means that only people will be able to post that have a valid
  +envelope or from address --- something spammers usually do not. Since
  +the request for confirmation never reaches them, their postings will
  +not go through. Everybody else can acknoledge the posting by sending
  +the cookie back and thus get by that hurdle.
  +
  +The difference between the ``acknowledged'' and ``acknowledged-once''
  +mode finally is that in the latter mode, people have to send that
  +confirmation back only \emph{once}, while in the first mode, they have
  +to send it in every time they're trying to post. Petidomo will keep a
  +database of addresses that have been confirmed by that mechanism and
  +these addresses are allowed to post from now on without having to
  +confirm their posting again. Please note that this list of addresses
  +is not related to the list of subscribers!
  +
  +Last but not least, there is a mode called ``moderated''; in this
  +mode, nobody is allowed to post unless he can provide the correct
  +posting- or administrator password for the list.
  +
  +If this option is unset, the default is to run an open list.
  +
  +\item[SubscriptionType] \hfill ``public'', ``admin'', or ``acknowledged''
  +
  +This option specifies who may subscribe to a mailing list. On an
  +``open''-subscription list, anybody may subscribe any address to the
  +list. If the subscription type is ``admin'', only the person knowing
  +the admin password of the mailing list is allowed to subscribe or
  +unsubscribe addresses. All other requests that aren't properly
  +authenticated will be forwarded to the list owner for approval.
  +
  +If the subscription type is set to ``acknowledged'', anybody can issue
  +a subscribe command, but the address will not be added to the list (or
  +removed from the list in case of an ``unsubscribe'') unless the
  +request has been confirmed: Petidomo will send a random cookie to the
  +address in questing and ask to send the cookie back to acknowledge the
  +request. Once the cookie has been send back, the request is carried
  +out.
  +
  +This mode is useful to prevent people from adding random addresses to
  +the list or to prevent them from removing other people from the list
  +without their consesus.
  +
  +If this option is unset, the default to allow public subscription.
  +
  +\item[AllowMembersCommand] \hfill ``yes'' or ``no''
  +
  +Petidomo knows a command ``members'' or ``who'', which can be sent
  +to the server and it will reply with the complete list of subscribed
  +addresses for the mailing list. This may be useful for list
  +administrators, but it can be abused easily by spammers, to collect
  +addresses where to send their unsolicted commercial e-mail to.
  +
  +Furthermore, with certain mailing lists it may be undesirable that one
  +can see ``who else'' is subscribed to that list. That's why this
  +option has been added. If you set it to ``no'', the
  +``members''-command will be diabled for this list. (This is also the
  +default if the option is not specified in the config file.)
  +
  +If you set it to ``yes'', the ``members''-command will work.
  +
  +\item[Hostname] \hfill ``hostname.domainname''
  +
  +This options tells Petidomo to use this hostname for the mailing list,
  +instead of the one configured in the master configuration file. This
  +feature is useful to do virtual hosting.
  +
  +\Def{Virtual hosting} is required when several mailing lists run on
  +the same server, but they have to look like they would coming from
  +different machines. Let's use an example: The internet service
  +provider ``Inter.Net'' offers its customers to host mailing lists for
  +them. A small software house of the name ``Petiware'' wants to provide
  +a mailing list for all its customers, but they don't have a dedicated
  +Internet line.
  +
  +So they use the service provided by Inter.Net and let them host the
  +mailing list on their machine. The mailing list server at Inter.Net
  +has the fully qualified domain name ``mail.inter.net''. Petiware,
  +though, wants the list to run under the name
  +``customers@petiware.com'' and \emph{not} ``customers@inter.net'' ---
  +what would a be misleading.
  +
  +So all the mailing list guru from Inter.Net has to do is to set the
  +entry
  +\begin{verbatim}
  +Hostname        petiware.com
  +\end{verbatim}
  +in the config file of the ``customers'' mailing list. Petidomo will
  +now use the hostname ``peti\-ware.com'' in all mails that are posted
  +to that list, instead of ``mail.inter.net''.
  +
  +You can specify a different hostname for every mailing list, using
  +this feature. \emph{That} is ``virtual hosting''. Further details on
  +virtual hosting can be found in section~\ref{virtual hosting and
  +sendmail} of the user manual.
  +
  +If this entry is unset, the name configured in the master config file
  +will be used as hostname for this mailing list.
  +
  +\item[AdminPassword] \hfill ``string''
  +\label{list admin password}
  +
  +This tag sets the master password, which authenticiates the
  +administrator of this mailing list. The administrator has special
  +priviledes, such as deleting other users, overriding access control
  +restrictions or un-/subscribing users to closed mailing lists. This is
  +described briefly in section~\ref{petidomo as admin} of the user manual.
  +
  +Please note that passwords are always case-insensitive. It is also
  +worth noting that the master password is always valid as administrator
  +password for the list, also.
  +
  +Leave this entry blank, if you don't want to enable remote
  +administration of the mailing list.
  +
  +\item[PostingPassword] \hfill ``string''
  +\label{posting password}
  +
  +This tag sets the ``posting password''. The posting password allows to
  +post an article to a moderated mailing list, but it does not allow any
  +administration of the list itself. On lists that are of a different
  +type than moderated, setting a posting password does usually not make
  +any sense and you can leave this entry unset.
  +
  +\item[ReplyTo] \hfill ``email@address.net'' or ``none''
  +
  +This tag controls the `Reply-To:' field, which Petidomo adds to
  +posted articles before it is delivered to the recipients. Using this
  +option, you can force Petidomo to insert a `Reply-To:' which points
  +to a certain address. On a moderated list, for example, you can set
  +this as follows:
  +\begin{verbatim}
  +ReplyTo         moderator@address.net
  +\end{verbatim}
  +to direct all replies to the posting to the moderator again,
  +regardless of what address is noted in the `From:' line of the mail.
  +
  +If you set ``none'', Petidomo will not add a `Reply-To:' header at
  +all.
  +
  +If this option is unset, Petidomo will to insert a `Reply-To:'
  +header that directs replies back to the mailing list, so that
  +subscribers can conveniently post simply by hitting the `reply'
  +function in their mail reader.
  +
  +\item[PostingFilter] \hfill ``bourne shell command''
  +
  +If you specify a posting filter, this program or script will be
  +started by Petidomo before it sends a posting out to the
  +subscribers. The programm will receive the article, as it has been
  +prepared by Petidomo, on standard input and is expected to write the
  +final version of the mail to standard output. The posting filter can
  +be used to manipulate the headers for special purposes.
  +
  +An example for a postin filter that wouldn't modify the mail at all is
  +the following:
  +\begin{verbatim}
  +PostingFilter   /bin/cat
  +\end{verbatim}
  +
  +A detailed discussion of posting filters can be found in
  +section~\ref{using posting filters} of the manual.
  +
  +If the filter program exits with a returncode not equal to 0 (zero),
  +Petidomo will not post the article and terminate.
  +
   
  -When you started Petidomo while running the tests described in section
  -\ref{testing}, you certainly noticed that Petidomo logs the path where
  -it expects to find that config file:
  +\item[Archive] \hfill ``/path/of/archive''
  +
  +If this option is set, Petidomo will archive all articles that have
  +been posted on that mailing list. The parameter for this tag may
  +either be the name and path of a file or of a directory. The path may
  +either be absolute (\file{/var/archive/list}) or relative
  +(\file{archive}). For relative paths, the directory where the list's
  +config file resides will be used as starting point. If the
  +``Archive''-tag points to a file, Petidomo will append every posted
  +article to that file. If points to a directory, each posting will be
  +stored in that directory in a separate file.
  +
  +If this option is unset, posted articles will not be archived at all.
  +
  +For further information an creating mailing list archives, please
  +refer to section~\ref{mailing list archives} of the user manual.
  +
  +
  +\item[IntroductionFile] \hfill ``/path/to/file''
  +
  +This tag specifies the path to the so called ``introduction'' file.
  +Every time an address is added to the mailing list, Petidomo will send
  +the contents of this file to the new subscriber. This is meant to be
  +used to inform the new subscriber about the list's topic, habits he
  +should know, etc. If the file does not exist, no mail is sent out.
  +
  +If the path specified here is relative --- not starting with a ``/''
  +character that is ---, it is interpreted to be relative to the
  +directory where the list's config file has been found. The default
  +path is \file{introduction}.
  +
  +
  +\item[DescriptionFile] \hfill ``/path/to/file''
  +
  +This tag specifies the path to the so called ``description'' file.
  +This file is supposed to contain a short description of the mailing
  +list's topic and purpose. It's contents will be sent back if a user
  +requests the command ``help listname''.
  +
  +If the path specified here is relative --- not starting with a ``/''
  +character that is ---, it is interpreted to be relative to the
  +directory where the list's config file has been found. The default
  +path is \file{description}.
  +
  +
  +\item[ACLFile] \hfill ``/path/to/file''
  +
  +This tag specifies the path to the list-specific ACL file. Please
  +refer to section~\ref{acl} for more information about the access
  +control language of Petidomo.
  +
  +If the path specified here is relative --- not starting with a ``/''
  +character that is ---, it is interpreted to be relative to the
  +directory where the list's config file has been found. The default
  +path is \file{acl}.
  +
  +
  +\item[HeaderFile] \hfill ``/path/to/file''
  +
  +The contents of this file this tag points to will be added to the
  +header of \emph{every} posting on this list. This may be used to add
  +custom headers like:
   \begin{quote}
   \begin{verbatim}
  -petidomo[8706]: Petidomo 4.0b1 (18-Jan-2001) starting up; \
  -        mode=listserv, listname=<none>, \
  -        masterconf=/usr/local/etc/petidomo.conf, \
  -        approved=false, ruid=2, euid=2, gid=2, egid=2
  +X-List-Archive-is-at: http://list-archive.example.org/
  +\end{verbatim}
  +\end{quote}
  +
  +Please note that the contents of this file will be added
  +\emph{verbatim}! So don't include any empty lines in here as empty
  +lines mark the end of the mail headers! Generally, please use this
  +feature with care; most mailing list administrators tend to
  +overestimate the importance of custom headers on their mailing list.
  +
  +If the path specified here is relative --- not starting with a ``/''
  +character that is ---, it is interpreted to be relative to the
  +directory where the list's config file has been found. The default
  +path is \file{header}.
  +
  +
  +\item[SignatureFile] \hfill ``/path/to/file''
  +
  +The contents of this file this tag points to will be appended to
  +\emph{every} posting on this list. This may be used to add a
  +list-specific signature, like:
  +\begin{quote}
  +\begin{verbatim}
  +--
  + Useful comment here.
   \end{verbatim}
   \end{quote}
   
  -Here, the master config file will be expected at {\sf
  -/usr/local/etc/petidomo.conf} --- what is the default, unless you
  -changed the ``sysconfdir'' while compiling the binary. If you want to
  -change that path without re-compiling the binary, you can simply
  -provide a new location on the command line when calling Petidomo by
  -adding the parameter ``{\sf {-}-masterconf=/new/path/to/file}''. You
  -can also omit the equal sign and write ``{\sf
  -{-}-masterconf~/new/path/to/file}'' if you prefer that.
  -
  -In any case, this config file must exist, be readable for Petidomo and
  -have correct contents, or your installation won't do anything but tell
  -you that there's something wrong. In the following, we'll list all
  -directives you can set in that file and explain their syntax and
  -semantics.
  -
  -\label{config file syntax}
  -All directives must be stated at the first column of a line and
  -obviously only one directive per line is allowed. Each directive
  -consists of a keyword and the data part. Which keywords exist will be
  -explained below. You separate the keyword from the data by whitespace.
  -Either tabs of blanks are fine and you may use any number of
  -whitespace characters you like.
  -
  -The case of the keywords does not matter; both ``hostname'' and
  -``HoStNaMe'' are the same to Petidomo. If the data part contains any
  -whitespace itself --- as in the MTAOptions directive ---, it is
  -recommended to enclose it in double quotes to avoid confusion.
  -Petidomo will get it right if you do not use double quotes, though,
  -unless you need to specifi whitespace at the beginning or the end of
  -the data part; any whitespace there will be ignored.
  -
  -Empty lines will be ignored and so will any line that starts with the
  -{\sf \#} character; you can use it to add comments to the config file.
  -
  -OK, here is the list of keywords to be used in the master config file
  -including a description what they mean.
  -
  -\paragraph{Hostname}
  -
  -This is a required directive that tells Petidomo how the system's
  -Internet host name is. You should use the fully qualified host name
  -here --- the host's name including the domain name that is. If you
  -omit the domain, things might work, but they probably won't.
  -
  -\paragraph{AdminPassword}
  -
  -Use this to specify a password, which only the administrator of the
  -Petidomo systems should know. You can use this password to approve
  -e-mails or to subscribe addresses to closed lists. You can do pretty
  -much anything with Petidomo you want, so choose somthing a bit more
  -original than the example ``open sesame'' found in the config file
  -examples. This option is required; Petidomo will not run unless it is
  -there.
  -
  -\paragraph{MTA}
  -
  -Here you must specify the path to the MTA Petidomo will use to send
  -outbound e-mail. This option is required.
  -
  -\paragraph{MTAOptions}
  -
  -Depending on which MTA you use, you may want to provide parameters to
  -it when it is started. Those options can be specified here. The
  -default options, if this directive is not specified in the master
  -config file, are ``{\tt -i -f\%s}''. The {\tt \%s} is a place holder
  -for the envelope from to be added by Petidomo and it will be replaced
  -by the apropriate e-mail address at execution time.
  -
  -Please note that the compiled in default options work for sendmail,
  -you may have to change them if you're using a different MTA.
  -
  -\paragraph{ListDirectory}
  -
  -\paragraph{AckQueueDirectory}
  +If the path specified here is relative --- not starting with a ``/''
  +character that is ---, it is interpreted to be relative to the
  +directory where the list's config file has been found. The default
  +path is \file{signature}.
   
  -\paragraph{HelpFile}
   
  -\paragraph{ACLFile}
  +\item[AddressFile] \hfill ``/path/to/file''
   
  -\paragraph{IndexFile}
  +This tag specifies the path to the path of the file Petidomo uses to
  +store the list of subscribed addresses. If the path specified here is
  +relative --- not starting with a ``/'' character that is ---, it is
  +interpreted to be relative to the directory where the list's config
  +file has been found. The default path is \file{list}.
   
  -\section{List Config Files}
   
  +\item[AcknowledgementFile] \hfill ``/path/to/file''
   
  -\end{document}
  +This tag specifies the path to the path of the file Petidomo uses to
  +store the list of addresses that have been verified by the
  +acknowledgement mechanism and may furtheron post without having to
  +acknowledge their posting again. This is only used if the list is set
  +to ``acknowledge-once'' mode.
  +
  +If the path specified here is relative --- not starting with a ``/''
  +character that is ---, it is interpreted to be relative to the
  +directory where the list's config file has been found. The default
  +path is \file{ack}.
  +
  +\end{description}
  +
  +\section{Command Line Syntax}
  +
  +\section{Aliases}
  +\label{aliases}
  +
  +The binaries of the Petidomo package are usually not called manually
  +from the shell, but by the mail transport agent. This works as
  +follows: You create an e-mail account, which serves the purpose of
  +accepting the incoming e-mail and piping it into the appropriate
  +binary.
  +
  +This is archieved with the ``alias''-function of your mail transport
  +agent. Most MTAs, like sendmail, have a file where a list of special
  +account names is given together with the instructions what to do with
  +any mail received for that account. This file is usually located in
  +\file{/etc/aliases}.
  +
  +One thing, aliases can do is to pipe the mail into a program for
  +processing. This is the mechanism Petidomo uses. Petidomo requires
  +you to add the following aliases to your system:
  +\begin{verbatim}
  +#
  +# Mailing List Stuff
  +#
  +petidomo-manager: root
  +petidomo: "|/usr/local/petidomo/bin/listserv"
  +\end{verbatim}
  +
  +The lines starting with the `\#' character are only comments and are
  +ignored by the mail transport agent. The fourth line, though, is the
  +first command. It tells the MTA to accept mail for an user of the name
  +``petidomo-manager'' and to re-direct the e-mail to an user of the
  +name ``root'' --- the system administrator.
  +
  +Petidomo will send notifications of an error and administrative
  +things like that to the address ``petidomo-manager''. By setting this
  +alias to a certain user name, you can control who will receive those
  +mails.
  +
  +The next line now tells the MTA to pipe any incoming mail for the user
  +``petidomo'' into the ``listserv'' program, instead of delivering it
  +into a mailbox. ``listserv'' will then parse the mail for commands and
  +react accordingly. Hence, the address people can send their
  +subscription requests to is ``petidomo@your.host.name''.
  +
  +These aliases have been created by the install script, unless you told
  +it not to, and you don't need to worry about them.
  +
  +\bigskip
  +
  +Furthermore, each mailing list on your server requires three aliases,
  +as shown in the example below, which is written for the ``testlist''
  +mailing list that comes with the distribution:
  +\begin{verbatim}
  +testlist: "|/usr/local/petidomo/bin/hermes testlist"
  +testlist-request: "|/usr/local/petidomo/bin/listserv testlist"
  +testlist-owner: petidomo-manager
  +\end{verbatim}
  +
  +The first alias, ``testlist'' is the address to which people can send
  +their mail in order to post to the mailing list. Any incoming mail for
  +that account will be piped into the ``hermes'' binary, which will
  +process the mail and then re-send it to all subscribers of the mailing
  +list. In order to let ``hermes'' know, for which mailing list the
  +posting was meant, the parameter ``testlist'' has to be specified on
  +the command line. If the name of the mailing list was ``foobar'', the
  +line would look like this:
  +\begin{verbatim}
  +foobar: "|/usr/local/petidomo/bin/hermes foobar"
  +\end{verbatim}
  +
  +The second alias is a special request address, to which users can send
  +their commands. The difference between this address and the
  +``petidomo'' alias described above is that ``listserv'' is being given
  +a default listname on the command line. The difference is this: If
  +``listserv'' receives a mail, which has the command ``subscribe'' in
  +it, without any further parameters, it will reject the command with an
  +error, because it doesn't know to which list the sender wants to be
  +added.
  +
  +If the command ``subscribe'' is sent to the ``testlist-request''
  +address, though, it will assume that the user wants to be subscribed
  +to the ``testlist'' mailing list, as this is the default list for this
  +address.
  +
  +The name of this alias should always be the name of the mailing list
  +with the string ``-request'' appended. Theoretically you could choose
  +a different name, but this unwritten standard is wide accepted
  +throghout the Internet for several years now.
  +
  +The last alias is the name of the mailing list with the string
  +``-owner'' appended. This alias points to the person who is
  +responsible for managing the ``testlist'' mailing list. Petidomo
  +will send all e-mail concerning the administration of the mailing list
  +to the address ``listname-owner''. Usually this will ultimately be the
  +same person as the ``petidomo-manager'', but you are free to direct
  +mail for this account to somebody else, or to several persons.
  +
  +\chapter{Petidomo for Mailing List Users}
  +\label{petidomo as user}
  +
  +In this chapter, we will describe the commands, that are
  +understood by the ``listserv'' program. ``listserv'' is the interface
  +for the users of the mailing lists, where they can send their requests
  +to in order to be subscribed to a mailing list, be unsubscribed again
  +and similar things. The text here is mostly identical with the
  +default help text that is sent to the user
  +whenever he or she issues a command that is syntactically incorrect.
  +This text is stored in the file
  +\file{\~{}petidomo/etc/help} and can be
  +customized to fit the requirements of your site.
  +
  +User commands always have to be sent to the request address of
  +the mailing list --- \emph{not} to the mailing list itself. Petidomo
  +will try to recognize commands that are sent to the mailing list and
  +redirect them to the ``listserv'' program, but naturally this will not
  +work in all cases. The address, where requests should be directed to,
  +is \emph{always} the address of the mailing list with the string
  +``-request'' appended to the username. If the mailing list is called
  +``politics@foo.bar'', the appropriate request address is
  +``politics-requst@foo.bar''.
  +
  +Alternatively, commands can always be sent to the address
  +``peti\-do\-mo@your.ad\-dress'', but the ``-request''-address is preferable,
  +for the fact that the ``listserv'' will have a default listname for
  +this address and thus understand a simpler command syntax.
  +
  +\section{SUBSCRIBE}
  +
  +The ``subscribe'' command will add the address of the user to a
  +mailing list. When using the ``-request''-address, only the word
  +``subscribe'' is required for the request to suceed. If the command is
  +sent to the ``petidomo'' address, the user will have to specify an
  +additional parameter: The name of the mailing list he or she wants to
  +be added to, like in the following example:
  +\begin{verbatim}
  +subscribe politics
  +\end{verbatim}
  +
  +If the user wants to add an address that is not equal to the one he or
  +she is sending the e-mail from, the e-mail address will have to be
  +specified, too:
  +\begin{verbatim}
  +subscribe politics joe@foo.bar
  +\end{verbatim}
  +
  +The order in which the e-mail address and the mailing list name are
  +provided does not matter. Please note that the administrator can
  +configure Petidomo to disallow un-/subscring other addresses than
  +the one, the request is sent from, using the
  +``AllowAlienSubscription'' option in the list's config file.
  +
  +The command ``add'' is synonymous to ``subscribe''.
  +
  +\section{UNSUBSCRIBE}
  +
  +The syntax and usage of the ``unsubscribe`` command are the same as the
  +``subscribe'' command. The difference is, though, the the user's address
  +is removed from the mailing list rather than added to it.
  +
  +``delete'' and ``remove'' can be used synonymously to ``unsubscribe''.
  +
  +\section{INDEX}
  +
  +The ``index'' command does not need any parameters. Sending it to the
  +server will return a list of available mailing lists on this server.
  +This is useful in case you want to subscribe to a list but can't
  +remember the exact name anymore.
  +
  +The commands ``lists'' and ``longindex'' are synonyms to ``index''.
  +
  +\section{HELP}
  +
  +If the server receives the command ``help'', it will send the file
  +\file{\~{}peti\-domo/etc/help} back. If ``help'' has a parameter,
  +Petidomo will check whether this is a valid name of an existing
  +mailing list, and if it is, it will return the description file for
  +this mailing list, rather than the help-file.
  +
  +\section{MEMBERS}
  +
  +The ``members'' command will return the addresses of all subscribers
  +of the mailing list, if the administrator chose to allow this command.
  +When ``members' is sent to the ``-request''-address, the default list
  +will be used by Petidomo. Otherwise, the name of the mailing list
  +which's subscribers should be listed, has to be specified as an option
  +like in the following example:
  +\begin{verbatim}
  +members politics
  +\end{verbatim}
  +
  +The command ``who'' can be used synonymously to ``members''.
   
  +\chapter{Petidomo for Administrators}
  +\label{petidomo as admin}
  +
  +On the ``other side'' of Petidomo, from the user's
  +perspective, is the administrator of the mailing list --- also called
  +the \Def{mailing list owner}). Each mailing list has an
  +alias ``listname-owner'' (see section~\ref{aliases}), where the mail
  +address of the person who is responsible for this mailing list should
  +be specified. Per default, this is the user who is known as
  +``petidomo-manager''. But you are free to direct mail for this accoun
  +to any other person --- or several persons.
  +
  +The list owner will receive administrative e-mail from Petidomo in
  +the following cases:
  +
  +\begin{itemize}
  +
  +\item When a new user subscribes, or a subscriber removes himself from
  +the list, a carbon copy of the recipt will be sent to the owner. By
  +looking at these mails, the owner can check whether a ``subscribe'' or
  +``unsubscribe'' command looks bogus. He or she can also keep track of
  +who is on the list and who is not.
  +
  +\item If a ``members'' command is received for a mailing list where
  +this command has been disabled, this will also be forwarded to the
  +owner.
  +
  +\end{itemize}
  +
  +These mails are merely for information purposes and do not necessarily
  +require an action from the admin. There are cases, where the list
  +owner will receive mails from Petidomo, though, that require some
  +kind of reaction.
  +
  +\section{Bounces}
  +
  +While maintaining mailing list with a larger number of subscribers, it
  +happens regularly that subscribed addresses become invalid or are
  +temporarily not reachable. In this case postings will \Def{bounce}.
  +You will then receive a mail from a mail server telling you, that the
  +delivery of the mail failed.
  +
  +Often, addresses become unreachable due to a misconfiguration of a
  +machine, so it is not always necessary to remove that address from the
  +list immediately, but when an addresses bounces for several days in a
  +row, it is a good idea to delete that address from the mailing list.
  +You should do that by sending an ``unsubscribe'' command for that
  +address to the ``-request''-address of the mailing list.
  +
  +If you have configured Petidomo to disallow the unsubscription of
  +addresses not equal to the address the mail is sent from, you will
  +have to specify your admin password in the mail, to override the
  +barrier. How this is done is described in section~\ref{approve} later.
  +
  +\section{Closed and moderated lists}
  +
  +If you have configured a mailing list to reject postings under certain
  +circumstances, such as a closed or moderated mailing list, these
  +rejected articles will be forwarded to you for approval. When you
  +receive such a rejected article, you can either silently
  +discard it, contact the author or post it to the mailing list with
  +your approval.
  +
  +You can approve an article with the master password for Petidomo, the
  +admin password of the mailing list in question or the posting password
  +(see section~\ref{posting password} of that list.
  +
  +\section{Approving requests}
  +\label{approve}
  +
  +To approve an article, you have several ways of specifying the
  +appropriate password. They are all the same for Petidomo and it is
  +only a matter of taste, which scheme you use.
  +
  +When sending a command to the ``listserv'' program, though the
  +``-request'' or ``petidomo''-address, it is easy. Just preface your
  +commands with a ``password'' command, like in the
  +following example:
  +\begin{verbatim}
  +To: testlist-request@foo.bar
  +Subject:
  +
  +password open sesame
  +subscribe some@one.else
  +subscribe someone@even.elser
  +\end{verbatim}
  +
  +One ``password'' command sets your password for all the commands to
  +follow. If you want to use one mail to send requests for several
  +mailing lists with different passwords, just give a ``password''
  +command again:
  +\begin{verbatim}
  +To: petidomo@foo.bar
  +Subject:
  +
  +password open sesame
  +subscribe user@inter.net testlist1
  +password let me in
  +subscribe user@inter.net testlist2
  +\end{verbatim}
  +
  +Instead of ``password'', you can also use the commands ``passwd'', or
  +``approve'', they are all synonymous.
  +
  +\section{Approving postings}
  +
  +If you want to approve a posting for a mailing list, just send the
  +article to the mailing list and specify your password either in the
  +header or in the body of the mail.
  +
  +If you choose to approve the mail in the body, add line with the
  +command ``approve'' to the mail as first line of the body. Petidomo
  +will strip that line before actually posting the article then. You can
  +also use the synonyms ``approved'', ``password'' or ``passwd''
  +instead. Here is an example:
  +\begin{verbatim}
  +From: simons@petidomo.com (Peter Simons)
  +Subject: Cats are the most beautiful animals in the world.
  +
  +approve let me post
  +It's not that I wouldn't like animals like dogs, birds
  +or fishes, but for me, a cat is *the* animal to have.
  +[...]
  +\end{verbatim}
  +
  +The line ``approve let me post'' will be stripped by Petidomo and
  +then the article will be sent out.
  +
  +If you want to specify the password in the headers, just add an header
  +of the name ``Approved'' or ``Approve'' to the headers of the mail.
  +(Unfortunately, many mail readers do not allow you to modify the
  +headers of outgoing mail. That is why the body-approval has been
  +added.) Here is the same example as above now using the headers:
  +\begin{verbatim}
  +From: simons@petidomo.com (Peter Simons)
  +Subject: Cats are the most beautiful animals in the world.
  +Approve: let me post
  +
  +It's not that I wouldn't like animals like dogs, birds
  +or fishes, but for me, a cat is *the* animal to have.
  +[...]
  +\end{verbatim}
  +
  +Please note that you have to add a colon to the keyword to make a
  +valid RFC mail-header.
  +
  +
  +\chapter{The Access Control Language}
  +\label{acl}
  +
  +Unfortunately, we live in a world where some people are trying to
  +abuse services like mailing lists for their entertainment or for
  +commercial purposes. It is also not uncommon that among thousands of
  +mailing list subscribers, there is one particular moron who simply
  +can't behave. That is why access control is a useful feature, even
  +though it contradicts the idea of a mailing list: To be a media for
  +communication.
  +
  +Writing and understanding ACL files is, to be honest, not very easy
  +and the novice mailing list administrator should better be careful
  +when using them, because a wrong access control rule might cause more
  +trouble than it is worth, but the experienced administrator will
  +certainly appreciate their power. Understanding how ACL files work
  +will also require you to know a bit about the syntax of an RFC format
  +e-mail. A good place to start is to take a look at RFC822 and its
  +sons.
  +
  +In Petidomo, two places exist to control who is allowed to do what:
  +The global acl file
  +\file{\~{}petidomo/etc/acl} and the acl
  +file that is local to the mailing list:
  +\file{\~{}petidomo/lists/list\-name/acl}. While the latter is valid only
  +for the list in which's home directory it is stored, the globl acl
  +file will be parsed for \emph{all} your mailing lists. ACL files are
  +only relevant for mailing list postings, the ``listserv'' program does
  +not use them.
  +
  +The syntax of an ACL file is similar to the C programming
  +language, as you can see in the following example:
  +\begin{verbatim}
  +if (envelope matches "mailer-daemon@") then
  +        forward "petidomo-manager";
  +\end{verbatim}
  +
  +This is a simple version of the default ACL file which comes with the
  +Petidomo distribution and is installed in
  +\file{\~{}petidomo/etc/acl}. It tells hermes to forward all postings
  +to a mailing list, where the envelope of the mail matches the regular
  +expression ``mailer-daemon@''. This rule is included in the default
  +distribution to make sure that bounces of articles will not be posted
  +to the list again, thus causing an infinite mail loop. The syntax of
  +an ACL statement is shown in figure~\ref{acl syntax}.
  +
  +\begin{figure}[bth]
  +\begin{center}
  +\begin{tabular}{cccccccccc}
  +IF & ( & from & match & {\tt "}regexp{\tt "} & ) & THEN & pass & & ; \\
  +   &   & subject & matches &                   &   &      & drop & & \\
  +   &   & envelope & ==     & {\tt "}string{\tt "}          &   &      & reject & & \\
  +   &   & header   & =     &                & &     & rejectwith & {\tt "}file{\tt "}  & \\
  +   &   & body     &       &                & &     & redirect   & {\tt "}address{\tt "} & \\
  +   &   &      &       &                &   &      & forward    & {\tt "}address{\tt "} & \\
  +   &   &      &       &                &   &      & filter     & {\tt "}script{\tt "} & \\
  +IF & ( &  & {\tt "}filter{\tt "} &  & ) & THEN &  & & ; \\
  +\end{tabular}
  +\caption{The Access Control Language syntax.}
  +\label{acl syntax}
  +\end{center}
  +\end{figure}
  +
  +Admittedly, the figure is rather impossible to understand without
  +further explaination, don't worry if things are still a bit unclear
  +after looking at it.
  +
  +Every ACL statement looks like this: ``IF condition THEN action ;''.
  +The condition may or may not be enclosed in brackets. Several
  +conditions can be combined with the keywords ``OR'' and ``AND''.
  +Furthermore every condition can prefaced with a ``NOT'', which will
  +reverse the outcome of the condition.
  +
  +Let's explain this all at a concrete example: You want to reject all
  +postings which come from the addresses ``moron@moron.net'' and
  +``spam@spam.net'', because these people have constantly been abusing
  +your mailing list service. This can be done with the following two
  +statements:
  +\begin{verbatim}
  +IF from == "moron@moron.net" THEN reject;
  +IF from == "spam@spam.net" THEN reject;
  +\end{verbatim}
  +
  +Using the ``OR'' statement you can combine this into one statement:
  +\begin{verbatim}
  +IF from == "moron@moron.net" OR
  +   from == "spam@spam.net" THEN
  +      reject;
  +\end{verbatim}
  +
  +And now we include brackets for readability:
  +\begin{verbatim}
  +IF (from == "moron@moron.net") OR
  +   (from == "spam@spam.net") THEN
  +      reject;
  +\end{verbatim}
  +
  +The keyword ``from'' stands for the address, noted in the ``From:''
  +header line of the mail and, the ``== {\tt "}address{\tt "}'' means
  +that the condition if this address is equal to the one written in
  +quotes thereafter. (You can also use a single `=' character, if you
  +prefer that over two equal-characters.) This is a verbatim match. If
  +we'd use the ``match'' or ``matches'' keyword instead of the ``=='',
  +the parameter would be interpreted as an extended regular expression
  +and the condition would be true if the addresses matched this pattern.
  +(Regular expressions are described in the re\_format(7) man page, or
  +in the manpages of sed(1), grep(1) or egrep(1).)
  +
  +Other keywords than ``from'' for the first part of the conditional are
  +``subject'' (the contents of the ``Subject:'' header), ``envelope''
  +(the envelope of the mail), header and body. The latter two represent
  +the whole header or body of the mail and should be used only for
  +regular expression matches and not for verbatim matches.
  +
  +A short comment on the difference between ``redirect'' and
  +``forward'': The ``redirect'' action will send the mail to the
  +specified address without changing anythin in the mail. All the
  +headers are left untouched and thus the mail will look as if it has
  +been sent by the person to that address right away. This is useful for
  +redirecting mails to daemons or programs, but it will usually confuse
  +a human recipient
  +
  +The ``forward'' action, though, will send a mail to the specified
  +address with a new set of headers, which identify the Petidomo Mailing List Manager as
  +originator and then it will quote the mail that has been forwarded in
  +the mail body.
  +
  +Valid actions are ``pass'' (post the mail immediately), ``drop''
  +(discard the mail without further notice), ``reject'' (send a mail to
  +the poster, telling him his posting was rejected), ``rejectwith''
  +(sending mail to the poster, too, but with the contents of a specified
  +file), ``redirect'' (redirect the mail to a specified address),
  +``forward'' (like ``redirect'' but preface the mail with a note
  +telling why the mail was re-sent) or ``filter'' (pipe the mail into
  +the specified filter script and post the mail as the filter writes it
  +to the standard output).
  +
  +Here are a few more examples in the hope that they make this all
  +easier to understand: Let's assume you would like to catch all
  +postings to your mailing lists, that contain the words ``MAKE MONEY
  +FAST'' in the subject. Then one way of doing this is the following
  +statement:
  +\begin{verbatim}
  +IF (subejct matches "make money fast") THEN
  +      rejectwith "/usr/local/petidomo/etc/make-money-fast.txt";
  +\end{verbatim}
  +
  +The file \file{/usr/local/petidomo/etc/make-money-fast.txt} could, for
  +example, contain the following text:
  +\begin{quotation}
  +Dear poster,
  +
  +your mail has been rejected. Please note that chain letters like the
  +``make money fast'' text you tried to post are illegal throughout the
  +world and your are likely to get in trouble if you continue to spread
  +them.
  +\end{quotation}
  +
  +If someone tried to post the chain letter to your mailing lists now,
  +he would receive a mail like that:
  +\begin{verbatim}
  +Date: Sat, 28 Jun 1997 19:59:18 +0200 (MET DST)
  +From: testlist-owner@peti.cys.de (Petidomo Mailing List Server)
  +To: simons@cys.de
  +Cc: testlist-owner@peti.cys.de
  +Subject: Your posting to list "testlist" was rejected
  +Precedence: junk
  +Sender: testlist-owner@peti.cys.de
  +
  +Dear poster,
  +
  +your mail has been rejected. Please note that chain
  +letters like the ``make money fast'' text you tried
  +to post are illegal throughout the world and your are
  +likely to get in trouble if you continue to spread them.
  +
  +>From simons  Sat Jun 28 19:59:17 1997
  +Received: from [[UNIX: localhost]]
  +        by peti.cys.de (8.8.5/8.8.4) id TAA16959
  +Date: Sat, 28 Jun 1997 19:59:17 +0200 (MET DST)
  +Message-Id: <199706281759.TAA16959@peti.cys.de>
  +From: Peter Simons <simons@cys.de>
  +To: testlist
  +Subject: MAKE MONEY FAST
  +Mime-Version: 1.0 (generated by tm-edit 7.92)
  +Content-Type: text/plain; charset=US-ASCII
  +
  +Hi, my name is David Rodes...
  +\end{verbatim}
  +
  +A few more words about how the ACL files are parsed:
  +\begin{itemize}
  +
  +\item All comparisons are done case insensitive. ``MAKE MONEY FAST''
  +matches ``make money fast'' in both the verbatim and the regular
  +expression match just fine.
  +
  +\item Any whitespace in the ACL file is ignored. The statements
  +\begin{verbatim}
  +if (envelope matches "mailer-daemon@") then drop;
  +\end{verbatim}
  +and
  +\begin{verbatim}
  +if
  +    (envelope matches
  +"mailer-daemon@")
  +then
  +       drop
  +;
  +\end{verbatim}
  +are the same for Petidomo.
  +
  +\item The argument after the ``=='' or ``matches'' keyword \emph{has}
  +to be included in quotes. An ACL statement like this:
  +\begin{verbatim}
  +if from == simons@petidomo.com then drop;
  +\end{verbatim}
  +will cause Petidomo to abort with an error, because it can't parse
  +this.
  +
  +\item If you use an action that requires a parameter, like
  +``rejectwith'' or ``forward'', this parameter has to be enclosed in
  +quotes, too. A statement like this can also not be parsed by
  +Petidomo:
  +\begin{verbatim}
  +if from == "simons@petidomo.com" then
  +        forward postmaster@petidomo.com;
  +\end{verbatim}
  +
  +\item Petidomo stops parsing the ACL file after the first statement
  +has matched. If you want to reject all mails from an address that
  +matches ``simons@.*\.de'', but you want mails from the address
  +``simons@rhein.de'' to pass nonetheless, the following two statements
  +will not work as expected:
  +\begin{verbatim}
  +if from matches "simons@.*\.de" then reject;
  +if from == "simons@rhein.de" then pass;
  +\end{verbatim}
  +
  +Instead you should use
  +\begin{verbatim}
  +if from == "simons@rhein.de" then pass;
  +if from matches "simons@.*\.de" then reject;
  +\end{verbatim}
  +or
  +\begin{verbatim}
  +if (from matches "simons@.*\.de") and
  +   (not (from == "simons@rhein.de")) then
  +         reject;
  +\end{verbatim}
  +
  +\item Currently you can't match for the double quote character ({\tt
  +"}), we're afraid. The escape sequence {\tt \verb+\+"} is not
  +supported yet.
  +
  +\end{itemize}
  +
  +One last example and then we'll come to the filters. The following
  +statement rejectes a mail based on a match in the headers. This is
  +very useful for rejecting mail from known spam domains. You usually
  +can't rely on the spammer to use a valid ``From:'' header and hence
  +the ``from''-match is useless to catch them. But the following
  +statement will usually get them nonetheless:
  +\begin{verbatim}
  +if (header matches "^Received:.*from spam.domain") then
  +     forward "petidomo-manager";
  +\end{verbatim}
  +
  +\bigskip
  +
  +If you thought, the Access Control Language is powerful so far, take a
  +look at the things you can do using filters. Rather than the syntax
  +described below, you can use the following statement:
  +\begin{verbatim}
  +if ("/usr/local/petidomo/bin/CheckPosting") then reject;
  +\end{verbatim}
  +
  +This is a special form of the usual ACL statements and it means the
  +following: The mail in question is piped into the ``CheckPostin''
  +script. The script or program can perform various tests and when it
  +exists, the action part is executed depending on the return code the
  +script exited with. A return code of zero (0) means ``true'' and the
  +action will be executed. A return code of one (1) ``false'' and the
  +action will not be executed.
  +
  +Any other return code will cause Petidomo to abort with an error and
  +to save the mail. By using this mechanism, you can program even the
  +most sophisticated tests and hook them into the access control
  +mechanism.
  +
  +Another feature that hasn't been described yet is the action
  +``filter''. The filter-action is pretty much the same as the posting
  +filter, but it allows you to re-write the posting depending on who
  +posted it or other criteria. Please note that this filter is executed
  +additionally to a regular posting filter you might have configured.
  +
  +A nice example for what this feature can be used is the following:
  +\begin{verbatim}
  +if (address == "simons@petidomo.com") then
  +       filter "/usr/local/petidomo/bin/simons.filter";
  +\end{verbatim}
  +
  +The script \file{simons.filter} would then look like this:
  +\begin{verbatim}
  +#! /bin/sh
  +
  +cat
  +echo
  +echo "-- "
  +echo " Hold your breath -- this is *the* Peter Simons!"
  +\end{verbatim}
  +
  +We resisted the temptation of adding this ACL statement into the
  +default configuration of Petidomo.
  +
  +% \chapter{Administrating Mailing Lists}
  +%
  +\chapter{Miscellaneous Topics}
  +\section{Using posting filters}
  +\label{using posting filters}
  +
  +The posting filter functionality of Petidomo is a very useful
  +mechanism for you, if you run mailing lists where you want to
  +guarantee certain formal criteria, because you can hook a script or
  +program of your into the posting process and use it to re-format or
  +re-write the article that is going to be posted.
  +
  +We have included one
  +script into the distribution,
  +\file{\~{}peti\-domo/bin/Insert\-Name\-In\-Sub\-ject.sh}, which adds a string
  +into the subject line of every posting. The script is pretty short and
  +used sed(1) to perform its function.
  +
  +To use it, just add the line
  +\begin{verbatim}
  +PostingFilter     ~petidomo/bin/InsertNameInSubject.sh listname
  +\end{verbatim}
  +with ``listname'' being the name of the mailing list.
  +
  +If the mailing list name was ``testlist'', for example, then this
  +posting filter would re-write the subject line
  +\begin{verbatim}
  +Subject: Hi everbody
  +\end{verbatim}
  +to
  +\begin{verbatim}
  +Subject: [testlist] Hi everbody
  +\end{verbatim}
  +
  +It is recommended to take a look at the script itself to understand
  +how this works. You will need a bit of knowledge of the Unix scripting
  +language and tools like sed(1) to program more complex posting filter,
  +we're afraid.
  +
  +As the last point it should be made clear, that the string you specify
  +as a filter is interpreted by the bourne shell for execution. It is
  +thus absolutely possible, to use a posting filter like that
  +\begin{verbatim}
  +PostingFilter "/bin/cat | /bin/cat ; echo ; echo testing"
  +\end{verbatim}
  +even though one might argue whether this particular example is a
  +useful thing. Anyway, you know what we wanted to demonstrate.
  +
  +\section{PGP-encrypted mailing lists}
  +
  +Another very useful feature of the posting filter and the access
  +control languange is the ability to maintain \Def{encrypted mailing
  +lists}. The idea is very simple: You create a PGP key pair for your
  +mailing list and spread the public key among the subscribers of your
  +mailing list. In turn you collect their public keys and store them on
  +the mailing list server.
  +
  +Whenever a subscriber wants to post an article to the mailing list, he
  +will encrypt it with the public key of the list server before
  +transferring it through the Internet. Petidomo will then receive the
  +mail, decrypt and process it and encrypt it again, with the public
  +keys of the subscribers. Once encrypted again, the mail is distributed
  +to the readers.
  +
  +Please note that at no time the mail was sent through the Internet in
  +clear text. Hence this mode is well-suited for maintaining internal
  +discussion lists for, say, software development among a few people who
  +know each other but live spread throughout the world. Included in the
  +distribution are two scripts, \file{pgp-encrypt.sh} and
  +\file{pgp-decrypt.sh}, which realize this. The setup needs a bit of
  +work, but once you understand the principle, it is rather easy. Just
  +follow the steps described below.
  +
  +\begin{enumerate}
  +
  +\item Get the PGP software package from `http://www.pgpi.com/', you
  +will need the PGP 2.6.2 version or later --- 5.x won't work, as far as
  +I know, maybe someone wants to adapt the PGP-mechanism to PGP 5.x, any
  +volunteers are welcome, and install it.
  +
  +\item Log in as user ``petidomo''.
  +
  +\item Create a directory \file{\~{}petidomo/.pgp} and set the {\tt
  +\$PGPPATH} variable to it.
  +
  +\item Create a PGP key pair by calling `pgp -kg''. As user-id enter
  +the address of the mailing list itself, for example: ``The secret
  +mailing list $<$secretlist@petidomo.com$>$''.
  +
  +\item Create a \file{config.txt} file for PGP in
  +\file{\~{}petidomo/.pgp} and insert the appropriate user id there.
  +
  +\item Distribute the newly created PGP key of the mailing list among
  +the subscribers.
  +
  +\item Add the PGP keys of the subscribers to Petidomo's keyring.
  +
  +\item Edit the following definitions in
  +\file{\~{}petidomo/bin/pgp-encrypt.sh}:
  +
  +\begin{verbatim}
  +#
  +# Please customize these things for your system.
  +#
  +PGP=/usr/local/bin/pgp
  +PASSWORD="DecryptMe"
  +PGPPATH=$PDHOME/.pgp
  +\end{verbatim}
  +
  +You will need to change the location of the PGP binary and insert the
  +password you chose for the secret key. For security reasons, the
  +script itself should be owned by ``petidomo'' as user- and group id,
  +and it should have the permission ``110'', so that only Petidomo can
  +execute it.
  +
  +\item Edit the equivalent definitions in
  +\file{\~{}petidomo/bin/pgp-encrypt.sh}.
  +
  +\item Now create the mailing list in question. In our example that
  +would be ``secretlist''. Naturally the mailing list should not be open
  +for public subscription.
  +
  +\item Edit the ACL file of the ``secretlist'' to contain the following
  +line:
  +
  +\begin{verbatim}
  +if (body matches "^-----BEGIN PGP MESSAGE-----$") then
  +        filter "~petidomo/bin/pgp-decrypt.sh";
  +\end{verbatim}
  +
  +\item Edit the config file to have the following posting filter:
  +
  +\begin{verbatim}
  +PostingFilter   "~petidomo/bin/pgp-encrypt.sh secretlist"
  +\end{verbatim}
  +
  +Please note that you must provide the name of the mailing list on the
  +command line as parameter to \file{pgp-encrypt.sh}, so that it know
  +which list file it should take the subscriber addresses from.
  +
  +\item Do a test posting and that's it.
  +
  +\end{enumerate}
  +
  +There are a few things you should take care of: First of all, you must
  +make sure that you have the PGP public keys of all subscribers in the
  +keyring belonging to the ``petidomo'' user, or some of them won't be
  +able to decipher the mail posted via the list. You must also take care
  +that the addresses these people are subscribed under, are actually
  +listed in their public key, or PGP won't be able to recognize who is
  +who, when being called by \file{pgp-encrypt.sh}.
  +
  +Finally, make sure that you do this only with the correct versions of
  +the software. Petidomo needs to be version 2.1 or later, earlier
  +versions won't work. The PGP binary needs to understand the {\tt -@}
  +operator on the command line, which has been added in PGP 2.6i at some
  +time.
  +
  +One last hint: If PGP-encryption or decryption doesn't work, it will
  +usually help to remove the {\tt \$LOGFILE} parameter from the {\tt
  +trap} command in the scripts:
  +
  +\begin{verbatim}
  +trap 'rm -f $TMPFILE $HEADER $BODY $NEWBODY $LOGFILE; exit'...
  +                                            ^^^^^^^^
  +\end{verbatim}
  +
  +As a result, the script won't delete the output PGP issued when called
  +after exiting. Thus you will find the file still lying in \file{/tmp}
  +and can easily investigate what's wrong.
  +
  +\section{Virtual hosting and sendmail}
  +\label{virtual hosting and sendmail}
  +
  +A very useful things is Petidomo's virtual hosting feature.
  +Unfortunately, there are a few traps into which you might run when you
  +are trying to use it together with the Allmann sendmail. But we'll
  +start at the beginning.
  +
  +If you host mailing lists for domains other than your own, you can
  +tell Petidomo to use this name instead of the local one for certain
  +mailing lists in the list config file by setting the appropriate
  +``HostName''. Now all mail posted to this list, or sent to the
  +``-request'' address of the list, will appear to be coming from the
  +domain name you configured, rather than your own.
  +
  +When you are using sendmail v8, you will have to write these names to
  +the \$w\$ class in your sendmail.cf file, or the corresponfing M4
  +config. This is done by adding the line
  +\begin{verbatim}
  +Cwdomain.name1 domain.name2 ...
  +\end{verbatim}
  +to the file.
  +
  +This will tell sendmail that these names are to be accepted and
  +delivered locally rather than to the MX of these entries.
  +
  +Doing this might deliver a surprise, though, if you are using
  +sendmail's masquerading abilities to hide the various hostname of your
  +domain. Per default, sendmail masquerades not only the domain names
  +you told him with the MASQUERADE\_DOMAIN() command, it automatically
  +masquerades all domain names of the \$w\$ class, too.
  +
  +The result is that Petidomo's fine virtual hosting is gone
  +immediately, because sendmail will re-write the name to your own
  +domain name. The fix for this is rather easy: Add the command
  +``FEATURE(limited\_masquerade)'' to your M4 file and sendmail won't
  +touch the names that are stated only in the \$w\$ class.
  +
  +\section{Mailing list archives}
  +\label{mailing list archives}
  +
  +If your are hosting a public mailing list, you might want to offer a
  +mailing list archive, that is accessible through the WWW and has all
  +the postings available for immediate access. We were in the midst of
  +developing a tool that does this for you when we came accross a
  +brilliant tool named ``MHonArc''. We installed it, tested it, and
  +deleted all attempts of writing something like that ourselves
  +immediately.
  +
  +We strongly recommend looking at MHonArc, if you want to offer a WWW
  +archive of your mailing lists. You can find more information about
  +MHonArc at the following location:
  +`http://www.oac.uci.edu/indiv/ehood/mhonarc.html'
  +
  +The installation of the tool itself is very easy. Once you have
  +MHonArc running, just enable the archiving feature in Petidomo and
  +feed the archives into MHonArc. That's it.
  +
  +\section{Verifying the address lists}
  +
  +Petidomo tries its best to make sure that only syntactically correct
  +addresses are subscribed to mailing lists, and if you stick to the
  +listserv interface, there's very little chance, an incorrect address
  +will make it into the \file{list} file.
  +
  +Sometimes, it is necessary to edit these files manually, though, or
  +Petidomo's address validation algorithm fails. Once you have an
  +incorrect address in your list file, sendmail will abort with an
  +error, without trying to deliver the mail at all.
  +
  +To clarify, this does not happen when an address is not reachable,
  +this happens only when you subscribe something like {\tt
  +hey@this@is@wrong....}. Once you suspect that your address list has
  +been corrupted, there's an easy way to find out, which addresses are
  +wrong. Simply use sendmail's address verification mode like this:
  +
  +\begin{verbatim}
  + $ xargs <list sendmail -bv | sed -e '/deliverable/d'
  + > @bogus.address.here... user address required
  +\end{verbatim}
  +
  +This call will find all incorrect address and notify you. The 'sed'
  +call will filter out all correct addresses for your convenience.
  +
  +\end{document}

From ossp-cvs-owner@ossp.org  Sat Feb 17 22:59:18 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f1HLxHv72641; Sat, 17 Feb 2001 22:59:17 +0100 (CET)
Date: Sat, 17 Feb 2001 22:59:17 +0100 (CET)
Message-Id: <200102172159.f1HLxHv72641@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/petidomo main.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   17-Feb-2001 22:59:17
  Branch: HEAD                             Handle: 2001021721591700

  Modified files:
    ossp-pkg/petidomo       main.c

  Log:
    Added check whether the required listname parameter is there _before_
    we try and read the mail from standard input.

  Summary:
    Revision    Changes     Path
    1.20        +18 -10     ossp-pkg/petidomo/main.c
  ____________________________________________________________________________

  Index: ossp-pkg/petidomo/main.c
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 main.c
  --- ossp-pkg/petidomo/main.c	2001/01/21 12:00:35	1.19
  +++ ossp-pkg/petidomo/main.c	2001/02/17 21:59:17	1.20
  @@ -1,6 +1,6 @@
   /*
      $Source: /e/ossp/cvs/ossp-pkg/petidomo/main.c,v $
  -   $Revision: 1.19 $
  +   $Revision: 1.20 $
   
      Copyright (C) 2000 by CyberSolutions GmbH, Germany.
   
  @@ -90,24 +90,32 @@
       argv_version_string = (char *)petidomo_version.v_gnu;
       argv_process(args, argc, argv);
   
  +    /* Make sure we got all required parameters. */
  +
  +    if ((!strcasecmp(mode, "deliver") || !strcasecmp(mode, "dump")) && listname == NULL)
  +	{
  +	fprintf(stderr, "petidomo: %s mode requires a list name argument\n", mode);
  +	exit(1);
  +        }
  +
       /* Member Dump Mode */
  -    if (strcasecmp(mode, "dump") == 0) {
  +
  +    if (strcasecmp(mode, "dump") == 0)
  +	{
           char *cp;
           const struct List_Config *ListConfig;
  -        if (listname == NULL) {
  -            fprintf(stderr, "petidomo: dump mode requires a list name argument\n");
  -            exit(1);
  -        }
  -        if (InitPetidomo(masterconfig_path) != 0) {
  +        if (InitPetidomo(masterconfig_path) != 0)
  +	    {
               fprintf(stderr, "petidomo: failed load master configuration.\n");
               exit(1);
  -        }
  +	    }
           MasterConfig = getMasterConfig();
           ListConfig = getListConfig(listname);
  -        if ((cp = loadfile(ListConfig->address_file)) == NULL) {
  +        if ((cp = loadfile(ListConfig->address_file)) == NULL)
  +	    {
               fprintf(stderr, "petidomo: failed to open file \"%s\"\n", ListConfig->address_file);
               exit(1);
  -        }
  +	    }
           fwrite(cp, strlen(cp), 1, stdout);
           free(cp);
           exit(0);

From ossp-cvs-owner@ossp.org  Sun Feb 18 00:06:07 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f1HN66H77612; Sun, 18 Feb 2001 00:06:06 +0100 (CET)
Date: Sun, 18 Feb 2001 00:06:06 +0100 (CET)
Message-Id: <200102172306.f1HN66H77612@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/petidomo/docs petidomo.tex
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   18-Feb-2001 00:06:06
  Branch: HEAD                             Handle: 2001021723060500

  Modified files:
    ossp-pkg/petidomo/docs  petidomo.tex

  Log:
    - Updated the ACL chapter.
    - Removed all references to ~petidomo.
    - Documented the missing options.
    - Updated the chapter about aliases.
    - Updated the chapter about command line syntax.

  Summary:
    Revision    Changes     Path
    1.6         +315 -135   ossp-pkg/petidomo/docs/petidomo.tex
  ____________________________________________________________________________

  Index: ossp-pkg/petidomo/docs/petidomo.tex
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 petidomo.tex
  --- ossp-pkg/petidomo/docs/petidomo.tex	2001/02/17 21:46:46	1.5
  +++ ossp-pkg/petidomo/docs/petidomo.tex	2001/02/17 23:06:05	1.6
  @@ -2,7 +2,7 @@
   %
   % Petidomo Manual
   %
  -% $Header: /e/ossp/cvs/ossp-pkg/petidomo/docs/petidomo.tex,v 1.5 2001/02/17 21:46:46 simons Exp $
  +% $Header: /e/ossp/cvs/ossp-pkg/petidomo/docs/petidomo.tex,v 1.6 2001/02/17 23:06:05 simons Exp $
   %
   \typearea[2cm]{12}
   \usepackage{lastpage}
  @@ -503,24 +503,30 @@
   
   All configuration files in the Petidomo-package\label{Config file
   format}, have the following format:
  +\begin{quote}
   \begin{verbatim}
   keyword         parameter
   \end{verbatim}
  +\end{quote}
   
   The ``keyword''-part must start at the first column of the line and is
   followed by one or several blanks or tabs. The first non-blank
   character then is interpreted as the parameter for this keyword. The
   following line, for example:
  +\begin{quote}
   \begin{verbatim}
   Hostname        petidomo.is.great
   \end{verbatim}
  +\end{quote}
   will tell Petidomo that the name of the machine it is running on is
   called ``petidomo.is.great''. If the parameter contains any blanks,
   what is not very likely for a hostname, but may happen with other
   settings, you should enclose it in double quotes, like this:
  +\begin{quote}
   \begin{verbatim}
   AdminPassword   "open sesame"
   \end{verbatim}
  +\end{quote}
   
   Quoting the parameter is not strictly necessary, though, Petidomo's
   config file parser will get it right anyway. You only have to quote
  @@ -534,9 +540,7 @@
   \section{The Master Configuration File}
   \label{master config file}
   
  -Petidomo expects its master config file to be found under
  -\file{\~{}peti\-do\-mo/etc/pe\-ti\-domo.conf}. The following keywords are
  -recognized:
  +The following keywords are recognized in the master config file.
   
   \begin{description}
   
  @@ -546,9 +550,11 @@
   Petidomo is running on. A fully qualified domain name is the
   hostname of the machine with the domain name appended with a dot. The
   following, for example:
  +\begin{quote}
   \begin{verbatim}
   HostName        listserver.foo.bar
   \end{verbatim}
  +\end{quote}
   would be a valid statement. Normally this option has been set by the
   install script correctly already.
   
  @@ -565,9 +571,11 @@
   
   This tag sets the master password, which authenticiates the Petidmo
   administrator. Here is an example:
  +\begin{quote}
   \begin{verbatim}
   AdminPassword   "open sesame"
   \end{verbatim}
  +\end{quote}
   Normally this option has been set by the install script already.
   
   Please chose this password carefully. Knowledge of the master password
  @@ -589,9 +597,11 @@
   install script already, so you don't need to worry about this anymore.
   
   An example setting is:
  +\begin{quote}
   \begin{verbatim}
   MTA     "/usr/sbin/sendmail"
   \end{verbatim}
  +\end{quote}
   but Petidomo will run fine with other mail transport agents, too. So
   far, the system has been tested with the Allman sendmail, SMail and
   qmail without any problems.
  @@ -608,9 +618,11 @@
   
   This entry sets the options which will be handed over to the MTA
   when it is called. The following example
  +\begin{quote}
   \begin{verbatim}
   MTAOptions "-odq -i -f%s"
   \end{verbatim}
  +\end{quote}
   will yield a call ``$<$MTA$>$ -odq -i -f$<$envelope$>$''. The `\%s' is
   replaced with the envelope the mail should be sent under.
   
  @@ -788,9 +800,11 @@
   
   So all the mailing list guru from Inter.Net has to do is to set the
   entry
  +\begin{quote}
   \begin{verbatim}
   Hostname        petiware.com
   \end{verbatim}
  +\end{quote}
   in the config file of the ``customers'' mailing list. Petidomo will
   now use the hostname ``peti\-ware.com'' in all mails that are posted
   to that list, instead of ``mail.inter.net''.
  @@ -835,9 +849,11 @@
   option, you can force Petidomo to insert a `Reply-To:' which points
   to a certain address. On a moderated list, for example, you can set
   this as follows:
  +\begin{quote}
   \begin{verbatim}
   ReplyTo         moderator@address.net
   \end{verbatim}
  +\end{quote}
   to direct all replies to the posting to the moderator again,
   regardless of what address is noted in the `From:' line of the mail.
   
  @@ -860,9 +876,11 @@
   
   An example for a postin filter that wouldn't modify the mail at all is
   the following:
  +\begin{quote}
   \begin{verbatim}
   PostingFilter   /bin/cat
   \end{verbatim}
  +\end{quote}
   
   A detailed discussion of posting filters can be found in
   section~\ref{using posting filters} of the manual.
  @@ -995,80 +1013,143 @@
   
   \section{Command Line Syntax}
   
  +Petidomo understans several command line parameters. Here is the
  +complete list:
  +
  +\begin{description}
  +
  +\item[{-}-mode={\sf mode}] \hfill ``listserv'', ``deliver'', ``approve'', or ``dump''
  +
  +The mode parameter is the only mandatory parameter and it will
  +determine what mode Petidomo runs in. Anyway, if Petidomo is started
  +in ``listserv'' mode, it will expect to read an e-mail from standard
  +input, which contains commands like ``subscribe'', ``index'' or
  +``help''. These commands will be carried out and notifications be sent
  +back to the mail's originator if apropriate.
  +
  +In ``deliver'' mode, Petidomo will read the incoming e-mail from
  +standard input and post it to the mailing list, which's name has been
  +provided via the ``listname'' option. When running in ``approve''
  +mode, Petidomo will read the incoming mail from standard input and
  +search for any cookies that mail might contain. If it does, it checks
  +the ack-queue for a mail that has been deferred until confirmation
  +that matches that cookie and processes the mail.
  +
  +In ``dump'' mode, Petidomo will expect the name of a mailing list on
  +the command line --- the ``listname'' option --- and dump the list of
  +subscribed addresses on that list to standart output.
  +
  +\item[{-}-listname={\sf list name}]
  +
  +This parameter may contain any valid mailing list name. Depending on
  +the mode, it this list name will be used as follows. In ``listserv''
  +mode, that list will be used as default list name for any command
  +where no list name has been specified. A ``subscribe'', for example''
  +will subscribe the user to the list given here; a ``subscribe
  +some-other-name'' will still subscribe the user to that other list,
  +though.
  +
  +When running in ``deliver'' mode, this is the name of the list the
  +posting is supposed to be posted to. In ``dump'' mode, this is the
  +name of the list, which's subscriber list should be dumped. In
  +``approve'' mode, this parameter is ignored.
  +
  +\item[{-}-masterconf={\sf /path/to/petidomo.conf}]
  +
  +Using this parameter you can tell Petidomo to use a different location
  +for the master config file than the one that has been compiled in.
  +
  +\item[{-}-approved]
  +
  +This flag is for internal purposes and should not be specified by the
  +administrator. It will tell Petidomo that, whatever it is supposed to
  +do now, is the result of a received confirmation cookie. This will
  +effectively tell the checks for posting (in ListType ``acknowledged''
  +and ``acknowledged-once'' mode) and un-/subscription (in
  +SubscriptionType ``acknowledged'' mode) that everything is fine and
  +that the request should be carried out.
  +
  +\end{description}
  +
  +
   \section{Aliases}
   \label{aliases}
   
  -The binaries of the Petidomo package are usually not called manually
  -from the shell, but by the mail transport agent. This works as
  -follows: You create an e-mail account, which serves the purpose of
  -accepting the incoming e-mail and piping it into the appropriate
  -binary.
  +The Petidomo binary will usually not be called manually from the
  +shell, but by the mail transport agent. This works as follows: You
  +create an e-mail account, which serves the purpose of accepting the
  +incoming e-mail and piping it into the Petidomo binary.
   
   This is archieved with the ``alias''-function of your mail transport
   agent. Most MTAs, like sendmail, have a file where a list of special
   account names is given together with the instructions what to do with
  -any mail received for that account. This file is usually located in
  -\file{/etc/aliases}.
  +any mail received for that account. This file is usually located at
  +\file{/etc/aliases} or \file{/etc/mail/aliases}.
   
  -One thing, aliases can do is to pipe the mail into a program for
  -processing. This is the mechanism Petidomo uses. Petidomo requires
  -you to add the following aliases to your system:
  +One thing, aliases can do is pipe the mail into a program for
  +processing. This is the mechanism Petidomo uses. Petidomo requires you
  +to add the following aliases to your system:
  +\begin{quote}
   \begin{verbatim}
   #
   # Mailing List Stuff
   #
  -petidomo-manager: root
  -petidomo: "|/usr/local/petidomo/bin/listserv"
  +petidomo-manager:   postmaster
  +petidomo:           "|/usr/local/bin/petidomo --mode=listserv"
  +petidomo-approve:   "|/usr/local/bin/petidomo --mode=approve"
   \end{verbatim}
  +\end{quote}
   
   The lines starting with the `\#' character are only comments and are
   ignored by the mail transport agent. The fourth line, though, is the
   first command. It tells the MTA to accept mail for an user of the name
  -``petidomo-manager'' and to re-direct the e-mail to an user of the
  -name ``root'' --- the system administrator.
  +``petidomo-manager'' and to re-direct the e-mail to the address
  +``postmaster'' --- the mail system administrator.
   
  -Petidomo will send notifications of an error and administrative
  -things like that to the address ``petidomo-manager''. By setting this
  -alias to a certain user name, you can control who will receive those
  -mails.
  -
  -The next line now tells the MTA to pipe any incoming mail for the user
  -``petidomo'' into the ``listserv'' program, instead of delivering it
  -into a mailbox. ``listserv'' will then parse the mail for commands and
  -react accordingly. Hence, the address people can send their
  -subscription requests to is ``petidomo@your.host.name''.
  -
  -These aliases have been created by the install script, unless you told
  -it not to, and you don't need to worry about them.
  -
  -\bigskip
  -
  -Furthermore, each mailing list on your server requires three aliases,
  -as shown in the example below, which is written for the ``testlist''
  -mailing list that comes with the distribution:
  -\begin{verbatim}
  -testlist: "|/usr/local/petidomo/bin/hermes testlist"
  -testlist-request: "|/usr/local/petidomo/bin/listserv testlist"
  -testlist-owner: petidomo-manager
  +Petidomo will send error notifications and things like that to the
  +address ``petidomo-manager''. By setting this alias to a certain user
  +name, you can control who will receive those mails.
  +
  +The next line tells the MTA to pipe any incoming mail for the user
  +``petidomo'' into the ``petidomo'' program, instead of delivering it
  +into a mailbox. ``petidomo'' (in listserv mode) will then parse the
  +mail for commands and react accordingly. Hence, the address people can
  +send their subscription requests to is ``petidomo@your.host.name''.
  +
  +Similarly, the address ``petidomo-approve'' will be used to receive
  +any acknowledges user send back after Petidomo requested them. Only
  +now, Petidomo is started in ``approve'' mode.
  +
  +Furthermore, each mailing list on your server \emph{requires} three
  +aliases, as shown in the example below, which is written for the
  +``testlist'' mailing list that comes with the distribution:
  +\begin{quote}
  +\begin{verbatim}
  +testlist:           "|/usr/local/bin/petidomo --mode=deliver testlist"
  +testlist-request:   "|/usr/local/bin/petidomo --mode=listserv testlist"
  +testlist-owner:     petidomo-manager
   \end{verbatim}
  +\end{quote}
   
   The first alias, ``testlist'' is the address to which people can send
   their mail in order to post to the mailing list. Any incoming mail for
  -that account will be piped into the ``hermes'' binary, which will
  -process the mail and then re-send it to all subscribers of the mailing
  -list. In order to let ``hermes'' know, for which mailing list the
  -posting was meant, the parameter ``testlist'' has to be specified on
  -the command line. If the name of the mailing list was ``foobar'', the
  -line would look like this:
  +that account will be piped into the ``petidomo'' binary in ``deliver''
  +mode, which will process the mail and then re-send it to all
  +subscribers of the mailing list. In order to let Petidomo know, for
  +which mailing list the posting was meant, the parameter ``testlist''
  +has to be specified on the command line. If the name of the mailing
  +list was ``foobar'', the line would look like this:
  +\begin{quote}
   \begin{verbatim}
  -foobar: "|/usr/local/petidomo/bin/hermes foobar"
  +foobar:             "|/usr/local/bin/petidomo --mode=deliver foobar"
   \end{verbatim}
  +\end{quote}
   
   The second alias is a special request address, to which users can send
   their commands. The difference between this address and the
  -``petidomo'' alias described above is that ``listserv'' is being given
  -a default listname on the command line. The difference is this: If
  -``listserv'' receives a mail, which has the command ``subscribe'' in
  +``petidomo'' alias described above is that here Petidomo is being
  +given a default listname on the command line. The difference is this:
  +If Petidomo receives a mail, which has the command ``subscribe'' in
   it, without any further parameters, it will reject the command with an
   error, because it doesn't know to which list the sender wants to be
   added.
  @@ -1080,8 +1161,8 @@
   
   The name of this alias should always be the name of the mailing list
   with the string ``-request'' appended. Theoretically you could choose
  -a different name, but this unwritten standard is wide accepted
  -throghout the Internet for several years now.
  +a different name, but this unwritten standard has been widely accepted
  +in the Internet for several years now.
   
   The last alias is the name of the mailing list with the string
   ``-owner'' appended. This alias points to the person who is
  @@ -1094,31 +1175,22 @@
   \chapter{Petidomo for Mailing List Users}
   \label{petidomo as user}
   
  -In this chapter, we will describe the commands, that are
  -understood by the ``listserv'' program. ``listserv'' is the interface
  -for the users of the mailing lists, where they can send their requests
  -to in order to be subscribed to a mailing list, be unsubscribed again
  -and similar things. The text here is mostly identical with the
  -default help text that is sent to the user
  -whenever he or she issues a command that is syntactically incorrect.
  -This text is stored in the file
  -\file{\~{}petidomo/etc/help} and can be
  -customized to fit the requirements of your site.
  +In this chapter, we will describe the commands, that are understood in
  +``listserv'' mode. This is the interface for the users of the mailing
  +lists, where they can send their requests to in order to be subscribed
  +to a mailing list, be unsubscribed again and similar things. The text
  +here is mostly identical with the default help text that is sent to
  +the user whenever he or she issues a command that is syntactically
  +incorrect.
   
   User commands always have to be sent to the request address of
  -the mailing list --- \emph{not} to the mailing list itself. Petidomo
  -will try to recognize commands that are sent to the mailing list and
  -redirect them to the ``listserv'' program, but naturally this will not
  -work in all cases. The address, where requests should be directed to,
  -is \emph{always} the address of the mailing list with the string
  -``-request'' appended to the username. If the mailing list is called
  -``politics@foo.bar'', the appropriate request address is
  -``politics-requst@foo.bar''.
  +the mailing list --- \emph{not} to the mailing list itself!
   
   Alternatively, commands can always be sent to the address
  -``peti\-do\-mo@your.ad\-dress'', but the ``-request''-address is preferable,
  -for the fact that the ``listserv'' will have a default listname for
  -this address and thus understand a simpler command syntax.
  +``peti\-do\-mo@your.ad\-dress'', but the ``-request''-address is
  +preferable, for the fact that the Petidomo will have a default
  +listname for this address and thus understand a simpler command
  +syntax.
   
   \section{SUBSCRIBE}
   
  @@ -1128,16 +1200,20 @@
   sent to the ``petidomo'' address, the user will have to specify an
   additional parameter: The name of the mailing list he or she wants to
   be added to, like in the following example:
  +\begin{quote}
   \begin{verbatim}
   subscribe politics
   \end{verbatim}
  +\end{quote}
   
   If the user wants to add an address that is not equal to the one he or
   she is sending the e-mail from, the e-mail address will have to be
   specified, too:
  +\begin{quote}
   \begin{verbatim}
   subscribe politics joe@foo.bar
   \end{verbatim}
  +\end{quote}
   
   The order in which the e-mail address and the mailing list name are
   provided does not matter. Please note that the administrator can
  @@ -1166,11 +1242,11 @@
   
   \section{HELP}
   
  -If the server receives the command ``help'', it will send the file
  -\file{\~{}peti\-domo/etc/help} back. If ``help'' has a parameter,
  -Petidomo will check whether this is a valid name of an existing
  -mailing list, and if it is, it will return the description file for
  -this mailing list, rather than the help-file.
  +If the server receives the command ``help'', it will send the help
  +file back. If ``help'' has a parameter, Petidomo will check whether
  +this is a valid name of an existing mailing list, and if it is, it
  +will return the description file for this mailing list, rather than
  +the help file.
   
   \section{MEMBERS}
   
  @@ -1180,9 +1256,11 @@
   will be used by Petidomo. Otherwise, the name of the mailing list
   which's subscribers should be listed, has to be specified as an option
   like in the following example:
  +\begin{quote}
   \begin{verbatim}
   members politics
   \end{verbatim}
  +\end{quote}
   
   The command ``who'' can be used synonymously to ``members''.
   
  @@ -1260,10 +1338,10 @@
   appropriate password. They are all the same for Petidomo and it is
   only a matter of taste, which scheme you use.
   
  -When sending a command to the ``listserv'' program, though the
  -``-request'' or ``petidomo''-address, it is easy. Just preface your
  -commands with a ``password'' command, like in the
  -following example:
  +When sending a command to Petidomo in ``listserv'' mode through the
  +``-request'' or ``petidomo''-address, it is easy: Just preface your
  +commands with a ``password'' command, like in the following example.
  +\begin{quote}
   \begin{verbatim}
   To: testlist-request@foo.bar
   Subject:
  @@ -1272,11 +1350,13 @@
   subscribe some@one.else
   subscribe someone@even.elser
   \end{verbatim}
  +\end{quote}
   
   One ``password'' command sets your password for all the commands to
   follow. If you want to use one mail to send requests for several
   mailing lists with different passwords, just give a ``password''
   command again:
  +\begin{quote}
   \begin{verbatim}
   To: petidomo@foo.bar
   Subject:
  @@ -1286,6 +1366,7 @@
   password let me in
   subscribe user@inter.net testlist2
   \end{verbatim}
  +\end{quote}
   
   Instead of ``password'', you can also use the commands ``passwd'', or
   ``approve'', they are all synonymous.
  @@ -1301,6 +1382,7 @@
   will strip that line before actually posting the article then. You can
   also use the synonyms ``approved'', ``password'' or ``passwd''
   instead. Here is an example:
  +\begin{quote}
   \begin{verbatim}
   From: simons@petidomo.com (Peter Simons)
   Subject: Cats are the most beautiful animals in the world.
  @@ -1310,6 +1392,7 @@
   or fishes, but for me, a cat is *the* animal to have.
   [...]
   \end{verbatim}
  +\end{quote}
   
   The line ``approve let me post'' will be stripped by Petidomo and
   then the article will be sent out.
  @@ -1319,6 +1402,7 @@
   (Unfortunately, many mail readers do not allow you to modify the
   headers of outgoing mail. That is why the body-approval has been
   added.) Here is the same example as above now using the headers:
  +\begin{quote}
   \begin{verbatim}
   From: simons@petidomo.com (Peter Simons)
   Subject: Cats are the most beautiful animals in the world.
  @@ -1328,12 +1412,13 @@
   or fishes, but for me, a cat is *the* animal to have.
   [...]
   \end{verbatim}
  +\end{quote}
   
   Please note that you have to add a colon to the keyword to make a
   valid RFC mail-header.
   
   
  -\chapter{The Access Control Language}
  +\section{The Access Control Language}
   \label{acl}
   
   Unfortunately, we live in a world where some people are trying to
  @@ -1354,26 +1439,24 @@
   sons.
   
   In Petidomo, two places exist to control who is allowed to do what:
  -The global acl file
  -\file{\~{}petidomo/etc/acl} and the acl
  -file that is local to the mailing list:
  -\file{\~{}petidomo/lists/list\-name/acl}. While the latter is valid only
  -for the list in which's home directory it is stored, the globl acl
  -file will be parsed for \emph{all} your mailing lists. ACL files are
  -only relevant for mailing list postings, the ``listserv'' program does
  -not use them.
  +The global acl file and the acl file that is local to the mailing
  +list. While the latter is valid only for the list in which's home
  +directory it is stored, the globl acl file will be parsed for
  +\emph{all} your mailing lists. ACL files are only relevant for mailing
  +list postings, Petidomo does not use them in ``listserv'' mode.
   
   The syntax of an ACL file is similar to the C programming
   language, as you can see in the following example:
  +\begin{quote}
   \begin{verbatim}
   if (envelope matches "mailer-daemon@") then
           forward "petidomo-manager";
   \end{verbatim}
  +\end{quote}
   
   This is a simple version of the default ACL file which comes with the
  -Petidomo distribution and is installed in
  -\file{\~{}petidomo/etc/acl}. It tells hermes to forward all postings
  -to a mailing list, where the envelope of the mail matches the regular
  +Petidomo distribution. It tells Petidomo to forward all postings to a
  +mailing list, where the envelope of the mail matches the regular
   expression ``mailer-daemon@''. This rule is included in the default
   distribution to make sure that bounces of articles will not be posted
   to the list again, thus causing an infinite mail loop. The syntax of
  @@ -1389,17 +1472,64 @@
      &   & body     &       &                & &     & redirect   & {\tt "}address{\tt "} & \\
      &   &      &       &                &   &      & forward    & {\tt "}address{\tt "} & \\
      &   &      &       &                &   &      & filter     & {\tt "}script{\tt "} & \\
  +   &   &      &       &                &   &      & approve     &  & \\
   IF & ( &  & {\tt "}filter{\tt "} &  & ) & THEN &  & & ; \\
   \end{tabular}
  -\caption{The Access Control Language syntax.}
  +\caption{Access Control Language syntax}
   \label{acl syntax}
   \end{center}
   \end{figure}
   
   Admittedly, the figure is rather impossible to understand without
   further explaination, don't worry if things are still a bit unclear
  -after looking at it.
  +after looking at it. There is also an EBNF grammar of the ACL to be
  +found in figure~\ref{ebnf}, which might help those who can read BNF
  +much more than the other figure.
   
  +\begin{figure}[bth]
  +\begin{quote}
  +\begin{verbatim}
  +input:     /* empty */
  +         | input statmt
  +         ;
  +
  +statmt:    `;'
  +         | `if' exp `then' action `;'
  +         ;
  +
  +exp:       qualifier `=' string
  +         | qualifier `match' string
  +         | string
  +         | exp `or' exp
  +         | exp `and' exp
  +         | `!' exp
  +         | `(' exp `)'
  +         ;
  +
  +qualifier: `from'
  +         | `subject'
  +         | `envelope'
  +         | `header'
  +         | `body'
  +         ;
  +
  +action:    `pass'
  +         | `drop'
  +         | `approve'
  +         | `reject'
  +         | `rejectwith' string
  +         | `redirect'   string
  +         | `forward'    string
  +         | `filter'     string
  +         ;
  +
  +string:    `"' [^"]* `"'
  +\end{verbatim}
  +\end{quote}
  +\caption{EBNF of the Access Control Language}
  +\label{ebnf}
  +\end{figure}
  +
   Every ACL statement looks like this: ``IF condition THEN action ;''.
   The condition may or may not be enclosed in brackets. Several
   conditions can be combined with the keywords ``OR'' and ``AND''.
  @@ -1411,24 +1541,30 @@
   ``spam@spam.net'', because these people have constantly been abusing
   your mailing list service. This can be done with the following two
   statements:
  +\begin{quote}
   \begin{verbatim}
   IF from == "moron@moron.net" THEN reject;
   IF from == "spam@spam.net" THEN reject;
   \end{verbatim}
  +\end{quote}
   
   Using the ``OR'' statement you can combine this into one statement:
  +\begin{quote}
   \begin{verbatim}
   IF from == "moron@moron.net" OR
      from == "spam@spam.net" THEN
         reject;
   \end{verbatim}
  +\end{quote}
   
   And now we include brackets for readability:
  +\begin{quote}
   \begin{verbatim}
   IF (from == "moron@moron.net") OR
      (from == "spam@spam.net") THEN
         reject;
   \end{verbatim}
  +\end{quote}
   
   The keyword ``from'' stands for the address, noted in the ``From:''
   header line of the mail and, the ``== {\tt "}address{\tt "}'' means
  @@ -1468,31 +1604,37 @@
   ``forward'' (like ``redirect'' but preface the mail with a note
   telling why the mail was re-sent) or ``filter'' (pipe the mail into
   the specified filter script and post the mail as the filter writes it
  -to the standard output).
  +to the standard output). Furthermore, there is the ``approve'' action
  +that allows you to approve the posting, thus bypassing all other
  +checks.
   
   Here are a few more examples in the hope that they make this all
   easier to understand: Let's assume you would like to catch all
   postings to your mailing lists, that contain the words ``MAKE MONEY
   FAST'' in the subject. Then one way of doing this is the following
   statement:
  +\begin{quote}
   \begin{verbatim}
   IF (subejct matches "make money fast") THEN
  -      rejectwith "/usr/local/petidomo/etc/make-money-fast.txt";
  +      rejectwith "/usr/local/share/petidomo/make-money-fast.txt";
   \end{verbatim}
  -
  -The file \file{/usr/local/petidomo/etc/make-money-fast.txt} could, for
  -example, contain the following text:
  -\begin{quotation}
  +\end{quote}
  +The file \file{make-money-fast.txt} could, for example, contain the
  +following text:
  +\begin{quote}
  +\begin{verbatim}
   Dear poster,
   
  -your mail has been rejected. Please note that chain letters like the
  -``make money fast'' text you tried to post are illegal throughout the
  -world and your are likely to get in trouble if you continue to spread
  -them.
  -\end{quotation}
  +your mail has been rejected. Please note that chain letters
  +like the "make money fast" text you tried to post are
  +illegal throughout the world and your are likely to get in
  +trouble if you continue to spread them.
  +\end{verbatim}
  +\end{quote}
   
   If someone tried to post the chain letter to your mailing lists now,
   he would receive a mail like that:
  +\begin{quote}
   \begin{verbatim}
   Date: Sat, 28 Jun 1997 19:59:18 +0200 (MET DST)
   From: testlist-owner@peti.cys.de (Petidomo Mailing List Server)
  @@ -1504,10 +1646,10 @@
   
   Dear poster,
   
  -your mail has been rejected. Please note that chain
  -letters like the ``make money fast'' text you tried
  -to post are illegal throughout the world and your are
  -likely to get in trouble if you continue to spread them.
  +your mail has been rejected. Please note that chain letters
  +like the ``make money fast'' text you tried to post are
  +illegal throughout the world and your are likely to get in
  +trouble if you continue to spread them.
   
   >From simons  Sat Jun 28 19:59:17 1997
   Received: from [[UNIX: localhost]]
  @@ -1522,6 +1664,7 @@
   
   Hi, my name is David Rodes...
   \end{verbatim}
  +\end{quote}
   
   A few more words about how the ACL files are parsed:
   \begin{itemize}
  @@ -1531,10 +1674,13 @@
   expression match just fine.
   
   \item Any whitespace in the ACL file is ignored. The statements
  +\begin{quote}
   \begin{verbatim}
   if (envelope matches "mailer-daemon@") then drop;
   \end{verbatim}
  +\end{quote}
   and
  +\begin{quote}
   \begin{verbatim}
   if
       (envelope matches
  @@ -1543,13 +1689,16 @@
          drop
   ;
   \end{verbatim}
  -are the same for Petidomo.
  +\end{quote}
  +are the same to Petidomo.
   
   \item The argument after the ``=='' or ``matches'' keyword \emph{has}
   to be included in quotes. An ACL statement like this:
  +\begin{quote}
   \begin{verbatim}
   if from == simons@petidomo.com then drop;
   \end{verbatim}
  +\end{quote}
   will cause Petidomo to abort with an error, because it can't parse
   this.
   
  @@ -1557,32 +1706,40 @@
   ``rejectwith'' or ``forward'', this parameter has to be enclosed in
   quotes, too. A statement like this can also not be parsed by
   Petidomo:
  +\begin{quote}
   \begin{verbatim}
   if from == "simons@petidomo.com" then
           forward postmaster@petidomo.com;
   \end{verbatim}
  +\end{quote}
   
   \item Petidomo stops parsing the ACL file after the first statement
   has matched. If you want to reject all mails from an address that
   matches ``simons@.*\.de'', but you want mails from the address
   ``simons@rhein.de'' to pass nonetheless, the following two statements
   will not work as expected:
  +\begin{quote}
   \begin{verbatim}
   if from matches "simons@.*\.de" then reject;
   if from == "simons@rhein.de" then pass;
   \end{verbatim}
  +\end{quote}
   
   Instead you should use
  +\begin{quote}
   \begin{verbatim}
   if from == "simons@rhein.de" then pass;
   if from matches "simons@.*\.de" then reject;
   \end{verbatim}
  +\end{quote}
   or
  +\begin{quote}
   \begin{verbatim}
   if (from matches "simons@.*\.de") and
      (not (from == "simons@rhein.de")) then
            reject;
   \end{verbatim}
  +\end{quote}
   
   \item Currently you can't match for the double quote character ({\tt
   "}), we're afraid. The escape sequence {\tt \verb+\+"} is not
  @@ -1596,22 +1753,24 @@
   can't rely on the spammer to use a valid ``From:'' header and hence
   the ``from''-match is useless to catch them. But the following
   statement will usually get them nonetheless:
  +\begin{quote}
   \begin{verbatim}
   if (header matches "^Received:.*from spam.domain") then
        forward "petidomo-manager";
   \end{verbatim}
  -
  -\bigskip
  +\end{quote}
   
   If you thought, the Access Control Language is powerful so far, take a
  -look at the things you can do using filters. Rather than the syntax
  -described below, you can use the following statement:
  +look at the things you can do using filters. Rather than the examples
  +described above, you could use the following statement:
  +\begin{quote}
   \begin{verbatim}
  -if ("/usr/local/petidomo/bin/CheckPosting") then reject;
  +if ("/usr/local/libexec/petidomo/CheckPosting") then reject;
   \end{verbatim}
  +\end{quote}
   
   This is a special form of the usual ACL statements and it means the
  -following: The mail in question is piped into the ``CheckPostin''
  +following: The mail in question is piped into the ``CheckPosting''
   script. The script or program can perform various tests and when it
   exists, the action part is executed depending on the return code the
   script exited with. A return code of zero (0) means ``true'' and the
  @@ -1630,12 +1789,15 @@
   additionally to a regular posting filter you might have configured.
   
   A nice example for what this feature can be used is the following:
  +\begin{quote}
   \begin{verbatim}
   if (address == "simons@petidomo.com") then
  -       filter "/usr/local/petidomo/bin/simons.filter";
  +       filter "/usr/local/libexec/petidomo/simons.filter";
   \end{verbatim}
  +\end{quote}
   
   The script \file{simons.filter} would then look like this:
  +\begin{quote}
   \begin{verbatim}
   #! /bin/sh
   
  @@ -1644,6 +1806,7 @@
   echo "-- "
   echo " Hold your breath -- this is *the* Peter Simons!"
   \end{verbatim}
  +\end{quote}
   
   We resisted the temptation of adding this ACL statement into the
   default configuration of Petidomo.
  @@ -1660,27 +1823,32 @@
   program of your into the posting process and use it to re-format or
   re-write the article that is going to be posted.
   
  -We have included one
  -script into the distribution,
  -\file{\~{}peti\-domo/bin/Insert\-Name\-In\-Sub\-ject.sh}, which adds a string
  -into the subject line of every posting. The script is pretty short and
  -used sed(1) to perform its function.
  +We have included one script into the distribution,
  +\file{Insert\-Name\-In\-Sub\-ject.sh}, which adds a string into the
  +subject line of every posting. The script is pretty short and used
  +sed(1) to perform its function.
   
   To use it, just add the line
  +\begin{quote}
   \begin{verbatim}
   PostingFilter     ~petidomo/bin/InsertNameInSubject.sh listname
   \end{verbatim}
  +\end{quote}
   with ``listname'' being the name of the mailing list.
   
   If the mailing list name was ``testlist'', for example, then this
   posting filter would re-write the subject line
  +\begin{quote}
   \begin{verbatim}
   Subject: Hi everbody
   \end{verbatim}
  +\end{quote}
   to
  +\begin{quote}
   \begin{verbatim}
   Subject: [testlist] Hi everbody
   \end{verbatim}
  +\end{quote}
   
   It is recommended to take a look at the script itself to understand
   how this works. You will need a bit of knowledge of the Unix scripting
  @@ -1690,9 +1858,11 @@
   As the last point it should be made clear, that the string you specify
   as a filter is interpreted by the bourne shell for execution. It is
   thus absolutely possible, to use a posting filter like that
  +\begin{quote}
   \begin{verbatim}
   PostingFilter "/bin/cat | /bin/cat ; echo ; echo testing"
   \end{verbatim}
  +\end{quote}
   even though one might argue whether this particular example is a
   useful thing. Anyway, you know what we wanted to demonstrate.
   
  @@ -1730,24 +1900,24 @@
   
   \item Log in as user ``petidomo''.
   
  -\item Create a directory \file{\~{}petidomo/.pgp} and set the {\tt
  -\$PGPPATH} variable to it.
  +\item Create a directory \file{.pgp} in the home directory of the
  +users Petidomo runs under and set the {\tt \$PGPPATH} variable to it.
   
   \item Create a PGP key pair by calling `pgp -kg''. As user-id enter
   the address of the mailing list itself, for example: ``The secret
   mailing list $<$secretlist@petidomo.com$>$''.
   
  -\item Create a \file{config.txt} file for PGP in
  -\file{\~{}petidomo/.pgp} and insert the appropriate user id there.
  +\item Create a \file{config.txt} file for PGP in the \file{.pgp}
  +directory and insert the appropriate user id there.
   
   \item Distribute the newly created PGP key of the mailing list among
   the subscribers.
   
   \item Add the PGP keys of the subscribers to Petidomo's keyring.
   
  -\item Edit the following definitions in
  -\file{\~{}petidomo/bin/pgp-encrypt.sh}:
  +\item Edit the following definitions in \file{pgp-encrypt.sh}:
   
  +\begin{quote}
   \begin{verbatim}
   #
   # Please customize these things for your system.
  @@ -1756,6 +1926,7 @@
   PASSWORD="DecryptMe"
   PGPPATH=$PDHOME/.pgp
   \end{verbatim}
  +\end{quote}
   
   You will need to change the location of the PGP binary and insert the
   password you chose for the secret key. For security reasons, the
  @@ -1763,8 +1934,7 @@
   and it should have the permission ``110'', so that only Petidomo can
   execute it.
   
  -\item Edit the equivalent definitions in
  -\file{\~{}petidomo/bin/pgp-encrypt.sh}.
  +\item Edit the equivalent definitions in \file{pgp-encrypt.sh}.
   
   \item Now create the mailing list in question. In our example that
   would be ``secretlist''. Naturally the mailing list should not be open
  @@ -1773,16 +1943,20 @@
   \item Edit the ACL file of the ``secretlist'' to contain the following
   line:
   
  +\begin{quote}
   \begin{verbatim}
   if (body matches "^-----BEGIN PGP MESSAGE-----$") then
           filter "~petidomo/bin/pgp-decrypt.sh";
   \end{verbatim}
  +\end{quote}
   
   \item Edit the config file to have the following posting filter:
   
  +\begin{quote}
   \begin{verbatim}
   PostingFilter   "~petidomo/bin/pgp-encrypt.sh secretlist"
   \end{verbatim}
  +\end{quote}
   
   Please note that you must provide the name of the mailing list on the
   command line as parameter to \file{pgp-encrypt.sh}, so that it know
  @@ -1810,10 +1984,12 @@
   usually help to remove the {\tt \$LOGFILE} parameter from the {\tt
   trap} command in the scripts:
   
  +\begin{quote}
   \begin{verbatim}
   trap 'rm -f $TMPFILE $HEADER $BODY $NEWBODY $LOGFILE; exit'...
                                               ^^^^^^^^
   \end{verbatim}
  +\end{quote}
   
   As a result, the script won't delete the output PGP issued when called
   after exiting. Thus you will find the file still lying in \file{/tmp}
  @@ -1837,9 +2013,11 @@
   When you are using sendmail v8, you will have to write these names to
   the \$w\$ class in your sendmail.cf file, or the corresponfing M4
   config. This is done by adding the line
  +\begin{quote}
   \begin{verbatim}
   Cwdomain.name1 domain.name2 ...
   \end{verbatim}
  +\end{quote}
   to the file.
   
   This will tell sendmail that these names are to be accepted and
  @@ -1881,8 +2059,8 @@
   
   Petidomo tries its best to make sure that only syntactically correct
   addresses are subscribed to mailing lists, and if you stick to the
  -listserv interface, there's very little chance, an incorrect address
  -will make it into the \file{list} file.
  +correct mail interface, there's very little chance, an incorrect
  +address will make it into the \file{list} file.
   
   Sometimes, it is necessary to edit these files manually, though, or
   Petidomo's address validation algorithm fails. Once you have an
  @@ -1895,10 +2073,12 @@
   been corrupted, there's an easy way to find out, which addresses are
   wrong. Simply use sendmail's address verification mode like this:
   
  +\begin{quote}
   \begin{verbatim}
    $ xargs <list sendmail -bv | sed -e '/deliverable/d'
    > @bogus.address.here... user address required
   \end{verbatim}
  +\end{quote}
   
   This call will find all incorrect address and notify you. The 'sed'
   call will filter out all correct addresses for your convenience.

From ossp-cvs-owner@ossp.org  Sun Feb 18 01:05:40 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f1I05dF81817; Sun, 18 Feb 2001 01:05:39 +0100 (CET)
Date: Sun, 18 Feb 2001 01:05:39 +0100 (CET)
Message-Id: <200102180005.f1I05dF81817@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/petidomo ChangeLog configure.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   18-Feb-2001 01:05:39
  Branch: HEAD                             Handle: 2001021800053900

  Modified files:
    ossp-pkg/petidomo       ChangeLog configure.in

  Log:
    - Removed AC_REVISION: The information can not be found trivially in
      the configure file anyway.
    
    - Rather than patching the "-g -O2" away, set CFLAGS in any case --
      even if it is emty --, so that autoconf will not even generate it.

  Summary:
    Revision    Changes     Path
    1.3         +790 -0     ossp-pkg/petidomo/ChangeLog
    1.10        +7  -10     ossp-pkg/petidomo/configure.in
  ____________________________________________________________________________

  Index: ossp-pkg/petidomo/ChangeLog
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 ChangeLog
  --- ossp-pkg/petidomo/ChangeLog	2001/01/18 20:07:58	1.2
  +++ ossp-pkg/petidomo/ChangeLog	2001/02/18 00:05:39	1.3
  @@ -1,3 +1,793 @@
  +2001-02-17  Peter Simons <simons@computer.org>
  +
  +	* Updated the documentation for the 4.x version.
  +
  +	* When posting to a list, Petidomo will now let the "Keywords:"
  +	and "Summary:" headers pass. These headers are uncommon but have
  +	been around for ages.
  +
  +	* Petidomo will not log to syslog() with level LOG_NOTICE anymore
  +	unless it is an error or at least an unusual condition. Lowered
  +	level of most messages to LOG_INFO or below.
  +
  +	* Fixed a type in the example master config file: MTAOptions
  +	should have '-i' set, not '-v'.
  +
  +2001-01-21  Ralf S. Engelschall <rse@engelschall.com>
  +
  +	* Added DESTDIR support to the Makefile.
  +
  +	* Added "dump" mode to Petidomo, which is used by the
  +	petidomo-kickout script rather than messing in the config files
  +	itself.
  +
  +2001-01-20  Ralf S. Engelschall <rse@engelschall.com>
  +
  +	* Changed Petidomo so that it will send a separate mail to the
  +	list owner when someone subscribes, rather than just sending a
  +	carbon copy of the mail the user receives. This will prevent
  +	unnecessary confusion.
  +
  +2001-01-20  Ralf S. Engelschall <rse@engelschall.com>
  +
  +	* Added "dist" and "snap" target to the Makefile. These can be
  +	used to build a distribution or a snapshot respectively.
  +
  +	* Added make targets for increasing or updating version
  +	information the version information: "update-version" will update
  +	the date but keep version number, "new-version" will let you
  +	interactively specify new version number. To specify the new
  +	version number for "new-version" on the command line, provide
  +	"VERSION=0.8.15".
  +
  +2001-01-20  Peter Simons <simons@computer.org>
  +
  +	* Underscores in file names suck, because you need an extra
  +	key-press to type them compared to the hyphen. For this reason
  +	(and for consistency) I corrected this horrible, horrible mistake
  +	of the past and renamed everything that contained an underscore.
  +
  +2001-01-20  Ralf S. Engelschall <rse@engelschall.com>
  +
  +	* .cvsignore, Makefile.in, petidomo.pod:
  +	Add first cut for a petidomo(1) manual page.
  +
  +2001-01-20  Peter Simons <simons@computer.org>
  +
  +	* Makefile.in, config-files.c, config.c:
  +	Renamed the followings tags in petidomo.conf
  +
  +	    MTA_Options         --> MTAOptions
  +	    List_Directory      --> ListDirectory
  +	    Ack_Queue_Directory --> AckQueueDirectory
  +
  +	for consistency reasons. While I was at it, I also renamed the source
  +	file from config.c to config-files.c, because the module config.c is
  +	generally associated with GNU autoconf and this has nothing to do with
  +	it.
  +
  +2001-01-20  Ralf S. Engelschall <rse@engelschall.com>
  +
  +	* main.c:
  +	Be careful, listname can be NULL in global operation mode and not
  +	all printf implementations are as smart as BSD's variant. Instead of
  +	printing "(null)" others just dump core.
  +
  +	* docs/.cvsignore:
  +	Ignore LaTeX generated files
  +
  +2001-01-19  Peter Simons <simons@computer.org>
  +
  +	* Makefile.in: Cosmetic change.
  +
  +	* Makefile.in: Updated dependencies.
  +
  +	* archive.c:
  +	Enhanced portability. This commit also contains an older
  +	change made by Ralf, which I have to re-commit after
  +	screwing up with the "cvs admin" command. Sorry!!!
  +
  +	* mailer.c:
  +	Minor change to enhance portability.
  +
  +	* config.c:
  +	The module contains the static variable MasterConfig, which all other
  +	Petidomo routines can access via getMasterConfig(). The routine
  +	getListConfig(), which is defined in config.c, too, used the "correct"
  +	mechanism to access MasterConfig, even though it could access it
  +	directly. Since I chose the same name ("MasterConfig" :->) for the
  +	local copy of the pointer, gcc warns that this variable shadows the
  +	static one. To get rid of this warning, and since it doesn't make one
  +	bit a difference, getListConfig() accessse the static variable
  +	directly now.
  +
  +	* hermes.c:
  +	Changed ACL semantics: The ACL is processed only if the posting didn't
  +	have a valid password. If it did, the mail is going through in any
  +	case and the ACL is not tested.
  +
  +	* config/index, Makefile.in:
  +	In case no index file is installed, "make install" will create an
  +	example file at the correct location so that the admininstrator
  +	hopefully figures out that there is some work to be done.
  +
  +	* acl.y:
  +	- Added a warning message to be logged when no global ACL file exists.
  +
  +	- Reordered tests in check_local_acl_file: When no listname has been
  +	  given, we don't need to initialize the lexer at all.
  +
  +	* hermes.c:
  +	Petidomo used the mail's envelope to deliver the request for
  +	confirmation. I have changed this to either reply-to or from (if
  +	reply-to is unset), because sendmail will destroy the original
  +	envelope under obscure circumstances.
  +
  +	* main.c: Removed unnecessary cast.
  +
  +	* config.c:
  +	Due to a mix-up in the variable names, Petidomo expanded all list
  +	config file paths incorrectly when the list has a flat hierarchy. That
  +	is fixed now.
  +
  +2001-01-19  Ralf S. Engelschall <rse@engelschall.com>
  +
  +	* Makefile.in:
  +	Provide "make dist" command for rolling distribution tarball.
  +
  +2001-01-19  Peter Simons <simons@computer.org>
  +
  +	* main.c:
  +	Added version information to the start-up log message.
  +
  +2001-01-19  Ralf S. Engelschall <rse@engelschall.com>
  +
  +	* Makefile.in, main.c, version.c:
  +	First step in GNu shtool version support:
  +	Add version.c and use it for "petidomo --version".
  +	Support for handling version.c in Makefile.in is coming later.
  +
  +	* libconfigfile/config.c, librfc822/address.y, librfc822/decomment.c, libargv/argv.c, acl.y, address-db.c, approve.c, config.c, filter.c, hermes.c, index.c, io.c, mailer.c, members.c, password.c, queue_command.c, queue_posting.c, subscribe.c, unsubscribe.c:
  +	Get rid of all complaints from GCC 2.97
  +	(except for two things which I do not want to change on my own)
  +
  +2001-01-19  Peter Simons <simons@computer.org>
  +
  +	* queue_command.c, queue_posting.c:
  +	Incorporated the cookie into the end-of-mail-marker used in the
  +	ack-script, so that the whole mechanism doesn't break when somebody
  +	has the words '[end-of-mail-marker]' in the mail body itself.
  +
  +	* subscribe.c, unsubscribe.c:
  +	Fixed the spelling of the newly added syslog messages.
  +
  +	* main.c:
  +	Moved the initial startup log message up so that it is logged before
  +	the main config file is parsed. Also added the path of the main config
  +	file to the message so that people can see where Petidomo locks for it
  +	in case parsing fails.
  +
  +	* hermes.c, subscribe.c, unsubscribe.c:
  +	Greatly enhanced the log messages Petidomo writes. Made the existing
  +	messages more helpful, added lots of new ones, generally made things
  +	real perfect. Remember: Life is BEAUTIFUL.
  +
  +2001-01-19  Ralf S. Engelschall <rse@engelschall.com>
  +
  +	* Makefile.in:
  +	Do not show subdir walking commands
  +
  +2001-01-19  Peter Simons <simons@computer.org>
  +
  +	* main.c:
  +	Added a message that is logged every time Petidomo starts up. This
  +	message will "dump" the configuration of Petidomo so that the user has
  +	a clue which Petidomo instance is doing what.
  +
  +	* subscribe.c, unsubscribe.c:
  +	When a un-/subscribe command needs confirmation, the request for
  +	confirmation is sent to the address that is supposed to added to or
  +	removed from the list. If, and only if, this address is different than
  +	the one from which the request came, a short mail is sent to the
  +	requestor to inform him what is going on.
  +
  +	* tool.c, config.c:
  +	Mailing list config files may now have the suffix ".config" or
  +	".conf". Similarly, if the list config file is in a separate
  +	directory, it may be called <listname>/config or <listname>/conf.
  +
  +	* main.c:
  +	Added code that will set the real user id of the process equal to the
  +	effective user id.
  +
  +	* Makefile.in:
  +	- Word-wrapped long lines to fit into 80 characters per line.
  +	- Updated dependencies.
  +	- Removed BINDIR from FLAGS_TO_PASS as it isn't needed anymore.
  +
  +	* main.c, petidomo.h, queue_command.c, queue_posting.c:
  +	Petidomo needs to know the path to the executable in order to write
  +	the ack-spool file, which starts Petidomo again to process the
  +	acknowledged command or posting. I used BINDIR for that, but realized
  +	that this sucks when somebody manually moves the binary. Hence, I am
  +	using the contents of argv[0] now, normalized to an absolute path.
  +	This value is stored in the global variable who_am_i, which the
  +	queue_*() routines now use.
  +
  +2001-01-19  Ralf S. Engelschall <rse@engelschall.com>
  +
  +	* generate_cookie.c:
  +	Get rid of the following GCC complains:
  +	generate_cookie.c: In function `generate_cookie':
  +	generate_cookie.c:58: warning: implicit declaration of function `strlen'
  +	generate_cookie.c: In function `MD5Update':
  +	generate_cookie.c:245: warning: declaration of `index' shadows global declaration
  +	generate_cookie.c:260: warning: implicit declaration of function `memcpy'
  +	generate_cookie.c: In function `MD5Final':
  +	generate_cookie.c:286: warning: declaration of `index' shadows global declaration
  +	generate_cookie.c:303: warning: implicit declaration of function `memset'
  +
  +	* archive.c:
  +	As GCC complained: There is an ISO 9899:1990 (``ISO C'') function
  +	clock(3), so we have a symbol conflict here. Get rid of this by renaming
  +	our symbol.
  +
  +	* libtext/text.h:
  +	Do not use C++ comments in ANSI C
  +
  +2001-01-18  Ralf S. Engelschall <rse@engelschall.com>
  +
  +	* README, acl.y, acl_scan.l, address-db.c, approve.c, archive.c, authen.c, config.c, filter.c, generate_cookie.c, handleacl.c, help.c, hermes.c, index.c, io.c, listserv.c, mailer.c, main.c, members.c, parsearray.c, password.c, petidomo.h, queue_command.c, queue_posting.c, rfcparse.c, subscribe.c, tool.c, unsubscribe.c:
  +	As we agreed today, Petidomo is now open because licensed under GPL and
  +	always will be licensed under GPL, so use "Petidomo" as the program name
  +	everywhere and consistently.
  +
  +	* Makefile.in:
  +	Install petidomo-xxxx tools
  +
  +	* Makefile.in: Show were we are operating
  +
  +	* ChangeLog: Start filling ChangeLog...
  +
  +	* README: *** empty log message ***
  +
  +2001-01-18  Peter Simons <simons@computer.org>
  +
  +	* petidomo-approve, petidomo-kickout:
  +	Add old RSE admin scripts
  +
  +2001-01-18  Ralf S. Engelschall <rse@engelschall.com>
  +
  +	* config.c: ListACLFile -> ACLFile
  +
  +	* Makefile.in: New layout
  +
  +	* configure.in, Makefile.in:
  +	Switch to GNU shtool
  +
  +	* etc/install-sh:
  +	Remove obsolete install-sh
  +
  +	* etc/shtool: Add GNU shtool
  +
  +	* Makefile.in:
  +	fix install-testlist target
  +
  +2001-01-16  Peter Simons <simons@computer.org>
  +
  +	* subscribe.c, unsubscribe.c:
  +	When a request for confirmation is required, the originator of the
  +	command will receive a short mail, telling him that this is so, so
  +	that he knows what's going on.
  +
  +	* subscribe.c, unsubscribe.c:
  +	Delayed the processing of the acknowledgment-requirement so that you
  +	don't have to ack commands that will fail anyways.
  +
  +	* Makefile.in, address-db.c, hermes.c, petidomo.h:
  +	Implemented the acked-once feature.
  +
  +	* acl.y, acl_scan.l, handleacl.c, petidomo.h:
  +	Added new action keyword to the Access Control Language: approve. This
  +	keyword will -- unlike to "pass" -- not only pass the mail, but will
  +	also make sure that the mail passes all other authorization controls.
  +	This means, the mail will be treated as if the Petidomo master
  +	password had been given in the header.
  +
  +	* approve.c:
  +	Added include of sys/types.h. Required on some systems to be able to
  +	include regex.h.
  +
  +	* hermes.c:
  +	Moved the call to checkACL() before anything else is tested regarding
  +	authorization. Combined with the new "approve" action in the ACL file,
  +	this allows to pass all other authentication mechanisms with the ACL.
  +
  +2001-01-15  Peter Simons <simons@computer.org>
  +
  +	* hermes.c:
  +	Added code that will request confirmation when posting to a list that
  +	is set to "acknowledged".
  +
  +	* Makefile.in, approve.c, main.c, petidomo.h:
  +	Implemented the approve mode, where incoming mails are searched for
  +	confirmation cookies and the apropriate queue entries will be
  +	executed.
  +
  +	* subscribe.c:
  +	The call to queue_command() had the command wrong.
  +
  +	* subscribe.c, unsubscribe.c:
  +	Added code that will send the "request for confirmation" mail out when
  +	apropriate.
  +
  +	* hermes.c:
  +	Cosmetic change: Reformatted the source.
  +
  +	* config.c, config/list-config:
  +	- ListType is no longer a required parameter; it now defaults to "open".
  +
  +	* hermes.c, listserv.c, main.c, petidomo.h:
  +	Had to make is_approved a global variable, because it is actually
  +	tested in subroutines of listserv_main() and hermes_main(), like
  +	subscribe(), which's parameter list I don't want to change.
  +
  +	* petidomo.h, queue_command.c, queue_posting.c:
  +	queue_command() and queue_posting() will now return the cookie used as
  +	filename, so that the calling code can mail back the request for
  +	confirmation.
  +
  +	* config.c, config/list-config, petidomo.h, subscribe.c, unsubscribe.c:
  +	List's "AllowPublicSubscripiton" does not exist anymore. Now we have
  +	"SubscriptionType" with valid values "public", "admin" or
  +	"acknowledged".
  +
  +	* config/petidomo.conf:
  +	- Added Ack_Queue_Dir keyword.
  +
  +	- Changed default of List_Directory from LOCALSTATEDIR to
  +	  LOCALSTATEDIR/lists.
  +
  +	* config/list-config, unsubscribe.c, config.c, petidomo.h, subscribe.c:
  +	Removed the whole concept of "alien subscription". It was stupid to
  +	begin with and now that we'll have acknowledged subscriptions, it is
  +	useless, too.
  +
  +	* Makefile.in, config.c, petidomo.h, queue_command.c, queue_posting.c:
  +	Implemented spooling mechanism for requests and postings that need an
  +	acknowledgement to be processed. The code is there, it just isn't
  +	called yet.
  +
  +	* hermes.c, listserv.c, main.c:
  +	Added --approved command line parameter, which is treated as a
  +	boolean. Whether it is set or not will be passed through to
  +	listserv_main() and to hermes_main(). The parameter will be used by
  +	the spooling mechanism.
  +
  +2001-01-11  Peter Simons <simons@computer.org>
  +
  +	* config.c, config/list-config, petidomo.h:
  +	Added config entry "AcknowledgementFile" to the mailing list's config file.
  +
  +	* Makefile.in, configure.in, generate_cookie.c, petidomo.h:
  +	Added generate_cookie() routine taken from mapSoN.
  +
  +	* unsubscribe.c:
  +	The requestor will now receive a mail telling him something went wrong
  +	when he tries to unsubscribe an address without specifying a list
  +	name.
  +
  +2001-01-10  Peter Simons <simons@computer.org>
  +
  +	* help.c, members.c, subscribe.c, unsubscribe.c:
  +	Set the right margin for word-wrapping to 70 characters instead of 75.
  +
  +	* subscribe.c:
  +	The requestor will now receive a mail telling him something went wrong
  +	when he tries to subscribe an address without specifying a list name.
  +
  +	* acl.y:
  +	When running in listserv mode, there is no 'listname' which can be
  +	used to get the mailing list's configuration. Thus, the routine
  +	shouldn't try to got one. Fixed it.
  +
  +	* config.c: Removed debugging output.
  +
  +2001-01-08  Peter Simons <simons@computer.org>
  +
  +	* acl.y:
  +	Changed the ACL code to use the configured locations of the list's ACL
  +	file rather than the hard-coded one.
  +
  +	* Makefile.in:
  +	Completed the install-testlist target.
  +
  +	* acl.y, archive.c, config.c, help.c, hermes.c, index.c, mailer.c, main.c, members.c, petidomo.h, subscribe.c, tool.c, unsubscribe.c:
  +	Rewrote Petidomo so that virtually any file's path can be configured
  +	at run-time now.
  +
  +	* config/petidomo.conf:
  +	Added example entries for the new keywords "List_Directory",
  +	"Help_File", "ACL_File", and "Index_File".
  +
  +	* config/list-config:
  +	Added example entries for the new keywords "IntroductionFile",
  +	"DescriptionFile", "ACLFile", "HeaderFile", "SignatureFile", and
  +	"AddressFile".
  +
  +	* config/petidomo.acl:
  +	Removed the path of the file in the comment header, since it doesn't
  +	fit anymore anyway.
  +
  +	* Makefile.in: Added dependencies.
  +
  +	* config.c, main.c, petidomo.h:
  +	Petidomo will now expect its master config file at
  +	SYSCONFDIR/petidomo.conf. This location can be changed at run-time
  +	with the command line parameter --masterconf.
  +
  +	* Makefile.in:
  +	Added preliminary install and install-testlist target.
  +
  +	* configure.in:
  +	Removed the ETCDIR stuff again. We use sysconfdir instead.
  +
  +2001-01-06  Peter Simons <simons@computer.org>
  +
  +	* Makefile.in, config.c, configure.in, petidomo.h:
  +	Replaced the old basedir-mechanism in Petidomo, which used to be the
  +	home directory of the petidomo user. Now, Petidomo expects its master
  +	config file in ETCDIR, which is '/etc' per default. All other paths
  +	will be set there at run-time.
  +
  +	* handleacl.c, help.c, hermes.c, index.c, members.c, subscribe.c, unsubscribe.c:
  +	- Added a "Petidomo:" prefix to all subject lines, to distinguish them
  +	  from regular mail. Rejection mails furthermore have the prefix
  +	  "BOUNCE <listaddress>:", mails that need approval have the prefix
  +	  "APROVE <listaddress>:".
  +
  +	- When a mail is rejected due to ACL, the mail body will tell you
  +	  whether the global acl file or the list's local acl file hit.
  +
  +	- If a file "lists/<listname>/header" exists, it contents will be
  +	  added to the headers of the article posted to the list. Be careful
  +	  not to have blank lines in there, as this will screw the whole
  +	  message up.
  +
  +	- When generating the index of available mailing lists, the list type
  +	  will now be typeset in brackets, e.g.: "(public mailing list)".
  +
  +	- The index will no longer contain tabs in the mail body.
  +
  +	* handleacl.c:
  +	The local List_Config variable was potentially used uninitialized.
  +	Fixed that.
  +
  +2000-12-16  Peter Simons <simons@computer.org>
  +
  +	* librfc822/Makefile:
  +	Added dependency to stop parallel make from messing up with the
  +	yacc/lex targets.
  +
  +	* librfc822/decomment.c:
  +	Fixed parsing bug.
  +
  +	* librfc822/address.y:
  +	Added definition of YYSTYPE.
  +
  +	* configure.in:
  +	Use petidomo.h file to determine $srcdir, rather than main.c.
  +
  +	* Makefile.in, main.c, petidomo.h:
  +	Reversed all changes concerning C++ in Petidomo ... it isn't worth the
  +	major rewrite.
  +
  +	* librfc822/.cvsignore:
  +	Ignore yacc and lex files
  +
  +	* librfc822/Makefile, librfc822/address.c, librfc822/address.y, librfc822/address_scan.c, librfc822/address_scan.h, librfc822/address_scan.l, librfc822/address_sep.c, librfc822/decomment.c, librfc822/parse_address.c, librfc822/rfc822.h, librfc822/test.c, libmpools/Makefile, libmpools/mpools.c, libmpools/mpools.h:
  +	- Added GNU GPL copyright headers.
  +	- Cleaned build process up.
  +
  +	* libmpools/Makefile, libmpools/mpools.c, libmpools/mpools.h:
  +	Imported Petidomo 2.2 as found on www.petidomo.com.
  +
  +	* libmpools/Makefile, libmpools/mpools.c, libmpools/mpools.h:
  +	New file.
  +
  +	* librfc822/address_scan.c:
  +	Imported Petidomo 2.2 as found on www.petidomo.com.
  +
  +	* librfc822/address_scan.c: New file.
  +
  +	* librfc822/address.c:
  +	Imported Petidomo 2.2 as found on www.petidomo.com.
  +
  +	* librfc822/address.c: New file.
  +
  +	* librfc822/decomment.c, librfc822/parse_address.c, librfc822/rfc822.h, librfc822/test.c, librfc822/testaddresslines:
  +	Imported Petidomo 2.2 as found on www.petidomo.com.
  +
  +	* librfc822/decomment.c, librfc822/parse_address.c, librfc822/rfc822.h, librfc822/test.c, librfc822/testaddresslines:
  +	New file.
  +
  +	* librfc822/Makefile, librfc822/address.y, librfc822/address_scan.h, librfc822/address_scan.l, librfc822/address_sep.c:
  +	Imported Petidomo 2.2 as found on www.petidomo.com.
  +
  +	* librfc822/Makefile, librfc822/address.y, librfc822/address_scan.h, librfc822/address_scan.l, librfc822/address_sep.c:
  +	New file.
  +
  +	* Makefile.in:
  +	Added preliminary install target.
  +
  +	* config/petidomo.conf:
  +	Removed reference to firepower altogether; MTA is a required keyword.
  +
  +2000-12-15  Peter Simons <simons@computer.org>
  +
  +	* config/petidomo.conf:
  +	Removed note about Firepore MTA.
  +
  +	* config.c:
  +	Hardcoded the base directory /usr/local/petidomo for the moment.
  +
  +	* libtext/text.h:
  +	Wrapped the header's contents in "extern C" linkage when compiling in
  +	a C++ module.
  +
  +	* Makefile.in:
  +	The petidomo binary will now be linked with $(CXX).
  +	Updated dependencies.
  +
  +	* Makefile.in, config.c, help.c, index.c, members.c, signature.c, subscribe.c, unsubscribe.c:
  +	Removed the signature code and all code that depended on it. In the
  +	new Petidomo, the signature mechanism for server mails will work
  +	differently.
  +
  +	* config.c, config/petidomo.conf, signature.c:
  +	Removed the global configuration options "DetachImmediately" and
  +	"ShowStatistics". Consequently removed all code that deals with these
  +	options, too.
  +
  +	* libargv/Makefile:
  +	The clean target will now erase the argv.info file.
  +
  +	* libargv/.cvsignore:
  +	Ignore the argv.info file.
  +
  +	* Makefile.in, exit.c:
  +	Removed the mail rescue mechanism and all relating code. I guess
  +	_nobody_ ever used that mechanism anyway, not even me. :-)
  +
  +	* Makefile.in, acl.y, archive.c, argvSetDebugLevel.c, authen.c, config.c, debug.h, exit.c, filter.c, handleacl.c, help.c, hermes.c, index.c, listserv.c, mailer.c, members.c, password.c, rfcparse.c, subscribe.c, tool.c, unsubscribe.c:
  +	 - Removed all debugging code. Now that Petidomo will be "rewritten"
  +	   in C++, I need a new paradigm for debugging anyway and the old
  +	   solution of mine was to messy for my taste anyway.
  +
  +	 - Petidomo no longer cares under what name it has been started. The
  +	   different modes of operation will now be distinguished by a
  +	   mandatory command line parameter.
  +
  +	* Makefile.in:
  +	Added support for C++ source modules within Petidomo.
  +
  +2000-12-14  Peter Simons <simons@computer.org>
  +
  +	* Makefile.in:
  +	Modified the main Makefile so that it will pass the values determined
  +	by Autoconf down to the libraries.
  +
  +	* Makefile.in:
  +	FreeBSD's make again: That stupid thing really doesn't grasp $< targets.
  +
  +	* Makefile.in:
  +	FreeBSD's make sucks big time: It doesn't honor the -C flag. Hence we
  +	have to change into the target directory before calling make.
  +
  +	* Makefile.in:
  +	BSD make doesn't understand $< like GNU make does, thus it is better
  +	to explicitely name the targets for the sake of portability.
  +
  +	* Makefile.in:
  +	Rewrote the makefile to not require GNU make.
  +
  +	* libargv/Makefile, libconfigfile/Makefile, liblists/Makefile, libtext/Makefile:
  +	Removed unused suffix .a from the .SUFFIXES target.
  +
  +	* .cvsignore, configure.in:
  +	 - Libraries do not need Autoconf anymore, thus I removed the
  +	   AC_CONFIG_SUBDIRS call.
  +
  +	 - Added -O3 to CFLAGS for the sake of good optimization.
  +
  +	* Makefile.in: Updated dependencies.
  +
  +	* libargv/.cvsignore, libargv/Makefile, libconfigfile/Makefile, libconfigfile/SMakefile, libconfigfile/configure.in, liblists/Makefile, liblists/SMakefile, liblists/configure.in, liblists/lists.h, liblists/lists.h.in, libtext/Makefile, libtext/SMakefile, libtext/configure.in, libtext/test.txt:
  +	 - Removed smake build and autoconf from the libraries.
  +	 - Removed unused files.
  +
  +	* libargv/Makefile, libargv/SMakefile, libargv/configure.in:
  +	Added a real makefile.
  +
  +	* libargv/argvSetDebugLevel.c:
  +	The file is never used here.
  +
  +2000-12-13  Peter Simons <simons@computer.org>
  +
  +	* libargv/argvSetDebugLevel.c, libargv/test.c, libconfigfile/config.c, libconfigfile/configfile.h, liblists/lists.c, liblists/lists.h.in, libtext/easy_pattern_match.c, libtext/easy_sprintf.c, libtext/find_next_line.c, libtext/find_string.c, libtext/text.h, libtext/transform_text.c, libtext/wordwrap.c:
  +	Added correct GPL copyright headers.
  +
  +	* libtext/CustomTokenIterator.cpp, libtext/RegexTokenizer.cpp, libtext/RegexTokenizer_test.cpp, libtext/TokenIterator.cpp, libtext/TokenIterator_test.cpp, libtext/text.hpp, libtext/tokenizer_test.cpp:
  +	Removed unused C++ code.
  +
  +	* Makefile.in:
  +	Cosmetic changes to the Makefile ... nothing important.
  +
  +	* Makefile.in, configure.in:
  +	After changing librfc822 to get along without libmpools, the library
  +	can (and has been) removed from Petidomo.
  +
  +	* debug.h:
  +	This header file defines the debug modules Petidomo supports.
  +
  +	* configure.in:
  +	The source for the configure script generated by Autoconf.
  +
  +	* petidomo.h:
  +	All internal prototypes and definitions.
  +
  +	* etc/install-sh:
  +	Autoconf needs this script in order to run sub-configure scripts.
  +
  +	* liblists/lists.h.in, libtext/CustomTokenIterator.cpp, libtext/RegexTokenizer.cpp, libtext/RegexTokenizer_test.cpp, libtext/TokenIterator.cpp, libtext/TokenIterator_test.cpp, libtext/test.txt, libtext/text.hpp, libtext/tokenizer_test.cpp, liblists/Makefile, liblists/SMakefile, liblists/configure.in, liblists/lists.c, liblists/lists.h, libtext/Makefile, libtext/SMakefile, libtext/configure.in, libtext/easy_pattern_match.c, libtext/easy_sprintf.c, libtext/find_next_line.c, libtext/find_string.c, libtext/text.h, libtext/transform_text.c, libtext/wordwrap.c:
  +	Imported latest version.
  +
  +	* libconfigfile/Makefile, libconfigfile/SMakefile, libconfigfile/config.c, libconfigfile/configfile.h, libconfigfile/configure.in:
  +	Imported latest version of the library.
  +
  +	* libargv/NEWS, libargv/SMakefile, libargv/argv.texi, libargv/argv_loc.h, libargv/configure.in, libargv/Makefile, libargv/Makefile.inc, libargv/_argv.h, libargv/argv.c, libargv/argv.h, libargv/argvSetDebugLevel.c, libargv/test.c:
  +	Imported libargv version 2.4.0.
  +
  +	* acl.y, acl_scan.l, archive.c, argvSetDebugLevel.c, authen.c, config.c, exit.c, filter.c, handleacl.c, help.c, hermes.c, index.c, io.c, listserv.c, mailer.c, main.c, members.c, parsearray.c, password.c, rfcparse.c, signature.c, subscribe.c, tool.c, unsubscribe.c:
  +	 - Added correct GNU GPL copyright statements to the files.
  +	 - Removed unnecessary include statements.
  +
  +	* Makefile, Makefile.in:
  +	Rewrote the build process from the scratch.
  +
  +	* version.h:
  +	The old versioning mechanism needs to be replaced any time soon.
  +
  +	* archive.h, authen.h, filter.h, mailer.h, rfcparse.h:
  +	The contents of these headers is now included in petidomo.h.
  +
  +	* signature.c, unregsig.c, unregsig.h:
  +	Renamed unregsig module to signature. Now that Petidomo is released
  +	under GPL, there is no such thing as an "unregistered" version
  +	anymore.
  +
  +	* acl.c, acl_scan.c, acl_scan.h:
  +	Removed dependent files from CVS repository.
  +
  +	* etc/mail2news.c:
  +	The program isn't tested, it isn't documented ... so away with it.
  +
  +	* docs/Makefile, docs/petidomo.tex:
  +	 - Removed all use of html.sty.
  +
  +	 - Removed all references to the CGI manager.
  +
  +	 - Removed autoconf support.
  +
  +	 - Removed the index.
  +
  +	 - Reformatted the document to look good and to compile without
  +	   warnings.
  +
  +	* docs/Makefile:
  +	Don't erase the EPS files at 'clean'.
  +
  +	* docs/directory-struct.eps, docs/ml-principle1.eps, docs/ml-principle2.eps:
  +	Adding EPS files to repository, because those are really hard to
  +	generate correctly.
  +
  +	* docs/GNUmakefile, docs/Makefile:
  +	Renamed GNUmakefile to Makefile; there's nothing in this makefile
  +	that's specific to GNU make.
  +
  +	* docs/GNUmakefile:
  +	Added '-f' flag to the 'rm' call in the clean target.
  +
  +	* docs/GNUmakefile:
  +	Cleaned the Makefile up a lot. Removed explicit targets whereever an
  +	implicit target will do.
  +
  +	* docs/GNUmakefile, docs/Xstation.bm, docs/directory-struct.fig, docs/ml-principle1.fig, docs/ml-principle2.fig, docs/petidomo.tex, docs/router.bm, docs/world.bm:
  +	Imported Petidomo 2.2 as found on www.petidomo.com.
  +
  +	* docs/GNUmakefile, docs/Xstation.bm, docs/directory-struct.fig, docs/ml-principle1.fig, docs/ml-principle2.fig, docs/petidomo.tex, docs/router.bm, docs/world.bm:
  +	New file.
  +
  +	* acl.c, acl_scan.c, acl_scan.h:
  +	Imported Petidomo 2.2 as found on www.petidomo.com.
  +
  +	* acl.c, acl_scan.c, acl_scan.h:
  +	New file.
  +
  +	* subscribe.c, tool.c, unregsig.c, unregsig.h, unsubscribe.c, version.h:
  +	Imported Petidomo 2.2 as found on www.petidomo.com.
  +
  +	* subscribe.c, tool.c, unregsig.c, unregsig.h, unsubscribe.c, version.h:
  +	New file.
  +
  +	* mailer.c, mailer.h, main.c, members.c, parsearray.c, password.c, rfcparse.c, rfcparse.h:
  +	Imported Petidomo 2.2 as found on www.petidomo.com.
  +
  +	* mailer.c, mailer.h, main.c, members.c, parsearray.c, password.c, rfcparse.c, rfcparse.h:
  +	New file.
  +
  +	* filter.c, filter.h, handleacl.c, help.c, hermes.c, index.c, io.c, listserv.c:
  +	Imported Petidomo 2.2 as found on www.petidomo.com.
  +
  +	* filter.c, filter.h, handleacl.c, help.c, hermes.c, index.c, io.c, listserv.c:
  +	New file.
  +
  +	* Makefile, acl.y, acl_scan.l, archive.c, archive.h, argvSetDebugLevel.c, authen.c, authen.h, config.c, exit.c:
  +	Imported Petidomo 2.2 as found on www.petidomo.com.
  +
  +	* Makefile, acl.y, acl_scan.l, archive.c, archive.h, argvSetDebugLevel.c, authen.c, authen.h, config.c, exit.c:
  +	New file.
  +
  +	* filter/pgp-decrypt.sh, filter/pgp-encrypt.sh:
  +	Imported Petidomo 2.2 as found on www.petidomo.com.
  +
  +	* filter/pgp-decrypt.sh, filter/pgp-encrypt.sh:
  +	New file.
  +
  +	* filter/insert-name-in-subject.sh, filter/rfc2369.sh:
  +	Imported Petidomo 2.2 as found on www.petidomo.com.
  +
  +	* filter/insert-name-in-subject.sh, filter/rfc2369.sh:
  +	New file.
  +
  +	* libargv/argv.c, libargv/argv.h, libargv/argvSetDebugLevel.c, libargv/test.c:
  +	Imported Petidomo 2.2 as found on www.petidomo.com.
  +
  +	* libargv/argv.c, libargv/argv.h, libargv/argvSetDebugLevel.c, libargv/test.c:
  +	New file.
  +
  +	* libargv/Makefile, libargv/Makefile.inc, libargv/_argv.h, libconfigfile/Makefile, libconfigfile/config.c, libconfigfile/configfile.h, libtext/transform_text.c, libtext/wordwrap.c:
  +	Imported Petidomo 2.2 as found on www.petidomo.com.
  +
  +	* libargv/Makefile, libargv/Makefile.inc, libargv/_argv.h, libconfigfile/Makefile, libconfigfile/config.c, libconfigfile/configfile.h, libtext/transform_text.c, libtext/wordwrap.c:
  +	New file.
  +
  +	* liblists/Makefile, liblists/lists.c, liblists/lists.h, libtext/Makefile, libtext/easy_pattern_match.c, libtext/easy_sprintf.c, libtext/find_next_line.c, libtext/find_string.c, libtext/text.h:
  +	Imported Petidomo 2.2 as found on www.petidomo.com.
  +
  +	* liblists/Makefile, liblists/lists.c, liblists/lists.h, libtext/Makefile, libtext/easy_pattern_match.c, libtext/easy_sprintf.c, libtext/find_next_line.c, libtext/find_string.c, libtext/text.h:
  +	New file.
  +
  +	* config/petidomo.acl, config/petidomo.conf, etc/mail2news.c:
  +	Imported Petidomo 2.2 as found on www.petidomo.com.
  +
  +	* config/petidomo.acl, config/petidomo.conf, etc/mail2news.c:
  +	New file.
  +
  +	* README, config/help, config/list-acl, config/list-config:
  +	Imported Petidomo 2.2 as found on www.petidomo.com.
  +
  +	* README, config/help, config/list-acl, config/list-config:
  +	New file.
  +
  +	* COPYING, ChangeLog:
  +	Imported Petidomo 2.2 as found on www.petidomo.com.
  +
  +	* COPYING, ChangeLog:
  +	New file.
  +
  +
  +
   
   Petidomo v4
   ===========
  Index: ossp-pkg/petidomo/configure.in
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 configure.in
  --- ossp-pkg/petidomo/configure.in	2001/01/20 14:36:43	1.9
  +++ ossp-pkg/petidomo/configure.in	2001/02/18 00:05:39	1.10
  @@ -1,17 +1,22 @@
   dnl
   dnl configure.in -- Process this file with autoconf to produce a configure script.
   dnl
  -dnl $Header: /e/ossp/cvs/ossp-pkg/petidomo/configure.in,v 1.9 2001/01/20 14:36:43 rse Exp $
  +dnl $Header: /e/ossp/cvs/ossp-pkg/petidomo/configure.in,v 1.10 2001/02/18 00:05:39 simons Exp $
   dnl
   
   AC_INIT(petidomo.h)
  -AC_REVISION($Revision: 1.9 $)dnl
   
  +dnl Print the standard OSSP.
  +dnl
   AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)
   V=`./etc/shtool version -lc -dlong version.c`
   ./etc/shtool echo -e "Configuring %BOSSP Petidomo%b, Version %B${V}%b"
   AC_DIVERT_POP()
   
  +dnl Get rid of the lousy -g and -O defaults in CFLAGS.
  +dnl
  +CFLAGS=${CFLAGS:-}
  +
   dnl Checks for paths and programs.
   dnl
   AC_PROG_CC
  @@ -40,14 +45,6 @@
   if test "$GCC" = yes; then
       CFLAGS="$CFLAGS -Wall -pedantic -pipe"
   fi
  -
  -dnl Remove '-g' from the compile flags.
  -dnl
  -CFLAGS=`echo $CFLAGS | sed -e "s/-g//"`
  -
  -dnl Turn '-O2' to '-O3'.
  -dnl
  -CFLAGS=`echo $CFLAGS | sed -e "s/-O2/-O3/"`
   
   dnl Write results.
   dnl

From ossp-cvs-owner@ossp.org  Sun Feb 18 01:20:06 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f1I0K4T82865; Sun, 18 Feb 2001 01:20:04 +0100 (CET)
Date: Sun, 18 Feb 2001 01:20:04 +0100 (CET)
Message-Id: <200102180020.f1I0K4T82865@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/petidomo ChangeLog
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   18-Feb-2001 01:20:04
  Branch: HEAD                             Handle: 2001021800200400

  Modified files:
    ossp-pkg/petidomo       ChangeLog

  Log:
    Updated ChangeLog based on the CVS history.

  Summary:
    Revision    Changes     Path
    1.4         +112 -725   ossp-pkg/petidomo/ChangeLog
  ____________________________________________________________________________

  Index: ossp-pkg/petidomo/ChangeLog
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 ChangeLog
  --- ossp-pkg/petidomo/ChangeLog	2001/02/18 00:05:39	1.3
  +++ ossp-pkg/petidomo/ChangeLog	2001/02/18 00:20:04	1.4
  @@ -1,6 +1,6 @@
   2001-02-17  Peter Simons <simons@computer.org>
   
  -	* Updated the documentation for the 4.x version.
  +	* Updated the documentation for the new version.
   
   	* When posting to a list, Petidomo will now let the "Keywords:"
   	and "Summary:" headers pass. These headers are uncommon but have
  @@ -47,786 +47,173 @@
   	(and for consistency) I corrected this horrible, horrible mistake
   	of the past and renamed everything that contained an underscore.
   
  -2001-01-20  Ralf S. Engelschall <rse@engelschall.com>
  -
  -	* .cvsignore, Makefile.in, petidomo.pod:
  -	Add first cut for a petidomo(1) manual page.
  -
   2001-01-20  Peter Simons <simons@computer.org>
  -
  -	* Makefile.in, config-files.c, config.c:
  -	Renamed the followings tags in petidomo.conf
  -
  -	    MTA_Options         --> MTAOptions
  -	    List_Directory      --> ListDirectory
  -	    Ack_Queue_Directory --> AckQueueDirectory
  -
  -	for consistency reasons. While I was at it, I also renamed the source
  -	file from config.c to config-files.c, because the module config.c is
  -	generally associated with GNU autoconf and this has nothing to do with
  -	it.
  -
  -2001-01-20  Ralf S. Engelschall <rse@engelschall.com>
  -
  -	* main.c:
  -	Be careful, listname can be NULL in global operation mode and not
  -	all printf implementations are as smart as BSD's variant. Instead of
  -	printing "(null)" others just dump core.
  -
  -	* docs/.cvsignore:
  -	Ignore LaTeX generated files
  -
  -2001-01-19  Peter Simons <simons@computer.org>
  -
  -	* Makefile.in: Cosmetic change.
  -
  -	* Makefile.in: Updated dependencies.
  -
  -	* archive.c:
  -	Enhanced portability. This commit also contains an older
  -	change made by Ralf, which I have to re-commit after
  -	screwing up with the "cvs admin" command. Sorry!!!
  -
  -	* mailer.c:
  -	Minor change to enhance portability.
  -
  -	* config.c:
  -	The module contains the static variable MasterConfig, which all other
  -	Petidomo routines can access via getMasterConfig(). The routine
  -	getListConfig(), which is defined in config.c, too, used the "correct"
  -	mechanism to access MasterConfig, even though it could access it
  -	directly. Since I chose the same name ("MasterConfig" :->) for the
  -	local copy of the pointer, gcc warns that this variable shadows the
  -	static one. To get rid of this warning, and since it doesn't make one
  -	bit a difference, getListConfig() accessse the static variable
  -	directly now.
  -
  -	* hermes.c:
  -	Changed ACL semantics: The ACL is processed only if the posting didn't
  -	have a valid password. If it did, the mail is going through in any
  -	case and the ACL is not tested.
  -
  -	* config/index, Makefile.in:
  -	In case no index file is installed, "make install" will create an
  -	example file at the correct location so that the admininstrator
  -	hopefully figures out that there is some work to be done.
  -
  -	* acl.y:
  -	- Added a warning message to be logged when no global ACL file exists.
  -
  -	- Reordered tests in check_local_acl_file: When no listname has been
  -	  given, we don't need to initialize the lexer at all.
  -
  -	* hermes.c:
  -	Petidomo used the mail's envelope to deliver the request for
  -	confirmation. I have changed this to either reply-to or from (if
  -	reply-to is unset), because sendmail will destroy the original
  -	envelope under obscure circumstances.
  -
  -	* main.c: Removed unnecessary cast.
  -
  -	* config.c:
  -	Due to a mix-up in the variable names, Petidomo expanded all list
  -	config file paths incorrectly when the list has a flat hierarchy. That
  -	is fixed now.
  -
  -2001-01-19  Ralf S. Engelschall <rse@engelschall.com>
  -
  -	* Makefile.in:
  -	Provide "make dist" command for rolling distribution tarball.
  -
  -2001-01-19  Peter Simons <simons@computer.org>
  -
  -	* main.c:
  -	Added version information to the start-up log message.
   
  -2001-01-19  Ralf S. Engelschall <rse@engelschall.com>
  +	* Renamed the MTA_Options" tag in the master config file to
  +	"MTAOptions" for consistency.
   
  -	* Makefile.in, main.c, version.c:
  -	First step in GNu shtool version support:
  -	Add version.c and use it for "petidomo --version".
  -	Support for handling version.c in Makefile.in is coming later.
  -
  -	* libconfigfile/config.c, librfc822/address.y, librfc822/decomment.c, libargv/argv.c, acl.y, address-db.c, approve.c, config.c, filter.c, hermes.c, index.c, io.c, mailer.c, members.c, password.c, queue_command.c, queue_posting.c, subscribe.c, unsubscribe.c:
  -	Get rid of all complaints from GCC 2.97
  -	(except for two things which I do not want to change on my own)
  -
   2001-01-19  Peter Simons <simons@computer.org>
  -
  -	* queue_command.c, queue_posting.c:
  -	Incorporated the cookie into the end-of-mail-marker used in the
  -	ack-script, so that the whole mechanism doesn't break when somebody
  -	has the words '[end-of-mail-marker]' in the mail body itself.
  -
  -	* subscribe.c, unsubscribe.c:
  -	Fixed the spelling of the newly added syslog messages.
  -
  -	* main.c:
  -	Moved the initial startup log message up so that it is logged before
  -	the main config file is parsed. Also added the path of the main config
  -	file to the message so that people can see where Petidomo locks for it
  -	in case parsing fails.
  -
  -	* hermes.c, subscribe.c, unsubscribe.c:
  -	Greatly enhanced the log messages Petidomo writes. Made the existing
  -	messages more helpful, added lots of new ones, generally made things
  -	real perfect. Remember: Life is BEAUTIFUL.
   
  -2001-01-19  Ralf S. Engelschall <rse@engelschall.com>
  +	* Changed ACL semantics: The ACL is processed _only_ if the
  +	posting didn't have a valid password. If it did, the mail is going
  +	through in any case and the ACL is not processed.
   
  -	* Makefile.in:
  -	Do not show subdir walking commands
  +	* Added a warning message to be logged when no global ACL file exists.
   
   2001-01-19  Peter Simons <simons@computer.org>
   
  -	* main.c:
  -	Added a message that is logged every time Petidomo starts up. This
  -	message will "dump" the configuration of Petidomo so that the user has
  -	a clue which Petidomo instance is doing what.
  -
  -	* subscribe.c, unsubscribe.c:
  -	When a un-/subscribe command needs confirmation, the request for
  -	confirmation is sent to the address that is supposed to added to or
  -	removed from the list. If, and only if, this address is different than
  -	the one from which the request came, a short mail is sent to the
  -	requestor to inform him what is going on.
  +	* Greatly enhanced the log messages Petidomo writes. Made the
  +	existing messages more helpful, added lots of new ones, generally
  +	made things real perfect. Remember: Life is BEAUTIFUL.
  +
  +	* Added a message that is logged every time Petidomo starts up.
  +	This message will "dump" the configuration of Petidomo so that the
  +	user has a clue which Petidomo instance is doing what.
  +
  +	* When a un-/subscribe command needs confirmation, the request for
  +	confirmation is sent to the address that is supposed to be added
  +	to or to be removed from the list. If, and only if, this address
  +	is different from the one the request came from, a short mail is
  +	sent to the requestor to inform him what is going on.
   
  -	* tool.c, config.c:
  -	Mailing list config files may now have the suffix ".config" or
  +	* Mailing list config files may now have the suffix ".config" or
   	".conf". Similarly, if the list config file is in a separate
   	directory, it may be called <listname>/config or <listname>/conf.
  -
  -	* main.c:
  -	Added code that will set the real user id of the process equal to the
  -	effective user id.
  -
  -	* Makefile.in:
  -	- Word-wrapped long lines to fit into 80 characters per line.
  -	- Updated dependencies.
  -	- Removed BINDIR from FLAGS_TO_PASS as it isn't needed anymore.
  -
  -	* main.c, petidomo.h, queue_command.c, queue_posting.c:
  -	Petidomo needs to know the path to the executable in order to write
  -	the ack-spool file, which starts Petidomo again to process the
  -	acknowledged command or posting. I used BINDIR for that, but realized
  -	that this sucks when somebody manually moves the binary. Hence, I am
  -	using the contents of argv[0] now, normalized to an absolute path.
  -	This value is stored in the global variable who_am_i, which the
  -	queue_*() routines now use.
  -
  -2001-01-19  Ralf S. Engelschall <rse@engelschall.com>
  -
  -	* generate_cookie.c:
  -	Get rid of the following GCC complains:
  -	generate_cookie.c: In function `generate_cookie':
  -	generate_cookie.c:58: warning: implicit declaration of function `strlen'
  -	generate_cookie.c: In function `MD5Update':
  -	generate_cookie.c:245: warning: declaration of `index' shadows global declaration
  -	generate_cookie.c:260: warning: implicit declaration of function `memcpy'
  -	generate_cookie.c: In function `MD5Final':
  -	generate_cookie.c:286: warning: declaration of `index' shadows global declaration
  -	generate_cookie.c:303: warning: implicit declaration of function `memset'
  -
  -	* archive.c:
  -	As GCC complained: There is an ISO 9899:1990 (``ISO C'') function
  -	clock(3), so we have a symbol conflict here. Get rid of this by renaming
  -	our symbol.
   
  -	* libtext/text.h:
  -	Do not use C++ comments in ANSI C
  +	* Added code that will set the real user id of the process equal
  +	to the effective user id. Makes life easier for people who use
  +	Petidomo as a setuid binary.
   
   2001-01-18  Ralf S. Engelschall <rse@engelschall.com>
  -
  -	* README, acl.y, acl_scan.l, address-db.c, approve.c, archive.c, authen.c, config.c, filter.c, generate_cookie.c, handleacl.c, help.c, hermes.c, index.c, io.c, listserv.c, mailer.c, main.c, members.c, parsearray.c, password.c, petidomo.h, queue_command.c, queue_posting.c, rfcparse.c, subscribe.c, tool.c, unsubscribe.c:
  -	As we agreed today, Petidomo is now open because licensed under GPL and
  -	always will be licensed under GPL, so use "Petidomo" as the program name
  -	everywhere and consistently.
  -
  -	* Makefile.in:
  -	Install petidomo-xxxx tools
   
  -	* Makefile.in: Show were we are operating
  +	* Added two useful scripts for list administrators:
  +	petidomo-approve and petidomo-kickout.
   
  -	* ChangeLog: Start filling ChangeLog...
  -
  -	* README: *** empty log message ***
  -
  -2001-01-18  Peter Simons <simons@computer.org>
  -
  -	* petidomo-approve, petidomo-kickout:
  -	Add old RSE admin scripts
  -
  -2001-01-18  Ralf S. Engelschall <rse@engelschall.com>
  +2001-01-16  Peter Simons <simons@computer.org>
   
  -	* config.c: ListACLFile -> ACLFile
  +	* Added the "acknowledge" feature for mailing list postings.
   
  -	* Makefile.in: New layout
  +	* Added new action keyword to the Access Control Language:
  +	"approve". This keyword will -- unlike "pass" -- not only pass the
  +	mail, but will also make sure that the mail passes all other
  +	authorization controls. This means, the mail will be treated as if
  +	the Petidomo master password had been provided.
   
  -	* configure.in, Makefile.in:
  -	Switch to GNU shtool
  +	* The ACL is now tested _before_ anything else, meaning that you
  +	can use the "approve" action to bypass all other tests.
   
  -	* etc/install-sh:
  -	Remove obsolete install-sh
  +2001-01-15  Peter Simons <simons@computer.org>
   
  -	* etc/shtool: Add GNU shtool
  +	* The "ListType" keyword is no longer a mandatory directive in the
  +	list's config file; it now defaults to "open".
   
  -	* Makefile.in:
  -	fix install-testlist target
  +	* List config's "AllowPublicSubscripiton" does not exist anymore.
  +	Now we have "SubscriptionType" with valid values "public", "admin"
  +	or "acknowledged".
   
  -2001-01-16  Peter Simons <simons@computer.org>
  +	* Added "AckQueueDirectory" directive to the master config file.
   
  -	* subscribe.c, unsubscribe.c:
  -	When a request for confirmation is required, the originator of the
  -	command will receive a short mail, telling him that this is so, so
  -	that he knows what's going on.
  -
  -	* subscribe.c, unsubscribe.c:
  -	Delayed the processing of the acknowledgment-requirement so that you
  -	don't have to ack commands that will fail anyways.
  -
  -	* Makefile.in, address-db.c, hermes.c, petidomo.h:
  -	Implemented the acked-once feature.
  -
  -	* acl.y, acl_scan.l, handleacl.c, petidomo.h:
  -	Added new action keyword to the Access Control Language: approve. This
  -	keyword will -- unlike to "pass" -- not only pass the mail, but will
  -	also make sure that the mail passes all other authorization controls.
  -	This means, the mail will be treated as if the Petidomo master
  -	password had been given in the header.
  -
  -	* approve.c:
  -	Added include of sys/types.h. Required on some systems to be able to
  -	include regex.h.
  -
  -	* hermes.c:
  -	Moved the call to checkACL() before anything else is tested regarding
  -	authorization. Combined with the new "approve" action in the ACL file,
  -	this allows to pass all other authentication mechanisms with the ACL.
  -
  -2001-01-15  Peter Simons <simons@computer.org>
  +	* Removed the whole concept of "alien subscription". It was stupid
  +	to begin with and now that we'll have acknowledged subscriptions,
  +	it is useless, too.
   
  -	* hermes.c:
  -	Added code that will request confirmation when posting to a list that
  -	is set to "acknowledged".
  -
  -	* Makefile.in, approve.c, main.c, petidomo.h:
  -	Implemented the approve mode, where incoming mails are searched for
  -	confirmation cookies and the apropriate queue entries will be
  -	executed.
  -
  -	* subscribe.c:
  -	The call to queue_command() had the command wrong.
  -
  -	* subscribe.c, unsubscribe.c:
  -	Added code that will send the "request for confirmation" mail out when
  -	apropriate.
  -
  -	* hermes.c:
  -	Cosmetic change: Reformatted the source.
  -
  -	* config.c, config/list-config:
  -	- ListType is no longer a required parameter; it now defaults to "open".
  -
  -	* hermes.c, listserv.c, main.c, petidomo.h:
  -	Had to make is_approved a global variable, because it is actually
  -	tested in subroutines of listserv_main() and hermes_main(), like
  -	subscribe(), which's parameter list I don't want to change.
  -
  -	* petidomo.h, queue_command.c, queue_posting.c:
  -	queue_command() and queue_posting() will now return the cookie used as
  -	filename, so that the calling code can mail back the request for
  -	confirmation.
  -
  -	* config.c, config/list-config, petidomo.h, subscribe.c, unsubscribe.c:
  -	List's "AllowPublicSubscripiton" does not exist anymore. Now we have
  -	"SubscriptionType" with valid values "public", "admin" or
  -	"acknowledged".
  -
  -	* config/petidomo.conf:
  -	- Added Ack_Queue_Dir keyword.
  -
  -	- Changed default of List_Directory from LOCALSTATEDIR to
  -	  LOCALSTATEDIR/lists.
  -
  -	* config/list-config, unsubscribe.c, config.c, petidomo.h, subscribe.c:
  -	Removed the whole concept of "alien subscription". It was stupid to
  -	begin with and now that we'll have acknowledged subscriptions, it is
  -	useless, too.
  -
  -	* Makefile.in, config.c, petidomo.h, queue_command.c, queue_posting.c:
  -	Implemented spooling mechanism for requests and postings that need an
  -	acknowledgement to be processed. The code is there, it just isn't
  -	called yet.
  +	* Added "acknowledge" feature for un-/subscription requests.
   
  -	* hermes.c, listserv.c, main.c:
  -	Added --approved command line parameter, which is treated as a
  +	* Added --approved command line parameter, which is treated as a
   	boolean. Whether it is set or not will be passed through to
  -	listserv_main() and to hermes_main(). The parameter will be used by
  -	the spooling mechanism.
  +	listserv_main() and to hermes_main(). The parameter will be used
  +	by the "acknowledge" mechanism.
   
   2001-01-11  Peter Simons <simons@computer.org>
  -
  -	* config.c, config/list-config, petidomo.h:
  -	Added config entry "AcknowledgementFile" to the mailing list's config file.
  -
  -	* Makefile.in, configure.in, generate_cookie.c, petidomo.h:
  -	Added generate_cookie() routine taken from mapSoN.
  -
  -	* unsubscribe.c:
  -	The requestor will now receive a mail telling him something went wrong
  -	when he tries to unsubscribe an address without specifying a list
  -	name.
  -
  -2001-01-10  Peter Simons <simons@computer.org>
   
  -	* help.c, members.c, subscribe.c, unsubscribe.c:
  -	Set the right margin for word-wrapping to 70 characters instead of 75.
  +	* Added config entry "AcknowledgementFile" to the mailing list's
  +	config file.
   
  -	* subscribe.c:
  -	The requestor will now receive a mail telling him something went wrong
  -	when he tries to subscribe an address without specifying a list name.
  +	* The requestor will now receive a mail telling him something went
  +	wrong when he tries to un-/subscribe an address without specifying
  +	a (valid) list name.
   
  -	* acl.y:
  -	When running in listserv mode, there is no 'listname' which can be
  -	used to get the mailing list's configuration. Thus, the routine
  -	shouldn't try to got one. Fixed it.
  -
  -	* config.c: Removed debugging output.
  -
   2001-01-08  Peter Simons <simons@computer.org>
   
  -	* acl.y:
  -	Changed the ACL code to use the configured locations of the list's ACL
  -	file rather than the hard-coded one.
  -
  -	* Makefile.in:
  -	Completed the install-testlist target.
  -
  -	* acl.y, archive.c, config.c, help.c, hermes.c, index.c, mailer.c, main.c, members.c, petidomo.h, subscribe.c, tool.c, unsubscribe.c:
  -	Rewrote Petidomo so that virtually any file's path can be configured
  -	at run-time now.
  -
  -	* config/petidomo.conf:
  -	Added example entries for the new keywords "List_Directory",
  -	"Help_File", "ACL_File", and "Index_File".
  -
  -	* config/list-config:
  -	Added example entries for the new keywords "IntroductionFile",
  -	"DescriptionFile", "ACLFile", "HeaderFile", "SignatureFile", and
  -	"AddressFile".
  -
  -	* config/petidomo.acl:
  -	Removed the path of the file in the comment header, since it doesn't
  -	fit anymore anyway.
  -
  -	* Makefile.in: Added dependencies.
  -
  -	* config.c, main.c, petidomo.h:
  -	Petidomo will now expect its master config file at
  -	SYSCONFDIR/petidomo.conf. This location can be changed at run-time
  -	with the command line parameter --masterconf.
  +	* Added "install-testlist" target to the Makefile.
   
  -	* Makefile.in:
  -	Added preliminary install and install-testlist target.
  +	* Rewrote Petidomo so that virtually any file's path can be
  +	configured at run-time now. The directives we suppert in the
  +	master config file are "ListDirectory", "HelpFile", "ACLFile", and
  +	"IndexFile". The ones in the list's config file are
  +	"IntroductionFile", "DescriptionFile", "ACLFile", "HeaderFile",
  +	"SignatureFile", and "AddressFile".
   
  -	* configure.in:
  -	Removed the ETCDIR stuff again. We use sysconfdir instead.
  +	* Added "install" target to the Makefile.
   
   2001-01-06  Peter Simons <simons@computer.org>
  -
  -	* Makefile.in, config.c, configure.in, petidomo.h:
  -	Replaced the old basedir-mechanism in Petidomo, which used to be the
  -	home directory of the petidomo user. Now, Petidomo expects its master
  -	config file in ETCDIR, which is '/etc' per default. All other paths
  -	will be set there at run-time.
  -
  -	* handleacl.c, help.c, hermes.c, index.c, members.c, subscribe.c, unsubscribe.c:
  -	- Added a "Petidomo:" prefix to all subject lines, to distinguish them
  -	  from regular mail. Rejection mails furthermore have the prefix
  -	  "BOUNCE <listaddress>:", mails that need approval have the prefix
  -	  "APROVE <listaddress>:".
  -
  -	- When a mail is rejected due to ACL, the mail body will tell you
  -	  whether the global acl file or the list's local acl file hit.
  -
  -	- If a file "lists/<listname>/header" exists, it contents will be
  -	  added to the headers of the article posted to the list. Be careful
  -	  not to have blank lines in there, as this will screw the whole
  -	  message up.
  -
  -	- When generating the index of available mailing lists, the list type
  -	  will now be typeset in brackets, e.g.: "(public mailing list)".
  -
  -	- The index will no longer contain tabs in the mail body.
  -
  -	* handleacl.c:
  -	The local List_Config variable was potentially used uninitialized.
  -	Fixed that.
  -
  -2000-12-16  Peter Simons <simons@computer.org>
  -
  -	* librfc822/Makefile:
  -	Added dependency to stop parallel make from messing up with the
  -	yacc/lex targets.
  -
  -	* librfc822/decomment.c:
  -	Fixed parsing bug.
  -
  -	* librfc822/address.y:
  -	Added definition of YYSTYPE.
  -
  -	* configure.in:
  -	Use petidomo.h file to determine $srcdir, rather than main.c.
  -
  -	* Makefile.in, main.c, petidomo.h:
  -	Reversed all changes concerning C++ in Petidomo ... it isn't worth the
  -	major rewrite.
  -
  -	* librfc822/.cvsignore:
  -	Ignore yacc and lex files
  -
  -	* librfc822/Makefile, librfc822/address.c, librfc822/address.y, librfc822/address_scan.c, librfc822/address_scan.h, librfc822/address_scan.l, librfc822/address_sep.c, librfc822/decomment.c, librfc822/parse_address.c, librfc822/rfc822.h, librfc822/test.c, libmpools/Makefile, libmpools/mpools.c, libmpools/mpools.h:
  -	- Added GNU GPL copyright headers.
  -	- Cleaned build process up.
  -
  -	* libmpools/Makefile, libmpools/mpools.c, libmpools/mpools.h:
  -	Imported Petidomo 2.2 as found on www.petidomo.com.
  -
  -	* libmpools/Makefile, libmpools/mpools.c, libmpools/mpools.h:
  -	New file.
   
  -	* librfc822/address_scan.c:
  -	Imported Petidomo 2.2 as found on www.petidomo.com.
  +	* The whole concept of the "petidomo" user is gone. Instead,
  +	compile complete paths into the binary and make them run-time
  +	configurable.
  +
  +	* Added a "Petidomo:" prefix to all subject lines, to distinguish
  +	mail sent by Petidomo from regular mail. Rejection mails
  +	furthermore have the prefix "BOUNCE <listaddress>:", mails that
  +	need approval have the prefix "APPROVE <listaddress>:".
  +
  +	* When a mail is rejected due to ACL, the mail body will tell you
  +	whether the global acl file or the list's local acl file hit.
  +
  +	* If a file "lists/<listname>/header" exists, it contents will be
  +	added to the headers of the article posted to the list. Be careful
  +	not to have blank lines in there, as this will screw the whole
  +	message up.
  +
  +	* The result of the INDEX command is no longer generated on the
  +	fly. Instead, the contents of a file is send back, which the
  +	administrator can edit as he wishes -- very much like the HELP
  +	file thing Petidomo had for ever. Consequently, the "ShowOnIndex"
  +	directive in the list's config file is gone.
   
  -	* librfc822/address_scan.c: New file.
  -
  -	* librfc822/address.c:
  -	Imported Petidomo 2.2 as found on www.petidomo.com.
  -
  -	* librfc822/address.c: New file.
  -
  -	* librfc822/decomment.c, librfc822/parse_address.c, librfc822/rfc822.h, librfc822/test.c, librfc822/testaddresslines:
  -	Imported Petidomo 2.2 as found on www.petidomo.com.
  -
  -	* librfc822/decomment.c, librfc822/parse_address.c, librfc822/rfc822.h, librfc822/test.c, librfc822/testaddresslines:
  -	New file.
  -
  -	* librfc822/Makefile, librfc822/address.y, librfc822/address_scan.h, librfc822/address_scan.l, librfc822/address_sep.c:
  -	Imported Petidomo 2.2 as found on www.petidomo.com.
  -
  -	* librfc822/Makefile, librfc822/address.y, librfc822/address_scan.h, librfc822/address_scan.l, librfc822/address_sep.c:
  -	New file.
  -
  -	* Makefile.in:
  -	Added preliminary install target.
  -
  -	* config/petidomo.conf:
  -	Removed reference to firepower altogether; MTA is a required keyword.
  -
   2000-12-15  Peter Simons <simons@computer.org>
   
  -	* config/petidomo.conf:
  -	Removed note about Firepore MTA.
  +	* The whole signature stuff the commercial Petidomo is gone; the
  +	free version does not need this. This, the "AppendSignature"
  +	directive in the list's config file is gone.
   
  -	* config.c:
  -	Hardcoded the base directory /usr/local/petidomo for the moment.
  +	* Removed options "DetachImmediately" and "ShowStatistics" options
  +	from the master config file. These were never used anyway.
   
  -	* libtext/text.h:
  -	Wrapped the header's contents in "extern C" linkage when compiling in
  -	a C++ module.
  -
  -	* Makefile.in:
  -	The petidomo binary will now be linked with $(CXX).
  -	Updated dependencies.
  -
  -	* Makefile.in, config.c, help.c, index.c, members.c, signature.c, subscribe.c, unsubscribe.c:
  -	Removed the signature code and all code that depended on it. In the
  -	new Petidomo, the signature mechanism for server mails will work
  -	differently.
  -
  -	* config.c, config/petidomo.conf, signature.c:
  -	Removed the global configuration options "DetachImmediately" and
  -	"ShowStatistics". Consequently removed all code that deals with these
  -	options, too.
  -
  -	* libargv/Makefile:
  -	The clean target will now erase the argv.info file.
  -
  -	* libargv/.cvsignore:
  -	Ignore the argv.info file.
  -
  -	* Makefile.in, exit.c:
  -	Removed the mail rescue mechanism and all relating code. I guess
  +	* Removed the mail rescue mechanism and all relating code. I guess
   	_nobody_ ever used that mechanism anyway, not even me. :-)
   
  -	* Makefile.in, acl.y, archive.c, argvSetDebugLevel.c, authen.c, config.c, debug.h, exit.c, filter.c, handleacl.c, help.c, hermes.c, index.c, listserv.c, mailer.c, members.c, password.c, rfcparse.c, subscribe.c, tool.c, unsubscribe.c:
  -	 - Removed all debugging code. Now that Petidomo will be "rewritten"
  -	   in C++, I need a new paradigm for debugging anyway and the old
  -	   solution of mine was to messy for my taste anyway.
  -
  -	 - Petidomo no longer cares under what name it has been started. The
  -	   different modes of operation will now be distinguished by a
  -	   mandatory command line parameter.
  +	* Petidomo no longer cares under what name it has been started.
  +	The different modes of operation will now be distinguished by the
  +	mandatory command line parameter "--mode".
   
  -	* Makefile.in:
  -	Added support for C++ source modules within Petidomo.
  -
   2000-12-14  Peter Simons <simons@computer.org>
  -
  -	* Makefile.in:
  -	Modified the main Makefile so that it will pass the values determined
  -	by Autoconf down to the libraries.
  -
  -	* Makefile.in:
  -	FreeBSD's make again: That stupid thing really doesn't grasp $< targets.
  -
  -	* Makefile.in:
  -	FreeBSD's make sucks big time: It doesn't honor the -C flag. Hence we
  -	have to change into the target directory before calling make.
  -
  -	* Makefile.in:
  -	BSD make doesn't understand $< like GNU make does, thus it is better
  -	to explicitely name the targets for the sake of portability.
  -
  -	* Makefile.in:
  -	Rewrote the makefile to not require GNU make.
   
  -	* libargv/Makefile, libconfigfile/Makefile, liblists/Makefile, libtext/Makefile:
  -	Removed unused suffix .a from the .SUFFIXES target.
  +	* Removed the complimentary mail2news.c program from the
  +	distribution. The program isn't tested, it isn't documented ... so
  +	away with it.
   
  -	* .cvsignore, configure.in:
  -	 - Libraries do not need Autoconf anymore, thus I removed the
  -	   AC_CONFIG_SUBDIRS call.
  -
  -	 - Added -O3 to CFLAGS for the sake of good optimization.
  -
  -	* Makefile.in: Updated dependencies.
  -
  -	* libargv/.cvsignore, libargv/Makefile, libconfigfile/Makefile, libconfigfile/SMakefile, libconfigfile/configure.in, liblists/Makefile, liblists/SMakefile, liblists/configure.in, liblists/lists.h, liblists/lists.h.in, libtext/Makefile, libtext/SMakefile, libtext/configure.in, libtext/test.txt:
  -	 - Removed smake build and autoconf from the libraries.
  -	 - Removed unused files.
  -
  -	* libargv/Makefile, libargv/SMakefile, libargv/configure.in:
  -	Added a real makefile.
  -
  -	* libargv/argvSetDebugLevel.c:
  -	The file is never used here.
  -
  -2000-12-13  Peter Simons <simons@computer.org>
  -
  -	* libargv/argvSetDebugLevel.c, libargv/test.c, libconfigfile/config.c, libconfigfile/configfile.h, liblists/lists.c, liblists/lists.h.in, libtext/easy_pattern_match.c, libtext/easy_sprintf.c, libtext/find_next_line.c, libtext/find_string.c, libtext/text.h, libtext/transform_text.c, libtext/wordwrap.c:
  -	Added correct GPL copyright headers.
  -
  -	* libtext/CustomTokenIterator.cpp, libtext/RegexTokenizer.cpp, libtext/RegexTokenizer_test.cpp, libtext/TokenIterator.cpp, libtext/TokenIterator_test.cpp, libtext/text.hpp, libtext/tokenizer_test.cpp:
  -	Removed unused C++ code.
  -
  -	* Makefile.in:
  -	Cosmetic changes to the Makefile ... nothing important.
  -
  -	* Makefile.in, configure.in:
  -	After changing librfc822 to get along without libmpools, the library
  -	can (and has been) removed from Petidomo.
  -
  -	* debug.h:
  -	This header file defines the debug modules Petidomo supports.
  -
  -	* configure.in:
  -	The source for the configure script generated by Autoconf.
  -
  -	* petidomo.h:
  -	All internal prototypes and definitions.
  -
  -	* etc/install-sh:
  -	Autoconf needs this script in order to run sub-configure scripts.
  -
  -	* liblists/lists.h.in, libtext/CustomTokenIterator.cpp, libtext/RegexTokenizer.cpp, libtext/RegexTokenizer_test.cpp, libtext/TokenIterator.cpp, libtext/TokenIterator_test.cpp, libtext/test.txt, libtext/text.hpp, libtext/tokenizer_test.cpp, liblists/Makefile, liblists/SMakefile, liblists/configure.in, liblists/lists.c, liblists/lists.h, libtext/Makefile, libtext/SMakefile, libtext/configure.in, libtext/easy_pattern_match.c, libtext/easy_sprintf.c, libtext/find_next_line.c, libtext/find_string.c, libtext/text.h, libtext/transform_text.c, libtext/wordwrap.c:
  -	Imported latest version.
  -
  -	* libconfigfile/Makefile, libconfigfile/SMakefile, libconfigfile/config.c, libconfigfile/configfile.h, libconfigfile/configure.in:
  -	Imported latest version of the library.
  -
  -	* libargv/NEWS, libargv/SMakefile, libargv/argv.texi, libargv/argv_loc.h, libargv/configure.in, libargv/Makefile, libargv/Makefile.inc, libargv/_argv.h, libargv/argv.c, libargv/argv.h, libargv/argvSetDebugLevel.c, libargv/test.c:
  -	Imported libargv version 2.4.0.
  -
  -	* acl.y, acl_scan.l, archive.c, argvSetDebugLevel.c, authen.c, config.c, exit.c, filter.c, handleacl.c, help.c, hermes.c, index.c, io.c, listserv.c, mailer.c, main.c, members.c, parsearray.c, password.c, rfcparse.c, signature.c, subscribe.c, tool.c, unsubscribe.c:
  -	 - Added correct GNU GPL copyright statements to the files.
  -	 - Removed unnecessary include statements.
  -
  -	* Makefile, Makefile.in:
  -	Rewrote the build process from the scratch.
  -
  -	* version.h:
  -	The old versioning mechanism needs to be replaced any time soon.
  -
  -	* archive.h, authen.h, filter.h, mailer.h, rfcparse.h:
  -	The contents of these headers is now included in petidomo.h.
  -
  -	* signature.c, unregsig.c, unregsig.h:
  -	Renamed unregsig module to signature. Now that Petidomo is released
  -	under GPL, there is no such thing as an "unregistered" version
  -	anymore.
  -
  -	* acl.c, acl_scan.c, acl_scan.h:
  -	Removed dependent files from CVS repository.
  -
  -	* etc/mail2news.c:
  -	The program isn't tested, it isn't documented ... so away with it.
  -
  -	* docs/Makefile, docs/petidomo.tex:
  -	 - Removed all use of html.sty.
  -
  -	 - Removed all references to the CGI manager.
  -
  -	 - Removed autoconf support.
  -
  -	 - Removed the index.
  -
  -	 - Reformatted the document to look good and to compile without
  -	   warnings.
  -
  -	* docs/Makefile:
  -	Don't erase the EPS files at 'clean'.
  -
  -	* docs/directory-struct.eps, docs/ml-principle1.eps, docs/ml-principle2.eps:
  -	Adding EPS files to repository, because those are really hard to
  -	generate correctly.
  -
  -	* docs/GNUmakefile, docs/Makefile:
  -	Renamed GNUmakefile to Makefile; there's nothing in this makefile
  -	that's specific to GNU make.
  -
  -	* docs/GNUmakefile:
  -	Added '-f' flag to the 'rm' call in the clean target.
  -
  -	* docs/GNUmakefile:
  -	Cleaned the Makefile up a lot. Removed explicit targets whereever an
  -	implicit target will do.
  -
  -	* docs/GNUmakefile, docs/Xstation.bm, docs/directory-struct.fig, docs/ml-principle1.fig, docs/ml-principle2.fig, docs/petidomo.tex, docs/router.bm, docs/world.bm:
  -	Imported Petidomo 2.2 as found on www.petidomo.com.
  -
  -	* docs/GNUmakefile, docs/Xstation.bm, docs/directory-struct.fig, docs/ml-principle1.fig, docs/ml-principle2.fig, docs/petidomo.tex, docs/router.bm, docs/world.bm:
  -	New file.
  -
  -	* acl.c, acl_scan.c, acl_scan.h:
  -	Imported Petidomo 2.2 as found on www.petidomo.com.
  -
  -	* acl.c, acl_scan.c, acl_scan.h:
  -	New file.
  -
  -	* subscribe.c, tool.c, unregsig.c, unregsig.h, unsubscribe.c, version.h:
  -	Imported Petidomo 2.2 as found on www.petidomo.com.
  -
  -	* subscribe.c, tool.c, unregsig.c, unregsig.h, unsubscribe.c, version.h:
  -	New file.
  -
  -	* mailer.c, mailer.h, main.c, members.c, parsearray.c, password.c, rfcparse.c, rfcparse.h:
  -	Imported Petidomo 2.2 as found on www.petidomo.com.
  -
  -	* mailer.c, mailer.h, main.c, members.c, parsearray.c, password.c, rfcparse.c, rfcparse.h:
  -	New file.
  -
  -	* filter.c, filter.h, handleacl.c, help.c, hermes.c, index.c, io.c, listserv.c:
  -	Imported Petidomo 2.2 as found on www.petidomo.com.
  -
  -	* filter.c, filter.h, handleacl.c, help.c, hermes.c, index.c, io.c, listserv.c:
  -	New file.
  -
  -	* Makefile, acl.y, acl_scan.l, archive.c, archive.h, argvSetDebugLevel.c, authen.c, authen.h, config.c, exit.c:
  -	Imported Petidomo 2.2 as found on www.petidomo.com.
  -
  -	* Makefile, acl.y, acl_scan.l, archive.c, archive.h, argvSetDebugLevel.c, authen.c, authen.h, config.c, exit.c:
  -	New file.
  -
  -	* filter/pgp-decrypt.sh, filter/pgp-encrypt.sh:
  -	Imported Petidomo 2.2 as found on www.petidomo.com.
  -
  -	* filter/pgp-decrypt.sh, filter/pgp-encrypt.sh:
  -	New file.
  -
  -	* filter/insert-name-in-subject.sh, filter/rfc2369.sh:
  -	Imported Petidomo 2.2 as found on www.petidomo.com.
  -
  -	* filter/insert-name-in-subject.sh, filter/rfc2369.sh:
  -	New file.
  -
  -	* libargv/argv.c, libargv/argv.h, libargv/argvSetDebugLevel.c, libargv/test.c:
  -	Imported Petidomo 2.2 as found on www.petidomo.com.
  -
  -	* libargv/argv.c, libargv/argv.h, libargv/argvSetDebugLevel.c, libargv/test.c:
  -	New file.
  -
  -	* libargv/Makefile, libargv/Makefile.inc, libargv/_argv.h, libconfigfile/Makefile, libconfigfile/config.c, libconfigfile/configfile.h, libtext/transform_text.c, libtext/wordwrap.c:
  -	Imported Petidomo 2.2 as found on www.petidomo.com.
  -
  -	* libargv/Makefile, libargv/Makefile.inc, libargv/_argv.h, libconfigfile/Makefile, libconfigfile/config.c, libconfigfile/configfile.h, libtext/transform_text.c, libtext/wordwrap.c:
  -	New file.
  -
  -	* liblists/Makefile, liblists/lists.c, liblists/lists.h, libtext/Makefile, libtext/easy_pattern_match.c, libtext/easy_sprintf.c, libtext/find_next_line.c, libtext/find_string.c, libtext/text.h:
  -	Imported Petidomo 2.2 as found on www.petidomo.com.
  -
  -	* liblists/Makefile, liblists/lists.c, liblists/lists.h, libtext/Makefile, libtext/easy_pattern_match.c, libtext/easy_sprintf.c, libtext/find_next_line.c, libtext/find_string.c, libtext/text.h:
  -	New file.
  -
  -	* config/petidomo.acl, config/petidomo.conf, etc/mail2news.c:
  -	Imported Petidomo 2.2 as found on www.petidomo.com.
  -
  -	* config/petidomo.acl, config/petidomo.conf, etc/mail2news.c:
  -	New file.
  -
  -	* README, config/help, config/list-acl, config/list-config:
  -	Imported Petidomo 2.2 as found on www.petidomo.com.
  -
  -	* README, config/help, config/list-acl, config/list-config:
  -	New file.
  -
  -	* COPYING, ChangeLog:
  -	Imported Petidomo 2.2 as found on www.petidomo.com.
  -
  -	* COPYING, ChangeLog:
  -	New file.
  -
  -
  -
  -
  -Petidomo v4
  -===========
  -
  -2000-12-01  Peter Simons <simons@computer.org>
  -
  -	* [...TO BE FILLED IN BY PETI...]
  -
   2000-12-01  Ralf S. Engelschall <rse@engelschall.com>
   
  -	* Included various cleanups and adjustments derived from the original
  -	OSSP hacks for Petidomo 2.2
  +	* Added Perl scripts petidomo-approve and petidomo-kickout which
  +	are useful to reduce the amount of effort required in daily
  +	mailing lists administration.
   
  -	* Added Perl scripts petidomo-approve and petidomo-kickout which are
  -	useful to reduce the amount of effort required in daily mailing lists
  -	administration.
  -
   2000-12-01  Peter Simons <simons@computer.org>
  -
  -	* The base of this work off is again the latest free
  -	version of Petidomo: 2.2, as released under GPLv2 on
  -	http://www.petidomo.com/download/OpenPetidomo/source/ by
  -	CyberSolutions GmbH.
  -
  -Petidomo v3
  -===========
  -
  -	* There are no ChangeLog entries available for Petidomo v3, but that
  -	doesn't matter because Petidomo v4 is based on the last version of
  -	Petidomo v2. Nevertheless the non-free Petidomo v3 provided mainly an
  -	optional user-interface and the ability to directly deliver mails in
  -	parallel via SMTP.
  -
  -Petidomo v2
  -===========
  -
  -1999-06-01  Peter Simons  <simons@petidomo.com>
   
  -	* Re-released under GNU GPL.
  +	* CyberSolutions GmbH has released a version of Petidomo 2.2 under
  +	GPL at <http://www.petidomo.com/download/OpenPetidomo/source/>.
  +	Now that Petidomo is available under a free license again, I
  +	imported these sources and started working it. The free version
  +	will be released as part of the Open Structured Server Platform
  +	(OSSP) project. Financing has kindly been provided by the Cable
  +	and Wireless Corporation.
  +
  +1999-11-15  Peter Simons  <simons@petidomo.com>
  +
  +	* Petidomo has been sold to CyberSolutions GmbH, Germany. All work
  +	on it stops here. They will release a new version (Petidomo III)
  +	as a commercial product. The free branch of the program is dead.
   
   1998-08-20  Peter Simons  <simons@petidomo.com>
   

From ossp-cvs-owner@ossp.org  Sun Feb 18 01:27:37 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f1I0Rao83415; Sun, 18 Feb 2001 01:27:36 +0100 (CET)
Date: Sun, 18 Feb 2001 01:27:36 +0100 (CET)
Message-Id: <200102180027.f1I0Rao83415@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/petidomo ChangeLog
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   18-Feb-2001 01:27:36
  Branch: HEAD                             Handle: 2001021800273600

  Modified files:
    ossp-pkg/petidomo       ChangeLog

  Log:
    Updated ChangeLog.

  Summary:
    Revision    Changes     Path
    1.5         +7  -0      ossp-pkg/petidomo/ChangeLog
  ____________________________________________________________________________

  Index: ossp-pkg/petidomo/ChangeLog
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 ChangeLog
  --- ossp-pkg/petidomo/ChangeLog	2001/02/18 00:20:04	1.4
  +++ ossp-pkg/petidomo/ChangeLog	2001/02/18 00:27:36	1.5
  @@ -1,3 +1,10 @@
  +2001-02-18  Peter Simons  <simons@peti.cryp.to>
  +
  +	* Per default, Petidomo will not be compiled with '-g -O2' as it
  +	is common for GNU autoconf programs. I don't believe in these kind
  +	of defaults, the user should choose his CFLAGS himself. The '-g'
  +	is particularly annoying.
  +
   2001-02-17  Peter Simons <simons@computer.org>
   
   	* Updated the documentation for the new version.

From ossp-cvs-owner@ossp.org  Sun Feb 18 01:33:46 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f1I0Xj683880; Sun, 18 Feb 2001 01:33:45 +0100 (CET)
Date: Sun, 18 Feb 2001 01:33:45 +0100 (CET)
Message-Id: <200102180033.f1I0Xj683880@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/petidomo/docs petidomo.tex
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   18-Feb-2001 01:33:23
  Branch: HEAD                             Handle: 2001021800332300

  Modified files:
    ossp-pkg/petidomo/docs  petidomo.tex

  Log:
    Removed all references to petidomo.com and cys.de.

  Summary:
    Revision    Changes     Path
    1.7         +15 -15     ossp-pkg/petidomo/docs/petidomo.tex
  ____________________________________________________________________________

  Index: ossp-pkg/petidomo/docs/petidomo.tex
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 petidomo.tex
  --- ossp-pkg/petidomo/docs/petidomo.tex	2001/02/17 23:06:05	1.6
  +++ ossp-pkg/petidomo/docs/petidomo.tex	2001/02/18 00:33:23	1.7
  @@ -2,7 +2,7 @@
   %
   % Petidomo Manual
   %
  -% $Header: /e/ossp/cvs/ossp-pkg/petidomo/docs/petidomo.tex,v 1.6 2001/02/17 23:06:05 simons Exp $
  +% $Header: /e/ossp/cvs/ossp-pkg/petidomo/docs/petidomo.tex,v 1.7 2001/02/18 00:33:23 simons Exp $
   %
   \typearea[2cm]{12}
   \usepackage{lastpage}
  @@ -1384,7 +1384,7 @@
   instead. Here is an example:
   \begin{quote}
   \begin{verbatim}
  -From: simons@petidomo.com (Peter Simons)
  +From: simons@computer.org (Peter Simons)
   Subject: Cats are the most beautiful animals in the world.
   
   approve let me post
  @@ -1404,7 +1404,7 @@
   added.) Here is the same example as above now using the headers:
   \begin{quote}
   \begin{verbatim}
  -From: simons@petidomo.com (Peter Simons)
  +From: simons@computer.org (Peter Simons)
   Subject: Cats are the most beautiful animals in the world.
   Approve: let me post
   
  @@ -1637,12 +1637,12 @@
   \begin{quote}
   \begin{verbatim}
   Date: Sat, 28 Jun 1997 19:59:18 +0200 (MET DST)
  -From: testlist-owner@peti.cys.de (Petidomo Mailing List Server)
  -To: simons@cys.de
  -Cc: testlist-owner@peti.cys.de
  +From: testlist-owner@example.org (Petidomo Mailing List Server)
  +To: simons@example.org
  +Cc: testlist-owner@example.org
   Subject: Your posting to list "testlist" was rejected
   Precedence: junk
  -Sender: testlist-owner@peti.cys.de
  +Sender: testlist-owner@example.org
   
   Dear poster,
   
  @@ -1653,10 +1653,10 @@
   
   >From simons  Sat Jun 28 19:59:17 1997
   Received: from [[UNIX: localhost]]
  -        by peti.cys.de (8.8.5/8.8.4) id TAA16959
  +        by example.org (8.8.5/8.8.4) id TAA16959
   Date: Sat, 28 Jun 1997 19:59:17 +0200 (MET DST)
  -Message-Id: <199706281759.TAA16959@peti.cys.de>
  -From: Peter Simons <simons@cys.de>
  +Message-Id: <199706281759.TAA16959@example.org>
  +From: Peter Simons <simons@example.org>
   To: testlist
   Subject: MAKE MONEY FAST
   Mime-Version: 1.0 (generated by tm-edit 7.92)
  @@ -1696,7 +1696,7 @@
   to be included in quotes. An ACL statement like this:
   \begin{quote}
   \begin{verbatim}
  -if from == simons@petidomo.com then drop;
  +if from == simons@computer.org then drop;
   \end{verbatim}
   \end{quote}
   will cause Petidomo to abort with an error, because it can't parse
  @@ -1708,8 +1708,8 @@
   Petidomo:
   \begin{quote}
   \begin{verbatim}
  -if from == "simons@petidomo.com" then
  -        forward postmaster@petidomo.com;
  +if from == "simons@computer.org" then
  +        forward postmaster@example.org;
   \end{verbatim}
   \end{quote}
   
  @@ -1791,7 +1791,7 @@
   A nice example for what this feature can be used is the following:
   \begin{quote}
   \begin{verbatim}
  -if (address == "simons@petidomo.com") then
  +if (address == "simons@computer.org") then
          filter "/usr/local/libexec/petidomo/simons.filter";
   \end{verbatim}
   \end{quote}
  @@ -1905,7 +1905,7 @@
   
   \item Create a PGP key pair by calling `pgp -kg''. As user-id enter
   the address of the mailing list itself, for example: ``The secret
  -mailing list $<$secretlist@petidomo.com$>$''.
  +mailing list $<$secretlist@example.org$>$''.
   
   \item Create a \file{config.txt} file for PGP in the \file{.pgp}
   directory and insert the appropriate user id there.

From ossp-cvs-owner@ossp.org  Sun Feb 18 02:03:01 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f1I12cC85917; Sun, 18 Feb 2001 02:02:38 +0100 (CET)
Date: Sun, 18 Feb 2001 02:02:38 +0100 (CET)
Message-Id: <200102180102.f1I12cC85917@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/petidomo/docs petidomo.tex
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   18-Feb-2001 02:02:08
  Branch: HEAD                             Handle: 2001021801020800

  Modified files:
    ossp-pkg/petidomo/docs  petidomo.tex

  Log:
    Used the \file{} macro rather than setting the font directly.

  Summary:
    Revision    Changes     Path
    1.8         +44 -42     ossp-pkg/petidomo/docs/petidomo.tex
  ____________________________________________________________________________

  Index: ossp-pkg/petidomo/docs/petidomo.tex
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 petidomo.tex
  --- ossp-pkg/petidomo/docs/petidomo.tex	2001/02/18 00:33:23	1.7
  +++ ossp-pkg/petidomo/docs/petidomo.tex	2001/02/18 01:02:08	1.8
  @@ -2,7 +2,7 @@
   %
   % Petidomo Manual
   %
  -% $Header: /e/ossp/cvs/ossp-pkg/petidomo/docs/petidomo.tex,v 1.7 2001/02/18 00:33:23 simons Exp $
  +% $Header: /e/ossp/cvs/ossp-pkg/petidomo/docs/petidomo.tex,v 1.8 2001/02/18 01:02:08 simons Exp $
   %
   \typearea[2cm]{12}
   \usepackage{lastpage}
  @@ -48,8 +48,8 @@
   \section{Building the Binaries}
   
   Untar the source archive of Petidomo in a directory of your choice
  -like {\sf /usr/local/src} or your home directory. This will create a
  -directory called {\sf petidomo-VERSION}, where the ``{\sf VERSION}''
  +like \file{/usr/local/src} or your home directory. This will create a
  +directory called \file{petidomo-VERSION}, where the ``VERSION''
   part is called exactly as in the file name of the tar archive. Change
   into this directory.
   
  @@ -67,36 +67,36 @@
   
   \item[{-}{-}help] Display the complete list of command line options.
   
  -\item[{-}{-}prefix] The the {\sf PREFIX} for all following paths. The
  -default is {\sf /usr/local}.
  +\item[{-}{-}prefix] The the \file{PREFIX} for all following paths. The
  +default is \file{/usr/local}.
   
  -\item[{-}{-}exec-prefix] Set the {\sf EPREFIX} for all following
  +\item[{-}{-}exec-prefix] Set the \file{EPREFIX} for all following
   paths. This is useful in case you want to install binaries into a
   different directory hierarchy than normal text files, but usually the
  -{\sf EPREFIX} is identical to {\sf PREFIX}. The default is {\sf
  -PREFIX}.
  +\file{EPREFIX} is identical to \file{PREFIX}. The default is
  +\file{PREFIX}.
   
   \item[{-}{-}bindir] Set the directory where the binaries should be
  -installed. The default is {\sf EPREFIX/bin}.
  +installed. The default is \file{EPREFIX/bin}.
   
   \item[{-}{-}libexecdir] Set the directory where executables should be
   installed that will be called by Petidomo but not by the user directly
  -(like posting filters). The default is {\sf EPREFIX/libexec}.
  +(like posting filters). The default is \file{EPREFIX/libexec}.
   
   \item[{-}{-}datadir] Set the directory where read-only
   architecture-independent data files should be installed (like the help
  -file). The default is {\sf PREFIX/share}.
  +file). The default is \file{PREFIX/share}.
   
   \item[{-}{-}sysconfdir] Set the directory where read-only
  -configuration files should be installed. The default is {\sf
  -PREFIX/etc}.
  +configuration files should be installed. The default is
  +\file{PREFIX/etc}.
   
   \item[{-}{-}localstatedir] Set the directory where modifiable
   data files should be installed (like the approve-queue or the mailing
  -list config files). The default is {\sf PREFIX/var}.
  +list config files). The default is \file{PREFIX/var}.
   
   \item[{-}{-}mandir] Set the directory where man documentation files
  -should be installed. The default is {\sf PREFIX/man}.
  +should be installed. The default is \file{PREFIX/man}.
   
   \end{description}
   
  @@ -169,7 +169,7 @@
   \end{quote}
   to start the building process. Petidomo has been tested with various
   flavours of the make utility and all of them seem to work fine. If in
  -doubt, try GNU Make, which is available from {\sf ftp.gnu.org}.
  +doubt, try GNU Make, which is available from ftp.gnu.org.
   
   Petidomo has also been built using parallel builds. This is useful if
   you have a multi-processer system. You can do this with most make
  @@ -254,9 +254,9 @@
   
   To run Petidomo via sendmail --- what is what you want to do ---, you
   have to create apropriate aliases for it. You can do this by adding
  -the folling lines to your {\sf aliases} file, which usually resides in
  -{\sf /etc/aliases} or, with newer sendmail versions, in {\sf
  -/etc/mail/aliases}:
  +the folling lines to your aliases file, which usually resides in
  +\file{/etc/aliases} or, with newer sendmail versions, in
  +\file{/etc/mail/aliases}:
   \begin{quote}
   \begin{verbatim}
   petidomo-manager:   postmaster
  @@ -281,7 +281,7 @@
   testlist-owner:     petidomo-manager
   \end{verbatim}
   \end{quote}
  -Having done all this, execute the {\sf newaliases} utility to rebuild
  +Having done all this, execute the newaliases(1) utility to rebuild
   sendmail's internal database. Your changes will not have any effect
   unless you do this.
   
  @@ -303,9 +303,9 @@
   foobar:             "/tmp/foobar-mail"
   \end{verbatim}
   \end{quote}
  -to your aliases file and execute {\sf newaliases}. Then send an e-mail
  -to the address ``foobar''. The contents of this mail will be stored in
  -the file {\sf /tmp/foobar-mail} then and we are interested in the user
  +to your aliases file and execute newaliases(1). Then send an e-mail to
  +the address ``foobar''. The contents of this mail will be stored in
  +the file \file{/tmp/foobar-mail} then and we are interested in the user
   who owns this file:
   \begin{quote}
   \begin{verbatim}
  @@ -325,7 +325,7 @@
   installation. This is the default, because all files are installed
   with read permisson for everybody. Also, all directories allow access
   to anybody by default. But ``daemon'' also needs write access to the
  -``localstatedir'' --- {\sf /usr/local/var/petidomo} per default. You
  +``localstatedir'' --- \file{/usr/local/var/petidomo} per default. You
   can ensure this by executing the command:
   \begin{quote}
   \begin{verbatim}
  @@ -338,28 +338,29 @@
   figured that if you are the kind of person who wants to do things like
   this, you won't need an explanation how to do it anyway. Just that
   much information for you: Petidomo does not actually write to the
  -``localstatdir'', but only to the subdirectory {\sf ack-queue} located
  +``localstatdir'', but only to the subdirectory \file{ack-queue} located
   in it.
   
  -Of course, you do not necessarily need to have the {\sf ack-queue}
  +Of course, you do not necessarily need to have the \file{ack-queue}
   directory owned by ``daemon'', you can also set the group permissions
   apropriately. Furthermore, Petidomo will usually want to write to the
  -{\sf lists} directory located in the ``localstatedir'', because most
  +\file{lists} directory located in the ``localstatedir'', because most
   list administrators tend to place the mailing list archives there, but
   you can enable write access according to the list's configuration once
   you know how you're mailing lists are configured. In case something
  -does not work as expected, check out the syslog messages for the {\sf
  -LOG\_MAIL} facility --- this is where Petidomo logs its error messages.
  +does not work as expected, check out the syslog messages for the
  +LOG\_MAIL facility --- this is where Petidomo logs its error messages.
   
   \section{Configuring Petidomo}
   
   The last step before we can test our installation is to configure
   Petidomo. This is really simple. List the contents of the
   ``sysconfdir'' you chose. If you did not change the default paths,
  -this is {\sf /usr/local/etc}. There you will find two files: {\sf
  -petidomo.conf-sample} and {\sf petidomo.acl-sample}. Just rename them
  -to {\sf petidomo.conf} and {\sf petidomo.acl} respectively and fire up
  -your favorite text editor to edit the file {\sf petidomo.conf}.
  +this is \file{/usr/local/etc}. There you will find two files:
  +\file{petidomo.conf-sample} and \file{petidomo.acl-sample}. Just
  +rename them to \file{petidomo.conf} and \file{petidomo.acl}
  +respectively and fire up your favorite text editor to edit the file
  +\file{petidomo.conf}.
   
   Uncomment the options ``Hostname'', ``AdminPassword'', and ``MTA'' and
   set the values correctly. ``Hostname'' should be the fully qualified
  @@ -370,8 +371,8 @@
   chose pretty much any text you like, just make sure you remember it.
   The ``MTA'' setting will usually be alright the way it is. You may
   want to check whether sendmail does actually live at this path; on
  -some Unixes, it is not installed at {\sf /usr/sbin/sendmail}, but at
  -{\sf /usr/lib/sendmail}. Change the setting if this is the case. You
  +some Unixes, it is not installed at \file{/usr/sbin/sendmail}, but at
  +\file{/usr/lib/sendmail}. Change the setting if this is the case. You
   can ignore all other settings right now. Come back and configure those
   once you have read the apropriate sections of this manual. If you're
   an experienced Unix wizard, the comments in the config file will
  @@ -402,8 +403,8 @@
   
   Once you sent the e-mail, sendmail will start up Petidomo and feed the
   mail text into it for processing. If you take a look at the syslogfile
  -containing the {\sf LOG\_MAIL} facility now --- this is usally {\sf
  -/var/log/messages} or {\sf /var/log/maillog} ---, you will find that
  +containing the LOG\_MAIL facility now --- this is usally
  +\file{/var/log/messages} or \file{/var/log/maillog} ---, you will find that
   Petidomo logged entries there that look pretty much like the following
   ones. The backslash (``\verb#\#'') characters at the end of some of
   these lines denote that the line has been wrapped for readability. In
  @@ -434,9 +435,10 @@
   As you can see, Petidomo logged how it was started, where it is
   expecting its master config file and under which user- and group id it
   is running. Then it logs that it has received a HELP request. This
  -request will be answered by sending the file {\sf
  -/usr/local/share/petidomo/help} back to the person who requested help,
  -and if everthing worked, you will now find that mail in your mail box.
  +request will be answered by sending the file
  +\file{/usr/local/share/petidomo/help} back to the person who requested
  +help, and if everthing worked, you will now find that mail in your
  +mail box.
   
   If something went wrong, Petidomo will tell you what went wrong. So,
   please fix the problem and try again. In 99\% of all cases, the error
  @@ -494,7 +496,7 @@
   List Manager!}
   
   In case any of the benefits promised above stays away, please consult
  -paragraphs 11 and 12 of the file {\sf COPYING} included in this
  +paragraphs 11 and 12 of the file \file{COPYING} included in this
   distribution.
   
   \chapter{Configuring Petidomo}
  @@ -1054,7 +1056,7 @@
   name of the list, which's subscriber list should be dumped. In
   ``approve'' mode, this parameter is ignored.
   
  -\item[{-}-masterconf={\sf /path/to/petidomo.conf}]
  +\item[{-}-masterconf=\file{/path/to/petidomo.conf}]
   
   Using this parameter you can tell Petidomo to use a different location
   for the master config file than the one that has been compiled in.

From ossp-cvs-owner@ossp.org  Sun Feb 18 02:03:30 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f1I13T186040; Sun, 18 Feb 2001 02:03:29 +0100 (CET)
Date: Sun, 18 Feb 2001 02:03:29 +0100 (CET)
Message-Id: <200102180103.f1I13T186040@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/petidomo INSTALL
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   18-Feb-2001 02:03:29
  Branch: HEAD                             Handle: 2001021801032800

  Modified files:
    ossp-pkg/petidomo       INSTALL

  Log:
    Added text-only version of the installation instructions.

  Summary:
    Revision    Changes     Path
    1.2         +433 -5     ossp-pkg/petidomo/INSTALL
  ____________________________________________________________________________

  Index: ossp-pkg/petidomo/INSTALL
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 INSTALL
  --- ossp-pkg/petidomo/INSTALL	2001/01/20 14:00:32	1.1
  +++ ossp-pkg/petidomo/INSTALL	2001/02/18 01:03:28	1.2
  @@ -1,8 +1,436 @@
  +                         Installing Petidomo
   
  -  INSTALL
  -  =======
  +The installation of the Petidomo Mailing List Manager is simple and
  +straight forward; do not be scared by the length of this document.
  +There are many different ways and options how to install it and I have
  +tried my best to cover *all* of them. If you are not interested in
  +every little detail, you will be able to skim over most of the text
  +here.
   
  -  $ ./configure --prefix=/path/to/petidomo
  -  $ make
  -  $ make install
  +                                   Peter Simons <simons@computer.org>
   
  +
  +Building the Binaries
  +=====================
  +
  +Untar the source archive of Petidomo in a directory of your choice
  +like /usr/local/src or your home directory. This will create a
  +directory called petidomo-VERSION, where the "VERSION" part is called
  +exactly as in the file name of the tar archive. Change into this
  +directory.
  +
  +Now you have to run the configure script
  +
  +    ./configure
  +
  +which will determine the characteristics of your system and create the
  +files required to actually build Petidomo. You may provide several
  +parameters to the script. The interesting ones, including the default
  +values if unspecified, are:
  +
  +   --help
  +        Display the complete list of command line options.
  +
  +   --prefix
  +        The the PREFIX for all following paths. The default is
  +        /usr/local.
  +
  +   --exec-prefix
  +        Set the EPREFIX for all following paths. This is useful in
  +        case you want to install binaries into a different directory
  +        hierarchy than normal text files, but usually the EPREFIX is
  +        identical to PREFIX. The default is PREFIX.
  +
  +   --bindir
  +        Set the directory where the binaries should be installed. The
  +        default is EPREFIX/bin.
  +
  +   --libexecdir
  +        Set the directory where executables should be installed that
  +        will be called by Petidomo but not by the user directly (like
  +        posting filters). The default is EPREFIX/libexec.
  +
  +   --datadir
  +        Set the directory where read-only architecture-independent
  +        data files should be installed (like the help file). The
  +        default is PREFIX/share.
  +
  +   --sysconfdir
  +        Set the directory where read-only configuration files should
  +        be installed. The default is PREFIX/etc.
  +
  +   --localstatedir
  +        Set the directory where modifiable data files should be
  +        installed (like the approve-queue or the mailing list config
  +        files). The default is PREFIX/var.
  +
  +   --mandir
  +        Set the directory where man documentation files should be
  +        installed. The default is PREFIX/man.
  +
  +Please note that the directories you specify here are only the default
  +settings that are compiled into Petidomo. You can modify *all* paths
  +at run-time via the command line and through the configuration files.
  +So don't waste to much time figuring out what you want here, you can
  +change anything later without having to recompile Petidomo.
  +
  +Finally, here is an example output of the configuration script when
  +run without any parameters on a Linux machine:
  +
  +    simons@peti:~/projects/petidomo-4.0b1$ ./configure
  +    Configuring OSSP Petidomo, Version 4.0b1 (18-Jan-2001)
  +    creating cache ./config.cache
  +    checking for gcc... gcc
  +    checking whether the C compiler (gcc  ) works... yes
  +    checking whether the C compiler (gcc  ) is a cross-compiler... no
  +    checking whether we are using GNU C... yes
  +    checking whether gcc accepts -g... yes
  +    checking for ranlib... ranlib
  +    checking for flex... flex
  +    checking for yywrap in -lfl... yes
  +    checking for bison... bison -y
  +    checking size of unsigned short... 2
  +    checking size of unsigned int... 4
  +    checking size of unsigned long... 4
  +    checking how to run the C preprocessor... gcc -E
  +    checking for ANSI C header files... yes
  +    checking for ssize_t... yes
  +    updating cache ./config.cache
  +    creating ./config.status
  +    creating Makefile
  +
  +Often, you may want to pass certain flags to the compiler or the
  +linker to modify the building process. To achieve this, you can set
  +certain environment variables before calling the configure script.
  +These variables are:
  +
  +   CC
  +        The name of the C compiler to use.
  +
  +   CPPFLAGS
  +        Flags to pass to the preprocesser before compiling a source
  +        code file.
  +
  +   CFLAGS
  +        Flags to pass to the compiler when compiling a C source code
  +        file.
  +
  +   LDFLAGS
  +        Flags to pass to the linker when linking the binaries.
  +
  +I personally find this useful to raise the level of compiler
  +optimization or to add linker flags that tell the linker to strip
  +unnecessary symbols from the binaries. To achive these effects, I call
  +the configure script like this:
  +
  +    CFLAGS=-O3 LDFLAGS=-s ./configure
  +
  +Anyway, once the configure script has been run, just call
  +
  +    make
  +
  +to start the building process. Petidomo has been tested with various
  +flavours of the make(1) utility and all of them seem to work fine. If
  +in doubt, try GNU Make, which is available from ftp.gnu.org.
  +
  +Petidomo has also been built using parallel builds. This is useful if
  +you have a multi-processer system. You can do this with most make
  +utilities by adding the flag "-j4" with "4" being the number of
  +processes you want to spawn simultaneously. Please note, though, that
  +some make utilities have problems with the rules that translate the
  +yacc-modules included in Petidomo correctly when building in parallel.
  +If you experience any trouble, just build it conventionally and you
  +should be fine.
  +
  +
  +Installing the Binaries
  +=======================
  +
  +To install the software to your system, all you have to do is execute
  +
  +    make install
  +
  +This will copy the Petidomo binary, the posting filters included in
  +the distribution, the sample config files and the manual pages into
  +the directories you chose at configure time earlier. If you're a
  +first-time user, you may also want to execute
  +
  +    make install-testlist
  +
  +which will create a sample mailing list called "testlist" for you.
  +
  +Assuming you used the default paths when running configure, the
  +install process will create the follwing directories, respectively
  +copy the following files to your system:
  +
  +    /usr/local/
  +    /usr/local/bin/
  +    /usr/local/bin/petidomo
  +    /usr/local/bin/petidomo-approve
  +    /usr/local/bin/petidomo-kickout
  +    /usr/local/etc/
  +    /usr/local/etc/petidomo.acl-sample
  +    /usr/local/etc/petidomo.conf-sample
  +    /usr/local/libexec/
  +    /usr/local/libexec/petidomo/
  +    /usr/local/libexec/petidomo/insert-name-in-subject.sh
  +    /usr/local/libexec/petidomo/pgp-decrypt.sh
  +    /usr/local/libexec/petidomo/pgp-encrypt.sh
  +    /usr/local/libexec/petidomo/rfc2369.sh
  +    /usr/local/man/
  +    /usr/local/man/man1/
  +    /usr/local/man/man1/petidomo.1
  +    /usr/local/share/
  +    /usr/local/share/petidomo/
  +    /usr/local/share/petidomo/help
  +    /usr/local/var/
  +    /usr/local/var/petidomo/
  +    /usr/local/var/petidomo/ack-queue/
  +    /usr/local/var/petidomo/index
  +    /usr/local/var/petidomo/lists/
  +
  +If you run the "install-testlist" target, the following
  +directory/files will be created additionally:
  +
  +    /usr/local/var/petidomo/lists/testlist/
  +    /usr/local/var/petidomo/lists/testlist/config
  +    /usr/local/var/petidomo/lists/testlist/acl
  +    /usr/local/var/petidomo/lists/testlist/list
  +
  +
  +Configuring Sendmail
  +====================
  +
  +Before you can use Petidomo, you have to configure sendmail so that it
  +knows about Petidomo -- I assume that you have sendmail installed
  +already. If you are using an MTA other than sendmail, you are on your
  +own from here on, I am afraid. Any users who have successfully
  +installed Petidomo on a qmail-, vmailer-, or postfix-based system are
  +more than welcome to contribute to this documentation to help other
  +users.
  +
  +To run Petidomo via sendmail -- what is what you want to do --, you
  +have to create apropriate aliases for it. You can do this by adding
  +the folling lines to your aliases file, which usually resides in
  +/etc/aliases or, with newer sendmail versions, in /etc/mail/aliases:
  +
  +    petidomo-manager:   postmaster
  +    petidomo:           "|/usr/local/bin/petidomo --mode=listserv"
  +    petidomo-approve:   "|/usr/local/bin/petidomo --mode=approve"
  +
  +In case you installed the Petidomo binary to some other location, you
  +will have to change the paths here apropriately of course. You may
  +also chose that mail for the "petidomo-manager" should go to some
  +different address than "postmaster", if that suits your needs better;
  +the main point is that somebody actually *reads* what arrives there.
  +
  +If executed the "install-testlist" target earlier and thus have the
  +example mailing list from the distribution installed, you may also
  +want to add the lines:
  +
  +    testlist:           "|/usr/local/bin/petidomo --mode=deliver testlist"
  +    testlist-request:   "|/usr/local/bin/petidomo --mode=listserv testlist"
  +    testlist-owner:     petidomo-manager
  +
  +Having done all this, execute the newaliases(1) utility to rebuild
  +sendmail's internal database. Your changes will not have any effect
  +unless you do this.
  +
  +
  +Configuring the File Permissions
  +================================
  +
  +The final step, before Petidomo is successfully installed, is to set
  +the right permissions to the installation directories and installed
  +files. Unfortunately, the installation process can not do this
  +automatically; you have to chose what permissions are "right"
  +yourself. If works like this: Petidomo will be called from sendmail,
  +thanks to the aliases you just created. That means, that sendmail
  +determines under what user to start Petidomo. In 99% of all
  +configurations I have ever seen, that user is "daemon", but it *may*
  +be something else, so we better figure it out for sure.
  +
  +Add the line
  +
  +    foobar:             "/tmp/foobar-mail"
  +
  +to your aliases file and execute newaliases(1). Then send an e-mail to
  +the address "foobar". The contents of this mail will be stored in the
  +file /tmp/foobar-mail then and we are interested in the user who owns
  +this file:
  +
  +    root@peti:/# sendmail -v foobar </dev/null
  +    foobar... aliased to "/tmp/foobar-mail"
  +    "/tmp/foobar-mail"... Sent
  +    root@peti:/# ls -l /tmp/foobar-mail
  +    -rw-------   1 daemon   daemon        269 Feb 12 17:57 /tmp/foobar-mail
  +
  +See? On my system it is "daemon" indeed. On your system it may be
  +someone else. Now that we know, you may remove the foobar-line from
  +the aliases file again.
  +
  +OK, sendmail starts Petidomo under user id "daemon". This means that
  +"daemon" must have read access to virtually any file in the Petidomo
  +installation. This is the default, because all files are installed
  +with read permisson for everybody. Also, all directories allow access
  +to anybody by default. But "daemon" also needs write access to the
  +"localstatedir" -- /usr/local/var/petidomo per default. You can ensure
  +this by executing the command:
  +
  +    chown -R daemon /usr/local/var/petidomo
  +
  +This is a rather simplistic solution to the permisson problem; you
  +*can* use much more fine-grained settings if you like to. But I
  +figured that if you are the kind of person who wants to do things like
  +this, you won't need an explanation how to do it anyway. Just that
  +much information for you: Petidomo does not actually write to the
  +"localstatdir", but only to the subdirectory ack-queue located in it.
  +
  +Of course, you do not necessarily need to have the ack-queue directory
  +owned by "daemon", you can also set the group permissions
  +apropriately. Furthermore, Petidomo will usually want to write to the
  +lists directory located in the "localstatedir", because most list
  +administrators tend to place the mailing list archives there, but you
  +can enable write access according to the list's configuration once you
  +know how you're mailing lists are configured. In case something does
  +not work as expected, check out the syslog messages for the LOG_MAIL
  +facility -- this is where Petidomo logs its error messages.
  +
  +
  +Configuring Petidomo
  +====================
  +
  +The last step before we can test our installation is to configure
  +Petidomo. This is really simple. List the contents of the "sysconfdir"
  +you chose. If you did not change the default paths, this is
  +/usr/local/etc. There you will find two files: petidomo.conf-sample
  +and petidomo.acl-sample. Just rename them to petidomo.conf and
  +petidomo.acl respectively and fire up your favorite text editor to
  +edit the file petidomo.conf.
  +
  +Uncomment the options "Hostname", "AdminPassword", and "MTA" and set
  +the values correctly. "Hostname" should be the fully qualified domain
  +name of the machine running Petidomo. It is essential that this name
  +can receive e-mail, that is, that is has an MX record. (Talk to the
  +person administrating the domain name service of your organization if
  +this doesn't make any sense to you.) As "AdminPassword", you can chose
  +pretty much any text you like, just make sure you remember it. The
  +"MTA" setting will usually be alright the way it is. You may want to
  +check whether sendmail does actually live at this path; on some
  +Unixes, it is not installed at /usr/sbin/sendmail, but at
  +/usr/lib/sendmail. Change the setting if this is the case. You can
  +ignore all other settings right now. Come back and configure those
  +once you have read the apropriate sections of this manual. If you're
  +an experienced Unix wizard, the comments in the config file will
  +probably be enough for you to guess what these options do, though.
  +
  +Once you have done this, your installation is ready to be tested.
  +
  +
  +Testing the Installation
  +========================
  +
  +Asserting you followed all steps described above, you have a working
  +Petidomo installation now. Occasionally, some minor permisson problem
  +may still remain to be fixed, or you may want to customize some texts.
  +To figure out what is left to do (or to realize that there is nothing
  +left do to), send an e-mail to the "petidomo" user on your machine and
  +put the word "help" into the mail body -- without the quotes of
  +course.
  +
  +On my system, this looks like this:
  +
  +    simons@peti:~/projects/petidomo$ echo help | sendmail -v petidomo
  +    petidomo... aliased to "|/usr/local/bin/petidomo --mode=listserv"
  +    "|/usr/local/bin/petidomo --mode=listserv"... Connecting to prog...
  +    "|/usr/local/bin/petidomo --mode=listserv"... Sent
  +
  +Once you sent the e-mail, sendmail will start up Petidomo and feed the
  +mail text into it for processing. If you take a look at the syslogfile
  +containing the LOG_MAIL facility now -- this is usally
  +/var/log/messages or /var/log/maillog --, you will find that Petidomo
  +logged entries there that look pretty much like the following ones.
  +The backslash ("\") characters at the end of some of these lines
  +denote that the line has been wrapped for readability. In reality,
  +this would be one single large line.
  +
  +    sendmail[8705]: f1CIHWJ08705: from=simons, size=5, class=0, \
  +	    nrcpts=1, msgid=<200102121817.f1CIHWJ08705@peti.cryp.to>, \
  +	    relay=simons@localhost
  +    petidomo[8706]: Petidomo 4.0b1 (18-Jan-2001) starting up; \
  +	    mode=listserv, listname=<none>, \
  +	    masterconf=/usr/local/etc/petidomo.conf, \
  +	    approved=false, ruid=2, euid=2, gid=2, egid=2
  +    petidomo[8706]: simons@peti.cryp.to: help
  +    sendmail[8707]: f1CIHX508707: from=petidomo-manager@peti.cryp.to, \
  +	    size=2091, class=-100, nrcpts=1, \
  +	    msgid=<200102121817.f1CIHX508707@peti.cryp.to>, \
  +	    relay=daemon@localhost
  +    sendmail[8705]: f1CIHWJ08705: \
  +	    to="|/usr/local/bin/petidomo --mode=listserv", \
  +	    ctladdr=petidomo (2/0), delay=00:00:01, xdelay=00:00:01, \
  +	    mailer=prog, pri=30005, dsn=2.0.0, stat=Sent
  +    sendmail[8709]: f1CIHX508707: to=simons@peti.cryp.to, delay=00:00:00, \
  +	    xdelay=00:00:00, mailer=local, pri=212091, dsn=2.0.0, stat=Sent
  +
  +As you can see, Petidomo logged how it was started, where it is
  +expecting its master config file and under which user- and group id it
  +is running. Then it logs that it has received a HELP request. This
  +request will be answered by sending the file
  +/usr/local/share/petidomo/help back to the person who requested help,
  +and if everthing worked, you will now find that mail in your mail box.
  +
  +If something went wrong, Petidomo will tell you what went wrong. So,
  +please fix the problem and try again. In 99% of all cases, the error
  +will say something like "opening file XYZ failed: permission denied".
  +Then all you have to do is to make sure that the user under which
  +Petidomo has been started (you have the numeric id in the logfile) has
  +read access to that file. If the user has but Petidomo keeps
  +complaining, check, whether that user has access to the directory at
  +all!
  +
  +Those of you who executed the "install-testlist" target earlier in
  +the "Building the Binaries" chapter may also want to test whether
  +this mailing list is working. To do so, send another mail to Petidomo
  +and put the command "subscribe YOUR-ADDRESS testlist" in the mail
  +body -- without the quotes! "YOUR-ADDRESS" naturally means that you
  +should insert your e-mail address here. This command will subscribe
  +your e-mail address to the "testlist" mailing list; you should
  +receive a confirmation about that via e-mail within moments. Once that
  +is accomplished, send another e-mail to the "testlist" address on
  +your system. The e-mail may look like whatever you want.
  +
  +Within seconds, you should get the mail back from the mailing list
  +server -- and so will all other addresses that are subscribed to the
  +list. My personal test mail looked like this:
  +
  +    From testlist-owner@peti.cryp.to  Mon Feb 12 19:43:56 2001
  +    Received: (from daemon@localhost)
  +	    by peti.cryp.to id f1CIhuA08872 for simons@peti.cryp.to;
  +	    Mon, 12 Feb 2001 19:43:56 +0100
  +    Received: (from simons@localhost)
  +	    by peti.cryp.to id f1CIhJY08853 for testlist;
  +	    Mon, 12 Feb 2001 19:43:19 +0100
  +    Date: Mon, 12 Feb 2001 19:43:19 +0100
  +    From: Peter Simons <simons@peti.cryp.to>
  +    Message-Id: <200102121843.f1CIhJY08853@peti.cryp.to>
  +    Subject: Petidomo absolutely rules the known earth!
  +    Reply-To: testlist@peti.cryp.to
  +    Sender: testlist-owner@peti.cryp.to
  +    Precedence: list
  +
  +    It does ...
  +
  +If this all worked for you, you have a your Petidomo installation up
  +and running. Men will envy you and women will desire you -- unless, of
  +course, you *are* a woman, then it is vice versa. You will be able to
  +stop smoking any time you want, you may eat anything you like and as
  +much as you like, but you will never gain a single pound. Your sex
  +life will improve dramatically, your boss will like you, your hard
  +drives will never crash and your Internet connections will always be
  +fast. All this, thanks to the wonders of the Petidomo Mailing List
  +Manager!
  +
  +In case any of the benefits promised above stays away, please consult
  +paragraphs 11 and 12 of the file COPYING included in this
  +distribution.

From ossp-cvs-owner@ossp.org  Sat Mar  3 15:45:07 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f23Ej6603114; Sat, 3 Mar 2001 15:45:06 +0100 (CET)
Date: Sat, 3 Mar 2001 15:45:06 +0100 (CET)
Message-Id: <200103031445.f23Ej6603114@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/jitterbug COPYING INSTALL Makefile.in README acco...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   03-Mar-2001 15:45:06
  Branch: VENDOR                           Handle: 1970010101000000

  Touched files:            (Branch: VENDOR)
    ossp-pkg/jitterbug      COPYING INSTALL Makefile.in README acconfig.h
                            cgi.c config.guess config.h.in config.sub
                            configure configure.in html.c html.h includes.h
                            jconfig.h jitterbug.c jitterbug.h list.c
                            loadparm.c lock.c match.c mkproto.awk
                            new_message.c notify.c proto.h pulldown.c search.c
                            smtp.c snprintf.c util.c version.h vslprintf.c

  Log:
    Import of Jitterbug 20010303
    
    [Release Tag: JITTERBUG_20010303]

  Summary:
    Revision    Changes     Path
  ____________________________________________________________________________

From ossp-cvs-owner@ossp.org  Sat Mar  3 15:46:39 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f23EkcR03251; Sat, 3 Mar 2001 15:46:38 +0100 (CET)
Date: Sat, 3 Mar 2001 15:46:38 +0100 (CET)
Message-Id: <200103031446.f23EkcR03251@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/jitterbug shtool
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   03-Mar-2001 15:46:38
  Branch: HEAD                             Handle: 2001030314463800

  Modified files:
    ossp-pkg/jitterbug      shtool

  Log:
    Update GNU shtool

  Summary:
    Revision    Changes     Path
    1.2         +46 -38     ossp-pkg/jitterbug/shtool
  ____________________________________________________________________________

  Index: ossp-pkg/jitterbug/shtool
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 shtool
  --- ossp-pkg/jitterbug/shtool	2000/05/31 19:58:04	1.1
  +++ ossp-pkg/jitterbug/shtool	2001/03/03 14:46:38	1.2
  @@ -1,13 +1,13 @@
   #!/bin/sh
   ##
   ##  GNU shtool -- The GNU Portable Shell Tool
  -##  Copyright (c) 1994-2000 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1994-2001 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  See http://www.gnu.org/software/shtool/ for more information.
   ##  See ftp://ftp.gnu.org/gnu/shtool/ for latest version.
   ##
  -##  Version 1.4.9 (16-Apr-2000)
  -##  Ingredients: 5/17 available modules
  +##  Version:  1.5.2 (27-Feb-2001)
  +##  Contents: 5/17 available modules
   ##
   
   ##
  @@ -55,7 +55,7 @@
   ##    arx        Extended archive command
   ##    slo        Separate linker options by library class
   ##    scpp       Sharing C Pre-Processor
  -##    version    Generate and maintain a version information file
  +##    version    Maintain a version information file
   ##    path       Deal with program paths
   ##
   
  @@ -65,8 +65,8 @@
       exit 1
   fi
   if [ ".$1" = ".-h" -o ".$1" = ".--help" ]; then
  -    echo "This is GNU shtool, version 1.4.9 (16-Apr-2000)"
  -    echo "Copyright (c) 1994-2000 Ralf S. Engelschall <rse@engelschall.com>"
  +    echo "This is GNU shtool, version 1.5.2 (27-Feb-2001)"
  +    echo "Copyright (c) 1994-2001 Ralf S. Engelschall <rse@engelschall.com>"
       echo "Report bugs to <bug-shtool@gnu.org>"
       echo ''
       echo "Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]" 
  @@ -75,11 +75,12 @@
       echo '  -v, --version   display shtool version information'
       echo '  -h, --help      display shtool usage help page (this one)'
       echo '  -d, --debug     display shell trace information'
  +    echo '  -r, --recreate  recreate this shtool script via shtoolize'
       echo ''
       echo 'Available <cmd-name> [<cmd-options>] [<cmd-args>]:'
       echo '  echo     [-n] [-e] [<str> ...]'
       echo '  install  [-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>]'
  -    echo '           [-e<ext>] <file> [<file> ...] <path>'
  +    echo '           [-e<sed-cmd>] <file> [<file> ...] <path>'
       echo '  mkdir    [-t] [-f] [-p] [-m<mode>] <dir> [<dir> ...]'
       echo '  fixperm  [-v] [-t] <path> [<path> ...]'
       echo '  tarball  [-t] [-v] [-o <tarball>] [-c <prog>] [-d <dir>] [-u'
  @@ -97,16 +98,20 @@
       echo '  slo      [-p<str>] -- -L<dir> -l<lib> [-L<dir> -l<lib> ...]'
       echo '  scpp     [-v] [-p] [-f<filter>] [-o<ofile>] [-t<tfile>] [-M<mark>]'
       echo '           [-D<dname>] [-C<cname>] <file> [<file> ...]'
  -    echo '  version  [-l<lang>] [-n<name>] [-p<prefix>] [-s<version>] [-i<knob>]'
  -    echo '           [-d<type>] <file>'
  +    echo '  version  [-l<lang>] [-n<name>] [-p<prefix>] [-s<version>] [-e]'
  +    echo '           [-i<knob>] [-d<type>] <file>'
       echo '  path     [-s] [-r] [-d] [-b] [-m] [-p<path>] <str> [<str> ...]'
       echo ''
       exit 0
   fi
   if [ ".$1" = ".-v" -o ".$1" = ."--version" ]; then
  -    echo "GNU shtool 1.4.9 (16-Apr-2000)"
  +    echo "GNU shtool 1.5.2 (27-Feb-2001)"
       exit 0
   fi
  +if [ ".$1" = ".-r" -o ".$1" = ."--recreate" ]; then
  +    shtoolize -oshtool echo install mkdir fixperm tarball
  +    exit 0
  +fi
   if [ ".$1" = ".-d" -o ".$1" = ."--debug" ]; then
       shift
       set -x
  @@ -142,15 +147,15 @@
           ;;
       install )
           str_tool="install"
  -        str_usage="[-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>] [-e<ext>] <file> [<file> ...] <path>"
  +        str_usage="[-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>] [-e<sed-cmd>] <file> [<file> ...] <path>"
           arg_spec="2+"
  -        opt_spec="v.t.c.C.s.m:o:g:e:"
  +        opt_spec="v.t.c.C.s.m:o:g:e+"
           opt_v=no
           opt_t=no
           opt_c=no
           opt_C=no
           opt_s=no
  -        opt_m=""
  +        opt_m="0755"
           opt_o=""
           opt_g=""
           opt_e=""
  @@ -335,6 +340,7 @@
       tmpfile="$tmpdir/.shtool.$$"
       rm -f $tmpfile >/dev/null 2>&1
       touch $tmpfile
  +    chmod 600 $tmpfile
   fi
   
   ##
  @@ -346,7 +352,7 @@
   echo )
       ##
       ##  echo -- Print string with optional construct expansion
  -    ##  Copyright (c) 1998-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1998-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for WML as buildinfo
       ##
       
  @@ -569,7 +575,7 @@
   install )
       ##
       ##  install -- Install a program, script or datafile
  -    ##  Copyright (c) 1997-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1997-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for shtool
       ##
       
  @@ -599,19 +605,13 @@
       for src in $srcs; do
           dst=$dstpath
       
  -        #  If destination is a directory, append the input filename
  +        #   if destination is a directory, append the input filename
           if [ $dstisdir = 1 ]; then
               dstfile=`echo "$src" | sed -e 's;.*/\([^/]*\)$;\1;'`
               dst="$dst/$dstfile"
           fi
       
  -        #  Add a possible extension to src and dst
  -        if [ ".$opt_e" != . ]; then
  -            src="$src$opt_e"
  -            dst="$dst$opt_e"
  -        fi
  -    
  -        #  Check for correct arguments
  +        #   check for correct arguments
           if [ ".$src" = ".$dst" ]; then
               echo "$msgprefix:Warning: source and destination are the same - skipped" 1>&2
               continue
  @@ -621,18 +621,18 @@
               continue
           fi
       
  -        #  Make a temp file name in the destination directory
  +        #   make a temp file name in the destination directory
           dsttmp=`echo $dst |\
                   sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;' -e 's;^$;.;' \
                       -e "s;\$;/#INST@$$#;"`
       
  -        #  Verbosity
  +        #   verbosity
           if [ ".$opt_v" = .yes ]; then
               echo "$src -> $dst" 1>&2
           fi
       
  -        #  Copy or move the file name to the temp name
  -        #  (because we might be not allowed to change the source)
  +        #   copy or move the file name to the temp name
  +        #   (because we might be not allowed to change the source)
           if [ ".$opt_C" = .yes ]; then
               opt_c=yes
           fi
  @@ -648,8 +648,16 @@
               mv $src $dsttmp || exit $?
           fi
       
  -        #  Adjust the target file
  -        #  (we do chmod last to preserve setuid bits)
  +        #   adjust the target file
  +        if [ ".$opt_e" != . ]; then
  +            sed='sed'
  +            for e in $opt_e; do
  +                sed="$sed -e '$e'"
  +            done
  +            cp $dsttmp $dsttmp.old
  +            eval "$sed <$dsttmp.old >$dsttmp" || exit $?
  +            rm -f $dsttmp.old
  +        fi
           if [ ".$opt_s" = .yes ]; then
               if [ ".$opt_t" = .yes ]; then
                   echo "strip $dsttmp" 1>&2
  @@ -668,14 +676,14 @@
               fi
               chgrp $opt_g $dsttmp || exit $?
           fi
  -        if [ ".$opt_m" != . ]; then
  +        if [ ".$opt_m" != ".-" ]; then
               if [ ".$opt_t" = .yes ]; then
                   echo "chmod $opt_m $dsttmp" 1>&2
               fi
               chmod $opt_m $dsttmp || exit $?
           fi
       
  -        #   Determine whether to do a quick install
  +        #   determine whether to do a quick install
           #   (has to be done _after_ the strip was already done)
           quick=no
           if [ ".$opt_C" = .yes ]; then
  @@ -686,7 +694,7 @@
               fi
           fi
       
  -        #   Finally install the file to the real destination
  +        #   finally, install the file to the real destination
           if [ $quick = yes ]; then
               if [ ".$opt_t" = .yes ]; then
                   echo "rm -f $dsttmp" 1>&2
  @@ -704,7 +712,7 @@
   mkdir )
       ##
       ##  mkdir -- Make one or more directories
  -    ##  Copyright (c) 1996-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1996-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for public domain by Noah Friedman <friedman@prep.ai.mit.edu>
       ##  Cleaned up and enhanced for shtool
       ##
  @@ -713,7 +721,7 @@
       for p in ${1+"$@"}; do
           #   if the directory already exists...
           if [ -d "$p" ]; then
  -            if [ ".$opt_f" = .no ] && [ ".$opt_p" = .no ]; then
  +            if [ ".$opt_f" = .no -a ".$opt_p" = .no ]; then
                   echo "$msgprefix:Error: directory already exists: $p" 1>&2
                   errstatus=1
                   break
  @@ -763,7 +771,7 @@
   fixperm )
       ##
       ##  fixperm -- Fix file permissions inside a source tree
  -    ##  Copyright (c) 1996-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1996-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for ePerl
       ##
       
  @@ -819,7 +827,7 @@
   tarball )
       ##
       ##  tarball -- Roll distribution tarballs
  -    ##  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for shtool
       ##
       
  @@ -845,7 +853,7 @@
           for tool in `echo $tools | sed -e 's/,/ /g'`; do
               #   iterate over paths
               for path in $paths; do
  -                if [ $minusx "$path/$tool" ] && [ ! -d "$path/$tool" ]; then
  +                if [ $minusx "$path/$tool" -a ! -d "$path/$tool" ]; then
                       eval "prg_${prg}=\"$path/$tool\""
                       break
                   fi
  @@ -871,7 +879,7 @@
               if [ ".$opt_t" = .yes ]; then
                   echo "(cd $src && $prg_find . -type f -depth -print) | sed -e 's:^\\.\$::' -e 's:^\\./::' | cat $exclude >>$tmpfile.lst" 1>&2
               fi
  -            (cd $src && find . -type f -depth -print) |\
  +            (cd $src && $prg_find . -type f -depth -print) |\
               sed -e 's:^\.$::' -e 's:^\./::' | eval cat $exclude >>$tmpfile.lst
           else
               if [ ".$opt_t" = .yes ]; then

From ossp-cvs-owner@ossp.org  Sat Mar  3 16:01:59 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f23F1wC04367; Sat, 3 Mar 2001 16:01:58 +0100 (CET)
Date: Sat, 3 Mar 2001 16:01:58 +0100 (CET)
Message-Id: <200103031501.f23F1wC04367@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/jitterbug .configure snprintf.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   03-Mar-2001 16:01:58
  Branch: HEAD                             Handle: 2001030315015800

  Modified files:
    ossp-pkg/jitterbug      .configure snprintf.c

  Log:
    Get rid of warnings

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/jitterbug/.configure
    1.2         +1  -0      ossp-pkg/jitterbug/snprintf.c
  ____________________________________________________________________________

  Index: ossp-pkg/jitterbug/.configure
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 .configure
  --- ossp-pkg/jitterbug/.configure	2000/05/31 20:02:59	1.1
  +++ ossp-pkg/jitterbug/.configure	2001/03/03 15:01:58	1.2
  @@ -1,5 +1,5 @@
   :
  -CC=egcc \
  +CC=gcc \
   CFLAGS="-pipe -O2 -pedantic -Wall -Wshadow -Wpointer-arith -Wcast-align -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline" \
   ./configure \
   --prefix=/sw/pkg/jitterbug \
  Index: ossp-pkg/jitterbug/snprintf.c
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 snprintf.c
  --- ossp-pkg/jitterbug/snprintf.c	2000/05/31 19:54:30	1.1.1.1
  +++ ossp-pkg/jitterbug/snprintf.c	2001/03/03 15:01:58	1.2
  @@ -739,6 +739,7 @@
   
   #else
    /* keep compilers happy about empty files */
  + void dummy_snprintf(void);
    void dummy_snprintf(void) {}
   #endif /* !HAVE_SNPRINTF */
   

From ossp-cvs-owner@ossp.org  Sat Mar  3 17:03:26 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f23G3Qa09221; Sat, 3 Mar 2001 17:03:26 +0100 (CET)
Date: Sat, 3 Mar 2001 17:03:26 +0100 (CET)
Message-Id: <200103031603.f23G3Qa09221@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/jitterbug Makefile.in README.OSSP jitterbug.c jit...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   03-Mar-2001 17:03:26
  Branch: HEAD                             Handle: 2001030316032500

  Modified files:
    ossp-pkg/jitterbug      Makefile.in README.OSSP jitterbug.c jitterbug.h

  Log:
    Allow 'jitterbug <name>'

  Summary:
    Revision    Changes     Path
    1.7         +7  -7      ossp-pkg/jitterbug/Makefile.in
    1.7         +5  -0      ossp-pkg/jitterbug/README.OSSP
    1.7         +5  -0      ossp-pkg/jitterbug/jitterbug.c
    1.9         +1  -0      ossp-pkg/jitterbug/jitterbug.h
  ____________________________________________________________________________

  Index: ossp-pkg/jitterbug/Makefile.in
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 Makefile.in
  --- ossp-pkg/jitterbug/Makefile.in	2000/06/01 10:23:27	1.6
  +++ ossp-pkg/jitterbug/Makefile.in	2001/03/03 16:03:25	1.7
  @@ -2,6 +2,7 @@
   # Makefile for Jitterbug
   # 
   
  +DESTDIR     =
   prefix      = @prefix@
   exec_prefix = @prefix@
   bindir      = @bindir@
  @@ -38,13 +39,12 @@
   	rm -f config.cache config.log config.status 
   
   install:
  -	$(SHTOOL) mkdir -f -p -m 755 $(prefix)
  -	$(SHTOOL) mkdir -f -p -m 755 $(bindir)
  -	$(SHTOOL) mkdir -f -p -m 755 $(sysconfdir)
  -	$(SHTOOL) mkdir -f -p -m 755 $(sysconfdir)
  -	$(SHTOOL) install -c -s -m 755 jitterbug $(bindir)/jitterbug-web
  -	$(SHTOOL) install -c -s -m 755 new_message $(bindir)/jitterbug-mail
  -	$(SHTOOL) install -c -m 644 jitterbug.txt $(sysconfdir)/jitterbug.txt
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(sysconfdir)
  +	$(SHTOOL) install -c -s -m 755 jitterbug $(DESTDIR)$(bindir)/jitterbug-web
  +	$(SHTOOL) install -c -s -m 755 new_message $(DESTDIR)$(bindir)/jitterbug-mail
  +	$(SHTOOL) install -c -m 644 jitterbug.txt $(DESTDIR)$(sysconfdir)/jitterbug.txt
   	
   dist: distclean
   	@V=`sed <version.h -e 's;^[^"]*";;' -e 's;".*;;'`; \
  Index: ossp-pkg/jitterbug/README.OSSP
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 README.OSSP
  --- ossp-pkg/jitterbug/README.OSSP	2000/06/01 13:06:49	1.6
  +++ ossp-pkg/jitterbug/README.OSSP	2001/03/03 16:03:25	1.7
  @@ -59,3 +59,8 @@
       This just enables some cosmetic changes to various display outputs.
       [Origin: Ralf S. Engelschall]
   
  +  OSSP_PATCH_ARGV
  +    This allows one to run "jitterbug <name>" in addition to renaming
  +    "jitterbug" to "<name>".
  +    [Origin: Ralf S. Engelschall]
  +
  Index: ossp-pkg/jitterbug/jitterbug.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 jitterbug.c
  --- ossp-pkg/jitterbug/jitterbug.c	2000/06/02 15:42:06	1.6
  +++ ossp-pkg/jitterbug/jitterbug.c	2001/03/03 16:03:25	1.7
  @@ -2240,6 +2240,11 @@
   {
   	char *s;
   
  +#ifdef OSSP_PATCH_ARGV
  +    if (argc == 2)
  +        load_config(argv[1]);
  +    else
  +#endif
   	load_config(argv[0]);
   
   	/* we must do this before reading anything from the client! */
  Index: ossp-pkg/jitterbug/jitterbug.h
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 jitterbug.h
  --- ossp-pkg/jitterbug/jitterbug.h	2000/06/02 15:42:06	1.8
  +++ ossp-pkg/jitterbug/jitterbug.h	2001/03/03 16:03:25	1.9
  @@ -54,5 +54,6 @@
   #define OSSP_PATCH_SANITY
   #define OSSP_PATCH_COSMETICS
   #define OSSP_PATCH_BETTERPRNUM
  +#define OSSP_PATCH_ARGV
   #endif
   

From ossp-cvs-owner@ossp.org  Sat Apr 21 10:14:08 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f3L8E7s05053; Sat, 21 Apr 2001 10:14:07 +0200 (CEST)
Date: Sat, 21 Apr 2001 10:14:07 +0200 (CEST)
Message-Id: <200104210814.f3L8E7s05053@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvs shtool
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   21-Apr-2001 10:14:07
  Branch: HEAD                             Handle: 2001042109140600

  Modified files:
    ossp-pkg/cvs            shtool

  Log:
    *** empty log message ***

  Summary:
    Revision    Changes     Path
    1.6         +47 -38     ossp-pkg/cvs/shtool
  ____________________________________________________________________________

  Index: ossp-pkg/cvs/shtool
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 shtool
  --- ossp-pkg/cvs/shtool	2000/09/01 16:08:16	1.5
  +++ ossp-pkg/cvs/shtool	2001/04/21 08:14:06	1.6
  @@ -1,12 +1,12 @@
   #!/bin/sh
   ##
   ##  GNU shtool -- The GNU Portable Shell Tool
  -##  Copyright (c) 1994-2000 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1994-2001 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  See http://www.gnu.org/software/shtool/ for more information.
   ##  See ftp://ftp.gnu.org/gnu/shtool/ for latest version.
   ##
  -##  Version:  1.5.1 (29-Jul-2000)
  +##  Version:  1.5.3 (19-Apr-2001)
   ##  Contents: 5/17 available modules
   ##
   
  @@ -26,7 +26,7 @@
   ##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
   ##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
   ##
  -##  Notice: Given that you include this file verbatim into your own
  +##  NOTICE: Given that you include this file verbatim into your own
   ##  source tree, you are justified in saying that it remains separate
   ##  from your package, and that this way you are simply just using GNU
   ##  shtool. So, in this situation, there is no requirement that your
  @@ -65,8 +65,8 @@
       exit 1
   fi
   if [ ".$1" = ".-h" -o ".$1" = ".--help" ]; then
  -    echo "This is GNU shtool, version 1.5.1 (29-Jul-2000)"
  -    echo "Copyright (c) 1994-2000 Ralf S. Engelschall <rse@engelschall.com>"
  +    echo "This is GNU shtool, version 1.5.3 (19-Apr-2001)"
  +    echo "Copyright (c) 1994-2001 Ralf S. Engelschall <rse@engelschall.com>"
       echo "Report bugs to <bug-shtool@gnu.org>"
       echo ''
       echo "Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]" 
  @@ -80,11 +80,11 @@
       echo 'Available <cmd-name> [<cmd-options>] [<cmd-args>]:'
       echo '  echo     [-n] [-e] [<str> ...]'
       echo '  install  [-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>]'
  -    echo '           [-e<ext>] <file> [<file> ...] <path>'
  +    echo '           [-e<sed-cmd>] <file> [<file> ...] <path>'
       echo '  mkdir    [-t] [-f] [-p] [-m<mode>] <dir> [<dir> ...]'
       echo '  fixperm  [-v] [-t] <path> [<path> ...]'
  -    echo '  tarball  [-t] [-v] [-o <tarball>] [-c <prog>] [-d <dir>] [-u'
  -    echo '           <user>] [-g <group>] [-e <pattern>] <path> [<path> ...]'
  +    echo '  tarball  [-t] [-v] [-o<tarball>] [-c<prog>] [-d<dir>] [-u<user>]'
  +    echo '           [-g<group>] [-e<pattern>] <path> [<path> ...]'
       echo ''
       echo 'Not available <cmd-name> (because module was not built-in):'
       echo '  mdate    [-n] [-z] [-s] [-d] [-f<str>] [-o<spec>] <path>'
  @@ -105,7 +105,7 @@
       exit 0
   fi
   if [ ".$1" = ".-v" -o ".$1" = ."--version" ]; then
  -    echo "GNU shtool 1.5.1 (29-Jul-2000)"
  +    echo "GNU shtool 1.5.3 (19-Apr-2001)"
       exit 0
   fi
   if [ ".$1" = ".-r" -o ".$1" = ."--recreate" ]; then
  @@ -147,15 +147,15 @@
           ;;
       install )
           str_tool="install"
  -        str_usage="[-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>] [-e<ext>] <file> [<file> ...] <path>"
  +        str_usage="[-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>] [-e<sed-cmd>] <file> [<file> ...] <path>"
           arg_spec="2+"
  -        opt_spec="v.t.c.C.s.m:o:g:e:"
  +        opt_spec="v.t.c.C.s.m:o:g:e+"
           opt_v=no
           opt_t=no
           opt_c=no
           opt_C=no
           opt_s=no
  -        opt_m=""
  +        opt_m="0755"
           opt_o=""
           opt_g=""
           opt_e=""
  @@ -180,7 +180,7 @@
           ;;
       tarball )
           str_tool="tarball"
  -        str_usage="[-t] [-v] [-o <tarball>] [-c <prog>] [-d <dir>] [-u <user>] [-g <group>] [-e <pattern>] <path> [<path> ...]"
  +        str_usage="[-t] [-v] [-o<tarball>] [-c<prog>] [-d<dir>] [-u<user>] [-g<group>] [-e<pattern>] <path> [<path> ...]"
           gen_tmpfile=yes
           arg_spec="1+"
           opt_spec="t.v.o:c:d:u:g:e:"
  @@ -340,6 +340,7 @@
       tmpfile="$tmpdir/.shtool.$$"
       rm -f $tmpfile >/dev/null 2>&1
       touch $tmpfile
  +    chmod 600 $tmpfile
   fi
   
   ##
  @@ -351,7 +352,7 @@
   echo )
       ##
       ##  echo -- Print string with optional construct expansion
  -    ##  Copyright (c) 1998-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1998-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for WML as buildinfo
       ##
       
  @@ -574,7 +575,7 @@
   install )
       ##
       ##  install -- Install a program, script or datafile
  -    ##  Copyright (c) 1997-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1997-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for shtool
       ##
       
  @@ -604,19 +605,13 @@
       for src in $srcs; do
           dst=$dstpath
       
  -        #  If destination is a directory, append the input filename
  +        #   if destination is a directory, append the input filename
           if [ $dstisdir = 1 ]; then
               dstfile=`echo "$src" | sed -e 's;.*/\([^/]*\)$;\1;'`
               dst="$dst/$dstfile"
           fi
       
  -        #  Add a possible extension to src and dst
  -        if [ ".$opt_e" != . ]; then
  -            src="$src$opt_e"
  -            dst="$dst$opt_e"
  -        fi
  -    
  -        #  Check for correct arguments
  +        #   check for correct arguments
           if [ ".$src" = ".$dst" ]; then
               echo "$msgprefix:Warning: source and destination are the same - skipped" 1>&2
               continue
  @@ -626,18 +621,18 @@
               continue
           fi
       
  -        #  Make a temp file name in the destination directory
  +        #   make a temp file name in the destination directory
           dsttmp=`echo $dst |\
                   sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;' -e 's;^$;.;' \
                       -e "s;\$;/#INST@$$#;"`
       
  -        #  Verbosity
  +        #   verbosity
           if [ ".$opt_v" = .yes ]; then
               echo "$src -> $dst" 1>&2
           fi
       
  -        #  Copy or move the file name to the temp name
  -        #  (because we might be not allowed to change the source)
  +        #   copy or move the file name to the temp name
  +        #   (because we might be not allowed to change the source)
           if [ ".$opt_C" = .yes ]; then
               opt_c=yes
           fi
  @@ -653,8 +648,16 @@
               mv $src $dsttmp || exit $?
           fi
       
  -        #  Adjust the target file
  -        #  (we do chmod last to preserve setuid bits)
  +        #   adjust the target file
  +        if [ ".$opt_e" != . ]; then
  +            sed='sed'
  +            for e in $opt_e; do
  +                sed="$sed -e '$e'"
  +            done
  +            cp $dsttmp $dsttmp.old
  +            eval "$sed <$dsttmp.old >$dsttmp" || exit $?
  +            rm -f $dsttmp.old
  +        fi
           if [ ".$opt_s" = .yes ]; then
               if [ ".$opt_t" = .yes ]; then
                   echo "strip $dsttmp" 1>&2
  @@ -673,14 +676,14 @@
               fi
               chgrp $opt_g $dsttmp || exit $?
           fi
  -        if [ ".$opt_m" != . ]; then
  +        if [ ".$opt_m" != ".-" ]; then
               if [ ".$opt_t" = .yes ]; then
                   echo "chmod $opt_m $dsttmp" 1>&2
               fi
               chmod $opt_m $dsttmp || exit $?
           fi
       
  -        #   Determine whether to do a quick install
  +        #   determine whether to do a quick install
           #   (has to be done _after_ the strip was already done)
           quick=no
           if [ ".$opt_C" = .yes ]; then
  @@ -691,7 +694,7 @@
               fi
           fi
       
  -        #   Finally install the file to the real destination
  +        #   finally, install the file to the real destination
           if [ $quick = yes ]; then
               if [ ".$opt_t" = .yes ]; then
                   echo "rm -f $dsttmp" 1>&2
  @@ -709,7 +712,7 @@
   mkdir )
       ##
       ##  mkdir -- Make one or more directories
  -    ##  Copyright (c) 1996-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1996-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for public domain by Noah Friedman <friedman@prep.ai.mit.edu>
       ##  Cleaned up and enhanced for shtool
       ##
  @@ -718,7 +721,7 @@
       for p in ${1+"$@"}; do
           #   if the directory already exists...
           if [ -d "$p" ]; then
  -            if [ ".$opt_f" = .no ] && [ ".$opt_p" = .no ]; then
  +            if [ ".$opt_f" = .no -a ".$opt_p" = .no ]; then
                   echo "$msgprefix:Error: directory already exists: $p" 1>&2
                   errstatus=1
                   break
  @@ -732,6 +735,12 @@
                   echo "mkdir $p" 1>&2
               fi
               mkdir $p || errstatus=$?
  +            if [ ".$opt_m" != . ]; then
  +                if [ ".$opt_t" = .yes ]; then
  +                    echo "chmod $opt_m $p" 1>&2
  +                fi
  +                chmod $opt_m $p || errstatus=$?
  +            fi
           else
               #   the smart situation
               set fnord `echo ":$p" |\
  @@ -768,7 +777,7 @@
   fixperm )
       ##
       ##  fixperm -- Fix file permissions inside a source tree
  -    ##  Copyright (c) 1996-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1996-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for ePerl
       ##
       
  @@ -824,7 +833,7 @@
   tarball )
       ##
       ##  tarball -- Roll distribution tarballs
  -    ##  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for shtool
       ##
       
  @@ -850,7 +859,7 @@
           for tool in `echo $tools | sed -e 's/,/ /g'`; do
               #   iterate over paths
               for path in $paths; do
  -                if [ $minusx "$path/$tool" ] && [ ! -d "$path/$tool" ]; then
  +                if [ $minusx "$path/$tool" -a ! -d "$path/$tool" ]; then
                       eval "prg_${prg}=\"$path/$tool\""
                       break
                   fi
  @@ -876,7 +885,7 @@
               if [ ".$opt_t" = .yes ]; then
                   echo "(cd $src && $prg_find . -type f -depth -print) | sed -e 's:^\\.\$::' -e 's:^\\./::' | cat $exclude >>$tmpfile.lst" 1>&2
               fi
  -            (cd $src && find . -type f -depth -print) |\
  +            (cd $src && $prg_find . -type f -depth -print) |\
               sed -e 's:^\.$::' -e 's:^\./::' | eval cat $exclude >>$tmpfile.lst
           else
               if [ ".$opt_t" = .yes ]; then

From ossp-cvs-owner@ossp.org  Fri Apr 27 14:12:30 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f3RCCSx06612; Fri, 27 Apr 2001 14:12:28 +0200 (CEST)
Date: Fri, 27 Apr 2001 14:12:28 +0200 (CEST)
Message-Id: <200104271212.f3RCCSx06612@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str str_format.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   27-Apr-2001 14:12:28
  Branch: HEAD                             Handle: 2001042713122800

  Modified files:
    ossp-pkg/str            str_format.c

  Log:
    *** empty log message ***

  Summary:
    Revision    Changes     Path
    1.21        +39 -14     ossp-pkg/str/str_format.c
  ____________________________________________________________________________

  Index: ossp-pkg/str/str_format.c
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 str_format.c
  --- ossp-pkg/str/str_format.c	2000/03/01 07:51:30	1.20
  +++ ossp-pkg/str/str_format.c	2001/04/27 12:12:28	1.21
  @@ -113,9 +113,10 @@
   #define NDIG            80
   
   /* 
  - * convert string to decimal. the number of digits is specified by
  - * ndigit decpt is set to the position of the decimal point sign is set
  - * to 0 for positive, 1 for negative. buf must have at least NDIG bytes.
  + * Convert decimal number to its string representation. The number of
  + * digits is specified by ndigit decpt is set to the position of the
  + * decimal point sign is set to 0 for positive, 1 for negative. buf must
  + * have at least NDIG bytes.
    */
   
   #define str_ecvt(arg,ndigits,decpt,sign,buf) \
  @@ -152,9 +153,9 @@
       /* Do integer part */
       if (fi != 0) {
           p1 = &buf[NDIG];
  -        while (fi != 0) {
  +        while (fi != 0 && p1 > &buf[0]) {
               fj = modf(fi / 10, &fi);
  -            *--p1 = (int) ((fj + .03) * 10) + '0';
  +            *--p1 = (int)((fj + .03) * 10) + '0';
               r2++;
           }
           while (p1 < &buf[NDIG])
  @@ -200,7 +201,7 @@
           }
       }
       *p = NUL;
  -    return (buf);
  +    return buf;
   }
   
   static char *
  @@ -265,7 +266,7 @@
       if (p2[-1] == '.' && !altform)
           p2--;
       *p2 = NUL;
  -    return (buf);
  +    return buf;
   }
   
   /*
  @@ -293,10 +294,10 @@
    */
   #define NUM(c) ((c) - '0')
   #define STR_TO_DEC(str, num) {    \
  -    num = NUM( *str++ );          \
  +    num = NUM(*str++);            \
       while (str_isdigit(*(str))) { \
           num *= 10 ;               \
  -        num += NUM( *str++ ) ;    \
  +        num += NUM(*str++) ;      \
       }                             \
   }
        
  @@ -328,8 +329,8 @@
    * Increase length. Set the has_prefix flag.
    */
   #define PREFIX(str, length, ch) \
  -    *--str = ch; \
  -    length++;    \
  +    *--str = ch;                \
  +    length++;                   \
       has_prefix = TRUE
   
   /*
  @@ -863,9 +864,9 @@
                   case 'e':
                   case 'E':
                       fp_num = va_arg(ap, double);
  -                    /* We use &num_buf[ 1 ], so that we have room for the sign */
  +                    /* We use &num_buf[1], so that we have room for the sign */
                       s = conv_fp(*fmt, fp_num, alternate_form,
  -                                (adjust_precision == FALSE) ?  FLOAT_DIGITS : precision, 
  +                                (adjust_precision == FALSE) ? FLOAT_DIGITS : precision, 
                                   &is_negative, &num_buf[1], &s_len);
                       if (is_negative)
                           prefix_char = '-';
  @@ -875,6 +876,7 @@
                           prefix_char = ' ';
                       break;
   
  +
                   /* Double Floating Point (style 2) */
                   case 'g':
                   case 'G':
  @@ -882,7 +884,7 @@
                           precision = FLOAT_DIGITS;
                       else if (precision == 0)
                           precision = 1;
  -                    /* We use &num_buf[ 1 ], so that we have room for the sign */
  +                    /* We use &num_buf[1], so that we have room for the sign */
                       s = str_gcvt(va_arg(ap, double), precision, &num_buf[1],
                                    alternate_form);
                       if (*s == '-')
  @@ -1076,4 +1078,27 @@
       va_end(ap);
       return rv;
   }
  +
  +#if 0 /* still don't know whether it fits into API */
  +char *str_aprintf(const char *fmt, ...)
  +{
  +    va_list ap;
  +    char *s;
  +    int rv;
  +
  +    va_start(ap, fmt);
  +    rv = str_format_va(NULL, -1, fmt, ap);
  +    va_end(ap);
  +    if (rv == -1)
  +        return NULL;
  +    if ((s = malloc(rv+1)) == NULL)
  +        return NULL;
  +    va_start(ap, fmt);
  +    rv = str_format_va(s, rv+1, fmt, ap);
  +    va_end(ap);
  +    if (rv == -1)
  +        return NULL;
  +    return s;
  +}
  +#endif 
   

From ossp-cvs-owner@ossp.org  Fri Apr 27 14:22:23 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f3RCMMl07556; Fri, 27 Apr 2001 14:22:22 +0200 (CEST)
Date: Fri, 27 Apr 2001 14:22:22 +0200 (CEST)
Message-Id: <200104271222.f3RCMMl07556@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str .configure ChangeLog TODO shtool str.3 str_fo...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   27-Apr-2001 14:22:22
  Branch: HEAD                             Handle: 2001042713222100

  Modified files:
    ossp-pkg/str            .configure ChangeLog TODO shtool str.3
                            str_format.c

  Log:
    *** empty log message ***

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-pkg/str/.configure
    1.28        +7  -1      ossp-pkg/str/ChangeLog
    1.21        +2  -0      ossp-pkg/str/TODO
    1.6         +48 -39     ossp-pkg/str/shtool
    1.33        +270 -398   ossp-pkg/str/str.3
    1.22        +49 -30     ossp-pkg/str/str_format.c
  ____________________________________________________________________________

  Index: ossp-pkg/str/.configure
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 .configure
  --- ossp-pkg/str/.configure	2000/01/16 15:19:44	1.4
  +++ ossp-pkg/str/.configure	2001/04/27 12:22:21	1.5
  @@ -1,2 +1,2 @@
   :
  -CC=egcc ./configure --enable-debug --prefix=/sw/pkg/str "$@"
  +CC=cc ./configure --enable-debug --prefix=/sw/pkg/str "$@"
  Index: ossp-pkg/str/ChangeLog
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 ChangeLog
  --- ossp-pkg/str/ChangeLog	2000/11/20 19:48:39	1.27
  +++ ossp-pkg/str/ChangeLog	2001/04/27 12:22:21	1.28
  @@ -9,7 +9,13 @@
   
    ChangeLog
   
  - Changes between 0.9.4 and 0.9.5 (14-Jul-2000 to xx-Nov-2000):
  + Changes between 0.9.4 and 0.9.5 (14-Jul-2000 to xx-May-2001):
  +
  +   *) Upgrade to GNU shtool 1.5.3.
  +      [Ralf S. Engelschall]
  +
  +   *) Fixed handling of NaN and Inf values in str_format.c 
  +      [Lukas Schroeder <lukas@edeal.de>]
   
      *) Fix unsigned vs. signed problem in str_span.c.
         [Joseph Heenan <joseph@picsel.com>]
  Index: ossp-pkg/str/TODO
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 TODO
  --- ossp-pkg/str/TODO	2000/07/03 09:38:16	1.20
  +++ ossp-pkg/str/TODO	2001/04/27 12:22:21	1.21
  @@ -10,6 +10,8 @@
   
     o look at printf ideas from ../stdio/printf!!
     o look at ../strnatcmp
  +  o dynamic strings
  +  o aprintf() variant of str_format (see end of str_format.c!)
      
     The following *have* to be done before 1.0.0:
   
  Index: ossp-pkg/str/shtool
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 shtool
  --- ossp-pkg/str/shtool	2000/11/20 19:48:39	1.5
  +++ ossp-pkg/str/shtool	2001/04/27 12:22:21	1.6
  @@ -1,12 +1,12 @@
   #!/bin/sh
   ##
   ##  GNU shtool -- The GNU Portable Shell Tool
  -##  Copyright (c) 1994-2000 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1994-2001 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  See http://www.gnu.org/software/shtool/ for more information.
   ##  See ftp://ftp.gnu.org/gnu/shtool/ for latest version.
   ##
  -##  Version:  1.5.1 (29-Jul-2000)
  +##  Version:  1.5.3 (19-Apr-2001)
   ##  Contents: 6/17 available modules
   ##
   
  @@ -26,7 +26,7 @@
   ##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
   ##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
   ##
  -##  Notice: Given that you include this file verbatim into your own
  +##  NOTICE: Given that you include this file verbatim into your own
   ##  source tree, you are justified in saying that it remains separate
   ##  from your package, and that this way you are simply just using GNU
   ##  shtool. So, in this situation, there is no requirement that your
  @@ -65,8 +65,8 @@
       exit 1
   fi
   if [ ".$1" = ".-h" -o ".$1" = ".--help" ]; then
  -    echo "This is GNU shtool, version 1.5.1 (29-Jul-2000)"
  -    echo "Copyright (c) 1994-2000 Ralf S. Engelschall <rse@engelschall.com>"
  +    echo "This is GNU shtool, version 1.5.3 (19-Apr-2001)"
  +    echo "Copyright (c) 1994-2001 Ralf S. Engelschall <rse@engelschall.com>"
       echo "Report bugs to <bug-shtool@gnu.org>"
       echo ''
       echo "Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]" 
  @@ -80,11 +80,11 @@
       echo 'Available <cmd-name> [<cmd-options>] [<cmd-args>]:'
       echo '  echo     [-n] [-e] [<str> ...]'
       echo '  install  [-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>]'
  -    echo '           [-e<ext>] <file> [<file> ...] <path>'
  +    echo '           [-e<sed-cmd>] <file> [<file> ...] <path>'
       echo '  mkdir    [-t] [-f] [-p] [-m<mode>] <dir> [<dir> ...]'
       echo '  fixperm  [-v] [-t] <path> [<path> ...]'
  -    echo '  tarball  [-t] [-v] [-o <tarball>] [-c <prog>] [-d <dir>] [-u'
  -    echo '           <user>] [-g <group>] [-e <pattern>] <path> [<path> ...]'
  +    echo '  tarball  [-t] [-v] [-o<tarball>] [-c<prog>] [-d<dir>] [-u<user>]'
  +    echo '           [-g<group>] [-e<pattern>] <path> [<path> ...]'
       echo '  version  [-l<lang>] [-n<name>] [-p<prefix>] [-s<version>] [-e]'
       echo '           [-i<knob>] [-d<type>] <file>'
       echo ''
  @@ -105,7 +105,7 @@
       exit 0
   fi
   if [ ".$1" = ".-v" -o ".$1" = ."--version" ]; then
  -    echo "GNU shtool 1.5.1 (29-Jul-2000)"
  +    echo "GNU shtool 1.5.3 (19-Apr-2001)"
       exit 0
   fi
   if [ ".$1" = ".-r" -o ".$1" = ."--recreate" ]; then
  @@ -147,15 +147,15 @@
           ;;
       install )
           str_tool="install"
  -        str_usage="[-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>] [-e<ext>] <file> [<file> ...] <path>"
  +        str_usage="[-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>] [-e<sed-cmd>] <file> [<file> ...] <path>"
           arg_spec="2+"
  -        opt_spec="v.t.c.C.s.m:o:g:e:"
  +        opt_spec="v.t.c.C.s.m:o:g:e+"
           opt_v=no
           opt_t=no
           opt_c=no
           opt_C=no
           opt_s=no
  -        opt_m=""
  +        opt_m="0755"
           opt_o=""
           opt_g=""
           opt_e=""
  @@ -180,7 +180,7 @@
           ;;
       tarball )
           str_tool="tarball"
  -        str_usage="[-t] [-v] [-o <tarball>] [-c <prog>] [-d <dir>] [-u <user>] [-g <group>] [-e <pattern>] <path> [<path> ...]"
  +        str_usage="[-t] [-v] [-o<tarball>] [-c<prog>] [-d<dir>] [-u<user>] [-g<group>] [-e<pattern>] <path> [<path> ...]"
           gen_tmpfile=yes
           arg_spec="1+"
           opt_spec="t.v.o:c:d:u:g:e:"
  @@ -353,6 +353,7 @@
       tmpfile="$tmpdir/.shtool.$$"
       rm -f $tmpfile >/dev/null 2>&1
       touch $tmpfile
  +    chmod 600 $tmpfile
   fi
   
   ##
  @@ -364,7 +365,7 @@
   echo )
       ##
       ##  echo -- Print string with optional construct expansion
  -    ##  Copyright (c) 1998-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1998-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for WML as buildinfo
       ##
       
  @@ -587,7 +588,7 @@
   install )
       ##
       ##  install -- Install a program, script or datafile
  -    ##  Copyright (c) 1997-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1997-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for shtool
       ##
       
  @@ -617,19 +618,13 @@
       for src in $srcs; do
           dst=$dstpath
       
  -        #  If destination is a directory, append the input filename
  +        #   if destination is a directory, append the input filename
           if [ $dstisdir = 1 ]; then
               dstfile=`echo "$src" | sed -e 's;.*/\([^/]*\)$;\1;'`
               dst="$dst/$dstfile"
           fi
       
  -        #  Add a possible extension to src and dst
  -        if [ ".$opt_e" != . ]; then
  -            src="$src$opt_e"
  -            dst="$dst$opt_e"
  -        fi
  -    
  -        #  Check for correct arguments
  +        #   check for correct arguments
           if [ ".$src" = ".$dst" ]; then
               echo "$msgprefix:Warning: source and destination are the same - skipped" 1>&2
               continue
  @@ -639,18 +634,18 @@
               continue
           fi
       
  -        #  Make a temp file name in the destination directory
  +        #   make a temp file name in the destination directory
           dsttmp=`echo $dst |\
                   sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;' -e 's;^$;.;' \
                       -e "s;\$;/#INST@$$#;"`
       
  -        #  Verbosity
  +        #   verbosity
           if [ ".$opt_v" = .yes ]; then
               echo "$src -> $dst" 1>&2
           fi
       
  -        #  Copy or move the file name to the temp name
  -        #  (because we might be not allowed to change the source)
  +        #   copy or move the file name to the temp name
  +        #   (because we might be not allowed to change the source)
           if [ ".$opt_C" = .yes ]; then
               opt_c=yes
           fi
  @@ -666,8 +661,16 @@
               mv $src $dsttmp || exit $?
           fi
       
  -        #  Adjust the target file
  -        #  (we do chmod last to preserve setuid bits)
  +        #   adjust the target file
  +        if [ ".$opt_e" != . ]; then
  +            sed='sed'
  +            for e in $opt_e; do
  +                sed="$sed -e '$e'"
  +            done
  +            cp $dsttmp $dsttmp.old
  +            eval "$sed <$dsttmp.old >$dsttmp" || exit $?
  +            rm -f $dsttmp.old
  +        fi
           if [ ".$opt_s" = .yes ]; then
               if [ ".$opt_t" = .yes ]; then
                   echo "strip $dsttmp" 1>&2
  @@ -686,14 +689,14 @@
               fi
               chgrp $opt_g $dsttmp || exit $?
           fi
  -        if [ ".$opt_m" != . ]; then
  +        if [ ".$opt_m" != ".-" ]; then
               if [ ".$opt_t" = .yes ]; then
                   echo "chmod $opt_m $dsttmp" 1>&2
               fi
               chmod $opt_m $dsttmp || exit $?
           fi
       
  -        #   Determine whether to do a quick install
  +        #   determine whether to do a quick install
           #   (has to be done _after_ the strip was already done)
           quick=no
           if [ ".$opt_C" = .yes ]; then
  @@ -704,7 +707,7 @@
               fi
           fi
       
  -        #   Finally install the file to the real destination
  +        #   finally, install the file to the real destination
           if [ $quick = yes ]; then
               if [ ".$opt_t" = .yes ]; then
                   echo "rm -f $dsttmp" 1>&2
  @@ -722,7 +725,7 @@
   mkdir )
       ##
       ##  mkdir -- Make one or more directories
  -    ##  Copyright (c) 1996-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1996-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for public domain by Noah Friedman <friedman@prep.ai.mit.edu>
       ##  Cleaned up and enhanced for shtool
       ##
  @@ -731,7 +734,7 @@
       for p in ${1+"$@"}; do
           #   if the directory already exists...
           if [ -d "$p" ]; then
  -            if [ ".$opt_f" = .no ] && [ ".$opt_p" = .no ]; then
  +            if [ ".$opt_f" = .no -a ".$opt_p" = .no ]; then
                   echo "$msgprefix:Error: directory already exists: $p" 1>&2
                   errstatus=1
                   break
  @@ -745,6 +748,12 @@
                   echo "mkdir $p" 1>&2
               fi
               mkdir $p || errstatus=$?
  +            if [ ".$opt_m" != . ]; then
  +                if [ ".$opt_t" = .yes ]; then
  +                    echo "chmod $opt_m $p" 1>&2
  +                fi
  +                chmod $opt_m $p || errstatus=$?
  +            fi
           else
               #   the smart situation
               set fnord `echo ":$p" |\
  @@ -781,7 +790,7 @@
   fixperm )
       ##
       ##  fixperm -- Fix file permissions inside a source tree
  -    ##  Copyright (c) 1996-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1996-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for ePerl
       ##
       
  @@ -837,7 +846,7 @@
   tarball )
       ##
       ##  tarball -- Roll distribution tarballs
  -    ##  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for shtool
       ##
       
  @@ -863,7 +872,7 @@
           for tool in `echo $tools | sed -e 's/,/ /g'`; do
               #   iterate over paths
               for path in $paths; do
  -                if [ $minusx "$path/$tool" ] && [ ! -d "$path/$tool" ]; then
  +                if [ $minusx "$path/$tool" -a ! -d "$path/$tool" ]; then
                       eval "prg_${prg}=\"$path/$tool\""
                       break
                   fi
  @@ -889,7 +898,7 @@
               if [ ".$opt_t" = .yes ]; then
                   echo "(cd $src && $prg_find . -type f -depth -print) | sed -e 's:^\\.\$::' -e 's:^\\./::' | cat $exclude >>$tmpfile.lst" 1>&2
               fi
  -            (cd $src && find . -type f -depth -print) |\
  +            (cd $src && $prg_find . -type f -depth -print) |\
               sed -e 's:^\.$::' -e 's:^\./::' | eval cat $exclude >>$tmpfile.lst
           else
               if [ ".$opt_t" = .yes ]; then
  @@ -1000,7 +1009,7 @@
   version )
       ##
       ##  version -- Maintain a version information file
  -    ##  Copyright (c) 1994-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1994-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for ePerl, rewritten from scratch for shtool
       ##
       
  Index: ossp-pkg/str/str.3
  ============================================================
  $ cvs diff -u -r1.32 -r1.33 str.3
  --- ossp-pkg/str/str.3	2000/07/14 15:24:16	1.32
  +++ ossp-pkg/str/str.3	2001/04/27 12:22:21	1.33
  @@ -1,9 +1,9 @@
  -.rn '' }`
  -''' $RCSfile$$Revision$$Date$
  -'''
  -''' $Log$
  -'''
  -.de Sh
  +.\" Automatically generated by Pod::Man version 1.02
  +.\" Sun Dec 31 12:23:40 2000
  +.\"
  +.\" Standard preamble:
  +.\" ======================================================================
  +.de Sh \" Subsection heading
   .br
   .if t .Sp
   .ne 5
  @@ -11,150 +11,106 @@
   \fB\\$1\fR
   .PP
   ..
  -.de Sp
  +.de Sp \" Vertical space (when we can't use .PP)
   .if t .sp .5v
   .if n .sp
   ..
  -.de Ip
  +.de Ip \" List item
   .br
   .ie \\n(.$>=3 .ne \\$3
   .el .ne 3
   .IP "\\$1" \\$2
   ..
  -.de Vb
  +.de Vb \" Begin verbatim text
   .ft CW
   .nf
   .ne \\$1
   ..
  -.de Ve
  +.de Ve \" End verbatim text
   .ft R
   
   .fi
   ..
  -'''
  -'''
  -'''     Set up \*(-- to give an unbreakable dash;
  -'''     string Tr holds user defined translation string.
  -'''     Bell System Logo is used as a dummy character.
  -'''
  +.\" Set up some character translations and predefined strings.  \*(-- will
  +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
  +.\" double quote, and \*(R" will give a right double quote.  | will give a
  +.\" real vertical bar.  \*(C+ will give a nicer C++.  Capital omega is used
  +.\" to do unbreakable dashes and therefore won't be available.  \*(C` and
  +.\" \*(C' expand to `' in nroff, nothing in troff, for use with C<>
   .tr \(*W-|\(bv\*(Tr
  +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
   .ie n \{\
  -.ds -- \(*W-
  -.ds PI pi
  -.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
  -.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
  -.ds L" ""
  -.ds R" ""
  -'''   \*(M", \*(S", \*(N" and \*(T" are the equivalent of
  -'''   \*(L" and \*(R", except that they are used on ".xx" lines,
  -'''   such as .IP and .SH, which do another additional levels of
  -'''   double-quote interpretation
  -.ds M" """
  -.ds S" """
  -.ds N" """""
  -.ds T" """""
  -.ds L' '
  -.ds R' '
  -.ds M' '
  -.ds S' '
  -.ds N' '
  -.ds T' '
  +.    ds -- \(*W-
  +.    ds PI pi
  +.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
  +.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
  +.    ds L" ""
  +.    ds R" ""
  +.    ds C` `
  +.    ds C' '
   'br\}
   .el\{\
  -.ds -- \(em\|
  -.tr \*(Tr
  -.ds L" ``
  -.ds R" ''
  -.ds M" ``
  -.ds S" ''
  -.ds N" ``
  -.ds T" ''
  -.ds L' `
  -.ds R' '
  -.ds M' `
  -.ds S' '
  -.ds N' `
  -.ds T' '
  -.ds PI \(*p
  +.    ds -- \|\(em\|
  +.    ds PI \(*p
  +.    ds L" ``
  +.    ds R" ''
   'br\}
  -.\"	If the F register is turned on, we'll generate
  -.\"	index entries out stderr for the following things:
  -.\"		TH	Title 
  -.\"		SH	Header
  -.\"		Sh	Subsection 
  -.\"		Ip	Item
  -.\"		X<>	Xref  (embedded
  -.\"	Of course, you have to process the output yourself
  -.\"	in some meaninful fashion.
  -.if \nF \{
  -.de IX
  -.tm Index:\\$1\t\\n%\t"\\$2"
  -..
  -.nr % 0
  -.rr F
  +.\"
  +.\" If the F register is turned on, we'll generate index entries on stderr
  +.\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and
  +.\" index entries marked with X<> in POD.  Of course, you'll have to process
  +.\" the output yourself in some meaningful fashion.
  +.if \nF \{\
  +.    de IX
  +.    tm Index:\\$1\t\\n%\t"\\$2"
  +.    .
  +.    nr % 0
  +.    rr F
   .\}
  -.TH str 3 "14-Jul-2000" "Str 0.9.5" "String Library"
  -.UC
  -.if n .hy 0
  +.\"
  +.\" For nroff, turn off justification.  Always turn off hyphenation; it
  +.\" makes way too many mistakes in technical documents.
  +.hy 0
   .if n .na
  -.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
  -.de CQ          \" put $1 in typewriter font
  -.ft CW
  -'if n "\c
  -'if t \\&\\$1\c
  -'if n \\&\\$1\c
  -'if n \&"
  -\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
  -'.ft R
  -..
  -.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
  -.	\" AM - accent mark definitions
  +.\"
  +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
  +.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
   .bd B 3
  -.	\" fudge factors for nroff and troff
  +.    \" fudge factors for nroff and troff
   .if n \{\
  -.	ds #H 0
  -.	ds #V .8m
  -.	ds #F .3m
  -.	ds #[ \f1
  -.	ds #] \fP
  +.    ds #H 0
  +.    ds #V .8m
  +.    ds #F .3m
  +.    ds #[ \f1
  +.    ds #] \fP
   .\}
   .if t \{\
  -.	ds #H ((1u-(\\\\n(.fu%2u))*.13m)
  -.	ds #V .6m
  -.	ds #F 0
  -.	ds #[ \&
  -.	ds #] \&
  +.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
  +.    ds #V .6m
  +.    ds #F 0
  +.    ds #[ \&
  +.    ds #] \&
   .\}
  -.	\" simple accents for nroff and troff
  +.    \" simple accents for nroff and troff
   .if n \{\
  -.	ds ' \&
  -.	ds ` \&
  -.	ds ^ \&
  -.	ds , \&
  -.	ds ~ ~
  -.	ds ? ?
  -.	ds ! !
  -.	ds /
  -.	ds q
  +.    ds ' \&
  +.    ds ` \&
  +.    ds ^ \&
  +.    ds , \&
  +.    ds ~ ~
  +.    ds /
   .\}
   .if t \{\
  -.	ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
  -.	ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
  -.	ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
  -.	ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
  -.	ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
  -.	ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
  -.	ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
  -.	ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
  -.	ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
  +.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
  +.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
  +.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
  +.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
  +.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
  +.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
   .\}
  -.	\" troff and (daisy-wheel) nroff accents
  +.    \" troff and (daisy-wheel) nroff accents
   .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
   .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
  -.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
  -.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
  -.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
  -.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
   .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
   .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
   .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
  @@ -162,124 +118,134 @@
   .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
   .ds ae a\h'-(\w'a'u*4/10)'e
   .ds Ae A\h'-(\w'A'u*4/10)'E
  -.ds oe o\h'-(\w'o'u*4/10)'e
  -.ds Oe O\h'-(\w'O'u*4/10)'E
  -.	\" corrections for vroff
  +.    \" corrections for vroff
   .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
   .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
  -.	\" for low resolution devices (crt and lpr)
  +.    \" for low resolution devices (crt and lpr)
   .if \n(.H>23 .if \n(.V>19 \
   \{\
  -.	ds : e
  -.	ds 8 ss
  -.	ds v \h'-1'\o'\(aa\(ga'
  -.	ds _ \h'-1'^
  -.	ds . \h'-1'.
  -.	ds 3 3
  -.	ds o a
  -.	ds d- d\h'-1'\(ga
  -.	ds D- D\h'-1'\(hy
  -.	ds th \o'bp'
  -.	ds Th \o'LP'
  -.	ds ae ae
  -.	ds Ae AE
  -.	ds oe oe
  -.	ds Oe OE
  +.    ds : e
  +.    ds 8 ss
  +.    ds o a
  +.    ds d- d\h'-1'\(ga
  +.    ds D- D\h'-1'\(hy
  +.    ds th \o'bp'
  +.    ds Th \o'LP'
  +.    ds ae ae
  +.    ds Ae AE
   .\}
   .rm #[ #] #H #V #F C
  +.\" ======================================================================
  +.\"
  +.IX Title "str 3"
  +.TH str 3 "14-Jul-2000" "Str 0.9.5" "String Library"
  +.UC
   .SH "NAME"
  -\fBStr\fR \- String Library
  +\&\fBStr\fR \- String Library
   .SH "VERSION"
  -Str 0.9.5 (14-Jul-2000)
  +.IX Header "VERSION"
  +Str \s-10.9.5 (14-Jul-2000)\s0
   .SH "SYNOPSIS"
  -\fBstr_len\fR,
  -\fBstr_copy\fR,
  -\fBstr_dup\fR,
  -\fBstr_concat\fR,
  -\fBstr_splice\fR,
  -\fBstr_compare\fR,
  -\fBstr_span\fR,
  -\fBstr_locate\fR,
  -\fBstr_token\fR,
  -\fBstr_parse\fR,
  -\fBstr_format\fR,
  -\fBstr_hash\fR,
  -\fBstr_base64\fR.
  +.IX Header "SYNOPSIS"
  +\&\fBstr_len\fR,
  +\&\fBstr_copy\fR,
  +\&\fBstr_dup\fR,
  +\&\fBstr_concat\fR,
  +\&\fBstr_splice\fR,
  +\&\fBstr_compare\fR,
  +\&\fBstr_span\fR,
  +\&\fBstr_locate\fR,
  +\&\fBstr_token\fR,
  +\&\fBstr_parse\fR,
  +\&\fBstr_format\fR,
  +\&\fBstr_hash\fR,
  +\&\fBstr_base64\fR.
   .SH "DESCRIPTION"
  -The \fBStr\fR library is a generic string library written in ANSI C which
  +.IX Header "DESCRIPTION"
  +The \fBStr\fR library is a generic string library written in \s-1ANSI\s0 C which
   provides functions for handling, matching, parsing, searching and
  -formatting of C strings. So it can be considered as a superset of POSIX
  -\fIstring\fR\|(3), but its main intention is to provide a more convinient and
  -compact API plus a more generalized functionality.
  +formatting of C strings. So it can be considered as a superset of \s-1POSIX\s0
  +\&\fIstring\fR\|(3), but its main intention is to provide a more convinient and
  +compact \s-1API\s0 plus a more generalized functionality.
   .SH "FUNCTIONS"
  -The following functions are provided by the \fBStr\fR API:
  +.IX Header "FUNCTIONS"
  +The following functions are provided by the \fBStr\fR \s-1API:\s0
   .Ip "str_size_t \fBstr_len\fR(const char *\fIs\fR);" 4
  +.IX Item "str_size_t str_len(const char *s);"
   This function determines the length of string \fIs\fR, i.e., the number
  -of characters starting at \fIs\fR that precede the terminating \f(CWNUL\fR
  -character. It returns \f(CWNULL\fR if \fIs\fR is \f(CWNULL\fR.
  +of characters starting at \fIs\fR that precede the terminating \f(CW\*(C`NUL\*(C'\fR
  +character. It returns \f(CW\*(C`NULL\*(C'\fR if \fIs\fR is \f(CW\*(C`NULL\*(C'\fR.
   .Ip "char *\fBstr_copy\fR(char *\fIs\fR, const char *\fIt\fR, size_t \fIn\fR);" 4
  +.IX Item "char *str_copy(char *s, const char *t, size_t n);"
   This copies the characters in string \fIt\fR into the string \fIs\fR, but never more
  -than \fIn\fR characters (if \fIn\fR is greater than \f(CW0\fR). The two involved strings
  -can overlap and the characters in \fIs\fR are always \f(CWNUL\fR\-terminated. The
  +than \fIn\fR characters (if \fIn\fR is greater than \f(CW\*(C`0\*(C'\fR). The two involved strings
  +can overlap and the characters in \fIs\fR are always \f(CW\*(C`NUL\*(C'\fR\-terminated. The
   string \fIs\fR has to be large enough to hold all characters to be copied.
  -function returns \f(CWNULL\fR if \fIs\fR or \fIt\fR are \f(CWNULL\fR. Else it returns the
  -pointer to the written \f(CWNUL\fR\-terminating character in \fIs\fR.
  +function returns \f(CW\*(C`NULL\*(C'\fR if \fIs\fR or \fIt\fR are \f(CW\*(C`NULL\*(C'\fR. Else it returns the
  +pointer to the written \f(CW\*(C`NUL\*(C'\fR\-terminating character in \fIs\fR.
   .Ip "char *\fBstr_dup\fR(const char *\fIs\fR, str_size_t \fIn\fR);" 4
  +.IX Item "char *str_dup(const char *s, str_size_t n);"
   This returns a copy of the characters in string \fIs\fR, but never more than \fIn\fR
  -characters if \fIn\fR is greater than \f(CW0\fR. It returns \f(CWNULL\fR if \fIs\fR is
  -\f(CWNULL\fR. The returned string has to be deallocated later with \fIfree\fR\|(3).
  +characters if \fIn\fR is greater than \f(CW\*(C`0\*(C'\fR. It returns \f(CW\*(C`NULL\*(C'\fR if \fIs\fR is
  +\&\f(CW\*(C`NULL\*(C'\fR. The returned string has to be deallocated later with \fIfree\fR\|(3).
   .Ip "char *\fBstr_concat\fR(char *\fIs\fR, ...);" 4
  +.IX Item "char *str_concat(char *s, ...);"
   This functions concatenates the characters of all string arguments into a new
  -allocated string and returns this new string.  If \fIs\fR is \f(CWNULL\fR the function
  -returns \f(CWNULL\fR. Else it returns the pointer to the written final
  -\f(CWNUL\fR\-terminating character in \fIs\fR. The returned string later has to be
  +allocated string and returns this new string.  If \fIs\fR is \f(CW\*(C`NULL\*(C'\fR the function
  +returns \f(CW\*(C`NULL\*(C'\fR. Else it returns the pointer to the written final
  +\&\f(CW\*(C`NUL\*(C'\fR\-terminating character in \fIs\fR. The returned string later has to be
   deallicated with \fIfree\fR\|(3).
   .Ip "char *\fBstr_splice\fR(char *\fIs\fR, str_size_t \fIoff\fR, str_size_t \fIn\fR, char *\fIt\fR, str_size_t \fIm\fR);" 4
  +.IX Item "char *str_splice(char *s, str_size_t off, str_size_t n, char *t, str_size_t m);"
   This splices the string \fIt\fR into string \fIs\fR, i.e., the \fIn\fR characters
   at offset \fIoff\fR in \fIs\fR are removed and at their location the string
  -\fIt\fR is inserted (or just the first \fIm\fR characters of \fIt\fR if \fIm\fR is
  -greater than \f(CW0\fR). It returns \f(CWNULL\fR if \fIs\fR or \fIt\fR are \f(CWNULL\fR.
  +\&\fIt\fR is inserted (or just the first \fIm\fR characters of \fIt\fR if \fIm\fR is
  +greater than \f(CW\*(C`0\*(C'\fR). It returns \f(CW\*(C`NULL\*(C'\fR if \fIs\fR or \fIt\fR are \f(CW\*(C`NULL\*(C'\fR.
   Else the string \fIs\fR is returned. The function supports also the
   situation where \fIt\fR is a sub-string of \fIs\fR as long as the area
  -\fIs+off\fR...\fIs+off+n\fR and \fIt\fR...\fIt+m\fR do not overlap. The caller
  +\&\fIs+off\fR...\fIs+off+n\fR and \fIt\fR...\fIt+m\fR do not overlap. The caller
   always has to make sure that enough room exists in \fIs\fR.
   .Ip "int \fBstr_compare\fR(const char *\fIs\fR, const char *\fIt\fR, str_size_t \fIn\fR, int \fImode\fR);" 4
  +.IX Item "int str_compare(const char *s, const char *t, str_size_t n, int mode);"
   This performs a lexicographical comparison of the two strings \fIs\fR
   and \fIt\fR (but never compares more than \fIn\fR characters of them)
  -and returns one of three return values: a value lower than \f(CW0\fR if
  -\fIs\fR is lexicographically lower than \fIt\fR, a vlue of exactly \f(CW0\fR
  -if \fIs\fR and \fIt\fR are equal and a value greater than \f(CW0\fR if \fIs\fR is
  -lexicographically higher than \fIt\fR. Per default (\fImode\fR is \f(CW0\fR) the
  -comparison is case-sensitive, but if \f(CWSTR_NOCASE\fR is used for \fImode\fR
  +and returns one of three return values: a value lower than \f(CW\*(C`0\*(C'\fR if
  +\&\fIs\fR is lexicographically lower than \fIt\fR, a vlue of exactly \f(CW\*(C`0\*(C'\fR
  +if \fIs\fR and \fIt\fR are equal and a value greater than \f(CW\*(C`0\*(C'\fR if \fIs\fR is
  +lexicographically higher than \fIt\fR. Per default (\fImode\fR is \f(CW\*(C`0\*(C'\fR) the
  +comparison is case-sensitive, but if \f(CW\*(C`STR_NOCASE\*(C'\fR is used for \fImode\fR
   the comparison is done in a case-insensitive way.
   .Ip "char *\fBstr_span\fR(const char *\fIs\fR, size_t \fIn\fR, const char *\fIcharset\fR, int \fImode\fR);" 4
  +.IX Item "char *str_span(const char *s, size_t n, const char *charset, int mode);"
   This functions spans a string \fIs\fR according to the characters specified in
  -\fIcharset\fR. If \fImode\fR is \f(CW0\fR, this means that \fIs\fR is spanned from left to
  -right starting at \fIs\fR (and ending either when reaching the terminating \f(CWNUL\fR
  +\&\fIcharset\fR. If \fImode\fR is \f(CW\*(C`0\*(C'\fR, this means that \fIs\fR is spanned from left to
  +right starting at \fIs\fR (and ending either when reaching the terminating \f(CW\*(C`NUL\*(C'\fR
   character or already after \fIn\fR spanned characters) as long as the characters
   of \fIs\fR are contained in \fIcharset\fR.
   .Sp
  -Alternatively one can use a \fImode\fR of \f(CWSTR_COMPLEMENT\fR to indicate that \fIs\fR
  +Alternatively one can use a \fImode\fR of \f(CW\*(C`STR_COMPLEMENT\*(C'\fR to indicate that \fIs\fR
   is spanned as long as the characters of \fIs\fR are \fInot\fR contained in
  -\fIcharset\fR, i.e., \fIcharset\fR then specifies the complement of the spanning
  +\&\fIcharset\fR, i.e., \fIcharset\fR then specifies the complement of the spanning
   characters.
   .Sp
  -In both cases one can additionally \*(L"or\*(R" (with the C operator ``\f(CW|\fR'')
  -\f(CWSTR_RIGHT\fR into \fImode\fR to indicate that the spanning is done right to
  -left starting at the terminating \f(CWNUL\fR character of \fIs\fR (and ending
  +In both cases one can additionally \*(L"or\*(R" (with the C operator ``\f(CW\*(C`|\*(C'\fR'')
  +\&\f(CW\*(C`STR_RIGHT\*(C'\fR into \fImode\fR to indicate that the spanning is done right to
  +left starting at the terminating \f(CW\*(C`NUL\*(C'\fR character of \fIs\fR (and ending
   either when reaching \fIs\fR or already after \fIn\fR spanned characters).
   .Ip "char *\fBstr_locate\fR(const char *\fIs\fR, str_size_t \fIn\fR, const char *\fIt\fR);" 4
  +.IX Item "char *str_locate(const char *s, str_size_t n, const char *t);"
   This functions searches for the (smaller) string \fIt\fR inside (larger) string
  -\fIs\fR. If \fIn\fR is not \f(CW0\fR, the search is performed only inside the first \fIn\fR
  +\&\fIs\fR. If \fIn\fR is not \f(CW\*(C`0\*(C'\fR, the search is performed only inside the first \fIn\fR
   characters of \fIs\fR. 
   .Ip "char *\fBstr_token\fR(char **\fIs\fR, const char *\fIdelim\fR, const char *\fIquote\fR, const char *\fIcomment\fR, int \fImode\fR);" 4
  +.IX Item "char *str_token(char **s, const char *delim, const char *quote, const char *comment, int mode);"
   This function considers the string \fIs\fR to consist of a sequence of
   zero or more text tokens separated by spans of one or more characters
   from the separator string \fIdelim\fR. However, text between matched pairs
   of quotemarks (characters in \fIquote\fR) is treated as plain text, never
   as delimiter (separator) text. Each call of this function returns a
   pointer to the first character of the first token of \fIs\fR. The token is
  -\f(CWNUL\fR\-terminated, i.e., the string \fIs\fR is processed in a destructive
  +\&\f(CW\*(C`NUL\*(C'\fR\-terminated, i.e., the string \fIs\fR is processed in a destructive
   way. If there are quotation marks or escape sequences, the input
   string is rewritten with quoted sections and escape sequences properly
   interpreted.
  @@ -289,39 +255,40 @@
   subsequent calls with the same pointer variable \fIs\fR will start
   processing from the position immediately after the last returned token.
   In this way subsequent calls will work through the string \fIs\fR until no
  -tokens remain. When no token remains in \fIs\fR, \f(CWNULL\fR is returned. The
  +tokens remain. When no token remains in \fIs\fR, \f(CW\*(C`NULL\*(C'\fR is returned. The
   string of token separators (\fIdelim\fR) and the string of quote characters
   (\fIquote\fR) may be changed from call to call.
   .Sp
   If a character in the string \fIs\fR is not quoted or escaped, and is in the
  -\fIcomment\fR set, then it is overwritten with a \f(CWNUL\fR character and the rest of
  +\&\fIcomment\fR set, then it is overwritten with a \f(CW\*(C`NUL\*(C'\fR character and the rest of
   the string is ignored. The characters to be used as quote characters are
   specified in the \fIquote\fR set, and must be used in balanced pairs. If there
   is more than one flavor of quote character, one kind of quote character may be
   used to quote another kind. If an unbalanced quote is found, the function
   silently act as if one had been placed at the end of the input string.  The
  -\fIdelim\fR and \fIquote\fR strings must be disjoint, i.e., they have to share
  +\&\fIdelim\fR and \fIquote\fR strings must be disjoint, i.e., they have to share
   no characters. 
   .Sp
   The \fImode\fR argument can be used to modify the processing of the string
  -(default for \fImode\fR is \f(CW0\fR): \f(CWSTR_STRIPQUOTES\fR forces \fIquote\fR
  -characters to be stripped from quoted tokens; \f(CWSTR_BACKSLASHESC\fR
  +(default for \fImode\fR is \f(CW\*(C`0\*(C'\fR): \f(CW\*(C`STR_STRIPQUOTES\*(C'\fR forces \fIquote\fR
  +characters to be stripped from quoted tokens; \f(CW\*(C`STR_BACKSLASHESC\*(C'\fR
   enables the interpretation (and expansion) of backslash escape sequences
  -(`\fB\ex\fR') through \s-1ANSI\s0\-C rules; \f(CWSTR_SKIPDELIMS\fR forces that after the
  -terminating \f(CWNUL\fR is written and the token returned, further delimiters
  +(`\fB\ex\fR') through \s-1ANSI-C\s0 rules; \f(CW\*(C`STR_SKIPDELIMS\*(C'\fR forces that after the
  +terminating \f(CW\*(C`NUL\*(C'\fR is written and the token returned, further delimiters
   are skipped (this allows one to make sure that the delimiters for
   one word don't become part of the next word if one change delimiters
  -between calls); and \f(CWSTR_TRIGRAPHS\fR enables the recognition and
  +between calls); and \f(CW\*(C`STR_TRIGRAPHS\*(C'\fR enables the recognition and
   expansion of \s-1ANSI\s0 C Trigraph sequences (as a side effect this enables
  -\f(CWSTR_BACKSLASHESC\fR, too).
  +\&\f(CW\*(C`STR_BACKSLASHESC\*(C'\fR, too).
   .Ip "int \fBstr_parse\fR(const char *\fIs\fR, const char *\fIpop\fR, ...);" 4
  +.IX Item "int str_parse(const char *s, const char *pop, ...);"
   This parses the string \fIs\fR according to the parsing operation specified
  -by \fIpop\fR. If the parsing operation succeeds, \f(CWTRUE\fR is returned. Else
  -\f(CWFALSE\fR is returned.
  +by \fIpop\fR. If the parsing operation succeeds, \f(CW\*(C`TRUE\*(C'\fR is returned. Else
  +\&\f(CW\*(C`FALSE\*(C'\fR is returned.
   .Sp
   The \fIpop\fR string usually has one of the following two syntax variants:
  -`\fBm\fR \fIdelim\fR \fIregex\fR \fIdelim\fR \fIflags\fR*\*(R' (for matching operations)
  -and `\fBs\fR \fIdelim\fR \fIregex\fR \fIdelim\fR \fIsubst\fR \fIdelim\fR \fIflags\fR*\*(R' (for
  +`\fBm\fR \fIdelim\fR \fIregex\fR \fIdelim\fR \fIflags\fR*' (for matching operations)
  +and `\fBs\fR \fIdelim\fR \fIregex\fR \fIdelim\fR \fIsubst\fR \fIdelim\fR \fIflags\fR*' (for
   substitution operations). For more details about the syntax variants
   and semantic of the \fIpop\fR argument see section \fB\s-1GORY\s0 \s-1DETAILS\s0, Parsing
   Specification\fR below. The syntax of the \fIregex\fR part in \fIpop\fR is
  @@ -329,10 +296,11 @@
   complete and gory details see \fIperlre\fR\|(1). A brief summary you can find
   under section \fB\s-1GORY\s0 \s-1DETAILS\s0, Perl Regular Expressions\fR below.
   .Ip "int \fBstr_format\fR(char *\fIs\fR, str_size_t \fIn\fR, const char *\fIfmt\fR, ...);" 4
  +.IX Item "int str_format(char *s, str_size_t n, const char *fmt, ...);"
   This formats a new string according to \fIfmt\fR and optionally following
   arguments and writes it into the string \fIs\fR, but never more than \fIn\fR
   characters at all. It returns the number of written characters.  If \fIs\fR is
  -\f(CWNULL\fR it just calculates the number of characters which would be written.
  +\&\f(CW\*(C`NULL\*(C'\fR it just calculates the number of characters which would be written.
   .Sp
   The function generates the output string under the control of the \fIfmt\fR
   format string that specifies how subsequent arguments (or arguments accessed
  @@ -346,40 +314,44 @@
   introduced by the character \fB%\fR. The arguments must correspond properly
   (after type promotion) with the conversion specifier. Which conversion
   specifications are supported are described in detail under \fB\s-1GORY\s0
  -\s-1DETAILS\s0, Format Specification\fR below.
  +\&\s-1DETAILS\s0, Format Specification\fR below.
   .Ip "unsigned long \fBstr_hash\fR(const char *\fIs\fR, str_size_t \fIn\fR, int \fImode\fR);" 4
  +.IX Item "unsigned long str_hash(const char *s, str_size_t n, int mode);"
   This function calculates a hash value of string \fIs\fR (or of its first \fIn\fR
  -characters if \fIn\fR is equal to \f(CW0\fR). The following hashing functions
  +characters if \fIn\fR is equal to \f(CW\*(C`0\*(C'\fR). The following hashing functions
   are supported and can be selected with \fImode\fR: \s-1STR_HASH_DJBX33\s0 (Daniel
   J. Berstein, Times 33 Hash with Addition), \s-1STR_HASH_BJDDJ\s0 (Bob
   Jenkins, Dr. Dobbs Journal), and \s-1STR_HASH_MACRC32\s0 (Mark Adler, Cyclic
  -Redundancy Check with 32-Bit). This function is intended for fast use
  +Redundancy Check with 32\-Bit). This function is intended for fast use
   in hashing algorithms and \fInot\fR for use as cryptographically strong
   message digests.
   .Ip "int \fBstr_base64\fR(char *\fIs\fR, str_size_t \fIn\fR, unsigned char *\fIucp\fR, str_size_t \fIucn\fR, int \fImode\fR);" 4
  +.IX Item "int str_base64(char *s, str_size_t n, unsigned char *ucp, str_size_t ucn, int mode);"
   This function Base64 encodes \fIucn\fR bytes starting at \fIucp\fR and writes
   the resulting string into \fIs\fR (but never more than \fIn\fR characters are
  -written). The \fImode\fR for this operation has to be \f(CWSTR_BASE64_ENCODE\fR.
  -Additionally one can \s-1OR\s0 the value \f(CWSTR_BASE64_STRICT\fR to enable strict
  +written). The \fImode\fR for this operation has to be \f(CW\*(C`STR_BASE64_ENCODE\*(C'\fR.
  +Additionally one can \s-1OR\s0 the value \f(CW\*(C`STR_BASE64_STRICT\*(C'\fR to enable strict
   encoding where after every 72th output character a newline character is
   inserted. The function returns the number of output characters written.
  -If \fIs\fR is \f(CWNULL\fR the function just calculates the number of required
  +If \fIs\fR is \f(CW\*(C`NULL\*(C'\fR the function just calculates the number of required
   output characters.
   .Sp
  -Alternatively, if \fImode\fR is \f(CWSTR_BASE64_DECODE\fR the string \fIs\fR (or
  -the first \fIn\fR characters only if \fIn\fR is not \f(CW0\fR) is decoded and the
  -output bytes written at \fIucp\fR. Again, if \fIucp\fR is \f(CWNULL\fR only the
  +Alternatively, if \fImode\fR is \f(CW\*(C`STR_BASE64_DECODE\*(C'\fR the string \fIs\fR (or
  +the first \fIn\fR characters only if \fIn\fR is not \f(CW\*(C`0\*(C'\fR) is decoded and the
  +output bytes written at \fIucp\fR. Again, if \fIucp\fR is \f(CW\*(C`NULL\*(C'\fR only the
   number of required output bytes are calculated.
   .SH "GORY DETAILS"
  +.IX Header "GORY DETAILS"
   In this part of the documentation more complex topics are documented in
   detail.
   .Sh "Perl Regular Expressions"
  +.IX Subsection "Perl Regular Expressions"
   The regular expressions used in \fBStr\fR are more or less Perl compatible
   (they are provided by a stripped down and built-in version of the
  -\fI\s-1PCRE\s0\fR library). So the syntax description in \fIperlre\fR\|(1) applies
  +\&\fI\s-1PCRE\s0\fR library). So the syntax description in \fIperlre\fR\|(1) applies
   and don't has to be repeated here again. For a deeper understanding
   and details you should have a look at the book `\fIMastering Regular
  -Expressions\fR\*(R' (see also the \fIperlbook\fR\|(1) manpage) by \fIJeffrey Friedl\fR.
  +Expressions\fR' (see also the \fIperlbook\fR\|(1) manpage) by \fIJeffrey Friedl\fR.
   For convinience reasons we give you only a brief summary of Perl
   compatible regular expressions:
   .PP
  @@ -465,74 +437,84 @@
   \&  (?imsx-imsx)          One or more embedded pattern-match modifiers
   .Ve
   .Sh "Parsing Specification"
  +.IX Subsection "Parsing Specification"
   The \fBstr_parse\fR(const char *\fIs\fR, const char *\fIpop\fR, ...) function
   is a very flexible but complex one. The argument \fIs\fR is the string on
   which the parsing operation specified by argument \fIpop\fR is applied.
  -The parsing semantics are highly influenced by Perl's `\fB=~\fR\*(R' matching
  +The parsing semantics are highly influenced by Perl's `\fB=~\fR' matching
   operator, because one of the main goals of \fIstr_parse\fR\|(3) is to allow one
   to rewrite typical Perl matching constructs into C.
   .PP
   Now to the gory details. In general, the \fIpop\fR argument of \fIstr_parse\fR\|(3)
   has one of the following two syntax variants:
  -.Ip "\fBMatching:\fR `\fBm\fR \fIdelim\fR \fIregex\fR \fIdelim\fR \fIflags\fR*': " 4
  +.Ip "\fBMatching:\fR `\fBm\fR \fIdelim\fR \fIregex\fR \fIdelim\fR \fIflags\fR*':" 4
  +.IX Item "Matching: `m delim regex delim flags*':"
   This matches \fIs\fR against the Perl-style regular expression \fIregex\fR
   under the control of zero or more \fIflags\fR which control the parsing
  -semantics. The stripped down \fIpop\fR syntax `\fIregex\fR\*(R' is equivalent to
  -`\fBm/\fR\fIregex\fR\fB/\fR\*(R'. 
  +semantics. The stripped down \fIpop\fR syntax `\fIregex\fR' is equivalent to
  +`\fBm/\fR\fIregex\fR\fB/\fR'. 
   .Sp
   For each grouping pair of parenthesis in \fIregex\fR, the text in \fIs\fR
   which was grouped by the parenthesis is extracted into new strings.
   These per default are allocated as seperate strings and returned to the
  -caller through following `\fBchar **\fR\*(R' arguments. The caller is required
  +caller through following `\fBchar **\fR' arguments. The caller is required
   to \fIfree\fR\|(3) them later.
  -.Ip "\fBSubstitution:\fR `\fBs\fR \fIdelim\fR \fIregex\fR \fIdelim\fR \fIsubst\fR \fIdelim\fR \fIflags\fR*': " 4
  +.Ip "\fBSubstitution:\fR `\fBs\fR \fIdelim\fR \fIregex\fR \fIdelim\fR \fIsubst\fR \fIdelim\fR \fIflags\fR*':" 4
  +.IX Item "Substitution: `s delim regex delim subst delim flags*':"
   This matches \fIs\fR against the Perl-style regular expression \fIregex\fR
   under the control of zero or more \fIflags\fR which control the parsing
   semantics. As a result of the operation, a new string formed which
   consists of \fIs\fR but with the part which matched \fIregex\fR replaced by
  -\fIsubst\fR. The result string is returned to the caller through a `\fBchar
  -**\fR\*(R' argument. The caller is required to \fIfree\fR\|(3) this later.
  +\&\fIsubst\fR. The result string is returned to the caller through a `\fBchar
  +**\fR' argument. The caller is required to \fIfree\fR\|(3) this later.
   .Sp
   For each grouping pair of parenthesis in \fIregex\fR, the text in \fIs\fR
   which was grouped by the parenthesis is extracted into new strings
  -and can be referenced for expansion via `\fB$n\fR\*(R' (n=1,..) in \fIsubst\fR.
  -Additionally any \fIstr_format\fR\|(3) style `\fB%\fR\*(R' constructs in \fIsubst\fR are
  +and can be referenced for expansion via `\fB$n\fR' (n=1,..) in \fIsubst\fR.
  +Additionally any \fIstr_format\fR\|(3) style `\fB%\fR' constructs in \fIsubst\fR are
   expanded through additional caller supplied arguments.
   .PP
   The following \fIflags\fR are supported:
   .Ip "\fBb\fR" 4
  -If the \fIbundle\fR flag `\fBb\fR\*(R' is specified, the extracted strings are
  +.IX Item "b"
  +If the \fIbundle\fR flag `\fBb\fR' is specified, the extracted strings are
   bundled together into a single chunk of memory and its address is
  -returned to the caller with a additional `\fBchar **\fR\*(R' argument which has
  +returned to the caller with a additional `\fBchar **\fR' argument which has
   to preceed the regular string arguments. The caller then has to \fIfree\fR\|(3)
   only this chunk of memory in order to free all extracted strings at
   once.
   .Ip "\fBi\fR" 4
  -If the case-\fIinsensitive\fR flag `\fBi\fR\*(R' is specified, \fIregex\fR
  +.IX Item "i"
  +If the case-\fIinsensitive\fR flag `\fBi\fR' is specified, \fIregex\fR
   is matched in case-insensitive way.
   .Ip "\fBo\fR" 4
  -If the \fIonce\fR flag `\fBo\fR\*(R' is specified, this indicates to the \fBStr\fR
  +.IX Item "o"
  +If the \fIonce\fR flag `\fBo\fR' is specified, this indicates to the \fBStr\fR
   library that the whole \fIpop\fR string is constant and that its internal
   pre-processing (it is compiled into a deterministic finite automaton
   (\s-1DFA\s0) internally) has to be done only once (the \fBStr\fR library then
   caches the \s-1DFA\s0 which corresponds to the \fIpop\fR argument).
   .Ip "\fBx\fR" 4
  -If the \fIextended\fR flag `\fBx\fR\*(R' is specified, the \fIregex\fR's legibility
  +.IX Item "x"
  +If the \fIextended\fR flag `\fBx\fR' is specified, the \fIregex\fR's legibility
   is extended by permitting embedded whitespace and comments to allow one
   to write down complex regular expressions more cleary and even in a
   documented way.
   .Ip "\fBm\fR" 4
  -If the \fImultiple\fR lines flag `\fBm\fR\*(R' is specified, the string \fIs\fR is
  +.IX Item "m"
  +If the \fImultiple\fR lines flag `\fBm\fR' is specified, the string \fIs\fR is
   treated as multiple lines. That is, this changes the regular expression
  -meta characters `\fB^\fR\*(R' and `\fB$\fR\*(R' from matching at only the very start
  +meta characters `\fB^\fR' and `\fB$\fR' from matching at only the very start
   or end of the string \fIs\fR to the start or end of any line anywhere
   within the string \fIs\fR.
   .Ip "\fBs\fR" 4
  -If the \fIsingle\fR line flag `\fBs\fR\*(R' is specified, the string \fIs\fR is
  +.IX Item "s"
  +If the \fIsingle\fR line flag `\fBs\fR' is specified, the string \fIs\fR is
   treated as single line. That is, this changes the regular expression
  -meta character `\fB.\fR\*(R' to match any character whatsoever, even a newline,
  +meta character `\fB.\fR' to match any character whatsoever, even a newline,
   which it normally would not match.
   .SH "CONVERSION SPECIFICATION"
  +.IX Header "CONVERSION SPECIFICATION"
   In the format string of \fIstr_format\fR\|(3) each conversion specification is
   introduced by the character \fB%\fR. After the \fB%\fR, the following appear
   in sequence:
  @@ -546,7 +528,7 @@
   Zero or more of the following flags:
   .Sp
   A \fB#\fR character specifying that the value should be converted to an
  -``alternate form'\*(R'.  For \fBc\fR, \fBd\fR, \fBi\fR, \fBn\fR, \fBp\fR, \fBs\fR, and \fBu\fR,
  +``alternate form''.  For \fBc\fR, \fBd\fR, \fBi\fR, \fBn\fR, \fBp\fR, \fBs\fR, and \fBu\fR,
   conversions, this option has no effect.  For \fBo\fR conversions, the precision
   of the number is increased to force the first character of the output string
   to a zero (except if a zero value is printed with an explicit precision of
  @@ -557,21 +539,21 @@
   conversions only if a digit follows).  For \fBg\fR and \fBG\fR conversions, trailing
   zeros are not removed from the result as they would otherwise be.
   .Sp
  -A zero `\fB0\fR\*(R' character specifying zero padding.  For all conversions except
  -\fBn\fR, the converted value is padded on the left with zeros rather than blanks.
  +A zero `\fB0\fR' character specifying zero padding.  For all conversions except
  +\&\fBn\fR, the converted value is padded on the left with zeros rather than blanks.
   If a precision is given with a numeric conversion (\fBd\fR, \fBi\fR, \fBo\fR, \fBu\fR,
  -\fBi\fR, \fBx\fR, and \fBX\fR), the `\fB0\fR\*(R' flag is ignored.
  +\&\fBi\fR, \fBx\fR, and \fBX\fR), the `\fB0\fR' flag is ignored.
   .Sp
  -A negative field width flag `\fB\-\fR\*(R' indicates the converted value is to be left
  +A negative field width flag `\fB-\fR' indicates the converted value is to be left
   adjusted on the field boundary.  Except for \fBn\fR conversions, the converted
   value is padded on the right with blanks, rather than on the left with blanks
  -or zeros.  A `\fB\-\fR\*(R' overrides a `\fB0\fR\*(R' if both are given.
  +or zeros.  A `\fB-\fR' overrides a `\fB0\fR' if both are given.
   .Sp
   A space, specifying that a blank should be left before a positive number
   produced by a signed conversion (\fBd\fR, \fBe\fR, \fBE\fR, \fBf\fR, \fBg\fR, \fBG\fR, or \fBi\fR).
   .Sp
  -A `\fB+\fR\*(R' character specifying that a sign always be placed before a number
  -produced by a signed conversion.  A `\fB+\fR\*(R' overrides a space if both are used.
  +A `\fB+\fR' character specifying that a sign always be placed before a number
  +produced by a signed conversion.  A `\fB+\fR' overrides a space if both are used.
   .Ip "o" 4
   An optional decimal digit string specifying a minimum field width.
   If the converted value has fewer characters than the field width, it will
  @@ -579,38 +561,38 @@
   flag has been given) to fill out
   the field width.
   .Ip "o" 4
  -An optional precision, in the form of a period `\fB.\fR\*(R' followed by an
  +An optional precision, in the form of a period `\fB.\fR' followed by an
   optional digit string. If the digit string is omitted, the precision is
   taken as zero. This gives the minimum number of digits to appear for
  -\fBd\fR, \fBi\fR, \fBo\fR, \fBu\fR, \fBx\fR, and \fBX\fR conversions, the number of digits
  +\&\fBd\fR, \fBi\fR, \fBo\fR, \fBu\fR, \fBx\fR, and \fBX\fR conversions, the number of digits
   to appear after the decimal-point for \fBe\fR, \fBE\fR, and \fBf\fR conversions,
   the maximum number of significant digits for \fBg\fR and \fBG\fR conversions,
   or the maximum number of characters to be printed from a string for \fBs\fR
   conversions.
   .Ip "o" 4
   The optional character \fBh\fR, specifying that a following \fBd\fR, \fBi\fR, \fBo\fR,
  -\fBu\fR, \fBx\fR, or \fBX\fR conversion corresponds to a `\f(CWshort int\fR\*(R' or `\f(CWunsigned
  -short int\fR\*(R' argument, or that a following \fBn\fR conversion corresponds to a
  -pointer to a `\f(CWshort int\fR argument.
  +\&\fBu\fR, \fBx\fR, or \fBX\fR conversion corresponds to a `\f(CW\*(C`short int\*(C'\fR' or `\f(CW\*(C`unsigned
  +short int\*(C'\fR' argument, or that a following \fBn\fR conversion corresponds to a
  +pointer to a `\f(CW\*(C`short int\*(C'\fR argument.
   .Ip "o" 4
   The optional character \fBl\fR (ell) specifying that a following \fBd\fR, \fBi\fR,
  -\fBo\fR, \fBu\fR, \fBx\fR, or \fBX\fR conversion applies to a pointer to a `\f(CWlong int\fR\*(R'
  -or `\f(CWunsigned long int\fR\*(R' argument, or that a following \fBn\fR conversion
  -corresponds to a pointer to a `\f(CWlong int\fR argument.
  +\&\fBo\fR, \fBu\fR, \fBx\fR, or \fBX\fR conversion applies to a pointer to a `\f(CW\*(C`long int\*(C'\fR'
  +or `\f(CW\*(C`unsigned long int\*(C'\fR' argument, or that a following \fBn\fR conversion
  +corresponds to a pointer to a `\f(CW\*(C`long int\*(C'\fR argument.
   .Ip "o" 4
   The optional character \fBq\fR, specifying that a following \fBd\fR, \fBi\fR, \fBo\fR,
  -\fBu\fR, \fBx\fR, or \fBX\fR conversion corresponds to a `\f(CWquad int\fR\*(R' or `\f(CWunsigned
  -quad int\fR\*(R' argument, or that a following \fBn\fR conversion corresponds to a
  -pointer to a `\f(CWquad int\fR\*(R' argument.
  +\&\fBu\fR, \fBx\fR, or \fBX\fR conversion corresponds to a `\f(CW\*(C`quad int\*(C'\fR' or `\f(CW\*(C`unsigned
  +quad int\*(C'\fR' argument, or that a following \fBn\fR conversion corresponds to a
  +pointer to a `\f(CW\*(C`quad int\*(C'\fR' argument.
   .Ip "o" 4
   The character \fBL\fR specifying that a following \fBe\fR, \fBE\fR, \fBf\fR, \fBg\fR, or \fBG\fR
  -conversion corresponds to a `\f(CWlong double\fR\*(R' argument.
  +conversion corresponds to a `\f(CW\*(C`long double\*(C'\fR' argument.
   .Ip "o" 4
   A character that specifies the type of conversion to be applied.
   .PP
  -A field width or precision, or both, may be indicated by an asterisk `\fB*\fR\*(R' or
  -an asterisk followed by one or more decimal digits and a `\fB$\fR\*(R' instead of a
  -digit string.  In this case, an `\f(CWint\fR\*(R' argument supplies the field width or
  +A field width or precision, or both, may be indicated by an asterisk `\fB*\fR' or
  +an asterisk followed by one or more decimal digits and a `\fB$\fR' instead of a
  +digit string.  In this case, an `\f(CW\*(C`int\*(C'\fR' argument supplies the field width or
   precision.  A negative field width is treated as a left adjustment flag
   followed by a positive field width; a negative precision is treated as though
   it were missing.  If a single format directive mixes positional (`\fBnn$\fR') and
  @@ -618,34 +600,39 @@
   .PP
   The conversion specifiers and their meanings are:
   .Ip "\fBdiouxX\fR" 4
  -The `\f(CWint\fR\*(R' (or appropriate variant) argument is converted to signed decimal
  +.IX Item "diouxX"
  +The `\f(CW\*(C`int\*(C'\fR' (or appropriate variant) argument is converted to signed decimal
   (\fBd\fR and \fBi\fR), unsigned octal (\fBo\fR), unsigned decimal (\fBu\fR), or unsigned
   hexadecimal (\fBx\fR and \fBX\fR) notation.  The letters \fBabcdef\fR are used for \fBx\fR
   conversions; the letters \fB\s-1ABCDEF\s0\fR are used for \fBX\fR conversions.  The
   precision, if any, gives the minimum number of digits that must appear; if the
   converted value requires fewer digits, it is padded on the left with zeros.
   .Ip "\fB\s-1DOU\s0\fR" 4
  -The `\f(CWlong int\fR argument is converted to signed decimal, unsigned octal, or
  +.IX Item "DOU"
  +The `\f(CW\*(C`long int\*(C'\fR argument is converted to signed decimal, unsigned octal, or
   unsigned decimal, as if the format had been \fBld\fR, \fBlo\fR, or \fBlu\fR
   respectively.  These conversion characters are deprecated, and will eventually
   disappear.
   .Ip "\fBeE\fR" 4
  -The `\f(CWdouble\fR\*(R' argument is rounded and converted in the style
  -`[\-]d.ddd\fBe\fR+\-dd\*(R' where there is one digit before the decimal-point character
  +.IX Item "eE"
  +The `\f(CW\*(C`double\*(C'\fR' argument is rounded and converted in the style
  +`[\-]d.ddd\fBe\fR+\-dd' where there is one digit before the decimal-point character
   and the number of digits after it is equal to the precision; if the precision
   is missing, it is taken as 6; if the precision is zero, no decimal-point
   character appears.  An \fBE\fR conversion uses the letter \fBE\fR (rather than \fBe\fR)
   to introduce the exponent.  The exponent always contains at least two digits;
   if the value is zero, the exponent is 00.
   .Ip "\fBf\fR" 4
  -The `\f(CWdouble\fR\*(R' argument is rounded and converted to decimal notation in the
  -style `[\-]ddd.ddd>\*(R' where the number of digits after the decimal-point
  +.IX Item "f"
  +The `\f(CW\*(C`double\*(C'\fR' argument is rounded and converted to decimal notation in the
  +style `[\-]ddd.ddd>' where the number of digits after the decimal-point
   character is equal to the precision specification.  If the precision is
   missing, it is taken as 6; if the precision is explicitly zero, no
   decimal-point character appears.  If a decimal point appears, at least one
   digit appears before it.
   .Ip "\fBg\fR" 4
  -The `\f(CWdouble\fR\*(R' argument is converted in style \fBf\fR or \fBe\fR (or \fBE\fR for \fBG\fR
  +.IX Item "g"
  +The `\f(CW\*(C`double\*(C'\fR' argument is converted in style \fBf\fR or \fBe\fR (or \fBE\fR for \fBG\fR
   conversions).  The precision specifies the number of significant digits.  If
   the precision is missing, 6 digits are given; if the precision is zero, it is
   treated as 1.  Style \fBe\fR is used if the exponent from its conversion is less
  @@ -653,34 +640,40 @@
   from the fractional part of the result; a decimal point appears only if it is
   followed by at least one digit.
   .Ip "\fBc\fR" 4
  -The `\f(CWint\fR\*(R' argument is converted to an `\f(CWunsigned char\fR, and the resulting
  +.IX Item "c"
  +The `\f(CW\*(C`int\*(C'\fR' argument is converted to an `\f(CW\*(C`unsigned char\*(C'\fR, and the resulting
   character is written.
   .Ip "\fBs\fR" 4
  -The `\f(CWchar *\fR\*(R' argument is expected to be a pointer to an array of character
  +.IX Item "s"
  +The `\f(CW\*(C`char *\*(C'\fR' argument is expected to be a pointer to an array of character
   type (pointer to a string).  Characters from the array are written up to (but
  -not including) a terminating \f(CWNUL\fR character; if a precision is specified, no
  +not including) a terminating \f(CW\*(C`NUL\*(C'\fR character; if a precision is specified, no
   more than the number specified are written.  If a precision is given, no null
   character need be present; if the precision is not specified, or is greater
  -than the size of the array, the array must contain a terminating \f(CWNUL\fR
  +than the size of the array, the array must contain a terminating \f(CW\*(C`NUL\*(C'\fR
   character.
   .Ip "\fBp\fR" 4
  -The `\f(CWvoid *\fR pointer argument is printed in hexadecimal (as if by `\fB%#x\fR\*(R'
  -or `\f(CW%#lx\fR).
  +.IX Item "p"
  +The `\f(CW\*(C`void *\*(C'\fR pointer argument is printed in hexadecimal (as if by `\fB%#x\fR'
  +or `\f(CW\*(C`%#lx\*(C'\fR).
   .Ip "\fBn\fR" 4
  +.IX Item "n"
   The number of characters written so far is stored into the integer indicated
  -by the `\f(CWint *\fR\*(R' (or variant) pointer argument.  No argument is converted.
  +by the `\f(CW\*(C`int *\*(C'\fR' (or variant) pointer argument.  No argument is converted.
   .Ip "\fB%\fR" 4
  -A `\fB%\fR\*(R' is written. No argument is converted. The complete conversion
  +.IX Item "%"
  +A `\fB%\fR' is written. No argument is converted. The complete conversion
   specification is `\fB%%\fR.
   .PP
   In no case does a non-existent or small field width cause truncation of a
   field; if the result of a conversion is wider than the field width, the field
   is expanded to contain the conversion result.
   .SH "EXAMPLES"
  +.IX Header "EXAMPLES"
   In the following a few snippets of selected use cases of \fBStr\fR are
   presented:
   .Ip "\fBSplice a String into Another\fR" 4
  -.Sp
  +.IX Item "Splice a String into Another"
   .Vb 5
   \& char *v1 = "foo bar quux";
   \& char *v2 = "baz";
  @@ -689,7 +682,7 @@
   \& ....
   .Ve
   .Ip "\fBTokenize a String\fR" 4
  -.Sp
  +.IX Item "Tokenize a String"
   .Vb 10
   \& char *var = " foo \et " bar 'baz'" q'uu'x #comment";
   \& char *tok, *p;
  @@ -703,7 +696,7 @@
   \& }
   .Ve
   .Ip "\fBMatch a String\fR" 4
  -.Sp
  +.IX Item "Match a String"
   .Vb 5
   \& char *var = "foo:bar";
   \& if (str_parse(var, "^.+?:.+$/)) {
  @@ -712,7 +705,7 @@
   \& }
   .Ve
   .Ip "\fBMatch a String and Go Ahead with Details\fR" 4
  -.Sp
  +.IX Item "Match a String and Go Ahead with Details"
   .Vb 10
   \& char *var = "foo:bar";
   \& char *cp, *v1, *v2;
  @@ -726,7 +719,7 @@
   \& }
   .Ve
   .Ip "\fBSubstitute Text in a String\fR" 4
  -.Sp
  +.IX Item "Substitute Text in a String"
   .Vb 8
   \& char *var = "foo:bar";
   \& char *subst = "quux";
  @@ -738,7 +731,7 @@
   \& free(new);
   .Ve
   .Ip "\fBFormat a String\fR" 4
  -.Sp
  +.IX Item "Format a String"
   .Vb 6
   \& char *v0 = "abc..."; /* length not guessable */
   \& char *v1 = "foo";
  @@ -756,145 +749,24 @@
   \& free(cp);
   .Ve
   .SH "SEE ALSO"
  -\fIstring\fR\|(3), \fIprintf\fR\|(3), \fIperlre\fR\|(1).
  +.IX Header "SEE ALSO"
  +\&\fIstring\fR\|(3), \fIprintf\fR\|(3), \fIperlre\fR\|(1).
   .SH "HISTORY"
  +.IX Header "HISTORY"
   The \fBStr\fR library was written in November and December 1999 by Ralf
   S. Engelschall. As building blocks various existing code was used and
   recycled: for the \fIstr_token\fR\|(3) implementation an anchient \fIstrtok\fR\|(3)
   flavor from William Deich 1991 was cleaned up and adjusted. As the
   background parsing engine for \fIstr_parse\fR\|(3) a heavily stripped down
  -version of Philip Hazel's PCRE 2.08 library was used. The \fIstr_format\fR\|(3)
  -implementation was based on Panos Tsirigotis\*(R' \fIsprintf\fR\|(3) code as
  +version of Philip Hazel's \s-1PCRE\s0 2.08 library was used. The \fIstr_format\fR\|(3)
  +implementation was based on Panos Tsirigotis' \fIsprintf\fR\|(3) code as
   adjusted by the Apache Software Foundation 1998. The formatting engine
   was stripped down and enhanced to support internal extensions which were
   required by \fIstr_format\fR\|(3) and \fIstr_parse\fR\|(3).
   .SH "AUTHOR"
  -.PP
  +.IX Header "AUTHOR"
   .Vb 3
   \& Ralf S. Engelschall
   \& rse@engelschall.com
   \& www.engelschall.com
   .Ve
  -
  -.rn }` ''
  -.IX Title "str 3"
  -.IX Name "B<Str> - String Library"
  -
  -.IX Header "NAME"
  -
  -.IX Header "VERSION"
  -
  -.IX Header "SYNOPSIS"
  -
  -.IX Header "DESCRIPTION"
  -
  -.IX Header "FUNCTIONS"
  -
  -.IX Item "str_size_t \fBstr_len\fR(const char *\fIs\fR);"
  -
  -.IX Item "char *\fBstr_copy\fR(char *\fIs\fR, const char *\fIt\fR, size_t \fIn\fR);"
  -
  -.IX Item "char *\fBstr_dup\fR(const char *\fIs\fR, str_size_t \fIn\fR);"
  -
  -.IX Item "char *\fBstr_concat\fR(char *\fIs\fR, ...);"
  -
  -.IX Item "char *\fBstr_splice\fR(char *\fIs\fR, str_size_t \fIoff\fR, str_size_t \fIn\fR, char *\fIt\fR, str_size_t \fIm\fR);"
  -
  -.IX Item "int \fBstr_compare\fR(const char *\fIs\fR, const char *\fIt\fR, str_size_t \fIn\fR, int \fImode\fR);"
  -
  -.IX Item "char *\fBstr_span\fR(const char *\fIs\fR, size_t \fIn\fR, const char *\fIcharset\fR, int \fImode\fR);"
  -
  -.IX Item "char *\fBstr_locate\fR(const char *\fIs\fR, str_size_t \fIn\fR, const char *\fIt\fR);"
  -
  -.IX Item "char *\fBstr_token\fR(char **\fIs\fR, const char *\fIdelim\fR, const char *\fIquote\fR, const char *\fIcomment\fR, int \fImode\fR);"
  -
  -.IX Item "int \fBstr_parse\fR(const char *\fIs\fR, const char *\fIpop\fR, ...);"
  -
  -.IX Item "int \fBstr_format\fR(char *\fIs\fR, str_size_t \fIn\fR, const char *\fIfmt\fR, ...);"
  -
  -.IX Item "unsigned long \fBstr_hash\fR(const char *\fIs\fR, str_size_t \fIn\fR, int \fImode\fR);"
  -
  -.IX Item "int \fBstr_base64\fR(char *\fIs\fR, str_size_t \fIn\fR, unsigned char *\fIucp\fR, str_size_t \fIucn\fR, int \fImode\fR);"
  -
  -.IX Header "GORY DETAILS"
  -
  -.IX Subsection "Perl Regular Expressions"
  -
  -.IX Subsection "Parsing Specification"
  -
  -.IX Item "\fBMatching:\fR `\fBm\fR \fIdelim\fR \fIregex\fR \fIdelim\fR \fIflags\fR*': "
  -
  -.IX Item "\fBSubstitution:\fR `\fBs\fR \fIdelim\fR \fIregex\fR \fIdelim\fR \fIsubst\fR \fIdelim\fR \fIflags\fR*': "
  -
  -.IX Item "\fBb\fR"
  -
  -.IX Item "\fBi\fR"
  -
  -.IX Item "\fBo\fR"
  -
  -.IX Item "\fBx\fR"
  -
  -.IX Item "\fBm\fR"
  -
  -.IX Item "\fBs\fR"
  -
  -.IX Header "CONVERSION SPECIFICATION"
  -
  -.IX Item "o"
  -
  -.IX Item "o"
  -
  -.IX Item "o"
  -
  -.IX Item "o"
  -
  -.IX Item "o"
  -
  -.IX Item "o"
  -
  -.IX Item "o"
  -
  -.IX Item "o"
  -
  -.IX Item "o"
  -
  -.IX Item "\fBdiouxX\fR"
  -
  -.IX Item "\fB\s-1DOU\s0\fR"
  -
  -.IX Item "\fBeE\fR"
  -
  -.IX Item "\fBf\fR"
  -
  -.IX Item "\fBg\fR"
  -
  -.IX Item "\fBc\fR"
  -
  -.IX Item "\fBs\fR"
  -
  -.IX Item "\fBp\fR"
  -
  -.IX Item "\fBn\fR"
  -
  -.IX Item "\fB%\fR"
  -
  -.IX Header "EXAMPLES"
  -
  -.IX Item "\fBSplice a String into Another\fR"
  -
  -.IX Item "\fBTokenize a String\fR"
  -
  -.IX Item "\fBMatch a String\fR"
  -
  -.IX Item "\fBMatch a String and Go Ahead with Details\fR"
  -
  -.IX Item "\fBSubstitute Text in a String\fR"
  -
  -.IX Item "\fBFormat a String\fR"
  -
  -.IX Header "SEE ALSO"
  -
  -.IX Header "HISTORY"
  -
  -.IX Header "AUTHOR"
  -
  Index: ossp-pkg/str/str_format.c
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 str_format.c
  --- ossp-pkg/str/str_format.c	2001/04/27 12:12:28	1.21
  +++ ossp-pkg/str/str_format.c	2001/04/27 12:22:21	1.22
  @@ -864,42 +864,61 @@
                   case 'e':
                   case 'E':
                       fp_num = va_arg(ap, double);
  -                    /* We use &num_buf[1], so that we have room for the sign */
  -                    s = conv_fp(*fmt, fp_num, alternate_form,
  -                                (adjust_precision == FALSE) ? FLOAT_DIGITS : precision, 
  -                                &is_negative, &num_buf[1], &s_len);
  -                    if (is_negative)
  -                        prefix_char = '-';
  -                    else if (print_sign)
  -                        prefix_char = '+';
  -                    else if (print_blank)
  -                        prefix_char = ' ';
  +                    if (isnan(fp_num)) {
  +                        s = "NaN";
  +                        s_len = 3;
  +                    }
  +                    else if (isinf(fp_num)) {
  +                        s = "Inf";
  +                        s_len = 3;
  +                    }
  +                    else {
  +                        /* use &num_buf[1], so that we have room for the sign */
  +                        s = conv_fp(*fmt, fp_num, alternate_form,
  +                                    (adjust_precision == FALSE) ? FLOAT_DIGITS : precision, 
  +                                    &is_negative, &num_buf[1], &s_len);
  +                        if (is_negative)
  +                            prefix_char = '-';
  +                        else if (print_sign)
  +                            prefix_char = '+';
  +                        else if (print_blank)
  +                            prefix_char = ' ';
  +                    }
                       break;
   
  -
                   /* Double Floating Point (style 2) */
                   case 'g':
                   case 'G':
  -                    if (adjust_precision == FALSE)
  -                        precision = FLOAT_DIGITS;
  -                    else if (precision == 0)
  -                        precision = 1;
  -                    /* We use &num_buf[1], so that we have room for the sign */
  -                    s = str_gcvt(va_arg(ap, double), precision, &num_buf[1],
  -                                 alternate_form);
  -                    if (*s == '-')
  -                        prefix_char = *s++;
  -                    else if (print_sign)
  -                        prefix_char = '+';
  -                    else if (print_blank)
  -                        prefix_char = ' ';
  -                    s_len = str_len(s);
  -                    if (alternate_form && (q = str_span(s, 0, ".", 0)) == NULL) {
  -                        s[s_len++] = '.';
  -                        s[s_len] = NUL; /* delimit for following str_span() */
  +                    fp_num = va_arg(ap, double);
  +                    if (isnan(fp_num)) {
  +                        s = "NaN";
  +                        s_len = 3;
  +                    }
  +                    else if (isinf(fp_num)) {
  +                        s = "Inf";
  +                        s_len = 3;
  +                    }
  +                    else {
  +                        if (adjust_precision == FALSE)
  +                            precision = FLOAT_DIGITS;
  +                        else if (precision == 0)
  +                            precision = 1;
  +                        /* use &num_buf[1], so that we have room for the sign */
  +                        s = str_gcvt(fp_num, precision, &num_buf[1], alternate_form);
  +                        if (*s == '-')
  +                            prefix_char = *s++;
  +                        else if (print_sign)
  +                            prefix_char = '+';
  +                        else if (print_blank)
  +                            prefix_char = ' ';
  +                        s_len = str_len(s);
  +                        if (alternate_form && (q = str_span(s, 0, ".", 0)) == NULL) {
  +                            s[s_len++] = '.';
  +                            s[s_len] = NUL; /* delimit for following str_span() */
  +                        }
  +                        if (*fmt == 'G' && (q = str_span(s, 0, "e", 0)) != NULL)
  +                            *q = 'E';
                       }
  -                    if (*fmt == 'G' && (q = str_span(s, 0, "e", 0)) != NULL)
  -                        *q = 'E';
                       break;
   
                   /* Single Character */

From ossp-cvs-owner@ossp.org  Fri Apr 27 14:24:54 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f3RCOr007919; Fri, 27 Apr 2001 14:24:53 +0200 (CEST)
Date: Fri, 27 Apr 2001 14:24:53 +0200 (CEST)
Message-Id: <200104271224.f3RCOr007919@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str str_format.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   27-Apr-2001 14:24:53
  Branch: HEAD                             Handle: 2001042713245200

  Modified files:
    ossp-pkg/str            str_format.c

  Log:
    *** empty log message ***

  Summary:
    Revision    Changes     Path
    1.23        +1  -1      ossp-pkg/str/str_format.c
  ____________________________________________________________________________

  Index: ossp-pkg/str/str_format.c
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 str_format.c
  --- ossp-pkg/str/str_format.c	2001/04/27 12:22:21	1.22
  +++ ossp-pkg/str/str_format.c	2001/04/27 12:24:52	1.23
  @@ -83,7 +83,7 @@
    * FreeBSD version which took it from GNU libc-4.6.27 and modified it
    * to be thread safe. The whole code was finally cleaned up, stripped
    * and extended by Ralf S. Engelschall for use inside the Str library.
  - * Especially and Apache and network specific kludges were removed again
  + * Especially any Apache and network specific kludges were removed again
    * and instead the formatting engine now can be extended by the caller
    * on-the-fly.
    */

From ossp-cvs-owner@ossp.org  Sat Apr 28 10:18:52 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f3S8Iqk21817; Sat, 28 Apr 2001 10:18:52 +0200 (CEST)
Date: Sat, 28 Apr 2001 10:18:52 +0200 (CEST)
Message-Id: <200104280818.f3S8Iqk21817@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str configure configure.in str_config.h.in str_fo...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   28-Apr-2001 10:18:51
  Branch: HEAD                             Handle: 2001042809185100

  Modified files:
    ossp-pkg/str            configure configure.in str_config.h.in
                            str_format.c

  Log:
    *** empty log message ***

  Summary:
    Revision    Changes     Path
    1.10        +61 -6      ossp-pkg/str/configure
    1.9         +1  -0      ossp-pkg/str/configure.in
    1.4         +9  -0      ossp-pkg/str/str_config.h.in
    1.24        +8  -0      ossp-pkg/str/str_format.c
  ____________________________________________________________________________

  Index: ossp-pkg/str/configure
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 configure
  --- ossp-pkg/str/configure	2000/07/14 11:04:42	1.9
  +++ ossp-pkg/str/configure	2001/04/28 08:18:51	1.10
  @@ -1480,14 +1480,69 @@
   fi
   done
    
  +for ac_func in isnan isinf
  +do
  +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
  +echo "configure:1487: checking for $ac_func" >&5
  +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
  +  echo $ac_n "(cached) $ac_c" 1>&6
  +else
  +  cat > conftest.$ac_ext <<EOF
  +#line 1492 "configure"
  +#include "confdefs.h"
  +/* System header to define __stub macros and hopefully few prototypes,
  +    which can conflict with char $ac_func(); below.  */
  +#include <assert.h>
  +/* Override any gcc2 internal prototype to avoid an error.  */
  +/* We use char because int might match the return type of a gcc2
  +    builtin and then its argument prototype would still apply.  */
  +char $ac_func();
  +
  +int main() {
  +
  +/* The GNU C library defines this for functions which it implements
  +    to always fail with ENOSYS.  Some functions are actually named
  +    something starting with __ and the normal name is an alias.  */
  +#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
  +choke me
  +#else
  +$ac_func();
  +#endif
  +
  +; return 0; }
  +EOF
  +if { (eval echo configure:1515: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  +  rm -rf conftest*
  +  eval "ac_cv_func_$ac_func=yes"
  +else
  +  echo "configure: failed program was:" >&5
  +  cat conftest.$ac_ext >&5
  +  rm -rf conftest*
  +  eval "ac_cv_func_$ac_func=no"
  +fi
  +rm -f conftest*
  +fi
  +
  +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
  +  echo "$ac_t""yes" 1>&6
  +    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
  +  cat >> confdefs.h <<EOF
  +#define $ac_tr_func 1
  +EOF
  + 
  +else
  +  echo "$ac_t""no" 1>&6
  +fi
  +done
  + 
   
   echo $ac_n "checking for modf""... $ac_c" 1>&6
  -echo "configure:1486: checking for modf" >&5
  +echo "configure:1541: checking for modf" >&5
   if eval "test \"`echo '$''{'ac_cv_func_modf'+set}'`\" = set"; then
     echo $ac_n "(cached) $ac_c" 1>&6
   else
     cat > conftest.$ac_ext <<EOF
  -#line 1491 "configure"
  +#line 1546 "configure"
   #include "confdefs.h"
   /* System header to define __stub macros and hopefully few prototypes,
       which can conflict with char modf(); below.  */
  @@ -1510,7 +1565,7 @@
   
   ; return 0; }
   EOF
  -if { (eval echo configure:1514: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  +if { (eval echo configure:1569: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
     rm -rf conftest*
     eval "ac_cv_func_modf=yes"
   else
  @@ -1528,7 +1583,7 @@
   else
     echo "$ac_t""no" 1>&6
   echo $ac_n "checking for modf in -lm""... $ac_c" 1>&6
  -echo "configure:1532: checking for modf in -lm" >&5
  +echo "configure:1587: checking for modf in -lm" >&5
   ac_lib_var=`echo m'_'modf | sed 'y%./+-%__p_%'`
   if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
     echo $ac_n "(cached) $ac_c" 1>&6
  @@ -1536,7 +1591,7 @@
     ac_save_LIBS="$LIBS"
   LIBS="-lm  $LIBS"
   cat > conftest.$ac_ext <<EOF
  -#line 1540 "configure"
  +#line 1595 "configure"
   #include "confdefs.h"
   /* Override any gcc2 internal prototype to avoid an error.  */
   /* We use char because int might match the return type of a gcc2
  @@ -1547,7 +1602,7 @@
   modf()
   ; return 0; }
   EOF
  -if { (eval echo configure:1551: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  +if { (eval echo configure:1606: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
     rm -rf conftest*
     eval "ac_cv_lib_$ac_lib_var=yes"
   else
  Index: ossp-pkg/str/configure.in
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 configure.in
  --- ossp-pkg/str/configure.in	2000/07/14 11:04:42	1.8
  +++ ossp-pkg/str/configure.in	2001/04/28 08:18:51	1.9
  @@ -29,6 +29,7 @@
   AC_CHECK_SIZEOF(void *, 4)
   
   AC_HAVE_FUNCS(memmove memset memcmp memchr) 
  +AC_HAVE_FUNCS(isnan isinf) 
   
   AC_CHECK_FUNC(modf, , AC_CHECK_LIB(m, modf))
   
  Index: ossp-pkg/str/str_config.h.in
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 str_config.h.in
  --- ossp-pkg/str/str_config.h.in	1999/12/28 10:19:00	1.3
  +++ ossp-pkg/str/str_config.h.in	2001/04/28 08:18:51	1.4
  @@ -20,6 +20,12 @@
   /* The number of bytes in a void *.  */
   #undef SIZEOF_VOID_P
   
  +/* Define if you have the isinf function.  */
  +#undef HAVE_ISINF
  +
  +/* Define if you have the isnan function.  */
  +#undef HAVE_ISNAN
  +
   /* Define if you have the memchr function.  */
   #undef HAVE_MEMCHR
   
  @@ -31,3 +37,6 @@
   
   /* Define if you have the memset function.  */
   #undef HAVE_MEMSET
  +
  +/* Define if you have the m library (-lm).  */
  +#undef HAVE_LIBM
  Index: ossp-pkg/str/str_format.c
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 str_format.c
  --- ossp-pkg/str/str_format.c	2001/04/27 12:24:52	1.23
  +++ ossp-pkg/str/str_format.c	2001/04/28 08:18:51	1.24
  @@ -112,6 +112,14 @@
   #define NUM_BUF_SIZE    512
   #define NDIG            80
   
  +/* compatibility */
  +#if !defined(HAVE_ISNAN)
  +#define isnan(d) (0)
  +#endif
  +#if !defined(HAVE_ISINF)
  +#define isinf(d) (0)
  +#endif
  +
   /* 
    * Convert decimal number to its string representation. The number of
    * digits is specified by ndigit decpt is set to the position of the

From ossp-cvs-owner@ossp.org  Fri May  4 15:25:20 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f44DPJ655905; Fri, 4 May 2001 15:25:19 +0200 (CEST)
Date: Fri, 4 May 2001 15:25:19 +0200 (CEST)
Message-Id: <200105041325.f44DPJ655905@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela ChangeLog README VERSION shiela-install.po...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-May-2001 15:25:19
  Branch: HEAD                             Handle: 2001050414251800

  Modified files:
    ossp-pkg/shiela         ChangeLog README VERSION shiela-install.pod
                            shiela-install.sh shiela.pl shiela.pod shtool

  Log:
    Update for Shtool 1.5.3 and new version

  Summary:
    Revision    Changes     Path
    1.3         +5  -0      ossp-pkg/shiela/ChangeLog
    1.3         +1  -1      ossp-pkg/shiela/README
    1.3         +1  -1      ossp-pkg/shiela/VERSION
    1.3         +1  -1      ossp-pkg/shiela/shiela-install.pod
    1.3         +1  -1      ossp-pkg/shiela/shiela-install.sh
    1.4         +1  -1      ossp-pkg/shiela/shiela.pl
    1.3         +1  -1      ossp-pkg/shiela/shiela.pod
    1.4         +13 -7      ossp-pkg/shiela/shtool
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/ChangeLog
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	2001/02/10 16:40:26	1.2
  +++ ossp-pkg/shiela/ChangeLog	2001/05/04 13:25:18	1.3
  @@ -9,6 +9,11 @@
   
     ChangeLog
   
  +  Changes between 0.9.1 and 0.9.2 (10-Feb-2001 to 04-May-2001):
  +
  +   *) Upgraded to GNU shtool 1.5.3
  +      [Ralf S. Engelschall]
  +
     Changes between 0.9.0 and 0.9.1 (18-Jun-2000 to 10-Feb-2001):
   
      *) Upgraded to GNU shtool 1.5.2-pre.
  Index: ossp-pkg/shiela/README
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 README
  --- ossp-pkg/shiela/README	2001/02/10 16:40:26	1.2
  +++ ossp-pkg/shiela/README	2001/05/04 13:25:18	1.3
  @@ -7,7 +7,7 @@
     OSSP Shiela - Access Control and Logging Facility for CVS
     Copyright (c) 2000 Ralf S. Engelschall <rse@engelschall.com>
   
  -  Version 0.9.1 (27-Jun-2000)
  +  Version 0.9.2 (05-May-2001)
   
     Shiela is an access control and logging facility for use with the
     Concurrent Versions System (CVS). It is intended to be hooked into CVS's
  Index: ossp-pkg/shiela/VERSION
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 VERSION
  --- ossp-pkg/shiela/VERSION	2001/02/10 16:40:26	1.2
  +++ ossp-pkg/shiela/VERSION	2001/05/04 13:25:18	1.3
  @@ -1,3 +1,3 @@
   
  -  This is OSSP Shiela, Version 0.9.1 (27-Jun-2000)
  +  This is OSSP Shiela, Version 0.9.2 (05-May-2001)
   
  Index: ossp-pkg/shiela/shiela-install.pod
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 shiela-install.pod
  --- ossp-pkg/shiela/shiela-install.pod	2001/02/10 16:40:26	1.2
  +++ ossp-pkg/shiela/shiela-install.pod	2001/05/04 13:25:18	1.3
  @@ -32,7 +32,7 @@
   
   =head1 VERSION
   
  -B<OSSP Shiela> 0.9.1 (27-Jun-2000)
  +B<OSSP Shiela> 0.9.2 (05-May-2001)
   
   =head1 DESCRIPTION
   
  Index: ossp-pkg/shiela/shiela-install.sh
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 shiela-install.sh
  --- ossp-pkg/shiela/shiela-install.sh	2001/02/10 16:40:26	1.2
  +++ ossp-pkg/shiela/shiela-install.sh	2001/05/04 13:25:18	1.3
  @@ -25,7 +25,7 @@
   ##  shiela-install: Shiela repository install program (syntax: Bourne-Shell)
   ##
   
  -version="0.9.1"
  +version="0.9.2"
   
   prefix="@prefix@"
   bindir="@bindir@"
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	2001/02/10 16:40:26	1.3
  +++ ossp-pkg/shiela/shiela.pl	2001/05/04 13:25:18	1.4
  @@ -25,7 +25,7 @@
   ##  shiela: Shiela control program (syntax: Perl)
   ##
   
  -my $version = '0.9.1';
  +my $version = '0.9.2';
   
   require 5.005;
   
  Index: ossp-pkg/shiela/shiela.pod
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 shiela.pod
  --- ossp-pkg/shiela/shiela.pod	2001/02/10 16:40:26	1.2
  +++ ossp-pkg/shiela/shiela.pod	2001/05/04 13:25:18	1.3
  @@ -32,7 +32,7 @@
   
   =head1 VERSION
   
  -B<OSSP Shiela> 0.9.1 (27-Jun-2000)
  +B<OSSP Shiela> 0.9.2 (05-May-2001)
   
   =head1 DESCRIPTION
   
  Index: ossp-pkg/shiela/shtool
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 shtool
  --- ossp-pkg/shiela/shtool	2001/02/10 16:40:26	1.3
  +++ ossp-pkg/shiela/shtool	2001/05/04 13:25:18	1.4
  @@ -6,7 +6,7 @@
   ##  See http://www.gnu.org/software/shtool/ for more information.
   ##  See ftp://ftp.gnu.org/gnu/shtool/ for latest version.
   ##
  -##  Version:  1.5.2 (05-Oct-2000)
  +##  Version:  1.5.3 (19-Apr-2001)
   ##  Contents: 7/17 available modules
   ##
   
  @@ -26,7 +26,7 @@
   ##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
   ##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
   ##
  -##  Notice: Given that you include this file verbatim into your own
  +##  NOTICE: Given that you include this file verbatim into your own
   ##  source tree, you are justified in saying that it remains separate
   ##  from your package, and that this way you are simply just using GNU
   ##  shtool. So, in this situation, there is no requirement that your
  @@ -65,7 +65,7 @@
       exit 1
   fi
   if [ ".$1" = ".-h" -o ".$1" = ".--help" ]; then
  -    echo "This is GNU shtool, version 1.5.2 (05-Oct-2000)"
  +    echo "This is GNU shtool, version 1.5.3 (19-Apr-2001)"
       echo "Copyright (c) 1994-2001 Ralf S. Engelschall <rse@engelschall.com>"
       echo "Report bugs to <bug-shtool@gnu.org>"
       echo ''
  @@ -83,8 +83,8 @@
       echo '           [-e<sed-cmd>] <file> [<file> ...] <path>'
       echo '  mkdir    [-t] [-f] [-p] [-m<mode>] <dir> [<dir> ...]'
       echo '  fixperm  [-v] [-t] <path> [<path> ...]'
  -    echo '  tarball  [-t] [-v] [-o <tarball>] [-c <prog>] [-d <dir>] [-u'
  -    echo '           <user>] [-g <group>] [-e <pattern>] <path> [<path> ...]'
  +    echo '  tarball  [-t] [-v] [-o<tarball>] [-c<prog>] [-d<dir>] [-u<user>]'
  +    echo '           [-g<group>] [-e<pattern>] <path> [<path> ...]'
       echo '  version  [-l<lang>] [-n<name>] [-p<prefix>] [-s<version>] [-e]'
       echo '           [-i<knob>] [-d<type>] <file>'
       echo '  path     [-s] [-r] [-d] [-b] [-m] [-p<path>] <str> [<str> ...]'
  @@ -105,7 +105,7 @@
       exit 0
   fi
   if [ ".$1" = ".-v" -o ".$1" = ."--version" ]; then
  -    echo "GNU shtool 1.5.2 (05-Oct-2000)"
  +    echo "GNU shtool 1.5.3 (19-Apr-2001)"
       exit 0
   fi
   if [ ".$1" = ".-r" -o ".$1" = ."--recreate" ]; then
  @@ -180,7 +180,7 @@
           ;;
       tarball )
           str_tool="tarball"
  -        str_usage="[-t] [-v] [-o <tarball>] [-c <prog>] [-d <dir>] [-u <user>] [-g <group>] [-e <pattern>] <path> [<path> ...]"
  +        str_usage="[-t] [-v] [-o<tarball>] [-c<prog>] [-d<dir>] [-u<user>] [-g<group>] [-e<pattern>] <path> [<path> ...]"
           gen_tmpfile=yes
           arg_spec="1+"
           opt_spec="t.v.o:c:d:u:g:e:"
  @@ -761,6 +761,12 @@
                   echo "mkdir $p" 1>&2
               fi
               mkdir $p || errstatus=$?
  +            if [ ".$opt_m" != . ]; then
  +                if [ ".$opt_t" = .yes ]; then
  +                    echo "chmod $opt_m $p" 1>&2
  +                fi
  +                chmod $opt_m $p || errstatus=$?
  +            fi
           else
               #   the smart situation
               set fnord `echo ":$p" |\
  @@ -1174,7 +1180,7 @@
           vGNU="${name} ${triple} (${tim})"
           vWeb="${name}/${triple}"
           vSCCS="@(#)${name} ${triple} (${tim})"
  -        vRCS="\$Id: shtool,v 1.3 2001/02/10 16:40:26 rse Exp ${name} ${triple} (${tim}) \$"
  +        vRCS="\$Id: shtool,v 1.4 2001/05/04 13:25:18 rse Exp ${name} ${triple} (${tim}) \$"
       
           #   determine string out of filename
           #   (do NOT try to optimize this in any way because of portability)

From ossp-cvs-owner@ossp.org  Fri May  4 15:30:02 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f44DU1a57019; Fri, 4 May 2001 15:30:01 +0200 (CEST)
Date: Fri, 4 May 2001 15:30:01 +0200 (CEST)
Message-Id: <200105041330.f44DU1a57019@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela shiela-install.sh
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-May-2001 15:30:01
  Branch: HEAD                             Handle: 2001050414300000

  Modified files:
    ossp-pkg/shiela         shiela-install.sh

  Log:
    Update perl checks

  Summary:
    Revision    Changes     Path
    1.4         +10 -11     ossp-pkg/shiela/shiela-install.sh
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/shiela-install.sh
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 shiela-install.sh
  --- ossp-pkg/shiela/shiela-install.sh	2001/05/04 13:25:18	1.3
  +++ ossp-pkg/shiela/shiela-install.sh	2001/05/04 13:30:00	1.4
  @@ -272,25 +272,24 @@
       V_tool_perl="perl"
       rm -f $tmpfile
       touch $tmpfile
  -    c=0
       found=0
  +    pc=99
       for dir in $paths; do
           dir=`echo $dir | sed -e 's;/*$;;'`
  -        for perl in perl5 perl miniperl; do
  -             if [ $minusx "$dir/$perl" ] && [ ! -d "$dir/$perl" ]; then
  -                 perl="$dir/$perl"
  -                 version=`$perl -v | grep version |\
  -                          sed -e 's/.* version //' -e 's/ built.*//' -e 's/ with.*//'`
  -                 versionnum="`echo $version | sed -e 's/\.//g' -e 's/_//g'`"
  -                 versionnum=`expr $versionnum - $c`
  -                 echo "$versionnum $perl" >>$tmpfile
  +        nc=99
  +        for name in perl perl5 miniperl; do
  +             if [ $minusx "$dir/$name" -a ! -d "$dir/$name" ]; then
  +                 perl="$dir/$name"
  +                 pv=`$perl -e 'printf("%.3f", $]);'`
  +                 echo "$pv:$pc:$nc:$perl" >>$tmpfile
                    found=1
                fi
  +             nc=`expr $nc - 1`
           done
  -        c=`expr $c + 1`
  +        pc=`expr $pc - 1`
       done
       if [ $found = 1 ]; then
  -        V_tool_perl="`cat $tmpfile | sort -u | tail -1 | cut '-d ' -f2`"
  +        V_tool_perl="`cat $tmpfile | sort -u | tail -1 | cut -d: -f4`"
       fi
       rm -f $tmpfile
   fi

From ossp-cvs-owner@ossp.org  Fri May  4 15:33:54 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f44DXrb57328; Fri, 4 May 2001 15:33:53 +0200 (CEST)
Date: Fri, 4 May 2001 15:33:53 +0200 (CEST)
Message-Id: <200105041333.f44DXrb57328@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela ChangeLog shiela.pl
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-May-2001 15:33:53
  Branch: HEAD                             Handle: 2001050414335300

  Modified files:
    ossp-pkg/shiela         ChangeLog shiela.pl

  Log:
    Accept CVS 1.11 and newer

  Summary:
    Revision    Changes     Path
    1.4         +7  -0      ossp-pkg/shiela/ChangeLog
    1.5         +1  -1      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/ChangeLog
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	2001/05/04 13:25:18	1.3
  +++ ossp-pkg/shiela/ChangeLog	2001/05/04 13:33:53	1.4
  @@ -11,6 +11,13 @@
   
     Changes between 0.9.1 and 0.9.2 (10-Feb-2001 to 04-May-2001):
   
  +   *) Make sure shiela accepts CVS 1.11 and newer, too.
  +      [Ralf S. Engelschall]
  +
  +   *) Adjusted shiela-install's Perl tool checks to use
  +      the logic of GNU shtool' "path" command.
  +      [Ralf S. Engelschall]
  +
      *) Upgraded to GNU shtool 1.5.3
         [Ralf S. Engelschall]
   
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	2001/05/04 13:25:18	1.4
  +++ ossp-pkg/shiela/shiela.pl	2001/05/04 13:33:53	1.5
  @@ -193,7 +193,7 @@
       $RT->{cvsvers} = $1 if ($v =~ m|Concurrent\s+Versions\s+System\s+\(CVS\)\s+([\d.]+)\s+|s);
       $RT->{cvsossp} = 0;
       $RT->{cvsossp} = 1 if ($v =~ m|OSSP|s);
  -    die "$RT->{cvs} is not at least CVS 1.10" if ($RT->{cvsvers} !~ m|^1\.10|);
  +    die "$RT->{cvs} is not at least CVS 1.10" if ($RT->{cvsvers} !~ m|^1\.1[0-9]|);
       $RT->{useserver} = 0;
       $RT->{useserver} = 1 if ($v =~ m|server|s);
   

From ossp-cvs-owner@ossp.org  Fri May  4 16:40:45 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f44Eeic01750; Fri, 4 May 2001 16:40:44 +0200 (CEST)
Date: Fri, 4 May 2001 16:40:44 +0200 (CEST)
Message-Id: <200105041440.f44Eeic01750@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvs README.OSSP
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-May-2001 16:40:44
  Branch: HEAD                             Handle: 2001050415404400

  Modified files:
    ossp-pkg/cvs            README.OSSP

  Log:
    *** empty log message ***

  Summary:
    Revision    Changes     Path
    1.49        +2  -2      ossp-pkg/cvs/README.OSSP
  ____________________________________________________________________________

  Index: ossp-pkg/cvs/README.OSSP
  ============================================================
  $ cvs diff -u -r1.48 -r1.49 README.OSSP
  --- ossp-pkg/cvs/README.OSSP	2000/08/12 10:57:58	1.48
  +++ ossp-pkg/cvs/README.OSSP	2001/05/04 14:40:44	1.49
  @@ -292,8 +292,8 @@
   
     OSSP_PATCH_CVSUSER:
       This allows the Unix user OSSP_PATCH_CVSUSER_CALLER (per default
  -    "cvs") to use the environment variable CVSUSER to override the login
  -    name CVS uses to identify the caller. This is intended for use
  +    "ossp-cvs") to use the environment variable CVSUSER to override the
  +    login name CVS uses to identify the caller. This is intended for use
       with a CVS setuid wrapper program or for use manually by the CVS
       administrator.
       [Origin: Ralf S. Engelschall]

From ossp-cvs-owner@ossp.org  Fri May  4 17:06:57 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f44F6tV04457; Fri, 4 May 2001 17:06:55 +0200 (CEST)
Date: Fri, 4 May 2001 17:06:55 +0200 (CEST)
Message-Id: <200105041506.f44F6tV04457@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela shiela.pl
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-May-2001 17:06:55
  Branch: HEAD                             Handle: 2001050416065500

  Modified files:
    ossp-pkg/shiela         shiela.pl

  Log:
    add support for CVSUSER variable

  Summary:
    Revision    Changes     Path
    1.6         +2  -2      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/shiela.pl
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	2001/05/04 13:33:53	1.5
  +++ ossp-pkg/shiela/shiela.pl	2001/05/04 15:06:55	1.6
  @@ -125,7 +125,7 @@
   
       #   supplied arguments
       $RT->{cvsroot} = $ENV{CVSROOT} || die 'unknown CVS root (set $CVSROOT variable)';
  -    $RT->{userid}  = $ENV{LOGNAME} || $ENV{LOGUSER} || $ENV{USER} || die 'unknown CVS user';
  +    $RT->{userid}  = $ENV{CVSUSER} || $ENV{LOGNAME} || $ENV{LOGUSER} || $ENV{USER} || die 'unknown CVS user';
   
       #   various directory paths
       $RT->{tmpdir}   = $ENV{TMPDIR} || $ENV{TEMPDIR} || '/tmp';
  @@ -146,7 +146,7 @@
   
       #   determine user information
       $RT->{username} = $CF->{Project}->{User}->{$RT->{userid}}->{name} ||
  -                      die "unknown user `$RT->{userid}'";
  +                      die "CVS user `$RT->{userid}' not found in Shiela configuration";
       $RT->{usermail} = $CF->{Project}->{User}->{$RT->{userid}}->{mail} ||
                         "$RT->{userid}\@localhost";
   

From ossp-cvs-owner@ossp.org  Fri May  4 17:29:16 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f44FTF206891; Fri, 4 May 2001 17:29:15 +0200 (CEST)
Date: Fri, 4 May 2001 17:29:15 +0200 (CEST)
Message-Id: <200105041529.f44FTF206891@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvs/src subr.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-May-2001 17:29:15
  Branch: HEAD                             Handle: 2001050416291500

  Modified files:
    ossp-pkg/cvs/src        subr.c

  Log:
    Make CVSUSER working

  Summary:
    Revision    Changes     Path
    1.10        +16 -14     ossp-pkg/cvs/src/subr.c
  ____________________________________________________________________________

  Index: ossp-pkg/cvs/src/subr.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 subr.c
  --- ossp-pkg/cvs/src/subr.c	2000/08/27 15:05:24	1.9
  +++ ossp-pkg/cvs/src/subr.c	2001/05/04 15:29:15	1.10
  @@ -314,6 +314,22 @@
       uid_t uid;
   #endif
   
  +#ifdef OSSP_PATCH_CVSUSER
  +#ifndef OSSP_PATCH_CVSUSER_CALLER
  +#define OSSP_PATCH_CVSUSER_CALLER "ossp-cvs"
  +#endif
  +    uid = getuid();
  +    if ((pw = (struct passwd *)getpwnam(OSSP_PATCH_CVSUSER_CALLER)) != NULL) {
  +        if (pw->pw_uid == uid) {
  +	    char *name;
  +            if ((name = getenv("CVSUSER")) != NULL) {
  +                cache = xstrdup(name);
  +                return cache;
  +            }
  +        }
  +    }
  +#endif
  +
       /* If there is a CVS username, return it.  */
   #ifdef AUTH_SERVER_SUPPORT
       if (CVS_Username != NULL)
  @@ -343,20 +359,6 @@
   	    return cache;
   	}
       }
  -#ifdef OSSP_PATCH_CVSUSER
  -#ifndef OSSP_PATCH_CVSUSER_CALLER
  -#define OSSP_PATCH_CVSUSER_CALLER "ossp-cvs"
  -#endif
  -    if ((pw = (struct passwd *)getpwnam(OSSP_PATCH_CVSUSER_CALLER)) != NULL) {
  -        if (pw->pw_uid == uid) {
  -	    char *name;
  -            if ((name = getenv("CVSUSER")) != NULL) {
  -                cache = xstrdup(name);
  -                return cache;
  -            }
  -        }
  -    }
  -#endif
       if ((pw = (struct passwd *) getpwuid (uid)) == NULL)
       {
   	char uidname[20];

From ossp-cvs-owner@ossp.org  Fri May  4 21:31:19 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f44JVIo31334; Fri, 4 May 2001 21:31:18 +0200 (CEST)
Date: Fri, 4 May 2001 21:31:18 +0200 (CEST)
Message-Id: <200105041931.f44JVIo31334@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm ChangeLog shtool
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-May-2001 21:31:18
  Branch: HEAD                             Handle: 2001050420311700

  Modified files:
    ossp-pkg/mm             ChangeLog shtool

  Log:
    *** empty log message ***

  Summary:
    Revision    Changes     Path
    1.27        +3  -3      ossp-pkg/mm/ChangeLog
    1.23        +13 -7      ossp-pkg/mm/shtool
  ____________________________________________________________________________

  Index: ossp-pkg/mm/ChangeLog
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 ChangeLog
  --- ossp-pkg/mm/ChangeLog	2001/01/29 20:31:50	1.26
  +++ ossp-pkg/mm/ChangeLog	2001/05/04 19:31:17	1.27
  @@ -16,14 +16,14 @@
   
    Changes between 1.1.3 and 1.1.4 (01-Jul-2000 to xx-Jan-2001)
   
  +  *) Upgraded to GNU shtool 1.5.3
  +     [Ralf S. Engelschall]
  +
     *) Removed variables from ANSI C function prototypes in mm.h
        to avoid any potential conflicts in advance.
        [Ralf S. Engelschall]
   
     *) Adjusted year in copyright messages for 2001.
  -     [Ralf S. Engelschall]
  -
  -  *) Upgraded to GNU shtool 1.5.2
        [Ralf S. Engelschall]
   
     *) From Apache 2.0's MM patch set:
  Index: ossp-pkg/mm/shtool
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 shtool
  --- ossp-pkg/mm/shtool	2001/01/29 20:25:49	1.22
  +++ ossp-pkg/mm/shtool	2001/05/04 19:31:17	1.23
  @@ -6,7 +6,7 @@
   ##  See http://www.gnu.org/software/shtool/ for more information.
   ##  See ftp://ftp.gnu.org/gnu/shtool/ for latest version.
   ##
  -##  Version:  1.5.2 (05-Oct-2000)
  +##  Version:  1.5.3 (19-Apr-2001)
   ##  Contents: 6/17 available modules
   ##
   
  @@ -26,7 +26,7 @@
   ##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
   ##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
   ##
  -##  Notice: Given that you include this file verbatim into your own
  +##  NOTICE: Given that you include this file verbatim into your own
   ##  source tree, you are justified in saying that it remains separate
   ##  from your package, and that this way you are simply just using GNU
   ##  shtool. So, in this situation, there is no requirement that your
  @@ -65,7 +65,7 @@
       exit 1
   fi
   if [ ".$1" = ".-h" -o ".$1" = ".--help" ]; then
  -    echo "This is GNU shtool, version 1.5.2 (05-Oct-2000)"
  +    echo "This is GNU shtool, version 1.5.3 (19-Apr-2001)"
       echo "Copyright (c) 1994-2001 Ralf S. Engelschall <rse@engelschall.com>"
       echo "Report bugs to <bug-shtool@gnu.org>"
       echo ''
  @@ -83,8 +83,8 @@
       echo '           [-e<sed-cmd>] <file> [<file> ...] <path>'
       echo '  mkdir    [-t] [-f] [-p] [-m<mode>] <dir> [<dir> ...]'
       echo '  fixperm  [-v] [-t] <path> [<path> ...]'
  -    echo '  tarball  [-t] [-v] [-o <tarball>] [-c <prog>] [-d <dir>] [-u'
  -    echo '           <user>] [-g <group>] [-e <pattern>] <path> [<path> ...]'
  +    echo '  tarball  [-t] [-v] [-o<tarball>] [-c<prog>] [-d<dir>] [-u<user>]'
  +    echo '           [-g<group>] [-e<pattern>] <path> [<path> ...]'
       echo '  version  [-l<lang>] [-n<name>] [-p<prefix>] [-s<version>] [-e]'
       echo '           [-i<knob>] [-d<type>] <file>'
       echo ''
  @@ -105,7 +105,7 @@
       exit 0
   fi
   if [ ".$1" = ".-v" -o ".$1" = ."--version" ]; then
  -    echo "GNU shtool 1.5.2 (05-Oct-2000)"
  +    echo "GNU shtool 1.5.3 (19-Apr-2001)"
       exit 0
   fi
   if [ ".$1" = ".-r" -o ".$1" = ."--recreate" ]; then
  @@ -180,7 +180,7 @@
           ;;
       tarball )
           str_tool="tarball"
  -        str_usage="[-t] [-v] [-o <tarball>] [-c <prog>] [-d <dir>] [-u <user>] [-g <group>] [-e <pattern>] <path> [<path> ...]"
  +        str_usage="[-t] [-v] [-o<tarball>] [-c<prog>] [-d<dir>] [-u<user>] [-g<group>] [-e<pattern>] <path> [<path> ...]"
           gen_tmpfile=yes
           arg_spec="1+"
           opt_spec="t.v.o:c:d:u:g:e:"
  @@ -748,6 +748,12 @@
                   echo "mkdir $p" 1>&2
               fi
               mkdir $p || errstatus=$?
  +            if [ ".$opt_m" != . ]; then
  +                if [ ".$opt_t" = .yes ]; then
  +                    echo "chmod $opt_m $p" 1>&2
  +                fi
  +                chmod $opt_m $p || errstatus=$?
  +            fi
           else
               #   the smart situation
               set fnord `echo ":$p" |\

From ossp-cvs-owner@ossp.org  Thu May 10 21:51:34 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f4AJpX249125; Thu, 10 May 2001 21:51:33 +0200 (CEST)
Date: Thu, 10 May 2001 21:51:33 +0200 (CEST)
Message-Id: <200105101951.f4AJpX249125@ossp.org>
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   OSSP Project Master
  Root:   /e/ossp/cvs                      Email:  ossp@ossp.org
  Module: CVSROOT                          Date:   10-May-2001 21:51:32
  Branch: HEAD                             Handle: 2001051020513200

  Modified files:
    CVSROOT                 modules

  Log:
    *** empty log message ***

  Summary:
    Revision    Changes     Path
    1.23        +1  -0      CVSROOT/modules
  ____________________________________________________________________________

  Index: CVSROOT/modules
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 modules
  --- CVSROOT/modules	2000/09/14 15:55:06	1.22
  +++ CVSROOT/modules	2001/05/10 19:51:32	1.23
  @@ -72,4 +72,5 @@
   shiela          ossp-pkg/shiela
   str             ossp-pkg/str
   sugar           ossp-pkg/sugar
  +l2              ossp-pkg/l2
   

From ossp-cvs-owner@ossp.org  Thu May 10 22:00:32 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f4AK0VQ50372; Thu, 10 May 2001 22:00:31 +0200 (CEST)
Date: Thu, 10 May 2001 22:00:31 +0200 (CEST)
Message-Id: <200105102000.f4AK0VQ50372@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.3 l2.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   10-May-2001 22:00:31
  Branch: HEAD                             Handle: 2001051021003100

  Modified files:
    ossp-pkg/l2             l2.3 l2.pod

  Log:
    get rid of old Str stuff

  Summary:
    Revision    Changes     Path
    1.2         +5  -621    ossp-pkg/l2/l2.3
    1.2         +11 -729    ossp-pkg/l2/l2.pod
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2.3
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 l2.3
  --- ossp-pkg/l2/l2.3	2001/05/10 19:46:01	1.1.1.1
  +++ ossp-pkg/l2/l2.3	2001/05/10 20:00:31	1.2
  @@ -1,5 +1,5 @@
   .\" Automatically generated by Pod::Man version 1.02
  -.\" Tue May  8 21:21:11 2001
  +.\" Thu May 10 22:00:18 2001
   .\"
   .\" Standard preamble:
   .\" ======================================================================
  @@ -141,632 +141,16 @@
   .TH l2 3 "08-May-2001" "L2 0.1.0" "Logging Library"
   .UC
   .SH "NAME"
  -\&\fBStr\fR \- String Library
  +\&\fBL2\fR \- Logging Library
   .SH "VERSION"
   .IX Header "VERSION"
  -Str \s-10.1.0 (08-May-2001)\s0
  +L2 L2_VERSION_STR
   .SH "SYNOPSIS"
   .IX Header "SYNOPSIS"
  -\&\fBstr_len\fR,
  -\&\fBstr_copy\fR,
  -\&\fBstr_dup\fR,
  -\&\fBstr_concat\fR,
  -\&\fBstr_splice\fR,
  -\&\fBstr_compare\fR,
  -\&\fBstr_span\fR,
  -\&\fBstr_locate\fR,
  -\&\fBstr_token\fR,
  -\&\fBstr_parse\fR,
  -\&\fBstr_format\fR,
  -\&\fBstr_hash\fR,
  -\&\fBstr_base64\fR.
  +\&...
   .SH "DESCRIPTION"
   .IX Header "DESCRIPTION"
  -The \fBStr\fR library is a generic string library written in \s-1ANSI\s0 C which
  -provides functions for handling, matching, parsing, searching and
  -formatting of C strings. So it can be considered as a superset of \s-1POSIX\s0
  -\&\fIstring\fR\|(3), but its main intention is to provide a more convinient and
  -compact \s-1API\s0 plus a more generalized functionality.
  +The \fBL2\fR library is...
   .SH "FUNCTIONS"
   .IX Header "FUNCTIONS"
   The following functions are provided by the \fBStr\fR \s-1API:\s0
  -.Ip "str_size_t \fBstr_len\fR(const char *\fIs\fR);" 4
  -.IX Item "str_size_t str_len(const char *s);"
  -This function determines the length of string \fIs\fR, i.e., the number
  -of characters starting at \fIs\fR that precede the terminating \f(CW\*(C`NUL\*(C'\fR
  -character. It returns \f(CW\*(C`NULL\*(C'\fR if \fIs\fR is \f(CW\*(C`NULL\*(C'\fR.
  -.Ip "char *\fBstr_copy\fR(char *\fIs\fR, const char *\fIt\fR, size_t \fIn\fR);" 4
  -.IX Item "char *str_copy(char *s, const char *t, size_t n);"
  -This copies the characters in string \fIt\fR into the string \fIs\fR, but never more
  -than \fIn\fR characters (if \fIn\fR is greater than \f(CW\*(C`0\*(C'\fR). The two involved strings
  -can overlap and the characters in \fIs\fR are always \f(CW\*(C`NUL\*(C'\fR\-terminated. The
  -string \fIs\fR has to be large enough to hold all characters to be copied.
  -function returns \f(CW\*(C`NULL\*(C'\fR if \fIs\fR or \fIt\fR are \f(CW\*(C`NULL\*(C'\fR. Else it returns the
  -pointer to the written \f(CW\*(C`NUL\*(C'\fR\-terminating character in \fIs\fR.
  -.Ip "char *\fBstr_dup\fR(const char *\fIs\fR, str_size_t \fIn\fR);" 4
  -.IX Item "char *str_dup(const char *s, str_size_t n);"
  -This returns a copy of the characters in string \fIs\fR, but never more than \fIn\fR
  -characters if \fIn\fR is greater than \f(CW\*(C`0\*(C'\fR. It returns \f(CW\*(C`NULL\*(C'\fR if \fIs\fR is
  -\&\f(CW\*(C`NULL\*(C'\fR. The returned string has to be deallocated later with \fIfree\fR\|(3).
  -.Ip "char *\fBstr_concat\fR(char *\fIs\fR, ...);" 4
  -.IX Item "char *str_concat(char *s, ...);"
  -This functions concatenates the characters of all string arguments into a new
  -allocated string and returns this new string.  If \fIs\fR is \f(CW\*(C`NULL\*(C'\fR the function
  -returns \f(CW\*(C`NULL\*(C'\fR. Else it returns the pointer to the written final
  -\&\f(CW\*(C`NUL\*(C'\fR\-terminating character in \fIs\fR. The returned string later has to be
  -deallicated with \fIfree\fR\|(3).
  -.Ip "char *\fBstr_splice\fR(char *\fIs\fR, str_size_t \fIoff\fR, str_size_t \fIn\fR, char *\fIt\fR, str_size_t \fIm\fR);" 4
  -.IX Item "char *str_splice(char *s, str_size_t off, str_size_t n, char *t, str_size_t m);"
  -This splices the string \fIt\fR into string \fIs\fR, i.e., the \fIn\fR characters
  -at offset \fIoff\fR in \fIs\fR are removed and at their location the string
  -\&\fIt\fR is inserted (or just the first \fIm\fR characters of \fIt\fR if \fIm\fR is
  -greater than \f(CW\*(C`0\*(C'\fR). It returns \f(CW\*(C`NULL\*(C'\fR if \fIs\fR or \fIt\fR are \f(CW\*(C`NULL\*(C'\fR.
  -Else the string \fIs\fR is returned. The function supports also the
  -situation where \fIt\fR is a sub-string of \fIs\fR as long as the area
  -\&\fIs+off\fR...\fIs+off+n\fR and \fIt\fR...\fIt+m\fR do not overlap. The caller
  -always has to make sure that enough room exists in \fIs\fR.
  -.Ip "int \fBstr_compare\fR(const char *\fIs\fR, const char *\fIt\fR, str_size_t \fIn\fR, int \fImode\fR);" 4
  -.IX Item "int str_compare(const char *s, const char *t, str_size_t n, int mode);"
  -This performs a lexicographical comparison of the two strings \fIs\fR
  -and \fIt\fR (but never compares more than \fIn\fR characters of them)
  -and returns one of three return values: a value lower than \f(CW\*(C`0\*(C'\fR if
  -\&\fIs\fR is lexicographically lower than \fIt\fR, a vlue of exactly \f(CW\*(C`0\*(C'\fR
  -if \fIs\fR and \fIt\fR are equal and a value greater than \f(CW\*(C`0\*(C'\fR if \fIs\fR is
  -lexicographically higher than \fIt\fR. Per default (\fImode\fR is \f(CW\*(C`0\*(C'\fR) the
  -comparison is case-sensitive, but if \f(CW\*(C`STR_NOCASE\*(C'\fR is used for \fImode\fR
  -the comparison is done in a case-insensitive way.
  -.Ip "char *\fBstr_span\fR(const char *\fIs\fR, size_t \fIn\fR, const char *\fIcharset\fR, int \fImode\fR);" 4
  -.IX Item "char *str_span(const char *s, size_t n, const char *charset, int mode);"
  -This functions spans a string \fIs\fR according to the characters specified in
  -\&\fIcharset\fR. If \fImode\fR is \f(CW\*(C`0\*(C'\fR, this means that \fIs\fR is spanned from left to
  -right starting at \fIs\fR (and ending either when reaching the terminating \f(CW\*(C`NUL\*(C'\fR
  -character or already after \fIn\fR spanned characters) as long as the characters
  -of \fIs\fR are contained in \fIcharset\fR.
  -.Sp
  -Alternatively one can use a \fImode\fR of \f(CW\*(C`STR_COMPLEMENT\*(C'\fR to indicate that \fIs\fR
  -is spanned as long as the characters of \fIs\fR are \fInot\fR contained in
  -\&\fIcharset\fR, i.e., \fIcharset\fR then specifies the complement of the spanning
  -characters.
  -.Sp
  -In both cases one can additionally \*(L"or\*(R" (with the C operator ``\f(CW\*(C`|\*(C'\fR'')
  -\&\f(CW\*(C`STR_RIGHT\*(C'\fR into \fImode\fR to indicate that the spanning is done right to
  -left starting at the terminating \f(CW\*(C`NUL\*(C'\fR character of \fIs\fR (and ending
  -either when reaching \fIs\fR or already after \fIn\fR spanned characters).
  -.Ip "char *\fBstr_locate\fR(const char *\fIs\fR, str_size_t \fIn\fR, const char *\fIt\fR);" 4
  -.IX Item "char *str_locate(const char *s, str_size_t n, const char *t);"
  -This functions searches for the (smaller) string \fIt\fR inside (larger) string
  -\&\fIs\fR. If \fIn\fR is not \f(CW\*(C`0\*(C'\fR, the search is performed only inside the first \fIn\fR
  -characters of \fIs\fR. 
  -.Ip "char *\fBstr_token\fR(char **\fIs\fR, const char *\fIdelim\fR, const char *\fIquote\fR, const char *\fIcomment\fR, int \fImode\fR);" 4
  -.IX Item "char *str_token(char **s, const char *delim, const char *quote, const char *comment, int mode);"
  -This function considers the string \fIs\fR to consist of a sequence of
  -zero or more text tokens separated by spans of one or more characters
  -from the separator string \fIdelim\fR. However, text between matched pairs
  -of quotemarks (characters in \fIquote\fR) is treated as plain text, never
  -as delimiter (separator) text. Each call of this function returns a
  -pointer to the first character of the first token of \fIs\fR. The token is
  -\&\f(CW\*(C`NUL\*(C'\fR\-terminated, i.e., the string \fIs\fR is processed in a destructive
  -way. If there are quotation marks or escape sequences, the input
  -string is rewritten with quoted sections and escape sequences properly
  -interpreted.
  -.Sp
  -This function keeps track of its parsing position in the string between
  -separate calls by simply adjusting the callers \fIs\fR pointer, so that
  -subsequent calls with the same pointer variable \fIs\fR will start
  -processing from the position immediately after the last returned token.
  -In this way subsequent calls will work through the string \fIs\fR until no
  -tokens remain. When no token remains in \fIs\fR, \f(CW\*(C`NULL\*(C'\fR is returned. The
  -string of token separators (\fIdelim\fR) and the string of quote characters
  -(\fIquote\fR) may be changed from call to call.
  -.Sp
  -If a character in the string \fIs\fR is not quoted or escaped, and is in the
  -\&\fIcomment\fR set, then it is overwritten with a \f(CW\*(C`NUL\*(C'\fR character and the rest of
  -the string is ignored. The characters to be used as quote characters are
  -specified in the \fIquote\fR set, and must be used in balanced pairs. If there
  -is more than one flavor of quote character, one kind of quote character may be
  -used to quote another kind. If an unbalanced quote is found, the function
  -silently act as if one had been placed at the end of the input string.  The
  -\&\fIdelim\fR and \fIquote\fR strings must be disjoint, i.e., they have to share
  -no characters. 
  -.Sp
  -The \fImode\fR argument can be used to modify the processing of the string
  -(default for \fImode\fR is \f(CW\*(C`0\*(C'\fR): \f(CW\*(C`STR_STRIPQUOTES\*(C'\fR forces \fIquote\fR
  -characters to be stripped from quoted tokens; \f(CW\*(C`STR_BACKSLASHESC\*(C'\fR
  -enables the interpretation (and expansion) of backslash escape sequences
  -(`\fB\ex\fR') through \s-1ANSI-C\s0 rules; \f(CW\*(C`STR_SKIPDELIMS\*(C'\fR forces that after the
  -terminating \f(CW\*(C`NUL\*(C'\fR is written and the token returned, further delimiters
  -are skipped (this allows one to make sure that the delimiters for
  -one word don't become part of the next word if one change delimiters
  -between calls); and \f(CW\*(C`STR_TRIGRAPHS\*(C'\fR enables the recognition and
  -expansion of \s-1ANSI\s0 C Trigraph sequences (as a side effect this enables
  -\&\f(CW\*(C`STR_BACKSLASHESC\*(C'\fR, too).
  -.Ip "int \fBstr_parse\fR(const char *\fIs\fR, const char *\fIpop\fR, ...);" 4
  -.IX Item "int str_parse(const char *s, const char *pop, ...);"
  -This parses the string \fIs\fR according to the parsing operation specified
  -by \fIpop\fR. If the parsing operation succeeds, \f(CW\*(C`TRUE\*(C'\fR is returned. Else
  -\&\f(CW\*(C`FALSE\*(C'\fR is returned.
  -.Sp
  -The \fIpop\fR string usually has one of the following two syntax variants:
  -`\fBm\fR \fIdelim\fR \fIregex\fR \fIdelim\fR \fIflags\fR*' (for matching operations)
  -and `\fBs\fR \fIdelim\fR \fIregex\fR \fIdelim\fR \fIsubst\fR \fIdelim\fR \fIflags\fR*' (for
  -substitution operations). For more details about the syntax variants
  -and semantic of the \fIpop\fR argument see section \fB\s-1GORY\s0 \s-1DETAILS\s0, Parsing
  -Specification\fR below. The syntax of the \fIregex\fR part in \fIpop\fR is
  -mostly equivalent to Perl 5's regular expression syntax. For the
  -complete and gory details see \fIperlre\fR\|(1). A brief summary you can find
  -under section \fB\s-1GORY\s0 \s-1DETAILS\s0, Perl Regular Expressions\fR below.
  -.Ip "int \fBstr_format\fR(char *\fIs\fR, str_size_t \fIn\fR, const char *\fIfmt\fR, ...);" 4
  -.IX Item "int str_format(char *s, str_size_t n, const char *fmt, ...);"
  -This formats a new string according to \fIfmt\fR and optionally following
  -arguments and writes it into the string \fIs\fR, but never more than \fIn\fR
  -characters at all. It returns the number of written characters.  If \fIs\fR is
  -\&\f(CW\*(C`NULL\*(C'\fR it just calculates the number of characters which would be written.
  -.Sp
  -The function generates the output string under the control of the \fIfmt\fR
  -format string that specifies how subsequent arguments (or arguments accessed
  -via the variable-length argument facilities of \fIstdarg\fR\|(3)) are converted for
  -output.
  -.Sp
  -The format string \fIfmt\fR is composed of zero or more directives:
  -ordinary characters (not \fB%\fR), which are copied unchanged to the output
  -stream; and conversion specifications, each of which results in fetching
  -zero or more subsequent arguments. Each conversion specification is
  -introduced by the character \fB%\fR. The arguments must correspond properly
  -(after type promotion) with the conversion specifier. Which conversion
  -specifications are supported are described in detail under \fB\s-1GORY\s0
  -\&\s-1DETAILS\s0, Format Specification\fR below.
  -.Ip "unsigned long \fBstr_hash\fR(const char *\fIs\fR, str_size_t \fIn\fR, int \fImode\fR);" 4
  -.IX Item "unsigned long str_hash(const char *s, str_size_t n, int mode);"
  -This function calculates a hash value of string \fIs\fR (or of its first \fIn\fR
  -characters if \fIn\fR is equal to \f(CW\*(C`0\*(C'\fR). The following hashing functions
  -are supported and can be selected with \fImode\fR: \s-1STR_HASH_DJBX33\s0 (Daniel
  -J. Berstein, Times 33 Hash with Addition), \s-1STR_HASH_BJDDJ\s0 (Bob
  -Jenkins, Dr. Dobbs Journal), and \s-1STR_HASH_MACRC32\s0 (Mark Adler, Cyclic
  -Redundancy Check with 32\-Bit). This function is intended for fast use
  -in hashing algorithms and \fInot\fR for use as cryptographically strong
  -message digests.
  -.Ip "int \fBstr_base64\fR(char *\fIs\fR, str_size_t \fIn\fR, unsigned char *\fIucp\fR, str_size_t \fIucn\fR, int \fImode\fR);" 4
  -.IX Item "int str_base64(char *s, str_size_t n, unsigned char *ucp, str_size_t ucn, int mode);"
  -This function Base64 encodes \fIucn\fR bytes starting at \fIucp\fR and writes
  -the resulting string into \fIs\fR (but never more than \fIn\fR characters are
  -written). The \fImode\fR for this operation has to be \f(CW\*(C`STR_BASE64_ENCODE\*(C'\fR.
  -Additionally one can \s-1OR\s0 the value \f(CW\*(C`STR_BASE64_STRICT\*(C'\fR to enable strict
  -encoding where after every 72th output character a newline character is
  -inserted. The function returns the number of output characters written.
  -If \fIs\fR is \f(CW\*(C`NULL\*(C'\fR the function just calculates the number of required
  -output characters.
  -.Sp
  -Alternatively, if \fImode\fR is \f(CW\*(C`STR_BASE64_DECODE\*(C'\fR the string \fIs\fR (or
  -the first \fIn\fR characters only if \fIn\fR is not \f(CW\*(C`0\*(C'\fR) is decoded and the
  -output bytes written at \fIucp\fR. Again, if \fIucp\fR is \f(CW\*(C`NULL\*(C'\fR only the
  -number of required output bytes are calculated.
  -.SH "GORY DETAILS"
  -.IX Header "GORY DETAILS"
  -In this part of the documentation more complex topics are documented in
  -detail.
  -.Sh "Perl Regular Expressions"
  -.IX Subsection "Perl Regular Expressions"
  -The regular expressions used in \fBStr\fR are more or less Perl compatible
  -(they are provided by a stripped down and built-in version of the
  -\&\fI\s-1PCRE\s0\fR library). So the syntax description in \fIperlre\fR\|(1) applies
  -and don't has to be repeated here again. For a deeper understanding
  -and details you should have a look at the book `\fIMastering Regular
  -Expressions\fR' (see also the \fIperlbook\fR\|(1) manpage) by \fIJeffrey Friedl\fR.
  -For convinience reasons we give you only a brief summary of Perl
  -compatible regular expressions:
  -.PP
  -The following metacharacters have their standard \fIegrep\fR\|(1) meanings:
  -.PP
  -.Vb 7
  -\&  \e      Quote the next metacharacter
  -\&  ^      Match the beginning of the line
  -\&  .      Match any character (except newline)
  -\&  $      Match the end of the line (or before newline at the end)
  -\&  |      Alternation
  -\&  ()     Grouping
  -\&  []     Character class
  -.Ve
  -The following standard quantifiers are recognized:
  -.PP
  -.Vb 12
  -\&  *      Match 0 or more times (greedy)
  -\&  *?     Match 0 or more times (non greedy)
  -\&  +      Match 1 or more times (greedy)
  -\&  +?     Match 1 or more times (non greedy)
  -\&  ?      Match 1 or 0 times (greedy)
  -\&  ??     Match 1 or 0 times (non greedy)
  -\&  {n}    Match exactly n times (greedy)
  -\&  {n}?   Match exactly n times (non greedy)
  -\&  {n,}   Match at least n times (greedy)
  -\&  {n,}?  Match at least n times (non greedy)
  -\&  {n,m}  Match at least n but not more than m times (greedy)
  -\&  {n,m}? Match at least n but not more than m times (non greedy)
  -.Ve
  -The following backslash sequences are recognized:
  -.PP
  -.Vb 15
  -\&  \et     Tab                   (HT, TAB)
  -\&  \en     Newline               (LF, NL)
  -\&  \er     Return                (CR)
  -\&  \ef     Form feed             (FF)
  -\&  \ea     Alarm (bell)          (BEL)
  -\&  \ee     Escape (think troff)  (ESC)
  -\&  \e033   Octal char
  -\&  \ex1B   Hex char
  -\&  \ec[    Control char
  -\&  \el     Lowercase next char
  -\&  \eu     Uppercase next char
  -\&  \eL     Lowercase till \eE
  -\&  \eU     Uppercase till \eE
  -\&  \eE     End case modification
  -\&  \eQ     Quote (disable) pattern metacharacters till \eE
  -.Ve
  -The following non zero-width assertions are recognized:
  -.PP
  -.Vb 6
  -\&  \ew     Match a "word" character (alphanumeric plus "_")
  -\&  \eW     Match a non-word character
  -\&  \es     Match a whitespace character
  -\&  \eS     Match a non-whitespace character
  -\&  \ed     Match a digit character
  -\&  \eD     Match a non-digit character
  -.Ve
  -The following zero-width assertions are recognized:
  -.PP
  -.Vb 6
  -\&  \eb     Match a word boundary
  -\&  \eB     Match a non-(word boundary)
  -\&  \eA     Match only at beginning of string
  -\&  \eZ     Match only at end of string, or before newline at the end
  -\&  \ez     Match only at end of string
  -\&  \eG     Match only where previous m//g left off (works only with /g)
  -.Ve
  -The following regular expression extensions are recognized:
  -.PP
  -.Vb 11
  -\&  (?#text)              An embedded comment
  -\&  (?:pattern)           This is for clustering, not capturing (simple)
  -\&  (?imsx-imsx:pattern)  This is for clustering, not capturing (full)
  -\&  (?=pattern)           A zero-width positive lookahead assertion
  -\&  (?!pattern)           A zero-width negative lookahead assertion
  -\&  (?<=pattern)          A zero-width positive lookbehind assertion
  -\&  (?<!pattern)          A zero-width negative lookbehind assertion
  -\&  (?>pattern)           An "independent" subexpression
  -\&  (?(cond)yes-re)       Conditional expression (simple)
  -\&  (?(cond)yes-re|no-re) Conditional expression (full)
  -\&  (?imsx-imsx)          One or more embedded pattern-match modifiers
  -.Ve
  -.Sh "Parsing Specification"
  -.IX Subsection "Parsing Specification"
  -The \fBstr_parse\fR(const char *\fIs\fR, const char *\fIpop\fR, ...) function
  -is a very flexible but complex one. The argument \fIs\fR is the string on
  -which the parsing operation specified by argument \fIpop\fR is applied.
  -The parsing semantics are highly influenced by Perl's `\fB=~\fR' matching
  -operator, because one of the main goals of \fIstr_parse\fR\|(3) is to allow one
  -to rewrite typical Perl matching constructs into C.
  -.PP
  -Now to the gory details. In general, the \fIpop\fR argument of \fIstr_parse\fR\|(3)
  -has one of the following two syntax variants:
  -.Ip "\fBMatching:\fR `\fBm\fR \fIdelim\fR \fIregex\fR \fIdelim\fR \fIflags\fR*':" 4
  -.IX Item "Matching: `m delim regex delim flags*':"
  -This matches \fIs\fR against the Perl-style regular expression \fIregex\fR
  -under the control of zero or more \fIflags\fR which control the parsing
  -semantics. The stripped down \fIpop\fR syntax `\fIregex\fR' is equivalent to
  -`\fBm/\fR\fIregex\fR\fB/\fR'. 
  -.Sp
  -For each grouping pair of parenthesis in \fIregex\fR, the text in \fIs\fR
  -which was grouped by the parenthesis is extracted into new strings.
  -These per default are allocated as seperate strings and returned to the
  -caller through following `\fBchar **\fR' arguments. The caller is required
  -to \fIfree\fR\|(3) them later.
  -.Ip "\fBSubstitution:\fR `\fBs\fR \fIdelim\fR \fIregex\fR \fIdelim\fR \fIsubst\fR \fIdelim\fR \fIflags\fR*':" 4
  -.IX Item "Substitution: `s delim regex delim subst delim flags*':"
  -This matches \fIs\fR against the Perl-style regular expression \fIregex\fR
  -under the control of zero or more \fIflags\fR which control the parsing
  -semantics. As a result of the operation, a new string formed which
  -consists of \fIs\fR but with the part which matched \fIregex\fR replaced by
  -\&\fIsubst\fR. The result string is returned to the caller through a `\fBchar
  -**\fR' argument. The caller is required to \fIfree\fR\|(3) this later.
  -.Sp
  -For each grouping pair of parenthesis in \fIregex\fR, the text in \fIs\fR
  -which was grouped by the parenthesis is extracted into new strings
  -and can be referenced for expansion via `\fB$n\fR' (n=1,..) in \fIsubst\fR.
  -Additionally any \fIstr_format\fR\|(3) style `\fB%\fR' constructs in \fIsubst\fR are
  -expanded through additional caller supplied arguments.
  -.PP
  -The following \fIflags\fR are supported:
  -.Ip "\fBb\fR" 4
  -.IX Item "b"
  -If the \fIbundle\fR flag `\fBb\fR' is specified, the extracted strings are
  -bundled together into a single chunk of memory and its address is
  -returned to the caller with a additional `\fBchar **\fR' argument which has
  -to preceed the regular string arguments. The caller then has to \fIfree\fR\|(3)
  -only this chunk of memory in order to free all extracted strings at
  -once.
  -.Ip "\fBi\fR" 4
  -.IX Item "i"
  -If the case-\fIinsensitive\fR flag `\fBi\fR' is specified, \fIregex\fR
  -is matched in case-insensitive way.
  -.Ip "\fBo\fR" 4
  -.IX Item "o"
  -If the \fIonce\fR flag `\fBo\fR' is specified, this indicates to the \fBStr\fR
  -library that the whole \fIpop\fR string is constant and that its internal
  -pre-processing (it is compiled into a deterministic finite automaton
  -(\s-1DFA\s0) internally) has to be done only once (the \fBStr\fR library then
  -caches the \s-1DFA\s0 which corresponds to the \fIpop\fR argument).
  -.Ip "\fBx\fR" 4
  -.IX Item "x"
  -If the \fIextended\fR flag `\fBx\fR' is specified, the \fIregex\fR's legibility
  -is extended by permitting embedded whitespace and comments to allow one
  -to write down complex regular expressions more cleary and even in a
  -documented way.
  -.Ip "\fBm\fR" 4
  -.IX Item "m"
  -If the \fImultiple\fR lines flag `\fBm\fR' is specified, the string \fIs\fR is
  -treated as multiple lines. That is, this changes the regular expression
  -meta characters `\fB^\fR' and `\fB$\fR' from matching at only the very start
  -or end of the string \fIs\fR to the start or end of any line anywhere
  -within the string \fIs\fR.
  -.Ip "\fBs\fR" 4
  -.IX Item "s"
  -If the \fIsingle\fR line flag `\fBs\fR' is specified, the string \fIs\fR is
  -treated as single line. That is, this changes the regular expression
  -meta character `\fB.\fR' to match any character whatsoever, even a newline,
  -which it normally would not match.
  -.SH "CONVERSION SPECIFICATION"
  -.IX Header "CONVERSION SPECIFICATION"
  -In the format string of \fIstr_format\fR\|(3) each conversion specification is
  -introduced by the character \fB%\fR. After the \fB%\fR, the following appear
  -in sequence:
  -.Ip "o" 4
  -An optional field, consisting of a decimal digit string followed by a \fB$\fR,
  -specifying the next argument to access.  If this field is not provided, the
  -argument following the last argument accessed will be used.  Arguments are
  -numbered starting at \fB1\fR. If unaccessed arguments in the format string are
  -interspersed with ones that are accessed the results will be indeterminate.
  -.Ip "o" 4
  -Zero or more of the following flags:
  -.Sp
  -A \fB#\fR character specifying that the value should be converted to an
  -``alternate form''.  For \fBc\fR, \fBd\fR, \fBi\fR, \fBn\fR, \fBp\fR, \fBs\fR, and \fBu\fR,
  -conversions, this option has no effect.  For \fBo\fR conversions, the precision
  -of the number is increased to force the first character of the output string
  -to a zero (except if a zero value is printed with an explicit precision of
  -zero).  For \fBx\fR and \fBX\fR conversions, a non-zero result has the string \fB0x\fR
  -(or \fB0X\fR for \fBX\fR conversions) prepended to it.  For \fBe\fR, \fBE\fR, \fBf\fR, \fBg\fR,
  -and \fBG\fR, conversions, the result will always contain a decimal point, even if
  -no digits follow it (normally, a decimal point appears in the results of those
  -conversions only if a digit follows).  For \fBg\fR and \fBG\fR conversions, trailing
  -zeros are not removed from the result as they would otherwise be.
  -.Sp
  -A zero `\fB0\fR' character specifying zero padding.  For all conversions except
  -\&\fBn\fR, the converted value is padded on the left with zeros rather than blanks.
  -If a precision is given with a numeric conversion (\fBd\fR, \fBi\fR, \fBo\fR, \fBu\fR,
  -\&\fBi\fR, \fBx\fR, and \fBX\fR), the `\fB0\fR' flag is ignored.
  -.Sp
  -A negative field width flag `\fB-\fR' indicates the converted value is to be left
  -adjusted on the field boundary.  Except for \fBn\fR conversions, the converted
  -value is padded on the right with blanks, rather than on the left with blanks
  -or zeros.  A `\fB-\fR' overrides a `\fB0\fR' if both are given.
  -.Sp
  -A space, specifying that a blank should be left before a positive number
  -produced by a signed conversion (\fBd\fR, \fBe\fR, \fBE\fR, \fBf\fR, \fBg\fR, \fBG\fR, or \fBi\fR).
  -.Sp
  -A `\fB+\fR' character specifying that a sign always be placed before a number
  -produced by a signed conversion.  A `\fB+\fR' overrides a space if both are used.
  -.Ip "o" 4
  -An optional decimal digit string specifying a minimum field width.
  -If the converted value has fewer characters than the field width, it will
  -be padded with spaces on the left (or right, if the left-adjustment
  -flag has been given) to fill out
  -the field width.
  -.Ip "o" 4
  -An optional precision, in the form of a period `\fB.\fR' followed by an
  -optional digit string. If the digit string is omitted, the precision is
  -taken as zero. This gives the minimum number of digits to appear for
  -\&\fBd\fR, \fBi\fR, \fBo\fR, \fBu\fR, \fBx\fR, and \fBX\fR conversions, the number of digits
  -to appear after the decimal-point for \fBe\fR, \fBE\fR, and \fBf\fR conversions,
  -the maximum number of significant digits for \fBg\fR and \fBG\fR conversions,
  -or the maximum number of characters to be printed from a string for \fBs\fR
  -conversions.
  -.Ip "o" 4
  -The optional character \fBh\fR, specifying that a following \fBd\fR, \fBi\fR, \fBo\fR,
  -\&\fBu\fR, \fBx\fR, or \fBX\fR conversion corresponds to a `\f(CW\*(C`short int\*(C'\fR' or `\f(CW\*(C`unsigned
  -short int\*(C'\fR' argument, or that a following \fBn\fR conversion corresponds to a
  -pointer to a `\f(CW\*(C`short int\*(C'\fR argument.
  -.Ip "o" 4
  -The optional character \fBl\fR (ell) specifying that a following \fBd\fR, \fBi\fR,
  -\&\fBo\fR, \fBu\fR, \fBx\fR, or \fBX\fR conversion applies to a pointer to a `\f(CW\*(C`long int\*(C'\fR'
  -or `\f(CW\*(C`unsigned long int\*(C'\fR' argument, or that a following \fBn\fR conversion
  -corresponds to a pointer to a `\f(CW\*(C`long int\*(C'\fR argument.
  -.Ip "o" 4
  -The optional character \fBq\fR, specifying that a following \fBd\fR, \fBi\fR, \fBo\fR,
  -\&\fBu\fR, \fBx\fR, or \fBX\fR conversion corresponds to a `\f(CW\*(C`quad int\*(C'\fR' or `\f(CW\*(C`unsigned
  -quad int\*(C'\fR' argument, or that a following \fBn\fR conversion corresponds to a
  -pointer to a `\f(CW\*(C`quad int\*(C'\fR' argument.
  -.Ip "o" 4
  -The character \fBL\fR specifying that a following \fBe\fR, \fBE\fR, \fBf\fR, \fBg\fR, or \fBG\fR
  -conversion corresponds to a `\f(CW\*(C`long double\*(C'\fR' argument.
  -.Ip "o" 4
  -A character that specifies the type of conversion to be applied.
  -.PP
  -A field width or precision, or both, may be indicated by an asterisk `\fB*\fR' or
  -an asterisk followed by one or more decimal digits and a `\fB$\fR' instead of a
  -digit string.  In this case, an `\f(CW\*(C`int\*(C'\fR' argument supplies the field width or
  -precision.  A negative field width is treated as a left adjustment flag
  -followed by a positive field width; a negative precision is treated as though
  -it were missing.  If a single format directive mixes positional (`\fBnn$\fR') and
  -non-positional arguments, the results are undefined.
  -.PP
  -The conversion specifiers and their meanings are:
  -.Ip "\fBdiouxX\fR" 4
  -.IX Item "diouxX"
  -The `\f(CW\*(C`int\*(C'\fR' (or appropriate variant) argument is converted to signed decimal
  -(\fBd\fR and \fBi\fR), unsigned octal (\fBo\fR), unsigned decimal (\fBu\fR), or unsigned
  -hexadecimal (\fBx\fR and \fBX\fR) notation.  The letters \fBabcdef\fR are used for \fBx\fR
  -conversions; the letters \fB\s-1ABCDEF\s0\fR are used for \fBX\fR conversions.  The
  -precision, if any, gives the minimum number of digits that must appear; if the
  -converted value requires fewer digits, it is padded on the left with zeros.
  -.Ip "\fB\s-1DOU\s0\fR" 4
  -.IX Item "DOU"
  -The `\f(CW\*(C`long int\*(C'\fR argument is converted to signed decimal, unsigned octal, or
  -unsigned decimal, as if the format had been \fBld\fR, \fBlo\fR, or \fBlu\fR
  -respectively.  These conversion characters are deprecated, and will eventually
  -disappear.
  -.Ip "\fBeE\fR" 4
  -.IX Item "eE"
  -The `\f(CW\*(C`double\*(C'\fR' argument is rounded and converted in the style
  -`[\-]d.ddd\fBe\fR+\-dd' where there is one digit before the decimal-point character
  -and the number of digits after it is equal to the precision; if the precision
  -is missing, it is taken as 6; if the precision is zero, no decimal-point
  -character appears.  An \fBE\fR conversion uses the letter \fBE\fR (rather than \fBe\fR)
  -to introduce the exponent.  The exponent always contains at least two digits;
  -if the value is zero, the exponent is 00.
  -.Ip "\fBf\fR" 4
  -.IX Item "f"
  -The `\f(CW\*(C`double\*(C'\fR' argument is rounded and converted to decimal notation in the
  -style `[\-]ddd.ddd>' where the number of digits after the decimal-point
  -character is equal to the precision specification.  If the precision is
  -missing, it is taken as 6; if the precision is explicitly zero, no
  -decimal-point character appears.  If a decimal point appears, at least one
  -digit appears before it.
  -.Ip "\fBg\fR" 4
  -.IX Item "g"
  -The `\f(CW\*(C`double\*(C'\fR' argument is converted in style \fBf\fR or \fBe\fR (or \fBE\fR for \fBG\fR
  -conversions).  The precision specifies the number of significant digits.  If
  -the precision is missing, 6 digits are given; if the precision is zero, it is
  -treated as 1.  Style \fBe\fR is used if the exponent from its conversion is less
  -than \-4 or greater than or equal to the precision.  Trailing zeros are removed
  -from the fractional part of the result; a decimal point appears only if it is
  -followed by at least one digit.
  -.Ip "\fBc\fR" 4
  -.IX Item "c"
  -The `\f(CW\*(C`int\*(C'\fR' argument is converted to an `\f(CW\*(C`unsigned char\*(C'\fR, and the resulting
  -character is written.
  -.Ip "\fBs\fR" 4
  -.IX Item "s"
  -The `\f(CW\*(C`char *\*(C'\fR' argument is expected to be a pointer to an array of character
  -type (pointer to a string).  Characters from the array are written up to (but
  -not including) a terminating \f(CW\*(C`NUL\*(C'\fR character; if a precision is specified, no
  -more than the number specified are written.  If a precision is given, no null
  -character need be present; if the precision is not specified, or is greater
  -than the size of the array, the array must contain a terminating \f(CW\*(C`NUL\*(C'\fR
  -character.
  -.Ip "\fBp\fR" 4
  -.IX Item "p"
  -The `\f(CW\*(C`void *\*(C'\fR pointer argument is printed in hexadecimal (as if by `\fB%#x\fR'
  -or `\f(CW\*(C`%#lx\*(C'\fR).
  -.Ip "\fBn\fR" 4
  -.IX Item "n"
  -The number of characters written so far is stored into the integer indicated
  -by the `\f(CW\*(C`int *\*(C'\fR' (or variant) pointer argument.  No argument is converted.
  -.Ip "\fB%\fR" 4
  -.IX Item "%"
  -A `\fB%\fR' is written. No argument is converted. The complete conversion
  -specification is `\fB%%\fR.
  -.PP
  -In no case does a non-existent or small field width cause truncation of a
  -field; if the result of a conversion is wider than the field width, the field
  -is expanded to contain the conversion result.
  -.SH "EXAMPLES"
  -.IX Header "EXAMPLES"
  -In the following a few snippets of selected use cases of \fBStr\fR are
  -presented:
  -.Ip "\fBSplice a String into Another\fR" 4
  -.IX Item "Splice a String into Another"
  -.Vb 5
  -\& char *v1 = "foo bar quux";
  -\& char *v2 = "baz";
  -\& str_splice(v1, 3, 5, v2, 0):
  -\& /* now we have v1 = "foobazquux" */
  -\& ....
  -.Ve
  -.Ip "\fBTokenize a String\fR" 4
  -.IX Item "Tokenize a String"
  -.Vb 10
  -\& char *var = " foo \et " bar 'baz'" q'uu'x #comment";
  -\& char *tok, *p;
  -\& p = var; 
  -\& while ((tok = str_token(p, ":", "\e"'", "#", 0)) != NULL) {
  -\&     /* here we enter three times: 
  -\&        1. tok = "foo"
  -\&        2. tok = " bar 'baz'" 
  -\&        3. tok = "quux" */ 
  -\&     ...
  -\& }
  -.Ve
  -.Ip "\fBMatch a String\fR" 4
  -.IX Item "Match a String"
  -.Vb 5
  -\& char *var = "foo:bar";
  -\& if (str_parse(var, "^.+?:.+$/)) {
  -\&     /* var matched */
  -\&     ...
  -\& }
  -.Ve
  -.Ip "\fBMatch a String and Go Ahead with Details\fR" 4
  -.IX Item "Match a String and Go Ahead with Details"
  -.Vb 10
  -\& char *var = "foo:bar";
  -\& char *cp, *v1, *v2;
  -\& if (str_parse(var, "m/^(.+?):(.+)$/b", &cp, &v1, &v2)) {
  -\&     ...
  -\&     /* now we have: 
  -\&        cp = "foo\e0bar\e0" and v1 and v2 pointing
  -\&        into it, i.e., v1 = "foo", v2 = "bar" */
  -\&     ...
  -\&     free(cp);
  -\& }
  -.Ve
  -.Ip "\fBSubstitute Text in a String\fR" 4
  -.IX Item "Substitute Text in a String"
  -.Vb 8
  -\& char *var = "foo:bar";
  -\& char *subst = "quux";
  -\& char *new;
  -\& str_parse(var, "s/^(.+?):(.+)$/$1-%s-$2/", &new, subst);
  -\& ...
  -\& /* now we have: var = "foo:bar", new = "foo:quux:bar" */
  -\& ...
  -\& free(new);
  -.Ve
  -.Ip "\fBFormat a String\fR" 4
  -.IX Item "Format a String"
  -.Vb 6
  -\& char *v0 = "abc..."; /* length not guessable */
  -\& char *v1 = "foo";
  -\& void *v2 = 0xDEAD;
  -\& int v3 = 42;
  -\& char *cp;
  -\& int n;
  -.Ve
  -.Vb 6
  -\& n = str_format(NULL, 0, "%s|%5s-%x-%04d", v0, v1, v2, v3); 
  -\& cp = malloc(n);
  -\& str_format(cp, n, "%s-%x-%04d", v1, v2, v3); 
  -\& /* now we have cp = "abc...|  foo-DEAD-0042" */
  -\& ...
  -\& free(cp);
  -.Ve
  -.SH "SEE ALSO"
  -.IX Header "SEE ALSO"
  -\&\fIstring\fR\|(3), \fIprintf\fR\|(3), \fIperlre\fR\|(1).
  -.SH "HISTORY"
  -.IX Header "HISTORY"
  -The \fBStr\fR library was written in November and December 1999 by Ralf
  -S. Engelschall. As building blocks various existing code was used and
  -recycled: for the \fIstr_token\fR\|(3) implementation an anchient \fIstrtok\fR\|(3)
  -flavor from William Deich 1991 was cleaned up and adjusted. As the
  -background parsing engine for \fIstr_parse\fR\|(3) a heavily stripped down
  -version of Philip Hazel's \s-1PCRE\s0 2.08 library was used. The \fIstr_format\fR\|(3)
  -implementation was based on Panos Tsirigotis' \fIsprintf\fR\|(3) code as
  -adjusted by the Apache Software Foundation 1998. The formatting engine
  -was stripped down and enhanced to support internal extensions which were
  -required by \fIstr_format\fR\|(3) and \fIstr_parse\fR\|(3).
  -.SH "AUTHOR"
  -.IX Header "AUTHOR"
  -.Vb 3
  -\& Ralf S. Engelschall
  -\& rse@engelschall.com
  -\& www.engelschall.com
  -.Ve
  Index: ossp-pkg/l2/l2.pod
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 l2.pod
  --- ossp-pkg/l2/l2.pod	2001/05/10 19:46:01	1.1.1.1
  +++ ossp-pkg/l2/l2.pod	2001/05/10 20:00:31	1.2
  @@ -1,9 +1,10 @@
   ##
  -##  Str - String Library
  -##  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
  +##  L2 - OSSP Logging Library
  +##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
  -##  This file is part of Str, a string handling and manipulation 
  -##  library which can be found at http://www.engelschall.com/sw/str/.
  +##  This file is part of OSSP L2, a flexible logging library which
  +##  can be found at http://www.ossp.com/pkg/l2/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  @@ -22,750 +23,31 @@
   ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   ##  SUCH DAMAGE.
  +##  
  +##  l2.pod: Unix manual page
   ##
  -##  str.pod: Unix manual page
  -##
  -
  -#   Parts of this manual page (the str_format description) is:
  -#
  -#   Copyright (c) 1990, 1991, 1993
  -#   The Regents of the University of California.  All rights reserved.
  -#
  -#   This code is derived from software contributed to Berkeley by
  -#   Chris Torek and the American National Standards Committee X3,
  -#   on Information Processing Systems.
  -#
  -#   Redistribution and use in source and binary forms, with or without
  -#   modification, are permitted provided that the following conditions
  -#   are met:
  -#   1. Redistributions of source code must retain the above copyright
  -#      notice, this list of conditions and the following disclaimer.
  -#   2. Redistributions in binary form must reproduce the above copyright
  -#      notice, this list of conditions and the following disclaimer in the
  -#      documentation and/or other materials provided with the distribution.
  -#   3. All advertising materials mentioning features or use of this software
  -#      must display the following acknowledgement:
  -#      This product includes software developed by the University of
  -#      California, Berkeley and its contributors.
  -#   4. Neither the name of the University nor the names of its contributors
  -#      may be used to endorse or promote products derived from this software
  -#      without specific prior written permission.
  -#
  -#   THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  -#   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  -#   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  -#   ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  -#   FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  -#   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  -#   OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  -#   HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  -#   LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  -#   OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  -#   SUCH DAMAGE.
   
   =pod
   
   =head1 NAME
   
  -B<Str> - String Library
  +B<L2> - Logging Library
   
   =head1 VERSION
   
  -Str STR_VERSION_STR
  +L2 L2_VERSION_STR
   
   =head1 SYNOPSIS
   
  -B<str_len>,
  -B<str_copy>,
  -B<str_dup>,
  -B<str_concat>,
  -B<str_splice>,
  -B<str_compare>,
  -B<str_span>,
  -B<str_locate>,
  -B<str_token>,
  -B<str_parse>,
  -B<str_format>,
  -B<str_hash>,
  -B<str_base64>.
  +...
   
   =head1 DESCRIPTION
   
  -The B<Str> library is a generic string library written in ANSI C which
  -provides functions for handling, matching, parsing, searching and
  -formatting of C strings. So it can be considered as a superset of POSIX
  -string(3), but its main intention is to provide a more convinient and
  -compact API plus a more generalized functionality.
  +The B<L2> library is...
   
   =head1 FUNCTIONS
   
   The following functions are provided by the B<Str> API:
  -
  -=over 4
  -
  -=item str_size_t B<str_len>(const char *I<s>);
  -
  -This function determines the length of string I<s>, i.e., the number
  -of characters starting at I<s> that precede the terminating C<NUL>
  -character. It returns C<NULL> if I<s> is C<NULL>.
  -
  -=item char *B<str_copy>(char *I<s>, const char *I<t>, size_t I<n>);
  -
  -This copies the characters in string I<t> into the string I<s>, but never more
  -than I<n> characters (if I<n> is greater than C<0>). The two involved strings
  -can overlap and the characters in I<s> are always C<NUL>-terminated. The
  -string I<s> has to be large enough to hold all characters to be copied.
  -function returns C<NULL> if I<s> or I<t> are C<NULL>. Else it returns the
  -pointer to the written C<NUL>-terminating character in I<s>.
  -
  -=item char *B<str_dup>(const char *I<s>, str_size_t I<n>);
  -
  -This returns a copy of the characters in string I<s>, but never more than I<n>
  -characters if I<n> is greater than C<0>. It returns C<NULL> if I<s> is
  -C<NULL>. The returned string has to be deallocated later with free(3).
  -
  -=item char *B<str_concat>(char *I<s>, ...);
  -
  -This functions concatenates the characters of all string arguments into a new
  -allocated string and returns this new string.  If I<s> is C<NULL> the function
  -returns C<NULL>. Else it returns the pointer to the written final
  -C<NUL>-terminating character in I<s>. The returned string later has to be
  -deallicated with free(3).
  -
  -=item char *B<str_splice>(char *I<s>, str_size_t I<off>, str_size_t I<n>, char *I<t>, str_size_t I<m>);
  -
  -This splices the string I<t> into string I<s>, i.e., the I<n> characters
  -at offset I<off> in I<s> are removed and at their location the string
  -I<t> is inserted (or just the first I<m> characters of I<t> if I<m> is
  -greater than C<0>). It returns C<NULL> if I<s> or I<t> are C<NULL>.
  -Else the string I<s> is returned. The function supports also the
  -situation where I<t> is a sub-string of I<s> as long as the area
  -I<s+off>...I<s+off+n> and I<t>...I<t+m> do not overlap. The caller
  -always has to make sure that enough room exists in I<s>.
  -
  -=item int B<str_compare>(const char *I<s>, const char *I<t>, str_size_t I<n>, int I<mode>);
  -
  -This performs a lexicographical comparison of the two strings I<s>
  -and I<t> (but never compares more than I<n> characters of them)
  -and returns one of three return values: a value lower than C<0> if
  -I<s> is lexicographically lower than I<t>, a vlue of exactly C<0>
  -if I<s> and I<t> are equal and a value greater than C<0> if I<s> is
  -lexicographically higher than I<t>. Per default (I<mode> is C<0>) the
  -comparison is case-sensitive, but if C<STR_NOCASE> is used for I<mode>
  -the comparison is done in a case-insensitive way.
  -
  -=item char *B<str_span>(const char *I<s>, size_t I<n>, const char *I<charset>, int I<mode>);
  -
  -This functions spans a string I<s> according to the characters specified in
  -I<charset>. If I<mode> is C<0>, this means that I<s> is spanned from left to
  -right starting at I<s> (and ending either when reaching the terminating C<NUL>
  -character or already after I<n> spanned characters) as long as the characters
  -of I<s> are contained in I<charset>.
  -
  -Alternatively one can use a I<mode> of C<STR_COMPLEMENT> to indicate that I<s>
  -is spanned as long as the characters of I<s> are I<not> contained in
  -I<charset>, i.e., I<charset> then specifies the complement of the spanning
  -characters.
  -
  -In both cases one can additionally "or" (with the C operator ``C<|>'')
  -C<STR_RIGHT> into I<mode> to indicate that the spanning is done right to
  -left starting at the terminating C<NUL> character of I<s> (and ending
  -either when reaching I<s> or already after I<n> spanned characters).
  -
  -=item char *B<str_locate>(const char *I<s>, str_size_t I<n>, const char *I<t>);
  -
  -This functions searches for the (smaller) string I<t> inside (larger) string
  -I<s>. If I<n> is not C<0>, the search is performed only inside the first I<n>
  -characters of I<s>. 
  -
  -=item char *B<str_token>(char **I<s>, const char *I<delim>, const char *I<quote>, const char *I<comment>, int I<mode>);
  -
  -This function considers the string I<s> to consist of a sequence of
  -zero or more text tokens separated by spans of one or more characters
  -from the separator string I<delim>. However, text between matched pairs
  -of quotemarks (characters in I<quote>) is treated as plain text, never
  -as delimiter (separator) text. Each call of this function returns a
  -pointer to the first character of the first token of I<s>. The token is
  -C<NUL>-terminated, i.e., the string I<s> is processed in a destructive
  -way. If there are quotation marks or escape sequences, the input
  -string is rewritten with quoted sections and escape sequences properly
  -interpreted.
  -
  -This function keeps track of its parsing position in the string between
  -separate calls by simply adjusting the callers I<s> pointer, so that
  -subsequent calls with the same pointer variable I<s> will start
  -processing from the position immediately after the last returned token.
  -In this way subsequent calls will work through the string I<s> until no
  -tokens remain. When no token remains in I<s>, C<NULL> is returned. The
  -string of token separators (I<delim>) and the string of quote characters
  -(I<quote>) may be changed from call to call.
  -
  -If a character in the string I<s> is not quoted or escaped, and is in the
  -I<comment> set, then it is overwritten with a C<NUL> character and the rest of
  -the string is ignored. The characters to be used as quote characters are
  -specified in the I<quote> set, and must be used in balanced pairs. If there
  -is more than one flavor of quote character, one kind of quote character may be
  -used to quote another kind. If an unbalanced quote is found, the function
  -silently act as if one had been placed at the end of the input string.  The
  -I<delim> and I<quote> strings must be disjoint, i.e., they have to share
  -no characters. 
  -
  -The I<mode> argument can be used to modify the processing of the string
  -(default for I<mode> is C<0>): C<STR_STRIPQUOTES> forces I<quote>
  -characters to be stripped from quoted tokens; C<STR_BACKSLASHESC>
  -enables the interpretation (and expansion) of backslash escape sequences
  -(`B<\x>') through ANSI-C rules; C<STR_SKIPDELIMS> forces that after the
  -terminating C<NUL> is written and the token returned, further delimiters
  -are skipped (this allows one to make sure that the delimiters for
  -one word don't become part of the next word if one change delimiters
  -between calls); and C<STR_TRIGRAPHS> enables the recognition and
  -expansion of ANSI C Trigraph sequences (as a side effect this enables
  -C<STR_BACKSLASHESC>, too).
  -
  -=item int B<str_parse>(const char *I<s>, const char *I<pop>, ...);
  -
  -This parses the string I<s> according to the parsing operation specified
  -by I<pop>. If the parsing operation succeeds, C<TRUE> is returned. Else
  -C<FALSE> is returned.
  -
  -The I<pop> string usually has one of the following two syntax variants:
  -`B<m> I<delim> I<regex> I<delim> I<flags>*' (for matching operations)
  -and `B<s> I<delim> I<regex> I<delim> I<subst> I<delim> I<flags>*' (for
  -substitution operations). For more details about the syntax variants
  -and semantic of the I<pop> argument see section B<GORY DETAILS, Parsing
  -Specification> below. The syntax of the I<regex> part in I<pop> is
  -mostly equivalent to Perl 5's regular expression syntax. For the
  -complete and gory details see perlre(1). A brief summary you can find
  -under section B<GORY DETAILS, Perl Regular Expressions> below.
  -
  -=item int B<str_format>(char *I<s>, str_size_t I<n>, const char *I<fmt>, ...);
  -
  -This formats a new string according to I<fmt> and optionally following
  -arguments and writes it into the string I<s>, but never more than I<n>
  -characters at all. It returns the number of written characters.  If I<s> is
  -C<NULL> it just calculates the number of characters which would be written.
  -
  -The function generates the output string under the control of the I<fmt>
  -format string that specifies how subsequent arguments (or arguments accessed
  -via the variable-length argument facilities of stdarg(3)) are converted for
  -output.
  -
  -The format string I<fmt> is composed of zero or more directives:
  -ordinary characters (not B<%>), which are copied unchanged to the output
  -stream; and conversion specifications, each of which results in fetching
  -zero or more subsequent arguments. Each conversion specification is
  -introduced by the character B<%>. The arguments must correspond properly
  -(after type promotion) with the conversion specifier. Which conversion
  -specifications are supported are described in detail under B<GORY
  -DETAILS, Format Specification> below.
  -
  -=item unsigned long B<str_hash>(const char *I<s>, str_size_t I<n>, int I<mode>);
  -
  -This function calculates a hash value of string I<s> (or of its first I<n>
  -characters if I<n> is equal to C<0>). The following hashing functions
  -are supported and can be selected with I<mode>: STR_HASH_DJBX33 (Daniel
  -J. Berstein, Times 33 Hash with Addition), STR_HASH_BJDDJ (Bob
  -Jenkins, Dr. Dobbs Journal), and STR_HASH_MACRC32 (Mark Adler, Cyclic
  -Redundancy Check with 32-Bit). This function is intended for fast use
  -in hashing algorithms and I<not> for use as cryptographically strong
  -message digests.
  -
  -=item int B<str_base64>(char *I<s>, str_size_t I<n>, unsigned char *I<ucp>, str_size_t I<ucn>, int I<mode>);
  -
  -This function Base64 encodes I<ucn> bytes starting at I<ucp> and writes
  -the resulting string into I<s> (but never more than I<n> characters are
  -written). The I<mode> for this operation has to be C<STR_BASE64_ENCODE>.
  -Additionally one can OR the value C<STR_BASE64_STRICT> to enable strict
  -encoding where after every 72th output character a newline character is
  -inserted. The function returns the number of output characters written.
  -If I<s> is C<NULL> the function just calculates the number of required
  -output characters.
  -
  -Alternatively, if I<mode> is C<STR_BASE64_DECODE> the string I<s> (or
  -the first I<n> characters only if I<n> is not C<0>) is decoded and the
  -output bytes written at I<ucp>. Again, if I<ucp> is C<NULL> only the
  -number of required output bytes are calculated.
  -
  -=back
  -
  -=head1 GORY DETAILS
  -
  -In this part of the documentation more complex topics are documented in
  -detail.
  -
  -=head2 Perl Regular Expressions
  -
  -The regular expressions used in B<Str> are more or less Perl compatible
  -(they are provided by a stripped down and built-in version of the
  -I<PCRE> library). So the syntax description in perlre(1) applies
  -and don't has to be repeated here again. For a deeper understanding
  -and details you should have a look at the book `I<Mastering Regular
  -Expressions>' (see also the perlbook(1) manpage) by I<Jeffrey Friedl>.
  -For convinience reasons we give you only a brief summary of Perl
  -compatible regular expressions:
  -
  -The following metacharacters have their standard egrep(1) meanings:
  -
  -  \      Quote the next metacharacter
  -  ^      Match the beginning of the line
  -  .      Match any character (except newline)
  -  $      Match the end of the line (or before newline at the end)
  -  |      Alternation
  -  ()     Grouping
  -  []     Character class
  -
  -The following standard quantifiers are recognized:
  -
  -  *      Match 0 or more times (greedy)
  -  *?     Match 0 or more times (non greedy)
  -  +      Match 1 or more times (greedy)
  -  +?     Match 1 or more times (non greedy)
  -  ?      Match 1 or 0 times (greedy)
  -  ??     Match 1 or 0 times (non greedy)
  -  {n}    Match exactly n times (greedy)
  -  {n}?   Match exactly n times (non greedy)
  -  {n,}   Match at least n times (greedy)
  -  {n,}?  Match at least n times (non greedy)
  -  {n,m}  Match at least n but not more than m times (greedy)
  -  {n,m}? Match at least n but not more than m times (non greedy)
  -
  -The following backslash sequences are recognized:
  -
  -  \t     Tab                   (HT, TAB)
  -  \n     Newline               (LF, NL)
  -  \r     Return                (CR)
  -  \f     Form feed             (FF)
  -  \a     Alarm (bell)          (BEL)
  -  \e     Escape (think troff)  (ESC)
  -  \033   Octal char
  -  \x1B   Hex char
  -  \c[    Control char
  -  \l     Lowercase next char
  -  \u     Uppercase next char
  -  \L     Lowercase till \E
  -  \U     Uppercase till \E
  -  \E     End case modification
  -  \Q     Quote (disable) pattern metacharacters till \E
  -
  -The following non zero-width assertions are recognized:
  -
  -  \w     Match a "word" character (alphanumeric plus "_")
  -  \W     Match a non-word character
  -  \s     Match a whitespace character
  -  \S     Match a non-whitespace character
  -  \d     Match a digit character
  -  \D     Match a non-digit character
  -
  -The following zero-width assertions are recognized:
  -
  -  \b     Match a word boundary
  -  \B     Match a non-(word boundary)
  -  \A     Match only at beginning of string
  -  \Z     Match only at end of string, or before newline at the end
  -  \z     Match only at end of string
  -  \G     Match only where previous m//g left off (works only with /g)
  -
  -The following regular expression extensions are recognized:
  -
  -  (?#text)              An embedded comment
  -  (?:pattern)           This is for clustering, not capturing (simple)
  -  (?imsx-imsx:pattern)  This is for clustering, not capturing (full)
  -  (?=pattern)           A zero-width positive lookahead assertion
  -  (?!pattern)           A zero-width negative lookahead assertion
  -  (?<=pattern)          A zero-width positive lookbehind assertion
  -  (?<!pattern)          A zero-width negative lookbehind assertion
  -  (?>pattern)           An "independent" subexpression
  -  (?(cond)yes-re)       Conditional expression (simple)
  -  (?(cond)yes-re|no-re) Conditional expression (full)
  -  (?imsx-imsx)          One or more embedded pattern-match modifiers
  -
  -=head2 Parsing Specification
  -
  -The B<str_parse>(const char *I<s>, const char *I<pop>, ...) function
  -is a very flexible but complex one. The argument I<s> is the string on
  -which the parsing operation specified by argument I<pop> is applied.
  -The parsing semantics are highly influenced by Perl's `B<=~>' matching
  -operator, because one of the main goals of str_parse(3) is to allow one
  -to rewrite typical Perl matching constructs into C.
  -
  -Now to the gory details. In general, the I<pop> argument of str_parse(3)
  -has one of the following two syntax variants:
  -
  -=over 4
  -
  -=item B<Matching:> `B<m> I<delim> I<regex> I<delim> I<flags>*': 
  -
  -This matches I<s> against the Perl-style regular expression I<regex>
  -under the control of zero or more I<flags> which control the parsing
  -semantics. The stripped down I<pop> syntax `I<regex>' is equivalent to
  -`B<m/>I<regex>B</>'. 
  -
  -For each grouping pair of parenthesis in I<regex>, the text in I<s>
  -which was grouped by the parenthesis is extracted into new strings.
  -These per default are allocated as seperate strings and returned to the
  -caller through following `B<char **>' arguments. The caller is required
  -to free(3) them later.
  -
  -=item B<Substitution:> `B<s> I<delim> I<regex> I<delim> I<subst> I<delim> I<flags>*': 
  -
  -This matches I<s> against the Perl-style regular expression I<regex>
  -under the control of zero or more I<flags> which control the parsing
  -semantics. As a result of the operation, a new string formed which
  -consists of I<s> but with the part which matched I<regex> replaced by
  -I<subst>. The result string is returned to the caller through a `B<char
  -**>' argument. The caller is required to free(3) this later.
  -
  -For each grouping pair of parenthesis in I<regex>, the text in I<s>
  -which was grouped by the parenthesis is extracted into new strings
  -and can be referenced for expansion via `B<$n>' (n=1,..) in I<subst>.
  -Additionally any str_format(3) style `B<%>' constructs in I<subst> are
  -expanded through additional caller supplied arguments.
  -
  -=back
  -
  -The following I<flags> are supported:
  -
  -=over 4
  -
  -=item B<b>
  -
  -If the I<bundle> flag `B<b>' is specified, the extracted strings are
  -bundled together into a single chunk of memory and its address is
  -returned to the caller with a additional `B<char **>' argument which has
  -to preceed the regular string arguments. The caller then has to free(3)
  -only this chunk of memory in order to free all extracted strings at
  -once.
  -
  -=item B<i>
  -
  -If the case-I<insensitive> flag `B<i>' is specified, I<regex>
  -is matched in case-insensitive way.
  -
  -=item B<o>
  -
  -If the I<once> flag `B<o>' is specified, this indicates to the B<Str>
  -library that the whole I<pop> string is constant and that its internal
  -pre-processing (it is compiled into a deterministic finite automaton
  -(DFA) internally) has to be done only once (the B<Str> library then
  -caches the DFA which corresponds to the I<pop> argument).
  -
  -=item B<x>
  -
  -If the I<extended> flag `B<x>' is specified, the I<regex>'s legibility
  -is extended by permitting embedded whitespace and comments to allow one
  -to write down complex regular expressions more cleary and even in a
  -documented way.
  -
  -=item B<m>
  -
  -If the I<multiple> lines flag `B<m>' is specified, the string I<s> is
  -treated as multiple lines. That is, this changes the regular expression
  -meta characters `B<^>' and `B<$>' from matching at only the very start
  -or end of the string I<s> to the start or end of any line anywhere
  -within the string I<s>.
  -
  -=item B<s>
  -
  -If the I<single> line flag `B<s>' is specified, the string I<s> is
  -treated as single line. That is, this changes the regular expression
  -meta character `B<.>' to match any character whatsoever, even a newline,
  -which it normally would not match.
  -
  -=back
  -
  -
  -=head1 CONVERSION SPECIFICATION
  -
  -In the format string of str_format(3) each conversion specification is
  -introduced by the character B<%>. After the B<%>, the following appear
  -in sequence:
  -
  -=over 4
  -
  -=item o
  -
  -An optional field, consisting of a decimal digit string followed by a B<$>,
  -specifying the next argument to access.  If this field is not provided, the
  -argument following the last argument accessed will be used.  Arguments are
  -numbered starting at B<1>. If unaccessed arguments in the format string are
  -interspersed with ones that are accessed the results will be indeterminate.
  -
  -=item o
  -
  -Zero or more of the following flags:
  -
  -A B<#> character specifying that the value should be converted to an
  -``alternate form''.  For B<c>, B<d>, B<i>, B<n>, B<p>, B<s>, and B<u>,
  -conversions, this option has no effect.  For B<o> conversions, the precision
  -of the number is increased to force the first character of the output string
  -to a zero (except if a zero value is printed with an explicit precision of
  -zero).  For B<x> and B<X> conversions, a non-zero result has the string B<0x>
  -(or B<0X> for B<X> conversions) prepended to it.  For B<e>, B<E>, B<f>, B<g>,
  -and B<G>, conversions, the result will always contain a decimal point, even if
  -no digits follow it (normally, a decimal point appears in the results of those
  -conversions only if a digit follows).  For B<g> and B<G> conversions, trailing
  -zeros are not removed from the result as they would otherwise be.
  -
  -A zero `B<0>' character specifying zero padding.  For all conversions except
  -B<n>, the converted value is padded on the left with zeros rather than blanks.
  -If a precision is given with a numeric conversion (B<d>, B<i>, B<o>, B<u>,
  -B<i>, B<x>, and B<X>), the `B<0>' flag is ignored.
  -
  -A negative field width flag `B<->' indicates the converted value is to be left
  -adjusted on the field boundary.  Except for B<n> conversions, the converted
  -value is padded on the right with blanks, rather than on the left with blanks
  -or zeros.  A `B<->' overrides a `B<0>' if both are given.
  -
  -A space, specifying that a blank should be left before a positive number
  -produced by a signed conversion (B<d>, B<e>, B<E>, B<f>, B<g>, B<G>, or B<i>).
  -
  -A `B<+>' character specifying that a sign always be placed before a number
  -produced by a signed conversion.  A `B<+>' overrides a space if both are used.
  -
  -=item o
  -
  -An optional decimal digit string specifying a minimum field width.
  -If the converted value has fewer characters than the field width, it will
  -be padded with spaces on the left (or right, if the left-adjustment
  -flag has been given) to fill out
  -the field width.
  -
  -=item o
  -
  -An optional precision, in the form of a period `B<.>' followed by an
  -optional digit string. If the digit string is omitted, the precision is
  -taken as zero. This gives the minimum number of digits to appear for
  -B<d>, B<i>, B<o>, B<u>, B<x>, and B<X> conversions, the number of digits
  -to appear after the decimal-point for B<e>, B<E>, and B<f> conversions,
  -the maximum number of significant digits for B<g> and B<G> conversions,
  -or the maximum number of characters to be printed from a string for B<s>
  -conversions.
  -
  -=item o
  -
  -The optional character B<h>, specifying that a following B<d>, B<i>, B<o>,
  -B<u>, B<x>, or B<X> conversion corresponds to a `C<short int>' or `C<unsigned
  -short int>' argument, or that a following B<n> conversion corresponds to a
  -pointer to a `C<short int> argument.
  -
  -=item o
  -
  -The optional character B<l> (ell) specifying that a following B<d>, B<i>,
  -B<o>, B<u>, B<x>, or B<X> conversion applies to a pointer to a `C<long int>'
  -or `C<unsigned long int>' argument, or that a following B<n> conversion
  -corresponds to a pointer to a `C<long int> argument.
  -
  -=item o
  -
  -The optional character B<q>, specifying that a following B<d>, B<i>, B<o>,
  -B<u>, B<x>, or B<X> conversion corresponds to a `C<quad int>' or `C<unsigned
  -quad int>' argument, or that a following B<n> conversion corresponds to a
  -pointer to a `C<quad int>' argument.
  -
  -=item o
  -
  -The character B<L> specifying that a following B<e>, B<E>, B<f>, B<g>, or B<G>
  -conversion corresponds to a `C<long double>' argument.
  -
  -=item o
  -
  -A character that specifies the type of conversion to be applied.
  -
  -=back
  -
  -A field width or precision, or both, may be indicated by an asterisk `B<*>' or
  -an asterisk followed by one or more decimal digits and a `B<$>' instead of a
  -digit string.  In this case, an `C<int>' argument supplies the field width or
  -precision.  A negative field width is treated as a left adjustment flag
  -followed by a positive field width; a negative precision is treated as though
  -it were missing.  If a single format directive mixes positional (`B<nn$>') and
  -non-positional arguments, the results are undefined.
  -
  -The conversion specifiers and their meanings are:
  -
  -=over 4
  -
  -=item B<diouxX>
  -
  -The `C<int>' (or appropriate variant) argument is converted to signed decimal
  -(B<d> and B<i>), unsigned octal (B<o>), unsigned decimal (B<u>), or unsigned
  -hexadecimal (B<x> and B<X>) notation.  The letters B<abcdef> are used for B<x>
  -conversions; the letters B<ABCDEF> are used for B<X> conversions.  The
  -precision, if any, gives the minimum number of digits that must appear; if the
  -converted value requires fewer digits, it is padded on the left with zeros.
  -
  -=item B<DOU>
  -
  -The `C<long int> argument is converted to signed decimal, unsigned octal, or
  -unsigned decimal, as if the format had been B<ld>, B<lo>, or B<lu>
  -respectively.  These conversion characters are deprecated, and will eventually
  -disappear.
  -
  -=item B<eE>
  -
  -The `C<double>' argument is rounded and converted in the style
  -`[-]d.dddB<e>+-dd' where there is one digit before the decimal-point character
  -and the number of digits after it is equal to the precision; if the precision
  -is missing, it is taken as 6; if the precision is zero, no decimal-point
  -character appears.  An B<E> conversion uses the letter B<E> (rather than B<e>)
  -to introduce the exponent.  The exponent always contains at least two digits;
  -if the value is zero, the exponent is 00.
  -
  -=item B<f>
  -
  -The `C<double>' argument is rounded and converted to decimal notation in the
  -style `[-]ddd.ddd>' where the number of digits after the decimal-point
  -character is equal to the precision specification.  If the precision is
  -missing, it is taken as 6; if the precision is explicitly zero, no
  -decimal-point character appears.  If a decimal point appears, at least one
  -digit appears before it.
  -
  -=item B<g>
  -
  -The `C<double>' argument is converted in style B<f> or B<e> (or B<E> for B<G>
  -conversions).  The precision specifies the number of significant digits.  If
  -the precision is missing, 6 digits are given; if the precision is zero, it is
  -treated as 1.  Style B<e> is used if the exponent from its conversion is less
  -than -4 or greater than or equal to the precision.  Trailing zeros are removed
  -from the fractional part of the result; a decimal point appears only if it is
  -followed by at least one digit.
  -
  -=item B<c>
  -
  -The `C<int>' argument is converted to an `C<unsigned char>, and the resulting
  -character is written.
  -
  -=item B<s>
  -
  -The `C<char *>' argument is expected to be a pointer to an array of character
  -type (pointer to a string).  Characters from the array are written up to (but
  -not including) a terminating C<NUL> character; if a precision is specified, no
  -more than the number specified are written.  If a precision is given, no null
  -character need be present; if the precision is not specified, or is greater
  -than the size of the array, the array must contain a terminating C<NUL>
  -character.
  -
  -=item B<p>
  -
  -The `C<void *> pointer argument is printed in hexadecimal (as if by `B<%#x>'
  -or `C<%#lx>).
  -
  -=item B<n>
  -
  -The number of characters written so far is stored into the integer indicated
  -by the `C<int *>' (or variant) pointer argument.  No argument is converted.
  -
  -=item B<%>
  -
  -A `B<%>' is written. No argument is converted. The complete conversion
  -specification is `B<%%>.
  -
  -=back
  -
  -In no case does a non-existent or small field width cause truncation of a
  -field; if the result of a conversion is wider than the field width, the field
  -is expanded to contain the conversion result.
  -
  -=head1 EXAMPLES
  -
  -In the following a few snippets of selected use cases of B<Str> are
  -presented:
  -
  -=over 4
  -
  -=item B<Splice a String into Another>
  -
  - char *v1 = "foo bar quux";
  - char *v2 = "baz";
  - str_splice(v1, 3, 5, v2, 0):
  - /* now we have v1 = "foobazquux" */
  - ....
  -
  -=item B<Tokenize a String>
  -
  - char *var = " foo \t " bar 'baz'" q'uu'x #comment";
  - char *tok, *p;
  - p = var; 
  - while ((tok = str_token(p, ":", "\"'", "#", 0)) != NULL) {
  -     /* here we enter three times: 
  -        1. tok = "foo"
  -        2. tok = " bar 'baz'" 
  -        3. tok = "quux" */ 
  -     ...
  - }
  -
  -=item B<Match a String>
  -
  - char *var = "foo:bar";
  - if (str_parse(var, "^.+?:.+$/)) {
  -     /* var matched */
  -     ...
  - }
  -
  -=item B<Match a String and Go Ahead with Details>
  -
  - char *var = "foo:bar";
  - char *cp, *v1, *v2;
  - if (str_parse(var, "m/^(.+?):(.+)$/b", &cp, &v1, &v2)) {
  -     ...
  -     /* now we have: 
  -        cp = "foo\0bar\0" and v1 and v2 pointing
  -        into it, i.e., v1 = "foo", v2 = "bar" */
  -     ...
  -     free(cp);
  - }
  -
  -=item B<Substitute Text in a String>
  -
  - char *var = "foo:bar";
  - char *subst = "quux";
  - char *new;
  - str_parse(var, "s/^(.+?):(.+)$/$1-%s-$2/", &new, subst);
  - ...
  - /* now we have: var = "foo:bar", new = "foo:quux:bar" */
  - ...
  - free(new);
  -
  -=item B<Format a String>
  -
  - char *v0 = "abc..."; /* length not guessable */
  - char *v1 = "foo";
  - void *v2 = 0xDEAD;
  - int v3 = 42;
  - char *cp;
  - int n;
  -
  - n = str_format(NULL, 0, "%s|%5s-%x-%04d", v0, v1, v2, v3); 
  - cp = malloc(n);
  - str_format(cp, n, "%s-%x-%04d", v1, v2, v3); 
  - /* now we have cp = "abc...|  foo-DEAD-0042" */
  - ...
  - free(cp);
  -
  -=back
  -
  -=head1 SEE ALSO
  -
  -string(3), printf(3), perlre(1).
  -
  -=head1 HISTORY
  -
  -The B<Str> library was written in November and December 1999 by Ralf
  -S. Engelschall. As building blocks various existing code was used and
  -recycled: for the str_token(3) implementation an anchient strtok(3)
  -flavor from William Deich 1991 was cleaned up and adjusted. As the
  -background parsing engine for str_parse(3) a heavily stripped down
  -version of Philip Hazel's PCRE 2.08 library was used. The str_format(3)
  -implementation was based on Panos Tsirigotis' sprintf(3) code as
  -adjusted by the Apache Software Foundation 1998. The formatting engine
  -was stripped down and enhanced to support internal extensions which were
  -required by str_format(3) and str_parse(3).
  -
  -=head1 AUTHOR
  -
  - Ralf S. Engelschall
  - rse@engelschall.com
  - www.engelschall.com
   
   =cut
   

From ossp-cvs-owner@ossp.org  Thu May 10 22:01:11 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f4AK1A250453; Thu, 10 May 2001 22:01:10 +0200 (CEST)
Date: Thu, 10 May 2001 22:01:10 +0200 (CEST)
Message-Id: <200105102001.f4AK1A250453@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 .cvsignore
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   10-May-2001 22:01:10
  Branch: HEAD                             Handle: 2001051021011000

  Added files:
    ossp-pkg/l2             .cvsignore

  Log:
    add .cvsignore

  Summary:
    Revision    Changes     Path
    1.1         +7  -0      ossp-pkg/l2/.cvsignore
  ____________________________________________________________________________

  Index: ossp-pkg/l2/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  config.status
  config.log
  config.cache
  Makefile
  l2_config.h
  l2-config
  l2_test

From ossp-cvs-owner@ossp.org  Fri May 11 19:07:55 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f4BH7rJ72464; Fri, 11 May 2001 19:07:53 +0200 (CEST)
Date: Fri, 11 May 2001 19:07:53 +0200 (CEST)
Message-Id: <200105111707.f4BH7rJ72464@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.h l2_ch_buffer.c l2_ch_fd.c l2_ch_file.c l2...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   11-May-2001 19:07:53
  Branch: HEAD                             Handle: 2001051118075200

  Modified files:
    ossp-pkg/l2             l2.h l2_ch_buffer.c l2_ch_fd.c l2_ch_file.c
                            l2_ch_filter.c l2_ch_null.c l2_ch_pipe.c
                            l2_ch_prefix.c l2_ch_socket.c l2_ch_syslog.c

  Log:
    Fill in channel handler template code.

  Summary:
    Revision    Changes     Path
    1.2         +13 -0      ossp-pkg/l2/l2.h
    1.2         +46 -0      ossp-pkg/l2/l2_ch_buffer.c
    1.2         +46 -0      ossp-pkg/l2/l2_ch_fd.c
    1.2         +68 -13     ossp-pkg/l2/l2_ch_file.c
    1.2         +46 -0      ossp-pkg/l2/l2_ch_filter.c
    1.2         +46 -0      ossp-pkg/l2/l2_ch_null.c
    1.2         +46 -0      ossp-pkg/l2/l2_ch_pipe.c
    1.2         +46 -0      ossp-pkg/l2/l2_ch_prefix.c
    1.2         +46 -0      ossp-pkg/l2/l2_ch_socket.c
    1.2         +46 -0      ossp-pkg/l2/l2_ch_syslog.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2.h
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 l2.h
  --- ossp-pkg/l2/l2.h	2001/05/10 19:46:01	1.1.1.1
  +++ ossp-pkg/l2/l2.h	2001/05/11 17:07:52	1.2
  @@ -95,6 +95,19 @@
       va_list       ap
   );
   
  +/* list of shipped (output) channel handlers */
  +extern l2_handler_t l2_handler_null;
  +extern l2_handler_t l2_handler_fd;
  +extern l2_handler_t l2_handler_file;
  +extern l2_handler_t l2_handler_pipe;
  +extern l2_handler_t l2_handler_socket;
  +extern l2_handler_t l2_handler_syslog;
  +
  +/* list of shipped (filter) channel handlers */
  +extern l2_handler_t l2_handler_filter;
  +extern l2_handler_t l2_handler_prefix;
  +extern l2_handler_t l2_handler_buffer;
  +
   /* channel operations */
   l2_channel_t *l2_channel_create   (l2_handler_t *h);
   l2_channel_t *l2_channel_stack    (l2_channel_t *ch1, l2_channel_t *ch2);
  Index: ossp-pkg/l2/l2_ch_buffer.c
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 l2_ch_buffer.c
  --- ossp-pkg/l2/l2_ch_buffer.c	2001/05/10 19:46:01	1.1.1.1
  +++ ossp-pkg/l2/l2_ch_buffer.c	2001/05/11 17:07:52	1.2
  @@ -30,3 +30,49 @@
   #include "l2.h"
   #include "l2_p.h"
   
  +static int hook_create(l2_context_t *ctx)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_configure(l2_context_t *ctx, const char *fmt, va_list ap)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_open(l2_context_t *ctx, l2_channel_t *below)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_write(l2_context_t *ctx, l2_channel_t *below, 
  +                      const char *buf, size_t buf_size)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_flush(l2_context_t *ctx, l2_channel_t *below)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_close(l2_context_t *ctx, l2_channel_t *below)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_destroy(l2_context_t *ctx)
  +{
  +    return L2_OK;
  +}
  +
  +l2_handler_t l2_handler_buffer = {
  +    hook_create,
  +    hook_configure,
  +    hook_open,
  +    hook_write,
  +    hook_flush,
  +    hook_close,
  +    hook_destroy
  +};
  +
  Index: ossp-pkg/l2/l2_ch_fd.c
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 l2_ch_fd.c
  --- ossp-pkg/l2/l2_ch_fd.c	2001/05/10 19:46:01	1.1.1.1
  +++ ossp-pkg/l2/l2_ch_fd.c	2001/05/11 17:07:52	1.2
  @@ -30,3 +30,49 @@
   #include "l2.h"
   #include "l2_p.h"
   
  +static int hook_create(l2_context_t *ctx)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_configure(l2_context_t *ctx, const char *fmt, va_list ap)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_open(l2_context_t *ctx, l2_channel_t *below)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_write(l2_context_t *ctx, l2_channel_t *below, 
  +                      const char *buf, size_t buf_size)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_flush(l2_context_t *ctx, l2_channel_t *below)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_close(l2_context_t *ctx, l2_channel_t *below)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_destroy(l2_context_t *ctx)
  +{
  +    return L2_OK;
  +}
  +
  +l2_handler_t l2_handler_fd = {
  +    hook_create,
  +    hook_configure,
  +    hook_open,
  +    hook_write,
  +    hook_flush,
  +    hook_close,
  +    hook_destroy
  +};
  +
  Index: ossp-pkg/l2/l2_ch_file.c
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 l2_ch_file.c
  --- ossp-pkg/l2/l2_ch_file.c	2001/05/10 19:46:01	1.1.1.1
  +++ ossp-pkg/l2/l2_ch_file.c	2001/05/11 17:07:52	1.2
  @@ -1,23 +1,78 @@
  +/*
  +**  L2 - OSSP Logging Library
  +**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**
  +**  This file is part of OSSP L2, a flexible logging library which
  +**  can be found at http://www.ossp.com/pkg/l2/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  l2_ch_file.c: file channel implementation
  +*/
   
   #include "l2.h"
   #include "l2_p.h"
   
  -#if 0
  +static int hook_create(l2_context_t *ctx)
  +{
  +    return L2_OK;
  +}
   
  -int l2_file_create(l2_channel_t *ch)
  +static int hook_configure(l2_context_t *ctx, const char *fmt, va_list ap)
   {
  -    return;
  +    return L2_OK;
   }
   
  -l2_handler_t l2_handler_file {
  -    l2_file_create,
  -    l2_file_configure,
  -    l2_file_open,
  -    l2_file_write,
  -    l2_file_flush,
  -    l2_file_close,
  -    l2_file_destroy
  -};
  +static int hook_open(l2_context_t *ctx, l2_channel_t *below)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_write(l2_context_t *ctx, l2_channel_t *below, 
  +                      const char *buf, size_t buf_size)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_flush(l2_context_t *ctx, l2_channel_t *below)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_close(l2_context_t *ctx, l2_channel_t *below)
  +{
  +    return L2_OK;
  +}
   
  -#endif
  +static int hook_destroy(l2_context_t *ctx)
  +{
  +    return L2_OK;
  +}
  +
  +l2_handler_t l2_handler_file = {
  +    hook_create,
  +    hook_configure,
  +    hook_open,
  +    hook_write,
  +    hook_flush,
  +    hook_close,
  +    hook_destroy
  +};
   
  Index: ossp-pkg/l2/l2_ch_filter.c
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 l2_ch_filter.c
  --- ossp-pkg/l2/l2_ch_filter.c	2001/05/10 19:46:01	1.1.1.1
  +++ ossp-pkg/l2/l2_ch_filter.c	2001/05/11 17:07:52	1.2
  @@ -30,3 +30,49 @@
   #include "l2.h"
   #include "l2_p.h"
   
  +static int hook_create(l2_context_t *ctx)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_configure(l2_context_t *ctx, const char *fmt, va_list ap)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_open(l2_context_t *ctx, l2_channel_t *below)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_write(l2_context_t *ctx, l2_channel_t *below, 
  +                      const char *buf, size_t buf_size)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_flush(l2_context_t *ctx, l2_channel_t *below)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_close(l2_context_t *ctx, l2_channel_t *below)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_destroy(l2_context_t *ctx)
  +{
  +    return L2_OK;
  +}
  +
  +l2_handler_t l2_handler_filter = {
  +    hook_create,
  +    hook_configure,
  +    hook_open,
  +    hook_write,
  +    hook_flush,
  +    hook_close,
  +    hook_destroy
  +};
  +
  Index: ossp-pkg/l2/l2_ch_null.c
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 l2_ch_null.c
  --- ossp-pkg/l2/l2_ch_null.c	2001/05/10 19:46:01	1.1.1.1
  +++ ossp-pkg/l2/l2_ch_null.c	2001/05/11 17:07:52	1.2
  @@ -30,3 +30,49 @@
   #include "l2.h"
   #include "l2_p.h"
   
  +static int hook_create(l2_context_t *ctx)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_configure(l2_context_t *ctx, const char *fmt, va_list ap)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_open(l2_context_t *ctx, l2_channel_t *below)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_write(l2_context_t *ctx, l2_channel_t *below, 
  +                      const char *buf, size_t buf_size)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_flush(l2_context_t *ctx, l2_channel_t *below)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_close(l2_context_t *ctx, l2_channel_t *below)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_destroy(l2_context_t *ctx)
  +{
  +    return L2_OK;
  +}
  +
  +l2_handler_t l2_handler_null = {
  +    hook_create,
  +    hook_configure,
  +    hook_open,
  +    hook_write,
  +    hook_flush,
  +    hook_close,
  +    hook_destroy
  +};
  +
  Index: ossp-pkg/l2/l2_ch_pipe.c
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 l2_ch_pipe.c
  --- ossp-pkg/l2/l2_ch_pipe.c	2001/05/10 19:46:01	1.1.1.1
  +++ ossp-pkg/l2/l2_ch_pipe.c	2001/05/11 17:07:52	1.2
  @@ -30,3 +30,49 @@
   #include "l2.h"
   #include "l2_p.h"
   
  +static int hook_create(l2_context_t *ctx)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_configure(l2_context_t *ctx, const char *fmt, va_list ap)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_open(l2_context_t *ctx, l2_channel_t *below)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_write(l2_context_t *ctx, l2_channel_t *below, 
  +                      const char *buf, size_t buf_size)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_flush(l2_context_t *ctx, l2_channel_t *below)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_close(l2_context_t *ctx, l2_channel_t *below)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_destroy(l2_context_t *ctx)
  +{
  +    return L2_OK;
  +}
  +
  +l2_handler_t l2_handler_pipe = {
  +    hook_create,
  +    hook_configure,
  +    hook_open,
  +    hook_write,
  +    hook_flush,
  +    hook_close,
  +    hook_destroy
  +};
  +
  Index: ossp-pkg/l2/l2_ch_prefix.c
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 l2_ch_prefix.c
  --- ossp-pkg/l2/l2_ch_prefix.c	2001/05/10 19:46:01	1.1.1.1
  +++ ossp-pkg/l2/l2_ch_prefix.c	2001/05/11 17:07:52	1.2
  @@ -30,3 +30,49 @@
   #include "l2.h"
   #include "l2_p.h"
   
  +static int hook_create(l2_context_t *ctx)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_configure(l2_context_t *ctx, const char *fmt, va_list ap)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_open(l2_context_t *ctx, l2_channel_t *below)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_write(l2_context_t *ctx, l2_channel_t *below, 
  +                      const char *buf, size_t buf_size)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_flush(l2_context_t *ctx, l2_channel_t *below)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_close(l2_context_t *ctx, l2_channel_t *below)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_destroy(l2_context_t *ctx)
  +{
  +    return L2_OK;
  +}
  +
  +l2_handler_t l2_handler_prefix = {
  +    hook_create,
  +    hook_configure,
  +    hook_open,
  +    hook_write,
  +    hook_flush,
  +    hook_close,
  +    hook_destroy
  +};
  +
  Index: ossp-pkg/l2/l2_ch_socket.c
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 l2_ch_socket.c
  --- ossp-pkg/l2/l2_ch_socket.c	2001/05/10 19:46:01	1.1.1.1
  +++ ossp-pkg/l2/l2_ch_socket.c	2001/05/11 17:07:52	1.2
  @@ -30,3 +30,49 @@
   #include "l2.h"
   #include "l2_p.h"
   
  +static int hook_create(l2_context_t *ctx)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_configure(l2_context_t *ctx, const char *fmt, va_list ap)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_open(l2_context_t *ctx, l2_channel_t *below)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_write(l2_context_t *ctx, l2_channel_t *below, 
  +                      const char *buf, size_t buf_size)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_flush(l2_context_t *ctx, l2_channel_t *below)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_close(l2_context_t *ctx, l2_channel_t *below)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_destroy(l2_context_t *ctx)
  +{
  +    return L2_OK;
  +}
  +
  +l2_handler_t l2_handler_socket = {
  +    hook_create,
  +    hook_configure,
  +    hook_open,
  +    hook_write,
  +    hook_flush,
  +    hook_close,
  +    hook_destroy
  +};
  +
  Index: ossp-pkg/l2/l2_ch_syslog.c
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 l2_ch_syslog.c
  --- ossp-pkg/l2/l2_ch_syslog.c	2001/05/10 19:46:01	1.1.1.1
  +++ ossp-pkg/l2/l2_ch_syslog.c	2001/05/11 17:07:52	1.2
  @@ -30,3 +30,49 @@
   #include "l2.h"
   #include "l2_p.h"
   
  +static int hook_create(l2_context_t *ctx)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_configure(l2_context_t *ctx, const char *fmt, va_list ap)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_open(l2_context_t *ctx, l2_channel_t *below)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_write(l2_context_t *ctx, l2_channel_t *below, 
  +                      const char *buf, size_t buf_size)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_flush(l2_context_t *ctx, l2_channel_t *below)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_close(l2_context_t *ctx, l2_channel_t *below)
  +{
  +    return L2_OK;
  +}
  +
  +static int hook_destroy(l2_context_t *ctx)
  +{
  +    return L2_OK;
  +}
  +
  +l2_handler_t l2_handler_syslog = {
  +    hook_create,
  +    hook_configure,
  +    hook_open,
  +    hook_write,
  +    hook_flush,
  +    hook_close,
  +    hook_destroy
  +};
  +

From ossp-cvs-owner@ossp.org  Fri May 11 20:37:27 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f4BIbP281607; Fri, 11 May 2001 20:37:25 +0200 (CEST)
Date: Fri, 11 May 2001 20:37:25 +0200 (CEST)
Message-Id: <200105111837.f4BIbP281607@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 Makefile.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   11-May-2001 20:37:25
  Branch: HEAD                             Handle: 2001051119372500

  Modified files:
    ossp-pkg/l2             Makefile.in

  Log:
    Fix manpage substitution

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/l2/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 Makefile.in
  --- ossp-pkg/l2/Makefile.in	2001/05/10 19:46:01	1.1.1.1
  +++ ossp-pkg/l2/Makefile.in	2001/05/11 18:37:25	1.2
  @@ -91,7 +91,7 @@
   	   sed -e 's;.*(;;' -e 's;).*;;'`; \
   	$(POD2MAN) --section=$${SEC} --center="$${ONELINE}" \
   	           --release="$$D" --date="$${NAME} $$V1" $(S)$${BASENAME}.pod |\
  -	sed -e "s;STR_VERSION_STR;$$V2;" >$${BASENAME}.$${SEC}
  +	sed -e "s;L2_VERSION_STR;$$V2;" >$${BASENAME}.$${SEC}
   
   .SUFFIXES:
   .SUFFIXES: .c .o .lo

From ossp-cvs-owner@ossp.org  Fri May 11 20:42:46 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f4BIgi081985; Fri, 11 May 2001 20:42:44 +0200 (CEST)
Date: Fri, 11 May 2001 20:42:44 +0200 (CEST)
Message-Id: <200105111842.f4BIgi081985@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.m4
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   11-May-2001 20:42:44
  Branch: HEAD                             Handle: 2001051119424400

  Modified files:
    ossp-pkg/l2             l2.m4

  Log:
    fix alignment

  Summary:
    Revision    Changes     Path
    1.2         +2  -2      ossp-pkg/l2/l2.m4
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2.m4
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 l2.m4
  --- ossp-pkg/l2/l2.m4	2001/05/10 19:46:01	1.1.1.1
  +++ ossp-pkg/l2/l2.m4	2001/05/11 18:42:44	1.2
  @@ -31,8 +31,8 @@
   dnl ##
   dnl ##  Synopsis:
   dnl ##  AC_CHECK_L2([MIN-VERSION [,          # minimum L2 version, e.g. 1.2.0
  -dnl ##               DEFAULT-WITH-L2 [,     # default value for --with-l2 option
  -dnl ##               DEFAULT-WITH-L2-TEST [,# default value for --with-l2-test option
  +dnl ##               DEFAULT-WITH-L2 [,      # default value for --with-l2 option
  +dnl ##               DEFAULT-WITH-L2-TEST [, # default value for --with-l2-test option
   dnl ##               EXTEND-VARS [,          # whether CFLAGS/LDFLAGS/etc are extended
   dnl ##               ACTION-IF-FOUND [,      # action to perform if L2 was found
   dnl ##               ACTION-IF-NOT-FOUND     # action to perform if L2 was not found

From ossp-cvs-owner@ossp.org  Fri May 11 20:46:41 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f4BIkeO82456; Fri, 11 May 2001 20:46:40 +0200 (CEST)
Date: Fri, 11 May 2001 20:46:40 +0200 (CEST)
Message-Id: <200105111846.f4BIkeO82456@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 configure configure.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   11-May-2001 20:46:39
  Branch: HEAD                             Handle: 2001051119463900

  Modified files:
    ossp-pkg/l2             configure configure.in

  Log:
    fix typo in company name (ops)

  Summary:
    Revision    Changes     Path
    1.2         +2  -2      ossp-pkg/l2/configure
    1.2         +2  -2      ossp-pkg/l2/configure.in
  ____________________________________________________________________________

  Index: ossp-pkg/l2/configure
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 configure
  --- ossp-pkg/l2/configure	2001/05/10 19:46:01	1.1.1.1
  +++ ossp-pkg/l2/configure	2001/05/11 18:46:39	1.2
  @@ -1,6 +1,6 @@
   #! /bin/sh
   
  -# From configure.in Revision: 1.2 
  +# From configure.in 1.0
   
   
   
  @@ -44,7 +44,7 @@
       #   friendly header ;)
       echo "Configuring ${TB}L2${TN} (Logging Library), Version ${TB}${L2_VERSION_STR}${TN}"
       echo "Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -Copyright (c) 2001 Cable & WIreless Deutschland (http://www.cw.com/de/)"
  +Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)"
   
       #   additionally find out hex version
       L2_VERSION_HEX="`$ac_shtool version -l c -d hex $ac_srcdir/l2_version.c`"
  Index: ossp-pkg/l2/configure.in
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 configure.in
  --- ossp-pkg/l2/configure.in	2001/05/10 19:46:01	1.1.1.1
  +++ ossp-pkg/l2/configure.in	2001/05/11 18:46:39	1.2
  @@ -28,14 +28,14 @@
   dnl ##
   
   AC_PREREQ(2.13)dnl
  -AC_REVISION($Revision: 1.1.1.1 $)
  +AC_REVISION(1.0)
   
   AC_INIT(README)
   AC_HEADLINE(dnl
   L2, Logging Library, dnl
   L2_VERSION, l2_version.c, dnl
   [Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -Copyright (c) 2001 Cable & WIreless Deutschland (http://www.cw.com/de/)])
  +Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)])
   AC_CONFIG_HEADER(l2_config.h)
   AC_PREFIX_DEFAULT(/usr/local)
   AC_PLATFORM(PLATFORM)

From ossp-cvs-owner@ossp.org  Fri May 11 21:53:46 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f4BJrjF88948; Fri, 11 May 2001 21:53:45 +0200 (CEST)
Date: Fri, 11 May 2001 21:53:45 +0200 (CEST)
Message-Id: <200105111953.f4BJrjF88948@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela ChangeLog shiela.pl
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   11-May-2001 21:53:45
  Branch: HEAD                             Handle: 2001051120534500

  Modified files:
    ossp-pkg/shiela         ChangeLog shiela.pl

  Log:
    *** empty log message ***

  Summary:
    Revision    Changes     Path
    1.5         +3  -0      ossp-pkg/shiela/ChangeLog
    1.7         +4  -2      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/ChangeLog
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	2001/05/04 13:33:53	1.4
  +++ ossp-pkg/shiela/ChangeLog	2001/05/11 19:53:45	1.5
  @@ -11,6 +11,9 @@
   
     Changes between 0.9.1 and 0.9.2 (10-Feb-2001 to 04-May-2001):
   
  +   *) Fixed meta character handling in regex matchings.
  +      [Ralf S. Engelschall]
  +
      *) Make sure shiela accepts CVS 1.11 and newer, too.
         [Ralf S. Engelschall]
   
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	2001/05/04 15:06:55	1.6
  +++ ossp-pkg/shiela/shiela.pl	2001/05/11 19:53:45	1.7
  @@ -1182,7 +1182,8 @@
       my @newfiles = ();
       foreach my $cvsfile (@cvsfiles) {
           my $branch = 'HEAD';
  -        if ($cvsstat =~ m|===+\nFile:\s+$cvsfile.+?Sticky Tag:\s+(\S+)|s) {
  +        my $cvsfile_quoted = quotemeta($cvsfile);
  +        if ($cvsstat =~ m|===+\nFile:\s+${cvsfile_quoted}.+?Sticky Tag:\s+(\S+)|s) {
               $branch = $1;
               $branch = 'HEAD' if ($branch eq '(none)');
           }
  @@ -1746,7 +1747,8 @@
           $e->{date}   = $ID;
           $e->{delta}  = $Id;
           $e->{diff} = '';
  -        $cvsdiff =~ s|\n<Diff\s+$Is>\n(.+?\n)</Diff>|$e->{diff} = $1, ''|se;
  +        my $Is_quoted = quotemeta($Is);
  +        $cvsdiff =~ s|\n<Diff\s+${Is_quoted}>\n(.+?\n)</Diff>|$e->{diff} = $1, ''|se;
           $IN->{file}->{$Is} = $e;
           $handle_min = $ID if ($ID ne '' and (not defined($handle_min) or $handle_min > $ID));
           $handle_max = $ID if ($ID ne '' and (not defined($handle_max) or $handle_max < $ID));

From ossp-cvs-owner@ossp.org  Sat May 12 09:24:18 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f4C7OGg57217; Sat, 12 May 2001 09:24:16 +0200 (CEST)
Date: Sat, 12 May 2001 09:24:16 +0200 (CEST)
Message-Id: <200105120724.f4C7OGg57217@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela shiela.pl
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   12-May-2001 09:24:16
  Branch: HEAD                             Handle: 2001051208241600

  Modified files:
    ossp-pkg/shiela         shiela.pl

  Log:
    More quotemeta required

  Summary:
    Revision    Changes     Path
    1.8         +2  -1      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/shiela.pl
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	2001/05/11 19:53:45	1.7
  +++ ossp-pkg/shiela/shiela.pl	2001/05/12 07:24:16	1.8
  @@ -1672,8 +1672,9 @@
                       $d .= scalar $cvs->result;
                       $cvs->close;
                   }
  +                my $Is_quoted = quotemeta($Is);
                   $d =~ s|^Index:.+?\ndiff\s+.*?\n||s;
  -                $d =~ s|^(---\s+)$Is(\s+)|$1$cvsdir/$Is$2|m;
  +                $d =~ s|^(---\s+)${Is_quoted}(\s+)|$1$cvsdir/$Is$2|m;
                   $d =~ s|^(\+\+\+\s+)$Is(\s+)|$1$cvsdir/$Is$2|m;
                   $cvsdiff .=
                       "<Diff $cvsdir/$Is>\n" .

From ossp-cvs-owner@ossp.org  Sat May 12 09:26:55 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f4C7QtN57432; Sat, 12 May 2001 09:26:55 +0200 (CEST)
Date: Sat, 12 May 2001 09:26:55 +0200 (CEST)
Message-Id: <200105120726.f4C7QtN57432@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela shiela.pl
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   12-May-2001 09:26:55
  Branch: HEAD                             Handle: 2001051208265400

  Modified files:
    ossp-pkg/shiela         shiela.pl

  Log:
    more quoting

  Summary:
    Revision    Changes     Path
    1.9         +8  -8      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/shiela.pl
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	2001/05/12 07:24:16	1.8
  +++ ossp-pkg/shiela/shiela.pl	2001/05/12 07:26:54	1.9
  @@ -1403,7 +1403,7 @@
                       print STDERR "cvs import: Ignoring this operation - don't expect log messages!\n";
                       exit(0);
                   }
  -                open(CVSS, "$RT->{cvs} -f -l -Q -n log -r$It $Is|");
  +                open(CVSS, "$RT->{cvs} -f -l -Q -n log -r$It '$Is'|");
                   $rcslog = $_ while (<CVSS>);
                   close(CVSS);
               }
  @@ -1519,7 +1519,7 @@
           my $rcslog = '';
           if ($Io eq 'A' or $Io eq 'M') {
               if (not $RT->{useserver}) {
  -                open(CVSS, "$RT->{cvs} -f -l -Q -n log -r$Iv $Is|");
  +                open(CVSS, "$RT->{cvs} -f -l -Q -n log -r$Iv '$Is'|");
                   $rcslog .= $_ while (<CVSS>);
                   close(CVSS);
               }
  @@ -1579,7 +1579,7 @@
                       "============================================================\n" .
                       "\$ cvs update -p -r$Iv $Is | uuencode $Is\n";
                   if (not $RT->{useserver}) {
  -                    open(CVSS, "$RT->{cvs} -f -l -Q -n update -p -r$Iv $Is | uuencode $Is |");
  +                    open(CVSS, "$RT->{cvs} -f -l -Q -n update -p -r$Iv '$Is' | uuencode '$Is' |");
                       $cvsdiff .= $_ while (<CVSS>);
                       close(CVSS);
                   }
  @@ -1602,7 +1602,7 @@
                       "============================================================\n" .
                       "\$ cvs update -p -r$Iv $Is\n";
                   if (not $RT->{useserver}) {
  -                    open(CVSS, "$RT->{cvs} -f -l -Q -n update -p -r$Iv $Is|");
  +                    open(CVSS, "$RT->{cvs} -f -l -Q -n update -p -r$Iv '$Is'|");
                       $cvsdiff .= $_ while (<CVSS>);
                       close(CVSS);
                   }
  @@ -1629,8 +1629,8 @@
                       "\$ cvs update -p -r$Iv $Is >$Is.new\n" .
                       "\$ diff -u $Is.old $Is.new\n";
                   if (not $RT->{useserver}) {
  -                    system("$RT->{cvs} -f -l -Q -n update -p -r$IV $Is | uuencode $Is >$Is.old");
  -                    system("$RT->{cvs} -f -l -Q -n update -p -r$Iv $Is | uuencode $Is >$Is.new");
  +                    system("$RT->{cvs} -f -l -Q -n update -p -r$IV '$Is' | uuencode '$Is' >$Is.old");
  +                    system("$RT->{cvs} -f -l -Q -n update -p -r$Iv '$Is' | uuencode '$Is' >$Is.new");
                   }
                   else {
                       my $cvs = new CVS ($RT->{cvs}, $RT->{cvsroot});
  @@ -1659,7 +1659,7 @@
                   #   file was modified, so we show the changed contents only
                   my $d = '';
                   if (not $RT->{useserver}) {
  -                    open(FP, "$RT->{cvs} -f -l -Q -n diff -u -r$IV -r$Iv $Is|");
  +                    open(FP, "$RT->{cvs} -f -l -Q -n diff -u -r$IV -r$Iv '$Is'|");
                       $d .= $_ while (<FP>);
                       close(FP);
                   }
  @@ -1675,7 +1675,7 @@
                   my $Is_quoted = quotemeta($Is);
                   $d =~ s|^Index:.+?\ndiff\s+.*?\n||s;
                   $d =~ s|^(---\s+)${Is_quoted}(\s+)|$1$cvsdir/$Is$2|m;
  -                $d =~ s|^(\+\+\+\s+)$Is(\s+)|$1$cvsdir/$Is$2|m;
  +                $d =~ s|^(\+\+\+\s+)${Is_quoted}(\s+)|$1$cvsdir/$Is$2|m;
                   $cvsdiff .=
                       "<Diff $cvsdir/$Is>\n" .
                        "Index: $cvsdir/$Is\n" .

From ossp-cvs-owner@ossp.org  Sat May 12 11:27:26 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f4C9RNj67977; Sat, 12 May 2001 11:27:23 +0200 (CEST)
Date: Sat, 12 May 2001 11:27:23 +0200 (CEST)
Message-Id: <200105120927.f4C9RNj67977@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   12-May-2001 11:27:23
  Branch: HEAD                             Handle: 2001051210272300

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    update todo

  Summary:
    Revision    Changes     Path
    1.2         +41 -24     ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 TODO
  --- ossp-pkg/l2/TODO	2001/05/10 19:46:01	1.1.1.1
  +++ ossp-pkg/l2/TODO	2001/05/12 09:27:23	1.2
  @@ -1,7 +1,45 @@
   
  -OSSP liblog
  -===========
  +OSSP L2
  +=======
   
  +TODO
  +----
  +
  +- channel backends
  +- message formatting
  +- rc-file autoconfiguration
  +- C++ API
  +- documentation C API
  +- documentation C++ API
  +
  +BRAINSTORMING
  +-------------
  +
  +Channel Handler Configuration:
  +o l2_handler_null
  +  - no configuration at all
  +o l2_handler_fd
  +  - mode="unix|stdio"
  +  - fd=int|FILE*
  +o l2_handler_file
  +  - mode="unix|stdio"
  +  - path=char*
  +  - append="yes|no"
  +o l2_handler_pipe
  +  - url="prg:/path/to/program"
  +  - fd=int
  +o l2_handler_socket
  +  - url="tcp://hostname:port"
  +  - fd=int
  +o l2_handler_syslog
  +  - ident=char*
  +o l2_handler_filter
  +  - pattern=char*
  +o l2_handler_prefix
  +  - prefix=char*
  +o l2_handler_buffer
  +  - size=size_t
  +
   Braindump:
   - debugging is special case of logging
   - tracing is special case of debugging
  @@ -108,29 +146,9 @@
   - Varargs:
     log ist nur wrapper fuer vlog
   
  -- Source Tree:
  -  README .......... information about package
  -  INSTALL ......... instructions for installation
  -  LICENSE ......... license information 
  -  TODO ............ to-do list 
  -  ChangeLog ....... history of all changes
  -  Makefile.in ..... build specification
  -  configure.in .... GNU Autoconf script source
  -  aclocal.m4 ...... GNU Autoconf internal macros
  -  libtool ......... GNU Libtool utility
  -  shtool .......... GNU Shtool utility
  -  l2.m4 ........... GNU Autoconf public macro AC_L2()
  -  l2-config.in .... configuration utility script
  -  l2.h ............ C API definition
  -  l2.c ............ C API+internals implementation
  -  l2.hh ........... C++ API definition
  -  l2.cc ........... C++ API implementation
  -  l2.pod .......... Unix manual page source (POD format)
  -  l2_test.c ....... Test application
  -
   - Error Handling:
     o log kein Return Code
  -  o aber error callback  function (dadrin in C++: throw, in C: exit)
  +  o aber error callback function (dadrin in C++: throw, in C: exit)
   
   - Newline Handling:
     option fuer channel: \r, \r\n, \n oder gleich string
  @@ -150,7 +168,6 @@
     der Präprocessor an einem eventuell vorhandenen Komma scheitert.
     Dies kann beim gcc durch Voranstellen von "##" vor dem "__VA_ARGS__"
     umgangen werden. Ouch.
  -
     Beide Erweiterungen sind derzeit nicht aktiv, wenn mit -ansi
     compiliert wird. Explizit anschalten läßt sich die standard-konforme
     Erweiterung über "-std=c9x", bzw. "-std=c99" bei neueren gccs.

From ossp-cvs-owner@ossp.org  Thu May 17 16:40:35 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f4HEeYp40544; Thu, 17 May 2001 16:40:34 +0200 (CEST)
Date: Thu, 17 May 2001 16:40:34 +0200 (CEST)
Message-Id: <200105171440.f4HEeYp40544@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 Makefile.in l2_log.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   17-May-2001 16:40:34
  Branch: HEAD                             Handle: 2001051715403400

  Added files:
    ossp-pkg/l2             l2_log.c
  Modified files:
    ossp-pkg/l2             Makefile.in

  Log:
    Added l2_log.c module, which contains l2_stream_log() and l2_stream_vlog().

  Summary:
    Revision    Changes     Path
    1.4         +9  -8      ossp-pkg/l2/Makefile.in
    1.1         +50 -0      ossp-pkg/l2/l2_log.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 Makefile.in
  --- ossp-pkg/l2/Makefile.in	2001/05/11 19:50:52	1.3
  +++ ossp-pkg/l2/Makefile.in	2001/05/17 14:40:34	1.4
  @@ -62,6 +62,7 @@
   
   #   list of library object files
   OBJS = \
  +    l2_log.lo \
       l2_stream.lo \
       l2_channel.lo \
       l2_ch_fd.lo \
  @@ -107,13 +108,13 @@
   	$(LIBTOOL) --mode=compile --quiet $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $<
   
   #   default target
  -all: $(TARGET) 
  +all: $(TARGET)
   
   #   build libraries
  -libl2.la: $(OBJS) 
  +libl2.la: $(OBJS)
   	$(LIBTOOL) --mode=link --quiet $(CC) -o libl2.la $(OBJS) -rpath $(libdir) \
   	    -version-info `$(SHTOOL) version -l c -d libtool l2_version.c`
  -libl2++.la: $(OBJS) l2++.lo 
  +libl2++.la: $(OBJS) l2++.lo
   	$(LIBTOOL) --mode=link --quiet $(CC) -o libl2++.la $(OBJS) l2++.lo -rpath $(libdir) \
   	    -version-info `$(SHTOOL) version -l c -d libtool l2_version.c`
   
  @@ -168,7 +169,7 @@
   	    libl2++.la $(DESTDIR)$(libdir)/libl2++.la
   
   #   perform standard uninstallation procedure
  -uninstall: 
  +uninstall:
   	$(MAKE) $(MFLAGS) @UNINSTALL_CXX@ uninstall-c uninstall-std
   uninstall-cxx:
   	@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libl2++.la
  @@ -188,7 +189,7 @@
   	$(RMDIR) $(DESTDIR)$(includedir)
   	$(RMDIR) $(DESTDIR)$(bindir)
   
  -#   remove everything which can be regenerated 
  +#   remove everything which can be regenerated
   #   by "make all"
   clean:
   	$(RM) *.lo *.o
  @@ -196,8 +197,8 @@
   	-$(RMDIR) .libs >/dev/null 2>&1 || $(TRUE)
   	$(RM) $(TARGET_LIBS)
   	$(RM) $(TARGET_TESTS)
  -	
  -#   remove everything which can be regenerated 
  +
  +#   remove everything which can be regenerated
   #   by "./configure && make all"
   distclean: clean
   	$(RM) l2-config
  @@ -206,7 +207,7 @@
   	$(RM) libtool
   	$(RM) Makefile
   
  -#   remove everything which can be regenerated 
  +#   remove everything which can be regenerated
   #   by "autoconf && autoheader && ./configure && make all"
   realclean: distclean
   	$(RM) configure
  Index: ossp-pkg/l2/l2_log.c
  ============================================================
  $ cvs update -p -r1.1 l2_log.c
  /*
  **  L2 - OSSP Logging Library
  **  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP L2, a flexible logging library which
  **  can be found at http://www.ossp.com/pkg/l2/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  l2.c: internal C implementation
  **
  */
  
  #include "l2.h"
  #include "l2_p.h"
  
  void l2_stream_log(l2_stream_t *st, unsigned int log_level, const char* fmt, ...)
      {
      va_list ap;
      va_start(ap, fmt);
      l2_stream_vlog(st, log_level, fmt, ap);
      va_end(ap);
      }
  
  void l2_stream_vlog(l2_stream_t *st, unsigned int log_level, const char* fmt, va_list ap)
      {
      size_t i, len;
      len = vsnprintf(st->message, L2_MAX_MSGSIZE, fmt, ap);
      for (i = 0; i <= L2_MAX_CHANNELS && st->channels[i]; ++i)
  	st->channels[i]->handler.write(&st->channels[i]->context,
  				       st->channels[i]->below,
  				       st->message, len);
      }

From ossp-cvs-owner@ossp.org  Thu May 17 16:41:32 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f4HEfUp40644; Thu, 17 May 2001 16:41:30 +0200 (CEST)
Date: Thu, 17 May 2001 16:41:30 +0200 (CEST)
Message-Id: <200105171441.f4HEfUp40644@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_p.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   17-May-2001 16:41:30
  Branch: HEAD                             Handle: 2001051715413000

  Modified files:
    ossp-pkg/l2             l2_p.h

  Log:
    Added missing "_st" suffix to the declaration of the l2_stream structure.

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/l2/l2_p.h
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_p.h
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 l2_p.h
  --- ossp-pkg/l2/l2_p.h	2001/05/10 19:46:01	1.1.1.1
  +++ ossp-pkg/l2/l2_p.h	2001/05/17 14:41:30	1.2
  @@ -49,7 +49,7 @@
       l2_formatter_t callback;
   } l2_format_t;
   
  -struct l2_stream {
  +struct l2_stream_st {
       unsigned int  levelmask;
       char          message[L2_MAX_MSGSIZE];
       l2_channel_t *channels[L2_MAX_CHANNELS];

From ossp-cvs-owner@ossp.org  Thu May 17 16:42:02 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f4HEg1940708; Thu, 17 May 2001 16:42:01 +0200 (CEST)
Date: Thu, 17 May 2001 16:42:01 +0200 (CEST)
Message-Id: <200105171442.f4HEg1940708@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_syslog.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   17-May-2001 16:42:01
  Branch: HEAD                             Handle: 2001051715420000

  Modified files:
    ossp-pkg/l2             l2_ch_syslog.c

  Log:
    Implemented write() method of the syslog handler.

  Summary:
    Revision    Changes     Path
    1.3         +6  -3      ossp-pkg/l2/l2_ch_syslog.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_syslog.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2_ch_syslog.c
  --- ossp-pkg/l2/l2_ch_syslog.c	2001/05/11 17:07:52	1.2
  +++ ossp-pkg/l2/l2_ch_syslog.c	2001/05/17 14:42:00	1.3
  @@ -30,6 +30,8 @@
   #include "l2.h"
   #include "l2_p.h"
   
  +#include <syslog.h>
  +
   static int hook_create(l2_context_t *ctx)
   {
       return L2_OK;
  @@ -45,11 +47,12 @@
       return L2_OK;
   }
   
  -static int hook_write(l2_context_t *ctx, l2_channel_t *below, 
  +static int hook_write(l2_context_t *ctx, l2_channel_t *below,
                         const char *buf, size_t buf_size)
  -{
  +    {
  +    syslog(LOG_INFO, buf);
       return L2_OK;
  -}
  +    }
   
   static int hook_flush(l2_context_t *ctx, l2_channel_t *below)
   {

From ossp-cvs-owner@ossp.org  Thu May 17 16:42:24 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f4HEgN940762; Thu, 17 May 2001 16:42:23 +0200 (CEST)
Date: Thu, 17 May 2001 16:42:23 +0200 (CEST)
Message-Id: <200105171442.f4HEgN940762@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   17-May-2001 16:42:23
  Branch: HEAD                             Handle: 2001051715422300

  Modified files:
    ossp-pkg/l2             l2_test.c

  Log:
    Wrote a small test program for the library.

  Summary:
    Revision    Changes     Path
    1.3         +48 -3      ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/05/12 07:23:06	1.2
  +++ ossp-pkg/l2/l2_test.c	2001/05/17 14:42:23	1.3
  @@ -27,10 +27,55 @@
   **  l2_test.c: C API test suite
   */
   
  +#include <stdio.h>
   #include "l2.h"
   
   int main(int argc, char *argv[])
  -{
  -    return 0;
  -}
  +    {
  +    l2_channel_t* log_channel;
  +    l2_stream_t*  log_stream;
  +
  +    /* Create the channel. */
  +
  +    setbuf(stdout, 0);
  +    printf("Creating channel ... ");
  +    log_channel = l2_channel_create(&l2_handler_syslog);
  +    if (log_channel == 0)
  +	{
  +	fprintf(stderr, "Can't create my log channel!\n");
  +	return 1;
  +	}
  +    printf("done\n");
  +
  +    /* Create the stream and attach the channel to it. */
  +
  +    printf("Creating stream ... ");
  +    log_stream = l2_stream_create();
  +    if (log_stream == 0)
  +	{
  +	fprintf(stderr, "Can't create my log stream!\n");
  +	return 1;
  +	}
  +    printf("done\n");
  +    printf("Attaching channel to stream ... ");
  +    if (!l2_stream_channel(log_stream, log_channel, -1))
  +	{
  +	fprintf(stderr, "Can't attach channel to log stream!\n");
  +	return 1;
  +	}
  +    printf("done\n");
   
  +    /* Log an example message. */
  +
  +    printf("Writing log message ... ");
  +    l2_stream_log(log_stream, -1, "%cstream = 0x%lx, channel = 0x%lx%c", '"', log_stream, log_channel, '"');
  +    printf("done\n");
  +
  +    /* Clean up. */
  +
  +    printf("Destroying stream ... ");
  +    l2_stream_destroy(log_stream);
  +    printf("done\n");
  +
  +    return 0;
  +    }

From ossp-cvs-owner@ossp.org  Thu May 17 16:43:28 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f4HEhRv40870; Thu, 17 May 2001 16:43:27 +0200 (CEST)
Date: Thu, 17 May 2001 16:43:27 +0200 (CEST)
Message-Id: <200105171443.f4HEhRv40870@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_stream.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   17-May-2001 16:43:27
  Branch: HEAD                             Handle: 2001051715432600

  Modified files:
    ossp-pkg/l2             l2_stream.c

  Log:
    Implemented l2_stream_create(), l2_stream_destroy(), and l2_stream_channel().

  Summary:
    Revision    Changes     Path
    1.2         +29 -0      ossp-pkg/l2/l2_stream.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_stream.c
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 l2_stream.c
  --- ossp-pkg/l2/l2_stream.c	2001/05/10 19:46:01	1.1.1.1
  +++ ossp-pkg/l2/l2_stream.c	2001/05/17 14:43:26	1.2
  @@ -31,3 +31,32 @@
   #include "l2.h"
   #include "l2_p.h"
   
  +l2_stream_t* l2_stream_create(void)
  +    {
  +    l2_stream_t *st;
  +    st = (l2_stream_t *)malloc(sizeof(l2_stream_t));
  +    if (!st)
  +        return NULL;
  +    memset(st, 0, sizeof(l2_stream_t));
  +    return st;
  +    }
  +
  +void l2_stream_destroy(l2_stream_t* st)
  +    {
  +    size_t i;
  +    for (i = 0; i <= L2_MAX_CHANNELS && st->channels[i]; ++i)
  +	l2_channel_destroy(st->channels[i]);
  +    for (i = 0; i <= L2_MAX_FORMATTERS && st->formatters[i]; ++i)
  +	free(st->formatters[i]);
  +    }
  +
  +l2_stream_t* l2_stream_channel(l2_stream_t *st, l2_channel_t *ch, unsigned int levelmask)
  +    {
  +    size_t i;
  +    for (i = 0; i <= L2_MAX_CHANNELS && st->channels[i]; ++i)
  +	;
  +    if (i == L2_MAX_CHANNELS)
  +	return 0;		/* Array is full. */
  +    st->channels[i] = ch;
  +    return st;
  +    }

From ossp-cvs-owner@ossp.org  Sat May 19 12:23:35 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f4JANXF86606; Sat, 19 May 2001 12:23:33 +0200 (CEST)
Date: Sat, 19 May 2001 12:23:33 +0200 (CEST)
Message-Id: <200105191023.f4JANXF86606@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   19-May-2001 12:23:33
  Branch: HEAD                             Handle: 2001051911233200

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    Remember timeplan

  Summary:
    Revision    Changes     Path
    1.3         +17 -0      ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 TODO
  --- ossp-pkg/l2/TODO	2001/05/12 09:27:23	1.2
  +++ ossp-pkg/l2/TODO	2001/05/19 10:23:32	1.3
  @@ -2,6 +2,23 @@
   OSSP L2
   =======
   
  +Timeplan
  +--------
  +
  +o M1 (14.05.2001)
  +  - fixed C API
  +  - established build environment
  +o M2 (21.05.2001)
  +  - implemented C API
  +  - fixed C++ API
  +o M3 (11.06.2001)
  +  - implemented C++ API
  +  - documented C API
  +  - documented C++ API
  +  - release version 0.9.0
  +o M4 (25.06.2001)
  +  - release version 1.0.0
  +
   TODO
   ----
   

From ossp-cvs-owner@ossp.org  Sat May 19 21:01:16 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f4JJ1Dr40018; Sat, 19 May 2001 21:01:13 +0200 (CEST)
Date: Sat, 19 May 2001 21:01:13 +0200 (CEST)
Message-Id: <200105191901.f4JJ1Dr40018@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 Makefile.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   19-May-2001 21:01:13
  Branch: HEAD                             Handle: 2001051920011300

  Modified files:
    ossp-pkg/l2             Makefile.in

  Log:
    fix 'make clean'

  Summary:
    Revision    Changes     Path
    1.5         +1  -0      ossp-pkg/l2/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 Makefile.in
  --- ossp-pkg/l2/Makefile.in	2001/05/17 14:40:34	1.4
  +++ ossp-pkg/l2/Makefile.in	2001/05/19 19:01:13	1.5
  @@ -52,6 +52,7 @@
   RM          = rm -f
   RMDIR       = rmdir
   POD2MAN     = pod2man
  +TRUE        = true
   SHTOOL      = ./shtool
   LIBTOOL     = ./libtool
   

From ossp-cvs-owner@ossp.org  Sat May 19 22:08:32 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f4JK8Vl46057; Sat, 19 May 2001 22:08:31 +0200 (CEST)
Date: Sat, 19 May 2001 22:08:31 +0200 (CEST)
Message-Id: <200105192008.f4JK8Vl46057@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 Makefile.in l2.h l2_p.h l2_param.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   19-May-2001 22:08:30
  Branch: HEAD                             Handle: 2001051921083000

  Added files:
    ossp-pkg/l2             l2_param.c
  Modified files:
    ossp-pkg/l2             Makefile.in l2.h l2_p.h

  Log:
    the "int l2_channel_configure(l2_channel_t *ch, const char *fmt,
    ...);" beast was my idea, so it is fair to also provide the necessary
    tool for implementing the underlying handler functions. Here it is,
    l2_param_parse().

  Summary:
    Revision    Changes     Path
    1.6         +1  -0      ossp-pkg/l2/Makefile.in
    1.3         +47 -2      ossp-pkg/l2/l2.h
    1.3         +19 -0      ossp-pkg/l2/l2_p.h
    1.1         +101 -0     ossp-pkg/l2/l2_param.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 Makefile.in
  --- ossp-pkg/l2/Makefile.in	2001/05/19 19:01:13	1.5
  +++ ossp-pkg/l2/Makefile.in	2001/05/19 20:08:30	1.6
  @@ -66,6 +66,7 @@
       l2_log.lo \
       l2_stream.lo \
       l2_channel.lo \
  +    l2_param.lo \
       l2_ch_fd.lo \
       l2_ch_file.lo \
       l2_ch_pipe.lo \
  Index: ossp-pkg/l2/l2.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2.h
  --- ossp-pkg/l2/l2.h	2001/05/11 17:07:52	1.2
  +++ ossp-pkg/l2/l2.h	2001/05/19 20:08:30	1.3
  @@ -30,18 +30,33 @@
   #ifndef __L2_H__
   #define __L2_H__
   
  +/* include standard environment we are based on */
  +#include <stdio.h>
   #include <stdlib.h>
   #include <stdarg.h>
   #include <string.h>
   
  +/* counterbalance poor standard environments */ 
  +#ifndef NULL
  +#define NULL (void *)0
  +#endif
  +#ifndef FALSE
  +#define FALSE (0)
  +#endif
  +#ifndef TRUE
  +#define TRUE (!FALSE)
  +#endif
  +
   /* forward declarations for opaque data structures */
   union  l2_context_un;
  +struct l2_param_st;
   struct l2_stream_st;
   struct l2_channel_st;
   struct l2_handler_st;
   
   /* corresponding data types for data structures */
   typedef union  l2_context_un l2_context_t;
  +typedef struct l2_param_st   l2_param_t;
   typedef struct l2_handler_st l2_handler_t;
   typedef struct l2_stream_st  l2_stream_t;
   typedef struct l2_channel_st l2_channel_t;
  @@ -64,16 +79,43 @@
       L2_ERROR
   } l2_error_t;
   
  -/* context union for callbacks */
  +/* context union for storing data */
   union l2_context_un {
  +    char    c;
  +    short   s;
       int     i;
       long    l;
       float   f;
       double  d;
  -    void   *vp;
       char   *cp;
  +    void   *vp;
  +};
  +
  +/* list of types for storing data */
  +typedef enum {
  +    L2_TYPE_CHAR,
  +    L2_TYPE_SHORT,
  +    L2_TYPE_INT,
  +    L2_TYPE_LONG,
  +    L2_TYPE_FLOAT,
  +    L2_TYPE_DOUBLE,
  +    L2_TYPE_CHARPTR,
  +    L2_TYPE_VOIDPTR
  +} l2_type_t;
  +
  +/* parameter specification */
  +struct l2_param_st {
  +    char     *name;
  +    l2_type_t type;
  +    void     *store;
   };
   
  +/* parameter constructors */
  +#define L2_PARAM_SET(pa,n,t,s) \
  +    pa.name = #n, pa.type = L2_TYPE_##t, pa.store = s
  +#define L2_PARAM_END(pa) \
  +    pa.name = NULL
  +
   /* channel handler specification structure */
   struct l2_handler_st {
       int (*create)   (l2_context_t *ctx);
  @@ -107,6 +149,9 @@
   extern l2_handler_t l2_handler_filter;
   extern l2_handler_t l2_handler_prefix;
   extern l2_handler_t l2_handler_buffer;
  +
  +/* parameter operations */
  +int           l2_param_parse      (l2_param_t p[], const char *fmt, va_list ap);
   
   /* channel operations */
   l2_channel_t *l2_channel_create   (l2_handler_t *h);
  Index: ossp-pkg/l2/l2_p.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2_p.h
  --- ossp-pkg/l2/l2_p.h	2001/05/17 14:41:30	1.2
  +++ ossp-pkg/l2/l2_p.h	2001/05/19 20:08:30	1.3
  @@ -56,5 +56,24 @@
       l2_format_t  *formatters[L2_MAX_FORMATTERS];
   };
   
  +/* variable argument handling taking care on argument passing conventions */
  +#define _va_type_recv_char    int
  +#define _va_type_cast_char    char
  +#define _va_type_recv_short   int
  +#define _va_type_cast_short   short
  +#define _va_type_recv_int     int
  +#define _va_type_cast_int     int
  +#define _va_type_recv_long    long
  +#define _va_type_cast_long    long
  +#define _va_type_recv_float   double
  +#define _va_type_cast_float   double
  +#define _va_type_recv_double  double
  +#define _va_type_cast_double  double
  +#define _va_type_recv_charptr void *
  +#define _va_type_cast_charptr char *
  +#define _va_type_recv_voidptr void *
  +#define _va_type_cast_voidptr void *
  +#define va_get(ap,type) (_va_type_cast_##type)va_arg((ap),_va_type_recv_##type)
  +
   #endif /* __L2_P_H__ */
   
  Index: ossp-pkg/l2/l2_param.c
  ============================================================
  $ cvs update -p -r1.1 l2_param.c
  /*
  **  L2 - OSSP Logging Library
  **  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP L2, a flexible logging library which
  **  can be found at http://www.ossp.com/pkg/l2/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  l2_param.c: parameter handling
  **
  */
  
  #include "l2.h"
  #include "l2_p.h"
  
  int l2_param_parse(l2_param_t pa[], const char *fmt, va_list ap)
  {
      const char *cpB, *cpE;
      const char *cpC, *cpG;
      int ok;
      int i; 
  
      cpE = fmt;
      while (*cpE != '\0') {
          /* determine begin of parameter name */
          cpB = cpE;
          while (*cpB == ',')
              cpB++;
  
          /* determine end of parameter name */
          cpE = cpB;
          while (*cpE != ',' && *cpE != '\0')
              cpE++;
  
          /* try to match with configured parameters */
          ok = FALSE;
          for (i = 0; pa[i].name != NULL; i++) {
              cpC = pa[i].name;
              cpG = cpB;
              while (*cpC != '\0' && cpG < cpE) {
                  if (*cpC != *cpG)
                      break;
                  cpC++;
                  cpG++;
              }
              if (*cpC == '\0' && cpG == cpE) {
                  /* parameter matched, so store value */
                  switch (pa[i].type) {
                      case L2_TYPE_CHAR:
                          *(char *)(pa[i].store) = va_get(ap, char); 
                          break;
                      case L2_TYPE_SHORT:
                          *(short *)(pa[i].store) = va_get(ap, short); 
                          break;
                      case L2_TYPE_INT:
                          *(int *)(pa[i].store) = va_get(ap, int); 
                          break;
                      case L2_TYPE_LONG:
                          *(long *)(pa[i].store) = va_get(ap, long); 
                          break;
                      case L2_TYPE_FLOAT:
                          *(float *)(pa[i].store) = va_get(ap, float); 
                          break;
                      case L2_TYPE_DOUBLE:
                          *(double *)(pa[i].store) = va_get(ap, double); 
                          break;
                      case L2_TYPE_CHARPTR:
                          *(char **)(pa[i].store) = va_get(ap, charptr); 
                          break;
                      case L2_TYPE_VOIDPTR:
                          *(void **)(pa[i].store) = va_get(ap, voidptr); 
                          break;
                  }
                  ok = TRUE;
                  break;
              }
          }
          if (!ok)
              return L2_ERROR;
      }
      return L2_OK;
  }
  

From ossp-cvs-owner@ossp.org  Sat May 19 22:14:16 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f4JKEF846494; Sat, 19 May 2001 22:14:15 +0200 (CEST)
Date: Sat, 19 May 2001 22:14:15 +0200 (CEST)
Message-Id: <200105192014.f4JKEF846494@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_file.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   19-May-2001 22:14:15
  Branch: HEAD                             Handle: 2001051921141500

  Modified files:
    ossp-pkg/l2             l2_ch_file.c

  Log:
    Give us a clue how the handler functions actually should look now
    that we have l2_param_parse() and friends available. So to help Peti
    in approaching milestone 2 for Monday, I felt free to implement
    l2_handler_file for us, based on raw Unix I/O.

  Summary:
    Revision    Changes     Path
    1.3         +134 -5     ossp-pkg/l2/l2_ch_file.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_file.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2_ch_file.c
  --- ossp-pkg/l2/l2_ch_file.c	2001/05/11 17:07:52	1.2
  +++ ossp-pkg/l2/l2_ch_file.c	2001/05/19 20:14:15	1.3
  @@ -30,42 +30,171 @@
   #include "l2.h"
   #include "l2_p.h"
   
  +#include <fcntl.h>
  +#include <unistd.h>
  +#include <sys/stat.h>
  +
  +/* declare private channel configuration */
  +typedef struct {
  +    int   fd;
  +    char *path;
  +    int   append;
  +    long  perm;
  +} l2_ch_file_t;
  +
  +/* create channel */
   static int hook_create(l2_context_t *ctx)
   {
  +    l2_ch_file_t *cfg;
  +
  +    /* allocate private channel configuration */
  +    if ((cfg = (l2_ch_file_t *)malloc(sizeof(l2_ch_file_t))) == NULL)
  +        return L2_ERROR;
  +
  +    /* initialize configuration with reasonable defaults */
  +    cfg->fd     = -1; 
  +    cfg->path   = NULL; 
  +    cfg->append = TRUE; 
  +    cfg->perm   = (S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH); 
  +
  +    /* link private channel configuration into channel context */
  +    ctx->vp = cfg;
  +
       return L2_OK;
   }
   
  +/* configure channel */
   static int hook_configure(l2_context_t *ctx, const char *fmt, va_list ap)
   {
  -    return L2_OK;
  +    l2_ch_file_t *cfg;
  +    l2_param_t pa[3]; 
  +    l2_error_t rv;
  +
  +    /* parameter checks */
  +    if (ctx == NULL)
  +        return L2_ERROR;
  +    if ((cfg = (l2_ch_file_t *)ctx->vp) == NULL)
  +        return L2_ERROR;
  +
  +    /* feed and call generic parameter parsing engine */
  +    L2_PARAM_SET(pa[0], path,   CHARPTR, &cfg->path);
  +    L2_PARAM_SET(pa[1], append, INT,     &cfg->append);
  +    L2_PARAM_SET(pa[1], perm,   LONG,    &cfg->perm);
  +    L2_PARAM_END(pa[2]);
  +    rv = l2_param_parse(pa, fmt, ap);
  +
  +    return rv;
   }
   
  -static int hook_open(l2_context_t *ctx, l2_channel_t *below)
  +/* open channel */
  +static int hook_open(l2_context_t *ctx, l2_channel_t *downstream)
   {
  +    l2_ch_file_t *cfg;
  +    int mode;
  +
  +    /* parameter checks */
  +    if (ctx == NULL)
  +        return L2_ERROR;
  +    if ((cfg = (l2_ch_file_t *)ctx->vp) == NULL)
  +        return L2_ERROR;
  +    if (cfg->path == NULL)
  +        return L2_ERROR;
  +
  +    /* open channel file */
  +    mode = O_WRONLY|O_CREAT;
  +    if (cfg->append)
  +        mode |= O_APPEND;
  +    if ((cfg->fd = open(cfg->path, mode, cfg->perm)) == -1)
  +        return L2_ERROR;
  +
  +    /* optionally open downstream channel, too */
  +    if (downstream != NULL)
  +        if (l2_channel_open(downstream) == L2_ERROR)
  +            return L2_ERROR;
  +
       return L2_OK;
   }
   
  -static int hook_write(l2_context_t *ctx, l2_channel_t *below, 
  +/* write to channel */
  +static int hook_write(l2_context_t *ctx, l2_channel_t *downstream, 
                         const char *buf, size_t buf_size)
   {
  +    l2_ch_file_t *cfg;
  +
  +    /* parameter checks */
  +    if (ctx == NULL)
  +        return L2_ERROR;
  +    if ((cfg = (l2_ch_file_t *)ctx->vp) == NULL)
  +        return L2_ERROR;
  +    if (cfg->fd == -1)
  +        return L2_ERROR;
  +
  +    /* write message to channel file */
  +    if (write(cfg->fd, buf, buf_size) == -1)
  +        return L2_ERROR;
  +
  +    /* optionally write to downstream channel, too */
  +    if (downstream != NULL)
  +        if (l2_channel_write(downstream, buf, buf_size) == L2_ERROR)
  +            return L2_ERROR;
  +
       return L2_OK;
   }
   
  -static int hook_flush(l2_context_t *ctx, l2_channel_t *below)
  +/* flush channel */
  +static int hook_flush(l2_context_t *ctx, l2_channel_t *downstream)
   {
  +    /* NOP for this channel, because Unix I/O files are unbuffered! */
  +
  +    /* optionally flush downstream channel, too */
  +    if (downstream != NULL)
  +        if (l2_channel_flush(downstream) == L2_ERROR)
  +            return L2_ERROR;
  +
       return L2_OK;
   }
   
  -static int hook_close(l2_context_t *ctx, l2_channel_t *below)
  +/* close channel */
  +static int hook_close(l2_context_t *ctx, l2_channel_t *downstream)
   {
  +    l2_ch_file_t *cfg;
  +
  +    /* optionally close downstream channel, too */
  +    if (downstream != NULL)
  +        if (l2_channel_close(downstream) == L2_ERROR)
  +            return L2_ERROR;
  +
  +    /* parameter checks */
  +    if (ctx == NULL)
  +        return L2_ERROR;
  +    if ((cfg = (l2_ch_file_t *)ctx->vp) == NULL)
  +        return L2_ERROR;
  +    if (cfg->fd == -1)
  +        return L2_ERROR;
  +
  +    /* close channel file */
  +    close(cfg->fd);
  +    cfg->fd = -1;
  +
       return L2_OK;
   }
   
  +/* destroy channel */
   static int hook_destroy(l2_context_t *ctx)
   {
  +    /* parameter checks */
  +    if (ctx == NULL)
  +        return L2_ERROR;
  +    if (ctx->vp == NULL) 
  +        return L2_ERROR;
  +
  +    /* destroy channel configuration */
  +    free(ctx->vp);
  +
       return L2_OK;
   }
   
  +/* exported channel handler structure */
   l2_handler_t l2_handler_file = {
       hook_create,
       hook_configure,

From ossp-cvs-owner@ossp.org  Mon May 21 21:29:02 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f4LJT1e04367; Mon, 21 May 2001 21:29:01 +0200 (CEST)
Date: Mon, 21 May 2001 21:29:01 +0200 (CEST)
Message-Id: <200105211929.f4LJT1e04367@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 shtool
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   21-May-2001 21:29:01
  Branch: HEAD                             Handle: 2001052120290100

  Modified files:
    ossp-pkg/l2             shtool

  Log:
    Update GNU shtool to version 1.5.3

  Summary:
    Revision    Changes     Path
    1.2         +70 -60     ossp-pkg/l2/shtool
  ____________________________________________________________________________

  Index: ossp-pkg/l2/shtool
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 shtool
  --- ossp-pkg/l2/shtool	2001/05/10 19:46:01	1.1.1.1
  +++ ossp-pkg/l2/shtool	2001/05/21 19:29:01	1.2
  @@ -1,12 +1,12 @@
   #!/bin/sh
   ##
   ##  GNU shtool -- The GNU Portable Shell Tool
  -##  Copyright (c) 1994-2000 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1994-2001 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  See http://www.gnu.org/software/shtool/ for more information.
   ##  See ftp://ftp.gnu.org/gnu/shtool/ for latest version.
   ##
  -##  Version:  1.5.1 (29-Jul-2000)
  +##  Version:  1.5.3 (19-Apr-2001)
   ##  Contents: all available modules
   ##
   
  @@ -26,7 +26,7 @@
   ##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
   ##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
   ##
  -##  Notice: Given that you include this file verbatim into your own
  +##  NOTICE: Given that you include this file verbatim into your own
   ##  source tree, you are justified in saying that it remains separate
   ##  from your package, and that this way you are simply just using GNU
   ##  shtool. So, in this situation, there is no requirement that your
  @@ -63,8 +63,8 @@
       exit 1
   fi
   if [ ".$1" = ".-h" -o ".$1" = ".--help" ]; then
  -    echo "This is GNU shtool, version 1.5.1 (29-Jul-2000)"
  -    echo "Copyright (c) 1994-2000 Ralf S. Engelschall <rse@engelschall.com>"
  +    echo "This is GNU shtool, version 1.5.3 (19-Apr-2001)"
  +    echo "Copyright (c) 1994-2001 Ralf S. Engelschall <rse@engelschall.com>"
       echo "Report bugs to <bug-shtool@gnu.org>"
       echo ''
       echo "Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]" 
  @@ -82,13 +82,13 @@
       echo '  prop     [-p<str>]'
       echo '  move     [-v] [-t] [-e] [-p] <src-file> <dst-file>'
       echo '  install  [-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>]'
  -    echo '           [-e<ext>] <file> [<file> ...] <path>'
  +    echo '           [-e<sed-cmd>] <file> [<file> ...] <path>'
       echo '  mkdir    [-t] [-f] [-p] [-m<mode>] <dir> [<dir> ...]'
       echo '  mkln     [-t] [-f] [-s] <src-path> [<src-path> ...] <dst-path>'
       echo '  mkshadow [-v] [-t] [-a] <src-dir> <dst-dir>'
       echo '  fixperm  [-v] [-t] <path> [<path> ...]'
  -    echo '  tarball  [-t] [-v] [-o <tarball>] [-c <prog>] [-d <dir>] [-u'
  -    echo '           <user>] [-g <group>] [-e <pattern>] <path> [<path> ...]'
  +    echo '  tarball  [-t] [-v] [-o<tarball>] [-c<prog>] [-d<dir>] [-u<user>]'
  +    echo '           [-g<group>] [-e<pattern>] <path> [<path> ...]'
       echo '  guessos  '
       echo '  arx      [-t] [-C<cmd>] <op> <archive> [<file> ...]'
       echo '  slo      [-p<str>] -- -L<dir> -l<lib> [-L<dir> -l<lib> ...]'
  @@ -101,7 +101,7 @@
       exit 0
   fi
   if [ ".$1" = ".-v" -o ".$1" = ."--version" ]; then
  -    echo "GNU shtool 1.5.1 (29-Jul-2000)"
  +    echo "GNU shtool 1.5.3 (19-Apr-2001)"
       exit 0
   fi
   if [ ".$1" = ".-r" -o ".$1" = ."--recreate" ]; then
  @@ -182,15 +182,15 @@
           ;;
       install )
           str_tool="install"
  -        str_usage="[-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>] [-e<ext>] <file> [<file> ...] <path>"
  +        str_usage="[-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>] [-e<sed-cmd>] <file> [<file> ...] <path>"
           arg_spec="2+"
  -        opt_spec="v.t.c.C.s.m:o:g:e:"
  +        opt_spec="v.t.c.C.s.m:o:g:e+"
           opt_v=no
           opt_t=no
           opt_c=no
           opt_C=no
           opt_s=no
  -        opt_m=""
  +        opt_m="0755"
           opt_o=""
           opt_g=""
           opt_e=""
  @@ -233,7 +233,7 @@
           ;;
       tarball )
           str_tool="tarball"
  -        str_usage="[-t] [-v] [-o <tarball>] [-c <prog>] [-d <dir>] [-u <user>] [-g <group>] [-e <pattern>] <path> [<path> ...]"
  +        str_usage="[-t] [-v] [-o<tarball>] [-c<prog>] [-d<dir>] [-u<user>] [-g<group>] [-e<pattern>] <path> [<path> ...]"
           gen_tmpfile=yes
           arg_spec="1+"
           opt_spec="t.v.o:c:d:u:g:e:"
  @@ -455,6 +455,7 @@
       tmpfile="$tmpdir/.shtool.$$"
       rm -f $tmpfile >/dev/null 2>&1
       touch $tmpfile
  +    chmod 600 $tmpfile
   fi
   
   ##
  @@ -466,7 +467,7 @@
   echo )
       ##
       ##  echo -- Print string with optional construct expansion
  -    ##  Copyright (c) 1998-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1998-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for WML as buildinfo
       ##
       
  @@ -814,7 +815,7 @@
   table )
       ##
       ##  table -- Pretty-print a field-separated list as a table
  -    ##  Copyright (c) 1998-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1998-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for Apache
       ##
       
  @@ -878,7 +879,7 @@
   prop )
       ##
       ##  prop -- Display progress with a running propeller
  -    ##  Copyright (c) 1998-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1998-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for mod_ssl
       ##
       
  @@ -923,7 +924,7 @@
   move )
       ##
       ##  move -- Move files with simultaneous substitution
  -    ##  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for shtool
       ##
       
  @@ -1015,7 +1016,7 @@
   install )
       ##
       ##  install -- Install a program, script or datafile
  -    ##  Copyright (c) 1997-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1997-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for shtool
       ##
       
  @@ -1045,19 +1046,13 @@
       for src in $srcs; do
           dst=$dstpath
       
  -        #  If destination is a directory, append the input filename
  +        #   if destination is a directory, append the input filename
           if [ $dstisdir = 1 ]; then
               dstfile=`echo "$src" | sed -e 's;.*/\([^/]*\)$;\1;'`
               dst="$dst/$dstfile"
           fi
       
  -        #  Add a possible extension to src and dst
  -        if [ ".$opt_e" != . ]; then
  -            src="$src$opt_e"
  -            dst="$dst$opt_e"
  -        fi
  -    
  -        #  Check for correct arguments
  +        #   check for correct arguments
           if [ ".$src" = ".$dst" ]; then
               echo "$msgprefix:Warning: source and destination are the same - skipped" 1>&2
               continue
  @@ -1067,18 +1062,18 @@
               continue
           fi
       
  -        #  Make a temp file name in the destination directory
  +        #   make a temp file name in the destination directory
           dsttmp=`echo $dst |\
                   sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;' -e 's;^$;.;' \
                       -e "s;\$;/#INST@$$#;"`
       
  -        #  Verbosity
  +        #   verbosity
           if [ ".$opt_v" = .yes ]; then
               echo "$src -> $dst" 1>&2
           fi
       
  -        #  Copy or move the file name to the temp name
  -        #  (because we might be not allowed to change the source)
  +        #   copy or move the file name to the temp name
  +        #   (because we might be not allowed to change the source)
           if [ ".$opt_C" = .yes ]; then
               opt_c=yes
           fi
  @@ -1094,8 +1089,16 @@
               mv $src $dsttmp || exit $?
           fi
       
  -        #  Adjust the target file
  -        #  (we do chmod last to preserve setuid bits)
  +        #   adjust the target file
  +        if [ ".$opt_e" != . ]; then
  +            sed='sed'
  +            for e in $opt_e; do
  +                sed="$sed -e '$e'"
  +            done
  +            cp $dsttmp $dsttmp.old
  +            eval "$sed <$dsttmp.old >$dsttmp" || exit $?
  +            rm -f $dsttmp.old
  +        fi
           if [ ".$opt_s" = .yes ]; then
               if [ ".$opt_t" = .yes ]; then
                   echo "strip $dsttmp" 1>&2
  @@ -1114,14 +1117,14 @@
               fi
               chgrp $opt_g $dsttmp || exit $?
           fi
  -        if [ ".$opt_m" != . ]; then
  +        if [ ".$opt_m" != ".-" ]; then
               if [ ".$opt_t" = .yes ]; then
                   echo "chmod $opt_m $dsttmp" 1>&2
               fi
               chmod $opt_m $dsttmp || exit $?
           fi
       
  -        #   Determine whether to do a quick install
  +        #   determine whether to do a quick install
           #   (has to be done _after_ the strip was already done)
           quick=no
           if [ ".$opt_C" = .yes ]; then
  @@ -1132,7 +1135,7 @@
               fi
           fi
       
  -        #   Finally install the file to the real destination
  +        #   finally, install the file to the real destination
           if [ $quick = yes ]; then
               if [ ".$opt_t" = .yes ]; then
                   echo "rm -f $dsttmp" 1>&2
  @@ -1150,7 +1153,7 @@
   mkdir )
       ##
       ##  mkdir -- Make one or more directories
  -    ##  Copyright (c) 1996-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1996-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for public domain by Noah Friedman <friedman@prep.ai.mit.edu>
       ##  Cleaned up and enhanced for shtool
       ##
  @@ -1159,7 +1162,7 @@
       for p in ${1+"$@"}; do
           #   if the directory already exists...
           if [ -d "$p" ]; then
  -            if [ ".$opt_f" = .no ] && [ ".$opt_p" = .no ]; then
  +            if [ ".$opt_f" = .no -a ".$opt_p" = .no ]; then
                   echo "$msgprefix:Error: directory already exists: $p" 1>&2
                   errstatus=1
                   break
  @@ -1173,6 +1176,12 @@
                   echo "mkdir $p" 1>&2
               fi
               mkdir $p || errstatus=$?
  +            if [ ".$opt_m" != . ]; then
  +                if [ ".$opt_t" = .yes ]; then
  +                    echo "chmod $opt_m $p" 1>&2
  +                fi
  +                chmod $opt_m $p || errstatus=$?
  +            fi
           else
               #   the smart situation
               set fnord `echo ":$p" |\
  @@ -1209,7 +1218,7 @@
   mkln )
       ##
       ##  mkln -- Make link with calculation of relative paths
  -    ##  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for shtool
       ##
       
  @@ -1287,12 +1296,12 @@
       
           #   split away a common prefix
           prefix=""
  -        if [ ".$srcdir" = ".$dstdir" ] && [ ".$srcdir" != . ]; then
  +        if [ ".$srcdir" = ".$dstdir" -a ".$srcdir" != . ]; then
               prefix="$srcdir/"
               srcdir=""
               dstdir=""
           else
  -            while [ ".$srcdir" != . ] && [ ".$dstdir" != . ]; do
  +            while [ ".$srcdir" != . -a ".$dstdir" != . ]; do
                   presrc=`echo $srcdir | sed -e 's;^\([^/]*\)/.*;\1;'`
                   predst=`echo $dstdir | sed -e 's;^\([^/]*\)/.*;\1;'`
                   if [ ".$presrc" != ".$predst" ]; then
  @@ -1348,7 +1357,7 @@
   mkshadow )
       ##
       ##  mkshadow -- Make a shadow tree through symbolic links
  -    ##  Copyright (c) 1998-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1998-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for Apache
       ##
       
  @@ -1465,7 +1474,7 @@
   fixperm )
       ##
       ##  fixperm -- Fix file permissions inside a source tree
  -    ##  Copyright (c) 1996-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1996-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for ePerl
       ##
       
  @@ -1521,7 +1530,7 @@
   tarball )
       ##
       ##  tarball -- Roll distribution tarballs
  -    ##  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for shtool
       ##
       
  @@ -1547,7 +1556,7 @@
           for tool in `echo $tools | sed -e 's/,/ /g'`; do
               #   iterate over paths
               for path in $paths; do
  -                if [ $minusx "$path/$tool" ] && [ ! -d "$path/$tool" ]; then
  +                if [ $minusx "$path/$tool" -a ! -d "$path/$tool" ]; then
                       eval "prg_${prg}=\"$path/$tool\""
                       break
                   fi
  @@ -1573,7 +1582,7 @@
               if [ ".$opt_t" = .yes ]; then
                   echo "(cd $src && $prg_find . -type f -depth -print) | sed -e 's:^\\.\$::' -e 's:^\\./::' | cat $exclude >>$tmpfile.lst" 1>&2
               fi
  -            (cd $src && find . -type f -depth -print) |\
  +            (cd $src && $prg_find . -type f -depth -print) |\
               sed -e 's:^\.$::' -e 's:^\./::' | eval cat $exclude >>$tmpfile.lst
           else
               if [ ".$opt_t" = .yes ]; then
  @@ -1747,6 +1756,7 @@
               ;;
           HP-UX:*)
               HPUXVER=`echo ${RELEASE}|sed -e 's/[^.]*.[0B]*//'`
  +            MACHINE=`echo ${MACHINE}|sed -e 's:/:_:'`
               echo "${MACHINE}-hp-hpux${HPUXVER}"; exit 0
               ;;
           IRIX:*)
  @@ -1930,7 +1940,7 @@
   arx )
       ##
       ##  arx -- Extended archive command
  -    ##  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for shtool
       ##
       
  @@ -2008,7 +2018,7 @@
   slo )
       ##
       ##  slo -- Separate linker options by library class
  -    ##  Copyright (c) 1998-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1998-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for Apache
       ##
       
  @@ -2057,7 +2067,7 @@
       LIBS_DSO=''
       
       #    for each library...
  -    OIFS="$IFS" IFS=':'
  +    OIFS="$IFS"; IFS=':'
       for lib in $LIBS; do
           [ ".$lib" = . ] && continue
       
  @@ -2067,14 +2077,14 @@
           found_dir=''
       
           #    for each directory...
  -        OIFS2="$IFS" IFS=":$DIFS"
  +        OIFS2="$IFS"; IFS=":$DIFS"
           for dir in ${DIRS} switch-to-defdirs ${DIRS_DEFAULT}; do
               [ ".$dir" = . ] && continue
               [ ".$dir" = .switch-to-defdirs ] && found_indefdir=yes
               [ ! -d $dir ] && continue
       
               #    search the file
  -            OIFS3="$IFS" IFS="$DIFS"
  +            OIFS3="$IFS"; IFS="$DIFS"
               for file in '' `cd $dir && ls lib${lib}.* 2>/dev/null`; do
                    [ ".$file" = . ] && continue
                    case $file in
  @@ -2123,7 +2133,7 @@
       IFS="$OIFS"
       
       #   also pass-through unused dirs even if it's useless
  -    OIFS="$IFS" IFS=':'
  +    OIFS="$IFS"; IFS=':'
       for dir in $DIRS; do
           dirlist="${DIRS_OBJ}:${DIRS_PIC}:${DIRS_DSO}:"
           if [ ".`echo \"$dirlist\" | fgrep :$dir:`" = . ]; then
  @@ -2134,7 +2144,7 @@
       
       #   reassemble the options but separated by type
       for type in OBJ PIC DSO; do
  -        OIFS="$IFS" IFS=':'
  +        OIFS="$IFS"; IFS=':'
           eval "libs=\"\$LIBS_${type}\""
           opts=''
           for lib in $libs; do
  @@ -2164,7 +2174,7 @@
   scpp )
       ##
       ##  scpp -- Sharing C Pre-Processor
  -    ##  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for GNU Pth
       ##
       
  @@ -2377,7 +2387,7 @@
   version )
       ##
       ##  version -- Maintain a version information file
  -    ##  Copyright (c) 1994-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1994-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for ePerl, rewritten from scratch for shtool
       ##
       
  @@ -2535,7 +2545,7 @@
           vGNU="${name} ${triple} (${tim})"
           vWeb="${name}/${triple}"
           vSCCS="@(#)${name} ${triple} (${tim})"
  -        vRCS="\$Id: shtool,v 1.1.1.1 2001/05/10 19:46:01 rse Exp ${name} ${triple} (${tim}) \$"
  +        vRCS="\$Id: shtool,v 1.2 2001/05/21 19:29:01 rse Exp ${name} ${triple} (${tim}) \$"
       
           #   determine string out of filename
           #   (do NOT try to optimize this in any way because of portability)
  @@ -2655,7 +2665,7 @@
   path )
       ##
       ##  path -- Deal with program paths
  -    ##  Copyright (c) 1998-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1998-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for Apache
       ##
       
  @@ -2705,7 +2715,7 @@
       
       #   MAGIC SITUATION
       #   Perl Interpreter (perl)
  -    if [ ".$opt_m" = .yes ] && [ ".$namelist" = .perl ]; then
  +    if [ ".$opt_m" = .yes  -a ".$namelist" = .perl ]; then
           rm -f $tmpfile
           touch $tmpfile
           found=0
  @@ -2714,7 +2724,7 @@
               dir=`echo $dir | sed -e 's;/*$;;'`
               nc=99
               for name in perl perl5 miniperl; do
  -                 if [ $minusx "$dir/$name" ] && [ ! -d "$dir/$name" ]; then
  +                 if [ $minusx "$dir/$name" -a ! -d "$dir/$name" ]; then
                        perl="$dir/$name"
                        pv=`$perl -e 'printf("%.3f", $]);'`
                        echo "$pv:$pc:$nc:$perl" >>$tmpfile
  @@ -2735,7 +2745,7 @@
       
       #   MAGIC SITUATION
       #   C pre-processor (cpp)
  -    if [ ".$opt_m" = .yes ] && [ ".$namelist" = .cpp ]; then
  +    if [ ".$opt_m" = .yes -a ".$namelist" = .cpp ]; then
           echo >$tmpfile.c "#include <assert.h>"
           echo >>$tmpfile.c "Syntax Error"
           #   1. try the standard cc -E approach
  @@ -2751,7 +2761,7 @@
                   #   3. try a standalone cpp command in path and lib dirs
                   for path in $paths /lib /usr/lib /usr/local/lib; do
                       path=`echo $path | sed -e 's;/*$;;'`
  -                    if [ $minusx "$path/cpp" ] && [ ! -d "$path/cpp" ]; then
  +                    if [ $minusx "$path/cpp" -a ! -d "$path/cpp" ]; then
                           cpp="$path/cpp"
                           break
                       fi
  @@ -2780,7 +2790,7 @@
           #   iterate over paths
           for path in $paths; do
               path=`echo $path | sed -e 's;/*$;;'`
  -            if [ $minusx "$path/$name" ] && [ ! -d "$path/$name" ]; then
  +            if [ $minusx "$path/$name" -a ! -d "$path/$name" ]; then
                   if [ ".$opt_s" != .yes ]; then
                       echo "$path/$name"
                   fi

From ossp-cvs-owner@ossp.org  Mon May 21 22:15:14 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f4LKFBI10352; Mon, 21 May 2001 22:15:11 +0200 (CEST)
Date: Mon, 21 May 2001 22:15:11 +0200 (CEST)
Message-Id: <200105212015.f4LKFBI10352@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_file.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   21-May-2001 22:15:11
  Branch: HEAD                             Handle: 2001052121151100

  Modified files:
    ossp-pkg/l2             l2_ch_file.c

  Log:
    Simplify the file handler, because a NULL ctx cannot happen at all.

  Summary:
    Revision    Changes     Path
    1.4         +0  -10     ossp-pkg/l2/l2_ch_file.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_file.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 l2_ch_file.c
  --- ossp-pkg/l2/l2_ch_file.c	2001/05/19 20:14:15	1.3
  +++ ossp-pkg/l2/l2_ch_file.c	2001/05/21 20:15:11	1.4
  @@ -71,8 +71,6 @@
       l2_error_t rv;
   
       /* parameter checks */
  -    if (ctx == NULL)
  -        return L2_ERROR;
       if ((cfg = (l2_ch_file_t *)ctx->vp) == NULL)
           return L2_ERROR;
   
  @@ -93,8 +91,6 @@
       int mode;
   
       /* parameter checks */
  -    if (ctx == NULL)
  -        return L2_ERROR;
       if ((cfg = (l2_ch_file_t *)ctx->vp) == NULL)
           return L2_ERROR;
       if (cfg->path == NULL)
  @@ -122,8 +118,6 @@
       l2_ch_file_t *cfg;
   
       /* parameter checks */
  -    if (ctx == NULL)
  -        return L2_ERROR;
       if ((cfg = (l2_ch_file_t *)ctx->vp) == NULL)
           return L2_ERROR;
       if (cfg->fd == -1)
  @@ -165,8 +159,6 @@
               return L2_ERROR;
   
       /* parameter checks */
  -    if (ctx == NULL)
  -        return L2_ERROR;
       if ((cfg = (l2_ch_file_t *)ctx->vp) == NULL)
           return L2_ERROR;
       if (cfg->fd == -1)
  @@ -183,8 +175,6 @@
   static int hook_destroy(l2_context_t *ctx)
   {
       /* parameter checks */
  -    if (ctx == NULL)
  -        return L2_ERROR;
       if (ctx->vp == NULL) 
           return L2_ERROR;
   

From ossp-cvs-owner@ossp.org  Tue May 22 16:36:07 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f4MEa5R47968; Tue, 22 May 2001 16:36:05 +0200 (CEST)
Date: Tue, 22 May 2001 16:36:05 +0200 (CEST)
Message-Id: <200105221436.f4MEa5R47968@ossp.org>
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   OSSP Project Master
  Root:   /e/ossp/cvs                      Email:  ossp@ossp.org
  Module: CVSROOT                          Date:   22-May-2001 16:36:05
  Branch: HEAD                             Handle: 2001052215360500

  Modified files:
    CVSROOT                 modules

  Log:
    add erpc

  Summary:
    Revision    Changes     Path
    1.24        +1  -0      CVSROOT/modules
  ____________________________________________________________________________

  Index: CVSROOT/modules
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 modules
  --- CVSROOT/modules	2001/05/10 19:51:32	1.23
  +++ CVSROOT/modules	2001/05/22 14:36:05	1.24
  @@ -73,4 +73,5 @@
   str             ossp-pkg/str
   sugar           ossp-pkg/sugar
   l2              ossp-pkg/l2
  +erpc            ossp-pkg/erpc
   

From ossp-cvs-owner@ossp.org  Tue May 22 16:36:33 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f4MEaWc48033; Tue, 22 May 2001 16:36:32 +0200 (CEST)
Date: Tue, 22 May 2001 16:36:32 +0200 (CEST)
Message-Id: <200105221436.f4MEaWc48033@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/erpc TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   22-May-2001 16:36:32
  Branch: HEAD                             Handle: 2001052215363200

  Added files:
    ossp-pkg/erpc           TODO

  Log:
    add todo

  Summary:
    Revision    Changes     Path
    1.1         +27 -0      ossp-pkg/erpc/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/erpc/TODO
  ============================================================
  $ cvs update -p -r1.1 TODO
  
  Efficient RPC (E-RPC)
  =====================
  
  Architecture:
  - libeprc
  - libserialize
  
  o M1 (peti) [11-Jun-2001]
    - evaluation (-> ideas)
      (checklist)
    - prototype 
      (C++)
  o M2 (peti+rse) [02-Jul-2001]
    - design/architecture paper (authentication+encryption framework)
      (< 10KB Text + 1x Figure)
    - rpc protocol (ohne serialization)
      (< 5KB Text)
    - API specification (erpc.h, serial.h)
  o M3 (peti)
    - source tree
    - implementation
  o M4 (rse)
    - OSSP integration/adjustierung
  o M5 (peti)
    - documentation
  

From ossp-cvs-owner@ossp.org  Tue May 22 16:38:28 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f4MEcRw48195; Tue, 22 May 2001 16:38:27 +0200 (CEST)
Date: Tue, 22 May 2001 16:38:27 +0200 (CEST)
Message-Id: <200105221438.f4MEcRw48195@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/erpc TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   22-May-2001 16:38:26
  Branch: HEAD                             Handle: 2001052215382600

  Modified files:
    ossp-pkg/erpc           TODO

  Log:
    Removed unnecessary whitespace.

  Summary:
    Revision    Changes     Path
    1.2         +1  -3      ossp-pkg/erpc/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/erpc/TODO
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 TODO
  --- ossp-pkg/erpc/TODO	2001/05/22 14:36:32	1.1
  +++ ossp-pkg/erpc/TODO	2001/05/22 14:38:26	1.2
  @@ -1,4 +1,3 @@
  -
   Efficient RPC (E-RPC)
   =====================
   
  @@ -9,7 +8,7 @@
   o M1 (peti) [11-Jun-2001]
     - evaluation (-> ideas)
       (checklist)
  -  - prototype 
  +  - prototype
       (C++)
   o M2 (peti+rse) [02-Jul-2001]
     - design/architecture paper (authentication+encryption framework)
  @@ -24,4 +23,3 @@
     - OSSP integration/adjustierung
   o M5 (peti)
     - documentation
  -

From ossp-cvs-owner@ossp.org  Tue May 22 16:45:32 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f4MEjV849117; Tue, 22 May 2001 16:45:31 +0200 (CEST)
Date: Tue, 22 May 2001 16:45:31 +0200 (CEST)
Message-Id: <200105221445.f4MEjV849117@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/erpc EVAL
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   22-May-2001 16:45:31
  Branch: HEAD                             Handle: 2001052215453100

  Added files:
    ossp-pkg/erpc           EVAL

  Log:
    *** empty log message ***

  Summary:
    Revision    Changes     Path
    1.1         +53 -0      ossp-pkg/erpc/EVAL
  ____________________________________________________________________________

  Index: ossp-pkg/erpc/EVAL
  ============================================================
  $ cvs update -p -r1.1 EVAL
  
  Evaluation
  ==========
  
  o Spread
    http://www.spread.org/
  
  o XML-RPC:
    http://www.xmlrpc.org/
    http://www.focusresearch.com/gregor/sw/XPC/
    http://xmlrpc-c.sourceforge.net/
  
  o SunRPC
    rfc1050.txt
    rfc1057.txt
    rfc1790.txt
    rfc1831.txt
    rfc1833.txt
    rfc2203.txt
    rfc2695.txt
  
  o SRA
    Secure RPC Authentication for TELNET and FTP
    net.tamu.edu:pub/security/TAMU/
  
  o RPC2
    ftp://ftp.coda.cs.cmu.edu/pub/rpc2/
  
  o MRPC
    http://www.tildeslash.org/mrpc.html
    http://www.tildeslash.org/mrpc/
  
  o LinuxDoors
    http://www.rampant.org/doors/
  
  o DCERPC
    ftp://gatekeeper.dec.com/pub/DEC/DCE/
  
  RSE:
  ----
  
  ORBit ...... nice ORBit 2.2 implementation in C, but undocumented
  FreeBSD .... the most clean RPC, but only RPCv1
  SunRPC40 ... too old, FreeBSD's code is much more feature-full and portable, RPCv1
  NetBSD ..... very similar to FreeBSD code with a few addons "long long", but less clean, RPCv1
  tirpc ...... Transport Layer Independent RPC, but unportable and old
  RPC2 ....... nice concept, but neither RPCv1 nor RPC2 and requires LWP library
               and is also bundled strongly with it
  MRPC ....... modular architecture (tranport layer interchangeable), but
               depends on re2c and is implemented in cpp, neither RPCv1 nor RPCv2
  XMLRPC ..... taugt nicht, nur nettes Konzept, keine C Implementierung,
               starker Overhead, etc.
   

From ossp-cvs-owner@ossp.org  Tue May 22 20:47:33 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f4MIlWW76935; Tue, 22 May 2001 20:47:32 +0200 (CEST)
Date: Tue, 22 May 2001 20:47:32 +0200 (CEST)
Message-Id: <200105221847.f4MIlWW76935@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 Makefile.in l2.h l2_ch_file.c l2_channel.c l2_...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   22-May-2001 20:47:32
  Branch: HEAD                             Handle: 19700101010000990553651

  Modified files:
    ossp-pkg/l2             Makefile.in l2.h l2_ch_file.c l2_channel.c
                            l2_stream.c
  Removed files:
    ossp-pkg/l2             l2_log.c l2_param.c

  Log:
    Simplify things by merging the parameter stuff into l2_channel.c and the
    l2_stream_t related things into l2_stream.c

  Summary:
    Revision    Changes     Path
    1.7         +0  -2      ossp-pkg/l2/Makefile.in
    1.4         +2  -2      ossp-pkg/l2/l2.h
    1.5         +1  -1      ossp-pkg/l2/l2_ch_file.c
    1.2         +68 -0      ossp-pkg/l2/l2_channel.c
    NONE        +0  -0      ossp-pkg/l2/l2_log.c
    NONE        +0  -0      ossp-pkg/l2/l2_param.c
    1.3         +54 -19     ossp-pkg/l2/l2_stream.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 Makefile.in
  --- ossp-pkg/l2/Makefile.in	2001/05/19 20:08:30	1.6
  +++ ossp-pkg/l2/Makefile.in	2001/05/22 18:47:31	1.7
  @@ -63,10 +63,8 @@
   
   #   list of library object files
   OBJS = \
  -    l2_log.lo \
       l2_stream.lo \
       l2_channel.lo \
  -    l2_param.lo \
       l2_ch_fd.lo \
       l2_ch_file.lo \
       l2_ch_pipe.lo \
  Index: ossp-pkg/l2/l2.h
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 l2.h
  --- ossp-pkg/l2/l2.h	2001/05/19 20:08:30	1.3
  +++ ossp-pkg/l2/l2.h	2001/05/22 18:47:31	1.4
  @@ -151,17 +151,17 @@
   extern l2_handler_t l2_handler_buffer;
   
   /* parameter operations */
  -int           l2_param_parse      (l2_param_t p[], const char *fmt, va_list ap);
   
   /* channel operations */
   l2_channel_t *l2_channel_create   (l2_handler_t *h);
  -l2_channel_t *l2_channel_stack    (l2_channel_t *ch1, l2_channel_t *ch2);
   int           l2_channel_configure(l2_channel_t *ch, const char *fmt, ...);
   int           l2_channel_open     (l2_channel_t *ch);
   int           l2_channel_write    (l2_channel_t *ch, const char *buf, size_t bufsize);
   int           l2_channel_flush    (l2_channel_t *ch);
   int           l2_channel_close    (l2_channel_t *ch);
   int           l2_channel_destroy  (l2_channel_t *ch);
  +l2_channel_t *l2_channel_stack    (l2_channel_t *ch1, l2_channel_t *ch2);
  +int           l2_channel_setparams(l2_param_t p[], const char *fmt, va_list ap);
   
   /* stream operations */
   l2_stream_t  *l2_stream_create    (void);
  Index: ossp-pkg/l2/l2_ch_file.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 l2_ch_file.c
  --- ossp-pkg/l2/l2_ch_file.c	2001/05/21 20:15:11	1.4
  +++ ossp-pkg/l2/l2_ch_file.c	2001/05/22 18:47:31	1.5
  @@ -79,7 +79,7 @@
       L2_PARAM_SET(pa[1], append, INT,     &cfg->append);
       L2_PARAM_SET(pa[1], perm,   LONG,    &cfg->perm);
       L2_PARAM_END(pa[2]);
  -    rv = l2_param_parse(pa, fmt, ap);
  +    rv = l2_channel_setparams(pa, fmt, ap);
   
       return rv;
   }
  Index: ossp-pkg/l2/l2_channel.c
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 l2_channel.c
  --- ossp-pkg/l2/l2_channel.c	2001/05/10 19:46:01	1.1.1.1
  +++ ossp-pkg/l2/l2_channel.c	2001/05/22 18:47:31	1.2
  @@ -134,3 +134,71 @@
       return rv;
   }
   
  +int l2_channel_setparams(l2_param_t pa[], const char *fmt, va_list ap)
  +{
  +    const char *cpB, *cpE;
  +    const char *cpC, *cpG;
  +    int ok;
  +    int i; 
  +
  +    cpE = fmt;
  +    while (*cpE != '\0') {
  +        /* determine begin of parameter name */
  +        cpB = cpE;
  +        while (*cpB == ',')
  +            cpB++;
  +
  +        /* determine end of parameter name */
  +        cpE = cpB;
  +        while (*cpE != ',' && *cpE != '\0')
  +            cpE++;
  +
  +        /* try to match with configured parameters */
  +        ok = FALSE;
  +        for (i = 0; pa[i].name != NULL; i++) {
  +            cpC = pa[i].name;
  +            cpG = cpB;
  +            while (*cpC != '\0' && cpG < cpE) {
  +                if (*cpC != *cpG)
  +                    break;
  +                cpC++;
  +                cpG++;
  +            }
  +            if (*cpC == '\0' && cpG == cpE) {
  +                /* parameter matched, so store value */
  +                switch (pa[i].type) {
  +                    case L2_TYPE_CHAR:
  +                        *(char *)(pa[i].store) = va_get(ap, char); 
  +                        break;
  +                    case L2_TYPE_SHORT:
  +                        *(short *)(pa[i].store) = va_get(ap, short); 
  +                        break;
  +                    case L2_TYPE_INT:
  +                        *(int *)(pa[i].store) = va_get(ap, int); 
  +                        break;
  +                    case L2_TYPE_LONG:
  +                        *(long *)(pa[i].store) = va_get(ap, long); 
  +                        break;
  +                    case L2_TYPE_FLOAT:
  +                        *(float *)(pa[i].store) = va_get(ap, float); 
  +                        break;
  +                    case L2_TYPE_DOUBLE:
  +                        *(double *)(pa[i].store) = va_get(ap, double); 
  +                        break;
  +                    case L2_TYPE_CHARPTR:
  +                        *(char **)(pa[i].store) = va_get(ap, charptr); 
  +                        break;
  +                    case L2_TYPE_VOIDPTR:
  +                        *(void **)(pa[i].store) = va_get(ap, voidptr); 
  +                        break;
  +                }
  +                ok = TRUE;
  +                break;
  +            }
  +        }
  +        if (!ok)
  +            return L2_ERROR;
  +    }
  +    return L2_OK;
  +}
  +
      Index: ossp-pkg/l2/l2_stream.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2_stream.c
  --- ossp-pkg/l2/l2_stream.c	2001/05/17 14:43:26	1.2
  +++ ossp-pkg/l2/l2_stream.c	2001/05/22 18:47:31	1.3
  @@ -31,32 +31,67 @@
   #include "l2.h"
   #include "l2_p.h"
   
  -l2_stream_t* l2_stream_create(void)
  -    {
  +l2_stream_t *l2_stream_create(void)
  +{
       l2_stream_t *st;
  -    st = (l2_stream_t *)malloc(sizeof(l2_stream_t));
  -    if (!st)
  +    
  +    if ((st = (l2_stream_t *)malloc(sizeof(l2_stream_t))) == NULL)
           return NULL;
       memset(st, 0, sizeof(l2_stream_t));
       return st;
  -    }
  +}
   
  -void l2_stream_destroy(l2_stream_t* st)
  -    {
  +l2_stream_t *l2_stream_channel(l2_stream_t *st, l2_channel_t *ch, unsigned int levelmask)
  +{
       size_t i;
  -    for (i = 0; i <= L2_MAX_CHANNELS && st->channels[i]; ++i)
  -	l2_channel_destroy(st->channels[i]);
  -    for (i = 0; i <= L2_MAX_FORMATTERS && st->formatters[i]; ++i)
  -	free(st->formatters[i]);
  -    }
   
  -l2_stream_t* l2_stream_channel(l2_stream_t *st, l2_channel_t *ch, unsigned int levelmask)
  -    {
  -    size_t i;
  -    for (i = 0; i <= L2_MAX_CHANNELS && st->channels[i]; ++i)
  -	;
  +    for (i = 0; i <= L2_MAX_CHANNELS && st->channels[i] != NULL; i++)
  +        ;
       if (i == L2_MAX_CHANNELS)
  -	return 0;		/* Array is full. */
  +        return NULL;
       st->channels[i] = ch;
       return st;
  -    }
  +}
  +
  +l2_stream_t *l2_stream_formatter(l2_stream_t *st, l2_formatter_t *cb, l2_context_t *ctx)
  +{
  +    return NULL;
  +}
  +
  +unsigned int l2_stream_levels(l2_stream_t *st, unsigned int levelmask)
  +{
  +    return 0;
  +}
  +
  +void l2_stream_log(l2_stream_t *st, unsigned int log_level, const char *fmt, ...)
  +{
  +    va_list ap;
  +    va_start(ap, fmt);
  +    l2_stream_vlog(st, log_level, fmt, ap);
  +    va_end(ap);
  +    return;
  +}
  +
  +void l2_stream_vlog(l2_stream_t *st, unsigned int log_level, const char *fmt, va_list ap)
  +{
  +    size_t i, len;
  +
  +    len = vsnprintf(st->message, L2_MAX_MSGSIZE, fmt, ap);
  +    for (i = 0; i <= L2_MAX_CHANNELS && st->channels[i] != NULL; i++)
  +        st->channels[i]->handler.write(&st->channels[i]->context,
  +                                       st->channels[i]->below,
  +                                       st->message, len);
  +    return;
  +}
  +
  +void l2_stream_destroy(l2_stream_t *st)
  +{
  +    size_t i;
  +
  +    for (i = 0; i <= L2_MAX_CHANNELS && st->channels[i] != NULL; i++)
  +        l2_channel_destroy(st->channels[i]);
  +    for (i = 0; i <= L2_MAX_FORMATTERS && st->formatters[i] != NULL; i++)
  +        free(st->formatters[i]);
  +    return;
  +}
  +

From ossp-cvs-owner@ossp.org  Tue May 22 21:26:14 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f4MJQCK81080; Tue, 22 May 2001 21:26:12 +0200 (CEST)
Date: Tue, 22 May 2001 21:26:12 +0200 (CEST)
Message-Id: <200105221926.f4MJQCK81080@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela ChangeLog shiela.pl
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   22-May-2001 21:26:12
  Branch: HEAD                             Handle: 2001052220261200

  Modified files:
    ossp-pkg/shiela         ChangeLog shiela.pl

  Log:
    fix shiela for removed files

  Summary:
    Revision    Changes     Path
    1.6         +3  -0      ossp-pkg/shiela/ChangeLog
    1.10        +14 -2      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/ChangeLog
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	2001/05/11 19:53:45	1.5
  +++ ossp-pkg/shiela/ChangeLog	2001/05/22 19:26:12	1.6
  @@ -10,6 +10,9 @@
     ChangeLog
   
     Changes between 0.9.1 and 0.9.2 (10-Feb-2001 to 04-May-2001):
  +  
  +   *) Fixed +d/-d output on removed files.
  +      [Ralf S. Engelschall]
   
      *) Fixed meta character handling in regex matchings.
         [Ralf S. Engelschall]
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	2001/05/12 07:26:54	1.9
  +++ ossp-pkg/shiela/shiela.pl	2001/05/22 19:26:12	1.10
  @@ -1553,18 +1553,30 @@
               $Id = 'BLOB';
           }
           else {
  -            if ($Io eq 'A' or $Io eq 'R') {
  +            if ($Io eq 'A') {
                   open(FP, "<$Is"); 
                   my $l = 0;
                   $l++ while (<FP>);
                   close(FP);
  -                $Id = sprintf("+%d/-%d", ($Io eq 'A' ? $l : 0), ($Io eq 'A' ? 0 : $l));
  +                $Id = sprintf("+%d/-%d", $l, 0);
               }
               elsif ($Io eq 'M') {
                   if ($rcslog =~ m|\ndate:.*lines:\s*([\d \t+-]+)|s) {
                       $Id = $1;
                       $Id =~ s|\s+|/|g;
                   }
  +            }
  +            elsif ($Io eq 'R') {
  +                my $cvs = new CVS ($RT->{cvs}, $RT->{cvsroot});
  +                $cvs->directory($cvsdir);
  +                $cvs->entry($Is);
  +                $cvs->arguments("-p", "-r$IV", $Is);
  +                $cvs->send("update");
  +                my $f = scalar $cvs->result;
  +                $cvs->close;
  +                my $l = 0;
  +                $f =~ s|\n|$l++|sge;
  +                $Id = sprintf("+%d/-%d", 0, $l);
               }
           }
   

From ossp-cvs-owner@ossp.org  Tue May 22 22:00:14 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f4MK0CD84987; Tue, 22 May 2001 22:00:12 +0200 (CEST)
Date: Tue, 22 May 2001 22:00:12 +0200 (CEST)
Message-Id: <200105222000.f4MK0CD84987@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_buffer.c l2_channel.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   22-May-2001 22:00:12
  Branch: HEAD                             Handle: 2001052221001200

  Modified files:
    ossp-pkg/l2             l2_ch_buffer.c l2_channel.c

  Log:
    Implement a first cut for a buffer channel (still untested).

  Summary:
    Revision    Changes     Path
    1.3         +93 -6      ossp-pkg/l2/l2_ch_buffer.c
    1.3         +4  -0      ossp-pkg/l2/l2_channel.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_buffer.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2_ch_buffer.c
  --- ossp-pkg/l2/l2_ch_buffer.c	2001/05/11 17:07:52	1.2
  +++ ossp-pkg/l2/l2_ch_buffer.c	2001/05/22 20:00:12	1.3
  @@ -30,39 +30,126 @@
   #include "l2.h"
   #include "l2_p.h"
   
  +#include <string.h>
  +
  +typedef struct {
  +    char  *buf;
  +    int    bufpos;
  +    int    bufsize;
  +} l2_ch_buffer_t;
  +
   static int hook_create(l2_context_t *ctx)
   {
  +    l2_ch_buffer_t *cfg;
  +
  +    if ((cfg = (l2_ch_buffer_t *)malloc(sizeof(l2_ch_buffer_t))) == NULL)
  +        return L2_ERROR;
  +    cfg->buf     = NULL;
  +    cfg->bufpos  = 0;
  +    cfg->bufsize = 4096;
  +    ctx->vp = cfg;
       return L2_OK;
   }
   
   static int hook_configure(l2_context_t *ctx, const char *fmt, va_list ap)
   {
  -    return L2_OK;
  +    l2_ch_buffer_t *cfg;
  +    l2_param_t pa[3]; 
  +    l2_error_t rv;
  +
  +    if ((cfg = (l2_ch_buffer_t *)ctx->vp) == NULL)
  +        return L2_ERROR;
  +    L2_PARAM_SET(pa[0], size, INT, &cfg->bufsize);
  +    L2_PARAM_END(pa[2]);
  +    rv = l2_channel_setparams(pa, fmt, ap);
  +    if (cfg->bufsize < 0) 
  +        return L2_ERROR;
  +    return rv;
   }
   
  -static int hook_open(l2_context_t *ctx, l2_channel_t *below)
  +static int hook_open(l2_context_t *ctx, l2_channel_t *downstream)
   {
  +    l2_ch_buffer_t *cfg;
  +
  +    if ((cfg = (l2_ch_buffer_t *)ctx->vp) == NULL)
  +        return L2_ERROR;
  +    if (cfg->bufsize > 0) {
  +        if ((cfg->buf = malloc(cfg->bufsize)) == NULL)
  +            return L2_ERROR;
  +        cfg->bufpos = 0;
  +    }
  +    if (downstream != NULL)
  +        if (l2_channel_open(downstream) == L2_ERROR)
  +            return L2_ERROR;
       return L2_OK;
   }
   
  -static int hook_write(l2_context_t *ctx, l2_channel_t *below, 
  -                      const char *buf, size_t buf_size)
  +static int hook_write(l2_context_t *ctx, l2_channel_t *downstream, 
  +                      const char *buf, size_t bufsize)
   {
  +    l2_ch_buffer_t *cfg;
  +
  +    if ((cfg = (l2_ch_buffer_t *)ctx->vp) == NULL)
  +        return L2_ERROR;
  +
  +    if (bufsize > (cfg->bufsize - cfg->bufpos)) {
  +        if (downstream != NULL)
  +            if (l2_channel_write(downstream, cfg->buf, cfg->bufpos) == L2_ERROR)
  +                return L2_ERROR;
  +        cfg->bufpos = 0;
  +    }
  +
  +    memcpy(cfg->buf+cfg->bufpos, buf, bufsize);
  +    cfg->bufpos += bufsize;
  +
       return L2_OK;
   }
   
  -static int hook_flush(l2_context_t *ctx, l2_channel_t *below)
  +static int hook_flush(l2_context_t *ctx, l2_channel_t *downstream)
   {
  +    l2_ch_buffer_t *cfg;
  +
  +    if ((cfg = (l2_ch_buffer_t *)ctx->vp) == NULL)
  +        return L2_ERROR;
  +
  +    if (cfg->bufpos > 0) {
  +        if (downstream != NULL)
  +            if (l2_channel_write(downstream, cfg->buf, cfg->bufpos) == L2_ERROR)
  +                return L2_ERROR;
  +        cfg->bufpos = 0;
  +    }
  +
  +    if (downstream != NULL)
  +        if (l2_channel_flush(downstream) == L2_ERROR)
  +            return L2_ERROR;
       return L2_OK;
   }
   
  -static int hook_close(l2_context_t *ctx, l2_channel_t *below)
  +static int hook_close(l2_context_t *ctx, l2_channel_t *downstream)
   {
  +    l2_ch_buffer_t *cfg;
  +
  +    if (downstream != NULL)
  +        if (l2_channel_close(downstream) == L2_ERROR)
  +            return L2_ERROR;
  +    if ((cfg = (l2_ch_buffer_t *)ctx->vp) == NULL)
  +        return L2_ERROR;
  +    if (cfg->buf != NULL) {
  +        free(cfg->buf);
  +        cfg->buf = NULL;
  +    }
       return L2_OK;
   }
   
   static int hook_destroy(l2_context_t *ctx)
   {
  +    l2_ch_buffer_t *cfg;
  +
  +    if ((cfg = (l2_ch_buffer_t *)ctx->vp) == NULL)
  +        return L2_ERROR;
  +    if (cfg->buf != NULL) 
  +        free(cfg->buf);
  +    free(cfg);
       return L2_OK;
   }
   
  Index: ossp-pkg/l2/l2_channel.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2_channel.c
  --- ossp-pkg/l2/l2_channel.c	2001/05/22 18:47:31	1.2
  +++ ossp-pkg/l2/l2_channel.c	2001/05/22 20:00:12	1.3
  @@ -95,6 +95,10 @@
           ch = ch->below;
       if (ch == NULL)
           return L2_ERROR;
  +    if (buf == NULL)
  +        return L2_ERROR;
  +    if (bufsize == 0)
  +        return L2_OK;
       return ch->handler.write(&ch->context, ch->below, buf, bufsize);
   }
   

From ossp-cvs-owner@ossp.org  Wed May 23 23:44:34 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f4NLiWi76548; Wed, 23 May 2001 23:44:32 +0200 (CEST)
Date: Wed, 23 May 2001 23:44:32 +0200 (CEST)
Message-Id: <200105232144.f4NLiWi76548@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   23-May-2001 23:44:32
  Branch: HEAD                             Handle: 2001052322443200

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    test commit

  Summary:
    Revision    Changes     Path
    1.4         +1  -0      ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 TODO
  --- ossp-pkg/l2/TODO	2001/05/19 10:23:32	1.3
  +++ ossp-pkg/l2/TODO	2001/05/23 21:44:32	1.4
  @@ -2,6 +2,7 @@
   OSSP L2
   =======
   
  +
   Timeplan
   --------
   

From ossp-cvs-owner@ossp.org  Thu May 24 11:40:31 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f4O9eTt64168; Thu, 24 May 2001 11:40:29 +0200 (CEST)
Date: Thu, 24 May 2001 11:40:29 +0200 (CEST)
Message-Id: <200105240940.f4O9eTt64168@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.h l2_ch_buffer.c l2_ch_file.c l2_channel.c ...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   24-May-2001 11:40:29
  Branch: HEAD                             Handle: 2001052410402800

  Modified files:
    ossp-pkg/l2             l2.h l2_ch_buffer.c l2_ch_file.c l2_channel.c
                            l2_p.h

  Log:
    o rename l2_error_t to l2_result_t
    o introduce internal channel state for API robustness

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-pkg/l2/l2.h
    1.4         +1  -1      ossp-pkg/l2/l2_ch_buffer.c
    1.6         +1  -1      ossp-pkg/l2/l2_ch_file.c
    1.4         +57 -24     ossp-pkg/l2/l2_channel.c
    1.4         +7  -1      ossp-pkg/l2/l2_p.h
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2.h
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 l2.h
  --- ossp-pkg/l2/l2.h	2001/05/22 18:47:31	1.4
  +++ ossp-pkg/l2/l2.h	2001/05/24 09:40:28	1.5
  @@ -77,7 +77,7 @@
   typedef enum {
       L2_OK,
       L2_ERROR
  -} l2_error_t;
  +} l2_result_t;
   
   /* context union for storing data */
   union l2_context_un {
  Index: ossp-pkg/l2/l2_ch_buffer.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 l2_ch_buffer.c
  --- ossp-pkg/l2/l2_ch_buffer.c	2001/05/22 20:00:12	1.3
  +++ ossp-pkg/l2/l2_ch_buffer.c	2001/05/24 09:40:28	1.4
  @@ -55,7 +55,7 @@
   {
       l2_ch_buffer_t *cfg;
       l2_param_t pa[3]; 
  -    l2_error_t rv;
  +    l2_result_t rv;
   
       if ((cfg = (l2_ch_buffer_t *)ctx->vp) == NULL)
           return L2_ERROR;
  Index: ossp-pkg/l2/l2_ch_file.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 l2_ch_file.c
  --- ossp-pkg/l2/l2_ch_file.c	2001/05/22 18:47:31	1.5
  +++ ossp-pkg/l2/l2_ch_file.c	2001/05/24 09:40:28	1.6
  @@ -68,7 +68,7 @@
   {
       l2_ch_file_t *cfg;
       l2_param_t pa[3]; 
  -    l2_error_t rv;
  +    l2_result_t rv;
   
       /* parameter checks */
       if ((cfg = (l2_ch_file_t *)ctx->vp) == NULL)
  Index: ossp-pkg/l2/l2_channel.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 l2_channel.c
  --- ossp-pkg/l2/l2_channel.c	2001/05/22 20:00:12	1.3
  +++ ossp-pkg/l2/l2_channel.c	2001/05/24 09:40:28	1.4
  @@ -31,6 +31,8 @@
   #include "l2.h"
   #include "l2_p.h"
   
  +#include <string.h>
  +
   l2_channel_t *l2_channel_create(l2_handler_t *h)
   {
       l2_channel_t *ch;
  @@ -39,15 +41,10 @@
           return NULL;
       if ((ch = (l2_channel_t *)malloc(sizeof(l2_channel_t))) == NULL)
           return NULL;
  -    ch->below              = NULL;
  -    ch->context.vp         = NULL;
  -    ch->handler.create     = h->create;
  -    ch->handler.configure  = h->configure;
  -    ch->handler.open       = h->open;
  -    ch->handler.write      = h->write;
  -    ch->handler.flush      = h->flush;
  -    ch->handler.close      = h->close;
  -    ch->handler.destroy    = h->destroy;
  +    ch->state = L2_CHSTATE_CREATED;
  +    ch->downstream = NULL;
  +    memset(&ch->context, 0, sizeof(l2_context_t));
  +    memcpy(&ch->handler, h, sizeof(l2_handler_t));
       if (ch->handler.create(&ch->context) == L2_ERROR) {
           free(ch);
           return NULL;
  @@ -58,9 +55,12 @@
   l2_channel_t *l2_channel_stack(l2_channel_t *ch1, l2_channel_t *ch2)
   {
       if (ch1 == NULL || ch2 == NULL)
  +        return NULL;
  +    if (   ch1->state != L2_CHSTATE_CREATED 
  +        || ch2->state != L2_CHSTATE_CREATED)
           return NULL;
  -    ch2->below = ch1;
  -    return ch2;
  +    ch1->downstream = ch2;
  +    return ch1;
   }
   
   int l2_channel_configure(l2_channel_t *ch, const char *fmt, ...)
  @@ -70,6 +70,8 @@
   
       if (ch == NULL || fmt == NULL)
           return L2_ERROR;
  +    if (ch->state != L2_CHSTATE_CREATED)
  +        return L2_ERROR;
       va_start(ap, fmt);
       rv = ch->handler.configure(&ch->context, fmt, ap);
       va_end(ap);
  @@ -78,62 +80,91 @@
   
   int l2_channel_open(l2_channel_t *ch)
   {
  +    l2_result_t rv;
  +
       if (ch == NULL)
           return L2_ERROR;
  +    if (ch->state != L2_CHSTATE_CREATED)
  +        return L2_ERROR;
       while (ch != NULL && ch->handler.open == NULL)
  -        ch = ch->below;
  +        ch = ch->downstream;
       if (ch == NULL)
           return L2_ERROR;
  -    return ch->handler.open(&ch->context, ch->below);
  +    rv = ch->handler.open(&ch->context, ch->downstream);
  +    if (rv == L2_OK)
  +        ch->state = L2_CHSTATE_OPENED;
  +    return rv;
   }
   
   int l2_channel_write(l2_channel_t *ch, const char *buf, size_t bufsize)
   {
  -    if (ch == NULL || buf == NULL || bufsize <= 0)
  -        return L2_ERROR;
  -    while (ch != NULL && ch->handler.write == NULL)
  -        ch = ch->below;
  +    l2_result_t rv;
  +
       if (ch == NULL)
           return L2_ERROR;
  +    if (ch->state != L2_CHSTATE_OPENED)
  +        return L2_ERROR;
       if (buf == NULL)
           return L2_ERROR;
       if (bufsize == 0)
           return L2_OK;
  -    return ch->handler.write(&ch->context, ch->below, buf, bufsize);
  +    while (ch != NULL && ch->handler.write == NULL)
  +        ch = ch->downstream;
  +    if (ch == NULL)
  +        return L2_ERROR;
  +    rv = ch->handler.write(&ch->context, ch->downstream, buf, bufsize);
  +    return rv;
   }
   
   int l2_channel_flush(l2_channel_t *ch)
   {
  +    l2_result_t rv;
  +
       if (ch == NULL)
           return L2_ERROR;
  +    if (ch->state != L2_CHSTATE_OPENED)
  +        return L2_ERROR;
       while (ch != NULL && ch->handler.flush == NULL)
  -        ch = ch->below;
  +        ch = ch->downstream;
       if (ch == NULL)
           return L2_ERROR;
  -    return ch->handler.flush(&ch->context, ch->below);
  +    rv = ch->handler.flush(&ch->context, ch->downstream);
  +    return rv;
   }
   
   int l2_channel_close(l2_channel_t *ch)
   {
  +    l2_result_t rv;
  +
       if (ch == NULL)
           return L2_ERROR;
  +    if (ch->state != L2_CHSTATE_OPENED)
  +        return L2_ERROR;
       while (ch != NULL && ch->handler.close == NULL)
  -        ch = ch->below;
  +        ch = ch->downstream;
       if (ch == NULL)
           return L2_ERROR;
  -    return ch->handler.close(&ch->context, ch->below);
  +    rv = ch->handler.close(&ch->context, ch->downstream);
  +    if (rv == L2_OK)
  +        ch->state = L2_CHSTATE_CREATED;
  +    return rv;
   }
   
   int l2_channel_destroy(l2_channel_t *ch)
   {
  -    int rv = L2_OK;
  +    l2_result_t rv;
   
       if (ch == NULL)
           return L2_ERROR;
  +    if (ch->state == L2_CHSTATE_OPENED)
  +        if ((rv = l2_channel_close(ch)) != L2_OK)
  +            return rv;
       while (ch != NULL && ch->handler.destroy == NULL)
  -        ch = ch->below;
  +        ch = ch->downstream;
       if (ch != NULL)
           rv = ch->handler.destroy(&ch->context);
  +    else
  +        rv = L2_OK;
       free(ch);
       return rv;
   }
  @@ -145,6 +176,8 @@
       int ok;
       int i; 
   
  +    if (pa == NULL || fmt == NULL || ap == NULL)
  +        return L2_ERROR;
       cpE = fmt;
       while (*cpE != '\0') {
           /* determine begin of parameter name */
  Index: ossp-pkg/l2/l2_p.h
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 l2_p.h
  --- ossp-pkg/l2/l2_p.h	2001/05/19 20:08:30	1.3
  +++ ossp-pkg/l2/l2_p.h	2001/05/24 09:40:28	1.4
  @@ -37,8 +37,14 @@
   #define L2_MAX_CHANNELS    128
   #define L2_MAX_FORMATTERS  128
   
  +typedef enum {
  +    L2_CHSTATE_CREATED,
  +    L2_CHSTATE_OPENED
  +} l2_chstate_t;
  +
   struct l2_channel_st {
  -    l2_channel_t *below;
  +    l2_chstate_t  state;
  +    l2_channel_t *downstream;
       l2_context_t  context;
       l2_handler_t  handler;
   };

From ossp-cvs-owner@ossp.org  Sat May 26 10:02:58 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f4Q82ul65934; Sat, 26 May 2001 10:02:56 +0200 (CEST)
Date: Sat, 26 May 2001 10:02:56 +0200 (CEST)
Message-Id: <200105260802.f4Q82ul65934@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.h l2_ch_fd.c l2_ch_filter.c l2_ch_null.c l2...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   26-May-2001 10:02:56
  Branch: HEAD                             Handle: 2001052609025500

  Modified files:
    ossp-pkg/l2             l2.h l2_ch_fd.c l2_ch_filter.c l2_ch_null.c
                            l2_ch_pipe.c l2_ch_prefix.c l2_ch_socket.c
                            l2_ch_syslog.c l2_stream.c

  Log:
    change terminology: below -> downstream

  Summary:
    Revision    Changes     Path
    1.6         +4  -4      ossp-pkg/l2/l2.h
    1.3         +4  -4      ossp-pkg/l2/l2_ch_fd.c
    1.3         +4  -4      ossp-pkg/l2/l2_ch_filter.c
    1.3         +4  -4      ossp-pkg/l2/l2_ch_null.c
    1.3         +4  -4      ossp-pkg/l2/l2_ch_pipe.c
    1.3         +4  -4      ossp-pkg/l2/l2_ch_prefix.c
    1.3         +4  -4      ossp-pkg/l2/l2_ch_socket.c
    1.4         +4  -4      ossp-pkg/l2/l2_ch_syslog.c
    1.4         +1  -1      ossp-pkg/l2/l2_stream.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2.h
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 l2.h
  --- ossp-pkg/l2/l2.h	2001/05/24 09:40:28	1.5
  +++ ossp-pkg/l2/l2.h	2001/05/26 08:02:55	1.6
  @@ -120,10 +120,10 @@
   struct l2_handler_st {
       int (*create)   (l2_context_t *ctx);
       int (*configure)(l2_context_t *ctx, const char *fmt, va_list ap);
  -    int (*open)     (l2_context_t *ctx, l2_channel_t *below);
  -    int (*write)    (l2_context_t *ctx, l2_channel_t *below, const char *buf, size_t buf_size);
  -    int (*flush)    (l2_context_t *ctx, l2_channel_t *below);
  -    int (*close)    (l2_context_t *ctx, l2_channel_t *below);
  +    int (*open)     (l2_context_t *ctx, l2_channel_t *downstream);
  +    int (*write)    (l2_context_t *ctx, l2_channel_t *downstream, const char *buf, size_t buf_size);
  +    int (*flush)    (l2_context_t *ctx, l2_channel_t *downstream);
  +    int (*close)    (l2_context_t *ctx, l2_channel_t *downstream);
       int (*destroy)  (l2_context_t *ctx);
   };
   
  Index: ossp-pkg/l2/l2_ch_fd.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2_ch_fd.c
  --- ossp-pkg/l2/l2_ch_fd.c	2001/05/11 17:07:52	1.2
  +++ ossp-pkg/l2/l2_ch_fd.c	2001/05/26 08:02:55	1.3
  @@ -40,23 +40,23 @@
       return L2_OK;
   }
   
  -static int hook_open(l2_context_t *ctx, l2_channel_t *below)
  +static int hook_open(l2_context_t *ctx, l2_channel_t *downstream)
   {
       return L2_OK;
   }
   
  -static int hook_write(l2_context_t *ctx, l2_channel_t *below, 
  +static int hook_write(l2_context_t *ctx, l2_channel_t *downstream, 
                         const char *buf, size_t buf_size)
   {
       return L2_OK;
   }
   
  -static int hook_flush(l2_context_t *ctx, l2_channel_t *below)
  +static int hook_flush(l2_context_t *ctx, l2_channel_t *downstream)
   {
       return L2_OK;
   }
   
  -static int hook_close(l2_context_t *ctx, l2_channel_t *below)
  +static int hook_close(l2_context_t *ctx, l2_channel_t *downstream)
   {
       return L2_OK;
   }
  Index: ossp-pkg/l2/l2_ch_filter.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2_ch_filter.c
  --- ossp-pkg/l2/l2_ch_filter.c	2001/05/11 17:07:52	1.2
  +++ ossp-pkg/l2/l2_ch_filter.c	2001/05/26 08:02:55	1.3
  @@ -40,23 +40,23 @@
       return L2_OK;
   }
   
  -static int hook_open(l2_context_t *ctx, l2_channel_t *below)
  +static int hook_open(l2_context_t *ctx, l2_channel_t *downstream)
   {
       return L2_OK;
   }
   
  -static int hook_write(l2_context_t *ctx, l2_channel_t *below, 
  +static int hook_write(l2_context_t *ctx, l2_channel_t *downstream, 
                         const char *buf, size_t buf_size)
   {
       return L2_OK;
   }
   
  -static int hook_flush(l2_context_t *ctx, l2_channel_t *below)
  +static int hook_flush(l2_context_t *ctx, l2_channel_t *downstream)
   {
       return L2_OK;
   }
   
  -static int hook_close(l2_context_t *ctx, l2_channel_t *below)
  +static int hook_close(l2_context_t *ctx, l2_channel_t *downstream)
   {
       return L2_OK;
   }
  Index: ossp-pkg/l2/l2_ch_null.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2_ch_null.c
  --- ossp-pkg/l2/l2_ch_null.c	2001/05/11 17:07:52	1.2
  +++ ossp-pkg/l2/l2_ch_null.c	2001/05/26 08:02:55	1.3
  @@ -40,23 +40,23 @@
       return L2_OK;
   }
   
  -static int hook_open(l2_context_t *ctx, l2_channel_t *below)
  +static int hook_open(l2_context_t *ctx, l2_channel_t *downstream)
   {
       return L2_OK;
   }
   
  -static int hook_write(l2_context_t *ctx, l2_channel_t *below, 
  +static int hook_write(l2_context_t *ctx, l2_channel_t *downstream, 
                         const char *buf, size_t buf_size)
   {
       return L2_OK;
   }
   
  -static int hook_flush(l2_context_t *ctx, l2_channel_t *below)
  +static int hook_flush(l2_context_t *ctx, l2_channel_t *downstream)
   {
       return L2_OK;
   }
   
  -static int hook_close(l2_context_t *ctx, l2_channel_t *below)
  +static int hook_close(l2_context_t *ctx, l2_channel_t *downstream)
   {
       return L2_OK;
   }
  Index: ossp-pkg/l2/l2_ch_pipe.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2_ch_pipe.c
  --- ossp-pkg/l2/l2_ch_pipe.c	2001/05/11 17:07:52	1.2
  +++ ossp-pkg/l2/l2_ch_pipe.c	2001/05/26 08:02:55	1.3
  @@ -40,23 +40,23 @@
       return L2_OK;
   }
   
  -static int hook_open(l2_context_t *ctx, l2_channel_t *below)
  +static int hook_open(l2_context_t *ctx, l2_channel_t *downstream)
   {
       return L2_OK;
   }
   
  -static int hook_write(l2_context_t *ctx, l2_channel_t *below, 
  +static int hook_write(l2_context_t *ctx, l2_channel_t *downstream, 
                         const char *buf, size_t buf_size)
   {
       return L2_OK;
   }
   
  -static int hook_flush(l2_context_t *ctx, l2_channel_t *below)
  +static int hook_flush(l2_context_t *ctx, l2_channel_t *downstream)
   {
       return L2_OK;
   }
   
  -static int hook_close(l2_context_t *ctx, l2_channel_t *below)
  +static int hook_close(l2_context_t *ctx, l2_channel_t *downstream)
   {
       return L2_OK;
   }
  Index: ossp-pkg/l2/l2_ch_prefix.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2_ch_prefix.c
  --- ossp-pkg/l2/l2_ch_prefix.c	2001/05/11 17:07:52	1.2
  +++ ossp-pkg/l2/l2_ch_prefix.c	2001/05/26 08:02:55	1.3
  @@ -40,23 +40,23 @@
       return L2_OK;
   }
   
  -static int hook_open(l2_context_t *ctx, l2_channel_t *below)
  +static int hook_open(l2_context_t *ctx, l2_channel_t *downstream)
   {
       return L2_OK;
   }
   
  -static int hook_write(l2_context_t *ctx, l2_channel_t *below, 
  +static int hook_write(l2_context_t *ctx, l2_channel_t *downstream, 
                         const char *buf, size_t buf_size)
   {
       return L2_OK;
   }
   
  -static int hook_flush(l2_context_t *ctx, l2_channel_t *below)
  +static int hook_flush(l2_context_t *ctx, l2_channel_t *downstream)
   {
       return L2_OK;
   }
   
  -static int hook_close(l2_context_t *ctx, l2_channel_t *below)
  +static int hook_close(l2_context_t *ctx, l2_channel_t *downstream)
   {
       return L2_OK;
   }
  Index: ossp-pkg/l2/l2_ch_socket.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2_ch_socket.c
  --- ossp-pkg/l2/l2_ch_socket.c	2001/05/11 17:07:52	1.2
  +++ ossp-pkg/l2/l2_ch_socket.c	2001/05/26 08:02:55	1.3
  @@ -40,23 +40,23 @@
       return L2_OK;
   }
   
  -static int hook_open(l2_context_t *ctx, l2_channel_t *below)
  +static int hook_open(l2_context_t *ctx, l2_channel_t *downstream)
   {
       return L2_OK;
   }
   
  -static int hook_write(l2_context_t *ctx, l2_channel_t *below, 
  +static int hook_write(l2_context_t *ctx, l2_channel_t *downstream, 
                         const char *buf, size_t buf_size)
   {
       return L2_OK;
   }
   
  -static int hook_flush(l2_context_t *ctx, l2_channel_t *below)
  +static int hook_flush(l2_context_t *ctx, l2_channel_t *downstream)
   {
       return L2_OK;
   }
   
  -static int hook_close(l2_context_t *ctx, l2_channel_t *below)
  +static int hook_close(l2_context_t *ctx, l2_channel_t *downstream)
   {
       return L2_OK;
   }
  Index: ossp-pkg/l2/l2_ch_syslog.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 l2_ch_syslog.c
  --- ossp-pkg/l2/l2_ch_syslog.c	2001/05/17 14:42:00	1.3
  +++ ossp-pkg/l2/l2_ch_syslog.c	2001/05/26 08:02:55	1.4
  @@ -42,24 +42,24 @@
       return L2_OK;
   }
   
  -static int hook_open(l2_context_t *ctx, l2_channel_t *below)
  +static int hook_open(l2_context_t *ctx, l2_channel_t *downstream)
   {
       return L2_OK;
   }
   
  -static int hook_write(l2_context_t *ctx, l2_channel_t *below,
  +static int hook_write(l2_context_t *ctx, l2_channel_t *downstream,
                         const char *buf, size_t buf_size)
       {
       syslog(LOG_INFO, buf);
       return L2_OK;
       }
   
  -static int hook_flush(l2_context_t *ctx, l2_channel_t *below)
  +static int hook_flush(l2_context_t *ctx, l2_channel_t *downstream)
   {
       return L2_OK;
   }
   
  -static int hook_close(l2_context_t *ctx, l2_channel_t *below)
  +static int hook_close(l2_context_t *ctx, l2_channel_t *downstream)
   {
       return L2_OK;
   }
  Index: ossp-pkg/l2/l2_stream.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 l2_stream.c
  --- ossp-pkg/l2/l2_stream.c	2001/05/22 18:47:31	1.3
  +++ ossp-pkg/l2/l2_stream.c	2001/05/26 08:02:55	1.4
  @@ -79,7 +79,7 @@
       len = vsnprintf(st->message, L2_MAX_MSGSIZE, fmt, ap);
       for (i = 0; i <= L2_MAX_CHANNELS && st->channels[i] != NULL; i++)
           st->channels[i]->handler.write(&st->channels[i]->context,
  -                                       st->channels[i]->below,
  +                                       st->channels[i]->downstream,
                                          st->message, len);
       return;
   }

From ossp-cvs-owner@ossp.org  Sat May 26 10:04:15 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f4Q84CK66060; Sat, 26 May 2001 10:04:12 +0200 (CEST)
Date: Sat, 26 May 2001 10:04:12 +0200 (CEST)
Message-Id: <200105260804.f4Q84CK66060@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.h l2_ch_syslog.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   26-May-2001 10:04:12
  Branch: HEAD                             Handle: 2001052609041200

  Modified files:
    ossp-pkg/l2             l2.h l2_ch_syslog.c

  Log:
    cleanup style

  Summary:
    Revision    Changes     Path
    1.7         +2  -2      ossp-pkg/l2/l2.h
    1.5         +2  -3      ossp-pkg/l2/l2_ch_syslog.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2.h
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 l2.h
  --- ossp-pkg/l2/l2.h	2001/05/26 08:02:55	1.6
  +++ ossp-pkg/l2/l2.h	2001/05/26 08:04:12	1.7
  @@ -168,8 +168,8 @@
   l2_stream_t  *l2_stream_channel   (l2_stream_t *st, l2_channel_t *ch, unsigned int levelmask);
   l2_stream_t  *l2_stream_formatter (l2_stream_t *st, l2_formatter_t *cb, l2_context_t *ctx);
   unsigned int  l2_stream_levels    (l2_stream_t *st, unsigned int levelmask);
  -void          l2_stream_log       (l2_stream_t *st, unsigned int log_level, const char* fmt, ...);
  -void          l2_stream_vlog      (l2_stream_t *st, unsigned int log_level, const char* fmt, va_list ap);
  +void          l2_stream_log       (l2_stream_t *st, unsigned int log_level, const char *fmt, ...);
  +void          l2_stream_vlog      (l2_stream_t *st, unsigned int log_level, const char *fmt, va_list ap);
   void          l2_stream_destroy   (l2_stream_t *st);
   
   #endif /* __L2_H__ */
  Index: ossp-pkg/l2/l2_ch_syslog.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 l2_ch_syslog.c
  --- ossp-pkg/l2/l2_ch_syslog.c	2001/05/26 08:02:55	1.4
  +++ ossp-pkg/l2/l2_ch_syslog.c	2001/05/26 08:04:12	1.5
  @@ -49,10 +49,9 @@
   
   static int hook_write(l2_context_t *ctx, l2_channel_t *downstream,
                         const char *buf, size_t buf_size)
  -    {
  -    syslog(LOG_INFO, buf);
  +{
       return L2_OK;
  -    }
  +}
   
   static int hook_flush(l2_context_t *ctx, l2_channel_t *downstream)
   {

From ossp-cvs-owner@ossp.org  Sat May 26 10:06:28 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f4Q86R866525; Sat, 26 May 2001 10:06:27 +0200 (CEST)
Date: Sat, 26 May 2001 10:06:27 +0200 (CEST)
Message-Id: <200105260806.f4Q86R866525@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   26-May-2001 10:06:26
  Branch: HEAD                             Handle: 2001052609062600

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    forget timestamps now that I've to do it myself and we are now in holiday for two weeks

  Summary:
    Revision    Changes     Path
    1.5         +4  -4      ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 TODO
  --- ossp-pkg/l2/TODO	2001/05/23 21:44:32	1.4
  +++ ossp-pkg/l2/TODO	2001/05/26 08:06:26	1.5
  @@ -6,18 +6,18 @@
   Timeplan
   --------
   
  -o M1 (14.05.2001)
  +o M1 
     - fixed C API
     - established build environment
  -o M2 (21.05.2001)
  +o M2
     - implemented C API
     - fixed C++ API
  -o M3 (11.06.2001)
  +o M3
     - implemented C++ API
     - documented C API
     - documented C++ API
     - release version 0.9.0
  -o M4 (25.06.2001)
  +o M4
     - release version 1.0.0
   
   TODO

From ossp-cvs-owner@ossp.org  Sat May 26 10:07:57 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f4Q87uI66661; Sat, 26 May 2001 10:07:56 +0200 (CEST)
Date: Sat, 26 May 2001 10:07:56 +0200 (CEST)
Message-Id: <200105260807.f4Q87uI66661@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   26-May-2001 10:07:56
  Branch: HEAD                             Handle: 2001052609075500

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    remember things

  Summary:
    Revision    Changes     Path
    1.6         +4  -8      ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 TODO
  --- ossp-pkg/l2/TODO	2001/05/26 08:06:26	1.5
  +++ ossp-pkg/l2/TODO	2001/05/26 08:07:55	1.6
  @@ -20,15 +20,11 @@
   o M4
     - release version 1.0.0
   
  -TODO
  -----
  +ATTENTION
  +---------
   
  -- channel backends
  -- message formatting
  -- rc-file autoconfiguration
  -- C++ API
  -- documentation C API
  -- documentation C++ API
  +o hook_write's should perhaps receive a nul-termined string
  +  instead of buf+size, because syslog else has to re-buffer it.
   
   BRAINSTORMING
   -------------

From ossp-cvs-owner@ossp.org  Tue Jun 12 13:29:13 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f5CBTBn10060; Tue, 12 Jun 2001 13:29:11 +0200 (CEST)
Date: Tue, 12 Jun 2001 13:29:11 +0200 (CEST)
Message-Id: <200106121129.f5CBTBn10060@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/erpc EVAL
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   12-Jun-2001 13:29:11
  Branch: HEAD                             Handle: 2001061212291100

  Modified files:
    ossp-pkg/erpc           EVAL

  Log:
    Added template for description of the evaluated packages.

  Summary:
    Revision    Changes     Path
    1.2         +14 -1      ossp-pkg/erpc/EVAL
  ____________________________________________________________________________

  Index: ossp-pkg/erpc/EVAL
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 EVAL
  --- ossp-pkg/erpc/EVAL	2001/05/22 14:45:31	1.1
  +++ ossp-pkg/erpc/EVAL	2001/06/12 11:29:11	1.2
  @@ -2,6 +2,19 @@
   Evaluation
   ==========
   
  +- Name, Autor, Jahr
  +- URL
  +- Sprache
  +- Veschreibung, Klassifizierung
  +- Bewertung:
  +    - Stand-alone?
  +    - Self-contained?
  +    - Portabel?
  +    - Code ist sauber?
  +    - API ist orthogonal?
  +- Verwendete Protokolle
  +- Warum nehmen wir's nicht.
  +
   o Spread
     http://www.spread.org/
   
  @@ -50,4 +63,4 @@
                depends on re2c and is implemented in cpp, neither RPCv1 nor RPCv2
   XMLRPC ..... taugt nicht, nur nettes Konzept, keine C Implementierung,
                starker Overhead, etc.
  - 
  +

From ossp-cvs-owner@ossp.org  Tue Jun 12 15:14:49 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f5CDEmV22587; Tue, 12 Jun 2001 15:14:48 +0200 (CEST)
Date: Tue, 12 Jun 2001 15:14:48 +0200 (CEST)
Message-Id: <200106121314.f5CDEmV22587@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/erpc TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   12-Jun-2001 15:14:48
  Branch: HEAD                             Handle: 2001061214144800

  Modified files:
    ossp-pkg/erpc           TODO

  Log:
    Updated milestones.

  Summary:
    Revision    Changes     Path
    1.3         +48 -14     ossp-pkg/erpc/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/erpc/TODO
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 TODO
  --- ossp-pkg/erpc/TODO	2001/05/22 14:38:26	1.2
  +++ ossp-pkg/erpc/TODO	2001/06/12 13:14:48	1.3
  @@ -1,25 +1,59 @@
  -Efficient RPC (E-RPC)
  -=====================
  +Simple RPC
  +==========
   
   Architecture:
  -- libeprc
  -- libserialize
  +- Abstracted Message Passing Library: libamp
  +- eXtendable Data Serialization Library: libxds
  +- Simple Remote Procedure Call Library: libsrpc
   
  +TODO:
  +
  +- The server actually performing the function call has to interpret
  +  the transferred data according to the functions prototype. This may
  +  be done in one of the following ways:
  +
  +   - All functions have the same prototype. The function may then be a
  +     stub calling the actual function. These stubs can be generated
  +     manually or semi-automatically.
  +
  +   - Allow only a finite set of prototypes and switch according to the
  +     function tye, like in eAPI in Apache.
  +
  +   - Build function call dynamically using the Foreign Function Call
  +     library.
  +
  +- The programmer should be able to specify whether his implementations
  +  need guarantees of being called at least once, exactly once, etc.
  +
  +
   o M1 (peti) [11-Jun-2001]
     - evaluation (-> ideas)
       (checklist)
     - prototype
       (C++)
  -o M2 (peti+rse) [02-Jul-2001]
  +
  +o M2 (peti+rse) [25-Jun-2001]
     - design/architecture paper (authentication+encryption framework)
       (< 10KB Text + 1x Figure)
  -  - rpc protocol (ohne serialization)
  -    (< 5KB Text)
  -  - API specification (erpc.h, serial.h)
  -o M3 (peti)
  -  - source tree
  -  - implementation
  -o M4 (rse)
  -  - OSSP integration/adjustierung
  -o M5 (peti)
  +
  +o M3 (peti+rse) [9-Jul-2001]
  +  - design libxds API
  +  - design libamp API
  +  - preliminary design libsrpc API
  +
  +o M4 (peti)
  +  - implementation of libxds
  +  - implementation of libamp
  +
  +o M5 (peti+rse)
  +  - design libsrpc API and protocol
  +
  +o M6 (peti)
  +  - implementation libsrpc
  +  - implementation xxxd
  +
  +o M7 (peti)
     - documentation
  +
  +o M8 (rse)
  +  - OSSP integration

From ossp-cvs-owner@ossp.org  Tue Jun 12 15:17:02 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f5CDH0i22928; Tue, 12 Jun 2001 15:17:00 +0200 (CEST)
Date: Tue, 12 Jun 2001 15:17:00 +0200 (CEST)
Message-Id: <200106121317.f5CDH0i22928@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/erpc EVAL
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   12-Jun-2001 15:17:00
  Branch: HEAD                             Handle: 2001061214170000

  Modified files:
    ossp-pkg/erpc           EVAL

  Log:
    Added ffcall library to list of components to be evaluated.

  Summary:
    Revision    Changes     Path
    1.3         +3  -0      ossp-pkg/erpc/EVAL
  ____________________________________________________________________________

  Index: ossp-pkg/erpc/EVAL
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 EVAL
  --- ossp-pkg/erpc/EVAL	2001/06/12 11:29:11	1.2
  +++ ossp-pkg/erpc/EVAL	2001/06/12 13:17:00	1.3
  @@ -49,6 +49,9 @@
   o DCERPC
     ftp://gatekeeper.dec.com/pub/DEC/DCE/
   
  +o Foreign Function Call Library
  +  http://clisp.cons.org/~haible/packages-ffcall.html
  +
   RSE:
   ----
   

From ossp-cvs-owner@ossp.org  Tue Jun 12 15:45:35 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f5CDjZ226768; Tue, 12 Jun 2001 15:45:35 +0200 (CEST)
Date: Tue, 12 Jun 2001 15:45:35 +0200 (CEST)
Message-Id: <200106121345.f5CDjZ226768@ossp.org>
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   OSSP Project Master
  Root:   /e/ossp/cvs                      Email:  ossp@ossp.org
  Module: CVSROOT                          Date:   12-Jun-2001 15:45:35
  Branch: HEAD                             Handle: 2001061214453400

  Modified files:
    CVSROOT                 modules

  Log:
    erpc -> srpc

  Summary:
    Revision    Changes     Path
    1.25        +1  -1      CVSROOT/modules
  ____________________________________________________________________________

  Index: CVSROOT/modules
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 modules
  --- CVSROOT/modules	2001/05/22 14:36:05	1.24
  +++ CVSROOT/modules	2001/06/12 13:45:34	1.25
  @@ -73,5 +73,5 @@
   str             ossp-pkg/str
   sugar           ossp-pkg/sugar
   l2              ossp-pkg/l2
  -erpc            ossp-pkg/erpc
  +srpc            ossp-pkg/srpc
   

From ossp-cvs-owner@ossp.org  Tue Jun 19 17:50:12 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f5JFoAC50087; Tue, 19 Jun 2001 17:50:10 +0200 (CEST)
Date: Tue, 19 Jun 2001 17:50:10 +0200 (CEST)
Message-Id: <200106191550.f5JFoAC50087@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc EVAL
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   19-Jun-2001 17:50:10
  Branch: HEAD                             Handle: 2001061916501000

  Modified files:
    ossp-pkg/srpc           EVAL

  Log:
    Added comments for the packages I evaluated: Spread, XML-RPC, RPC2,
    MRPC, LinuxDoors, ORBit, and TIRPC.

  Summary:
    Revision    Changes     Path
    1.4         +88 -51     ossp-pkg/srpc/EVAL
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/EVAL
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 EVAL
  --- ossp-pkg/srpc/EVAL	2001/06/12 13:17:00	1.3
  +++ ossp-pkg/srpc/EVAL	2001/06/19 15:50:10	1.4
  @@ -1,28 +1,93 @@
  +			      Evaluation
  +			      ==========
   
  -Evaluation
  -==========
  +o Spread, http://www.spread.org/
   
  -- Name, Autor, Jahr
  -- URL
  -- Sprache
  -- Veschreibung, Klassifizierung
  -- Bewertung:
  -    - Stand-alone?
  -    - Self-contained?
  -    - Portabel?
  -    - Code ist sauber?
  -    - API ist orthogonal?
  -- Verwendete Protokolle
  -- Warum nehmen wir's nicht.
  -
  -o Spread
  -  http://www.spread.org/
  -
  -o XML-RPC:
  -  http://www.xmlrpc.org/
  -  http://www.focusresearch.com/gregor/sw/XPC/
  -  http://xmlrpc-c.sourceforge.net/
  +  Spread is a sophisticated framework for distributed computing. The
  +  software itself is written in C and uses a design very similar to
  +  SRPC's: It is split into a permanently running daemon and a link
  +  library containing interface routines to that daemon to the
  +  programmer. The daemon will maintain so called "groups", which
  +  computers can join and leave. Furthermore the daemon provides group
  +  communication services based on TCP, UDP or Multicast-UPD. Via this
  +  communication services, the actual remote procedure calls are
  +  implemented.
   
  +  The software seems to be actively maintained, well-written and
  +  documented, but unfortunately the following drawbacks kept us from
  +  using it:
  +
  +    - Spread's license prohibits any commercial use.
  +
  +    - It is not possible for peers to communicate without the daemon.
  +
  +    - The API for the programmer is somewhat messy.
  +
  +
  +o XML-RPC, http://www.xmlrpc.org/
  +
  +  XML-RPC is a standardized remote procedure call framework for which
  +  several complying implementations exist. These implementations
  +  provide support for the programming languages Perl, Python, Java,
  +  C/C++, Lisp, PHP, Microsoft .NET, Tcl, Delphi, WebObjects and many
  +  more. Remote procedure calls are encoded in a portable XML
  +  representation and transferred via HTTP.
  +
  +  The software seems to be popular and many resources dealing with
  +  XML-RPC exist, but for us the massive XML encoding overhead was too
  +  much.
  +
  +
  +o RPC2, http://www.coda.cs.cmu.edu/
  +
  +  This RPC mechanism is part of the CODA network file system, but it
  +  can be used without the file system part. RPC2 consists of a link
  +  library for the programmer and a stub generator, that will create
  +  function descriptions, which the library can then use to call the
  +  described function remotely. The whole approach is very clean and
  +  minimalistic, but unfortunately, the code depends on liblwp -- a
  +  user space threading library. While threading is certainly useful on
  +  many occasions, we did not want to use a system that enforces
  +  threading. In C++, for instance, the behavior of exceptions within a
  +  thread are totally unspecified. Furthermore, user space threads do
  +  not achieve the performance of kernel threads, nor are they
  +  portable.
  +
  +
  +o MRPC, http://www.tildeslash.org/mrpc.html
  +
  +  "Modular RPC" is a minimalistic remote procedure call mechanism
  +  using a similar design as the original RPC: It consists of a code
  +  generator that will encapsulate function definitions in such a way
  +  that they can be called remotely with the functions provided in a
  +  link library. The whole system is very lean and efficient,
  +  marshaling is done automatically for most data types, and the
  +  provided documentation is sufficient.
  +
  +  Unfortunately, the whole system is written in C++ and can thus not
  +  trivially be used in plain C or any other language.
  +
  +
  +o LinuxDoors, http://www.rampant.org/doors/
  +
  +  The author discontinued development of the package in May 2001. The
  +  current version 0.9 is considered to be alpha quality software.
  +
  +
  +o ORBit, http://orbit-resource.sourceforge.net/
  +
  +  ORBit is a CORBA 2.2-compliant object request broker. Do I need to
  +  say more?
  +
  +
  +o TIRPC, ftp://ftp.uu.net/networking/rpc/
  +
  +  The "Transport Independent RPC" package is derived from the original
  +  SUN RPC and uses the TLI interface to access the network.
  +  Unfortunately, TLI is not widely supported; sockets rule the
  +  communication market. Thus, the package is not very useful for us.
  +
  +
   o SunRPC
     rfc1050.txt
     rfc1057.txt
  @@ -32,38 +97,10 @@
     rfc2203.txt
     rfc2695.txt
   
  -o SRA
  -  Secure RPC Authentication for TELNET and FTP
  -  net.tamu.edu:pub/security/TAMU/
  -
  -o RPC2
  -  ftp://ftp.coda.cs.cmu.edu/pub/rpc2/
  -
  -o MRPC
  -  http://www.tildeslash.org/mrpc.html
  -  http://www.tildeslash.org/mrpc/
   
  -o LinuxDoors
  -  http://www.rampant.org/doors/
  -
   o DCERPC
     ftp://gatekeeper.dec.com/pub/DEC/DCE/
   
  +
   o Foreign Function Call Library
     http://clisp.cons.org/~haible/packages-ffcall.html
  -
  -RSE:
  -----
  -
  -ORBit ...... nice ORBit 2.2 implementation in C, but undocumented
  -FreeBSD .... the most clean RPC, but only RPCv1
  -SunRPC40 ... too old, FreeBSD's code is much more feature-full and portable, RPCv1
  -NetBSD ..... very similar to FreeBSD code with a few addons "long long", but less clean, RPCv1
  -tirpc ...... Transport Layer Independent RPC, but unportable and old
  -RPC2 ....... nice concept, but neither RPCv1 nor RPC2 and requires LWP library
  -             and is also bundled strongly with it
  -MRPC ....... modular architecture (tranport layer interchangeable), but
  -             depends on re2c and is implemented in cpp, neither RPCv1 nor RPCv2
  -XMLRPC ..... taugt nicht, nur nettes Konzept, keine C Implementierung,
  -             starker Overhead, etc.
  -

From ossp-cvs-owner@ossp.org  Tue Jun 19 19:07:10 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f5JH79I58959; Tue, 19 Jun 2001 19:07:09 +0200 (CEST)
Date: Tue, 19 Jun 2001 19:07:09 +0200 (CEST)
Message-Id: <200106191707.f5JH79I58959@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc EVAL
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   19-Jun-2001 19:07:09
  Branch: HEAD                             Handle: 2001061918070800

  Modified files:
    ossp-pkg/srpc           EVAL

  Log:
    Add infos from the Spreads BOF at ApacheCon 2001 in Santa Clara

  Summary:
    Revision    Changes     Path
    1.5         +5  -1      ossp-pkg/srpc/EVAL
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/EVAL
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 EVAL
  --- ossp-pkg/srpc/EVAL	2001/06/19 15:50:10	1.4
  +++ ossp-pkg/srpc/EVAL	2001/06/19 17:07:08	1.5
  @@ -17,7 +17,11 @@
     documented, but unfortunately the following drawbacks kept us from
     using it:
   
  -    - Spread's license prohibits any commercial use.
  +    - Spread's license currently prohibits any commercial use.
  +      But according to the authors (as of April 2001) they are providing
  +      special license exceptions for Open Source projects and working on
  +      moving Spread to a commercial split of from their University and
  +      then releasing Spread under a real Open Source license.
   
       - It is not possible for peers to communicate without the daemon.
   

From ossp-cvs-owner@ossp.org  Tue Jun 19 19:08:57 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f5JH8uA59160; Tue, 19 Jun 2001 19:08:56 +0200 (CEST)
Date: Tue, 19 Jun 2001 19:08:56 +0200 (CEST)
Message-Id: <200106191708.f5JH8uA59160@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc EVAL
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   19-Jun-2001 19:08:56
  Branch: HEAD                             Handle: 2001061918085500

  Modified files:
    ossp-pkg/srpc           EVAL

  Log:
    add more info from ApacheCon

  Summary:
    Revision    Changes     Path
    1.6         +5  -0      ossp-pkg/srpc/EVAL
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/EVAL
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 EVAL
  --- ossp-pkg/srpc/EVAL	2001/06/19 17:07:08	1.5
  +++ ossp-pkg/srpc/EVAL	2001/06/19 17:08:55	1.6
  @@ -24,6 +24,11 @@
         then releasing Spread under a real Open Source license.
   
       - It is not possible for peers to communicate without the daemon.
  +      (RSE: I'm not sure about this. If I understood the Spread guys
  +      correctly at ApacheCon 2001 it should be possible to run it
  +      without the daemon or at least with an own application-dedicated
  +      daemon instead of a system-dedicated daemon. We should check this
  +      in details).
   
       - The API for the programmer is somewhat messy.
   

From ossp-cvs-owner@ossp.org  Tue Jun 19 19:13:42 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f5JHDfq59498; Tue, 19 Jun 2001 19:13:41 +0200 (CEST)
Date: Tue, 19 Jun 2001 19:13:41 +0200 (CEST)
Message-Id: <200106191713.f5JHDfq59498@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc EVAL
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   19-Jun-2001 19:13:41
  Branch: HEAD                             Handle: 2001061918134000

  Modified files:
    ossp-pkg/srpc           EVAL

  Log:
    Add my notes about threading to not forget it

  Summary:
    Revision    Changes     Path
    1.7         +4  -2      ossp-pkg/srpc/EVAL
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/EVAL
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 EVAL
  --- ossp-pkg/srpc/EVAL	2001/06/19 17:08:55	1.6
  +++ ossp-pkg/srpc/EVAL	2001/06/19 17:13:40	1.7
  @@ -60,8 +60,10 @@
     threading. In C++, for instance, the behavior of exceptions within a
     thread are totally unspecified. Furthermore, user space threads do
     not achieve the performance of kernel threads, nor are they
  -  portable.
  -
  +  portable (RSE: Hmmmm... I'm not sure this really holds, because
  +  evaluation showed that 1. user-space dispatching is usually faster
  +  than dispatching in kernel-space and 2. GNU Pth proofed that
  +  user-space threading can be done in a very portable way).
   
   o MRPC, http://www.tildeslash.org/mrpc.html
   

From ossp-cvs-owner@ossp.org  Wed Jun 20 14:28:23 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f5KCSM615338; Wed, 20 Jun 2001 14:28:22 +0200 (CEST)
Date: Wed, 20 Jun 2001 14:28:22 +0200 (CEST)
Message-Id: <200106201228.f5KCSM615338@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc EVAL
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   20-Jun-2001 14:28:22
  Branch: HEAD                             Handle: 2001062013282200

  Modified files:
    ossp-pkg/srpc           EVAL

  Log:
    Made description of what Spread does more accurate after further
    testing.

  Summary:
    Revision    Changes     Path
    1.8         +14 -14     ossp-pkg/srpc/EVAL
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/EVAL
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 EVAL
  --- ossp-pkg/srpc/EVAL	2001/06/19 17:13:40	1.7
  +++ ossp-pkg/srpc/EVAL	2001/06/20 12:28:22	1.8
  @@ -3,25 +3,25 @@
   
   o Spread, http://www.spread.org/
   
  -  Spread is a sophisticated framework for distributed computing. The
  -  software itself is written in C and uses a design very similar to
  -  SRPC's: It is split into a permanently running daemon and a link
  -  library containing interface routines to that daemon to the
  -  programmer. The daemon will maintain so called "groups", which
  -  computers can join and leave. Furthermore the daemon provides group
  -  communication services based on TCP, UDP or Multicast-UPD. Via this
  -  communication services, the actual remote procedure calls are
  -  implemented.
  +  Spread is a sophisticated message passing framework. The software
  +  itself is written in C and uses a design very similar to SRPC's: It
  +  is split into a permanently running daemon and a link library
  +  containing interface routines to that daemon for the programmer. The
  +  daemon will maintain so called "groups", which computers can join
  +  and leave. Furthermore the daemon provides group communication
  +  services based on TCP, UDP or Multicast-UPD. There is no actual RPC
  +  functionality available, but implementing such a system on top of
  +  Spread would be relatively trivial.
   
     The software seems to be actively maintained, well-written and
     documented, but unfortunately the following drawbacks kept us from
     using it:
   
  -    - Spread's license currently prohibits any commercial use.
  -      But according to the authors (as of April 2001) they are providing
  -      special license exceptions for Open Source projects and working on
  -      moving Spread to a commercial split of from their University and
  -      then releasing Spread under a real Open Source license.
  +    - Spread's license currently prohibits any commercial use, but
  +      according to the authors (as of April 2001) they are providing
  +      special license exceptions for Open Source projects and working
  +      on moving Spread to a commercial split of from their University
  +      and then releasing Spread under a real Open Source license.
   
       - It is not possible for peers to communicate without the daemon.
         (RSE: I'm not sure about this. If I understood the Spread guys

From ossp-cvs-owner@ossp.org  Wed Jun 20 21:16:41 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f5KJGeH72158; Wed, 20 Jun 2001 21:16:40 +0200 (CEST)
Date: Wed, 20 Jun 2001 21:16:40 +0200 (CEST)
Message-Id: <200106201916.f5KJGeH72158@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc EVAL
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   20-Jun-2001 21:16:40
  Branch: HEAD                             Handle: 2001062020164000

  Modified files:
    ossp-pkg/srpc           EVAL

  Log:
    Add XDS part for evaluation

  Summary:
    Revision    Changes     Path
    1.9         +15 -0      ossp-pkg/srpc/EVAL
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/EVAL
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 EVAL
  --- ossp-pkg/srpc/EVAL	2001/06/20 12:28:22	1.8
  +++ ossp-pkg/srpc/EVAL	2001/06/20 19:16:40	1.9
  @@ -115,3 +115,18 @@
   
   o Foreign Function Call Library
     http://clisp.cons.org/~haible/packages-ffcall.html
  +
  +
  +Evaluation for XDS
  +==================
  +
  +o libbinio
  +  http://members.home.net/mikpos/libbinio/
  +o HiM
  +  http://www.sama.ru/~despair/him/
  +o pbio
  +  ftp://ftp.cc.gatech.edu/pub/groups/systems/chaos/pbio/ 
  +o SunRPC XDR
  +  RFC1832
  +o CORBA's IIOB(?)
  +

From ossp-cvs-owner@ossp.org  Wed Jun 20 21:18:25 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f5KJIOJ72301; Wed, 20 Jun 2001 21:18:24 +0200 (CEST)
Date: Wed, 20 Jun 2001 21:18:24 +0200 (CEST)
Message-Id: <200106201918.f5KJIOJ72301@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc EVAL
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   20-Jun-2001 21:18:24
  Branch: HEAD                             Handle: 2001062020182400

  Modified files:
    ossp-pkg/srpc           EVAL

  Log:
    add XTL, fix name of CORBA beast

  Summary:
    Revision    Changes     Path
    1.10        +4  -1      ossp-pkg/srpc/EVAL
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/EVAL
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 EVAL
  --- ossp-pkg/srpc/EVAL	2001/06/20 19:16:40	1.9
  +++ ossp-pkg/srpc/EVAL	2001/06/20 19:18:24	1.10
  @@ -128,5 +128,8 @@
     ftp://ftp.cc.gatech.edu/pub/groups/systems/chaos/pbio/ 
   o SunRPC XDR
     RFC1832
  -o CORBA's IIOB(?)
  +o XTL
  +  http://gsd.di.uminho.pt/jop/xtl/
  +o CORBA GIOP CDR
  +  ???
   

From ossp-cvs-owner@ossp.org  Thu Jun 21 07:16:06 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f5L5G5I47253; Thu, 21 Jun 2001 07:16:05 +0200 (CEST)
Date: Thu, 21 Jun 2001 07:16:05 +0200 (CEST)
Message-Id: <200106210516.f5L5G5I47253@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc BRES TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   21-Jun-2001 07:16:05
  Branch: HEAD                             Handle: 2001062106160500

  Added files:
    ossp-pkg/srpc           BRES
  Modified files:
    ossp-pkg/srpc           TODO

  Log:
    remember results from last ad-hoc brain-storming with team

  Summary:
    Revision    Changes     Path
    1.1         +257 -0     ossp-pkg/srpc/BRES
    1.4         +3  -26     ossp-pkg/srpc/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/BRES
  ============================================================
  $ cvs update -p -r1.1 BRES
  
  BASIC RESEARCH AND BRAIN-STORMING
  =================================
  
  - Architecture:
    - Abstracted Message Passing Library: libamp
    - eXtendable Data Serialization Library: libxds
    - Simple Remote Procedure Call Library: libsrpc
  
  - The server actually performing the function call has to interpret
    the transferred data according to the functions prototype. This may
    be done in one of the following ways:
  
     - All functions have the same prototype. The function may then be a
       stub calling the actual function. These stubs can be generated
       manually or semi-automatically.
  
     - Allow only a finite set of prototypes and switch according to the
       function tye, like in eAPI in Apache.
  
     - Build function call dynamically using the Foreign Function Call
       library.
  
  - reduce "int foo(int, foo_t *)"
    to     "rpc_t foo(rpc_t)" mit
    rpc_t: void *, size_t
    because
    o constant function prototype on server-side
      (foreign function call problem!)
    o only application knows how to convert 
      complex data structures (foo_t) into
      serialized octet-stream
    o greater flexibility in data transfer
    o rpc library complexity is reduced
      (on cost of application complexity)
  
    instead remote procedure call 
    only message passing
  
  - auditing/logging:
    in XDS: nicht noetig
    in AMP: 3 levels: in API von MP und in backends und I/O dump
            mit Hilfe von Callbacks (L2!)
  
  - message passing / procedure call
    sepatered from data serialization
  
  - error semantics:
    transaction, ACID 
    o exactly-once (== 1) bank transaction
    o at-least-once (>= 1) muss passieren, mehrfach tut nicht weh (seiteneffekte) SunRPC
    o at-most-once (<= 1) logging of not important data, video conferneces
    o reduncancy (> 1) data replication (rundancy)
    o quatsch (< 1 == 0)
    o cachable im Proxy
  
  - flexibility:
    o I/O functions overloading (Pth)
    o accept+handle, ... application handles
      server functionality and can fork, spawn, etc.
  
  - asynchronous vs. synchronous
    Ideee: intern immer asynchrouns
    aber in API wrapper function 
    rpc_call == rpc_send+rpc_wait+rpc_result
    und auch rpc_abort
    trotzdem wird beide male ein timeout vorgesehen
  
  - AMP:
    backends
       local
          shm
          pipe
          unix socket
       network
          udp
          tcp
          ttcp
  
  - Fragmentation?
    - entweder AMP high-level aufgrund von backend-infos (MTU!) + Defragnmentierung
    - oder error aufgrund backend
  
  - Optimales Backend Protocol:
    - server akzepotiert N protocols
    - client requested M (<= N) protocols
    - library sucht optimalen raus (ev. abhaengig von der Message-Size)
  
  - Backend Protocols:
    - eventuell connection caching?
    - bei network problems reconnect
    - bei idle time shutdown + reconnect later
  
  - AMP:
    o optional authentication
    o optional packet signing
  - AMP+XDS:
    o optional encryption
    o optional compression
  
  - wo ist encryption und compression?
    in beiden mit callbacks vorsehen, da beide
    unabhaengig von einander imn Einsatz sein koennen!
  
  - XDS:
    o functionality:
      encoding
      decoding
    o Representation Differences
      - byte order (little vs. big endian)
      - character set (ASCII, Latin-1, Unicode, EBCDIC)
      - floating point (IEEEE ...)
    o Description:
      - self-describing (ASN.1) type+value
        - overhead
        + bei decode eine verification machen
      - non self-describing
        + no overhead
        + tut nicht weh, da xds_decode() sowieso parameter aufzaehlen muss
    o Welche Seite tut was:
      - send: into fixed set
        recv: from fixed set
        + filter/minitoring moeglich auf netzwerk seite
        - eventuell doppleter overhead (C+S:little endian, fixed set: big endian)
      - send: nothing, but append own type
        recv: into own set if type different
        + no overhead
        - no filtering easily possible
    o callbacks erlauben encoding/decoding of own data structures/types
    o backends:
      XDR   (SunRPC)
      ASN.1 (X.509)
      XXX   (CORBA)
      XML   (XML-RPC)
  
  - Firewalls? Sollen die Filtern koennen
    Encryption nur von Data, nicht von Meta-Data
  - Proxies? 
  
  - Sowohl AMP als auch XDR muessen backends von
    Application implementieren lassen!
  
  - bei AMP muessen Statistiken verfuegbar sein!
    - Rround-Trip-Time
    - Datandurchsatz (Throughput)
    siehe auch SNMP, Multilink PPP (MP+)
  
  - Denial Of Service auf Server Seite?
  
  - High-Level Library basierende auf AMP:
    - Service Location
    - Load Balancing
    - Fail Over
  
  - IPv6 in AMP unterstuetzen
  - Multicasting in AMP unterstuetzen (trivial I/O seitig, 
    aber muss bei error semantics beruecksichtig werden)
  
  =========================================================================================
  
  Examples:
  
  amp.h:
  typedef struct {
      void  *data;
      size_t len;
  } amp_data_t;
  
  Server:
       #include "amp.h"
       #include "xds.h"
       #include "pth.h"
  
       amp_data_t foo(void *ctx, amp_data_t in)
       {
           amp_data_t out;
           xds_ctx_t *xds = (xds_ctx_t *)ctx;
           int i;
           char *cp;
           int rv;
  
           xds_decode(xds, in.data, in.len, "%d%s", &i, &cp);
           /* i und cp verarbeiten -> rv */
           xds_encode(xds, &out, "%d", rv);
           return out;
       }
  
       amp_server_t *s;
       amp_connection_t *c;
       xds_ctx_t *xds;
  
       xds = xds_create(XDS_ASN1);
  
       s = amp_server_create();
       amp_server_configure(s, AMP_LISTEN, "udp", "server1.de.cw.net", 12345);
       amp_server_configure(s, AMP_LISTEN, "tcp", "any" 12345);
       amp_server_configure(s, AMP_LISTEN, "unix", 12345);
       amp_server_configure(s, AMP_LISTEN, "shm", vp, vplen);
       amp_server_configure(s, AMP_ERROR_SEMANTIC, AMP_ATLEASTONCE);
       amp_server_configure(s, AMP_IOCB_ACCEPT, pth_accept);
       amp_server_configure(s, AMP_IOCB_LISTEN, pth_listen);
       amp_server_configure(s, AMP_IOCB_READ,   pth_read);
       amp_server_configure(s, AMP_IOCB_WRITE,  pth_write);
         :
       amp_server_register(s, "foo", foo, xds);
       amp_server_register(s, "bar", bar, NULL);
       amp_server_register(s, "baz", baz, NULL);
       amp_server_register(s, "quux", quux, NULL);
  
       amp_server_listen(s);
  
       /* synchronous */
       amp_server_loop(s);
  
       /* asynchronous */
       while ((c = amp_server_accept(s))) {
           pth_t *t;
           if ((t = pth_spawn(...)) == NULL) {
               amp_server_dispatch(c);
           }
           pth_wait(t);
       }
  
       amp_server_unlisten(s);
  
       amp_server_destroy(s);
       xds_destroy(xds);
  
  Client:
       amp_client_t *c;
       amp_connection_t *co;
       xds_ctx_t *xds;
       amp_data_t in, out;
       int i = ...;
       char *cp = ...;
       int rv;
  
       c = amp_client_create();
       xds = xds_create(XDS_ASN1);
  
       amp_client_configure(c, AMP_CONNECT, "udp", "server1.de.cw.net", 12345);
       amp_client_configure(c, AMP_CONNECT, "tcp", "server1.de.cw.net", 12345);
  
       co = amp_client_connect(c);
  
       xds_encode(xds, in, "%d%s", i, cp);
       out = amp_client_call(co, "foo", in);
       xds_decode(xds, out, "%d", &rv);
  
       /* ... rv ... */
  
       amp_client_disconnect(co);
  
       xds_destroy(xds);
       amp_client_destroy(c);
  
  
  Index: ossp-pkg/srpc/TODO
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 TODO
  --- ossp-pkg/srpc/TODO	2001/06/12 13:14:48	1.3
  +++ ossp-pkg/srpc/TODO	2001/06/21 05:16:05	1.4
  @@ -1,31 +1,7 @@
  -Simple RPC
  -==========
   
  -Architecture:
  -- Abstracted Message Passing Library: libamp
  -- eXtendable Data Serialization Library: libxds
  -- Simple Remote Procedure Call Library: libsrpc
  +TODO LIST AND MILESTONES
  +========================
   
  -TODO:
  -
  -- The server actually performing the function call has to interpret
  -  the transferred data according to the functions prototype. This may
  -  be done in one of the following ways:
  -
  -   - All functions have the same prototype. The function may then be a
  -     stub calling the actual function. These stubs can be generated
  -     manually or semi-automatically.
  -
  -   - Allow only a finite set of prototypes and switch according to the
  -     function tye, like in eAPI in Apache.
  -
  -   - Build function call dynamically using the Foreign Function Call
  -     library.
  -
  -- The programmer should be able to specify whether his implementations
  -  need guarantees of being called at least once, exactly once, etc.
  -
  -
   o M1 (peti) [11-Jun-2001]
     - evaluation (-> ideas)
       (checklist)
  @@ -57,3 +33,4 @@
   
   o M8 (rse)
     - OSSP integration
  +

From ossp-cvs-owner@ossp.org  Tue Jun 26 13:43:52 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f5QBho151733; Tue, 26 Jun 2001 13:43:50 +0200 (CEST)
Date: Tue, 26 Jun 2001 13:43:50 +0200 (CEST)
Message-Id: <200106261143.f5QBho151733@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc EVAL
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   26-Jun-2001 13:43:50
  Branch: HEAD                             Handle: 2001062612435000

  Modified files:
    ossp-pkg/srpc           EVAL

  Log:
     - Provide the version numbers for the packages we evaluated.
     - Enhanced description of Spread.
     - Added description of ORBit.
     - Added description of DCE RPC.

  Summary:
    Revision    Changes     Path
    1.11        +30 -15     ossp-pkg/srpc/EVAL
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/EVAL
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 EVAL
  --- ossp-pkg/srpc/EVAL	2001/06/20 19:18:24	1.10
  +++ ossp-pkg/srpc/EVAL	2001/06/26 11:43:50	1.11
  @@ -1,7 +1,7 @@
   			      Evaluation
   			      ==========
   
  -o Spread, http://www.spread.org/
  +o Spread 3.15.2, http://www.spread.org/
   
     Spread is a sophisticated message passing framework. The software
     itself is written in C and uses a design very similar to SRPC's: It
  @@ -24,15 +24,15 @@
         and then releasing Spread under a real Open Source license.
   
       - It is not possible for peers to communicate without the daemon.
  -      (RSE: I'm not sure about this. If I understood the Spread guys
  -      correctly at ApacheCon 2001 it should be possible to run it
  -      without the daemon or at least with an own application-dedicated
  -      daemon instead of a system-dedicated daemon. We should check this
  -      in details).
   
       - The API for the programmer is somewhat messy.
   
  +    - No GNU autoconf, no install target.
   
  +    - The I/O system is hardcoded into the library and cannot be
  +      customized for our own needs.
  +
  +
   o XML-RPC, http://www.xmlrpc.org/
   
     XML-RPC is a standardized remote procedure call framework for which
  @@ -64,8 +64,9 @@
     evaluation showed that 1. user-space dispatching is usually faster
     than dispatching in kernel-space and 2. GNU Pth proofed that
     user-space threading can be done in a very portable way).
  +
   
  -o MRPC, http://www.tildeslash.org/mrpc.html
  +o MRPC 0.9.1, http://www.tildeslash.org/mrpc.html
   
     "Modular RPC" is a minimalistic remote procedure call mechanism
     using a similar design as the original RPC: It consists of a code
  @@ -79,18 +80,25 @@
     trivially be used in plain C or any other language.
   
   
  -o LinuxDoors, http://www.rampant.org/doors/
  +o LinuxDoors 0.9, http://www.rampant.org/doors/
   
     The author discontinued development of the package in May 2001. The
     current version 0.9 is considered to be alpha quality software.
   
   
  -o ORBit, http://orbit-resource.sourceforge.net/
  +o ORBit 0.5.8, http://orbit-resource.sourceforge.net/
   
  -  ORBit is a CORBA 2.2-compliant object request broker. Do I need to
  -  say more?
  +  ORBit implements the CORBA 2.2 protocol in order to provide RPC
  +  services. The source code is written in C and has been licensed
  +  under the GNU GPL for the general public. Considering the fact that
  +  ORBit uses CORBA, it is very fast and efficient. ORBit allows
  +  peer-to-peer communication without the use of a request broker and
  +  comes with an "interface definition language" (IDL) that is used for
  +  marshalling the parameters of remote function calls.
   
  +   - Requires glib 1.2.1 or newer.
   
  +
   o TIRPC, ftp://ftp.uu.net/networking/rpc/
   
     The "Transport Independent RPC" package is derived from the original
  @@ -108,9 +116,17 @@
     rfc2203.txt
     rfc2695.txt
   
  +
  +o DCE RPC, ftp://gatekeeper.dec.com/pub/DEC/DCE/
   
  -o DCERPC
  -  ftp://gatekeeper.dec.com/pub/DEC/DCE/
  +  This package was developed by the Open Software Foundation (OSF) in
  +  1993. It appears not to have changed since then: there is no support
  +  for GNU autoconf and consequently the build system fails miserably.
  +  Furthermore, the package inherently depends on pthreads but seems to
  +  call functions that are not part of the standard pthread
  +  implementation. Our impression is that a lot of clean-up work would
  +  be necessary before the package can even be compiled -- let alone be
  +  tested.
   
   
   o Foreign Function Call Library
  @@ -125,11 +141,10 @@
   o HiM
     http://www.sama.ru/~despair/him/
   o pbio
  -  ftp://ftp.cc.gatech.edu/pub/groups/systems/chaos/pbio/ 
  +  ftp://ftp.cc.gatech.edu/pub/groups/systems/chaos/pbio/
   o SunRPC XDR
     RFC1832
   o XTL
     http://gsd.di.uminho.pt/jop/xtl/
   o CORBA GIOP CDR
     ???
  -

From ossp-cvs-owner@ossp.org  Tue Jun 26 13:46:39 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f5QBkcn52117; Tue, 26 Jun 2001 13:46:38 +0200 (CEST)
Date: Tue, 26 Jun 2001 13:46:38 +0200 (CEST)
Message-Id: <200106261146.f5QBkcn52117@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc EVAL
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   26-Jun-2001 13:46:38
  Branch: HEAD                             Handle: 2001062612463800

  Modified files:
    ossp-pkg/srpc           EVAL

  Log:
    Fixed spelling of "marshalling".

  Summary:
    Revision    Changes     Path
    1.12        +1  -1      ossp-pkg/srpc/EVAL
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/EVAL
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 EVAL
  --- ossp-pkg/srpc/EVAL	2001/06/26 11:43:50	1.11
  +++ ossp-pkg/srpc/EVAL	2001/06/26 11:46:38	1.12
  @@ -73,7 +73,7 @@
     generator that will encapsulate function definitions in such a way
     that they can be called remotely with the functions provided in a
     link library. The whole system is very lean and efficient,
  -  marshaling is done automatically for most data types, and the
  +  marshalling is done automatically for most data types, and the
     provided documentation is sufficient.
   
     Unfortunately, the whole system is written in C++ and can thus not

From ossp-cvs-owner@ossp.org  Tue Jun 26 14:24:30 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f5QCOSK56137; Tue, 26 Jun 2001 14:24:28 +0200 (CEST)
Date: Tue, 26 Jun 2001 14:24:28 +0200 (CEST)
Message-Id: <200106261224.f5QCOSK56137@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc architecture.fig
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   26-Jun-2001 14:24:28
  Branch: HEAD                             Handle: 2001062613242800

  Added files:
    ossp-pkg/srpc           architecture.fig

  Log:
    Preliminary version of the architecture diagram.

  Summary:
    Revision    Changes     Path
    1.1         +62 -0      ossp-pkg/srpc/architecture.fig
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/architecture.fig
  ============================================================
  $ cvs update -p -r1.1 architecture.fig
  #FIG 3.2
  Landscape
  Center
  Inches
  Letter  
  100.00
  Single
  -2
  1200 2
  6 1575 5925 2925 7200
  4 0 0 50 0 0 24 0.0000 2 255 1245 1627 6225 Abstract\001
  4 0 0 50 0 0 24 0.0000 2 330 1305 1597 6645 Message\001
  4 0 0 50 0 0 24 0.0000 2 330 1155 1672 7065 Passing\001
  -6
  6 4425 5925 6225 7125
  4 0 0 50 0 0 24 0.0000 2 255 1665 4492 6225 Extendable\001
  4 0 0 50 0 0 24 0.0000 2 255 690 4980 6645 Data\001
  4 0 0 50 0 0 24 0.0000 2 255 1800 4425 7065 Serialization\001
  -6
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
  	 3975 7275 6750 7275
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
  	 4650 10050 4650 7275
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
  	 5325 7275 5325 10050
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
  	 6000 7275 6000 10050
  2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
  	 3975 10050 6750 10050 6750 5775 3975 5775 3975 10050
  2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
  	 825 5625 6750 5625 6750 4725 825 4725 825 5625
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
  	 825 7275 3600 7275
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
  	 1500 10050 1500 7275
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
  	 2175 7275 2175 10050
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
  	 2850 7275 2850 10050
  2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
  	 825 10050 3600 10050 3600 5775 825 5775 825 10050
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
  	 7800 4725 7800 7275
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
  	 8475 4725 8475 7275
  2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
  	 7125 4725 9150 4725 9150 7275 7125 7275 7125 4725
  2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
  	 825 4575 9150 4575 9150 3675 825 3675 825 4575
  4 0 0 50 0 0 24 4.7124 2 255 720 5550 8100 XDS\001
  4 0 0 50 0 0 24 4.7124 2 255 720 4200 8100 XTL\001
  4 0 0 50 0 0 24 4.7124 2 255 705 4875 8100 HiM\001
  4 0 0 50 0 0 24 4.7124 2 255 990 6225 8100 ASN.1\001
  4 0 0 50 0 0 24 4.7124 2 255 705 1050 8100 TCP\001
  4 0 0 50 0 0 24 4.7124 2 300 1050 1725 7950 T/TCP\001
  4 0 0 50 0 0 24 4.7124 2 255 750 2400 8100 UDP\001
  4 0 0 50 0 0 24 4.7124 2 255 1395 3075 7875 Multicast\001
  4 0 0 50 0 0 24 0.0000 2 330 4545 1500 5250 Simple Remote Procedure Call\001
  4 0 0 50 0 0 24 4.7124 2 255 1995 7425 5025 function A.so\001
  4 0 0 50 0 0 24 4.7124 2 255 1980 8025 5025 function B.so\001
  4 0 0 50 0 0 24 4.7124 2 255 1980 8625 5025 function C.so\001
  4 0 0 50 0 0 24 0.0000 2 330 1965 4125 4275 srpc Daemon\001

From ossp-cvs-owner@ossp.org  Wed Jun 27 23:07:38 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f5RL7a792634; Wed, 27 Jun 2001 23:07:36 +0200 (CEST)
Date: Wed, 27 Jun 2001 23:07:36 +0200 (CEST)
Message-Id: <200106272107.f5RL7a792634@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc EVAL
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   27-Jun-2001 23:07:36
  Branch: HEAD                             Handle: 2001062722073600

  Modified files:
    ossp-pkg/srpc           EVAL

  Log:
    Now it's official: It's spelled "marshaling". I found it spelled that
    way in Richard Stevens book "Network Programming".

  Summary:
    Revision    Changes     Path
    1.13        +2  -2      ossp-pkg/srpc/EVAL
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/EVAL
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 EVAL
  --- ossp-pkg/srpc/EVAL	2001/06/26 11:46:38	1.12
  +++ ossp-pkg/srpc/EVAL	2001/06/27 21:07:36	1.13
  @@ -73,7 +73,7 @@
     generator that will encapsulate function definitions in such a way
     that they can be called remotely with the functions provided in a
     link library. The whole system is very lean and efficient,
  -  marshalling is done automatically for most data types, and the
  +  marshaling is done automatically for most data types, and the
     provided documentation is sufficient.
   
     Unfortunately, the whole system is written in C++ and can thus not
  @@ -94,7 +94,7 @@
     ORBit uses CORBA, it is very fast and efficient. ORBit allows
     peer-to-peer communication without the use of a request broker and
     comes with an "interface definition language" (IDL) that is used for
  -  marshalling the parameters of remote function calls.
  +  marshaling the parameters of remote function calls.
   
      - Requires glib 1.2.1 or newer.
   

From ossp-cvs-owner@ossp.org  Wed Jun 27 23:10:03 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f5RLA1R92848; Wed, 27 Jun 2001 23:10:01 +0200 (CEST)
Date: Wed, 27 Jun 2001 23:10:01 +0200 (CEST)
Message-Id: <200106272110.f5RLA1R92848@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc EVAL
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   27-Jun-2001 23:10:01
  Branch: HEAD                             Handle: 2001062722100100

  Modified files:
    ossp-pkg/srpc           EVAL

  Log:
    Added comment about SunRPC.

  Summary:
    Revision    Changes     Path
    1.14        +5  -7      ossp-pkg/srpc/EVAL
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/EVAL
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 EVAL
  --- ossp-pkg/srpc/EVAL	2001/06/27 21:07:36	1.13
  +++ ossp-pkg/srpc/EVAL	2001/06/27 21:10:01	1.14
  @@ -108,13 +108,11 @@
   
   
   o SunRPC
  -  rfc1050.txt
  -  rfc1057.txt
  -  rfc1790.txt
  -  rfc1831.txt
  -  rfc1833.txt
  -  rfc2203.txt
  -  rfc2695.txt
  +
  +  The "original". While the RPC mechanism itself is fine, proven and
  +  widely available, the API for the programmer is insufficient: SunRPC
  +  does not support any asynchronous message passing in a sensible way.
  +  Furthermore, the standard dictates the use of XDR.
   
   
   o DCE RPC, ftp://gatekeeper.dec.com/pub/DEC/DCE/

From ossp-cvs-owner@ossp.org  Thu Jun 28 13:45:15 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f5SBjEh98870; Thu, 28 Jun 2001 13:45:14 +0200 (CEST)
Date: Thu, 28 Jun 2001 13:45:14 +0200 (CEST)
Message-Id: <200106281145.f5SBjEh98870@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc architecture.fig
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   28-Jun-2001 13:45:14
  Branch: HEAD                             Handle: 2001062812451400

  Modified files:
    ossp-pkg/srpc           architecture.fig

  Log:
    Moved the picture up in order to conserve space on the canvas.

  Summary:
    Revision    Changes     Path
    1.2         +36 -36     ossp-pkg/srpc/architecture.fig
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/architecture.fig
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 architecture.fig
  --- ossp-pkg/srpc/architecture.fig	2001/06/26 12:24:28	1.1
  +++ ossp-pkg/srpc/architecture.fig	2001/06/28 11:45:14	1.2
  @@ -7,56 +7,56 @@
   Single
   -2
   1200 2
  -6 1575 5925 2925 7200
  -4 0 0 50 0 0 24 0.0000 2 255 1245 1627 6225 Abstract\001
  -4 0 0 50 0 0 24 0.0000 2 330 1305 1597 6645 Message\001
  -4 0 0 50 0 0 24 0.0000 2 330 1155 1672 7065 Passing\001
  +6 900 2400 2250 3675
  +4 0 0 50 0 0 24 0.0000 2 255 1245 952 2700 Abstract\001
  +4 0 0 50 0 0 24 0.0000 2 330 1305 922 3120 Message\001
  +4 0 0 50 0 0 24 0.0000 2 330 1155 997 3540 Passing\001
   -6
  -6 4425 5925 6225 7125
  -4 0 0 50 0 0 24 0.0000 2 255 1665 4492 6225 Extendable\001
  -4 0 0 50 0 0 24 0.0000 2 255 690 4980 6645 Data\001
  -4 0 0 50 0 0 24 0.0000 2 255 1800 4425 7065 Serialization\001
  +6 3750 2400 5550 3600
  +4 0 0 50 0 0 24 0.0000 2 255 1665 3817 2700 Extendable\001
  +4 0 0 50 0 0 24 0.0000 2 255 690 4305 3120 Data\001
  +4 0 0 50 0 0 24 0.0000 2 255 1800 3750 3540 Serialization\001
   -6
   2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
  -	 3975 7275 6750 7275
  +	 3300 3750 6075 3750
   2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
  -	 4650 10050 4650 7275
  +	 3975 6525 3975 3750
   2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
  -	 5325 7275 5325 10050
  +	 4650 3750 4650 6525
   2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
  -	 6000 7275 6000 10050
  +	 5325 3750 5325 6525
   2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
  -	 3975 10050 6750 10050 6750 5775 3975 5775 3975 10050
  +	 3300 6525 6075 6525 6075 2250 3300 2250 3300 6525
   2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
  -	 825 5625 6750 5625 6750 4725 825 4725 825 5625
  +	 150 2100 6075 2100 6075 1200 150 1200 150 2100
   2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
  -	 825 7275 3600 7275
  +	 150 3750 2925 3750
   2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
  -	 1500 10050 1500 7275
  +	 825 6525 825 3750
   2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
  -	 2175 7275 2175 10050
  +	 1500 3750 1500 6525
   2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
  -	 2850 7275 2850 10050
  +	 2175 3750 2175 6525
   2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
  -	 825 10050 3600 10050 3600 5775 825 5775 825 10050
  +	 150 6525 2925 6525 2925 2250 150 2250 150 6525
   2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
  -	 7800 4725 7800 7275
  +	 7125 1200 7125 3750
   2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
  -	 8475 4725 8475 7275
  +	 7800 1200 7800 3750
   2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
  -	 7125 4725 9150 4725 9150 7275 7125 7275 7125 4725
  +	 6450 1200 8475 1200 8475 3750 6450 3750 6450 1200
   2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
  -	 825 4575 9150 4575 9150 3675 825 3675 825 4575
  -4 0 0 50 0 0 24 4.7124 2 255 720 5550 8100 XDS\001
  -4 0 0 50 0 0 24 4.7124 2 255 720 4200 8100 XTL\001
  -4 0 0 50 0 0 24 4.7124 2 255 705 4875 8100 HiM\001
  -4 0 0 50 0 0 24 4.7124 2 255 990 6225 8100 ASN.1\001
  -4 0 0 50 0 0 24 4.7124 2 255 705 1050 8100 TCP\001
  -4 0 0 50 0 0 24 4.7124 2 300 1050 1725 7950 T/TCP\001
  -4 0 0 50 0 0 24 4.7124 2 255 750 2400 8100 UDP\001
  -4 0 0 50 0 0 24 4.7124 2 255 1395 3075 7875 Multicast\001
  -4 0 0 50 0 0 24 0.0000 2 330 4545 1500 5250 Simple Remote Procedure Call\001
  -4 0 0 50 0 0 24 4.7124 2 255 1995 7425 5025 function A.so\001
  -4 0 0 50 0 0 24 4.7124 2 255 1980 8025 5025 function B.so\001
  -4 0 0 50 0 0 24 4.7124 2 255 1980 8625 5025 function C.so\001
  -4 0 0 50 0 0 24 0.0000 2 330 1965 4125 4275 srpc Daemon\001
  +	 150 1050 8475 1050 8475 150 150 150 150 1050
  +4 0 0 50 0 0 24 4.7124 2 255 720 4875 4575 XDS\001
  +4 0 0 50 0 0 24 4.7124 2 255 720 3525 4575 XTL\001
  +4 0 0 50 0 0 24 4.7124 2 255 705 4200 4575 HiM\001
  +4 0 0 50 0 0 24 4.7124 2 255 990 5550 4575 ASN.1\001
  +4 0 0 50 0 0 24 4.7124 2 255 705 375 4575 TCP\001
  +4 0 0 50 0 0 24 4.7124 2 300 1050 1050 4425 T/TCP\001
  +4 0 0 50 0 0 24 4.7124 2 255 750 1725 4575 UDP\001
  +4 0 0 50 0 0 24 4.7124 2 255 1395 2400 4350 Multicast\001
  +4 0 0 50 0 0 24 0.0000 2 330 4545 825 1725 Simple Remote Procedure Call\001
  +4 0 0 50 0 0 24 4.7124 2 255 1995 6750 1500 function A.so\001
  +4 0 0 50 0 0 24 4.7124 2 255 1980 7350 1500 function B.so\001
  +4 0 0 50 0 0 24 4.7124 2 255 1980 7950 1500 function C.so\001
  +4 0 0 50 0 0 24 0.0000 2 330 1965 3450 750 srpc Daemon\001

From ossp-cvs-owner@ossp.org  Thu Jun 28 14:30:58 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f5SCUwa04859; Thu, 28 Jun 2001 14:30:58 +0200 (CEST)
Date: Thu, 28 Jun 2001 14:30:58 +0200 (CEST)
Message-Id: <200106281230.f5SCUwa04859@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds .cvsignore
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   28-Jun-2001 14:30:58
  Branch: HEAD                             Handle: 2001062813305800

  Added files:
    ossp-pkg/srpc/libxds    .cvsignore

  Log:
    Ignore executable 'test'.

  Summary:
    Revision    Changes     Path
    1.1         +1  -0      ossp-pkg/srpc/libxds/.cvsignore
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  test

From ossp-cvs-owner@ossp.org  Thu Jun 28 14:31:23 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f5SCVMp04916; Thu, 28 Jun 2001 14:31:22 +0200 (CEST)
Date: Thu, 28 Jun 2001 14:31:22 +0200 (CEST)
Message-Id: <200106281231.f5SCVMp04916@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xds.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   28-Jun-2001 14:31:22
  Branch: HEAD                             Handle: 2001062813312200

  Added files:
    ossp-pkg/srpc/libxds    xds.h

  Log:
    First attempt of an interface definition for the library.

  Summary:
    Revision    Changes     Path
    1.1         +0  -0      ossp-pkg/srpc/libxds/xds.h
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xds.h
  ============================================================
  $ cvs update -p -r1.1 xds.h
  /*
     $Source: /e/ossp/cvs/ossp-pkg/srpc/libxds/xds.h,v $
     $Revision: 1.1 $
  
     Copyright (c) 2001 by Cable & Wireless Deutschland.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     This software is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
     included license for more details.
  */
  
  #ifndef __LIBXDS_H__
  #define __LIBXDS_H__
  
  #include <stdlib.h>
  
  typedef struct
      {
      }
  xds_ctx;
  
  xds_ctx* xds_init(void);
  void     xds_destroy(xds_ctx* context);
  
  typedef int (*xds_formatter_cb)(char* buf, size_t buf_size, void* val);
  int xds_register(xds_ctx* context, const char* name, xds_formatter_cb callback);
  
  int xds_mashal(xds_ctx* context, const char* fmt, ...);
  int xds_snmashal(xds_ctx* context, char* buf, size_t buf_size, const char* fmt, ...);
  int xds_amashal(xds_ctx* context, char** buf_p, size_t buf_size, const char* fmt, ...);
  
  #endif /* !defined(__LIBXDS_H__) */

From ossp-cvs-owner@ossp.org  Thu Jun 28 14:32:05 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f5SCW4J04998; Thu, 28 Jun 2001 14:32:04 +0200 (CEST)
Date: Thu, 28 Jun 2001 14:32:04 +0200 (CEST)
Message-Id: <200106281232.f5SCW4J04998@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   28-Jun-2001 14:32:04
  Branch: HEAD                             Handle: 2001062813320400

  Added files:
    ossp-pkg/srpc/libxds    Makefile test.c

  Log:
    The build infrastructure for the libarary. Currently does not more
    than compile an empty test program in order to check the syntax of
    xds.h.

  Summary:
    Revision    Changes     Path
    1.1         +28 -0      ossp-pkg/srpc/libxds/Makefile
    1.1         +0  -0      ossp-pkg/srpc/libxds/test.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile
  ============================================================
  $ cvs update -p -r1.1 Makefile
  # Build libxds and support/test programs.
  
  CC		= gcc
  CXX		= g++
  
  WARNFLAGS	= -Wall -ansi -pedantic
  OPTFLAGS	= -O3 -pipe
  
  CPPFLAGS	=
  CFLAGS		=
  CXXFLAGS	=
  LDFLAGS		= -s
  
  .c.o:
  	$(CC) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CFLAGS) -c $<
  
  .cpp.o:
  	$(CXX) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CXXFLAGS) -c $<
  
  test:		test.o
  	$(CXX) $(LDFLAGS) -o $@ test.o
  
  clean::
  	rm -f test.o test
  
  # Dependencies
  
  test.o: test.c xds.h
  Index: ossp-pkg/srpc/libxds/test.c
  ============================================================
  $ cvs update -p -r1.1 test.c
  /*
     $Source: /e/ossp/cvs/ossp-pkg/srpc/libxds/test.c,v $
     $Revision: 1.1 $
  
     Copyright (c) 2001 by Cable & Wireless Deutschland.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     This software is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
     included license for more details.
  */
  
  #include "xds.h"
  
  int main(int argc, char** argv)
      {
      return 0;
      }

From ossp-cvs-owner@ossp.org  Thu Jun 28 14:42:11 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f5SCgA705936; Thu, 28 Jun 2001 14:42:10 +0200 (CEST)
Date: Thu, 28 Jun 2001 14:42:10 +0200 (CEST)
Message-Id: <200106281242.f5SCgA705936@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xds.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   28-Jun-2001 14:42:10
  Branch: HEAD                             Handle: 2001062813421000

  Modified files:
    ossp-pkg/srpc/libxds    xds.h

  Log:
    Added mechanism for adding an array of formatter callbacks with one
    function call.

  Summary:
    Revision    Changes     Path
    1.2         +13 -3      ossp-pkg/srpc/libxds/xds.h
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xds.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xds.h
  --- ossp-pkg/srpc/libxds/xds.h	2001/06/28 12:31:22	1.1
  +++ ossp-pkg/srpc/libxds/xds.h	2001/06/28 12:42:10	1.2
  @@ -1,6 +1,6 @@
   /*
      $Source: /e/ossp/cvs/ossp-pkg/srpc/libxds/xds.h,v $
  -   $Revision: 1.1 $
  +   $Revision: 1.2 $
   
      Copyright (c) 2001 by Cable & Wireless Deutschland.
   
  @@ -20,16 +20,26 @@
   
   #include <stdlib.h>
   
  +typedef int (*xds_formatter_cb)(char* buf, size_t buf_size, void* val);
  +typedef struct
  +    {
  +    char* name;
  +    xds_formatter_cb callback;
  +    }
  +xds_formatter_cb_desc;
  +
   typedef struct
       {
  +    xds_formatter_cb_desc* formatters;
  +    size_t formatters_size;
       }
   xds_ctx;
   
   xds_ctx* xds_init(void);
   void     xds_destroy(xds_ctx* context);
   
  -typedef int (*xds_formatter_cb)(char* buf, size_t buf_size, void* val);
   int xds_register(xds_ctx* context, const char* name, xds_formatter_cb callback);
  +int xds_vregister(xds_ctx* context, const xds_formatter_cb_desc* callbacks, size_t size);
   
   int xds_mashal(xds_ctx* context, const char* fmt, ...);
   int xds_snmashal(xds_ctx* context, char* buf, size_t buf_size, const char* fmt, ...);

From ossp-cvs-owner@ossp.org  Thu Jun 28 16:08:01 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f5SE80T16552; Thu, 28 Jun 2001 16:08:00 +0200 (CEST)
Date: Thu, 28 Jun 2001 16:08:00 +0200 (CEST)
Message-Id: <200106281408.f5SE80T16552@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc BRES
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   28-Jun-2001 16:08:00
  Branch: HEAD                             Handle: 2001062815080000

  Modified files:
    ossp-pkg/srpc           BRES

  Log:
    Documented design decision against supporting complex data types in
    libxds.

  Summary:
    Revision    Changes     Path
    1.2         +18 -6      ossp-pkg/srpc/BRES
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/BRES
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 BRES
  --- ossp-pkg/srpc/BRES	2001/06/21 05:16:05	1.1
  +++ ossp-pkg/srpc/BRES	2001/06/28 14:08:00	1.2
  @@ -7,6 +7,18 @@
     - eXtendable Data Serialization Library: libxds
     - Simple Remote Procedure Call Library: libsrpc
   
  +- libxds does intentionally NOT support the concept of arrays and
  +  structures ("sequence" and "record" in ASN.1-speak), because not all
  +  encoding systems support structured data. Hence, someone who'd want
  +  to decode the serialized buffer cannot rely on this information
  +  actually being included in the encoded data.
  +
  +  The only use of having these capabilities nonetheles would be that
  +  the decode function could type-check the specification of what has
  +  been received against the actual contents of the data. While this is
  +  nice to have, we did not consider this to be reason enough to add
  +  complexity to our interface and implementation.
  +
   - The server actually performing the function call has to interpret
     the transferred data according to the functions prototype. This may
     be done in one of the following ways:
  @@ -27,14 +39,14 @@
     because
     o constant function prototype on server-side
       (foreign function call problem!)
  -  o only application knows how to convert 
  +  o only application knows how to convert
       complex data structures (foo_t) into
       serialized octet-stream
     o greater flexibility in data transfer
     o rpc library complexity is reduced
       (on cost of application complexity)
   
  -  instead remote procedure call 
  +  instead remote procedure call
     only message passing
   
   - auditing/logging:
  @@ -46,7 +58,7 @@
     sepatered from data serialization
   
   - error semantics:
  -  transaction, ACID 
  +  transaction, ACID
     o exactly-once (== 1) bank transaction
     o at-least-once (>= 1) muss passieren, mehrfach tut nicht weh (seiteneffekte) SunRPC
     o at-most-once (<= 1) logging of not important data, video conferneces
  @@ -61,7 +73,7 @@
   
   - asynchronous vs. synchronous
     Ideee: intern immer asynchrouns
  -  aber in API wrapper function 
  +  aber in API wrapper function
     rpc_call == rpc_send+rpc_wait+rpc_result
     und auch rpc_abort
     trotzdem wird beide male ein timeout vorgesehen
  @@ -135,7 +147,7 @@
   
   - Firewalls? Sollen die Filtern koennen
     Encryption nur von Data, nicht von Meta-Data
  -- Proxies? 
  +- Proxies?
   
   - Sowohl AMP als auch XDR muessen backends von
     Application implementieren lassen!
  @@ -153,7 +165,7 @@
     - Fail Over
   
   - IPv6 in AMP unterstuetzen
  -- Multicasting in AMP unterstuetzen (trivial I/O seitig, 
  +- Multicasting in AMP unterstuetzen (trivial I/O seitig,
     aber muss bei error semantics beruecksichtig werden)
   
   =========================================================================================

From ossp-cvs-owner@ossp.org  Thu Jun 28 16:42:08 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f5SEg7421157; Thu, 28 Jun 2001 16:42:07 +0200 (CEST)
Date: Thu, 28 Jun 2001 16:42:07 +0200 (CEST)
Message-Id: <200106281442.f5SEg7421157@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xds.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   28-Jun-2001 16:42:07
  Branch: HEAD                             Handle: 2001062815420600

  Modified files:
    ossp-pkg/srpc/libxds    xds.h

  Log:
    Revised the interface after reviewing it with RSE.

  Summary:
    Revision    Changes     Path
    1.3         +31 -22     ossp-pkg/srpc/libxds/xds.h
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xds.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xds.h
  --- ossp-pkg/srpc/libxds/xds.h	2001/06/28 12:42:10	1.2
  +++ ossp-pkg/srpc/libxds/xds.h	2001/06/28 14:42:06	1.3
  @@ -1,6 +1,6 @@
   /*
      $Source: /e/ossp/cvs/ossp-pkg/srpc/libxds/xds.h,v $
  -   $Revision: 1.2 $
  +   $Revision: 1.3 $
   
      Copyright (c) 2001 by Cable & Wireless Deutschland.
   
  @@ -19,30 +19,39 @@
   #define __LIBXDS_H__
   
   #include <stdlib.h>
  +#include <stdarg.h>
   
  -typedef int (*xds_formatter_cb)(char* buf, size_t buf_size, void* val);
  -typedef struct
  +struct xds_ctx;
  +
  +typedef int (*xds_fmt_cb_t)(struct xds_ctx* context,
  +			    void* fmt_context,
  +			    char* buf, size_t buf_size,
  +			    va_list val);
  +
  +struct fmt_cb
       {
  -    char* name;
  -    xds_formatter_cb callback;
  -    }
  -xds_formatter_cb_desc;
  +    char*          name;
  +    xds_fmt_cb_t   callback;
  +    void*          fmt_context;
  +    };
   
  -typedef struct
  +struct xds_ctx
       {
  -    xds_formatter_cb_desc* formatters;
  -    size_t formatters_size;
  -    }
  -xds_ctx;
  -
  -xds_ctx* xds_init(void);
  -void     xds_destroy(xds_ctx* context);
  -
  -int xds_register(xds_ctx* context, const char* name, xds_formatter_cb callback);
  -int xds_vregister(xds_ctx* context, const xds_formatter_cb_desc* callbacks, size_t size);
  -
  -int xds_mashal(xds_ctx* context, const char* fmt, ...);
  -int xds_snmashal(xds_ctx* context, char* buf, size_t buf_size, const char* fmt, ...);
  -int xds_amashal(xds_ctx* context, char** buf_p, size_t buf_size, const char* fmt, ...);
  +    struct fmt_cb* formatters;
  +    };
  +typedef struct xds_ctx xds_ctx_t;
  +
  +xds_ctx_t*  xds_init(void);
  +void        xds_destroy(xds_ctx_t* context);
  +
  +int xds_register(xds_ctx_t* context,
  +		 const char* name, xds_fmt_cb_t callback,
  +		 void* formatter_context);
  +int xds_unregister(xds_ctx_t* context, const char* name);
  +
  +int xds_encode(xds_ctx_t* context, char* buf, size_t buf_size, const char* fmt, ...);
  +char* xds_aencode(xds_ctx_t* context, const char* fmt, ...);
  +
  +int xds_decode(xds_ctx_t* context, const char* buf, const char* fmt, ...);
   
   #endif /* !defined(__LIBXDS_H__) */

From ossp-cvs-owner@ossp.org  Thu Jun 28 17:25:25 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f5SFPOU26308; Thu, 28 Jun 2001 17:25:24 +0200 (CEST)
Date: Thu, 28 Jun 2001 17:25:24 +0200 (CEST)
Message-Id: <200106281525.f5SFPOU26308@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xds.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   28-Jun-2001 17:25:24
  Branch: HEAD                             Handle: 2001062816252300

  Modified files:
    ossp-pkg/srpc/libxds    xds.h

  Log:
    The API after the seconds review with RSE.

  Summary:
    Revision    Changes     Path
    1.4         +12 -18     ossp-pkg/srpc/libxds/xds.h
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xds.h
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xds.h
  --- ossp-pkg/srpc/libxds/xds.h	2001/06/28 14:42:06	1.3
  +++ ossp-pkg/srpc/libxds/xds.h	2001/06/28 15:25:23	1.4
  @@ -1,6 +1,6 @@
   /*
      $Source: /e/ossp/cvs/ossp-pkg/srpc/libxds/xds.h,v $
  -   $Revision: 1.3 $
  +   $Revision: 1.4 $
   
      Copyright (c) 2001 by Cable & Wireless Deutschland.
   
  @@ -22,24 +22,12 @@
   #include <stdarg.h>
   
   struct xds_ctx;
  +typedef struct xds_ctx xds_ctx_t;
   
  -typedef int (*xds_fmt_cb_t)(struct xds_ctx* context,
  +typedef int (*xds_fmt_cb_t)(xds_ctx_t* context,
   			    void* fmt_context,
   			    char* buf, size_t buf_size,
  -			    va_list val);
  -
  -struct fmt_cb
  -    {
  -    char*          name;
  -    xds_fmt_cb_t   callback;
  -    void*          fmt_context;
  -    };
  -
  -struct xds_ctx
  -    {
  -    struct fmt_cb* formatters;
  -    };
  -typedef struct xds_ctx xds_ctx_t;
  +			    va_list args);
   
   xds_ctx_t*  xds_init(void);
   void        xds_destroy(xds_ctx_t* context);
  @@ -47,11 +35,17 @@
   int xds_register(xds_ctx_t* context,
   		 const char* name, xds_fmt_cb_t callback,
   		 void* formatter_context);
  +int xds_register_xdr(xds_ctx_t* context);
  +int xds_register_xml(xds_ctx_t* context);
  +int xds_register_asn1(xds_ctx_t* context);
   int xds_unregister(xds_ctx_t* context, const char* name);
   
  -int xds_encode(xds_ctx_t* context, char* buf, size_t buf_size, const char* fmt, ...);
  -char* xds_aencode(xds_ctx_t* context, const char* fmt, ...);
  +char* xds_get_buffer(xds_ctx_t* context);
  +int xds_set_buffer(xds_ctx_t* context, char* buf, size_t buf_size);
   
  +int xds_encode(xds_ctx_t* context, const char* fmt, ...);
   int xds_decode(xds_ctx_t* context, const char* buf, const char* fmt, ...);
  +int xds_vdecode(xds_ctx_t* context, const char* buf, const char* fmt, va_list args);
  +int xds_vencode(xds_ctx_t* context, const char* fmt, va_list args);
   
   #endif /* !defined(__LIBXDS_H__) */

From ossp-cvs-owner@ossp.org  Thu Jun 28 18:09:17 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f5SG9GH32130; Thu, 28 Jun 2001 18:09:16 +0200 (CEST)
Date: Thu, 28 Jun 2001 18:09:16 +0200 (CEST)
Message-Id: <200106281609.f5SG9GH32130@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xds.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   28-Jun-2001 18:09:16
  Branch: HEAD                             Handle: 2001062817091600

  Modified files:
    ossp-pkg/srpc/libxds    xds.h

  Log:
    And now we have the result of the third review ...

  Summary:
    Revision    Changes     Path
    1.5         +21 -19     ossp-pkg/srpc/libxds/xds.h
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xds.h
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xds.h
  --- ossp-pkg/srpc/libxds/xds.h	2001/06/28 15:25:23	1.4
  +++ ossp-pkg/srpc/libxds/xds.h	2001/06/28 16:09:16	1.5
  @@ -1,6 +1,6 @@
   /*
      $Source: /e/ossp/cvs/ossp-pkg/srpc/libxds/xds.h,v $
  -   $Revision: 1.4 $
  +   $Revision: 1.5 $
   
      Copyright (c) 2001 by Cable & Wireless Deutschland.
   
  @@ -21,31 +21,33 @@
   #include <stdlib.h>
   #include <stdarg.h>
   
  -struct xds_ctx;
  -typedef struct xds_ctx xds_ctx_t;
  +struct xds_st;
  +typedef struct xds_st xds_t;
   
  -typedef int (*xds_fmt_cb_t)(xds_ctx_t* context,
  +typedef int (*xds_fmt_cb_t)(xds_t* context,
   			    void* fmt_context,
   			    char* buf, size_t buf_size,
   			    va_list args);
   
  -xds_ctx_t*  xds_init(void);
  -void        xds_destroy(xds_ctx_t* context);
  +xds_t*  xds_init(void);
  +void    xds_destroy(xds_t* context);
   
  -int xds_register(xds_ctx_t* context,
  +int xds_register(xds_t* context,
   		 const char* name, xds_fmt_cb_t callback,
   		 void* formatter_context);
  -int xds_register_xdr(xds_ctx_t* context);
  -int xds_register_xml(xds_ctx_t* context);
  -int xds_register_asn1(xds_ctx_t* context);
  -int xds_unregister(xds_ctx_t* context, const char* name);
  -
  -char* xds_get_buffer(xds_ctx_t* context);
  -int xds_set_buffer(xds_ctx_t* context, char* buf, size_t buf_size);
  -
  -int xds_encode(xds_ctx_t* context, const char* fmt, ...);
  -int xds_decode(xds_ctx_t* context, const char* buf, const char* fmt, ...);
  -int xds_vdecode(xds_ctx_t* context, const char* buf, const char* fmt, va_list args);
  -int xds_vencode(xds_ctx_t* context, const char* fmt, va_list args);
  +int xds_register_xdr(xds_t* context);
  +int xds_register_xml(xds_t* context);
  +int xds_register_asn1(xds_t* context);
  +int xds_unregister(xds_t* context, const char* name);
  +
  +int xds_set_encode_buffer(xds_t* context, char* buf, size_t buf_size);
  +int xds_set_decode_buffer(xds_t* context, const char* buf);
  +int xds_get_encode_buffer(xds_t* context, char** buf, size_t* buf_size);
  +
  +int xds_encode(xds_t* context, const char* fmt, ...);
  +int xds_decode(xds_t* context, const char* buf, const char* fmt, ...);
  +
  +int xds_vencode(xds_t* context, const char* fmt, va_list args);
  +int xds_vdecode(xds_t* context, const char* fmt, va_list args);
   
   #endif /* !defined(__LIBXDS_H__) */

From ossp-cvs-owner@ossp.org  Fri Jun 29 00:42:13 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f5SMgCi85044; Fri, 29 Jun 2001 00:42:12 +0200 (CEST)
Date: Fri, 29 Jun 2001 00:42:12 +0200 (CEST)
Message-Id: <200106282242.f5SMgCi85044@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   29-Jun-2001 00:42:12
  Branch: HEAD                             Handle: 2001062823421200

  Modified files:
    ossp-pkg/srpc/libxds    Makefile

  Log:
    Link test binary with CC, not CXX.

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/srpc/libxds/Makefile
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 Makefile
  --- ossp-pkg/srpc/libxds/Makefile	2001/06/28 12:32:04	1.1
  +++ ossp-pkg/srpc/libxds/Makefile	2001/06/28 22:42:12	1.2
  @@ -18,7 +18,7 @@
   	$(CXX) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CXXFLAGS) -c $<
   
   test:		test.o
  -	$(CXX) $(LDFLAGS) -o $@ test.o
  +	$(CC) $(LDFLAGS) -o $@ test.o
   
   clean::
   	rm -f test.o test

From ossp-cvs-owner@ossp.org  Fri Jun 29 15:55:49 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f5TDtln02320; Fri, 29 Jun 2001 15:55:47 +0200 (CEST)
Date: Fri, 29 Jun 2001 15:55:47 +0200 (CEST)
Message-Id: <200106291355.f5TDtln02320@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xds.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   29-Jun-2001 15:55:47
  Branch: HEAD                             Handle: 2001062914554700

  Modified files:
    ossp-pkg/srpc/libxds    xds.h

  Log:
    As we still discovered with Thomas yesterday, the
    xds_set_decode_buffer() really needs a "buf_size" argument. Because
    incoming (to be decoded) buffers are usually "input bufferes" which were
    received from external sources, so we cannot safely assume it really
    contains a correct encoding. Hence we have to provide a way in XDS to
    protect the library from segfaulting the application in case the buffer
    is destroyed and XDS still would like something to decode.

  Summary:
    Revision    Changes     Path
    1.6         +2  -2      ossp-pkg/srpc/libxds/xds.h
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xds.h
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 xds.h
  --- ossp-pkg/srpc/libxds/xds.h	2001/06/28 16:09:16	1.5
  +++ ossp-pkg/srpc/libxds/xds.h	2001/06/29 13:55:47	1.6
  @@ -1,6 +1,6 @@
   /*
      $Source: /e/ossp/cvs/ossp-pkg/srpc/libxds/xds.h,v $
  -   $Revision: 1.5 $
  +   $Revision: 1.6 $
   
      Copyright (c) 2001 by Cable & Wireless Deutschland.
   
  @@ -41,7 +41,7 @@
   int xds_unregister(xds_t* context, const char* name);
   
   int xds_set_encode_buffer(xds_t* context, char* buf, size_t buf_size);
  -int xds_set_decode_buffer(xds_t* context, const char* buf);
  +int xds_set_decode_buffer(xds_t* context, const char* buf, size_t buf_size);
   int xds_get_encode_buffer(xds_t* context, char** buf, size_t* buf_size);
   
   int xds_encode(xds_t* context, const char* fmt, ...);

From ossp-cvs-owner@ossp.org  Fri Jun 29 15:58:55 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f5TDwsK02553; Fri, 29 Jun 2001 15:58:54 +0200 (CEST)
Date: Fri, 29 Jun 2001 15:58:54 +0200 (CEST)
Message-Id: <200106291358.f5TDwsK02553@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xds.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   29-Jun-2001 15:58:54
  Branch: HEAD                             Handle: 2001062914585300

  Modified files:
    ossp-pkg/srpc/libxds    xds.h

  Log:
    We still have not finally determined whether xds_decode() receives a
    particular buffer or whether the buffer is attached to the XDS handle,
    but nevertheless xds_vdecode() has to match xds_decode(), so currently
    we have to add "const char* buf" also to xds_vdecode() to make the API
    consistent up to now.

  Summary:
    Revision    Changes     Path
    1.7         +2  -2      ossp-pkg/srpc/libxds/xds.h
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xds.h
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 xds.h
  --- ossp-pkg/srpc/libxds/xds.h	2001/06/29 13:55:47	1.6
  +++ ossp-pkg/srpc/libxds/xds.h	2001/06/29 13:58:53	1.7
  @@ -1,6 +1,6 @@
   /*
      $Source: /e/ossp/cvs/ossp-pkg/srpc/libxds/xds.h,v $
  -   $Revision: 1.6 $
  +   $Revision: 1.7 $
   
      Copyright (c) 2001 by Cable & Wireless Deutschland.
   
  @@ -48,6 +48,6 @@
   int xds_decode(xds_t* context, const char* buf, const char* fmt, ...);
   
   int xds_vencode(xds_t* context, const char* fmt, va_list args);
  -int xds_vdecode(xds_t* context, const char* fmt, va_list args);
  +int xds_vdecode(xds_t* context, const char* buf, const char* fmt, va_list args);
   
   #endif /* !defined(__LIBXDS_H__) */

From ossp-cvs-owner@ossp.org  Mon Jul  2 14:18:58 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f62CIvt01662; Mon, 2 Jul 2001 14:18:57 +0200 (CEST)
Date: Mon, 2 Jul 2001 14:18:57 +0200 (CEST)
Message-Id: <200107021218.f62CIvt01662@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xds.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   02-Jul-2001 14:18:57
  Branch: HEAD                             Handle: 2001070213185700

  Modified files:
    ossp-pkg/srpc/libxds    xds.h

  Log:
    - The de-/encoding buffer is now of type "void*" rather than "char*".
    
    - getbuffer() and setbuffer() now expect a parameter xds_buf_flag_t,
      which tells them who owns the buffer. If the library owns it
      (XDS_GIFT set at setbuf()-time), the library performs dynamic buffer
      management. If the user owns the buffer, it is static in size.
    
    - xds_init() now ecpects a xds_mode_t parameter, telling it whether to
      initialize in encode or decode mode.
    
    - The xds_register_XXX() functions are gone. We will rather export the
      symbols of the callbacks so that the users can register the ones he
      needs himself.

  Summary:
    Revision    Changes     Path
    1.8         +23 -17     ossp-pkg/srpc/libxds/xds.h
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xds.h
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 xds.h
  --- ossp-pkg/srpc/libxds/xds.h	2001/06/29 13:58:53	1.7
  +++ ossp-pkg/srpc/libxds/xds.h	2001/07/02 12:18:57	1.8
  @@ -1,6 +1,6 @@
   /*
      $Source: /e/ossp/cvs/ossp-pkg/srpc/libxds/xds.h,v $
  -   $Revision: 1.7 $
  +   $Revision: 1.8 $
   
      Copyright (c) 2001 by Cable & Wireless Deutschland.
   
  @@ -26,28 +26,34 @@
   
   typedef int (*xds_fmt_cb_t)(xds_t* context,
   			    void* fmt_context,
  -			    char* buf, size_t buf_size,
  +			    void* buf,
  +			    size_t buf_size,
   			    va_list args);
   
  -xds_t*  xds_init(void);
  -void    xds_destroy(xds_t* context);
  +typedef enum
  +    {
  +    XDS_ENCODE,
  +    XDS_DECODE
  +    }
  +xds_mode_t;
  +
  +typedef enum
  +    {
  +    XDS_LOAN,
  +    XDS_GIFT
  +    }
  +xds_buf_flag_t;
   
  -int xds_register(xds_t* context,
  -		 const char* name, xds_fmt_cb_t callback,
  -		 void* formatter_context);
  -int xds_register_xdr(xds_t* context);
  -int xds_register_xml(xds_t* context);
  -int xds_register_asn1(xds_t* context);
  +xds_t* xds_init(xds_mode_t);
  +void xds_destroy(xds_t* context);
  +
  +int xds_register(xds_t* context, const char* name, xds_fmt_cb_t callback, void* formatter_context);
   int xds_unregister(xds_t* context, const char* name);
   
  -int xds_set_encode_buffer(xds_t* context, char* buf, size_t buf_size);
  -int xds_set_decode_buffer(xds_t* context, const char* buf, size_t buf_size);
  -int xds_get_encode_buffer(xds_t* context, char** buf, size_t* buf_size);
  +int xds_set_buffer(xds_t* context, xds_buf_flag_t flag, void* buf, size_t buf_size);
  +int xds_get_buffer(xds_t* context, xds_buf_flag_t flag, void** buf, size_t* buf_size);
   
   int xds_encode(xds_t* context, const char* fmt, ...);
  -int xds_decode(xds_t* context, const char* buf, const char* fmt, ...);
  -
  -int xds_vencode(xds_t* context, const char* fmt, va_list args);
  -int xds_vdecode(xds_t* context, const char* buf, const char* fmt, va_list args);
  +int xds_decode(xds_t* context, const char* fmt, ...);
   
   #endif /* !defined(__LIBXDS_H__) */

From ossp-cvs-owner@ossp.org  Mon Jul  2 14:19:39 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f62CJb302017; Mon, 2 Jul 2001 14:19:37 +0200 (CEST)
Date: Mon, 2 Jul 2001 14:19:37 +0200 (CEST)
Message-Id: <200107021219.f62CJb302017@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   02-Jul-2001 14:19:37
  Branch: HEAD                             Handle: 2001070213193700

  Modified files:
    ossp-pkg/srpc/libxds    Makefile

  Log:
    Remove the -s flag at LDFLAGS. Debugging output might actually be
    useful during development.

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/srpc/libxds/Makefile
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 Makefile
  --- ossp-pkg/srpc/libxds/Makefile	2001/06/28 22:42:12	1.2
  +++ ossp-pkg/srpc/libxds/Makefile	2001/07/02 12:19:37	1.3
  @@ -9,7 +9,7 @@
   CPPFLAGS	=
   CFLAGS		=
   CXXFLAGS	=
  -LDFLAGS		= -s
  +LDFLAGS		=
   
   .c.o:
   	$(CC) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CFLAGS) -c $<

From ossp-cvs-owner@ossp.org  Mon Jul  2 16:03:41 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f62E3dq16156; Mon, 2 Jul 2001 16:03:39 +0200 (CEST)
Date: Mon, 2 Jul 2001 16:03:39 +0200 (CEST)
Message-Id: <200107021403.f62E3dq16156@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xds.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   02-Jul-2001 16:03:39
  Branch: HEAD                             Handle: 2001070215033900

  Modified files:
    ossp-pkg/srpc/libxds    xds.h

  Log:
    The interface is final, beautiful and it will never ever be changed
    again. Consider this header file to be eternally valid.

  Summary:
    Revision    Changes     Path
    1.9         +28 -29     ossp-pkg/srpc/libxds/xds.h
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xds.h
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 xds.h
  --- ossp-pkg/srpc/libxds/xds.h	2001/07/02 12:18:57	1.8
  +++ ossp-pkg/srpc/libxds/xds.h	2001/07/02 14:03:39	1.9
  @@ -1,6 +1,6 @@
   /*
      $Source: /e/ossp/cvs/ossp-pkg/srpc/libxds/xds.h,v $
  -   $Revision: 1.8 $
  +   $Revision: 1.9 $
   
      Copyright (c) 2001 by Cable & Wireless Deutschland.
   
  @@ -21,39 +21,38 @@
   #include <stdlib.h>
   #include <stdarg.h>
   
  -struct xds_st;
  -typedef struct xds_st xds_t;
  -
  -typedef int (*xds_fmt_cb_t)(xds_t* context,
  -			    void* fmt_context,
  -			    void* buf,
  -			    size_t buf_size,
  -			    va_list args);
  -
  -typedef enum
  +enum
       {
  -    XDS_ENCODE,
  -    XDS_DECODE
  -    }
  -xds_mode_t;
  -
  -typedef enum
  -    {
  -    XDS_LOAN,
  -    XDS_GIFT
  -    }
  -xds_buf_flag_t;
  +    XDS_OK = 0,
  +    XDS_ERR_NO_MEM = -1,
  +    XDS_ERR_OVERFLOW = -2,
  +    XDS_ERR_INVALID_ARG = -3,
  +    XDS_ERR_TYPE_MISMATCH = -4
  +    };
  +typedef enum { XDS_ENCODE, XDS_DECODE } xds_mode_t;
  +typedef enum { XDS_LOAN,   XDS_GIFT   } xds_scope_t;
  +
  +struct xds_context;
  +typedef struct xds_context xds_t;
  +
  +typedef int (*xds_engine_t)(xds_t* xds,
  +			    void* engine_context,
  +			    void* buffer,
  +			    size_t buffer_size,
  +			    va_list args);
   
   xds_t* xds_init(xds_mode_t);
  -void xds_destroy(xds_t* context);
  +void xds_destroy(xds_t* xds);
   
  -int xds_register(xds_t* context, const char* name, xds_fmt_cb_t callback, void* formatter_context);
  -int xds_unregister(xds_t* context, const char* name);
  +int xds_register(xds_t* xds, const char* name, xds_engine_t engine, void* engine_context);
  +int xds_unregister(xds_t* xds, const char* name);
   
  -int xds_set_buffer(xds_t* context, xds_buf_flag_t flag, void* buf, size_t buf_size);
  -int xds_get_buffer(xds_t* context, xds_buf_flag_t flag, void** buf, size_t* buf_size);
  +int xds_setbuffer(xds_t* xds, xds_scope_t flag, void* buffer, size_t buffer_size);
  +int xds_getbuffer(xds_t* xds, xds_scope_t flag, void** buffer, size_t* buffer_size);
   
  -int xds_encode(xds_t* context, const char* fmt, ...);
  -int xds_decode(xds_t* context, const char* fmt, ...);
  +int xds_encode(xds_t* xds, const char* fmt, ...);
  +int xds_decode(xds_t* xds, const char* fmt, ...);
  +int xds_vencode(xds_t* xds, const char* fmt, va_list args);
  +int xds_vdecode(xds_t* xds, const char* fmt, va_list args);
   
   #endif /* !defined(__LIBXDS_H__) */

From ossp-cvs-owner@ossp.org  Mon Jul  2 16:05:40 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f62E5dj16329; Mon, 2 Jul 2001 16:05:39 +0200 (CEST)
Date: Mon, 2 Jul 2001 16:05:39 +0200 (CEST)
Message-Id: <200107021405.f62E5dj16329@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xds.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   02-Jul-2001 16:05:39
  Branch: HEAD                             Handle: 2001070215053900

  Modified files:
    ossp-pkg/srpc/libxds    xds.h

  Log:
    Cosmetic changes in the indention.

  Summary:
    Revision    Changes     Path
    1.10        +6  -6      ossp-pkg/srpc/libxds/xds.h
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xds.h
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 xds.h
  --- ossp-pkg/srpc/libxds/xds.h	2001/07/02 14:03:39	1.9
  +++ ossp-pkg/srpc/libxds/xds.h	2001/07/02 14:05:39	1.10
  @@ -1,6 +1,6 @@
   /*
      $Source: /e/ossp/cvs/ossp-pkg/srpc/libxds/xds.h,v $
  -   $Revision: 1.9 $
  +   $Revision: 1.10 $
   
      Copyright (c) 2001 by Cable & Wireless Deutschland.
   
  @@ -23,10 +23,10 @@
   
   enum
       {
  -    XDS_OK = 0,
  -    XDS_ERR_NO_MEM = -1,
  -    XDS_ERR_OVERFLOW = -2,
  -    XDS_ERR_INVALID_ARG = -3,
  +    XDS_OK                = 0,
  +    XDS_ERR_NO_MEM        = -1,
  +    XDS_ERR_OVERFLOW      = -2,
  +    XDS_ERR_INVALID_ARG   = -3,
       XDS_ERR_TYPE_MISMATCH = -4
       };
   typedef enum { XDS_ENCODE, XDS_DECODE } xds_mode_t;
  @@ -47,7 +47,7 @@
   int xds_register(xds_t* xds, const char* name, xds_engine_t engine, void* engine_context);
   int xds_unregister(xds_t* xds, const char* name);
   
  -int xds_setbuffer(xds_t* xds, xds_scope_t flag, void* buffer, size_t buffer_size);
  +int xds_setbuffer(xds_t* xds, xds_scope_t flag, void*  buffer, size_t  buffer_size);
   int xds_getbuffer(xds_t* xds, xds_scope_t flag, void** buffer, size_t* buffer_size);
   
   int xds_encode(xds_t* xds, const char* fmt, ...);

From ossp-cvs-owner@ossp.org  Mon Jul  2 16:15:05 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f62EF4F17858; Mon, 2 Jul 2001 16:15:04 +0200 (CEST)
Date: Mon, 2 Jul 2001 16:15:04 +0200 (CEST)
Message-Id: <200107021415.f62EF4F17858@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xds.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   02-Jul-2001 16:15:04
  Branch: HEAD                             Handle: 2001070215150400

  Modified files:
    ossp-pkg/srpc/libxds    xds.h

  Log:
    Added the standard OSSP copyright header.

  Summary:
    Revision    Changes     Path
    1.11        +20 -8      ossp-pkg/srpc/libxds/xds.h
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xds.h
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 xds.h
  --- ossp-pkg/srpc/libxds/xds.h	2001/07/02 14:05:39	1.10
  +++ ossp-pkg/srpc/libxds/xds.h	2001/07/02 14:15:04	1.11
  @@ -1,18 +1,30 @@
   /*
  -   $Source: /e/ossp/cvs/ossp-pkg/srpc/libxds/xds.h,v $
  -   $Revision: 1.10 $
  +   XDS - OSSP Extensible Data Serialization Library
  +   Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  +   Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   
  -   Copyright (c) 2001 by Cable & Wireless Deutschland.
  +   This file is part of OSSP XDS, an extensible data serialization
  +   library which can be found at http://www.ossp.com/pkg/xds/.
   
      Permission to use, copy, modify, and distribute this software for
      any purpose with or without fee is hereby granted, provided that
      the above copyright notice and this permission notice appear in all
      copies.
   
  -   This software is distributed in the hope that it will be useful,
  -   but WITHOUT ANY WARRANTY; without even the implied warranty of
  -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  -   included license for more details.
  +   THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +   WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +   MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +   IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +   USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +   OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +   OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +   SUCH DAMAGE.
  +
  +   xds.h: C API
   */
   
   #ifndef __LIBXDS_H__
  @@ -23,7 +35,7 @@
   
   enum
       {
  -    XDS_OK                = 0,
  +    XDS_OK                =  0,
       XDS_ERR_NO_MEM        = -1,
       XDS_ERR_OVERFLOW      = -2,
       XDS_ERR_INVALID_ARG   = -3,

From ossp-cvs-owner@ossp.org  Mon Jul  2 16:15:53 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f62EFpA17949; Mon, 2 Jul 2001 16:15:51 +0200 (CEST)
Date: Mon, 2 Jul 2001 16:15:51 +0200 (CEST)
Message-Id: <200107021415.f62EFpA17949@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds LICENSE
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   02-Jul-2001 16:15:51
  Branch: HEAD                             Handle: 2001070215155100

  Added files:
    ossp-pkg/srpc/libxds    LICENSE

  Log:
    License for the XDS library.

  Summary:
    Revision    Changes     Path
    1.1         +24 -0      ossp-pkg/srpc/libxds/LICENSE
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/LICENSE
  ============================================================
  $ cvs update -p -r1.1 LICENSE
  XDS - OSSP Extensible Data Serialization Library
  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
  This file is part of OSSP XDS, an extensible data serialization
  library which can be found at http://www.ossp.com/pkg/xds/.
  
  Permission to use, copy, modify, and distribute this software for
  any purpose with or without fee is hereby granted, provided that
  the above copyright notice and this permission notice appear in all
  copies.
  
  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  SUCH DAMAGE.

From ossp-cvs-owner@ossp.org  Tue Jul  3 10:25:27 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f638PPE49171; Tue, 3 Jul 2001 10:25:25 +0200 (CEST)
Date: Tue, 3 Jul 2001 10:25:25 +0200 (CEST)
Message-Id: <200107030825.f638PPE49171@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile xds.h xds.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   03-Jul-2001 10:25:25
  Branch: HEAD                             Handle: 2001070309252400

  Added files:
    ossp-pkg/srpc/libxds    xds.pod
  Modified files:
    ossp-pkg/srpc/libxds    Makefile xds.h

  Log:
    Added preliminary documentation for xds_init(), xds_destroy(),
    xds_register(), xds_unregister(), xds_setbuffer(), and
    xds_getbuffer().

  Summary:
    Revision    Changes     Path
    1.4         +7  -1      ossp-pkg/srpc/libxds/Makefile
    1.12        +2  -1      ossp-pkg/srpc/libxds/xds.h
    1.1         +98 -0      ossp-pkg/srpc/libxds/xds.pod
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 Makefile
  --- ossp-pkg/srpc/libxds/Makefile	2001/07/02 12:19:37	1.3
  +++ ossp-pkg/srpc/libxds/Makefile	2001/07/03 08:25:24	1.4
  @@ -17,12 +17,18 @@
   .cpp.o:
   	$(CXX) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CXXFLAGS) -c $<
   
  +all:	test xds.3
  +
   test:		test.o
   	$(CC) $(LDFLAGS) -o $@ test.o
   
  +xds.3:		xds.pod
  +	pod2man --section=3 --center="XDS Library Programmer API " $< >$@
  +
   clean::
   	rm -f test.o test
  +	rm -f xds.3
   
   # Dependencies
   
  -test.o: test.c xds.h
  +test.o: 	test.c xds.h
  Index: ossp-pkg/srpc/libxds/xds.h
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 xds.h
  --- ossp-pkg/srpc/libxds/xds.h	2001/07/02 14:15:04	1.11
  +++ ossp-pkg/srpc/libxds/xds.h	2001/07/03 08:25:24	1.12
  @@ -39,7 +39,8 @@
       XDS_ERR_NO_MEM        = -1,
       XDS_ERR_OVERFLOW      = -2,
       XDS_ERR_INVALID_ARG   = -3,
  -    XDS_ERR_TYPE_MISMATCH = -4
  +    XDS_ERR_TYPE_MISMATCH = -4,
  +    XDS_ERR_UNKNOW_ENGINE = -5
       };
   typedef enum { XDS_ENCODE, XDS_DECODE } xds_mode_t;
   typedef enum { XDS_LOAN,   XDS_GIFT   } xds_scope_t;
  Index: ossp-pkg/srpc/libxds/xds.pod
  ============================================================
  $ cvs update -p -r1.1 xds.pod
  =pod
  
  =head1 NAME
  
  xds - eXtendable Data Serialization
  
  =head1 SYNOPSIS
  
  
  =head1 DESCRIPTION
  
  =over 4
  
  =item xds_t* B<xds_init>(xds_mode_t I<mode>);
  
  Valid settings for I<mode> are B<XDS_ENCODE> and B<XDS_DECODE>. If
  successful, a valid handle is returned -- B<NULL> otherwise. If the
  routine fails, the system variable B<errno> is set apropriately.
  
  =item void B<xds_destroy>(xds_t* I<xds>);
  
  Free all internally allocated resources associated with this context.
  I<xds> must be a handle obtained by calling B<xds_init>.
  
  =item int B<xds_register>(xds_t* I<xds>, const char* I<name>, xds_engine_t I<engine>, void* I<engine_context>);
  
  Register the function I<engine> as formatting engine in context I<xds>
  under the name I<name>. The function must have the following
  prototype:
  
      int my_engine(xds_t* xds, void* engine_context,
  		  void* buffer, size_t buffer_size,
  		  va_list args);
  
  It must gather its values from I<args> and encode/decode them into
  I<buffer>. The encoded/decoded representation must not take up more
  than I<size> byte of memory, because that's the maximum I<buffer> can
  hold. If the buffer is too small, I<engine> must return
  B<XDS_ERR_OVERFLOW>. In case of no error, I<engine> must return
  B<XDS_OK>. The variable I<engine_context> is passed through to the
  function every time it is called; it is not touched in any way by the
  xds library.
  
  =item int B<xds_unregister>(xds_t* I<xds>, const char* I<name>);
  
  Remove encoding/decoding engine I<name> from context I<xds>. The
  function will return B<XDS_OK> if successful and
  B<XDS_ERR_UNKNOW_ENGINE> if I<name> is not a registered engine.
  
  =item int B<xds_setbuffer>(xds_t* I<xds>, xds_scope_t I<flag>, void* I<buffer>, size_t I<buffer_size>);
  
  Encoding mode: Set internal buffer used in context I<xds> to
  I<buffer>. The buffer has a capacity of I<buffer_size> byte. I<flag>
  may be set to B<XDS_LOAN> or B<XDS_GIFT>. A "loaned" buffer is one
  that is owned by the application; xds will use it, but it will not
  B<free> the buffer nor will it try to B<realloc> it if it's too small.
  A buffer given to xds as a "gift" is henceforth owned by xds and may
  be B<free>d or B<realloc>ed as the library sees fit. If I<flag> is
  B<XDS_GIFT>, I<buffer> must be a pointer obtained from calling
  B<malloc> or a comparable system routine. Calling B<xds_setbuffer>
  with a I<buffer> of B<NULL> will cause the xds library to allocate a
  buffer of its own. I<buffer_size> is ignored in this case.
  
  Decoding mode: I<buffer> contains the encoded representation of the
  data to be used for following B<xds_decode> calls. The encoded data is
  I<buffer_size> byte long. Unlike in encoding mode, such a buffer is
  not modified, hence there is no need to extend the buffer. If I<flag>
  is set to B<XDS_GIFT>, the library will B<free> I<buffer> when
  the context is destroyed.
  
  =item int B<xds_getbuffer>(xds_t* I<xds>, xds_scope_t flag, void** buffer, size_t* buffer_size);
  
  This routine will write the address and size of the internal buffer in
  context I<xds> to I<buffer> and I<buffer_size>. The I<flag> parameter
  determines who owns the buffer after that; setting I<flag> to
  B<XDS_LOAN> means that the buffer is owned by the xds library and that
  the user may not rely on its contents still being there after another
  xds library function call. Furthermore, calling B<xds_getbuffer> will
  flush the registered buffer, meaning that coming B<xds_encode> calls
  will start at the beginning and potentially overwrite the buffer
  contents.
  
  Setting I<flag> to B<XDS_GIFT> means that the returned buffer is owned
  by the application programmer from now on, it is no longer modified or
  used in any way by the library.
  
  
  =item int B<xds_encode>(xds_t* I<xds>, const char* I<fmt>, ...);
  
  =item int B<xds_decode>(xds_t* I<xds>, const char* I<fmt>, ...);
  
  =item int B<xds_vencode>(xds_t* I<xds>, const char* I<fmt>, va_list I<args>);
  
  =item int B<xds_vdecode>(xds_t* I<xds>, const char* I<fmt>, va_list I<args>);
  
  =back
  
  =cut

From ossp-cvs-owner@ossp.org  Tue Jul  3 11:38:27 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f639cQ259121; Tue, 3 Jul 2001 11:38:26 +0200 (CEST)
Date: Tue, 3 Jul 2001 11:38:26 +0200 (CEST)
Message-Id: <200107030938.f639cQ259121@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds .cvsignore
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   03-Jul-2001 11:38:26
  Branch: HEAD                             Handle: 2001070310382500

  Modified files:
    ossp-pkg/srpc/libxds    .cvsignore

  Log:
    Ignore dependent file xds.3.

  Summary:
    Revision    Changes     Path
    1.2         +1  -0      ossp-pkg/srpc/libxds/.cvsignore
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/.cvsignore
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 .cvsignore
  --- ossp-pkg/srpc/libxds/.cvsignore	2001/06/28 12:30:58	1.1
  +++ ossp-pkg/srpc/libxds/.cvsignore	2001/07/03 09:38:25	1.2
  @@ -1 +1,2 @@
  +xds.3
   test

From ossp-cvs-owner@ossp.org  Tue Jul  3 13:15:40 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f63BFd271498; Tue, 3 Jul 2001 13:15:39 +0200 (CEST)
Date: Tue, 3 Jul 2001 13:15:39 +0200 (CEST)
Message-Id: <200107031115.f63BFd271498@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   03-Jul-2001 13:15:39
  Branch: HEAD                             Handle: 2001070312153900

  Modified files:
    ossp-pkg/srpc/libxds    Makefile

  Log:
    Removed automatic variable use from xds.3 target because non-GNU make
    won't understand these reliably.

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-pkg/srpc/libxds/Makefile
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 Makefile
  --- ossp-pkg/srpc/libxds/Makefile	2001/07/03 08:25:24	1.4
  +++ ossp-pkg/srpc/libxds/Makefile	2001/07/03 11:15:39	1.5
  @@ -23,7 +23,7 @@
   	$(CC) $(LDFLAGS) -o $@ test.o
   
   xds.3:		xds.pod
  -	pod2man --section=3 --center="XDS Library Programmer API " $< >$@
  +	pod2man --section=3 --center="XDS Library Programmer API " xds.pod >xds.3
   
   clean::
   	rm -f test.o test

From ossp-cvs-owner@ossp.org  Tue Jul  3 13:36:24 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f63BaM773705; Tue, 3 Jul 2001 13:36:22 +0200 (CEST)
Date: Tue, 3 Jul 2001 13:36:22 +0200 (CEST)
Message-Id: <200107031136.f63BaM773705@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xds.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   03-Jul-2001 13:36:22
  Branch: HEAD                             Handle: 2001070312362200

  Modified files:
    ossp-pkg/srpc/libxds    xds.pod

  Log:
    xds_register:
    
     - Documented valid characters for callback names.
    
    xds_setbuffer:
    
     - Documented return codes.
     - Clearified requirement of library-owned buffers coming from malloc.
    
    xds_encode:
    
      - Added documentation.

  Summary:
    Revision    Changes     Path
    1.2         +39 -5      ossp-pkg/srpc/libxds/xds.pod
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xds.pod
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xds.pod
  --- ossp-pkg/srpc/libxds/xds.pod	2001/07/03 08:25:24	1.1
  +++ ossp-pkg/srpc/libxds/xds.pod	2001/07/03 11:36:22	1.2
  @@ -41,6 +41,9 @@
   function every time it is called; it is not touched in any way by the
   xds library.
   
  +A valid name I<name> for a callback function consists of an arbitrary
  +number of characters from the class [a-zA-Z0-9_-].
  +
   =item int B<xds_unregister>(xds_t* I<xds>, const char* I<name>);
   
   Remove encoding/decoding engine I<name> from context I<xds>. The
  @@ -56,10 +59,10 @@
   B<free> the buffer nor will it try to B<realloc> it if it's too small.
   A buffer given to xds as a "gift" is henceforth owned by xds and may
   be B<free>d or B<realloc>ed as the library sees fit. If I<flag> is
  -B<XDS_GIFT>, I<buffer> must be a pointer obtained from calling
  -B<malloc> or a comparable system routine. Calling B<xds_setbuffer>
  -with a I<buffer> of B<NULL> will cause the xds library to allocate a
  -buffer of its own. I<buffer_size> is ignored in this case.
  +B<XDS_GIFT>, I<buffer> must be a pointer obtained from calling the
  +B<malloc(3)> API. Calling B<xds_setbuffer> with a I<buffer> of B<NULL>
  +will cause the xds library to allocate a buffer of its own.
  +I<buffer_size> is ignored in this case.
   
   Decoding mode: I<buffer> contains the encoded representation of the
   data to be used for following B<xds_decode> calls. The encoded data is
  @@ -68,6 +71,11 @@
   is set to B<XDS_GIFT>, the library will B<free> I<buffer> when
   the context is destroyed.
   
  +B<xds_setbuffer> returns one of the following codes signifying success
  +or failure: B<XDS_OK> (everything alright), B<XDS_ERR_NO_MEM> (failed
  +to allocate new internal buffers), and B<XDS_ERR_INVALID_ARG>
  +(arguments don't make sense).
  +
   =item int B<xds_getbuffer>(xds_t* I<xds>, xds_scope_t flag, void** buffer, size_t* buffer_size);
   
   This routine will write the address and size of the internal buffer in
  @@ -84,14 +92,40 @@
   by the application programmer from now on, it is no longer modified or
   used in any way by the library.
   
  -
   =item int B<xds_encode>(xds_t* I<xds>, const char* I<fmt>, ...);
   
  +The B<encode> function call will encode an arbitrary number of values
  +into the chosen representation. The syntax is very similar to
  +B<sprintf>: As parameters, it requires the I<xds> handle obtained from
  +B<xds_init>, a format string I<fmt> describing the following value
  +parameters, and an arbitrary number of actual values.
  +
  +The format string lists the names of the callback functions to be used
  +in order to format the values; it has the format "name name ...". The
  +names are delimited by any number of characters any of which is not
  +part of the character set allowed for function names here. Hence, you
  +can delimit the names by blanks, tabs, dollar signs or pretty much
  +anyting your want.
  +
  +B<xds_encode> will return either B<XDS_OK> (everything OK),
  +B<XDS_ERR_NO_MEM> (failed allocating memory for intenal buffering),
  +B<XDS_ERR_OVERFLOW> (can't expand internal buffer because it's owned
  +by the application), B<XDS_ERR_INVALID_ARG> (parameters don't make
  +sense), B<XDS_ERR_TYPE_MISMATCH> (specified callback can't handle this
  +data type), and B<XDS_ERR_UNKNOW_ENGINE> (unknown call back name used
  +in I<fmt>).
  +
   =item int B<xds_decode>(xds_t* I<xds>, const char* I<fmt>, ...);
   
  +Like B<xds_encode>, only the other way round.
  +
   =item int B<xds_vencode>(xds_t* I<xds>, const char* I<fmt>, va_list I<args>);
   
  +See B<xds_encode>.
  +
   =item int B<xds_vdecode>(xds_t* I<xds>, const char* I<fmt>, va_list I<args>);
  +
  +See B<xds_decode>.
   
   =back
   

From ossp-cvs-owner@ossp.org  Wed Jul  4 16:21:22 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f64ELLZ67532; Wed, 4 Jul 2001 16:21:21 +0200 (CEST)
Date: Wed, 4 Jul 2001 16:21:21 +0200 (CEST)
Message-Id: <200107041421.f64ELLZ67532@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xds.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   04-Jul-2001 16:21:21
  Branch: HEAD                             Handle: 2001070415212000

  Modified files:
    ossp-pkg/srpc/libxds    xds.pod

  Log:
    Documented the return code of registered engines incorrectly: The
    enigne does not return XDS_OK but the number of bytes it wrote to the
    buffer.

  Summary:
    Revision    Changes     Path
    1.3         +5  -4      ossp-pkg/srpc/libxds/xds.pod
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xds.pod
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xds.pod
  --- ossp-pkg/srpc/libxds/xds.pod	2001/07/03 11:36:22	1.2
  +++ ossp-pkg/srpc/libxds/xds.pod	2001/07/04 14:21:20	1.3
  @@ -36,10 +36,11 @@
   I<buffer>. The encoded/decoded representation must not take up more
   than I<size> byte of memory, because that's the maximum I<buffer> can
   hold. If the buffer is too small, I<engine> must return
  -B<XDS_ERR_OVERFLOW>. In case of no error, I<engine> must return
  -B<XDS_OK>. The variable I<engine_context> is passed through to the
  -function every time it is called; it is not touched in any way by the
  -xds library.
  +B<XDS_ERR_OVERFLOW>. In case of no error, I<engine> must return the
  +number of bytes it has written to the buffer. (Note that all xds error
  +defines are smaller than >0.) The variable I<engine_context> is passed
  +through to the function every time it is called; it is not touched in
  +any way by the xds library.
   
   A valid name I<name> for a callback function consists of an arbitrary
   number of characters from the class [a-zA-Z0-9_-].

From ossp-cvs-owner@ossp.org  Wed Jul  4 16:25:58 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f64EPv068288; Wed, 4 Jul 2001 16:25:57 +0200 (CEST)
Date: Wed, 4 Jul 2001 16:25:57 +0200 (CEST)
Message-Id: <200107041425.f64EPv068288@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xds.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   04-Jul-2001 16:25:57
  Branch: HEAD                             Handle: 2001070415255700

  Modified files:
    ossp-pkg/srpc/libxds    xds.pod

  Log:
    Documented the need to free() a buffer obtained via xds_getbuffer with
    the XDS_GIFT flag set.

  Summary:
    Revision    Changes     Path
    1.4         +2  -1      ossp-pkg/srpc/libxds/xds.pod
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xds.pod
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xds.pod
  --- ossp-pkg/srpc/libxds/xds.pod	2001/07/04 14:21:20	1.3
  +++ ossp-pkg/srpc/libxds/xds.pod	2001/07/04 14:25:57	1.4
  @@ -91,7 +91,8 @@
   
   Setting I<flag> to B<XDS_GIFT> means that the returned buffer is owned
   by the application programmer from now on, it is no longer modified or
  -used in any way by the library.
  +used in any way by the library. The application must B<free> the
  +buffer when it's not needed anymore.
   
   =item int B<xds_encode>(xds_t* I<xds>, const char* I<fmt>, ...);
   

From ossp-cvs-owner@ossp.org  Wed Jul  4 17:09:57 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f64F9uG73657; Wed, 4 Jul 2001 17:09:56 +0200 (CEST)
Date: Wed, 4 Jul 2001 17:09:56 +0200 (CEST)
Message-Id: <200107041509.f64F9uG73657@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile ossp-pkg/srpc/libxds/regress...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   04-Jul-2001 17:09:56
  Branch: HEAD                             Handle: 2001070416095500

  Added files:
    ossp-pkg/srpc/libxds/regression-tests
                            .cvsignore .run-tests Makefile
  Modified files:
    ossp-pkg/srpc/libxds    Makefile

  Log:
    Added regression test suite.

  Summary:
    Revision    Changes     Path
    1.6         +3  -0      ossp-pkg/srpc/libxds/Makefile
    1.1         +1  -0      ossp-pkg/srpc/libxds/regression-tests/.cvsignore
    1.1         +37 -0      ossp-pkg/srpc/libxds/regression-tests/.run-tests
    1.1         +30 -0      ossp-pkg/srpc/libxds/regression-tests/Makefile
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 Makefile
  --- ossp-pkg/srpc/libxds/Makefile	2001/07/03 11:15:39	1.5
  +++ ossp-pkg/srpc/libxds/Makefile	2001/07/04 15:09:55	1.6
  @@ -29,6 +29,9 @@
   	rm -f test.o test
   	rm -f xds.3
   
  +check:
  +	(cd regression-tests && $(MAKE) check)
  +
   # Dependencies
   
   test.o: 	test.c xds.h
  Index: ossp-pkg/srpc/libxds/regression-tests/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.log
  Index: ossp-pkg/srpc/libxds/regression-tests/.run-tests
  ============================================================
  $ cvs update -p -r1.1 .run-tests
  #! /bin/sh
  
  if [ $# -lt 1 ]; then
      echo "Usage: $0 test1.exe [...]"
      exit 1;
  fi
  
  RESCOLUMN=30
  numTests=0
  numFails=0
  
  for suite in $*; do
      tmp="${suite%%.exe}: "
      echo -n "$tmp"
      currpos=$(($RESCOLUMN-${#tmp}))
      while [ $currpos -gt 0 ]; do
  	echo -n " "
  	currpos=$(($currpos-1))
      done
      numTests=$(($numTests+1))
      eval ./$suite >${suite%%.exe}.log 2>&1
      if [ $? -eq 0 ]; then
  	echo OK
      else
  	numFails=$(($numFails+1))
  	echo FAILED
      fi
  done
  
  echo
  echo "Summary: $numFails of $numTests tests failed ($(($numFails*100/$numTests))%)."
  
  if [ $numFails -eq 0 ]; then
      exit 0
  else
      exit 1
  fi
  Index: ossp-pkg/srpc/libxds/regression-tests/Makefile
  ============================================================
  $ cvs update -p -r1.1 Makefile
  # Build and run the regression tests.
  
  CC		= gcc
  
  WARNFLAGS	= -Wall -ansi -pedantic
  OPTFLAGS	= -O3 -pipe
  CPPFLAGS	=
  CFLAGS		=
  LDFLAGS		=
  
  TESTS		= test1.exe
  
  .SUFFIXES:
  .SUFFIXES:	.c .exe
  
  .c.exe:
  	$(CC) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $<
  
  .cpp.exe:
  	$(CXX) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ $<
  
  all:	$(TESTS)
  
  check:	all
  	./.run-tests *.exe
  
  clean::
  	rm -f $(TESTS) *.log
  
  # Dependencies

From ossp-cvs-owner@ossp.org  Wed Jul  4 17:12:34 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f64FCVr74134; Wed, 4 Jul 2001 17:12:31 +0200 (CEST)
Date: Wed, 4 Jul 2001 17:12:31 +0200 (CEST)
Message-Id: <200107041512.f64FCVr74134@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xds.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   04-Jul-2001 17:12:31
  Branch: HEAD                             Handle: 2001070416123100

  Modified files:
    ossp-pkg/srpc/libxds    xds.pod

  Log:
    The correct name is "extensible" rather than "extandable".

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-pkg/srpc/libxds/xds.pod
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xds.pod
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xds.pod
  --- ossp-pkg/srpc/libxds/xds.pod	2001/07/04 14:25:57	1.4
  +++ ossp-pkg/srpc/libxds/xds.pod	2001/07/04 15:12:31	1.5
  @@ -2,7 +2,7 @@
   
   =head1 NAME
   
  -xds - eXtendable Data Serialization
  +xds - eXtensible Data Serialization
   
   =head1 SYNOPSIS
   

From ossp-cvs-owner@ossp.org  Wed Jul  4 17:25:40 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f64FPdq75896; Wed, 4 Jul 2001 17:25:39 +0200 (CEST)
Date: Wed, 4 Jul 2001 17:25:39 +0200 (CEST)
Message-Id: <200107041525.f64FPdq75896@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xds.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   04-Jul-2001 17:25:39
  Branch: HEAD                             Handle: 2001070416253800

  Modified files:
    ossp-pkg/srpc/libxds    xds.h

  Log:
    Fixed typo: The label XDS_ERR_UNKNOWN_ENGINE was spelled incorrectly.

  Summary:
    Revision    Changes     Path
    1.13        +6  -6      ossp-pkg/srpc/libxds/xds.h
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xds.h
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 xds.h
  --- ossp-pkg/srpc/libxds/xds.h	2001/07/03 08:25:24	1.12
  +++ ossp-pkg/srpc/libxds/xds.h	2001/07/04 15:25:38	1.13
  @@ -35,12 +35,12 @@
   
   enum
       {
  -    XDS_OK                =  0,
  -    XDS_ERR_NO_MEM        = -1,
  -    XDS_ERR_OVERFLOW      = -2,
  -    XDS_ERR_INVALID_ARG   = -3,
  -    XDS_ERR_TYPE_MISMATCH = -4,
  -    XDS_ERR_UNKNOW_ENGINE = -5
  +    XDS_OK                 =  0,
  +    XDS_ERR_NO_MEM         = -1,
  +    XDS_ERR_OVERFLOW       = -2,
  +    XDS_ERR_INVALID_ARG    = -3,
  +    XDS_ERR_TYPE_MISMATCH  = -4,
  +    XDS_ERR_UNKNOWN_ENGINE = -5
       };
   typedef enum { XDS_ENCODE, XDS_DECODE } xds_mode_t;
   typedef enum { XDS_LOAN,   XDS_GIFT   } xds_scope_t;

From ossp-cvs-owner@ossp.org  Wed Jul  4 17:55:08 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f64Ft6G79087; Wed, 4 Jul 2001 17:55:06 +0200 (CEST)
Date: Wed, 4 Jul 2001 17:55:06 +0200 (CEST)
Message-Id: <200107041555.f64Ft6G79087@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests Makefile core.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   04-Jul-2001 17:55:06
  Branch: HEAD                             Handle: 2001070416550600

  Added files:
    ossp-pkg/srpc/libxds/regression-tests
                            core.c
  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            Makefile

  Log:
    Added first attempt of a regression test suite. Currently the library
    does not survive the very first test. :-)

  Summary:
    Revision    Changes     Path
    1.2         +6  -6      ossp-pkg/srpc/libxds/regression-tests/Makefile
    1.1         +75 -0      ossp-pkg/srpc/libxds/regression-tests/core.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/Makefile
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 Makefile
  --- ossp-pkg/srpc/libxds/regression-tests/Makefile	2001/07/04 15:09:55	1.1
  +++ ossp-pkg/srpc/libxds/regression-tests/Makefile	2001/07/04 15:55:06	1.2
  @@ -2,27 +2,27 @@
   
   CC		= gcc
   
  -WARNFLAGS	= -Wall -ansi -pedantic
  +WARNFLAGS	= -Wall -ansi -pedantic -Werror
   OPTFLAGS	= -O3 -pipe
   CPPFLAGS	=
   CFLAGS		=
  -LDFLAGS		=
  +LDFLAGS		= -L..
   
  -TESTS		= test1.exe
  +TESTS		= core.exe
   
   .SUFFIXES:
   .SUFFIXES:	.c .exe
   
   .c.exe:
  -	$(CC) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $<
  +	$(CC) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $< -lxds
   
   .cpp.exe:
  -	$(CXX) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ $<
  +	$(CXX) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ $< -lxds
   
   all:	$(TESTS)
   
   check:	all
  -	./.run-tests *.exe
  +	@./.run-tests $(TESTS)
   
   clean::
   	rm -f $(TESTS) *.log
  Index: ossp-pkg/srpc/libxds/regression-tests/core.c
  ============================================================
  $ cvs update -p -r1.1 core.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <stdio.h>
  #include <errno.h>
  #include "../internal.h"
  
  int main()
      {
      xds_t* ctx[50];
      size_t i;
  
      /* Open a bunch of contextes and close them again. */
  
      for(i = 0; i < sizeof(ctx)/sizeof(xds_t*); ++i)
  	{
  	if (i % 2 == 0)
  	    ctx[i] = xds_init(XDS_ENCODE);
  	else
  	    ctx[i] = xds_init(XDS_DECODE);
  
  	if (ctx[i] == 0)
  	    {
  	    printf("Failed to initialize xds context: i = %d\n", i);
  	    return 1;
  	    }
  	}
  
      for(i = 0; i < sizeof(ctx)/sizeof(xds_t*); ++i)
  	xds_destroy(ctx[i]);
  
  
      /* Check how the library deals with errorneous arguments. */
  
      if (xds_init((xds_mode_t)42) != NULL || errno != EINVAL)
  	{
  	printf("Called xds_init() with invalid mode but didn't get EINVAL.\n");
  	return 1;
  	}
  
  
      /* Call xds_destroy() with an invalid context and see whether we
         survive that. */
  
      xds_destroy(NULL);
  
  
      /* Everything went fine. */
  
      return 0;
      }

From ossp-cvs-owner@ossp.org  Wed Jul  4 17:58:14 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f64FwDd79331; Wed, 4 Jul 2001 17:58:13 +0200 (CEST)
Date: Wed, 4 Jul 2001 17:58:13 +0200 (CEST)
Message-Id: <200107041558.f64FwDd79331@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   04-Jul-2001 17:58:13
  Branch: HEAD                             Handle: 2001070416581300

  Modified files:
    ossp-pkg/srpc/libxds    Makefile

  Log:
    Make sure libxds.a is built before starting the regression tests.

  Summary:
    Revision    Changes     Path
    1.7         +15 -4      ossp-pkg/srpc/libxds/Makefile
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 Makefile
  --- ossp-pkg/srpc/libxds/Makefile	2001/07/04 15:09:55	1.6
  +++ ossp-pkg/srpc/libxds/Makefile	2001/07/04 15:58:13	1.7
  @@ -2,6 +2,8 @@
   
   CC		= gcc
   CXX		= g++
  +AR		= ar
  +RANLIB 		= ranlib
   
   WARNFLAGS	= -Wall -ansi -pedantic
   OPTFLAGS	= -O3 -pipe
  @@ -11,25 +13,34 @@
   CXXFLAGS	=
   LDFLAGS		=
   
  +OBJS		= decode.o destroy.o encode.o getbuffer.o init.o register.o \
  +		  setbuffer.o unregister.o vdecode.o vencode.o
  +
   .c.o:
   	$(CC) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CFLAGS) -c $<
   
   .cpp.o:
   	$(CXX) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CXXFLAGS) -c $<
  +
  +all:	libxds.a xds.3 test
   
  -all:	test xds.3
  +libxds.a:	$(OBJS)
  +	@rm -f $@
  +	$(AR) cr $@ $(OBJS)
  +	$(RANLIB) $@
   
  -test:		test.o
  -	$(CC) $(LDFLAGS) -o $@ test.o
  +test:		test.o libxds.a
  +	$(CC) $(LDFLAGS) -o $@ test.o -L. -lxds
   
   xds.3:		xds.pod
   	pod2man --section=3 --center="XDS Library Programmer API " xds.pod >xds.3
   
   clean::
  +	@(cd regression-tests && $(MAKE) clean)
   	rm -f test.o test
   	rm -f xds.3
   
  -check:
  +check:		libxds.a
   	(cd regression-tests && $(MAKE) check)
   
   # Dependencies

From ossp-cvs-owner@ossp.org  Wed Jul  4 17:58:53 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f64FwpX79463; Wed, 4 Jul 2001 17:58:51 +0200 (CEST)
Date: Wed, 4 Jul 2001 17:58:51 +0200 (CEST)
Message-Id: <200107041558.f64FwpX79463@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds decode.c destroy.c encode.c getbuffer...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   04-Jul-2001 17:58:51
  Branch: HEAD                             Handle: 2001070416585100

  Added files:
    ossp-pkg/srpc/libxds    decode.c destroy.c encode.c getbuffer.c init.c
                            register.c setbuffer.c unregister.c vdecode.c
                            vencode.c

  Log:
    Added function stubs that return errors when called.

  Summary:
    Revision    Changes     Path
    1.1         +33 -0      ossp-pkg/srpc/libxds/decode.c
    1.1         +32 -0      ossp-pkg/srpc/libxds/destroy.c
    1.1         +33 -0      ossp-pkg/srpc/libxds/encode.c
    1.1         +33 -0      ossp-pkg/srpc/libxds/getbuffer.c
    1.1         +35 -0      ossp-pkg/srpc/libxds/init.c
    1.1         +33 -0      ossp-pkg/srpc/libxds/register.c
    1.1         +33 -0      ossp-pkg/srpc/libxds/setbuffer.c
    1.1         +33 -0      ossp-pkg/srpc/libxds/unregister.c
    1.1         +33 -0      ossp-pkg/srpc/libxds/vdecode.c
    1.1         +33 -0      ossp-pkg/srpc/libxds/vencode.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/decode.c
  ============================================================
  $ cvs update -p -r1.1 decode.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include "internal.h"
  
  int xds_decode(xds_t* xds, const char* fmt, ...)
      {
      return XDS_ERR_INVALID_ARG;
      }
  Index: ossp-pkg/srpc/libxds/destroy.c
  ============================================================
  $ cvs update -p -r1.1 destroy.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include "internal.h"
  
  void xds_destroy(xds_t* xds)
      {
      }
  Index: ossp-pkg/srpc/libxds/encode.c
  ============================================================
  $ cvs update -p -r1.1 encode.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include "internal.h"
  
  int xds_encode(xds_t* xds, const char* fmt, ...)
      {
      return XDS_ERR_INVALID_ARG;
      }
  Index: ossp-pkg/srpc/libxds/getbuffer.c
  ============================================================
  $ cvs update -p -r1.1 getbuffer.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include "internal.h"
  
  int xds_getbuffer(xds_t* xds, xds_scope_t flag, void** buffer, size_t* buffer_size)
      {
      return XDS_ERR_INVALID_ARG;
      }
  Index: ossp-pkg/srpc/libxds/init.c
  ============================================================
  $ cvs update -p -r1.1 init.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <stdlib.h>
  #include "internal.h"
  
  xds_t* xds_init(xds_mode_t mode)
      {
      xds_t* ctx = calloc(1, sizeof(struct xds_context));
      return NULL;
      }
  Index: ossp-pkg/srpc/libxds/register.c
  ============================================================
  $ cvs update -p -r1.1 register.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include "internal.h"
  
  int xds_register(xds_t* xds, const char* name, xds_engine_t engine, void* engine_context)
      {
      return XDS_ERR_INVALID_ARG;
      }
  Index: ossp-pkg/srpc/libxds/setbuffer.c
  ============================================================
  $ cvs update -p -r1.1 setbuffer.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include "internal.h"
  
  int xds_setbuffer(xds_t* xds, xds_scope_t flag, void*  buffer, size_t  buffer_size)
      {
      return XDS_ERR_INVALID_ARG;
      }
  Index: ossp-pkg/srpc/libxds/unregister.c
  ============================================================
  $ cvs update -p -r1.1 unregister.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include "internal.h"
  
  int xds_unregister(xds_t* xds, const char* name)
      {
      return XDS_ERR_UNKNOWN_ENGINE;
      }
  Index: ossp-pkg/srpc/libxds/vdecode.c
  ============================================================
  $ cvs update -p -r1.1 vdecode.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include "internal.h"
  
  int xds_vdecode(xds_t* xds, const char* fmt, va_list args)
      {
      return XDS_ERR_INVALID_ARG;
      }
  Index: ossp-pkg/srpc/libxds/vencode.c
  ============================================================
  $ cvs update -p -r1.1 vencode.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include "internal.h"
  
  int xds_vencode(xds_t* xds, const char* fmt, va_list args)
      {
      return XDS_ERR_INVALID_ARG;
      }

From ossp-cvs-owner@ossp.org  Wed Jul  4 18:05:07 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f64G56D80506; Wed, 4 Jul 2001 18:05:06 +0200 (CEST)
Date: Wed, 4 Jul 2001 18:05:06 +0200 (CEST)
Message-Id: <200107041605.f64G56D80506@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds internal.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   04-Jul-2001 18:05:06
  Branch: HEAD                             Handle: 2001070417050600

  Added files:
    ossp-pkg/srpc/libxds    internal.h

  Log:
    This is our internal header which defines all the data structures that
    are opaque for the application developer.

  Summary:
    Revision    Changes     Path
    1.1         +44 -0      ossp-pkg/srpc/libxds/internal.h
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/internal.h
  ============================================================
  $ cvs update -p -r1.1 internal.h
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  
     internal.h: internal C API
  */
  
  #ifndef __INTERNAL_H__
  #define __INTERNAL_H__
  
  #include "xds.h"
  
  struct xds_context
      {
      xds_mode_t mode;		/* XDS_ENCODE or XDS_DECODE */
  
      char*  buffer;		/* may be NULL if unallocated */
      size_t buffer_size;		/* physical size of the buffer */
      size_t buffer_len;		/* length of buffer's content */
      };
  
  #endif /* !defined(__INTERNAL_H__) */

From ossp-cvs-owner@ossp.org  Wed Jul  4 18:06:10 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f64G69p80616; Wed, 4 Jul 2001 18:06:09 +0200 (CEST)
Date: Wed, 4 Jul 2001 18:06:09 +0200 (CEST)
Message-Id: <200107041606.f64G69p80616@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   04-Jul-2001 18:06:08
  Branch: HEAD                             Handle: 2001070417060800

  Modified files:
    ossp-pkg/srpc/libxds    Makefile

  Log:
    Updated dependencies.

  Summary:
    Revision    Changes     Path
    1.8         +11 -1      ossp-pkg/srpc/libxds/Makefile
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 Makefile
  --- ossp-pkg/srpc/libxds/Makefile	2001/07/04 15:58:13	1.7
  +++ ossp-pkg/srpc/libxds/Makefile	2001/07/04 16:06:08	1.8
  @@ -45,4 +45,14 @@
   
   # Dependencies
   
  -test.o: 	test.c xds.h
  +decode.o: internal.h xds.h
  +destroy.o: internal.h xds.h
  +encode.o: internal.h xds.h
  +getbuffer.o: internal.h xds.h
  +init.o: internal.h xds.h
  +register.o: internal.h xds.h
  +setbuffer.o: internal.h xds.h
  +test.o: xds.h
  +unregister.o: internal.h xds.h
  +vdecode.o: internal.h xds.h
  +vencode.o: internal.h xds.h

From ossp-cvs-owner@ossp.org  Wed Jul  4 18:12:16 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f64GCEq81081; Wed, 4 Jul 2001 18:12:14 +0200 (CEST)
Date: Wed, 4 Jul 2001 18:12:14 +0200 (CEST)
Message-Id: <200107041612.f64GCEq81081@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests Makefile
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   04-Jul-2001 18:12:14
  Branch: HEAD                             Handle: 2001070417121400

  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            Makefile

  Log:
    Tests programs now depend on ../libxds.a.

  Summary:
    Revision    Changes     Path
    1.3         +2  -0      ossp-pkg/srpc/libxds/regression-tests/Makefile
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/Makefile
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 Makefile
  --- ossp-pkg/srpc/libxds/regression-tests/Makefile	2001/07/04 15:55:06	1.2
  +++ ossp-pkg/srpc/libxds/regression-tests/Makefile	2001/07/04 16:12:14	1.3
  @@ -28,3 +28,5 @@
   	rm -f $(TESTS) *.log
   
   # Dependencies
  +
  +$(TESTS):	../libxds.a

From ossp-cvs-owner@ossp.org  Wed Jul  4 18:13:32 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f64GDVI81479; Wed, 4 Jul 2001 18:13:31 +0200 (CEST)
Date: Wed, 4 Jul 2001 18:13:31 +0200 (CEST)
Message-Id: <200107041613.f64GDVI81479@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests core.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   04-Jul-2001 18:13:31
  Branch: HEAD                             Handle: 2001070417133000

  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            core.c

  Log:
    Removed the tests that call xds fuctions with errorneous arguments,
    because the library right now uses assert() and thus terminates in
    case of invalid arguments.x

  Summary:
    Revision    Changes     Path
    1.2         +2  -2      ossp-pkg/srpc/libxds/regression-tests/core.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/core.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 core.c
  --- ossp-pkg/srpc/libxds/regression-tests/core.c	2001/07/04 15:55:06	1.1
  +++ ossp-pkg/srpc/libxds/regression-tests/core.c	2001/07/04 16:13:30	1.2
  @@ -54,6 +54,7 @@
   	xds_destroy(ctx[i]);
   
   
  +#if 0
       /* Check how the library deals with errorneous arguments. */
   
       if (xds_init((xds_mode_t)42) != NULL || errno != EINVAL)
  @@ -62,12 +63,11 @@
   	return 1;
   	}
   
  -
       /* Call xds_destroy() with an invalid context and see whether we
          survive that. */
   
       xds_destroy(NULL);
  -
  +#endif
   
       /* Everything went fine. */
   

From ossp-cvs-owner@ossp.org  Wed Jul  4 18:13:56 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f64GDup81546; Wed, 4 Jul 2001 18:13:56 +0200 (CEST)
Date: Wed, 4 Jul 2001 18:13:56 +0200 (CEST)
Message-Id: <200107041613.f64GDup81546@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   04-Jul-2001 18:13:56
  Branch: HEAD                             Handle: 2001070417135600

  Modified files:
    ossp-pkg/srpc/libxds    Makefile

  Log:
    Fixed clean target.

  Summary:
    Revision    Changes     Path
    1.9         +2  -2      ossp-pkg/srpc/libxds/Makefile
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 Makefile
  --- ossp-pkg/srpc/libxds/Makefile	2001/07/04 16:06:08	1.8
  +++ ossp-pkg/srpc/libxds/Makefile	2001/07/04 16:13:56	1.9
  @@ -37,8 +37,8 @@
   
   clean::
   	@(cd regression-tests && $(MAKE) clean)
  -	rm -f test.o test
  -	rm -f xds.3
  +	rm -f $(OBJS)
  +	rm -f libxds.a test.o test xds.3
   
   check:		libxds.a
   	(cd regression-tests && $(MAKE) check)

From ossp-cvs-owner@ossp.org  Wed Jul  4 18:21:27 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f64GLQv82287; Wed, 4 Jul 2001 18:21:26 +0200 (CEST)
Date: Wed, 4 Jul 2001 18:21:26 +0200 (CEST)
Message-Id: <200107041621.f64GLQv82287@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds destroy.c init.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   04-Jul-2001 18:21:26
  Branch: HEAD                             Handle: 2001070417212600

  Modified files:
    ossp-pkg/srpc/libxds    destroy.c init.c

  Log:
    Added preliminary implementations for xds_init() and xds_destroy().

  Summary:
    Revision    Changes     Path
    1.2         +8  -0      ossp-pkg/srpc/libxds/destroy.c
    1.2         +26 -2      ossp-pkg/srpc/libxds/init.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/destroy.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 destroy.c
  --- ossp-pkg/srpc/libxds/destroy.c	2001/07/04 15:58:51	1.1
  +++ ossp-pkg/srpc/libxds/destroy.c	2001/07/04 16:21:26	1.2
  @@ -25,8 +25,16 @@
      SUCH DAMAGE.
   */
   
  +#include <stdlib.h>
  +#include <errno.h>
  +#include <assert.h>
   #include "internal.h"
   
   void xds_destroy(xds_t* xds)
       {
  +    assert(xds != NULL);
  +    if (xds != NULL)
  +	{
  +	free(xds);
  +	}
       }
  Index: ossp-pkg/srpc/libxds/init.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 init.c
  --- ossp-pkg/srpc/libxds/init.c	2001/07/04 15:58:51	1.1
  +++ ossp-pkg/srpc/libxds/init.c	2001/07/04 16:21:26	1.2
  @@ -26,10 +26,34 @@
   */
   
   #include <stdlib.h>
  +#include <errno.h>
  +#include <assert.h>
   #include "internal.h"
   
   xds_t* xds_init(xds_mode_t mode)
       {
  -    xds_t* ctx = calloc(1, sizeof(struct xds_context));
  -    return NULL;
  +    xds_t* ctx;
  +
  +    /* Sanity check parameter. */
  +
  +    assert(mode == XDS_ENCODE || mode == XDS_DECODE);
  +    if (mode != XDS_ENCODE && mode != XDS_DECODE)
  +	{
  +	errno = EINVAL;
  +	return NULL;
  +	}
  +
  +    /* Allocate context structure. */
  +
  +    ctx = calloc(1, sizeof(struct xds_context));
  +    if (ctx == NULL)
  +	return NULL;		/* errno is set by calloc() */
  +
  +    /* Set mode of operation in context. */
  +
  +    ctx->mode = mode;
  +
  +    /* We are initialized. */
  +
  +    return ctx;
       }

From ossp-cvs-owner@ossp.org  Wed Jul  4 18:22:58 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f64GMvq82703; Wed, 4 Jul 2001 18:22:57 +0200 (CEST)
Date: Wed, 4 Jul 2001 18:22:57 +0200 (CEST)
Message-Id: <200107041622.f64GMvq82703@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests .run-tests
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   04-Jul-2001 18:22:57
  Branch: HEAD                             Handle: 2001070417225700

  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            .run-tests

  Log:
    Added nice (and arguably useless) tty output.

  Summary:
    Revision    Changes     Path
    1.2         +2  -0      ossp-pkg/srpc/libxds/regression-tests/.run-tests
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/.run-tests
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 .run-tests
  --- ossp-pkg/srpc/libxds/regression-tests/.run-tests	2001/07/04 15:09:55	1.1
  +++ ossp-pkg/srpc/libxds/regression-tests/.run-tests	2001/07/04 16:22:57	1.2
  @@ -9,6 +9,8 @@
   numTests=0
   numFails=0
   
  +echo Running test suite ...
  +
   for suite in $*; do
       tmp="${suite%%.exe}: "
       echo -n "$tmp"

From ossp-cvs-owner@ossp.org  Sun Jul  8 16:04:23 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f68E4LC75459; Sun, 8 Jul 2001 16:04:21 +0200 (CEST)
Date: Sun, 8 Jul 2001 16:04:21 +0200 (CEST)
Message-Id: <200107081404.f68E4LC75459@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests core.c xds-core.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Jul-2001 16:04:21
  Branch: HEAD                             Handle: 19700101010000994597461

  Added files:
    ossp-pkg/srpc/libxds/regression-tests
                            xds-core.c
  Removed files:
    ossp-pkg/srpc/libxds/regression-tests
                            core.c

  Log:
    Renamed core.c to xds-core.c for consistency.

  Summary:
    Revision    Changes     Path
    NONE        +0  -75     ossp-pkg/srpc/libxds/regression-tests/core.c
    1.1         +74 -0      ossp-pkg/srpc/libxds/regression-tests/xds-core.c
  ____________________________________________________________________________

    Index: ossp-pkg/srpc/libxds/regression-tests/xds-core.c
  ============================================================
  $ cvs update -p -r1.1 xds-core.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <stdio.h>
  #include <errno.h>
  #include "../internal.h"
  
  int main()
      {
      xds_t* ctx[50];
      size_t i;
  
      /* Open a bunch of contextes and close them again. */
  
      for(i = 0; i < sizeof(ctx)/sizeof(xds_t*); ++i)
  	{
  	if (i % 2 == 0)
  	    ctx[i] = xds_init(XDS_ENCODE);
  	else
  	    ctx[i] = xds_init(XDS_DECODE);
  
  	if (ctx[i] == 0)
  	    {
  	    printf("Failed to initialize xds context: i = %d\n", i);
  	    return 1;
  	    }
  	}
  
      for(i = 0; i < sizeof(ctx)/sizeof(xds_t*); ++i)
  	xds_destroy(ctx[i]);
  
  #ifdef NDEBUG
      /* Check how the library deals with errorneous arguments. */
  
      if (xds_init((xds_mode_t)42) != NULL || errno != EINVAL)
  	{
  	printf("Called xds_init() with invalid mode but didn't get EINVAL.\n");
  	return 1;
  	}
  
      /* Call xds_destroy() with an invalid context and see whether we
         survive that. */
  
      xds_destroy(NULL);
  #endif
  
      /* Everything went fine. */
  
      return 0;
      }

From ossp-cvs-owner@ossp.org  Sun Jul  8 16:05:04 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f68E53p75543; Sun, 8 Jul 2001 16:05:03 +0200 (CEST)
Date: Sun, 8 Jul 2001 16:05:03 +0200 (CEST)
Message-Id: <200107081405.f68E53p75543@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests Makefile
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Jul-2001 16:05:03
  Branch: HEAD                             Handle: 2001070815050300

  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            Makefile

  Log:
    - Added xds-find-engine and xds-register tests.
    - Made tests depend on ../libxds.a.

  Summary:
    Revision    Changes     Path
    1.4         +4  -2      ossp-pkg/srpc/libxds/regression-tests/Makefile
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/Makefile
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 Makefile
  --- ossp-pkg/srpc/libxds/regression-tests/Makefile	2001/07/04 16:12:14	1.3
  +++ ossp-pkg/srpc/libxds/regression-tests/Makefile	2001/07/08 14:05:03	1.4
  @@ -8,7 +8,7 @@
   CFLAGS		=
   LDFLAGS		= -L..
   
  -TESTS		= core.exe
  +TESTS		= xds-core.exe xds-find-engine.exe xds-register.exe
   
   .SUFFIXES:
   .SUFFIXES:	.c .exe
  @@ -24,9 +24,11 @@
   check:	all
   	@./.run-tests $(TESTS)
   
  +../libxds.a:
  +	(cd .. && $(MAKE) libxds.a)
   clean::
   	rm -f $(TESTS) *.log
   
   # Dependencies
   
  -$(TESTS):	../libxds.a
  +$(TESTS): ../libxds.a

From ossp-cvs-owner@ossp.org  Sun Jul  8 16:05:37 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f68E5Zp75611; Sun, 8 Jul 2001 16:05:35 +0200 (CEST)
Date: Sun, 8 Jul 2001 16:05:35 +0200 (CEST)
Message-Id: <200107081405.f68E5Zp75611@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests xds-find-engine.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Jul-2001 16:05:35
  Branch: HEAD                             Handle: 2001070815053500

  Added files:
    ossp-pkg/srpc/libxds/regression-tests
                            xds-find-engine.c

  Log:
    Test module for the xds_find_engine() function.

  Summary:
    Revision    Changes     Path
    1.1         +150 -0     ossp-pkg/srpc/libxds/regression-tests/xds-find-engine.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/xds-find-engine.c
  ============================================================
  $ cvs update -p -r1.1 xds-find-engine.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <stdio.h>
  #include "../internal.h"
  
  int main()
      {
      const engine_map_t engines[] =
  	{
  	{ "alan", NULL, 0 },
  	{ "berta", NULL, 0 },
  	{ "caesar", NULL, 0 },
  	{ "doris", NULL, 0 },
  	{ "egon", NULL, 0 },
  	{ "franziska", NULL, 0 },
  	{ "gudrun", NULL, 0 },
  	{ "heinz", NULL, 0 },
  	{ "igor", NULL, 0 },
  	{ "jamila", NULL, 0 },
  	{ "karin", NULL, 0 },
  	{ "louis", NULL, 0 },
  	};
      size_t engines_len = sizeof(engines) / sizeof(engine_map_t);
      size_t pos;
      size_t i;
  
      /* Search for every single entry in the array and check the
         results. */
  
      for (i = 0; i < engines_len; ++i)
  	{
  	if (!xds_find_engine(engines, engines_len, engines[i].name, &pos))
  	    {
  	    printf("xds_find_engine() said '%s' wouldn't be in the array, but that's wrong.\n",
  		   engines[i].name);
  	    exit(1);
  	    }
  	if (pos != i)
  	    {
  	    printf("xds_find_engine() would insert '%s' at position %d, but %d is correct.\n",
  		   engines[i].name, pos, i);
  	    exit(1);
  	    }
  	}
  
      /* Search for non-existing name that would be inserted at the
         first position. */
  
      if (xds_find_engine(engines, engines_len, "aaron", &pos))
  	{
  	printf("xds_find_engine() said 'aaron' would be in the array, but that's wrong.\n");
  	exit(1);
  	}
      if (pos != 0)
  	{
  	printf("xds_find_engine() would insert 'aaron' at position %d, but 0 is correct.\n", pos);
  	exit(1);
  	}
  
      /* Search for non-existing name that would be inserted at last
         position. */
  
      if (xds_find_engine(engines, engines_len, "zerberos", &pos))
  	{
  	printf("xds_find_engine() said 'zerberos' would be in the array, but that's wrong.\n");
  	exit(1);
  	}
      if (pos != engines_len)
  	{
  	printf("xds_find_engine() would insert 'zerberos' at position %d, but %d is correct.\n",
  	       pos, engines_len);
  	exit(1);
  	}
  
      /* Search for non-existing names that would be inserted at random
         positions. */
  
      if (xds_find_engine(engines, engines_len, "balthasar", &pos))
  	{
  	printf("xds_find_engine() said 'balthasar' would be in the array, but that's wrong.\n");
  	exit(1);
  	}
      if (pos != 1)
  	{
  	printf("xds_find_engine() would insert 'balthasar' at position %d, but 1 is correct.\n", pos);
  	exit(1);
  	}
  
      if (xds_find_engine(engines, engines_len, "bulli", &pos))
  	{
  	printf("xds_find_engine() said 'bulli' would be in the array, but that's wrong.\n");
  	exit(1);
  	}
      if (pos != 2)
  	{
  	printf("xds_find_engine() would insert 'bulli' at position %d, but 2 is correct.\n", pos);
  	exit(1);
  	}
  
      if (xds_find_engine(engines, engines_len, "hildegard", &pos))
  	{
  	printf("xds_find_engine() said 'hildegard' would be in the array, but that's wrong.\n");
  	exit(1);
  	}
      if (pos != 8)
  	{
  	printf("xds_find_engine() would insert 'hildegard' at position %d, but 8 is correct.\n", pos);
  	exit(1);
  	}
  
      if (xds_find_engine(engines, engines_len, "harald", &pos))
  	{
  	printf("xds_find_engine() said 'harald' would be in the array, but that's wrong.\n");
  	exit(1);
  	}
      if (pos != 7)
  	{
  	printf("xds_find_engine() would insert 'harald' at position %d, but 7 is correct.\n", pos);
  	exit(1);
  	}
  
      /* Everything went fine. */
  
      return 0;
      }

From ossp-cvs-owner@ossp.org  Sun Jul  8 16:06:09 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f68E67M75682; Sun, 8 Jul 2001 16:06:07 +0200 (CEST)
Date: Sun, 8 Jul 2001 16:06:07 +0200 (CEST)
Message-Id: <200107081406.f68E67M75682@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests xds-register.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Jul-2001 16:06:07
  Branch: HEAD                             Handle: 2001070815060700

  Added files:
    ossp-pkg/srpc/libxds/regression-tests
                            xds-register.c

  Log:
    Test module for the xds_register() function.

  Summary:
    Revision    Changes     Path
    1.1         +110 -0     ossp-pkg/srpc/libxds/regression-tests/xds-register.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/xds-register.c
  ============================================================
  $ cvs update -p -r1.1 xds-register.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <stdio.h>
  #include <unistd.h>
  #include "../internal.h"
  
  static int dummy_engine(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list args)
      {
      if (xds == NULL)
  	{
  	printf("XDS context isn't passed through to registered engine.\n");
  	exit(1);
  	}
      if (engine_context != (void*)42)
  	{
  	printf("Engine context isn't passed through to registered engine.\n");
  	exit(1);
  	}
      if (buffer == NULL)
  	{
  	printf("Buffer passed to engine is NULL.\n");
  	exit(1);
  	}
      if (buffer_size == 0)
  	{
  	printf("Buffer size passed to engine is NULL.\n");
  	exit(1);
  	}
      return 0;
      }
  
  int main()
      {
      xds_t* xds;
  
      /* Create contexts for encoding and decoding. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL)
  	    {
  	    printf("Failed to initialize XDS context.\n");
  	    return 1;
  	    }
  
      /* Register the dummy callback under multiple names. */
  
      if (xds_register(xds, "foo", &dummy_engine, (void*)42) != XDS_OK)
  	{
  	printf("Failed to register engine for 'foo'.\n");
  	return 1;
  	}
      if (xds_register(xds, "bar", &dummy_engine, (void*)42) != XDS_OK)
  	{
  	printf("Failed to register engine for 'bar'.\n");
  	return 1;
  	}
      if (xds_register(xds, "zarah", &dummy_engine, (void*)42) != XDS_OK)
  	{
  	printf("Failed to register engine for 'zarah'.\n");
  	return 1;
  	}
      if (xds_register(xds, "caesar", &dummy_engine, (void*)42) != XDS_OK)
  	{
  	printf("Failed to register engine for 'caesar'.\n");
  	return 1;
  	}
      if (xds_register(xds, "claus", &dummy_engine, (void*)42) != XDS_OK)
  	{
  	printf("Failed to register engine for 'claus'.\n");
  	return 1;
  	}
      if (xds_register(xds, "heinz", &dummy_engine, (void*)42) != XDS_OK)
  	{
  	printf("Failed to register engine for 'heinz'.\n");
  	return 1;
  	}
  
      /* Clean up. */
  
      xds_destroy(xds);
  
      /* Everything went fine. */
  
      return 0;
      }

From ossp-cvs-owner@ossp.org  Sun Jul  8 16:07:37 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f68E7Zh75820; Sun, 8 Jul 2001 16:07:35 +0200 (CEST)
Date: Sun, 8 Jul 2001 16:07:35 +0200 (CEST)
Message-Id: <200107081407.f68E7Zh75820@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Jul-2001 16:07:35
  Branch: HEAD                             Handle: 2001070815073500

  Modified files:
    ossp-pkg/srpc/libxds    Makefile

  Log:
    - Added _GNU_SOURCE define to CPPFLAGS so those stupid Linux boxes
      find routines not included in the ANSI-C standard.
    
    - Added find-engine.o module to build.

  Summary:
    Revision    Changes     Path
    1.10        +2  -2      ossp-pkg/srpc/libxds/Makefile
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 Makefile
  --- ossp-pkg/srpc/libxds/Makefile	2001/07/04 16:13:56	1.9
  +++ ossp-pkg/srpc/libxds/Makefile	2001/07/08 14:07:35	1.10
  @@ -8,13 +8,13 @@
   WARNFLAGS	= -Wall -ansi -pedantic
   OPTFLAGS	= -O3 -pipe
   
  -CPPFLAGS	=
  +CPPFLAGS	= -D_GNU_SOURCE
   CFLAGS		=
   CXXFLAGS	=
   LDFLAGS		=
   
   OBJS		= decode.o destroy.o encode.o getbuffer.o init.o register.o \
  -		  setbuffer.o unregister.o vdecode.o vencode.o
  +		  setbuffer.o unregister.o vdecode.o vencode.o find-engine.o
   
   .c.o:
   	$(CC) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CFLAGS) -c $<

From ossp-cvs-owner@ossp.org  Sun Jul  8 16:08:18 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f68E8HO75900; Sun, 8 Jul 2001 16:08:17 +0200 (CEST)
Date: Sun, 8 Jul 2001 16:08:17 +0200 (CEST)
Message-Id: <200107081408.f68E8HO75900@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds destroy.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Jul-2001 16:08:17
  Branch: HEAD                             Handle: 2001070815081600

  Modified files:
    ossp-pkg/srpc/libxds    destroy.c

  Log:
    Removed unnecessary inclusion of the errno.h header.

  Summary:
    Revision    Changes     Path
    1.3         +0  -1      ossp-pkg/srpc/libxds/destroy.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/destroy.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 destroy.c
  --- ossp-pkg/srpc/libxds/destroy.c	2001/07/04 16:21:26	1.2
  +++ ossp-pkg/srpc/libxds/destroy.c	2001/07/08 14:08:16	1.3
  @@ -26,7 +26,6 @@
   */
   
   #include <stdlib.h>
  -#include <errno.h>
   #include <assert.h>
   #include "internal.h"
   

From ossp-cvs-owner@ossp.org  Sun Jul  8 16:09:43 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f68E9gn76307; Sun, 8 Jul 2001 16:09:42 +0200 (CEST)
Date: Sun, 8 Jul 2001 16:09:42 +0200 (CEST)
Message-Id: <200107081409.f68E9gn76307@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds internal.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Jul-2001 16:09:42
  Branch: HEAD                             Handle: 2001070815094200

  Modified files:
    ossp-pkg/srpc/libxds    internal.h

  Log:
    - Added definition of engine_map_t.
    - Added prototype for xds_find_engine().
    - Renamed buffer_size to buffer_capacity in xds_context.
    - Added engine_map_t stuff to xds_context.

  Summary:
    Revision    Changes     Path
    1.2         +19 -4      ossp-pkg/srpc/libxds/internal.h
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/internal.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 internal.h
  --- ossp-pkg/srpc/libxds/internal.h	2001/07/04 16:05:06	1.1
  +++ ossp-pkg/srpc/libxds/internal.h	2001/07/08 14:09:42	1.2
  @@ -32,13 +32,28 @@
   
   #include "xds.h"
   
  +typedef struct
  +    {
  +    char*        name;
  +    xds_engine_t engine;
  +    void*        context;
  +    }
  +engine_map_t;
  +
   struct xds_context
       {
  -    xds_mode_t mode;		/* XDS_ENCODE or XDS_DECODE */
  +    xds_mode_t mode;
   
  -    char*  buffer;		/* may be NULL if unallocated */
  -    size_t buffer_size;		/* physical size of the buffer */
  -    size_t buffer_len;		/* length of buffer's content */
  +    char*  buffer;
  +    size_t buffer_len;
  +    size_t buffer_capacity;
  +    int    we_own_buffer;
  +
  +    engine_map_t* engines;
  +    size_t        engines_len;
  +    size_t        engines_capacity;
       };
  +
  +int xds_find_engine(const engine_map_t* engines, size_t last, const char* name, size_t* pos);
   
   #endif /* !defined(__INTERNAL_H__) */

From ossp-cvs-owner@ossp.org  Sun Jul  8 16:10:34 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f68EAX576405; Sun, 8 Jul 2001 16:10:33 +0200 (CEST)
Date: Sun, 8 Jul 2001 16:10:33 +0200 (CEST)
Message-Id: <200107081410.f68EAX576405@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds find-engine.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Jul-2001 16:10:33
  Branch: HEAD                             Handle: 2001070815103200

  Added files:
    ossp-pkg/srpc/libxds    find-engine.c

  Log:
    The xds_find_engine() routine will binary search through the
    engine_map_t to find an engine or the spot where it should be inserted
    to keep the correct alphabetical ordering.

  Summary:
    Revision    Changes     Path
    1.1         +69 -0      ossp-pkg/srpc/libxds/find-engine.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/find-engine.c
  ============================================================
  $ cvs update -p -r1.1 find-engine.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <string.h>
  #include <assert.h>
  #include "internal.h"
  
  int xds_find_engine(const engine_map_t* engines, size_t last, const char* name, size_t* pos)
      {
      size_t first;
  
      /* Sanity checks. */
  
      assert(engines != NULL);
      assert(name != NULL);
      assert(pos != NULL);
      if (engines == NULL || name == NULL || pos == NULL)
  	return XDS_ERR_INVALID_ARG;
  
      /* Use binary search to find "name" in "engines". */
  
      for (first = 0; (last - first) > 0; )
  	{
  	size_t half = first + ((last - first) / 2);
  	int rc = strcmp(engines[half].name, name);
  
  	if (rc < 0)
  	    {
  	    first = half + 1;
  	    }
  	else if(rc == 0)
  	    {			/* found it */
  	    *pos = half;
  	    return (1 == 1);
  	    }
  	else
  	    {
  	    last = half;
  	    }
  	assert(first <= last);
  	}
  
      *pos = first;
      return (1 != 1);
      }

From ossp-cvs-owner@ossp.org  Sun Jul  8 16:19:01 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f68EJ0j77191; Sun, 8 Jul 2001 16:19:00 +0200 (CEST)
Date: Sun, 8 Jul 2001 16:19:00 +0200 (CEST)
Message-Id: <200107081419.f68EJ0j77191@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests xds-find-engine.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Jul-2001 16:19:00
  Branch: HEAD                             Handle: 2001070815190000

  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            xds-find-engine.c

  Log:
    Added test whether xds_find_engine() can handle an empty array.

  Summary:
    Revision    Changes     Path
    1.2         +13 -0      ossp-pkg/srpc/libxds/regression-tests/xds-find-engine.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/xds-find-engine.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xds-find-engine.c
  --- ossp-pkg/srpc/libxds/regression-tests/xds-find-engine.c	2001/07/08 14:05:35	1.1
  +++ ossp-pkg/srpc/libxds/regression-tests/xds-find-engine.c	2001/07/08 14:19:00	1.2
  @@ -49,6 +49,19 @@
       size_t pos;
       size_t i;
   
  +    /* Does xds_find_engine handle an empty array? */
  +
  +    if (xds_find_engine(engines, 0, "whatever", &pos))
  +	{
  +	printf("xds_find_engine() said 'whatever' would be in the array, but that's wrong.\n");
  +	exit(1);
  +	}
  +    if (pos != 0)
  +	{
  +	printf("xds_find_engine() would insert 'whatever' at position %d, but 0 is correct.\n", pos);
  +	exit(1);
  +	}
  +
       /* Search for every single entry in the array and check the
          results. */
   

From ossp-cvs-owner@ossp.org  Sun Jul  8 16:21:10 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f68EL9D77661; Sun, 8 Jul 2001 16:21:09 +0200 (CEST)
Date: Sun, 8 Jul 2001 16:21:09 +0200 (CEST)
Message-Id: <200107081421.f68EL9D77661@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds destroy.c init.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Jul-2001 16:21:09
  Branch: HEAD                             Handle: 2001070815210800

  Modified files:
    ossp-pkg/srpc/libxds    destroy.c init.c

  Log:
    xds_init() and xds_destroy() will now initialize and destroy the
    engines array in the context, too.

  Summary:
    Revision    Changes     Path
    1.4         +9  -4      ossp-pkg/srpc/libxds/destroy.c
    1.3         +10 -0      ossp-pkg/srpc/libxds/init.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/destroy.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 destroy.c
  --- ossp-pkg/srpc/libxds/destroy.c	2001/07/08 14:08:16	1.3
  +++ ossp-pkg/srpc/libxds/destroy.c	2001/07/08 14:21:08	1.4
  @@ -31,9 +31,14 @@
   
   void xds_destroy(xds_t* xds)
       {
  +    /* Sanity checks. */
  +
       assert(xds != NULL);
  -    if (xds != NULL)
  -	{
  -	free(xds);
  -	}
  +    if (xds == NULL)
  +	return;
  +
  +    /* Free allocated memory. */
  +
  +    free(xds->engines);
  +    free(xds);
       }
  Index: ossp-pkg/srpc/libxds/init.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 init.c
  --- ossp-pkg/srpc/libxds/init.c	2001/07/04 16:21:26	1.2
  +++ ossp-pkg/srpc/libxds/init.c	2001/07/08 14:21:08	1.3
  @@ -53,6 +53,16 @@
   
       ctx->mode = mode;
   
  +    /* Allocate engines array. */
  +
  +    ctx->engines = calloc(32, sizeof(engine_map_t));
  +    if (ctx->engines == NULL)
  +	{
  +	free(ctx);
  +	return NULL;
  +	}
  +    ctx->engines_capacity = 32;
  +
       /* We are initialized. */
   
       return ctx;

From ossp-cvs-owner@ossp.org  Sun Jul  8 17:16:31 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f68FGUC83815; Sun, 8 Jul 2001 17:16:30 +0200 (CEST)
Date: Sun, 8 Jul 2001 17:16:30 +0200 (CEST)
Message-Id: <200107081516.f68FGUC83815@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests .run-tests
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Jul-2001 17:16:29
  Branch: HEAD                             Handle: 2001070816162900

  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            .run-tests

  Log:
    Cosmetic changes: Made the output more neat.

  Summary:
    Revision    Changes     Path
    1.3         +5  -4      ossp-pkg/srpc/libxds/regression-tests/.run-tests
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/.run-tests
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 .run-tests
  --- ossp-pkg/srpc/libxds/regression-tests/.run-tests	2001/07/04 16:22:57	1.2
  +++ ossp-pkg/srpc/libxds/regression-tests/.run-tests	2001/07/08 15:16:29	1.3
  @@ -9,16 +9,17 @@
   numTests=0
   numFails=0
   
  -echo Running test suite ...
  +echo "Running test suite:"
   
   for suite in $*; do
  -    tmp="${suite%%.exe}: "
  +    tmp="${suite%%.exe}"
       echo -n "$tmp"
       currpos=$(($RESCOLUMN-${#tmp}))
  -    while [ $currpos -gt 0 ]; do
  -	echo -n " "
  +    while [ $currpos -gt 1 ]; do
  +	echo -n "."
   	currpos=$(($currpos-1))
       done
  +    echo -n " "
       numTests=$(($numTests+1))
       eval ./$suite >${suite%%.exe}.log 2>&1
       if [ $? -eq 0 ]; then

From ossp-cvs-owner@ossp.org  Sun Jul  8 17:18:52 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f68FIpl84014; Sun, 8 Jul 2001 17:18:51 +0200 (CEST)
Date: Sun, 8 Jul 2001 17:18:51 +0200 (CEST)
Message-Id: <200107081518.f68FIpl84014@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests xds-register.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Jul-2001 17:18:51
  Branch: HEAD                             Handle: 2001070816185000

  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            xds-register.c

  Log:
    - Removed the sanity checking code from dummy_callback: It won't be
      called in this test suite. Hence, the context for the registered
      callbacks can be NULL.
    
    - Fixed old comments, which do not apply anymore.
    
    - Added test at the end that ensures the entries are in alphabetical
      order.

  Summary:
    Revision    Changes     Path
    1.2         +35 -31     ossp-pkg/srpc/libxds/regression-tests/xds-register.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/xds-register.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xds-register.c
  --- ossp-pkg/srpc/libxds/regression-tests/xds-register.c	2001/07/08 14:06:07	1.1
  +++ ossp-pkg/srpc/libxds/regression-tests/xds-register.c	2001/07/08 15:18:50	1.2
  @@ -26,78 +26,82 @@
   */
   
   #include <stdio.h>
  +#include <string.h>
   #include <unistd.h>
  +#include <assert.h>
   #include "../internal.h"
   
   static int dummy_engine(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list args)
       {
  -    if (xds == NULL)
  -	{
  -	printf("XDS context isn't passed through to registered engine.\n");
  -	exit(1);
  -	}
  -    if (engine_context != (void*)42)
  -	{
  -	printf("Engine context isn't passed through to registered engine.\n");
  -	exit(1);
  -	}
  -    if (buffer == NULL)
  -	{
  -	printf("Buffer passed to engine is NULL.\n");
  -	exit(1);
  -	}
  -    if (buffer_size == 0)
  -	{
  -	printf("Buffer size passed to engine is NULL.\n");
  -	exit(1);
  -	}
       return 0;
       }
   
   int main()
       {
       xds_t* xds;
  +    size_t i;
   
  -    /* Create contexts for encoding and decoding. */
  +    /* Create context. */
   
       xds = xds_init(XDS_ENCODE);
       if (xds == NULL)
  -	    {
  -	    printf("Failed to initialize XDS context.\n");
  -	    return 1;
  -	    }
  +	{
  +	printf("Failed to initialize XDS context.\n");
  +	return 1;
  +	}
   
       /* Register the dummy callback under multiple names. */
   
  -    if (xds_register(xds, "foo", &dummy_engine, (void*)42) != XDS_OK)
  +    if (xds_register(xds, "foo", &dummy_engine, NULL) != XDS_OK)
   	{
   	printf("Failed to register engine for 'foo'.\n");
   	return 1;
   	}
  -    if (xds_register(xds, "bar", &dummy_engine, (void*)42) != XDS_OK)
  +    if (xds_register(xds, "bar", &dummy_engine, NULL) != XDS_OK)
   	{
   	printf("Failed to register engine for 'bar'.\n");
   	return 1;
   	}
  -    if (xds_register(xds, "zarah", &dummy_engine, (void*)42) != XDS_OK)
  +    if (xds_register(xds, "zarah", &dummy_engine, NULL) != XDS_OK)
   	{
   	printf("Failed to register engine for 'zarah'.\n");
   	return 1;
   	}
  -    if (xds_register(xds, "caesar", &dummy_engine, (void*)42) != XDS_OK)
  +    if (xds_register(xds, "caesar", &dummy_engine, NULL) != XDS_OK)
   	{
   	printf("Failed to register engine for 'caesar'.\n");
   	return 1;
   	}
  -    if (xds_register(xds, "claus", &dummy_engine, (void*)42) != XDS_OK)
  +    if (xds_register(xds, "claus", &dummy_engine, NULL) != XDS_OK)
   	{
   	printf("Failed to register engine for 'claus'.\n");
   	return 1;
   	}
  -    if (xds_register(xds, "heinz", &dummy_engine, (void*)42) != XDS_OK)
  +    if (xds_register(xds, "heinz", &dummy_engine, NULL) != XDS_OK)
   	{
   	printf("Failed to register engine for 'heinz'.\n");
   	return 1;
  +	}
  +
  +    /* Register the callback again, overwriting an existing entry. */
  +
  +    if (xds_register(xds, "claus", &dummy_engine, NULL) != XDS_OK)
  +	{
  +	printf("Failed to re-register engine for 'claus'.\n");
  +	return 1;
  +	}
  +
  +    /* Ensure that everything is in alphabetical order. */
  +
  +    for (i = 1; i < xds->engines_len; ++i)
  +	{
  +	assert(xds->engines[i-1].name != NULL);
  +	assert(xds->engines[i].name != NULL);
  +	if (strcmp(xds->engines[i-1].name, xds->engines[i].name) >= 0)
  +	    {
  +	    printf("xds->engines is not in alphabetical order!\n");
  +	    exit(1);
  +	    }
   	}
   
       /* Clean up. */

From ossp-cvs-owner@ossp.org  Sun Jul  8 17:20:36 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f68FKZa84470; Sun, 8 Jul 2001 17:20:35 +0200 (CEST)
Date: Sun, 8 Jul 2001 17:20:35 +0200 (CEST)
Message-Id: <200107081520.f68FKZa84470@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile internal.h set-capacity.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Jul-2001 17:20:35
  Branch: HEAD                             Handle: 2001070816203400

  Added files:
    ossp-pkg/srpc/libxds    set-capacity.c
  Modified files:
    ossp-pkg/srpc/libxds    Makefile internal.h

  Log:
    Added generic xds_set_capacity() function that will handle the
    enlarging of dynamic buffers for the rest of the code.

  Summary:
    Revision    Changes     Path
    1.11        +2  -1      ossp-pkg/srpc/libxds/Makefile
    1.3         +1  -0      ossp-pkg/srpc/libxds/internal.h
    1.1         +67 -0      ossp-pkg/srpc/libxds/set-capacity.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 Makefile
  --- ossp-pkg/srpc/libxds/Makefile	2001/07/08 14:07:35	1.10
  +++ ossp-pkg/srpc/libxds/Makefile	2001/07/08 15:20:34	1.11
  @@ -14,7 +14,8 @@
   LDFLAGS		=
   
   OBJS		= decode.o destroy.o encode.o getbuffer.o init.o register.o \
  -		  setbuffer.o unregister.o vdecode.o vencode.o find-engine.o
  +		  setbuffer.o unregister.o vdecode.o vencode.o find-engine.o \
  +		  set-capacity.o
   
   .c.o:
   	$(CC) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CFLAGS) -c $<
  Index: ossp-pkg/srpc/libxds/internal.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 internal.h
  --- ossp-pkg/srpc/libxds/internal.h	2001/07/08 14:09:42	1.2
  +++ ossp-pkg/srpc/libxds/internal.h	2001/07/08 15:20:34	1.3
  @@ -55,5 +55,6 @@
       };
   
   int xds_find_engine(const engine_map_t* engines, size_t last, const char* name, size_t* pos);
  +int xds_set_capacity(void** array, size_t* array_capacity, size_t new_capacity, size_t elem_size, size_t initial_capacity);
   
   #endif /* !defined(__INTERNAL_H__) */
  Index: ossp-pkg/srpc/libxds/set-capacity.c
  ============================================================
  $ cvs update -p -r1.1 set-capacity.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <stdio.h>		/* delete me */
  
  #include <stdlib.h>
  #include <assert.h>
  #include "internal.h"
  
  int xds_set_capacity(void** array, size_t* array_capacity, size_t new_capacity, size_t elem_size, size_t initial_capacity)
      {
      void*  buf;
      size_t size;
  
      /* Sanity checks. */
  
      assert(array != NULL);
      assert(array_capacity != NULL);
      assert(elem_size != 0);
      assert(initial_capacity != 0);
  
      /* Do we need to re-allocate? */
  
      if (*array_capacity > new_capacity)
  	return XDS_OK;
  
      /* Find the correct capacity. */
  
      for(size = (*array_capacity != 0) ? *array_capacity * 2 : initial_capacity; size <= new_capacity; size *= 2)
  	;
  
      /* Allocate the array and store the new values. */
  
      printf("Reallocating array with capacity %d; old value was %d.\n", size, *array_capacity);
  
      buf = realloc(*array, size * elem_size);
      if (buf == NULL)
  	return XDS_ERR_NO_MEM;
      *array = buf;
      *array_capacity = size;
  
      return XDS_OK;
      }

From ossp-cvs-owner@ossp.org  Sun Jul  8 17:22:02 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f68FM1384638; Sun, 8 Jul 2001 17:22:01 +0200 (CEST)
Date: Sun, 8 Jul 2001 17:22:01 +0200 (CEST)
Message-Id: <200107081522.f68FM1384638@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds destroy.c find-engine.c init.c regist...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Jul-2001 17:22:01
  Branch: HEAD                             Handle: 2001070816220000

  Modified files:
    ossp-pkg/srpc/libxds    destroy.c find-engine.c init.c register.c
    ossp-pkg/srpc/libxds/regression-tests
                            Makefile

  Log:
    xds_find_engine() can now handle a NULL pointer for "engines" as long
    as "last" is set correctly to 0. This is necessary so that we don't
    have to allocate an array before we actually have any entries.

  Summary:
    Revision    Changes     Path
    1.5         +4  -1      ossp-pkg/srpc/libxds/destroy.c
    1.2         +1  -3      ossp-pkg/srpc/libxds/find-engine.c
    1.4         +0  -10     ossp-pkg/srpc/libxds/init.c
    1.2         +53 -1      ossp-pkg/srpc/libxds/register.c
    1.5         +1  -1      ossp-pkg/srpc/libxds/regression-tests/Makefile
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/destroy.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 destroy.c
  --- ossp-pkg/srpc/libxds/destroy.c	2001/07/08 14:21:08	1.4
  +++ ossp-pkg/srpc/libxds/destroy.c	2001/07/08 15:22:00	1.5
  @@ -39,6 +39,9 @@
   
       /* Free allocated memory. */
   
  -    free(xds->engines);
  +    assert(xds->engines != NULL || xds->engines_capacity == 0);
  +    if (xds->engines != NULL)
  +	free(xds->engines);
  +
       free(xds);
       }
  Index: ossp-pkg/srpc/libxds/find-engine.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 find-engine.c
  --- ossp-pkg/srpc/libxds/find-engine.c	2001/07/08 14:10:32	1.1
  +++ ossp-pkg/srpc/libxds/find-engine.c	2001/07/08 15:22:00	1.2
  @@ -35,11 +35,9 @@
   
       /* Sanity checks. */
   
  -    assert(engines != NULL);
  +    assert(engines != NULL || last == 0);
       assert(name != NULL);
       assert(pos != NULL);
  -    if (engines == NULL || name == NULL || pos == NULL)
  -	return XDS_ERR_INVALID_ARG;
   
       /* Use binary search to find "name" in "engines". */
   
  Index: ossp-pkg/srpc/libxds/init.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 init.c
  --- ossp-pkg/srpc/libxds/init.c	2001/07/08 14:21:08	1.3
  +++ ossp-pkg/srpc/libxds/init.c	2001/07/08 15:22:00	1.4
  @@ -53,16 +53,6 @@
   
       ctx->mode = mode;
   
  -    /* Allocate engines array. */
  -
  -    ctx->engines = calloc(32, sizeof(engine_map_t));
  -    if (ctx->engines == NULL)
  -	{
  -	free(ctx);
  -	return NULL;
  -	}
  -    ctx->engines_capacity = 32;
  -
       /* We are initialized. */
   
       return ctx;
  Index: ossp-pkg/srpc/libxds/register.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 register.c
  --- ossp-pkg/srpc/libxds/register.c	2001/07/04 15:58:51	1.1
  +++ ossp-pkg/srpc/libxds/register.c	2001/07/08 15:22:00	1.2
  @@ -25,9 +25,61 @@
      SUCH DAMAGE.
   */
   
  +#include <stdio.h>		/* delete me */
  +
  +#include <stdlib.h>
  +#include <string.h>
  +#include <assert.h>
   #include "internal.h"
   
   int xds_register(xds_t* xds, const char* name, xds_engine_t engine, void* engine_context)
       {
  -    return XDS_ERR_INVALID_ARG;
  +    size_t pos;
  +
  +    printf("*** Inserting '%s' ...\n", name);
  +    printf("Before the insertion:\n");
  +    for (pos = 0; pos < xds->engines_len; ++pos)
  +	printf("\tengines[%d] = '%s'\n", pos, xds->engines[pos].name);
  +
  +    /* Sanity checks. */
  +
  +    assert(xds != NULL);
  +    assert(name != NULL);
  +    assert(engine != NULL);
  +    if (xds == NULL || name == NULL || engine == NULL)
  +	return XDS_ERR_INVALID_ARG;
  +
  +    /* Copy the name argument into our own memory. */
  +
  +    name = strdup(name);
  +    if (name == NULL)
  +	return XDS_ERR_NO_MEM;
  +
  +    /* Search engines for the entry. */
  +
  +    if (xds_find_engine(xds->engines, xds->engines_len, name, &pos))
  +	{			/* overwrite existing entry */
  +	free(xds->engines[pos].name);
  +	}
  +    else
  +	{			/* insert new entry */
  +	xds_set_capacity((void**)&xds->engines, &xds->engines_capacity, xds->engines_len + 1, sizeof(engine_map_t), 1);
  +	memmove(&xds->engines[pos+1], &xds->engines[pos], (xds->engines_len - pos) * sizeof(engine_map_t));
  +	++xds->engines_len;
  +	}
  +
  +    /* Insert entry. */
  +
  +    xds->engines[pos].name    = (char*)name;
  +    xds->engines[pos].engine  = engine;
  +    xds->engines[pos].context = engine_context;
  +
  +    printf("After the insertion:\n");
  +    for (pos = 0; pos < xds->engines_len; ++pos)
  +	printf("\tengines[%d] = '%s'\n", pos, xds->engines[pos].name);
  +    printf("\n");
  +
  +    /* Everything is fine. */
  +
  +    return XDS_OK;
       }
  Index: ossp-pkg/srpc/libxds/regression-tests/Makefile
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 Makefile
  --- ossp-pkg/srpc/libxds/regression-tests/Makefile	2001/07/08 14:05:03	1.4
  +++ ossp-pkg/srpc/libxds/regression-tests/Makefile	2001/07/08 15:22:00	1.5
  @@ -8,7 +8,7 @@
   CFLAGS		=
   LDFLAGS		= -L..
   
  -TESTS		= xds-core.exe xds-find-engine.exe xds-register.exe
  +TESTS		= xds-core.exe xds-find-engine.exe xds-register.exe xds-callback-semantics.exe
   
   .SUFFIXES:
   .SUFFIXES:	.c .exe

From ossp-cvs-owner@ossp.org  Sun Jul  8 17:26:24 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f68FQMw84989; Sun, 8 Jul 2001 17:26:22 +0200 (CEST)
Date: Sun, 8 Jul 2001 17:26:22 +0200 (CEST)
Message-Id: <200107081526.f68FQMw84989@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds register.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Jul-2001 17:26:22
  Branch: HEAD                             Handle: 2001070816262200

  Modified files:
    ossp-pkg/srpc/libxds    register.c

  Log:
    xds_register() now uses xds_set_capacity() to handle the dynamic
    buffer for storing the engines.

  Summary:
    Revision    Changes     Path
    1.3         +5  -1      ossp-pkg/srpc/libxds/register.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/register.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 register.c
  --- ossp-pkg/srpc/libxds/register.c	2001/07/08 15:22:00	1.2
  +++ ossp-pkg/srpc/libxds/register.c	2001/07/08 15:26:22	1.3
  @@ -63,7 +63,11 @@
   	}
       else
   	{			/* insert new entry */
  -	xds_set_capacity((void**)&xds->engines, &xds->engines_capacity, xds->engines_len + 1, sizeof(engine_map_t), 1);
  +	int rc = xds_set_capacity((void**)&xds->engines, &xds->engines_capacity,
  +				  xds->engines_len + 1, sizeof(engine_map_t), 32);
  +	assert(rc == XDS_OK || rc == XDS_ERR_NO_MEM);
  +	if (rc != XDS_OK)
  +	    return rc;
   	memmove(&xds->engines[pos+1], &xds->engines[pos], (xds->engines_len - pos) * sizeof(engine_map_t));
   	++xds->engines_len;
   	}

From ossp-cvs-owner@ossp.org  Sun Jul  8 17:28:52 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f68FSpJ85208; Sun, 8 Jul 2001 17:28:51 +0200 (CEST)
Date: Sun, 8 Jul 2001 17:28:51 +0200 (CEST)
Message-Id: <200107081528.f68FSpJ85208@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds internal.h register.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Jul-2001 17:28:51
  Branch: HEAD                             Handle: 2001070816285100

  Modified files:
    ossp-pkg/srpc/libxds    internal.h register.c

  Log:
    Added define for the initial size of the engines array to internal.h
    and use it in xds_register().

  Summary:
    Revision    Changes     Path
    1.4         +2  -0      ossp-pkg/srpc/libxds/internal.h
    1.4         +5  -2      ossp-pkg/srpc/libxds/register.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/internal.h
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 internal.h
  --- ossp-pkg/srpc/libxds/internal.h	2001/07/08 15:20:34	1.3
  +++ ossp-pkg/srpc/libxds/internal.h	2001/07/08 15:28:51	1.4
  @@ -32,6 +32,8 @@
   
   #include "xds.h"
   
  +#define XDS_INITIAL_ENGINES_CAPACITY 32
  +
   typedef struct
       {
       char*        name;
  Index: ossp-pkg/srpc/libxds/register.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 register.c
  --- ossp-pkg/srpc/libxds/register.c	2001/07/08 15:26:22	1.3
  +++ ossp-pkg/srpc/libxds/register.c	2001/07/08 15:28:51	1.4
  @@ -63,8 +63,11 @@
   	}
       else
   	{			/* insert new entry */
  -	int rc = xds_set_capacity((void**)&xds->engines, &xds->engines_capacity,
  -				  xds->engines_len + 1, sizeof(engine_map_t), 32);
  +	int rc = xds_set_capacity((void**)&xds->engines,
  +				  &xds->engines_capacity,
  +				  xds->engines_len + 1,
  +				  sizeof(engine_map_t),
  +				  XDS_INITIAL_ENGINES_CAPACITY);
   	assert(rc == XDS_OK || rc == XDS_ERR_NO_MEM);
   	if (rc != XDS_OK)
   	    return rc;

From ossp-cvs-owner@ossp.org  Sun Jul  8 17:36:31 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f68FaTu86228; Sun, 8 Jul 2001 17:36:29 +0200 (CEST)
Date: Sun, 8 Jul 2001 17:36:29 +0200 (CEST)
Message-Id: <200107081536.f68FaTu86228@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Jul-2001 17:36:29
  Branch: HEAD                             Handle: 19700101010000994602989

  Modified files:
    ossp-pkg/srpc/libxds    Makefile
  Removed files:
    ossp-pkg/srpc/libxds    test.c

  Log:
    Removed test.c -- this won't be needed anymore now that we have
    regression testing.

  Summary:
    Revision    Changes     Path
    1.12        +3  -5      ossp-pkg/srpc/libxds/Makefile
    NONE        +0  -23     ossp-pkg/srpc/libxds/test.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 Makefile
  --- ossp-pkg/srpc/libxds/Makefile	2001/07/08 15:20:34	1.11
  +++ ossp-pkg/srpc/libxds/Makefile	2001/07/08 15:36:29	1.12
  @@ -23,16 +23,13 @@
   .cpp.o:
   	$(CXX) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CXXFLAGS) -c $<
   
  -all:	libxds.a xds.3 test
  +all:	libxds.a xds.3
   
   libxds.a:	$(OBJS)
   	@rm -f $@
   	$(AR) cr $@ $(OBJS)
   	$(RANLIB) $@
   
  -test:		test.o libxds.a
  -	$(CC) $(LDFLAGS) -o $@ test.o -L. -lxds
  -
   xds.3:		xds.pod
   	pod2man --section=3 --center="XDS Library Programmer API " xds.pod >xds.3
   
  @@ -49,11 +46,12 @@
   decode.o: internal.h xds.h
   destroy.o: internal.h xds.h
   encode.o: internal.h xds.h
  +find-engine.o: internal.h xds.h
   getbuffer.o: internal.h xds.h
   init.o: internal.h xds.h
   register.o: internal.h xds.h
  +set-capacity.o: internal.h xds.h
   setbuffer.o: internal.h xds.h
  -test.o: xds.h
   unregister.o: internal.h xds.h
   vdecode.o: internal.h xds.h
   vencode.o: internal.h xds.h
  

From ossp-cvs-owner@ossp.org  Sun Jul  8 17:37:15 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f68FbEt86313; Sun, 8 Jul 2001 17:37:14 +0200 (CEST)
Date: Sun, 8 Jul 2001 17:37:14 +0200 (CEST)
Message-Id: <200107081537.f68FbEt86313@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds register.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Jul-2001 17:37:14
  Branch: HEAD                             Handle: 2001070816371300

  Modified files:
    ossp-pkg/srpc/libxds    register.c

  Log:
    Removed debug output.

  Summary:
    Revision    Changes     Path
    1.5         +0  -12     ossp-pkg/srpc/libxds/register.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/register.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 register.c
  --- ossp-pkg/srpc/libxds/register.c	2001/07/08 15:28:51	1.4
  +++ ossp-pkg/srpc/libxds/register.c	2001/07/08 15:37:13	1.5
  @@ -25,8 +25,6 @@
      SUCH DAMAGE.
   */
   
  -#include <stdio.h>		/* delete me */
  -
   #include <stdlib.h>
   #include <string.h>
   #include <assert.h>
  @@ -36,11 +34,6 @@
       {
       size_t pos;
   
  -    printf("*** Inserting '%s' ...\n", name);
  -    printf("Before the insertion:\n");
  -    for (pos = 0; pos < xds->engines_len; ++pos)
  -	printf("\tengines[%d] = '%s'\n", pos, xds->engines[pos].name);
  -
       /* Sanity checks. */
   
       assert(xds != NULL);
  @@ -80,11 +73,6 @@
       xds->engines[pos].name    = (char*)name;
       xds->engines[pos].engine  = engine;
       xds->engines[pos].context = engine_context;
  -
  -    printf("After the insertion:\n");
  -    for (pos = 0; pos < xds->engines_len; ++pos)
  -	printf("\tengines[%d] = '%s'\n", pos, xds->engines[pos].name);
  -    printf("\n");
   
       /* Everything is fine. */
   

From ossp-cvs-owner@ossp.org  Sun Jul  8 17:57:28 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f68FvSl88479; Sun, 8 Jul 2001 17:57:28 +0200 (CEST)
Date: Sun, 8 Jul 2001 17:57:28 +0200 (CEST)
Message-Id: <200107081557.f68FvSl88479@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests .run-tests
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Jul-2001 17:57:28
  Branch: HEAD                             Handle: 2001070816572700

  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            .run-tests

  Log:
    More cosmetic changes to the output.

  Summary:
    Revision    Changes     Path
    1.4         +2  -2      ossp-pkg/srpc/libxds/regression-tests/.run-tests
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/.run-tests
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 .run-tests
  --- ossp-pkg/srpc/libxds/regression-tests/.run-tests	2001/07/08 15:16:29	1.3
  +++ ossp-pkg/srpc/libxds/regression-tests/.run-tests	2001/07/08 15:57:27	1.4
  @@ -31,10 +31,10 @@
   done
   
   echo
  -echo "Summary: $numFails of $numTests tests failed ($(($numFails*100/$numTests))%)."
  -
   if [ $numFails -eq 0 ]; then
  +    echo "Summary: All tests succeeded."
       exit 0
   else
  +    echo "Summary: $numFails of $numTests tests failed ($(($numFails*100/$numTests))%)."
       exit 1
   fi

From ossp-cvs-owner@ossp.org  Sun Jul  8 17:58:16 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f68FwE688583; Sun, 8 Jul 2001 17:58:14 +0200 (CEST)
Date: Sun, 8 Jul 2001 17:58:14 +0200 (CEST)
Message-Id: <200107081558.f68FwE688583@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests xds-register.c ossp-...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Jul-2001 17:58:14
  Branch: HEAD                             Handle: 2001070816581301

  Modified files:
    ossp-pkg/srpc/libxds    unregister.c
    ossp-pkg/srpc/libxds/regression-tests
                            xds-register.c

  Log:
    Implemented xds_unregister() function and added apropriate test cases.

  Summary:
    Revision    Changes     Path
    1.3         +32 -0      ossp-pkg/srpc/libxds/regression-tests/xds-register.c
    1.2         +37 -1      ossp-pkg/srpc/libxds/unregister.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/xds-register.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xds-register.c
  --- ossp-pkg/srpc/libxds/regression-tests/xds-register.c	2001/07/08 15:18:50	1.2
  +++ ossp-pkg/srpc/libxds/regression-tests/xds-register.c	2001/07/08 15:58:14	1.3
  @@ -104,6 +104,38 @@
   	    }
   	}
   
  +    /* Try to remove an unknown entry. */
  +
  +    if (xds_unregister(xds, "abacadabra") != XDS_ERR_UNKNOWN_ENGINE)
  +	{
  +	printf("xds_unregister() succeeded at removing 'abacadabra' even though it is not there.\n");
  +	exit(1);
  +	}
  +
  +    /* Remove an entry from the middle. */
  +
  +    if (xds_unregister(xds, "heinz") != XDS_OK)
  +	{
  +	printf("xds_unregister() failed to remove 'heinz'.\n");
  +	exit(1);
  +	}
  +
  +    /* Remove the last entry. */
  +
  +    if (xds_unregister(xds, "zarah") != XDS_OK)
  +	{
  +	printf("xds_unregister() failed to remove 'bar'.\n");
  +	exit(1);
  +	}
  +
  +    /* Remove the first entry. */
  +
  +    if (xds_unregister(xds, "bar") != XDS_OK)
  +	{
  +	printf("xds_unregister() failed to remove 'bar'.\n");
  +	exit(1);
  +	}
  +
       /* Clean up. */
   
       xds_destroy(xds);
  Index: ossp-pkg/srpc/libxds/unregister.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 unregister.c
  --- ossp-pkg/srpc/libxds/unregister.c	2001/07/04 15:58:51	1.1
  +++ ossp-pkg/srpc/libxds/unregister.c	2001/07/08 15:58:13	1.2
  @@ -25,9 +25,45 @@
      SUCH DAMAGE.
   */
   
  +#include <stdlib.h>
  +#include <string.h>
  +#include <assert.h>
   #include "internal.h"
   
   int xds_unregister(xds_t* xds, const char* name)
       {
  -    return XDS_ERR_UNKNOWN_ENGINE;
  +    size_t pos;
  +
  +    /* Sanity checks. */
  +
  +    assert(xds != NULL);
  +    assert(name != NULL);
  +    if (xds == NULL || name == NULL)
  +	return XDS_ERR_INVALID_ARG;
  +
  +    /* Find the entry we're supposed to delete. */
  +
  +    if (!xds_find_engine(xds->engines, xds->engines_len, name, &pos))
  +	return XDS_ERR_UNKNOWN_ENGINE;
  +
  +    /* Free the memory allocated for this entry and move the entries
  +       behind it back if necessary. */
  +
  +    assert(xds->engines[pos].name != NULL);
  +    free(xds->engines[pos].name);
  +    memmove(&xds->engines[pos], &xds->engines[pos+1], (xds->engines_len - (pos + 1)) * sizeof(engine_map_t));
  +    --xds->engines_len;
  +
  +    /* Lower capacity if necessary. */
  +
  +    int rc = xds_set_capacity((void**)&xds->engines,
  +			      &xds->engines_capacity,
  +			      xds->engines_len,
  +			      sizeof(engine_map_t),
  +			      XDS_INITIAL_ENGINES_CAPACITY);
  +    assert(rc == XDS_OK || rc == XDS_ERR_NO_MEM);
  +    if (rc != XDS_OK)
  +	return rc;
  +
  +    return XDS_OK;
       }

From ossp-cvs-owner@ossp.org  Sun Jul  8 18:01:39 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f68G1b089423; Sun, 8 Jul 2001 18:01:37 +0200 (CEST)
Date: Sun, 8 Jul 2001 18:01:37 +0200 (CEST)
Message-Id: <200107081601.f68G1b089423@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds unregister.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Jul-2001 18:01:37
  Branch: HEAD                             Handle: 2001070817013700

  Modified files:
    ossp-pkg/srpc/libxds    unregister.c

  Log:
    Messed up declaration of "rc" when doing cut & paste. Fixed that.

  Summary:
    Revision    Changes     Path
    1.3         +6  -5      ossp-pkg/srpc/libxds/unregister.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/unregister.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 unregister.c
  --- ossp-pkg/srpc/libxds/unregister.c	2001/07/08 15:58:13	1.2
  +++ ossp-pkg/srpc/libxds/unregister.c	2001/07/08 16:01:37	1.3
  @@ -33,6 +33,7 @@
   int xds_unregister(xds_t* xds, const char* name)
       {
       size_t pos;
  +    int    rc;
   
       /* Sanity checks. */
   
  @@ -56,11 +57,11 @@
   
       /* Lower capacity if necessary. */
   
  -    int rc = xds_set_capacity((void**)&xds->engines,
  -			      &xds->engines_capacity,
  -			      xds->engines_len,
  -			      sizeof(engine_map_t),
  -			      XDS_INITIAL_ENGINES_CAPACITY);
  +    rc = xds_set_capacity((void**)&xds->engines,
  +			  &xds->engines_capacity,
  +			  xds->engines_len,
  +			  sizeof(engine_map_t),
  +			  XDS_INITIAL_ENGINES_CAPACITY);
       assert(rc == XDS_OK || rc == XDS_ERR_NO_MEM);
       if (rc != XDS_OK)
   	return rc;

From ossp-cvs-owner@ossp.org  Sun Jul  8 18:02:58 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f68G2uC89556; Sun, 8 Jul 2001 18:02:56 +0200 (CEST)
Date: Sun, 8 Jul 2001 18:02:56 +0200 (CEST)
Message-Id: <200107081602.f68G2uC89556@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests Makefile xds-encode....
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Jul-2001 18:02:56
  Branch: HEAD                             Handle: 2001070817025600

  Added files:
    ossp-pkg/srpc/libxds/regression-tests
                            xds-encode.c
  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            Makefile

  Log:
    Added preliminary version of the xds-encode test case.

  Summary:
    Revision    Changes     Path
    1.6         +1  -1      ossp-pkg/srpc/libxds/regression-tests/Makefile
    1.1         +134 -0     ossp-pkg/srpc/libxds/regression-tests/xds-encode.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/Makefile
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 Makefile
  --- ossp-pkg/srpc/libxds/regression-tests/Makefile	2001/07/08 15:22:00	1.5
  +++ ossp-pkg/srpc/libxds/regression-tests/Makefile	2001/07/08 16:02:56	1.6
  @@ -8,7 +8,7 @@
   CFLAGS		=
   LDFLAGS		= -L..
   
  -TESTS		= xds-core.exe xds-find-engine.exe xds-register.exe xds-callback-semantics.exe
  +TESTS		= xds-core.exe xds-find-engine.exe xds-register.exe xds-encode.exe
   
   .SUFFIXES:
   .SUFFIXES:	.c .exe
  Index: ossp-pkg/srpc/libxds/regression-tests/xds-encode.c
  ============================================================
  $ cvs update -p -r1.1 xds-encode.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <stdio.h>
  #include <string.h>
  #include <unistd.h>
  #include <assert.h>
  #include "../internal.h"
  
  static int dummy_engine(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list args)
      {
      if (xds == NULL)
  	{
  	printf("XDS context isn't passed through to registered engine.\n");
  	exit(1);
  	}
      if (engine_context != (void*)42)
  	{
  	printf("Engine context isn't passed through to registered engine.\n");
  	exit(1);
  	}
      if (buffer == NULL)
  	{
  	printf("Buffer passed to engine is NULL.\n");
  	exit(1);
  	}
      if (buffer_size == 0)
  	{
  	printf("Buffer size passed to engine is NULL.\n");
  	exit(1);
  	}
      return 0;
      }
  
  int main()
      {
      xds_t* xds;
      size_t i;
  
      /* Create contexts for encoding and decoding. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL)
  	    {
  	    printf("Failed to initialize XDS context.\n");
  	    return 1;
  	    }
  
      /* Register the dummy callback under multiple names. */
  
      if (xds_register(xds, "foo", &dummy_engine, (void*)42) != XDS_OK)
  	{
  	printf("Failed to register engine for 'foo'.\n");
  	return 1;
  	}
      if (xds_register(xds, "bar", &dummy_engine, (void*)42) != XDS_OK)
  	{
  	printf("Failed to register engine for 'bar'.\n");
  	return 1;
  	}
      if (xds_register(xds, "zarah", &dummy_engine, (void*)42) != XDS_OK)
  	{
  	printf("Failed to register engine for 'zarah'.\n");
  	return 1;
  	}
      if (xds_register(xds, "caesar", &dummy_engine, (void*)42) != XDS_OK)
  	{
  	printf("Failed to register engine for 'caesar'.\n");
  	return 1;
  	}
      if (xds_register(xds, "claus", &dummy_engine, (void*)42) != XDS_OK)
  	{
  	printf("Failed to register engine for 'claus'.\n");
  	return 1;
  	}
      if (xds_register(xds, "heinz", &dummy_engine, (void*)42) != XDS_OK)
  	{
  	printf("Failed to register engine for 'heinz'.\n");
  	return 1;
  	}
  
      /* Register the callback again, overwriting an existing entry. */
  
      if (xds_register(xds, "claus", &dummy_engine, (void*)42) != XDS_OK)
  	{
  	printf("Failed to re-register engine for 'claus'.\n");
  	return 1;
  	}
  
      /* Ensure that everything is in alphabetical order. */
  
      for (i = 1; i < xds->engines_len; ++i)
  	{
  	assert(xds->engines[i-1].name != NULL);
  	assert(xds->engines[i].name != NULL);
  	if (strcmp(xds->engines[i-1].name, xds->engines[i].name) >= 0)
  	    {
  	    printf("xds->engines is not in alphabetical order!\n");
  	    exit(1);
  	    }
  	}
  
      /* Clean up. */
  
      xds_destroy(xds);
  
      /* Everything went fine. */
  
      return 0;
      }

From ossp-cvs-owner@ossp.org  Mon Jul  9 19:16:32 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f69HGVU68458; Mon, 9 Jul 2001 19:16:31 +0200 (CEST)
Date: Mon, 9 Jul 2001 19:16:31 +0200 (CEST)
Message-Id: <200107091716.f69HGVU68458@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests Makefile xds-getbuff...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   09-Jul-2001 19:16:31
  Branch: HEAD                             Handle: 2001070918163000

  Added files:
    ossp-pkg/srpc/libxds/regression-tests
                            xds-getbuffer.c
  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            Makefile

  Log:
    Added test suite for xds_getbuffer().

  Summary:
    Revision    Changes     Path
    1.7         +2  -1      ossp-pkg/srpc/libxds/regression-tests/Makefile
    1.1         +146 -0     ossp-pkg/srpc/libxds/regression-tests/xds-getbuffer.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/Makefile
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 Makefile
  --- ossp-pkg/srpc/libxds/regression-tests/Makefile	2001/07/08 16:02:56	1.6
  +++ ossp-pkg/srpc/libxds/regression-tests/Makefile	2001/07/09 17:16:30	1.7
  @@ -8,7 +8,8 @@
   CFLAGS		=
   LDFLAGS		= -L..
   
  -TESTS		= xds-core.exe xds-find-engine.exe xds-register.exe xds-encode.exe
  +TESTS		= xds-core.exe xds-find-engine.exe xds-register.exe xds-encode.exe \
  +		  xds-getbuffer.exe
   
   .SUFFIXES:
   .SUFFIXES:	.c .exe
  Index: ossp-pkg/srpc/libxds/regression-tests/xds-getbuffer.c
  ============================================================
  $ cvs update -p -r1.1 xds-getbuffer.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <stdio.h>
  #include <string.h>
  #include <unistd.h>
  #include <assert.h>
  #include "../internal.h"
  
  static int dummy_engine(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list args)
      {
      strncpy(buffer, "Hallo!", buffer_size);
      return 6;
      }
  
  int main()
      {
      xds_t* xds;
      char*  old;
      size_t old_len;
      char*  new;
      size_t new_len;
  
      /* Create XDS context. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL)
  	{
  	printf("Failed to initialize XDS context.\n");
  	return 1;
  	}
  
      /* Register the dummy callback under multiple names. */
  
      if (xds_register(xds, "text", &dummy_engine, (void*)42) != XDS_OK)
  	{
  	printf("Failed to register my encoding engine.\n");
  	return 1;
  	}
  
      /* Encode something, then flush the buffer by calling
         xds_getbuffer(), then encode something new and verify that the
         old buffer hasn't ben overwritten and that the new one contains
         the correct string. */
  
      if (xds_encode(xds, "text text") != XDS_OK)
  	{
  	printf("xds_encode() failed!");
  	return 1;
  	}
      if (xds_getbuffer(xds, XDS_GIFT, (void**)&old, &old_len) != XDS_OK)
  	{
  	printf("xds_getbuffer() failed for the first buffer!");
  	return 1;
  	}
      if (xds_encode(xds, "text") != XDS_OK)
  	{
  	printf("xds_encode() failed!");
  	return 1;
  	}
      if (xds_getbuffer(xds, XDS_GIFT, (void**)&new, &new_len) != XDS_OK)
  	{
  	printf("xds_getbuffer() failed for the second buffer!");
  	return 1;
  	}
      if ((strcmp(old, "Hallo!Hallo!") != 0 || old_len != 12) &&
  	(strcmp(new, "Hallo!") != 0 || new_len != 6))
  	{
  	printf("xds_encode() did not yield the expected result.\n");
  	return 1;
  	}
      free(old);
      free(new);
  
      /* Encode somthing, then get the buffer via XDS_LOAN and verify
         the contents. Encode something new and compare the new content
         with what we expect. */
  
      if (xds_encode(xds, "text text") != XDS_OK)
  	{
  	printf("xds_encode() failed!");
  	return 1;
  	}
      if (xds_getbuffer(xds, XDS_LOAN, (void**)&old, &old_len) != XDS_OK)
  	{
  	printf("xds_getbuffer() failed for the first buffer!");
  	return 1;
  	}
      if (strcmp(old, "Hallo!Hallo!") != 0 || old_len != 12)
  	{
  	printf("xds_encode() did not yield the expected result.\n");
  	return 1;
  	}
      if (xds_encode(xds, "text") != XDS_OK)
  	{
  	printf("xds_encode() failed!");
  	return 1;
  	}
      if (xds_getbuffer(xds, XDS_LOAN, (void**)&new, &new_len) != XDS_OK)
  	{
  	printf("xds_getbuffer() failed for the second buffer!");
  	return 1;
  	}
      if (old != new)
  	{
  	printf("xds_encode() allocated a new buffer even though we used XDS_LOAN.\n");
  	return 1;
  	}
      if (strcmp(new, "Hallo!") != 0 || new_len != 6)
  	{
  	printf("xds_encode() did not yield the expected result.\n");
  	return 1;
  	}
  
      /* Clean up. */
  
      xds_destroy(xds);
  
      /* Everything went fine. */
  
      return 0;
      }

From ossp-cvs-owner@ossp.org  Mon Jul  9 19:17:04 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f69HH3j68524; Mon, 9 Jul 2001 19:17:03 +0200 (CEST)
Date: Mon, 9 Jul 2001 19:17:03 +0200 (CEST)
Message-Id: <200107091717.f69HH3j68524@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests xds-encode.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   09-Jul-2001 19:17:03
  Branch: HEAD                             Handle: 2001070918170200

  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            xds-encode.c

  Log:
    Implemented test suite for xds_encode().

  Summary:
    Revision    Changes     Path
    1.2         +19 -49     ossp-pkg/srpc/libxds/regression-tests/xds-encode.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/xds-encode.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xds-encode.c
  --- ossp-pkg/srpc/libxds/regression-tests/xds-encode.c	2001/07/08 16:02:56	1.1
  +++ ossp-pkg/srpc/libxds/regression-tests/xds-encode.c	2001/07/09 17:17:02	1.2
  @@ -50,78 +50,48 @@
   	}
       if (buffer_size == 0)
   	{
  -	printf("Buffer size passed to engine is NULL.\n");
  +	printf("Buffer size passed to engine is zero!\n");
   	exit(1);
   	}
  -    return 0;
  +    strncpy(buffer, "Hallo ", buffer_size);
  +    return 6;
       }
   
   int main()
       {
       xds_t* xds;
  -    size_t i;
   
  -    /* Create contexts for encoding and decoding. */
  +    /* Create XDS context. */
   
       xds = xds_init(XDS_ENCODE);
       if (xds == NULL)
  -	    {
  -	    printf("Failed to initialize XDS context.\n");
  -	    return 1;
  -	    }
  -
  -    /* Register the dummy callback under multiple names. */
  -
  -    if (xds_register(xds, "foo", &dummy_engine, (void*)42) != XDS_OK)
  -	{
  -	printf("Failed to register engine for 'foo'.\n");
  -	return 1;
  -	}
  -    if (xds_register(xds, "bar", &dummy_engine, (void*)42) != XDS_OK)
   	{
  -	printf("Failed to register engine for 'bar'.\n");
  +	printf("Failed to initialize XDS context.\n");
   	return 1;
   	}
  -    if (xds_register(xds, "zarah", &dummy_engine, (void*)42) != XDS_OK)
  -	{
  -	printf("Failed to register engine for 'zarah'.\n");
  -	return 1;
  -	}
  -    if (xds_register(xds, "caesar", &dummy_engine, (void*)42) != XDS_OK)
  -	{
  -	printf("Failed to register engine for 'caesar'.\n");
  -	return 1;
  -	}
  -    if (xds_register(xds, "claus", &dummy_engine, (void*)42) != XDS_OK)
  -	{
  -	printf("Failed to register engine for 'claus'.\n");
  -	return 1;
  -	}
  -    if (xds_register(xds, "heinz", &dummy_engine, (void*)42) != XDS_OK)
  +
  +    /* Register the dummy callback under multiple names. */
  +
  +    if (xds_register(xds, "int", &dummy_engine, (void*)42) != XDS_OK ||
  +	xds_register(xds, "float", &dummy_engine, (void*)42) != XDS_OK ||
  +	xds_register(xds, "double", &dummy_engine, (void*)42) != XDS_OK ||
  +	xds_register(xds, "text", &dummy_engine, (void*)42) != XDS_OK)
   	{
  -	printf("Failed to register engine for 'heinz'.\n");
  +	printf("Failed to register my encoding engines.\n");
   	return 1;
   	}
   
  -    /* Register the callback again, overwriting an existing entry. */
  +    /* Let's go and encode something. */
   
  -    if (xds_register(xds, "claus", &dummy_engine, (void*)42) != XDS_OK)
  +    if (xds_encode(xds, "int:text    double double float") != XDS_OK)
   	{
  -	printf("Failed to re-register engine for 'claus'.\n");
  +	printf("xds_encode() failed!");
   	return 1;
   	}
  -
  -    /* Ensure that everything is in alphabetical order. */
  -
  -    for (i = 1; i < xds->engines_len; ++i)
  +    if (strcmp(xds->buffer, "Hallo Hallo Hallo Hallo Hallo ") != 0)
   	{
  -	assert(xds->engines[i-1].name != NULL);
  -	assert(xds->engines[i].name != NULL);
  -	if (strcmp(xds->engines[i-1].name, xds->engines[i].name) >= 0)
  -	    {
  -	    printf("xds->engines is not in alphabetical order!\n");
  -	    exit(1);
  -	    }
  +	printf("xds_encode() did not yield the expected result.\n");
  +	return 1;
   	}
   
       /* Clean up. */

From ossp-cvs-owner@ossp.org  Mon Jul  9 19:17:35 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f69HHXY68592; Mon, 9 Jul 2001 19:17:33 +0200 (CEST)
Date: Mon, 9 Jul 2001 19:17:33 +0200 (CEST)
Message-Id: <200107091717.f69HHXY68592@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests xds-register.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   09-Jul-2001 19:17:33
  Branch: HEAD                             Handle: 2001070918173300

  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            xds-register.c

  Log:
    Improved the test suite.

  Summary:
    Revision    Changes     Path
    1.4         +30 -32     ossp-pkg/srpc/libxds/regression-tests/xds-register.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/xds-register.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xds-register.c
  --- ossp-pkg/srpc/libxds/regression-tests/xds-register.c	2001/07/08 15:58:14	1.3
  +++ ossp-pkg/srpc/libxds/regression-tests/xds-register.c	2001/07/09 17:17:33	1.4
  @@ -38,6 +38,16 @@
   
   int main()
       {
  +    const char* test_names[] =
  +	{
  +	"foo",
  +	"bar",
  +	"zarah",
  +	"caesar",
  +	"claus",
  +	"heinz",
  +	};
  +    size_t test_names_len = sizeof(test_names) / sizeof(char*);
       xds_t* xds;
       size_t i;
   
  @@ -50,37 +60,24 @@
   	return 1;
   	}
   
  -    /* Register the dummy callback under multiple names. */
  +    /* Register the dummy callback under an invalid name to see
  +       whether the routine fails correctly. */
   
  -    if (xds_register(xds, "foo", &dummy_engine, NULL) != XDS_OK)
  -	{
  -	printf("Failed to register engine for 'foo'.\n");
  -	return 1;
  -	}
  -    if (xds_register(xds, "bar", &dummy_engine, NULL) != XDS_OK)
  -	{
  -	printf("Failed to register engine for 'bar'.\n");
  -	return 1;
  -	}
  -    if (xds_register(xds, "zarah", &dummy_engine, NULL) != XDS_OK)
  -	{
  -	printf("Failed to register engine for 'zarah'.\n");
  -	return 1;
  -	}
  -    if (xds_register(xds, "caesar", &dummy_engine, NULL) != XDS_OK)
  +    if (xds_register(xds, "abcdefh1230#", &dummy_engine, NULL) != XDS_ERR_INVALID_ARG)
   	{
  -	printf("Failed to register engine for 'caesar'.\n");
  +	printf("xds_register() illegally accepted an invalid name for the engine.\n");
   	return 1;
   	}
  -    if (xds_register(xds, "claus", &dummy_engine, NULL) != XDS_OK)
  -	{
  -	printf("Failed to register engine for 'claus'.\n");
  -	return 1;
  -	}
  -    if (xds_register(xds, "heinz", &dummy_engine, NULL) != XDS_OK)
  +
  +    /* Register the dummy callback under multiple names. */
  +
  +    for(i = 0; i < test_names_len; ++i)
   	{
  -	printf("Failed to register engine for 'heinz'.\n");
  -	return 1;
  +	if (xds_register(xds, test_names[i], &dummy_engine, NULL) != XDS_OK)
  +	    {
  +	    printf("Failed to register engine for '%s'.\n", test_names[i]);
  +	    return 1;
  +	    }
   	}
   
       /* Register the callback again, overwriting an existing entry. */
  @@ -114,25 +111,26 @@
   
       /* Remove an entry from the middle. */
   
  -    if (xds_unregister(xds, "heinz") != XDS_OK)
  +    if (xds_unregister(xds, test_names[test_names_len/2]) != XDS_OK)
   	{
  -	printf("xds_unregister() failed to remove 'heinz'.\n");
  +	printf("xds_unregister() failed to remove '%s'.\n", test_names[test_names_len/2]);
   	exit(1);
   	}
   
       /* Remove the last entry. */
   
  -    if (xds_unregister(xds, "zarah") != XDS_OK)
  +    assert(test_names_len > 0);
  +    if (xds_unregister(xds, test_names[test_names_len-1]) != XDS_OK)
   	{
  -	printf("xds_unregister() failed to remove 'bar'.\n");
  +	printf("xds_unregister() failed to remove '%s'.\n", test_names[test_names_len-1]);
   	exit(1);
   	}
   
       /* Remove the first entry. */
   
  -    if (xds_unregister(xds, "bar") != XDS_OK)
  +    if (xds_unregister(xds, test_names[0]) != XDS_OK)
   	{
  -	printf("xds_unregister() failed to remove 'bar'.\n");
  +	printf("xds_unregister() failed to remove '%s'.\n", test_names[0]);
   	exit(1);
   	}
   

From ossp-cvs-owner@ossp.org  Mon Jul  9 19:18:22 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f69HILc68672; Mon, 9 Jul 2001 19:18:21 +0200 (CEST)
Date: Mon, 9 Jul 2001 19:18:21 +0200 (CEST)
Message-Id: <200107091718.f69HILc68672@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds destroy.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   09-Jul-2001 19:18:21
  Branch: HEAD                             Handle: 2001070918182000

  Modified files:
    ossp-pkg/srpc/libxds    destroy.c

  Log:
    xds_destroy() will now free() an allocated buffer in the xds_context
    structure.

  Summary:
    Revision    Changes     Path
    1.6         +4  -0      ossp-pkg/srpc/libxds/destroy.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/destroy.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 destroy.c
  --- ossp-pkg/srpc/libxds/destroy.c	2001/07/08 15:22:00	1.5
  +++ ossp-pkg/srpc/libxds/destroy.c	2001/07/09 17:18:20	1.6
  @@ -39,6 +39,10 @@
   
       /* Free allocated memory. */
   
  +    assert(xds->buffer != NULL || (xds->buffer_capacity == 0 && xds->buffer_len == 0));
  +    if (xds->buffer != NULL && xds->we_own_buffer)
  +	free(xds->buffer);
  +
       assert(xds->engines != NULL || xds->engines_capacity == 0);
       if (xds->engines != NULL)
   	free(xds->engines);

From ossp-cvs-owner@ossp.org  Mon Jul  9 19:19:28 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f69HJRH68770; Mon, 9 Jul 2001 19:19:27 +0200 (CEST)
Date: Mon, 9 Jul 2001 19:19:27 +0200 (CEST)
Message-Id: <200107091719.f69HJRH68770@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xds.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   09-Jul-2001 19:19:27
  Branch: HEAD                             Handle: 2001070918192600

  Modified files:
    ossp-pkg/srpc/libxds    xds.h

  Log:
    - Added XDS_ERR_INVALID_MODE define.
    
    - Renamed argument in the xds_getbuffer() prototype from buffer_size
      to buffer_len for consistency.

  Summary:
    Revision    Changes     Path
    1.14        +4  -3      ossp-pkg/srpc/libxds/xds.h
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xds.h
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 xds.h
  --- ossp-pkg/srpc/libxds/xds.h	2001/07/04 15:25:38	1.13
  +++ ossp-pkg/srpc/libxds/xds.h	2001/07/09 17:19:26	1.14
  @@ -40,7 +40,8 @@
       XDS_ERR_OVERFLOW       = -2,
       XDS_ERR_INVALID_ARG    = -3,
       XDS_ERR_TYPE_MISMATCH  = -4,
  -    XDS_ERR_UNKNOWN_ENGINE = -5
  +    XDS_ERR_UNKNOWN_ENGINE = -5,
  +    XDS_ERR_INVALID_MODE   = -6
       };
   typedef enum { XDS_ENCODE, XDS_DECODE } xds_mode_t;
   typedef enum { XDS_LOAN,   XDS_GIFT   } xds_scope_t;
  @@ -60,8 +61,8 @@
   int xds_register(xds_t* xds, const char* name, xds_engine_t engine, void* engine_context);
   int xds_unregister(xds_t* xds, const char* name);
   
  -int xds_setbuffer(xds_t* xds, xds_scope_t flag, void*  buffer, size_t  buffer_size);
  -int xds_getbuffer(xds_t* xds, xds_scope_t flag, void** buffer, size_t* buffer_size);
  +int xds_setbuffer(xds_t* xds, xds_scope_t flag, void*  buffer, size_t  buffer_len);
  +int xds_getbuffer(xds_t* xds, xds_scope_t flag, void** buffer, size_t* buffer_len);
   
   int xds_encode(xds_t* xds, const char* fmt, ...);
   int xds_decode(xds_t* xds, const char* fmt, ...);

From ossp-cvs-owner@ossp.org  Mon Jul  9 19:20:00 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f69HJx568844; Mon, 9 Jul 2001 19:19:59 +0200 (CEST)
Date: Mon, 9 Jul 2001 19:19:59 +0200 (CEST)
Message-Id: <200107091719.f69HJx568844@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds encode.c vencode.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   09-Jul-2001 19:19:59
  Branch: HEAD                             Handle: 2001070918195800

  Modified files:
    ossp-pkg/srpc/libxds    encode.c vencode.c

  Log:
    Implemented xds_encode() and xds_vencode().

  Summary:
    Revision    Changes     Path
    1.2         +6  -1      ossp-pkg/srpc/libxds/encode.c
    1.2         +132 -2     ossp-pkg/srpc/libxds/vencode.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/encode.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 encode.c
  --- ossp-pkg/srpc/libxds/encode.c	2001/07/04 15:58:51	1.1
  +++ ossp-pkg/srpc/libxds/encode.c	2001/07/09 17:19:58	1.2
  @@ -29,5 +29,10 @@
   
   int xds_encode(xds_t* xds, const char* fmt, ...)
       {
  -    return XDS_ERR_INVALID_ARG;
  +    int rc;
  +    va_list args;
  +    va_start(args, fmt);
  +    rc = xds_vencode(xds, fmt, args);
  +    va_end(args);
  +    return rc;
       }
  Index: ossp-pkg/srpc/libxds/vencode.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 vencode.c
  --- ossp-pkg/srpc/libxds/vencode.c	2001/07/04 15:58:51	1.1
  +++ ossp-pkg/srpc/libxds/vencode.c	2001/07/09 17:19:58	1.2
  @@ -25,9 +25,139 @@
      SUCH DAMAGE.
   */
   
  +#include <stdio.h>		/* delete me */
  +
  +#include <string.h>
  +#include <ctype.h>
  +#include <assert.h>
   #include "internal.h"
   
  -int xds_vencode(xds_t* xds, const char* fmt, va_list args)
  +int xds_vencode(xds_t* xds, const char* fmt_arg, va_list args)
       {
  -    return XDS_ERR_INVALID_ARG;
  +    char* name;
  +    char* p;
  +    char* fmt;
  +    int rc;
  +
  +    /* Sanity checks. */
  +
  +    assert(xds != NULL);
  +    assert(fmt_arg != NULL);
  +    assert(xds->mode == XDS_ENCODE);
  +    if (xds == NULL || fmt_arg == NULL)
  +	return XDS_ERR_INVALID_ARG;
  +    if (xds->mode != XDS_ENCODE)
  +	return XDS_ERR_INVALID_MODE;
  +
  +    /* Ensure we have a buffer allocated ready for use. */
  +
  +    if (xds->buffer == NULL)
  +	{			/* allocate a new buffer */
  +	int rc = xds_set_capacity((void**)&xds->buffer,
  +				  &xds->buffer_capacity,
  +				  XDS_INITIAL_BUFFER_CAPACITY,
  +				  sizeof(char),
  +				  XDS_INITIAL_BUFFER_CAPACITY);
  +	assert(rc == XDS_OK || rc == XDS_ERR_NO_MEM);
  +	if (rc != XDS_OK)
  +	    return rc;
  +	printf("Enlarged buffer to %d byte.\n", xds->buffer_capacity);
  +	xds->buffer_len    = 0;
  +	xds->we_own_buffer = (1==1);
  +	}
  +
  +    /* Ensure the buffer has free space. */
  +
  +    assert(xds->buffer_len <= xds->buffer_capacity);
  +    if (xds->buffer_len == xds->buffer_capacity)
  +	{
  +	if (xds->we_own_buffer)
  +	    {
  +	    int rc = xds_set_capacity((void**)&xds->buffer,
  +				      &xds->buffer_capacity,
  +				      xds->buffer_len + 1,
  +				      sizeof(char),
  +				      XDS_INITIAL_BUFFER_CAPACITY);
  +	    assert(rc == XDS_OK || rc == XDS_ERR_NO_MEM);
  +	    if (rc != XDS_OK)
  +		return rc;
  +	    printf("Enlarged buffer to %d byte.\n", xds->buffer_capacity);
  +	    }
  +	else
  +	    return XDS_ERR_OVERFLOW;
  +	}
  +
  +    /* Iterate through the items in the format string and execute the
  +       apropriate engines. */
  +
  +    fmt = p = strdup(fmt_arg);
  +    if (fmt == NULL)
  +	return XDS_ERR_NO_MEM;
  +    for(name = p; *p != '\0'; name = p)
  +	{
  +	while(isalnum(*p) || *p == '-' || *p == '_')
  +	    ++p;
  +	*p++ = '\0';
  +
  +	if (strlen(name) > 0)
  +	    {
  +	    size_t pos;
  +	    if (xds_find_engine(xds->engines, xds->engines_len, name, &pos))
  +		{
  +		int restart_engine;
  +		do
  +		    {
  +		    printf("Executing engine '%s' ...\n", name);
  +		    rc = (*xds->engines[pos].engine)(xds,
  +						     xds->engines[pos].context,
  +						     xds->buffer + xds->buffer_len,
  +						     xds->buffer_capacity - xds->buffer_len,
  +						     args);
  +		    if (rc < 0)
  +			goto leave;
  +		    else if (rc >= xds->buffer_capacity - xds->buffer_len)
  +			{		/* enlarge buffer */
  +			int rc2;
  +
  +			if (!xds->we_own_buffer)
  +			    {
  +			    rc = XDS_ERR_OVERFLOW;
  +			    goto leave;
  +			    }
  +
  +			rc2 = xds_set_capacity((void**)&xds->buffer,
  +					       &xds->buffer_capacity,
  +					       xds->buffer_capacity + rc,
  +					       sizeof(char),
  +					       XDS_INITIAL_BUFFER_CAPACITY);
  +			assert(rc2 == XDS_OK || rc2 == XDS_ERR_NO_MEM);
  +			if (rc2 != XDS_OK)
  +			    {
  +			    rc = rc2;
  +			    goto leave;
  +			    }
  +			restart_engine = (1==1);
  +			printf("Enlarged buffer to %d byte.\n", xds->buffer_capacity);
  +			}
  +		    else
  +			{
  +			restart_engine = (1!=1);
  +			xds->buffer_len += rc;
  +			}
  +		    }
  +		while (restart_engine);
  +		}
  +	    else
  +		{
  +		rc = XDS_ERR_UNKNOWN_ENGINE;
  +		goto leave;
  +		}
  +	    }
  +	}
  +    rc = XDS_OK;
  +
  +    /* Clean up and leave. */
  +  leave:
  +    free(fmt);
  +    return rc;
       }

From ossp-cvs-owner@ossp.org  Mon Jul  9 19:20:57 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f69HKuP68960; Mon, 9 Jul 2001 19:20:56 +0200 (CEST)
Date: Mon, 9 Jul 2001 19:20:56 +0200 (CEST)
Message-Id: <200107091720.f69HKuP68960@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds setbuffer.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   09-Jul-2001 19:20:56
  Branch: HEAD                             Handle: 2001070918205600

  Modified files:
    ossp-pkg/srpc/libxds    setbuffer.c

  Log:
    Renamed argument in the xds_getbuffer() prototype from buffer_size to
    buffer_len for consistency.

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/srpc/libxds/setbuffer.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/setbuffer.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 setbuffer.c
  --- ossp-pkg/srpc/libxds/setbuffer.c	2001/07/04 15:58:51	1.1
  +++ ossp-pkg/srpc/libxds/setbuffer.c	2001/07/09 17:20:56	1.2
  @@ -27,7 +27,7 @@
   
   #include "internal.h"
   
  -int xds_setbuffer(xds_t* xds, xds_scope_t flag, void*  buffer, size_t  buffer_size)
  +int xds_setbuffer(xds_t* xds, xds_scope_t flag, void*  buffer, size_t  buffer_len)
       {
       return XDS_ERR_INVALID_ARG;
       }

From ossp-cvs-owner@ossp.org  Mon Jul  9 19:21:37 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f69HLbk69310; Mon, 9 Jul 2001 19:21:37 +0200 (CEST)
Date: Mon, 9 Jul 2001 19:21:37 +0200 (CEST)
Message-Id: <200107091721.f69HLbk69310@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds internal.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   09-Jul-2001 19:21:37
  Branch: HEAD                             Handle: 2001070918213600

  Modified files:
    ossp-pkg/srpc/libxds    internal.h

  Log:
    Added XDS_INITIAL_BUFFER_CAPACITY define.

  Summary:
    Revision    Changes     Path
    1.5         +2  -1      ossp-pkg/srpc/libxds/internal.h
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/internal.h
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 internal.h
  --- ossp-pkg/srpc/libxds/internal.h	2001/07/08 15:28:51	1.4
  +++ ossp-pkg/srpc/libxds/internal.h	2001/07/09 17:21:36	1.5
  @@ -32,7 +32,8 @@
   
   #include "xds.h"
   
  -#define XDS_INITIAL_ENGINES_CAPACITY 32
  +#define XDS_INITIAL_BUFFER_CAPACITY  512
  +#define XDS_INITIAL_ENGINES_CAPACITY  32
   
   typedef struct
       {

From ossp-cvs-owner@ossp.org  Mon Jul  9 19:22:05 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f69HM4s69380; Mon, 9 Jul 2001 19:22:04 +0200 (CEST)
Date: Mon, 9 Jul 2001 19:22:04 +0200 (CEST)
Message-Id: <200107091722.f69HM4s69380@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds getbuffer.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   09-Jul-2001 19:22:04
  Branch: HEAD                             Handle: 2001070918220300

  Modified files:
    ossp-pkg/srpc/libxds    getbuffer.c

  Log:
    Implemented xds_getbuffer().

  Summary:
    Revision    Changes     Path
    1.2         +24 -2      ossp-pkg/srpc/libxds/getbuffer.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/getbuffer.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 getbuffer.c
  --- ossp-pkg/srpc/libxds/getbuffer.c	2001/07/04 15:58:51	1.1
  +++ ossp-pkg/srpc/libxds/getbuffer.c	2001/07/09 17:22:03	1.2
  @@ -25,9 +25,31 @@
      SUCH DAMAGE.
   */
   
  +#include "assert.h"
   #include "internal.h"
   
  -int xds_getbuffer(xds_t* xds, xds_scope_t flag, void** buffer, size_t* buffer_size)
  +int xds_getbuffer(xds_t* xds, xds_scope_t flag, void** buffer, size_t* buffer_len)
       {
  -    return XDS_ERR_INVALID_ARG;
  +    /* Sanity checks. */
  +
  +    assert(xds != NULL);
  +    assert(flag == XDS_GIFT || flag == XDS_LOAN);
  +    assert(buffer != NULL);
  +    assert(buffer_len != NULL);
  +    if (xds == NULL || buffer == NULL || buffer_len == NULL || (flag != XDS_GIFT && flag != XDS_LOAN))
  +	return XDS_ERR_INVALID_ARG;
  +
  +    /* Return the buffer to the caller. */
  +
  +    *buffer = xds->buffer;
  +    *buffer_len = xds->buffer_len;
  +    if (flag == XDS_GIFT)
  +	{
  +	xds->buffer = NULL;
  +	xds->buffer_capacity = xds->buffer_len = 0;
  +	}
  +    else
  +	xds->buffer_len = 0;
  +
  +    return XDS_OK;
       }

From ossp-cvs-owner@ossp.org  Mon Jul  9 19:22:35 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f69HMYX69445; Mon, 9 Jul 2001 19:22:34 +0200 (CEST)
Date: Mon, 9 Jul 2001 19:22:34 +0200 (CEST)
Message-Id: <200107091722.f69HMYX69445@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds set-capacity.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   09-Jul-2001 19:22:34
  Branch: HEAD                             Handle: 2001070918223400

  Modified files:
    ossp-pkg/srpc/libxds    set-capacity.c

  Log:
    Removed debug output.

  Summary:
    Revision    Changes     Path
    1.2         +0  -4      ossp-pkg/srpc/libxds/set-capacity.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/set-capacity.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 set-capacity.c
  --- ossp-pkg/srpc/libxds/set-capacity.c	2001/07/08 15:20:34	1.1
  +++ ossp-pkg/srpc/libxds/set-capacity.c	2001/07/09 17:22:34	1.2
  @@ -25,8 +25,6 @@
      SUCH DAMAGE.
   */
   
  -#include <stdio.h>		/* delete me */
  -
   #include <stdlib.h>
   #include <assert.h>
   #include "internal.h"
  @@ -54,8 +52,6 @@
   	;
   
       /* Allocate the array and store the new values. */
  -
  -    printf("Reallocating array with capacity %d; old value was %d.\n", size, *array_capacity);
   
       buf = realloc(*array, size * elem_size);
       if (buf == NULL)

From ossp-cvs-owner@ossp.org  Mon Jul  9 19:23:40 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f69HNdB69545; Mon, 9 Jul 2001 19:23:39 +0200 (CEST)
Date: Mon, 9 Jul 2001 19:23:39 +0200 (CEST)
Message-Id: <200107091723.f69HNdB69545@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds register.c unregister.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   09-Jul-2001 19:23:39
  Branch: HEAD                             Handle: 2001070918233800

  Modified files:
    ossp-pkg/srpc/libxds    register.c unregister.c

  Log:
    Added test that return XDS_ERR_INVALID_ARG if the name argument
    contains illegal characters. Allowed are: "[a-zA-Z0-9_-]".

  Summary:
    Revision    Changes     Path
    1.6         +6  -0      ossp-pkg/srpc/libxds/register.c
    1.4         +6  -0      ossp-pkg/srpc/libxds/unregister.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/register.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 register.c
  --- ossp-pkg/srpc/libxds/register.c	2001/07/08 15:37:13	1.5
  +++ ossp-pkg/srpc/libxds/register.c	2001/07/09 17:23:38	1.6
  @@ -27,6 +27,7 @@
   
   #include <stdlib.h>
   #include <string.h>
  +#include <ctype.h>
   #include <assert.h>
   #include "internal.h"
   
  @@ -41,6 +42,11 @@
       assert(engine != NULL);
       if (xds == NULL || name == NULL || engine == NULL)
   	return XDS_ERR_INVALID_ARG;
  +    for(pos = 0; name[pos] != '\0'; ++pos)
  +	{
  +	if (!isalnum(name[pos]) && name[pos] != '-' && name[pos] != '_')
  +	    return XDS_ERR_INVALID_ARG;
  +	}
   
       /* Copy the name argument into our own memory. */
   
  Index: ossp-pkg/srpc/libxds/unregister.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 unregister.c
  --- ossp-pkg/srpc/libxds/unregister.c	2001/07/08 16:01:37	1.3
  +++ ossp-pkg/srpc/libxds/unregister.c	2001/07/09 17:23:38	1.4
  @@ -27,6 +27,7 @@
   
   #include <stdlib.h>
   #include <string.h>
  +#include <ctype.h>
   #include <assert.h>
   #include "internal.h"
   
  @@ -41,6 +42,11 @@
       assert(name != NULL);
       if (xds == NULL || name == NULL)
   	return XDS_ERR_INVALID_ARG;
  +    for(pos = 0; name[pos] != '\0'; ++pos)
  +	{
  +	if (!isalnum(name[pos]) && name[pos] != '-' && name[pos] != '_')
  +	    return XDS_ERR_INVALID_ARG;
  +	}
   
       /* Find the entry we're supposed to delete. */
   

From ossp-cvs-owner@ossp.org  Mon Jul  9 19:36:34 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f69HaYg71497; Mon, 9 Jul 2001 19:36:34 +0200 (CEST)
Date: Mon, 9 Jul 2001 19:36:34 +0200 (CEST)
Message-Id: <200107091736.f69HaYg71497@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds vencode.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   09-Jul-2001 19:36:33
  Branch: HEAD                             Handle: 2001070918363300

  Modified files:
    ossp-pkg/srpc/libxds    vencode.c

  Log:
    Fixed a bug in xds_vencode() that would cause the routine not to
    recognize the end of the fmt string correctly.

  Summary:
    Revision    Changes     Path
    1.3         +4  -1      ossp-pkg/srpc/libxds/vencode.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/vencode.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 vencode.c
  --- ossp-pkg/srpc/libxds/vencode.c	2001/07/09 17:19:58	1.2
  +++ ossp-pkg/srpc/libxds/vencode.c	2001/07/09 17:36:33	1.3
  @@ -97,7 +97,10 @@
   	{
   	while(isalnum(*p) || *p == '-' || *p == '_')
   	    ++p;
  -	*p++ = '\0';
  +	if (*p)
  +	    *p++ = '\0';
  +	else
  +	    *p = '\0';
   
   	if (strlen(name) > 0)
   	    {

From ossp-cvs-owner@ossp.org  Mon Jul  9 19:44:31 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f69HiUb72338; Mon, 9 Jul 2001 19:44:30 +0200 (CEST)
Date: Mon, 9 Jul 2001 19:44:30 +0200 (CEST)
Message-Id: <200107091744.f69HiUb72338@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds vencode.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   09-Jul-2001 19:44:30
  Branch: HEAD                             Handle: 2001070918442900

  Modified files:
    ossp-pkg/srpc/libxds    vencode.c

  Log:
    Removed two instances where a local definition of "rc" shadowed an
    earlier one in the routine.

  Summary:
    Revision    Changes     Path
    1.4         +10 -10     ossp-pkg/srpc/libxds/vencode.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/vencode.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 vencode.c
  --- ossp-pkg/srpc/libxds/vencode.c	2001/07/09 17:36:33	1.3
  +++ ossp-pkg/srpc/libxds/vencode.c	2001/07/09 17:44:29	1.4
  @@ -53,11 +53,11 @@
   
       if (xds->buffer == NULL)
   	{			/* allocate a new buffer */
  -	int rc = xds_set_capacity((void**)&xds->buffer,
  -				  &xds->buffer_capacity,
  -				  XDS_INITIAL_BUFFER_CAPACITY,
  -				  sizeof(char),
  -				  XDS_INITIAL_BUFFER_CAPACITY);
  +	rc = xds_set_capacity((void**)&xds->buffer,
  +			      &xds->buffer_capacity,
  +			      XDS_INITIAL_BUFFER_CAPACITY,
  +			      sizeof(char),
  +			      XDS_INITIAL_BUFFER_CAPACITY);
   	assert(rc == XDS_OK || rc == XDS_ERR_NO_MEM);
   	if (rc != XDS_OK)
   	    return rc;
  @@ -73,11 +73,11 @@
   	{
   	if (xds->we_own_buffer)
   	    {
  -	    int rc = xds_set_capacity((void**)&xds->buffer,
  -				      &xds->buffer_capacity,
  -				      xds->buffer_len + 1,
  -				      sizeof(char),
  -				      XDS_INITIAL_BUFFER_CAPACITY);
  +	    rc = xds_set_capacity((void**)&xds->buffer,
  +				  &xds->buffer_capacity,
  +				  xds->buffer_len + 1,
  +				  sizeof(char),
  +				  XDS_INITIAL_BUFFER_CAPACITY);
   	    assert(rc == XDS_OK || rc == XDS_ERR_NO_MEM);
   	    if (rc != XDS_OK)
   		return rc;

From ossp-cvs-owner@ossp.org  Mon Jul  9 19:44:49 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f69Himq72402; Mon, 9 Jul 2001 19:44:48 +0200 (CEST)
Date: Mon, 9 Jul 2001 19:44:48 +0200 (CEST)
Message-Id: <200107091744.f69Himq72402@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile ossp-pkg/srpc/libxds/regress...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   09-Jul-2001 19:44:48
  Branch: HEAD                             Handle: 2001070918444700

  Modified files:
    ossp-pkg/srpc/libxds    Makefile
    ossp-pkg/srpc/libxds/regression-tests
                            Makefile

  Log:
    Added more aggressive warning flags.

  Summary:
    Revision    Changes     Path
    1.13        +1  -1      ossp-pkg/srpc/libxds/Makefile
    1.8         +1  -1      ossp-pkg/srpc/libxds/regression-tests/Makefile
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 Makefile
  --- ossp-pkg/srpc/libxds/Makefile	2001/07/08 15:36:29	1.12
  +++ ossp-pkg/srpc/libxds/Makefile	2001/07/09 17:44:47	1.13
  @@ -5,7 +5,7 @@
   AR		= ar
   RANLIB 		= ranlib
   
  -WARNFLAGS	= -Wall -ansi -pedantic
  +WARNFLAGS	= -Wall -ansi -pedantic -Wshadow -Wpointer-arith -Wcast-align -Winline -Wmissing-prototypes -Wmissing-declarations -Wnested-externs
   OPTFLAGS	= -O3 -pipe
   
   CPPFLAGS	= -D_GNU_SOURCE
  Index: ossp-pkg/srpc/libxds/regression-tests/Makefile
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 Makefile
  --- ossp-pkg/srpc/libxds/regression-tests/Makefile	2001/07/09 17:16:30	1.7
  +++ ossp-pkg/srpc/libxds/regression-tests/Makefile	2001/07/09 17:44:47	1.8
  @@ -2,7 +2,7 @@
   
   CC		= gcc
   
  -WARNFLAGS	= -Wall -ansi -pedantic -Werror
  +WARNFLAGS	= -Wall -ansi -pedantic -Wshadow -Wpointer-arith -Wcast-align -Winline -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Werror
   OPTFLAGS	= -O3 -pipe
   CPPFLAGS	=
   CFLAGS		=

From ossp-cvs-owner@ossp.org  Mon Jul  9 19:50:59 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f69How773002; Mon, 9 Jul 2001 19:50:58 +0200 (CEST)
Date: Mon, 9 Jul 2001 19:50:58 +0200 (CEST)
Message-Id: <200107091750.f69How773002@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests .run-tests
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   09-Jul-2001 19:50:58
  Branch: HEAD                             Handle: 2001070918505800

  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            .run-tests

  Log:
    Enhanced portability.

  Summary:
    Revision    Changes     Path
    1.5         +5  -5      ossp-pkg/srpc/libxds/regression-tests/.run-tests
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/.run-tests
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 .run-tests
  --- ossp-pkg/srpc/libxds/regression-tests/.run-tests	2001/07/08 15:57:27	1.4
  +++ ossp-pkg/srpc/libxds/regression-tests/.run-tests	2001/07/09 17:50:58	1.5
  @@ -14,24 +14,24 @@
   for suite in $*; do
       tmp="${suite%%.exe}"
       echo -n "$tmp"
  -    currpos=$(($RESCOLUMN-${#tmp}))
  +    currpos=`expr $RESCOLUMN - ${#tmp}`
       while [ $currpos -gt 1 ]; do
   	echo -n "."
  -	currpos=$(($currpos-1))
  +	currpos=`expr $currpos - 1`
       done
       echo -n " "
  -    numTests=$(($numTests+1))
  +    numTests=`expr $numTests + 1`
       eval ./$suite >${suite%%.exe}.log 2>&1
       if [ $? -eq 0 ]; then
   	echo OK
       else
  -	numFails=$(($numFails+1))
  +	numFails=`expr $numFails + 1`
   	echo FAILED
       fi
   done
   
   echo
  -if [ $numFails -eq 0 ]; then
  +if [ $numFails -eq 15 ]; then
       echo "Summary: All tests succeeded."
       exit 0
   else

From ossp-cvs-owner@ossp.org  Mon Jul  9 19:55:55 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f69HtsX73664; Mon, 9 Jul 2001 19:55:54 +0200 (CEST)
Date: Mon, 9 Jul 2001 19:55:54 +0200 (CEST)
Message-Id: <200107091755.f69HtsX73664@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests .run-tests
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   09-Jul-2001 19:55:54
  Branch: HEAD                             Handle: 2001070918555400

  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            .run-tests

  Log:
    Enhanced portability even more. :-)

  Summary:
    Revision    Changes     Path
    1.6         +1  -1      ossp-pkg/srpc/libxds/regression-tests/.run-tests
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/.run-tests
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 .run-tests
  --- ossp-pkg/srpc/libxds/regression-tests/.run-tests	2001/07/09 17:50:58	1.5
  +++ ossp-pkg/srpc/libxds/regression-tests/.run-tests	2001/07/09 17:55:54	1.6
  @@ -14,7 +14,7 @@
   for suite in $*; do
       tmp="${suite%%.exe}"
       echo -n "$tmp"
  -    currpos=`expr $RESCOLUMN - ${#tmp}`
  +    currpos=`expr $RESCOLUMN - \( length $tmp \)`
       while [ $currpos -gt 1 ]; do
   	echo -n "."
   	currpos=`expr $currpos - 1`

From ossp-cvs-owner@ossp.org  Mon Jul  9 20:19:32 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f69IJVI76325; Mon, 9 Jul 2001 20:19:31 +0200 (CEST)
Date: Mon, 9 Jul 2001 20:19:31 +0200 (CEST)
Message-Id: <200107091819.f69IJVI76325@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests .run-tests
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   09-Jul-2001 20:19:31
  Branch: HEAD                             Handle: 2001070919193100

  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            .run-tests

  Log:
    Enhanced portability even more. Unfortunately, there're still some
    problems on Solaris, most notably the fact that the stupid bourne
    shell there doesn't know "echo -n".

  Summary:
    Revision    Changes     Path
    1.7         +2  -3      ossp-pkg/srpc/libxds/regression-tests/.run-tests
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/.run-tests
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 .run-tests
  --- ossp-pkg/srpc/libxds/regression-tests/.run-tests	2001/07/09 17:55:54	1.6
  +++ ossp-pkg/srpc/libxds/regression-tests/.run-tests	2001/07/09 18:19:31	1.7
  @@ -12,7 +12,7 @@
   echo "Running test suite:"
   
   for suite in $*; do
  -    tmp="${suite%%.exe}"
  +    tmp=`expr "${suite}" : '\(.*\)\.exe$'`
       echo -n "$tmp"
       currpos=`expr $RESCOLUMN - \( length $tmp \)`
       while [ $currpos -gt 1 ]; do
  @@ -21,8 +21,7 @@
       done
       echo -n " "
       numTests=`expr $numTests + 1`
  -    eval ./$suite >${suite%%.exe}.log 2>&1
  -    if [ $? -eq 0 ]; then
  +    if eval ./$suite >${tmp}.log 2>&1; then
   	echo OK
       else
   	numFails=`expr $numFails + 1`

From ossp-cvs-owner@ossp.org  Mon Jul  9 20:22:39 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f69IMbT77111; Mon, 9 Jul 2001 20:22:37 +0200 (CEST)
Date: Mon, 9 Jul 2001 20:22:37 +0200 (CEST)
Message-Id: <200107091822.f69IMbT77111@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests .run-tests
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   09-Jul-2001 20:22:37
  Branch: HEAD                             Handle: 2001070919223700

  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            .run-tests

  Log:
    Reverted the change of eval being called directly from "if" because
    that doesn't work on FreeBSD. Yuck.

  Summary:
    Revision    Changes     Path
    1.8         +8  -7      ossp-pkg/srpc/libxds/regression-tests/.run-tests
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/.run-tests
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 .run-tests
  --- ossp-pkg/srpc/libxds/regression-tests/.run-tests	2001/07/09 18:19:31	1.7
  +++ ossp-pkg/srpc/libxds/regression-tests/.run-tests	2001/07/09 18:22:37	1.8
  @@ -16,21 +16,22 @@
       echo -n "$tmp"
       currpos=`expr $RESCOLUMN - \( length $tmp \)`
       while [ $currpos -gt 1 ]; do
  -	echo -n "."
  -	currpos=`expr $currpos - 1`
  +        echo -n "."
  +        currpos=`expr $currpos - 1`
       done
       echo -n " "
       numTests=`expr $numTests + 1`
  -    if eval ./$suite >${tmp}.log 2>&1; then
  -	echo OK
  +    eval ./$suite >${suite%%.exe}.log 2>&1
  +    if [ $? -eq 0 ]; then
  +        echo OK
       else
  -	numFails=`expr $numFails + 1`
  -	echo FAILED
  +        numFails=`expr $numFails + 1`
  +        echo FAILED
       fi
   done
   
   echo
  -if [ $numFails -eq 15 ]; then
  +if [ $numFails -eq 0 ]; then
       echo "Summary: All tests succeeded."
       exit 0
   else

From ossp-cvs-owner@ossp.org  Mon Jul  9 20:27:27 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f69IRQw77715; Mon, 9 Jul 2001 20:27:26 +0200 (CEST)
Date: Mon, 9 Jul 2001 20:27:26 +0200 (CEST)
Message-Id: <200107091827.f69IRQw77715@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests .run-tests
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   09-Jul-2001 20:27:26
  Branch: HEAD                             Handle: 2001070919272600

  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            .run-tests

  Log:
    Reverted the use of "expr length" also because FreeBSD cannot do it.

  Summary:
    Revision    Changes     Path
    1.9         +2  -2      ossp-pkg/srpc/libxds/regression-tests/.run-tests
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/.run-tests
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 .run-tests
  --- ossp-pkg/srpc/libxds/regression-tests/.run-tests	2001/07/09 18:22:37	1.8
  +++ ossp-pkg/srpc/libxds/regression-tests/.run-tests	2001/07/09 18:27:26	1.9
  @@ -14,14 +14,14 @@
   for suite in $*; do
       tmp=`expr "${suite}" : '\(.*\)\.exe$'`
       echo -n "$tmp"
  -    currpos=`expr $RESCOLUMN - \( length $tmp \)`
  +    currpos=`expr $RESCOLUMN - ${#tmp}`
       while [ $currpos -gt 1 ]; do
           echo -n "."
           currpos=`expr $currpos - 1`
       done
       echo -n " "
       numTests=`expr $numTests + 1`
  -    eval ./$suite >${suite%%.exe}.log 2>&1
  +    eval ./$suite >${tmp}.log 2>&1
       if [ $? -eq 0 ]; then
           echo OK
       else

From ossp-cvs-owner@ossp.org  Mon Jul  9 21:00:46 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f69J0iw81726; Mon, 9 Jul 2001 21:00:44 +0200 (CEST)
Date: Mon, 9 Jul 2001 21:00:44 +0200 (CEST)
Message-Id: <200107091900.f69J0iw81726@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds decode.c vdecode.c xds.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   09-Jul-2001 21:00:44
  Branch: HEAD                             Handle: 2001070920004400

  Modified files:
    ossp-pkg/srpc/libxds    decode.c vdecode.c xds.h

  Log:
    Implemented xds_decode().

  Summary:
    Revision    Changes     Path
    1.2         +6  -1      ossp-pkg/srpc/libxds/decode.c
    1.2         +67 -2      ossp-pkg/srpc/libxds/vdecode.c
    1.15        +2  -1      ossp-pkg/srpc/libxds/xds.h
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/decode.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 decode.c
  --- ossp-pkg/srpc/libxds/decode.c	2001/07/04 15:58:51	1.1
  +++ ossp-pkg/srpc/libxds/decode.c	2001/07/09 19:00:44	1.2
  @@ -29,5 +29,10 @@
   
   int xds_decode(xds_t* xds, const char* fmt, ...)
       {
  -    return XDS_ERR_INVALID_ARG;
  +    int rc;
  +    va_list args;
  +    va_start(args, fmt);
  +    rc = xds_vdecode(xds, fmt, args);
  +    va_end(args);
  +    return rc;
       }
  Index: ossp-pkg/srpc/libxds/vdecode.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 vdecode.c
  --- ossp-pkg/srpc/libxds/vdecode.c	2001/07/04 15:58:51	1.1
  +++ ossp-pkg/srpc/libxds/vdecode.c	2001/07/09 19:00:44	1.2
  @@ -25,9 +25,74 @@
      SUCH DAMAGE.
   */
   
  +#include <string.h>
  +#include <ctype.h>
  +#include <assert.h>
   #include "internal.h"
   
  -int xds_vdecode(xds_t* xds, const char* fmt, va_list args)
  +int xds_vdecode(xds_t* xds, const char* fmt_arg, va_list args)
       {
  -    return XDS_ERR_INVALID_ARG;
  +    char* name;
  +    char* p;
  +    char* fmt;
  +    int rc;
  +
  +    /* Sanity checks. */
  +
  +    assert(xds != NULL);
  +    assert(fmt_arg != NULL);
  +    assert(xds->mode == XDS_DECODE);
  +    if (xds == NULL || fmt_arg == NULL)
  +	return XDS_ERR_INVALID_ARG;
  +    if (xds->mode != XDS_DECODE)
  +	return XDS_ERR_INVALID_MODE;
  +
  +    /* Ensure we have a buffer to decode. */
  +
  +    if (xds->buffer == NULL || xds->buffer_capacity == 0)
  +	return XDS_ERR_UNDERFLOW;
  +
  +    /* Iterate through the items in the format string and execute the
  +       apropriate engines. */
  +
  +    fmt = p = strdup(fmt_arg);
  +    if (fmt == NULL)
  +	return XDS_ERR_NO_MEM;
  +    for(name = p; *p != '\0'; name = p)
  +	{
  +	while(isalnum(*p) || *p == '-' || *p == '_')
  +	    ++p;
  +	if (*p)
  +	    *p++ = '\0';
  +	else
  +	    *p = '\0';
  +
  +	if (strlen(name) > 0)
  +	    {
  +	    size_t pos;
  +	    if (xds_find_engine(xds->engines, xds->engines_len, name, &pos))
  +		{
  +		rc = (*xds->engines[pos].engine)(xds,
  +						 xds->engines[pos].context,
  +						 xds->buffer + xds->buffer_len,
  +						 xds->buffer_capacity - xds->buffer_len,
  +						 args);
  +		if (rc < 0)
  +		    goto leave;
  +		else
  +		    xds->buffer_len += rc;
  +		}
  +	    else
  +		{
  +		rc = XDS_ERR_UNKNOWN_ENGINE;
  +		goto leave;
  +		}
  +	    }
  +	}
  +    rc = XDS_OK;
  +
  +    /* Clean up and leave. */
  +  leave:
  +    free(fmt);
  +    return rc;
       }
  Index: ossp-pkg/srpc/libxds/xds.h
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 xds.h
  --- ossp-pkg/srpc/libxds/xds.h	2001/07/09 17:19:26	1.14
  +++ ossp-pkg/srpc/libxds/xds.h	2001/07/09 19:00:44	1.15
  @@ -41,7 +41,8 @@
       XDS_ERR_INVALID_ARG    = -3,
       XDS_ERR_TYPE_MISMATCH  = -4,
       XDS_ERR_UNKNOWN_ENGINE = -5,
  -    XDS_ERR_INVALID_MODE   = -6
  +    XDS_ERR_INVALID_MODE   = -6,
  +    XDS_ERR_UNDERFLOW      = -7
       };
   typedef enum { XDS_ENCODE, XDS_DECODE } xds_mode_t;
   typedef enum { XDS_LOAN,   XDS_GIFT   } xds_scope_t;

From ossp-cvs-owner@ossp.org  Mon Jul  9 21:09:44 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f69J9gg82601; Mon, 9 Jul 2001 21:09:42 +0200 (CEST)
Date: Mon, 9 Jul 2001 21:09:42 +0200 (CEST)
Message-Id: <200107091909.f69J9gg82601@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests Makefile xds-decode....
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   09-Jul-2001 21:09:42
  Branch: HEAD                             Handle: 2001070920094200

  Added files:
    ossp-pkg/srpc/libxds/regression-tests
                            xds-decode.c
  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            Makefile

  Log:
    Added test suite for xds_decode().

  Summary:
    Revision    Changes     Path
    1.9         +1  -1      ossp-pkg/srpc/libxds/regression-tests/Makefile
    1.1         +106 -0     ossp-pkg/srpc/libxds/regression-tests/xds-decode.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/Makefile
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 Makefile
  --- ossp-pkg/srpc/libxds/regression-tests/Makefile	2001/07/09 17:44:47	1.8
  +++ ossp-pkg/srpc/libxds/regression-tests/Makefile	2001/07/09 19:09:42	1.9
  @@ -9,7 +9,7 @@
   LDFLAGS		= -L..
   
   TESTS		= xds-core.exe xds-find-engine.exe xds-register.exe xds-encode.exe \
  -		  xds-getbuffer.exe
  +		  xds-getbuffer.exe xds-decode.exe
   
   .SUFFIXES:
   .SUFFIXES:	.c .exe
  Index: ossp-pkg/srpc/libxds/regression-tests/xds-decode.c
  ============================================================
  $ cvs update -p -r1.1 xds-decode.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <stdio.h>
  #include <string.h>
  #include "../internal.h"
  
  static int dummy_engine(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list args)
      {
      if (xds == NULL)
  	{
  	printf("XDS context isn't passed through to registered engine.\n");
  	exit(1);
  	}
      if (engine_context != (void*)42)
  	{
  	printf("Engine context isn't passed through to registered engine.\n");
  	exit(1);
  	}
      if (buffer == NULL)
  	{
  	printf("Buffer passed to engine is NULL.\n");
  	exit(1);
  	}
      if (buffer_size == 0)
  	{
  	printf("Buffer size passed to engine is zero!\n");
  	exit(1);
  	}
      if (strncmp(buffer, "Hallo!", 6) != 0)
  	{
  	printf("The contents of the decode buffer are not what we expected.\n");
  	exit(1);
  	}
      return 6;
      }
  
  int main()
      {
      xds_t* xds;
      char buffer[] = "Hallo!Hallo!Hallo!";
  
      /* Create XDS context. */
  
      xds = xds_init(XDS_DECODE);
      if (xds == NULL)
  	{
  	printf("Failed to initialize XDS context.\n");
  	return 1;
  	}
  
      /* Register the dummy callback under multiple names. */
  
      if (xds_register(xds, "text", &dummy_engine, (void*)42) != XDS_OK)
  	{
  	printf("Failed to register my decoding engines.\n");
  	return 1;
  	}
  
      /* Decode the buffer and have the callback report when something
         is wrong. */
  
      if (xds_setbuffer(xds, XDS_LOAN, buffer, strlen(buffer)) != XDS_OK)
  	{
  	printf("xds_decode() failed!");
  	return 1;
  	}
  
      if (xds_decode(xds, "text::text text") != XDS_OK)
  	{
  	printf("xds_decode() failed!");
  	return 1;
  	}
  
      /* Clean up. */
  
      xds_destroy(xds);
  
      /* Everything went fine. */
  
      return 0;
      }

From ossp-cvs-owner@ossp.org  Mon Jul  9 21:10:08 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f69JA7B82681; Mon, 9 Jul 2001 21:10:07 +0200 (CEST)
Date: Mon, 9 Jul 2001 21:10:07 +0200 (CEST)
Message-Id: <200107091910.f69JA7B82681@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests xds-encode.c xds-get...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   09-Jul-2001 21:10:07
  Branch: HEAD                             Handle: 2001070920100600

  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            xds-encode.c xds-getbuffer.c xds-register.c

  Log:
    Removed unnecessary include statements.

  Summary:
    Revision    Changes     Path
    1.3         +0  -2      ossp-pkg/srpc/libxds/regression-tests/xds-encode.c
    1.2         +0  -2      ossp-pkg/srpc/libxds/regression-tests/xds-getbuffer.c
    1.5         +0  -1      ossp-pkg/srpc/libxds/regression-tests/xds-register.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/xds-encode.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xds-encode.c
  --- ossp-pkg/srpc/libxds/regression-tests/xds-encode.c	2001/07/09 17:17:02	1.2
  +++ ossp-pkg/srpc/libxds/regression-tests/xds-encode.c	2001/07/09 19:10:06	1.3
  @@ -27,8 +27,6 @@
   
   #include <stdio.h>
   #include <string.h>
  -#include <unistd.h>
  -#include <assert.h>
   #include "../internal.h"
   
   static int dummy_engine(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list args)
  Index: ossp-pkg/srpc/libxds/regression-tests/xds-getbuffer.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xds-getbuffer.c
  --- ossp-pkg/srpc/libxds/regression-tests/xds-getbuffer.c	2001/07/09 17:16:30	1.1
  +++ ossp-pkg/srpc/libxds/regression-tests/xds-getbuffer.c	2001/07/09 19:10:06	1.2
  @@ -27,8 +27,6 @@
   
   #include <stdio.h>
   #include <string.h>
  -#include <unistd.h>
  -#include <assert.h>
   #include "../internal.h"
   
   static int dummy_engine(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list args)
  Index: ossp-pkg/srpc/libxds/regression-tests/xds-register.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xds-register.c
  --- ossp-pkg/srpc/libxds/regression-tests/xds-register.c	2001/07/09 17:17:33	1.4
  +++ ossp-pkg/srpc/libxds/regression-tests/xds-register.c	2001/07/09 19:10:06	1.5
  @@ -27,7 +27,6 @@
   
   #include <stdio.h>
   #include <string.h>
  -#include <unistd.h>
   #include <assert.h>
   #include "../internal.h"
   

From ossp-cvs-owner@ossp.org  Mon Jul  9 21:19:39 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f69JJcc84149; Mon, 9 Jul 2001 21:19:38 +0200 (CEST)
Date: Mon, 9 Jul 2001 21:19:38 +0200 (CEST)
Message-Id: <200107091919.f69JJcc84149@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds setbuffer.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   09-Jul-2001 21:19:38
  Branch: HEAD                             Handle: 2001070920193700

  Modified files:
    ossp-pkg/srpc/libxds    setbuffer.c

  Log:
    Implemented xds_setbuffer().

  Summary:
    Revision    Changes     Path
    1.3         +34 -2      ossp-pkg/srpc/libxds/setbuffer.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/setbuffer.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 setbuffer.c
  --- ossp-pkg/srpc/libxds/setbuffer.c	2001/07/09 17:20:56	1.2
  +++ ossp-pkg/srpc/libxds/setbuffer.c	2001/07/09 19:19:37	1.3
  @@ -25,9 +25,41 @@
      SUCH DAMAGE.
   */
   
  +#include "assert.h"
   #include "internal.h"
   
  -int xds_setbuffer(xds_t* xds, xds_scope_t flag, void*  buffer, size_t  buffer_len)
  +int xds_setbuffer(xds_t* xds, xds_scope_t flag, void* buffer, size_t buffer_len)
       {
  -    return XDS_ERR_INVALID_ARG;
  +    /* Sanity checks. */
  +
  +    assert(xds != NULL);
  +    assert(flag == XDS_GIFT || flag == XDS_LOAN);
  +    assert((buffer != NULL && buffer_len != 0) || flag == XDS_GIFT);
  +    if (xds == NULL || (flag != XDS_GIFT && flag != XDS_LOAN) ||
  +	((buffer == NULL || buffer_len == 0) && flag == XDS_LOAN))
  +	return XDS_ERR_INVALID_ARG;
  +
  +    /* Free the old buffer if there is one. */
  +
  +    if (xds->buffer != NULL)
  +	free(xds->buffer);
  +    xds->buffer_len = 0;
  +
  +    if (flag == XDS_GIFT)
  +	{
  +	xds->buffer = buffer;
  +	if (buffer == NULL)
  +	    xds->buffer_capacity = 0;
  +	else
  +	    xds->buffer_capacity = buffer_len;
  +	xds->we_own_buffer = (1==1);
  +	}
  +    else
  +	{
  +	xds->buffer = buffer;
  +	xds->buffer_capacity = buffer_len;
  +	xds->we_own_buffer = (1!=1);
  +	}
  +
  +    return XDS_OK;
       }

From ossp-cvs-owner@ossp.org  Mon Jul  9 21:21:00 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f69JKx784283; Mon, 9 Jul 2001 21:20:59 +0200 (CEST)
Date: Mon, 9 Jul 2001 21:20:59 +0200 (CEST)
Message-Id: <200107091920.f69JKx784283@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds setbuffer.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   09-Jul-2001 21:20:59
  Branch: HEAD                             Handle: 2001070920205800

  Modified files:
    ossp-pkg/srpc/libxds    setbuffer.c

  Log:
    Swapped order of if statement to be more efficient.

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/srpc/libxds/setbuffer.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/setbuffer.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 setbuffer.c
  --- ossp-pkg/srpc/libxds/setbuffer.c	2001/07/09 19:19:37	1.3
  +++ ossp-pkg/srpc/libxds/setbuffer.c	2001/07/09 19:20:58	1.4
  @@ -36,7 +36,7 @@
       assert(flag == XDS_GIFT || flag == XDS_LOAN);
       assert((buffer != NULL && buffer_len != 0) || flag == XDS_GIFT);
       if (xds == NULL || (flag != XDS_GIFT && flag != XDS_LOAN) ||
  -	((buffer == NULL || buffer_len == 0) && flag == XDS_LOAN))
  +	(flag == XDS_LOAN && (buffer == NULL || buffer_len == 0)))
   	return XDS_ERR_INVALID_ARG;
   
       /* Free the old buffer if there is one. */

From ossp-cvs-owner@ossp.org  Sun Jul 15 13:48:29 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6FBmRR14847; Sun, 15 Jul 2001 13:48:27 +0200 (CEST)
Date: Sun, 15 Jul 2001 13:48:27 +0200 (CEST)
Message-Id: <200107151148.f6FBmRR14847@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   15-Jul-2001 13:48:27
  Branch: HEAD                             Handle: 2001071512482600

  Modified files:
    ossp-pkg/srpc           TODO

  Log:
    Revamp the XDS/AMP TODO file by updating the forthcoming
    milestones and corresponding dates.
    
    Peti: Please look carefully over it and feel free to
          add/remove entries and/or adjust milestone times
          if you thing we cannot fulfill this.

  Summary:
    Revision    Changes     Path
    1.5         +52 -23     ossp-pkg/srpc/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/TODO
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 TODO
  --- ossp-pkg/srpc/TODO	2001/06/21 05:16:05	1.4
  +++ ossp-pkg/srpc/TODO	2001/07/15 11:48:26	1.5
  @@ -3,34 +3,63 @@
   ========================
   
   o M1 (peti) [11-Jun-2001]
  -  - evaluation (-> ideas)
  -    (checklist)
  -  - prototype
  -    (C++)
  +  - evaluation checklist for XDS and AMP
  +    done: 50% [-> EVAL]
  +  - prototype C++
  +    done: 0%
   
   o M2 (peti+rse) [25-Jun-2001]
     - design/architecture paper (authentication+encryption framework)
       (< 10KB Text + 1x Figure)
  +    done: 30% [-> architecture.fig]
   
  -o M3 (peti+rse) [9-Jul-2001]
  +o M3 (peti+rse) [2-Jul-2001]
     - design libxds API
  -  - design libamp API
  -  - preliminary design libsrpc API
  +    done: 100% [-> libxds/xds.h + libxds/xds.pod]
   
  -o M4 (peti)
  -  - implementation of libxds
  -  - implementation of libamp
  -
  -o M5 (peti+rse)
  -  - design libsrpc API and protocol
  -
  -o M6 (peti)
  -  - implementation libsrpc
  -  - implementation xxxd
  -
  -o M7 (peti)
  -  - documentation
  -
  -o M8 (rse)
  -  - OSSP integration
  +o M4 (peti) [3 weeks until 23-Jul-2001]
  +  - implementation of libxds library framework
  +    done: 100% [-> libxds/*.c]
  +  - implementation of libxds SunRPC/XDR and XML-RPC backends
  +    for basic data types:
  +    o integer:
  +      - short
  +      - unsigned short
  +      - int
  +      - unsigned int
  +      - long 
  +      - unsigned long 
  +    o floating point:
  +      - float
  +      - double
  +    o pointer:
  +      - void *
  +      - void(*)()
  +    o string
  +      - char * (end is NUL)
  +      - unsigned char * (end is NUL)
  +    o octet-stream 
  +      - void * (end is after given length)
  +    Function prototype is xds_engine_t.
  +    Function name scheme is:
  +      {xdr,xml}_{en,de}code_{[u]short,[u]int,[u]long,
  +                             float,double,voidptr,funcptr,
  +                             [u]string,octets}
  +  - regression tests for libxds (make check)
  +
  +o M5 (peti+rse) [1 week until 30-Jul-2001]
  +  - [peti] documentation for libxds (xds.pod)
  +  - [rse]  OSSP adjustments for libxds
  +
  +o M6 (peti+rse) [1 week until 06-Aug-2001]
  +  - design API for libamp
  +
  +o M7 (peti) [3 week until 27-Aug-2001]
  +  - implementation of libamp library framework
  +  - implementation of libamp backends SHM, TCP and UDP
  +  - regression tests for libamp
  +
  +o M8 (peti+rse) [1 week until 03-Sep-2001]
  +  - [peti] documentation for libamp
  +  - [rse]  OSSP adjustments for libamp
   

From ossp-cvs-owner@ossp.org  Mon Jul 16 19:50:10 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6GHo9u38823; Mon, 16 Jul 2001 19:50:09 +0200 (CEST)
Date: Mon, 16 Jul 2001 19:50:09 +0200 (CEST)
Message-Id: <200107161750.f6GHo9u38823@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests xds-decode.c xds-enc...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   16-Jul-2001 19:50:08
  Branch: HEAD                             Handle: 2001071618500701

  Modified files:
    ossp-pkg/srpc/libxds    vdecode.c vencode.c xds.h
    ossp-pkg/srpc/libxds/regression-tests
                            xds-decode.c xds-encode.c xds-getbuffer.c
                            xds-register.c

  Log:
    Passing va_list parameters by value is fine, unless the called routine
    modifies the parameter list and you expect the change to propagate
    back to the mother routine. What is what we want. Hence, I changed the
    prototype of the engine callback to expect a pointer to va_list.

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/srpc/libxds/regression-tests/xds-decode.c
    1.4         +1  -1      ossp-pkg/srpc/libxds/regression-tests/xds-encode.c
    1.3         +1  -1      ossp-pkg/srpc/libxds/regression-tests/xds-getbuffer.c
    1.6         +1  -1      ossp-pkg/srpc/libxds/regression-tests/xds-register.c
    1.3         +1  -1      ossp-pkg/srpc/libxds/vdecode.c
    1.5         +1  -1      ossp-pkg/srpc/libxds/vencode.c
    1.16        +1  -1      ossp-pkg/srpc/libxds/xds.h
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/xds-decode.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xds-decode.c
  --- ossp-pkg/srpc/libxds/regression-tests/xds-decode.c	2001/07/09 19:09:42	1.1
  +++ ossp-pkg/srpc/libxds/regression-tests/xds-decode.c	2001/07/16 17:50:08	1.2
  @@ -29,7 +29,7 @@
   #include <string.h>
   #include "../internal.h"
   
  -static int dummy_engine(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list args)
  +static int dummy_engine(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
       {
       if (xds == NULL)
   	{
  Index: ossp-pkg/srpc/libxds/regression-tests/xds-encode.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xds-encode.c
  --- ossp-pkg/srpc/libxds/regression-tests/xds-encode.c	2001/07/09 19:10:06	1.3
  +++ ossp-pkg/srpc/libxds/regression-tests/xds-encode.c	2001/07/16 17:50:08	1.4
  @@ -29,7 +29,7 @@
   #include <string.h>
   #include "../internal.h"
   
  -static int dummy_engine(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list args)
  +static int dummy_engine(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
       {
       if (xds == NULL)
   	{
  Index: ossp-pkg/srpc/libxds/regression-tests/xds-getbuffer.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xds-getbuffer.c
  --- ossp-pkg/srpc/libxds/regression-tests/xds-getbuffer.c	2001/07/09 19:10:06	1.2
  +++ ossp-pkg/srpc/libxds/regression-tests/xds-getbuffer.c	2001/07/16 17:50:08	1.3
  @@ -29,7 +29,7 @@
   #include <string.h>
   #include "../internal.h"
   
  -static int dummy_engine(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list args)
  +static int dummy_engine(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
       {
       strncpy(buffer, "Hallo!", buffer_size);
       return 6;
  Index: ossp-pkg/srpc/libxds/regression-tests/xds-register.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 xds-register.c
  --- ossp-pkg/srpc/libxds/regression-tests/xds-register.c	2001/07/09 19:10:06	1.5
  +++ ossp-pkg/srpc/libxds/regression-tests/xds-register.c	2001/07/16 17:50:08	1.6
  @@ -30,7 +30,7 @@
   #include <assert.h>
   #include "../internal.h"
   
  -static int dummy_engine(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list args)
  +static int dummy_engine(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
       {
       return 0;
       }
  Index: ossp-pkg/srpc/libxds/vdecode.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 vdecode.c
  --- ossp-pkg/srpc/libxds/vdecode.c	2001/07/09 19:00:44	1.2
  +++ ossp-pkg/srpc/libxds/vdecode.c	2001/07/16 17:50:07	1.3
  @@ -76,7 +76,7 @@
   						 xds->engines[pos].context,
   						 xds->buffer + xds->buffer_len,
   						 xds->buffer_capacity - xds->buffer_len,
  -						 args);
  +						 &args);
   		if (rc < 0)
   		    goto leave;
   		else
  Index: ossp-pkg/srpc/libxds/vencode.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 vencode.c
  --- ossp-pkg/srpc/libxds/vencode.c	2001/07/09 17:44:29	1.4
  +++ ossp-pkg/srpc/libxds/vencode.c	2001/07/16 17:50:07	1.5
  @@ -115,7 +115,7 @@
   						     xds->engines[pos].context,
   						     xds->buffer + xds->buffer_len,
   						     xds->buffer_capacity - xds->buffer_len,
  -						     args);
  +						     &args);
   		    if (rc < 0)
   			goto leave;
   		    else if (rc >= xds->buffer_capacity - xds->buffer_len)
  Index: ossp-pkg/srpc/libxds/xds.h
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 xds.h
  --- ossp-pkg/srpc/libxds/xds.h	2001/07/09 19:00:44	1.15
  +++ ossp-pkg/srpc/libxds/xds.h	2001/07/16 17:50:07	1.16
  @@ -54,7 +54,7 @@
   			    void* engine_context,
   			    void* buffer,
   			    size_t buffer_size,
  -			    va_list args);
  +			    va_list* args);
   
   xds_t* xds_init(xds_mode_t);
   void xds_destroy(xds_t* xds);

From ossp-cvs-owner@ossp.org  Mon Jul 16 20:27:00 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6GIQxC44028; Mon, 16 Jul 2001 20:26:59 +0200 (CEST)
Date: Mon, 16 Jul 2001 20:26:59 +0200 (CEST)
Message-Id: <200107161826.f6GIQxC44028@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds set-capacity.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   16-Jul-2001 20:26:59
  Branch: HEAD                             Handle: 2001071619265800

  Modified files:
    ossp-pkg/srpc/libxds    set-capacity.c

  Log:
    It's not necessary to enlarge size until it is larger than
    new_capacity; equalling new_capacity is fine.

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/srpc/libxds/set-capacity.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/set-capacity.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 set-capacity.c
  --- ossp-pkg/srpc/libxds/set-capacity.c	2001/07/09 17:22:34	1.2
  +++ ossp-pkg/srpc/libxds/set-capacity.c	2001/07/16 18:26:58	1.3
  @@ -48,7 +48,7 @@
   
       /* Find the correct capacity. */
   
  -    for(size = (*array_capacity != 0) ? *array_capacity * 2 : initial_capacity; size <= new_capacity; size *= 2)
  +    for(size = (*array_capacity != 0) ? *array_capacity * 2 : initial_capacity; size < new_capacity; size *= 2)
   	;
   
       /* Allocate the array and store the new values. */

From ossp-cvs-owner@ossp.org  Mon Jul 16 20:28:34 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6GISXN44182; Mon, 16 Jul 2001 20:28:33 +0200 (CEST)
Date: Mon, 16 Jul 2001 20:28:33 +0200 (CEST)
Message-Id: <200107161828.f6GISXN44182@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds vencode.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   16-Jul-2001 20:28:33
  Branch: HEAD                             Handle: 2001071619283200

  Modified files:
    ossp-pkg/srpc/libxds    vencode.c

  Log:
    Improved clarity of debug message.

  Summary:
    Revision    Changes     Path
    1.6         +1  -1      ossp-pkg/srpc/libxds/vencode.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/vencode.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 vencode.c
  --- ossp-pkg/srpc/libxds/vencode.c	2001/07/16 17:50:07	1.5
  +++ ossp-pkg/srpc/libxds/vencode.c	2001/07/16 18:28:32	1.6
  @@ -61,7 +61,7 @@
   	assert(rc == XDS_OK || rc == XDS_ERR_NO_MEM);
   	if (rc != XDS_OK)
   	    return rc;
  -	printf("Enlarged buffer to %d byte.\n", xds->buffer_capacity);
  +	printf("Setting up buffer with capacity %d byte.\n", xds->buffer_capacity);
   	xds->buffer_len    = 0;
   	xds->we_own_buffer = (1==1);
   	}

From ossp-cvs-owner@ossp.org  Mon Jul 16 20:31:37 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6GIVaL44643; Mon, 16 Jul 2001 20:31:36 +0200 (CEST)
Date: Mon, 16 Jul 2001 20:31:36 +0200 (CEST)
Message-Id: <200107161831.f6GIVaL44643@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds vencode.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   16-Jul-2001 20:31:36
  Branch: HEAD                             Handle: 2001071619313600

  Modified files:
    ossp-pkg/srpc/libxds    vencode.c

  Log:
    We need to make a difference between the callback using up all buffer
    capacity, in which case we need to enlarge the buffer but don't need
    to restart the callback, and the callback truncating its output,
    because the buffer was too small, in which case we need to enlarge the
    buffer _and_ restart the callback.

  Summary:
    Revision    Changes     Path
    1.7         +5  -1      ossp-pkg/srpc/libxds/vencode.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/vencode.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 vencode.c
  --- ossp-pkg/srpc/libxds/vencode.c	2001/07/16 18:28:32	1.6
  +++ ossp-pkg/srpc/libxds/vencode.c	2001/07/16 18:31:36	1.7
  @@ -122,6 +122,11 @@
   			{		/* enlarge buffer */
   			int rc2;
   
  +			if (rc > xds->buffer_capacity - xds->buffer_len)
  +			    restart_engine = (1==1);
  +			else
  +			    restart_engine = (1!=1);
  +
   			if (!xds->we_own_buffer)
   			    {
   			    rc = XDS_ERR_OVERFLOW;
  @@ -139,7 +144,6 @@
   			    rc = rc2;
   			    goto leave;
   			    }
  -			restart_engine = (1==1);
   			printf("Enlarged buffer to %d byte.\n", xds->buffer_capacity);
   			}
   		    else

From ossp-cvs-owner@ossp.org  Mon Jul 16 20:38:54 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6GIcr045470; Mon, 16 Jul 2001 20:38:53 +0200 (CEST)
Date: Mon, 16 Jul 2001 20:38:53 +0200 (CEST)
Message-Id: <200107161838.f6GIcr045470@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests Makefile xds-setbuff...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   16-Jul-2001 20:38:53
  Branch: HEAD                             Handle: 2001071619385300

  Added files:
    ossp-pkg/srpc/libxds/regression-tests
                            xds-setbuffer.c
  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            Makefile

  Log:
    Added test suite for xds_setbuffer().

  Summary:
    Revision    Changes     Path
    1.10        +2  -2      ossp-pkg/srpc/libxds/regression-tests/Makefile
    1.1         +128 -0     ossp-pkg/srpc/libxds/regression-tests/xds-setbuffer.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/Makefile
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 Makefile
  --- ossp-pkg/srpc/libxds/regression-tests/Makefile	2001/07/09 19:09:42	1.9
  +++ ossp-pkg/srpc/libxds/regression-tests/Makefile	2001/07/16 18:38:53	1.10
  @@ -4,12 +4,12 @@
   
   WARNFLAGS	= -Wall -ansi -pedantic -Wshadow -Wpointer-arith -Wcast-align -Winline -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Werror
   OPTFLAGS	= -O3 -pipe
  -CPPFLAGS	=
  +CPPFLAGS	= -D_GNU_SOURCE
   CFLAGS		=
   LDFLAGS		= -L..
   
   TESTS		= xds-core.exe xds-find-engine.exe xds-register.exe xds-encode.exe \
  -		  xds-getbuffer.exe xds-decode.exe
  +		  xds-getbuffer.exe xds-decode.exe xds-setbuffer.exe
   
   .SUFFIXES:
   .SUFFIXES:	.c .exe
  Index: ossp-pkg/srpc/libxds/regression-tests/xds-setbuffer.c
  ============================================================
  $ cvs update -p -r1.1 xds-setbuffer.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <stdio.h>
  #include <string.h>
  #include <assert.h>
  #include "../internal.h"
  
  static int dummy_engine(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
      {
      assert(xds != NULL);
      assert(buffer != NULL);
      assert(buffer_size != 0);
      if (buffer_size >= 64)
  	memset(buffer, 'a', 64);
      return 64;
      }
  
  int main()
      {
      xds_t* xds;
      char*  buffer;
      size_t buffer_size;
  
      /* Create XDS context. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL)
  	{
  	printf("Failed to initialize XDS context.\n");
  	return 1;
  	}
  
      /* Register the callback. */
  
      if (xds_register(xds, "dummy", &dummy_engine, NULL) != XDS_OK)
  	{
  	printf("Failed to register my encoding engine.\n");
  	return 1;
  	}
  
      /* Give the library a buffer of 64 byte, call the engine once, get
         the buffer back and see whether it has been enlarged or not. */
  
      buffer = malloc(64);
      if (buffer == NULL)
  	{
  	printf("Failed to allocate my memory.\n");
  	return 1;
  	}
      buffer_size = 64;
      if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK)
  	{
  	printf("xds_setbuffer() failed!\n");
  	return 1;
  	}
      if (xds_encode(xds, "dummy") != XDS_OK)
  	{
  	printf("xds_encode() failed!\n");
  	return 1;
  	}
      if (xds_getbuffer(xds, XDS_GIFT, (void**)&buffer, &buffer_size) != XDS_OK)
  	{
  	printf("xds_getbuffer() failed!\n");
  	return 1;
  	}
      if (buffer_size == 64)
  	{
  	printf("xds_encode() did not enlarge the buffer after processing the callback\n");
  	printf("even though all capacity was used up!\n");
  	return 1;
  	}
  
      /* Loan the library a buffer we own, call the engine once to
         exceed the buffer's capacity and check, whether the library
         returns the correct error code. */
  
      buffer = malloc(32);
      if (buffer == NULL)
  	{
  	printf("Failed to allocate my memory.\n");
  	return 1;
  	}
      buffer_size = 32;
      if (xds_setbuffer(xds, XDS_LOAN, buffer, buffer_size) != XDS_OK)
  	{
  	printf("xds_setbuffer() failed!\n");
  	return 1;
  	}
      if (xds_encode(xds, "dummy") != XDS_ERR_OVERFLOW)
  	{
  	printf("xds_encode() was supposed to fail with XDS_ERR_OVERFLOW!\n");
  	return 1;
  	}
      free(buffer);
  
      /* Clean up. */
  
      xds_destroy(xds);
  
      /* Everything went fine. */
  
      return 0;
      }

From ossp-cvs-owner@ossp.org  Wed Jul 18 13:29:48 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6IBTlP61059; Wed, 18 Jul 2001 13:29:47 +0200 (CEST)
Date: Wed, 18 Jul 2001 13:29:47 +0200 (CEST)
Message-Id: <200107181129.f6IBTlP61059@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests Makefile xdr-int32.c...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   18-Jul-2001 13:29:47
  Branch: HEAD                             Handle: 2001071812294600

  Added files:
    ossp-pkg/srpc/libxds/regression-tests
                            xdr-int32.c xdr-uint32.c
  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            Makefile

  Log:
    Added test suites for the encoding of int32 and uint32 values in XDR.

  Summary:
    Revision    Changes     Path
    1.11        +2  -1      ossp-pkg/srpc/libxds/regression-tests/Makefile
    1.1         +108 -0     ossp-pkg/srpc/libxds/regression-tests/xdr-int32.c
    1.1         +107 -0     ossp-pkg/srpc/libxds/regression-tests/xdr-uint32.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/Makefile
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 Makefile
  --- ossp-pkg/srpc/libxds/regression-tests/Makefile	2001/07/16 18:38:53	1.10
  +++ ossp-pkg/srpc/libxds/regression-tests/Makefile	2001/07/18 11:29:46	1.11
  @@ -9,7 +9,8 @@
   LDFLAGS		= -L..
   
   TESTS		= xds-core.exe xds-find-engine.exe xds-register.exe xds-encode.exe \
  -		  xds-getbuffer.exe xds-decode.exe xds-setbuffer.exe
  +		  xds-getbuffer.exe xds-decode.exe xds-setbuffer.exe \
  +		  xdr-uint32.exe xdr-int32.exe
   
   .SUFFIXES:
   .SUFFIXES:	.c .exe
  Index: ossp-pkg/srpc/libxds/regression-tests/xdr-int32.c
  ============================================================
  $ cvs update -p -r1.1 xdr-int32.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <stdio.h>
  #include <string.h>
  #include <rpc/types.h>
  #include <rpc/xdr.h>
  #include "../internal.h"
  
  int main()
      {
      XDR    xdrs;
      char   xdr_buf[1024];
      size_t xdr_buf_size;
  
      xds_t* xds;
      char*  xds_buf;
      size_t xds_buf_size;
  
      int32_t values[] =
  	{
  	 0x00000000,
  	 0x12345678,
  	-0x12345678,
  	 0xabcdef01,
  	-0xabcdef01,
  	 0x7fffffff
  	};
  
      size_t i;
  
      /* Encode the values array using the RPC-XDR implementation. */
  
      xdrmem_create(&xdrs, xdr_buf, sizeof(xdr_buf), XDR_ENCODE);
      for (i = 0; i < sizeof(values)/sizeof(int32_t); ++i)
  	xdr_int32_t(&xdrs, &values[i]);
      xdr_buf_size = xdr_getpos(&xdrs);
      xdr_destroy(&xdrs);
  
      /* Encode the values array using the XDS implementation. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL)
  	{
  	printf("Failed to initialize XDS context.\n");
  	return 1;
  	}
      if (xds_register(xds, "int", &xdr_encode_int32, NULL) != XDS_OK)
  	{
  	printf("Failed to register my encoding engines.\n");
  	return 1;
  	}
      for (i = 0; i < sizeof(values)/sizeof(int32_t); ++i)
  	{
  	if (xds_encode(xds, "int", values[i]) != XDS_OK)
  	    {
  	    printf("xds_encode(values[%d]) failed!", i);
  	    return 1;
  	    }
  	}
      if (xds_getbuffer(xds, XDS_GIFT, (void**)&xds_buf, &xds_buf_size) != XDS_OK)
  	{
  	printf("getbuffer() failed.\n");
  	return 1;
  	}
      xds_destroy(xds);
  
      /* Both buffers must be equal now. */
  
      if (xdr_buf_size != xds_buf_size)
  	{
  	printf("The buffer sizes don't match: %d != %d.\n", xdr_buf_size, xds_buf_size);
  	return 1;
  	}
      if (memcmp(xds_buf, xdr_buf, xds_buf_size) != 0)
  	{
  	printf("The buffers' contents is not identical!\n");
  	return 1;
  	}
  
      /* Everything went fine. */
  
      return 0;
      }
  Index: ossp-pkg/srpc/libxds/regression-tests/xdr-uint32.c
  ============================================================
  $ cvs update -p -r1.1 xdr-uint32.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <stdio.h>
  #include <string.h>
  #include <rpc/types.h>
  #include <rpc/xdr.h>
  #include "../internal.h"
  
  int main()
      {
      XDR    xdrs;
      char   xdr_buf[1024];
      size_t xdr_buf_size;
  
      xds_t* xds;
      char*  xds_buf;
      size_t xds_buf_size;
  
      u_int32_t values[] =
  	{
  	0x00000000,
  	0x12345678,
  	0xabcdef01,
  	0xc500b3ef,
  	0xffffffff
  	};
  
      size_t i;
  
      /* Encode the values array using the RPC-XDR implementation. */
  
      xdrmem_create(&xdrs, xdr_buf, sizeof(xdr_buf), XDR_ENCODE);
      for (i = 0; i < sizeof(values)/sizeof(u_int32_t); ++i)
  	xdr_uint32_t(&xdrs, &values[i]);
      xdr_buf_size = xdr_getpos(&xdrs);
      xdr_destroy(&xdrs);
  
      /* Encode the values array using the XDS implementation. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL)
  	{
  	printf("Failed to initialize XDS context.\n");
  	return 1;
  	}
      if (xds_register(xds, "uint", &xdr_encode_uint32, NULL) != XDS_OK)
  	{
  	printf("Failed to register my encoding engines.\n");
  	return 1;
  	}
      for (i = 0; i < sizeof(values)/sizeof(uint32_t); ++i)
  	{
  	if (xds_encode(xds, "uint", values[i]) != XDS_OK)
  	    {
  	    printf("xds_encode(values[%d]) failed!", i);
  	    return 1;
  	    }
  	}
      if (xds_getbuffer(xds, XDS_GIFT, (void**)&xds_buf, &xds_buf_size) != XDS_OK)
  	{
  	printf("getbuffer() failed.\n");
  	return 1;
  	}
      xds_destroy(xds);
  
      /* Both buffers must be equal now. */
  
      if (xdr_buf_size != xds_buf_size)
  	{
  	printf("The buffer sizes don't match: %d != %d.\n", xdr_buf_size, xds_buf_size);
  	return 1;
  	}
      if (memcmp(xds_buf, xdr_buf, xds_buf_size) != 0)
  	{
  	printf("The buffers' contents is not identical!\n");
  	return 1;
  	}
  
      /* Everything went fine. */
  
      return 0;
      }

From ossp-cvs-owner@ossp.org  Wed Jul 18 13:30:20 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6IBUKh61357; Wed, 18 Jul 2001 13:30:20 +0200 (CEST)
Date: Wed, 18 Jul 2001 13:30:20 +0200 (CEST)
Message-Id: <200107181130.f6IBUKh61357@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile xdr-encode-int.c xds.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   18-Jul-2001 13:30:20
  Branch: HEAD                             Handle: 2001071812301900

  Added files:
    ossp-pkg/srpc/libxds    xdr-encode-int.c
  Modified files:
    ossp-pkg/srpc/libxds    Makefile xds.h

  Log:
    Added XDR encoding engines for int32 and uint32.

  Summary:
    Revision    Changes     Path
    1.14        +1  -1      ossp-pkg/srpc/libxds/Makefile
    1.1         +91 -0      ossp-pkg/srpc/libxds/xdr-encode-int.c
    1.17        +3  -0      ossp-pkg/srpc/libxds/xds.h
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 Makefile
  --- ossp-pkg/srpc/libxds/Makefile	2001/07/09 17:44:47	1.13
  +++ ossp-pkg/srpc/libxds/Makefile	2001/07/18 11:30:19	1.14
  @@ -15,7 +15,7 @@
   
   OBJS		= decode.o destroy.o encode.o getbuffer.o init.o register.o \
   		  setbuffer.o unregister.o vdecode.o vencode.o find-engine.o \
  -		  set-capacity.o
  +		  set-capacity.o xdr-encode-int.o
   
   .c.o:
   	$(CC) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CFLAGS) -c $<
  Index: ossp-pkg/srpc/libxds/xdr-encode-int.c
  ============================================================
  $ cvs update -p -r1.1 xdr-encode-int.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <assert.h>
  #include "internal.h"
  
  int xdr_encode_int32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
      {
      /* Consistency checks. */
  
      assert(xds != NULL);
      assert(buffer != NULL);
      assert(buffer_size != 0);
      assert(args != NULL);
      if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  	return XDS_ERR_INVALID_ARG;
  
      /* Get value and format it into the buffer. */
  
      if (buffer_size >= 4)
  	{
  	u_int32_t tmp;
  	int32_t value = va_arg(*args, u_int32_t);
  	if (value < 0)
  	    {
  	    value = 0 - value;
  	    tmp = 0 - (u_int32_t)value;
  	    }
  	else
  	    tmp = (u_int32_t)value;
  	((u_int8_t*)buffer)[0] = (tmp >> 24) & 0x000000ff;
  	((u_int8_t*)buffer)[1] = (tmp >> 16) & 0x000000ff;
  	((u_int8_t*)buffer)[2] = (tmp >>  8) & 0x000000ff;
  	((u_int8_t*)buffer)[3] = (tmp >>  0) & 0x000000ff;
  	}
  
      /* Done. */
  
      return 4;
      }
  
  int xdr_encode_uint32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
      {
      /* Consistency checks. */
  
      assert(xds != NULL);
      assert(buffer != NULL);
      assert(buffer_size != 0);
      assert(args != NULL);
      if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  	return XDS_ERR_INVALID_ARG;
  
      /* Get value and format it into the buffer. */
  
      if (buffer_size >= 4)
  	{
  	u_int32_t value = va_arg(*args, u_int32_t);
  	((u_int8_t*)buffer)[0] = (value >> 24) & 0x000000ff;
  	((u_int8_t*)buffer)[1] = (value >> 16) & 0x000000ff;
  	((u_int8_t*)buffer)[2] = (value >>  8) & 0x000000ff;
  	((u_int8_t*)buffer)[3] = (value >>  0) & 0x000000ff;
  	}
  
      /* Done. */
  
      return 4;
      }
  Index: ossp-pkg/srpc/libxds/xds.h
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 xds.h
  --- ossp-pkg/srpc/libxds/xds.h	2001/07/16 17:50:07	1.16
  +++ ossp-pkg/srpc/libxds/xds.h	2001/07/18 11:30:19	1.17
  @@ -70,4 +70,7 @@
   int xds_vencode(xds_t* xds, const char* fmt, va_list args);
   int xds_vdecode(xds_t* xds, const char* fmt, va_list args);
   
  +int xdr_encode_uint32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  +int xdr_encode_int32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  +
   #endif /* !defined(__LIBXDS_H__) */

From ossp-cvs-owner@ossp.org  Wed Jul 18 18:59:30 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6IGxTi04059; Wed, 18 Jul 2001 18:59:29 +0200 (CEST)
Date: Wed, 18 Jul 2001 18:59:29 +0200 (CEST)
Message-Id: <200107181659.f6IGxTi04059@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests Makefile xdr-int64.c...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   18-Jul-2001 18:59:29
  Branch: HEAD                             Handle: 2001071817592701

  Added files:
    ossp-pkg/srpc/libxds/regression-tests
                            xdr-int64.c xdr-uint64.c
  Modified files:
    ossp-pkg/srpc/libxds    xdr-encode-int.c xds.h
    ossp-pkg/srpc/libxds/regression-tests
                            Makefile

  Log:
    Implemented encoding routines for 64 bit integers and added the
    apropriate test suites.

  Summary:
    Revision    Changes     Path
    1.12        +4  -2      ossp-pkg/srpc/libxds/regression-tests/Makefile
    1.1         +108 -0     ossp-pkg/srpc/libxds/regression-tests/xdr-int64.c
    1.1         +107 -0     ossp-pkg/srpc/libxds/regression-tests/xdr-uint64.c
    1.2         +70 -0      ossp-pkg/srpc/libxds/xdr-encode-int.c
    1.18        +2  -0      ossp-pkg/srpc/libxds/xds.h
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/Makefile
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 Makefile
  --- ossp-pkg/srpc/libxds/regression-tests/Makefile	2001/07/18 11:29:46	1.11
  +++ ossp-pkg/srpc/libxds/regression-tests/Makefile	2001/07/18 16:59:28	1.12
  @@ -2,7 +2,9 @@
   
   CC		= gcc
   
  -WARNFLAGS	= -Wall -ansi -pedantic -Wshadow -Wpointer-arith -Wcast-align -Winline -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Werror
  +WARNFLAGS	= -Wall -ansi -pedantic -Wshadow -Wpointer-arith -Wcast-align -Winline \
  +		  -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Wno-long-long \
  +		  -Werror
   OPTFLAGS	= -O3 -pipe
   CPPFLAGS	= -D_GNU_SOURCE
   CFLAGS		=
  @@ -10,7 +12,7 @@
   
   TESTS		= xds-core.exe xds-find-engine.exe xds-register.exe xds-encode.exe \
   		  xds-getbuffer.exe xds-decode.exe xds-setbuffer.exe \
  -		  xdr-uint32.exe xdr-int32.exe
  +		  xdr-uint32.exe xdr-int32.exe xdr-uint64.exe xdr-int64.exe
   
   .SUFFIXES:
   .SUFFIXES:	.c .exe
  Index: ossp-pkg/srpc/libxds/regression-tests/xdr-int64.c
  ============================================================
  $ cvs update -p -r1.1 xdr-int64.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <stdio.h>
  #include <string.h>
  #include <rpc/types.h>
  #include <rpc/xdr.h>
  #include "../internal.h"
  
  int main()
      {
      XDR    xdrs;
      char   xdr_buf[1024];
      size_t xdr_buf_size;
  
      xds_t* xds;
      char*  xds_buf;
      size_t xds_buf_size;
  
      int64_t values[] =
  	{
  	 0x0000000000000000LL,
  	 0x123456789abcdef0LL,
  	-0x123456789abcdef0LL,
  	 0xabcdef01cc45bb9aLL,
  	-0xabcdef01cc45bb9aLL,
  	 0x7fffffffffffffffLL
  	};
  
      size_t i;
  
      /* Encode the values array using the RPC-XDR implementation. */
  
      xdrmem_create(&xdrs, xdr_buf, sizeof(xdr_buf), XDR_ENCODE);
      for (i = 0; i < sizeof(values)/sizeof(int64_t); ++i)
  	xdr_int64_t(&xdrs, &values[i]);
      xdr_buf_size = xdr_getpos(&xdrs);
      xdr_destroy(&xdrs);
  
      /* Encode the values array using the XDS implementation. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL)
  	{
  	printf("Failed to initialize XDS context.\n");
  	return 1;
  	}
      if (xds_register(xds, "int", &xdr_encode_int64, NULL) != XDS_OK)
  	{
  	printf("Failed to register my encoding engines.\n");
  	return 1;
  	}
      for (i = 0; i < sizeof(values)/sizeof(int64_t); ++i)
  	{
  	if (xds_encode(xds, "int", values[i]) != XDS_OK)
  	    {
  	    printf("xds_encode(values[%d]) failed!", i);
  	    return 1;
  	    }
  	}
      if (xds_getbuffer(xds, XDS_GIFT, (void**)&xds_buf, &xds_buf_size) != XDS_OK)
  	{
  	printf("getbuffer() failed.\n");
  	return 1;
  	}
      xds_destroy(xds);
  
      /* Both buffers must be equal now. */
  
      if (xdr_buf_size != xds_buf_size)
  	{
  	printf("The buffer sizes don't match: %d != %d.\n", xdr_buf_size, xds_buf_size);
  	return 1;
  	}
      if (memcmp(xds_buf, xdr_buf, xds_buf_size) != 0)
  	{
  	printf("The buffers' contents is not identical!\n");
  	return 1;
  	}
  
      /* Everything went fine. */
  
      return 0;
      }
  Index: ossp-pkg/srpc/libxds/regression-tests/xdr-uint64.c
  ============================================================
  $ cvs update -p -r1.1 xdr-uint64.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <stdio.h>
  #include <string.h>
  #include <rpc/types.h>
  #include <rpc/xdr.h>
  #include "../internal.h"
  
  int main()
      {
      XDR    xdrs;
      char   xdr_buf[1024];
      size_t xdr_buf_size;
  
      xds_t* xds;
      char*  xds_buf;
      size_t xds_buf_size;
  
      u_int64_t values[] =
  	{
  	0x0000000000000000ULL,
  	0x123456789abcdef0ULL,
  	0xabcdef01cc45bb9aULL,
  	0xc500b3efdd34ca9eULL,
  	0xffffffffffffffffULL
  	};
  
      size_t i;
  
      /* Encode the values array using the RPC-XDR implementation. */
  
      xdrmem_create(&xdrs, xdr_buf, sizeof(xdr_buf), XDR_ENCODE);
      for (i = 0; i < sizeof(values)/sizeof(u_int64_t); ++i)
  	xdr_uint64_t(&xdrs, &values[i]);
      xdr_buf_size = xdr_getpos(&xdrs);
      xdr_destroy(&xdrs);
  
      /* Encode the values array using the XDS implementation. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL)
  	{
  	printf("Failed to initialize XDS context.\n");
  	return 1;
  	}
      if (xds_register(xds, "uint", &xdr_encode_uint64, NULL) != XDS_OK)
  	{
  	printf("Failed to register my encoding engines.\n");
  	return 1;
  	}
      for (i = 0; i < sizeof(values)/sizeof(uint64_t); ++i)
  	{
  	if (xds_encode(xds, "uint", values[i]) != XDS_OK)
  	    {
  	    printf("xds_encode(values[%d]) failed!", i);
  	    return 1;
  	    }
  	}
      if (xds_getbuffer(xds, XDS_GIFT, (void**)&xds_buf, &xds_buf_size) != XDS_OK)
  	{
  	printf("getbuffer() failed.\n");
  	return 1;
  	}
      xds_destroy(xds);
  
      /* Both buffers must be equal now. */
  
      if (xdr_buf_size != xds_buf_size)
  	{
  	printf("The buffer sizes don't match: %d != %d.\n", xdr_buf_size, xds_buf_size);
  	return 1;
  	}
      if (memcmp(xds_buf, xdr_buf, xds_buf_size) != 0)
  	{
  	printf("The buffers' contents is not identical!\n");
  	return 1;
  	}
  
      /* Everything went fine. */
  
      return 0;
      }
  Index: ossp-pkg/srpc/libxds/xdr-encode-int.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xdr-encode-int.c
  --- ossp-pkg/srpc/libxds/xdr-encode-int.c	2001/07/18 11:30:19	1.1
  +++ ossp-pkg/srpc/libxds/xdr-encode-int.c	2001/07/18 16:59:27	1.2
  @@ -89,3 +89,73 @@
   
       return 4;
       }
  +
  +int xdr_encode_int64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  +    {
  +    /* Consistency checks. */
  +
  +    assert(xds != NULL);
  +    assert(buffer != NULL);
  +    assert(buffer_size != 0);
  +    assert(args != NULL);
  +    if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  +	return XDS_ERR_INVALID_ARG;
  +
  +    /* Get value and format it into the buffer. */
  +
  +    if (buffer_size >= 8)
  +	{
  +	u_int64_t tmp;
  +	int64_t value = va_arg(*args, u_int64_t);
  +	if (value < 0)
  +	    {
  +	    value = 0 - value;
  +	    tmp = 0 - (u_int64_t)value;
  +	    }
  +	else
  +	    tmp = (u_int64_t)value;
  +	((u_int8_t*)buffer)[0] = (tmp >> 56) & 0x000000ff;
  +	((u_int8_t*)buffer)[1] = (tmp >> 48) & 0x000000ff;
  +	((u_int8_t*)buffer)[2] = (tmp >> 40) & 0x000000ff;
  +	((u_int8_t*)buffer)[3] = (tmp >> 32) & 0x000000ff;
  +	((u_int8_t*)buffer)[4] = (tmp >> 24) & 0x000000ff;
  +	((u_int8_t*)buffer)[5] = (tmp >> 16) & 0x000000ff;
  +	((u_int8_t*)buffer)[6] = (tmp >>  8) & 0x000000ff;
  +	((u_int8_t*)buffer)[7] = (tmp >>  0) & 0x000000ff;
  +	}
  +
  +    /* Done. */
  +
  +    return 8;
  +    }
  +
  +int xdr_encode_uint64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  +    {
  +    /* Consistency checks. */
  +
  +    assert(xds != NULL);
  +    assert(buffer != NULL);
  +    assert(buffer_size != 0);
  +    assert(args != NULL);
  +    if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  +	return XDS_ERR_INVALID_ARG;
  +
  +    /* Get value and format it into the buffer. */
  +
  +    if (buffer_size >= 8)
  +	{
  +	u_int64_t value = va_arg(*args, u_int64_t);
  +	((u_int8_t*)buffer)[0] = (value >> 56) & 0x000000ff;
  +	((u_int8_t*)buffer)[1] = (value >> 48) & 0x000000ff;
  +	((u_int8_t*)buffer)[2] = (value >> 40) & 0x000000ff;
  +	((u_int8_t*)buffer)[3] = (value >> 32) & 0x000000ff;
  +	((u_int8_t*)buffer)[4] = (value >> 24) & 0x000000ff;
  +	((u_int8_t*)buffer)[5] = (value >> 16) & 0x000000ff;
  +	((u_int8_t*)buffer)[6] = (value >>  8) & 0x000000ff;
  +	((u_int8_t*)buffer)[7] = (value >>  0) & 0x000000ff;
  +	}
  +
  +    /* Done. */
  +
  +    return 8;
  +    }
  Index: ossp-pkg/srpc/libxds/xds.h
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 xds.h
  --- ossp-pkg/srpc/libxds/xds.h	2001/07/18 11:30:19	1.17
  +++ ossp-pkg/srpc/libxds/xds.h	2001/07/18 16:59:27	1.18
  @@ -72,5 +72,7 @@
   
   int xdr_encode_uint32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
   int xdr_encode_int32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  +int xdr_encode_uint64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  +int xdr_encode_int64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
   
   #endif /* !defined(__LIBXDS_H__) */

From ossp-cvs-owner@ossp.org  Wed Jul 18 19:37:51 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6IHboC09095; Wed, 18 Jul 2001 19:37:50 +0200 (CEST)
Date: Wed, 18 Jul 2001 19:37:50 +0200 (CEST)
Message-Id: <200107181737.f6IHboC09095@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests xds-decode.c xds-enc...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   18-Jul-2001 19:37:50
  Branch: HEAD                             Handle: 2001071818374900

  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            xds-decode.c xds-encode.c xds-setbuffer.c

  Log:
    Since args is a pointer now, let the engine check that it does not get
    passed NULL here.

  Summary:
    Revision    Changes     Path
    1.3         +5  -0      ossp-pkg/srpc/libxds/regression-tests/xds-decode.c
    1.5         +5  -0      ossp-pkg/srpc/libxds/regression-tests/xds-encode.c
    1.2         +1  -0      ossp-pkg/srpc/libxds/regression-tests/xds-setbuffer.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/xds-decode.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xds-decode.c
  --- ossp-pkg/srpc/libxds/regression-tests/xds-decode.c	2001/07/16 17:50:08	1.2
  +++ ossp-pkg/srpc/libxds/regression-tests/xds-decode.c	2001/07/18 17:37:49	1.3
  @@ -51,6 +51,11 @@
   	printf("Buffer size passed to engine is zero!\n");
   	exit(1);
   	}
  +    if (args == NULL)
  +	{
  +	printf("args pointer passed to engine is NULL!\n");
  +	exit(1);
  +	}
       if (strncmp(buffer, "Hallo!", 6) != 0)
   	{
   	printf("The contents of the decode buffer are not what we expected.\n");
  Index: ossp-pkg/srpc/libxds/regression-tests/xds-encode.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xds-encode.c
  --- ossp-pkg/srpc/libxds/regression-tests/xds-encode.c	2001/07/16 17:50:08	1.4
  +++ ossp-pkg/srpc/libxds/regression-tests/xds-encode.c	2001/07/18 17:37:49	1.5
  @@ -51,6 +51,11 @@
   	printf("Buffer size passed to engine is zero!\n");
   	exit(1);
   	}
  +    if (args == NULL)
  +	{
  +	printf("args pointer passed to engine is NULL!\n");
  +	exit(1);
  +	}
       strncpy(buffer, "Hallo ", buffer_size);
       return 6;
       }
  Index: ossp-pkg/srpc/libxds/regression-tests/xds-setbuffer.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xds-setbuffer.c
  --- ossp-pkg/srpc/libxds/regression-tests/xds-setbuffer.c	2001/07/16 18:38:53	1.1
  +++ ossp-pkg/srpc/libxds/regression-tests/xds-setbuffer.c	2001/07/18 17:37:49	1.2
  @@ -35,6 +35,7 @@
       assert(xds != NULL);
       assert(buffer != NULL);
       assert(buffer_size != 0);
  +    assert(args != NULL);
       if (buffer_size >= 64)
   	memset(buffer, 'a', 64);
       return 64;

From ossp-cvs-owner@ossp.org  Wed Jul 18 19:38:39 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6IHccT09207; Wed, 18 Jul 2001 19:38:38 +0200 (CEST)
Date: Wed, 18 Jul 2001 19:38:38 +0200 (CEST)
Message-Id: <200107181738.f6IHccT09207@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests Makefile xds-engine-...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   18-Jul-2001 19:38:38
  Branch: HEAD                             Handle: 2001071818383700

  Added files:
    ossp-pkg/srpc/libxds/regression-tests
                            xds-engine-restart.c
  Modified files:
    ossp-pkg/srpc/libxds    vencode.c
    ossp-pkg/srpc/libxds/regression-tests
                            Makefile

  Log:
    When an engine is restarted after buffer enlargement, the original
    value of the ap_list must be restored. Fixed that bug and added a test
    suite that verifies this behavior.

  Summary:
    Revision    Changes     Path
    1.13        +1  -1      ossp-pkg/srpc/libxds/regression-tests/Makefile
    1.1         +111 -0     ossp-pkg/srpc/libxds/regression-tests/xds-engine-restart.c
    1.8         +5  -0      ossp-pkg/srpc/libxds/vencode.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/Makefile
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 Makefile
  --- ossp-pkg/srpc/libxds/regression-tests/Makefile	2001/07/18 16:59:28	1.12
  +++ ossp-pkg/srpc/libxds/regression-tests/Makefile	2001/07/18 17:38:37	1.13
  @@ -11,7 +11,7 @@
   LDFLAGS		= -L..
   
   TESTS		= xds-core.exe xds-find-engine.exe xds-register.exe xds-encode.exe \
  -		  xds-getbuffer.exe xds-decode.exe xds-setbuffer.exe \
  +		  xds-getbuffer.exe xds-decode.exe xds-setbuffer.exe xds-engine-restart.exe \
   		  xdr-uint32.exe xdr-int32.exe xdr-uint64.exe xdr-int64.exe
   
   .SUFFIXES:
  Index: ossp-pkg/srpc/libxds/regression-tests/xds-engine-restart.c
  ============================================================
  $ cvs update -p -r1.1 xds-engine-restart.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <stdio.h>
  #include <string.h>
  #include "../internal.h"
  
  static int dummy_engine(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
      {
      if (xds == NULL)
  	{
  	printf("XDS context isn't passed through to registered engine.\n");
  	exit(1);
  	}
      if (engine_context != (void*)42)
  	{
  	printf("Engine context isn't passed through to registered engine.\n");
  	exit(1);
  	}
      if (buffer == NULL)
  	{
  	printf("Buffer passed to engine is NULL.\n");
  	exit(1);
  	}
      if (buffer_size == 0)
  	{
  	printf("Buffer size passed to engine is zero!\n");
  	exit(1);
  	}
      if (args == NULL)
  	{
  	printf("args pointer passed to engine is NULL!\n");
  	exit(1);
  	}
      if (va_arg(*args, int) != 42)
  	{
  	printf("The varadic argument is not what the engine expected!\n");
  	exit(1);
  	}
      return 64;
      }
  
  int main()
      {
      xds_t* xds;
      char*  buffer;
      size_t buffer_size;
  
      /* Create an XDS context and set a buffer that's too small for the
         first encode() call. Then call encode() with two parameters:
         the one the engine is expecting and a different one after that.
         The engine will complain if it sees the second value -- what
         would mean that the args parameter was not resetted to the
         original value before the engine is restarted after buffer
         enlargement. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL)
  	{
  	printf("Failed to initialize XDS context.\n");
  	return 1;
  	}
      if (xds_register(xds, "int", &dummy_engine, (void*)42) != XDS_OK)
  	{
  	printf("Failed to register my encoding engines.\n");
  	return 1;
  	}
      buffer = malloc(32);
      if (buffer == NULL)
          {
          printf("malloc() failed!\n");
          return 1;
          }
      buffer_size = 32;
      if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK)
          {
          printf("xds_setbuffer() failed!\n");
          return 1;
          }
      if (xds_encode(xds, "int", 42, 13) != XDS_OK)
  	{
  	printf("xds_encode() failed!");
  	return 1;
  	}
      xds_destroy(xds);
      return 0;
      }
  Index: ossp-pkg/srpc/libxds/vencode.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 vencode.c
  --- ossp-pkg/srpc/libxds/vencode.c	2001/07/16 18:31:36	1.7
  +++ ossp-pkg/srpc/libxds/vencode.c	2001/07/18 17:38:37	1.8
  @@ -34,6 +34,7 @@
   
   int xds_vencode(xds_t* xds, const char* fmt_arg, va_list args)
       {
  +    va_list args_backup;
       char* name;
       char* p;
       char* fmt;
  @@ -111,6 +112,7 @@
   		do
   		    {
   		    printf("Executing engine '%s' ...\n", name);
  +		    args_backup = args;
   		    rc = (*xds->engines[pos].engine)(xds,
   						     xds->engines[pos].context,
   						     xds->buffer + xds->buffer_len,
  @@ -123,7 +125,10 @@
   			int rc2;
   
   			if (rc > xds->buffer_capacity - xds->buffer_len)
  +			    {
   			    restart_engine = (1==1);
  +			    args = args_backup;
  +			    }
   			else
   			    restart_engine = (1!=1);
   

From ossp-cvs-owner@ossp.org  Wed Jul 18 19:49:53 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6IHnqD10528; Wed, 18 Jul 2001 19:49:52 +0200 (CEST)
Date: Wed, 18 Jul 2001 19:49:52 +0200 (CEST)
Message-Id: <200107181749.f6IHnqD10528@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds find-engine.c internal.h setbuffer.c ...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   18-Jul-2001 19:49:52
  Branch: HEAD                             Handle: 2001071818495100

  Modified files:
    ossp-pkg/srpc/libxds    find-engine.c internal.h setbuffer.c vencode.c

  Log:
    Added XDS_TRUE and XDS_FALSE defines and started using them in the
    sources.

  Summary:
    Revision    Changes     Path
    1.3         +2  -2      ossp-pkg/srpc/libxds/find-engine.c
    1.6         +3  -0      ossp-pkg/srpc/libxds/internal.h
    1.5         +2  -2      ossp-pkg/srpc/libxds/setbuffer.c
    1.9         +4  -4      ossp-pkg/srpc/libxds/vencode.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/find-engine.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 find-engine.c
  --- ossp-pkg/srpc/libxds/find-engine.c	2001/07/08 15:22:00	1.2
  +++ ossp-pkg/srpc/libxds/find-engine.c	2001/07/18 17:49:51	1.3
  @@ -53,7 +53,7 @@
   	else if(rc == 0)
   	    {			/* found it */
   	    *pos = half;
  -	    return (1 == 1);
  +	    return XDS_TRUE;
   	    }
   	else
   	    {
  @@ -63,5 +63,5 @@
   	}
   
       *pos = first;
  -    return (1 != 1);
  +    return XDS_FALSE;
       }
  Index: ossp-pkg/srpc/libxds/internal.h
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 internal.h
  --- ossp-pkg/srpc/libxds/internal.h	2001/07/09 17:21:36	1.5
  +++ ossp-pkg/srpc/libxds/internal.h	2001/07/18 17:49:51	1.6
  @@ -32,6 +32,9 @@
   
   #include "xds.h"
   
  +#define XDS_TRUE (1==1)
  +#define XDS_FALSE (1!=1)
  +
   #define XDS_INITIAL_BUFFER_CAPACITY  512
   #define XDS_INITIAL_ENGINES_CAPACITY  32
   
  Index: ossp-pkg/srpc/libxds/setbuffer.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 setbuffer.c
  --- ossp-pkg/srpc/libxds/setbuffer.c	2001/07/09 19:20:58	1.4
  +++ ossp-pkg/srpc/libxds/setbuffer.c	2001/07/18 17:49:51	1.5
  @@ -52,13 +52,13 @@
   	    xds->buffer_capacity = 0;
   	else
   	    xds->buffer_capacity = buffer_len;
  -	xds->we_own_buffer = (1==1);
  +	xds->we_own_buffer = XDS_TRUE;
   	}
       else
   	{
   	xds->buffer = buffer;
   	xds->buffer_capacity = buffer_len;
  -	xds->we_own_buffer = (1!=1);
  +	xds->we_own_buffer = XDS_FALSE;
   	}
   
       return XDS_OK;
  Index: ossp-pkg/srpc/libxds/vencode.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 vencode.c
  --- ossp-pkg/srpc/libxds/vencode.c	2001/07/18 17:38:37	1.8
  +++ ossp-pkg/srpc/libxds/vencode.c	2001/07/18 17:49:51	1.9
  @@ -64,7 +64,7 @@
   	    return rc;
   	printf("Setting up buffer with capacity %d byte.\n", xds->buffer_capacity);
   	xds->buffer_len    = 0;
  -	xds->we_own_buffer = (1==1);
  +	xds->we_own_buffer = XDS_FALSE;
   	}
   
       /* Ensure the buffer has free space. */
  @@ -126,11 +126,11 @@
   
   			if (rc > xds->buffer_capacity - xds->buffer_len)
   			    {
  -			    restart_engine = (1==1);
  +			    restart_engine = XDS_TRUE;
   			    args = args_backup;
   			    }
   			else
  -			    restart_engine = (1!=1);
  +			    restart_engine = XDS_FALSE;
   
   			if (!xds->we_own_buffer)
   			    {
  @@ -153,7 +153,7 @@
   			}
   		    else
   			{
  -			restart_engine = (1!=1);
  +			restart_engine = XDS_FALSE;
   			xds->buffer_len += rc;
   			}
   		    }

From ossp-cvs-owner@ossp.org  Wed Jul 18 20:26:35 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6IIQYT14874; Wed, 18 Jul 2001 20:26:34 +0200 (CEST)
Date: Wed, 18 Jul 2001 20:26:34 +0200 (CEST)
Message-Id: <200107181826.f6IIQYT14874@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile ossp-pkg/srpc/libxds/regress...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   18-Jul-2001 20:26:34
  Branch: HEAD                             Handle: 2001071819263201

  Added files:
    ossp-pkg/srpc/libxds    xdr-decode-int.c
  Modified files:
    ossp-pkg/srpc/libxds    Makefile xds.h
    ossp-pkg/srpc/libxds/regression-tests
                            xdr-int32.c xdr-int64.c xdr-uint32.c xdr-uint64.c

  Log:
    Implemented decoding engines for the integer data types and extended
    the existing test suites to verify them.

  Summary:
    Revision    Changes     Path
    1.15        +3  -2      ossp-pkg/srpc/libxds/Makefile
    1.2         +36 -0      ossp-pkg/srpc/libxds/regression-tests/xdr-int32.c
    1.2         +36 -0      ossp-pkg/srpc/libxds/regression-tests/xdr-int64.c
    1.2         +36 -0      ossp-pkg/srpc/libxds/regression-tests/xdr-uint32.c
    1.2         +36 -0      ossp-pkg/srpc/libxds/regression-tests/xdr-uint64.c
    1.1         +183 -0     ossp-pkg/srpc/libxds/xdr-decode-int.c
    1.19        +5  -0      ossp-pkg/srpc/libxds/xds.h
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 Makefile
  --- ossp-pkg/srpc/libxds/Makefile	2001/07/18 11:30:19	1.14
  +++ ossp-pkg/srpc/libxds/Makefile	2001/07/18 18:26:32	1.15
  @@ -5,7 +5,8 @@
   AR		= ar
   RANLIB 		= ranlib
   
  -WARNFLAGS	= -Wall -ansi -pedantic -Wshadow -Wpointer-arith -Wcast-align -Winline -Wmissing-prototypes -Wmissing-declarations -Wnested-externs
  +WARNFLAGS	= -Wall -ansi -pedantic -Wshadow -Wpointer-arith -Wcast-align -Winline -Wmissing-prototypes \
  +		  -Wmissing-declarations -Wnested-externs
   OPTFLAGS	= -O3 -pipe
   
   CPPFLAGS	= -D_GNU_SOURCE
  @@ -15,7 +16,7 @@
   
   OBJS		= decode.o destroy.o encode.o getbuffer.o init.o register.o \
   		  setbuffer.o unregister.o vdecode.o vencode.o find-engine.o \
  -		  set-capacity.o xdr-encode-int.o
  +		  set-capacity.o xdr-encode-int.o xdr-decode-int.o
   
   .c.o:
   	$(CC) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CFLAGS) -c $<
  Index: ossp-pkg/srpc/libxds/regression-tests/xdr-int32.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xdr-int32.c
  --- ossp-pkg/srpc/libxds/regression-tests/xdr-int32.c	2001/07/18 11:29:46	1.1
  +++ ossp-pkg/srpc/libxds/regression-tests/xdr-int32.c	2001/07/18 18:26:33	1.2
  @@ -102,6 +102,42 @@
   	return 1;
   	}
   
  +    /* Now we decode the values again using the XDS implementation and
  +       compare them to our original values. Obviously, they should not
  +       differ. */
  +
  +    xds = xds_init(XDS_DECODE);
  +    if (xds == NULL)
  +	{
  +	printf("Failed to initialize XDS context.\n");
  +	return 1;
  +	}
  +    if (xds_register(xds, "int", &xdr_decode_int32, NULL) != XDS_OK)
  +	{
  +	printf("Failed to register my decoding engines.\n");
  +	return 1;
  +	}
  +    if (xds_setbuffer(xds, XDS_GIFT, xds_buf, xds_buf_size) != XDS_OK)
  +	{
  +	printf("setbuffer() failed.\n");
  +	return 1;
  +	}
  +    for (i = 0; i < sizeof(values)/sizeof(int32_t); ++i)
  +	{
  +	int32_t tmp;
  +	if (xds_decode(xds, "int", &tmp) != XDS_OK)
  +	    {
  +	    printf("xds_encode() failed for the %d value!", i);
  +	    return 1;
  +	    }
  +	if (values[i] != tmp)
  +	    {
  +	    printf("The %dth value has not been decoded correctly!", i);
  +	    return 1;
  +	    }
  +	}
  +    xds_destroy(xds);
  +
       /* Everything went fine. */
   
       return 0;
  Index: ossp-pkg/srpc/libxds/regression-tests/xdr-int64.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xdr-int64.c
  --- ossp-pkg/srpc/libxds/regression-tests/xdr-int64.c	2001/07/18 16:59:28	1.1
  +++ ossp-pkg/srpc/libxds/regression-tests/xdr-int64.c	2001/07/18 18:26:33	1.2
  @@ -102,6 +102,42 @@
   	return 1;
   	}
   
  +    /* Now we decode the values again using the XDS implementation and
  +       compare them to our original values. Obviously, they should not
  +       differ. */
  +
  +    xds = xds_init(XDS_DECODE);
  +    if (xds == NULL)
  +	{
  +	printf("Failed to initialize XDS context.\n");
  +	return 1;
  +	}
  +    if (xds_register(xds, "int", &xdr_decode_int64, NULL) != XDS_OK)
  +	{
  +	printf("Failed to register my decoding engines.\n");
  +	return 1;
  +	}
  +    if (xds_setbuffer(xds, XDS_GIFT, xds_buf, xds_buf_size) != XDS_OK)
  +	{
  +	printf("setbuffer() failed.\n");
  +	return 1;
  +	}
  +    for (i = 0; i < sizeof(values)/sizeof(int64_t); ++i)
  +	{
  +	int64_t tmp;
  +	if (xds_decode(xds, "int", &tmp) != XDS_OK)
  +	    {
  +	    printf("xds_encode() failed for the %d value!", i);
  +	    return 1;
  +	    }
  +	if (values[i] != tmp)
  +	    {
  +	    printf("The %dth value has not been decoded correctly!", i);
  +	    return 1;
  +	    }
  +	}
  +    xds_destroy(xds);
  +
       /* Everything went fine. */
   
       return 0;
  Index: ossp-pkg/srpc/libxds/regression-tests/xdr-uint32.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xdr-uint32.c
  --- ossp-pkg/srpc/libxds/regression-tests/xdr-uint32.c	2001/07/18 11:29:46	1.1
  +++ ossp-pkg/srpc/libxds/regression-tests/xdr-uint32.c	2001/07/18 18:26:33	1.2
  @@ -101,6 +101,42 @@
   	return 1;
   	}
   
  +    /* Now we decode the values again using the XDS implementation and
  +       compare them to our original values. Obviously, they should not
  +       differ. */
  +
  +    xds = xds_init(XDS_DECODE);
  +    if (xds == NULL)
  +	{
  +	printf("Failed to initialize XDS context.\n");
  +	return 1;
  +	}
  +    if (xds_register(xds, "uint", &xdr_decode_uint32, NULL) != XDS_OK)
  +	{
  +	printf("Failed to register my decoding engines.\n");
  +	return 1;
  +	}
  +    if (xds_setbuffer(xds, XDS_GIFT, xds_buf, xds_buf_size) != XDS_OK)
  +	{
  +	printf("setbuffer() failed.\n");
  +	return 1;
  +	}
  +    for (i = 0; i < sizeof(values)/sizeof(u_int32_t); ++i)
  +	{
  +	u_int32_t tmp;
  +	if (xds_decode(xds, "uint", &tmp) != XDS_OK)
  +	    {
  +	    printf("xds_encode() failed for the %d value!", i);
  +	    return 1;
  +	    }
  +	if (values[i] != tmp)
  +	    {
  +	    printf("The %dth value has not been decoded correctly!", i);
  +	    return 1;
  +	    }
  +	}
  +    xds_destroy(xds);
  +
       /* Everything went fine. */
   
       return 0;
  Index: ossp-pkg/srpc/libxds/regression-tests/xdr-uint64.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xdr-uint64.c
  --- ossp-pkg/srpc/libxds/regression-tests/xdr-uint64.c	2001/07/18 16:59:28	1.1
  +++ ossp-pkg/srpc/libxds/regression-tests/xdr-uint64.c	2001/07/18 18:26:33	1.2
  @@ -101,6 +101,42 @@
   	return 1;
   	}
   
  +    /* Now we decode the values again using the XDS implementation and
  +       compare them to our original values. Obviously, they should not
  +       differ. */
  +
  +    xds = xds_init(XDS_DECODE);
  +    if (xds == NULL)
  +	{
  +	printf("Failed to initialize XDS context.\n");
  +	return 1;
  +	}
  +    if (xds_register(xds, "uint", &xdr_decode_uint64, NULL) != XDS_OK)
  +	{
  +	printf("Failed to register my decoding engines.\n");
  +	return 1;
  +	}
  +    if (xds_setbuffer(xds, XDS_GIFT, xds_buf, xds_buf_size) != XDS_OK)
  +	{
  +	printf("setbuffer() failed.\n");
  +	return 1;
  +	}
  +    for (i = 0; i < sizeof(values)/sizeof(u_int64_t); ++i)
  +	{
  +	u_int64_t tmp;
  +	if (xds_decode(xds, "uint", &tmp) != XDS_OK)
  +	    {
  +	    printf("xds_encode() failed for the %d value!", i);
  +	    return 1;
  +	    }
  +	if (values[i] != tmp)
  +	    {
  +	    printf("The %dth value has not been decoded correctly!", i);
  +	    return 1;
  +	    }
  +	}
  +    xds_destroy(xds);
  +
       /* Everything went fine. */
   
       return 0;
  Index: ossp-pkg/srpc/libxds/xdr-decode-int.c
  ============================================================
  $ cvs update -p -r1.1 xdr-decode-int.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <assert.h>
  #include "internal.h"
  
  int xdr_decode_int32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
      {
      int32_t*  value;
      u_int32_t tmp;
  
      /* Consistency checks. */
  
      assert(xds != NULL);
      assert(buffer != NULL);
      assert(args != NULL);
      if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  	return XDS_ERR_INVALID_ARG;
      if (buffer_size < 4)
  	return XDS_ERR_UNDERFLOW;
  
      /* Get value and format it into the buffer. */
  
      value = va_arg(*args, int32_t*);
      assert(value != NULL);
  
      if (((u_int8_t*)buffer)[0] & 0x80)
  	{			/* negative number */
  	tmp  = ((u_int8_t*)buffer)[0]; tmp = tmp << 8;
  	tmp += ((u_int8_t*)buffer)[1]; tmp = tmp << 8;
  	tmp += ((u_int8_t*)buffer)[2]; tmp = tmp << 8;
  	tmp += ((u_int8_t*)buffer)[3];
  	tmp = 0 - tmp;
  	*value = 0 - (int32_t)tmp;
  	}
      else
  	{			/* positive number */
  	*value  = ((u_int8_t*)buffer)[0]; *value = *value << 8;
  	*value += ((u_int8_t*)buffer)[1]; *value = *value << 8;
  	*value += ((u_int8_t*)buffer)[2]; *value = *value << 8;
  	*value += ((u_int8_t*)buffer)[3];
  	}
  
      /* Done. */
  
      return 4;
      }
  
  int xdr_decode_uint32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
      {
      u_int32_t*  value;
  
      /* Consistency checks. */
  
      assert(xds != NULL);
      assert(buffer != NULL);
      assert(args != NULL);
      if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  	return XDS_ERR_INVALID_ARG;
      if (buffer_size < 4)
  	return XDS_ERR_UNDERFLOW;
  
      /* Get value and format it into the buffer. */
  
      value = va_arg(*args, u_int32_t*);
      assert(value != NULL);
  
      *value  = ((u_int8_t*)buffer)[0]; *value = *value << 8;
      *value += ((u_int8_t*)buffer)[1]; *value = *value << 8;
      *value += ((u_int8_t*)buffer)[2]; *value = *value << 8;
      *value += ((u_int8_t*)buffer)[3];
  
      /* Done. */
  
      return 4;
      }
  
  int xdr_decode_int64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
      {
      int64_t*  value;
      u_int64_t tmp;
  
      /* Consistency checks. */
  
      assert(xds != NULL);
      assert(buffer != NULL);
      assert(args != NULL);
      if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  	return XDS_ERR_INVALID_ARG;
      if (buffer_size < 8)
  	return XDS_ERR_UNDERFLOW;
  
      /* Get value and format it into the buffer. */
  
      value = va_arg(*args, int64_t*);
      assert(value != NULL);
  
      if (((u_int8_t*)buffer)[0] & 0x80)
  	{			/* negative number */
  	tmp  = ((u_int8_t*)buffer)[0]; tmp = tmp << 8;
  	tmp += ((u_int8_t*)buffer)[1]; tmp = tmp << 8;
  	tmp += ((u_int8_t*)buffer)[2]; tmp = tmp << 8;
  	tmp += ((u_int8_t*)buffer)[3]; tmp = tmp << 8;
  	tmp += ((u_int8_t*)buffer)[4]; tmp = tmp << 8;
  	tmp += ((u_int8_t*)buffer)[5]; tmp = tmp << 8;
  	tmp += ((u_int8_t*)buffer)[6]; tmp = tmp << 8;
  	tmp += ((u_int8_t*)buffer)[7];
  	tmp = 0 - tmp;
  	*value = 0 - (int64_t)tmp;
  	}
      else
  	{			/* positive number */
  	*value  = ((u_int8_t*)buffer)[0]; *value = *value << 8;
  	*value += ((u_int8_t*)buffer)[1]; *value = *value << 8;
  	*value += ((u_int8_t*)buffer)[2]; *value = *value << 8;
  	*value += ((u_int8_t*)buffer)[3]; *value = *value << 8;
  	*value += ((u_int8_t*)buffer)[4]; *value = *value << 8;
  	*value += ((u_int8_t*)buffer)[5]; *value = *value << 8;
  	*value += ((u_int8_t*)buffer)[6]; *value = *value << 8;
  	*value += ((u_int8_t*)buffer)[7];
  	}
  
      /* Done. */
  
      return 8;
      }
  
  int xdr_decode_uint64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
      {
      u_int64_t*  value;
  
      /* Consistency checks. */
  
      assert(xds != NULL);
      assert(buffer != NULL);
      assert(args != NULL);
      if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  	return XDS_ERR_INVALID_ARG;
      if (buffer_size < 8)
  	return XDS_ERR_UNDERFLOW;
  
      /* Get value and format it into the buffer. */
  
      value = va_arg(*args, u_int64_t*);
      assert(value != NULL);
  
      *value  = ((u_int8_t*)buffer)[0]; *value = *value << 8;
      *value += ((u_int8_t*)buffer)[1]; *value = *value << 8;
      *value += ((u_int8_t*)buffer)[2]; *value = *value << 8;
      *value += ((u_int8_t*)buffer)[3]; *value = *value << 8;
      *value += ((u_int8_t*)buffer)[4]; *value = *value << 8;
      *value += ((u_int8_t*)buffer)[5]; *value = *value << 8;
      *value += ((u_int8_t*)buffer)[6]; *value = *value << 8;
      *value += ((u_int8_t*)buffer)[7];
  
      /* Done. */
  
      return 8;
      }
  Index: ossp-pkg/srpc/libxds/xds.h
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 xds.h
  --- ossp-pkg/srpc/libxds/xds.h	2001/07/18 16:59:27	1.18
  +++ ossp-pkg/srpc/libxds/xds.h	2001/07/18 18:26:32	1.19
  @@ -75,4 +75,9 @@
   int xdr_encode_uint64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
   int xdr_encode_int64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
   
  +int xdr_decode_uint32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  +int xdr_decode_int32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  +int xdr_decode_uint64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  +int xdr_decode_int64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  +
   #endif /* !defined(__LIBXDS_H__) */

From ossp-cvs-owner@ossp.org  Wed Jul 18 20:58:48 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6IIwlh18883; Wed, 18 Jul 2001 20:58:47 +0200 (CEST)
Date: Wed, 18 Jul 2001 20:58:47 +0200 (CEST)
Message-Id: <200107181858.f6IIwlh18883@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests xdr-int32.c xdr-int6...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   18-Jul-2001 20:58:47
  Branch: HEAD                             Handle: 2001071819584600

  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            xdr-int32.c xdr-int64.c xdr-uint32.c xdr-uint64.c

  Log:
    Added missing linefeed at the end of printf() output.

  Summary:
    Revision    Changes     Path
    1.3         +3  -3      ossp-pkg/srpc/libxds/regression-tests/xdr-int32.c
    1.3         +3  -3      ossp-pkg/srpc/libxds/regression-tests/xdr-int64.c
    1.3         +3  -3      ossp-pkg/srpc/libxds/regression-tests/xdr-uint32.c
    1.3         +3  -3      ossp-pkg/srpc/libxds/regression-tests/xdr-uint64.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/xdr-int32.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xdr-int32.c
  --- ossp-pkg/srpc/libxds/regression-tests/xdr-int32.c	2001/07/18 18:26:33	1.2
  +++ ossp-pkg/srpc/libxds/regression-tests/xdr-int32.c	2001/07/18 18:58:46	1.3
  @@ -78,7 +78,7 @@
   	{
   	if (xds_encode(xds, "int", values[i]) != XDS_OK)
   	    {
  -	    printf("xds_encode(values[%d]) failed!", i);
  +	    printf("xds_encode(values[%d]) failed!\n", i);
   	    return 1;
   	    }
   	}
  @@ -127,12 +127,12 @@
   	int32_t tmp;
   	if (xds_decode(xds, "int", &tmp) != XDS_OK)
   	    {
  -	    printf("xds_encode() failed for the %d value!", i);
  +	    printf("xds_encode() failed for the %d value!\n", i);
   	    return 1;
   	    }
   	if (values[i] != tmp)
   	    {
  -	    printf("The %dth value has not been decoded correctly!", i);
  +	    printf("The %dth value has not been decoded correctly!\n", i);
   	    return 1;
   	    }
   	}
  Index: ossp-pkg/srpc/libxds/regression-tests/xdr-int64.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xdr-int64.c
  --- ossp-pkg/srpc/libxds/regression-tests/xdr-int64.c	2001/07/18 18:26:33	1.2
  +++ ossp-pkg/srpc/libxds/regression-tests/xdr-int64.c	2001/07/18 18:58:46	1.3
  @@ -78,7 +78,7 @@
   	{
   	if (xds_encode(xds, "int", values[i]) != XDS_OK)
   	    {
  -	    printf("xds_encode(values[%d]) failed!", i);
  +	    printf("xds_encode(values[%d]) failed!\n", i);
   	    return 1;
   	    }
   	}
  @@ -127,12 +127,12 @@
   	int64_t tmp;
   	if (xds_decode(xds, "int", &tmp) != XDS_OK)
   	    {
  -	    printf("xds_encode() failed for the %d value!", i);
  +	    printf("xds_encode() failed for the %d value!\n", i);
   	    return 1;
   	    }
   	if (values[i] != tmp)
   	    {
  -	    printf("The %dth value has not been decoded correctly!", i);
  +	    printf("The %dth value has not been decoded correctly!\n", i);
   	    return 1;
   	    }
   	}
  Index: ossp-pkg/srpc/libxds/regression-tests/xdr-uint32.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xdr-uint32.c
  --- ossp-pkg/srpc/libxds/regression-tests/xdr-uint32.c	2001/07/18 18:26:33	1.2
  +++ ossp-pkg/srpc/libxds/regression-tests/xdr-uint32.c	2001/07/18 18:58:46	1.3
  @@ -77,7 +77,7 @@
   	{
   	if (xds_encode(xds, "uint", values[i]) != XDS_OK)
   	    {
  -	    printf("xds_encode(values[%d]) failed!", i);
  +	    printf("xds_encode(values[%d]) failed!\n", i);
   	    return 1;
   	    }
   	}
  @@ -126,12 +126,12 @@
   	u_int32_t tmp;
   	if (xds_decode(xds, "uint", &tmp) != XDS_OK)
   	    {
  -	    printf("xds_encode() failed for the %d value!", i);
  +	    printf("xds_encode() failed for the %d value!\n", i);
   	    return 1;
   	    }
   	if (values[i] != tmp)
   	    {
  -	    printf("The %dth value has not been decoded correctly!", i);
  +	    printf("The %dth value has not been decoded correctly!\n", i);
   	    return 1;
   	    }
   	}
  Index: ossp-pkg/srpc/libxds/regression-tests/xdr-uint64.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xdr-uint64.c
  --- ossp-pkg/srpc/libxds/regression-tests/xdr-uint64.c	2001/07/18 18:26:33	1.2
  +++ ossp-pkg/srpc/libxds/regression-tests/xdr-uint64.c	2001/07/18 18:58:46	1.3
  @@ -77,7 +77,7 @@
   	{
   	if (xds_encode(xds, "uint", values[i]) != XDS_OK)
   	    {
  -	    printf("xds_encode(values[%d]) failed!", i);
  +	    printf("xds_encode(values[%d]) failed!\n", i);
   	    return 1;
   	    }
   	}
  @@ -126,12 +126,12 @@
   	u_int64_t tmp;
   	if (xds_decode(xds, "uint", &tmp) != XDS_OK)
   	    {
  -	    printf("xds_encode() failed for the %d value!", i);
  +	    printf("xds_encode() failed for the %d value!\n", i);
   	    return 1;
   	    }
   	if (values[i] != tmp)
   	    {
  -	    printf("The %dth value has not been decoded correctly!", i);
  +	    printf("The %dth value has not been decoded correctly!\n", i);
   	    return 1;
   	    }
   	}

From ossp-cvs-owner@ossp.org  Wed Jul 18 21:00:42 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6IJ0eL19398; Wed, 18 Jul 2001 21:00:40 +0200 (CEST)
Date: Wed, 18 Jul 2001 21:00:40 +0200 (CEST)
Message-Id: <200107181900.f6IJ0eL19398@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests xds-getbuffer.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   18-Jul-2001 21:00:40
  Branch: HEAD                             Handle: 2001071820004000

  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            xds-getbuffer.c

  Log:
    Added missing linefeed at the end of printf() output.

  Summary:
    Revision    Changes     Path
    1.4         +8  -8      ossp-pkg/srpc/libxds/regression-tests/xds-getbuffer.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/xds-getbuffer.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xds-getbuffer.c
  --- ossp-pkg/srpc/libxds/regression-tests/xds-getbuffer.c	2001/07/16 17:50:08	1.3
  +++ ossp-pkg/srpc/libxds/regression-tests/xds-getbuffer.c	2001/07/18 19:00:40	1.4
  @@ -67,22 +67,22 @@
   
       if (xds_encode(xds, "text text") != XDS_OK)
   	{
  -	printf("xds_encode() failed!");
  +	printf("xds_encode() failed!\n");
   	return 1;
   	}
       if (xds_getbuffer(xds, XDS_GIFT, (void**)&old, &old_len) != XDS_OK)
   	{
  -	printf("xds_getbuffer() failed for the first buffer!");
  +	printf("xds_getbuffer() failed for the first buffer!\n");
   	return 1;
   	}
       if (xds_encode(xds, "text") != XDS_OK)
   	{
  -	printf("xds_encode() failed!");
  +	printf("xds_encode() failed!\n");
   	return 1;
   	}
       if (xds_getbuffer(xds, XDS_GIFT, (void**)&new, &new_len) != XDS_OK)
   	{
  -	printf("xds_getbuffer() failed for the second buffer!");
  +	printf("xds_getbuffer() failed for the second buffer!\n");
   	return 1;
   	}
       if ((strcmp(old, "Hallo!Hallo!") != 0 || old_len != 12) &&
  @@ -100,12 +100,12 @@
   
       if (xds_encode(xds, "text text") != XDS_OK)
   	{
  -	printf("xds_encode() failed!");
  +	printf("xds_encode() failed!\n");
   	return 1;
   	}
       if (xds_getbuffer(xds, XDS_LOAN, (void**)&old, &old_len) != XDS_OK)
   	{
  -	printf("xds_getbuffer() failed for the first buffer!");
  +	printf("xds_getbuffer() failed for the first buffer!\n");
   	return 1;
   	}
       if (strcmp(old, "Hallo!Hallo!") != 0 || old_len != 12)
  @@ -115,12 +115,12 @@
   	}
       if (xds_encode(xds, "text") != XDS_OK)
   	{
  -	printf("xds_encode() failed!");
  +	printf("xds_encode() failed!\n");
   	return 1;
   	}
       if (xds_getbuffer(xds, XDS_LOAN, (void**)&new, &new_len) != XDS_OK)
   	{
  -	printf("xds_getbuffer() failed for the second buffer!");
  +	printf("xds_getbuffer() failed for the second buffer!\n");
   	return 1;
   	}
       if (old != new)

From ossp-cvs-owner@ossp.org  Wed Jul 18 21:03:19 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6IJ3If19598; Wed, 18 Jul 2001 21:03:18 +0200 (CEST)
Date: Wed, 18 Jul 2001 21:03:18 +0200 (CEST)
Message-Id: <200107181903.f6IJ3If19598@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests Makefile xds-mystruc...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   18-Jul-2001 21:03:18
  Branch: HEAD                             Handle: 2001071820031700

  Added files:
    ossp-pkg/srpc/libxds/regression-tests
                            xds-mystruct.c
  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            Makefile

  Log:
    Added test suite that will verify that it is okay to call xds_encode()
    in an encoding engine and xds_decode() in a decoding engine.

  Summary:
    Revision    Changes     Path
    1.14        +2  -1      ossp-pkg/srpc/libxds/regression-tests/Makefile
    1.1         +165 -0     ossp-pkg/srpc/libxds/regression-tests/xds-mystruct.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/Makefile
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 Makefile
  --- ossp-pkg/srpc/libxds/regression-tests/Makefile	2001/07/18 17:38:37	1.13
  +++ ossp-pkg/srpc/libxds/regression-tests/Makefile	2001/07/18 19:03:17	1.14
  @@ -12,7 +12,8 @@
   
   TESTS		= xds-core.exe xds-find-engine.exe xds-register.exe xds-encode.exe \
   		  xds-getbuffer.exe xds-decode.exe xds-setbuffer.exe xds-engine-restart.exe \
  -		  xdr-uint32.exe xdr-int32.exe xdr-uint64.exe xdr-int64.exe
  +		  xdr-uint32.exe xdr-int32.exe xdr-uint64.exe xdr-int64.exe \
  +		  xds-mystruct.exe
   
   .SUFFIXES:
   .SUFFIXES:	.c .exe
  Index: ossp-pkg/srpc/libxds/regression-tests/xds-mystruct.c
  ============================================================
  $ cvs update -p -r1.1 xds-mystruct.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <stdio.h>
  #include <string.h>
  #include <assert.h>
  #include "../internal.h"
  
  struct mystruct
      {
      int32_t   small;
      int64_t   big;
      u_int32_t positive;
      };
  
  static int encode_mystruct_engine(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
      {
      int rc;
      struct mystruct* ms;
  
      assert(xds != NULL);
      assert(buffer != NULL);
      assert(buffer_size != 0);
      assert(args != NULL);
  
      if (buffer_size >= sizeof(struct mystruct))
  	{
  	ms = va_arg(*args, struct mystruct*);
  	rc = xds_encode(xds, "int32 int64 uint32", ms->small, ms->big, ms->positive);
  	if (rc != XDS_OK)
  	    return rc;
  	}
      else
  	return sizeof(struct mystruct);
  
      return 0;
      }
  
  static int decode_mystruct_engine(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
      {
      int rc;
      struct mystruct* ms;
  
      assert(xds != NULL);
      assert(buffer != NULL);
      assert(buffer_size != 0);
      assert(args != NULL);
  
      if (buffer_size >= sizeof(struct mystruct))
  	{
  	ms = va_arg(*args, struct mystruct*);
  	rc = xds_decode(xds, "int32 int64 uint32", &(ms->small), &(ms->big), &(ms->positive));
  	if (rc != XDS_OK)
  	    return rc;
  	}
      else
  	return XDS_ERR_UNDERFLOW;
  
      return 0;
      }
  
  int main()
      {
      xds_t* xds;
      char*  buffer;
      size_t buffer_size;
  
      struct mystruct ms, new_ms;
      ms.small    = -0x1234567;
      ms.big      = -0x1234567890abcdeLL;
      ms.positive = 42;
  
      /* Encode our copy of mystruct using our encoding callback. Then
         get a the buffer and destroy the context again. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL)
  	{
  	printf("Failed to initialize XDS context.\n");
  	return 1;
  	}
      if (xds_register(xds, "mystruct", &encode_mystruct_engine, NULL) != XDS_OK ||
  	xds_register(xds, "int32", &xdr_encode_int32, NULL) != XDS_OK ||
  	xds_register(xds, "int64", &xdr_encode_int64, NULL) != XDS_OK ||
  	xds_register(xds, "uint32", &xdr_encode_uint32, NULL) != XDS_OK)
  	{
  	printf("Failed to register my encoding engines.\n");
  	return 1;
  	}
      if (xds_encode(xds, "mystruct", &ms) != XDS_OK)
  	{
  	printf("xds_encode() failed!\n");
  	return 1;
  	}
      if (xds_getbuffer(xds, XDS_GIFT, (void**)&buffer, &buffer_size) != XDS_OK)
  	{
  	printf("xds_setbuffer() failed!\n");
  	return 1;
  	}
      xds_destroy(xds);
  
      /* Now create a decoding context and decode the whole thing again. */
  
      xds = xds_init(XDS_DECODE);
      if (xds == NULL)
  	{
  	printf("Failed to initialize XDS context.\n");
  	return 1;
  	}
      if (xds_register(xds, "mystruct", &decode_mystruct_engine, NULL) != XDS_OK ||
  	xds_register(xds, "int32", &xdr_decode_int32, NULL) != XDS_OK ||
  	xds_register(xds, "int64", &xdr_decode_int64, NULL) != XDS_OK ||
  	xds_register(xds, "uint32", &xdr_decode_uint32, NULL) != XDS_OK)
  	{
  	printf("Failed to register my decoding engines.\n");
  	return 1;
  	}
      if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK)
  	{
  	printf("xds_setbuffer() failed!\n");
  	return 1;
  	}
      if (xds_decode(xds, "mystruct", &new_ms) != XDS_OK)
  	{
  	printf("xds_decode() failed!\n");
  	return 1;
  	}
      xds_destroy(xds);
  
      /* Both structures must be identical. */
  
      if (memcmp(&ms, &new_ms, sizeof(struct mystruct)) != 0)
  	{
  	printf("Decoded data does not match the original!\n");
  	return 1;
  	}
  
      /* Everything went fine. */
  
      return 0;
      }

From ossp-cvs-owner@ossp.org  Thu Jul 19 08:55:33 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6J6tVN10590; Thu, 19 Jul 2001 08:55:31 +0200 (CEST)
Date: Thu, 19 Jul 2001 08:55:31 +0200 (CEST)
Message-Id: <200107190655.f6J6tVN10590@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xdr-decode-int.c xdr-encode-int.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   19-Jul-2001 08:55:31
  Branch: HEAD                             Handle: 2001071907553000

  Modified files:
    ossp-pkg/srpc/libxds    xdr-decode-int.c xdr-encode-int.c

  Log:
    Including sys/types.h for u_int32_t and others.

  Summary:
    Revision    Changes     Path
    1.2         +1  -0      ossp-pkg/srpc/libxds/xdr-decode-int.c
    1.3         +1  -0      ossp-pkg/srpc/libxds/xdr-encode-int.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xdr-decode-int.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xdr-decode-int.c
  --- ossp-pkg/srpc/libxds/xdr-decode-int.c	2001/07/18 18:26:32	1.1
  +++ ossp-pkg/srpc/libxds/xdr-decode-int.c	2001/07/19 06:55:30	1.2
  @@ -26,6 +26,7 @@
   */
   
   #include <assert.h>
  +#include <sys/types.h>
   #include "internal.h"
   
   int xdr_decode_int32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  Index: ossp-pkg/srpc/libxds/xdr-encode-int.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xdr-encode-int.c
  --- ossp-pkg/srpc/libxds/xdr-encode-int.c	2001/07/18 16:59:27	1.2
  +++ ossp-pkg/srpc/libxds/xdr-encode-int.c	2001/07/19 06:55:30	1.3
  @@ -26,6 +26,7 @@
   */
   
   #include <assert.h>
  +#include <sys/types.h>
   #include "internal.h"
   
   int xdr_encode_int32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)

From ossp-cvs-owner@ossp.org  Thu Jul 19 11:38:44 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6J9cg332162; Thu, 19 Jul 2001 11:38:42 +0200 (CEST)
Date: Thu, 19 Jul 2001 11:38:42 +0200 (CEST)
Message-Id: <200107190938.f6J9cg332162@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests xds-mystruct.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   19-Jul-2001 11:38:42
  Branch: HEAD                             Handle: 2001071910384200

  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            xds-mystruct.c

  Log:
    Include sys/types.h for int32_t and others.

  Summary:
    Revision    Changes     Path
    1.2         +1  -0      ossp-pkg/srpc/libxds/regression-tests/xds-mystruct.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/xds-mystruct.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xds-mystruct.c
  --- ossp-pkg/srpc/libxds/regression-tests/xds-mystruct.c	2001/07/18 19:03:17	1.1
  +++ ossp-pkg/srpc/libxds/regression-tests/xds-mystruct.c	2001/07/19 09:38:42	1.2
  @@ -28,6 +28,7 @@
   #include <stdio.h>
   #include <string.h>
   #include <assert.h>
  +#include <sys/types.h>
   #include "../internal.h"
   
   struct mystruct

From ossp-cvs-owner@ossp.org  Thu Jul 19 11:47:05 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6J9l4j33609; Thu, 19 Jul 2001 11:47:04 +0200 (CEST)
Date: Thu, 19 Jul 2001 11:47:04 +0200 (CEST)
Message-Id: <200107190947.f6J9l4j33609@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests xdr-uint32.c xdr-uin...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   19-Jul-2001 11:47:04
  Branch: HEAD                             Handle: 2001071910470300

  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            xdr-uint32.c xdr-uint64.c

  Log:
    Added stub for XDR routine that's called differently on FreeBSD.

  Summary:
    Revision    Changes     Path
    1.4         +7  -0      ossp-pkg/srpc/libxds/regression-tests/xdr-uint32.c
    1.4         +7  -0      ossp-pkg/srpc/libxds/regression-tests/xdr-uint64.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/xdr-uint32.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xdr-uint32.c
  --- ossp-pkg/srpc/libxds/regression-tests/xdr-uint32.c	2001/07/18 18:58:46	1.3
  +++ ossp-pkg/srpc/libxds/regression-tests/xdr-uint32.c	2001/07/19 09:47:03	1.4
  @@ -31,6 +31,13 @@
   #include <rpc/xdr.h>
   #include "../internal.h"
   
  +#ifdef __FreeBSD__
  +static int xdr_uint32_t(XDR *xdrs, uint32_t *val)
  +    {
  +    return xdr_u_int32_t(xdrs, val);
  +    }
  +#endif
  +
   int main()
       {
       XDR    xdrs;
  Index: ossp-pkg/srpc/libxds/regression-tests/xdr-uint64.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xdr-uint64.c
  --- ossp-pkg/srpc/libxds/regression-tests/xdr-uint64.c	2001/07/18 18:58:46	1.3
  +++ ossp-pkg/srpc/libxds/regression-tests/xdr-uint64.c	2001/07/19 09:47:03	1.4
  @@ -31,6 +31,13 @@
   #include <rpc/xdr.h>
   #include "../internal.h"
   
  +#ifdef __FreeBSD__
  +static int xdr_uint64_t(XDR *xdrs, uint64_t *val)
  +    {
  +    return xdr_u_int64_t(xdrs, val);
  +    }
  +#endif
  +
   int main()
       {
       XDR    xdrs;

From ossp-cvs-owner@ossp.org  Thu Jul 19 13:07:16 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6JB7FA43425; Thu, 19 Jul 2001 13:07:15 +0200 (CEST)
Date: Thu, 19 Jul 2001 13:07:15 +0200 (CEST)
Message-Id: <200107191107.f6JB7FA43425@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   19-Jul-2001 13:07:15
  Branch: HEAD                             Handle: 2001071912071500

  Modified files:
    ossp-pkg/srpc           TODO

  Log:
    Added tags to be used in XML encoding.

  Summary:
    Revision    Changes     Path
    1.6         +6  -4      ossp-pkg/srpc/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/TODO
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 TODO
  --- ossp-pkg/srpc/TODO	2001/07/15 11:48:26	1.5
  +++ ossp-pkg/srpc/TODO	2001/07/19 11:07:15	1.6
  @@ -27,8 +27,8 @@
         - unsigned short
         - int
         - unsigned int
  -      - long 
  -      - unsigned long 
  +      - long
  +      - unsigned long
       o floating point:
         - float
         - double
  @@ -38,7 +38,7 @@
       o string
         - char * (end is NUL)
         - unsigned char * (end is NUL)
  -    o octet-stream 
  +    o octet-stream
         - void * (end is after given length)
       Function prototype is xds_engine_t.
       Function name scheme is:
  @@ -47,6 +47,9 @@
                                [u]string,octets}
     - regression tests for libxds (make check)
   
  +  - XML: <int32>1234</int32>
  +         uint32, int64, uint64,
  +
   o M5 (peti+rse) [1 week until 30-Jul-2001]
     - [peti] documentation for libxds (xds.pod)
     - [rse]  OSSP adjustments for libxds
  @@ -62,4 +65,3 @@
   o M8 (peti+rse) [1 week until 03-Sep-2001]
     - [peti] documentation for libamp
     - [rse]  OSSP adjustments for libamp
  -

From ossp-cvs-owner@ossp.org  Thu Jul 19 14:28:17 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6JCSGL52770; Thu, 19 Jul 2001 14:28:16 +0200 (CEST)
Date: Thu, 19 Jul 2001 14:28:16 +0200 (CEST)
Message-Id: <200107191228.f6JCSGL52770@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile xdr-decode-int.c xdr-decode-...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   19-Jul-2001 14:28:16
  Branch: HEAD                             Handle: 19700101010000995542095

  Added files:
    ossp-pkg/srpc/libxds    xdr-decode-int32.c xdr-decode-int64.c
                            xdr-decode-uint32.c xdr-decode-uint64.c
                            xdr-encode-int32.c xdr-encode-int64.c
                            xdr-encode-uint32.c xdr-encode-uint64.c
  Modified files:
    ossp-pkg/srpc/libxds    Makefile
  Removed files:
    ossp-pkg/srpc/libxds    xdr-decode-int.c xdr-encode-int.c

  Log:
    Split the various encoding and decoding routines into separate files
    so that the linker may pull them in separately.

  Summary:
    Revision    Changes     Path
    1.16        +3  -2      ossp-pkg/srpc/libxds/Makefile
    NONE        +0  -184    ossp-pkg/srpc/libxds/xdr-decode-int.c
    1.1         +72 -0      ossp-pkg/srpc/libxds/xdr-decode-int32.c
    1.1         +80 -0      ossp-pkg/srpc/libxds/xdr-decode-int64.c
    1.1         +59 -0      ossp-pkg/srpc/libxds/xdr-decode-uint32.c
    1.1         +63 -0      ossp-pkg/srpc/libxds/xdr-decode-uint64.c
    NONE        +0  -162    ossp-pkg/srpc/libxds/xdr-encode-int.c
    1.1         +65 -0      ossp-pkg/srpc/libxds/xdr-encode-int32.c
    1.1         +69 -0      ossp-pkg/srpc/libxds/xdr-encode-int64.c
    1.1         +57 -0      ossp-pkg/srpc/libxds/xdr-encode-uint32.c
    1.1         +61 -0      ossp-pkg/srpc/libxds/xdr-encode-uint64.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 Makefile
  --- ossp-pkg/srpc/libxds/Makefile	2001/07/18 18:26:32	1.15
  +++ ossp-pkg/srpc/libxds/Makefile	2001/07/19 12:28:15	1.16
  @@ -16,8 +16,9 @@
   
   OBJS		= decode.o destroy.o encode.o getbuffer.o init.o register.o \
   		  setbuffer.o unregister.o vdecode.o vencode.o find-engine.o \
  -		  set-capacity.o xdr-encode-int.o xdr-decode-int.o
  -
  +		  set-capacity.o  xdr-encode-int32.o xdr-encode-int64.o \
  +		  xdr-encode-uint32.o xdr-encode-uint64.o xdr-decode-int32.o \
  +		  xdr-decode-int64.o xdr-decode-uint32.o xdr-decode-uint64.o
   .c.o:
   	$(CC) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CFLAGS) -c $<
   
    Index: ossp-pkg/srpc/libxds/xdr-decode-int32.c
  ============================================================
  $ cvs update -p -r1.1 xdr-decode-int32.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <assert.h>
  #include <sys/types.h>
  #include "internal.h"
  
  int xdr_decode_int32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
      {
      int32_t*  value;
      u_int32_t tmp;
  
      /* Consistency checks. */
  
      assert(xds != NULL);
      assert(buffer != NULL);
      assert(args != NULL);
      if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  	return XDS_ERR_INVALID_ARG;
      if (buffer_size < 4)
  	return XDS_ERR_UNDERFLOW;
  
      /* Get value and format it into the buffer. */
  
      value = va_arg(*args, int32_t*);
      assert(value != NULL);
  
      if (((u_int8_t*)buffer)[0] & 0x80)
  	{			/* negative number */
  	tmp  = ((u_int8_t*)buffer)[0]; tmp = tmp << 8;
  	tmp += ((u_int8_t*)buffer)[1]; tmp = tmp << 8;
  	tmp += ((u_int8_t*)buffer)[2]; tmp = tmp << 8;
  	tmp += ((u_int8_t*)buffer)[3];
  	tmp = 0 - tmp;
  	*value = 0 - (int32_t)tmp;
  	}
      else
  	{			/* positive number */
  	*value  = ((u_int8_t*)buffer)[0]; *value = *value << 8;
  	*value += ((u_int8_t*)buffer)[1]; *value = *value << 8;
  	*value += ((u_int8_t*)buffer)[2]; *value = *value << 8;
  	*value += ((u_int8_t*)buffer)[3];
  	}
  
      /* Done. */
  
      return 4;
      }
  Index: ossp-pkg/srpc/libxds/xdr-decode-int64.c
  ============================================================
  $ cvs update -p -r1.1 xdr-decode-int64.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <assert.h>
  #include <sys/types.h>
  #include "internal.h"
  
  int xdr_decode_int64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
      {
      int64_t*  value;
      u_int64_t tmp;
  
      /* Consistency checks. */
  
      assert(xds != NULL);
      assert(buffer != NULL);
      assert(args != NULL);
      if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  	return XDS_ERR_INVALID_ARG;
      if (buffer_size < 8)
  	return XDS_ERR_UNDERFLOW;
  
      /* Get value and format it into the buffer. */
  
      value = va_arg(*args, int64_t*);
      assert(value != NULL);
  
      if (((u_int8_t*)buffer)[0] & 0x80)
  	{			/* negative number */
  	tmp  = ((u_int8_t*)buffer)[0]; tmp = tmp << 8;
  	tmp += ((u_int8_t*)buffer)[1]; tmp = tmp << 8;
  	tmp += ((u_int8_t*)buffer)[2]; tmp = tmp << 8;
  	tmp += ((u_int8_t*)buffer)[3]; tmp = tmp << 8;
  	tmp += ((u_int8_t*)buffer)[4]; tmp = tmp << 8;
  	tmp += ((u_int8_t*)buffer)[5]; tmp = tmp << 8;
  	tmp += ((u_int8_t*)buffer)[6]; tmp = tmp << 8;
  	tmp += ((u_int8_t*)buffer)[7];
  	tmp = 0 - tmp;
  	*value = 0 - (int64_t)tmp;
  	}
      else
  	{			/* positive number */
  	*value  = ((u_int8_t*)buffer)[0]; *value = *value << 8;
  	*value += ((u_int8_t*)buffer)[1]; *value = *value << 8;
  	*value += ((u_int8_t*)buffer)[2]; *value = *value << 8;
  	*value += ((u_int8_t*)buffer)[3]; *value = *value << 8;
  	*value += ((u_int8_t*)buffer)[4]; *value = *value << 8;
  	*value += ((u_int8_t*)buffer)[5]; *value = *value << 8;
  	*value += ((u_int8_t*)buffer)[6]; *value = *value << 8;
  	*value += ((u_int8_t*)buffer)[7];
  	}
  
      /* Done. */
  
      return 8;
      }
  Index: ossp-pkg/srpc/libxds/xdr-decode-uint32.c
  ============================================================
  $ cvs update -p -r1.1 xdr-decode-uint32.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <assert.h>
  #include <sys/types.h>
  #include "internal.h"
  
  int xdr_decode_uint32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
      {
      u_int32_t*  value;
  
      /* Consistency checks. */
  
      assert(xds != NULL);
      assert(buffer != NULL);
      assert(args != NULL);
      if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  	return XDS_ERR_INVALID_ARG;
      if (buffer_size < 4)
  	return XDS_ERR_UNDERFLOW;
  
      /* Get value and format it into the buffer. */
  
      value = va_arg(*args, u_int32_t*);
      assert(value != NULL);
  
      *value  = ((u_int8_t*)buffer)[0]; *value = *value << 8;
      *value += ((u_int8_t*)buffer)[1]; *value = *value << 8;
      *value += ((u_int8_t*)buffer)[2]; *value = *value << 8;
      *value += ((u_int8_t*)buffer)[3];
  
      /* Done. */
  
      return 4;
      }
  Index: ossp-pkg/srpc/libxds/xdr-decode-uint64.c
  ============================================================
  $ cvs update -p -r1.1 xdr-decode-uint64.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <assert.h>
  #include <sys/types.h>
  #include "internal.h"
  
  int xdr_decode_uint64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
      {
      u_int64_t*  value;
  
      /* Consistency checks. */
  
      assert(xds != NULL);
      assert(buffer != NULL);
      assert(args != NULL);
      if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  	return XDS_ERR_INVALID_ARG;
      if (buffer_size < 8)
  	return XDS_ERR_UNDERFLOW;
  
      /* Get value and format it into the buffer. */
  
      value = va_arg(*args, u_int64_t*);
      assert(value != NULL);
  
      *value  = ((u_int8_t*)buffer)[0]; *value = *value << 8;
      *value += ((u_int8_t*)buffer)[1]; *value = *value << 8;
      *value += ((u_int8_t*)buffer)[2]; *value = *value << 8;
      *value += ((u_int8_t*)buffer)[3]; *value = *value << 8;
      *value += ((u_int8_t*)buffer)[4]; *value = *value << 8;
      *value += ((u_int8_t*)buffer)[5]; *value = *value << 8;
      *value += ((u_int8_t*)buffer)[6]; *value = *value << 8;
      *value += ((u_int8_t*)buffer)[7];
  
      /* Done. */
  
      return 8;
      }
    Index: ossp-pkg/srpc/libxds/xdr-encode-int32.c
  ============================================================
  $ cvs update -p -r1.1 xdr-encode-int32.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <assert.h>
  #include <sys/types.h>
  #include "internal.h"
  
  int xdr_encode_int32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
      {
      /* Consistency checks. */
  
      assert(xds != NULL);
      assert(buffer != NULL);
      assert(buffer_size != 0);
      assert(args != NULL);
      if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  	return XDS_ERR_INVALID_ARG;
  
      /* Get value and format it into the buffer. */
  
      if (buffer_size >= 4)
  	{
  	u_int32_t tmp;
  	int32_t value = va_arg(*args, u_int32_t);
  	if (value < 0)
  	    {
  	    value = 0 - value;
  	    tmp = 0 - (u_int32_t)value;
  	    }
  	else
  	    tmp = (u_int32_t)value;
  	((u_int8_t*)buffer)[0] = (tmp >> 24) & 0x000000ff;
  	((u_int8_t*)buffer)[1] = (tmp >> 16) & 0x000000ff;
  	((u_int8_t*)buffer)[2] = (tmp >>  8) & 0x000000ff;
  	((u_int8_t*)buffer)[3] = (tmp >>  0) & 0x000000ff;
  	}
  
      /* Done. */
  
      return 4;
      }
  Index: ossp-pkg/srpc/libxds/xdr-encode-int64.c
  ============================================================
  $ cvs update -p -r1.1 xdr-encode-int64.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <assert.h>
  #include <sys/types.h>
  #include "internal.h"
  
  int xdr_encode_int64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
      {
      /* Consistency checks. */
  
      assert(xds != NULL);
      assert(buffer != NULL);
      assert(buffer_size != 0);
      assert(args != NULL);
      if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  	return XDS_ERR_INVALID_ARG;
  
      /* Get value and format it into the buffer. */
  
      if (buffer_size >= 8)
  	{
  	u_int64_t tmp;
  	int64_t value = va_arg(*args, u_int64_t);
  	if (value < 0)
  	    {
  	    value = 0 - value;
  	    tmp = 0 - (u_int64_t)value;
  	    }
  	else
  	    tmp = (u_int64_t)value;
  	((u_int8_t*)buffer)[0] = (tmp >> 56) & 0x000000ff;
  	((u_int8_t*)buffer)[1] = (tmp >> 48) & 0x000000ff;
  	((u_int8_t*)buffer)[2] = (tmp >> 40) & 0x000000ff;
  	((u_int8_t*)buffer)[3] = (tmp >> 32) & 0x000000ff;
  	((u_int8_t*)buffer)[4] = (tmp >> 24) & 0x000000ff;
  	((u_int8_t*)buffer)[5] = (tmp >> 16) & 0x000000ff;
  	((u_int8_t*)buffer)[6] = (tmp >>  8) & 0x000000ff;
  	((u_int8_t*)buffer)[7] = (tmp >>  0) & 0x000000ff;
  	}
  
      /* Done. */
  
      return 8;
      }
  Index: ossp-pkg/srpc/libxds/xdr-encode-uint32.c
  ============================================================
  $ cvs update -p -r1.1 xdr-encode-uint32.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <assert.h>
  #include <sys/types.h>
  #include "internal.h"
  
  int xdr_encode_uint32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
      {
      /* Consistency checks. */
  
      assert(xds != NULL);
      assert(buffer != NULL);
      assert(buffer_size != 0);
      assert(args != NULL);
      if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  	return XDS_ERR_INVALID_ARG;
  
      /* Get value and format it into the buffer. */
  
      if (buffer_size >= 4)
  	{
  	u_int32_t value = va_arg(*args, u_int32_t);
  	((u_int8_t*)buffer)[0] = (value >> 24) & 0x000000ff;
  	((u_int8_t*)buffer)[1] = (value >> 16) & 0x000000ff;
  	((u_int8_t*)buffer)[2] = (value >>  8) & 0x000000ff;
  	((u_int8_t*)buffer)[3] = (value >>  0) & 0x000000ff;
  	}
  
      /* Done. */
  
      return 4;
      }
  Index: ossp-pkg/srpc/libxds/xdr-encode-uint64.c
  ============================================================
  $ cvs update -p -r1.1 xdr-encode-uint64.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <assert.h>
  #include <sys/types.h>
  #include "internal.h"
  
  int xdr_encode_uint64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
      {
      /* Consistency checks. */
  
      assert(xds != NULL);
      assert(buffer != NULL);
      assert(buffer_size != 0);
      assert(args != NULL);
      if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  	return XDS_ERR_INVALID_ARG;
  
      /* Get value and format it into the buffer. */
  
      if (buffer_size >= 8)
  	{
  	u_int64_t value = va_arg(*args, u_int64_t);
  	((u_int8_t*)buffer)[0] = (value >> 56) & 0x000000ff;
  	((u_int8_t*)buffer)[1] = (value >> 48) & 0x000000ff;
  	((u_int8_t*)buffer)[2] = (value >> 40) & 0x000000ff;
  	((u_int8_t*)buffer)[3] = (value >> 32) & 0x000000ff;
  	((u_int8_t*)buffer)[4] = (value >> 24) & 0x000000ff;
  	((u_int8_t*)buffer)[5] = (value >> 16) & 0x000000ff;
  	((u_int8_t*)buffer)[6] = (value >>  8) & 0x000000ff;
  	((u_int8_t*)buffer)[7] = (value >>  0) & 0x000000ff;
  	}
  
      /* Done. */
  
      return 8;
      }

From ossp-cvs-owner@ossp.org  Thu Jul 19 14:28:58 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6JCSv852843; Thu, 19 Jul 2001 14:28:57 +0200 (CEST)
Date: Thu, 19 Jul 2001 14:28:57 +0200 (CEST)
Message-Id: <200107191228.f6JCSv852843@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   19-Jul-2001 14:28:57
  Branch: HEAD                             Handle: 2001071913285700

  Modified files:
    ossp-pkg/srpc/libxds    Makefile

  Log:
    Updated dependencies.

  Summary:
    Revision    Changes     Path
    1.17        +8  -0      ossp-pkg/srpc/libxds/Makefile
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 Makefile
  --- ossp-pkg/srpc/libxds/Makefile	2001/07/19 12:28:15	1.16
  +++ ossp-pkg/srpc/libxds/Makefile	2001/07/19 12:28:57	1.17
  @@ -57,3 +57,11 @@
   unregister.o: internal.h xds.h
   vdecode.o: internal.h xds.h
   vencode.o: internal.h xds.h
  +xdr-decode-int32.o: internal.h xds.h
  +xdr-decode-int64.o: internal.h xds.h
  +xdr-decode-uint32.o: internal.h xds.h
  +xdr-decode-uint64.o: internal.h xds.h
  +xdr-encode-int32.o: internal.h xds.h
  +xdr-encode-int64.o: internal.h xds.h
  +xdr-encode-uint32.o: internal.h xds.h
  +xdr-encode-uint64.o: internal.h xds.h

From ossp-cvs-owner@ossp.org  Thu Jul 19 16:58:29 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6JEwTf70937; Thu, 19 Jul 2001 16:58:29 +0200 (CEST)
Date: Thu, 19 Jul 2001 16:58:29 +0200 (CEST)
Message-Id: <200107191458.f6JEwTf70937@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile ossp-pkg/srpc/libxds/regress...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   19-Jul-2001 16:58:28
  Branch: HEAD                             Handle: 2001071915582701

  Added files:
    ossp-pkg/srpc/libxds    xdr-decode-octedstream.c xdr-encode-octedstream.c
    ossp-pkg/srpc/libxds/regression-tests
                            xdr-octedstream.c
  Modified files:
    ossp-pkg/srpc/libxds    Makefile xds.h
    ossp-pkg/srpc/libxds/regression-tests
                            Makefile

  Log:
    Implemented encoding and decoding of variable length octed streams.

  Summary:
    Revision    Changes     Path
    1.18        +2  -1      ossp-pkg/srpc/libxds/Makefile
    1.15        +2  -2      ossp-pkg/srpc/libxds/regression-tests/Makefile
    1.1         +110 -0     ossp-pkg/srpc/libxds/regression-tests/xdr-octedstream.c
    1.1         +89 -0      ossp-pkg/srpc/libxds/xdr-decode-octedstream.c
    1.1         +71 -0      ossp-pkg/srpc/libxds/xdr-encode-octedstream.c
    1.20        +3  -0      ossp-pkg/srpc/libxds/xds.h
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 Makefile
  --- ossp-pkg/srpc/libxds/Makefile	2001/07/19 12:28:57	1.17
  +++ ossp-pkg/srpc/libxds/Makefile	2001/07/19 14:58:27	1.18
  @@ -18,7 +18,8 @@
   		  setbuffer.o unregister.o vdecode.o vencode.o find-engine.o \
   		  set-capacity.o  xdr-encode-int32.o xdr-encode-int64.o \
   		  xdr-encode-uint32.o xdr-encode-uint64.o xdr-decode-int32.o \
  -		  xdr-decode-int64.o xdr-decode-uint32.o xdr-decode-uint64.o
  +		  xdr-decode-int64.o xdr-decode-uint32.o xdr-decode-uint64.o \
  +		  xdr-encode-octedstream.o xdr-decode-octedstream.o
   .c.o:
   	$(CC) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CFLAGS) -c $<
   
  Index: ossp-pkg/srpc/libxds/regression-tests/Makefile
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 Makefile
  --- ossp-pkg/srpc/libxds/regression-tests/Makefile	2001/07/18 19:03:17	1.14
  +++ ossp-pkg/srpc/libxds/regression-tests/Makefile	2001/07/19 14:58:28	1.15
  @@ -12,8 +12,8 @@
   
   TESTS		= xds-core.exe xds-find-engine.exe xds-register.exe xds-encode.exe \
   		  xds-getbuffer.exe xds-decode.exe xds-setbuffer.exe xds-engine-restart.exe \
  -		  xdr-uint32.exe xdr-int32.exe xdr-uint64.exe xdr-int64.exe \
  -		  xds-mystruct.exe
  +		  xdr-uint32.exe xdr-int32.exe xdr-uint64.exe xdr-int64.exe  \
  +		  xdr-octedstream.exe xds-mystruct.exe
   
   .SUFFIXES:
   .SUFFIXES:	.c .exe
  Index: ossp-pkg/srpc/libxds/regression-tests/xdr-octedstream.c
  ============================================================
  $ cvs update -p -r1.1 xdr-octedstream.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <stdio.h>
  #include <string.h>
  #include "../internal.h"
  
  int main()
      {
      xds_t* xds;
      char*  buffer;
      size_t buffer_size;
  
      char   msg[] = "Hello World";
      char*  new_msg;
      size_t new_msg_size;
  
      /* Encode the string as octed stream. Then erase the buffer and
         decode the string back, verifying that it hasn't changed. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL)
  	{
  	printf("Failed to initialize XDS context.\n");
  	return 1;
  	}
      if (xds_register(xds, "os", &xdr_encode_octedstream, NULL) != XDS_OK)
  	{
  	printf("Failed to register my encoding engines.\n");
  	return 1;
  	}
      if (xds_encode(xds, "os", msg, strlen(msg)) != XDS_OK)
  	{
  	printf("xds_encode() failed.\n");
  	return 1;
  	}
      if (xds_getbuffer(xds, XDS_GIFT, (void**)&buffer, &buffer_size) != XDS_OK)
  	{
  	printf("xds_getbuffer() failed.\n");
  	return 1;
  	}
      xds_destroy(xds);
      if (buffer_size % 4 != 0)
  	{
  	printf("The encoded octed stream's buffer size is not a multiple of 4.\n");
  	return 1;
  	}
  
      xds = xds_init(XDS_DECODE);
      if (xds == NULL)
  	{
  	printf("Failed to initialize XDS context.\n");
  	return 1;
  	}
      if (xds_register(xds, "os", &xdr_decode_octedstream, NULL) != XDS_OK)
  	{
  	printf("Failed to register my decoding engines.\n");
  	return 1;
  	}
      if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK)
  	{
  	printf("xds_setbuffer() failed.\n");
  	return 1;
  	}
      if (xds_decode(xds, "os", &new_msg, &new_msg_size) != XDS_OK)
  	{
  	printf("xds_decode() failed.\n");
  	return 1;
  	}
      if (new_msg_size != strlen(msg))
  	{
  	printf("The size of the decoded message is wrong.\n");
  	return 1;
  	}
      if (strncmp(msg, new_msg, new_msg_size) != 0)
  	{
  	printf("The decoded octed stream is not correct.\n");
  	return 1;
  	}
      xds_destroy(xds);
      free(new_msg);
  
      /* Everything went fine. */
  
      return 0;
      }
  Index: ossp-pkg/srpc/libxds/xdr-decode-octedstream.c
  ============================================================
  $ cvs update -p -r1.1 xdr-decode-octedstream.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <string.h>
  #include <assert.h>
  #include <sys/types.h>
  #include "internal.h"
  
  int xdr_decode_octedstream(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
      {
      void**  p;
      size_t* p_len;
      size_t  padding;
  
      /* Consistency checks. */
  
      assert(xds != NULL);
      assert(buffer != NULL);
      assert(buffer_size != 0);
      assert(args != NULL);
      if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  	return XDS_ERR_INVALID_ARG;
  
      /* Get pointers from the stack. */
  
      p     = va_arg(*args, void**);
      p_len = va_arg(*args, size_t*);
      assert(p != NULL);
      assert(p_len != NULL);
  
      /* Read the size of the message. */
  
      if (buffer_size >= 4)
  	{
  	*p_len  = ((u_int8_t*)buffer)[0]; *p_len = *p_len << 8;
  	*p_len += ((u_int8_t*)buffer)[1]; *p_len = *p_len << 8;
  	*p_len += ((u_int8_t*)buffer)[2]; *p_len = *p_len << 8;
  	*p_len += ((u_int8_t*)buffer)[3];
  	}
      else
  	return XDS_ERR_UNDERFLOW;
  
      /* Calculate padding. */
  
      padding = (4 - (*p_len & 0x03)) & 0x03;
  
      /* Do we have enough data?. */
  
      if (buffer_size < 4 + *p_len + padding)
  	return XDS_ERR_UNDERFLOW;
  
      /* Allocate buffer for the data. */
  
      *p = malloc(*p_len);
      if (*p == NULL)
  	return XDS_ERR_NO_MEM;
  
      /* Copy data into the buffer. */
  
      memmove(*p, (u_int8_t*)buffer+4, *p_len);
  
      /* Done. */
  
      return 4 + *p_len + padding;
      }
  Index: ossp-pkg/srpc/libxds/xdr-encode-octedstream.c
  ============================================================
  $ cvs update -p -r1.1 xdr-encode-octedstream.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <assert.h>
  #include <string.h>
  #include <sys/types.h>
  #include "internal.h"
  
  int xdr_encode_octedstream(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
      {
      u_int8_t* p;
      size_t    p_len;
      size_t    padding;
  
      /* Consistency checks. */
  
      assert(xds != NULL);
      assert(buffer != NULL);
      assert(buffer_size != 0);
      assert(args != NULL);
      if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  	return XDS_ERR_INVALID_ARG;
  
      /* Get value from stack and calculate the correct amount of
         padding. */
  
      p       = (u_int8_t*)va_arg(*args, void*);
      p_len   = va_arg(*args, size_t);
      padding = (4 - (p_len & 0x03)) & 0x03;
      assert((p_len + padding) % 4 == 0);
  
      /* Format the values into the buffer. */
  
      if (buffer_size >= 4 + p_len + padding)
  	{
  	((u_int8_t*)buffer)[0] = (p_len >> 24) & 0x000000ff;
  	((u_int8_t*)buffer)[1] = (p_len >> 16) & 0x000000ff;
  	((u_int8_t*)buffer)[2] = (p_len >>  8) & 0x000000ff;
  	((u_int8_t*)buffer)[3] = (p_len >>  0) & 0x000000ff;
  	memmove((u_int8_t*)buffer+4, p, p_len);
  	memset(buffer+4+p_len, 0, padding);
  	}
  
      /* Done. */
  
      return 4 + p_len + padding;
      }
  Index: ossp-pkg/srpc/libxds/xds.h
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 xds.h
  --- ossp-pkg/srpc/libxds/xds.h	2001/07/18 18:26:32	1.19
  +++ ossp-pkg/srpc/libxds/xds.h	2001/07/19 14:58:27	1.20
  @@ -80,4 +80,7 @@
   int xdr_decode_uint64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
   int xdr_decode_int64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
   
  +int xdr_encode_octedstream(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  +int xdr_decode_octedstream(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  +
   #endif /* !defined(__LIBXDS_H__) */

From ossp-cvs-owner@ossp.org  Thu Jul 19 17:02:49 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6JF2l071624; Thu, 19 Jul 2001 17:02:47 +0200 (CEST)
Date: Thu, 19 Jul 2001 17:02:47 +0200 (CEST)
Message-Id: <200107191502.f6JF2l071624@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xdr-encode-octedstream.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   19-Jul-2001 17:02:47
  Branch: HEAD                             Handle: 2001071916024700

  Modified files:
    ossp-pkg/srpc/libxds    xdr-encode-octedstream.c

  Log:
    Added assertion that the to-be-encoded buffer must not be NULL.

  Summary:
    Revision    Changes     Path
    1.2         +1  -0      ossp-pkg/srpc/libxds/xdr-encode-octedstream.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xdr-encode-octedstream.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xdr-encode-octedstream.c
  --- ossp-pkg/srpc/libxds/xdr-encode-octedstream.c	2001/07/19 14:58:27	1.1
  +++ ossp-pkg/srpc/libxds/xdr-encode-octedstream.c	2001/07/19 15:02:47	1.2
  @@ -49,6 +49,7 @@
          padding. */
   
       p       = (u_int8_t*)va_arg(*args, void*);
  +    assert(p != NULL);
       p_len   = va_arg(*args, size_t);
       padding = (4 - (p_len & 0x03)) & 0x03;
       assert((p_len + padding) % 4 == 0);

From ossp-cvs-owner@ossp.org  Thu Jul 19 17:13:41 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6JFDeN72742; Thu, 19 Jul 2001 17:13:40 +0200 (CEST)
Date: Thu, 19 Jul 2001 17:13:40 +0200 (CEST)
Message-Id: <200107191513.f6JFDeN72742@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile ossp-pkg/srpc/libxds/regress...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   19-Jul-2001 17:13:40
  Branch: HEAD                             Handle: 2001071916133901

  Added files:
    ossp-pkg/srpc/libxds    xdr-decode-string.c xdr-encode-string.c
    ossp-pkg/srpc/libxds/regression-tests
                            xdr-string.c
  Modified files:
    ossp-pkg/srpc/libxds    Makefile xds.h
    ossp-pkg/srpc/libxds/regression-tests
                            Makefile

  Log:
    Implemented XDR encoding and decoding of strings.

  Summary:
    Revision    Changes     Path
    1.19        +2  -1      ossp-pkg/srpc/libxds/Makefile
    1.16        +1  -1      ossp-pkg/srpc/libxds/regression-tests/Makefile
    1.1         +110 -0     ossp-pkg/srpc/libxds/regression-tests/xdr-string.c
    1.1         +90 -0      ossp-pkg/srpc/libxds/xdr-decode-string.c
    1.1         +72 -0      ossp-pkg/srpc/libxds/xdr-encode-string.c
    1.21        +3  -0      ossp-pkg/srpc/libxds/xds.h
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 Makefile
  --- ossp-pkg/srpc/libxds/Makefile	2001/07/19 14:58:27	1.18
  +++ ossp-pkg/srpc/libxds/Makefile	2001/07/19 15:13:39	1.19
  @@ -19,7 +19,8 @@
   		  set-capacity.o  xdr-encode-int32.o xdr-encode-int64.o \
   		  xdr-encode-uint32.o xdr-encode-uint64.o xdr-decode-int32.o \
   		  xdr-decode-int64.o xdr-decode-uint32.o xdr-decode-uint64.o \
  -		  xdr-encode-octedstream.o xdr-decode-octedstream.o
  +		  xdr-encode-octedstream.o xdr-decode-octedstream.o \
  +		  xdr-encode-string.o xdr-decode-string.o
   .c.o:
   	$(CC) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CFLAGS) -c $<
   
  Index: ossp-pkg/srpc/libxds/regression-tests/Makefile
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 Makefile
  --- ossp-pkg/srpc/libxds/regression-tests/Makefile	2001/07/19 14:58:28	1.15
  +++ ossp-pkg/srpc/libxds/regression-tests/Makefile	2001/07/19 15:13:40	1.16
  @@ -13,7 +13,7 @@
   TESTS		= xds-core.exe xds-find-engine.exe xds-register.exe xds-encode.exe \
   		  xds-getbuffer.exe xds-decode.exe xds-setbuffer.exe xds-engine-restart.exe \
   		  xdr-uint32.exe xdr-int32.exe xdr-uint64.exe xdr-int64.exe  \
  -		  xdr-octedstream.exe xds-mystruct.exe
  +		  xdr-octedstream.exe xdr-string.exe xds-mystruct.exe
   
   .SUFFIXES:
   .SUFFIXES:	.c .exe
  Index: ossp-pkg/srpc/libxds/regression-tests/xdr-string.c
  ============================================================
  $ cvs update -p -r1.1 xdr-string.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <stdio.h>
  #include <string.h>
  #include "../internal.h"
  
  int main()
      {
      xds_t* xds;
      char*  buffer;
      size_t buffer_size;
  
      char   msg[] = "Hello World";
      char*  new_msg;
      size_t new_msg_size;
  
      /* Encode the string as octed stream. Then erase the buffer and
         decode the string back, verifying that it hasn't changed. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL)
  	{
  	printf("Failed to initialize XDS context.\n");
  	return 1;
  	}
      if (xds_register(xds, "os", &xdr_encode_string, NULL) != XDS_OK)
  	{
  	printf("Failed to register my encoding engines.\n");
  	return 1;
  	}
      if (xds_encode(xds, "os", msg) != XDS_OK)
  	{
  	printf("xds_encode() failed.\n");
  	return 1;
  	}
      if (xds_getbuffer(xds, XDS_GIFT, (void**)&buffer, &buffer_size) != XDS_OK)
  	{
  	printf("xds_getbuffer() failed.\n");
  	return 1;
  	}
      xds_destroy(xds);
      if (buffer_size % 4 != 0)
  	{
  	printf("The encoded octed stream's buffer size is not a multiple of 4.\n");
  	return 1;
  	}
  
      xds = xds_init(XDS_DECODE);
      if (xds == NULL)
  	{
  	printf("Failed to initialize XDS context.\n");
  	return 1;
  	}
      if (xds_register(xds, "os", &xdr_decode_string, NULL) != XDS_OK)
  	{
  	printf("Failed to register my decoding engines.\n");
  	return 1;
  	}
      if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK)
  	{
  	printf("xds_setbuffer() failed.\n");
  	return 1;
  	}
      if (xds_decode(xds, "os", &new_msg, &new_msg_size) != XDS_OK)
  	{
  	printf("xds_decode() failed.\n");
  	return 1;
  	}
      if (new_msg_size != strlen(msg))
  	{
  	printf("The size of the decoded message is wrong: %d.\n", new_msg_size);
  	return 1;
  	}
      if (strncmp(msg, new_msg, new_msg_size) != 0)
  	{
  	printf("The decoded octed stream is not correct.\n");
  	return 1;
  	}
      xds_destroy(xds);
      free(new_msg);
  
      /* Everything went fine. */
  
      return 0;
      }
  Index: ossp-pkg/srpc/libxds/xdr-decode-string.c
  ============================================================
  $ cvs update -p -r1.1 xdr-decode-string.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <string.h>
  #include <assert.h>
  #include <sys/types.h>
  #include "internal.h"
  
  int xdr_decode_string(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
      {
      void**  p;
      size_t* p_len;
      size_t  padding;
  
      /* Consistency checks. */
  
      assert(xds != NULL);
      assert(buffer != NULL);
      assert(buffer_size != 0);
      assert(args != NULL);
      if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  	return XDS_ERR_INVALID_ARG;
  
      /* Get pointers from the stack. */
  
      p     = va_arg(*args, void**);
      p_len = va_arg(*args, size_t*);
      assert(p != NULL);
      assert(p_len != NULL);
  
      /* Read the size of the message. */
  
      if (buffer_size >= 4)
  	{
  	*p_len  = ((u_int8_t*)buffer)[0]; *p_len = *p_len << 8;
  	*p_len += ((u_int8_t*)buffer)[1]; *p_len = *p_len << 8;
  	*p_len += ((u_int8_t*)buffer)[2]; *p_len = *p_len << 8;
  	*p_len += ((u_int8_t*)buffer)[3];
  	}
      else
  	return XDS_ERR_UNDERFLOW;
  
      /* Calculate padding. */
  
      padding = (4 - (*p_len & 0x03)) & 0x03;
  
      /* Do we have enough data?. */
  
      if (buffer_size < 4 + *p_len + padding)
  	return XDS_ERR_UNDERFLOW;
  
      /* Allocate buffer for the data. */
  
      *p = malloc(*p_len + 1);
      if (*p == NULL)
  	return XDS_ERR_NO_MEM;
  
      /* Copy data into the buffer. */
  
      memmove(*p, (u_int8_t*)buffer+4, *p_len);
      ((u_int8_t*)buffer)[4+*p_len] = '\0';
  
      /* Done. */
  
      return 4 + *p_len + padding;
      }
  Index: ossp-pkg/srpc/libxds/xdr-encode-string.c
  ============================================================
  $ cvs update -p -r1.1 xdr-encode-string.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <assert.h>
  #include <string.h>
  #include <sys/types.h>
  #include "internal.h"
  
  int xdr_encode_string(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
      {
      u_int8_t* p;
      size_t    p_len;
      size_t    padding;
  
      /* Consistency checks. */
  
      assert(xds != NULL);
      assert(buffer != NULL);
      assert(buffer_size != 0);
      assert(args != NULL);
      if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  	return XDS_ERR_INVALID_ARG;
  
      /* Get value from stack and calculate the correct amount of
         padding. */
  
      p       = (u_int8_t*)va_arg(*args, void*);
      assert(p != NULL);
      p_len   = strlen(p);
      padding = (4 - (p_len & 0x03)) & 0x03;
      assert((p_len + padding) % 4 == 0);
  
      /* Format the values into the buffer. */
  
      if (buffer_size >= 4 + p_len + padding)
  	{
  	((u_int8_t*)buffer)[0] = (p_len >> 24) & 0x000000ff;
  	((u_int8_t*)buffer)[1] = (p_len >> 16) & 0x000000ff;
  	((u_int8_t*)buffer)[2] = (p_len >>  8) & 0x000000ff;
  	((u_int8_t*)buffer)[3] = (p_len >>  0) & 0x000000ff;
  	memmove((u_int8_t*)buffer+4, p, p_len);
  	memset(buffer+4+p_len, 0, padding);
  	}
  
      /* Done. */
  
      return 4 + p_len + padding;
      }
  Index: ossp-pkg/srpc/libxds/xds.h
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 xds.h
  --- ossp-pkg/srpc/libxds/xds.h	2001/07/19 14:58:27	1.20
  +++ ossp-pkg/srpc/libxds/xds.h	2001/07/19 15:13:39	1.21
  @@ -83,4 +83,7 @@
   int xdr_encode_octedstream(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
   int xdr_decode_octedstream(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
   
  +int xdr_encode_string(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  +int xdr_decode_string(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  +
   #endif /* !defined(__LIBXDS_H__) */

From ossp-cvs-owner@ossp.org  Thu Jul 19 17:18:52 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6JFIpU73632; Thu, 19 Jul 2001 17:18:51 +0200 (CEST)
Date: Thu, 19 Jul 2001 17:18:51 +0200 (CEST)
Message-Id: <200107191518.f6JFIpU73632@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests Makefile xdr-octedst...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   19-Jul-2001 17:18:51
  Branch: HEAD                             Handle: 2001071916185000

  Added files:
    ossp-pkg/srpc/libxds/regression-tests
                            xdr-octedstream-empty.c
  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            Makefile

  Log:
    Added test suite that verifies the correct handling of
    encoding/decoding octed streams with length 0.

  Summary:
    Revision    Changes     Path
    1.17        +2  -1      ossp-pkg/srpc/libxds/regression-tests/Makefile
    1.1         +110 -0     ossp-pkg/srpc/libxds/regression-tests/xdr-octedstream-empty.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/Makefile
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 Makefile
  --- ossp-pkg/srpc/libxds/regression-tests/Makefile	2001/07/19 15:13:40	1.16
  +++ ossp-pkg/srpc/libxds/regression-tests/Makefile	2001/07/19 15:18:50	1.17
  @@ -13,7 +13,8 @@
   TESTS		= xds-core.exe xds-find-engine.exe xds-register.exe xds-encode.exe \
   		  xds-getbuffer.exe xds-decode.exe xds-setbuffer.exe xds-engine-restart.exe \
   		  xdr-uint32.exe xdr-int32.exe xdr-uint64.exe xdr-int64.exe  \
  -		  xdr-octedstream.exe xdr-string.exe xds-mystruct.exe
  +		  xdr-octedstream.exe xdr-octedstream-empty.exe xdr-string.exe \
  +		  xds-mystruct.exe
   
   .SUFFIXES:
   .SUFFIXES:	.c .exe
  Index: ossp-pkg/srpc/libxds/regression-tests/xdr-octedstream-empty.c
  ============================================================
  $ cvs update -p -r1.1 xdr-octedstream-empty.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <stdio.h>
  #include <string.h>
  #include "../internal.h"
  
  int main()
      {
      xds_t* xds;
      char*  buffer;
      size_t buffer_size;
  
      char   msg[] = "";
      char*  new_msg;
      size_t new_msg_size;
  
      /* Encode the string as octed stream. Then erase the buffer and
         decode the string back, verifying that it hasn't changed. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL)
  	{
  	printf("Failed to initialize XDS context.\n");
  	return 1;
  	}
      if (xds_register(xds, "os", &xdr_encode_octedstream, NULL) != XDS_OK)
  	{
  	printf("Failed to register my encoding engines.\n");
  	return 1;
  	}
      if (xds_encode(xds, "os", msg, 0) != XDS_OK)
  	{
  	printf("xds_encode() failed.\n");
  	return 1;
  	}
      if (xds_getbuffer(xds, XDS_GIFT, (void**)&buffer, &buffer_size) != XDS_OK)
  	{
  	printf("xds_getbuffer() failed.\n");
  	return 1;
  	}
      xds_destroy(xds);
      if (buffer_size % 4 != 0)
  	{
  	printf("The encoded octed stream's buffer size is not a multiple of 4.\n");
  	return 1;
  	}
  
      xds = xds_init(XDS_DECODE);
      if (xds == NULL)
  	{
  	printf("Failed to initialize XDS context.\n");
  	return 1;
  	}
      if (xds_register(xds, "os", &xdr_decode_octedstream, NULL) != XDS_OK)
  	{
  	printf("Failed to register my decoding engines.\n");
  	return 1;
  	}
      if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK)
  	{
  	printf("xds_setbuffer() failed.\n");
  	return 1;
  	}
      if (xds_decode(xds, "os", &new_msg, &new_msg_size) != XDS_OK)
  	{
  	printf("xds_decode() failed.\n");
  	return 1;
  	}
      if (new_msg_size != 0)
  	{
  	printf("The size of the decoded message is wrong.\n");
  	return 1;
  	}
      if (strncmp(msg, new_msg, new_msg_size) != 0)
  	{
  	printf("The decoded octed stream is not correct.\n");
  	return 1;
  	}
      xds_destroy(xds);
      free(new_msg);
  
      /* Everything went fine. */
  
      return 0;
      }

From ossp-cvs-owner@ossp.org  Thu Jul 19 17:20:49 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6JFKmu73820; Thu, 19 Jul 2001 17:20:48 +0200 (CEST)
Date: Thu, 19 Jul 2001 17:20:48 +0200 (CEST)
Message-Id: <200107191520.f6JFKmu73820@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests Makefile xdr-string-...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   19-Jul-2001 17:20:48
  Branch: HEAD                             Handle: 2001071916204700

  Added files:
    ossp-pkg/srpc/libxds/regression-tests
                            xdr-string-empty.c
  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            Makefile

  Log:
    Added test suite for handling of empty strings.

  Summary:
    Revision    Changes     Path
    1.18        +1  -1      ossp-pkg/srpc/libxds/regression-tests/Makefile
    1.1         +110 -0     ossp-pkg/srpc/libxds/regression-tests/xdr-string-empty.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/Makefile
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 Makefile
  --- ossp-pkg/srpc/libxds/regression-tests/Makefile	2001/07/19 15:18:50	1.17
  +++ ossp-pkg/srpc/libxds/regression-tests/Makefile	2001/07/19 15:20:47	1.18
  @@ -14,7 +14,7 @@
   		  xds-getbuffer.exe xds-decode.exe xds-setbuffer.exe xds-engine-restart.exe \
   		  xdr-uint32.exe xdr-int32.exe xdr-uint64.exe xdr-int64.exe  \
   		  xdr-octedstream.exe xdr-octedstream-empty.exe xdr-string.exe \
  -		  xds-mystruct.exe
  +		  xdr-string-empty.exe xds-mystruct.exe
   
   .SUFFIXES:
   .SUFFIXES:	.c .exe
  Index: ossp-pkg/srpc/libxds/regression-tests/xdr-string-empty.c
  ============================================================
  $ cvs update -p -r1.1 xdr-string-empty.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <stdio.h>
  #include <string.h>
  #include "../internal.h"
  
  int main()
      {
      xds_t* xds;
      char*  buffer;
      size_t buffer_size;
  
      char   msg[] = "";
      char*  new_msg;
      size_t new_msg_size;
  
      /* Encode the string as octed stream. Then erase the buffer and
         decode the string back, verifying that it hasn't changed. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL)
  	{
  	printf("Failed to initialize XDS context.\n");
  	return 1;
  	}
      if (xds_register(xds, "os", &xdr_encode_string, NULL) != XDS_OK)
  	{
  	printf("Failed to register my encoding engines.\n");
  	return 1;
  	}
      if (xds_encode(xds, "os", msg, 0) != XDS_OK)
  	{
  	printf("xds_encode() failed.\n");
  	return 1;
  	}
      if (xds_getbuffer(xds, XDS_GIFT, (void**)&buffer, &buffer_size) != XDS_OK)
  	{
  	printf("xds_getbuffer() failed.\n");
  	return 1;
  	}
      xds_destroy(xds);
      if (buffer_size % 4 != 0)
  	{
  	printf("The encoded octed stream's buffer size is not a multiple of 4.\n");
  	return 1;
  	}
  
      xds = xds_init(XDS_DECODE);
      if (xds == NULL)
  	{
  	printf("Failed to initialize XDS context.\n");
  	return 1;
  	}
      if (xds_register(xds, "os", &xdr_decode_string, NULL) != XDS_OK)
  	{
  	printf("Failed to register my decoding engines.\n");
  	return 1;
  	}
      if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK)
  	{
  	printf("xds_setbuffer() failed.\n");
  	return 1;
  	}
      if (xds_decode(xds, "os", &new_msg, &new_msg_size) != XDS_OK)
  	{
  	printf("xds_decode() failed.\n");
  	return 1;
  	}
      if (new_msg_size != 0)
  	{
  	printf("The size of the decoded message is wrong.\n");
  	return 1;
  	}
      if (strncmp(msg, new_msg, new_msg_size) != 0)
  	{
  	printf("The decoded octed stream is not correct.\n");
  	return 1;
  	}
      xds_destroy(xds);
      free(new_msg);
  
      /* Everything went fine. */
  
      return 0;
      }

From ossp-cvs-owner@ossp.org  Thu Jul 19 17:21:37 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6JFLZ373909; Thu, 19 Jul 2001 17:21:35 +0200 (CEST)
Date: Thu, 19 Jul 2001 17:21:35 +0200 (CEST)
Message-Id: <200107191521.f6JFLZ373909@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds vencode.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   19-Jul-2001 17:21:35
  Branch: HEAD                             Handle: 2001071916213500

  Modified files:
    ossp-pkg/srpc/libxds    vencode.c

  Log:
    Removed debug output.

  Summary:
    Revision    Changes     Path
    1.10        +0  -6      ossp-pkg/srpc/libxds/vencode.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/vencode.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 vencode.c
  --- ossp-pkg/srpc/libxds/vencode.c	2001/07/18 17:49:51	1.9
  +++ ossp-pkg/srpc/libxds/vencode.c	2001/07/19 15:21:35	1.10
  @@ -25,8 +25,6 @@
      SUCH DAMAGE.
   */
   
  -#include <stdio.h>		/* delete me */
  -
   #include <string.h>
   #include <ctype.h>
   #include <assert.h>
  @@ -62,7 +60,6 @@
   	assert(rc == XDS_OK || rc == XDS_ERR_NO_MEM);
   	if (rc != XDS_OK)
   	    return rc;
  -	printf("Setting up buffer with capacity %d byte.\n", xds->buffer_capacity);
   	xds->buffer_len    = 0;
   	xds->we_own_buffer = XDS_FALSE;
   	}
  @@ -82,7 +79,6 @@
   	    assert(rc == XDS_OK || rc == XDS_ERR_NO_MEM);
   	    if (rc != XDS_OK)
   		return rc;
  -	    printf("Enlarged buffer to %d byte.\n", xds->buffer_capacity);
   	    }
   	else
   	    return XDS_ERR_OVERFLOW;
  @@ -111,7 +107,6 @@
   		int restart_engine;
   		do
   		    {
  -		    printf("Executing engine '%s' ...\n", name);
   		    args_backup = args;
   		    rc = (*xds->engines[pos].engine)(xds,
   						     xds->engines[pos].context,
  @@ -149,7 +144,6 @@
   			    rc = rc2;
   			    goto leave;
   			    }
  -			printf("Enlarged buffer to %d byte.\n", xds->buffer_capacity);
   			}
   		    else
   			{

From ossp-cvs-owner@ossp.org  Fri Jul 20 11:22:28 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6K9MRa11207; Fri, 20 Jul 2001 11:22:27 +0200 (CEST)
Date: Fri, 20 Jul 2001 11:22:27 +0200 (CEST)
Message-Id: <200107200922.f6K9MRa11207@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile ossp-pkg/srpc/libxds/regress...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   20-Jul-2001 11:22:27
  Branch: HEAD                             Handle: 19700101010000995617346

  Added files:
    ossp-pkg/srpc/libxds    xdr-decode-octetstream.c xdr-encode-octetstream.c
    ossp-pkg/srpc/libxds/regression-tests
                            xdr-octetstream-empty.c xdr-octetstream.c
  Modified files:
    ossp-pkg/srpc/libxds    Makefile xds.h
    ossp-pkg/srpc/libxds/regression-tests
                            Makefile xdr-string-empty.c xdr-string.c
  Removed files:
    ossp-pkg/srpc/libxds    xdr-decode-octedstream.c xdr-encode-octedstream.c
    ossp-pkg/srpc/libxds/regression-tests
                            xdr-octedstream-empty.c xdr-octedstream.c

  Log:
    People who know how to spell clearly have an advantage.

  Summary:
    Revision    Changes     Path
    1.20        +1  -1      ossp-pkg/srpc/libxds/Makefile
    1.19        +1  -1      ossp-pkg/srpc/libxds/regression-tests/Makefile
    NONE        +0  -110    ossp-pkg/srpc/libxds/regression-tests/xdr-octedstream-empty.c
    NONE        +0  -110    ossp-pkg/srpc/libxds/regression-tests/xdr-octedstream.c
    1.1         +110 -0     ossp-pkg/srpc/libxds/regression-tests/xdr-octetstream-empty.c
    1.1         +110 -0     ossp-pkg/srpc/libxds/regression-tests/xdr-octetstream.c
    1.2         +3  -3      ossp-pkg/srpc/libxds/regression-tests/xdr-string-empty.c
    1.2         +3  -3      ossp-pkg/srpc/libxds/regression-tests/xdr-string.c
    NONE        +0  -89     ossp-pkg/srpc/libxds/xdr-decode-octedstream.c
    1.1         +89 -0      ossp-pkg/srpc/libxds/xdr-decode-octetstream.c
    NONE        +0  -72     ossp-pkg/srpc/libxds/xdr-encode-octedstream.c
    1.1         +72 -0      ossp-pkg/srpc/libxds/xdr-encode-octetstream.c
    1.22        +2  -2      ossp-pkg/srpc/libxds/xds.h
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 Makefile
  --- ossp-pkg/srpc/libxds/Makefile	2001/07/19 15:13:39	1.19
  +++ ossp-pkg/srpc/libxds/Makefile	2001/07/20 09:22:25	1.20
  @@ -19,7 +19,7 @@
   		  set-capacity.o  xdr-encode-int32.o xdr-encode-int64.o \
   		  xdr-encode-uint32.o xdr-encode-uint64.o xdr-decode-int32.o \
   		  xdr-decode-int64.o xdr-decode-uint32.o xdr-decode-uint64.o \
  -		  xdr-encode-octedstream.o xdr-decode-octedstream.o \
  +		  xdr-encode-octetstream.o xdr-decode-octetstream.o \
   		  xdr-encode-string.o xdr-decode-string.o
   .c.o:
   	$(CC) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CFLAGS) -c $<
  Index: ossp-pkg/srpc/libxds/regression-tests/Makefile
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 Makefile
  --- ossp-pkg/srpc/libxds/regression-tests/Makefile	2001/07/19 15:20:47	1.18
  +++ ossp-pkg/srpc/libxds/regression-tests/Makefile	2001/07/20 09:22:26	1.19
  @@ -13,7 +13,7 @@
   TESTS		= xds-core.exe xds-find-engine.exe xds-register.exe xds-encode.exe \
   		  xds-getbuffer.exe xds-decode.exe xds-setbuffer.exe xds-engine-restart.exe \
   		  xdr-uint32.exe xdr-int32.exe xdr-uint64.exe xdr-int64.exe  \
  -		  xdr-octedstream.exe xdr-octedstream-empty.exe xdr-string.exe \
  +		  xdr-octetstream.exe xdr-octetstream-empty.exe xdr-string.exe \
   		  xdr-string-empty.exe xds-mystruct.exe
   
   .SUFFIXES:
      Index: ossp-pkg/srpc/libxds/regression-tests/xdr-octetstream-empty.c
  ============================================================
  $ cvs update -p -r1.1 xdr-octetstream-empty.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <stdio.h>
  #include <string.h>
  #include "../internal.h"
  
  int main()
      {
      xds_t* xds;
      char*  buffer;
      size_t buffer_size;
  
      char   msg[] = "";
      char*  new_msg;
      size_t new_msg_size;
  
      /* Encode the string as octet stream. Then erase the buffer and
         decode the string back, verifying that it hasn't changed. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL)
  	{
  	printf("Failed to initialize XDS context.\n");
  	return 1;
  	}
      if (xds_register(xds, "os", &xdr_encode_octetstream, NULL) != XDS_OK)
  	{
  	printf("Failed to register my encoding engines.\n");
  	return 1;
  	}
      if (xds_encode(xds, "os", msg, 0) != XDS_OK)
  	{
  	printf("xds_encode() failed.\n");
  	return 1;
  	}
      if (xds_getbuffer(xds, XDS_GIFT, (void**)&buffer, &buffer_size) != XDS_OK)
  	{
  	printf("xds_getbuffer() failed.\n");
  	return 1;
  	}
      xds_destroy(xds);
      if (buffer_size % 4 != 0)
  	{
  	printf("The encoded octet stream's buffer size is not a multiple of 4.\n");
  	return 1;
  	}
  
      xds = xds_init(XDS_DECODE);
      if (xds == NULL)
  	{
  	printf("Failed to initialize XDS context.\n");
  	return 1;
  	}
      if (xds_register(xds, "os", &xdr_decode_octetstream, NULL) != XDS_OK)
  	{
  	printf("Failed to register my decoding engines.\n");
  	return 1;
  	}
      if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK)
  	{
  	printf("xds_setbuffer() failed.\n");
  	return 1;
  	}
      if (xds_decode(xds, "os", &new_msg, &new_msg_size) != XDS_OK)
  	{
  	printf("xds_decode() failed.\n");
  	return 1;
  	}
      if (new_msg_size != 0)
  	{
  	printf("The size of the decoded message is wrong.\n");
  	return 1;
  	}
      if (strncmp(msg, new_msg, new_msg_size) != 0)
  	{
  	printf("The decoded octet stream is not correct.\n");
  	return 1;
  	}
      xds_destroy(xds);
      free(new_msg);
  
      /* Everything went fine. */
  
      return 0;
      }
  Index: ossp-pkg/srpc/libxds/regression-tests/xdr-octetstream.c
  ============================================================
  $ cvs update -p -r1.1 xdr-octetstream.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <stdio.h>
  #include <string.h>
  #include "../internal.h"
  
  int main()
      {
      xds_t* xds;
      char*  buffer;
      size_t buffer_size;
  
      char   msg[] = "Hello World";
      char*  new_msg;
      size_t new_msg_size;
  
      /* Encode the string as octet stream. Then erase the buffer and
         decode the string back, verifying that it hasn't changed. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL)
  	{
  	printf("Failed to initialize XDS context.\n");
  	return 1;
  	}
      if (xds_register(xds, "os", &xdr_encode_octetstream, NULL) != XDS_OK)
  	{
  	printf("Failed to register my encoding engines.\n");
  	return 1;
  	}
      if (xds_encode(xds, "os", msg, strlen(msg)) != XDS_OK)
  	{
  	printf("xds_encode() failed.\n");
  	return 1;
  	}
      if (xds_getbuffer(xds, XDS_GIFT, (void**)&buffer, &buffer_size) != XDS_OK)
  	{
  	printf("xds_getbuffer() failed.\n");
  	return 1;
  	}
      xds_destroy(xds);
      if (buffer_size % 4 != 0)
  	{
  	printf("The encoded octet stream's buffer size is not a multiple of 4.\n");
  	return 1;
  	}
  
      xds = xds_init(XDS_DECODE);
      if (xds == NULL)
  	{
  	printf("Failed to initialize XDS context.\n");
  	return 1;
  	}
      if (xds_register(xds, "os", &xdr_decode_octetstream, NULL) != XDS_OK)
  	{
  	printf("Failed to register my decoding engines.\n");
  	return 1;
  	}
      if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK)
  	{
  	printf("xds_setbuffer() failed.\n");
  	return 1;
  	}
      if (xds_decode(xds, "os", &new_msg, &new_msg_size) != XDS_OK)
  	{
  	printf("xds_decode() failed.\n");
  	return 1;
  	}
      if (new_msg_size != strlen(msg))
  	{
  	printf("The size of the decoded message is wrong.\n");
  	return 1;
  	}
      if (strncmp(msg, new_msg, new_msg_size) != 0)
  	{
  	printf("The decoded octet stream is not correct.\n");
  	return 1;
  	}
      xds_destroy(xds);
      free(new_msg);
  
      /* Everything went fine. */
  
      return 0;
      }
  Index: ossp-pkg/srpc/libxds/regression-tests/xdr-string-empty.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xdr-string-empty.c
  --- ossp-pkg/srpc/libxds/regression-tests/xdr-string-empty.c	2001/07/19 15:20:47	1.1
  +++ ossp-pkg/srpc/libxds/regression-tests/xdr-string-empty.c	2001/07/20 09:22:26	1.2
  @@ -39,7 +39,7 @@
       char*  new_msg;
       size_t new_msg_size;
   
  -    /* Encode the string as octed stream. Then erase the buffer and
  +    /* Encode the string as octet stream. Then erase the buffer and
          decode the string back, verifying that it hasn't changed. */
   
       xds = xds_init(XDS_ENCODE);
  @@ -66,7 +66,7 @@
       xds_destroy(xds);
       if (buffer_size % 4 != 0)
   	{
  -	printf("The encoded octed stream's buffer size is not a multiple of 4.\n");
  +	printf("The encoded strings' buffer size is not a multiple of 4.\n");
   	return 1;
   	}
   
  @@ -98,7 +98,7 @@
   	}
       if (strncmp(msg, new_msg, new_msg_size) != 0)
   	{
  -	printf("The decoded octed stream is not correct.\n");
  +	printf("The decoded string is not correct.\n");
   	return 1;
   	}
       xds_destroy(xds);
  Index: ossp-pkg/srpc/libxds/regression-tests/xdr-string.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xdr-string.c
  --- ossp-pkg/srpc/libxds/regression-tests/xdr-string.c	2001/07/19 15:13:40	1.1
  +++ ossp-pkg/srpc/libxds/regression-tests/xdr-string.c	2001/07/20 09:22:26	1.2
  @@ -39,7 +39,7 @@
       char*  new_msg;
       size_t new_msg_size;
   
  -    /* Encode the string as octed stream. Then erase the buffer and
  +    /* Encode the string as octet stream. Then erase the buffer and
          decode the string back, verifying that it hasn't changed. */
   
       xds = xds_init(XDS_ENCODE);
  @@ -66,7 +66,7 @@
       xds_destroy(xds);
       if (buffer_size % 4 != 0)
   	{
  -	printf("The encoded octed stream's buffer size is not a multiple of 4.\n");
  +	printf("The encoded strings' buffer size is not a multiple of 4.\n");
   	return 1;
   	}
   
  @@ -98,7 +98,7 @@
   	}
       if (strncmp(msg, new_msg, new_msg_size) != 0)
   	{
  -	printf("The decoded octed stream is not correct.\n");
  +	printf("The decoded string is not correct.\n");
   	return 1;
   	}
       xds_destroy(xds);
    Index: ossp-pkg/srpc/libxds/xdr-decode-octetstream.c
  ============================================================
  $ cvs update -p -r1.1 xdr-decode-octetstream.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <string.h>
  #include <assert.h>
  #include <sys/types.h>
  #include "internal.h"
  
  int xdr_decode_octetstream(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
      {
      void**  p;
      size_t* p_len;
      size_t  padding;
  
      /* Consistency checks. */
  
      assert(xds != NULL);
      assert(buffer != NULL);
      assert(buffer_size != 0);
      assert(args != NULL);
      if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  	return XDS_ERR_INVALID_ARG;
  
      /* Get pointers from the stack. */
  
      p     = va_arg(*args, void**);
      p_len = va_arg(*args, size_t*);
      assert(p != NULL);
      assert(p_len != NULL);
  
      /* Read the size of the message. */
  
      if (buffer_size >= 4)
  	{
  	*p_len  = ((u_int8_t*)buffer)[0]; *p_len = *p_len << 8;
  	*p_len += ((u_int8_t*)buffer)[1]; *p_len = *p_len << 8;
  	*p_len += ((u_int8_t*)buffer)[2]; *p_len = *p_len << 8;
  	*p_len += ((u_int8_t*)buffer)[3];
  	}
      else
  	return XDS_ERR_UNDERFLOW;
  
      /* Calculate padding. */
  
      padding = (4 - (*p_len & 0x03)) & 0x03;
  
      /* Do we have enough data?. */
  
      if (buffer_size < 4 + *p_len + padding)
  	return XDS_ERR_UNDERFLOW;
  
      /* Allocate buffer for the data. */
  
      *p = malloc(*p_len);
      if (*p == NULL)
  	return XDS_ERR_NO_MEM;
  
      /* Copy data into the buffer. */
  
      memmove(*p, (u_int8_t*)buffer+4, *p_len);
  
      /* Done. */
  
      return 4 + *p_len + padding;
      }
    Index: ossp-pkg/srpc/libxds/xdr-encode-octetstream.c
  ============================================================
  $ cvs update -p -r1.1 xdr-encode-octetstream.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <assert.h>
  #include <string.h>
  #include <sys/types.h>
  #include "internal.h"
  
  int xdr_encode_octetstream(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
      {
      u_int8_t* p;
      size_t    p_len;
      size_t    padding;
  
      /* Consistency checks. */
  
      assert(xds != NULL);
      assert(buffer != NULL);
      assert(buffer_size != 0);
      assert(args != NULL);
      if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  	return XDS_ERR_INVALID_ARG;
  
      /* Get value from stack and calculate the correct amount of
         padding. */
  
      p       = (u_int8_t*)va_arg(*args, void*);
      assert(p != NULL);
      p_len   = va_arg(*args, size_t);
      padding = (4 - (p_len & 0x03)) & 0x03;
      assert((p_len + padding) % 4 == 0);
  
      /* Format the values into the buffer. */
  
      if (buffer_size >= 4 + p_len + padding)
  	{
  	((u_int8_t*)buffer)[0] = (p_len >> 24) & 0x000000ff;
  	((u_int8_t*)buffer)[1] = (p_len >> 16) & 0x000000ff;
  	((u_int8_t*)buffer)[2] = (p_len >>  8) & 0x000000ff;
  	((u_int8_t*)buffer)[3] = (p_len >>  0) & 0x000000ff;
  	memmove((u_int8_t*)buffer+4, p, p_len);
  	memset(buffer+4+p_len, 0, padding);
  	}
  
      /* Done. */
  
      return 4 + p_len + padding;
      }
  Index: ossp-pkg/srpc/libxds/xds.h
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 xds.h
  --- ossp-pkg/srpc/libxds/xds.h	2001/07/19 15:13:39	1.21
  +++ ossp-pkg/srpc/libxds/xds.h	2001/07/20 09:22:25	1.22
  @@ -80,8 +80,8 @@
   int xdr_decode_uint64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
   int xdr_decode_int64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
   
  -int xdr_encode_octedstream(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  -int xdr_decode_octedstream(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  +int xdr_encode_octetstream(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  +int xdr_decode_octetstream(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
   
   int xdr_encode_string(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
   int xdr_decode_string(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);

From ossp-cvs-owner@ossp.org  Fri Jul 20 11:53:40 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6K9rdm15145; Fri, 20 Jul 2001 11:53:39 +0200 (CEST)
Date: Fri, 20 Jul 2001 11:53:39 +0200 (CEST)
Message-Id: <200107200953.f6K9rdm15145@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile Makefile.in configure.in oss...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   20-Jul-2001 11:53:38
  Branch: HEAD                             Handle: 19700101010000995619218

  Added files:
    ossp-pkg/srpc/libxds    Makefile.in configure.in
    ossp-pkg/srpc/libxds/regression-tests
                            Makefile.in
  Removed files:
    ossp-pkg/srpc/libxds    Makefile
    ossp-pkg/srpc/libxds/regression-tests
                            Makefile

  Log:
    Added skeleton autoconf support.

  Summary:
    Revision    Changes     Path
    NONE        +0  -69     ossp-pkg/srpc/libxds/Makefile
    1.1         +74 -0      ossp-pkg/srpc/libxds/Makefile.in
    1.1         +0  -0      ossp-pkg/srpc/libxds/configure.in
    NONE        +0  -40     ossp-pkg/srpc/libxds/regression-tests/Makefile
    1.1         +44 -0      ossp-pkg/srpc/libxds/regression-tests/Makefile.in
  ____________________________________________________________________________

    Index: ossp-pkg/srpc/libxds/Makefile.in
  ============================================================
  $ cvs update -p -r1.1 Makefile.in
  # Build libxds and support/test programs.
  
  CC		= @CC@
  AR		= ar
  RANLIB		= @RANLIB@
  
  CPPFLAGS	= @CPPFLAGS@ @DEFS@
  CFLAGS		= @CFLAGS@
  LDFLAGS		= @LDFLAGS@
  
  OBJS		= decode.o destroy.o encode.o getbuffer.o init.o register.o \
  		  setbuffer.o unregister.o vdecode.o vencode.o find-engine.o \
  		  set-capacity.o  xdr-encode-int32.o xdr-encode-int64.o \
  		  xdr-encode-uint32.o xdr-encode-uint64.o xdr-decode-int32.o \
  		  xdr-decode-int64.o xdr-decode-uint32.o xdr-decode-uint64.o \
  		  xdr-encode-octetstream.o xdr-decode-octetstream.o \
  		  xdr-encode-string.o xdr-decode-string.o
  .c.o:
  	$(CC) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CFLAGS) -c $<
  
  .cpp.o:
  	$(CXX) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CXXFLAGS) -c $<
  
  all:	libxds.a xds.3
  
  libxds.a:	$(OBJS)
  	@rm -f $@
  	$(AR) cr $@ $(OBJS)
  	$(RANLIB) $@
  
  xds.3:		xds.pod
  	pod2man --section=3 --center="XDS Library Programmer API " xds.pod >xds.3
  
  clean::
  	@(cd regression-tests && $(MAKE) $@)
  	rm -f $(OBJS)
  	rm -f libxds.a test.o test xds.3
  
  distclean::	clean
  	@(cd regression-tests && $(MAKE) $@)
  	rm -f config.log config.status Makefile
  
  realclean::	distclean
  	rm -f configure
  
  check:		libxds.a
  	(cd regression-tests && $(MAKE) check)
  
  # Dependencies
  
  decode.o: internal.h xds.h
  destroy.o: internal.h xds.h
  encode.o: internal.h xds.h
  find-engine.o: internal.h xds.h
  getbuffer.o: internal.h xds.h
  init.o: internal.h xds.h
  register.o: internal.h xds.h
  set-capacity.o: internal.h xds.h
  setbuffer.o: internal.h xds.h
  unregister.o: internal.h xds.h
  vdecode.o: internal.h xds.h
  vencode.o: internal.h xds.h
  xdr-decode-int32.o: internal.h xds.h
  xdr-decode-int64.o: internal.h xds.h
  xdr-decode-octetstream.o: internal.h xds.h
  xdr-decode-string.o: internal.h xds.h
  xdr-decode-uint32.o: internal.h xds.h
  xdr-decode-uint64.o: internal.h xds.h
  xdr-encode-int32.o: internal.h xds.h
  xdr-encode-int64.o: internal.h xds.h
  xdr-encode-octetstream.o: internal.h xds.h
  xdr-encode-string.o: internal.h xds.h
  xdr-encode-uint32.o: internal.h xds.h
  xdr-encode-uint64.o: internal.h xds.h
  Index: ossp-pkg/srpc/libxds/configure.in
  ============================================================
  $ cvs update -p -r1.1 configure.in
  dnl configure.in -- Process this file with autoconf to produce a configure script.
  
  AC_INIT(libxds, [$Revision: 1.1 $])
  
  dnl Get rid of the lousy -g and -O defaults in CFLAGS.
  dnl
  CFLAGS=${CFLAGS:-}
  
  dnl Checks for paths and programs.
  dnl
  AC_PROG_CC
  AC_PROG_RANLIB
  
  dnl Set special flags for gcc.
  dnl
  if test "$GCC" = yes; then
      CFLAGS="$CFLAGS -Wall -ansi -pedantic -Wshadow -Wpointer-arith -Wcast-align -Winline -Wmissing-prototypes -Wmissing-declarations -Wnested-externs"
  fi
  
  dnl Write results.
  dnl
  AC_OUTPUT(Makefile regression-tests/Makefile)
    Index: ossp-pkg/srpc/libxds/regression-tests/Makefile.in
  ============================================================
  $ cvs update -p -r1.1 Makefile.in
  # Build and run the regression tests.
  
  CC		= @CC@
  AR		= ar
  RANLIB		= @RANLIB@
  
  CPPFLAGS	= @CPPFLAGS@ @DEFS@
  CFLAGS		= @CFLAGS@
  LDFLAGS		= @LDFLAGS@ -L..
  
  TESTS		= xds-core.exe xds-find-engine.exe xds-register.exe xds-encode.exe \
  		  xds-getbuffer.exe xds-decode.exe xds-setbuffer.exe xds-engine-restart.exe \
  		  xdr-uint32.exe xdr-int32.exe xdr-uint64.exe xdr-int64.exe  \
  		  xdr-octetstream.exe xdr-octetstream-empty.exe xdr-string.exe \
  		  xdr-string-empty.exe xds-mystruct.exe
  
  .SUFFIXES:
  .SUFFIXES:	.c .exe
  
  .c.exe:
  	$(CC) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $< -lxds
  
  .cpp.exe:
  	$(CXX) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ $< -lxds
  
  all:	$(TESTS)
  
  check:	all
  	@./.run-tests $(TESTS)
  
  ../libxds.a:
  	(cd .. && $(MAKE) libxds.a)
  clean::
  	rm -f $(TESTS) *.log
  
  distclean::	clean
  	rm -f  Makefile
  
  realclean::	distclean
  
  
  # Dependencies
  
  $(TESTS): ../libxds.a

From ossp-cvs-owner@ossp.org  Fri Jul 20 11:54:36 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6K9sZB15257; Fri, 20 Jul 2001 11:54:35 +0200 (CEST)
Date: Fri, 20 Jul 2001 11:54:35 +0200 (CEST)
Message-Id: <200107200954.f6K9sZB15257@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile.in ossp-pkg/srpc/libxds/regr...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   20-Jul-2001 11:54:35
  Branch: HEAD                             Handle: 2001072010543401

  Modified files:
    ossp-pkg/srpc/libxds    Makefile.in
    ossp-pkg/srpc/libxds/regression-tests
                            Makefile.in

  Log:
    Made comments in makefiles more accurate.

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/srpc/libxds/Makefile.in
    1.2         +1  -1      ossp-pkg/srpc/libxds/regression-tests/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile.in
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 Makefile.in
  --- ossp-pkg/srpc/libxds/Makefile.in	2001/07/20 09:53:37	1.1
  +++ ossp-pkg/srpc/libxds/Makefile.in	2001/07/20 09:54:34	1.2
  @@ -1,4 +1,4 @@
  -# Build libxds and support/test programs.
  +# Build libxds.
   
   CC		= @CC@
   AR		= ar
  Index: ossp-pkg/srpc/libxds/regression-tests/Makefile.in
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 Makefile.in
  --- ossp-pkg/srpc/libxds/regression-tests/Makefile.in	2001/07/20 09:53:38	1.1
  +++ ossp-pkg/srpc/libxds/regression-tests/Makefile.in	2001/07/20 09:54:35	1.2
  @@ -1,4 +1,4 @@
  -# Build and run the regression tests.
  +# Build and run the regression tests for libxds.
   
   CC		= @CC@
   AR		= ar

From ossp-cvs-owner@ossp.org  Fri Jul 20 11:55:31 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6K9tUU15357; Fri, 20 Jul 2001 11:55:30 +0200 (CEST)
Date: Fri, 20 Jul 2001 11:55:30 +0200 (CEST)
Message-Id: <200107200955.f6K9tUU15357@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   20-Jul-2001 11:55:30
  Branch: HEAD                             Handle: 2001072010552900

  Modified files:
    ossp-pkg/srpc/libxds    Makefile.in

  Log:
    Solved the dependency thing.

  Summary:
    Revision    Changes     Path
    1.3         +1  -24     ossp-pkg/srpc/libxds/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile.in
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 Makefile.in
  --- ossp-pkg/srpc/libxds/Makefile.in	2001/07/20 09:54:34	1.2
  +++ ossp-pkg/srpc/libxds/Makefile.in	2001/07/20 09:55:29	1.3
  @@ -48,27 +48,4 @@
   
   # Dependencies
   
  -decode.o: internal.h xds.h
  -destroy.o: internal.h xds.h
  -encode.o: internal.h xds.h
  -find-engine.o: internal.h xds.h
  -getbuffer.o: internal.h xds.h
  -init.o: internal.h xds.h
  -register.o: internal.h xds.h
  -set-capacity.o: internal.h xds.h
  -setbuffer.o: internal.h xds.h
  -unregister.o: internal.h xds.h
  -vdecode.o: internal.h xds.h
  -vencode.o: internal.h xds.h
  -xdr-decode-int32.o: internal.h xds.h
  -xdr-decode-int64.o: internal.h xds.h
  -xdr-decode-octetstream.o: internal.h xds.h
  -xdr-decode-string.o: internal.h xds.h
  -xdr-decode-uint32.o: internal.h xds.h
  -xdr-decode-uint64.o: internal.h xds.h
  -xdr-encode-int32.o: internal.h xds.h
  -xdr-encode-int64.o: internal.h xds.h
  -xdr-encode-octetstream.o: internal.h xds.h
  -xdr-encode-string.o: internal.h xds.h
  -xdr-encode-uint32.o: internal.h xds.h
  -xdr-encode-uint64.o: internal.h xds.h
  +$(OBJS): internal.h xds.h

From ossp-cvs-owner@ossp.org  Fri Jul 20 12:07:13 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6KA7C817480; Fri, 20 Jul 2001 12:07:12 +0200 (CEST)
Date: Fri, 20 Jul 2001 12:07:12 +0200 (CEST)
Message-Id: <200107201007.f6KA7C817480@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xdr-encode-octetstream.c xdr-encode-s...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   20-Jul-2001 12:07:12
  Branch: HEAD                             Handle: 2001072011071100

  Modified files:
    ossp-pkg/srpc/libxds    xdr-encode-octetstream.c xdr-encode-string.c

  Log:
    Added casts to get rid of warnings.

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/srpc/libxds/xdr-encode-octetstream.c
    1.2         +2  -2      ossp-pkg/srpc/libxds/xdr-encode-string.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xdr-encode-octetstream.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xdr-encode-octetstream.c
  --- ossp-pkg/srpc/libxds/xdr-encode-octetstream.c	2001/07/20 09:22:25	1.1
  +++ ossp-pkg/srpc/libxds/xdr-encode-octetstream.c	2001/07/20 10:07:11	1.2
  @@ -63,7 +63,7 @@
   	((u_int8_t*)buffer)[2] = (p_len >>  8) & 0x000000ff;
   	((u_int8_t*)buffer)[3] = (p_len >>  0) & 0x000000ff;
   	memmove((u_int8_t*)buffer+4, p, p_len);
  -	memset(buffer+4+p_len, 0, padding);
  +	memset((u_int8_t*)buffer+4+p_len, 0, padding);
   	}
   
       /* Done. */
  Index: ossp-pkg/srpc/libxds/xdr-encode-string.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xdr-encode-string.c
  --- ossp-pkg/srpc/libxds/xdr-encode-string.c	2001/07/19 15:13:39	1.1
  +++ ossp-pkg/srpc/libxds/xdr-encode-string.c	2001/07/20 10:07:11	1.2
  @@ -50,7 +50,7 @@
   
       p       = (u_int8_t*)va_arg(*args, void*);
       assert(p != NULL);
  -    p_len   = strlen(p);
  +    p_len   = strlen((char*)p);
       padding = (4 - (p_len & 0x03)) & 0x03;
       assert((p_len + padding) % 4 == 0);
   
  @@ -63,7 +63,7 @@
   	((u_int8_t*)buffer)[2] = (p_len >>  8) & 0x000000ff;
   	((u_int8_t*)buffer)[3] = (p_len >>  0) & 0x000000ff;
   	memmove((u_int8_t*)buffer+4, p, p_len);
  -	memset(buffer+4+p_len, 0, padding);
  +	memset((u_int8_t*)buffer+4+p_len, 0, padding);
   	}
   
       /* Done. */

From ossp-cvs-owner@ossp.org  Fri Jul 20 12:08:28 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6KA8RF17616; Fri, 20 Jul 2001 12:08:27 +0200 (CEST)
Date: Fri, 20 Jul 2001 12:08:27 +0200 (CEST)
Message-Id: <200107201008.f6KA8RF17616@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds .cvsignore ossp-pkg/srpc/libxds/regre...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   20-Jul-2001 12:08:27
  Branch: HEAD                             Handle: 2001072011082600

  Modified files:
    ossp-pkg/srpc/libxds    .cvsignore
    ossp-pkg/srpc/libxds/regression-tests
                            .cvsignore

  Log:
    Ignore dependent files created by autoconf.

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/srpc/libxds/.cvsignore
    1.2         +1  -0      ossp-pkg/srpc/libxds/regression-tests/.cvsignore
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/.cvsignore
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 .cvsignore
  --- ossp-pkg/srpc/libxds/.cvsignore	2001/07/03 09:38:25	1.2
  +++ ossp-pkg/srpc/libxds/.cvsignore	2001/07/20 10:08:26	1.3
  @@ -1,2 +1,2 @@
   xds.3
  -test
  +Makefile configure
  Index: ossp-pkg/srpc/libxds/regression-tests/.cvsignore
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 .cvsignore
  --- ossp-pkg/srpc/libxds/regression-tests/.cvsignore	2001/07/04 15:09:55	1.1
  +++ ossp-pkg/srpc/libxds/regression-tests/.cvsignore	2001/07/20 10:08:26	1.2
  @@ -1 +1,2 @@
   *.log
  +Makefile

From ossp-cvs-owner@ossp.org  Fri Jul 20 12:09:08 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6KA97U17717; Fri, 20 Jul 2001 12:09:07 +0200 (CEST)
Date: Fri, 20 Jul 2001 12:09:07 +0200 (CEST)
Message-Id: <200107201009.f6KA97U17717@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile.in ossp-pkg/srpc/libxds/regr...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   20-Jul-2001 12:09:07
  Branch: HEAD                             Handle: 2001072011090600

  Modified files:
    ossp-pkg/srpc/libxds    Makefile.in
    ossp-pkg/srpc/libxds/regression-tests
                            Makefile.in

  Log:
    Hard-code the define of _GNU_SOURCE for the moment.

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/srpc/libxds/Makefile.in
    1.3         +2  -2      ossp-pkg/srpc/libxds/regression-tests/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile.in
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 Makefile.in
  --- ossp-pkg/srpc/libxds/Makefile.in	2001/07/20 09:55:29	1.3
  +++ ossp-pkg/srpc/libxds/Makefile.in	2001/07/20 10:09:06	1.4
  @@ -4,7 +4,7 @@
   AR		= ar
   RANLIB		= @RANLIB@
   
  -CPPFLAGS	= @CPPFLAGS@ @DEFS@
  +CPPFLAGS	= @CPPFLAGS@ @DEFS@ -D_GNU_SOURCE
   CFLAGS		= @CFLAGS@
   LDFLAGS		= @LDFLAGS@
   
  Index: ossp-pkg/srpc/libxds/regression-tests/Makefile.in
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 Makefile.in
  --- ossp-pkg/srpc/libxds/regression-tests/Makefile.in	2001/07/20 09:54:35	1.2
  +++ ossp-pkg/srpc/libxds/regression-tests/Makefile.in	2001/07/20 10:09:06	1.3
  @@ -4,7 +4,7 @@
   AR		= ar
   RANLIB		= @RANLIB@
   
  -CPPFLAGS	= @CPPFLAGS@ @DEFS@
  +CPPFLAGS	= @CPPFLAGS@ @DEFS@ -D_GNU_SOURCE
   CFLAGS		= @CFLAGS@
   LDFLAGS		= @LDFLAGS@ -L..
   
  @@ -41,4 +41,4 @@
   
   # Dependencies
   
  -$(TESTS): ../libxds.a
  +$(TESTS): ../libxds.a ../internal.h ../xds.h

From ossp-cvs-owner@ossp.org  Fri Jul 20 12:09:28 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6KA9Rm17770; Fri, 20 Jul 2001 12:09:27 +0200 (CEST)
Date: Fri, 20 Jul 2001 12:09:27 +0200 (CEST)
Message-Id: <200107201009.f6KA9Rm17770@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds configure.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   20-Jul-2001 12:09:27
  Branch: HEAD                             Handle: 2001072011092700

  Modified files:
    ossp-pkg/srpc/libxds    configure.in

  Log:
    Added the -Wno-long-long flag.

  Summary:
    Revision    Changes     Path
    1.2         +2  -2      ossp-pkg/srpc/libxds/configure.in
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/configure.in
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 configure.in
  --- ossp-pkg/srpc/libxds/configure.in	2001/07/20 09:53:37	1.1
  +++ ossp-pkg/srpc/libxds/configure.in	2001/07/20 10:09:27	1.2
  @@ -1,6 +1,6 @@
   dnl configure.in -- Process this file with autoconf to produce a configure script.
   
  -AC_INIT(libxds, [$Revision: 1.1 $])
  +AC_INIT(libxds, [$Revision: 1.2 $])
   
   dnl Get rid of the lousy -g and -O defaults in CFLAGS.
   dnl
  @@ -14,7 +14,7 @@
   dnl Set special flags for gcc.
   dnl
   if test "$GCC" = yes; then
  -    CFLAGS="$CFLAGS -Wall -ansi -pedantic -Wshadow -Wpointer-arith -Wcast-align -Winline -Wmissing-prototypes -Wmissing-declarations -Wnested-externs"
  +    CFLAGS="$CFLAGS -Wall -ansi -pedantic -Wshadow -Wpointer-arith -Wcast-align -Winline -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Wno-long-long"
   fi
   
   dnl Write results.

From ossp-cvs-owner@ossp.org  Fri Jul 20 12:42:36 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6KAgZR21432; Fri, 20 Jul 2001 12:42:35 +0200 (CEST)
Date: Fri, 20 Jul 2001 12:42:35 +0200 (CEST)
Message-Id: <200107201042.f6KAgZR21432@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds .cvsignore configure.ac configure.in ...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   20-Jul-2001 12:42:35
  Branch: HEAD                             Handle: 19700101010000995622154

  Added files:
    ossp-pkg/srpc/libxds    configure.ac xds.h.in
  Modified files:
    ossp-pkg/srpc/libxds    .cvsignore
  Removed files:
    ossp-pkg/srpc/libxds    configure.in xds.h

  Log:
    - Renamed configure.in to configure.ac for autoconf 2.50 and later.
    - Added tests that will find the exact data types and typedef our versions to them.

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/srpc/libxds/.cvsignore
    1.1         +0  -0      ossp-pkg/srpc/libxds/configure.ac
    NONE        +0  -22     ossp-pkg/srpc/libxds/configure.in
    NONE        +0  -89     ossp-pkg/srpc/libxds/xds.h
    1.1         +97 -0      ossp-pkg/srpc/libxds/xds.h.in
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/.cvsignore
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 .cvsignore
  --- ossp-pkg/srpc/libxds/.cvsignore	2001/07/20 10:08:26	1.3
  +++ ossp-pkg/srpc/libxds/.cvsignore	2001/07/20 10:42:34	1.4
  @@ -1,2 +1,2 @@
   xds.3
  -Makefile configure
  +xds.h Makefile configure
  Index: ossp-pkg/srpc/libxds/configure.ac
  ============================================================
  $ cvs update -p -r1.1 configure.ac
  dnl configure.in -- Process this file with autoconf to produce a configure script.
  
  AC_INIT(libxds, [$Revision: 1.1 $])
  
  dnl Get rid of the lousy -g and -O defaults in CFLAGS.
  dnl
  CFLAGS=${CFLAGS:-}
  
  dnl Checks for paths and programs.
  dnl
  AC_PROG_CC
  AC_PROG_RANLIB
  
  dnl Set special flags for gcc.
  dnl
  if test "$GCC" = yes; then
      CFLAGS="$CFLAGS -Wall -ansi -pedantic -Wshadow -Wpointer-arith -Wcast-align -Winline -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Wno-long-long"
  fi
  
  dnl Check for exact data types.
  dnl
  AC_CHECK_TYPE(u_int8_t, [xds_uint8_t=u_int8_t],
                [AC_CHECK_TYPE(uint8_t, [xds_uint8_t=uint8_t],
  			     [AC_MSG_ERROR([no unsigned 8 bit data type found])]
                              )]
               )
  AC_SUBST([xds_uint8_t])
  AC_CHECK_TYPE(u_int16_t, [xds_uint16_t=u_int16_t],
                [AC_CHECK_TYPE(uint16_t, [xds_uint16_t=uint16_t],
  			     [AC_MSG_ERROR([no unsigned 16 bit data type found])]
                              )]
               )
  AC_SUBST([xds_uint16_t])
  AC_CHECK_TYPE(u_int32_t, [xds_uint32_t=u_int32_t],
                [AC_CHECK_TYPE(uint32_t, [xds_uint32_t=uint32_t],
  			     [AC_MSG_ERROR([no unsigned 32 bit data type found])]
                              )]
               )
  AC_SUBST([xds_uint32_t])
  AC_CHECK_TYPE(int8_t, [xds_int8_t=int8_t],
                [AC_CHECK_TYPE(int8_t, [xds_int8_t=int8_t],
  			     [AC_MSG_ERROR([no signed 8 bit data type found])]
                              )]
               )
  AC_SUBST([xds_int8_t])
  AC_CHECK_TYPE(int16_t, [xds_int16_t=int16_t],
                [AC_CHECK_TYPE(int16_t, [xds_int16_t=int16_t],
  			     [AC_MSG_ERROR([no signed 16 bit data type found])]
                              )]
               )
  AC_SUBST([xds_int16_t])
  AC_CHECK_TYPE(int32_t, [xds_int32_t=int32_t],
                [AC_CHECK_TYPE(int32_t, [xds_int32_t=int32_t],
  			     [AC_MSG_ERROR([no signed 32 bit data type found])]
                              )]
               )
  AC_SUBST([xds_int32_t])
  
  dnl Write results.
  dnl
  AC_OUTPUT(xds.h Makefile regression-tests/Makefile)
      Index: ossp-pkg/srpc/libxds/xds.h.in
  ============================================================
  $ cvs update -p -r1.1 xds.h.in
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  
     xds.h: C API
  */
  
  #ifndef __LIBXDS_H__
  #define __LIBXDS_H__
  
  #include <stdlib.h>
  #include <stdarg.h>
  #include <sys/types.h>
  
  typedef @xds_uint8_t@ xds_uint8_t;
  typedef @xds_uint16_t@ xds_uint16_t;
  typedef @xds_uint32_t@ xds_uint32_t;
  typedef @xds_int8_t@ xds_int8_t;
  typedef @xds_int16_t@ xds_int16_t;
  typedef @xds_int32_t@ xds_int32_t;
  
  enum
      {
      XDS_OK                 =  0,
      XDS_ERR_NO_MEM         = -1,
      XDS_ERR_OVERFLOW       = -2,
      XDS_ERR_INVALID_ARG    = -3,
      XDS_ERR_TYPE_MISMATCH  = -4,
      XDS_ERR_UNKNOWN_ENGINE = -5,
      XDS_ERR_INVALID_MODE   = -6,
      XDS_ERR_UNDERFLOW      = -7
      };
  typedef enum { XDS_ENCODE, XDS_DECODE } xds_mode_t;
  typedef enum { XDS_LOAN,   XDS_GIFT   } xds_scope_t;
  
  struct xds_context;
  typedef struct xds_context xds_t;
  
  typedef int (*xds_engine_t)(xds_t* xds,
  			    void* engine_context,
  			    void* buffer,
  			    size_t buffer_size,
  			    va_list* args);
  
  xds_t* xds_init(xds_mode_t);
  void xds_destroy(xds_t* xds);
  
  int xds_register(xds_t* xds, const char* name, xds_engine_t engine, void* engine_context);
  int xds_unregister(xds_t* xds, const char* name);
  
  int xds_setbuffer(xds_t* xds, xds_scope_t flag, void*  buffer, size_t  buffer_len);
  int xds_getbuffer(xds_t* xds, xds_scope_t flag, void** buffer, size_t* buffer_len);
  
  int xds_encode(xds_t* xds, const char* fmt, ...);
  int xds_decode(xds_t* xds, const char* fmt, ...);
  int xds_vencode(xds_t* xds, const char* fmt, va_list args);
  int xds_vdecode(xds_t* xds, const char* fmt, va_list args);
  
  int xdr_encode_uint32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  int xdr_encode_int32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  int xdr_encode_uint64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  int xdr_encode_int64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  
  int xdr_decode_uint32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  int xdr_decode_int32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  int xdr_decode_uint64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  int xdr_decode_int64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  
  int xdr_encode_octetstream(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  int xdr_decode_octetstream(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  
  int xdr_encode_string(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  int xdr_decode_string(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  
  #endif /* !defined(__LIBXDS_H__) */

From ossp-cvs-owner@ossp.org  Fri Jul 20 12:56:04 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6KAu3S23066; Fri, 20 Jul 2001 12:56:03 +0200 (CEST)
Date: Fri, 20 Jul 2001 12:56:03 +0200 (CEST)
Message-Id: <200107201056.f6KAu3S23066@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds configure.ac ossp-pkg/srpc/libxds/reg...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   20-Jul-2001 12:56:03
  Branch: HEAD                             Handle: 2001072011560101

  Modified files:
    ossp-pkg/srpc/libxds    configure.ac xdr-decode-int32.c xdr-decode-int64.c
                            xdr-decode-octetstream.c xdr-decode-string.c
                            xdr-decode-uint32.c xdr-decode-uint64.c
                            xdr-encode-int32.c xdr-encode-int64.c
                            xdr-encode-octetstream.c xdr-encode-string.c
                            xdr-encode-uint32.c xdr-encode-uint64.c xds.h.in
    ossp-pkg/srpc/libxds/regression-tests
                            xdr-int32.c xdr-int64.c xdr-uint32.c xdr-uint64.c
                            xds-mystruct.c

  Log:
    Use xds_(u)int(8|16|32|64) instead of the system defines.

  Summary:
    Revision    Changes     Path
    1.2         +13 -1      ossp-pkg/srpc/libxds/configure.ac
    1.4         +5  -5      ossp-pkg/srpc/libxds/regression-tests/xdr-int32.c
    1.4         +5  -5      ossp-pkg/srpc/libxds/regression-tests/xdr-int64.c
    1.5         +4  -4      ossp-pkg/srpc/libxds/regression-tests/xdr-uint32.c
    1.5         +4  -4      ossp-pkg/srpc/libxds/regression-tests/xdr-uint64.c
    1.3         +3  -3      ossp-pkg/srpc/libxds/regression-tests/xds-mystruct.c
    1.2         +12 -12     ossp-pkg/srpc/libxds/xdr-decode-int32.c
    1.2         +21 -21     ossp-pkg/srpc/libxds/xdr-decode-int64.c
    1.2         +5  -5      ossp-pkg/srpc/libxds/xdr-decode-octetstream.c
    1.2         +6  -6      ossp-pkg/srpc/libxds/xdr-decode-string.c
    1.2         +6  -6      ossp-pkg/srpc/libxds/xdr-decode-uint32.c
    1.2         +10 -10     ossp-pkg/srpc/libxds/xdr-decode-uint64.c
    1.2         +8  -8      ossp-pkg/srpc/libxds/xdr-encode-int32.c
    1.2         +12 -12     ossp-pkg/srpc/libxds/xdr-encode-int64.c
    1.3         +10 -10     ossp-pkg/srpc/libxds/xdr-encode-octetstream.c
    1.3         +8  -8      ossp-pkg/srpc/libxds/xdr-encode-string.c
    1.2         +5  -5      ossp-pkg/srpc/libxds/xdr-encode-uint32.c
    1.2         +9  -9      ossp-pkg/srpc/libxds/xdr-encode-uint64.c
    1.2         +2  -0      ossp-pkg/srpc/libxds/xds.h.in
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/configure.ac
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 configure.ac
  --- ossp-pkg/srpc/libxds/configure.ac	2001/07/20 10:42:34	1.1
  +++ ossp-pkg/srpc/libxds/configure.ac	2001/07/20 10:56:01	1.2
  @@ -1,6 +1,6 @@
   dnl configure.in -- Process this file with autoconf to produce a configure script.
   
  -AC_INIT(libxds, [$Revision: 1.1 $])
  +AC_INIT(libxds, [$Revision: 1.2 $])
   
   dnl Get rid of the lousy -g and -O defaults in CFLAGS.
   dnl
  @@ -37,6 +37,12 @@
                               )]
                )
   AC_SUBST([xds_uint32_t])
  +AC_CHECK_TYPE(u_int64_t, [xds_uint64_t=u_int64_t],
  +              [AC_CHECK_TYPE(uint64_t, [xds_uint64_t=uint64_t],
  +			     [AC_MSG_ERROR([no unsigned 64 bit data type found])]
  +                            )]
  +             )
  +AC_SUBST([xds_uint64_t])
   AC_CHECK_TYPE(int8_t, [xds_int8_t=int8_t],
                 [AC_CHECK_TYPE(int8_t, [xds_int8_t=int8_t],
   			     [AC_MSG_ERROR([no signed 8 bit data type found])]
  @@ -55,6 +61,12 @@
                               )]
                )
   AC_SUBST([xds_int32_t])
  +AC_CHECK_TYPE(int64_t, [xds_int64_t=int64_t],
  +              [AC_CHECK_TYPE(int64_t, [xds_int64_t=int64_t],
  +			     [AC_MSG_ERROR([no signed 64 bit data type found])]
  +                            )]
  +             )
  +AC_SUBST([xds_int64_t])
   
   dnl Write results.
   dnl
  Index: ossp-pkg/srpc/libxds/regression-tests/xdr-int32.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xdr-int32.c
  --- ossp-pkg/srpc/libxds/regression-tests/xdr-int32.c	2001/07/18 18:58:46	1.3
  +++ ossp-pkg/srpc/libxds/regression-tests/xdr-int32.c	2001/07/20 10:56:02	1.4
  @@ -41,7 +41,7 @@
       char*  xds_buf;
       size_t xds_buf_size;
   
  -    int32_t values[] =
  +    xds_int32_t values[] =
   	{
   	 0x00000000,
   	 0x12345678,
  @@ -56,7 +56,7 @@
       /* Encode the values array using the RPC-XDR implementation. */
   
       xdrmem_create(&xdrs, xdr_buf, sizeof(xdr_buf), XDR_ENCODE);
  -    for (i = 0; i < sizeof(values)/sizeof(int32_t); ++i)
  +    for (i = 0; i < sizeof(values)/sizeof(xds_int32_t); ++i)
   	xdr_int32_t(&xdrs, &values[i]);
       xdr_buf_size = xdr_getpos(&xdrs);
       xdr_destroy(&xdrs);
  @@ -74,7 +74,7 @@
   	printf("Failed to register my encoding engines.\n");
   	return 1;
   	}
  -    for (i = 0; i < sizeof(values)/sizeof(int32_t); ++i)
  +    for (i = 0; i < sizeof(values)/sizeof(xds_int32_t); ++i)
   	{
   	if (xds_encode(xds, "int", values[i]) != XDS_OK)
   	    {
  @@ -122,9 +122,9 @@
   	printf("setbuffer() failed.\n");
   	return 1;
   	}
  -    for (i = 0; i < sizeof(values)/sizeof(int32_t); ++i)
  +    for (i = 0; i < sizeof(values)/sizeof(xds_int32_t); ++i)
   	{
  -	int32_t tmp;
  +	xds_int32_t tmp;
   	if (xds_decode(xds, "int", &tmp) != XDS_OK)
   	    {
   	    printf("xds_encode() failed for the %d value!\n", i);
  Index: ossp-pkg/srpc/libxds/regression-tests/xdr-int64.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xdr-int64.c
  --- ossp-pkg/srpc/libxds/regression-tests/xdr-int64.c	2001/07/18 18:58:46	1.3
  +++ ossp-pkg/srpc/libxds/regression-tests/xdr-int64.c	2001/07/20 10:56:02	1.4
  @@ -41,7 +41,7 @@
       char*  xds_buf;
       size_t xds_buf_size;
   
  -    int64_t values[] =
  +    xds_int64_t values[] =
   	{
   	 0x0000000000000000LL,
   	 0x123456789abcdef0LL,
  @@ -56,7 +56,7 @@
       /* Encode the values array using the RPC-XDR implementation. */
   
       xdrmem_create(&xdrs, xdr_buf, sizeof(xdr_buf), XDR_ENCODE);
  -    for (i = 0; i < sizeof(values)/sizeof(int64_t); ++i)
  +    for (i = 0; i < sizeof(values)/sizeof(xds_int64_t); ++i)
   	xdr_int64_t(&xdrs, &values[i]);
       xdr_buf_size = xdr_getpos(&xdrs);
       xdr_destroy(&xdrs);
  @@ -74,7 +74,7 @@
   	printf("Failed to register my encoding engines.\n");
   	return 1;
   	}
  -    for (i = 0; i < sizeof(values)/sizeof(int64_t); ++i)
  +    for (i = 0; i < sizeof(values)/sizeof(xds_int64_t); ++i)
   	{
   	if (xds_encode(xds, "int", values[i]) != XDS_OK)
   	    {
  @@ -122,9 +122,9 @@
   	printf("setbuffer() failed.\n");
   	return 1;
   	}
  -    for (i = 0; i < sizeof(values)/sizeof(int64_t); ++i)
  +    for (i = 0; i < sizeof(values)/sizeof(xds_int64_t); ++i)
   	{
  -	int64_t tmp;
  +	xds_int64_t tmp;
   	if (xds_decode(xds, "int", &tmp) != XDS_OK)
   	    {
   	    printf("xds_encode() failed for the %d value!\n", i);
  Index: ossp-pkg/srpc/libxds/regression-tests/xdr-uint32.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xdr-uint32.c
  --- ossp-pkg/srpc/libxds/regression-tests/xdr-uint32.c	2001/07/19 09:47:03	1.4
  +++ ossp-pkg/srpc/libxds/regression-tests/xdr-uint32.c	2001/07/20 10:56:02	1.5
  @@ -48,7 +48,7 @@
       char*  xds_buf;
       size_t xds_buf_size;
   
  -    u_int32_t values[] =
  +    xds_uint32_t values[] =
   	{
   	0x00000000,
   	0x12345678,
  @@ -62,7 +62,7 @@
       /* Encode the values array using the RPC-XDR implementation. */
   
       xdrmem_create(&xdrs, xdr_buf, sizeof(xdr_buf), XDR_ENCODE);
  -    for (i = 0; i < sizeof(values)/sizeof(u_int32_t); ++i)
  +    for (i = 0; i < sizeof(values)/sizeof(xds_uint32_t); ++i)
   	xdr_uint32_t(&xdrs, &values[i]);
       xdr_buf_size = xdr_getpos(&xdrs);
       xdr_destroy(&xdrs);
  @@ -128,9 +128,9 @@
   	printf("setbuffer() failed.\n");
   	return 1;
   	}
  -    for (i = 0; i < sizeof(values)/sizeof(u_int32_t); ++i)
  +    for (i = 0; i < sizeof(values)/sizeof(xds_uint32_t); ++i)
   	{
  -	u_int32_t tmp;
  +	xds_uint32_t tmp;
   	if (xds_decode(xds, "uint", &tmp) != XDS_OK)
   	    {
   	    printf("xds_encode() failed for the %d value!\n", i);
  Index: ossp-pkg/srpc/libxds/regression-tests/xdr-uint64.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xdr-uint64.c
  --- ossp-pkg/srpc/libxds/regression-tests/xdr-uint64.c	2001/07/19 09:47:03	1.4
  +++ ossp-pkg/srpc/libxds/regression-tests/xdr-uint64.c	2001/07/20 10:56:02	1.5
  @@ -48,7 +48,7 @@
       char*  xds_buf;
       size_t xds_buf_size;
   
  -    u_int64_t values[] =
  +    xds_uint64_t values[] =
   	{
   	0x0000000000000000ULL,
   	0x123456789abcdef0ULL,
  @@ -62,7 +62,7 @@
       /* Encode the values array using the RPC-XDR implementation. */
   
       xdrmem_create(&xdrs, xdr_buf, sizeof(xdr_buf), XDR_ENCODE);
  -    for (i = 0; i < sizeof(values)/sizeof(u_int64_t); ++i)
  +    for (i = 0; i < sizeof(values)/sizeof(xds_uint64_t); ++i)
   	xdr_uint64_t(&xdrs, &values[i]);
       xdr_buf_size = xdr_getpos(&xdrs);
       xdr_destroy(&xdrs);
  @@ -128,9 +128,9 @@
   	printf("setbuffer() failed.\n");
   	return 1;
   	}
  -    for (i = 0; i < sizeof(values)/sizeof(u_int64_t); ++i)
  +    for (i = 0; i < sizeof(values)/sizeof(xds_uint64_t); ++i)
   	{
  -	u_int64_t tmp;
  +	xds_uint64_t tmp;
   	if (xds_decode(xds, "uint", &tmp) != XDS_OK)
   	    {
   	    printf("xds_encode() failed for the %d value!\n", i);
  Index: ossp-pkg/srpc/libxds/regression-tests/xds-mystruct.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xds-mystruct.c
  --- ossp-pkg/srpc/libxds/regression-tests/xds-mystruct.c	2001/07/19 09:38:42	1.2
  +++ ossp-pkg/srpc/libxds/regression-tests/xds-mystruct.c	2001/07/20 10:56:02	1.3
  @@ -33,9 +33,9 @@
   
   struct mystruct
       {
  -    int32_t   small;
  -    int64_t   big;
  -    u_int32_t positive;
  +    xds_int32_t   small;
  +    xds_int64_t   big;
  +    xds_uint32_t  positive;
       };
   
   static int encode_mystruct_engine(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  Index: ossp-pkg/srpc/libxds/xdr-decode-int32.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xdr-decode-int32.c
  --- ossp-pkg/srpc/libxds/xdr-decode-int32.c	2001/07/19 12:28:15	1.1
  +++ ossp-pkg/srpc/libxds/xdr-decode-int32.c	2001/07/20 10:56:01	1.2
  @@ -31,8 +31,8 @@
   
   int xdr_decode_int32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
       {
  -    int32_t*  value;
  -    u_int32_t tmp;
  +    xds_int32_t*  value;
  +    xds_uint32_t  tmp;
   
       /* Consistency checks. */
   
  @@ -46,24 +46,24 @@
   
       /* Get value and format it into the buffer. */
   
  -    value = va_arg(*args, int32_t*);
  +    value = va_arg(*args, xds_int32_t*);
       assert(value != NULL);
   
  -    if (((u_int8_t*)buffer)[0] & 0x80)
  +    if (((xds_uint8_t*)buffer)[0] & 0x80)
   	{			/* negative number */
  -	tmp  = ((u_int8_t*)buffer)[0]; tmp = tmp << 8;
  -	tmp += ((u_int8_t*)buffer)[1]; tmp = tmp << 8;
  -	tmp += ((u_int8_t*)buffer)[2]; tmp = tmp << 8;
  -	tmp += ((u_int8_t*)buffer)[3];
  +	tmp  = ((xds_uint8_t*)buffer)[0]; tmp = tmp << 8;
  +	tmp += ((xds_uint8_t*)buffer)[1]; tmp = tmp << 8;
  +	tmp += ((xds_uint8_t*)buffer)[2]; tmp = tmp << 8;
  +	tmp += ((xds_uint8_t*)buffer)[3];
   	tmp = 0 - tmp;
   	*value = 0 - (int32_t)tmp;
   	}
       else
   	{			/* positive number */
  -	*value  = ((u_int8_t*)buffer)[0]; *value = *value << 8;
  -	*value += ((u_int8_t*)buffer)[1]; *value = *value << 8;
  -	*value += ((u_int8_t*)buffer)[2]; *value = *value << 8;
  -	*value += ((u_int8_t*)buffer)[3];
  +	*value  = ((xds_uint8_t*)buffer)[0]; *value = *value << 8;
  +	*value += ((xds_uint8_t*)buffer)[1]; *value = *value << 8;
  +	*value += ((xds_uint8_t*)buffer)[2]; *value = *value << 8;
  +	*value += ((xds_uint8_t*)buffer)[3];
   	}
   
       /* Done. */
  Index: ossp-pkg/srpc/libxds/xdr-decode-int64.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xdr-decode-int64.c
  --- ossp-pkg/srpc/libxds/xdr-decode-int64.c	2001/07/19 12:28:15	1.1
  +++ ossp-pkg/srpc/libxds/xdr-decode-int64.c	2001/07/20 10:56:01	1.2
  @@ -31,8 +31,8 @@
   
   int xdr_decode_int64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
       {
  -    int64_t*  value;
  -    u_int64_t tmp;
  +    xds_int64_t*  value;
  +    xds_uint64_t  tmp;
   
       /* Consistency checks. */
   
  @@ -46,32 +46,32 @@
   
       /* Get value and format it into the buffer. */
   
  -    value = va_arg(*args, int64_t*);
  +    value = va_arg(*args, xds_int64_t*);
       assert(value != NULL);
   
  -    if (((u_int8_t*)buffer)[0] & 0x80)
  +    if (((xds_uint8_t*)buffer)[0] & 0x80)
   	{			/* negative number */
  -	tmp  = ((u_int8_t*)buffer)[0]; tmp = tmp << 8;
  -	tmp += ((u_int8_t*)buffer)[1]; tmp = tmp << 8;
  -	tmp += ((u_int8_t*)buffer)[2]; tmp = tmp << 8;
  -	tmp += ((u_int8_t*)buffer)[3]; tmp = tmp << 8;
  -	tmp += ((u_int8_t*)buffer)[4]; tmp = tmp << 8;
  -	tmp += ((u_int8_t*)buffer)[5]; tmp = tmp << 8;
  -	tmp += ((u_int8_t*)buffer)[6]; tmp = tmp << 8;
  -	tmp += ((u_int8_t*)buffer)[7];
  +	tmp  = ((xds_uint8_t*)buffer)[0]; tmp = tmp << 8;
  +	tmp += ((xds_uint8_t*)buffer)[1]; tmp = tmp << 8;
  +	tmp += ((xds_uint8_t*)buffer)[2]; tmp = tmp << 8;
  +	tmp += ((xds_uint8_t*)buffer)[3]; tmp = tmp << 8;
  +	tmp += ((xds_uint8_t*)buffer)[4]; tmp = tmp << 8;
  +	tmp += ((xds_uint8_t*)buffer)[5]; tmp = tmp << 8;
  +	tmp += ((xds_uint8_t*)buffer)[6]; tmp = tmp << 8;
  +	tmp += ((xds_uint8_t*)buffer)[7];
   	tmp = 0 - tmp;
  -	*value = 0 - (int64_t)tmp;
  +	*value = 0 - (xds_int64_t)tmp;
   	}
       else
   	{			/* positive number */
  -	*value  = ((u_int8_t*)buffer)[0]; *value = *value << 8;
  -	*value += ((u_int8_t*)buffer)[1]; *value = *value << 8;
  -	*value += ((u_int8_t*)buffer)[2]; *value = *value << 8;
  -	*value += ((u_int8_t*)buffer)[3]; *value = *value << 8;
  -	*value += ((u_int8_t*)buffer)[4]; *value = *value << 8;
  -	*value += ((u_int8_t*)buffer)[5]; *value = *value << 8;
  -	*value += ((u_int8_t*)buffer)[6]; *value = *value << 8;
  -	*value += ((u_int8_t*)buffer)[7];
  +	*value  = ((xds_uint8_t*)buffer)[0]; *value = *value << 8;
  +	*value += ((xds_uint8_t*)buffer)[1]; *value = *value << 8;
  +	*value += ((xds_uint8_t*)buffer)[2]; *value = *value << 8;
  +	*value += ((xds_uint8_t*)buffer)[3]; *value = *value << 8;
  +	*value += ((xds_uint8_t*)buffer)[4]; *value = *value << 8;
  +	*value += ((xds_uint8_t*)buffer)[5]; *value = *value << 8;
  +	*value += ((xds_uint8_t*)buffer)[6]; *value = *value << 8;
  +	*value += ((xds_uint8_t*)buffer)[7];
   	}
   
       /* Done. */
  Index: ossp-pkg/srpc/libxds/xdr-decode-octetstream.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xdr-decode-octetstream.c
  --- ossp-pkg/srpc/libxds/xdr-decode-octetstream.c	2001/07/20 09:22:25	1.1
  +++ ossp-pkg/srpc/libxds/xdr-decode-octetstream.c	2001/07/20 10:56:01	1.2
  @@ -56,10 +56,10 @@
   
       if (buffer_size >= 4)
   	{
  -	*p_len  = ((u_int8_t*)buffer)[0]; *p_len = *p_len << 8;
  -	*p_len += ((u_int8_t*)buffer)[1]; *p_len = *p_len << 8;
  -	*p_len += ((u_int8_t*)buffer)[2]; *p_len = *p_len << 8;
  -	*p_len += ((u_int8_t*)buffer)[3];
  +	*p_len  = ((xds_uint8_t*)buffer)[0]; *p_len = *p_len << 8;
  +	*p_len += ((xds_uint8_t*)buffer)[1]; *p_len = *p_len << 8;
  +	*p_len += ((xds_uint8_t*)buffer)[2]; *p_len = *p_len << 8;
  +	*p_len += ((xds_uint8_t*)buffer)[3];
   	}
       else
   	return XDS_ERR_UNDERFLOW;
  @@ -81,7 +81,7 @@
   
       /* Copy data into the buffer. */
   
  -    memmove(*p, (u_int8_t*)buffer+4, *p_len);
  +    memmove(*p, (xds_uint8_t*)buffer+4, *p_len);
   
       /* Done. */
   
  Index: ossp-pkg/srpc/libxds/xdr-decode-string.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xdr-decode-string.c
  --- ossp-pkg/srpc/libxds/xdr-decode-string.c	2001/07/19 15:13:39	1.1
  +++ ossp-pkg/srpc/libxds/xdr-decode-string.c	2001/07/20 10:56:01	1.2
  @@ -56,10 +56,10 @@
   
       if (buffer_size >= 4)
   	{
  -	*p_len  = ((u_int8_t*)buffer)[0]; *p_len = *p_len << 8;
  -	*p_len += ((u_int8_t*)buffer)[1]; *p_len = *p_len << 8;
  -	*p_len += ((u_int8_t*)buffer)[2]; *p_len = *p_len << 8;
  -	*p_len += ((u_int8_t*)buffer)[3];
  +	*p_len  = ((xds_uint8_t*)buffer)[0]; *p_len = *p_len << 8;
  +	*p_len += ((xds_uint8_t*)buffer)[1]; *p_len = *p_len << 8;
  +	*p_len += ((xds_uint8_t*)buffer)[2]; *p_len = *p_len << 8;
  +	*p_len += ((xds_uint8_t*)buffer)[3];
   	}
       else
   	return XDS_ERR_UNDERFLOW;
  @@ -81,8 +81,8 @@
   
       /* Copy data into the buffer. */
   
  -    memmove(*p, (u_int8_t*)buffer+4, *p_len);
  -    ((u_int8_t*)buffer)[4+*p_len] = '\0';
  +    memmove(*p, (xds_uint8_t*)buffer+4, *p_len);
  +    ((xds_uint8_t*)buffer)[4+*p_len] = '\0';
   
       /* Done. */
   
  Index: ossp-pkg/srpc/libxds/xdr-decode-uint32.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xdr-decode-uint32.c
  --- ossp-pkg/srpc/libxds/xdr-decode-uint32.c	2001/07/19 12:28:15	1.1
  +++ ossp-pkg/srpc/libxds/xdr-decode-uint32.c	2001/07/20 10:56:01	1.2
  @@ -31,7 +31,7 @@
   
   int xdr_decode_uint32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
       {
  -    u_int32_t*  value;
  +    xds_uint32_t*  value;
   
       /* Consistency checks. */
   
  @@ -45,13 +45,13 @@
   
       /* Get value and format it into the buffer. */
   
  -    value = va_arg(*args, u_int32_t*);
  +    value = va_arg(*args, xds_uint32_t*);
       assert(value != NULL);
   
  -    *value  = ((u_int8_t*)buffer)[0]; *value = *value << 8;
  -    *value += ((u_int8_t*)buffer)[1]; *value = *value << 8;
  -    *value += ((u_int8_t*)buffer)[2]; *value = *value << 8;
  -    *value += ((u_int8_t*)buffer)[3];
  +    *value  = ((xds_uint8_t*)buffer)[0]; *value = *value << 8;
  +    *value += ((xds_uint8_t*)buffer)[1]; *value = *value << 8;
  +    *value += ((xds_uint8_t*)buffer)[2]; *value = *value << 8;
  +    *value += ((xds_uint8_t*)buffer)[3];
   
       /* Done. */
   
  Index: ossp-pkg/srpc/libxds/xdr-decode-uint64.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xdr-decode-uint64.c
  --- ossp-pkg/srpc/libxds/xdr-decode-uint64.c	2001/07/19 12:28:15	1.1
  +++ ossp-pkg/srpc/libxds/xdr-decode-uint64.c	2001/07/20 10:56:01	1.2
  @@ -31,7 +31,7 @@
   
   int xdr_decode_uint64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
       {
  -    u_int64_t*  value;
  +    xds_uint64_t*  value;
   
       /* Consistency checks. */
   
  @@ -45,17 +45,17 @@
   
       /* Get value and format it into the buffer. */
   
  -    value = va_arg(*args, u_int64_t*);
  +    value = va_arg(*args, xds_uint64_t*);
       assert(value != NULL);
   
  -    *value  = ((u_int8_t*)buffer)[0]; *value = *value << 8;
  -    *value += ((u_int8_t*)buffer)[1]; *value = *value << 8;
  -    *value += ((u_int8_t*)buffer)[2]; *value = *value << 8;
  -    *value += ((u_int8_t*)buffer)[3]; *value = *value << 8;
  -    *value += ((u_int8_t*)buffer)[4]; *value = *value << 8;
  -    *value += ((u_int8_t*)buffer)[5]; *value = *value << 8;
  -    *value += ((u_int8_t*)buffer)[6]; *value = *value << 8;
  -    *value += ((u_int8_t*)buffer)[7];
  +    *value  = ((xds_uint8_t*)buffer)[0]; *value = *value << 8;
  +    *value += ((xds_uint8_t*)buffer)[1]; *value = *value << 8;
  +    *value += ((xds_uint8_t*)buffer)[2]; *value = *value << 8;
  +    *value += ((xds_uint8_t*)buffer)[3]; *value = *value << 8;
  +    *value += ((xds_uint8_t*)buffer)[4]; *value = *value << 8;
  +    *value += ((xds_uint8_t*)buffer)[5]; *value = *value << 8;
  +    *value += ((xds_uint8_t*)buffer)[6]; *value = *value << 8;
  +    *value += ((xds_uint8_t*)buffer)[7];
   
       /* Done. */
   
  Index: ossp-pkg/srpc/libxds/xdr-encode-int32.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xdr-encode-int32.c
  --- ossp-pkg/srpc/libxds/xdr-encode-int32.c	2001/07/19 12:28:15	1.1
  +++ ossp-pkg/srpc/libxds/xdr-encode-int32.c	2001/07/20 10:56:01	1.2
  @@ -44,19 +44,19 @@
   
       if (buffer_size >= 4)
   	{
  -	u_int32_t tmp;
  -	int32_t value = va_arg(*args, u_int32_t);
  +	xds_uint32_t tmp;
  +	xds_int32_t value = va_arg(*args, xds_uint32_t);
   	if (value < 0)
   	    {
   	    value = 0 - value;
  -	    tmp = 0 - (u_int32_t)value;
  +	    tmp = 0 - (xds_uint32_t)value;
   	    }
   	else
  -	    tmp = (u_int32_t)value;
  -	((u_int8_t*)buffer)[0] = (tmp >> 24) & 0x000000ff;
  -	((u_int8_t*)buffer)[1] = (tmp >> 16) & 0x000000ff;
  -	((u_int8_t*)buffer)[2] = (tmp >>  8) & 0x000000ff;
  -	((u_int8_t*)buffer)[3] = (tmp >>  0) & 0x000000ff;
  +	    tmp = (xds_uint32_t)value;
  +	((xds_uint8_t*)buffer)[0] = (tmp >> 24) & 0x000000ff;
  +	((xds_uint8_t*)buffer)[1] = (tmp >> 16) & 0x000000ff;
  +	((xds_uint8_t*)buffer)[2] = (tmp >>  8) & 0x000000ff;
  +	((xds_uint8_t*)buffer)[3] = (tmp >>  0) & 0x000000ff;
   	}
   
       /* Done. */
  Index: ossp-pkg/srpc/libxds/xdr-encode-int64.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xdr-encode-int64.c
  --- ossp-pkg/srpc/libxds/xdr-encode-int64.c	2001/07/19 12:28:15	1.1
  +++ ossp-pkg/srpc/libxds/xdr-encode-int64.c	2001/07/20 10:56:01	1.2
  @@ -44,23 +44,23 @@
   
       if (buffer_size >= 8)
   	{
  -	u_int64_t tmp;
  -	int64_t value = va_arg(*args, u_int64_t);
  +	xds_uint64_t tmp;
  +	xds_int64_t  value = va_arg(*args, xds_uint64_t);
   	if (value < 0)
   	    {
   	    value = 0 - value;
  -	    tmp = 0 - (u_int64_t)value;
  +	    tmp = 0 - (xds_uint64_t)value;
   	    }
   	else
  -	    tmp = (u_int64_t)value;
  -	((u_int8_t*)buffer)[0] = (tmp >> 56) & 0x000000ff;
  -	((u_int8_t*)buffer)[1] = (tmp >> 48) & 0x000000ff;
  -	((u_int8_t*)buffer)[2] = (tmp >> 40) & 0x000000ff;
  -	((u_int8_t*)buffer)[3] = (tmp >> 32) & 0x000000ff;
  -	((u_int8_t*)buffer)[4] = (tmp >> 24) & 0x000000ff;
  -	((u_int8_t*)buffer)[5] = (tmp >> 16) & 0x000000ff;
  -	((u_int8_t*)buffer)[6] = (tmp >>  8) & 0x000000ff;
  -	((u_int8_t*)buffer)[7] = (tmp >>  0) & 0x000000ff;
  +	    tmp = (xds_uint64_t)value;
  +	((xds_uint8_t*)buffer)[0] = (tmp >> 56) & 0x000000ff;
  +	((xds_uint8_t*)buffer)[1] = (tmp >> 48) & 0x000000ff;
  +	((xds_uint8_t*)buffer)[2] = (tmp >> 40) & 0x000000ff;
  +	((xds_uint8_t*)buffer)[3] = (tmp >> 32) & 0x000000ff;
  +	((xds_uint8_t*)buffer)[4] = (tmp >> 24) & 0x000000ff;
  +	((xds_uint8_t*)buffer)[5] = (tmp >> 16) & 0x000000ff;
  +	((xds_uint8_t*)buffer)[6] = (tmp >>  8) & 0x000000ff;
  +	((xds_uint8_t*)buffer)[7] = (tmp >>  0) & 0x000000ff;
   	}
   
       /* Done. */
  Index: ossp-pkg/srpc/libxds/xdr-encode-octetstream.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xdr-encode-octetstream.c
  --- ossp-pkg/srpc/libxds/xdr-encode-octetstream.c	2001/07/20 10:07:11	1.2
  +++ ossp-pkg/srpc/libxds/xdr-encode-octetstream.c	2001/07/20 10:56:01	1.3
  @@ -32,9 +32,9 @@
   
   int xdr_encode_octetstream(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
       {
  -    u_int8_t* p;
  -    size_t    p_len;
  -    size_t    padding;
  +    xds_uint8_t* p;
  +    size_t       p_len;
  +    size_t       padding;
   
       /* Consistency checks. */
   
  @@ -48,7 +48,7 @@
       /* Get value from stack and calculate the correct amount of
          padding. */
   
  -    p       = (u_int8_t*)va_arg(*args, void*);
  +    p       = (xds_uint8_t*)va_arg(*args, void*);
       assert(p != NULL);
       p_len   = va_arg(*args, size_t);
       padding = (4 - (p_len & 0x03)) & 0x03;
  @@ -58,12 +58,12 @@
   
       if (buffer_size >= 4 + p_len + padding)
   	{
  -	((u_int8_t*)buffer)[0] = (p_len >> 24) & 0x000000ff;
  -	((u_int8_t*)buffer)[1] = (p_len >> 16) & 0x000000ff;
  -	((u_int8_t*)buffer)[2] = (p_len >>  8) & 0x000000ff;
  -	((u_int8_t*)buffer)[3] = (p_len >>  0) & 0x000000ff;
  -	memmove((u_int8_t*)buffer+4, p, p_len);
  -	memset((u_int8_t*)buffer+4+p_len, 0, padding);
  +	((xds_uint8_t*)buffer)[0] = (p_len >> 24) & 0x000000ff;
  +	((xds_uint8_t*)buffer)[1] = (p_len >> 16) & 0x000000ff;
  +	((xds_uint8_t*)buffer)[2] = (p_len >>  8) & 0x000000ff;
  +	((xds_uint8_t*)buffer)[3] = (p_len >>  0) & 0x000000ff;
  +	memmove((xds_uint8_t*)buffer+4, p, p_len);
  +	memset((xds_uint8_t*)buffer+4+p_len, 0, padding);
   	}
   
       /* Done. */
  Index: ossp-pkg/srpc/libxds/xdr-encode-string.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xdr-encode-string.c
  --- ossp-pkg/srpc/libxds/xdr-encode-string.c	2001/07/20 10:07:11	1.2
  +++ ossp-pkg/srpc/libxds/xdr-encode-string.c	2001/07/20 10:56:01	1.3
  @@ -32,7 +32,7 @@
   
   int xdr_encode_string(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
       {
  -    u_int8_t* p;
  +    xds_uint8_t* p;
       size_t    p_len;
       size_t    padding;
   
  @@ -48,7 +48,7 @@
       /* Get value from stack and calculate the correct amount of
          padding. */
   
  -    p       = (u_int8_t*)va_arg(*args, void*);
  +    p       = (xds_uint8_t*)va_arg(*args, void*);
       assert(p != NULL);
       p_len   = strlen((char*)p);
       padding = (4 - (p_len & 0x03)) & 0x03;
  @@ -58,12 +58,12 @@
   
       if (buffer_size >= 4 + p_len + padding)
   	{
  -	((u_int8_t*)buffer)[0] = (p_len >> 24) & 0x000000ff;
  -	((u_int8_t*)buffer)[1] = (p_len >> 16) & 0x000000ff;
  -	((u_int8_t*)buffer)[2] = (p_len >>  8) & 0x000000ff;
  -	((u_int8_t*)buffer)[3] = (p_len >>  0) & 0x000000ff;
  -	memmove((u_int8_t*)buffer+4, p, p_len);
  -	memset((u_int8_t*)buffer+4+p_len, 0, padding);
  +	((xds_uint8_t*)buffer)[0] = (p_len >> 24) & 0x000000ff;
  +	((xds_uint8_t*)buffer)[1] = (p_len >> 16) & 0x000000ff;
  +	((xds_uint8_t*)buffer)[2] = (p_len >>  8) & 0x000000ff;
  +	((xds_uint8_t*)buffer)[3] = (p_len >>  0) & 0x000000ff;
  +	memmove((xds_uint8_t*)buffer+4, p, p_len);
  +	memset((xds_uint8_t*)buffer+4+p_len, 0, padding);
   	}
   
       /* Done. */
  Index: ossp-pkg/srpc/libxds/xdr-encode-uint32.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xdr-encode-uint32.c
  --- ossp-pkg/srpc/libxds/xdr-encode-uint32.c	2001/07/19 12:28:15	1.1
  +++ ossp-pkg/srpc/libxds/xdr-encode-uint32.c	2001/07/20 10:56:01	1.2
  @@ -44,11 +44,11 @@
   
       if (buffer_size >= 4)
   	{
  -	u_int32_t value = va_arg(*args, u_int32_t);
  -	((u_int8_t*)buffer)[0] = (value >> 24) & 0x000000ff;
  -	((u_int8_t*)buffer)[1] = (value >> 16) & 0x000000ff;
  -	((u_int8_t*)buffer)[2] = (value >>  8) & 0x000000ff;
  -	((u_int8_t*)buffer)[3] = (value >>  0) & 0x000000ff;
  +	xds_uint32_t value = va_arg(*args, xds_uint32_t);
  +	((xds_uint8_t*)buffer)[0] = (value >> 24) & 0x000000ff;
  +	((xds_uint8_t*)buffer)[1] = (value >> 16) & 0x000000ff;
  +	((xds_uint8_t*)buffer)[2] = (value >>  8) & 0x000000ff;
  +	((xds_uint8_t*)buffer)[3] = (value >>  0) & 0x000000ff;
   	}
   
       /* Done. */
  Index: ossp-pkg/srpc/libxds/xdr-encode-uint64.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xdr-encode-uint64.c
  --- ossp-pkg/srpc/libxds/xdr-encode-uint64.c	2001/07/19 12:28:15	1.1
  +++ ossp-pkg/srpc/libxds/xdr-encode-uint64.c	2001/07/20 10:56:01	1.2
  @@ -44,15 +44,15 @@
   
       if (buffer_size >= 8)
   	{
  -	u_int64_t value = va_arg(*args, u_int64_t);
  -	((u_int8_t*)buffer)[0] = (value >> 56) & 0x000000ff;
  -	((u_int8_t*)buffer)[1] = (value >> 48) & 0x000000ff;
  -	((u_int8_t*)buffer)[2] = (value >> 40) & 0x000000ff;
  -	((u_int8_t*)buffer)[3] = (value >> 32) & 0x000000ff;
  -	((u_int8_t*)buffer)[4] = (value >> 24) & 0x000000ff;
  -	((u_int8_t*)buffer)[5] = (value >> 16) & 0x000000ff;
  -	((u_int8_t*)buffer)[6] = (value >>  8) & 0x000000ff;
  -	((u_int8_t*)buffer)[7] = (value >>  0) & 0x000000ff;
  +	xds_uint64_t value = va_arg(*args, xds_uint64_t);
  +	((xds_uint8_t*)buffer)[0] = (value >> 56) & 0x000000ff;
  +	((xds_uint8_t*)buffer)[1] = (value >> 48) & 0x000000ff;
  +	((xds_uint8_t*)buffer)[2] = (value >> 40) & 0x000000ff;
  +	((xds_uint8_t*)buffer)[3] = (value >> 32) & 0x000000ff;
  +	((xds_uint8_t*)buffer)[4] = (value >> 24) & 0x000000ff;
  +	((xds_uint8_t*)buffer)[5] = (value >> 16) & 0x000000ff;
  +	((xds_uint8_t*)buffer)[6] = (value >>  8) & 0x000000ff;
  +	((xds_uint8_t*)buffer)[7] = (value >>  0) & 0x000000ff;
   	}
   
       /* Done. */
  Index: ossp-pkg/srpc/libxds/xds.h.in
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xds.h.in
  --- ossp-pkg/srpc/libxds/xds.h.in	2001/07/20 10:42:34	1.1
  +++ ossp-pkg/srpc/libxds/xds.h.in	2001/07/20 10:56:01	1.2
  @@ -37,9 +37,11 @@
   typedef @xds_uint8_t@ xds_uint8_t;
   typedef @xds_uint16_t@ xds_uint16_t;
   typedef @xds_uint32_t@ xds_uint32_t;
  +typedef @xds_uint64_t@ xds_uint64_t;
   typedef @xds_int8_t@ xds_int8_t;
   typedef @xds_int16_t@ xds_int16_t;
   typedef @xds_int32_t@ xds_int32_t;
  +typedef @xds_int64_t@ xds_int64_t;
   
   enum
       {

From ossp-cvs-owner@ossp.org  Fri Jul 20 13:05:56 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6KB5tt24458; Fri, 20 Jul 2001 13:05:55 +0200 (CEST)
Date: Fri, 20 Jul 2001 13:05:55 +0200 (CEST)
Message-Id: <200107201105.f6KB5tt24458@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds configure.ac ossp-pkg/srpc/libxds/reg...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   20-Jul-2001 13:05:55
  Branch: HEAD                             Handle: 2001072012055401

  Modified files:
    ossp-pkg/srpc/libxds    configure.ac
    ossp-pkg/srpc/libxds/regression-tests
                            Makefile.in

  Log:
    Check whether libnsl has to be linked for the xdr_xxx() routines.

  Summary:
    Revision    Changes     Path
    1.3         +6  -1      ossp-pkg/srpc/libxds/configure.ac
    1.4         +1  -1      ossp-pkg/srpc/libxds/regression-tests/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/configure.ac
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 configure.ac
  --- ossp-pkg/srpc/libxds/configure.ac	2001/07/20 10:56:01	1.2
  +++ ossp-pkg/srpc/libxds/configure.ac	2001/07/20 11:05:54	1.3
  @@ -1,6 +1,6 @@
   dnl configure.in -- Process this file with autoconf to produce a configure script.
   
  -AC_INIT(libxds, [$Revision: 1.2 $])
  +AC_INIT(libxds, [$Revision: 1.3 $])
   
   dnl Get rid of the lousy -g and -O defaults in CFLAGS.
   dnl
  @@ -67,6 +67,11 @@
                               )]
                )
   AC_SUBST([xds_int64_t])
  +
  +dnl Find the library containing the xdr_xxx() functions.
  +dnl
  +AC_CHECK_LIB(nsl, xdrmem_create, [xdr_lib=-lnsl])
  +AC_SUBST([xdr_lib])
   
   dnl Write results.
   dnl
  Index: ossp-pkg/srpc/libxds/regression-tests/Makefile.in
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 Makefile.in
  --- ossp-pkg/srpc/libxds/regression-tests/Makefile.in	2001/07/20 10:09:06	1.3
  +++ ossp-pkg/srpc/libxds/regression-tests/Makefile.in	2001/07/20 11:05:55	1.4
  @@ -6,7 +6,7 @@
   
   CPPFLAGS	= @CPPFLAGS@ @DEFS@ -D_GNU_SOURCE
   CFLAGS		= @CFLAGS@
  -LDFLAGS		= @LDFLAGS@ -L..
  +LDFLAGS		= @LDFLAGS@ @xdr_lib@ -L..
   
   TESTS		= xds-core.exe xds-find-engine.exe xds-register.exe xds-encode.exe \
   		  xds-getbuffer.exe xds-decode.exe xds-setbuffer.exe xds-engine-restart.exe \

From ossp-cvs-owner@ossp.org  Fri Jul 20 13:15:41 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6KBFeE25679; Fri, 20 Jul 2001 13:15:40 +0200 (CEST)
Date: Fri, 20 Jul 2001 13:15:40 +0200 (CEST)
Message-Id: <200107201115.f6KBFeE25679@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xdr-decode-string.c xdr-encode-string...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   20-Jul-2001 13:15:39
  Branch: HEAD                             Handle: 2001072012153900

  Modified files:
    ossp-pkg/srpc/libxds    xdr-decode-string.c xdr-encode-string.c

  Log:
    Relaxed type checking a bit: strings are char*, not void*.

  Summary:
    Revision    Changes     Path
    1.3         +3  -3      ossp-pkg/srpc/libxds/xdr-decode-string.c
    1.4         +5  -5      ossp-pkg/srpc/libxds/xdr-encode-string.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xdr-decode-string.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xdr-decode-string.c
  --- ossp-pkg/srpc/libxds/xdr-decode-string.c	2001/07/20 10:56:01	1.2
  +++ ossp-pkg/srpc/libxds/xdr-decode-string.c	2001/07/20 11:15:39	1.3
  @@ -32,7 +32,7 @@
   
   int xdr_decode_string(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
       {
  -    void**  p;
  +    char**  p;
       size_t* p_len;
       size_t  padding;
   
  @@ -47,7 +47,7 @@
   
       /* Get pointers from the stack. */
   
  -    p     = va_arg(*args, void**);
  +    p     = va_arg(*args, char**);
       p_len = va_arg(*args, size_t*);
       assert(p != NULL);
       assert(p_len != NULL);
  @@ -75,7 +75,7 @@
   
       /* Allocate buffer for the data. */
   
  -    *p = malloc(*p_len + 1);
  +    *p = (char*)malloc(*p_len + 1);
       if (*p == NULL)
   	return XDS_ERR_NO_MEM;
   
  Index: ossp-pkg/srpc/libxds/xdr-encode-string.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xdr-encode-string.c
  --- ossp-pkg/srpc/libxds/xdr-encode-string.c	2001/07/20 10:56:01	1.3
  +++ ossp-pkg/srpc/libxds/xdr-encode-string.c	2001/07/20 11:15:39	1.4
  @@ -32,9 +32,9 @@
   
   int xdr_encode_string(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
       {
  -    xds_uint8_t* p;
  -    size_t    p_len;
  -    size_t    padding;
  +    char*  p;
  +    size_t p_len;
  +    size_t padding;
   
       /* Consistency checks. */
   
  @@ -48,9 +48,9 @@
       /* Get value from stack and calculate the correct amount of
          padding. */
   
  -    p       = (xds_uint8_t*)va_arg(*args, void*);
  +    p       = va_arg(*args, char*);
       assert(p != NULL);
  -    p_len   = strlen((char*)p);
  +    p_len   = strlen(p);
       padding = (4 - (p_len & 0x03)) & 0x03;
       assert((p_len + padding) % 4 == 0);
   

From ossp-cvs-owner@ossp.org  Fri Jul 20 13:22:20 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6KBMIw26491; Fri, 20 Jul 2001 13:22:18 +0200 (CEST)
Date: Fri, 20 Jul 2001 13:22:18 +0200 (CEST)
Message-Id: <200107201122.f6KBMIw26491@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds configure.ac ossp-pkg/srpc/libxds/reg...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   20-Jul-2001 13:22:18
  Branch: HEAD                             Handle: 19700101010000995624538

  Added files:
    ossp-pkg/srpc/libxds/regression-tests
                            .run-tests.in
  Modified files:
    ossp-pkg/srpc/libxds    configure.ac
    ossp-pkg/srpc/libxds/regression-tests
                            Makefile.in
  Removed files:
    ossp-pkg/srpc/libxds/regression-tests
                            .run-tests

  Log:
    Insert path of "bash" into the run-tests script.

  Summary:
    Revision    Changes     Path
    1.4         +3  -2      ossp-pkg/srpc/libxds/configure.ac
    NONE        +0  -40     ossp-pkg/srpc/libxds/regression-tests/.run-tests
    1.1         +40 -0      ossp-pkg/srpc/libxds/regression-tests/.run-tests.in
    1.5         +1  -1      ossp-pkg/srpc/libxds/regression-tests/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/configure.ac
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 configure.ac
  --- ossp-pkg/srpc/libxds/configure.ac	2001/07/20 11:05:54	1.3
  +++ ossp-pkg/srpc/libxds/configure.ac	2001/07/20 11:22:17	1.4
  @@ -1,6 +1,6 @@
   dnl configure.in -- Process this file with autoconf to produce a configure script.
   
  -AC_INIT(libxds, [$Revision: 1.3 $])
  +AC_INIT(libxds, [$Revision: 1.4 $])
   
   dnl Get rid of the lousy -g and -O defaults in CFLAGS.
   dnl
  @@ -10,6 +10,7 @@
   dnl
   AC_PROG_CC
   AC_PROG_RANLIB
  +AC_PATH_PROG(bash, bash)
   
   dnl Set special flags for gcc.
   dnl
  @@ -75,4 +76,4 @@
   
   dnl Write results.
   dnl
  -AC_OUTPUT(xds.h Makefile regression-tests/Makefile)
  +AC_OUTPUT(xds.h regression-tests/.run-tests Makefile regression-tests/Makefile)
    Index: ossp-pkg/srpc/libxds/regression-tests/.run-tests.in
  ============================================================
  $ cvs update -p -r1.1 .run-tests.in
  #! @bash@
  
  if [ $# -lt 1 ]; then
      echo "Usage: $0 test1.exe [...]"
      exit 1;
  fi
  
  RESCOLUMN=30
  numTests=0
  numFails=0
  
  echo "Running test suite:"
  
  for suite in $*; do
      tmp=`expr "${suite}" : '\(.*\)\.exe$'`
      echo -n "$tmp"
      currpos=`expr $RESCOLUMN - ${#tmp}`
      while [ $currpos -gt 1 ]; do
          echo -n "."
          currpos=`expr $currpos - 1`
      done
      echo -n " "
      numTests=`expr $numTests + 1`
      eval ./$suite >${tmp}.log 2>&1
      if [ $? -eq 0 ]; then
          echo OK
      else
          numFails=`expr $numFails + 1`
          echo FAILED
      fi
  done
  
  echo
  if [ $numFails -eq 0 ]; then
      echo "Summary: All tests succeeded."
      exit 0
  else
      echo "Summary: $numFails of $numTests tests failed ($(($numFails*100/$numTests))%)."
      exit 1
  fi
  Index: ossp-pkg/srpc/libxds/regression-tests/Makefile.in
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 Makefile.in
  --- ossp-pkg/srpc/libxds/regression-tests/Makefile.in	2001/07/20 11:05:55	1.4
  +++ ossp-pkg/srpc/libxds/regression-tests/Makefile.in	2001/07/20 11:22:18	1.5
  @@ -34,7 +34,7 @@
   	rm -f $(TESTS) *.log
   
   distclean::	clean
  -	rm -f  Makefile
  +	rm -f  Makefile .run-tests
   
   realclean::	distclean
   

From ossp-cvs-owner@ossp.org  Fri Jul 20 13:27:27 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6KBRQg27152; Fri, 20 Jul 2001 13:27:26 +0200 (CEST)
Date: Fri, 20 Jul 2001 13:27:26 +0200 (CEST)
Message-Id: <200107201127.f6KBRQg27152@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds configure.ac
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   20-Jul-2001 13:27:26
  Branch: HEAD                             Handle: 2001072012272500

  Modified files:
    ossp-pkg/srpc/libxds    configure.ac

  Log:
    Make sure ./run-tests has an x-flag.

  Summary:
    Revision    Changes     Path
    1.5         +4  -2      ossp-pkg/srpc/libxds/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/configure.ac
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 configure.ac
  --- ossp-pkg/srpc/libxds/configure.ac	2001/07/20 11:22:17	1.4
  +++ ossp-pkg/srpc/libxds/configure.ac	2001/07/20 11:27:25	1.5
  @@ -1,6 +1,6 @@
   dnl configure.in -- Process this file with autoconf to produce a configure script.
   
  -AC_INIT(libxds, [$Revision: 1.4 $])
  +AC_INIT(libxds, [$Revision: 1.5 $])
   
   dnl Get rid of the lousy -g and -O defaults in CFLAGS.
   dnl
  @@ -76,4 +76,6 @@
   
   dnl Write results.
   dnl
  -AC_OUTPUT(xds.h regression-tests/.run-tests Makefile regression-tests/Makefile)
  +AC_CONFIG_FILES(xds.h regression-tests/.run-tests Makefile regression-tests/Makefile)
  +AC_CONFIG_COMMANDS([default], [chmod +x regression-tests/.run-tests])
  +AC_OUTPUT

From ossp-cvs-owner@ossp.org  Fri Jul 20 13:28:13 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6KBSCb27232; Fri, 20 Jul 2001 13:28:12 +0200 (CEST)
Date: Fri, 20 Jul 2001 13:28:12 +0200 (CEST)
Message-Id: <200107201128.f6KBSCb27232@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests .cvsignore
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   20-Jul-2001 13:28:12
  Branch: HEAD                             Handle: 2001072012281100

  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            .cvsignore

  Log:
    Ignore dependent file .run-tests.

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/srpc/libxds/regression-tests/.cvsignore
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/.cvsignore
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 .cvsignore
  --- ossp-pkg/srpc/libxds/regression-tests/.cvsignore	2001/07/20 10:08:26	1.2
  +++ ossp-pkg/srpc/libxds/regression-tests/.cvsignore	2001/07/20 11:28:11	1.3
  @@ -1,2 +1,2 @@
   *.log
  -Makefile
  +Makefile .run-tests

From ossp-cvs-owner@ossp.org  Fri Jul 20 13:32:53 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6KBWqb27806; Fri, 20 Jul 2001 13:32:52 +0200 (CEST)
Date: Fri, 20 Jul 2001 13:32:52 +0200 (CEST)
Message-Id: <200107201132.f6KBWqb27806@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds configure.ac
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   20-Jul-2001 13:32:52
  Branch: HEAD                             Handle: 2001072012325200

  Modified files:
    ossp-pkg/srpc/libxds    configure.ac

  Log:
    Use /bin/sh if no bash could be found.

  Summary:
    Revision    Changes     Path
    1.6         +2  -2      ossp-pkg/srpc/libxds/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/configure.ac
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 configure.ac
  --- ossp-pkg/srpc/libxds/configure.ac	2001/07/20 11:27:25	1.5
  +++ ossp-pkg/srpc/libxds/configure.ac	2001/07/20 11:32:52	1.6
  @@ -1,6 +1,6 @@
   dnl configure.in -- Process this file with autoconf to produce a configure script.
   
  -AC_INIT(libxds, [$Revision: 1.5 $])
  +AC_INIT(libxds, [$Revision: 1.6 $])
   
   dnl Get rid of the lousy -g and -O defaults in CFLAGS.
   dnl
  @@ -10,7 +10,7 @@
   dnl
   AC_PROG_CC
   AC_PROG_RANLIB
  -AC_PATH_PROG(bash, bash)
  +AC_PATH_PROG(bash, bash, /bin/sh)
   
   dnl Set special flags for gcc.
   dnl

From ossp-cvs-owner@ossp.org  Sun Jul 22 19:18:50 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6MHIma44875; Sun, 22 Jul 2001 19:18:48 +0200 (CEST)
Date: Sun, 22 Jul 2001 19:18:48 +0200 (CEST)
Message-Id: <200107221718.f6MHIma44875@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests .run-tests.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   22-Jul-2001 19:18:48
  Branch: HEAD                             Handle: 2001072218184800

  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            .run-tests.in

  Log:
    Increased performance and portability thanks to patches from RSE.

  Summary:
    Revision    Changes     Path
    1.2         +16 -14     ossp-pkg/srpc/libxds/regression-tests/.run-tests.in
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/.run-tests.in
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 .run-tests.in
  --- ossp-pkg/srpc/libxds/regression-tests/.run-tests.in	2001/07/20 11:22:18	1.1
  +++ ossp-pkg/srpc/libxds/regression-tests/.run-tests.in	2001/07/22 17:18:48	1.2
  @@ -1,8 +1,8 @@
  -#! @bash@
  +#!/bin/sh
   
   if [ $# -lt 1 ]; then
       echo "Usage: $0 test1.exe [...]"
  -    exit 1;
  +    exit 1
   fi
   
   RESCOLUMN=30
  @@ -11,22 +11,22 @@
   
   echo "Running test suite:"
   
  -for suite in $*; do
  -    tmp=`expr "${suite}" : '\(.*\)\.exe$'`
  -    echo -n "$tmp"
  -    currpos=`expr $RESCOLUMN - ${#tmp}`
  -    while [ $currpos -gt 1 ]; do
  -        echo -n "."
  -        currpos=`expr $currpos - 1`
  -    done
  -    echo -n " "
  +pad=''
  +n=$RESCOLUMN
  +while [ $n -gt 0 ]; do
  +    pad="$pad."
  +    n=`expr $n - 1`
  +done
  +for suite in "$@"; do
  +    name=`expr "${suite}" : '\(.*\)\.exe$'`
  +    echo "$name$pad" | awk '{ printf("%s ", substr($0, 0, n)); }' n=$RESCOLUMN
       numTests=`expr $numTests + 1`
       eval ./$suite >${tmp}.log 2>&1
       if [ $? -eq 0 ]; then
  -        echo OK
  +        echo "OK"
       else
           numFails=`expr $numFails + 1`
  -        echo FAILED
  +        echo "FAILED"
       fi
   done
   
  @@ -35,6 +35,8 @@
       echo "Summary: All tests succeeded."
       exit 0
   else
  -    echo "Summary: $numFails of $numTests tests failed ($(($numFails*100/$numTests))%)."
  +    percent=`expr $numFails \* 100`
  +    percent=`expr $percent / $numTests`
  +    echo "Summary: $numFails of $numTests tests failed ($percent%)."
       exit 1
   fi

From ossp-cvs-owner@ossp.org  Sun Jul 22 19:24:33 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6MHOW545627; Sun, 22 Jul 2001 19:24:32 +0200 (CEST)
Date: Sun, 22 Jul 2001 19:24:32 +0200 (CEST)
Message-Id: <200107221724.f6MHOW545627@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds configure.ac ossp-pkg/srpc/libxds/reg...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   22-Jul-2001 19:24:32
  Branch: HEAD                             Handle: 19700101010000995819071

  Added files:
    ossp-pkg/srpc/libxds/regression-tests
                            .run-tests
  Modified files:
    ossp-pkg/srpc/libxds    configure.ac
    ossp-pkg/srpc/libxds/regression-tests
                            .cvsignore
  Removed files:
    ossp-pkg/srpc/libxds/regression-tests
                            .run-tests.in

  Log:
    The new run-tests script works fine without bash, so we don't need to
    have the script under autoconf control anymore.

  Summary:
    Revision    Changes     Path
    1.7         +2  -4      ossp-pkg/srpc/libxds/configure.ac
    1.4         +1  -1      ossp-pkg/srpc/libxds/regression-tests/.cvsignore
    1.11        +42 -0      ossp-pkg/srpc/libxds/regression-tests/.run-tests
    NONE        +0  -42     ossp-pkg/srpc/libxds/regression-tests/.run-tests.in
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/configure.ac
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 configure.ac
  --- ossp-pkg/srpc/libxds/configure.ac	2001/07/20 11:32:52	1.6
  +++ ossp-pkg/srpc/libxds/configure.ac	2001/07/22 17:24:31	1.7
  @@ -1,6 +1,6 @@
   dnl configure.in -- Process this file with autoconf to produce a configure script.
   
  -AC_INIT(libxds, [$Revision: 1.6 $])
  +AC_INIT(libxds, [$Revision: 1.7 $])
   
   dnl Get rid of the lousy -g and -O defaults in CFLAGS.
   dnl
  @@ -10,7 +10,6 @@
   dnl
   AC_PROG_CC
   AC_PROG_RANLIB
  -AC_PATH_PROG(bash, bash, /bin/sh)
   
   dnl Set special flags for gcc.
   dnl
  @@ -76,6 +75,5 @@
   
   dnl Write results.
   dnl
  -AC_CONFIG_FILES(xds.h regression-tests/.run-tests Makefile regression-tests/Makefile)
  -AC_CONFIG_COMMANDS([default], [chmod +x regression-tests/.run-tests])
  +AC_CONFIG_FILES(xds.h Makefile regression-tests/Makefile)
   AC_OUTPUT
  Index: ossp-pkg/srpc/libxds/regression-tests/.cvsignore
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 .cvsignore
  --- ossp-pkg/srpc/libxds/regression-tests/.cvsignore	2001/07/20 11:28:11	1.3
  +++ ossp-pkg/srpc/libxds/regression-tests/.cvsignore	2001/07/22 17:24:31	1.4
  @@ -1,2 +1,2 @@
   *.log
  -Makefile .run-tests
  +Makefile
  Index: ossp-pkg/srpc/libxds/regression-tests/.run-tests
  ============================================================
  $ cvs update -p -r1.11 .run-tests
  #!/bin/sh
  
  if [ $# -lt 1 ]; then
      echo "Usage: $0 test1.exe [...]"
      exit 1
  fi
  
  RESCOLUMN=30
  numTests=0
  numFails=0
  
  echo "Running test suite:"
  
  pad=''
  n=$RESCOLUMN
  while [ $n -gt 0 ]; do
      pad="$pad."
      n=`expr $n - 1`
  done
  for suite in "$@"; do
      name=`expr "${suite}" : '\(.*\)\.exe$'`
      echo "$name$pad" | awk '{ printf("%s ", substr($0, 0, n)); }' n=$RESCOLUMN
      numTests=`expr $numTests + 1`
      eval ./$suite >${tmp}.log 2>&1
      if [ $? -eq 0 ]; then
          echo "OK"
      else
          numFails=`expr $numFails + 1`
          echo "FAILED"
      fi
  done
  
  echo
  if [ $numFails -eq 0 ]; then
      echo "Summary: All tests succeeded."
      exit 0
  else
      percent=`expr $numFails \* 100`
      percent=`expr $percent / $numTests`
      echo "Summary: $numFails of $numTests tests failed ($percent%)."
      exit 1
  fi
  

From ossp-cvs-owner@ossp.org  Mon Jul 23 15:03:31 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6ND3UK00403; Mon, 23 Jul 2001 15:03:30 +0200 (CEST)
Date: Mon, 23 Jul 2001 15:03:30 +0200 (CEST)
Message-Id: <200107231303.f6ND3UK00403@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests .run-tests
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   23-Jul-2001 15:03:30
  Branch: HEAD                             Handle: 2001072314032900

  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            .run-tests

  Log:
    Fixed minor bug: The name of the "suite.log" file wasn't created
    correctly, thus all output ended up in ".log".

  Summary:
    Revision    Changes     Path
    1.12        +1  -1      ossp-pkg/srpc/libxds/regression-tests/.run-tests
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/.run-tests
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 .run-tests
  --- ossp-pkg/srpc/libxds/regression-tests/.run-tests	2001/07/22 17:24:31	1.11
  +++ ossp-pkg/srpc/libxds/regression-tests/.run-tests	2001/07/23 13:03:29	1.12
  @@ -21,7 +21,7 @@
       name=`expr "${suite}" : '\(.*\)\.exe$'`
       echo "$name$pad" | awk '{ printf("%s ", substr($0, 0, n)); }' n=$RESCOLUMN
       numTests=`expr $numTests + 1`
  -    eval ./$suite >${tmp}.log 2>&1
  +    eval ./$suite >${name}.log 2>&1
       if [ $? -eq 0 ]; then
           echo "OK"
       else

From ossp-cvs-owner@ossp.org  Mon Jul 23 15:04:08 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6ND46d00492; Mon, 23 Jul 2001 15:04:06 +0200 (CEST)
Date: Mon, 23 Jul 2001 15:04:06 +0200 (CEST)
Message-Id: <200107231304.f6ND46d00492@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile.in xdr-decode-double.c xdr-e...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   23-Jul-2001 15:04:06
  Branch: HEAD                             Handle: 2001072314040600

  Added files:
    ossp-pkg/srpc/libxds    xdr-decode-double.c xdr-encode-double.c
  Modified files:
    ossp-pkg/srpc/libxds    Makefile.in

  Log:
    Added skeleton code for encoding and decoding of double types.

  Summary:
    Revision    Changes     Path
    1.5         +3  -1      ossp-pkg/srpc/libxds/Makefile.in
    1.1         +33 -0      ossp-pkg/srpc/libxds/xdr-decode-double.c
    1.1         +33 -0      ossp-pkg/srpc/libxds/xdr-encode-double.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile.in
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 Makefile.in
  --- ossp-pkg/srpc/libxds/Makefile.in	2001/07/20 10:09:06	1.4
  +++ ossp-pkg/srpc/libxds/Makefile.in	2001/07/23 13:04:06	1.5
  @@ -14,7 +14,9 @@
   		  xdr-encode-uint32.o xdr-encode-uint64.o xdr-decode-int32.o \
   		  xdr-decode-int64.o xdr-decode-uint32.o xdr-decode-uint64.o \
   		  xdr-encode-octetstream.o xdr-decode-octetstream.o \
  -		  xdr-encode-string.o xdr-decode-string.o
  +		  xdr-encode-string.o xdr-decode-string.o xdr-encode-double.o \
  +		  xdr-decode-double.o
  +
   .c.o:
   	$(CC) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CFLAGS) -c $<
   
  Index: ossp-pkg/srpc/libxds/xdr-decode-double.c
  ============================================================
  $ cvs update -p -r1.1 xdr-decode-double.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include "internal.h"
  
  int xdr_decode_double(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
      {
      return -1;
      }
  Index: ossp-pkg/srpc/libxds/xdr-encode-double.c
  ============================================================
  $ cvs update -p -r1.1 xdr-encode-double.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include "internal.h"
  
  int xdr_decode_double(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
      {
      return -1;
      }

From ossp-cvs-owner@ossp.org  Mon Jul 23 15:05:25 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6ND5Oi00612; Mon, 23 Jul 2001 15:05:24 +0200 (CEST)
Date: Mon, 23 Jul 2001 15:05:24 +0200 (CEST)
Message-Id: <200107231305.f6ND5Oi00612@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests Makefile.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   23-Jul-2001 15:05:24
  Branch: HEAD                             Handle: 2001072314052400

  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            Makefile.in

  Log:
    Don't erase .run-tests script at distclean anymore.

  Summary:
    Revision    Changes     Path
    1.6         +1  -1      ossp-pkg/srpc/libxds/regression-tests/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/Makefile.in
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 Makefile.in
  --- ossp-pkg/srpc/libxds/regression-tests/Makefile.in	2001/07/20 11:22:18	1.5
  +++ ossp-pkg/srpc/libxds/regression-tests/Makefile.in	2001/07/23 13:05:24	1.6
  @@ -34,7 +34,7 @@
   	rm -f $(TESTS) *.log
   
   distclean::	clean
  -	rm -f  Makefile .run-tests
  +	rm -f  Makefile
   
   realclean::	distclean
   

From ossp-cvs-owner@ossp.org  Mon Jul 23 17:28:55 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6NFSsC19330; Mon, 23 Jul 2001 17:28:54 +0200 (CEST)
Date: Mon, 23 Jul 2001 17:28:54 +0200 (CEST)
Message-Id: <200107231528.f6NFSsC19330@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile.in xml-encode-int32.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   23-Jul-2001 17:28:54
  Branch: HEAD                             Handle: 2001072316285300

  Added files:
    ossp-pkg/srpc/libxds    xml-encode-int32.c
  Modified files:
    ossp-pkg/srpc/libxds    Makefile.in

  Log:
    Added skeleton for the int32 XML encoding engine.

  Summary:
    Revision    Changes     Path
    1.6         +1  -1      ossp-pkg/srpc/libxds/Makefile.in
    1.1         +34 -0      ossp-pkg/srpc/libxds/xml-encode-int32.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile.in
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 Makefile.in
  --- ossp-pkg/srpc/libxds/Makefile.in	2001/07/23 13:04:06	1.5
  +++ ossp-pkg/srpc/libxds/Makefile.in	2001/07/23 15:28:53	1.6
  @@ -15,7 +15,7 @@
   		  xdr-decode-int64.o xdr-decode-uint32.o xdr-decode-uint64.o \
   		  xdr-encode-octetstream.o xdr-decode-octetstream.o \
   		  xdr-encode-string.o xdr-decode-string.o xdr-encode-double.o \
  -		  xdr-decode-double.o
  +		  xdr-decode-double.o xml-encode-int32.o
   
   .c.o:
   	$(CC) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CFLAGS) -c $<
  Index: ossp-pkg/srpc/libxds/xml-encode-int32.c
  ============================================================
  $ cvs update -p -r1.1 xml-encode-int32.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <assert.h>
  #include "internal.h"
  
  int xml_encode_int32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
      {
      return -1;
      }

From ossp-cvs-owner@ossp.org  Mon Jul 23 17:33:25 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6NFXOs20152; Mon, 23 Jul 2001 17:33:24 +0200 (CEST)
Date: Mon, 23 Jul 2001 17:33:24 +0200 (CEST)
Message-Id: <200107231533.f6NFXOs20152@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xds.h.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   23-Jul-2001 17:33:24
  Branch: HEAD                             Handle: 2001072316332300

  Modified files:
    ossp-pkg/srpc/libxds    xds.h.in

  Log:
    Added prototypes for xdr_encode_double(), xdr_decode_double(),
    xml_encode_int32(), and xml_decode_int32().

  Summary:
    Revision    Changes     Path
    1.3         +7  -0      ossp-pkg/srpc/libxds/xds.h.in
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xds.h.in
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xds.h.in
  --- ossp-pkg/srpc/libxds/xds.h.in	2001/07/20 10:56:01	1.2
  +++ ossp-pkg/srpc/libxds/xds.h.in	2001/07/23 15:33:23	1.3
  @@ -96,4 +96,11 @@
   int xdr_encode_string(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
   int xdr_decode_string(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
   
  +int xdr_encode_double(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  +int xdr_decode_double(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  +
  +
  +int xml_encode_int32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  +int xml_decode_int32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  +
   #endif /* !defined(__LIBXDS_H__) */

From ossp-cvs-owner@ossp.org  Mon Jul 23 17:33:45 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6NFXha20292; Mon, 23 Jul 2001 17:33:43 +0200 (CEST)
Date: Mon, 23 Jul 2001 17:33:43 +0200 (CEST)
Message-Id: <200107231533.f6NFXha20292@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile.in ossp-pkg/srpc/libxds/regr...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   23-Jul-2001 17:33:43
  Branch: HEAD                             Handle: 2001072316334201

  Modified files:
    ossp-pkg/srpc/libxds    Makefile.in xdr-decode-int32.c xdr-decode-int64.c
                            xdr-decode-octetstream.c xdr-decode-string.c
                            xdr-decode-uint32.c xdr-decode-uint64.c
                            xdr-encode-int32.c xdr-encode-int64.c
                            xdr-encode-octetstream.c xdr-encode-string.c
                            xdr-encode-uint32.c xdr-encode-uint64.c
    ossp-pkg/srpc/libxds/regression-tests
                            xds-mystruct.c

  Log:
    Removed redundant include of sys/types.h.

  Summary:
    Revision    Changes     Path
    1.7         +1  -1      ossp-pkg/srpc/libxds/Makefile.in
    1.4         +0  -1      ossp-pkg/srpc/libxds/regression-tests/xds-mystruct.c
    1.3         +0  -1      ossp-pkg/srpc/libxds/xdr-decode-int32.c
    1.3         +0  -1      ossp-pkg/srpc/libxds/xdr-decode-int64.c
    1.3         +0  -1      ossp-pkg/srpc/libxds/xdr-decode-octetstream.c
    1.4         +0  -1      ossp-pkg/srpc/libxds/xdr-decode-string.c
    1.3         +0  -1      ossp-pkg/srpc/libxds/xdr-decode-uint32.c
    1.3         +0  -1      ossp-pkg/srpc/libxds/xdr-decode-uint64.c
    1.3         +0  -1      ossp-pkg/srpc/libxds/xdr-encode-int32.c
    1.3         +0  -1      ossp-pkg/srpc/libxds/xdr-encode-int64.c
    1.4         +0  -1      ossp-pkg/srpc/libxds/xdr-encode-octetstream.c
    1.5         +0  -1      ossp-pkg/srpc/libxds/xdr-encode-string.c
    1.3         +0  -1      ossp-pkg/srpc/libxds/xdr-encode-uint32.c
    1.3         +0  -1      ossp-pkg/srpc/libxds/xdr-encode-uint64.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile.in
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 Makefile.in
  --- ossp-pkg/srpc/libxds/Makefile.in	2001/07/23 15:28:53	1.6
  +++ ossp-pkg/srpc/libxds/Makefile.in	2001/07/23 15:33:42	1.7
  @@ -15,7 +15,7 @@
   		  xdr-decode-int64.o xdr-decode-uint32.o xdr-decode-uint64.o \
   		  xdr-encode-octetstream.o xdr-decode-octetstream.o \
   		  xdr-encode-string.o xdr-decode-string.o xdr-encode-double.o \
  -		  xdr-decode-double.o xml-encode-int32.o
  +		  xdr-decode-double.o xml-encode-int32.o xml-decode-int32.o
   
   .c.o:
   	$(CC) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CFLAGS) -c $<
  Index: ossp-pkg/srpc/libxds/regression-tests/xds-mystruct.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xds-mystruct.c
  --- ossp-pkg/srpc/libxds/regression-tests/xds-mystruct.c	2001/07/20 10:56:02	1.3
  +++ ossp-pkg/srpc/libxds/regression-tests/xds-mystruct.c	2001/07/23 15:33:43	1.4
  @@ -28,7 +28,6 @@
   #include <stdio.h>
   #include <string.h>
   #include <assert.h>
  -#include <sys/types.h>
   #include "../internal.h"
   
   struct mystruct
  Index: ossp-pkg/srpc/libxds/xdr-decode-int32.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xdr-decode-int32.c
  --- ossp-pkg/srpc/libxds/xdr-decode-int32.c	2001/07/20 10:56:01	1.2
  +++ ossp-pkg/srpc/libxds/xdr-decode-int32.c	2001/07/23 15:33:42	1.3
  @@ -26,7 +26,6 @@
   */
   
   #include <assert.h>
  -#include <sys/types.h>
   #include "internal.h"
   
   int xdr_decode_int32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  Index: ossp-pkg/srpc/libxds/xdr-decode-int64.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xdr-decode-int64.c
  --- ossp-pkg/srpc/libxds/xdr-decode-int64.c	2001/07/20 10:56:01	1.2
  +++ ossp-pkg/srpc/libxds/xdr-decode-int64.c	2001/07/23 15:33:42	1.3
  @@ -26,7 +26,6 @@
   */
   
   #include <assert.h>
  -#include <sys/types.h>
   #include "internal.h"
   
   int xdr_decode_int64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  Index: ossp-pkg/srpc/libxds/xdr-decode-octetstream.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xdr-decode-octetstream.c
  --- ossp-pkg/srpc/libxds/xdr-decode-octetstream.c	2001/07/20 10:56:01	1.2
  +++ ossp-pkg/srpc/libxds/xdr-decode-octetstream.c	2001/07/23 15:33:42	1.3
  @@ -27,7 +27,6 @@
   
   #include <string.h>
   #include <assert.h>
  -#include <sys/types.h>
   #include "internal.h"
   
   int xdr_decode_octetstream(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  Index: ossp-pkg/srpc/libxds/xdr-decode-string.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xdr-decode-string.c
  --- ossp-pkg/srpc/libxds/xdr-decode-string.c	2001/07/20 11:15:39	1.3
  +++ ossp-pkg/srpc/libxds/xdr-decode-string.c	2001/07/23 15:33:42	1.4
  @@ -27,7 +27,6 @@
   
   #include <string.h>
   #include <assert.h>
  -#include <sys/types.h>
   #include "internal.h"
   
   int xdr_decode_string(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  Index: ossp-pkg/srpc/libxds/xdr-decode-uint32.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xdr-decode-uint32.c
  --- ossp-pkg/srpc/libxds/xdr-decode-uint32.c	2001/07/20 10:56:01	1.2
  +++ ossp-pkg/srpc/libxds/xdr-decode-uint32.c	2001/07/23 15:33:42	1.3
  @@ -26,7 +26,6 @@
   */
   
   #include <assert.h>
  -#include <sys/types.h>
   #include "internal.h"
   
   int xdr_decode_uint32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  Index: ossp-pkg/srpc/libxds/xdr-decode-uint64.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xdr-decode-uint64.c
  --- ossp-pkg/srpc/libxds/xdr-decode-uint64.c	2001/07/20 10:56:01	1.2
  +++ ossp-pkg/srpc/libxds/xdr-decode-uint64.c	2001/07/23 15:33:42	1.3
  @@ -26,7 +26,6 @@
   */
   
   #include <assert.h>
  -#include <sys/types.h>
   #include "internal.h"
   
   int xdr_decode_uint64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  Index: ossp-pkg/srpc/libxds/xdr-encode-int32.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xdr-encode-int32.c
  --- ossp-pkg/srpc/libxds/xdr-encode-int32.c	2001/07/20 10:56:01	1.2
  +++ ossp-pkg/srpc/libxds/xdr-encode-int32.c	2001/07/23 15:33:42	1.3
  @@ -26,7 +26,6 @@
   */
   
   #include <assert.h>
  -#include <sys/types.h>
   #include "internal.h"
   
   int xdr_encode_int32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  Index: ossp-pkg/srpc/libxds/xdr-encode-int64.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xdr-encode-int64.c
  --- ossp-pkg/srpc/libxds/xdr-encode-int64.c	2001/07/20 10:56:01	1.2
  +++ ossp-pkg/srpc/libxds/xdr-encode-int64.c	2001/07/23 15:33:42	1.3
  @@ -26,7 +26,6 @@
   */
   
   #include <assert.h>
  -#include <sys/types.h>
   #include "internal.h"
   
   int xdr_encode_int64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  Index: ossp-pkg/srpc/libxds/xdr-encode-octetstream.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xdr-encode-octetstream.c
  --- ossp-pkg/srpc/libxds/xdr-encode-octetstream.c	2001/07/20 10:56:01	1.3
  +++ ossp-pkg/srpc/libxds/xdr-encode-octetstream.c	2001/07/23 15:33:42	1.4
  @@ -27,7 +27,6 @@
   
   #include <assert.h>
   #include <string.h>
  -#include <sys/types.h>
   #include "internal.h"
   
   int xdr_encode_octetstream(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  Index: ossp-pkg/srpc/libxds/xdr-encode-string.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xdr-encode-string.c
  --- ossp-pkg/srpc/libxds/xdr-encode-string.c	2001/07/20 11:15:39	1.4
  +++ ossp-pkg/srpc/libxds/xdr-encode-string.c	2001/07/23 15:33:42	1.5
  @@ -27,7 +27,6 @@
   
   #include <assert.h>
   #include <string.h>
  -#include <sys/types.h>
   #include "internal.h"
   
   int xdr_encode_string(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  Index: ossp-pkg/srpc/libxds/xdr-encode-uint32.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xdr-encode-uint32.c
  --- ossp-pkg/srpc/libxds/xdr-encode-uint32.c	2001/07/20 10:56:01	1.2
  +++ ossp-pkg/srpc/libxds/xdr-encode-uint32.c	2001/07/23 15:33:42	1.3
  @@ -26,7 +26,6 @@
   */
   
   #include <assert.h>
  -#include <sys/types.h>
   #include "internal.h"
   
   int xdr_encode_uint32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  Index: ossp-pkg/srpc/libxds/xdr-encode-uint64.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xdr-encode-uint64.c
  --- ossp-pkg/srpc/libxds/xdr-encode-uint64.c	2001/07/20 10:56:01	1.2
  +++ ossp-pkg/srpc/libxds/xdr-encode-uint64.c	2001/07/23 15:33:42	1.3
  @@ -26,7 +26,6 @@
   */
   
   #include <assert.h>
  -#include <sys/types.h>
   #include "internal.h"
   
   int xdr_encode_uint64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)

From ossp-cvs-owner@ossp.org  Mon Jul 23 17:57:50 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6NFvmj22892; Mon, 23 Jul 2001 17:57:48 +0200 (CEST)
Date: Mon, 23 Jul 2001 17:57:48 +0200 (CEST)
Message-Id: <200107231557.f6NFvmj22892@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests Makefile.in xml-int3...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   23-Jul-2001 17:57:48
  Branch: HEAD                             Handle: 2001072316574701

  Added files:
    ossp-pkg/srpc/libxds    xml-decode-int32.c
    ossp-pkg/srpc/libxds/regression-tests
                            xml-int32.c
  Modified files:
    ossp-pkg/srpc/libxds    xml-encode-int32.c
    ossp-pkg/srpc/libxds/regression-tests
                            Makefile.in

  Log:
    Implemented encoding and decoding of int32 values in XML.

  Summary:
    Revision    Changes     Path
    1.7         +1  -1      ossp-pkg/srpc/libxds/regression-tests/Makefile.in
    1.1         +116 -0     ossp-pkg/srpc/libxds/regression-tests/xml-int32.c
    1.1         +55 -0      ossp-pkg/srpc/libxds/xml-decode-int32.c
    1.2         +22 -1      ossp-pkg/srpc/libxds/xml-encode-int32.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/Makefile.in
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 Makefile.in
  --- ossp-pkg/srpc/libxds/regression-tests/Makefile.in	2001/07/23 13:05:24	1.6
  +++ ossp-pkg/srpc/libxds/regression-tests/Makefile.in	2001/07/23 15:57:48	1.7
  @@ -12,7 +12,7 @@
   		  xds-getbuffer.exe xds-decode.exe xds-setbuffer.exe xds-engine-restart.exe \
   		  xdr-uint32.exe xdr-int32.exe xdr-uint64.exe xdr-int64.exe  \
   		  xdr-octetstream.exe xdr-octetstream-empty.exe xdr-string.exe \
  -		  xdr-string-empty.exe xds-mystruct.exe
  +		  xdr-string-empty.exe xds-mystruct.exe xml-int32.exe
   
   .SUFFIXES:
   .SUFFIXES:	.c .exe
  Index: ossp-pkg/srpc/libxds/regression-tests/xml-int32.c
  ============================================================
  $ cvs update -p -r1.1 xml-int32.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <stdio.h>
  #include <string.h>
  #include <rpc/types.h>
  #include <rpc/xdr.h>
  #include "../internal.h"
  
  int main()
      {
      xds_t* xds;
      char*  buffer;
      size_t buffer_size;
  
      xds_int32_t values[] =
  	{
  	 0x00000000,
  	 0x12345678,
  	-0x12345678,
  	 0xabcdef01,
  	-0xabcdef01,
  	 0x7fffffff
  	};
  
      size_t i;
  
      /* Encode the values array, then decode it back and compare the
         numbers. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL)
  	{
  	printf("Failed to initialize XDS context.\n");
  	return 1;
  	}
      if (xds_register(xds, "int", &xml_encode_int32, NULL) != XDS_OK)
  	{
  	printf("Failed to register my encoding engines.\n");
  	return 1;
  	}
      for (i = 0; i < sizeof(values)/sizeof(xds_int32_t); ++i)
  	{
  	if (xds_encode(xds, "int", values[i]) != XDS_OK)
  	    {
  	    printf("xds_encode(values[%d]) failed!\n", i);
  	    return 1;
  	    }
  	}
      if (xds_getbuffer(xds, XDS_GIFT, (void**)&buffer, &buffer_size) != XDS_OK)
  	{
  	printf("getbuffer() failed.\n");
  	return 1;
  	}
      xds_destroy(xds);
  
      xds = xds_init(XDS_DECODE);
      if (xds == NULL)
  	{
  	printf("Failed to initialize XDS context.\n");
  	return 1;
  	}
      if (xds_register(xds, "int", &xml_decode_int32, NULL) != XDS_OK)
  	{
  	printf("Failed to register my decoding engines.\n");
  	return 1;
  	}
      if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK)
  	{
  	printf("setbuffer() failed.\n");
  	return 1;
  	}
      for (i = 0; i < sizeof(values)/sizeof(xds_int32_t); ++i)
  	{
  	xds_int32_t val;
  	if (xds_decode(xds, "int", &val) != XDS_OK)
  	    {
  	    printf("xds_decode(values[%d]) failed!\n", i);
  	    return 1;
  	    }
  	if (val != values[i])
  	    {
  	    printf("Decoded value (%d) does not match the original value (%d)!\n", val, values[i]);
  	    return 1;
  	    }
  	}
      xds_destroy(xds);
  
      /* Everything went fine. */
  
      return 0;
      }
  Index: ossp-pkg/srpc/libxds/xml-decode-int32.c
  ============================================================
  $ cvs update -p -r1.1 xml-decode-int32.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <stdio.h>
  #include <assert.h>
  #include "internal.h"
  
  int xml_decode_int32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
      {
      int rc;
      xds_int32_t* value;
      int len;
  
      /* Consistency checks. */
  
      assert(xds != NULL);
      assert(buffer != NULL);
      assert(buffer_size != 0);
      assert(args != NULL);
      if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  	return XDS_ERR_INVALID_ARG;
  
      /* Format value into buffer. */
  
      value = va_arg(*args, xds_int32_t*);
      rc = sscanf(buffer, "<int32>%d</int32>%n", value, &len);
      if (rc <= 0)
  	return XDS_ERR_UNDERFLOW;
  
      return len;
      }
  Index: ossp-pkg/srpc/libxds/xml-encode-int32.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xml-encode-int32.c
  --- ossp-pkg/srpc/libxds/xml-encode-int32.c	2001/07/23 15:28:53	1.1
  +++ ossp-pkg/srpc/libxds/xml-encode-int32.c	2001/07/23 15:57:47	1.2
  @@ -25,10 +25,31 @@
      SUCH DAMAGE.
   */
   
  +#include <stdio.h>
   #include <assert.h>
   #include "internal.h"
   
   int xml_encode_int32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
       {
  -    return -1;
  +    int rc;
  +    xds_int32_t value;
  +
  +    /* Consistency checks. */
  +
  +    assert(xds != NULL);
  +    assert(buffer != NULL);
  +    assert(buffer_size != 0);
  +    assert(args != NULL);
  +    if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  +	return XDS_ERR_INVALID_ARG;
  +
  +    /* Format value into buffer. */
  +
  +    value = va_arg(*args, xds_int32_t);
  +    rc = snprintf(buffer, buffer_size, "<int32>%d</int32>", value);
  +    if (rc < 0)
  +	return buffer_size*2;
  +    assert(rc >= 15);
  +
  +    return rc;
       }

From ossp-cvs-owner@ossp.org  Mon Jul 23 18:17:46 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6NGHjR25754; Mon, 23 Jul 2001 18:17:45 +0200 (CEST)
Date: Mon, 23 Jul 2001 18:17:45 +0200 (CEST)
Message-Id: <200107231617.f6NGHjR25754@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile.in ossp-pkg/srpc/libxds/regr...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   23-Jul-2001 18:17:45
  Branch: HEAD                             Handle: 2001072317174301

  Added files:
    ossp-pkg/srpc/libxds    xml-decode-int64.c xml-decode-uint32.c
                            xml-decode-uint64.c xml-encode-int64.c
                            xml-encode-uint32.c xml-encode-uint64.c
    ossp-pkg/srpc/libxds/regression-tests
                            xml-int64.c xml-uint32.c xml-uint64.c
  Modified files:
    ossp-pkg/srpc/libxds    Makefile.in xds.h.in
    ossp-pkg/srpc/libxds/regression-tests
                            Makefile.in

  Log:
    Added XML implementations for uint32, int64, and uint64.

  Summary:
    Revision    Changes     Path
    1.8         +3  -1      ossp-pkg/srpc/libxds/Makefile.in
    1.8         +2  -1      ossp-pkg/srpc/libxds/regression-tests/Makefile.in
    1.1         +116 -0     ossp-pkg/srpc/libxds/regression-tests/xml-int64.c
    1.1         +115 -0     ossp-pkg/srpc/libxds/regression-tests/xml-uint32.c
    1.1         +115 -0     ossp-pkg/srpc/libxds/regression-tests/xml-uint64.c
    1.4         +9  -0      ossp-pkg/srpc/libxds/xds.h.in
    1.1         +55 -0      ossp-pkg/srpc/libxds/xml-decode-int64.c
    1.1         +55 -0      ossp-pkg/srpc/libxds/xml-decode-uint32.c
    1.1         +55 -0      ossp-pkg/srpc/libxds/xml-decode-uint64.c
    1.1         +55 -0      ossp-pkg/srpc/libxds/xml-encode-int64.c
    1.1         +55 -0      ossp-pkg/srpc/libxds/xml-encode-uint32.c
    1.1         +55 -0      ossp-pkg/srpc/libxds/xml-encode-uint64.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile.in
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 Makefile.in
  --- ossp-pkg/srpc/libxds/Makefile.in	2001/07/23 15:33:42	1.7
  +++ ossp-pkg/srpc/libxds/Makefile.in	2001/07/23 16:17:43	1.8
  @@ -15,7 +15,9 @@
   		  xdr-decode-int64.o xdr-decode-uint32.o xdr-decode-uint64.o \
   		  xdr-encode-octetstream.o xdr-decode-octetstream.o \
   		  xdr-encode-string.o xdr-decode-string.o xdr-encode-double.o \
  -		  xdr-decode-double.o xml-encode-int32.o xml-decode-int32.o
  +		  xdr-decode-double.o xml-encode-int32.o xml-decode-int32.o \
  +		  xml-decode-int64.o xml-decode-uint32.o xml-decode-uint64.o \
  +		  xml-encode-int64.o xml-encode-uint32.o xml-encode-uint64.o
   
   .c.o:
   	$(CC) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CFLAGS) -c $<
  Index: ossp-pkg/srpc/libxds/regression-tests/Makefile.in
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 Makefile.in
  --- ossp-pkg/srpc/libxds/regression-tests/Makefile.in	2001/07/23 15:57:48	1.7
  +++ ossp-pkg/srpc/libxds/regression-tests/Makefile.in	2001/07/23 16:17:44	1.8
  @@ -12,7 +12,8 @@
   		  xds-getbuffer.exe xds-decode.exe xds-setbuffer.exe xds-engine-restart.exe \
   		  xdr-uint32.exe xdr-int32.exe xdr-uint64.exe xdr-int64.exe  \
   		  xdr-octetstream.exe xdr-octetstream-empty.exe xdr-string.exe \
  -		  xdr-string-empty.exe xds-mystruct.exe xml-int32.exe
  +		  xdr-string-empty.exe xds-mystruct.exe xml-uint32.exe xml-int32.exe \
  +		  xml-uint64.exe xml-int64.exe
   
   .SUFFIXES:
   .SUFFIXES:	.c .exe
  Index: ossp-pkg/srpc/libxds/regression-tests/xml-int64.c
  ============================================================
  $ cvs update -p -r1.1 xml-int64.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <stdio.h>
  #include <string.h>
  #include <rpc/types.h>
  #include <rpc/xdr.h>
  #include "../internal.h"
  
  int main()
      {
      xds_t* xds;
      char*  buffer;
      size_t buffer_size;
  
      xds_int64_t values[] =
  	{
  	 0x0000000000000000LL,
  	 0x123456789abcdef0LL,
  	-0x123456789abcdef0LL,
  	 0xabcdef01cc45bb9aLL,
  	-0xabcdef01cc45bb9aLL,
  	 0x7fffffffffffffffLL
  	};
  
      size_t i;
  
      /* Encode the values array, then decode it back and compare the
         numbers. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL)
  	{
  	printf("Failed to initialize XDS context.\n");
  	return 1;
  	}
      if (xds_register(xds, "int", &xml_encode_int64, NULL) != XDS_OK)
  	{
  	printf("Failed to register my encoding engines.\n");
  	return 1;
  	}
      for (i = 0; i < sizeof(values)/sizeof(xds_int64_t); ++i)
  	{
  	if (xds_encode(xds, "int", values[i]) != XDS_OK)
  	    {
  	    printf("xds_encode(values[%d]) failed!\n", i);
  	    return 1;
  	    }
  	}
      if (xds_getbuffer(xds, XDS_GIFT, (void**)&buffer, &buffer_size) != XDS_OK)
  	{
  	printf("getbuffer() failed.\n");
  	return 1;
  	}
      xds_destroy(xds);
  
      xds = xds_init(XDS_DECODE);
      if (xds == NULL)
  	{
  	printf("Failed to initialize XDS context.\n");
  	return 1;
  	}
      if (xds_register(xds, "int", &xml_decode_int64, NULL) != XDS_OK)
  	{
  	printf("Failed to register my decoding engines.\n");
  	return 1;
  	}
      if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK)
  	{
  	printf("setbuffer() failed.\n");
  	return 1;
  	}
      for (i = 0; i < sizeof(values)/sizeof(xds_int64_t); ++i)
  	{
  	xds_int64_t val;
  	if (xds_decode(xds, "int", &val) != XDS_OK)
  	    {
  	    printf("xds_decode(values[%d]) failed!\n", i);
  	    return 1;
  	    }
  	if (val != values[i])
  	    {
  	    printf("Decoded value (%Ld) does not match the original value (%Ld)!\n", val, values[i]);
  	    return 1;
  	    }
  	}
      xds_destroy(xds);
  
      /* Everything went fine. */
  
      return 0;
      }
  Index: ossp-pkg/srpc/libxds/regression-tests/xml-uint32.c
  ============================================================
  $ cvs update -p -r1.1 xml-uint32.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <stdio.h>
  #include <string.h>
  #include <rpc/types.h>
  #include <rpc/xdr.h>
  #include "../internal.h"
  
  int main()
      {
      xds_t* xds;
      char*  buffer;
      size_t buffer_size;
  
      xds_uint32_t values[] =
  	{
  	0x00000000,
  	0x12345678,
  	0xabcdef01,
  	0xc500b3ef,
  	0xffffffff
  	};
  
      size_t i;
  
      /* Encode the values array, then decode it back and compare the
         numbers. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL)
  	{
  	printf("Failed to initialize XDS context.\n");
  	return 1;
  	}
      if (xds_register(xds, "int", &xml_encode_uint32, NULL) != XDS_OK)
  	{
  	printf("Failed to register my encoding engines.\n");
  	return 1;
  	}
      for (i = 0; i < sizeof(values)/sizeof(xds_uint32_t); ++i)
  	{
  	if (xds_encode(xds, "int", values[i]) != XDS_OK)
  	    {
  	    printf("xds_encode(values[%d]) failed!\n", i);
  	    return 1;
  	    }
  	}
      if (xds_getbuffer(xds, XDS_GIFT, (void**)&buffer, &buffer_size) != XDS_OK)
  	{
  	printf("getbuffer() failed.\n");
  	return 1;
  	}
      xds_destroy(xds);
  
      xds = xds_init(XDS_DECODE);
      if (xds == NULL)
  	{
  	printf("Failed to initialize XDS context.\n");
  	return 1;
  	}
      if (xds_register(xds, "int", &xml_decode_uint32, NULL) != XDS_OK)
  	{
  	printf("Failed to register my decoding engines.\n");
  	return 1;
  	}
      if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK)
  	{
  	printf("setbuffer() failed.\n");
  	return 1;
  	}
      for (i = 0; i < sizeof(values)/sizeof(xds_uint32_t); ++i)
  	{
  	xds_uint32_t val;
  	if (xds_decode(xds, "int", &val) != XDS_OK)
  	    {
  	    printf("xds_decode(values[%d]) failed!\n", i);
  	    return 1;
  	    }
  	if (val != values[i])
  	    {
  	    printf("Decoded value (%d) does not match the original value (%d)!\n", val, values[i]);
  	    return 1;
  	    }
  	}
      xds_destroy(xds);
  
      /* Everything went fine. */
  
      return 0;
      }
  Index: ossp-pkg/srpc/libxds/regression-tests/xml-uint64.c
  ============================================================
  $ cvs update -p -r1.1 xml-uint64.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <stdio.h>
  #include <string.h>
  #include <rpc/types.h>
  #include <rpc/xdr.h>
  #include "../internal.h"
  
  int main()
      {
      xds_t* xds;
      char*  buffer;
      size_t buffer_size;
  
      xds_uint64_t values[] =
  	{
  	0x0000000000000000ULL,
  	0x123456789abcdef0ULL,
  	0xabcdef01cc45bb9aULL,
  	0xc500b3efdd34ca9eULL,
  	0xffffffffffffffffULL
  	};
  
      size_t i;
  
      /* Encode the values array, then decode it back and compare the
         numbers. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL)
  	{
  	printf("Failed to initialize XDS context.\n");
  	return 1;
  	}
      if (xds_register(xds, "int", &xml_encode_uint64, NULL) != XDS_OK)
  	{
  	printf("Failed to register my encoding engines.\n");
  	return 1;
  	}
      for (i = 0; i < sizeof(values)/sizeof(xds_uint64_t); ++i)
  	{
  	if (xds_encode(xds, "int", values[i]) != XDS_OK)
  	    {
  	    printf("xds_encode(values[%d]) failed!\n", i);
  	    return 1;
  	    }
  	}
      if (xds_getbuffer(xds, XDS_GIFT, (void**)&buffer, &buffer_size) != XDS_OK)
  	{
  	printf("getbuffer() failed.\n");
  	return 1;
  	}
      xds_destroy(xds);
  
      xds = xds_init(XDS_DECODE);
      if (xds == NULL)
  	{
  	printf("Failed to initialize XDS context.\n");
  	return 1;
  	}
      if (xds_register(xds, "int", &xml_decode_uint64, NULL) != XDS_OK)
  	{
  	printf("Failed to register my decoding engines.\n");
  	return 1;
  	}
      if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK)
  	{
  	printf("setbuffer() failed.\n");
  	return 1;
  	}
      for (i = 0; i < sizeof(values)/sizeof(xds_uint64_t); ++i)
  	{
  	xds_uint64_t val;
  	if (xds_decode(xds, "int", &val) != XDS_OK)
  	    {
  	    printf("xds_decode(values[%d]) failed!\n", i);
  	    return 1;
  	    }
  	if (val != values[i])
  	    {
  	    printf("Decoded value (%Lu) does not match the original value (%Lu)!\n", val, values[i]);
  	    return 1;
  	    }
  	}
      xds_destroy(xds);
  
      /* Everything went fine. */
  
      return 0;
      }
  Index: ossp-pkg/srpc/libxds/xds.h.in
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xds.h.in
  --- ossp-pkg/srpc/libxds/xds.h.in	2001/07/23 15:33:23	1.3
  +++ ossp-pkg/srpc/libxds/xds.h.in	2001/07/23 16:17:43	1.4
  @@ -103,4 +103,13 @@
   int xml_encode_int32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
   int xml_decode_int32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
   
  +int xml_encode_uint32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  +int xml_decode_uint32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  +
  +int xml_encode_int64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  +int xml_decode_int64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  +
  +int xml_encode_uint64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  +int xml_decode_uint64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  +
   #endif /* !defined(__LIBXDS_H__) */
  Index: ossp-pkg/srpc/libxds/xml-decode-int64.c
  ============================================================
  $ cvs update -p -r1.1 xml-decode-int64.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <stdio.h>
  #include <assert.h>
  #include "internal.h"
  
  int xml_decode_int64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
      {
      int rc;
      xds_int64_t* value;
      int len;
  
      /* Consistency checks. */
  
      assert(xds != NULL);
      assert(buffer != NULL);
      assert(buffer_size != 0);
      assert(args != NULL);
      if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  	return XDS_ERR_INVALID_ARG;
  
      /* Format value into buffer. */
  
      value = va_arg(*args, xds_int64_t*);
      rc = sscanf(buffer, "<int64>%Ld</int64>%n", value, &len);
      if (rc <= 0)
  	return XDS_ERR_UNDERFLOW;
  
      return len;
      }
  Index: ossp-pkg/srpc/libxds/xml-decode-uint32.c
  ============================================================
  $ cvs update -p -r1.1 xml-decode-uint32.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <stdio.h>
  #include <assert.h>
  #include "internal.h"
  
  int xml_decode_uint32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
      {
      int rc;
      xds_uint32_t* value;
      int len;
  
      /* Consistency checks. */
  
      assert(xds != NULL);
      assert(buffer != NULL);
      assert(buffer_size != 0);
      assert(args != NULL);
      if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  	return XDS_ERR_INVALID_ARG;
  
      /* Format value into buffer. */
  
      value = va_arg(*args, xds_uint32_t*);
      rc = sscanf(buffer, "<uint32>%u</uint32>%n", value, &len);
      if (rc <= 0)
  	return XDS_ERR_UNDERFLOW;
  
      return len;
      }
  Index: ossp-pkg/srpc/libxds/xml-decode-uint64.c
  ============================================================
  $ cvs update -p -r1.1 xml-decode-uint64.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <stdio.h>
  #include <assert.h>
  #include "internal.h"
  
  int xml_decode_uint64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
      {
      int rc;
      xds_uint64_t* value;
      int len;
  
      /* Consistency checks. */
  
      assert(xds != NULL);
      assert(buffer != NULL);
      assert(buffer_size != 0);
      assert(args != NULL);
      if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  	return XDS_ERR_INVALID_ARG;
  
      /* Format value into buffer. */
  
      value = va_arg(*args, xds_uint64_t*);
      rc = sscanf(buffer, "<uint64>%Lu</uint64>%n", value, &len);
      if (rc <= 0)
  	return XDS_ERR_UNDERFLOW;
  
      return len;
      }
  Index: ossp-pkg/srpc/libxds/xml-encode-int64.c
  ============================================================
  $ cvs update -p -r1.1 xml-encode-int64.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <stdio.h>
  #include <assert.h>
  #include "internal.h"
  
  int xml_encode_int64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
      {
      int rc;
      xds_int64_t value;
  
      /* Consistency checks. */
  
      assert(xds != NULL);
      assert(buffer != NULL);
      assert(buffer_size != 0);
      assert(args != NULL);
      if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  	return XDS_ERR_INVALID_ARG;
  
      /* Format value into buffer. */
  
      value = va_arg(*args, xds_int64_t);
      rc = snprintf(buffer, buffer_size, "<int64>%Ld</int64>", value);
      if (rc < 0)
  	return buffer_size*2;
      assert(rc >= 15);
  
      return rc;
      }
  Index: ossp-pkg/srpc/libxds/xml-encode-uint32.c
  ============================================================
  $ cvs update -p -r1.1 xml-encode-uint32.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <stdio.h>
  #include <assert.h>
  #include "internal.h"
  
  int xml_encode_uint32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
      {
      int rc;
      xds_uint32_t value;
  
      /* Consistency checks. */
  
      assert(xds != NULL);
      assert(buffer != NULL);
      assert(buffer_size != 0);
      assert(args != NULL);
      if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  	return XDS_ERR_INVALID_ARG;
  
      /* Format value into buffer. */
  
      value = va_arg(*args, xds_uint32_t);
      rc = snprintf(buffer, buffer_size, "<uint32>%u</uint32>", value);
      if (rc < 0)
  	return buffer_size*2;
      assert(rc >= 15);
  
      return rc;
      }
  Index: ossp-pkg/srpc/libxds/xml-encode-uint64.c
  ============================================================
  $ cvs update -p -r1.1 xml-encode-uint64.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <stdio.h>
  #include <assert.h>
  #include "internal.h"
  
  int xml_encode_uint64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
      {
      int rc;
      xds_uint64_t value;
  
      /* Consistency checks. */
  
      assert(xds != NULL);
      assert(buffer != NULL);
      assert(buffer_size != 0);
      assert(args != NULL);
      if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  	return XDS_ERR_INVALID_ARG;
  
      /* Format value into buffer. */
  
      value = va_arg(*args, xds_uint64_t);
      rc = snprintf(buffer, buffer_size, "<uint64>%Lu</uint64>", value);
      if (rc < 0)
  	return buffer_size*2;
      assert(rc >= 15);
  
      return rc;
      }

From ossp-cvs-owner@ossp.org  Mon Jul 23 18:33:06 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6NGX5G28306; Mon, 23 Jul 2001 18:33:05 +0200 (CEST)
Date: Mon, 23 Jul 2001 18:33:05 +0200 (CEST)
Message-Id: <200107231633.f6NGX5G28306@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile.in ossp-pkg/srpc/libxds/regr...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   23-Jul-2001 18:33:05
  Branch: HEAD                             Handle: 2001072317330301

  Added files:
    ossp-pkg/srpc/libxds    xml-decode-double.c xml-encode-double.c
    ossp-pkg/srpc/libxds/regression-tests
                            xml-double.c
  Modified files:
    ossp-pkg/srpc/libxds    Makefile.in xds.h.in
    ossp-pkg/srpc/libxds/regression-tests
                            Makefile.in

  Log:
    Implemented encoding and decoding of doubles in XML.

  Summary:
    Revision    Changes     Path
    1.9         +2  -1      ossp-pkg/srpc/libxds/Makefile.in
    1.9         +1  -1      ossp-pkg/srpc/libxds/regression-tests/Makefile.in
    1.1         +113 -0     ossp-pkg/srpc/libxds/regression-tests/xml-double.c
    1.5         +4  -0      ossp-pkg/srpc/libxds/xds.h.in
    1.1         +55 -0      ossp-pkg/srpc/libxds/xml-decode-double.c
    1.1         +55 -0      ossp-pkg/srpc/libxds/xml-encode-double.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile.in
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 Makefile.in
  --- ossp-pkg/srpc/libxds/Makefile.in	2001/07/23 16:17:43	1.8
  +++ ossp-pkg/srpc/libxds/Makefile.in	2001/07/23 16:33:03	1.9
  @@ -17,7 +17,8 @@
   		  xdr-encode-string.o xdr-decode-string.o xdr-encode-double.o \
   		  xdr-decode-double.o xml-encode-int32.o xml-decode-int32.o \
   		  xml-decode-int64.o xml-decode-uint32.o xml-decode-uint64.o \
  -		  xml-encode-int64.o xml-encode-uint32.o xml-encode-uint64.o
  +		  xml-encode-int64.o xml-encode-uint32.o xml-encode-uint64.o \
  +		  xml-encode-double.o xml-decode-double.o
   
   .c.o:
   	$(CC) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CFLAGS) -c $<
  Index: ossp-pkg/srpc/libxds/regression-tests/Makefile.in
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 Makefile.in
  --- ossp-pkg/srpc/libxds/regression-tests/Makefile.in	2001/07/23 16:17:44	1.8
  +++ ossp-pkg/srpc/libxds/regression-tests/Makefile.in	2001/07/23 16:33:04	1.9
  @@ -13,7 +13,7 @@
   		  xdr-uint32.exe xdr-int32.exe xdr-uint64.exe xdr-int64.exe  \
   		  xdr-octetstream.exe xdr-octetstream-empty.exe xdr-string.exe \
   		  xdr-string-empty.exe xds-mystruct.exe xml-uint32.exe xml-int32.exe \
  -		  xml-uint64.exe xml-int64.exe
  +		  xml-uint64.exe xml-int64.exe xml-double.exe
   
   .SUFFIXES:
   .SUFFIXES:	.c .exe
  Index: ossp-pkg/srpc/libxds/regression-tests/xml-double.c
  ============================================================
  $ cvs update -p -r1.1 xml-double.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <stdio.h>
  #include <string.h>
  #include <rpc/types.h>
  #include <rpc/xdr.h>
  #include "../internal.h"
  
  int main()
      {
      xds_t* xds;
      char*  buffer;
      size_t buffer_size;
  
      xds_double_t values[] =
  	{
  	3.14159265358979323844
  	};
  
      size_t i;
  
      /* Encode the values array, then decode it back and compare the
         numbers. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL)
  	{
  	printf("Failed to initialize XDS context.\n");
  	return 1;
  	}
      if (xds_register(xds, "int", &xml_encode_double, NULL) != XDS_OK)
  	{
  	printf("Failed to register my encoding engines.\n");
  	return 1;
  	}
      for (i = 0; i < sizeof(values)/sizeof(xds_double_t); ++i)
  	{
  	if (xds_encode(xds, "int", values[i]) != XDS_OK)
  	    {
  	    printf("xds_encode(values[%d]) failed!\n", i);
  	    return 1;
  	    }
  	}
      if (xds_getbuffer(xds, XDS_GIFT, (void**)&buffer, &buffer_size) != XDS_OK)
  	{
  	printf("getbuffer() failed.\n");
  	return 1;
  	}
      xds_destroy(xds);
  
      printf("%s\n", buffer);
  
      xds = xds_init(XDS_DECODE);
      if (xds == NULL)
  	{
  	printf("Failed to initialize XDS context.\n");
  	return 1;
  	}
      if (xds_register(xds, "int", &xml_decode_double, NULL) != XDS_OK)
  	{
  	printf("Failed to register my decoding engines.\n");
  	return 1;
  	}
      if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK)
  	{
  	printf("setbuffer() failed.\n");
  	return 1;
  	}
      for (i = 0; i < sizeof(values)/sizeof(xds_double_t); ++i)
  	{
  	xds_double_t val;
  	if (xds_decode(xds, "int", &val) != XDS_OK)
  	    {
  	    printf("xds_decode(values[%d]) failed!\n", i);
  	    return 1;
  	    }
  	if (val != values[i])
  	    {
  	    printf("Decoded value (%E) does not match the original value (%E)!\n", val, values[i]);
  	    return 1;
  	    }
  	}
      xds_destroy(xds);
  
      /* Everything went fine. */
  
      return 0;
      }
  Index: ossp-pkg/srpc/libxds/xds.h.in
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xds.h.in
  --- ossp-pkg/srpc/libxds/xds.h.in	2001/07/23 16:17:43	1.4
  +++ ossp-pkg/srpc/libxds/xds.h.in	2001/07/23 16:33:03	1.5
  @@ -42,6 +42,7 @@
   typedef @xds_int16_t@ xds_int16_t;
   typedef @xds_int32_t@ xds_int32_t;
   typedef @xds_int64_t@ xds_int64_t;
  +typedef double xds_double_t;
   
   enum
       {
  @@ -111,5 +112,8 @@
   
   int xml_encode_uint64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
   int xml_decode_uint64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  +
  +int xml_encode_double(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  +int xml_decode_double(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
   
   #endif /* !defined(__LIBXDS_H__) */
  Index: ossp-pkg/srpc/libxds/xml-decode-double.c
  ============================================================
  $ cvs update -p -r1.1 xml-decode-double.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <stdio.h>
  #include <assert.h>
  #include "internal.h"
  
  int xml_decode_double(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
      {
      int rc;
      xds_double_t* value;
      int len;
  
      /* Consistency checks. */
  
      assert(xds != NULL);
      assert(buffer != NULL);
      assert(buffer_size != 0);
      assert(args != NULL);
      if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  	return XDS_ERR_INVALID_ARG;
  
      /* Format value into buffer. */
  
      value = va_arg(*args, xds_double_t*);
      rc = sscanf(buffer, "<double>%lE</double>%n", value, &len);
      if (rc <= 0)
  	return XDS_ERR_UNDERFLOW;
  
      return len;
      }
  Index: ossp-pkg/srpc/libxds/xml-encode-double.c
  ============================================================
  $ cvs update -p -r1.1 xml-encode-double.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <stdio.h>
  #include <assert.h>
  #include "internal.h"
  
  int xml_encode_double(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
      {
      int rc;
      xds_double_t value;
  
      /* Consistency checks. */
  
      assert(xds != NULL);
      assert(buffer != NULL);
      assert(buffer_size != 0);
      assert(args != NULL);
      if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  	return XDS_ERR_INVALID_ARG;
  
      /* Format value into buffer. */
  
      value = va_arg(*args, xds_double_t);
      rc = snprintf(buffer, buffer_size, "<double>%E</double>", value);
      if (rc < 0)
  	return buffer_size*2;
      assert(rc >= 15);
  
      return rc;
      }

From ossp-cvs-owner@ossp.org  Mon Jul 23 18:40:40 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6NGedD28842; Mon, 23 Jul 2001 18:40:39 +0200 (CEST)
Date: Mon, 23 Jul 2001 18:40:39 +0200 (CEST)
Message-Id: <200107231640.f6NGedD28842@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xml-decode-int64.c xml-decode-uint64....
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   23-Jul-2001 18:40:39
  Branch: HEAD                             Handle: 2001072317403800

  Modified files:
    ossp-pkg/srpc/libxds    xml-decode-int64.c xml-decode-uint64.c
                            xml-encode-int64.c xml-encode-uint64.c

  Log:
    Use 'll' modifier for formatting long long values rather than 'L',
    which seems to be unsupported on FreeBSD and Solaris.

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/srpc/libxds/xml-decode-int64.c
    1.2         +1  -1      ossp-pkg/srpc/libxds/xml-decode-uint64.c
    1.2         +1  -1      ossp-pkg/srpc/libxds/xml-encode-int64.c
    1.2         +1  -1      ossp-pkg/srpc/libxds/xml-encode-uint64.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xml-decode-int64.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xml-decode-int64.c
  --- ossp-pkg/srpc/libxds/xml-decode-int64.c	2001/07/23 16:17:43	1.1
  +++ ossp-pkg/srpc/libxds/xml-decode-int64.c	2001/07/23 16:40:38	1.2
  @@ -47,7 +47,7 @@
       /* Format value into buffer. */
   
       value = va_arg(*args, xds_int64_t*);
  -    rc = sscanf(buffer, "<int64>%Ld</int64>%n", value, &len);
  +    rc = sscanf(buffer, "<int64>%lld</int64>%n", value, &len);
       if (rc <= 0)
   	return XDS_ERR_UNDERFLOW;
   
  Index: ossp-pkg/srpc/libxds/xml-decode-uint64.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xml-decode-uint64.c
  --- ossp-pkg/srpc/libxds/xml-decode-uint64.c	2001/07/23 16:17:43	1.1
  +++ ossp-pkg/srpc/libxds/xml-decode-uint64.c	2001/07/23 16:40:38	1.2
  @@ -47,7 +47,7 @@
       /* Format value into buffer. */
   
       value = va_arg(*args, xds_uint64_t*);
  -    rc = sscanf(buffer, "<uint64>%Lu</uint64>%n", value, &len);
  +    rc = sscanf(buffer, "<uint64>%llu</uint64>%n", value, &len);
       if (rc <= 0)
   	return XDS_ERR_UNDERFLOW;
   
  Index: ossp-pkg/srpc/libxds/xml-encode-int64.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xml-encode-int64.c
  --- ossp-pkg/srpc/libxds/xml-encode-int64.c	2001/07/23 16:17:43	1.1
  +++ ossp-pkg/srpc/libxds/xml-encode-int64.c	2001/07/23 16:40:38	1.2
  @@ -46,7 +46,7 @@
       /* Format value into buffer. */
   
       value = va_arg(*args, xds_int64_t);
  -    rc = snprintf(buffer, buffer_size, "<int64>%Ld</int64>", value);
  +    rc = snprintf(buffer, buffer_size, "<int64>%lld</int64>", value);
       if (rc < 0)
   	return buffer_size*2;
       assert(rc >= 15);
  Index: ossp-pkg/srpc/libxds/xml-encode-uint64.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xml-encode-uint64.c
  --- ossp-pkg/srpc/libxds/xml-encode-uint64.c	2001/07/23 16:17:43	1.1
  +++ ossp-pkg/srpc/libxds/xml-encode-uint64.c	2001/07/23 16:40:38	1.2
  @@ -46,7 +46,7 @@
       /* Format value into buffer. */
   
       value = va_arg(*args, xds_uint64_t);
  -    rc = snprintf(buffer, buffer_size, "<uint64>%Lu</uint64>", value);
  +    rc = snprintf(buffer, buffer_size, "<uint64>%llu</uint64>", value);
       if (rc < 0)
   	return buffer_size*2;
       assert(rc >= 15);

From ossp-cvs-owner@ossp.org  Mon Jul 23 18:45:12 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6NGjBl29645; Mon, 23 Jul 2001 18:45:11 +0200 (CEST)
Date: Mon, 23 Jul 2001 18:45:11 +0200 (CEST)
Message-Id: <200107231645.f6NGjBl29645@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests xml-int64.c xml-uint...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   23-Jul-2001 18:45:11
  Branch: HEAD                             Handle: 2001072317451001

  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            xml-int64.c xml-uint64.c

  Log:
    Use %lld instead of %Ld.

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/srpc/libxds/regression-tests/xml-int64.c
    1.2         +1  -1      ossp-pkg/srpc/libxds/regression-tests/xml-uint64.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/xml-int64.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xml-int64.c
  --- ossp-pkg/srpc/libxds/regression-tests/xml-int64.c	2001/07/23 16:17:44	1.1
  +++ ossp-pkg/srpc/libxds/regression-tests/xml-int64.c	2001/07/23 16:45:10	1.2
  @@ -104,7 +104,7 @@
   	    }
   	if (val != values[i])
   	    {
  -	    printf("Decoded value (%Ld) does not match the original value (%Ld)!\n", val, values[i]);
  +	    printf("Decoded value (%lld) does not match the original value (%lld)!\n", val, values[i]);
   	    return 1;
   	    }
   	}
  Index: ossp-pkg/srpc/libxds/regression-tests/xml-uint64.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xml-uint64.c
  --- ossp-pkg/srpc/libxds/regression-tests/xml-uint64.c	2001/07/23 16:17:44	1.1
  +++ ossp-pkg/srpc/libxds/regression-tests/xml-uint64.c	2001/07/23 16:45:11	1.2
  @@ -103,7 +103,7 @@
   	    }
   	if (val != values[i])
   	    {
  -	    printf("Decoded value (%Lu) does not match the original value (%Lu)!\n", val, values[i]);
  +	    printf("Decoded value (%llu) does not match the original value (%llu)!\n", val, values[i]);
   	    return 1;
   	    }
   	}

From ossp-cvs-owner@ossp.org  Tue Jul 24 14:16:34 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6OCGWZ78605; Tue, 24 Jul 2001 14:16:32 +0200 (CEST)
Date: Tue, 24 Jul 2001 14:16:32 +0200 (CEST)
Message-Id: <200107241216.f6OCGWZ78605@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   24-Jul-2001 14:16:32
  Branch: HEAD                             Handle: 2001072413163200

  Modified files:
    ossp-pkg/srpc           TODO

  Log:
    - Added spec of xml_encode_begin() and xml_encode_end().
    - Added RFC for UTF-8 encoding.
    - Added the list of characters to be escaped for XML.
    - Documented TODO stuff in autoconf script.
    - Documented design decision concerning the precision of doubles.
    - Documented design decision against use of snprintf().

  Summary:
    Revision    Changes     Path
    1.7         +27 -1      ossp-pkg/srpc/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/TODO
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 TODO
  --- ossp-pkg/srpc/TODO	2001/07/19 11:07:15	1.6
  +++ ossp-pkg/srpc/TODO	2001/07/24 12:16:32	1.7
  @@ -1,4 +1,3 @@
  -
   TODO LIST AND MILESTONES
   ========================
   
  @@ -49,6 +48,33 @@
   
     - XML: <int32>1234</int32>
            uint32, int64, uint64,
  +
  +       - xml_encode_begin():
  +	 <?xml version="1.0" encoding="UTF-8" standalone="no">
  +         <!DOCTYPE xds SYSTEM "http://www.ossp.org/pkg/xds/xds-xml.dtd">
  +         <xds>
  +
  +       - xml_encode_end():
  +         </xds>
  + - UFT-8 RFC: rfc2279.txt
  +
  +    Escape: <   <--> &lt;
  +            &   <--> &amp;
  +            ]]> <--> ]]&gt;
  +
  +
  +
  +  - libm may be used. We don't depend on sprintf() but convert out
  +    numbers ourselves for portability.
  +
  +  - IEEE values ranges for floating point numbers will be used for
  +    accurarcy in XML presentation.
  +
  + - autoconf should find the types for int32 etc. even if they're not
  +   defined in sys/types.h.
  +
  + - autoconf should specify the compiler flags depending on what the
  +   compiler supports.
   
   o M5 (peti+rse) [1 week until 30-Jul-2001]
     - [peti] documentation for libxds (xds.pod)

From ossp-cvs-owner@ossp.org  Tue Jul 24 15:04:45 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6OD4it85246; Tue, 24 Jul 2001 15:04:44 +0200 (CEST)
Date: Tue, 24 Jul 2001 15:04:44 +0200 (CEST)
Message-Id: <200107241304.f6OD4it85246@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xml-decode-double.c xml-encode-double...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   24-Jul-2001 15:04:44
  Branch: HEAD                             Handle: 2001072414044300

  Modified files:
    ossp-pkg/srpc/libxds    xml-decode-double.c xml-encode-double.c

  Log:
    Encoding or decoding of doubles is not implemented yet.

  Summary:
    Revision    Changes     Path
    1.2         +1  -21     ossp-pkg/srpc/libxds/xml-decode-double.c
    1.2         +1  -21     ossp-pkg/srpc/libxds/xml-encode-double.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xml-decode-double.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xml-decode-double.c
  --- ossp-pkg/srpc/libxds/xml-decode-double.c	2001/07/23 16:33:03	1.1
  +++ ossp-pkg/srpc/libxds/xml-decode-double.c	2001/07/24 13:04:43	1.2
  @@ -31,25 +31,5 @@
   
   int xml_decode_double(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
       {
  -    int rc;
  -    xds_double_t* value;
  -    int len;
  -
  -    /* Consistency checks. */
  -
  -    assert(xds != NULL);
  -    assert(buffer != NULL);
  -    assert(buffer_size != 0);
  -    assert(args != NULL);
  -    if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  -	return XDS_ERR_INVALID_ARG;
  -
  -    /* Format value into buffer. */
  -
  -    value = va_arg(*args, xds_double_t*);
  -    rc = sscanf(buffer, "<double>%lE</double>%n", value, &len);
  -    if (rc <= 0)
  -	return XDS_ERR_UNDERFLOW;
  -
  -    return len;
  +    return -1;
       }
  Index: ossp-pkg/srpc/libxds/xml-encode-double.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xml-encode-double.c
  --- ossp-pkg/srpc/libxds/xml-encode-double.c	2001/07/23 16:33:03	1.1
  +++ ossp-pkg/srpc/libxds/xml-encode-double.c	2001/07/24 13:04:43	1.2
  @@ -31,25 +31,5 @@
   
   int xml_encode_double(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
       {
  -    int rc;
  -    xds_double_t value;
  -
  -    /* Consistency checks. */
  -
  -    assert(xds != NULL);
  -    assert(buffer != NULL);
  -    assert(buffer_size != 0);
  -    assert(args != NULL);
  -    if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  -	return XDS_ERR_INVALID_ARG;
  -
  -    /* Format value into buffer. */
  -
  -    value = va_arg(*args, xds_double_t);
  -    rc = snprintf(buffer, buffer_size, "<double>%E</double>", value);
  -    if (rc < 0)
  -	return buffer_size*2;
  -    assert(rc >= 15);
  -
  -    return rc;
  +    return -1;
       }

From ossp-cvs-owner@ossp.org  Tue Jul 24 15:49:35 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6ODnYr91617; Tue, 24 Jul 2001 15:49:34 +0200 (CEST)
Date: Tue, 24 Jul 2001 15:49:34 +0200 (CEST)
Message-Id: <200107241349.f6ODnYr91617@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests xml-double.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   24-Jul-2001 15:49:34
  Branch: HEAD                             Handle: 2001072414493400

  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            xml-double.c

  Log:
    Don't run this test at the moment, we know it fails.

  Summary:
    Revision    Changes     Path
    1.2         +2  -1      ossp-pkg/srpc/libxds/regression-tests/xml-double.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/xml-double.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xml-double.c
  --- ossp-pkg/srpc/libxds/regression-tests/xml-double.c	2001/07/23 16:33:04	1.1
  +++ ossp-pkg/srpc/libxds/regression-tests/xml-double.c	2001/07/24 13:49:34	1.2
  @@ -33,6 +33,7 @@
   
   int main()
       {
  +#if 0
       xds_t* xds;
       char*  buffer;
       size_t buffer_size;
  @@ -108,6 +109,6 @@
       xds_destroy(xds);
   
       /* Everything went fine. */
  -
  +#endif
       return 0;
       }

From ossp-cvs-owner@ossp.org  Tue Jul 24 15:50:17 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6ODoGU91715; Tue, 24 Jul 2001 15:50:16 +0200 (CEST)
Date: Tue, 24 Jul 2001 15:50:16 +0200 (CEST)
Message-Id: <200107241350.f6ODoGU91715@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests xml-int64.c xml-uint...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   24-Jul-2001 15:50:16
  Branch: HEAD                             Handle: 2001072414501500

  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            xml-int64.c xml-uint64.c

  Log:
    Removed printing of long long values so that the tests don't run into
    portability problems.

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/srpc/libxds/regression-tests/xml-int64.c
    1.3         +1  -1      ossp-pkg/srpc/libxds/regression-tests/xml-uint64.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/xml-int64.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xml-int64.c
  --- ossp-pkg/srpc/libxds/regression-tests/xml-int64.c	2001/07/23 16:45:10	1.2
  +++ ossp-pkg/srpc/libxds/regression-tests/xml-int64.c	2001/07/24 13:50:15	1.3
  @@ -104,7 +104,7 @@
   	    }
   	if (val != values[i])
   	    {
  -	    printf("Decoded value (%lld) does not match the original value (%lld)!\n", val, values[i]);
  +	    printf("Decoded value does not match the original!\n");
   	    return 1;
   	    }
   	}
  Index: ossp-pkg/srpc/libxds/regression-tests/xml-uint64.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xml-uint64.c
  --- ossp-pkg/srpc/libxds/regression-tests/xml-uint64.c	2001/07/23 16:45:11	1.2
  +++ ossp-pkg/srpc/libxds/regression-tests/xml-uint64.c	2001/07/24 13:50:15	1.3
  @@ -103,7 +103,7 @@
   	    }
   	if (val != values[i])
   	    {
  -	    printf("Decoded value (%llu) does not match the original value (%llu)!\n", val, values[i]);
  +	    printf("Decoded value does not match the original!\n");
   	    return 1;
   	    }
   	}

From ossp-cvs-owner@ossp.org  Tue Jul 24 15:52:43 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6ODqgm92245; Tue, 24 Jul 2001 15:52:42 +0200 (CEST)
Date: Tue, 24 Jul 2001 15:52:42 +0200 (CEST)
Message-Id: <200107241352.f6ODqgm92245@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xml-decode-double.c xml-decode-int32....
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   24-Jul-2001 15:52:42
  Branch: HEAD                             Handle: 2001072414524100

  Modified files:
    ossp-pkg/srpc/libxds    xml-decode-double.c xml-decode-int32.c
                            xml-decode-int64.c xml-decode-uint32.c
                            xml-decode-uint64.c xml-encode-double.c
                            xml-encode-int32.c xml-encode-int64.c
                            xml-encode-uint32.c xml-encode-uint64.c

  Log:
    If there are any ladies reading this: Please pardon my language in the
    following paragraph!
    
    Fuck snprintf(). Since apparently the Unix vendors are too bloody
    stupid to provide a working snprintf() implementation that conforms to
    an 8 year old standard, we don't use snprintf() at all but convert the
    numbers ourselves. I re-implemented all XML callbacks to do maths on
    their own.

  Summary:
    Revision    Changes     Path
    1.3         +0  -2      ossp-pkg/srpc/libxds/xml-decode-double.c
    1.2         +41 -7      ossp-pkg/srpc/libxds/xml-decode-int32.c
    1.3         +41 -7      ossp-pkg/srpc/libxds/xml-decode-int64.c
    1.2         +31 -7      ossp-pkg/srpc/libxds/xml-decode-uint32.c
    1.3         +31 -7      ossp-pkg/srpc/libxds/xml-decode-uint64.c
    1.3         +0  -2      ossp-pkg/srpc/libxds/xml-encode-double.c
    1.3         +40 -8      ossp-pkg/srpc/libxds/xml-encode-int32.c
    1.3         +40 -8      ossp-pkg/srpc/libxds/xml-encode-int64.c
    1.2         +30 -8      ossp-pkg/srpc/libxds/xml-encode-uint32.c
    1.3         +30 -8      ossp-pkg/srpc/libxds/xml-encode-uint64.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xml-decode-double.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xml-decode-double.c
  --- ossp-pkg/srpc/libxds/xml-decode-double.c	2001/07/24 13:04:43	1.2
  +++ ossp-pkg/srpc/libxds/xml-decode-double.c	2001/07/24 13:52:41	1.3
  @@ -25,8 +25,6 @@
      SUCH DAMAGE.
   */
   
  -#include <stdio.h>
  -#include <assert.h>
   #include "internal.h"
   
   int xml_decode_double(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  Index: ossp-pkg/srpc/libxds/xml-decode-int32.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xml-decode-int32.c
  --- ossp-pkg/srpc/libxds/xml-decode-int32.c	2001/07/23 15:57:47	1.1
  +++ ossp-pkg/srpc/libxds/xml-decode-int32.c	2001/07/24 13:52:41	1.2
  @@ -25,15 +25,16 @@
      SUCH DAMAGE.
   */
   
  -#include <stdio.h>
  +#include <string.h>
  +#include <ctype.h>
   #include <assert.h>
   #include "internal.h"
   
   int xml_decode_int32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
       {
  -    int rc;
       xds_int32_t* value;
  -    int len;
  +    char* p;
  +    int negative;
   
       /* Consistency checks. */
   
  @@ -44,12 +45,45 @@
       if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
   	return XDS_ERR_INVALID_ARG;
   
  -    /* Format value into buffer. */
  +    /* The buffer must contain at least opening tag, closing tag and
  +       one digit. Check whether it is large enough. */
   
  +    if (buffer_size < 7 + 8 + 1)
  +	return XDS_ERR_UNDERFLOW;
  +
  +    /* Does the opening XML tag match? */
  +
  +    if (strncmp(buffer, "<int32>", 7) != 0)
  +	return XDS_ERR_TYPE_MISMATCH;
  +
  +    /* Decode the representation of the value. */
  +
       value = va_arg(*args, xds_int32_t*);
  -    rc = sscanf(buffer, "<int32>%d</int32>%n", value, &len);
  -    if (rc <= 0)
  +    *value = 0;
  +    p = (char*)buffer + 7;
  +    if (*p == '-')
  +	{
  +	negative = XDS_TRUE;
  +	++p;
  +	}
  +    else
  +	negative = XDS_FALSE;
  +    while(isdigit(*p))
  +	{
  +	if (p >= (char*)buffer + buffer_size)
  +	    return XDS_ERR_UNDERFLOW;
  +	*value *= 10;
  +	*value += *p++ - '0';
  +	}
  +    if (negative)
  +	*value = 0 - *value;
  +
  +    /* Does the closing XML tag match? */
  +
  +    if (p+8 > (char*)buffer + buffer_size)
   	return XDS_ERR_UNDERFLOW;
  +    else if (strncmp(p, "</int32>", 8) != 0)
  +	return XDS_ERR_TYPE_MISMATCH;
   
  -    return len;
  +    return p + 8 - (char*)buffer;
       }
  Index: ossp-pkg/srpc/libxds/xml-decode-int64.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xml-decode-int64.c
  --- ossp-pkg/srpc/libxds/xml-decode-int64.c	2001/07/23 16:40:38	1.2
  +++ ossp-pkg/srpc/libxds/xml-decode-int64.c	2001/07/24 13:52:41	1.3
  @@ -25,15 +25,16 @@
      SUCH DAMAGE.
   */
   
  -#include <stdio.h>
  +#include <string.h>
  +#include <ctype.h>
   #include <assert.h>
   #include "internal.h"
   
   int xml_decode_int64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
       {
  -    int rc;
       xds_int64_t* value;
  -    int len;
  +    char* p;
  +    int negative;
   
       /* Consistency checks. */
   
  @@ -44,12 +45,45 @@
       if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
   	return XDS_ERR_INVALID_ARG;
   
  -    /* Format value into buffer. */
  +    /* The buffer must contain at least opening tag, closing tag and
  +       one digit. Check whether it is large enough. */
   
  +    if (buffer_size < 7 + 8 + 1)
  +	return XDS_ERR_UNDERFLOW;
  +
  +    /* Does the opening XML tag match? */
  +
  +    if (strncmp(buffer, "<int64>", 7) != 0)
  +	return XDS_ERR_TYPE_MISMATCH;
  +
  +    /* Decode the representation of the value. */
  +
       value = va_arg(*args, xds_int64_t*);
  -    rc = sscanf(buffer, "<int64>%lld</int64>%n", value, &len);
  -    if (rc <= 0)
  +    *value = 0;
  +    p = (char*)buffer + 7;
  +    if (*p == '-')
  +	{
  +	negative = XDS_TRUE;
  +	++p;
  +	}
  +    else
  +	negative = XDS_FALSE;
  +    while(isdigit(*p))
  +	{
  +	if (p >= (char*)buffer + buffer_size)
  +	    return XDS_ERR_UNDERFLOW;
  +	*value *= 10;
  +	*value += *p++ - '0';
  +	}
  +    if (negative)
  +	*value = 0 - *value;
  +
  +    /* Does the closing XML tag match? */
  +
  +    if (p+8 > (char*)buffer + buffer_size)
   	return XDS_ERR_UNDERFLOW;
  +    else if (strncmp(p, "</int64>", 8) != 0)
  +	return XDS_ERR_TYPE_MISMATCH;
   
  -    return len;
  +    return p + 8 - (char*)buffer;
       }
  Index: ossp-pkg/srpc/libxds/xml-decode-uint32.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xml-decode-uint32.c
  --- ossp-pkg/srpc/libxds/xml-decode-uint32.c	2001/07/23 16:17:43	1.1
  +++ ossp-pkg/srpc/libxds/xml-decode-uint32.c	2001/07/24 13:52:41	1.2
  @@ -25,15 +25,15 @@
      SUCH DAMAGE.
   */
   
  -#include <stdio.h>
  +#include <string.h>
  +#include <ctype.h>
   #include <assert.h>
   #include "internal.h"
   
   int xml_decode_uint32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
       {
  -    int rc;
       xds_uint32_t* value;
  -    int len;
  +    char* p;
   
       /* Consistency checks. */
   
  @@ -44,12 +44,36 @@
       if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
   	return XDS_ERR_INVALID_ARG;
   
  -    /* Format value into buffer. */
  +    /* The buffer must contain at least opening tag, closing tag and
  +       one digit. Check whether it is large enough. */
   
  +    if (buffer_size < 8 + 9 + 1)
  +	return XDS_ERR_UNDERFLOW;
  +
  +    /* Does the opening XML tag match? */
  +
  +    if (strncmp(buffer, "<uint32>", 8) != 0)
  +	return XDS_ERR_TYPE_MISMATCH;
  +
  +    /* Decode the representation of the value. */
  +
       value = va_arg(*args, xds_uint32_t*);
  -    rc = sscanf(buffer, "<uint32>%u</uint32>%n", value, &len);
  -    if (rc <= 0)
  +    *value = 0;
  +    p = (char*)buffer + 8;
  +    while(isdigit(*p))
  +	{
  +	if (p >= (char*)buffer + buffer_size)
  +	    return XDS_ERR_UNDERFLOW;
  +	*value *= 10;
  +	*value += *p++ - '0';
  +	}
  +
  +    /* Does the closing XML tag match? */
  +
  +    if (p+9 > (char*)buffer + buffer_size)
   	return XDS_ERR_UNDERFLOW;
  +    else if (strncmp(p, "</uint32>", 9) != 0)
  +	return XDS_ERR_TYPE_MISMATCH;
   
  -    return len;
  +    return p + 9 - (char*)buffer;
       }
  Index: ossp-pkg/srpc/libxds/xml-decode-uint64.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xml-decode-uint64.c
  --- ossp-pkg/srpc/libxds/xml-decode-uint64.c	2001/07/23 16:40:38	1.2
  +++ ossp-pkg/srpc/libxds/xml-decode-uint64.c	2001/07/24 13:52:41	1.3
  @@ -25,15 +25,15 @@
      SUCH DAMAGE.
   */
   
  -#include <stdio.h>
  +#include <string.h>
  +#include <ctype.h>
   #include <assert.h>
   #include "internal.h"
   
   int xml_decode_uint64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
       {
  -    int rc;
       xds_uint64_t* value;
  -    int len;
  +    char* p;
   
       /* Consistency checks. */
   
  @@ -44,12 +44,36 @@
       if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
   	return XDS_ERR_INVALID_ARG;
   
  -    /* Format value into buffer. */
  +    /* The buffer must contain at least opening tag, closing tag and
  +       one digit. Check whether it is large enough. */
   
  +    if (buffer_size < 8 + 9 + 1)
  +	return XDS_ERR_UNDERFLOW;
  +
  +    /* Does the opening XML tag match? */
  +
  +    if (strncmp(buffer, "<uint64>", 8) != 0)
  +	return XDS_ERR_TYPE_MISMATCH;
  +
  +    /* Decode the representation of the value. */
  +
       value = va_arg(*args, xds_uint64_t*);
  -    rc = sscanf(buffer, "<uint64>%llu</uint64>%n", value, &len);
  -    if (rc <= 0)
  +    *value = 0;
  +    p = (char*)buffer + 8;
  +    while(isdigit(*p))
  +	{
  +	if (p >= (char*)buffer + buffer_size)
  +	    return XDS_ERR_UNDERFLOW;
  +	*value *= 10;
  +	*value += *p++ - '0';
  +	}
  +
  +    /* Does the closing XML tag match? */
  +
  +    if (p+9 > (char*)buffer + buffer_size)
   	return XDS_ERR_UNDERFLOW;
  +    else if (strncmp(p, "</uint64>", 9) != 0)
  +	return XDS_ERR_TYPE_MISMATCH;
   
  -    return len;
  +    return p + 9 - (char*)buffer;
       }
  Index: ossp-pkg/srpc/libxds/xml-encode-double.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xml-encode-double.c
  --- ossp-pkg/srpc/libxds/xml-encode-double.c	2001/07/24 13:04:43	1.2
  +++ ossp-pkg/srpc/libxds/xml-encode-double.c	2001/07/24 13:52:41	1.3
  @@ -25,8 +25,6 @@
      SUCH DAMAGE.
   */
   
  -#include <stdio.h>
  -#include <assert.h>
   #include "internal.h"
   
   int xml_encode_double(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  Index: ossp-pkg/srpc/libxds/xml-encode-int32.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xml-encode-int32.c
  --- ossp-pkg/srpc/libxds/xml-encode-int32.c	2001/07/23 15:57:47	1.2
  +++ ossp-pkg/srpc/libxds/xml-encode-int32.c	2001/07/24 13:52:41	1.3
  @@ -25,14 +25,17 @@
      SUCH DAMAGE.
   */
   
  -#include <stdio.h>
  +#include <string.h>
   #include <assert.h>
   #include "internal.h"
   
   int xml_encode_int32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
       {
  -    int rc;
       xds_int32_t value;
  +    char buf[32];
  +    size_t i, j;
  +    char* p;
  +    int negative;
   
       /* Consistency checks. */
   
  @@ -43,13 +46,42 @@
       if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
   	return XDS_ERR_INVALID_ARG;
   
  -    /* Format value into buffer. */
  +    /* Format value into our buffer. */
   
       value = va_arg(*args, xds_int32_t);
  -    rc = snprintf(buffer, buffer_size, "<int32>%d</int32>", value);
  -    if (rc < 0)
  -	return buffer_size*2;
  -    assert(rc >= 15);
  +    if (value < 0)
  +	{
  +	negative = XDS_TRUE;
  +	value = 0 - value;
  +	}
  +    else
  +	negative = XDS_FALSE;
  +    i = 0;
  +    do
  +	{
  +	unsigned char remainder = value % 10;
  +	value = value / 10;
  +	buf[i++] = '0' + remainder;
  +	}
  +    while (value != 0);
  +    if (negative)
  +	buf[i++] = '-';
  +
  +    /* Check the buffer size. */
  +
  +    if (buffer_size < 7 + 8 + i)
  +	return 7 + 8 + i;
  +
  +    /* Write result into the buffer. */
  +
  +    p = buffer;
  +    strcpy(p, "<int32>");
  +    p += 7;
  +    for (j = i; j > 0; )
  +	{
  +	*p++ = buf[--j];
  +	}
  +    strcpy(p, "</int32>");
   
  -    return rc;
  +    return 7 + 8 + i;
       }
  Index: ossp-pkg/srpc/libxds/xml-encode-int64.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xml-encode-int64.c
  --- ossp-pkg/srpc/libxds/xml-encode-int64.c	2001/07/23 16:40:38	1.2
  +++ ossp-pkg/srpc/libxds/xml-encode-int64.c	2001/07/24 13:52:41	1.3
  @@ -25,14 +25,17 @@
      SUCH DAMAGE.
   */
   
  -#include <stdio.h>
  +#include <string.h>
   #include <assert.h>
   #include "internal.h"
   
   int xml_encode_int64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
       {
  -    int rc;
       xds_int64_t value;
  +    char buf[64];
  +    size_t i, j;
  +    char* p;
  +    int negative;
   
       /* Consistency checks. */
   
  @@ -43,13 +46,42 @@
       if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
   	return XDS_ERR_INVALID_ARG;
   
  -    /* Format value into buffer. */
  +    /* Format value into our buffer. */
   
       value = va_arg(*args, xds_int64_t);
  -    rc = snprintf(buffer, buffer_size, "<int64>%lld</int64>", value);
  -    if (rc < 0)
  -	return buffer_size*2;
  -    assert(rc >= 15);
  +    if (value < 0)
  +	{
  +	negative = XDS_TRUE;
  +	value = 0 - value;
  +	}
  +    else
  +	negative = XDS_FALSE;
  +    i = 0;
  +    do
  +	{
  +	unsigned char remainder = value % 10;
  +	value = value / 10;
  +	buf[i++] = '0' + remainder;
  +	}
  +    while (value != 0);
  +    if (negative)
  +	buf[i++] = '-';
  +
  +    /* Check the buffer size. */
  +
  +    if (buffer_size < 7 + 8 + i)
  +	return 7 + 8 + i;
  +
  +    /* Write result into the buffer. */
  +
  +    p = buffer;
  +    strcpy(p, "<int64>");
  +    p += 7;
  +    for (j = i; j > 0; )
  +	{
  +	*p++ = buf[--j];
  +	}
  +    strcpy(p, "</int64>");
   
  -    return rc;
  +    return 7 + 8 + i;
       }
  Index: ossp-pkg/srpc/libxds/xml-encode-uint32.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xml-encode-uint32.c
  --- ossp-pkg/srpc/libxds/xml-encode-uint32.c	2001/07/23 16:17:43	1.1
  +++ ossp-pkg/srpc/libxds/xml-encode-uint32.c	2001/07/24 13:52:41	1.2
  @@ -25,14 +25,16 @@
      SUCH DAMAGE.
   */
   
  -#include <stdio.h>
  +#include <string.h>
   #include <assert.h>
   #include "internal.h"
   
   int xml_encode_uint32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
       {
  -    int rc;
       xds_uint32_t value;
  +    char buf[32];
  +    size_t i, j;
  +    char* p;
   
       /* Consistency checks. */
   
  @@ -43,13 +45,33 @@
       if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
   	return XDS_ERR_INVALID_ARG;
   
  -    /* Format value into buffer. */
  +    /* Format value into our buffer. */
   
       value = va_arg(*args, xds_uint32_t);
  -    rc = snprintf(buffer, buffer_size, "<uint32>%u</uint32>", value);
  -    if (rc < 0)
  -	return buffer_size*2;
  -    assert(rc >= 15);
  +    i = 0;
  +    do
  +	{
  +	unsigned char remainder = value % 10;
  +	value = value / 10;
  +	buf[i++] = '0' + remainder;
  +	}
  +    while (value != 0);
  +
  +    /* Check the buffer size. */
  +
  +    if (buffer_size < 8 + 9 + i)
  +	return 8 + 9 + i;
  +
  +    /* Write result into the buffer. */
  +
  +    p = buffer;
  +    strcpy(p, "<uint32>");
  +    p += 8;
  +    for (j = i; j > 0; )
  +	{
  +	*p++ = buf[--j];
  +	}
  +    strcpy(p, "</uint32>");
   
  -    return rc;
  +    return 8 + 9 + i;
       }
  Index: ossp-pkg/srpc/libxds/xml-encode-uint64.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xml-encode-uint64.c
  --- ossp-pkg/srpc/libxds/xml-encode-uint64.c	2001/07/23 16:40:38	1.2
  +++ ossp-pkg/srpc/libxds/xml-encode-uint64.c	2001/07/24 13:52:41	1.3
  @@ -25,14 +25,16 @@
      SUCH DAMAGE.
   */
   
  -#include <stdio.h>
  +#include <string.h>
   #include <assert.h>
   #include "internal.h"
   
   int xml_encode_uint64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
       {
  -    int rc;
       xds_uint64_t value;
  +    char buf[64];
  +    size_t i, j;
  +    char* p;
   
       /* Consistency checks. */
   
  @@ -43,13 +45,33 @@
       if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
   	return XDS_ERR_INVALID_ARG;
   
  -    /* Format value into buffer. */
  +    /* Format value into our buffer. */
   
       value = va_arg(*args, xds_uint64_t);
  -    rc = snprintf(buffer, buffer_size, "<uint64>%llu</uint64>", value);
  -    if (rc < 0)
  -	return buffer_size*2;
  -    assert(rc >= 15);
  +    i = 0;
  +    do
  +	{
  +	unsigned char remainder = value % 10;
  +	value = value / 10;
  +	buf[i++] = '0' + remainder;
  +	}
  +    while (value != 0);
  +
  +    /* Check the buffer size. */
  +
  +    if (buffer_size < 8 + 9 + i)
  +	return 8 + 9 + i;
  +
  +    /* Write result into the buffer. */
  +
  +    p = buffer;
  +    strcpy(p, "<uint64>");
  +    p += 8;
  +    for (j = i; j > 0; )
  +	{
  +	*p++ = buf[--j];
  +	}
  +    strcpy(p, "</uint64>");
   
  -    return rc;
  +    return 8 + 9 + i;
       }

From ossp-cvs-owner@ossp.org  Tue Jul 24 16:23:18 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6OENHO96401; Tue, 24 Jul 2001 16:23:17 +0200 (CEST)
Date: Tue, 24 Jul 2001 16:23:17 +0200 (CEST)
Message-Id: <200107241423.f6OENHO96401@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests xdr-int32.c xdr-int6...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   24-Jul-2001 16:23:17
  Branch: HEAD                             Handle: 2001072415231600

  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            xdr-int32.c xdr-int64.c xml-int32.c xml-int64.c

  Log:
    The test values I used were too large to fit into a signed integer.
    Fixed that.

  Summary:
    Revision    Changes     Path
    1.5         +2  -2      ossp-pkg/srpc/libxds/regression-tests/xdr-int32.c
    1.5         +2  -2      ossp-pkg/srpc/libxds/regression-tests/xdr-int64.c
    1.2         +2  -2      ossp-pkg/srpc/libxds/regression-tests/xml-int32.c
    1.4         +2  -2      ossp-pkg/srpc/libxds/regression-tests/xml-int64.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/xdr-int32.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xdr-int32.c
  --- ossp-pkg/srpc/libxds/regression-tests/xdr-int32.c	2001/07/20 10:56:02	1.4
  +++ ossp-pkg/srpc/libxds/regression-tests/xdr-int32.c	2001/07/24 14:23:16	1.5
  @@ -46,8 +46,8 @@
   	 0x00000000,
   	 0x12345678,
   	-0x12345678,
  -	 0xabcdef01,
  -	-0xabcdef01,
  +	 0x7bcdef01,
  +	-0x7bcdef01,
   	 0x7fffffff
   	};
   
  Index: ossp-pkg/srpc/libxds/regression-tests/xdr-int64.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xdr-int64.c
  --- ossp-pkg/srpc/libxds/regression-tests/xdr-int64.c	2001/07/20 10:56:02	1.4
  +++ ossp-pkg/srpc/libxds/regression-tests/xdr-int64.c	2001/07/24 14:23:16	1.5
  @@ -46,8 +46,8 @@
   	 0x0000000000000000LL,
   	 0x123456789abcdef0LL,
   	-0x123456789abcdef0LL,
  -	 0xabcdef01cc45bb9aLL,
  -	-0xabcdef01cc45bb9aLL,
  +	 0x7bcdef01cc45bb9aLL,
  +	-0x7bcdef01cc45bb9aLL,
   	 0x7fffffffffffffffLL
   	};
   
  Index: ossp-pkg/srpc/libxds/regression-tests/xml-int32.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xml-int32.c
  --- ossp-pkg/srpc/libxds/regression-tests/xml-int32.c	2001/07/23 15:57:48	1.1
  +++ ossp-pkg/srpc/libxds/regression-tests/xml-int32.c	2001/07/24 14:23:16	1.2
  @@ -42,8 +42,8 @@
   	 0x00000000,
   	 0x12345678,
   	-0x12345678,
  -	 0xabcdef01,
  -	-0xabcdef01,
  +	 0x7bcdef01,
  +	-0x7bcdef01,
   	 0x7fffffff
   	};
   
  Index: ossp-pkg/srpc/libxds/regression-tests/xml-int64.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xml-int64.c
  --- ossp-pkg/srpc/libxds/regression-tests/xml-int64.c	2001/07/24 13:50:15	1.3
  +++ ossp-pkg/srpc/libxds/regression-tests/xml-int64.c	2001/07/24 14:23:16	1.4
  @@ -42,8 +42,8 @@
   	 0x0000000000000000LL,
   	 0x123456789abcdef0LL,
   	-0x123456789abcdef0LL,
  -	 0xabcdef01cc45bb9aLL,
  -	-0xabcdef01cc45bb9aLL,
  +	 0x7bcdef01cc45bb9aLL,
  +	-0x7bcdef01cc45bb9aLL,
   	 0x7fffffffffffffffLL
   	};
   

From ossp-cvs-owner@ossp.org  Tue Jul 24 16:55:58 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6OEtvs01047; Tue, 24 Jul 2001 16:55:57 +0200 (CEST)
Date: Tue, 24 Jul 2001 16:55:57 +0200 (CEST)
Message-Id: <200107241455.f6OEtvs01047@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile.in ossp-pkg/srpc/libxds/regr...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   24-Jul-2001 16:55:57
  Branch: HEAD                             Handle: 2001072415555600

  Modified files:
    ossp-pkg/srpc/libxds    Makefile.in
    ossp-pkg/srpc/libxds/regression-tests
                            Makefile.in

  Log:
    Removed rules for compiling C++ code: We don't have any.

  Summary:
    Revision    Changes     Path
    1.10        +0  -3      ossp-pkg/srpc/libxds/Makefile.in
    1.10        +0  -3      ossp-pkg/srpc/libxds/regression-tests/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile.in
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 Makefile.in
  --- ossp-pkg/srpc/libxds/Makefile.in	2001/07/23 16:33:03	1.9
  +++ ossp-pkg/srpc/libxds/Makefile.in	2001/07/24 14:55:56	1.10
  @@ -23,9 +23,6 @@
   .c.o:
   	$(CC) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CFLAGS) -c $<
   
  -.cpp.o:
  -	$(CXX) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CXXFLAGS) -c $<
  -
   all:	libxds.a xds.3
   
   libxds.a:	$(OBJS)
  Index: ossp-pkg/srpc/libxds/regression-tests/Makefile.in
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 Makefile.in
  --- ossp-pkg/srpc/libxds/regression-tests/Makefile.in	2001/07/23 16:33:04	1.9
  +++ ossp-pkg/srpc/libxds/regression-tests/Makefile.in	2001/07/24 14:55:56	1.10
  @@ -21,9 +21,6 @@
   .c.exe:
   	$(CC) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $< -lxds
   
  -.cpp.exe:
  -	$(CXX) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ $< -lxds
  -
   all:	$(TESTS)
   
   check:	all

From ossp-cvs-owner@ossp.org  Tue Jul 24 17:20:19 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6OFKIP04306; Tue, 24 Jul 2001 17:20:18 +0200 (CEST)
Date: Tue, 24 Jul 2001 17:20:18 +0200 (CEST)
Message-Id: <200107241520.f6OFKIP04306@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests xds-setbuffer.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   24-Jul-2001 17:20:18
  Branch: HEAD                             Handle: 2001072416201700

  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            xds-setbuffer.c

  Log:
    The test wanted to provoke reallocation of the buffer, but the buffer
    it provided was large enough to hold all data. Hence the test failed.
    I fixed this by providing a 32 byte buffer instead of a 64 byte one.

  Summary:
    Revision    Changes     Path
    1.3         +4  -4      ossp-pkg/srpc/libxds/regression-tests/xds-setbuffer.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/xds-setbuffer.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xds-setbuffer.c
  --- ossp-pkg/srpc/libxds/regression-tests/xds-setbuffer.c	2001/07/18 17:37:49	1.2
  +++ ossp-pkg/srpc/libxds/regression-tests/xds-setbuffer.c	2001/07/24 15:20:17	1.3
  @@ -64,16 +64,16 @@
   	return 1;
   	}
   
  -    /* Give the library a buffer of 64 byte, call the engine once, get
  +    /* Give the library a buffer of 32 byte, call the engine once, get
          the buffer back and see whether it has been enlarged or not. */
   
  -    buffer = malloc(64);
  +    buffer_size = 32;
  +    buffer = malloc(buffer_size);
       if (buffer == NULL)
   	{
   	printf("Failed to allocate my memory.\n");
   	return 1;
   	}
  -    buffer_size = 64;
       if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK)
   	{
   	printf("xds_setbuffer() failed!\n");
  @@ -89,7 +89,7 @@
   	printf("xds_getbuffer() failed!\n");
   	return 1;
   	}
  -    if (buffer_size == 64)
  +    if (buffer_size < 64)
   	{
   	printf("xds_encode() did not enlarge the buffer after processing the callback\n");
   	printf("even though all capacity was used up!\n");

From ossp-cvs-owner@ossp.org  Tue Jul 24 17:44:19 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6OFiIv07003; Tue, 24 Jul 2001 17:44:18 +0200 (CEST)
Date: Tue, 24 Jul 2001 17:44:18 +0200 (CEST)
Message-Id: <200107241544.f6OFiIv07003@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests xds-mystruct.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   24-Jul-2001 17:44:18
  Branch: HEAD                             Handle: 2001072416441800

  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            xds-mystruct.c

  Log:
    Comparing the new structure instance with the old one by memcmp() was
    bound to fail because on some architectures padding is inserted -- and
    those padding bytes didn't match even though the structure's values
    were identical. Thus we do now compare element by element.
    
    Furthermore, the encoding and decoding engines way of predicting the
    correct buffer size ("sizeof(struct mystruct)") failed also because it
    didn't take padding into account. Fixed that also.

  Summary:
    Revision    Changes     Path
    1.5         +30 -22     ossp-pkg/srpc/libxds/regression-tests/xds-mystruct.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/xds-mystruct.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xds-mystruct.c
  --- ossp-pkg/srpc/libxds/regression-tests/xds-mystruct.c	2001/07/23 15:33:43	1.4
  +++ ossp-pkg/srpc/libxds/regression-tests/xds-mystruct.c	2001/07/24 15:44:18	1.5
  @@ -47,17 +47,12 @@
       assert(buffer_size != 0);
       assert(args != NULL);
   
  -    if (buffer_size >= sizeof(struct mystruct))
  -	{
  -	ms = va_arg(*args, struct mystruct*);
  -	rc = xds_encode(xds, "int32 int64 uint32", ms->small, ms->big, ms->positive);
  -	if (rc != XDS_OK)
  -	    return rc;
  -	}
  +    ms = va_arg(*args, struct mystruct*);
  +    rc = xds_encode(xds, "int32 int64 uint32", ms->small, ms->big, ms->positive);
  +    if (rc == XDS_OK)
  +	return 0;
       else
  -	return sizeof(struct mystruct);
  -
  -    return 0;
  +	return rc;
       }
   
   static int decode_mystruct_engine(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  @@ -70,17 +65,12 @@
       assert(buffer_size != 0);
       assert(args != NULL);
   
  -    if (buffer_size >= sizeof(struct mystruct))
  -	{
  -	ms = va_arg(*args, struct mystruct*);
  -	rc = xds_decode(xds, "int32 int64 uint32", &(ms->small), &(ms->big), &(ms->positive));
  -	if (rc != XDS_OK)
  -	    return rc;
  -	}
  +    ms = va_arg(*args, struct mystruct*);
  +    rc = xds_decode(xds, "int32 int64 uint32", &(ms->small), &(ms->big), &(ms->positive));
  +    if (rc == XDS_OK)
  +	return 0;
       else
  -	return XDS_ERR_UNDERFLOW;
  -
  -    return 0;
  +	return rc;
       }
   
   int main()
  @@ -111,17 +101,35 @@
   	printf("Failed to register my encoding engines.\n");
   	return 1;
   	}
  +    buffer_size = 4;
  +    buffer = malloc(buffer_size);
  +    if (buffer == NULL)
  +	{
  +	printf("Failed to allocate memory for buffer.\n");
  +	return 1;
  +	}
  +    if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK)
  +	{
  +	printf("xds_setbuffer() failed!\n");
  +	return 1;
  +	}
       if (xds_encode(xds, "mystruct", &ms) != XDS_OK)
   	{
   	printf("xds_encode() failed!\n");
   	return 1;
   	}
  +    if (xds->buffer_capacity <= buffer_size)
  +	{
  +	printf("Buffer should have been enlarged after xds_encode()!\n");
  +	return 1;
  +	}
       if (xds_getbuffer(xds, XDS_GIFT, (void**)&buffer, &buffer_size) != XDS_OK)
   	{
  -	printf("xds_setbuffer() failed!\n");
  +	printf("xds_getbuffer() failed!\n");
   	return 1;
   	}
       xds_destroy(xds);
  +    printf("The encoded representation is %u bytes long.\n", buffer_size);
   
       /* Now create a decoding context and decode the whole thing again. */
   
  @@ -153,7 +161,7 @@
   
       /* Both structures must be identical. */
   
  -    if (memcmp(&ms, &new_ms, sizeof(struct mystruct)) != 0)
  +    if (ms.small != new_ms.small || ms.big != new_ms.big || ms.positive != new_ms.positive)
   	{
   	printf("Decoded data does not match the original!\n");
   	return 1;

From ossp-cvs-owner@ossp.org  Tue Jul 24 17:46:20 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6OFkJp07387; Tue, 24 Jul 2001 17:46:19 +0200 (CEST)
Date: Tue, 24 Jul 2001 17:46:19 +0200 (CEST)
Message-Id: <200107241546.f6OFkJp07387@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds vdecode.c vencode.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   24-Jul-2001 17:46:19
  Branch: HEAD                             Handle: 2001072416461800

  Modified files:
    ossp-pkg/srpc/libxds    vdecode.c vencode.c

  Log:
    xds_encode() and xds_decode() had two problems:
    
    - In case any of the callbacks returns with an error, the original
      xds->buffer_len value must be restored or the buffer is messed up
      with values from successful callback executions. The routines
      wouldn't be atomic in that case.
    
    - If an encoding callback uses up all buffer space but formatted the
      value successfully nonetheless, the xds->buffer_len wasn't
      incremented.
    
    Both problems have been fixed.

  Summary:
    Revision    Changes     Path
    1.4         +4  -0      ossp-pkg/srpc/libxds/vdecode.c
    1.11        +7  -0      ossp-pkg/srpc/libxds/vencode.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/vdecode.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 vdecode.c
  --- ossp-pkg/srpc/libxds/vdecode.c	2001/07/16 17:50:07	1.3
  +++ ossp-pkg/srpc/libxds/vdecode.c	2001/07/24 15:46:18	1.4
  @@ -32,6 +32,7 @@
   
   int xds_vdecode(xds_t* xds, const char* fmt_arg, va_list args)
       {
  +    size_t buffer_len_backup;
       char* name;
       char* p;
       char* fmt;
  @@ -58,6 +59,7 @@
       fmt = p = strdup(fmt_arg);
       if (fmt == NULL)
   	return XDS_ERR_NO_MEM;
  +    buffer_len_backup = xds->buffer_len;
       for(name = p; *p != '\0'; name = p)
   	{
   	while(isalnum(*p) || *p == '-' || *p == '_')
  @@ -94,5 +96,7 @@
       /* Clean up and leave. */
     leave:
       free(fmt);
  +    if (rc != XDS_OK)
  +	xds->buffer_len = buffer_len_backup;
       return rc;
       }
  Index: ossp-pkg/srpc/libxds/vencode.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 vencode.c
  --- ossp-pkg/srpc/libxds/vencode.c	2001/07/19 15:21:35	1.10
  +++ ossp-pkg/srpc/libxds/vencode.c	2001/07/24 15:46:18	1.11
  @@ -33,6 +33,7 @@
   int xds_vencode(xds_t* xds, const char* fmt_arg, va_list args)
       {
       va_list args_backup;
  +    size_t buffer_len_backup;
       char* name;
       char* p;
       char* fmt;
  @@ -90,6 +91,7 @@
       fmt = p = strdup(fmt_arg);
       if (fmt == NULL)
   	return XDS_ERR_NO_MEM;
  +    buffer_len_backup = xds->buffer_len;
       for(name = p; *p != '\0'; name = p)
   	{
   	while(isalnum(*p) || *p == '-' || *p == '_')
  @@ -125,7 +127,10 @@
   			    args = args_backup;
   			    }
   			else
  +			    {
   			    restart_engine = XDS_FALSE;
  +			    xds->buffer_len += rc;
  +			    }
   
   			if (!xds->we_own_buffer)
   			    {
  @@ -165,5 +170,7 @@
       /* Clean up and leave. */
     leave:
       free(fmt);
  +    if (rc != XDS_OK)
  +	xds->buffer_len = buffer_len_backup;
       return rc;
       }

From ossp-cvs-owner@ossp.org  Sun Jul 29 18:50:55 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6TGor629313; Sun, 29 Jul 2001 18:50:53 +0200 (CEST)
Date: Sun, 29 Jul 2001 18:50:53 +0200 (CEST)
Message-Id: <200107291650.f6TGor629313@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   29-Jul-2001 18:50:53
  Branch: HEAD                             Handle: 2001072917505300

  Modified files:
    ossp-pkg/srpc           TODO

  Log:
    It is clear that we unfortunately no longer have a chance to meet the
    arranged date of beginning of September for XDS/AMP. Shift the deadline
    by two weeks now. One additional week because of XDS plus one week in
    advance for AMP.

  Summary:
    Revision    Changes     Path
    1.8         +6  -5      ossp-pkg/srpc/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/TODO
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 TODO
  --- ossp-pkg/srpc/TODO	2001/07/24 12:16:32	1.7
  +++ ossp-pkg/srpc/TODO	2001/07/29 16:50:53	1.8
  @@ -16,7 +16,7 @@
     - design libxds API
       done: 100% [-> libxds/xds.h + libxds/xds.pod]
   
  -o M4 (peti) [3 weeks until 23-Jul-2001]
  +o M4 (peti) [4 weeks until 30-Jul-2001]
     - implementation of libxds library framework
       done: 100% [-> libxds/*.c]
     - implementation of libxds SunRPC/XDR and XML-RPC backends
  @@ -76,18 +76,19 @@
    - autoconf should specify the compiler flags depending on what the
      compiler supports.
   
  -o M5 (peti+rse) [1 week until 30-Jul-2001]
  +o M5 (peti+rse) [1 week until 06-Aug-2001]
     - [peti] documentation for libxds (xds.pod)
     - [rse]  OSSP adjustments for libxds
   
  -o M6 (peti+rse) [1 week until 06-Aug-2001]
  +o M6 (peti+rse) [1 week until 13-Aug-2001]
     - design API for libamp
   
  -o M7 (peti) [3 week until 27-Aug-2001]
  +o M7 (peti) [4 weeks until 10-Sep-2001]
     - implementation of libamp library framework
     - implementation of libamp backends SHM, TCP and UDP
     - regression tests for libamp
   
  -o M8 (peti+rse) [1 week until 03-Sep-2001]
  +o M8 (peti+rse) [1 week until 17-Sep-2001]
     - [peti] documentation for libamp
     - [rse]  OSSP adjustments for libamp
  +

From ossp-cvs-owner@ossp.org  Mon Jul 30 10:58:48 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6U8wlh45982; Mon, 30 Jul 2001 10:58:47 +0200 (CEST)
Date: Mon, 30 Jul 2001 10:58:47 +0200 (CEST)
Message-Id: <200107300858.f6U8wlh45982@ossp.org>
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   OSSP Project Master
  Root:   /e/ossp/cvs                      Email:  ossp@ossp.org
  Module: CVSROOT                          Date:   30-Jul-2001 10:58:47
  Branch: HEAD                             Handle: 2001073009584600

  Modified files:
    CVSROOT                 modules

  Log:
    add xds

  Summary:
    Revision    Changes     Path
    1.26        +2  -0      CVSROOT/modules
  ____________________________________________________________________________

  Index: CVSROOT/modules
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 modules
  --- CVSROOT/modules	2001/06/12 13:45:34	1.25
  +++ CVSROOT/modules	2001/07/30 08:58:46	1.26
  @@ -74,4 +74,6 @@
   sugar           ossp-pkg/sugar
   l2              ossp-pkg/l2
   srpc            ossp-pkg/srpc
  +xds             ossp-pkg/srpc/libxds
  +
   

From ossp-cvs-owner@ossp.org  Tue Jul 31 08:33:57 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6V6XtM09594; Tue, 31 Jul 2001 08:33:55 +0200 (CEST)
Date: Tue, 31 Jul 2001 08:33:55 +0200 (CEST)
Message-Id: <200107310633.f6V6XtM09594@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds destroy.c setbuffer.c vencode.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   31-Jul-2001 08:33:55
  Branch: HEAD                             Handle: 2001073107335500

  Modified files:
    ossp-pkg/srpc/libxds    destroy.c setbuffer.c vencode.c

  Log:
    Fixed three bugs revealed by RSE's review of the code.

  Summary:
    Revision    Changes     Path
    1.7         +8  -0      ossp-pkg/srpc/libxds/destroy.c
    1.6         +1  -1      ossp-pkg/srpc/libxds/setbuffer.c
    1.12        +1  -1      ossp-pkg/srpc/libxds/vencode.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/destroy.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 destroy.c
  --- ossp-pkg/srpc/libxds/destroy.c	2001/07/09 17:18:20	1.6
  +++ ossp-pkg/srpc/libxds/destroy.c	2001/07/31 06:33:55	1.7
  @@ -45,7 +45,15 @@
   
       assert(xds->engines != NULL || xds->engines_capacity == 0);
       if (xds->engines != NULL)
  +	{
  +        size_t i;
  +        for (i = 0; i < xds->engines_len; ++i)
  +	    {
  +	    assert(xds->engines[i].name != NULL);
  +	    free(xds->engines[i].name);
  +	    }
   	free(xds->engines);
  +	}
   
       free(xds);
       }
  Index: ossp-pkg/srpc/libxds/setbuffer.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 setbuffer.c
  --- ossp-pkg/srpc/libxds/setbuffer.c	2001/07/18 17:49:51	1.5
  +++ ossp-pkg/srpc/libxds/setbuffer.c	2001/07/31 06:33:55	1.6
  @@ -41,7 +41,7 @@
   
       /* Free the old buffer if there is one. */
   
  -    if (xds->buffer != NULL)
  +    if (xds->buffer != NULL && xds->we_own_buffer)
   	free(xds->buffer);
       xds->buffer_len = 0;
   
  Index: ossp-pkg/srpc/libxds/vencode.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 vencode.c
  --- ossp-pkg/srpc/libxds/vencode.c	2001/07/24 15:46:18	1.11
  +++ ossp-pkg/srpc/libxds/vencode.c	2001/07/31 06:33:55	1.12
  @@ -62,7 +62,7 @@
   	if (rc != XDS_OK)
   	    return rc;
   	xds->buffer_len    = 0;
  -	xds->we_own_buffer = XDS_FALSE;
  +	xds->we_own_buffer = XDS_TRUE;
   	}
   
       /* Ensure the buffer has free space. */

From ossp-cvs-owner@ossp.org  Tue Jul 31 17:10:10 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6VFA8m72623; Tue, 31 Jul 2001 17:10:08 +0200 (CEST)
Date: Tue, 31 Jul 2001 17:10:08 +0200 (CEST)
Message-Id: <200107311510.f6VFA8m72623@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   31-Jul-2001 17:10:08
  Branch: HEAD                             Handle: 2001073116100700

  Modified files:
    ossp-pkg/srpc           TODO

  Log:
    Documented a bug that needs to be fixed ASAP.

  Summary:
    Revision    Changes     Path
    1.9         +4  -1      ossp-pkg/srpc/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/TODO
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 TODO
  --- ossp-pkg/srpc/TODO	2001/07/29 16:50:53	1.8
  +++ ossp-pkg/srpc/TODO	2001/07/31 15:10:07	1.9
  @@ -62,7 +62,10 @@
               &   <--> &amp;
               ]]> <--> ]]&gt;
   
  -
  + - strcpy() copies one byte more than the length of the text itself
  +   because the trailing \0 is written to. Currently, this behavior is
  +   not taken into account when calculating the correct buffer size in
  +   the xml-encode-*-.c modules. This has to be fixed!
   
     - libm may be used. We don't depend on sprintf() but convert out
       numbers ourselves for portability.

From ossp-cvs-owner@ossp.org  Tue Jul 31 17:26:23 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6VFQM074482; Tue, 31 Jul 2001 17:26:22 +0200 (CEST)
Date: Tue, 31 Jul 2001 17:26:22 +0200 (CEST)
Message-Id: <200107311526.f6VFQM074482@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests xml-int32.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   31-Jul-2001 17:26:22
  Branch: HEAD                             Handle: 2001073116262100

  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            xml-int32.c

  Log:
    Changed test case to use xml_(en|de)code_(begin|end).

  Summary:
    Revision    Changes     Path
    1.3         +26 -2      ossp-pkg/srpc/libxds/regression-tests/xml-int32.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/xml-int32.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xml-int32.c
  --- ossp-pkg/srpc/libxds/regression-tests/xml-int32.c	2001/07/24 14:23:16	1.2
  +++ ossp-pkg/srpc/libxds/regression-tests/xml-int32.c	2001/07/31 15:26:21	1.3
  @@ -58,11 +58,18 @@
   	printf("Failed to initialize XDS context.\n");
   	return 1;
   	}
  -    if (xds_register(xds, "int", &xml_encode_int32, NULL) != XDS_OK)
  +    if (xds_register(xds, "begin", &xml_encode_begin, NULL) != XDS_OK ||
  +	xds_register(xds, "end", &xml_encode_end, NULL) != XDS_OK ||
  +	xds_register(xds, "int", &xml_encode_int32, NULL) != XDS_OK)
   	{
   	printf("Failed to register my encoding engines.\n");
   	return 1;
   	}
  +    if (xds_encode(xds, "begin") != XDS_OK)
  +	{
  +	printf("xds_encode_begin() failed!\n");
  +	return 1;
  +	}
       for (i = 0; i < sizeof(values)/sizeof(xds_int32_t); ++i)
   	{
   	if (xds_encode(xds, "int", values[i]) != XDS_OK)
  @@ -71,6 +78,11 @@
   	    return 1;
   	    }
   	}
  +    if (xds_encode(xds, "end") != XDS_OK)
  +	{
  +	printf("xds_encode_end() failed!\n");
  +	return 1;
  +	}
       if (xds_getbuffer(xds, XDS_GIFT, (void**)&buffer, &buffer_size) != XDS_OK)
   	{
   	printf("getbuffer() failed.\n");
  @@ -84,7 +96,9 @@
   	printf("Failed to initialize XDS context.\n");
   	return 1;
   	}
  -    if (xds_register(xds, "int", &xml_decode_int32, NULL) != XDS_OK)
  +    if (xds_register(xds, "begin", &xml_decode_begin, NULL) != XDS_OK ||
  +	xds_register(xds, "end", &xml_decode_end, NULL) != XDS_OK ||
  +	xds_register(xds, "int", &xml_decode_int32, NULL) != XDS_OK)
   	{
   	printf("Failed to register my decoding engines.\n");
   	return 1;
  @@ -94,6 +108,11 @@
   	printf("setbuffer() failed.\n");
   	return 1;
   	}
  +    if (xds_decode(xds, "begin") != XDS_OK)
  +	{
  +	printf("xds_decode_begin() failed!\n");
  +	return 1;
  +	}
       for (i = 0; i < sizeof(values)/sizeof(xds_int32_t); ++i)
   	{
   	xds_int32_t val;
  @@ -107,6 +126,11 @@
   	    printf("Decoded value (%d) does not match the original value (%d)!\n", val, values[i]);
   	    return 1;
   	    }
  +	}
  +    if (xds_decode(xds, "end") != XDS_OK)
  +	{
  +	printf("xds_decode_end() failed!\n");
  +	return 1;
   	}
       xds_destroy(xds);
   

From ossp-cvs-owner@ossp.org  Tue Jul 31 17:27:46 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6VFRkU74628; Tue, 31 Jul 2001 17:27:46 +0200 (CEST)
Date: Tue, 31 Jul 2001 17:27:46 +0200 (CEST)
Message-Id: <200107311527.f6VFRkU74628@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile.in internal.h xds.h.in xml-d...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   31-Jul-2001 17:27:46
  Branch: HEAD                             Handle: 2001073116274500

  Added files:
    ossp-pkg/srpc/libxds    xml-decode-begin.c xml-encode-begin.c
  Modified files:
    ossp-pkg/srpc/libxds    Makefile.in internal.h xds.h.in

  Log:
    Implemented xml_encode_begin(), xml_decode_begin(), xml_encode_end(),
    and xml_decode_end().

  Summary:
    Revision    Changes     Path
    1.11        +3  -1      ossp-pkg/srpc/libxds/Makefile.in
    1.7         +3  -0      ossp-pkg/srpc/libxds/internal.h
    1.6         +5  -0      ossp-pkg/srpc/libxds/xds.h.in
    1.1         +50 -0      ossp-pkg/srpc/libxds/xml-decode-begin.c
    1.1         +52 -0      ossp-pkg/srpc/libxds/xml-encode-begin.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile.in
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 Makefile.in
  --- ossp-pkg/srpc/libxds/Makefile.in	2001/07/24 14:55:56	1.10
  +++ ossp-pkg/srpc/libxds/Makefile.in	2001/07/31 15:27:45	1.11
  @@ -18,7 +18,9 @@
   		  xdr-decode-double.o xml-encode-int32.o xml-decode-int32.o \
   		  xml-decode-int64.o xml-decode-uint32.o xml-decode-uint64.o \
   		  xml-encode-int64.o xml-encode-uint32.o xml-encode-uint64.o \
  -		  xml-encode-double.o xml-decode-double.o
  +		  xml-encode-double.o xml-decode-double.o \
  +		  xml-encode-begin.o xml-decode-begin.o \
  +		  xml-encode-end.o xml-decode-end.o
   
   .c.o:
   	$(CC) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CFLAGS) -c $<
  Index: ossp-pkg/srpc/libxds/internal.h
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 internal.h
  --- ossp-pkg/srpc/libxds/internal.h	2001/07/18 17:49:51	1.6
  +++ ossp-pkg/srpc/libxds/internal.h	2001/07/31 15:27:45	1.7
  @@ -63,4 +63,7 @@
   int xds_find_engine(const engine_map_t* engines, size_t last, const char* name, size_t* pos);
   int xds_set_capacity(void** array, size_t* array_capacity, size_t new_capacity, size_t elem_size, size_t initial_capacity);
   
  +extern const char xds_xml_begin_text[];
  +extern const char xds_xml_end_text[];
  +
   #endif /* !defined(__INTERNAL_H__) */
  Index: ossp-pkg/srpc/libxds/xds.h.in
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 xds.h.in
  --- ossp-pkg/srpc/libxds/xds.h.in	2001/07/23 16:33:03	1.5
  +++ ossp-pkg/srpc/libxds/xds.h.in	2001/07/31 15:27:45	1.6
  @@ -116,4 +116,9 @@
   int xml_encode_double(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
   int xml_decode_double(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
   
  +int xml_encode_begin(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  +int xml_decode_begin(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  +int xml_encode_end(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  +int xml_decode_end(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  +
   #endif /* !defined(__LIBXDS_H__) */
  Index: ossp-pkg/srpc/libxds/xml-decode-begin.c
  ============================================================
  $ cvs update -p -r1.1 xml-decode-begin.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <string.h>
  #include <assert.h>
  #include "internal.h"
  
  int xml_decode_begin(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
      {
      /* Consistency checks. */
  
      assert(xds != NULL);
      assert(buffer != NULL);
      assert(buffer_size != 0);
      assert(args != NULL);
      if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  	return XDS_ERR_INVALID_ARG;
  
      if (buffer_size < strlen(xds_xml_begin_text))
  	return XDS_ERR_UNDERFLOW;
  
      if (strncasecmp(buffer, xds_xml_begin_text, strlen(xds_xml_begin_text)) != 0)
  	return XDS_ERR_TYPE_MISMATCH;
  
      return strlen(xds_xml_begin_text);
      }
  Index: ossp-pkg/srpc/libxds/xml-encode-begin.c
  ============================================================
  $ cvs update -p -r1.1 xml-encode-begin.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <string.h>
  #include <assert.h>
  #include "internal.h"
  
  const char xds_xml_begin_text[] = \
      "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\">\n" \
      "<!DOCTYPE xds SYSTEM \"http://www.ossp.org/pkg/xds/xds-xml.dtd\">\n" \
      "<xds>\n";
  
  int xml_encode_begin(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
      {
      /* Consistency checks. */
  
      assert(xds != NULL);
      assert(buffer != NULL);
      assert(buffer_size != 0);
      assert(args != NULL);
      if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  	return XDS_ERR_INVALID_ARG;
  
      if (buffer_size >= strlen(xds_xml_begin_text))
  	memmove(buffer, xds_xml_begin_text, strlen(xds_xml_begin_text));
  
      return strlen(xds_xml_begin_text);
      }

From ossp-cvs-owner@ossp.org  Tue Jul 31 17:28:16 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6VFSE174698; Tue, 31 Jul 2001 17:28:14 +0200 (CEST)
Date: Tue, 31 Jul 2001 17:28:14 +0200 (CEST)
Message-Id: <200107311528.f6VFSE174698@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xml-decode-end.c xml-encode-end.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   31-Jul-2001 17:28:14
  Branch: HEAD                             Handle: 2001073116281400

  Added files:
    ossp-pkg/srpc/libxds    xml-decode-end.c xml-encode-end.c

  Log:
    Implemented xml_encode_begin(), xml_decode_begin(), xml_encode_end(),
    and xml_decode_end().

  Summary:
    Revision    Changes     Path
    1.1         +50 -0      ossp-pkg/srpc/libxds/xml-decode-end.c
    1.1         +49 -0      ossp-pkg/srpc/libxds/xml-encode-end.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xml-decode-end.c
  ============================================================
  $ cvs update -p -r1.1 xml-decode-end.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <string.h>
  #include <assert.h>
  #include "internal.h"
  
  int xml_decode_end(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
      {
      /* Consistency checks. */
  
      assert(xds != NULL);
      assert(buffer != NULL);
      assert(buffer_size != 0);
      assert(args != NULL);
      if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  	return XDS_ERR_INVALID_ARG;
  
      if (buffer_size < strlen(xds_xml_end_text))
  	return XDS_ERR_UNDERFLOW;
  
      if (strncasecmp(buffer, xds_xml_end_text, strlen(xds_xml_end_text)) != 0)
  	return XDS_ERR_TYPE_MISMATCH;
  
      return strlen(xds_xml_end_text);
      }
  Index: ossp-pkg/srpc/libxds/xml-encode-end.c
  ============================================================
  $ cvs update -p -r1.1 xml-encode-end.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <string.h>
  #include <assert.h>
  #include "internal.h"
  
  const char xds_xml_end_text[] = "</xds>\n";
  
  int xml_encode_end(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
      {
      /* Consistency checks. */
  
      assert(xds != NULL);
      assert(buffer != NULL);
      assert(buffer_size != 0);
      assert(args != NULL);
      if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  	return XDS_ERR_INVALID_ARG;
  
      if (buffer_size >= strlen(xds_xml_end_text))
  	memmove(buffer, xds_xml_end_text, strlen(xds_xml_end_text));
  
      return strlen(xds_xml_end_text);
      }

From ossp-cvs-owner@ossp.org  Tue Jul 31 17:34:08 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6VFY7d75586; Tue, 31 Jul 2001 17:34:07 +0200 (CEST)
Date: Tue, 31 Jul 2001 17:34:07 +0200 (CEST)
Message-Id: <200107311534.f6VFY7d75586@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   31-Jul-2001 17:34:07
  Branch: HEAD                             Handle: 2001073116340600

  Modified files:
    ossp-pkg/srpc           TODO

  Log:
    Removed the C++ prototype item from the TODO list: We decided against
    a C++-specific interface.

  Summary:
    Revision    Changes     Path
    1.10        +0  -2      ossp-pkg/srpc/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/TODO
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 TODO
  --- ossp-pkg/srpc/TODO	2001/07/31 15:10:07	1.9
  +++ ossp-pkg/srpc/TODO	2001/07/31 15:34:06	1.10
  @@ -4,8 +4,6 @@
   o M1 (peti) [11-Jun-2001]
     - evaluation checklist for XDS and AMP
       done: 50% [-> EVAL]
  -  - prototype C++
  -    done: 0%
   
   o M2 (peti+rse) [25-Jun-2001]
     - design/architecture paper (authentication+encryption framework)

From ossp-cvs-owner@ossp.org  Tue Jul 31 17:45:15 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6VFjFs76820; Tue, 31 Jul 2001 17:45:15 +0200 (CEST)
Date: Tue, 31 Jul 2001 17:45:15 +0200 (CEST)
Message-Id: <200107311545.f6VFjFs76820@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   31-Jul-2001 17:45:15
  Branch: HEAD                             Handle: 2001073116451400

  Modified files:
    ossp-pkg/srpc           TODO

  Log:
    Documented problem with 16-bit integers when passed through "...".

  Summary:
    Revision    Changes     Path
    1.11        +9  -0      ossp-pkg/srpc/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/TODO
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 TODO
  --- ossp-pkg/srpc/TODO	2001/07/31 15:34:06	1.10
  +++ ossp-pkg/srpc/TODO	2001/07/31 15:45:14	1.11
  @@ -44,6 +44,15 @@
                                [u]string,octets}
     - regression tests for libxds (make check)
   
  + - 16bit Integers mean trouble when passing them through "...":
  +
  +     | xdr-encode-uint16.c:46: `xds_uint16_t' is promoted to `int' when passed through `...'
  +     | xdr-encode-uint16.c:46: (so you should pass `int' not `xds_uint16_t' to `va_arg')
  +
  +   Maybe we should skip int16 support at all? Currently I work around
  +   this problem by implicitely assuming that the short is promoted to
  +   an int.
  +
     - XML: <int32>1234</int32>
            uint32, int64, uint64,
   

From ossp-cvs-owner@ossp.org  Tue Jul 31 18:03:02 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f6VG32R79097; Tue, 31 Jul 2001 18:03:02 +0200 (CEST)
Date: Tue, 31 Jul 2001 18:03:02 +0200 (CEST)
Message-Id: <200107311603.f6VG32R79097@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   31-Jul-2001 18:03:02
  Branch: HEAD                             Handle: 2001073117030100

  Modified files:
    ossp-pkg/srpc           TODO

  Log:
    Things are even worse with 16-bit integers.

  Summary:
    Revision    Changes     Path
    1.12        +4  -0      ossp-pkg/srpc/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/TODO
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 TODO
  --- ossp-pkg/srpc/TODO	2001/07/31 15:45:14	1.11
  +++ ossp-pkg/srpc/TODO	2001/07/31 16:03:01	1.12
  @@ -53,6 +53,10 @@
      this problem by implicitely assuming that the short is promoted to
      an int.
   
  +   To make matters even worse: The RFC doesn't even define how XDR
  +   deals with 16-bit integers! The mere existance of such a datatype
  +   is not positively confirmed.
  +
     - XML: <int32>1234</int32>
            uint32, int64, uint64,
   

From ossp-cvs-owner@ossp.org  Wed Aug  1 11:22:51 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f719Mok10846; Wed, 1 Aug 2001 11:22:50 +0200 (CEST)
Date: Wed, 1 Aug 2001 11:22:50 +0200 (CEST)
Message-Id: <200108010922.f719Mok10846@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds init.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   01-Aug-2001 11:22:50
  Branch: HEAD                             Handle: 2001080110225000

  Modified files:
    ossp-pkg/srpc/libxds    init.c

  Log:
    Initialize the elements of xds_context explicitely rather than relying
    on calloc(). This increases chances of portability.

  Summary:
    Revision    Changes     Path
    1.5         +15 -2      ossp-pkg/srpc/libxds/init.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/init.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 init.c
  --- ossp-pkg/srpc/libxds/init.c	2001/07/08 15:22:00	1.4
  +++ ossp-pkg/srpc/libxds/init.c	2001/08/01 09:22:50	1.5
  @@ -45,7 +45,7 @@
   
       /* Allocate context structure. */
   
  -    ctx = calloc(1, sizeof(struct xds_context));
  +    ctx = malloc(sizeof(struct xds_context));
       if (ctx == NULL)
   	return NULL;		/* errno is set by calloc() */
   
  @@ -53,7 +53,20 @@
   
       ctx->mode = mode;
   
  -    /* We are initialized. */
  +    /* Initialize buffer handling. */
  +
  +    ctx->buffer = NULL;
  +    ctx->buffer_len = 0;
  +    ctx->buffer_capacity = 0;
  +    ctx->we_own_buffer = XDS_FALSE;
  +
  +    /* Initialize engines map. */
  +
  +    ctx->engines = NULL;
  +    ctx->engines_len = 0;
  +    ctx->engines_capacity = 0;
  +
  +    /* Done. */
   
       return ctx;
       }

From ossp-cvs-owner@ossp.org  Wed Aug  1 17:25:52 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f71FPp058085; Wed, 1 Aug 2001 17:25:51 +0200 (CEST)
Date: Wed, 1 Aug 2001 17:25:51 +0200 (CEST)
Message-Id: <200108011525.f71FPp058085@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile.in destroy.c find-engine.c g...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   01-Aug-2001 17:25:51
  Branch: HEAD                             Handle: 2001080116254703

  Modified files:
    ossp-pkg/srpc/libxds    Makefile.in destroy.c find-engine.c getbuffer.c
                            init.c internal.h register.c set-capacity.c
                            setbuffer.c unregister.c vdecode.c vencode.c
                            xdr-decode-double.c xdr-decode-int32.c
                            xdr-decode-int64.c xdr-decode-octetstream.c
                            xdr-decode-string.c xdr-decode-uint32.c
                            xdr-decode-uint64.c xdr-encode-double.c
                            xdr-encode-int32.c xdr-encode-int64.c
                            xdr-encode-octetstream.c xdr-encode-string.c
                            xdr-encode-uint32.c xdr-encode-uint64.c xds.h.in
                            xml-decode-begin.c xml-decode-double.c
                            xml-decode-end.c xml-decode-int32.c
                            xml-decode-int64.c xml-decode-uint32.c
                            xml-decode-uint64.c xml-encode-begin.c
                            xml-encode-double.c xml-encode-end.c
                            xml-encode-int32.c xml-encode-int64.c
                            xml-encode-uint32.c xml-encode-uint64.c
    ossp-pkg/srpc/libxds/regression-tests
                            Makefile.in xdr-octetstream-empty.c
                            xdr-octetstream.c xdr-string-empty.c xdr-string.c
                            xds-decode.c xds-encode.c xds-engine-restart.c
                            xds-getbuffer.c xds-mystruct.c xds-register.c
                            xds-setbuffer.c

  Log:
    Merged the whole contents of branch "callback-semantic-rewrite" into
    the main branch. The changes there include:
    
     - A change of the callback semantics; callbacks do now return
       XDS_ERR_(UNDER|OVER)FLOW in case the buffer size doesn't fit.
       Rather than passing the differing byte size through the return
       code, it is stored in the location used_buffer_size points to -- a
       new parameter provided to all callbacks.
    
       In order to implement this, the framework, all callbacks and most
       of the test suits had to be adapted.
    
     - internal.h now provides the macro xds_check_parameter(), which can
       be used to verify the contents of function parameters with assert()
       and if in one line. If assert()s are deactivated, the routine will
       still return XDS_ERR_INVALID_ARG.
    
       Because of this change, internal.h now includes the system header
       assert.h. This means that this include coulde be removed from
       almost all modules.
    
     - internal.h now provides the macros xds_init_(en|de)coding_engine().
       These can be used to comfortably verify a callback's parameters and
       to verify the buffer size. All engines have been rewritten to use
       these.

  Summary:
    Revision    Changes     Path
    1.12        +17 -11     ossp-pkg/srpc/libxds/Makefile.in
    1.8         +0  -1      ossp-pkg/srpc/libxds/destroy.c
    1.4         +3  -4      ossp-pkg/srpc/libxds/find-engine.c
    1.3         +4  -7      ossp-pkg/srpc/libxds/getbuffer.c
    1.6         +0  -1      ossp-pkg/srpc/libxds/init.c
    1.8         +35 -0      ossp-pkg/srpc/libxds/internal.h
    1.7         +3  -6      ossp-pkg/srpc/libxds/register.c
    1.11        +2  -2      ossp-pkg/srpc/libxds/regression-tests/Makefile.in
    1.2         +1  -1      ossp-pkg/srpc/libxds/regression-tests/xdr-octetstream-empty.c
    1.2         +1  -1      ossp-pkg/srpc/libxds/regression-tests/xdr-octetstream.c
    1.3         +1  -1      ossp-pkg/srpc/libxds/regression-tests/xdr-string-empty.c
    1.3         +1  -1      ossp-pkg/srpc/libxds/regression-tests/xdr-string.c
    1.4         +16 -3      ossp-pkg/srpc/libxds/regression-tests/xds-decode.c
    1.6         +16 -6      ossp-pkg/srpc/libxds/regression-tests/xds-encode.c
    1.2         +13 -2      ossp-pkg/srpc/libxds/regression-tests/xds-engine-restart.c
    1.5         +14 -7      ossp-pkg/srpc/libxds/regression-tests/xds-getbuffer.c
    1.6         +10 -15     ossp-pkg/srpc/libxds/regression-tests/xds-mystruct.c
    1.7         +3  -2      ossp-pkg/srpc/libxds/regression-tests/xds-register.c
    1.4         +10 -5      ossp-pkg/srpc/libxds/regression-tests/xds-setbuffer.c
    1.4         +4  -5      ossp-pkg/srpc/libxds/set-capacity.c
    1.7         +3  -7      ossp-pkg/srpc/libxds/setbuffer.c
    1.5         +2  -5      ossp-pkg/srpc/libxds/unregister.c
    1.5         +8  -8      ossp-pkg/srpc/libxds/vdecode.c
    1.13        +64 -75     ossp-pkg/srpc/libxds/vencode.c
    1.2         +3  -1      ossp-pkg/srpc/libxds/xdr-decode-double.c
    1.4         +6  -13     ossp-pkg/srpc/libxds/xdr-decode-int32.c
    1.4         +6  -13     ossp-pkg/srpc/libxds/xdr-decode-int64.c
    1.4         +13 -25     ossp-pkg/srpc/libxds/xdr-decode-octetstream.c
    1.5         +13 -25     ossp-pkg/srpc/libxds/xdr-decode-string.c
    1.4         +6  -13     ossp-pkg/srpc/libxds/xdr-decode-uint32.c
    1.4         +6  -13     ossp-pkg/srpc/libxds/xdr-decode-uint64.c
    1.2         +3  -1      ossp-pkg/srpc/libxds/xdr-encode-double.c
    1.4         +17 -24     ossp-pkg/srpc/libxds/xdr-encode-int32.c
    1.4         +21 -28     ossp-pkg/srpc/libxds/xdr-encode-int64.c
    1.5         +19 -21     ossp-pkg/srpc/libxds/xdr-encode-octetstream.c
    1.6         +19 -21     ossp-pkg/srpc/libxds/xdr-encode-string.c
    1.4         +11 -18     ossp-pkg/srpc/libxds/xdr-encode-uint32.c
    1.4         +15 -22     ossp-pkg/srpc/libxds/xdr-encode-uint64.c
    1.7         +42 -43     ossp-pkg/srpc/libxds/xds.h.in
    1.2         +5  -16     ossp-pkg/srpc/libxds/xml-decode-begin.c
    1.4         +3  -1      ossp-pkg/srpc/libxds/xml-decode-double.c
    1.2         +5  -16     ossp-pkg/srpc/libxds/xml-decode-end.c
    1.3         +8  -19     ossp-pkg/srpc/libxds/xml-decode-int32.c
    1.4         +8  -19     ossp-pkg/srpc/libxds/xml-decode-int64.c
    1.3         +8  -19     ossp-pkg/srpc/libxds/xml-decode-uint32.c
    1.4         +8  -19     ossp-pkg/srpc/libxds/xml-decode-uint64.c
    1.2         +6  -15     ossp-pkg/srpc/libxds/xml-encode-begin.c
    1.4         +3  -1      ossp-pkg/srpc/libxds/xml-encode-double.c
    1.2         +6  -15     ossp-pkg/srpc/libxds/xml-encode-end.c
    1.4         +12 -20     ossp-pkg/srpc/libxds/xml-encode-int32.c
    1.4         +9  -16     ossp-pkg/srpc/libxds/xml-encode-int64.c
    1.3         +9  -16     ossp-pkg/srpc/libxds/xml-encode-uint32.c
    1.4         +9  -16     ossp-pkg/srpc/libxds/xml-encode-uint64.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile.in
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 Makefile.in
  --- ossp-pkg/srpc/libxds/Makefile.in	2001/07/31 15:27:45	1.11
  +++ ossp-pkg/srpc/libxds/Makefile.in	2001/08/01 15:25:47	1.12
  @@ -8,19 +8,25 @@
   CFLAGS		= @CFLAGS@
   LDFLAGS		= @LDFLAGS@
   
  +XML_OBJS	= xml-encode-int32.o       xml-decode-int32.o \
  +		  xml-encode-uint32.o      xml-decode-uint32.o \
  +		  xml-encode-int64.o       xml-decode-int64.o \
  +		  xml-encode-uint64.o      xml-decode-uint64.o \
  +		  xml-encode-double.o      xml-decode-double.o \
  +		  xml-encode-begin.o       xml-decode-begin.o \
  +		  xml-encode-end.o         xml-decode-end.o
  +
  +XDR_OBJS	= xdr-encode-int32.o       xdr-decode-int32.o \
  +		  xdr-encode-uint32.o      xdr-decode-uint32.o \
  +		  xdr-encode-int64.o       xdr-decode-int64.o \
  +		  xdr-encode-uint64.o      xdr-decode-uint64.o \
  +		  xdr-encode-double.o      xdr-decode-double.o \
  +		  xdr-encode-octetstream.o xdr-decode-octetstream.o \
  +		  xdr-encode-string.o      xdr-decode-string.o \
  +
   OBJS		= decode.o destroy.o encode.o getbuffer.o init.o register.o \
   		  setbuffer.o unregister.o vdecode.o vencode.o find-engine.o \
  -		  set-capacity.o  xdr-encode-int32.o xdr-encode-int64.o \
  -		  xdr-encode-uint32.o xdr-encode-uint64.o xdr-decode-int32.o \
  -		  xdr-decode-int64.o xdr-decode-uint32.o xdr-decode-uint64.o \
  -		  xdr-encode-octetstream.o xdr-decode-octetstream.o \
  -		  xdr-encode-string.o xdr-decode-string.o xdr-encode-double.o \
  -		  xdr-decode-double.o xml-encode-int32.o xml-decode-int32.o \
  -		  xml-decode-int64.o xml-decode-uint32.o xml-decode-uint64.o \
  -		  xml-encode-int64.o xml-encode-uint32.o xml-encode-uint64.o \
  -		  xml-encode-double.o xml-decode-double.o \
  -		  xml-encode-begin.o xml-decode-begin.o \
  -		  xml-encode-end.o xml-decode-end.o
  +		  set-capacity.o $(XDR_OBJS) $(XML_OBJS)
   
   .c.o:
   	$(CC) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CFLAGS) -c $<
  Index: ossp-pkg/srpc/libxds/destroy.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 destroy.c
  --- ossp-pkg/srpc/libxds/destroy.c	2001/07/31 06:33:55	1.7
  +++ ossp-pkg/srpc/libxds/destroy.c	2001/08/01 15:25:47	1.8
  @@ -26,7 +26,6 @@
   */
   
   #include <stdlib.h>
  -#include <assert.h>
   #include "internal.h"
   
   void xds_destroy(xds_t* xds)
  Index: ossp-pkg/srpc/libxds/find-engine.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 find-engine.c
  --- ossp-pkg/srpc/libxds/find-engine.c	2001/07/18 17:49:51	1.3
  +++ ossp-pkg/srpc/libxds/find-engine.c	2001/08/01 15:25:47	1.4
  @@ -26,7 +26,6 @@
   */
   
   #include <string.h>
  -#include <assert.h>
   #include "internal.h"
   
   int xds_find_engine(const engine_map_t* engines, size_t last, const char* name, size_t* pos)
  @@ -35,9 +34,9 @@
   
       /* Sanity checks. */
   
  -    assert(engines != NULL || last == 0);
  -    assert(name != NULL);
  -    assert(pos != NULL);
  +    xds_check_parameter(engines != NULL || last == 0);
  +    xds_check_parameter(name != NULL);
  +    xds_check_parameter(pos != NULL);
   
       /* Use binary search to find "name" in "engines". */
   
  Index: ossp-pkg/srpc/libxds/getbuffer.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 getbuffer.c
  --- ossp-pkg/srpc/libxds/getbuffer.c	2001/07/09 17:22:03	1.2
  +++ ossp-pkg/srpc/libxds/getbuffer.c	2001/08/01 15:25:47	1.3
  @@ -25,19 +25,16 @@
      SUCH DAMAGE.
   */
   
  -#include "assert.h"
   #include "internal.h"
   
   int xds_getbuffer(xds_t* xds, xds_scope_t flag, void** buffer, size_t* buffer_len)
       {
       /* Sanity checks. */
   
  -    assert(xds != NULL);
  -    assert(flag == XDS_GIFT || flag == XDS_LOAN);
  -    assert(buffer != NULL);
  -    assert(buffer_len != NULL);
  -    if (xds == NULL || buffer == NULL || buffer_len == NULL || (flag != XDS_GIFT && flag != XDS_LOAN))
  -	return XDS_ERR_INVALID_ARG;
  +    xds_check_parameter(xds != NULL);
  +    xds_check_parameter(flag == XDS_GIFT || flag == XDS_LOAN);
  +    xds_check_parameter(buffer != NULL);
  +    xds_check_parameter(buffer_len != NULL);
   
       /* Return the buffer to the caller. */
   
  Index: ossp-pkg/srpc/libxds/init.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 init.c
  --- ossp-pkg/srpc/libxds/init.c	2001/08/01 09:22:50	1.5
  +++ ossp-pkg/srpc/libxds/init.c	2001/08/01 15:25:47	1.6
  @@ -27,7 +27,6 @@
   
   #include <stdlib.h>
   #include <errno.h>
  -#include <assert.h>
   #include "internal.h"
   
   xds_t* xds_init(xds_mode_t mode)
  Index: ossp-pkg/srpc/libxds/internal.h
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 internal.h
  --- ossp-pkg/srpc/libxds/internal.h	2001/07/31 15:27:45	1.7
  +++ ossp-pkg/srpc/libxds/internal.h	2001/08/01 15:25:47	1.8
  @@ -30,6 +30,7 @@
   #ifndef __INTERNAL_H__
   #define __INTERNAL_H__
   
  +#include <assert.h>
   #include "xds.h"
   
   #define XDS_TRUE (1==1)
  @@ -65,5 +66,39 @@
   
   extern const char xds_xml_begin_text[];
   extern const char xds_xml_end_text[];
  +
  +#define xds_check_parameter(condition)    \
  +    do                                    \
  +    {                                     \
  +    assert(condition);                    \
  +    if (!(condition))                     \
  +        return XDS_ERR_INVALID_ARG;       \
  +    } while(XDS_FALSE)
  +
  +#define xds_init_encoding_engine(size)                                          \
  +    do                                                                          \
  +    {                                                                           \
  +    xds_check_parameter(xds != NULL);                                           \
  +    xds_check_parameter(buffer != NULL);                                        \
  +    xds_check_parameter(buffer_size != 0);                                      \
  +    xds_check_parameter(used_buffer_size != NULL && *used_buffer_size == 0);    \
  +    xds_check_parameter(args != NULL);                                          \
  +    *used_buffer_size = size;                                                   \
  +    if (buffer_size < size)                                                     \
  +        return XDS_ERR_OVERFLOW;                                                \
  +    } while(XDS_FALSE)
  +
  +#define xds_init_decoding_engine(size)                                          \
  +    do                                                                          \
  +    {                                                                           \
  +    xds_check_parameter(xds != NULL);                                           \
  +    xds_check_parameter(buffer != NULL);                                        \
  +    xds_check_parameter(buffer_size != 0);                                      \
  +    xds_check_parameter(used_buffer_size != NULL && *used_buffer_size == 0);    \
  +    xds_check_parameter(args != NULL);                                          \
  +    *used_buffer_size = size;                                                   \
  +    if (buffer_size < size)                                                     \
  +        return XDS_ERR_UNDERFLOW;                                               \
  +    } while(XDS_FALSE)
   
   #endif /* !defined(__INTERNAL_H__) */
  Index: ossp-pkg/srpc/libxds/register.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 register.c
  --- ossp-pkg/srpc/libxds/register.c	2001/07/09 17:23:38	1.6
  +++ ossp-pkg/srpc/libxds/register.c	2001/08/01 15:25:47	1.7
  @@ -28,7 +28,6 @@
   #include <stdlib.h>
   #include <string.h>
   #include <ctype.h>
  -#include <assert.h>
   #include "internal.h"
   
   int xds_register(xds_t* xds, const char* name, xds_engine_t engine, void* engine_context)
  @@ -37,11 +36,9 @@
   
       /* Sanity checks. */
   
  -    assert(xds != NULL);
  -    assert(name != NULL);
  -    assert(engine != NULL);
  -    if (xds == NULL || name == NULL || engine == NULL)
  -	return XDS_ERR_INVALID_ARG;
  +    xds_check_parameter(xds != NULL);
  +    xds_check_parameter(name != NULL);
  +    xds_check_parameter(engine != NULL);
       for(pos = 0; name[pos] != '\0'; ++pos)
   	{
   	if (!isalnum(name[pos]) && name[pos] != '-' && name[pos] != '_')
  Index: ossp-pkg/srpc/libxds/regression-tests/Makefile.in
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 Makefile.in
  --- ossp-pkg/srpc/libxds/regression-tests/Makefile.in	2001/07/24 14:55:56	1.10
  +++ ossp-pkg/srpc/libxds/regression-tests/Makefile.in	2001/08/01 15:25:50	1.11
  @@ -12,8 +12,8 @@
   		  xds-getbuffer.exe xds-decode.exe xds-setbuffer.exe xds-engine-restart.exe \
   		  xdr-uint32.exe xdr-int32.exe xdr-uint64.exe xdr-int64.exe  \
   		  xdr-octetstream.exe xdr-octetstream-empty.exe xdr-string.exe \
  -		  xdr-string-empty.exe xds-mystruct.exe xml-uint32.exe xml-int32.exe \
  -		  xml-uint64.exe xml-int64.exe xml-double.exe
  +		  xdr-string-empty.exe xds-mystruct.exe \
  +		  xml-uint32.exe xml-int32.exe xml-uint64.exe xml-int64.exe xml-double.exe
   
   .SUFFIXES:
   .SUFFIXES:	.c .exe
  Index: ossp-pkg/srpc/libxds/regression-tests/xdr-octetstream-empty.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xdr-octetstream-empty.c
  --- ossp-pkg/srpc/libxds/regression-tests/xdr-octetstream-empty.c	2001/07/20 09:22:26	1.1
  +++ ossp-pkg/srpc/libxds/regression-tests/xdr-octetstream-empty.c	2001/08/01 15:25:50	1.2
  @@ -96,7 +96,7 @@
   	printf("The size of the decoded message is wrong.\n");
   	return 1;
   	}
  -    if (strncmp(msg, new_msg, new_msg_size) != 0)
  +    if (memcmp(msg, new_msg, new_msg_size) != 0)
   	{
   	printf("The decoded octet stream is not correct.\n");
   	return 1;
  Index: ossp-pkg/srpc/libxds/regression-tests/xdr-octetstream.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xdr-octetstream.c
  --- ossp-pkg/srpc/libxds/regression-tests/xdr-octetstream.c	2001/07/20 09:22:26	1.1
  +++ ossp-pkg/srpc/libxds/regression-tests/xdr-octetstream.c	2001/08/01 15:25:50	1.2
  @@ -96,7 +96,7 @@
   	printf("The size of the decoded message is wrong.\n");
   	return 1;
   	}
  -    if (strncmp(msg, new_msg, new_msg_size) != 0)
  +    if (memcmp(msg, new_msg, new_msg_size) != 0)
   	{
   	printf("The decoded octet stream is not correct.\n");
   	return 1;
  Index: ossp-pkg/srpc/libxds/regression-tests/xdr-string-empty.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xdr-string-empty.c
  --- ossp-pkg/srpc/libxds/regression-tests/xdr-string-empty.c	2001/07/20 09:22:26	1.2
  +++ ossp-pkg/srpc/libxds/regression-tests/xdr-string-empty.c	2001/08/01 15:25:50	1.3
  @@ -96,7 +96,7 @@
   	printf("The size of the decoded message is wrong.\n");
   	return 1;
   	}
  -    if (strncmp(msg, new_msg, new_msg_size) != 0)
  +    if (memcmp(msg, new_msg, new_msg_size) != 0)
   	{
   	printf("The decoded string is not correct.\n");
   	return 1;
  Index: ossp-pkg/srpc/libxds/regression-tests/xdr-string.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xdr-string.c
  --- ossp-pkg/srpc/libxds/regression-tests/xdr-string.c	2001/07/20 09:22:26	1.2
  +++ ossp-pkg/srpc/libxds/regression-tests/xdr-string.c	2001/08/01 15:25:50	1.3
  @@ -96,7 +96,7 @@
   	printf("The size of the decoded message is wrong: %d.\n", new_msg_size);
   	return 1;
   	}
  -    if (strncmp(msg, new_msg, new_msg_size) != 0)
  +    if (memcmp(msg, new_msg, new_msg_size) != 0)
   	{
   	printf("The decoded string is not correct.\n");
   	return 1;
  Index: ossp-pkg/srpc/libxds/regression-tests/xds-decode.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xds-decode.c
  --- ossp-pkg/srpc/libxds/regression-tests/xds-decode.c	2001/07/18 17:37:49	1.3
  +++ ossp-pkg/srpc/libxds/regression-tests/xds-decode.c	2001/08/01 15:25:50	1.4
  @@ -29,7 +29,9 @@
   #include <string.h>
   #include "../internal.h"
   
  -static int dummy_engine(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  +static int dummy_engine(xds_t* xds, void* engine_context,
  +			void* buffer, size_t buffer_size, size_t* used_buffer_size,
  +			va_list* args)
       {
       if (xds == NULL)
   	{
  @@ -51,17 +53,28 @@
   	printf("Buffer size passed to engine is zero!\n");
   	exit(1);
   	}
  +    if (used_buffer_size == NULL)
  +	{
  +	printf("used_buffer_size passed to engine is zero!\n");
  +	exit(1);
  +	}
       if (args == NULL)
   	{
   	printf("args pointer passed to engine is NULL!\n");
   	exit(1);
  +	}
  +    if (buffer_size < 6)
  +	{
  +	printf("The buffer is too small; can't verify my encoded string.\n");
  +	exit(1);
   	}
  -    if (strncmp(buffer, "Hallo!", 6) != 0)
  +    if (memcmp(buffer, "Hallo!", 6) != 0)
   	{
   	printf("The contents of the decode buffer are not what we expected.\n");
   	exit(1);
   	}
  -    return 6;
  +    *used_buffer_size = 6;
  +    return XDS_OK;
       }
   
   int main()
  Index: ossp-pkg/srpc/libxds/regression-tests/xds-encode.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 xds-encode.c
  --- ossp-pkg/srpc/libxds/regression-tests/xds-encode.c	2001/07/18 17:37:49	1.5
  +++ ossp-pkg/srpc/libxds/regression-tests/xds-encode.c	2001/08/01 15:25:50	1.6
  @@ -29,7 +29,9 @@
   #include <string.h>
   #include "../internal.h"
   
  -static int dummy_engine(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  +static int dummy_engine(xds_t* xds, void* engine_context,
  +			void* buffer, size_t buffer_size, size_t* used_buffer_size,
  +			va_list* args)
       {
       if (xds == NULL)
   	{
  @@ -48,16 +50,24 @@
   	}
       if (buffer_size == 0)
   	{
  -	printf("Buffer size passed to engine is zero!\n");
  +	printf("buffer_size passed to engine is zero!\n");
   	exit(1);
   	}
  +    if (used_buffer_size == NULL)
  +	{
  +	printf("used_buffer_size pointer passed to engine is NULL!\n");
  +	exit(1);
  +	}
       if (args == NULL)
   	{
   	printf("args pointer passed to engine is NULL!\n");
   	exit(1);
   	}
  -    strncpy(buffer, "Hallo ", buffer_size);
  -    return 6;
  +    *used_buffer_size = 6;
  +    if (buffer_size < 6)
  +	return XDS_ERR_OVERFLOW;
  +    memmove(buffer, "Hallo ", 6);
  +    return XDS_OK;
       }
   
   int main()
  @@ -88,10 +98,10 @@
   
       if (xds_encode(xds, "int:text    double double float") != XDS_OK)
   	{
  -	printf("xds_encode() failed!");
  +	printf("xds_encode() failed!\n");
   	return 1;
   	}
  -    if (strcmp(xds->buffer, "Hallo Hallo Hallo Hallo Hallo ") != 0)
  +    if (memcmp(xds->buffer, "Hallo Hallo Hallo Hallo Hallo ", 30) != 0)
   	{
   	printf("xds_encode() did not yield the expected result.\n");
   	return 1;
  Index: ossp-pkg/srpc/libxds/regression-tests/xds-engine-restart.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xds-engine-restart.c
  --- ossp-pkg/srpc/libxds/regression-tests/xds-engine-restart.c	2001/07/18 17:38:37	1.1
  +++ ossp-pkg/srpc/libxds/regression-tests/xds-engine-restart.c	2001/08/01 15:25:50	1.2
  @@ -29,7 +29,9 @@
   #include <string.h>
   #include "../internal.h"
   
  -static int dummy_engine(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  +static int dummy_engine(xds_t* xds, void* engine_context,
  +			void* buffer, size_t buffer_size, size_t* used_buffer_size,
  +			va_list* args)
       {
       if (xds == NULL)
   	{
  @@ -51,6 +53,11 @@
   	printf("Buffer size passed to engine is zero!\n");
   	exit(1);
   	}
  +    if (used_buffer_size == NULL)
  +	{
  +	printf("used_buffer_size pointer passed to engine is NULL!\n");
  +	exit(1);
  +	}
       if (args == NULL)
   	{
   	printf("args pointer passed to engine is NULL!\n");
  @@ -61,7 +68,11 @@
   	printf("The varadic argument is not what the engine expected!\n");
   	exit(1);
   	}
  -    return 64;
  +    if (buffer_size < 64)
  +	return XDS_ERR_OVERFLOW;
  +    else
  +	*used_buffer_size = 64;
  +    return XDS_OK;
       }
   
   int main()
  Index: ossp-pkg/srpc/libxds/regression-tests/xds-getbuffer.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xds-getbuffer.c
  --- ossp-pkg/srpc/libxds/regression-tests/xds-getbuffer.c	2001/07/18 19:00:40	1.4
  +++ ossp-pkg/srpc/libxds/regression-tests/xds-getbuffer.c	2001/08/01 15:25:50	1.5
  @@ -29,10 +29,17 @@
   #include <string.h>
   #include "../internal.h"
   
  -static int dummy_engine(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  +static int dummy_engine(xds_t* xds, void* engine_context,
  +			void* buffer, size_t buffer_size, size_t* used_buffer_size,
  +			va_list* args)
       {
  -    strncpy(buffer, "Hallo!", buffer_size);
  -    return 6;
  +    if (buffer_size < 6)
  +	return XDS_ERR_OVERFLOW;
  +    else
  +	*used_buffer_size = 6;
  +
  +    memmove(buffer, "Hallo!", 6);
  +    return XDS_OK;
       }
   
   int main()
  @@ -85,8 +92,8 @@
   	printf("xds_getbuffer() failed for the second buffer!\n");
   	return 1;
   	}
  -    if ((strcmp(old, "Hallo!Hallo!") != 0 || old_len != 12) &&
  -	(strcmp(new, "Hallo!") != 0 || new_len != 6))
  +    if ((memcmp(old, "Hallo!Hallo!", 12) != 0 || old_len != 12) &&
  +	(memcmp(new, "Hallo!", 6) != 0 || new_len != 6))
   	{
   	printf("xds_encode() did not yield the expected result.\n");
   	return 1;
  @@ -108,7 +115,7 @@
   	printf("xds_getbuffer() failed for the first buffer!\n");
   	return 1;
   	}
  -    if (strcmp(old, "Hallo!Hallo!") != 0 || old_len != 12)
  +    if (memcmp(old, "Hallo!Hallo!", 12) != 0 || old_len != 12)
   	{
   	printf("xds_encode() did not yield the expected result.\n");
   	return 1;
  @@ -128,7 +135,7 @@
   	printf("xds_encode() allocated a new buffer even though we used XDS_LOAN.\n");
   	return 1;
   	}
  -    if (strcmp(new, "Hallo!") != 0 || new_len != 6)
  +    if (memcmp(new, "Hallo!", 6) != 0 || new_len != 6)
   	{
   	printf("xds_encode() did not yield the expected result.\n");
   	return 1;
  Index: ossp-pkg/srpc/libxds/regression-tests/xds-mystruct.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 xds-mystruct.c
  --- ossp-pkg/srpc/libxds/regression-tests/xds-mystruct.c	2001/07/24 15:44:18	1.5
  +++ ossp-pkg/srpc/libxds/regression-tests/xds-mystruct.c	2001/08/01 15:25:50	1.6
  @@ -27,7 +27,6 @@
   
   #include <stdio.h>
   #include <string.h>
  -#include <assert.h>
   #include "../internal.h"
   
   struct mystruct
  @@ -37,40 +36,36 @@
       xds_uint32_t  positive;
       };
   
  -static int encode_mystruct_engine(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  +static int encode_mystruct_engine(xds_t* xds, void* engine_context,
  +				  void* buffer, size_t buffer_size, size_t* used_buffer_size,
  +				  va_list* args)
       {
  -    int rc;
       struct mystruct* ms;
   
       assert(xds != NULL);
       assert(buffer != NULL);
       assert(buffer_size != 0);
  +    assert(used_buffer_size != NULL);
       assert(args != NULL);
   
       ms = va_arg(*args, struct mystruct*);
  -    rc = xds_encode(xds, "int32 int64 uint32", ms->small, ms->big, ms->positive);
  -    if (rc == XDS_OK)
  -	return 0;
  -    else
  -	return rc;
  +    return xds_encode(xds, "int32 int64 uint32", ms->small, ms->big, ms->positive);
       }
   
  -static int decode_mystruct_engine(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  +static int decode_mystruct_engine(xds_t* xds, void* engine_context,
  +				  void* buffer, size_t buffer_size, size_t* used_buffer_size,
  +				  va_list* args)
       {
  -    int rc;
       struct mystruct* ms;
   
       assert(xds != NULL);
       assert(buffer != NULL);
       assert(buffer_size != 0);
  +    assert(used_buffer_size != NULL);
       assert(args != NULL);
   
       ms = va_arg(*args, struct mystruct*);
  -    rc = xds_decode(xds, "int32 int64 uint32", &(ms->small), &(ms->big), &(ms->positive));
  -    if (rc == XDS_OK)
  -	return 0;
  -    else
  -	return rc;
  +    return xds_decode(xds, "int32 int64 uint32", &(ms->small), &(ms->big), &(ms->positive));
       }
   
   int main()
  Index: ossp-pkg/srpc/libxds/regression-tests/xds-register.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 xds-register.c
  --- ossp-pkg/srpc/libxds/regression-tests/xds-register.c	2001/07/16 17:50:08	1.6
  +++ ossp-pkg/srpc/libxds/regression-tests/xds-register.c	2001/08/01 15:25:50	1.7
  @@ -27,10 +27,11 @@
   
   #include <stdio.h>
   #include <string.h>
  -#include <assert.h>
   #include "../internal.h"
   
  -static int dummy_engine(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  +static int dummy_engine(xds_t* xds, void* engine_context,
  +			void* buffer, size_t buffer_size, size_t* used_buffer_size,
  +			va_list* args)
       {
       return 0;
       }
  Index: ossp-pkg/srpc/libxds/regression-tests/xds-setbuffer.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xds-setbuffer.c
  --- ossp-pkg/srpc/libxds/regression-tests/xds-setbuffer.c	2001/07/24 15:20:17	1.3
  +++ ossp-pkg/srpc/libxds/regression-tests/xds-setbuffer.c	2001/08/01 15:25:50	1.4
  @@ -27,18 +27,23 @@
   
   #include <stdio.h>
   #include <string.h>
  -#include <assert.h>
   #include "../internal.h"
   
  -static int dummy_engine(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  +static int dummy_engine(xds_t* xds, void* engine_context,
  +			void* buffer, size_t buffer_size, size_t* used_buffer_size,
  +			va_list* args)
       {
       assert(xds != NULL);
       assert(buffer != NULL);
       assert(buffer_size != 0);
  +    assert(used_buffer_size != NULL);
       assert(args != NULL);
  -    if (buffer_size >= 64)
  -	memset(buffer, 'a', 64);
  -    return 64;
  +    if (buffer_size < 64)
  +	return XDS_ERR_OVERFLOW;
  +    else
  +	*used_buffer_size = 64;
  +    memset(buffer, 'a', 64);
  +    return XDS_OK;
       }
   
   int main()
  Index: ossp-pkg/srpc/libxds/set-capacity.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 set-capacity.c
  --- ossp-pkg/srpc/libxds/set-capacity.c	2001/07/16 18:26:58	1.3
  +++ ossp-pkg/srpc/libxds/set-capacity.c	2001/08/01 15:25:47	1.4
  @@ -26,7 +26,6 @@
   */
   
   #include <stdlib.h>
  -#include <assert.h>
   #include "internal.h"
   
   int xds_set_capacity(void** array, size_t* array_capacity, size_t new_capacity, size_t elem_size, size_t initial_capacity)
  @@ -36,10 +35,10 @@
   
       /* Sanity checks. */
   
  -    assert(array != NULL);
  -    assert(array_capacity != NULL);
  -    assert(elem_size != 0);
  -    assert(initial_capacity != 0);
  +    xds_check_parameter(array != NULL);
  +    xds_check_parameter(array_capacity != NULL);
  +    xds_check_parameter(elem_size != 0);
  +    xds_check_parameter(initial_capacity != 0);
   
       /* Do we need to re-allocate? */
   
  Index: ossp-pkg/srpc/libxds/setbuffer.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 setbuffer.c
  --- ossp-pkg/srpc/libxds/setbuffer.c	2001/07/31 06:33:55	1.6
  +++ ossp-pkg/srpc/libxds/setbuffer.c	2001/08/01 15:25:47	1.7
  @@ -25,19 +25,15 @@
      SUCH DAMAGE.
   */
   
  -#include "assert.h"
   #include "internal.h"
   
   int xds_setbuffer(xds_t* xds, xds_scope_t flag, void* buffer, size_t buffer_len)
       {
       /* Sanity checks. */
   
  -    assert(xds != NULL);
  -    assert(flag == XDS_GIFT || flag == XDS_LOAN);
  -    assert((buffer != NULL && buffer_len != 0) || flag == XDS_GIFT);
  -    if (xds == NULL || (flag != XDS_GIFT && flag != XDS_LOAN) ||
  -	(flag == XDS_LOAN && (buffer == NULL || buffer_len == 0)))
  -	return XDS_ERR_INVALID_ARG;
  +    xds_check_parameter(xds != NULL);
  +    xds_check_parameter(flag == XDS_GIFT || flag == XDS_LOAN);
  +    xds_check_parameter((buffer != NULL && buffer_len != 0) || flag == XDS_GIFT);
   
       /* Free the old buffer if there is one. */
   
  Index: ossp-pkg/srpc/libxds/unregister.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 unregister.c
  --- ossp-pkg/srpc/libxds/unregister.c	2001/07/09 17:23:38	1.4
  +++ ossp-pkg/srpc/libxds/unregister.c	2001/08/01 15:25:47	1.5
  @@ -28,7 +28,6 @@
   #include <stdlib.h>
   #include <string.h>
   #include <ctype.h>
  -#include <assert.h>
   #include "internal.h"
   
   int xds_unregister(xds_t* xds, const char* name)
  @@ -38,10 +37,8 @@
   
       /* Sanity checks. */
   
  -    assert(xds != NULL);
  -    assert(name != NULL);
  -    if (xds == NULL || name == NULL)
  -	return XDS_ERR_INVALID_ARG;
  +    xds_check_parameter(xds != NULL);
  +    xds_check_parameter(name != NULL);
       for(pos = 0; name[pos] != '\0'; ++pos)
   	{
   	if (!isalnum(name[pos]) && name[pos] != '-' && name[pos] != '_')
  Index: ossp-pkg/srpc/libxds/vdecode.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 vdecode.c
  --- ossp-pkg/srpc/libxds/vdecode.c	2001/07/24 15:46:18	1.4
  +++ ossp-pkg/srpc/libxds/vdecode.c	2001/08/01 15:25:47	1.5
  @@ -27,7 +27,6 @@
   
   #include <string.h>
   #include <ctype.h>
  -#include <assert.h>
   #include "internal.h"
   
   int xds_vdecode(xds_t* xds, const char* fmt_arg, va_list args)
  @@ -40,11 +39,9 @@
   
       /* Sanity checks. */
   
  -    assert(xds != NULL);
  -    assert(fmt_arg != NULL);
  +    xds_check_parameter(xds != NULL);
  +    xds_check_parameter(fmt_arg != NULL);
       assert(xds->mode == XDS_DECODE);
  -    if (xds == NULL || fmt_arg == NULL)
  -	return XDS_ERR_INVALID_ARG;
       if (xds->mode != XDS_DECODE)
   	return XDS_ERR_INVALID_MODE;
   
  @@ -72,17 +69,20 @@
   	if (strlen(name) > 0)
   	    {
   	    size_t pos;
  +	    size_t used_buffer_size = 0;
   	    if (xds_find_engine(xds->engines, xds->engines_len, name, &pos))
   		{
   		rc = (*xds->engines[pos].engine)(xds,
   						 xds->engines[pos].context,
   						 xds->buffer + xds->buffer_len,
   						 xds->buffer_capacity - xds->buffer_len,
  +						 &used_buffer_size,
   						 &args);
  -		if (rc < 0)
  -		    goto leave;
  +		assert(rc <= 0);
  +		if (rc == XDS_OK)
  +		    xds->buffer_len += used_buffer_size;
   		else
  -		    xds->buffer_len += rc;
  +		    goto leave;
   		}
   	    else
   		{
  Index: ossp-pkg/srpc/libxds/vencode.c
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 vencode.c
  --- ossp-pkg/srpc/libxds/vencode.c	2001/07/31 06:33:55	1.12
  +++ ossp-pkg/srpc/libxds/vencode.c	2001/08/01 15:25:47	1.13
  @@ -27,7 +27,6 @@
   
   #include <string.h>
   #include <ctype.h>
  -#include <assert.h>
   #include "internal.h"
   
   int xds_vencode(xds_t* xds, const char* fmt_arg, va_list args)
  @@ -41,11 +40,9 @@
   
       /* Sanity checks. */
   
  -    assert(xds != NULL);
  -    assert(fmt_arg != NULL);
  +    xds_check_parameter(xds != NULL);
  +    xds_check_parameter(fmt_arg != NULL);
       assert(xds->mode == XDS_ENCODE);
  -    if (xds == NULL || fmt_arg == NULL)
  -	return XDS_ERR_INVALID_ARG;
       if (xds->mode != XDS_ENCODE)
   	return XDS_ERR_INVALID_MODE;
   
  @@ -65,26 +62,6 @@
   	xds->we_own_buffer = XDS_TRUE;
   	}
   
  -    /* Ensure the buffer has free space. */
  -
  -    assert(xds->buffer_len <= xds->buffer_capacity);
  -    if (xds->buffer_len == xds->buffer_capacity)
  -	{
  -	if (xds->we_own_buffer)
  -	    {
  -	    rc = xds_set_capacity((void**)&xds->buffer,
  -				  &xds->buffer_capacity,
  -				  xds->buffer_len + 1,
  -				  sizeof(char),
  -				  XDS_INITIAL_BUFFER_CAPACITY);
  -	    assert(rc == XDS_OK || rc == XDS_ERR_NO_MEM);
  -	    if (rc != XDS_OK)
  -		return rc;
  -	    }
  -	else
  -	    return XDS_ERR_OVERFLOW;
  -	}
  -
       /* Iterate through the items in the format string and execute the
          apropriate engines. */
   
  @@ -103,66 +80,78 @@
   
   	if (strlen(name) > 0)
   	    {
  +	    int restart_engine;
  +	    size_t used_buffer_size;
   	    size_t pos;
  -	    if (xds_find_engine(xds->engines, xds->engines_len, name, &pos))
  +
  +	    if (xds_find_engine(xds->engines, xds->engines_len, name, &pos) == XDS_FALSE)
   		{
  -		int restart_engine;
  -		do
  -		    {
  -		    args_backup = args;
  -		    rc = (*xds->engines[pos].engine)(xds,
  -						     xds->engines[pos].context,
  -						     xds->buffer + xds->buffer_len,
  -						     xds->buffer_capacity - xds->buffer_len,
  -						     &args);
  -		    if (rc < 0)
  -			goto leave;
  -		    else if (rc >= xds->buffer_capacity - xds->buffer_len)
  -			{		/* enlarge buffer */
  -			int rc2;
  -
  -			if (rc > xds->buffer_capacity - xds->buffer_len)
  -			    {
  -			    restart_engine = XDS_TRUE;
  -			    args = args_backup;
  -			    }
  -			else
  -			    {
  -			    restart_engine = XDS_FALSE;
  -			    xds->buffer_len += rc;
  -			    }
  -
  -			if (!xds->we_own_buffer)
  -			    {
  -			    rc = XDS_ERR_OVERFLOW;
  -			    goto leave;
  -			    }
  +		rc = XDS_ERR_UNKNOWN_ENGINE;
  +		goto leave;
  +		}
  +
  +	    do
  +		{
  +		/* Ensure the buffer has free space. */
   
  -			rc2 = xds_set_capacity((void**)&xds->buffer,
  -					       &xds->buffer_capacity,
  -					       xds->buffer_capacity + rc,
  -					       sizeof(char),
  -					       XDS_INITIAL_BUFFER_CAPACITY);
  -			assert(rc2 == XDS_OK || rc2 == XDS_ERR_NO_MEM);
  -			if (rc2 != XDS_OK)
  -			    {
  -			    rc = rc2;
  +		assert(xds->buffer_len <= xds->buffer_capacity);
  +		if (xds->buffer_len == xds->buffer_capacity)
  +		    {
  +		    if (xds->we_own_buffer)
  +			{
  +			rc = xds_set_capacity((void**)&xds->buffer,
  +					      &xds->buffer_capacity,
  +					      xds->buffer_len + 1,
  +					      sizeof(char),
  +					      XDS_INITIAL_BUFFER_CAPACITY);
  +			assert(rc == XDS_OK || rc == XDS_ERR_NO_MEM);
  +			if (rc != XDS_OK)
   			    goto leave;
  -			    }
   			}
   		    else
   			{
  -			restart_engine = XDS_FALSE;
  -			xds->buffer_len += rc;
  +			rc = XDS_ERR_OVERFLOW;
  +			goto leave;
   			}
   		    }
  -		while (restart_engine);
  -		}
  -	    else
  -		{
  -		rc = XDS_ERR_UNKNOWN_ENGINE;
  -		goto leave;
  +
  +		/* Execute the engine. */
  +
  +		used_buffer_size = 0;
  +		args_backup = args;
  +		rc = (*xds->engines[pos].engine)(xds,
  +						 xds->engines[pos].context,
  +						 xds->buffer + xds->buffer_len,
  +						 xds->buffer_capacity - xds->buffer_len,
  +						 &used_buffer_size,
  +						 &args);
  +		assert(rc <= 0);
  +		if (rc == XDS_OK)
  +		    {
  +		    restart_engine = XDS_FALSE;
  +		    xds->buffer_len += used_buffer_size;
  +		    }
  +		else if (rc == XDS_ERR_OVERFLOW)
  +		    {		/* enlarge buffer */
  +		    if (!xds->we_own_buffer)
  +			goto leave;
  +
  +		    restart_engine = XDS_TRUE;
  +		    args = args_backup;
  +
  +		    rc = xds_set_capacity((void**)&xds->buffer,
  +					  &xds->buffer_capacity,
  +					  xds->buffer_capacity + ((used_buffer_size == 0) ? 1 : used_buffer_size),
  +					  sizeof(char),
  +					  XDS_INITIAL_BUFFER_CAPACITY);
  +		    assert(rc == XDS_OK || rc == XDS_ERR_NO_MEM);
  +		    if (rc != XDS_OK)
  +			goto leave;
  +		    }
  +		else
  +		    goto leave;
   		}
  +	    while (restart_engine);
   	    }
   	}
       rc = XDS_OK;
  Index: ossp-pkg/srpc/libxds/xdr-decode-double.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xdr-decode-double.c
  --- ossp-pkg/srpc/libxds/xdr-decode-double.c	2001/07/23 13:04:06	1.1
  +++ ossp-pkg/srpc/libxds/xdr-decode-double.c	2001/08/01 15:25:47	1.2
  @@ -27,7 +27,9 @@
   
   #include "internal.h"
   
  -int xdr_decode_double(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  +int xdr_decode_double(xds_t* xds, void* engine_context,
  +		      void* buffer, size_t buffer_size, size_t* used_buffer_size,
  +		      va_list* args)
       {
       return -1;
       }
  Index: ossp-pkg/srpc/libxds/xdr-decode-int32.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xdr-decode-int32.c
  --- ossp-pkg/srpc/libxds/xdr-decode-int32.c	2001/07/23 15:33:42	1.3
  +++ ossp-pkg/srpc/libxds/xdr-decode-int32.c	2001/08/01 15:25:47	1.4
  @@ -25,28 +25,21 @@
      SUCH DAMAGE.
   */
   
  -#include <assert.h>
   #include "internal.h"
   
  -int xdr_decode_int32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  +int xdr_decode_int32(xds_t* xds, void* engine_context,
  +		     void* buffer, size_t buffer_size, size_t* used_buffer_size,
  +		     va_list* args)
       {
       xds_int32_t*  value;
       xds_uint32_t  tmp;
   
  -    /* Consistency checks. */
  +    xds_init_decoding_engine(4);
   
  -    assert(xds != NULL);
  -    assert(buffer != NULL);
  -    assert(args != NULL);
  -    if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  -	return XDS_ERR_INVALID_ARG;
  -    if (buffer_size < 4)
  -	return XDS_ERR_UNDERFLOW;
  -
       /* Get value and format it into the buffer. */
   
       value = va_arg(*args, xds_int32_t*);
  -    assert(value != NULL);
  +    xds_check_parameter(value != NULL);
   
       if (((xds_uint8_t*)buffer)[0] & 0x80)
   	{			/* negative number */
  @@ -67,5 +60,5 @@
   
       /* Done. */
   
  -    return 4;
  +    return XDS_OK;
       }
  Index: ossp-pkg/srpc/libxds/xdr-decode-int64.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xdr-decode-int64.c
  --- ossp-pkg/srpc/libxds/xdr-decode-int64.c	2001/07/23 15:33:42	1.3
  +++ ossp-pkg/srpc/libxds/xdr-decode-int64.c	2001/08/01 15:25:47	1.4
  @@ -25,28 +25,21 @@
      SUCH DAMAGE.
   */
   
  -#include <assert.h>
   #include "internal.h"
   
  -int xdr_decode_int64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  +int xdr_decode_int64(xds_t* xds, void* engine_context,
  +		     void* buffer, size_t buffer_size, size_t* used_buffer_size,
  +		     va_list* args)
       {
       xds_int64_t*  value;
       xds_uint64_t  tmp;
   
  -    /* Consistency checks. */
  +    xds_init_decoding_engine(8);
   
  -    assert(xds != NULL);
  -    assert(buffer != NULL);
  -    assert(args != NULL);
  -    if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  -	return XDS_ERR_INVALID_ARG;
  -    if (buffer_size < 8)
  -	return XDS_ERR_UNDERFLOW;
  -
       /* Get value and format it into the buffer. */
   
       value = va_arg(*args, xds_int64_t*);
  -    assert(value != NULL);
  +    xds_check_parameter(value != NULL);
   
       if (((xds_uint8_t*)buffer)[0] & 0x80)
   	{			/* negative number */
  @@ -75,5 +68,5 @@
   
       /* Done. */
   
  -    return 8;
  +    return XDS_OK;
       }
  Index: ossp-pkg/srpc/libxds/xdr-decode-octetstream.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xdr-decode-octetstream.c
  --- ossp-pkg/srpc/libxds/xdr-decode-octetstream.c	2001/07/23 15:33:42	1.3
  +++ ossp-pkg/srpc/libxds/xdr-decode-octetstream.c	2001/08/01 15:25:47	1.4
  @@ -26,42 +26,29 @@
   */
   
   #include <string.h>
  -#include <assert.h>
   #include "internal.h"
   
  -int xdr_decode_octetstream(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  +int xdr_decode_octetstream(xds_t* xds, void* engine_context,
  +			   void* buffer, size_t buffer_size, size_t* used_buffer_size,
  +			   va_list* args)
       {
       void**  p;
       size_t* p_len;
       size_t  padding;
   
  -    /* Consistency checks. */
  +    xds_init_decoding_engine(4);
   
  -    assert(xds != NULL);
  -    assert(buffer != NULL);
  -    assert(buffer_size != 0);
  -    assert(args != NULL);
  -    if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  -	return XDS_ERR_INVALID_ARG;
  -
  -    /* Get pointers from the stack. */
  -
       p     = va_arg(*args, void**);
       p_len = va_arg(*args, size_t*);
  -    assert(p != NULL);
  -    assert(p_len != NULL);
  +    xds_check_parameter(p != NULL);
  +    xds_check_parameter(p_len != NULL);
   
       /* Read the size of the message. */
   
  -    if (buffer_size >= 4)
  -	{
  -	*p_len  = ((xds_uint8_t*)buffer)[0]; *p_len = *p_len << 8;
  -	*p_len += ((xds_uint8_t*)buffer)[1]; *p_len = *p_len << 8;
  -	*p_len += ((xds_uint8_t*)buffer)[2]; *p_len = *p_len << 8;
  -	*p_len += ((xds_uint8_t*)buffer)[3];
  -	}
  -    else
  -	return XDS_ERR_UNDERFLOW;
  +    *p_len  = ((xds_uint8_t*)buffer)[0]; *p_len = *p_len << 8;
  +    *p_len += ((xds_uint8_t*)buffer)[1]; *p_len = *p_len << 8;
  +    *p_len += ((xds_uint8_t*)buffer)[2]; *p_len = *p_len << 8;
  +    *p_len += ((xds_uint8_t*)buffer)[3];
   
       /* Calculate padding. */
   
  @@ -69,7 +56,8 @@
   
       /* Do we have enough data?. */
   
  -    if (buffer_size < 4 + *p_len + padding)
  +    *used_buffer_size = 4 + *p_len + padding;
  +    if (buffer_size < *used_buffer_size)
   	return XDS_ERR_UNDERFLOW;
   
       /* Allocate buffer for the data. */
  @@ -84,5 +72,5 @@
   
       /* Done. */
   
  -    return 4 + *p_len + padding;
  +    return XDS_OK;
       }
  Index: ossp-pkg/srpc/libxds/xdr-decode-string.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xdr-decode-string.c
  --- ossp-pkg/srpc/libxds/xdr-decode-string.c	2001/07/23 15:33:42	1.4
  +++ ossp-pkg/srpc/libxds/xdr-decode-string.c	2001/08/01 15:25:47	1.5
  @@ -26,42 +26,29 @@
   */
   
   #include <string.h>
  -#include <assert.h>
   #include "internal.h"
   
  -int xdr_decode_string(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  +int xdr_decode_string(xds_t* xds, void* engine_context,
  +		      void* buffer, size_t buffer_size, size_t* used_buffer_size,
  +		      va_list* args)
       {
       char**  p;
       size_t* p_len;
       size_t  padding;
   
  -    /* Consistency checks. */
  +    xds_init_decoding_engine(4);
   
  -    assert(xds != NULL);
  -    assert(buffer != NULL);
  -    assert(buffer_size != 0);
  -    assert(args != NULL);
  -    if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  -	return XDS_ERR_INVALID_ARG;
  -
  -    /* Get pointers from the stack. */
  -
       p     = va_arg(*args, char**);
       p_len = va_arg(*args, size_t*);
  -    assert(p != NULL);
  -    assert(p_len != NULL);
  +    xds_check_parameter(p != NULL);
  +    xds_check_parameter(p_len != NULL);
   
       /* Read the size of the message. */
   
  -    if (buffer_size >= 4)
  -	{
  -	*p_len  = ((xds_uint8_t*)buffer)[0]; *p_len = *p_len << 8;
  -	*p_len += ((xds_uint8_t*)buffer)[1]; *p_len = *p_len << 8;
  -	*p_len += ((xds_uint8_t*)buffer)[2]; *p_len = *p_len << 8;
  -	*p_len += ((xds_uint8_t*)buffer)[3];
  -	}
  -    else
  -	return XDS_ERR_UNDERFLOW;
  +    *p_len  = ((xds_uint8_t*)buffer)[0]; *p_len = *p_len << 8;
  +    *p_len += ((xds_uint8_t*)buffer)[1]; *p_len = *p_len << 8;
  +    *p_len += ((xds_uint8_t*)buffer)[2]; *p_len = *p_len << 8;
  +    *p_len += ((xds_uint8_t*)buffer)[3];
   
       /* Calculate padding. */
   
  @@ -69,7 +56,8 @@
   
       /* Do we have enough data?. */
   
  -    if (buffer_size < 4 + *p_len + padding)
  +    *used_buffer_size = 4 + *p_len + padding;
  +    if (buffer_size < *used_buffer_size)
   	return XDS_ERR_UNDERFLOW;
   
       /* Allocate buffer for the data. */
  @@ -85,5 +73,5 @@
   
       /* Done. */
   
  -    return 4 + *p_len + padding;
  +    return XDS_OK;
       }
  Index: ossp-pkg/srpc/libxds/xdr-decode-uint32.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xdr-decode-uint32.c
  --- ossp-pkg/srpc/libxds/xdr-decode-uint32.c	2001/07/23 15:33:42	1.3
  +++ ossp-pkg/srpc/libxds/xdr-decode-uint32.c	2001/08/01 15:25:47	1.4
  @@ -25,27 +25,20 @@
      SUCH DAMAGE.
   */
   
  -#include <assert.h>
   #include "internal.h"
   
  -int xdr_decode_uint32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  +int xdr_decode_uint32(xds_t* xds, void* engine_context,
  +		      void* buffer, size_t buffer_size, size_t* used_buffer_size,
  +		      va_list* args)
       {
       xds_uint32_t*  value;
   
  -    /* Consistency checks. */
  +    xds_init_decoding_engine(4);
   
  -    assert(xds != NULL);
  -    assert(buffer != NULL);
  -    assert(args != NULL);
  -    if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  -	return XDS_ERR_INVALID_ARG;
  -    if (buffer_size < 4)
  -	return XDS_ERR_UNDERFLOW;
  -
       /* Get value and format it into the buffer. */
   
       value = va_arg(*args, xds_uint32_t*);
  -    assert(value != NULL);
  +    xds_check_parameter(value != NULL);
   
       *value  = ((xds_uint8_t*)buffer)[0]; *value = *value << 8;
       *value += ((xds_uint8_t*)buffer)[1]; *value = *value << 8;
  @@ -54,5 +47,5 @@
   
       /* Done. */
   
  -    return 4;
  +    return XDS_OK;
       }
  Index: ossp-pkg/srpc/libxds/xdr-decode-uint64.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xdr-decode-uint64.c
  --- ossp-pkg/srpc/libxds/xdr-decode-uint64.c	2001/07/23 15:33:42	1.3
  +++ ossp-pkg/srpc/libxds/xdr-decode-uint64.c	2001/08/01 15:25:47	1.4
  @@ -25,27 +25,20 @@
      SUCH DAMAGE.
   */
   
  -#include <assert.h>
   #include "internal.h"
   
  -int xdr_decode_uint64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  +int xdr_decode_uint64(xds_t* xds, void* engine_context,
  +		      void* buffer, size_t buffer_size, size_t* used_buffer_size,
  +		      va_list* args)
       {
       xds_uint64_t*  value;
   
  -    /* Consistency checks. */
  +    xds_init_decoding_engine(8);
   
  -    assert(xds != NULL);
  -    assert(buffer != NULL);
  -    assert(args != NULL);
  -    if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  -	return XDS_ERR_INVALID_ARG;
  -    if (buffer_size < 8)
  -	return XDS_ERR_UNDERFLOW;
  -
       /* Get value and format it into the buffer. */
   
       value = va_arg(*args, xds_uint64_t*);
  -    assert(value != NULL);
  +    xds_check_parameter(value != NULL);
   
       *value  = ((xds_uint8_t*)buffer)[0]; *value = *value << 8;
       *value += ((xds_uint8_t*)buffer)[1]; *value = *value << 8;
  @@ -58,5 +51,5 @@
   
       /* Done. */
   
  -    return 8;
  +    return XDS_OK;
       }
  Index: ossp-pkg/srpc/libxds/xdr-encode-double.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xdr-encode-double.c
  --- ossp-pkg/srpc/libxds/xdr-encode-double.c	2001/07/23 13:04:06	1.1
  +++ ossp-pkg/srpc/libxds/xdr-encode-double.c	2001/08/01 15:25:47	1.2
  @@ -27,7 +27,9 @@
   
   #include "internal.h"
   
  -int xdr_decode_double(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  +int xdr_encode_double(xds_t* xds, void* engine_context,
  +		      void* buffer, size_t buffer_size, size_t* used_buffer_size,
  +		      va_list* args)
       {
       return -1;
       }
  Index: ossp-pkg/srpc/libxds/xdr-encode-int32.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xdr-encode-int32.c
  --- ossp-pkg/srpc/libxds/xdr-encode-int32.c	2001/07/23 15:33:42	1.3
  +++ ossp-pkg/srpc/libxds/xdr-encode-int32.c	2001/08/01 15:25:47	1.4
  @@ -25,40 +25,33 @@
      SUCH DAMAGE.
   */
   
  -#include <assert.h>
   #include "internal.h"
   
  -int xdr_encode_int32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  +int xdr_encode_int32(xds_t* xds, void* engine_context,
  +		     void* buffer, size_t buffer_size, size_t* used_buffer_size,
  +		     va_list* args)
       {
  -    /* Consistency checks. */
  +    xds_uint32_t tmp;
  +    xds_int32_t value;
   
  -    assert(xds != NULL);
  -    assert(buffer != NULL);
  -    assert(buffer_size != 0);
  -    assert(args != NULL);
  -    if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  -	return XDS_ERR_INVALID_ARG;
  +    xds_init_encoding_engine(4);
   
       /* Get value and format it into the buffer. */
   
  -    if (buffer_size >= 4)
  +    value = va_arg(*args, xds_uint32_t);
  +    if (value < 0)
   	{
  -	xds_uint32_t tmp;
  -	xds_int32_t value = va_arg(*args, xds_uint32_t);
  -	if (value < 0)
  -	    {
  -	    value = 0 - value;
  -	    tmp = 0 - (xds_uint32_t)value;
  -	    }
  -	else
  -	    tmp = (xds_uint32_t)value;
  -	((xds_uint8_t*)buffer)[0] = (tmp >> 24) & 0x000000ff;
  -	((xds_uint8_t*)buffer)[1] = (tmp >> 16) & 0x000000ff;
  -	((xds_uint8_t*)buffer)[2] = (tmp >>  8) & 0x000000ff;
  -	((xds_uint8_t*)buffer)[3] = (tmp >>  0) & 0x000000ff;
  +	value = 0 - value;
  +	tmp = 0 - (xds_uint32_t)value;
   	}
  +    else
  +	tmp = (xds_uint32_t)value;
  +    ((xds_uint8_t*)buffer)[0] = (tmp >> 24) & 0x000000ff;
  +    ((xds_uint8_t*)buffer)[1] = (tmp >> 16) & 0x000000ff;
  +    ((xds_uint8_t*)buffer)[2] = (tmp >>  8) & 0x000000ff;
  +    ((xds_uint8_t*)buffer)[3] = (tmp >>  0) & 0x000000ff;
   
       /* Done. */
   
  -    return 4;
  +    return XDS_OK;
       }
  Index: ossp-pkg/srpc/libxds/xdr-encode-int64.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xdr-encode-int64.c
  --- ossp-pkg/srpc/libxds/xdr-encode-int64.c	2001/07/23 15:33:42	1.3
  +++ ossp-pkg/srpc/libxds/xdr-encode-int64.c	2001/08/01 15:25:47	1.4
  @@ -25,44 +25,37 @@
      SUCH DAMAGE.
   */
   
  -#include <assert.h>
   #include "internal.h"
   
  -int xdr_encode_int64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  +int xdr_encode_int64(xds_t* xds, void* engine_context,
  +		     void* buffer, size_t buffer_size, size_t* used_buffer_size,
  +		     va_list* args)
       {
  -    /* Consistency checks. */
  +    xds_uint64_t tmp;
  +    xds_int64_t  value;
   
  -    assert(xds != NULL);
  -    assert(buffer != NULL);
  -    assert(buffer_size != 0);
  -    assert(args != NULL);
  -    if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  -	return XDS_ERR_INVALID_ARG;
  +    xds_init_encoding_engine(8);
   
       /* Get value and format it into the buffer. */
   
  -    if (buffer_size >= 8)
  +    value = va_arg(*args, xds_uint64_t);
  +    if (value < 0)
   	{
  -	xds_uint64_t tmp;
  -	xds_int64_t  value = va_arg(*args, xds_uint64_t);
  -	if (value < 0)
  -	    {
  -	    value = 0 - value;
  -	    tmp = 0 - (xds_uint64_t)value;
  -	    }
  -	else
  -	    tmp = (xds_uint64_t)value;
  -	((xds_uint8_t*)buffer)[0] = (tmp >> 56) & 0x000000ff;
  -	((xds_uint8_t*)buffer)[1] = (tmp >> 48) & 0x000000ff;
  -	((xds_uint8_t*)buffer)[2] = (tmp >> 40) & 0x000000ff;
  -	((xds_uint8_t*)buffer)[3] = (tmp >> 32) & 0x000000ff;
  -	((xds_uint8_t*)buffer)[4] = (tmp >> 24) & 0x000000ff;
  -	((xds_uint8_t*)buffer)[5] = (tmp >> 16) & 0x000000ff;
  -	((xds_uint8_t*)buffer)[6] = (tmp >>  8) & 0x000000ff;
  -	((xds_uint8_t*)buffer)[7] = (tmp >>  0) & 0x000000ff;
  +	value = 0 - value;
  +	tmp = 0 - (xds_uint64_t)value;
   	}
  +    else
  +	tmp = (xds_uint64_t)value;
  +    ((xds_uint8_t*)buffer)[0] = (tmp >> 56) & 0x000000ff;
  +    ((xds_uint8_t*)buffer)[1] = (tmp >> 48) & 0x000000ff;
  +    ((xds_uint8_t*)buffer)[2] = (tmp >> 40) & 0x000000ff;
  +    ((xds_uint8_t*)buffer)[3] = (tmp >> 32) & 0x000000ff;
  +    ((xds_uint8_t*)buffer)[4] = (tmp >> 24) & 0x000000ff;
  +    ((xds_uint8_t*)buffer)[5] = (tmp >> 16) & 0x000000ff;
  +    ((xds_uint8_t*)buffer)[6] = (tmp >>  8) & 0x000000ff;
  +    ((xds_uint8_t*)buffer)[7] = (tmp >>  0) & 0x000000ff;
   
       /* Done. */
   
  -    return 8;
  +    return XDS_OK;
       }
  Index: ossp-pkg/srpc/libxds/xdr-encode-octetstream.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xdr-encode-octetstream.c
  --- ossp-pkg/srpc/libxds/xdr-encode-octetstream.c	2001/07/23 15:33:42	1.4
  +++ ossp-pkg/srpc/libxds/xdr-encode-octetstream.c	2001/08/01 15:25:47	1.5
  @@ -25,47 +25,45 @@
      SUCH DAMAGE.
   */
   
  -#include <assert.h>
   #include <string.h>
   #include "internal.h"
   
  -int xdr_encode_octetstream(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  +int xdr_encode_octetstream(xds_t* xds, void* engine_context,
  +			   void* buffer, size_t buffer_size, size_t* used_buffer_size,
  +			   va_list* args)
       {
       xds_uint8_t* p;
       size_t       p_len;
       size_t       padding;
   
  -    /* Consistency checks. */
  +    xds_init_encoding_engine(4);
   
  -    assert(xds != NULL);
  -    assert(buffer != NULL);
  -    assert(buffer_size != 0);
  -    assert(args != NULL);
  -    if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  -	return XDS_ERR_INVALID_ARG;
  -
       /* Get value from stack and calculate the correct amount of
          padding. */
   
       p       = (xds_uint8_t*)va_arg(*args, void*);
  -    assert(p != NULL);
  +    xds_check_parameter(p != NULL);
       p_len   = va_arg(*args, size_t);
       padding = (4 - (p_len & 0x03)) & 0x03;
       assert((p_len + padding) % 4 == 0);
   
  +    /* We need (4 + p_len + padding) bytes in the buffer to format our
  +       parameter. If we don't have them, return an underflow error. */
  +
  +    *used_buffer_size = 4 + p_len + padding;
  +    if (buffer_size < *used_buffer_size)
  +	return XDS_ERR_OVERFLOW;
  +
       /* Format the values into the buffer. */
   
  -    if (buffer_size >= 4 + p_len + padding)
  -	{
  -	((xds_uint8_t*)buffer)[0] = (p_len >> 24) & 0x000000ff;
  -	((xds_uint8_t*)buffer)[1] = (p_len >> 16) & 0x000000ff;
  -	((xds_uint8_t*)buffer)[2] = (p_len >>  8) & 0x000000ff;
  -	((xds_uint8_t*)buffer)[3] = (p_len >>  0) & 0x000000ff;
  -	memmove((xds_uint8_t*)buffer+4, p, p_len);
  -	memset((xds_uint8_t*)buffer+4+p_len, 0, padding);
  -	}
  +    ((xds_uint8_t*)buffer)[0] = (p_len >> 24) & 0x000000ff;
  +    ((xds_uint8_t*)buffer)[1] = (p_len >> 16) & 0x000000ff;
  +    ((xds_uint8_t*)buffer)[2] = (p_len >>  8) & 0x000000ff;
  +    ((xds_uint8_t*)buffer)[3] = (p_len >>  0) & 0x000000ff;
  +    memmove((xds_uint8_t*)buffer+4, p, p_len);
  +    memset((xds_uint8_t*)buffer+4+p_len, 0, padding);
   
       /* Done. */
   
  -    return 4 + p_len + padding;
  +    return XDS_OK;
       }
  Index: ossp-pkg/srpc/libxds/xdr-encode-string.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 xdr-encode-string.c
  --- ossp-pkg/srpc/libxds/xdr-encode-string.c	2001/07/23 15:33:42	1.5
  +++ ossp-pkg/srpc/libxds/xdr-encode-string.c	2001/08/01 15:25:47	1.6
  @@ -25,47 +25,45 @@
      SUCH DAMAGE.
   */
   
  -#include <assert.h>
   #include <string.h>
   #include "internal.h"
   
  -int xdr_encode_string(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  +int xdr_encode_string(xds_t* xds, void* engine_context,
  +		      void* buffer, size_t buffer_size, size_t* used_buffer_size,
  +		      va_list* args)
       {
       char*  p;
       size_t p_len;
       size_t padding;
   
  -    /* Consistency checks. */
  +    xds_init_encoding_engine(4);
   
  -    assert(xds != NULL);
  -    assert(buffer != NULL);
  -    assert(buffer_size != 0);
  -    assert(args != NULL);
  -    if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  -	return XDS_ERR_INVALID_ARG;
  -
       /* Get value from stack and calculate the correct amount of
          padding. */
   
       p       = va_arg(*args, char*);
  -    assert(p != NULL);
  +    xds_check_parameter(p != NULL);
       p_len   = strlen(p);
       padding = (4 - (p_len & 0x03)) & 0x03;
       assert((p_len + padding) % 4 == 0);
   
  +    /* We need (4 + p_len + padding) bytes in the buffer to format our
  +       parameter. If we don't have them, return an underflow error. */
  +
  +    *used_buffer_size = 4 + p_len + padding;
  +    if (buffer_size < *used_buffer_size)
  +	return XDS_ERR_OVERFLOW;
  +
       /* Format the values into the buffer. */
   
  -    if (buffer_size >= 4 + p_len + padding)
  -	{
  -	((xds_uint8_t*)buffer)[0] = (p_len >> 24) & 0x000000ff;
  -	((xds_uint8_t*)buffer)[1] = (p_len >> 16) & 0x000000ff;
  -	((xds_uint8_t*)buffer)[2] = (p_len >>  8) & 0x000000ff;
  -	((xds_uint8_t*)buffer)[3] = (p_len >>  0) & 0x000000ff;
  -	memmove((xds_uint8_t*)buffer+4, p, p_len);
  -	memset((xds_uint8_t*)buffer+4+p_len, 0, padding);
  -	}
  +    ((xds_uint8_t*)buffer)[0] = (p_len >> 24) & 0x000000ff;
  +    ((xds_uint8_t*)buffer)[1] = (p_len >> 16) & 0x000000ff;
  +    ((xds_uint8_t*)buffer)[2] = (p_len >>  8) & 0x000000ff;
  +    ((xds_uint8_t*)buffer)[3] = (p_len >>  0) & 0x000000ff;
  +    memmove((xds_uint8_t*)buffer+4, p, p_len);
  +    memset((xds_uint8_t*)buffer+4+p_len, 0, padding);
   
       /* Done. */
   
  -    return 4 + p_len + padding;
  +    return XDS_OK;
       }
  Index: ossp-pkg/srpc/libxds/xdr-encode-uint32.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xdr-encode-uint32.c
  --- ossp-pkg/srpc/libxds/xdr-encode-uint32.c	2001/07/23 15:33:42	1.3
  +++ ossp-pkg/srpc/libxds/xdr-encode-uint32.c	2001/08/01 15:25:47	1.4
  @@ -25,32 +25,25 @@
      SUCH DAMAGE.
   */
   
  -#include <assert.h>
   #include "internal.h"
   
  -int xdr_encode_uint32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  +int xdr_encode_uint32(xds_t* xds, void* engine_context,
  +		      void* buffer, size_t buffer_size, size_t* used_buffer_size,
  +		      va_list* args)
       {
  -    /* Consistency checks. */
  +    xds_uint32_t value;
   
  -    assert(xds != NULL);
  -    assert(buffer != NULL);
  -    assert(buffer_size != 0);
  -    assert(args != NULL);
  -    if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  -	return XDS_ERR_INVALID_ARG;
  +    xds_init_encoding_engine(4);
   
       /* Get value and format it into the buffer. */
   
  -    if (buffer_size >= 4)
  -	{
  -	xds_uint32_t value = va_arg(*args, xds_uint32_t);
  -	((xds_uint8_t*)buffer)[0] = (value >> 24) & 0x000000ff;
  -	((xds_uint8_t*)buffer)[1] = (value >> 16) & 0x000000ff;
  -	((xds_uint8_t*)buffer)[2] = (value >>  8) & 0x000000ff;
  -	((xds_uint8_t*)buffer)[3] = (value >>  0) & 0x000000ff;
  -	}
  +    value = va_arg(*args, xds_uint32_t);
  +    ((xds_uint8_t*)buffer)[0] = (value >> 24) & 0x000000ff;
  +    ((xds_uint8_t*)buffer)[1] = (value >> 16) & 0x000000ff;
  +    ((xds_uint8_t*)buffer)[2] = (value >>  8) & 0x000000ff;
  +    ((xds_uint8_t*)buffer)[3] = (value >>  0) & 0x000000ff;
   
       /* Done. */
   
  -    return 4;
  +    return XDS_OK;
       }
  Index: ossp-pkg/srpc/libxds/xdr-encode-uint64.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xdr-encode-uint64.c
  --- ossp-pkg/srpc/libxds/xdr-encode-uint64.c	2001/07/23 15:33:42	1.3
  +++ ossp-pkg/srpc/libxds/xdr-encode-uint64.c	2001/08/01 15:25:47	1.4
  @@ -25,36 +25,29 @@
      SUCH DAMAGE.
   */
   
  -#include <assert.h>
   #include "internal.h"
   
  -int xdr_encode_uint64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  +int xdr_encode_uint64(xds_t* xds, void* engine_context,
  +		      void* buffer, size_t buffer_size, size_t* used_buffer_size,
  +		      va_list* args)
       {
  -    /* Consistency checks. */
  +    xds_uint64_t value;
   
  -    assert(xds != NULL);
  -    assert(buffer != NULL);
  -    assert(buffer_size != 0);
  -    assert(args != NULL);
  -    if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  -	return XDS_ERR_INVALID_ARG;
  +    xds_init_encoding_engine(8);
   
       /* Get value and format it into the buffer. */
   
  -    if (buffer_size >= 8)
  -	{
  -	xds_uint64_t value = va_arg(*args, xds_uint64_t);
  -	((xds_uint8_t*)buffer)[0] = (value >> 56) & 0x000000ff;
  -	((xds_uint8_t*)buffer)[1] = (value >> 48) & 0x000000ff;
  -	((xds_uint8_t*)buffer)[2] = (value >> 40) & 0x000000ff;
  -	((xds_uint8_t*)buffer)[3] = (value >> 32) & 0x000000ff;
  -	((xds_uint8_t*)buffer)[4] = (value >> 24) & 0x000000ff;
  -	((xds_uint8_t*)buffer)[5] = (value >> 16) & 0x000000ff;
  -	((xds_uint8_t*)buffer)[6] = (value >>  8) & 0x000000ff;
  -	((xds_uint8_t*)buffer)[7] = (value >>  0) & 0x000000ff;
  -	}
  +    value = va_arg(*args, xds_uint64_t);
  +    ((xds_uint8_t*)buffer)[0] = (value >> 56) & 0x000000ff;
  +    ((xds_uint8_t*)buffer)[1] = (value >> 48) & 0x000000ff;
  +    ((xds_uint8_t*)buffer)[2] = (value >> 40) & 0x000000ff;
  +    ((xds_uint8_t*)buffer)[3] = (value >> 32) & 0x000000ff;
  +    ((xds_uint8_t*)buffer)[4] = (value >> 24) & 0x000000ff;
  +    ((xds_uint8_t*)buffer)[5] = (value >> 16) & 0x000000ff;
  +    ((xds_uint8_t*)buffer)[6] = (value >>  8) & 0x000000ff;
  +    ((xds_uint8_t*)buffer)[7] = (value >>  0) & 0x000000ff;
   
       /* Done. */
   
  -    return 8;
  +    return XDS_OK;
       }
  Index: ossp-pkg/srpc/libxds/xds.h.in
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 xds.h.in
  --- ossp-pkg/srpc/libxds/xds.h.in	2001/07/31 15:27:45	1.6
  +++ ossp-pkg/srpc/libxds/xds.h.in	2001/08/01 15:25:47	1.7
  @@ -61,10 +61,8 @@
   struct xds_context;
   typedef struct xds_context xds_t;
   
  -typedef int (*xds_engine_t)(xds_t* xds,
  -			    void* engine_context,
  -			    void* buffer,
  -			    size_t buffer_size,
  +typedef int (*xds_engine_t)(xds_t* xds, void* engine_context,
  +			    void* buffer, size_t buffer_size, size_t* used_buffer_size,
   			    va_list* args);
   
   xds_t* xds_init(xds_mode_t);
  @@ -73,7 +71,7 @@
   int xds_register(xds_t* xds, const char* name, xds_engine_t engine, void* engine_context);
   int xds_unregister(xds_t* xds, const char* name);
   
  -int xds_setbuffer(xds_t* xds, xds_scope_t flag, void*  buffer, size_t  buffer_len);
  +int xds_setbuffer(xds_t* xds, xds_scope_t flag, void* buffer, size_t buffer_len);
   int xds_getbuffer(xds_t* xds, xds_scope_t flag, void** buffer, size_t* buffer_len);
   
   int xds_encode(xds_t* xds, const char* fmt, ...);
  @@ -81,44 +79,45 @@
   int xds_vencode(xds_t* xds, const char* fmt, va_list args);
   int xds_vdecode(xds_t* xds, const char* fmt, va_list args);
   
  -int xdr_encode_uint32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  -int xdr_encode_int32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  -int xdr_encode_uint64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  -int xdr_encode_int64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  +#define declare_formatting_engine(x) \
  +    int x(xds_t* xds, void* engine_context, \
  +	  void* buffer, size_t buffer_size, size_t* used_buffer_size, \
  +	  va_list* args)
  +
  +declare_formatting_engine(xdr_encode_uint32);
  +declare_formatting_engine(xdr_decode_uint32);
  +declare_formatting_engine(xdr_encode_int32);
  +declare_formatting_engine(xdr_decode_int32);
  +declare_formatting_engine(xdr_encode_uint64);
  +declare_formatting_engine(xdr_decode_uint64);
  +declare_formatting_engine(xdr_encode_int64);
  +declare_formatting_engine(xdr_decode_int64);
  +declare_formatting_engine(xdr_encode_double);
  +declare_formatting_engine(xdr_decode_double);
  +declare_formatting_engine(xdr_encode_octetstream);
  +declare_formatting_engine(xdr_decode_octetstream);
  +declare_formatting_engine(xdr_encode_string);
  +declare_formatting_engine(xdr_decode_string);
  +
  +declare_formatting_engine(xml_encode_begin);
  +declare_formatting_engine(xml_decode_begin);
  +declare_formatting_engine(xml_encode_end);
  +declare_formatting_engine(xml_decode_end);
  +declare_formatting_engine(xml_encode_uint32);
  +declare_formatting_engine(xml_decode_uint32);
  +declare_formatting_engine(xml_encode_int32);
  +declare_formatting_engine(xml_decode_int32);
  +declare_formatting_engine(xml_encode_uint64);
  +declare_formatting_engine(xml_decode_uint64);
  +declare_formatting_engine(xml_encode_int64);
  +declare_formatting_engine(xml_decode_int64);
  +declare_formatting_engine(xml_encode_double);
  +declare_formatting_engine(xml_decode_double);
  +declare_formatting_engine(xml_encode_octetstream);
  +declare_formatting_engine(xml_decode_octetstream);
  +declare_formatting_engine(xml_encode_string);
  +declare_formatting_engine(xml_decode_string);
   
  -int xdr_decode_uint32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  -int xdr_decode_int32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  -int xdr_decode_uint64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  -int xdr_decode_int64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  -
  -int xdr_encode_octetstream(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  -int xdr_decode_octetstream(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  -
  -int xdr_encode_string(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  -int xdr_decode_string(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  -
  -int xdr_encode_double(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  -int xdr_decode_double(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  -
  -
  -int xml_encode_int32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  -int xml_decode_int32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  -
  -int xml_encode_uint32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  -int xml_decode_uint32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  -
  -int xml_encode_int64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  -int xml_decode_int64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  -
  -int xml_encode_uint64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  -int xml_decode_uint64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  -
  -int xml_encode_double(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  -int xml_decode_double(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  -
  -int xml_encode_begin(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  -int xml_decode_begin(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  -int xml_encode_end(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  -int xml_decode_end(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
  +#undef declare_formatting_engine
   
   #endif /* !defined(__LIBXDS_H__) */
  Index: ossp-pkg/srpc/libxds/xml-decode-begin.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xml-decode-begin.c
  --- ossp-pkg/srpc/libxds/xml-decode-begin.c	2001/07/31 15:27:45	1.1
  +++ ossp-pkg/srpc/libxds/xml-decode-begin.c	2001/08/01 15:25:47	1.2
  @@ -26,25 +26,14 @@
   */
   
   #include <string.h>
  -#include <assert.h>
   #include "internal.h"
   
  -int xml_decode_begin(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  +int xml_decode_begin(xds_t* xds, void* engine_context,
  +		     void* buffer, size_t buffer_size, size_t* used_buffer_size,
  +		     va_list* args)
       {
  -    /* Consistency checks. */
  -
  -    assert(xds != NULL);
  -    assert(buffer != NULL);
  -    assert(buffer_size != 0);
  -    assert(args != NULL);
  -    if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  -	return XDS_ERR_INVALID_ARG;
  -
  -    if (buffer_size < strlen(xds_xml_begin_text))
  -	return XDS_ERR_UNDERFLOW;
  -
  +    xds_init_encoding_engine(strlen(xds_xml_begin_text));
       if (strncasecmp(buffer, xds_xml_begin_text, strlen(xds_xml_begin_text)) != 0)
   	return XDS_ERR_TYPE_MISMATCH;
  -
  -    return strlen(xds_xml_begin_text);
  +    return XDS_OK;
       }
  Index: ossp-pkg/srpc/libxds/xml-decode-double.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xml-decode-double.c
  --- ossp-pkg/srpc/libxds/xml-decode-double.c	2001/07/24 13:52:41	1.3
  +++ ossp-pkg/srpc/libxds/xml-decode-double.c	2001/08/01 15:25:47	1.4
  @@ -27,7 +27,9 @@
   
   #include "internal.h"
   
  -int xml_decode_double(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  +int xml_decode_double(xds_t* xds, void* engine_context,
  +		     void* buffer, size_t buffer_size, size_t* used_buffer_size,
  +		     va_list* args)
       {
       return -1;
       }
  Index: ossp-pkg/srpc/libxds/xml-decode-end.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xml-decode-end.c
  --- ossp-pkg/srpc/libxds/xml-decode-end.c	2001/07/31 15:28:14	1.1
  +++ ossp-pkg/srpc/libxds/xml-decode-end.c	2001/08/01 15:25:47	1.2
  @@ -26,25 +26,14 @@
   */
   
   #include <string.h>
  -#include <assert.h>
   #include "internal.h"
   
  -int xml_decode_end(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  +int xml_decode_end(xds_t* xds, void* engine_context,
  +		     void* buffer, size_t buffer_size, size_t* used_buffer_size,
  +		     va_list* args)
       {
  -    /* Consistency checks. */
  -
  -    assert(xds != NULL);
  -    assert(buffer != NULL);
  -    assert(buffer_size != 0);
  -    assert(args != NULL);
  -    if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  -	return XDS_ERR_INVALID_ARG;
  -
  -    if (buffer_size < strlen(xds_xml_end_text))
  -	return XDS_ERR_UNDERFLOW;
  -
  +    xds_init_decoding_engine(strlen(xds_xml_end_text));
       if (strncasecmp(buffer, xds_xml_end_text, strlen(xds_xml_end_text)) != 0)
   	return XDS_ERR_TYPE_MISMATCH;
  -
  -    return strlen(xds_xml_end_text);
  +    return XDS_OK;
       }
  Index: ossp-pkg/srpc/libxds/xml-decode-int32.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xml-decode-int32.c
  --- ossp-pkg/srpc/libxds/xml-decode-int32.c	2001/07/24 13:52:41	1.2
  +++ ossp-pkg/srpc/libxds/xml-decode-int32.c	2001/08/01 15:25:47	1.3
  @@ -27,33 +27,21 @@
   
   #include <string.h>
   #include <ctype.h>
  -#include <assert.h>
   #include "internal.h"
   
  -int xml_decode_int32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  +int xml_decode_int32(xds_t* xds, void* engine_context,
  +		     void* buffer, size_t buffer_size, size_t* used_buffer_size,
  +		     va_list* args)
       {
       xds_int32_t* value;
       char* p;
       int negative;
   
  -    /* Consistency checks. */
  +    xds_init_decoding_engine(7 + 8 + 1);
   
  -    assert(xds != NULL);
  -    assert(buffer != NULL);
  -    assert(buffer_size != 0);
  -    assert(args != NULL);
  -    if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  -	return XDS_ERR_INVALID_ARG;
  -
  -    /* The buffer must contain at least opening tag, closing tag and
  -       one digit. Check whether it is large enough. */
  -
  -    if (buffer_size < 7 + 8 + 1)
  -	return XDS_ERR_UNDERFLOW;
  -
       /* Does the opening XML tag match? */
   
  -    if (strncmp(buffer, "<int32>", 7) != 0)
  +    if (strncasecmp(buffer, "<int32>", 7) != 0)
   	return XDS_ERR_TYPE_MISMATCH;
   
       /* Decode the representation of the value. */
  @@ -82,8 +70,9 @@
   
       if (p+8 > (char*)buffer + buffer_size)
   	return XDS_ERR_UNDERFLOW;
  -    else if (strncmp(p, "</int32>", 8) != 0)
  +    else if (strncasecmp(p, "</int32>", 8) != 0)
   	return XDS_ERR_TYPE_MISMATCH;
   
  -    return p + 8 - (char*)buffer;
  +    *used_buffer_size = p + 8 - (char*)buffer;
  +    return XDS_OK;
       }
  Index: ossp-pkg/srpc/libxds/xml-decode-int64.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xml-decode-int64.c
  --- ossp-pkg/srpc/libxds/xml-decode-int64.c	2001/07/24 13:52:41	1.3
  +++ ossp-pkg/srpc/libxds/xml-decode-int64.c	2001/08/01 15:25:47	1.4
  @@ -27,33 +27,21 @@
   
   #include <string.h>
   #include <ctype.h>
  -#include <assert.h>
   #include "internal.h"
   
  -int xml_decode_int64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  +int xml_decode_int64(xds_t* xds, void* engine_context,
  +		     void* buffer, size_t buffer_size, size_t* used_buffer_size,
  +		     va_list* args)
       {
       xds_int64_t* value;
       char* p;
       int negative;
   
  -    /* Consistency checks. */
  +    xds_init_decoding_engine(7 + 8 + 1);
   
  -    assert(xds != NULL);
  -    assert(buffer != NULL);
  -    assert(buffer_size != 0);
  -    assert(args != NULL);
  -    if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  -	return XDS_ERR_INVALID_ARG;
  -
  -    /* The buffer must contain at least opening tag, closing tag and
  -       one digit. Check whether it is large enough. */
  -
  -    if (buffer_size < 7 + 8 + 1)
  -	return XDS_ERR_UNDERFLOW;
  -
       /* Does the opening XML tag match? */
   
  -    if (strncmp(buffer, "<int64>", 7) != 0)
  +    if (strncasecmp(buffer, "<int64>", 7) != 0)
   	return XDS_ERR_TYPE_MISMATCH;
   
       /* Decode the representation of the value. */
  @@ -82,8 +70,9 @@
   
       if (p+8 > (char*)buffer + buffer_size)
   	return XDS_ERR_UNDERFLOW;
  -    else if (strncmp(p, "</int64>", 8) != 0)
  +    else if (strncasecmp(p, "</int64>", 8) != 0)
   	return XDS_ERR_TYPE_MISMATCH;
   
  -    return p + 8 - (char*)buffer;
  +    *used_buffer_size = p + 8 - (char*)buffer;
  +    return XDS_OK;
       }
  Index: ossp-pkg/srpc/libxds/xml-decode-uint32.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xml-decode-uint32.c
  --- ossp-pkg/srpc/libxds/xml-decode-uint32.c	2001/07/24 13:52:41	1.2
  +++ ossp-pkg/srpc/libxds/xml-decode-uint32.c	2001/08/01 15:25:47	1.3
  @@ -27,32 +27,20 @@
   
   #include <string.h>
   #include <ctype.h>
  -#include <assert.h>
   #include "internal.h"
   
  -int xml_decode_uint32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  +int xml_decode_uint32(xds_t* xds, void* engine_context,
  +		     void* buffer, size_t buffer_size, size_t* used_buffer_size,
  +		     va_list* args)
       {
       xds_uint32_t* value;
       char* p;
   
  -    /* Consistency checks. */
  +    xds_init_decoding_engine(8 + 9 + 1);
   
  -    assert(xds != NULL);
  -    assert(buffer != NULL);
  -    assert(buffer_size != 0);
  -    assert(args != NULL);
  -    if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  -	return XDS_ERR_INVALID_ARG;
  -
  -    /* The buffer must contain at least opening tag, closing tag and
  -       one digit. Check whether it is large enough. */
  -
  -    if (buffer_size < 8 + 9 + 1)
  -	return XDS_ERR_UNDERFLOW;
  -
       /* Does the opening XML tag match? */
   
  -    if (strncmp(buffer, "<uint32>", 8) != 0)
  +    if (strncasecmp(buffer, "<uint32>", 8) != 0)
   	return XDS_ERR_TYPE_MISMATCH;
   
       /* Decode the representation of the value. */
  @@ -72,8 +60,9 @@
   
       if (p+9 > (char*)buffer + buffer_size)
   	return XDS_ERR_UNDERFLOW;
  -    else if (strncmp(p, "</uint32>", 9) != 0)
  +    else if (strncasecmp(p, "</uint32>", 9) != 0)
   	return XDS_ERR_TYPE_MISMATCH;
   
  -    return p + 9 - (char*)buffer;
  +    *used_buffer_size = p + 9 - (char*)buffer;
  +    return XDS_OK;
       }
  Index: ossp-pkg/srpc/libxds/xml-decode-uint64.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xml-decode-uint64.c
  --- ossp-pkg/srpc/libxds/xml-decode-uint64.c	2001/07/24 13:52:41	1.3
  +++ ossp-pkg/srpc/libxds/xml-decode-uint64.c	2001/08/01 15:25:47	1.4
  @@ -27,32 +27,20 @@
   
   #include <string.h>
   #include <ctype.h>
  -#include <assert.h>
   #include "internal.h"
   
  -int xml_decode_uint64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  +int xml_decode_uint64(xds_t* xds, void* engine_context,
  +		     void* buffer, size_t buffer_size, size_t* used_buffer_size,
  +		     va_list* args)
       {
       xds_uint64_t* value;
       char* p;
   
  -    /* Consistency checks. */
  +    xds_init_decoding_engine(8 + 9 + 1);
   
  -    assert(xds != NULL);
  -    assert(buffer != NULL);
  -    assert(buffer_size != 0);
  -    assert(args != NULL);
  -    if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  -	return XDS_ERR_INVALID_ARG;
  -
  -    /* The buffer must contain at least opening tag, closing tag and
  -       one digit. Check whether it is large enough. */
  -
  -    if (buffer_size < 8 + 9 + 1)
  -	return XDS_ERR_UNDERFLOW;
  -
       /* Does the opening XML tag match? */
   
  -    if (strncmp(buffer, "<uint64>", 8) != 0)
  +    if (strncasecmp(buffer, "<uint64>", 8) != 0)
   	return XDS_ERR_TYPE_MISMATCH;
   
       /* Decode the representation of the value. */
  @@ -72,8 +60,9 @@
   
       if (p+9 > (char*)buffer + buffer_size)
   	return XDS_ERR_UNDERFLOW;
  -    else if (strncmp(p, "</uint64>", 9) != 0)
  +    else if (strncasecmp(p, "</uint64>", 9) != 0)
   	return XDS_ERR_TYPE_MISMATCH;
   
  -    return p + 9 - (char*)buffer;
  +    *used_buffer_size = p + 9 - (char*)buffer;
  +    return XDS_OK;
       }
  Index: ossp-pkg/srpc/libxds/xml-encode-begin.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xml-encode-begin.c
  --- ossp-pkg/srpc/libxds/xml-encode-begin.c	2001/07/31 15:27:45	1.1
  +++ ossp-pkg/srpc/libxds/xml-encode-begin.c	2001/08/01 15:25:47	1.2
  @@ -26,7 +26,6 @@
   */
   
   #include <string.h>
  -#include <assert.h>
   #include "internal.h"
   
   const char xds_xml_begin_text[] = \
  @@ -34,19 +33,11 @@
       "<!DOCTYPE xds SYSTEM \"http://www.ossp.org/pkg/xds/xds-xml.dtd\">\n" \
       "<xds>\n";
   
  -int xml_encode_begin(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  +int xml_encode_begin(xds_t* xds, void* engine_context,
  +		     void* buffer, size_t buffer_size, size_t* used_buffer_size,
  +		     va_list* args)
       {
  -    /* Consistency checks. */
  -
  -    assert(xds != NULL);
  -    assert(buffer != NULL);
  -    assert(buffer_size != 0);
  -    assert(args != NULL);
  -    if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  -	return XDS_ERR_INVALID_ARG;
  -
  -    if (buffer_size >= strlen(xds_xml_begin_text))
  -	memmove(buffer, xds_xml_begin_text, strlen(xds_xml_begin_text));
  -
  -    return strlen(xds_xml_begin_text);
  +    xds_init_encoding_engine(strlen(xds_xml_begin_text));
  +    memmove(buffer, xds_xml_begin_text, strlen(xds_xml_begin_text));
  +    return XDS_OK;
       }
  Index: ossp-pkg/srpc/libxds/xml-encode-double.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xml-encode-double.c
  --- ossp-pkg/srpc/libxds/xml-encode-double.c	2001/07/24 13:52:41	1.3
  +++ ossp-pkg/srpc/libxds/xml-encode-double.c	2001/08/01 15:25:47	1.4
  @@ -27,7 +27,9 @@
   
   #include "internal.h"
   
  -int xml_encode_double(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  +int xml_encode_double(xds_t* xds, void* engine_context,
  +		     void* buffer, size_t buffer_size, size_t* used_buffer_size,
  +		     va_list* args)
       {
       return -1;
       }
  Index: ossp-pkg/srpc/libxds/xml-encode-end.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xml-encode-end.c
  --- ossp-pkg/srpc/libxds/xml-encode-end.c	2001/07/31 15:28:14	1.1
  +++ ossp-pkg/srpc/libxds/xml-encode-end.c	2001/08/01 15:25:47	1.2
  @@ -26,24 +26,15 @@
   */
   
   #include <string.h>
  -#include <assert.h>
   #include "internal.h"
   
   const char xds_xml_end_text[] = "</xds>\n";
   
  -int xml_encode_end(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  +int xml_encode_end(xds_t* xds, void* engine_context,
  +		     void* buffer, size_t buffer_size, size_t* used_buffer_size,
  +		     va_list* args)
       {
  -    /* Consistency checks. */
  -
  -    assert(xds != NULL);
  -    assert(buffer != NULL);
  -    assert(buffer_size != 0);
  -    assert(args != NULL);
  -    if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  -	return XDS_ERR_INVALID_ARG;
  -
  -    if (buffer_size >= strlen(xds_xml_end_text))
  -	memmove(buffer, xds_xml_end_text, strlen(xds_xml_end_text));
  -
  -    return strlen(xds_xml_end_text);
  +    xds_init_encoding_engine(strlen(xds_xml_end_text));
  +    memmove(buffer, xds_xml_end_text, strlen(xds_xml_end_text));
  +    return XDS_OK;
       }
  Index: ossp-pkg/srpc/libxds/xml-encode-int32.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xml-encode-int32.c
  --- ossp-pkg/srpc/libxds/xml-encode-int32.c	2001/07/24 13:52:41	1.3
  +++ ossp-pkg/srpc/libxds/xml-encode-int32.c	2001/08/01 15:25:47	1.4
  @@ -26,10 +26,11 @@
   */
   
   #include <string.h>
  -#include <assert.h>
   #include "internal.h"
   
  -int xml_encode_int32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  +int xml_encode_int32(xds_t* xds, void* engine_context,
  +		     void* buffer, size_t buffer_size, size_t* used_buffer_size,
  +		     va_list* args)
       {
       xds_int32_t value;
       char buf[32];
  @@ -37,17 +38,11 @@
       char* p;
       int negative;
   
  -    /* Consistency checks. */
  +    xds_init_encoding_engine(7 + 8 + 11);
   
  -    assert(xds != NULL);
  -    assert(buffer != NULL);
  -    assert(buffer_size != 0);
  -    assert(args != NULL);
  -    if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  -	return XDS_ERR_INVALID_ARG;
  +    /* Get the value and format it into our buffer. Keep track of the
  +       length of the formatted result. */
   
  -    /* Format value into our buffer. */
  -
       value = va_arg(*args, xds_int32_t);
       if (value < 0)
   	{
  @@ -66,22 +61,19 @@
       while (value != 0);
       if (negative)
   	buf[i++] = '-';
  -
  -    /* Check the buffer size. */
  -
  -    if (buffer_size < 7 + 8 + i)
  -	return 7 + 8 + i;
   
  -    /* Write result into the buffer. */
  +    /* Now that we know the correct size of our data's representation,
  +       write it into the buffer. */
   
  +    *used_buffer_size = 7 + 8 + i;
       p = buffer;
  -    strcpy(p, "<int32>");
  +    memmove(p, "<int32>", 7);
       p += 7;
       for (j = i; j > 0; )
   	{
   	*p++ = buf[--j];
   	}
  -    strcpy(p, "</int32>");
  +    memmove(p, "</int32>", 8);
   
  -    return 7 + 8 + i;
  +    return XDS_OK;
       }
  Index: ossp-pkg/srpc/libxds/xml-encode-int64.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xml-encode-int64.c
  --- ossp-pkg/srpc/libxds/xml-encode-int64.c	2001/07/24 13:52:41	1.3
  +++ ossp-pkg/srpc/libxds/xml-encode-int64.c	2001/08/01 15:25:47	1.4
  @@ -26,10 +26,11 @@
   */
   
   #include <string.h>
  -#include <assert.h>
   #include "internal.h"
   
  -int xml_encode_int64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  +int xml_encode_int64(xds_t* xds, void* engine_context,
  +		     void* buffer, size_t buffer_size, size_t* used_buffer_size,
  +		     va_list* args)
       {
       xds_int64_t value;
       char buf[64];
  @@ -37,15 +38,8 @@
       char* p;
       int negative;
   
  -    /* Consistency checks. */
  +    xds_init_encoding_engine(7 + 8 + 21);
   
  -    assert(xds != NULL);
  -    assert(buffer != NULL);
  -    assert(buffer_size != 0);
  -    assert(args != NULL);
  -    if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  -	return XDS_ERR_INVALID_ARG;
  -
       /* Format value into our buffer. */
   
       value = va_arg(*args, xds_int64_t);
  @@ -67,21 +61,20 @@
       if (negative)
   	buf[i++] = '-';
   
  -    /* Check the buffer size. */
  +    /* Store the correct buffer size. */
   
  -    if (buffer_size < 7 + 8 + i)
  -	return 7 + 8 + i;
  +    *used_buffer_size = 7 + 8 + i;
   
       /* Write result into the buffer. */
   
       p = buffer;
  -    strcpy(p, "<int64>");
  +    memmove(p, "<int64>", 7);
       p += 7;
       for (j = i; j > 0; )
   	{
   	*p++ = buf[--j];
   	}
  -    strcpy(p, "</int64>");
  +    memmove(p, "</int64>", 8);
   
  -    return 7 + 8 + i;
  +    return XDS_OK;
       }
  Index: ossp-pkg/srpc/libxds/xml-encode-uint32.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xml-encode-uint32.c
  --- ossp-pkg/srpc/libxds/xml-encode-uint32.c	2001/07/24 13:52:41	1.2
  +++ ossp-pkg/srpc/libxds/xml-encode-uint32.c	2001/08/01 15:25:47	1.3
  @@ -26,25 +26,19 @@
   */
   
   #include <string.h>
  -#include <assert.h>
   #include "internal.h"
   
  -int xml_encode_uint32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  +int xml_encode_uint32(xds_t* xds, void* engine_context,
  +		     void* buffer, size_t buffer_size, size_t* used_buffer_size,
  +		     va_list* args)
       {
       xds_uint32_t value;
       char buf[32];
       size_t i, j;
       char* p;
   
  -    /* Consistency checks. */
  +    xds_init_encoding_engine(8 + 9 + 10);
   
  -    assert(xds != NULL);
  -    assert(buffer != NULL);
  -    assert(buffer_size != 0);
  -    assert(args != NULL);
  -    if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  -	return XDS_ERR_INVALID_ARG;
  -
       /* Format value into our buffer. */
   
       value = va_arg(*args, xds_uint32_t);
  @@ -57,21 +51,20 @@
   	}
       while (value != 0);
   
  -    /* Check the buffer size. */
  +    /* Store the correct buffer size. */
   
  -    if (buffer_size < 8 + 9 + i)
  -	return 8 + 9 + i;
  +    *used_buffer_size = 8 + 9 + i;
   
       /* Write result into the buffer. */
   
       p = buffer;
  -    strcpy(p, "<uint32>");
  +    memmove(p, "<uint32>", 8);
       p += 8;
       for (j = i; j > 0; )
   	{
   	*p++ = buf[--j];
   	}
  -    strcpy(p, "</uint32>");
  +    memmove(p, "</uint32>", 9);
   
  -    return 8 + 9 + i;
  +    return XDS_OK;
       }
  Index: ossp-pkg/srpc/libxds/xml-encode-uint64.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xml-encode-uint64.c
  --- ossp-pkg/srpc/libxds/xml-encode-uint64.c	2001/07/24 13:52:41	1.3
  +++ ossp-pkg/srpc/libxds/xml-encode-uint64.c	2001/08/01 15:25:47	1.4
  @@ -26,25 +26,19 @@
   */
   
   #include <string.h>
  -#include <assert.h>
   #include "internal.h"
   
  -int xml_encode_uint64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
  +int xml_encode_uint64(xds_t* xds, void* engine_context,
  +		     void* buffer, size_t buffer_size, size_t* used_buffer_size,
  +		     va_list* args)
       {
       xds_uint64_t value;
       char buf[64];
       size_t i, j;
       char* p;
   
  -    /* Consistency checks. */
  +    xds_init_encoding_engine(8 + 9 + 20);
   
  -    assert(xds != NULL);
  -    assert(buffer != NULL);
  -    assert(buffer_size != 0);
  -    assert(args != NULL);
  -    if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
  -	return XDS_ERR_INVALID_ARG;
  -
       /* Format value into our buffer. */
   
       value = va_arg(*args, xds_uint64_t);
  @@ -57,21 +51,20 @@
   	}
       while (value != 0);
   
  -    /* Check the buffer size. */
  +    /* Store the correct buffer size. */
   
  -    if (buffer_size < 8 + 9 + i)
  -	return 8 + 9 + i;
  +    *used_buffer_size = 8 + 9 + i;
   
       /* Write result into the buffer. */
   
       p = buffer;
  -    strcpy(p, "<uint64>");
  +    memmove(p, "<uint64>", 8);
       p += 8;
       for (j = i; j > 0; )
   	{
   	*p++ = buf[--j];
   	}
  -    strcpy(p, "</uint64>");
  +    memmove(p, "</uint64>", 9);
   
  -    return 8 + 9 + i;
  +    return XDS_OK;
       }

From ossp-cvs-owner@ossp.org  Thu Aug  2 10:10:16 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f728AFm75567; Thu, 2 Aug 2001 10:10:15 +0200 (CEST)
Date: Thu, 2 Aug 2001 10:10:15 +0200 (CEST)
Message-Id: <200108020810.f728AFm75567@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xdr-decode-double.c xdr-decode-int32....
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   02-Aug-2001 10:10:15
  Branch: HEAD                             Handle: 2001080209101201

  Modified files:
    ossp-pkg/srpc/libxds    xdr-decode-double.c xdr-decode-int32.c
                            xdr-decode-int64.c xdr-decode-octetstream.c
                            xdr-decode-string.c xdr-decode-uint32.c
                            xdr-decode-uint64.c xdr-encode-double.c
                            xdr-encode-int32.c xdr-encode-int64.c
                            xdr-encode-octetstream.c xdr-encode-string.c
                            xdr-encode-uint32.c xdr-encode-uint64.c
                            xml-decode-begin.c xml-decode-double.c
                            xml-decode-end.c xml-decode-int32.c
                            xml-decode-int64.c xml-decode-uint32.c
                            xml-decode-uint64.c xml-encode-begin.c
                            xml-encode-double.c xml-encode-end.c
                            xml-encode-int32.c xml-encode-int64.c
                            xml-encode-uint32.c xml-encode-uint64.c

  Log:
    Include xds.h, not internal.h!

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/srpc/libxds/xdr-decode-double.c
    1.5         +1  -1      ossp-pkg/srpc/libxds/xdr-decode-int32.c
    1.5         +1  -1      ossp-pkg/srpc/libxds/xdr-decode-int64.c
    1.5         +1  -1      ossp-pkg/srpc/libxds/xdr-decode-octetstream.c
    1.6         +1  -1      ossp-pkg/srpc/libxds/xdr-decode-string.c
    1.5         +1  -1      ossp-pkg/srpc/libxds/xdr-decode-uint32.c
    1.5         +1  -1      ossp-pkg/srpc/libxds/xdr-decode-uint64.c
    1.3         +1  -1      ossp-pkg/srpc/libxds/xdr-encode-double.c
    1.5         +1  -1      ossp-pkg/srpc/libxds/xdr-encode-int32.c
    1.5         +1  -1      ossp-pkg/srpc/libxds/xdr-encode-int64.c
    1.6         +1  -1      ossp-pkg/srpc/libxds/xdr-encode-octetstream.c
    1.7         +1  -1      ossp-pkg/srpc/libxds/xdr-encode-string.c
    1.5         +1  -1      ossp-pkg/srpc/libxds/xdr-encode-uint32.c
    1.5         +1  -1      ossp-pkg/srpc/libxds/xdr-encode-uint64.c
    1.3         +1  -1      ossp-pkg/srpc/libxds/xml-decode-begin.c
    1.5         +1  -1      ossp-pkg/srpc/libxds/xml-decode-double.c
    1.3         +1  -1      ossp-pkg/srpc/libxds/xml-decode-end.c
    1.4         +1  -1      ossp-pkg/srpc/libxds/xml-decode-int32.c
    1.5         +1  -1      ossp-pkg/srpc/libxds/xml-decode-int64.c
    1.4         +1  -1      ossp-pkg/srpc/libxds/xml-decode-uint32.c
    1.5         +1  -1      ossp-pkg/srpc/libxds/xml-decode-uint64.c
    1.3         +1  -1      ossp-pkg/srpc/libxds/xml-encode-begin.c
    1.5         +1  -1      ossp-pkg/srpc/libxds/xml-encode-double.c
    1.3         +1  -1      ossp-pkg/srpc/libxds/xml-encode-end.c
    1.5         +1  -1      ossp-pkg/srpc/libxds/xml-encode-int32.c
    1.5         +1  -1      ossp-pkg/srpc/libxds/xml-encode-int64.c
    1.4         +1  -1      ossp-pkg/srpc/libxds/xml-encode-uint32.c
    1.5         +1  -1      ossp-pkg/srpc/libxds/xml-encode-uint64.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xdr-decode-double.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xdr-decode-double.c
  --- ossp-pkg/srpc/libxds/xdr-decode-double.c	2001/08/01 15:25:47	1.2
  +++ ossp-pkg/srpc/libxds/xdr-decode-double.c	2001/08/02 08:10:13	1.3
  @@ -25,7 +25,7 @@
      SUCH DAMAGE.
   */
   
  -#include "internal.h"
  +#include "xds.h"
   
   int xdr_decode_double(xds_t* xds, void* engine_context,
   		      void* buffer, size_t buffer_size, size_t* used_buffer_size,
  Index: ossp-pkg/srpc/libxds/xdr-decode-int32.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xdr-decode-int32.c
  --- ossp-pkg/srpc/libxds/xdr-decode-int32.c	2001/08/01 15:25:47	1.4
  +++ ossp-pkg/srpc/libxds/xdr-decode-int32.c	2001/08/02 08:10:13	1.5
  @@ -25,7 +25,7 @@
      SUCH DAMAGE.
   */
   
  -#include "internal.h"
  +#include "xds.h"
   
   int xdr_decode_int32(xds_t* xds, void* engine_context,
   		     void* buffer, size_t buffer_size, size_t* used_buffer_size,
  Index: ossp-pkg/srpc/libxds/xdr-decode-int64.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xdr-decode-int64.c
  --- ossp-pkg/srpc/libxds/xdr-decode-int64.c	2001/08/01 15:25:47	1.4
  +++ ossp-pkg/srpc/libxds/xdr-decode-int64.c	2001/08/02 08:10:13	1.5
  @@ -25,7 +25,7 @@
      SUCH DAMAGE.
   */
   
  -#include "internal.h"
  +#include "xds.h"
   
   int xdr_decode_int64(xds_t* xds, void* engine_context,
   		     void* buffer, size_t buffer_size, size_t* used_buffer_size,
  Index: ossp-pkg/srpc/libxds/xdr-decode-octetstream.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xdr-decode-octetstream.c
  --- ossp-pkg/srpc/libxds/xdr-decode-octetstream.c	2001/08/01 15:25:47	1.4
  +++ ossp-pkg/srpc/libxds/xdr-decode-octetstream.c	2001/08/02 08:10:13	1.5
  @@ -26,7 +26,7 @@
   */
   
   #include <string.h>
  -#include "internal.h"
  +#include "xds.h"
   
   int xdr_decode_octetstream(xds_t* xds, void* engine_context,
   			   void* buffer, size_t buffer_size, size_t* used_buffer_size,
  Index: ossp-pkg/srpc/libxds/xdr-decode-string.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 xdr-decode-string.c
  --- ossp-pkg/srpc/libxds/xdr-decode-string.c	2001/08/01 15:25:47	1.5
  +++ ossp-pkg/srpc/libxds/xdr-decode-string.c	2001/08/02 08:10:13	1.6
  @@ -26,7 +26,7 @@
   */
   
   #include <string.h>
  -#include "internal.h"
  +#include "xds.h"
   
   int xdr_decode_string(xds_t* xds, void* engine_context,
   		      void* buffer, size_t buffer_size, size_t* used_buffer_size,
  Index: ossp-pkg/srpc/libxds/xdr-decode-uint32.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xdr-decode-uint32.c
  --- ossp-pkg/srpc/libxds/xdr-decode-uint32.c	2001/08/01 15:25:47	1.4
  +++ ossp-pkg/srpc/libxds/xdr-decode-uint32.c	2001/08/02 08:10:13	1.5
  @@ -25,7 +25,7 @@
      SUCH DAMAGE.
   */
   
  -#include "internal.h"
  +#include "xds.h"
   
   int xdr_decode_uint32(xds_t* xds, void* engine_context,
   		      void* buffer, size_t buffer_size, size_t* used_buffer_size,
  Index: ossp-pkg/srpc/libxds/xdr-decode-uint64.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xdr-decode-uint64.c
  --- ossp-pkg/srpc/libxds/xdr-decode-uint64.c	2001/08/01 15:25:47	1.4
  +++ ossp-pkg/srpc/libxds/xdr-decode-uint64.c	2001/08/02 08:10:13	1.5
  @@ -25,7 +25,7 @@
      SUCH DAMAGE.
   */
   
  -#include "internal.h"
  +#include "xds.h"
   
   int xdr_decode_uint64(xds_t* xds, void* engine_context,
   		      void* buffer, size_t buffer_size, size_t* used_buffer_size,
  Index: ossp-pkg/srpc/libxds/xdr-encode-double.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xdr-encode-double.c
  --- ossp-pkg/srpc/libxds/xdr-encode-double.c	2001/08/01 15:25:47	1.2
  +++ ossp-pkg/srpc/libxds/xdr-encode-double.c	2001/08/02 08:10:13	1.3
  @@ -25,7 +25,7 @@
      SUCH DAMAGE.
   */
   
  -#include "internal.h"
  +#include "xds.h"
   
   int xdr_encode_double(xds_t* xds, void* engine_context,
   		      void* buffer, size_t buffer_size, size_t* used_buffer_size,
  Index: ossp-pkg/srpc/libxds/xdr-encode-int32.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xdr-encode-int32.c
  --- ossp-pkg/srpc/libxds/xdr-encode-int32.c	2001/08/01 15:25:47	1.4
  +++ ossp-pkg/srpc/libxds/xdr-encode-int32.c	2001/08/02 08:10:13	1.5
  @@ -25,7 +25,7 @@
      SUCH DAMAGE.
   */
   
  -#include "internal.h"
  +#include "xds.h"
   
   int xdr_encode_int32(xds_t* xds, void* engine_context,
   		     void* buffer, size_t buffer_size, size_t* used_buffer_size,
  Index: ossp-pkg/srpc/libxds/xdr-encode-int64.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xdr-encode-int64.c
  --- ossp-pkg/srpc/libxds/xdr-encode-int64.c	2001/08/01 15:25:47	1.4
  +++ ossp-pkg/srpc/libxds/xdr-encode-int64.c	2001/08/02 08:10:13	1.5
  @@ -25,7 +25,7 @@
      SUCH DAMAGE.
   */
   
  -#include "internal.h"
  +#include "xds.h"
   
   int xdr_encode_int64(xds_t* xds, void* engine_context,
   		     void* buffer, size_t buffer_size, size_t* used_buffer_size,
  Index: ossp-pkg/srpc/libxds/xdr-encode-octetstream.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 xdr-encode-octetstream.c
  --- ossp-pkg/srpc/libxds/xdr-encode-octetstream.c	2001/08/01 15:25:47	1.5
  +++ ossp-pkg/srpc/libxds/xdr-encode-octetstream.c	2001/08/02 08:10:13	1.6
  @@ -26,7 +26,7 @@
   */
   
   #include <string.h>
  -#include "internal.h"
  +#include "xds.h"
   
   int xdr_encode_octetstream(xds_t* xds, void* engine_context,
   			   void* buffer, size_t buffer_size, size_t* used_buffer_size,
  Index: ossp-pkg/srpc/libxds/xdr-encode-string.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 xdr-encode-string.c
  --- ossp-pkg/srpc/libxds/xdr-encode-string.c	2001/08/01 15:25:47	1.6
  +++ ossp-pkg/srpc/libxds/xdr-encode-string.c	2001/08/02 08:10:13	1.7
  @@ -26,7 +26,7 @@
   */
   
   #include <string.h>
  -#include "internal.h"
  +#include "xds.h"
   
   int xdr_encode_string(xds_t* xds, void* engine_context,
   		      void* buffer, size_t buffer_size, size_t* used_buffer_size,
  Index: ossp-pkg/srpc/libxds/xdr-encode-uint32.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xdr-encode-uint32.c
  --- ossp-pkg/srpc/libxds/xdr-encode-uint32.c	2001/08/01 15:25:47	1.4
  +++ ossp-pkg/srpc/libxds/xdr-encode-uint32.c	2001/08/02 08:10:13	1.5
  @@ -25,7 +25,7 @@
      SUCH DAMAGE.
   */
   
  -#include "internal.h"
  +#include "xds.h"
   
   int xdr_encode_uint32(xds_t* xds, void* engine_context,
   		      void* buffer, size_t buffer_size, size_t* used_buffer_size,
  Index: ossp-pkg/srpc/libxds/xdr-encode-uint64.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xdr-encode-uint64.c
  --- ossp-pkg/srpc/libxds/xdr-encode-uint64.c	2001/08/01 15:25:47	1.4
  +++ ossp-pkg/srpc/libxds/xdr-encode-uint64.c	2001/08/02 08:10:13	1.5
  @@ -25,7 +25,7 @@
      SUCH DAMAGE.
   */
   
  -#include "internal.h"
  +#include "xds.h"
   
   int xdr_encode_uint64(xds_t* xds, void* engine_context,
   		      void* buffer, size_t buffer_size, size_t* used_buffer_size,
  Index: ossp-pkg/srpc/libxds/xml-decode-begin.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xml-decode-begin.c
  --- ossp-pkg/srpc/libxds/xml-decode-begin.c	2001/08/01 15:25:47	1.2
  +++ ossp-pkg/srpc/libxds/xml-decode-begin.c	2001/08/02 08:10:12	1.3
  @@ -26,7 +26,7 @@
   */
   
   #include <string.h>
  -#include "internal.h"
  +#include "xds.h"
   
   int xml_decode_begin(xds_t* xds, void* engine_context,
   		     void* buffer, size_t buffer_size, size_t* used_buffer_size,
  Index: ossp-pkg/srpc/libxds/xml-decode-double.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xml-decode-double.c
  --- ossp-pkg/srpc/libxds/xml-decode-double.c	2001/08/01 15:25:47	1.4
  +++ ossp-pkg/srpc/libxds/xml-decode-double.c	2001/08/02 08:10:13	1.5
  @@ -25,7 +25,7 @@
      SUCH DAMAGE.
   */
   
  -#include "internal.h"
  +#include "xds.h"
   
   int xml_decode_double(xds_t* xds, void* engine_context,
   		     void* buffer, size_t buffer_size, size_t* used_buffer_size,
  Index: ossp-pkg/srpc/libxds/xml-decode-end.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xml-decode-end.c
  --- ossp-pkg/srpc/libxds/xml-decode-end.c	2001/08/01 15:25:47	1.2
  +++ ossp-pkg/srpc/libxds/xml-decode-end.c	2001/08/02 08:10:13	1.3
  @@ -26,7 +26,7 @@
   */
   
   #include <string.h>
  -#include "internal.h"
  +#include "xds.h"
   
   int xml_decode_end(xds_t* xds, void* engine_context,
   		     void* buffer, size_t buffer_size, size_t* used_buffer_size,
  Index: ossp-pkg/srpc/libxds/xml-decode-int32.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xml-decode-int32.c
  --- ossp-pkg/srpc/libxds/xml-decode-int32.c	2001/08/01 15:25:47	1.3
  +++ ossp-pkg/srpc/libxds/xml-decode-int32.c	2001/08/02 08:10:13	1.4
  @@ -27,7 +27,7 @@
   
   #include <string.h>
   #include <ctype.h>
  -#include "internal.h"
  +#include "xds.h"
   
   int xml_decode_int32(xds_t* xds, void* engine_context,
   		     void* buffer, size_t buffer_size, size_t* used_buffer_size,
  Index: ossp-pkg/srpc/libxds/xml-decode-int64.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xml-decode-int64.c
  --- ossp-pkg/srpc/libxds/xml-decode-int64.c	2001/08/01 15:25:47	1.4
  +++ ossp-pkg/srpc/libxds/xml-decode-int64.c	2001/08/02 08:10:13	1.5
  @@ -27,7 +27,7 @@
   
   #include <string.h>
   #include <ctype.h>
  -#include "internal.h"
  +#include "xds.h"
   
   int xml_decode_int64(xds_t* xds, void* engine_context,
   		     void* buffer, size_t buffer_size, size_t* used_buffer_size,
  Index: ossp-pkg/srpc/libxds/xml-decode-uint32.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xml-decode-uint32.c
  --- ossp-pkg/srpc/libxds/xml-decode-uint32.c	2001/08/01 15:25:47	1.3
  +++ ossp-pkg/srpc/libxds/xml-decode-uint32.c	2001/08/02 08:10:13	1.4
  @@ -27,7 +27,7 @@
   
   #include <string.h>
   #include <ctype.h>
  -#include "internal.h"
  +#include "xds.h"
   
   int xml_decode_uint32(xds_t* xds, void* engine_context,
   		     void* buffer, size_t buffer_size, size_t* used_buffer_size,
  Index: ossp-pkg/srpc/libxds/xml-decode-uint64.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xml-decode-uint64.c
  --- ossp-pkg/srpc/libxds/xml-decode-uint64.c	2001/08/01 15:25:47	1.4
  +++ ossp-pkg/srpc/libxds/xml-decode-uint64.c	2001/08/02 08:10:13	1.5
  @@ -27,7 +27,7 @@
   
   #include <string.h>
   #include <ctype.h>
  -#include "internal.h"
  +#include "xds.h"
   
   int xml_decode_uint64(xds_t* xds, void* engine_context,
   		     void* buffer, size_t buffer_size, size_t* used_buffer_size,
  Index: ossp-pkg/srpc/libxds/xml-encode-begin.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xml-encode-begin.c
  --- ossp-pkg/srpc/libxds/xml-encode-begin.c	2001/08/01 15:25:47	1.2
  +++ ossp-pkg/srpc/libxds/xml-encode-begin.c	2001/08/02 08:10:13	1.3
  @@ -26,7 +26,7 @@
   */
   
   #include <string.h>
  -#include "internal.h"
  +#include "xds.h"
   
   const char xds_xml_begin_text[] = \
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\">\n" \
  Index: ossp-pkg/srpc/libxds/xml-encode-double.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xml-encode-double.c
  --- ossp-pkg/srpc/libxds/xml-encode-double.c	2001/08/01 15:25:47	1.4
  +++ ossp-pkg/srpc/libxds/xml-encode-double.c	2001/08/02 08:10:13	1.5
  @@ -25,7 +25,7 @@
      SUCH DAMAGE.
   */
   
  -#include "internal.h"
  +#include "xds.h"
   
   int xml_encode_double(xds_t* xds, void* engine_context,
   		     void* buffer, size_t buffer_size, size_t* used_buffer_size,
  Index: ossp-pkg/srpc/libxds/xml-encode-end.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xml-encode-end.c
  --- ossp-pkg/srpc/libxds/xml-encode-end.c	2001/08/01 15:25:47	1.2
  +++ ossp-pkg/srpc/libxds/xml-encode-end.c	2001/08/02 08:10:13	1.3
  @@ -26,7 +26,7 @@
   */
   
   #include <string.h>
  -#include "internal.h"
  +#include "xds.h"
   
   const char xds_xml_end_text[] = "</xds>\n";
   
  Index: ossp-pkg/srpc/libxds/xml-encode-int32.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xml-encode-int32.c
  --- ossp-pkg/srpc/libxds/xml-encode-int32.c	2001/08/01 15:25:47	1.4
  +++ ossp-pkg/srpc/libxds/xml-encode-int32.c	2001/08/02 08:10:13	1.5
  @@ -26,7 +26,7 @@
   */
   
   #include <string.h>
  -#include "internal.h"
  +#include "xds.h"
   
   int xml_encode_int32(xds_t* xds, void* engine_context,
   		     void* buffer, size_t buffer_size, size_t* used_buffer_size,
  Index: ossp-pkg/srpc/libxds/xml-encode-int64.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xml-encode-int64.c
  --- ossp-pkg/srpc/libxds/xml-encode-int64.c	2001/08/01 15:25:47	1.4
  +++ ossp-pkg/srpc/libxds/xml-encode-int64.c	2001/08/02 08:10:13	1.5
  @@ -26,7 +26,7 @@
   */
   
   #include <string.h>
  -#include "internal.h"
  +#include "xds.h"
   
   int xml_encode_int64(xds_t* xds, void* engine_context,
   		     void* buffer, size_t buffer_size, size_t* used_buffer_size,
  Index: ossp-pkg/srpc/libxds/xml-encode-uint32.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xml-encode-uint32.c
  --- ossp-pkg/srpc/libxds/xml-encode-uint32.c	2001/08/01 15:25:47	1.3
  +++ ossp-pkg/srpc/libxds/xml-encode-uint32.c	2001/08/02 08:10:13	1.4
  @@ -26,7 +26,7 @@
   */
   
   #include <string.h>
  -#include "internal.h"
  +#include "xds.h"
   
   int xml_encode_uint32(xds_t* xds, void* engine_context,
   		     void* buffer, size_t buffer_size, size_t* used_buffer_size,
  Index: ossp-pkg/srpc/libxds/xml-encode-uint64.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xml-encode-uint64.c
  --- ossp-pkg/srpc/libxds/xml-encode-uint64.c	2001/08/01 15:25:47	1.4
  +++ ossp-pkg/srpc/libxds/xml-encode-uint64.c	2001/08/02 08:10:13	1.5
  @@ -26,7 +26,7 @@
   */
   
   #include <string.h>
  -#include "internal.h"
  +#include "xds.h"
   
   int xml_encode_uint64(xds_t* xds, void* engine_context,
   		     void* buffer, size_t buffer_size, size_t* used_buffer_size,

From ossp-cvs-owner@ossp.org  Thu Aug  2 10:12:27 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f728CRK75756; Thu, 2 Aug 2001 10:12:27 +0200 (CEST)
Date: Thu, 2 Aug 2001 10:12:27 +0200 (CEST)
Message-Id: <200108020812.f728CRK75756@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds internal.h xds.h.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   02-Aug-2001 10:12:26
  Branch: HEAD                             Handle: 2001080209122600

  Modified files:
    ossp-pkg/srpc/libxds    internal.h xds.h.in

  Log:
    - Moved definition of xds_check_parameter(),
      xds_init_encoding_engine(), and xds_init_decoding_engine() from
      internal.h to xds.h so that the callbacks don't need to include
      internal.h.
    
    - Renamed declare_formatting_engine() to
      xds_declare_formatting_engine().

  Summary:
    Revision    Changes     Path
    1.9         +0  -41     ossp-pkg/srpc/libxds/internal.h
    1.8         +76 -38     ossp-pkg/srpc/libxds/xds.h.in
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/internal.h
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 internal.h
  --- ossp-pkg/srpc/libxds/internal.h	2001/08/01 15:25:47	1.8
  +++ ossp-pkg/srpc/libxds/internal.h	2001/08/02 08:12:26	1.9
  @@ -30,12 +30,8 @@
   #ifndef __INTERNAL_H__
   #define __INTERNAL_H__
   
  -#include <assert.h>
   #include "xds.h"
   
  -#define XDS_TRUE (1==1)
  -#define XDS_FALSE (1!=1)
  -
   #define XDS_INITIAL_BUFFER_CAPACITY  512
   #define XDS_INITIAL_ENGINES_CAPACITY  32
   
  @@ -63,42 +59,5 @@
   
   int xds_find_engine(const engine_map_t* engines, size_t last, const char* name, size_t* pos);
   int xds_set_capacity(void** array, size_t* array_capacity, size_t new_capacity, size_t elem_size, size_t initial_capacity);
  -
  -extern const char xds_xml_begin_text[];
  -extern const char xds_xml_end_text[];
  -
  -#define xds_check_parameter(condition)    \
  -    do                                    \
  -    {                                     \
  -    assert(condition);                    \
  -    if (!(condition))                     \
  -        return XDS_ERR_INVALID_ARG;       \
  -    } while(XDS_FALSE)
  -
  -#define xds_init_encoding_engine(size)                                          \
  -    do                                                                          \
  -    {                                                                           \
  -    xds_check_parameter(xds != NULL);                                           \
  -    xds_check_parameter(buffer != NULL);                                        \
  -    xds_check_parameter(buffer_size != 0);                                      \
  -    xds_check_parameter(used_buffer_size != NULL && *used_buffer_size == 0);    \
  -    xds_check_parameter(args != NULL);                                          \
  -    *used_buffer_size = size;                                                   \
  -    if (buffer_size < size)                                                     \
  -        return XDS_ERR_OVERFLOW;                                                \
  -    } while(XDS_FALSE)
  -
  -#define xds_init_decoding_engine(size)                                          \
  -    do                                                                          \
  -    {                                                                           \
  -    xds_check_parameter(xds != NULL);                                           \
  -    xds_check_parameter(buffer != NULL);                                        \
  -    xds_check_parameter(buffer_size != 0);                                      \
  -    xds_check_parameter(used_buffer_size != NULL && *used_buffer_size == 0);    \
  -    xds_check_parameter(args != NULL);                                          \
  -    *used_buffer_size = size;                                                   \
  -    if (buffer_size < size)                                                     \
  -        return XDS_ERR_UNDERFLOW;                                               \
  -    } while(XDS_FALSE)
   
   #endif /* !defined(__INTERNAL_H__) */
  Index: ossp-pkg/srpc/libxds/xds.h.in
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 xds.h.in
  --- ossp-pkg/srpc/libxds/xds.h.in	2001/08/01 15:25:47	1.7
  +++ ossp-pkg/srpc/libxds/xds.h.in	2001/08/02 08:12:26	1.8
  @@ -33,7 +33,11 @@
   #include <stdlib.h>
   #include <stdarg.h>
   #include <sys/types.h>
  +#include <assert.h>
   
  +#define XDS_TRUE (1==1)
  +#define XDS_FALSE (1!=1)
  +
   typedef @xds_uint8_t@ xds_uint8_t;
   typedef @xds_uint16_t@ xds_uint16_t;
   typedef @xds_uint32_t@ xds_uint32_t;
  @@ -79,45 +83,79 @@
   int xds_vencode(xds_t* xds, const char* fmt, va_list args);
   int xds_vdecode(xds_t* xds, const char* fmt, va_list args);
   
  -#define declare_formatting_engine(x) \
  -    int x(xds_t* xds, void* engine_context, \
  -	  void* buffer, size_t buffer_size, size_t* used_buffer_size, \
  +#define xds_check_parameter(condition)						\
  +    do										\
  +    {										\
  +    assert(condition);								\
  +    if (!(condition))								\
  +        return XDS_ERR_INVALID_ARG;						\
  +    } while(XDS_FALSE)
  +
  +#define xds_init_encoding_engine(size)                                          \
  +    do                                                                          \
  +    {                                                                           \
  +    xds_check_parameter(xds != NULL);                                           \
  +    xds_check_parameter(buffer != NULL);                                        \
  +    xds_check_parameter(buffer_size != 0);                                      \
  +    xds_check_parameter(used_buffer_size != NULL && *used_buffer_size == 0);    \
  +    xds_check_parameter(args != NULL);                                          \
  +    *used_buffer_size = size;                                                   \
  +    if (buffer_size < size)                                                     \
  +        return XDS_ERR_OVERFLOW;                                                \
  +    } while(XDS_FALSE)
  +
  +#define xds_init_decoding_engine(size)                                          \
  +    do                                                                          \
  +    {                                                                           \
  +    xds_check_parameter(xds != NULL);                                           \
  +    xds_check_parameter(buffer != NULL);                                        \
  +    xds_check_parameter(buffer_size != 0);                                      \
  +    xds_check_parameter(used_buffer_size != NULL && *used_buffer_size == 0);    \
  +    xds_check_parameter(args != NULL);                                          \
  +    *used_buffer_size = size;                                                   \
  +    if (buffer_size < size)                                                     \
  +        return XDS_ERR_UNDERFLOW;                                               \
  +    } while(XDS_FALSE)
  +
  +#define xds_declare_formatting_engine(x)					\
  +    int x(xds_t* xds, void* engine_context,					\
  +	  void* buffer, size_t buffer_size, size_t* used_buffer_size,		\
   	  va_list* args)
  -
  -declare_formatting_engine(xdr_encode_uint32);
  -declare_formatting_engine(xdr_decode_uint32);
  -declare_formatting_engine(xdr_encode_int32);
  -declare_formatting_engine(xdr_decode_int32);
  -declare_formatting_engine(xdr_encode_uint64);
  -declare_formatting_engine(xdr_decode_uint64);
  -declare_formatting_engine(xdr_encode_int64);
  -declare_formatting_engine(xdr_decode_int64);
  -declare_formatting_engine(xdr_encode_double);
  -declare_formatting_engine(xdr_decode_double);
  -declare_formatting_engine(xdr_encode_octetstream);
  -declare_formatting_engine(xdr_decode_octetstream);
  -declare_formatting_engine(xdr_encode_string);
  -declare_formatting_engine(xdr_decode_string);
  -
  -declare_formatting_engine(xml_encode_begin);
  -declare_formatting_engine(xml_decode_begin);
  -declare_formatting_engine(xml_encode_end);
  -declare_formatting_engine(xml_decode_end);
  -declare_formatting_engine(xml_encode_uint32);
  -declare_formatting_engine(xml_decode_uint32);
  -declare_formatting_engine(xml_encode_int32);
  -declare_formatting_engine(xml_decode_int32);
  -declare_formatting_engine(xml_encode_uint64);
  -declare_formatting_engine(xml_decode_uint64);
  -declare_formatting_engine(xml_encode_int64);
  -declare_formatting_engine(xml_decode_int64);
  -declare_formatting_engine(xml_encode_double);
  -declare_formatting_engine(xml_decode_double);
  -declare_formatting_engine(xml_encode_octetstream);
  -declare_formatting_engine(xml_decode_octetstream);
  -declare_formatting_engine(xml_encode_string);
  -declare_formatting_engine(xml_decode_string);
   
  -#undef declare_formatting_engine
  +xds_declare_formatting_engine(xdr_encode_uint32);
  +xds_declare_formatting_engine(xdr_decode_uint32);
  +xds_declare_formatting_engine(xdr_encode_int32);
  +xds_declare_formatting_engine(xdr_decode_int32);
  +xds_declare_formatting_engine(xdr_encode_uint64);
  +xds_declare_formatting_engine(xdr_decode_uint64);
  +xds_declare_formatting_engine(xdr_encode_int64);
  +xds_declare_formatting_engine(xdr_decode_int64);
  +xds_declare_formatting_engine(xdr_encode_double);
  +xds_declare_formatting_engine(xdr_decode_double);
  +xds_declare_formatting_engine(xdr_encode_octetstream);
  +xds_declare_formatting_engine(xdr_decode_octetstream);
  +xds_declare_formatting_engine(xdr_encode_string);
  +xds_declare_formatting_engine(xdr_decode_string);
  +
  +xds_declare_formatting_engine(xml_encode_begin);
  +xds_declare_formatting_engine(xml_decode_begin);
  +xds_declare_formatting_engine(xml_encode_end);
  +xds_declare_formatting_engine(xml_decode_end);
  +xds_declare_formatting_engine(xml_encode_uint32);
  +xds_declare_formatting_engine(xml_decode_uint32);
  +xds_declare_formatting_engine(xml_encode_int32);
  +xds_declare_formatting_engine(xml_decode_int32);
  +xds_declare_formatting_engine(xml_encode_uint64);
  +xds_declare_formatting_engine(xml_decode_uint64);
  +xds_declare_formatting_engine(xml_encode_int64);
  +xds_declare_formatting_engine(xml_decode_int64);
  +xds_declare_formatting_engine(xml_encode_double);
  +xds_declare_formatting_engine(xml_decode_double);
  +xds_declare_formatting_engine(xml_encode_octetstream);
  +xds_declare_formatting_engine(xml_decode_octetstream);
  +xds_declare_formatting_engine(xml_encode_string);
  +xds_declare_formatting_engine(xml_decode_string);
  +extern const char xds_xml_begin_text[];
  +extern const char xds_xml_end_text[];
   
   #endif /* !defined(__LIBXDS_H__) */

From ossp-cvs-owner@ossp.org  Thu Aug  2 10:29:18 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f728THu77739; Thu, 2 Aug 2001 10:29:17 +0200 (CEST)
Date: Thu, 2 Aug 2001 10:29:17 +0200 (CEST)
Message-Id: <200108020829.f728THu77739@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds configure.ac
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   02-Aug-2001 10:29:17
  Branch: HEAD                             Handle: 2001080209291700

  Modified files:
    ossp-pkg/srpc/libxds    configure.ac

  Log:
    Remove the writable flag from file generated by autoconf.

  Summary:
    Revision    Changes     Path
    1.8         +2  -1      ossp-pkg/srpc/libxds/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/configure.ac
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 configure.ac
  --- ossp-pkg/srpc/libxds/configure.ac	2001/07/22 17:24:31	1.7
  +++ ossp-pkg/srpc/libxds/configure.ac	2001/08/02 08:29:17	1.8
  @@ -1,6 +1,6 @@
   dnl configure.in -- Process this file with autoconf to produce a configure script.
   
  -AC_INIT(libxds, [$Revision: 1.7 $])
  +AC_INIT(libxds, [$Revision: 1.8 $])
   
   dnl Get rid of the lousy -g and -O defaults in CFLAGS.
   dnl
  @@ -76,4 +76,5 @@
   dnl Write results.
   dnl
   AC_CONFIG_FILES(xds.h Makefile regression-tests/Makefile)
  +AC_CONFIG_COMMANDS([default], [chmod -w xds.h Makefile regression-tests/Makefile])
   AC_OUTPUT

From ossp-cvs-owner@ossp.org  Thu Aug  2 10:36:35 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f728aXn78496; Thu, 2 Aug 2001 10:36:33 +0200 (CEST)
Date: Thu, 2 Aug 2001 10:36:33 +0200 (CEST)
Message-Id: <200108020836.f728aXn78496@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds configure.ac
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   02-Aug-2001 10:36:33
  Branch: HEAD                             Handle: 2001080209363300

  Modified files:
    ossp-pkg/srpc/libxds    configure.ac

  Log:
    Added AC_PREREQ and AC_REVISION statements.

  Summary:
    Revision    Changes     Path
    1.9         +3  -1      ossp-pkg/srpc/libxds/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/configure.ac
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 configure.ac
  --- ossp-pkg/srpc/libxds/configure.ac	2001/08/02 08:29:17	1.8
  +++ ossp-pkg/srpc/libxds/configure.ac	2001/08/02 08:36:33	1.9
  @@ -1,6 +1,8 @@
   dnl configure.in -- Process this file with autoconf to produce a configure script.
   
  -AC_INIT(libxds, [$Revision: 1.8 $])
  +AC_INIT(libxds)
  +AC_PREREQ(2.52)
  +AC_REVISION($Revision: 1.9 $)
   
   dnl Get rid of the lousy -g and -O defaults in CFLAGS.
   dnl

From ossp-cvs-owner@ossp.org  Thu Aug  2 12:52:00 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f72ApwT94136; Thu, 2 Aug 2001 12:51:58 +0200 (CEST)
Date: Thu, 2 Aug 2001 12:51:58 +0200 (CEST)
Message-Id: <200108021051.f72ApwT94136@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds destroy.c init.c register.c set-capac...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   02-Aug-2001 12:51:58
  Branch: HEAD                             Handle: 2001080211515700

  Modified files:
    ossp-pkg/srpc/libxds    destroy.c init.c register.c set-capacity.c
                            unregister.c

  Log:
    Remove stdlib.h include here because it is included in xds.h already.

  Summary:
    Revision    Changes     Path
    1.9         +0  -1      ossp-pkg/srpc/libxds/destroy.c
    1.7         +0  -1      ossp-pkg/srpc/libxds/init.c
    1.8         +0  -1      ossp-pkg/srpc/libxds/register.c
    1.5         +0  -1      ossp-pkg/srpc/libxds/set-capacity.c
    1.6         +0  -1      ossp-pkg/srpc/libxds/unregister.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/destroy.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 destroy.c
  --- ossp-pkg/srpc/libxds/destroy.c	2001/08/01 15:25:47	1.8
  +++ ossp-pkg/srpc/libxds/destroy.c	2001/08/02 10:51:57	1.9
  @@ -25,7 +25,6 @@
      SUCH DAMAGE.
   */
   
  -#include <stdlib.h>
   #include "internal.h"
   
   void xds_destroy(xds_t* xds)
  Index: ossp-pkg/srpc/libxds/init.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 init.c
  --- ossp-pkg/srpc/libxds/init.c	2001/08/01 15:25:47	1.6
  +++ ossp-pkg/srpc/libxds/init.c	2001/08/02 10:51:57	1.7
  @@ -25,7 +25,6 @@
      SUCH DAMAGE.
   */
   
  -#include <stdlib.h>
   #include <errno.h>
   #include "internal.h"
   
  Index: ossp-pkg/srpc/libxds/register.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 register.c
  --- ossp-pkg/srpc/libxds/register.c	2001/08/01 15:25:47	1.7
  +++ ossp-pkg/srpc/libxds/register.c	2001/08/02 10:51:57	1.8
  @@ -25,7 +25,6 @@
      SUCH DAMAGE.
   */
   
  -#include <stdlib.h>
   #include <string.h>
   #include <ctype.h>
   #include "internal.h"
  Index: ossp-pkg/srpc/libxds/set-capacity.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 set-capacity.c
  --- ossp-pkg/srpc/libxds/set-capacity.c	2001/08/01 15:25:47	1.4
  +++ ossp-pkg/srpc/libxds/set-capacity.c	2001/08/02 10:51:57	1.5
  @@ -25,7 +25,6 @@
      SUCH DAMAGE.
   */
   
  -#include <stdlib.h>
   #include "internal.h"
   
   int xds_set_capacity(void** array, size_t* array_capacity, size_t new_capacity, size_t elem_size, size_t initial_capacity)
  Index: ossp-pkg/srpc/libxds/unregister.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 unregister.c
  --- ossp-pkg/srpc/libxds/unregister.c	2001/08/01 15:25:47	1.5
  +++ ossp-pkg/srpc/libxds/unregister.c	2001/08/02 10:51:57	1.6
  @@ -25,7 +25,6 @@
      SUCH DAMAGE.
   */
   
  -#include <stdlib.h>
   #include <string.h>
   #include <ctype.h>
   #include "internal.h"

From ossp-cvs-owner@ossp.org  Thu Aug  2 12:54:29 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f72AsSu94338; Thu, 2 Aug 2001 12:54:28 +0200 (CEST)
Date: Thu, 2 Aug 2001 12:54:28 +0200 (CEST)
Message-Id: <200108021054.f72AsSu94338@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   02-Aug-2001 12:54:28
  Branch: HEAD                             Handle: 2001080211542700

  Modified files:
    ossp-pkg/srpc/libxds    Makefile.in

  Log:
    Improved dependencies to be more accurate.

  Summary:
    Revision    Changes     Path
    1.13        +6  -3      ossp-pkg/srpc/libxds/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile.in
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 Makefile.in
  --- ossp-pkg/srpc/libxds/Makefile.in	2001/08/01 15:25:47	1.12
  +++ ossp-pkg/srpc/libxds/Makefile.in	2001/08/02 10:54:27	1.13
  @@ -24,10 +24,12 @@
   		  xdr-encode-octetstream.o xdr-decode-octetstream.o \
   		  xdr-encode-string.o      xdr-decode-string.o \
   
  -OBJS		= decode.o destroy.o encode.o getbuffer.o init.o register.o \
  +XDS_OBJS	= decode.o destroy.o encode.o getbuffer.o init.o register.o \
   		  setbuffer.o unregister.o vdecode.o vencode.o find-engine.o \
  -		  set-capacity.o $(XDR_OBJS) $(XML_OBJS)
  +		  set-capacity.o
   
  +OBJS		= $(XDS_OBJS) $(XDR_OBJS) $(XML_OBJS)
  +
   .c.o:
   	$(CC) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CFLAGS) -c $<
   
  @@ -58,4 +60,5 @@
   
   # Dependencies
   
  -$(OBJS): internal.h xds.h
  +$(XDS_OBJS):			internal.h xds.h
  +$(XDR_OBJS) $(XML_OBJS):	xds.h

From ossp-cvs-owner@ossp.org  Thu Aug  2 13:52:14 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f72BqCY01196; Thu, 2 Aug 2001 13:52:12 +0200 (CEST)
Date: Thu, 2 Aug 2001 13:52:12 +0200 (CEST)
Message-Id: <200108021152.f72BqCY01196@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests xdr-string-empty.c x...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   02-Aug-2001 13:52:12
  Branch: HEAD                             Handle: 2001080212521101

  Modified files:
    ossp-pkg/srpc/libxds    xdr-decode-string.c
    ossp-pkg/srpc/libxds/regression-tests
                            xdr-string-empty.c xdr-string.c

  Log:
    xdr_decode_string() will no longer return the length of the decoded
    string. Use strlen() to determine that length or use
    xdr_(en|de)code_octetstream() to begin with.

  Summary:
    Revision    Changes     Path
    1.4         +5  -11     ossp-pkg/srpc/libxds/regression-tests/xdr-string-empty.c
    1.4         +7  -8      ossp-pkg/srpc/libxds/regression-tests/xdr-string.c
    1.7         +10 -12     ossp-pkg/srpc/libxds/xdr-decode-string.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/xdr-string-empty.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xdr-string-empty.c
  --- ossp-pkg/srpc/libxds/regression-tests/xdr-string-empty.c	2001/08/01 15:25:50	1.3
  +++ ossp-pkg/srpc/libxds/regression-tests/xdr-string-empty.c	2001/08/02 11:52:12	1.4
  @@ -37,7 +37,6 @@
   
       char   msg[] = "";
       char*  new_msg;
  -    size_t new_msg_size;
   
       /* Encode the string as octet stream. Then erase the buffer and
          decode the string back, verifying that it hasn't changed. */
  @@ -48,12 +47,12 @@
   	printf("Failed to initialize XDS context.\n");
   	return 1;
   	}
  -    if (xds_register(xds, "os", &xdr_encode_string, NULL) != XDS_OK)
  +    if (xds_register(xds, "string", &xdr_encode_string, NULL) != XDS_OK)
   	{
   	printf("Failed to register my encoding engines.\n");
   	return 1;
   	}
  -    if (xds_encode(xds, "os", msg, 0) != XDS_OK)
  +    if (xds_encode(xds, "string", msg, 0) != XDS_OK)
   	{
   	printf("xds_encode() failed.\n");
   	return 1;
  @@ -76,7 +75,7 @@
   	printf("Failed to initialize XDS context.\n");
   	return 1;
   	}
  -    if (xds_register(xds, "os", &xdr_decode_string, NULL) != XDS_OK)
  +    if (xds_register(xds, "string", &xdr_decode_string, NULL) != XDS_OK)
   	{
   	printf("Failed to register my decoding engines.\n");
   	return 1;
  @@ -86,19 +85,14 @@
   	printf("xds_setbuffer() failed.\n");
   	return 1;
   	}
  -    if (xds_decode(xds, "os", &new_msg, &new_msg_size) != XDS_OK)
  +    if (xds_decode(xds, "string", &new_msg) != XDS_OK)
   	{
   	printf("xds_decode() failed.\n");
   	return 1;
   	}
  -    if (new_msg_size != 0)
  +    if (strlen(new_msg) != 0)
   	{
   	printf("The size of the decoded message is wrong.\n");
  -	return 1;
  -	}
  -    if (memcmp(msg, new_msg, new_msg_size) != 0)
  -	{
  -	printf("The decoded string is not correct.\n");
   	return 1;
   	}
       xds_destroy(xds);
  Index: ossp-pkg/srpc/libxds/regression-tests/xdr-string.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xdr-string.c
  --- ossp-pkg/srpc/libxds/regression-tests/xdr-string.c	2001/08/01 15:25:50	1.3
  +++ ossp-pkg/srpc/libxds/regression-tests/xdr-string.c	2001/08/02 11:52:12	1.4
  @@ -37,7 +37,6 @@
   
       char   msg[] = "Hello World";
       char*  new_msg;
  -    size_t new_msg_size;
   
       /* Encode the string as octet stream. Then erase the buffer and
          decode the string back, verifying that it hasn't changed. */
  @@ -48,12 +47,12 @@
   	printf("Failed to initialize XDS context.\n");
   	return 1;
   	}
  -    if (xds_register(xds, "os", &xdr_encode_string, NULL) != XDS_OK)
  +    if (xds_register(xds, "string", &xdr_encode_string, NULL) != XDS_OK)
   	{
   	printf("Failed to register my encoding engines.\n");
   	return 1;
   	}
  -    if (xds_encode(xds, "os", msg) != XDS_OK)
  +    if (xds_encode(xds, "string", msg) != XDS_OK)
   	{
   	printf("xds_encode() failed.\n");
   	return 1;
  @@ -76,7 +75,7 @@
   	printf("Failed to initialize XDS context.\n");
   	return 1;
   	}
  -    if (xds_register(xds, "os", &xdr_decode_string, NULL) != XDS_OK)
  +    if (xds_register(xds, "string", &xdr_decode_string, NULL) != XDS_OK)
   	{
   	printf("Failed to register my decoding engines.\n");
   	return 1;
  @@ -86,17 +85,17 @@
   	printf("xds_setbuffer() failed.\n");
   	return 1;
   	}
  -    if (xds_decode(xds, "os", &new_msg, &new_msg_size) != XDS_OK)
  +    if (xds_decode(xds, "string", &new_msg) != XDS_OK)
   	{
   	printf("xds_decode() failed.\n");
   	return 1;
   	}
  -    if (new_msg_size != strlen(msg))
  +    if (strlen(new_msg) != strlen(msg))
   	{
  -	printf("The size of the decoded message is wrong: %d.\n", new_msg_size);
  +	printf("The size of the decoded message is wrong.\n");
   	return 1;
   	}
  -    if (memcmp(msg, new_msg, new_msg_size) != 0)
  +    if (memcmp(msg, new_msg, strlen(new_msg)) != 0)
   	{
   	printf("The decoded string is not correct.\n");
   	return 1;
  Index: ossp-pkg/srpc/libxds/xdr-decode-string.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 xdr-decode-string.c
  --- ossp-pkg/srpc/libxds/xdr-decode-string.c	2001/08/02 08:10:13	1.6
  +++ ossp-pkg/srpc/libxds/xdr-decode-string.c	2001/08/02 11:52:11	1.7
  @@ -33,43 +33,41 @@
   		      va_list* args)
       {
       char**  p;
  -    size_t* p_len;
  +    size_t  p_len;
       size_t  padding;
   
       xds_init_decoding_engine(4);
   
       p     = va_arg(*args, char**);
  -    p_len = va_arg(*args, size_t*);
       xds_check_parameter(p != NULL);
  -    xds_check_parameter(p_len != NULL);
   
       /* Read the size of the message. */
   
  -    *p_len  = ((xds_uint8_t*)buffer)[0]; *p_len = *p_len << 8;
  -    *p_len += ((xds_uint8_t*)buffer)[1]; *p_len = *p_len << 8;
  -    *p_len += ((xds_uint8_t*)buffer)[2]; *p_len = *p_len << 8;
  -    *p_len += ((xds_uint8_t*)buffer)[3];
  +    p_len  = ((xds_uint8_t*)buffer)[0]; p_len = p_len << 8;
  +    p_len += ((xds_uint8_t*)buffer)[1]; p_len = p_len << 8;
  +    p_len += ((xds_uint8_t*)buffer)[2]; p_len = p_len << 8;
  +    p_len += ((xds_uint8_t*)buffer)[3];
   
       /* Calculate padding. */
   
  -    padding = (4 - (*p_len & 0x03)) & 0x03;
  +    padding = (4 - (p_len & 0x03)) & 0x03;
   
       /* Do we have enough data?. */
   
  -    *used_buffer_size = 4 + *p_len + padding;
  +    *used_buffer_size = 4 + p_len + padding;
       if (buffer_size < *used_buffer_size)
   	return XDS_ERR_UNDERFLOW;
   
       /* Allocate buffer for the data. */
   
  -    *p = (char*)malloc(*p_len + 1);
  +    *p = (char*)malloc(p_len + 1);
       if (*p == NULL)
   	return XDS_ERR_NO_MEM;
   
       /* Copy data into the buffer. */
   
  -    memmove(*p, (xds_uint8_t*)buffer+4, *p_len);
  -    ((xds_uint8_t*)buffer)[4+*p_len] = '\0';
  +    memmove(*p, (xds_uint8_t*)buffer+4, p_len);
  +    ((xds_uint8_t*)buffer)[4+p_len] = '\0';
   
       /* Done. */
   

From ossp-cvs-owner@ossp.org  Thu Aug  2 14:19:15 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f72CJEM04522; Thu, 2 Aug 2001 14:19:14 +0200 (CEST)
Date: Thu, 2 Aug 2001 14:19:14 +0200 (CEST)
Message-Id: <200108021219.f72CJEM04522@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/docs decode.c encode.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   02-Aug-2001 14:19:14
  Branch: HEAD                             Handle: 2001080213191400

  Added files:
    ossp-pkg/srpc/libxds/docs decode.c encode.c

  Log:
    Example programs used in the documentation.

  Summary:
    Revision    Changes     Path
    1.1         +66 -0      ossp-pkg/srpc/libxds/docs/decode.c
    1.1         +51 -0      ossp-pkg/srpc/libxds/docs/encode.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/docs/decode.c
  ============================================================
  $ cvs update -p -r1.1 decode.c
  #include <stdio.h>
  #include <unistd.h>
  #include <string.h>
  #include <errno.h>
  #include <xds.h>
  
  static void error_exit(int rc, const char* msg, ...)
      {
      va_list args;
      va_start(args, msg);
      vfprintf(stderr, msg, args);
      va_end(args);
      exit(rc);
      }
  
  int main()
      {
      xds_t* xds;
      char   buffer[1024];
      size_t buffer_len;
      int rc;
  
      xds_int32_t  int32;
      xds_uint32_t uint32;
      char*        string;
  
      buffer_len = 0;
      do
  	{
  	rc = read(STDIN_FILENO, buffer + buffer_len, sizeof(buffer) - buffer_len);
  	if (rc < 0)
  	    error_exit(1, "read() failed: %s\n", strerror(errno));
  	else if (rc > 0)
  	    buffer_len += rc;
  	}
      while (rc > 0 && buffer_len < sizeof(buffer));
  
      if (buffer_len >= sizeof(buffer))
  	error_exit(1, "Too much input data for our buffer.\n");
  
      xds = xds_init(XDS_DECODE);
      if (xds == NULL)
  	error_exit(1, "Failed to initialize XDS context: %s\n", strerror(errno));
  
      if (xds_register(xds, "int32",  &xdr_decode_int32, NULL) != XDS_OK ||
  	xds_register(xds, "uint32", &xdr_decode_uint32, NULL) != XDS_OK ||
  	xds_register(xds, "string", &xdr_decode_string, NULL) != XDS_OK)
  	error_exit(1, "Failed to register my decoding engines!\n");
  
      if (xds_setbuffer(xds, XDS_LOAN, buffer, buffer_len) != XDS_OK)
  	error_exit(1, "setbuffer() failed.\n");
  
      if (xds_decode(xds, "int32 uint32 string", &int32, &uint32, &string) != XDS_OK)
  	error_exit(1, "xds_decode() failed!\n");
  
      xds_destroy(xds);
  
      fprintf(stderr, "Decoded data:\n");
      fprintf(stderr, "\tint32   = %d\n", int32);
      fprintf(stderr, "\tuint32 = 0x%x\n", uint32);
      fprintf(stderr, "\tstring = \"%s\"\n", string);
  
      free(string);
  
      return 0;
      }
  Index: ossp-pkg/srpc/libxds/docs/encode.c
  ============================================================
  $ cvs update -p -r1.1 encode.c
  #include <stdio.h>
  #include <unistd.h>
  #include <string.h>
  #include <errno.h>
  #include <xds.h>
  
  static void error_exit(int rc, const char* msg, ...)
      {
      va_list args;
      va_start(args, msg);
      vfprintf(stderr, msg, args);
      va_end(args);
      exit(rc);
      }
  
  int main()
      {
      xds_t* xds;
      char*  buffer;
      size_t buffer_size;
  
      xds_int32_t  int32  = -42;
      xds_uint32_t uint32 = 0x12345678;
      const char*  string = "This is a test.";
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL)
  	error_exit(1, "Failed to initialize XDS context: %s\n", strerror(errno));
  
      if (xds_register(xds, "int32",  &xdr_encode_int32, NULL) != XDS_OK ||
  	xds_register(xds, "uint32", &xdr_encode_uint32, NULL) != XDS_OK ||
  	xds_register(xds, "string", &xdr_encode_string, NULL) != XDS_OK)
  	error_exit(1, "Failed to register my encoding engines!\n");
  
      if (xds_encode(xds, "int32 uint32 string", int32, uint32, string) != XDS_OK)
  	error_exit(1, "xds_encode() failed!\n");
  
      if (xds_getbuffer(xds, XDS_GIFT, (void**)&buffer, &buffer_size) != XDS_OK)
  	error_exit(1, "getbuffer() failed.\n");
  
      xds_destroy(xds);
  
      write(STDOUT_FILENO, buffer, buffer_size);
  
      fprintf(stderr, "Encoded data:\n");
      fprintf(stderr, "\tint32   = %d\n", int32);
      fprintf(stderr, "\tuint32 = 0x%x\n", uint32);
      fprintf(stderr, "\tstring = \"%s\"\n", string);
  
      return 0;
      }

From ossp-cvs-owner@ossp.org  Thu Aug  2 14:19:36 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f72CJYG04593; Thu, 2 Aug 2001 14:19:34 +0200 (CEST)
Date: Thu, 2 Aug 2001 14:19:34 +0200 (CEST)
Message-Id: <200108021219.f72CJYG04593@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/docs architecture.dia architecture.ep...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   02-Aug-2001 14:19:34
  Branch: HEAD                             Handle: 2001080213193300

  Added files:
    ossp-pkg/srpc/libxds/docs architecture.dia architecture.eps
                            data-exchange.dia data-exchange.eps

  Log:
    Diagrams used in the documentation.

  Summary:
    Revision    Changes     Path
    1.1         +2  -0      ossp-pkg/srpc/libxds/docs/architecture.dia
    1.1         +569 -0     ossp-pkg/srpc/libxds/docs/architecture.eps
    1.1         +14 -0      ossp-pkg/srpc/libxds/docs/data-exchange.dia
    1.1         +485 -0     ossp-pkg/srpc/libxds/docs/data-exchange.eps
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/docs/architecture.dia
  ============================================================
  $ cvs update -p -r1.1 architecture.dia
  <?xml version="1.0"?>
  <dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/"><dia:diagramdata><dia:attribute name="background"><dia:color val="#ffffff"/></dia:attribute><dia:attribute name="paper"><dia:composite type="paper"><dia:attribute name="name"><dia:string>#A4#</dia:string></dia:attribute><dia:attribute name="tmargin"><dia:real val="2.8222"/></dia:attribute><dia:attribute name="bmargin"><dia:real val="2.8222"/></dia:attribute><dia:attribute name="lmargin"><dia:real val="2.8222"/></dia:attribute><dia:attribute name="rmargin"><dia:real val="2.8222"/></dia:attribute><dia:attribute name="is_portrait"><dia:boolean val="true"/></dia:attribute><dia:attribute name="scaling"><dia:real val="1"/></dia:attribute><dia:attribute name="fitto"><dia:boolean val="false"/></dia:attribute></dia:composite></dia:attribute><dia:attribute name="grid"><dia:composite type="grid"><dia:attribute name="width_x"><dia:real val="1"/></dia:attribute><dia:attribute name="width_y"><dia:real val="1"/></dia:attribute><dia:attribute name="visible_x"><dia:int val="1"/></dia:attribute><dia:attribute name="visible_y"><dia:int val="1"/></dia:attribute></dia:composite></dia:attribute><dia:attribute name="guides"><dia:composite type="guides"><dia:attribute name="hguides"/><dia:attribute name="vguides"/></dia:composite></dia:attribute></dia:diagramdata><dia:layer name="Background" visible="true"><dia:object type="Standard - Box" version="0" id="O0"><dia:attribute name="obj_pos"><dia:point val="32,16"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="31.95,15.95;46.05,25.05"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="32,16"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="14"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="9"/></dia:attribute><dia:attribute name="show_background"><dia:boolean val="true"/></dia:attribute></dia:object><dia:object type="Standard - Box" version="0" id="O1"><dia:attribute name="obj_pos"><dia:point val="32,6"/></dia:attribute><dia:attribute name="obj_bb"><dia:rec
tangle val="31.95,5.95;46.05,15.05"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="32,6"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="14"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="9"/></dia:attribute><dia:attribute name="show_background"><dia:boolean val="true"/></dia:attribute></dia:object><dia:object type="Standard - Box" version="0" id="O2"><dia:attribute name="obj_pos"><dia:point val="19,11"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="18.95,10.95;28.05,20.05"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="19,11"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="9"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="9"/></dia:attribute><dia:attribute name="show_background"><dia:boolean val="true"/></dia:attribute></dia:object><dia:object type="Standard - Box" version="0" id="O3"><dia:attribute name="obj_pos"><dia:point val="1,6"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="0.95,5.95;15.05,25.05"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="1,6"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="14"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="19"/></dia:attribute><dia:attribute name="show_background"><dia:boolean val="true"/></dia:attribute></dia:object><dia:object type="Flowchart - Box" version="0" id="O4"><dia:attribute name="obj_pos"><dia:point val="4,8"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="3.95,7.95;14.05,10.05"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="4,8"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="10"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="2"/></dia:attribute><dia:attribute name="show_background"><dia:boolean val="true"/></dia:attribute><dia:attribute name="padding"><dia:real val="0.5"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:str
ing>#xds_init()#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Courier"/></dia:attribute><dia:attribute name="height"><dia:real val="0.8"/></dia:attribute><dia:attribute name="pos"><dia:point val="9,9.23448"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Flowchart - Box" version="0" id="O5"><dia:attribute name="obj_pos"><dia:point val="4,10"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="3.95,9.95;14.05,12.05"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="4,10"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="10"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="2"/></dia:attribute><dia:attribute name="show_background"><dia:boolean val="true"/></dia:attribute><dia:attribute name="padding"><dia:real val="0.5"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#xds_destroy()#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Courier"/></dia:attribute><dia:attribute name="height"><dia:real val="0.8"/></dia:attribute><dia:attribute name="pos"><dia:point val="9,11.2345"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Flowchart - Box" version="0" id="O6"><dia:attribute name="obj_pos"><dia:point val="4,20"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="3.95,19.95;14.05,22.05"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="4,20"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="10"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="2"/></dia:attribute><dia:attribute name="show_background"><dia:boolean val="true"/></dia:attribute><dia:attribute 
name="padding"><dia:real val="0.5"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#xds_encode()#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Courier"/></dia:attribute><dia:attribute name="height"><dia:real val="0.8"/></dia:attribute><dia:attribute name="pos"><dia:point val="9,21.2345"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Flowchart - Box" version="0" id="O7"><dia:attribute name="obj_pos"><dia:point val="4,18"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="3.95,17.95;14.05,20.05"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="4,18"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="10"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="2"/></dia:attribute><dia:attribute name="show_background"><dia:boolean val="true"/></dia:attribute><dia:attribute name="padding"><dia:real val="0.5"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#xds_getbuffer()#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Courier"/></dia:attribute><dia:attribute name="height"><dia:real val="0.8"/></dia:attribute><dia:attribute name="pos"><dia:point val="9,19.2345"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Flowchart - Box" version="0" id="O8"><dia:attribute name="obj_pos"><dia:point val="4,16"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="3.95,15.95;14.05,18.05"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="4,16"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="10"/></dia:attribute><dia:attribute 
name="elem_height"><dia:real val="2"/></dia:attribute><dia:attribute name="show_background"><dia:boolean val="true"/></dia:attribute><dia:attribute name="padding"><dia:real val="0.5"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#xds_setbuffer()#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Courier"/></dia:attribute><dia:attribute name="height"><dia:real val="0.8"/></dia:attribute><dia:attribute name="pos"><dia:point val="9,17.2345"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Flowchart - Box" version="0" id="O9"><dia:attribute name="obj_pos"><dia:point val="4,14"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="3.95,13.95;14.05,16.05"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="4,14"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="10"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="2"/></dia:attribute><dia:attribute name="show_background"><dia:boolean val="true"/></dia:attribute><dia:attribute name="padding"><dia:real val="0.5"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#xds_unregister()#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Courier"/></dia:attribute><dia:attribute name="height"><dia:real val="0.8"/></dia:attribute><dia:attribute name="pos"><dia:point val="9,15.2345"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Flowchart - Box" version="0" id="O10"><dia:attribute name="obj_pos"><dia:point val="4,12"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="3.95,11.95;14.05,14.05"/></dia:attribute><dia
:attribute name="elem_corner"><dia:point val="4,12"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="10"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="2"/></dia:attribute><dia:attribute name="show_background"><dia:boolean val="true"/></dia:attribute><dia:attribute name="padding"><dia:real val="0.5"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#xds_register()#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Courier"/></dia:attribute><dia:attribute name="height"><dia:real val="0.8"/></dia:attribute><dia:attribute name="pos"><dia:point val="9,13.2345"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Flowchart - Box" version="0" id="O11"><dia:attribute name="obj_pos"><dia:point val="4,22"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="3.95,21.95;14.05,24.05"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="4,22"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="10"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="2"/></dia:attribute><dia:attribute name="show_background"><dia:boolean val="true"/></dia:attribute><dia:attribute name="padding"><dia:real val="0.5"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#xds_decode()#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Courier"/></dia:attribute><dia:attribute name="height"><dia:real val="0.8"/></dia:attribute><dia:attribute name="pos"><dia:point val="9,23.2345"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Flowchart - Box" version="0" id="O12"><dia:attribute
 name="obj_pos"><dia:point val="21,15"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="20.95,14.95;27.05,17.05"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="21,15"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="6"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="2"/></dia:attribute><dia:attribute name="show_background"><dia:boolean val="true"/></dia:attribute><dia:attribute name="padding"><dia:real val="0.5"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#engines#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Courier"/></dia:attribute><dia:attribute name="height"><dia:real val="0.8"/></dia:attribute><dia:attribute name="pos"><dia:point val="24,16.2345"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Flowchart - Box" version="0" id="O13"><dia:attribute name="obj_pos"><dia:point val="21,17"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="20.95,16.95;27.05,19.05"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="21,17"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="6"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="2"/></dia:attribute><dia:attribute name="show_background"><dia:boolean val="true"/></dia:attribute><dia:attribute name="padding"><dia:real val="0.5"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#buffer#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Courier"/></dia:attribute><dia:attribute name="height"><dia:real val="0.8"/></dia:attribute><dia:attribute name="pos"><dia:point val="24,18.2345"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enu
m val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Flowchart - Box" version="0" id="O14"><dia:attribute name="obj_pos"><dia:point val="21,13"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="20.95,12.95;27.05,15.05"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="21,13"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="6"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="2"/></dia:attribute><dia:attribute name="show_background"><dia:boolean val="true"/></dia:attribute><dia:attribute name="padding"><dia:real val="0.5"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#mode#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Courier"/></dia:attribute><dia:attribute name="height"><dia:real val="0.8"/></dia:attribute><dia:attribute name="pos"><dia:point val="24,14.2345"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Standard - Text" version="0" id="O15"><dia:attribute name="obj_pos"><dia:point val="3.75,7.3"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="1.3472,6.50588;6.1528,7.50588"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#Framework#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Times-Roman"/></dia:attribute><dia:attribute name="height"><dia:real val="1"/></dia:attribute><dia:attribute name="pos"><dia:point val="3.75,7.3"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Standard - Text" version="0" id="O16"><dia:attribute name="obj_pos"><dia:point val="20.85,12.2"/></dia:attribute><di
a:attribute name="obj_bb"><dia:rectangle val="19.1744,11.4059;22.5256,12.4059"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#Context#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Times-Roman"/></dia:attribute><dia:attribute name="height"><dia:real val="1"/></dia:attribute><dia:attribute name="pos"><dia:point val="20.85,12.2"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Flowchart - Box" version="0" id="O17"><dia:attribute name="obj_pos"><dia:point val="34,8"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="33.95,7.95;45.05,10.05"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="34,8"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="11"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="2"/></dia:attribute><dia:attribute name="show_background"><dia:boolean val="true"/></dia:attribute><dia:attribute name="padding"><dia:real val="0.5"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#xdr_encode_int32()#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Courier"/></dia:attribute><dia:attribute name="height"><dia:real val="0.8"/></dia:attribute><dia:attribute name="pos"><dia:point val="39.5,9.23448"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Flowchart - Box" version="0" id="O18"><dia:attribute name="obj_pos"><dia:point val="34,10"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="33.95,9.95;45.05,12.05"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="34,10"/></dia:attribute><dia:attribute name="elem_width"
><dia:real val="11"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="2"/></dia:attribute><dia:attribute name="show_background"><dia:boolean val="true"/></dia:attribute><dia:attribute name="padding"><dia:real val="0.5"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#xdr_decode_int32()#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Courier"/></dia:attribute><dia:attribute name="height"><dia:real val="0.8"/></dia:attribute><dia:attribute name="pos"><dia:point val="39.5,11.2345"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Flowchart - Box" version="0" id="O19"><dia:attribute name="obj_pos"><dia:point val="34,18"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="33.95,17.95;45.05,20.05"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="34,18"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="11"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="2"/></dia:attribute><dia:attribute name="show_background"><dia:boolean val="true"/></dia:attribute><dia:attribute name="padding"><dia:real val="0.5"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#xml_encode_int32()#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Courier"/></dia:attribute><dia:attribute name="height"><dia:real val="0.8"/></dia:attribute><dia:attribute name="pos"><dia:point val="39.5,19.2345"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Flowchart - Box" version="0" id="O20"><dia:attribute name="obj_pos"><dia:point val="34,20"/></dia:attribute><dia:attribute name="obj_b
b"><dia:rectangle val="33.95,19.95;45.05,22.05"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="34,20"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="11"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="2"/></dia:attribute><dia:attribute name="show_background"><dia:boolean val="true"/></dia:attribute><dia:attribute name="padding"><dia:real val="0.5"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#xml_decode_unt32()#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Courier"/></dia:attribute><dia:attribute name="height"><dia:real val="0.8"/></dia:attribute><dia:attribute name="pos"><dia:point val="39.5,21.2345"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Standard - Text" version="0" id="O21"><dia:attribute name="obj_pos"><dia:point val="35.1356,17.2991"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="32.2026,16.505;38.0687,17.505"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#XML Engines#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Times-Roman"/></dia:attribute><dia:attribute name="height"><dia:real val="1"/></dia:attribute><dia:attribute name="pos"><dia:point val="35.1356,17.2991"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Standard - Text" version="0" id="O22"><dia:attribute name="obj_pos"><dia:point val="34.9856,7.34912"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="32.1889,6.555;37.7823,7.555"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string
>#XDR engines#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Times-Roman"/></dia:attribute><dia:attribute name="height"><dia:real val="1"/></dia:attribute><dia:attribute name="pos"><dia:point val="34.9856,7.34912"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:group><dia:object type="Standard - Ellipse" version="0" id="O23"><dia:attribute name="obj_pos"><dia:point val="39.3282,23.9592"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="39.2782,23.9092;39.5904,24.2095"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="39.3282,23.9592"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="0.212132"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="0.200322"/></dia:attribute><dia:attribute name="border_width"><dia:real val="0.1"/></dia:attribute><dia:attribute name="inner_color"><dia:color val="#000000"/></dia:attribute></dia:object><dia:object type="Standard - Ellipse" version="0" id="O24"><dia:attribute name="obj_pos"><dia:point val="39.3282,23.3559"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="39.2782,23.3059;39.5904,23.6062"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="39.3282,23.3559"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="0.212132"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="0.200322"/></dia:attribute><dia:attribute name="border_width"><dia:real val="0.1"/></dia:attribute><dia:attribute name="inner_color"><dia:color val="#000000"/></dia:attribute></dia:object><dia:object type="Standard - Ellipse" version="0" id="O25"><dia:attribute name="obj_pos"><dia:point val="39.3282,22.7525"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="39.2782,22.7025;39.5904,23.0028"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="39.3282,22.7525"/></dia:attribute><dia:att
ribute name="elem_width"><dia:real val="0.212132"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="0.200322"/></dia:attribute><dia:attribute name="border_width"><dia:real val="0.1"/></dia:attribute><dia:attribute name="inner_color"><dia:color val="#000000"/></dia:attribute></dia:object></dia:group><dia:group><dia:object type="Standard - Ellipse" version="0" id="O26"><dia:attribute name="obj_pos"><dia:point val="39.4125,13.9375"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="39.3625,13.8875;39.6746,14.1878"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="39.4125,13.9375"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="0.212132"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="0.200322"/></dia:attribute><dia:attribute name="border_width"><dia:real val="0.1"/></dia:attribute><dia:attribute name="inner_color"><dia:color val="#000000"/></dia:attribute></dia:object><dia:object type="Standard - Ellipse" version="0" id="O27"><dia:attribute name="obj_pos"><dia:point val="39.4125,13.3342"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="39.3625,13.2842;39.6746,13.5845"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="39.4125,13.3342"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="0.212132"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="0.200322"/></dia:attribute><dia:attribute name="border_width"><dia:real val="0.1"/></dia:attribute><dia:attribute name="inner_color"><dia:color val="#000000"/></dia:attribute></dia:object><dia:object type="Standard - Ellipse" version="0" id="O28"><dia:attribute name="obj_pos"><dia:point val="39.4125,12.7308"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="39.3625,12.6808;39.6746,12.9811"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="39.4125,12.7308"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="0.212132"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="0.2003
22"/></dia:attribute><dia:attribute name="border_width"><dia:real val="0.1"/></dia:attribute><dia:attribute name="inner_color"><dia:color val="#000000"/></dia:attribute></dia:object></dia:group></dia:layer></dia:diagram>
  Index: ossp-pkg/srpc/libxds/docs/architecture.eps
  ============================================================
  $ cvs update -p -r1.1 architecture.eps
  %!PS-Adobe-2.0 EPSF-2.0
  %%Title: architecture.dia
  %%Creator: Dia v0.88.1
  %%CreationDate: Tue Jul 31 14:23:46 2001
  %%For: simons
  %%Magnification: 1.0000
  %%Orientation: Portrait
  %%BoundingBox: 0 0 1279 542
  %%Pages: 1
  %%BeginSetup
  %%EndSetup
  %%EndComments
  %%BeginProlog
  [ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  /.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright
  /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one
  /two /three /four /five /six /seven /eight /nine /colon /semicolon
  /less /equal /greater /question /at /A /B /C /D /E
  /F /G /H /I /J /K /L /M /N /O
  /P /Q /R /S /T /U /V /W /X /Y
  /Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c
  /d /e /f /g /h /i /j /k /l /m
  /n /o /p /q /r /s /t /u /v /w
  /x /y /z /braceleft /bar /braceright /asciitilde /.notdef /.notdef /.notdef
  /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  /space /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright
  /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron /degree /plusminus /twosuperior /threesuperior
  /acute /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf
  /threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
  /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde
  /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex
  /Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring
  /ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis
  /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave
  /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis] /isolatin1encoding exch def
  /Times-Roman-latin1
      /Times-Roman findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Times-Italic-latin1
      /Times-Italic findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Times-Bold-latin1
      /Times-Bold findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Times-BoldItalic-latin1
      /Times-BoldItalic findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /AvantGarde-Book-latin1
      /AvantGarde-Book findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /AvantGarde-BookOblique-latin1
      /AvantGarde-BookOblique findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /AvantGarde-Demi-latin1
      /AvantGarde-Demi findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /AvantGarde-DemiOblique-latin1
      /AvantGarde-DemiOblique findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Bookman-Light-latin1
      /Bookman-Light findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Bookman-LightItalic-latin1
      /Bookman-LightItalic findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Bookman-Demi-latin1
      /Bookman-Demi findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Bookman-DemiItalic-latin1
      /Bookman-DemiItalic findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Courier-latin1
      /Courier findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Courier-Oblique-latin1
      /Courier-Oblique findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Courier-Bold-latin1
      /Courier-Bold findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Courier-BoldOblique-latin1
      /Courier-BoldOblique findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Helvetica-latin1
      /Helvetica findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Helvetica-Oblique-latin1
      /Helvetica-Oblique findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Helvetica-Bold-latin1
      /Helvetica-Bold findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Helvetica-BoldOblique-latin1
      /Helvetica-BoldOblique findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Helvetica-Narrow-latin1
      /Helvetica-Narrow findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Helvetica-Narrow-Oblique-latin1
      /Helvetica-Narrow-Oblique findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Helvetica-Narrow-Bold-latin1
      /Helvetica-Narrow-Bold findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Helvetica-Narrow-BoldOblique-latin1
      /Helvetica-Narrow-BoldOblique findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /NewCenturySchoolbook-Roman-latin1
      /NewCenturySchoolbook-Roman findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /NewCenturySchoolbook-Italic-latin1
      /NewCenturySchoolbook-Italic findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /NewCenturySchoolbook-Bold-latin1
      /NewCenturySchoolbook-Bold findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /NewCenturySchoolbook-BoldItalic-latin1
      /NewCenturySchoolbook-BoldItalic findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Palatino-Roman-latin1
      /Palatino-Roman findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Palatino-Italic-latin1
      /Palatino-Italic findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Palatino-Bold-latin1
      /Palatino-Bold findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Palatino-BoldItalic-latin1
      /Palatino-BoldItalic findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Symbol-latin1
      /Symbol findfont
  definefont pop
  /ZapfChancery-MediumItalic-latin1
      /ZapfChancery-MediumItalic findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /ZapfDingbats-latin1
      /ZapfDingbats findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /cp {closepath} bind def
  /c {curveto} bind def
  /f {fill} bind def
  /a {arc} bind def
  /ef {eofill} bind def
  /ex {exch} bind def
  /gr {grestore} bind def
  /gs {gsave} bind def
  /sa {save} bind def
  /rs {restore} bind def
  /l {lineto} bind def
  /m {moveto} bind def
  /rm {rmoveto} bind def
  /n {newpath} bind def
  /s {stroke} bind def
  /sh {show} bind def
  /slc {setlinecap} bind def
  /slj {setlinejoin} bind def
  /slw {setlinewidth} bind def
  /srgb {setrgbcolor} bind def
  /rot {rotate} bind def
  /sc {scale} bind def
  /sd {setdash} bind def
  /ff {findfont} bind def
  /sf {setfont} bind def
  /scf {scalefont} bind def
  /sw {stringwidth pop} bind def
  /tr {translate} bind def
  
  /ellipsedict 8 dict def
  ellipsedict /mtrx matrix put
  /ellipse
  { ellipsedict begin
     /endangle exch def
     /startangle exch def
     /yrad exch def
     /xrad exch def
     /y exch def
     /x exch def   /savematrix mtrx currentmatrix def
     x y tr xrad yrad sc
     0 0 1 startangle endangle arc
     savematrix setmatrix
     end
  } def
  
  /mergeprocs {
  dup length
  3 -1 roll
  dup
  length
  dup
  5 1 roll
  3 -1 roll
  add
  array cvx
  dup
  3 -1 roll
  0 exch
  putinterval
  dup
  4 2 roll
  putinterval
  } bind def
  28.346000 -28.346000 scale
  -0.950000 -25.050000 translate
  %%EndProlog
  
  
  1.000000 1.000000 1.000000 srgb
  n 32.000000 16.000000 m 32.000000 25.000000 l 46.000000 25.000000 l 46.000000 16.000000 l f
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slj
  0.000000 0.000000 0.000000 srgb
  n 32.000000 16.000000 m 32.000000 25.000000 l 46.000000 25.000000 l 46.000000 16.000000 l cp s
  1.000000 1.000000 1.000000 srgb
  n 32.000000 6.000000 m 32.000000 15.000000 l 46.000000 15.000000 l 46.000000 6.000000 l f
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slj
  0.000000 0.000000 0.000000 srgb
  n 32.000000 6.000000 m 32.000000 15.000000 l 46.000000 15.000000 l 46.000000 6.000000 l cp s
  1.000000 1.000000 1.000000 srgb
  n 19.000000 11.000000 m 19.000000 20.000000 l 28.000000 20.000000 l 28.000000 11.000000 l f
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slj
  0.000000 0.000000 0.000000 srgb
  n 19.000000 11.000000 m 19.000000 20.000000 l 28.000000 20.000000 l 28.000000 11.000000 l cp s
  1.000000 1.000000 1.000000 srgb
  n 1.000000 6.000000 m 1.000000 25.000000 l 15.000000 25.000000 l 15.000000 6.000000 l f
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slj
  0.000000 0.000000 0.000000 srgb
  n 1.000000 6.000000 m 1.000000 25.000000 l 15.000000 25.000000 l 15.000000 6.000000 l cp s
  1.000000 1.000000 1.000000 srgb
  n 4.000000 8.000000 m 4.000000 10.000000 l 14.000000 10.000000 l 14.000000 8.000000 l f
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slj
  0.000000 0.000000 0.000000 srgb
  n 4.000000 8.000000 m 4.000000 10.000000 l 14.000000 10.000000 l 14.000000 8.000000 l cp s
  /Courier-latin1 ff 0.800000 scf sf
  (xds_init\(\)) dup sw 2 div 9.000000 ex sub 9.234483 m gs 1 -1 sc sh gr
  1.000000 1.000000 1.000000 srgb
  n 4.000000 10.000000 m 4.000000 12.000000 l 14.000000 12.000000 l 14.000000 10.000000 l f
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slj
  0.000000 0.000000 0.000000 srgb
  n 4.000000 10.000000 m 4.000000 12.000000 l 14.000000 12.000000 l 14.000000 10.000000 l cp s
  /Courier-latin1 ff 0.800000 scf sf
  (xds_destroy\(\)) dup sw 2 div 9.000000 ex sub 11.234483 m gs 1 -1 sc sh gr
  1.000000 1.000000 1.000000 srgb
  n 4.000000 20.000000 m 4.000000 22.000000 l 14.000000 22.000000 l 14.000000 20.000000 l f
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slj
  0.000000 0.000000 0.000000 srgb
  n 4.000000 20.000000 m 4.000000 22.000000 l 14.000000 22.000000 l 14.000000 20.000000 l cp s
  /Courier-latin1 ff 0.800000 scf sf
  (xds_encode\(\)) dup sw 2 div 9.000000 ex sub 21.234483 m gs 1 -1 sc sh gr
  1.000000 1.000000 1.000000 srgb
  n 4.000000 18.000000 m 4.000000 20.000000 l 14.000000 20.000000 l 14.000000 18.000000 l f
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slj
  0.000000 0.000000 0.000000 srgb
  n 4.000000 18.000000 m 4.000000 20.000000 l 14.000000 20.000000 l 14.000000 18.000000 l cp s
  /Courier-latin1 ff 0.800000 scf sf
  (xds_getbuffer\(\)) dup sw 2 div 9.000000 ex sub 19.234483 m gs 1 -1 sc sh gr
  1.000000 1.000000 1.000000 srgb
  n 4.000000 16.000000 m 4.000000 18.000000 l 14.000000 18.000000 l 14.000000 16.000000 l f
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slj
  0.000000 0.000000 0.000000 srgb
  n 4.000000 16.000000 m 4.000000 18.000000 l 14.000000 18.000000 l 14.000000 16.000000 l cp s
  /Courier-latin1 ff 0.800000 scf sf
  (xds_setbuffer\(\)) dup sw 2 div 9.000000 ex sub 17.234483 m gs 1 -1 sc sh gr
  1.000000 1.000000 1.000000 srgb
  n 4.000000 14.000000 m 4.000000 16.000000 l 14.000000 16.000000 l 14.000000 14.000000 l f
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slj
  0.000000 0.000000 0.000000 srgb
  n 4.000000 14.000000 m 4.000000 16.000000 l 14.000000 16.000000 l 14.000000 14.000000 l cp s
  /Courier-latin1 ff 0.800000 scf sf
  (xds_unregister\(\)) dup sw 2 div 9.000000 ex sub 15.234483 m gs 1 -1 sc sh gr
  1.000000 1.000000 1.000000 srgb
  n 4.000000 12.000000 m 4.000000 14.000000 l 14.000000 14.000000 l 14.000000 12.000000 l f
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slj
  0.000000 0.000000 0.000000 srgb
  n 4.000000 12.000000 m 4.000000 14.000000 l 14.000000 14.000000 l 14.000000 12.000000 l cp s
  /Courier-latin1 ff 0.800000 scf sf
  (xds_register\(\)) dup sw 2 div 9.000000 ex sub 13.234483 m gs 1 -1 sc sh gr
  1.000000 1.000000 1.000000 srgb
  n 4.000000 22.000000 m 4.000000 24.000000 l 14.000000 24.000000 l 14.000000 22.000000 l f
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slj
  0.000000 0.000000 0.000000 srgb
  n 4.000000 22.000000 m 4.000000 24.000000 l 14.000000 24.000000 l 14.000000 22.000000 l cp s
  /Courier-latin1 ff 0.800000 scf sf
  (xds_decode\(\)) dup sw 2 div 9.000000 ex sub 23.234483 m gs 1 -1 sc sh gr
  1.000000 1.000000 1.000000 srgb
  n 21.000000 15.000000 m 21.000000 17.000000 l 27.000000 17.000000 l 27.000000 15.000000 l f
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slj
  0.000000 0.000000 0.000000 srgb
  n 21.000000 15.000000 m 21.000000 17.000000 l 27.000000 17.000000 l 27.000000 15.000000 l cp s
  /Courier-latin1 ff 0.800000 scf sf
  (engines) dup sw 2 div 24.000000 ex sub 16.234483 m gs 1 -1 sc sh gr
  1.000000 1.000000 1.000000 srgb
  n 21.000000 17.000000 m 21.000000 19.000000 l 27.000000 19.000000 l 27.000000 17.000000 l f
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slj
  0.000000 0.000000 0.000000 srgb
  n 21.000000 17.000000 m 21.000000 19.000000 l 27.000000 19.000000 l 27.000000 17.000000 l cp s
  /Courier-latin1 ff 0.800000 scf sf
  (buffer) dup sw 2 div 24.000000 ex sub 18.234483 m gs 1 -1 sc sh gr
  1.000000 1.000000 1.000000 srgb
  n 21.000000 13.000000 m 21.000000 15.000000 l 27.000000 15.000000 l 27.000000 13.000000 l f
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slj
  0.000000 0.000000 0.000000 srgb
  n 21.000000 13.000000 m 21.000000 15.000000 l 27.000000 15.000000 l 27.000000 13.000000 l cp s
  /Courier-latin1 ff 0.800000 scf sf
  (mode) dup sw 2 div 24.000000 ex sub 14.234483 m gs 1 -1 sc sh gr
  /Times-Roman-latin1 ff 1.000000 scf sf
  (Framework) dup sw 2 div 3.750000 ex sub 7.300000 m gs 1 -1 sc sh gr
  /Times-Roman-latin1 ff 1.000000 scf sf
  (Context) dup sw 2 div 20.850000 ex sub 12.200000 m gs 1 -1 sc sh gr
  1.000000 1.000000 1.000000 srgb
  n 34.000000 8.000000 m 34.000000 10.000000 l 45.000000 10.000000 l 45.000000 8.000000 l f
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slj
  0.000000 0.000000 0.000000 srgb
  n 34.000000 8.000000 m 34.000000 10.000000 l 45.000000 10.000000 l 45.000000 8.000000 l cp s
  /Courier-latin1 ff 0.800000 scf sf
  (xdr_encode_int32\(\)) dup sw 2 div 39.500000 ex sub 9.234483 m gs 1 -1 sc sh gr
  1.000000 1.000000 1.000000 srgb
  n 34.000000 10.000000 m 34.000000 12.000000 l 45.000000 12.000000 l 45.000000 10.000000 l f
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slj
  0.000000 0.000000 0.000000 srgb
  n 34.000000 10.000000 m 34.000000 12.000000 l 45.000000 12.000000 l 45.000000 10.000000 l cp s
  /Courier-latin1 ff 0.800000 scf sf
  (xdr_decode_int32\(\)) dup sw 2 div 39.500000 ex sub 11.234483 m gs 1 -1 sc sh gr
  1.000000 1.000000 1.000000 srgb
  n 34.000000 18.000000 m 34.000000 20.000000 l 45.000000 20.000000 l 45.000000 18.000000 l f
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slj
  0.000000 0.000000 0.000000 srgb
  n 34.000000 18.000000 m 34.000000 20.000000 l 45.000000 20.000000 l 45.000000 18.000000 l cp s
  /Courier-latin1 ff 0.800000 scf sf
  (xml_encode_int32\(\)) dup sw 2 div 39.500000 ex sub 19.234483 m gs 1 -1 sc sh gr
  1.000000 1.000000 1.000000 srgb
  n 34.000000 20.000000 m 34.000000 22.000000 l 45.000000 22.000000 l 45.000000 20.000000 l f
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slj
  0.000000 0.000000 0.000000 srgb
  n 34.000000 20.000000 m 34.000000 22.000000 l 45.000000 22.000000 l 45.000000 20.000000 l cp s
  /Courier-latin1 ff 0.800000 scf sf
  (xml_decode_unt32\(\)) dup sw 2 div 39.500000 ex sub 21.234483 m gs 1 -1 sc sh gr
  /Times-Roman-latin1 ff 1.000000 scf sf
  (XML Engines) dup sw 2 div 35.135600 ex sub 17.299118 m gs 1 -1 sc sh gr
  /Times-Roman-latin1 ff 1.000000 scf sf
  (XDR engines) dup sw 2 div 34.985600 ex sub 7.349118 m gs 1 -1 sc sh gr
  n 39.434315 24.059358 0.106066 0.100161 0 360 ellipse f
  0.100000 slw
  [] 0 sd
  [] 0 sd
  n 39.434315 24.059358 0.106066 0.100161 0 360 ellipse cp s
  n 39.434315 23.456016 0.106066 0.100161 0 360 ellipse f
  0.100000 slw
  [] 0 sd
  [] 0 sd
  n 39.434315 23.456016 0.106066 0.100161 0 360 ellipse cp s
  n 39.434315 22.852674 0.106066 0.100161 0 360 ellipse f
  0.100000 slw
  [] 0 sd
  [] 0 sd
  n 39.434315 22.852674 0.106066 0.100161 0 360 ellipse cp s
  n 39.518566 14.037661 0.106066 0.100161 0 360 ellipse f
  0.100000 slw
  [] 0 sd
  [] 0 sd
  n 39.518566 14.037661 0.106066 0.100161 0 360 ellipse cp s
  n 39.518566 13.434319 0.106066 0.100161 0 360 ellipse f
  0.100000 slw
  [] 0 sd
  [] 0 sd
  n 39.518566 13.434319 0.106066 0.100161 0 360 ellipse cp s
  n 39.518566 12.830977 0.106066 0.100161 0 360 ellipse f
  0.100000 slw
  [] 0 sd
  [] 0 sd
  n 39.518566 12.830977 0.106066 0.100161 0 360 ellipse cp s
  showpage
  Index: ossp-pkg/srpc/libxds/docs/data-exchange.dia
  ============================================================
  $ cvs update -p -r1.1 data-exchange.dia
  <?xml version="1.0"?>
  <dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/"><dia:diagramdata><dia:attribute name="background"><dia:color val="#ffffff"/></dia:attribute><dia:attribute name="paper"><dia:composite type="paper"><dia:attribute name="name"><dia:string>#A4#</dia:string></dia:attribute><dia:attribute name="tmargin"><dia:real val="2.8222"/></dia:attribute><dia:attribute name="bmargin"><dia:real val="2.8222"/></dia:attribute><dia:attribute name="lmargin"><dia:real val="2.8222"/></dia:attribute><dia:attribute name="rmargin"><dia:real val="2.8222"/></dia:attribute><dia:attribute name="is_portrait"><dia:boolean val="true"/></dia:attribute><dia:attribute name="scaling"><dia:real val="1"/></dia:attribute><dia:attribute name="fitto"><dia:boolean val="false"/></dia:attribute></dia:composite></dia:attribute><dia:attribute name="grid"><dia:composite type="grid"><dia:attribute name="width_x"><dia:real val="1"/></dia:attribute><dia:attribute name="width_y"><dia:real val="1"/></dia:attribute><dia:attribute name="visible_x"><dia:int val="1"/></dia:attribute><dia:attribute name="visible_y"><dia:int val="1"/></dia:attribute></dia:composite></dia:attribute><dia:attribute name="guides"><dia:composite type="guides"><dia:attribute name="hguides"/><dia:attribute name="vguides"/></dia:composite></dia:attribute></dia:diagramdata><dia:layer name="Background" visible="true"><dia:object type="Network - Cloud" version="0" id="O0"><dia:attribute name="obj_pos"><dia:point val="26.9638,12.3854"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="26.4398,11.8614;34.5786,16.1543"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="26.9638,12.3854"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="7.09087"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="3.24491"/></dia:attribute><dia:attribute name="border_width"><dia:real val="0.1"/></dia:attribute><dia:attribute name="show_background"><dia:boolean val="true"/></dia:attribute><dia:attribute name="flip_horizontal"><dia:boolean val="false
"/></dia:attribute><dia:attribute name="flip_vertical"><dia:boolean val="false"/></dia:attribute><dia:attribute name="padding"><dia:real val="0.353553"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#Network#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Helvetica"/></dia:attribute><dia:attribute name="height"><dia:real val="0.8"/></dia:attribute><dia:attribute name="pos"><dia:point val="30.6993,14.305"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Flowchart - Box" version="0" id="O1"><dia:attribute name="obj_pos"><dia:point val="11,8"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="10.95,7.95;14.774,10.05"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="11,8"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="3.724"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="2"/></dia:attribute><dia:attribute name="border_width"><dia:real val="0.1"/></dia:attribute><dia:attribute name="show_background"><dia:boolean val="true"/></dia:attribute><dia:attribute name="padding"><dia:real val="0.5"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#$1234#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Helvetica"/></dia:attribute><dia:attribute name="height"><dia:real val="0.8"/></dia:attribute><dia:attribute name="pos"><dia:point val="12.862,9.24"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="UML - Component" version="0" id="O2"><dia:attribute name="obj_pos"><dia:point val="17.25,12.2225"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="
17.2,12.1725;22.2877,15.7725"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="17.25,12.2225"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="4.98768"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="3.5"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#libxds#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Helvetica"/></dia:attribute><dia:attribute name="height"><dia:real val="0.8"/></dia:attribute><dia:attribute name="pos"><dia:point val="19.65,13.5625"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="0"/></dia:attribute></dia:composite></dia:attribute><dia:attribute name="stereotype"><dia:string/></dia:attribute></dia:object><dia:object type="UML - Component" version="0" id="O3"><dia:attribute name="obj_pos"><dia:point val="39,12.2225"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="38.95,12.1725;44.0377,15.7725"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="39,12.2225"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="4.98768"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="3.5"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#libxds#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Helvetica"/></dia:attribute><dia:attribute name="height"><dia:real val="0.8"/></dia:attribute><dia:attribute name="pos"><dia:point val="41.4,13.5625"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="0"/></dia:attribute></dia:composite></dia:attribute><dia:attribute name="stereotype"><dia:string/></dia:attribute></dia:object><dia:object type="Flowchart - Box" version="0" id="O4"><dia:attribute name="obj_pos"><dia:point val="47,8"/></dia:attribute><dia:attribute name="obj_
bb"><dia:rectangle val="46.95,7.95;50.774,10.05"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="47,8"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="3.724"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="2"/></dia:attribute><dia:attribute name="border_width"><dia:real val="0.1"/></dia:attribute><dia:attribute name="show_background"><dia:boolean val="true"/></dia:attribute><dia:attribute name="padding"><dia:real val="0.5"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#$1234#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Helvetica"/></dia:attribute><dia:attribute name="height"><dia:real val="0.8"/></dia:attribute><dia:attribute name="pos"><dia:point val="48.862,9.24"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Standard - Arc" version="0" id="O5"><dia:attribute name="obj_pos"><dia:point val="12.862,10"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="12.8249,9.96293;17.7869,14.5655"/></dia:attribute><dia:attribute name="conn_endpoints"><dia:point val="12.862,10"/><dia:point val="17.25,13.9725"/></dia:attribute><dia:attribute name="curve_distance"><dia:real val="1.03641"/></dia:attribute><dia:attribute name="line_width"><dia:real val="0.1"/></dia:attribute><dia:attribute name="end_arrow"><dia:enum val="3"/></dia:attribute><dia:attribute name="end_arrow_length"><dia:real val="0.8"/></dia:attribute><dia:attribute name="end_arrow_width"><dia:real val="0.8"/></dia:attribute><dia:connections><dia:connection handle="0" to="O1" connection="13"/><dia:connection handle="1" to="O2" connection="3"/></dia:connections></dia:object><dia:object type="Standard - Arc" version="0" id="O6"><dia:attribute name="obj_pos"><dia:point val="43.9877,13.9725"/></dia:attribute><dia:attribute name="obj_bb"><dia:re
ctangle val="43.9489,9.37986;49.3674,14.0112"/></dia:attribute><dia:attribute name="conn_endpoints"><dia:point val="43.9877,13.9725"/><dia:point val="48.862,10"/></dia:attribute><dia:attribute name="curve_distance"><dia:real val="1.03641"/></dia:attribute><dia:attribute name="line_width"><dia:real val="0.1"/></dia:attribute><dia:attribute name="end_arrow"><dia:enum val="3"/></dia:attribute><dia:attribute name="end_arrow_length"><dia:real val="0.8"/></dia:attribute><dia:attribute name="end_arrow_width"><dia:real val="0.8"/></dia:attribute><dia:connections><dia:connection handle="0" to="O3" connection="4"/><dia:connection handle="1" to="O4" connection="13"/></dia:connections></dia:object><dia:object type="Standard - Line" version="0" id="O7"><dia:attribute name="obj_pos"><dia:point val="22.2377,13.9725"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="22.1877,13.1598;27.1461,14.7598"/></dia:attribute><dia:attribute name="conn_endpoints"><dia:point val="22.2377,13.9725"/><dia:point val="27.0961,13.9598"/></dia:attribute><dia:attribute name="numcp"><dia:int val="1"/></dia:attribute><dia:attribute name="line_width"><dia:real val="0.1"/></dia:attribute><dia:attribute name="end_arrow"><dia:enum val="3"/></dia:attribute><dia:attribute name="end_arrow_length"><dia:real val="0.8"/></dia:attribute><dia:attribute name="end_arrow_width"><dia:real val="0.8"/></dia:attribute><dia:connections><dia:connection handle="0" to="O2" connection="4"/><dia:connection handle="1" to="O0" connection="0"/></dia:connections></dia:object><dia:object type="Standard - Line" version="0" id="O8"><dia:attribute name="obj_pos"><dia:point val="33.7819,13.9967"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="33.7319,13.1842;38.9819,14.7842"/></dia:attribute><dia:attribute name="conn_endpoints"><dia:point val="33.7819,13.9967"/><dia:point val="38.9319,13.9842"/></dia:attribute><dia:attribute name="numcp"><dia:int val="1"/></dia:attribute><dia:attribute name="line_width"><dia:real val="0.1"/></dia:attribute><dia:attri
bute name="end_arrow"><dia:enum val="3"/></dia:attribute><dia:attribute name="end_arrow_length"><dia:real val="0.8"/></dia:attribute><dia:attribute name="end_arrow_width"><dia:real val="0.8"/></dia:attribute></dia:object><dia:object type="Standard - Text" version="0" id="O9"><dia:attribute name="obj_pos"><dia:point val="12,1"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="9.06695,0.205882;14.9331,3.20588"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#The value in
  Host A's
  representation#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Times-Roman"/></dia:attribute><dia:attribute name="height"><dia:real val="1"/></dia:attribute><dia:attribute name="pos"><dia:point val="12,1"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Standard - Line" version="0" id="O10"><dia:attribute name="obj_pos"><dia:point val="16,0"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="15.995,-0.005;16.005,17.005"/></dia:attribute><dia:attribute name="conn_endpoints"><dia:point val="16,0"/><dia:point val="16,17"/></dia:attribute><dia:attribute name="numcp"><dia:int val="1"/></dia:attribute><dia:attribute name="line_width"><dia:real val="0.01"/></dia:attribute><dia:attribute name="line_style"><dia:enum val="4"/></dia:attribute></dia:object><dia:object type="Standard - Line" version="0" id="O11"><dia:attribute name="obj_pos"><dia:point val="46,0"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="45.995,-0.005;46.005,17.005"/></dia:attribute><dia:attribute name="conn_endpoints"><dia:point val="46,0"/><dia:point val="46,17"/></dia:attribute><dia:attribute name="numcp"><dia:int val="1"/></dia:attribute><dia:attribute name="line_width"><dia:real val="0.01"/></dia:attribute><dia:attribute name="line_style"><dia:enum val="4"/></dia:attribute></dia:object><dia:object type="Standard - Line" version="0" id="O12"><dia:attribute name="obj_pos"><dia:point val="36,0"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="35.995,-0.005;36.005,17.005"/></dia:attribute><dia:attribute name="conn_endpoints"><dia:point val="36,0"/><dia:point val="36,17"/></dia:attribute><dia:attribute name="numcp"><dia:int val="1"/></dia:attribute><dia:attribute name="line_width"><dia:real val="0.01"/></dia:attribute><dia:attribute name="line_style"><dia:enum val="4"/></dia:attribute></dia:object><dia:object typ
e="Standard - Line" version="0" id="O13"><dia:attribute name="obj_pos"><dia:point val="24,0"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="23.995,-0.005;24.005,17.005"/></dia:attribute><dia:attribute name="conn_endpoints"><dia:point val="24,0"/><dia:point val="24,17"/></dia:attribute><dia:attribute name="numcp"><dia:int val="1"/></dia:attribute><dia:attribute name="line_width"><dia:real val="0.01"/></dia:attribute><dia:attribute name="line_style"><dia:enum val="4"/></dia:attribute></dia:object><dia:object type="Standard - Text" version="0" id="O14"><dia:attribute name="obj_pos"><dia:point val="30,1"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="26.4306,0.205882;33.5694,3.20588"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#Transfer encoded
  value over the
  network.#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Times-Roman"/></dia:attribute><dia:attribute name="height"><dia:real val="1"/></dia:attribute><dia:attribute name="pos"><dia:point val="30,1"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Standard - Text" version="0" id="O15"><dia:attribute name="obj_pos"><dia:point val="20,1"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="16.6427,0.205882;23.3573,4.20588"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#Encode value
  from host
  format to
  standard format.#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Times-Roman"/></dia:attribute><dia:attribute name="height"><dia:real val="1"/></dia:attribute><dia:attribute name="pos"><dia:point val="20,1"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Standard - Text" version="0" id="O16"><dia:attribute name="obj_pos"><dia:point val="50,1"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="47.0669,0.205882;52.9331,3.20588"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#The value in
  Host B's
  representation#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Times-Roman"/></dia:attribute><dia:attribute name="height"><dia:real val="1"/></dia:attribute><dia:attribute name="pos"><dia:point val="50,1"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Standard - Text" version="0" id="O17"><dia:attribute name="obj_pos"><dia:point val="41,1"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="38.0776,0.205882;43.8725,4.20588"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#Decode value
  from standard
  format to host
  format.#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Times-Roman"/></dia:attribute><dia:attribute name="height"><dia:real val="1"/></dia:attribute><dia:attribute name="pos"><dia:point val="41,1"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object></dia:layer></dia:diagram>
  Index: ossp-pkg/srpc/libxds/docs/data-exchange.eps
  ============================================================
  $ cvs update -p -r1.1 data-exchange.eps
  %!PS-Adobe-2.0 EPSF-2.0
  %%Title: /home/simons/projects/srpc/libxds/docs/data-exchange.dia
  %%Creator: Dia v0.88.1
  %%CreationDate: Tue Jul 31 15:42:54 2001
  %%For: simons
  %%Magnification: 1.0000
  %%Orientation: Portrait
  %%BoundingBox: 0 0 1244 483
  %%Pages: 1
  %%BeginSetup
  %%EndSetup
  %%EndComments
  %%BeginProlog
  [ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  /.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright
  /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one
  /two /three /four /five /six /seven /eight /nine /colon /semicolon
  /less /equal /greater /question /at /A /B /C /D /E
  /F /G /H /I /J /K /L /M /N /O
  /P /Q /R /S /T /U /V /W /X /Y
  /Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c
  /d /e /f /g /h /i /j /k /l /m
  /n /o /p /q /r /s /t /u /v /w
  /x /y /z /braceleft /bar /braceright /asciitilde /.notdef /.notdef /.notdef
  /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  /space /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright
  /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron /degree /plusminus /twosuperior /threesuperior
  /acute /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf
  /threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
  /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde
  /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex
  /Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring
  /ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis
  /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave
  /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis] /isolatin1encoding exch def
  /Times-Roman-latin1
      /Times-Roman findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Times-Italic-latin1
      /Times-Italic findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Times-Bold-latin1
      /Times-Bold findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Times-BoldItalic-latin1
      /Times-BoldItalic findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /AvantGarde-Book-latin1
      /AvantGarde-Book findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /AvantGarde-BookOblique-latin1
      /AvantGarde-BookOblique findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /AvantGarde-Demi-latin1
      /AvantGarde-Demi findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /AvantGarde-DemiOblique-latin1
      /AvantGarde-DemiOblique findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Bookman-Light-latin1
      /Bookman-Light findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Bookman-LightItalic-latin1
      /Bookman-LightItalic findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Bookman-Demi-latin1
      /Bookman-Demi findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Bookman-DemiItalic-latin1
      /Bookman-DemiItalic findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Courier-latin1
      /Courier findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Courier-Oblique-latin1
      /Courier-Oblique findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Courier-Bold-latin1
      /Courier-Bold findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Courier-BoldOblique-latin1
      /Courier-BoldOblique findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Helvetica-latin1
      /Helvetica findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Helvetica-Oblique-latin1
      /Helvetica-Oblique findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Helvetica-Bold-latin1
      /Helvetica-Bold findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Helvetica-BoldOblique-latin1
      /Helvetica-BoldOblique findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Helvetica-Narrow-latin1
      /Helvetica-Narrow findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Helvetica-Narrow-Oblique-latin1
      /Helvetica-Narrow-Oblique findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Helvetica-Narrow-Bold-latin1
      /Helvetica-Narrow-Bold findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Helvetica-Narrow-BoldOblique-latin1
      /Helvetica-Narrow-BoldOblique findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /NewCenturySchoolbook-Roman-latin1
      /NewCenturySchoolbook-Roman findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /NewCenturySchoolbook-Italic-latin1
      /NewCenturySchoolbook-Italic findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /NewCenturySchoolbook-Bold-latin1
      /NewCenturySchoolbook-Bold findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /NewCenturySchoolbook-BoldItalic-latin1
      /NewCenturySchoolbook-BoldItalic findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Palatino-Roman-latin1
      /Palatino-Roman findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Palatino-Italic-latin1
      /Palatino-Italic findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Palatino-Bold-latin1
      /Palatino-Bold findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Palatino-BoldItalic-latin1
      /Palatino-BoldItalic findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Symbol-latin1
      /Symbol findfont
  definefont pop
  /ZapfChancery-MediumItalic-latin1
      /ZapfChancery-MediumItalic findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /ZapfDingbats-latin1
      /ZapfDingbats findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /cp {closepath} bind def
  /c {curveto} bind def
  /f {fill} bind def
  /a {arc} bind def
  /ef {eofill} bind def
  /ex {exch} bind def
  /gr {grestore} bind def
  /gs {gsave} bind def
  /sa {save} bind def
  /rs {restore} bind def
  /l {lineto} bind def
  /m {moveto} bind def
  /rm {rmoveto} bind def
  /n {newpath} bind def
  /s {stroke} bind def
  /sh {show} bind def
  /slc {setlinecap} bind def
  /slj {setlinejoin} bind def
  /slw {setlinewidth} bind def
  /srgb {setrgbcolor} bind def
  /rot {rotate} bind def
  /sc {scale} bind def
  /sd {setdash} bind def
  /ff {findfont} bind def
  /sf {setfont} bind def
  /scf {scalefont} bind def
  /sw {stringwidth pop} bind def
  /tr {translate} bind def
  
  /ellipsedict 8 dict def
  ellipsedict /mtrx matrix put
  /ellipse
  { ellipsedict begin
     /endangle exch def
     /startangle exch def
     /yrad exch def
     /xrad exch def
     /y exch def
     /x exch def   /savematrix mtrx currentmatrix def
     x y tr xrad yrad sc
     0 0 1 startangle endangle arc
     savematrix setmatrix
     end
  } def
  
  /mergeprocs {
  dup length
  3 -1 roll
  dup
  length
  dup
  5 1 roll
  3 -1 roll
  add
  array cvx
  dup
  3 -1 roll
  0 exch
  putinterval
  dup
  4 2 roll
  putinterval
  } bind def
  28.346000 -28.346000 scale
  -9.066950 -17.005000 translate
  %%EndProlog
  
  
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slc
  0 slj
  0 slc
  0 slj
  [] 0 sd
  1.000000 1.000000 1.000000 srgb
  n 28.578343 13.328139 m 28.029049 13.317177 26.963752 13.547390 27.113560 14.040704 c 27.263366 14.534017 27.979113 14.643638 28.278728 14.501130 c 28.578343 14.358617 27.812660 15.191765 29.277445 15.411015 c 30.742216 15.630266 31.491254 15.279465 31.274865 15.027327 c 31.058477 14.775189 32.556552 15.619304 33.255654 15.136952 c 33.954756 14.654601 32.539907 14.194179 32.839522 14.259954 c 33.139137 14.325729 34.054627 14.238029 33.755012 13.415840 c 33.455397 12.593650 30.758861 13.229477 31.058477 13.108889 c 31.358092 12.988301 30.609054 12.385361 29.676932 12.505949 c 28.744796 12.626537 28.678681 12.845360 28.578809 13.327712 c 28.578343 13.328139 l f
  0.000000 0.000000 0.000000 srgb
  n 28.578343 13.328139 m 28.029049 13.317177 26.963752 13.547390 27.113560 14.040704 c 27.263366 14.534017 27.979113 14.643638 28.278728 14.501130 c 28.578343 14.358617 27.812660 15.191765 29.277445 15.411015 c 30.742216 15.630266 31.491254 15.279465 31.274865 15.027327 c 31.058477 14.775189 32.556552 15.619304 33.255654 15.136952 c 33.954756 14.654601 32.539907 14.194179 32.839522 14.259954 c 33.139137 14.325729 34.054627 14.238029 33.755012 13.415840 c 33.455397 12.593650 30.758861 13.229477 31.058477 13.108889 c 31.358092 12.988301 30.609054 12.385361 29.676932 12.505949 c 28.744796 12.626537 28.678681 12.845360 28.578809 13.327712 c 28.578343 13.328139 l s
  /Helvetica-latin1 ff 0.800000 scf sf
  (Network) dup sw 2 div 30.699271 ex sub 14.305014 m gs 1 -1 sc sh gr
  1.000000 1.000000 1.000000 srgb
  n 11.000000 8.000000 m 11.000000 10.000000 l 14.724000 10.000000 l 14.724000 8.000000 l f
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slj
  0.000000 0.000000 0.000000 srgb
  n 11.000000 8.000000 m 11.000000 10.000000 l 14.724000 10.000000 l 14.724000 8.000000 l cp s
  /Helvetica-latin1 ff 0.800000 scf sf
  ($1234) dup sw 2 div 12.862000 ex sub 9.240000 m gs 1 -1 sc sh gr
  0.100000 slw
  [] 0 sd
  1.000000 1.000000 1.000000 srgb
  n 18.250000 12.222453 m 18.250000 15.722453 l 22.237680 15.722453 l 22.237680 12.222453 l f
  0.000000 0.000000 0.000000 srgb
  n 18.250000 12.222453 m 18.250000 15.722453 l 22.237680 15.722453 l 22.237680 12.222453 l cp s
  1.000000 1.000000 1.000000 srgb
  n 17.250000 12.922453 m 17.250000 13.622453 l 19.250000 13.622453 l 19.250000 12.922453 l f
  0.000000 0.000000 0.000000 srgb
  n 17.250000 12.922453 m 17.250000 13.622453 l 19.250000 13.622453 l 19.250000 12.922453 l cp s
  1.000000 1.000000 1.000000 srgb
  n 17.250000 14.322453 m 17.250000 15.022453 l 19.250000 15.022453 l 19.250000 14.322453 l f
  0.000000 0.000000 0.000000 srgb
  n 17.250000 14.322453 m 17.250000 15.022453 l 19.250000 15.022453 l 19.250000 14.322453 l cp s
  /Helvetica-latin1 ff 0.800000 scf sf
  (libxds) 19.650000 13.562453 m gs 1 -1 sc sh gr
  0.100000 slw
  [] 0 sd
  1.000000 1.000000 1.000000 srgb
  n 40.000000 12.222453 m 40.000000 15.722453 l 43.987680 15.722453 l 43.987680 12.222453 l f
  0.000000 0.000000 0.000000 srgb
  n 40.000000 12.222453 m 40.000000 15.722453 l 43.987680 15.722453 l 43.987680 12.222453 l cp s
  1.000000 1.000000 1.000000 srgb
  n 39.000000 12.922453 m 39.000000 13.622453 l 41.000000 13.622453 l 41.000000 12.922453 l f
  0.000000 0.000000 0.000000 srgb
  n 39.000000 12.922453 m 39.000000 13.622453 l 41.000000 13.622453 l 41.000000 12.922453 l cp s
  1.000000 1.000000 1.000000 srgb
  n 39.000000 14.322453 m 39.000000 15.022453 l 41.000000 15.022453 l 41.000000 14.322453 l f
  0.000000 0.000000 0.000000 srgb
  n 39.000000 14.322453 m 39.000000 15.022453 l 41.000000 15.022453 l 41.000000 14.322453 l cp s
  /Helvetica-latin1 ff 0.800000 scf sf
  (libxds) 41.400000 13.562453 m gs 1 -1 sc sh gr
  1.000000 1.000000 1.000000 srgb
  n 47.000000 8.000000 m 47.000000 10.000000 l 50.724000 10.000000 l 50.724000 8.000000 l f
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slj
  0.000000 0.000000 0.000000 srgb
  n 47.000000 8.000000 m 47.000000 10.000000 l 50.724000 10.000000 l 50.724000 8.000000 l cp s
  /Helvetica-latin1 ff 0.800000 scf sf
  ($1234) dup sw 2 div 48.862000 ex sub 9.240000 m gs 1 -1 sc sh gr
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slc
  n 17.544095 9.237859 4.743719 4.743719 93.554427 170.754606 ellipse s
  0 slj
  n 16.426740 14.322086 m 17.250000 13.972453 l 16.476338 13.523625 l f
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slc
  n 43.739542 8.691284 5.286995 5.286995 14.331690 87.309911 ellipse s
  0 slj
  n 49.051524 10.874117 m 48.862000 10.000000 l 48.276420 10.676089 l f
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slc
  n 22.237680 13.972453 m 27.096130 13.959822 l s
  0 slj
  n 26.297172 14.361901 m 27.096130 13.959822 l 26.295092 13.561903 l f
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slc
  n 33.781947 13.996742 m 38.931947 13.984242 l s
  0 slj
  n 38.132920 14.386182 m 38.931947 13.984242 l 38.130978 13.586185 l f
  /Times-Roman-latin1 ff 1.000000 scf sf
  (The value in) dup sw 2 div 12.000000 ex sub 1.000000 m gs 1 -1 sc sh gr
  (Host A's) dup sw 2 div 12.000000 ex sub 2.000000 m gs 1 -1 sc sh gr
  (representation) dup sw 2 div 12.000000 ex sub 3.000000 m gs 1 -1 sc sh gr
  0.010000 slw
  [0.200000] 0 sd
  [0.200000] 0 sd
  0 slc
  n 16.000000 0.000000 m 16.000000 17.000000 l s
  0.010000 slw
  [0.200000] 0 sd
  [0.200000] 0 sd
  0 slc
  n 46.000000 0.000000 m 46.000000 17.000000 l s
  0.010000 slw
  [0.200000] 0 sd
  [0.200000] 0 sd
  0 slc
  n 36.000000 0.000000 m 36.000000 17.000000 l s
  0.010000 slw
  [0.200000] 0 sd
  [0.200000] 0 sd
  0 slc
  n 24.000000 0.000000 m 24.000000 17.000000 l s
  /Times-Roman-latin1 ff 1.000000 scf sf
  (Transfer encoded) dup sw 2 div 30.000000 ex sub 1.000000 m gs 1 -1 sc sh gr
  (value over the) dup sw 2 div 30.000000 ex sub 2.000000 m gs 1 -1 sc sh gr
  (network.) dup sw 2 div 30.000000 ex sub 3.000000 m gs 1 -1 sc sh gr
  /Times-Roman-latin1 ff 1.000000 scf sf
  (Encode value) dup sw 2 div 20.000000 ex sub 1.000000 m gs 1 -1 sc sh gr
  (from host) dup sw 2 div 20.000000 ex sub 2.000000 m gs 1 -1 sc sh gr
  (format to) dup sw 2 div 20.000000 ex sub 3.000000 m gs 1 -1 sc sh gr
  (standard format.) dup sw 2 div 20.000000 ex sub 4.000000 m gs 1 -1 sc sh gr
  /Times-Roman-latin1 ff 1.000000 scf sf
  (The value in) dup sw 2 div 50.000000 ex sub 1.000000 m gs 1 -1 sc sh gr
  (Host B's) dup sw 2 div 50.000000 ex sub 2.000000 m gs 1 -1 sc sh gr
  (representation) dup sw 2 div 50.000000 ex sub 3.000000 m gs 1 -1 sc sh gr
  /Times-Roman-latin1 ff 1.000000 scf sf
  (Decode value) dup sw 2 div 41.000000 ex sub 1.000000 m gs 1 -1 sc sh gr
  (from standard) dup sw 2 div 41.000000 ex sub 2.000000 m gs 1 -1 sc sh gr
  (format to host) dup sw 2 div 41.000000 ex sub 3.000000 m gs 1 -1 sc sh gr
  (format.) dup sw 2 div 41.000000 ex sub 4.000000 m gs 1 -1 sc sh gr
  showpage

From ossp-cvs-owner@ossp.org  Thu Aug  2 14:19:47 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f72CJln04639; Thu, 2 Aug 2001 14:19:47 +0200 (CEST)
Date: Thu, 2 Aug 2001 14:19:47 +0200 (CEST)
Message-Id: <200108021219.f72CJln04639@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/docs .cvsignore
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   02-Aug-2001 14:19:47
  Branch: HEAD                             Handle: 2001080213194600

  Added files:
    ossp-pkg/srpc/libxds/docs .cvsignore

  Log:
    Ignore dependent files.

  Summary:
    Revision    Changes     Path
    1.1         +2  -0      ossp-pkg/srpc/libxds/docs/.cvsignore
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/docs/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  libxds.aux libxds.dvi libxds.log libxds.ps
  encode decode

From ossp-cvs-owner@ossp.org  Thu Aug  2 15:57:14 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f72DvDE15342; Thu, 2 Aug 2001 15:57:13 +0200 (CEST)
Date: Thu, 2 Aug 2001 15:57:13 +0200 (CEST)
Message-Id: <200108021357.f72DvDE15342@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/docs encode.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   02-Aug-2001 15:57:13
  Branch: HEAD                             Handle: 2001080214571200

  Modified files:
    ossp-pkg/srpc/libxds/docs encode.c

  Log:
    Free the buffer created by xds_encode() before leaving.

  Summary:
    Revision    Changes     Path
    1.2         +2  -0      ossp-pkg/srpc/libxds/docs/encode.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/docs/encode.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 encode.c
  --- ossp-pkg/srpc/libxds/docs/encode.c	2001/08/02 12:19:14	1.1
  +++ ossp-pkg/srpc/libxds/docs/encode.c	2001/08/02 13:57:12	1.2
  @@ -42,6 +42,8 @@
   
       write(STDOUT_FILENO, buffer, buffer_size);
   
  +    free(buffer);
  +
       fprintf(stderr, "Encoded data:\n");
       fprintf(stderr, "\tint32   = %d\n", int32);
       fprintf(stderr, "\tuint32 = 0x%x\n", uint32);

From ossp-cvs-owner@ossp.org  Thu Aug  2 15:58:09 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f72Dw7I15712; Thu, 2 Aug 2001 15:58:07 +0200 (CEST)
Date: Thu, 2 Aug 2001 15:58:07 +0200 (CEST)
Message-Id: <200108021358.f72Dw7I15712@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/docs libxds.tex
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   02-Aug-2001 15:58:07
  Branch: HEAD                             Handle: 2001080214580700

  Added files:
    ossp-pkg/srpc/libxds/docs libxds.tex

  Log:
    Currently, the manual contains an introduction, a description of the
    architecture and two example programs demonstrating how to encode and
    decode. Much remains to be written.

  Summary:
    Revision    Changes     Path
    1.1         +0  -0      ossp-pkg/srpc/libxds/docs/libxds.tex
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/docs/libxds.tex
  ============================================================
  $ cvs update -p -r1.1 libxds.tex
  % -*- mode: LaTeX; fill-column: 75; -*-
  %
  % $Id: libxds.tex,v 1.1 2001/08/02 13:58:07 simons Exp $
  %
  \documentclass[a4paper,10pt,pointlessnumbers,bibtotoc]{scrartcl}
  \usepackage[dvips,xdvi]{graphicx}
  \usepackage{fancyvrb}
  \typearea[2cm]{12}
  \fussy
  
  \begin{document}
  
  \subject{Cable \& Wireless Application Development}
  \title{XDS -- eXtensible Data Serialization}
  \author{Peter Simons $<$simons@computer.org$>$}
  \date{2001-08-01}
  \maketitle
  
  \section{Introduction}
  
  In today's networked world, computer systems of all brands and flavours
  communicate with each other. Unfortunately, these systems are far from
  being identical: Many systems use different internal representations for
  the same thing. Look at the (hexadecimal) number \$1234 for instance: On a
  big endian machine, this number will be stored in memory the way you'd
  intuitively expect: \$12~\$34 --- the more significant byte preceeds the
  less significant one. On a little endian machine, though, the number \$1234
  will be stored like this: \$34~\$12 --- exactly the other way round.
  
  As a result, you cannot just write the number \$1234 to a socket and expect
  the other end to understand it correctly, because if the endians differ,
  the reader will read a different number than the writer sent. Things will
  get even more complicated when you start exchanging floating point numbers,
  for which about a dozen different encodings exist!
  
  Solving these problems is the domain of libxds; its purpose is to encode
  data in a way that allows this data to be exchanged between computer
  systems of different types. Assume you'd want to reliably transfer the
  value \$1234 from host A to host B. Then you would encode the value using
  libxds, transfer the encoded data via the network, and decode the value
  again at the other end. Every application that follows this process will
  read the correct value no matter what native representation its hosting
  platform uses internally.
  
  \begin{figure}[tbh]
      \begin{center}
          \includegraphics[width=\textwidth]{data-exchange.eps}
          \caption{Data exchange using libxds}
          \label{data exchange}
      \end{center}
  \end{figure}
  
  There is a rich variety of applications for such a functionality: libxds
  may be used to encode data before it is written to disk or read from the
  disk, it may be used to encode data to be exchanged between processes over
  the network, etc. Because of this variety, special attention has been paid
  to the library design.
  
  \paragraph{The library has been designed to be extensible.}
  The functionality is split into a generic encoding and decoding framework
  and a set of formatting engines. These engines can be plugged into the
  framework at run-time to actually encode and decode data. Because of this
  architecture, libxds can be customized to deploy any data format the
  developer sees fit. Included in the distribution are formatting engines for
  the XDR format specified in \cite{xdr} and for the XML format specified in
  \cite{xml}.
  
  \paragraph{The library is convenient to use.}
  An arbitrary number of variables can be encoded or decoded with one single
  function call. All memory management is done by libxds, the developer
  doesn't need bother to allocate or to manage buffers for the encoded or
  decoded data. Automatic buffer management can be switched off at run-time,
  though, for maximum performance.
  
  \paragraph{Performance.}
  Since all transferred data has to wander through libxds, the library has
  been written to encode and decode with maximim performance. The generic
  encoding framework adds almost no run-time overhead to the encoding
  process. If non-automatic buffer management has been selected, hardly
  anything but the actual formatting engines is executed.
  
  \paragraph{Robustness.}
  In order to verify that the library is working correctly, a set of
  regression tests is included in the distribution. The test suits will ---
  among other things --- encode known values and compare the result with the
  expected (correct) values. This ensures that libxds works correctly on any
  platform.
  
  \paragraph{Use standard formats.}
  The supported formats XDR and XML and widely known and accepted formats,
  which are most likely interoperable with other marshaling implementations.
  For XDR for example, it would be possible to encode data with libxds and to
  decode it with an entirely different XDR implementation or vice versa.
  
  \paragraph{Portability.}
  libxds has been written with portability in mind. Development took place on
  FreeBSD, Linux and Solaris; other platforms has been used to test the
  results. It is expected that libxds will compile and function on virtually
  any POSIX.1-compilant system with a moderately modern ISO-C compiler. Gnu's
  CC (gcc) is known to compile the library just fine. For maximum
  portability, GNU autoconf has been used to determine the target system's
  properties.
  
  \section{Architecture of libxds}
  
  \begin{figure}[htb]
      \begin{center}
          \includegraphics[width=\textwidth]{architecture.eps}
          \caption{Components of libxds}
          \label{libxds components}
      \end{center}
  \end{figure}
  
  The architecture of libxds is illustrated in figure~\ref{libxds
  components}. libxds consists of three components: The generic encoding and
  decoding framework, a set of formatting engines to encode and decode values
  in a certain forman, and a run-time context, which is used to manage
  buffers, registered engines, etc.
  
  In order to use the library, the first thing the developer has to do is to
  create a valid XDS context by calling {\sf xds\_init()}. The routine
  requires one parameter that determines whether to operate in encoding- or
  decoding mode. A context can be used for encoding or decoding only; it is
  not possible to use the same context for both operations. Once a valid XDS
  context has been obtained, the routine {\sf xds\_register()} can be used to
  register an arbitrary number of formatting engines within the context.
  
  A set of formatting engines has been included in the library. These
  routines will handle any elementary datatype included in the ISO-C language
  such as 32-bit integers, 64-bit integers, unsigned integers (of both 32-
  and 64-bit), floating point numbers, strings and octet streams.
  
  Once all required formatting engines are registered, the routines {\sf
  xds\_encode()} or {\sf xds\_\-decode()} may be used to actually perform the
  encoding or decoding process. Any data type for which a formatting engine
  has been registered can be handled by the library.
  
  This means, that it is possible for the developer to write custom
  formatting engines for any data type he desires to use and to register them
  in the context as long as these engines adhere to the {\sf xds\_engine\_t}
  interface defined in {\sf xds.h}.
  
  In particular it is possible to register meta formatting engines. That is a
  formatting engine designed to encode or decode structures --- data types
  which consist of several elementary data types. The formatting engine for
  such a structure will simply re-use the existing engines in order to encode
  or decode the whole structure. The clou here is that the meta engine
  doesn't even need to know \emph{which} low-level formatting engines are
  registered in order to use them. Hence, a meta engine may format the whole
  structure in XDR, XML, or any other format without needing to know anything
  about the details.
  
  This topic is addressed in great detail in section~\ref{meta engines} of
  this document, but before we come to that rather advanced topic, let us
  start by studying two simple examples of how data is encoded and decoded
  using libxds.
  
  \section{Using the XDS library}
  
  \subsection{Encoding}
  
  The following example program will encode three variables using the XDR
  formatting engines. The result of the process will then be written to the
  standard output stream, which can be redirected to a file or piped into the
  decoding program described in the next section. Just take a look at the
  source code for a moment, we will then go on to discuss all relevant
  sections line by line.
  
  \begin{Verbatim}[numbers=left,fontsize=\small,frame=lines]
  #include <stdio.h>
  #include <unistd.h>
  #include <string.h>
  #include <errno.h>
  #include <xds.h>
  
  static void error_exit(int rc, const char* msg, ...)
      {
      va_list args;
      va_start(args, msg);
      vfprintf(stderr, msg, args);
      va_end(args);
      exit(rc);
      }
  
  int main()
      {
      xds_t* xds;
      char*  buffer;
      size_t buffer_size;
  
      xds_int32_t  int32  = -42;
      xds_uint32_t uint32 = 0x12345678;
      const char*  string = "This is a test.";
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL)
          error_exit(1, "Failed to initialize XDS context: %s\n", strerror(errno));
  
      if (xds_register(xds, "int32",  &xdr_encode_int32, NULL) != XDS_OK ||
          xds_register(xds, "uint32", &xdr_encode_uint32, NULL) != XDS_OK ||
          xds_register(xds, "string", &xdr_encode_string, NULL) != XDS_OK)
          error_exit(1, "Failed to register my encoding engines!\n");
  
      if (xds_encode(xds, "int32 uint32 string", int32, uint32, string) != XDS_OK)
          error_exit(1, "xds_encode() failed!\n");
  
      if (xds_getbuffer(xds, XDS_GIFT, (void**)&buffer, &buffer_size) != XDS_OK)
          error_exit(1, "getbuffer() failed.\n");
  
      xds_destroy(xds);
  
      write(STDOUT_FILENO, buffer, buffer_size);
  
      free(buffer);
  
      fprintf(stderr, "Encoded data:\n");
      fprintf(stderr, "\tint32   = %d\n", int32);
      fprintf(stderr, "\tuint32 = 0x%x\n", uint32);
      fprintf(stderr, "\tstring = \"%s\"\n", string);
  
      return 0;
      }
  \end{Verbatim}
  
  \paragraph{Lines 1--5.}
  The program starts by including several system headers, which define the
  prototypes for some routines we use. The most interesting header in our
  case is of course {\sf xds.h} --- the header of libxds. Please note that
  all declarations required to use libxds are included in that file.
  
  \paragraph{Lines 7--13.}
  The {\sf error\_exit()} routine is not relevant for the example; we just
  define it to make the rest of the source code shorter and easier to read.
  
  \paragraph{Lines 16--53.}
  This is the interesting part: The {\sf main()} routine. This function will
  create the variables to be encoded on the stack, assign values to them,
  initialize the XDS library, use it to encode the values, and write the
  result of the encoding process to the standard output stream. Read on for
  further details.
  
  \paragraph{Lines 26--28.}
  First of all we have to obtain a XDS context for all further operation.
  This is done by calling {\sf xds\_init()}. Since we intend to \emph{encode}
  data, we initialize the context in encoding mode. The only other mode of
  operation would be decoding mode, but this is demonstrated in the next
  section.
  
  All routines in libxds return a code from a small list of return codes
  defined in {\sf xds.h}, but {\sf xds\_init()} is different: It will return
  a pointer to an {\sf xds\_t} in case of success and {\sf NULL} in case of
  failure. One reason why {\sf xds\_init()} would fail is because it can't
  allocate the memory required to initialize the context. In this case, the
  system variable {\sf errno} is set to {\sf ENOMEM}. Another reason why {\sf
  xds\_init()} would fail is because the mode parameter is invalid, in which
  case {\sf errno} woulde be set to {\sf EINVAL}. If libxds has been compiled
  with assertions enabled, such an error would result in an assertion error,
  terminating the program with a diagnostic message immediately.
  
  \paragraph{Lines 30--33.}
  Once we have obtained a valid XDS context, we register the formatting
  engines we need. In this example, we'll encode a signed 32-bit integer, an
  unsigned 32-bit integer, and a string. We'll be using XDR encoding in this
  case, so the engines to register are {\sf xdr\_encode\_int32()}, {\sf
  xdr\_encode\_uint32()}, and {\sf xdr\_encode\_string()}. (A complete list
  of available formatting engines can be found in {\sf xds.h} or in
  section~\ref{xdr}~and~\ref{xml}. Please note that we could switch the
  deployed encoding format simply be using the corresponding {\sf
  xml\_encode\_XXX()} engines here. We could even mix XDR and XML encoding as
  we see fit but it's hard to think of a case where this would make sense.
  
  As you can see in the code, the developer is free to choose a name he'd
  like to register the engine under. These names may only contain
  alphanumerical characters plus the hyphon (``\verb#-#'') and the underscore
  (``\verb#_#''). You can choose any name you want, but it is recommended to
  follow the naming scheme of the corresponding formatting engine. Why this
  is recommended will be seen in section~\ref{meta engines}.
  
  \paragraph{Lines 35--36.}
  This is the place where the actual encoding takes place. As parameters,
  {\sf xds\_encode()} requires a valid encoding context plus a format string
  that describes how the following parameters are to be interpreted. While
  the concept is obviously identical to {\sf sprintf()}, the syntax is
  different. The format string may contain an arbitrary number of names,
  which are delimited by an arbitrary number of any character that is not a
  legal character for engine names. Thus you can delimit the names by colons,
  blanks, or whatever you like.
  
  For each valid engine name in the format string, a corresponding parameter
  must follow. What these parameters mean depends on the engine you're using.
  The engines provided with the libxds library will expect the value to
  encode, but theoretically developers are free to write formatting engines
  that expect virtually any kind of information here. More about this will
  explained in section~\ref{meta engines}.
  
  \paragraph{Lines 38--39.}
  We have encoded all values we wanted to encode, now we can get the result
  from the library. This happens by calling {\sf xds\_getbuffer()}. The
  routine will store the buffer's address and length at the locations we
  provided as parameters. Please note that we can choose whether we want the
  buffer as a ``gift'' ({\sf XDS\_GIFT}) or as a ``loan'' ({\sf XDS\_LOAN}).
  
  The buffer being a ``loan'' means that the buffer is still owned by the
  library -- we're only allowed to peak at it. But any call to an libxds
  routine may potentially modify the buffer or even change the buffers
  location. Hence the result of a {\sf xds\_getbuffer()} call with loaning
  semantics is only valid until the next libxds routine is called. After
  that, it is invalid.
  
  If we choose the gift semantics, the buffer we receive will be owned by us;
  the library will not touch the buffer again. This means of course, that
  we're responsible for {\sf free()}ing the buffer when we don't need it
  anymore.
  
  \paragraph{Line 41.}
  Destroy the XDS context and all data associated with it. This is possible
  because we requested the buffer as ``gift''; the buffer is not associated
  with libxds anymore.
  
  \paragraph{Line 43.}
  Write the buffer with the encoded data to the standard output stream.
  
  \paragraph{Line 45.}
  Now that we don't need the buffer anymore, we have to return the memory it
  uses to the system. libxds won't do that for us.
  
  \paragraph{Lines 47--50.}
  Write a short report of what we have done to the standard error channel.
  
  \bigskip
  Finally, let us compile and execute the example program shown above. For
  convenience, it is included in the distribution under the name {\sf
  docs/encode.c}. You can compile and execute the program as follows:
  
  \begin{quote}
  \begin{verbatim}
  simons@dev13:~/libxds$ cd docs
  simons@dev13:~/libxds/docs$ gcc -I.. encode.c -o encode -L.. -lxds
  simons@dev13:~/libxds/docs$ ./encode >output
  Encoded data:
          int32   = -42
          uint32 = 0x12345678
          string = "This is a test."
  simons@dev13:~/libxds/docs$ ls -l output
  -rw-r--r--  1 simons  simons  28 Aug  2 15:21 output
  \end{verbatim}
  \end{quote}
  
  The result of executing the programm --- the file {\sf output} --- can be
  displayed with {\sf hexdump(1)} or {\sf od(1)} and should look like this:
  
  \begin{quote}
  \begin{Verbatim}[fontsize=\small]
  simons@dev13:~/libxds/docs$ hexdump -C output
  00000000  ff ff ff d6 12 34 56 78  00 00 00 0f 54 68 69 73  |.....4Vx....This|
  00000010  20 69 73 20 61 20 74 65  73 74 2e 00              | is a test..|
  0000001c
  \end{Verbatim}
  \end{quote}
  
  \noindent
  We will also re-use this file in the next section, where we'll read it and
  decode those values again.
  
  
  \subsection{Decoding}
  
  The following example program will read the result of the encoding example
  shown in the previous section and decode the values back into the native
  representation. Then it will print those values to the standard error
  stream so that the user can see the values are correct. Please take a look
  at the source now, we'll discuss all relevant details in the following
  paragraphs.
  
  \begin{Verbatim}[numbers=left,fontsize=\small,frame=lines]
  #include <stdio.h>
  #include <unistd.h>
  #include <string.h>
  #include <errno.h>
  #include <xds.h>
  
  static void error_exit(int rc, const char* msg, ...)
      {
      va_list args;
      va_start(args, msg);
      vfprintf(stderr, msg, args);
      va_end(args);
      exit(rc);
      }
  
  int main()
      {
      xds_t* xds;
      char   buffer[1024];
      size_t buffer_len;
      int rc;
  
      xds_int32_t  int32;
      xds_uint32_t uint32;
      char*        string;
  
      buffer_len = 0;
      do
          {
          rc = read(STDIN_FILENO, buffer + buffer_len, sizeof(buffer) - buffer_len);
          if (rc < 0)
              error_exit(1, "read() failed: %s\n", strerror(errno));
          else if (rc > 0)
              buffer_len += rc;
          }
      while (rc > 0 && buffer_len < sizeof(buffer));
  
      if (buffer_len >= sizeof(buffer))
          error_exit(1, "Too much input data for our buffer.\n");
  
      xds = xds_init(XDS_DECODE);
      if (xds == NULL)
          error_exit(1, "Failed to initialize XDS context: %s\n", strerror(errno));
  
      if (xds_register(xds, "int32",  &xdr_decode_int32, NULL) != XDS_OK ||
          xds_register(xds, "uint32", &xdr_decode_uint32, NULL) != XDS_OK ||
          xds_register(xds, "string", &xdr_decode_string, NULL) != XDS_OK)
          error_exit(1, "Failed to register my decoding engines!\n");
  
      if (xds_setbuffer(xds, XDS_LOAN, buffer, buffer_len) != XDS_OK)
          error_exit(1, "setbuffer() failed.\n");
  
      if (xds_decode(xds, "int32 uint32 string", &int32, &uint32, &string) != XDS_OK)
          error_exit(1, "xds_decode() failed!\n");
  
      xds_destroy(xds);
  
      fprintf(stderr, "Decoded data:\n");
      fprintf(stderr, "\tint32   = %d\n", int32);
      fprintf(stderr, "\tuint32 = 0x%x\n", uint32);
      fprintf(stderr, "\tstring = \"%s\"\n", string);
  
      free(string);
  
      return 0;
      }
  \end{Verbatim}
  
  \paragraph{Lines 1--25.}
  Include the required header files, define the {\sf error\_exit()} helper
  function, and create the required variables on the stack.
  
  \paragraph{Lines 27--39.}
  These instructions will read an unspecified number of bytes from the
  standard input stream --- as long as the input does not exceed the size of
  the {\sf buffer} variable. In order to provide the program with the
  apropriate input, redirect the standard input stream to the file {\sf
  output} created in the previous section or connect the encoding and
  decoding programs directly by a pipe.
  
  \paragraph{Lines 41-43.}
  Create a context for decoding the values. The semantics are identical to
  those described in the previous section.
  
  \paragraph{Lines 45--48.}
  Register the decoding engines in the context. Please note that obviously
  the decoding engines must correspond to the encoding engines used to create
  the data we're about to process. Using, say, an XML engine to decode XDR
  data will at best return with an error --- in the worst case, it will
  return incorrect results!
  
  \paragraph{Lines 50-51.}
  Here we do not get a buffer from the library, we \emph{set} the buffer
  we've read earlier in the context for decoding. Please note that we use
  loan semantics in this case, not gift semantics. This is necessary because
  {\sf buffer} has not been allocated by {\sf malloc()} --- the variable
  lives on the stack. This means that we cannot give it to libxds because
  libxds expects to be able to {\sf free()} the buffer when the context is
  destroyed.
  
  Loan semantics are fine, though, all we have to do is to take care that we
  don't erase or modify the contents of {\sf buffer} while libxds operates on
  it. The library itself will never touch the buffer in decode mode, no
  matter whether loan or gift semantics have been chosen.
  
  \paragraph{Lines 53--54.}
  Here come the actual decoding of the buffer's contents using {\sf
  xds\_decode()}. The syntax is identical to {\sf xds\_encode()}'s, the only
  difference is that the decoding engines do not expect the values --- like
  the encoding engines did --- but the location where to store the value.
  Thus we pass the addresses of the apropriate variables here. If the routine
  returns with {\sf XDS\_OK}, the decoded values will have been stored in
  those locations.
  
  It should be noted that the decoded string cannot trivially be returned
  this way. Instead, {\sf xds\_decode()} will use {\sf malloc()} to allocate
  a buffer barely large enough to hold the string. The address of that buffer
  is then stored in the pointer {\sf string}. Of course this means that the
  application has to {\sf free()} the string once it's not required anymore.
  
  \paragraph{Line 56.}
  We don't need the context anymore, so we destroy it and free all used
  resources. This does not affect {\sf buffer} in any way because we used
  loan semantics.
  
  \paragraph{Lines 58-61.}
  Print the decoded values to the standard error stream for the user to take
  a look at them.
  
  \paragraph{Line 63.}
  Now that we don't need the contents of {\sf string} anymore, we must return
  the buffer allocated in {\sf xds\_decode()} to the system.
  
  \bigskip
  Like the encoding program described earlier, the source code to this
  program is included in the library distribution as {\sf docs/decode.c}. You
  can compile and execute the program like this:
  
  \begin{quote}
  \begin{verbatim}
  simons@dev13:~/libxds$ cd docs
  simons@dev13:~/libxds/docs$ gcc -I.. decode.c -o decode -L.. -lxds
  simons@dev13:~/libxds/docs$ ./decode <output
  Decoded data:
          int32   = -42
          uint32 = 0x12345678
          string = "This is a test."
  \end{verbatim}
  \end{quote}
  
  Of course we assume that the {\sf output} file has been created as
  described in the previous section, otherwise you cannot trivially use the
  example program. Alternatively, you could execute both programs like this:
  
  \begin{quote}
  \begin{Verbatim}[fontsize=\small]
  simons@dev13:~/libxds/docs$ ./encode | ./decode
  Encoded data:
          int32   = -42
          uint32 = 0x12345678
          string = "This is a test."
  Decoded data:
          int32   = -42
          uint32 = 0x12345678
          string = "This is a test."
  \end{Verbatim}
  \end{quote}
  
  \noindent
  This will encode and decode the values without the need for a temporary
  file.
  
  \section{Extending the XDS library}
  \label{meta engines}
  
  
  \section{The XDS Framework}
  \label{xds}
  
  \section{The XDR Engines}
  \label{xdr}
  
  \section{The XML Engines}
  \label{xml}
  
  \begin{thebibliography}{xxx}
  
  \bibitem{xdr} RFC 1832: ``XDR: External Data Representation Standard'',
  R.~Srinivasan, August~1995
  
  \bibitem{xml} {\sf http://www.ossp.org/pkg/xds/xds-xml.dtd}
  
  
  \end{thebibliography}
  
  \end{document}

From ossp-cvs-owner@ossp.org  Thu Aug  2 16:18:32 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f72EIVF18285; Thu, 2 Aug 2001 16:18:31 +0200 (CEST)
Date: Thu, 2 Aug 2001 16:18:31 +0200 (CEST)
Message-Id: <200108021418.f72EIVF18285@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds configure.ac
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   02-Aug-2001 16:18:31
  Branch: HEAD                             Handle: 2001080215183000

  Modified files:
    ossp-pkg/srpc/libxds    configure.ac

  Log:
    Removed the duplicate test for the signed integer variants.

  Summary:
    Revision    Changes     Path
    1.10        +17 -26     ossp-pkg/srpc/libxds/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/configure.ac
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 configure.ac
  --- ossp-pkg/srpc/libxds/configure.ac	2001/08/02 08:36:33	1.9
  +++ ossp-pkg/srpc/libxds/configure.ac	2001/08/02 14:18:30	1.10
  @@ -2,7 +2,7 @@
   
   AC_INIT(libxds)
   AC_PREREQ(2.52)
  -AC_REVISION($Revision: 1.9 $)
  +AC_REVISION($Revision: 1.10 $)
   
   dnl Get rid of the lousy -g and -O defaults in CFLAGS.
   dnl
  @@ -24,51 +24,42 @@
   AC_CHECK_TYPE(u_int8_t, [xds_uint8_t=u_int8_t],
                 [AC_CHECK_TYPE(uint8_t, [xds_uint8_t=uint8_t],
   			     [AC_MSG_ERROR([no unsigned 8 bit data type found])]
  -                            )]
  -             )
  +                            )])
   AC_SUBST([xds_uint8_t])
   AC_CHECK_TYPE(u_int16_t, [xds_uint16_t=u_int16_t],
                 [AC_CHECK_TYPE(uint16_t, [xds_uint16_t=uint16_t],
   			     [AC_MSG_ERROR([no unsigned 16 bit data type found])]
  -                            )]
  -             )
  +                            )])
   AC_SUBST([xds_uint16_t])
   AC_CHECK_TYPE(u_int32_t, [xds_uint32_t=u_int32_t],
                 [AC_CHECK_TYPE(uint32_t, [xds_uint32_t=uint32_t],
   			     [AC_MSG_ERROR([no unsigned 32 bit data type found])]
  -                            )]
  -             )
  +                            )])
   AC_SUBST([xds_uint32_t])
   AC_CHECK_TYPE(u_int64_t, [xds_uint64_t=u_int64_t],
                 [AC_CHECK_TYPE(uint64_t, [xds_uint64_t=uint64_t],
  -			     [AC_MSG_ERROR([no unsigned 64 bit data type found])]
  -                            )]
  -             )
  +			     [AC_MSG_ERROR([no unsigned 64 bit data type found])
  +			     ])])
   AC_SUBST([xds_uint64_t])
  +dnl
   AC_CHECK_TYPE(int8_t, [xds_int8_t=int8_t],
  -              [AC_CHECK_TYPE(int8_t, [xds_int8_t=int8_t],
  -			     [AC_MSG_ERROR([no signed 8 bit data type found])]
  -                            )]
  -             )
  +              [AC_MSG_ERROR([no signed 8 bit data type found])
  +	      ])
   AC_SUBST([xds_int8_t])
   AC_CHECK_TYPE(int16_t, [xds_int16_t=int16_t],
  -              [AC_CHECK_TYPE(int16_t, [xds_int16_t=int16_t],
  -			     [AC_MSG_ERROR([no signed 16 bit data type found])]
  -                            )]
  -             )
  +              [AC_MSG_ERROR([no signed 16 bit data type found])
  +	      ])
   AC_SUBST([xds_int16_t])
   AC_CHECK_TYPE(int32_t, [xds_int32_t=int32_t],
  -              [AC_CHECK_TYPE(int32_t, [xds_int32_t=int32_t],
  -			     [AC_MSG_ERROR([no signed 32 bit data type found])]
  -                            )]
  -             )
  +              [AC_MSG_ERROR([no signed 32 bit data type found])
  +	      ])
   AC_SUBST([xds_int32_t])
   AC_CHECK_TYPE(int64_t, [xds_int64_t=int64_t],
  -              [AC_CHECK_TYPE(int64_t, [xds_int64_t=int64_t],
  -			     [AC_MSG_ERROR([no signed 64 bit data type found])]
  -                            )]
  -             )
  +              [AC_MSG_ERROR([no signed 64 bit data type found])
  +	      ])
   AC_SUBST([xds_int64_t])
  +dnl
  +AC_SUBST([have_64_bit_support])
   
   dnl Find the library containing the xdr_xxx() functions.
   dnl

From ossp-cvs-owner@ossp.org  Thu Aug  2 16:39:16 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f72EdGJ20548; Thu, 2 Aug 2001 16:39:16 +0200 (CEST)
Date: Thu, 2 Aug 2001 16:39:16 +0200 (CEST)
Message-Id: <200108021439.f72EdGJ20548@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds configure.ac xds.h.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   02-Aug-2001 16:39:15
  Branch: HEAD                             Handle: 2001080215391500

  Modified files:
    ossp-pkg/srpc/libxds    configure.ac xds.h.in

  Log:
    The configure script will now recognize when any of the 64-bit data
    types is missing. In this case, the define XDS_HAVE_64_BIT_SUPPORT
    will _not_ be defined in xds.h; it will be defined otherwise.
    Depending on whether the define is there or not, the 64-bit engines
    will not be defined.

  Summary:
    Revision    Changes     Path
    1.11        +21 -19     ossp-pkg/srpc/libxds/configure.ac
    1.9         +11 -3      ossp-pkg/srpc/libxds/xds.h.in
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/configure.ac
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 configure.ac
  --- ossp-pkg/srpc/libxds/configure.ac	2001/08/02 14:18:30	1.10
  +++ ossp-pkg/srpc/libxds/configure.ac	2001/08/02 14:39:15	1.11
  @@ -2,7 +2,7 @@
   
   AC_INIT(libxds)
   AC_PREREQ(2.52)
  -AC_REVISION($Revision: 1.10 $)
  +AC_REVISION($Revision: 1.11 $)
   
   dnl Get rid of the lousy -g and -O defaults in CFLAGS.
   dnl
  @@ -23,42 +23,44 @@
   dnl
   AC_CHECK_TYPE(u_int8_t, [xds_uint8_t=u_int8_t],
                 [AC_CHECK_TYPE(uint8_t, [xds_uint8_t=uint8_t],
  -			     [AC_MSG_ERROR([no unsigned 8 bit data type found])]
  -                            )])
  -AC_SUBST([xds_uint8_t])
  +			     [AC_MSG_ERROR([no unsigned 8 bit data type found])])])
   AC_CHECK_TYPE(u_int16_t, [xds_uint16_t=u_int16_t],
                 [AC_CHECK_TYPE(uint16_t, [xds_uint16_t=uint16_t],
  -			     [AC_MSG_ERROR([no unsigned 16 bit data type found])]
  -                            )])
  -AC_SUBST([xds_uint16_t])
  +			     [AC_MSG_ERROR([no unsigned 16 bit data type found])])])
   AC_CHECK_TYPE(u_int32_t, [xds_uint32_t=u_int32_t],
                 [AC_CHECK_TYPE(uint32_t, [xds_uint32_t=uint32_t],
  -			     [AC_MSG_ERROR([no unsigned 32 bit data type found])]
  -                            )])
  -AC_SUBST([xds_uint32_t])
  +			     [AC_MSG_ERROR([no unsigned 32 bit data type found])])])
   AC_CHECK_TYPE(u_int64_t, [xds_uint64_t=u_int64_t],
                 [AC_CHECK_TYPE(uint64_t, [xds_uint64_t=uint64_t],
  -			     [AC_MSG_ERROR([no unsigned 64 bit data type found])
  -			     ])])
  -AC_SUBST([xds_uint64_t])
  +			     [AC_MSG_WARN([no unsigned 64 bit data type found])
  +			     xds_uint64_t=undefined])])
   dnl
   AC_CHECK_TYPE(int8_t, [xds_int8_t=int8_t],
                 [AC_MSG_ERROR([no signed 8 bit data type found])
   	      ])
  -AC_SUBST([xds_int8_t])
   AC_CHECK_TYPE(int16_t, [xds_int16_t=int16_t],
                 [AC_MSG_ERROR([no signed 16 bit data type found])
   	      ])
  -AC_SUBST([xds_int16_t])
   AC_CHECK_TYPE(int32_t, [xds_int32_t=int32_t],
                 [AC_MSG_ERROR([no signed 32 bit data type found])
   	      ])
  -AC_SUBST([xds_int32_t])
   AC_CHECK_TYPE(int64_t, [xds_int64_t=int64_t],
  -              [AC_MSG_ERROR([no signed 64 bit data type found])
  -	      ])
  -AC_SUBST([xds_int64_t])
  +              [AC_MSG_WARN([no signed 64 bit data type found])
  +	      xds_int64_t=undefined])
   dnl
  +if test "$xds_int64_t" = "undefined" -o "$xds_uint64_t" = "undefined"; then
  +   have_64_bit_support="#undef XDS_HAVE_64_BIT_SUPPORT"
  +else
  +   have_64_bit_support="#define XDS_HAVE_64_BIT_SUPPORT"
  +fi
  +AC_SUBST([xds_uint8_t])
  +AC_SUBST([xds_uint16_t])
  +AC_SUBST([xds_uint32_t])
  +AC_SUBST([xds_uint64_t])
  +AC_SUBST([xds_int8_t])
  +AC_SUBST([xds_int16_t])
  +AC_SUBST([xds_int32_t])
  +AC_SUBST([xds_int64_t])
   AC_SUBST([have_64_bit_support])
   
   dnl Find the library containing the xdr_xxx() functions.
  Index: ossp-pkg/srpc/libxds/xds.h.in
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 xds.h.in
  --- ossp-pkg/srpc/libxds/xds.h.in	2001/08/02 08:12:26	1.8
  +++ ossp-pkg/srpc/libxds/xds.h.in	2001/08/02 14:39:15	1.9
  @@ -38,14 +38,18 @@
   #define XDS_TRUE (1==1)
   #define XDS_FALSE (1!=1)
   
  +@have_64_bit_support@
  +
   typedef @xds_uint8_t@ xds_uint8_t;
  -typedef @xds_uint16_t@ xds_uint16_t;
  -typedef @xds_uint32_t@ xds_uint32_t;
  -typedef @xds_uint64_t@ xds_uint64_t;
   typedef @xds_int8_t@ xds_int8_t;
  +typedef @xds_uint16_t@ xds_uint16_t;
   typedef @xds_int16_t@ xds_int16_t;
  +typedef @xds_uint32_t@ xds_uint32_t;
   typedef @xds_int32_t@ xds_int32_t;
  +#ifdef XDS_HAVE_64_BIT_SUPPORT
  +typedef @xds_uint64_t@ xds_uint64_t;
   typedef @xds_int64_t@ xds_int64_t;
  +#endif
   typedef double xds_double_t;
   
   enum
  @@ -126,10 +130,12 @@
   xds_declare_formatting_engine(xdr_decode_uint32);
   xds_declare_formatting_engine(xdr_encode_int32);
   xds_declare_formatting_engine(xdr_decode_int32);
  +#ifdef XDS_HAVE_64_BIT_SUPPORT
   xds_declare_formatting_engine(xdr_encode_uint64);
   xds_declare_formatting_engine(xdr_decode_uint64);
   xds_declare_formatting_engine(xdr_encode_int64);
   xds_declare_formatting_engine(xdr_decode_int64);
  +#endif
   xds_declare_formatting_engine(xdr_encode_double);
   xds_declare_formatting_engine(xdr_decode_double);
   xds_declare_formatting_engine(xdr_encode_octetstream);
  @@ -145,10 +151,12 @@
   xds_declare_formatting_engine(xml_decode_uint32);
   xds_declare_formatting_engine(xml_encode_int32);
   xds_declare_formatting_engine(xml_decode_int32);
  +#ifdef XDS_HAVE_64_BIT_SUPPORT
   xds_declare_formatting_engine(xml_encode_uint64);
   xds_declare_formatting_engine(xml_decode_uint64);
   xds_declare_formatting_engine(xml_encode_int64);
   xds_declare_formatting_engine(xml_decode_int64);
  +#endif
   xds_declare_formatting_engine(xml_encode_double);
   xds_declare_formatting_engine(xml_decode_double);
   xds_declare_formatting_engine(xml_encode_octetstream);

From ossp-cvs-owner@ossp.org  Thu Aug  2 16:56:15 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f72EuFq22287; Thu, 2 Aug 2001 16:56:15 +0200 (CEST)
Date: Thu, 2 Aug 2001 16:56:15 +0200 (CEST)
Message-Id: <200108021456.f72EuFq22287@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile.in configure.ac ossp-pkg/srp...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   02-Aug-2001 16:56:14
  Branch: HEAD                             Handle: 2001080215561301

  Modified files:
    ossp-pkg/srpc/libxds    Makefile.in configure.ac
    ossp-pkg/srpc/libxds/regression-tests
                            Makefile.in

  Log:
    Build modules that need 64-bit support only if 64-bit data types have
    been found!

  Summary:
    Revision    Changes     Path
    1.14        +20 -20     ossp-pkg/srpc/libxds/Makefile.in
    1.12        +10 -1      ossp-pkg/srpc/libxds/configure.ac
    1.12        +4  -4      ossp-pkg/srpc/libxds/regression-tests/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile.in
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 Makefile.in
  --- ossp-pkg/srpc/libxds/Makefile.in	2001/08/02 10:54:27	1.13
  +++ ossp-pkg/srpc/libxds/Makefile.in	2001/08/02 14:56:13	1.14
  @@ -1,28 +1,28 @@
   # Build libxds.
   
  -CC		= @CC@
  -AR		= ar
  -RANLIB		= @RANLIB@
  +CC              = @CC@
  +AR              = ar
  +RANLIB          = @RANLIB@
   
  -CPPFLAGS	= @CPPFLAGS@ @DEFS@ -D_GNU_SOURCE
  -CFLAGS		= @CFLAGS@
  -LDFLAGS		= @LDFLAGS@
  +CPPFLAGS        = @CPPFLAGS@ @DEFS@ -D_GNU_SOURCE
  +CFLAGS          = @CFLAGS@
  +LDFLAGS         = @LDFLAGS@
   
  -XML_OBJS	= xml-encode-int32.o       xml-decode-int32.o \
  -		  xml-encode-uint32.o      xml-decode-uint32.o \
  -		  xml-encode-int64.o       xml-decode-int64.o \
  -		  xml-encode-uint64.o      xml-decode-uint64.o \
  -		  xml-encode-double.o      xml-decode-double.o \
  -		  xml-encode-begin.o       xml-decode-begin.o \
  -		  xml-encode-end.o         xml-decode-end.o
  +XML64_OBJS      = @xml_64_bit_objects@
  +XML_OBJS        = xml-encode-int32.o       xml-decode-int32.o \
  +                  xml-encode-uint32.o      xml-decode-uint32.o \
  +                  xml-encode-double.o      xml-decode-double.o \
  +                  xml-encode-begin.o       xml-decode-begin.o \
  +                  xml-encode-end.o         xml-decode-end.o \
  +                  $(XML64_OBJS)
   
  -XDR_OBJS	= xdr-encode-int32.o       xdr-decode-int32.o \
  -		  xdr-encode-uint32.o      xdr-decode-uint32.o \
  -		  xdr-encode-int64.o       xdr-decode-int64.o \
  -		  xdr-encode-uint64.o      xdr-decode-uint64.o \
  -		  xdr-encode-double.o      xdr-decode-double.o \
  -		  xdr-encode-octetstream.o xdr-decode-octetstream.o \
  -		  xdr-encode-string.o      xdr-decode-string.o \
  +XDR64_OBJS      = @xdr_64_bit_objects@
  +XDR_OBJS        = xdr-encode-int32.o       xdr-decode-int32.o \
  +                  xdr-encode-uint32.o      xdr-decode-uint32.o \
  +                  xdr-encode-double.o      xdr-decode-double.o \
  +                  xdr-encode-octetstream.o xdr-decode-octetstream.o \
  +                  xdr-encode-string.o      xdr-decode-string.o \
  +                  $(XDR64_OBJS)
   
   XDS_OBJS	= decode.o destroy.o encode.o getbuffer.o init.o register.o \
   		  setbuffer.o unregister.o vdecode.o vencode.o find-engine.o \
  Index: ossp-pkg/srpc/libxds/configure.ac
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 configure.ac
  --- ossp-pkg/srpc/libxds/configure.ac	2001/08/02 14:39:15	1.11
  +++ ossp-pkg/srpc/libxds/configure.ac	2001/08/02 14:56:14	1.12
  @@ -2,7 +2,7 @@
   
   AC_INIT(libxds)
   AC_PREREQ(2.52)
  -AC_REVISION($Revision: 1.11 $)
  +AC_REVISION($Revision: 1.12 $)
   
   dnl Get rid of the lousy -g and -O defaults in CFLAGS.
   dnl
  @@ -52,6 +52,12 @@
      have_64_bit_support="#undef XDS_HAVE_64_BIT_SUPPORT"
   else
      have_64_bit_support="#define XDS_HAVE_64_BIT_SUPPORT"
  +   xdr_64_bit_objects="xdr-encode-int64.o xdr-decode-int64.o"
  +   xdr_64_bit_objects="$xdr_64_bit_objects xdr-encode-uint64.o xdr-decode-uint64.o"
  +   xml_64_bit_objects="xml-encode-int64.o xml-decode-int64.o"
  +   xml_64_bit_objects="$xml_64_bit_objects xml-encode-uint64.o xml-decode-uint64.o"
  +   tests_64_bit="xdr-int64.exe xdr-uint64.exe xml-int64.exe xml-uint64.exe"
  +   tests_64_bit="$tests_64_bit xds-mystruct"
   fi
   AC_SUBST([xds_uint8_t])
   AC_SUBST([xds_uint16_t])
  @@ -62,6 +68,9 @@
   AC_SUBST([xds_int32_t])
   AC_SUBST([xds_int64_t])
   AC_SUBST([have_64_bit_support])
  +AC_SUBST([xdr_64_bit_objects])
  +AC_SUBST([xml_64_bit_objects])
  +AC_SUBST([tests_64_bit])
   
   dnl Find the library containing the xdr_xxx() functions.
   dnl
  Index: ossp-pkg/srpc/libxds/regression-tests/Makefile.in
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 Makefile.in
  --- ossp-pkg/srpc/libxds/regression-tests/Makefile.in	2001/08/01 15:25:50	1.11
  +++ ossp-pkg/srpc/libxds/regression-tests/Makefile.in	2001/08/02 14:56:14	1.12
  @@ -8,12 +8,12 @@
   CFLAGS		= @CFLAGS@
   LDFLAGS		= @LDFLAGS@ @xdr_lib@ -L..
   
  +TESTS64		= @tests_64_bit@
   TESTS		= xds-core.exe xds-find-engine.exe xds-register.exe xds-encode.exe \
   		  xds-getbuffer.exe xds-decode.exe xds-setbuffer.exe xds-engine-restart.exe \
  -		  xdr-uint32.exe xdr-int32.exe xdr-uint64.exe xdr-int64.exe  \
  -		  xdr-octetstream.exe xdr-octetstream-empty.exe xdr-string.exe \
  -		  xdr-string-empty.exe xds-mystruct.exe \
  -		  xml-uint32.exe xml-int32.exe xml-uint64.exe xml-int64.exe xml-double.exe
  +		  xdr-uint32.exe xdr-int32.exe xdr-octetstream.exe xdr-octetstream-empty.exe \
  +		  xdr-string.exe xdr-string-empty.exe xml-uint32.exe xml-int32.exe \
  +		  xml-double.exe $(TESTS64)
   
   .SUFFIXES:
   .SUFFIXES:	.c .exe

From ossp-cvs-owner@ossp.org  Thu Aug  2 16:56:55 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f72Euri22363; Thu, 2 Aug 2001 16:56:53 +0200 (CEST)
Date: Thu, 2 Aug 2001 16:56:53 +0200 (CEST)
Message-Id: <200108021456.f72Euri22363@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds configure.ac
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   02-Aug-2001 16:56:53
  Branch: HEAD                             Handle: 2001080215565300

  Modified files:
    ossp-pkg/srpc/libxds    configure.ac

  Log:
    Fixed suffix of the mystruct test.

  Summary:
    Revision    Changes     Path
    1.13        +2  -2      ossp-pkg/srpc/libxds/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/configure.ac
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 configure.ac
  --- ossp-pkg/srpc/libxds/configure.ac	2001/08/02 14:56:14	1.12
  +++ ossp-pkg/srpc/libxds/configure.ac	2001/08/02 14:56:53	1.13
  @@ -2,7 +2,7 @@
   
   AC_INIT(libxds)
   AC_PREREQ(2.52)
  -AC_REVISION($Revision: 1.12 $)
  +AC_REVISION($Revision: 1.13 $)
   
   dnl Get rid of the lousy -g and -O defaults in CFLAGS.
   dnl
  @@ -57,7 +57,7 @@
      xml_64_bit_objects="xml-encode-int64.o xml-decode-int64.o"
      xml_64_bit_objects="$xml_64_bit_objects xml-encode-uint64.o xml-decode-uint64.o"
      tests_64_bit="xdr-int64.exe xdr-uint64.exe xml-int64.exe xml-uint64.exe"
  -   tests_64_bit="$tests_64_bit xds-mystruct"
  +   tests_64_bit="$tests_64_bit xds-mystruct.exe"
   fi
   AC_SUBST([xds_uint8_t])
   AC_SUBST([xds_uint16_t])

From ossp-cvs-owner@ossp.org  Thu Aug  2 17:03:53 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f72F3qk23533; Thu, 2 Aug 2001 17:03:52 +0200 (CEST)
Date: Thu, 2 Aug 2001 17:03:52 +0200 (CEST)
Message-Id: <200108021503.f72F3qk23533@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   02-Aug-2001 17:03:52
  Branch: HEAD                             Handle: 2001080216035100

  Modified files:
    ossp-pkg/srpc/libxds    Makefile.in

  Log:
    Tabified the makefiles.

  Summary:
    Revision    Changes     Path
    1.15        +20 -20     ossp-pkg/srpc/libxds/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile.in
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 Makefile.in
  --- ossp-pkg/srpc/libxds/Makefile.in	2001/08/02 14:56:13	1.14
  +++ ossp-pkg/srpc/libxds/Makefile.in	2001/08/02 15:03:51	1.15
  @@ -1,28 +1,28 @@
   # Build libxds.
   
  -CC              = @CC@
  -AR              = ar
  -RANLIB          = @RANLIB@
  +CC		= @CC@
  +AR		= ar
  +RANLIB		= @RANLIB@
   
  -CPPFLAGS        = @CPPFLAGS@ @DEFS@ -D_GNU_SOURCE
  -CFLAGS          = @CFLAGS@
  -LDFLAGS         = @LDFLAGS@
  +CPPFLAGS	= @CPPFLAGS@ @DEFS@ -D_GNU_SOURCE
  +CFLAGS		= @CFLAGS@
  +LDFLAGS		= @LDFLAGS@
   
  -XML64_OBJS      = @xml_64_bit_objects@
  -XML_OBJS        = xml-encode-int32.o       xml-decode-int32.o \
  -                  xml-encode-uint32.o      xml-decode-uint32.o \
  -                  xml-encode-double.o      xml-decode-double.o \
  -                  xml-encode-begin.o       xml-decode-begin.o \
  -                  xml-encode-end.o         xml-decode-end.o \
  -                  $(XML64_OBJS)
  +XML64_OBJS	= @xml_64_bit_objects@
  +XML_OBJS	= xml-encode-int32.o	   xml-decode-int32.o \
  +		  xml-encode-uint32.o	   xml-decode-uint32.o \
  +		  xml-encode-double.o	   xml-decode-double.o \
  +		  xml-encode-begin.o	   xml-decode-begin.o \
  +		  xml-encode-end.o	   xml-decode-end.o \
  +		  $(XML64_OBJS)
   
  -XDR64_OBJS      = @xdr_64_bit_objects@
  -XDR_OBJS        = xdr-encode-int32.o       xdr-decode-int32.o \
  -                  xdr-encode-uint32.o      xdr-decode-uint32.o \
  -                  xdr-encode-double.o      xdr-decode-double.o \
  -                  xdr-encode-octetstream.o xdr-decode-octetstream.o \
  -                  xdr-encode-string.o      xdr-decode-string.o \
  -                  $(XDR64_OBJS)
  +XDR64_OBJS	= @xdr_64_bit_objects@
  +XDR_OBJS	= xdr-encode-int32.o	   xdr-decode-int32.o \
  +		  xdr-encode-uint32.o	   xdr-decode-uint32.o \
  +		  xdr-encode-double.o	   xdr-decode-double.o \
  +		  xdr-encode-octetstream.o xdr-decode-octetstream.o \
  +		  xdr-encode-string.o	   xdr-decode-string.o \
  +		  $(XDR64_OBJS)
   
   XDS_OBJS	= decode.o destroy.o encode.o getbuffer.o init.o register.o \
   		  setbuffer.o unregister.o vdecode.o vencode.o find-engine.o \

From ossp-cvs-owner@ossp.org  Thu Aug  2 19:24:52 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f72HOpI39636; Thu, 2 Aug 2001 19:24:51 +0200 (CEST)
Date: Thu, 2 Aug 2001 19:24:51 +0200 (CEST)
Message-Id: <200108021724.f72HOpI39636@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile.in ossp-pkg/srpc/libxds/regr...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   02-Aug-2001 19:24:51
  Branch: HEAD                             Handle: 2001080218244901

  Added files:
    ossp-pkg/srpc/libxds    xml-decode-octetstream.c xml-encode-octetstream.c
    ossp-pkg/srpc/libxds/regression-tests
                            xml-octetstream-empty.c xml-octetstream.c
  Modified files:
    ossp-pkg/srpc/libxds    Makefile.in xds.h.in
    ossp-pkg/srpc/libxds/regression-tests
                            Makefile.in

  Log:
    Implemented XML engines for octet streams. The base64-encoding code
    still needs some work, though: The test with an empty string currently
    fails. Also we had to do some weird work-arounds in the decoding
    routine because base64_decode does not honor srclen.

  Summary:
    Revision    Changes     Path
    1.16        +1  -0      ossp-pkg/srpc/libxds/Makefile.in
    1.13        +1  -1      ossp-pkg/srpc/libxds/regression-tests/Makefile.in
    1.1         +109 -0     ossp-pkg/srpc/libxds/regression-tests/xml-octetstream-empty.c
    1.1         +109 -0     ossp-pkg/srpc/libxds/regression-tests/xml-octetstream.c
    1.10        +4  -1      ossp-pkg/srpc/libxds/xds.h.in
    1.1         +226 -0     ossp-pkg/srpc/libxds/xml-decode-octetstream.c
    1.1         +142 -0     ossp-pkg/srpc/libxds/xml-encode-octetstream.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile.in
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 Makefile.in
  --- ossp-pkg/srpc/libxds/Makefile.in	2001/08/02 15:03:51	1.15
  +++ ossp-pkg/srpc/libxds/Makefile.in	2001/08/02 17:24:49	1.16
  @@ -14,6 +14,7 @@
   		  xml-encode-double.o	   xml-decode-double.o \
   		  xml-encode-begin.o	   xml-decode-begin.o \
   		  xml-encode-end.o	   xml-decode-end.o \
  +		  xml-encode-octetstream.o xml-decode-octetstream.o \
   		  $(XML64_OBJS)
   
   XDR64_OBJS	= @xdr_64_bit_objects@
  Index: ossp-pkg/srpc/libxds/regression-tests/Makefile.in
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 Makefile.in
  --- ossp-pkg/srpc/libxds/regression-tests/Makefile.in	2001/08/02 14:56:14	1.12
  +++ ossp-pkg/srpc/libxds/regression-tests/Makefile.in	2001/08/02 17:24:50	1.13
  @@ -13,7 +13,7 @@
   		  xds-getbuffer.exe xds-decode.exe xds-setbuffer.exe xds-engine-restart.exe \
   		  xdr-uint32.exe xdr-int32.exe xdr-octetstream.exe xdr-octetstream-empty.exe \
   		  xdr-string.exe xdr-string-empty.exe xml-uint32.exe xml-int32.exe \
  -		  xml-double.exe $(TESTS64)
  +		  xml-double.exe xml-octetstream.exe xml-octetstream-empty.exe $(TESTS64)
   
   .SUFFIXES:
   .SUFFIXES:	.c .exe
  Index: ossp-pkg/srpc/libxds/regression-tests/xml-octetstream-empty.c
  ============================================================
  $ cvs update -p -r1.1 xml-octetstream-empty.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <unistd.h>
  
  #include <stdio.h>
  #include <string.h>
  #include "../internal.h"
  
  int main()
      {
      xds_t* xds;
      char*  buffer;
      size_t buffer_size;
  
      char   msg[] = "";
      char*  new_msg;
      size_t new_msg_size;
  
      /* Encode the string as octet stream. Then erase the buffer and
         decode the string back, verifying that it hasn't changed. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL)
  	{
  	printf("Failed to initialize XDS context.\n");
  	return 1;
  	}
      if (xds_register(xds, "os", &xml_encode_octetstream, NULL) != XDS_OK)
  	{
  	printf("Failed to register my encoding engines.\n");
  	return 1;
  	}
      if (xds_encode(xds, "os", msg, strlen(msg)) != XDS_OK)
  	{
  	printf("xds_encode() failed.\n");
  	return 1;
  	}
      if (xds_getbuffer(xds, XDS_GIFT, (void**)&buffer, &buffer_size) != XDS_OK)
  	{
  	printf("xds_getbuffer() failed.\n");
  	return 1;
  	}
      xds_destroy(xds);
      write(1, buffer, buffer_size);
      printf("\n");
  
      xds = xds_init(XDS_DECODE);
      if (xds == NULL)
  	{
  	printf("Failed to initialize XDS context.\n");
  	return 1;
  	}
      if (xds_register(xds, "os", &xml_decode_octetstream, NULL) != XDS_OK)
  	{
  	printf("Failed to register my decoding engines.\n");
  	return 1;
  	}
      if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK)
  	{
  	printf("xds_setbuffer() failed.\n");
  	return 1;
  	}
      if (xds_decode(xds, "os", &new_msg, &new_msg_size) != XDS_OK)
  	{
  	printf("xds_decode() failed.\n");
  	return 1;
  	}
      if (new_msg_size != strlen(msg))
  	{
  	printf("The size of the decoded message is wrong.\n");
  	return 1;
  	}
      if (memcmp(msg, new_msg, new_msg_size) != 0)
  	{
  	printf("The decoded octet stream is not correct.\n");
  	return 1;
  	}
      xds_destroy(xds);
      free(new_msg);
  
      /* Everything went fine. */
  
      return 0;
      }
  Index: ossp-pkg/srpc/libxds/regression-tests/xml-octetstream.c
  ============================================================
  $ cvs update -p -r1.1 xml-octetstream.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <unistd.h>
  
  #include <stdio.h>
  #include <string.h>
  #include "../internal.h"
  
  int main()
      {
      xds_t* xds;
      char*  buffer;
      size_t buffer_size;
  
      char   msg[] = "Hello World";
      char*  new_msg;
      size_t new_msg_size;
  
      /* Encode the string as octet stream. Then erase the buffer and
         decode the string back, verifying that it hasn't changed. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL)
  	{
  	printf("Failed to initialize XDS context.\n");
  	return 1;
  	}
      if (xds_register(xds, "os", &xml_encode_octetstream, NULL) != XDS_OK)
  	{
  	printf("Failed to register my encoding engines.\n");
  	return 1;
  	}
      if (xds_encode(xds, "os", msg, strlen(msg)) != XDS_OK)
  	{
  	printf("xds_encode() failed.\n");
  	return 1;
  	}
      if (xds_getbuffer(xds, XDS_GIFT, (void**)&buffer, &buffer_size) != XDS_OK)
  	{
  	printf("xds_getbuffer() failed.\n");
  	return 1;
  	}
      xds_destroy(xds);
      write(1, buffer, buffer_size);
      printf("\n");
  
      xds = xds_init(XDS_DECODE);
      if (xds == NULL)
  	{
  	printf("Failed to initialize XDS context.\n");
  	return 1;
  	}
      if (xds_register(xds, "os", &xml_decode_octetstream, NULL) != XDS_OK)
  	{
  	printf("Failed to register my decoding engines.\n");
  	return 1;
  	}
      if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK)
  	{
  	printf("xds_setbuffer() failed.\n");
  	return 1;
  	}
      if (xds_decode(xds, "os", &new_msg, &new_msg_size) != XDS_OK)
  	{
  	printf("xds_decode() failed.\n");
  	return 1;
  	}
      if (new_msg_size != strlen(msg))
  	{
  	printf("The size of the decoded message is wrong.\n");
  	return 1;
  	}
      if (memcmp(msg, new_msg, new_msg_size) != 0)
  	{
  	printf("The decoded octet stream is not correct.\n");
  	return 1;
  	}
      xds_destroy(xds);
      free(new_msg);
  
      /* Everything went fine. */
  
      return 0;
      }
  Index: ossp-pkg/srpc/libxds/xds.h.in
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 xds.h.in
  --- ossp-pkg/srpc/libxds/xds.h.in	2001/08/02 14:39:15	1.9
  +++ ossp-pkg/srpc/libxds/xds.h.in	2001/08/02 17:24:49	1.10
  @@ -61,7 +61,8 @@
       XDS_ERR_TYPE_MISMATCH  = -4,
       XDS_ERR_UNKNOWN_ENGINE = -5,
       XDS_ERR_INVALID_MODE   = -6,
  -    XDS_ERR_UNDERFLOW      = -7
  +    XDS_ERR_UNDERFLOW      = -7,
  +    XDS_ERR_UNKNOWN        = -8
       };
   typedef enum { XDS_ENCODE, XDS_DECODE } xds_mode_t;
   typedef enum { XDS_LOAN,   XDS_GIFT   } xds_scope_t;
  @@ -165,5 +166,7 @@
   xds_declare_formatting_engine(xml_decode_string);
   extern const char xds_xml_begin_text[];
   extern const char xds_xml_end_text[];
  +extern const char xds_base64[];
  +extern const char xds_pad64;
   
   #endif /* !defined(__LIBXDS_H__) */
  Index: ossp-pkg/srpc/libxds/xml-decode-octetstream.c
  ============================================================
  $ cvs update -p -r1.1 xml-decode-octetstream.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <string.h>
  #include <ctype.h>
  #include "xds.h"
  
  static int base64_decode(unsigned char *dst, size_t dstlen, char const *src, size_t srclen)
      {
      int dstidx, state, ch = 0;
      unsigned char res;
      char *pos;
  
      if (srclen == 0)
          srclen = strlen(src);
      state = 0;
      dstidx = 0;
      res = 0;
      while (srclen-- > 0)
  	{
          ch = *src++;
          if (isascii(ch) && isspace(ch)) /* Skip whitespace anywhere */
              continue;
          if (ch == xds_pad64)
              break;
          pos = strchr(xds_base64, ch);
          if (pos == 0)           /* A non-base64 character */
              return -1;
          switch (state)
  	    {
              case 0:
                  if (dst != NULL)
  		    {
                      if ((size_t)dstidx >= dstlen)
                          return -1;
                      dst[dstidx] = ((pos - xds_base64) << 2);
  		    }
                  state = 1;
                  break;
              case 1:
                  if (dst != NULL)
  		    {
                      if ((size_t)dstidx >= dstlen)
                          return -1;
                      dst[dstidx] |= ((pos - xds_base64) >> 4);
                      res = (((pos - xds_base64) & 0x0f) << 4);
  		    }
                  dstidx++;
                  state = 2;
                  break;
              case 2:
                  if (dst != NULL)
  		    {
                      if ((size_t)dstidx >= dstlen)
                          return -1;
                      dst[dstidx] = res | ((pos - xds_base64) >> 2);
                      res = ((pos - xds_base64) & 0x03) << 6;
  		    }
                  dstidx++;
                  state = 3;
                  break;
              case 3:
                  if (dst != NULL)
  		    {
                      if ((size_t)dstidx >= dstlen)
                          return -1;
                      dst[dstidx] = res | (pos - xds_base64);
  		    }
                  dstidx++;
                  state = 0;
                  break;
              default:
                  break;
  	    }
  	}
  
      /*
       * We are done decoding Base-64 chars.  Let's see if we ended
       * on a byte boundary, and/or with erroneous trailing characters.
       */
  
      if (ch == xds_pad64)
  	{          /* We got a pad char. */
          ch = *src++;            /* Skip it, get next. */
          switch (state)
  	    {
              case 0:             /* Invalid = in first position */
              case 1:             /* Invalid = in second position */
                  return -1;
              case 2:             /* Valid, means one byte of info */
                  /* Skip any number of spaces. */
                  for (; ch != '\0'; ch = *src++)
                      if (!(isascii(ch) && isspace(ch)))
                          break;
                  /* Make sure there is another trailing = sign. */
                  if (ch != xds_pad64)
                      return -1;
                  ch = *src++;        /* Skip the = */
                  /* FALLTHROUGH */
              case 3:             /* Valid, means two bytes of info */
                  /*
                   * We know this char is an =.  Is there anything but
                   * whitespace after it?
                   */
                  for (; ch != '\0'; ch = *src++)
                      if (!(isascii(ch) && isspace(ch)))
                          return -1;
                  /*
                   * Now make sure for cases 2 and 3 that the "extra"
                   * bits that slopped past the last full byte were
                   * zeros.  If we don't check them, they become a
                   * subliminal channel.
                   */
                  if (dst != NULL && res != 0)
                      return -1;
              default:
                  break;
  	    }
  	}
      else
  	{
          /*
           * We ended by seeing the end of the string.  Make sure we
           * have no partial bytes lying around.
           */
          if (state != 0)
              return -1;
  	}
  
      return dstidx;
      }
  
  int xml_decode_octetstream(xds_t* xds, void* engine_context,
  			   void* buffer, size_t buffer_size, size_t* used_buffer_size,
  			   va_list* args)
      {
      char*          p;
      size_t         p_len;
      xds_uint8_t**  data;
      size_t*        data_len;
  
      /* We need at least 27 byte for the starting and ending tag. */
  
      xds_init_encoding_engine(13 + 14);
  
      /* Get parameters from stack. */
  
      data     = va_arg(*args, xds_uint8_t**);
      xds_check_parameter(data != NULL);
      data_len = va_arg(*args, size_t*);
  
      /* Check for the opening tag. */
  
      if (memcmp("<octetstream>", buffer, 13) != 0)
  	return XDS_ERR_TYPE_MISMATCH;
  
      /* Find the end of the data and calculate the length of the
         base64-encoded stuff. */
  
      p = (char*)buffer + 13;
      while(p < ((char*)buffer+buffer_size) && *p != '<')
  	++p;
      if (p == ((char*)buffer+buffer_size))
  	return XDS_ERR_TYPE_MISMATCH;
      else
  	{
  	p_len = p - ((char*)buffer + 13);
  	p = (char*)buffer + 13;
  	}
  
      /* Now find out how long the decoded data is going to be and
         allocate a buffer for it. */
  
      p[p_len] = '\0';
      *data_len = base64_decode(NULL, 0, p, p_len);
      p[p_len] = '<';
      if (*data_len == (size_t)-1)
  	return XDS_ERR_UNKNOWN;
      *data = malloc(*data_len);
      if (*data == NULL)
  	return XDS_ERR_NO_MEM;
  
      /* Decode the data. */
  
      p[p_len] = '\0';
      base64_decode(*data, *data_len, p, p_len);
      p[p_len] = '<';
  
      /* Check that we have a closing tag. */
  
      if (memcmp(p + p_len, "</octetstream>", 14) != 0)
  	{
  	free(*data);
  	return XDS_ERR_TYPE_MISMATCH;
  	}
  
      /* Done. */
  
      *used_buffer_size = 13 + p_len + 14;
      return XDS_OK;
      }
  
  Index: ossp-pkg/srpc/libxds/xml-encode-octetstream.c
  ============================================================
  $ cvs update -p -r1.1 xml-encode-octetstream.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <string.h>
  #include <ctype.h>
  #include "xds.h"
  
  const char xds_base64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  const char xds_pad64    = '=';
  
  static int base64_encode(char *dst, size_t dstlen, unsigned char const *src, size_t srclen)
      {
      size_t dstpos;
      unsigned char input[3];
      unsigned char output[4];
      int ocnt;
      size_t i;
  
      if (srclen == 0)
          return -1;
      if (dst == NULL)
  	{
          /* just calculate required length of dst */
          dstlen = (((srclen + 2) / 3) * 4);
          return dstlen;
  	}
  
      /* bulk encoding */
      dstpos = 0;
      ocnt = 0;
      while (srclen >= 3)
  	{
          input[0] = *src++;
          input[1] = *src++;
          input[2] = *src++;
          srclen -= 3;
  
          output[0] = (input[0] >> 2);
          output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4);
          output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6);
          output[3] = (input[2] & 0x3f);
  
          if (dstpos + 4 > dstlen)
              return -1;
          dst[dstpos++] = xds_base64[output[0]];
          dst[dstpos++] = xds_base64[output[1]];
          dst[dstpos++] = xds_base64[output[2]];
          dst[dstpos++] = xds_base64[output[3]];
  	}
  
      /* now worry about padding with remaining 1 or 2 bytes */
      if (srclen != 0)
  	{
          input[0] = input[1] = input[2] = '\0';
          for (i = 0; i < srclen; i++)
              input[i] = *src++;
  
          output[0] = (input[0] >> 2);
          output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4);
          output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6);
  
          if (dstpos + 4 > dstlen)
              return -1;
          dst[dstpos++] = xds_base64[output[0]];
          dst[dstpos++] = xds_base64[output[1]];
          if (srclen == 1)
              dst[dstpos++] = xds_pad64;
          else
              dst[dstpos++] = xds_base64[output[2]];
          dst[dstpos++] = xds_pad64;
  	}
  
      if (dstpos >= dstlen)
          return -1;
      dst[dstpos] = '\0';
  
      return dstpos;
      }
  
  int xml_encode_octetstream(xds_t* xds, void* engine_context,
  			   void* buffer, size_t buffer_size, size_t* used_buffer_size,
  			   va_list* args)
      {
      xds_uint8_t* src;
      size_t       src_len;
  
      /* We need at least 27 byte for the starting and ending tag. */
  
      xds_init_encoding_engine(13 + 14);
  
      /* Get parameters from stack. */
  
      src     = (xds_uint8_t*)va_arg(*args, void*);
      xds_check_parameter(src != NULL);
      src_len = va_arg(*args, size_t);
  
      /* Calculate how many bytes we'll need in buffer and make sure we
         have them. */
  
      *used_buffer_size = base64_encode(NULL, 0, src, src_len);
      if (*used_buffer_size == (size_t)-1)
  	return XDS_ERR_UNKNOWN;
      else
  	*used_buffer_size += 13 + 14;
      if (buffer_size < *used_buffer_size)
  	return XDS_ERR_OVERFLOW;
  
      /* Format the data into the buffer. */
  
      memmove(buffer, "<octetstream>", 13);
      if (base64_encode((char*)buffer + 13, buffer_size - 13, src, src_len) < 0)
  	return XDS_ERR_UNKNOWN;
      memmove((char*)buffer + *used_buffer_size - 14, "</octetstream>", 14);
  
      /* Done. */
  
      return XDS_OK;
      }

From ossp-cvs-owner@ossp.org  Tue Aug  7 13:14:11 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f77BE9H90941; Tue, 7 Aug 2001 13:14:09 +0200 (CEST)
Date: Tue, 7 Aug 2001 13:14:09 +0200 (CEST)
Message-Id: <200108071114.f77BE9H90941@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/docs xds.pod ossp-pkg/srpc/libxds xds...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   07-Aug-2001 13:14:09
  Branch: HEAD                             Handle: 19700101010000997179249

  Added files:
    ossp-pkg/srpc/libxds/docs xds.pod
  Removed files:
    ossp-pkg/srpc/libxds    xds.pod

  Log:
    Moved POD documentation into the docs directory.

  Summary:
    Revision    Changes     Path
    1.1         +134 -0     ossp-pkg/srpc/libxds/docs/xds.pod
    NONE        +0  -134    ossp-pkg/srpc/libxds/xds.pod
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/docs/xds.pod
  ============================================================
  $ cvs update -p -r1.1 xds.pod
  =pod
  
  =head1 NAME
  
  xds - eXtensible Data Serialization
  
  =head1 SYNOPSIS
  
  
  =head1 DESCRIPTION
  
  =over 4
  
  =item xds_t* B<xds_init>(xds_mode_t I<mode>);
  
  Valid settings for I<mode> are B<XDS_ENCODE> and B<XDS_DECODE>. If
  successful, a valid handle is returned -- B<NULL> otherwise. If the
  routine fails, the system variable B<errno> is set apropriately.
  
  =item void B<xds_destroy>(xds_t* I<xds>);
  
  Free all internally allocated resources associated with this context.
  I<xds> must be a handle obtained by calling B<xds_init>.
  
  =item int B<xds_register>(xds_t* I<xds>, const char* I<name>, xds_engine_t I<engine>, void* I<engine_context>);
  
  Register the function I<engine> as formatting engine in context I<xds>
  under the name I<name>. The function must have the following
  prototype:
  
      int my_engine(xds_t* xds, void* engine_context,
  		  void* buffer, size_t buffer_size,
  		  va_list args);
  
  It must gather its values from I<args> and encode/decode them into
  I<buffer>. The encoded/decoded representation must not take up more
  than I<size> byte of memory, because that's the maximum I<buffer> can
  hold. If the buffer is too small, I<engine> must return
  B<XDS_ERR_OVERFLOW>. In case of no error, I<engine> must return the
  number of bytes it has written to the buffer. (Note that all xds error
  defines are smaller than >0.) The variable I<engine_context> is passed
  through to the function every time it is called; it is not touched in
  any way by the xds library.
  
  A valid name I<name> for a callback function consists of an arbitrary
  number of characters from the class [a-zA-Z0-9_-].
  
  =item int B<xds_unregister>(xds_t* I<xds>, const char* I<name>);
  
  Remove encoding/decoding engine I<name> from context I<xds>. The
  function will return B<XDS_OK> if successful and
  B<XDS_ERR_UNKNOW_ENGINE> if I<name> is not a registered engine.
  
  =item int B<xds_setbuffer>(xds_t* I<xds>, xds_scope_t I<flag>, void* I<buffer>, size_t I<buffer_size>);
  
  Encoding mode: Set internal buffer used in context I<xds> to
  I<buffer>. The buffer has a capacity of I<buffer_size> byte. I<flag>
  may be set to B<XDS_LOAN> or B<XDS_GIFT>. A "loaned" buffer is one
  that is owned by the application; xds will use it, but it will not
  B<free> the buffer nor will it try to B<realloc> it if it's too small.
  A buffer given to xds as a "gift" is henceforth owned by xds and may
  be B<free>d or B<realloc>ed as the library sees fit. If I<flag> is
  B<XDS_GIFT>, I<buffer> must be a pointer obtained from calling the
  B<malloc(3)> API. Calling B<xds_setbuffer> with a I<buffer> of B<NULL>
  will cause the xds library to allocate a buffer of its own.
  I<buffer_size> is ignored in this case.
  
  Decoding mode: I<buffer> contains the encoded representation of the
  data to be used for following B<xds_decode> calls. The encoded data is
  I<buffer_size> byte long. Unlike in encoding mode, such a buffer is
  not modified, hence there is no need to extend the buffer. If I<flag>
  is set to B<XDS_GIFT>, the library will B<free> I<buffer> when
  the context is destroyed.
  
  B<xds_setbuffer> returns one of the following codes signifying success
  or failure: B<XDS_OK> (everything alright), B<XDS_ERR_NO_MEM> (failed
  to allocate new internal buffers), and B<XDS_ERR_INVALID_ARG>
  (arguments don't make sense).
  
  =item int B<xds_getbuffer>(xds_t* I<xds>, xds_scope_t flag, void** buffer, size_t* buffer_size);
  
  This routine will write the address and size of the internal buffer in
  context I<xds> to I<buffer> and I<buffer_size>. The I<flag> parameter
  determines who owns the buffer after that; setting I<flag> to
  B<XDS_LOAN> means that the buffer is owned by the xds library and that
  the user may not rely on its contents still being there after another
  xds library function call. Furthermore, calling B<xds_getbuffer> will
  flush the registered buffer, meaning that coming B<xds_encode> calls
  will start at the beginning and potentially overwrite the buffer
  contents.
  
  Setting I<flag> to B<XDS_GIFT> means that the returned buffer is owned
  by the application programmer from now on, it is no longer modified or
  used in any way by the library. The application must B<free> the
  buffer when it's not needed anymore.
  
  =item int B<xds_encode>(xds_t* I<xds>, const char* I<fmt>, ...);
  
  The B<encode> function call will encode an arbitrary number of values
  into the chosen representation. The syntax is very similar to
  B<sprintf>: As parameters, it requires the I<xds> handle obtained from
  B<xds_init>, a format string I<fmt> describing the following value
  parameters, and an arbitrary number of actual values.
  
  The format string lists the names of the callback functions to be used
  in order to format the values; it has the format "name name ...". The
  names are delimited by any number of characters any of which is not
  part of the character set allowed for function names here. Hence, you
  can delimit the names by blanks, tabs, dollar signs or pretty much
  anyting your want.
  
  B<xds_encode> will return either B<XDS_OK> (everything OK),
  B<XDS_ERR_NO_MEM> (failed allocating memory for intenal buffering),
  B<XDS_ERR_OVERFLOW> (can't expand internal buffer because it's owned
  by the application), B<XDS_ERR_INVALID_ARG> (parameters don't make
  sense), B<XDS_ERR_TYPE_MISMATCH> (specified callback can't handle this
  data type), and B<XDS_ERR_UNKNOW_ENGINE> (unknown call back name used
  in I<fmt>).
  
  =item int B<xds_decode>(xds_t* I<xds>, const char* I<fmt>, ...);
  
  Like B<xds_encode>, only the other way round.
  
  =item int B<xds_vencode>(xds_t* I<xds>, const char* I<fmt>, va_list I<args>);
  
  See B<xds_encode>.
  
  =item int B<xds_vdecode>(xds_t* I<xds>, const char* I<fmt>, va_list I<args>);
  
  See B<xds_decode>.
  
  =back
  
  =cut
  

From ossp-cvs-owner@ossp.org  Tue Aug  7 13:14:32 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f77BEUK90999; Tue, 7 Aug 2001 13:14:30 +0200 (CEST)
Date: Tue, 7 Aug 2001 13:14:30 +0200 (CEST)
Message-Id: <200108071114.f77BEUK90999@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/docs .cvsignore
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   07-Aug-2001 13:14:30
  Branch: HEAD                             Handle: 2001080712143000

  Modified files:
    ossp-pkg/srpc/libxds/docs .cvsignore

  Log:
    Ignore Makefile and xds.3.

  Summary:
    Revision    Changes     Path
    1.2         +2  -0      ossp-pkg/srpc/libxds/docs/.cvsignore
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/docs/.cvsignore
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 .cvsignore
  --- ossp-pkg/srpc/libxds/docs/.cvsignore	2001/08/02 12:19:46	1.1
  +++ ossp-pkg/srpc/libxds/docs/.cvsignore	2001/08/07 11:14:30	1.2
  @@ -1,2 +1,4 @@
   libxds.aux libxds.dvi libxds.log libxds.ps
   encode decode
  +Makefile
  +xds.3

From ossp-cvs-owner@ossp.org  Tue Aug  7 13:16:21 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f77BGKe91685; Tue, 7 Aug 2001 13:16:20 +0200 (CEST)
Date: Tue, 7 Aug 2001 13:16:20 +0200 (CEST)
Message-Id: <200108071116.f77BGKe91685@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile.in configure.ac ossp-pkg/srp...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   07-Aug-2001 13:16:20
  Branch: HEAD                             Handle: 2001080712161901

  Added files:
    ossp-pkg/srpc/libxds/docs Makefile.in
  Modified files:
    ossp-pkg/srpc/libxds    Makefile.in configure.ac

  Log:
    Added docs directory to the build system.

  Summary:
    Revision    Changes     Path
    1.17        +1  -4      ossp-pkg/srpc/libxds/Makefile.in
    1.14        +5  -3      ossp-pkg/srpc/libxds/configure.ac
    1.1         +25 -0      ossp-pkg/srpc/libxds/docs/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile.in
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 Makefile.in
  --- ossp-pkg/srpc/libxds/Makefile.in	2001/08/02 17:24:49	1.16
  +++ ossp-pkg/srpc/libxds/Makefile.in	2001/08/07 11:16:19	1.17
  @@ -41,13 +41,10 @@
   	$(AR) cr $@ $(OBJS)
   	$(RANLIB) $@
   
  -xds.3:		xds.pod
  -	pod2man --section=3 --center="XDS Library Programmer API " xds.pod >xds.3
  -
   clean::
   	@(cd regression-tests && $(MAKE) $@)
   	rm -f $(OBJS)
  -	rm -f libxds.a test.o test xds.3
  +	rm -f libxds.a
   
   distclean::	clean
   	@(cd regression-tests && $(MAKE) $@)
  Index: ossp-pkg/srpc/libxds/configure.ac
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 configure.ac
  --- ossp-pkg/srpc/libxds/configure.ac	2001/08/02 14:56:53	1.13
  +++ ossp-pkg/srpc/libxds/configure.ac	2001/08/07 11:16:19	1.14
  @@ -2,7 +2,7 @@
   
   AC_INIT(libxds)
   AC_PREREQ(2.52)
  -AC_REVISION($Revision: 1.13 $)
  +AC_REVISION($Revision: 1.14 $)
   
   dnl Get rid of the lousy -g and -O defaults in CFLAGS.
   dnl
  @@ -12,6 +12,8 @@
   dnl
   AC_PROG_CC
   AC_PROG_RANLIB
  +AC_CHECK_PROG(LATEX, latex, latex, :)
  +AC_CHECK_PROG(POD2MAN, pod2man, pod2man, :)
   
   dnl Set special flags for gcc.
   dnl
  @@ -79,6 +81,6 @@
   
   dnl Write results.
   dnl
  -AC_CONFIG_FILES(xds.h Makefile regression-tests/Makefile)
  -AC_CONFIG_COMMANDS([default], [chmod -w xds.h Makefile regression-tests/Makefile])
  +AC_CONFIG_FILES(xds.h Makefile regression-tests/Makefile docs/Makefile)
  +AC_CONFIG_COMMANDS([default], [chmod -w xds.h Makefile regression-tests/Makefile docs/Makefile])
   AC_OUTPUT
  Index: ossp-pkg/srpc/libxds/docs/Makefile.in
  ============================================================
  $ cvs update -p -r1.1 Makefile.in
  # Build libxds documentation.
  
  LATEX		= @LATEX@
  POD2MAN		= @POD2MAN@
  
  .SUFFIXES:
  .SUFFIXES:      .tex .dvi .ps .pod .3
  
  .tex.dvi:
  	latex \\nonstopmode\\input $<; \
  	while grep 'Rerun to' $*.log; do \
  	     latex \\nonstopmode\\input $<; \
  	done
  
  .dvi.ps:
  	dvips $< -o $@
  
  .pod.3:
  	$(POD2MAN) --section=3 --center="XDS Library Programmer API " $< >$@
  
  all:	libxds.ps xds.3
  
  clean distclean realclean:
  	rm -f libxds.aux libxds.dvi libxds.log libxds.ps libxds.toc
  	rm -f xds.3

From ossp-cvs-owner@ossp.org  Tue Aug  7 13:19:15 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f77BJEw92284; Tue, 7 Aug 2001 13:19:14 +0200 (CEST)
Date: Tue, 7 Aug 2001 13:19:14 +0200 (CEST)
Message-Id: <200108071119.f77BJEw92284@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile.in ossp-pkg/srpc/libxds/docs...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   07-Aug-2001 13:19:14
  Branch: HEAD                             Handle: 2001080712191300

  Modified files:
    ossp-pkg/srpc/libxds    Makefile.in
    ossp-pkg/srpc/libxds/docs Makefile.in

  Log:
    clean and distclean targets will now be executed in docs and
    regression-tests, too.

  Summary:
    Revision    Changes     Path
    1.18        +2  -0      ossp-pkg/srpc/libxds/Makefile.in
    1.2         +4  -1      ossp-pkg/srpc/libxds/docs/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile.in
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 Makefile.in
  --- ossp-pkg/srpc/libxds/Makefile.in	2001/08/07 11:16:19	1.17
  +++ ossp-pkg/srpc/libxds/Makefile.in	2001/08/07 11:19:13	1.18
  @@ -43,11 +43,13 @@
   
   clean::
   	@(cd regression-tests && $(MAKE) $@)
  +	@(cd docs && $(MAKE) $@)
   	rm -f $(OBJS)
   	rm -f libxds.a
   
   distclean::	clean
   	@(cd regression-tests && $(MAKE) $@)
  +	@(cd docs && $(MAKE) $@)
   	rm -f config.log config.status Makefile
   
   realclean::	distclean
  Index: ossp-pkg/srpc/libxds/docs/Makefile.in
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 Makefile.in
  --- ossp-pkg/srpc/libxds/docs/Makefile.in	2001/08/07 11:16:20	1.1
  +++ ossp-pkg/srpc/libxds/docs/Makefile.in	2001/08/07 11:19:13	1.2
  @@ -20,6 +20,9 @@
   
   all:	libxds.ps xds.3
   
  -clean distclean realclean:
  +clean:
   	rm -f libxds.aux libxds.dvi libxds.log libxds.ps libxds.toc
   	rm -f xds.3
  +
  +distclean realclean:
  +	rm -f Makefile

From ossp-cvs-owner@ossp.org  Tue Aug  7 15:12:56 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f77DCse06495; Tue, 7 Aug 2001 15:12:54 +0200 (CEST)
Date: Tue, 7 Aug 2001 15:12:54 +0200 (CEST)
Message-Id: <200108071312.f77DCse06495@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/docs setbuffer-logic.dia setbuffer-lo...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   07-Aug-2001 15:12:54
  Branch: HEAD                             Handle: 2001080714125400

  Added files:
    ossp-pkg/srpc/libxds/docs setbuffer-logic.dia setbuffer-logic.eps

  Log:
    Nice diagramm illustrating the xds_setbuffer() function.

  Summary:
    Revision    Changes     Path
    1.1         +4  -0      ossp-pkg/srpc/libxds/docs/setbuffer-logic.dia
    1.1         +571 -0     ossp-pkg/srpc/libxds/docs/setbuffer-logic.eps
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/docs/setbuffer-logic.dia
  ============================================================
  $ cvs update -p -r1.1 setbuffer-logic.dia
  <?xml version="1.0"?>
  <dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/"><dia:diagramdata><dia:attribute name="background"><dia:color val="#ffffff"/></dia:attribute><dia:attribute name="paper"><dia:composite type="paper"><dia:attribute name="name"><dia:string>#A4#</dia:string></dia:attribute><dia:attribute name="tmargin"><dia:real val="2.8222"/></dia:attribute><dia:attribute name="bmargin"><dia:real val="2.8222"/></dia:attribute><dia:attribute name="lmargin"><dia:real val="2.8222"/></dia:attribute><dia:attribute name="rmargin"><dia:real val="2.8222"/></dia:attribute><dia:attribute name="is_portrait"><dia:boolean val="true"/></dia:attribute><dia:attribute name="scaling"><dia:real val="1"/></dia:attribute><dia:attribute name="fitto"><dia:boolean val="false"/></dia:attribute></dia:composite></dia:attribute><dia:attribute name="grid"><dia:composite type="grid"><dia:attribute name="width_x"><dia:real val="1"/></dia:attribute><dia:attribute name="width_y"><dia:real val="1"/></dia:attribute><dia:attribute name="visible_x"><dia:int val="1"/></dia:attribute><dia:attribute name="visible_y"><dia:int val="1"/></dia:attribute></dia:composite></dia:attribute><dia:attribute name="guides"><dia:composite type="guides"><dia:attribute name="hguides"/><dia:attribute name="vguides"/></dia:composite></dia:attribute></dia:diagramdata><dia:layer name="Background" visible="true"><dia:object type="Flowchart - Diamond" version="0" id="O0"><dia:attribute name="obj_pos"><dia:point val="23.95,6.65"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="23.9,6.6;28.5534,11.2534"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="23.95,6.65"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="4.55341"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="4.55341"/></dia:attribute><dia:attribute name="border_width"><dia:real val="0.1"/></dia:attribute><dia:attribute name="show_background"><dia:boolean val="true"/></dia:attribute><dia:attribute name="padding"><dia:real val="0.353553"/></dia:attribute><d
ia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#flag#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Times-Roman"/></dia:attribute><dia:attribute name="height"><dia:real val="1"/></dia:attribute><dia:attribute name="pos"><dia:point val="26.2267,9.22082"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Flowchart - Terminal" version="0" id="O1"><dia:attribute name="obj_pos"><dia:point val="20.8616,0.65"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="20.3376,0.126;32.1226,2.98111"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="20.8616,0.65"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="10.737"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="1.80711"/></dia:attribute><dia:attribute name="border_width"><dia:real val="0.1"/></dia:attribute><dia:attribute name="show_background"><dia:boolean val="true"/></dia:attribute><dia:attribute name="flip_horizontal"><dia:boolean val="false"/></dia:attribute><dia:attribute name="flip_vertical"><dia:boolean val="false"/></dia:attribute><dia:attribute name="padding"><dia:real val="0.353553"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#xds_setbuffer()#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Times-Roman"/></dia:attribute><dia:attribute name="height"><dia:real val="1"/></dia:attribute><dia:attribute name="pos"><dia:point val="26.2301,1.84767"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Standard - Line" version="0" id="O2"><dia:attribute name="obj_pos"><dia:point val="26.2301,2.45711"/></dia:attribute><dia:attr
ibute name="obj_bb"><dia:rectangle val="25.4267,2.40711;27.0267,6.7"/></dia:attribute><dia:attribute name="conn_endpoints"><dia:point val="26.2301,2.45711"/><dia:point val="26.2267,6.65"/></dia:attribute><dia:attribute name="numcp"><dia:int val="1"/></dia:attribute><dia:attribute name="line_width"><dia:real val="0.1"/></dia:attribute><dia:attribute name="end_arrow"><dia:enum val="1"/></dia:attribute><dia:attribute name="end_arrow_length"><dia:real val="0.8"/></dia:attribute><dia:attribute name="end_arrow_width"><dia:real val="0.8"/></dia:attribute><dia:connections><dia:connection handle="0" to="O1" connection="14"/><dia:connection handle="1" to="O0" connection="0"/></dia:connections></dia:object><dia:object type="Standard - ZigZagLine" version="0" id="O3"><dia:attribute name="obj_pos"><dia:point val="28.5034,8.92671"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="28.4534,8.8694;39.3843,12.65"/></dia:attribute><dia:attribute name="orth_points"><dia:point val="28.5034,8.92671"/><dia:point val="28.5034,8.9194"/><dia:point val="38.5843,8.9194"/><dia:point val="38.5843,12.65"/></dia:attribute><dia:attribute name="orth_orient"><dia:enum val="1"/><dia:enum val="0"/><dia:enum val="1"/></dia:attribute><dia:attribute name="line_width"><dia:real val="0.1"/></dia:attribute><dia:attribute name="end_arrow"><dia:enum val="1"/></dia:attribute><dia:attribute name="end_arrow_length"><dia:real val="0.8"/></dia:attribute><dia:attribute name="end_arrow_width"><dia:real val="0.8"/></dia:attribute><dia:connections><dia:connection handle="0" to="O0" connection="4"/><dia:connection handle="1" to="O7" connection="0"/></dia:connections></dia:object><dia:object type="Standard - ZigZagLine" version="0" id="O4"><dia:attribute name="obj_pos"><dia:point val="23.95,8.92671"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="13.1343,8.8694;24,12.8"/></dia:attribute><dia:attribute name="orth_points"><dia:point val="23.95,8.92671"/><dia:point val="23.95,8.9194"/><dia:point val="13.9343,8.9194"/><dia:point val="13.
9343,12.8"/></dia:attribute><dia:attribute name="orth_orient"><dia:enum val="1"/><dia:enum val="0"/><dia:enum val="1"/></dia:attribute><dia:attribute name="line_width"><dia:real val="0.1"/></dia:attribute><dia:attribute name="end_arrow"><dia:enum val="1"/></dia:attribute><dia:attribute name="end_arrow_length"><dia:real val="0.8"/></dia:attribute><dia:attribute name="end_arrow_width"><dia:real val="0.8"/></dia:attribute><dia:connections><dia:connection handle="0" to="O0" connection="12"/><dia:connection handle="1" to="O8" connection="0"/></dia:connections></dia:object><dia:object type="Standard - Text" version="0" id="O5"><dia:attribute name="obj_pos"><dia:point val="32.95,8.65"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="30.4866,7.85588;35.4134,8.85588"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#XDS_GIFT#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Times-Roman"/></dia:attribute><dia:attribute name="height"><dia:real val="1"/></dia:attribute><dia:attribute name="pos"><dia:point val="32.95,8.65"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Standard - Text" version="0" id="O6"><dia:attribute name="obj_pos"><dia:point val="18.95,8.65"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="16.1988,7.85588;21.7013,8.85588"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#XDS_LOAN#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Times-Roman"/></dia:attribute><dia:attribute name="height"><dia:real val="1"/></dia:attribute><dia:attribute name="pos"><dia:point val="18.95,8.65"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:compos
ite></dia:attribute></dia:object><dia:object type="Flowchart - Diamond" version="0" id="O7"><dia:attribute name="obj_pos"><dia:point val="35.95,12.65"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="35.9,12.6;41.2685,17.9685"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="35.95,12.65"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="5.26851"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="5.26851"/></dia:attribute><dia:attribute name="border_width"><dia:real val="0.1"/></dia:attribute><dia:attribute name="show_background"><dia:boolean val="true"/></dia:attribute><dia:attribute name="padding"><dia:real val="0.353553"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#buffer#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Times-Roman"/></dia:attribute><dia:attribute name="height"><dia:real val="1"/></dia:attribute><dia:attribute name="pos"><dia:point val="38.5843,15.5784"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Flowchart - Diamond" version="0" id="O8"><dia:attribute name="obj_pos"><dia:point val="11.3,12.8"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="11.25,12.75;16.6185,18.1185"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="11.3,12.8"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="5.26851"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="5.26851"/></dia:attribute><dia:attribute name="border_width"><dia:real val="0.1"/></dia:attribute><dia:attribute name="show_background"><dia:boolean val="true"/></dia:attribute><dia:attribute name="padding"><dia:real val="0.353553"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#buffer#</dia:string></dia:attribu
te><dia:attribute name="font"><dia:font name="Times-Roman"/></dia:attribute><dia:attribute name="height"><dia:real val="1"/></dia:attribute><dia:attribute name="pos"><dia:point val="13.9343,15.7284"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Standard - ZigZagLine" version="0" id="O9"><dia:attribute name="obj_pos"><dia:point val="41.2185,15.2843"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="41.1685,15.2843;47.6677,19.903"/></dia:attribute><dia:attribute name="orth_points"><dia:point val="41.2185,15.2843"/><dia:point val="41.2185,15.3683"/><dia:point val="46.8677,15.3683"/><dia:point val="46.8677,19.903"/></dia:attribute><dia:attribute name="orth_orient"><dia:enum val="1"/><dia:enum val="0"/><dia:enum val="1"/></dia:attribute><dia:attribute name="line_width"><dia:real val="0.1"/></dia:attribute><dia:attribute name="end_arrow"><dia:enum val="1"/></dia:attribute><dia:attribute name="end_arrow_length"><dia:real val="0.8"/></dia:attribute><dia:attribute name="end_arrow_width"><dia:real val="0.8"/></dia:attribute><dia:connections><dia:connection handle="0" to="O7" connection="4"/><dia:connection handle="1" to="O17" connection="2"/></dia:connections></dia:object><dia:object type="Standard - ZigZagLine" version="0" id="O10"><dia:attribute name="obj_pos"><dia:point val="16.5685,15.4343"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="16.5185,15.3846;20.8563,23.119"/></dia:attribute><dia:attribute name="orth_points"><dia:point val="16.5685,15.4343"/><dia:point val="16.5685,15.4346"/><dia:point val="20.0563,15.4346"/><dia:point val="20.0563,23.119"/></dia:attribute><dia:attribute name="orth_orient"><dia:enum val="1"/><dia:enum val="0"/><dia:enum val="1"/></dia:attribute><dia:attribute name="line_width"><dia:real val="0.1"/></dia:attribute><dia:attribute name="end_arrow"><dia:enum val="1"/></dia:attribute><dia:attri
bute name="end_arrow_length"><dia:real val="0.8"/></dia:attribute><dia:attribute name="end_arrow_width"><dia:real val="0.8"/></dia:attribute><dia:connections><dia:connection handle="0" to="O8" connection="4"/><dia:connection handle="1" to="O23" connection="2"/></dia:connections></dia:object><dia:object type="Standard - ZigZagLine" version="0" id="O11"><dia:attribute name="obj_pos"><dia:point val="11.3,15.4343"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="7.1767,15.3846;11.35,26.195"/></dia:attribute><dia:attribute name="orth_points"><dia:point val="11.3,15.4343"/><dia:point val="11.3,15.4346"/><dia:point val="7.9767,15.4346"/><dia:point val="7.9767,26.195"/></dia:attribute><dia:attribute name="orth_orient"><dia:enum val="1"/><dia:enum val="0"/><dia:enum val="1"/></dia:attribute><dia:attribute name="line_width"><dia:real val="0.1"/></dia:attribute><dia:attribute name="end_arrow"><dia:enum val="1"/></dia:attribute><dia:attribute name="end_arrow_length"><dia:real val="0.8"/></dia:attribute><dia:attribute name="end_arrow_width"><dia:real val="0.8"/></dia:attribute><dia:connections><dia:connection handle="0" to="O8" connection="12"/><dia:connection handle="1" to="O22" connection="2"/></dia:connections></dia:object><dia:object type="Standard - ZigZagLine" version="0" id="O12"><dia:attribute name="obj_pos"><dia:point val="35.95,15.2843"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="30.6663,15.195;36,19.395"/></dia:attribute><dia:attribute name="orth_points"><dia:point val="35.95,15.2843"/><dia:point val="35.95,15.245"/><dia:point val="31.4664,15.245"/><dia:point val="31.4664,19.395"/></dia:attribute><dia:attribute name="orth_orient"><dia:enum val="1"/><dia:enum val="0"/><dia:enum val="1"/></dia:attribute><dia:attribute name="line_width"><dia:real val="0.1"/></dia:attribute><dia:attribute name="end_arrow"><dia:enum val="1"/></dia:attribute><dia:attribute name="end_arrow_length"><dia:real val="0.8"/></dia:attribute><dia:attribute name="end_arrow_width"><dia:real val="0.8"/></dia:a
ttribute><dia:connections><dia:connection handle="0" to="O7" connection="12"/><dia:connection handle="1" to="O18" connection="2"/></dia:connections></dia:object><dia:object type="Standard - Text" version="0" id="O13"><dia:attribute name="obj_pos"><dia:point val="18.4,15.15"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="16.9668,14.3559;19.8332,15.3559"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#NULL#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Times-Roman"/></dia:attribute><dia:attribute name="height"><dia:real val="1"/></dia:attribute><dia:attribute name="pos"><dia:point val="18.4,15.15"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Standard - Text" version="0" id="O14"><dia:attribute name="obj_pos"><dia:point val="9.55,15.15"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="7.95015,14.3559;11.1499,15.3559"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#!NULL#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Times-Roman"/></dia:attribute><dia:attribute name="height"><dia:real val="1"/></dia:attribute><dia:attribute name="pos"><dia:point val="9.55,15.15"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Standard - Text" version="0" id="O15"><dia:attribute name="obj_pos"><dia:point val="43.2832,14.95"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="41.85,14.1559;44.7164,15.1559"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#NULL#</dia:string></dia:attribute><dia:attribute name="fon
t"><dia:font name="Times-Roman"/></dia:attribute><dia:attribute name="height"><dia:real val="1"/></dia:attribute><dia:attribute name="pos"><dia:point val="43.2832,14.95"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Standard - Text" version="0" id="O16"><dia:attribute name="obj_pos"><dia:point val="34.4999,14.95"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="32.9,14.1559;36.0997,15.1559"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#!NULL#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Times-Roman"/></dia:attribute><dia:attribute name="height"><dia:real val="1"/></dia:attribute><dia:attribute name="pos"><dia:point val="34.4999,14.95"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Flowchart - Box" version="0" id="O17"><dia:attribute name="obj_pos"><dia:point val="43.0513,19.903"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="43.0013,19.853;50.734,22.053"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="43.0513,19.903"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="7.6327"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="2.1"/></dia:attribute><dia:attribute name="border_width"><dia:real val="0.1"/></dia:attribute><dia:attribute name="show_background"><dia:boolean val="true"/></dia:attribute><dia:attribute name="padding"><dia:real val="0.5"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#Allocate buffer.#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Times-Roman"/></dia:attribute><dia:attribute name="height"><dia
:real val="1"/></dia:attribute><dia:attribute name="pos"><dia:point val="46.8677,21.2472"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Flowchart - Box" version="0" id="O18"><dia:attribute name="obj_pos"><dia:point val="25.0897,19.395"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="25.0397,19.345;37.8931,22.545"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="25.0897,19.395"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="12.7534"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="3.1"/></dia:attribute><dia:attribute name="border_width"><dia:real val="0.1"/></dia:attribute><dia:attribute name="show_background"><dia:boolean val="true"/></dia:attribute><dia:attribute name="padding"><dia:real val="0.5"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#Store buffer in XDS context.
  We own the buffer.#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Times-Roman"/></dia:attribute><dia:attribute name="height"><dia:real val="1"/></dia:attribute><dia:attribute name="pos"><dia:point val="31.4664,20.7391"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Standard - Line" version="0" id="O19"><dia:attribute name="obj_pos"><dia:point val="37.8431,20.945"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="37.7931,20.145;43.1013,21.745"/></dia:attribute><dia:attribute name="conn_endpoints"><dia:point val="37.8431,20.945"/><dia:point val="43.0513,20.953"/></dia:attribute><dia:attribute name="numcp"><dia:int val="1"/></dia:attribute><dia:attribute name="line_width"><dia:real val="0.1"/></dia:attribute><dia:attribute name="start_arrow"><dia:enum val="1"/></dia:attribute><dia:attribute name="start_arrow_length"><dia:real val="0.8"/></dia:attribute><dia:attribute name="start_arrow_width"><dia:real val="0.8"/></dia:attribute><dia:connections><dia:connection handle="0" to="O18" connection="8"/><dia:connection handle="1" to="O17" connection="7"/></dia:connections></dia:object><dia:object type="Flowchart - Terminal" version="0" id="O20"><dia:attribute name="obj_pos"><dia:point val="27.7309,26.8306"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="27.2069,26.3066;35.7195,29.1617"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="27.7309,26.8306"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="7.46461"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="1.80711"/></dia:attribute><dia:attribute name="border_width"><dia:real val="0.1"/></dia:attribute><dia:attribute name="show_background"><dia:boolean val="true"/></dia:attribute><dia:attribute name="flip_horizontal"><dia:boolean val="false"/></dia:attribute><dia:attribute name="flip_vertical"><di
a:boolean val="false"/></dia:attribute><dia:attribute name="padding"><dia:real val="0.353553"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#XDS_OK#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Times-Roman"/></dia:attribute><dia:attribute name="height"><dia:real val="1"/></dia:attribute><dia:attribute name="pos"><dia:point val="31.4632,28.0283"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Standard - Line" version="0" id="O21"><dia:attribute name="obj_pos"><dia:point val="31.4632,26.8306"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="30.6632,22.445;32.2632,26.8806"/></dia:attribute><dia:attribute name="conn_endpoints"><dia:point val="31.4632,26.8306"/><dia:point val="31.4664,22.495"/></dia:attribute><dia:attribute name="numcp"><dia:int val="1"/></dia:attribute><dia:attribute name="line_width"><dia:real val="0.1"/></dia:attribute><dia:attribute name="start_arrow"><dia:enum val="1"/></dia:attribute><dia:attribute name="start_arrow_length"><dia:real val="0.8"/></dia:attribute><dia:attribute name="start_arrow_width"><dia:real val="0.8"/></dia:attribute><dia:connections><dia:connection handle="0" to="O20" connection="2"/><dia:connection handle="1" to="O18" connection="13"/></dia:connections></dia:object><dia:object type="Flowchart - Box" version="0" id="O22"><dia:attribute name="obj_pos"><dia:point val="1.6,26.195"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="1.55,26.145;14.4034,29.345"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="1.6,26.195"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="12.7534"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="3.1"/></dia:attribute><dia:attribute name="border_width"><dia:real val="0.1"/></dia:attribute><dia:attribute name="show
_background"><dia:boolean val="true"/></dia:attribute><dia:attribute name="padding"><dia:real val="0.5"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#Store buffer in XDS context.
  We don't own the buffer.#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Times-Roman"/></dia:attribute><dia:attribute name="height"><dia:real val="1"/></dia:attribute><dia:attribute name="pos"><dia:point val="7.9767,27.5391"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Flowchart - Terminal" version="0" id="O23"><dia:attribute name="obj_pos"><dia:point val="10.4837,23.119"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="9.95968,22.595;30.1529,25.4501"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="10.4837,23.119"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="19.1453"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="1.80711"/></dia:attribute><dia:attribute name="border_width"><dia:real val="0.1"/></dia:attribute><dia:attribute name="show_background"><dia:boolean val="true"/></dia:attribute><dia:attribute name="flip_horizontal"><dia:boolean val="false"/></dia:attribute><dia:attribute name="flip_vertical"><dia:boolean val="false"/></dia:attribute><dia:attribute name="padding"><dia:real val="0.353553"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#XDS_ERR_INVALID_ARG#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Times-Roman"/></dia:attribute><dia:attribute name="height"><dia:real val="1"/></dia:attribute><dia:attribute name="pos"><dia:point val="20.0563,24.3167"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Standard - Line" version="0" id="O24"><dia:attribute name="obj_pos"><dia:point val="27.7309,27.7342"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="14.3034,26.9342;27.78
09,28.5342"/></dia:attribute><dia:attribute name="conn_endpoints"><dia:point val="27.7309,27.7342"/><dia:point val="14.3534,27.745"/></dia:attribute><dia:attribute name="numcp"><dia:int val="1"/></dia:attribute><dia:attribute name="line_width"><dia:real val="0.1"/></dia:attribute><dia:attribute name="start_arrow"><dia:enum val="1"/></dia:attribute><dia:attribute name="start_arrow_length"><dia:real val="0.8"/></dia:attribute><dia:attribute name="start_arrow_width"><dia:real val="0.8"/></dia:attribute><dia:connections><dia:connection handle="0" to="O20" connection="6"/><dia:connection handle="1" to="O22" connection="8"/></dia:connections></dia:object></dia:layer></dia:diagram>
  Index: ossp-pkg/srpc/libxds/docs/setbuffer-logic.eps
  ============================================================
  $ cvs update -p -r1.1 setbuffer-logic.eps
  %!PS-Adobe-2.0 EPSF-2.0
  %%Title: /home/simons/projects/srpc/libxds/docs/setbuffer-logic.dia
  %%Creator: Dia v0.88.1
  %%CreationDate: Tue Aug  7 15:09:04 2001
  %%For: simons
  %%Magnification: 1.0000
  %%Orientation: Portrait
  %%BoundingBox: 0 0 1395 829
  %%Pages: 1
  %%BeginSetup
  %%EndSetup
  %%EndComments
  %%BeginProlog
  [ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  /.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright
  /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one
  /two /three /four /five /six /seven /eight /nine /colon /semicolon
  /less /equal /greater /question /at /A /B /C /D /E
  /F /G /H /I /J /K /L /M /N /O
  /P /Q /R /S /T /U /V /W /X /Y
  /Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c
  /d /e /f /g /h /i /j /k /l /m
  /n /o /p /q /r /s /t /u /v /w
  /x /y /z /braceleft /bar /braceright /asciitilde /.notdef /.notdef /.notdef
  /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  /space /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright
  /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron /degree /plusminus /twosuperior /threesuperior
  /acute /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf
  /threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
  /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde
  /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex
  /Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring
  /ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis
  /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave
  /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis] /isolatin1encoding exch def
  /Times-Roman-latin1
      /Times-Roman findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Times-Italic-latin1
      /Times-Italic findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Times-Bold-latin1
      /Times-Bold findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Times-BoldItalic-latin1
      /Times-BoldItalic findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /AvantGarde-Book-latin1
      /AvantGarde-Book findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /AvantGarde-BookOblique-latin1
      /AvantGarde-BookOblique findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /AvantGarde-Demi-latin1
      /AvantGarde-Demi findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /AvantGarde-DemiOblique-latin1
      /AvantGarde-DemiOblique findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Bookman-Light-latin1
      /Bookman-Light findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Bookman-LightItalic-latin1
      /Bookman-LightItalic findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Bookman-Demi-latin1
      /Bookman-Demi findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Bookman-DemiItalic-latin1
      /Bookman-DemiItalic findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Courier-latin1
      /Courier findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Courier-Oblique-latin1
      /Courier-Oblique findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Courier-Bold-latin1
      /Courier-Bold findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Courier-BoldOblique-latin1
      /Courier-BoldOblique findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Helvetica-latin1
      /Helvetica findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Helvetica-Oblique-latin1
      /Helvetica-Oblique findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Helvetica-Bold-latin1
      /Helvetica-Bold findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Helvetica-BoldOblique-latin1
      /Helvetica-BoldOblique findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Helvetica-Narrow-latin1
      /Helvetica-Narrow findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Helvetica-Narrow-Oblique-latin1
      /Helvetica-Narrow-Oblique findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Helvetica-Narrow-Bold-latin1
      /Helvetica-Narrow-Bold findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Helvetica-Narrow-BoldOblique-latin1
      /Helvetica-Narrow-BoldOblique findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /NewCenturySchoolbook-Roman-latin1
      /NewCenturySchoolbook-Roman findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /NewCenturySchoolbook-Italic-latin1
      /NewCenturySchoolbook-Italic findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /NewCenturySchoolbook-Bold-latin1
      /NewCenturySchoolbook-Bold findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /NewCenturySchoolbook-BoldItalic-latin1
      /NewCenturySchoolbook-BoldItalic findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Palatino-Roman-latin1
      /Palatino-Roman findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Palatino-Italic-latin1
      /Palatino-Italic findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Palatino-Bold-latin1
      /Palatino-Bold findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Palatino-BoldItalic-latin1
      /Palatino-BoldItalic findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /Symbol-latin1
      /Symbol findfont
  definefont pop
  /ZapfChancery-MediumItalic-latin1
      /ZapfChancery-MediumItalic findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /ZapfDingbats-latin1
      /ZapfDingbats findfont
      dup length dict begin
  	{1 index /FID ne {def} {pop pop} ifelse} forall
  	/Encoding isolatin1encoding def
      currentdict end
  definefont pop
  /cp {closepath} bind def
  /c {curveto} bind def
  /f {fill} bind def
  /a {arc} bind def
  /ef {eofill} bind def
  /ex {exch} bind def
  /gr {grestore} bind def
  /gs {gsave} bind def
  /sa {save} bind def
  /rs {restore} bind def
  /l {lineto} bind def
  /m {moveto} bind def
  /rm {rmoveto} bind def
  /n {newpath} bind def
  /s {stroke} bind def
  /sh {show} bind def
  /slc {setlinecap} bind def
  /slj {setlinejoin} bind def
  /slw {setlinewidth} bind def
  /srgb {setrgbcolor} bind def
  /rot {rotate} bind def
  /sc {scale} bind def
  /sd {setdash} bind def
  /ff {findfont} bind def
  /sf {setfont} bind def
  /scf {scalefont} bind def
  /sw {stringwidth pop} bind def
  /tr {translate} bind def
  
  /ellipsedict 8 dict def
  ellipsedict /mtrx matrix put
  /ellipse
  { ellipsedict begin
     /endangle exch def
     /startangle exch def
     /yrad exch def
     /xrad exch def
     /y exch def
     /x exch def   /savematrix mtrx currentmatrix def
     x y tr xrad yrad sc
     0 0 1 startangle endangle arc
     savematrix setmatrix
     end
  } def
  
  /mergeprocs {
  dup length
  3 -1 roll
  dup
  length
  dup
  5 1 roll
  3 -1 roll
  add
  array cvx
  dup
  3 -1 roll
  0 exch
  putinterval
  dup
  4 2 roll
  putinterval
  } bind def
  28.346000 -28.346000 scale
  -1.550000 -29.345000 translate
  %%EndProlog
  
  
  1.000000 1.000000 1.000000 srgb
  n 26.226707 6.650000 m 28.503414 8.926707 l 26.226707 11.203414 l 23.950000 8.926707 l f
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slj
  0.000000 0.000000 0.000000 srgb
  n 26.226707 6.650000 m 28.503414 8.926707 l 26.226707 11.203414 l 23.950000 8.926707 l cp s
  /Times-Roman-latin1 ff 1.000000 scf sf
  (flag) dup sw 2 div 26.226707 ex sub 9.220824 m gs 1 -1 sc sh gr
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slc
  0 slj
  0 slc
  0 slj
  [] 0 sd
  1.000000 1.000000 1.000000 srgb
  n 22.651100 0.650000 m 29.809107 0.650000 l 30.797422 0.650000 31.598608 1.054534 31.598608 1.553553 c 31.598608 2.052572 30.797422 2.457107 29.809107 2.457107 c 22.651100 2.457107 l 21.662785 2.457107 20.861598 2.052572 20.861598 1.553553 c 20.861598 1.054534 21.662785 0.650000 22.651100 0.650000 c f
  0.000000 0.000000 0.000000 srgb
  n 22.651100 0.650000 m 29.809107 0.650000 l 30.797422 0.650000 31.598608 1.054534 31.598608 1.553553 c 31.598608 2.052572 30.797422 2.457107 29.809107 2.457107 c 22.651100 2.457107 l 21.662785 2.457107 20.861598 2.052572 20.861598 1.553553 c 20.861598 1.054534 21.662785 0.650000 22.651100 0.650000 c s
  /Times-Roman-latin1 ff 1.000000 scf sf
  (xds_setbuffer\(\)) dup sw 2 div 26.230103 ex sub 1.847671 m gs 1 -1 sc sh gr
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slc
  n 26.230103 2.457107 m 26.226707 6.650000 l s
  0.100000 slw
  [] 0 sd
  0 slj
  0 slc
  n 25.827355 5.849676 m 26.226707 6.650000 l 26.627355 5.850324 l s
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slj
  0 slc
  n 28.503414 8.926707 m 28.503414 8.919400 l 38.584257 8.919400 l 38.584257 12.650000 l s
  0.100000 slw
  [] 0 sd
  0 slj
  0 slc
  n 38.184257 11.850000 m 38.584257 12.650000 l 38.984257 11.850000 l s
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slj
  0 slc
  n 23.950000 8.926707 m 23.950000 8.919400 l 13.934257 8.919400 l 13.934257 12.800000 l s
  0.100000 slw
  [] 0 sd
  0 slj
  0 slc
  n 13.534257 12.000000 m 13.934257 12.800000 l 14.334257 12.000000 l s
  /Times-Roman-latin1 ff 1.000000 scf sf
  (XDS_GIFT) dup sw 2 div 32.950000 ex sub 8.650000 m gs 1 -1 sc sh gr
  /Times-Roman-latin1 ff 1.000000 scf sf
  (XDS_LOAN) dup sw 2 div 18.950000 ex sub 8.650000 m gs 1 -1 sc sh gr
  1.000000 1.000000 1.000000 srgb
  n 38.584257 12.650000 m 41.218514 15.284257 l 38.584257 17.918514 l 35.950000 15.284257 l f
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slj
  0.000000 0.000000 0.000000 srgb
  n 38.584257 12.650000 m 41.218514 15.284257 l 38.584257 17.918514 l 35.950000 15.284257 l cp s
  /Times-Roman-latin1 ff 1.000000 scf sf
  (buffer) dup sw 2 div 38.584257 ex sub 15.578374 m gs 1 -1 sc sh gr
  1.000000 1.000000 1.000000 srgb
  n 13.934257 12.800000 m 16.568514 15.434257 l 13.934257 18.068514 l 11.300000 15.434257 l f
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slj
  0.000000 0.000000 0.000000 srgb
  n 13.934257 12.800000 m 16.568514 15.434257 l 13.934257 18.068514 l 11.300000 15.434257 l cp s
  /Times-Roman-latin1 ff 1.000000 scf sf
  (buffer) dup sw 2 div 13.934257 ex sub 15.728374 m gs 1 -1 sc sh gr
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slj
  0 slc
  n 41.218514 15.284257 m 41.218514 15.368293 l 46.867680 15.368293 l 46.867680 19.903041 l s
  0.100000 slw
  [] 0 sd
  0 slj
  0 slc
  n 46.467680 19.103041 m 46.867680 19.903041 l 47.267680 19.103041 l s
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slj
  0 slc
  n 16.568514 15.434257 m 16.568514 15.434605 l 20.056305 15.434605 l 20.056305 23.119000 l s
  0.100000 slw
  [] 0 sd
  0 slj
  0 slc
  n 19.656305 22.319000 m 20.056305 23.119000 l 20.456305 22.319000 l s
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slj
  0 slc
  n 11.300000 15.434257 m 11.300000 15.434605 l 7.976700 15.434605 l 7.976700 26.195000 l s
  0.100000 slw
  [] 0 sd
  0 slj
  0 slc
  n 7.576700 25.395000 m 7.976700 26.195000 l 8.376700 25.395000 l s
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slj
  0 slc
  n 35.950000 15.284257 m 35.950000 15.245000 l 31.466350 15.245000 l 31.466350 19.395000 l s
  0.100000 slw
  [] 0 sd
  0 slj
  0 slc
  n 31.066350 18.595000 m 31.466350 19.395000 l 31.866350 18.595000 l s
  /Times-Roman-latin1 ff 1.000000 scf sf
  (NULL) dup sw 2 div 18.400000 ex sub 15.150000 m gs 1 -1 sc sh gr
  /Times-Roman-latin1 ff 1.000000 scf sf
  (!NULL) dup sw 2 div 9.550000 ex sub 15.150000 m gs 1 -1 sc sh gr
  /Times-Roman-latin1 ff 1.000000 scf sf
  (NULL) dup sw 2 div 43.283200 ex sub 14.950000 m gs 1 -1 sc sh gr
  /Times-Roman-latin1 ff 1.000000 scf sf
  (!NULL) dup sw 2 div 34.499850 ex sub 14.950000 m gs 1 -1 sc sh gr
  1.000000 1.000000 1.000000 srgb
  n 43.051330 19.903041 m 43.051330 22.003041 l 50.684030 22.003041 l 50.684030 19.903041 l f
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slj
  0.000000 0.000000 0.000000 srgb
  n 43.051330 19.903041 m 43.051330 22.003041 l 50.684030 22.003041 l 50.684030 19.903041 l cp s
  /Times-Roman-latin1 ff 1.000000 scf sf
  (Allocate buffer.) dup sw 2 div 46.867680 ex sub 21.247159 m gs 1 -1 sc sh gr
  1.000000 1.000000 1.000000 srgb
  n 25.089650 19.395000 m 25.089650 22.495000 l 37.843050 22.495000 l 37.843050 19.395000 l f
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slj
  0.000000 0.000000 0.000000 srgb
  n 25.089650 19.395000 m 25.089650 22.495000 l 37.843050 22.495000 l 37.843050 19.395000 l cp s
  /Times-Roman-latin1 ff 1.000000 scf sf
  (Store buffer in XDS context.) dup sw 2 div 31.466350 ex sub 20.739118 m gs 1 -1 sc sh gr
  (We own the buffer.) dup sw 2 div 31.466350 ex sub 21.739118 m gs 1 -1 sc sh gr
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slc
  n 37.843050 20.945000 m 43.051330 20.953041 l s
  0.100000 slw
  [] 0 sd
  0 slj
  0 slc
  n 38.643667 20.546236 m 37.843050 20.945000 l 38.642432 21.346235 l s
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slc
  0 slj
  0 slc
  0 slj
  [] 0 sd
  1.000000 1.000000 1.000000 srgb
  n 28.975023 26.830598 m 33.951430 26.830598 l 34.638529 26.830598 35.195532 27.235133 35.195532 27.734152 c 35.195532 28.233171 34.638529 28.637705 33.951430 28.637705 c 28.975023 28.637705 l 28.287924 28.637705 27.730921 28.233171 27.730921 27.734152 c 27.730921 27.235133 28.287924 26.830598 28.975023 26.830598 c f
  0.000000 0.000000 0.000000 srgb
  n 28.975023 26.830598 m 33.951430 26.830598 l 34.638529 26.830598 35.195532 27.235133 35.195532 27.734152 c 35.195532 28.233171 34.638529 28.637705 33.951430 28.637705 c 28.975023 28.637705 l 28.287924 28.637705 27.730921 28.233171 27.730921 27.734152 c 27.730921 27.235133 28.287924 26.830598 28.975023 26.830598 c s
  /Times-Roman-latin1 ff 1.000000 scf sf
  (XDS_OK) dup sw 2 div 31.463226 ex sub 28.028269 m gs 1 -1 sc sh gr
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slc
  n 31.463226 26.830598 m 31.466350 22.495000 l s
  0.100000 slw
  [] 0 sd
  0 slj
  0 slc
  n 31.063803 26.030310 m 31.463226 26.830598 l 31.863803 26.030887 l s
  1.000000 1.000000 1.000000 srgb
  n 1.600000 26.195000 m 1.600000 29.295000 l 14.353400 29.295000 l 14.353400 26.195000 l f
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slj
  0.000000 0.000000 0.000000 srgb
  n 1.600000 26.195000 m 1.600000 29.295000 l 14.353400 29.295000 l 14.353400 26.195000 l cp s
  /Times-Roman-latin1 ff 1.000000 scf sf
  (Store buffer in XDS context.) dup sw 2 div 7.976700 ex sub 27.539118 m gs 1 -1 sc sh gr
  (We don't own the buffer.) dup sw 2 div 7.976700 ex sub 28.539118 m gs 1 -1 sc sh gr
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slc
  0 slj
  0 slc
  0 slj
  [] 0 sd
  1.000000 1.000000 1.000000 srgb
  n 13.674552 23.119000 m 26.438058 23.119000 l 28.200332 23.119000 29.628935 23.523534 29.628935 24.022553 c 29.628935 24.521572 28.200332 24.926107 26.438058 24.926107 c 13.674552 24.926107 l 11.912278 24.926107 10.483675 24.521572 10.483675 24.022553 c 10.483675 23.523534 11.912278 23.119000 13.674552 23.119000 c f
  0.000000 0.000000 0.000000 srgb
  n 13.674552 23.119000 m 26.438058 23.119000 l 28.200332 23.119000 29.628935 23.523534 29.628935 24.022553 c 29.628935 24.521572 28.200332 24.926107 26.438058 24.926107 c 13.674552 24.926107 l 11.912278 24.926107 10.483675 24.521572 10.483675 24.022553 c 10.483675 23.523534 11.912278 23.119000 13.674552 23.119000 c s
  /Times-Roman-latin1 ff 1.000000 scf sf
  (XDS_ERR_INVALID_ARG) dup sw 2 div 20.056305 ex sub 24.316671 m gs 1 -1 sc sh gr
  0.100000 slw
  [] 0 sd
  [] 0 sd
  0 slc
  n 27.730921 27.734152 m 14.353400 27.745000 l s
  0.100000 slw
  [] 0 sd
  0 slj
  0 slc
  n 26.931246 28.134800 m 27.730921 27.734152 l 26.930597 27.334801 l s
  showpage

From ossp-cvs-owner@ossp.org  Tue Aug  7 16:07:02 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f77E71n14698; Tue, 7 Aug 2001 16:07:01 +0200 (CEST)
Date: Tue, 7 Aug 2001 16:07:01 +0200 (CEST)
Message-Id: <200108071407.f77E71n14698@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/docs Makefile.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   07-Aug-2001 16:07:01
  Branch: HEAD                             Handle: 2001080715070000

  Modified files:
    ossp-pkg/srpc/libxds/docs Makefile.in

  Log:
    Updated dependencies.

  Summary:
    Revision    Changes     Path
    1.3         +5  -1      ossp-pkg/srpc/libxds/docs/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/docs/Makefile.in
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 Makefile.in
  --- ossp-pkg/srpc/libxds/docs/Makefile.in	2001/08/07 11:19:13	1.2
  +++ ossp-pkg/srpc/libxds/docs/Makefile.in	2001/08/07 14:07:00	1.3
  @@ -4,7 +4,7 @@
   POD2MAN		= @POD2MAN@
   
   .SUFFIXES:
  -.SUFFIXES:      .tex .dvi .ps .pod .3
  +.SUFFIXES:	.tex .dvi .ps .pod .3
   
   .tex.dvi:
   	latex \\nonstopmode\\input $<; \
  @@ -26,3 +26,7 @@
   
   distclean realclean:
   	rm -f Makefile
  +
  +# Dependencies
  +
  +libxds.dvi:	architecture.eps data-exchange.eps setbuffer-logic.eps

From ossp-cvs-owner@ossp.org  Tue Aug  7 16:07:27 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f77E7PI14751; Tue, 7 Aug 2001 16:07:25 +0200 (CEST)
Date: Tue, 7 Aug 2001 16:07:25 +0200 (CEST)
Message-Id: <200108071407.f77E7PI14751@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/docs libxds.tex
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   07-Aug-2001 16:07:25
  Branch: HEAD                             Handle: 2001080715072500

  Modified files:
    ossp-pkg/srpc/libxds/docs libxds.tex

  Log:
    Added the chapter with reference documentation for the XDS framework.

  Summary:
    Revision    Changes     Path
    1.2         +223 -3     ossp-pkg/srpc/libxds/docs/libxds.tex
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/docs/libxds.tex
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 libxds.tex
  --- ossp-pkg/srpc/libxds/docs/libxds.tex	2001/08/02 13:58:07	1.1
  +++ ossp-pkg/srpc/libxds/docs/libxds.tex	2001/08/07 14:07:25	1.2
  @@ -1,6 +1,6 @@
   % -*- mode: LaTeX; fill-column: 75; -*-
   %
  -% $Id: libxds.tex,v 1.1 2001/08/02 13:58:07 simons Exp $
  +% $Id: libxds.tex,v 1.2 2001/08/07 14:07:25 simons Exp $
   %
   \documentclass[a4paper,10pt,pointlessnumbers,bibtotoc]{scrartcl}
   \usepackage[dvips,xdvi]{graphicx}
  @@ -548,23 +548,243 @@
   \section{Extending the XDS library}
   \label{meta engines}
   
  -
   \section{The XDS Framework}
   \label{xds}
   
  +\subsection{xds\_t* xds\_init(xds\_mode\_t~\underline{mode});}
  +
  +This routine creates and initializes a context for use with the XDS
  +library. The ``mode'' parameter may be either \textsf{XDS\_ENCODE} or
  +\textsf{XDS\_DECODE}, depending on whether you want to encode or to decode
  +data. If successful, xds\_init() returns a pointer to the XDS context
  +structure. In case of failure, though, xds\_init() will return
  +\textsf{NULL} and set \textsf{errno} to ENOMEM (failed to allocate internal
  +memory buffers) or EINVAL (``mode'' parameter was invalid).
  +
  +A context obtained from xds\_init() should be destroyed by calling
  +xds\_destroy() when it is not needed any more.
  +
  +\subsection{void xds\_destroy(xds\_t*~\underline{xds});}
  +
  +xds\_destroy() will destroy an XDS context created by xds\_init(). Doing so
  +will return all resources associated with this context --- most notably the
  +memory used to buffer the results of encoding or decoding any values. A
  +context may not be used anymore after it has been destroyed.
  +
  +\subsection{int xds\_register(xds\_t*~\underline{xds}, const~char*~\underline{name}, xds\_engine\_t~\underline{engine}, void*~\underline{engine\_context});}
  +
  +This routine will register a formatting engine in the provided XDS context.
  +A ``formatting engine'' is potentially any function that fullfils the
  +following interface:
  +
  +\begin{quote}
  +\begin{verbatim}
  +int engine(xds_t* xds, void* engine_context,
  +           void* buffer, size_t buffer_size, size_t* used_buffer_size,
  +           va_list* args);
  +\end{verbatim}
  +\end{quote}
  +
  +By calling xds\_register(), the formatting engine ``engine'' will be
  +registered under the name ``name'' in the XDS context ``xds''. The last
  +parameter ``engine\_context'' may be specified as the user sees fit: It
  +will be passed when the engine is actually called and may be used to
  +implement an engine-specific context. Most engines will not need a context
  +of their own, in which case \textsf{NULL} should be used here.
  +
  +Please note that until the user calls xds\_register() for an XDS context he
  +obtained from xds\_init(), no engines are registered for that context. Even
  +the engines included in the library distribution are not registered
  +automatically.
  +
  +For engine names, any combination of the characters ``a--z'', ``A--Z'',
  +``0--9'', ``-'', and ``\_'' may be used; anything else is not a legal
  +engine name component.
  +
  +xds\_register() may return the following return codes: \textsf{XDS\_OK}
  +	(everything went fine; the engine is registered now),
  +\textsf{XDS\_ERR\_INVALID\_ARG} (either ``xds'', ``name'', or ``engine''
  +	are \textsf{NULL} or ``name'' contains illegal characters for an engine
  +	name), or
  +\textsf{XDS\_ERR\_NO\_MEM} (failed to allocate internally required
  +	buffers).
  +
  +\subsection{int xds\_unregister(xds\_t*~\underline{xds}, const~char*~\underline{name});}
  +
  +xds\_unregister() will remove the formatting engine ``name'' from XDS
  +context ``xds''. The function will return \textsf{XDS\_OK} in case
  +everything went fine, \textsf{XDS\_ERR\_UNKNOWN\_ENGINE} in case the engine
  +``name'' is not registered in ``xds'', or \textsf{XDS\_ERR\_INVALID\_ARG}
  +if either ``xds'' or ``name'' are \textsf{NULL} or ``name'' contains
  +illegal characters for an engine name.
  +
  +\subsection{int xds\_setbuffer(xds\_t*~\underline{xds}, xds\_scope\_t~\underline{flag}, void*~\underline{buffer}, size\_t~\underline{buffer\_len});}
  +
  +\begin{figure}[tbh]
  +    \begin{center}
  +        \includegraphics[width=\textwidth]{setbuffer-logic.eps}
  +        \caption{xds\_setbuffer() modes of operation}
  +        \label{setbuffer logic}
  +    \end{center}
  +\end{figure}
  +
  +This routine allows the user to control XDS' buffer handling: Calling it
  +will replace the buffer currently used in ``xds''. The address and size of
  +that buffer are passed to xds\_setbuffer() via the ``buffer'' and
  +``buffer\_len'' parameters. The ``xds'' parameter determines for which XDS
  +context the new buffer will be set. Furthermore, you can set ``flag'' to
  +either \textsf{XDS\_GIFT} or \textsf{XDS\_LOAN}.
  +
  +A setting of \textsf{XDS\_GIFT} will tell libxds that the provided buffer
  +is now owned by the library and that it may be resized by calling
  +\textsf{realloc(3)}. Furthermore, the buffer is \textsf{free(3)}ed when
  +``xds'' is destroyed. If ``flag'' is \textsf{XDS\_GIFT} and ``buffer'' is
  +\textsf{NULL}, the xds\_setbuffer will simply allocate a buffer of its own
  +to be set in ``xds''. Please note that a buffer given to libxds as gift
  +\emph{must} have been allocated using \textsf{malloc(3)} --- it may not
  +life on the stack because libxds will try to free or to resize the buffer
  +as it sees fit.
  +
  +Passing \textsf{XDS\_LOAN} via ``flag'' tells xds\_setbuffer() that the
  +buffer is owned by the application and that libxds should not free nor
  +resize the buffer in any case. In this mode, passing a buffer \textsf{NULL}
  +will result in an invalid-argument error.
  +
  +\subsection{int xds\_getbuffer(xds\_t*~\underline{xds}, xds\_scope\_t~\underline{flag}, void**~\underline{buffer}, size\_t*~\underline{buffer\_len});}
  +
  +This routine is the counterpart to xds\_setbuffer(): It will get the buffer
  +currently used in the XDS context ``xds''. The address of that buffer is
  +stored in the location ``buffer'' points to; the length of the buffer's
  +content will be stored in the location ``buffer\_len'' points to.
  +
  +The ``flag'' argument may be set to either \textsf{XDS\_GIFT} or
  +\textsf{XDS\_LOAN}. The first setting means that the buffer is now owned by
  +the application and that libxds must not use it after this xds\_getbuffer()
  +call anymore; the library will instead allocate a new buffer for itself. Of
  +course this also means that the buffer will not be freed in xds\_destroy():
  +The application has to \textsf{free(3)} the buffer itself when it is not
  +needed anymore.
  +
  +Setting ``flag'' to \textsf{XDS\_LOAN} tells libxds that the application
  +just wishes to peek into the buffer and will not modify it. The buffer is
  +still owned (and used) by libxds. Please note that the loaned address
  +returned by xds\_getbuffer() may become invalid change after any other
  +xds\_xxx() function call! If you need a reliable address, use
  +\textsf{XDS\_GIFT} mode.
  +
  +The routine will return \textsf{XDS\_OK} (everything went fine) or
  +\textsf{XDS\_ERR\_INVALID\_ARG} (``xds'', ``buffer'' or ``buffer\_len'' are
  +\textsf{NULL} or ``flag'' is invalid) signifying success or failure
  +respectively.
  +
  +Please note: It is perfectly legal for xds\_getbuffer() to return a buffer
  +of \textsf{NULL} and a buffer length of 0! This happens when
  +xds\_getbuffer() is called for an XDS context before a buffer has been
  +allocated.
  +
  +\subsection{int xds\_vencode(xds\_t*~\underline{xds}, const~char*~\underline{fmt}, va\_list~\underline{args});}
  +
  +This routine will encode one or several values using the apropriate
  +formatting engines registered in XDS context ``xds''. The parameter ``fmt''
  +contains a \textsf{sprintf(3)}-alike descriptions of the values to be
  +encoded; the actual values are provided in the varadic parameter ``args''.
  +
  +The format for ``fmt'' is simple: Just provide the names of the engines to
  +be used for encode the apropriate value in ``args''. Any non-legal
  +engine-name character may be used as a delimiter. In order to encode two
  +32-bit integers followed by a 64-bit integer, the format string
  +\begin{quote}
  +\begin{verbatim}
  +int32 int32 int64
  +\end{verbatim}
  +\end{quote}
  +could be used. In case you don't like the blank, use the colon instead:
  +\begin{quote}
  +\begin{verbatim*}
  +int32:int32:int64
  +\end{verbatim*}
  +\end{quote}
  +
  +Of course the names to be used here have to correspond to the names used to
  +register the formatting engines in ``xds'' earlier.
  +
  +Every time xds\_vencode() is called, it will append the encoded data at the
  +end of the internal buffer stored in ``xds''. Thus, you can call
  +xds\_vencode() several times in order to encode several values, but you'll
  +still get all encoded values stored in one buffer. Calling xds\_setbuffer()
  +or xds\_getbuffer() at any point during the encoding will re-set the buffer
  +to the beginning. All values that have been encoded into that buffer
  +already will eventually be overwritten when xds\_encode() is called again.
  +Hence: Don't call xds\_setbuffer() or xds\_getbuffer() unless you actually
  +want to access the data stored in the buffer.
  +
  +Also it should be noted that the data you have to provide for ``args''
  +depends entirely on what the deployed engines expect to find on the stack
  +--- there is no ``standard'' on what should be put on the stack here. The
  +XML and XDR engines included in the distribution will simply expect the
  +value to be encoded to be found on the stack, but other engines may act
  +differently. See section~\ref{meta engines} for an example of such an
  +engine.
  +
  +xds\_vencode() will return any of the following return codes:
  +\textsf{XDS\_OK} (everything worked fine), \textsf{XDS\_ERR\_NO\_MEM}
  +(failed to allocate or to resize the internal buffer),
  +\textsf{XDS\_ERR\_OVER\-FLOW} (the internal buffer is too small but is not
  +owned by us), \textsf{XDS\_ERR\_INVALID\_ARG} (``xds'' or ``fmt'' are
  +\textsf{NULL}), \textsf{XDS\_ERR\_UNKNOWN\_ENGINE} (an engine name
  +specified in ``fmt'' is not registered in ``xds''),
  +\textsf{XDS\_ERR\_INVALID\_MODE} (``xds'' is initialized in decode mode),
  +or \textsf{XDS\_ERR\_UNKNOWN} (the formatting engine returned an
  +unspecified error).
  +
  +\subsection{int xds\_encode(xds\_t*~\underline{xds}, const~char*~\underline{fmt}, \dots{});}
  +
  +This routine is basically identical to xds\_vencode(), only that it uses a
  +different prototype syntax.
  +
  +\subsection{int xds\_vdecode(xds\_t*~\underline{xds}, const~char*~\underline{fmt}, va\_list~\underline{args});}
  +
  +This routine is almost identical to xds\_vencode(): It expects an XDS
  +context, a format string and a set of parameters for the formatting
  +engines, but xds\_vdecode() does not encode any data, it decodes the data
  +back into the native format. The format string again determines which
  +engines are to be called by the framework in order to decode the values
  +contained in the buffer. The native values will then be stored at the
  +locations found in the corresponding ``args'' entry. But please note that
  +the exact behavior of the decoding engines is not specified! The XML and
  +XDR engines included in this distribution expect a pointer to a location
  +where to store the decoded value, but other engines may vary.
  +
  +xds\_vdecode() may return any of the following return codes:
  +\textsf{XDS\_OK} (everything went fine), \textsf{XDS\_ERR\_INVALID\_ARG}
  +(``xds'' or ``fmt'' are \textsf{NULL}), \textsf{XDS\_ERR\_TYPE\_MISMATCH}
  +(the format string says the next value is of type $A$, but that's not what
  +we found in the buffer), \textsf{XDS\_ERR\_UNKNOWN\_ENGINE} (an engine name
  +specified in ``fmt'' is not registered in ``xds''),
  +\textsf{XDS\_ERR\_INVALID\_MODE} (``xds'' has been initialized in encode
  +mode), \textsf{XDS\_ERR\_UNDER\-FLOW} (an engine tried to read $n$ byte from
  +the buffer, but we don't have that much data left), or
  +\textsf{XDS\_ERR\_UNKNOWN} (an engine returned an unspecified error).
  +
  +
  +\subsection{int xds\_decode(xds\_t*~\underline{xds}, const~char*~\underline{fmt}, \dots{});}
  +
  +This routine is basically identical to xds\_vdecode(), only that it uses a
  +different prototype syntax.
  +
   \section{The XDR Engines}
   \label{xdr}
   
   \section{The XML Engines}
   \label{xml}
   
  +\newpage
   \begin{thebibliography}{xxx}
   
   \bibitem{xdr} RFC 1832: ``XDR: External Data Representation Standard'',
   R.~Srinivasan, August~1995
   
   \bibitem{xml} {\sf http://www.ossp.org/pkg/xds/xds-xml.dtd}
  -
   
   \end{thebibliography}
   

From ossp-cvs-owner@ossp.org  Tue Aug  7 16:23:55 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f77ENst16310; Tue, 7 Aug 2001 16:23:54 +0200 (CEST)
Date: Tue, 7 Aug 2001 16:23:54 +0200 (CEST)
Message-Id: <200108071423.f77ENst16310@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   07-Aug-2001 16:23:54
  Branch: HEAD                             Handle: 2001080715235300

  Modified files:
    ossp-pkg/srpc/libxds    Makefile.in

  Log:
    xds.3 is no longer in this area...

  Summary:
    Revision    Changes     Path
    1.19        +1  -1      ossp-pkg/srpc/libxds/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile.in
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 Makefile.in
  --- ossp-pkg/srpc/libxds/Makefile.in	2001/08/07 11:19:13	1.18
  +++ ossp-pkg/srpc/libxds/Makefile.in	2001/08/07 14:23:53	1.19
  @@ -34,7 +34,7 @@
   .c.o:
   	$(CC) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CFLAGS) -c $<
   
  -all:	libxds.a xds.3
  +all:	libxds.a
   
   libxds.a:	$(OBJS)
   	@rm -f $@

From ossp-cvs-owner@ossp.org  Tue Aug  7 16:41:08 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f77Ef7919050; Tue, 7 Aug 2001 16:41:07 +0200 (CEST)
Date: Tue, 7 Aug 2001 16:41:07 +0200 (CEST)
Message-Id: <200108071441.f77Ef7919050@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/docs libxds.tex
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   07-Aug-2001 16:41:07
  Branch: HEAD                             Handle: 2001080715410600

  Modified files:
    ossp-pkg/srpc/libxds/docs libxds.tex

  Log:
    Documented the XDR and XML callbacks in tabular form.

  Summary:
    Revision    Changes     Path
    1.3         +39 -2      ossp-pkg/srpc/libxds/docs/libxds.tex
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/docs/libxds.tex
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 libxds.tex
  --- ossp-pkg/srpc/libxds/docs/libxds.tex	2001/08/07 14:07:25	1.2
  +++ ossp-pkg/srpc/libxds/docs/libxds.tex	2001/08/07 14:41:06	1.3
  @@ -1,6 +1,6 @@
   % -*- mode: LaTeX; fill-column: 75; -*-
   %
  -% $Id: libxds.tex,v 1.2 2001/08/07 14:07:25 simons Exp $
  +% $Id: libxds.tex,v 1.3 2001/08/07 14:41:06 simons Exp $
   %
   \documentclass[a4paper,10pt,pointlessnumbers,bibtotoc]{scrartcl}
   \usepackage[dvips,xdvi]{graphicx}
  @@ -766,7 +766,6 @@
   the buffer, but we don't have that much data left), or
   \textsf{XDS\_ERR\_UNKNOWN} (an engine returned an unspecified error).
   
  -
   \subsection{int xds\_decode(xds\_t*~\underline{xds}, const~char*~\underline{fmt}, \dots{});}
   
   This routine is basically identical to xds\_vdecode(), only that it uses a
  @@ -775,8 +774,46 @@
   \section{The XDR Engines}
   \label{xdr}
   
  +\begin{tabular}{|c|c|c|c|} \hline
  +\bf Function Name     & \bf Expected ``args'' Data Type & \bf Input Size & \bf Output Size \\ \hline
  +xdr\_encode\_uint32()      & xds\_uint32\_t   & 4 byte   & 4 byte \\
  +xdr\_decode\_uint32()      & xds\_uint32\_t*  & 4 byte   & 4 byte \\[1ex]
  +xdr\_encode\_int32()       & xds\_int32\_t    & 4 byte   & 4 byte \\
  +xdr\_decode\_int32()       & xds\_int32\_t*   & 4 byte   & 4 byte \\[1ex]
  +xdr\_encode\_uint64()      & xds\_uint64\_t   & 4 byte   & 4 byte \\
  +xdr\_decode\_uint64()      & xds\_uint64\_t*  & 4 byte   & 4 byte \\[1ex]
  +xdr\_encode\_int64()       & xds\_int64\_t    & 4 byte   & 4 byte \\
  +xdr\_decode\_int64()       & xds\_int64\_t*   & 4 byte   & 4 byte \\[1ex]
  +xdr\_encode\_double()      & xds\_double\_t   & ?? byte  & ?? byte \\
  +xdr\_decode\_double()      & xds\_double\_t*  & ?? byte  & ?? byte \\[1ex]
  +xdr\_encode\_octetstream() & void*, size\_t   & variable & variable \\
  +xdr\_decode\_octetstream() & void**, size\_t* & variable & variable \\[1ex]
  +xdr\_encode\_string()      & char*            & variable & variable \\
  +xdr\_decode\_string()      & char**           & variable & variable \\ \hline
  +\end{tabular}
  +
   \section{The XML Engines}
   \label{xml}
  +
  +\subsection{Encoding engines}
  +
  +\begin{tabular}{|c|c|c|c|} \hline
  +\bf Function Name     & \bf Expected ``args'' Data Type & \bf Input Size & \bf Output Size \\ \hline
  +xml\_encode\_uint32()      & xds\_uint32\_t   & ?? byte  & ?? byte \\
  +xml\_decode\_uint32()      & xds\_uint32\_t*  & ?? byte  & ?? byte \\[1ex]
  +xml\_encode\_int32()       & xds\_int32\_t    & ?? byte  & ?? byte \\
  +xml\_decode\_int32()       & xds\_int32\_t*   & ?? byte  & ?? byte \\[1ex]
  +xml\_encode\_uint64()      & xds\_uint64\_t   & ?? byte  & ?? byte \\
  +xml\_decode\_uint64()      & xds\_uint64\_t*  & ?? byte  & ?? byte \\[1ex]
  +xml\_encode\_int64()       & xds\_int64\_t    & ?? byte  & ?? byte \\
  +xml\_decode\_int64()       & xds\_int64\_t*   & ?? byte  & ?? byte \\[1ex]
  +xml\_encode\_double()      & xds\_double\_t   & ?? byte  & ?? byte \\
  +xml\_decode\_double()      & xds\_double\_t*  & ?? byte  & ?? byte \\[1ex]
  +xml\_encode\_octetstream() & void*, size\_t   & variable & variable \\
  +xml\_decode\_octetstream() & void**, size\_t* & variable & variable \\[1ex]
  +xml\_encode\_string()      & char*            & variable & variable \\
  +xml\_decode\_string()      & char**           & variable & variable \\ \hline
  +\end{tabular}
   
   \newpage
   \begin{thebibliography}{xxx}

From ossp-cvs-owner@ossp.org  Tue Aug  7 16:42:05 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f77Eg3d19361; Tue, 7 Aug 2001 16:42:03 +0200 (CEST)
Date: Tue, 7 Aug 2001 16:42:03 +0200 (CEST)
Message-Id: <200108071442.f77Eg3d19361@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   07-Aug-2001 16:42:03
  Branch: HEAD                             Handle: 2001080715420300

  Modified files:
    ossp-pkg/srpc/libxds    Makefile.in

  Log:
    Added docs target to build the manual.

  Summary:
    Revision    Changes     Path
    1.20        +3  -0      ossp-pkg/srpc/libxds/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile.in
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 Makefile.in
  --- ossp-pkg/srpc/libxds/Makefile.in	2001/08/07 14:23:53	1.19
  +++ ossp-pkg/srpc/libxds/Makefile.in	2001/08/07 14:42:03	1.20
  @@ -58,6 +58,9 @@
   check:		libxds.a
   	(cd regression-tests && $(MAKE) check)
   
  +docs:
  +	@(cd docs && $(MAKE))
  +
   # Dependencies
   
   $(XDS_OBJS):			internal.h xds.h

From ossp-cvs-owner@ossp.org  Tue Aug  7 16:46:40 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f77EkdM20190; Tue, 7 Aug 2001 16:46:39 +0200 (CEST)
Date: Tue, 7 Aug 2001 16:46:39 +0200 (CEST)
Message-Id: <200108071446.f77EkdM20190@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   07-Aug-2001 16:46:39
  Branch: HEAD                             Handle: 2001080715463800

  Modified files:
    ossp-pkg/srpc/libxds    Makefile.in

  Log:
    Added phony declaration for those targets not associated with a file
    in the repository.

  Summary:
    Revision    Changes     Path
    1.21        +2  -0      ossp-pkg/srpc/libxds/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile.in
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 Makefile.in
  --- ossp-pkg/srpc/libxds/Makefile.in	2001/08/07 14:42:03	1.20
  +++ ossp-pkg/srpc/libxds/Makefile.in	2001/08/07 14:46:38	1.21
  @@ -34,6 +34,8 @@
   .c.o:
   	$(CC) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CFLAGS) -c $<
   
  +.PHONY:	clean distclean realclean check docs
  +
   all:	libxds.a
   
   libxds.a:	$(OBJS)

From ossp-cvs-owner@ossp.org  Tue Aug  7 20:56:57 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f77Iuu752262; Tue, 7 Aug 2001 20:56:56 +0200 (CEST)
Date: Tue, 7 Aug 2001 20:56:56 +0200 (CEST)
Message-Id: <200108071856.f77Iuu752262@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str ChangeLog shtool
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   07-Aug-2001 20:56:56
  Branch: HEAD                             Handle: 2001080719565600

  Modified files:
    ossp-pkg/str            ChangeLog shtool

  Log:
    Update to GNU shtool 1.5.4

  Summary:
    Revision    Changes     Path
    1.29        +2  -2      ossp-pkg/str/ChangeLog
    1.7         +43 -14     ossp-pkg/str/shtool
  ____________________________________________________________________________

  Index: ossp-pkg/str/ChangeLog
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 ChangeLog
  --- ossp-pkg/str/ChangeLog	2001/04/27 12:22:21	1.28
  +++ ossp-pkg/str/ChangeLog	2001/08/07 18:56:56	1.29
  @@ -9,9 +9,9 @@
   
    ChangeLog
   
  - Changes between 0.9.4 and 0.9.5 (14-Jul-2000 to xx-May-2001):
  + Changes between 0.9.4 and 0.9.5 (14-Jul-2000 to xx-Aug-2001):
   
  -   *) Upgrade to GNU shtool 1.5.3.
  +   *) Upgrade to GNU shtool 1.5.4.
         [Ralf S. Engelschall]
   
      *) Fixed handling of NaN and Inf values in str_format.c 
  Index: ossp-pkg/str/shtool
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 shtool
  --- ossp-pkg/str/shtool	2001/04/27 12:22:21	1.6
  +++ ossp-pkg/str/shtool	2001/08/07 18:56:56	1.7
  @@ -6,7 +6,7 @@
   ##  See http://www.gnu.org/software/shtool/ for more information.
   ##  See ftp://ftp.gnu.org/gnu/shtool/ for latest version.
   ##
  -##  Version:  1.5.3 (19-Apr-2001)
  +##  Version:  1.5.4 (14-Jun-2001)
   ##  Contents: 6/17 available modules
   ##
   
  @@ -65,11 +65,11 @@
       exit 1
   fi
   if [ ".$1" = ".-h" -o ".$1" = ".--help" ]; then
  -    echo "This is GNU shtool, version 1.5.3 (19-Apr-2001)"
  +    echo "This is GNU shtool, version 1.5.4 (14-Jun-2001)"
       echo "Copyright (c) 1994-2001 Ralf S. Engelschall <rse@engelschall.com>"
       echo "Report bugs to <bug-shtool@gnu.org>"
       echo ''
  -    echo "Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]" 
  +    echo "Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]"
       echo ''
       echo 'Available global <options>:'
       echo '  -v, --version   display shtool version information'
  @@ -105,7 +105,7 @@
       exit 0
   fi
   if [ ".$1" = ".-v" -o ".$1" = ."--version" ]; then
  -    echo "GNU shtool 1.5.3 (19-Apr-2001)"
  +    echo "GNU shtool 1.5.4 (14-Jun-2001)"
       exit 0
   fi
   if [ ".$1" = ".-r" -o ".$1" = ."--recreate" ]; then
  @@ -389,7 +389,7 @@
       fi
       
       #   determine terminal bold sequence
  -    term_bold='' 
  +    term_bold=''
       term_norm=''
       if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[Bb]'`" != . ]; then
           case $TERM in
  @@ -440,7 +440,7 @@
       
       #   determine user name
       username=''
  -    if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[uU]'`" != . ]; then
  +    if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[uUgG]'`" != . ]; then
           username="$LOGNAME"
           if [ ".$username" = . ]; then
               username="$USER"
  @@ -482,8 +482,38 @@
           fi
       fi
       
  -    #   determine host name
  +    #   determine (primary) group id
  +    groupid=''
  +    if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[gG]'`" != . ]; then
  +        groupid=`egrep "^${username}:" /etc/passwd 2>/dev/null | \
  +                 sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
  +        if [ ".$groupid" = . ]; then
  +            groupid=`(ypcat passwd) 2>/dev/null | egrep "^${username}:" | \
  +                     sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
  +            if [ ".$groupid" = . ]; then
  +                groupid='?'
  +            fi
  +        fi
  +    fi
  +    
  +    #   determine (primary) group name
  +    groupname=''
  +    if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%g'`" != . ]; then
  +        groupname=`egrep "^[^:]*:[^:]*:${groupid}:" /etc/group 2>/dev/null | \
  +                   sed -e 's/:.*$//'`
  +        if [ ".$groupname" = . ]; then
  +            groupname=`(ypcat group) 2>/dev/null | \
  +                       egrep "^[^:]*:[^:]*:${groupid}:" | \
  +                       sed -e 's/:.*$//'`
  +            if [ ".$groupname" = . ]; then
  +                groupname='?'
  +            fi
  +        fi
  +    fi
  +    
  +    #   determine host and domain name
       hostname=''
  +    domainname=''
       if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%h'`" != . ]; then
           hostname="`(uname -n) 2>/dev/null |\
                      awk '{ printf("%s", $1); }'`"
  @@ -501,9 +531,6 @@
                   ;;
           esac
       fi
  -    
  -    #   determine domain name
  -    domainname=''
       if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%d'`" != . ]; then
           if [ ".$domainname" = . ]; then
               if [ -f /etc/resolv.conf ]; then
  @@ -563,6 +590,8 @@
                     -e "s/%b/${term_norm}/g" \
                     -e "s/%u/${username}/g" \
                     -e "s/%U/${userid}/g" \
  +                  -e "s/%g/${groupname}/g" \
  +                  -e "s/%G/${groupid}/g" \
                     -e "s/%h/${hostname}/g" \
                     -e "s/%d/${domainname}/g" \
                     -e "s/%D/${time_day}/g" \
  @@ -592,7 +621,7 @@
       ##  Originally written for shtool
       ##
       
  -    #   determine source(s) and destination 
  +    #   determine source(s) and destination
       argc=$#
       srcs=""
       while [ $# -gt 1 ]; do
  @@ -1071,7 +1100,7 @@
               echo dummy | awk '{ printf("new version: "); }'
               read triple
               case $triple in
  -                [0-9]*.[0-9]*[sabp.][0-9]* ) 
  +                [0-9]*.[0-9]*[sabp.][0-9]* )
                       ;;
                   * ) echo "$msgprefix:Error: invalid version string entered: \`$triple'" 1>&2
                       continue
  @@ -1155,7 +1184,7 @@
                   exit 1
                   ;;
           esac
  -    else 
  +    else
           #   update the version file
       
           #   pre-generate various strings
  @@ -1178,7 +1207,7 @@
           #   generate uppercase prefix
           prefixupper=`echo $prefix |\
                        tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
  -        
  +    
           #   create the version file according the the selected language
           echo "new version: ${vLong}"
       

From ossp-cvs-owner@ossp.org  Wed Aug  8 11:15:57 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f789FuC59201; Wed, 8 Aug 2001 11:15:56 +0200 (CEST)
Date: Wed, 8 Aug 2001 11:15:56 +0200 (CEST)
Message-Id: <200108080915.f789FuC59201@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests xml-octetstream-empt...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Aug-2001 11:15:56
  Branch: HEAD                             Handle: 2001080810155500

  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            xml-octetstream-empty.c xml-octetstream.c

  Log:
    - Enhanced test cases to use the begin- and end engines.
    - Use sizeof() rather than strlen() to determine length of fixed strings.

  Summary:
    Revision    Changes     Path
    1.2         +9  -5      ossp-pkg/srpc/libxds/regression-tests/xml-octetstream-empty.c
    1.2         +10 -6      ossp-pkg/srpc/libxds/regression-tests/xml-octetstream.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/xml-octetstream-empty.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xml-octetstream-empty.c
  --- ossp-pkg/srpc/libxds/regression-tests/xml-octetstream-empty.c	2001/08/02 17:24:50	1.1
  +++ ossp-pkg/srpc/libxds/regression-tests/xml-octetstream-empty.c	2001/08/08 09:15:55	1.2
  @@ -50,12 +50,14 @@
   	printf("Failed to initialize XDS context.\n");
   	return 1;
   	}
  -    if (xds_register(xds, "os", &xml_encode_octetstream, NULL) != XDS_OK)
  +    if (xds_register(xds, "os", &xml_encode_octetstream, NULL) != XDS_OK ||
  +	xds_register(xds, "begin", &xml_encode_begin, NULL) != XDS_OK ||
  +	xds_register(xds, "end", &xml_encode_end, NULL) != XDS_OK)
   	{
   	printf("Failed to register my encoding engines.\n");
   	return 1;
   	}
  -    if (xds_encode(xds, "os", msg, strlen(msg)) != XDS_OK)
  +    if (xds_encode(xds, "begin os end", msg, sizeof(msg)-1) != XDS_OK)
   	{
   	printf("xds_encode() failed.\n");
   	return 1;
  @@ -75,7 +77,9 @@
   	printf("Failed to initialize XDS context.\n");
   	return 1;
   	}
  -    if (xds_register(xds, "os", &xml_decode_octetstream, NULL) != XDS_OK)
  +    if (xds_register(xds, "os", &xml_decode_octetstream, NULL) != XDS_OK ||
  +	xds_register(xds, "begin", &xml_decode_begin, NULL) != XDS_OK ||
  +	xds_register(xds, "end", &xml_decode_end, NULL) != XDS_OK)
   	{
   	printf("Failed to register my decoding engines.\n");
   	return 1;
  @@ -85,12 +89,12 @@
   	printf("xds_setbuffer() failed.\n");
   	return 1;
   	}
  -    if (xds_decode(xds, "os", &new_msg, &new_msg_size) != XDS_OK)
  +    if (xds_decode(xds, "begin os end", &new_msg, &new_msg_size) != XDS_OK)
   	{
   	printf("xds_decode() failed.\n");
   	return 1;
   	}
  -    if (new_msg_size != strlen(msg))
  +    if (new_msg_size != sizeof(msg)-1)
   	{
   	printf("The size of the decoded message is wrong.\n");
   	return 1;
  Index: ossp-pkg/srpc/libxds/regression-tests/xml-octetstream.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xml-octetstream.c
  --- ossp-pkg/srpc/libxds/regression-tests/xml-octetstream.c	2001/08/02 17:24:50	1.1
  +++ ossp-pkg/srpc/libxds/regression-tests/xml-octetstream.c	2001/08/08 09:15:55	1.2
  @@ -37,7 +37,7 @@
       char*  buffer;
       size_t buffer_size;
   
  -    char   msg[] = "Hello World";
  +    char   msg[] = "Hallo\000Worl";
       char*  new_msg;
       size_t new_msg_size;
   
  @@ -50,12 +50,14 @@
   	printf("Failed to initialize XDS context.\n");
   	return 1;
   	}
  -    if (xds_register(xds, "os", &xml_encode_octetstream, NULL) != XDS_OK)
  +    if (xds_register(xds, "os", &xml_encode_octetstream, NULL) != XDS_OK ||
  +	xds_register(xds, "begin", &xml_encode_begin, NULL) != XDS_OK ||
  +	xds_register(xds, "end", &xml_encode_end, NULL) != XDS_OK)
   	{
   	printf("Failed to register my encoding engines.\n");
   	return 1;
   	}
  -    if (xds_encode(xds, "os", msg, strlen(msg)) != XDS_OK)
  +    if (xds_encode(xds, "begin os end", msg, sizeof(msg)-1) != XDS_OK)
   	{
   	printf("xds_encode() failed.\n");
   	return 1;
  @@ -75,7 +77,9 @@
   	printf("Failed to initialize XDS context.\n");
   	return 1;
   	}
  -    if (xds_register(xds, "os", &xml_decode_octetstream, NULL) != XDS_OK)
  +    if (xds_register(xds, "os", &xml_decode_octetstream, NULL) != XDS_OK ||
  +	xds_register(xds, "begin", &xml_decode_begin, NULL) != XDS_OK ||
  +	xds_register(xds, "end", &xml_decode_end, NULL) != XDS_OK)
   	{
   	printf("Failed to register my decoding engines.\n");
   	return 1;
  @@ -85,12 +89,12 @@
   	printf("xds_setbuffer() failed.\n");
   	return 1;
   	}
  -    if (xds_decode(xds, "os", &new_msg, &new_msg_size) != XDS_OK)
  +    if (xds_decode(xds, "begin os end", &new_msg, &new_msg_size) != XDS_OK)
   	{
   	printf("xds_decode() failed.\n");
   	return 1;
   	}
  -    if (new_msg_size != strlen(msg))
  +    if (new_msg_size != sizeof(msg)-1)
   	{
   	printf("The size of the decoded message is wrong.\n");
   	return 1;

From ossp-cvs-owner@ossp.org  Wed Aug  8 11:17:29 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f789HT960012; Wed, 8 Aug 2001 11:17:29 +0200 (CEST)
Date: Wed, 8 Aug 2001 11:17:29 +0200 (CEST)
Message-Id: <200108080917.f789HT960012@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests xdr-octetstream.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Aug-2001 11:17:29
  Branch: HEAD                             Handle: 2001080810172800

  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            xdr-octetstream.c

  Log:
    - Use sizeof() instead of strlen().
    - Use a test message with a zero byte in the midst of the string.

  Summary:
    Revision    Changes     Path
    1.3         +3  -3      ossp-pkg/srpc/libxds/regression-tests/xdr-octetstream.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/xdr-octetstream.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xdr-octetstream.c
  --- ossp-pkg/srpc/libxds/regression-tests/xdr-octetstream.c	2001/08/01 15:25:50	1.2
  +++ ossp-pkg/srpc/libxds/regression-tests/xdr-octetstream.c	2001/08/08 09:17:28	1.3
  @@ -35,7 +35,7 @@
       char*  buffer;
       size_t buffer_size;
   
  -    char   msg[] = "Hello World";
  +    char   msg[] = "Hello\000World";
       char*  new_msg;
       size_t new_msg_size;
   
  @@ -53,7 +53,7 @@
   	printf("Failed to register my encoding engines.\n");
   	return 1;
   	}
  -    if (xds_encode(xds, "os", msg, strlen(msg)) != XDS_OK)
  +    if (xds_encode(xds, "os", msg, sizeof(msg)-1) != XDS_OK)
   	{
   	printf("xds_encode() failed.\n");
   	return 1;
  @@ -91,7 +91,7 @@
   	printf("xds_decode() failed.\n");
   	return 1;
   	}
  -    if (new_msg_size != strlen(msg))
  +    if (new_msg_size != sizeof(msg)-1)
   	{
   	printf("The size of the decoded message is wrong.\n");
   	return 1;

From ossp-cvs-owner@ossp.org  Wed Aug  8 11:19:36 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f789JZD60202; Wed, 8 Aug 2001 11:19:35 +0200 (CEST)
Date: Wed, 8 Aug 2001 11:19:35 +0200 (CEST)
Message-Id: <200108080919.f789JZD60202@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests xdr-string.c xds-dec...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Aug-2001 11:19:35
  Branch: HEAD                             Handle: 2001080810193400

  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            xdr-string.c xds-decode.c

  Log:
    Use sizeof() rather than strlen() to determine the length of fixed
    strings in the program.

  Summary:
    Revision    Changes     Path
    1.5         +2  -2      ossp-pkg/srpc/libxds/regression-tests/xdr-string.c
    1.5         +1  -1      ossp-pkg/srpc/libxds/regression-tests/xds-decode.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/xdr-string.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xdr-string.c
  --- ossp-pkg/srpc/libxds/regression-tests/xdr-string.c	2001/08/02 11:52:12	1.4
  +++ ossp-pkg/srpc/libxds/regression-tests/xdr-string.c	2001/08/08 09:19:34	1.5
  @@ -90,12 +90,12 @@
   	printf("xds_decode() failed.\n");
   	return 1;
   	}
  -    if (strlen(new_msg) != strlen(msg))
  +    if (strlen(new_msg) != sizeof(msg)-1)
   	{
   	printf("The size of the decoded message is wrong.\n");
   	return 1;
   	}
  -    if (memcmp(msg, new_msg, strlen(new_msg)) != 0)
  +    if (memcmp(msg, new_msg, sizeof(msg)-1) != 0)
   	{
   	printf("The decoded string is not correct.\n");
   	return 1;
  Index: ossp-pkg/srpc/libxds/regression-tests/xds-decode.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xds-decode.c
  --- ossp-pkg/srpc/libxds/regression-tests/xds-decode.c	2001/08/01 15:25:50	1.4
  +++ ossp-pkg/srpc/libxds/regression-tests/xds-decode.c	2001/08/08 09:19:34	1.5
  @@ -102,7 +102,7 @@
       /* Decode the buffer and have the callback report when something
          is wrong. */
   
  -    if (xds_setbuffer(xds, XDS_LOAN, buffer, strlen(buffer)) != XDS_OK)
  +    if (xds_setbuffer(xds, XDS_LOAN, buffer, sizeof(buffer)-1) != XDS_OK)
   	{
   	printf("xds_decode() failed!");
   	return 1;

From ossp-cvs-owner@ossp.org  Wed Aug  8 11:23:41 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f789NdN60718; Wed, 8 Aug 2001 11:23:39 +0200 (CEST)
Date: Wed, 8 Aug 2001 11:23:39 +0200 (CEST)
Message-Id: <200108080923.f789NdN60718@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xml-decode-octetstream.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Aug-2001 11:23:39
  Branch: HEAD                             Handle: 2001080810233900

  Modified files:
    ossp-pkg/srpc/libxds    xml-decode-octetstream.c

  Log:
    base64_decode() did not honor the srclen parameter properly but
    depended on the src buffer to be terminated by a null byte. This is
    fixed now.

  Summary:
    Revision    Changes     Path
    1.2         +12 -14     ossp-pkg/srpc/libxds/xml-decode-octetstream.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xml-decode-octetstream.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xml-decode-octetstream.c
  --- ossp-pkg/srpc/libxds/xml-decode-octetstream.c	2001/08/02 17:24:50	1.1
  +++ ossp-pkg/srpc/libxds/xml-decode-octetstream.c	2001/08/08 09:23:39	1.2
  @@ -105,7 +105,6 @@
   
       if (ch == xds_pad64)
   	{          /* We got a pad char. */
  -        ch = *src++;            /* Skip it, get next. */
           switch (state)
   	    {
               case 0:             /* Invalid = in first position */
  @@ -113,22 +112,29 @@
                   return -1;
               case 2:             /* Valid, means one byte of info */
                   /* Skip any number of spaces. */
  -                for (; ch != '\0'; ch = *src++)
  +		while(srclen > 0)
  +		    {
  +		    ch = *src++;
  +		    --srclen;
                       if (!(isascii(ch) && isspace(ch)))
                           break;
  +		    }
                   /* Make sure there is another trailing = sign. */
                   if (ch != xds_pad64)
                       return -1;
  -                ch = *src++;        /* Skip the = */
                   /* FALLTHROUGH */
               case 3:             /* Valid, means two bytes of info */
                   /*
                    * We know this char is an =.  Is there anything but
                    * whitespace after it?
                    */
  -                for (; ch != '\0'; ch = *src++)
  +		while(srclen > 0)
  +		    {
  +		    ch = *src++;
  +		    --srclen;
                       if (!(isascii(ch) && isspace(ch)))
                           return -1;
  +		    }
                   /*
                    * Now make sure for cases 2 and 3 that the "extra"
                    * bits that slopped past the last full byte were
  @@ -192,23 +198,16 @@
   	p = (char*)buffer + 13;
   	}
   
  -    /* Now find out how long the decoded data is going to be and
  -       allocate a buffer for it. */
  +    /* Now find out how long the decoded data is going to be, allocate
  +       a buffer for it, and decode away. */
   
  -    p[p_len] = '\0';
       *data_len = base64_decode(NULL, 0, p, p_len);
  -    p[p_len] = '<';
       if (*data_len == (size_t)-1)
   	return XDS_ERR_UNKNOWN;
       *data = malloc(*data_len);
       if (*data == NULL)
   	return XDS_ERR_NO_MEM;
  -
  -    /* Decode the data. */
  -
  -    p[p_len] = '\0';
       base64_decode(*data, *data_len, p, p_len);
  -    p[p_len] = '<';
   
       /* Check that we have a closing tag. */
   
  @@ -223,4 +222,3 @@
       *used_buffer_size = 13 + p_len + 14;
       return XDS_OK;
       }
  -

From ossp-cvs-owner@ossp.org  Wed Aug  8 11:50:29 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f789oS164862; Wed, 8 Aug 2001 11:50:28 +0200 (CEST)
Date: Wed, 8 Aug 2001 11:50:28 +0200 (CEST)
Message-Id: <200108080950.f789oS164862@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xml-decode-octetstream.c xml-encode-o...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Aug-2001 11:50:28
  Branch: HEAD                             Handle: 2001080810502700

  Modified files:
    ossp-pkg/srpc/libxds    xml-decode-octetstream.c xml-encode-octetstream.c

  Log:
    Fixed base64_(en|de)code()'s problem with buffer's of input size zero.

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/srpc/libxds/xml-decode-octetstream.c
    1.2         +1  -1      ossp-pkg/srpc/libxds/xml-encode-octetstream.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xml-decode-octetstream.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xml-decode-octetstream.c
  --- ossp-pkg/srpc/libxds/xml-decode-octetstream.c	2001/08/08 09:23:39	1.2
  +++ ossp-pkg/srpc/libxds/xml-decode-octetstream.c	2001/08/08 09:50:27	1.3
  @@ -36,7 +36,7 @@
       char *pos;
   
       if (srclen == 0)
  -        srclen = strlen(src);
  +	return 0;
       state = 0;
       dstidx = 0;
       res = 0;
  Index: ossp-pkg/srpc/libxds/xml-encode-octetstream.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xml-encode-octetstream.c
  --- ossp-pkg/srpc/libxds/xml-encode-octetstream.c	2001/08/02 17:24:50	1.1
  +++ ossp-pkg/srpc/libxds/xml-encode-octetstream.c	2001/08/08 09:50:27	1.2
  @@ -41,7 +41,7 @@
       size_t i;
   
       if (srclen == 0)
  -        return -1;
  +        return 0;
       if (dst == NULL)
   	{
           /* just calculate required length of dst */

From ossp-cvs-owner@ossp.org  Wed Aug  8 13:21:29 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f78BLSZ76237; Wed, 8 Aug 2001 13:21:28 +0200 (CEST)
Date: Wed, 8 Aug 2001 13:21:28 +0200 (CEST)
Message-Id: <200108081121.f78BLSZ76237@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile.in ossp-pkg/srpc/libxds/regr...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Aug-2001 13:21:28
  Branch: HEAD                             Handle: 2001080812212701

  Added files:
    ossp-pkg/srpc/libxds    xml-decode-string.c xml-encode-string.c
    ossp-pkg/srpc/libxds/regression-tests
                            xml-string-empty.c xml-string.c
  Modified files:
    ossp-pkg/srpc/libxds    Makefile.in
    ossp-pkg/srpc/libxds/regression-tests
                            Makefile.in

  Log:
    Implemented xml engines for encoding or decoding strings plus the
    apropriate test cases.

  Summary:
    Revision    Changes     Path
    1.22        +1  -0      ossp-pkg/srpc/libxds/Makefile.in
    1.14        +2  -1      ossp-pkg/srpc/libxds/regression-tests/Makefile.in
    1.1         +112 -0     ossp-pkg/srpc/libxds/regression-tests/xml-string-empty.c
    1.1         +112 -0     ossp-pkg/srpc/libxds/regression-tests/xml-string.c
    1.1         +114 -0     ossp-pkg/srpc/libxds/xml-decode-string.c
    1.1         +126 -0     ossp-pkg/srpc/libxds/xml-encode-string.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile.in
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 Makefile.in
  --- ossp-pkg/srpc/libxds/Makefile.in	2001/08/07 14:46:38	1.21
  +++ ossp-pkg/srpc/libxds/Makefile.in	2001/08/08 11:21:27	1.22
  @@ -15,6 +15,7 @@
   		  xml-encode-begin.o	   xml-decode-begin.o \
   		  xml-encode-end.o	   xml-decode-end.o \
   		  xml-encode-octetstream.o xml-decode-octetstream.o \
  +		  xml-encode-string.o	   xml-decode-string.o \
   		  $(XML64_OBJS)
   
   XDR64_OBJS	= @xdr_64_bit_objects@
  Index: ossp-pkg/srpc/libxds/regression-tests/Makefile.in
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 Makefile.in
  --- ossp-pkg/srpc/libxds/regression-tests/Makefile.in	2001/08/02 17:24:50	1.13
  +++ ossp-pkg/srpc/libxds/regression-tests/Makefile.in	2001/08/08 11:21:27	1.14
  @@ -13,7 +13,8 @@
   		  xds-getbuffer.exe xds-decode.exe xds-setbuffer.exe xds-engine-restart.exe \
   		  xdr-uint32.exe xdr-int32.exe xdr-octetstream.exe xdr-octetstream-empty.exe \
   		  xdr-string.exe xdr-string-empty.exe xml-uint32.exe xml-int32.exe \
  -		  xml-double.exe xml-octetstream.exe xml-octetstream-empty.exe $(TESTS64)
  +		  xml-double.exe xml-octetstream.exe xml-octetstream-empty.exe \
  +		  xml-string.exe xml-string-empty.exe $(TESTS64)
   
   .SUFFIXES:
   .SUFFIXES:	.c .exe
  Index: ossp-pkg/srpc/libxds/regression-tests/xml-string-empty.c
  ============================================================
  $ cvs update -p -r1.1 xml-string-empty.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <unistd.h>
  
  #include <stdio.h>
  #include <string.h>
  #include "../internal.h"
  
  int main()
      {
      xds_t* xds;
      char*  buffer;
      size_t buffer_size;
  
      char   msg[] = "";
      char*  new_msg;
  
      /* Encode the string, then erase the buffer and decode the string
         back, verifying that it hasn't changed. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL)
  	{
  	printf("Failed to initialize XDS context.\n");
  	return 1;
  	}
      if (xds_register(xds, "string", &xml_encode_string, NULL) != XDS_OK ||
  	xds_register(xds, "begin", &xml_encode_begin, NULL) != XDS_OK ||
  	xds_register(xds, "end", &xml_encode_end, NULL) != XDS_OK)
  	{
  	printf("Failed to register my encoding engines.\n");
  	return 1;
  	}
      if (xds_encode(xds, "begin string end", msg, sizeof(msg)-1) != XDS_OK)
  	{
  	printf("xds_encode() failed.\n");
  	return 1;
  	}
      if (xds_getbuffer(xds, XDS_GIFT, (void**)&buffer, &buffer_size) != XDS_OK)
  	{
  	printf("xds_getbuffer() failed.\n");
  	return 1;
  	}
      xds_destroy(xds);
      write(1, buffer, buffer_size);
      printf("\n");
  
      xds = xds_init(XDS_DECODE);
      if (xds == NULL)
  	{
  	printf("Failed to initialize XDS context.\n");
  	return 1;
  	}
      if (xds_register(xds, "string", &xml_decode_string, NULL) != XDS_OK ||
  	xds_register(xds, "begin", &xml_decode_begin, NULL) != XDS_OK ||
  	xds_register(xds, "end", &xml_decode_end, NULL) != XDS_OK)
  	{
  	printf("Failed to register my decoding engines.\n");
  	return 1;
  	}
      if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK)
  	{
  	printf("xds_setbuffer() failed.\n");
  	return 1;
  	}
      if (xds_decode(xds, "begin string end", &new_msg) != XDS_OK)
  	{
  	printf("xds_decode() failed.\n");
  	return 1;
  	}
      if (strlen(new_msg) != sizeof(msg)-1)
  	{
  	printf("The size of the decoded message is wrong.\n");
  	return 1;
  	}
      if (memcmp(msg, new_msg, sizeof(msg)-1) != 0)
  	{
  	printf("The decoded string is not correct.\n");
  	return 1;
  	}
      xds_destroy(xds);
      free(new_msg);
  
      /* Everything went fine. */
  
      return 0;
      }
  Index: ossp-pkg/srpc/libxds/regression-tests/xml-string.c
  ============================================================
  $ cvs update -p -r1.1 xml-string.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <unistd.h>
  
  #include <stdio.h>
  #include <string.h>
  #include "../internal.h"
  
  int main()
      {
      xds_t* xds;
      char*  buffer;
      size_t buffer_size;
  
      char   msg[] = "<Hallo> ]]>&<&>World";
      char*  new_msg;
  
      /* Encode the string, then erase the buffer and decode the string
         back, verifying that it hasn't changed. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL)
  	{
  	printf("Failed to initialize XDS context.\n");
  	return 1;
  	}
      if (xds_register(xds, "string", &xml_encode_string, NULL) != XDS_OK ||
  	xds_register(xds, "begin", &xml_encode_begin, NULL) != XDS_OK ||
  	xds_register(xds, "end", &xml_encode_end, NULL) != XDS_OK)
  	{
  	printf("Failed to register my encoding engines.\n");
  	return 1;
  	}
      if (xds_encode(xds, "begin string end", msg, sizeof(msg)-1) != XDS_OK)
  	{
  	printf("xds_encode() failed.\n");
  	return 1;
  	}
      if (xds_getbuffer(xds, XDS_GIFT, (void**)&buffer, &buffer_size) != XDS_OK)
  	{
  	printf("xds_getbuffer() failed.\n");
  	return 1;
  	}
      xds_destroy(xds);
      write(1, buffer, buffer_size);
      printf("\n");
  
      xds = xds_init(XDS_DECODE);
      if (xds == NULL)
  	{
  	printf("Failed to initialize XDS context.\n");
  	return 1;
  	}
      if (xds_register(xds, "string", &xml_decode_string, NULL) != XDS_OK ||
  	xds_register(xds, "begin", &xml_decode_begin, NULL) != XDS_OK ||
  	xds_register(xds, "end", &xml_decode_end, NULL) != XDS_OK)
  	{
  	printf("Failed to register my decoding engines.\n");
  	return 1;
  	}
      if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK)
  	{
  	printf("xds_setbuffer() failed.\n");
  	return 1;
  	}
      if (xds_decode(xds, "begin string end", &new_msg) != XDS_OK)
  	{
  	printf("xds_decode() failed.\n");
  	return 1;
  	}
      if (strlen(new_msg) != sizeof(msg)-1)
  	{
  	printf("The size of the decoded message is wrong.\n");
  	return 1;
  	}
      if (memcmp(msg, new_msg, sizeof(msg)-1) != 0)
  	{
  	printf("The decoded string is not correct.\n");
  	return 1;
  	}
      xds_destroy(xds);
      free(new_msg);
  
      /* Everything went fine. */
  
      return 0;
      }
  Index: ossp-pkg/srpc/libxds/xml-decode-string.c
  ============================================================
  $ cvs update -p -r1.1 xml-decode-string.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <string.h>
  #include "xds.h"
  
  static const char TAG_OPEN[] = "<string>";
  static const char TAG_CLOSE[] = "</string>";
  static const size_t TAG_OPEN_LEN = sizeof(TAG_OPEN)-1;
  static const size_t TAG_CLOSE_LEN = sizeof(TAG_CLOSE)-1;
  
  int xml_decode_string(xds_t* xds, void* engine_context,
  		      void* buffer, size_t buffer_size, size_t* used_buffer_size,
  		      va_list* args)
      {
      char**  target_buffer;
      char*   src;
      size_t  src_len;
      char*   dst;
  
      /* Setup the engine. We need at least space for our tags; how long
         the actual content is going to be will be seen soon. */
  
      xds_init_encoding_engine(TAG_OPEN_LEN + TAG_CLOSE_LEN);
  
      /* Is the opening tag there? */
  
      if (strncasecmp(buffer, TAG_OPEN, TAG_OPEN_LEN) != 0)
          return XDS_ERR_TYPE_MISMATCH;
  
      /* Determine the length of the encoded data. */
  
      src = (char*)buffer + TAG_OPEN_LEN;
      for (src_len = 0; src[src_len] != '<'; ++src_len)
  	if (src[src_len] == '\0')
  	    return XDS_ERR_TYPE_MISMATCH;
  
      /* Check the closing tag. */
  
      if (strncasecmp(src + src_len, TAG_CLOSE, TAG_CLOSE_LEN) != 0)
          return XDS_ERR_TYPE_MISMATCH;
      *used_buffer_size = TAG_OPEN_LEN + src_len + TAG_CLOSE_LEN;
  
      /* Allocate target buffer. */
  
      target_buffer = va_arg(*args, char**);
      xds_check_parameter(target_buffer != NULL);
      *target_buffer = dst = malloc(src_len + 1);
      if (dst == NULL)
  	return XDS_ERR_NO_MEM;
  
      /* Decode the data into the target buffer. */
  
      while(src_len > 0)
  	{
  	if (*src == '&')
  	    {
  	    if (src_len >= 4 && strncmp(src, "&lt;", 4) == 0)
  		{
  		*dst++ = '<';
  		src += 4; src_len -= 4;
  		}
  	    else if (src_len >= 4 && strncmp(src, "&gt;", 4) == 0)
  		{
  		*dst++ = '>';
  		src += 4; src_len -= 4;
  		}
  	    else if (src_len >= 5 && strncmp(src, "&amp;", 5) == 0)
  		{
  		*dst++ = '&';
  		src += 5; src_len -= 5;
  		}
  	    else
  		{
  		free(dst);
  		return XDS_ERR_TYPE_MISMATCH;
  		}
  	    }
  	else
  	    {
  	    *dst++ = *src++;
  	    --src_len;
  	    }
  	}
      *dst = '\0';
  
      /* Done. */
  
      return XDS_OK;
      }
  Index: ossp-pkg/srpc/libxds/xml-encode-string.c
  ============================================================
  $ cvs update -p -r1.1 xml-encode-string.c
  /*
     XDS - OSSP Extensible Data Serialization Library
     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.com/pkg/xds/.
  
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
     the above copyright notice and this permission notice appear in all
     copies.
  
     THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
  */
  
  #include <string.h>
  #include "xds.h"
  
  static const char TAG_OPEN[] = "<string>";
  static const char TAG_CLOSE[] = "</string>";
  static const size_t TAG_OPEN_LEN = sizeof(TAG_OPEN)-1;
  static const size_t TAG_CLOSE_LEN = sizeof(TAG_CLOSE)-1;
  
  int xml_encode_string(xds_t* xds, void* engine_context,
  		      void* buffer, size_t buffer_size, size_t* used_buffer_size,
  		      va_list* args)
      {
      char*  src;
      size_t src_len;
      char*  dst;
      size_t dst_size;
  
      /* Setup the engine. We need at least space for our tags; how long
         the actual content is going to be will be seen soon. */
  
      xds_init_encoding_engine(TAG_OPEN_LEN + TAG_CLOSE_LEN);
  
      /* Get the data from the stack. */
  
      src      = va_arg(*args, char*);
      xds_check_parameter(src != NULL);
      src_len  = strlen(src);
  
      /* Set up the target buffer. */
  
      dst      = buffer;
      dst_size = buffer_size;
  
      /* Write the opening tag. */
  
      memmove(dst, TAG_OPEN, TAG_OPEN_LEN);
      dst      += TAG_OPEN_LEN;
      dst_size -= TAG_OPEN_LEN;
  
      /* Format the data into the buffer. */
  
      while(src_len > 0 && dst_size > 0)
  	{
  	switch(*src)
  	    {
  	    case '<':		/* Turn into "&lt;". */
  		if (dst_size >= 4)
  		    {
  		    *dst++ = '&'; --dst_size;
  		    *dst++ = 'l'; --dst_size;
  		    *dst++ = 't'; --dst_size;
  		    *dst++ = ';'; --dst_size;
  		    ++src; --src_len;
  		    }
  		break;
  	    case '&':		/* Turn into "&amp;". */
  		if (dst_size >= 5)
  		    {
  		    *dst++ = '&'; --dst_size;
  		    *dst++ = 'a'; --dst_size;
  		    *dst++ = 'm'; --dst_size;
  		    *dst++ = 'p'; --dst_size;
  		    *dst++ = ';'; --dst_size;
  		    ++src; --src_len;
  		    }
  		break;
  	    case '>':		/* Turn into "&gt;". */
  		if (dst_size >= 4)
  		    {
  		    *dst++ = '&'; --dst_size;
  		    *dst++ = 'g'; --dst_size;
  		    *dst++ = 't'; --dst_size;
  		    *dst++ = ';'; --dst_size;
  		    ++src; --src_len;
  		    }
  		break;
  	    default:		/* Just copy it. */
  		*dst++ = *src++;
  		--src_len;
  		--dst_size;
  	    }
  	}
      if (src_len > 0)
  	{			/* Target buffer was too small. */
  	*used_buffer_size = dst - (char*)buffer + 1;
  	return XDS_ERR_OVERFLOW;
  	}
  
      /* Write the closing tag. */
  
      memmove(dst, TAG_CLOSE, TAG_CLOSE_LEN);
      dst      += TAG_CLOSE_LEN;
      dst_size -= TAG_CLOSE_LEN;
  
      /* Done. */
  
      *used_buffer_size = dst - (char*)buffer;
      return XDS_OK;
      }

From ossp-cvs-owner@ossp.org  Wed Aug  8 13:49:08 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f78Bn8480231; Wed, 8 Aug 2001 13:49:08 +0200 (CEST)
Date: Wed, 8 Aug 2001 13:49:08 +0200 (CEST)
Message-Id: <200108081149.f78Bn8480231@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds configure.ac
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Aug-2001 13:49:08
  Branch: HEAD                             Handle: 2001080812490700

  Modified files:
    ossp-pkg/srpc/libxds    configure.ac

  Log:
    Don't compile with -ansi or gcc won't find the 64-bit data types on
    some platforms.

  Summary:
    Revision    Changes     Path
    1.15        +2  -2      ossp-pkg/srpc/libxds/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/configure.ac
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 configure.ac
  --- ossp-pkg/srpc/libxds/configure.ac	2001/08/07 11:16:19	1.14
  +++ ossp-pkg/srpc/libxds/configure.ac	2001/08/08 11:49:07	1.15
  @@ -2,7 +2,7 @@
   
   AC_INIT(libxds)
   AC_PREREQ(2.52)
  -AC_REVISION($Revision: 1.14 $)
  +AC_REVISION($Revision: 1.15 $)
   
   dnl Get rid of the lousy -g and -O defaults in CFLAGS.
   dnl
  @@ -18,7 +18,7 @@
   dnl Set special flags for gcc.
   dnl
   if test "$GCC" = yes; then
  -    CFLAGS="$CFLAGS -Wall -ansi -pedantic -Wshadow -Wpointer-arith -Wcast-align -Winline -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Wno-long-long"
  +    CFLAGS="$CFLAGS -Wall -pedantic -Wshadow -Wpointer-arith -Wcast-align -Winline -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Wno-long-long"
   fi
   
   dnl Check for exact data types.

From ossp-cvs-owner@ossp.org  Wed Aug  8 13:50:18 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f78BoHm80396; Wed, 8 Aug 2001 13:50:17 +0200 (CEST)
Date: Wed, 8 Aug 2001 13:50:17 +0200 (CEST)
Message-Id: <200108081150.f78BoHm80396@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds register.c unregister.c vdecode.c ven...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Aug-2001 13:50:17
  Branch: HEAD                             Handle: 2001080812501600

  Modified files:
    ossp-pkg/srpc/libxds    register.c unregister.c vdecode.c vencode.c
                            xml-decode-int32.c xml-decode-int64.c
                            xml-decode-uint32.c xml-decode-uint64.c

  Log:
    Fixed warnings that complained about feeding a "char" into the isxxx()
    routines, which expect an "int".

  Summary:
    Revision    Changes     Path
    1.9         +1  -1      ossp-pkg/srpc/libxds/register.c
    1.7         +1  -1      ossp-pkg/srpc/libxds/unregister.c
    1.6         +1  -1      ossp-pkg/srpc/libxds/vdecode.c
    1.14        +1  -1      ossp-pkg/srpc/libxds/vencode.c
    1.5         +1  -1      ossp-pkg/srpc/libxds/xml-decode-int32.c
    1.6         +1  -1      ossp-pkg/srpc/libxds/xml-decode-int64.c
    1.5         +1  -1      ossp-pkg/srpc/libxds/xml-decode-uint32.c
    1.6         +1  -1      ossp-pkg/srpc/libxds/xml-decode-uint64.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/register.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 register.c
  --- ossp-pkg/srpc/libxds/register.c	2001/08/02 10:51:57	1.8
  +++ ossp-pkg/srpc/libxds/register.c	2001/08/08 11:50:16	1.9
  @@ -40,7 +40,7 @@
       xds_check_parameter(engine != NULL);
       for(pos = 0; name[pos] != '\0'; ++pos)
   	{
  -	if (!isalnum(name[pos]) && name[pos] != '-' && name[pos] != '_')
  +	if (!isalnum((int)name[pos]) && name[pos] != '-' && name[pos] != '_')
   	    return XDS_ERR_INVALID_ARG;
   	}
   
  Index: ossp-pkg/srpc/libxds/unregister.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 unregister.c
  --- ossp-pkg/srpc/libxds/unregister.c	2001/08/02 10:51:57	1.6
  +++ ossp-pkg/srpc/libxds/unregister.c	2001/08/08 11:50:16	1.7
  @@ -40,7 +40,7 @@
       xds_check_parameter(name != NULL);
       for(pos = 0; name[pos] != '\0'; ++pos)
   	{
  -	if (!isalnum(name[pos]) && name[pos] != '-' && name[pos] != '_')
  +	if (!isalnum((int)name[pos]) && name[pos] != '-' && name[pos] != '_')
   	    return XDS_ERR_INVALID_ARG;
   	}
   
  Index: ossp-pkg/srpc/libxds/vdecode.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 vdecode.c
  --- ossp-pkg/srpc/libxds/vdecode.c	2001/08/01 15:25:47	1.5
  +++ ossp-pkg/srpc/libxds/vdecode.c	2001/08/08 11:50:16	1.6
  @@ -59,7 +59,7 @@
       buffer_len_backup = xds->buffer_len;
       for(name = p; *p != '\0'; name = p)
   	{
  -	while(isalnum(*p) || *p == '-' || *p == '_')
  +	while(isalnum((int)*p) || *p == '-' || *p == '_')
   	    ++p;
   	if (*p)
   	    *p++ = '\0';
  Index: ossp-pkg/srpc/libxds/vencode.c
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 vencode.c
  --- ossp-pkg/srpc/libxds/vencode.c	2001/08/01 15:25:47	1.13
  +++ ossp-pkg/srpc/libxds/vencode.c	2001/08/08 11:50:16	1.14
  @@ -71,7 +71,7 @@
       buffer_len_backup = xds->buffer_len;
       for(name = p; *p != '\0'; name = p)
   	{
  -	while(isalnum(*p) || *p == '-' || *p == '_')
  +	while(isalnum((int)*p) || *p == '-' || *p == '_')
   	    ++p;
   	if (*p)
   	    *p++ = '\0';
  Index: ossp-pkg/srpc/libxds/xml-decode-int32.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xml-decode-int32.c
  --- ossp-pkg/srpc/libxds/xml-decode-int32.c	2001/08/02 08:10:13	1.4
  +++ ossp-pkg/srpc/libxds/xml-decode-int32.c	2001/08/08 11:50:16	1.5
  @@ -56,7 +56,7 @@
   	}
       else
   	negative = XDS_FALSE;
  -    while(isdigit(*p))
  +    while(isdigit((int)*p))
   	{
   	if (p >= (char*)buffer + buffer_size)
   	    return XDS_ERR_UNDERFLOW;
  Index: ossp-pkg/srpc/libxds/xml-decode-int64.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 xml-decode-int64.c
  --- ossp-pkg/srpc/libxds/xml-decode-int64.c	2001/08/02 08:10:13	1.5
  +++ ossp-pkg/srpc/libxds/xml-decode-int64.c	2001/08/08 11:50:16	1.6
  @@ -56,7 +56,7 @@
   	}
       else
   	negative = XDS_FALSE;
  -    while(isdigit(*p))
  +    while(isdigit((int)*p))
   	{
   	if (p >= (char*)buffer + buffer_size)
   	    return XDS_ERR_UNDERFLOW;
  Index: ossp-pkg/srpc/libxds/xml-decode-uint32.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xml-decode-uint32.c
  --- ossp-pkg/srpc/libxds/xml-decode-uint32.c	2001/08/02 08:10:13	1.4
  +++ ossp-pkg/srpc/libxds/xml-decode-uint32.c	2001/08/08 11:50:16	1.5
  @@ -48,7 +48,7 @@
       value = va_arg(*args, xds_uint32_t*);
       *value = 0;
       p = (char*)buffer + 8;
  -    while(isdigit(*p))
  +    while(isdigit((int)*p))
   	{
   	if (p >= (char*)buffer + buffer_size)
   	    return XDS_ERR_UNDERFLOW;
  Index: ossp-pkg/srpc/libxds/xml-decode-uint64.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 xml-decode-uint64.c
  --- ossp-pkg/srpc/libxds/xml-decode-uint64.c	2001/08/02 08:10:13	1.5
  +++ ossp-pkg/srpc/libxds/xml-decode-uint64.c	2001/08/08 11:50:16	1.6
  @@ -48,7 +48,7 @@
       value = va_arg(*args, xds_uint64_t*);
       *value = 0;
       p = (char*)buffer + 8;
  -    while(isdigit(*p))
  +    while(isdigit((int)*p))
   	{
   	if (p >= (char*)buffer + buffer_size)
   	    return XDS_ERR_UNDERFLOW;

From ossp-cvs-owner@ossp.org  Wed Aug  8 15:12:30 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f78DCTP90259; Wed, 8 Aug 2001 15:12:29 +0200 (CEST)
Date: Wed, 8 Aug 2001 15:12:29 +0200 (CEST)
Message-Id: <200108081312.f78DCTP90259@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/docs libxds.tex
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Aug-2001 15:12:29
  Branch: HEAD                             Handle: 2001080814122800

  Modified files:
    ossp-pkg/srpc/libxds/docs libxds.tex

  Log:
    Added the missing chapter about extending the library.

  Summary:
    Revision    Changes     Path
    1.4         +197 -10    ossp-pkg/srpc/libxds/docs/libxds.tex
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/docs/libxds.tex
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 libxds.tex
  --- ossp-pkg/srpc/libxds/docs/libxds.tex	2001/08/07 14:41:06	1.3
  +++ ossp-pkg/srpc/libxds/docs/libxds.tex	2001/08/08 13:12:28	1.4
  @@ -1,6 +1,6 @@
   % -*- mode: LaTeX; fill-column: 75; -*-
   %
  -% $Id: libxds.tex,v 1.3 2001/08/07 14:41:06 simons Exp $
  +% $Id: libxds.tex,v 1.4 2001/08/08 13:12:28 simons Exp $
   %
   \documentclass[a4paper,10pt,pointlessnumbers,bibtotoc]{scrartcl}
   \usepackage[dvips,xdvi]{graphicx}
  @@ -548,6 +548,176 @@
   \section{Extending the XDS library}
   \label{meta engines}
   
  +Now that we know how primitive data types can be encoded and decoded, let's
  +write a ``meta engine'' that will handle complex data structures. For the
  +example, we'll use the structure ``mystruct'', which is defined as follows:
  +
  +\begin{quote}
  +\begin{verbatim}
  +struct mystruct
  +    {
  +    xds_int32_t   small;
  +    xds_int64_t   big;
  +    xds_uint32_t  positive;
  +    char          text[16];
  +    };
  +\end{verbatim}
  +\end{quote}
  +
  +In order to encode an instance of this structure, we first write an
  +encoding engine:
  +
  +\begin{quote}
  +\begin{verbatim}
  +static int encode_mystruct(xds_t* xds, void* engine_context,
  +                           void* buffer, size_t buffer_size,
  +                           size_t* used_buffer_size,
  +                           va_list* args)
  +    {
  +    struct mystruct* ms;
  +    ms = va_arg(*args, struct mystruct*);
  +    return xds_encode(xds, "int32 int64 uint32 octetstream",
  +                      ms->small, ms->big, ms->positive,
  +                      ms->text, sizeof(ms->text));
  +    }
  +\end{verbatim}
  +\end{quote}
  +
  +This engine does nothing but take the address of the ``mystruct'' instance
  +from the stack and then use xds\_encode() to handle all elements of
  +``mystruct'' separately --- which is fine, because these data types are
  +supperted by libxds already. It is worth noting, though, that we refer to
  +the other engines by name, meaning that these engines must be registered in
  +``xds'' by that name!
  +
  +What is very nice, though, is the fact that this encoding engine does not
  +even need to know which formatting engines are used to encode the actual
  +values! If the user registeres the XDR engines under the apropriate names,
  +``mystruct'' will be encoded in XDR. If the user registeres the XML engines
  +under the apropriate names, ``mystruct'' will be encoded in XML. Because of
  +that property we call such an engine a ``meta engine''.
  +
  +Of coures you need not necessarily implement an engine like that: Rather
  +than going through xds\_encode(), it would be possible to execute the
  +apropriate encoding engines directly. This had the advantage of not
  +depending on those engines being registered at all, but it would make the
  +meta engine depend on the elementary engines unnecessarily.
  +
  +One more word about the engine syntax and semantics: As has been mentioned
  +earlier, any function that adheres to the shown above is potentially a
  +formatting engine. These parameters have the following meaning:
  +
  +\begin{itemize}
  +
  +\item xds --- This is the XDS context that was originally provided to the
  +xds\_encode() call, which in turn executed the engine. It may be used, for
  +example, for executing xds\_en\-code() again like we did in the example
  +engine shown before.
  +
  +\item engine\_context --- The engine context can be used by the engine to
  +store any type of internal information. The value the engine will receive
  +must have been provided when the engine was registered by xds\_register().
  +Engines may obviously neglect this parameter if they don't need a context
  +of their own --- all engines included in this distribution do so.
  +
  +\item buffer --- This parameter points to the buffer in which the encoded
  +data should be written. In decoding mode, ``buffer'' points to the encoded
  +data, which should be decoded; the location where the results should be
  +stored at can be found on the stack then.
  +
  +\item buffer\_size --- The number of bytes that are available in
  +``buffer''. In encoding mode, this means ``free space'', in decoding mode,
  +``buffer\_size'' determines how many bytes of encoded data are available in
  +``buffer'' for consumation.
  +
  +\item used\_buffer\_size --- This parameter points to a variable, which the
  +callback must set before returning in order to let the framework know how
  +many bytes it actually used in ``buffer''. A callback encoding, say, an
  +int32 number into a 8 byte text representation would set the
  +used\_buffer\_size to 8, for instance:
  +\begin{quote}
  +\begin{verbatim}
  +*used_buffer_size = 8;
  +\end{verbatim}
  +\end{quote}
  +In encoding mode, this variable determines how many bytes the engine has
  +written into ``buffer''; in decoding mode the variable determines how many
  +bytes the engines has read from ``buffer''.
  +
  +\item args --- This pointer points to an initialized varadic argument. Use
  +the standard C macro va\_arg() to fetch the actual data.
  +
  +\end{itemize}
  +
  +A callback may return any of the following return codes as defined in
  +\textsf{xds.h}:
  +
  +\begin{itemize}
  +\item XDS\_OK --- No error.
  +
  +\item XDS\_ERR\_NO\_MEM --- Failed to allocate required memory.
  +
  +\item XDS\_ERR\_OVERFLOW --- The buffer is too small to hold all encoded
  +data. The callback may set ``*used\_buffer\_size'' to the number of bytes
  +it needs in ``buffer'', thereby giving the framework a hint by how many
  +bytes it should enlarge the buffer before trying the engine again, but just
  +leaving ``*used\_buffer\_size'' alone will work fine, too, it may just be a
  +bit less efficient in some cases. Obviously this return code does not make
  +much sense in decoding mode.
  +
  +\item XDS\_ERR\_INVALID\_ARG --- Unexpected parameters.
  +
  +\item XDS\_ERR\_TYPE\_MISMATCH --- This return code should be returned in
  +decoding mode in case the decoding engine realizes that the data it is
  +decoding does not fit what it's expecting. Not all encoding formats will
  +allow to detect this at all. XDR, for example, does not.
  +
  +\item XDS\_ERR\_UNDERFLOW --- In decode mode, this error should be returned
  +when an engine needs, say, 4 byte of data in order to decode a value but
  +``buffer''/''buffer\_size'' provides less.
  +
  +\item XDS\_ERR\_UNKNOWN --- Any other reason to fail than those listed
  +before.
  +
  +\end{itemize}
  +
  +Let's take a look at the corresponding decoding engine now:
  +
  +\begin{quote}
  +\begin{verbatim}
  +static int decode_mystruct(xds_t* xds, void* engine_context,
  +                           void* buffer, size_t buffer_size,
  +                           size_t* used_buffer_size,
  +                           va_list* args)
  +    {
  +    struct mystruct* ms;
  +    size_t i;
  +    char*  tmp;
  +    int rc;
  +    ms = va_arg(*args, struct mystruct*);
  +    rc = xds_decode(xds, "int32 int64 uint32 octetstream",
  +                    &(ms->small), &(ms->big), &(ms->positive),
  +                    &tmp, &i);
  +    if (rc == XDS_OK)
  +        {
  +        assert(i == sizeof(ms->text));
  +        memmove(ms->text, tmp, i);
  +        free(tmp);
  +        }
  +    return rc;
  +    }
  +\end{verbatim}
  +\end{quote}
  +
  +The engine simply calls xds\_decode() to handle the separate data types.
  +The only complication is that the octet stream decoding engines return a
  +pointer to \textsf{malloc()}ed buffer --- what is not what we need. Thus we
  +have to manually copy the contents of that buffer into the right place in
  +the structure and free the (now unused) buffer again.
  +
  +A complete example program encoding and decoding ``mystruct'' can be found
  +at \textsf{docs/\-extended.c} in the distribution.
  +
   \section{The XDS Framework}
   \label{xds}
   
  @@ -602,12 +772,12 @@
   engine name component.
   
   xds\_register() may return the following return codes: \textsf{XDS\_OK}
  -	(everything went fine; the engine is registered now),
  +        (everything went fine; the engine is registered now),
   \textsf{XDS\_ERR\_INVALID\_ARG} (either ``xds'', ``name'', or ``engine''
  -	are \textsf{NULL} or ``name'' contains illegal characters for an engine
  -	name), or
  +        are \textsf{NULL} or ``name'' contains illegal characters for an engine
  +        name), or
   \textsf{XDS\_ERR\_NO\_MEM} (failed to allocate internally required
  -	buffers).
  +        buffers).
   
   \subsection{int xds\_unregister(xds\_t*~\underline{xds}, const~char*~\underline{name});}
   
  @@ -775,7 +945,7 @@
   \label{xdr}
   
   \begin{tabular}{|c|c|c|c|} \hline
  -\bf Function Name     & \bf Expected ``args'' Data Type & \bf Input Size & \bf Output Size \\ \hline
  +\bf Function Name     & \bf Expected ``args'' Datatype & \bf Input & \bf Output \\ \hline
   xdr\_encode\_uint32()      & xds\_uint32\_t   & 4 byte   & 4 byte \\
   xdr\_decode\_uint32()      & xds\_uint32\_t*  & 4 byte   & 4 byte \\[1ex]
   xdr\_encode\_int32()       & xds\_int32\_t    & 4 byte   & 4 byte \\
  @@ -791,14 +961,22 @@
   xdr\_encode\_string()      & char*            & variable & variable \\
   xdr\_decode\_string()      & char**           & variable & variable \\ \hline
   \end{tabular}
  +\medskip
  +
  +Please note that the routines xdr\_decode\_octetstream() and
  +xdr\_decode\_string() return a pointer to a buffer holding the decoded
  +data. This buffer has been allocated with \textsf{malloc()} and must be
  +\textsf{free()}ed by the application when it is not required anymore. All
  +other callbacks write the decoded value into the location found on the
  +stack, but these behave differently because the length of the decoded data
  +is not known in advance and the application cannot provide a buffer that's
  +guaranteed to suffice.
   
   \section{The XML Engines}
   \label{xml}
   
  -\subsection{Encoding engines}
  -
   \begin{tabular}{|c|c|c|c|} \hline
  -\bf Function Name     & \bf Expected ``args'' Data Type & \bf Input Size & \bf Output Size \\ \hline
  +\bf Function Name     & \bf Expected ``args'' Datatype & \bf Input & \bf Output \\ \hline
   xml\_encode\_uint32()      & xds\_uint32\_t   & ?? byte  & ?? byte \\
   xml\_decode\_uint32()      & xds\_uint32\_t*  & ?? byte  & ?? byte \\[1ex]
   xml\_encode\_int32()       & xds\_int32\_t    & ?? byte  & ?? byte \\
  @@ -814,8 +992,17 @@
   xml\_encode\_string()      & char*            & variable & variable \\
   xml\_decode\_string()      & char**           & variable & variable \\ \hline
   \end{tabular}
  +\medskip
  +
  +Please note that the routines xml\_decode\_octetstream() and
  +xml\_decode\_string() return a pointer to a buffer holding the decoded
  +data. This buffer has been allocated with \textsf{malloc()} and must be
  +\textsf{free()}ed by the application when it is not required anymore. All
  +other callbacks write the decoded value into the location found on the
  +stack, but these behave differently because the length of the decoded data
  +is not known in advance and the application cannot provide a buffer that's
  +guaranteed to suffice.
   
  -\newpage
   \begin{thebibliography}{xxx}
   
   \bibitem{xdr} RFC 1832: ``XDR: External Data Representation Standard'',

From ossp-cvs-owner@ossp.org  Wed Aug  8 15:13:12 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f78DDBD90346; Wed, 8 Aug 2001 15:13:11 +0200 (CEST)
Date: Wed, 8 Aug 2001 15:13:11 +0200 (CEST)
Message-Id: <200108081313.f78DDBD90346@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/docs extended.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Aug-2001 15:13:11
  Branch: HEAD                             Handle: 2001080814131100

  Added files:
    ossp-pkg/srpc/libxds/docs extended.c

  Log:
    Example program demonstrating how to write custom engines.

  Summary:
    Revision    Changes     Path
    1.1         +124 -0     ossp-pkg/srpc/libxds/docs/extended.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/docs/extended.c
  ============================================================
  $ cvs update -p -r1.1 extended.c
  #include <stdio.h>
  #include <string.h>
  #include <xds.h>
  
  struct mystruct
      {
      xds_int32_t   small;
      xds_int64_t   big;
      xds_uint32_t  positive;
      char          text[16];
      };
  
  static int encode_mystruct(xds_t* xds, void* engine_context,
  			   void* buffer, size_t buffer_size, size_t* used_buffer_size,
  			   va_list* args)
      {
      struct mystruct* ms;
      ms = va_arg(*args, struct mystruct*);
      return xds_encode(xds, "int32 int64 uint32 octetstream",
  		      ms->small, ms->big, ms->positive,
  		      ms->text, sizeof(ms->text));
      }
  
  static int decode_mystruct(xds_t* xds, void* engine_context,
  			   void* buffer, size_t buffer_size, size_t* used_buffer_size,
  			   va_list* args)
      {
      struct mystruct* ms;
      size_t i;
      char*  tmp;
      int rc;
      ms = va_arg(*args, struct mystruct*);
      rc = xds_decode(xds, "int32 int64 uint32 octetstream",
  		    &(ms->small), &(ms->big), &(ms->positive),
  		    &tmp, &i);
      if (rc == XDS_OK)
  	{
  	assert(i == sizeof(ms->text));
  	memmove(ms->text, tmp, i);
  	free(tmp);
  	}
      return rc;
      }
  
  static void error_exit(int rc, const char* msg, ...)
      {
      va_list args;
      va_start(args, msg);
      vfprintf(stderr, msg, args);
      va_end(args);
      exit(rc);
      }
  
  int main()
      {
      xds_t* xds;
      char*  buffer;
      size_t buffer_size;
  
      struct mystruct ms, new_ms;
      ms.small    = -0x1234567;
      ms.big      = -0x1234567890abcdeLL;
      ms.positive = 42;
      strcpy(ms.text, "Hallo World");
  
      /* Encode our copy of mystruct using our encoding callback. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL)
  	error_exit(1, "Failed to initialize XDS context.\n");
  
      if (xds_register(xds, "mystruct", &encode_mystruct, NULL) != XDS_OK ||
  	xds_register(xds, "int32", &xdr_encode_int32, NULL) != XDS_OK ||
  	xds_register(xds, "int64", &xdr_encode_int64, NULL) != XDS_OK ||
  	xds_register(xds, "octetstream", &xdr_encode_octetstream, NULL) != XDS_OK ||
  	xds_register(xds, "uint32", &xdr_encode_uint32, NULL) != XDS_OK)
  	{
  	error_exit(1, "Failed to register my encoding engines.\n");
  	}
  
      if (xds_encode(xds, "mystruct", &ms) != XDS_OK)
  	error_exit(1, "xds_encode() failed!\n");
  
      if (xds_getbuffer(xds, XDS_GIFT, (void**)&buffer, &buffer_size) != XDS_OK)
  	error_exit(1, "xds_getbuffer() failed!\n");
  
      xds_destroy(xds);
  
      /* Now create a decoding context and decode the whole thing again. */
  
      xds = xds_init(XDS_DECODE);
      if (xds == NULL)
  	error_exit(1, "Failed to initialize XDS context.\n");
  
      if (xds_register(xds, "mystruct", &decode_mystruct, NULL) != XDS_OK ||
  	xds_register(xds, "int32", &xdr_decode_int32, NULL) != XDS_OK ||
  	xds_register(xds, "int64", &xdr_decode_int64, NULL) != XDS_OK ||
  	xds_register(xds, "uint32", &xdr_decode_uint32, NULL) != XDS_OK ||
  	xds_register(xds, "octetstream", &xdr_decode_octetstream, NULL) != XDS_OK)
  	{
  	error_exit(1, "Failed to register my decoding engines.\n");
  	}
  
      if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK)
  	error_exit(1, "xds_setbuffer() failed!\n");
  
      if (xds_decode(xds, "mystruct", &new_ms) != XDS_OK)
  	error_exit(1, "xds_decode() failed!\n");
  
      xds_destroy(xds);
  
      /* Both structures must be identical. */
  
      if (ms.small != new_ms.small || ms.big != new_ms.big ||
  	ms.positive != new_ms.positive ||
  	memcmp(&ms.text, &new_ms.text, sizeof(ms.text)) != 0)
  	{
  	error_exit(1, "Decoded data does not match the original!\n");
  	}
  
      /* Everything went fine. */
  
      return 0;
      }

From ossp-cvs-owner@ossp.org  Wed Aug  8 15:14:51 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f78DEoB90500; Wed, 8 Aug 2001 15:14:50 +0200 (CEST)
Date: Wed, 8 Aug 2001 15:14:50 +0200 (CEST)
Message-Id: <200108081314.f78DEoB90500@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Aug-2001 15:14:50
  Branch: HEAD                             Handle: 2001080814145000

  Modified files:
    ossp-pkg/srpc           TODO

  Log:
    Bumped milestone (1) to 100% fulfilled: As far as I can see, the EVAL
    file is complete.

  Summary:
    Revision    Changes     Path
    1.13        +1  -1      ossp-pkg/srpc/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/TODO
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 TODO
  --- ossp-pkg/srpc/TODO	2001/07/31 16:03:01	1.12
  +++ ossp-pkg/srpc/TODO	2001/08/08 13:14:50	1.13
  @@ -3,7 +3,7 @@
   
   o M1 (peti) [11-Jun-2001]
     - evaluation checklist for XDS and AMP
  -    done: 50% [-> EVAL]
  +    done: 100% [-> EVAL]
   
   o M2 (peti+rse) [25-Jun-2001]
     - design/architecture paper (authentication+encryption framework)

From ossp-cvs-owner@ossp.org  Wed Aug  8 15:17:12 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f78DHAi91192; Wed, 8 Aug 2001 15:17:10 +0200 (CEST)
Date: Wed, 8 Aug 2001 15:17:10 +0200 (CEST)
Message-Id: <200108081317.f78DHAi91192@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Aug-2001 15:17:10
  Branch: HEAD                             Handle: 2001080814171000

  Modified files:
    ossp-pkg/srpc           TODO

  Log:
    Documented state of affairs for the implementation of the XDR and XML
    engines.

  Summary:
    Revision    Changes     Path
    1.14        +5  -25     ossp-pkg/srpc/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/TODO
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 TODO
  --- ossp-pkg/srpc/TODO	2001/08/08 13:14:50	1.13
  +++ ossp-pkg/srpc/TODO	2001/08/08 13:17:10	1.14
  @@ -17,31 +17,11 @@
   o M4 (peti) [4 weeks until 30-Jul-2001]
     - implementation of libxds library framework
       done: 100% [-> libxds/*.c]
  -  - implementation of libxds SunRPC/XDR and XML-RPC backends
  -    for basic data types:
  -    o integer:
  -      - short
  -      - unsigned short
  -      - int
  -      - unsigned int
  -      - long
  -      - unsigned long
  -    o floating point:
  -      - float
  -      - double
  -    o pointer:
  -      - void *
  -      - void(*)()
  -    o string
  -      - char * (end is NUL)
  -      - unsigned char * (end is NUL)
  -    o octet-stream
  -      - void * (end is after given length)
  -    Function prototype is xds_engine_t.
  -    Function name scheme is:
  -      {xdr,xml}_{en,de}code_{[u]short,[u]int,[u]long,
  -                             float,double,voidptr,funcptr,
  -                             [u]string,octets}
  +  - implementation XDR engines for basic data types.
  +    done: 99% [-> everything is implemented except "double" support]
  +  - implementation XML engines for basic data types.
  +    done: 99% [-> everything is implemented except "double" support]
  +
     - regression tests for libxds (make check)
   
    - 16bit Integers mean trouble when passing them through "...":

From ossp-cvs-owner@ossp.org  Wed Aug  8 15:17:51 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f78DHoA91271; Wed, 8 Aug 2001 15:17:50 +0200 (CEST)
Date: Wed, 8 Aug 2001 15:17:50 +0200 (CEST)
Message-Id: <200108081317.f78DHoA91271@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Aug-2001 15:17:50
  Branch: HEAD                             Handle: 2001080814175000

  Modified files:
    ossp-pkg/srpc           TODO

  Log:
    Regression tests are complete.

  Summary:
    Revision    Changes     Path
    1.15        +1  -0      ossp-pkg/srpc/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/TODO
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 TODO
  --- ossp-pkg/srpc/TODO	2001/08/08 13:17:10	1.14
  +++ ossp-pkg/srpc/TODO	2001/08/08 13:17:50	1.15
  @@ -23,6 +23,7 @@
       done: 99% [-> everything is implemented except "double" support]
   
     - regression tests for libxds (make check)
  +    done: 100% [-> regression-tests/*.c]
   
    - 16bit Integers mean trouble when passing them through "...":
   

From ossp-cvs-owner@ossp.org  Wed Aug  8 15:18:48 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f78DIl391369; Wed, 8 Aug 2001 15:18:47 +0200 (CEST)
Date: Wed, 8 Aug 2001 15:18:47 +0200 (CEST)
Message-Id: <200108081318.f78DIl391369@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Aug-2001 15:18:46
  Branch: HEAD                             Handle: 2001080814184600

  Modified files:
    ossp-pkg/srpc           TODO

  Log:
    Cosmetic change: Corrected indention.

  Summary:
    Revision    Changes     Path
    1.16        +17 -15     ossp-pkg/srpc/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/TODO
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 TODO
  --- ossp-pkg/srpc/TODO	2001/08/08 13:17:50	1.15
  +++ ossp-pkg/srpc/TODO	2001/08/08 13:18:46	1.16
  @@ -2,28 +2,30 @@
   ========================
   
   o M1 (peti) [11-Jun-2001]
  -  - evaluation checklist for XDS and AMP
  -    done: 100% [-> EVAL]
  + - evaluation checklist for XDS and AMP
  +   done: 100% [-> EVAL]
   
   o M2 (peti+rse) [25-Jun-2001]
  -  - design/architecture paper (authentication+encryption framework)
  -    (< 10KB Text + 1x Figure)
  -    done: 30% [-> architecture.fig]
  + - design/architecture paper (authentication+encryption framework)
  +   (< 10KB Text + 1x Figure)
  +   done: 30% [-> architecture.fig]
   
   o M3 (peti+rse) [2-Jul-2001]
  -  - design libxds API
  -    done: 100% [-> libxds/xds.h + libxds/xds.pod]
  + - design libxds API
  +   done: 100% [-> libxds/xds.h + libxds/xds.pod]
   
   o M4 (peti) [4 weeks until 30-Jul-2001]
  -  - implementation of libxds library framework
  -    done: 100% [-> libxds/*.c]
  -  - implementation XDR engines for basic data types.
  -    done: 99% [-> everything is implemented except "double" support]
  -  - implementation XML engines for basic data types.
  -    done: 99% [-> everything is implemented except "double" support]
  + - implementation of libxds library framework
  +   done: 100% [-> libxds/*.c]
   
  -  - regression tests for libxds (make check)
  -    done: 100% [-> regression-tests/*.c]
  + - implementation XDR engines for basic data types.
  +   done: 99% [-> everything is implemented except "double" support]
  +
  + - implementation XML engines for basic data types.
  +   done: 99% [-> everything is implemented except "double" support]
  +
  + - regression tests for libxds (make check)
  +   done: 100% [-> regression-tests/*.c]
   
    - 16bit Integers mean trouble when passing them through "...":
   

From ossp-cvs-owner@ossp.org  Wed Aug  8 15:19:08 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f78DJ7n91425; Wed, 8 Aug 2001 15:19:07 +0200 (CEST)
Date: Wed, 8 Aug 2001 15:19:07 +0200 (CEST)
Message-Id: <200108081319.f78DJ7n91425@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Aug-2001 15:19:07
  Branch: HEAD                             Handle: 2001080814190700

  Modified files:
    ossp-pkg/srpc           TODO

  Log:
    The problem with 16-bit integers is solved.

  Summary:
    Revision    Changes     Path
    1.17        +0  -13     ossp-pkg/srpc/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/TODO
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 TODO
  --- ossp-pkg/srpc/TODO	2001/08/08 13:18:46	1.16
  +++ ossp-pkg/srpc/TODO	2001/08/08 13:19:07	1.17
  @@ -27,19 +27,6 @@
    - regression tests for libxds (make check)
      done: 100% [-> regression-tests/*.c]
   
  - - 16bit Integers mean trouble when passing them through "...":
  -
  -     | xdr-encode-uint16.c:46: `xds_uint16_t' is promoted to `int' when passed through `...'
  -     | xdr-encode-uint16.c:46: (so you should pass `int' not `xds_uint16_t' to `va_arg')
  -
  -   Maybe we should skip int16 support at all? Currently I work around
  -   this problem by implicitely assuming that the short is promoted to
  -   an int.
  -
  -   To make matters even worse: The RFC doesn't even define how XDR
  -   deals with 16-bit integers! The mere existance of such a datatype
  -   is not positively confirmed.
  -
     - XML: <int32>1234</int32>
            uint32, int64, uint64,
   

From ossp-cvs-owner@ossp.org  Wed Aug  8 15:19:46 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f78DJjR91503; Wed, 8 Aug 2001 15:19:45 +0200 (CEST)
Date: Wed, 8 Aug 2001 15:19:45 +0200 (CEST)
Message-Id: <200108081319.f78DJjR91503@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Aug-2001 15:19:45
  Branch: HEAD                             Handle: 2001080814194500

  Modified files:
    ossp-pkg/srpc           TODO

  Log:
    Removed closed points concerning the XML engines.

  Summary:
    Revision    Changes     Path
    1.18        +0  -14     ossp-pkg/srpc/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/TODO
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 TODO
  --- ossp-pkg/srpc/TODO	2001/08/08 13:19:07	1.17
  +++ ossp-pkg/srpc/TODO	2001/08/08 13:19:45	1.18
  @@ -27,21 +27,7 @@
    - regression tests for libxds (make check)
      done: 100% [-> regression-tests/*.c]
   
  -  - XML: <int32>1234</int32>
  -         uint32, int64, uint64,
  -
  -       - xml_encode_begin():
  -	 <?xml version="1.0" encoding="UTF-8" standalone="no">
  -         <!DOCTYPE xds SYSTEM "http://www.ossp.org/pkg/xds/xds-xml.dtd">
  -         <xds>
  -
  -       - xml_encode_end():
  -         </xds>
    - UFT-8 RFC: rfc2279.txt
  -
  -    Escape: <   <--> &lt;
  -            &   <--> &amp;
  -            ]]> <--> ]]&gt;
   
    - strcpy() copies one byte more than the length of the text itself
      because the trailing \0 is written to. Currently, this behavior is

From ossp-cvs-owner@ossp.org  Wed Aug  8 15:20:39 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f78DKcH91605; Wed, 8 Aug 2001 15:20:38 +0200 (CEST)
Date: Wed, 8 Aug 2001 15:20:38 +0200 (CEST)
Message-Id: <200108081320.f78DKcH91605@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Aug-2001 15:20:38
  Branch: HEAD                             Handle: 2001080814203800

  Modified files:
    ossp-pkg/srpc           TODO

  Log:
    Removed the "avoid strcpy()" item: This has been fixed.

  Summary:
    Revision    Changes     Path
    1.19        +0  -5      ossp-pkg/srpc/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/TODO
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 TODO
  --- ossp-pkg/srpc/TODO	2001/08/08 13:19:45	1.18
  +++ ossp-pkg/srpc/TODO	2001/08/08 13:20:38	1.19
  @@ -29,11 +29,6 @@
   
    - UFT-8 RFC: rfc2279.txt
   
  - - strcpy() copies one byte more than the length of the text itself
  -   because the trailing \0 is written to. Currently, this behavior is
  -   not taken into account when calculating the correct buffer size in
  -   the xml-encode-*-.c modules. This has to be fixed!
  -
     - libm may be used. We don't depend on sprintf() but convert out
       numbers ourselves for portability.
   

From ossp-cvs-owner@ossp.org  Wed Aug  8 15:21:32 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f78DLVf91701; Wed, 8 Aug 2001 15:21:31 +0200 (CEST)
Date: Wed, 8 Aug 2001 15:21:31 +0200 (CEST)
Message-Id: <200108081321.f78DLVf91701@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Aug-2001 15:21:31
  Branch: HEAD                             Handle: 2001080814213100

  Modified files:
    ossp-pkg/srpc           TODO

  Log:
    Removed the "don't use snprintf()" item: This has been implemented.

  Summary:
    Revision    Changes     Path
    1.20        +10 -14     ossp-pkg/srpc/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/TODO
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 TODO
  --- ossp-pkg/srpc/TODO	2001/08/08 13:20:38	1.19
  +++ ossp-pkg/srpc/TODO	2001/08/08 13:21:31	1.20
  @@ -29,12 +29,9 @@
   
    - UFT-8 RFC: rfc2279.txt
   
  -  - libm may be used. We don't depend on sprintf() but convert out
  -    numbers ourselves for portability.
  + - IEEE values ranges for floating point numbers will be used for
  +   accurarcy in XML presentation.
   
  -  - IEEE values ranges for floating point numbers will be used for
  -    accurarcy in XML presentation.
  -
    - autoconf should find the types for int32 etc. even if they're not
      defined in sys/types.h.
   
  @@ -42,18 +39,17 @@
      compiler supports.
   
   o M5 (peti+rse) [1 week until 06-Aug-2001]
  -  - [peti] documentation for libxds (xds.pod)
  -  - [rse]  OSSP adjustments for libxds
  + - [peti] documentation for libxds (xds.pod)
  + - [rse]  OSSP adjustments for libxds
   
   o M6 (peti+rse) [1 week until 13-Aug-2001]
  -  - design API for libamp
  + - design API for libamp
   
   o M7 (peti) [4 weeks until 10-Sep-2001]
  -  - implementation of libamp library framework
  -  - implementation of libamp backends SHM, TCP and UDP
  -  - regression tests for libamp
  + - implementation of libamp library framework
  + - implementation of libamp backends SHM, TCP and UDP
  + - regression tests for libamp
   
   o M8 (peti+rse) [1 week until 17-Sep-2001]
  -  - [peti] documentation for libamp
  -  - [rse]  OSSP adjustments for libamp
  -
  + - [peti] documentation for libamp
  + - [rse]  OSSP adjustments for libamp

From ossp-cvs-owner@ossp.org  Wed Aug  8 15:23:06 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f78DN6q91841; Wed, 8 Aug 2001 15:23:06 +0200 (CEST)
Date: Wed, 8 Aug 2001 15:23:06 +0200 (CEST)
Message-Id: <200108081323.f78DN6q91841@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Aug-2001 15:23:06
  Branch: HEAD                             Handle: 2001080814230500

  Modified files:
    ossp-pkg/srpc           TODO

  Log:
    Documented state of affairs for UTF-8 encoding in XML.

  Summary:
    Revision    Changes     Path
    1.21        +1  -0      ossp-pkg/srpc/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/TODO
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 TODO
  --- ossp-pkg/srpc/TODO	2001/08/08 13:21:31	1.20
  +++ ossp-pkg/srpc/TODO	2001/08/08 13:23:05	1.21
  @@ -28,6 +28,7 @@
      done: 100% [-> regression-tests/*.c]
   
    - UFT-8 RFC: rfc2279.txt
  +   done: 0%
   
    - IEEE values ranges for floating point numbers will be used for
      accurarcy in XML presentation.

From ossp-cvs-owner@ossp.org  Wed Aug  8 16:40:32 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f78EeVl02016; Wed, 8 Aug 2001 16:40:31 +0200 (CEST)
Date: Wed, 8 Aug 2001 16:40:31 +0200 (CEST)
Message-Id: <200108081440.f78EeVl02016@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/regression-tests xml-string.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Aug-2001 16:40:31
  Branch: HEAD                             Handle: 2001080815403000

  Modified files:
    ossp-pkg/srpc/libxds/regression-tests
                            xml-string.c

  Log:
    Added some weird characters in the xml-string example in order to test
    UTF-8 encoding.

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/srpc/libxds/regression-tests/xml-string.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/regression-tests/xml-string.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xml-string.c
  --- ossp-pkg/srpc/libxds/regression-tests/xml-string.c	2001/08/08 11:21:28	1.1
  +++ ossp-pkg/srpc/libxds/regression-tests/xml-string.c	2001/08/08 14:40:30	1.2
  @@ -37,7 +37,7 @@
       char*  buffer;
       size_t buffer_size;
   
  -    char   msg[] = "<Hallo> ]]>&<&>World";
  +    char   msg[] = "<Hallo> ]]>&<&>World: äöüß";
       char*  new_msg;
   
       /* Encode the string, then erase the buffer and decode the string

From ossp-cvs-owner@ossp.org  Wed Aug  8 17:10:04 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f78FA2q06543; Wed, 8 Aug 2001 17:10:02 +0200 (CEST)
Date: Wed, 8 Aug 2001 17:10:02 +0200 (CEST)
Message-Id: <200108081510.f78FA2q06543@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xml-decode-string.c xml-encode-string...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Aug-2001 17:10:02
  Branch: HEAD                             Handle: 2001080816100200

  Modified files:
    ossp-pkg/srpc/libxds    xml-decode-string.c xml-encode-string.c

  Log:
    - Implemented UTF-8 encoding of strings.
    - Fixed a buffer-overrun problem in xml_encode_string().

  Summary:
    Revision    Changes     Path
    1.2         +74 -0      ossp-pkg/srpc/libxds/xml-decode-string.c
    1.2         +120 -38    ossp-pkg/srpc/libxds/xml-encode-string.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xml-decode-string.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xml-decode-string.c
  --- ossp-pkg/srpc/libxds/xml-decode-string.c	2001/08/08 11:21:27	1.1
  +++ ossp-pkg/srpc/libxds/xml-decode-string.c	2001/08/08 15:10:02	1.2
  @@ -25,9 +25,71 @@
      SUCH DAMAGE.
   */
   
  +#include <stdio.h>
   #include <string.h>
   #include "xds.h"
   
  +#define	INVALID	0x80000000
  +
  +#define	get(c)	c = *strptr++; \
  +	if (chars) (*chars)++; \
  +	if ((c) == 0) return (unsigned int)EOF
  +
  +static unsigned int sgetu8(unsigned char *strptr, int *chars)
  +    {
  +    unsigned int c;
  +    int i, iterations;
  +    unsigned char ch;
  +
  +    if (chars)
  +	*chars = 0;
  +
  +    if (strptr == NULL)
  +	return (unsigned int)EOF;
  +
  +    get(c);
  +
  +    if ((c & 0xFE) == 0xFC)
  +	{
  +	c &= 0x01;
  +	iterations = 5;
  +	}
  +    else if ((c & 0xFC) == 0xF8)
  +	{
  +	c &= 0x03;
  +	iterations = 4;
  +	}
  +    else if ((c & 0xF8) == 0xF0)
  +	{
  +	c &= 0x07;
  +	iterations = 3;
  +	}
  +    else if ((c & 0xF0) == 0xE0)
  +	{
  +	c &= 0x0F;
  +	iterations = 2;
  +	}
  +    else if ((c & 0xE0) == 0xC0)
  +	{
  +	c &= 0x1F;
  +	iterations = 1;
  +	}
  +    else if ((c & 0x80) == 0x80)
  +	return INVALID;
  +    else return c;
  +
  +    for (i = 0; i < iterations; i++)
  +	{
  +	get(ch);
  +	if ((ch & 0xC0) != 0x80)
  +	    return INVALID;
  +	c <<= 6;
  +	c |= ch & 0x3F;
  +	}
  +
  +    return c;
  +    }
  +
   static const char TAG_OPEN[] = "<string>";
   static const char TAG_CLOSE[] = "</string>";
   static const size_t TAG_OPEN_LEN = sizeof(TAG_OPEN)-1;
  @@ -41,6 +103,8 @@
       char*   src;
       size_t  src_len;
       char*   dst;
  +    int     utf8_len;
  +    unsigned int rc;
   
       /* Setup the engine. We need at least space for our tags; how long
          the actual content is going to be will be seen soon. */
  @@ -99,6 +163,16 @@
   		free(dst);
   		return XDS_ERR_TYPE_MISMATCH;
   		}
  +	    }
  +	else if (*((xds_uint8_t*)src) >= 0x80)
  +	    {
  +	    rc = sgetu8((xds_uint8_t*)src, &utf8_len);
  +	    if (rc == (unsigned int)EOF)
  +		return XDS_ERR_UNDERFLOW;
  +	    else if (rc == INVALID || rc > 255)
  +		return XDS_ERR_TYPE_MISMATCH;
  +	    *dst++ = (xds_uint8_t)rc;
  +	    src += utf8_len; src_len -= utf8_len;
   	    }
   	else
   	    {
  Index: ossp-pkg/srpc/libxds/xml-encode-string.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xml-encode-string.c
  --- ossp-pkg/srpc/libxds/xml-encode-string.c	2001/08/08 11:21:27	1.1
  +++ ossp-pkg/srpc/libxds/xml-encode-string.c	2001/08/08 15:10:02	1.2
  @@ -25,9 +25,71 @@
      SUCH DAMAGE.
   */
   
  +#include <stdio.h>
   #include <string.h>
   #include "xds.h"
   
  +#define	bits(c)	(0x80 | ((c) & 0x3F))
  +#define	put(c)	*strptr++ = (c);
  +#define	putbits(c)	put(bits(c))
  +#define	finish()	*strptr = '\0'
  +
  +static char* sputu8(xds_uint32_t c, char* strptr)
  +    {
  +    if (strptr == NULL)
  +	return NULL;
  +
  +    if (c < 0x80)
  +	{
  +	put(c);
  +	finish();
  +	}
  +    else if (c < 0x800)
  +	{
  +	put(0xC0 | (c >>  6));
  +	putbits(c);
  +	finish();
  +	}
  +    else if (c < 0x10000)
  +	{
  +	put(0xE0 | (c >> 12));
  +	putbits(c >>  6);
  +	putbits(c);
  +	finish();
  +	}
  +    else if (c < 0x200000)
  +	{
  +	put(0xF0 | (c >> 18));
  +	putbits(c >> 12);
  +	putbits(c >>  6);
  +	putbits(c);
  +	finish();
  +	}
  +    else if (c < 0x400000)
  +	{
  +	put(0xF8 | (c >> 24));
  +	putbits(c >> 18);
  +	putbits(c >> 12);
  +	putbits(c >>  6);
  +	putbits(c);
  +	finish();
  +	}
  +    else if (c < 0x80000000)
  +	{
  +	put(0xFC | (c >> 30));
  +	putbits(c >> 24);
  +	putbits(c >> 18);
  +	putbits(c >> 12);
  +	putbits(c >>  6);
  +	putbits(c);
  +	finish();
  +	}
  +    else
  +	finish();		/* Not a valid Unicode "character" */
  +
  +    return strptr;
  +    }
  +
   static const char TAG_OPEN[] = "<string>";
   static const char TAG_CLOSE[] = "</string>";
   static const size_t TAG_OPEN_LEN = sizeof(TAG_OPEN)-1;
  @@ -41,6 +103,7 @@
       size_t src_len;
       char*  dst;
       size_t dst_size;
  +    char*  tmp;
   
       /* Setup the engine. We need at least space for our tags; how long
          the actual content is going to be will be seen soon. */
  @@ -68,48 +131,67 @@
   
       while(src_len > 0 && dst_size > 0)
   	{
  -	switch(*src)
  -	    {
  -	    case '<':		/* Turn into "&lt;". */
  -		if (dst_size >= 4)
  -		    {
  -		    *dst++ = '&'; --dst_size;
  -		    *dst++ = 'l'; --dst_size;
  -		    *dst++ = 't'; --dst_size;
  -		    *dst++ = ';'; --dst_size;
  -		    ++src; --src_len;
  -		    }
  -		break;
  -	    case '&':		/* Turn into "&amp;". */
  -		if (dst_size >= 5)
  -		    {
  -		    *dst++ = '&'; --dst_size;
  -		    *dst++ = 'a'; --dst_size;
  -		    *dst++ = 'm'; --dst_size;
  -		    *dst++ = 'p'; --dst_size;
  -		    *dst++ = ';'; --dst_size;
  -		    ++src; --src_len;
  -		    }
  -		break;
  -	    case '>':		/* Turn into "&gt;". */
  -		if (dst_size >= 4)
  -		    {
  -		    *dst++ = '&'; --dst_size;
  -		    *dst++ = 'g'; --dst_size;
  -		    *dst++ = 't'; --dst_size;
  -		    *dst++ = ';'; --dst_size;
  -		    ++src; --src_len;
  -		    }
  -		break;
  -	    default:		/* Just copy it. */
  -		*dst++ = *src++;
  -		--src_len;
  -		--dst_size;
  +	if (*((xds_uint8_t*)src) >= 0x80)
  +	    {			/* UTF-8ify it. */
  +	    if (dst_size >= 7)
  +		{
  +		tmp = sputu8((xds_uint32_t)*((xds_uint8_t*)src), dst);
  +		++src; --src_len;
  +		dst_size -= tmp - dst;
  +		dst = tmp;
  +		}
  +	    else
  +		dst_size = 0;
  +	    }
  +	else if (*src == '<')
  +	    {			/* Turn into "&lt;". */
  +	    if (dst_size >= 4)
  +		{
  +		*dst++ = '&'; --dst_size;
  +		*dst++ = 'l'; --dst_size;
  +		*dst++ = 't'; --dst_size;
  +		*dst++ = ';'; --dst_size;
  +		++src; --src_len;
  +		}
  +	    else
  +		dst_size = 0;
  +	    }
  +	else if (*src == '&')
  +	    {			/* Turn into "&amp;". */
  +	    if (dst_size >= 5)
  +		{
  +		*dst++ = '&'; --dst_size;
  +		*dst++ = 'a'; --dst_size;
  +		*dst++ = 'm'; --dst_size;
  +		*dst++ = 'p'; --dst_size;
  +		*dst++ = ';'; --dst_size;
  +		++src; --src_len;
  +		}
  +	    else
  +		dst_size = 0;
  +	    }
  +	else if (*src == '>')
  +	    {			/* Turn into "&gt;". */
  +	    if (dst_size >= 4)
  +		{
  +		*dst++ = '&'; --dst_size;
  +		*dst++ = 'g'; --dst_size;
  +		*dst++ = 't'; --dst_size;
  +		*dst++ = ';'; --dst_size;
  +		++src; --src_len;
  +		}
  +	    else
  +		dst_size = 0;
  +	    }
  +	else
  +	    {			/* No special character; just copy it. */
  +	    *dst++ = *src++;
  +	    --src_len; --dst_size;
   	    }
   	}
       if (src_len > 0)
   	{			/* Target buffer was too small. */
  -	*used_buffer_size = dst - (char*)buffer + 1;
  +	*used_buffer_size = buffer_size + 1;
   	return XDS_ERR_OVERFLOW;
   	}
   

From ossp-cvs-owner@ossp.org  Wed Aug  8 21:15:31 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f78JFTR41653; Wed, 8 Aug 2001 21:15:29 +0200 (CEST)
Date: Wed, 8 Aug 2001 21:15:29 +0200 (CEST)
Message-Id: <200108081915.f78JFTR41653@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds .cvsignore Makefile.in configure.ac d...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   08-Aug-2001 21:15:29
  Branch: HEAD                             Handle: 19700101010000997294526

  Added files:
    ossp-pkg/srpc/libxds    xds.c xds.pod xds_engine_xdr.c xds_engine_xml.c
                            xds_p.h xds_test.sh xds_test_lib.c xds_test_xdr.c
                            xds_test_xml.c
  Modified files:
    ossp-pkg/srpc/libxds    .cvsignore Makefile.in configure.ac
    ossp-pkg/srpc/libxds/docs Makefile.in
  Removed files:
    ossp-pkg/srpc/libxds    decode.c destroy.c encode.c find-engine.c
                            getbuffer.c init.c internal.h register.c
                            set-capacity.c setbuffer.c unregister.c vdecode.c
                            vencode.c xdr-decode-double.c xdr-decode-int32.c
                            xdr-decode-int64.c xdr-decode-octetstream.c
                            xdr-decode-string.c xdr-decode-uint32.c
                            xdr-decode-uint64.c xdr-encode-double.c
                            xdr-encode-int32.c xdr-encode-int64.c
                            xdr-encode-octetstream.c xdr-encode-string.c
                            xdr-encode-uint32.c xdr-encode-uint64.c
                            xml-decode-begin.c xml-decode-double.c
                            xml-decode-end.c xml-decode-int32.c
                            xml-decode-int64.c xml-decode-octetstream.c
                            xml-decode-string.c xml-decode-uint32.c
                            xml-decode-uint64.c xml-encode-begin.c
                            xml-encode-double.c xml-encode-end.c
                            xml-encode-int32.c xml-encode-int64.c
                            xml-encode-octetstream.c xml-encode-string.c
                            xml-encode-uint32.c xml-encode-uint64.c
    ossp-pkg/srpc/libxds/docs xds.pod
    ossp-pkg/srpc/libxds/regression-tests
                            .cvsignore .run-tests Makefile.in xdr-int32.c
                            xdr-int64.c xdr-octetstream-empty.c
                            xdr-octetstream.c xdr-string-empty.c xdr-string.c
                            xdr-uint32.c xdr-uint64.c xds-core.c xds-decode.c
                            xds-encode.c xds-engine-restart.c
                            xds-find-engine.c xds-getbuffer.c xds-mystruct.c
                            xds-register.c xds-setbuffer.c xml-double.c
                            xml-int32.c xml-int64.c xml-octetstream-empty.c
                            xml-octetstream.c xml-string-empty.c xml-string.c
                            xml-uint32.c xml-uint64.c

  Log:
    First cut of the ruthless style adjustments to OSSP XDS:
    
    o adjust source tree to follow OSSP source tree style
      by heavily combining sources into smaller sets
      (needs more work when still missing parts are added later)
    
    o automatic re-indentation of sources with GNU indent
      (still needs manual review and adjustments; will follow)
    
    These two heavy steps were mostly done automatically with the help of
    two helper scripts written in Perl. So expect more manual adjustments to
    follow...

  Summary:
    Revision    Changes     Path
    1.5         +2  -0      ossp-pkg/srpc/libxds/.cvsignore
    1.23        +41 -45     ossp-pkg/srpc/libxds/Makefile.in
    1.16        +9  -18     ossp-pkg/srpc/libxds/configure.ac
    NONE        +0  -38     ossp-pkg/srpc/libxds/decode.c
    NONE        +0  -57     ossp-pkg/srpc/libxds/destroy.c
    1.4         +2  -7      ossp-pkg/srpc/libxds/docs/Makefile.in
    NONE        +0  -134    ossp-pkg/srpc/libxds/docs/xds.pod
    NONE        +0  -38     ossp-pkg/srpc/libxds/encode.c
    NONE        +0  -66     ossp-pkg/srpc/libxds/find-engine.c
    NONE        +0  -52     ossp-pkg/srpc/libxds/getbuffer.c
    NONE        +0  -70     ossp-pkg/srpc/libxds/init.c
    NONE        +0  -63     ossp-pkg/srpc/libxds/internal.h
    NONE        +0  -82     ossp-pkg/srpc/libxds/register.c
    NONE        +0  -2      ossp-pkg/srpc/libxds/regression-tests/.cvsignore
    NONE        +0  -42     ossp-pkg/srpc/libxds/regression-tests/.run-tests
    NONE        +0  -43     ossp-pkg/srpc/libxds/regression-tests/Makefile.in
    NONE        +0  -144    ossp-pkg/srpc/libxds/regression-tests/xdr-int32.c
    NONE        +0  -144    ossp-pkg/srpc/libxds/regression-tests/xdr-int64.c
    NONE        +0  -110    ossp-pkg/srpc/libxds/regression-tests/xdr-octetstream-empty.c
    NONE        +0  -110    ossp-pkg/srpc/libxds/regression-tests/xdr-octetstream.c
    NONE        +0  -104    ossp-pkg/srpc/libxds/regression-tests/xdr-string-empty.c
    NONE        +0  -109    ossp-pkg/srpc/libxds/regression-tests/xdr-string.c
    NONE        +0  -150    ossp-pkg/srpc/libxds/regression-tests/xdr-uint32.c
    NONE        +0  -150    ossp-pkg/srpc/libxds/regression-tests/xdr-uint64.c
    NONE        +0  -74     ossp-pkg/srpc/libxds/regression-tests/xds-core.c
    NONE        +0  -124    ossp-pkg/srpc/libxds/regression-tests/xds-decode.c
    NONE        +0  -117    ossp-pkg/srpc/libxds/regression-tests/xds-encode.c
    NONE        +0  -122    ossp-pkg/srpc/libxds/regression-tests/xds-engine-restart.c
    NONE        +0  -163    ossp-pkg/srpc/libxds/regression-tests/xds-find-engine.c
    NONE        +0  -151    ossp-pkg/srpc/libxds/regression-tests/xds-getbuffer.c
    NONE        +0  -168    ossp-pkg/srpc/libxds/regression-tests/xds-mystruct.c
    NONE        +0  -144    ossp-pkg/srpc/libxds/regression-tests/xds-register.c
    NONE        +0  -134    ossp-pkg/srpc/libxds/regression-tests/xds-setbuffer.c
    NONE        +0  -114    ossp-pkg/srpc/libxds/regression-tests/xml-double.c
    NONE        +0  -140    ossp-pkg/srpc/libxds/regression-tests/xml-int32.c
    NONE        +0  -116    ossp-pkg/srpc/libxds/regression-tests/xml-int64.c
    NONE        +0  -113    ossp-pkg/srpc/libxds/regression-tests/xml-octetstream-empty.c
    NONE        +0  -113    ossp-pkg/srpc/libxds/regression-tests/xml-octetstream.c
    NONE        +0  -112    ossp-pkg/srpc/libxds/regression-tests/xml-string-empty.c
    NONE        +0  -112    ossp-pkg/srpc/libxds/regression-tests/xml-string.c
    NONE        +0  -115    ossp-pkg/srpc/libxds/regression-tests/xml-uint32.c
    NONE        +0  -115    ossp-pkg/srpc/libxds/regression-tests/xml-uint64.c
    NONE        +0  -61     ossp-pkg/srpc/libxds/set-capacity.c
    NONE        +0  -61     ossp-pkg/srpc/libxds/setbuffer.c
    NONE        +0  -72     ossp-pkg/srpc/libxds/unregister.c
    NONE        +0  -102    ossp-pkg/srpc/libxds/vdecode.c
    NONE        +0  -165    ossp-pkg/srpc/libxds/vencode.c
    NONE        +0  -35     ossp-pkg/srpc/libxds/xdr-decode-double.c
    NONE        +0  -64     ossp-pkg/srpc/libxds/xdr-decode-int32.c
    NONE        +0  -72     ossp-pkg/srpc/libxds/xdr-decode-int64.c
    NONE        +0  -76     ossp-pkg/srpc/libxds/xdr-decode-octetstream.c
    NONE        +0  -75     ossp-pkg/srpc/libxds/xdr-decode-string.c
    NONE        +0  -51     ossp-pkg/srpc/libxds/xdr-decode-uint32.c
    NONE        +0  -55     ossp-pkg/srpc/libxds/xdr-decode-uint64.c
    NONE        +0  -35     ossp-pkg/srpc/libxds/xdr-encode-double.c
    NONE        +0  -57     ossp-pkg/srpc/libxds/xdr-encode-int32.c
    NONE        +0  -61     ossp-pkg/srpc/libxds/xdr-encode-int64.c
    NONE        +0  -69     ossp-pkg/srpc/libxds/xdr-encode-octetstream.c
    NONE        +0  -69     ossp-pkg/srpc/libxds/xdr-encode-string.c
    NONE        +0  -49     ossp-pkg/srpc/libxds/xdr-encode-uint32.c
    NONE        +0  -53     ossp-pkg/srpc/libxds/xdr-encode-uint64.c
    1.1         +500 -0     ossp-pkg/srpc/libxds/xds.c
    1.7         +134 -0     ossp-pkg/srpc/libxds/xds.pod
    1.1         +483 -0     ossp-pkg/srpc/libxds/xds_engine_xdr.c
    1.1         +1049 -0    ossp-pkg/srpc/libxds/xds_engine_xml.c
    1.1         +60 -0      ossp-pkg/srpc/libxds/xds_p.h
    1.1         +42 -0      ossp-pkg/srpc/libxds/xds_test.sh
    1.1         +914 -0     ossp-pkg/srpc/libxds/xds_test_lib.c
    1.1         +759 -0     ossp-pkg/srpc/libxds/xds_test_xdr.c
    1.1         +741 -0     ossp-pkg/srpc/libxds/xds_test_xml.c
    NONE        +0  -39     ossp-pkg/srpc/libxds/xml-decode-begin.c
    NONE        +0  -35     ossp-pkg/srpc/libxds/xml-decode-double.c
    NONE        +0  -39     ossp-pkg/srpc/libxds/xml-decode-end.c
    NONE        +0  -78     ossp-pkg/srpc/libxds/xml-decode-int32.c
    NONE        +0  -78     ossp-pkg/srpc/libxds/xml-decode-int64.c
    NONE        +0  -224    ossp-pkg/srpc/libxds/xml-decode-octetstream.c
    NONE        +0  -188    ossp-pkg/srpc/libxds/xml-decode-string.c
    NONE        +0  -68     ossp-pkg/srpc/libxds/xml-decode-uint32.c
    NONE        +0  -68     ossp-pkg/srpc/libxds/xml-decode-uint64.c
    NONE        +0  -43     ossp-pkg/srpc/libxds/xml-encode-begin.c
    NONE        +0  -35     ossp-pkg/srpc/libxds/xml-encode-double.c
    NONE        +0  -40     ossp-pkg/srpc/libxds/xml-encode-end.c
    NONE        +0  -79     ossp-pkg/srpc/libxds/xml-encode-int32.c
    NONE        +0  -80     ossp-pkg/srpc/libxds/xml-encode-int64.c
    NONE        +0  -142    ossp-pkg/srpc/libxds/xml-encode-octetstream.c
    NONE        +0  -208    ossp-pkg/srpc/libxds/xml-encode-string.c
    NONE        +0  -70     ossp-pkg/srpc/libxds/xml-encode-uint32.c
    NONE        +0  -70     ossp-pkg/srpc/libxds/xml-encode-uint64.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/.cvsignore
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 .cvsignore
  --- ossp-pkg/srpc/libxds/.cvsignore	2001/07/20 10:42:34	1.4
  +++ ossp-pkg/srpc/libxds/.cvsignore	2001/08/08 19:15:23	1.5
  @@ -1,2 +1,4 @@
  +.*.t
  +.*.l
   xds.3
   xds.h Makefile configure
  Index: ossp-pkg/srpc/libxds/Makefile.in
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 Makefile.in
  --- ossp-pkg/srpc/libxds/Makefile.in	2001/08/08 11:21:27	1.22
  +++ ossp-pkg/srpc/libxds/Makefile.in	2001/08/08 19:15:23	1.23
  @@ -1,70 +1,66 @@
   # Build libxds.
   
  -CC		= @CC@
  -AR		= ar
  -RANLIB		= @RANLIB@
  -
  -CPPFLAGS	= @CPPFLAGS@ @DEFS@ -D_GNU_SOURCE
  -CFLAGS		= @CFLAGS@
  -LDFLAGS		= @LDFLAGS@
  -
  -XML64_OBJS	= @xml_64_bit_objects@
  -XML_OBJS	= xml-encode-int32.o	   xml-decode-int32.o \
  -		  xml-encode-uint32.o	   xml-decode-uint32.o \
  -		  xml-encode-double.o	   xml-decode-double.o \
  -		  xml-encode-begin.o	   xml-decode-begin.o \
  -		  xml-encode-end.o	   xml-decode-end.o \
  -		  xml-encode-octetstream.o xml-decode-octetstream.o \
  -		  xml-encode-string.o	   xml-decode-string.o \
  -		  $(XML64_OBJS)
  -
  -XDR64_OBJS	= @xdr_64_bit_objects@
  -XDR_OBJS	= xdr-encode-int32.o	   xdr-decode-int32.o \
  -		  xdr-encode-uint32.o	   xdr-decode-uint32.o \
  -		  xdr-encode-double.o	   xdr-decode-double.o \
  -		  xdr-encode-octetstream.o xdr-decode-octetstream.o \
  -		  xdr-encode-string.o	   xdr-decode-string.o \
  -		  $(XDR64_OBJS)
  -
  -XDS_OBJS	= decode.o destroy.o encode.o getbuffer.o init.o register.o \
  -		  setbuffer.o unregister.o vdecode.o vencode.o find-engine.o \
  -		  set-capacity.o
  +CC        = @CC@
  +AR        = ar
  +RANLIB    = @RANLIB@
  +CPPFLAGS  = @CPPFLAGS@ @DEFS@ -D_GNU_SOURCE
  +CFLAGS    = @CFLAGS@
  +LDFLAGS   = @LDFLAGS@
  +LIBS      = @LIBS@
  +POD2MAN   = @POD2MAN@
  +
  +LIB_NAME  = libxds.a
  +LIB_OBJS  = xds.o xds_engine_xdr.o xds_engine_xml.o
  +TST_SRCS  = xds_test_lib.c xds_test_xdr.c xds_test_xml.c
   
  -OBJS		= $(XDS_OBJS) $(XDR_OBJS) $(XML_OBJS)
  +.SUFFIXES:
  +.SUFFIXES: .c .o .pod .3
   
  +.PHONY:	clean distclean realclean check docs
  +
   .c.o:
   	$(CC) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CFLAGS) -c $<
  +.pod.3:
  +	$(POD2MAN) --section=3 --center="XDS Library Programmer API" $< >$@
   
  -.PHONY:	clean distclean realclean check docs
  +all: $(LIB_NAME) xds.3
   
  -all:	libxds.a
  -
  -libxds.a:	$(OBJS)
  +$(LIB_NAME):	$(LIB_OBJS)
   	@rm -f $@
  -	$(AR) cr $@ $(OBJS)
  +	$(AR) cr $@ $(LIB_OBJS)
   	$(RANLIB) $@
   
   clean::
  -	@(cd regression-tests && $(MAKE) $@)
   	@(cd docs && $(MAKE) $@)
  -	rm -f $(OBJS)
  -	rm -f libxds.a
  +	-rm -f $(LIB_OBJS)
  +	-rm -f ./.*.t ./.*.l
  +	-rm -f $(LIB_NAME)
  +	-rm -f xds.3
   
   distclean::	clean
  -	@(cd regression-tests && $(MAKE) $@)
   	@(cd docs && $(MAKE) $@)
  -	rm -f config.log config.status Makefile
  +	-rm -f config.log config.status Makefile
   
   realclean::	distclean
  -	rm -f configure
  +	-rm -f configure
   
  -check:		libxds.a
  -	(cd regression-tests && $(MAKE) check)
  +check:		$(LIB_NAME) $(TST_SRCS)
  +	-@for filename in $(TST_SRCS); do \
  +	    for testname in `grep "#ifdef XDS_TEST_" $$filename | sed -e 's;^#ifdef ;;'`; do \
  +            filebase=`echo $$filename | sed -e 's;\.c;;'`; \
  +            testbase=`echo $$testname | sed -e 's;^XDS_TEST_;;'`; \
  +	        if [ ! -f ".$$testbase.t" ]; then \
  +                echo "$(CC) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CFLAGS) $(LDFLAGS) -D$$testname -o .$$testbase.t $$filebase.c $(LIB_NAME)"; \
  +                $(CC) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CFLAGS) $(LDFLAGS) -D$$testname -o .$$testbase.t $$filebase.c $(LIB_NAME); \
  +            fi; \
  +        done; \
  +    done; \
  +    sh ./xds_test.sh ./.*.t
   
   docs:
   	@(cd docs && $(MAKE))
   
   # Dependencies
  +
  +$(LIB_OBJS):			xds_p.h xds.h
   
  -$(XDS_OBJS):			internal.h xds.h
  -$(XDR_OBJS) $(XML_OBJS):	xds.h
  Index: ossp-pkg/srpc/libxds/configure.ac
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 configure.ac
  --- ossp-pkg/srpc/libxds/configure.ac	2001/08/08 11:49:07	1.15
  +++ ossp-pkg/srpc/libxds/configure.ac	2001/08/08 19:15:23	1.16
  @@ -1,8 +1,8 @@
   dnl configure.in -- Process this file with autoconf to produce a configure script.
   
  -AC_INIT(libxds)
  +AC_INIT(xds)
   AC_PREREQ(2.52)
  -AC_REVISION($Revision: 1.15 $)
  +AC_REVISION($Revision: 1.16 $)
   
   dnl Get rid of the lousy -g and -O defaults in CFLAGS.
   dnl
  @@ -50,17 +50,6 @@
                 [AC_MSG_WARN([no signed 64 bit data type found])
   	      xds_int64_t=undefined])
   dnl
  -if test "$xds_int64_t" = "undefined" -o "$xds_uint64_t" = "undefined"; then
  -   have_64_bit_support="#undef XDS_HAVE_64_BIT_SUPPORT"
  -else
  -   have_64_bit_support="#define XDS_HAVE_64_BIT_SUPPORT"
  -   xdr_64_bit_objects="xdr-encode-int64.o xdr-decode-int64.o"
  -   xdr_64_bit_objects="$xdr_64_bit_objects xdr-encode-uint64.o xdr-decode-uint64.o"
  -   xml_64_bit_objects="xml-encode-int64.o xml-decode-int64.o"
  -   xml_64_bit_objects="$xml_64_bit_objects xml-encode-uint64.o xml-decode-uint64.o"
  -   tests_64_bit="xdr-int64.exe xdr-uint64.exe xml-int64.exe xml-uint64.exe"
  -   tests_64_bit="$tests_64_bit xds-mystruct.exe"
  -fi
   AC_SUBST([xds_uint8_t])
   AC_SUBST([xds_uint16_t])
   AC_SUBST([xds_uint32_t])
  @@ -69,10 +58,12 @@
   AC_SUBST([xds_int16_t])
   AC_SUBST([xds_int32_t])
   AC_SUBST([xds_int64_t])
  +if test "$xds_int64_t" = "undefined" -o "$xds_uint64_t" = "undefined"; then
  +   have_64_bit_support="#undef XDS_HAVE_64_BIT_SUPPORT"
  +else
  +   have_64_bit_support="#define XDS_HAVE_64_BIT_SUPPORT"
  +fi
   AC_SUBST([have_64_bit_support])
  -AC_SUBST([xdr_64_bit_objects])
  -AC_SUBST([xml_64_bit_objects])
  -AC_SUBST([tests_64_bit])
   
   dnl Find the library containing the xdr_xxx() functions.
   dnl
  @@ -81,6 +72,6 @@
   
   dnl Write results.
   dnl
  -AC_CONFIG_FILES(xds.h Makefile regression-tests/Makefile docs/Makefile)
  -AC_CONFIG_COMMANDS([default], [chmod -w xds.h Makefile regression-tests/Makefile docs/Makefile])
  +AC_CONFIG_FILES(xds.h Makefile docs/Makefile)
  +AC_CONFIG_COMMANDS([default], [chmod -w xds.h Makefile docs/Makefile])
   AC_OUTPUT
      Index: ossp-pkg/srpc/libxds/docs/Makefile.in
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 Makefile.in
  --- ossp-pkg/srpc/libxds/docs/Makefile.in	2001/08/07 14:07:00	1.3
  +++ ossp-pkg/srpc/libxds/docs/Makefile.in	2001/08/08 19:15:26	1.4
  @@ -1,10 +1,9 @@
   # Build libxds documentation.
   
   LATEX		= @LATEX@
  -POD2MAN		= @POD2MAN@
   
   .SUFFIXES:
  -.SUFFIXES:	.tex .dvi .ps .pod .3
  +.SUFFIXES:	.tex .dvi .ps
   
   .tex.dvi:
   	latex \\nonstopmode\\input $<; \
  @@ -15,14 +14,10 @@
   .dvi.ps:
   	dvips $< -o $@
   
  -.pod.3:
  -	$(POD2MAN) --section=3 --center="XDS Library Programmer API " $< >$@
  +all:	libxds.ps
   
  -all:	libxds.ps xds.3
  -
   clean:
   	rm -f libxds.aux libxds.dvi libxds.log libxds.ps libxds.toc
  -	rm -f xds.3
   
   distclean realclean:
   	rm -f Makefile
                                                                                                                Index: ossp-pkg/srpc/libxds/xds.c
  ============================================================
  $ cvs update -p -r1.1 xds.c
  /* 
   * XDS - OSSP Extensible Data Serialization Library Copyright (c) 2001 The
   * OSSP Project (http://www.ossp.org/) Copyright (c) 2001 Cable & Wireless
   * Deutschland (http://www.cw.com/de/)
   * 
   * This file is part of OSSP XDS, an extensible data serialization library
   * which can be found at http://www.ossp.com/pkg/xds/.
   * 
   * Permission to use, copy, modify, and distribute this software for any
   * purpose with or without fee is hereby granted, provided that the above
   * copyright notice and this permission notice appear in all copies.
   * 
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
   * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 
   * EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR CONTRIBUTORS BE
   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
   * POSSIBILITY OF SUCH DAMAGE. */
  
  #include <string.h>
  #include <ctype.h>
  #include <errno.h>
  
  #include "xds_p.h"
  
  xds_t *xds_init(xds_mode_t mode)
  {
      xds_t *ctx;
  
      /* Sanity check parameter. */
      assert(mode == XDS_ENCODE || mode == XDS_DECODE);
      if (mode != XDS_ENCODE && mode != XDS_DECODE) {
          errno = EINVAL;
          return NULL;
      }
  
      /* Allocate context structure. */
      ctx = malloc(sizeof (struct xds_context));
      if (ctx == NULL)
          return NULL; /* errno is set by calloc() */
  
      /* Set mode of operation in context. */
      ctx->mode = mode;
  
      /* Initialize buffer handling. */
      ctx->buffer = NULL;
      ctx->buffer_len = 0;
      ctx->buffer_capacity = 0;
      ctx->we_own_buffer = XDS_FALSE;
  
      /* Initialize engines map. */
      ctx->engines = NULL;
      ctx->engines_len = 0;
      ctx->engines_capacity = 0;
  
      return ctx;
  }
  
  void xds_destroy(xds_t *xds)
  {
      /* Sanity checks. */
      assert(xds != NULL);
      if (xds == NULL)
          return;
  
      /* Free allocated memory. */
      assert(xds->buffer != NULL
             || (xds->buffer_capacity == 0 && xds->buffer_len == 0));
      if (xds->buffer != NULL && xds->we_own_buffer)
          free(xds->buffer);
  
      assert(xds->engines != NULL || xds->engines_capacity == 0);
      if (xds->engines != NULL) {
          size_t i;
          for (i = 0; i < xds->engines_len; ++i) {
              assert(xds->engines[i].name != NULL);
              free(xds->engines[i].name);
          }
          free(xds->engines);
      }
  
      free(xds);
      return;
  }
  
  int xds_setbuffer(xds_t *xds, xds_scope_t flag, void *buffer,
                    size_t buffer_len)
  {
      /* Sanity checks. */
      xds_check_parameter(xds != NULL);
      xds_check_parameter(flag == XDS_GIFT || flag == XDS_LOAN);
      xds_check_parameter((buffer != NULL && buffer_len != 0)
                          || flag == XDS_GIFT);
  
      /* Free the old buffer if there is one. */
      if (xds->buffer != NULL && xds->we_own_buffer)
          free(xds->buffer);
      xds->buffer_len = 0;
  
      if (flag == XDS_GIFT) {
          xds->buffer = buffer;
          if (buffer == NULL)
              xds->buffer_capacity = 0;
          else
              xds->buffer_capacity = buffer_len;
          xds->we_own_buffer = XDS_TRUE;
      }
      else {
          xds->buffer = buffer;
          xds->buffer_capacity = buffer_len;
          xds->we_own_buffer = XDS_FALSE;
      }
  
      return XDS_OK;
  }
  
  int xds_getbuffer(xds_t *xds, xds_scope_t flag, void **buffer,
                    size_t *buffer_len)
  {
      /* Sanity checks. */
  
      xds_check_parameter(xds != NULL);
      xds_check_parameter(flag == XDS_GIFT || flag == XDS_LOAN);
      xds_check_parameter(buffer != NULL);
      xds_check_parameter(buffer_len != NULL);
  
      /* Return the buffer to the caller. */
      *buffer = xds->buffer;
      *buffer_len = xds->buffer_len;
      if (flag == XDS_GIFT) {
          xds->buffer = NULL;
          xds->buffer_capacity = xds->buffer_len = 0;
      }
      else
          xds->buffer_len = 0;
  
      return XDS_OK;
  }
  
  int xds_set_capacity(void **array, size_t *array_capacity,
                       size_t new_capacity, size_t elem_size,
                       size_t initial_capacity)
  {
      void *buf;
      size_t size;
  
      /* Sanity checks. */
      xds_check_parameter(array != NULL);
      xds_check_parameter(array_capacity != NULL);
      xds_check_parameter(elem_size != 0);
      xds_check_parameter(initial_capacity != 0);
  
      /* Do we need to re-allocate? */
      if (*array_capacity > new_capacity)
          return XDS_OK;
  
      /* Find the correct capacity. */
      size = (*array_capacity != 0) ? *array_capacity * 2 : initial_capacity; 
      while (size < new_capacity)
          size *= 2;
  
      /* Allocate the array and store the new values. */
      buf = realloc(*array, size * elem_size);
      if (buf == NULL)
          return XDS_ERR_NO_MEM;
      *array = buf;
      *array_capacity = size;
  
      return XDS_OK;
  }
  
  int xds_find_engine(const engine_map_t *engines, size_t last,
                      const char *name, size_t *pos)
  {
      size_t first;
  
      /* Sanity checks. */
      xds_check_parameter(engines != NULL || last == 0);
      xds_check_parameter(name != NULL);
      xds_check_parameter(pos != NULL);
  
      /* Use binary search to find "name" in "engines". */
      for (first = 0; (last - first) > 0;) {
          size_t half = first + ((last - first) / 2);
          int rc = strcmp(engines[half].name, name);
          if (rc < 0)
              first = half + 1;
          else if (rc == 0) { /* found it */
              *pos = half;
              return XDS_TRUE;
          }
          else
              last = half;
          assert(first <= last);
      }
  
      *pos = first;
      return XDS_FALSE;
  }
  
  int xds_register(xds_t *xds, const char *name, xds_engine_t engine,
                   void *engine_context)
  {
      size_t pos;
  
      /* Sanity checks. */
      xds_check_parameter(xds != NULL);
      xds_check_parameter(name != NULL);
      xds_check_parameter(engine != NULL);
      for (pos = 0; name[pos] != '\0'; ++pos) {
          if (!isalnum((int)name[pos]) && name[pos] != '-' && name[pos] != '_')
              return XDS_ERR_INVALID_ARG;
      }
  
      /* Copy the name argument into our own memory. */
      name = strdup(name);
      if (name == NULL)
          return XDS_ERR_NO_MEM;
  
      /* Search engines for the entry. */
      if (xds_find_engine(xds->engines, xds->engines_len, name, &pos)) { 
          /* overwrite existing entry */
          free(xds->engines[pos].name);
      }
      else {
          /* insert new entry */
          int rc = xds_set_capacity((void **)&xds->engines,
                                    &xds->engines_capacity,
                                    xds->engines_len + 1,
                                    sizeof (engine_map_t),
                                    XDS_INITIAL_ENGINES_CAPACITY);
          assert(rc == XDS_OK || rc == XDS_ERR_NO_MEM);
          if (rc != XDS_OK)
              return rc;
          memmove(&xds->engines[pos + 1], &xds->engines[pos],
                  (xds->engines_len - pos) * sizeof (engine_map_t));
          ++xds->engines_len;
      }
  
      /* Insert entry. */
      xds->engines[pos].name = (char *)name;
      xds->engines[pos].engine = engine;
      xds->engines[pos].context = engine_context;
  
      /* Everything is fine. */
      return XDS_OK;
  }
  
  int xds_unregister(xds_t *xds, const char *name)
  {
      size_t pos;
      int rc;
  
      /* Sanity checks. */
      xds_check_parameter(xds != NULL);
      xds_check_parameter(name != NULL);
      for (pos = 0; name[pos] != '\0'; ++pos) {
          if (!isalnum((int)name[pos]) && name[pos] != '-' && name[pos] != '_')
              return XDS_ERR_INVALID_ARG;
      }
  
      /* Find the entry we're supposed to delete. */
      if (!xds_find_engine(xds->engines, xds->engines_len, name, &pos))
          return XDS_ERR_UNKNOWN_ENGINE;
  
      /* Free the memory allocated for this entry and move the entries behind
         it back if necessary. */
      assert(xds->engines[pos].name != NULL);
      free(xds->engines[pos].name);
      memmove(&xds->engines[pos], &xds->engines[pos + 1],
              (xds->engines_len - (pos + 1)) * sizeof (engine_map_t));
      --xds->engines_len;
  
      /* Lower capacity if necessary. */
      rc = xds_set_capacity((void **)&xds->engines,
                            &xds->engines_capacity,
                            xds->engines_len,
                            sizeof (engine_map_t),
                            XDS_INITIAL_ENGINES_CAPACITY);
      assert(rc == XDS_OK || rc == XDS_ERR_NO_MEM);
      if (rc != XDS_OK)
          return rc;
  
      return XDS_OK;
  }
  
  int xds_encode(xds_t *xds, const char *fmt, ...)
  {
      int rc;
      va_list args;
      va_start(args, fmt);
      rc = xds_vencode(xds, fmt, args);
      va_end(args);
      return rc;
  }
  
  int xds_vencode(xds_t *xds, const char *fmt_arg, va_list args)
  {
      va_list args_backup;
      size_t buffer_len_backup;
      char *name;
      char *p;
      char *fmt;
      int rc;
  
      /* Sanity checks. */
      xds_check_parameter(xds != NULL);
      xds_check_parameter(fmt_arg != NULL);
      assert(xds->mode == XDS_ENCODE);
      if (xds->mode != XDS_ENCODE)
          return XDS_ERR_INVALID_MODE;
  
      /* Ensure we have a buffer allocated ready for use. */
      if (xds->buffer == NULL) {         /* allocate a new buffer */
          rc = xds_set_capacity((void **)&xds->buffer,
                                &xds->buffer_capacity,
                                XDS_INITIAL_BUFFER_CAPACITY,
                                sizeof (char), XDS_INITIAL_BUFFER_CAPACITY);
          assert(rc == XDS_OK || rc == XDS_ERR_NO_MEM);
          if (rc != XDS_OK)
              return rc;
          xds->buffer_len = 0;
          xds->we_own_buffer = XDS_TRUE;
      }
  
      /* Iterate through the items in the format string and execute the
         apropriate engines. */
      fmt = p = strdup(fmt_arg);
      if (fmt == NULL)
          return XDS_ERR_NO_MEM;
      buffer_len_backup = xds->buffer_len;
      for (name = p; *p != '\0'; name = p) {
          while (isalnum((int)*p) || *p == '-' || *p == '_')
              ++p;
          if (*p)
              *p++ = '\0';
          else
              *p = '\0';
  
          if (strlen(name) > 0) {
              int restart_engine;
              size_t used_buffer_size;
              size_t pos;
  
              if (xds_find_engine(xds->engines, xds->engines_len, name, &pos) ==
                  XDS_FALSE) {
                  rc = XDS_ERR_UNKNOWN_ENGINE;
                  goto leave;
              }
  
              do {
                  /* Ensure the buffer has free space. */
                  assert(xds->buffer_len <= xds->buffer_capacity);
                  if (xds->buffer_len == xds->buffer_capacity) {
                      if (xds->we_own_buffer) {
                          rc = xds_set_capacity((void **)&xds->buffer,
                                                &xds->buffer_capacity,
                                                xds->buffer_len + 1,
                                                sizeof (char),
                                                XDS_INITIAL_BUFFER_CAPACITY);
                          assert(rc == XDS_OK || rc == XDS_ERR_NO_MEM);
                          if (rc != XDS_OK)
                              goto leave;
                      }
                      else {
                          rc = XDS_ERR_OVERFLOW;
                          goto leave;
                      }
                  }
  
                  /* Execute the engine. */
                  used_buffer_size = 0;
                  args_backup = args;
                  rc = (*xds->engines[pos].engine)(xds,
                                                   xds->engines[pos].context,
                                                   xds->buffer +
                                                   xds->buffer_len,
                                                   xds->buffer_capacity -
                                                   xds->buffer_len,
                                                   &used_buffer_size, &args);
                  assert(rc <= 0);
                  if (rc == XDS_OK) {
                      restart_engine = XDS_FALSE;
                      xds->buffer_len += used_buffer_size;
                  }
                  else if (rc == XDS_ERR_OVERFLOW) {  /* enlarge buffer */
                      if (!xds->we_own_buffer)
                          goto leave;
  
                      restart_engine = XDS_TRUE;
                      args = args_backup;
  
                      rc = xds_set_capacity((void **)&xds->buffer,
                                            &xds->buffer_capacity,
                                            xds->buffer_capacity +
                                            ((used_buffer_size ==
                                              0) ? 1 : used_buffer_size),
                                            sizeof (char),
                                            XDS_INITIAL_BUFFER_CAPACITY);
                      assert(rc == XDS_OK || rc == XDS_ERR_NO_MEM);
                      if (rc != XDS_OK)
                          goto leave;
                  }
                  else
                      goto leave;
              }
              while (restart_engine);
          }
      }
      rc = XDS_OK;
  
      /* Clean up and leave. */
      leave:
      free(fmt);
      if (rc != XDS_OK)
          xds->buffer_len = buffer_len_backup;
      return rc;
  }
  
  int xds_decode(xds_t *xds, const char *fmt, ...)
  {
      int rc;
      va_list args;
      va_start(args, fmt);
      rc = xds_vdecode(xds, fmt, args);
      va_end(args);
      return rc;
  }
  
  int xds_vdecode(xds_t *xds, const char *fmt_arg, va_list args)
  {
      size_t buffer_len_backup;
      char *name;
      char *p;
      char *fmt;
      int rc;
  
      /* Sanity checks. */
      xds_check_parameter(xds != NULL);
      xds_check_parameter(fmt_arg != NULL);
      assert(xds->mode == XDS_DECODE);
      if (xds->mode != XDS_DECODE)
          return XDS_ERR_INVALID_MODE;
  
      /* Ensure we have a buffer to decode. */
      if (xds->buffer == NULL || xds->buffer_capacity == 0)
          return XDS_ERR_UNDERFLOW;
  
      /* Iterate through the items in the format string and execute the
         apropriate engines. */
      fmt = p = strdup(fmt_arg);
      if (fmt == NULL)
          return XDS_ERR_NO_MEM;
      buffer_len_backup = xds->buffer_len;
      for (name = p; *p != '\0'; name = p) {
          while (isalnum((int)*p) || *p == '-' || *p == '_')
              ++p;
          if (*p)
              *p++ = '\0';
          else
              *p = '\0';
  
          if (strlen(name) > 0) {
              size_t pos;
              size_t used_buffer_size = 0;
              if (xds_find_engine(xds->engines, xds->engines_len, name, &pos)) {
                  rc = (*xds->engines[pos].engine)(xds,
                                                   xds->engines[pos].context,
                                                   xds->buffer +
                                                   xds->buffer_len,
                                                   xds->buffer_capacity -
                                                   xds->buffer_len,
                                                   &used_buffer_size, &args);
                  assert(rc <= 0);
                  if (rc == XDS_OK)
                      xds->buffer_len += used_buffer_size;
                  else
                      goto leave;
              }
              else {
                  rc = XDS_ERR_UNKNOWN_ENGINE;
                  goto leave;
              }
          }
      }
      rc = XDS_OK;
  
      /* Clean up and leave. */
      leave:
      free(fmt);
      if (rc != XDS_OK)
          xds->buffer_len = buffer_len_backup;
      return rc;
  }
  
  Index: ossp-pkg/srpc/libxds/xds.pod
  ============================================================
  $ cvs update -p -r1.7 xds.pod
  =pod
  
  =head1 NAME
  
  xds - eXtensible Data Serialization
  
  =head1 SYNOPSIS
  
  
  =head1 DESCRIPTION
  
  =over 4
  
  =item xds_t* B<xds_init>(xds_mode_t I<mode>);
  
  Valid settings for I<mode> are B<XDS_ENCODE> and B<XDS_DECODE>. If
  successful, a valid handle is returned -- B<NULL> otherwise. If the
  routine fails, the system variable B<errno> is set apropriately.
  
  =item void B<xds_destroy>(xds_t* I<xds>);
  
  Free all internally allocated resources associated with this context.
  I<xds> must be a handle obtained by calling B<xds_init>.
  
  =item int B<xds_register>(xds_t* I<xds>, const char* I<name>, xds_engine_t I<engine>, void* I<engine_context>);
  
  Register the function I<engine> as formatting engine in context I<xds>
  under the name I<name>. The function must have the following
  prototype:
  
      int my_engine(xds_t* xds, void* engine_context,
  		  void* buffer, size_t buffer_size,
  		  va_list args);
  
  It must gather its values from I<args> and encode/decode them into
  I<buffer>. The encoded/decoded representation must not take up more
  than I<size> byte of memory, because that's the maximum I<buffer> can
  hold. If the buffer is too small, I<engine> must return
  B<XDS_ERR_OVERFLOW>. In case of no error, I<engine> must return the
  number of bytes it has written to the buffer. (Note that all xds error
  defines are smaller than >0.) The variable I<engine_context> is passed
  through to the function every time it is called; it is not touched in
  any way by the xds library.
  
  A valid name I<name> for a callback function consists of an arbitrary
  number of characters from the class [a-zA-Z0-9_-].
  
  =item int B<xds_unregister>(xds_t* I<xds>, const char* I<name>);
  
  Remove encoding/decoding engine I<name> from context I<xds>. The
  function will return B<XDS_OK> if successful and
  B<XDS_ERR_UNKNOW_ENGINE> if I<name> is not a registered engine.
  
  =item int B<xds_setbuffer>(xds_t* I<xds>, xds_scope_t I<flag>, void* I<buffer>, size_t I<buffer_size>);
  
  Encoding mode: Set internal buffer used in context I<xds> to
  I<buffer>. The buffer has a capacity of I<buffer_size> byte. I<flag>
  may be set to B<XDS_LOAN> or B<XDS_GIFT>. A "loaned" buffer is one
  that is owned by the application; xds will use it, but it will not
  B<free> the buffer nor will it try to B<realloc> it if it's too small.
  A buffer given to xds as a "gift" is henceforth owned by xds and may
  be B<free>d or B<realloc>ed as the library sees fit. If I<flag> is
  B<XDS_GIFT>, I<buffer> must be a pointer obtained from calling the
  B<malloc(3)> API. Calling B<xds_setbuffer> with a I<buffer> of B<NULL>
  will cause the xds library to allocate a buffer of its own.
  I<buffer_size> is ignored in this case.
  
  Decoding mode: I<buffer> contains the encoded representation of the
  data to be used for following B<xds_decode> calls. The encoded data is
  I<buffer_size> byte long. Unlike in encoding mode, such a buffer is
  not modified, hence there is no need to extend the buffer. If I<flag>
  is set to B<XDS_GIFT>, the library will B<free> I<buffer> when
  the context is destroyed.
  
  B<xds_setbuffer> returns one of the following codes signifying success
  or failure: B<XDS_OK> (everything alright), B<XDS_ERR_NO_MEM> (failed
  to allocate new internal buffers), and B<XDS_ERR_INVALID_ARG>
  (arguments don't make sense).
  
  =item int B<xds_getbuffer>(xds_t* I<xds>, xds_scope_t flag, void** buffer, size_t* buffer_size);
  
  This routine will write the address and size of the internal buffer in
  context I<xds> to I<buffer> and I<buffer_size>. The I<flag> parameter
  determines who owns the buffer after that; setting I<flag> to
  B<XDS_LOAN> means that the buffer is owned by the xds library and that
  the user may not rely on its contents still being there after another
  xds library function call. Furthermore, calling B<xds_getbuffer> will
  flush the registered buffer, meaning that coming B<xds_encode> calls
  will start at the beginning and potentially overwrite the buffer
  contents.
  
  Setting I<flag> to B<XDS_GIFT> means that the returned buffer is owned
  by the application programmer from now on, it is no longer modified or
  used in any way by the library. The application must B<free> the
  buffer when it's not needed anymore.
  
  =item int B<xds_encode>(xds_t* I<xds>, const char* I<fmt>, ...);
  
  The B<encode> function call will encode an arbitrary number of values
  into the chosen representation. The syntax is very similar to
  B<sprintf>: As parameters, it requires the I<xds> handle obtained from
  B<xds_init>, a format string I<fmt> describing the following value
  parameters, and an arbitrary number of actual values.
  
  The format string lists the names of the callback functions to be used
  in order to format the values; it has the format "name name ...". The
  names are delimited by any number of characters any of which is not
  part of the character set allowed for function names here. Hence, you
  can delimit the names by blanks, tabs, dollar signs or pretty much
  anyting your want.
  
  B<xds_encode> will return either B<XDS_OK> (everything OK),
  B<XDS_ERR_NO_MEM> (failed allocating memory for intenal buffering),
  B<XDS_ERR_OVERFLOW> (can't expand internal buffer because it's owned
  by the application), B<XDS_ERR_INVALID_ARG> (parameters don't make
  sense), B<XDS_ERR_TYPE_MISMATCH> (specified callback can't handle this
  data type), and B<XDS_ERR_UNKNOW_ENGINE> (unknown call back name used
  in I<fmt>).
  
  =item int B<xds_decode>(xds_t* I<xds>, const char* I<fmt>, ...);
  
  Like B<xds_encode>, only the other way round.
  
  =item int B<xds_vencode>(xds_t* I<xds>, const char* I<fmt>, va_list I<args>);
  
  See B<xds_encode>.
  
  =item int B<xds_vdecode>(xds_t* I<xds>, const char* I<fmt>, va_list I<args>);
  
  See B<xds_decode>.
  
  =back
  
  =cut
  Index: ossp-pkg/srpc/libxds/xds_engine_xdr.c
  ============================================================
  $ cvs update -p -r1.1 xds_engine_xdr.c
  /* 
   * XDS - OSSP Extensible Data Serialization Library Copyright (c) 2001 The
   * OSSP Project (http://www.ossp.org/) Copyright (c) 2001 Cable & Wireless
   * Deutschland (http://www.cw.com/de/)
   * 
   * This file is part of OSSP XDS, an extensible data serialization library
   * which can be found at http://www.ossp.com/pkg/xds/.
   * 
   * Permission to use, copy, modify, and distribute this software for any
   * purpose with or without fee is hereby granted, provided that the above
   * copyright notice and this permission notice appear in all copies.
   * 
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
   * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 
   * EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR CONTRIBUTORS BE
   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
   * POSSIBILITY OF SUCH DAMAGE. */
  
  #include <string.h>
  #include "xds.h"
  
  int xdr_encode_int32(xds_t * xds, void *engine_context,
                       void *buffer, size_t buffer_size,
                       size_t * used_buffer_size, va_list * args)
  {
      xds_uint32_t tmp;
      xds_int32_t value;
  
      xds_init_encoding_engine(4);
  
      /* Get value and format it into the buffer. */
  
      value = va_arg(*args, xds_uint32_t);
      if (value < 0) {
          value = 0 - value;
          tmp = 0 - (xds_uint32_t) value;
      }
      else
          tmp = (xds_uint32_t) value;
      ((xds_uint8_t *) buffer)[0] = (tmp >> 24) & 0x000000ff;
      ((xds_uint8_t *) buffer)[1] = (tmp >> 16) & 0x000000ff;
      ((xds_uint8_t *) buffer)[2] = (tmp >> 8) & 0x000000ff;
      ((xds_uint8_t *) buffer)[3] = (tmp >> 0) & 0x000000ff;
  
      /* Done. */
  
      return XDS_OK;
  }
  
  int xdr_decode_int32(xds_t * xds, void *engine_context,
                       void *buffer, size_t buffer_size,
                       size_t * used_buffer_size, va_list * args)
  {
      xds_int32_t *value;
      xds_uint32_t tmp;
  
      xds_init_decoding_engine(4);
  
      /* Get value and format it into the buffer. */
  
      value = va_arg(*args, xds_int32_t *);
      xds_check_parameter(value != NULL);
  
      if (((xds_uint8_t *) buffer)[0] & 0x80) {   /* negative number */
          tmp = ((xds_uint8_t *) buffer)[0];
          tmp = tmp << 8;
          tmp += ((xds_uint8_t *) buffer)[1];
          tmp = tmp << 8;
          tmp += ((xds_uint8_t *) buffer)[2];
          tmp = tmp << 8;
          tmp += ((xds_uint8_t *) buffer)[3];
          tmp = 0 - tmp;
          *value = 0 - (int32_t) tmp;
      }
      else {                             /* positive number */
          *value = ((xds_uint8_t *) buffer)[0];
          *value = *value << 8;
          *value += ((xds_uint8_t *) buffer)[1];
          *value = *value << 8;
          *value += ((xds_uint8_t *) buffer)[2];
          *value = *value << 8;
          *value += ((xds_uint8_t *) buffer)[3];
      }
  
      /* Done. */
  
      return XDS_OK;
  }
  
  int xdr_encode_uint32(xds_t * xds, void *engine_context,
                        void *buffer, size_t buffer_size,
                        size_t * used_buffer_size, va_list * args)
  {
      xds_uint32_t value;
  
      xds_init_encoding_engine(4);
  
      /* Get value and format it into the buffer. */
  
      value = va_arg(*args, xds_uint32_t);
      ((xds_uint8_t *) buffer)[0] = (value >> 24) & 0x000000ff;
      ((xds_uint8_t *) buffer)[1] = (value >> 16) & 0x000000ff;
      ((xds_uint8_t *) buffer)[2] = (value >> 8) & 0x000000ff;
      ((xds_uint8_t *) buffer)[3] = (value >> 0) & 0x000000ff;
  
      /* Done. */
  
      return XDS_OK;
  }
  
  int xdr_decode_uint32(xds_t * xds, void *engine_context,
                        void *buffer, size_t buffer_size,
                        size_t * used_buffer_size, va_list * args)
  {
      xds_uint32_t *value;
  
      xds_init_decoding_engine(4);
  
      /* Get value and format it into the buffer. */
  
      value = va_arg(*args, xds_uint32_t *);
      xds_check_parameter(value != NULL);
  
      *value = ((xds_uint8_t *) buffer)[0];
      *value = *value << 8;
      *value += ((xds_uint8_t *) buffer)[1];
      *value = *value << 8;
      *value += ((xds_uint8_t *) buffer)[2];
      *value = *value << 8;
      *value += ((xds_uint8_t *) buffer)[3];
  
      /* Done. */
  
      return XDS_OK;
  }
  
  #ifdef XDS_HAVE_64_BIT_SUPPORT
  
  int xdr_encode_int64(xds_t * xds, void *engine_context,
                       void *buffer, size_t buffer_size,
                       size_t * used_buffer_size, va_list * args)
  {
      xds_uint64_t tmp;
      xds_int64_t value;
  
      xds_init_encoding_engine(8);
  
      /* Get value and format it into the buffer. */
  
      value = va_arg(*args, xds_uint64_t);
      if (value < 0) {
          value = 0 - value;
          tmp = 0 - (xds_uint64_t) value;
      }
      else
          tmp = (xds_uint64_t) value;
      ((xds_uint8_t *) buffer)[0] = (tmp >> 56) & 0x000000ff;
      ((xds_uint8_t *) buffer)[1] = (tmp >> 48) & 0x000000ff;
      ((xds_uint8_t *) buffer)[2] = (tmp >> 40) & 0x000000ff;
      ((xds_uint8_t *) buffer)[3] = (tmp >> 32) & 0x000000ff;
      ((xds_uint8_t *) buffer)[4] = (tmp >> 24) & 0x000000ff;
      ((xds_uint8_t *) buffer)[5] = (tmp >> 16) & 0x000000ff;
      ((xds_uint8_t *) buffer)[6] = (tmp >> 8) & 0x000000ff;
      ((xds_uint8_t *) buffer)[7] = (tmp >> 0) & 0x000000ff;
  
      /* Done. */
  
      return XDS_OK;
  }
  
  int xdr_decode_int64(xds_t * xds, void *engine_context,
                       void *buffer, size_t buffer_size,
                       size_t * used_buffer_size, va_list * args)
  {
      xds_int64_t *value;
      xds_uint64_t tmp;
  
      xds_init_decoding_engine(8);
  
      /* Get value and format it into the buffer. */
  
      value = va_arg(*args, xds_int64_t *);
      xds_check_parameter(value != NULL);
  
      if (((xds_uint8_t *) buffer)[0] & 0x80) {   /* negative number */
          tmp = ((xds_uint8_t *) buffer)[0];
          tmp = tmp << 8;
          tmp += ((xds_uint8_t *) buffer)[1];
          tmp = tmp << 8;
          tmp += ((xds_uint8_t *) buffer)[2];
          tmp = tmp << 8;
          tmp += ((xds_uint8_t *) buffer)[3];
          tmp = tmp << 8;
          tmp += ((xds_uint8_t *) buffer)[4];
          tmp = tmp << 8;
          tmp += ((xds_uint8_t *) buffer)[5];
          tmp = tmp << 8;
          tmp += ((xds_uint8_t *) buffer)[6];
          tmp = tmp << 8;
          tmp += ((xds_uint8_t *) buffer)[7];
          tmp = 0 - tmp;
          *value = 0 - (xds_int64_t) tmp;
      }
      else {                             /* positive number */
          *value = ((xds_uint8_t *) buffer)[0];
          *value = *value << 8;
          *value += ((xds_uint8_t *) buffer)[1];
          *value = *value << 8;
          *value += ((xds_uint8_t *) buffer)[2];
          *value = *value << 8;
          *value += ((xds_uint8_t *) buffer)[3];
          *value = *value << 8;
          *value += ((xds_uint8_t *) buffer)[4];
          *value = *value << 8;
          *value += ((xds_uint8_t *) buffer)[5];
          *value = *value << 8;
          *value += ((xds_uint8_t *) buffer)[6];
          *value = *value << 8;
          *value += ((xds_uint8_t *) buffer)[7];
      }
  
      /* Done. */
  
      return XDS_OK;
  }
  
  int xdr_encode_uint64(xds_t * xds, void *engine_context,
                        void *buffer, size_t buffer_size,
                        size_t * used_buffer_size, va_list * args)
  {
      xds_uint64_t value;
  
      xds_init_encoding_engine(8);
  
      /* Get value and format it into the buffer. */
  
      value = va_arg(*args, xds_uint64_t);
      ((xds_uint8_t *) buffer)[0] = (value >> 56) & 0x000000ff;
      ((xds_uint8_t *) buffer)[1] = (value >> 48) & 0x000000ff;
      ((xds_uint8_t *) buffer)[2] = (value >> 40) & 0x000000ff;
      ((xds_uint8_t *) buffer)[3] = (value >> 32) & 0x000000ff;
      ((xds_uint8_t *) buffer)[4] = (value >> 24) & 0x000000ff;
      ((xds_uint8_t *) buffer)[5] = (value >> 16) & 0x000000ff;
      ((xds_uint8_t *) buffer)[6] = (value >> 8) & 0x000000ff;
      ((xds_uint8_t *) buffer)[7] = (value >> 0) & 0x000000ff;
  
      /* Done. */
  
      return XDS_OK;
  }
  
  int xdr_decode_uint64(xds_t * xds, void *engine_context,
                        void *buffer, size_t buffer_size,
                        size_t * used_buffer_size, va_list * args)
  {
      xds_uint64_t *value;
  
      xds_init_decoding_engine(8);
  
      /* Get value and format it into the buffer. */
  
      value = va_arg(*args, xds_uint64_t *);
      xds_check_parameter(value != NULL);
  
      *value = ((xds_uint8_t *) buffer)[0];
      *value = *value << 8;
      *value += ((xds_uint8_t *) buffer)[1];
      *value = *value << 8;
      *value += ((xds_uint8_t *) buffer)[2];
      *value = *value << 8;
      *value += ((xds_uint8_t *) buffer)[3];
      *value = *value << 8;
      *value += ((xds_uint8_t *) buffer)[4];
      *value = *value << 8;
      *value += ((xds_uint8_t *) buffer)[5];
      *value = *value << 8;
      *value += ((xds_uint8_t *) buffer)[6];
      *value = *value << 8;
      *value += ((xds_uint8_t *) buffer)[7];
  
      /* Done. */
  
      return XDS_OK;
  }
  
  #endif /* XDS_HAVE_64_BIT_SUPPORT */
  
  int xdr_encode_double(xds_t * xds, void *engine_context,
                        void *buffer, size_t buffer_size,
                        size_t * used_buffer_size, va_list * args)
  {
      return -1;
  }
  
  int xdr_decode_double(xds_t * xds, void *engine_context,
                        void *buffer, size_t buffer_size,
                        size_t * used_buffer_size, va_list * args)
  {
      return -1;
  }
  
  int xdr_encode_string(xds_t * xds, void *engine_context,
                        void *buffer, size_t buffer_size,
                        size_t * used_buffer_size, va_list * args)
  {
      char *p;
      size_t p_len;
      size_t padding;
  
      xds_init_encoding_engine(4);
  
      /* Get value from stack and calculate the correct amount of padding. */
  
      p = va_arg(*args, char *);
      xds_check_parameter(p != NULL);
      p_len = strlen(p);
      padding = (4 - (p_len & 0x03)) & 0x03;
      assert((p_len + padding) % 4 == 0);
  
      /* We need (4 + p_len + padding) bytes in the buffer to format our
       * parameter. If we don't have them, return an underflow error. */
  
      *used_buffer_size = 4 + p_len + padding;
      if (buffer_size < *used_buffer_size)
          return XDS_ERR_OVERFLOW;
  
      /* Format the values into the buffer. */
  
      ((xds_uint8_t *) buffer)[0] = (p_len >> 24) & 0x000000ff;
      ((xds_uint8_t *) buffer)[1] = (p_len >> 16) & 0x000000ff;
      ((xds_uint8_t *) buffer)[2] = (p_len >> 8) & 0x000000ff;
      ((xds_uint8_t *) buffer)[3] = (p_len >> 0) & 0x000000ff;
      memmove((xds_uint8_t *) buffer + 4, p, p_len);
      memset((xds_uint8_t *) buffer + 4 + p_len, 0, padding);
  
      /* Done. */
  
      return XDS_OK;
  }
  
  int xdr_decode_string(xds_t * xds, void *engine_context,
                        void *buffer, size_t buffer_size,
                        size_t * used_buffer_size, va_list * args)
  {
      char **p;
      size_t p_len;
      size_t padding;
  
      xds_init_decoding_engine(4);
  
      p = va_arg(*args, char **);
      xds_check_parameter(p != NULL);
  
      /* Read the size of the message. */
  
      p_len = ((xds_uint8_t *) buffer)[0];
      p_len = p_len << 8;
      p_len += ((xds_uint8_t *) buffer)[1];
      p_len = p_len << 8;
      p_len += ((xds_uint8_t *) buffer)[2];
      p_len = p_len << 8;
      p_len += ((xds_uint8_t *) buffer)[3];
  
      /* Calculate padding. */
  
      padding = (4 - (p_len & 0x03)) & 0x03;
  
      /* Do we have enough data?. */
  
      *used_buffer_size = 4 + p_len + padding;
      if (buffer_size < *used_buffer_size)
          return XDS_ERR_UNDERFLOW;
  
      /* Allocate buffer for the data. */
  
      *p = (char *)malloc(p_len + 1);
      if (*p == NULL)
          return XDS_ERR_NO_MEM;
  
      /* Copy data into the buffer. */
  
      memmove(*p, (xds_uint8_t *) buffer + 4, p_len);
      ((xds_uint8_t *) buffer)[4 + p_len] = '\0';
  
      /* Done. */
  
      return XDS_OK;
  }
  
  int xdr_encode_octetstream(xds_t * xds, void *engine_context,
                             void *buffer, size_t buffer_size,
                             size_t * used_buffer_size, va_list * args)
  {
      xds_uint8_t *p;
      size_t p_len;
      size_t padding;
  
      xds_init_encoding_engine(4);
  
      /* Get value from stack and calculate the correct amount of padding. */
  
      p = (xds_uint8_t *) va_arg(*args, void *);
      xds_check_parameter(p != NULL);
      p_len = va_arg(*args, size_t);
      padding = (4 - (p_len & 0x03)) & 0x03;
      assert((p_len + padding) % 4 == 0);
  
      /* We need (4 + p_len + padding) bytes in the buffer to format our
       * parameter. If we don't have them, return an underflow error. */
  
      *used_buffer_size = 4 + p_len + padding;
      if (buffer_size < *used_buffer_size)
          return XDS_ERR_OVERFLOW;
  
      /* Format the values into the buffer. */
  
      ((xds_uint8_t *) buffer)[0] = (p_len >> 24) & 0x000000ff;
      ((xds_uint8_t *) buffer)[1] = (p_len >> 16) & 0x000000ff;
      ((xds_uint8_t *) buffer)[2] = (p_len >> 8) & 0x000000ff;
      ((xds_uint8_t *) buffer)[3] = (p_len >> 0) & 0x000000ff;
      memmove((xds_uint8_t *) buffer + 4, p, p_len);
      memset((xds_uint8_t *) buffer + 4 + p_len, 0, padding);
  
      /* Done. */
  
      return XDS_OK;
  }
  
  int xdr_decode_octetstream(xds_t * xds, void *engine_context,
                             void *buffer, size_t buffer_size,
                             size_t * used_buffer_size, va_list * args)
  {
      void **p;
      size_t *p_len;
      size_t padding;
  
      xds_init_decoding_engine(4);
  
      p = va_arg(*args, void **);
      p_len = va_arg(*args, size_t *);
      xds_check_parameter(p != NULL);
      xds_check_parameter(p_len != NULL);
  
      /* Read the size of the message. */
  
      *p_len = ((xds_uint8_t *) buffer)[0];
      *p_len = *p_len << 8;
      *p_len += ((xds_uint8_t *) buffer)[1];
      *p_len = *p_len << 8;
      *p_len += ((xds_uint8_t *) buffer)[2];
      *p_len = *p_len << 8;
      *p_len += ((xds_uint8_t *) buffer)[3];
  
      /* Calculate padding. */
  
      padding = (4 - (*p_len & 0x03)) & 0x03;
  
      /* Do we have enough data?. */
  
      *used_buffer_size = 4 + *p_len + padding;
      if (buffer_size < *used_buffer_size)
          return XDS_ERR_UNDERFLOW;
  
      /* Allocate buffer for the data. */
  
      *p = malloc(*p_len);
      if (*p == NULL)
          return XDS_ERR_NO_MEM;
  
      /* Copy data into the buffer. */
  
      memmove(*p, (xds_uint8_t *) buffer + 4, *p_len);
  
      /* Done. */
  
      return XDS_OK;
  }
  Index: ossp-pkg/srpc/libxds/xds_engine_xml.c
  ============================================================
  $ cvs update -p -r1.1 xds_engine_xml.c
  /* 
   * XDS - OSSP Extensible Data Serialization Library Copyright (c) 2001 The
   * OSSP Project (http://www.ossp.org/) Copyright (c) 2001 Cable & Wireless
   * Deutschland (http://www.cw.com/de/)
   * 
   * This file is part of OSSP XDS, an extensible data serialization library
   * which can be found at http://www.ossp.com/pkg/xds/.
   * 
   * Permission to use, copy, modify, and distribute this software for any
   * purpose with or without fee is hereby granted, provided that the above
   * copyright notice and this permission notice appear in all copies.
   * 
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
   * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 
   * EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR CONTRIBUTORS BE
   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
   * POSSIBILITY OF SUCH DAMAGE. */
  
  #include <string.h>
  #include <ctype.h>
  #include <stdio.h>
  #include "xds.h"
  
  const char xds_xml_begin_text[] =
      "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\">\n"
      "<!DOCTYPE xds SYSTEM \"http://www.ossp.org/pkg/xds/xds-xml.dtd\">\n"
      "<xds>\n";
  
  int xml_encode_begin(xds_t * xds, void *engine_context,
                       void *buffer, size_t buffer_size,
                       size_t * used_buffer_size, va_list * args)
  {
      xds_init_encoding_engine(strlen(xds_xml_begin_text));
      memmove(buffer, xds_xml_begin_text, strlen(xds_xml_begin_text));
      return XDS_OK;
  }
  
  int xml_decode_begin(xds_t * xds, void *engine_context,
                       void *buffer, size_t buffer_size,
                       size_t * used_buffer_size, va_list * args)
  {
      xds_init_encoding_engine(strlen(xds_xml_begin_text));
      if (strncasecmp(buffer, xds_xml_begin_text, strlen(xds_xml_begin_text)) !=
          0)
          return XDS_ERR_TYPE_MISMATCH;
      return XDS_OK;
  }
  
  const char xds_xml_end_text[] = "</xds>\n";
  
  int xml_encode_end(xds_t * xds, void *engine_context,
                     void *buffer, size_t buffer_size,
                     size_t * used_buffer_size, va_list * args)
  {
      xds_init_encoding_engine(strlen(xds_xml_end_text));
      memmove(buffer, xds_xml_end_text, strlen(xds_xml_end_text));
      return XDS_OK;
  }
  
  int xml_decode_end(xds_t * xds, void *engine_context,
                     void *buffer, size_t buffer_size,
                     size_t * used_buffer_size, va_list * args)
  {
      xds_init_decoding_engine(strlen(xds_xml_end_text));
      if (strncasecmp(buffer, xds_xml_end_text, strlen(xds_xml_end_text)) != 0)
          return XDS_ERR_TYPE_MISMATCH;
      return XDS_OK;
  }
  
  int xml_encode_int32(xds_t * xds, void *engine_context,
                       void *buffer, size_t buffer_size,
                       size_t * used_buffer_size, va_list * args)
  {
      xds_int32_t value;
      char buf[32];
      size_t i, j;
      char *p;
      int negative;
  
      xds_init_encoding_engine(7 + 8 + 11);
  
      /* Get the value and format it into our buffer. Keep track of the length
       * of the formatted result. */
  
      value = va_arg(*args, xds_int32_t);
      if (value < 0) {
          negative = XDS_TRUE;
          value = 0 - value;
      }
      else
          negative = XDS_FALSE;
      i = 0;
      do {
          unsigned char remainder = value % 10;
          value = value / 10;
          buf[i++] = '0' + remainder;
      }
      while (value != 0);
      if (negative)
          buf[i++] = '-';
  
      /* Now that we know the correct size of our data's representation, write
       * it into the buffer. */
  
      *used_buffer_size = 7 + 8 + i;
      p = buffer;
      memmove(p, "<int32>", 7);
      p += 7;
      for (j = i; j > 0;) {
          *p++ = buf[--j];
      }
      memmove(p, "</int32>", 8);
  
      return XDS_OK;
  }
  
  int xml_decode_int32(xds_t * xds, void *engine_context,
                       void *buffer, size_t buffer_size,
                       size_t * used_buffer_size, va_list * args)
  {
      xds_int32_t *value;
      char *p;
      int negative;
  
      xds_init_decoding_engine(7 + 8 + 1);
  
      /* Does the opening XML tag match? */
  
      if (strncasecmp(buffer, "<int32>", 7) != 0)
          return XDS_ERR_TYPE_MISMATCH;
  
      /* Decode the representation of the value. */
  
      value = va_arg(*args, xds_int32_t *);
      *value = 0;
      p = (char *)buffer + 7;
      if (*p == '-') {
          negative = XDS_TRUE;
          ++p;
      }
      else
          negative = XDS_FALSE;
      while (isdigit((int)*p)) {
          if (p >= (char *)buffer + buffer_size)
              return XDS_ERR_UNDERFLOW;
          *value *= 10;
          *value += *p++ - '0';
      }
      if (negative)
          *value = 0 - *value;
  
      /* Does the closing XML tag match? */
  
      if (p + 8 > (char *)buffer + buffer_size)
          return XDS_ERR_UNDERFLOW;
      else if (strncasecmp(p, "</int32>", 8) != 0)
          return XDS_ERR_TYPE_MISMATCH;
  
      *used_buffer_size = p + 8 - (char *)buffer;
      return XDS_OK;
  }
  
  int xml_encode_uint32(xds_t * xds, void *engine_context,
                        void *buffer, size_t buffer_size,
                        size_t * used_buffer_size, va_list * args)
  {
      xds_uint32_t value;
      char buf[32];
      size_t i, j;
      char *p;
  
      xds_init_encoding_engine(8 + 9 + 10);
  
      /* Format value into our buffer. */
  
      value = va_arg(*args, xds_uint32_t);
      i = 0;
      do {
          unsigned char remainder = value % 10;
          value = value / 10;
          buf[i++] = '0' + remainder;
      }
      while (value != 0);
  
      /* Store the correct buffer size. */
  
      *used_buffer_size = 8 + 9 + i;
  
      /* Write result into the buffer. */
  
      p = buffer;
      memmove(p, "<uint32>", 8);
      p += 8;
      for (j = i; j > 0;) {
          *p++ = buf[--j];
      }
      memmove(p, "</uint32>", 9);
  
      return XDS_OK;
  }
  
  int xml_decode_uint32(xds_t * xds, void *engine_context,
                        void *buffer, size_t buffer_size,
                        size_t * used_buffer_size, va_list * args)
  {
      xds_uint32_t *value;
      char *p;
  
      xds_init_decoding_engine(8 + 9 + 1);
  
      /* Does the opening XML tag match? */
  
      if (strncasecmp(buffer, "<uint32>", 8) != 0)
          return XDS_ERR_TYPE_MISMATCH;
  
      /* Decode the representation of the value. */
  
      value = va_arg(*args, xds_uint32_t *);
      *value = 0;
      p = (char *)buffer + 8;
      while (isdigit((int)*p)) {
          if (p >= (char *)buffer + buffer_size)
              return XDS_ERR_UNDERFLOW;
          *value *= 10;
          *value += *p++ - '0';
      }
  
      /* Does the closing XML tag match? */
  
      if (p + 9 > (char *)buffer + buffer_size)
          return XDS_ERR_UNDERFLOW;
      else if (strncasecmp(p, "</uint32>", 9) != 0)
          return XDS_ERR_TYPE_MISMATCH;
  
      *used_buffer_size = p + 9 - (char *)buffer;
      return XDS_OK;
  }
  
  #ifdef XDS_HAVE_64_BIT_SUPPORT
  
  int xml_encode_int64(xds_t * xds, void *engine_context,
                       void *buffer, size_t buffer_size,
                       size_t * used_buffer_size, va_list * args)
  {
      xds_int64_t value;
      char buf[64];
      size_t i, j;
      char *p;
      int negative;
  
      xds_init_encoding_engine(7 + 8 + 21);
  
      /* Format value into our buffer. */
  
      value = va_arg(*args, xds_int64_t);
      if (value < 0) {
          negative = XDS_TRUE;
          value = 0 - value;
      }
      else
          negative = XDS_FALSE;
      i = 0;
      do {
          unsigned char remainder = value % 10;
          value = value / 10;
          buf[i++] = '0' + remainder;
      }
      while (value != 0);
      if (negative)
          buf[i++] = '-';
  
      /* Store the correct buffer size. */
  
      *used_buffer_size = 7 + 8 + i;
  
      /* Write result into the buffer. */
  
      p = buffer;
      memmove(p, "<int64>", 7);
      p += 7;
      for (j = i; j > 0;) {
          *p++ = buf[--j];
      }
      memmove(p, "</int64>", 8);
  
      return XDS_OK;
  }
  
  int xml_decode_int64(xds_t * xds, void *engine_context,
                       void *buffer, size_t buffer_size,
                       size_t * used_buffer_size, va_list * args)
  {
      xds_int64_t *value;
      char *p;
      int negative;
  
      xds_init_decoding_engine(7 + 8 + 1);
  
      /* Does the opening XML tag match? */
  
      if (strncasecmp(buffer, "<int64>", 7) != 0)
          return XDS_ERR_TYPE_MISMATCH;
  
      /* Decode the representation of the value. */
  
      value = va_arg(*args, xds_int64_t *);
      *value = 0;
      p = (char *)buffer + 7;
      if (*p == '-') {
          negative = XDS_TRUE;
          ++p;
      }
      else
          negative = XDS_FALSE;
      while (isdigit((int)*p)) {
          if (p >= (char *)buffer + buffer_size)
              return XDS_ERR_UNDERFLOW;
          *value *= 10;
          *value += *p++ - '0';
      }
      if (negative)
          *value = 0 - *value;
  
      /* Does the closing XML tag match? */
  
      if (p + 8 > (char *)buffer + buffer_size)
          return XDS_ERR_UNDERFLOW;
      else if (strncasecmp(p, "</int64>", 8) != 0)
          return XDS_ERR_TYPE_MISMATCH;
  
      *used_buffer_size = p + 8 - (char *)buffer;
      return XDS_OK;
  }
  
  int xml_encode_uint64(xds_t * xds, void *engine_context,
                        void *buffer, size_t buffer_size,
                        size_t * used_buffer_size, va_list * args)
  {
      xds_uint64_t value;
      char buf[64];
      size_t i, j;
      char *p;
  
      xds_init_encoding_engine(8 + 9 + 20);
  
      /* Format value into our buffer. */
  
      value = va_arg(*args, xds_uint64_t);
      i = 0;
      do {
          unsigned char remainder = value % 10;
          value = value / 10;
          buf[i++] = '0' + remainder;
      }
      while (value != 0);
  
      /* Store the correct buffer size. */
  
      *used_buffer_size = 8 + 9 + i;
  
      /* Write result into the buffer. */
  
      p = buffer;
      memmove(p, "<uint64>", 8);
      p += 8;
      for (j = i; j > 0;) {
          *p++ = buf[--j];
      }
      memmove(p, "</uint64>", 9);
  
      return XDS_OK;
  }
  
  int xml_decode_uint64(xds_t * xds, void *engine_context,
                        void *buffer, size_t buffer_size,
                        size_t * used_buffer_size, va_list * args)
  {
      xds_uint64_t *value;
      char *p;
  
      xds_init_decoding_engine(8 + 9 + 1);
  
      /* Does the opening XML tag match? */
  
      if (strncasecmp(buffer, "<uint64>", 8) != 0)
          return XDS_ERR_TYPE_MISMATCH;
  
      /* Decode the representation of the value. */
  
      value = va_arg(*args, xds_uint64_t *);
      *value = 0;
      p = (char *)buffer + 8;
      while (isdigit((int)*p)) {
          if (p >= (char *)buffer + buffer_size)
              return XDS_ERR_UNDERFLOW;
          *value *= 10;
          *value += *p++ - '0';
      }
  
      /* Does the closing XML tag match? */
  
      if (p + 9 > (char *)buffer + buffer_size)
          return XDS_ERR_UNDERFLOW;
      else if (strncasecmp(p, "</uint64>", 9) != 0)
          return XDS_ERR_TYPE_MISMATCH;
  
      *used_buffer_size = p + 9 - (char *)buffer;
      return XDS_OK;
  }
  
  #endif /* XDS_HAVE_64_BIT_SUPPORT */
  
  int xml_encode_double(xds_t * xds, void *engine_context,
                        void *buffer, size_t buffer_size,
                        size_t * used_buffer_size, va_list * args)
  {
      return -1;
  }
  
  int xml_decode_double(xds_t * xds, void *engine_context,
                        void *buffer, size_t buffer_size,
                        size_t * used_buffer_size, va_list * args)
  {
      return -1;
  }
  
  #define bits(c) (0x80 | ((c) & 0x3F))
  #define put(c)  *strptr++ = (c);
  #define putbits(c)  put(bits(c))
  #define finish()    *strptr = '\0'
  
  static char *sputu8(xds_uint32_t c, char *strptr)
  {
      if (strptr == NULL)
          return NULL;
  
      if (c < 0x80) {
          put(c);
          finish();
      }
      else if (c < 0x800) {
          put(0xC0 | (c >> 6));
          putbits(c);
          finish();
      }
      else if (c < 0x10000) {
          put(0xE0 | (c >> 12));
          putbits(c >> 6);
          putbits(c);
          finish();
      }
      else if (c < 0x200000) {
          put(0xF0 | (c >> 18));
          putbits(c >> 12);
          putbits(c >> 6);
          putbits(c);
          finish();
      }
      else if (c < 0x400000) {
          put(0xF8 | (c >> 24));
          putbits(c >> 18);
          putbits(c >> 12);
          putbits(c >> 6);
          putbits(c);
          finish();
      }
      else if (c < 0x80000000) {
          put(0xFC | (c >> 30));
          putbits(c >> 24);
          putbits(c >> 18);
          putbits(c >> 12);
          putbits(c >> 6);
          putbits(c);
          finish();
      }
      else
          finish();                      /* Not a valid Unicode "character" */
  
      return strptr;
  }
  
  static const char TAG_OPEN[] = "<string>";
  static const char TAG_CLOSE[] = "</string>";
  static const size_t TAG_OPEN_LEN = sizeof (TAG_OPEN) - 1;
  static const size_t TAG_CLOSE_LEN = sizeof (TAG_CLOSE) - 1;
  
  int xml_encode_string(xds_t * xds, void *engine_context,
                        void *buffer, size_t buffer_size,
                        size_t * used_buffer_size, va_list * args)
  {
      char *src;
      size_t src_len;
      char *dst;
      size_t dst_size;
      char *tmp;
  
      /* Setup the engine. We need at least space for our tags; how long the
       * actual content is going to be will be seen soon. */
  
      xds_init_encoding_engine(TAG_OPEN_LEN + TAG_CLOSE_LEN);
  
      /* Get the data from the stack. */
  
      src = va_arg(*args, char *);
      xds_check_parameter(src != NULL);
      src_len = strlen(src);
  
      /* Set up the target buffer. */
  
      dst = buffer;
      dst_size = buffer_size;
  
      /* Write the opening tag. */
  
      memmove(dst, TAG_OPEN, TAG_OPEN_LEN);
      dst += TAG_OPEN_LEN;
      dst_size -= TAG_OPEN_LEN;
  
      /* Format the data into the buffer. */
  
      while (src_len > 0 && dst_size > 0) {
          if (*((xds_uint8_t *) src) >= 0x80) {   /* UTF-8ify it. */
              if (dst_size >= 7) {
                  tmp = sputu8((xds_uint32_t) * ((xds_uint8_t *) src), dst);
                  ++src;
                  --src_len;
                  dst_size -= tmp - dst;
                  dst = tmp;
              }
              else
                  dst_size = 0;
          }
          else if (*src == '<') {        /* Turn into "&lt;". */
              if (dst_size >= 4) {
                  *dst++ = '&';
                  --dst_size;
                  *dst++ = 'l';
                  --dst_size;
                  *dst++ = 't';
                  --dst_size;
                  *dst++ = ';';
                  --dst_size;
                  ++src;
                  --src_len;
              }
              else
                  dst_size = 0;
          }
          else if (*src == '&') {        /* Turn into "&amp;". */
              if (dst_size >= 5) {
                  *dst++ = '&';
                  --dst_size;
                  *dst++ = 'a';
                  --dst_size;
                  *dst++ = 'm';
                  --dst_size;
                  *dst++ = 'p';
                  --dst_size;
                  *dst++ = ';';
                  --dst_size;
                  ++src;
                  --src_len;
              }
              else
                  dst_size = 0;
          }
          else if (*src == '>') {        /* Turn into "&gt;". */
              if (dst_size >= 4) {
                  *dst++ = '&';
                  --dst_size;
                  *dst++ = 'g';
                  --dst_size;
                  *dst++ = 't';
                  --dst_size;
                  *dst++ = ';';
                  --dst_size;
                  ++src;
                  --src_len;
              }
              else
                  dst_size = 0;
          }
          else {                         /* No special character; just copy it. 
                                          */
              *dst++ = *src++;
              --src_len;
              --dst_size;
          }
      }
      if (src_len > 0) {                 /* Target buffer was too small. */
          *used_buffer_size = buffer_size + 1;
          return XDS_ERR_OVERFLOW;
      }
  
      /* Write the closing tag. */
  
      memmove(dst, TAG_CLOSE, TAG_CLOSE_LEN);
      dst += TAG_CLOSE_LEN;
      dst_size -= TAG_CLOSE_LEN;
  
      /* Done. */
  
      *used_buffer_size = dst - (char *)buffer;
      return XDS_OK;
  }
  
  #define INVALID 0x80000000
  
  #define get(c)  c = *strptr++; \
      if (chars) (*chars)++; \
      if ((c) == 0) return (unsigned int)EOF
  
  static unsigned int sgetu8(unsigned char *strptr, int *chars)
  {
      unsigned int c;
      int i, iterations;
      unsigned char ch;
  
      if (chars)
          *chars = 0;
  
      if (strptr == NULL)
          return (unsigned int)EOF;
  
      get(c);
  
      if ((c & 0xFE) == 0xFC) {
          c &= 0x01;
          iterations = 5;
      }
      else if ((c & 0xFC) == 0xF8) {
          c &= 0x03;
          iterations = 4;
      }
      else if ((c & 0xF8) == 0xF0) {
          c &= 0x07;
          iterations = 3;
      }
      else if ((c & 0xF0) == 0xE0) {
          c &= 0x0F;
          iterations = 2;
      }
      else if ((c & 0xE0) == 0xC0) {
          c &= 0x1F;
          iterations = 1;
      }
      else if ((c & 0x80) == 0x80)
          return INVALID;
      else
          return c;
  
      for (i = 0; i < iterations; i++) {
          get(ch);
          if ((ch & 0xC0) != 0x80)
              return INVALID;
          c <<= 6;
          c |= ch & 0x3F;
      }
  
      return c;
  }
  
  int xml_decode_string(xds_t * xds, void *engine_context,
                        void *buffer, size_t buffer_size,
                        size_t * used_buffer_size, va_list * args)
  {
      char **target_buffer;
      char *src;
      size_t src_len;
      char *dst;
      int utf8_len;
      unsigned int rc;
  
      /* Setup the engine. We need at least space for our tags; how long the
       * actual content is going to be will be seen soon. */
  
      xds_init_encoding_engine(TAG_OPEN_LEN + TAG_CLOSE_LEN);
  
      /* Is the opening tag there? */
  
      if (strncasecmp(buffer, TAG_OPEN, TAG_OPEN_LEN) != 0)
          return XDS_ERR_TYPE_MISMATCH;
  
      /* Determine the length of the encoded data. */
  
      src = (char *)buffer + TAG_OPEN_LEN;
      for (src_len = 0; src[src_len] != '<'; ++src_len)
          if (src[src_len] == '\0')
              return XDS_ERR_TYPE_MISMATCH;
  
      /* Check the closing tag. */
  
      if (strncasecmp(src + src_len, TAG_CLOSE, TAG_CLOSE_LEN) != 0)
          return XDS_ERR_TYPE_MISMATCH;
      *used_buffer_size = TAG_OPEN_LEN + src_len + TAG_CLOSE_LEN;
  
      /* Allocate target buffer. */
  
      target_buffer = va_arg(*args, char **);
      xds_check_parameter(target_buffer != NULL);
      *target_buffer = dst = malloc(src_len + 1);
      if (dst == NULL)
          return XDS_ERR_NO_MEM;
  
      /* Decode the data into the target buffer. */
  
      while (src_len > 0) {
          if (*src == '&') {
              if (src_len >= 4 && strncmp(src, "&lt;", 4) == 0) {
                  *dst++ = '<';
                  src += 4;
                  src_len -= 4;
              }
              else if (src_len >= 4 && strncmp(src, "&gt;", 4) == 0) {
                  *dst++ = '>';
                  src += 4;
                  src_len -= 4;
              }
              else if (src_len >= 5 && strncmp(src, "&amp;", 5) == 0) {
                  *dst++ = '&';
                  src += 5;
                  src_len -= 5;
              }
              else {
                  free(dst);
                  return XDS_ERR_TYPE_MISMATCH;
              }
          }
          else if (*((xds_uint8_t *) src) >= 0x80) {
              rc = sgetu8((xds_uint8_t *) src, &utf8_len);
              if (rc == (unsigned int)EOF)
                  return XDS_ERR_UNDERFLOW;
              else if (rc == INVALID || rc > 255)
                  return XDS_ERR_TYPE_MISMATCH;
              *dst++ = (xds_uint8_t) rc;
              src += utf8_len;
              src_len -= utf8_len;
          }
          else {
              *dst++ = *src++;
              --src_len;
          }
      }
      *dst = '\0';
  
      /* Done. */
  
      return XDS_OK;
  }
  
  const char xds_base64[] =
      "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  const char xds_pad64 = '=';
  
  static int base64_encode(char *dst, size_t dstlen, unsigned char const *src,
                           size_t srclen)
  {
      size_t dstpos;
      unsigned char input[3];
      unsigned char output[4];
      int ocnt;
      size_t i;
  
      if (srclen == 0)
          return 0;
      if (dst == NULL) {
          /* just calculate required length of dst */
          dstlen = (((srclen + 2) / 3) * 4);
          return dstlen;
      }
  
      /* bulk encoding */
      dstpos = 0;
      ocnt = 0;
      while (srclen >= 3) {
          input[0] = *src++;
          input[1] = *src++;
          input[2] = *src++;
          srclen -= 3;
  
          output[0] = (input[0] >> 2);
          output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4);
          output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6);
          output[3] = (input[2] & 0x3f);
  
          if (dstpos + 4 > dstlen)
              return -1;
          dst[dstpos++] = xds_base64[output[0]];
          dst[dstpos++] = xds_base64[output[1]];
          dst[dstpos++] = xds_base64[output[2]];
          dst[dstpos++] = xds_base64[output[3]];
      }
  
      /* now worry about padding with remaining 1 or 2 bytes */
      if (srclen != 0) {
          input[0] = input[1] = input[2] = '\0';
          for (i = 0; i < srclen; i++)
              input[i] = *src++;
  
          output[0] = (input[0] >> 2);
          output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4);
          output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6);
  
          if (dstpos + 4 > dstlen)
              return -1;
          dst[dstpos++] = xds_base64[output[0]];
          dst[dstpos++] = xds_base64[output[1]];
          if (srclen == 1)
              dst[dstpos++] = xds_pad64;
          else
              dst[dstpos++] = xds_base64[output[2]];
          dst[dstpos++] = xds_pad64;
      }
  
      if (dstpos >= dstlen)
          return -1;
      dst[dstpos] = '\0';
  
      return dstpos;
  }
  
  int xml_encode_octetstream(xds_t * xds, void *engine_context,
                             void *buffer, size_t buffer_size,
                             size_t * used_buffer_size, va_list * args)
  {
      xds_uint8_t *src;
      size_t src_len;
  
      /* We need at least 27 byte for the starting and ending tag. */
  
      xds_init_encoding_engine(13 + 14);
  
      /* Get parameters from stack. */
  
      src = (xds_uint8_t *) va_arg(*args, void *);
      xds_check_parameter(src != NULL);
      src_len = va_arg(*args, size_t);
  
      /* Calculate how many bytes we'll need in buffer and make sure we have
       * them. */
  
      *used_buffer_size = base64_encode(NULL, 0, src, src_len);
      if (*used_buffer_size == (size_t) - 1)
          return XDS_ERR_UNKNOWN;
      else
          *used_buffer_size += 13 + 14;
      if (buffer_size < *used_buffer_size)
          return XDS_ERR_OVERFLOW;
  
      /* Format the data into the buffer. */
  
      memmove(buffer, "<octetstream>", 13);
      if (base64_encode((char *)buffer + 13, buffer_size - 13, src, src_len) <
          0)
          return XDS_ERR_UNKNOWN;
      memmove((char *)buffer + *used_buffer_size - 14, "</octetstream>", 14);
  
      /* Done. */
  
      return XDS_OK;
  }
  
  static int base64_decode(unsigned char *dst, size_t dstlen, char const *src,
                           size_t srclen)
  {
      int dstidx, state, ch = 0;
      unsigned char res;
      char *pos;
  
      if (srclen == 0)
          return 0;
      state = 0;
      dstidx = 0;
      res = 0;
      while (srclen-- > 0) {
          ch = *src++;
          if (isascii(ch) && isspace(ch)) /* Skip whitespace anywhere */
              continue;
          if (ch == xds_pad64)
              break;
          pos = strchr(xds_base64, ch);
          if (pos == 0)                  /* A non-base64 character */
              return -1;
          switch (state) {
              case 0:
                  if (dst != NULL) {
                      if ((size_t) dstidx >= dstlen)
                          return -1;
                      dst[dstidx] = ((pos - xds_base64) << 2);
                  }
                  state = 1;
                  break;
              case 1:
                  if (dst != NULL) {
                      if ((size_t) dstidx >= dstlen)
                          return -1;
                      dst[dstidx] |= ((pos - xds_base64) >> 4);
                      res = (((pos - xds_base64) & 0x0f) << 4);
                  }
                  dstidx++;
                  state = 2;
                  break;
              case 2:
                  if (dst != NULL) {
                      if ((size_t) dstidx >= dstlen)
                          return -1;
                      dst[dstidx] = res | ((pos - xds_base64) >> 2);
                      res = ((pos - xds_base64) & 0x03) << 6;
                  }
                  dstidx++;
                  state = 3;
                  break;
              case 3:
                  if (dst != NULL) {
                      if ((size_t) dstidx >= dstlen)
                          return -1;
                      dst[dstidx] = res | (pos - xds_base64);
                  }
                  dstidx++;
                  state = 0;
                  break;
              default:
                  break;
          }
      }
  
      /* 
       * We are done decoding Base-64 chars.  Let's see if we ended
       * on a byte boundary, and/or with erroneous trailing characters.
       */
  
      if (ch == xds_pad64) {             /* We got a pad char. */
          switch (state) {
              case 0:                /* Invalid = in first position */
              case 1:                /* Invalid = in second position */
                  return -1;
              case 2:                /* Valid, means one byte of info */
                  /* Skip any number of spaces. */
                  while (srclen > 0) {
                      ch = *src++;
                      --srclen;
                      if (!(isascii(ch) && isspace(ch)))
                          break;
                  }
                  /* Make sure there is another trailing = sign. */
                  if (ch != xds_pad64)
                      return -1;
                  /* FALLTHROUGH */
              case 3:                /* Valid, means two bytes of info */
                  /* 
                   * We know this char is an =.  Is there anything but
                   * whitespace after it?
                   */
                  while (srclen > 0) {
                      ch = *src++;
                      --srclen;
                      if (!(isascii(ch) && isspace(ch)))
                          return -1;
                  }
                  /* 
                   * Now make sure for cases 2 and 3 that the "extra"
                   * bits that slopped past the last full byte were
                   * zeros.  If we don't check them, they become a
                   * subliminal channel.
                   */
                  if (dst != NULL && res != 0)
                      return -1;
              default:
                  break;
          }
      }
      else {
          /* 
           * We ended by seeing the end of the string.  Make sure we
           * have no partial bytes lying around.
           */
          if (state != 0)
              return -1;
      }
  
      return dstidx;
  }
  
  int xml_decode_octetstream(xds_t * xds, void *engine_context,
                             void *buffer, size_t buffer_size,
                             size_t * used_buffer_size, va_list * args)
  {
      char *p;
      size_t p_len;
      xds_uint8_t **data;
      size_t *data_len;
  
      /* We need at least 27 byte for the starting and ending tag. */
  
      xds_init_encoding_engine(13 + 14);
  
      /* Get parameters from stack. */
  
      data = va_arg(*args, xds_uint8_t **);
      xds_check_parameter(data != NULL);
      data_len = va_arg(*args, size_t *);
  
      /* Check for the opening tag. */
  
      if (memcmp("<octetstream>", buffer, 13) != 0)
          return XDS_ERR_TYPE_MISMATCH;
  
      /* Find the end of the data and calculate the length of the
       * base64-encoded stuff. */
  
      p = (char *)buffer + 13;
      while (p < ((char *)buffer + buffer_size) && *p != '<')
          ++p;
      if (p == ((char *)buffer + buffer_size))
          return XDS_ERR_TYPE_MISMATCH;
      else {
          p_len = p - ((char *)buffer + 13);
          p = (char *)buffer + 13;
      }
  
      /* Now find out how long the decoded data is going to be, allocate a
       * buffer for it, and decode away. */
  
      *data_len = base64_decode(NULL, 0, p, p_len);
      if (*data_len == (size_t) - 1)
          return XDS_ERR_UNKNOWN;
      *data = malloc(*data_len);
      if (*data == NULL)
          return XDS_ERR_NO_MEM;
      base64_decode(*data, *data_len, p, p_len);
  
      /* Check that we have a closing tag. */
  
      if (memcmp(p + p_len, "</octetstream>", 14) != 0) {
          free(*data);
          return XDS_ERR_TYPE_MISMATCH;
      }
  
      /* Done. */
  
      *used_buffer_size = 13 + p_len + 14;
      return XDS_OK;
  }
  Index: ossp-pkg/srpc/libxds/xds_p.h
  ============================================================
  $ cvs update -p -r1.1 xds_p.h
  /* 
   * XDS - OSSP Extensible Data Serialization Library Copyright (c) 2001 The
   * OSSP Project (http://www.ossp.org/) Copyright (c) 2001 Cable & Wireless
   * Deutschland (http://www.cw.com/de/)
   * 
   * This file is part of OSSP XDS, an extensible data serialization library
   * which can be found at http://www.ossp.com/pkg/xds/.
   * 
   * Permission to use, copy, modify, and distribute this software for any
   * purpose with or without fee is hereby granted, provided that the above
   * copyright notice and this permission notice appear in all copies.
   * 
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
   * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 
   * EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR CONTRIBUTORS BE
   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
   * POSSIBILITY OF SUCH DAMAGE.
   * 
   * internal.h: internal C API */
  
  #ifndef __INTERNAL_H__
  #define __INTERNAL_H__
  
  #include "xds.h"
  
  #define XDS_INITIAL_BUFFER_CAPACITY  512
  #define XDS_INITIAL_ENGINES_CAPACITY  32
  
  typedef struct {
      char *name;
      xds_engine_t engine;
      void *context;
  } engine_map_t;
  
  struct xds_context {
      xds_mode_t mode;
  
      char *buffer;
      size_t buffer_len;
      size_t buffer_capacity;
      int we_own_buffer;
  
      engine_map_t *engines;
      size_t engines_len;
      size_t engines_capacity;
  };
  
  int xds_find_engine(const engine_map_t * engines, size_t last,
                      const char *name, size_t * pos);
  int xds_set_capacity(void **array, size_t * array_capacity,
                       size_t new_capacity, size_t elem_size,
                       size_t initial_capacity);
  
  #endif /* !defined(__INTERNAL_H__) */
  Index: ossp-pkg/srpc/libxds/xds_test.sh
  ============================================================
  $ cvs update -p -r1.1 xds_test.sh
  #!/bin/sh
  
  if [ $# -lt 1 ]; then
      echo "Usage: $0 test1.t [...]"
      exit 1
  fi
  
  RESCOLUMN=30
  numTests=0
  numFails=0
  
  echo "Running test suite:"
  
  pad=''
  n=$RESCOLUMN
  while [ $n -gt 0 ]; do
      pad="$pad."
      n=`expr $n - 1`
  done
  for suite in "$@"; do
      name=`expr "${suite}" : '\./\.\(.*\)\.t$'`
      echo "$name$pad" | awk '{ printf("%s ", substr($0, 0, n)); }' n=$RESCOLUMN
      numTests=`expr $numTests + 1`
      eval ./$suite >.${name}.l 2>&1
      if [ $? -eq 0 ]; then
          echo "OK"
      else
          numFails=`expr $numFails + 1`
          echo "FAILED"
      fi
  done
  
  echo
  if [ $numFails -eq 0 ]; then
      echo "Summary: All tests succeeded."
      exit 0
  else
      percent=`expr $numFails \* 100`
      percent=`expr $percent / $numTests`
      echo "Summary: $numFails of $numTests tests failed ($percent%)."
      exit 1
  fi
  Index: ossp-pkg/srpc/libxds/xds_test_lib.c
  ============================================================
  $ cvs update -p -r1.1 xds_test_lib.c
  /* 
   * XDS - OSSP Extensible Data Serialization Library Copyright (c) 2001 The
   * OSSP Project (http://www.ossp.org/) Copyright (c) 2001 Cable & Wireless
   * Deutschland (http://www.cw.com/de/)
   * 
   * This file is part of OSSP XDS, an extensible data serialization library
   * which can be found at http://www.ossp.com/pkg/xds/.
   * 
   * Permission to use, copy, modify, and distribute this software for any
   * purpose with or without fee is hereby granted, provided that the above
   * copyright notice and this permission notice appear in all copies.
   * 
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
   * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 
   * EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR CONTRIBUTORS BE
   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
   * POSSIBILITY OF SUCH DAMAGE. */
  
  #include <string.h>
  #include <errno.h>
  #include <stdio.h>
  #include "xds_p.h"
  
  #ifdef XDS_TEST_XDS_CORE
  
  int main()
  {
      xds_t *ctx[50];
      size_t i;
  
      /* Open a bunch of contextes and close them again. */
  
      for (i = 0; i < sizeof (ctx) / sizeof (xds_t *); ++i) {
          if (i % 2 == 0)
              ctx[i] = xds_init(XDS_ENCODE);
          else
              ctx[i] = xds_init(XDS_DECODE);
  
          if (ctx[i] == 0) {
              printf("Failed to initialize xds context: i = %d\n", i);
              return 1;
          }
      }
  
      for (i = 0; i < sizeof (ctx) / sizeof (xds_t *); ++i)
          xds_destroy(ctx[i]);
  
  #ifdef NDEBUG
      /* Check how the library deals with errorneous arguments. */
  
      if (xds_init((xds_mode_t) 42) != NULL || errno != EINVAL) {
          printf
              ("Called xds_init() with invalid mode but didn't get EINVAL.\n");
          return 1;
      }
  
      /* Call xds_destroy() with an invalid context and see whether we survive
       * that. */
  
      xds_destroy(NULL);
  #endif
  
      /* Everything went fine. */
  
      return 0;
  }
  
  #endif /* XDS_TEST_XDS_CORE */
  
  #ifdef XDS_TEST_XDS_FIND_ENGINE
  
  int main()
  {
      const engine_map_t engines[] = {
          {"alan", NULL, 0},
          {"berta", NULL, 0},
          {"caesar", NULL, 0},
          {"doris", NULL, 0},
          {"egon", NULL, 0},
          {"franziska", NULL, 0},
          {"gudrun", NULL, 0},
          {"heinz", NULL, 0},
          {"igor", NULL, 0},
          {"jamila", NULL, 0},
          {"karin", NULL, 0},
          {"louis", NULL, 0},
      };
      size_t engines_len = sizeof (engines) / sizeof (engine_map_t);
      size_t pos;
      size_t i;
  
      /* Does xds_find_engine handle an empty array? */
  
      if (xds_find_engine(engines, 0, "whatever", &pos)) {
          printf
              ("xds_find_engine() said 'whatever' would be in the array, but that's wrong.\n");
          exit(1);
      }
      if (pos != 0) {
          printf
              ("xds_find_engine() would insert 'whatever' at position %d, but 0 is correct.\n",
               pos);
          exit(1);
      }
  
      /* Search for every single entry in the array and check the results. */
  
      for (i = 0; i < engines_len; ++i) {
          if (!xds_find_engine(engines, engines_len, engines[i].name, &pos)) {
              printf
                  ("xds_find_engine() said '%s' wouldn't be in the array, but that's wrong.\n",
                   engines[i].name);
              exit(1);
          }
          if (pos != i) {
              printf
                  ("xds_find_engine() would insert '%s' at position %d, but %d is correct.\n",
                   engines[i].name, pos, i);
              exit(1);
          }
      }
  
      /* Search for non-existing name that would be inserted at the first
       * position. */
  
      if (xds_find_engine(engines, engines_len, "aaron", &pos)) {
          printf
              ("xds_find_engine() said 'aaron' would be in the array, but that's wrong.\n");
          exit(1);
      }
      if (pos != 0) {
          printf
              ("xds_find_engine() would insert 'aaron' at position %d, but 0 is correct.\n",
               pos);
          exit(1);
      }
  
      /* Search for non-existing name that would be inserted at last position. */
  
      if (xds_find_engine(engines, engines_len, "zerberos", &pos)) {
          printf
              ("xds_find_engine() said 'zerberos' would be in the array, but that's wrong.\n");
          exit(1);
      }
      if (pos != engines_len) {
          printf
              ("xds_find_engine() would insert 'zerberos' at position %d, but %d is correct.\n",
               pos, engines_len);
          exit(1);
      }
  
      /* Search for non-existing names that would be inserted at random
       * positions. */
  
      if (xds_find_engine(engines, engines_len, "balthasar", &pos)) {
          printf
              ("xds_find_engine() said 'balthasar' would be in the array, but that's wrong.\n");
          exit(1);
      }
      if (pos != 1) {
          printf
              ("xds_find_engine() would insert 'balthasar' at position %d, but 1 is correct.\n",
               pos);
          exit(1);
      }
  
      if (xds_find_engine(engines, engines_len, "bulli", &pos)) {
          printf
              ("xds_find_engine() said 'bulli' would be in the array, but that's wrong.\n");
          exit(1);
      }
      if (pos != 2) {
          printf
              ("xds_find_engine() would insert 'bulli' at position %d, but 2 is correct.\n",
               pos);
          exit(1);
      }
  
      if (xds_find_engine(engines, engines_len, "hildegard", &pos)) {
          printf
              ("xds_find_engine() said 'hildegard' would be in the array, but that's wrong.\n");
          exit(1);
      }
      if (pos != 8) {
          printf
              ("xds_find_engine() would insert 'hildegard' at position %d, but 8 is correct.\n",
               pos);
          exit(1);
      }
  
      if (xds_find_engine(engines, engines_len, "harald", &pos)) {
          printf
              ("xds_find_engine() said 'harald' would be in the array, but that's wrong.\n");
          exit(1);
      }
      if (pos != 7) {
          printf
              ("xds_find_engine() would insert 'harald' at position %d, but 7 is correct.\n",
               pos);
          exit(1);
      }
  
      /* Everything went fine. */
  
      return 0;
  }
  
  #endif /* XDS_TEST_XDS_FIND_ENGINE */
  
  #ifdef XDS_TEST_XDS_REGISTER
  
  static int dummy_engine(xds_t * xds, void *engine_context,
                          void *buffer, size_t buffer_size,
                          size_t * used_buffer_size, va_list * args)
  {
      return 0;
  }
  
  int main()
  {
      const char *test_names[] = {
          "foo",
          "bar",
          "zarah",
          "caesar",
          "claus",
          "heinz",
      };
      size_t test_names_len = sizeof (test_names) / sizeof (char *);
      xds_t *xds;
      size_t i;
  
      /* Create context. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL) {
          printf("Failed to initialize XDS context.\n");
          return 1;
      }
  
      /* Register the dummy callback under an invalid name to see whether the
       * routine fails correctly. */
  
      if (xds_register(xds, "abcdefh1230#", &dummy_engine, NULL) !=
          XDS_ERR_INVALID_ARG) {
          printf
              ("xds_register() illegally accepted an invalid name for the engine.\n");
          return 1;
      }
  
      /* Register the dummy callback under multiple names. */
  
      for (i = 0; i < test_names_len; ++i) {
          if (xds_register(xds, test_names[i], &dummy_engine, NULL) != XDS_OK) {
              printf("Failed to register engine for '%s'.\n", test_names[i]);
              return 1;
          }
      }
  
      /* Register the callback again, overwriting an existing entry. */
  
      if (xds_register(xds, "claus", &dummy_engine, NULL) != XDS_OK) {
          printf("Failed to re-register engine for 'claus'.\n");
          return 1;
      }
  
      /* Ensure that everything is in alphabetical order. */
  
      for (i = 1; i < xds->engines_len; ++i) {
          assert(xds->engines[i - 1].name != NULL);
          assert(xds->engines[i].name != NULL);
          if (strcmp(xds->engines[i - 1].name, xds->engines[i].name) >= 0) {
              printf("xds->engines is not in alphabetical order!\n");
              exit(1);
          }
      }
  
      /* Try to remove an unknown entry. */
  
      if (xds_unregister(xds, "abacadabra") != XDS_ERR_UNKNOWN_ENGINE) {
          printf
              ("xds_unregister() succeeded at removing 'abacadabra' even though it is not there.\n");
          exit(1);
      }
  
      /* Remove an entry from the middle. */
  
      if (xds_unregister(xds, test_names[test_names_len / 2]) != XDS_OK) {
          printf("xds_unregister() failed to remove '%s'.\n",
                 test_names[test_names_len / 2]);
          exit(1);
      }
  
      /* Remove the last entry. */
  
      assert(test_names_len > 0);
      if (xds_unregister(xds, test_names[test_names_len - 1]) != XDS_OK) {
          printf("xds_unregister() failed to remove '%s'.\n",
                 test_names[test_names_len - 1]);
          exit(1);
      }
  
      /* Remove the first entry. */
  
      if (xds_unregister(xds, test_names[0]) != XDS_OK) {
          printf("xds_unregister() failed to remove '%s'.\n", test_names[0]);
          exit(1);
      }
  
      /* Clean up. */
  
      xds_destroy(xds);
  
      /* Everything went fine. */
  
      return 0;
  }
  
  #endif /* XDS_TEST_XDS_REGISTER */
  
  #ifdef XDS_TEST_XDS_SETBUFFER
  
  static int dummy_engine(xds_t * xds, void *engine_context,
                          void *buffer, size_t buffer_size,
                          size_t * used_buffer_size, va_list * args)
  {
      assert(xds != NULL);
      assert(buffer != NULL);
      assert(buffer_size != 0);
      assert(used_buffer_size != NULL);
      assert(args != NULL);
      if (buffer_size < 64)
          return XDS_ERR_OVERFLOW;
      else
          *used_buffer_size = 64;
      memset(buffer, 'a', 64);
      return XDS_OK;
  }
  
  int main()
  {
      xds_t *xds;
      char *buffer;
      size_t buffer_size;
  
      /* Create XDS context. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL) {
          printf("Failed to initialize XDS context.\n");
          return 1;
      }
  
      /* Register the callback. */
  
      if (xds_register(xds, "dummy", &dummy_engine, NULL) != XDS_OK) {
          printf("Failed to register my encoding engine.\n");
          return 1;
      }
  
      /* Give the library a buffer of 32 byte, call the engine once, get the
       * buffer back and see whether it has been enlarged or not. */
  
      buffer_size = 32;
      buffer = malloc(buffer_size);
      if (buffer == NULL) {
          printf("Failed to allocate my memory.\n");
          return 1;
      }
      if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK) {
          printf("xds_setbuffer() failed!\n");
          return 1;
      }
      if (xds_encode(xds, "dummy") != XDS_OK) {
          printf("xds_encode() failed!\n");
          return 1;
      }
      if (xds_getbuffer(xds, XDS_GIFT, (void **)&buffer, &buffer_size) !=
          XDS_OK) {
          printf("xds_getbuffer() failed!\n");
          return 1;
      }
      if (buffer_size < 64) {
          printf
              ("xds_encode() did not enlarge the buffer after processing the callback\n");
          printf("even though all capacity was used up!\n");
          return 1;
      }
  
      /* Loan the library a buffer we own, call the engine once to exceed the
       * buffer's capacity and check, whether the library returns the correct
       * error code. */
  
      buffer = malloc(32);
      if (buffer == NULL) {
          printf("Failed to allocate my memory.\n");
          return 1;
      }
      buffer_size = 32;
      if (xds_setbuffer(xds, XDS_LOAN, buffer, buffer_size) != XDS_OK) {
          printf("xds_setbuffer() failed!\n");
          return 1;
      }
      if (xds_encode(xds, "dummy") != XDS_ERR_OVERFLOW) {
          printf("xds_encode() was supposed to fail with XDS_ERR_OVERFLOW!\n");
          return 1;
      }
      free(buffer);
  
      /* Clean up. */
  
      xds_destroy(xds);
  
      /* Everything went fine. */
  
      return 0;
  }
  
  #endif /* XDS_TEST_XDS_SETBUFFER */
  
  #ifdef XDS_TEST_XDS_GETBUFFER
  
  static int dummy_engine(xds_t * xds, void *engine_context,
                          void *buffer, size_t buffer_size,
                          size_t * used_buffer_size, va_list * args)
  {
      if (buffer_size < 6)
          return XDS_ERR_OVERFLOW;
      else
          *used_buffer_size = 6;
  
      memmove(buffer, "Hallo!", 6);
      return XDS_OK;
  }
  
  int main()
  {
      xds_t *xds;
      char *old;
      size_t old_len;
      char *new;
      size_t new_len;
  
      /* Create XDS context. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL) {
          printf("Failed to initialize XDS context.\n");
          return 1;
      }
  
      /* Register the dummy callback under multiple names. */
  
      if (xds_register(xds, "text", &dummy_engine, (void *)42) != XDS_OK) {
          printf("Failed to register my encoding engine.\n");
          return 1;
      }
  
      /* Encode something, then flush the buffer by calling xds_getbuffer(),
       * then encode something new and verify that the old buffer hasn't ben
       * overwritten and that the new one contains the correct string. */
  
      if (xds_encode(xds, "text text") != XDS_OK) {
          printf("xds_encode() failed!\n");
          return 1;
      }
      if (xds_getbuffer(xds, XDS_GIFT, (void **)&old, &old_len) != XDS_OK) {
          printf("xds_getbuffer() failed for the first buffer!\n");
          return 1;
      }
      if (xds_encode(xds, "text") != XDS_OK) {
          printf("xds_encode() failed!\n");
          return 1;
      }
      if (xds_getbuffer(xds, XDS_GIFT, (void **)&new, &new_len) != XDS_OK) {
          printf("xds_getbuffer() failed for the second buffer!\n");
          return 1;
      }
      if ((memcmp(old, "Hallo!Hallo!", 12) != 0 || old_len != 12) &&
          (memcmp(new, "Hallo!", 6) != 0 || new_len != 6)) {
          printf("xds_encode() did not yield the expected result.\n");
          return 1;
      }
      free(old);
      free(new);
  
      /* Encode somthing, then get the buffer via XDS_LOAN and verify the
       * contents. Encode something new and compare the new content with what
       * we expect. */
  
      if (xds_encode(xds, "text text") != XDS_OK) {
          printf("xds_encode() failed!\n");
          return 1;
      }
      if (xds_getbuffer(xds, XDS_LOAN, (void **)&old, &old_len) != XDS_OK) {
          printf("xds_getbuffer() failed for the first buffer!\n");
          return 1;
      }
      if (memcmp(old, "Hallo!Hallo!", 12) != 0 || old_len != 12) {
          printf("xds_encode() did not yield the expected result.\n");
          return 1;
      }
      if (xds_encode(xds, "text") != XDS_OK) {
          printf("xds_encode() failed!\n");
          return 1;
      }
      if (xds_getbuffer(xds, XDS_LOAN, (void **)&new, &new_len) != XDS_OK) {
          printf("xds_getbuffer() failed for the second buffer!\n");
          return 1;
      }
      if (old != new) {
          printf
              ("xds_encode() allocated a new buffer even though we used XDS_LOAN.\n");
          return 1;
      }
      if (memcmp(new, "Hallo!", 6) != 0 || new_len != 6) {
          printf("xds_encode() did not yield the expected result.\n");
          return 1;
      }
  
      /* Clean up. */
  
      xds_destroy(xds);
  
      /* Everything went fine. */
  
      return 0;
  }
  
  #endif /* XDS_TEST_XDS_GETBUFFER */
  
  #ifdef XDS_TEST_XDS_ENCODE
  
  static int dummy_engine(xds_t * xds, void *engine_context,
                          void *buffer, size_t buffer_size,
                          size_t * used_buffer_size, va_list * args)
  {
      if (xds == NULL) {
          printf("XDS context isn't passed through to registered engine.\n");
          exit(1);
      }
      if (engine_context != (void *)42) {
          printf("Engine context isn't passed through to registered engine.\n");
          exit(1);
      }
      if (buffer == NULL) {
          printf("Buffer passed to engine is NULL.\n");
          exit(1);
      }
      if (buffer_size == 0) {
          printf("buffer_size passed to engine is zero!\n");
          exit(1);
      }
      if (used_buffer_size == NULL) {
          printf("used_buffer_size pointer passed to engine is NULL!\n");
          exit(1);
      }
      if (args == NULL) {
          printf("args pointer passed to engine is NULL!\n");
          exit(1);
      }
      *used_buffer_size = 6;
      if (buffer_size < 6)
          return XDS_ERR_OVERFLOW;
      memmove(buffer, "Hallo ", 6);
      return XDS_OK;
  }
  
  int main()
  {
      xds_t *xds;
  
      /* Create XDS context. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL) {
          printf("Failed to initialize XDS context.\n");
          return 1;
      }
  
      /* Register the dummy callback under multiple names. */
  
      if (xds_register(xds, "int", &dummy_engine, (void *)42) != XDS_OK ||
          xds_register(xds, "float", &dummy_engine, (void *)42) != XDS_OK ||
          xds_register(xds, "double", &dummy_engine, (void *)42) != XDS_OK ||
          xds_register(xds, "text", &dummy_engine, (void *)42) != XDS_OK) {
          printf("Failed to register my encoding engines.\n");
          return 1;
      }
  
      /* Let's go and encode something. */
  
      if (xds_encode(xds, "int:text    double double float") != XDS_OK) {
          printf("xds_encode() failed!\n");
          return 1;
      }
      if (memcmp(xds->buffer, "Hallo Hallo Hallo Hallo Hallo ", 30) != 0) {
          printf("xds_encode() did not yield the expected result.\n");
          return 1;
      }
  
      /* Clean up. */
  
      xds_destroy(xds);
  
      /* Everything went fine. */
  
      return 0;
  }
  
  #endif /* XDS_TEST_XDS_ENCODE */
  
  #ifdef XDS_TEST_XDS_DECODE
  
  static int dummy_engine(xds_t * xds, void *engine_context,
                          void *buffer, size_t buffer_size,
                          size_t * used_buffer_size, va_list * args)
  {
      if (xds == NULL) {
          printf("XDS context isn't passed through to registered engine.\n");
          exit(1);
      }
      if (engine_context != (void *)42) {
          printf("Engine context isn't passed through to registered engine.\n");
          exit(1);
      }
      if (buffer == NULL) {
          printf("Buffer passed to engine is NULL.\n");
          exit(1);
      }
      if (buffer_size == 0) {
          printf("Buffer size passed to engine is zero!\n");
          exit(1);
      }
      if (used_buffer_size == NULL) {
          printf("used_buffer_size passed to engine is zero!\n");
          exit(1);
      }
      if (args == NULL) {
          printf("args pointer passed to engine is NULL!\n");
          exit(1);
      }
      if (buffer_size < 6) {
          printf("The buffer is too small; can't verify my encoded string.\n");
          exit(1);
      }
      if (memcmp(buffer, "Hallo!", 6) != 0) {
          printf
              ("The contents of the decode buffer are not what we expected.\n");
          exit(1);
      }
      *used_buffer_size = 6;
      return XDS_OK;
  }
  
  int main()
  {
      xds_t *xds;
      char buffer[] = "Hallo!Hallo!Hallo!";
  
      /* Create XDS context. */
  
      xds = xds_init(XDS_DECODE);
      if (xds == NULL) {
          printf("Failed to initialize XDS context.\n");
          return 1;
      }
  
      /* Register the dummy callback under multiple names. */
  
      if (xds_register(xds, "text", &dummy_engine, (void *)42) != XDS_OK) {
          printf("Failed to register my decoding engines.\n");
          return 1;
      }
  
      /* Decode the buffer and have the callback report when something is
       * wrong. */
  
      if (xds_setbuffer(xds, XDS_LOAN, buffer, sizeof (buffer) - 1) != XDS_OK) {
          printf("xds_decode() failed!");
          return 1;
      }
  
      if (xds_decode(xds, "text::text text") != XDS_OK) {
          printf("xds_decode() failed!");
          return 1;
      }
  
      /* Clean up. */
  
      xds_destroy(xds);
  
      /* Everything went fine. */
  
      return 0;
  }
  
  #endif /* XDS_TEST_XDS_DECODE */
  
  #ifdef XDS_TEST_XDS_ENGINE_RESTART
  
  static int dummy_engine(xds_t * xds, void *engine_context,
                          void *buffer, size_t buffer_size,
                          size_t * used_buffer_size, va_list * args)
  {
      if (xds == NULL) {
          printf("XDS context isn't passed through to registered engine.\n");
          exit(1);
      }
      if (engine_context != (void *)42) {
          printf("Engine context isn't passed through to registered engine.\n");
          exit(1);
      }
      if (buffer == NULL) {
          printf("Buffer passed to engine is NULL.\n");
          exit(1);
      }
      if (buffer_size == 0) {
          printf("Buffer size passed to engine is zero!\n");
          exit(1);
      }
      if (used_buffer_size == NULL) {
          printf("used_buffer_size pointer passed to engine is NULL!\n");
          exit(1);
      }
      if (args == NULL) {
          printf("args pointer passed to engine is NULL!\n");
          exit(1);
      }
      if (va_arg(*args, int) != 42) {
          printf("The varadic argument is not what the engine expected!\n");
          exit(1);
      }
      if (buffer_size < 64)
          return XDS_ERR_OVERFLOW;
      else
          *used_buffer_size = 64;
      return XDS_OK;
  }
  
  int main()
  {
      xds_t *xds;
      char *buffer;
      size_t buffer_size;
  
      /* Create an XDS context and set a buffer that's too small for the first
       * encode() call. Then call encode() with two parameters: the one the
       * engine is expecting and a different one after that. The engine will
       * complain if it sees the second value -- what would mean that the args
       * parameter was not resetted to the original value before the engine is
       * restarted after buffer enlargement. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL) {
          printf("Failed to initialize XDS context.\n");
          return 1;
      }
      if (xds_register(xds, "int", &dummy_engine, (void *)42) != XDS_OK) {
          printf("Failed to register my encoding engines.\n");
          return 1;
      }
      buffer = malloc(32);
      if (buffer == NULL) {
          printf("malloc() failed!\n");
          return 1;
      }
      buffer_size = 32;
      if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK) {
          printf("xds_setbuffer() failed!\n");
          return 1;
      }
      if (xds_encode(xds, "int", 42, 13) != XDS_OK) {
          printf("xds_encode() failed!");
          return 1;
      }
      xds_destroy(xds);
      return 0;
  }
  
  #endif /* XDS_TEST_XDS_ENGINE_RESTART */
  
  #ifdef XDS_TEST_XDS_MYSTRUCT
  
  struct mystruct {
      xds_int32_t small;
      xds_uint32_t positive;
  };
  
  static int encode_mystruct_engine(xds_t * xds, void *engine_context,
                                    void *buffer, size_t buffer_size,
                                    size_t * used_buffer_size, va_list * args)
  {
      struct mystruct *ms;
  
      assert(xds != NULL);
      assert(buffer != NULL);
      assert(buffer_size != 0);
      assert(used_buffer_size != NULL);
      assert(args != NULL);
  
      ms = va_arg(*args, struct mystruct *);
      return xds_encode(xds, "int32 uint32", ms->small, ms->positive);
  }
  
  static int decode_mystruct_engine(xds_t * xds, void *engine_context,
                                    void *buffer, size_t buffer_size,
                                    size_t * used_buffer_size, va_list * args)
  {
      struct mystruct *ms;
  
      assert(xds != NULL);
      assert(buffer != NULL);
      assert(buffer_size != 0);
      assert(used_buffer_size != NULL);
      assert(args != NULL);
  
      ms = va_arg(*args, struct mystruct *);
      return xds_decode(xds, "int32 uint32", &(ms->small), &(ms->positive));
  }
  
  int main()
  {
      xds_t *xds;
      char *buffer;
      size_t buffer_size;
  
      struct mystruct ms, new_ms;
      ms.small = -0x1234567;
      ms.positive = 42;
  
      /* Encode our copy of mystruct using our encoding callback. Then get a
       * the buffer and destroy the context again. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL) {
          printf("Failed to initialize XDS context.\n");
          return 1;
      }
      if (xds_register(xds, "mystruct", &encode_mystruct_engine, NULL) != XDS_OK
          || xds_register(xds, "int32", &xdr_encode_int32, NULL) != XDS_OK
          || xds_register(xds, "uint32", &xdr_encode_uint32, NULL) != XDS_OK) {
          printf("Failed to register my encoding engines.\n");
          return 1;
      }
      buffer_size = 4;
      buffer = malloc(buffer_size);
      if (buffer == NULL) {
          printf("Failed to allocate memory for buffer.\n");
          return 1;
      }
      if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK) {
          printf("xds_setbuffer() failed!\n");
          return 1;
      }
      if (xds_encode(xds, "mystruct", &ms) != XDS_OK) {
          printf("xds_encode() failed!\n");
          return 1;
      }
      if (xds->buffer_capacity <= buffer_size) {
          printf("Buffer should have been enlarged after xds_encode()!\n");
          return 1;
      }
      if (xds_getbuffer(xds, XDS_GIFT, (void **)&buffer, &buffer_size) !=
          XDS_OK) {
          printf("xds_getbuffer() failed!\n");
          return 1;
      }
      xds_destroy(xds);
      printf("The encoded representation is %u bytes long.\n", buffer_size);
  
      /* Now create a decoding context and decode the whole thing again. */
  
      xds = xds_init(XDS_DECODE);
      if (xds == NULL) {
          printf("Failed to initialize XDS context.\n");
          return 1;
      }
      if (xds_register(xds, "mystruct", &decode_mystruct_engine, NULL) != XDS_OK
          || xds_register(xds, "int32", &xdr_decode_int32, NULL) != XDS_OK
          || xds_register(xds, "uint32", &xdr_decode_uint32, NULL) != XDS_OK) {
          printf("Failed to register my decoding engines.\n");
          return 1;
      }
      if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK) {
          printf("xds_setbuffer() failed!\n");
          return 1;
      }
      if (xds_decode(xds, "mystruct", &new_ms) != XDS_OK) {
          printf("xds_decode() failed!\n");
          return 1;
      }
      xds_destroy(xds);
  
      /* Both structures must be identical. */
  
      if (ms.small != new_ms.small
          || ms.positive != new_ms.positive) {
          printf("Decoded data does not match the original!\n");
          return 1;
      }
  
      /* Everything went fine. */
  
      return 0;
  }
  
  #endif /* XDS_TEST_XDS_MYSTRUCT */
  Index: ossp-pkg/srpc/libxds/xds_test_xdr.c
  ============================================================
  $ cvs update -p -r1.1 xds_test_xdr.c
  /* 
   * XDS - OSSP Extensible Data Serialization Library Copyright (c) 2001 The
   * OSSP Project (http://www.ossp.org/) Copyright (c) 2001 Cable & Wireless
   * Deutschland (http://www.cw.com/de/)
   * 
   * This file is part of OSSP XDS, an extensible data serialization library
   * which can be found at http://www.ossp.com/pkg/xds/.
   * 
   * Permission to use, copy, modify, and distribute this software for any
   * purpose with or without fee is hereby granted, provided that the above
   * copyright notice and this permission notice appear in all copies.
   * 
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
   * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 
   * EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR CONTRIBUTORS BE
   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
   * POSSIBILITY OF SUCH DAMAGE. */
  
  #include <stdio.h>
  #include <string.h>
  #include <sys/types.h>
  #include <rpc/types.h>
  #include <rpc/xdr.h>
  
  #include "xds.h"
  
  #ifdef XDS_TEST_XDR_INT32
  
  int main()
  {
      XDR xdrs;
      char xdr_buf[1024];
      size_t xdr_buf_size;
  
      xds_t *xds;
      char *xds_buf;
      size_t xds_buf_size;
  
      xds_int32_t values[] = {
          0x00000000,
          0x12345678,
          -0x12345678,
          0x7bcdef01,
          -0x7bcdef01,
          0x7fffffff
      };
  
      size_t i;
  
      /* Encode the values array using the RPC-XDR implementation. */
  
      xdrmem_create(&xdrs, xdr_buf, sizeof (xdr_buf), XDR_ENCODE);
      for (i = 0; i < sizeof (values) / sizeof (xds_int32_t); ++i)
          xdr_int32_t(&xdrs, &values[i]);
      xdr_buf_size = xdr_getpos(&xdrs);
      xdr_destroy(&xdrs);
  
      /* Encode the values array using the XDS implementation. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL) {
          printf("Failed to initialize XDS context.\n");
          return 1;
      }
      if (xds_register(xds, "int", &xdr_encode_int32, NULL) != XDS_OK) {
          printf("Failed to register my encoding engines.\n");
          return 1;
      }
      for (i = 0; i < sizeof (values) / sizeof (xds_int32_t); ++i) {
          if (xds_encode(xds, "int", values[i]) != XDS_OK) {
              printf("xds_encode(values[%d]) failed!\n", i);
              return 1;
          }
      }
      if (xds_getbuffer(xds, XDS_GIFT, (void **)&xds_buf, &xds_buf_size) !=
          XDS_OK) {
          printf("getbuffer() failed.\n");
          return 1;
      }
      xds_destroy(xds);
  
      /* Both buffers must be equal now. */
  
      if (xdr_buf_size != xds_buf_size) {
          printf("The buffer sizes don't match: %d != %d.\n", xdr_buf_size,
                 xds_buf_size);
          return 1;
      }
      if (memcmp(xds_buf, xdr_buf, xds_buf_size) != 0) {
          printf("The buffers' contents is not identical!\n");
          return 1;
      }
  
      /* Now we decode the values again using the XDS implementation and
       * compare them to our original values. Obviously, they should not
       * differ. */
  
      xds = xds_init(XDS_DECODE);
      if (xds == NULL) {
          printf("Failed to initialize XDS context.\n");
          return 1;
      }
      if (xds_register(xds, "int", &xdr_decode_int32, NULL) != XDS_OK) {
          printf("Failed to register my decoding engines.\n");
          return 1;
      }
      if (xds_setbuffer(xds, XDS_GIFT, xds_buf, xds_buf_size) != XDS_OK) {
          printf("setbuffer() failed.\n");
          return 1;
      }
      for (i = 0; i < sizeof (values) / sizeof (xds_int32_t); ++i) {
          xds_int32_t tmp;
          if (xds_decode(xds, "int", &tmp) != XDS_OK) {
              printf("xds_encode() failed for the %d value!\n", i);
              return 1;
          }
          if (values[i] != tmp) {
              printf("The %dth value has not been decoded correctly!\n", i);
              return 1;
          }
      }
      xds_destroy(xds);
  
      /* Everything went fine. */
  
      return 0;
  }
  
  #endif /* XDS_TEST_XDR_INT32 */
  
  #ifdef XDS_TEST_XDR_UINT32
  
  #ifdef __FreeBSD__
  static int xdr_uint32_t(XDR * xdrs, uint32_t * val)
  {
      return xdr_u_int32_t(xdrs, val);
  }
  #endif
  
  int main()
  {
      XDR xdrs;
      char xdr_buf[1024];
      size_t xdr_buf_size;
  
      xds_t *xds;
      char *xds_buf;
      size_t xds_buf_size;
  
      xds_uint32_t values[] = {
          0x00000000,
          0x12345678,
          0xabcdef01,
          0xc500b3ef,
          0xffffffff
      };
  
      size_t i;
  
      /* Encode the values array using the RPC-XDR implementation. */
  
      xdrmem_create(&xdrs, xdr_buf, sizeof (xdr_buf), XDR_ENCODE);
      for (i = 0; i < sizeof (values) / sizeof (xds_uint32_t); ++i)
          xdr_uint32_t(&xdrs, &values[i]);
      xdr_buf_size = xdr_getpos(&xdrs);
      xdr_destroy(&xdrs);
  
      /* Encode the values array using the XDS implementation. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL) {
          printf("Failed to initialize XDS context.\n");
          return 1;
      }
      if (xds_register(xds, "uint", &xdr_encode_uint32, NULL) != XDS_OK) {
          printf("Failed to register my encoding engines.\n");
          return 1;
      }
      for (i = 0; i < sizeof (values) / sizeof (uint32_t); ++i) {
          if (xds_encode(xds, "uint", values[i]) != XDS_OK) {
              printf("xds_encode(values[%d]) failed!\n", i);
              return 1;
          }
      }
      if (xds_getbuffer(xds, XDS_GIFT, (void **)&xds_buf, &xds_buf_size) !=
          XDS_OK) {
          printf("getbuffer() failed.\n");
          return 1;
      }
      xds_destroy(xds);
  
      /* Both buffers must be equal now. */
  
      if (xdr_buf_size != xds_buf_size) {
          printf("The buffer sizes don't match: %d != %d.\n", xdr_buf_size,
                 xds_buf_size);
          return 1;
      }
      if (memcmp(xds_buf, xdr_buf, xds_buf_size) != 0) {
          printf("The buffers' contents is not identical!\n");
          return 1;
      }
  
      /* Now we decode the values again using the XDS implementation and
       * compare them to our original values. Obviously, they should not
       * differ. */
  
      xds = xds_init(XDS_DECODE);
      if (xds == NULL) {
          printf("Failed to initialize XDS context.\n");
          return 1;
      }
      if (xds_register(xds, "uint", &xdr_decode_uint32, NULL) != XDS_OK) {
          printf("Failed to register my decoding engines.\n");
          return 1;
      }
      if (xds_setbuffer(xds, XDS_GIFT, xds_buf, xds_buf_size) != XDS_OK) {
          printf("setbuffer() failed.\n");
          return 1;
      }
      for (i = 0; i < sizeof (values) / sizeof (xds_uint32_t); ++i) {
          xds_uint32_t tmp;
          if (xds_decode(xds, "uint", &tmp) != XDS_OK) {
              printf("xds_encode() failed for the %d value!\n", i);
              return 1;
          }
          if (values[i] != tmp) {
              printf("The %dth value has not been decoded correctly!\n", i);
              return 1;
          }
      }
      xds_destroy(xds);
  
      /* Everything went fine. */
  
      return 0;
  }
  
  #endif /* XDS_TEST_XDR_UINT32 */
  
  #ifdef XDS_TEST_XDR_INT64
  
  #ifdef XDS_HAVE_64_BIT_SUPPORT
  
  int main()
  {
      XDR xdrs;
      char xdr_buf[1024];
      size_t xdr_buf_size;
  
      xds_t *xds;
      char *xds_buf;
      size_t xds_buf_size;
  
      xds_int64_t values[] = {
          0x0000000000000000LL,
          0x123456789abcdef0LL,
          -0x123456789abcdef0LL,
          0x7bcdef01cc45bb9aLL,
          -0x7bcdef01cc45bb9aLL,
          0x7fffffffffffffffLL
      };
  
      size_t i;
  
      /* Encode the values array using the RPC-XDR implementation. */
  
      xdrmem_create(&xdrs, xdr_buf, sizeof (xdr_buf), XDR_ENCODE);
      for (i = 0; i < sizeof (values) / sizeof (xds_int64_t); ++i)
          xdr_int64_t(&xdrs, &values[i]);
      xdr_buf_size = xdr_getpos(&xdrs);
      xdr_destroy(&xdrs);
  
      /* Encode the values array using the XDS implementation. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL) {
          printf("Failed to initialize XDS context.\n");
          return 1;
      }
      if (xds_register(xds, "int", &xdr_encode_int64, NULL) != XDS_OK) {
          printf("Failed to register my encoding engines.\n");
          return 1;
      }
      for (i = 0; i < sizeof (values) / sizeof (xds_int64_t); ++i) {
          if (xds_encode(xds, "int", values[i]) != XDS_OK) {
              printf("xds_encode(values[%d]) failed!\n", i);
              return 1;
          }
      }
      if (xds_getbuffer(xds, XDS_GIFT, (void **)&xds_buf, &xds_buf_size) !=
          XDS_OK) {
          printf("getbuffer() failed.\n");
          return 1;
      }
      xds_destroy(xds);
  
      /* Both buffers must be equal now. */
  
      if (xdr_buf_size != xds_buf_size) {
          printf("The buffer sizes don't match: %d != %d.\n", xdr_buf_size,
                 xds_buf_size);
          return 1;
      }
      if (memcmp(xds_buf, xdr_buf, xds_buf_size) != 0) {
          printf("The buffers' contents is not identical!\n");
          return 1;
      }
  
      /* Now we decode the values again using the XDS implementation and
       * compare them to our original values. Obviously, they should not
       * differ. */
  
      xds = xds_init(XDS_DECODE);
      if (xds == NULL) {
          printf("Failed to initialize XDS context.\n");
          return 1;
      }
      if (xds_register(xds, "int", &xdr_decode_int64, NULL) != XDS_OK) {
          printf("Failed to register my decoding engines.\n");
          return 1;
      }
      if (xds_setbuffer(xds, XDS_GIFT, xds_buf, xds_buf_size) != XDS_OK) {
          printf("setbuffer() failed.\n");
          return 1;
      }
      for (i = 0; i < sizeof (values) / sizeof (xds_int64_t); ++i) {
          xds_int64_t tmp;
          if (xds_decode(xds, "int", &tmp) != XDS_OK) {
              printf("xds_encode() failed for the %d value!\n", i);
              return 1;
          }
          if (values[i] != tmp) {
              printf("The %dth value has not been decoded correctly!\n", i);
              return 1;
          }
      }
      xds_destroy(xds);
  
      /* Everything went fine. */
  
      return 0;
  }
  
  #endif /* XDS_HAVE_64_BIT_SUPPORT */
  
  #endif /* XDS_TEST_XDR_INT64 */
  
  #ifdef XDS_TEST_XDR_UINT64
  
  #ifdef XDS_HAVE_64_BIT_SUPPORT 
  
  #ifdef __FreeBSD__
  static int xdr_uint64_t(XDR * xdrs, uint64_t * val)
  {
      return xdr_u_int64_t(xdrs, val);
  }
  #endif
  
  int main()
  {
      XDR xdrs;
      char xdr_buf[1024];
      size_t xdr_buf_size;
  
      xds_t *xds;
      char *xds_buf;
      size_t xds_buf_size;
  
      xds_uint64_t values[] = {
          0x0000000000000000ULL,
          0x123456789abcdef0ULL,
          0xabcdef01cc45bb9aULL,
          0xc500b3efdd34ca9eULL,
          0xffffffffffffffffULL
      };
  
      size_t i;
  
      /* Encode the values array using the RPC-XDR implementation. */
  
      xdrmem_create(&xdrs, xdr_buf, sizeof (xdr_buf), XDR_ENCODE);
      for (i = 0; i < sizeof (values) / sizeof (xds_uint64_t); ++i)
          xdr_uint64_t(&xdrs, &values[i]);
      xdr_buf_size = xdr_getpos(&xdrs);
      xdr_destroy(&xdrs);
  
      /* Encode the values array using the XDS implementation. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL) {
          printf("Failed to initialize XDS context.\n");
          return 1;
      }
      if (xds_register(xds, "uint", &xdr_encode_uint64, NULL) != XDS_OK) {
          printf("Failed to register my encoding engines.\n");
          return 1;
      }
      for (i = 0; i < sizeof (values) / sizeof (uint64_t); ++i) {
          if (xds_encode(xds, "uint", values[i]) != XDS_OK) {
              printf("xds_encode(values[%d]) failed!\n", i);
              return 1;
          }
      }
      if (xds_getbuffer(xds, XDS_GIFT, (void **)&xds_buf, &xds_buf_size) !=
          XDS_OK) {
          printf("getbuffer() failed.\n");
          return 1;
      }
      xds_destroy(xds);
  
      /* Both buffers must be equal now. */
  
      if (xdr_buf_size != xds_buf_size) {
          printf("The buffer sizes don't match: %d != %d.\n", xdr_buf_size,
                 xds_buf_size);
          return 1;
      }
      if (memcmp(xds_buf, xdr_buf, xds_buf_size) != 0) {
          printf("The buffers' contents is not identical!\n");
          return 1;
      }
  
      /* Now we decode the values again using the XDS implementation and
       * compare them to our original values. Obviously, they should not
       * differ. */
  
      xds = xds_init(XDS_DECODE);
      if (xds == NULL) {
          printf("Failed to initialize XDS context.\n");
          return 1;
      }
      if (xds_register(xds, "uint", &xdr_decode_uint64, NULL) != XDS_OK) {
          printf("Failed to register my decoding engines.\n");
          return 1;
      }
      if (xds_setbuffer(xds, XDS_GIFT, xds_buf, xds_buf_size) != XDS_OK) {
          printf("setbuffer() failed.\n");
          return 1;
      }
      for (i = 0; i < sizeof (values) / sizeof (xds_uint64_t); ++i) {
          xds_uint64_t tmp;
          if (xds_decode(xds, "uint", &tmp) != XDS_OK) {
              printf("xds_encode() failed for the %d value!\n", i);
              return 1;
          }
          if (values[i] != tmp) {
              printf("The %dth value has not been decoded correctly!\n", i);
              return 1;
          }
      }
      xds_destroy(xds);
  
      /* Everything went fine. */
  
      return 0;
  }
  
  #endif /* XDS_HAVE_64_BIT_SUPPORT */
  
  #endif /* XDS_TEST_XDR_UINT64 */
  
  #ifdef XDS_TEST_XDR_STRING
  
  int main()
  {
      xds_t *xds;
      char *buffer;
      size_t buffer_size;
  
      char msg[] = "Hello World";
      char *new_msg;
  
      /* Encode the string as octet stream. Then erase the buffer and decode
       * the string back, verifying that it hasn't changed. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL) {
          printf("Failed to initialize XDS context.\n");
          return 1;
      }
      if (xds_register(xds, "string", &xdr_encode_string, NULL) != XDS_OK) {
          printf("Failed to register my encoding engines.\n");
          return 1;
      }
      if (xds_encode(xds, "string", msg) != XDS_OK) {
          printf("xds_encode() failed.\n");
          return 1;
      }
      if (xds_getbuffer(xds, XDS_GIFT, (void **)&buffer, &buffer_size) !=
          XDS_OK) {
          printf("xds_getbuffer() failed.\n");
          return 1;
      }
      xds_destroy(xds);
      if (buffer_size % 4 != 0) {
          printf("The encoded strings' buffer size is not a multiple of 4.\n");
          return 1;
      }
  
      xds = xds_init(XDS_DECODE);
      if (xds == NULL) {
          printf("Failed to initialize XDS context.\n");
          return 1;
      }
      if (xds_register(xds, "string", &xdr_decode_string, NULL) != XDS_OK) {
          printf("Failed to register my decoding engines.\n");
          return 1;
      }
      if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK) {
          printf("xds_setbuffer() failed.\n");
          return 1;
      }
      if (xds_decode(xds, "string", &new_msg) != XDS_OK) {
          printf("xds_decode() failed.\n");
          return 1;
      }
      if (strlen(new_msg) != sizeof (msg) - 1) {
          printf("The size of the decoded message is wrong.\n");
          return 1;
      }
      if (memcmp(msg, new_msg, sizeof (msg) - 1) != 0) {
          printf("The decoded string is not correct.\n");
          return 1;
      }
      xds_destroy(xds);
      free(new_msg);
  
      /* Everything went fine. */
  
      return 0;
  }
  
  #endif /* XDS_TEST_XDR_STRING */
  
  #ifdef XDS_TEST_XDR_STRING_EMPTY
  
  int main()
  {
      xds_t *xds;
      char *buffer;
      size_t buffer_size;
  
      char msg[] = "";
      char *new_msg;
  
      /* Encode the string as octet stream. Then erase the buffer and decode
       * the string back, verifying that it hasn't changed. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL) {
          printf("Failed to initialize XDS context.\n");
          return 1;
      }
      if (xds_register(xds, "string", &xdr_encode_string, NULL) != XDS_OK) {
          printf("Failed to register my encoding engines.\n");
          return 1;
      }
      if (xds_encode(xds, "string", msg, 0) != XDS_OK) {
          printf("xds_encode() failed.\n");
          return 1;
      }
      if (xds_getbuffer(xds, XDS_GIFT, (void **)&buffer, &buffer_size) !=
          XDS_OK) {
          printf("xds_getbuffer() failed.\n");
          return 1;
      }
      xds_destroy(xds);
      if (buffer_size % 4 != 0) {
          printf("The encoded strings' buffer size is not a multiple of 4.\n");
          return 1;
      }
  
      xds = xds_init(XDS_DECODE);
      if (xds == NULL) {
          printf("Failed to initialize XDS context.\n");
          return 1;
      }
      if (xds_register(xds, "string", &xdr_decode_string, NULL) != XDS_OK) {
          printf("Failed to register my decoding engines.\n");
          return 1;
      }
      if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK) {
          printf("xds_setbuffer() failed.\n");
          return 1;
      }
      if (xds_decode(xds, "string", &new_msg) != XDS_OK) {
          printf("xds_decode() failed.\n");
          return 1;
      }
      if (strlen(new_msg) != 0) {
          printf("The size of the decoded message is wrong.\n");
          return 1;
      }
      xds_destroy(xds);
      free(new_msg);
  
      /* Everything went fine. */
  
      return 0;
  }
  
  #endif /* XDS_TEST_XDR_STRING_EMPTY */
  
  #ifdef XDS_TEST_XDR_OCTETSTREAM
  
  int main()
  {
      xds_t *xds;
      char *buffer;
      size_t buffer_size;
  
      char msg[] = "Hello\000World";
      char *new_msg;
      size_t new_msg_size;
  
      /* Encode the string as octet stream. Then erase the buffer and decode
       * the string back, verifying that it hasn't changed. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL) {
          printf("Failed to initialize XDS context.\n");
          return 1;
      }
      if (xds_register(xds, "os", &xdr_encode_octetstream, NULL) != XDS_OK) {
          printf("Failed to register my encoding engines.\n");
          return 1;
      }
      if (xds_encode(xds, "os", msg, sizeof (msg) - 1) != XDS_OK) {
          printf("xds_encode() failed.\n");
          return 1;
      }
      if (xds_getbuffer(xds, XDS_GIFT, (void **)&buffer, &buffer_size) !=
          XDS_OK) {
          printf("xds_getbuffer() failed.\n");
          return 1;
      }
      xds_destroy(xds);
      if (buffer_size % 4 != 0) {
          printf
              ("The encoded octet stream's buffer size is not a multiple of 4.\n");
          return 1;
      }
  
      xds = xds_init(XDS_DECODE);
      if (xds == NULL) {
          printf("Failed to initialize XDS context.\n");
          return 1;
      }
      if (xds_register(xds, "os", &xdr_decode_octetstream, NULL) != XDS_OK) {
          printf("Failed to register my decoding engines.\n");
          return 1;
      }
      if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK) {
          printf("xds_setbuffer() failed.\n");
          return 1;
      }
      if (xds_decode(xds, "os", &new_msg, &new_msg_size) != XDS_OK) {
          printf("xds_decode() failed.\n");
          return 1;
      }
      if (new_msg_size != sizeof (msg) - 1) {
          printf("The size of the decoded message is wrong.\n");
          return 1;
      }
      if (memcmp(msg, new_msg, new_msg_size) != 0) {
          printf("The decoded octet stream is not correct.\n");
          return 1;
      }
      xds_destroy(xds);
      free(new_msg);
  
      /* Everything went fine. */
  
      return 0;
  }
  
  #endif /* XDS_TEST_XDR_OCTETSTREAM */
  
  #ifdef XDS_TEST_XDR_OCTETSTREAM_EMPTY
  
  int main()
  {
      xds_t *xds;
      char *buffer;
      size_t buffer_size;
  
      char msg[] = "";
      char *new_msg;
      size_t new_msg_size;
  
      /* Encode the string as octet stream. Then erase the buffer and decode
       * the string back, verifying that it hasn't changed. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL) {
          printf("Failed to initialize XDS context.\n");
          return 1;
      }
      if (xds_register(xds, "os", &xdr_encode_octetstream, NULL) != XDS_OK) {
          printf("Failed to register my encoding engines.\n");
          return 1;
      }
      if (xds_encode(xds, "os", msg, 0) != XDS_OK) {
          printf("xds_encode() failed.\n");
          return 1;
      }
      if (xds_getbuffer(xds, XDS_GIFT, (void **)&buffer, &buffer_size) !=
          XDS_OK) {
          printf("xds_getbuffer() failed.\n");
          return 1;
      }
      xds_destroy(xds);
      if (buffer_size % 4 != 0) {
          printf
              ("The encoded octet stream's buffer size is not a multiple of 4.\n");
          return 1;
      }
  
      xds = xds_init(XDS_DECODE);
      if (xds == NULL) {
          printf("Failed to initialize XDS context.\n");
          return 1;
      }
      if (xds_register(xds, "os", &xdr_decode_octetstream, NULL) != XDS_OK) {
          printf("Failed to register my decoding engines.\n");
          return 1;
      }
      if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK) {
          printf("xds_setbuffer() failed.\n");
          return 1;
      }
      if (xds_decode(xds, "os", &new_msg, &new_msg_size) != XDS_OK) {
          printf("xds_decode() failed.\n");
          return 1;
      }
      if (new_msg_size != 0) {
          printf("The size of the decoded message is wrong.\n");
          return 1;
      }
      if (memcmp(msg, new_msg, new_msg_size) != 0) {
          printf("The decoded octet stream is not correct.\n");
          return 1;
      }
      xds_destroy(xds);
      free(new_msg);
  
      /* Everything went fine. */
  
      return 0;
  }
  
  #endif /* XDS_TEST_XDR_OCTETSTREAM_EMPTY */
  Index: ossp-pkg/srpc/libxds/xds_test_xml.c
  ============================================================
  $ cvs update -p -r1.1 xds_test_xml.c
  /* 
   * XDS - OSSP Extensible Data Serialization Library Copyright (c) 2001 The
   * OSSP Project (http://www.ossp.org/) Copyright (c) 2001 Cable & Wireless
   * Deutschland (http://www.cw.com/de/)
   * 
   * This file is part of OSSP XDS, an extensible data serialization library
   * which can be found at http://www.ossp.com/pkg/xds/.
   * 
   * Permission to use, copy, modify, and distribute this software for any
   * purpose with or without fee is hereby granted, provided that the above
   * copyright notice and this permission notice appear in all copies.
   * 
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
   * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 
   * EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR CONTRIBUTORS BE
   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
   * POSSIBILITY OF SUCH DAMAGE. */
  
  #include <stdio.h>
  #include <string.h>
  #include <unistd.h>
  
  #include "xds_p.h"
  
  #ifdef XDS_TEST_XML_INT32
  
  int main()
  {
      xds_t *xds;
      char *buffer;
      size_t buffer_size;
  
      xds_int32_t values[] = {
          0x00000000,
          0x12345678,
          -0x12345678,
          0x7bcdef01,
          -0x7bcdef01,
          0x7fffffff
      };
  
      size_t i;
  
      /* Encode the values array, then decode it back and compare the numbers. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL) {
          printf("Failed to initialize XDS context.\n");
          return 1;
      }
      if (xds_register(xds, "begin", &xml_encode_begin, NULL) != XDS_OK ||
          xds_register(xds, "end", &xml_encode_end, NULL) != XDS_OK ||
          xds_register(xds, "int", &xml_encode_int32, NULL) != XDS_OK) {
          printf("Failed to register my encoding engines.\n");
          return 1;
      }
      if (xds_encode(xds, "begin") != XDS_OK) {
          printf("xds_encode_begin() failed!\n");
          return 1;
      }
      for (i = 0; i < sizeof (values) / sizeof (xds_int32_t); ++i) {
          if (xds_encode(xds, "int", values[i]) != XDS_OK) {
              printf("xds_encode(values[%d]) failed!\n", i);
              return 1;
          }
      }
      if (xds_encode(xds, "end") != XDS_OK) {
          printf("xds_encode_end() failed!\n");
          return 1;
      }
      if (xds_getbuffer(xds, XDS_GIFT, (void **)&buffer, &buffer_size) !=
          XDS_OK) {
          printf("getbuffer() failed.\n");
          return 1;
      }
      xds_destroy(xds);
  
      xds = xds_init(XDS_DECODE);
      if (xds == NULL) {
          printf("Failed to initialize XDS context.\n");
          return 1;
      }
      if (xds_register(xds, "begin", &xml_decode_begin, NULL) != XDS_OK ||
          xds_register(xds, "end", &xml_decode_end, NULL) != XDS_OK ||
          xds_register(xds, "int", &xml_decode_int32, NULL) != XDS_OK) {
          printf("Failed to register my decoding engines.\n");
          return 1;
      }
      if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK) {
          printf("setbuffer() failed.\n");
          return 1;
      }
      if (xds_decode(xds, "begin") != XDS_OK) {
          printf("xds_decode_begin() failed!\n");
          return 1;
      }
      for (i = 0; i < sizeof (values) / sizeof (xds_int32_t); ++i) {
          xds_int32_t val;
          if (xds_decode(xds, "int", &val) != XDS_OK) {
              printf("xds_decode(values[%d]) failed!\n", i);
              return 1;
          }
          if (val != values[i]) {
              printf
                  ("Decoded value (%d) does not match the original value (%d)!\n",
                   val, values[i]);
              return 1;
          }
      }
      if (xds_decode(xds, "end") != XDS_OK) {
          printf("xds_decode_end() failed!\n");
          return 1;
      }
      xds_destroy(xds);
  
      /* Everything went fine. */
  
      return 0;
  }
  
  #endif /* XDS_TEST_XML_INT32 */
  
  #ifdef XDS_TEST_XML_UINT32
  
  int main()
  {
      xds_t *xds;
      char *buffer;
      size_t buffer_size;
  
      xds_uint32_t values[] = {
          0x00000000,
          0x12345678,
          0xabcdef01,
          0xc500b3ef,
          0xffffffff
      };
  
      size_t i;
  
      /* Encode the values array, then decode it back and compare the numbers. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL) {
          printf("Failed to initialize XDS context.\n");
          return 1;
      }
      if (xds_register(xds, "int", &xml_encode_uint32, NULL) != XDS_OK) {
          printf("Failed to register my encoding engines.\n");
          return 1;
      }
      for (i = 0; i < sizeof (values) / sizeof (xds_uint32_t); ++i) {
          if (xds_encode(xds, "int", values[i]) != XDS_OK) {
              printf("xds_encode(values[%d]) failed!\n", i);
              return 1;
          }
      }
      if (xds_getbuffer(xds, XDS_GIFT, (void **)&buffer, &buffer_size) !=
          XDS_OK) {
          printf("getbuffer() failed.\n");
          return 1;
      }
      xds_destroy(xds);
  
      xds = xds_init(XDS_DECODE);
      if (xds == NULL) {
          printf("Failed to initialize XDS context.\n");
          return 1;
      }
      if (xds_register(xds, "int", &xml_decode_uint32, NULL) != XDS_OK) {
          printf("Failed to register my decoding engines.\n");
          return 1;
      }
      if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK) {
          printf("setbuffer() failed.\n");
          return 1;
      }
      for (i = 0; i < sizeof (values) / sizeof (xds_uint32_t); ++i) {
          xds_uint32_t val;
          if (xds_decode(xds, "int", &val) != XDS_OK) {
              printf("xds_decode(values[%d]) failed!\n", i);
              return 1;
          }
          if (val != values[i]) {
              printf
                  ("Decoded value (%d) does not match the original value (%d)!\n",
                   val, values[i]);
              return 1;
          }
      }
      xds_destroy(xds);
  
      /* Everything went fine. */
  
      return 0;
  }
  
  #endif /* XDS_TEST_XML_UINT32 */
  
  #ifdef XDS_TEST_XML_INT64
  
  #ifdef XDS_HAVE_64_BIT_SUPPORT
  
  int main()
  {
      xds_t *xds;
      char *buffer;
      size_t buffer_size;
  
      xds_int64_t values[] = {
          0x0000000000000000LL,
          0x123456789abcdef0LL,
          -0x123456789abcdef0LL,
          0x7bcdef01cc45bb9aLL,
          -0x7bcdef01cc45bb9aLL,
          0x7fffffffffffffffLL
      };
  
      size_t i;
  
      /* Encode the values array, then decode it back and compare the numbers. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL) {
          printf("Failed to initialize XDS context.\n");
          return 1;
      }
      if (xds_register(xds, "int", &xml_encode_int64, NULL) != XDS_OK) {
          printf("Failed to register my encoding engines.\n");
          return 1;
      }
      for (i = 0; i < sizeof (values) / sizeof (xds_int64_t); ++i) {
          if (xds_encode(xds, "int", values[i]) != XDS_OK) {
              printf("xds_encode(values[%d]) failed!\n", i);
              return 1;
          }
      }
      if (xds_getbuffer(xds, XDS_GIFT, (void **)&buffer, &buffer_size) !=
          XDS_OK) {
          printf("getbuffer() failed.\n");
          return 1;
      }
      xds_destroy(xds);
  
      xds = xds_init(XDS_DECODE);
      if (xds == NULL) {
          printf("Failed to initialize XDS context.\n");
          return 1;
      }
      if (xds_register(xds, "int", &xml_decode_int64, NULL) != XDS_OK) {
          printf("Failed to register my decoding engines.\n");
          return 1;
      }
      if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK) {
          printf("setbuffer() failed.\n");
          return 1;
      }
      for (i = 0; i < sizeof (values) / sizeof (xds_int64_t); ++i) {
          xds_int64_t val;
          if (xds_decode(xds, "int", &val) != XDS_OK) {
              printf("xds_decode(values[%d]) failed!\n", i);
              return 1;
          }
          if (val != values[i]) {
              printf("Decoded value does not match the original!\n");
              return 1;
          }
      }
      xds_destroy(xds);
  
      /* Everything went fine. */
  
      return 0;
  }
  
  #endif /* XDS_HAVE_64_BIT_SUPPORT */
  
  #endif /* XDS_TEST_XML_INT64 */
  
  #ifdef XDS_TEST_XML_UINT64
  
  #ifdef XDS_HAVE_64_BIT_SUPPORT
  
  int main()
  {
      xds_t *xds;
      char *buffer;
      size_t buffer_size;
  
      xds_uint64_t values[] = {
          0x0000000000000000ULL,
          0x123456789abcdef0ULL,
          0xabcdef01cc45bb9aULL,
          0xc500b3efdd34ca9eULL,
          0xffffffffffffffffULL
      };
  
      size_t i;
  
      /* Encode the values array, then decode it back and compare the numbers. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL) {
          printf("Failed to initialize XDS context.\n");
          return 1;
      }
      if (xds_register(xds, "int", &xml_encode_uint64, NULL) != XDS_OK) {
          printf("Failed to register my encoding engines.\n");
          return 1;
      }
      for (i = 0; i < sizeof (values) / sizeof (xds_uint64_t); ++i) {
          if (xds_encode(xds, "int", values[i]) != XDS_OK) {
              printf("xds_encode(values[%d]) failed!\n", i);
              return 1;
          }
      }
      if (xds_getbuffer(xds, XDS_GIFT, (void **)&buffer, &buffer_size) !=
          XDS_OK) {
          printf("getbuffer() failed.\n");
          return 1;
      }
      xds_destroy(xds);
  
      xds = xds_init(XDS_DECODE);
      if (xds == NULL) {
          printf("Failed to initialize XDS context.\n");
          return 1;
      }
      if (xds_register(xds, "int", &xml_decode_uint64, NULL) != XDS_OK) {
          printf("Failed to register my decoding engines.\n");
          return 1;
      }
      if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK) {
          printf("setbuffer() failed.\n");
          return 1;
      }
      for (i = 0; i < sizeof (values) / sizeof (xds_uint64_t); ++i) {
          xds_uint64_t val;
          if (xds_decode(xds, "int", &val) != XDS_OK) {
              printf("xds_decode(values[%d]) failed!\n", i);
              return 1;
          }
          if (val != values[i]) {
              printf("Decoded value does not match the original!\n");
              return 1;
          }
      }
      xds_destroy(xds);
  
      /* Everything went fine. */
  
      return 0;
  }
  
  #endif /* XDS_HAVE_64_BIT_SUPPORT */
  
  #endif /* XDS_TEST_XML_UINT64 */
  
  #ifdef XDS_TEST_XML_DOUBLE
  
  int main()
  {
  #if 0
      xds_t *xds;
      char *buffer;
      size_t buffer_size;
  
      xds_double_t values[] = {
          3.14159265358979323844
      };
  
      size_t i;
  
      /* Encode the values array, then decode it back and compare the numbers. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL) {
          printf("Failed to initialize XDS context.\n");
          return 1;
      }
      if (xds_register(xds, "int", &xml_encode_double, NULL) != XDS_OK) {
          printf("Failed to register my encoding engines.\n");
          return 1;
      }
      for (i = 0; i < sizeof (values) / sizeof (xds_double_t); ++i) {
          if (xds_encode(xds, "int", values[i]) != XDS_OK) {
              printf("xds_encode(values[%d]) failed!\n", i);
              return 1;
          }
      }
      if (xds_getbuffer(xds, XDS_GIFT, (void **)&buffer, &buffer_size) !=
          XDS_OK) {
          printf("getbuffer() failed.\n");
          return 1;
      }
      xds_destroy(xds);
  
      printf("%s\n", buffer);
  
      xds = xds_init(XDS_DECODE);
      if (xds == NULL) {
          printf("Failed to initialize XDS context.\n");
          return 1;
      }
      if (xds_register(xds, "int", &xml_decode_double, NULL) != XDS_OK) {
          printf("Failed to register my decoding engines.\n");
          return 1;
      }
      if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK) {
          printf("setbuffer() failed.\n");
          return 1;
      }
      for (i = 0; i < sizeof (values) / sizeof (xds_double_t); ++i) {
          xds_double_t val;
          if (xds_decode(xds, "int", &val) != XDS_OK) {
              printf("xds_decode(values[%d]) failed!\n", i);
              return 1;
          }
          if (val != values[i]) {
              printf
                  ("Decoded value (%E) does not match the original value (%E)!\n",
                   val, values[i]);
              return 1;
          }
      }
      xds_destroy(xds);
  
      /* Everything went fine. */
  #endif
      return 0;
  }
  
  #endif /* XDS_TEST_XML_DOUBLE */
  
  #ifdef XDS_TEST_XML_STRING
  
  int main()
  {
      xds_t *xds;
      char *buffer;
      size_t buffer_size;
  
      char msg[] = "<Hallo> ]]>&<&>World: äöüß";
      char *new_msg;
  
      /* Encode the string, then erase the buffer and decode the string back,
       * verifying that it hasn't changed. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL) {
          printf("Failed to initialize XDS context.\n");
          return 1;
      }
      if (xds_register(xds, "string", &xml_encode_string, NULL) != XDS_OK ||
          xds_register(xds, "begin", &xml_encode_begin, NULL) != XDS_OK ||
          xds_register(xds, "end", &xml_encode_end, NULL) != XDS_OK) {
          printf("Failed to register my encoding engines.\n");
          return 1;
      }
      if (xds_encode(xds, "begin string end", msg, sizeof (msg) - 1) != XDS_OK) {
          printf("xds_encode() failed.\n");
          return 1;
      }
      if (xds_getbuffer(xds, XDS_GIFT, (void **)&buffer, &buffer_size) !=
          XDS_OK) {
          printf("xds_getbuffer() failed.\n");
          return 1;
      }
      xds_destroy(xds);
      write(1, buffer, buffer_size);
      printf("\n");
  
      xds = xds_init(XDS_DECODE);
      if (xds == NULL) {
          printf("Failed to initialize XDS context.\n");
          return 1;
      }
      if (xds_register(xds, "string", &xml_decode_string, NULL) != XDS_OK ||
          xds_register(xds, "begin", &xml_decode_begin, NULL) != XDS_OK ||
          xds_register(xds, "end", &xml_decode_end, NULL) != XDS_OK) {
          printf("Failed to register my decoding engines.\n");
          return 1;
      }
      if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK) {
          printf("xds_setbuffer() failed.\n");
          return 1;
      }
      if (xds_decode(xds, "begin string end", &new_msg) != XDS_OK) {
          printf("xds_decode() failed.\n");
          return 1;
      }
      if (strlen(new_msg) != sizeof (msg) - 1) {
          printf("The size of the decoded message is wrong.\n");
          return 1;
      }
      if (memcmp(msg, new_msg, sizeof (msg) - 1) != 0) {
          printf("The decoded string is not correct.\n");
          return 1;
      }
      xds_destroy(xds);
      free(new_msg);
  
      /* Everything went fine. */
  
      return 0;
  }
  
  #endif /* XDS_TEST_XML_STRING */
  
  #ifdef XDS_TEST_XML_STRING_EMPTY
  
  int main()
  {
      xds_t *xds;
      char *buffer;
      size_t buffer_size;
  
      char msg[] = "";
      char *new_msg;
  
      /* Encode the string, then erase the buffer and decode the string back,
       * verifying that it hasn't changed. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL) {
          printf("Failed to initialize XDS context.\n");
          return 1;
      }
      if (xds_register(xds, "string", &xml_encode_string, NULL) != XDS_OK ||
          xds_register(xds, "begin", &xml_encode_begin, NULL) != XDS_OK ||
          xds_register(xds, "end", &xml_encode_end, NULL) != XDS_OK) {
          printf("Failed to register my encoding engines.\n");
          return 1;
      }
      if (xds_encode(xds, "begin string end", msg, sizeof (msg) - 1) != XDS_OK) {
          printf("xds_encode() failed.\n");
          return 1;
      }
      if (xds_getbuffer(xds, XDS_GIFT, (void **)&buffer, &buffer_size) !=
          XDS_OK) {
          printf("xds_getbuffer() failed.\n");
          return 1;
      }
      xds_destroy(xds);
      write(1, buffer, buffer_size);
      printf("\n");
  
      xds = xds_init(XDS_DECODE);
      if (xds == NULL) {
          printf("Failed to initialize XDS context.\n");
          return 1;
      }
      if (xds_register(xds, "string", &xml_decode_string, NULL) != XDS_OK ||
          xds_register(xds, "begin", &xml_decode_begin, NULL) != XDS_OK ||
          xds_register(xds, "end", &xml_decode_end, NULL) != XDS_OK) {
          printf("Failed to register my decoding engines.\n");
          return 1;
      }
      if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK) {
          printf("xds_setbuffer() failed.\n");
          return 1;
      }
      if (xds_decode(xds, "begin string end", &new_msg) != XDS_OK) {
          printf("xds_decode() failed.\n");
          return 1;
      }
      if (strlen(new_msg) != sizeof (msg) - 1) {
          printf("The size of the decoded message is wrong.\n");
          return 1;
      }
      if (memcmp(msg, new_msg, sizeof (msg) - 1) != 0) {
          printf("The decoded string is not correct.\n");
          return 1;
      }
      xds_destroy(xds);
      free(new_msg);
  
      /* Everything went fine. */
  
      return 0;
  }
  
  #endif /* XDS_TEST_XML_STRING_EMPTY */
  
  #ifdef XDS_TEST_XML_OCTETSTREAM
  
  int main()
  {
      xds_t *xds;
      char *buffer;
      size_t buffer_size;
  
      char msg[] = "Hallo\000Worl";
      char *new_msg;
      size_t new_msg_size;
  
      /* Encode the string as octet stream. Then erase the buffer and decode
       * the string back, verifying that it hasn't changed. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL) {
          printf("Failed to initialize XDS context.\n");
          return 1;
      }
      if (xds_register(xds, "os", &xml_encode_octetstream, NULL) != XDS_OK ||
          xds_register(xds, "begin", &xml_encode_begin, NULL) != XDS_OK ||
          xds_register(xds, "end", &xml_encode_end, NULL) != XDS_OK) {
          printf("Failed to register my encoding engines.\n");
          return 1;
      }
      if (xds_encode(xds, "begin os end", msg, sizeof (msg) - 1) != XDS_OK) {
          printf("xds_encode() failed.\n");
          return 1;
      }
      if (xds_getbuffer(xds, XDS_GIFT, (void **)&buffer, &buffer_size) !=
          XDS_OK) {
          printf("xds_getbuffer() failed.\n");
          return 1;
      }
      xds_destroy(xds);
      write(1, buffer, buffer_size);
      printf("\n");
  
      xds = xds_init(XDS_DECODE);
      if (xds == NULL) {
          printf("Failed to initialize XDS context.\n");
          return 1;
      }
      if (xds_register(xds, "os", &xml_decode_octetstream, NULL) != XDS_OK ||
          xds_register(xds, "begin", &xml_decode_begin, NULL) != XDS_OK ||
          xds_register(xds, "end", &xml_decode_end, NULL) != XDS_OK) {
          printf("Failed to register my decoding engines.\n");
          return 1;
      }
      if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK) {
          printf("xds_setbuffer() failed.\n");
          return 1;
      }
      if (xds_decode(xds, "begin os end", &new_msg, &new_msg_size) != XDS_OK) {
          printf("xds_decode() failed.\n");
          return 1;
      }
      if (new_msg_size != sizeof (msg) - 1) {
          printf("The size of the decoded message is wrong.\n");
          return 1;
      }
      if (memcmp(msg, new_msg, new_msg_size) != 0) {
          printf("The decoded octet stream is not correct.\n");
          return 1;
      }
      xds_destroy(xds);
      free(new_msg);
  
      /* Everything went fine. */
  
      return 0;
  }
  
  #endif /* XDS_TEST_XML_OCTETSTREAM */
  
  #ifdef XDS_TEST_XML_OCTETSTREAM_EMPTY
  
  int main()
  {
      xds_t *xds;
      char *buffer;
      size_t buffer_size;
  
      char msg[] = "";
      char *new_msg;
      size_t new_msg_size;
  
      /* Encode the string as octet stream. Then erase the buffer and decode
       * the string back, verifying that it hasn't changed. */
  
      xds = xds_init(XDS_ENCODE);
      if (xds == NULL) {
          printf("Failed to initialize XDS context.\n");
          return 1;
      }
      if (xds_register(xds, "os", &xml_encode_octetstream, NULL) != XDS_OK ||
          xds_register(xds, "begin", &xml_encode_begin, NULL) != XDS_OK ||
          xds_register(xds, "end", &xml_encode_end, NULL) != XDS_OK) {
          printf("Failed to register my encoding engines.\n");
          return 1;
      }
      if (xds_encode(xds, "begin os end", msg, sizeof (msg) - 1) != XDS_OK) {
          printf("xds_encode() failed.\n");
          return 1;
      }
      if (xds_getbuffer(xds, XDS_GIFT, (void **)&buffer, &buffer_size) !=
          XDS_OK) {
          printf("xds_getbuffer() failed.\n");
          return 1;
      }
      xds_destroy(xds);
      write(1, buffer, buffer_size);
      printf("\n");
  
      xds = xds_init(XDS_DECODE);
      if (xds == NULL) {
          printf("Failed to initialize XDS context.\n");
          return 1;
      }
      if (xds_register(xds, "os", &xml_decode_octetstream, NULL) != XDS_OK ||
          xds_register(xds, "begin", &xml_decode_begin, NULL) != XDS_OK ||
          xds_register(xds, "end", &xml_decode_end, NULL) != XDS_OK) {
          printf("Failed to register my decoding engines.\n");
          return 1;
      }
      if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK) {
          printf("xds_setbuffer() failed.\n");
          return 1;
      }
      if (xds_decode(xds, "begin os end", &new_msg, &new_msg_size) != XDS_OK) {
          printf("xds_decode() failed.\n");
          return 1;
      }
      if (new_msg_size != sizeof (msg) - 1) {
          printf("The size of the decoded message is wrong.\n");
          return 1;
      }
      if (memcmp(msg, new_msg, new_msg_size) != 0) {
          printf("The decoded octet stream is not correct.\n");
          return 1;
      }
      xds_destroy(xds);
      free(new_msg);
  
      /* Everything went fine. */
  
      return 0;
  }
  
  #endif /* XDS_TEST_XML_OCTETSTREAM_EMPTY */
                                    

From ossp-cvs-owner@ossp.org  Wed Aug  8 21:29:28 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f78JTRv43112; Wed, 8 Aug 2001 21:29:27 +0200 (CEST)
Date: Wed, 8 Aug 2001 21:29:27 +0200 (CEST)
Message-Id: <200108081929.f78JTRv43112@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xds.h.in xds_p.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   08-Aug-2001 21:29:27
  Branch: HEAD                             Handle: 2001080820292600

  Modified files:
    ossp-pkg/srpc/libxds    xds.h.in xds_p.h

  Log:
    Mmanual style cleanups to header files.

  Summary:
    Revision    Changes     Path
    1.11        +83 -89     ossp-pkg/srpc/libxds/xds.h.in
    1.2         +36 -34     ossp-pkg/srpc/libxds/xds_p.h
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xds.h.in
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 xds.h.in
  --- ossp-pkg/srpc/libxds/xds.h.in	2001/08/02 17:24:49	1.10
  +++ ossp-pkg/srpc/libxds/xds.h.in	2001/08/08 19:29:26	1.11
  @@ -1,59 +1,58 @@
   /*
  -   XDS - OSSP Extensible Data Serialization Library
  -   Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -   Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  -
  -   This file is part of OSSP XDS, an extensible data serialization
  -   library which can be found at http://www.ossp.com/pkg/xds/.
  -
  -   Permission to use, copy, modify, and distribute this software for
  -   any purpose with or without fee is hereby granted, provided that
  -   the above copyright notice and this permission notice appear in all
  -   copies.
  -
  -   THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  -   WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  -   MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  -   IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  -   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  -   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  -   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  -   USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  -   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  -   OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  -   OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  -   SUCH DAMAGE.
  -
  -   xds.h: C API
  +**  XDS - OSSP Extensible Data Serialization Library
  +**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**
  +**  This file is part of OSSP XDS, an extensible data serialization
  +**  library which can be found at http://www.ossp.com/pkg/xds/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  xds.h: C API
   */
   
  -#ifndef __LIBXDS_H__
  -#define __LIBXDS_H__
  +#ifndef __XDS_H__
  +#define __XDS_H__
   
   #include <stdlib.h>
   #include <stdarg.h>
   #include <sys/types.h>
   #include <assert.h>
   
  -#define XDS_TRUE (1==1)
  +#define XDS_TRUE  (1==1)
   #define XDS_FALSE (1!=1)
   
   @have_64_bit_support@
   
  -typedef @xds_uint8_t@ xds_uint8_t;
  -typedef @xds_int8_t@ xds_int8_t;
  +typedef @xds_uint8_t@  xds_uint8_t;
  +typedef @xds_int8_t@   xds_int8_t;
   typedef @xds_uint16_t@ xds_uint16_t;
  -typedef @xds_int16_t@ xds_int16_t;
  +typedef @xds_int16_t@  xds_int16_t;
   typedef @xds_uint32_t@ xds_uint32_t;
  -typedef @xds_int32_t@ xds_int32_t;
  +typedef @xds_int32_t@  xds_int32_t;
   #ifdef XDS_HAVE_64_BIT_SUPPORT
   typedef @xds_uint64_t@ xds_uint64_t;
  -typedef @xds_int64_t@ xds_int64_t;
  +typedef @xds_int64_t@  xds_int64_t;
   #endif
  -typedef double xds_double_t;
  +typedef double         xds_double_t;
   
  -enum
  -    {
  +enum {
       XDS_OK                 =  0,
       XDS_ERR_NO_MEM         = -1,
       XDS_ERR_OVERFLOW       = -2,
  @@ -63,69 +62,62 @@
       XDS_ERR_INVALID_MODE   = -6,
       XDS_ERR_UNDERFLOW      = -7,
       XDS_ERR_UNKNOWN        = -8
  -    };
  +};
  +
   typedef enum { XDS_ENCODE, XDS_DECODE } xds_mode_t;
   typedef enum { XDS_LOAN,   XDS_GIFT   } xds_scope_t;
   
   struct xds_context;
   typedef struct xds_context xds_t;
   
  -typedef int (*xds_engine_t)(xds_t* xds, void* engine_context,
  -			    void* buffer, size_t buffer_size, size_t* used_buffer_size,
  -			    va_list* args);
  -
  -xds_t* xds_init(xds_mode_t);
  -void xds_destroy(xds_t* xds);
  -
  -int xds_register(xds_t* xds, const char* name, xds_engine_t engine, void* engine_context);
  -int xds_unregister(xds_t* xds, const char* name);
  -
  -int xds_setbuffer(xds_t* xds, xds_scope_t flag, void* buffer, size_t buffer_len);
  -int xds_getbuffer(xds_t* xds, xds_scope_t flag, void** buffer, size_t* buffer_len);
  -
  -int xds_encode(xds_t* xds, const char* fmt, ...);
  -int xds_decode(xds_t* xds, const char* fmt, ...);
  -int xds_vencode(xds_t* xds, const char* fmt, va_list args);
  -int xds_vdecode(xds_t* xds, const char* fmt, va_list args);
  -
  -#define xds_check_parameter(condition)						\
  -    do										\
  -    {										\
  -    assert(condition);								\
  -    if (!(condition))								\
  -        return XDS_ERR_INVALID_ARG;						\
  +typedef int (*xds_engine_t)(xds_t *xds, void *engine_context,
  +                            void *buffer, size_t buffer_size, size_t *used_buffer_size,
  +                            va_list *args);
  +
  +xds_t *xds_init      (xds_mode_t);
  +void   xds_destroy   (xds_t *xds);
  +int    xds_register  (xds_t *xds, const char *name, xds_engine_t engine, void *engine_context);
  +int    xds_unregister(xds_t *xds, const char *name);
  +int    xds_setbuffer (xds_t *xds, xds_scope_t flag, void *buffer, size_t buffer_len);
  +int    xds_getbuffer (xds_t *xds, xds_scope_t flag, void **buffer, size_t *buffer_len);
  +int    xds_encode    (xds_t *xds, const char *fmt, ...);
  +int    xds_decode    (xds_t *xds, const char *fmt, ...);
  +int    xds_vencode   (xds_t *xds, const char *fmt, va_list args);
  +int    xds_vdecode   (xds_t *xds, const char *fmt, va_list args);
  +
  +#define xds_check_parameter(condition) \
  +    do { \
  +        assert(condition); \
  +        if (!(condition)) \
  +            return XDS_ERR_INVALID_ARG; \
       } while(XDS_FALSE)
   
  -#define xds_init_encoding_engine(size)                                          \
  -    do                                                                          \
  -    {                                                                           \
  -    xds_check_parameter(xds != NULL);                                           \
  -    xds_check_parameter(buffer != NULL);                                        \
  -    xds_check_parameter(buffer_size != 0);                                      \
  -    xds_check_parameter(used_buffer_size != NULL && *used_buffer_size == 0);    \
  -    xds_check_parameter(args != NULL);                                          \
  -    *used_buffer_size = size;                                                   \
  -    if (buffer_size < size)                                                     \
  -        return XDS_ERR_OVERFLOW;                                                \
  +#define xds_init_encoding_engine(size) \
  +    do { \
  +        xds_check_parameter(xds != NULL); \
  +        xds_check_parameter(buffer != NULL); \
  +        xds_check_parameter(buffer_size != 0); \
  +        xds_check_parameter(used_buffer_size != NULL && *used_buffer_size == 0); \
  +        xds_check_parameter(args != NULL); \
  +        *used_buffer_size = size; \
  +        if (buffer_size < size) \
  +            return XDS_ERR_OVERFLOW; \
       } while(XDS_FALSE)
   
  -#define xds_init_decoding_engine(size)                                          \
  -    do                                                                          \
  -    {                                                                           \
  -    xds_check_parameter(xds != NULL);                                           \
  -    xds_check_parameter(buffer != NULL);                                        \
  -    xds_check_parameter(buffer_size != 0);                                      \
  -    xds_check_parameter(used_buffer_size != NULL && *used_buffer_size == 0);    \
  -    xds_check_parameter(args != NULL);                                          \
  -    *used_buffer_size = size;                                                   \
  -    if (buffer_size < size)                                                     \
  -        return XDS_ERR_UNDERFLOW;                                               \
  +#define xds_init_decoding_engine(size) \
  +    do { \
  +        xds_check_parameter(xds != NULL); \
  +        xds_check_parameter(buffer != NULL); \
  +        xds_check_parameter(buffer_size != 0); \
  +        xds_check_parameter(used_buffer_size != NULL && *used_buffer_size == 0); \
  +        xds_check_parameter(args != NULL); \
  +        *used_buffer_size = size; \
  +        if (buffer_size < size) \
  +            return XDS_ERR_UNDERFLOW; \
       } while(XDS_FALSE)
   
  -#define xds_declare_formatting_engine(x)					\
  -    int x(xds_t* xds, void* engine_context,					\
  -	  void* buffer, size_t buffer_size, size_t* used_buffer_size,		\
  -	  va_list* args)
  +#define xds_declare_formatting_engine(func) \
  +    int func(xds_t *, void *, void *, size_t, size_t *, va_list *)
   
   xds_declare_formatting_engine(xdr_encode_uint32);
   xds_declare_formatting_engine(xdr_decode_uint32);
  @@ -164,9 +156,11 @@
   xds_declare_formatting_engine(xml_decode_octetstream);
   xds_declare_formatting_engine(xml_encode_string);
   xds_declare_formatting_engine(xml_decode_string);
  +
   extern const char xds_xml_begin_text[];
   extern const char xds_xml_end_text[];
   extern const char xds_base64[];
   extern const char xds_pad64;
  +
  +#endif /* __XDS_H__ */
   
  -#endif /* !defined(__LIBXDS_H__) */
  Index: ossp-pkg/srpc/libxds/xds_p.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xds_p.h
  --- ossp-pkg/srpc/libxds/xds_p.h	2001/08/08 19:15:23	1.1
  +++ ossp-pkg/srpc/libxds/xds_p.h	2001/08/08 19:29:26	1.2
  @@ -1,35 +1,38 @@
  -/* 
  - * XDS - OSSP Extensible Data Serialization Library Copyright (c) 2001 The
  - * OSSP Project (http://www.ossp.org/) Copyright (c) 2001 Cable & Wireless
  - * Deutschland (http://www.cw.com/de/)
  - * 
  - * This file is part of OSSP XDS, an extensible data serialization library
  - * which can be found at http://www.ossp.com/pkg/xds/.
  - * 
  - * Permission to use, copy, modify, and distribute this software for any
  - * purpose with or without fee is hereby granted, provided that the above
  - * copyright notice and this permission notice appear in all copies.
  - * 
  - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 
  - * EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR CONTRIBUTORS BE
  - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
  - * POSSIBILITY OF SUCH DAMAGE.
  - * 
  - * internal.h: internal C API */
  +/*
  +**  XDS - OSSP Extensible Data Serialization Library
  +**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**
  +**  This file is part of OSSP XDS, an extensible data serialization
  +**  library which can be found at http://www.ossp.com/pkg/xds/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  xds_p.h: internal C API
  +*/
   
  -#ifndef __INTERNAL_H__
  -#define __INTERNAL_H__
  +#ifndef __XDS_P_H__
  +#define __XDS_P_H__
   
   #include "xds.h"
   
  -#define XDS_INITIAL_BUFFER_CAPACITY  512
  +#define XDS_INITIAL_BUFFER_CAPACITY   512
   #define XDS_INITIAL_ENGINES_CAPACITY  32
   
   typedef struct {
  @@ -40,21 +43,20 @@
   
   struct xds_context {
       xds_mode_t mode;
  -
       char *buffer;
       size_t buffer_len;
       size_t buffer_capacity;
       int we_own_buffer;
  -
       engine_map_t *engines;
       size_t engines_len;
       size_t engines_capacity;
   };
   
  -int xds_find_engine(const engine_map_t * engines, size_t last,
  -                    const char *name, size_t * pos);
  -int xds_set_capacity(void **array, size_t * array_capacity,
  +int xds_find_engine(const engine_map_t *engines, size_t last,
  +                    const char *name, size_t *pos);
  +int xds_set_capacity(void **array, size_t *array_capacity,
                        size_t new_capacity, size_t elem_size,
                        size_t initial_capacity);
  +
  +#endif /* __XDS_P_H__ */
   
  -#endif /* !defined(__INTERNAL_H__) */

From ossp-cvs-owner@ossp.org  Wed Aug  8 21:32:04 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f78JW2743532; Wed, 8 Aug 2001 21:32:02 +0200 (CEST)
Date: Wed, 8 Aug 2001 21:32:02 +0200 (CEST)
Message-Id: <200108081932.f78JW2743532@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xds.h.in xds_engine_xml.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   08-Aug-2001 21:32:02
  Branch: HEAD                             Handle: 2001080820320200

  Modified files:
    ossp-pkg/srpc/libxds    xds.h.in xds_engine_xml.c

  Log:
    Do not export internal things.

  Summary:
    Revision    Changes     Path
    1.12        +0  -5      ossp-pkg/srpc/libxds/xds.h.in
    1.2         +6  -5      ossp-pkg/srpc/libxds/xds_engine_xml.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xds.h.in
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 xds.h.in
  --- ossp-pkg/srpc/libxds/xds.h.in	2001/08/08 19:29:26	1.11
  +++ ossp-pkg/srpc/libxds/xds.h.in	2001/08/08 19:32:02	1.12
  @@ -157,10 +157,5 @@
   xds_declare_formatting_engine(xml_encode_string);
   xds_declare_formatting_engine(xml_decode_string);
   
  -extern const char xds_xml_begin_text[];
  -extern const char xds_xml_end_text[];
  -extern const char xds_base64[];
  -extern const char xds_pad64;
  -
   #endif /* __XDS_H__ */
   
  Index: ossp-pkg/srpc/libxds/xds_engine_xml.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xds_engine_xml.c
  --- ossp-pkg/srpc/libxds/xds_engine_xml.c	2001/08/08 19:15:23	1.1
  +++ ossp-pkg/srpc/libxds/xds_engine_xml.c	2001/08/08 19:32:02	1.2
  @@ -27,11 +27,14 @@
   #include <stdio.h>
   #include "xds.h"
   
  -const char xds_xml_begin_text[] =
  +static const char xds_xml_begin_text[] =
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\">\n"
       "<!DOCTYPE xds SYSTEM \"http://www.ossp.org/pkg/xds/xds-xml.dtd\">\n"
       "<xds>\n";
   
  +static const char xds_xml_end_text[] = 
  +    "</xds>\n";
  +
   int xml_encode_begin(xds_t * xds, void *engine_context,
                        void *buffer, size_t buffer_size,
                        size_t * used_buffer_size, va_list * args)
  @@ -52,8 +55,6 @@
       return XDS_OK;
   }
   
  -const char xds_xml_end_text[] = "</xds>\n";
  -
   int xml_encode_end(xds_t * xds, void *engine_context,
                      void *buffer, size_t buffer_size,
                      size_t * used_buffer_size, va_list * args)
  @@ -754,9 +755,9 @@
       return XDS_OK;
   }
   
  -const char xds_base64[] =
  +static const char xds_base64[] =
       "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  -const char xds_pad64 = '=';
  +static const char xds_pad64 = '=';
   
   static int base64_encode(char *dst, size_t dstlen, unsigned char const *src,
                            size_t srclen)

From ossp-cvs-owner@ossp.org  Wed Aug  8 21:33:57 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f78JXtw43683; Wed, 8 Aug 2001 21:33:55 +0200 (CEST)
Date: Wed, 8 Aug 2001 21:33:55 +0200 (CEST)
Message-Id: <200108081933.f78JXtw43683@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xds.c xds_p.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   08-Aug-2001 21:33:55
  Branch: HEAD                             Handle: 2001080820335500

  Modified files:
    ossp-pkg/srpc/libxds    xds.c xds_p.h

  Log:
    Do not export internal functions, too.

  Summary:
    Revision    Changes     Path
    1.2         +2  -2      ossp-pkg/srpc/libxds/xds.c
    1.3         +0  -6      ossp-pkg/srpc/libxds/xds_p.h
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xds.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xds.c
  --- ossp-pkg/srpc/libxds/xds.c	2001/08/08 19:15:23	1.1
  +++ ossp-pkg/srpc/libxds/xds.c	2001/08/08 19:33:55	1.2
  @@ -142,7 +142,7 @@
       return XDS_OK;
   }
   
  -int xds_set_capacity(void **array, size_t *array_capacity,
  +static int xds_set_capacity(void **array, size_t *array_capacity,
                        size_t new_capacity, size_t elem_size,
                        size_t initial_capacity)
   {
  @@ -174,7 +174,7 @@
       return XDS_OK;
   }
   
  -int xds_find_engine(const engine_map_t *engines, size_t last,
  +static int xds_find_engine(const engine_map_t *engines, size_t last,
                       const char *name, size_t *pos)
   {
       size_t first;
  Index: ossp-pkg/srpc/libxds/xds_p.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xds_p.h
  --- ossp-pkg/srpc/libxds/xds_p.h	2001/08/08 19:29:26	1.2
  +++ ossp-pkg/srpc/libxds/xds_p.h	2001/08/08 19:33:55	1.3
  @@ -52,11 +52,5 @@
       size_t engines_capacity;
   };
   
  -int xds_find_engine(const engine_map_t *engines, size_t last,
  -                    const char *name, size_t *pos);
  -int xds_set_capacity(void **array, size_t *array_capacity,
  -                     size_t new_capacity, size_t elem_size,
  -                     size_t initial_capacity);
  -
   #endif /* __XDS_P_H__ */
   

From ossp-cvs-owner@ossp.org  Thu Aug  9 13:58:24 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f79BwNX70514; Thu, 9 Aug 2001 13:58:23 +0200 (CEST)
Date: Thu, 9 Aug 2001 13:58:23 +0200 (CEST)
Message-Id: <200108091158.f79BwNX70514@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds configure.ac
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   09-Aug-2001 13:58:23
  Branch: HEAD                             Handle: 2001080912582200

  Modified files:
    ossp-pkg/srpc/libxds    configure.ac

  Log:
    AC_INIT expects as parameter the name of an unique source file in the
    repository. I gave it xds.h.in.

  Summary:
    Revision    Changes     Path
    1.17        +2  -2      ossp-pkg/srpc/libxds/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/configure.ac
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 configure.ac
  --- ossp-pkg/srpc/libxds/configure.ac	2001/08/08 19:15:23	1.16
  +++ ossp-pkg/srpc/libxds/configure.ac	2001/08/09 11:58:22	1.17
  @@ -1,8 +1,8 @@
   dnl configure.in -- Process this file with autoconf to produce a configure script.
   
  -AC_INIT(xds)
  +AC_INIT(xds.h.in)
   AC_PREREQ(2.52)
  -AC_REVISION($Revision: 1.16 $)
  +AC_REVISION($Revision: 1.17 $)
   
   dnl Get rid of the lousy -g and -O defaults in CFLAGS.
   dnl

From ossp-cvs-owner@ossp.org  Thu Aug  9 14:09:08 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f79C96w72065; Thu, 9 Aug 2001 14:09:06 +0200 (CEST)
Date: Thu, 9 Aug 2001 14:09:06 +0200 (CEST)
Message-Id: <200108091209.f79C96w72065@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc EVAL
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   09-Aug-2001 14:09:06
  Branch: HEAD                             Handle: 2001080913090600

  Modified files:
    ossp-pkg/srpc           EVAL

  Log:
    Added entry for PVM. Needs to be investigated.

  Summary:
    Revision    Changes     Path
    1.15        +1  -0      ossp-pkg/srpc/EVAL
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/EVAL
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 EVAL
  --- ossp-pkg/srpc/EVAL	2001/06/27 21:10:01	1.14
  +++ ossp-pkg/srpc/EVAL	2001/08/09 12:09:06	1.15
  @@ -126,6 +126,7 @@
     be necessary before the package can even be compiled -- let alone be
     tested.
   
  +o PVM, http://www.epm.ornl.gov/pvm/
   
   o Foreign Function Call Library
     http://clisp.cons.org/~haible/packages-ffcall.html

From ossp-cvs-owner@ossp.org  Thu Aug  9 14:57:53 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f79Cvpx78971; Thu, 9 Aug 2001 14:57:51 +0200 (CEST)
Date: Thu, 9 Aug 2001 14:57:51 +0200 (CEST)
Message-Id: <200108091257.f79Cvpx78971@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/docs data-exchange.dia data-exchange....
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   09-Aug-2001 14:57:51
  Branch: HEAD                             Handle: 2001080913575100

  Modified files:
    ossp-pkg/srpc/libxds/docs data-exchange.dia data-exchange.eps

  Log:
    Replaced name "libxds" with "XDS" in the diagram.

  Summary:
    Revision    Changes     Path
    1.2         +4  -4      ossp-pkg/srpc/libxds/docs/data-exchange.dia
    1.2         +29 -29     ossp-pkg/srpc/libxds/docs/data-exchange.eps
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/docs/data-exchange.dia
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 data-exchange.dia
  --- ossp-pkg/srpc/libxds/docs/data-exchange.dia	2001/08/02 12:19:33	1.1
  +++ ossp-pkg/srpc/libxds/docs/data-exchange.dia	2001/08/09 12:57:51	1.2
  @@ -1,12 +1,12 @@
   <?xml version="1.0"?>
  -<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/"><dia:diagramdata><dia:attribute name="background"><dia:color val="#ffffff"/></dia:attribute><dia:attribute name="paper"><dia:composite type="paper"><dia:attribute name="name"><dia:string>#A4#</dia:string></dia:attribute><dia:attribute name="tmargin"><dia:real val="2.8222"/></dia:attribute><dia:attribute name="bmargin"><dia:real val="2.8222"/></dia:attribute><dia:attribute name="lmargin"><dia:real val="2.8222"/></dia:attribute><dia:attribute name="rmargin"><dia:real val="2.8222"/></dia:attribute><dia:attribute name="is_portrait"><dia:boolean val="true"/></dia:attribute><dia:attribute name="scaling"><dia:real val="1"/></dia:attribute><dia:attribute name="fitto"><dia:boolean val="false"/></dia:attribute></dia:composite></dia:attribute><dia:attribute name="grid"><dia:composite type="grid"><dia:attribute name="width_x"><dia:real val="1"/></dia:attribute><dia:attribute name="width_y"><dia:real val="1"/></dia:attribute><dia:attribute name="visible_x"><dia:int val="1"/></dia:attribute><dia:attribute name="visible_y"><dia:int val="1"/></dia:attribute></dia:composite></dia:attribute><dia:attribute name="guides"><dia:composite type="guides"><dia:attribute name="hguides"/><dia:attribute name="vguides"/></dia:composite></dia:attribute></dia:diagramdata><dia:layer name="Background" visible="true"><dia:object type="Network - Cloud" version="0" id="O0"><dia:attribute name="obj_pos"><dia:point val="26.9638,12.3854"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="26.4398,11.8614;34.5786,16.1543"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="26.9638,12.3854"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="7.09087"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="3.24491"/></dia:attribute><dia:attribute name="border_width"><dia:real val="0.1"/></dia:attribute><dia:attribute name="show_background"><dia:boolean val="true"/></dia:attribute><dia:attribute name="flip_horizontal"><dia:boolean val="fals
e"/></dia:attribute><dia:attribute name="flip_vertical"><dia:boolean val="false"/></dia:attribute><dia:attribute name="padding"><dia:real val="0.353553"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#Network#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Helvetica"/></dia:attribute><dia:attribute name="height"><dia:real val="0.8"/></dia:attribute><dia:attribute name="pos"><dia:point val="30.6993,14.305"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Flowchart - Box" version="0" id="O1"><dia:attribute name="obj_pos"><dia:point val="11,8"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="10.95,7.95;14.774,10.05"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="11,8"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="3.724"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="2"/></dia:attribute><dia:attribute name="border_width"><dia:real val="0.1"/></dia:attribute><dia:attribute name="show_background"><dia:boolean val="true"/></dia:attribute><dia:attribute name="padding"><dia:real val="0.5"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#$1234#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Helvetica"/></dia:attribute><dia:attribute name="height"><dia:real val="0.8"/></dia:attribute><dia:attribute name="pos"><dia:point val="12.862,9.24"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="UML - Component" version="0" id="O2"><dia:attribute name="obj_pos"><dia:point val="17.25,12.2225"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val=
"17.2,12.1725;22.2877,15.7725"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="17.25,12.2225"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="4.98768"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="3.5"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#libxds#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Helvetica"/></dia:attribute><dia:attribute name="height"><dia:real val="0.8"/></dia:attribute><dia:attribute name="pos"><dia:point val="19.65,13.5625"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="0"/></dia:attribute></dia:composite></dia:attribute><dia:attribute name="stereotype"><dia:string/></dia:attribute></dia:object><dia:object type="UML - Component" version="0" id="O3"><dia:attribute name="obj_pos"><dia:point val="39,12.2225"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="38.95,12.1725;44.0377,15.7725"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="39,12.2225"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="4.98768"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="3.5"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#libxds#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Helvetica"/></dia:attribute><dia:attribute name="height"><dia:real val="0.8"/></dia:attribute><dia:attribute name="pos"><dia:point val="41.4,13.5625"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="0"/></dia:attribute></dia:composite></dia:attribute><dia:attribute name="stereotype"><dia:string/></dia:attribute></dia:object><dia:object type="Flowchart - Box" version="0" id="O4"><dia:attribute name="obj_pos"><dia:point val="47,8"/></dia:attribute><dia:attribute name="obj
_bb"><dia:rectangle val="46.95,7.95;50.774,10.05"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="47,8"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="3.724"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="2"/></dia:attribute><dia:attribute name="border_width"><dia:real val="0.1"/></dia:attribute><dia:attribute name="show_background"><dia:boolean val="true"/></dia:attribute><dia:attribute name="padding"><dia:real val="0.5"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#$1234#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Helvetica"/></dia:attribute><dia:attribute name="height"><dia:real val="0.8"/></dia:attribute><dia:attribute name="pos"><dia:point val="48.862,9.24"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Standard - Arc" version="0" id="O5"><dia:attribute name="obj_pos"><dia:point val="12.862,10"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="12.8249,9.96293;17.7869,14.5655"/></dia:attribute><dia:attribute name="conn_endpoints"><dia:point val="12.862,10"/><dia:point val="17.25,13.9725"/></dia:attribute><dia:attribute name="curve_distance"><dia:real val="1.03641"/></dia:attribute><dia:attribute name="line_width"><dia:real val="0.1"/></dia:attribute><dia:attribute name="end_arrow"><dia:enum val="3"/></dia:attribute><dia:attribute name="end_arrow_length"><dia:real val="0.8"/></dia:attribute><dia:attribute name="end_arrow_width"><dia:real val="0.8"/></dia:attribute><dia:connections><dia:connection handle="0" to="O1" connection="13"/><dia:connection handle="1" to="O2" connection="3"/></dia:connections></dia:object><dia:object type="Standard - Arc" version="0" id="O6"><dia:attribute name="obj_pos"><dia:point val="43.9877,13.9725"/></dia:attribute><dia:attribute name="obj_bb"><dia:r
ectangle val="43.9489,9.37986;49.3674,14.0112"/></dia:attribute><dia:attribute name="conn_endpoints"><dia:point val="43.9877,13.9725"/><dia:point val="48.862,10"/></dia:attribute><dia:attribute name="curve_distance"><dia:real val="1.03641"/></dia:attribute><dia:attribute name="line_width"><dia:real val="0.1"/></dia:attribute><dia:attribute name="end_arrow"><dia:enum val="3"/></dia:attribute><dia:attribute name="end_arrow_length"><dia:real val="0.8"/></dia:attribute><dia:attribute name="end_arrow_width"><dia:real val="0.8"/></dia:attribute><dia:connections><dia:connection handle="0" to="O3" connection="4"/><dia:connection handle="1" to="O4" connection="13"/></dia:connections></dia:object><dia:object type="Standard - Line" version="0" id="O7"><dia:attribute name="obj_pos"><dia:point val="22.2377,13.9725"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="22.1877,13.1598;27.1461,14.7598"/></dia:attribute><dia:attribute name="conn_endpoints"><dia:point val="22.2377,13.9725"/><dia:point val="27.0961,13.9598"/></dia:attribute><dia:attribute name="numcp"><dia:int val="1"/></dia:attribute><dia:attribute name="line_width"><dia:real val="0.1"/></dia:attribute><dia:attribute name="end_arrow"><dia:enum val="3"/></dia:attribute><dia:attribute name="end_arrow_length"><dia:real val="0.8"/></dia:attribute><dia:attribute name="end_arrow_width"><dia:real val="0.8"/></dia:attribute><dia:connections><dia:connection handle="0" to="O2" connection="4"/><dia:connection handle="1" to="O0" connection="0"/></dia:connections></dia:object><dia:object type="Standard - Line" version="0" id="O8"><dia:attribute name="obj_pos"><dia:point val="33.7819,13.9967"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="33.7319,13.1842;38.9819,14.7842"/></dia:attribute><dia:attribute name="conn_endpoints"><dia:point val="33.7819,13.9967"/><dia:point val="38.9319,13.9842"/></dia:attribute><dia:attribute name="numcp"><dia:int val="1"/></dia:attribute><dia:attribute name="line_width"><dia:real val="0.1"/></dia:attribute><dia:attr
ibute name="end_arrow"><dia:enum val="3"/></dia:attribute><dia:attribute name="end_arrow_length"><dia:real val="0.8"/></dia:attribute><dia:attribute name="end_arrow_width"><dia:real val="0.8"/></dia:attribute></dia:object><dia:object type="Standard - Text" version="0" id="O9"><dia:attribute name="obj_pos"><dia:point val="12,1"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="9.06695,0.205882;14.9331,3.20588"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#The value in
  +<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/"><dia:diagramdata><dia:attribute name="background"><dia:color val="#ffffff"/></dia:attribute><dia:attribute name="paper"><dia:composite type="paper"><dia:attribute name="name"><dia:string>#A4#</dia:string></dia:attribute><dia:attribute name="tmargin"><dia:real val="2.8222"/></dia:attribute><dia:attribute name="bmargin"><dia:real val="2.8222"/></dia:attribute><dia:attribute name="lmargin"><dia:real val="2.8222"/></dia:attribute><dia:attribute name="rmargin"><dia:real val="2.8222"/></dia:attribute><dia:attribute name="is_portrait"><dia:boolean val="true"/></dia:attribute><dia:attribute name="scaling"><dia:real val="1"/></dia:attribute><dia:attribute name="fitto"><dia:boolean val="false"/></dia:attribute></dia:composite></dia:attribute><dia:attribute name="grid"><dia:composite type="grid"><dia:attribute name="width_x"><dia:real val="1"/></dia:attribute><dia:attribute name="width_y"><dia:real val="1"/></dia:attribute><dia:attribute name="visible_x"><dia:int val="1"/></dia:attribute><dia:attribute name="visible_y"><dia:int val="1"/></dia:attribute></dia:composite></dia:attribute><dia:attribute name="guides"><dia:composite type="guides"><dia:attribute name="hguides"/><dia:attribute name="vguides"/></dia:composite></dia:attribute></dia:diagramdata><dia:layer name="Background" visible="true"><dia:object type="Network - Cloud" version="0" id="O0"><dia:attribute name="obj_pos"><dia:point val="26.9638,12.3854"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="26.4398,11.8614;34.5787,16.1543"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="26.9638,12.3854"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="7.09087"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="3.2449"/></dia:attribute><dia:attribute name="show_background"><dia:boolean val="true"/></dia:attribute><dia:attribute name="flip_horizontal"><dia:boolean val="false"/></dia:attribute><dia:attribute name="flip_vertical"><dia:boolean val=
"false"/></dia:attribute><dia:attribute name="padding"><dia:real val="0.353553"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#Network#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Helvetica"/></dia:attribute><dia:attribute name="height"><dia:real val="0.8"/></dia:attribute><dia:attribute name="pos"><dia:point val="30.6993,14.3051"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Flowchart - Box" version="0" id="O1"><dia:attribute name="obj_pos"><dia:point val="11,8"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="10.95,7.95;14.774,10.05"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="11,8"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="3.724"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="2"/></dia:attribute><dia:attribute name="show_background"><dia:boolean val="true"/></dia:attribute><dia:attribute name="padding"><dia:real val="0.5"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#$1234#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Helvetica"/></dia:attribute><dia:attribute name="height"><dia:real val="0.8"/></dia:attribute><dia:attribute name="pos"><dia:point val="12.862,9.24"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="UML - Component" version="0" id="O2"><dia:attribute name="obj_pos"><dia:point val="17.25,12.2225"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="17.2,12.1725;21.9483,15.7725"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="17.25,12.2225"/></dia:attribute><dia:attribute
 name="elem_width"><dia:real val="4.64832"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="3.5"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#XDS#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Helvetica"/></dia:attribute><dia:attribute name="height"><dia:real val="0.8"/></dia:attribute><dia:attribute name="pos"><dia:point val="19.65,13.5625"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="0"/></dia:attribute></dia:composite></dia:attribute><dia:attribute name="stereotype"><dia:string/></dia:attribute></dia:object><dia:object type="UML - Component" version="0" id="O3"><dia:attribute name="obj_pos"><dia:point val="39,12.2225"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="38.95,12.1725;43.6983,15.7725"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="39,12.2225"/></dia:attribute><dia:attribute name="elem_width"><dia:real val="4.64832"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="3.5"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#XDS#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Helvetica"/></dia:attribute><dia:attribute name="height"><dia:real val="0.8"/></dia:attribute><dia:attribute name="pos"><dia:point val="41.4,13.5625"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="0"/></dia:attribute></dia:composite></dia:attribute><dia:attribute name="stereotype"><dia:string/></dia:attribute></dia:object><dia:object type="Flowchart - Box" version="0" id="O4"><dia:attribute name="obj_pos"><dia:point val="47,8"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="46.95,7.95;50.774,10.05"/></dia:attribute><dia:attribute name="elem_corner"><dia:point val="47,8"/></dia:attribute><dia:attri
bute name="elem_width"><dia:real val="3.724"/></dia:attribute><dia:attribute name="elem_height"><dia:real val="2"/></dia:attribute><dia:attribute name="show_background"><dia:boolean val="true"/></dia:attribute><dia:attribute name="padding"><dia:real val="0.5"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#$1234#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Helvetica"/></dia:attribute><dia:attribute name="height"><dia:real val="0.8"/></dia:attribute><dia:attribute name="pos"><dia:point val="48.862,9.24"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Standard - Arc" version="0" id="O5"><dia:attribute name="obj_pos"><dia:point val="12.862,10"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="12.8249,9.96293;17.7869,14.5656"/></dia:attribute><dia:attribute name="conn_endpoints"><dia:point val="12.862,10"/><dia:point val="17.25,13.9725"/></dia:attribute><dia:attribute name="curve_distance"><dia:real val="1.03641"/></dia:attribute><dia:attribute name="end_arrow"><dia:enum val="3"/></dia:attribute><dia:attribute name="end_arrow_length"><dia:real val="0.8"/></dia:attribute><dia:attribute name="end_arrow_width"><dia:real val="0.8"/></dia:attribute><dia:connections><dia:connection handle="0" to="O1" connection="13"/><dia:connection handle="1" to="O2" connection="3"/></dia:connections></dia:object><dia:object type="Standard - Arc" version="0" id="O6"><dia:attribute name="obj_pos"><dia:point val="43.6483,13.9725"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="43.6085,9.36366;49.3468,14.0123"/></dia:attribute><dia:attribute name="conn_endpoints"><dia:point val="43.6483,13.9725"/><dia:point val="48.862,10"/></dia:attribute><dia:attribute name="curve_distance"><dia:real val="1.03641"/></dia:attribute><dia:attribute name="end_arrow"><di
a:enum val="3"/></dia:attribute><dia:attribute name="end_arrow_length"><dia:real val="0.8"/></dia:attribute><dia:attribute name="end_arrow_width"><dia:real val="0.8"/></dia:attribute><dia:connections><dia:connection handle="0" to="O3" connection="4"/><dia:connection handle="1" to="O4" connection="13"/></dia:connections></dia:object><dia:object type="Standard - Line" version="0" id="O7"><dia:attribute name="obj_pos"><dia:point val="21.8983,13.9725"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="21.8483,13.1598;27.1461,14.7598"/></dia:attribute><dia:attribute name="conn_endpoints"><dia:point val="21.8983,13.9725"/><dia:point val="27.0961,13.9598"/></dia:attribute><dia:attribute name="numcp"><dia:int val="1"/></dia:attribute><dia:attribute name="end_arrow"><dia:enum val="3"/></dia:attribute><dia:attribute name="end_arrow_length"><dia:real val="0.8"/></dia:attribute><dia:attribute name="end_arrow_width"><dia:real val="0.8"/></dia:attribute><dia:connections><dia:connection handle="0" to="O2" connection="4"/><dia:connection handle="1" to="O0" connection="0"/></dia:connections></dia:object><dia:object type="Standard - Line" version="0" id="O8"><dia:attribute name="obj_pos"><dia:point val="33.7819,13.9967"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="33.7319,13.1842;38.9819,14.7842"/></dia:attribute><dia:attribute name="conn_endpoints"><dia:point val="33.7819,13.9967"/><dia:point val="38.9319,13.9842"/></dia:attribute><dia:attribute name="numcp"><dia:int val="1"/></dia:attribute><dia:attribute name="end_arrow"><dia:enum val="3"/></dia:attribute><dia:attribute name="end_arrow_length"><dia:real val="0.8"/></dia:attribute><dia:attribute name="end_arrow_width"><dia:real val="0.8"/></dia:attribute></dia:object><dia:object type="Standard - Text" version="0" id="O9"><dia:attribute name="obj_pos"><dia:point val="12,1"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="9.01695,0.205882;14.9331,3.20588"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><d
ia:attribute name="string"><dia:string>#The value in
   Host A's
  -representation#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Times-Roman"/></dia:attribute><dia:attribute name="height"><dia:real val="1"/></dia:attribute><dia:attribute name="pos"><dia:point val="12,1"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Standard - Line" version="0" id="O10"><dia:attribute name="obj_pos"><dia:point val="16,0"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="15.995,-0.005;16.005,17.005"/></dia:attribute><dia:attribute name="conn_endpoints"><dia:point val="16,0"/><dia:point val="16,17"/></dia:attribute><dia:attribute name="numcp"><dia:int val="1"/></dia:attribute><dia:attribute name="line_width"><dia:real val="0.01"/></dia:attribute><dia:attribute name="line_style"><dia:enum val="4"/></dia:attribute></dia:object><dia:object type="Standard - Line" version="0" id="O11"><dia:attribute name="obj_pos"><dia:point val="46,0"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="45.995,-0.005;46.005,17.005"/></dia:attribute><dia:attribute name="conn_endpoints"><dia:point val="46,0"/><dia:point val="46,17"/></dia:attribute><dia:attribute name="numcp"><dia:int val="1"/></dia:attribute><dia:attribute name="line_width"><dia:real val="0.01"/></dia:attribute><dia:attribute name="line_style"><dia:enum val="4"/></dia:attribute></dia:object><dia:object type="Standard - Line" version="0" id="O12"><dia:attribute name="obj_pos"><dia:point val="36,0"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="35.995,-0.005;36.005,17.005"/></dia:attribute><dia:attribute name="conn_endpoints"><dia:point val="36,0"/><dia:point val="36,17"/></dia:attribute><dia:attribute name="numcp"><dia:int val="1"/></dia:attribute><dia:attribute name="line_width"><dia:real val="0.01"/></dia:attribute><dia:attribute name="line_style"><dia:enum val="4"/></dia:attribute></dia:object><dia:object ty
pe="Standard - Line" version="0" id="O13"><dia:attribute name="obj_pos"><dia:point val="24,0"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="23.995,-0.005;24.005,17.005"/></dia:attribute><dia:attribute name="conn_endpoints"><dia:point val="24,0"/><dia:point val="24,17"/></dia:attribute><dia:attribute name="numcp"><dia:int val="1"/></dia:attribute><dia:attribute name="line_width"><dia:real val="0.01"/></dia:attribute><dia:attribute name="line_style"><dia:enum val="4"/></dia:attribute></dia:object><dia:object type="Standard - Text" version="0" id="O14"><dia:attribute name="obj_pos"><dia:point val="30,1"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="26.4306,0.205882;33.5694,3.20588"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#Transfer encoded
  +representation#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Times-Roman"/></dia:attribute><dia:attribute name="height"><dia:real val="1"/></dia:attribute><dia:attribute name="pos"><dia:point val="12,1"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Standard - Line" version="0" id="O10"><dia:attribute name="obj_pos"><dia:point val="16,0"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="15.995,-0.005;16.005,17.005"/></dia:attribute><dia:attribute name="conn_endpoints"><dia:point val="16,0"/><dia:point val="16,17"/></dia:attribute><dia:attribute name="numcp"><dia:int val="1"/></dia:attribute><dia:attribute name="line_width"><dia:real val="0.01"/></dia:attribute><dia:attribute name="line_style"><dia:enum val="4"/></dia:attribute></dia:object><dia:object type="Standard - Line" version="0" id="O11"><dia:attribute name="obj_pos"><dia:point val="46,0"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="45.995,-0.005;46.005,17.005"/></dia:attribute><dia:attribute name="conn_endpoints"><dia:point val="46,0"/><dia:point val="46,17"/></dia:attribute><dia:attribute name="numcp"><dia:int val="1"/></dia:attribute><dia:attribute name="line_width"><dia:real val="0.01"/></dia:attribute><dia:attribute name="line_style"><dia:enum val="4"/></dia:attribute></dia:object><dia:object type="Standard - Line" version="0" id="O12"><dia:attribute name="obj_pos"><dia:point val="36,0"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="35.995,-0.005;36.005,17.005"/></dia:attribute><dia:attribute name="conn_endpoints"><dia:point val="36,0"/><dia:point val="36,17"/></dia:attribute><dia:attribute name="numcp"><dia:int val="1"/></dia:attribute><dia:attribute name="line_width"><dia:real val="0.01"/></dia:attribute><dia:attribute name="line_style"><dia:enum val="4"/></dia:attribute></dia:object><dia:object ty
pe="Standard - Line" version="0" id="O13"><dia:attribute name="obj_pos"><dia:point val="24,0"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="23.995,-0.005;24.005,17.005"/></dia:attribute><dia:attribute name="conn_endpoints"><dia:point val="24,0"/><dia:point val="24,17"/></dia:attribute><dia:attribute name="numcp"><dia:int val="1"/></dia:attribute><dia:attribute name="line_width"><dia:real val="0.01"/></dia:attribute><dia:attribute name="line_style"><dia:enum val="4"/></dia:attribute></dia:object><dia:object type="Standard - Text" version="0" id="O14"><dia:attribute name="obj_pos"><dia:point val="30,1"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="26.3806,0.205882;33.5694,3.20588"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#Transfer encoded
   value over the
  -network.#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Times-Roman"/></dia:attribute><dia:attribute name="height"><dia:real val="1"/></dia:attribute><dia:attribute name="pos"><dia:point val="30,1"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Standard - Text" version="0" id="O15"><dia:attribute name="obj_pos"><dia:point val="20,1"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="16.6427,0.205882;23.3573,4.20588"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#Encode value
  +network.#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Times-Roman"/></dia:attribute><dia:attribute name="height"><dia:real val="1"/></dia:attribute><dia:attribute name="pos"><dia:point val="30,1"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Standard - Text" version="0" id="O15"><dia:attribute name="obj_pos"><dia:point val="20,1"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="16.5927,0.205882;23.3573,4.20588"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#Encode value
   from host
   format to
  -standard format.#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Times-Roman"/></dia:attribute><dia:attribute name="height"><dia:real val="1"/></dia:attribute><dia:attribute name="pos"><dia:point val="20,1"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Standard - Text" version="0" id="O16"><dia:attribute name="obj_pos"><dia:point val="50,1"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="47.0669,0.205882;52.9331,3.20588"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#The value in
  +standard format.#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Times-Roman"/></dia:attribute><dia:attribute name="height"><dia:real val="1"/></dia:attribute><dia:attribute name="pos"><dia:point val="20,1"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Standard - Text" version="0" id="O16"><dia:attribute name="obj_pos"><dia:point val="50,1"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="47.017,0.205882;52.9331,3.20588"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#The value in
   Host B's
   representation#</dia:string></dia:attribute><dia:attribute name="font"><dia:font name="Times-Roman"/></dia:attribute><dia:attribute name="height"><dia:real val="1"/></dia:attribute><dia:attribute name="pos"><dia:point val="50,1"/></dia:attribute><dia:attribute name="color"><dia:color val="#000000"/></dia:attribute><dia:attribute name="alignment"><dia:enum val="1"/></dia:attribute></dia:composite></dia:attribute></dia:object><dia:object type="Standard - Text" version="0" id="O17"><dia:attribute name="obj_pos"><dia:point val="41,1"/></dia:attribute><dia:attribute name="obj_bb"><dia:rectangle val="38.0776,0.205882;43.8725,4.20588"/></dia:attribute><dia:attribute name="text"><dia:composite type="text"><dia:attribute name="string"><dia:string>#Decode value
   from standard
  Index: ossp-pkg/srpc/libxds/docs/data-exchange.eps
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 data-exchange.eps
  --- ossp-pkg/srpc/libxds/docs/data-exchange.eps	2001/08/02 12:19:33	1.1
  +++ ossp-pkg/srpc/libxds/docs/data-exchange.eps	2001/08/09 12:57:51	1.2
  @@ -1,11 +1,11 @@
   %!PS-Adobe-2.0 EPSF-2.0
  -%%Title: /home/simons/projects/srpc/libxds/docs/data-exchange.dia
  +%%Title: data-exchange.dia
   %%Creator: Dia v0.88.1
  -%%CreationDate: Tue Jul 31 15:42:54 2001
  +%%CreationDate: Thu Aug  9 14:35:09 2001
   %%For: simons
   %%Magnification: 1.0000
   %%Orientation: Portrait
  -%%BoundingBox: 0 0 1244 483
  +%%BoundingBox: 0 0 1245 483
   %%Pages: 1
   %%BeginSetup
   %%EndSetup
  @@ -342,7 +342,7 @@
   putinterval
   } bind def
   28.346000 -28.346000 scale
  --9.066950 -17.005000 translate
  +-9.016950 -17.005000 translate
   %%EndProlog
   
   
  @@ -355,11 +355,11 @@
   0 slj
   [] 0 sd
   1.000000 1.000000 1.000000 srgb
  -n 28.578343 13.328139 m 28.029049 13.317177 26.963752 13.547390 27.113560 14.040704 c 27.263366 14.534017 27.979113 14.643638 28.278728 14.501130 c 28.578343 14.358617 27.812660 15.191765 29.277445 15.411015 c 30.742216 15.630266 31.491254 15.279465 31.274865 15.027327 c 31.058477 14.775189 32.556552 15.619304 33.255654 15.136952 c 33.954756 14.654601 32.539907 14.194179 32.839522 14.259954 c 33.139137 14.325729 34.054627 14.238029 33.755012 13.415840 c 33.455397 12.593650 30.758861 13.229477 31.058477 13.108889 c 31.358092 12.988301 30.609054 12.385361 29.676932 12.505949 c 28.744796 12.626537 28.678681 12.845360 28.578809 13.327712 c 28.578343 13.328139 l f
  +n 28.578389 13.328181 m 28.029094 13.317219 26.963798 13.547432 27.113606 14.040745 c 27.263412 14.534059 27.979159 14.643680 28.278774 14.501171 c 28.578389 14.358659 27.812706 15.191806 29.277490 15.411056 c 30.742261 15.630307 31.491299 15.279506 31.274910 15.027368 c 31.058522 14.775230 32.556597 15.619344 33.255698 15.136993 c 33.954800 14.654642 32.539951 14.194221 32.839566 14.259996 c 33.139181 14.325771 34.054672 14.238071 33.755057 13.415881 c 33.455442 12.593692 30.758907 13.229519 31.058522 13.108931 c 31.358137 12.988343 30.609099 12.385403 29.676977 12.505991 c 28.744841 12.626580 28.678726 12.845403 28.578855 13.327754 c 28.578389 13.328181 l f
   0.000000 0.000000 0.000000 srgb
  -n 28.578343 13.328139 m 28.029049 13.317177 26.963752 13.547390 27.113560 14.040704 c 27.263366 14.534017 27.979113 14.643638 28.278728 14.501130 c 28.578343 14.358617 27.812660 15.191765 29.277445 15.411015 c 30.742216 15.630266 31.491254 15.279465 31.274865 15.027327 c 31.058477 14.775189 32.556552 15.619304 33.255654 15.136952 c 33.954756 14.654601 32.539907 14.194179 32.839522 14.259954 c 33.139137 14.325729 34.054627 14.238029 33.755012 13.415840 c 33.455397 12.593650 30.758861 13.229477 31.058477 13.108889 c 31.358092 12.988301 30.609054 12.385361 29.676932 12.505949 c 28.744796 12.626537 28.678681 12.845360 28.578809 13.327712 c 28.578343 13.328139 l s
  +n 28.578389 13.328181 m 28.029094 13.317219 26.963798 13.547432 27.113606 14.040745 c 27.263412 14.534059 27.979159 14.643680 28.278774 14.501171 c 28.578389 14.358659 27.812706 15.191806 29.277490 15.411056 c 30.742261 15.630307 31.491299 15.279506 31.274910 15.027368 c 31.058522 14.775230 32.556597 15.619344 33.255698 15.136993 c 33.954800 14.654642 32.539951 14.194221 32.839566 14.259996 c 33.139181 14.325771 34.054672 14.238071 33.755057 13.415881 c 33.455442 12.593692 30.758907 13.229519 31.058522 13.108931 c 31.358137 12.988343 30.609099 12.385403 29.676977 12.505991 c 28.744841 12.626580 28.678726 12.845403 28.578855 13.327754 c 28.578389 13.328181 l s
   /Helvetica-latin1 ff 0.800000 scf sf
  -(Network) dup sw 2 div 30.699271 ex sub 14.305014 m gs 1 -1 sc sh gr
  +(Network) dup sw 2 div 30.699317 ex sub 14.305056 m gs 1 -1 sc sh gr
   1.000000 1.000000 1.000000 srgb
   n 11.000000 8.000000 m 11.000000 10.000000 l 14.724000 10.000000 l 14.724000 8.000000 l f
   0.100000 slw
  @@ -373,35 +373,35 @@
   0.100000 slw
   [] 0 sd
   1.000000 1.000000 1.000000 srgb
  -n 18.250000 12.222453 m 18.250000 15.722453 l 22.237680 15.722453 l 22.237680 12.222453 l f
  +n 18.250000 12.222500 m 18.250000 15.722500 l 21.898320 15.722500 l 21.898320 12.222500 l f
   0.000000 0.000000 0.000000 srgb
  -n 18.250000 12.222453 m 18.250000 15.722453 l 22.237680 15.722453 l 22.237680 12.222453 l cp s
  +n 18.250000 12.222500 m 18.250000 15.722500 l 21.898320 15.722500 l 21.898320 12.222500 l cp s
   1.000000 1.000000 1.000000 srgb
  -n 17.250000 12.922453 m 17.250000 13.622453 l 19.250000 13.622453 l 19.250000 12.922453 l f
  +n 17.250000 12.922500 m 17.250000 13.622500 l 19.250000 13.622500 l 19.250000 12.922500 l f
   0.000000 0.000000 0.000000 srgb
  -n 17.250000 12.922453 m 17.250000 13.622453 l 19.250000 13.622453 l 19.250000 12.922453 l cp s
  +n 17.250000 12.922500 m 17.250000 13.622500 l 19.250000 13.622500 l 19.250000 12.922500 l cp s
   1.000000 1.000000 1.000000 srgb
  -n 17.250000 14.322453 m 17.250000 15.022453 l 19.250000 15.022453 l 19.250000 14.322453 l f
  +n 17.250000 14.322500 m 17.250000 15.022500 l 19.250000 15.022500 l 19.250000 14.322500 l f
   0.000000 0.000000 0.000000 srgb
  -n 17.250000 14.322453 m 17.250000 15.022453 l 19.250000 15.022453 l 19.250000 14.322453 l cp s
  +n 17.250000 14.322500 m 17.250000 15.022500 l 19.250000 15.022500 l 19.250000 14.322500 l cp s
   /Helvetica-latin1 ff 0.800000 scf sf
  -(libxds) 19.650000 13.562453 m gs 1 -1 sc sh gr
  +(XDS) 19.650000 13.562500 m gs 1 -1 sc sh gr
   0.100000 slw
   [] 0 sd
   1.000000 1.000000 1.000000 srgb
  -n 40.000000 12.222453 m 40.000000 15.722453 l 43.987680 15.722453 l 43.987680 12.222453 l f
  +n 40.000000 12.222500 m 40.000000 15.722500 l 43.648320 15.722500 l 43.648320 12.222500 l f
   0.000000 0.000000 0.000000 srgb
  -n 40.000000 12.222453 m 40.000000 15.722453 l 43.987680 15.722453 l 43.987680 12.222453 l cp s
  +n 40.000000 12.222500 m 40.000000 15.722500 l 43.648320 15.722500 l 43.648320 12.222500 l cp s
   1.000000 1.000000 1.000000 srgb
  -n 39.000000 12.922453 m 39.000000 13.622453 l 41.000000 13.622453 l 41.000000 12.922453 l f
  +n 39.000000 12.922500 m 39.000000 13.622500 l 41.000000 13.622500 l 41.000000 12.922500 l f
   0.000000 0.000000 0.000000 srgb
  -n 39.000000 12.922453 m 39.000000 13.622453 l 41.000000 13.622453 l 41.000000 12.922453 l cp s
  +n 39.000000 12.922500 m 39.000000 13.622500 l 41.000000 13.622500 l 41.000000 12.922500 l cp s
   1.000000 1.000000 1.000000 srgb
  -n 39.000000 14.322453 m 39.000000 15.022453 l 41.000000 15.022453 l 41.000000 14.322453 l f
  +n 39.000000 14.322500 m 39.000000 15.022500 l 41.000000 15.022500 l 41.000000 14.322500 l f
   0.000000 0.000000 0.000000 srgb
  -n 39.000000 14.322453 m 39.000000 15.022453 l 41.000000 15.022453 l 41.000000 14.322453 l cp s
  +n 39.000000 14.322500 m 39.000000 15.022500 l 41.000000 15.022500 l 41.000000 14.322500 l cp s
   /Helvetica-latin1 ff 0.800000 scf sf
  -(libxds) 41.400000 13.562453 m gs 1 -1 sc sh gr
  +(XDS) 41.400000 13.562500 m gs 1 -1 sc sh gr
   1.000000 1.000000 1.000000 srgb
   n 47.000000 8.000000 m 47.000000 10.000000 l 50.724000 10.000000 l 50.724000 8.000000 l f
   0.100000 slw
  @@ -416,30 +416,30 @@
   [] 0 sd
   [] 0 sd
   0 slc
  -n 17.544095 9.237859 4.743719 4.743719 93.554427 170.754606 ellipse s
  +n 17.544142 9.237863 4.743765 4.743765 93.554963 170.754749 ellipse s
   0 slj
  -n 16.426740 14.322086 m 17.250000 13.972453 l 16.476338 13.523625 l f
  +n 16.426737 14.322126 m 17.250000 13.972500 l 16.476342 13.523665 l f
   0.100000 slw
   [] 0 sd
   [] 0 sd
   0 slc
  -n 43.739542 8.691284 5.286995 5.286995 14.331690 87.309911 ellipse s
  +n 43.428782 8.276789 5.699940 5.699940 17.597050 87.792656 ellipse s
   0 slj
  -n 49.051524 10.874117 m 48.862000 10.000000 l 48.276420 10.676089 l f
  +n 49.001426 10.883493 m 48.862000 10.000000 l 48.238861 10.641637 l f
   0.100000 slw
   [] 0 sd
   [] 0 sd
   0 slc
  -n 22.237680 13.972453 m 27.096130 13.959822 l s
  +n 21.898320 13.972500 m 27.096100 13.959800 l s
   0 slj
  -n 26.297172 14.361901 m 27.096130 13.959822 l 26.295092 13.561903 l f
  +n 26.297080 14.361753 m 27.096100 13.959800 l 26.295125 13.561756 l f
   0.100000 slw
   [] 0 sd
   [] 0 sd
   0 slc
  -n 33.781947 13.996742 m 38.931947 13.984242 l s
  +n 33.781900 13.996700 m 38.931900 13.984200 l s
   0 slj
  -n 38.132920 14.386182 m 38.931947 13.984242 l 38.130978 13.586185 l f
  +n 38.132873 14.386141 m 38.931900 13.984200 l 38.130931 13.586143 l f
   /Times-Roman-latin1 ff 1.000000 scf sf
   (The value in) dup sw 2 div 12.000000 ex sub 1.000000 m gs 1 -1 sc sh gr
   (Host A's) dup sw 2 div 12.000000 ex sub 2.000000 m gs 1 -1 sc sh gr

From ossp-cvs-owner@ossp.org  Thu Aug  9 14:58:10 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f79Cw8I79027; Thu, 9 Aug 2001 14:58:08 +0200 (CEST)
Date: Thu, 9 Aug 2001 14:58:08 +0200 (CEST)
Message-Id: <200108091258.f79Cw8I79027@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/docs libxds.tex
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   09-Aug-2001 14:58:08
  Branch: HEAD                             Handle: 2001080913580800

  Modified files:
    ossp-pkg/srpc/libxds/docs libxds.tex

  Log:
    Worked Ralf's comments in.

  Summary:
    Revision    Changes     Path
    1.5         +197 -199   ossp-pkg/srpc/libxds/docs/libxds.tex
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/docs/libxds.tex
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 libxds.tex
  --- ossp-pkg/srpc/libxds/docs/libxds.tex	2001/08/08 13:12:28	1.4
  +++ ossp-pkg/srpc/libxds/docs/libxds.tex	2001/08/09 12:58:08	1.5
  @@ -1,6 +1,6 @@
   % -*- mode: LaTeX; fill-column: 75; -*-
   %
  -% $Id: libxds.tex,v 1.4 2001/08/08 13:12:28 simons Exp $
  +% $Id: libxds.tex,v 1.5 2001/08/09 12:58:08 simons Exp $
   %
   \documentclass[a4paper,10pt,pointlessnumbers,bibtotoc]{scrartcl}
   \usepackage[dvips,xdvi]{graphicx}
  @@ -10,8 +10,8 @@
   
   \begin{document}
   
  -\subject{Cable \& Wireless Application Development}
  -\title{XDS -- eXtensible Data Serialization}
  +\titlehead{Cable \& Wireless Deutschland GmbH\\Application Services\\Development Team}
  +\title{OSSP XDS ---\\eXtensible Data Serialization}
   \author{Peter Simons $<$simons@computer.org$>$}
   \date{2001-08-01}
   \maketitle
  @@ -33,24 +33,24 @@
   get even more complicated when you start exchanging floating point numbers,
   for which about a dozen different encodings exist!
   
  -Solving these problems is the domain of libxds; its purpose is to encode
  -data in a way that allows this data to be exchanged between computer
  -systems of different types. Assume you'd want to reliably transfer the
  -value \$1234 from host A to host B. Then you would encode the value using
  -libxds, transfer the encoded data via the network, and decode the value
  -again at the other end. Every application that follows this process will
  -read the correct value no matter what native representation its hosting
  -platform uses internally.
  -
   \begin{figure}[tbh]
       \begin{center}
           \includegraphics[width=\textwidth]{data-exchange.eps}
  -        \caption{Data exchange using libxds}
  +        \caption{Data exchange using XDS}
           \label{data exchange}
       \end{center}
   \end{figure}
  +
  +Solving these problems is the domain of XDS; its purpose is to encode data
  +in a way that allows this data to be exchanged between computer systems of
  +different types. Assume you'd want to reliably transfer the value \$1234
  +from host A to host B. Then you would encode the value using XDS, transfer
  +the encoded data over the network, and decode the value again at the other
  +end. Every application that follows this process will read the correct
  +value no matter what native representation its hosting platform uses
  +internally.
   
  -There is a rich variety of applications for such a functionality: libxds
  +There is a rich variety of applications for such a functionality: XDS
   may be used to encode data before it is written to disk or read from the
   disk, it may be used to encode data to be exchanged between processes over
   the network, etc. Because of this variety, special attention has been paid
  @@ -58,113 +58,112 @@
   
   \paragraph{The library has been designed to be extensible.}
   The functionality is split into a generic encoding and decoding framework
  -and a set of formatting engines. These engines can be plugged into the
  -framework at run-time to actually encode and decode data. Because of this
  -architecture, libxds can be customized to deploy any data format the
  -developer sees fit. Included in the distribution are formatting engines for
  -the XDR format specified in \cite{xdr} and for the XML format specified in
  -\cite{xml}.
  +and a set of encoding and decoding engines. These engines can be plugged
  +into the framework at run-time to actually do the encoding and decoding of
  +data. Because of this architecture, XDS can be customized to deploy any
  +data format the developer sees fit. Included in the distribution are
  +engines for the XDR format specified in \cite{xdr} and for the XML format
  +specified in \cite{xml}.
   
   \paragraph{The library is convenient to use.}
   An arbitrary number of variables can be encoded or decoded with one single
  -function call. All memory management is done by libxds, the developer
  +function call. All memory management is done by XDS, the developer
   doesn't need bother to allocate or to manage buffers for the encoded or
   decoded data. Automatic buffer management can be switched off at run-time,
   though, for maximum performance.
   
   \paragraph{Performance.}
  -Since all transferred data has to wander through libxds, the library has
  -been written to encode and decode with maximim performance. The generic
  -encoding framework adds almost no run-time overhead to the encoding
  -process. If non-automatic buffer management has been selected, hardly
  -anything but the actual formatting engines is executed.
  +Since all transferred data has to wander through XDS, the library has been
  +written to encode and decode with maximum performance. The generic encoding
  +framework adds almost no run-time overhead to the encoding process. If
  +non-automatic buffer management has been selected, hardly anything but the
  +actual encoding/decoding engines is executed.
   
   \paragraph{Robustness.}
   In order to verify that the library is working correctly, a set of
  -regression tests is included in the distribution. The test suits will ---
  +regression tests is included in the distribution. The test suites will ---
   among other things --- encode known values and compare the result with the
  -expected (correct) values. This ensures that libxds works correctly on any
  +expected (correct) values. This ensures that XDS works correctly on any
   platform.
   
   \paragraph{Use standard formats.}
  -The supported formats XDR and XML and widely known and accepted formats,
  -which are most likely interoperable with other marshaling implementations.
  -For XDR for example, it would be possible to encode data with libxds and to
  -decode it with an entirely different XDR implementation or vice versa.
  +The supported XDR and XML formats are widely known and accepted, meaning
  +that they are interoperable with other marshaling implementations. For XDR
  +for instance, it would be possible to encode data with XDS and to decode it
  +with an entirely different XDR implementation or vice versa.
   
   \paragraph{Portability.}
  -libxds has been written with portability in mind. Development took place on
  -FreeBSD, Linux and Solaris; other platforms has been used to test the
  -results. It is expected that libxds will compile and function on virtually
  -any POSIX.1-compilant system with a moderately modern ISO-C compiler. Gnu's
  -CC (gcc) is known to compile the library just fine. For maximum
  -portability, GNU autoconf has been used to determine the target system's
  +XDS has been written with portability in mind. Development took place on
  +FreeBSD, Linux and Solaris; other platforms were used to test the results.
  +It is expected that XDS will compile and function on virtually any
  +POSIX.1-compliant system with a moderately modern ISO-C compiler. GNU's
  +C~Compiler~(gcc) is known to compile the library just fine. For maximum
  +portability, GNU Autoconf has been used to determine the target system's
   properties.
   
  -\section{Architecture of libxds}
  +\section{Architecture of XDS}
   
   \begin{figure}[htb]
       \begin{center}
           \includegraphics[width=\textwidth]{architecture.eps}
  -        \caption{Components of libxds}
  -        \label{libxds components}
  +        \caption{Components of XDS}
  +        \label{XDS components}
       \end{center}
   \end{figure}
   
  -The architecture of libxds is illustrated in figure~\ref{libxds
  -components}. libxds consists of three components: The generic encoding and
  -decoding framework, a set of formatting engines to encode and decode values
  -in a certain forman, and a run-time context, which is used to manage
  -buffers, registered engines, etc.
  +The architecture of XDS is illustrated in figure~\ref{XDS components}. XDS
  +consists of three components: The generic encoding and decoding framework,
  +a set of engines to encode and decode values in a certain format, and a
  +run-time context, which is used to manage buffers, registered engines, etc.
   
   In order to use the library, the first thing the developer has to do is to
  -create a valid XDS context by calling {\sf xds\_init()}. The routine
  +create a valid XDS context by calling \textsf{xds\_init()}. The routine
   requires one parameter that determines whether to operate in encoding- or
   decoding mode. A context can be used for encoding or decoding only; it is
   not possible to use the same context for both operations. Once a valid XDS
  -context has been obtained, the routine {\sf xds\_register()} can be used to
  -register an arbitrary number of formatting engines within the context.
  -
  -A set of formatting engines has been included in the library. These
  -routines will handle any elementary datatype included in the ISO-C language
  -such as 32-bit integers, 64-bit integers, unsigned integers (of both 32-
  -and 64-bit), floating point numbers, strings and octet streams.
  -
  -Once all required formatting engines are registered, the routines {\sf
  -xds\_encode()} or {\sf xds\_\-decode()} may be used to actually perform the
  -encoding or decoding process. Any data type for which a formatting engine
  +context has been obtained, the routine \textsf{xds\_register()} can be used to
  +register an arbitrary number of encoding or decoding engines within the
  +context.
  +
  +A set of engines has been included in the library. These routines will
  +handle any elementary datatype included in the ISO-C language such as
  +32-bit integers, 64-bit integers, unsigned integers (of both 32- and
  +64-bit), floating point numbers, strings and octet streams.
  +
  +Once all required encoding/decoding engines are registered, the routines
  +\textsf{xds\_encode()} or \textsf{xds\_\-decode()} may be used to actually
  +perform the encoding or decoding process. Any data type for which an engine
   has been registered can be handled by the library.
   
  -This means, that it is possible for the developer to write custom
  -formatting engines for any data type he desires to use and to register them
  -in the context as long as these engines adhere to the {\sf xds\_engine\_t}
  -interface defined in {\sf xds.h}.
  -
  -In particular it is possible to register meta formatting engines. That is a
  -formatting engine designed to encode or decode structures --- data types
  -which consist of several elementary data types. The formatting engine for
  -such a structure will simply re-use the existing engines in order to encode
  -or decode the whole structure. The clou here is that the meta engine
  -doesn't even need to know \emph{which} low-level formatting engines are
  -registered in order to use them. Hence, a meta engine may format the whole
  -structure in XDR, XML, or any other format without needing to know anything
  -about the details.
  +This means, that it is possible for the developer to write custom engines
  +for any data type he desires to use and to register them in the context as
  +long as these engines adhere to the \textsf{xds\_engine\_t} interface defined
  +in \textsf{xds.h}.
  +
  +In particular it is possible to register meta engines. That is an engine
  +designed to encode or decode structures --- data types which consist of
  +several elementary data types. The engine for such a structure will simply
  +re-use the existing engines in order to encode or decode the whole
  +structure. The clou here is that the meta engine doesn't even need to know
  +\emph{which} low-level engines are registered in order to use them. Hence,
  +a meta engine may format the whole structure in XDR, XML, or any other
  +format without needing to know anything about the details.
   
   This topic is addressed in great detail in section~\ref{meta engines} of
   this document, but before we come to that rather advanced topic, let us
   start by studying two simple examples of how data is encoded and decoded
  -using libxds.
  +using XDS.
   
   \section{Using the XDS library}
   
   \subsection{Encoding}
   
   The following example program will encode three variables using the XDR
  -formatting engines. The result of the process will then be written to the
  -standard output stream, which can be redirected to a file or piped into the
  -decoding program described in the next section. Just take a look at the
  -source code for a moment, we will then go on to discuss all relevant
  -sections line by line.
  +engines. The result of the process will then be written to the standard
  +output stream, which can be redirected to a file or piped into the decoding
  +program described in the next section. Just take a look at the source code
  +for a moment, we will then go on to discuss all relevant sections line by
  +line.
   
   \begin{Verbatim}[numbers=left,fontsize=\small,frame=lines]
   #include <stdio.h>
  @@ -225,62 +224,64 @@
   \paragraph{Lines 1--5.}
   The program starts by including several system headers, which define the
   prototypes for some routines we use. The most interesting header in our
  -case is of course {\sf xds.h} --- the header of libxds. Please note that
  -all declarations required to use libxds are included in that file.
  +case is of course \textsf{xds.h} --- the header of XDS. Please note that
  +all declarations required to use XDS are included in that file.
   
   \paragraph{Lines 7--13.}
  -The {\sf error\_exit()} routine is not relevant for the example; we just
  +The \textsf{error\_exit()} routine is not relevant for the example; we just
   define it to make the rest of the source code shorter and easier to read.
   
   \paragraph{Lines 16--53.}
  -This is the interesting part: The {\sf main()} routine. This function will
  +This is the interesting part: The \textsf{main()} routine. This function will
   create the variables to be encoded on the stack, assign values to them,
   initialize the XDS library, use it to encode the values, and write the
   result of the encoding process to the standard output stream. Read on for
   further details.
   
   \paragraph{Lines 26--28.}
  -First of all we have to obtain a XDS context for all further operation.
  -This is done by calling {\sf xds\_init()}. Since we intend to \emph{encode}
  +First of all we have to obtain an XDS context for all further operation.
  +This is done by calling \textsf{xds\_init()}. Since we intend to \emph{encode}
   data, we initialize the context in encoding mode. The only other mode of
   operation would be decoding mode, but this is demonstrated in the next
   section.
   
  -All routines in libxds return a code from a small list of return codes
  -defined in {\sf xds.h}, but {\sf xds\_init()} is different: It will return
  -a pointer to an {\sf xds\_t} in case of success and {\sf NULL} in case of
  -failure. One reason why {\sf xds\_init()} would fail is because it can't
  -allocate the memory required to initialize the context. In this case, the
  -system variable {\sf errno} is set to {\sf ENOMEM}. Another reason why {\sf
  -xds\_init()} would fail is because the mode parameter is invalid, in which
  -case {\sf errno} woulde be set to {\sf EINVAL}. If libxds has been compiled
  -with assertions enabled, such an error would result in an assertion error,
  -terminating the program with a diagnostic message immediately.
  +All routines in XDS return a code from a small list of return codes defined
  +in \textsf{xds.h}, but \textsf{xds\_init()} is different: It will return a
  +pointer to an \textsf{xds\_t} in case of success and \textsf{NULL} in case
  +of failure. One reason why \textsf{xds\_init()} would fail is because it
  +can't allocate the memory required to initialize the context. In this case,
  +the system variable \textsf{errno} is set to \textsf{ENOMEM}. Another
  +reason why \textsf{xds\_init()} would fail is because the mode parameter is
  +invalid, in which case \textsf{errno} woulde be set to \textsf{EINVAL}. If
  +XDS has been compiled with assertions enabled, such an error would result
  +in an assertion error, terminating the program with a diagnostic message
  +immediately.
   
   \paragraph{Lines 30--33.}
  -Once we have obtained a valid XDS context, we register the formatting
  -engines we need. In this example, we'll encode a signed 32-bit integer, an
  -unsigned 32-bit integer, and a string. We'll be using XDR encoding in this
  -case, so the engines to register are {\sf xdr\_encode\_int32()}, {\sf
  -xdr\_encode\_uint32()}, and {\sf xdr\_encode\_string()}. (A complete list
  -of available formatting engines can be found in {\sf xds.h} or in
  -section~\ref{xdr}~and~\ref{xml}. Please note that we could switch the
  -deployed encoding format simply be using the corresponding {\sf
  -xml\_encode\_XXX()} engines here. We could even mix XDR and XML encoding as
  -we see fit but it's hard to think of a case where this would make sense.
  +Once we have obtained a valid XDS context, we register the engines we need.
  +In this example, we'll encode a signed 32-bit integer, an unsigned 32-bit
  +integer, and a string. We'll be using XDR encoding in this case, so the
  +engines to register are \textsf{xdr\_encode\_int32()},
  +\textsf{xdr\_encode\_uint32()}, and \textsf{xdr\_encode\_string()}. (A
  +complete list of available engines can be found in \textsf{xds.h}, in
  +section~\ref{xdr}~and~\ref{xml}, or in the manual pages for the library.
  +Please note that we could switch the deployed encoding format simply be
  +using the corresponding \textsf{xml\_encode\_XXX()} engines here. We could
  +even mix XDR and XML encoding as we see fit but it's hard to think of a
  +case where this would make sense.
   
   As you can see in the code, the developer is free to choose a name he'd
   like to register the engine under. These names may only contain
  -alphanumerical characters plus the hyphon (``\verb#-#'') and the underscore
  +alphanumerical characters plus the hyphen (``\verb#-#'') and the underscore
   (``\verb#_#''). You can choose any name you want, but it is recommended to
  -follow the naming scheme of the corresponding formatting engine. Why this
  -is recommended will be seen in section~\ref{meta engines}.
  +follow the naming scheme of the corresponding engine. Why this is
  +recommended will be seen in section~\ref{meta engines}.
   
   \paragraph{Lines 35--36.}
   This is the place where the actual encoding takes place. As parameters,
  -{\sf xds\_encode()} requires a valid encoding context plus a format string
  +\textsf{xds\_encode()} requires a valid encoding context plus a format string
   that describes how the following parameters are to be interpreted. While
  -the concept is obviously identical to {\sf sprintf()}, the syntax is
  +the concept is obviously identical to \textsf{sprintf()}, the syntax is
   different. The format string may contain an arbitrary number of names,
   which are delimited by an arbitrary number of any character that is not a
   legal character for engine names. Thus you can delimit the names by colons,
  @@ -288,70 +289,69 @@
   
   For each valid engine name in the format string, a corresponding parameter
   must follow. What these parameters mean depends on the engine you're using.
  -The engines provided with the libxds library will expect the value to
  -encode, but theoretically developers are free to write formatting engines
  -that expect virtually any kind of information here. More about this will
  -explained in section~\ref{meta engines}.
  +The engines provided with the XDS library will expect the value to encode,
  +but theoretically developers are free to write encoding and decoding
  +engines that expect virtually any kind of information here. More about this
  +will explained in section~\ref{meta engines}.
   
   \paragraph{Lines 38--39.}
   We have encoded all values we wanted to encode, now we can get the result
  -from the library. This happens by calling {\sf xds\_getbuffer()}. The
  +from the library. This happens by calling \textsf{xds\_getbuffer()}. The
   routine will store the buffer's address and length at the locations we
   provided as parameters. Please note that we can choose whether we want the
  -buffer as a ``gift'' ({\sf XDS\_GIFT}) or as a ``loan'' ({\sf XDS\_LOAN}).
  +buffer as a ``gift'' (\textsf{XDS\_GIFT}) or as a ``loan'' (\textsf{XDS\_LOAN}).
   
   The buffer being a ``loan'' means that the buffer is still owned by the
  -library -- we're only allowed to peak at it. But any call to an libxds
  +library --- we're only allowed to peak at it. But any call to an XDS
   routine may potentially modify the buffer or even change the buffers
  -location. Hence the result of a {\sf xds\_getbuffer()} call with loaning
  -semantics is only valid until the next libxds routine is called. After
  +location. Hence the result of a \textsf{xds\_getbuffer()} call with loaning
  +semantics is only valid until the next XDS routine is called. After
   that, it is invalid.
   
   If we choose the gift semantics, the buffer we receive will be owned by us;
   the library will not touch the buffer again. This means of course, that
  -we're responsible for {\sf free()}ing the buffer when we don't need it
  +we're responsible for \textsf{free()}ing the buffer when we don't need it
   anymore.
   
   \paragraph{Line 41.}
   Destroy the XDS context and all data associated with it. This is possible
   because we requested the buffer as ``gift''; the buffer is not associated
  -with libxds anymore.
  +with XDS anymore.
   
   \paragraph{Line 43.}
   Write the buffer with the encoded data to the standard output stream.
   
   \paragraph{Line 45.}
   Now that we don't need the buffer anymore, we have to return the memory it
  -uses to the system. libxds won't do that for us.
  +uses to the system. XDS won't do that for us.
   
   \paragraph{Lines 47--50.}
   Write a short report of what we have done to the standard error channel.
   
   \bigskip
   Finally, let us compile and execute the example program shown above. For
  -convenience, it is included in the distribution under the name {\sf
  -docs/encode.c}. You can compile and execute the program as follows:
  +convenience, it is included in the distribution under the name
  +\textsf{docs/encode.c}. You can compile and execute the program as follows:
   
   \begin{quote}
   \begin{verbatim}
  -simons@dev13:~/libxds$ cd docs
  -simons@dev13:~/libxds/docs$ gcc -I.. encode.c -o encode -L.. -lxds
  -simons@dev13:~/libxds/docs$ ./encode >output
  +$ gcc -I.. encode.c -o encode -L.. -lxds
  +$ ./encode >output
   Encoded data:
           int32   = -42
           uint32 = 0x12345678
           string = "This is a test."
  -simons@dev13:~/libxds/docs$ ls -l output
  +$ ls -l output
   -rw-r--r--  1 simons  simons  28 Aug  2 15:21 output
   \end{verbatim}
   \end{quote}
   
  -The result of executing the programm --- the file {\sf output} --- can be
  -displayed with {\sf hexdump(1)} or {\sf od(1)} and should look like this:
  +The result of executing the programm --- the file \textsf{output} --- can be
  +displayed with \textsf{hexdump(1)} or \textsf{od(1)} and should look like this:
   
   \begin{quote}
   \begin{Verbatim}[fontsize=\small]
  -simons@dev13:~/libxds/docs$ hexdump -C output
  +$ hexdump -C output
   00000000  ff ff ff d6 12 34 56 78  00 00 00 0f 54 68 69 73  |.....4Vx....This|
   00000010  20 69 73 20 61 20 74 65  73 74 2e 00              | is a test..|
   0000001c
  @@ -442,15 +442,15 @@
   \end{Verbatim}
   
   \paragraph{Lines 1--25.}
  -Include the required header files, define the {\sf error\_exit()} helper
  +Include the required header files, define the \textsf{error\_exit()} helper
   function, and create the required variables on the stack.
   
   \paragraph{Lines 27--39.}
   These instructions will read an unspecified number of bytes from the
   standard input stream --- as long as the input does not exceed the size of
  -the {\sf buffer} variable. In order to provide the program with the
  -apropriate input, redirect the standard input stream to the file {\sf
  -output} created in the previous section or connect the encoding and
  +the \textsf{buffer} variable. In order to provide the program with the
  +appropriate input, redirect the standard input stream to the file
  +\textsf{output} created in the previous section or connect the encoding and
   decoding programs directly by a pipe.
   
   \paragraph{Lines 41-43.}
  @@ -468,34 +468,34 @@
   Here we do not get a buffer from the library, we \emph{set} the buffer
   we've read earlier in the context for decoding. Please note that we use
   loan semantics in this case, not gift semantics. This is necessary because
  -{\sf buffer} has not been allocated by {\sf malloc()} --- the variable
  -lives on the stack. This means that we cannot give it to libxds because
  -libxds expects to be able to {\sf free()} the buffer when the context is
  +\textsf{buffer} has not been allocated by \textsf{malloc()} --- the variable
  +lives on the stack. This means that we cannot give it to XDS because
  +XDS expects to be able to \textsf{free()} the buffer when the context is
   destroyed.
   
   Loan semantics are fine, though, all we have to do is to take care that we
  -don't erase or modify the contents of {\sf buffer} while libxds operates on
  +don't erase or modify the contents of \textsf{buffer} while XDS operates on
   it. The library itself will never touch the buffer in decode mode, no
   matter whether loan or gift semantics have been chosen.
   
   \paragraph{Lines 53--54.}
   Here come the actual decoding of the buffer's contents using {\sf
  -xds\_decode()}. The syntax is identical to {\sf xds\_encode()}'s, the only
  +xds\_decode()}. The syntax is identical to \textsf{xds\_encode()}'s, the only
   difference is that the decoding engines do not expect the values --- like
   the encoding engines did --- but the location where to store the value.
  -Thus we pass the addresses of the apropriate variables here. If the routine
  -returns with {\sf XDS\_OK}, the decoded values will have been stored in
  +Thus we pass the addresses of the appropriate variables here. If the routine
  +returns with \textsf{XDS\_OK}, the decoded values will have been stored in
   those locations.
   
   It should be noted that the decoded string cannot trivially be returned
  -this way. Instead, {\sf xds\_decode()} will use {\sf malloc()} to allocate
  +this way. Instead, \textsf{xds\_decode()} will use \textsf{malloc()} to allocate
   a buffer barely large enough to hold the string. The address of that buffer
  -is then stored in the pointer {\sf string}. Of course this means that the
  -application has to {\sf free()} the string once it's not required anymore.
  +is then stored in the pointer \textsf{string}. Of course this means that the
  +application has to \textsf{free()} the string once it's not required anymore.
   
   \paragraph{Line 56.}
   We don't need the context anymore, so we destroy it and free all used
  -resources. This does not affect {\sf buffer} in any way because we used
  +resources. This does not affect \textsf{buffer} in any way because we used
   loan semantics.
   
   \paragraph{Lines 58-61.}
  @@ -503,19 +503,18 @@
   a look at them.
   
   \paragraph{Line 63.}
  -Now that we don't need the contents of {\sf string} anymore, we must return
  -the buffer allocated in {\sf xds\_decode()} to the system.
  +Now that we don't need the contents of \textsf{string} anymore, we must return
  +the buffer allocated in \textsf{xds\_decode()} to the system.
   
   \bigskip
   Like the encoding program described earlier, the source code to this
  -program is included in the library distribution as {\sf docs/decode.c}. You
  -can compile and execute the program like this:
  +program is included in the library distribution as \textsf{docs/decode.c}.
  +You can compile and execute the program like this:
   
   \begin{quote}
   \begin{verbatim}
  -simons@dev13:~/libxds$ cd docs
  -simons@dev13:~/libxds/docs$ gcc -I.. decode.c -o decode -L.. -lxds
  -simons@dev13:~/libxds/docs$ ./decode <output
  +$ gcc -I.. decode.c -o decode -L.. -lxds
  +$ ./decode <output
   Decoded data:
           int32   = -42
           uint32 = 0x12345678
  @@ -523,13 +522,13 @@
   \end{verbatim}
   \end{quote}
   
  -Of course we assume that the {\sf output} file has been created as
  +Of course we assume that the \textsf{output} file has been created as
   described in the previous section, otherwise you cannot trivially use the
   example program. Alternatively, you could execute both programs like this:
   
   \begin{quote}
   \begin{Verbatim}[fontsize=\small]
  -simons@dev13:~/libxds/docs$ ./encode | ./decode
  +$ ./encode | ./decode
   Encoded data:
           int32   = -42
           uint32 = 0x12345678
  @@ -586,26 +585,26 @@
   This engine does nothing but take the address of the ``mystruct'' instance
   from the stack and then use xds\_encode() to handle all elements of
   ``mystruct'' separately --- which is fine, because these data types are
  -supperted by libxds already. It is worth noting, though, that we refer to
  +supperted by XDS already. It is worth noting, though, that we refer to
   the other engines by name, meaning that these engines must be registered in
   ``xds'' by that name!
   
   What is very nice, though, is the fact that this encoding engine does not
  -even need to know which formatting engines are used to encode the actual
  -values! If the user registeres the XDR engines under the apropriate names,
  +even need to know which  engines are used to encode the actual
  +values! If the user registeres the XDR engines under the appropriate names,
   ``mystruct'' will be encoded in XDR. If the user registeres the XML engines
  -under the apropriate names, ``mystruct'' will be encoded in XML. Because of
  +under the appropriate names, ``mystruct'' will be encoded in XML. Because of
   that property we call such an engine a ``meta engine''.
   
   Of coures you need not necessarily implement an engine like that: Rather
   than going through xds\_encode(), it would be possible to execute the
  -apropriate encoding engines directly. This had the advantage of not
  +appropriate encoding engines directly. This had the advantage of not
   depending on those engines being registered at all, but it would make the
   meta engine depend on the elementary engines unnecessarily.
   
   One more word about the engine syntax and semantics: As has been mentioned
  -earlier, any function that adheres to the shown above is potentially a
  -formatting engine. These parameters have the following meaning:
  +earlier, any function that adheres to the shown above is potentially an
  +engine. These parameters have the following meaning:
   
   \begin{itemize}
   
  @@ -743,9 +742,9 @@
   
   \subsection{int xds\_register(xds\_t*~\underline{xds}, const~char*~\underline{name}, xds\_engine\_t~\underline{engine}, void*~\underline{engine\_context});}
   
  -This routine will register a formatting engine in the provided XDS context.
  -A ``formatting engine'' is potentially any function that fullfils the
  -following interface:
  +This routine will register an engine in the provided XDS context. An
  +``engine'' is potentially any function that fullfils the following
  +interface:
   
   \begin{quote}
   \begin{verbatim}
  @@ -755,12 +754,12 @@
   \end{verbatim}
   \end{quote}
   
  -By calling xds\_register(), the formatting engine ``engine'' will be
  -registered under the name ``name'' in the XDS context ``xds''. The last
  -parameter ``engine\_context'' may be specified as the user sees fit: It
  -will be passed when the engine is actually called and may be used to
  -implement an engine-specific context. Most engines will not need a context
  -of their own, in which case \textsf{NULL} should be used here.
  +By calling xds\_register(), the engine ``engine'' will be registered under
  +the name ``name'' in the XDS context ``xds''. The last parameter
  +``engine\_context'' may be specified as the user sees fit: It will be
  +passed when the engine is actually called and may be used to implement an
  +engine-specific context. Most engines will not need a context of their own,
  +in which case \textsf{NULL} should be used here.
   
   Please note that until the user calls xds\_register() for an XDS context he
   obtained from xds\_init(), no engines are registered for that context. Even
  @@ -781,12 +780,12 @@
   
   \subsection{int xds\_unregister(xds\_t*~\underline{xds}, const~char*~\underline{name});}
   
  -xds\_unregister() will remove the formatting engine ``name'' from XDS
  -context ``xds''. The function will return \textsf{XDS\_OK} in case
  -everything went fine, \textsf{XDS\_ERR\_UNKNOWN\_ENGINE} in case the engine
  -``name'' is not registered in ``xds'', or \textsf{XDS\_ERR\_INVALID\_ARG}
  -if either ``xds'' or ``name'' are \textsf{NULL} or ``name'' contains
  -illegal characters for an engine name.
  +xds\_unregister() will remove the engine ``name'' from XDS context ``xds''.
  +The function will return \textsf{XDS\_OK} in case everything went fine,
  +\textsf{XDS\_ERR\_UNKNOWN\_ENGINE} in case the engine ``name'' is not
  +registered in ``xds'', or \textsf{XDS\_ERR\_INVALID\_ARG} if either ``xds''
  +or ``name'' are \textsf{NULL} or ``name'' contains illegal characters for
  +an engine name.
   
   \subsection{int xds\_setbuffer(xds\_t*~\underline{xds}, xds\_scope\_t~\underline{flag}, void*~\underline{buffer}, size\_t~\underline{buffer\_len});}
   
  @@ -805,18 +804,18 @@
   context the new buffer will be set. Furthermore, you can set ``flag'' to
   either \textsf{XDS\_GIFT} or \textsf{XDS\_LOAN}.
   
  -A setting of \textsf{XDS\_GIFT} will tell libxds that the provided buffer
  +A setting of \textsf{XDS\_GIFT} will tell XDS that the provided buffer
   is now owned by the library and that it may be resized by calling
   \textsf{realloc(3)}. Furthermore, the buffer is \textsf{free(3)}ed when
   ``xds'' is destroyed. If ``flag'' is \textsf{XDS\_GIFT} and ``buffer'' is
   \textsf{NULL}, the xds\_setbuffer will simply allocate a buffer of its own
  -to be set in ``xds''. Please note that a buffer given to libxds as gift
  +to be set in ``xds''. Please note that a buffer given to XDS as gift
   \emph{must} have been allocated using \textsf{malloc(3)} --- it may not
  -life on the stack because libxds will try to free or to resize the buffer
  +life on the stack because XDS will try to free or to resize the buffer
   as it sees fit.
   
   Passing \textsf{XDS\_LOAN} via ``flag'' tells xds\_setbuffer() that the
  -buffer is owned by the application and that libxds should not free nor
  +buffer is owned by the application and that XDS should not free nor
   resize the buffer in any case. In this mode, passing a buffer \textsf{NULL}
   will result in an invalid-argument error.
   
  @@ -829,15 +828,15 @@
   
   The ``flag'' argument may be set to either \textsf{XDS\_GIFT} or
   \textsf{XDS\_LOAN}. The first setting means that the buffer is now owned by
  -the application and that libxds must not use it after this xds\_getbuffer()
  +the application and that XDS must not use it after this xds\_getbuffer()
   call anymore; the library will instead allocate a new buffer for itself. Of
   course this also means that the buffer will not be freed in xds\_destroy():
   The application has to \textsf{free(3)} the buffer itself when it is not
   needed anymore.
   
  -Setting ``flag'' to \textsf{XDS\_LOAN} tells libxds that the application
  +Setting ``flag'' to \textsf{XDS\_LOAN} tells XDS that the application
   just wishes to peek into the buffer and will not modify it. The buffer is
  -still owned (and used) by libxds. Please note that the loaned address
  +still owned (and used) by XDS. Please note that the loaned address
   returned by xds\_getbuffer() may become invalid change after any other
   xds\_xxx() function call! If you need a reliable address, use
   \textsf{XDS\_GIFT} mode.
  @@ -854,13 +853,13 @@
   
   \subsection{int xds\_vencode(xds\_t*~\underline{xds}, const~char*~\underline{fmt}, va\_list~\underline{args});}
   
  -This routine will encode one or several values using the apropriate
  -formatting engines registered in XDS context ``xds''. The parameter ``fmt''
  +This routine will encode one or several values using the appropriate
  +encoding engines registered in XDS context ``xds''. The parameter ``fmt''
   contains a \textsf{sprintf(3)}-alike descriptions of the values to be
   encoded; the actual values are provided in the varadic parameter ``args''.
   
   The format for ``fmt'' is simple: Just provide the names of the engines to
  -be used for encode the apropriate value in ``args''. Any non-legal
  +be used for encode the appropriate value in ``args''. Any non-legal
   engine-name character may be used as a delimiter. In order to encode two
   32-bit integers followed by a 64-bit integer, the format string
   \begin{quote}
  @@ -876,7 +875,7 @@
   \end{quote}
   
   Of course the names to be used here have to correspond to the names used to
  -register the formatting engines in ``xds'' earlier.
  +register the engines in ``xds'' earlier.
   
   Every time xds\_vencode() is called, it will append the encoded data at the
   end of the internal buffer stored in ``xds''. Thus, you can call
  @@ -904,8 +903,7 @@
   \textsf{NULL}), \textsf{XDS\_ERR\_UNKNOWN\_ENGINE} (an engine name
   specified in ``fmt'' is not registered in ``xds''),
   \textsf{XDS\_ERR\_INVALID\_MODE} (``xds'' is initialized in decode mode),
  -or \textsf{XDS\_ERR\_UNKNOWN} (the formatting engine returned an
  -unspecified error).
  +or \textsf{XDS\_ERR\_UNKNOWN} (the engine returned an unspecified error).
   
   \subsection{int xds\_encode(xds\_t*~\underline{xds}, const~char*~\underline{fmt}, \dots{});}
   
  @@ -915,15 +913,15 @@
   \subsection{int xds\_vdecode(xds\_t*~\underline{xds}, const~char*~\underline{fmt}, va\_list~\underline{args});}
   
   This routine is almost identical to xds\_vencode(): It expects an XDS
  -context, a format string and a set of parameters for the formatting
  -engines, but xds\_vdecode() does not encode any data, it decodes the data
  -back into the native format. The format string again determines which
  -engines are to be called by the framework in order to decode the values
  -contained in the buffer. The native values will then be stored at the
  -locations found in the corresponding ``args'' entry. But please note that
  -the exact behavior of the decoding engines is not specified! The XML and
  -XDR engines included in this distribution expect a pointer to a location
  -where to store the decoded value, but other engines may vary.
  +context, a format string and a set of parameters for the engines, but
  +xds\_vdecode() does not encode any data, it decodes the data back into the
  +native format. The format string again determines which engines are to be
  +called by the framework in order to decode the values contained in the
  +buffer. The native values will then be stored at the locations found in the
  +corresponding ``args'' entry. But please note that the exact behavior of
  +the decoding engines is not specified! The XML and XDR engines included in
  +this distribution expect a pointer to a location where to store the decoded
  +value, but other engines may vary.
   
   xds\_vdecode() may return any of the following return codes:
   \textsf{XDS\_OK} (everything went fine), \textsf{XDS\_ERR\_INVALID\_ARG}
  @@ -1008,7 +1006,7 @@
   \bibitem{xdr} RFC 1832: ``XDR: External Data Representation Standard'',
   R.~Srinivasan, August~1995
   
  -\bibitem{xml} {\sf http://www.ossp.org/pkg/xds/xds-xml.dtd}
  +\bibitem{xml} \textsf{http://www.ossp.org/pkg/xds/xds-xml.dtd}
   
   \end{thebibliography}
   

From ossp-cvs-owner@ossp.org  Thu Aug  9 15:38:02 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f79Dc1q85104; Thu, 9 Aug 2001 15:38:01 +0200 (CEST)
Date: Thu, 9 Aug 2001 15:38:01 +0200 (CEST)
Message-Id: <200108091338.f79Dc1q85104@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/docs libxds.tex
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   09-Aug-2001 15:38:01
  Branch: HEAD                             Handle: 2001080914380000

  Modified files:
    ossp-pkg/srpc/libxds/docs libxds.tex

  Log:
    Added section about frequently asked questions. Currently, only the
    design decision agains encoding and decoding with the same XDS context
    is documented.

  Summary:
    Revision    Changes     Path
    1.6         +57 -1      ossp-pkg/srpc/libxds/docs/libxds.tex
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/docs/libxds.tex
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 libxds.tex
  --- ossp-pkg/srpc/libxds/docs/libxds.tex	2001/08/09 12:58:08	1.5
  +++ ossp-pkg/srpc/libxds/docs/libxds.tex	2001/08/09 13:38:00	1.6
  @@ -1,6 +1,6 @@
   % -*- mode: LaTeX; fill-column: 75; -*-
   %
  -% $Id: libxds.tex,v 1.5 2001/08/09 12:58:08 simons Exp $
  +% $Id: libxds.tex,v 1.6 2001/08/09 13:38:00 simons Exp $
   %
   \documentclass[a4paper,10pt,pointlessnumbers,bibtotoc]{scrartcl}
   \usepackage[dvips,xdvi]{graphicx}
  @@ -1000,6 +1000,62 @@
   stack, but these behave differently because the length of the decoded data
   is not known in advance and the application cannot provide a buffer that's
   guaranteed to suffice.
  +
  +\section{Frequently Asked Questions}
  +
  +\subsection{Why do we have separate encoding and decoding modes?}
  +
  +Some users complained about having to maintain separate XDS contexts for
  +encoding and decoding. They wondered, why it is not possible to encode and
  +decode with a single XDS context. The reason is that this limitatiton makes
  +the XDS context structure and the programmer API for XDS much simpler. If
  +we were able to use a single context for encoding and decoding, we had to
  +maintain \emph{two} lists of registered engines per XDS context: One set of
  +encoding engines and one set of decoding engines. Consequently, the
  +\textsf{xds\_register()} function would need to take an additional
  +parameter, which determines whether you're registering an encoding or an
  +decoding engine. All this is not necessary in the current design, because
  +one list of registered engines suffices.
  +
  +Another important topic is buffer management. The buffer handling in
  +encoding mode is subtly different from that in encoding mode: The XDS
  +context contains a buffer, the size of that buffer and a kind of ``current
  +position'' pointer. When an engine stores, say, 8 bytes of encoded data in
  +the buffer, \textsf{xds\_vencode()} will increase the ``current position''
  +by 8 bytes --- the next encoding engine will append its encoded data at the
  +end of the buffer. If the ``current position'' reaches the end of the
  +buffer, the buffer is reallocated with an appropriately bigger size.
  +
  +In decoding mode, the same variables in the XDS context have a different
  +meaning: Since the buffer is never going to be resized, the buffer size
  +does not correspond to the size of the memory chunk that constitutes the
  +buffer, it says how many bytes of information the buffer contains; it's the
  +length of the contents. The ``current position'' is initialized at the
  +beginning of the buffer and every time an engine claims to have decoded,
  +say, 8 bytes from the buffer, the ``current position'' is increased by 8
  +bytes towards the end of the buffer. If the ``current position'' reaches
  +the end of the buffer's contents, an \textsf{XDS\_UNDERFLOW} error is
  +returned.
  +
  +Buffer handling is different in encoding and decoding mode in so far as
  +that in encoding mode, the initial buffer is empty and the current position
  +moves with the end of the content, determining where new data should be
  +appended. In decoding mode, the initial buffer is filled and the current
  +position wanders from the beginning to the end of the content.
  +
  +Thus, if an XDS context should be used for both encoding and decoding, the
  +library had to manage two different buffers because the encoding and
  +decoding buffers have different semantics. Thus, the
  +\textsf{xds\_setbuffer()} and \textsf{xds\_getbuffer()} routines would need
  +an additional parameter in order to set the two buffers independently.
  +
  +Considering all that, we found that the current design greatly reduces the
  +complexity of the implementation and of the API while putting the user only
  +through minimum inconvenience.
  +
  +\subsection{What are those xds\_int-something types good for?}
  +
  +\subsection{Why do I have to register the engines manually?}
   
   \begin{thebibliography}{xxx}
   

From ossp-cvs-owner@ossp.org  Thu Aug  9 15:53:48 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f79Drl987166; Thu, 9 Aug 2001 15:53:47 +0200 (CEST)
Date: Thu, 9 Aug 2001 15:53:47 +0200 (CEST)
Message-Id: <200108091353.f79Drl987166@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/docs libxds.tex
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   09-Aug-2001 15:53:47
  Branch: HEAD                             Handle: 2001080914534700

  Modified files:
    ossp-pkg/srpc/libxds/docs libxds.tex

  Log:
    Added another subsection to the FAQ chapter.

  Summary:
    Revision    Changes     Path
    1.7         +49 -2      ossp-pkg/srpc/libxds/docs/libxds.tex
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/docs/libxds.tex
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 libxds.tex
  --- ossp-pkg/srpc/libxds/docs/libxds.tex	2001/08/09 13:38:00	1.6
  +++ ossp-pkg/srpc/libxds/docs/libxds.tex	2001/08/09 13:53:47	1.7
  @@ -1,6 +1,6 @@
   % -*- mode: LaTeX; fill-column: 75; -*-
   %
  -% $Id: libxds.tex,v 1.6 2001/08/09 13:38:00 simons Exp $
  +% $Id: libxds.tex,v 1.7 2001/08/09 13:53:47 simons Exp $
   %
   \documentclass[a4paper,10pt,pointlessnumbers,bibtotoc]{scrartcl}
   \usepackage[dvips,xdvi]{graphicx}
  @@ -1055,7 +1055,54 @@
   
   \subsection{What are those xds\_int-something types good for?}
   
  -\subsection{Why do I have to register the engines manually?}
  +\subsection{Why do I have to register all the engines manually?}
  +
  +One idea that came up during the design of the API was to provide a way to
  +register all elementary XML or XDR engines with a single function call,
  +something like this:
  + %
  +\begin{quote}
  +\begin{verbatim}
  +xds = xds_init(XDS_ENCODE, XDS_XML);   /* Use the XML engines. */
  +xds = xds_init(XDS_ENCODE, XDS_XDR);   /* Use the XDR engines. */
  +\end{verbatim}
  +\end{quote}
  + %
  +The advantage of this approach is that the application developer does not
  +need to bother about registering some obscure functions like
  +\textsf{xdr\_encode\_octetstream()}. We dismissed the idea nonetheless for
  +the following reasons:
  +
  +\begin{itemize}
  +
  +\item Since the library is meant to be extensible, the \textsf{xds\_init()}
  +has no (good) way of knowing which engines actually exist for an encoding
  +scheme. Suppose someone writes a whole set of engines that implement the
  +CORBA format, then he would not be able to register his engines without
  +re-writing \textsf{xds\_init()}.
  +
  +\item On a similar note, the \textsf{xds\_init()} would not know about the
  +meta engines required by the application developer. The call outlined above
  +would only register the engines for the elementary data types, for the very
  +good reason that the meta engines do not even ``exist'' when the XDS
  +library is compiled.
  +
  +\item This approach would make it hard to mix engines from different
  +formats. If all engines are registered manually, the application programmer
  +may chose to use the XDR format for encoding all kinds of integers, but to
  +use the XML format for encoding strings, octet streams, or floating point
  +numbers.
  +
  +\item If one routine would reference all engines of an encoding format, it
  +meant that all engines of that format were linked into the binary once the
  +application accesses that routine. It would not be possible to, say,
  +register the engines dealing with integers without pulling the floating
  +point engines into the program too --- even though nobody uses them.
  +
  +\end{itemize}
  +
  +
  +
   
   \begin{thebibliography}{xxx}
   

From ossp-cvs-owner@ossp.org  Thu Aug  9 15:55:42 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f79Dtfn87347; Thu, 9 Aug 2001 15:55:41 +0200 (CEST)
Date: Thu, 9 Aug 2001 15:55:41 +0200 (CEST)
Message-Id: <200108091355.f79Dtfn87347@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/docs libxds.tex
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   09-Aug-2001 15:55:41
  Branch: HEAD                             Handle: 2001080914554000

  Modified files:
    ossp-pkg/srpc/libxds/docs libxds.tex

  Log:
    Changed the link to XML in the references section.

  Summary:
    Revision    Changes     Path
    1.8         +2  -5      ossp-pkg/srpc/libxds/docs/libxds.tex
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/docs/libxds.tex
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 libxds.tex
  --- ossp-pkg/srpc/libxds/docs/libxds.tex	2001/08/09 13:53:47	1.7
  +++ ossp-pkg/srpc/libxds/docs/libxds.tex	2001/08/09 13:55:40	1.8
  @@ -1,6 +1,6 @@
   % -*- mode: LaTeX; fill-column: 75; -*-
   %
  -% $Id: libxds.tex,v 1.7 2001/08/09 13:53:47 simons Exp $
  +% $Id: libxds.tex,v 1.8 2001/08/09 13:55:40 simons Exp $
   %
   \documentclass[a4paper,10pt,pointlessnumbers,bibtotoc]{scrartcl}
   \usepackage[dvips,xdvi]{graphicx}
  @@ -1101,15 +1101,12 @@
   
   \end{itemize}
   
  -
  -
  -
   \begin{thebibliography}{xxx}
   
   \bibitem{xdr} RFC 1832: ``XDR: External Data Representation Standard'',
   R.~Srinivasan, August~1995
   
  -\bibitem{xml} \textsf{http://www.ossp.org/pkg/xds/xds-xml.dtd}
  +\bibitem{xml} XML-RPC Home Page: \textsf{http://www.xmlrpc.org/}
   
   \end{thebibliography}
   

From ossp-cvs-owner@ossp.org  Thu Aug  9 16:12:01 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f79EC0U91407; Thu, 9 Aug 2001 16:12:00 +0200 (CEST)
Date: Thu, 9 Aug 2001 16:12:00 +0200 (CEST)
Message-Id: <200108091412.f79EC0U91407@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/docs libxds.tex
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   09-Aug-2001 16:12:00
  Branch: HEAD                             Handle: 2001080915120000

  Modified files:
    ossp-pkg/srpc/libxds/docs libxds.tex

  Log:
    Completed the FAQ section.

  Summary:
    Revision    Changes     Path
    1.9         +15 -1      ossp-pkg/srpc/libxds/docs/libxds.tex
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/docs/libxds.tex
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 libxds.tex
  --- ossp-pkg/srpc/libxds/docs/libxds.tex	2001/08/09 13:55:40	1.8
  +++ ossp-pkg/srpc/libxds/docs/libxds.tex	2001/08/09 14:12:00	1.9
  @@ -1,6 +1,6 @@
   % -*- mode: LaTeX; fill-column: 75; -*-
   %
  -% $Id: libxds.tex,v 1.8 2001/08/09 13:55:40 simons Exp $
  +% $Id: libxds.tex,v 1.9 2001/08/09 14:12:00 simons Exp $
   %
   \documentclass[a4paper,10pt,pointlessnumbers,bibtotoc]{scrartcl}
   \usepackage[dvips,xdvi]{graphicx}
  @@ -1055,6 +1055,16 @@
   
   \subsection{What are those xds\_int-something types good for?}
   
  +The XDS library uses the data types \textsf{xds\_int32\_t}, etc. rather
  +than \textsf{int}. This is necessary because we need to have a definive
  +size for each data type. In ISO-C, though, the actual size of an
  +\textsf{int} is undefined. In theory, the system header
  +\textsf{sys/types.h} defines types with fixed sizes, but unfortunately the
  +names of these data types vary from vendor to vendor. To solve that, we
  +defined our own data types. The application programmer might want to take a
  +look at the top few lines of the \textsf{xds.h} include file to see how the
  +actual data types are mapped to the \textsf{xds\_xxx\_t} variant.
  +
   \subsection{Why do I have to register all the engines manually?}
   
   One idea that came up during the design of the API was to provide a way to
  @@ -1098,6 +1108,10 @@
   application accesses that routine. It would not be possible to, say,
   register the engines dealing with integers without pulling the floating
   point engines into the program too --- even though nobody uses them.
  +
  +The author of this document wishes to remark, though, that this property of
  +the library was later uh \dots{} removed by the decision of the team leader
  +to merge all engines into one source module per format. Sorry.
   
   \end{itemize}
   

From ossp-cvs-owner@ossp.org  Thu Aug  9 16:59:09 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f79Ex8a99250; Thu, 9 Aug 2001 16:59:08 +0200 (CEST)
Date: Thu, 9 Aug 2001 16:59:08 +0200 (CEST)
Message-Id: <200108091459.f79Ex8a99250@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/docs libxds.tex
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   09-Aug-2001 16:59:08
  Branch: HEAD                             Handle: 2001080915590700

  Modified files:
    ossp-pkg/srpc/libxds/docs libxds.tex

  Log:
    Added paragraph about the need of fixed size data types.

  Summary:
    Revision    Changes     Path
    1.10        +13 -2      ossp-pkg/srpc/libxds/docs/libxds.tex
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/docs/libxds.tex
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 libxds.tex
  --- ossp-pkg/srpc/libxds/docs/libxds.tex	2001/08/09 14:12:00	1.9
  +++ ossp-pkg/srpc/libxds/docs/libxds.tex	2001/08/09 14:59:07	1.10
  @@ -1,6 +1,6 @@
   % -*- mode: LaTeX; fill-column: 75; -*-
   %
  -% $Id: libxds.tex,v 1.9 2001/08/09 14:12:00 simons Exp $
  +% $Id: libxds.tex,v 1.10 2001/08/09 14:59:07 simons Exp $
   %
   \documentclass[a4paper,10pt,pointlessnumbers,bibtotoc]{scrartcl}
   \usepackage[dvips,xdvi]{graphicx}
  @@ -563,7 +563,17 @@
   \end{verbatim}
   \end{quote}
   
  -In order to encode an instance of this structure, we first write an
  +Some readers might wonder why the structure is defined using these weird
  +data types rather than the familiar ones like \textsf{int}, \textsf{long},
  +etc. The reason is that these data types have an undefined size. An
  +\textsf{int} variable will have, say, 32 bits when compiled on the average
  +Unix machine, but when the same source is compiled on a 64-bit machine,
  +like TRUE64 Unix, it will have a size of 64 bit. That is a problem when
  +those structures have to be exchanged between entirely different systems,
  +because the structures are binary incompatible --- something even XDS
  +cannot remedy.
  +
  +Anyway, in order to encode an instance of this structure, we write an
   encoding engine:
   
   \begin{quote}
  @@ -1054,6 +1064,7 @@
   through minimum inconvenience.
   
   \subsection{What are those xds\_int-something types good for?}
  +\label{xds int stuff}
   
   The XDS library uses the data types \textsf{xds\_int32\_t}, etc. rather
   than \textsf{int}. This is necessary because we need to have a definive

From ossp-cvs-owner@ossp.org  Thu Aug  9 17:23:30 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f79FNSD02972; Thu, 9 Aug 2001 17:23:28 +0200 (CEST)
Date: Thu, 9 Aug 2001 17:23:28 +0200 (CEST)
Message-Id: <200108091523.f79FNSD02972@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/docs libxds.tex
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   09-Aug-2001 17:23:28
  Branch: HEAD                             Handle: 2001080916232800

  Modified files:
    ossp-pkg/srpc/libxds/docs libxds.tex

  Log:
    Fixed length of input and output data for the XML engines.

  Summary:
    Revision    Changes     Path
    1.11        +25 -25     ossp-pkg/srpc/libxds/docs/libxds.tex
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/docs/libxds.tex
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 libxds.tex
  --- ossp-pkg/srpc/libxds/docs/libxds.tex	2001/08/09 14:59:07	1.10
  +++ ossp-pkg/srpc/libxds/docs/libxds.tex	2001/08/09 15:23:28	1.11
  @@ -1,6 +1,6 @@
   % -*- mode: LaTeX; fill-column: 75; -*-
   %
  -% $Id: libxds.tex,v 1.10 2001/08/09 14:59:07 simons Exp $
  +% $Id: libxds.tex,v 1.11 2001/08/09 15:23:28 simons Exp $
   %
   \documentclass[a4paper,10pt,pointlessnumbers,bibtotoc]{scrartcl}
   \usepackage[dvips,xdvi]{graphicx}
  @@ -954,16 +954,16 @@
   
   \begin{tabular}{|c|c|c|c|} \hline
   \bf Function Name     & \bf Expected ``args'' Datatype & \bf Input & \bf Output \\ \hline
  -xdr\_encode\_uint32()      & xds\_uint32\_t   & 4 byte   & 4 byte \\
  -xdr\_decode\_uint32()      & xds\_uint32\_t*  & 4 byte   & 4 byte \\[1ex]
  -xdr\_encode\_int32()       & xds\_int32\_t    & 4 byte   & 4 byte \\
  -xdr\_decode\_int32()       & xds\_int32\_t*   & 4 byte   & 4 byte \\[1ex]
  -xdr\_encode\_uint64()      & xds\_uint64\_t   & 4 byte   & 4 byte \\
  -xdr\_decode\_uint64()      & xds\_uint64\_t*  & 4 byte   & 4 byte \\[1ex]
  -xdr\_encode\_int64()       & xds\_int64\_t    & 4 byte   & 4 byte \\
  -xdr\_decode\_int64()       & xds\_int64\_t*   & 4 byte   & 4 byte \\[1ex]
  -xdr\_encode\_double()      & xds\_double\_t   & ?? byte  & ?? byte \\
  -xdr\_decode\_double()      & xds\_double\_t*  & ?? byte  & ?? byte \\[1ex]
  +xdr\_encode\_uint32()      & xds\_uint32\_t   & 4 bytes  & 4 bytes  \\
  +xdr\_decode\_uint32()      & xds\_uint32\_t*  & 4 bytes  & 4 bytes  \\[1ex]
  +xdr\_encode\_int32()       & xds\_int32\_t    & 4 bytes  & 4 bytes  \\
  +xdr\_decode\_int32()       & xds\_int32\_t*   & 4 bytes  & 4 bytes  \\[1ex]
  +xdr\_encode\_uint64()      & xds\_uint64\_t   & 4 bytes  & 4 bytes  \\
  +xdr\_decode\_uint64()      & xds\_uint64\_t*  & 4 bytes  & 4 bytes  \\[1ex]
  +xdr\_encode\_int64()       & xds\_int64\_t    & 4 bytes  & 4 bytes  \\
  +xdr\_decode\_int64()       & xds\_int64\_t*   & 4 bytes  & 4 bytes  \\[1ex]
  +xdr\_encode\_double()      & xds\_double\_t   & ?? bytes & ?? bytes \\
  +xdr\_decode\_double()      & xds\_double\_t*  & ?? bytes & ?? bytes \\[1ex]
   xdr\_encode\_octetstream() & void*, size\_t   & variable & variable \\
   xdr\_decode\_octetstream() & void**, size\_t* & variable & variable \\[1ex]
   xdr\_encode\_string()      & char*            & variable & variable \\
  @@ -985,20 +985,20 @@
   
   \begin{tabular}{|c|c|c|c|} \hline
   \bf Function Name     & \bf Expected ``args'' Datatype & \bf Input & \bf Output \\ \hline
  -xml\_encode\_uint32()      & xds\_uint32\_t   & ?? byte  & ?? byte \\
  -xml\_decode\_uint32()      & xds\_uint32\_t*  & ?? byte  & ?? byte \\[1ex]
  -xml\_encode\_int32()       & xds\_int32\_t    & ?? byte  & ?? byte \\
  -xml\_decode\_int32()       & xds\_int32\_t*   & ?? byte  & ?? byte \\[1ex]
  -xml\_encode\_uint64()      & xds\_uint64\_t   & ?? byte  & ?? byte \\
  -xml\_decode\_uint64()      & xds\_uint64\_t*  & ?? byte  & ?? byte \\[1ex]
  -xml\_encode\_int64()       & xds\_int64\_t    & ?? byte  & ?? byte \\
  -xml\_decode\_int64()       & xds\_int64\_t*   & ?? byte  & ?? byte \\[1ex]
  -xml\_encode\_double()      & xds\_double\_t   & ?? byte  & ?? byte \\
  -xml\_decode\_double()      & xds\_double\_t*  & ?? byte  & ?? byte \\[1ex]
  -xml\_encode\_octetstream() & void*, size\_t   & variable & variable \\
  -xml\_decode\_octetstream() & void**, size\_t* & variable & variable \\[1ex]
  -xml\_encode\_string()      & char*            & variable & variable \\
  -xml\_decode\_string()      & char**           & variable & variable \\ \hline
  +xml\_encode\_uint32()      & xds\_uint32\_t   & 4 bytes      & 18--27 bytes \\
  +xml\_decode\_uint32()      & xds\_uint32\_t*  & 18--27 bytes & 4 bytes      \\[1ex]
  +xml\_encode\_int32()       & xds\_int32\_t    & 4 bytes      & 16--26 bytes \\
  +xml\_decode\_int32()       & xds\_int32\_t*   & 16--26 bytes & 4 bytes      \\[1ex]
  +xml\_encode\_uint64()      & xds\_uint64\_t   & 8 bytes      & 18--37 bytes \\
  +xml\_decode\_uint64()      & xds\_uint64\_t*  & 18--37 bytes & 8 bytes      \\[1ex]
  +xml\_encode\_int64()       & xds\_int64\_t    & 8 bytes      & 16--36 bytes \\
  +xml\_decode\_int64()       & xds\_int64\_t*   & 16--36 bytes & 8 bytes      \\[1ex]
  +xml\_encode\_double()      & xds\_double\_t   & ?? bytes     & ?? bytes     \\
  +xml\_decode\_double()      & xds\_double\_t*  & ?? bytes     & ?? bytes     \\[1ex]
  +xml\_encode\_octetstream() & void*, size\_t   & variable     & variable     \\
  +xml\_decode\_octetstream() & void**, size\_t* & variable     & variable     \\[1ex]
  +xml\_encode\_string()      & char*            & variable     & variable     \\
  +xml\_decode\_string()      & char**           & variable     & variable     \\ \hline
   \end{tabular}
   \medskip
   

From ossp-cvs-owner@ossp.org  Thu Aug  9 17:25:58 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f79FPve03242; Thu, 9 Aug 2001 17:25:57 +0200 (CEST)
Date: Thu, 9 Aug 2001 17:25:57 +0200 (CEST)
Message-Id: <200108091525.f79FPve03242@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/docs extended.c libxds.tex
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   09-Aug-2001 17:25:57
  Branch: HEAD                             Handle: 2001080916255700

  Modified files:
    ossp-pkg/srpc/libxds/docs extended.c libxds.tex

  Log:
    The assert() in extended.c is wrong because it is not invariable but
    depends on "user input". Use "if" instead.

  Summary:
    Revision    Changes     Path
    1.2         +5  -1      ossp-pkg/srpc/libxds/docs/extended.c
    1.12        +6  -2      ossp-pkg/srpc/libxds/docs/libxds.tex
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/docs/extended.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 extended.c
  --- ossp-pkg/srpc/libxds/docs/extended.c	2001/08/08 13:13:11	1.1
  +++ ossp-pkg/srpc/libxds/docs/extended.c	2001/08/09 15:25:57	1.2
  @@ -35,7 +35,11 @@
   		    &tmp, &i);
       if (rc == XDS_OK)
   	{
  -	assert(i == sizeof(ms->text));
  +	if (i != sizeof(ms->text))
  +	    {
  +	    free(tmp);
  +	    return XDS_ERR_TYPE_MISMATCH;
  +	    }
   	memmove(ms->text, tmp, i);
   	free(tmp);
   	}
  Index: ossp-pkg/srpc/libxds/docs/libxds.tex
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 libxds.tex
  --- ossp-pkg/srpc/libxds/docs/libxds.tex	2001/08/09 15:23:28	1.11
  +++ ossp-pkg/srpc/libxds/docs/libxds.tex	2001/08/09 15:25:57	1.12
  @@ -1,6 +1,6 @@
   % -*- mode: LaTeX; fill-column: 75; -*-
   %
  -% $Id: libxds.tex,v 1.11 2001/08/09 15:23:28 simons Exp $
  +% $Id: libxds.tex,v 1.12 2001/08/09 15:25:57 simons Exp $
   %
   \documentclass[a4paper,10pt,pointlessnumbers,bibtotoc]{scrartcl}
   \usepackage[dvips,xdvi]{graphicx}
  @@ -709,7 +709,11 @@
                       &tmp, &i);
       if (rc == XDS_OK)
           {
  -        assert(i == sizeof(ms->text));
  +        if (i != sizeof(ms->text))
  +            {
  +            free(tmp);
  +            return XDS_ERR_TYPE_MISMATCH;
  +            }
           memmove(ms->text, tmp, i);
           free(tmp);
           }

From ossp-cvs-owner@ossp.org  Thu Aug  9 17:30:00 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f79FTxV03945; Thu, 9 Aug 2001 17:29:59 +0200 (CEST)
Date: Thu, 9 Aug 2001 17:29:59 +0200 (CEST)
Message-Id: <200108091529.f79FTxV03945@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/docs extended.c libxds.tex
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   09-Aug-2001 17:29:59
  Branch: HEAD                             Handle: 2001080916295800

  Modified files:
    ossp-pkg/srpc/libxds/docs extended.c libxds.tex

  Log:
    Made the code in extended.c more elegant.

  Summary:
    Revision    Changes     Path
    1.3         +4  -6      ossp-pkg/srpc/libxds/docs/extended.c
    1.13        +5  -7      ossp-pkg/srpc/libxds/docs/libxds.tex
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/docs/extended.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 extended.c
  --- ossp-pkg/srpc/libxds/docs/extended.c	2001/08/09 15:25:57	1.2
  +++ ossp-pkg/srpc/libxds/docs/extended.c	2001/08/09 15:29:58	1.3
  @@ -35,12 +35,10 @@
   		    &tmp, &i);
       if (rc == XDS_OK)
   	{
  -	if (i != sizeof(ms->text))
  -	    {
  -	    free(tmp);
  -	    return XDS_ERR_TYPE_MISMATCH;
  -	    }
  -	memmove(ms->text, tmp, i);
  +	if (i == sizeof(ms->text))
  +	    memmove(ms->text, tmp, i);
  +	else
  +	    rc = XDS_ERR_TYPE_MISMATCH;
   	free(tmp);
   	}
       return rc;
  Index: ossp-pkg/srpc/libxds/docs/libxds.tex
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 libxds.tex
  --- ossp-pkg/srpc/libxds/docs/libxds.tex	2001/08/09 15:25:57	1.12
  +++ ossp-pkg/srpc/libxds/docs/libxds.tex	2001/08/09 15:29:58	1.13
  @@ -1,6 +1,6 @@
   % -*- mode: LaTeX; fill-column: 75; -*-
   %
  -% $Id: libxds.tex,v 1.12 2001/08/09 15:25:57 simons Exp $
  +% $Id: libxds.tex,v 1.13 2001/08/09 15:29:58 simons Exp $
   %
   \documentclass[a4paper,10pt,pointlessnumbers,bibtotoc]{scrartcl}
   \usepackage[dvips,xdvi]{graphicx}
  @@ -709,12 +709,10 @@
                       &tmp, &i);
       if (rc == XDS_OK)
           {
  -        if (i != sizeof(ms->text))
  -            {
  -            free(tmp);
  -            return XDS_ERR_TYPE_MISMATCH;
  -            }
  -        memmove(ms->text, tmp, i);
  +        if (i == sizeof(ms->text))
  +            memmove(ms->text, tmp, i);
  +        else
  +            rc = XDS_ERR_TYPE_MISMATCH;
           free(tmp);
           }
       return rc;

From ossp-cvs-owner@ossp.org  Thu Aug  9 17:35:24 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f79FZOv05006; Thu, 9 Aug 2001 17:35:24 +0200 (CEST)
Date: Thu, 9 Aug 2001 17:35:24 +0200 (CEST)
Message-Id: <200108091535.f79FZOv05006@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/docs libxds.tex
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   09-Aug-2001 17:35:24
  Branch: HEAD                             Handle: 2001080916352300

  Modified files:
    ossp-pkg/srpc/libxds/docs libxds.tex

  Log:
    Made the "xds_int-something" section more clear.

  Summary:
    Revision    Changes     Path
    1.14        +3  -2      ossp-pkg/srpc/libxds/docs/libxds.tex
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/docs/libxds.tex
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 libxds.tex
  --- ossp-pkg/srpc/libxds/docs/libxds.tex	2001/08/09 15:29:58	1.13
  +++ ossp-pkg/srpc/libxds/docs/libxds.tex	2001/08/09 15:35:23	1.14
  @@ -1,6 +1,6 @@
   % -*- mode: LaTeX; fill-column: 75; -*-
   %
  -% $Id: libxds.tex,v 1.13 2001/08/09 15:29:58 simons Exp $
  +% $Id: libxds.tex,v 1.14 2001/08/09 15:35:23 simons Exp $
   %
   \documentclass[a4paper,10pt,pointlessnumbers,bibtotoc]{scrartcl}
   \usepackage[dvips,xdvi]{graphicx}
  @@ -1076,7 +1076,8 @@
   names of these data types vary from vendor to vendor. To solve that, we
   defined our own data types. The application programmer might want to take a
   look at the top few lines of the \textsf{xds.h} include file to see how the
  -actual data types are mapped to the \textsf{xds\_xxx\_t} variant.
  +actual data types are mapped to the \textsf{xds\_xxx\_t} variant on your
  +system.
   
   \subsection{Why do I have to register all the engines manually?}
   

From ossp-cvs-owner@ossp.org  Thu Aug  9 21:58:38 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f79JwaO41475; Thu, 9 Aug 2001 21:58:36 +0200 (CEST)
Date: Thu, 9 Aug 2001 21:58:36 +0200 (CEST)
Message-Id: <200108091958.f79JwaO41475@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile.in configure.ac xds.c xds.h....
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Aug-2001 21:58:36
  Branch: HEAD                             Handle: 2001080920583500

  Modified files:
    ossp-pkg/srpc/libxds    Makefile.in configure.ac xds.c xds.h.in xds.pod
                            xds_engine_xdr.c xds_engine_xml.c xds_p.h
                            xds_test.sh xds_test_lib.c xds_test_xdr.c
                            xds_test_xml.c

  Log:
    Use the license consistently.

  Summary:
    Revision    Changes     Path
    1.24        +28 -1      ossp-pkg/srpc/libxds/Makefile.in
    1.18        +29 -2      ossp-pkg/srpc/libxds/configure.ac
    1.3         +28 -23     ossp-pkg/srpc/libxds/xds.c
    1.13        +1  -1      ossp-pkg/srpc/libxds/xds.h.in
    1.8         +30 -2      ossp-pkg/srpc/libxds/xds.pod
    1.2         +29 -23     ossp-pkg/srpc/libxds/xds_engine_xdr.c
    1.3         +29 -23     ossp-pkg/srpc/libxds/xds_engine_xml.c
    1.4         +1  -1      ossp-pkg/srpc/libxds/xds_p.h
    1.2         +28 -0      ossp-pkg/srpc/libxds/xds_test.sh
    1.2         +28 -23     ossp-pkg/srpc/libxds/xds_test_lib.c
    1.2         +28 -23     ossp-pkg/srpc/libxds/xds_test_xdr.c
    1.2         +28 -23     ossp-pkg/srpc/libxds/xds_test_xml.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile.in
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 Makefile.in
  --- ossp-pkg/srpc/libxds/Makefile.in	2001/08/08 19:15:23	1.23
  +++ ossp-pkg/srpc/libxds/Makefile.in	2001/08/09 19:58:35	1.24
  @@ -1,4 +1,31 @@
  -# Build libxds.
  +##
  +##  XDS - OSSP Extensible Data Serialization Library
  +##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  
  +##  This file is part of OSSP XDS, an extensible data serialization
  +##  library which can be found at http://www.ossp.com/pkg/xds/.
  +##  
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##  
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  Makefile.in: make(1) build procedure
  +##
   
   CC        = @CC@
   AR        = ar
  Index: ossp-pkg/srpc/libxds/configure.ac
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 configure.ac
  --- ossp-pkg/srpc/libxds/configure.ac	2001/08/09 11:58:22	1.17
  +++ ossp-pkg/srpc/libxds/configure.ac	2001/08/09 19:58:35	1.18
  @@ -1,8 +1,35 @@
  -dnl configure.in -- Process this file with autoconf to produce a configure script.
  +dnl ##
  +dnl ##  XDS - OSSP Extensible Data Serialization Library
  +dnl ##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  +dnl ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +dnl ##  
  +dnl ##  This file is part of OSSP XDS, an extensible data serialization
  +dnl ##  library which can be found at http://www.ossp.com/pkg/xds/.
  +dnl ##  
  +dnl ##  Permission to use, copy, modify, and distribute this software for
  +dnl ##  any purpose with or without fee is hereby granted, provided that
  +dnl ##  the above copyright notice and this permission notice appear in all
  +dnl ##  copies.
  +dnl ##  
  +dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +dnl ##  SUCH DAMAGE.
  +dnl ##
  +dnl ##  configure.ac: autoconf script source
  +dnl ##
   
   AC_INIT(xds.h.in)
   AC_PREREQ(2.52)
  -AC_REVISION($Revision: 1.17 $)
  +AC_REVISION($Revision: 1.18 $)
   
   dnl Get rid of the lousy -g and -O defaults in CFLAGS.
   dnl
  Index: ossp-pkg/srpc/libxds/xds.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xds.c
  --- ossp-pkg/srpc/libxds/xds.c	2001/08/08 19:33:55	1.2
  +++ ossp-pkg/srpc/libxds/xds.c	2001/08/09 19:58:35	1.3
  @@ -1,26 +1,31 @@
  -/* 
  - * XDS - OSSP Extensible Data Serialization Library Copyright (c) 2001 The
  - * OSSP Project (http://www.ossp.org/) Copyright (c) 2001 Cable & Wireless
  - * Deutschland (http://www.cw.com/de/)
  - * 
  - * This file is part of OSSP XDS, an extensible data serialization library
  - * which can be found at http://www.ossp.com/pkg/xds/.
  - * 
  - * Permission to use, copy, modify, and distribute this software for any
  - * purpose with or without fee is hereby granted, provided that the above
  - * copyright notice and this permission notice appear in all copies.
  - * 
  - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 
  - * EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR CONTRIBUTORS BE
  - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
  - * POSSIBILITY OF SUCH DAMAGE. */
  +/*
  +**  XDS - OSSP Extensible Data Serialization Library
  +**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**
  +**  This file is part of OSSP XDS, an extensible data serialization
  +**  library which can be found at http://www.ossp.com/pkg/xds/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  xds.c: XDS library framework
  +*/
   
   #include <string.h>
   #include <ctype.h>
  Index: ossp-pkg/srpc/libxds/xds.h.in
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 xds.h.in
  --- ossp-pkg/srpc/libxds/xds.h.in	2001/08/08 19:32:02	1.12
  +++ ossp-pkg/srpc/libxds/xds.h.in	2001/08/09 19:58:35	1.13
  @@ -24,7 +24,7 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  xds.h: C API
  +**  xds.h: XDS library API
   */
   
   #ifndef __XDS_H__
  Index: ossp-pkg/srpc/libxds/xds.pod
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 xds.pod
  --- ossp-pkg/srpc/libxds/xds.pod	2001/08/08 19:15:23	1.7
  +++ ossp-pkg/srpc/libxds/xds.pod	2001/08/09 19:58:35	1.8
  @@ -1,11 +1,39 @@
  +##
  +##  XDS - OSSP Extensible Data Serialization Library
  +##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  
  +##  This file is part of OSSP XDS, an extensible data serialization
  +##  library which can be found at http://www.ossp.com/pkg/xds/.
  +##  
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##  
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  xds.pod: Unix manual page source
  +##
  +
   =pod
   
   =head1 NAME
   
  -xds - eXtensible Data Serialization
  +xds - OSSP eXtensible Data Serialization
   
   =head1 SYNOPSIS
  -
   
   =head1 DESCRIPTION
   
  Index: ossp-pkg/srpc/libxds/xds_engine_xdr.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xds_engine_xdr.c
  --- ossp-pkg/srpc/libxds/xds_engine_xdr.c	2001/08/08 19:15:23	1.1
  +++ ossp-pkg/srpc/libxds/xds_engine_xdr.c	2001/08/09 19:58:35	1.2
  @@ -1,28 +1,34 @@
  -/* 
  - * XDS - OSSP Extensible Data Serialization Library Copyright (c) 2001 The
  - * OSSP Project (http://www.ossp.org/) Copyright (c) 2001 Cable & Wireless
  - * Deutschland (http://www.cw.com/de/)
  - * 
  - * This file is part of OSSP XDS, an extensible data serialization library
  - * which can be found at http://www.ossp.com/pkg/xds/.
  - * 
  - * Permission to use, copy, modify, and distribute this software for any
  - * purpose with or without fee is hereby granted, provided that the above
  - * copyright notice and this permission notice appear in all copies.
  - * 
  - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 
  - * EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR CONTRIBUTORS BE
  - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
  - * POSSIBILITY OF SUCH DAMAGE. */
  +/*
  +**  XDS - OSSP Extensible Data Serialization Library
  +**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**
  +**  This file is part of OSSP XDS, an extensible data serialization
  +**  library which can be found at http://www.ossp.com/pkg/xds/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  xds_engine_xdr.c: XDR encoding/decoding engine
  +*/
   
   #include <string.h>
  +
   #include "xds.h"
   
   int xdr_encode_int32(xds_t * xds, void *engine_context,
  Index: ossp-pkg/srpc/libxds/xds_engine_xml.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xds_engine_xml.c
  --- ossp-pkg/srpc/libxds/xds_engine_xml.c	2001/08/08 19:32:02	1.2
  +++ ossp-pkg/srpc/libxds/xds_engine_xml.c	2001/08/09 19:58:35	1.3
  @@ -1,30 +1,36 @@
  -/* 
  - * XDS - OSSP Extensible Data Serialization Library Copyright (c) 2001 The
  - * OSSP Project (http://www.ossp.org/) Copyright (c) 2001 Cable & Wireless
  - * Deutschland (http://www.cw.com/de/)
  - * 
  - * This file is part of OSSP XDS, an extensible data serialization library
  - * which can be found at http://www.ossp.com/pkg/xds/.
  - * 
  - * Permission to use, copy, modify, and distribute this software for any
  - * purpose with or without fee is hereby granted, provided that the above
  - * copyright notice and this permission notice appear in all copies.
  - * 
  - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 
  - * EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR CONTRIBUTORS BE
  - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
  - * POSSIBILITY OF SUCH DAMAGE. */
  +/*
  +**  XDS - OSSP Extensible Data Serialization Library
  +**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**
  +**  This file is part of OSSP XDS, an extensible data serialization
  +**  library which can be found at http://www.ossp.com/pkg/xds/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  xds_engine_xml.c: XML encoding/decoding engine
  +*/
   
   #include <string.h>
   #include <ctype.h>
   #include <stdio.h>
  +
   #include "xds.h"
   
   static const char xds_xml_begin_text[] =
  Index: ossp-pkg/srpc/libxds/xds_p.h
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xds_p.h
  --- ossp-pkg/srpc/libxds/xds_p.h	2001/08/08 19:33:55	1.3
  +++ ossp-pkg/srpc/libxds/xds_p.h	2001/08/09 19:58:35	1.4
  @@ -24,7 +24,7 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  xds_p.h: internal C API
  +**  xds_p.h: internal library API
   */
   
   #ifndef __XDS_P_H__
  Index: ossp-pkg/srpc/libxds/xds_test.sh
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xds_test.sh
  --- ossp-pkg/srpc/libxds/xds_test.sh	2001/08/08 19:15:23	1.1
  +++ ossp-pkg/srpc/libxds/xds_test.sh	2001/08/09 19:58:35	1.2
  @@ -1,4 +1,32 @@
   #!/bin/sh
  +##
  +##  XDS - OSSP Extensible Data Serialization Library
  +##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  
  +##  This file is part of OSSP XDS, an extensible data serialization
  +##  library which can be found at http://www.ossp.com/pkg/xds/.
  +##  
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##  
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  xds_test.sh: test suite driver script
  +##
   
   if [ $# -lt 1 ]; then
       echo "Usage: $0 test1.t [...]"
  Index: ossp-pkg/srpc/libxds/xds_test_lib.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xds_test_lib.c
  --- ossp-pkg/srpc/libxds/xds_test_lib.c	2001/08/08 19:15:23	1.1
  +++ ossp-pkg/srpc/libxds/xds_test_lib.c	2001/08/09 19:58:35	1.2
  @@ -1,26 +1,31 @@
  -/* 
  - * XDS - OSSP Extensible Data Serialization Library Copyright (c) 2001 The
  - * OSSP Project (http://www.ossp.org/) Copyright (c) 2001 Cable & Wireless
  - * Deutschland (http://www.cw.com/de/)
  - * 
  - * This file is part of OSSP XDS, an extensible data serialization library
  - * which can be found at http://www.ossp.com/pkg/xds/.
  - * 
  - * Permission to use, copy, modify, and distribute this software for any
  - * purpose with or without fee is hereby granted, provided that the above
  - * copyright notice and this permission notice appear in all copies.
  - * 
  - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 
  - * EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR CONTRIBUTORS BE
  - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
  - * POSSIBILITY OF SUCH DAMAGE. */
  +/*
  +**  XDS - OSSP Extensible Data Serialization Library
  +**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**
  +**  This file is part of OSSP XDS, an extensible data serialization
  +**  library which can be found at http://www.ossp.com/pkg/xds/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  xds_test_lib.c: test suite for library framework
  +*/
   
   #include <string.h>
   #include <errno.h>
  Index: ossp-pkg/srpc/libxds/xds_test_xdr.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xds_test_xdr.c
  --- ossp-pkg/srpc/libxds/xds_test_xdr.c	2001/08/08 19:15:23	1.1
  +++ ossp-pkg/srpc/libxds/xds_test_xdr.c	2001/08/09 19:58:35	1.2
  @@ -1,26 +1,31 @@
  -/* 
  - * XDS - OSSP Extensible Data Serialization Library Copyright (c) 2001 The
  - * OSSP Project (http://www.ossp.org/) Copyright (c) 2001 Cable & Wireless
  - * Deutschland (http://www.cw.com/de/)
  - * 
  - * This file is part of OSSP XDS, an extensible data serialization library
  - * which can be found at http://www.ossp.com/pkg/xds/.
  - * 
  - * Permission to use, copy, modify, and distribute this software for any
  - * purpose with or without fee is hereby granted, provided that the above
  - * copyright notice and this permission notice appear in all copies.
  - * 
  - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 
  - * EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR CONTRIBUTORS BE
  - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
  - * POSSIBILITY OF SUCH DAMAGE. */
  +/*
  +**  XDS - OSSP Extensible Data Serialization Library
  +**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**
  +**  This file is part of OSSP XDS, an extensible data serialization
  +**  library which can be found at http://www.ossp.com/pkg/xds/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  xds_test_xdr.c: test suite for XDR encodig/decoding engine
  +*/
   
   #include <stdio.h>
   #include <string.h>
  Index: ossp-pkg/srpc/libxds/xds_test_xml.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xds_test_xml.c
  --- ossp-pkg/srpc/libxds/xds_test_xml.c	2001/08/08 19:15:23	1.1
  +++ ossp-pkg/srpc/libxds/xds_test_xml.c	2001/08/09 19:58:35	1.2
  @@ -1,26 +1,31 @@
  -/* 
  - * XDS - OSSP Extensible Data Serialization Library Copyright (c) 2001 The
  - * OSSP Project (http://www.ossp.org/) Copyright (c) 2001 Cable & Wireless
  - * Deutschland (http://www.cw.com/de/)
  - * 
  - * This file is part of OSSP XDS, an extensible data serialization library
  - * which can be found at http://www.ossp.com/pkg/xds/.
  - * 
  - * Permission to use, copy, modify, and distribute this software for any
  - * purpose with or without fee is hereby granted, provided that the above
  - * copyright notice and this permission notice appear in all copies.
  - * 
  - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 
  - * EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR CONTRIBUTORS BE
  - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
  - * POSSIBILITY OF SUCH DAMAGE. */
  +/*
  +**  XDS - OSSP Extensible Data Serialization Library
  +**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**
  +**  This file is part of OSSP XDS, an extensible data serialization
  +**  library which can be found at http://www.ossp.com/pkg/xds/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  xds_test_xml.c: test suite for XML encodig/decoding engine
  +*/
   
   #include <stdio.h>
   #include <string.h>

From ossp-cvs-owner@ossp.org  Thu Aug  9 22:59:07 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f79Kx6549418; Thu, 9 Aug 2001 22:59:06 +0200 (CEST)
Date: Thu, 9 Aug 2001 22:59:06 +0200 (CEST)
Message-Id: <200108092059.f79Kx6549418@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xds.c xds_engine_xdr.c xds_engine_xml...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Aug-2001 22:59:06
  Branch: HEAD                             Handle: 2001080921590500

  Modified files:
    ossp-pkg/srpc/libxds    xds.c xds_engine_xdr.c xds_engine_xml.c
                            xds_test_lib.c xds_test_xdr.c xds_test_xml.c

  Log:
    Final adjustments to coding style in order to make OSSP XDS look equal
    in style to all other OSSP parts. This should remove most of the
    strangeness GNU indent usually introduces.

  Summary:
    Revision    Changes     Path
    1.4         +55 -64     ossp-pkg/srpc/libxds/xds.c
    1.3         +128 -168   ossp-pkg/srpc/libxds/xds_engine_xdr.c
    1.4         +122 -172   ossp-pkg/srpc/libxds/xds_engine_xml.c
    1.3         +65 -147    ossp-pkg/srpc/libxds/xds_test_lib.c
    1.3         +24 -52     ossp-pkg/srpc/libxds/xds_test_xdr.c
    1.3         +14 -29     ossp-pkg/srpc/libxds/xds_test_xml.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xds.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xds.c
  --- ossp-pkg/srpc/libxds/xds.c	2001/08/09 19:58:35	1.3
  +++ ossp-pkg/srpc/libxds/xds.c	2001/08/09 20:59:05	1.4
  @@ -45,9 +45,8 @@
       }
   
       /* Allocate context structure. */
  -    ctx = malloc(sizeof (struct xds_context));
  -    if (ctx == NULL)
  -        return NULL; /* errno is set by calloc() */
  +    if ((ctx = malloc(sizeof (struct xds_context))) == NULL)
  +        return NULL; /* errno set by malloc(3) */
   
       /* Set mode of operation in context. */
       ctx->mode = mode;
  @@ -68,7 +67,9 @@
   
   void xds_destroy(xds_t *xds)
   {
  -    /* Sanity checks. */
  +    size_t i;
  +
  +    /* Sanity check parameter. */
       assert(xds != NULL);
       if (xds == NULL)
           return;
  @@ -78,25 +79,23 @@
              || (xds->buffer_capacity == 0 && xds->buffer_len == 0));
       if (xds->buffer != NULL && xds->we_own_buffer)
           free(xds->buffer);
  -
       assert(xds->engines != NULL || xds->engines_capacity == 0);
       if (xds->engines != NULL) {
  -        size_t i;
  -        for (i = 0; i < xds->engines_len; ++i) {
  +        for (i = 0; i < xds->engines_len; i++) {
               assert(xds->engines[i].name != NULL);
               free(xds->engines[i].name);
           }
           free(xds->engines);
       }
  -
       free(xds);
  +
       return;
   }
   
   int xds_setbuffer(xds_t *xds, xds_scope_t flag, void *buffer,
                     size_t buffer_len)
   {
  -    /* Sanity checks. */
  +    /* Sanity check parameters. */
       xds_check_parameter(xds != NULL);
       xds_check_parameter(flag == XDS_GIFT || flag == XDS_LOAN);
       xds_check_parameter((buffer != NULL && buffer_len != 0)
  @@ -127,8 +126,7 @@
   int xds_getbuffer(xds_t *xds, xds_scope_t flag, void **buffer,
                     size_t *buffer_len)
   {
  -    /* Sanity checks. */
  -
  +    /* Sanity check parameters. */
       xds_check_parameter(xds != NULL);
       xds_check_parameter(flag == XDS_GIFT || flag == XDS_LOAN);
       xds_check_parameter(buffer != NULL);
  @@ -139,7 +137,8 @@
       *buffer_len = xds->buffer_len;
       if (flag == XDS_GIFT) {
           xds->buffer = NULL;
  -        xds->buffer_capacity = xds->buffer_len = 0;
  +        xds->buffer_capacity = 0;
  +        xds->buffer_len = 0;
       }
       else
           xds->buffer_len = 0;
  @@ -148,8 +147,8 @@
   }
   
   static int xds_set_capacity(void **array, size_t *array_capacity,
  -                     size_t new_capacity, size_t elem_size,
  -                     size_t initial_capacity)
  +                            size_t new_capacity, size_t elem_size,
  +                            size_t initial_capacity)
   {
       void *buf;
       size_t size;
  @@ -165,13 +164,12 @@
           return XDS_OK;
   
       /* Find the correct capacity. */
  -    size = (*array_capacity != 0) ? *array_capacity * 2 : initial_capacity; 
  +    size = (*array_capacity != 0) ? (*array_capacity * 2) : initial_capacity; 
       while (size < new_capacity)
           size *= 2;
   
       /* Allocate the array and store the new values. */
  -    buf = realloc(*array, size * elem_size);
  -    if (buf == NULL)
  +    if ((buf = realloc(*array, size * elem_size)) == NULL)
           return XDS_ERR_NO_MEM;
       *array = buf;
       *array_capacity = size;
  @@ -190,7 +188,7 @@
       xds_check_parameter(pos != NULL);
   
       /* Use binary search to find "name" in "engines". */
  -    for (first = 0; (last - first) > 0;) {
  +    for (first = 0; (last - first) > 0; ) {
           size_t half = first + ((last - first) / 2);
           int rc = strcmp(engines[half].name, name);
           if (rc < 0)
  @@ -203,8 +201,8 @@
               last = half;
           assert(first <= last);
       }
  -
       *pos = first;
  +
       return XDS_FALSE;
   }
   
  @@ -244,12 +242,12 @@
               return rc;
           memmove(&xds->engines[pos + 1], &xds->engines[pos],
                   (xds->engines_len - pos) * sizeof (engine_map_t));
  -        ++xds->engines_len;
  +        xds->engines_len++;
       }
   
       /* Insert entry. */
  -    xds->engines[pos].name = (char *)name;
  -    xds->engines[pos].engine = engine;
  +    xds->engines[pos].name    = (char *)name;
  +    xds->engines[pos].engine  = engine;
       xds->engines[pos].context = engine_context;
   
       /* Everything is fine. */
  @@ -264,7 +262,7 @@
       /* Sanity checks. */
       xds_check_parameter(xds != NULL);
       xds_check_parameter(name != NULL);
  -    for (pos = 0; name[pos] != '\0'; ++pos) {
  +    for (pos = 0; name[pos] != '\0'; pos++) {
           if (!isalnum((int)name[pos]) && name[pos] != '-' && name[pos] != '_')
               return XDS_ERR_INVALID_ARG;
       }
  @@ -279,13 +277,11 @@
       free(xds->engines[pos].name);
       memmove(&xds->engines[pos], &xds->engines[pos + 1],
               (xds->engines_len - (pos + 1)) * sizeof (engine_map_t));
  -    --xds->engines_len;
  +    xds->engines_len--;
   
       /* Lower capacity if necessary. */
  -    rc = xds_set_capacity((void **)&xds->engines,
  -                          &xds->engines_capacity,
  -                          xds->engines_len,
  -                          sizeof (engine_map_t),
  +    rc = xds_set_capacity((void **)&xds->engines, &xds->engines_capacity,
  +                          xds->engines_len, sizeof (engine_map_t),
                             XDS_INITIAL_ENGINES_CAPACITY);
       assert(rc == XDS_OK || rc == XDS_ERR_NO_MEM);
       if (rc != XDS_OK)
  @@ -298,6 +294,7 @@
   {
       int rc;
       va_list args;
  +
       va_start(args, fmt);
       rc = xds_vencode(xds, fmt, args);
       va_end(args);
  @@ -321,11 +318,11 @@
           return XDS_ERR_INVALID_MODE;
   
       /* Ensure we have a buffer allocated ready for use. */
  -    if (xds->buffer == NULL) {         /* allocate a new buffer */
  -        rc = xds_set_capacity((void **)&xds->buffer,
  -                              &xds->buffer_capacity,
  -                              XDS_INITIAL_BUFFER_CAPACITY,
  -                              sizeof (char), XDS_INITIAL_BUFFER_CAPACITY);
  +    if (xds->buffer == NULL) { 
  +        /* allocate a new buffer */
  +        rc = xds_set_capacity((void **)&xds->buffer, &xds->buffer_capacity,
  +                              XDS_INITIAL_BUFFER_CAPACITY, sizeof (char), 
  +                              XDS_INITIAL_BUFFER_CAPACITY);
           assert(rc == XDS_OK || rc == XDS_ERR_NO_MEM);
           if (rc != XDS_OK)
               return rc;
  @@ -333,16 +330,15 @@
           xds->we_own_buffer = XDS_TRUE;
       }
   
  -    /* Iterate through the items in the format string and execute the
  -       apropriate engines. */
  +    /* Iterate through items in format string and execute apropriate engines. */
       fmt = p = strdup(fmt_arg);
       if (fmt == NULL)
           return XDS_ERR_NO_MEM;
       buffer_len_backup = xds->buffer_len;
       for (name = p; *p != '\0'; name = p) {
           while (isalnum((int)*p) || *p == '-' || *p == '_')
  -            ++p;
  -        if (*p)
  +            p++;
  +        if (*p != '\0')
               *p++ = '\0';
           else
               *p = '\0';
  @@ -352,8 +348,8 @@
               size_t used_buffer_size;
               size_t pos;
   
  -            if (xds_find_engine(xds->engines, xds->engines_len, name, &pos) ==
  -                XDS_FALSE) {
  +            if (xds_find_engine(xds->engines, xds->engines_len, name, &pos) 
  +                == XDS_FALSE) {
                   rc = XDS_ERR_UNKNOWN_ENGINE;
                   goto leave;
               }
  @@ -365,8 +361,7 @@
                       if (xds->we_own_buffer) {
                           rc = xds_set_capacity((void **)&xds->buffer,
                                                 &xds->buffer_capacity,
  -                                              xds->buffer_len + 1,
  -                                              sizeof (char),
  +                                              xds->buffer_len + 1, sizeof (char),
                                                 XDS_INITIAL_BUFFER_CAPACITY);
                           assert(rc == XDS_OK || rc == XDS_ERR_NO_MEM);
                           if (rc != XDS_OK)
  @@ -381,13 +376,11 @@
                   /* Execute the engine. */
                   used_buffer_size = 0;
                   args_backup = args;
  -                rc = (*xds->engines[pos].engine)(xds,
  -                                                 xds->engines[pos].context,
  -                                                 xds->buffer +
  -                                                 xds->buffer_len,
  -                                                 xds->buffer_capacity -
  -                                                 xds->buffer_len,
  -                                                 &used_buffer_size, &args);
  +                rc = (*xds->engines[pos].engine)(
  +                         xds, xds->engines[pos].context,
  +                         xds->buffer + xds->buffer_len,
  +                         xds->buffer_capacity - xds->buffer_len,
  +                         &used_buffer_size, &args);
                   assert(rc <= 0);
                   if (rc == XDS_OK) {
                       restart_engine = XDS_FALSE;
  @@ -400,13 +393,11 @@
                       restart_engine = XDS_TRUE;
                       args = args_backup;
   
  -                    rc = xds_set_capacity((void **)&xds->buffer,
  -                                          &xds->buffer_capacity,
  -                                          xds->buffer_capacity +
  -                                          ((used_buffer_size ==
  -                                            0) ? 1 : used_buffer_size),
  -                                          sizeof (char),
  -                                          XDS_INITIAL_BUFFER_CAPACITY);
  +                    rc = xds_set_capacity(
  +                            (void **)&xds->buffer, &xds->buffer_capacity,
  +                            xds->buffer_capacity +
  +                            ((used_buffer_size == 0) ? 1 : used_buffer_size),
  +                            sizeof (char), XDS_INITIAL_BUFFER_CAPACITY);
                       assert(rc == XDS_OK || rc == XDS_ERR_NO_MEM);
                       if (rc != XDS_OK)
                           goto leave;
  @@ -431,6 +422,7 @@
   {
       int rc;
       va_list args;
  +
       va_start(args, fmt);
       rc = xds_vdecode(xds, fmt, args);
       va_end(args);
  @@ -464,8 +456,8 @@
       buffer_len_backup = xds->buffer_len;
       for (name = p; *p != '\0'; name = p) {
           while (isalnum((int)*p) || *p == '-' || *p == '_')
  -            ++p;
  -        if (*p)
  +            p++;
  +        if (*p != '\0')
               *p++ = '\0';
           else
               *p = '\0';
  @@ -473,14 +465,13 @@
           if (strlen(name) > 0) {
               size_t pos;
               size_t used_buffer_size = 0;
  +
               if (xds_find_engine(xds->engines, xds->engines_len, name, &pos)) {
  -                rc = (*xds->engines[pos].engine)(xds,
  -                                                 xds->engines[pos].context,
  -                                                 xds->buffer +
  -                                                 xds->buffer_len,
  -                                                 xds->buffer_capacity -
  -                                                 xds->buffer_len,
  -                                                 &used_buffer_size, &args);
  +                rc = (*xds->engines[pos].engine)(
  +                         xds, xds->engines[pos].context,
  +                         xds->buffer + xds->buffer_len,
  +                         xds->buffer_capacity - xds->buffer_len,
  +                         &used_buffer_size, &args);
                   assert(rc <= 0);
                   if (rc == XDS_OK)
                       xds->buffer_len += used_buffer_size;
  Index: ossp-pkg/srpc/libxds/xds_engine_xdr.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xds_engine_xdr.c
  --- ossp-pkg/srpc/libxds/xds_engine_xdr.c	2001/08/09 19:58:35	1.2
  +++ ossp-pkg/srpc/libxds/xds_engine_xdr.c	2001/08/09 20:59:05	1.3
  @@ -31,9 +31,9 @@
   
   #include "xds.h"
   
  -int xdr_encode_int32(xds_t * xds, void *engine_context,
  +int xdr_encode_int32(xds_t *xds, void *engine_context,
                        void *buffer, size_t buffer_size,
  -                     size_t * used_buffer_size, va_list * args)
  +                     size_t *used_buffer_size, va_list *args)
   {
       xds_uint32_t tmp;
       xds_int32_t value;
  @@ -41,7 +41,6 @@
       xds_init_encoding_engine(4);
   
       /* Get value and format it into the buffer. */
  -
       value = va_arg(*args, xds_uint32_t);
       if (value < 0) {
           value = 0 - value;
  @@ -49,19 +48,17 @@
       }
       else
           tmp = (xds_uint32_t) value;
  -    ((xds_uint8_t *) buffer)[0] = (tmp >> 24) & 0x000000ff;
  -    ((xds_uint8_t *) buffer)[1] = (tmp >> 16) & 0x000000ff;
  -    ((xds_uint8_t *) buffer)[2] = (tmp >> 8) & 0x000000ff;
  -    ((xds_uint8_t *) buffer)[3] = (tmp >> 0) & 0x000000ff;
  -
  -    /* Done. */
  +    ((xds_uint8_t *)buffer)[0] = (tmp >> 24) & 0x000000ff;
  +    ((xds_uint8_t *)buffer)[1] = (tmp >> 16) & 0x000000ff;
  +    ((xds_uint8_t *)buffer)[2] = (tmp >>  8) & 0x000000ff;
  +    ((xds_uint8_t *)buffer)[3] = (tmp >>  0) & 0x000000ff;
   
       return XDS_OK;
   }
   
  -int xdr_decode_int32(xds_t * xds, void *engine_context,
  +int xdr_decode_int32(xds_t *xds, void *engine_context,
                        void *buffer, size_t buffer_size,
  -                     size_t * used_buffer_size, va_list * args)
  +                     size_t *used_buffer_size, va_list *args)
   {
       xds_int32_t *value;
       xds_uint32_t tmp;
  @@ -69,88 +66,81 @@
       xds_init_decoding_engine(4);
   
       /* Get value and format it into the buffer. */
  -
       value = va_arg(*args, xds_int32_t *);
       xds_check_parameter(value != NULL);
   
  -    if (((xds_uint8_t *) buffer)[0] & 0x80) {   /* negative number */
  -        tmp = ((xds_uint8_t *) buffer)[0];
  +    if (((xds_uint8_t *) buffer)[0] & 0x80) {   
  +        /* negative number */
  +        tmp =  ((xds_uint8_t *)buffer)[0];
           tmp = tmp << 8;
  -        tmp += ((xds_uint8_t *) buffer)[1];
  +        tmp += ((xds_uint8_t *)buffer)[1];
           tmp = tmp << 8;
  -        tmp += ((xds_uint8_t *) buffer)[2];
  +        tmp += ((xds_uint8_t *)buffer)[2];
           tmp = tmp << 8;
  -        tmp += ((xds_uint8_t *) buffer)[3];
  +        tmp += ((xds_uint8_t *)buffer)[3];
           tmp = 0 - tmp;
  -        *value = 0 - (int32_t) tmp;
  +        *value = 0 - (int32_t)tmp;
       }
  -    else {                             /* positive number */
  -        *value = ((xds_uint8_t *) buffer)[0];
  +    else {                             
  +        /* positive number */
  +        *value =  ((xds_uint8_t *)buffer)[0];
           *value = *value << 8;
  -        *value += ((xds_uint8_t *) buffer)[1];
  +        *value += ((xds_uint8_t *)buffer)[1];
           *value = *value << 8;
  -        *value += ((xds_uint8_t *) buffer)[2];
  +        *value += ((xds_uint8_t *)buffer)[2];
           *value = *value << 8;
  -        *value += ((xds_uint8_t *) buffer)[3];
  +        *value += ((xds_uint8_t *)buffer)[3];
       }
   
  -    /* Done. */
  -
       return XDS_OK;
   }
   
  -int xdr_encode_uint32(xds_t * xds, void *engine_context,
  +int xdr_encode_uint32(xds_t *xds, void *engine_context,
                         void *buffer, size_t buffer_size,
  -                      size_t * used_buffer_size, va_list * args)
  +                      size_t *used_buffer_size, va_list *args)
   {
       xds_uint32_t value;
   
       xds_init_encoding_engine(4);
   
       /* Get value and format it into the buffer. */
  -
       value = va_arg(*args, xds_uint32_t);
  -    ((xds_uint8_t *) buffer)[0] = (value >> 24) & 0x000000ff;
  -    ((xds_uint8_t *) buffer)[1] = (value >> 16) & 0x000000ff;
  -    ((xds_uint8_t *) buffer)[2] = (value >> 8) & 0x000000ff;
  -    ((xds_uint8_t *) buffer)[3] = (value >> 0) & 0x000000ff;
  +    ((xds_uint8_t *)buffer)[0] = (value >> 24) & 0x000000ff;
  +    ((xds_uint8_t *)buffer)[1] = (value >> 16) & 0x000000ff;
  +    ((xds_uint8_t *)buffer)[2] = (value >>  8) & 0x000000ff;
  +    ((xds_uint8_t *)buffer)[3] = (value >>  0) & 0x000000ff;
   
  -    /* Done. */
  -
       return XDS_OK;
   }
   
  -int xdr_decode_uint32(xds_t * xds, void *engine_context,
  +int xdr_decode_uint32(xds_t *xds, void *engine_context,
                         void *buffer, size_t buffer_size,
  -                      size_t * used_buffer_size, va_list * args)
  +                      size_t *used_buffer_size, va_list *args)
   {
       xds_uint32_t *value;
   
       xds_init_decoding_engine(4);
   
       /* Get value and format it into the buffer. */
  -
       value = va_arg(*args, xds_uint32_t *);
       xds_check_parameter(value != NULL);
   
  -    *value = ((xds_uint8_t *) buffer)[0];
  +    *value =  ((xds_uint8_t *)buffer)[0];
       *value = *value << 8;
  -    *value += ((xds_uint8_t *) buffer)[1];
  +    *value += ((xds_uint8_t *)buffer)[1];
       *value = *value << 8;
  -    *value += ((xds_uint8_t *) buffer)[2];
  +    *value += ((xds_uint8_t *)buffer)[2];
       *value = *value << 8;
  -    *value += ((xds_uint8_t *) buffer)[3];
  -
  -    /* Done. */
  +    *value += ((xds_uint8_t *)buffer)[3];
   
       return XDS_OK;
   }
   
   #ifdef XDS_HAVE_64_BIT_SUPPORT
   
  -int xdr_encode_int64(xds_t * xds, void *engine_context,
  +int xdr_encode_int64(xds_t *xds, void *engine_context,
                        void *buffer, size_t buffer_size,
  -                     size_t * used_buffer_size, va_list * args)
  +                     size_t *used_buffer_size, va_list *args)
   {
       xds_uint64_t tmp;
       xds_int64_t value;
  @@ -158,31 +148,28 @@
       xds_init_encoding_engine(8);
   
       /* Get value and format it into the buffer. */
  -
       value = va_arg(*args, xds_uint64_t);
       if (value < 0) {
           value = 0 - value;
  -        tmp = 0 - (xds_uint64_t) value;
  +        tmp = 0 - (xds_uint64_t)value;
       }
       else
  -        tmp = (xds_uint64_t) value;
  -    ((xds_uint8_t *) buffer)[0] = (tmp >> 56) & 0x000000ff;
  -    ((xds_uint8_t *) buffer)[1] = (tmp >> 48) & 0x000000ff;
  -    ((xds_uint8_t *) buffer)[2] = (tmp >> 40) & 0x000000ff;
  -    ((xds_uint8_t *) buffer)[3] = (tmp >> 32) & 0x000000ff;
  -    ((xds_uint8_t *) buffer)[4] = (tmp >> 24) & 0x000000ff;
  -    ((xds_uint8_t *) buffer)[5] = (tmp >> 16) & 0x000000ff;
  -    ((xds_uint8_t *) buffer)[6] = (tmp >> 8) & 0x000000ff;
  -    ((xds_uint8_t *) buffer)[7] = (tmp >> 0) & 0x000000ff;
  -
  -    /* Done. */
  +        tmp = (xds_uint64_t)value;
  +    ((xds_uint8_t *)buffer)[0] = (tmp >> 56) & 0x000000ff;
  +    ((xds_uint8_t *)buffer)[1] = (tmp >> 48) & 0x000000ff;
  +    ((xds_uint8_t *)buffer)[2] = (tmp >> 40) & 0x000000ff;
  +    ((xds_uint8_t *)buffer)[3] = (tmp >> 32) & 0x000000ff;
  +    ((xds_uint8_t *)buffer)[4] = (tmp >> 24) & 0x000000ff;
  +    ((xds_uint8_t *)buffer)[5] = (tmp >> 16) & 0x000000ff;
  +    ((xds_uint8_t *)buffer)[6] = (tmp >>  8) & 0x000000ff;
  +    ((xds_uint8_t *)buffer)[7] = (tmp >>  0) & 0x000000ff;
   
       return XDS_OK;
   }
   
  -int xdr_decode_int64(xds_t * xds, void *engine_context,
  +int xdr_decode_int64(xds_t *xds, void *engine_context,
                        void *buffer, size_t buffer_size,
  -                     size_t * used_buffer_size, va_list * args)
  +                     size_t *used_buffer_size, va_list *args)
   {
       xds_int64_t *value;
       xds_uint64_t tmp;
  @@ -190,130 +177,125 @@
       xds_init_decoding_engine(8);
   
       /* Get value and format it into the buffer. */
  -
       value = va_arg(*args, xds_int64_t *);
       xds_check_parameter(value != NULL);
   
  -    if (((xds_uint8_t *) buffer)[0] & 0x80) {   /* negative number */
  -        tmp = ((xds_uint8_t *) buffer)[0];
  +    if (((xds_uint8_t *)buffer)[0] & 0x80) {  
  +        /* negative number */
  +        tmp =  ((xds_uint8_t *)buffer)[0];
           tmp = tmp << 8;
  -        tmp += ((xds_uint8_t *) buffer)[1];
  +        tmp += ((xds_uint8_t *)buffer)[1];
           tmp = tmp << 8;
  -        tmp += ((xds_uint8_t *) buffer)[2];
  +        tmp += ((xds_uint8_t *)buffer)[2];
           tmp = tmp << 8;
  -        tmp += ((xds_uint8_t *) buffer)[3];
  +        tmp += ((xds_uint8_t *)buffer)[3];
           tmp = tmp << 8;
  -        tmp += ((xds_uint8_t *) buffer)[4];
  +        tmp += ((xds_uint8_t *)buffer)[4];
           tmp = tmp << 8;
  -        tmp += ((xds_uint8_t *) buffer)[5];
  +        tmp += ((xds_uint8_t *)buffer)[5];
           tmp = tmp << 8;
  -        tmp += ((xds_uint8_t *) buffer)[6];
  +        tmp += ((xds_uint8_t *)buffer)[6];
           tmp = tmp << 8;
  -        tmp += ((xds_uint8_t *) buffer)[7];
  +        tmp += ((xds_uint8_t *)buffer)[7];
           tmp = 0 - tmp;
  -        *value = 0 - (xds_int64_t) tmp;
  +        *value = 0 - (xds_int64_t)tmp;
       }
  -    else {                             /* positive number */
  -        *value = ((xds_uint8_t *) buffer)[0];
  +    else {
  +        /* positive number */
  +        *value =  ((xds_uint8_t *)buffer)[0];
           *value = *value << 8;
  -        *value += ((xds_uint8_t *) buffer)[1];
  +        *value += ((xds_uint8_t *)buffer)[1];
           *value = *value << 8;
  -        *value += ((xds_uint8_t *) buffer)[2];
  +        *value += ((xds_uint8_t *)buffer)[2];
           *value = *value << 8;
  -        *value += ((xds_uint8_t *) buffer)[3];
  +        *value += ((xds_uint8_t *)buffer)[3];
           *value = *value << 8;
  -        *value += ((xds_uint8_t *) buffer)[4];
  +        *value += ((xds_uint8_t *)buffer)[4];
           *value = *value << 8;
  -        *value += ((xds_uint8_t *) buffer)[5];
  +        *value += ((xds_uint8_t *)buffer)[5];
           *value = *value << 8;
  -        *value += ((xds_uint8_t *) buffer)[6];
  +        *value += ((xds_uint8_t *)buffer)[6];
           *value = *value << 8;
  -        *value += ((xds_uint8_t *) buffer)[7];
  +        *value += ((xds_uint8_t *)buffer)[7];
       }
   
  -    /* Done. */
  -
       return XDS_OK;
   }
   
  -int xdr_encode_uint64(xds_t * xds, void *engine_context,
  +int xdr_encode_uint64(xds_t *xds, void *engine_context,
                         void *buffer, size_t buffer_size,
  -                      size_t * used_buffer_size, va_list * args)
  +                      size_t *used_buffer_size, va_list *args)
   {
       xds_uint64_t value;
   
       xds_init_encoding_engine(8);
   
       /* Get value and format it into the buffer. */
  -
       value = va_arg(*args, xds_uint64_t);
  -    ((xds_uint8_t *) buffer)[0] = (value >> 56) & 0x000000ff;
  -    ((xds_uint8_t *) buffer)[1] = (value >> 48) & 0x000000ff;
  -    ((xds_uint8_t *) buffer)[2] = (value >> 40) & 0x000000ff;
  -    ((xds_uint8_t *) buffer)[3] = (value >> 32) & 0x000000ff;
  -    ((xds_uint8_t *) buffer)[4] = (value >> 24) & 0x000000ff;
  -    ((xds_uint8_t *) buffer)[5] = (value >> 16) & 0x000000ff;
  -    ((xds_uint8_t *) buffer)[6] = (value >> 8) & 0x000000ff;
  -    ((xds_uint8_t *) buffer)[7] = (value >> 0) & 0x000000ff;
  +    ((xds_uint8_t *)buffer)[0] = (value >> 56) & 0x000000ff;
  +    ((xds_uint8_t *)buffer)[1] = (value >> 48) & 0x000000ff;
  +    ((xds_uint8_t *)buffer)[2] = (value >> 40) & 0x000000ff;
  +    ((xds_uint8_t *)buffer)[3] = (value >> 32) & 0x000000ff;
  +    ((xds_uint8_t *)buffer)[4] = (value >> 24) & 0x000000ff;
  +    ((xds_uint8_t *)buffer)[5] = (value >> 16) & 0x000000ff;
  +    ((xds_uint8_t *)buffer)[6] = (value >>  8) & 0x000000ff;
  +    ((xds_uint8_t *)buffer)[7] = (value >>  0) & 0x000000ff;
   
  -    /* Done. */
  -
       return XDS_OK;
   }
   
  -int xdr_decode_uint64(xds_t * xds, void *engine_context,
  +int xdr_decode_uint64(xds_t *xds, void *engine_context,
                         void *buffer, size_t buffer_size,
  -                      size_t * used_buffer_size, va_list * args)
  +                      size_t *used_buffer_size, va_list *args)
   {
       xds_uint64_t *value;
   
       xds_init_decoding_engine(8);
   
       /* Get value and format it into the buffer. */
  -
       value = va_arg(*args, xds_uint64_t *);
       xds_check_parameter(value != NULL);
   
  -    *value = ((xds_uint8_t *) buffer)[0];
  +    *value =  ((xds_uint8_t *)buffer)[0];
       *value = *value << 8;
  -    *value += ((xds_uint8_t *) buffer)[1];
  +    *value += ((xds_uint8_t *)buffer)[1];
       *value = *value << 8;
  -    *value += ((xds_uint8_t *) buffer)[2];
  +    *value += ((xds_uint8_t *)buffer)[2];
       *value = *value << 8;
  -    *value += ((xds_uint8_t *) buffer)[3];
  +    *value += ((xds_uint8_t *)buffer)[3];
       *value = *value << 8;
  -    *value += ((xds_uint8_t *) buffer)[4];
  +    *value += ((xds_uint8_t *)buffer)[4];
       *value = *value << 8;
  -    *value += ((xds_uint8_t *) buffer)[5];
  +    *value += ((xds_uint8_t *)buffer)[5];
       *value = *value << 8;
  -    *value += ((xds_uint8_t *) buffer)[6];
  +    *value += ((xds_uint8_t *)buffer)[6];
       *value = *value << 8;
  -    *value += ((xds_uint8_t *) buffer)[7];
  +    *value += ((xds_uint8_t *)buffer)[7];
   
  -    /* Done. */
  -
       return XDS_OK;
   }
   
   #endif /* XDS_HAVE_64_BIT_SUPPORT */
   
  -int xdr_encode_double(xds_t * xds, void *engine_context,
  +int xdr_encode_double(xds_t *xds, void *engine_context,
                         void *buffer, size_t buffer_size,
  -                      size_t * used_buffer_size, va_list * args)
  +                      size_t *used_buffer_size, va_list *args)
   {
  +    /* XXX */
       return -1;
   }
   
  -int xdr_decode_double(xds_t * xds, void *engine_context,
  +int xdr_decode_double(xds_t *xds, void *engine_context,
                         void *buffer, size_t buffer_size,
  -                      size_t * used_buffer_size, va_list * args)
  +                      size_t *used_buffer_size, va_list *args)
   {
  +    /* XXX */
       return -1;
   }
   
  -int xdr_encode_string(xds_t * xds, void *engine_context,
  +int xdr_encode_string(xds_t *xds, void *engine_context,
                         void *buffer, size_t buffer_size,
  -                      size_t * used_buffer_size, va_list * args)
  +                      size_t *used_buffer_size, va_list *args)
   {
       char *p;
       size_t p_len;
  @@ -322,7 +304,6 @@
       xds_init_encoding_engine(4);
   
       /* Get value from stack and calculate the correct amount of padding. */
  -
       p = va_arg(*args, char *);
       xds_check_parameter(p != NULL);
       p_len = strlen(p);
  @@ -330,29 +311,25 @@
       assert((p_len + padding) % 4 == 0);
   
       /* We need (4 + p_len + padding) bytes in the buffer to format our
  -     * parameter. If we don't have them, return an underflow error. */
  -
  +       parameter. If we don't have them, return an underflow error. */
       *used_buffer_size = 4 + p_len + padding;
       if (buffer_size < *used_buffer_size)
           return XDS_ERR_OVERFLOW;
   
       /* Format the values into the buffer. */
  +    ((xds_uint8_t *)buffer)[0] = (p_len >> 24) & 0x000000ff;
  +    ((xds_uint8_t *)buffer)[1] = (p_len >> 16) & 0x000000ff;
  +    ((xds_uint8_t *)buffer)[2] = (p_len >>  8) & 0x000000ff;
  +    ((xds_uint8_t *)buffer)[3] = (p_len >>  0) & 0x000000ff;
  +    memmove((xds_uint8_t *)buffer + 4, p, p_len);
  +    memset((xds_uint8_t *)buffer + 4 + p_len, 0, padding);
   
  -    ((xds_uint8_t *) buffer)[0] = (p_len >> 24) & 0x000000ff;
  -    ((xds_uint8_t *) buffer)[1] = (p_len >> 16) & 0x000000ff;
  -    ((xds_uint8_t *) buffer)[2] = (p_len >> 8) & 0x000000ff;
  -    ((xds_uint8_t *) buffer)[3] = (p_len >> 0) & 0x000000ff;
  -    memmove((xds_uint8_t *) buffer + 4, p, p_len);
  -    memset((xds_uint8_t *) buffer + 4 + p_len, 0, padding);
  -
  -    /* Done. */
  -
       return XDS_OK;
   }
   
  -int xdr_decode_string(xds_t * xds, void *engine_context,
  +int xdr_decode_string(xds_t *xds, void *engine_context,
                         void *buffer, size_t buffer_size,
  -                      size_t * used_buffer_size, va_list * args)
  +                      size_t *used_buffer_size, va_list *args)
   {
       char **p;
       size_t p_len;
  @@ -360,48 +337,42 @@
   
       xds_init_decoding_engine(4);
   
  +    /* Get value. */
       p = va_arg(*args, char **);
       xds_check_parameter(p != NULL);
   
       /* Read the size of the message. */
  -
  -    p_len = ((xds_uint8_t *) buffer)[0];
  +    p_len =  ((xds_uint8_t *)buffer)[0];
       p_len = p_len << 8;
  -    p_len += ((xds_uint8_t *) buffer)[1];
  +    p_len += ((xds_uint8_t *)buffer)[1];
       p_len = p_len << 8;
  -    p_len += ((xds_uint8_t *) buffer)[2];
  +    p_len += ((xds_uint8_t *)buffer)[2];
       p_len = p_len << 8;
  -    p_len += ((xds_uint8_t *) buffer)[3];
  +    p_len += ((xds_uint8_t *)buffer)[3];
   
       /* Calculate padding. */
  -
       padding = (4 - (p_len & 0x03)) & 0x03;
  -
  -    /* Do we have enough data?. */
   
  +    /* Do we have enough data? */
       *used_buffer_size = 4 + p_len + padding;
       if (buffer_size < *used_buffer_size)
           return XDS_ERR_UNDERFLOW;
   
       /* Allocate buffer for the data. */
  -
       *p = (char *)malloc(p_len + 1);
       if (*p == NULL)
           return XDS_ERR_NO_MEM;
   
       /* Copy data into the buffer. */
  -
  -    memmove(*p, (xds_uint8_t *) buffer + 4, p_len);
  -    ((xds_uint8_t *) buffer)[4 + p_len] = '\0';
  -
  -    /* Done. */
  +    memmove(*p, (xds_uint8_t *)buffer + 4, p_len);
  +    ((xds_uint8_t *)buffer)[4 + p_len] = '\0';
   
       return XDS_OK;
   }
   
  -int xdr_encode_octetstream(xds_t * xds, void *engine_context,
  +int xdr_encode_octetstream(xds_t *xds, void *engine_context,
                              void *buffer, size_t buffer_size,
  -                           size_t * used_buffer_size, va_list * args)
  +                           size_t *used_buffer_size, va_list *args)
   {
       xds_uint8_t *p;
       size_t p_len;
  @@ -410,7 +381,6 @@
       xds_init_encoding_engine(4);
   
       /* Get value from stack and calculate the correct amount of padding. */
  -
       p = (xds_uint8_t *) va_arg(*args, void *);
       xds_check_parameter(p != NULL);
       p_len = va_arg(*args, size_t);
  @@ -418,29 +388,25 @@
       assert((p_len + padding) % 4 == 0);
   
       /* We need (4 + p_len + padding) bytes in the buffer to format our
  -     * parameter. If we don't have them, return an underflow error. */
  -
  +       parameter. If we don't have them, return an underflow error. */
       *used_buffer_size = 4 + p_len + padding;
       if (buffer_size < *used_buffer_size)
           return XDS_ERR_OVERFLOW;
   
       /* Format the values into the buffer. */
  -
  -    ((xds_uint8_t *) buffer)[0] = (p_len >> 24) & 0x000000ff;
  -    ((xds_uint8_t *) buffer)[1] = (p_len >> 16) & 0x000000ff;
  -    ((xds_uint8_t *) buffer)[2] = (p_len >> 8) & 0x000000ff;
  -    ((xds_uint8_t *) buffer)[3] = (p_len >> 0) & 0x000000ff;
  +    ((xds_uint8_t *)buffer)[0] = (p_len >> 24) & 0x000000ff;
  +    ((xds_uint8_t *)buffer)[1] = (p_len >> 16) & 0x000000ff;
  +    ((xds_uint8_t *)buffer)[2] = (p_len >>  8) & 0x000000ff;
  +    ((xds_uint8_t *)buffer)[3] = (p_len >>  0) & 0x000000ff;
       memmove((xds_uint8_t *) buffer + 4, p, p_len);
       memset((xds_uint8_t *) buffer + 4 + p_len, 0, padding);
   
  -    /* Done. */
  -
       return XDS_OK;
   }
   
  -int xdr_decode_octetstream(xds_t * xds, void *engine_context,
  +int xdr_decode_octetstream(xds_t *xds, void *engine_context,
                              void *buffer, size_t buffer_size,
  -                           size_t * used_buffer_size, va_list * args)
  +                           size_t *used_buffer_size, va_list *args)
   {
       void **p;
       size_t *p_len;
  @@ -454,36 +420,30 @@
       xds_check_parameter(p_len != NULL);
   
       /* Read the size of the message. */
  -
  -    *p_len = ((xds_uint8_t *) buffer)[0];
  +    *p_len =  ((xds_uint8_t *)buffer)[0];
       *p_len = *p_len << 8;
  -    *p_len += ((xds_uint8_t *) buffer)[1];
  +    *p_len += ((xds_uint8_t *)buffer)[1];
       *p_len = *p_len << 8;
  -    *p_len += ((xds_uint8_t *) buffer)[2];
  +    *p_len += ((xds_uint8_t *)buffer)[2];
       *p_len = *p_len << 8;
  -    *p_len += ((xds_uint8_t *) buffer)[3];
  +    *p_len += ((xds_uint8_t *)buffer)[3];
   
       /* Calculate padding. */
  -
       padding = (4 - (*p_len & 0x03)) & 0x03;
  -
  -    /* Do we have enough data?. */
   
  +    /* Do we have enough data? */
       *used_buffer_size = 4 + *p_len + padding;
       if (buffer_size < *used_buffer_size)
           return XDS_ERR_UNDERFLOW;
   
       /* Allocate buffer for the data. */
  -
       *p = malloc(*p_len);
       if (*p == NULL)
           return XDS_ERR_NO_MEM;
   
       /* Copy data into the buffer. */
  -
       memmove(*p, (xds_uint8_t *) buffer + 4, *p_len);
   
  -    /* Done. */
  -
       return XDS_OK;
   }
  +
  Index: ossp-pkg/srpc/libxds/xds_engine_xml.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xds_engine_xml.c
  --- ossp-pkg/srpc/libxds/xds_engine_xml.c	2001/08/09 19:58:35	1.3
  +++ ossp-pkg/srpc/libxds/xds_engine_xml.c	2001/08/09 20:59:05	1.4
  @@ -41,48 +41,49 @@
   static const char xds_xml_end_text[] = 
       "</xds>\n";
   
  -int xml_encode_begin(xds_t * xds, void *engine_context,
  +int xml_encode_begin(xds_t *xds, void *engine_context,
                        void *buffer, size_t buffer_size,
  -                     size_t * used_buffer_size, va_list * args)
  +                     size_t *used_buffer_size, va_list *args)
   {
       xds_init_encoding_engine(strlen(xds_xml_begin_text));
       memmove(buffer, xds_xml_begin_text, strlen(xds_xml_begin_text));
       return XDS_OK;
   }
   
  -int xml_decode_begin(xds_t * xds, void *engine_context,
  +int xml_decode_begin(xds_t *xds, void *engine_context,
                        void *buffer, size_t buffer_size,
  -                     size_t * used_buffer_size, va_list * args)
  +                     size_t *used_buffer_size, va_list *args)
   {
       xds_init_encoding_engine(strlen(xds_xml_begin_text));
  -    if (strncasecmp(buffer, xds_xml_begin_text, strlen(xds_xml_begin_text)) !=
  -        0)
  +    if (strncasecmp(buffer, xds_xml_begin_text, 
  +                    strlen(xds_xml_begin_text)) != 0)
           return XDS_ERR_TYPE_MISMATCH;
       return XDS_OK;
   }
   
  -int xml_encode_end(xds_t * xds, void *engine_context,
  +int xml_encode_end(xds_t *xds, void *engine_context,
                      void *buffer, size_t buffer_size,
  -                   size_t * used_buffer_size, va_list * args)
  +                   size_t *used_buffer_size, va_list *args)
   {
       xds_init_encoding_engine(strlen(xds_xml_end_text));
       memmove(buffer, xds_xml_end_text, strlen(xds_xml_end_text));
       return XDS_OK;
   }
   
  -int xml_decode_end(xds_t * xds, void *engine_context,
  +int xml_decode_end(xds_t *xds, void *engine_context,
                      void *buffer, size_t buffer_size,
  -                   size_t * used_buffer_size, va_list * args)
  +                   size_t *used_buffer_size, va_list *args)
   {
       xds_init_decoding_engine(strlen(xds_xml_end_text));
  -    if (strncasecmp(buffer, xds_xml_end_text, strlen(xds_xml_end_text)) != 0)
  +    if (strncasecmp(buffer, xds_xml_end_text, 
  +                    strlen(xds_xml_end_text)) != 0)
           return XDS_ERR_TYPE_MISMATCH;
       return XDS_OK;
   }
   
  -int xml_encode_int32(xds_t * xds, void *engine_context,
  +int xml_encode_int32(xds_t *xds, void *engine_context,
                        void *buffer, size_t buffer_size,
  -                     size_t * used_buffer_size, va_list * args)
  +                     size_t *used_buffer_size, va_list *args)
   {
       xds_int32_t value;
       char buf[32];
  @@ -93,8 +94,7 @@
       xds_init_encoding_engine(7 + 8 + 11);
   
       /* Get the value and format it into our buffer. Keep track of the length
  -     * of the formatted result. */
  -
  +       of the formatted result. */
       value = va_arg(*args, xds_int32_t);
       if (value < 0) {
           negative = XDS_TRUE;
  @@ -107,29 +107,26 @@
           unsigned char remainder = value % 10;
           value = value / 10;
           buf[i++] = '0' + remainder;
  -    }
  -    while (value != 0);
  +    } while (value != 0);
       if (negative)
           buf[i++] = '-';
   
       /* Now that we know the correct size of our data's representation, write
  -     * it into the buffer. */
  -
  +       it into the buffer. */
       *used_buffer_size = 7 + 8 + i;
       p = buffer;
       memmove(p, "<int32>", 7);
       p += 7;
  -    for (j = i; j > 0;) {
  +    for (j = i; j > 0;)
           *p++ = buf[--j];
  -    }
       memmove(p, "</int32>", 8);
   
       return XDS_OK;
   }
   
  -int xml_decode_int32(xds_t * xds, void *engine_context,
  +int xml_decode_int32(xds_t *xds, void *engine_context,
                        void *buffer, size_t buffer_size,
  -                     size_t * used_buffer_size, va_list * args)
  +                     size_t *used_buffer_size, va_list *args)
   {
       xds_int32_t *value;
       char *p;
  @@ -138,18 +135,16 @@
       xds_init_decoding_engine(7 + 8 + 1);
   
       /* Does the opening XML tag match? */
  -
       if (strncasecmp(buffer, "<int32>", 7) != 0)
           return XDS_ERR_TYPE_MISMATCH;
   
       /* Decode the representation of the value. */
  -
       value = va_arg(*args, xds_int32_t *);
       *value = 0;
       p = (char *)buffer + 7;
       if (*p == '-') {
           negative = XDS_TRUE;
  -        ++p;
  +        p++;
       }
       else
           negative = XDS_FALSE;
  @@ -163,7 +158,6 @@
           *value = 0 - *value;
   
       /* Does the closing XML tag match? */
  -
       if (p + 8 > (char *)buffer + buffer_size)
           return XDS_ERR_UNDERFLOW;
       else if (strncasecmp(p, "</int32>", 8) != 0)
  @@ -173,9 +167,9 @@
       return XDS_OK;
   }
   
  -int xml_encode_uint32(xds_t * xds, void *engine_context,
  +int xml_encode_uint32(xds_t *xds, void *engine_context,
                         void *buffer, size_t buffer_size,
  -                      size_t * used_buffer_size, va_list * args)
  +                      size_t *used_buffer_size, va_list *args)
   {
       xds_uint32_t value;
       char buf[32];
  @@ -185,36 +179,31 @@
       xds_init_encoding_engine(8 + 9 + 10);
   
       /* Format value into our buffer. */
  -
       value = va_arg(*args, xds_uint32_t);
       i = 0;
       do {
           unsigned char remainder = value % 10;
           value = value / 10;
           buf[i++] = '0' + remainder;
  -    }
  -    while (value != 0);
  +    } while (value != 0);
   
       /* Store the correct buffer size. */
  -
       *used_buffer_size = 8 + 9 + i;
   
       /* Write result into the buffer. */
  -
       p = buffer;
       memmove(p, "<uint32>", 8);
       p += 8;
  -    for (j = i; j > 0;) {
  +    for (j = i; j > 0;)
           *p++ = buf[--j];
  -    }
       memmove(p, "</uint32>", 9);
   
       return XDS_OK;
   }
   
  -int xml_decode_uint32(xds_t * xds, void *engine_context,
  +int xml_decode_uint32(xds_t *xds, void *engine_context,
                         void *buffer, size_t buffer_size,
  -                      size_t * used_buffer_size, va_list * args)
  +                      size_t *used_buffer_size, va_list *args)
   {
       xds_uint32_t *value;
       char *p;
  @@ -222,12 +211,10 @@
       xds_init_decoding_engine(8 + 9 + 1);
   
       /* Does the opening XML tag match? */
  -
       if (strncasecmp(buffer, "<uint32>", 8) != 0)
           return XDS_ERR_TYPE_MISMATCH;
   
       /* Decode the representation of the value. */
  -
       value = va_arg(*args, xds_uint32_t *);
       *value = 0;
       p = (char *)buffer + 8;
  @@ -239,7 +226,6 @@
       }
   
       /* Does the closing XML tag match? */
  -
       if (p + 9 > (char *)buffer + buffer_size)
           return XDS_ERR_UNDERFLOW;
       else if (strncasecmp(p, "</uint32>", 9) != 0)
  @@ -251,9 +237,9 @@
   
   #ifdef XDS_HAVE_64_BIT_SUPPORT
   
  -int xml_encode_int64(xds_t * xds, void *engine_context,
  +int xml_encode_int64(xds_t *xds, void *engine_context,
                        void *buffer, size_t buffer_size,
  -                     size_t * used_buffer_size, va_list * args)
  +                     size_t *used_buffer_size, va_list *args)
   {
       xds_int64_t value;
       char buf[64];
  @@ -264,7 +250,6 @@
       xds_init_encoding_engine(7 + 8 + 21);
   
       /* Format value into our buffer. */
  -
       value = va_arg(*args, xds_int64_t);
       if (value < 0) {
           negative = XDS_TRUE;
  @@ -277,31 +262,27 @@
           unsigned char remainder = value % 10;
           value = value / 10;
           buf[i++] = '0' + remainder;
  -    }
  -    while (value != 0);
  +    } while (value != 0);
       if (negative)
           buf[i++] = '-';
   
       /* Store the correct buffer size. */
  -
       *used_buffer_size = 7 + 8 + i;
   
       /* Write result into the buffer. */
  -
       p = buffer;
       memmove(p, "<int64>", 7);
       p += 7;
  -    for (j = i; j > 0;) {
  +    for (j = i; j > 0;)
           *p++ = buf[--j];
  -    }
       memmove(p, "</int64>", 8);
   
       return XDS_OK;
   }
   
  -int xml_decode_int64(xds_t * xds, void *engine_context,
  +int xml_decode_int64(xds_t *xds, void *engine_context,
                        void *buffer, size_t buffer_size,
  -                     size_t * used_buffer_size, va_list * args)
  +                     size_t *used_buffer_size, va_list *args)
   {
       xds_int64_t *value;
       char *p;
  @@ -310,18 +291,16 @@
       xds_init_decoding_engine(7 + 8 + 1);
   
       /* Does the opening XML tag match? */
  -
       if (strncasecmp(buffer, "<int64>", 7) != 0)
           return XDS_ERR_TYPE_MISMATCH;
   
       /* Decode the representation of the value. */
  -
       value = va_arg(*args, xds_int64_t *);
       *value = 0;
       p = (char *)buffer + 7;
       if (*p == '-') {
           negative = XDS_TRUE;
  -        ++p;
  +        p++;
       }
       else
           negative = XDS_FALSE;
  @@ -335,7 +314,6 @@
           *value = 0 - *value;
   
       /* Does the closing XML tag match? */
  -
       if (p + 8 > (char *)buffer + buffer_size)
           return XDS_ERR_UNDERFLOW;
       else if (strncasecmp(p, "</int64>", 8) != 0)
  @@ -345,9 +323,9 @@
       return XDS_OK;
   }
   
  -int xml_encode_uint64(xds_t * xds, void *engine_context,
  +int xml_encode_uint64(xds_t *xds, void *engine_context,
                         void *buffer, size_t buffer_size,
  -                      size_t * used_buffer_size, va_list * args)
  +                      size_t *used_buffer_size, va_list *args)
   {
       xds_uint64_t value;
       char buf[64];
  @@ -357,36 +335,31 @@
       xds_init_encoding_engine(8 + 9 + 20);
   
       /* Format value into our buffer. */
  -
       value = va_arg(*args, xds_uint64_t);
       i = 0;
       do {
           unsigned char remainder = value % 10;
           value = value / 10;
           buf[i++] = '0' + remainder;
  -    }
  -    while (value != 0);
  +    } while (value != 0);
   
       /* Store the correct buffer size. */
  -
       *used_buffer_size = 8 + 9 + i;
   
       /* Write result into the buffer. */
  -
       p = buffer;
       memmove(p, "<uint64>", 8);
       p += 8;
  -    for (j = i; j > 0;) {
  +    for (j = i; j > 0;)
           *p++ = buf[--j];
  -    }
       memmove(p, "</uint64>", 9);
   
       return XDS_OK;
   }
   
  -int xml_decode_uint64(xds_t * xds, void *engine_context,
  +int xml_decode_uint64(xds_t *xds, void *engine_context,
                         void *buffer, size_t buffer_size,
  -                      size_t * used_buffer_size, va_list * args)
  +                      size_t *used_buffer_size, va_list *args)
   {
       xds_uint64_t *value;
       char *p;
  @@ -394,12 +367,10 @@
       xds_init_decoding_engine(8 + 9 + 1);
   
       /* Does the opening XML tag match? */
  -
       if (strncasecmp(buffer, "<uint64>", 8) != 0)
           return XDS_ERR_TYPE_MISMATCH;
   
       /* Decode the representation of the value. */
  -
       value = va_arg(*args, xds_uint64_t *);
       *value = 0;
       p = (char *)buffer + 8;
  @@ -411,7 +382,6 @@
       }
   
       /* Does the closing XML tag match? */
  -
       if (p + 9 > (char *)buffer + buffer_size)
           return XDS_ERR_UNDERFLOW;
       else if (strncasecmp(p, "</uint64>", 9) != 0)
  @@ -423,22 +393,24 @@
   
   #endif /* XDS_HAVE_64_BIT_SUPPORT */
   
  -int xml_encode_double(xds_t * xds, void *engine_context,
  +int xml_encode_double(xds_t *xds, void *engine_context,
                         void *buffer, size_t buffer_size,
  -                      size_t * used_buffer_size, va_list * args)
  +                      size_t *used_buffer_size, va_list *args)
   {
  +    /* XXX */
       return -1;
   }
   
  -int xml_decode_double(xds_t * xds, void *engine_context,
  +int xml_decode_double(xds_t *xds, void *engine_context,
                         void *buffer, size_t buffer_size,
  -                      size_t * used_buffer_size, va_list * args)
  +                      size_t *used_buffer_size, va_list *args)
   {
  +    /* XXX */
       return -1;
   }
   
  -#define bits(c) (0x80 | ((c) & 0x3F))
  -#define put(c)  *strptr++ = (c);
  +#define bits(c)     (0x80 | ((c) & 0x3F))
  +#define put(c)      *strptr++ = (c);
   #define putbits(c)  put(bits(c))
   #define finish()    *strptr = '\0'
   
  @@ -487,19 +459,19 @@
           finish();
       }
       else
  -        finish();                      /* Not a valid Unicode "character" */
  +        finish(); /* Not a valid Unicode "character" */
   
       return strptr;
   }
   
  -static const char TAG_OPEN[] = "<string>";
  -static const char TAG_CLOSE[] = "</string>";
  -static const size_t TAG_OPEN_LEN = sizeof (TAG_OPEN) - 1;
  +static const char   TAG_OPEN[]    = "<string>";
  +static const char   TAG_CLOSE[]   = "</string>";
  +static const size_t TAG_OPEN_LEN  = sizeof (TAG_OPEN) - 1;
   static const size_t TAG_CLOSE_LEN = sizeof (TAG_CLOSE) - 1;
   
  -int xml_encode_string(xds_t * xds, void *engine_context,
  +int xml_encode_string(xds_t *xds, void *engine_context,
                         void *buffer, size_t buffer_size,
  -                      size_t * used_buffer_size, va_list * args)
  +                      size_t *used_buffer_size, va_list *args)
   {
       char *src;
       size_t src_len;
  @@ -508,121 +480,121 @@
       char *tmp;
   
       /* Setup the engine. We need at least space for our tags; how long the
  -     * actual content is going to be will be seen soon. */
  -
  +       actual content is going to be will be seen soon. */
       xds_init_encoding_engine(TAG_OPEN_LEN + TAG_CLOSE_LEN);
   
       /* Get the data from the stack. */
  -
       src = va_arg(*args, char *);
       xds_check_parameter(src != NULL);
       src_len = strlen(src);
   
       /* Set up the target buffer. */
  -
       dst = buffer;
       dst_size = buffer_size;
   
       /* Write the opening tag. */
  -
       memmove(dst, TAG_OPEN, TAG_OPEN_LEN);
       dst += TAG_OPEN_LEN;
       dst_size -= TAG_OPEN_LEN;
   
       /* Format the data into the buffer. */
  -
       while (src_len > 0 && dst_size > 0) {
  -        if (*((xds_uint8_t *) src) >= 0x80) {   /* UTF-8ify it. */
  +        if (*((xds_uint8_t *) src) >= 0x80) { 
  +            /* UTF-8ify it. */
               if (dst_size >= 7) {
                   tmp = sputu8((xds_uint32_t) * ((xds_uint8_t *) src), dst);
  -                ++src;
  -                --src_len;
  +                src++;
  +                src_len--;
                   dst_size -= tmp - dst;
                   dst = tmp;
               }
               else
                   dst_size = 0;
           }
  -        else if (*src == '<') {        /* Turn into "&lt;". */
  +        else if (*src == '<') { 
  +            /* Turn into "&lt;". */
               if (dst_size >= 4) {
                   *dst++ = '&';
  -                --dst_size;
  +                dst_size--;
                   *dst++ = 'l';
  -                --dst_size;
  +                dst_size--;
                   *dst++ = 't';
  -                --dst_size;
  +                dst_size--;
                   *dst++ = ';';
  -                --dst_size;
  -                ++src;
  -                --src_len;
  +                dst_size--;
  +                src++;
  +                src_len--;
               }
               else
                   dst_size = 0;
           }
  -        else if (*src == '&') {        /* Turn into "&amp;". */
  +        else if (*src == '&') {
  +            /* Turn into "&amp;". */
               if (dst_size >= 5) {
                   *dst++ = '&';
  -                --dst_size;
  +                dst_size--;
                   *dst++ = 'a';
  -                --dst_size;
  +                dst_size--;
                   *dst++ = 'm';
  -                --dst_size;
  +                dst_size--;
                   *dst++ = 'p';
  -                --dst_size;
  +                dst_size--;
                   *dst++ = ';';
  -                --dst_size;
  -                ++src;
  -                --src_len;
  +                dst_size--;
  +                src++;
  +                src_len--;
               }
               else
                   dst_size = 0;
           }
  -        else if (*src == '>') {        /* Turn into "&gt;". */
  +        else if (*src == '>') {
  +            /* Turn into "&gt;". */
               if (dst_size >= 4) {
                   *dst++ = '&';
  -                --dst_size;
  +                dst_size--;
                   *dst++ = 'g';
  -                --dst_size;
  +                dst_size--;
                   *dst++ = 't';
  -                --dst_size;
  +                dst_size--;
                   *dst++ = ';';
  -                --dst_size;
  -                ++src;
  -                --src_len;
  +                dst_size--;
  +                src++;
  +                src_len--;
               }
               else
                   dst_size = 0;
           }
  -        else {                         /* No special character; just copy it. 
  -                                        */
  +        else {  
  +            /* No special character; just copy it. */
               *dst++ = *src++;
  -            --src_len;
  -            --dst_size;
  +            src_len--;
  +            dst_size--;
           }
       }
  -    if (src_len > 0) {                 /* Target buffer was too small. */
  +    if (src_len > 0) {
  +        /* Target buffer was too small. */
           *used_buffer_size = buffer_size + 1;
           return XDS_ERR_OVERFLOW;
       }
   
       /* Write the closing tag. */
  -
       memmove(dst, TAG_CLOSE, TAG_CLOSE_LEN);
       dst += TAG_CLOSE_LEN;
       dst_size -= TAG_CLOSE_LEN;
   
  -    /* Done. */
  -
       *used_buffer_size = dst - (char *)buffer;
       return XDS_OK;
   }
   
  -#define INVALID 0x80000000
  +#define INVALID \
  +    0x80000000
  +#define get(c) \
  +    c = *strptr++; \
  +    if (chars) \
  +        (*chars)++; \
  +    if ((c) == 0) \
  +        return (unsigned int)EOF
   
  -#define get(c)  c = *strptr++; \
  -    if (chars) (*chars)++; \
  -    if ((c) == 0) return (unsigned int)EOF
  -
   static unsigned int sgetu8(unsigned char *strptr, int *chars)
   {
       unsigned int c;
  @@ -636,7 +608,6 @@
           return (unsigned int)EOF;
   
       get(c);
  -
       if ((c & 0xFE) == 0xFC) {
           c &= 0x01;
           iterations = 5;
  @@ -673,9 +644,9 @@
       return c;
   }
   
  -int xml_decode_string(xds_t * xds, void *engine_context,
  +int xml_decode_string(xds_t *xds, void *engine_context,
                         void *buffer, size_t buffer_size,
  -                      size_t * used_buffer_size, va_list * args)
  +                      size_t *used_buffer_size, va_list *args)
   {
       char **target_buffer;
       char *src;
  @@ -685,30 +656,25 @@
       unsigned int rc;
   
       /* Setup the engine. We need at least space for our tags; how long the
  -     * actual content is going to be will be seen soon. */
  -
  +       actual content is going to be will be seen soon. */
       xds_init_encoding_engine(TAG_OPEN_LEN + TAG_CLOSE_LEN);
   
       /* Is the opening tag there? */
  -
       if (strncasecmp(buffer, TAG_OPEN, TAG_OPEN_LEN) != 0)
           return XDS_ERR_TYPE_MISMATCH;
   
       /* Determine the length of the encoded data. */
  -
       src = (char *)buffer + TAG_OPEN_LEN;
       for (src_len = 0; src[src_len] != '<'; ++src_len)
           if (src[src_len] == '\0')
               return XDS_ERR_TYPE_MISMATCH;
   
       /* Check the closing tag. */
  -
       if (strncasecmp(src + src_len, TAG_CLOSE, TAG_CLOSE_LEN) != 0)
           return XDS_ERR_TYPE_MISMATCH;
       *used_buffer_size = TAG_OPEN_LEN + src_len + TAG_CLOSE_LEN;
   
       /* Allocate target buffer. */
  -
       target_buffer = va_arg(*args, char **);
       xds_check_parameter(target_buffer != NULL);
       *target_buffer = dst = malloc(src_len + 1);
  @@ -716,7 +682,6 @@
           return XDS_ERR_NO_MEM;
   
       /* Decode the data into the target buffer. */
  -
       while (src_len > 0) {
           if (*src == '&') {
               if (src_len >= 4 && strncmp(src, "&lt;", 4) == 0) {
  @@ -740,24 +705,22 @@
               }
           }
           else if (*((xds_uint8_t *) src) >= 0x80) {
  -            rc = sgetu8((xds_uint8_t *) src, &utf8_len);
  +            rc = sgetu8((xds_uint8_t *)src, &utf8_len);
               if (rc == (unsigned int)EOF)
                   return XDS_ERR_UNDERFLOW;
               else if (rc == INVALID || rc > 255)
                   return XDS_ERR_TYPE_MISMATCH;
  -            *dst++ = (xds_uint8_t) rc;
  +            *dst++ = (xds_uint8_t)rc;
               src += utf8_len;
               src_len -= utf8_len;
           }
           else {
               *dst++ = *src++;
  -            --src_len;
  +            src_len--;
           }
       }
       *dst = '\0';
   
  -    /* Done. */
  -
       return XDS_OK;
   }
   
  @@ -765,8 +728,8 @@
       "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
   static const char xds_pad64 = '=';
   
  -static int base64_encode(char *dst, size_t dstlen, unsigned char const *src,
  -                         size_t srclen)
  +static int base64_encode(char *dst, size_t dstlen, 
  +                         unsigned char const *src, size_t srclen)
   {
       size_t dstpos;
       unsigned char input[3];
  @@ -791,10 +754,10 @@
           input[2] = *src++;
           srclen -= 3;
   
  -        output[0] = (input[0] >> 2);
  +        output[0] = ( input[0] >> 2);
           output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4);
           output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6);
  -        output[3] = (input[2] & 0x3f);
  +        output[3] = ( input[2] & 0x3f);
   
           if (dstpos + 4 > dstlen)
               return -1;
  @@ -810,7 +773,7 @@
           for (i = 0; i < srclen; i++)
               input[i] = *src++;
   
  -        output[0] = (input[0] >> 2);
  +        output[0] = ( input[0] >> 2);
           output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4);
           output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6);
   
  @@ -832,26 +795,23 @@
       return dstpos;
   }
   
  -int xml_encode_octetstream(xds_t * xds, void *engine_context,
  +int xml_encode_octetstream(xds_t *xds, void *engine_context,
                              void *buffer, size_t buffer_size,
  -                           size_t * used_buffer_size, va_list * args)
  +                           size_t *used_buffer_size, va_list *args)
   {
       xds_uint8_t *src;
       size_t src_len;
   
       /* We need at least 27 byte for the starting and ending tag. */
  -
       xds_init_encoding_engine(13 + 14);
   
       /* Get parameters from stack. */
  -
  -    src = (xds_uint8_t *) va_arg(*args, void *);
  +    src = (xds_uint8_t *)va_arg(*args, void *);
       xds_check_parameter(src != NULL);
       src_len = va_arg(*args, size_t);
   
       /* Calculate how many bytes we'll need in buffer and make sure we have
  -     * them. */
  -
  +       them. */
       *used_buffer_size = base64_encode(NULL, 0, src, src_len);
       if (*used_buffer_size == (size_t) - 1)
           return XDS_ERR_UNKNOWN;
  @@ -861,10 +821,8 @@
           return XDS_ERR_OVERFLOW;
   
       /* Format the data into the buffer. */
  -
       memmove(buffer, "<octetstream>", 13);
  -    if (base64_encode((char *)buffer + 13, buffer_size - 13, src, src_len) <
  -        0)
  +    if (base64_encode((char *)buffer + 13, buffer_size - 13, src, src_len) < 0)
           return XDS_ERR_UNKNOWN;
       memmove((char *)buffer + *used_buffer_size - 14, "</octetstream>", 14);
   
  @@ -873,8 +831,8 @@
       return XDS_OK;
   }
   
  -static int base64_decode(unsigned char *dst, size_t dstlen, char const *src,
  -                         size_t srclen)
  +static int base64_decode(unsigned char *dst, size_t dstlen, 
  +                         char const *src, size_t srclen)
   {
       int dstidx, state, ch = 0;
       unsigned char res;
  @@ -941,8 +899,7 @@
        * We are done decoding Base-64 chars.  Let's see if we ended
        * on a byte boundary, and/or with erroneous trailing characters.
        */
  -
  -    if (ch == xds_pad64) {             /* We got a pad char. */
  +    if (ch == xds_pad64) {         /* We got a pad char. */
           switch (state) {
               case 0:                /* Invalid = in first position */
               case 1:                /* Invalid = in second position */
  @@ -994,9 +951,9 @@
       return dstidx;
   }
   
  -int xml_decode_octetstream(xds_t * xds, void *engine_context,
  +int xml_decode_octetstream(xds_t *xds, void *engine_context,
                              void *buffer, size_t buffer_size,
  -                           size_t * used_buffer_size, va_list * args)
  +                           size_t *used_buffer_size, va_list *args)
   {
       char *p;
       size_t p_len;
  @@ -1004,23 +961,19 @@
       size_t *data_len;
   
       /* We need at least 27 byte for the starting and ending tag. */
  -
       xds_init_encoding_engine(13 + 14);
   
       /* Get parameters from stack. */
  -
       data = va_arg(*args, xds_uint8_t **);
       xds_check_parameter(data != NULL);
       data_len = va_arg(*args, size_t *);
   
       /* Check for the opening tag. */
  -
       if (memcmp("<octetstream>", buffer, 13) != 0)
           return XDS_ERR_TYPE_MISMATCH;
   
       /* Find the end of the data and calculate the length of the
  -     * base64-encoded stuff. */
  -
  +       base64-encoded stuff. */
       p = (char *)buffer + 13;
       while (p < ((char *)buffer + buffer_size) && *p != '<')
           ++p;
  @@ -1032,8 +985,7 @@
       }
   
       /* Now find out how long the decoded data is going to be, allocate a
  -     * buffer for it, and decode away. */
  -
  +       buffer for it, and decode away. */
       *data_len = base64_decode(NULL, 0, p, p_len);
       if (*data_len == (size_t) - 1)
           return XDS_ERR_UNKNOWN;
  @@ -1043,14 +995,12 @@
       base64_decode(*data, *data_len, p, p_len);
   
       /* Check that we have a closing tag. */
  -
       if (memcmp(p + p_len, "</octetstream>", 14) != 0) {
           free(*data);
           return XDS_ERR_TYPE_MISMATCH;
       }
   
  -    /* Done. */
  -
       *used_buffer_size = 13 + p_len + 14;
       return XDS_OK;
   }
  +
  Index: ossp-pkg/srpc/libxds/xds_test_lib.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xds_test_lib.c
  --- ossp-pkg/srpc/libxds/xds_test_lib.c	2001/08/09 19:58:35	1.2
  +++ ossp-pkg/srpc/libxds/xds_test_lib.c	2001/08/09 20:59:05	1.3
  @@ -34,13 +34,12 @@
   
   #ifdef XDS_TEST_XDS_CORE
   
  -int main()
  +int main(int argc, char *argv[])
   {
       xds_t *ctx[50];
       size_t i;
   
       /* Open a bunch of contextes and close them again. */
  -
       for (i = 0; i < sizeof (ctx) / sizeof (xds_t *); ++i) {
           if (i % 2 == 0)
               ctx[i] = xds_init(XDS_ENCODE);
  @@ -58,7 +57,6 @@
   
   #ifdef NDEBUG
       /* Check how the library deals with errorneous arguments. */
  -
       if (xds_init((xds_mode_t) 42) != NULL || errno != EINVAL) {
           printf
               ("Called xds_init() with invalid mode but didn't get EINVAL.\n");
  @@ -66,13 +64,11 @@
       }
   
       /* Call xds_destroy() with an invalid context and see whether we survive
  -     * that. */
  -
  +       that. */
       xds_destroy(NULL);
   #endif
   
       /* Everything went fine. */
  -
       return 0;
   }
   
  @@ -80,7 +76,7 @@
   
   #ifdef XDS_TEST_XDS_FIND_ENGINE
   
  -int main()
  +int main(int argc, char *argv[])
   {
       const engine_map_t engines[] = {
           {"alan", NULL, 0},
  @@ -101,118 +97,83 @@
       size_t i;
   
       /* Does xds_find_engine handle an empty array? */
  -
       if (xds_find_engine(engines, 0, "whatever", &pos)) {
  -        printf
  -            ("xds_find_engine() said 'whatever' would be in the array, but that's wrong.\n");
  +        printf("xds_find_engine() said 'whatever' would be in the array, but that's wrong.\n");
           exit(1);
       }
       if (pos != 0) {
  -        printf
  -            ("xds_find_engine() would insert 'whatever' at position %d, but 0 is correct.\n",
  -             pos);
  +        printf("xds_find_engine() would insert 'whatever' at position %d, but 0 is correct.\n", pos);
           exit(1);
       }
   
       /* Search for every single entry in the array and check the results. */
  -
       for (i = 0; i < engines_len; ++i) {
           if (!xds_find_engine(engines, engines_len, engines[i].name, &pos)) {
  -            printf
  -                ("xds_find_engine() said '%s' wouldn't be in the array, but that's wrong.\n",
  -                 engines[i].name);
  +            printf("xds_find_engine() said '%s' wouldn't be in the array, but that's wrong.\n", engines[i].name);
               exit(1);
           }
           if (pos != i) {
  -            printf
  -                ("xds_find_engine() would insert '%s' at position %d, but %d is correct.\n",
  -                 engines[i].name, pos, i);
  +            printf("xds_find_engine() would insert '%s' at position %d, but %d is correct.\n", engines[i].name, pos, i);
               exit(1);
           }
       }
   
       /* Search for non-existing name that would be inserted at the first
  -     * position. */
  -
  +       position. */
       if (xds_find_engine(engines, engines_len, "aaron", &pos)) {
  -        printf
  -            ("xds_find_engine() said 'aaron' would be in the array, but that's wrong.\n");
  +        printf("xds_find_engine() said 'aaron' would be in the array, but that's wrong.\n");
           exit(1);
       }
       if (pos != 0) {
  -        printf
  -            ("xds_find_engine() would insert 'aaron' at position %d, but 0 is correct.\n",
  -             pos);
  +        printf("xds_find_engine() would insert 'aaron' at position %d, but 0 is correct.\n", pos);
           exit(1);
       }
   
       /* Search for non-existing name that would be inserted at last position. */
  -
       if (xds_find_engine(engines, engines_len, "zerberos", &pos)) {
  -        printf
  -            ("xds_find_engine() said 'zerberos' would be in the array, but that's wrong.\n");
  +        printf("xds_find_engine() said 'zerberos' would be in the array, but that's wrong.\n");
           exit(1);
       }
       if (pos != engines_len) {
  -        printf
  -            ("xds_find_engine() would insert 'zerberos' at position %d, but %d is correct.\n",
  -             pos, engines_len);
  +        printf("xds_find_engine() would insert 'zerberos' at position %d, but %d is correct.\n", pos, engines_len);
           exit(1);
       }
   
  -    /* Search for non-existing names that would be inserted at random
  -     * positions. */
  -
  +    /* Search for non-existing names that would be inserted at random positions. */
       if (xds_find_engine(engines, engines_len, "balthasar", &pos)) {
  -        printf
  -            ("xds_find_engine() said 'balthasar' would be in the array, but that's wrong.\n");
  +        printf("xds_find_engine() said 'balthasar' would be in the array, but that's wrong.\n");
           exit(1);
       }
       if (pos != 1) {
  -        printf
  -            ("xds_find_engine() would insert 'balthasar' at position %d, but 1 is correct.\n",
  -             pos);
  +        printf("xds_find_engine() would insert 'balthasar' at position %d, but 1 is correct.\n", pos);
           exit(1);
       }
  -
       if (xds_find_engine(engines, engines_len, "bulli", &pos)) {
  -        printf
  -            ("xds_find_engine() said 'bulli' would be in the array, but that's wrong.\n");
  +        printf("xds_find_engine() said 'bulli' would be in the array, but that's wrong.\n");
           exit(1);
       }
       if (pos != 2) {
  -        printf
  -            ("xds_find_engine() would insert 'bulli' at position %d, but 2 is correct.\n",
  -             pos);
  +        printf("xds_find_engine() would insert 'bulli' at position %d, but 2 is correct.\n", pos);
           exit(1);
       }
  -
       if (xds_find_engine(engines, engines_len, "hildegard", &pos)) {
  -        printf
  -            ("xds_find_engine() said 'hildegard' would be in the array, but that's wrong.\n");
  +        printf("xds_find_engine() said 'hildegard' would be in the array, but that's wrong.\n");
           exit(1);
       }
       if (pos != 8) {
  -        printf
  -            ("xds_find_engine() would insert 'hildegard' at position %d, but 8 is correct.\n",
  -             pos);
  +        printf("xds_find_engine() would insert 'hildegard' at position %d, but 8 is correct.\n", pos);
           exit(1);
       }
  -
       if (xds_find_engine(engines, engines_len, "harald", &pos)) {
  -        printf
  -            ("xds_find_engine() said 'harald' would be in the array, but that's wrong.\n");
  +        printf("xds_find_engine() said 'harald' would be in the array, but that's wrong.\n");
           exit(1);
       }
       if (pos != 7) {
  -        printf
  -            ("xds_find_engine() would insert 'harald' at position %d, but 7 is correct.\n",
  -             pos);
  +        printf("xds_find_engine() would insert 'harald' at position %d, but 7 is correct.\n", pos);
           exit(1);
       }
   
       /* Everything went fine. */
  -
       return 0;
   }
   
  @@ -220,14 +181,14 @@
   
   #ifdef XDS_TEST_XDS_REGISTER
   
  -static int dummy_engine(xds_t * xds, void *engine_context,
  +static int dummy_engine(xds_t *xds, void *engine_context,
                           void *buffer, size_t buffer_size,
  -                        size_t * used_buffer_size, va_list * args)
  +                        size_t *used_buffer_size, va_list *args)
   {
       return 0;
   }
   
  -int main()
  +int main(int argc, char *argv[])
   {
       const char *test_names[] = {
           "foo",
  @@ -242,7 +203,6 @@
       size_t i;
   
       /* Create context. */
  -
       xds = xds_init(XDS_ENCODE);
       if (xds == NULL) {
           printf("Failed to initialize XDS context.\n");
  @@ -250,8 +210,7 @@
       }
   
       /* Register the dummy callback under an invalid name to see whether the
  -     * routine fails correctly. */
  -
  +       routine fails correctly. */
       if (xds_register(xds, "abcdefh1230#", &dummy_engine, NULL) !=
           XDS_ERR_INVALID_ARG) {
           printf
  @@ -260,7 +219,6 @@
       }
   
       /* Register the dummy callback under multiple names. */
  -
       for (i = 0; i < test_names_len; ++i) {
           if (xds_register(xds, test_names[i], &dummy_engine, NULL) != XDS_OK) {
               printf("Failed to register engine for '%s'.\n", test_names[i]);
  @@ -269,14 +227,12 @@
       }
   
       /* Register the callback again, overwriting an existing entry. */
  -
       if (xds_register(xds, "claus", &dummy_engine, NULL) != XDS_OK) {
           printf("Failed to re-register engine for 'claus'.\n");
           return 1;
       }
   
       /* Ensure that everything is in alphabetical order. */
  -
       for (i = 1; i < xds->engines_len; ++i) {
           assert(xds->engines[i - 1].name != NULL);
           assert(xds->engines[i].name != NULL);
  @@ -287,15 +243,12 @@
       }
   
       /* Try to remove an unknown entry. */
  -
       if (xds_unregister(xds, "abacadabra") != XDS_ERR_UNKNOWN_ENGINE) {
  -        printf
  -            ("xds_unregister() succeeded at removing 'abacadabra' even though it is not there.\n");
  +        printf("xds_unregister() succeeded at removing 'abacadabra' even though it is not there.\n");
           exit(1);
       }
   
       /* Remove an entry from the middle. */
  -
       if (xds_unregister(xds, test_names[test_names_len / 2]) != XDS_OK) {
           printf("xds_unregister() failed to remove '%s'.\n",
                  test_names[test_names_len / 2]);
  @@ -303,7 +256,6 @@
       }
   
       /* Remove the last entry. */
  -
       assert(test_names_len > 0);
       if (xds_unregister(xds, test_names[test_names_len - 1]) != XDS_OK) {
           printf("xds_unregister() failed to remove '%s'.\n",
  @@ -312,18 +264,15 @@
       }
   
       /* Remove the first entry. */
  -
       if (xds_unregister(xds, test_names[0]) != XDS_OK) {
           printf("xds_unregister() failed to remove '%s'.\n", test_names[0]);
           exit(1);
       }
   
       /* Clean up. */
  -
       xds_destroy(xds);
   
       /* Everything went fine. */
  -
       return 0;
   }
   
  @@ -331,9 +280,9 @@
   
   #ifdef XDS_TEST_XDS_SETBUFFER
   
  -static int dummy_engine(xds_t * xds, void *engine_context,
  +static int dummy_engine(xds_t *xds, void *engine_context,
                           void *buffer, size_t buffer_size,
  -                        size_t * used_buffer_size, va_list * args)
  +                        size_t *used_buffer_size, va_list *args)
   {
       assert(xds != NULL);
       assert(buffer != NULL);
  @@ -348,14 +297,13 @@
       return XDS_OK;
   }
   
  -int main()
  +int main(int argc, char *argv[])
   {
       xds_t *xds;
       char *buffer;
       size_t buffer_size;
   
       /* Create XDS context. */
  -
       xds = xds_init(XDS_ENCODE);
       if (xds == NULL) {
           printf("Failed to initialize XDS context.\n");
  @@ -363,15 +311,13 @@
       }
   
       /* Register the callback. */
  -
       if (xds_register(xds, "dummy", &dummy_engine, NULL) != XDS_OK) {
           printf("Failed to register my encoding engine.\n");
           return 1;
       }
   
       /* Give the library a buffer of 32 byte, call the engine once, get the
  -     * buffer back and see whether it has been enlarged or not. */
  -
  +       buffer back and see whether it has been enlarged or not. */
       buffer_size = 32;
       buffer = malloc(buffer_size);
       if (buffer == NULL) {
  @@ -386,22 +332,19 @@
           printf("xds_encode() failed!\n");
           return 1;
       }
  -    if (xds_getbuffer(xds, XDS_GIFT, (void **)&buffer, &buffer_size) !=
  -        XDS_OK) {
  +    if (xds_getbuffer(xds, XDS_GIFT, (void **)&buffer, &buffer_size) != XDS_OK) {
           printf("xds_getbuffer() failed!\n");
           return 1;
       }
       if (buffer_size < 64) {
  -        printf
  -            ("xds_encode() did not enlarge the buffer after processing the callback\n");
  +        printf("xds_encode() did not enlarge the buffer after processing the callback\n");
           printf("even though all capacity was used up!\n");
           return 1;
       }
   
       /* Loan the library a buffer we own, call the engine once to exceed the
  -     * buffer's capacity and check, whether the library returns the correct
  -     * error code. */
  -
  +       buffer's capacity and check, whether the library returns the correct
  +       error code. */
       buffer = malloc(32);
       if (buffer == NULL) {
           printf("Failed to allocate my memory.\n");
  @@ -419,11 +362,9 @@
       free(buffer);
   
       /* Clean up. */
  -
       xds_destroy(xds);
   
       /* Everything went fine. */
  -
       return 0;
   }
   
  @@ -431,20 +372,19 @@
   
   #ifdef XDS_TEST_XDS_GETBUFFER
   
  -static int dummy_engine(xds_t * xds, void *engine_context,
  +static int dummy_engine(xds_t *xds, void *engine_context,
                           void *buffer, size_t buffer_size,
  -                        size_t * used_buffer_size, va_list * args)
  +                        size_t *used_buffer_size, va_list *args)
   {
       if (buffer_size < 6)
           return XDS_ERR_OVERFLOW;
       else
           *used_buffer_size = 6;
  -
       memmove(buffer, "Hallo!", 6);
       return XDS_OK;
   }
   
  -int main()
  +int main(int argc, char *argv[])
   {
       xds_t *xds;
       char *old;
  @@ -453,7 +393,6 @@
       size_t new_len;
   
       /* Create XDS context. */
  -
       xds = xds_init(XDS_ENCODE);
       if (xds == NULL) {
           printf("Failed to initialize XDS context.\n");
  @@ -461,16 +400,14 @@
       }
   
       /* Register the dummy callback under multiple names. */
  -
       if (xds_register(xds, "text", &dummy_engine, (void *)42) != XDS_OK) {
           printf("Failed to register my encoding engine.\n");
           return 1;
       }
   
       /* Encode something, then flush the buffer by calling xds_getbuffer(),
  -     * then encode something new and verify that the old buffer hasn't ben
  -     * overwritten and that the new one contains the correct string. */
  -
  +       then encode something new and verify that the old buffer hasn't ben
  +       overwritten and that the new one contains the correct string. */
       if (xds_encode(xds, "text text") != XDS_OK) {
           printf("xds_encode() failed!\n");
           return 1;
  @@ -496,9 +433,8 @@
       free(new);
   
       /* Encode somthing, then get the buffer via XDS_LOAN and verify the
  -     * contents. Encode something new and compare the new content with what
  -     * we expect. */
  -
  +       contents. Encode something new and compare the new content with what
  +       we expect. */
       if (xds_encode(xds, "text text") != XDS_OK) {
           printf("xds_encode() failed!\n");
           return 1;
  @@ -530,11 +466,9 @@
       }
   
       /* Clean up. */
  -
       xds_destroy(xds);
   
       /* Everything went fine. */
  -
       return 0;
   }
   
  @@ -542,9 +476,9 @@
   
   #ifdef XDS_TEST_XDS_ENCODE
   
  -static int dummy_engine(xds_t * xds, void *engine_context,
  +static int dummy_engine(xds_t *xds, void *engine_context,
                           void *buffer, size_t buffer_size,
  -                        size_t * used_buffer_size, va_list * args)
  +                        size_t *used_buffer_size, va_list *args)
   {
       if (xds == NULL) {
           printf("XDS context isn't passed through to registered engine.\n");
  @@ -577,12 +511,11 @@
       return XDS_OK;
   }
   
  -int main()
  +int main(int argc, char *argv[])
   {
       xds_t *xds;
   
       /* Create XDS context. */
  -
       xds = xds_init(XDS_ENCODE);
       if (xds == NULL) {
           printf("Failed to initialize XDS context.\n");
  @@ -590,7 +523,6 @@
       }
   
       /* Register the dummy callback under multiple names. */
  -
       if (xds_register(xds, "int", &dummy_engine, (void *)42) != XDS_OK ||
           xds_register(xds, "float", &dummy_engine, (void *)42) != XDS_OK ||
           xds_register(xds, "double", &dummy_engine, (void *)42) != XDS_OK ||
  @@ -600,7 +532,6 @@
       }
   
       /* Let's go and encode something. */
  -
       if (xds_encode(xds, "int:text    double double float") != XDS_OK) {
           printf("xds_encode() failed!\n");
           return 1;
  @@ -611,11 +542,9 @@
       }
   
       /* Clean up. */
  -
       xds_destroy(xds);
   
       /* Everything went fine. */
  -
       return 0;
   }
   
  @@ -623,9 +552,9 @@
   
   #ifdef XDS_TEST_XDS_DECODE
   
  -static int dummy_engine(xds_t * xds, void *engine_context,
  +static int dummy_engine(xds_t *xds, void *engine_context,
                           void *buffer, size_t buffer_size,
  -                        size_t * used_buffer_size, va_list * args)
  +                        size_t *used_buffer_size, va_list *args)
   {
       if (xds == NULL) {
           printf("XDS context isn't passed through to registered engine.\n");
  @@ -656,21 +585,19 @@
           exit(1);
       }
       if (memcmp(buffer, "Hallo!", 6) != 0) {
  -        printf
  -            ("The contents of the decode buffer are not what we expected.\n");
  +        printf("The contents of the decode buffer are not what we expected.\n");
           exit(1);
       }
       *used_buffer_size = 6;
       return XDS_OK;
   }
   
  -int main()
  +int main(int argc, char *argv[])
   {
       xds_t *xds;
       char buffer[] = "Hallo!Hallo!Hallo!";
   
       /* Create XDS context. */
  -
       xds = xds_init(XDS_DECODE);
       if (xds == NULL) {
           printf("Failed to initialize XDS context.\n");
  @@ -678,27 +605,22 @@
       }
   
       /* Register the dummy callback under multiple names. */
  -
       if (xds_register(xds, "text", &dummy_engine, (void *)42) != XDS_OK) {
           printf("Failed to register my decoding engines.\n");
           return 1;
       }
   
  -    /* Decode the buffer and have the callback report when something is
  -     * wrong. */
  -
  +    /* Decode the buffer and have the callback report when something is wrong. */
       if (xds_setbuffer(xds, XDS_LOAN, buffer, sizeof (buffer) - 1) != XDS_OK) {
           printf("xds_decode() failed!");
           return 1;
       }
  -
       if (xds_decode(xds, "text::text text") != XDS_OK) {
           printf("xds_decode() failed!");
           return 1;
       }
   
       /* Clean up. */
  -
       xds_destroy(xds);
   
       /* Everything went fine. */
  @@ -710,9 +632,9 @@
   
   #ifdef XDS_TEST_XDS_ENGINE_RESTART
   
  -static int dummy_engine(xds_t * xds, void *engine_context,
  +static int dummy_engine(xds_t *xds, void *engine_context,
                           void *buffer, size_t buffer_size,
  -                        size_t * used_buffer_size, va_list * args)
  +                        size_t *used_buffer_size, va_list *args)
   {
       if (xds == NULL) {
           printf("XDS context isn't passed through to registered engine.\n");
  @@ -749,19 +671,18 @@
       return XDS_OK;
   }
   
  -int main()
  +int main(int argc, char *argv[])
   {
       xds_t *xds;
       char *buffer;
       size_t buffer_size;
   
       /* Create an XDS context and set a buffer that's too small for the first
  -     * encode() call. Then call encode() with two parameters: the one the
  -     * engine is expecting and a different one after that. The engine will
  -     * complain if it sees the second value -- what would mean that the args
  -     * parameter was not resetted to the original value before the engine is
  -     * restarted after buffer enlargement. */
  -
  +       encode() call. Then call encode() with two parameters: the one the
  +       engine is expecting and a different one after that. The engine will
  +       complain if it sees the second value -- what would mean that the args
  +       parameter was not resetted to the original value before the engine is
  +       restarted after buffer enlargement. */
       xds = xds_init(XDS_ENCODE);
       if (xds == NULL) {
           printf("Failed to initialize XDS context.\n");
  @@ -798,9 +719,9 @@
       xds_uint32_t positive;
   };
   
  -static int encode_mystruct_engine(xds_t * xds, void *engine_context,
  +static int encode_mystruct_engine(xds_t *xds, void *engine_context,
                                     void *buffer, size_t buffer_size,
  -                                  size_t * used_buffer_size, va_list * args)
  +                                  size_t *used_buffer_size, va_list *args)
   {
       struct mystruct *ms;
   
  @@ -814,9 +735,9 @@
       return xds_encode(xds, "int32 uint32", ms->small, ms->positive);
   }
   
  -static int decode_mystruct_engine(xds_t * xds, void *engine_context,
  +static int decode_mystruct_engine(xds_t *xds, void *engine_context,
                                     void *buffer, size_t buffer_size,
  -                                  size_t * used_buffer_size, va_list * args)
  +                                  size_t *used_buffer_size, va_list *args)
   {
       struct mystruct *ms;
   
  @@ -830,7 +751,7 @@
       return xds_decode(xds, "int32 uint32", &(ms->small), &(ms->positive));
   }
   
  -int main()
  +int main(int argc, char *argv[])
   {
       xds_t *xds;
       char *buffer;
  @@ -841,14 +762,13 @@
       ms.positive = 42;
   
       /* Encode our copy of mystruct using our encoding callback. Then get a
  -     * the buffer and destroy the context again. */
  -
  +       the buffer and destroy the context again. */
       xds = xds_init(XDS_ENCODE);
       if (xds == NULL) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  -    if (xds_register(xds, "mystruct", &encode_mystruct_engine, NULL) != XDS_OK
  +    if (   xds_register(xds, "mystruct", &encode_mystruct_engine, NULL) != XDS_OK
           || xds_register(xds, "int32", &xdr_encode_int32, NULL) != XDS_OK
           || xds_register(xds, "uint32", &xdr_encode_uint32, NULL) != XDS_OK) {
           printf("Failed to register my encoding engines.\n");
  @@ -881,7 +801,6 @@
       printf("The encoded representation is %u bytes long.\n", buffer_size);
   
       /* Now create a decoding context and decode the whole thing again. */
  -
       xds = xds_init(XDS_DECODE);
       if (xds == NULL) {
           printf("Failed to initialize XDS context.\n");
  @@ -904,7 +823,6 @@
       xds_destroy(xds);
   
       /* Both structures must be identical. */
  -
       if (ms.small != new_ms.small
           || ms.positive != new_ms.positive) {
           printf("Decoded data does not match the original!\n");
  @@ -912,8 +830,8 @@
       }
   
       /* Everything went fine. */
  -
       return 0;
   }
   
   #endif /* XDS_TEST_XDS_MYSTRUCT */
  +
  Index: ossp-pkg/srpc/libxds/xds_test_xdr.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xds_test_xdr.c
  --- ossp-pkg/srpc/libxds/xds_test_xdr.c	2001/08/09 19:58:35	1.2
  +++ ossp-pkg/srpc/libxds/xds_test_xdr.c	2001/08/09 20:59:05	1.3
  @@ -37,7 +37,7 @@
   
   #ifdef XDS_TEST_XDR_INT32
   
  -int main()
  +int main(int argc, char *argv[])
   {
       XDR xdrs;
       char xdr_buf[1024];
  @@ -59,7 +59,6 @@
       size_t i;
   
       /* Encode the values array using the RPC-XDR implementation. */
  -
       xdrmem_create(&xdrs, xdr_buf, sizeof (xdr_buf), XDR_ENCODE);
       for (i = 0; i < sizeof (values) / sizeof (xds_int32_t); ++i)
           xdr_int32_t(&xdrs, &values[i]);
  @@ -67,7 +66,6 @@
       xdr_destroy(&xdrs);
   
       /* Encode the values array using the XDS implementation. */
  -
       xds = xds_init(XDS_ENCODE);
       if (xds == NULL) {
           printf("Failed to initialize XDS context.\n");
  @@ -91,7 +89,6 @@
       xds_destroy(xds);
   
       /* Both buffers must be equal now. */
  -
       if (xdr_buf_size != xds_buf_size) {
           printf("The buffer sizes don't match: %d != %d.\n", xdr_buf_size,
                  xds_buf_size);
  @@ -103,9 +100,8 @@
       }
   
       /* Now we decode the values again using the XDS implementation and
  -     * compare them to our original values. Obviously, they should not
  -     * differ. */
  -
  +       compare them to our original values. Obviously, they should not
  +       differ. */
       xds = xds_init(XDS_DECODE);
       if (xds == NULL) {
           printf("Failed to initialize XDS context.\n");
  @@ -133,7 +129,6 @@
       xds_destroy(xds);
   
       /* Everything went fine. */
  -
       return 0;
   }
   
  @@ -142,13 +137,13 @@
   #ifdef XDS_TEST_XDR_UINT32
   
   #ifdef __FreeBSD__
  -static int xdr_uint32_t(XDR * xdrs, uint32_t * val)
  +static int xdr_uint32_t(XDR *xdrs, uint32_t *val)
   {
       return xdr_u_int32_t(xdrs, val);
   }
   #endif
   
  -int main()
  +int main(int argc, char *argv[])
   {
       XDR xdrs;
       char xdr_buf[1024];
  @@ -169,7 +164,6 @@
       size_t i;
   
       /* Encode the values array using the RPC-XDR implementation. */
  -
       xdrmem_create(&xdrs, xdr_buf, sizeof (xdr_buf), XDR_ENCODE);
       for (i = 0; i < sizeof (values) / sizeof (xds_uint32_t); ++i)
           xdr_uint32_t(&xdrs, &values[i]);
  @@ -177,7 +171,6 @@
       xdr_destroy(&xdrs);
   
       /* Encode the values array using the XDS implementation. */
  -
       xds = xds_init(XDS_ENCODE);
       if (xds == NULL) {
           printf("Failed to initialize XDS context.\n");
  @@ -201,7 +194,6 @@
       xds_destroy(xds);
   
       /* Both buffers must be equal now. */
  -
       if (xdr_buf_size != xds_buf_size) {
           printf("The buffer sizes don't match: %d != %d.\n", xdr_buf_size,
                  xds_buf_size);
  @@ -213,9 +205,8 @@
       }
   
       /* Now we decode the values again using the XDS implementation and
  -     * compare them to our original values. Obviously, they should not
  -     * differ. */
  -
  +       compare them to our original values. Obviously, they should not
  +       differ. */
       xds = xds_init(XDS_DECODE);
       if (xds == NULL) {
           printf("Failed to initialize XDS context.\n");
  @@ -243,7 +234,6 @@
       xds_destroy(xds);
   
       /* Everything went fine. */
  -
       return 0;
   }
   
  @@ -253,7 +243,7 @@
   
   #ifdef XDS_HAVE_64_BIT_SUPPORT
   
  -int main()
  +int main(int argc, char *argv[])
   {
       XDR xdrs;
       char xdr_buf[1024];
  @@ -275,7 +265,6 @@
       size_t i;
   
       /* Encode the values array using the RPC-XDR implementation. */
  -
       xdrmem_create(&xdrs, xdr_buf, sizeof (xdr_buf), XDR_ENCODE);
       for (i = 0; i < sizeof (values) / sizeof (xds_int64_t); ++i)
           xdr_int64_t(&xdrs, &values[i]);
  @@ -283,7 +272,6 @@
       xdr_destroy(&xdrs);
   
       /* Encode the values array using the XDS implementation. */
  -
       xds = xds_init(XDS_ENCODE);
       if (xds == NULL) {
           printf("Failed to initialize XDS context.\n");
  @@ -307,7 +295,6 @@
       xds_destroy(xds);
   
       /* Both buffers must be equal now. */
  -
       if (xdr_buf_size != xds_buf_size) {
           printf("The buffer sizes don't match: %d != %d.\n", xdr_buf_size,
                  xds_buf_size);
  @@ -319,9 +306,8 @@
       }
   
       /* Now we decode the values again using the XDS implementation and
  -     * compare them to our original values. Obviously, they should not
  -     * differ. */
  -
  +       compare them to our original values. Obviously, they should not
  +       differ. */
       xds = xds_init(XDS_DECODE);
       if (xds == NULL) {
           printf("Failed to initialize XDS context.\n");
  @@ -349,7 +335,6 @@
       xds_destroy(xds);
   
       /* Everything went fine. */
  -
       return 0;
   }
   
  @@ -362,13 +347,13 @@
   #ifdef XDS_HAVE_64_BIT_SUPPORT 
   
   #ifdef __FreeBSD__
  -static int xdr_uint64_t(XDR * xdrs, uint64_t * val)
  +static int xdr_uint64_t(XDR *xdrs, uint64_t *val)
   {
       return xdr_u_int64_t(xdrs, val);
   }
   #endif
   
  -int main()
  +int main(int argc, char *argv[])
   {
       XDR xdrs;
       char xdr_buf[1024];
  @@ -389,7 +374,6 @@
       size_t i;
   
       /* Encode the values array using the RPC-XDR implementation. */
  -
       xdrmem_create(&xdrs, xdr_buf, sizeof (xdr_buf), XDR_ENCODE);
       for (i = 0; i < sizeof (values) / sizeof (xds_uint64_t); ++i)
           xdr_uint64_t(&xdrs, &values[i]);
  @@ -397,7 +381,6 @@
       xdr_destroy(&xdrs);
   
       /* Encode the values array using the XDS implementation. */
  -
       xds = xds_init(XDS_ENCODE);
       if (xds == NULL) {
           printf("Failed to initialize XDS context.\n");
  @@ -421,7 +404,6 @@
       xds_destroy(xds);
   
       /* Both buffers must be equal now. */
  -
       if (xdr_buf_size != xds_buf_size) {
           printf("The buffer sizes don't match: %d != %d.\n", xdr_buf_size,
                  xds_buf_size);
  @@ -433,9 +415,8 @@
       }
   
       /* Now we decode the values again using the XDS implementation and
  -     * compare them to our original values. Obviously, they should not
  -     * differ. */
  -
  +       compare them to our original values. Obviously, they should not
  +       differ. */
       xds = xds_init(XDS_DECODE);
       if (xds == NULL) {
           printf("Failed to initialize XDS context.\n");
  @@ -463,7 +444,6 @@
       xds_destroy(xds);
   
       /* Everything went fine. */
  -
       return 0;
   }
   
  @@ -473,7 +453,7 @@
   
   #ifdef XDS_TEST_XDR_STRING
   
  -int main()
  +int main(int argc, char *argv[])
   {
       xds_t *xds;
       char *buffer;
  @@ -483,8 +463,7 @@
       char *new_msg;
   
       /* Encode the string as octet stream. Then erase the buffer and decode
  -     * the string back, verifying that it hasn't changed. */
  -
  +       the string back, verifying that it hasn't changed. */
       xds = xds_init(XDS_ENCODE);
       if (xds == NULL) {
           printf("Failed to initialize XDS context.\n");
  @@ -538,7 +517,6 @@
       free(new_msg);
   
       /* Everything went fine. */
  -
       return 0;
   }
   
  @@ -546,7 +524,7 @@
   
   #ifdef XDS_TEST_XDR_STRING_EMPTY
   
  -int main()
  +int main(int argc, char *argv[])
   {
       xds_t *xds;
       char *buffer;
  @@ -556,8 +534,7 @@
       char *new_msg;
   
       /* Encode the string as octet stream. Then erase the buffer and decode
  -     * the string back, verifying that it hasn't changed. */
  -
  +       the string back, verifying that it hasn't changed. */
       xds = xds_init(XDS_ENCODE);
       if (xds == NULL) {
           printf("Failed to initialize XDS context.\n");
  @@ -607,7 +584,6 @@
       free(new_msg);
   
       /* Everything went fine. */
  -
       return 0;
   }
   
  @@ -615,7 +591,7 @@
   
   #ifdef XDS_TEST_XDR_OCTETSTREAM
   
  -int main()
  +int main(int argc, char *argv[])
   {
       xds_t *xds;
       char *buffer;
  @@ -626,8 +602,7 @@
       size_t new_msg_size;
   
       /* Encode the string as octet stream. Then erase the buffer and decode
  -     * the string back, verifying that it hasn't changed. */
  -
  +       the string back, verifying that it hasn't changed. */
       xds = xds_init(XDS_ENCODE);
       if (xds == NULL) {
           printf("Failed to initialize XDS context.\n");
  @@ -682,7 +657,6 @@
       free(new_msg);
   
       /* Everything went fine. */
  -
       return 0;
   }
   
  @@ -690,7 +664,7 @@
   
   #ifdef XDS_TEST_XDR_OCTETSTREAM_EMPTY
   
  -int main()
  +int main(int argc, char *argv[])
   {
       xds_t *xds;
       char *buffer;
  @@ -701,8 +675,7 @@
       size_t new_msg_size;
   
       /* Encode the string as octet stream. Then erase the buffer and decode
  -     * the string back, verifying that it hasn't changed. */
  -
  +       the string back, verifying that it hasn't changed. */
       xds = xds_init(XDS_ENCODE);
       if (xds == NULL) {
           printf("Failed to initialize XDS context.\n");
  @@ -723,8 +696,7 @@
       }
       xds_destroy(xds);
       if (buffer_size % 4 != 0) {
  -        printf
  -            ("The encoded octet stream's buffer size is not a multiple of 4.\n");
  +        printf("The encoded octet stream's buffer size is not a multiple of 4.\n");
           return 1;
       }
   
  @@ -757,8 +729,8 @@
       free(new_msg);
   
       /* Everything went fine. */
  -
       return 0;
   }
   
   #endif /* XDS_TEST_XDR_OCTETSTREAM_EMPTY */
  +
  Index: ossp-pkg/srpc/libxds/xds_test_xml.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xds_test_xml.c
  --- ossp-pkg/srpc/libxds/xds_test_xml.c	2001/08/09 19:58:35	1.2
  +++ ossp-pkg/srpc/libxds/xds_test_xml.c	2001/08/09 20:59:05	1.3
  @@ -35,7 +35,7 @@
   
   #ifdef XDS_TEST_XML_INT32
   
  -int main()
  +int main(int argc, char *argv[])
   {
       xds_t *xds;
       char *buffer;
  @@ -53,7 +53,6 @@
       size_t i;
   
       /* Encode the values array, then decode it back and compare the numbers. */
  -
       xds = xds_init(XDS_ENCODE);
       if (xds == NULL) {
           printf("Failed to initialize XDS context.\n");
  @@ -125,7 +124,6 @@
       xds_destroy(xds);
   
       /* Everything went fine. */
  -
       return 0;
   }
   
  @@ -133,7 +131,7 @@
   
   #ifdef XDS_TEST_XML_UINT32
   
  -int main()
  +int main(int argc, char *argv[])
   {
       xds_t *xds;
       char *buffer;
  @@ -150,7 +148,6 @@
       size_t i;
   
       /* Encode the values array, then decode it back and compare the numbers. */
  -
       xds = xds_init(XDS_ENCODE);
       if (xds == NULL) {
           printf("Failed to initialize XDS context.\n");
  @@ -202,7 +199,6 @@
       xds_destroy(xds);
   
       /* Everything went fine. */
  -
       return 0;
   }
   
  @@ -212,7 +208,7 @@
   
   #ifdef XDS_HAVE_64_BIT_SUPPORT
   
  -int main()
  +int main(int argc, char *argv[])
   {
       xds_t *xds;
       char *buffer;
  @@ -230,7 +226,6 @@
       size_t i;
   
       /* Encode the values array, then decode it back and compare the numbers. */
  -
       xds = xds_init(XDS_ENCODE);
       if (xds == NULL) {
           printf("Failed to initialize XDS context.\n");
  @@ -280,7 +275,6 @@
       xds_destroy(xds);
   
       /* Everything went fine. */
  -
       return 0;
   }
   
  @@ -292,7 +286,7 @@
   
   #ifdef XDS_HAVE_64_BIT_SUPPORT
   
  -int main()
  +int main(int argc, char *argv[])
   {
       xds_t *xds;
       char *buffer;
  @@ -309,7 +303,6 @@
       size_t i;
   
       /* Encode the values array, then decode it back and compare the numbers. */
  -
       xds = xds_init(XDS_ENCODE);
       if (xds == NULL) {
           printf("Failed to initialize XDS context.\n");
  @@ -359,7 +352,6 @@
       xds_destroy(xds);
   
       /* Everything went fine. */
  -
       return 0;
   }
   
  @@ -369,7 +361,7 @@
   
   #ifdef XDS_TEST_XML_DOUBLE
   
  -int main()
  +int main(int argc, char *argv[])
   {
   #if 0
       xds_t *xds;
  @@ -445,7 +437,7 @@
   
   #ifdef XDS_TEST_XML_STRING
   
  -int main()
  +int main(int argc, char *argv[])
   {
       xds_t *xds;
       char *buffer;
  @@ -455,8 +447,7 @@
       char *new_msg;
   
       /* Encode the string, then erase the buffer and decode the string back,
  -     * verifying that it hasn't changed. */
  -
  +       verifying that it hasn't changed. */
       xds = xds_init(XDS_ENCODE);
       if (xds == NULL) {
           printf("Failed to initialize XDS context.\n");
  @@ -512,7 +503,6 @@
       free(new_msg);
   
       /* Everything went fine. */
  -
       return 0;
   }
   
  @@ -520,7 +510,7 @@
   
   #ifdef XDS_TEST_XML_STRING_EMPTY
   
  -int main()
  +int main(int argc, char *argv[])
   {
       xds_t *xds;
       char *buffer;
  @@ -530,8 +520,7 @@
       char *new_msg;
   
       /* Encode the string, then erase the buffer and decode the string back,
  -     * verifying that it hasn't changed. */
  -
  +       verifying that it hasn't changed. */
       xds = xds_init(XDS_ENCODE);
       if (xds == NULL) {
           printf("Failed to initialize XDS context.\n");
  @@ -587,7 +576,6 @@
       free(new_msg);
   
       /* Everything went fine. */
  -
       return 0;
   }
   
  @@ -595,7 +583,7 @@
   
   #ifdef XDS_TEST_XML_OCTETSTREAM
   
  -int main()
  +int main(int argc, char *argv[])
   {
       xds_t *xds;
       char *buffer;
  @@ -606,8 +594,7 @@
       size_t new_msg_size;
   
       /* Encode the string as octet stream. Then erase the buffer and decode
  -     * the string back, verifying that it hasn't changed. */
  -
  +       the string back, verifying that it hasn't changed. */
       xds = xds_init(XDS_ENCODE);
       if (xds == NULL) {
           printf("Failed to initialize XDS context.\n");
  @@ -663,7 +650,6 @@
       free(new_msg);
   
       /* Everything went fine. */
  -
       return 0;
   }
   
  @@ -671,7 +657,7 @@
   
   #ifdef XDS_TEST_XML_OCTETSTREAM_EMPTY
   
  -int main()
  +int main(int argc, char *argv[])
   {
       xds_t *xds;
       char *buffer;
  @@ -682,8 +668,7 @@
       size_t new_msg_size;
   
       /* Encode the string as octet stream. Then erase the buffer and decode
  -     * the string back, verifying that it hasn't changed. */
  -
  +       the string back, verifying that it hasn't changed. */
       xds = xds_init(XDS_ENCODE);
       if (xds == NULL) {
           printf("Failed to initialize XDS context.\n");
  @@ -739,8 +724,8 @@
       free(new_msg);
   
       /* Everything went fine. */
  -
       return 0;
   }
   
   #endif /* XDS_TEST_XML_OCTETSTREAM_EMPTY */
  +

From ossp-cvs-owner@ossp.org  Thu Aug  9 23:00:12 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f79L0BJ49898; Thu, 9 Aug 2001 23:00:11 +0200 (CEST)
Date: Thu, 9 Aug 2001 23:00:11 +0200 (CEST)
Message-Id: <200108092100.f79L0BJ49898@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xds.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Aug-2001 23:00:11
  Branch: HEAD                             Handle: 2001080922001000

  Modified files:
    ossp-pkg/srpc/libxds    xds.c

  Log:
    Add still missing parameter sanity checks

  Summary:
    Revision    Changes     Path
    1.5         +8  -0      ossp-pkg/srpc/libxds/xds.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xds.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xds.c
  --- ossp-pkg/srpc/libxds/xds.c	2001/08/09 20:59:05	1.4
  +++ ossp-pkg/srpc/libxds/xds.c	2001/08/09 21:00:10	1.5
  @@ -295,6 +295,10 @@
       int rc;
       va_list args;
   
  +    /* Sanity checks. */
  +    xds_check_parameter(xds != NULL);
  +    xds_check_parameter(fmt != NULL);
  +
       va_start(args, fmt);
       rc = xds_vencode(xds, fmt, args);
       va_end(args);
  @@ -422,6 +426,10 @@
   {
       int rc;
       va_list args;
  +
  +    /* Sanity checks. */
  +    xds_check_parameter(xds != NULL);
  +    xds_check_parameter(fmt != NULL);
   
       va_start(args, fmt);
       rc = xds_vdecode(xds, fmt, args);

From ossp-cvs-owner@ossp.org  Thu Aug  9 23:05:20 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f79L5Jl50869; Thu, 9 Aug 2001 23:05:19 +0200 (CEST)
Date: Thu, 9 Aug 2001 23:05:19 +0200 (CEST)
Message-Id: <200108092105.f79L5Jl50869@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xds_engine_xdr.c xds_engine_xml.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Aug-2001 23:05:19
  Branch: HEAD                             Handle: 2001080922051800

  Modified files:
    ossp-pkg/srpc/libxds    xds_engine_xdr.c xds_engine_xml.c

  Log:
    Group functions with leading summary comment

  Summary:
    Revision    Changes     Path
    1.4         +28 -0      ossp-pkg/srpc/libxds/xds_engine_xdr.c
    1.5         +32 -0      ossp-pkg/srpc/libxds/xds_engine_xml.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xds_engine_xdr.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xds_engine_xdr.c
  --- ossp-pkg/srpc/libxds/xds_engine_xdr.c	2001/08/09 20:59:05	1.3
  +++ ossp-pkg/srpc/libxds/xds_engine_xdr.c	2001/08/09 21:05:18	1.4
  @@ -31,6 +31,10 @@
   
   #include "xds.h"
   
  +/*
  + * Encode/decode signed 32-bit integer values.
  + */
  +
   int xdr_encode_int32(xds_t *xds, void *engine_context,
                        void *buffer, size_t buffer_size,
                        size_t *used_buffer_size, va_list *args)
  @@ -95,6 +99,10 @@
       return XDS_OK;
   }
   
  +/*
  + * Encode/decode unsigned 32-bit integer values.
  + */
  +
   int xdr_encode_uint32(xds_t *xds, void *engine_context,
                         void *buffer, size_t buffer_size,
                         size_t *used_buffer_size, va_list *args)
  @@ -138,6 +146,10 @@
   
   #ifdef XDS_HAVE_64_BIT_SUPPORT
   
  +/*
  + * Encode/decode signed 64-bit integer values.
  + */
  +
   int xdr_encode_int64(xds_t *xds, void *engine_context,
                        void *buffer, size_t buffer_size,
                        size_t *used_buffer_size, va_list *args)
  @@ -222,6 +234,10 @@
       return XDS_OK;
   }
   
  +/*
  + * Encode/decode unsigned 64-bit integer values.
  + */
  +
   int xdr_encode_uint64(xds_t *xds, void *engine_context,
                         void *buffer, size_t buffer_size,
                         size_t *used_buffer_size, va_list *args)
  @@ -277,6 +293,10 @@
   
   #endif /* XDS_HAVE_64_BIT_SUPPORT */
   
  +/*
  + * Encode/decode double-precision floating point values.
  + */
  +
   int xdr_encode_double(xds_t *xds, void *engine_context,
                         void *buffer, size_t buffer_size,
                         size_t *used_buffer_size, va_list *args)
  @@ -293,6 +313,10 @@
       return -1;
   }
   
  +/*
  + * Encode/decode NUL-terminated character strings.
  + */
  +
   int xdr_encode_string(xds_t *xds, void *engine_context,
                         void *buffer, size_t buffer_size,
                         size_t *used_buffer_size, va_list *args)
  @@ -369,6 +393,10 @@
   
       return XDS_OK;
   }
  +
  +/*
  + * Encode/decode octet streams.
  + */
   
   int xdr_encode_octetstream(xds_t *xds, void *engine_context,
                              void *buffer, size_t buffer_size,
  Index: ossp-pkg/srpc/libxds/xds_engine_xml.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xds_engine_xml.c
  --- ossp-pkg/srpc/libxds/xds_engine_xml.c	2001/08/09 20:59:05	1.4
  +++ ossp-pkg/srpc/libxds/xds_engine_xml.c	2001/08/09 21:05:18	1.5
  @@ -33,6 +33,10 @@
   
   #include "xds.h"
   
  +/*
  + * Encode/decode XML document framework
  + */
  +
   static const char xds_xml_begin_text[] =
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\">\n"
       "<!DOCTYPE xds SYSTEM \"http://www.ossp.org/pkg/xds/xds-xml.dtd\">\n"
  @@ -81,6 +85,10 @@
       return XDS_OK;
   }
   
  +/*
  + * Encode/decode signed 32-bit integer values.
  + */
  +
   int xml_encode_int32(xds_t *xds, void *engine_context,
                        void *buffer, size_t buffer_size,
                        size_t *used_buffer_size, va_list *args)
  @@ -167,6 +175,10 @@
       return XDS_OK;
   }
   
  +/*
  + * Encode/decode unsigned 32-bit integer values.
  + */
  +
   int xml_encode_uint32(xds_t *xds, void *engine_context,
                         void *buffer, size_t buffer_size,
                         size_t *used_buffer_size, va_list *args)
  @@ -237,6 +249,10 @@
   
   #ifdef XDS_HAVE_64_BIT_SUPPORT
   
  +/*
  + * Encode/decode signed 64-bit integer values.
  + */
  +
   int xml_encode_int64(xds_t *xds, void *engine_context,
                        void *buffer, size_t buffer_size,
                        size_t *used_buffer_size, va_list *args)
  @@ -323,6 +339,10 @@
       return XDS_OK;
   }
   
  +/*
  + * Encode/decode unsigned 64-bit integer values.
  + */
  +
   int xml_encode_uint64(xds_t *xds, void *engine_context,
                         void *buffer, size_t buffer_size,
                         size_t *used_buffer_size, va_list *args)
  @@ -393,6 +413,10 @@
   
   #endif /* XDS_HAVE_64_BIT_SUPPORT */
   
  +/*
  + * Encode/decode double-precision floating point values.
  + */
  +
   int xml_encode_double(xds_t *xds, void *engine_context,
                         void *buffer, size_t buffer_size,
                         size_t *used_buffer_size, va_list *args)
  @@ -409,6 +433,10 @@
       return -1;
   }
   
  +/*
  + * Encode/decode NUL-terminated character strings.
  + */
  +
   #define bits(c)     (0x80 | ((c) & 0x3F))
   #define put(c)      *strptr++ = (c);
   #define putbits(c)  put(bits(c))
  @@ -723,6 +751,10 @@
   
       return XDS_OK;
   }
  +
  +/*
  + * Encode/decode octet streams.
  + */
   
   static const char xds_base64[] =
       "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

From ossp-cvs-owner@ossp.org  Thu Aug  9 23:14:46 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f79LEj351767; Thu, 9 Aug 2001 23:14:45 +0200 (CEST)
Date: Thu, 9 Aug 2001 23:14:45 +0200 (CEST)
Message-Id: <200108092114.f79LEj351767@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xds-xml.dtd
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Aug-2001 23:14:45
  Branch: HEAD                             Handle: 2001080922144400

  Added files:
    ossp-pkg/srpc/libxds    xds-xml.dtd

  Log:
    Add (untested) DTD for our XDS XML dialect.

  Summary:
    Revision    Changes     Path
    1.1         +44 -0      ossp-pkg/srpc/libxds/xds-xml.dtd
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xds-xml.dtd
  ============================================================
  $ cvs update -p -r1.1 xds-xml.dtd
  <!-- =========================================================== 
       XDS - OSSP Extensible Data Serialization Library
       Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
       Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   
       This file is part of OSSP XDS, an extensible data serialization
       library which can be found at http://www.ossp.com/pkg/xds/.
   
       Permission to use, copy, modify, and distribute this software for
       any purpose with or without fee is hereby granted, provided that
       the above copyright notice and this permission notice appear in all
       copies.
   
       THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
       WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
       MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
       IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
       CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
       SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
       LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
       USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
       ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
       OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
       OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
       SUCH DAMAGE.
  
       xds-xml.dtd: Document Type Description (DTD) for XDS XML
       =========================================================== -->
  
  <!-- :::: Formal public identifier to identify this DTD :::: -->
  
  <!ENTITY % XDS.version "-//OSSP//DTD XDS XML 0.1.0//EN" >
  
  <!-- :::: DTD rule set :::: -->
  
  <!ELEMENT xds         ((int32|uint32|int64|uint64|double|string|octetstream)*)>
  <!ELEMENT int32       (#PCDATA)>
  <!ELEMENT uint32      (#PCDATA)>
  <!ELEMENT int64       (#PCDATA)>
  <!ELEMENT uint64      (#PCDATA)>
  <!ELEMENT double      (#PCDATA)>
  <!ELEMENT string      (#PCDATA)>
  <!ELEMENT octetstream (#PCDATA)>
  

From ossp-cvs-owner@ossp.org  Thu Aug  9 23:19:30 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f79LJSY52614; Thu, 9 Aug 2001 23:19:28 +0200 (CEST)
Date: Thu, 9 Aug 2001 23:19:28 +0200 (CEST)
Message-Id: <200108092119.f79LJSY52614@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xds-config.in xds-config.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Aug-2001 23:19:28
  Branch: HEAD                             Handle: 2001080922192800

  Added files:
    ossp-pkg/srpc/libxds    xds-config.in xds-config.pod

  Log:
    Add xds-config stuff for building applications with OSSP XDS.
    This will be installed with XDS soon...

  Summary:
    Revision    Changes     Path
    1.1         +144 -0     ossp-pkg/srpc/libxds/xds-config.in
    1.1         +161 -0     ossp-pkg/srpc/libxds/xds-config.pod
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xds-config.in
  ============================================================
  $ cvs update -p -r1.1 xds-config.in
  #!/bin/sh
  ##
  ##  XDS - OSSP Extensible Data Serialization Library
  ##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  ##  
  ##  This file is part of OSSP XDS, an extensible data serialization
  ##  library which can be found at http://www.ossp.com/pkg/xds/.
  ##  
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##  
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  xds-config.in: XDS library build utility
  ##
  
  DIFS=' 	
  '
  
  prefix="@prefix@"
  exec_prefix="@exec_prefix@"
  
  xds_prefix="$prefix"
  xds_exec_prefix="$exec_prefix"
  xds_bindir="@bindir@"
  xds_libdir="@libdir@"
  xds_includedir="@includedir@"
  xds_mandir="@mandir@"
  xds_datadir="@datadir@"
  xds_acdir="@datadir@/aclocal"
  xds_cflags="@CFLAGS@"
  xds_ldflags="@LDFLAGS@"
  xds_libs="@LIBS@"
  xds_version="@XDS_VERSION_STR@"
  
  help=no
  version=no
  
  usage="xds-config"
  usage="$usage [--help] [--version] [--all]"
  usage="$usage [--prefix] [--exec-prefix] [--bindir] [--libdir] [--includedir] [--mandir] [--datadir] [--acdir]"
  usage="$usage [--cflags] [--ldflags] [--libs] [--libs++]"
  if [ $# -eq 0 ]; then
      echo "xds-config:Error: Invalid option" 1>&2
      echo "xds-config:Usage: $usage" 1>&2
      exit 1
  fi
  output=''
  output_extra=''
  all=no
  prev=''
  OIFS="$IFS" IFS="$DIFS"
  for option
  do
      if [ ".$prev" != . ]; then
          eval "$prev=\$option"
          prev=''
          continue
      fi
      case "$option" in
          -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
             *) optarg='' ;;
      esac
      case "$option" in
          --help|-h)
              echo "Usage: $usage"
              exit 0
              ;;
          --version|-v)
              echo "OSSP XDS $xds_version"
              exit 0
              ;;
          --all)
              all=yes
              ;;
          --prefix)
              output="$output $xds_prefix"
              ;;
          --exec-prefix)
              output="$output $xds_exec_prefix"
              ;;
          --bindir)
              output="$output $xds_bindir"
              ;;
          --libdir)
              output="$output $xds_libdir"
              ;;
          --includedir)
              output="$output $xds_includedir"
              ;;
          --mandir)
              output="$output $xds_mandir"
              ;;
          --datadir)
              output="$output $xds_datadir"
              ;;
          --acdir)
              output="$output $xds_acdir"
              ;;
          --cflags)
              output="$output -I$xds_includedir"
              output_extra="$output_extra $xds_cflags"
              ;;
          --ldflags)
              output="$output -L$xds_libdir"
              output_extra="$output_extra $xds_ldflags"
              ;;
          --libs)
              output="$output -lxds"
              output_extra="$output_extra $xds_libs"
              ;;
          * )
              echo "xds-config:Error: Invalid option" 1>&2
              echo "xds-config:Usage: $usage" 1>&2
              exit 1;
              ;;
      esac
  done
  IFS="$OIFS"
  if [ ".$prev" != . ]; then
      echo "xds-config:Error: missing argument to --`echo $prev | sed 's/_/-/g'`" 1>&2
      exit 1
  fi
  if [ ".$output" != . ]; then
      if [ ".$all" = .yes ]; then
          output="$output $output_extra"
      fi
      echo $output
  fi
  
  Index: ossp-pkg/srpc/libxds/xds-config.pod
  ============================================================
  $ cvs update -p -r1.1 xds-config.pod
  ##
  ##  XDS - OSSP Extensible Data Serialization Library
  ##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  ##  
  ##  This file is part of OSSP XDS, an extensible data serialization
  ##  library which can be found at http://www.ossp.com/pkg/xds/.
  ##  
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##  
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  xds-config.pod: XDS library build utility manual page
  ##
  
  =pod
  
  =head1 NAME
  
  B<xds-config> - XDS library build utility
  
  =head1 VERSION
  
  OSSP XDS XDS_VERSION_STR
  
  =head1 SYNOPSIS
  
  B<xds-config>
  [B<--help>]
  [B<--version>]
  [B<--all>]
  [B<--prefix>]
  [B<--exec-prefix>]
  [B<--bindir>]
  [B<--libdir>]
  [B<--includedir>]
  [B<--mandir>]
  [B<--datadir>]
  [B<--acdir>]
  [B<--cflags>]
  [B<--ldflags>]
  [B<--libs>]
  [B<--libs++>]
  
  =head1 DESCRIPTION
  
  The B<xds-config> program is a little helper utility for easy configuring and
  building applications based on the xds(3) library.  It can be used to query the
  C compiler and linker flags which are required to correctly compile and link
  the application against the xds(3) library.
  
  =head1 OPTIONS
  
  B<xds-config> accepts the following options:
  
  =over 4
  
  =item B<--help>
  
  Prints the short usage information.
  
  =item B<--version>
  
  Prints the version number and date of the installed xds(3) library.
  
  =item B<--all>
  
  Forces the output of all flags, that is, including extra flags which are not
  B<XDS> specific.
  
  =item B<--prefix>
  
  Prints the installation prefix of architecture independent files
  
  =item B<--exec-prefix>
  
  Prints the installation prefix of architecture dependent files.
  
  =item B<--bindir>
  
  Prints the installation directory of binaries.
  
  =item B<--libdir>
  
  Prints the installation directory of libraries.
  
  =item B<--includedir>
  
  Prints the installation directory of include headers.
  
  =item B<--mandir>
  
  Prints the installation directory of manual pages.
  
  =item B<--datadir>
  
  Prints the installation directory of shared data.
  
  =item B<--acdir>
  
  Prints the installation directory of B<autoconf> data.
  
  =item B<--cflags>
  
  Prints the C compiler flags which are needed to compile the xds(3)-based
  application. The output is usually added to the C<CFLAGS> variable of the
  applications C<Makefile>.
  
  =item B<--ldflags>
  
  Prints the linker flags (C<-L>) which are needed to link the application with
  the xds(3) library. The output is usually added to the C<LDFLAGS> variable of
  the applications C<Makefile>.
  
  =item B<--libs>
  
  Prints the library flags (C<-l>) which are needed to link the application with
  the C xds(3) library. The output is usually added to the C<LIBS> variable of the
  applications C<Makefile>.
  
  =back
  
  =head1 EXAMPLE
  
   CC      = cc
   CFLAGS  = -O `xds-config --cflags`
   LDFLAGS = `xds-config --ldflags`
   LIBS    = -lm `xds-config --libs`
  
   all: foo
   foo: foo.o
       $(CC) $(LDFLAGS) -o foo foo.o $(LIBS)
   foo.o: foo.c
       $(CC) $(CFLAGS) -c foo.c
  
  =head1 SEE ALSO
  
  xds(3), cc(1).
  
  =head1 AUTHOR
  
   Ralf S. Engelschall
   rse@engelschall.com
   www.engelschall.com
  
  =cut
  

From ossp-cvs-owner@ossp.org  Thu Aug  9 23:21:06 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f79LL5I52768; Thu, 9 Aug 2001 23:21:05 +0200 (CEST)
Date: Thu, 9 Aug 2001 23:21:05 +0200 (CEST)
Message-Id: <200108092121.f79LL5I52768@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds configure.ac
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Aug-2001 23:21:05
  Branch: HEAD                             Handle: 2001080922210400

  Modified files:
    ossp-pkg/srpc/libxds    configure.ac

  Log:
    Already add xds-config to Autoconf stuff.

  Summary:
    Revision    Changes     Path
    1.19        +2  -2      ossp-pkg/srpc/libxds/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/configure.ac
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 configure.ac
  --- ossp-pkg/srpc/libxds/configure.ac	2001/08/09 19:58:35	1.18
  +++ ossp-pkg/srpc/libxds/configure.ac	2001/08/09 21:21:04	1.19
  @@ -29,7 +29,7 @@
   
   AC_INIT(xds.h.in)
   AC_PREREQ(2.52)
  -AC_REVISION($Revision: 1.18 $)
  +AC_REVISION($Revision: 1.19 $)
   
   dnl Get rid of the lousy -g and -O defaults in CFLAGS.
   dnl
  @@ -99,6 +99,6 @@
   
   dnl Write results.
   dnl
  -AC_CONFIG_FILES(xds.h Makefile docs/Makefile)
  +AC_CONFIG_FILES(xds.h xds-config Makefile docs/Makefile)
   AC_CONFIG_COMMANDS([default], [chmod -w xds.h Makefile docs/Makefile])
   AC_OUTPUT

From ossp-cvs-owner@ossp.org  Thu Aug  9 23:23:51 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f79LNoq52992; Thu, 9 Aug 2001 23:23:50 +0200 (CEST)
Date: Thu, 9 Aug 2001 23:23:50 +0200 (CEST)
Message-Id: <200108092123.f79LNoq52992@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds .cvsignore
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Aug-2001 23:23:50
  Branch: HEAD                             Handle: 2001080922235000

  Modified files:
    ossp-pkg/srpc/libxds    .cvsignore

  Log:
    Ignore generated xds-config script

  Summary:
    Revision    Changes     Path
    1.6         +1  -0      ossp-pkg/srpc/libxds/.cvsignore
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/.cvsignore
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 .cvsignore
  --- ossp-pkg/srpc/libxds/.cvsignore	2001/08/08 19:15:23	1.5
  +++ ossp-pkg/srpc/libxds/.cvsignore	2001/08/09 21:23:50	1.6
  @@ -2,3 +2,4 @@
   .*.l
   xds.3
   xds.h Makefile configure
  +xds-config

From ossp-cvs-owner@ossp.org  Thu Aug  9 23:28:05 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f79LS4h53349; Thu, 9 Aug 2001 23:28:04 +0200 (CEST)
Date: Thu, 9 Aug 2001 23:28:04 +0200 (CEST)
Message-Id: <200108092128.f79LS4h53349@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds ChangeLog INSTALL NEWS README
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Aug-2001 23:28:03
  Branch: HEAD                             Handle: 2001080922280300

  Added files:
    ossp-pkg/srpc/libxds    ChangeLog INSTALL NEWS README

  Log:
    Add a bunch of files in advance to conform to GNU standards

  Summary:
    Revision    Changes     Path
    1.1         BLOB        ossp-pkg/srpc/libxds/ChangeLog
    1.1         BLOB        ossp-pkg/srpc/libxds/INSTALL
    1.1         BLOB        ossp-pkg/srpc/libxds/NEWS
    1.1         +41 -0      ossp-pkg/srpc/libxds/README
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/ChangeLog
  ============================================================
  $ cvs update -p -r1.1 ChangeLog | uuencode ChangeLog
  Index: ossp-pkg/srpc/libxds/INSTALL
  ============================================================
  $ cvs update -p -r1.1 INSTALL | uuencode INSTALL
  Index: ossp-pkg/srpc/libxds/NEWS
  ============================================================
  $ cvs update -p -r1.1 NEWS | uuencode NEWS
  Index: ossp-pkg/srpc/libxds/README
  ============================================================
  $ cvs update -p -r1.1 README
                 
    OSSP XDS - eXtensible Data Serialization
    Version 0.1.0 (xx-Aug-2001)
  
    ABSTRACT
  
    The OSSP XDS library is [...]
  
    COPYRIGHT AND LICENSE
  
    Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
    Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  
    This file is part of OSSP XDS, an extensible data serialization
    library which can be found at http://www.ossp.com/pkg/xds/.
  
    Permission to use, copy, modify, and distribute this software for
    any purpose with or without fee is hereby granted, provided that
    the above copyright notice and this permission notice appear in all
    copies.
  
    THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
    WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
    IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
    CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
    USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    SUCH DAMAGE.
  
    HOME AND DOCUMENTATION
  
    The documentation and latest release can be found on
  
    o http://www.ossp.org/pkg/xds/
    o  ftp://ftp.ossp.org/pkg/xds/
  

From ossp-cvs-owner@ossp.org  Sat Aug 11 17:23:15 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7BFNB495288; Sat, 11 Aug 2001 17:23:11 +0200 (CEST)
Date: Sat, 11 Aug 2001 17:23:11 +0200 (CEST)
Message-Id: <200108111523.f7BFNB495288@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds .cvsignore Makefile.in README aclocal...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   11-Aug-2001 17:23:11
  Branch: HEAD                             Handle: 2001081116230900

  Added files:
    ossp-pkg/srpc/libxds    aclocal.m4 config.guess config.h.in config.sub
                            libtool.m4 ltmain.sh shtool xds.m4 xds_version.c
  Modified files:
    ossp-pkg/srpc/libxds    .cvsignore Makefile.in README configure.ac xds_p.h
                            xds_test.sh

  Log:
    First cut for GNU Libtool 1.4 & GNU Shtool 1.5 support. This needs a
    little bit more cleanup which will follow later, but I want to flush my
    pending work now in order to continue with other projects. The XDS build
    environment now is in sync with the usual style for OSSP libraries.

  Summary:
    Revision    Changes     Path
    1.7         +2  -0      ossp-pkg/srpc/libxds/.cvsignore
    1.25        +128 -43    ossp-pkg/srpc/libxds/Makefile.in
    1.2         +1  -1      ossp-pkg/srpc/libxds/README
    1.1         +214 -0     ossp-pkg/srpc/libxds/aclocal.m4
    1.1         +1371 -0    ossp-pkg/srpc/libxds/config.guess
    1.1         +34 -0      ossp-pkg/srpc/libxds/config.h.in
    1.1         +1362 -0    ossp-pkg/srpc/libxds/config.sub
    1.20        +21 -64     ossp-pkg/srpc/libxds/configure.ac
    1.1         +3397 -0    ossp-pkg/srpc/libxds/libtool.m4
    1.1         +4946 -0    ossp-pkg/srpc/libxds/ltmain.sh
    1.1         +0  -0      ossp-pkg/srpc/libxds/shtool
    1.1         +75 -0      ossp-pkg/srpc/libxds/xds.m4
    1.5         +4  -0      ossp-pkg/srpc/libxds/xds_p.h
    1.3         +5  -2      ossp-pkg/srpc/libxds/xds_test.sh
    1.1         +0  -0      ossp-pkg/srpc/libxds/xds_version.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/.cvsignore
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 .cvsignore
  --- ossp-pkg/srpc/libxds/.cvsignore	2001/08/09 21:23:50	1.6
  +++ ossp-pkg/srpc/libxds/.cvsignore	2001/08/11 15:23:09	1.7
  @@ -3,3 +3,5 @@
   xds.3
   xds.h Makefile configure
   xds-config
  +xds-config.1
  +config.h
  Index: ossp-pkg/srpc/libxds/Makefile.in
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 Makefile.in
  --- ossp-pkg/srpc/libxds/Makefile.in	2001/08/09 19:58:35	1.24
  +++ ossp-pkg/srpc/libxds/Makefile.in	2001/08/11 15:23:09	1.25
  @@ -27,49 +27,80 @@
   ##  Makefile.in: make(1) build procedure
   ##
   
  -CC        = @CC@
  -AR        = ar
  -RANLIB    = @RANLIB@
  -CPPFLAGS  = @CPPFLAGS@ @DEFS@ -D_GNU_SOURCE
  -CFLAGS    = @CFLAGS@
  -LDFLAGS   = @LDFLAGS@
  -LIBS      = @LIBS@
  -POD2MAN   = @POD2MAN@
  -
  -LIB_NAME  = libxds.a
  -LIB_OBJS  = xds.o xds_engine_xdr.o xds_engine_xml.o
  -TST_SRCS  = xds_test_lib.c xds_test_xdr.c xds_test_xml.c
  +@SET_MAKE@
   
  +#   installation paths
  +DESTDIR     =
  +TOP         = .
  +prefix      = @prefix@
  +exec_prefix = @exec_prefix@
  +bindir      = @bindir@
  +libdir      = @libdir@
  +includedir  = @includedir@
  +mandir      = @mandir@
  +
  +#   build tools
  +CC          = @CC@
  +LIBTOOL     = ./libtool
  +SHTOOL      = ./shtool
  +CPPFLAGS    = @CPPFLAGS@ @DEFS@ -D_GNU_SOURCE
  +CFLAGS      = @CFLAGS@
  +LDFLAGS     = @LDFLAGS@
  +LIBS        = @LIBS@
  +POD2MAN     = @POD2MAN@
  +
  +#   list of objects
  +LIB_NAME    = libxds.la
  +LIB_OBJS    = xds.lo xds_engine_xdr.lo xds_engine_xml.lo
  +TST_SRCS    = xds_test_lib.c xds_test_xdr.c xds_test_xml.c
  +
  +#   file containing the official version information
  +_VERSION_FILE = \
  +    xds_version.c
  +
  +#   helper macro for updating version information
  +_VERSION = \
  +    $(SHTOOL) version -lc -nXDS -pxds_ $$OPT $(_VERSION_FILE);\
  +    V=`$(SHTOOL) version -lc -dlong $(_VERSION_FILE)`;\
  +    sed -e "s/Version .*(.*)/Version $$V/g" <README >README.n && mv README.n README
  +
  +#   helper macro for generating a Unix manual page
  +_MANPAGE = \
  +    V1=`$(SHTOOL) version -lc -dshort $(_VERSION_FILE)`; \
  +    V2=`$(SHTOOL) version -lc -dlong $(_VERSION_FILE)`; \
  +    D=`$(SHTOOL) version -lc -dlong $(_VERSION_FILE) |\
  +       sed -e 's;.*(;;' -e 's;).*;;'`; \
  +    $(POD2MAN) --section=$${SEC} --center="$${ONELINE}" \
  +               --release="$$D" --date="$${NAME} $$V1" $(S)$${BASENAME}.pod |\
  +    sed -e "s;XDS_VERSION_STR;$$V2;" >$${BASENAME}.$${SEC}
  +
   .SUFFIXES:
  -.SUFFIXES: .c .o .pod .3
  +.SUFFIXES: .c .lo
  +
  +.PHONY:	clean distclean realclean check
  +
  +.c.lo:
  +	$(LIBTOOL) --mode=compile --quiet $(CC) -c $(CPPFLAGS) $(CFLAGS) $<
  +
  +all: $(LIB_NAME) xds.3 xds-config.1
  +
  +$(LIB_NAME): $(LIB_OBJS)
  +	$(LIBTOOL) --mode=link --quiet $(CC) -o $(LIB_NAME) $(LIB_OBJS) -rpath $(libdir) \
  +	    -version-info `$(SHTOOL) version -l c -d libtool xds_version.c`
   
  -.PHONY:	clean distclean realclean check docs
  +clean:
  +	-$(RM) $(LIB_OBJS)
  +	-$(RM) ./.*.t ./.*.l
  +	-$(RM) $(LIB_NAME)
  +	-$(RM) xds.3
   
  -.c.o:
  -	$(CC) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CFLAGS) -c $<
  -.pod.3:
  -	$(POD2MAN) --section=3 --center="XDS Library Programmer API" $< >$@
  -
  -all: $(LIB_NAME) xds.3
  -
  -$(LIB_NAME):	$(LIB_OBJS)
  -	@rm -f $@
  -	$(AR) cr $@ $(LIB_OBJS)
  -	$(RANLIB) $@
  -
  -clean::
  -	@(cd docs && $(MAKE) $@)
  -	-rm -f $(LIB_OBJS)
  -	-rm -f ./.*.t ./.*.l
  -	-rm -f $(LIB_NAME)
  -	-rm -f xds.3
  -
  -distclean::	clean
  -	@(cd docs && $(MAKE) $@)
  -	-rm -f config.log config.status Makefile
  +distclean: clean
  +	-$(RM) config.log config.status Makefile
  +	-$(RM) -r .libs >/dev/null 2>&1 || true
  +	-$(RM) xds.h
   
  -realclean::	distclean
  -	-rm -f configure
  +realclean: distclean
  +	-$(RM) configure
   
   check:		$(LIB_NAME) $(TST_SRCS)
   	-@for filename in $(TST_SRCS); do \
  @@ -77,15 +108,69 @@
               filebase=`echo $$filename | sed -e 's;\.c;;'`; \
               testbase=`echo $$testname | sed -e 's;^XDS_TEST_;;'`; \
   	        if [ ! -f ".$$testbase.t" ]; then \
  -                echo "$(CC) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CFLAGS) $(LDFLAGS) -D$$testname -o .$$testbase.t $$filebase.c $(LIB_NAME)"; \
  -                $(CC) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CFLAGS) $(LDFLAGS) -D$$testname -o .$$testbase.t $$filebase.c $(LIB_NAME); \
  +	            echo "$(LIBTOOL) --mode=link --quiet $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -D$$testname -o .$$testbase.t $$filebase.c $(LIB_NAME) $(LIBS)"; \
  +	            $(LIBTOOL) --mode=link --quiet $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -D$$testname -o .$$testbase.t $$filebase.c $(LIB_NAME) $(LIBS); \
               fi; \
           done; \
       done; \
  -    sh ./xds_test.sh ./.*.t
  +    sh ./xds_test.sh "$(LIBTOOL) --mode=execute" ./.*.t
   
  -docs:
  -	@(cd docs && $(MAKE))
  +#   build Unix manual pages
  +xds-config.1: xds-config.pod $(_VERSION_FILE)
  +	BASENAME="xds-config"; SEC=1; \
  +	NAME="XDS"; ONELINE="Extensible Data Serialization"; \
  +	$(_MANPAGE)
  +xds.3: xds.pod $(_VERSION_FILE)
  +	BASENAME="xds"; SEC=3; \
  +	NAME="XDS"; ONELINE="Extensible Data Serialization"; \
  +	$(_MANPAGE)
  +
  +#   perform standard installation procedure
  +install: all
  +	$(SHTOOL) mkdir -p -f -m 755 $(DESTDIR)$(bindir)
  +	$(SHTOOL) mkdir -p -f -m 755 $(DESTDIR)$(includedir)
  +	$(SHTOOL) mkdir -p -f -m 755 $(DESTDIR)$(libdir)
  +	$(SHTOOL) mkdir -p -f -m 755 $(DESTDIR)$(mandir)/man1
  +	$(SHTOOL) mkdir -p -f -m 755 $(DESTDIR)$(mandir)/man3
  +	$(SHTOOL) install -c -m 755 xds-config $(DESTDIR)$(bindir)/xds-config
  +	$(SHTOOL) install -c -m 644 xds-config.1 $(DESTDIR)$(mandir)/man1/xds-config.1
  +	$(SHTOOL) install -c -m 644 xds.3 $(DESTDIR)$(mandir)/man3/xds.3
  +	$(SHTOOL) install -c -m 644 xds.h $(DESTDIR)$(includedir)/xds.h
  +	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 \
  +	    libxds.la $(DESTDIR)$(libdir)/libxds.la
  +
  +#   perform standard uninstallation procedure
  +uninstall:
  +	@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libxds.la
  +	$(RM) $(DESTDIR)$(includedir)/xds.h
  +	$(RM) $(DESTDIR)$(mandir)/man3/xds.3
  +	$(RM) $(DESTDIR)$(mandir)/man1/xds-config.1
  +	$(RM) $(DESTDIR)$(bindir)/xds-config
  +	$(RMDIR) $(DESTDIR)$(mandir)/man3
  +	$(RMDIR) $(DESTDIR)$(mandir)/man1
  +	$(RMDIR) $(DESTDIR)$(mandir)
  +	$(RMDIR) $(DESTDIR)$(libdir)
  +	$(RMDIR) $(DESTDIR)$(includedir)
  +	$(RMDIR) $(DESTDIR)$(bindir)
  +
  +#   roll a distribution tarball
  +dist: distclean
  +	@$(SHTOOL) fixperm -v .; \
  +	V=`$(SHTOOL) version -l c -d short xds_version.c`; \
  +	$(SHTOOL) tarball -o xds-$${V}.tar.gz -d str-$${V} -u ossp -g ossp \
  +	                  -e 'CVS,\.cvsignore,\.[ao],^\.' -c 'gzip --best' .
  +
  +#   increase or update version information
  +new-version:
  +	@V="$(VERSION)"; \
  +	if [ ".$$V" != . ]; then \
  +		OPT="-s$$V"; \
  +	else \
  +		OPT="-e"; \
  +	fi; \
  +	$(_VERSION)
  +update-version:
  +	@OPT="-s`$(SHTOOL) version -lc -dshort $(_VERSION_FILE)`" && $(_VERSION)
   
   # Dependencies
   
  Index: ossp-pkg/srpc/libxds/README
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 README
  --- ossp-pkg/srpc/libxds/README	2001/08/09 21:28:03	1.1
  +++ ossp-pkg/srpc/libxds/README	2001/08/11 15:23:09	1.2
  @@ -1,6 +1,6 @@
                  
     OSSP XDS - eXtensible Data Serialization
  -  Version 0.1.0 (xx-Aug-2001)
  +  Version 0.9.0 (11-Aug-2001)
   
     ABSTRACT
   
  Index: ossp-pkg/srpc/libxds/aclocal.m4
  ============================================================
  $ cvs update -p -r1.1 aclocal.m4
  dnl ##
  dnl ##  XDS - OSSP Extensible Data Serialization Library
  dnl ##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  dnl ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  dnl ##  
  dnl ##  This file is part of OSSP XDS, an extensible data serialization
  dnl ##  library which can be found at http://www.ossp.com/pkg/xds/.
  dnl ##  
  dnl ##  Permission to use, copy, modify, and distribute this software for
  dnl ##  any purpose with or without fee is hereby granted, provided that
  dnl ##  the above copyright notice and this permission notice appear in all
  dnl ##  copies.
  dnl ##  
  dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  dnl ##  SUCH DAMAGE.
  dnl ##
  dnl ##  aclocal.m4: local autoconf macros
  dnl ##
  
  dnl ##
  dnl ##  Support for Configuration Headers
  dnl ##
  dnl ##  configure.in:
  dnl ##    AC_HEADLINE(<short-name>, <long-name>, 
  dnl ##                <vers-var>, <vers-file>, 
  dnl ##                <copyright>)
  dnl ##
  
  AC_DEFUN(AC_HEADLINE,[dnl
  AC_DIVERT_PUSH(NOTICE)dnl
  #   configuration header
  if test ".`echo dummy [$]@ | grep help`" = .; then
      #   bootstrapping shtool
      ac_prog=[$]0
  changequote(, )dnl
      ac_srcdir=`echo $ac_prog | sed -e 's%/[^/][^/]*$%%' -e 's%\([^/]\)/*$%\1%'`
  changequote([, ])dnl
      test ".$ac_srcdir" = ".$ac_prog" && ac_srcdir=.
      ac_shtool="$ac_srcdir/shtool"
  
      #   find out terminal sequences
      TB=`$ac_shtool echo -n -e %B 2>/dev/null`
      TN=`$ac_shtool echo -n -e %b 2>/dev/null`
  
      #   find out package version
      $3_STR="`$ac_shtool version -l c -d long $ac_srcdir/$4`"
      AC_SUBST($3_STR)
   
      #   friendly header ;)
      echo "Configuring ${TB}$1${TN} ($2), Version ${TB}${$3_STR}${TN}"
      echo "$5"
  
      #   additionally find out hex version
      $3_HEX="`$ac_shtool version -l c -d hex $ac_srcdir/$4`"
      AC_SUBST($3_HEX)
  fi
  AC_DIVERT_POP()
  ])dnl
  
  dnl ##
  dnl ##  Display Configuration Headers
  dnl ##
  dnl ##  configure.in:
  dnl ##    AC_MSG_PART(<text>)
  dnl ##
  
  define(AC_MSG_PART,[dnl
  if test ".$enable_subdir" != .yes; then
      AC_MSG_RESULT()
      AC_MSG_RESULT(${TB}$1:${TN})
  fi
  ])dnl
  
  dnl ##
  dnl ##  Support for Platform IDs
  dnl ##
  dnl ##  configure.in:
  dnl ##    AC_PLATFORM(<variable>)
  dnl ##
  
  AC_DEFUN(AC_PLATFORM,[
  if test ".$host" != .NONE && test ".$host" != .; then
      $1="$host"
  else
      $1=`${CONFIG_SHELL-/bin/sh} $srcdir/config.guess`
  fi
  $1=`${CONFIG_SHELL-/bin/sh} $srcdir/config.sub $$1` || exit 1
  AC_SUBST($1)
  if test ".$enable_subdir" != .yes; then
      echo "Platform: ${TB}${$1}${TN}"
  fi
  ])dnl
  
  dnl ##
  dnl ##  Check whether compiler option works
  dnl ##
  dnl ##  configure.in:
  dnl ##    AC_COMPILER_OPTION(<name>, <display>, <option>,
  dnl ##                       <action-success>, <action-failure>)
  dnl ##
  
  AC_DEFUN(AC_COMPILER_OPTION,[dnl
  AC_MSG_CHECKING(whether compiler option(s) $2 work)
  AC_CACHE_VAL(ac_cv_compiler_option_$1,[
  SAVE_CFLAGS="$CFLAGS"
  CFLAGS="$CFLAGS $3"
  AC_TRY_COMPILE([],[], ac_cv_compiler_option_$1=yes, ac_cv_compiler_option_$1=no)
  CFLAGS="$SAVE_CFLAGS"
  ])dnl
  if test ".$ac_cv_compiler_option_$1" = .yes; then
      ifelse([$4], , :, [$4])
  else
      ifelse([$5], , :, [$5])
  fi
  AC_MSG_RESULT([$ac_cv_compiler_option_$1])
  ])dnl
  
  dnl ##
  dnl ##  Debugging Support
  dnl ##
  dnl ##  configure.in:
  dnl ##    AC_CHECK_DEBUGGING
  dnl ##
  
  AC_DEFUN(AC_CHECK_DEBUGGING,[dnl
  AC_ARG_ENABLE(debug,dnl
  [  --enable-debug          build for debugging (default=no)],
  [dnl
  if test ".$ac_cv_prog_gcc" = ".yes"; then
      case "$CFLAGS" in
          *-O* ) ;;
             * ) CFLAGS="$CFLAGS -O2" ;;
      esac
      case "$CFLAGS" in
          *-g* ) ;;
             * ) CFLAGS="$CFLAGS -g" ;;
      esac
      case "$CFLAGS" in
          *-pipe* ) ;;
                * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
      esac
      AC_COMPILER_OPTION(ggdb3, -ggdb3, -ggdb3, CFLAGS="$CFLAGS -ggdb3")
      CFLAGS="$CFLAGS -pedantic"
      CFLAGS="$CFLAGS -Wall"
      WMORE="-Wshadow -Wpointer-arith -Wcast-align -Winline"
      WMORE="$WMORE -Wmissing-prototypes -Wmissing-declarations -Wnested-externs"
      AC_COMPILER_OPTION(wmore, -W<xxx>, $WMORE, CFLAGS="$CFLAGS $WMORE")
      AC_COMPILER_OPTION(wnolonglong, -Wno-long-long, -Wno-long-long, CFLAGS="$CFLAGS -Wno-long-long")
  else
      case "$CFLAGS" in
          *-g* ) ;;
             * ) CFLAGS="$CFLAGS -g" ;;
      esac
  fi
  msg="enabled"
  AC_DEFINE(XDS_DEBUG)
  ],[
  if test ".$ac_cv_prog_gcc" = ".yes"; then
  case "$CFLAGS" in
      *-pipe* ) ;;
            * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
  esac
  fi
  case "$CFLAGS" in
      *-g* ) CFLAGS=`echo "$CFLAGS" |\
                     sed -e 's/ -g / /g' -e 's/ -g$//' -e 's/^-g //g' -e 's/^-g$//'` ;;
  esac
  case "$CXXFLAGS" in
      *-g* ) CXXFLAGS=`echo "$CXXFLAGS" |\
                       sed -e 's/ -g / /g' -e 's/ -g$//' -e 's/^-g //g' -e 's/^-g$//'` ;;
  esac
  msg=disabled
  ])dnl
  AC_MSG_CHECKING(for compilation debug mode)
  AC_MSG_RESULT([$msg])
  if test ".$msg" = .enabled; then
      enable_shared=no
  fi
  ])
  
  dnl ##
  dnl ##  Libtool Glue Code
  dnl ##
  dnl ##  configure.in:
  dnl ##    AC_CONFIGURE_LIBTOOL
  dnl ##
  
  AC_DEFUN(AC_CONFIGURE_LIBTOOL,[
      sinclude(libtool.m4)
      AC_PROG_LIBTOOL
  ])
  
  dnl ##
  dnl ##  XDS Glue Code
  dnl ##
  dnl ##  configure.in:
  dnl ##    AC_CONFIGURE_XDS
  dnl ##
  
  AC_DEFUN(AC_CONFIGURE_XDS,[
      sinclude(xds.m4)
      AC_XDS
  ])
  
  Index: ossp-pkg/srpc/libxds/config.guess
  ============================================================
  $ cvs update -p -r1.1 config.guess
  #! /bin/sh
  # Attempt to guess a canonical system name.
  #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
  #   Free Software Foundation, Inc.
  
  timestamp='2001-04-20'
  
  # This file is free software; you can redistribute it and/or modify it
  # under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 2 of the License, or
  # (at your option) any later version.
  #
  # This program is distributed in the hope that it will be useful, but
  # WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  # General Public License for more details.
  #
  # You should have received a copy of the GNU General Public License
  # along with this program; if not, write to the Free Software
  # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  #
  # As a special exception to the GNU General Public License, if you
  # distribute this file as part of a program that contains a
  # configuration script generated by Autoconf, you may include it under
  # the same distribution terms that you use for the rest of that program.
  
  # Written by Per Bothner <bothner@cygnus.com>.
  # Please send patches to <config-patches@gnu.org>.
  #
  # This script attempts to guess a canonical system name similar to
  # config.sub.  If it succeeds, it prints the system name on stdout, and
  # exits with 0.  Otherwise, it exits with 1.
  #
  # The plan is that this can be called by configure scripts if you
  # don't specify an explicit build system type.
  
  me=`echo "$0" | sed -e 's,.*/,,'`
  
  usage="\
  Usage: $0 [OPTION]
  
  Output the configuration name of the system \`$me' is run on.
  
  Operation modes:
    -h, --help         print this help, then exit
    -t, --time-stamp   print date of last modification, then exit
    -v, --version      print version number, then exit
  
  Report bugs and patches to <config-patches@gnu.org>."
  
  version="\
  GNU config.guess ($timestamp)
  
  Originally written by Per Bothner.
  Copyright (C) 1992, 93, 94, 95, 96, 97, 98, 99, 2000
  Free Software Foundation, Inc.
  
  This is free software; see the source for copying conditions.  There is NO
  warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
  
  help="
  Try \`$me --help' for more information."
  
  # Parse command line
  while test $# -gt 0 ; do
    case $1 in
      --time-stamp | --time* | -t )
         echo "$timestamp" ; exit 0 ;;
      --version | -v )
         echo "$version" ; exit 0 ;;
      --help | --h* | -h )
         echo "$usage"; exit 0 ;;
      -- )     # Stop option processing
         shift; break ;;
      - )	# Use stdin as input.
         break ;;
      -* )
         echo "$me: invalid option $1$help" >&2
         exit 1 ;;
      * )
         break ;;
    esac
  done
  
  if test $# != 0; then
    echo "$me: too many arguments$help" >&2
    exit 1
  fi
  
  
  dummy=dummy-$$
  trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15
  
  # CC_FOR_BUILD -- compiler used by this script.
  # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
  # use `HOST_CC' if defined, but it is deprecated.
  
  case $CC_FOR_BUILD,$HOST_CC,$CC in
   ,,)    echo "int dummy(){}" > $dummy.c
  	for c in cc gcc c89 ; do
  	  ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1
  	  if test $? = 0 ; then
  	     CC_FOR_BUILD="$c"; break
  	  fi
  	done
  	rm -f $dummy.c $dummy.o $dummy.rel
  	if test x"$CC_FOR_BUILD" = x ; then
  	  CC_FOR_BUILD=no_compiler_found
  	fi
  	;;
   ,,*)   CC_FOR_BUILD=$CC ;;
   ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
  esac
  
  # This is needed to find uname on a Pyramid OSx when run in the BSD universe.
  # (ghazi@noc.rutgers.edu 8/24/94.)
  if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
  	PATH=$PATH:/.attbin ; export PATH
  fi
  
  UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
  UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
  UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
  UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
  
  # Note: order is significant - the case branches are not exclusive.
  
  case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
      *:NetBSD:*:*)
  	# Netbsd (nbsd) targets should (where applicable) match one or
  	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
  	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
  	# switched to ELF, *-*-netbsd* would select the old
  	# object file format.  This provides both forward
  	# compatibility and a consistent mechanism for selecting the
  	# object file format.
  	# Determine the machine/vendor (is the vendor relevant).
  	case "${UNAME_MACHINE}" in
  	    amiga) machine=m68k-unknown ;;
  	    arm32) machine=arm-unknown ;;
  	    atari*) machine=m68k-atari ;;
  	    sun3*) machine=m68k-sun ;;
  	    mac68k) machine=m68k-apple ;;
  	    macppc) machine=powerpc-apple ;;
  	    hp3[0-9][05]) machine=m68k-hp ;;
  	    ibmrt|romp-ibm) machine=romp-ibm ;;
  	    *) machine=${UNAME_MACHINE}-unknown ;;
  	esac
  	# The Operating System including object format, if it has switched
  	# to ELF recently, or will in the future.
  	case "${UNAME_MACHINE}" in
  	    i386|sparc|amiga|arm*|hp300|mvme68k|vax|atari|luna68k|mac68k|news68k|next68k|pc532|sun3*|x68k)
  		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
  			| grep __ELF__ >/dev/null
  		then
  		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
  		    # Return netbsd for either.  FIX?
  		    os=netbsd
  		else
  		    os=netbsdelf
  		fi
  		;;
  	    *)
  	        os=netbsd
  		;;
  	esac
  	# The OS release
  	release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
  	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
  	# contains redundant information, the shorter form:
  	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
  	echo "${machine}-${os}${release}"
  	exit 0 ;;
      alpha:OSF1:*:*)
  	if test $UNAME_RELEASE = "V4.0"; then
  		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
  	fi
  	# A Vn.n version is a released version.
  	# A Tn.n version is a released field test version.
  	# A Xn.n version is an unreleased experimental baselevel.
  	# 1.2 uses "1.2" for uname -r.
  	cat <<EOF >$dummy.s
  	.data
  \$Lformat:
  	.byte 37,100,45,37,120,10,0	# "%d-%x\n"
  
  	.text
  	.globl main
  	.align 4
  	.ent main
  main:
  	.frame \$30,16,\$26,0
  	ldgp \$29,0(\$27)
  	.prologue 1
  	.long 0x47e03d80 # implver \$0
  	lda \$2,-1
  	.long 0x47e20c21 # amask \$2,\$1
  	lda \$16,\$Lformat
  	mov \$0,\$17
  	not \$1,\$18
  	jsr \$26,printf
  	ldgp \$29,0(\$26)
  	mov 0,\$16
  	jsr \$26,exit
  	.end main
  EOF
  	$CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
  	if test "$?" = 0 ; then
  		case `./$dummy` in
  			0-0)
  				UNAME_MACHINE="alpha"
  				;;
  			1-0)
  				UNAME_MACHINE="alphaev5"
  				;;
  			1-1)
  				UNAME_MACHINE="alphaev56"
  				;;
  			1-101)
  				UNAME_MACHINE="alphapca56"
  				;;
  			2-303)
  				UNAME_MACHINE="alphaev6"
  				;;
  			2-307)
  				UNAME_MACHINE="alphaev67"
  				;;
  		esac
  	fi
  	rm -f $dummy.s $dummy
  	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
  	exit 0 ;;
      Alpha\ *:Windows_NT*:*)
  	# How do we know it's Interix rather than the generic POSIX subsystem?
  	# Should we change UNAME_MACHINE based on the output of uname instead
  	# of the specific Alpha model?
  	echo alpha-pc-interix
  	exit 0 ;;
      21064:Windows_NT:50:3)
  	echo alpha-dec-winnt3.5
  	exit 0 ;;
      Amiga*:UNIX_System_V:4.0:*)
  	echo m68k-unknown-sysv4
  	exit 0;;
      amiga:OpenBSD:*:*)
  	echo m68k-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      *:[Aa]miga[Oo][Ss]:*:*)
  	echo ${UNAME_MACHINE}-unknown-amigaos
  	exit 0 ;;
      arc64:OpenBSD:*:*)
  	echo mips64el-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      arc:OpenBSD:*:*)
  	echo mipsel-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      hkmips:OpenBSD:*:*)
  	echo mips-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      pmax:OpenBSD:*:*)
  	echo mipsel-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      sgi:OpenBSD:*:*)
  	echo mips-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      wgrisc:OpenBSD:*:*)
  	echo mipsel-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      *:OS/390:*:*)
  	echo i370-ibm-openedition
  	exit 0 ;;
      arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
  	echo arm-acorn-riscix${UNAME_RELEASE}
  	exit 0;;
      SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
  	echo hppa1.1-hitachi-hiuxmpp
  	exit 0;;
      Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
  	# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
  	if test "`(/bin/universe) 2>/dev/null`" = att ; then
  		echo pyramid-pyramid-sysv3
  	else
  		echo pyramid-pyramid-bsd
  	fi
  	exit 0 ;;
      NILE*:*:*:dcosx)
  	echo pyramid-pyramid-svr4
  	exit 0 ;;
      sun4H:SunOS:5.*:*)
  	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
  	exit 0 ;;
      sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
  	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
  	exit 0 ;;
      i86pc:SunOS:5.*:*)
  	echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
  	exit 0 ;;
      sun4*:SunOS:6*:*)
  	# According to config.sub, this is the proper way to canonicalize
  	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
  	# it's likely to be more like Solaris than SunOS4.
  	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
  	exit 0 ;;
      sun4*:SunOS:*:*)
  	case "`/usr/bin/arch -k`" in
  	    Series*|S4*)
  		UNAME_RELEASE=`uname -v`
  		;;
  	esac
  	# Japanese Language versions have a version number like `4.1.3-JL'.
  	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
  	exit 0 ;;
      sun3*:SunOS:*:*)
  	echo m68k-sun-sunos${UNAME_RELEASE}
  	exit 0 ;;
      sun*:*:4.2BSD:*)
  	UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
  	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
  	case "`/bin/arch`" in
  	    sun3)
  		echo m68k-sun-sunos${UNAME_RELEASE}
  		;;
  	    sun4)
  		echo sparc-sun-sunos${UNAME_RELEASE}
  		;;
  	esac
  	exit 0 ;;
      aushp:SunOS:*:*)
  	echo sparc-auspex-sunos${UNAME_RELEASE}
  	exit 0 ;;
      atari*:OpenBSD:*:*)
  	echo m68k-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      # The situation for MiNT is a little confusing.  The machine name
      # can be virtually everything (everything which is not
      # "atarist" or "atariste" at least should have a processor
      # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
      # to the lowercase version "mint" (or "freemint").  Finally
      # the system name "TOS" denotes a system which is actually not
      # MiNT.  But MiNT is downward compatible to TOS, so this should
      # be no problem.
      atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
          echo m68k-atari-mint${UNAME_RELEASE}
  	exit 0 ;;
      atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
  	echo m68k-atari-mint${UNAME_RELEASE}
          exit 0 ;;
      *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
          echo m68k-atari-mint${UNAME_RELEASE}
  	exit 0 ;;
      milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
          echo m68k-milan-mint${UNAME_RELEASE}
          exit 0 ;;
      hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
          echo m68k-hades-mint${UNAME_RELEASE}
          exit 0 ;;
      *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
          echo m68k-unknown-mint${UNAME_RELEASE}
          exit 0 ;;
      sun3*:OpenBSD:*:*)
  	echo m68k-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      mac68k:OpenBSD:*:*)
  	echo m68k-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      mvme68k:OpenBSD:*:*)
  	echo m68k-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      mvme88k:OpenBSD:*:*)
  	echo m88k-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      powerpc:machten:*:*)
  	echo powerpc-apple-machten${UNAME_RELEASE}
  	exit 0 ;;
      RISC*:Mach:*:*)
  	echo mips-dec-mach_bsd4.3
  	exit 0 ;;
      RISC*:ULTRIX:*:*)
  	echo mips-dec-ultrix${UNAME_RELEASE}
  	exit 0 ;;
      VAX*:ULTRIX*:*:*)
  	echo vax-dec-ultrix${UNAME_RELEASE}
  	exit 0 ;;
      2020:CLIX:*:* | 2430:CLIX:*:*)
  	echo clipper-intergraph-clix${UNAME_RELEASE}
  	exit 0 ;;
      mips:*:*:UMIPS | mips:*:*:RISCos)
  	sed 's/^	//' << EOF >$dummy.c
  #ifdef __cplusplus
  #include <stdio.h>  /* for printf() prototype */
  	int main (int argc, char *argv[]) {
  #else
  	int main (argc, argv) int argc; char *argv[]; {
  #endif
  	#if defined (host_mips) && defined (MIPSEB)
  	#if defined (SYSTYPE_SYSV)
  	  printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
  	#endif
  	#if defined (SYSTYPE_SVR4)
  	  printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
  	#endif
  	#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
  	  printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
  	#endif
  	#endif
  	  exit (-1);
  	}
  EOF
  	$CC_FOR_BUILD $dummy.c -o $dummy \
  	  && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
  	  && rm -f $dummy.c $dummy && exit 0
  	rm -f $dummy.c $dummy
  	echo mips-mips-riscos${UNAME_RELEASE}
  	exit 0 ;;
      Motorola:PowerMAX_OS:*:*)
  	echo powerpc-motorola-powermax
  	exit 0 ;;
      Night_Hawk:Power_UNIX:*:*)
  	echo powerpc-harris-powerunix
  	exit 0 ;;
      m88k:CX/UX:7*:*)
  	echo m88k-harris-cxux7
  	exit 0 ;;
      m88k:*:4*:R4*)
  	echo m88k-motorola-sysv4
  	exit 0 ;;
      m88k:*:3*:R3*)
  	echo m88k-motorola-sysv3
  	exit 0 ;;
      AViiON:dgux:*:*)
          # DG/UX returns AViiON for all architectures
          UNAME_PROCESSOR=`/usr/bin/uname -p`
  	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
  	then
  	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
  	       [ ${TARGET_BINARY_INTERFACE}x = x ]
  	    then
  		echo m88k-dg-dgux${UNAME_RELEASE}
  	    else
  		echo m88k-dg-dguxbcs${UNAME_RELEASE}
  	    fi
  	else
  	    echo i586-dg-dgux${UNAME_RELEASE}
  	fi
   	exit 0 ;;
      M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
  	echo m88k-dolphin-sysv3
  	exit 0 ;;
      M88*:*:R3*:*)
  	# Delta 88k system running SVR3
  	echo m88k-motorola-sysv3
  	exit 0 ;;
      XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
  	echo m88k-tektronix-sysv3
  	exit 0 ;;
      Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
  	echo m68k-tektronix-bsd
  	exit 0 ;;
      *:IRIX*:*:*)
  	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
  	exit 0 ;;
      ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
  	echo romp-ibm-aix      # uname -m gives an 8 hex-code CPU id
  	exit 0 ;;              # Note that: echo "'`uname -s`'" gives 'AIX '
      i*86:AIX:*:*)
  	echo i386-ibm-aix
  	exit 0 ;;
      ia64:AIX:*:*)
  	if [ -x /usr/bin/oslevel ] ; then
  		IBM_REV=`/usr/bin/oslevel`
  	else
  		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
  	fi
  	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
  	exit 0 ;;
      *:AIX:2:3)
  	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
  		sed 's/^		//' << EOF >$dummy.c
  		#include <sys/systemcfg.h>
  
  		main()
  			{
  			if (!__power_pc())
  				exit(1);
  			puts("powerpc-ibm-aix3.2.5");
  			exit(0);
  			}
  EOF
  		$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
  		rm -f $dummy.c $dummy
  		echo rs6000-ibm-aix3.2.5
  	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
  		echo rs6000-ibm-aix3.2.4
  	else
  		echo rs6000-ibm-aix3.2
  	fi
  	exit 0 ;;
      *:AIX:*:[45])
  	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'`
  	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
  		IBM_ARCH=rs6000
  	else
  		IBM_ARCH=powerpc
  	fi
  	if [ -x /usr/bin/oslevel ] ; then
  		IBM_REV=`/usr/bin/oslevel`
  	else
  		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
  	fi
  	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
  	exit 0 ;;
      *:AIX:*:*)
  	echo rs6000-ibm-aix
  	exit 0 ;;
      ibmrt:4.4BSD:*|romp-ibm:BSD:*)
  	echo romp-ibm-bsd4.4
  	exit 0 ;;
      ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
  	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
  	exit 0 ;;                           # report: romp-ibm BSD 4.3
      *:BOSX:*:*)
  	echo rs6000-bull-bosx
  	exit 0 ;;
      DPX/2?00:B.O.S.:*:*)
  	echo m68k-bull-sysv3
  	exit 0 ;;
      9000/[34]??:4.3bsd:1.*:*)
  	echo m68k-hp-bsd
  	exit 0 ;;
      hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
  	echo m68k-hp-bsd4.4
  	exit 0 ;;
      9000/[34678]??:HP-UX:*:*)
  	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
  	case "${UNAME_MACHINE}" in
  	    9000/31? )            HP_ARCH=m68000 ;;
  	    9000/[34]?? )         HP_ARCH=m68k ;;
  	    9000/[678][0-9][0-9])
                case "${HPUX_REV}" in
                  11.[0-9][0-9])
                    if [ -x /usr/bin/getconf ]; then
                      sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
                      sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
                      case "${sc_cpu_version}" in
                        523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
                        528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
                        532)                      # CPU_PA_RISC2_0
                          case "${sc_kernel_bits}" in
                            32) HP_ARCH="hppa2.0n" ;;
                            64) HP_ARCH="hppa2.0w" ;;
                          esac ;;
                      esac
                    fi ;;
                esac
                if [ "${HP_ARCH}" = "" ]; then
                sed 's/^              //' << EOF >$dummy.c
  
                #define _HPUX_SOURCE
                #include <stdlib.h>
                #include <unistd.h>
  
                int main ()
                {
                #if defined(_SC_KERNEL_BITS)
                    long bits = sysconf(_SC_KERNEL_BITS);
                #endif
                    long cpu  = sysconf (_SC_CPU_VERSION);
  
                    switch (cpu)
                	{
                	case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
                	case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
                	case CPU_PA_RISC2_0:
                #if defined(_SC_KERNEL_BITS)
                	    switch (bits)
                		{
                		case 64: puts ("hppa2.0w"); break;
                		case 32: puts ("hppa2.0n"); break;
                		default: puts ("hppa2.0"); break;
                		} break;
                #else  /* !defined(_SC_KERNEL_BITS) */
                	    puts ("hppa2.0"); break;
                #endif
                	default: puts ("hppa1.0"); break;
                	}
                    exit (0);
                }
  EOF
  	(CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
  	if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi
  	rm -f $dummy.c $dummy
  	fi ;;
  	esac
  	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
  	exit 0 ;;
      ia64:HP-UX:*:*)
  	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
  	echo ia64-hp-hpux${HPUX_REV}
  	exit 0 ;;
      3050*:HI-UX:*:*)
  	sed 's/^	//' << EOF >$dummy.c
  	#include <unistd.h>
  	int
  	main ()
  	{
  	  long cpu = sysconf (_SC_CPU_VERSION);
  	  /* The order matters, because CPU_IS_HP_MC68K erroneously returns
  	     true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
  	     results, however.  */
  	  if (CPU_IS_PA_RISC (cpu))
  	    {
  	      switch (cpu)
  		{
  		  case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
  		  case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
  		  case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
  		  default: puts ("hppa-hitachi-hiuxwe2"); break;
  		}
  	    }
  	  else if (CPU_IS_HP_MC68K (cpu))
  	    puts ("m68k-hitachi-hiuxwe2");
  	  else puts ("unknown-hitachi-hiuxwe2");
  	  exit (0);
  	}
  EOF
  	$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
  	rm -f $dummy.c $dummy
  	echo unknown-hitachi-hiuxwe2
  	exit 0 ;;
      9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
  	echo hppa1.1-hp-bsd
  	exit 0 ;;
      9000/8??:4.3bsd:*:*)
  	echo hppa1.0-hp-bsd
  	exit 0 ;;
      *9??*:MPE/iX:*:*)
  	echo hppa1.0-hp-mpeix
  	exit 0 ;;
      hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
  	echo hppa1.1-hp-osf
  	exit 0 ;;
      hp8??:OSF1:*:*)
  	echo hppa1.0-hp-osf
  	exit 0 ;;
      i*86:OSF1:*:*)
  	if [ -x /usr/sbin/sysversion ] ; then
  	    echo ${UNAME_MACHINE}-unknown-osf1mk
  	else
  	    echo ${UNAME_MACHINE}-unknown-osf1
  	fi
  	exit 0 ;;
      parisc*:Lites*:*:*)
  	echo hppa1.1-hp-lites
  	exit 0 ;;
      hppa*:OpenBSD:*:*)
  	echo hppa-unknown-openbsd
  	exit 0 ;;
      C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
  	echo c1-convex-bsd
          exit 0 ;;
      C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
  	if getsysinfo -f scalar_acc
  	then echo c32-convex-bsd
  	else echo c2-convex-bsd
  	fi
          exit 0 ;;
      C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
  	echo c34-convex-bsd
          exit 0 ;;
      C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
  	echo c38-convex-bsd
          exit 0 ;;
      C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
  	echo c4-convex-bsd
          exit 0 ;;
      CRAY*X-MP:*:*:*)
  	echo xmp-cray-unicos
          exit 0 ;;
      CRAY*Y-MP:*:*:*)
  	echo ymp-cray-unicos${UNAME_RELEASE}
  	exit 0 ;;
      CRAY*[A-Z]90:*:*:*)
  	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
  	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
  	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
  	exit 0 ;;
      CRAY*TS:*:*:*)
  	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
  	exit 0 ;;
      CRAY*T3D:*:*:*)
  	echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
  	exit 0 ;;
      CRAY*T3E:*:*:*)
  	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
  	exit 0 ;;
      CRAY*SV1:*:*:*)
  	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
  	exit 0 ;;
      CRAY-2:*:*:*)
  	echo cray2-cray-unicos
          exit 0 ;;
      F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
  	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
          FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
          FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
          echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
          exit 0 ;;
      hp300:OpenBSD:*:*)
  	echo m68k-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
  	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
  	exit 0 ;;
      sparc*:BSD/OS:*:*)
  	echo sparc-unknown-bsdi${UNAME_RELEASE}
  	exit 0 ;;
      *:BSD/OS:*:*)
  	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
  	exit 0 ;;
      *:FreeBSD:*:*)
  	echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
  	exit 0 ;;
      *:OpenBSD:*:*)
  	echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
  	exit 0 ;;
      i*:CYGWIN*:*)
  	echo ${UNAME_MACHINE}-pc-cygwin
  	exit 0 ;;
      i*:MINGW*:*)
  	echo ${UNAME_MACHINE}-pc-mingw32
  	exit 0 ;;
      i*:PW*:*)
  	echo ${UNAME_MACHINE}-pc-pw32
  	exit 0 ;;
      i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
  	# How do we know it's Interix rather than the generic POSIX subsystem?
  	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
  	# UNAME_MACHINE based on the output of uname instead of i386?
  	echo i386-pc-interix
  	exit 0 ;;
      i*:UWIN*:*)
  	echo ${UNAME_MACHINE}-pc-uwin
  	exit 0 ;;
      p*:CYGWIN*:*)
  	echo powerpcle-unknown-cygwin
  	exit 0 ;;
      prep*:SunOS:5.*:*)
  	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
  	exit 0 ;;
      *:GNU:*:*)
  	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
  	exit 0 ;;
      i*86:Minix:*:*)
  	echo ${UNAME_MACHINE}-pc-minix
  	exit 0 ;;
      arm*:Linux:*:*)
  	echo ${UNAME_MACHINE}-unknown-linux-gnu
  	exit 0 ;;
      ia64:Linux:*:*)
  	echo ${UNAME_MACHINE}-unknown-linux
  	exit 0 ;;
      m68*:Linux:*:*)
  	echo ${UNAME_MACHINE}-unknown-linux-gnu
  	exit 0 ;;
      mips:Linux:*:*)
  	cat >$dummy.c <<EOF
  #ifdef __cplusplus
  #include <stdio.h>  /* for printf() prototype */
  int main (int argc, char *argv[]) {
  #else
  int main (argc, argv) int argc; char *argv[]; {
  #endif
  #ifdef __MIPSEB__
    printf ("%s-unknown-linux-gnu\n", argv[1]);
  #endif
  #ifdef __MIPSEL__
    printf ("%sel-unknown-linux-gnu\n", argv[1]);
  #endif
    return 0;
  }
  EOF
  	$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0
  	rm -f $dummy.c $dummy
  	;;
      ppc:Linux:*:*)
  	# Determine Lib Version
  	cat >$dummy.c <<EOF
  #include <features.h>
  #if defined(__GLIBC__)
  extern char __libc_version[];
  extern char __libc_release[];
  #endif
  main(argc, argv)
       int argc;
       char *argv[];
  {
  #if defined(__GLIBC__)
    printf("%s %s\n", __libc_version, __libc_release);
  #else
    printf("unknown\n");
  #endif
    return 0;
  }
  EOF
  	LIBC=""
  	$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null
  	if test "$?" = 0 ; then
  		./$dummy | grep 1\.99 > /dev/null
  		if test "$?" = 0 ; then LIBC="libc1" ; fi
  	fi
  	rm -f $dummy.c $dummy
  	echo powerpc-unknown-linux-gnu${LIBC}
  	exit 0 ;;
      alpha:Linux:*:*)
  	cat <<EOF >$dummy.s
  	  .data
  	  \$Lformat:
  		.byte 37,100,45,37,120,10,0	# "%d-%x\n"
  	   .text
  		.globl main
  		.align 4
  		.ent main
  	    main:
  		.frame \$30,16,\$26,0
  		ldgp \$29,0(\$27)
  		.prologue 1
  		.long 0x47e03d80 # implver \$0
  		lda \$2,-1
  		.long 0x47e20c21 # amask \$2,\$1
  		lda \$16,\$Lformat
  		mov \$0,\$17
  		not \$1,\$18
  		jsr \$26,printf
  		ldgp \$29,0(\$26)
  		mov 0,\$16
  		jsr \$26,exit
  		.end main
  EOF
  	LIBC=""
  	$CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
  	if test "$?" = 0 ; then
  		case `./$dummy` in
  		0-0)	UNAME_MACHINE="alpha" ;;
  		1-0)	UNAME_MACHINE="alphaev5" ;;
  		1-1)    UNAME_MACHINE="alphaev56" ;;
  		1-101)	UNAME_MACHINE="alphapca56" ;;
  		2-303)	UNAME_MACHINE="alphaev6" ;;
  		2-307)	UNAME_MACHINE="alphaev67" ;;
  		esac
  		objdump --private-headers $dummy | \
  		  grep ld.so.1 > /dev/null
  		if test "$?" = 0 ; then
  			LIBC="libc1"
  		fi
  	fi
  	rm -f $dummy.s $dummy
  	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
  	exit 0 ;;
      parisc:Linux:*:* | hppa:Linux:*:*)
  	# Look for CPU level
  	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
  	  PA7*) echo hppa1.1-unknown-linux-gnu ;;
  	  PA8*) echo hppa2.0-unknown-linux-gnu ;;
  	  *)    echo hppa-unknown-linux-gnu ;;
  	esac
  	exit 0 ;;
      parisc64:Linux:*:* | hppa64:Linux:*:*)
  	echo hppa64-unknown-linux-gnu
  	exit 0 ;;
      s390:Linux:*:* | s390x:Linux:*:*)
  	echo ${UNAME_MACHINE}-ibm-linux
  	exit 0 ;;
      sh*:Linux:*:*)
  	echo ${UNAME_MACHINE}-unknown-linux-gnu
  	exit 0 ;;
      sparc:Linux:*:* | sparc64:Linux:*:*)
  	echo ${UNAME_MACHINE}-unknown-linux-gnu
  	exit 0 ;;
      x86_64:Linux:*:*)
  	echo x86_64-unknown-linux-gnu
  	exit 0 ;;
      i*86:Linux:*:*)
  	# The BFD linker knows what the default object file format is, so
  	# first see if it will tell us. cd to the root directory to prevent
  	# problems with other programs or directories called `ld' in the path.
  	ld_supported_emulations=`cd /; ld --help 2>&1 \
  			 | sed -ne '/supported emulations:/!d
  				    s/[ 	][ 	]*/ /g
  				    s/.*supported emulations: *//
  				    s/ .*//
  				    p'`
          case "$ld_supported_emulations" in
  	  i*86linux)
  		echo "${UNAME_MACHINE}-pc-linux-gnuaout"
  		exit 0
  		;;
  	  elf_i*86)
  		TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
  		;;
  	  i*86coff)
  		echo "${UNAME_MACHINE}-pc-linux-gnucoff"
  		exit 0
  		;;
  	esac
  	# Either a pre-BFD a.out linker (linux-gnuoldld)
  	# or one that does not give us useful --help.
  	# GCC wants to distinguish between linux-gnuoldld and linux-gnuaout.
  	# If ld does not provide *any* "supported emulations:"
  	# that means it is gnuoldld.
  	test -z "$ld_supported_emulations" && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0
  	case "${UNAME_MACHINE}" in
  	i*86)
  	  VENDOR=pc;
  	  ;;
  	*)
  	  VENDOR=unknown;
  	  ;;
  	esac
  	# Determine whether the default compiler is a.out or elf
  	cat >$dummy.c <<EOF
  #include <features.h>
  #ifdef __cplusplus
  #include <stdio.h>  /* for printf() prototype */
  	int main (int argc, char *argv[]) {
  #else
  	int main (argc, argv) int argc; char *argv[]; {
  #endif
  #ifdef __ELF__
  # ifdef __GLIBC__
  #  if __GLIBC__ >= 2
      printf ("%s-${VENDOR}-linux-gnu\n", argv[1]);
  #  else
      printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
  #  endif
  # else
     printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
  # endif
  #else
    printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]);
  #endif
    return 0;
  }
  EOF
  	$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0
  	rm -f $dummy.c $dummy
  	test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
  	;;
  # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.  earlier versions
  # are messed up and put the nodename in both sysname and nodename.
      i*86:DYNIX/ptx:4*:*)
  	echo i386-sequent-sysv4
  	exit 0 ;;
      i*86:UNIX_SV:4.2MP:2.*)
          # Unixware is an offshoot of SVR4, but it has its own version
          # number series starting with 2...
          # I am not positive that other SVR4 systems won't match this,
  	# I just have to hope.  -- rms.
          # Use sysv4.2uw... so that sysv4* matches it.
  	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
  	exit 0 ;;
      i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
  	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
  	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
  		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
  	else
  		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
  	fi
  	exit 0 ;;
      i*86:*:5:7*)
          # Fixed at (any) Pentium or better
          UNAME_MACHINE=i586
          if [ ${UNAME_SYSTEM} = "UnixWare" ] ; then
  	    echo ${UNAME_MACHINE}-sco-sysv${UNAME_RELEASE}uw${UNAME_VERSION}
  	else
  	    echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
  	fi
  	exit 0 ;;
      i*86:*:3.2:*)
  	if test -f /usr/options/cb.name; then
  		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
  		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
  	elif /bin/uname -X 2>/dev/null >/dev/null ; then
  		UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
  		(/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
  		(/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
  			&& UNAME_MACHINE=i586
  		(/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \
  			&& UNAME_MACHINE=i686
  		(/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \
  			&& UNAME_MACHINE=i686
  		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
  	else
  		echo ${UNAME_MACHINE}-pc-sysv32
  	fi
  	exit 0 ;;
      i*86:*DOS:*:*)
  	echo ${UNAME_MACHINE}-pc-msdosdjgpp
  	exit 0 ;;
      pc:*:*:*)
  	# Left here for compatibility:
          # uname -m prints for DJGPP always 'pc', but it prints nothing about
          # the processor, so we play safe by assuming i386.
  	echo i386-pc-msdosdjgpp
          exit 0 ;;
      Intel:Mach:3*:*)
  	echo i386-pc-mach3
  	exit 0 ;;
      paragon:*:*:*)
  	echo i860-intel-osf1
  	exit 0 ;;
      i860:*:4.*:*) # i860-SVR4
  	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
  	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
  	else # Add other i860-SVR4 vendors below as they are discovered.
  	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
  	fi
  	exit 0 ;;
      mini*:CTIX:SYS*5:*)
  	# "miniframe"
  	echo m68010-convergent-sysv
  	exit 0 ;;
      M68*:*:R3V[567]*:*)
  	test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
      3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
  	OS_REL=''
  	test -r /etc/.relid \
  	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
  	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
  	  && echo i486-ncr-sysv4.3${OS_REL} && exit 0
  	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
  	  && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
      3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
          /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
            && echo i486-ncr-sysv4 && exit 0 ;;
      m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
  	echo m68k-unknown-lynxos${UNAME_RELEASE}
  	exit 0 ;;
      mc68030:UNIX_System_V:4.*:*)
  	echo m68k-atari-sysv4
  	exit 0 ;;
      i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
  	echo i386-unknown-lynxos${UNAME_RELEASE}
  	exit 0 ;;
      TSUNAMI:LynxOS:2.*:*)
  	echo sparc-unknown-lynxos${UNAME_RELEASE}
  	exit 0 ;;
      rs6000:LynxOS:2.*:*)
  	echo rs6000-unknown-lynxos${UNAME_RELEASE}
  	exit 0 ;;
      PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
  	echo powerpc-unknown-lynxos${UNAME_RELEASE}
  	exit 0 ;;
      SM[BE]S:UNIX_SV:*:*)
  	echo mips-dde-sysv${UNAME_RELEASE}
  	exit 0 ;;
      RM*:ReliantUNIX-*:*:*)
  	echo mips-sni-sysv4
  	exit 0 ;;
      RM*:SINIX-*:*:*)
  	echo mips-sni-sysv4
  	exit 0 ;;
      *:SINIX-*:*:*)
  	if uname -p 2>/dev/null >/dev/null ; then
  		UNAME_MACHINE=`(uname -p) 2>/dev/null`
  		echo ${UNAME_MACHINE}-sni-sysv4
  	else
  		echo ns32k-sni-sysv
  	fi
  	exit 0 ;;
      PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
                             # says <Richard.M.Bartel@ccMail.Census.GOV>
          echo i586-unisys-sysv4
          exit 0 ;;
      *:UNIX_System_V:4*:FTX*)
  	# From Gerald Hewes <hewes@openmarket.com>.
  	# How about differentiating between stratus architectures? -djm
  	echo hppa1.1-stratus-sysv4
  	exit 0 ;;
      *:*:*:FTX*)
  	# From seanf@swdc.stratus.com.
  	echo i860-stratus-sysv4
  	exit 0 ;;
      mc68*:A/UX:*:*)
  	echo m68k-apple-aux${UNAME_RELEASE}
  	exit 0 ;;
      news*:NEWS-OS:6*:*)
  	echo mips-sony-newsos6
  	exit 0 ;;
      R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
  	if [ -d /usr/nec ]; then
  	        echo mips-nec-sysv${UNAME_RELEASE}
  	else
  	        echo mips-unknown-sysv${UNAME_RELEASE}
  	fi
          exit 0 ;;
      BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
  	echo powerpc-be-beos
  	exit 0 ;;
      BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
  	echo powerpc-apple-beos
  	exit 0 ;;
      BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
  	echo i586-pc-beos
  	exit 0 ;;
      SX-4:SUPER-UX:*:*)
  	echo sx4-nec-superux${UNAME_RELEASE}
  	exit 0 ;;
      SX-5:SUPER-UX:*:*)
  	echo sx5-nec-superux${UNAME_RELEASE}
  	exit 0 ;;
      Power*:Rhapsody:*:*)
  	echo powerpc-apple-rhapsody${UNAME_RELEASE}
  	exit 0 ;;
      *:Rhapsody:*:*)
  	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
  	exit 0 ;;
      *:Darwin:*:*)
  	echo `uname -p`-apple-darwin${UNAME_RELEASE}
  	exit 0 ;;
      *:procnto*:*:* | *:QNX:[0123456789]*:*)
  	if test "${UNAME_MACHINE}" = "x86pc"; then
  		UNAME_MACHINE=pc
  	fi
  	echo `uname -p`-${UNAME_MACHINE}-nto-qnx
  	exit 0 ;;
      *:QNX:*:4*)
  	echo i386-pc-qnx
  	exit 0 ;;
      NSR-[KW]:NONSTOP_KERNEL:*:*)
  	echo nsr-tandem-nsk${UNAME_RELEASE}
  	exit 0 ;;
      *:NonStop-UX:*:*)
  	echo mips-compaq-nonstopux
  	exit 0 ;;
      BS2000:POSIX*:*:*)
  	echo bs2000-siemens-sysv
  	exit 0 ;;
      DS/*:UNIX_System_V:*:*)
  	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
  	exit 0 ;;
      *:Plan9:*:*)
  	# "uname -m" is not consistent, so use $cputype instead. 386
  	# is converted to i386 for consistency with other x86
  	# operating systems.
  	if test "$cputype" = "386"; then
  	    UNAME_MACHINE=i386
  	else
  	    UNAME_MACHINE="$cputype"
  	fi
  	echo ${UNAME_MACHINE}-unknown-plan9
  	exit 0 ;;
      i*86:OS/2:*:*)
  	# If we were able to find `uname', then EMX Unix compatibility
  	# is probably installed.
  	echo ${UNAME_MACHINE}-pc-os2-emx
  	exit 0 ;;
      *:TOPS-10:*:*)
  	echo pdp10-unknown-tops10
  	exit 0 ;;
      *:TENEX:*:*)
  	echo pdp10-unknown-tenex
  	exit 0 ;;
      KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
  	echo pdp10-dec-tops20
  	exit 0 ;;
      XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
  	echo pdp10-xkl-tops20
  	exit 0 ;;
      *:TOPS-20:*:*)
  	echo pdp10-unknown-tops20
  	exit 0 ;;
      *:ITS:*:*)
  	echo pdp10-unknown-its
  	exit 0 ;;
  esac
  
  #echo '(No uname command or uname output not recognized.)' 1>&2
  #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
  
  cat >$dummy.c <<EOF
  #ifdef _SEQUENT_
  # include <sys/types.h>
  # include <sys/utsname.h>
  #endif
  main ()
  {
  #if defined (sony)
  #if defined (MIPSEB)
    /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
       I don't know....  */
    printf ("mips-sony-bsd\n"); exit (0);
  #else
  #include <sys/param.h>
    printf ("m68k-sony-newsos%s\n",
  #ifdef NEWSOS4
            "4"
  #else
  	  ""
  #endif
           ); exit (0);
  #endif
  #endif
  
  #if defined (__arm) && defined (__acorn) && defined (__unix)
    printf ("arm-acorn-riscix"); exit (0);
  #endif
  
  #if defined (hp300) && !defined (hpux)
    printf ("m68k-hp-bsd\n"); exit (0);
  #endif
  
  #if defined (NeXT)
  #if !defined (__ARCHITECTURE__)
  #define __ARCHITECTURE__ "m68k"
  #endif
    int version;
    version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
    if (version < 4)
      printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
    else
      printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
    exit (0);
  #endif
  
  #if defined (MULTIMAX) || defined (n16)
  #if defined (UMAXV)
    printf ("ns32k-encore-sysv\n"); exit (0);
  #else
  #if defined (CMU)
    printf ("ns32k-encore-mach\n"); exit (0);
  #else
    printf ("ns32k-encore-bsd\n"); exit (0);
  #endif
  #endif
  #endif
  
  #if defined (__386BSD__)
    printf ("i386-pc-bsd\n"); exit (0);
  #endif
  
  #if defined (sequent)
  #if defined (i386)
    printf ("i386-sequent-dynix\n"); exit (0);
  #endif
  #if defined (ns32000)
    printf ("ns32k-sequent-dynix\n"); exit (0);
  #endif
  #endif
  
  #if defined (_SEQUENT_)
      struct utsname un;
  
      uname(&un);
  
      if (strncmp(un.version, "V2", 2) == 0) {
  	printf ("i386-sequent-ptx2\n"); exit (0);
      }
      if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
  	printf ("i386-sequent-ptx1\n"); exit (0);
      }
      printf ("i386-sequent-ptx\n"); exit (0);
  
  #endif
  
  #if defined (vax)
  # if !defined (ultrix)
  #  include <sys/param.h>
  #  if defined (BSD)
  #   if BSD == 43
        printf ("vax-dec-bsd4.3\n"); exit (0);
  #   else
  #    if BSD == 199006
        printf ("vax-dec-bsd4.3reno\n"); exit (0);
  #    else
        printf ("vax-dec-bsd\n"); exit (0);
  #    endif
  #   endif
  #  else
      printf ("vax-dec-bsd\n"); exit (0);
  #  endif
  # else
      printf ("vax-dec-ultrix\n"); exit (0);
  # endif
  #endif
  
  #if defined (alliant) && defined (i860)
    printf ("i860-alliant-bsd\n"); exit (0);
  #endif
  
    exit (1);
  }
  EOF
  
  $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0
  rm -f $dummy.c $dummy
  
  # Apollos put the system type in the environment.
  
  test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
  
  # Convex versions that predate uname can use getsysinfo(1)
  
  if [ -x /usr/convex/getsysinfo ]
  then
      case `getsysinfo -f cpu_type` in
      c1*)
  	echo c1-convex-bsd
  	exit 0 ;;
      c2*)
  	if getsysinfo -f scalar_acc
  	then echo c32-convex-bsd
  	else echo c2-convex-bsd
  	fi
  	exit 0 ;;
      c34*)
  	echo c34-convex-bsd
  	exit 0 ;;
      c38*)
  	echo c38-convex-bsd
  	exit 0 ;;
      c4*)
  	echo c4-convex-bsd
  	exit 0 ;;
      esac
  fi
  
  cat >&2 <<EOF
  $0: unable to guess system type
  
  This script, last modified $timestamp, has failed to recognize
  the operating system you are using. It is advised that you
  download the most up to date version of the config scripts from
  
      ftp://ftp.gnu.org/pub/gnu/config/
  
  If the version you run ($0) is already up to date, please
  send the following data and any information you think might be
  pertinent to <config-patches@gnu.org> in order to provide the needed
  information to handle your system.
  
  config.guess timestamp = $timestamp
  
  uname -m = `(uname -m) 2>/dev/null || echo unknown`
  uname -r = `(uname -r) 2>/dev/null || echo unknown`
  uname -s = `(uname -s) 2>/dev/null || echo unknown`
  uname -v = `(uname -v) 2>/dev/null || echo unknown`
  
  /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
  /bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
  
  hostinfo               = `(hostinfo) 2>/dev/null`
  /bin/universe          = `(/bin/universe) 2>/dev/null`
  /usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
  /bin/arch              = `(/bin/arch) 2>/dev/null`
  /usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
  /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
  
  UNAME_MACHINE = ${UNAME_MACHINE}
  UNAME_RELEASE = ${UNAME_RELEASE}
  UNAME_SYSTEM  = ${UNAME_SYSTEM}
  UNAME_VERSION = ${UNAME_VERSION}
  EOF
  
  exit 1
  
  # Local variables:
  # eval: (add-hook 'write-file-hooks 'time-stamp)
  # time-stamp-start: "timestamp='"
  # time-stamp-format: "%:y-%02m-%02d"
  # time-stamp-end: "'"
  # End:
  Index: ossp-pkg/srpc/libxds/config.h.in
  ============================================================
  $ cvs update -p -r1.1 config.h.in
  /* config.h.in.  Generated automatically from configure.ac by autoheader.  */
  
  /* Define if you have the <dlfcn.h> header file. */
  #undef HAVE_DLFCN_H
  
  /* Define if you have the <inttypes.h> header file. */
  #undef HAVE_INTTYPES_H
  
  /* Define if you have the <memory.h> header file. */
  #undef HAVE_MEMORY_H
  
  /* Define if you have the <stdint.h> header file. */
  #undef HAVE_STDINT_H
  
  /* Define if you have the <stdlib.h> header file. */
  #undef HAVE_STDLIB_H
  
  /* Define if you have the <strings.h> header file. */
  #undef HAVE_STRINGS_H
  
  /* Define if you have the <string.h> header file. */
  #undef HAVE_STRING_H
  
  /* Define if you have the <sys/stat.h> header file. */
  #undef HAVE_SYS_STAT_H
  
  /* Define if you have the <sys/types.h> header file. */
  #undef HAVE_SYS_TYPES_H
  
  /* Define if you have the <unistd.h> header file. */
  #undef HAVE_UNISTD_H
  
  /* Define if you have the ANSI C header files. */
  #undef STDC_HEADERS
  Index: ossp-pkg/srpc/libxds/config.sub
  ============================================================
  $ cvs update -p -r1.1 config.sub
  #! /bin/sh
  # Configuration validation subroutine script.
  #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
  #   Free Software Foundation, Inc.
  
  timestamp='2001-04-20'
  
  # This file is (in principle) common to ALL GNU software.
  # The presence of a machine in this file suggests that SOME GNU software
  # can handle that machine.  It does not imply ALL GNU software can.
  #
  # This file is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 2 of the License, or
  # (at your option) any later version.
  #
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  #
  # You should have received a copy of the GNU General Public License
  # along with this program; if not, write to the Free Software
  # Foundation, Inc., 59 Temple Place - Suite 330,
  # Boston, MA 02111-1307, USA.
  
  # As a special exception to the GNU General Public License, if you
  # distribute this file as part of a program that contains a
  # configuration script generated by Autoconf, you may include it under
  # the same distribution terms that you use for the rest of that program.
  
  # Please send patches to <config-patches@gnu.org>.
  #
  # Configuration subroutine to validate and canonicalize a configuration type.
  # Supply the specified configuration type as an argument.
  # If it is invalid, we print an error message on stderr and exit with code 1.
  # Otherwise, we print the canonical config type on stdout and succeed.
  
  # This file is supposed to be the same for all GNU packages
  # and recognize all the CPU types, system types and aliases
  # that are meaningful with *any* GNU software.
  # Each package is responsible for reporting which valid configurations
  # it does not support.  The user should be able to distinguish
  # a failure to support a valid configuration from a meaningless
  # configuration.
  
  # The goal of this file is to map all the various variations of a given
  # machine specification into a single specification in the form:
  #	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
  # or in some cases, the newer four-part form:
  #	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
  # It is wrong to echo any other type of specification.
  
  me=`echo "$0" | sed -e 's,.*/,,'`
  
  usage="\
  Usage: $0 [OPTION] CPU-MFR-OPSYS
         $0 [OPTION] ALIAS
  
  Canonicalize a configuration name.
  
  Operation modes:
    -h, --help         print this help, then exit
    -t, --time-stamp   print date of last modification, then exit
    -v, --version      print version number, then exit
  
  Report bugs and patches to <config-patches@gnu.org>."
  
  version="\
  GNU config.sub ($timestamp)
  
  Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
  Free Software Foundation, Inc.
  
  This is free software; see the source for copying conditions.  There is NO
  warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
  
  help="
  Try \`$me --help' for more information."
  
  # Parse command line
  while test $# -gt 0 ; do
    case $1 in
      --time-stamp | --time* | -t )
         echo "$timestamp" ; exit 0 ;;
      --version | -v )
         echo "$version" ; exit 0 ;;
      --help | --h* | -h )
         echo "$usage"; exit 0 ;;
      -- )     # Stop option processing
         shift; break ;;
      - )	# Use stdin as input.
         break ;;
      -* )
         echo "$me: invalid option $1$help"
         exit 1 ;;
  
      *local*)
         # First pass through any local machine types.
         echo $1
         exit 0;;
  
      * )
         break ;;
    esac
  done
  
  case $# in
   0) echo "$me: missing argument$help" >&2
      exit 1;;
   1) ;;
   *) echo "$me: too many arguments$help" >&2
      exit 1;;
  esac
  
  # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
  # Here we must recognize all the valid KERNEL-OS combinations.
  maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
  case $maybe_os in
    nto-qnx* | linux-gnu* | storm-chaos* | os2-emx*)
      os=-$maybe_os
      basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
      ;;
    *)
      basic_machine=`echo $1 | sed 's/-[^-]*$//'`
      if [ $basic_machine != $1 ]
      then os=`echo $1 | sed 's/.*-/-/'`
      else os=; fi
      ;;
  esac
  
  ### Let's recognize common machines as not being operating systems so
  ### that things like config.sub decstation-3100 work.  We also
  ### recognize some manufacturers as not being operating systems, so we
  ### can provide default operating systems below.
  case $os in
  	-sun*os*)
  		# Prevent following clause from handling this invalid input.
  		;;
  	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
  	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
  	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
  	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
  	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
  	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
  	-apple | -axis)
  		os=
  		basic_machine=$1
  		;;
  	-sim | -cisco | -oki | -wec | -winbond)
  		os=
  		basic_machine=$1
  		;;
  	-scout)
  		;;
  	-wrs)
  		os=-vxworks
  		basic_machine=$1
  		;;
  	-hiux*)
  		os=-hiuxwe2
  		;;
  	-sco5)
  		os=-sco3.2v5
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  		;;
  	-sco4)
  		os=-sco3.2v4
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  		;;
  	-sco3.2.[4-9]*)
  		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  		;;
  	-sco3.2v[4-9]*)
  		# Don't forget version if it is 3.2v4 or newer.
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  		;;
  	-sco*)
  		os=-sco3.2v2
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  		;;
  	-udk*)
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  		;;
  	-isc)
  		os=-isc2.2
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  		;;
  	-clix*)
  		basic_machine=clipper-intergraph
  		;;
  	-isc*)
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  		;;
  	-lynx*)
  		os=-lynxos
  		;;
  	-ptx*)
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
  		;;
  	-windowsnt*)
  		os=`echo $os | sed -e 's/windowsnt/winnt/'`
  		;;
  	-psos*)
  		os=-psos
  		;;
  	-mint | -mint[0-9]*)
  		basic_machine=m68k-atari
  		os=-mint
  		;;
  esac
  
  # Decode aliases for certain CPU-COMPANY combinations.
  case $basic_machine in
  	# Recognize the basic CPU types without company name.
  	# Some are omitted here because they have special meanings below.
  	tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc \
  	        | arm | arme[lb] | arm[bl]e | armv[2345] | armv[345][lb] | strongarm | xscale \
  		| pyramid | mn10200 | mn10300 | tron | a29k \
  		| 580 | i960 | h8300 \
  		| x86 | ppcbe | mipsbe | mipsle | shbe | shle \
  		| hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \
  		| hppa64 \
  		| alpha | alphaev[4-8] | alphaev56 | alphapca5[67] \
  		| alphaev6[78] \
  		| we32k | ns16k | clipper | i370 | sh | sh[34] \
  		| powerpc | powerpcle \
  		| 1750a | dsp16xx | pdp10 | pdp11 \
  		| mips16 | mips64 | mipsel | mips64el \
  		| mips64orion | mips64orionel | mipstx39 | mipstx39el \
  		| mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \
  		| mips64vr5000 | miprs64vr5000el | mcore | s390 | s390x \
  		| sparc | sparclet | sparclite | sparc64 | sparcv9 | sparcv9b \
  		| v850 | c4x \
  		| thumb | d10v | d30v | fr30 | avr | openrisc | tic80 \
  		| pj | pjl | h8500)
  		basic_machine=$basic_machine-unknown
  		;;
  	m6811 | m68hc11 | m6812 | m68hc12)
  		# Motorola 68HC11/12.
  		basic_machine=$basic_machine-unknown
  		os=-none
  		;;
  	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | w65)
  		;;
  
  	# We use `pc' rather than `unknown'
  	# because (1) that's what they normally are, and
  	# (2) the word "unknown" tends to confuse beginning users.
  	i*86 | x86_64)
  	  basic_machine=$basic_machine-pc
  	  ;;
  	# Object if more than one company name word.
  	*-*-*)
  		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
  		exit 1
  		;;
  	# Recognize the basic CPU types with company name.
  	# FIXME: clean up the formatting here.
  	vax-* | tahoe-* | i*86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \
  	      | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | c[123]* \
  	      | arm-*  | armbe-* | armle-* | armv*-* | strongarm-* | xscale-* \
  	      | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \
  	      | power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \
  	      | xmp-* | ymp-* \
  	      | x86-* | ppcbe-* | mipsbe-* | mipsle-* | shbe-* | shle-* \
  	      | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* \
  	      | hppa2.0n-* | hppa64-* \
  	      | alpha-* | alphaev[4-8]-* | alphaev56-* | alphapca5[67]-* \
  	      | alphaev6[78]-* \
  	      | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \
  	      | clipper-* | orion-* \
  	      | sparclite-* | pdp10-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
  	      | sparc64-* | sparcv9-* | sparcv9b-* | sparc86x-* \
  	      | mips16-* | mips64-* | mipsel-* \
  	      | mips64el-* | mips64orion-* | mips64orionel-* \
  	      | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \
  	      | mipstx39-* | mipstx39el-* | mcore-* \
  	      | f30[01]-* | f700-* | s390-* | s390x-* | sv1-* | t3e-* \
  	      | [cjt]90-* \
  	      | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \
  	      | thumb-* | v850-* | d30v-* | tic30-* | tic80-* | c30-* | fr30-* \
  	      | bs2000-* | tic54x-* | c54x-* | x86_64-* | pj-* | pjl-*)
  		;;
  	# Recognize the various machine names and aliases which stand
  	# for a CPU type and a company and sometimes even an OS.
  	386bsd)
  		basic_machine=i386-unknown
  		os=-bsd
  		;;
  	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
  		basic_machine=m68000-att
  		;;
  	3b*)
  		basic_machine=we32k-att
  		;;
  	a29khif)
  		basic_machine=a29k-amd
  		os=-udi
  		;;
  	adobe68k)
  		basic_machine=m68010-adobe
  		os=-scout
  		;;
  	alliant | fx80)
  		basic_machine=fx80-alliant
  		;;
  	altos | altos3068)
  		basic_machine=m68k-altos
  		;;
  	am29k)
  		basic_machine=a29k-none
  		os=-bsd
  		;;
  	amdahl)
  		basic_machine=580-amdahl
  		os=-sysv
  		;;
  	amiga | amiga-*)
  		basic_machine=m68k-unknown
  		;;
  	amigaos | amigados)
  		basic_machine=m68k-unknown
  		os=-amigaos
  		;;
  	amigaunix | amix)
  		basic_machine=m68k-unknown
  		os=-sysv4
  		;;
  	apollo68)
  		basic_machine=m68k-apollo
  		os=-sysv
  		;;
  	apollo68bsd)
  		basic_machine=m68k-apollo
  		os=-bsd
  		;;
  	aux)
  		basic_machine=m68k-apple
  		os=-aux
  		;;
  	balance)
  		basic_machine=ns32k-sequent
  		os=-dynix
  		;;
  	convex-c1)
  		basic_machine=c1-convex
  		os=-bsd
  		;;
  	convex-c2)
  		basic_machine=c2-convex
  		os=-bsd
  		;;
  	convex-c32)
  		basic_machine=c32-convex
  		os=-bsd
  		;;
  	convex-c34)
  		basic_machine=c34-convex
  		os=-bsd
  		;;
  	convex-c38)
  		basic_machine=c38-convex
  		os=-bsd
  		;;
  	cray | ymp)
  		basic_machine=ymp-cray
  		os=-unicos
  		;;
  	cray2)
  		basic_machine=cray2-cray
  		os=-unicos
  		;;
  	[cjt]90)
  		basic_machine=${basic_machine}-cray
  		os=-unicos
  		;;
  	crds | unos)
  		basic_machine=m68k-crds
  		;;
  	cris | cris-* | etrax*)
  		basic_machine=cris-axis
  		;;
  	da30 | da30-*)
  		basic_machine=m68k-da30
  		;;
  	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
  		basic_machine=mips-dec
  		;;
  	delta | 3300 | motorola-3300 | motorola-delta \
  	      | 3300-motorola | delta-motorola)
  		basic_machine=m68k-motorola
  		;;
  	delta88)
  		basic_machine=m88k-motorola
  		os=-sysv3
  		;;
  	dpx20 | dpx20-*)
  		basic_machine=rs6000-bull
  		os=-bosx
  		;;
  	dpx2* | dpx2*-bull)
  		basic_machine=m68k-bull
  		os=-sysv3
  		;;
  	ebmon29k)
  		basic_machine=a29k-amd
  		os=-ebmon
  		;;
  	elxsi)
  		basic_machine=elxsi-elxsi
  		os=-bsd
  		;;
  	encore | umax | mmax)
  		basic_machine=ns32k-encore
  		;;
  	es1800 | OSE68k | ose68k | ose | OSE)
  		basic_machine=m68k-ericsson
  		os=-ose
  		;;
  	fx2800)
  		basic_machine=i860-alliant
  		;;
  	genix)
  		basic_machine=ns32k-ns
  		;;
  	gmicro)
  		basic_machine=tron-gmicro
  		os=-sysv
  		;;
  	go32)
  		basic_machine=i386-pc
  		os=-go32
  		;;
  	h3050r* | hiux*)
  		basic_machine=hppa1.1-hitachi
  		os=-hiuxwe2
  		;;
  	h8300hms)
  		basic_machine=h8300-hitachi
  		os=-hms
  		;;
  	h8300xray)
  		basic_machine=h8300-hitachi
  		os=-xray
  		;;
  	h8500hms)
  		basic_machine=h8500-hitachi
  		os=-hms
  		;;
  	harris)
  		basic_machine=m88k-harris
  		os=-sysv3
  		;;
  	hp300-*)
  		basic_machine=m68k-hp
  		;;
  	hp300bsd)
  		basic_machine=m68k-hp
  		os=-bsd
  		;;
  	hp300hpux)
  		basic_machine=m68k-hp
  		os=-hpux
  		;;
  	hp3k9[0-9][0-9] | hp9[0-9][0-9])
  		basic_machine=hppa1.0-hp
  		;;
  	hp9k2[0-9][0-9] | hp9k31[0-9])
  		basic_machine=m68000-hp
  		;;
  	hp9k3[2-9][0-9])
  		basic_machine=m68k-hp
  		;;
  	hp9k6[0-9][0-9] | hp6[0-9][0-9])
  		basic_machine=hppa1.0-hp
  		;;
  	hp9k7[0-79][0-9] | hp7[0-79][0-9])
  		basic_machine=hppa1.1-hp
  		;;
  	hp9k78[0-9] | hp78[0-9])
  		# FIXME: really hppa2.0-hp
  		basic_machine=hppa1.1-hp
  		;;
  	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
  		# FIXME: really hppa2.0-hp
  		basic_machine=hppa1.1-hp
  		;;
  	hp9k8[0-9][13679] | hp8[0-9][13679])
  		basic_machine=hppa1.1-hp
  		;;
  	hp9k8[0-9][0-9] | hp8[0-9][0-9])
  		basic_machine=hppa1.0-hp
  		;;
  	hppa-next)
  		os=-nextstep3
  		;;
  	hppaosf)
  		basic_machine=hppa1.1-hp
  		os=-osf
  		;;
  	hppro)
  		basic_machine=hppa1.1-hp
  		os=-proelf
  		;;
  	i370-ibm* | ibm*)
  		basic_machine=i370-ibm
  		;;
  # I'm not sure what "Sysv32" means.  Should this be sysv3.2?
  	i*86v32)
  		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
  		os=-sysv32
  		;;
  	i*86v4*)
  		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
  		os=-sysv4
  		;;
  	i*86v)
  		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
  		os=-sysv
  		;;
  	i*86sol2)
  		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
  		os=-solaris2
  		;;
  	i386mach)
  		basic_machine=i386-mach
  		os=-mach
  		;;
  	i386-vsta | vsta)
  		basic_machine=i386-unknown
  		os=-vsta
  		;;
  	iris | iris4d)
  		basic_machine=mips-sgi
  		case $os in
  		    -irix*)
  			;;
  		    *)
  			os=-irix4
  			;;
  		esac
  		;;
  	isi68 | isi)
  		basic_machine=m68k-isi
  		os=-sysv
  		;;
  	m88k-omron*)
  		basic_machine=m88k-omron
  		;;
  	magnum | m3230)
  		basic_machine=mips-mips
  		os=-sysv
  		;;
  	merlin)
  		basic_machine=ns32k-utek
  		os=-sysv
  		;;
  	mingw32)
  		basic_machine=i386-pc
  		os=-mingw32
  		;;
  	miniframe)
  		basic_machine=m68000-convergent
  		;;
  	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
  		basic_machine=m68k-atari
  		os=-mint
  		;;
  	mipsel*-linux*)
  		basic_machine=mipsel-unknown
  		os=-linux-gnu
  		;;
  	mips*-linux*)
  		basic_machine=mips-unknown
  		os=-linux-gnu
  		;;
  	mips3*-*)
  		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
  		;;
  	mips3*)
  		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
  		;;
  	mmix*)
  		basic_machine=mmix-knuth
  		os=-mmixware
  		;;
  	monitor)
  		basic_machine=m68k-rom68k
  		os=-coff
  		;;
  	msdos)
  		basic_machine=i386-pc
  		os=-msdos
  		;;
  	mvs)
  		basic_machine=i370-ibm
  		os=-mvs
  		;;
  	ncr3000)
  		basic_machine=i486-ncr
  		os=-sysv4
  		;;
  	netbsd386)
  		basic_machine=i386-unknown
  		os=-netbsd
  		;;
  	netwinder)
  		basic_machine=armv4l-rebel
  		os=-linux
  		;;
  	news | news700 | news800 | news900)
  		basic_machine=m68k-sony
  		os=-newsos
  		;;
  	news1000)
  		basic_machine=m68030-sony
  		os=-newsos
  		;;
  	news-3600 | risc-news)
  		basic_machine=mips-sony
  		os=-newsos
  		;;
  	necv70)
  		basic_machine=v70-nec
  		os=-sysv
  		;;
  	next | m*-next )
  		basic_machine=m68k-next
  		case $os in
  		    -nextstep* )
  			;;
  		    -ns2*)
  		      os=-nextstep2
  			;;
  		    *)
  		      os=-nextstep3
  			;;
  		esac
  		;;
  	nh3000)
  		basic_machine=m68k-harris
  		os=-cxux
  		;;
  	nh[45]000)
  		basic_machine=m88k-harris
  		os=-cxux
  		;;
  	nindy960)
  		basic_machine=i960-intel
  		os=-nindy
  		;;
  	mon960)
  		basic_machine=i960-intel
  		os=-mon960
  		;;
  	nonstopux)
  		basic_machine=mips-compaq
  		os=-nonstopux
  		;;
  	np1)
  		basic_machine=np1-gould
  		;;
  	nsr-tandem)
  		basic_machine=nsr-tandem
  		;;
  	op50n-* | op60c-*)
  		basic_machine=hppa1.1-oki
  		os=-proelf
  		;;
  	OSE68000 | ose68000)
  		basic_machine=m68000-ericsson
  		os=-ose
  		;;
  	os68k)
  		basic_machine=m68k-none
  		os=-os68k
  		;;
  	pa-hitachi)
  		basic_machine=hppa1.1-hitachi
  		os=-hiuxwe2
  		;;
  	paragon)
  		basic_machine=i860-intel
  		os=-osf
  		;;
  	pbd)
  		basic_machine=sparc-tti
  		;;
  	pbb)
  		basic_machine=m68k-tti
  		;;
          pc532 | pc532-*)
  		basic_machine=ns32k-pc532
  		;;
  	pentium | p5 | k5 | k6 | nexgen)
  		basic_machine=i586-pc
  		;;
  	pentiumpro | p6 | 6x86 | athlon)
  		basic_machine=i686-pc
  		;;
  	pentiumii | pentium2)
  		basic_machine=i686-pc
  		;;
  	pentium-* | p5-* | k5-* | k6-* | nexgen-*)
  		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
  		;;
  	pentiumpro-* | p6-* | 6x86-* | athlon-*)
  		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
  		;;
  	pentiumii-* | pentium2-*)
  		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
  		;;
  	pn)
  		basic_machine=pn-gould
  		;;
  	power)	basic_machine=power-ibm
  		;;
  	ppc)	basic_machine=powerpc-unknown
  	        ;;
  	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
  		;;
  	ppcle | powerpclittle | ppc-le | powerpc-little)
  		basic_machine=powerpcle-unknown
  	        ;;
  	ppcle-* | powerpclittle-*)
  		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
  		;;
  	ps2)
  		basic_machine=i386-ibm
  		;;
  	pw32)
  		basic_machine=i586-unknown
  		os=-pw32
  		;;
  	rom68k)
  		basic_machine=m68k-rom68k
  		os=-coff
  		;;
  	rm[46]00)
  		basic_machine=mips-siemens
  		;;
  	rtpc | rtpc-*)
  		basic_machine=romp-ibm
  		;;
  	sa29200)
  		basic_machine=a29k-amd
  		os=-udi
  		;;
  	sequent)
  		basic_machine=i386-sequent
  		;;
  	sh)
  		basic_machine=sh-hitachi
  		os=-hms
  		;;
  	sparclite-wrs)
  		basic_machine=sparclite-wrs
  		os=-vxworks
  		;;
  	sps7)
  		basic_machine=m68k-bull
  		os=-sysv2
  		;;
  	spur)
  		basic_machine=spur-unknown
  		;;
  	st2000)
  		basic_machine=m68k-tandem
  		;;
  	stratus)
  		basic_machine=i860-stratus
  		os=-sysv4
  		;;
  	sun2)
  		basic_machine=m68000-sun
  		;;
  	sun2os3)
  		basic_machine=m68000-sun
  		os=-sunos3
  		;;
  	sun2os4)
  		basic_machine=m68000-sun
  		os=-sunos4
  		;;
  	sun3os3)
  		basic_machine=m68k-sun
  		os=-sunos3
  		;;
  	sun3os4)
  		basic_machine=m68k-sun
  		os=-sunos4
  		;;
  	sun4os3)
  		basic_machine=sparc-sun
  		os=-sunos3
  		;;
  	sun4os4)
  		basic_machine=sparc-sun
  		os=-sunos4
  		;;
  	sun4sol2)
  		basic_machine=sparc-sun
  		os=-solaris2
  		;;
  	sun3 | sun3-*)
  		basic_machine=m68k-sun
  		;;
  	sun4)
  		basic_machine=sparc-sun
  		;;
  	sun386 | sun386i | roadrunner)
  		basic_machine=i386-sun
  		;;
  	sv1)
  		basic_machine=sv1-cray
  		os=-unicos
  		;;
  	symmetry)
  		basic_machine=i386-sequent
  		os=-dynix
  		;;
  	t3e)
  		basic_machine=t3e-cray
  		os=-unicos
  		;;
  	tic54x | c54x*)
  		basic_machine=tic54x-unknown
  		os=-coff
  		;;
  	tx39)
  		basic_machine=mipstx39-unknown
  		;;
  	tx39el)
  		basic_machine=mipstx39el-unknown
  		;;
  	tower | tower-32)
  		basic_machine=m68k-ncr
  		;;
  	udi29k)
  		basic_machine=a29k-amd
  		os=-udi
  		;;
  	ultra3)
  		basic_machine=a29k-nyu
  		os=-sym1
  		;;
  	v810 | necv810)
  		basic_machine=v810-nec
  		os=-none
  		;;
  	vaxv)
  		basic_machine=vax-dec
  		os=-sysv
  		;;
  	vms)
  		basic_machine=vax-dec
  		os=-vms
  		;;
  	vpp*|vx|vx-*)
                 basic_machine=f301-fujitsu
                 ;;
  	vxworks960)
  		basic_machine=i960-wrs
  		os=-vxworks
  		;;
  	vxworks68)
  		basic_machine=m68k-wrs
  		os=-vxworks
  		;;
  	vxworks29k)
  		basic_machine=a29k-wrs
  		os=-vxworks
  		;;
  	w65*)
  		basic_machine=w65-wdc
  		os=-none
  		;;
  	w89k-*)
  		basic_machine=hppa1.1-winbond
  		os=-proelf
  		;;
  	xmp)
  		basic_machine=xmp-cray
  		os=-unicos
  		;;
          xps | xps100)
  		basic_machine=xps100-honeywell
  		;;
  	z8k-*-coff)
  		basic_machine=z8k-unknown
  		os=-sim
  		;;
  	none)
  		basic_machine=none-none
  		os=-none
  		;;
  
  # Here we handle the default manufacturer of certain CPU types.  It is in
  # some cases the only manufacturer, in others, it is the most popular.
  	w89k)
  		basic_machine=hppa1.1-winbond
  		;;
  	op50n)
  		basic_machine=hppa1.1-oki
  		;;
  	op60c)
  		basic_machine=hppa1.1-oki
  		;;
  	mips)
  		if [ x$os = x-linux-gnu ]; then
  			basic_machine=mips-unknown
  		else
  			basic_machine=mips-mips
  		fi
  		;;
  	romp)
  		basic_machine=romp-ibm
  		;;
  	rs6000)
  		basic_machine=rs6000-ibm
  		;;
  	vax)
  		basic_machine=vax-dec
  		;;
  	pdp10)
  		# there are many clones, so DEC is not a safe bet
  		basic_machine=pdp10-unknown
  		;;
  	pdp11)
  		basic_machine=pdp11-dec
  		;;
  	we32k)
  		basic_machine=we32k-att
  		;;
  	sh3 | sh4)
  		basic_machine=sh-unknown
  		;;
  	sparc | sparcv9 | sparcv9b)
  		basic_machine=sparc-sun
  		;;
          cydra)
  		basic_machine=cydra-cydrome
  		;;
  	orion)
  		basic_machine=orion-highlevel
  		;;
  	orion105)
  		basic_machine=clipper-highlevel
  		;;
  	mac | mpw | mac-mpw)
  		basic_machine=m68k-apple
  		;;
  	pmac | pmac-mpw)
  		basic_machine=powerpc-apple
  		;;
  	c4x*)
  		basic_machine=c4x-none
  		os=-coff
  		;;
  	*-unknown)
  		# Make sure to match an already-canonicalized machine name.
  		;;
  	*)
  		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
  		exit 1
  		;;
  esac
  
  # Here we canonicalize certain aliases for manufacturers.
  case $basic_machine in
  	*-digital*)
  		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
  		;;
  	*-commodore*)
  		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
  		;;
  	*)
  		;;
  esac
  
  # Decode manufacturer-specific aliases for certain operating systems.
  
  if [ x"$os" != x"" ]
  then
  case $os in
          # First match some system type aliases
          # that might get confused with valid system types.
  	# -solaris* is a basic system type, with this one exception.
  	-solaris1 | -solaris1.*)
  		os=`echo $os | sed -e 's|solaris1|sunos4|'`
  		;;
  	-solaris)
  		os=-solaris2
  		;;
  	-svr4*)
  		os=-sysv4
  		;;
  	-unixware*)
  		os=-sysv4.2uw
  		;;
  	-gnu/linux*)
  		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
  		;;
  	# First accept the basic system types.
  	# The portable systems comes first.
  	# Each alternative MUST END IN A *, to match a version number.
  	# -sysv* is not here because it comes later, after sysvr4.
  	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
  	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
  	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
  	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
  	      | -aos* \
  	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
  	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
  	      | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
  	      | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
  	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
  	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
  	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
  	      | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
  	      | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
  	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
  	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* | -os2*)
  	# Remember, each alternative MUST END IN *, to match a version number.
  		;;
  	-qnx*)
  		case $basic_machine in
  		    x86-* | i*86-*)
  			;;
  		    *)
  			os=-nto$os
  			;;
  		esac
  		;;
  	-nto*)
  		os=-nto-qnx
  		;;
  	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
  	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
  	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
  		;;
  	-mac*)
  		os=`echo $os | sed -e 's|mac|macos|'`
  		;;
  	-linux*)
  		os=`echo $os | sed -e 's|linux|linux-gnu|'`
  		;;
  	-sunos5*)
  		os=`echo $os | sed -e 's|sunos5|solaris2|'`
  		;;
  	-sunos6*)
  		os=`echo $os | sed -e 's|sunos6|solaris3|'`
  		;;
  	-opened*)
  		os=-openedition
  		;;
  	-wince*)
  		os=-wince
  		;;
  	-osfrose*)
  		os=-osfrose
  		;;
  	-osf*)
  		os=-osf
  		;;
  	-utek*)
  		os=-bsd
  		;;
  	-dynix*)
  		os=-bsd
  		;;
  	-acis*)
  		os=-aos
  		;;
  	-386bsd)
  		os=-bsd
  		;;
  	-ctix* | -uts*)
  		os=-sysv
  		;;
  	-ns2 )
  	        os=-nextstep2
  		;;
  	-nsk*)
  		os=-nsk
  		;;
  	# Preserve the version number of sinix5.
  	-sinix5.*)
  		os=`echo $os | sed -e 's|sinix|sysv|'`
  		;;
  	-sinix*)
  		os=-sysv4
  		;;
  	-triton*)
  		os=-sysv3
  		;;
  	-oss*)
  		os=-sysv3
  		;;
  	-svr4)
  		os=-sysv4
  		;;
  	-svr3)
  		os=-sysv3
  		;;
  	-sysvr4)
  		os=-sysv4
  		;;
  	# This must come after -sysvr4.
  	-sysv*)
  		;;
  	-ose*)
  		os=-ose
  		;;
  	-es1800*)
  		os=-ose
  		;;
  	-xenix)
  		os=-xenix
  		;;
          -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
  	        os=-mint
  		;;
  	-none)
  		;;
  	*)
  		# Get rid of the `-' at the beginning of $os.
  		os=`echo $os | sed 's/[^-]*-//'`
  		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
  		exit 1
  		;;
  esac
  else
  
  # Here we handle the default operating systems that come with various machines.
  # The value should be what the vendor currently ships out the door with their
  # machine or put another way, the most popular os provided with the machine.
  
  # Note that if you're going to try to match "-MANUFACTURER" here (say,
  # "-sun"), then you have to tell the case statement up towards the top
  # that MANUFACTURER isn't an operating system.  Otherwise, code above
  # will signal an error saying that MANUFACTURER isn't an operating
  # system, and we'll never get to this point.
  
  case $basic_machine in
  	*-acorn)
  		os=-riscix1.2
  		;;
  	arm*-rebel)
  		os=-linux
  		;;
  	arm*-semi)
  		os=-aout
  		;;
  	pdp10-*)
  		os=-tops20
  		;;
          pdp11-*)
  		os=-none
  		;;
  	*-dec | vax-*)
  		os=-ultrix4.2
  		;;
  	m68*-apollo)
  		os=-domain
  		;;
  	i386-sun)
  		os=-sunos4.0.2
  		;;
  	m68000-sun)
  		os=-sunos3
  		# This also exists in the configure program, but was not the
  		# default.
  		# os=-sunos4
  		;;
  	m68*-cisco)
  		os=-aout
  		;;
  	mips*-cisco)
  		os=-elf
  		;;
  	mips*-*)
  		os=-elf
  		;;
  	*-tti)	# must be before sparc entry or we get the wrong os.
  		os=-sysv3
  		;;
  	sparc-* | *-sun)
  		os=-sunos4.1.1
  		;;
  	*-be)
  		os=-beos
  		;;
  	*-ibm)
  		os=-aix
  		;;
  	*-wec)
  		os=-proelf
  		;;
  	*-winbond)
  		os=-proelf
  		;;
  	*-oki)
  		os=-proelf
  		;;
  	*-hp)
  		os=-hpux
  		;;
  	*-hitachi)
  		os=-hiux
  		;;
  	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
  		os=-sysv
  		;;
  	*-cbm)
  		os=-amigaos
  		;;
  	*-dg)
  		os=-dgux
  		;;
  	*-dolphin)
  		os=-sysv3
  		;;
  	m68k-ccur)
  		os=-rtu
  		;;
  	m88k-omron*)
  		os=-luna
  		;;
  	*-next )
  		os=-nextstep
  		;;
  	*-sequent)
  		os=-ptx
  		;;
  	*-crds)
  		os=-unos
  		;;
  	*-ns)
  		os=-genix
  		;;
  	i370-*)
  		os=-mvs
  		;;
  	*-next)
  		os=-nextstep3
  		;;
          *-gould)
  		os=-sysv
  		;;
          *-highlevel)
  		os=-bsd
  		;;
  	*-encore)
  		os=-bsd
  		;;
          *-sgi)
  		os=-irix
  		;;
          *-siemens)
  		os=-sysv4
  		;;
  	*-masscomp)
  		os=-rtu
  		;;
  	f30[01]-fujitsu | f700-fujitsu)
  		os=-uxpv
  		;;
  	*-rom68k)
  		os=-coff
  		;;
  	*-*bug)
  		os=-coff
  		;;
  	*-apple)
  		os=-macos
  		;;
  	*-atari*)
  		os=-mint
  		;;
  	*)
  		os=-none
  		;;
  esac
  fi
  
  # Here we handle the case where we know the os, and the CPU type, but not the
  # manufacturer.  We pick the logical manufacturer.
  vendor=unknown
  case $basic_machine in
  	*-unknown)
  		case $os in
  			-riscix*)
  				vendor=acorn
  				;;
  			-sunos*)
  				vendor=sun
  				;;
  			-aix*)
  				vendor=ibm
  				;;
  			-beos*)
  				vendor=be
  				;;
  			-hpux*)
  				vendor=hp
  				;;
  			-mpeix*)
  				vendor=hp
  				;;
  			-hiux*)
  				vendor=hitachi
  				;;
  			-unos*)
  				vendor=crds
  				;;
  			-dgux*)
  				vendor=dg
  				;;
  			-luna*)
  				vendor=omron
  				;;
  			-genix*)
  				vendor=ns
  				;;
  			-mvs* | -opened*)
  				vendor=ibm
  				;;
  			-ptx*)
  				vendor=sequent
  				;;
  			-vxsim* | -vxworks*)
  				vendor=wrs
  				;;
  			-aux*)
  				vendor=apple
  				;;
  			-hms*)
  				vendor=hitachi
  				;;
  			-mpw* | -macos*)
  				vendor=apple
  				;;
  			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
  				vendor=atari
  				;;
  		esac
  		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
  		;;
  esac
  
  echo $basic_machine$os
  exit 0
  
  # Local variables:
  # eval: (add-hook 'write-file-hooks 'time-stamp)
  # time-stamp-start: "timestamp='"
  # time-stamp-format: "%:y-%02m-%02d"
  # time-stamp-end: "'"
  # End:
  Index: ossp-pkg/srpc/libxds/configure.ac
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 configure.ac
  --- ossp-pkg/srpc/libxds/configure.ac	2001/08/09 21:21:04	1.19
  +++ ossp-pkg/srpc/libxds/configure.ac	2001/08/11 15:23:09	1.20
  @@ -27,78 +27,35 @@
   dnl ##  configure.ac: autoconf script source
   dnl ##
   
  -AC_INIT(xds.h.in)
   AC_PREREQ(2.52)
  -AC_REVISION($Revision: 1.19 $)
  +AC_REVISION(1.0)
  +AC_INIT(xds.h.in)
   
  -dnl Get rid of the lousy -g and -O defaults in CFLAGS.
  -dnl
  -CFLAGS=${CFLAGS:-}
  +AC_HEADLINE(dnl
  +XDS, eXtensible Data Serialization, dnl
  +XDS_VERSION, xds_version.c, dnl
  +[Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  +Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)])
  +AC_PLATFORM(PLATFORM)
  +AC_CONFIG_HEADERS(config.h)
   
  -dnl Checks for paths and programs.
  -dnl
  +AC_MSG_PART(Build Tools)
  +AC_SET_MAKE
   AC_PROG_CC
  -AC_PROG_RANLIB
   AC_CHECK_PROG(LATEX, latex, latex, :)
   AC_CHECK_PROG(POD2MAN, pod2man, pod2man, :)
  -
  -dnl Set special flags for gcc.
  -dnl
  -if test "$GCC" = yes; then
  -    CFLAGS="$CFLAGS -Wall -pedantic -Wshadow -Wpointer-arith -Wcast-align -Winline -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Wno-long-long"
  -fi
  -
  -dnl Check for exact data types.
  -dnl
  -AC_CHECK_TYPE(u_int8_t, [xds_uint8_t=u_int8_t],
  -              [AC_CHECK_TYPE(uint8_t, [xds_uint8_t=uint8_t],
  -			     [AC_MSG_ERROR([no unsigned 8 bit data type found])])])
  -AC_CHECK_TYPE(u_int16_t, [xds_uint16_t=u_int16_t],
  -              [AC_CHECK_TYPE(uint16_t, [xds_uint16_t=uint16_t],
  -			     [AC_MSG_ERROR([no unsigned 16 bit data type found])])])
  -AC_CHECK_TYPE(u_int32_t, [xds_uint32_t=u_int32_t],
  -              [AC_CHECK_TYPE(uint32_t, [xds_uint32_t=uint32_t],
  -			     [AC_MSG_ERROR([no unsigned 32 bit data type found])])])
  -AC_CHECK_TYPE(u_int64_t, [xds_uint64_t=u_int64_t],
  -              [AC_CHECK_TYPE(uint64_t, [xds_uint64_t=uint64_t],
  -			     [AC_MSG_WARN([no unsigned 64 bit data type found])
  -			     xds_uint64_t=undefined])])
  -dnl
  -AC_CHECK_TYPE(int8_t, [xds_int8_t=int8_t],
  -              [AC_MSG_ERROR([no signed 8 bit data type found])
  -	      ])
  -AC_CHECK_TYPE(int16_t, [xds_int16_t=int16_t],
  -              [AC_MSG_ERROR([no signed 16 bit data type found])
  -	      ])
  -AC_CHECK_TYPE(int32_t, [xds_int32_t=int32_t],
  -              [AC_MSG_ERROR([no signed 32 bit data type found])
  -	      ])
  -AC_CHECK_TYPE(int64_t, [xds_int64_t=int64_t],
  -              [AC_MSG_WARN([no signed 64 bit data type found])
  -	      xds_int64_t=undefined])
  -dnl
  -AC_SUBST([xds_uint8_t])
  -AC_SUBST([xds_uint16_t])
  -AC_SUBST([xds_uint32_t])
  -AC_SUBST([xds_uint64_t])
  -AC_SUBST([xds_int8_t])
  -AC_SUBST([xds_int16_t])
  -AC_SUBST([xds_int32_t])
  -AC_SUBST([xds_int64_t])
  -if test "$xds_int64_t" = "undefined" -o "$xds_uint64_t" = "undefined"; then
  -   have_64_bit_support="#undef XDS_HAVE_64_BIT_SUPPORT"
  -else
  -   have_64_bit_support="#define XDS_HAVE_64_BIT_SUPPORT"
  -fi
  -AC_SUBST([have_64_bit_support])
  -
  -dnl Find the library containing the xdr_xxx() functions.
  -dnl
  +AC_CHECK_DEBUGGING
   AC_CHECK_LIB(nsl, xdrmem_create, [xdr_lib=-lnsl])
   AC_SUBST([xdr_lib])
   
  -dnl Write results.
  -dnl
  +AC_MSG_PART(Libtool Configuration)
  +AC_CONFIGURE_LIBTOOL
  +
  +AC_MSG_PART(XDS Configuration)
  +AC_CONFIGURE_XDS
  +
  +AC_MSG_PART(Output Substitution)
   AC_CONFIG_FILES(xds.h xds-config Makefile docs/Makefile)
  -AC_CONFIG_COMMANDS([default], [chmod -w xds.h Makefile docs/Makefile])
  +AC_CONFIG_COMMANDS([default], [chmod a+x xds-config; chmod -w xds.h Makefile docs/Makefile])
   AC_OUTPUT
  +
  Index: ossp-pkg/srpc/libxds/libtool.m4
  ============================================================
  $ cvs update -p -r1.1 libtool.m4
  # libtool.m4 - Configure libtool for the host system. -*-Shell-script-*-
  ## Copyright 1996, 1997, 1998, 1999, 2000, 2001
  ## Free Software Foundation, Inc.
  ## Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
  ##
  ## This program is free software; you can redistribute it and/or modify
  ## it under the terms of the GNU General Public License as published by
  ## the Free Software Foundation; either version 2 of the License, or
  ## (at your option) any later version.
  ##
  ## This program is distributed in the hope that it will be useful, but
  ## WITHOUT ANY WARRANTY; without even the implied warranty of
  ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  ## General Public License for more details.
  ##
  ## You should have received a copy of the GNU General Public License
  ## along with this program; if not, write to the Free Software
  ## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  ##
  ## As a special exception to the GNU General Public License, if you
  ## distribute this file as part of a program that contains a
  ## configuration script generated by Autoconf, you may include it under
  ## the same distribution terms that you use for the rest of that program.
  
  # serial 46 AC_PROG_LIBTOOL
  AC_DEFUN([AC_PROG_LIBTOOL],
  [AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
  
  # This can be used to rebuild libtool when needed
  LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
  
  # Always use our own libtool.
  LIBTOOL='$(SHELL) $(top_builddir)/libtool'
  AC_SUBST(LIBTOOL)dnl
  
  # Prevent multiple expansion
  define([AC_PROG_LIBTOOL], [])
  ])
  
  AC_DEFUN([AC_LIBTOOL_SETUP],
  [AC_PREREQ(2.13)dnl
  AC_REQUIRE([AC_ENABLE_SHARED])dnl
  AC_REQUIRE([AC_ENABLE_STATIC])dnl
  AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl
  AC_REQUIRE([AC_CANONICAL_HOST])dnl
  AC_REQUIRE([AC_CANONICAL_BUILD])dnl
  AC_REQUIRE([AC_PROG_CC])dnl
  AC_REQUIRE([AC_PROG_LD])dnl
  AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl
  AC_REQUIRE([AC_PROG_NM])dnl
  AC_REQUIRE([AC_PROG_LN_S])dnl
  AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl
  AC_REQUIRE([AC_OBJEXT])dnl
  AC_REQUIRE([AC_EXEEXT])dnl
  dnl
  
  _LT_AC_PROG_ECHO_BACKSLASH
  # Only perform the check for file, if the check method requires it
  case $deplibs_check_method in
  file_magic*)
    if test "$file_magic_cmd" = '$MAGIC_CMD'; then
      AC_PATH_MAGIC
    fi
    ;;
  esac
  
  AC_CHECK_TOOL(RANLIB, ranlib, :)
  AC_CHECK_TOOL(STRIP, strip, :)
  
  ifdef([AC_PROVIDE_AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no)
  ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL],
  enable_win32_dll=yes, enable_win32_dll=no)
  
  AC_ARG_ENABLE(libtool-lock,
    [  --disable-libtool-lock  avoid locking (might break parallel builds)])
  test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
  
  # Some flags need to be propagated to the compiler or linker for good
  # libtool support.
  case $host in
  *-*-irix6*)
    # Find out which ABI we are using.
    echo '[#]line __oline__ "configure"' > conftest.$ac_ext
    if AC_TRY_EVAL(ac_compile); then
      case `/usr/bin/file conftest.$ac_objext` in
      *32-bit*)
        LD="${LD-ld} -32"
        ;;
      *N32*)
        LD="${LD-ld} -n32"
        ;;
      *64-bit*)
        LD="${LD-ld} -64"
        ;;
      esac
    fi
    rm -rf conftest*
    ;;
  
  *-*-sco3.2v5*)
    # On SCO OpenServer 5, we need -belf to get full-featured binaries.
    SAVE_CFLAGS="$CFLAGS"
    CFLAGS="$CFLAGS -belf"
    AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
      [AC_LANG_SAVE
       AC_LANG_C
       AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
       AC_LANG_RESTORE])
    if test x"$lt_cv_cc_needs_belf" != x"yes"; then
      # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
      CFLAGS="$SAVE_CFLAGS"
    fi
    ;;
  
  ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL],
  [*-*-cygwin* | *-*-mingw* | *-*-pw32*)
    AC_CHECK_TOOL(DLLTOOL, dlltool, false)
    AC_CHECK_TOOL(AS, as, false)
    AC_CHECK_TOOL(OBJDUMP, objdump, false)
  
    # recent cygwin and mingw systems supply a stub DllMain which the user
    # can override, but on older systems we have to supply one
    AC_CACHE_CHECK([if libtool should supply DllMain function], lt_cv_need_dllmain,
      [AC_TRY_LINK([],
        [extern int __attribute__((__stdcall__)) DllMain(void*, int, void*);
        DllMain (0, 0, 0);],
        [lt_cv_need_dllmain=no],[lt_cv_need_dllmain=yes])])
  
    case $host/$CC in
    *-*-cygwin*/gcc*-mno-cygwin*|*-*-mingw*)
      # old mingw systems require "-dll" to link a DLL, while more recent ones
      # require "-mdll"
      SAVE_CFLAGS="$CFLAGS"
      CFLAGS="$CFLAGS -mdll"
      AC_CACHE_CHECK([how to link DLLs], lt_cv_cc_dll_switch,
        [AC_TRY_LINK([], [], [lt_cv_cc_dll_switch=-mdll],[lt_cv_cc_dll_switch=-dll])])
      CFLAGS="$SAVE_CFLAGS" ;;
    *-*-cygwin* | *-*-pw32*)
      # cygwin systems need to pass --dll to the linker, and not link
      # crt.o which will require a WinMain@16 definition.
      lt_cv_cc_dll_switch="-Wl,--dll -nostartfiles" ;;
    esac
    ;;
    ])
  esac
  
  _LT_AC_LTCONFIG_HACK
  
  ])
  
  # _LT_AC_CHECK_DLFCN
  # --------------------
  AC_DEFUN(_LT_AC_CHECK_DLFCN,
  [AC_CHECK_HEADERS(dlfcn.h)
  ])# _LT_AC_CHECK_DLFCN
  
  # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
  # ---------------------------------
  AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE],
  [AC_REQUIRE([AC_CANONICAL_HOST])
  AC_REQUIRE([AC_PROG_NM])
  AC_REQUIRE([AC_OBJEXT])
  # Check for command to grab the raw symbol name followed by C symbol from nm.
  AC_MSG_CHECKING([command to parse $NM output])
  AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [dnl
  
  # These are sane defaults that work on at least a few old systems.
  # [They come from Ultrix.  What could be older than Ultrix?!! ;)]
  
  # Character class describing NM global symbol codes.
  [symcode='[BCDEGRST]']
  
  # Regexp to match symbols that can be accessed directly from C.
  [sympat='\([_A-Za-z][_A-Za-z0-9]*\)']
  
  # Transform the above into a raw symbol and a C symbol.
  symxfrm='\1 \2\3 \3'
  
  # Transform an extracted symbol line into a proper C declaration
  lt_cv_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'"
  
  # Define system-specific variables.
  case $host_os in
  aix*)
    [symcode='[BCDT]']
    ;;
  cygwin* | mingw* | pw32*)
    [symcode='[ABCDGISTW]']
    ;;
  hpux*) # Its linker distinguishes data from code symbols
    lt_cv_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
    ;;
  irix*)
    [symcode='[BCDEGRST]']
    ;;
  solaris* | sysv5*)
    [symcode='[BDT]']
    ;;
  sysv4)
    [symcode='[DFNSTU]']
    ;;
  esac
  
  # Handle CRLF in mingw tool chain
  opt_cr=
  case $host_os in
  mingw*)
    opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
    ;;
  esac
  
  # If we're using GNU nm, then use its standard symbol codes.
  if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then
    [symcode='[ABCDGISTW]']
  fi
  
  # Try without a prefix undercore, then with it.
  for ac_symprfx in "" "_"; do
  
    # Write the raw and C identifiers.
  [lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ 	]\($symcode$symcode*\)[ 	][ 	]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'"]
  
    # Check to see that the pipe works correctly.
    pipe_works=no
    rm -f conftest*
    cat > conftest.$ac_ext <<EOF
  #ifdef __cplusplus
  extern "C" {
  #endif
  char nm_test_var;
  void nm_test_func(){}
  #ifdef __cplusplus
  }
  #endif
  int main(){nm_test_var='a';nm_test_func();return(0);}
  EOF
  
    if AC_TRY_EVAL(ac_compile); then
      # Now try to grab the symbols.
      nlist=conftest.nm
      if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
        # Try sorting and uniquifying the output.
        if sort "$nlist" | uniq > "$nlist"T; then
  	mv -f "$nlist"T "$nlist"
        else
  	rm -f "$nlist"T
        fi
  
        # Make sure that we snagged all the symbols we need.
        if egrep ' nm_test_var$' "$nlist" >/dev/null; then
  	if egrep ' nm_test_func$' "$nlist" >/dev/null; then
  	  cat <<EOF > conftest.$ac_ext
  #ifdef __cplusplus
  extern "C" {
  #endif
  
  EOF
  	  # Now generate the symbol file.
  	  eval "$lt_cv_global_symbol_to_cdecl"' < "$nlist" >> conftest.$ac_ext'
  
  	  cat <<EOF >> conftest.$ac_ext
  #if defined (__STDC__) && __STDC__
  # define lt_ptr_t void *
  #else
  # define lt_ptr_t char *
  # define const
  #endif
  
  /* The mapping between symbol names and symbols. */
  const struct {
    const char *name;
    lt_ptr_t address;
  }
  [lt_preloaded_symbols[] =]
  {
  EOF
  	  sed "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" >> conftest.$ac_ext
  	  cat <<\EOF >> conftest.$ac_ext
    {0, (lt_ptr_t) 0}
  };
  
  #ifdef __cplusplus
  }
  #endif
  EOF
  	  # Now try linking the two files.
  	  mv conftest.$ac_objext conftstm.$ac_objext
  	  save_LIBS="$LIBS"
  	  save_CFLAGS="$CFLAGS"
  	  LIBS="conftstm.$ac_objext"
  	  CFLAGS="$CFLAGS$no_builtin_flag"
  	  if AC_TRY_EVAL(ac_link) && test -s conftest; then
  	    pipe_works=yes
  	  fi
  	  LIBS="$save_LIBS"
  	  CFLAGS="$save_CFLAGS"
  	else
  	  echo "cannot find nm_test_func in $nlist" >&AC_FD_CC
  	fi
        else
  	echo "cannot find nm_test_var in $nlist" >&AC_FD_CC
        fi
      else
        echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AC_FD_CC
      fi
    else
      echo "$progname: failed program was:" >&AC_FD_CC
      cat conftest.$ac_ext >&5
    fi
    rm -f conftest* conftst*
  
    # Do not use the global_symbol_pipe unless it works.
    if test "$pipe_works" = yes; then
      break
    else
      lt_cv_sys_global_symbol_pipe=
    fi
  done
  ])
  global_symbol_pipe="$lt_cv_sys_global_symbol_pipe"
  if test -z "$lt_cv_sys_global_symbol_pipe"; then
    global_symbol_to_cdecl=
  else
    global_symbol_to_cdecl="$lt_cv_global_symbol_to_cdecl"
  fi
  if test -z "$global_symbol_pipe$global_symbol_to_cdecl"; then
    AC_MSG_RESULT(failed)
  else
    AC_MSG_RESULT(ok)
  fi
  ]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
  
  # _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR
  # ---------------------------------
  AC_DEFUN([_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR],
  [# Find the correct PATH separator.  Usually this is `:', but
  # DJGPP uses `;' like DOS.
  if test "X${PATH_SEPARATOR+set}" != Xset; then
    UNAME=${UNAME-`uname 2>/dev/null`}
    case X$UNAME in
      *-DOS) lt_cv_sys_path_separator=';' ;;
      *)     lt_cv_sys_path_separator=':' ;;
    esac
  fi
  ])# _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR
  
  # _LT_AC_PROG_ECHO_BACKSLASH
  # --------------------------
  # Add some code to the start of the generated configure script which
  # will find an echo command which doesn;t interpret backslashes.
  AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH],
  [ifdef([AC_DIVERSION_NOTICE], [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
                                [AC_DIVERT_PUSH(NOTICE)])
  _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR
  
  # Check that we are running under the correct shell.
  SHELL=${CONFIG_SHELL-/bin/sh}
  
  case X$ECHO in
  X*--fallback-echo)
    # Remove one level of quotation (which was required for Make).
    ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
    ;;
  esac
  
  echo=${ECHO-echo}
  if test "X[$]1" = X--no-reexec; then
    # Discard the --no-reexec flag, and continue.
    shift
  elif test "X[$]1" = X--fallback-echo; then
    # Avoid inline document here, it may be left over
    :
  elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
    # Yippee, $echo works!
    :
  else
    # Restart under the correct shell.
    exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
  fi
  
  if test "X[$]1" = X--fallback-echo; then
    # used as fallback echo
    shift
    cat <<EOF
  $*
  EOF
    exit 0
  fi
  
  # The HP-UX ksh and POSIX shell print the target directory to stdout
  # if CDPATH is set.
  if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
  
  if test -z "$ECHO"; then
  if test "X${echo_test_string+set}" != Xset; then
  # find a string as large as possible, as long as the shell can cope with it
    for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
      if (echo_test_string="`eval $cmd`") 2>/dev/null &&
         echo_test_string="`eval $cmd`" &&
         (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
      then
        break
      fi
    done
  fi
  
  if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
     echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
     test "X$echo_testing_string" = "X$echo_test_string"; then
    :
  else
    # The Solaris, AIX, and Digital Unix default echo programs unquote
    # backslashes.  This makes it impossible to quote backslashes using
    #   echo "$something" | sed 's/\\/\\\\/g'
    #
    # So, first we look for a working echo in the user's PATH.
  
    IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
    for dir in $PATH /usr/ucb; do
      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
         test "X$echo_testing_string" = "X$echo_test_string"; then
        echo="$dir/echo"
        break
      fi
    done
    IFS="$save_ifs"
  
    if test "X$echo" = Xecho; then
      # We didn't find a better echo, so look for alternatives.
      if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
         echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
         test "X$echo_testing_string" = "X$echo_test_string"; then
        # This shell has a builtin print -r that does the trick.
        echo='print -r'
      elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
  	 test "X$CONFIG_SHELL" != X/bin/ksh; then
        # If we have ksh, try running configure again with it.
        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
        export ORIGINAL_CONFIG_SHELL
        CONFIG_SHELL=/bin/ksh
        export CONFIG_SHELL
        exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
      else
        # Try using printf.
        echo='printf %s\n'
        if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
  	 echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
  	 test "X$echo_testing_string" = "X$echo_test_string"; then
  	# Cool, printf works
  	:
        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
  	   test "X$echo_testing_string" = 'X\t' &&
  	   echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
  	   test "X$echo_testing_string" = "X$echo_test_string"; then
  	CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
  	export CONFIG_SHELL
  	SHELL="$CONFIG_SHELL"
  	export SHELL
  	echo="$CONFIG_SHELL [$]0 --fallback-echo"
        elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
  	   test "X$echo_testing_string" = 'X\t' &&
  	   echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
  	   test "X$echo_testing_string" = "X$echo_test_string"; then
  	echo="$CONFIG_SHELL [$]0 --fallback-echo"
        else
  	# maybe with a smaller string...
  	prev=:
  
  	for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
  	  if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
  	  then
  	    break
  	  fi
  	  prev="$cmd"
  	done
  
  	if test "$prev" != 'sed 50q "[$]0"'; then
  	  echo_test_string=`eval $prev`
  	  export echo_test_string
  	  exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
  	else
  	  # Oops.  We lost completely, so just stick with echo.
  	  echo=echo
  	fi
        fi
      fi
    fi
  fi
  fi
  
  # Copy echo and quote the copy suitably for passing to libtool from
  # the Makefile, instead of quoting the original, which is used later.
  ECHO=$echo
  if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
     ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
  fi
  
  AC_SUBST(ECHO)
  AC_DIVERT_POP
  ])# _LT_AC_PROG_ECHO_BACKSLASH
  
  # _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
  #                           ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
  # ------------------------------------------------------------------
  AC_DEFUN(_LT_AC_TRY_DLOPEN_SELF,
  [if test "$cross_compiling" = yes; then :
    [$4]
  else
    AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<EOF
  [#line __oline__ "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
  #include <dlfcn.h>
  #endif
  
  #include <stdio.h>
  
  #ifdef RTLD_GLOBAL
  #  define LT_DLGLOBAL		RTLD_GLOBAL
  #else
  #  ifdef DL_GLOBAL
  #    define LT_DLGLOBAL		DL_GLOBAL
  #  else
  #    define LT_DLGLOBAL		0
  #  endif
  #endif
  
  /* We may have to define LT_DLLAZY_OR_NOW in the command line if we
     find out it does not work in some platform. */
  #ifndef LT_DLLAZY_OR_NOW
  #  ifdef RTLD_LAZY
  #    define LT_DLLAZY_OR_NOW		RTLD_LAZY
  #  else
  #    ifdef DL_LAZY
  #      define LT_DLLAZY_OR_NOW		DL_LAZY
  #    else
  #      ifdef RTLD_NOW
  #        define LT_DLLAZY_OR_NOW	RTLD_NOW
  #      else
  #        ifdef DL_NOW
  #          define LT_DLLAZY_OR_NOW	DL_NOW
  #        else
  #          define LT_DLLAZY_OR_NOW	0
  #        endif
  #      endif
  #    endif
  #  endif
  #endif
  
  #ifdef __cplusplus
  extern "C" void exit (int);
  #endif
  
  void fnord() { int i=42;}
  int main ()
  {
    void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
    int status = $lt_dlunknown;
  
    if (self)
      {
        if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
        else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
        /* dlclose (self); */
      }
  
      exit (status);
  }]
  EOF
    if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
      (./conftest; exit; ) 2>/dev/null
      lt_status=$?
      case x$lt_status in
        x$lt_dlno_uscore) $1 ;;
        x$lt_dlneed_uscore) $2 ;;
        x$lt_unknown|x*) $3 ;;
      esac
    else :
      # compilation failed
      $3
    fi
  fi
  rm -fr conftest*
  ])# _LT_AC_TRY_DLOPEN_SELF
  
  # AC_LIBTOOL_DLOPEN_SELF
  # -------------------
  AC_DEFUN(AC_LIBTOOL_DLOPEN_SELF,
  [if test "x$enable_dlopen" != xyes; then
    enable_dlopen=unknown
    enable_dlopen_self=unknown
    enable_dlopen_self_static=unknown
  else
    lt_cv_dlopen=no
    lt_cv_dlopen_libs=
  
    case $host_os in
    beos*)
      lt_cv_dlopen="load_add_on"
      lt_cv_dlopen_libs=
      lt_cv_dlopen_self=yes
      ;;
  
    cygwin* | mingw* | pw32*)
      lt_cv_dlopen="LoadLibrary"
      lt_cv_dlopen_libs=
     ;;
  
    *)
      AC_CHECK_LIB(dl, dlopen,  [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
        [AC_CHECK_FUNC(dlopen, lt_cv_dlopen="dlopen",
          [AC_CHECK_FUNC(shl_load, lt_cv_dlopen="shl_load",
            [AC_CHECK_LIB(svld, dlopen,
  	    [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
              [AC_CHECK_LIB(dld, shl_load,
                [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
  	    ])
            ])
          ])
        ])
      ;;
    esac
  
    if test "x$lt_cv_dlopen" != xno; then
      enable_dlopen=yes
    else
      enable_dlopen=no
    fi
  
    case $lt_cv_dlopen in
    dlopen)
      save_CPPFLAGS="$CPPFLAGS"
      AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
      test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
  
      save_LDFLAGS="$LDFLAGS"
      eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
  
      save_LIBS="$LIBS"
      LIBS="$lt_cv_dlopen_libs $LIBS"
  
      AC_CACHE_CHECK([whether a program can dlopen itself],
  	  lt_cv_dlopen_self, [dnl
  	  _LT_AC_TRY_DLOPEN_SELF(
  	    lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
  	    lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
      ])
  
      if test "x$lt_cv_dlopen_self" = xyes; then
        LDFLAGS="$LDFLAGS $link_static_flag"
        AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
      	  lt_cv_dlopen_self_static, [dnl
  	  _LT_AC_TRY_DLOPEN_SELF(
  	    lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
  	    lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
        ])
      fi
  
      CPPFLAGS="$save_CPPFLAGS"
      LDFLAGS="$save_LDFLAGS"
      LIBS="$save_LIBS"
      ;;
    esac
  
    case $lt_cv_dlopen_self in
    yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
    *) enable_dlopen_self=unknown ;;
    esac
  
    case $lt_cv_dlopen_self_static in
    yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
    *) enable_dlopen_self_static=unknown ;;
    esac
  fi
  ])# AC_LIBTOOL_DLOPEN_SELF
  
  AC_DEFUN([_LT_AC_LTCONFIG_HACK],
  [AC_REQUIRE([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])dnl
  # Sed substitution that helps us do robust quoting.  It backslashifies
  # metacharacters that are still active within double-quoted strings.
  Xsed='sed -e s/^X//'
  [sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g']
  
  # Same as above, but do not quote variable references.
  [double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g']
  
  # Sed substitution to delay expansion of an escaped shell variable in a
  # double_quote_subst'ed string.
  delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
  
  # Constants:
  rm="rm -f"
  
  # Global variables:
  default_ofile=libtool
  can_build_shared=yes
  
  # All known linkers require a `.a' archive for static linking (except M$VC,
  # which needs '.lib').
  libext=a
  ltmain="$ac_aux_dir/ltmain.sh"
  ofile="$default_ofile"
  with_gnu_ld="$lt_cv_prog_gnu_ld"
  need_locks="$enable_libtool_lock"
  
  old_CC="$CC"
  old_CFLAGS="$CFLAGS"
  
  # Set sane defaults for various variables
  test -z "$AR" && AR=ar
  test -z "$AR_FLAGS" && AR_FLAGS=cru
  test -z "$AS" && AS=as
  test -z "$CC" && CC=cc
  test -z "$DLLTOOL" && DLLTOOL=dlltool
  test -z "$LD" && LD=ld
  test -z "$LN_S" && LN_S="ln -s"
  test -z "$MAGIC_CMD" && MAGIC_CMD=file
  test -z "$NM" && NM=nm
  test -z "$OBJDUMP" && OBJDUMP=objdump
  test -z "$RANLIB" && RANLIB=:
  test -z "$STRIP" && STRIP=:
  test -z "$ac_objext" && ac_objext=o
  
  if test x"$host" != x"$build"; then
    ac_tool_prefix=${host_alias}-
  else
    ac_tool_prefix=
  fi
  
  # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
  case $host_os in
  linux-gnu*) ;;
  linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
  esac
  
  case $host_os in
  aix3*)
    # AIX sometimes has problems with the GCC collect2 program.  For some
    # reason, if we set the COLLECT_NAMES environment variable, the problems
    # vanish in a puff of smoke.
    if test "X${COLLECT_NAMES+set}" != Xset; then
      COLLECT_NAMES=
      export COLLECT_NAMES
    fi
    ;;
  esac
  
  # Determine commands to create old-style static archives.
  old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
  old_postinstall_cmds='chmod 644 $oldlib'
  old_postuninstall_cmds=
  
  if test -n "$RANLIB"; then
    old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
    old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
  fi
  
  # Allow CC to be a program name with arguments.
  set dummy $CC
  compiler="[$]2"
  
  ## FIXME: this should be a separate macro
  ##
  AC_MSG_CHECKING([for objdir])
  rm -f .libs 2>/dev/null
  mkdir .libs 2>/dev/null
  if test -d .libs; then
    objdir=.libs
  else
    # MS-DOS does not allow filenames that begin with a dot.
    objdir=_libs
  fi
  rmdir .libs 2>/dev/null
  AC_MSG_RESULT($objdir)
  ##
  ## END FIXME
  
  
  ## FIXME: this should be a separate macro
  ##
  AC_ARG_WITH(pic, 
  [  --with-pic              try to use only PIC/non-PIC objects [default=use both]],
  pic_mode="$withval", pic_mode=default)
  test -z "$pic_mode" && pic_mode=default
  
  # We assume here that the value for lt_cv_prog_cc_pic will not be cached
  # in isolation, and that seeing it set (from the cache) indicates that
  # the associated values are set (in the cache) correctly too.
  AC_MSG_CHECKING([for $compiler option to produce PIC])
  AC_CACHE_VAL(lt_cv_prog_cc_pic,
  [ lt_cv_prog_cc_pic=
    lt_cv_prog_cc_shlib=
    lt_cv_prog_cc_wl=
    lt_cv_prog_cc_static=
    lt_cv_prog_cc_no_builtin=
    lt_cv_prog_cc_can_build_shared=$can_build_shared
  
    if test "$GCC" = yes; then
      lt_cv_prog_cc_wl='-Wl,'
      lt_cv_prog_cc_static='-static'
  
      case $host_os in
      aix*)
        # Below there is a dirty hack to force normal static linking with -ldl
        # The problem is because libdl dynamically linked with both libc and
        # libC (AIX C++ library), which obviously doesn't included in libraries
        # list by gcc. This cause undefined symbols with -static flags.
        # This hack allows C programs to be linked with "-static -ldl", but
        # we not sure about C++ programs.
        lt_cv_prog_cc_static="$lt_cv_prog_cc_static ${lt_cv_prog_cc_wl}-lC"
        ;;
      amigaos*)
        # FIXME: we need at least 68020 code to build shared libraries, but
        # adding the `-m68020' flag to GCC prevents building anything better,
        # like `-m68040'.
        lt_cv_prog_cc_pic='-m68020 -resident32 -malways-restore-a4'
        ;;
      beos* | irix5* | irix6* | osf3* | osf4* | osf5*)
        # PIC is the default for these OSes.
        ;;
      darwin* | rhapsody*)
        # PIC is the default on this platform
        # Common symbols not allowed in MH_DYLIB files
        lt_cv_prog_cc_pic='-fno-common'
        ;;
      cygwin* | mingw* | pw32* | os2*)
        # This hack is so that the source file can tell whether it is being
        # built for inclusion in a dll (and should export symbols for example).
        lt_cv_prog_cc_pic='-DDLL_EXPORT'
        ;;
      sysv4*MP*)
        if test -d /usr/nec; then
  	 lt_cv_prog_cc_pic=-Kconform_pic
        fi
        ;;
      *)
        lt_cv_prog_cc_pic='-fPIC'
        ;;
      esac
    else
      # PORTME Check for PIC flags for the system compiler.
      case $host_os in
      aix3* | aix4* | aix5*)
        # All AIX code is PIC.
        if test "$host_cpu" = ia64; then
          # AIX 5 now supports IA64 processor
          lt_cv_prog_cc_static='-Bstatic'
          lt_cv_prog_cc_wl='-Wl,'
        else
          lt_cv_prog_cc_static='-bnso -bI:/lib/syscalls.exp'
        fi
        ;;
  
      hpux9* | hpux10* | hpux11*)
        # Is there a better lt_cv_prog_cc_static that works with the bundled CC?
        lt_cv_prog_cc_wl='-Wl,'
        lt_cv_prog_cc_static="${lt_cv_prog_cc_wl}-a ${lt_cv_prog_cc_wl}archive"
        lt_cv_prog_cc_pic='+Z'
        ;;
  
      irix5* | irix6*)
        lt_cv_prog_cc_wl='-Wl,'
        lt_cv_prog_cc_static='-non_shared'
        # PIC (with -KPIC) is the default.
        ;;
  
      cygwin* | mingw* | pw32* | os2*)
        # This hack is so that the source file can tell whether it is being
        # built for inclusion in a dll (and should export symbols for example).
        lt_cv_prog_cc_pic='-DDLL_EXPORT'
        ;;
  
      newsos6)
        lt_cv_prog_cc_pic='-KPIC'
        lt_cv_prog_cc_static='-Bstatic'
        ;;
  
      osf3* | osf4* | osf5*)
        # All OSF/1 code is PIC.
        lt_cv_prog_cc_wl='-Wl,'
        lt_cv_prog_cc_static='-non_shared'
        ;;
  
      sco3.2v5*)
        lt_cv_prog_cc_pic='-Kpic'
        lt_cv_prog_cc_static='-dn'
        lt_cv_prog_cc_shlib='-belf'
        ;;
  
      solaris*)
        lt_cv_prog_cc_pic='-KPIC'
        lt_cv_prog_cc_static='-Bstatic'
        lt_cv_prog_cc_wl='-Wl,'
        ;;
  
      sunos4*)
        lt_cv_prog_cc_pic='-PIC'
        lt_cv_prog_cc_static='-Bstatic'
        lt_cv_prog_cc_wl='-Qoption ld '
        ;;
  
      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
        lt_cv_prog_cc_pic='-KPIC'
        lt_cv_prog_cc_static='-Bstatic'
        if test "x$host_vendor" = xsni; then
          lt_cv_prog_cc_wl='-LD'
        else
          lt_cv_prog_cc_wl='-Wl,'
        fi
        ;;
  
      uts4*)
        lt_cv_prog_cc_pic='-pic'
        lt_cv_prog_cc_static='-Bstatic'
        ;;
  
      sysv4*MP*)
        if test -d /usr/nec ;then
  	lt_cv_prog_cc_pic='-Kconform_pic'
  	lt_cv_prog_cc_static='-Bstatic'
        fi
        ;;
  
      *)
        lt_cv_prog_cc_can_build_shared=no
        ;;
      esac
    fi
  ])
  if test -z "$lt_cv_prog_cc_pic"; then
    AC_MSG_RESULT([none])
  else
    AC_MSG_RESULT([$lt_cv_prog_cc_pic])
  
    # Check to make sure the pic_flag actually works.
    AC_MSG_CHECKING([if $compiler PIC flag $lt_cv_prog_cc_pic works])
    AC_CACHE_VAL(lt_cv_prog_cc_pic_works, [dnl
      save_CFLAGS="$CFLAGS"
      CFLAGS="$CFLAGS $lt_cv_prog_cc_pic -DPIC"
      AC_TRY_COMPILE([], [], [dnl
        case $host_os in
        hpux9* | hpux10* | hpux11*)
  	# On HP-UX, both CC and GCC only warn that PIC is supported... then
  	# they create non-PIC objects.  So, if there were any warnings, we
  	# assume that PIC is not supported.
  	if test -s conftest.err; then
  	  lt_cv_prog_cc_pic_works=no
  	else
  	  lt_cv_prog_cc_pic_works=yes
  	fi
  	;;
        *)
  	lt_cv_prog_cc_pic_works=yes
  	;;
        esac
      ], [dnl
        lt_cv_prog_cc_pic_works=no
      ])
      CFLAGS="$save_CFLAGS"
    ])
  
    if test "X$lt_cv_prog_cc_pic_works" = Xno; then
      lt_cv_prog_cc_pic=
      lt_cv_prog_cc_can_build_shared=no
    else
      lt_cv_prog_cc_pic=" $lt_cv_prog_cc_pic"
    fi
  
    AC_MSG_RESULT([$lt_cv_prog_cc_pic_works])
  fi
  ##
  ## END FIXME
  
  # Check for any special shared library compilation flags.
  if test -n "$lt_cv_prog_cc_shlib"; then
    AC_MSG_WARN([\`$CC' requires \`$lt_cv_prog_cc_shlib' to build shared libraries])
    if echo "$old_CC $old_CFLAGS " | [egrep -e "[ 	]$lt_cv_prog_cc_shlib[ 	]"] >/dev/null; then :
    else
     AC_MSG_WARN([add \`$lt_cv_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure])
      lt_cv_prog_cc_can_build_shared=no
    fi
  fi
  
  ## FIXME: this should be a separate macro
  ##
  AC_MSG_CHECKING([if $compiler static flag $lt_cv_prog_cc_static works])
  AC_CACHE_VAL([lt_cv_prog_cc_static_works], [dnl
    lt_cv_prog_cc_static_works=no
    save_LDFLAGS="$LDFLAGS"
    LDFLAGS="$LDFLAGS $lt_cv_prog_cc_static"
    AC_TRY_LINK([], [], [lt_cv_prog_cc_static_works=yes])
    LDFLAGS="$save_LDFLAGS"
  ])
  
  # Belt *and* braces to stop my trousers falling down:
  test "X$lt_cv_prog_cc_static_works" = Xno && lt_cv_prog_cc_static=
  AC_MSG_RESULT([$lt_cv_prog_cc_static_works])
  
  pic_flag="$lt_cv_prog_cc_pic"
  special_shlib_compile_flags="$lt_cv_prog_cc_shlib"
  wl="$lt_cv_prog_cc_wl"
  link_static_flag="$lt_cv_prog_cc_static"
  no_builtin_flag="$lt_cv_prog_cc_no_builtin"
  can_build_shared="$lt_cv_prog_cc_can_build_shared"
  ##
  ## END FIXME
  
  
  ## FIXME: this should be a separate macro
  ##
  # Check to see if options -o and -c are simultaneously supported by compiler
  AC_MSG_CHECKING([if $compiler supports -c -o file.$ac_objext])
  AC_CACHE_VAL([lt_cv_compiler_c_o], [
  $rm -r conftest 2>/dev/null
  mkdir conftest
  cd conftest
  echo "int some_variable = 0;" > conftest.$ac_ext
  mkdir out
  # According to Tom Tromey, Ian Lance Taylor reported there are C compilers
  # that will create temporary files in the current directory regardless of
  # the output directory.  Thus, making CWD read-only will cause this test
  # to fail, enabling locking or at least warning the user not to do parallel
  # builds.
  chmod -w .
  save_CFLAGS="$CFLAGS"
  CFLAGS="$CFLAGS -o out/conftest2.$ac_objext"
  compiler_c_o=no
  if { (eval echo configure:__oline__: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.$ac_objext; then
    # The compiler can only warn and ignore the option if not recognized
    # So say no if there are warnings
    if test -s out/conftest.err; then
      lt_cv_compiler_c_o=no
    else
      lt_cv_compiler_c_o=yes
    fi
  else
    # Append any errors to the config.log.
    cat out/conftest.err 1>&AC_FD_CC
    lt_cv_compiler_c_o=no
  fi
  CFLAGS="$save_CFLAGS"
  chmod u+w .
  $rm conftest* out/*
  rmdir out
  cd ..
  rmdir conftest
  $rm -r conftest 2>/dev/null
  ])
  compiler_c_o=$lt_cv_compiler_c_o
  AC_MSG_RESULT([$compiler_c_o])
  
  if test x"$compiler_c_o" = x"yes"; then
    # Check to see if we can write to a .lo
    AC_MSG_CHECKING([if $compiler supports -c -o file.lo])
    AC_CACHE_VAL([lt_cv_compiler_o_lo], [
    lt_cv_compiler_o_lo=no
    save_CFLAGS="$CFLAGS"
    CFLAGS="$CFLAGS -c -o conftest.lo"
    AC_TRY_COMPILE([], [int some_variable = 0;], [dnl
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings
      if test -s conftest.err; then
        lt_cv_compiler_o_lo=no
      else
        lt_cv_compiler_o_lo=yes
      fi
    ])
    CFLAGS="$save_CFLAGS"
    ])
    compiler_o_lo=$lt_cv_compiler_o_lo
    AC_MSG_RESULT([$compiler_c_lo])
  else
    compiler_o_lo=no
  fi
  ##
  ## END FIXME
  
  ## FIXME: this should be a separate macro
  ##
  # Check to see if we can do hard links to lock some files if needed
  hard_links="nottested"
  if test "$compiler_c_o" = no && test "$need_locks" != no; then
    # do not overwrite the value of need_locks provided by the user
    AC_MSG_CHECKING([if we can lock with hard links])
    hard_links=yes
    $rm conftest*
    ln conftest.a conftest.b 2>/dev/null && hard_links=no
    touch conftest.a
    ln conftest.a conftest.b 2>&5 || hard_links=no
    ln conftest.a conftest.b 2>/dev/null && hard_links=no
    AC_MSG_RESULT([$hard_links])
    if test "$hard_links" = no; then
      AC_MSG_WARN([\`$CC' does not support \`-c -o', so \`make -j' may be unsafe])
      need_locks=warn
    fi
  else
    need_locks=no
  fi
  ##
  ## END FIXME
  
  ## FIXME: this should be a separate macro
  ##
  if test "$GCC" = yes; then
    # Check to see if options -fno-rtti -fno-exceptions are supported by compiler
    AC_MSG_CHECKING([if $compiler supports -fno-rtti -fno-exceptions])
    echo "int some_variable = 0;" > conftest.$ac_ext
    save_CFLAGS="$CFLAGS"
    CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.$ac_ext"
    compiler_rtti_exceptions=no
    AC_TRY_COMPILE([], [int some_variable = 0;], [dnl
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings
      if test -s conftest.err; then
        compiler_rtti_exceptions=no
      else
        compiler_rtti_exceptions=yes
      fi
    ])
    CFLAGS="$save_CFLAGS"
    AC_MSG_RESULT([$compiler_rtti_exceptions])
  
    if test "$compiler_rtti_exceptions" = "yes"; then
      no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions'
    else
      no_builtin_flag=' -fno-builtin'
    fi
  fi
  ##
  ## END FIXME
  
  ## FIXME: this should be a separate macro
  ##
  # See if the linker supports building shared libraries.
  AC_MSG_CHECKING([whether the linker ($LD) supports shared libraries])
  
  allow_undefined_flag=
  no_undefined_flag=
  need_lib_prefix=unknown
  need_version=unknown
  # when you set need_version to no, make sure it does not cause -set_version
  # flags to be left without arguments
  archive_cmds=
  archive_expsym_cmds=
  old_archive_from_new_cmds=
  old_archive_from_expsyms_cmds=
  export_dynamic_flag_spec=
  whole_archive_flag_spec=
  thread_safe_flag_spec=
  hardcode_into_libs=no
  hardcode_libdir_flag_spec=
  hardcode_libdir_separator=
  hardcode_direct=no
  hardcode_minus_L=no
  hardcode_shlibpath_var=unsupported
  runpath_var=
  link_all_deplibs=unknown
  always_export_symbols=no
  export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols'
  # include_expsyms should be a list of space-separated symbols to be *always*
  # included in the symbol list
  include_expsyms=
  # exclude_expsyms can be an egrep regular expression of symbols to exclude
  # it will be wrapped by ` (' and `)$', so one must not match beginning or
  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
  # as well as any symbol that contains `d'.
  exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
  # platforms (ab)use it in PIC code, but their linkers get confused if
  # the symbol is explicitly referenced.  Since portable code cannot
  # rely on this symbol name, it's probably fine to never include it in
  # preloaded symbol tables.
  extract_expsyms_cmds=
  
  case $host_os in
  cygwin* | mingw* | pw32* )
    # FIXME: the MSVC++ port hasn't been tested in a loooong time
    # When not using gcc, we currently assume that we are using
    # Microsoft Visual C++.
    if test "$GCC" != yes; then
      with_gnu_ld=no
    fi
    ;;
  
  esac
  
  ld_shlibs=yes
  if test "$with_gnu_ld" = yes; then
    # If archive_cmds runs LD, not CC, wlarc should be empty
    wlarc='${wl}'
  
    # See if GNU ld supports shared libraries.
    case $host_os in
    aix3* | aix4* | aix5*)
      # On AIX, the GNU linker is very broken
      # Note:Check GNU linker on AIX 5-IA64 when/if it becomes available.
      ld_shlibs=no
      cat <<EOF 1>&2
  
  *** Warning: the GNU linker, at least up to release 2.9.1, is reported
  *** to be unable to reliably create shared libraries on AIX.
  *** Therefore, libtool is disabling shared libraries support.  If you
  *** really care for shared libraries, you may want to modify your PATH
  *** so that a non-GNU linker is found, and then restart.
  
  EOF
      ;;
  
    amigaos*)
      archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
      hardcode_libdir_flag_spec='-L$libdir'
      hardcode_minus_L=yes
  
      # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
      # that the semantics of dynamic libraries on AmigaOS, at least up
      # to version 4, is to share data among multiple programs linked
      # with the same dynamic library.  Since this doesn't match the
      # behavior of shared libraries on other platforms, we can use
      # them.
      ld_shlibs=no
      ;;
  
    beos*)
      if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
        allow_undefined_flag=unsupported
        # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
        # support --undefined.  This deserves some investigation.  FIXME
        archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
      else
        ld_shlibs=no
      fi
      ;;
  
    cygwin* | mingw* | pw32*)
      # hardcode_libdir_flag_spec is actually meaningless, as there is
      # no search path for DLLs.
      hardcode_libdir_flag_spec='-L$libdir'
      allow_undefined_flag=unsupported
      always_export_symbols=yes
  
      extract_expsyms_cmds='test -f $output_objdir/impgen.c || \
        sed -e "/^# \/\* impgen\.c starts here \*\//,/^# \/\* impgen.c ends here \*\// { s/^# //;s/^# *$//; p; }" -e d < $''0 > $output_objdir/impgen.c~
        test -f $output_objdir/impgen.exe || (cd $output_objdir && \
        if test "x$HOST_CC" != "x" ; then $HOST_CC -o impgen impgen.c ; \
        else $CC -o impgen impgen.c ; fi)~
        $output_objdir/impgen $dir/$soroot > $output_objdir/$soname-def'
  
      old_archive_from_expsyms_cmds='$DLLTOOL --as=$AS --dllname $soname --def $output_objdir/$soname-def --output-lib $output_objdir/$newlib'
  
      # cygwin and mingw dlls have different entry points and sets of symbols
      # to exclude.
      # FIXME: what about values for MSVC?
      dll_entry=__cygwin_dll_entry@12
      dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12~
      case $host_os in
      mingw*)
        # mingw values
        dll_entry=_DllMainCRTStartup@12
        dll_exclude_symbols=DllMain@12,DllMainCRTStartup@12,DllEntryPoint@12~
        ;;
      esac
  
      # mingw and cygwin differ, and it's simplest to just exclude the union
      # of the two symbol sets.
      dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12,DllMainCRTStartup@12,DllEntryPoint@12
  
      # recent cygwin and mingw systems supply a stub DllMain which the user
      # can override, but on older systems we have to supply one (in ltdll.c)
      if test "x$lt_cv_need_dllmain" = "xyes"; then
        ltdll_obj='$output_objdir/$soname-ltdll.'"$ac_objext "
        ltdll_cmds='test -f $output_objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < [$]0 > $output_objdir/$soname-ltdll.c~
  	test -f $output_objdir/$soname-ltdll.$ac_objext || (cd $output_objdir && $CC -c $soname-ltdll.c)~'
      else
        ltdll_obj=
        ltdll_cmds=
      fi
  
      # Extract the symbol export list from an `--export-all' def file,
      # then regenerate the def file from the symbol export list, so that
      # the compiled dll only exports the symbol export list.
      # Be careful not to strip the DATA tag left be newer dlltools.
      export_symbols_cmds="$ltdll_cmds"'
        $DLLTOOL --export-all --exclude-symbols '$dll_exclude_symbols' --output-def $output_objdir/$soname-def '$ltdll_obj'$libobjs $convenience~
        [sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]*//" -e "s/ *;.*$//"] < $output_objdir/$soname-def > $export_symbols'
  
      # If the export-symbols file already is a .def file (1st line
      # is EXPORTS), use it as is.
      # If DATA tags from a recent dlltool are present, honour them!
      archive_expsym_cmds='if test "x`head -1 $export_symbols`" = xEXPORTS; then
          cp $export_symbols $output_objdir/$soname-def;
        else
          echo EXPORTS > $output_objdir/$soname-def;
          _lt_hint=1;
          cat $export_symbols | while read symbol; do
           set dummy \$symbol;
           case \[$]# in
             2) echo "   \[$]2 @ \$_lt_hint ; " >> $output_objdir/$soname-def;;
             *) echo "     \[$]2 @ \$_lt_hint \[$]3 ; " >> $output_objdir/$soname-def;;
           esac;
           _lt_hint=`expr 1 + \$_lt_hint`;
          done;
        fi~
        '"$ltdll_cmds"'
        $CC -Wl,--base-file,$output_objdir/$soname-base '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~
        $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp~
        $CC -Wl,--base-file,$output_objdir/$soname-base $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~
        $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp --output-lib $output_objdir/$libname.dll.a~
        $CC $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags'
      ;;
  
    netbsd*)
      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
        archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
        wlarc=
      else
        archive_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
        archive_expsym_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
      fi
      ;;
  
    solaris* | sysv5*)
      if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then
        ld_shlibs=no
        cat <<EOF 1>&2
  
  *** Warning: The releases 2.8.* of the GNU linker cannot reliably
  *** create shared libraries on Solaris systems.  Therefore, libtool
  *** is disabling shared libraries support.  We urge you to upgrade GNU
  *** binutils to release 2.9.1 or newer.  Another option is to modify
  *** your PATH or compiler configuration so that the native linker is
  *** used, and then restart.
  
  EOF
      elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
        archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
      else
        ld_shlibs=no
      fi
      ;;
  
    sunos4*)
      archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
      wlarc=
      hardcode_direct=yes
      hardcode_shlibpath_var=no
      ;;
  
    *)
      if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
        archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
      else
        ld_shlibs=no
      fi
      ;;
    esac
  
    if test "$ld_shlibs" = yes; then
      runpath_var=LD_RUN_PATH
      hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
      export_dynamic_flag_spec='${wl}--export-dynamic'
      case $host_os in
      cygwin* | mingw* | pw32*)
        # dlltool doesn't understand --whole-archive et. al.
        whole_archive_flag_spec=
        ;;
      *)
        # ancient GNU ld didn't support --whole-archive et. al.
        if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then
  	whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
        else
  	whole_archive_flag_spec=
        fi
        ;;
      esac
    fi
  else
    # PORTME fill in a description of your system's linker (not GNU ld)
    case $host_os in
    aix3*)
      allow_undefined_flag=unsupported
      always_export_symbols=yes
      archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
      # Note: this linker hardcodes the directories in LIBPATH if there
      # are no directories specified by -L.
      hardcode_minus_L=yes
      if test "$GCC" = yes && test -z "$link_static_flag"; then
        # Neither direct hardcoding nor static linking is supported with a
        # broken collect2.
        hardcode_direct=unsupported
      fi
      ;;
  
    aix4* | aix5*)
      # When large executables or shared objects are built, AIX ld can
      # have problems creating the table of contents.  If linking a library
      # or program results in "error TOC overflow" add -mminimal-toc to
      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
  
      archive_cmds=''
      hardcode_libdir_separator=':'
      if test "$GCC" = yes; then
        collect2name=`${CC} -print-prog-name=collect2`
        if test -f "$collect2name" && \
  	 strings "$collect2name" | grep resolve_lib_name >/dev/null
        then
  	# We have reworked collect2
  	hardcode_direct=yes
        else
          # We have old collect2
          hardcode_direct=unsupported
          # It fails to find uninstalled libraries when the uninstalled
          # path is not listed in the libpath.  Setting hardcode_minus_L
          # to unsupported forces relinking
          hardcode_minus_L=yes
          hardcode_libdir_flag_spec='-L$libdir'
          hardcode_libdir_separator=
        fi
        shared_flag='-shared'
      else
        if test "$host_cpu" = ia64; then
          shared_flag='-G'
        else
          shared_flag='${wl}-bM:SRE'
        fi
        hardcode_direct=yes
      fi
  
      if test "$host_cpu" = ia64; then
        # On IA64, the linker does run time linking by default, so we don't
        # have to do anything special.
        aix_use_runtimelinking=no
        exp_sym_flag='-Bexport'
        no_entry_flag=""
      else
        # Test if we are trying to use run time linking, or normal AIX style linking.
        # If -brtl is somewhere in LDFLAGS, we need to do run time linking.
        aix_use_runtimelinking=no
        for ld_flag in $LDFLAGS; do
          if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl" ); then
            aix_use_runtimelinking=yes
            break
          fi
        done
        exp_sym_flag='-bexport'
        no_entry_flag='-bnoentry'
      fi
      # It seems that -bexpall can do strange things, so it is better to
      # generate a list of symbols to export.
      always_export_symbols=yes
      if test "$aix_use_runtimelinking" = yes; then
        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib'
        allow_undefined_flag=' -Wl,-G'
        archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
      else
        if test "$host_cpu" = ia64; then
          hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
         allow_undefined_flag="-znodefs"
          archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname ${wl}-h$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
        else
          hardcode_libdir_flag_spec='${wl}-bnolibpath ${wl}-blibpath:$libdir:/usr/lib:/lib'
          # Warning - without using the other run time loading flags, -berok will
          #           link without error, but may produce a broken library.
          allow_undefined_flag='${wl}-berok"
          # This is a bit strange, but is similar to how AIX traditionally builds
          # it's shared libraries.
          archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"' ~$AR -crlo $objdir/$libname$release.a $objdir/$soname'
        fi
      fi
      ;;
  
    amigaos*)
      archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
      hardcode_libdir_flag_spec='-L$libdir'
      hardcode_minus_L=yes
      # see comment about different semantics on the GNU ld section
      ld_shlibs=no
      ;;
  
    cygwin* | mingw* | pw32*)
      # When not using gcc, we currently assume that we are using
      # Microsoft Visual C++.
      # hardcode_libdir_flag_spec is actually meaningless, as there is
      # no search path for DLLs.
      hardcode_libdir_flag_spec=' '
      allow_undefined_flag=unsupported
      # Tell ltmain to make .lib files, not .a files.
      libext=lib
      # FIXME: Setting linknames here is a bad hack.
      archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames='
      # The linker will automatically build a .lib file if we build a DLL.
      old_archive_from_new_cmds='true'
      # FIXME: Should let the user specify the lib program.
      old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs'
      fix_srcfile_path='`cygpath -w "$srcfile"`'
      ;;
  
    darwin* | rhapsody*)
      allow_undefined_flag='-undefined suppress'
      # FIXME: Relying on posixy $() will cause problems for
      #        cross-compilation, but unfortunately the echo tests do not
      #        yet detect zsh echo's removal of \ escapes.
      archive_cmds='$CC $(test .$module = .yes && echo -bundle || echo -dynamiclib) $allow_undefined_flag -o $lib $libobjs $deplibs$linkopts -install_name $rpath/$soname $(test -n "$verstring" -a x$verstring != x0.0 && echo $verstring)'
      # We need to add '_' to the symbols in $export_symbols first
      #archive_expsym_cmds="$archive_cmds"' && strip -s $export_symbols'
      hardcode_direct=yes
      hardcode_shlibpath_var=no
      whole_archive_flag_spec='-all_load $convenience'
      ;;
  
    freebsd1*)
      ld_shlibs=no
      ;;
  
    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
    # support.  Future versions do this automatically, but an explicit c++rt0.o
    # does not break anything, and helps significantly (at the cost of a little
    # extra space).
    freebsd2.2*)
      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
      hardcode_libdir_flag_spec='-R$libdir'
      hardcode_direct=yes
      hardcode_shlibpath_var=no
      ;;
  
    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
    freebsd2*)
      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
      hardcode_direct=yes
      hardcode_minus_L=yes
      hardcode_shlibpath_var=no
      ;;
  
    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
    freebsd*)
      archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
      hardcode_libdir_flag_spec='-R$libdir'
      hardcode_direct=yes
      hardcode_shlibpath_var=no
      ;;
  
    hpux9* | hpux10* | hpux11*)
      case $host_os in
      hpux9*) archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ;;
      *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;;
      esac
      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
      hardcode_libdir_separator=:
      hardcode_direct=yes
      hardcode_minus_L=yes # Not in the search PATH, but as the default
  			 # location of the library.
      export_dynamic_flag_spec='${wl}-E'
      ;;
  
    irix5* | irix6*)
      if test "$GCC" = yes; then
        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
      else
        archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
      fi
      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
      hardcode_libdir_separator=:
      link_all_deplibs=yes
      ;;
  
    netbsd*)
      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
        archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
      else
        archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
      fi
      hardcode_libdir_flag_spec='-R$libdir'
      hardcode_direct=yes
      hardcode_shlibpath_var=no
      ;;
  
    newsos6)
      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
      hardcode_direct=yes
      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
      hardcode_libdir_separator=:
      hardcode_shlibpath_var=no
      ;;
  
    openbsd*)
      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
      hardcode_libdir_flag_spec='-R$libdir'
      hardcode_direct=yes
      hardcode_shlibpath_var=no
      ;;
  
    os2*)
      hardcode_libdir_flag_spec='-L$libdir'
      hardcode_minus_L=yes
      allow_undefined_flag=unsupported
      archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
      old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
      ;;
  
    osf3*)
      if test "$GCC" = yes; then
        allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
        archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
      else
        allow_undefined_flag=' -expect_unresolved \*'
        archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
      fi
      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
      hardcode_libdir_separator=:
      ;;
  
    osf4* | osf5*)	# as osf3* with the addition of -msym flag
      if test "$GCC" = yes; then
        allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
        archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
        hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
      else
        allow_undefined_flag=' -expect_unresolved \*'
        archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
        archive_expsym_cmds='for i in `cat $export_symbols`; do printf "-exported_symbol " >> $lib.exp; echo "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
        $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
  
        #Both c and cxx compiler support -rpath directly
        hardcode_libdir_flag_spec='-rpath $libdir'
      fi
      hardcode_libdir_separator=:
      ;;
  
    sco3.2v5*)
      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
      hardcode_shlibpath_var=no
      runpath_var=LD_RUN_PATH
      hardcode_runpath_var=yes
      ;;
  
    solaris*)
      no_undefined_flag=' -z defs'
      # $CC -shared without GNU ld will not create a library from C++
      # object files and a static libstdc++, better avoid it by now
      archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
      archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
  		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
      hardcode_libdir_flag_spec='-R$libdir'
      hardcode_shlibpath_var=no
      case $host_os in
      [solaris2.[0-5] | solaris2.[0-5].*]) ;;
      *) # Supported since Solaris 2.6 (maybe 2.5.1?)
        whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;
      esac
      link_all_deplibs=yes
      ;;
  
    sunos4*)
      if test "x$host_vendor" = xsequent; then
        # Use $CC to link under sequent, because it throws in some extra .o
        # files that make .init and .fini sections work.
        archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
      else
        archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
      fi
      hardcode_libdir_flag_spec='-L$libdir'
      hardcode_direct=yes
      hardcode_minus_L=yes
      hardcode_shlibpath_var=no
      ;;
  
    sysv4)
      if test "x$host_vendor" = xsno; then
        archive_cmds='$LD -G -Bsymbolic -h $soname -o $lib $libobjs $deplibs $linkopts'
        hardcode_direct=yes # is this really true???
      else
        archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
        hardcode_direct=no #Motorola manual says yes, but my tests say they lie
      fi
      runpath_var='LD_RUN_PATH'
      hardcode_shlibpath_var=no
      ;;
  
    sysv4.3*)
      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
      hardcode_shlibpath_var=no
      export_dynamic_flag_spec='-Bexport'
      ;;
  
    sysv5*)
      no_undefined_flag=' -z text'
      # $CC -shared without GNU ld will not create a library from C++
      # object files and a static libstdc++, better avoid it by now
      archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
      archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
  		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
      hardcode_libdir_flag_spec=
      hardcode_shlibpath_var=no
      runpath_var='LD_RUN_PATH'
      ;;
  
    uts4*)
      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
      hardcode_libdir_flag_spec='-L$libdir'
      hardcode_shlibpath_var=no
      ;;
  
    dgux*)
      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
      hardcode_libdir_flag_spec='-L$libdir'
      hardcode_shlibpath_var=no
      ;;
  
    sysv4*MP*)
      if test -d /usr/nec; then
        archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
        hardcode_shlibpath_var=no
        runpath_var=LD_RUN_PATH
        hardcode_runpath_var=yes
        ld_shlibs=yes
      fi
      ;;
  
    sysv4.2uw2*)
      archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
      hardcode_direct=yes
      hardcode_minus_L=no
      hardcode_shlibpath_var=no
      hardcode_runpath_var=yes
      runpath_var=LD_RUN_PATH
      ;;
  
    sysv5uw7* | unixware7*)
      no_undefined_flag='${wl}-z ${wl}text'
      if test "$GCC" = yes; then
        archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
      else
        archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
      fi
      runpath_var='LD_RUN_PATH'
      hardcode_shlibpath_var=no
      ;;
  
    *)
      ld_shlibs=no
      ;;
    esac
  fi
  AC_MSG_RESULT([$ld_shlibs])
  test "$ld_shlibs" = no && can_build_shared=no
  ##
  ## END FIXME
  
  ## FIXME: this should be a separate macro
  ##
  # Check hardcoding attributes.
  AC_MSG_CHECKING([how to hardcode library paths into programs])
  hardcode_action=
  if test -n "$hardcode_libdir_flag_spec" || \
     test -n "$runpath_var"; then
  
    # We can hardcode non-existant directories.
    if test "$hardcode_direct" != no &&
       # If the only mechanism to avoid hardcoding is shlibpath_var, we
       # have to relink, otherwise we might link with an installed library
       # when we should be linking with a yet-to-be-installed one
       ## test "$hardcode_shlibpath_var" != no &&
       test "$hardcode_minus_L" != no; then
      # Linking always hardcodes the temporary library directory.
      hardcode_action=relink
    else
      # We can link without hardcoding, and we can hardcode nonexisting dirs.
      hardcode_action=immediate
    fi
  else
    # We cannot hardcode anything, or else we can only hardcode existing
    # directories.
    hardcode_action=unsupported
  fi
  AC_MSG_RESULT([$hardcode_action])
  ##
  ## END FIXME
  
  ## FIXME: this should be a separate macro
  ##
  striplib=
  old_striplib=
  AC_MSG_CHECKING([whether stripping libraries is possible])
  if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
    test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
    test -z "$striplib" && striplib="$STRIP --strip-unneeded"
    AC_MSG_RESULT([yes])
  else
    AC_MSG_RESULT([no])
  fi
  ##
  ## END FIXME
  
  reload_cmds='$LD$reload_flag -o $output$reload_objs'
  test -z "$deplibs_check_method" && deplibs_check_method=unknown
  
  ## FIXME: this should be a separate macro
  ##
  # PORTME Fill in your ld.so characteristics
  AC_MSG_CHECKING([dynamic linker characteristics])
  library_names_spec=
  libname_spec='lib$name'
  soname_spec=
  postinstall_cmds=
  postuninstall_cmds=
  finish_cmds=
  finish_eval=
  shlibpath_var=
  shlibpath_overrides_runpath=unknown
  version_type=none
  dynamic_linker="$host_os ld.so"
  sys_lib_dlsearch_path_spec="/lib /usr/lib"
  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
  
  case $host_os in
  aix3*)
    version_type=linux
    library_names_spec='${libname}${release}.so$versuffix $libname.a'
    shlibpath_var=LIBPATH
  
    # AIX has no versioning support, so we append a major version to the name.
    soname_spec='${libname}${release}.so$major'
    ;;
  
  aix4* | aix5*)
    version_type=linux
    if test "$host_cpu" = ia64; then
      # AIX 5 supports IA64
      library_names_spec='${libname}${release}.so$major ${libname}${release}.so$versuffix $libname.so'
      shlibpath_var=LD_LIBRARY_PATH
    else
      # With GCC up to 2.95.x, collect2 would create an import file
      # for dependence libraries.  The import file would start with
      # the line `#! .'.  This would cause the generated library to
      # depend on `.', always an invalid library.  This was fixed in
      # development snapshots of GCC prior to 3.0.
      case $host_os in
        [ aix4 | aix4.[01] | aix4.[01].*)]
        if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
             echo ' yes '
             echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
          :
        else
          can_build_shared=no
        fi
        ;;
      esac
      # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
      # soname into executable. Probably we can add versioning support to
      # collect2, so additional links can be useful in future.
      if test "$aix_use_runtimelinking" = yes; then
        # If using run time linking (on AIX 4.2 or later) use lib<name>.so instead of
        # lib<name>.a to let people know that these are not typical AIX shared libraries.
        library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
      else
        # We preserve .a as extension for shared libraries through AIX4.2
        # and later when we are not doing run time linking.
        library_names_spec='${libname}${release}.a $libname.a'
        soname_spec='${libname}${release}.so$major'
      fi
      shlibpath_var=LIBPATH
      deplibs_check_method=pass_all
    fi
    ;;
  
  amigaos*)
    library_names_spec='$libname.ixlibrary $libname.a'
    # Create ${libname}_ixlibrary.a entries in /sys/libs.
    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | [$Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\'']`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
    ;;
  
  beos*)
    library_names_spec='${libname}.so'
    dynamic_linker="$host_os ld.so"
    shlibpath_var=LIBRARY_PATH
    ;;
  
  bsdi4*)
    version_type=linux
    need_version=no
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
    soname_spec='${libname}${release}.so$major'
    finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
    shlibpath_var=LD_LIBRARY_PATH
    sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
    sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
    export_dynamic_flag_spec=-rdynamic
    # the default ld.so.conf also contains /usr/contrib/lib and
    # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
    # libtool to hard-code these into programs
    ;;
  
  cygwin* | mingw* | pw32*)
    version_type=windows
    need_version=no
    need_lib_prefix=no
    case $GCC,$host_os in
    yes,cygwin*)
      library_names_spec='$libname.dll.a'
      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | [sed -e 's/[.]/-/g']`${versuffix}.dll'
      postinstall_cmds='dlpath=`bash 2>&1 -c '\''. $dir/${file}i;echo \$dlname'\''`~
        dldir=$destdir/`dirname \$dlpath`~
        test -d \$dldir || mkdir -p \$dldir~
        $install_prog .libs/$dlname \$dldir/$dlname'
      postuninstall_cmds='dldll=`bash 2>&1 -c '\''. $file; echo \$dlname'\''`~
        dlpath=$dir/\$dldll~
         $rm \$dlpath'
      ;;
    yes,mingw*)
      library_names_spec='${libname}`echo ${release} | [sed -e 's/[.]/-/g']`${versuffix}.dll'
      sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | sed -e "s/^libraries://" -e "s/;/ /g"`
      ;;
    yes,pw32*)
      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll'
      ;;
    *)
      library_names_spec='${libname}`echo ${release} | [sed -e 's/[.]/-/g']`${versuffix}.dll $libname.lib'
      ;;
    esac
    dynamic_linker='Win32 ld.exe'
    # FIXME: first we should search . and the directory the executable is in
    shlibpath_var=PATH
    ;;
  
  darwin* | rhapsody*)
    dynamic_linker="$host_os dyld"
    version_type=darwin
    need_lib_prefix=no
    need_version=no
    # FIXME: Relying on posixy $() will cause problems for
    #        cross-compilation, but unfortunately the echo tests do not
    #        yet detect zsh echo's removal of \ escapes.
    library_names_spec='${libname}${release}${versuffix}.$(test .$module = .yes && echo so || echo dylib) ${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib) ${libname}.$(test .$module = .yes && echo so || echo dylib)'
    soname_spec='${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib)'
    shlibpath_overrides_runpath=yes
    shlibpath_var=DYLD_LIBRARY_PATH
    ;;
  
  freebsd1*)
    dynamic_linker=no
    ;;
  
  freebsd*)
    objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
    version_type=freebsd-$objformat
    case $version_type in
      freebsd-elf*)
        library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
        need_version=no
        need_lib_prefix=no
        ;;
      freebsd-*)
        library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix'
        need_version=yes
        ;;
    esac
    shlibpath_var=LD_LIBRARY_PATH
    case $host_os in
    freebsd2*)
      shlibpath_overrides_runpath=yes
      ;;
    *)
      shlibpath_overrides_runpath=no
      hardcode_into_libs=yes
      ;;
    esac
    ;;
  
  gnu*)
    version_type=linux
    need_lib_prefix=no
    need_version=no
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so'
    soname_spec='${libname}${release}.so$major'
    shlibpath_var=LD_LIBRARY_PATH
    hardcode_into_libs=yes
    ;;
  
  hpux9* | hpux10* | hpux11*)
    # Give a soname corresponding to the major version so that dld.sl refuses to
    # link against other versions.
    dynamic_linker="$host_os dld.sl"
    version_type=sunos
    need_lib_prefix=no
    need_version=no
    shlibpath_var=SHLIB_PATH
    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
    library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl'
    soname_spec='${libname}${release}.sl$major'
    # HP-UX runs *really* slowly unless shared libraries are mode 555.
    postinstall_cmds='chmod 555 $lib'
    ;;
  
  irix5* | irix6*)
    version_type=irix
    need_lib_prefix=no
    need_version=no
    soname_spec='${libname}${release}.so$major'
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so $libname.so'
    case $host_os in
    irix5*)
      libsuff= shlibsuff=
      ;;
    *)
      case $LD in # libtool.m4 will add one of these switches to LD
      *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;;
      *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;;
      *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;;
      *) libsuff= shlibsuff= libmagic=never-match;;
      esac
      ;;
    esac
    shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
    shlibpath_overrides_runpath=no
    sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
    sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
    ;;
  
  # No shared lib support for Linux oldld, aout, or coff.
  linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*)
    dynamic_linker=no
    ;;
  
  # This must be Linux ELF.
  linux-gnu*)
    version_type=linux
    need_lib_prefix=no
    need_version=no
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
    soname_spec='${libname}${release}.so$major'
    finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
    shlibpath_var=LD_LIBRARY_PATH
    shlibpath_overrides_runpath=no
    # This implies no fast_install, which is unacceptable.
    # Some rework will be needed to allow for fast_install
    # before this can be enabled.
    hardcode_into_libs=yes
  
    # We used to test for /lib/ld.so.1 and disable shared libraries on
    # powerpc, because MkLinux only supported shared libraries with the
    # GNU dynamic linker.  Since this was broken with cross compilers,
    # most powerpc-linux boxes support dynamic linking these days and
    # people can always --disable-shared, the test was removed, and we
    # assume the GNU/Linux dynamic linker is in use.
    dynamic_linker='GNU/Linux ld.so'
    ;;
  
  netbsd*)
    version_type=sunos
    need_lib_prefix=no
    need_version=no
    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
      library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
      finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
      dynamic_linker='NetBSD (a.out) ld.so'
    else
      library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so'
      soname_spec='${libname}${release}.so$major'
      dynamic_linker='NetBSD ld.elf_so'
    fi
    shlibpath_var=LD_LIBRARY_PATH
    shlibpath_overrides_runpath=yes
    hardcode_into_libs=yes
    ;;
  
  newsos6)
    version_type=linux
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
    shlibpath_var=LD_LIBRARY_PATH
    shlibpath_overrides_runpath=yes
    ;;
  
  openbsd*)
    version_type=sunos
    if test "$with_gnu_ld" = yes; then
      need_lib_prefix=no
      need_version=no
    fi
    library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
    shlibpath_var=LD_LIBRARY_PATH
    ;;
  
  os2*)
    libname_spec='$name'
    need_lib_prefix=no
    library_names_spec='$libname.dll $libname.a'
    dynamic_linker='OS/2 ld.exe'
    shlibpath_var=LIBPATH
    ;;
  
  osf3* | osf4* | osf5*)
    version_type=osf
    need_version=no
    soname_spec='${libname}${release}.so'
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
    shlibpath_var=LD_LIBRARY_PATH
    sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
    sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
    ;;
  
  sco3.2v5*)
    version_type=osf
    soname_spec='${libname}${release}.so$major'
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
    shlibpath_var=LD_LIBRARY_PATH
    ;;
  
  solaris*)
    version_type=linux
    need_lib_prefix=no
    need_version=no
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
    soname_spec='${libname}${release}.so$major'
    shlibpath_var=LD_LIBRARY_PATH
    shlibpath_overrides_runpath=yes
    hardcode_into_libs=yes
    # ldd complains unless libraries are executable
    postinstall_cmds='chmod +x $lib'
    ;;
  
  sunos4*)
    version_type=sunos
    library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
    finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
    shlibpath_var=LD_LIBRARY_PATH
    shlibpath_overrides_runpath=yes
    if test "$with_gnu_ld" = yes; then
      need_lib_prefix=no
    fi
    need_version=yes
    ;;
  
  sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
    version_type=linux
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
    soname_spec='${libname}${release}.so$major'
    shlibpath_var=LD_LIBRARY_PATH
    case $host_vendor in
      sni)
        shlibpath_overrides_runpath=no
        ;;
      motorola)
        need_lib_prefix=no
        need_version=no
        shlibpath_overrides_runpath=no
        sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
        ;;
    esac
    ;;
  
  uts4*)
    version_type=linux
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
    soname_spec='${libname}${release}.so$major'
    shlibpath_var=LD_LIBRARY_PATH
    ;;
  
  dgux*)
    version_type=linux
    need_lib_prefix=no
    need_version=no
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
    soname_spec='${libname}${release}.so$major'
    shlibpath_var=LD_LIBRARY_PATH
    ;;
  
  sysv4*MP*)
    if test -d /usr/nec ;then
      version_type=linux
      library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so'
      soname_spec='$libname.so.$major'
      shlibpath_var=LD_LIBRARY_PATH
    fi
    ;;
  
  *)
    dynamic_linker=no
    ;;
  esac
  AC_MSG_RESULT([$dynamic_linker])
  test "$dynamic_linker" = no && can_build_shared=no
  ##
  ## END FIXME
  
  ## FIXME: this should be a separate macro
  ##
  # Report the final consequences.
  AC_MSG_CHECKING([if libtool supports shared libraries])
  AC_MSG_RESULT([$can_build_shared])
  ##
  ## END FIXME
  
  if test "$hardcode_action" = relink; then
    # Fast installation is not supported
    enable_fast_install=no
  elif test "$shlibpath_overrides_runpath" = yes ||
       test "$enable_shared" = no; then
    # Fast installation is not necessary
    enable_fast_install=needless
  fi
  
  variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
  if test "$GCC" = yes; then
    variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
  fi
  
  AC_LIBTOOL_DLOPEN_SELF
  
  ## FIXME: this should be a separate macro
  ##
  if test "$enable_shared" = yes && test "$GCC" = yes; then
    case $archive_cmds in
    *'~'*)
      # FIXME: we may have to deal with multi-command sequences.
      ;;
    '$CC '*)
      # Test whether the compiler implicitly links with -lc since on some
      # systems, -lgcc has to come before -lc. If gcc already passes -lc
      # to ld, don't add -lc before -lgcc.
      AC_MSG_CHECKING([whether -lc should be explicitly linked in])
      AC_CACHE_VAL([lt_cv_archive_cmds_need_lc],
      [$rm conftest*
      echo 'static int dummy;' > conftest.$ac_ext
  
      if AC_TRY_EVAL(ac_compile); then
        soname=conftest
        lib=conftest
        libobjs=conftest.$ac_objext
        deplibs=
        wl=$lt_cv_prog_cc_wl
        compiler_flags=-v
        linker_flags=-v
        verstring=
        output_objdir=.
        libname=conftest
        save_allow_undefined_flag=$allow_undefined_flag
        allow_undefined_flag=
        if AC_TRY_EVAL(archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1)
        then
  	lt_cv_archive_cmds_need_lc=no
        else
  	lt_cv_archive_cmds_need_lc=yes
        fi
        allow_undefined_flag=$save_allow_undefined_flag
      else
        cat conftest.err 1>&5
      fi])
      AC_MSG_RESULT([$lt_cv_archive_cmds_need_lc])
      ;;
    esac
  fi
  need_lc=${lt_cv_archive_cmds_need_lc-yes}
  ##
  ## END FIXME
  
  ## FIXME: this should be a separate macro
  ##
  # The second clause should only fire when bootstrapping the
  # libtool distribution, otherwise you forgot to ship ltmain.sh
  # with your package, and you will get complaints that there are
  # no rules to generate ltmain.sh.
  if test -f "$ltmain"; then
    :
  else
    # If there is no Makefile yet, we rely on a make rule to execute
    # `config.status --recheck' to rerun these tests and create the
    # libtool script then.
    test -f Makefile && make "$ltmain"
  fi
  
  if test -f "$ltmain"; then
    trap "$rm \"${ofile}T\"; exit 1" 1 2 15
    $rm -f "${ofile}T"
  
    echo creating $ofile
  
    # Now quote all the things that may contain metacharacters while being
    # careful not to overquote the AC_SUBSTed values.  We take copies of the
    # variables and quote the copies for generation of the libtool script.
    for var in echo old_CC old_CFLAGS \
      AR AR_FLAGS CC LD LN_S NM SHELL \
      reload_flag reload_cmds wl \
      pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \
      thread_safe_flag_spec whole_archive_flag_spec libname_spec \
      library_names_spec soname_spec \
      RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \
      old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds \
      postuninstall_cmds extract_expsyms_cmds old_archive_from_expsyms_cmds \
      old_striplib striplib file_magic_cmd export_symbols_cmds \
      deplibs_check_method allow_undefined_flag no_undefined_flag \
      finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \
      hardcode_libdir_flag_spec hardcode_libdir_separator  \
      sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
      compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do
  
      case $var in
      reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \
      old_postinstall_cmds | old_postuninstall_cmds | \
      export_symbols_cmds | archive_cmds | archive_expsym_cmds | \
      extract_expsyms_cmds | old_archive_from_expsyms_cmds | \
      postinstall_cmds | postuninstall_cmds | \
      finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
        # Double-quote double-evaled strings.
        eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
        ;;
      *)
        eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
        ;;
      esac
    done
  
    cat <<__EOF__ > "${ofile}T"
  #! $SHELL
  
  # `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
  # Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
  # NOTE: Changes made to this file will be lost: look at ltmain.sh.
  #
  # Copyright (C) 1996-2000 Free Software Foundation, Inc.
  # Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
  #
  # This program is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 2 of the License, or
  # (at your option) any later version.
  #
  # This program is distributed in the hope that it will be useful, but
  # WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  # General Public License for more details.
  #
  # You should have received a copy of the GNU General Public License
  # along with this program; if not, write to the Free Software
  # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  #
  # As a special exception to the GNU General Public License, if you
  # distribute this file as part of a program that contains a
  # configuration script generated by Autoconf, you may include it under
  # the same distribution terms that you use for the rest of that program.
  
  # Sed that helps us avoid accidentally triggering echo(1) options like -n.
  Xsed="sed -e s/^X//"
  
  # The HP-UX ksh and POSIX shell print the target directory to stdout
  # if CDPATH is set.
  if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
  
  # ### BEGIN LIBTOOL CONFIG
  
  # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
  
  # Shell to use when invoking shell scripts.
  SHELL=$lt_SHELL
  
  # Whether or not to build shared libraries.
  build_libtool_libs=$enable_shared
  
  # Whether or not to add -lc for building shared libraries.
  build_libtool_need_lc=$need_lc
  
  # Whether or not to build static libraries.
  build_old_libs=$enable_static
  
  # Whether or not to optimize for fast installation.
  fast_install=$enable_fast_install
  
  # The host system.
  host_alias=$host_alias
  host=$host
  
  # An echo program that does not interpret backslashes.
  echo=$lt_echo
  
  # The archiver.
  AR=$lt_AR
  AR_FLAGS=$lt_AR_FLAGS
  
  # The default C compiler.
  CC=$lt_CC
  
  # Is the compiler the GNU C compiler?
  with_gcc=$GCC
  
  # The linker used to build libraries.
  LD=$lt_LD
  
  # Whether we need hard or soft links.
  LN_S=$lt_LN_S
  
  # A BSD-compatible nm program.
  NM=$lt_NM
  
  # A symbol stripping program
  STRIP=$STRIP
  
  # Used to examine libraries when file_magic_cmd begins "file"
  MAGIC_CMD=$MAGIC_CMD
  
  # Used on cygwin: DLL creation program.
  DLLTOOL="$DLLTOOL"
  
  # Used on cygwin: object dumper.
  OBJDUMP="$OBJDUMP"
  
  # Used on cygwin: assembler.
  AS="$AS"
  
  # The name of the directory that contains temporary libtool files.
  objdir=$objdir
  
  # How to create reloadable object files.
  reload_flag=$lt_reload_flag
  reload_cmds=$lt_reload_cmds
  
  # How to pass a linker flag through the compiler.
  wl=$lt_wl
  
  # Object file suffix (normally "o").
  objext="$ac_objext"
  
  # Old archive suffix (normally "a").
  libext="$libext"
  
  # Executable file suffix (normally "").
  exeext="$exeext"
  
  # Additional compiler flags for building library objects.
  pic_flag=$lt_pic_flag
  pic_mode=$pic_mode
  
  # Does compiler simultaneously support -c and -o options?
  compiler_c_o=$lt_compiler_c_o
  
  # Can we write directly to a .lo ?
  compiler_o_lo=$lt_compiler_o_lo
  
  # Must we lock files when doing compilation ?
  need_locks=$lt_need_locks
  
  # Do we need the lib prefix for modules?
  need_lib_prefix=$need_lib_prefix
  
  # Do we need a version for libraries?
  need_version=$need_version
  
  # Whether dlopen is supported.
  dlopen_support=$enable_dlopen
  
  # Whether dlopen of programs is supported.
  dlopen_self=$enable_dlopen_self
  
  # Whether dlopen of statically linked programs is supported.
  dlopen_self_static=$enable_dlopen_self_static
  
  # Compiler flag to prevent dynamic linking.
  link_static_flag=$lt_link_static_flag
  
  # Compiler flag to turn off builtin functions.
  no_builtin_flag=$lt_no_builtin_flag
  
  # Compiler flag to allow reflexive dlopens.
  export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
  
  # Compiler flag to generate shared objects directly from archives.
  whole_archive_flag_spec=$lt_whole_archive_flag_spec
  
  # Compiler flag to generate thread-safe objects.
  thread_safe_flag_spec=$lt_thread_safe_flag_spec
  
  # Library versioning type.
  version_type=$version_type
  
  # Format of library name prefix.
  libname_spec=$lt_libname_spec
  
  # List of archive names.  First name is the real one, the rest are links.
  # The last name is the one that the linker finds with -lNAME.
  library_names_spec=$lt_library_names_spec
  
  # The coded name of the library, if different from the real name.
  soname_spec=$lt_soname_spec
  
  # Commands used to build and install an old-style archive.
  RANLIB=$lt_RANLIB
  old_archive_cmds=$lt_old_archive_cmds
  old_postinstall_cmds=$lt_old_postinstall_cmds
  old_postuninstall_cmds=$lt_old_postuninstall_cmds
  
  # Create an old-style archive from a shared archive.
  old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
  
  # Create a temporary old-style archive to link instead of a shared archive.
  old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
  
  # Commands used to build and install a shared archive.
  archive_cmds=$lt_archive_cmds
  archive_expsym_cmds=$lt_archive_expsym_cmds
  postinstall_cmds=$lt_postinstall_cmds
  postuninstall_cmds=$lt_postuninstall_cmds
  
  # Commands to strip libraries.
  old_striplib=$lt_old_striplib
  striplib=$lt_striplib
  
  # Method to check whether dependent libraries are shared objects.
  deplibs_check_method=$lt_deplibs_check_method
  
  # Command to use when deplibs_check_method == file_magic.
  file_magic_cmd=$lt_file_magic_cmd
  
  # Flag that allows shared libraries with undefined symbols to be built.
  allow_undefined_flag=$lt_allow_undefined_flag
  
  # Flag that forces no undefined symbols.
  no_undefined_flag=$lt_no_undefined_flag
  
  # Commands used to finish a libtool library installation in a directory.
  finish_cmds=$lt_finish_cmds
  
  # Same as above, but a single script fragment to be evaled but not shown.
  finish_eval=$lt_finish_eval
  
  # Take the output of nm and produce a listing of raw symbols and C names.
  global_symbol_pipe=$lt_global_symbol_pipe
  
  # Transform the output of nm in a proper C declaration
  global_symbol_to_cdecl=$lt_global_symbol_to_cdecl
  
  # This is the shared library runtime path variable.
  runpath_var=$runpath_var
  
  # This is the shared library path variable.
  shlibpath_var=$shlibpath_var
  
  # Is shlibpath searched before the hard-coded library search path?
  shlibpath_overrides_runpath=$shlibpath_overrides_runpath
  
  # How to hardcode a shared library path into an executable.
  hardcode_action=$hardcode_action
  
  # Whether we should hardcode library paths into libraries.
  hardcode_into_libs=$hardcode_into_libs
  
  # Flag to hardcode \$libdir into a binary during linking.
  # This must work even if \$libdir does not exist.
  hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
  
  # Whether we need a single -rpath flag with a separated argument.
  hardcode_libdir_separator=$lt_hardcode_libdir_separator
  
  # Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
  # resulting binary.
  hardcode_direct=$hardcode_direct
  
  # Set to yes if using the -LDIR flag during linking hardcodes DIR into the
  # resulting binary.
  hardcode_minus_L=$hardcode_minus_L
  
  # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
  # the resulting binary.
  hardcode_shlibpath_var=$hardcode_shlibpath_var
  
  # Variables whose values should be saved in libtool wrapper scripts and
  # restored at relink time.
  variables_saved_for_relink="$variables_saved_for_relink"
  
  # Whether libtool must link a program against all its dependency libraries.
  link_all_deplibs=$link_all_deplibs
  
  # Compile-time system search path for libraries
  sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
  
  # Run-time system search path for libraries
  sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
  
  # Fix the shell variable \$srcfile for the compiler.
  fix_srcfile_path="$fix_srcfile_path"
  
  # Set to yes if exported symbols are required.
  always_export_symbols=$always_export_symbols
  
  # The commands to list exported symbols.
  export_symbols_cmds=$lt_export_symbols_cmds
  
  # The commands to extract the exported symbol list from a shared archive.
  extract_expsyms_cmds=$lt_extract_expsyms_cmds
  
  # Symbols that should not be listed in the preloaded symbols.
  exclude_expsyms=$lt_exclude_expsyms
  
  # Symbols that must always be exported.
  include_expsyms=$lt_include_expsyms
  
  # ### END LIBTOOL CONFIG
  
  __EOF__
  
    case $host_os in
    aix3*)
      cat <<\EOF >> "${ofile}T"
  
  # AIX sometimes has problems with the GCC collect2 program.  For some
  # reason, if we set the COLLECT_NAMES environment variable, the problems
  # vanish in a puff of smoke.
  if test "X${COLLECT_NAMES+set}" != Xset; then
    COLLECT_NAMES=
    export COLLECT_NAMES
  fi
  EOF
      ;;
    esac
  
    case $host_os in
    cygwin* | mingw* | pw32* | os2*)
      cat <<'EOF' >> "${ofile}T"
        # This is a source program that is used to create dlls on Windows
        # Don't remove nor modify the starting and closing comments
  # /* ltdll.c starts here */
  # #define WIN32_LEAN_AND_MEAN
  # #include <windows.h>
  # #undef WIN32_LEAN_AND_MEAN
  # #include <stdio.h>
  #
  # #ifndef __CYGWIN__
  # #  ifdef __CYGWIN32__
  # #    define __CYGWIN__ __CYGWIN32__
  # #  endif
  # #endif
  #
  # #ifdef __cplusplus
  # extern "C" {
  # #endif
  # BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
  # #ifdef __cplusplus
  # }
  # #endif
  #
  # #ifdef __CYGWIN__
  # #include <cygwin/cygwin_dll.h>
  # DECLARE_CYGWIN_DLL( DllMain );
  # #endif
  # HINSTANCE __hDllInstance_base;
  #
  # BOOL APIENTRY
  # DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
  # {
  #   __hDllInstance_base = hInst;
  #   return TRUE;
  # }
  # /* ltdll.c ends here */
          # This is a source program that is used to create import libraries
          # on Windows for dlls which lack them. Don't remove nor modify the
          # starting and closing comments
  # /* impgen.c starts here */
  # /*   Copyright (C) 1999-2000 Free Software Foundation, Inc.
  #
  #  This file is part of GNU libtool.
  #
  #  This program is free software; you can redistribute it and/or modify
  #  it under the terms of the GNU General Public License as published by
  #  the Free Software Foundation; either version 2 of the License, or
  #  (at your option) any later version.
  #
  #  This program is distributed in the hope that it will be useful,
  #  but WITHOUT ANY WARRANTY; without even the implied warranty of
  #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  #  GNU General Public License for more details.
  #
  #  You should have received a copy of the GNU General Public License
  #  along with this program; if not, write to the Free Software
  #  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  #  */
  #
  # #include <stdio.h>		/* for printf() */
  # #include <unistd.h>		/* for open(), lseek(), read() */
  # #include <fcntl.h>		/* for O_RDONLY, O_BINARY */
  # #include <string.h>		/* for strdup() */
  #
  # /* O_BINARY isn't required (or even defined sometimes) under Unix */
  # #ifndef O_BINARY
  # #define O_BINARY 0
  # #endif
  #
  # static unsigned int
  # pe_get16 (fd, offset)
  #      int fd;
  #      int offset;
  # {
  #   unsigned char b[2];
  #   lseek (fd, offset, SEEK_SET);
  #   read (fd, b, 2);
  #   return b[0] + (b[1]<<8);
  # }
  #
  # static unsigned int
  # pe_get32 (fd, offset)
  #     int fd;
  #     int offset;
  # {
  #   unsigned char b[4];
  #   lseek (fd, offset, SEEK_SET);
  #   read (fd, b, 4);
  #   return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
  # }
  #
  # static unsigned int
  # pe_as32 (ptr)
  #      void *ptr;
  # {
  #   unsigned char *b = ptr;
  #   return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
  # }
  #
  # int
  # main (argc, argv)
  #     int argc;
  #     char *argv[];
  # {
  #     int dll;
  #     unsigned long pe_header_offset, opthdr_ofs, num_entries, i;
  #     unsigned long export_rva, export_size, nsections, secptr, expptr;
  #     unsigned long name_rvas, nexp;
  #     unsigned char *expdata, *erva;
  #     char *filename, *dll_name;
  #
  #     filename = argv[1];
  #
  #     dll = open(filename, O_RDONLY|O_BINARY);
  #     if (dll < 1)
  # 	return 1;
  #
  #     dll_name = filename;
  #
  #     for (i=0; filename[i]; i++)
  # 	if (filename[i] == '/' || filename[i] == '\\'  || filename[i] == ':')
  # 	    dll_name = filename + i +1;
  #
  #     pe_header_offset = pe_get32 (dll, 0x3c);
  #     opthdr_ofs = pe_header_offset + 4 + 20;
  #     num_entries = pe_get32 (dll, opthdr_ofs + 92);
  #
  #     if (num_entries < 1) /* no exports */
  # 	return 1;
  #
  #     export_rva = pe_get32 (dll, opthdr_ofs + 96);
  #     export_size = pe_get32 (dll, opthdr_ofs + 100);
  #     nsections = pe_get16 (dll, pe_header_offset + 4 +2);
  #     secptr = (pe_header_offset + 4 + 20 +
  # 	      pe_get16 (dll, pe_header_offset + 4 + 16));
  #
  #     expptr = 0;
  #     for (i = 0; i < nsections; i++)
  #     {
  # 	char sname[8];
  # 	unsigned long secptr1 = secptr + 40 * i;
  # 	unsigned long vaddr = pe_get32 (dll, secptr1 + 12);
  # 	unsigned long vsize = pe_get32 (dll, secptr1 + 16);
  # 	unsigned long fptr = pe_get32 (dll, secptr1 + 20);
  # 	lseek(dll, secptr1, SEEK_SET);
  # 	read(dll, sname, 8);
  # 	if (vaddr <= export_rva && vaddr+vsize > export_rva)
  # 	{
  # 	    expptr = fptr + (export_rva - vaddr);
  # 	    if (export_rva + export_size > vaddr + vsize)
  # 		export_size = vsize - (export_rva - vaddr);
  # 	    break;
  # 	}
  #     }
  #
  #     expdata = (unsigned char*)malloc(export_size);
  #     lseek (dll, expptr, SEEK_SET);
  #     read (dll, expdata, export_size);
  #     erva = expdata - export_rva;
  #
  #     nexp = pe_as32 (expdata+24);
  #     name_rvas = pe_as32 (expdata+32);
  #
  #     printf ("EXPORTS\n");
  #     for (i = 0; i<nexp; i++)
  #     {
  # 	unsigned long name_rva = pe_as32 (erva+name_rvas+i*4);
  # 	printf ("\t%s @ %ld ;\n", erva+name_rva, 1+ i);
  #     }
  #
  #     return 0;
  # }
  # /* impgen.c ends here */
  
  EOF
      ;;
    esac
  
    # We use sed instead of cat because bash on DJGPP gets confused if
    # if finds mixed CR/LF and LF-only lines.  Since sed operates in
    # text mode, it properly converts lines to CR/LF.  This bash problem
    # is reportedly fixed, but why not run on old versions too?
    sed '$q' "$ltmain" >> "${ofile}T" || (rm -f "${ofile}T"; exit 1)
  
    mv -f "${ofile}T" "$ofile" || \
      (rm -f "$ofile" && cp "${ofile}T" "$ofile" && rm -f "${ofile}T")
    chmod +x "$ofile"
  fi
  ##
  ## END FIXME
  
  ])# _LT_AC_LTCONFIG_HACK
  
  # AC_LIBTOOL_DLOPEN - enable checks for dlopen support
  AC_DEFUN([AC_LIBTOOL_DLOPEN], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])])
  
  # AC_LIBTOOL_WIN32_DLL - declare package support for building win32 dll's
  AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_BEFORE([$0], [AC_LIBTOOL_SETUP])])
  
  # AC_ENABLE_SHARED - implement the --enable-shared flag
  # Usage: AC_ENABLE_SHARED[(DEFAULT)]
  #   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
  #   `yes'.
  AC_DEFUN([AC_ENABLE_SHARED],
  [define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
  AC_ARG_ENABLE(shared,
  changequote(<<, >>)dnl
  <<  --enable-shared[=PKGS]  build shared libraries [default=>>AC_ENABLE_SHARED_DEFAULT],
  changequote([, ])dnl
  [p=${PACKAGE-default}
  case $enableval in
  yes) enable_shared=yes ;;
  no) enable_shared=no ;;
  *)
    enable_shared=no
    # Look at the argument we got.  We use all the common list separators.
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
    for pkg in $enableval; do
      if test "X$pkg" = "X$p"; then
        enable_shared=yes
      fi
    done
    IFS="$ac_save_ifs"
    ;;
  esac],
  enable_shared=AC_ENABLE_SHARED_DEFAULT)dnl
  ])
  
  # AC_DISABLE_SHARED - set the default shared flag to --disable-shared
  AC_DEFUN([AC_DISABLE_SHARED],
  [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
  AC_ENABLE_SHARED(no)])
  
  # AC_ENABLE_STATIC - implement the --enable-static flag
  # Usage: AC_ENABLE_STATIC[(DEFAULT)]
  #   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
  #   `yes'.
  AC_DEFUN([AC_ENABLE_STATIC],
  [define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
  AC_ARG_ENABLE(static,
  changequote(<<, >>)dnl
  <<  --enable-static[=PKGS]  build static libraries [default=>>AC_ENABLE_STATIC_DEFAULT],
  changequote([, ])dnl
  [p=${PACKAGE-default}
  case $enableval in
  yes) enable_static=yes ;;
  no) enable_static=no ;;
  *)
    enable_static=no
    # Look at the argument we got.  We use all the common list separators.
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
    for pkg in $enableval; do
      if test "X$pkg" = "X$p"; then
        enable_static=yes
      fi
    done
    IFS="$ac_save_ifs"
    ;;
  esac],
  enable_static=AC_ENABLE_STATIC_DEFAULT)dnl
  ])
  
  # AC_DISABLE_STATIC - set the default static flag to --disable-static
  AC_DEFUN([AC_DISABLE_STATIC],
  [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
  AC_ENABLE_STATIC(no)])
  
  
  # AC_ENABLE_FAST_INSTALL - implement the --enable-fast-install flag
  # Usage: AC_ENABLE_FAST_INSTALL[(DEFAULT)]
  #   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
  #   `yes'.
  AC_DEFUN([AC_ENABLE_FAST_INSTALL],
  [define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
  AC_ARG_ENABLE(fast-install,
  changequote(<<, >>)dnl
  <<  --enable-fast-install[=PKGS]  optimize for fast installation [default=>>AC_ENABLE_FAST_INSTALL_DEFAULT],
  changequote([, ])dnl
  [p=${PACKAGE-default}
  case $enableval in
  yes) enable_fast_install=yes ;;
  no) enable_fast_install=no ;;
  *)
    enable_fast_install=no
    # Look at the argument we got.  We use all the common list separators.
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
    for pkg in $enableval; do
      if test "X$pkg" = "X$p"; then
        enable_fast_install=yes
      fi
    done
    IFS="$ac_save_ifs"
    ;;
  esac],
  enable_fast_install=AC_ENABLE_FAST_INSTALL_DEFAULT)dnl
  ])
  
  # AC_DISABLE_FAST_INSTALL - set the default to --disable-fast-install
  AC_DEFUN([AC_DISABLE_FAST_INSTALL],
  [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
  AC_ENABLE_FAST_INSTALL(no)])
  
  # AC_LIBTOOL_PICMODE - implement the --with-pic flag
  # Usage: AC_LIBTOOL_PICMODE[(MODE)]
  #   Where MODE is either `yes' or `no'.  If omitted, it defaults to
  #   `both'.
  AC_DEFUN([AC_LIBTOOL_PICMODE],
  [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
  pic_mode=ifelse($#,1,$1,default)])
  
  
  # AC_PATH_TOOL_PREFIX - find a file program which can recognise shared library
  AC_DEFUN([AC_PATH_TOOL_PREFIX],
  [AC_MSG_CHECKING([for $1])
  AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
  [case $MAGIC_CMD in
    /*)
    lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
    ;;
    ?:/*)
    lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path.
    ;;
    *)
    ac_save_MAGIC_CMD="$MAGIC_CMD"
    IFS="${IFS=   }"; ac_save_ifs="$IFS"; IFS=":"
  dnl $ac_dummy forces splitting on constant user-supplied paths.
  dnl POSIX.2 word splitting is done only on the output of word expansions,
  dnl not every word.  This closes a longstanding sh security hole.
    ac_dummy="ifelse([$2], , $PATH, [$2])"
    for ac_dir in $ac_dummy; do
      test -z "$ac_dir" && ac_dir=.
      if test -f $ac_dir/$1; then
        lt_cv_path_MAGIC_CMD="$ac_dir/$1"
        if test -n "$file_magic_test_file"; then
  	case $deplibs_check_method in
  	"file_magic "*)
  	  file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
  	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
  	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
  	    egrep "$file_magic_regex" > /dev/null; then
  	    :
  	  else
  	    cat <<EOF 1>&2
  
  *** Warning: the command libtool uses to detect shared libraries,
  *** $file_magic_cmd, produces output that libtool cannot recognize.
  *** The result is that libtool may fail to recognize shared libraries
  *** as such.  This will affect the creation of libtool libraries that
  *** depend on shared libraries, but programs linked with such libtool
  *** libraries will work regardless of this problem.  Nevertheless, you
  *** may want to report the problem to your system manager and/or to
  *** bug-libtool@gnu.org
  
  EOF
  	  fi ;;
  	esac
        fi
        break
      fi
    done
    IFS="$ac_save_ifs"
    MAGIC_CMD="$ac_save_MAGIC_CMD"
    ;;
  esac])
  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
  if test -n "$MAGIC_CMD"; then
    AC_MSG_RESULT($MAGIC_CMD)
  else
    AC_MSG_RESULT(no)
  fi
  ])
  
  
  # AC_PATH_MAGIC - find a file program which can recognise a shared library
  AC_DEFUN([AC_PATH_MAGIC],
  [AC_REQUIRE([AC_CHECK_TOOL_PREFIX])dnl
  AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin:$PATH)
  if test -z "$lt_cv_path_MAGIC_CMD"; then
    if test -n "$ac_tool_prefix"; then
      AC_PATH_TOOL_PREFIX(file, /usr/bin:$PATH)
    else
      MAGIC_CMD=:
    fi
  fi
  ])
  
  
  # AC_PROG_LD - find the path to the GNU or non-GNU linker
  AC_DEFUN([AC_PROG_LD],
  [AC_ARG_WITH(gnu-ld,
  [  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]],
  test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
  AC_REQUIRE([AC_PROG_CC])dnl
  AC_REQUIRE([AC_CANONICAL_HOST])dnl
  AC_REQUIRE([AC_CANONICAL_BUILD])dnl
  ac_prog=ld
  if test "$GCC" = yes; then
    # Check if gcc -print-prog-name=ld gives a path.
    AC_MSG_CHECKING([for ld used by GCC])
    case $host in
    *-*-mingw*)
      # gcc leaves a trailing carriage return which upsets mingw
      ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
    *)
      ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
    esac
    case $ac_prog in
      # Accept absolute paths.
      [[\\/]* | [A-Za-z]:[\\/]*)]
        [re_direlt='/[^/][^/]*/\.\./']
        # Canonicalize the path of ld
        ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
        while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
  	ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
        done
        test -z "$LD" && LD="$ac_prog"
        ;;
    "")
      # If it fails, then pretend we aren't using GCC.
      ac_prog=ld
      ;;
    *)
      # If it is relative, then search for the first ld in PATH.
      with_gnu_ld=unknown
      ;;
    esac
  elif test "$with_gnu_ld" = yes; then
    AC_MSG_CHECKING([for GNU ld])
  else
    AC_MSG_CHECKING([for non-GNU ld])
  fi
  AC_CACHE_VAL(lt_cv_path_LD,
  [if test -z "$LD"; then
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
    for ac_dir in $PATH; do
      test -z "$ac_dir" && ac_dir=.
      if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
        lt_cv_path_LD="$ac_dir/$ac_prog"
        # Check to see if the program is GNU ld.  I'd rather use --version,
        # but apparently some GNU ld's only accept -v.
        # Break only if it was the GNU/non-GNU ld that we prefer.
        if "$lt_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
  	test "$with_gnu_ld" != no && break
        else
  	test "$with_gnu_ld" != yes && break
        fi
      fi
    done
    IFS="$ac_save_ifs"
  else
    lt_cv_path_LD="$LD" # Let the user override the test with a path.
  fi])
  LD="$lt_cv_path_LD"
  if test -n "$LD"; then
    AC_MSG_RESULT($LD)
  else
    AC_MSG_RESULT(no)
  fi
  test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
  AC_PROG_LD_GNU
  ])
  
  # AC_PROG_LD_GNU -
  AC_DEFUN([AC_PROG_LD_GNU],
  [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
  [# I'd rather use --version here, but apparently some GNU ld's only accept -v.
  if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
    lt_cv_prog_gnu_ld=yes
  else
    lt_cv_prog_gnu_ld=no
  fi])
  with_gnu_ld=$lt_cv_prog_gnu_ld
  ])
  
  # AC_PROG_LD_RELOAD_FLAG - find reload flag for linker
  #   -- PORTME Some linkers may need a different reload flag.
  AC_DEFUN([AC_PROG_LD_RELOAD_FLAG],
  [AC_CACHE_CHECK([for $LD option to reload object files], lt_cv_ld_reload_flag,
  [lt_cv_ld_reload_flag='-r'])
  reload_flag=$lt_cv_ld_reload_flag
  test -n "$reload_flag" && reload_flag=" $reload_flag"
  ])
  
  # AC_DEPLIBS_CHECK_METHOD - how to check for library dependencies
  #  -- PORTME fill in with the dynamic library characteristics
  AC_DEFUN([AC_DEPLIBS_CHECK_METHOD],
  [AC_CACHE_CHECK([how to recognise dependant libraries],
  lt_cv_deplibs_check_method,
  [lt_cv_file_magic_cmd='$MAGIC_CMD'
  lt_cv_file_magic_test_file=
  lt_cv_deplibs_check_method='unknown'
  # Need to set the preceding variable on all platforms that support
  # interlibrary dependencies.
  # 'none' -- dependencies not supported.
  # `unknown' -- same as none, but documents that we really don't know.
  # 'pass_all' -- all dependencies passed with no checks.
  # 'test_compile' -- check by making test program.
  # ['file_magic [regex]'] -- check by looking for files in library path
  # which responds to the $file_magic_cmd with a given egrep regex.
  # If you have `file' or equivalent on your system and you're not sure
  # whether `pass_all' will *always* work, you probably want this one.
  
  case $host_os in
  aix4* | aix5*)
    lt_cv_deplibs_check_method=pass_all
    ;;
  
  beos*)
    lt_cv_deplibs_check_method=pass_all
    ;;
  
  bsdi4*)
    [lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)']
    lt_cv_file_magic_cmd='/usr/bin/file -L'
    lt_cv_file_magic_test_file=/shlib/libc.so
    ;;
  
  cygwin* | mingw* | pw32*)
    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
    lt_cv_file_magic_cmd='$OBJDUMP -f'
    ;;
  
  darwin* | rhapsody*)
    lt_cv_deplibs_check_method='file_magic Mach-O dynamically linked shared library'
    lt_cv_file_magic_cmd='/usr/bin/file -L'
    case "$host_os" in
    rhapsody* | darwin1.[012])
      lt_cv_file_magic_test_file=`echo /System/Library/Frameworks/System.framework/Versions/*/System | head -1`
      ;;
    *) # Darwin 1.3 on
      lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib'
      ;;
    esac
    ;;
  
  freebsd*)
    if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
      case $host_cpu in
      i*86 )
        # Not sure whether the presence of OpenBSD here was a mistake.
        # Let's accept both of them until this is cleared up.
        [lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[3-9]86 (compact )?demand paged shared library']
        lt_cv_file_magic_cmd=/usr/bin/file
        lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
        ;;
      esac
    else
      lt_cv_deplibs_check_method=pass_all
    fi
    ;;
  
  gnu*)
    lt_cv_deplibs_check_method=pass_all
    ;;
  
  hpux10.20*|hpux11*)
    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library']
    lt_cv_file_magic_cmd=/usr/bin/file
    lt_cv_file_magic_test_file=/usr/lib/libc.sl
    ;;
  
  irix5* | irix6*)
    case $host_os in
    irix5*)
      # this will be overridden with pass_all, but let us keep it just in case
      lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1"
      ;;
    *)
      case $LD in
      *-32|*"-32 ") libmagic=32-bit;;
      *-n32|*"-n32 ") libmagic=N32;;
      *-64|*"-64 ") libmagic=64-bit;;
      *) libmagic=never-match;;
      esac
      # this will be overridden with pass_all, but let us keep it just in case
      [lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[1234] dynamic lib MIPS - version 1"]
      ;;
    esac
    lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*`
    lt_cv_deplibs_check_method=pass_all
    ;;
  
  # This must be Linux ELF.
  linux-gnu*)
    case $host_cpu in
    alpha* | i*86 | powerpc* | sparc* | ia64* )
      lt_cv_deplibs_check_method=pass_all ;;
    *)
      # glibc up to 2.1.1 does not perform some relocations on ARM
      [lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;;]
    esac
    lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
    ;;
  
  netbsd*)
    if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
      [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$']
    else
      [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so$']
    fi
    ;;
  
  newos6*)
    [lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)']
    lt_cv_file_magic_cmd=/usr/bin/file
    lt_cv_file_magic_test_file=/usr/lib/libnls.so
    ;;
  
  osf3* | osf4* | osf5*)
    # this will be overridden with pass_all, but let us keep it just in case
    lt_cv_deplibs_check_method='file_magic COFF format alpha shared library'
    lt_cv_file_magic_test_file=/shlib/libc.so
    lt_cv_deplibs_check_method=pass_all
    ;;
  
  sco3.2v5*)
    lt_cv_deplibs_check_method=pass_all
    ;;
  
  solaris*)
    lt_cv_deplibs_check_method=pass_all
    lt_cv_file_magic_test_file=/lib/libc.so
    ;;
  
  [sysv5uw[78]* | sysv4*uw2*)]
    lt_cv_deplibs_check_method=pass_all
    ;;
  
  sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
    case $host_vendor in
    motorola)
      [lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]']
      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
      ;;
    ncr)
      lt_cv_deplibs_check_method=pass_all
      ;;
    sequent)
      lt_cv_file_magic_cmd='/bin/file'
      [lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )']
      ;;
    sni)
      lt_cv_file_magic_cmd='/bin/file'
      [lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"]
      lt_cv_file_magic_test_file=/lib/libc.so
      ;;
    esac
    ;;
  esac
  ])
  file_magic_cmd=$lt_cv_file_magic_cmd
  deplibs_check_method=$lt_cv_deplibs_check_method
  ])
  
  
  # AC_PROG_NM - find the path to a BSD-compatible name lister
  AC_DEFUN([AC_PROG_NM],
  [AC_MSG_CHECKING([for BSD-compatible nm])
  AC_CACHE_VAL(lt_cv_path_NM,
  [if test -n "$NM"; then
    # Let the user override the test.
    lt_cv_path_NM="$NM"
  else
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
    for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
      test -z "$ac_dir" && ac_dir=.
      tmp_nm=$ac_dir/${ac_tool_prefix}nm
      if test -f $tmp_nm || test -f $tmp_nm$ac_exeext ; then
        # Check to see if the nm accepts a BSD-compat flag.
        # Adding the `sed 1q' prevents false positives on HP-UX, which says:
        #   nm: unknown option "B" ignored
        # Tru64's nm complains that /dev/null is an invalid object file
        if ($tmp_nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep '(/dev/null|Invalid file or object type)' >/dev/null; then
  	lt_cv_path_NM="$tmp_nm -B"
  	break
        elif ($tmp_nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
  	lt_cv_path_NM="$tmp_nm -p"
  	break
        else
  	lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
  	continue # so that we can try to find one that supports BSD flags
        fi
      fi
    done
    IFS="$ac_save_ifs"
    test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
  fi])
  NM="$lt_cv_path_NM"
  AC_MSG_RESULT([$NM])
  ])
  
  # AC_CHECK_LIBM - check for math library
  AC_DEFUN([AC_CHECK_LIBM],
  [AC_REQUIRE([AC_CANONICAL_HOST])dnl
  LIBM=
  case $host in
  *-*-beos* | *-*-cygwin* | *-*-pw32*)
    # These system don't have libm
    ;;
  *-ncr-sysv4.3*)
    AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
    AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
    ;;
  *)
    AC_CHECK_LIB(m, main, LIBM="-lm")
    ;;
  esac
  ])
  
  # AC_LIBLTDL_CONVENIENCE[(dir)] - sets LIBLTDL to the link flags for
  # the libltdl convenience library and INCLTDL to the include flags for
  # the libltdl header and adds --enable-ltdl-convenience to the
  # configure arguments.  Note that LIBLTDL and INCLTDL are not
  # AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called.  If DIR is not
  # provided, it is assumed to be `libltdl'.  LIBLTDL will be prefixed
  # with '${top_builddir}/' and INCLTDL will be prefixed with
  # '${top_srcdir}/' (note the single quotes!).  If your package is not
  # flat and you're not using automake, define top_builddir and
  # top_srcdir appropriately in the Makefiles.
  AC_DEFUN([AC_LIBLTDL_CONVENIENCE],
  [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
    case $enable_ltdl_convenience in
    no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
    "") enable_ltdl_convenience=yes
        ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
    esac
    LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la
    INCLTDL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
  ])
  
  # AC_LIBLTDL_INSTALLABLE[(dir)] - sets LIBLTDL to the link flags for
  # the libltdl installable library and INCLTDL to the include flags for
  # the libltdl header and adds --enable-ltdl-install to the configure
  # arguments.  Note that LIBLTDL and INCLTDL are not AC_SUBSTed, nor is
  # AC_CONFIG_SUBDIRS called.  If DIR is not provided and an installed
  # libltdl is not found, it is assumed to be `libltdl'.  LIBLTDL will
  # be prefixed with '${top_builddir}/' and INCLTDL will be prefixed
  # with '${top_srcdir}/' (note the single quotes!).  If your package is
  # not flat and you're not using automake, define top_builddir and
  # top_srcdir appropriately in the Makefiles.
  # In the future, this macro may have to be called after AC_PROG_LIBTOOL.
  AC_DEFUN([AC_LIBLTDL_INSTALLABLE],
  [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
    AC_CHECK_LIB(ltdl, main,
    [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
    [if test x"$enable_ltdl_install" = xno; then
       AC_MSG_WARN([libltdl not installed, but installation disabled])
     else
       enable_ltdl_install=yes
     fi
    ])
    if test x"$enable_ltdl_install" = x"yes"; then
      ac_configure_args="$ac_configure_args --enable-ltdl-install"
      LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la
      INCLTDL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
    else
      ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
      LIBLTDL="-lltdl"
      INCLTDL=
    fi
  ])
  
  # old names
  AC_DEFUN([AM_PROG_LIBTOOL],   [AC_PROG_LIBTOOL])
  AC_DEFUN([AM_ENABLE_SHARED],  [AC_ENABLE_SHARED($@)])
  AC_DEFUN([AM_ENABLE_STATIC],  [AC_ENABLE_STATIC($@)])
  AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
  AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
  AC_DEFUN([AM_PROG_LD],        [AC_PROG_LD])
  AC_DEFUN([AM_PROG_NM],        [AC_PROG_NM])
  
  # This is just to silence aclocal about the macro not being used
  ifelse([AC_DISABLE_FAST_INSTALL])
  Index: ossp-pkg/srpc/libxds/ltmain.sh
  ============================================================
  $ cvs update -p -r1.1 ltmain.sh
  # ltmain.sh - Provide generalized library-building support services.
  # NOTE: Changing this file will not affect anything until you rerun configure.
  #
  # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
  # Free Software Foundation, Inc.
  # Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
  #
  # This program is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 2 of the License, or
  # (at your option) any later version.
  #
  # This program is distributed in the hope that it will be useful, but
  # WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  # General Public License for more details.
  #
  # You should have received a copy of the GNU General Public License
  # along with this program; if not, write to the Free Software
  # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  #
  # As a special exception to the GNU General Public License, if you
  # distribute this file as part of a program that contains a
  # configuration script generated by Autoconf, you may include it under
  # the same distribution terms that you use for the rest of that program.
  
  # Check that we have a working $echo.
  if test "X$1" = X--no-reexec; then
    # Discard the --no-reexec flag, and continue.
    shift
  elif test "X$1" = X--fallback-echo; then
    # Avoid inline document here, it may be left over
    :
  elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
    # Yippee, $echo works!
    :
  else
    # Restart under the correct shell, and then maybe $echo will work.
    exec $SHELL "$0" --no-reexec ${1+"$@"}
  fi
  
  if test "X$1" = X--fallback-echo; then
    # used as fallback echo
    shift
    cat <<EOF
  $*
  EOF
    exit 0
  fi
  
  # The name of this program.
  progname=`$echo "$0" | sed 's%^.*/%%'`
  modename="$progname"
  
  # Constants.
  PROGRAM=ltmain.sh
  PACKAGE=libtool
  VERSION=1.4
  TIMESTAMP=" (1.920 2001/04/24 23:26:18)"
  
  default_mode=
  help="Try \`$progname --help' for more information."
  magic="%%%MAGIC variable%%%"
  mkdir="mkdir"
  mv="mv -f"
  rm="rm -f"
  
  # Sed substitution that helps us do robust quoting.  It backslashifies
  # metacharacters that are still active within double-quoted strings.
  Xsed='sed -e 1s/^X//'
  sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g'
  SP2NL='tr \040 \012'
  NL2SP='tr \015\012 \040\040'
  
  # NLS nuisances.
  # Only set LANG and LC_ALL to C if already set.
  # These must not be set unconditionally because not all systems understand
  # e.g. LANG=C (notably SCO).
  # We save the old values to restore during execute mode.
  if test "${LC_ALL+set}" = set; then
    save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL
  fi
  if test "${LANG+set}" = set; then
    save_LANG="$LANG"; LANG=C; export LANG
  fi
  
  if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
    echo "$modename: not configured to build any kind of library" 1>&2
    echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
    exit 1
  fi
  
  # Global variables.
  mode=$default_mode
  nonopt=
  prev=
  prevopt=
  run=
  show="$echo"
  show_help=
  execute_dlfiles=
  lo2o="s/\\.lo\$/.${objext}/"
  o2lo="s/\\.${objext}\$/.lo/"
  
  # Parse our command line options once, thoroughly.
  while test $# -gt 0
  do
    arg="$1"
    shift
  
    case $arg in
    -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;;
    *) optarg= ;;
    esac
  
    # If the previous option needs an argument, assign it.
    if test -n "$prev"; then
      case $prev in
      execute_dlfiles)
        execute_dlfiles="$execute_dlfiles $arg"
        ;;
      *)
        eval "$prev=\$arg"
        ;;
      esac
  
      prev=
      prevopt=
      continue
    fi
  
    # Have we seen a non-optional argument yet?
    case $arg in
    --help)
      show_help=yes
      ;;
  
    --version)
      echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"
      exit 0
      ;;
  
    --config)
      sed -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $0
      exit 0
      ;;
  
    --debug)
      echo "$progname: enabling shell trace mode"
      set -x
      ;;
  
    --dry-run | -n)
      run=:
      ;;
  
    --features)
      echo "host: $host"
      if test "$build_libtool_libs" = yes; then
        echo "enable shared libraries"
      else
        echo "disable shared libraries"
      fi
      if test "$build_old_libs" = yes; then
        echo "enable static libraries"
      else
        echo "disable static libraries"
      fi
      exit 0
      ;;
  
    --finish) mode="finish" ;;
  
    --mode) prevopt="--mode" prev=mode ;;
    --mode=*) mode="$optarg" ;;
  
    --quiet | --silent)
      show=:
      ;;
  
    -dlopen)
      prevopt="-dlopen"
      prev=execute_dlfiles
      ;;
  
    -*)
      $echo "$modename: unrecognized option \`$arg'" 1>&2
      $echo "$help" 1>&2
      exit 1
      ;;
  
    *)
      nonopt="$arg"
      break
      ;;
    esac
  done
  
  if test -n "$prevopt"; then
    $echo "$modename: option \`$prevopt' requires an argument" 1>&2
    $echo "$help" 1>&2
    exit 1
  fi
  
  if test -z "$show_help"; then
  
    # Infer the operation mode.
    if test -z "$mode"; then
      case $nonopt in
      *cc | *++ | gcc* | *-gcc*)
        mode=link
        for arg
        do
  	case $arg in
  	-c)
  	   mode=compile
  	   break
  	   ;;
  	esac
        done
        ;;
      *db | *dbx | *strace | *truss)
        mode=execute
        ;;
      *install*|cp|mv)
        mode=install
        ;;
      *rm)
        mode=uninstall
        ;;
      *)
        # If we have no mode, but dlfiles were specified, then do execute mode.
        test -n "$execute_dlfiles" && mode=execute
  
        # Just use the default operation mode.
        if test -z "$mode"; then
  	if test -n "$nonopt"; then
  	  $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2
  	else
  	  $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2
  	fi
        fi
        ;;
      esac
    fi
  
    # Only execute mode is allowed to have -dlopen flags.
    if test -n "$execute_dlfiles" && test "$mode" != execute; then
      $echo "$modename: unrecognized option \`-dlopen'" 1>&2
      $echo "$help" 1>&2
      exit 1
    fi
  
    # Change the help message to a mode-specific one.
    generic_help="$help"
    help="Try \`$modename --help --mode=$mode' for more information."
  
    # These modes are in order of execution frequency so that they run quickly.
    case $mode in
    # libtool compile mode
    compile)
      modename="$modename: compile"
      # Get the compilation command and the source file.
      base_compile=
      prev=
      lastarg=
      srcfile="$nonopt"
      suppress_output=
  
      user_target=no
      for arg
      do
        case $prev in
        "") ;;
        xcompiler)
  	# Aesthetically quote the previous argument.
  	prev=
  	lastarg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
  
  	case $arg in
  	# Double-quote args containing other shell metacharacters.
  	# Many Bourne shells cannot handle close brackets correctly
  	# in scan sets, so we specify it separately.
  	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
  	  arg="\"$arg\""
  	  ;;
  	esac
  
  	# Add the previous argument to base_compile.
  	if test -z "$base_compile"; then
  	  base_compile="$lastarg"
  	else
  	  base_compile="$base_compile $lastarg"
  	fi
  	continue
  	;;
        esac
  
        # Accept any command-line options.
        case $arg in
        -o)
  	if test "$user_target" != "no"; then
  	  $echo "$modename: you cannot specify \`-o' more than once" 1>&2
  	  exit 1
  	fi
  	user_target=next
  	;;
  
        -static)
  	build_old_libs=yes
  	continue
  	;;
  
        -prefer-pic)
  	pic_mode=yes
  	continue
  	;;
  
        -prefer-non-pic)
  	pic_mode=no
  	continue
  	;;
  
        -Xcompiler)
  	prev=xcompiler
  	continue
  	;;
  
        -Wc,*)
  	args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"`
  	lastarg=
  	IFS="${IFS= 	}"; save_ifs="$IFS"; IFS=','
  	for arg in $args; do
  	  IFS="$save_ifs"
  
  	  # Double-quote args containing other shell metacharacters.
  	  # Many Bourne shells cannot handle close brackets correctly
  	  # in scan sets, so we specify it separately.
  	  case $arg in
  	    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
  	    arg="\"$arg\""
  	    ;;
  	  esac
  	  lastarg="$lastarg $arg"
  	done
  	IFS="$save_ifs"
  	lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"`
  
  	# Add the arguments to base_compile.
  	if test -z "$base_compile"; then
  	  base_compile="$lastarg"
  	else
  	  base_compile="$base_compile $lastarg"
  	fi
  	continue
  	;;
        esac
  
        case $user_target in
        next)
  	# The next one is the -o target name
  	user_target=yes
  	continue
  	;;
        yes)
  	# We got the output file
  	user_target=set
  	libobj="$arg"
  	continue
  	;;
        esac
  
        # Accept the current argument as the source file.
        lastarg="$srcfile"
        srcfile="$arg"
  
        # Aesthetically quote the previous argument.
  
        # Backslashify any backslashes, double quotes, and dollar signs.
        # These are the only characters that are still specially
        # interpreted inside of double-quoted scrings.
        lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"`
  
        # Double-quote args containing other shell metacharacters.
        # Many Bourne shells cannot handle close brackets correctly
        # in scan sets, so we specify it separately.
        case $lastarg in
        *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
  	lastarg="\"$lastarg\""
  	;;
        esac
  
        # Add the previous argument to base_compile.
        if test -z "$base_compile"; then
  	base_compile="$lastarg"
        else
  	base_compile="$base_compile $lastarg"
        fi
      done
  
      case $user_target in
      set)
        ;;
      no)
        # Get the name of the library object.
        libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'`
        ;;
      *)
        $echo "$modename: you must specify a target with \`-o'" 1>&2
        exit 1
        ;;
      esac
  
      # Recognize several different file suffixes.
      # If the user specifies -o file.o, it is replaced with file.lo
      xform='[cCFSfmso]'
      case $libobj in
      *.ada) xform=ada ;;
      *.adb) xform=adb ;;
      *.ads) xform=ads ;;
      *.asm) xform=asm ;;
      *.c++) xform=c++ ;;
      *.cc) xform=cc ;;
      *.cpp) xform=cpp ;;
      *.cxx) xform=cxx ;;
      *.f90) xform=f90 ;;
      *.for) xform=for ;;
      esac
  
      libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
  
      case $libobj in
      *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;;
      *)
        $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2
        exit 1
        ;;
      esac
  
      if test -z "$base_compile"; then
        $echo "$modename: you must specify a compilation command" 1>&2
        $echo "$help" 1>&2
        exit 1
      fi
  
      # Delete any leftover library objects.
      if test "$build_old_libs" = yes; then
        removelist="$obj $libobj"
      else
        removelist="$libobj"
      fi
  
      $run $rm $removelist
      trap "$run $rm $removelist; exit 1" 1 2 15
  
      # On Cygwin there's no "real" PIC flag so we must build both object types
      case $host_os in
      cygwin* | mingw* | pw32* | os2*)
        pic_mode=default
        ;;
      esac
      if test $pic_mode = no && test "$deplibs_check_method" != pass_all; then
        # non-PIC code in shared libraries is not supported
        pic_mode=default
      fi
  
      # Calculate the filename of the output object if compiler does
      # not support -o with -c
      if test "$compiler_c_o" = no; then
        output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
        lockfile="$output_obj.lock"
        removelist="$removelist $output_obj $lockfile"
        trap "$run $rm $removelist; exit 1" 1 2 15
      else
        need_locks=no
        lockfile=
      fi
  
      # Lock this critical section if it is needed
      # We use this script file to make the link, it avoids creating a new file
      if test "$need_locks" = yes; then
        until $run ln "$0" "$lockfile" 2>/dev/null; do
  	$show "Waiting for $lockfile to be removed"
  	sleep 2
        done
      elif test "$need_locks" = warn; then
        if test -f "$lockfile"; then
  	echo "\
  *** ERROR, $lockfile exists and contains:
  `cat $lockfile 2>/dev/null`
  
  This indicates that another process is trying to use the same
  temporary object file, and libtool could not work around it because
  your compiler does not support \`-c' and \`-o' together.  If you
  repeat this compilation, it may succeed, by chance, but you had better
  avoid parallel builds (make -j) in this platform, or get a better
  compiler."
  
  	$run $rm $removelist
  	exit 1
        fi
        echo $srcfile > "$lockfile"
      fi
  
      if test -n "$fix_srcfile_path"; then
        eval srcfile=\"$fix_srcfile_path\"
      fi
  
      # Only build a PIC object if we are building libtool libraries.
      if test "$build_libtool_libs" = yes; then
        # Without this assignment, base_compile gets emptied.
        fbsd_hideous_sh_bug=$base_compile
  
        if test "$pic_mode" != no; then
  	# All platforms use -DPIC, to notify preprocessed assembler code.
  	command="$base_compile $srcfile $pic_flag -DPIC"
        else
  	# Don't build PIC code
  	command="$base_compile $srcfile"
        fi
        if test "$build_old_libs" = yes; then
  	lo_libobj="$libobj"
  	dir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'`
  	if test "X$dir" = "X$libobj"; then
  	  dir="$objdir"
  	else
  	  dir="$dir/$objdir"
  	fi
  	libobj="$dir/"`$echo "X$libobj" | $Xsed -e 's%^.*/%%'`
  
  	if test -d "$dir"; then
  	  $show "$rm $libobj"
  	  $run $rm $libobj
  	else
  	  $show "$mkdir $dir"
  	  $run $mkdir $dir
  	  status=$?
  	  if test $status -ne 0 && test ! -d $dir; then
  	    exit $status
  	  fi
  	fi
        fi
        if test "$compiler_o_lo" = yes; then
  	output_obj="$libobj"
  	command="$command -o $output_obj"
        elif test "$compiler_c_o" = yes; then
  	output_obj="$obj"
  	command="$command -o $output_obj"
        fi
  
        $run $rm "$output_obj"
        $show "$command"
        if $run eval "$command"; then :
        else
  	test -n "$output_obj" && $run $rm $removelist
  	exit 1
        fi
  
        if test "$need_locks" = warn &&
  	 test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then
  	echo "\
  *** ERROR, $lockfile contains:
  `cat $lockfile 2>/dev/null`
  
  but it should contain:
  $srcfile
  
  This indicates that another process is trying to use the same
  temporary object file, and libtool could not work around it because
  your compiler does not support \`-c' and \`-o' together.  If you
  repeat this compilation, it may succeed, by chance, but you had better
  avoid parallel builds (make -j) in this platform, or get a better
  compiler."
  
  	$run $rm $removelist
  	exit 1
        fi
  
        # Just move the object if needed, then go on to compile the next one
        if test x"$output_obj" != x"$libobj"; then
  	$show "$mv $output_obj $libobj"
  	if $run $mv $output_obj $libobj; then :
  	else
  	  error=$?
  	  $run $rm $removelist
  	  exit $error
  	fi
        fi
  
        # If we have no pic_flag, then copy the object into place and finish.
        if (test -z "$pic_flag" || test "$pic_mode" != default) &&
  	 test "$build_old_libs" = yes; then
  	# Rename the .lo from within objdir to obj
  	if test -f $obj; then
  	  $show $rm $obj
  	  $run $rm $obj
  	fi
  
  	$show "$mv $libobj $obj"
  	if $run $mv $libobj $obj; then :
  	else
  	  error=$?
  	  $run $rm $removelist
  	  exit $error
  	fi
  
  	xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
  	if test "X$xdir" = "X$obj"; then
  	  xdir="."
  	else
  	  xdir="$xdir"
  	fi
  	baseobj=`$echo "X$obj" | $Xsed -e "s%.*/%%"`
  	libobj=`$echo "X$baseobj" | $Xsed -e "$o2lo"`
  	# Now arrange that obj and lo_libobj become the same file
  	$show "(cd $xdir && $LN_S $baseobj $libobj)"
  	if $run eval '(cd $xdir && $LN_S $baseobj $libobj)'; then
  	  exit 0
  	else
  	  error=$?
  	  $run $rm $removelist
  	  exit $error
  	fi
        fi
  
        # Allow error messages only from the first compilation.
        suppress_output=' >/dev/null 2>&1'
      fi
  
      # Only build a position-dependent object if we build old libraries.
      if test "$build_old_libs" = yes; then
        if test "$pic_mode" != yes; then
  	# Don't build PIC code
  	command="$base_compile $srcfile"
        else
  	# All platforms use -DPIC, to notify preprocessed assembler code.
  	command="$base_compile $srcfile $pic_flag -DPIC"
        fi
        if test "$compiler_c_o" = yes; then
  	command="$command -o $obj"
  	output_obj="$obj"
        fi
  
        # Suppress compiler output if we already did a PIC compilation.
        command="$command$suppress_output"
        $run $rm "$output_obj"
        $show "$command"
        if $run eval "$command"; then :
        else
  	$run $rm $removelist
  	exit 1
        fi
  
        if test "$need_locks" = warn &&
  	 test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then
  	echo "\
  *** ERROR, $lockfile contains:
  `cat $lockfile 2>/dev/null`
  
  but it should contain:
  $srcfile
  
  This indicates that another process is trying to use the same
  temporary object file, and libtool could not work around it because
  your compiler does not support \`-c' and \`-o' together.  If you
  repeat this compilation, it may succeed, by chance, but you had better
  avoid parallel builds (make -j) in this platform, or get a better
  compiler."
  
  	$run $rm $removelist
  	exit 1
        fi
  
        # Just move the object if needed
        if test x"$output_obj" != x"$obj"; then
  	$show "$mv $output_obj $obj"
  	if $run $mv $output_obj $obj; then :
  	else
  	  error=$?
  	  $run $rm $removelist
  	  exit $error
  	fi
        fi
  
        # Create an invalid libtool object if no PIC, so that we do not
        # accidentally link it into a program.
        if test "$build_libtool_libs" != yes; then
  	$show "echo timestamp > $libobj"
  	$run eval "echo timestamp > \$libobj" || exit $?
        else
  	# Move the .lo from within objdir
  	$show "$mv $libobj $lo_libobj"
  	if $run $mv $libobj $lo_libobj; then :
  	else
  	  error=$?
  	  $run $rm $removelist
  	  exit $error
  	fi
        fi
      fi
  
      # Unlock the critical section if it was locked
      if test "$need_locks" != no; then
        $run $rm "$lockfile"
      fi
  
      exit 0
      ;;
  
    # libtool link mode
    link | relink)
      modename="$modename: link"
      case $host in
      *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
        # It is impossible to link a dll without this setting, and
        # we shouldn't force the makefile maintainer to figure out
        # which system we are compiling for in order to pass an extra
        # flag for every libtool invokation.
        # allow_undefined=no
  
        # FIXME: Unfortunately, there are problems with the above when trying
        # to make a dll which has undefined symbols, in which case not
        # even a static library is built.  For now, we need to specify
        # -no-undefined on the libtool link line when we can be certain
        # that all symbols are satisfied, otherwise we get a static library.
        allow_undefined=yes
        ;;
      *)
        allow_undefined=yes
        ;;
      esac
      libtool_args="$nonopt"
      compile_command="$nonopt"
      finalize_command="$nonopt"
  
      compile_rpath=
      finalize_rpath=
      compile_shlibpath=
      finalize_shlibpath=
      convenience=
      old_convenience=
      deplibs=
      old_deplibs=
      compiler_flags=
      linker_flags=
      dllsearchpath=
      lib_search_path=`pwd`
  
      avoid_version=no
      dlfiles=
      dlprefiles=
      dlself=no
      export_dynamic=no
      export_symbols=
      export_symbols_regex=
      generated=
      libobjs=
      ltlibs=
      module=no
      no_install=no
      objs=
      prefer_static_libs=no
      preload=no
      prev=
      prevarg=
      release=
      rpath=
      xrpath=
      perm_rpath=
      temp_rpath=
      thread_safe=no
      vinfo=
  
      # We need to know -static, to get the right output filenames.
      for arg
      do
        case $arg in
        -all-static | -static)
  	if test "X$arg" = "X-all-static"; then
  	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
  	    $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2
  	  fi
  	  if test -n "$link_static_flag"; then
  	    dlopen_self=$dlopen_self_static
  	  fi
  	else
  	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
  	    dlopen_self=$dlopen_self_static
  	  fi
  	fi
  	build_libtool_libs=no
  	build_old_libs=yes
  	prefer_static_libs=yes
  	break
  	;;
        esac
      done
  
      # See if our shared archives depend on static archives.
      test -n "$old_archive_from_new_cmds" && build_old_libs=yes
  
      # Go through the arguments, transforming them on the way.
      while test $# -gt 0; do
        arg="$1"
        shift
        case $arg in
        *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
  	qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test
  	;;
        *) qarg=$arg ;;
        esac
        libtool_args="$libtool_args $qarg"
  
        # If the previous option needs an argument, assign it.
        if test -n "$prev"; then
  	case $prev in
  	output)
  	  compile_command="$compile_command @OUTPUT@"
  	  finalize_command="$finalize_command @OUTPUT@"
  	  ;;
  	esac
  
  	case $prev in
  	dlfiles|dlprefiles)
  	  if test "$preload" = no; then
  	    # Add the symbol object into the linking commands.
  	    compile_command="$compile_command @SYMFILE@"
  	    finalize_command="$finalize_command @SYMFILE@"
  	    preload=yes
  	  fi
  	  case $arg in
  	  *.la | *.lo) ;;  # We handle these cases below.
  	  force)
  	    if test "$dlself" = no; then
  	      dlself=needless
  	      export_dynamic=yes
  	    fi
  	    prev=
  	    continue
  	    ;;
  	  self)
  	    if test "$prev" = dlprefiles; then
  	      dlself=yes
  	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
  	      dlself=yes
  	    else
  	      dlself=needless
  	      export_dynamic=yes
  	    fi
  	    prev=
  	    continue
  	    ;;
  	  *)
  	    if test "$prev" = dlfiles; then
  	      dlfiles="$dlfiles $arg"
  	    else
  	      dlprefiles="$dlprefiles $arg"
  	    fi
  	    prev=
  	    continue
  	    ;;
  	  esac
  	  ;;
  	expsyms)
  	  export_symbols="$arg"
  	  if test ! -f "$arg"; then
  	    $echo "$modename: symbol file \`$arg' does not exist"
  	    exit 1
  	  fi
  	  prev=
  	  continue
  	  ;;
  	expsyms_regex)
  	  export_symbols_regex="$arg"
  	  prev=
  	  continue
  	  ;;
  	release)
  	  release="-$arg"
  	  prev=
  	  continue
  	  ;;
  	rpath | xrpath)
  	  # We need an absolute path.
  	  case $arg in
  	  [\\/]* | [A-Za-z]:[\\/]*) ;;
  	  *)
  	    $echo "$modename: only absolute run-paths are allowed" 1>&2
  	    exit 1
  	    ;;
  	  esac
  	  if test "$prev" = rpath; then
  	    case "$rpath " in
  	    *" $arg "*) ;;
  	    *) rpath="$rpath $arg" ;;
  	    esac
  	  else
  	    case "$xrpath " in
  	    *" $arg "*) ;;
  	    *) xrpath="$xrpath $arg" ;;
  	    esac
  	  fi
  	  prev=
  	  continue
  	  ;;
  	xcompiler)
  	  compiler_flags="$compiler_flags $qarg"
  	  prev=
  	  compile_command="$compile_command $qarg"
  	  finalize_command="$finalize_command $qarg"
  	  continue
  	  ;;
  	xlinker)
  	  linker_flags="$linker_flags $qarg"
  	  compiler_flags="$compiler_flags $wl$qarg"
  	  prev=
  	  compile_command="$compile_command $wl$qarg"
  	  finalize_command="$finalize_command $wl$qarg"
  	  continue
  	  ;;
  	*)
  	  eval "$prev=\"\$arg\""
  	  prev=
  	  continue
  	  ;;
  	esac
        fi # test -n $prev
  
        prevarg="$arg"
  
        case $arg in
        -all-static)
  	if test -n "$link_static_flag"; then
  	  compile_command="$compile_command $link_static_flag"
  	  finalize_command="$finalize_command $link_static_flag"
  	fi
  	continue
  	;;
  
        -allow-undefined)
  	# FIXME: remove this flag sometime in the future.
  	$echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2
  	continue
  	;;
  
        -avoid-version)
  	avoid_version=yes
  	continue
  	;;
  
        -dlopen)
  	prev=dlfiles
  	continue
  	;;
  
        -dlpreopen)
  	prev=dlprefiles
  	continue
  	;;
  
        -export-dynamic)
  	export_dynamic=yes
  	continue
  	;;
  
        -export-symbols | -export-symbols-regex)
  	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
  	  $echo "$modename: more than one -exported-symbols argument is not allowed"
  	  exit 1
  	fi
  	if test "X$arg" = "X-export-symbols"; then
  	  prev=expsyms
  	else
  	  prev=expsyms_regex
  	fi
  	continue
  	;;
  
        # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
        # so, if we see these flags be careful not to treat them like -L
        -L[A-Z][A-Z]*:*)
  	case $with_gcc/$host in
  	no/*-*-irix*)
  	  compile_command="$compile_command $arg"
  	  finalize_command="$finalize_command $arg"
  	  ;;
  	esac
  	continue
  	;;
  
        -L*)
  	dir=`$echo "X$arg" | $Xsed -e 's/^-L//'`
  	# We need an absolute path.
  	case $dir in
  	[\\/]* | [A-Za-z]:[\\/]*) ;;
  	*)
  	  absdir=`cd "$dir" && pwd`
  	  if test -z "$absdir"; then
  	    $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2
  	    exit 1
  	  fi
  	  dir="$absdir"
  	  ;;
  	esac
  	case "$deplibs " in
  	*" -L$dir "*) ;;
  	*)
  	  deplibs="$deplibs -L$dir"
  	  lib_search_path="$lib_search_path $dir"
  	  ;;
  	esac
  	case $host in
  	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
  	  case :$dllsearchpath: in
  	  *":$dir:"*) ;;
  	  *) dllsearchpath="$dllsearchpath:$dir";;
  	  esac
  	  ;;
  	esac
  	continue
  	;;
  
        -l*)
  	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
  	  case $host in
  	  *-*-cygwin* | *-*-pw32* | *-*-beos*)
  	    # These systems don't actually have a C or math library (as such)
  	    continue
  	    ;;
  	  *-*-mingw* | *-*-os2*)
  	    # These systems don't actually have a C library (as such)
  	    test "X$arg" = "X-lc" && continue
  	    ;;
  	  esac
  	fi
  	deplibs="$deplibs $arg"
  	continue
  	;;
  
        -module)
  	module=yes
  	continue
  	;;
  
        -no-fast-install)
  	fast_install=no
  	continue
  	;;
  
        -no-install)
  	case $host in
  	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
  	  # The PATH hackery in wrapper scripts is required on Windows
  	  # in order for the loader to find any dlls it needs.
  	  $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2
  	  $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2
  	  fast_install=no
  	  ;;
  	*) no_install=yes ;;
  	esac
  	continue
  	;;
  
        -no-undefined)
  	allow_undefined=no
  	continue
  	;;
  
        -o) prev=output ;;
  
        -release)
  	prev=release
  	continue
  	;;
  
        -rpath)
  	prev=rpath
  	continue
  	;;
  
        -R)
  	prev=xrpath
  	continue
  	;;
  
        -R*)
  	dir=`$echo "X$arg" | $Xsed -e 's/^-R//'`
  	# We need an absolute path.
  	case $dir in
  	[\\/]* | [A-Za-z]:[\\/]*) ;;
  	*)
  	  $echo "$modename: only absolute run-paths are allowed" 1>&2
  	  exit 1
  	  ;;
  	esac
  	case "$xrpath " in
  	*" $dir "*) ;;
  	*) xrpath="$xrpath $dir" ;;
  	esac
  	continue
  	;;
  
        -static)
  	# The effects of -static are defined in a previous loop.
  	# We used to do the same as -all-static on platforms that
  	# didn't have a PIC flag, but the assumption that the effects
  	# would be equivalent was wrong.  It would break on at least
  	# Digital Unix and AIX.
  	continue
  	;;
  
        -thread-safe)
  	thread_safe=yes
  	continue
  	;;
  
        -version-info)
  	prev=vinfo
  	continue
  	;;
  
        -Wc,*)
  	args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'`
  	arg=
  	IFS="${IFS= 	}"; save_ifs="$IFS"; IFS=','
  	for flag in $args; do
  	  IFS="$save_ifs"
  	  case $flag in
  	    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
  	    flag="\"$flag\""
  	    ;;
  	  esac
  	  arg="$arg $wl$flag"
  	  compiler_flags="$compiler_flags $flag"
  	done
  	IFS="$save_ifs"
  	arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
  	;;
  
        -Wl,*)
  	args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'`
  	arg=
  	IFS="${IFS= 	}"; save_ifs="$IFS"; IFS=','
  	for flag in $args; do
  	  IFS="$save_ifs"
  	  case $flag in
  	    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
  	    flag="\"$flag\""
  	    ;;
  	  esac
  	  arg="$arg $wl$flag"
  	  compiler_flags="$compiler_flags $wl$flag"
  	  linker_flags="$linker_flags $flag"
  	done
  	IFS="$save_ifs"
  	arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
  	;;
  
        -Xcompiler)
  	prev=xcompiler
  	continue
  	;;
  
        -Xlinker)
  	prev=xlinker
  	continue
  	;;
  
        # Some other compiler flag.
        -* | +*)
  	# Unknown arguments in both finalize_command and compile_command need
  	# to be aesthetically quoted because they are evaled later.
  	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
  	case $arg in
  	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
  	  arg="\"$arg\""
  	  ;;
  	esac
  	;;
  
        *.lo | *.$objext)
  	# A library or standard object.
  	if test "$prev" = dlfiles; then
  	  # This file was specified with -dlopen.
  	  if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
  	    dlfiles="$dlfiles $arg"
  	    prev=
  	    continue
  	  else
  	    # If libtool objects are unsupported, then we need to preload.
  	    prev=dlprefiles
  	  fi
  	fi
  
  	if test "$prev" = dlprefiles; then
  	  # Preload the old-style object.
  	  dlprefiles="$dlprefiles "`$echo "X$arg" | $Xsed -e "$lo2o"`
  	  prev=
  	else
  	  case $arg in
  	  *.lo) libobjs="$libobjs $arg" ;;
  	  *) objs="$objs $arg" ;;
  	  esac
  	fi
  	;;
  
        *.$libext)
  	# An archive.
  	deplibs="$deplibs $arg"
  	old_deplibs="$old_deplibs $arg"
  	continue
  	;;
  
        *.la)
  	# A libtool-controlled library.
  
  	if test "$prev" = dlfiles; then
  	  # This library was specified with -dlopen.
  	  dlfiles="$dlfiles $arg"
  	  prev=
  	elif test "$prev" = dlprefiles; then
  	  # The library was specified with -dlpreopen.
  	  dlprefiles="$dlprefiles $arg"
  	  prev=
  	else
  	  deplibs="$deplibs $arg"
  	fi
  	continue
  	;;
  
        # Some other compiler argument.
        *)
  	# Unknown arguments in both finalize_command and compile_command need
  	# to be aesthetically quoted because they are evaled later.
  	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
  	case $arg in
  	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
  	  arg="\"$arg\""
  	  ;;
  	esac
  	;;
        esac # arg
  
        # Now actually substitute the argument into the commands.
        if test -n "$arg"; then
  	compile_command="$compile_command $arg"
  	finalize_command="$finalize_command $arg"
        fi
      done # argument parsing loop
  
      if test -n "$prev"; then
        $echo "$modename: the \`$prevarg' option requires an argument" 1>&2
        $echo "$help" 1>&2
        exit 1
      fi
  
      if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
        eval arg=\"$export_dynamic_flag_spec\"
        compile_command="$compile_command $arg"
        finalize_command="$finalize_command $arg"
      fi
  
      # calculate the name of the file, without its directory
      outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
      libobjs_save="$libobjs"
  
      if test -n "$shlibpath_var"; then
        # get the directories listed in $shlibpath_var
        eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
      else
        shlib_search_path=
      fi
      eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
      eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
  
      output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
      if test "X$output_objdir" = "X$output"; then
        output_objdir="$objdir"
      else
        output_objdir="$output_objdir/$objdir"
      fi
      # Create the object directory.
      if test ! -d $output_objdir; then
        $show "$mkdir $output_objdir"
        $run $mkdir $output_objdir
        status=$?
        if test $status -ne 0 && test ! -d $output_objdir; then
  	exit $status
        fi
      fi
  
      # Determine the type of output
      case $output in
      "")
        $echo "$modename: you must specify an output file" 1>&2
        $echo "$help" 1>&2
        exit 1
        ;;
      *.$libext) linkmode=oldlib ;;
      *.lo | *.$objext) linkmode=obj ;;
      *.la) linkmode=lib ;;
      *) linkmode=prog ;; # Anything else should be a program.
      esac
  
      specialdeplibs=
      libs=
      # Find all interdependent deplibs by searching for libraries
      # that are linked more than once (e.g. -la -lb -la)
      for deplib in $deplibs; do
        case "$libs " in
        *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
        esac
        libs="$libs $deplib"
      done
      deplibs=
      newdependency_libs=
      newlib_search_path=
      need_relink=no # whether we're linking any uninstalled libtool libraries
      notinst_deplibs= # not-installed libtool libraries
      notinst_path= # paths that contain not-installed libtool libraries
      case $linkmode in
      lib)
  	passes="conv link"
  	for file in $dlfiles $dlprefiles; do
  	  case $file in
  	  *.la) ;;
  	  *)
  	    $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2
  	    exit 1
  	    ;;
  	  esac
  	done
  	;;
      prog)
  	compile_deplibs=
  	finalize_deplibs=
  	alldeplibs=no
  	newdlfiles=
  	newdlprefiles=
  	passes="conv scan dlopen dlpreopen link"
  	;;
      *)  passes="conv"
  	;;
      esac
      for pass in $passes; do
        if test $linkmode = prog; then
  	# Determine which files to process
  	case $pass in
  	dlopen)
  	  libs="$dlfiles"
  	  save_deplibs="$deplibs" # Collect dlpreopened libraries
  	  deplibs=
  	  ;;
  	dlpreopen) libs="$dlprefiles" ;;
  	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
  	esac
        fi
        for deplib in $libs; do
  	lib=
  	found=no
  	case $deplib in
  	-l*)
  	  if test $linkmode = oldlib && test $linkmode = obj; then
  	    $echo "$modename: warning: \`-l' is ignored for archives/objects: $deplib" 1>&2
  	    continue
  	  fi
  	  if test $pass = conv; then
  	    deplibs="$deplib $deplibs"
  	    continue
  	  fi
  	  name=`$echo "X$deplib" | $Xsed -e 's/^-l//'`
  	  for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do
  	    # Search the libtool library
  	    lib="$searchdir/lib${name}.la"
  	    if test -f "$lib"; then
  	      found=yes
  	      break
  	    fi
  	  done
  	  if test "$found" != yes; then
  	    # deplib doesn't seem to be a libtool library
  	    if test "$linkmode,$pass" = "prog,link"; then
  	      compile_deplibs="$deplib $compile_deplibs"
  	      finalize_deplibs="$deplib $finalize_deplibs"
  	    else
  	      deplibs="$deplib $deplibs"
  	      test $linkmode = lib && newdependency_libs="$deplib $newdependency_libs"
  	    fi
  	    continue
  	  fi
  	  ;; # -l
  	-L*)
  	  case $linkmode in
  	  lib)
  	    deplibs="$deplib $deplibs"
  	    test $pass = conv && continue
  	    newdependency_libs="$deplib $newdependency_libs"
  	    newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
  	    ;;
  	  prog)
  	    if test $pass = conv; then
  	      deplibs="$deplib $deplibs"
  	      continue
  	    fi
  	    if test $pass = scan; then
  	      deplibs="$deplib $deplibs"
  	      newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
  	    else
  	      compile_deplibs="$deplib $compile_deplibs"
  	      finalize_deplibs="$deplib $finalize_deplibs"
  	    fi
  	    ;;
  	  *)
  	    $echo "$modename: warning: \`-L' is ignored for archives/objects: $deplib" 1>&2
  	    ;;
  	  esac # linkmode
  	  continue
  	  ;; # -L
  	-R*)
  	  if test $pass = link; then
  	    dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
  	    # Make sure the xrpath contains only unique directories.
  	    case "$xrpath " in
  	    *" $dir "*) ;;
  	    *) xrpath="$xrpath $dir" ;;
  	    esac
  	  fi
  	  deplibs="$deplib $deplibs"
  	  continue
  	  ;;
  	*.la) lib="$deplib" ;;
  	*.$libext)
  	  if test $pass = conv; then
  	    deplibs="$deplib $deplibs"
  	    continue
  	  fi
  	  case $linkmode in
  	  lib)
  	    if test "$deplibs_check_method" != pass_all; then
  	      echo
  	      echo "*** Warning: This library needs some functionality provided by $deplib."
  	      echo "*** I have the capability to make that library automatically link in when"
  	      echo "*** you link to this library.  But I can only do this if you have a"
  	      echo "*** shared version of the library, which you do not appear to have."
  	    else
  	      echo
  	      echo "*** Warning: Linking the shared library $output against the"
  	      echo "*** static library $deplib is not portable!"
  	      deplibs="$deplib $deplibs"
  	    fi
  	    continue
  	    ;;
  	  prog)
  	    if test $pass != link; then
  	      deplibs="$deplib $deplibs"
  	    else
  	      compile_deplibs="$deplib $compile_deplibs"
  	      finalize_deplibs="$deplib $finalize_deplibs"
  	    fi
  	    continue
  	    ;;
  	  esac # linkmode
  	  ;; # *.$libext
  	*.lo | *.$objext)
  	  if test $pass = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
  	    # If there is no dlopen support or we're linking statically,
  	    # we need to preload.
  	    newdlprefiles="$newdlprefiles $deplib"
  	    compile_deplibs="$deplib $compile_deplibs"
  	    finalize_deplibs="$deplib $finalize_deplibs"
  	  else
  	    newdlfiles="$newdlfiles $deplib"
  	  fi
  	  continue
  	  ;;
  	%DEPLIBS%)
  	  alldeplibs=yes
  	  continue
  	  ;;
  	esac # case $deplib
  	if test $found = yes || test -f "$lib"; then :
  	else
  	  $echo "$modename: cannot find the library \`$lib'" 1>&2
  	  exit 1
  	fi
  
  	# Check to see that this really is a libtool archive.
  	if (sed -e '2q' $lib | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
  	else
  	  $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
  	  exit 1
  	fi
  
  	ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
  	test "X$ladir" = "X$lib" && ladir="."
  
  	dlname=
  	dlopen=
  	dlpreopen=
  	libdir=
  	library_names=
  	old_library=
  	# If the library was installed with an old release of libtool,
  	# it will not redefine variable installed.
  	installed=yes
  
  	# Read the .la file
  	case $lib in
  	*/* | *\\*) . $lib ;;
  	*) . ./$lib ;;
  	esac
  
  	if test "$linkmode,$pass" = "lib,link" ||
  	   test "$linkmode,$pass" = "prog,scan" ||
  	   { test $linkmode = oldlib && test $linkmode = obj; }; then
  	   # Add dl[pre]opened files of deplib
  	  test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
  	  test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
  	fi
  
  	if test $pass = conv; then
  	  # Only check for convenience libraries
  	  deplibs="$lib $deplibs"
  	  if test -z "$libdir"; then
  	    if test -z "$old_library"; then
  	      $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
  	      exit 1
  	    fi
  	    # It is a libtool convenience library, so add in its objects.
  	    convenience="$convenience $ladir/$objdir/$old_library"
  	    old_convenience="$old_convenience $ladir/$objdir/$old_library"
  	    tmp_libs=
  	    for deplib in $dependency_libs; do
  	      deplibs="$deplib $deplibs"
  	      case "$tmp_libs " in
  	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
  	      esac
  	      tmp_libs="$tmp_libs $deplib"
  	    done
  	  elif test $linkmode != prog && test $linkmode != lib; then
  	    $echo "$modename: \`$lib' is not a convenience library" 1>&2
  	    exit 1
  	  fi
  	  continue
  	fi # $pass = conv
  
  	# Get the name of the library we link against.
  	linklib=
  	for l in $old_library $library_names; do
  	  linklib="$l"
  	done
  	if test -z "$linklib"; then
  	  $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
  	  exit 1
  	fi
  
  	# This library was specified with -dlopen.
  	if test $pass = dlopen; then
  	  if test -z "$libdir"; then
  	    $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2
  	    exit 1
  	  fi
  	  if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
  	    # If there is no dlname, no dlopen support or we're linking
  	    # statically, we need to preload.
  	    dlprefiles="$dlprefiles $lib"
  	  else
  	    newdlfiles="$newdlfiles $lib"
  	  fi
  	  continue
  	fi # $pass = dlopen
  
  	# We need an absolute path.
  	case $ladir in
  	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
  	*)
  	  abs_ladir=`cd "$ladir" && pwd`
  	  if test -z "$abs_ladir"; then
  	    $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2
  	    $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
  	    abs_ladir="$ladir"
  	  fi
  	  ;;
  	esac
  	laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
  
  	# Find the relevant object directory and library name.
  	if test "X$installed" = Xyes; then
  	  if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
  	    $echo "$modename: warning: library \`$lib' was moved." 1>&2
  	    dir="$ladir"
  	    absdir="$abs_ladir"
  	    libdir="$abs_ladir"
  	  else
  	    dir="$libdir"
  	    absdir="$libdir"
  	  fi
  	else
  	  dir="$ladir/$objdir"
  	  absdir="$abs_ladir/$objdir"
  	  # Remove this search path later
  	  notinst_path="$notinst_path $abs_ladir"
  	fi # $installed = yes
  	name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
  
  	# This library was specified with -dlpreopen.
  	if test $pass = dlpreopen; then
  	  if test -z "$libdir"; then
  	    $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2
  	    exit 1
  	  fi
  	  # Prefer using a static library (so that no silly _DYNAMIC symbols
  	  # are required to link).
  	  if test -n "$old_library"; then
  	    newdlprefiles="$newdlprefiles $dir/$old_library"
  	  # Otherwise, use the dlname, so that lt_dlopen finds it.
  	  elif test -n "$dlname"; then
  	    newdlprefiles="$newdlprefiles $dir/$dlname"
  	  else
  	    newdlprefiles="$newdlprefiles $dir/$linklib"
  	  fi
  	fi # $pass = dlpreopen
  
  	if test -z "$libdir"; then
  	  # Link the convenience library
  	  if test $linkmode = lib; then
  	    deplibs="$dir/$old_library $deplibs"
  	  elif test "$linkmode,$pass" = "prog,link"; then
  	    compile_deplibs="$dir/$old_library $compile_deplibs"
  	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
  	  else
  	    deplibs="$lib $deplibs"
  	  fi
  	  continue
  	fi
  
  	if test $linkmode = prog && test $pass != link; then
  	  newlib_search_path="$newlib_search_path $ladir"
  	  deplibs="$lib $deplibs"
  
  	  linkalldeplibs=no
  	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
  	     test "$build_libtool_libs" = no; then
  	    linkalldeplibs=yes
  	  fi
  
  	  tmp_libs=
  	  for deplib in $dependency_libs; do
  	    case $deplib in
  	    -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test
  	    esac
  	    # Need to link against all dependency_libs?
  	    if test $linkalldeplibs = yes; then
  	      deplibs="$deplib $deplibs"
  	    else
  	      # Need to hardcode shared library paths
  	      # or/and link against static libraries
  	      newdependency_libs="$deplib $newdependency_libs"
  	    fi
  	    case "$tmp_libs " in
  	    *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
  	    esac
  	    tmp_libs="$tmp_libs $deplib"
  	  done # for deplib
  	  continue
  	fi # $linkmode = prog...
  
  	link_static=no # Whether the deplib will be linked statically
  	if test -n "$library_names" &&
  	   { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
  	  # Link against this shared library
  
  	  if test "$linkmode,$pass" = "prog,link" ||
  	   { test $linkmode = lib && test $hardcode_into_libs = yes; }; then
  	    # Hardcode the library path.
  	    # Skip directories that are in the system default run-time
  	    # search path.
  	    case " $sys_lib_dlsearch_path " in
  	    *" $absdir "*) ;;
  	    *)
  	      case "$compile_rpath " in
  	      *" $absdir "*) ;;
  	      *) compile_rpath="$compile_rpath $absdir"
  	      esac
  	      ;;
  	    esac
  	    case " $sys_lib_dlsearch_path " in
  	    *" $libdir "*) ;;
  	    *)
  	      case "$finalize_rpath " in
  	      *" $libdir "*) ;;
  	      *) finalize_rpath="$finalize_rpath $libdir"
  	      esac
  	      ;;
  	    esac
  	    if test $linkmode = prog; then
  	      # We need to hardcode the library path
  	      if test -n "$shlibpath_var"; then
  		# Make sure the rpath contains only unique directories.
  		case "$temp_rpath " in
  		*" $dir "*) ;;
  		*" $absdir "*) ;;
  		*) temp_rpath="$temp_rpath $dir" ;;
  		esac
  	      fi
  	    fi
  	  fi # $linkmode,$pass = prog,link...
  
  	  if test "$alldeplibs" = yes &&
  	     { test "$deplibs_check_method" = pass_all ||
  	       { test "$build_libtool_libs" = yes &&
  		 test -n "$library_names"; }; }; then
  	    # We only need to search for static libraries
  	    continue
  	  fi
  
  	  if test "$installed" = no; then
  	    notinst_deplibs="$notinst_deplibs $lib"
  	    need_relink=yes
  	  fi
  
  	  if test -n "$old_archive_from_expsyms_cmds"; then
  	    # figure out the soname
  	    set dummy $library_names
  	    realname="$2"
  	    shift; shift
  	    libname=`eval \\$echo \"$libname_spec\"`
  	    # use dlname if we got it. it's perfectly good, no?
  	    if test -n "$dlname"; then
  	      soname="$dlname"
  	    elif test -n "$soname_spec"; then
  	      # bleh windows
  	      case $host in
  	      *cygwin*)
  		major=`expr $current - $age`
  		versuffix="-$major"
  		;;
  	      esac
  	      eval soname=\"$soname_spec\"
  	    else
  	      soname="$realname"
  	    fi
  
  	    # Make a new name for the extract_expsyms_cmds to use
  	    soroot="$soname"
  	    soname=`echo $soroot | sed -e 's/^.*\///'`
  	    newlib="libimp-`echo $soname | sed 's/^lib//;s/\.dll$//'`.a"
  
  	    # If the library has no export list, then create one now
  	    if test -f "$output_objdir/$soname-def"; then :
  	    else
  	      $show "extracting exported symbol list from \`$soname'"
  	      IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
  	      eval cmds=\"$extract_expsyms_cmds\"
  	      for cmd in $cmds; do
  		IFS="$save_ifs"
  		$show "$cmd"
  		$run eval "$cmd" || exit $?
  	      done
  	      IFS="$save_ifs"
  	    fi
  
  	    # Create $newlib
  	    if test -f "$output_objdir/$newlib"; then :; else
  	      $show "generating import library for \`$soname'"
  	      IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
  	      eval cmds=\"$old_archive_from_expsyms_cmds\"
  	      for cmd in $cmds; do
  		IFS="$save_ifs"
  		$show "$cmd"
  		$run eval "$cmd" || exit $?
  	      done
  	      IFS="$save_ifs"
  	    fi
  	    # make sure the library variables are pointing to the new library
  	    dir=$output_objdir
  	    linklib=$newlib
  	  fi # test -n $old_archive_from_expsyms_cmds
  
  	  if test $linkmode = prog || test "$mode" != relink; then
  	    add_shlibpath=
  	    add_dir=
  	    add=
  	    lib_linked=yes
  	    case $hardcode_action in
  	    immediate | unsupported)
  	      if test "$hardcode_direct" = no; then
  		add="$dir/$linklib"
  	      elif test "$hardcode_minus_L" = no; then
  		case $host in
  		*-*-sunos*) add_shlibpath="$dir" ;;
  		esac
  		add_dir="-L$dir"
  		add="-l$name"
  	      elif test "$hardcode_shlibpath_var" = no; then
  		add_shlibpath="$dir"
  		add="-l$name"
  	      else
  		lib_linked=no
  	      fi
  	      ;;
  	    relink)
  	      if test "$hardcode_direct" = yes; then
  		add="$dir/$linklib"
  	      elif test "$hardcode_minus_L" = yes; then
  		add_dir="-L$dir"
  		add="-l$name"
  	      elif test "$hardcode_shlibpath_var" = yes; then
  		add_shlibpath="$dir"
  		add="-l$name"
  	      else
  		lib_linked=no
  	      fi
  	      ;;
  	    *) lib_linked=no ;;
  	    esac
  
  	    if test "$lib_linked" != yes; then
  	      $echo "$modename: configuration error: unsupported hardcode properties"
  	      exit 1
  	    fi
  
  	    if test -n "$add_shlibpath"; then
  	      case :$compile_shlibpath: in
  	      *":$add_shlibpath:"*) ;;
  	      *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
  	      esac
  	    fi
  	    if test $linkmode = prog; then
  	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
  	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
  	    else
  	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
  	      test -n "$add" && deplibs="$add $deplibs"
  	      if test "$hardcode_direct" != yes && \
  		 test "$hardcode_minus_L" != yes && \
  		 test "$hardcode_shlibpath_var" = yes; then
  		case :$finalize_shlibpath: in
  		*":$libdir:"*) ;;
  		*) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
  		esac
  	      fi
  	    fi
  	  fi
  
  	  if test $linkmode = prog || test "$mode" = relink; then
  	    add_shlibpath=
  	    add_dir=
  	    add=
  	    # Finalize command for both is simple: just hardcode it.
  	    if test "$hardcode_direct" = yes; then
  	      add="$libdir/$linklib"
  	    elif test "$hardcode_minus_L" = yes; then
  	      add_dir="-L$libdir"
  	      add="-l$name"
  	    elif test "$hardcode_shlibpath_var" = yes; then
  	      case :$finalize_shlibpath: in
  	      *":$libdir:"*) ;;
  	      *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
  	      esac
  	      add="-l$name"
  	    else
  	      # We cannot seem to hardcode it, guess we'll fake it.
  	      add_dir="-L$libdir"
  	      add="-l$name"
  	    fi
  
  	    if test $linkmode = prog; then
  	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
  	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
  	    else
  	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
  	      test -n "$add" && deplibs="$add $deplibs"
  	    fi
  	  fi
  	elif test $linkmode = prog; then
  	  if test "$alldeplibs" = yes &&
  	     { test "$deplibs_check_method" = pass_all ||
  	       { test "$build_libtool_libs" = yes &&
  		 test -n "$library_names"; }; }; then
  	    # We only need to search for static libraries
  	    continue
  	  fi
  
  	  # Try to link the static library
  	  # Here we assume that one of hardcode_direct or hardcode_minus_L
  	  # is not unsupported.  This is valid on all known static and
  	  # shared platforms.
  	  if test "$hardcode_direct" != unsupported; then
  	    test -n "$old_library" && linklib="$old_library"
  	    compile_deplibs="$dir/$linklib $compile_deplibs"
  	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
  	  else
  	    compile_deplibs="-l$name -L$dir $compile_deplibs"
  	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
  	  fi
  	elif test "$build_libtool_libs" = yes; then
  	  # Not a shared library
  	  if test "$deplibs_check_method" != pass_all; then
  	    # We're trying link a shared library against a static one
  	    # but the system doesn't support it.
  
  	    # Just print a warning and add the library to dependency_libs so
  	    # that the program can be linked against the static library.
  	    echo
  	    echo "*** Warning: This library needs some functionality provided by $lib."
  	    echo "*** I have the capability to make that library automatically link in when"
  	    echo "*** you link to this library.  But I can only do this if you have a"
  	    echo "*** shared version of the library, which you do not appear to have."
  	    if test "$module" = yes; then
  	      echo "*** Therefore, libtool will create a static module, that should work "
  	      echo "*** as long as the dlopening application is linked with the -dlopen flag."
  	      if test -z "$global_symbol_pipe"; then
  	        echo
  	        echo "*** However, this would only work if libtool was able to extract symbol"
  	        echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
  	        echo "*** not find such a program.  So, this module is probably useless."
  	        echo "*** \`nm' from GNU binutils and a full rebuild may help."
  	      fi
  	      if test "$build_old_libs" = no; then
  	        build_libtool_libs=module
  	        build_old_libs=yes
  	      else
  	        build_libtool_libs=no
  	      fi
  	    fi
  	  else
  	    convenience="$convenience $dir/$old_library"
  	    old_convenience="$old_convenience $dir/$old_library"
  	    deplibs="$dir/$old_library $deplibs"
  	    link_static=yes
  	  fi
  	fi # link shared/static library?
  
  	if test $linkmode = lib; then
  	  if test -n "$dependency_libs" &&
  	     { test $hardcode_into_libs != yes || test $build_old_libs = yes ||
  	       test $link_static = yes; }; then
  	    # Extract -R from dependency_libs
  	    temp_deplibs=
  	    for libdir in $dependency_libs; do
  	      case $libdir in
  	      -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'`
  		   case " $xrpath " in
  		   *" $temp_xrpath "*) ;;
  		   *) xrpath="$xrpath $temp_xrpath";;
  		   esac;;
  	      *) temp_deplibs="$temp_deplibs $libdir";;
  	      esac
  	    done
  	    dependency_libs="$temp_deplibs"
  	  fi
  
  	  newlib_search_path="$newlib_search_path $absdir"
  	  # Link against this library
  	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
  	  # ... and its dependency_libs
  	  tmp_libs=
  	  for deplib in $dependency_libs; do
  	    newdependency_libs="$deplib $newdependency_libs"
  	    case "$tmp_libs " in
  	    *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
  	    esac
  	    tmp_libs="$tmp_libs $deplib"
  	  done
  
  	  if test $link_all_deplibs != no; then
  	    # Add the search paths of all dependency libraries
  	    for deplib in $dependency_libs; do
  	      case $deplib in
  	      -L*) path="$deplib" ;;
  	      *.la)
  		dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'`
  		test "X$dir" = "X$deplib" && dir="."
  		# We need an absolute path.
  		case $dir in
  		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
  		*)
  		  absdir=`cd "$dir" && pwd`
  		  if test -z "$absdir"; then
  		    $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
  		    absdir="$dir"
  		  fi
  		  ;;
  		esac
  		if grep "^installed=no" $deplib > /dev/null; then
  		  path="-L$absdir/$objdir"
  		else
  		  eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
  		  if test -z "$libdir"; then
  		    $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
  		    exit 1
  		  fi
  		  if test "$absdir" != "$libdir"; then
  		    $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2
  		  fi
  		  path="-L$absdir"
  		fi
  		;;
  	      *) continue ;;
  	      esac
  	      case " $deplibs " in
  	      *" $path "*) ;;
  	      *) deplibs="$deplibs $path" ;;
  	      esac
  	    done
  	  fi # link_all_deplibs != no
  	fi # linkmode = lib
        done # for deplib in $libs
        if test $pass = dlpreopen; then
  	# Link the dlpreopened libraries before other libraries
  	for deplib in $save_deplibs; do
  	  deplibs="$deplib $deplibs"
  	done
        fi
        if test $pass != dlopen; then
  	test $pass != scan && dependency_libs="$newdependency_libs"
  	if test $pass != conv; then
  	  # Make sure lib_search_path contains only unique directories.
  	  lib_search_path=
  	  for dir in $newlib_search_path; do
  	    case "$lib_search_path " in
  	    *" $dir "*) ;;
  	    *) lib_search_path="$lib_search_path $dir" ;;
  	    esac
  	  done
  	  newlib_search_path=
  	fi
  
  	if test "$linkmode,$pass" != "prog,link"; then
  	  vars="deplibs"
  	else
  	  vars="compile_deplibs finalize_deplibs"
  	fi
  	for var in $vars dependency_libs; do
  	  # Add libraries to $var in reverse order
  	  eval tmp_libs=\"\$$var\"
  	  new_libs=
  	  for deplib in $tmp_libs; do
  	    case $deplib in
  	    -L*) new_libs="$deplib $new_libs" ;;
  	    *)
  	      case " $specialdeplibs " in
  	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
  	      *)
  		case " $new_libs " in
  		*" $deplib "*) ;;
  		*) new_libs="$deplib $new_libs" ;;
  		esac
  		;;
  	      esac
  	      ;;
  	    esac
  	  done
  	  tmp_libs=
  	  for deplib in $new_libs; do
  	    case $deplib in
  	    -L*)
  	      case " $tmp_libs " in
  	      *" $deplib "*) ;;
  	      *) tmp_libs="$tmp_libs $deplib" ;;
  	      esac
  	      ;;
  	    *) tmp_libs="$tmp_libs $deplib" ;;
  	    esac
  	  done
  	  eval $var=\"$tmp_libs\"
  	done # for var
        fi
        if test "$pass" = "conv" &&
         { test "$linkmode" = "lib" || test "$linkmode" = "prog"; }; then
  	libs="$deplibs" # reset libs
  	deplibs=
        fi
      done # for pass
      if test $linkmode = prog; then
        dlfiles="$newdlfiles"
        dlprefiles="$newdlprefiles"
      fi
  
      case $linkmode in
      oldlib)
        if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
  	$echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2
        fi
  
        if test -n "$rpath"; then
  	$echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2
        fi
  
        if test -n "$xrpath"; then
  	$echo "$modename: warning: \`-R' is ignored for archives" 1>&2
        fi
  
        if test -n "$vinfo"; then
  	$echo "$modename: warning: \`-version-info' is ignored for archives" 1>&2
        fi
  
        if test -n "$release"; then
  	$echo "$modename: warning: \`-release' is ignored for archives" 1>&2
        fi
  
        if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
  	$echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2
        fi
  
        # Now set the variables for building old libraries.
        build_libtool_libs=no
        oldlibs="$output"
        objs="$objs$old_deplibs"
        ;;
  
      lib)
        # Make sure we only generate libraries of the form `libNAME.la'.
        case $outputname in
        lib*)
  	name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
  	eval libname=\"$libname_spec\"
  	;;
        *)
  	if test "$module" = no; then
  	  $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2
  	  $echo "$help" 1>&2
  	  exit 1
  	fi
  	if test "$need_lib_prefix" != no; then
  	  # Add the "lib" prefix for modules if required
  	  name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
  	  eval libname=\"$libname_spec\"
  	else
  	  libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
  	fi
  	;;
        esac
  
        if test -n "$objs"; then
  	if test "$deplibs_check_method" != pass_all; then
  	  $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1
  	  exit 1
  	else
  	  echo
  	  echo "*** Warning: Linking the shared library $output against the non-libtool"
  	  echo "*** objects $objs is not portable!"
  	  libobjs="$libobjs $objs"
  	fi
        fi
  
        if test "$dlself" != no; then
  	$echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2
        fi
  
        set dummy $rpath
        if test $# -gt 2; then
  	$echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2
        fi
        install_libdir="$2"
  
        oldlibs=
        if test -z "$rpath"; then
  	if test "$build_libtool_libs" = yes; then
  	  # Building a libtool convenience library.
  	  libext=al
  	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
  	  build_libtool_libs=convenience
  	  build_old_libs=yes
  	fi
  
  	if test -n "$vinfo"; then
  	  $echo "$modename: warning: \`-version-info' is ignored for convenience libraries" 1>&2
  	fi
  
  	if test -n "$release"; then
  	  $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2
  	fi
        else
  
  	# Parse the version information argument.
  	IFS="${IFS= 	}"; save_ifs="$IFS"; IFS=':'
  	set dummy $vinfo 0 0 0
  	IFS="$save_ifs"
  
  	if test -n "$8"; then
  	  $echo "$modename: too many parameters to \`-version-info'" 1>&2
  	  $echo "$help" 1>&2
  	  exit 1
  	fi
  
  	current="$2"
  	revision="$3"
  	age="$4"
  
  	# Check that each of the things are valid numbers.
  	case $current in
  	0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
  	*)
  	  $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2
  	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
  	  exit 1
  	  ;;
  	esac
  
  	case $revision in
  	0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
  	*)
  	  $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2
  	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
  	  exit 1
  	  ;;
  	esac
  
  	case $age in
  	0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
  	*)
  	  $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2
  	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
  	  exit 1
  	  ;;
  	esac
  
  	if test $age -gt $current; then
  	  $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2
  	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
  	  exit 1
  	fi
  
  	# Calculate the version variables.
  	major=
  	versuffix=
  	verstring=
  	case $version_type in
  	none) ;;
  
  	darwin)
  	  # Like Linux, but with the current version available in
  	  # verstring for coding it into the library header
  	  major=.`expr $current - $age`
  	  versuffix="$major.$age.$revision"
  	  # Darwin ld doesn't like 0 for these options...
  	  minor_current=`expr $current + 1`
  	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
  	  ;;
  
  	freebsd-aout)
  	  major=".$current"
  	  versuffix=".$current.$revision";
  	  ;;
  
  	freebsd-elf)
  	  major=".$current"
  	  versuffix=".$current";
  	  ;;
  
  	irix)
  	  major=`expr $current - $age + 1`
  	  verstring="sgi$major.$revision"
  
  	  # Add in all the interfaces that we are compatible with.
  	  loop=$revision
  	  while test $loop != 0; do
  	    iface=`expr $revision - $loop`
  	    loop=`expr $loop - 1`
  	    verstring="sgi$major.$iface:$verstring"
  	  done
  
  	  # Before this point, $major must not contain `.'.
  	  major=.$major
  	  versuffix="$major.$revision"
  	  ;;
  
  	linux)
  	  major=.`expr $current - $age`
  	  versuffix="$major.$age.$revision"
  	  ;;
  
  	osf)
  	  major=`expr $current - $age`
  	  versuffix=".$current.$age.$revision"
  	  verstring="$current.$age.$revision"
  
  	  # Add in all the interfaces that we are compatible with.
  	  loop=$age
  	  while test $loop != 0; do
  	    iface=`expr $current - $loop`
  	    loop=`expr $loop - 1`
  	    verstring="$verstring:${iface}.0"
  	  done
  
  	  # Make executables depend on our current version.
  	  verstring="$verstring:${current}.0"
  	  ;;
  
  	sunos)
  	  major=".$current"
  	  versuffix=".$current.$revision"
  	  ;;
  
  	windows)
  	  # Use '-' rather than '.', since we only want one
  	  # extension on DOS 8.3 filesystems.
  	  major=`expr $current - $age`
  	  versuffix="-$major"
  	  ;;
  
  	*)
  	  $echo "$modename: unknown library version type \`$version_type'" 1>&2
  	  echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
  	  exit 1
  	  ;;
  	esac
  
  	# Clear the version info if we defaulted, and they specified a release.
  	if test -z "$vinfo" && test -n "$release"; then
  	  major=
  	  verstring="0.0"
  	  if test "$need_version" = no; then
  	    versuffix=
  	  else
  	    versuffix=".0.0"
  	  fi
  	fi
  
  	# Remove version info from name if versioning should be avoided
  	if test "$avoid_version" = yes && test "$need_version" = no; then
  	  major=
  	  versuffix=
  	  verstring=""
  	fi
  
  	# Check to see if the archive will have undefined symbols.
  	if test "$allow_undefined" = yes; then
  	  if test "$allow_undefined_flag" = unsupported; then
  	    $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2
  	    build_libtool_libs=no
  	    build_old_libs=yes
  	  fi
  	else
  	  # Don't allow undefined symbols.
  	  allow_undefined_flag="$no_undefined_flag"
  	fi
        fi
  
        if test "$mode" != relink; then
  	# Remove our outputs.
  	$show "${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*"
  	$run ${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*
        fi
  
        # Now set the variables for building old libraries.
        if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
  	oldlibs="$oldlibs $output_objdir/$libname.$libext"
  
  	# Transform .lo files to .o files.
  	oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
        fi
  
        # Eliminate all temporary directories.
        for path in $notinst_path; do
  	lib_search_path=`echo "$lib_search_path " | sed -e 's% $path % %g'`
  	deplibs=`echo "$deplibs " | sed -e 's% -L$path % %g'`
  	dependency_libs=`echo "$dependency_libs " | sed -e 's% -L$path % %g'`
        done
  
        if test -n "$xrpath"; then
  	# If the user specified any rpath flags, then add them.
  	temp_xrpath=
  	for libdir in $xrpath; do
  	  temp_xrpath="$temp_xrpath -R$libdir"
  	  case "$finalize_rpath " in
  	  *" $libdir "*) ;;
  	  *) finalize_rpath="$finalize_rpath $libdir" ;;
  	  esac
  	done
  	if test $hardcode_into_libs != yes || test $build_old_libs = yes; then
  	  dependency_libs="$temp_xrpath $dependency_libs"
  	fi
        fi
  
        # Make sure dlfiles contains only unique files that won't be dlpreopened
        old_dlfiles="$dlfiles"
        dlfiles=
        for lib in $old_dlfiles; do
  	case " $dlprefiles $dlfiles " in
  	*" $lib "*) ;;
  	*) dlfiles="$dlfiles $lib" ;;
  	esac
        done
  
        # Make sure dlprefiles contains only unique files
        old_dlprefiles="$dlprefiles"
        dlprefiles=
        for lib in $old_dlprefiles; do
  	case "$dlprefiles " in
  	*" $lib "*) ;;
  	*) dlprefiles="$dlprefiles $lib" ;;
  	esac
        done
  
        if test "$build_libtool_libs" = yes; then
  	if test -n "$rpath"; then
  	  case $host in
  	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*)
  	    # these systems don't actually have a c library (as such)!
  	    ;;
  	  *-*-rhapsody* | *-*-darwin1.[012])
  	    # Rhapsody C library is in the System framework
  	    deplibs="$deplibs -framework System"
  	    ;;
  	  *-*-netbsd*)
  	    # Don't link with libc until the a.out ld.so is fixed.
  	    ;;
  	  *)
  	    # Add libc to deplibs on all other systems if necessary.
  	    if test $build_libtool_need_lc = "yes"; then
  	      deplibs="$deplibs -lc"
  	    fi
  	    ;;
  	  esac
  	fi
  
  	# Transform deplibs into only deplibs that can be linked in shared.
  	name_save=$name
  	libname_save=$libname
  	release_save=$release
  	versuffix_save=$versuffix
  	major_save=$major
  	# I'm not sure if I'm treating the release correctly.  I think
  	# release should show up in the -l (ie -lgmp5) so we don't want to
  	# add it in twice.  Is that correct?
  	release=""
  	versuffix=""
  	major=""
  	newdeplibs=
  	droppeddeps=no
  	case $deplibs_check_method in
  	pass_all)
  	  # Don't check for shared/static.  Everything works.
  	  # This might be a little naive.  We might want to check
  	  # whether the library exists or not.  But this is on
  	  # osf3 & osf4 and I'm not really sure... Just
  	  # implementing what was already the behaviour.
  	  newdeplibs=$deplibs
  	  ;;
  	test_compile)
  	  # This code stresses the "libraries are programs" paradigm to its
  	  # limits. Maybe even breaks it.  We compile a program, linking it
  	  # against the deplibs as a proxy for the library.  Then we can check
  	  # whether they linked in statically or dynamically with ldd.
  	  $rm conftest.c
  	  cat > conftest.c <<EOF
  	  int main() { return 0; }
  EOF
  	  $rm conftest
  	  $CC -o conftest conftest.c $deplibs
  	  if test $? -eq 0 ; then
  	    ldd_output=`ldd conftest`
  	    for i in $deplibs; do
  	      name="`expr $i : '-l\(.*\)'`"
  	      # If $name is empty we are operating on a -L argument.
  	      if test -n "$name" && test "$name" != "0"; then
  		libname=`eval \\$echo \"$libname_spec\"`
  		deplib_matches=`eval \\$echo \"$library_names_spec\"`
  		set dummy $deplib_matches
  		deplib_match=$2
  		if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
  		  newdeplibs="$newdeplibs $i"
  		else
  		  droppeddeps=yes
  		  echo
  		  echo "*** Warning: This library needs some functionality provided by $i."
  		  echo "*** I have the capability to make that library automatically link in when"
  		  echo "*** you link to this library.  But I can only do this if you have a"
  		  echo "*** shared version of the library, which you do not appear to have."
  		fi
  	      else
  		newdeplibs="$newdeplibs $i"
  	      fi
  	    done
  	  else
  	    # Error occured in the first compile.  Let's try to salvage the situation:
  	    # Compile a seperate program for each library.
  	    for i in $deplibs; do
  	      name="`expr $i : '-l\(.*\)'`"
  	     # If $name is empty we are operating on a -L argument.
  	      if test -n "$name" && test "$name" != "0"; then
  		$rm conftest
  		$CC -o conftest conftest.c $i
  		# Did it work?
  		if test $? -eq 0 ; then
  		  ldd_output=`ldd conftest`
  		  libname=`eval \\$echo \"$libname_spec\"`
  		  deplib_matches=`eval \\$echo \"$library_names_spec\"`
  		  set dummy $deplib_matches
  		  deplib_match=$2
  		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
  		    newdeplibs="$newdeplibs $i"
  		  else
  		    droppeddeps=yes
  		    echo
  		    echo "*** Warning: This library needs some functionality provided by $i."
  		    echo "*** I have the capability to make that library automatically link in when"
  		    echo "*** you link to this library.  But I can only do this if you have a"
  		    echo "*** shared version of the library, which you do not appear to have."
  		  fi
  		else
  		  droppeddeps=yes
  		  echo
  		  echo "*** Warning!  Library $i is needed by this library but I was not able to"
  		  echo "***  make it link in!  You will probably need to install it or some"
  		  echo "*** library that it depends on before this library will be fully"
  		  echo "*** functional.  Installing it before continuing would be even better."
  		fi
  	      else
  		newdeplibs="$newdeplibs $i"
  	      fi
  	    done
  	  fi
  	  ;;
  	file_magic*)
  	  set dummy $deplibs_check_method
  	  file_magic_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
  	  for a_deplib in $deplibs; do
  	    name="`expr $a_deplib : '-l\(.*\)'`"
  	    # If $name is empty we are operating on a -L argument.
  	    if test -n "$name" && test "$name" != "0"; then
  	      libname=`eval \\$echo \"$libname_spec\"`
  	      for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
  		    potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
  		    for potent_lib in $potential_libs; do
  		      # Follow soft links.
  		      if ls -lLd "$potent_lib" 2>/dev/null \
  			 | grep " -> " >/dev/null; then
  			continue
  		      fi
  		      # The statement above tries to avoid entering an
  		      # endless loop below, in case of cyclic links.
  		      # We might still enter an endless loop, since a link
  		      # loop can be closed while we follow links,
  		      # but so what?
  		      potlib="$potent_lib"
  		      while test -h "$potlib" 2>/dev/null; do
  			potliblink=`ls -ld $potlib | sed 's/.* -> //'`
  			case $potliblink in
  			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
  			*) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
  			esac
  		      done
  		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \
  			 | sed 10q \
  			 | egrep "$file_magic_regex" > /dev/null; then
  			newdeplibs="$newdeplibs $a_deplib"
  			a_deplib=""
  			break 2
  		      fi
  		    done
  	      done
  	      if test -n "$a_deplib" ; then
  		droppeddeps=yes
  		echo
  		echo "*** Warning: This library needs some functionality provided by $a_deplib."
  		echo "*** I have the capability to make that library automatically link in when"
  		echo "*** you link to this library.  But I can only do this if you have a"
  		echo "*** shared version of the library, which you do not appear to have."
  	      fi
  	    else
  	      # Add a -L argument.
  	      newdeplibs="$newdeplibs $a_deplib"
  	    fi
  	  done # Gone through all deplibs.
  	  ;;
  	match_pattern*)
  	  set dummy $deplibs_check_method
  	  match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
  	  for a_deplib in $deplibs; do
  	    name="`expr $a_deplib : '-l\(.*\)'`"
  	    # If $name is empty we are operating on a -L argument.
  	    if test -n "$name" && test "$name" != "0"; then
  	      libname=`eval \\$echo \"$libname_spec\"`
  	      for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
  		potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
  		for potent_lib in $potential_libs; do
  		  if eval echo \"$potent_lib\" 2>/dev/null \
  		      | sed 10q \
  		      | egrep "$match_pattern_regex" > /dev/null; then
  		    newdeplibs="$newdeplibs $a_deplib"
  		    a_deplib=""
  		    break 2
  		  fi
  		done
  	      done
  	      if test -n "$a_deplib" ; then
  		droppeddeps=yes
  		echo
  		echo "*** Warning: This library needs some functionality provided by $a_deplib."
  		echo "*** I have the capability to make that library automatically link in when"
  		echo "*** you link to this library.  But I can only do this if you have a"
  		echo "*** shared version of the library, which you do not appear to have."
  	      fi
  	    else
  	      # Add a -L argument.
  	      newdeplibs="$newdeplibs $a_deplib"
  	    fi
  	  done # Gone through all deplibs.
  	  ;;
  	none | unknown | *)
  	  newdeplibs=""
  	  if $echo "X $deplibs" | $Xsed -e 's/ -lc$//' \
  	       -e 's/ -[LR][^ ]*//g' -e 's/[ 	]//g' |
  	     grep . >/dev/null; then
  	    echo
  	    if test "X$deplibs_check_method" = "Xnone"; then
  	      echo "*** Warning: inter-library dependencies are not supported in this platform."
  	    else
  	      echo "*** Warning: inter-library dependencies are not known to be supported."
  	    fi
  	    echo "*** All declared inter-library dependencies are being dropped."
  	    droppeddeps=yes
  	  fi
  	  ;;
  	esac
  	versuffix=$versuffix_save
  	major=$major_save
  	release=$release_save
  	libname=$libname_save
  	name=$name_save
  
  	case $host in
  	*-*-rhapsody* | *-*-darwin1.[012])
  	  # On Rhapsody replace the C library is the System framework
  	  newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'`
  	  ;;
  	esac
  
  	if test "$droppeddeps" = yes; then
  	  if test "$module" = yes; then
  	    echo
  	    echo "*** Warning: libtool could not satisfy all declared inter-library"
  	    echo "*** dependencies of module $libname.  Therefore, libtool will create"
  	    echo "*** a static module, that should work as long as the dlopening"
  	    echo "*** application is linked with the -dlopen flag."
  	    if test -z "$global_symbol_pipe"; then
  	      echo
  	      echo "*** However, this would only work if libtool was able to extract symbol"
  	      echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
  	      echo "*** not find such a program.  So, this module is probably useless."
  	      echo "*** \`nm' from GNU binutils and a full rebuild may help."
  	    fi
  	    if test "$build_old_libs" = no; then
  	      oldlibs="$output_objdir/$libname.$libext"
  	      build_libtool_libs=module
  	      build_old_libs=yes
  	    else
  	      build_libtool_libs=no
  	    fi
  	  else
  	    echo "*** The inter-library dependencies that have been dropped here will be"
  	    echo "*** automatically added whenever a program is linked with this library"
  	    echo "*** or is declared to -dlopen it."
  
  	    if test $allow_undefined = no; then
  	      echo
  	      echo "*** Since this library must not contain undefined symbols,"
  	      echo "*** because either the platform does not support them or"
  	      echo "*** it was explicitly requested with -no-undefined,"
  	      echo "*** libtool will only create a static version of it."
  	      if test "$build_old_libs" = no; then
  		oldlibs="$output_objdir/$libname.$libext"
  		build_libtool_libs=module
  		build_old_libs=yes
  	      else
  		build_libtool_libs=no
  	      fi
  	    fi
  	  fi
  	fi
  	# Done checking deplibs!
  	deplibs=$newdeplibs
        fi
  
        # All the library-specific variables (install_libdir is set above).
        library_names=
        old_library=
        dlname=
  
        # Test again, we may have decided not to build it any more
        if test "$build_libtool_libs" = yes; then
  	if test $hardcode_into_libs = yes; then
  	  # Hardcode the library paths
  	  hardcode_libdirs=
  	  dep_rpath=
  	  rpath="$finalize_rpath"
  	  test "$mode" != relink && rpath="$compile_rpath$rpath"
  	  for libdir in $rpath; do
  	    if test -n "$hardcode_libdir_flag_spec"; then
  	      if test -n "$hardcode_libdir_separator"; then
  		if test -z "$hardcode_libdirs"; then
  		  hardcode_libdirs="$libdir"
  		else
  		  # Just accumulate the unique libdirs.
  		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
  		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
  		    ;;
  		  *)
  		    hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
  		    ;;
  		  esac
  		fi
  	      else
  		eval flag=\"$hardcode_libdir_flag_spec\"
  		dep_rpath="$dep_rpath $flag"
  	      fi
  	    elif test -n "$runpath_var"; then
  	      case "$perm_rpath " in
  	      *" $libdir "*) ;;
  	      *) perm_rpath="$perm_rpath $libdir" ;;
  	      esac
  	    fi
  	  done
  	  # Substitute the hardcoded libdirs into the rpath.
  	  if test -n "$hardcode_libdir_separator" &&
  	     test -n "$hardcode_libdirs"; then
  	    libdir="$hardcode_libdirs"
  	    eval dep_rpath=\"$hardcode_libdir_flag_spec\"
  	  fi
  	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
  	    # We should set the runpath_var.
  	    rpath=
  	    for dir in $perm_rpath; do
  	      rpath="$rpath$dir:"
  	    done
  	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
  	  fi
  	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
  	fi
  
  	shlibpath="$finalize_shlibpath"
  	test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
  	if test -n "$shlibpath"; then
  	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
  	fi
  
  	# Get the real and link names of the library.
  	eval library_names=\"$library_names_spec\"
  	set dummy $library_names
  	realname="$2"
  	shift; shift
  
  	if test -n "$soname_spec"; then
  	  eval soname=\"$soname_spec\"
  	else
  	  soname="$realname"
  	fi
  	test -z "$dlname" && dlname=$soname
  
  	lib="$output_objdir/$realname"
  	for link
  	do
  	  linknames="$linknames $link"
  	done
  
  	# Ensure that we have .o objects for linkers which dislike .lo
  	# (e.g. aix) in case we are running --disable-static
  	for obj in $libobjs; do
  	  xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
  	  if test "X$xdir" = "X$obj"; then
  	    xdir="."
  	  else
  	    xdir="$xdir"
  	  fi
  	  baseobj=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
  	  oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"`
  	  if test ! -f $xdir/$oldobj; then
  	    $show "(cd $xdir && ${LN_S} $baseobj $oldobj)"
  	    $run eval '(cd $xdir && ${LN_S} $baseobj $oldobj)' || exit $?
  	  fi
  	done
  
  	# Use standard objects if they are pic
  	test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
  
  	# Prepare the list of exported symbols
  	if test -z "$export_symbols"; then
  	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
  	    $show "generating symbol list for \`$libname.la'"
  	    export_symbols="$output_objdir/$libname.exp"
  	    $run $rm $export_symbols
  	    eval cmds=\"$export_symbols_cmds\"
  	    IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
  	    for cmd in $cmds; do
  	      IFS="$save_ifs"
  	      $show "$cmd"
  	      $run eval "$cmd" || exit $?
  	    done
  	    IFS="$save_ifs"
  	    if test -n "$export_symbols_regex"; then
  	      $show "egrep -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\""
  	      $run eval 'egrep -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
  	      $show "$mv \"${export_symbols}T\" \"$export_symbols\""
  	      $run eval '$mv "${export_symbols}T" "$export_symbols"'
  	    fi
  	  fi
  	fi
  
  	if test -n "$export_symbols" && test -n "$include_expsyms"; then
  	  $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"'
  	fi
  
  	if test -n "$convenience"; then
  	  if test -n "$whole_archive_flag_spec"; then
  	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
  	  else
  	    gentop="$output_objdir/${outputname}x"
  	    $show "${rm}r $gentop"
  	    $run ${rm}r "$gentop"
  	    $show "mkdir $gentop"
  	    $run mkdir "$gentop"
  	    status=$?
  	    if test $status -ne 0 && test ! -d "$gentop"; then
  	      exit $status
  	    fi
  	    generated="$generated $gentop"
  
  	    for xlib in $convenience; do
  	      # Extract the objects.
  	      case $xlib in
  	      [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
  	      *) xabs=`pwd`"/$xlib" ;;
  	      esac
  	      xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
  	      xdir="$gentop/$xlib"
  
  	      $show "${rm}r $xdir"
  	      $run ${rm}r "$xdir"
  	      $show "mkdir $xdir"
  	      $run mkdir "$xdir"
  	      status=$?
  	      if test $status -ne 0 && test ! -d "$xdir"; then
  		exit $status
  	      fi
  	      $show "(cd $xdir && $AR x $xabs)"
  	      $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
  
  	      libobjs="$libobjs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP`
  	    done
  	  fi
  	fi
  
  	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
  	  eval flag=\"$thread_safe_flag_spec\"
  	  linker_flags="$linker_flags $flag"
  	fi
  
  	# Make a backup of the uninstalled library when relinking
  	if test "$mode" = relink; then
  	  $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $?
  	fi
  
  	# Do each of the archive commands.
  	if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
  	  eval cmds=\"$archive_expsym_cmds\"
  	else
  	  eval cmds=\"$archive_cmds\"
  	fi
  	IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
  	for cmd in $cmds; do
  	  IFS="$save_ifs"
  	  $show "$cmd"
  	  $run eval "$cmd" || exit $?
  	done
  	IFS="$save_ifs"
  
  	# Restore the uninstalled library and exit
  	if test "$mode" = relink; then
  	  $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $?
  	  exit 0
  	fi
  
  	# Create links to the real library.
  	for linkname in $linknames; do
  	  if test "$realname" != "$linkname"; then
  	    $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)"
  	    $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $?
  	  fi
  	done
  
  	# If -module or -export-dynamic was specified, set the dlname.
  	if test "$module" = yes || test "$export_dynamic" = yes; then
  	  # On all known operating systems, these are identical.
  	  dlname="$soname"
  	fi
        fi
        ;;
  
      obj)
        if test -n "$deplibs"; then
  	$echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2
        fi
  
        if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
  	$echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2
        fi
  
        if test -n "$rpath"; then
  	$echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2
        fi
  
        if test -n "$xrpath"; then
  	$echo "$modename: warning: \`-R' is ignored for objects" 1>&2
        fi
  
        if test -n "$vinfo"; then
  	$echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2
        fi
  
        if test -n "$release"; then
  	$echo "$modename: warning: \`-release' is ignored for objects" 1>&2
        fi
  
        case $output in
        *.lo)
  	if test -n "$objs$old_deplibs"; then
  	  $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2
  	  exit 1
  	fi
  	libobj="$output"
  	obj=`$echo "X$output" | $Xsed -e "$lo2o"`
  	;;
        *)
  	libobj=
  	obj="$output"
  	;;
        esac
  
        # Delete the old objects.
        $run $rm $obj $libobj
  
        # Objects from convenience libraries.  This assumes
        # single-version convenience libraries.  Whenever we create
        # different ones for PIC/non-PIC, this we'll have to duplicate
        # the extraction.
        reload_conv_objs=
        gentop=
        # reload_cmds runs $LD directly, so let us get rid of
        # -Wl from whole_archive_flag_spec
        wl=
  
        if test -n "$convenience"; then
  	if test -n "$whole_archive_flag_spec"; then
  	  eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\"
  	else
  	  gentop="$output_objdir/${obj}x"
  	  $show "${rm}r $gentop"
  	  $run ${rm}r "$gentop"
  	  $show "mkdir $gentop"
  	  $run mkdir "$gentop"
  	  status=$?
  	  if test $status -ne 0 && test ! -d "$gentop"; then
  	    exit $status
  	  fi
  	  generated="$generated $gentop"
  
  	  for xlib in $convenience; do
  	    # Extract the objects.
  	    case $xlib in
  	    [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
  	    *) xabs=`pwd`"/$xlib" ;;
  	    esac
  	    xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
  	    xdir="$gentop/$xlib"
  
  	    $show "${rm}r $xdir"
  	    $run ${rm}r "$xdir"
  	    $show "mkdir $xdir"
  	    $run mkdir "$xdir"
  	    status=$?
  	    if test $status -ne 0 && test ! -d "$xdir"; then
  	      exit $status
  	    fi
  	    $show "(cd $xdir && $AR x $xabs)"
  	    $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
  
  	    reload_conv_objs="$reload_objs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP`
  	  done
  	fi
        fi
  
        # Create the old-style object.
        reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
  
        output="$obj"
        eval cmds=\"$reload_cmds\"
        IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
        for cmd in $cmds; do
  	IFS="$save_ifs"
  	$show "$cmd"
  	$run eval "$cmd" || exit $?
        done
        IFS="$save_ifs"
  
        # Exit if we aren't doing a library object file.
        if test -z "$libobj"; then
  	if test -n "$gentop"; then
  	  $show "${rm}r $gentop"
  	  $run ${rm}r $gentop
  	fi
  
  	exit 0
        fi
  
        if test "$build_libtool_libs" != yes; then
  	if test -n "$gentop"; then
  	  $show "${rm}r $gentop"
  	  $run ${rm}r $gentop
  	fi
  
  	# Create an invalid libtool object if no PIC, so that we don't
  	# accidentally link it into a program.
  	$show "echo timestamp > $libobj"
  	$run eval "echo timestamp > $libobj" || exit $?
  	exit 0
        fi
  
        if test -n "$pic_flag" || test "$pic_mode" != default; then
  	# Only do commands if we really have different PIC objects.
  	reload_objs="$libobjs $reload_conv_objs"
  	output="$libobj"
  	eval cmds=\"$reload_cmds\"
  	IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
  	for cmd in $cmds; do
  	  IFS="$save_ifs"
  	  $show "$cmd"
  	  $run eval "$cmd" || exit $?
  	done
  	IFS="$save_ifs"
        else
  	# Just create a symlink.
  	$show $rm $libobj
  	$run $rm $libobj
  	xdir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'`
  	if test "X$xdir" = "X$libobj"; then
  	  xdir="."
  	else
  	  xdir="$xdir"
  	fi
  	baseobj=`$echo "X$libobj" | $Xsed -e 's%^.*/%%'`
  	oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"`
  	$show "(cd $xdir && $LN_S $oldobj $baseobj)"
  	$run eval '(cd $xdir && $LN_S $oldobj $baseobj)' || exit $?
        fi
  
        if test -n "$gentop"; then
  	$show "${rm}r $gentop"
  	$run ${rm}r $gentop
        fi
  
        exit 0
        ;;
  
      prog)
        case $host in
  	*cygwin*) output=`echo $output | sed -e 's,.exe$,,;s,$,.exe,'` ;;
        esac
        if test -n "$vinfo"; then
  	$echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2
        fi
  
        if test -n "$release"; then
  	$echo "$modename: warning: \`-release' is ignored for programs" 1>&2
        fi
  
        if test "$preload" = yes; then
  	if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown &&
  	   test "$dlopen_self_static" = unknown; then
  	  $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support."
  	fi
        fi
  
        case $host in
        *-*-rhapsody* | *-*-darwin1.[012])
  	# On Rhapsody replace the C library is the System framework
  	compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
  	finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
  	;;
        esac
  
        compile_command="$compile_command $compile_deplibs"
        finalize_command="$finalize_command $finalize_deplibs"
  
        if test -n "$rpath$xrpath"; then
  	# If the user specified any rpath flags, then add them.
  	for libdir in $rpath $xrpath; do
  	  # This is the magic to use -rpath.
  	  case "$finalize_rpath " in
  	  *" $libdir "*) ;;
  	  *) finalize_rpath="$finalize_rpath $libdir" ;;
  	  esac
  	done
        fi
  
        # Now hardcode the library paths
        rpath=
        hardcode_libdirs=
        for libdir in $compile_rpath $finalize_rpath; do
  	if test -n "$hardcode_libdir_flag_spec"; then
  	  if test -n "$hardcode_libdir_separator"; then
  	    if test -z "$hardcode_libdirs"; then
  	      hardcode_libdirs="$libdir"
  	    else
  	      # Just accumulate the unique libdirs.
  	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
  	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
  		;;
  	      *)
  		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
  		;;
  	      esac
  	    fi
  	  else
  	    eval flag=\"$hardcode_libdir_flag_spec\"
  	    rpath="$rpath $flag"
  	  fi
  	elif test -n "$runpath_var"; then
  	  case "$perm_rpath " in
  	  *" $libdir "*) ;;
  	  *) perm_rpath="$perm_rpath $libdir" ;;
  	  esac
  	fi
  	case $host in
  	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
  	  case :$dllsearchpath: in
  	  *":$libdir:"*) ;;
  	  *) dllsearchpath="$dllsearchpath:$libdir";;
  	  esac
  	  ;;
  	esac
        done
        # Substitute the hardcoded libdirs into the rpath.
        if test -n "$hardcode_libdir_separator" &&
  	 test -n "$hardcode_libdirs"; then
  	libdir="$hardcode_libdirs"
  	eval rpath=\" $hardcode_libdir_flag_spec\"
        fi
        compile_rpath="$rpath"
  
        rpath=
        hardcode_libdirs=
        for libdir in $finalize_rpath; do
  	if test -n "$hardcode_libdir_flag_spec"; then
  	  if test -n "$hardcode_libdir_separator"; then
  	    if test -z "$hardcode_libdirs"; then
  	      hardcode_libdirs="$libdir"
  	    else
  	      # Just accumulate the unique libdirs.
  	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
  	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
  		;;
  	      *)
  		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
  		;;
  	      esac
  	    fi
  	  else
  	    eval flag=\"$hardcode_libdir_flag_spec\"
  	    rpath="$rpath $flag"
  	  fi
  	elif test -n "$runpath_var"; then
  	  case "$finalize_perm_rpath " in
  	  *" $libdir "*) ;;
  	  *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
  	  esac
  	fi
        done
        # Substitute the hardcoded libdirs into the rpath.
        if test -n "$hardcode_libdir_separator" &&
  	 test -n "$hardcode_libdirs"; then
  	libdir="$hardcode_libdirs"
  	eval rpath=\" $hardcode_libdir_flag_spec\"
        fi
        finalize_rpath="$rpath"
  
        if test -n "$libobjs" && test "$build_old_libs" = yes; then
  	# Transform all the library objects into standard objects.
  	compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
  	finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
        fi
  
        dlsyms=
        if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
  	if test -n "$NM" && test -n "$global_symbol_pipe"; then
  	  dlsyms="${outputname}S.c"
  	else
  	  $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2
  	fi
        fi
  
        if test -n "$dlsyms"; then
  	case $dlsyms in
  	"") ;;
  	*.c)
  	  # Discover the nlist of each of the dlfiles.
  	  nlist="$output_objdir/${outputname}.nm"
  
  	  $show "$rm $nlist ${nlist}S ${nlist}T"
  	  $run $rm "$nlist" "${nlist}S" "${nlist}T"
  
  	  # Parse the name list into a source file.
  	  $show "creating $output_objdir/$dlsyms"
  
  	  test -z "$run" && $echo > "$output_objdir/$dlsyms" "\
  /* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */
  /* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */
  
  #ifdef __cplusplus
  extern \"C\" {
  #endif
  
  /* Prevent the only kind of declaration conflicts we can make. */
  #define lt_preloaded_symbols some_other_symbol
  
  /* External symbol declarations for the compiler. */\
  "
  
  	  if test "$dlself" = yes; then
  	    $show "generating symbol list for \`$output'"
  
  	    test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist"
  
  	    # Add our own program objects to the symbol list.
  	    progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
  	    for arg in $progfiles; do
  	      $show "extracting global C symbols from \`$arg'"
  	      $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
  	    done
  
  	    if test -n "$exclude_expsyms"; then
  	      $run eval 'egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
  	      $run eval '$mv "$nlist"T "$nlist"'
  	    fi
  
  	    if test -n "$export_symbols_regex"; then
  	      $run eval 'egrep -e "$export_symbols_regex" "$nlist" > "$nlist"T'
  	      $run eval '$mv "$nlist"T "$nlist"'
  	    fi
  
  	    # Prepare the list of exported symbols
  	    if test -z "$export_symbols"; then
  	      export_symbols="$output_objdir/$output.exp"
  	      $run $rm $export_symbols
  	      $run eval "sed -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
  	    else
  	      $run eval "sed -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"'
  	      $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T'
  	      $run eval 'mv "$nlist"T "$nlist"'
  	    fi
  	  fi
  
  	  for arg in $dlprefiles; do
  	    $show "extracting global C symbols from \`$arg'"
  	    name=`echo "$arg" | sed -e 's%^.*/%%'`
  	    $run eval 'echo ": $name " >> "$nlist"'
  	    $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
  	  done
  
  	  if test -z "$run"; then
  	    # Make sure we have at least an empty file.
  	    test -f "$nlist" || : > "$nlist"
  
  	    if test -n "$exclude_expsyms"; then
  	      egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
  	      $mv "$nlist"T "$nlist"
  	    fi
  
  	    # Try sorting and uniquifying the output.
  	    if grep -v "^: " < "$nlist" | sort +2 | uniq > "$nlist"S; then
  	      :
  	    else
  	      grep -v "^: " < "$nlist" > "$nlist"S
  	    fi
  
  	    if test -f "$nlist"S; then
  	      eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"'
  	    else
  	      echo '/* NONE */' >> "$output_objdir/$dlsyms"
  	    fi
  
  	    $echo >> "$output_objdir/$dlsyms" "\
  
  #undef lt_preloaded_symbols
  
  #if defined (__STDC__) && __STDC__
  # define lt_ptr_t void *
  #else
  # define lt_ptr_t char *
  # define const
  #endif
  
  /* The mapping between symbol names and symbols. */
  const struct {
    const char *name;
    lt_ptr_t address;
  }
  lt_preloaded_symbols[] =
  {\
  "
  
  	    sed -n -e 's/^: \([^ ]*\) $/  {\"\1\", (lt_ptr_t) 0},/p' \
  		-e 's/^. \([^ ]*\) \([^ ]*\)$/  {"\2", (lt_ptr_t) \&\2},/p' \
  		  < "$nlist" >> "$output_objdir/$dlsyms"
  
  	    $echo >> "$output_objdir/$dlsyms" "\
    {0, (lt_ptr_t) 0}
  };
  
  /* This works around a problem in FreeBSD linker */
  #ifdef FREEBSD_WORKAROUND
  static const void *lt_preloaded_setup() {
    return lt_preloaded_symbols;
  }
  #endif
  
  #ifdef __cplusplus
  }
  #endif\
  "
  	  fi
  
  	  pic_flag_for_symtable=
  	  case $host in
  	  # compiling the symbol table file with pic_flag works around
  	  # a FreeBSD bug that causes programs to crash when -lm is
  	  # linked before any other PIC object.  But we must not use
  	  # pic_flag when linking with -static.  The problem exists in
  	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
  	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
  	    case "$compile_command " in
  	    *" -static "*) ;;
  	    *) pic_flag_for_symtable=" $pic_flag -DPIC -DFREEBSD_WORKAROUND";;
  	    esac;;
  	  *-*-hpux*)
  	    case "$compile_command " in
  	    *" -static "*) ;;
  	    *) pic_flag_for_symtable=" $pic_flag -DPIC";;
  	    esac
  	  esac
  
  	  # Now compile the dynamic symbol file.
  	  $show "(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")"
  	  $run eval '(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $?
  
  	  # Clean up the generated files.
  	  $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T"
  	  $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T"
  
  	  # Transform the symbol file into the correct name.
  	  compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
  	  finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
  	  ;;
  	*)
  	  $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2
  	  exit 1
  	  ;;
  	esac
        else
  	# We keep going just in case the user didn't refer to
  	# lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
  	# really was required.
  
  	# Nullify the symbol file.
  	compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
  	finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
        fi
  
        if test $need_relink = no || test "$build_libtool_libs" != yes; then
  	# Replace the output file specification.
  	compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
  	link_command="$compile_command$compile_rpath"
  
  	# We have no uninstalled library dependencies, so finalize right now.
  	$show "$link_command"
  	$run eval "$link_command"
  	status=$?
  
  	# Delete the generated files.
  	if test -n "$dlsyms"; then
  	  $show "$rm $output_objdir/${outputname}S.${objext}"
  	  $run $rm "$output_objdir/${outputname}S.${objext}"
  	fi
  
  	exit $status
        fi
  
        if test -n "$shlibpath_var"; then
  	# We should set the shlibpath_var
  	rpath=
  	for dir in $temp_rpath; do
  	  case $dir in
  	  [\\/]* | [A-Za-z]:[\\/]*)
  	    # Absolute path.
  	    rpath="$rpath$dir:"
  	    ;;
  	  *)
  	    # Relative path: add a thisdir entry.
  	    rpath="$rpath\$thisdir/$dir:"
  	    ;;
  	  esac
  	done
  	temp_rpath="$rpath"
        fi
  
        if test -n "$compile_shlibpath$finalize_shlibpath"; then
  	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
        fi
        if test -n "$finalize_shlibpath"; then
  	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
        fi
  
        compile_var=
        finalize_var=
        if test -n "$runpath_var"; then
  	if test -n "$perm_rpath"; then
  	  # We should set the runpath_var.
  	  rpath=
  	  for dir in $perm_rpath; do
  	    rpath="$rpath$dir:"
  	  done
  	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
  	fi
  	if test -n "$finalize_perm_rpath"; then
  	  # We should set the runpath_var.
  	  rpath=
  	  for dir in $finalize_perm_rpath; do
  	    rpath="$rpath$dir:"
  	  done
  	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
  	fi
        fi
  
        if test "$no_install" = yes; then
  	# We don't need to create a wrapper script.
  	link_command="$compile_var$compile_command$compile_rpath"
  	# Replace the output file specification.
  	link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
  	# Delete the old output file.
  	$run $rm $output
  	# Link the executable and exit
  	$show "$link_command"
  	$run eval "$link_command" || exit $?
  	exit 0
        fi
  
        if test "$hardcode_action" = relink; then
  	# Fast installation is not supported
  	link_command="$compile_var$compile_command$compile_rpath"
  	relink_command="$finalize_var$finalize_command$finalize_rpath"
  
  	$echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2
  	$echo "$modename: \`$output' will be relinked during installation" 1>&2
        else
  	if test "$fast_install" != no; then
  	  link_command="$finalize_var$compile_command$finalize_rpath"
  	  if test "$fast_install" = yes; then
  	    relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
  	  else
  	    # fast_install is set to needless
  	    relink_command=
  	  fi
  	else
  	  link_command="$compile_var$compile_command$compile_rpath"
  	  relink_command="$finalize_var$finalize_command$finalize_rpath"
  	fi
        fi
  
        # Replace the output file specification.
        link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
  
        # Delete the old output files.
        $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname
  
        $show "$link_command"
        $run eval "$link_command" || exit $?
  
        # Now create the wrapper script.
        $show "creating $output"
  
        # Quote the relink command for shipping.
        if test -n "$relink_command"; then
  	# Preserve any variables that may affect compiler behavior
  	for var in $variables_saved_for_relink; do
  	  if eval test -z \"\${$var+set}\"; then
  	    relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
  	  elif eval var_value=\$$var; test -z "$var_value"; then
  	    relink_command="$var=; export $var; $relink_command"
  	  else
  	    var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
  	    relink_command="$var=\"$var_value\"; export $var; $relink_command"
  	  fi
  	done
  	relink_command="cd `pwd`; $relink_command"
  	relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
        fi
  
        # Quote $echo for shipping.
        if test "X$echo" = "X$SHELL $0 --fallback-echo"; then
  	case $0 in
  	[\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";;
  	*) qecho="$SHELL `pwd`/$0 --fallback-echo";;
  	esac
  	qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"`
        else
  	qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"`
        fi
  
        # Only actually do things if our run command is non-null.
        if test -z "$run"; then
  	# win32 will think the script is a binary if it has
  	# a .exe suffix, so we strip it off here.
  	case $output in
  	  *.exe) output=`echo $output|sed 's,.exe$,,'` ;;
  	esac
  	# test for cygwin because mv fails w/o .exe extensions
  	case $host in
  	  *cygwin*) exeext=.exe ;;
  	  *) exeext= ;;
  	esac
  	$rm $output
  	trap "$rm $output; exit 1" 1 2 15
  
  	$echo > $output "\
  #! $SHELL
  
  # $output - temporary wrapper script for $objdir/$outputname
  # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
  #
  # The $output program cannot be directly executed until all the libtool
  # libraries that it depends on are installed.
  #
  # This wrapper script should never be moved out of the build directory.
  # If it is, it will not operate correctly.
  
  # Sed substitution that helps us do robust quoting.  It backslashifies
  # metacharacters that are still active within double-quoted strings.
  Xsed='sed -e 1s/^X//'
  sed_quote_subst='$sed_quote_subst'
  
  # The HP-UX ksh and POSIX shell print the target directory to stdout
  # if CDPATH is set.
  if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi
  
  relink_command=\"$relink_command\"
  
  # This environment variable determines our operation mode.
  if test \"\$libtool_install_magic\" = \"$magic\"; then
    # install mode needs the following variable:
    notinst_deplibs='$notinst_deplibs'
  else
    # When we are sourced in execute mode, \$file and \$echo are already set.
    if test \"\$libtool_execute_magic\" != \"$magic\"; then
      echo=\"$qecho\"
      file=\"\$0\"
      # Make sure echo works.
      if test \"X\$1\" = X--no-reexec; then
        # Discard the --no-reexec flag, and continue.
        shift
      elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then
        # Yippee, \$echo works!
        :
      else
        # Restart under the correct shell, and then maybe \$echo will work.
        exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
      fi
    fi\
  "
  	$echo >> $output "\
  
    # Find the directory that this script lives in.
    thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
    test \"x\$thisdir\" = \"x\$file\" && thisdir=.
  
    # Follow symbolic links until we get to the real thisdir.
    file=\`ls -ld \"\$file\" | sed -n 's/.*-> //p'\`
    while test -n \"\$file\"; do
      destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
  
      # If there was a directory component, then change thisdir.
      if test \"x\$destdir\" != \"x\$file\"; then
        case \"\$destdir\" in
        [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
        *) thisdir=\"\$thisdir/\$destdir\" ;;
        esac
      fi
  
      file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
      file=\`ls -ld \"\$thisdir/\$file\" | sed -n 's/.*-> //p'\`
    done
  
    # Try to get the absolute directory name.
    absdir=\`cd \"\$thisdir\" && pwd\`
    test -n \"\$absdir\" && thisdir=\"\$absdir\"
  "
  
  	if test "$fast_install" = yes; then
  	  echo >> $output "\
    program=lt-'$outputname'$exeext
    progdir=\"\$thisdir/$objdir\"
  
    if test ! -f \"\$progdir/\$program\" || \\
       { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | sed 1q\`; \\
         test \"X\$file\" != \"X\$progdir/\$program\"; }; then
  
      file=\"\$\$-\$program\"
  
      if test ! -d \"\$progdir\"; then
        $mkdir \"\$progdir\"
      else
        $rm \"\$progdir/\$file\"
      fi"
  
  	  echo >> $output "\
  
      # relink executable if necessary
      if test -n \"\$relink_command\"; then
        if (eval \$relink_command); then :
        else
  	$rm \"\$progdir/\$file\"
  	exit 1
        fi
      fi
  
      $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
      { $rm \"\$progdir/\$program\";
        $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; }
      $rm \"\$progdir/\$file\"
    fi"
  	else
  	  echo >> $output "\
    program='$outputname'
    progdir=\"\$thisdir/$objdir\"
  "
  	fi
  
  	echo >> $output "\
  
    if test -f \"\$progdir/\$program\"; then"
  
  	# Export our shlibpath_var if we have one.
  	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
  	  $echo >> $output "\
      # Add our own library path to $shlibpath_var
      $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
  
      # Some systems cannot cope with colon-terminated $shlibpath_var
      # The second colon is a workaround for a bug in BeOS R4 sed
      $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
  
      export $shlibpath_var
  "
  	fi
  
  	# fixup the dll searchpath if we need to.
  	if test -n "$dllsearchpath"; then
  	  $echo >> $output "\
      # Add the dll search path components to the executable PATH
      PATH=$dllsearchpath:\$PATH
  "
  	fi
  
  	$echo >> $output "\
      if test \"\$libtool_execute_magic\" != \"$magic\"; then
        # Run the actual program with our arguments.
  "
  	case $host in
  	# win32 systems need to use the prog path for dll
  	# lookup to work
  	*-*-cygwin* | *-*-pw32*)
  	  $echo >> $output "\
        exec \$progdir/\$program \${1+\"\$@\"}
  "
  	  ;;
  
  	# Backslashes separate directories on plain windows
  	*-*-mingw | *-*-os2*)
  	  $echo >> $output "\
        exec \$progdir\\\\\$program \${1+\"\$@\"}
  "
  	  ;;
  
  	*)
  	  $echo >> $output "\
        # Export the path to the program.
        PATH=\"\$progdir:\$PATH\"
        export PATH
  
        exec \$program \${1+\"\$@\"}
  "
  	  ;;
  	esac
  	$echo >> $output "\
        \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\"
        exit 1
      fi
    else
      # The program doesn't exist.
      \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2
      \$echo \"This script is just a wrapper for \$program.\" 1>&2
      echo \"See the $PACKAGE documentation for more information.\" 1>&2
      exit 1
    fi
  fi\
  "
  	chmod +x $output
        fi
        exit 0
        ;;
      esac
  
      # See if we need to build an old-fashioned archive.
      for oldlib in $oldlibs; do
  
        if test "$build_libtool_libs" = convenience; then
  	oldobjs="$libobjs_save"
  	addlibs="$convenience"
  	build_libtool_libs=no
        else
  	if test "$build_libtool_libs" = module; then
  	  oldobjs="$libobjs_save"
  	  build_libtool_libs=no
  	else
  	  oldobjs="$objs$old_deplibs "`$echo "X$libobjs_save" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`
  	fi
  	addlibs="$old_convenience"
        fi
  
        if test -n "$addlibs"; then
  	gentop="$output_objdir/${outputname}x"
  	$show "${rm}r $gentop"
  	$run ${rm}r "$gentop"
  	$show "mkdir $gentop"
  	$run mkdir "$gentop"
  	status=$?
  	if test $status -ne 0 && test ! -d "$gentop"; then
  	  exit $status
  	fi
  	generated="$generated $gentop"
  
  	# Add in members from convenience archives.
  	for xlib in $addlibs; do
  	  # Extract the objects.
  	  case $xlib in
  	  [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
  	  *) xabs=`pwd`"/$xlib" ;;
  	  esac
  	  xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
  	  xdir="$gentop/$xlib"
  
  	  $show "${rm}r $xdir"
  	  $run ${rm}r "$xdir"
  	  $show "mkdir $xdir"
  	  $run mkdir "$xdir"
  	  status=$?
  	  if test $status -ne 0 && test ! -d "$xdir"; then
  	    exit $status
  	  fi
  	  $show "(cd $xdir && $AR x $xabs)"
  	  $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
  
  	  oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP`
  	done
        fi
  
        # Do each command in the archive commands.
        if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
  	eval cmds=\"$old_archive_from_new_cmds\"
        else
  	# Ensure that we have .o objects in place in case we decided
  	# not to build a shared library, and have fallen back to building
  	# static libs even though --disable-static was passed!
  	for oldobj in $oldobjs; do
  	  if test ! -f $oldobj; then
  	    xdir=`$echo "X$oldobj" | $Xsed -e 's%/[^/]*$%%'`
  	    if test "X$xdir" = "X$oldobj"; then
  	      xdir="."
  	    else
  	      xdir="$xdir"
  	    fi
  	    baseobj=`$echo "X$oldobj" | $Xsed -e 's%^.*/%%'`
  	    obj=`$echo "X$baseobj" | $Xsed -e "$o2lo"`
  	    $show "(cd $xdir && ${LN_S} $obj $baseobj)"
  	    $run eval '(cd $xdir && ${LN_S} $obj $baseobj)' || exit $?
  	  fi
  	done
  
  	eval cmds=\"$old_archive_cmds\"
        fi
        IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
        for cmd in $cmds; do
  	IFS="$save_ifs"
  	$show "$cmd"
  	$run eval "$cmd" || exit $?
        done
        IFS="$save_ifs"
      done
  
      if test -n "$generated"; then
        $show "${rm}r$generated"
        $run ${rm}r$generated
      fi
  
      # Now create the libtool archive.
      case $output in
      *.la)
        old_library=
        test "$build_old_libs" = yes && old_library="$libname.$libext"
        $show "creating $output"
  
        # Preserve any variables that may affect compiler behavior
        for var in $variables_saved_for_relink; do
  	if eval test -z \"\${$var+set}\"; then
  	  relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
  	elif eval var_value=\$$var; test -z "$var_value"; then
  	  relink_command="$var=; export $var; $relink_command"
  	else
  	  var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
  	  relink_command="$var=\"$var_value\"; export $var; $relink_command"
  	fi
        done
        # Quote the link command for shipping.
        relink_command="cd `pwd`; $SHELL $0 --mode=relink $libtool_args"
        relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
  
        # Only create the output if not a dry run.
        if test -z "$run"; then
  	for installed in no yes; do
  	  if test "$installed" = yes; then
  	    if test -z "$install_libdir"; then
  	      break
  	    fi
  	    output="$output_objdir/$outputname"i
  	    # Replace all uninstalled libtool libraries with the installed ones
  	    newdependency_libs=
  	    for deplib in $dependency_libs; do
  	      case $deplib in
  	      *.la)
  		name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'`
  		eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
  		if test -z "$libdir"; then
  		  $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
  		  exit 1
  		fi
  		newdependency_libs="$newdependency_libs $libdir/$name"
  		;;
  	      *) newdependency_libs="$newdependency_libs $deplib" ;;
  	      esac
  	    done
  	    dependency_libs="$newdependency_libs"
  	    newdlfiles=
  	    for lib in $dlfiles; do
  	      name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
  	      eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
  	      if test -z "$libdir"; then
  		$echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
  		exit 1
  	      fi
  	      newdlfiles="$newdlfiles $libdir/$name"
  	    done
  	    dlfiles="$newdlfiles"
  	    newdlprefiles=
  	    for lib in $dlprefiles; do
  	      name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
  	      eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
  	      if test -z "$libdir"; then
  		$echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
  		exit 1
  	      fi
  	      newdlprefiles="$newdlprefiles $libdir/$name"
  	    done
  	    dlprefiles="$newdlprefiles"
  	  fi
  	  $rm $output
  	  # place dlname in correct position for cygwin
  	  tdlname=$dlname
  	  case $host,$output,$installed,$module,$dlname in
  	    *cygwin*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
  	  esac
  	  $echo > $output "\
  # $outputname - a libtool library file
  # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
  #
  # Please DO NOT delete this file!
  # It is necessary for linking the library.
  
  # The name that we can dlopen(3).
  dlname='$tdlname'
  
  # Names of this library.
  library_names='$library_names'
  
  # The name of the static archive.
  old_library='$old_library'
  
  # Libraries that this one depends upon.
  dependency_libs='$dependency_libs'
  
  # Version information for $libname.
  current=$current
  age=$age
  revision=$revision
  
  # Is this an already installed library?
  installed=$installed
  
  # Files to dlopen/dlpreopen
  dlopen='$dlfiles'
  dlpreopen='$dlprefiles'
  
  # Directory that this library needs to be installed in:
  libdir='$install_libdir'"
  	  if test "$installed" = no && test $need_relink = yes; then
  	    $echo >> $output "\
  relink_command=\"$relink_command\""
  	  fi
  	done
        fi
  
        # Do a symbolic link so that the libtool archive can be found in
        # LD_LIBRARY_PATH before the program is installed.
        $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)"
        $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $?
        ;;
      esac
      exit 0
      ;;
  
    # libtool install mode
    install)
      modename="$modename: install"
  
      # There may be an optional sh(1) argument at the beginning of
      # install_prog (especially on Windows NT).
      if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
         # Allow the use of GNU shtool's install command.
         $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then
        # Aesthetically quote it.
        arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"`
        case $arg in
        *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
  	arg="\"$arg\""
  	;;
        esac
        install_prog="$arg "
        arg="$1"
        shift
      else
        install_prog=
        arg="$nonopt"
      fi
  
      # The real first argument should be the name of the installation program.
      # Aesthetically quote it.
      arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
      case $arg in
      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
        arg="\"$arg\""
        ;;
      esac
      install_prog="$install_prog$arg"
  
      # We need to accept at least all the BSD install flags.
      dest=
      files=
      opts=
      prev=
      install_type=
      isdir=no
      stripme=
      for arg
      do
        if test -n "$dest"; then
  	files="$files $dest"
  	dest="$arg"
  	continue
        fi
  
        case $arg in
        -d) isdir=yes ;;
        -f) prev="-f" ;;
        -g) prev="-g" ;;
        -m) prev="-m" ;;
        -o) prev="-o" ;;
        -s)
  	stripme=" -s"
  	continue
  	;;
        -*) ;;
  
        *)
  	# If the previous option needed an argument, then skip it.
  	if test -n "$prev"; then
  	  prev=
  	else
  	  dest="$arg"
  	  continue
  	fi
  	;;
        esac
  
        # Aesthetically quote the argument.
        arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
        case $arg in
        *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
  	arg="\"$arg\""
  	;;
        esac
        install_prog="$install_prog $arg"
      done
  
      if test -z "$install_prog"; then
        $echo "$modename: you must specify an install program" 1>&2
        $echo "$help" 1>&2
        exit 1
      fi
  
      if test -n "$prev"; then
        $echo "$modename: the \`$prev' option requires an argument" 1>&2
        $echo "$help" 1>&2
        exit 1
      fi
  
      if test -z "$files"; then
        if test -z "$dest"; then
  	$echo "$modename: no file or destination specified" 1>&2
        else
  	$echo "$modename: you must specify a destination" 1>&2
        fi
        $echo "$help" 1>&2
        exit 1
      fi
  
      # Strip any trailing slash from the destination.
      dest=`$echo "X$dest" | $Xsed -e 's%/$%%'`
  
      # Check to see that the destination is a directory.
      test -d "$dest" && isdir=yes
      if test "$isdir" = yes; then
        destdir="$dest"
        destname=
      else
        destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'`
        test "X$destdir" = "X$dest" && destdir=.
        destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'`
  
        # Not a directory, so check to see that there is only one file specified.
        set dummy $files
        if test $# -gt 2; then
  	$echo "$modename: \`$dest' is not a directory" 1>&2
  	$echo "$help" 1>&2
  	exit 1
        fi
      fi
      case $destdir in
      [\\/]* | [A-Za-z]:[\\/]*) ;;
      *)
        for file in $files; do
  	case $file in
  	*.lo) ;;
  	*)
  	  $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2
  	  $echo "$help" 1>&2
  	  exit 1
  	  ;;
  	esac
        done
        ;;
      esac
  
      # This variable tells wrapper scripts just to set variables rather
      # than running their programs.
      libtool_install_magic="$magic"
  
      staticlibs=
      future_libdirs=
      current_libdirs=
      for file in $files; do
  
        # Do each installation.
        case $file in
        *.$libext)
  	# Do the static libraries later.
  	staticlibs="$staticlibs $file"
  	;;
  
        *.la)
  	# Check to see that this really is a libtool archive.
  	if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
  	else
  	  $echo "$modename: \`$file' is not a valid libtool archive" 1>&2
  	  $echo "$help" 1>&2
  	  exit 1
  	fi
  
  	library_names=
  	old_library=
  	relink_command=
  	# If there is no directory component, then add one.
  	case $file in
  	*/* | *\\*) . $file ;;
  	*) . ./$file ;;
  	esac
  
  	# Add the libdir to current_libdirs if it is the destination.
  	if test "X$destdir" = "X$libdir"; then
  	  case "$current_libdirs " in
  	  *" $libdir "*) ;;
  	  *) current_libdirs="$current_libdirs $libdir" ;;
  	  esac
  	else
  	  # Note the libdir as a future libdir.
  	  case "$future_libdirs " in
  	  *" $libdir "*) ;;
  	  *) future_libdirs="$future_libdirs $libdir" ;;
  	  esac
  	fi
  
  	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/
  	test "X$dir" = "X$file/" && dir=
  	dir="$dir$objdir"
  
  	if test -n "$relink_command"; then
  	  $echo "$modename: warning: relinking \`$file'" 1>&2
  	  $show "$relink_command"
  	  if $run eval "$relink_command"; then :
  	  else
  	    $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
  	    continue
  	  fi
  	fi
  
  	# See the names of the shared library.
  	set dummy $library_names
  	if test -n "$2"; then
  	  realname="$2"
  	  shift
  	  shift
  
  	  srcname="$realname"
  	  test -n "$relink_command" && srcname="$realname"T
  
  	  # Install the shared library and build the symlinks.
  	  $show "$install_prog $dir/$srcname $destdir/$realname"
  	  $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $?
  	  if test -n "$stripme" && test -n "$striplib"; then
  	    $show "$striplib $destdir/$realname"
  	    $run eval "$striplib $destdir/$realname" || exit $?
  	  fi
  
  	  if test $# -gt 0; then
  	    # Delete the old symlinks, and create new ones.
  	    for linkname
  	    do
  	      if test "$linkname" != "$realname"; then
  		$show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
  		$run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
  	      fi
  	    done
  	  fi
  
  	  # Do each command in the postinstall commands.
  	  lib="$destdir/$realname"
  	  eval cmds=\"$postinstall_cmds\"
  	  IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
  	  for cmd in $cmds; do
  	    IFS="$save_ifs"
  	    $show "$cmd"
  	    $run eval "$cmd" || exit $?
  	  done
  	  IFS="$save_ifs"
  	fi
  
  	# Install the pseudo-library for information purposes.
  	name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
  	instname="$dir/$name"i
  	$show "$install_prog $instname $destdir/$name"
  	$run eval "$install_prog $instname $destdir/$name" || exit $?
  
  	# Maybe install the static library, too.
  	test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
  	;;
  
        *.lo)
  	# Install (i.e. copy) a libtool object.
  
  	# Figure out destination file name, if it wasn't already specified.
  	if test -n "$destname"; then
  	  destfile="$destdir/$destname"
  	else
  	  destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
  	  destfile="$destdir/$destfile"
  	fi
  
  	# Deduce the name of the destination old-style object file.
  	case $destfile in
  	*.lo)
  	  staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"`
  	  ;;
  	*.$objext)
  	  staticdest="$destfile"
  	  destfile=
  	  ;;
  	*)
  	  $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2
  	  $echo "$help" 1>&2
  	  exit 1
  	  ;;
  	esac
  
  	# Install the libtool object if requested.
  	if test -n "$destfile"; then
  	  $show "$install_prog $file $destfile"
  	  $run eval "$install_prog $file $destfile" || exit $?
  	fi
  
  	# Install the old object if enabled.
  	if test "$build_old_libs" = yes; then
  	  # Deduce the name of the old-style object file.
  	  staticobj=`$echo "X$file" | $Xsed -e "$lo2o"`
  
  	  $show "$install_prog $staticobj $staticdest"
  	  $run eval "$install_prog \$staticobj \$staticdest" || exit $?
  	fi
  	exit 0
  	;;
  
        *)
  	# Figure out destination file name, if it wasn't already specified.
  	if test -n "$destname"; then
  	  destfile="$destdir/$destname"
  	else
  	  destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
  	  destfile="$destdir/$destfile"
  	fi
  
  	# Do a test to see if this is really a libtool program.
  	if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
  	  notinst_deplibs=
  	  relink_command=
  
  	  # If there is no directory component, then add one.
  	  case $file in
  	  */* | *\\*) . $file ;;
  	  *) . ./$file ;;
  	  esac
  
  	  # Check the variables that should have been set.
  	  if test -z "$notinst_deplibs"; then
  	    $echo "$modename: invalid libtool wrapper script \`$file'" 1>&2
  	    exit 1
  	  fi
  
  	  finalize=yes
  	  for lib in $notinst_deplibs; do
  	    # Check to see that each library is installed.
  	    libdir=
  	    if test -f "$lib"; then
  	      # If there is no directory component, then add one.
  	      case $lib in
  	      */* | *\\*) . $lib ;;
  	      *) . ./$lib ;;
  	      esac
  	    fi
  	    libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
  	    if test -n "$libdir" && test ! -f "$libfile"; then
  	      $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2
  	      finalize=no
  	    fi
  	  done
  
  	  relink_command=
  	  # If there is no directory component, then add one.
  	  case $file in
  	  */* | *\\*) . $file ;;
  	  *) . ./$file ;;
  	  esac
  
  	  outputname=
  	  if test "$fast_install" = no && test -n "$relink_command"; then
  	    if test "$finalize" = yes && test -z "$run"; then
  	      tmpdir="/tmp"
  	      test -n "$TMPDIR" && tmpdir="$TMPDIR"
  	      tmpdir="$tmpdir/libtool-$$"
  	      if $mkdir -p "$tmpdir" && chmod 700 "$tmpdir"; then :
  	      else
  		$echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2
  		continue
  	      fi
  	      file=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
  	      outputname="$tmpdir/$file"
  	      # Replace the output file specification.
  	      relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
  
  	      $show "$relink_command"
  	      if $run eval "$relink_command"; then :
  	      else
  		$echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
  		${rm}r "$tmpdir"
  		continue
  	      fi
  	      file="$outputname"
  	    else
  	      $echo "$modename: warning: cannot relink \`$file'" 1>&2
  	    fi
  	  else
  	    # Install the binary that we compiled earlier.
  	    file=`$echo "X$file" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
  	  fi
  	fi
  
  	# remove .exe since cygwin /usr/bin/install will append another
  	# one anyways
  	case $install_prog,$host in
  	/usr/bin/install*,*cygwin*)
  	  case $file:$destfile in
  	  *.exe:*.exe)
  	    # this is ok
  	    ;;
  	  *.exe:*)
  	    destfile=$destfile.exe
  	    ;;
  	  *:*.exe)
  	    destfile=`echo $destfile | sed -e 's,.exe$,,'`
  	    ;;
  	  esac
  	  ;;
  	esac
  	$show "$install_prog$stripme $file $destfile"
  	$run eval "$install_prog\$stripme \$file \$destfile" || exit $?
  	test -n "$outputname" && ${rm}r "$tmpdir"
  	;;
        esac
      done
  
      for file in $staticlibs; do
        name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
  
        # Set up the ranlib parameters.
        oldlib="$destdir/$name"
  
        $show "$install_prog $file $oldlib"
        $run eval "$install_prog \$file \$oldlib" || exit $?
  
        if test -n "$stripme" && test -n "$striplib"; then
  	$show "$old_striplib $oldlib"
  	$run eval "$old_striplib $oldlib" || exit $?
        fi
  
        # Do each command in the postinstall commands.
        eval cmds=\"$old_postinstall_cmds\"
        IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
        for cmd in $cmds; do
  	IFS="$save_ifs"
  	$show "$cmd"
  	$run eval "$cmd" || exit $?
        done
        IFS="$save_ifs"
      done
  
      if test -n "$future_libdirs"; then
        $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2
      fi
  
      if test -n "$current_libdirs"; then
        # Maybe just do a dry run.
        test -n "$run" && current_libdirs=" -n$current_libdirs"
        exec $SHELL $0 --finish$current_libdirs
        exit 1
      fi
  
      exit 0
      ;;
  
    # libtool finish mode
    finish)
      modename="$modename: finish"
      libdirs="$nonopt"
      admincmds=
  
      if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
        for dir
        do
  	libdirs="$libdirs $dir"
        done
  
        for libdir in $libdirs; do
  	if test -n "$finish_cmds"; then
  	  # Do each command in the finish commands.
  	  eval cmds=\"$finish_cmds\"
  	  IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
  	  for cmd in $cmds; do
  	    IFS="$save_ifs"
  	    $show "$cmd"
  	    $run eval "$cmd" || admincmds="$admincmds
         $cmd"
  	  done
  	  IFS="$save_ifs"
  	fi
  	if test -n "$finish_eval"; then
  	  # Do the single finish_eval.
  	  eval cmds=\"$finish_eval\"
  	  $run eval "$cmds" || admincmds="$admincmds
         $cmds"
  	fi
        done
      fi
  
      # Exit here if they wanted silent mode.
      test "$show" = ":" && exit 0
  
      echo "----------------------------------------------------------------------"
      echo "Libraries have been installed in:"
      for libdir in $libdirs; do
        echo "   $libdir"
      done
      echo
      echo "If you ever happen to want to link against installed libraries"
      echo "in a given directory, LIBDIR, you must either use libtool, and"
      echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
      echo "flag during linking and do at least one of the following:"
      if test -n "$shlibpath_var"; then
        echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
        echo "     during execution"
      fi
      if test -n "$runpath_var"; then
        echo "   - add LIBDIR to the \`$runpath_var' environment variable"
        echo "     during linking"
      fi
      if test -n "$hardcode_libdir_flag_spec"; then
        libdir=LIBDIR
        eval flag=\"$hardcode_libdir_flag_spec\"
  
        echo "   - use the \`$flag' linker flag"
      fi
      if test -n "$admincmds"; then
        echo "   - have your system administrator run these commands:$admincmds"
      fi
      if test -f /etc/ld.so.conf; then
        echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
      fi
      echo
      echo "See any operating system documentation about shared libraries for"
      echo "more information, such as the ld(1) and ld.so(8) manual pages."
      echo "----------------------------------------------------------------------"
      exit 0
      ;;
  
    # libtool execute mode
    execute)
      modename="$modename: execute"
  
      # The first argument is the command name.
      cmd="$nonopt"
      if test -z "$cmd"; then
        $echo "$modename: you must specify a COMMAND" 1>&2
        $echo "$help"
        exit 1
      fi
  
      # Handle -dlopen flags immediately.
      for file in $execute_dlfiles; do
        if test ! -f "$file"; then
  	$echo "$modename: \`$file' is not a file" 1>&2
  	$echo "$help" 1>&2
  	exit 1
        fi
  
        dir=
        case $file in
        *.la)
  	# Check to see that this really is a libtool archive.
  	if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
  	else
  	  $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
  	  $echo "$help" 1>&2
  	  exit 1
  	fi
  
  	# Read the libtool library.
  	dlname=
  	library_names=
  
  	# If there is no directory component, then add one.
  	case $file in
  	*/* | *\\*) . $file ;;
  	*) . ./$file ;;
  	esac
  
  	# Skip this library if it cannot be dlopened.
  	if test -z "$dlname"; then
  	  # Warn if it was a shared library.
  	  test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'"
  	  continue
  	fi
  
  	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
  	test "X$dir" = "X$file" && dir=.
  
  	if test -f "$dir/$objdir/$dlname"; then
  	  dir="$dir/$objdir"
  	else
  	  $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2
  	  exit 1
  	fi
  	;;
  
        *.lo)
  	# Just add the directory containing the .lo file.
  	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
  	test "X$dir" = "X$file" && dir=.
  	;;
  
        *)
  	$echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2
  	continue
  	;;
        esac
  
        # Get the absolute pathname.
        absdir=`cd "$dir" && pwd`
        test -n "$absdir" && dir="$absdir"
  
        # Now add the directory to shlibpath_var.
        if eval "test -z \"\$$shlibpath_var\""; then
  	eval "$shlibpath_var=\"\$dir\""
        else
  	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
        fi
      done
  
      # This variable tells wrapper scripts just to set shlibpath_var
      # rather than running their programs.
      libtool_execute_magic="$magic"
  
      # Check if any of the arguments is a wrapper script.
      args=
      for file
      do
        case $file in
        -*) ;;
        *)
  	# Do a test to see if this is really a libtool program.
  	if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
  	  # If there is no directory component, then add one.
  	  case $file in
  	  */* | *\\*) . $file ;;
  	  *) . ./$file ;;
  	  esac
  
  	  # Transform arg to wrapped name.
  	  file="$progdir/$program"
  	fi
  	;;
        esac
        # Quote arguments (to preserve shell metacharacters).
        file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"`
        args="$args \"$file\""
      done
  
      if test -z "$run"; then
        if test -n "$shlibpath_var"; then
  	# Export the shlibpath_var.
  	eval "export $shlibpath_var"
        fi
  
        # Restore saved enviroment variables
        if test "${save_LC_ALL+set}" = set; then
  	LC_ALL="$save_LC_ALL"; export LC_ALL
        fi
        if test "${save_LANG+set}" = set; then
  	LANG="$save_LANG"; export LANG
        fi
  
        # Now actually exec the command.
        eval "exec \$cmd$args"
  
        $echo "$modename: cannot exec \$cmd$args"
        exit 1
      else
        # Display what would be done.
        if test -n "$shlibpath_var"; then
  	eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
  	$echo "export $shlibpath_var"
        fi
        $echo "$cmd$args"
        exit 0
      fi
      ;;
  
    # libtool clean and uninstall mode
    clean | uninstall)
      modename="$modename: $mode"
      rm="$nonopt"
      files=
      rmforce=
      exit_status=0
  
      # This variable tells wrapper scripts just to set variables rather
      # than running their programs.
      libtool_install_magic="$magic"
  
      for arg
      do
        case $arg in
        -f) rm="$rm $arg"; rmforce=yes ;;
        -*) rm="$rm $arg" ;;
        *) files="$files $arg" ;;
        esac
      done
  
      if test -z "$rm"; then
        $echo "$modename: you must specify an RM program" 1>&2
        $echo "$help" 1>&2
        exit 1
      fi
  
      rmdirs=
  
      for file in $files; do
        dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
        if test "X$dir" = "X$file"; then
  	dir=.
  	objdir="$objdir"
        else
  	objdir="$dir/$objdir"
        fi
        name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
        test $mode = uninstall && objdir="$dir"
  
        # Remember objdir for removal later, being careful to avoid duplicates
        if test $mode = clean; then
  	case " $rmdirs " in
  	  *" $objdir "*) ;;
  	  *) rmdirs="$rmdirs $objdir" ;;
  	esac
        fi
  
        # Don't error if the file doesn't exist and rm -f was used.
        if (test -L "$file") >/dev/null 2>&1 \
          || (test -h "$file") >/dev/null 2>&1 \
  	|| test -f "$file"; then
          :
        elif test -d "$file"; then
          exit_status=1
  	continue
        elif test "$rmforce" = yes; then
          continue
        fi
  
        rmfiles="$file"
  
        case $name in
        *.la)
  	# Possibly a libtool archive, so verify it.
  	if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
  	  . $dir/$name
  
  	  # Delete the libtool libraries and symlinks.
  	  for n in $library_names; do
  	    rmfiles="$rmfiles $objdir/$n"
  	  done
  	  test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
  	  test $mode = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
  
  	  if test $mode = uninstall; then
  	    if test -n "$library_names"; then
  	      # Do each command in the postuninstall commands.
  	      eval cmds=\"$postuninstall_cmds\"
  	      IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
  	      for cmd in $cmds; do
  		IFS="$save_ifs"
  		$show "$cmd"
  		$run eval "$cmd"
  		if test $? != 0 && test "$rmforce" != yes; then
  		  exit_status=1
  		fi
  	      done
  	      IFS="$save_ifs"
  	    fi
  
  	    if test -n "$old_library"; then
  	      # Do each command in the old_postuninstall commands.
  	      eval cmds=\"$old_postuninstall_cmds\"
  	      IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
  	      for cmd in $cmds; do
  		IFS="$save_ifs"
  		$show "$cmd"
  		$run eval "$cmd"
  		if test $? != 0 && test "$rmforce" != yes; then
  		  exit_status=1
  		fi
  	      done
  	      IFS="$save_ifs"
  	    fi
  	    # FIXME: should reinstall the best remaining shared library.
  	  fi
  	fi
  	;;
  
        *.lo)
  	if test "$build_old_libs" = yes; then
  	  oldobj=`$echo "X$name" | $Xsed -e "$lo2o"`
  	  rmfiles="$rmfiles $dir/$oldobj"
  	fi
  	;;
  
        *)
  	# Do a test to see if this is a libtool program.
  	if test $mode = clean &&
  	   (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
  	  relink_command=
  	  . $dir/$file
  
  	  rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
  	  if test "$fast_install" = yes && test -n "$relink_command"; then
  	    rmfiles="$rmfiles $objdir/lt-$name"
  	  fi
  	fi
  	;;
        esac
        $show "$rm $rmfiles"
        $run $rm $rmfiles || exit_status=1
      done
  
      # Try to remove the ${objdir}s in the directories where we deleted files
      for dir in $rmdirs; do
        if test -d "$dir"; then
  	$show "rmdir $dir"
  	$run rmdir $dir >/dev/null 2>&1
        fi
      done
  
      exit $exit_status
      ;;
  
    "")
      $echo "$modename: you must specify a MODE" 1>&2
      $echo "$generic_help" 1>&2
      exit 1
      ;;
    esac
  
    $echo "$modename: invalid operation mode \`$mode'" 1>&2
    $echo "$generic_help" 1>&2
    exit 1
  fi # test -z "$show_help"
  
  # We need to display help for each of the modes.
  case $mode in
  "") $echo \
  "Usage: $modename [OPTION]... [MODE-ARG]...
  
  Provide generalized library-building support services.
  
      --config          show all configuration variables
      --debug           enable verbose shell tracing
  -n, --dry-run         display commands without modifying any files
      --features        display basic configuration information and exit
      --finish          same as \`--mode=finish'
      --help            display this help message and exit
      --mode=MODE       use operation mode MODE [default=inferred from MODE-ARGS]
      --quiet           same as \`--silent'
      --silent          don't print informational messages
      --version         print version information
  
  MODE must be one of the following:
  
        clean           remove files from the build directory
        compile         compile a source file into a libtool object
        execute         automatically set library path, then run a program
        finish          complete the installation of libtool libraries
        install         install libraries or executables
        link            create a library or an executable
        uninstall       remove libraries from an installed directory
  
  MODE-ARGS vary depending on the MODE.  Try \`$modename --help --mode=MODE' for
  a more detailed description of MODE."
    exit 0
    ;;
  
  clean)
    $echo \
  "Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
  
  Remove files from the build directory.
  
  RM is the name of the program to use to delete files associated with each FILE
  (typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
  to RM.
  
  If FILE is a libtool library, object or program, all the files associated
  with it are deleted. Otherwise, only FILE itself is deleted using RM."
    ;;
  
  compile)
    $echo \
  "Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
  
  Compile a source file into a libtool library object.
  
  This mode accepts the following additional options:
  
    -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
    -prefer-pic       try to building PIC objects only
    -prefer-non-pic   try to building non-PIC objects only
    -static           always build a \`.o' file suitable for static linking
  
  COMPILE-COMMAND is a command to be used in creating a \`standard' object file
  from the given SOURCEFILE.
  
  The output file name is determined by removing the directory component from
  SOURCEFILE, then substituting the C source code suffix \`.c' with the
  library object suffix, \`.lo'."
    ;;
  
  execute)
    $echo \
  "Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]...
  
  Automatically set library path, then run a program.
  
  This mode accepts the following additional options:
  
    -dlopen FILE      add the directory containing FILE to the library path
  
  This mode sets the library path environment variable according to \`-dlopen'
  flags.
  
  If any of the ARGS are libtool executable wrappers, then they are translated
  into their corresponding uninstalled binary, and any of their required library
  directories are added to the library path.
  
  Then, COMMAND is executed, with ARGS as arguments."
    ;;
  
  finish)
    $echo \
  "Usage: $modename [OPTION]... --mode=finish [LIBDIR]...
  
  Complete the installation of libtool libraries.
  
  Each LIBDIR is a directory that contains libtool libraries.
  
  The commands that this mode executes may require superuser privileges.  Use
  the \`--dry-run' option if you just want to see what would be executed."
    ;;
  
  install)
    $echo \
  "Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND...
  
  Install executables or libraries.
  
  INSTALL-COMMAND is the installation command.  The first component should be
  either the \`install' or \`cp' program.
  
  The rest of the components are interpreted as arguments to that command (only
  BSD-compatible install options are recognized)."
    ;;
  
  link)
    $echo \
  "Usage: $modename [OPTION]... --mode=link LINK-COMMAND...
  
  Link object files or libraries together to form another library, or to
  create an executable program.
  
  LINK-COMMAND is a command using the C compiler that you would use to create
  a program from several object files.
  
  The following components of LINK-COMMAND are treated specially:
  
    -all-static       do not do any dynamic linking at all
    -avoid-version    do not add a version suffix if possible
    -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
    -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
    -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
    -export-symbols SYMFILE
  		    try to export only the symbols listed in SYMFILE
    -export-symbols-regex REGEX
  		    try to export only the symbols matching REGEX
    -LLIBDIR          search LIBDIR for required installed libraries
    -lNAME            OUTPUT-FILE requires the installed library libNAME
    -module           build a library that can dlopened
    -no-fast-install  disable the fast-install mode
    -no-install       link a not-installable executable
    -no-undefined     declare that a library does not refer to external symbols
    -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
    -release RELEASE  specify package release information
    -rpath LIBDIR     the created library will eventually be installed in LIBDIR
    -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
    -static           do not do any dynamic linking of libtool libraries
    -version-info CURRENT[:REVISION[:AGE]]
  		    specify library version info [each variable defaults to 0]
  
  All other options (arguments beginning with \`-') are ignored.
  
  Every other argument is treated as a filename.  Files ending in \`.la' are
  treated as uninstalled libtool libraries, other files are standard or library
  object files.
  
  If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
  only library objects (\`.lo' files) may be specified, and \`-rpath' is
  required, except when creating a convenience library.
  
  If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
  using \`ar' and \`ranlib', or on Windows using \`lib'.
  
  If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
  is created, otherwise an executable program is created."
    ;;
  
  uninstall)
    $echo \
  "Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
  
  Remove libraries from an installation directory.
  
  RM is the name of the program to use to delete files associated with each FILE
  (typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
  to RM.
  
  If FILE is a libtool library, all the files associated with it are deleted.
  Otherwise, only FILE itself is deleted using RM."
    ;;
  
  *)
    $echo "$modename: invalid operation mode \`$mode'" 1>&2
    $echo "$help" 1>&2
    exit 1
    ;;
  esac
  
  echo
  $echo "Try \`$modename --help' for more information about other modes."
  
  exit 0
  
  # Local Variables:
  # mode:shell-script
  # sh-indentation:2
  # End:
  Index: ossp-pkg/srpc/libxds/shtool
  ============================================================
  $ cvs update -p -r1.1 shtool
  #!/bin/sh
  ##
  ##  GNU shtool -- The GNU Portable Shell Tool
  ##  Copyright (c) 1994-2001 Ralf S. Engelschall <rse@engelschall.com>
  ##
  ##  See http://www.gnu.org/software/shtool/ for more information.
  ##  See ftp://ftp.gnu.org/gnu/shtool/ for latest version.
  ##
  ##  Version:  1.5.4 (14-Jun-2001)
  ##  Contents: all available modules
  ##
  
  ##
  ##  This program is free software; you can redistribute it and/or modify
  ##  it under the terms of the GNU General Public License as published by
  ##  the Free Software Foundation; either version 2 of the License, or
  ##  (at your option) any later version.
  ##
  ##  This program is distributed in the hope that it will be useful,
  ##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  ##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  ##  General Public License for more details.
  ##
  ##  You should have received a copy of the GNU General Public License
  ##  along with this program; if not, write to the Free Software
  ##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  ##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  ##
  ##  NOTICE: Given that you include this file verbatim into your own
  ##  source tree, you are justified in saying that it remains separate
  ##  from your package, and that this way you are simply just using GNU
  ##  shtool. So, in this situation, there is no requirement that your
  ##  package itself is licensed under the GNU General Public License in
  ##  order to take advantage of GNU shtool.
  ##
  
  ##
  ##  Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]
  ##
  ##  Available commands:
  ##    echo       Print string with optional construct expansion
  ##    mdate      Pretty-print modification time of a file or dir
  ##    table      Pretty-print a field-separated list as a table
  ##    prop       Display progress with a running propeller
  ##    move       Move files with simultaneous substitution
  ##    install    Install a program, script or datafile
  ##    mkdir      Make one or more directories
  ##    mkln       Make link with calculation of relative paths
  ##    mkshadow   Make a shadow tree through symbolic links
  ##    fixperm    Fix file permissions inside a source tree
  ##    tarball    Roll distribution tarballs
  ##    guessos    Simple operating system guesser
  ##    arx        Extended archive command
  ##    slo        Separate linker options by library class
  ##    scpp       Sharing C Pre-Processor
  ##    version    Maintain a version information file
  ##    path       Deal with program paths
  ##
  
  if [ $# -eq 0 ]; then
      echo "$0:Error: invalid command line" 1>&2
      echo "$0:Hint:  run \`$0 -h' for usage" 1>&2
      exit 1
  fi
  if [ ".$1" = ".-h" -o ".$1" = ".--help" ]; then
      echo "This is GNU shtool, version 1.5.4 (14-Jun-2001)"
      echo "Copyright (c) 1994-2001 Ralf S. Engelschall <rse@engelschall.com>"
      echo "Report bugs to <bug-shtool@gnu.org>"
      echo ''
      echo "Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]"
      echo ''
      echo 'Available global <options>:'
      echo '  -v, --version   display shtool version information'
      echo '  -h, --help      display shtool usage help page (this one)'
      echo '  -d, --debug     display shell trace information'
      echo '  -r, --recreate  recreate this shtool script via shtoolize'
      echo ''
      echo 'Available <cmd-name> [<cmd-options>] [<cmd-args>]:'
      echo '  echo     [-n] [-e] [<str> ...]'
      echo '  mdate    [-n] [-z] [-s] [-d] [-f<str>] [-o<spec>] <path>'
      echo '  table    [-F<sep>] [-w<width>] [-c<cols>] [-s<strip>] <str><sep><str>...'
      echo '  prop     [-p<str>]'
      echo '  move     [-v] [-t] [-e] [-p] <src-file> <dst-file>'
      echo '  install  [-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>]'
      echo '           [-e<sed-cmd>] <file> [<file> ...] <path>'
      echo '  mkdir    [-t] [-f] [-p] [-m<mode>] <dir> [<dir> ...]'
      echo '  mkln     [-t] [-f] [-s] <src-path> [<src-path> ...] <dst-path>'
      echo '  mkshadow [-v] [-t] [-a] <src-dir> <dst-dir>'
      echo '  fixperm  [-v] [-t] <path> [<path> ...]'
      echo '  tarball  [-t] [-v] [-o<tarball>] [-c<prog>] [-d<dir>] [-u<user>]'
      echo '           [-g<group>] [-e<pattern>] <path> [<path> ...]'
      echo '  guessos  '
      echo '  arx      [-t] [-C<cmd>] <op> <archive> [<file> ...]'
      echo '  slo      [-p<str>] -- -L<dir> -l<lib> [-L<dir> -l<lib> ...]'
      echo '  scpp     [-v] [-p] [-f<filter>] [-o<ofile>] [-t<tfile>] [-M<mark>]'
      echo '           [-D<dname>] [-C<cname>] <file> [<file> ...]'
      echo '  version  [-l<lang>] [-n<name>] [-p<prefix>] [-s<version>] [-e]'
      echo '           [-i<knob>] [-d<type>] <file>'
      echo '  path     [-s] [-r] [-d] [-b] [-m] [-p<path>] <str> [<str> ...]'
      echo ''
      exit 0
  fi
  if [ ".$1" = ".-v" -o ".$1" = ."--version" ]; then
      echo "GNU shtool 1.5.4 (14-Jun-2001)"
      exit 0
  fi
  if [ ".$1" = ".-r" -o ".$1" = ."--recreate" ]; then
      shtoolize -oshtool all
      exit 0
  fi
  if [ ".$1" = ".-d" -o ".$1" = ."--debug" ]; then
      shift
      set -x
  fi
  name=`echo "$0" | sed -e 's;.*/\([^/]*\)$;\1;' -e 's;-sh$;;' -e 's;\.sh$;;'`
  case "$name" in
      echo|mdate|table|prop|move|install|mkdir|mkln|mkshadow|fixperm|tarball|guessos|arx|slo|scpp|version|path )
          #   implicit tool command selection
          tool="$name"
          ;;
      * )
          #   explicit tool command selection
          tool="$1"
          shift
          ;;
  esac
  arg_spec=""
  opt_spec=""
  gen_tmpfile=no
  
  ##
  ##  DISPATCH INTO SCRIPT PROLOG
  ##
  
  case $tool in
      echo )
          str_tool="echo"
          str_usage="[-n] [-e] [<str> ...]"
          arg_spec="0+"
          opt_spec="n.e."
          opt_n=no
          opt_e=no
          ;;
      mdate )
          str_tool="mdate"
          str_usage="[-n] [-z] [-s] [-d] [-f<str>] [-o<spec>] <path>"
          arg_spec="1="
          opt_spec="n.z.s.d.f:o:"
          opt_n=no
          opt_z=no
          opt_s=no
          opt_d=no
          opt_f=" "
          opt_o="dmy"
          ;;
      table )
          str_tool="table"
          str_usage="[-F<sep>] [-w<width>] [-c<cols>] [-s<strip>] <str><sep><str>..."
          arg_spec="1+"
          opt_spec="F:w:c:s:"
          opt_F=":"
          opt_w=15
          opt_c=3
          opt_s=79
          ;;
      prop )
          str_tool="prop"
          str_usage="[-p<str>]"
          arg_spec="0="
          opt_spec="p:"
          opt_p=""
          ;;
      move )
          str_tool="move"
          str_usage="[-v] [-t] [-e] [-p] <src-file> <dst-file>"
          arg_spec="2="
          opt_spec="v.t.e.p."
          opt_v=no
          opt_t=no
          opt_e=no
          opt_p=no
          ;;
      install )
          str_tool="install"
          str_usage="[-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>] [-e<sed-cmd>] <file> [<file> ...] <path>"
          arg_spec="2+"
          opt_spec="v.t.c.C.s.m:o:g:e+"
          opt_v=no
          opt_t=no
          opt_c=no
          opt_C=no
          opt_s=no
          opt_m="0755"
          opt_o=""
          opt_g=""
          opt_e=""
          ;;
      mkdir )
          str_tool="mkdir"
          str_usage="[-t] [-f] [-p] [-m<mode>] <dir> [<dir> ...]"
          arg_spec="1+"
          opt_spec="t.f.p.m:"
          opt_t=no
          opt_f=no
          opt_p=no
          opt_m=""
          ;;
      mkln )
          str_tool="mkln"
          str_usage="[-t] [-f] [-s] <src-path> [<src-path> ...] <dst-path>"
          arg_spec="2+"
          opt_spec="t.f.s."
          opt_t=no
          opt_f=no
          opt_s=no
          ;;
      mkshadow )
          str_tool="mkshadow"
          str_usage="[-v] [-t] [-a] <src-dir> <dst-dir>"
          arg_spec="2="
          opt_spec="v.t.a."
          opt_v=no
          opt_t=no
          opt_a=no
          ;;
      fixperm )
          str_tool="fixperm"
          str_usage="[-v] [-t] <path> [<path> ...]"
          arg_spec="1+"
          opt_spec="v.t."
          opt_v=no
          opt_t=no
          ;;
      tarball )
          str_tool="tarball"
          str_usage="[-t] [-v] [-o<tarball>] [-c<prog>] [-d<dir>] [-u<user>] [-g<group>] [-e<pattern>] <path> [<path> ...]"
          gen_tmpfile=yes
          arg_spec="1+"
          opt_spec="t.v.o:c:d:u:g:e:"
          opt_t=no
          opt_v=no
          opt_o=""
          opt_c=""
          opt_d=""
          opt_u=""
          opt_g=""
          opt_e="CVS,\\.cvsignore,\\.[oa]\$"
          ;;
      guessos )
          str_tool="guessos"
          str_usage=""
          arg_spec="0="
          opt_spec=""
          ;;
      arx )
          str_tool="arx"
          str_usage="[-t] [-C<cmd>] <op> <archive> [<file> ...]"
          arg_spec="2+"
          opt_spec="t.C:"
          opt_t=no
          opt_C="ar"
          ;;
      slo )
          str_tool="slo"
          str_usage="[-p<str>] -- -L<dir> -l<lib> [-L<dir> -l<lib> ...]"
          arg_spec="1+"
          opt_spec="p:"
          opt_p="SLO_"
          ;;
      scpp )
          str_tool="scpp"
          str_usage="[-v] [-p] [-f<filter>] [-o<ofile>] [-t<tfile>] [-M<mark>] [-D<dname>] [-C<cname>] <file> [<file> ...]"
          gen_tmpfile=yes
          arg_spec="1+"
          opt_spec="v.p.f+o:t:M:D:C:"
          opt_v=no
          opt_p=no
          opt_f=""
          opt_o="lib.h"
          opt_t="lib.h.in"
          opt_M="%%MARK%%"
          opt_D="cpp"
          opt_C="intern"
          ;;
      version )
          str_tool="version"
          str_usage="[-l<lang>] [-n<name>] [-p<prefix>] [-s<version>] [-e] [-i<knob>] [-d<type>] <file>"
          arg_spec="1="
          opt_spec="l:n:p:s:i:e.d:"
          opt_l="txt"
          opt_n="unknown"
          opt_p=""
          opt_s=""
          opt_e="no"
          opt_i=""
          opt_d="short"
          ;;
      path )
          str_tool="path"
          str_usage="[-s] [-r] [-d] [-b] [-m] [-p<path>] <str> [<str> ...]"
          gen_tmpfile=yes
          arg_spec="1+"
          opt_spec="s.r.d.b.m.p:"
          opt_s=no
          opt_r=no
          opt_d=no
          opt_b=no
          opt_m=no
          opt_p="$PATH"
          ;;
      -* )
          echo "$0:Error: unknown option \`$tool'" 2>&1
          echo "$0:Hint:  run \`$0 -h' for usage" 2>&1
          exit 1
          ;;
      * )
          echo "$0:Error: unknown command \`$tool'" 2>&1
          echo "$0:Hint:  run \`$0 -h' for usage" 2>&1
          exit 1
          ;;
  esac
  
  ##
  ##  COMMON UTILITY CODE
  ##
  
  #   determine name of tool
  if [ ".$tool" != . ]; then
      #   used inside shtool script
      toolcmd="$0 $tool"
      toolcmdhelp="shtool $tool"
      msgprefix="shtool:$tool"
  else
      #   used as standalone script
      toolcmd="$0"
      toolcmdhelp="sh $0"
      msgprefix="$str_tool"
  fi
  
  #   parse argument specification string
  eval `echo $arg_spec |\
        sed -e 's/^\([0-9]*\)\([+=]\)/arg_NUMS=\1; arg_MODE=\2/'`
  
  #   parse option specification string
  eval `echo h.$opt_spec |\
        sed -e 's/\([a-zA-Z0-9]\)\([.:+]\)/opt_MODE_\1=\2;/g'`
  
  #   interate over argument line
  opt_PREV=''
  while [ $# -gt 0 ]; do
      #   special option stops processing
      if [ ".$1" = ".--" ]; then
          shift
          break
      fi
  
      #   determine option and argument
      opt_ARG_OK=no
      if [ ".$opt_PREV" != . ]; then
          #   merge previous seen option with argument
          opt_OPT="$opt_PREV"
          opt_ARG="$1"
          opt_ARG_OK=yes
          opt_PREV=''
      else
          #   split argument into option and argument
          case "$1" in
              -[a-zA-Z0-9]*)
                  eval `echo "x$1" |\
                        sed -e 's/^x-\([a-zA-Z0-9]\)/opt_OPT="\1";/' \
                            -e 's/";\(.*\)$/"; opt_ARG="\1"/'`
                  ;;
              -[a-zA-Z0-9])
                  opt_OPT=`echo "x$1" | cut -c3-`
                  opt_ARG=''
                  ;;
              *)
                  break
                  ;;
          esac
      fi
  
      #   eat up option
      shift
  
      #   determine whether option needs an argument
      eval "opt_MODE=\$opt_MODE_${opt_OPT}"
      if [ ".$opt_ARG" = . -a ".$opt_ARG_OK" != .yes ]; then
          if [ ".$opt_MODE" = ".:" -o ".$opt_MODE" = ".+" ]; then
              opt_PREV="$opt_OPT"
              continue
          fi
      fi
  
      #   process option
      case $opt_MODE in
          '.' )
              #   boolean option
              eval "opt_${opt_OPT}=yes"
              ;;
          ':' )
              #   option with argument (multiple occurances override)
              eval "opt_${opt_OPT}=\"\$opt_ARG\""
              ;;
          '+' )
              #   option with argument (multiple occurances append)
              eval "opt_${opt_OPT}=\"\$opt_${opt_OPT} \$opt_ARG\""
              ;;
          * )
              echo "$msgprefix:Error: unknown option: \`-$opt_OPT'" 1>&2
              echo "$msgprefix:Hint:  run \`$toolcmdhelp -h' or \`man shtool' for details" 1>&2
              exit 1
              ;;
      esac
  done
  if [ ".$opt_PREV" != . ]; then
      echo "$msgprefix:Error: missing argument to option \`-$opt_PREV'" 1>&2
      echo "$msgprefix:Hint:  run \`$toolcmdhelp -h' or \`man shtool' for details" 1>&2
      exit 1
  fi
  
  #   process help option
  if [ ".$opt_h" = .yes ]; then
      echo "Usage: $toolcmdhelp $str_usage"
      exit 0
  fi
  
  #   complain about incorrect number of arguments
  case $arg_MODE in
      '=' )
          if [ $# -ne $arg_NUMS ]; then
              echo "$msgprefix:Error: invalid number of arguments (exactly $arg_NUMS expected)" 1>&2
              echo "$msgprefix:Hint:  run \`$toolcmd -h' or \`man shtool' for details" 1>&2
              exit 1
          fi
          ;;
      '+' )
          if [ $# -lt $arg_NUMS ]; then
              echo "$msgprefix:Error: invalid number of arguments (at least $arg_NUMS expected)" 1>&2
              echo "$msgprefix:Hint:  run \`$toolcmd -h' or \`man shtool' for details" 1>&2
              exit 1
          fi
          ;;
  esac
  
  #   establish a temporary file on request
  if [ ".$gen_tmpfile" = .yes ]; then
      if [ ".$TMPDIR" != . ]; then
          tmpdir="$TMPDIR"
      elif [ ".$TEMPDIR" != . ]; then
          tmpdir="$TEMPDIR"
      else
          tmpdir="/tmp"
      fi
      tmpfile="$tmpdir/.shtool.$$"
      rm -f $tmpfile >/dev/null 2>&1
      touch $tmpfile
      chmod 600 $tmpfile
  fi
  
  ##
  ##  DISPATCH INTO SCRIPT BODY
  ##
  
  case $tool in
  
  echo )
      ##
      ##  echo -- Print string with optional construct expansion
      ##  Copyright (c) 1998-2001 Ralf S. Engelschall <rse@engelschall.com>
      ##  Originally written for WML as buildinfo
      ##
      
      text="$*"
      
      #   check for broken escape sequence expansion
      seo=''
      bytes=`echo '\1' | wc -c | awk '{ printf("%s", $1); }'`
      if [ ".$bytes" != .3 ]; then
          bytes=`echo -E '\1' | wc -c | awk '{ printf("%s", $1); }'`
          if [ ".$bytes" = .3 ]; then
              seo='-E'
          fi
      fi
      
      #   check for existing -n option (to suppress newline)
      minusn=''
      bytes=`echo -n 123 2>/dev/null | wc -c | awk '{ printf("%s", $1); }'`
      if [ ".$bytes" = .3 ]; then
          minusn='-n'
      fi
      
      #   determine terminal bold sequence
      term_bold=''
      term_norm=''
      if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[Bb]'`" != . ]; then
          case $TERM in
              #   for the most important terminal types we directly know the sequences
              xterm|xterm*|vt220|vt220*)
                  term_bold=`awk 'BEGIN { printf("%c%c%c%c", 27, 91, 49, 109); }' </dev/null 2>/dev/null`
                  term_norm=`awk 'BEGIN { printf("%c%c%c", 27, 91, 109); }' </dev/null 2>/dev/null`
                  ;;
              vt100|vt100*)
                  term_bold=`awk 'BEGIN { printf("%c%c%c%c%c%c", 27, 91, 49, 109, 0, 0); }' </dev/null 2>/dev/null`
                  term_norm=`awk 'BEGIN { printf("%c%c%c%c%c", 27, 91, 109, 0, 0); }' </dev/null 2>/dev/null`
                  ;;
              #   for all others, we try to use a possibly existing `tput' or `tcout' utility
              * )
                  paths=`echo $PATH | sed -e 's/:/ /g'`
                  for tool in tput tcout; do
                      for dir in $paths; do
                          if [ -r "$dir/$tool" ]; then
                              for seq in bold md smso; do # 'smso' is last
                                  bold="`$dir/$tool $seq 2>/dev/null`"
                                  if [ ".$bold" != . ]; then
                                      term_bold="$bold"
                                      break
                                  fi
                              done
                              if [ ".$term_bold" != . ]; then
                                  for seq in sgr0 me rmso reset; do # 'reset' is last
                                      norm="`$dir/$tool $seq 2>/dev/null`"
                                      if [ ".$norm" != . ]; then
                                          term_norm="$norm"
                                          break
                                      fi
                                  done
                              fi
                              break
                          fi
                      done
                      if [ ".$term_bold" != . -a ".$term_norm" != . ]; then
                          break;
                      fi
                  done
                  ;;
          esac
          if [ ".$term_bold" = . -o ".$term_norm" = . ]; then
              echo "$msgprefix:Warning: unable to determine terminal sequence for bold mode" 1>&2
          fi
      fi
      
      #   determine user name
      username=''
      if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[uUgG]'`" != . ]; then
          username="$LOGNAME"
          if [ ".$username" = . ]; then
              username="$USER"
              if [ ".$username" = . ]; then
                  username="`(whoami) 2>/dev/null |\
                             awk '{ printf("%s", $1); }'`"
                  if [ ".$username" = . ]; then
                      username="`(who am i) 2>/dev/null |\
                                 awk '{ printf("%s", $1); }'`"
                      if [ ".$username" = . ]; then
                          username='unknown'
                      fi
                  fi
              fi
          fi
      fi
      
      #   determine user id
      userid=''
      if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%U'`" != . ]; then
          userid="`(id -u) 2>/dev/null`"
          if [ ".$userid" = . ]; then
              str="`(id) 2>/dev/null`"
              if [ ".`echo $str | grep '^uid[ 	]*=[ 	]*[0-9]*('`" != . ]; then
                  userid=`echo $str | sed -e 's/^uid[ 	]*=[ 	]*//' -e 's/(.*//'`
              fi
              if [ ".$userid" = . ]; then
                  userid=`egrep "^${username}:" /etc/passwd 2>/dev/null | \
                          sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'`
                  if [ ".$userid" = . ]; then
                      userid=`(ypcat passwd) 2>/dev/null |
                              egrep "^${username}:" | \
                              sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'`
                      if [ ".$userid" = . ]; then
                          userid='?'
                      fi
                  fi
              fi
          fi
      fi
      
      #   determine (primary) group id
      groupid=''
      if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[gG]'`" != . ]; then
          groupid=`egrep "^${username}:" /etc/passwd 2>/dev/null | \
                   sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
          if [ ".$groupid" = . ]; then
              groupid=`(ypcat passwd) 2>/dev/null | egrep "^${username}:" | \
                       sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
              if [ ".$groupid" = . ]; then
                  groupid='?'
              fi
          fi
      fi
      
      #   determine (primary) group name
      groupname=''
      if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%g'`" != . ]; then
          groupname=`egrep "^[^:]*:[^:]*:${groupid}:" /etc/group 2>/dev/null | \
                     sed -e 's/:.*$//'`
          if [ ".$groupname" = . ]; then
              groupname=`(ypcat group) 2>/dev/null | \
                         egrep "^[^:]*:[^:]*:${groupid}:" | \
                         sed -e 's/:.*$//'`
              if [ ".$groupname" = . ]; then
                  groupname='?'
              fi
          fi
      fi
      
      #   determine host and domain name
      hostname=''
      domainname=''
      if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%h'`" != . ]; then
          hostname="`(uname -n) 2>/dev/null |\
                     awk '{ printf("%s", $1); }'`"
          if [ ".$hostname" = . ]; then
              hostname="`(hostname) 2>/dev/null |\
                         awk '{ printf("%s", $1); }'`"
              if [ ".$hostname" = . ]; then
                  hostname='unknown'
              fi
          fi
          case $hostname in
              *.* )
                  domainname=".`echo $hostname | cut -d. -f2-`"
                  hostname="`echo $hostname | cut -d. -f1`"
                  ;;
          esac
      fi
      if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%d'`" != . ]; then
          if [ ".$domainname" = . ]; then
              if [ -f /etc/resolv.conf ]; then
                  domainname="`egrep '^[ 	]*domain' /etc/resolv.conf | head -1 |\
                               sed -e 's/.*domain//' \
                                   -e 's/^[ 	]*//' -e 's/^ *//' -e 's/^	*//' \
                                   -e 's/^\.//' -e 's/^/./' |\
                               awk '{ printf("%s", $1); }'`"
                  if [ ".$domainname" = . ]; then
                      domainname="`egrep '^[ 	]*search' /etc/resolv.conf | head -1 |\
                                   sed -e 's/.*search//' \
                                       -e 's/^[ 	]*//' -e 's/^ *//' -e 's/^	*//' \
                                       -e 's/ .*//' -e 's/	.*//' \
                                       -e 's/^\.//' -e 's/^/./' |\
                                   awk '{ printf("%s", $1); }'`"
                  fi
              fi
          fi
      fi
      
      #   determine current time
      time_day=''
      time_month=''
      time_year=''
      time_monthname=''
      if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[DMYm]'`" != . ]; then
          time_day=`date '+%d'`
          time_month=`date '+%m'`
          time_year=`date '+%Y' 2>/dev/null`
          if [ ".$time_year" = . ]; then
              time_year=`date '+%y'`
              case $time_year in
                  [5-9][0-9]) time_year="19$time_year" ;;
                  [0-4][0-9]) time_year="20$time_year" ;;
              esac
          fi
          case $time_month in
              1|01) time_monthname='Jan' ;;
              2|02) time_monthname='Feb' ;;
              3|03) time_monthname='Mar' ;;
              4|04) time_monthname='Apr' ;;
              5|05) time_monthname='May' ;;
              6|06) time_monthname='Jun' ;;
              7|07) time_monthname='Jul' ;;
              8|08) time_monthname='Aug' ;;
              9|09) time_monthname='Sep' ;;
                10) time_monthname='Oct' ;;
                11) time_monthname='Nov' ;;
                12) time_monthname='Dec' ;;
          esac
      fi
      
      #   expand special ``%x'' constructs
      if [ ".$opt_e" = .yes ]; then
          text=`echo $seo "$text" |\
                sed -e "s/%B/${term_bold}/g" \
                    -e "s/%b/${term_norm}/g" \
                    -e "s/%u/${username}/g" \
                    -e "s/%U/${userid}/g" \
                    -e "s/%g/${groupname}/g" \
                    -e "s/%G/${groupid}/g" \
                    -e "s/%h/${hostname}/g" \
                    -e "s/%d/${domainname}/g" \
                    -e "s/%D/${time_day}/g" \
                    -e "s/%M/${time_month}/g" \
                    -e "s/%Y/${time_year}/g" \
                    -e "s/%m/${time_monthname}/g" 2>/dev/null`
      fi
      
      #   create output
      if [ .$opt_n = .no ]; then
          echo $seo "$text"
      else
          #   the harder part: echo -n is best, because
          #   awk may complain about some \xx sequences.
          if [ ".$minusn" != . ]; then
              echo $seo $minusn "$text"
          else
              echo dummy | awk '{ printf("%s", TEXT); }' TEXT="$text"
          fi
      fi
      ;;
  
  mdate )
      ##
      ##  mdate -- Pretty-print modification time of a file or dir
      ##  Copyright (c) 1995-1997 Free Software Foundation, Inc.
      ##  Originally idea and basis code by Ulrich Drepper
      ##  Enhanced by Ralf S. Engelschall for shtool
      ##
      
      fod="$1"
      case "$opt_o" in
          [dmy][dmy][dmy] )
              ;;
          * ) echo "$msgprefix:Error: invalid argument to option \`-o': $opt_o" 1>&2
              exit 1
              ;;
      esac
      if [ ! -r "$fod" ]; then
          echo "$msgprefix:Error: file or directory not found: $fod" 1>&2
          exit 1
      fi
      
      #   prevent "date" giving response in another language
      LANG=C;    export LANG
      LC_ALL=C;  export LC_ALL
      LC_TIME=C; export LC_TIME
      
      #   get the extended ls output of the file or directory.
      if ls -L /dev/null >/dev/null 2>&1; then
          set - x`ls -L -l -d $fod`
      else
          set - x`ls -l -d $fod`
      fi
      
      #   The month is at least the fourth argument
      #   (3 shifts here, the next inside the loop).
      shift; shift; shift
      
      #   Find the month. Next argument is day, followed by the year or time.
      month=""
      while [ ".$month" = . ]; do
          shift
          case $1 in
              Jan) month=January;   nummonth=1  ;;
              Feb) month=February;  nummonth=2  ;;
              Mar) month=March;     nummonth=3  ;;
              Apr) month=April;     nummonth=4  ;;
              May) month=May;       nummonth=5  ;;
              Jun) month=June;      nummonth=6  ;;
              Jul) month=July;      nummonth=7  ;;
              Aug) month=August;    nummonth=8  ;;
              Sep) month=September; nummonth=9  ;;
              Oct) month=October;   nummonth=10 ;;
              Nov) month=November;  nummonth=11 ;;
              Dec) month=December;  nummonth=12 ;;
          esac
      done
      day="$2"
      year="$3"
      
      #   We finally have to deal with the problem that the "ls" output
      #   gives either the time of the day or the year.
      case $year in
          *:*)
              this_year=`date '+%Y' 2>/dev/null`
              if [ ".$this_year" = . ]; then
                  this_year=`date '+%y'`
                  case $this_year in
                      [5-9][0-9]) this_year="19$this_year" ;;
                      [0-4][0-9]) this_year="20$this_year" ;;
                  esac
              fi
              #   for the following months of the last year the time notation
              #   is usually also used for files modified in the last year.
              this_month=`date '+%m'`
              if (expr $nummonth \> $this_month) >/dev/null; then
                  this_year=`expr $this_year - 1`
              fi
              year="$this_year"
              ;;
      esac
      
      #   Optionally fill day and month with leeding zeros
      if [ ".$opt_z" = .yes ]; then
          case $day in
              [0-9][0-9] ) ;;
                   [0-9] ) day="0$day" ;;
          esac
          case $nummonth in
              [0-9][0-9] ) ;;
                   [0-9] ) nummonth="0$nummonth" ;;
          esac
      fi
      
      #   Optionally use digits for month
      if [ ".$opt_d" = .yes ]; then
          month="$nummonth"
      fi
      
      #   Optionally shorten the month name to three characters
      if [ ".$opt_s" = .yes ]; then
          month=`echo $month | cut -c1-3`
      fi
      
      #   Output the resulting date string
      echo dummy | awk '{
          for (i = 0; i < 3; i++) {
              now = substr(order, 1, 1);
              order = substr(order, 2);
              if (now == "d")
                  out = day;
              else if (now == "m")
                  out = month;
              else if (now == "y")
                  out = year;
              if (i < 2)
                  printf("%s%s", out, field);
              else
                  printf("%s", out);
          }
          if (newline != "yes")
              printf("\n");
      }' "day=$day" "month=$month" "year=$year" \
         "field=$opt_f" "order=$opt_o" "newline=$opt_n"
      ;;
  
  table )
      ##
      ##  table -- Pretty-print a field-separated list as a table
      ##  Copyright (c) 1998-2001 Ralf S. Engelschall <rse@engelschall.com>
      ##  Originally written for Apache
      ##
      
      if [ $opt_c -gt 4 ]; then
          echo "$msgprefix:Error: Invalid number of colums (1..4 allowed only)" 1>&2
          exit 1
      fi
      case "x$opt_F" in
          x? ) ;;
          *  ) echo "$msgprefix:Error: Invalid separator (one char allowed only)" 1>&2; exit 1 ;;
      esac
      
      #   split the list into a table
      list=`
          IFS="$opt_F"
          for entry in $*; do
              if [ ".$entry" != . ]; then
                  echo "$entry"
              fi
          done |\
          awk "
              BEGIN { list = \"\"; n = 0; }
              {
                  list = list \\$1;
                  n = n + 1;
                  if (n < $opt_c) {
                      list = list \":\";
                  }
                  if (n == $opt_c) {
                      list = list \"\\n\";
                      n = 0;
                  }
              }
              END { print list; }
           "
      `
      
      #   format table cells and make sure table
      #   doesn't exceed maximum width
      OIFS="$IFS"
      IFS='
  '
      for entry in $list; do
          case $opt_c in
              1 ) eval "echo \"\${entry}\" | awk -F: '{ printf(\"%-${opt_w}s\\n\", \$1); }'" ;;
              2 ) eval "echo \"\${entry}\" | awk -F: '{ printf(\"%-${opt_w}s %-${opt_w}s\\n\", \$1, \$2); }'" ;;
              3 ) eval "echo \"\${entry}\" | awk -F: '{ printf(\"%-${opt_w}s %-${opt_w}s %-${opt_w}s\\n\", \$1, \$2, \$3); }'" ;;
              4 ) eval "echo \"\${entry}\" | awk -F: '{ printf(\"%-${opt_w}s %-${opt_w}s %-${opt_w}s %-${opt_w}s\\n\", \$1, \$2, \$3, \$4); }'" ;;
          esac
      done |\
      awk "{
          if (length(\$0) > $opt_s) {
              printf(\"%s\\n\", substr(\$0, 0, $opt_s-1));
          } else {
              print \$0;
          }
      }"
      IFS="$OIFS"
      ;;
  
  prop )
      ##
      ##  prop -- Display progress with a running propeller
      ##  Copyright (c) 1998-2001 Ralf S. Engelschall <rse@engelschall.com>
      ##  Originally written for mod_ssl
      ##
      
      perl=''
      for dir in `echo $PATH | sed -e 's/:/ /g'` .; do
          if [ -f "$dir/perl" ]; then
              perl="$dir/perl"
              break
          fi
      done
      if [ ".$perl" != . ]; then
          #   Perl is preferred because writing to STDERR in
          #   Perl really writes immediately as one would expect
          $perl -e '
              @p = ("|","/","-","\\");
              $i = 0;
              while (<STDIN>) {
                  printf(STDERR "\r%s...%s\b", $ARGV[0], $p[$i++]);
                  $i = 0 if ($i > 3);
              }
              printf(STDERR "\r%s    \n", $ARGV[0]);
          ' "$opt_p"
      else
          #   But if Perl doesn't exists we use Awk even
          #   some Awk's buffer even the /dev/stderr writing :-(
          awk '
              BEGIN {
                  split("|#/#-#\\", p, "#");
                  i = 1;
              }
              {
                  printf("\r%s%c\b", prefix, p[i++]) > "/dev/stderr";
                  if (i > 4) { i = 1; }
              }
              END {
                  printf("\r%s    \n", prefix) > "/dev/stderr";
              }
          ' "prefix=$opt_p"
      fi
      ;;
  
  move )
      ##
      ##  move -- Move files with simultaneous substitution
      ##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
      ##  Originally written for shtool
      ##
      
      src="$1"
      dst="$2"
      
      #   consistency checks
      if [ ".$src" = . -o ".$dst" = . ]; then
          echo "$msgprefix:Error: Invalid arguments" 1>&2
          exit 1
      fi
      if [ ".$src" = ".$dst" ]; then
          echo "$msgprefix:Error: Source and destination files are the same" 1>&2
          exit 1
      fi
      expsrc="$src"
      if [ ".$opt_e" = .yes ]; then
          expsrc="`echo $expsrc`"
      fi
      if [ ".$opt_e" = .yes ]; then
          if [ ".`echo "$src" | sed -e 's;^.*\\*.*$;;'`" = ".$src" ]; then
              echo "$msgprefix:Error: Source doesn't contain wildcard ('*'): $dst" 1>&2
              exit 1
          fi
          if [ ".`echo "$dst" | sed -e 's;^.*%[1-9].*$;;'`" = ".$dst" ]; then
              echo "$msgprefix:Error: Destination doesn't contain substitution ('%N'): $dst" 1>&2
              exit 1
          fi
          if [ ".$expsrc" = ".$src" ]; then
              echo "$msgprefix:Error: Sources not found or no asterisk : $src" 1>&2
              exit 1
          fi
      else
          if [ ! -r "$src" ]; then
              echo "$msgprefix:Error: Source not found: $src" 1>&2
              exit 1
          fi
      fi
      
      #   determine substitution patterns
      if [ ".$opt_e" = .yes ]; then
          srcpat=`echo "$src" | sed -e 's/\\./\\\\./g' -e 's/;/\\;/g' -e 's;\\*;\\\\(.*\\\\);g'`
          dstpat=`echo "$dst" | sed -e 's;%\([1-9]\);\\\\\1;g'`
      fi
      
      #   iterate over source(s)
      for onesrc in $expsrc; do
          if [ .$opt_e = .yes ]; then
              onedst=`echo $onesrc | sed -e "s;$srcpat;$dstpat;"`
          else
              onedst="$dst"
          fi
          errorstatus=0
          if [ ".$opt_v" = .yes ]; then
              echo "$onesrc -> $onedst"
          fi
          if [ ".$opt_p" = .yes ]; then
              if [ -r $onedst ]; then
                  if cmp -s $onesrc $onedst; then
                      if [ ".$opt_t" = .yes ]; then
                          echo "rm -f $onesrc" 1>&2
                      fi
                      rm -f $onesrc || errorstatus=$?
                  else
                      if [ ".$opt_t" = .yes ]; then
                          echo "mv -f $onesrc $onedst" 1>&2
                      fi
                      mv -f $onesrc $onedst || errorstatus=$?
                  fi
              else
                  if [ ".$opt_t" = .yes ]; then
                      echo "mv -f $onesrc $onedst" 1>&2
                  fi
                  mv -f $onesrc $onedst || errorstatus=$?
              fi
          else
              if [ ".$opt_t" = .yes ]; then
                  echo "mv -f $onesrc $onedst" 1>&2
              fi
              mv -f $onesrc $onedst || errorstatus=$?
          fi
          if [ $errorstatus -ne 0 ]; then
              break;
          fi
      done
      exit $errorstatus
      ;;
  
  install )
      ##
      ##  install -- Install a program, script or datafile
      ##  Copyright (c) 1997-2001 Ralf S. Engelschall <rse@engelschall.com>
      ##  Originally written for shtool
      ##
      
      #   determine source(s) and destination
      argc=$#
      srcs=""
      while [ $# -gt 1 ]; do
          srcs="$srcs $1"
          shift
      done
      dstpath="$1"
      
      #   type check for destination
      dstisdir=0
      if [ -d $dstpath ]; then
          dstpath=`echo "$dstpath" | sed -e 's:/$::'`
          dstisdir=1
      fi
      
      #   consistency check for destination
      if [ $argc -gt 2 -a $dstisdir = 0 ]; then
          echo "$msgprefix:Error: multiple sources require destination to be directory" 1>&2
          exit 1
      fi
      
      #   iterate over all source(s)
      for src in $srcs; do
          dst=$dstpath
      
          #   if destination is a directory, append the input filename
          if [ $dstisdir = 1 ]; then
              dstfile=`echo "$src" | sed -e 's;.*/\([^/]*\)$;\1;'`
              dst="$dst/$dstfile"
          fi
      
          #   check for correct arguments
          if [ ".$src" = ".$dst" ]; then
              echo "$msgprefix:Warning: source and destination are the same - skipped" 1>&2
              continue
          fi
          if [ -d "$src" ]; then
              echo "$msgprefix:Warning: source \`$src' is a directory - skipped" 1>&2
              continue
          fi
      
          #   make a temp file name in the destination directory
          dsttmp=`echo $dst |\
                  sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;' -e 's;^$;.;' \
                      -e "s;\$;/#INST@$$#;"`
      
          #   verbosity
          if [ ".$opt_v" = .yes ]; then
              echo "$src -> $dst" 1>&2
          fi
      
          #   copy or move the file name to the temp name
          #   (because we might be not allowed to change the source)
          if [ ".$opt_C" = .yes ]; then
              opt_c=yes
          fi
          if [ ".$opt_c" = .yes ]; then
              if [ ".$opt_t" = .yes ]; then
                  echo "cp $src $dsttmp" 1>&2
              fi
              cp $src $dsttmp || exit $?
          else
              if [ ".$opt_t" = .yes ]; then
                  echo "mv $src $dsttmp" 1>&2
              fi
              mv $src $dsttmp || exit $?
          fi
      
          #   adjust the target file
          if [ ".$opt_e" != . ]; then
              sed='sed'
              for e in $opt_e; do
                  sed="$sed -e '$e'"
              done
              cp $dsttmp $dsttmp.old
              eval "$sed <$dsttmp.old >$dsttmp" || exit $?
              rm -f $dsttmp.old
          fi
          if [ ".$opt_s" = .yes ]; then
              if [ ".$opt_t" = .yes ]; then
                  echo "strip $dsttmp" 1>&2
              fi
              strip $dsttmp || exit $?
          fi
          if [ ".$opt_o" != . ]; then
              if [ ".$opt_t" = .yes ]; then
                  echo "chown $opt_o $dsttmp" 1>&2
              fi
              chown $opt_o $dsttmp || exit $?
          fi
          if [ ".$opt_g" != . ]; then
              if [ ".$opt_t" = .yes ]; then
                  echo "chgrp $opt_g $dsttmp" 1>&2
              fi
              chgrp $opt_g $dsttmp || exit $?
          fi
          if [ ".$opt_m" != ".-" ]; then
              if [ ".$opt_t" = .yes ]; then
                  echo "chmod $opt_m $dsttmp" 1>&2
              fi
              chmod $opt_m $dsttmp || exit $?
          fi
      
          #   determine whether to do a quick install
          #   (has to be done _after_ the strip was already done)
          quick=no
          if [ ".$opt_C" = .yes ]; then
              if [ -r $dst ]; then
                  if cmp -s $src $dst; then
                      quick=yes
                  fi
              fi
          fi
      
          #   finally, install the file to the real destination
          if [ $quick = yes ]; then
              if [ ".$opt_t" = .yes ]; then
                  echo "rm -f $dsttmp" 1>&2
              fi
              rm -f $dsttmp
          else
              if [ ".$opt_t" = .yes ]; then
                  echo "rm -f $dst && mv $dsttmp $dst" 1>&2
              fi
              rm -f $dst && mv $dsttmp $dst
          fi
      done
      ;;
  
  mkdir )
      ##
      ##  mkdir -- Make one or more directories
      ##  Copyright (c) 1996-2001 Ralf S. Engelschall <rse@engelschall.com>
      ##  Originally written for public domain by Noah Friedman <friedman@prep.ai.mit.edu>
      ##  Cleaned up and enhanced for shtool
      ##
      
      errstatus=0
      for p in ${1+"$@"}; do
          #   if the directory already exists...
          if [ -d "$p" ]; then
              if [ ".$opt_f" = .no -a ".$opt_p" = .no ]; then
                  echo "$msgprefix:Error: directory already exists: $p" 1>&2
                  errstatus=1
                  break
              else
                  continue
              fi
          fi
          #   if the directory has to be created...
          if [ ".$opt_p" = .no ]; then
              if [ ".$opt_t" = .yes ]; then
                  echo "mkdir $p" 1>&2
              fi
              mkdir $p || errstatus=$?
              if [ ".$opt_m" != . ]; then
                  if [ ".$opt_t" = .yes ]; then
                      echo "chmod $opt_m $p" 1>&2
                  fi
                  chmod $opt_m $p || errstatus=$?
              fi
          else
              #   the smart situation
              set fnord `echo ":$p" |\
                         sed -e 's/^:\//%/' \
                             -e 's/^://' \
                             -e 's/\// /g' \
                             -e 's/^%/\//'`
              shift
              pathcomp=''
              for d in ${1+"$@"}; do
                  pathcomp="$pathcomp$d"
                  case "$pathcomp" in
                      -* ) pathcomp="./$pathcomp" ;;
                  esac
                  if [ ! -d "$pathcomp" ]; then
                      if [ ".$opt_t" = .yes ]; then
                          echo "mkdir $pathcomp" 1>&2
                      fi
                      mkdir $pathcomp || errstatus=$?
                      if [ ".$opt_m" != . ]; then
                          if [ ".$opt_t" = .yes ]; then
                              echo "chmod $opt_m $pathcomp" 1>&2
                          fi
                          chmod $opt_m $pathcomp || errstatus=$?
                      fi
                  fi
                  pathcomp="$pathcomp/"
              done
          fi
      done
      exit $errstatus
      ;;
  
  mkln )
      ##
      ##  mkln -- Make link with calculation of relative paths
      ##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
      ##  Originally written for shtool
      ##
      
      args=$?
      srcs=""
      while [ $# -gt 1 ]; do
          srcs="$srcs $1"
          shift
      done
      dst="$1"
      if [ ! -d $dst ]; then
          if [ $args -gt 2 ]; then
              echo "$msgprefix:Error: multiple sources not allowed when target isn't a directory" 1>&2
              exit 1
          fi
      fi
      
      #   determine link options
      lnopt=""
      if [ ".$opt_f" = .yes ]; then
          lnopt="$lnopt -f"
      fi
      if [ ".$opt_s" = .yes ]; then
          lnopt="$lnopt -s"
      fi
      
      #   iterate over sources
      for src in $srcs; do
          #   determine if one of the paths is an absolute path,
          #   because then we _have_ to use an absolute symlink
          oneisabs=0
          srcisabs=0
          dstisabs=0
          case $src in
              /* ) oneisabs=1; srcisabs=1 ;;
          esac
          case $dst in
              /* ) oneisabs=1; dstisabs=1 ;;
          esac
      
          #   split source and destination into dir and base name
          if [ -d $src ]; then
              srcdir=`echo $src | sed -e 's;/*$;;'`
              srcbase=""
          else
              srcdir=`echo  $src | sed -e 's;^[^/]*$;;' -e 's;^\(.*/\)[^/]*$;\1;' -e 's;\(.\)/$;\1;'`
              srcbase=`echo $src | sed -e 's;.*/\([^/]*\)$;\1;'`
          fi
          if [ -d $dst ]; then
              dstdir=`echo $dst | sed -e 's;/*$;;'`
              dstbase=""
          else
              dstdir=`echo  $dst | sed -e 's;^[^/]*$;;' -e 's;^\(.*/\)[^/]*$;\1;' -e 's;\(.\)/$;\1;'`
              dstbase=`echo $dst | sed -e 's;.*/\([^/]*\)$;\1;'`
          fi
      
          #   consistency check
          if [ ".$dstdir" != . ]; then
              if [ ! -d $dstdir ]; then
                  echo "$msgprefix:Error: destination directory not found: $dstdir" 1>&2
                  exit 1
              fi
          fi
      
          #   make sure the source is reachable from the destination
          if [ $dstisabs = 1 ]; then
              if [ $srcisabs = 0 ]; then
                  if [ -d $srcdir ]; then
                      srcdir="`cd $srcdir; pwd | sed -e 's;/*$;;'`"
                      srcisabs=1
                      oneisabs=1
                  fi
              fi
          fi
      
          #   split away a common prefix
          prefix=""
          if [ ".$srcdir" = ".$dstdir" -a ".$srcdir" != . ]; then
              prefix="$srcdir/"
              srcdir=""
              dstdir=""
          else
              while [ ".$srcdir" != . -a ".$dstdir" != . ]; do
                  presrc=`echo $srcdir | sed -e 's;^\([^/]*\)/.*;\1;'`
                  predst=`echo $dstdir | sed -e 's;^\([^/]*\)/.*;\1;'`
                  if [ ".$presrc" != ".$predst" ]; then
                      break
                  fi
                  prefix="$prefix$presrc/"
                  srcdir=`echo $srcdir | sed -e 's;^[^/]*/*;;'`
                  dstdir=`echo $dstdir | sed -e 's;^[^/]*/*;;'`
              done
          fi
      
          #   destination prefix is just the common prefix
          dstpre="$prefix"
      
          #   determine source prefix which is the reverse directory
          #   step-up corresponding to the destination directory
          srcpre=""
          if [ $oneisabs = 0 ] || [ ".$prefix" != . -a ".$prefix" != ./ ]; then
              pl="$dstdir/"
              OIFS="$IFS"; IFS='/'
              for pe in $pl; do
                  [ ".$pe" = . ] && continue
                  srcpre="../$srcpre"
              done
              IFS="$OIFS"
          else
              if [ $srcisabs = 1 ]; then
                  srcpre="$prefix"
              fi
          fi
      
          #   determine destination symlink name
          if [ ".$dstbase" = . ]; then
              if [ ".$srcbase" != . ]; then
                  dstbase="$srcbase"
              else
                  dstbase=`echo "$prefix$srcdir" | sed -e 's;/*$;;' -e 's;.*/\([^/]*\)$;\1;'`
              fi
          fi
      
          #   now finalize source and destination directory paths
          srcdir=`echo $srcdir | sed -e 's;\([^/]\)$;\1/;'`
          dstdir=`echo $dstdir | sed -e 's;\([^/]\)$;\1/;'`
      
          #   run the final link command
          if [ ".$opt_t" = .yes ]; then
              echo "ln$lnopt $srcpre$srcdir$srcbase $dstpre$dstdir$dstbase"
          fi
          eval ln$lnopt $srcpre$srcdir$srcbase $dstpre$dstdir$dstbase
      done
      ;;
  
  mkshadow )
      ##
      ##  mkshadow -- Make a shadow tree through symbolic links
      ##  Copyright (c) 1998-2001 Ralf S. Engelschall <rse@engelschall.com>
      ##  Originally written for Apache
      ##
      
      #   source and destination directory
      src=`echo "$1" | sed -e 's:/$::' -e 's:^\./\(.\):\1:'`
      dst=`echo "$2" | sed -e 's:/$::' -e 's:^\./\(.\):\1:'`
      
      #   check whether source exists
      if [ ! -d $src ]; then
          echo "$msgprefix:Error: source directory not found: \`$src'" 1>&2
          exit 1
      fi
      
      #   determine if one of the paths is an absolute path,
      #   because then we have to use an absolute symlink
      oneisabs=0
      case $src in
          /* ) oneisabs=1 ;;
      esac
      case $dst in
          /* ) oneisabs=1 ;;
      esac
      
      #   determine reverse directory for destination directory
      dstrevdir=''
      if [ $oneisabs = 0 ]; then
          #   derive reverse path from forward path
          pwd=`pwd`
          OIFS="$IFS"; IFS='/'
          for pe in $dst; do
              if [ "x$pe" = "x.." ]; then
                  OIFS2="$IFS"; IFS="$DIFS"
                  eval `echo "$pwd" |\
                        sed -e 's:\([^/]*\)$:; dir="\1":' \
                            -e 's:^\(.*\)/[^/]*;:pwd="\1";:'\
                            -e 's:^;:pwd="";:'`
                  dstrevdir="$dir/$dstrevdir"
                  IFS="$OIFS2"
              else
                  dstrevdir="../$dstrevdir"
              fi
          done
          IFS="$OIFS"
      else
          src="`cd $src; pwd`";
      fi
      
      #   create directory tree at destination
      if [ ! -d $dst ]; then
          if [ ".$opt_t" = .yes ]; then
              echo "mkdir $dst" 1>&2
          fi
          mkdir $dst
      fi
      if [ ".$opt_a" = .yes ]; then
          DIRS=`cd $src; find . -type d -print |\
                sed -e '/^\.$/d' -e 's:^\./::'`
      else
          DIRS=`cd $src; find . -type d -print |\
                sed -e '/\/CVS/d' -e '/^\.$/d' -e 's:^\./::'`
      fi
      for dir in $DIRS; do
          if [ ".$opt_t" = .yes ]; then
              echo "mkdir $dst/$dir" 1>&2
          fi
          mkdir $dst/$dir
      done
      
      #   fill directory tree with symlinks to files
      if [ ".$opt_a" = .yes ]; then
          FILES="`cd $src; find . -depth -print |\
                  sed -e 's/^\.\///'`"
      else
          FILES="`cd $src; find . -depth -print |\
                  sed -e '/\.o$/d' -e '/\.a$/d' -e '/\.so$/d' \
                      -e '/\.cvsignore$/d' -e '/\/CVS/d' \
                      -e '/\/\.#/d' -e '/\.orig$/d' \
                      -e 's/^\.\///'`"
      fi
      for file in $FILES; do
           #  don't use `-type f' above for find because of symlinks
           if [ -d "$src/$file" ]; then
               continue
           fi
           basename=`echo $file | sed -e 's:^.*/::'`
           dir=`echo $file | sed -e 's:[^/]*$::' -e 's:/$::' -e 's:$:/:' -e 's:^/$::'`
           from=`echo "$src/$file" | sed -e 's/^\.\///'`
           to="$dst/$dir$basename"
           if [ $oneisabs = 0 ]; then
               if [ ".$dir" != . ]; then
                   subdir=`echo $dir | sed -e 's:/$::'`
                   #   derive reverse path from forward path
                   revdir=''
                   OIFS="$IFS"; IFS='/'
                   for pe in $subdir; do
                       revdir="../$revdir"
                   done
                   IFS="$OIFS"
                   #   finalize from
                   from="$revdir$from"
               fi
               from="$dstrevdir$from"
           fi
           if [ ".$opt_v" = .yes ]; then
               echo "    $to" 1>&2
           fi
           if [ ".$opt_t" = .yes ]; then
               echo "ln -s $from $to" 1>&2
           fi
           ln -s $from $to
      done
      ;;
  
  fixperm )
      ##
      ##  fixperm -- Fix file permissions inside a source tree
      ##  Copyright (c) 1996-2001 Ralf S. Engelschall <rse@engelschall.com>
      ##  Originally written for ePerl
      ##
      
      paths="$*"
      
      #   check whether the test command supports the -x option
      if [ -x /bin/sh ] 2>/dev/null; then
          minusx="-x"
      else
          minusx="-r"
      fi
      
      #   iterate over paths
      for p in $paths; do
          for file in `find $p -depth -print`; do
              if [ -f $file ]; then
                  if [ $minusx $file ]; then
                      if [ ".$opt_v" = .yes ]; then
                          echo "-rwxrwxr-x $file" 2>&1
                      fi
                      if [ ".$opt_t" = .yes ]; then
                          echo "chmod 775 $file" 2>&1
                      fi
                      chmod 775 $file
                  else
                      if [ ".$opt_v" = .yes ]; then
                          echo "-rw-rw-r-- $file" 2>&1
                      fi
                      if [ ".$opt_t" = .yes ]; then
                          echo "chmod 664 $file" 2>&1
                      fi
                      chmod 664 $file
                  fi
                  continue
              fi
              if [ -d $file ]; then
                  if [ ".$opt_v" = .yes ]; then
                      echo "drwxrwxr-x $file" 2>&1
                  fi
                  if [ ".$opt_t" = .yes ]; then
                      echo "chmod 775 $file" 2>&1
                  fi
                  chmod 775 $file
                  continue
              fi
              if [ ".$opt_v" = .yes ]; then
                  echo "?????????? $file" 2>&1
              fi
          done
      done
      ;;
  
  tarball )
      ##
      ##  tarball -- Roll distribution tarballs
      ##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
      ##  Originally written for shtool
      ##
      
      srcs="$*"
      
      #   check whether the test command supports the -x option
      if [ -x /bin/sh ] 2>/dev/null; then
          minusx="-x"
      else
          minusx="-r"
      fi
      
      #   find the tools
      paths="`echo $PATH |\
              sed -e 's%/*:%:%g' -e 's%/*$%%' \
                  -e 's/^:/.:/' -e 's/::/:.:/g' -e 's/:$/:./' \
                  -e 's/:/ /g'`"
      for spec in find:gfind,find tar:gtar,tar tardy:tardy,tarcust; do
          prg=`echo $spec | sed -e 's/:.*$//'`
          tools=`echo $spec | sed -e 's/^.*://'`
          eval "prg_${prg}=''"
          #   iterate over tools
          for tool in `echo $tools | sed -e 's/,/ /g'`; do
              #   iterate over paths
              for path in $paths; do
                  if [ $minusx "$path/$tool" -a ! -d "$path/$tool" ]; then
                      eval "prg_${prg}=\"$path/$tool\""
                      break
                  fi
              done
              eval "val=\$prg_${prg}"
              if [ ".$val" != . ]; then
                  break
              fi
          done
      done
      
      #   expand source paths
      exclude=''
      for pat in `echo $opt_e | sed 's/,/ /g'`; do
          exclude="$exclude | grep -v '$pat'"
      done
      if [ ".$opt_t" = .yes ]; then
          echo "cp /dev/null $tmpfile.lst" 1>&2
      fi
      cp /dev/null $tmpfile.lst
      for src in $srcs; do
          if [ -d $src ]; then
              if [ ".$opt_t" = .yes ]; then
                  echo "(cd $src && $prg_find . -type f -depth -print) | sed -e 's:^\\.\$::' -e 's:^\\./::' | cat $exclude >>$tmpfile.lst" 1>&2
              fi
              (cd $src && $prg_find . -type f -depth -print) |\
              sed -e 's:^\.$::' -e 's:^\./::' | eval cat $exclude >>$tmpfile.lst
          else
              if [ ".$opt_t" = .yes ]; then
                  echo "echo $src >>$tmpfile.lst" 1>&2
              fi
              echo $src >>$tmpfile.lst
          fi
      done
      sort <$tmpfile.lst >$tmpfile.lst.n
      mv $tmpfile.lst.n $tmpfile.lst
      if [ ".$opt_v" = .yes ]; then
          cat $tmpfile.lst | sed -e 's/^/  /' 1>&2
      fi
      
      #   determine tarball file and directory name
      if [ ".$opt_o" != . ]; then
          tarfile="$opt_o"
          if [ ".$opt_d" != . ]; then
              tarname="$opt_d"
          else
              tarname=`echo $tarfile | sed -e 's/\.tar.*$//' -e 's;.*/\([^/]*\)$;\1;'`
          fi
      else
          if [ ".$opt_d" != . ]; then
              tarname="$opt_d"
          elif [ -d "$from" ]; then
              tarname=`echo $from | sed -e 's;.*/\([^/]*\)$;\1;'`
          else
              tarname="out"
          fi
          tarfile="$tarname.tar"
      fi
      
      #   roll the tarball
      compress=''
      if [ ".$opt_c" != . ]; then
          compress="| $opt_c"
      fi
      if [ ".$prg_tardy" != . ]; then
          #   the elegant hackers way
          tardy_opt="--prefix=$tarname"
          tardy_opt="$tardy_opt --user_number=0 --group_number=0" # security!
          if [ ".$opt_u" != . ]; then
              tardy_opt="$tardy_opt --user_name=$opt_u"
          fi
          if [ ".$opt_g" != . ]; then
              tardy_opt="$tardy_opt --group_name=$opt_g"
          fi
          if [ ".$opt_t" = .yes ]; then
              echo "cat $tmpfile.lst | xargs $prg_tar cf - | $prg_tardy $tardy_opt | cat $compress >$tmpfile.out" 1>&2
          fi
          cat $tmpfile.lst |\
          xargs $prg_tar cf - |\
          $prg_tardy $tardy_opt |\
          eval cat $compress >$tmpfile.out
          if [ ".$opt_t" = .yes ]; then
              echo "cp $tmpfile.out $tarfile" 1>&2
          fi
          cp $tmpfile.out $tarfile
      else
          #  the portable standard way
          if [ ".$opt_t" = .yes ]; then
              echo "mkdir $tmpdir/$tarname" 1>&2
          fi
          mkdir $tmpdir/$tarname || exit 1
          if [ ".$opt_t" = .yes ]; then
              echo "cat $tmpfile.lst | xargs $prg_tar cf - | (cd $tmpdir/$tarname && $prg_tar xf -)" 1>&2
          fi
          cat $tmpfile.lst |\
          xargs $prg_tar cf - |\
          (cd $tmpdir/$tarname && $prg_tar xf -)
          if [ ".$opt_u" != . ]; then
              if [ ".$opt_t" = .yes ]; then
                  echo "chown -R $opt_u $tmpdir/$tarname >/dev/null 2>&1" 2>&1
              fi
              chown -R $opt_u $tmpdir/$tarname >/dev/null 2>&1 ||\
              echo "$msgprefix:Warning: cannot set user name \`$opt_u' (would require root priviledges)"
          fi
          if [ ".$opt_g" != . ]; then
              if [ ".$opt_t" = .yes ]; then
                  echo "chgrp -R $opt_g $tmpdir/$tarname >/dev/null 2>&1" 2>&1
              fi
              chgrp -R $opt_g $tmpdir/$tarname >/dev/null 2>&1 ||\
              echo "$msgprefix:Warning: cannot set group name \`$opt_g' (would require root priviledges)"
          fi
          if [ ".$opt_t" = .yes ]; then
              echo "(cd $tmpdir && $prg_find $tarname -type f -depth -print | sort | xargs $prg_tar cf -) | cat $compress >$tmpfile.out" 1>&2
          fi
          (cd $tmpdir && $prg_find $tarname -type f -depth -print | sort | xargs $prg_tar cf -) |\
          eval cat $compress >$tmpfile.out
          if [ ".$opt_t" = .yes ]; then
              echo "cp $tmpfile.out $tarfile" 1>&2
          fi
          cp $tmpfile.out $tarfile
          if [ ".$opt_t" = .yes ]; then
              echo "rm -rf $tmpdir/$tarname" 1>&2
          fi
          rm -rf $tmpdir/$tarname
      fi
      
      #   cleanup
      if [ ".$opt_t" = .yes ]; then
          echo "rm -f $tmpfile.lst $tmpfile.out" 1>&2
      fi
      rm -f $tmpfile.lst $tmpfile.out
      ;;
  
  guessos )
      ##
      ##  guessos -- Simple operating system guesser
      ##  Copyright (c) 1996-1999 The Apache Group, http://www.apache.org/
      ##  The Apache license applies (see http://www.apache.org/docs/LICENSE)
      ##  Originally written for Apache
      ##
      
      MACHINE=`(uname -m) 2>/dev/null` || MACHINE=`(uname -p) 2>/dev/null` || MACHINE="unknown"
      RELEASE=`(uname -r) 2>/dev/null` || RELEASE="unknown"
       SYSTEM=`(uname -s) 2>/dev/null` ||  SYSTEM="unknown"
      VERSION=`(uname -v) 2>/dev/null` || VERSION="unknown"
      
      XREL=`(uname -X) 2>/dev/null | grep "^Release" | awk '{print $3}'`
      if [ "x$XREL" != "x" ]; then
          if [ -f /etc/kconfig ]; then
              case "$XREL" in
                  4.0|4.1) echo "${MACHINE}-whatever-isc4"; exit 0 ;;
              esac
          else
          case "$XREL" in
              3.2v4.2)
                  echo "whatever-whatever-sco3"; exit 0
                  ;;
              3.2v5.0*)
                  echo "whatever-whatever-sco5"; exit 0
                  ;;
              4.2MP)
                  if [ "x$VERSION" = "x2.1.1" ]; then
                      echo "${MACHINE}-whatever-unixware211"; exit 0
                  elif [ "x$VERSION" = "x2.1.2" ]; then
                      echo "${MACHINE}-whatever-unixware212"; exit 0
                  else
                      echo "${MACHINE}-whatever-unixware2"; exit 0
                  fi
                  ;;
              4.2)
                  echo "whatever-whatever-unixware1"; exit 0
                  ;;
              5)
                  case "$VERSION" in
                      7*) echo "${MACHINE}-whatever-unixware7"; exit 0 ;;
                  esac
                  ;;
          esac
          fi
      fi
      case "${SYSTEM}:${RELEASE}:${VERSION}:${MACHINE}" in
          MiNT:*)
              echo "m68k-atari-mint"; exit 0
              ;;
          A/UX:*)
              echo "m68k-apple-aux3"; exit 0
              ;;
          AIX:*)
              MACH=`echo $MACHINE | sed -e 's;[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F];;'`
              echo "${MACH}-ibm-aix${VERSION}.${RELEASE}"; exit 0
              ;;
          dgux:*)
              echo "${MACHINE}-dg-dgux"; exit 0
              ;;
          HI-UX:*)
              echo "${MACHINE}-hi-hiux"; exit 0
              ;;
          HP-UX:*)
              HPUXVER=`echo ${RELEASE}|sed -e 's/[^.]*.[0B]*//'`
              MACHINE=`echo ${MACHINE}|sed -e 's:/:_:'`
              echo "${MACHINE}-hp-hpux${HPUXVER}"; exit 0
              ;;
          IRIX:*)
              if [ -f /usr/lib32/mips4/libm.so ]; then
                  echo "${MACHINE}/32-sgi-irix${RELEASE}"; exit 0
              else
                  echo "${MACHINE}-sgi-irix${RELEASE}"; exit 0
              fi
              ;;
          IRIX64:*)
              echo "${MACHINE}/64-sgi-irix${RELEASE}"; exit 0
              ;;
          Linux:*)
              V='whatever'
              case "$MACHINE" in
                  i?86) V='pc' ;;
              esac
              R=''
              case "$RELEASE" in
                  [1-9].*) R=`echo $RELEASE | cut -c1` ;;
              esac
              echo "${MACHINE}-${V}-linux-gnu${R}"; exit 0
              ;;
          LynxOS:*)
              echo "${MACHINE}-lynx-lynxos"; exit 0
              ;;
          BSD/386|BSD/OS:3.*)
              echo "${MACHINE}-whatever-bsdi3"; exit 0
              ;;
          BSD/386:*:*:*486*|BSD/OS:*:*:*:*486*)
              echo "i486-whatever-bsdi"; exit 0
              ;;
          BSD/386:*|BSD/OS:*)
              echo "${MACHINE}-whatever-bsdi"; exit 0
              ;;
          FreeBSD:*)
              VERS=`echo ${RELEASE} | sed -e 's/[-(].*//'`
              MACH=`/sbin/sysctl -n hw.model`
              ARCH='whatever'
              case ${MACH} in
                 *386*       ) MACH="i386"     ;;
                 *486*       ) MACH="i486"     ;;
                 Pentium\ II*) MACH="i686"     ;;
                 Pentium*    ) MACH="i586"     ;;
                 Alpha*      ) MACH="alpha"    ;;
                 *           ) MACH="$MACHINE" ;;
              esac
              case ${MACH} in
                 i[0-9]86 ) ARCH="pc" ;;
              esac
              echo "${MACH}-${ARCH}-freebsd${VERS}"; exit 0
              ;;
          NetBSD:*:*:*486*)
              echo "i486-whatever-netbsd${RELEASE}"; exit 0
              ;;
          NetBSD:*)
              echo "${MACHINE}-whatever-netbsd${RELEASE}"; exit 0
              ;;
          OpenBSD:*)
              echo "${MACHINE}-whatever-openbsd"; exit 0
              ;;
          OSF1:*:*:*alpha*)
              VERS=`echo $RELEASE | sed -e 's;^V;;'`
              echo "${MACHINE}-dec-osf${VERS}"; exit 0
              ;;
          QNX:*)
              if [ "$VERSION" -gt 422 ]; then
                  echo "${MACHINE}-qssl-qnx32"
              else
                  echo "${MACHINE}-qssl-qnx"
              fi
              exit 0
              ;;
          Paragon*:*:*:*)
              echo "i860-intel-osf1"; exit 0
              ;;
          SunOS:5.*)
              VERSION=`echo $RELEASE | sed -e 's;^5\.;;'`
              echo "${MACHINE}-sun-solaris2.${VERSION}"; exit 0
              ;;
          SunOS:*)
              echo "${MACHINE}-sun-sunos4"; exit 0
              ;;
          UNIX_System_V:4.*:*)
              echo "${MACHINE}-whatever-sysv4"; exit 0
              ;;
          unix:3.0.9*:*:88k)
              echo "${MACHINE}-encore-sysv4"; exit 0
              ;;
          *:4*:R4*:m88k)
              echo "${MACHINE}-whatever-sysv4"; exit 0
              ;;
          UnixWare:5:99*:*)
              # Gemini, beta release of next rev of unixware
              echo "${MACHINE}-whatever-unixware212"; exit 0
              ;;
          DYNIX/ptx:4*:*)
              echo "${MACHINE}-whatever-sysv4"; exit 0
              ;;
          *:4.0:3.0:[345][0-9]?? | *:4.0:3.0:3[34]??[/,]* | library:*)
              echo "x86-ncr-sysv4"; exit 0
              ;;
          ULTRIX:*)
              echo "${MACHINE}-unknown-ultrix"; exit 0
              ;;
          SINIX-?:* | ReliantUNIX-?:*)
              echo "${MACHINE}-siemens-sysv4"; exit 0
              ;;
          POSIX*BS2000)
              echo "${MACHINE}-siemens-sysv4"; exit 0
              ;;
          machten:*)
             echo "${MACHINE}-tenon-${SYSTEM}"; exit 0;
             ;;
          ConvexOS:*:11.*:*)
             echo "${MACHINE}-v11-${SYSTEM}"; exit 0;
             ;;
          UNIX_SV:*:*:maxion)
             echo "${MACHINE}-ccur-sysv4"; exit 0;
             ;;
          PowerMAX_OS:*:*:Night_Hawk)
             MACHINE=`uname -p`
             echo "${MACHINE}-concurrent-powermax"; exit 0;
             ;;
          UNIX_SV:*)
             if [ -d /usr/nec ];then
                 echo "mips-nec-sysv4"; exit 0;
             fi
             ;;
          NonStop-UX:4.[02]*:[BC]*:*)
             echo "${MACHINE}-tandem-sysv4"; exit 0;
             ;;
          Rhapsody:*:*:*)
             case "${MACHINE}" in
                 "Power Macintosh") MACHINE=powerpc ;;
             esac
             echo "${MACHINE}-apple-rhapsody${RELEASE}"; exit 0
             ;;
          "Mac OS":*:*:*)
             MACHINE=`uname -p`
             echo "${MACHINE}-apple-macos${RELEASE}"; exit 0
             ;;
          "RISC iX":*)
             echo "arm-whatever-riscix"; exit 0;
             ;;
          *:4.0:2:*)
             echo "whatever-unisys-sysv4"; exit 0;
             ;;
          *:*:dcosx:NILE*)
             echo "pyramid-pyramid-svr4"; exit 0;
             ;;
          *:*:*:"DRS 6000")
             echo "drs6000-whatever-whatever"; exit 0;
             ;;
          AmigaOS:*:*:* )
             echo "${MACHINE}-whatever-${SYSTEM}${RELEASE}"; exit 0
             ;;
      esac
      
      # Now NeXT
      ISNEXT=`(hostinfo) 2>/dev/null`
      case "$ISNEXT" in
          *NeXT*)
               # Swiped from a friendly uname clone for NEXT/OPEN Step.
               NEXTOSVER="`hostinfo | sed -n 's/.*NeXT Mach \([0-9\.]*\).*/\1/p'`"
               if [ "$NEXTOSVER" -gt 3.3 ]; then
                   NEXTOS="openstep"
               else
                   NEXTOS="nextstep"
               fi
               NEXTREL="`hostinfo | sed -n 's/.*NeXT Mach \([0-9\.]*\).*/\1/p'`"
               NEXTARCH=`arch`
               echo "${NEXTARCH}-next-${NEXTOS}${NEXTREL}" ; exit 0
               ;;
      esac
      
      # Fallback
      echo "${MACHINE}-unknown-${SYSTEM}/${RELEASE}/${VERSION}"
      ;;
  
  arx )
      ##
      ##  arx -- Extended archive command
      ##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
      ##  Originally written for shtool
      ##
      
      ar_prg="$opt_C"
      ar_cmd="$1"; shift
      archive="$1"; shift
      files="$*"
      
      #   walk through the file list and expand archives members
      tmpdir=`echo $archive | sed -e 's;[^/]*$;.arx;'`
      nfiles=''
      if [ ".$files" != . ]; then
          for file in $files; do
              if [ ! -f $file ]; then
                  echo "$msgprefix:Error: input file not found: $file" 1>&2
                  exit 1
              fi
              case $file in
                  *.a )
                      if [ ! -d $tmpdir ]; then
                          if [ ".$opt_t" = .yes ]; then
                              echo "mkdir $tmpdir" 1>&2
                          fi
                          mkdir $tmpdir
                      fi
                      case $tmpdir in
                           .arx )
                               from="../$file"
                               ;;
                           * )
                               dir=`echo $file | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;' -e 's;^$;.;'`
                               base=`echo $file | sed -e 's;.*/\([^/]*\)$;\1;'`
                               from="`cd $dir; pwd`/$base"
                               ;;
                      esac
                      if [ ".$opt_t" = .yes ]; then
                          echo "(cd $tmpdir && $ar_prg x $from)" 1>&2
                      fi
                      (cd $tmpdir && eval $ar_prg x $from)
                      if [ $? -ne 0 ]; then
                          echo "$msgprefix:Error: member extraction failed for archive: $file" 1>&2
                          exit 1
                      fi
                      for member in - `eval $ar_prg t $file | sed -e '/_\.SYMDEF/d'`; do
                          [ ".$member" = .- ] && continue
                          nfiles="$nfiles $tmpdir/$member"
                      done
                      ;;
                  * )
                      nfiles="$nfiles $file"
                      ;;
              esac
          done
      fi
      
      #   run the final archive command
      if [ ".$opt_t" = .yes ]; then
          echo "$ar_prg $ar_cmd $archive $nfiles" 1>&2
      fi
      eval $ar_prg $ar_cmd $archive $nfiles
      if [ $? -ne 0 ]; then
          echo "$msgprefix:Error: archive command failed" 1>&2
          exit $?
      fi
      
      #   cleanup and die gracefully
      if [ -d $tmpdir ]; then
          if [ ".$opt_t" = .yes ]; then
              echo "rm -rf $tmpdir" 1>&2
          fi
          rm -rf $tmpdir
      fi
      ;;
  
  slo )
      ##
      ##  slo -- Separate linker options by library class
      ##  Copyright (c) 1998-2001 Ralf S. Engelschall <rse@engelschall.com>
      ##  Originally written for Apache
      ##
      
      DIFS="$IFS"
      
      #   parse out -L and -l options from command line
      DIRS=''
      LIBS=''
      ARGV=''
      optprev=''
      for opt
      do
          #   concatenate with previous option if exists
          if [ ".$optprev" != . ]; then
              opt="${optprev}${opt}";
              optprev=''
          fi
          #   remember options for arg if used stand-alone
          if [ ".$opt" = ".-L" -o ".$opt" = ".-l" ]; then
              optprev="$opt"
              continue;
          fi
          #   split argument into option plus option argument
          arg="`echo $opt | cut -c3-`"
          opt="`echo $opt | cut -c1-2`"
          #   store into containers
          case $opt in
              -L) DIRS="$DIRS:$arg" ;;
              -l) LIBS="$LIBS:$arg" ;;
               *) ARGV="$ARGV $opt" ;;
          esac
      done
      
      #   set linker default directories
      DIRS_DEFAULT='/lib:/usr/lib'
      if [ ".$LD_LIBRARY_PATH" != . ]; then
          DIRS_DEFAULT="$DIRS_DEFAULT:$LD_LIBRARY_PATH"
      fi
      
      #   sort options by class
      DIRS_OBJ=''
      LIBS_OBJ=''
      DIRS_PIC=''
      LIBS_PIC=''
      DIRS_DSO=''
      LIBS_DSO=''
      
      #    for each library...
      OIFS="$IFS"; IFS=':'
      for lib in $LIBS; do
          [ ".$lib" = . ] && continue
      
          found='no'
          found_indefdir='no'
          found_type=''
          found_dir=''
      
          #    for each directory...
          OIFS2="$IFS"; IFS=":$DIFS"
          for dir in ${DIRS} switch-to-defdirs ${DIRS_DEFAULT}; do
              [ ".$dir" = . ] && continue
              [ ".$dir" = .switch-to-defdirs ] && found_indefdir=yes
              [ ! -d $dir ] && continue
      
              #    search the file
              OIFS3="$IFS"; IFS="$DIFS"
              for file in '' `cd $dir && ls lib${lib}.* 2>/dev/null`; do
                   [ ".$file" = . ] && continue
                   case $file in
                       *.so|*.so.[0-9]*|*.sl|*.sl.[0-9]* )
                            found=yes;
                            found_type=DSO;
                            break
                            ;;
                       *.lo|*.la )
                            found=yes;
                            found_type=PIC
                            ;;
                       *.a )
                            if [ ".$found_type" = . ]; then
                                found=yes
                                found_type=OBJ
                            fi
                            ;;
                   esac
              done
              IFS="$OIFS3"
              if [ ".$found" = .yes ]; then
                  found_dir="$dir"
                  break
              fi
          done
          IFS="$OIFS2"
      
          if [ ".$found" = .yes ]; then
              if [ ".$found_indefdir" != .yes ]; then
                  eval "dirlist=\"\${DIRS_${found_type}}:\""
                  if [ ".`echo \"$dirlist\" | fgrep :$found_dir:`" = . ]; then
                      eval "DIRS_${found_type}=\"\$DIRS_${found_type}:${found_dir}\""
                  fi
                  eval "LIBS_${found_type}=\"\$LIBS_${found_type}:$lib\""
              else
                  eval "LIBS_${found_type}=\"\$LIBS_${found_type}:$lib\""
              fi
          else
              LIBS_OBJ="$LIBS_OBJ:$lib"
              #dirlist="`echo $DIRS $DIRS_DEFAULT | sed -e 's/:/ /g'`"
              #echo "slo:Warning: library \"$lib\" not found in any of the following dirs:" 2>&1
              #echo "slo:Warning: $dirlist" 1>&1
          fi
      done
      IFS="$OIFS"
      
      #   also pass-through unused dirs even if it's useless
      OIFS="$IFS"; IFS=':'
      for dir in $DIRS; do
          dirlist="${DIRS_OBJ}:${DIRS_PIC}:${DIRS_DSO}:"
          if [ ".`echo \"$dirlist\" | fgrep :$dir:`" = . ]; then
              DIRS_OBJ="$DIRS_OBJ:$dir"
          fi
      done
      IFS="$OIFS"
      
      #   reassemble the options but separated by type
      for type in OBJ PIC DSO; do
          OIFS="$IFS"; IFS=':'
          eval "libs=\"\$LIBS_${type}\""
          opts=''
          for lib in $libs; do
              [ ".$lib" = . ] && continue
              opts="$opts -l$lib"
          done
          eval "LIBS_${type}=\"$opts\""
      
          eval "dirs=\"\$DIRS_${type}\""
          opts=''
          for dir in $dirs; do
              [ ".$dir" = . ] && continue
              opts="$opts -L$dir"
          done
          eval "DIRS_${type}=\"$opts\""
          IFS="$OIFS"
      done
      
      #   give back results
      for var in ARGV DIRS_OBJ LIBS_OBJ DIRS_PIC LIBS_PIC DIRS_DSO LIBS_DSO; do
          eval "val=\"\$${var}\""
          val="`echo $val | sed -e 's/^ *//'`"
          echo "${opt_p}${var}=\"${val}\""
      done
      ;;
  
  scpp )
      ##
      ##  scpp -- Sharing C Pre-Processor
      ##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
      ##  Originally written for GNU Pth
      ##
      
      srcs="$*"
      output="${opt_o}.n"
      
      #   find a reasonable Awk
      awk=''
      paths=`echo $PATH |\
             sed -e 's%/*:%:%g' -e 's%/$%%' \
                 -e 's/^:/.:/' -e 's/::/:.:/g' -e 's/:$/:./' \
                 -e 's/:/ /g'`
      for name in gawk nawk awk; do
          for path in $paths; do
              if [ -r "$path/$name" ]; then
                  awk="$path/$name"
                  break
              fi
          done
          if [ ".$awk" != . ]; then
              break
          fi
      done
      if [ ".$awk" = . ]; then
          echo "$msgprefix:Error: cannot find a reasonable Awk" 1>&2
          exit 1
      fi
      
      #   parse source file(s)
      if [ ".$opt_v" = .yes ]; then
          echo "Parsing:" | $awk '{ printf("%s", $0); }' 1>&2
      fi
      for src in $srcs; do
          if [ ".$opt_v" = .yes ]; then
              echo $src | $awk '{ printf(" %s", $0); }' 1>&2
          fi
          if [ ".$opt_f" = . ]; then
              inputcmd="cat $src"
          else
              inputcmd="sed $opt_f $src"
          fi
          $inputcmd |\
          $awk '
             BEGIN {
                 ln    = 0;
                 fln   = 0;
                 level = 0;
                 mode  = "";
                 store = "";
             }
             {
                 ln++;
             }
             /^#if.*/ {
                 level++;
             }
             /^#if [a-zA-Z_][a-zA-Z0-9_]* *$/ {
                 if ($2 == define) {
                     mode = "D";
                     printf("D:#line %d \"%s\"\n", ln, src);
                     next;
                 }
             }
             /^#endif.*/ {
                 level--;
                 if (mode == "D" && level == 0) {
                     mode = "";
                     next;
                 }
             }
             /^[a-zA-Z_][a-zA-Z0-9_].*;.*/ {
                 if ($1 == class) {
                     printf("V:#line %d \"%s\"\n", ln, src);
                     printf("V:%s\n", $0);
                     printf("J:%s\n", $0);
                     next;
                 }
             }
             /^[a-zA-Z_][a-zA-Z0-9_].*=.*/ {
                 if ($1 == class) {
                     printf("V:#line %d \"%s\"\n", ln, src);
                     printf("V:%s\n", $0);
                     printf("J:%s\n", $0);
                     next;
                 }
             }
             /^[a-zA-Z_][a-zA-Z0-9_]*/ {
                 if ($1 == class) {
                     fln = ln;
                     store = $0;
                     mode = "F";
                     next;
                 }
             }
             /^\{ *$/ {
                 if (mode == "F") {
                     printf("F:#line %d \"%s\"\n", fln, src);
                     printf("F:%s;\n", store);
                     printf("I:%s;\n", store);
                     store = "";
                     mode = "";
                     next;
                 }
             }
             {
                 if (mode == "D")
                     printf("D:%s\n", $0);
                 else if (mode == "F")
                     store = store " " $0;
             }
          ' "src=$src" "define=$opt_D" "class=$opt_C" >>$tmpfile
      done
      if [ ".$opt_v" = .yes ]; then
          echo "" 1>&2
      fi
      
      #   start generating output header
      echo "/* $opt_o -- autogenerated from $opt_t, DO NOT EDIT! */" >$output
      echo "#line 1 \"$opt_t\"" >>$output
      sed <$opt_t -e "1,/^${opt_M} *\$/p" -e 'd' |\
      sed -e "/^${opt_M} *\$/d" >>$output
      
      #   merge in the define blocks
      grep '^D:' $tmpfile | sed -e 's/^D://' >>$output
      
      #   generate standard prolog
      echo "#line 1 \"_ON_THE_FLY_\"" >>$output
      echo "" >>$output
      echo "/* make sure the scpp source extensions are skipped */" >>$output
      echo "#define $opt_D 0" >>$output
      echo "#define $opt_C /**/" >>$output
      
      #   generate namespace hiding for variables
      echo "" >>$output
      echo "/* move intern variables to hidden namespace */" >>$output
      grep '^J:' $tmpfile | sed >>$output \
          -e 's/^J://' \
          -e 's/  */ /g' \
          -e 's/^[^=;]*[ *]\([a-zA-Z0-9_]*\)\[\];.*$/#define \1 __\1/' \
          -e 's/^[^=;]*[ *]\([a-zA-Z0-9_]*\)\[\] =.*$/#define \1 __\1/' \
          -e 's/^[^=;]*[ *]\([a-zA-Z0-9_]*\);.*$/#define \1 __\1/' \
          -e 's/^[^=;]*[ *]\([a-zA-Z0-9_]*\) =.*$/#define \1 __\1/'
      
      #   generate namespace hiding for functions
      echo "" >>$output
      echo "/* move intern functions to hidden namespace */" >>$output
      grep '^I:' $tmpfile | sed >>$output \
          -e 's/^I://' \
          -e 's/\([ (]\) */\1/g' \
          -e 's/ *\([),]\)/\1/g' \
          -e 's/^[^(]*[ *]\([a-zA-Z0-9_]*\)(.*$/#define \1 __\1/'
      
      #   generate prototypes for variables
      echo "" >>$output
      echo "/* prototypes for intern variables */" >>$output
      grep '^V:' $tmpfile | sed >>$output \
          -e 's/^V://' \
          -e 's/  */ /g' \
          -e 's/^\([^=;]*[ *][a-zA-Z0-9_]*\[\]\);.*$/\1;/' \
          -e 's/^\([^=;]*[ *][a-zA-Z0-9_]*\[\]\) =.*$/\1;/' \
          -e 's/^\([^=;]*[ *][a-zA-Z0-9_]*\);.*$/\1;/' \
          -e 's/^\([^=;]*[ *][a-zA-Z0-9_]*\) =.*$/\1;/' \
          -e 's/ ;/;/g' \
          -e "s/^$opt_C /extern /"
      
      #   generate prototypes for functions
      echo "" >>$output
      echo "/* prototypes for intern functions */" >>$output
      grep '^F:' $tmpfile | sed >>$output \
          -e 's/^F://' \
          -e 's/\([ (]\) */\1/g' \
          -e 's/ *\([),]\)/\1/g' \
          -e 's/\([* ]\)[a-zA-Z0-9_]*,/\1,/g' \
          -e 's/\([* ]\)[a-zA-Z0-9_]*);/\1);/g' \
          -e 's/(\*[a-zA-Z0-9_]*)(/(*)(/g' \
          -e 's/\([ (]\) */\1/g' \
          -e 's/ *\([),]\)/\1/g' \
          -e "s/^$opt_C /extern /"
      
      #   finish generating output header
      n=`(echo ''; sed <$opt_t -e "1,/^${opt_M} *\$/p" -e 'd') |\
         wc -l | sed -e 's;^ *\([0-9]*\) *$;\1;'`
      echo "#line $n \"$opt_t\"" >>$output
      sed <$opt_t -e "/^${opt_M} *\$/,\$p" -e 'd' |\
      sed -e "/^${opt_M} *\$/d" >>$output
      
      #   create final output file
      if [ -f $opt_o ]; then
          if [ ".$opt_p" = .yes ]; then
              grep -v '^#line' $opt_o  >$tmpfile.o
              grep -v '^#line' $output >$tmpfile.n
              out_old="$tmpfile.o"
              out_new="$tmpfile.n"
          else
              out_old="$opt_o"
              out_new="$output"
          fi
          if cmp -s $out_old $out_new; then
              :
          else
              cp $output $opt_o
          fi
      else
          cp $output $opt_o
      fi
      rm -f $output
      rm -f $tmpfile $tmpfile.* >/dev/null 2>&1
      ;;
  
  version )
      ##
      ##  version -- Maintain a version information file
      ##  Copyright (c) 1994-2001 Ralf S. Engelschall <rse@engelschall.com>
      ##  Originally written for ePerl, rewritten from scratch for shtool
      ##
      
      file="$1"
      
      #   determine prefix and name
      name="$opt_n"
      prefix="$opt_p"
      
      #   determine current version
      triple="$opt_s"
      if [ ".$triple" != . ]; then
          #   use given triple
          if [ ".`echo $triple | grep '[0-9]*.[0-9]*[sabp.][0-9]*'`" = . ]; then
              echo "$msgprefix:Error: invalid argument to option \`-s': \`$opt_s'" 1>&2
              exit 1
          fi
          eval `echo $triple |\
                sed -e 's%\([0-9]*\)\.\([0-9]*\)\([sabp.]\)\([0-9]*\).*%\
                ver="\1";rev="\2";typ="\3";lev="\4"%'`
          tim=calc
      elif [ -r $file ]; then
          #   determine triple from given file
          eval `grep 'Version [0-9]*.[0-9]*[sabp.][0-9]* ([0-9]*-[a-zA-Z]*-[0-9]*)' $file |\
                head -1 | sed -e 's%.*Version \([0-9]*\)\.\([0-9]*\)\([sabp.]\)\([0-9]*\) (\([0-9]*-[a-zA-Z]*-[0-9]*\)).*%\
                ver="\1";rev="\2";typ="\3";lev="\4";tim="\5"%'`
      else
          #   intialise to first version
          ver=0
          rev=1
          typ=.
          lev=0
          tim=calc
      fi
      
      #   determine new version in batch
      if [ ".$opt_i" != . ]; then
          case $opt_i in
              v ) ver=`expr $ver + 1`
                  rev=0
                  lev=0
                  ;;
              r ) rev=`expr $rev + 1`
                  lev=0
                  ;;
              l ) lev=`expr $lev + 1`
                  ;;
              * ) echo "$msgprefix:Error: invalid argument to option \`-i': \`$opt_i'" 1>&2
                  exit 1
                  ;;
          esac
          tim=calc
      fi
      
      #   determine new version interactively
      if [ ".$opt_e" = .yes ]; then
          echo "old version: ${ver}.${rev}${typ}${lev}"
          while [ 1 ]; do
              echo dummy | awk '{ printf("new version: "); }'
              read triple
              case $triple in
                  [0-9]*.[0-9]*[sabp.][0-9]* )
                      ;;
                  * ) echo "$msgprefix:Error: invalid version string entered: \`$triple'" 1>&2
                      continue
                      ;;
              esac
              break
          done
          eval `echo $triple |\
                sed -e 's%^\([0-9]*\)\.\([0-9]*\)\([sabp.]\)\([0-9]*\)$%\
                ver="\1";rev="\2";typ="\3";lev="\4"%'`
          tim=calc
      fi
      
      #   determine hexadecimal and libtool value of version
      case $typ in
          a     ) typnum=0;  levnum=$lev ;;
          b     ) typnum=1;  levnum=$lev ;;
          p | . ) typnum=2;  levnum=$lev ;;
          s     ) typnum=15; levnum=255  ;; # snapshots are special
      esac
      hex=`echo "$ver:$rev:$typnum:$levnum" |\
           awk -F: '{ printf("0x%x%02x%1x%02x", $1, $2, $3, $4); }' |\
           tr 'abcdef' 'ABCDEF'`
      ltv=`echo "$ver:$rev:$typnum:$levnum" |\
           awk -F: '{ printf("%d:%d", $1*10 + $2, $3*10 + $4); }'`
      
      #   determine date
      if [ ".$tim" = .calc ]; then
          day=`date '+%d'`
          month=`date '+%m'`
          year=`date '+%Y' 2>/dev/null`
          if [ ".$time_year" = . ]; then
              year=`date '+%y'`
              case $year in
                  [5-9][0-9]) year="19$year" ;;
                  [0-4][0-9]) year="20$year" ;;
              esac
          fi
          case $month in
              1|01) month='Jan' ;;
              2|02) month='Feb' ;;
              3|03) month='Mar' ;;
              4|04) month='Apr' ;;
              5|05) month='May' ;;
              6|06) month='Jun' ;;
              7|07) month='Jul' ;;
              8|08) month='Aug' ;;
              9|09) month='Sep' ;;
                10) month='Oct' ;;
                11) month='Nov' ;;
                12) month='Dec' ;;
          esac
          tim="${day}-${month}-${year}"
      fi
      
      #   perform result actions
      mode=show
      if [ ".$opt_i" != . ]; then
          mode=edit
      elif [ ".$opt_e" = .yes ]; then
          mode=edit
      elif [ ".$opt_s" != . ]; then
          mode=edit
      fi
      if [ ".$mode" = .show ]; then
          #   just display the current version
          case $opt_d in
              short )
                  echo "${ver}.${rev}${typ}${lev}"
                  ;;
              long )
                  echo "${ver}.${rev}${typ}${lev} ($tim)"
                  ;;
              libtool )
                  echo "${ltv}"
                  ;;
              hex )
                  echo "${hex}"
                  ;;
              * ) echo "$msgprefix:Error: invalid argument to option \`-d': \`$opt_d'" 1>&2
                  exit 1
                  ;;
          esac
      else
          #   update the version file
      
          #   pre-generate various strings
          triple="${ver}.${rev}${typ}${lev}"
          vHex="$hex"
          vShort="${triple}"
          vLong="${triple} (${tim})"
          vTeX="This is ${name}, Version ${triple} (${tim})"
          vGNU="${name} ${triple} (${tim})"
          vWeb="${name}/${triple}"
          vSCCS="@(#)${name} ${triple} (${tim})"
          vRCS="\$Id: shtool,v 1.1 2001/08/11 15:23:09 rse Exp ${name} ${triple} (${tim}) \$"
      
          #   determine string out of filename
          #   (do NOT try to optimize this in any way because of portability)
          filestr=`echo $file |\
                   tr 'abcdefghijklmnopqrstuvwxyz./%+' \
                      'ABCDEFGHIJKLMNOPQRSTUVWXYZ____' | sed -e 's/-/_/g'`
      
          #   generate uppercase prefix
          prefixupper=`echo $prefix |\
                       tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
      
          #   create the version file according the the selected language
          echo "new version: ${vLong}"
      
          cp /dev/null $file
          case $opt_l in
              txt )
                  echo >>$file ""
                  echo >>$file "  ${file} -- Version Information for ${name} (syntax: Text)"
                  echo >>$file "  [automatically generated and maintained by GNU shtool]"
                  echo >>$file ""
                  echo >>$file "  $vTeX"
                  echo >>$file ""
                  ;;
              c )
                  echo >>$file "/*"
                  echo >>$file "**  ${file} -- Version Information for ${name} (syntax: C/C++)"
                  echo >>$file "**  [automatically generated and maintained by GNU shtool]"
                  echo >>$file "*/"
                  echo >>$file ""
                  echo >>$file "#ifdef _${filestr}_AS_HEADER_"
                  echo >>$file ""
                  echo >>$file "#ifndef _${filestr}_"
                  echo >>$file "#define _${filestr}_"
                  echo >>$file ""
                  echo >>$file "#define ${prefixupper}VERSION ${vHex}"
                  echo >>$file ""
                  echo >>$file "typedef struct {"
                  echo >>$file "    const int   v_hex;"
                  echo >>$file "    const char *v_short;"
                  echo >>$file "    const char *v_long;"
                  echo >>$file "    const char *v_tex;"
                  echo >>$file "    const char *v_gnu;"
                  echo >>$file "    const char *v_web;"
                  echo >>$file "    const char *v_sccs;"
                  echo >>$file "    const char *v_rcs;"
                  echo >>$file "} ${prefix}version_t;"
                  echo >>$file ""
                  echo >>$file "extern ${prefix}version_t ${prefix}version;"
                  echo >>$file ""
                  echo >>$file "#endif /* _${filestr}_ */"
                  echo >>$file ""
                  echo >>$file "#else /* _${filestr}_AS_HEADER_ */"
                  echo >>$file ""
                  echo >>$file "#define _${filestr}_AS_HEADER_"
                  echo >>$file "#include \"${file}\""
                  echo >>$file "#undef  _${filestr}_AS_HEADER_"
                  echo >>$file ""
                  echo >>$file "${prefix}version_t ${prefix}version = {"
                  echo >>$file "    ${vHex},"
                  echo >>$file "    \"${vShort}\","
                  echo >>$file "    \"${vLong}\","
                  echo >>$file "    \"${vTeX}\","
                  echo >>$file "    \"${vGNU}\","
                  echo >>$file "    \"${vWeb}\","
                  echo >>$file "    \"${vSCCS}\","
                  echo >>$file "    \"${vRCS}\""
                  echo >>$file "};"
                  echo >>$file ""
                  echo >>$file "#endif /* _${filestr}_AS_HEADER_ */"
                  echo >>$file ""
                  ;;
              perl )
                  echo >>$file "##"
                  echo >>$file "##  ${file} -- Version Information for ${name} (syntax: Perl)"
                  echo >>$file "##  [automatically generated and maintained by GNU shtool]"
                  echo >>$file "##"
                  echo >>$file ""
                  echo >>$file "my \$${prefix}version = {"
                  echo >>$file "    'v_hex'   => ${vHex},"
                  echo >>$file "    'v_short' => \"${vShort}\","
                  echo >>$file "    'v_long'  => \"${vLong}\","
                  echo >>$file "    'v_tex'   => \"${vTeX}\","
                  echo >>$file "    'v_gnu'   => \"${vGNU}\","
                  echo >>$file "    'v_web'   => \"${vWeb}\","
                  echo >>$file "    'v_sccs'  => \"${vSCCS}\","
                  echo >>$file "    'v_rcs'   => \"\\${vRCS}/\""
                  echo >>$file "};"
                  echo >>$file ""
                  echo >>$file "1;"
                  echo >>$file ""
                  ;;
              python )
                  echo >>$file "##"
                  echo >>$file "##  ${file} -- Version Information for ${name} (syntax: Python)"
                  echo >>$file "##  [automatically generated and maintained by GNU shtool]"
                  echo >>$file "##"
                  echo >>$file ""
                  echo >>$file "class ${prefix}version:"
                  echo >>$file "    v_hex       = ${vHex}"
                  echo >>$file "    v_short     = \"${vShort}\""
                  echo >>$file "    v_long      = \"${vLong}\""
                  echo >>$file "    v_tex       = \"${vTeX}\""
                  echo >>$file "    v_gnu       = \"${vGNU}\""
                  echo >>$file "    v_web       = \"${vWeb}\""
                  echo >>$file "    v_sccs      = \"${vSCCS}\""
                  echo >>$file "    v_rcs       = \"${vRCS}\""
                  echo >>$file ""
                  ;;
              * ) echo "$msgprefix:Error: invalid argument to option \`-l': \`$opt_l'" 1>&2
                  exit 1
                  ;;
          esac
      fi
      ;;
  
  path )
      ##
      ##  path -- Deal with program paths
      ##  Copyright (c) 1998-2001 Ralf S. Engelschall <rse@engelschall.com>
      ##  Originally written for Apache
      ##
      
      namelist="$*"
      
      #   check whether the test command supports the -x option
      if [ -x /bin/sh ] 2>/dev/null; then
          minusx="-x"
      else
          minusx="-r"
      fi
      
      #   split path string
      paths="`echo $opt_p |\
              sed -e 's/^:/.:/' \
                  -e 's/::/:.:/g' \
                  -e 's/:$/:./' \
                  -e 's/:/ /g'`"
      
      #   SPECIAL REQUEST
      #   translate forward to reverse path
      if [ ".$opt_r" = .yes ]; then
          if [ "x$namelist" = "x." ]; then
              rp='.'
          else
              rp=''
              for pe in `IFS="$IFS/"; echo $namelist`; do
                  rp="../$rp"
              done
          fi
          echo $rp | sed -e 's:/$::'
          exit 0
      fi
      
      #   SPECIAL REQUEST
      #   strip out directory or base name
      if [ ".$opt_d" = .yes ]; then
          echo "$namelist" |\
          sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;'
          exit 0
      fi
      if [ ".$opt_b" = .yes ]; then
          echo "$namelist" |\
          sed -e 's;.*/\([^/]*\)$;\1;'
          exit 0
      fi
      
      #   MAGIC SITUATION
      #   Perl Interpreter (perl)
      if [ ".$opt_m" = .yes  -a ".$namelist" = .perl ]; then
          rm -f $tmpfile
          touch $tmpfile
          found=0
          pc=99
          for dir in $paths; do
              dir=`echo $dir | sed -e 's;/*$;;'`
              nc=99
              for name in perl perl5 miniperl; do
                   if [ $minusx "$dir/$name" -a ! -d "$dir/$name" ]; then
                       perl="$dir/$name"
                       pv=`$perl -e 'printf("%.3f", $]);'`
                       echo "$pv:$pc:$nc:$perl" >>$tmpfile
                       found=1
                   fi
                   nc=`expr $nc - 1`
              done
              pc=`expr $pc - 1`
          done
          if [ $found = 1 ]; then
              perl="`cat $tmpfile | sort -u | tail -1 | cut -d: -f4`"
              rm -f $tmpfile
              echo "$perl"
              exit 0
          fi
          exit 1
      fi
      
      #   MAGIC SITUATION
      #   C pre-processor (cpp)
      if [ ".$opt_m" = .yes -a ".$namelist" = .cpp ]; then
          echo >$tmpfile.c "#include <assert.h>"
          echo >>$tmpfile.c "Syntax Error"
          #   1. try the standard cc -E approach
          cpp="${CC-cc} -E"
          (eval "$cpp $tmpfile.c >/dev/null") 2>$tmpfile.out
          my_error=`grep -v '^ *+' $tmpfile.out`
          if [ ".$my_error" != . ]; then
              #   2. try the cc -E approach and GCC's -traditional-ccp option
              cpp="${CC-cc} -E -traditional-cpp"
              (eval "$cpp $tmpfile.c >/dev/null") 2>$tmpfile.out
              my_error=`grep -v '^ *+' $tmpfile.out`
              if [ ".$my_error" != . ]; then
                  #   3. try a standalone cpp command in path and lib dirs
                  for path in $paths /lib /usr/lib /usr/local/lib; do
                      path=`echo $path | sed -e 's;/*$;;'`
                      if [ $minusx "$path/cpp" -a ! -d "$path/cpp" ]; then
                          cpp="$path/cpp"
                          break
                      fi
                  done
                  if [ ".$cpp" != . ]; then
                      (eval "$cpp $tmpfile.c >/dev/null") 2>$tmpfile.out
                      my_error=`grep -v '^ *+' $tmpfile.out`
                      if [ ".$my_error" != . ]; then
                          #   ok, we gave up...
                          cpp=''
                      fi
                  fi
              fi
          fi
          rm -f $tmpfile.c $tmpfile.out
          if [ ".$cpp" != . ]; then
              echo "$cpp"
              exit 0
          fi
          exit 1
      fi
      
      #   STANDARD SITUATION
      #   iterate over names
      for name in $namelist; do
          #   iterate over paths
          for path in $paths; do
              path=`echo $path | sed -e 's;/*$;;'`
              if [ $minusx "$path/$name" -a ! -d "$path/$name" ]; then
                  if [ ".$opt_s" != .yes ]; then
                      echo "$path/$name"
                  fi
                  exit 0
              fi
          done
      done
      exit 1
      ;;
  
  esac
  
  exit 0
  
  ##EOF##
  Index: ossp-pkg/srpc/libxds/xds.m4
  ============================================================
  $ cvs update -p -r1.1 xds.m4
  dnl ##
  dnl ##  XDS - OSSP Extensible Data Serialization Library
  dnl ##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  dnl ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  dnl ##  
  dnl ##  This file is part of OSSP XDS, an extensible data serialization
  dnl ##  library which can be found at http://www.ossp.com/pkg/xds/.
  dnl ##  
  dnl ##  Permission to use, copy, modify, and distribute this software for
  dnl ##  any purpose with or without fee is hereby granted, provided that
  dnl ##  the above copyright notice and this permission notice appear in all
  dnl ##  copies.
  dnl ##  
  dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  dnl ##  SUCH DAMAGE.
  dnl ##
  dnl ##  xds.m4: XDS-specific autoconf macros
  dnl ##
  
  AC_DEFUN(AC_XDS,[
  dnl Check for exact data types.
  dnl
  AC_CHECK_TYPE(u_int8_t, [xds_uint8_t=u_int8_t],
                [AC_CHECK_TYPE(uint8_t, [xds_uint8_t=uint8_t],
  			     [AC_MSG_ERROR([no unsigned 8 bit data type found])])])
  AC_CHECK_TYPE(u_int16_t, [xds_uint16_t=u_int16_t],
                [AC_CHECK_TYPE(uint16_t, [xds_uint16_t=uint16_t],
  			     [AC_MSG_ERROR([no unsigned 16 bit data type found])])])
  AC_CHECK_TYPE(u_int32_t, [xds_uint32_t=u_int32_t],
                [AC_CHECK_TYPE(uint32_t, [xds_uint32_t=uint32_t],
  			     [AC_MSG_ERROR([no unsigned 32 bit data type found])])])
  AC_CHECK_TYPE(u_int64_t, [xds_uint64_t=u_int64_t],
                [AC_CHECK_TYPE(uint64_t, [xds_uint64_t=uint64_t],
  			     [AC_MSG_WARN([no unsigned 64 bit data type found])
  			     xds_uint64_t=undefined])])
  dnl
  AC_CHECK_TYPE(int8_t, [xds_int8_t=int8_t],
                [AC_MSG_ERROR([no signed 8 bit data type found])
  	      ])
  AC_CHECK_TYPE(int16_t, [xds_int16_t=int16_t],
                [AC_MSG_ERROR([no signed 16 bit data type found])
  	      ])
  AC_CHECK_TYPE(int32_t, [xds_int32_t=int32_t],
                [AC_MSG_ERROR([no signed 32 bit data type found])
  	      ])
  AC_CHECK_TYPE(int64_t, [xds_int64_t=int64_t],
                [AC_MSG_WARN([no signed 64 bit data type found])
  	      xds_int64_t=undefined])
  dnl
  AC_SUBST([xds_uint8_t])
  AC_SUBST([xds_uint16_t])
  AC_SUBST([xds_uint32_t])
  AC_SUBST([xds_uint64_t])
  AC_SUBST([xds_int8_t])
  AC_SUBST([xds_int16_t])
  AC_SUBST([xds_int32_t])
  AC_SUBST([xds_int64_t])
  if test "$xds_int64_t" = "undefined" -o "$xds_uint64_t" = "undefined"; then
     have_64_bit_support="#undef XDS_HAVE_64_BIT_SUPPORT"
  else
     have_64_bit_support="#define XDS_HAVE_64_BIT_SUPPORT"
  fi
  AC_SUBST([have_64_bit_support])
  ])
  
  Index: ossp-pkg/srpc/libxds/xds_p.h
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xds_p.h
  --- ossp-pkg/srpc/libxds/xds_p.h	2001/08/09 19:58:35	1.4
  +++ ossp-pkg/srpc/libxds/xds_p.h	2001/08/11 15:23:09	1.5
  @@ -30,6 +30,10 @@
   #ifndef __XDS_P_H__
   #define __XDS_P_H__
   
  +#ifdef HAVE_CONFIG_H
  +#include "config.h"
  +#endif
  +
   #include "xds.h"
   
   #define XDS_INITIAL_BUFFER_CAPACITY   512
  Index: ossp-pkg/srpc/libxds/xds_test.sh
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xds_test.sh
  --- ossp-pkg/srpc/libxds/xds_test.sh	2001/08/09 19:58:35	1.2
  +++ ossp-pkg/srpc/libxds/xds_test.sh	2001/08/11 15:23:09	1.3
  @@ -28,8 +28,11 @@
   ##  xds_test.sh: test suite driver script
   ##
   
  +run="$1"
  +shift
  +
   if [ $# -lt 1 ]; then
  -    echo "Usage: $0 test1.t [...]"
  +    echo "Usage: $0 <run> <test> [<test> ...]"
       exit 1
   fi
   
  @@ -49,7 +52,7 @@
       name=`expr "${suite}" : '\./\.\(.*\)\.t$'`
       echo "$name$pad" | awk '{ printf("%s ", substr($0, 0, n)); }' n=$RESCOLUMN
       numTests=`expr $numTests + 1`
  -    eval ./$suite >.${name}.l 2>&1
  +    eval $run $suite >.${name}.l 2>&1
       if [ $? -eq 0 ]; then
           echo "OK"
       else
  Index: ossp-pkg/srpc/libxds/xds_version.c
  ============================================================
  $ cvs update -p -r1.1 xds_version.c
  /*
  **  xds_version.c -- Version Information for XDS (syntax: C/C++)
  **  [automatically generated and maintained by GNU shtool]
  */
  
  #ifdef _XDS_VERSION_C_AS_HEADER_
  
  #ifndef _XDS_VERSION_C_
  #define _XDS_VERSION_C_
  
  #define XDS_VERSION 0x009200
  
  typedef struct {
      const int   v_hex;
      const char *v_short;
      const char *v_long;
      const char *v_tex;
      const char *v_gnu;
      const char *v_web;
      const char *v_sccs;
      const char *v_rcs;
  } xds_version_t;
  
  extern xds_version_t xds_version;
  
  #endif /* _XDS_VERSION_C_ */
  
  #else /* _XDS_VERSION_C_AS_HEADER_ */
  
  #define _XDS_VERSION_C_AS_HEADER_
  #include "xds_version.c"
  #undef  _XDS_VERSION_C_AS_HEADER_
  
  xds_version_t xds_version = {
      0x009200,
      "0.9.0",
      "0.9.0 (11-Aug-2001)",
      "This is XDS, Version 0.9.0 (11-Aug-2001)",
      "XDS 0.9.0 (11-Aug-2001)",
      "XDS/0.9.0",
      "@(#)XDS 0.9.0 (11-Aug-2001)",
      "$Id: xds_version.c,v 1.1 2001/08/11 15:23:09 rse Exp $"
  };
  
  #endif /* _XDS_VERSION_C_AS_HEADER_ */
  

From ossp-cvs-owner@ossp.org  Sat Aug 11 17:28:55 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7BFSsx95718; Sat, 11 Aug 2001 17:28:54 +0200 (CEST)
Date: Sat, 11 Aug 2001 17:28:54 +0200 (CEST)
Message-Id: <200108111528.f7BFSsx95718@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds .cvsignore Makefile.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   11-Aug-2001 17:28:54
  Branch: HEAD                             Handle: 2001081116285300

  Modified files:
    ossp-pkg/srpc/libxds    .cvsignore Makefile.in

  Log:
    libtool is generated.

  Summary:
    Revision    Changes     Path
    1.8         +1  -0      ossp-pkg/srpc/libxds/.cvsignore
    1.26        +1  -1      ossp-pkg/srpc/libxds/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/.cvsignore
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 .cvsignore
  --- ossp-pkg/srpc/libxds/.cvsignore	2001/08/11 15:23:09	1.7
  +++ ossp-pkg/srpc/libxds/.cvsignore	2001/08/11 15:28:53	1.8
  @@ -5,3 +5,4 @@
   xds-config
   xds-config.1
   config.h
  +libtool
  Index: ossp-pkg/srpc/libxds/Makefile.in
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 Makefile.in
  --- ossp-pkg/srpc/libxds/Makefile.in	2001/08/11 15:23:09	1.25
  +++ ossp-pkg/srpc/libxds/Makefile.in	2001/08/11 15:28:53	1.26
  @@ -95,7 +95,7 @@
   	-$(RM) xds.3
   
   distclean: clean
  -	-$(RM) config.log config.status Makefile
  +	-$(RM) config.log config.status Makefile libtool
   	-$(RM) -r .libs >/dev/null 2>&1 || true
   	-$(RM) xds.h
   

From ossp-cvs-owner@ossp.org  Sat Aug 11 21:22:09 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7BJM7D25024; Sat, 11 Aug 2001 21:22:07 +0200 (CEST)
Date: Sat, 11 Aug 2001 21:22:07 +0200 (CEST)
Message-Id: <200108111922.f7BJM7D25024@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   11-Aug-2001 21:22:07
  Branch: HEAD                             Handle: 2001081120220700

  Modified files:
    ossp-pkg/srpc           TODO

  Log:
    Update TODO entries.

  Summary:
    Revision    Changes     Path
    1.22        +1  -4      ossp-pkg/srpc/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/TODO
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 TODO
  --- ossp-pkg/srpc/TODO	2001/08/08 13:23:05	1.21
  +++ ossp-pkg/srpc/TODO	2001/08/11 19:22:07	1.22
  @@ -28,16 +28,13 @@
      done: 100% [-> regression-tests/*.c]
   
    - UFT-8 RFC: rfc2279.txt
  -   done: 0%
  +   done: 100%
   
    - IEEE values ranges for floating point numbers will be used for
      accurarcy in XML presentation.
   
    - autoconf should find the types for int32 etc. even if they're not
      defined in sys/types.h.
  -
  - - autoconf should specify the compiler flags depending on what the
  -   compiler supports.
   
   o M5 (peti+rse) [1 week until 06-Aug-2001]
    - [peti] documentation for libxds (xds.pod)

From ossp-cvs-owner@ossp.org  Sat Aug 11 21:27:05 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7BJR4e25397; Sat, 11 Aug 2001 21:27:04 +0200 (CEST)
Date: Sat, 11 Aug 2001 21:27:04 +0200 (CEST)
Message-Id: <200108111927.f7BJR4e25397@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   11-Aug-2001 21:27:04
  Branch: HEAD                             Handle: 2001081120270300

  Modified files:
    ossp-pkg/srpc           TODO

  Log:
    add manual page issue and type fallback issue

  Summary:
    Revision    Changes     Path
    1.23        +8  -1      ossp-pkg/srpc/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/TODO
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 TODO
  --- ossp-pkg/srpc/TODO	2001/08/11 19:22:07	1.22
  +++ ossp-pkg/srpc/TODO	2001/08/11 19:27:03	1.23
  @@ -30,11 +30,18 @@
    - UFT-8 RFC: rfc2279.txt
      done: 100%
   
  + - conversion of LaTeX documentation into POD source format
  +   for Unix manual page xds(3).
  +   done: 0%
  +
    - IEEE values ranges for floating point numbers will be used for
      accurarcy in XML presentation.
  +   done: 0%
   
    - autoconf should find the types for int32 etc. even if they're not
  -   defined in sys/types.h.
  +   defined in sys/types.h. And it should fallback to own types in
  +   case no vendor supplied type is found.
  +   done: 0%
   
   o M5 (peti+rse) [1 week until 06-Aug-2001]
    - [peti] documentation for libxds (xds.pod)

From ossp-cvs-owner@ossp.org  Sat Aug 11 21:51:50 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7BJpng28419; Sat, 11 Aug 2001 21:51:49 +0200 (CEST)
Date: Sat, 11 Aug 2001 21:51:49 +0200 (CEST)
Message-Id: <200108111951.f7BJpng28419@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pcre ChangeLog.OSSP shtool
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   11-Aug-2001 21:51:49
  Branch: HEAD                             Handle: 2001081120514900

  Modified files:
    ossp-pkg/pcre           ChangeLog.OSSP shtool

  Log:
    Upgrade to GNU shtool 1.5.4

  Summary:
    Revision    Changes     Path
    1.16        +4  -0      ossp-pkg/pcre/ChangeLog.OSSP
    1.7         +85 -46     ossp-pkg/pcre/shtool
  ____________________________________________________________________________

  Index: ossp-pkg/pcre/ChangeLog.OSSP
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 ChangeLog.OSSP
  --- ossp-pkg/pcre/ChangeLog.OSSP	2000/08/29 19:24:17	1.15
  +++ ossp-pkg/pcre/ChangeLog.OSSP	2001/08/11 19:51:49	1.16
  @@ -1,6 +1,10 @@
   
    OSSP ChangeLog for PCRE
    =======================
  +
  + Changes made to OSSP pcre 3.4-2 (29-Aug-2000 to 07-Aug-2001):
  +
  +  *) Upgraded GNU shtool from 1.5.1 to 1.5.4
    
    Changes made to OSSP pcre 3.4-1 (01-Aug-2000 to 29-Aug-2000):
   
  Index: ossp-pkg/pcre/shtool
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 shtool
  --- ossp-pkg/pcre/shtool	2000/08/02 09:46:06	1.6
  +++ ossp-pkg/pcre/shtool	2001/08/11 19:51:49	1.7
  @@ -1,12 +1,12 @@
   #!/bin/sh
   ##
   ##  GNU shtool -- The GNU Portable Shell Tool
  -##  Copyright (c) 1994-2000 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1994-2001 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  See http://www.gnu.org/software/shtool/ for more information.
   ##  See ftp://ftp.gnu.org/gnu/shtool/ for latest version.
   ##
  -##  Version:  1.5.1 (29-Jul-2000)
  +##  Version:  1.5.4 (14-Jun-2001)
   ##  Contents: 6/17 available modules
   ##
   
  @@ -26,7 +26,7 @@
   ##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
   ##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
   ##
  -##  Notice: Given that you include this file verbatim into your own
  +##  NOTICE: Given that you include this file verbatim into your own
   ##  source tree, you are justified in saying that it remains separate
   ##  from your package, and that this way you are simply just using GNU
   ##  shtool. So, in this situation, there is no requirement that your
  @@ -65,11 +65,11 @@
       exit 1
   fi
   if [ ".$1" = ".-h" -o ".$1" = ".--help" ]; then
  -    echo "This is GNU shtool, version 1.5.1 (29-Jul-2000)"
  -    echo "Copyright (c) 1994-2000 Ralf S. Engelschall <rse@engelschall.com>"
  +    echo "This is GNU shtool, version 1.5.4 (14-Jun-2001)"
  +    echo "Copyright (c) 1994-2001 Ralf S. Engelschall <rse@engelschall.com>"
       echo "Report bugs to <bug-shtool@gnu.org>"
       echo ''
  -    echo "Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]" 
  +    echo "Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]"
       echo ''
       echo 'Available global <options>:'
       echo '  -v, --version   display shtool version information'
  @@ -80,11 +80,11 @@
       echo 'Available <cmd-name> [<cmd-options>] [<cmd-args>]:'
       echo '  echo     [-n] [-e] [<str> ...]'
       echo '  install  [-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>]'
  -    echo '           [-e<ext>] <file> [<file> ...] <path>'
  +    echo '           [-e<sed-cmd>] <file> [<file> ...] <path>'
       echo '  mkdir    [-t] [-f] [-p] [-m<mode>] <dir> [<dir> ...]'
       echo '  fixperm  [-v] [-t] <path> [<path> ...]'
  -    echo '  tarball  [-t] [-v] [-o <tarball>] [-c <prog>] [-d <dir>] [-u'
  -    echo '           <user>] [-g <group>] [-e <pattern>] <path> [<path> ...]'
  +    echo '  tarball  [-t] [-v] [-o<tarball>] [-c<prog>] [-d<dir>] [-u<user>]'
  +    echo '           [-g<group>] [-e<pattern>] <path> [<path> ...]'
       echo '  guessos  '
       echo ''
       echo 'Not available <cmd-name> (because module was not built-in):'
  @@ -105,7 +105,7 @@
       exit 0
   fi
   if [ ".$1" = ".-v" -o ".$1" = ."--version" ]; then
  -    echo "GNU shtool 1.5.1 (29-Jul-2000)"
  +    echo "GNU shtool 1.5.4 (14-Jun-2001)"
       exit 0
   fi
   if [ ".$1" = ".-r" -o ".$1" = ."--recreate" ]; then
  @@ -147,15 +147,15 @@
           ;;
       install )
           str_tool="install"
  -        str_usage="[-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>] [-e<ext>] <file> [<file> ...] <path>"
  +        str_usage="[-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>] [-e<sed-cmd>] <file> [<file> ...] <path>"
           arg_spec="2+"
  -        opt_spec="v.t.c.C.s.m:o:g:e:"
  +        opt_spec="v.t.c.C.s.m:o:g:e+"
           opt_v=no
           opt_t=no
           opt_c=no
           opt_C=no
           opt_s=no
  -        opt_m=""
  +        opt_m="0755"
           opt_o=""
           opt_g=""
           opt_e=""
  @@ -180,7 +180,7 @@
           ;;
       tarball )
           str_tool="tarball"
  -        str_usage="[-t] [-v] [-o <tarball>] [-c <prog>] [-d <dir>] [-u <user>] [-g <group>] [-e <pattern>] <path> [<path> ...]"
  +        str_usage="[-t] [-v] [-o<tarball>] [-c<prog>] [-d<dir>] [-u<user>] [-g<group>] [-e<pattern>] <path> [<path> ...]"
           gen_tmpfile=yes
           arg_spec="1+"
           opt_spec="t.v.o:c:d:u:g:e:"
  @@ -346,6 +346,7 @@
       tmpfile="$tmpdir/.shtool.$$"
       rm -f $tmpfile >/dev/null 2>&1
       touch $tmpfile
  +    chmod 600 $tmpfile
   fi
   
   ##
  @@ -357,7 +358,7 @@
   echo )
       ##
       ##  echo -- Print string with optional construct expansion
  -    ##  Copyright (c) 1998-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1998-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for WML as buildinfo
       ##
       
  @@ -381,7 +382,7 @@
       fi
       
       #   determine terminal bold sequence
  -    term_bold='' 
  +    term_bold=''
       term_norm=''
       if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[Bb]'`" != . ]; then
           case $TERM in
  @@ -432,7 +433,7 @@
       
       #   determine user name
       username=''
  -    if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[uU]'`" != . ]; then
  +    if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[uUgG]'`" != . ]; then
           username="$LOGNAME"
           if [ ".$username" = . ]; then
               username="$USER"
  @@ -473,9 +474,39 @@
               fi
           fi
       fi
  +    
  +    #   determine (primary) group id
  +    groupid=''
  +    if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[gG]'`" != . ]; then
  +        groupid=`egrep "^${username}:" /etc/passwd 2>/dev/null | \
  +                 sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
  +        if [ ".$groupid" = . ]; then
  +            groupid=`(ypcat passwd) 2>/dev/null | egrep "^${username}:" | \
  +                     sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
  +            if [ ".$groupid" = . ]; then
  +                groupid='?'
  +            fi
  +        fi
  +    fi
       
  -    #   determine host name
  +    #   determine (primary) group name
  +    groupname=''
  +    if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%g'`" != . ]; then
  +        groupname=`egrep "^[^:]*:[^:]*:${groupid}:" /etc/group 2>/dev/null | \
  +                   sed -e 's/:.*$//'`
  +        if [ ".$groupname" = . ]; then
  +            groupname=`(ypcat group) 2>/dev/null | \
  +                       egrep "^[^:]*:[^:]*:${groupid}:" | \
  +                       sed -e 's/:.*$//'`
  +            if [ ".$groupname" = . ]; then
  +                groupname='?'
  +            fi
  +        fi
  +    fi
  +    
  +    #   determine host and domain name
       hostname=''
  +    domainname=''
       if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%h'`" != . ]; then
           hostname="`(uname -n) 2>/dev/null |\
                      awk '{ printf("%s", $1); }'`"
  @@ -493,9 +524,6 @@
                   ;;
           esac
       fi
  -    
  -    #   determine domain name
  -    domainname=''
       if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%d'`" != . ]; then
           if [ ".$domainname" = . ]; then
               if [ -f /etc/resolv.conf ]; then
  @@ -555,6 +583,8 @@
                     -e "s/%b/${term_norm}/g" \
                     -e "s/%u/${username}/g" \
                     -e "s/%U/${userid}/g" \
  +                  -e "s/%g/${groupname}/g" \
  +                  -e "s/%G/${groupid}/g" \
                     -e "s/%h/${hostname}/g" \
                     -e "s/%d/${domainname}/g" \
                     -e "s/%D/${time_day}/g" \
  @@ -580,11 +610,11 @@
   install )
       ##
       ##  install -- Install a program, script or datafile
  -    ##  Copyright (c) 1997-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1997-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for shtool
       ##
       
  -    #   determine source(s) and destination 
  +    #   determine source(s) and destination
       argc=$#
       srcs=""
       while [ $# -gt 1 ]; do
  @@ -610,19 +640,13 @@
       for src in $srcs; do
           dst=$dstpath
       
  -        #  If destination is a directory, append the input filename
  +        #   if destination is a directory, append the input filename
           if [ $dstisdir = 1 ]; then
               dstfile=`echo "$src" | sed -e 's;.*/\([^/]*\)$;\1;'`
               dst="$dst/$dstfile"
           fi
       
  -        #  Add a possible extension to src and dst
  -        if [ ".$opt_e" != . ]; then
  -            src="$src$opt_e"
  -            dst="$dst$opt_e"
  -        fi
  -    
  -        #  Check for correct arguments
  +        #   check for correct arguments
           if [ ".$src" = ".$dst" ]; then
               echo "$msgprefix:Warning: source and destination are the same - skipped" 1>&2
               continue
  @@ -632,18 +656,18 @@
               continue
           fi
       
  -        #  Make a temp file name in the destination directory
  +        #   make a temp file name in the destination directory
           dsttmp=`echo $dst |\
                   sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;' -e 's;^$;.;' \
                       -e "s;\$;/#INST@$$#;"`
       
  -        #  Verbosity
  +        #   verbosity
           if [ ".$opt_v" = .yes ]; then
               echo "$src -> $dst" 1>&2
           fi
       
  -        #  Copy or move the file name to the temp name
  -        #  (because we might be not allowed to change the source)
  +        #   copy or move the file name to the temp name
  +        #   (because we might be not allowed to change the source)
           if [ ".$opt_C" = .yes ]; then
               opt_c=yes
           fi
  @@ -659,8 +683,16 @@
               mv $src $dsttmp || exit $?
           fi
       
  -        #  Adjust the target file
  -        #  (we do chmod last to preserve setuid bits)
  +        #   adjust the target file
  +        if [ ".$opt_e" != . ]; then
  +            sed='sed'
  +            for e in $opt_e; do
  +                sed="$sed -e '$e'"
  +            done
  +            cp $dsttmp $dsttmp.old
  +            eval "$sed <$dsttmp.old >$dsttmp" || exit $?
  +            rm -f $dsttmp.old
  +        fi
           if [ ".$opt_s" = .yes ]; then
               if [ ".$opt_t" = .yes ]; then
                   echo "strip $dsttmp" 1>&2
  @@ -679,14 +711,14 @@
               fi
               chgrp $opt_g $dsttmp || exit $?
           fi
  -        if [ ".$opt_m" != . ]; then
  +        if [ ".$opt_m" != ".-" ]; then
               if [ ".$opt_t" = .yes ]; then
                   echo "chmod $opt_m $dsttmp" 1>&2
               fi
               chmod $opt_m $dsttmp || exit $?
           fi
       
  -        #   Determine whether to do a quick install
  +        #   determine whether to do a quick install
           #   (has to be done _after_ the strip was already done)
           quick=no
           if [ ".$opt_C" = .yes ]; then
  @@ -697,7 +729,7 @@
               fi
           fi
       
  -        #   Finally install the file to the real destination
  +        #   finally, install the file to the real destination
           if [ $quick = yes ]; then
               if [ ".$opt_t" = .yes ]; then
                   echo "rm -f $dsttmp" 1>&2
  @@ -715,7 +747,7 @@
   mkdir )
       ##
       ##  mkdir -- Make one or more directories
  -    ##  Copyright (c) 1996-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1996-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for public domain by Noah Friedman <friedman@prep.ai.mit.edu>
       ##  Cleaned up and enhanced for shtool
       ##
  @@ -724,7 +756,7 @@
       for p in ${1+"$@"}; do
           #   if the directory already exists...
           if [ -d "$p" ]; then
  -            if [ ".$opt_f" = .no ] && [ ".$opt_p" = .no ]; then
  +            if [ ".$opt_f" = .no -a ".$opt_p" = .no ]; then
                   echo "$msgprefix:Error: directory already exists: $p" 1>&2
                   errstatus=1
                   break
  @@ -738,6 +770,12 @@
                   echo "mkdir $p" 1>&2
               fi
               mkdir $p || errstatus=$?
  +            if [ ".$opt_m" != . ]; then
  +                if [ ".$opt_t" = .yes ]; then
  +                    echo "chmod $opt_m $p" 1>&2
  +                fi
  +                chmod $opt_m $p || errstatus=$?
  +            fi
           else
               #   the smart situation
               set fnord `echo ":$p" |\
  @@ -774,7 +812,7 @@
   fixperm )
       ##
       ##  fixperm -- Fix file permissions inside a source tree
  -    ##  Copyright (c) 1996-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1996-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for ePerl
       ##
       
  @@ -830,7 +868,7 @@
   tarball )
       ##
       ##  tarball -- Roll distribution tarballs
  -    ##  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
       ##  Originally written for shtool
       ##
       
  @@ -856,7 +894,7 @@
           for tool in `echo $tools | sed -e 's/,/ /g'`; do
               #   iterate over paths
               for path in $paths; do
  -                if [ $minusx "$path/$tool" ] && [ ! -d "$path/$tool" ]; then
  +                if [ $minusx "$path/$tool" -a ! -d "$path/$tool" ]; then
                       eval "prg_${prg}=\"$path/$tool\""
                       break
                   fi
  @@ -882,7 +920,7 @@
               if [ ".$opt_t" = .yes ]; then
                   echo "(cd $src && $prg_find . -type f -depth -print) | sed -e 's:^\\.\$::' -e 's:^\\./::' | cat $exclude >>$tmpfile.lst" 1>&2
               fi
  -            (cd $src && find . -type f -depth -print) |\
  +            (cd $src && $prg_find . -type f -depth -print) |\
               sed -e 's:^\.$::' -e 's:^\./::' | eval cat $exclude >>$tmpfile.lst
           else
               if [ ".$opt_t" = .yes ]; then
  @@ -1056,6 +1094,7 @@
               ;;
           HP-UX:*)
               HPUXVER=`echo ${RELEASE}|sed -e 's/[^.]*.[0B]*//'`
  +            MACHINE=`echo ${MACHINE}|sed -e 's:/:_:'`
               echo "${MACHINE}-hp-hpux${HPUXVER}"; exit 0
               ;;
           IRIX:*)

From ossp-cvs-owner@ossp.org  Sun Aug 12 13:31:48 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7CBVlP51601; Sun, 12 Aug 2001 13:31:47 +0200 (CEST)
Date: Sun, 12 Aug 2001 13:31:47 +0200 (CEST)
Message-Id: <200108121131.f7CBVlP51601@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds LICENSE Makefile.in README aclocal.m4...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   12-Aug-2001 13:31:47
  Branch: HEAD                             Handle: 2001081212314500

  Modified files:
    ossp-pkg/srpc/libxds    LICENSE Makefile.in README aclocal.m4 configure.ac
                            xds-config.in xds-config.pod xds-xml.dtd xds.c
                            xds.h.in xds.m4 xds.pod xds_engine_xdr.c
                            xds_engine_xml.c xds_p.h xds_test.sh
                            xds_test_lib.c xds_test_xdr.c xds_test_xml.c

  Log:
    Hhmm... who has introduced ossp.com?!
    Our project's domain is ossp.org, of course.

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/srpc/libxds/LICENSE
    1.27        +1  -1      ossp-pkg/srpc/libxds/Makefile.in
    1.3         +1  -1      ossp-pkg/srpc/libxds/README
    1.2         +1  -1      ossp-pkg/srpc/libxds/aclocal.m4
    1.21        +1  -1      ossp-pkg/srpc/libxds/configure.ac
    1.2         +1  -1      ossp-pkg/srpc/libxds/xds-config.in
    1.2         +1  -1      ossp-pkg/srpc/libxds/xds-config.pod
    1.2         +1  -1      ossp-pkg/srpc/libxds/xds-xml.dtd
    1.6         +1  -1      ossp-pkg/srpc/libxds/xds.c
    1.14        +1  -1      ossp-pkg/srpc/libxds/xds.h.in
    1.2         +1  -1      ossp-pkg/srpc/libxds/xds.m4
    1.9         +1  -1      ossp-pkg/srpc/libxds/xds.pod
    1.5         +1  -1      ossp-pkg/srpc/libxds/xds_engine_xdr.c
    1.6         +1  -1      ossp-pkg/srpc/libxds/xds_engine_xml.c
    1.6         +1  -1      ossp-pkg/srpc/libxds/xds_p.h
    1.4         +1  -1      ossp-pkg/srpc/libxds/xds_test.sh
    1.4         +1  -1      ossp-pkg/srpc/libxds/xds_test_lib.c
    1.4         +1  -1      ossp-pkg/srpc/libxds/xds_test_xdr.c
    1.4         +1  -1      ossp-pkg/srpc/libxds/xds_test_xml.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/LICENSE
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 LICENSE
  --- ossp-pkg/srpc/libxds/LICENSE	2001/07/02 14:15:51	1.1
  +++ ossp-pkg/srpc/libxds/LICENSE	2001/08/12 11:31:45	1.2
  @@ -3,7 +3,7 @@
   Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   
   This file is part of OSSP XDS, an extensible data serialization
  -library which can be found at http://www.ossp.com/pkg/xds/.
  +library which can be found at http://www.ossp.org/pkg/xds/.
   
   Permission to use, copy, modify, and distribute this software for
   any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/srpc/libxds/Makefile.in
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 Makefile.in
  --- ossp-pkg/srpc/libxds/Makefile.in	2001/08/11 15:28:53	1.26
  +++ ossp-pkg/srpc/libxds/Makefile.in	2001/08/12 11:31:45	1.27
  @@ -4,7 +4,7 @@
   ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##  
   ##  This file is part of OSSP XDS, an extensible data serialization
  -##  library which can be found at http://www.ossp.com/pkg/xds/.
  +##  library which can be found at http://www.ossp.org/pkg/xds/.
   ##  
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/srpc/libxds/README
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 README
  --- ossp-pkg/srpc/libxds/README	2001/08/11 15:23:09	1.2
  +++ ossp-pkg/srpc/libxds/README	2001/08/12 11:31:45	1.3
  @@ -12,7 +12,7 @@
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   
     This file is part of OSSP XDS, an extensible data serialization
  -  library which can be found at http://www.ossp.com/pkg/xds/.
  +  library which can be found at http://www.ossp.org/pkg/xds/.
   
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/srpc/libxds/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 aclocal.m4
  --- ossp-pkg/srpc/libxds/aclocal.m4	2001/08/11 15:23:09	1.1
  +++ ossp-pkg/srpc/libxds/aclocal.m4	2001/08/12 11:31:45	1.2
  @@ -4,7 +4,7 @@
   dnl ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   dnl ##  
   dnl ##  This file is part of OSSP XDS, an extensible data serialization
  -dnl ##  library which can be found at http://www.ossp.com/pkg/xds/.
  +dnl ##  library which can be found at http://www.ossp.org/pkg/xds/.
   dnl ##  
   dnl ##  Permission to use, copy, modify, and distribute this software for
   dnl ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/srpc/libxds/configure.ac
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 configure.ac
  --- ossp-pkg/srpc/libxds/configure.ac	2001/08/11 15:23:09	1.20
  +++ ossp-pkg/srpc/libxds/configure.ac	2001/08/12 11:31:45	1.21
  @@ -4,7 +4,7 @@
   dnl ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   dnl ##  
   dnl ##  This file is part of OSSP XDS, an extensible data serialization
  -dnl ##  library which can be found at http://www.ossp.com/pkg/xds/.
  +dnl ##  library which can be found at http://www.ossp.org/pkg/xds/.
   dnl ##  
   dnl ##  Permission to use, copy, modify, and distribute this software for
   dnl ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/srpc/libxds/xds-config.in
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xds-config.in
  --- ossp-pkg/srpc/libxds/xds-config.in	2001/08/09 21:19:28	1.1
  +++ ossp-pkg/srpc/libxds/xds-config.in	2001/08/12 11:31:45	1.2
  @@ -5,7 +5,7 @@
   ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##  
   ##  This file is part of OSSP XDS, an extensible data serialization
  -##  library which can be found at http://www.ossp.com/pkg/xds/.
  +##  library which can be found at http://www.ossp.org/pkg/xds/.
   ##  
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/srpc/libxds/xds-config.pod
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xds-config.pod
  --- ossp-pkg/srpc/libxds/xds-config.pod	2001/08/09 21:19:28	1.1
  +++ ossp-pkg/srpc/libxds/xds-config.pod	2001/08/12 11:31:45	1.2
  @@ -4,7 +4,7 @@
   ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##  
   ##  This file is part of OSSP XDS, an extensible data serialization
  -##  library which can be found at http://www.ossp.com/pkg/xds/.
  +##  library which can be found at http://www.ossp.org/pkg/xds/.
   ##  
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/srpc/libxds/xds-xml.dtd
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xds-xml.dtd
  --- ossp-pkg/srpc/libxds/xds-xml.dtd	2001/08/09 21:14:44	1.1
  +++ ossp-pkg/srpc/libxds/xds-xml.dtd	2001/08/12 11:31:45	1.2
  @@ -4,7 +4,7 @@
        Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
    
        This file is part of OSSP XDS, an extensible data serialization
  -     library which can be found at http://www.ossp.com/pkg/xds/.
  +     library which can be found at http://www.ossp.org/pkg/xds/.
    
        Permission to use, copy, modify, and distribute this software for
        any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/srpc/libxds/xds.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 xds.c
  --- ossp-pkg/srpc/libxds/xds.c	2001/08/09 21:00:10	1.5
  +++ ossp-pkg/srpc/libxds/xds.c	2001/08/12 11:31:45	1.6
  @@ -4,7 +4,7 @@
   **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP XDS, an extensible data serialization
  -**  library which can be found at http://www.ossp.com/pkg/xds/.
  +**  library which can be found at http://www.ossp.org/pkg/xds/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/srpc/libxds/xds.h.in
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 xds.h.in
  --- ossp-pkg/srpc/libxds/xds.h.in	2001/08/09 19:58:35	1.13
  +++ ossp-pkg/srpc/libxds/xds.h.in	2001/08/12 11:31:45	1.14
  @@ -4,7 +4,7 @@
   **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP XDS, an extensible data serialization
  -**  library which can be found at http://www.ossp.com/pkg/xds/.
  +**  library which can be found at http://www.ossp.org/pkg/xds/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/srpc/libxds/xds.m4
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xds.m4
  --- ossp-pkg/srpc/libxds/xds.m4	2001/08/11 15:23:09	1.1
  +++ ossp-pkg/srpc/libxds/xds.m4	2001/08/12 11:31:45	1.2
  @@ -4,7 +4,7 @@
   dnl ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   dnl ##  
   dnl ##  This file is part of OSSP XDS, an extensible data serialization
  -dnl ##  library which can be found at http://www.ossp.com/pkg/xds/.
  +dnl ##  library which can be found at http://www.ossp.org/pkg/xds/.
   dnl ##  
   dnl ##  Permission to use, copy, modify, and distribute this software for
   dnl ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/srpc/libxds/xds.pod
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 xds.pod
  --- ossp-pkg/srpc/libxds/xds.pod	2001/08/09 19:58:35	1.8
  +++ ossp-pkg/srpc/libxds/xds.pod	2001/08/12 11:31:45	1.9
  @@ -4,7 +4,7 @@
   ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##  
   ##  This file is part of OSSP XDS, an extensible data serialization
  -##  library which can be found at http://www.ossp.com/pkg/xds/.
  +##  library which can be found at http://www.ossp.org/pkg/xds/.
   ##  
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/srpc/libxds/xds_engine_xdr.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xds_engine_xdr.c
  --- ossp-pkg/srpc/libxds/xds_engine_xdr.c	2001/08/09 21:05:18	1.4
  +++ ossp-pkg/srpc/libxds/xds_engine_xdr.c	2001/08/12 11:31:45	1.5
  @@ -4,7 +4,7 @@
   **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP XDS, an extensible data serialization
  -**  library which can be found at http://www.ossp.com/pkg/xds/.
  +**  library which can be found at http://www.ossp.org/pkg/xds/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/srpc/libxds/xds_engine_xml.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 xds_engine_xml.c
  --- ossp-pkg/srpc/libxds/xds_engine_xml.c	2001/08/09 21:05:18	1.5
  +++ ossp-pkg/srpc/libxds/xds_engine_xml.c	2001/08/12 11:31:45	1.6
  @@ -4,7 +4,7 @@
   **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP XDS, an extensible data serialization
  -**  library which can be found at http://www.ossp.com/pkg/xds/.
  +**  library which can be found at http://www.ossp.org/pkg/xds/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/srpc/libxds/xds_p.h
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 xds_p.h
  --- ossp-pkg/srpc/libxds/xds_p.h	2001/08/11 15:23:09	1.5
  +++ ossp-pkg/srpc/libxds/xds_p.h	2001/08/12 11:31:45	1.6
  @@ -4,7 +4,7 @@
   **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP XDS, an extensible data serialization
  -**  library which can be found at http://www.ossp.com/pkg/xds/.
  +**  library which can be found at http://www.ossp.org/pkg/xds/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/srpc/libxds/xds_test.sh
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xds_test.sh
  --- ossp-pkg/srpc/libxds/xds_test.sh	2001/08/11 15:23:09	1.3
  +++ ossp-pkg/srpc/libxds/xds_test.sh	2001/08/12 11:31:45	1.4
  @@ -5,7 +5,7 @@
   ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##  
   ##  This file is part of OSSP XDS, an extensible data serialization
  -##  library which can be found at http://www.ossp.com/pkg/xds/.
  +##  library which can be found at http://www.ossp.org/pkg/xds/.
   ##  
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/srpc/libxds/xds_test_lib.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xds_test_lib.c
  --- ossp-pkg/srpc/libxds/xds_test_lib.c	2001/08/09 20:59:05	1.3
  +++ ossp-pkg/srpc/libxds/xds_test_lib.c	2001/08/12 11:31:45	1.4
  @@ -4,7 +4,7 @@
   **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP XDS, an extensible data serialization
  -**  library which can be found at http://www.ossp.com/pkg/xds/.
  +**  library which can be found at http://www.ossp.org/pkg/xds/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/srpc/libxds/xds_test_xdr.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xds_test_xdr.c
  --- ossp-pkg/srpc/libxds/xds_test_xdr.c	2001/08/09 20:59:05	1.3
  +++ ossp-pkg/srpc/libxds/xds_test_xdr.c	2001/08/12 11:31:45	1.4
  @@ -4,7 +4,7 @@
   **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP XDS, an extensible data serialization
  -**  library which can be found at http://www.ossp.com/pkg/xds/.
  +**  library which can be found at http://www.ossp.org/pkg/xds/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/srpc/libxds/xds_test_xml.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xds_test_xml.c
  --- ossp-pkg/srpc/libxds/xds_test_xml.c	2001/08/09 20:59:05	1.3
  +++ ossp-pkg/srpc/libxds/xds_test_xml.c	2001/08/12 11:31:45	1.4
  @@ -4,7 +4,7 @@
   **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP XDS, an extensible data serialization
  -**  library which can be found at http://www.ossp.com/pkg/xds/.
  +**  library which can be found at http://www.ossp.org/pkg/xds/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that

From ossp-cvs-owner@ossp.org  Mon Aug 13 16:19:59 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7DEJwO52187; Mon, 13 Aug 2001 16:19:58 +0200 (CEST)
Date: Mon, 13 Aug 2001 16:19:58 +0200 (CEST)
Message-Id: <200108131419.f7DEJwO52187@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/docs libxds.tex
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   13-Aug-2001 16:19:58
  Branch: HEAD                             Handle: 2001081315195700

  Modified files:
    ossp-pkg/srpc/libxds/docs libxds.tex

  Log:
    Fixed two typos as pointed out by Thomas.

  Summary:
    Revision    Changes     Path
    1.15        +3  -3      ossp-pkg/srpc/libxds/docs/libxds.tex
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/docs/libxds.tex
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 libxds.tex
  --- ossp-pkg/srpc/libxds/docs/libxds.tex	2001/08/09 15:35:23	1.14
  +++ ossp-pkg/srpc/libxds/docs/libxds.tex	2001/08/13 14:19:57	1.15
  @@ -1,6 +1,6 @@
   % -*- mode: LaTeX; fill-column: 75; -*-
   %
  -% $Id: libxds.tex,v 1.14 2001/08/09 15:35:23 simons Exp $
  +% $Id: libxds.tex,v 1.15 2001/08/13 14:19:57 simons Exp $
   %
   \documentclass[a4paper,10pt,pointlessnumbers,bibtotoc]{scrartcl}
   \usepackage[dvips,xdvi]{graphicx}
  @@ -302,7 +302,7 @@
   buffer as a ``gift'' (\textsf{XDS\_GIFT}) or as a ``loan'' (\textsf{XDS\_LOAN}).
   
   The buffer being a ``loan'' means that the buffer is still owned by the
  -library --- we're only allowed to peak at it. But any call to an XDS
  +library --- we're only allowed to peek at it. But any call to an XDS
   routine may potentially modify the buffer or even change the buffers
   location. Hence the result of a \textsf{xds\_getbuffer()} call with loaning
   semantics is only valid until the next XDS routine is called. After
  @@ -479,7 +479,7 @@
   matter whether loan or gift semantics have been chosen.
   
   \paragraph{Lines 53--54.}
  -Here come the actual decoding of the buffer's contents using {\sf
  +Here comes the actual decoding of the buffer's contents using {\sf
   xds\_decode()}. The syntax is identical to \textsf{xds\_encode()}'s, the only
   difference is that the decoding engines do not expect the values --- like
   the encoding engines did --- but the location where to store the value.

From ossp-cvs-owner@ossp.org  Mon Aug 13 17:20:46 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7DFKjM61692; Mon, 13 Aug 2001 17:20:45 +0200 (CEST)
Date: Mon, 13 Aug 2001 17:20:45 +0200 (CEST)
Message-Id: <200108131520.f7DFKjM61692@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/docs libxds.tex
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   13-Aug-2001 17:20:45
  Branch: HEAD                             Handle: 2001081316204400

  Modified files:
    ossp-pkg/srpc/libxds/docs libxds.tex

  Log:
    Reviewed the document myself and found numerous parts that are
    stilistically problematic.

  Summary:
    Revision    Changes     Path
    1.16        +285 -298   ossp-pkg/srpc/libxds/docs/libxds.tex
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/docs/libxds.tex
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 libxds.tex
  --- ossp-pkg/srpc/libxds/docs/libxds.tex	2001/08/13 14:19:57	1.15
  +++ ossp-pkg/srpc/libxds/docs/libxds.tex	2001/08/13 15:20:44	1.16
  @@ -1,6 +1,6 @@
   % -*- mode: LaTeX; fill-column: 75; -*-
   %
  -% $Id: libxds.tex,v 1.15 2001/08/13 14:19:57 simons Exp $
  +% $Id: libxds.tex,v 1.16 2001/08/13 15:20:44 simons Exp $
   %
   \documentclass[a4paper,10pt,pointlessnumbers,bibtotoc]{scrartcl}
   \usepackage[dvips,xdvi]{graphicx}
  @@ -11,7 +11,7 @@
   \begin{document}
   
   \titlehead{Cable \& Wireless Deutschland GmbH\\Application Services\\Development Team}
  -\title{OSSP XDS ---\\eXtensible Data Serialization}
  +\title{OSSP XDS ---\\Extensible Data Serialization}
   \author{Peter Simons $<$simons@computer.org$>$}
   \date{2001-08-01}
   \maketitle
  @@ -20,12 +20,12 @@
   
   In today's networked world, computer systems of all brands and flavours
   communicate with each other. Unfortunately, these systems are far from
  -being identical: Many systems use different internal representations for
  +being compatible: Many systems use different internal representations for
   the same thing. Look at the (hexadecimal) number \$1234 for instance: On a
  -big endian machine, this number will be stored in memory the way you'd
  +big endian machine, this number is be stored in memory the way you'd
   intuitively expect: \$12~\$34 --- the more significant byte preceeds the
   less significant one. On a little endian machine, though, the number \$1234
  -will be stored like this: \$34~\$12 --- exactly the other way round.
  +is be stored like this: \$34~\$12 --- exactly the other way round.
   
   As a result, you cannot just write the number \$1234 to a socket and expect
   the other end to understand it correctly, because if the endians differ,
  @@ -42,13 +42,12 @@
   \end{figure}
   
   Solving these problems is the domain of XDS; its purpose is to encode data
  -in a way that allows this data to be exchanged between computer systems of
  -different types. Assume you'd want to reliably transfer the value \$1234
  -from host A to host B. Then you would encode the value using XDS, transfer
  -the encoded data over the network, and decode the value again at the other
  -end. Every application that follows this process will read the correct
  -value no matter what native representation its hosting platform uses
  -internally.
  +in a way that allows this data to be exchanged between different computer
  +systems. Assume you'd want to transfer the value \$1234 from host A to host
  +B. Then you would encode it using XDS, transfer the encoded data over the
  +network, and decode the value again at the other end. Every program that
  +follows this process will read the correct value no matter what native
  +representation is used internally.
   
   There is a rich variety of applications for such a functionality: XDS
   may be used to encode data before it is written to disk or read from the
  @@ -73,24 +72,24 @@
   though, for maximum performance.
   
   \paragraph{Performance.}
  -Since all transferred data has to wander through XDS, the library has been
  +Since all transferred data has to pass through XDS, the library has been
   written to encode and decode with maximum performance. The generic encoding
  -framework adds almost no run-time overhead to the encoding process. If
  -non-automatic buffer management has been selected, hardly anything but the
  -actual encoding/decoding engines is executed.
  +framework adds almost no run-time overhead to the actual encoding process:
  +If non-automatic buffer management has been selected, hardly anything but
  +the actual encoding/decoding engine is executed.
   
   \paragraph{Robustness.}
  -In order to verify that the library is working correctly, a set of
  -regression tests is included in the distribution. The test suites will ---
  -among other things --- encode known values and compare the result with the
  +In order to verify that the library works correctly, a set of regression
  +tests is included in the distribution. These test suites will --- among
  +other things --- encode known values and compare the result with the
   expected (correct) values. This ensures that XDS works correctly on any
   platform.
   
  -\paragraph{Use standard formats.}
  +\paragraph{Use of standard formats.}
   The supported XDR and XML formats are widely known and accepted, meaning
  -that they are interoperable with other marshaling implementations. For XDR
  -for instance, it would be possible to encode data with XDS and to decode it
  -with an entirely different XDR implementation or vice versa.
  +that XDS is interoperable with other marshaling implementations: It is
  +possible to encode data with XDS and to decode it with an entirely
  +different XDR implementation or vice versa.
   
   \paragraph{Portability.}
   XDS has been written with portability in mind. Development took place on
  @@ -125,10 +124,10 @@
   register an arbitrary number of encoding or decoding engines within the
   context.
   
  -A set of engines has been included in the library. These routines will
  -handle any elementary datatype included in the ISO-C language such as
  -32-bit integers, 64-bit integers, unsigned integers (of both 32- and
  -64-bit), floating point numbers, strings and octet streams.
  +Two sets of engines are included in the library. These routines will handle
  +any elementary datatype defined by the ISO-C language, such as 32-bit
  +integers, 64-bit integers, unsigned integers (of both 32- and 64-bit),
  +floating point numbers, strings and octet streams.
   
   Once all required encoding/decoding engines are registered, the routines
   \textsf{xds\_encode()} or \textsf{xds\_\-decode()} may be used to actually
  @@ -136,34 +135,24 @@
   has been registered can be handled by the library.
   
   This means, that it is possible for the developer to write custom engines
  -for any data type he desires to use and to register them in the context as
  -long as these engines adhere to the \textsf{xds\_engine\_t} interface defined
  -in \textsf{xds.h}.
  -
  -In particular it is possible to register meta engines. That is an engine
  -designed to encode or decode structures --- data types which consist of
  -several elementary data types. The engine for such a structure will simply
  -re-use the existing engines in order to encode or decode the whole
  -structure. The clou here is that the meta engine doesn't even need to know
  -\emph{which} low-level engines are registered in order to use them. Hence,
  -a meta engine may format the whole structure in XDR, XML, or any other
  -format without needing to know anything about the details.
  -
  -This topic is addressed in great detail in section~\ref{meta engines} of
  -this document, but before we come to that rather advanced topic, let us
  -start by studying two simple examples of how data is encoded and decoded
  -using XDS.
  +for any data type he desires to use and to register them in the context ---
  +as long as these engines adhere to the \textsf{xds\_engine\_t} interface
  +defined in \textsf{xds.h}.
  +
  +In particular, it is possible to register meta engines. That is an engine
  +designed to encode or decode data types, which consist of several
  +elementary data types. Such an engine will simply re-use the existing
  +engines to encode or decode the elements of the structure.
   
   \section{Using the XDS library}
   
   \subsection{Encoding}
   
   The following example program will encode three variables using the XDR
  -engines. The result of the process will then be written to the standard
  -output stream, which can be redirected to a file or piped into the decoding
  -program described in the next section. Just take a look at the source code
  -for a moment, we will then go on to discuss all relevant sections line by
  -line.
  +engines. The encoded results will be written to the standard output stream,
  +which can be redirected to a file or piped into the decoding program
  +described in the next section. Just take a look at the source code for a
  +moment, we will then go on to discuss all relevant sections line by line.
   
   \begin{Verbatim}[numbers=left,fontsize=\small,frame=lines]
   #include <stdio.h>
  @@ -223,9 +212,9 @@
   
   \paragraph{Lines 1--5.}
   The program starts by including several system headers, which define the
  -prototypes for some routines we use. The most interesting header in our
  -case is of course \textsf{xds.h} --- the header of XDS. Please note that
  -all declarations required to use XDS are included in that file.
  +prototypes for the routines we use. The most interesting header in our case
  +is of course \textsf{xds.h} --- the header of XDS. Please note that all
  +declarations required to use XDS are included in that file.
   
   \paragraph{Lines 7--13.}
   The \textsf{error\_exit()} routine is not relevant for the example; we just
  @@ -239,23 +228,22 @@
   further details.
   
   \paragraph{Lines 26--28.}
  -First of all we have to obtain an XDS context for all further operation.
  -This is done by calling \textsf{xds\_init()}. Since we intend to \emph{encode}
  -data, we initialize the context in encoding mode. The only other mode of
  -operation would be decoding mode, but this is demonstrated in the next
  -section.
  -
  -All routines in XDS return a code from a small list of return codes defined
  -in \textsf{xds.h}, but \textsf{xds\_init()} is different: It will return a
  -pointer to an \textsf{xds\_t} in case of success and \textsf{NULL} in case
  -of failure. One reason why \textsf{xds\_init()} would fail is because it
  -can't allocate the memory required to initialize the context. In this case,
  -the system variable \textsf{errno} is set to \textsf{ENOMEM}. Another
  -reason why \textsf{xds\_init()} would fail is because the mode parameter is
  -invalid, in which case \textsf{errno} woulde be set to \textsf{EINVAL}. If
  -XDS has been compiled with assertions enabled, such an error would result
  -in an assertion error, terminating the program with a diagnostic message
  -immediately.
  +First of all we have to obtain an XDS context. This is done by calling
  +\textsf{xds\_init()}. Since we intend to \emph{encode} data, we initialize
  +the context in encoding mode. The only other mode of operation would be
  +decoding mode, but this is demonstrated in the next section.
  +
  +All other routines in XDS return a code from a small list of return codes
  +defined in \textsf{xds.h}, but \textsf{xds\_init()} is different: It
  +returns a pointer to an \textsf{xds\_t} in case of success and
  +\textsf{NULL} in case of failure. One reason why \textsf{xds\_init()} would
  +fail is because it can't allocate the memory required to initialize the
  +context. In this case, the system variable \textsf{errno} is set to
  +\textsf{ENOMEM}. The reason why \textsf{xds\_init()} would fail is because
  +the mode parameter is invalid, in which case \textsf{errno} woulde be set
  +to \textsf{EINVAL}. If XDS has been compiled with assertions enabled, such
  +an error would result in an assertion error, terminating the program with a
  +diagnostic message immediately.
   
   \paragraph{Lines 30--33.}
   Once we have obtained a valid XDS context, we register the engines we need.
  @@ -264,35 +252,36 @@
   engines to register are \textsf{xdr\_encode\_int32()},
   \textsf{xdr\_encode\_uint32()}, and \textsf{xdr\_encode\_string()}. (A
   complete list of available engines can be found in \textsf{xds.h}, in
  -section~\ref{xdr}~and~\ref{xml}, or in the manual pages for the library.
  -Please note that we could switch the deployed encoding format simply be
  -using the corresponding \textsf{xml\_encode\_XXX()} engines here. We could
  -even mix XDR and XML encoding as we see fit but it's hard to think of a
  -case where this would make sense.
  -
  -As you can see in the code, the developer is free to choose a name he'd
  -like to register the engine under. These names may only contain
  -alphanumerical characters plus the hyphen (``\verb#-#'') and the underscore
  -(``\verb#_#''). You can choose any name you want, but it is recommended to
  -follow the naming scheme of the corresponding engine. Why this is
  -recommended will be seen in section~\ref{meta engines}.
  +section~\ref{xdr}~and~\ref{xml}, or in the manual pages for the library.)
  +Please note that we could switch the encoding format simply by using the
  +corresponding \textsf{xml\_encode\_XXX()} engines here. We could even mix
  +XDR and XML encoding as we see fit, but it's hard to think of a case where
  +this would make sense~\dots{}
  +
  +The developer is free to choose a name he'd like to register an engine
  +under, but the name may only contain alphanumerical characters, hyphens
  +(``\verb#-#'') or underscores (``\verb#_#''). You can choose any name you
  +want, but it is recommended to follow the naming scheme of the
  +corresponding engine. Why this is recommended will become clear in
  +section~\ref{meta engines}.
   
   \paragraph{Lines 35--36.}
  -This is the place where the actual encoding takes place. As parameters,
  -\textsf{xds\_encode()} requires a valid encoding context plus a format string
  -that describes how the following parameters are to be interpreted. While
  -the concept is obviously identical to \textsf{sprintf()}, the syntax is
  -different. The format string may contain an arbitrary number of names,
  +This is where the actual encoding takes place. As parameters,
  +\textsf{xds\_encode()} requires a valid encoding context plus a format
  +string that describes how the following parameters are to be interpreted.
  +While the concept is obviously identical to \textsf{sprintf(3)}, the syntax
  +is different: The format string may contain an arbitrary number of names,
   which are delimited by an arbitrary number of any character that is not a
  -legal character for engine names. Thus you can delimit the names by colons,
  -blanks, or whatever you like.
  +legal character for engine names. We recommend to delimit the names by
  +colons or blanks.
   
   For each valid engine name in the format string, a corresponding parameter
  -must follow. What these parameters mean depends on the engine you're using.
  -The engines provided with the XDS library will expect the value to encode,
  -but theoretically developers are free to write encoding and decoding
  -engines that expect virtually any kind of information here. More about this
  -will explained in section~\ref{meta engines}.
  +must follow in the varadic argument. How these parameters are interpreted
  +depends on the engine you're using. The engines provided with the XDS
  +library will expect the value to encode, but theoretically developers are
  +free to write encoding and decoding engines that expect virtually any kind
  +of information here. More about this will explained in section~\ref{meta
  +engines}.
   
   \paragraph{Lines 38--39.}
   We have encoded all values we wanted to encode, now we can get the result
  @@ -302,15 +291,14 @@
   buffer as a ``gift'' (\textsf{XDS\_GIFT}) or as a ``loan'' (\textsf{XDS\_LOAN}).
   
   The buffer being a ``loan'' means that the buffer is still owned by the
  -library --- we're only allowed to peek at it. But any call to an XDS
  -routine may potentially modify the buffer or even change the buffers
  -location. Hence the result of a \textsf{xds\_getbuffer()} call with loaning
  -semantics is only valid until the next XDS routine is called. After
  -that, it is invalid.
  -
  -If we choose the gift semantics, the buffer we receive will be owned by us;
  -the library will not touch the buffer again. This means of course, that
  -we're responsible for \textsf{free()}ing the buffer when we don't need it
  +library --- we're only allowed to peek at it. Any call to an XDS routine
  +may modify the buffer or even change the buffers location. Hence the result
  +of a \textsf{xds\_getbuffer()} call with loaning semantics is only valid
  +until the next XDS routine is called.
  +
  +If we ``gift'' semantics, the buffer we receive will be owned by us; the
  +library will not touch the buffer again. This means of course, that we're
  +responsible for \textsf{free(3)}ing the buffer when we don't need it
   anymore.
   
   \paragraph{Line 41.}
  @@ -322,16 +310,16 @@
   Write the buffer with the encoded data to the standard output stream.
   
   \paragraph{Line 45.}
  -Now that we don't need the buffer anymore, we have to return the memory it
  -uses to the system. XDS won't do that for us.
  +Now that we don't need the buffer anymore, we can return the memory it uses
  +to the system.
   
   \paragraph{Lines 47--50.}
   Write a short report of what we have done to the standard error channel.
   
   \bigskip
   Finally, let us compile and execute the example program shown above. For
  -convenience, it is included in the distribution under the name
  -\textsf{docs/encode.c}. You can compile and execute the program as follows:
  +convenience, it is included in the distribution as \textsf{docs/encode.c}.
  +You can compile and execute the program as follows:
   
   \begin{quote}
   \begin{verbatim}
  @@ -446,7 +434,7 @@
   function, and create the required variables on the stack.
   
   \paragraph{Lines 27--39.}
  -These instructions will read an unspecified number of bytes from the
  +These instructions will read an any number of bytes from the
   standard input stream --- as long as the input does not exceed the size of
   the \textsf{buffer} variable. In order to provide the program with the
   appropriate input, redirect the standard input stream to the file
  @@ -455,23 +443,23 @@
   
   \paragraph{Lines 41-43.}
   Create a context for decoding the values. The semantics are identical to
  -those described in the previous section.
  +those described in the encoding example.
   
   \paragraph{Lines 45--48.}
   Register the decoding engines in the context. Please note that obviously
   the decoding engines must correspond to the encoding engines used to create
   the data we're about to process. Using, say, an XML engine to decode XDR
  -data will at best return with an error --- in the worst case, it will
  -return incorrect results!
  +data will at best return an error --- in the worst case, it will return
  +incorrect results!
   
   \paragraph{Lines 50-51.}
  -Here we do not get a buffer from the library, we \emph{set} the buffer
  -we've read earlier in the context for decoding. Please note that we use
  -loan semantics in this case, not gift semantics. This is necessary because
  -\textsf{buffer} has not been allocated by \textsf{malloc()} --- the variable
  -lives on the stack. This means that we cannot give it to XDS because
  -XDS expects to be able to \textsf{free()} the buffer when the context is
  -destroyed.
  +Here we do not \emph{get} a buffer from the library, we \emph{set} the
  +buffer we've read earlier in the context for decoding. Please note that we
  +use loan semantics in this case, not gift semantics. This is necessary
  +because \textsf{buffer} has not been allocated by \textsf{malloc(3)} ---
  +the variable is located on the stack. This means, that we cannot give it to
  +XDS because XDS expects to be able to \textsf{free(3)} the buffer when the
  +context is destroyed.
   
   Loan semantics are fine, though, all we have to do is to take care that we
   don't erase or modify the contents of \textsf{buffer} while XDS operates on
  @@ -479,24 +467,25 @@
   matter whether loan or gift semantics have been chosen.
   
   \paragraph{Lines 53--54.}
  -Here comes the actual decoding of the buffer's contents using {\sf
  -xds\_decode()}. The syntax is identical to \textsf{xds\_encode()}'s, the only
  -difference is that the decoding engines do not expect the values --- like
  -the encoding engines did --- but the location where to store the value.
  -Thus we pass the addresses of the appropriate variables here. If the routine
  -returns with \textsf{XDS\_OK}, the decoded values will have been stored in
  -those locations.
  +Here comes the actual decoding of the buffer's content using
  +\textsf{xds\_decode()}. The syntax is identical to
  +\textsf{xds\_encode()}'s, the only difference is that the decoding engines
  +do not expect values like the encoding engines did, but the location where
  +to store the value. Thus, we pass the addresses of the appropriate
  +variables here. If the routine returns with \textsf{XDS\_OK}, the decoded
  +values will have been stored in those locations.
   
   It should be noted that the decoded string cannot trivially be returned
  -this way. Instead, \textsf{xds\_decode()} will use \textsf{malloc()} to allocate
  -a buffer barely large enough to hold the string. The address of that buffer
  -is then stored in the pointer \textsf{string}. Of course this means that the
  -application has to \textsf{free()} the string once it's not required anymore.
  +this way. Instead, \textsf{xds\_decode()} will use \textsf{malloc(3)} to
  +allocate a buffer large enough to hold the string. The address of that
  +buffer is then stored in the pointer \textsf{string}. Of course, this means
  +that the application has to \textsf{free(3)} the string once it's not
  +required anymore.
   
   \paragraph{Line 56.}
  -We don't need the context anymore, so we destroy it and free all used
  -resources. This does not affect \textsf{buffer} in any way because we used
  -loan semantics.
  +We don't need the context anymore, so we destroy it and thereby free all
  +used resources. This does not affect \textsf{buffer} in any way because we
  +used loan semantics.
   
   \paragraph{Lines 58-61.}
   Print the decoded values to the standard error stream for the user to take
  @@ -522,9 +511,8 @@
   \end{verbatim}
   \end{quote}
   
  -Of course we assume that the \textsf{output} file has been created as
  -described in the previous section, otherwise you cannot trivially use the
  -example program. Alternatively, you could execute both programs like this:
  +We assume that the \textsf{output} file has been created as described in
  +the previous section. Otherwise, you can execute both programs like this:
   
   \begin{quote}
   \begin{Verbatim}[fontsize=\small]
  @@ -567,14 +555,14 @@
   data types rather than the familiar ones like \textsf{int}, \textsf{long},
   etc. The reason is that these data types have an undefined size. An
   \textsf{int} variable will have, say, 32 bits when compiled on the average
  -Unix machine, but when the same source is compiled on a 64-bit machine,
  +Unix machine, but when the same program is compiled on a 64-bit machine
   like TRUE64 Unix, it will have a size of 64 bit. That is a problem when
   those structures have to be exchanged between entirely different systems,
   because the structures are binary incompatible --- something even XDS
   cannot remedy.
   
  -Anyway, in order to encode an instance of this structure, we write an
  -encoding engine:
  +In order to encode an instance of this structure, we write an encoding
  +engine:
   
   \begin{quote}
   \begin{verbatim}
  @@ -592,58 +580,60 @@
   \end{verbatim}
   \end{quote}
   
  -This engine does nothing but take the address of the ``mystruct'' instance
  -from the stack and then use xds\_encode() to handle all elements of
  -``mystruct'' separately --- which is fine, because these data types are
  -supperted by XDS already. It is worth noting, though, that we refer to
  -the other engines by name, meaning that these engines must be registered in
  -``xds'' by that name!
  +This engine takes the address of the ``mystruct'' structure from the stack
  +and then uses \textsf{xds\_encode()} to handle all elements of ``mystruct''
  +separately --- which is fine, because these data types are supperted by XDS
  +already. It is worth noting, though, that we refer to the other engines by
  +name, meaning that these engines must be registered in ``xds'' by that
  +name!
   
   What is very nice, though, is the fact that this encoding engine does not
  -even need to know which  engines are used to encode the actual
  -values! If the user registeres the XDR engines under the appropriate names,
  +even need to know which engines are used to encode the actual values! If
  +the user registeres the XDR engines under the appropriate names,
   ``mystruct'' will be encoded in XDR. If the user registeres the XML engines
  -under the appropriate names, ``mystruct'' will be encoded in XML. Because of
  -that property we call such an engine a ``meta engine''.
  +under the appropriate names, ``mystruct'' will be encoded in XML. Because
  +of that property, we call such an engine a ``meta engine''.
   
  -Of coures you need not necessarily implement an engine like that: Rather
  -than going through xds\_encode(), it would be possible to execute the
  -appropriate encoding engines directly. This had the advantage of not
  -depending on those engines being registered at all, but it would make the
  -meta engine depend on the elementary engines unnecessarily.
  +Of coures you need not necessarily implement an engine as \emph{meta}
  +engine: Rather than going through \textsf{xds\_encode()}, it would be
  +possible to execute the appropriate encoding engines directly. This had the
  +advantage of not depending on those engines being registered at all, but it
  +would make the custom engine depend on the elementary engines --- what is
  +an unnecessary limitation.
   
   One more word about the engine syntax and semantics: As has been mentioned
  -earlier, any function that adheres to the shown above is potentially an
  -engine. These parameters have the following meaning:
  +earlier, any function that adheres to the interface shown above is
  +potentially an engine. These parameters have the following meaning:
   
   \begin{itemize}
   
   \item xds --- This is the XDS context that was originally provided to the
  -xds\_encode() call, which in turn executed the engine. It may be used, for
  -example, for executing xds\_en\-code() again like we did in the example
  -engine shown before.
  +\textsf{xds\_encode()} call, which in turn executed the engine. It may be
  +used, for example, for executing \textsf{xds\_en\-code()} again like we did
  +in our example engines.
   
   \item engine\_context --- The engine context can be used by the engine to
   store any type of internal information. The value the engine will receive
  -must have been provided when the engine was registered by xds\_register().
  -Engines may obviously neglect this parameter if they don't need a context
  -of their own --- all engines included in this distribution do so.
  +must have been provided when the engine was registered by
  +\textsf{xds\_register()}. Engines obviously may neglect this parameter if
  +they don't need a context of their own --- all engines included in the
  +distribution do so.
   
  -\item buffer --- This parameter points to the buffer in which the encoded
  -data should be written. In decoding mode, ``buffer'' points to the encoded
  +\item buffer --- This parameter points to the buffer the encoded data
  +should be written to. In decoding mode, ``buffer'' points to the encoded
   data, which should be decoded; the location where the results should be
   stored at can be found on the stack then.
   
  -\item buffer\_size --- The number of bytes that are available in
  -``buffer''. In encoding mode, this means ``free space'', in decoding mode,
  +\item buffer\_size --- The number of bytes available in ``buffer''. In
  +encoding mode, this means ``free space'', in decoding mode,
   ``buffer\_size'' determines how many bytes of encoded data are available in
  -``buffer'' for consumation.
  +``buffer'' for consumption.
   
   \item used\_buffer\_size --- This parameter points to a variable, which the
   callback must set before returning in order to let the framework know how
  -many bytes it actually used in ``buffer''. A callback encoding, say, an
  -int32 number into a 8 byte text representation would set the
  -used\_buffer\_size to 8, for instance:
  +many bytes it consumed from ``buffer''. A callback encoding, say, an int32
  +number into a 8 bytes text representation would set the used\_buffer\_size
  +to 8:
   \begin{quote}
   \begin{verbatim}
   *used_buffer_size = 8;
  @@ -654,11 +644,11 @@
   bytes the engines has read from ``buffer''.
   
   \item args --- This pointer points to an initialized varadic argument. Use
  -the standard C macro va\_arg() to fetch the actual data.
  +the standard C macro \textsf{va\_arg(3)} to fetch the actual data.
   
   \end{itemize}
   
  -A callback may return any of the following return codes as defined in
  +A callback may return any of the following return codes, as defined in
   \textsf{xds.h}:
   
   \begin{itemize}
  @@ -670,23 +660,23 @@
   data. The callback may set ``*used\_buffer\_size'' to the number of bytes
   it needs in ``buffer'', thereby giving the framework a hint by how many
   bytes it should enlarge the buffer before trying the engine again, but just
  -leaving ``*used\_buffer\_size'' alone will work fine, too, it may just be a
  +leaving ``*used\_buffer\_size'' alone will work fine too, it may just be a
   bit less efficient in some cases. Obviously this return code does not make
   much sense in decoding mode.
   
  -\item XDS\_ERR\_INVALID\_ARG --- Unexpected parameters.
  +\item XDS\_ERR\_INVALID\_ARG --- Unexpected or incorrect parameters.
   
  -\item XDS\_ERR\_TYPE\_MISMATCH --- This return code should be returned in
  +\item XDS\_ERR\_TYPE\_MISMATCH --- This return code will be returned in
   decoding mode in case the decoding engine realizes that the data it is
  -decoding does not fit what it's expecting. Not all encoding formats will
  +decoding does not fit what it is expecting. Not all encoding formats will
   allow to detect this at all. XDR, for example, does not.
   
  -\item XDS\_ERR\_UNDERFLOW --- In decode mode, this error should be returned
  -when an engine needs, say, 4 byte of data in order to decode a value but
  +\item XDS\_ERR\_UNDERFLOW --- In decode mode, this error is be returned
  +when an engine needs, say, 4 bytes of data in order to decode a value but
   ``buffer''/''buffer\_size'' provides less.
   
   \item XDS\_ERR\_UNKNOWN --- Any other reason to fail than those listed
  -before.
  +before. Catch all~\dots{}
   
   \end{itemize}
   
  @@ -720,11 +710,11 @@
   \end{verbatim}
   \end{quote}
   
  -The engine simply calls xds\_decode() to handle the separate data types.
  -The only complication is that the octet stream decoding engines return a
  -pointer to \textsf{malloc()}ed buffer --- what is not what we need. Thus we
  -have to manually copy the contents of that buffer into the right place in
  -the structure and free the (now unused) buffer again.
  +The engine simply calls \textsf{xds\_decode()} to handle the separate data
  +types. The only complication is that the octet stream decoding engines
  +return a pointer to \textsf{malloc(3)}ed buffer --- what is not what we
  +need. Thus we have to manually copy the contents of that buffer into the
  +right place in the structure and free the (now unused) buffer again.
   
   A complete example program encoding and decoding ``mystruct'' can be found
   at \textsf{docs/\-extended.c} in the distribution.
  @@ -737,20 +727,21 @@
   This routine creates and initializes a context for use with the XDS
   library. The ``mode'' parameter may be either \textsf{XDS\_ENCODE} or
   \textsf{XDS\_DECODE}, depending on whether you want to encode or to decode
  -data. If successful, xds\_init() returns a pointer to the XDS context
  -structure. In case of failure, though, xds\_init() will return
  -\textsf{NULL} and set \textsf{errno} to ENOMEM (failed to allocate internal
  -memory buffers) or EINVAL (``mode'' parameter was invalid).
  +data. If successful, \textsf{xds\_init()} returns a pointer to the XDS
  +context structure. In case of failure, \textsf{xds\_init()} returns
  +\textsf{NULL} and sets \textsf{errno} to ENOMEM (failed to allocate
  +internal memory buffers) or EINVAL (``mode'' parameter was invalid).
   
  -A context obtained from xds\_init() should be destroyed by calling
  -xds\_destroy() when it is not needed any more.
  +A context obtained from \textsf{xds\_init()} must be destroyed by
  +\textsf{xds\_destroy()} when it is not needed any more.
   
   \subsection{void xds\_destroy(xds\_t*~\underline{xds});}
   
  -xds\_destroy() will destroy an XDS context created by xds\_init(). Doing so
  -will return all resources associated with this context --- most notably the
  -memory used to buffer the results of encoding or decoding any values. A
  -context may not be used anymore after it has been destroyed.
  +\textsf{xds\_destroy()} will destroy an XDS context created by
  +\textsf{xds\_init()}. Doing so will return all resources associated with
  +this context --- most notably the memory used to buffer the results of
  +encoding or decoding any values. A context may not be used after it has
  +been destroyed.
   
   \subsection{int xds\_register(xds\_t*~\underline{xds}, const~char*~\underline{name}, xds\_engine\_t~\underline{engine}, void*~\underline{engine\_context});}
   
  @@ -766,35 +757,34 @@
   \end{verbatim}
   \end{quote}
   
  -By calling xds\_register(), the engine ``engine'' will be registered under
  -the name ``name'' in the XDS context ``xds''. The last parameter
  -``engine\_context'' may be specified as the user sees fit: It will be
  +By calling \textsf{xds\_register()}, the engine ``engine'' will be
  +registered under the name ``name'' in the XDS context ``xds''. The last
  +parameter ``engine\_context'' may be used as the user sees fit: It will be
   passed when the engine is actually called and may be used to implement an
   engine-specific context. Most engines will not need a context of their own,
  -in which case \textsf{NULL} should be used here.
  +in which case \textsf{NULL} should be specified here.
   
  -Please note that until the user calls xds\_register() for an XDS context he
  -obtained from xds\_init(), no engines are registered for that context. Even
  -the engines included in the library distribution are not registered
  -automatically.
  +Please note that until the user calls \textsf{xds\_register()} for an XDS
  +context he obtained from \textsf{xds\_init()}, no engines are registered
  +for that context. Even the engines included in the library distribution are
  +not registered automatically.
   
   For engine names, any combination of the characters ``a--z'', ``A--Z'',
   ``0--9'', ``-'', and ``\_'' may be used; anything else is not a legal
   engine name component.
   
  -xds\_register() may return the following return codes: \textsf{XDS\_OK}
  -        (everything went fine; the engine is registered now),
  +\textsf{xds\_register()} may return the following return codes:
  +\textsf{XDS\_OK} (everything went fine; the engine is registered now),
   \textsf{XDS\_ERR\_INVALID\_ARG} (either ``xds'', ``name'', or ``engine''
  -        are \textsf{NULL} or ``name'' contains illegal characters for an engine
  -        name), or
  -\textsf{XDS\_ERR\_NO\_MEM} (failed to allocate internally required
  -        buffers).
  +are \textsf{NULL} or ``name'' contains illegal characters for an engine
  +name), or \textsf{XDS\_ERR\_NO\_MEM} (failed to allocate internally
  +required buffers).
   
   \subsection{int xds\_unregister(xds\_t*~\underline{xds}, const~char*~\underline{name});}
   
  -xds\_unregister() will remove the engine ``name'' from XDS context ``xds''.
  -The function will return \textsf{XDS\_OK} in case everything went fine,
  -\textsf{XDS\_ERR\_UNKNOWN\_ENGINE} in case the engine ``name'' is not
  +\textsf{xds\_unregister()} will remove the engine ``name'' from XDS context
  +``xds''. The function will return \textsf{XDS\_OK} in case everything went
  +fine, \textsf{XDS\_ERR\_UNKNOWN\_ENGINE} in case the engine ``name'' is not
   registered in ``xds'', or \textsf{XDS\_ERR\_INVALID\_ARG} if either ``xds''
   or ``name'' are \textsf{NULL} or ``name'' contains illegal characters for
   an engine name.
  @@ -811,57 +801,55 @@
   
   This routine allows the user to control XDS' buffer handling: Calling it
   will replace the buffer currently used in ``xds''. The address and size of
  -that buffer are passed to xds\_setbuffer() via the ``buffer'' and
  +that buffer are passed to \textsf{xds\_setbuffer()} via the ``buffer'' and
   ``buffer\_len'' parameters. The ``xds'' parameter determines for which XDS
   context the new buffer will be set. Furthermore, you can set ``flag'' to
   either \textsf{XDS\_GIFT} or \textsf{XDS\_LOAN}.
   
  -A setting of \textsf{XDS\_GIFT} will tell XDS that the provided buffer
  -is now owned by the library and that it may be resized by calling
  -\textsf{realloc(3)}. Furthermore, the buffer is \textsf{free(3)}ed when
  -``xds'' is destroyed. If ``flag'' is \textsf{XDS\_GIFT} and ``buffer'' is
  -\textsf{NULL}, the xds\_setbuffer will simply allocate a buffer of its own
  -to be set in ``xds''. Please note that a buffer given to XDS as gift
  -\emph{must} have been allocated using \textsf{malloc(3)} --- it may not
  -life on the stack because XDS will try to free or to resize the buffer
  -as it sees fit.
  -
  -Passing \textsf{XDS\_LOAN} via ``flag'' tells xds\_setbuffer() that the
  -buffer is owned by the application and that XDS should not free nor
  -resize the buffer in any case. In this mode, passing a buffer \textsf{NULL}
  -will result in an invalid-argument error.
  +\textsf{XDS\_GIFT} will tell XDS that the provided buffer is now owned by
  +the library and that it may be resized by calling \textsf{realloc(3)}.
  +Furthermore, the buffer is \textsf{free(3)}ed when ``xds'' is destroyed. If
  +``flag'' is \textsf{XDS\_GIFT} and ``buffer'' is \textsf{NULL},
  +\textsf{xds\_setbuffer()} will simply allocate a buffer of its own to be
  +set in ``xds''. Please note that a buffer given to XDS as gift \emph{must}
  +have been allocated using \textsf{malloc(3)} --- it may not live on the
  +stack because XDS will try to free or to resize the buffer as it sees fit.
  +
  +Passing \textsf{XDS\_LOAN} via ``flag'' tells \textsf{xds\_setbuffer()}
  +that the buffer is owned by the application and that XDS should not free
  +nor resize the buffer in any case. In this mode, passing a buffer of
  +\textsf{NULL} will result in an invalid-argument error.
   
   \subsection{int xds\_getbuffer(xds\_t*~\underline{xds}, xds\_scope\_t~\underline{flag}, void**~\underline{buffer}, size\_t*~\underline{buffer\_len});}
   
  -This routine is the counterpart to xds\_setbuffer(): It will get the buffer
  -currently used in the XDS context ``xds''. The address of that buffer is
  -stored in the location ``buffer'' points to; the length of the buffer's
  -content will be stored in the location ``buffer\_len'' points to.
  +This routine is the counterpart to \textsf{xds\_setbuffer()}: It will get
  +the buffer currently used in the XDS context ``xds''. The address of that
  +buffer is stored in the location ``buffer'' points to; the length of the
  +buffer's content will be stored in the location ``buffer\_len'' points to.
   
   The ``flag'' argument may be set to either \textsf{XDS\_GIFT} or
   \textsf{XDS\_LOAN}. The first setting means that the buffer is now owned by
  -the application and that XDS must not use it after this xds\_getbuffer()
  -call anymore; the library will instead allocate a new buffer for itself. Of
  -course this also means that the buffer will not be freed in xds\_destroy():
  -The application has to \textsf{free(3)} the buffer itself when it is not
  -needed anymore.
  -
  -Setting ``flag'' to \textsf{XDS\_LOAN} tells XDS that the application
  -just wishes to peek into the buffer and will not modify it. The buffer is
  -still owned (and used) by XDS. Please note that the loaned address
  -returned by xds\_getbuffer() may become invalid change after any other
  -xds\_xxx() function call! If you need a reliable address, use
  -\textsf{XDS\_GIFT} mode.
  +the application and that XDS must not use it after this
  +\textsf{xds\_getbuffer()} call anymore; the library will allocate a new
  +internal buffer instead. Of course, this also means that the buffer will
  +not be freed by \textsf{xds\_destroy()}; the application has to
  +\textsf{free(3)} the buffer itself when it is not needed anymore.
  +
  +Setting ``flag'' to \textsf{XDS\_LOAN} tells XDS that the application just
  +wishes to peek into the buffer and will not modify it. The buffer is still
  +owned (and used) by XDS. Please note that the loaned address returned by
  +\textsf{xds\_getbuffer()} may change after any other \textsf{xds\_xxx()}
  +function call!
   
   The routine will return \textsf{XDS\_OK} (everything went fine) or
   \textsf{XDS\_ERR\_INVALID\_ARG} (``xds'', ``buffer'' or ``buffer\_len'' are
   \textsf{NULL} or ``flag'' is invalid) signifying success or failure
   respectively.
   
  -Please note: It is perfectly legal for xds\_getbuffer() to return a buffer
  -of \textsf{NULL} and a buffer length of 0! This happens when
  -xds\_getbuffer() is called for an XDS context before a buffer has been
  -allocated.
  +Please note: It is perfectly legal for \textsf{xds\_getbuffer()} to return
  +a buffer of \textsf{NULL} and a buffer length of 0! This happens when
  +\textsf{xds\_getbuffer()} is called for an XDS context before a buffer has
  +been allocated.
   
   \subsection{int xds\_vencode(xds\_t*~\underline{xds}, const~char*~\underline{fmt}, va\_list~\underline{args});}
   
  @@ -871,7 +859,7 @@
   encoded; the actual values are provided in the varadic parameter ``args''.
   
   The format for ``fmt'' is simple: Just provide the names of the engines to
  -be used for encode the appropriate value in ``args''. Any non-legal
  +be used for encoding the appropriate value(s) in ``args''. Any non-legal
   engine-name character may be used as a delimiter. In order to encode two
   32-bit integers followed by a 64-bit integer, the format string
   \begin{quote}
  @@ -886,20 +874,21 @@
   \end{verbatim*}
   \end{quote}
   
  -Of course the names to be used here have to correspond to the names used to
  +Of course the names to be used here have to match to the names used to
   register the engines in ``xds'' earlier.
   
  -Every time xds\_vencode() is called, it will append the encoded data at the
  -end of the internal buffer stored in ``xds''. Thus, you can call
  -xds\_vencode() several times in order to encode several values, but you'll
  -still get all encoded values stored in one buffer. Calling xds\_setbuffer()
  -or xds\_getbuffer() at any point during the encoding will re-set the buffer
  -to the beginning. All values that have been encoded into that buffer
  -already will eventually be overwritten when xds\_encode() is called again.
  -Hence: Don't call xds\_setbuffer() or xds\_getbuffer() unless you actually
  -want to access the data stored in the buffer.
  +Every time \textsf{xds\_vencode()} is called, it will append the encoded
  +data at the end of the internal buffer stored in ``xds''. Thus, you can
  +call \textsf{xds\_vencode()} several times in order to encode several
  +values, but you'll still get all encoded values stored in one buffer.
  +Calling \textsf{xds\_setbuffer()} or \textsf{xds\_getbuffer()} with gift
  +semantics at any point during encoding will re-set the buffer to the
  +beginning. All values that have been encoded into that buffer already will
  +eventually be overwritten when \textsf{xds\_encode()} is called again.
  +Hence: Don't call \textsf{xds\_setbuffer()} or \textsf{xds\_getbuffer()}
  +unless you actually want to access the data stored in the buffer.
   
  -Also it should be noted that the data you have to provide for ``args''
  +Also, it should be noted that the data you have to provide for ``args''
   depends entirely on what the deployed engines expect to find on the stack
   --- there is no ``standard'' on what should be put on the stack here. The
   XML and XDR engines included in the distribution will simply expect the
  @@ -907,7 +896,7 @@
   differently. See section~\ref{meta engines} for an example of such an
   engine.
   
  -xds\_vencode() will return any of the following return codes:
  +\textsf{xds\_vencode()} will return any of the following return codes:
   \textsf{XDS\_OK} (everything worked fine), \textsf{XDS\_ERR\_NO\_MEM}
   (failed to allocate or to resize the internal buffer),
   \textsf{XDS\_ERR\_OVER\-FLOW} (the internal buffer is too small but is not
  @@ -919,37 +908,37 @@
   
   \subsection{int xds\_encode(xds\_t*~\underline{xds}, const~char*~\underline{fmt}, \dots{});}
   
  -This routine is basically identical to xds\_vencode(), only that it uses a
  -different prototype syntax.
  +This routine is basically identical to \textsf{xds\_vencode()}, only that
  +it uses a different prototype syntax.
   
   \subsection{int xds\_vdecode(xds\_t*~\underline{xds}, const~char*~\underline{fmt}, va\_list~\underline{args});}
   
  -This routine is almost identical to xds\_vencode(): It expects an XDS
  -context, a format string and a set of parameters for the engines, but
  -xds\_vdecode() does not encode any data, it decodes the data back into the
  -native format. The format string again determines which engines are to be
  -called by the framework in order to decode the values contained in the
  -buffer. The native values will then be stored at the locations found in the
  +This routine is almost identical to \textsf{xds\_vencode()}: It expects an
  +XDS context, a format string and a set of parameters for the engines, but
  +\textsf{xds\_vdecode()} does not encode any data, it decodes the data back
  +into the native format. The format string determines which engines are to
  +be called by the framework in order to decode the values contained in the
  +buffer. The values will then be stored at the locations found in the
   corresponding ``args'' entry. But please note that the exact behavior of
   the decoding engines is not specified! The XML and XDR engines included in
   this distribution expect a pointer to a location where to store the decoded
   value, but other engines may vary.
   
  -xds\_vdecode() may return any of the following return codes:
  +\textsf{xds\_vdecode()} may return any of the following return codes:
   \textsf{XDS\_OK} (everything went fine), \textsf{XDS\_ERR\_INVALID\_ARG}
   (``xds'' or ``fmt'' are \textsf{NULL}), \textsf{XDS\_ERR\_TYPE\_MISMATCH}
   (the format string says the next value is of type $A$, but that's not what
   we found in the buffer), \textsf{XDS\_ERR\_UNKNOWN\_ENGINE} (an engine name
   specified in ``fmt'' is not registered in ``xds''),
   \textsf{XDS\_ERR\_INVALID\_MODE} (``xds'' has been initialized in encode
  -mode), \textsf{XDS\_ERR\_UNDER\-FLOW} (an engine tried to read $n$ byte from
  -the buffer, but we don't have that much data left), or
  +mode), \textsf{XDS\_ERR\_UNDER\-FLOW} (an engine tried to read $n$ bytes
  +from the buffer, but we don't have that much data left), or
   \textsf{XDS\_ERR\_UNKNOWN} (an engine returned an unspecified error).
   
   \subsection{int xds\_decode(xds\_t*~\underline{xds}, const~char*~\underline{fmt}, \dots{});}
   
  -This routine is basically identical to xds\_vdecode(), only that it uses a
  -different prototype syntax.
  +This routine is basically identical to \textsf{xds\_vdecode()}, only that
  +it uses a different prototype syntax.
   
   \section{The XDR Engines}
   \label{xdr}
  @@ -973,14 +962,14 @@
   \end{tabular}
   \medskip
   
  -Please note that the routines xdr\_decode\_octetstream() and
  -xdr\_decode\_string() return a pointer to a buffer holding the decoded
  -data. This buffer has been allocated with \textsf{malloc()} and must be
  -\textsf{free()}ed by the application when it is not required anymore. All
  -other callbacks write the decoded value into the location found on the
  -stack, but these behave differently because the length of the decoded data
  -is not known in advance and the application cannot provide a buffer that's
  -guaranteed to suffice.
  +Please note that the routines \textsf{xdr\_decode\_octetstream()} and
  +\textsf{xdr\_decode\_string()} return a pointer to a buffer holding the
  +decoded data. This buffer has been allocated with \textsf{malloc(3)} and
  +must be \textsf{free(3)}ed by the application when it is not required
  +anymore. All other callbacks write the decoded value into the location
  +found on the stack, but these behave differently because the length of the
  +decoded data is not known in advance and the application cannot provide a
  +buffer that's guaranteed to suffice.
   
   \section{The XML Engines}
   \label{xml}
  @@ -1006,8 +995,8 @@
   
   Please note that the routines xml\_decode\_octetstream() and
   xml\_decode\_string() return a pointer to a buffer holding the decoded
  -data. This buffer has been allocated with \textsf{malloc()} and must be
  -\textsf{free()}ed by the application when it is not required anymore. All
  +data. This buffer has been allocated with \textsf{malloc(3)} and must be
  +\textsf{free(3)}ed by the application when it is not required anymore. All
   other callbacks write the decoded value into the location found on the
   stack, but these behave differently because the length of the decoded data
   is not known in advance and the application cannot provide a buffer that's
  @@ -1020,7 +1009,7 @@
   Some users complained about having to maintain separate XDS contexts for
   encoding and decoding. They wondered, why it is not possible to encode and
   decode with a single XDS context. The reason is that this limitatiton makes
  -the XDS context structure and the programmer API for XDS much simpler. If
  +the XDS context structure and the programmer's API for XDS much simpler. If
   we were able to use a single context for encoding and decoding, we had to
   maintain \emph{two} lists of registered engines per XDS context: One set of
   encoding engines and one set of decoding engines. Consequently, the
  @@ -1033,21 +1022,20 @@
   encoding mode is subtly different from that in encoding mode: The XDS
   context contains a buffer, the size of that buffer and a kind of ``current
   position'' pointer. When an engine stores, say, 8 bytes of encoded data in
  -the buffer, \textsf{xds\_vencode()} will increase the ``current position''
  +the buffer, \textsf{xds\_vencode()} will increase the current position
   by 8 bytes --- the next encoding engine will append its encoded data at the
  -end of the buffer. If the ``current position'' reaches the end of the
  +end of the buffer. If the current position reaches the end of the
   buffer, the buffer is reallocated with an appropriately bigger size.
   
   In decoding mode, the same variables in the XDS context have a different
   meaning: Since the buffer is never going to be resized, the buffer size
   does not correspond to the size of the memory chunk that constitutes the
   buffer, it says how many bytes of information the buffer contains; it's the
  -length of the contents. The ``current position'' is initialized at the
  +length of the contents. The current position is initialized to the
   beginning of the buffer and every time an engine claims to have decoded,
  -say, 8 bytes from the buffer, the ``current position'' is increased by 8
  -bytes towards the end of the buffer. If the ``current position'' reaches
  -the end of the buffer's contents, an \textsf{XDS\_UNDERFLOW} error is
  -returned.
  +say, 8 bytes from the buffer, the current position is increased by 8 bytes
  +towards the end of the buffer. If the current position reaches the end of
  +the buffer's contents, an \textsf{XDS\_UNDERFLOW} error is returned.
   
   Buffer handling is different in encoding and decoding mode in so far as
   that in encoding mode, the initial buffer is empty and the current position
  @@ -1063,21 +1051,21 @@
   
   Considering all that, we found that the current design greatly reduces the
   complexity of the implementation and of the API while putting the user only
  -through minimum inconvenience.
  +through minimal inconvenience.
   
   \subsection{What are those xds\_int-something types good for?}
   \label{xds int stuff}
   
  -The XDS library uses the data types \textsf{xds\_int32\_t}, etc. rather
  +The XDS library uses the data types \textsf{xds\_int32\_t}, etc.\ rather
   than \textsf{int}. This is necessary because we need to have a definive
   size for each data type. In ISO-C, though, the actual size of an
   \textsf{int} is undefined. In theory, the system header
   \textsf{sys/types.h} defines types with fixed sizes, but unfortunately the
   names of these data types vary from vendor to vendor. To solve that, we
   defined our own data types. The application programmer might want to take a
  -look at the top few lines of the \textsf{xds.h} include file to see how the
  -actual data types are mapped to the \textsf{xds\_xxx\_t} variant on your
  -system.
  +look at the first few lines of the \textsf{xds.h} include file to see how
  +the actual data types are mapped to the \textsf{xds\_xxx\_t} variant on
  +your system.
   
   \subsection{Why do I have to register all the engines manually?}
   
  @@ -1105,11 +1093,10 @@
   CORBA format, then he would not be able to register his engines without
   re-writing \textsf{xds\_init()}.
   
  -\item On a similar note, the \textsf{xds\_init()} would not know about the
  +\item On a similar notion, \textsf{xds\_init()} would not know about the
   meta engines required by the application developer. The call outlined above
  -would only register the engines for the elementary data types, for the very
  -good reason that the meta engines do not even ``exist'' when the XDS
  -library is compiled.
  +would only register the engines for the elementary data types; the meta
  +engines do not even ``exist'' when the XDS library is compiled.
   
   \item This approach would make it hard to mix engines from different
   formats. If all engines are registered manually, the application programmer
  @@ -1124,7 +1111,7 @@
   point engines into the program too --- even though nobody uses them.
   
   The author of this document wishes to remark, though, that this property of
  -the library was later uh \dots{} removed by the decision of the team leader
  +the library was later uh~\dots{} removed by the decision of the team leader
   to merge all engines into one source module per format. Sorry.
   
   \end{itemize}

From ossp-cvs-owner@ossp.org  Mon Aug 13 20:21:34 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7DILXX87724; Mon, 13 Aug 2001 20:21:33 +0200 (CEST)
Date: Mon, 13 Aug 2001 20:21:33 +0200 (CEST)
Message-Id: <200108131821.f7DILXX87724@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   13-Aug-2001 20:21:33
  Branch: HEAD                             Handle: 2001081319213200

  Modified files:
    ossp-pkg/srpc/libxds    Makefile.in

  Log:
    Try to fix cleaning targets

  Summary:
    Revision    Changes     Path
    1.28        +13 -11     ossp-pkg/srpc/libxds/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile.in
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 Makefile.in
  --- ossp-pkg/srpc/libxds/Makefile.in	2001/08/12 11:31:45	1.27
  +++ ossp-pkg/srpc/libxds/Makefile.in	2001/08/13 18:21:32	1.28
  @@ -48,6 +48,8 @@
   LDFLAGS     = @LDFLAGS@
   LIBS        = @LIBS@
   POD2MAN     = @POD2MAN@
  +RM          = rm -f
  +RMDIR       = rmdir
   
   #   list of objects
   LIB_NAME    = libxds.la
  @@ -141,17 +143,17 @@
   
   #   perform standard uninstallation procedure
   uninstall:
  -	@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libxds.la
  -	$(RM) $(DESTDIR)$(includedir)/xds.h
  -	$(RM) $(DESTDIR)$(mandir)/man3/xds.3
  -	$(RM) $(DESTDIR)$(mandir)/man1/xds-config.1
  -	$(RM) $(DESTDIR)$(bindir)/xds-config
  -	$(RMDIR) $(DESTDIR)$(mandir)/man3
  -	$(RMDIR) $(DESTDIR)$(mandir)/man1
  -	$(RMDIR) $(DESTDIR)$(mandir)
  -	$(RMDIR) $(DESTDIR)$(libdir)
  -	$(RMDIR) $(DESTDIR)$(includedir)
  -	$(RMDIR) $(DESTDIR)$(bindir)
  +	-@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libxds.la
  +	-$(RM) $(DESTDIR)$(includedir)/xds.h
  +	-$(RM) $(DESTDIR)$(mandir)/man3/xds.3
  +	-$(RM) $(DESTDIR)$(mandir)/man1/xds-config.1
  +	-$(RM) $(DESTDIR)$(bindir)/xds-config
  +	-$(RMDIR) $(DESTDIR)$(mandir)/man3
  +	-$(RMDIR) $(DESTDIR)$(mandir)/man1
  +	-$(RMDIR) $(DESTDIR)$(mandir)
  +	-$(RMDIR) $(DESTDIR)$(libdir)
  +	-$(RMDIR) $(DESTDIR)$(includedir)
  +	-$(RMDIR) $(DESTDIR)$(bindir)
   
   #   roll a distribution tarball
   dist: distclean

From ossp-cvs-owner@ossp.org  Mon Aug 13 20:31:54 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7DIVrn89271; Mon, 13 Aug 2001 20:31:53 +0200 (CEST)
Date: Mon, 13 Aug 2001 20:31:53 +0200 (CEST)
Message-Id: <200108131831.f7DIVrn89271@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xds.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   13-Aug-2001 20:31:53
  Branch: HEAD                             Handle: 2001081319315300

  Modified files:
    ossp-pkg/srpc/libxds    xds.pod

  Log:
    First attempt at a manual page. :-)

  Summary:
    Revision    Changes     Path
    1.10        +532 -117   ossp-pkg/srpc/libxds/xds.pod
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xds.pod
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 xds.pod
  --- ossp-pkg/srpc/libxds/xds.pod	2001/08/12 11:31:45	1.9
  +++ ossp-pkg/srpc/libxds/xds.pod	2001/08/13 18:31:53	1.10
  @@ -2,16 +2,16 @@
   ##  XDS - OSSP Extensible Data Serialization Library
   ##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
   ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  -##  
  +##
   ##  This file is part of OSSP XDS, an extensible data serialization
   ##  library which can be found at http://www.ossp.org/pkg/xds/.
  -##  
  +##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
   ##  the above copyright notice and this permission notice appear in all
   ##  copies.
  -##  
  -##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##
  +##  THIS SOFTWARE IS PROVIDED `AS IS' AND ANY EXPRESSED OR IMPLIED
   ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
   ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
   ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  @@ -31,131 +31,546 @@
   
   =head1 NAME
   
  -xds - OSSP eXtensible Data Serialization
  +xds - OSSP Extensible Data Serialization
   
   =head1 SYNOPSIS
   
   =head1 DESCRIPTION
   
  +The purpose of XDS is to encode data in a way that allows this data to
  +be exchanged between different computer systems. Assume you'd want to
  +transfer the value $1234 from host A to host B. Then you would encode
  +it using XDS, transfer the encoded data over the network, and decode
  +the value again at the other end. Every program that follows this
  +process will read the correct value no matter what native
  +representation is used internally.
  +
  +XDS consists of three components: The generic encoding and decoding
  +framework, a set of engines to encode and decode values in a certain
  +format, and a run-time context, which is used to manage buffers,
  +registered engines, etc.
  +
  +In order to use the library, the first thing the developer has to do
  +is to create a valid XDS context by calling xds_init(). The
  +routine requires one parameter that determines whether to operate in
  +encoding- or decoding mode. A context can be used for encoding or
  +decoding only; it is not possible to use the same context for both
  +operations. Once a valid XDS context has been obtained, the routine
  +xds_register() can be used to register an arbitrary number
  +of encoding or decoding engines within the context.
  +
  +Two sets of engines are included in the library. These routines will
  +handle any elementary datatype defined by the ISO-C language, such as
  +32-bit integers, 64-bit integers, unsigned integers (of both 32- and
  +64-bit), floating point numbers, strings and octet streams.
  +
  +Once all required encoding/decoding engines are registered, the
  +routines xds_encode() or xds_decode() may be
  +used to actually perform the encoding or decoding process. Any data
  +type for which an engine has been registered can be handled by the
  +library.
  +
  +This means, that it is possible for the developer to write custom
  +engines for any data type he desires to use and to register them in
  +the context -- as long as these engines adhere to the
  +xds_engine_t interface defined in xds.h.
  +
  +In particular, it is possible to register meta engines. That is an
  +engine designed to encode or decode data types, which consist of
  +several elementary data types. Such an engine will simply re-use the
  +existing engines to encode or decode the elements of the structure.
  +
  +The following example program will encode an unsigend integer into the
  +XDR format, decode it back into the native host format, and compare
  +the result to make sure it is the original value again:
  +
  +    #include <stdio.h>
  +    #include <errno.h>
  +    #include <xds.h>
  +
  +    int main()
  +	{
  +	xds_t* xds;
  +	xds_uint32_t uint32 = 0x12345678;
  +	xds_uint32_t new_uint32;
  +	char* buffer;
  +	size_t buffer_size;
  +
  +	if ((xds = xds_init(XDS_ENCODE)) == NULL ||
  +	    xds_register(xds, "uint32", &xdr_encode_uint32, NULL) != XDS_OK ||
  +	    xds_encode(xds, "uint32", uint32) != XDS_OK ||
  +	    xds_getbuffer(xds, XDS_GIFT, (void**)&buffer, &buffer_size) != XDS_OK)
  +	    {
  +	    printf("Encoding failed.\n");
  +	    exit(1);
  +	    }
  +	xds_destroy(xds);
  +
  +	if ((xds = xds_init(XDS_DECODE)) == NULL ||
  +	    xds_register(xds, "uint32", &xdr_decode_uint32, NULL) != XDS_OK ||
  +	    xds_setbuffer(xds, XDS_LOAN, buffer, buffer_size) != XDS_OK ||
  +	    xds_decode(xds, "uint32", &new_uint32) != XDS_OK)
  +	    {
  +	    printf("Decoding failed.\n");
  +	    exit(1);
  +	    }
  +	xds_destroy(xds);
  +
  +	if (uint32 == new_uint32)
  +	    printf("OK\n");
  +	else
  +	    printf("Failure\n");
  +
  +	return 0;
  +	}
  +
  +=head1 THE XDS FRAMEWORK
  +
  +=over 4
  +
  +=item xds_t* xds_init(xds_mode_t I<mode>);
  +
  +This routine creates and initializes a context for use with the XDS
  +library. The `mode' parameter may be either XDS_ENCODE or
  +XDS_DECODE, depending on whether you want to encode or to decode
  +data. If successful, xds_init() returns a pointer to the XDS
  +context structure. In case of failure, xds_init() returns
  +NULL and sets errno to ENOMEM (failed to allocate
  +internal memory buffers) or EINVAL (`mode' parameter was invalid).
  +
  +A context obtained from xds_init() must be destroyed by
  +xds_destroy() when it is not needed any more.
  +
  +=item void xds_destroy(xds_t* I<xds>);
  +
  +xds_destroy() will destroy an XDS context created by
  +xds_init(). Doing so will return all resources associated with
  +this context -- most notably the memory used to buffer the results of
  +encoding or decoding any values. A context may not be used after it has
  +been destroyed.
  +
  +=item int xds_register(xds_t* I<xds>, const char* I<name>, xds_engine_t I<engine>, void* I<engine_context>);
  +
  +This routine will register an engine in the provided XDS context. An
  +`engine' is potentially any function that fullfils the following
  +interface:
  +
  +    int engine(xds_t* xds, void* engine_context,
  +               void* buffer, size_t buffer_size,
  +               size_t* used_buffer_size,
  +               va_list* args);
  +
  +By calling xds_register(), the engine `engine' will be
  +registered under the name `name' in the XDS context `xds'. The last
  +parameter `engine_context' may be used as the user sees fit: It will be
  +passed when the engine is actually called and may be used to implement an
  +engine-specific context. Most engines will not need a context of their own,
  +in which case NULL should be specified here.
  +
  +Please note that until the user calls xds_register() for an XDS
  +context he obtained from xds_init(), no engines are registered
  +for that context. Even the engines included in the library distribution are
  +not registered automatically.
  +
  +For engine names, any combination of the characters `a-z', `A-Z',
  +`0-9', `-', and `_' may be used; anything else is not a legal
  +engine name component.
  +
  +xds_register() may return the following return codes:
  +XDS_OK (everything went fine; the engine is registered now),
  +XDS_ERR_INVALID_ARG (either `xds', `name', or `engine'
  +are NULL or `name' contains illegal characters for an engine
  +name), or XDS_ERR_NO_MEM (failed to allocate internally
  +required buffers).
  +
  +=item int xds_unregister(xds_t* I<xds>, const char* I<name>);
  +
  +xds_unregister() will remove the engine `name' from XDS context
  +`xds'. The function will return XDS_OK in case everything went
  +fine, XDS_ERR_UNKNOWN_ENGINE in case the engine `name' is not
  +registered in `xds', or XDS_ERR_INVALID_ARG if either `xds'
  +or `name' are NULL or `name' contains illegal characters for
  +an engine name.
  +
  +=item int xds_setbuffer(xds_t* I<xds>, xds_scope_t I<flag>, void* I<buffer>, size_t I<buffer_len>);
  +
  +This routine allows the user to control XDS' buffer handling: Calling it
  +will replace the buffer currently used in `xds'. The address and size of
  +that buffer are passed to xds_setbuffer() via the `buffer' and
  +`buffer_len' parameters. The `xds' parameter determines for which XDS
  +context the new buffer will be set. Furthermore, you can set `flag' to
  +either XDS_GIFT or XDS_LOAN.
  +
  +XDS_GIFT will tell XDS that the provided buffer is now owned by
  +the library and that it may be resized by calling realloc(3).
  +Furthermore, the buffer is free(3)ed when `xds' is destroyed. If
  +`flag' is XDS_GIFT and `buffer' is NULL,
  +xds_setbuffer() will simply allocate a buffer of its own to be
  +set in `xds'. Please note that a buffer given to XDS as gift B<must>
  +have been allocated using malloc(3) -- it may not live on the
  +stack because XDS will try to free or to resize the buffer as it sees fit.
  +
  +Passing XDS_LOAN via `flag' tells xds_setbuffer()
  +that the buffer is owned by the application and that XDS should not free
  +nor resize the buffer in any case. In this mode, passing a buffer of
  +NULL will result in an invalid-argument error.
  +
  +=item int xds_getbuffer(xds_t* I<xds>, xds_scope_t I<flag>, void** I<buffer>, size_t* I<buffer_len>);
  +
  +This routine is the counterpart to xds_setbuffer(): It will get
  +the buffer currently used in the XDS context `xds'. The address of that
  +buffer is stored in the location `buffer' points to; the length of the
  +buffer's content will be stored in the location `buffer_len' points to.
  +
  +The `flag' argument may be set to either XDS_GIFT or
  +XDS_LOAN. The first setting means that the buffer is now owned by
  +the application and that XDS must not use it after this
  +xds_getbuffer() call anymore; the library will allocate a new
  +internal buffer instead. Of course, this also means that the buffer will
  +not be freed by xds_destroy(); the application has to
  +free(3) the buffer itself when it is not needed anymore.
  +
  +Setting `flag' to XDS_LOAN tells XDS that the application just
  +wishes to peek into the buffer and will not modify it. The buffer is still
  +owned (and used) by XDS. Please note that the loaned address returned by
  +xds_getbuffer() may change after any other xds_xxx()
  +function call!
  +
  +The routine will return XDS_OK (everything went fine) or
  +XDS_ERR_INVALID_ARG (`xds', `buffer' or `buffer_len' are
  +NULL or `flag' is invalid) signifying success or failure
  +respectively.
  +
  +Please note: It is perfectly legal for xds_getbuffer() to return
  +a buffer of NULL and a buffer length of 0! This happens when
  +xds_getbuffer() is called for an XDS context before a buffer has
  +been allocated.
  +
  +=item int xds_vencode(xds_t* I<xds>, const char* I<fmt>, va_list I<args>);
  +
  +This routine will encode one or several values using the appropriate
  +encoding engines registered in XDS context `xds'. The parameter `fmt'
  +contains a sprintf(3)-alike descriptions of the values to be
  +encoded; the actual values are provided in the varadic parameter `args'.
  +
  +The format for `fmt' is simple: Just provide the names of the engines to
  +be used for encoding the appropriate value(s) in `args'. Any non-legal
  +engine-name character may be used as a delimiter. In order to encode two
  +32-bit integers followed by a 64-bit integer, the format string
  +
  +    int32 int32 int64
  +
  +could be used. In case you don't like the blank, use the colon instead:
  +
  +    int32:int32:int64
  +
  +Of course the names to be used here have to match to the names used to
  +register the engines in `xds' earlier.
  +
  +Every time xds_vencode() is called, it will append the encoded
  +data at the end of the internal buffer stored in `xds'. Thus, you can
  +call xds_vencode() several times in order to encode several
  +values, but you'll still get all encoded values stored in one buffer.
  +Calling xds_setbuffer() or xds_getbuffer() with gift
  +semantics at any point during encoding will re-set the buffer to the
  +beginning. All values that have been encoded into that buffer already will
  +eventually be overwritten when xds_encode() is called again.
  +Hence: Don't call xds_setbuffer() or xds_getbuffer()
  +unless you actually want to access the data stored in the buffer.
  +
  +Also, it should be noted that the data you have to provide for `args'
  +depends entirely on what the deployed engines expect to find on the stack
  +-- there is no `standard' on what should be put on the stack here. The
  +XML and XDR engines included in the distribution will simply expect the
  +value to be encoded to be found on the stack, but other engines may act
  +differently.
  +
  +xds_vencode() will return any of the following return codes:
  +XDS_OK (everything worked fine), XDS_ERR_NO_MEM
  +(failed to allocate or to resize the internal buffer),
  +XDS_ERR_OVERFLOW (the internal buffer is too small but is not
  +owned by us), XDS_ERR_INVALID_ARG (`xds' or `fmt' are
  +NULL), XDS_ERR_UNKNOWN_ENGINE (an engine name
  +specified in `fmt' is not registered in `xds'),
  +XDS_ERR_INVALID_MODE (`xds' is initialized in decode mode),
  +or XDS_ERR_UNKNOWN (the engine returned an unspecified error).
  +
  +=item int xds_encode(xds_t* I<xds>, const char* I<fmt>, ...);
  +
  +This routine is basically identical to xds_vencode(), only that
  +it uses a different prototype syntax.
  +
  +=item int xds_vdecode(xds_t* I<xds>, const char* I<fmt>, va_list I<args>);
  +
  +This routine is almost identical to xds_vencode(): It expects an
  +XDS context, a format string and a set of parameters for the engines, but
  +xds_vdecode() does not encode any data, it decodes the data back
  +into the native format. The format string determines which engines are to
  +be called by the framework in order to decode the values contained in the
  +buffer. The values will then be stored at the locations found in the
  +corresponding `args' entry. But please note that the exact behavior of
  +the decoding engines is not specified! The XML and XDR engines included in
  +this distribution expect a pointer to a location where to store the decoded
  +value, but other engines may vary.
  +
  +xds_vdecode() may return any of the following return codes:
  +XDS_OK (everything went fine), XDS_ERR_INVALID_ARG
  +(`xds' or `fmt' are NULL), XDS_ERR_TYPE_MISMATCH
  +(the format string says the next value is of type $A$, but that's not what
  +we found in the buffer), XDS_ERR_UNKNOWN_ENGINE (an engine name
  +specified in `fmt' is not registered in `xds'),
  +XDS_ERR_INVALID_MODE (`xds' has been initialized in encode
  +mode), XDS_ERR_UNDERFLOW (an engine tried to read $n$ bytes
  +from the buffer, but we don't have that much data left), or
  +XDS_ERR_UNKNOWN (an engine returned an unspecified error).
  +
  +=item int xds_decode(xds_t* I<xds>, const char* I<fmt>, ...);
  +
  +This routine is basically identical to xds_vdecode(), only that
  +it uses a different prototype syntax.
  +
  +=back
  +
  +=head1 THE XDR ENGINES
  +
  +  Function Name             Expected `args'     Input      Output
  + -----------------------------------------------------------------
  +  xdr_encode_uint32()        xds_uint32_t      4 bytes    4 bytes
  +  xdr_decode_uint32()        xds_uint32_t*     4 bytes    4 bytes
  +  xdr_encode_int32()         xds_int32_t       4 bytes    4 bytes
  +  xdr_decode_int32()         xds_int32_t*      4 bytes    4 bytes
  +  xdr_encode_uint64()        xds_uint64_t      4 bytes    4 bytes
  +  xdr_decode_uint64()        xds_uint64_t*     4 bytes    4 bytes
  +  xdr_encode_int64()         xds_int64_t       4 bytes    4 bytes
  +  xdr_decode_int64()         xds_int64_t*      4 bytes    4 bytes
  +  xdr_encode_double()        xds_double_t      ? bytes    ? bytes
  +  xdr_decode_double()        xds_double_t*     ? bytes    ? bytes
  +  xdr_encode_octetstream()   void*, size_t     variable   variable
  +  xdr_decode_octetstream()   void**, size_t*   variable   variable
  +  xdr_encode_string()        char*             variable   variable
  +  xdr_decode_string()        char**            variable   variable
  +
  +Please note that the routines xdr_decode_octetstream() and
  +xdr_decode_string() return a pointer to a buffer holding the
  +decoded data. This buffer has been allocated with malloc(3) and
  +must be free(3)ed by the application when it is not required
  +anymore. All other callbacks write the decoded value into the location
  +found on the stack, but these behave differently because the length of the
  +decoded data is not known in advance and the application cannot provide a
  +buffer that's guaranteed to suffice.
  +
  +=head1 THE XML ENGINES
  +
  +  Function Name             Expected `args'      Input         Output
  + ------------------------------------------------------------------------
  +  xml_encode_uint32()        xds_uint32_t      4 bytes       8-27 bytes
  +  xml_decode_uint32()        xds_uint32_t*     18-27 bytes   4 bytes
  +  xml_encode_int32()         xds_int32_t       4 bytes       16-26 bytes
  +  xml_decode_int32()         xds_int32_t*      16-26 bytes   4 bytes
  +  xml_encode_uint64()        xds_uint64_t      8 bytes       18-37 bytes
  +  xml_decode_uint64()        xds_uint64_t*     18-37 bytes   8 bytes
  +  xml_encode_int64()         xds_int64_t       8 bytes       16-36 bytes
  +  xml_decode_int64()         xds_int64_t*      16-36 bytes   8 bytes
  +  xml_encode_double()        xds_double_t      ? bytes       ? bytes
  +  xml_decode_double()        xds_double_t*     ? bytes       ? bytes
  +  xml_encode_octetstream()   void*, size_t     variable      variable
  +  xml_decode_octetstream()   void**, size_t*   variable      variable
  +  xml_encode_string()        char*             variable      variable
  +  xml_decode_string()        char**            variable      variable
  +
  +Please note that the routines xml_decode_octetstream() and
  +xml_decode_string() return a pointer to a buffer holding the decoded
  +data. This buffer has been allocated with malloc(3) and must be
  +free(3)ed by the application when it is not required anymore. All
  +other callbacks write the decoded value into the location found on the
  +stack, but these behave differently because the length of the decoded data
  +is not known in advance and the application cannot provide a buffer that's
  +guaranteed to suffice.
  +
  +=head1 EXTENDING THE XDS LIBRARY
  +
  +This section demonstrates, how to write a `meta engine' and for the
  +XDS framework. The example engine will encode a complex data
  +structure, consisting of three elementary data types. The structure is
  +defined as follows:
  +
  +    struct mystruct
  +	{
  +	xds_int32_t   small;
  +	xds_int64_t   big;
  +	xds_uint32_t  positive;
  +	char          text[16];
  +	};
  +
  +Some readers might wonder why the structure is defined using these
  +weird data types rather than the familiar ones like int, long, etc.
  +The reason is that these data types have an undefined size. An int
  +variable will have, say, 32 bits when compiled on the average Unix
  +machine, but when the same program is compiled on a 64-bit machine
  +like TRUE64 Unix, it will have a size of 64 bit. That is a problem
  +when those structures have to be exchanged between entirely different
  +systems, because the structures are binary incompatible -- something
  +even XDS cannot remedy.
  +
  +In order to encode an instance of this structure, we write an encoding
  +engine:
  +
  +    static int encode_mystruct(xds_t* xds, void* engine_context,
  +			       void* buffer, size_t buffer_size,
  +			       size_t* used_buffer_size,
  +			       va_list* args)
  +	{
  +	struct mystruct* ms;
  +	ms = va_arg(*args, struct mystruct*);
  +	return xds_encode(xds, "int32 int64 uint32 octetstream",
  +			  ms->small, ms->big, ms->positive,
  +			  ms->text, sizeof(ms->text));
  +	}
  +
  +This engine takes the address of the `mystruct' structure from the
  +stack and then uses xds_encode() to handle all elements of
  +`mystruct' separately -- which is fine, because these data types
  +are supperted by XDS already. It is worth noting, though, that we
  +refer to the other engines by name, meaning that these engines must be
  +registered in `xds' by that name!
  +
  +What is very nice, though, is the fact that this encoding engine does
  +not even need to know which engines are used to encode the actual
  +values! If the user registeres the XDR engines under the appropriate
  +names, `mystruct' will be encoded in XDR. If the user registeres the
  +XML engines under the appropriate names, `mystruct' will be encoded
  +in XML. Because of that property, we call such an engine a `meta
  +engine'.
  +
  +Of coures you need not necessarily implement an engine as B<meta>
  +engine: Rather than going through xds_encode(), it would be possible
  +to execute the appropriate encoding engines directly. This had the
  +advantage of not depending on those engines being registered at all,
  +but it would make the custom engine depend on the elementary engines
  +-- what is an unnecessary limitation.
  +
  +One more word about the engine syntax and semantics: As has been
  +mentioned earlier, any function that adheres to the interface shown
  +above is potentially an engine. These parameters have the following
  +meaning:
  +
   =over 4
   
  -=item xds_t* B<xds_init>(xds_mode_t I<mode>);
  +=item xds -- This is the XDS context that was originally provided to
  +the xds_encode() call, which in turn executed the engine. It may be
  +used, for example, for executing xds_encode() again like we did in our
  +example engines.
  +
  +=item engine_context -- The engine context can be used by the engine
  +to store any type of internal information. The value the engine will
  +receive must have been provided when the engine was registered by
  +xds_register(). Engines obviously may neglect this parameter if they
  +don't need a context of their own -- all engines included in the
  +distribution do so.
  +
  +=item buffer -- This parameter points to the buffer the encoded data
  +should be written to. In decoding mode, `buffer' points to the
  +encoded data, which should be decoded; the location where the results
  +should be stored at can be found on the stack then.
  +
  +=item buffer_size -- The number of bytes available in `buffer'. In
  +encoding mode, this means `free space', in decoding mode,
  +`buffer_size' determines how many bytes of encoded data are
  +available in `buffer' for consumption.
  +
  +=item used_buffer_size -- This parameter points to a variable, which
  +the callback must set before returning in order to let the framework
  +know how many bytes it consumed from `buffer'. A callback encoding,
  +say, an int32 number into a 8 bytes text representation would set the
  +used_buffer_size to 8:
  +
  +    *used_buffer_size = 8;
  +
  +In encoding mode, this variable determines how many bytes the engine
  +has written into `buffer'; in decoding mode the variable determines
  +how many bytes the engines has read from `buffer'.
   
  -Valid settings for I<mode> are B<XDS_ENCODE> and B<XDS_DECODE>. If
  -successful, a valid handle is returned -- B<NULL> otherwise. If the
  -routine fails, the system variable B<errno> is set apropriately.
  -
  -=item void B<xds_destroy>(xds_t* I<xds>);
  -
  -Free all internally allocated resources associated with this context.
  -I<xds> must be a handle obtained by calling B<xds_init>.
  -
  -=item int B<xds_register>(xds_t* I<xds>, const char* I<name>, xds_engine_t I<engine>, void* I<engine_context>);
  -
  -Register the function I<engine> as formatting engine in context I<xds>
  -under the name I<name>. The function must have the following
  -prototype:
  -
  -    int my_engine(xds_t* xds, void* engine_context,
  -		  void* buffer, size_t buffer_size,
  -		  va_list args);
  -
  -It must gather its values from I<args> and encode/decode them into
  -I<buffer>. The encoded/decoded representation must not take up more
  -than I<size> byte of memory, because that's the maximum I<buffer> can
  -hold. If the buffer is too small, I<engine> must return
  -B<XDS_ERR_OVERFLOW>. In case of no error, I<engine> must return the
  -number of bytes it has written to the buffer. (Note that all xds error
  -defines are smaller than >0.) The variable I<engine_context> is passed
  -through to the function every time it is called; it is not touched in
  -any way by the xds library.
  -
  -A valid name I<name> for a callback function consists of an arbitrary
  -number of characters from the class [a-zA-Z0-9_-].
  -
  -=item int B<xds_unregister>(xds_t* I<xds>, const char* I<name>);
  -
  -Remove encoding/decoding engine I<name> from context I<xds>. The
  -function will return B<XDS_OK> if successful and
  -B<XDS_ERR_UNKNOW_ENGINE> if I<name> is not a registered engine.
  -
  -=item int B<xds_setbuffer>(xds_t* I<xds>, xds_scope_t I<flag>, void* I<buffer>, size_t I<buffer_size>);
  -
  -Encoding mode: Set internal buffer used in context I<xds> to
  -I<buffer>. The buffer has a capacity of I<buffer_size> byte. I<flag>
  -may be set to B<XDS_LOAN> or B<XDS_GIFT>. A "loaned" buffer is one
  -that is owned by the application; xds will use it, but it will not
  -B<free> the buffer nor will it try to B<realloc> it if it's too small.
  -A buffer given to xds as a "gift" is henceforth owned by xds and may
  -be B<free>d or B<realloc>ed as the library sees fit. If I<flag> is
  -B<XDS_GIFT>, I<buffer> must be a pointer obtained from calling the
  -B<malloc(3)> API. Calling B<xds_setbuffer> with a I<buffer> of B<NULL>
  -will cause the xds library to allocate a buffer of its own.
  -I<buffer_size> is ignored in this case.
  -
  -Decoding mode: I<buffer> contains the encoded representation of the
  -data to be used for following B<xds_decode> calls. The encoded data is
  -I<buffer_size> byte long. Unlike in encoding mode, such a buffer is
  -not modified, hence there is no need to extend the buffer. If I<flag>
  -is set to B<XDS_GIFT>, the library will B<free> I<buffer> when
  -the context is destroyed.
  -
  -B<xds_setbuffer> returns one of the following codes signifying success
  -or failure: B<XDS_OK> (everything alright), B<XDS_ERR_NO_MEM> (failed
  -to allocate new internal buffers), and B<XDS_ERR_INVALID_ARG>
  -(arguments don't make sense).
  -
  -=item int B<xds_getbuffer>(xds_t* I<xds>, xds_scope_t flag, void** buffer, size_t* buffer_size);
  -
  -This routine will write the address and size of the internal buffer in
  -context I<xds> to I<buffer> and I<buffer_size>. The I<flag> parameter
  -determines who owns the buffer after that; setting I<flag> to
  -B<XDS_LOAN> means that the buffer is owned by the xds library and that
  -the user may not rely on its contents still being there after another
  -xds library function call. Furthermore, calling B<xds_getbuffer> will
  -flush the registered buffer, meaning that coming B<xds_encode> calls
  -will start at the beginning and potentially overwrite the buffer
  -contents.
  -
  -Setting I<flag> to B<XDS_GIFT> means that the returned buffer is owned
  -by the application programmer from now on, it is no longer modified or
  -used in any way by the library. The application must B<free> the
  -buffer when it's not needed anymore.
  -
  -=item int B<xds_encode>(xds_t* I<xds>, const char* I<fmt>, ...);
  -
  -The B<encode> function call will encode an arbitrary number of values
  -into the chosen representation. The syntax is very similar to
  -B<sprintf>: As parameters, it requires the I<xds> handle obtained from
  -B<xds_init>, a format string I<fmt> describing the following value
  -parameters, and an arbitrary number of actual values.
  -
  -The format string lists the names of the callback functions to be used
  -in order to format the values; it has the format "name name ...". The
  -names are delimited by any number of characters any of which is not
  -part of the character set allowed for function names here. Hence, you
  -can delimit the names by blanks, tabs, dollar signs or pretty much
  -anyting your want.
  -
  -B<xds_encode> will return either B<XDS_OK> (everything OK),
  -B<XDS_ERR_NO_MEM> (failed allocating memory for intenal buffering),
  -B<XDS_ERR_OVERFLOW> (can't expand internal buffer because it's owned
  -by the application), B<XDS_ERR_INVALID_ARG> (parameters don't make
  -sense), B<XDS_ERR_TYPE_MISMATCH> (specified callback can't handle this
  -data type), and B<XDS_ERR_UNKNOW_ENGINE> (unknown call back name used
  -in I<fmt>).
  -
  -=item int B<xds_decode>(xds_t* I<xds>, const char* I<fmt>, ...);
  -
  -Like B<xds_encode>, only the other way round.
  +=item args -- This pointer points to an initialized varadic argument.
  +Use the standard C macro va_arg(3) to fetch the actual data.
   
  -=item int B<xds_vencode>(xds_t* I<xds>, const char* I<fmt>, va_list I<args>);
  +=back
   
  -See B<xds_encode>.
  +A callback may return any of the following return codes, as defined in
  +xds.h:
  +
  +=over 4
  +
  +=item XDS_OK -- No error.
  +
  +=item XDS_ERR_NO_MEM -- Failed to allocate required memory.
  +
  +=item XDS_ERR_OVERFLOW -- The buffer is too small to hold all encoded
  +data. The callback may set `*used_buffer_size' to the number of bytes
  +it needs in `buffer', thereby giving the framework a hint by how many
  +bytes it should enlarge the buffer before trying the engine again, but just
  +leaving `*used_buffer_size' alone will work fine too, it may just be a
  +bit less efficient in some cases. Obviously this return code does not make
  +much sense in decoding mode.
  +
  +=item XDS_ERR_INVALID_ARG -- Unexpected or incorrect parameters.
  +
  +=item XDS_ERR_TYPE_MISMATCH -- This return code will be returned in
  +decoding mode in case the decoding engine realizes that the data it is
  +decoding does not fit what it is expecting. Not all encoding formats will
  +allow to detect this at all. XDR, for example, does not.
  +
  +=item XDS_ERR_UNDERFLOW -- In decode mode, this error is be returned
  +when an engine needs, say, 4 bytes of data in order to decode a value but
  +`buffer'/'buffer_size' provides less.
  +
  +=item XDS_ERR_UNKNOWN -- Any other reason to fail than those listed
  +before. Catch all ...
  +
  +=back
  +
  +Let's take a look at the corresponding decoding engine now:
  +
  +    static int decode_mystruct(xds_t* xds, void* engine_context,
  +			       void* buffer, size_t buffer_size,
  +			       size_t* used_buffer_size,
  +			       va_list* args)
  +	{
  +	struct mystruct* ms;
  +	size_t i;
  +	char*  tmp;
  +	int rc;
  +	ms = va_arg(*args, struct mystruct*);
  +	rc = xds_decode(xds, "int32 int64 uint32 octetstream",
  +			&(ms->small), &(ms->big), &(ms->positive),
  +			&tmp, &i);
  +	if (rc == XDS_OK)
  +	    {
  +	    if (i == sizeof(ms->text))
  +		memmove(ms->text, tmp, i);
  +	    else
  +		rc = XDS_ERR_TYPE_MISMATCH;
  +	    free(tmp);
  +	    }
  +	return rc;
  +	}
  +
  +The engine simply calls xds_decode() to handle the separate data
  +types. The only complication is that the octet stream decoding engines
  +return a pointer to malloc(3)ed buffer -- what is not what we
  +need. Thus we have to manually copy the contents of that buffer into the
  +right place in the structure and free the (now unused) buffer again.
  +
  +A complete example program encoding and decoding `mystruct' can be found
  +at docs/extended.c in the distribution.
  +
  +=head1 SO ALSO
  +
  +=over 4
   
  -=item int B<xds_vdecode>(xds_t* I<xds>, const char* I<fmt>, va_list I<args>);
  +=item RFC 1832: `XDR: External Data Representation Standard',
  +R. Srinivasan, August 1995
   
  -See B<xds_decode>.
  +=item XML-RPC Home Page: http://www.xmlrpc.org/
   
   =back
   

From ossp-cvs-owner@ossp.org  Mon Aug 13 21:23:33 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7DJNWr95855; Mon, 13 Aug 2001 21:23:32 +0200 (CEST)
Date: Mon, 13 Aug 2001 21:23:32 +0200 (CEST)
Message-Id: <200108131923.f7DJNWr95855@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile.in autogen.sh
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   13-Aug-2001 21:23:32
  Branch: HEAD                             Handle: 2001081320233200

  Added files:
    ossp-pkg/srpc/libxds    autogen.sh
  Modified files:
    ossp-pkg/srpc/libxds    Makefile.in

  Log:
    Add autogen.sh for generating (after "make realclean") and/or
    updating (after new versions are released) the build environment.

  Summary:
    Revision    Changes     Path
    1.29        +1  -1      ossp-pkg/srpc/libxds/Makefile.in
    1.1         +75 -0      ossp-pkg/srpc/libxds/autogen.sh
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile.in
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 Makefile.in
  --- ossp-pkg/srpc/libxds/Makefile.in	2001/08/13 18:21:32	1.28
  +++ ossp-pkg/srpc/libxds/Makefile.in	2001/08/13 19:23:32	1.29
  @@ -160,7 +160,7 @@
   	@$(SHTOOL) fixperm -v .; \
   	V=`$(SHTOOL) version -l c -d short xds_version.c`; \
   	$(SHTOOL) tarball -o xds-$${V}.tar.gz -d str-$${V} -u ossp -g ossp \
  -	                  -e 'CVS,\.cvsignore,\.[ao],^\.' -c 'gzip --best' .
  +	                  -e 'CVS,\.cvsignore,\.[ao],^\.,autogen.sh' -c 'gzip --best' .
   
   #   increase or update version information
   new-version:
  Index: ossp-pkg/srpc/libxds/autogen.sh
  ============================================================
  $ cvs update -p -r1.1 autogen.sh
  #!/bin/sh
  ##
  ##  XDS - OSSP Extensible Data Serialization Library
  ##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  ##  
  ##  This file is part of OSSP XDS, an extensible data serialization
  ##  library which can be found at http://www.ossp.org/pkg/xds/.
  ##  
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##  
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  autogen.sh: auto-generate library build environment tools
  ##
  
  #   generator tools version sanity check
  for spec in \
      "autoconf   --version 4 2.52  2.5*" \
      "libtoolize --version 4 1.4   1.4*" \
      "shtoolize  -v        3 1.5.4 1.5.*"
  do
      set -- $spec
      t="$1"
      o="$2"
      p="$3"
      e="$4"
      a="$5"
      v=`($t $o | head -1 | awk "{ print \\\$$p; }") 2>/dev/null`
      if [ ".$v" = . ]; then
          echo "$0:ERROR: unable to determine version of $t" 1>&2
          exit 1
      fi
      eval "${t}_version=\"$v\""
      case "$v" in
          $e )
              ;;
          $a ) 
              echo "$0:WARNING: $t version $v still accepted, although expected $e." 1>&2
              ;;
          * )
              echo "$0:ERROR: $t version $e expected, but found $v." 1>&2
              ;;
      esac
  done
  
  #   GNU Libtool generation
  echo "GNU Libtool $libtoolize_version -> ltmain.sh, libtool.m4, config.guess, config.sub"
  libtoolize --force --copy >/dev/null 2>&1
  cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
      sed -e 's;[^\`]*\`;;' -e "s;\'.*;;"` libtool.m4
  
  #   GNU Autoconf generation
  echo "GNU Autoconf $autoconf_version -> configure, config.h.in"
  autoconf
  autoheader
  
  #   GNU Shtool generation
  echo "GNU Shtool $shtoolize_version -> shtool"
  shtoolize -q all
  

From ossp-cvs-owner@ossp.org  Mon Aug 13 21:26:28 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7DJQRJ96359; Mon, 13 Aug 2001 21:26:27 +0200 (CEST)
Date: Mon, 13 Aug 2001 21:26:27 +0200 (CEST)
Message-Id: <200108131926.f7DJQRJ96359@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds configure
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   13-Aug-2001 21:26:27
  Branch: HEAD                             Handle: 2001081320262700

  Added files:
    ossp-pkg/srpc/libxds    configure

  Log:
    Add (generated) configure script, because
    1. we already stored shtool and libtool files, so
       it is just consistent to also store the configure file.
    2. in OSSP CVS we currently still have those files,
       so store it also for XDS until we change decisions.
    3. it is convinient for OSSP testers if the checked out
       CVS version can immediately be tried out.

  Summary:
    Revision    Changes     Path
    1.1         BLOB        ossp-pkg/srpc/libxds/configure
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/configure
  ============================================================
  $ cvs update -p -r1.1 configure | uuencode configure

From ossp-cvs-owner@ossp.org  Mon Aug 13 21:35:11 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7DJZAr97449; Mon, 13 Aug 2001 21:35:10 +0200 (CEST)
Date: Mon, 13 Aug 2001 21:35:10 +0200 (CEST)
Message-Id: <200108131935.f7DJZAr97449@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   13-Aug-2001 21:35:10
  Branch: HEAD                             Handle: 2001081320350900

  Modified files:
    ossp-pkg/srpc/libxds    Makefile.in

  Log:
    Add target for building ChangeLog from CVS logs

  Summary:
    Revision    Changes     Path
    1.30        +5  -0      ossp-pkg/srpc/libxds/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile.in
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 Makefile.in
  --- ossp-pkg/srpc/libxds/Makefile.in	2001/08/13 19:23:32	1.29
  +++ ossp-pkg/srpc/libxds/Makefile.in	2001/08/13 19:35:09	1.30
  @@ -127,6 +127,11 @@
   	NAME="XDS"; ONELINE="Extensible Data Serialization"; \
   	$(_MANPAGE)
   
  +#   build GNU style ChangeLog
  +ChangeLog::
  +	cvs2cl --revisions --branches --tags --no-wrap --separate-header --gmt
  +	-$(RM) ChangeLog.bak
  +
   #   perform standard installation procedure
   install: all
   	$(SHTOOL) mkdir -p -f -m 755 $(DESTDIR)$(bindir)

From ossp-cvs-owner@ossp.org  Mon Aug 13 21:39:44 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7DJdgH97770; Mon, 13 Aug 2001 21:39:42 +0200 (CEST)
Date: Mon, 13 Aug 2001 21:39:42 +0200 (CEST)
Message-Id: <200108131939.f7DJdgH97770@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds aclocal.m4
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   13-Aug-2001 21:39:42
  Branch: HEAD                             Handle: 2001081320394200

  Modified files:
    ossp-pkg/srpc/libxds    aclocal.m4

  Log:
    remove XDS_DEBUG until we really use it

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/srpc/libxds/aclocal.m4
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 aclocal.m4
  --- ossp-pkg/srpc/libxds/aclocal.m4	2001/08/12 11:31:45	1.2
  +++ ossp-pkg/srpc/libxds/aclocal.m4	2001/08/13 19:39:42	1.3
  @@ -163,7 +163,7 @@
       esac
   fi
   msg="enabled"
  -AC_DEFINE(XDS_DEBUG)
  +dnl AC_DEFINE(XDS_DEBUG)
   ],[
   if test ".$ac_cv_prog_gcc" = ".yes"; then
   case "$CFLAGS" in

From ossp-cvs-owner@ossp.org  Mon Aug 13 21:40:16 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7DJeF797845; Mon, 13 Aug 2001 21:40:15 +0200 (CEST)
Date: Mon, 13 Aug 2001 21:40:15 +0200 (CEST)
Message-Id: <200108131940.f7DJeF797845@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds configure
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   13-Aug-2001 21:40:15
  Branch: HEAD                             Handle: 2001081320401400

  Modified files:
    ossp-pkg/srpc/libxds    configure

  Log:
    update configure

  Summary:
    Revision    Changes     Path
    1.2         BLOB        ossp-pkg/srpc/libxds/configure
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/configure
  ============================================================
  $ cvs update -p -r1.1 configure >configure.old
  $ cvs update -p -r1.2 configure >configure.new
  $ diff -u configure.old configure.new

From ossp-cvs-owner@ossp.org  Mon Aug 13 21:40:40 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7DJedk97902; Mon, 13 Aug 2001 21:40:39 +0200 (CEST)
Date: Mon, 13 Aug 2001 21:40:39 +0200 (CEST)
Message-Id: <200108131940.f7DJedk97902@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   13-Aug-2001 21:40:39
  Branch: HEAD                             Handle: 2001081320403900

  Modified files:
    ossp-pkg/srpc/libxds    Makefile.in

  Log:
    cleanup cleanup targets ;) again

  Summary:
    Revision    Changes     Path
    1.31        +8  -4      ossp-pkg/srpc/libxds/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile.in
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 Makefile.in
  --- ossp-pkg/srpc/libxds/Makefile.in	2001/08/13 19:35:09	1.30
  +++ ossp-pkg/srpc/libxds/Makefile.in	2001/08/13 19:40:39	1.31
  @@ -91,18 +91,22 @@
   	    -version-info `$(SHTOOL) version -l c -d libtool xds_version.c`
   
   clean:
  -	-$(RM) $(LIB_OBJS)
  -	-$(RM) ./.*.t ./.*.l
   	-$(RM) $(LIB_NAME)
  +	-$(RM) *.lo *.o
  +	-$(RM) ./.*.t ./.*.l
   	-$(RM) xds.3
  +	-$(RM) xds-config.1
  +	-$(RM) xds-config
   
   distclean: clean
  -	-$(RM) config.log config.status Makefile libtool
  +	-$(RM) config.log config.status Makefile libtool config.h
   	-$(RM) -r .libs >/dev/null 2>&1 || true
   	-$(RM) xds.h
   
   realclean: distclean
  -	-$(RM) configure
  +	-$(RM) config.guess config.sub ltmain.sh libtool.m4
  +	-$(RM) configure config.h.in
  +	-$(RM) shtool
   
   check:		$(LIB_NAME) $(TST_SRCS)
   	-@for filename in $(TST_SRCS); do \

From ossp-cvs-owner@ossp.org  Mon Aug 13 21:48:05 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7DJm4e99472; Mon, 13 Aug 2001 21:48:04 +0200 (CEST)
Date: Mon, 13 Aug 2001 21:48:04 +0200 (CEST)
Message-Id: <200108131948.f7DJm4e99472@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile.in README aclocal.m4 autogen...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   13-Aug-2001 21:48:04
  Branch: HEAD                             Handle: 2001081320480200

  Modified files:
    ossp-pkg/srpc/libxds    Makefile.in README aclocal.m4 autogen.sh
                            configure.ac libtool.m4 xds-config.in
                            xds-config.pod xds-xml.dtd xds.c xds.m4
                            xds_engine_xdr.c xds_engine_xml.c xds_test.sh
                            xds_test_xdr.c

  Log:
    Remove trailing whitespaces on all non-generated files.

  Summary:
    Revision    Changes     Path
    1.32        +3  -3      ossp-pkg/srpc/libxds/Makefile.in
    1.4         +1  -1      ossp-pkg/srpc/libxds/README
    1.4         +6  -6      ossp-pkg/srpc/libxds/aclocal.m4
    1.2         +4  -4      ossp-pkg/srpc/libxds/autogen.sh
    1.22        +3  -3      ossp-pkg/srpc/libxds/configure.ac
    1.2         +1  -1      ossp-pkg/srpc/libxds/libtool.m4
    1.3         +4  -4      ossp-pkg/srpc/libxds/xds-config.in
    1.3         +3  -3      ossp-pkg/srpc/libxds/xds-config.pod
    1.3         +4  -4      ossp-pkg/srpc/libxds/xds-xml.dtd
    1.7         +5  -5      ossp-pkg/srpc/libxds/xds.c
    1.3         +3  -3      ossp-pkg/srpc/libxds/xds.m4
    1.6         +3  -3      ossp-pkg/srpc/libxds/xds_engine_xdr.c
    1.7         +12 -12     ossp-pkg/srpc/libxds/xds_engine_xml.c
    1.5         +3  -3      ossp-pkg/srpc/libxds/xds_test.sh
    1.5         +1  -1      ossp-pkg/srpc/libxds/xds_test_xdr.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile.in
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 Makefile.in
  --- ossp-pkg/srpc/libxds/Makefile.in	2001/08/13 19:40:39	1.31
  +++ ossp-pkg/srpc/libxds/Makefile.in	2001/08/13 19:48:02	1.32
  @@ -2,15 +2,15 @@
   ##  XDS - OSSP Extensible Data Serialization Library
   ##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
   ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  -##  
  +##
   ##  This file is part of OSSP XDS, an extensible data serialization
   ##  library which can be found at http://www.ossp.org/pkg/xds/.
  -##  
  +##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
   ##  the above copyright notice and this permission notice appear in all
   ##  copies.
  -##  
  +##
   ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
   ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  Index: ossp-pkg/srpc/libxds/README
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 README
  --- ossp-pkg/srpc/libxds/README	2001/08/12 11:31:45	1.3
  +++ ossp-pkg/srpc/libxds/README	2001/08/13 19:48:02	1.4
  @@ -1,4 +1,4 @@
  -               
  + 
     OSSP XDS - eXtensible Data Serialization
     Version 0.9.0 (11-Aug-2001)
   
  Index: ossp-pkg/srpc/libxds/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 aclocal.m4
  --- ossp-pkg/srpc/libxds/aclocal.m4	2001/08/13 19:39:42	1.3
  +++ ossp-pkg/srpc/libxds/aclocal.m4	2001/08/13 19:48:02	1.4
  @@ -2,15 +2,15 @@
   dnl ##  XDS - OSSP Extensible Data Serialization Library
   dnl ##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
   dnl ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  -dnl ##  
  +dnl ##
   dnl ##  This file is part of OSSP XDS, an extensible data serialization
   dnl ##  library which can be found at http://www.ossp.org/pkg/xds/.
  -dnl ##  
  +dnl ##
   dnl ##  Permission to use, copy, modify, and distribute this software for
   dnl ##  any purpose with or without fee is hereby granted, provided that
   dnl ##  the above copyright notice and this permission notice appear in all
   dnl ##  copies.
  -dnl ##  
  +dnl ##
   dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
   dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  @@ -31,8 +31,8 @@
   dnl ##  Support for Configuration Headers
   dnl ##
   dnl ##  configure.in:
  -dnl ##    AC_HEADLINE(<short-name>, <long-name>, 
  -dnl ##                <vers-var>, <vers-file>, 
  +dnl ##    AC_HEADLINE(<short-name>, <long-name>,
  +dnl ##                <vers-var>, <vers-file>,
   dnl ##                <copyright>)
   dnl ##
   
  @@ -55,7 +55,7 @@
       #   find out package version
       $3_STR="`$ac_shtool version -l c -d long $ac_srcdir/$4`"
       AC_SUBST($3_STR)
  - 
  +
       #   friendly header ;)
       echo "Configuring ${TB}$1${TN} ($2), Version ${TB}${$3_STR}${TN}"
       echo "$5"
  Index: ossp-pkg/srpc/libxds/autogen.sh
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 autogen.sh
  --- ossp-pkg/srpc/libxds/autogen.sh	2001/08/13 19:23:32	1.1
  +++ ossp-pkg/srpc/libxds/autogen.sh	2001/08/13 19:48:02	1.2
  @@ -3,15 +3,15 @@
   ##  XDS - OSSP Extensible Data Serialization Library
   ##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
   ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  -##  
  +##
   ##  This file is part of OSSP XDS, an extensible data serialization
   ##  library which can be found at http://www.ossp.org/pkg/xds/.
  -##  
  +##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
   ##  the above copyright notice and this permission notice appear in all
   ##  copies.
  -##  
  +##
   ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
   ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  @@ -49,7 +49,7 @@
       case "$v" in
           $e )
               ;;
  -        $a ) 
  +        $a )
               echo "$0:WARNING: $t version $v still accepted, although expected $e." 1>&2
               ;;
           * )
  Index: ossp-pkg/srpc/libxds/configure.ac
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 configure.ac
  --- ossp-pkg/srpc/libxds/configure.ac	2001/08/12 11:31:45	1.21
  +++ ossp-pkg/srpc/libxds/configure.ac	2001/08/13 19:48:02	1.22
  @@ -2,15 +2,15 @@
   dnl ##  XDS - OSSP Extensible Data Serialization Library
   dnl ##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
   dnl ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  -dnl ##  
  +dnl ##
   dnl ##  This file is part of OSSP XDS, an extensible data serialization
   dnl ##  library which can be found at http://www.ossp.org/pkg/xds/.
  -dnl ##  
  +dnl ##
   dnl ##  Permission to use, copy, modify, and distribute this software for
   dnl ##  any purpose with or without fee is hereby granted, provided that
   dnl ##  the above copyright notice and this permission notice appear in all
   dnl ##  copies.
  -dnl ##  
  +dnl ##
   dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
   dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  Index: ossp-pkg/srpc/libxds/libtool.m4
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 libtool.m4
  --- ossp-pkg/srpc/libxds/libtool.m4	2001/08/11 15:23:09	1.1
  +++ ossp-pkg/srpc/libxds/libtool.m4	2001/08/13 19:48:02	1.2
  @@ -785,7 +785,7 @@
   
   ## FIXME: this should be a separate macro
   ##
  -AC_ARG_WITH(pic, 
  +AC_ARG_WITH(pic,
   [  --with-pic              try to use only PIC/non-PIC objects [default=use both]],
   pic_mode="$withval", pic_mode=default)
   test -z "$pic_mode" && pic_mode=default
  Index: ossp-pkg/srpc/libxds/xds-config.in
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xds-config.in
  --- ossp-pkg/srpc/libxds/xds-config.in	2001/08/12 11:31:45	1.2
  +++ ossp-pkg/srpc/libxds/xds-config.in	2001/08/13 19:48:02	1.3
  @@ -3,15 +3,15 @@
   ##  XDS - OSSP Extensible Data Serialization Library
   ##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
   ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  -##  
  +##
   ##  This file is part of OSSP XDS, an extensible data serialization
   ##  library which can be found at http://www.ossp.org/pkg/xds/.
  -##  
  +##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
   ##  the above copyright notice and this permission notice appear in all
   ##  copies.
  -##  
  +##
   ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
   ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  @@ -28,7 +28,7 @@
   ##  xds-config.in: XDS library build utility
   ##
   
  -DIFS=' 	
  +DIFS=' 
   '
   
   prefix="@prefix@"
  Index: ossp-pkg/srpc/libxds/xds-config.pod
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xds-config.pod
  --- ossp-pkg/srpc/libxds/xds-config.pod	2001/08/12 11:31:45	1.2
  +++ ossp-pkg/srpc/libxds/xds-config.pod	2001/08/13 19:48:02	1.3
  @@ -2,15 +2,15 @@
   ##  XDS - OSSP Extensible Data Serialization Library
   ##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
   ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  -##  
  +##
   ##  This file is part of OSSP XDS, an extensible data serialization
   ##  library which can be found at http://www.ossp.org/pkg/xds/.
  -##  
  +##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
   ##  the above copyright notice and this permission notice appear in all
   ##  copies.
  -##  
  +##
   ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
   ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  Index: ossp-pkg/srpc/libxds/xds-xml.dtd
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xds-xml.dtd
  --- ossp-pkg/srpc/libxds/xds-xml.dtd	2001/08/12 11:31:45	1.2
  +++ ossp-pkg/srpc/libxds/xds-xml.dtd	2001/08/13 19:48:02	1.3
  @@ -1,16 +1,16 @@
  -<!-- =========================================================== 
  +<!-- ===========================================================
        XDS - OSSP Extensible Data Serialization Library
        Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
        Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  - 
  +
        This file is part of OSSP XDS, an extensible data serialization
        library which can be found at http://www.ossp.org/pkg/xds/.
  - 
  +
        Permission to use, copy, modify, and distribute this software for
        any purpose with or without fee is hereby granted, provided that
        the above copyright notice and this permission notice appear in all
        copies.
  - 
  +
        THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
        WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
        MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  Index: ossp-pkg/srpc/libxds/xds.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 xds.c
  --- ossp-pkg/srpc/libxds/xds.c	2001/08/12 11:31:45	1.6
  +++ ossp-pkg/srpc/libxds/xds.c	2001/08/13 19:48:02	1.7
  @@ -164,7 +164,7 @@
           return XDS_OK;
   
       /* Find the correct capacity. */
  -    size = (*array_capacity != 0) ? (*array_capacity * 2) : initial_capacity; 
  +    size = (*array_capacity != 0) ? (*array_capacity * 2) : initial_capacity;
       while (size < new_capacity)
           size *= 2;
   
  @@ -226,7 +226,7 @@
           return XDS_ERR_NO_MEM;
   
       /* Search engines for the entry. */
  -    if (xds_find_engine(xds->engines, xds->engines_len, name, &pos)) { 
  +    if (xds_find_engine(xds->engines, xds->engines_len, name, &pos)) {
           /* overwrite existing entry */
           free(xds->engines[pos].name);
       }
  @@ -322,10 +322,10 @@
           return XDS_ERR_INVALID_MODE;
   
       /* Ensure we have a buffer allocated ready for use. */
  -    if (xds->buffer == NULL) { 
  +    if (xds->buffer == NULL) {
           /* allocate a new buffer */
           rc = xds_set_capacity((void **)&xds->buffer, &xds->buffer_capacity,
  -                              XDS_INITIAL_BUFFER_CAPACITY, sizeof (char), 
  +                              XDS_INITIAL_BUFFER_CAPACITY, sizeof (char),
                                 XDS_INITIAL_BUFFER_CAPACITY);
           assert(rc == XDS_OK || rc == XDS_ERR_NO_MEM);
           if (rc != XDS_OK)
  @@ -352,7 +352,7 @@
               size_t used_buffer_size;
               size_t pos;
   
  -            if (xds_find_engine(xds->engines, xds->engines_len, name, &pos) 
  +            if (xds_find_engine(xds->engines, xds->engines_len, name, &pos)
                   == XDS_FALSE) {
                   rc = XDS_ERR_UNKNOWN_ENGINE;
                   goto leave;
  Index: ossp-pkg/srpc/libxds/xds.m4
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 xds.m4
  --- ossp-pkg/srpc/libxds/xds.m4	2001/08/12 11:31:45	1.2
  +++ ossp-pkg/srpc/libxds/xds.m4	2001/08/13 19:48:02	1.3
  @@ -2,15 +2,15 @@
   dnl ##  XDS - OSSP Extensible Data Serialization Library
   dnl ##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
   dnl ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  -dnl ##  
  +dnl ##
   dnl ##  This file is part of OSSP XDS, an extensible data serialization
   dnl ##  library which can be found at http://www.ossp.org/pkg/xds/.
  -dnl ##  
  +dnl ##
   dnl ##  Permission to use, copy, modify, and distribute this software for
   dnl ##  any purpose with or without fee is hereby granted, provided that
   dnl ##  the above copyright notice and this permission notice appear in all
   dnl ##  copies.
  -dnl ##  
  +dnl ##
   dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
   dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  Index: ossp-pkg/srpc/libxds/xds_engine_xdr.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 xds_engine_xdr.c
  --- ossp-pkg/srpc/libxds/xds_engine_xdr.c	2001/08/12 11:31:45	1.5
  +++ ossp-pkg/srpc/libxds/xds_engine_xdr.c	2001/08/13 19:48:02	1.6
  @@ -73,7 +73,7 @@
       value = va_arg(*args, xds_int32_t *);
       xds_check_parameter(value != NULL);
   
  -    if (((xds_uint8_t *) buffer)[0] & 0x80) {   
  +    if (((xds_uint8_t *) buffer)[0] & 0x80) {
           /* negative number */
           tmp =  ((xds_uint8_t *)buffer)[0];
           tmp = tmp << 8;
  @@ -85,7 +85,7 @@
           tmp = 0 - tmp;
           *value = 0 - (int32_t)tmp;
       }
  -    else {                             
  +    else {
           /* positive number */
           *value =  ((xds_uint8_t *)buffer)[0];
           *value = *value << 8;
  @@ -192,7 +192,7 @@
       value = va_arg(*args, xds_int64_t *);
       xds_check_parameter(value != NULL);
   
  -    if (((xds_uint8_t *)buffer)[0] & 0x80) {  
  +    if (((xds_uint8_t *)buffer)[0] & 0x80) {
           /* negative number */
           tmp =  ((xds_uint8_t *)buffer)[0];
           tmp = tmp << 8;
  Index: ossp-pkg/srpc/libxds/xds_engine_xml.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 xds_engine_xml.c
  --- ossp-pkg/srpc/libxds/xds_engine_xml.c	2001/08/12 11:31:45	1.6
  +++ ossp-pkg/srpc/libxds/xds_engine_xml.c	2001/08/13 19:48:02	1.7
  @@ -42,7 +42,7 @@
       "<!DOCTYPE xds SYSTEM \"http://www.ossp.org/pkg/xds/xds-xml.dtd\">\n"
       "<xds>\n";
   
  -static const char xds_xml_end_text[] = 
  +static const char xds_xml_end_text[] =
       "</xds>\n";
   
   int xml_encode_begin(xds_t *xds, void *engine_context,
  @@ -59,7 +59,7 @@
                        size_t *used_buffer_size, va_list *args)
   {
       xds_init_encoding_engine(strlen(xds_xml_begin_text));
  -    if (strncasecmp(buffer, xds_xml_begin_text, 
  +    if (strncasecmp(buffer, xds_xml_begin_text,
                       strlen(xds_xml_begin_text)) != 0)
           return XDS_ERR_TYPE_MISMATCH;
       return XDS_OK;
  @@ -79,7 +79,7 @@
                      size_t *used_buffer_size, va_list *args)
   {
       xds_init_decoding_engine(strlen(xds_xml_end_text));
  -    if (strncasecmp(buffer, xds_xml_end_text, 
  +    if (strncasecmp(buffer, xds_xml_end_text,
                       strlen(xds_xml_end_text)) != 0)
           return XDS_ERR_TYPE_MISMATCH;
       return XDS_OK;
  @@ -527,7 +527,7 @@
   
       /* Format the data into the buffer. */
       while (src_len > 0 && dst_size > 0) {
  -        if (*((xds_uint8_t *) src) >= 0x80) { 
  +        if (*((xds_uint8_t *) src) >= 0x80) {
               /* UTF-8ify it. */
               if (dst_size >= 7) {
                   tmp = sputu8((xds_uint32_t) * ((xds_uint8_t *) src), dst);
  @@ -539,7 +539,7 @@
               else
                   dst_size = 0;
           }
  -        else if (*src == '<') { 
  +        else if (*src == '<') {
               /* Turn into "&lt;". */
               if (dst_size >= 4) {
                   *dst++ = '&';
  @@ -592,7 +592,7 @@
               else
                   dst_size = 0;
           }
  -        else {  
  +        else {
               /* No special character; just copy it. */
               *dst++ = *src++;
               src_len--;
  @@ -760,7 +760,7 @@
       "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
   static const char xds_pad64 = '=';
   
  -static int base64_encode(char *dst, size_t dstlen, 
  +static int base64_encode(char *dst, size_t dstlen,
                            unsigned char const *src, size_t srclen)
   {
       size_t dstpos;
  @@ -863,7 +863,7 @@
       return XDS_OK;
   }
   
  -static int base64_decode(unsigned char *dst, size_t dstlen, 
  +static int base64_decode(unsigned char *dst, size_t dstlen,
                            char const *src, size_t srclen)
   {
       int dstidx, state, ch = 0;
  @@ -927,7 +927,7 @@
           }
       }
   
  -    /* 
  +    /*
        * We are done decoding Base-64 chars.  Let's see if we ended
        * on a byte boundary, and/or with erroneous trailing characters.
        */
  @@ -949,7 +949,7 @@
                       return -1;
                   /* FALLTHROUGH */
               case 3:                /* Valid, means two bytes of info */
  -                /* 
  +                /*
                    * We know this char is an =.  Is there anything but
                    * whitespace after it?
                    */
  @@ -959,7 +959,7 @@
                       if (!(isascii(ch) && isspace(ch)))
                           return -1;
                   }
  -                /* 
  +                /*
                    * Now make sure for cases 2 and 3 that the "extra"
                    * bits that slopped past the last full byte were
                    * zeros.  If we don't check them, they become a
  @@ -972,7 +972,7 @@
           }
       }
       else {
  -        /* 
  +        /*
            * We ended by seeing the end of the string.  Make sure we
            * have no partial bytes lying around.
            */
  Index: ossp-pkg/srpc/libxds/xds_test.sh
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xds_test.sh
  --- ossp-pkg/srpc/libxds/xds_test.sh	2001/08/12 11:31:45	1.4
  +++ ossp-pkg/srpc/libxds/xds_test.sh	2001/08/13 19:48:02	1.5
  @@ -3,15 +3,15 @@
   ##  XDS - OSSP Extensible Data Serialization Library
   ##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
   ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  -##  
  +##
   ##  This file is part of OSSP XDS, an extensible data serialization
   ##  library which can be found at http://www.ossp.org/pkg/xds/.
  -##  
  +##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
   ##  the above copyright notice and this permission notice appear in all
   ##  copies.
  -##  
  +##
   ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
   ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  Index: ossp-pkg/srpc/libxds/xds_test_xdr.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xds_test_xdr.c
  --- ossp-pkg/srpc/libxds/xds_test_xdr.c	2001/08/12 11:31:45	1.4
  +++ ossp-pkg/srpc/libxds/xds_test_xdr.c	2001/08/13 19:48:02	1.5
  @@ -344,7 +344,7 @@
   
   #ifdef XDS_TEST_XDR_UINT64
   
  -#ifdef XDS_HAVE_64_BIT_SUPPORT 
  +#ifdef XDS_HAVE_64_BIT_SUPPORT
   
   #ifdef __FreeBSD__
   static int xdr_uint64_t(XDR *xdrs, uint64_t *val)

From ossp-cvs-owner@ossp.org  Tue Aug 14 16:43:31 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7EEhTK54838; Tue, 14 Aug 2001 16:43:29 +0200 (CEST)
Date: Tue, 14 Aug 2001 16:43:29 +0200 (CEST)
Message-Id: <200108141443.f7EEhTK54838@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 README
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   14-Aug-2001 16:43:29
  Branch: HEAD                             Handle: 2001081415432900

  Modified files:
    ossp-pkg/l2             README

  Log:
    Commit tester, corrected ossp.com to ossp.org

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/l2/README
  ____________________________________________________________________________

  Index: ossp-pkg/l2/README
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 README
  --- ossp-pkg/l2/README	2001/05/10 19:46:01	1.1.1.1
  +++ ossp-pkg/l2/README	2001/08/14 14:43:29	1.2
  @@ -17,7 +17,7 @@
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   
     This file is part of OSSP L2, a flexible logging library which
  -  can be found at http://www.ossp.com/pkg/l2/.
  +  can be found at http://www.ossp.org/pkg/l2/.
   
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that

From ossp-cvs-owner@ossp.org  Wed Aug 15 09:41:56 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7F7ftK02518; Wed, 15 Aug 2001 09:41:55 +0200 (CEST)
Date: Wed, 15 Aug 2001 09:41:55 +0200 (CEST)
Message-Id: <200108150741.f7F7ftK02518@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   15-Aug-2001 09:41:55
  Branch: HEAD                             Handle: 2001081508415400

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    add one idea which we could follow later...

  Summary:
    Revision    Changes     Path
    1.7         +8  -0      ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 TODO
  --- ossp-pkg/l2/TODO	2001/05/26 08:07:55	1.6
  +++ ossp-pkg/l2/TODO	2001/08/15 07:41:54	1.7
  @@ -2,6 +2,14 @@
   OSSP L2
   =======
   
  +Idea:
  +l2_handler_t:
  +   - function pointers
  +   - sizeof(handler struct)
  +   - table of config callsbacks
  +     which use offsetof into handler struct
  +Auf diese Weise ist l2_channel_setparams aus API
  +draussen und..
   
   Timeplan
   --------

From ossp-cvs-owner@ossp.org  Wed Aug 15 09:50:05 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7F7o2m03686; Wed, 15 Aug 2001 09:50:02 +0200 (CEST)
Date: Wed, 15 Aug 2001 09:50:02 +0200 (CEST)
Message-Id: <200108150750.f7F7o2m03686@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 Makefile.in aclocal.m4 autogen.sh configure co...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   15-Aug-2001 09:50:02
  Branch: HEAD                             Handle: 19700101010000997858199

  Added files:
    ossp-pkg/l2             autogen.sh libtool.m4
  Modified files:
    ossp-pkg/l2             Makefile.in aclocal.m4 configure configure.in l2.3
                            l2_config.h.in ltmain.sh shtool
  Removed files:
    ossp-pkg/l2             ltconfig

  Log:
    Upgrade to GNU autoconf 2.52, GNU libtool 1.4, GNU shtool 1.5.4

  Summary:
    Revision    Changes     Path
    1.8         +1  -1      ossp-pkg/l2/Makefile.in
    1.2         +9  -35     ossp-pkg/l2/aclocal.m4
    1.1         +75 -0      ossp-pkg/l2/autogen.sh
    1.4         +6883 -974  ossp-pkg/l2/configure
    1.4         +1  -1      ossp-pkg/l2/configure.in
    1.4         +5  -5      ossp-pkg/l2/l2.3
    1.2         +1  -2      ossp-pkg/l2/l2_config.h.in
    1.1         +3397 -0    ossp-pkg/l2/libtool.m4
    NONE        +0  -3114   ossp-pkg/l2/ltconfig
    1.2         +1685 -763  ossp-pkg/l2/ltmain.sh
    1.3         +43 -14     ossp-pkg/l2/shtool
  ____________________________________________________________________________

  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 Makefile.in
  --- ossp-pkg/l2/Makefile.in	2001/05/22 18:47:31	1.7
  +++ ossp-pkg/l2/Makefile.in	2001/08/15 07:49:59	1.8
  @@ -219,7 +219,7 @@
   	@$(SHTOOL) fixperm -v .; \
   	V=`$(SHTOOL) version -l c -d short l2_version.c`; \
   	$(SHTOOL) tarball -o l2-$${V}.tar.gz -d str-$${V} -u ossp -g ossp \
  -	                  -e 'CVS,\.cvsignore,\.[ao],^\.' -c 'gzip --best' .
  +	                  -e 'CVS,\.cvsignore,\.[ao],^\.,autogen.sh' -c 'gzip --best' .
   
   #   increase or update version information
   new-version:
  Index: ossp-pkg/l2/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 aclocal.m4
  --- ossp-pkg/l2/aclocal.m4	2001/05/10 19:46:01	1.1.1.1
  +++ ossp-pkg/l2/aclocal.m4	2001/08/15 07:49:59	1.2
  @@ -35,10 +35,8 @@
   dnl ##
   
   AC_DEFUN(AC_PLATFORM,[
  -if test ".$host" != .NONE; then
  +if test ".$host" != .NONE && test ".$host" != .; then
       $1="$host"
  -elif test ".$nonopt" != .NONE; then
  -    $1="$nonopt"
   else
       $1=`${CONFIG_SHELL-/bin/sh} $srcdir/config.guess`
   fi
  @@ -59,7 +57,7 @@
   dnl ##
   
   AC_DEFUN(AC_HEADLINE,[dnl
  -AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)dnl
  +AC_DIVERT_PUSH(NOTICE)dnl
   #   configuration header
   if test ".`echo dummy [$]@ | grep help`" = .; then
       #   bootstrapping shtool
  @@ -151,7 +149,7 @@
       esac
   fi
   msg="enabled"
  -AC_DEFINE(STR_DEBUG)
  +dnl AC_DEFINE(L2_DEBUG)
   ],[
   if test ".$ac_cv_prog_gcc" = ".yes"; then
   case "$CFLAGS" in
  @@ -177,38 +175,14 @@
   ])
   
   dnl ##
  -dnl ##  Minimalistic Libtool Glue Code
  +dnl ##  Libtool Glue Code
   dnl ##
   dnl ##  configure.in:
  -dnl ##    AC_PROG_LIBTOOL(<platform-variable>)
  +dnl ##    AC_CONFIGURE_LIBTOOL
   dnl ##
   
  -AC_DEFUN(AC_PROG_LIBTOOL,[dnl
  -AC_ARG_ENABLE(static,dnl
  -[  --enable-static         build static libraries (default=yes)],
  -enable_static="$enableval",
  -if test ".$enable_static" = .; then
  -    enable_static=yes
  -fi
  -)dnl
  -AC_ARG_ENABLE(shared,dnl
  -[  --enable-shared         build shared libraries (default=yes)],
  -enable_shared="$enableval",
  -if test ".$enable_shared" = .; then
  -    enable_shared=yes
  -fi
  -)dnl
  -libtool_flags=''
  -dnl libtool_flags="$libtool_flags --cache-file=$cache_file"
  -test ".$silent"            = .yes && libtool_flags="$libtool_flags --silent"
  -test ".$enable_static"     = .no  && libtool_flags="$libtool_flags --disable-static"
  -test ".$enable_shared"     = .no  && libtool_flags="$libtool_flags --disable-shared"
  -test ".$ac_cv_prog_gcc"    = .yes && libtool_flags="$libtool_flags --with-gcc"
  -test ".$ac_cv_prog_gnu_ld" = .yes && libtool_flags="$libtool_flags --with-gnu-ld"
  -CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" LD="$LD" \
  -${CONFIG_SHELL-/bin/sh} $srcdir/ltconfig --no-reexec \
  -$libtool_flags --srcdir=$srcdir --no-verify $srcdir/ltmain.sh $1 ||\
  -AC_MSG_ERROR([libtool configuration failed])
  -dnl (AC_CACHE_LOAD) >/dev/null 2>&1
  -])dnl
  +AC_DEFUN(AC_CONFIGURE_LIBTOOL,[
  +    sinclude(libtool.m4)
  +    AC_PROG_LIBTOOL
  +])
   
  Index: ossp-pkg/l2/autogen.sh
  ============================================================
  $ cvs update -p -r1.1 autogen.sh
  #!/bin/sh
  ##
  ##  L2 - OSSP Logging Library
  ##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  ##
  ##  This file is part of OSSP L2, a flexible logging library which
  ##  can be found at http://www.ossp.com/pkg/l2/.
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  autogen.sh: auto-generate library build environment tools
  ##
  
  #   generator tools version sanity check
  for spec in \
      "autoconf   --version 4 2.52  2.5*" \
      "libtoolize --version 4 1.4   1.4*" \
      "shtoolize  -v        3 1.5.4 1.5.*"
  do
      set -- $spec
      t="$1"
      o="$2"
      p="$3"
      e="$4"
      a="$5"
      v=`($t $o | head -1 | awk "{ print \\\$$p; }") 2>/dev/null`
      if [ ".$v" = . ]; then
          echo "$0:ERROR: unable to determine version of $t" 1>&2
          exit 1
      fi
      eval "${t}_version=\"$v\""
      case "$v" in
          $e )
              ;;
          $a )
              echo "$0:WARNING: $t version $v still accepted, although expected $e." 1>&2
              ;;
          * )
              echo "$0:ERROR: $t version $e expected, but found $v." 1>&2
              ;;
      esac
  done
  
  #   GNU Libtool generation
  echo "GNU Libtool $libtoolize_version -> ltmain.sh, libtool.m4, config.guess, config.sub"
  libtoolize --force --copy >/dev/null 2>&1
  cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
      sed -e 's;[^\`]*\`;;' -e "s;\'.*;;"` libtool.m4
  
  #   GNU Autoconf generation
  echo "GNU Autoconf $autoconf_version -> configure, config.h.in"
  autoconf
  autoheader
  
  #   GNU Shtool generation
  echo "GNU Shtool $shtoolize_version -> shtool"
  shtoolize -q all
  
  Index: ossp-pkg/l2/configure
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 configure
  --- ossp-pkg/l2/configure	2001/05/11 19:50:52	1.3
  +++ ossp-pkg/l2/configure	2001/08/15 07:49:59	1.4
  @@ -1,30 +1,12 @@
   #! /bin/sh
  -
  -# From configure.in 1.0
  -
  -
  -
  -
  -
  -
  -
  -
  -
  -
  -
  -
  -
  +# From configure.in 1.0.
   # Guess values for system-dependent variables and create Makefiles.
  -# Generated automatically using autoconf version 2.13 
  -# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
  +# Generated by Autoconf 2.52.
   #
  +# Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
  +# Free Software Foundation, Inc.
   # This configure script is free software; the Free Software Foundation
   # gives unlimited permission to copy, distribute and modify it.
  -
  -# Defaults:
  -ac_help=
  -ac_default_prefix=/usr/local
  -# Any additions from configure.in:
   #   configuration header
   if test ".`echo dummy $@ | grep help`" = .; then
       #   bootstrapping shtool
  @@ -39,8 +21,7 @@
   
       #   find out package version
       L2_VERSION_STR="`$ac_shtool version -l c -d long $ac_srcdir/l2_version.c`"
  -    
  - 
  +
       #   friendly header ;)
       echo "Configuring ${TB}L2${TN} (Logging Library), Version ${TB}${L2_VERSION_STR}${TN}"
       echo "Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  @@ -48,27 +29,272 @@
   
       #   additionally find out hex version
       L2_VERSION_HEX="`$ac_shtool version -l c -d hex $ac_srcdir/l2_version.c`"
  -    
  +
  +fi
  +
  +# Find the correct PATH separator.  Usually this is `:', but
  +# DJGPP uses `;' like DOS.
  +if test "X${PATH_SEPARATOR+set}" != Xset; then
  +  UNAME=${UNAME-`uname 2>/dev/null`}
  +  case X$UNAME in
  +    *-DOS) lt_cv_sys_path_separator=';' ;;
  +    *)     lt_cv_sys_path_separator=':' ;;
  +  esac
  +fi
  +
  +# Check that we are running under the correct shell.
  +SHELL=${CONFIG_SHELL-/bin/sh}
  +
  +case X$ECHO in
  +X*--fallback-echo)
  +  # Remove one level of quotation (which was required for Make).
  +  ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','`
  +  ;;
  +esac
  +
  +echo=${ECHO-echo}
  +if test "X$1" = X--no-reexec; then
  +  # Discard the --no-reexec flag, and continue.
  +  shift
  +elif test "X$1" = X--fallback-echo; then
  +  # Avoid inline document here, it may be left over
  +  :
  +elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
  +  # Yippee, $echo works!
  +  :
  +else
  +  # Restart under the correct shell.
  +  exec $SHELL "$0" --no-reexec ${1+"$@"}
  +fi
  +
  +if test "X$1" = X--fallback-echo; then
  +  # used as fallback echo
  +  shift
  +  cat <<EOF
  +
  +EOF
  +  exit 0
  +fi
  +
  +# The HP-UX ksh and POSIX shell print the target directory to stdout
  +# if CDPATH is set.
  +if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
  +
  +if test -z "$ECHO"; then
  +if test "X${echo_test_string+set}" != Xset; then
  +# find a string as large as possible, as long as the shell can cope with it
  +  for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
  +    # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
  +    if (echo_test_string="`eval $cmd`") 2>/dev/null &&
  +       echo_test_string="`eval $cmd`" &&
  +       (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
  +    then
  +      break
  +    fi
  +  done
  +fi
  +
  +if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
  +   echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
  +   test "X$echo_testing_string" = "X$echo_test_string"; then
  +  :
  +else
  +  # The Solaris, AIX, and Digital Unix default echo programs unquote
  +  # backslashes.  This makes it impossible to quote backslashes using
  +  #   echo "$something" | sed 's/\\/\\\\/g'
  +  #
  +  # So, first we look for a working echo in the user's PATH.
  +
  +  IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
  +  for dir in $PATH /usr/ucb; do
  +    if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
  +       test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
  +       echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
  +       test "X$echo_testing_string" = "X$echo_test_string"; then
  +      echo="$dir/echo"
  +      break
  +    fi
  +  done
  +  IFS="$save_ifs"
  +
  +  if test "X$echo" = Xecho; then
  +    # We didn't find a better echo, so look for alternatives.
  +    if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
  +       echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
  +       test "X$echo_testing_string" = "X$echo_test_string"; then
  +      # This shell has a builtin print -r that does the trick.
  +      echo='print -r'
  +    elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
  +	 test "X$CONFIG_SHELL" != X/bin/ksh; then
  +      # If we have ksh, try running configure again with it.
  +      ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
  +      export ORIGINAL_CONFIG_SHELL
  +      CONFIG_SHELL=/bin/ksh
  +      export CONFIG_SHELL
  +      exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
  +    else
  +      # Try using printf.
  +      echo='printf %s\n'
  +      if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
  +	 echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
  +	 test "X$echo_testing_string" = "X$echo_test_string"; then
  +	# Cool, printf works
  +	:
  +      elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
  +	   test "X$echo_testing_string" = 'X\t' &&
  +	   echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
  +	   test "X$echo_testing_string" = "X$echo_test_string"; then
  +	CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
  +	export CONFIG_SHELL
  +	SHELL="$CONFIG_SHELL"
  +	export SHELL
  +	echo="$CONFIG_SHELL $0 --fallback-echo"
  +      elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
  +	   test "X$echo_testing_string" = 'X\t' &&
  +	   echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
  +	   test "X$echo_testing_string" = "X$echo_test_string"; then
  +	echo="$CONFIG_SHELL $0 --fallback-echo"
  +      else
  +	# maybe with a smaller string...
  +	prev=:
  +
  +	for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
  +	  if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
  +	  then
  +	    break
  +	  fi
  +	  prev="$cmd"
  +	done
  +
  +	if test "$prev" != 'sed 50q "$0"'; then
  +	  echo_test_string=`eval $prev`
  +	  export echo_test_string
  +	  exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
  +	else
  +	  # Oops.  We lost completely, so just stick with echo.
  +	  echo=echo
  +	fi
  +      fi
  +    fi
  +  fi
  +fi
  +fi
  +
  +# Copy echo and quote the copy suitably for passing to libtool from
  +# the Makefile, instead of quoting the original, which is used later.
  +ECHO=$echo
  +if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
  +   ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
  +fi
  +
  +# Avoid depending upon Character Ranges.
  +as_cr_letters='abcdefghijklmnopqrstuvwxyz'
  +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  +as_cr_Letters=$as_cr_letters$as_cr_LETTERS
  +as_cr_digits='0123456789'
  +as_cr_alnum=$as_cr_Letters$as_cr_digits
  +
  +# Sed expression to map a string onto a valid variable name.
  +as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
  +
  +# Sed expression to map a string onto a valid CPP name.
  +as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g"
  +
  +# Be Bourne compatible
  +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
  +  emulate sh
  +  NULLCMD=:
  +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
  +  set -o posix
  +fi
  +
  +# Name of the executable.
  +as_me=`echo "$0" |sed 's,.*[\\/],,'`
  +
  +if expr a : '\(a\)' >/dev/null 2>&1; then
  +  as_expr=expr
  +else
  +  as_expr=false
  +fi
  +
  +rm -f conf$$ conf$$.exe conf$$.file
  +echo >conf$$.file
  +if ln -s conf$$.file conf$$ 2>/dev/null; then
  +  # We could just check for DJGPP; but this test a) works b) is more generic
  +  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
  +  if test -f conf$$.exe; then
  +    # Don't use ln at all; we don't have any links
  +    as_ln_s='cp -p'
  +  else
  +    as_ln_s='ln -s'
  +  fi
  +elif ln conf$$.file conf$$ 2>/dev/null; then
  +  as_ln_s=ln
  +else
  +  as_ln_s='cp -p'
  +fi
  +rm -f conf$$ conf$$.exe conf$$.file
  +
  +as_executable_p="test -f"
  +
  +# Support unset when possible.
  +if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
  +  as_unset=unset
  +else
  +  as_unset=false
   fi
  +
  +# NLS nuisances.
  +$as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; }
  +$as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; }
  +$as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; }
  +$as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; }
  +$as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; }
  +$as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; }
  +$as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; }
  +$as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; }
  +
  +# IFS
  +# We need space, tab and new line, in precisely that order.
  +as_nl='
  +'
  +IFS=" 	$as_nl"
  +
  +# CDPATH.
  +$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; }
  +
  +# Name of the host.
  +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
  +# so uname gets run too.
  +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
  +
  +exec 6>&1
  +
  +#
  +# Initializations.
  +#
  +ac_default_prefix=/usr/local
  +cross_compiling=no
  +subdirs=
  +MFLAGS= MAKEFLAGS=
  +SHELL=${CONFIG_SHELL-/bin/sh}
  +
  +# Maximum number of lines to put in a shell here document.
  +# This variable seems obsolete.  It should probably be removed, and
  +# only ac_max_sed_lines should be used.
  +: ${ac_max_here_lines=38}
  +
  +ac_unique_file="README"
   ac_default_prefix=/usr/local
  -ac_help="$ac_help
  -  --with-cxx              build C++ library (default=no)"
  -ac_help="$ac_help
  -  --enable-debug          build for debugging (default=no)"
  -ac_help="$ac_help
  -  --enable-static         build static libraries (default=yes)"
  -ac_help="$ac_help
  -  --enable-shared         build shared libraries (default=yes)"
   
   # Initialize some variables set by options.
  +ac_init_help=
  +ac_init_version=false
   # The variables have the same names as the options, with
   # dashes changed to underlines.
  -build=NONE
  -cache_file=./config.cache
  +cache_file=/dev/null
   exec_prefix=NONE
  -host=NONE
   no_create=
  -nonopt=NONE
   no_recursion=
   prefix=NONE
   program_prefix=NONE
  @@ -77,10 +303,15 @@
   silent=
   site=
   srcdir=
  -target=NONE
   verbose=
   x_includes=NONE
   x_libraries=NONE
  +
  +# Installation directory options.
  +# These are left unexpanded so users can "make install exec_prefix=/foo"
  +# and all the variables that are supposed to be based on exec_prefix
  +# by default will actually change.
  +# Use braces instead of parens because sh, perl, etc. also accept them.
   bindir='${exec_prefix}/bin'
   sbindir='${exec_prefix}/sbin'
   libexecdir='${exec_prefix}/libexec'
  @@ -94,17 +325,16 @@
   infodir='${prefix}/info'
   mandir='${prefix}/man'
   
  -# Initialize some other variables.
  -subdirs=
  -MFLAGS= MAKEFLAGS=
  -SHELL=${CONFIG_SHELL-/bin/sh}
  -# Maximum number of lines to put in a shell here document.
  -ac_max_here_lines=12
  +# Identity of this package.
  +PACKAGE_NAME=
  +PACKAGE_TARNAME=
  +PACKAGE_VERSION=
  +PACKAGE_STRING=
  +PACKAGE_BUGREPORT=
   
   ac_prev=
   for ac_option
   do
  -
     # If the previous option needs an argument, assign it.
     if test -n "$ac_prev"; then
       eval "$ac_prev=\$ac_option"
  @@ -112,59 +342,59 @@
       continue
     fi
   
  -  case "$ac_option" in
  -  -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
  -  *) ac_optarg= ;;
  -  esac
  +  ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
   
     # Accept the important Cygnus configure options, so we can diagnose typos.
   
  -  case "$ac_option" in
  +  case $ac_option in
   
     -bindir | --bindir | --bindi | --bind | --bin | --bi)
       ac_prev=bindir ;;
     -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
  -    bindir="$ac_optarg" ;;
  +    bindir=$ac_optarg ;;
   
     -build | --build | --buil | --bui | --bu)
  -    ac_prev=build ;;
  +    ac_prev=build_alias ;;
     -build=* | --build=* | --buil=* | --bui=* | --bu=*)
  -    build="$ac_optarg" ;;
  +    build_alias=$ac_optarg ;;
   
     -cache-file | --cache-file | --cache-fil | --cache-fi \
     | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
       ac_prev=cache_file ;;
     -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
     | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
  -    cache_file="$ac_optarg" ;;
  +    cache_file=$ac_optarg ;;
  +
  +  --config-cache | -C)
  +    cache_file=config.cache ;;
   
     -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
       ac_prev=datadir ;;
     -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
     | --da=*)
  -    datadir="$ac_optarg" ;;
  +    datadir=$ac_optarg ;;
   
     -disable-* | --disable-*)
  -    ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
  +    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
       # Reject names that are not valid shell variable names.
  -    if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
  -      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
  -    fi
  -    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
  -    eval "enable_${ac_feature}=no" ;;
  +    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
  +      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
  +   { (exit 1); exit 1; }; }
  +    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
  +    eval "enable_$ac_feature=no" ;;
   
     -enable-* | --enable-*)
  -    ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
  +    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
       # Reject names that are not valid shell variable names.
  -    if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
  -      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
  -    fi
  -    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
  -    case "$ac_option" in
  -      *=*) ;;
  +    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
  +      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
  +   { (exit 1); exit 1; }; }
  +    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
  +    case $ac_option in
  +      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
         *) ac_optarg=yes ;;
       esac
  -    eval "enable_${ac_feature}='$ac_optarg'" ;;
  +    eval "enable_$ac_feature='$ac_optarg'" ;;
   
     -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
     | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
  @@ -173,95 +403,47 @@
     -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
     | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
     | --exec=* | --exe=* | --ex=*)
  -    exec_prefix="$ac_optarg" ;;
  +    exec_prefix=$ac_optarg ;;
   
     -gas | --gas | --ga | --g)
       # Obsolete; use --with-gas.
       with_gas=yes ;;
   
  -  -help | --help | --hel | --he)
  -    # Omit some internal or obsolete options to make the list less imposing.
  -    # This message is too long to be a string in the A/UX 3.1 sh.
  -    cat << EOF
  -Usage: configure [options] [host]
  -Options: [defaults in brackets after descriptions]
  -Configuration:
  -  --cache-file=FILE       cache test results in FILE
  -  --help                  print this message
  -  --no-create             do not create output files
  -  --quiet, --silent       do not print \`checking...' messages
  -  --version               print the version of autoconf that created configure
  -Directory and file names:
  -  --prefix=PREFIX         install architecture-independent files in PREFIX
  -                          [$ac_default_prefix]
  -  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
  -                          [same as prefix]
  -  --bindir=DIR            user executables in DIR [EPREFIX/bin]
  -  --sbindir=DIR           system admin executables in DIR [EPREFIX/sbin]
  -  --libexecdir=DIR        program executables in DIR [EPREFIX/libexec]
  -  --datadir=DIR           read-only architecture-independent data in DIR
  -                          [PREFIX/share]
  -  --sysconfdir=DIR        read-only single-machine data in DIR [PREFIX/etc]
  -  --sharedstatedir=DIR    modifiable architecture-independent data in DIR
  -                          [PREFIX/com]
  -  --localstatedir=DIR     modifiable single-machine data in DIR [PREFIX/var]
  -  --libdir=DIR            object code libraries in DIR [EPREFIX/lib]
  -  --includedir=DIR        C header files in DIR [PREFIX/include]
  -  --oldincludedir=DIR     C header files for non-gcc in DIR [/usr/include]
  -  --infodir=DIR           info documentation in DIR [PREFIX/info]
  -  --mandir=DIR            man documentation in DIR [PREFIX/man]
  -  --srcdir=DIR            find the sources in DIR [configure dir or ..]
  -  --program-prefix=PREFIX prepend PREFIX to installed program names
  -  --program-suffix=SUFFIX append SUFFIX to installed program names
  -  --program-transform-name=PROGRAM
  -                          run sed PROGRAM on installed program names
  -EOF
  -    cat << EOF
  -Host type:
  -  --build=BUILD           configure for building on BUILD [BUILD=HOST]
  -  --host=HOST             configure for HOST [guessed]
  -  --target=TARGET         configure for TARGET [TARGET=HOST]
  -Features and packages:
  -  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
  -  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
  -  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
  -  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
  -  --x-includes=DIR        X include files are in DIR
  -  --x-libraries=DIR       X library files are in DIR
  -EOF
  -    if test -n "$ac_help"; then
  -      echo "--enable and --with options recognized:$ac_help"
  -    fi
  -    exit 0 ;;
  +  -help | --help | --hel | --he | -h)
  +    ac_init_help=long ;;
  +  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
  +    ac_init_help=recursive ;;
  +  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
  +    ac_init_help=short ;;
   
     -host | --host | --hos | --ho)
  -    ac_prev=host ;;
  +    ac_prev=host_alias ;;
     -host=* | --host=* | --hos=* | --ho=*)
  -    host="$ac_optarg" ;;
  +    host_alias=$ac_optarg ;;
   
     -includedir | --includedir | --includedi | --included | --include \
     | --includ | --inclu | --incl | --inc)
       ac_prev=includedir ;;
     -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
     | --includ=* | --inclu=* | --incl=* | --inc=*)
  -    includedir="$ac_optarg" ;;
  +    includedir=$ac_optarg ;;
   
     -infodir | --infodir | --infodi | --infod | --info | --inf)
       ac_prev=infodir ;;
     -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
  -    infodir="$ac_optarg" ;;
  +    infodir=$ac_optarg ;;
   
     -libdir | --libdir | --libdi | --libd)
       ac_prev=libdir ;;
     -libdir=* | --libdir=* | --libdi=* | --libd=*)
  -    libdir="$ac_optarg" ;;
  +    libdir=$ac_optarg ;;
   
     -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
     | --libexe | --libex | --libe)
       ac_prev=libexecdir ;;
     -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
     | --libexe=* | --libex=* | --libe=*)
  -    libexecdir="$ac_optarg" ;;
  +    libexecdir=$ac_optarg ;;
   
     -localstatedir | --localstatedir | --localstatedi | --localstated \
     | --localstate | --localstat | --localsta | --localst \
  @@ -270,12 +452,12 @@
     -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
     | --localstate=* | --localstat=* | --localsta=* | --localst=* \
     | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
  -    localstatedir="$ac_optarg" ;;
  +    localstatedir=$ac_optarg ;;
   
     -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
       ac_prev=mandir ;;
     -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
  -    mandir="$ac_optarg" ;;
  +    mandir=$ac_optarg ;;
   
     -nfp | --nfp | --nf)
       # Obsolete; use --without-fp.
  @@ -296,26 +478,26 @@
     -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
     | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
     | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
  -    oldincludedir="$ac_optarg" ;;
  +    oldincludedir=$ac_optarg ;;
   
     -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
       ac_prev=prefix ;;
     -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
  -    prefix="$ac_optarg" ;;
  +    prefix=$ac_optarg ;;
   
     -program-prefix | --program-prefix | --program-prefi | --program-pref \
     | --program-pre | --program-pr | --program-p)
       ac_prev=program_prefix ;;
     -program-prefix=* | --program-prefix=* | --program-prefi=* \
     | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
  -    program_prefix="$ac_optarg" ;;
  +    program_prefix=$ac_optarg ;;
   
     -program-suffix | --program-suffix | --program-suffi | --program-suff \
     | --program-suf | --program-su | --program-s)
       ac_prev=program_suffix ;;
     -program-suffix=* | --program-suffix=* | --program-suffi=* \
     | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
  -    program_suffix="$ac_optarg" ;;
  +    program_suffix=$ac_optarg ;;
   
     -program-transform-name | --program-transform-name \
     | --program-transform-nam | --program-transform-na \
  @@ -332,7 +514,7 @@
     | --program-transfo=* | --program-transf=* \
     | --program-trans=* | --program-tran=* \
     | --progr-tra=* | --program-tr=* | --program-t=*)
  -    program_transform_name="$ac_optarg" ;;
  +    program_transform_name=$ac_optarg ;;
   
     -q | -quiet | --quiet | --quie | --qui | --qu | --q \
     | -silent | --silent | --silen | --sile | --sil)
  @@ -342,7 +524,7 @@
       ac_prev=sbindir ;;
     -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
     | --sbi=* | --sb=*)
  -    sbindir="$ac_optarg" ;;
  +    sbindir=$ac_optarg ;;
   
     -sharedstatedir | --sharedstatedir | --sharedstatedi \
     | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
  @@ -353,58 +535,57 @@
     | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
     | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
     | --sha=* | --sh=*)
  -    sharedstatedir="$ac_optarg" ;;
  +    sharedstatedir=$ac_optarg ;;
   
     -site | --site | --sit)
       ac_prev=site ;;
     -site=* | --site=* | --sit=*)
  -    site="$ac_optarg" ;;
  +    site=$ac_optarg ;;
   
     -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
       ac_prev=srcdir ;;
     -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
  -    srcdir="$ac_optarg" ;;
  +    srcdir=$ac_optarg ;;
   
     -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
     | --syscon | --sysco | --sysc | --sys | --sy)
       ac_prev=sysconfdir ;;
     -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
     | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
  -    sysconfdir="$ac_optarg" ;;
  +    sysconfdir=$ac_optarg ;;
   
     -target | --target | --targe | --targ | --tar | --ta | --t)
  -    ac_prev=target ;;
  +    ac_prev=target_alias ;;
     -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
  -    target="$ac_optarg" ;;
  +    target_alias=$ac_optarg ;;
   
     -v | -verbose | --verbose | --verbos | --verbo | --verb)
       verbose=yes ;;
   
  -  -version | --version | --versio | --versi | --vers)
  -    echo "configure generated by autoconf version 2.13"
  -    exit 0 ;;
  +  -version | --version | --versio | --versi | --vers | -V)
  +    ac_init_version=: ;;
   
     -with-* | --with-*)
  -    ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
  +    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
       # Reject names that are not valid shell variable names.
  -    if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
  -      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
  -    fi
  +    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
  +      { echo "$as_me: error: invalid package name: $ac_package" >&2
  +   { (exit 1); exit 1; }; }
       ac_package=`echo $ac_package| sed 's/-/_/g'`
  -    case "$ac_option" in
  -      *=*) ;;
  +    case $ac_option in
  +      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
         *) ac_optarg=yes ;;
       esac
  -    eval "with_${ac_package}='$ac_optarg'" ;;
  +    eval "with_$ac_package='$ac_optarg'" ;;
   
     -without-* | --without-*)
  -    ac_package=`echo $ac_option|sed -e 's/-*without-//'`
  +    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
       # Reject names that are not valid shell variable names.
  -    if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
  -      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
  -    fi
  -    ac_package=`echo $ac_package| sed 's/-/_/g'`
  -    eval "with_${ac_package}=no" ;;
  +    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
  +      { echo "$as_me: error: invalid package name: $ac_package" >&2
  +   { (exit 1); exit 1; }; }
  +    ac_package=`echo $ac_package | sed 's/-/_/g'`
  +    eval "with_$ac_package=no" ;;
   
     --x)
       # Obsolete; use --with-x.
  @@ -415,98 +596,98 @@
       ac_prev=x_includes ;;
     -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
     | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
  -    x_includes="$ac_optarg" ;;
  +    x_includes=$ac_optarg ;;
   
     -x-libraries | --x-libraries | --x-librarie | --x-librari \
     | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
       ac_prev=x_libraries ;;
     -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
     | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
  -    x_libraries="$ac_optarg" ;;
  +    x_libraries=$ac_optarg ;;
   
  -  -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
  +  -*) { echo "$as_me: error: unrecognized option: $ac_option
  +Try \`$0 --help' for more information." >&2
  +   { (exit 1); exit 1; }; }
       ;;
   
  +  *=*)
  +    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
  +    # Reject names that are not valid shell variable names.
  +    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
  +      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
  +   { (exit 1); exit 1; }; }
  +    ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
  +    eval "$ac_envvar='$ac_optarg'"
  +    export $ac_envvar ;;
  +
     *)
  -    if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
  -      echo "configure: warning: $ac_option: invalid host type" 1>&2
  -    fi
  -    if test "x$nonopt" != xNONE; then
  -      { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
  -    fi
  -    nonopt="$ac_option"
  +    # FIXME: should be removed in autoconf 3.0.
  +    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
  +    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
  +      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
  +    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
       ;;
   
     esac
   done
   
   if test -n "$ac_prev"; then
  -  { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
  -fi
  -
  -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
  -
  -# File descriptor usage:
  -# 0 standard input
  -# 1 file creation
  -# 2 errors and warnings
  -# 3 some systems may open it to /dev/tty
  -# 4 used on the Kubota Titan
  -# 6 checking for... messages and results
  -# 5 compiler messages saved in config.log
  -if test "$silent" = yes; then
  -  exec 6>/dev/null
  -else
  -  exec 6>&1
  +  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
  +  { echo "$as_me: error: missing argument to $ac_option" >&2
  +   { (exit 1); exit 1; }; }
   fi
  -exec 5>./config.log
   
  -echo "\
  -This file contains any messages produced by compilers while
  -running configure, to aid debugging if configure makes a mistake.
  -" 1>&5
  +# Be sure to have absolute paths.
  +for ac_var in exec_prefix prefix
  +do
  +  eval ac_val=$`echo $ac_var`
  +  case $ac_val in
  +    [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
  +    *)  { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2
  +   { (exit 1); exit 1; }; };;
  +  esac
  +done
   
  -# Strip out --no-create and --no-recursion so they do not pile up.
  -# Also quote any args containing shell metacharacters.
  -ac_configure_args=
  -for ac_arg
  +# Be sure to have absolute paths.
  +for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
  +              localstatedir libdir includedir oldincludedir infodir mandir
   do
  -  case "$ac_arg" in
  -  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
  -  | --no-cr | --no-c) ;;
  -  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
  -  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
  -  *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
  -  ac_configure_args="$ac_configure_args '$ac_arg'" ;;
  -  *) ac_configure_args="$ac_configure_args $ac_arg" ;;
  +  eval ac_val=$`echo $ac_var`
  +  case $ac_val in
  +    [\\/$]* | ?:[\\/]* ) ;;
  +    *)  { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2
  +   { (exit 1); exit 1; }; };;
     esac
   done
   
  -# NLS nuisances.
  -# Only set these to C if already set.  These must not be set unconditionally
  -# because not all systems understand e.g. LANG=C (notably SCO).
  -# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
  -# Non-C LC_CTYPE values break the ctype check.
  -if test "${LANG+set}"   = set; then LANG=C;   export LANG;   fi
  -if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
  -if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
  -if test "${LC_CTYPE+set}"    = set; then LC_CTYPE=C;    export LC_CTYPE;    fi
  +# There might be people who depend on the old broken behavior: `$host'
  +# used to hold the argument of --host etc.
  +build=$build_alias
  +host=$host_alias
  +target=$target_alias
  +
  +# FIXME: should be removed in autoconf 3.0.
  +if test "x$host_alias" != x; then
  +  if test "x$build_alias" = x; then
  +    cross_compiling=maybe
  +    echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
  +    If a cross compiler is detected then cross compile mode will be used." >&2
  +  elif test "x$build_alias" != "x$host_alias"; then
  +    cross_compiling=yes
  +  fi
  +fi
   
  -# confdefs.h avoids OS command line length limits that DEFS can exceed.
  -rm -rf conftest* confdefs.h
  -# AIX cpp loses on an empty file, so make sure it contains at least a newline.
  -echo > confdefs.h
  +ac_tool_prefix=
  +test -n "$host_alias" && ac_tool_prefix=$host_alias-
   
  -# A filename unique to this package, relative to the directory that
  -# configure is in, which we can look for to find out if srcdir is correct.
  -ac_unique_file=README
  +test "$silent" = yes && exec 6>/dev/null
   
   # Find the source files, if location was not specified.
   if test -z "$srcdir"; then
     ac_srcdir_defaulted=yes
     # Try the directory containing this script, then its parent.
     ac_prog=$0
  -  ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
  +  ac_confdir=`echo "$ac_prog" | sed 's%[\\/][^\\/][^\\/]*$%%'`
     test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
     srcdir=$ac_confdir
     if test ! -r $srcdir/$ac_unique_file; then
  @@ -517,13 +698,325 @@
   fi
   if test ! -r $srcdir/$ac_unique_file; then
     if test "$ac_srcdir_defaulted" = yes; then
  -    { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
  +    { echo "$as_me: error: cannot find sources in $ac_confdir or .." >&2
  +   { (exit 1); exit 1; }; }
     else
  -    { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
  +    { echo "$as_me: error: cannot find sources in $srcdir" >&2
  +   { (exit 1); exit 1; }; }
     fi
  +fi
  +srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
  +ac_env_build_alias_set=${build_alias+set}
  +ac_env_build_alias_value=$build_alias
  +ac_cv_env_build_alias_set=${build_alias+set}
  +ac_cv_env_build_alias_value=$build_alias
  +ac_env_host_alias_set=${host_alias+set}
  +ac_env_host_alias_value=$host_alias
  +ac_cv_env_host_alias_set=${host_alias+set}
  +ac_cv_env_host_alias_value=$host_alias
  +ac_env_target_alias_set=${target_alias+set}
  +ac_env_target_alias_value=$target_alias
  +ac_cv_env_target_alias_set=${target_alias+set}
  +ac_cv_env_target_alias_value=$target_alias
  +ac_env_CC_set=${CC+set}
  +ac_env_CC_value=$CC
  +ac_cv_env_CC_set=${CC+set}
  +ac_cv_env_CC_value=$CC
  +ac_env_CFLAGS_set=${CFLAGS+set}
  +ac_env_CFLAGS_value=$CFLAGS
  +ac_cv_env_CFLAGS_set=${CFLAGS+set}
  +ac_cv_env_CFLAGS_value=$CFLAGS
  +ac_env_LDFLAGS_set=${LDFLAGS+set}
  +ac_env_LDFLAGS_value=$LDFLAGS
  +ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
  +ac_cv_env_LDFLAGS_value=$LDFLAGS
  +ac_env_CPPFLAGS_set=${CPPFLAGS+set}
  +ac_env_CPPFLAGS_value=$CPPFLAGS
  +ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
  +ac_cv_env_CPPFLAGS_value=$CPPFLAGS
  +ac_env_CXX_set=${CXX+set}
  +ac_env_CXX_value=$CXX
  +ac_cv_env_CXX_set=${CXX+set}
  +ac_cv_env_CXX_value=$CXX
  +ac_env_CXXFLAGS_set=${CXXFLAGS+set}
  +ac_env_CXXFLAGS_value=$CXXFLAGS
  +ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set}
  +ac_cv_env_CXXFLAGS_value=$CXXFLAGS
  +ac_env_CPP_set=${CPP+set}
  +ac_env_CPP_value=$CPP
  +ac_cv_env_CPP_set=${CPP+set}
  +ac_cv_env_CPP_value=$CPP
  +
  +#
  +# Report the --help message.
  +#
  +if test "$ac_init_help" = "long"; then
  +  # Omit some internal or obsolete options to make the list less imposing.
  +  # This message is too long to be a string in the A/UX 3.1 sh.
  +  cat <<EOF
  +\`configure' configures this package to adapt to many kinds of systems.
  +
  +Usage: $0 [OPTION]... [VAR=VALUE]...
  +
  +To assign environment variables (e.g., CC, CFLAGS...), specify them as
  +VAR=VALUE.  See below for descriptions of some of the useful variables.
  +
  +Defaults for the options are specified in brackets.
  +
  +Configuration:
  +  -h, --help              display this help and exit
  +      --help=short        display options specific to this package
  +      --help=recursive    display the short help of all the included packages
  +  -V, --version           display version information and exit
  +  -q, --quiet, --silent   do not print \`checking...' messages
  +      --cache-file=FILE   cache test results in FILE [disabled]
  +  -C, --config-cache      alias for \`--cache-file=config.cache'
  +  -n, --no-create         do not create output files
  +      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
  +
  +EOF
  +
  +  cat <<EOF
  +Installation directories:
  +  --prefix=PREFIX         install architecture-independent files in PREFIX
  +                          [$ac_default_prefix]
  +  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
  +                          [PREFIX]
  +
  +By default, \`make install' will install all the files in
  +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
  +an installation prefix other than \`$ac_default_prefix' using \`--prefix',
  +for instance \`--prefix=\$HOME'.
  +
  +For better control, use the options below.
  +
  +Fine tuning of the installation directories:
  +  --bindir=DIR           user executables [EPREFIX/bin]
  +  --sbindir=DIR          system admin executables [EPREFIX/sbin]
  +  --libexecdir=DIR       program executables [EPREFIX/libexec]
  +  --datadir=DIR          read-only architecture-independent data [PREFIX/share]
  +  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
  +  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
  +  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
  +  --libdir=DIR           object code libraries [EPREFIX/lib]
  +  --includedir=DIR       C header files [PREFIX/include]
  +  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
  +  --infodir=DIR          info documentation [PREFIX/info]
  +  --mandir=DIR           man documentation [PREFIX/man]
  +EOF
  +
  +  cat <<\EOF
  +
  +System types:
  +  --build=BUILD     configure for building on BUILD [guessed]
  +  --host=HOST       build programs to run on HOST [BUILD]
  +EOF
  +fi
  +
  +if test -n "$ac_init_help"; then
  +
  +  cat <<\EOF
  +
  +Optional Features:
  +  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
  +  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
  +  --enable-debug          build for debugging (default=no)
  +  --enable-shared=PKGS  build shared libraries default=yes
  +  --enable-static=PKGS  build static libraries default=yes
  +  --enable-fast-install=PKGS  optimize for fast installation default=yes
  +  --disable-libtool-lock  avoid locking (might break parallel builds)
  +
  +Optional Packages:
  +  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
  +  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
  +  --with-cxx              build C++ library (default=no)
  +  --with-gnu-ld           assume the C compiler uses GNU ld default=no
  +  --with-pic              try to use only PIC/non-PIC objects default=use both
  +
  +Some influential environment variables:
  +  CC          C compiler command
  +  CFLAGS      C compiler flags
  +  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
  +              nonstandard directory <lib dir>
  +  CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
  +              headers in a nonstandard directory <include dir>
  +  CXX         C++ compiler command
  +  CXXFLAGS    C++ compiler flags
  +  CPP         C preprocessor
  +
  +Use these variables to override the choices made by `configure' or to help
  +it to find libraries and programs with nonstandard names/locations.
  +
  +EOF
  +fi
  +
  +if test "$ac_init_help" = "recursive"; then
  +  # If there are subdirs, report their specific --help.
  +  ac_popdir=`pwd`
  +  for ac_subdir in : $ac_subdirs_all; do test "x$ac_subdir" = x: && continue
  +    cd $ac_subdir
  +    # A "../" for each directory in /$ac_subdir.
  +    ac_dots=`echo $ac_subdir |
  +             sed 's,^\./,,;s,[^/]$,&/,;s,[^/]*/,../,g'`
  +
  +    case $srcdir in
  +    .) # No --srcdir option.  We are building in place.
  +      ac_sub_srcdir=$srcdir ;;
  +    [\\/]* | ?:[\\/]* ) # Absolute path.
  +      ac_sub_srcdir=$srcdir/$ac_subdir ;;
  +    *) # Relative path.
  +      ac_sub_srcdir=$ac_dots$srcdir/$ac_subdir ;;
  +    esac
  +
  +    # Check for guested configure; otherwise get Cygnus style configure.
  +    if test -f $ac_sub_srcdir/configure.gnu; then
  +      echo
  +      $SHELL $ac_sub_srcdir/configure.gnu  --help=recursive
  +    elif test -f $ac_sub_srcdir/configure; then
  +      echo
  +      $SHELL $ac_sub_srcdir/configure  --help=recursive
  +    elif test -f $ac_sub_srcdir/configure.ac ||
  +           test -f $ac_sub_srcdir/configure.in; then
  +      echo
  +      $ac_configure --help
  +    else
  +      echo "$as_me: WARNING: no configuration information is in $ac_subdir" >&2
  +    fi
  +    cd $ac_popdir
  +  done
   fi
  -srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
   
  +test -n "$ac_init_help" && exit 0
  +if $ac_init_version; then
  +  cat <<\EOF
  +
  +Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
  +Free Software Foundation, Inc.
  +This configure script is free software; the Free Software Foundation
  +gives unlimited permission to copy, distribute and modify it.
  +EOF
  +  exit 0
  +fi
  +exec 5>config.log
  +cat >&5 <<EOF
  +This file contains any messages produced by compilers while
  +running configure, to aid debugging if configure makes a mistake.
  +
  +It was created by $as_me, which was
  +generated by GNU Autoconf 2.52.  Invocation command line was
  +
  +  $ $0 $@
  +
  +EOF
  +{
  +cat <<_ASUNAME
  +## ---------- ##
  +## Platform.  ##
  +## ---------- ##
  +
  +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
  +uname -m = `(uname -m) 2>/dev/null || echo unknown`
  +uname -r = `(uname -r) 2>/dev/null || echo unknown`
  +uname -s = `(uname -s) 2>/dev/null || echo unknown`
  +uname -v = `(uname -v) 2>/dev/null || echo unknown`
  +
  +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
  +/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
  +
  +/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
  +/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
  +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
  +hostinfo               = `(hostinfo) 2>/dev/null               || echo unknown`
  +/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
  +/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
  +/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
  +
  +PATH = $PATH
  +
  +_ASUNAME
  +} >&5
  +
  +cat >&5 <<EOF
  +## ------------ ##
  +## Core tests.  ##
  +## ------------ ##
  +
  +EOF
  +
  +# Keep a trace of the command line.
  +# Strip out --no-create and --no-recursion so they do not pile up.
  +# Also quote any args containing shell meta-characters.
  +ac_configure_args=
  +ac_sep=
  +for ac_arg
  +do
  +  case $ac_arg in
  +  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
  +  | --no-cr | --no-c) ;;
  +  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
  +  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
  +  *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
  +    ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"`
  +    ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
  +    ac_sep=" " ;;
  +  *) ac_configure_args="$ac_configure_args$ac_sep$ac_arg"
  +     ac_sep=" " ;;
  +  esac
  +  # Get rid of the leading space.
  +done
  +
  +# When interrupted or exit'd, cleanup temporary files, and complete
  +# config.log.  We remove comments because anyway the quotes in there
  +# would cause problems or look ugly.
  +trap 'exit_status=$?
  +  # Save into config.log some information that might help in debugging.
  +  echo >&5
  +  echo "## ----------------- ##" >&5
  +  echo "## Cache variables.  ##" >&5
  +  echo "## ----------------- ##" >&5
  +  echo >&5
  +  # The following way of writing the cache mishandles newlines in values,
  +{
  +  (set) 2>&1 |
  +    case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
  +    *ac_space=\ *)
  +      sed -n \
  +        "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
  +    	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
  +      ;;
  +    *)
  +      sed -n \
  +        "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
  +      ;;
  +    esac;
  +} >&5
  +  sed "/^$/d" confdefs.h >conftest.log
  +  if test -s conftest.log; then
  +    echo >&5
  +    echo "## ------------ ##" >&5
  +    echo "## confdefs.h.  ##" >&5
  +    echo "## ------------ ##" >&5
  +    echo >&5
  +    cat conftest.log >&5
  +  fi
  +  (echo; echo) >&5
  +  test "$ac_signal" != 0 &&
  +    echo "$as_me: caught signal $ac_signal" >&5
  +  echo "$as_me: exit $exit_status" >&5
  +  rm -rf conftest* confdefs* core core.* *.core conf$$* $ac_clean_files &&
  +    exit $exit_status
  +     ' 0
  +for ac_signal in 1 2 13 15; do
  +  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
  +done
  +ac_signal=0
  +
  +# confdefs.h avoids OS command line length limits that DEFS can exceed.
  +rm -rf conftest* confdefs.h
  +# AIX cpp loses on an empty file, so make sure it contains at least a newline.
  +echo >confdefs.h
  +
  +# Let the site file select an alternate cache file if it wants to.
   # Prefer explicitly selected file to automatically selected ones.
   if test -z "$CONFIG_SITE"; then
     if test "x$prefix" != xNONE; then
  @@ -534,50 +1027,112 @@
   fi
   for ac_site_file in $CONFIG_SITE; do
     if test -r "$ac_site_file"; then
  -    echo "loading site script $ac_site_file"
  +    { echo "$as_me:1030: loading site script $ac_site_file" >&5
  +echo "$as_me: loading site script $ac_site_file" >&6;}
  +    cat "$ac_site_file" >&5
       . "$ac_site_file"
     fi
   done
   
   if test -r "$cache_file"; then
  -  echo "loading cache $cache_file"
  -  . $cache_file
  +  # Some versions of bash will fail to source /dev/null (special
  +  # files actually), so we avoid doing that.
  +  if test -f "$cache_file"; then
  +    { echo "$as_me:1041: loading cache $cache_file" >&5
  +echo "$as_me: loading cache $cache_file" >&6;}
  +    case $cache_file in
  +      [\\/]* | ?:[\\/]* ) . $cache_file;;
  +      *)                      . ./$cache_file;;
  +    esac
  +  fi
   else
  -  echo "creating cache $cache_file"
  -  > $cache_file
  +  { echo "$as_me:1049: creating cache $cache_file" >&5
  +echo "$as_me: creating cache $cache_file" >&6;}
  +  >$cache_file
  +fi
  +
  +# Check that the precious variables saved in the cache have kept the same
  +# value.
  +ac_cache_corrupted=false
  +for ac_var in `(set) 2>&1 |
  +               sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
  +  eval ac_old_set=\$ac_cv_env_${ac_var}_set
  +  eval ac_new_set=\$ac_env_${ac_var}_set
  +  eval ac_old_val="\$ac_cv_env_${ac_var}_value"
  +  eval ac_new_val="\$ac_env_${ac_var}_value"
  +  case $ac_old_set,$ac_new_set in
  +    set,)
  +      { echo "$as_me:1065: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
  +echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
  +      ac_cache_corrupted=: ;;
  +    ,set)
  +      { echo "$as_me:1069: error: \`$ac_var' was not set in the previous run" >&5
  +echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
  +      ac_cache_corrupted=: ;;
  +    ,);;
  +    *)
  +      if test "x$ac_old_val" != "x$ac_new_val"; then
  +        { echo "$as_me:1075: error: \`$ac_var' has changed since the previous run:" >&5
  +echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
  +        { echo "$as_me:1077:   former value:  $ac_old_val" >&5
  +echo "$as_me:   former value:  $ac_old_val" >&2;}
  +        { echo "$as_me:1079:   current value: $ac_new_val" >&5
  +echo "$as_me:   current value: $ac_new_val" >&2;}
  +        ac_cache_corrupted=:
  +      fi;;
  +  esac
  +  # Pass precious variables to config.status.  It doesn't matter if
  +  # we pass some twice (in addition to the command line arguments).
  +  if test "$ac_new_set" = set; then
  +    case $ac_new_val in
  +    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
  +      ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"`
  +      ac_configure_args="$ac_configure_args '$ac_arg'"
  +      ;;
  +    *) ac_configure_args="$ac_configure_args $ac_var=$ac_new_val"
  +       ;;
  +    esac
  +  fi
  +done
  +if $ac_cache_corrupted; then
  +  { echo "$as_me:1098: error: changes in the environment can compromise the build" >&5
  +echo "$as_me: error: changes in the environment can compromise the build" >&2;}
  +  { { echo "$as_me:1100: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
  +echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
  +   { (exit 1); exit 1; }; }
   fi
   
   ac_ext=c
  -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
   ac_cpp='$CPP $CPPFLAGS'
  -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
  -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
  -cross_compiling=$ac_cv_prog_cc_cross
  -
  -ac_exeext=
  -ac_objext=o
  -if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
  -  # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
  -  if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
  -    ac_n= ac_c='
  -' ac_t='	'
  -  else
  -    ac_n=-n ac_c= ac_t=
  -  fi
  +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  +ac_compiler_gnu=$ac_cv_c_compiler_gnu
  +
  +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
  +  *c*,-n*) ECHO_N= ECHO_C='
  +' ECHO_T='	' ;;
  +  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
  +  *)      ECHO_N= ECHO_C='\c' ECHO_T= ;;
  +esac
  +echo "#! $SHELL" >conftest.sh
  +echo  "exit 0"   >>conftest.sh
  +chmod +x conftest.sh
  +if { (echo "$as_me:1120: PATH=\".;.\"; conftest.sh") >&5
  +  (PATH=".;."; conftest.sh) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1123: \$? = $ac_status" >&5
  +  (exit $ac_status); }; then
  +  ac_path_separator=';'
   else
  -  ac_n= ac_c='\c' ac_t=
  +  ac_path_separator=:
   fi
  -
  -
  -
  -
  -
  +PATH_SEPARATOR="$ac_path_separator"
  +rm -f conftest.sh
   
  +ac_config_headers="$ac_config_headers l2_config.h"
   
  -if test ".$host" != .NONE; then
  +if test ".$host" != .NONE && test ".$host" != .; then
       PLATFORM="$host"
  -elif test ".$nonopt" != .NONE; then
  -    PLATFORM="$nonopt"
   else
       PLATFORM=`${CONFIG_SHELL-/bin/sh} $srcdir/config.guess`
   fi
  @@ -589,18 +1144,19 @@
   
   echo ""
   
  -echo $ac_n "checking whether to build C++ library""... $ac_c" 1>&6
  -echo "configure:594: checking whether to build C++ library" >&5
  +echo "$as_me:1147: checking whether to build C++ library" >&5
  +echo $ECHO_N "checking whether to build C++ library... $ECHO_C" >&6
   LIBL2XX_LA=""
   L2_TESTXX=""
   L2XX_3=""
   TEST_CXX=""
   INSTALL_CXX=""
   UNINSTALL_CXX=""
  +
   # Check whether --with-cxx or --without-cxx was given.
   if test "${with_cxx+set}" = set; then
     withval="$with_cxx"
  -  
  +
       LIBL2XX_LA="libl2++.la"
       L2_TESTXX="l2_test++"
       L2XX_3="l2++.3"
  @@ -609,253 +1165,613 @@
       UNINSTALL_CXX=uninstall-cxx
   
   else
  -  
  -    with_cxx=no
  -
  -fi
  -echo "$ac_t""$with_cxx" 1>&6
  -
  -
  -
   
  -
  +    with_cxx=no
   
  +fi; echo "$as_me:1171: result: $with_cxx" >&5
  +echo "${ECHO_T}$with_cxx" >&6
   
  -echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
  -echo "configure:626: checking whether ${MAKE-make} sets \${MAKE}" >&5
  -set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
  -if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +echo "$as_me:1174: checking whether ${MAKE-make} sets \${MAKE}" >&5
  +echo $ECHO_N "checking whether ${MAKE-make} sets \${MAKE}... $ECHO_C" >&6
  +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,./+-,__p_,'`
  +if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  cat > conftestmake <<\EOF
  +  cat >conftest.make <<\EOF
   all:
   	@echo 'ac_maketemp="${MAKE}"'
   EOF
   # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
  -eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=`
  +eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
   if test -n "$ac_maketemp"; then
     eval ac_cv_prog_make_${ac_make}_set=yes
   else
     eval ac_cv_prog_make_${ac_make}_set=no
   fi
  -rm -f conftestmake
  +rm -f conftest.make
   fi
   if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
  -  echo "$ac_t""yes" 1>&6
  +  echo "$as_me:1194: result: yes" >&5
  +echo "${ECHO_T}yes" >&6
     SET_MAKE=
   else
  -  echo "$ac_t""no" 1>&6
  +  echo "$as_me:1198: result: no" >&5
  +echo "${ECHO_T}no" >&6
     SET_MAKE="MAKE=${MAKE-make}"
   fi
   
  -# Extract the first word of "gcc", so it can be a program name with args.
  -set dummy gcc; ac_word=$2
  -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
  -echo "configure:655: checking for $ac_word" >&5
  -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +ac_ext=c
  +ac_cpp='$CPP $CPPFLAGS'
  +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  +ac_compiler_gnu=$ac_cv_c_compiler_gnu
  +if test -n "$ac_tool_prefix"; then
  +  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
  +set dummy ${ac_tool_prefix}gcc; ac_word=$2
  +echo "$as_me:1211: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_CC+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
     if test -n "$CC"; then
     ac_cv_prog_CC="$CC" # Let the user override the test.
   else
  -  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
  -  ac_dummy="$PATH"
  -  for ac_dir in $ac_dummy; do
  -    test -z "$ac_dir" && ac_dir=.
  -    if test -f $ac_dir/$ac_word; then
  -      ac_cv_prog_CC="gcc"
  -      break
  -    fi
  -  done
  -  IFS="$ac_save_ifs"
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +ac_cv_prog_CC="${ac_tool_prefix}gcc"
  +echo "$as_me:1226: found $ac_dir/$ac_word" >&5
  +break
  +done
  +
   fi
   fi
  -CC="$ac_cv_prog_CC"
  +CC=$ac_cv_prog_CC
   if test -n "$CC"; then
  -  echo "$ac_t""$CC" 1>&6
  +  echo "$as_me:1234: result: $CC" >&5
  +echo "${ECHO_T}$CC" >&6
  +else
  +  echo "$as_me:1237: result: no" >&5
  +echo "${ECHO_T}no" >&6
  +fi
  +
  +fi
  +if test -z "$ac_cv_prog_CC"; then
  +  ac_ct_CC=$CC
  +  # Extract the first word of "gcc", so it can be a program name with args.
  +set dummy gcc; ac_word=$2
  +echo "$as_me:1246: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test -n "$ac_ct_CC"; then
  +  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
  +else
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +ac_cv_prog_ac_ct_CC="gcc"
  +echo "$as_me:1261: found $ac_dir/$ac_word" >&5
  +break
  +done
  +
  +fi
  +fi
  +ac_ct_CC=$ac_cv_prog_ac_ct_CC
  +if test -n "$ac_ct_CC"; then
  +  echo "$as_me:1269: result: $ac_ct_CC" >&5
  +echo "${ECHO_T}$ac_ct_CC" >&6
  +else
  +  echo "$as_me:1272: result: no" >&5
  +echo "${ECHO_T}no" >&6
  +fi
  +
  +  CC=$ac_ct_CC
   else
  -  echo "$ac_t""no" 1>&6
  +  CC="$ac_cv_prog_CC"
   fi
   
   if test -z "$CC"; then
  -  # Extract the first word of "cc", so it can be a program name with args.
  -set dummy cc; ac_word=$2
  -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
  -echo "configure:685: checking for $ac_word" >&5
  -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +  if test -n "$ac_tool_prefix"; then
  +  # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
  +set dummy ${ac_tool_prefix}cc; ac_word=$2
  +echo "$as_me:1285: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_CC+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
     if test -n "$CC"; then
     ac_cv_prog_CC="$CC" # Let the user override the test.
   else
  -  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
  -  ac_prog_rejected=no
  -  ac_dummy="$PATH"
  -  for ac_dir in $ac_dummy; do
  -    test -z "$ac_dir" && ac_dir=.
  -    if test -f $ac_dir/$ac_word; then
  -      if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
  -        ac_prog_rejected=yes
  -	continue
  -      fi
  -      ac_cv_prog_CC="cc"
  -      break
  -    fi
  -  done
  -  IFS="$ac_save_ifs"
  -if test $ac_prog_rejected = yes; then
  -  # We found a bogon in the path, so make sure we never use it.
  -  set dummy $ac_cv_prog_CC
  -  shift
  -  if test $# -gt 0; then
  -    # We chose a different compiler from the bogus one.
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +ac_cv_prog_CC="${ac_tool_prefix}cc"
  +echo "$as_me:1300: found $ac_dir/$ac_word" >&5
  +break
  +done
  +
  +fi
  +fi
  +CC=$ac_cv_prog_CC
  +if test -n "$CC"; then
  +  echo "$as_me:1308: result: $CC" >&5
  +echo "${ECHO_T}$CC" >&6
  +else
  +  echo "$as_me:1311: result: no" >&5
  +echo "${ECHO_T}no" >&6
  +fi
  +
  +fi
  +if test -z "$ac_cv_prog_CC"; then
  +  ac_ct_CC=$CC
  +  # Extract the first word of "cc", so it can be a program name with args.
  +set dummy cc; ac_word=$2
  +echo "$as_me:1320: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test -n "$ac_ct_CC"; then
  +  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
  +else
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +ac_cv_prog_ac_ct_CC="cc"
  +echo "$as_me:1335: found $ac_dir/$ac_word" >&5
  +break
  +done
  +
  +fi
  +fi
  +ac_ct_CC=$ac_cv_prog_ac_ct_CC
  +if test -n "$ac_ct_CC"; then
  +  echo "$as_me:1343: result: $ac_ct_CC" >&5
  +echo "${ECHO_T}$ac_ct_CC" >&6
  +else
  +  echo "$as_me:1346: result: no" >&5
  +echo "${ECHO_T}no" >&6
  +fi
  +
  +  CC=$ac_ct_CC
  +else
  +  CC="$ac_cv_prog_CC"
  +fi
  +
  +fi
  +if test -z "$CC"; then
  +  # Extract the first word of "cc", so it can be a program name with args.
  +set dummy cc; ac_word=$2
  +echo "$as_me:1359: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_CC+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test -n "$CC"; then
  +  ac_cv_prog_CC="$CC" # Let the user override the test.
  +else
  +  ac_prog_rejected=no
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
  +  ac_prog_rejected=yes
  +  continue
  +fi
  +ac_cv_prog_CC="cc"
  +echo "$as_me:1379: found $ac_dir/$ac_word" >&5
  +break
  +done
  +
  +if test $ac_prog_rejected = yes; then
  +  # We found a bogon in the path, so make sure we never use it.
  +  set dummy $ac_cv_prog_CC
  +  shift
  +  if test $# != 0; then
  +    # We chose a different compiler from the bogus one.
       # However, it has the same basename, so the bogon will be chosen
       # first if we set CC to just the basename; use the full file name.
       shift
  -    set dummy "$ac_dir/$ac_word" "$@"
  +    set dummy "$ac_dir/$ac_word" ${1+"$@"}
       shift
       ac_cv_prog_CC="$@"
     fi
   fi
   fi
   fi
  -CC="$ac_cv_prog_CC"
  +CC=$ac_cv_prog_CC
   if test -n "$CC"; then
  -  echo "$ac_t""$CC" 1>&6
  +  echo "$as_me:1401: result: $CC" >&5
  +echo "${ECHO_T}$CC" >&6
   else
  -  echo "$ac_t""no" 1>&6
  +  echo "$as_me:1404: result: no" >&5
  +echo "${ECHO_T}no" >&6
   fi
   
  -  if test -z "$CC"; then
  -    case "`uname -s`" in
  -    *win32* | *WIN32*)
  -      # Extract the first word of "cl", so it can be a program name with args.
  -set dummy cl; ac_word=$2
  -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
  -echo "configure:736: checking for $ac_word" >&5
  -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +fi
  +if test -z "$CC"; then
  +  if test -n "$ac_tool_prefix"; then
  +  for ac_prog in cl
  +  do
  +    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
  +set dummy $ac_tool_prefix$ac_prog; ac_word=$2
  +echo "$as_me:1415: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_CC+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
     if test -n "$CC"; then
     ac_cv_prog_CC="$CC" # Let the user override the test.
   else
  -  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
  -  ac_dummy="$PATH"
  -  for ac_dir in $ac_dummy; do
  -    test -z "$ac_dir" && ac_dir=.
  -    if test -f $ac_dir/$ac_word; then
  -      ac_cv_prog_CC="cl"
  -      break
  -    fi
  -  done
  -  IFS="$ac_save_ifs"
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
  +echo "$as_me:1430: found $ac_dir/$ac_word" >&5
  +break
  +done
  +
   fi
   fi
  -CC="$ac_cv_prog_CC"
  +CC=$ac_cv_prog_CC
   if test -n "$CC"; then
  -  echo "$ac_t""$CC" 1>&6
  +  echo "$as_me:1438: result: $CC" >&5
  +echo "${ECHO_T}$CC" >&6
   else
  -  echo "$ac_t""no" 1>&6
  +  echo "$as_me:1441: result: no" >&5
  +echo "${ECHO_T}no" >&6
   fi
  - ;;
  -    esac
  -  fi
  -  test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
  +
  +    test -n "$CC" && break
  +  done
  +fi
  +if test -z "$CC"; then
  +  ac_ct_CC=$CC
  +  for ac_prog in cl
  +do
  +  # Extract the first word of "$ac_prog", so it can be a program name with args.
  +set dummy $ac_prog; ac_word=$2
  +echo "$as_me:1454: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test -n "$ac_ct_CC"; then
  +  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
  +else
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +ac_cv_prog_ac_ct_CC="$ac_prog"
  +echo "$as_me:1469: found $ac_dir/$ac_word" >&5
  +break
  +done
  +
  +fi
  +fi
  +ac_ct_CC=$ac_cv_prog_ac_ct_CC
  +if test -n "$ac_ct_CC"; then
  +  echo "$as_me:1477: result: $ac_ct_CC" >&5
  +echo "${ECHO_T}$ac_ct_CC" >&6
  +else
  +  echo "$as_me:1480: result: no" >&5
  +echo "${ECHO_T}no" >&6
   fi
   
  -echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
  -echo "configure:768: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
  +  test -n "$ac_ct_CC" && break
  +done
   
  -ac_ext=c
  -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
  -ac_cpp='$CPP $CPPFLAGS'
  -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
  -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
  -cross_compiling=$ac_cv_prog_cc_cross
  +  CC=$ac_ct_CC
  +fi
  +
  +fi
   
  -cat > conftest.$ac_ext << EOF
  +test -z "$CC" && { { echo "$as_me:1492: error: no acceptable cc found in \$PATH" >&5
  +echo "$as_me: error: no acceptable cc found in \$PATH" >&2;}
  +   { (exit 1); exit 1; }; }
  +
  +# Provide some information about the compiler.
  +echo "$as_me:1497:" \
  +     "checking for C compiler version" >&5
  +ac_compiler=`set X $ac_compile; echo $2`
  +{ (eval echo "$as_me:1500: \"$ac_compiler --version </dev/null >&5\"") >&5
  +  (eval $ac_compiler --version </dev/null >&5) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1503: \$? = $ac_status" >&5
  +  (exit $ac_status); }
  +{ (eval echo "$as_me:1505: \"$ac_compiler -v </dev/null >&5\"") >&5
  +  (eval $ac_compiler -v </dev/null >&5) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1508: \$? = $ac_status" >&5
  +  (exit $ac_status); }
  +{ (eval echo "$as_me:1510: \"$ac_compiler -V </dev/null >&5\"") >&5
  +  (eval $ac_compiler -V </dev/null >&5) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1513: \$? = $ac_status" >&5
  +  (exit $ac_status); }
   
  -#line 779 "configure"
  +cat >conftest.$ac_ext <<_ACEOF
  +#line 1517 "configure"
   #include "confdefs.h"
   
  -main(){return(0);}
  -EOF
  -if { (eval echo configure:784: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  -  ac_cv_prog_cc_works=yes
  -  # If we can't run a trivial program, we are probably using a cross compiler.
  -  if (./conftest; exit) 2>/dev/null; then
  -    ac_cv_prog_cc_cross=no
  +int
  +main ()
  +{
  +
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +ac_clean_files_save=$ac_clean_files
  +ac_clean_files="$ac_clean_files a.out a.exe"
  +# Try to create an executable without -o first, disregard a.out.
  +# It will help us diagnose broken compilers, and finding out an intuition
  +# of exeext.
  +echo "$as_me:1533: checking for C compiler default output" >&5
  +echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6
  +ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
  +if { (eval echo "$as_me:1536: \"$ac_link_default\"") >&5
  +  (eval $ac_link_default) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1539: \$? = $ac_status" >&5
  +  (exit $ac_status); }; then
  +  # Find the output, starting from the most likely.  This scheme is
  +# not robust to junk in `.', hence go to wildcards (a.*) only as a last
  +# resort.
  +for ac_file in `ls a.exe conftest.exe 2>/dev/null;
  +                ls a.out conftest 2>/dev/null;
  +                ls a.* conftest.* 2>/dev/null`; do
  +  case $ac_file in
  +    *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb ) ;;
  +    a.out ) # We found the default executable, but exeext='' is most
  +            # certainly right.
  +            break;;
  +    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
  +          # FIXME: I believe we export ac_cv_exeext for Libtool --akim.
  +          export ac_cv_exeext
  +          break;;
  +    * ) break;;
  +  esac
  +done
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +{ { echo "$as_me:1562: error: C compiler cannot create executables" >&5
  +echo "$as_me: error: C compiler cannot create executables" >&2;}
  +   { (exit 77); exit 77; }; }
  +fi
  +
  +ac_exeext=$ac_cv_exeext
  +echo "$as_me:1568: result: $ac_file" >&5
  +echo "${ECHO_T}$ac_file" >&6
  +
  +# Check the compiler produces executables we can run.  If not, either
  +# the compiler is broken, or we cross compile.
  +echo "$as_me:1573: checking whether the C compiler works" >&5
  +echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
  +# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
  +# If not cross compiling, check that we can run a simple program.
  +if test "$cross_compiling" != yes; then
  +  if { ac_try='./$ac_file'
  +  { (eval echo "$as_me:1579: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1582: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +    cross_compiling=no
     else
  -    ac_cv_prog_cc_cross=yes
  +    if test "$cross_compiling" = maybe; then
  +	cross_compiling=yes
  +    else
  +	{ { echo "$as_me:1589: error: cannot run C compiled programs.
  +If you meant to cross compile, use \`--host'." >&5
  +echo "$as_me: error: cannot run C compiled programs.
  +If you meant to cross compile, use \`--host'." >&2;}
  +   { (exit 1); exit 1; }; }
  +    fi
     fi
  -else
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  ac_cv_prog_cc_works=no
   fi
  -rm -fr conftest*
  -ac_ext=c
  -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
  -ac_cpp='$CPP $CPPFLAGS'
  -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
  -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
  -cross_compiling=$ac_cv_prog_cc_cross
  +echo "$as_me:1597: result: yes" >&5
  +echo "${ECHO_T}yes" >&6
   
  -echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
  -if test $ac_cv_prog_cc_works = no; then
  -  { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
  -fi
  -echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
  -echo "configure:810: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
  -echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
  -cross_compiling=$ac_cv_prog_cc_cross
  +rm -f a.out a.exe conftest$ac_cv_exeext
  +ac_clean_files=$ac_clean_files_save
  +# Check the compiler produces executables we can run.  If not, either
  +# the compiler is broken, or we cross compile.
  +echo "$as_me:1604: checking whether we are cross compiling" >&5
  +echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
  +echo "$as_me:1606: result: $cross_compiling" >&5
  +echo "${ECHO_T}$cross_compiling" >&6
  +
  +echo "$as_me:1609: checking for executable suffix" >&5
  +echo $ECHO_N "checking for executable suffix... $ECHO_C" >&6
  +if { (eval echo "$as_me:1611: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1614: \$? = $ac_status" >&5
  +  (exit $ac_status); }; then
  +  # If both `conftest.exe' and `conftest' are `present' (well, observable)
  +# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
  +# work properly (i.e., refer to `conftest.exe'), while it won't with
  +# `rm'.
  +for ac_file in `(ls conftest.exe; ls conftest; ls conftest.*) 2>/dev/null`; do
  +  case $ac_file in
  +    *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb ) ;;
  +    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
  +          export ac_cv_exeext
  +          break;;
  +    * ) break;;
  +  esac
  +done
  +else
  +  { { echo "$as_me:1630: error: cannot compute EXEEXT: cannot compile and link" >&5
  +echo "$as_me: error: cannot compute EXEEXT: cannot compile and link" >&2;}
  +   { (exit 1); exit 1; }; }
  +fi
  +
  +rm -f conftest$ac_cv_exeext
  +echo "$as_me:1636: result: $ac_cv_exeext" >&5
  +echo "${ECHO_T}$ac_cv_exeext" >&6
  +
  +rm -f conftest.$ac_ext
  +EXEEXT=$ac_cv_exeext
  +ac_exeext=$EXEEXT
  +echo "$as_me:1642: checking for object suffix" >&5
  +echo $ECHO_N "checking for object suffix... $ECHO_C" >&6
  +if test "${ac_cv_objext+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 1648 "configure"
  +#include "confdefs.h"
   
  -echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
  -echo "configure:815: checking whether we are using GNU C" >&5
  -if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +int
  +main ()
  +{
  +
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.o conftest.obj
  +if { (eval echo "$as_me:1660: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1663: \$? = $ac_status" >&5
  +  (exit $ac_status); }; then
  +  for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
  +  case $ac_file in
  +    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb ) ;;
  +    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
  +       break;;
  +  esac
  +done
   else
  -  cat > conftest.c <<EOF
  -#ifdef __GNUC__
  -  yes;
  -#endif
  -EOF
  -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:824: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
  -  ac_cv_prog_gcc=yes
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +{ { echo "$as_me:1675: error: cannot compute OBJEXT: cannot compile" >&5
  +echo "$as_me: error: cannot compute OBJEXT: cannot compile" >&2;}
  +   { (exit 1); exit 1; }; }
  +fi
  +
  +rm -f conftest.$ac_cv_objext conftest.$ac_ext
  +fi
  +echo "$as_me:1682: result: $ac_cv_objext" >&5
  +echo "${ECHO_T}$ac_cv_objext" >&6
  +OBJEXT=$ac_cv_objext
  +ac_objext=$OBJEXT
  +echo "$as_me:1686: checking whether we are using the GNU C compiler" >&5
  +echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
  +if test "${ac_cv_c_compiler_gnu+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  ac_cv_prog_gcc=no
  -fi
  -fi
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 1692 "configure"
  +#include "confdefs.h"
   
  -echo "$ac_t""$ac_cv_prog_gcc" 1>&6
  +int
  +main ()
  +{
  +#ifndef __GNUC__
  +       choke me
  +#endif
   
  -if test $ac_cv_prog_gcc = yes; then
  -  GCC=yes
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:1707: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1710: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:1713: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1716: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_compiler_gnu=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_compiler_gnu=no
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +ac_cv_c_compiler_gnu=$ac_compiler_gnu
  +
  +fi
  +echo "$as_me:1728: result: $ac_cv_c_compiler_gnu" >&5
  +echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
  +GCC=`test $ac_compiler_gnu = yes && echo yes`
  +ac_test_CFLAGS=${CFLAGS+set}
  +ac_save_CFLAGS=$CFLAGS
  +CFLAGS="-g"
  +echo "$as_me:1734: checking whether $CC accepts -g" >&5
  +echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
  +if test "${ac_cv_prog_cc_g+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  GCC=
  -fi
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 1740 "configure"
  +#include "confdefs.h"
   
  -ac_test_CFLAGS="${CFLAGS+set}"
  -ac_save_CFLAGS="$CFLAGS"
  -CFLAGS=
  -echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
  -echo "configure:843: checking whether ${CC-cc} accepts -g" >&5
  -if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  -else
  -  echo 'void f(){}' > conftest.c
  -if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
  +int
  +main ()
  +{
  +
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:1752: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1755: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:1758: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1761: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
     ac_cv_prog_cc_g=yes
   else
  -  ac_cv_prog_cc_g=no
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_prog_cc_g=no
   fi
  -rm -f conftest*
  -
  +rm -f conftest.$ac_objext conftest.$ac_ext
   fi
  -
  -echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
  +echo "$as_me:1771: result: $ac_cv_prog_cc_g" >&5
  +echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
   if test "$ac_test_CFLAGS" = set; then
  -  CFLAGS="$ac_save_CFLAGS"
  +  CFLAGS=$ac_save_CFLAGS
   elif test $ac_cv_prog_cc_g = yes; then
     if test "$GCC" = yes; then
       CFLAGS="-g -O2"
  @@ -869,137 +1785,313 @@
       CFLAGS=
     fi
   fi
  +# Some people use a C++ compiler to compile C.  Since we use `exit',
  +# in C++ we need to declare it.  In case someone uses the same compiler
  +# for both compiling C and C++ we need to have the C++ compiler decide
  +# the declaration of exit, since it's the most demanding environment.
  +cat >conftest.$ac_ext <<_ACEOF
  +#ifndef __cplusplus
  +  choke me
  +#endif
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:1798: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1801: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:1804: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1807: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  for ac_declaration in \
  +   ''\
  +   '#include <stdlib.h>' \
  +   'extern "C" void std::exit (int) throw (); using std::exit;' \
  +   'extern "C" void std::exit (int); using std::exit;' \
  +   'extern "C" void exit (int) throw ();' \
  +   'extern "C" void exit (int);' \
  +   'void exit (int);'
  +do
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 1819 "configure"
  +#include "confdefs.h"
  +#include <stdlib.h>
  +$ac_declaration
  +int
  +main ()
  +{
  +exit (42);
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:1832: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1835: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:1838: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1841: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  :
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +continue
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 1851 "configure"
  +#include "confdefs.h"
  +$ac_declaration
  +int
  +main ()
  +{
  +exit (42);
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:1863: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1866: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:1869: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1872: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  break
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +done
  +rm -f conftest*
  +if test -n "$ac_declaration"; then
  +  echo '#ifdef __cplusplus' >>confdefs.h
  +  echo $ac_declaration      >>confdefs.h
  +  echo '#endif'             >>confdefs.h
  +fi
  +
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +ac_ext=c
  +ac_cpp='$CPP $CPPFLAGS'
  +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  +ac_compiler_gnu=$ac_cv_c_compiler_gnu
   
   if test ".$with_cxx" = .yes; then
  -    for ac_prog in $CCC c++ g++ gcc CC cxx cc++ cl
  -do
  -# Extract the first word of "$ac_prog", so it can be a program name with args.
  -set dummy $ac_prog; ac_word=$2
  -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
  -echo "configure:880: checking for $ac_word" >&5
  -if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +    ac_ext=cc
  +ac_cpp='$CXXCPP $CPPFLAGS'
  +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
  +if test -n "$ac_tool_prefix"; then
  +  for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
  +  do
  +    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
  +set dummy $ac_tool_prefix$ac_prog; ac_word=$2
  +echo "$as_me:1910: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_CXX+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
     if test -n "$CXX"; then
     ac_cv_prog_CXX="$CXX" # Let the user override the test.
   else
  -  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
  -  ac_dummy="$PATH"
  -  for ac_dir in $ac_dummy; do
  -    test -z "$ac_dir" && ac_dir=.
  -    if test -f $ac_dir/$ac_word; then
  -      ac_cv_prog_CXX="$ac_prog"
  -      break
  -    fi
  -  done
  -  IFS="$ac_save_ifs"
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
  +echo "$as_me:1925: found $ac_dir/$ac_word" >&5
  +break
  +done
  +
   fi
   fi
  -CXX="$ac_cv_prog_CXX"
  +CXX=$ac_cv_prog_CXX
   if test -n "$CXX"; then
  -  echo "$ac_t""$CXX" 1>&6
  +  echo "$as_me:1933: result: $CXX" >&5
  +echo "${ECHO_T}$CXX" >&6
   else
  -  echo "$ac_t""no" 1>&6
  +  echo "$as_me:1936: result: no" >&5
  +echo "${ECHO_T}no" >&6
   fi
   
  -test -n "$CXX" && break
  +    test -n "$CXX" && break
  +  done
  +fi
  +if test -z "$CXX"; then
  +  ac_ct_CXX=$CXX
  +  for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
  +do
  +  # Extract the first word of "$ac_prog", so it can be a program name with args.
  +set dummy $ac_prog; ac_word=$2
  +echo "$as_me:1949: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test -n "$ac_ct_CXX"; then
  +  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
  +else
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +ac_cv_prog_ac_ct_CXX="$ac_prog"
  +echo "$as_me:1964: found $ac_dir/$ac_word" >&5
  +break
   done
  -test -n "$CXX" || CXX="gcc"
  -
  -
  -echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6
  -echo "configure:912: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
  -
  -ac_ext=C
  -# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
  -ac_cpp='$CXXCPP $CPPFLAGS'
  -ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
  -ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
  -cross_compiling=$ac_cv_prog_cxx_cross
  -
  -cat > conftest.$ac_ext << EOF
  -
  -#line 923 "configure"
  -#include "confdefs.h"
   
  -int main(){return(0);}
  -EOF
  -if { (eval echo configure:928: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  -  ac_cv_prog_cxx_works=yes
  -  # If we can't run a trivial program, we are probably using a cross compiler.
  -  if (./conftest; exit) 2>/dev/null; then
  -    ac_cv_prog_cxx_cross=no
  -  else
  -    ac_cv_prog_cxx_cross=yes
  -  fi
  +fi
  +fi
  +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
  +if test -n "$ac_ct_CXX"; then
  +  echo "$as_me:1972: result: $ac_ct_CXX" >&5
  +echo "${ECHO_T}$ac_ct_CXX" >&6
   else
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  ac_cv_prog_cxx_works=no
  +  echo "$as_me:1975: result: no" >&5
  +echo "${ECHO_T}no" >&6
   fi
  -rm -fr conftest*
  -ac_ext=c
  -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
  -ac_cpp='$CPP $CPPFLAGS'
  -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
  -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
  -cross_compiling=$ac_cv_prog_cc_cross
  +
  +  test -n "$ac_ct_CXX" && break
  +done
  +test -n "$ac_ct_CXX" || ac_ct_CXX="g++"
   
  -echo "$ac_t""$ac_cv_prog_cxx_works" 1>&6
  -if test $ac_cv_prog_cxx_works = no; then
  -  { echo "configure: error: installation or configuration problem: C++ compiler cannot create executables." 1>&2; exit 1; }
  +  CXX=$ac_ct_CXX
   fi
  -echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
  -echo "configure:954: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
  -echo "$ac_t""$ac_cv_prog_cxx_cross" 1>&6
  -cross_compiling=$ac_cv_prog_cxx_cross
   
  -echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6
  -echo "configure:959: checking whether we are using GNU C++" >&5
  -if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  -else
  -  cat > conftest.C <<EOF
  -#ifdef __GNUC__
  -  yes;
  -#endif
  -EOF
  -if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:968: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
  -  ac_cv_prog_gxx=yes
  +# Provide some information about the compiler.
  +echo "$as_me:1987:" \
  +     "checking for C++ compiler version" >&5
  +ac_compiler=`set X $ac_compile; echo $2`
  +{ (eval echo "$as_me:1990: \"$ac_compiler --version </dev/null >&5\"") >&5
  +  (eval $ac_compiler --version </dev/null >&5) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1993: \$? = $ac_status" >&5
  +  (exit $ac_status); }
  +{ (eval echo "$as_me:1995: \"$ac_compiler -v </dev/null >&5\"") >&5
  +  (eval $ac_compiler -v </dev/null >&5) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1998: \$? = $ac_status" >&5
  +  (exit $ac_status); }
  +{ (eval echo "$as_me:2000: \"$ac_compiler -V </dev/null >&5\"") >&5
  +  (eval $ac_compiler -V </dev/null >&5) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2003: \$? = $ac_status" >&5
  +  (exit $ac_status); }
  +
  +echo "$as_me:2006: checking whether we are using the GNU C++ compiler" >&5
  +echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6
  +if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  ac_cv_prog_gxx=no
  -fi
  -fi
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 2012 "configure"
  +#include "confdefs.h"
   
  -echo "$ac_t""$ac_cv_prog_gxx" 1>&6
  +int
  +main ()
  +{
  +#ifndef __GNUC__
  +       choke me
  +#endif
   
  -if test $ac_cv_prog_gxx = yes; then
  -  GXX=yes
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:2027: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2030: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:2033: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2036: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_compiler_gnu=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_compiler_gnu=no
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
  +
  +fi
  +echo "$as_me:2048: result: $ac_cv_cxx_compiler_gnu" >&5
  +echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6
  +GXX=`test $ac_compiler_gnu = yes && echo yes`
  +ac_test_CXXFLAGS=${CXXFLAGS+set}
  +ac_save_CXXFLAGS=$CXXFLAGS
  +CXXFLAGS="-g"
  +echo "$as_me:2054: checking whether $CXX accepts -g" >&5
  +echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6
  +if test "${ac_cv_prog_cxx_g+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  GXX=
  -fi
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 2060 "configure"
  +#include "confdefs.h"
   
  -ac_test_CXXFLAGS="${CXXFLAGS+set}"
  -ac_save_CXXFLAGS="$CXXFLAGS"
  -CXXFLAGS=
  -echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6
  -echo "configure:987: checking whether ${CXX-g++} accepts -g" >&5
  -if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  -else
  -  echo 'void f(){}' > conftest.cc
  -if test -z "`${CXX-g++} -g -c conftest.cc 2>&1`"; then
  +int
  +main ()
  +{
  +
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:2072: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2075: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:2078: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2081: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
     ac_cv_prog_cxx_g=yes
   else
  -  ac_cv_prog_cxx_g=no
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_prog_cxx_g=no
   fi
  -rm -f conftest*
  -
  +rm -f conftest.$ac_objext conftest.$ac_ext
   fi
  -
  -echo "$ac_t""$ac_cv_prog_cxx_g" 1>&6
  +echo "$as_me:2091: result: $ac_cv_prog_cxx_g" >&5
  +echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6
   if test "$ac_test_CXXFLAGS" = set; then
  -  CXXFLAGS="$ac_save_CXXFLAGS"
  +  CXXFLAGS=$ac_save_CXXFLAGS
   elif test $ac_cv_prog_cxx_g = yes; then
     if test "$GXX" = yes; then
       CXXFLAGS="-g -O2"
  @@ -1013,92 +2105,296 @@
       CXXFLAGS=
     fi
   fi
  +for ac_declaration in \
  +   ''\
  +   '#include <stdlib.h>' \
  +   'extern "C" void std::exit (int) throw (); using std::exit;' \
  +   'extern "C" void std::exit (int); using std::exit;' \
  +   'extern "C" void exit (int) throw ();' \
  +   'extern "C" void exit (int);' \
  +   'void exit (int);'
  +do
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 2118 "configure"
  +#include "confdefs.h"
  +#include <stdlib.h>
  +$ac_declaration
  +int
  +main ()
  +{
  +exit (42);
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:2131: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2134: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:2137: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2140: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  :
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +continue
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 2150 "configure"
  +#include "confdefs.h"
  +$ac_declaration
  +int
  +main ()
  +{
  +exit (42);
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:2162: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2165: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:2168: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2171: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  break
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +done
  +rm -f conftest*
  +if test -n "$ac_declaration"; then
  +  echo '#ifdef __cplusplus' >>confdefs.h
  +  echo $ac_declaration      >>confdefs.h
  +  echo '#endif'             >>confdefs.h
  +fi
  +
  +ac_ext=c
  +ac_cpp='$CPP $CPPFLAGS'
  +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  +ac_compiler_gnu=$ac_cv_c_compiler_gnu
   
   fi
  -echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
  -echo "configure:1020: checking how to run the C preprocessor" >&5
  +ac_ext=c
  +ac_cpp='$CPP $CPPFLAGS'
  +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  +ac_compiler_gnu=$ac_cv_c_compiler_gnu
  +echo "$as_me:2199: checking how to run the C preprocessor" >&5
  +echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
   # On Suns, sometimes $CPP names a directory.
   if test -n "$CPP" && test -d "$CPP"; then
     CPP=
   fi
   if test -z "$CPP"; then
  -if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +  if test "${ac_cv_prog_CPP+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -    # This must be in double quotes, not single quotes, because CPP may get
  -  # substituted into the Makefile and "${CC-cc}" will confuse make.
  -  CPP="${CC-cc} -E"
  +      # Double quotes because CPP needs to be expanded
  +    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
  +    do
  +      ac_preproc_ok=false
  +for ac_c_preproc_warn_flag in '' yes
  +do
  +  # Use a header file that comes with gcc, so configuring glibc
  +  # with a fresh cross-compiler works.
     # On the NeXT, cc -E runs the code through the compiler's parser,
  -  # not just through cpp.
  -  cat > conftest.$ac_ext <<EOF
  -#line 1035 "configure"
  +  # not just through cpp. "Syntax error" is here to catch this case.
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 2220 "configure"
   #include "confdefs.h"
   #include <assert.h>
  -Syntax Error
  -EOF
  -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  -{ (eval echo configure:1041: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  -if test -z "$ac_err"; then
  +                     Syntax error
  +_ACEOF
  +if { (eval echo "$as_me:2225: \"$ac_cpp conftest.$ac_ext\"") >&5
  +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  +  ac_status=$?
  +  egrep -v '^ *\+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:2231: \$? = $ac_status" >&5
  +  (exit $ac_status); } >/dev/null; then
  +  if test -s conftest.err; then
  +    ac_cpp_err=$ac_c_preproc_warn_flag
  +  else
  +    ac_cpp_err=
  +  fi
  +else
  +  ac_cpp_err=yes
  +fi
  +if test -z "$ac_cpp_err"; then
     :
   else
  -  echo "$ac_err" >&5
  -  echo "configure: failed program was:" >&5
  +  echo "$as_me: failed program was:" >&5
     cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  CPP="${CC-cc} -E -traditional-cpp"
  -  cat > conftest.$ac_ext <<EOF
  -#line 1052 "configure"
  +  # Broken: fails on valid input.
  +continue
  +fi
  +rm -f conftest.err conftest.$ac_ext
  +
  +  # OK, works on sane cases.  Now check whether non-existent headers
  +  # can be detected and how.
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 2254 "configure"
   #include "confdefs.h"
  -#include <assert.h>
  -Syntax Error
  -EOF
  -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  -{ (eval echo configure:1058: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  -if test -z "$ac_err"; then
  -  :
  +#include <ac_nonexistent.h>
  +_ACEOF
  +if { (eval echo "$as_me:2258: \"$ac_cpp conftest.$ac_ext\"") >&5
  +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  +  ac_status=$?
  +  egrep -v '^ *\+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:2264: \$? = $ac_status" >&5
  +  (exit $ac_status); } >/dev/null; then
  +  if test -s conftest.err; then
  +    ac_cpp_err=$ac_c_preproc_warn_flag
  +  else
  +    ac_cpp_err=
  +  fi
  +else
  +  ac_cpp_err=yes
  +fi
  +if test -z "$ac_cpp_err"; then
  +  # Broken: success on invalid input.
  +continue
   else
  -  echo "$ac_err" >&5
  -  echo "configure: failed program was:" >&5
  +  echo "$as_me: failed program was:" >&5
     cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  CPP="${CC-cc} -nologo -E"
  -  cat > conftest.$ac_ext <<EOF
  -#line 1069 "configure"
  +  # Passes both tests.
  +ac_preproc_ok=:
  +break
  +fi
  +rm -f conftest.err conftest.$ac_ext
  +
  +done
  +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
  +rm -f conftest.err conftest.$ac_ext
  +if $ac_preproc_ok; then
  +  break
  +fi
  +
  +    done
  +    ac_cv_prog_CPP=$CPP
  +
  +fi
  +  CPP=$ac_cv_prog_CPP
  +else
  +  ac_cv_prog_CPP=$CPP
  +fi
  +echo "$as_me:2301: result: $CPP" >&5
  +echo "${ECHO_T}$CPP" >&6
  +ac_preproc_ok=false
  +for ac_c_preproc_warn_flag in '' yes
  +do
  +  # Use a header file that comes with gcc, so configuring glibc
  +  # with a fresh cross-compiler works.
  +  # On the NeXT, cc -E runs the code through the compiler's parser,
  +  # not just through cpp. "Syntax error" is here to catch this case.
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 2311 "configure"
   #include "confdefs.h"
   #include <assert.h>
  -Syntax Error
  -EOF
  -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  -{ (eval echo configure:1075: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  -if test -z "$ac_err"; then
  +                     Syntax error
  +_ACEOF
  +if { (eval echo "$as_me:2316: \"$ac_cpp conftest.$ac_ext\"") >&5
  +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  +  ac_status=$?
  +  egrep -v '^ *\+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:2322: \$? = $ac_status" >&5
  +  (exit $ac_status); } >/dev/null; then
  +  if test -s conftest.err; then
  +    ac_cpp_err=$ac_c_preproc_warn_flag
  +  else
  +    ac_cpp_err=
  +  fi
  +else
  +  ac_cpp_err=yes
  +fi
  +if test -z "$ac_cpp_err"; then
     :
   else
  -  echo "$ac_err" >&5
  -  echo "configure: failed program was:" >&5
  +  echo "$as_me: failed program was:" >&5
     cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  CPP=/lib/cpp
  +  # Broken: fails on valid input.
  +continue
   fi
  -rm -f conftest*
  -fi
  -rm -f conftest*
  +rm -f conftest.err conftest.$ac_ext
  +
  +  # OK, works on sane cases.  Now check whether non-existent headers
  +  # can be detected and how.
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 2345 "configure"
  +#include "confdefs.h"
  +#include <ac_nonexistent.h>
  +_ACEOF
  +if { (eval echo "$as_me:2349: \"$ac_cpp conftest.$ac_ext\"") >&5
  +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  +  ac_status=$?
  +  egrep -v '^ *\+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:2355: \$? = $ac_status" >&5
  +  (exit $ac_status); } >/dev/null; then
  +  if test -s conftest.err; then
  +    ac_cpp_err=$ac_c_preproc_warn_flag
  +  else
  +    ac_cpp_err=
  +  fi
  +else
  +  ac_cpp_err=yes
   fi
  -rm -f conftest*
  -  ac_cv_prog_CPP="$CPP"
  +if test -z "$ac_cpp_err"; then
  +  # Broken: success on invalid input.
  +continue
  +else
  +  echo "$as_me: failed program was:" >&5
  +  cat conftest.$ac_ext >&5
  +  # Passes both tests.
  +ac_preproc_ok=:
  +break
   fi
  -  CPP="$ac_cv_prog_CPP"
  +rm -f conftest.err conftest.$ac_ext
  +
  +done
  +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
  +rm -f conftest.err conftest.$ac_ext
  +if $ac_preproc_ok; then
  +  :
   else
  -  ac_cv_prog_CPP="$CPP"
  +  { { echo "$as_me:2383: error: C preprocessor \"$CPP\" fails sanity check" >&5
  +echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check" >&2;}
  +   { (exit 1); exit 1; }; }
   fi
  -echo "$ac_t""$CPP" 1>&6
  +
  +ac_ext=c
  +ac_cpp='$CPP $CPPFLAGS'
  +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  +ac_compiler_gnu=$ac_cv_c_compiler_gnu
   
   # Check whether --enable-debug or --disable-debug was given.
   if test "${enable_debug+set}" = set; then
     enableval="$enable_debug"
  -  if test ".$ac_cv_prog_gcc" = ".yes"; then
  +  if test ".$ac_cv_c_compiler_gnu" = ".yes"; then
       case "$CFLAGS" in
           *-O* ) ;;
              * ) CFLAGS="$CFLAGS -O2" ;;
  @@ -1109,32 +2405,45 @@
       esac
       case "$CFLAGS" in
           *-pipe* ) ;;
  -              * ) echo $ac_n "checking whether compiler option(s) -pipe work""... $ac_c" 1>&6
  -echo "configure:1114: checking whether compiler option(s) -pipe work" >&5
  -if eval "test \"`echo '$''{'ac_cv_compiler_option_pipe'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +              * ) echo "$as_me:2408: checking whether compiler option(s) -pipe work" >&5
  +echo $ECHO_N "checking whether compiler option(s) -pipe work... $ECHO_C" >&6
  +if test "${ac_cv_compiler_option_pipe+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  
  +
   SAVE_CFLAGS="$CFLAGS"
   CFLAGS="$CFLAGS -pipe"
  -cat > conftest.$ac_ext <<EOF
  -#line 1122 "configure"
  +cat >conftest.$ac_ext <<_ACEOF
  +#line 2417 "configure"
   #include "confdefs.h"
   
  -int main() {
  -
  -; return 0; }
  -EOF
  -if { (eval echo configure:1129: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
  -  rm -rf conftest*
  +int
  +main ()
  +{
  +
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:2429: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2432: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:2435: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2438: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
     ac_cv_compiler_option_pipe=yes
   else
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  ac_cv_compiler_option_pipe=no
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_compiler_option_pipe=no
   fi
  -rm -f conftest*
  +rm -f conftest.$ac_objext conftest.$ac_ext
   CFLAGS="$SAVE_CFLAGS"
   
   fi
  @@ -1143,35 +2452,49 @@
   else
       :
   fi
  -echo "$ac_t""$ac_cv_compiler_option_pipe" 1>&6
  +echo "$as_me:2455: result: $ac_cv_compiler_option_pipe" >&5
  +echo "${ECHO_T}$ac_cv_compiler_option_pipe" >&6
    ;;
       esac
  -    echo $ac_n "checking whether compiler option(s) -ggdb3 work""... $ac_c" 1>&6
  -echo "configure:1151: checking whether compiler option(s) -ggdb3 work" >&5
  -if eval "test \"`echo '$''{'ac_cv_compiler_option_ggdb3'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +    echo "$as_me:2459: checking whether compiler option(s) -ggdb3 work" >&5
  +echo $ECHO_N "checking whether compiler option(s) -ggdb3 work... $ECHO_C" >&6
  +if test "${ac_cv_compiler_option_ggdb3+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  
  +
   SAVE_CFLAGS="$CFLAGS"
   CFLAGS="$CFLAGS -ggdb3"
  -cat > conftest.$ac_ext <<EOF
  -#line 1159 "configure"
  +cat >conftest.$ac_ext <<_ACEOF
  +#line 2468 "configure"
   #include "confdefs.h"
  -
  -int main() {
   
  -; return 0; }
  -EOF
  -if { (eval echo configure:1166: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
  -  rm -rf conftest*
  +int
  +main ()
  +{
  +
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:2480: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2483: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:2486: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2489: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
     ac_cv_compiler_option_ggdb3=yes
   else
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  ac_cv_compiler_option_ggdb3=no
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_compiler_option_ggdb3=no
   fi
  -rm -f conftest*
  +rm -f conftest.$ac_objext conftest.$ac_ext
   CFLAGS="$SAVE_CFLAGS"
   
   fi
  @@ -1180,38 +2503,52 @@
   else
       :
   fi
  -echo "$ac_t""$ac_cv_compiler_option_ggdb3" 1>&6
  +echo "$as_me:2506: result: $ac_cv_compiler_option_ggdb3" >&5
  +echo "${ECHO_T}$ac_cv_compiler_option_ggdb3" >&6
   
       CFLAGS="$CFLAGS -pedantic"
       CFLAGS="$CFLAGS -Wall"
       WMORE="-Wshadow -Wpointer-arith -Wcast-align -Winline"
       WMORE="$WMORE -Wmissing-prototypes -Wmissing-declarations -Wnested-externs"
  -    echo $ac_n "checking whether compiler option(s) -W<xxx> work""... $ac_c" 1>&6
  -echo "configure:1191: checking whether compiler option(s) -W<xxx> work" >&5
  -if eval "test \"`echo '$''{'ac_cv_compiler_option_wmore'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +    echo "$as_me:2513: checking whether compiler option(s) -W<xxx> work" >&5
  +echo $ECHO_N "checking whether compiler option(s) -W<xxx> work... $ECHO_C" >&6
  +if test "${ac_cv_compiler_option_wmore+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  
  +
   SAVE_CFLAGS="$CFLAGS"
   CFLAGS="$CFLAGS $WMORE"
  -cat > conftest.$ac_ext <<EOF
  -#line 1199 "configure"
  +cat >conftest.$ac_ext <<_ACEOF
  +#line 2522 "configure"
   #include "confdefs.h"
   
  -int main() {
  -
  -; return 0; }
  -EOF
  -if { (eval echo configure:1206: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
  -  rm -rf conftest*
  +int
  +main ()
  +{
  +
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:2534: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2537: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:2540: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2543: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
     ac_cv_compiler_option_wmore=yes
   else
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  ac_cv_compiler_option_wmore=no
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_compiler_option_wmore=no
   fi
  -rm -f conftest*
  +rm -f conftest.$ac_objext conftest.$ac_ext
   CFLAGS="$SAVE_CFLAGS"
   
   fi
  @@ -1220,34 +2557,48 @@
   else
       :
   fi
  -echo "$ac_t""$ac_cv_compiler_option_wmore" 1>&6
  +echo "$as_me:2560: result: $ac_cv_compiler_option_wmore" >&5
  +echo "${ECHO_T}$ac_cv_compiler_option_wmore" >&6
   
  -    echo $ac_n "checking whether compiler option(s) -Wno-long-long work""... $ac_c" 1>&6
  -echo "configure:1227: checking whether compiler option(s) -Wno-long-long work" >&5
  -if eval "test \"`echo '$''{'ac_cv_compiler_option_wnolonglong'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +    echo "$as_me:2563: checking whether compiler option(s) -Wno-long-long work" >&5
  +echo $ECHO_N "checking whether compiler option(s) -Wno-long-long work... $ECHO_C" >&6
  +if test "${ac_cv_compiler_option_wnolonglong+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  
  +
   SAVE_CFLAGS="$CFLAGS"
   CFLAGS="$CFLAGS -Wno-long-long"
  -cat > conftest.$ac_ext <<EOF
  -#line 1235 "configure"
  +cat >conftest.$ac_ext <<_ACEOF
  +#line 2572 "configure"
   #include "confdefs.h"
  -
  -int main() {
   
  -; return 0; }
  -EOF
  -if { (eval echo configure:1242: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
  -  rm -rf conftest*
  +int
  +main ()
  +{
  +
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:2584: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2587: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:2590: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2593: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
     ac_cv_compiler_option_wnolonglong=yes
   else
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  ac_cv_compiler_option_wnolonglong=no
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_compiler_option_wnolonglong=no
   fi
  -rm -f conftest*
  +rm -f conftest.$ac_objext conftest.$ac_ext
   CFLAGS="$SAVE_CFLAGS"
   
   fi
  @@ -1256,7 +2607,8 @@
   else
       :
   fi
  -echo "$ac_t""$ac_cv_compiler_option_wnolonglong" 1>&6
  +echo "$as_me:2610: result: $ac_cv_compiler_option_wnolonglong" >&5
  +echo "${ECHO_T}$ac_cv_compiler_option_wnolonglong" >&6
   
   else
       case "$CFLAGS" in
  @@ -1265,42 +2617,51 @@
       esac
   fi
   msg="enabled"
  -cat >> confdefs.h <<\EOF
  -#define STR_DEBUG 1
  -EOF
   
  -
   else
  -  
  -if test ".$ac_cv_prog_gcc" = ".yes"; then
  +
  +if test ".$ac_cv_c_compiler_gnu" = ".yes"; then
   case "$CFLAGS" in
       *-pipe* ) ;;
  -          * ) echo $ac_n "checking whether compiler option(s) -pipe work""... $ac_c" 1>&6
  -echo "configure:1280: checking whether compiler option(s) -pipe work" >&5
  -if eval "test \"`echo '$''{'ac_cv_compiler_option_pipe'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +          * ) echo "$as_me:2626: checking whether compiler option(s) -pipe work" >&5
  +echo $ECHO_N "checking whether compiler option(s) -pipe work... $ECHO_C" >&6
  +if test "${ac_cv_compiler_option_pipe+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  
  +
   SAVE_CFLAGS="$CFLAGS"
   CFLAGS="$CFLAGS -pipe"
  -cat > conftest.$ac_ext <<EOF
  -#line 1288 "configure"
  +cat >conftest.$ac_ext <<_ACEOF
  +#line 2635 "configure"
   #include "confdefs.h"
  -
  -int main() {
   
  -; return 0; }
  -EOF
  -if { (eval echo configure:1295: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
  -  rm -rf conftest*
  +int
  +main ()
  +{
  +
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:2647: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2650: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:2653: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2656: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
     ac_cv_compiler_option_pipe=yes
   else
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  ac_cv_compiler_option_pipe=no
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_compiler_option_pipe=no
   fi
  -rm -f conftest*
  +rm -f conftest.$ac_objext conftest.$ac_ext
   CFLAGS="$SAVE_CFLAGS"
   
   fi
  @@ -1309,7 +2670,8 @@
   else
       :
   fi
  -echo "$ac_t""$ac_cv_compiler_option_pipe" 1>&6
  +echo "$as_me:2673: result: $ac_cv_compiler_option_pipe" >&5
  +echo "${ECHO_T}$ac_cv_compiler_option_pipe" >&6
    ;;
   esac
   fi
  @@ -1323,403 +2685,4950 @@
   esac
   msg=disabled
   
  -fi
  -echo $ac_n "checking for compilation debug mode""... $ac_c" 1>&6
  -echo "configure:1329: checking for compilation debug mode" >&5
  -echo "$ac_t""$msg" 1>&6
  +fi; echo "$as_me:2688: checking for compilation debug mode" >&5
  +echo $ECHO_N "checking for compilation debug mode... $ECHO_C" >&6
  +echo "$as_me:2690: result: $msg" >&5
  +echo "${ECHO_T}$msg" >&6
   if test ".$msg" = .enabled; then
       enable_shared=no
   fi
   
  +# Check whether --enable-shared or --disable-shared was given.
  +if test "${enable_shared+set}" = set; then
  +  enableval="$enable_shared"
  +  p=${PACKAGE-default}
  +case $enableval in
  +yes) enable_shared=yes ;;
  +no) enable_shared=no ;;
  +*)
  +  enable_shared=no
  +  # Look at the argument we got.  We use all the common list separators.
  +  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
  +  for pkg in $enableval; do
  +    if test "X$pkg" = "X$p"; then
  +      enable_shared=yes
  +    fi
  +  done
  +  IFS="$ac_save_ifs"
  +  ;;
  +esac
  +else
  +  enable_shared=yes
  +fi;
   # Check whether --enable-static or --disable-static was given.
   if test "${enable_static+set}" = set; then
     enableval="$enable_static"
  -  enable_static="$enableval"
  +  p=${PACKAGE-default}
  +case $enableval in
  +yes) enable_static=yes ;;
  +no) enable_static=no ;;
  +*)
  +  enable_static=no
  +  # Look at the argument we got.  We use all the common list separators.
  +  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
  +  for pkg in $enableval; do
  +    if test "X$pkg" = "X$p"; then
  +      enable_static=yes
  +    fi
  +  done
  +  IFS="$ac_save_ifs"
  +  ;;
  +esac
  +else
  +  enable_static=yes
  +fi;
  +# Check whether --enable-fast-install or --disable-fast-install was given.
  +if test "${enable_fast_install+set}" = set; then
  +  enableval="$enable_fast_install"
  +  p=${PACKAGE-default}
  +case $enableval in
  +yes) enable_fast_install=yes ;;
  +no) enable_fast_install=no ;;
  +*)
  +  enable_fast_install=no
  +  # Look at the argument we got.  We use all the common list separators.
  +  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
  +  for pkg in $enableval; do
  +    if test "X$pkg" = "X$p"; then
  +      enable_fast_install=yes
  +    fi
  +  done
  +  IFS="$ac_save_ifs"
  +  ;;
  +esac
  +else
  +  enable_fast_install=yes
  +fi;
  +ac_aux_dir=
  +for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
  +  if test -f $ac_dir/install-sh; then
  +    ac_aux_dir=$ac_dir
  +    ac_install_sh="$ac_aux_dir/install-sh -c"
  +    break
  +  elif test -f $ac_dir/install.sh; then
  +    ac_aux_dir=$ac_dir
  +    ac_install_sh="$ac_aux_dir/install.sh -c"
  +    break
  +  elif test -f $ac_dir/shtool; then
  +    ac_aux_dir=$ac_dir
  +    ac_install_sh="$ac_aux_dir/shtool install -c"
  +    break
  +  fi
  +done
  +if test -z "$ac_aux_dir"; then
  +  { { echo "$as_me:2779: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
  +echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
  +   { (exit 1); exit 1; }; }
  +fi
  +ac_config_guess="$SHELL $ac_aux_dir/config.guess"
  +ac_config_sub="$SHELL $ac_aux_dir/config.sub"
  +ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
  +
  +# Make sure we can run config.sub.
  +$ac_config_sub sun4 >/dev/null 2>&1 ||
  +  { { echo "$as_me:2789: error: cannot run $ac_config_sub" >&5
  +echo "$as_me: error: cannot run $ac_config_sub" >&2;}
  +   { (exit 1); exit 1; }; }
  +
  +echo "$as_me:2793: checking build system type" >&5
  +echo $ECHO_N "checking build system type... $ECHO_C" >&6
  +if test "${ac_cv_build+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  ac_cv_build_alias=$build_alias
  +test -z "$ac_cv_build_alias" &&
  +  ac_cv_build_alias=`$ac_config_guess`
  +test -z "$ac_cv_build_alias" &&
  +  { { echo "$as_me:2802: error: cannot guess build type; you must specify one" >&5
  +echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
  +   { (exit 1); exit 1; }; }
  +ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
  +  { { echo "$as_me:2806: error: $ac_config_sub $ac_cv_build_alias failed." >&5
  +echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed." >&2;}
  +   { (exit 1); exit 1; }; }
  +
  +fi
  +echo "$as_me:2811: result: $ac_cv_build" >&5
  +echo "${ECHO_T}$ac_cv_build" >&6
  +build=$ac_cv_build
  +build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
  +build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
  +build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
  +
  +echo "$as_me:2818: checking host system type" >&5
  +echo $ECHO_N "checking host system type... $ECHO_C" >&6
  +if test "${ac_cv_host+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  ac_cv_host_alias=$host_alias
  +test -z "$ac_cv_host_alias" &&
  +  ac_cv_host_alias=$ac_cv_build_alias
  +ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
  +  { { echo "$as_me:2827: error: $ac_config_sub $ac_cv_host_alias failed" >&5
  +echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
  +   { (exit 1); exit 1; }; }
  +
  +fi
  +echo "$as_me:2832: result: $ac_cv_host" >&5
  +echo "${ECHO_T}$ac_cv_host" >&6
  +host=$ac_cv_host
  +host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
  +host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
  +host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
  +
  +# Check whether --with-gnu-ld or --without-gnu-ld was given.
  +if test "${with_gnu_ld+set}" = set; then
  +  withval="$with_gnu_ld"
  +  test "$withval" = no || with_gnu_ld=yes
  +else
  +  with_gnu_ld=no
  +fi;
  +ac_prog=ld
  +if test "$GCC" = yes; then
  +  # Check if gcc -print-prog-name=ld gives a path.
  +  echo "$as_me:2849: checking for ld used by GCC" >&5
  +echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6
  +  case $host in
  +  *-*-mingw*)
  +    # gcc leaves a trailing carriage return which upsets mingw
  +    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
  +  *)
  +    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
  +  esac
  +  case $ac_prog in
  +    # Accept absolute paths.
  +    [\\/]* | [A-Za-z]:[\\/]*)
  +      re_direlt='/[^/][^/]*/\.\./'
  +      # Canonicalize the path of ld
  +      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
  +      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
  +	ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
  +      done
  +      test -z "$LD" && LD="$ac_prog"
  +      ;;
  +  "")
  +    # If it fails, then pretend we aren't using GCC.
  +    ac_prog=ld
  +    ;;
  +  *)
  +    # If it is relative, then search for the first ld in PATH.
  +    with_gnu_ld=unknown
  +    ;;
  +  esac
  +elif test "$with_gnu_ld" = yes; then
  +  echo "$as_me:2879: checking for GNU ld" >&5
  +echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6
  +else
  +  echo "$as_me:2882: checking for non-GNU ld" >&5
  +echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6
  +fi
  +if test "${lt_cv_path_LD+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test -z "$LD"; then
  +  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
  +  for ac_dir in $PATH; do
  +    test -z "$ac_dir" && ac_dir=.
  +    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
  +      lt_cv_path_LD="$ac_dir/$ac_prog"
  +      # Check to see if the program is GNU ld.  I'd rather use --version,
  +      # but apparently some GNU ld's only accept -v.
  +      # Break only if it was the GNU/non-GNU ld that we prefer.
  +      if "$lt_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
  +	test "$with_gnu_ld" != no && break
  +      else
  +	test "$with_gnu_ld" != yes && break
  +      fi
  +    fi
  +  done
  +  IFS="$ac_save_ifs"
   else
  -  if test ".$enable_static" = .; then
  -    enable_static=yes
  +  lt_cv_path_LD="$LD" # Let the user override the test with a path.
  +fi
   fi
   
  +LD="$lt_cv_path_LD"
  +if test -n "$LD"; then
  +  echo "$as_me:2912: result: $LD" >&5
  +echo "${ECHO_T}$LD" >&6
  +else
  +  echo "$as_me:2915: result: no" >&5
  +echo "${ECHO_T}no" >&6
   fi
  -# Check whether --enable-shared or --disable-shared was given.
  -if test "${enable_shared+set}" = set; then
  -  enableval="$enable_shared"
  -  enable_shared="$enableval"
  +test -z "$LD" && { { echo "$as_me:2918: error: no acceptable ld found in \$PATH" >&5
  +echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
  +   { (exit 1); exit 1; }; }
  +echo "$as_me:2921: checking if the linker ($LD) is GNU ld" >&5
  +echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6
  +if test "${lt_cv_prog_gnu_ld+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  if test ".$enable_shared" = .; then
  -    enable_shared=yes
  +  # I'd rather use --version here, but apparently some GNU ld's only accept -v.
  +if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
  +  lt_cv_prog_gnu_ld=yes
  +else
  +  lt_cv_prog_gnu_ld=no
  +fi
   fi
  +echo "$as_me:2933: result: $lt_cv_prog_gnu_ld" >&5
  +echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6
  +with_gnu_ld=$lt_cv_prog_gnu_ld
   
  +echo "$as_me:2937: checking for $LD option to reload object files" >&5
  +echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6
  +if test "${lt_cv_ld_reload_flag+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  lt_cv_ld_reload_flag='-r'
   fi
  -libtool_flags=''
  -test ".$silent"            = .yes && libtool_flags="$libtool_flags --silent"
  -test ".$enable_static"     = .no  && libtool_flags="$libtool_flags --disable-static"
  -test ".$enable_shared"     = .no  && libtool_flags="$libtool_flags --disable-shared"
  -test ".$ac_cv_prog_gcc"    = .yes && libtool_flags="$libtool_flags --with-gcc"
  -test ".$ac_cv_prog_gnu_ld" = .yes && libtool_flags="$libtool_flags --with-gnu-ld"
  -CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" LD="$LD" \
  -${CONFIG_SHELL-/bin/sh} $srcdir/ltconfig --no-reexec \
  -$libtool_flags --srcdir=$srcdir --no-verify $srcdir/ltmain.sh $PLATFORM ||\
  -{ echo "configure: error: libtool configuration failed" 1>&2; exit 1; }
  +echo "$as_me:2944: result: $lt_cv_ld_reload_flag" >&5
  +echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6
  +reload_flag=$lt_cv_ld_reload_flag
  +test -n "$reload_flag" && reload_flag=" $reload_flag"
   
  +echo "$as_me:2949: checking for BSD-compatible nm" >&5
  +echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6
  +if test "${lt_cv_path_NM+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test -n "$NM"; then
  +  # Let the user override the test.
  +  lt_cv_path_NM="$NM"
  +else
  +  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
  +  for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
  +    test -z "$ac_dir" && ac_dir=.
  +    tmp_nm=$ac_dir/${ac_tool_prefix}nm
  +    if test -f $tmp_nm || test -f $tmp_nm$ac_exeext ; then
  +      # Check to see if the nm accepts a BSD-compat flag.
  +      # Adding the `sed 1q' prevents false positives on HP-UX, which says:
  +      #   nm: unknown option "B" ignored
  +      # Tru64's nm complains that /dev/null is an invalid object file
  +      if ($tmp_nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep '(/dev/null|Invalid file or object type)' >/dev/null; then
  +	lt_cv_path_NM="$tmp_nm -B"
  +	break
  +      elif ($tmp_nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
  +	lt_cv_path_NM="$tmp_nm -p"
  +	break
  +      else
  +	lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
  +	continue # so that we can try to find one that supports BSD flags
  +      fi
  +    fi
  +  done
  +  IFS="$ac_save_ifs"
  +  test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
  +fi
  +fi
   
  -trap '' 1 2 15
  -cat > confcache <<\EOF
  -# This file is a shell script that caches the results of configure
  -# tests run on this system so they can be shared between configure
  -# scripts and configure runs.  It is not useful on other systems.
  -# If it contains results you don't want to keep, you may remove or edit it.
  -#
  -# By default, configure uses ./config.cache as the cache file,
  -# creating it if it does not exist already.  You can give configure
  -# the --cache-file=FILE option to use a different cache file; that is
  -# what configure does when it calls configure scripts in
  -# subdirectories, so they share the cache.
  -# Giving --cache-file=/dev/null disables caching, for debugging configure.
  -# config.status only pays attention to the cache file if you give it the
  -# --recheck option to rerun configure.
  -#
  -EOF
  -# The following way of writing the cache mishandles newlines in values,
  -# but we know of no workaround that is simple, portable, and efficient.
  -# So, don't put newlines in cache variables' values.
  -# Ultrix sh set writes to stderr and can't be redirected directly,
  -# and sets the high bit in the cache file unless we assign to the vars.
  -(set) 2>&1 |
  -  case `(ac_space=' '; set | grep ac_space) 2>&1` in
  -  *ac_space=\ *)
  -    # `set' does not quote correctly, so add quotes (double-quote substitution
  -    # turns \\\\ into \\, and sed turns \\ into \).
  -    sed -n \
  -      -e "s/'/'\\\\''/g" \
  -      -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
  +NM="$lt_cv_path_NM"
  +echo "$as_me:2985: result: $NM" >&5
  +echo "${ECHO_T}$NM" >&6
  +
  +echo "$as_me:2988: checking whether ln -s works" >&5
  +echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6
  +LN_S=$as_ln_s
  +if test "$LN_S" = "ln -s"; then
  +  echo "$as_me:2992: result: yes" >&5
  +echo "${ECHO_T}yes" >&6
  +else
  +  echo "$as_me:2995: result: no, using $LN_S" >&5
  +echo "${ECHO_T}no, using $LN_S" >&6
  +fi
  +
  +echo "$as_me:2999: checking how to recognise dependant libraries" >&5
  +echo $ECHO_N "checking how to recognise dependant libraries... $ECHO_C" >&6
  +if test "${lt_cv_deplibs_check_method+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  lt_cv_file_magic_cmd='$MAGIC_CMD'
  +lt_cv_file_magic_test_file=
  +lt_cv_deplibs_check_method='unknown'
  +# Need to set the preceding variable on all platforms that support
  +# interlibrary dependencies.
  +# 'none' -- dependencies not supported.
  +# `unknown' -- same as none, but documents that we really don't know.
  +# 'pass_all' -- all dependencies passed with no checks.
  +# 'test_compile' -- check by making test program.
  +# ['file_magic [regex]'] -- check by looking for files in library path
  +# which responds to the $file_magic_cmd with a given egrep regex.
  +# If you have `file' or equivalent on your system and you're not sure
  +# whether `pass_all' will *always* work, you probably want this one.
  +
  +case $host_os in
  +aix4* | aix5*)
  +  lt_cv_deplibs_check_method=pass_all
  +  ;;
  +
  +beos*)
  +  lt_cv_deplibs_check_method=pass_all
  +  ;;
  +
  +bsdi4*)
  +  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
  +  lt_cv_file_magic_cmd='/usr/bin/file -L'
  +  lt_cv_file_magic_test_file=/shlib/libc.so
  +  ;;
  +
  +cygwin* | mingw* | pw32*)
  +  lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
  +  lt_cv_file_magic_cmd='$OBJDUMP -f'
  +  ;;
  +
  +darwin* | rhapsody*)
  +  lt_cv_deplibs_check_method='file_magic Mach-O dynamically linked shared library'
  +  lt_cv_file_magic_cmd='/usr/bin/file -L'
  +  case "$host_os" in
  +  rhapsody* | darwin1.012)
  +    lt_cv_file_magic_test_file=`echo /System/Library/Frameworks/System.framework/Versions/*/System | head -1`
       ;;
  -  *)
  -    # `set' quotes correctly as required by POSIX, so do not add quotes.
  -    sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
  +  *) # Darwin 1.3 on
  +    lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib'
       ;;
  -  esac >> confcache
  -if cmp -s $cache_file confcache; then
  -  :
  -else
  -  if test -w $cache_file; then
  -    echo "updating cache $cache_file"
  -    cat confcache > $cache_file
  +  esac
  +  ;;
  +
  +freebsd*)
  +  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
  +    case $host_cpu in
  +    i*86 )
  +      # Not sure whether the presence of OpenBSD here was a mistake.
  +      # Let's accept both of them until this is cleared up.
  +      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[3-9]86 (compact )?demand paged shared library'
  +      lt_cv_file_magic_cmd=/usr/bin/file
  +      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
  +      ;;
  +    esac
     else
  -    echo "not updating unwritable cache $cache_file"
  +    lt_cv_deplibs_check_method=pass_all
     fi
  -fi
  -rm -f confcache
  +  ;;
   
  -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
  +gnu*)
  +  lt_cv_deplibs_check_method=pass_all
  +  ;;
  +
  +hpux10.20*|hpux11*)
  +  lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
  +  lt_cv_file_magic_cmd=/usr/bin/file
  +  lt_cv_file_magic_test_file=/usr/lib/libc.sl
  +  ;;
  +
  +irix5* | irix6*)
  +  case $host_os in
  +  irix5*)
  +    # this will be overridden with pass_all, but let us keep it just in case
  +    lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1"
  +    ;;
  +  *)
  +    case $LD in
  +    *-32|*"-32 ") libmagic=32-bit;;
  +    *-n32|*"-n32 ") libmagic=N32;;
  +    *-64|*"-64 ") libmagic=64-bit;;
  +    *) libmagic=never-match;;
  +    esac
  +    # this will be overridden with pass_all, but let us keep it just in case
  +    lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[1234] dynamic lib MIPS - version 1"
  +    ;;
  +  esac
  +  lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*`
  +  lt_cv_deplibs_check_method=pass_all
  +  ;;
  +
  +# This must be Linux ELF.
  +linux-gnu*)
  +  case $host_cpu in
  +  alpha* | i*86 | powerpc* | sparc* | ia64* )
  +    lt_cv_deplibs_check_method=pass_all ;;
  +  *)
  +    # glibc up to 2.1.1 does not perform some relocations on ARM
  +    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;;
  +  esac
  +  lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
  +  ;;
   
  -test "x$prefix" = xNONE && prefix=$ac_default_prefix
  -# Let make expand exec_prefix.
  -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
  +netbsd*)
  +  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
  +    lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
  +  else
  +    lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so$'
  +  fi
  +  ;;
   
  -# Any assignment to VPATH causes Sun make to only execute
  -# the first set of double-colon rules, so remove it if not needed.
  -# If there is a colon in the path, we need to keep it.
  -if test "x$srcdir" = x.; then
  -  ac_vpsub='/^[ 	]*VPATH[ 	]*=[^:]*$/d'
  +newos6*)
  +  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
  +  lt_cv_file_magic_cmd=/usr/bin/file
  +  lt_cv_file_magic_test_file=/usr/lib/libnls.so
  +  ;;
  +
  +osf3* | osf4* | osf5*)
  +  # this will be overridden with pass_all, but let us keep it just in case
  +  lt_cv_deplibs_check_method='file_magic COFF format alpha shared library'
  +  lt_cv_file_magic_test_file=/shlib/libc.so
  +  lt_cv_deplibs_check_method=pass_all
  +  ;;
  +
  +sco3.2v5*)
  +  lt_cv_deplibs_check_method=pass_all
  +  ;;
  +
  +solaris*)
  +  lt_cv_deplibs_check_method=pass_all
  +  lt_cv_file_magic_test_file=/lib/libc.so
  +  ;;
  +
  +sysv5uw[78]* | sysv4*uw2*)
  +  lt_cv_deplibs_check_method=pass_all
  +  ;;
  +
  +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
  +  case $host_vendor in
  +  motorola)
  +    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
  +    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
  +    ;;
  +  ncr)
  +    lt_cv_deplibs_check_method=pass_all
  +    ;;
  +  sequent)
  +    lt_cv_file_magic_cmd='/bin/file'
  +    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
  +    ;;
  +  sni)
  +    lt_cv_file_magic_cmd='/bin/file'
  +    lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
  +    lt_cv_file_magic_test_file=/lib/libc.so
  +    ;;
  +  esac
  +  ;;
  +esac
  +
   fi
  +echo "$as_me:3167: result: $lt_cv_deplibs_check_method" >&5
  +echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6
  +file_magic_cmd=$lt_cv_file_magic_cmd
  +deplibs_check_method=$lt_cv_deplibs_check_method
  +
  +# Check for command to grab the raw symbol name followed by C symbol from nm.
  +echo "$as_me:3173: checking command to parse $NM output" >&5
  +echo $ECHO_N "checking command to parse $NM output... $ECHO_C" >&6
  +if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +
  +# These are sane defaults that work on at least a few old systems.
  +# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
  +
  +# Character class describing NM global symbol codes.
  +symcode='[BCDEGRST]'
  +
  +# Regexp to match symbols that can be accessed directly from C.
  +sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
  +
  +# Transform the above into a raw symbol and a C symbol.
  +symxfrm='\1 \2\3 \3'
  +
  +# Transform an extracted symbol line into a proper C declaration
  +lt_cv_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'"
  +
  +# Define system-specific variables.
  +case $host_os in
  +aix*)
  +  symcode='[BCDT]'
  +  ;;
  +cygwin* | mingw* | pw32*)
  +  symcode='[ABCDGISTW]'
  +  ;;
  +hpux*) # Its linker distinguishes data from code symbols
  +  lt_cv_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
  +  ;;
  +irix*)
  +  symcode='[BCDEGRST]'
  +  ;;
  +solaris* | sysv5*)
  +  symcode='[BDT]'
  +  ;;
  +sysv4)
  +  symcode='[DFNSTU]'
  +  ;;
  +esac
   
  -trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
  +# Handle CRLF in mingw tool chain
  +opt_cr=
  +case $host_os in
  +mingw*)
  +  opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
  +  ;;
  +esac
   
  -DEFS=-DHAVE_CONFIG_H
  +# If we're using GNU nm, then use its standard symbol codes.
  +if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then
  +  symcode='[ABCDGISTW]'
  +fi
   
  -# Without the "./", some shells look in PATH for config.status.
  -: ${CONFIG_STATUS=./config.status}
  +# Try without a prefix undercore, then with it.
  +for ac_symprfx in "" "_"; do
   
  -echo creating $CONFIG_STATUS
  -rm -f $CONFIG_STATUS
  -cat > $CONFIG_STATUS <<EOF
  -#! /bin/sh
  -# Generated automatically by configure.
  -# Run this file to recreate the current configuration.
  -# This directory was configured as follows,
  -# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
  -#
  -# $0 $ac_configure_args
  -#
  -# Compiler output produced by configure, useful for debugging
  -# configure, is in ./config.log if it exists.
  +  # Write the raw and C identifiers.
  +lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ 	]\($symcode$symcode*\)[ 	][ 	]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'"
   
  -ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
  -for ac_option
  -do
  -  case "\$ac_option" in
  -  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
  -    echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
  -    exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
  -  -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
  -    echo "$CONFIG_STATUS generated by autoconf version 2.13"
  -    exit 0 ;;
  -  -help | --help | --hel | --he | --h)
  -    echo "\$ac_cs_usage"; exit 0 ;;
  -  *) echo "\$ac_cs_usage"; exit 1 ;;
  -  esac
  -done
  +  # Check to see that the pipe works correctly.
  +  pipe_works=no
  +  rm -f conftest*
  +  cat > conftest.$ac_ext <<EOF
  +#ifdef __cplusplus
  +extern "C" {
  +#endif
  +char nm_test_var;
  +void nm_test_func(){}
  +#ifdef __cplusplus
  +}
  +#endif
  +int main(){nm_test_var='a';nm_test_func();return(0);}
  +EOF
  +
  +  if { (eval echo "$as_me:3250: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:3253: \$? = $ac_status" >&5
  +  (exit $ac_status); }; then
  +    # Now try to grab the symbols.
  +    nlist=conftest.nm
  +    if { (eval echo "$as_me:3257: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5
  +  (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
  +  ac_status=$?
  +  echo "$as_me:3260: \$? = $ac_status" >&5
  +  (exit $ac_status); } && test -s "$nlist"; then
  +      # Try sorting and uniquifying the output.
  +      if sort "$nlist" | uniq > "$nlist"T; then
  +	mv -f "$nlist"T "$nlist"
  +      else
  +	rm -f "$nlist"T
  +      fi
   
  -ac_given_srcdir=$srcdir
  +      # Make sure that we snagged all the symbols we need.
  +      if egrep ' nm_test_var$' "$nlist" >/dev/null; then
  +	if egrep ' nm_test_func$' "$nlist" >/dev/null; then
  +	  cat <<EOF > conftest.$ac_ext
  +#ifdef __cplusplus
  +extern "C" {
  +#endif
   
  -trap 'rm -fr `echo "Makefile l2-config  l2_config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
   EOF
  -cat >> $CONFIG_STATUS <<EOF
  +	  # Now generate the symbol file.
  +	  eval "$lt_cv_global_symbol_to_cdecl"' < "$nlist" >> conftest.$ac_ext'
   
  -# Protect against being on the right side of a sed subst in config.status.
  -sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
  - s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
  -$ac_vpsub
  -$extrasub
  -s%@SHELL@%$SHELL%g
  -s%@CFLAGS@%$CFLAGS%g
  -s%@CPPFLAGS@%$CPPFLAGS%g
  -s%@CXXFLAGS@%$CXXFLAGS%g
  -s%@FFLAGS@%$FFLAGS%g
  -s%@DEFS@%$DEFS%g
  -s%@LDFLAGS@%$LDFLAGS%g
  -s%@LIBS@%$LIBS%g
  -s%@exec_prefix@%$exec_prefix%g
  -s%@prefix@%$prefix%g
  -s%@program_transform_name@%$program_transform_name%g
  -s%@bindir@%$bindir%g
  -s%@sbindir@%$sbindir%g
  -s%@libexecdir@%$libexecdir%g
  -s%@datadir@%$datadir%g
  -s%@sysconfdir@%$sysconfdir%g
  -s%@sharedstatedir@%$sharedstatedir%g
  -s%@localstatedir@%$localstatedir%g
  -s%@libdir@%$libdir%g
  -s%@includedir@%$includedir%g
  -s%@oldincludedir@%$oldincludedir%g
  -s%@infodir@%$infodir%g
  -s%@mandir@%$mandir%g
  -s%@L2_VERSION_STR@%$L2_VERSION_STR%g
  -s%@L2_VERSION_HEX@%$L2_VERSION_HEX%g
  -s%@PLATFORM@%$PLATFORM%g
  -s%@LIBL2XX_LA@%$LIBL2XX_LA%g
  -s%@L2_TESTXX@%$L2_TESTXX%g
  -s%@L2XX_3@%$L2XX_3%g
  -s%@TEST_CXX@%$TEST_CXX%g
  -s%@INSTALL_CXX@%$INSTALL_CXX%g
  -s%@UNINSTALL_CXX@%$UNINSTALL_CXX%g
  -s%@SET_MAKE@%$SET_MAKE%g
  -s%@CC@%$CC%g
  -s%@CXX@%$CXX%g
  -s%@CPP@%$CPP%g
  +	  cat <<EOF >> conftest.$ac_ext
  +#if defined (__STDC__) && __STDC__
  +# define lt_ptr_t void *
  +#else
  +# define lt_ptr_t char *
  +# define const
  +#endif
   
  -CEOF
  +/* The mapping between symbol names and symbols. */
  +const struct {
  +  const char *name;
  +  lt_ptr_t address;
  +}
  +lt_preloaded_symbols[] =
  +{
   EOF
  -
  -cat >> $CONFIG_STATUS <<\EOF
  +	  sed "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" >> conftest.$ac_ext
  +	  cat <<\EOF >> conftest.$ac_ext
  +  {0, (lt_ptr_t) 0}
  +};
   
  -# Split the substitutions into bite-sized pieces for seds with
  -# small command number limits, like on Digital OSF/1 and HP-UX.
  -ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
  -ac_file=1 # Number of current file.
  -ac_beg=1 # First line for current file.
  -ac_end=$ac_max_sed_cmds # Line after last line for current file.
  -ac_more_lines=:
  -ac_sed_cmds=""
  -while $ac_more_lines; do
  -  if test $ac_beg -gt 1; then
  -    sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
  +#ifdef __cplusplus
  +}
  +#endif
  +EOF
  +	  # Now try linking the two files.
  +	  mv conftest.$ac_objext conftstm.$ac_objext
  +	  save_LIBS="$LIBS"
  +	  save_CFLAGS="$CFLAGS"
  +	  LIBS="conftstm.$ac_objext"
  +	  CFLAGS="$CFLAGS$no_builtin_flag"
  +	  if { (eval echo "$as_me:3312: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:3315: \$? = $ac_status" >&5
  +  (exit $ac_status); } && test -s conftest; then
  +	    pipe_works=yes
  +	  fi
  +	  LIBS="$save_LIBS"
  +	  CFLAGS="$save_CFLAGS"
  +	else
  +	  echo "cannot find nm_test_func in $nlist" >&5
  +	fi
  +      else
  +	echo "cannot find nm_test_var in $nlist" >&5
  +      fi
  +    else
  +      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
  +    fi
     else
  -    sed "${ac_end}q" conftest.subs > conftest.s$ac_file
  +    echo "$progname: failed program was:" >&5
  +    cat conftest.$ac_ext >&5
     fi
  -  if test ! -s conftest.s$ac_file; then
  -    ac_more_lines=false
  -    rm -f conftest.s$ac_file
  +  rm -f conftest* conftst*
  +
  +  # Do not use the global_symbol_pipe unless it works.
  +  if test "$pipe_works" = yes; then
  +    break
     else
  -    if test -z "$ac_sed_cmds"; then
  -      ac_sed_cmds="sed -f conftest.s$ac_file"
  -    else
  -      ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
  -    fi
  -    ac_file=`expr $ac_file + 1`
  -    ac_beg=$ac_end
  -    ac_end=`expr $ac_end + $ac_max_sed_cmds`
  +    lt_cv_sys_global_symbol_pipe=
     fi
   done
  -if test -z "$ac_sed_cmds"; then
  -  ac_sed_cmds=cat
  +
  +fi
  +
  +global_symbol_pipe="$lt_cv_sys_global_symbol_pipe"
  +if test -z "$lt_cv_sys_global_symbol_pipe"; then
  +  global_symbol_to_cdecl=
  +else
  +  global_symbol_to_cdecl="$lt_cv_global_symbol_to_cdecl"
  +fi
  +if test -z "$global_symbol_pipe$global_symbol_to_cdecl"; then
  +  echo "$as_me:3353: result: failed" >&5
  +echo "${ECHO_T}failed" >&6
  +else
  +  echo "$as_me:3356: result: ok" >&5
  +echo "${ECHO_T}ok" >&6
  +fi
  +
  +for ac_header in dlfcn.h
  +do
  +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
  +echo "$as_me:3363: checking for $ac_header" >&5
  +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
  +if eval "test \"\${$as_ac_Header+set}\" = set"; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 3369 "configure"
  +#include "confdefs.h"
  +#include <$ac_header>
  +_ACEOF
  +if { (eval echo "$as_me:3373: \"$ac_cpp conftest.$ac_ext\"") >&5
  +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  +  ac_status=$?
  +  egrep -v '^ *\+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:3379: \$? = $ac_status" >&5
  +  (exit $ac_status); } >/dev/null; then
  +  if test -s conftest.err; then
  +    ac_cpp_err=$ac_c_preproc_warn_flag
  +  else
  +    ac_cpp_err=
  +  fi
  +else
  +  ac_cpp_err=yes
  +fi
  +if test -z "$ac_cpp_err"; then
  +  eval "$as_ac_Header=yes"
  +else
  +  echo "$as_me: failed program was:" >&5
  +  cat conftest.$ac_ext >&5
  +  eval "$as_ac_Header=no"
  +fi
  +rm -f conftest.err conftest.$ac_ext
   fi
  +echo "$as_me:3398: result: `eval echo '${'$as_ac_Header'}'`" >&5
  +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
  +if test `eval echo '${'$as_ac_Header'}'` = yes; then
  +  cat >>confdefs.h <<EOF
  +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
   EOF
   
  -cat >> $CONFIG_STATUS <<EOF
  +fi
  +done
  +
  +# Only perform the check for file, if the check method requires it
  +case $deplibs_check_method in
  +file_magic*)
  +  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
  +    echo "$as_me:3412: checking for ${ac_tool_prefix}file" >&5
  +echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6
  +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  case $MAGIC_CMD in
  +  /*)
  +  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
  +  ;;
  +  ?:/*)
  +  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path.
  +  ;;
  +  *)
  +  ac_save_MAGIC_CMD="$MAGIC_CMD"
  +  IFS="${IFS=   }"; ac_save_ifs="$IFS"; IFS=":"
  +  ac_dummy="/usr/bin:$PATH"
  +  for ac_dir in $ac_dummy; do
  +    test -z "$ac_dir" && ac_dir=.
  +    if test -f $ac_dir/${ac_tool_prefix}file; then
  +      lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
  +      if test -n "$file_magic_test_file"; then
  +	case $deplibs_check_method in
  +	"file_magic "*)
  +	  file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
  +	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
  +	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
  +	    egrep "$file_magic_regex" > /dev/null; then
  +	    :
  +	  else
  +	    cat <<EOF 1>&2
  +
  +*** Warning: the command libtool uses to detect shared libraries,
  +*** $file_magic_cmd, produces output that libtool cannot recognize.
  +*** The result is that libtool may fail to recognize shared libraries
  +*** as such.  This will affect the creation of libtool libraries that
  +*** depend on shared libraries, but programs linked with such libtool
  +*** libraries will work regardless of this problem.  Nevertheless, you
  +*** may want to report the problem to your system manager and/or to
  +*** bug-libtool@gnu.org
   
  -CONFIG_FILES=\${CONFIG_FILES-"Makefile l2-config "}
   EOF
  -cat >> $CONFIG_STATUS <<\EOF
  -for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
  -  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
  -  case "$ac_file" in
  -  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
  -       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
  -  *) ac_file_in="${ac_file}.in" ;;
  -  esac
  +	  fi ;;
  +	esac
  +      fi
  +      break
  +    fi
  +  done
  +  IFS="$ac_save_ifs"
  +  MAGIC_CMD="$ac_save_MAGIC_CMD"
  +  ;;
  +esac
  +fi
   
  -  # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
  +MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
  +if test -n "$MAGIC_CMD"; then
  +  echo "$as_me:3467: result: $MAGIC_CMD" >&5
  +echo "${ECHO_T}$MAGIC_CMD" >&6
  +else
  +  echo "$as_me:3470: result: no" >&5
  +echo "${ECHO_T}no" >&6
  +fi
  +
  +if test -z "$lt_cv_path_MAGIC_CMD"; then
  +  if test -n "$ac_tool_prefix"; then
  +    echo "$as_me:3476: checking for file" >&5
  +echo $ECHO_N "checking for file... $ECHO_C" >&6
  +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  case $MAGIC_CMD in
  +  /*)
  +  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
  +  ;;
  +  ?:/*)
  +  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path.
  +  ;;
  +  *)
  +  ac_save_MAGIC_CMD="$MAGIC_CMD"
  +  IFS="${IFS=   }"; ac_save_ifs="$IFS"; IFS=":"
  +  ac_dummy="/usr/bin:$PATH"
  +  for ac_dir in $ac_dummy; do
  +    test -z "$ac_dir" && ac_dir=.
  +    if test -f $ac_dir/file; then
  +      lt_cv_path_MAGIC_CMD="$ac_dir/file"
  +      if test -n "$file_magic_test_file"; then
  +	case $deplibs_check_method in
  +	"file_magic "*)
  +	  file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
  +	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
  +	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
  +	    egrep "$file_magic_regex" > /dev/null; then
  +	    :
  +	  else
  +	    cat <<EOF 1>&2
  +
  +*** Warning: the command libtool uses to detect shared libraries,
  +*** $file_magic_cmd, produces output that libtool cannot recognize.
  +*** The result is that libtool may fail to recognize shared libraries
  +*** as such.  This will affect the creation of libtool libraries that
  +*** depend on shared libraries, but programs linked with such libtool
  +*** libraries will work regardless of this problem.  Nevertheless, you
  +*** may want to report the problem to your system manager and/or to
  +*** bug-libtool@gnu.org
   
  -  # Remove last slash and all that follows it.  Not all systems have dirname.
  -  ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
  -  if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
  -    # The file is in a subdirectory.
  -    test ! -d "$ac_dir" && mkdir "$ac_dir"
  -    ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
  -    # A "../" for each directory in $ac_dir_suffix.
  -    ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
  +EOF
  +	  fi ;;
  +	esac
  +      fi
  +      break
  +    fi
  +  done
  +  IFS="$ac_save_ifs"
  +  MAGIC_CMD="$ac_save_MAGIC_CMD"
  +  ;;
  +esac
  +fi
  +
  +MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
  +if test -n "$MAGIC_CMD"; then
  +  echo "$as_me:3531: result: $MAGIC_CMD" >&5
  +echo "${ECHO_T}$MAGIC_CMD" >&6
  +else
  +  echo "$as_me:3534: result: no" >&5
  +echo "${ECHO_T}no" >&6
  +fi
  +
     else
  -    ac_dir_suffix= ac_dots=
  +    MAGIC_CMD=:
     fi
  +fi
   
  -  case "$ac_given_srcdir" in
  -  .)  srcdir=.
  -      if test -z "$ac_dots"; then top_srcdir=.
  -      else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
  -  /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
  -  *) # Relative path.
  -    srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
  -    top_srcdir="$ac_dots$ac_given_srcdir" ;;
  -  esac
  +  fi
  +  ;;
  +esac
  +
  +if test -n "$ac_tool_prefix"; then
  +  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
  +set dummy ${ac_tool_prefix}ranlib; ac_word=$2
  +echo "$as_me:3550: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_RANLIB+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test -n "$RANLIB"; then
  +  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
  +else
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
  +echo "$as_me:3565: found $ac_dir/$ac_word" >&5
  +break
  +done
   
  +fi
  +fi
  +RANLIB=$ac_cv_prog_RANLIB
  +if test -n "$RANLIB"; then
  +  echo "$as_me:3573: result: $RANLIB" >&5
  +echo "${ECHO_T}$RANLIB" >&6
  +else
  +  echo "$as_me:3576: result: no" >&5
  +echo "${ECHO_T}no" >&6
  +fi
   
  -  echo creating "$ac_file"
  -  rm -f "$ac_file"
  -  configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
  -  case "$ac_file" in
  -  *Makefile*) ac_comsub="1i\\
  -# $configure_input" ;;
  -  *) ac_comsub= ;;
  -  esac
  -
  -  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
  -  sed -e "$ac_comsub
  -s%@configure_input@%$configure_input%g
  -s%@srcdir@%$srcdir%g
  -s%@top_srcdir@%$top_srcdir%g
  -" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
  -fi; done
  -rm -f conftest.s*
  +fi
  +if test -z "$ac_cv_prog_RANLIB"; then
  +  ac_ct_RANLIB=$RANLIB
  +  # Extract the first word of "ranlib", so it can be a program name with args.
  +set dummy ranlib; ac_word=$2
  +echo "$as_me:3585: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test -n "$ac_ct_RANLIB"; then
  +  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
  +else
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +ac_cv_prog_ac_ct_RANLIB="ranlib"
  +echo "$as_me:3600: found $ac_dir/$ac_word" >&5
  +break
  +done
   
  -# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
  -# NAME is the cpp macro being defined and VALUE is the value it is being given.
  -#
  -# ac_d sets the value in "#define NAME VALUE" lines.
  -ac_dA='s%^\([ 	]*\)#\([ 	]*define[ 	][ 	]*\)'
  -ac_dB='\([ 	][ 	]*\)[^ 	]*%\1#\2'
  -ac_dC='\3'
  -ac_dD='%g'
  -# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
  -ac_uA='s%^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
  -ac_uB='\([ 	]\)%\1#\2define\3'
  -ac_uC=' '
  -ac_uD='\4%g'
  -# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
  -ac_eA='s%^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
  -ac_eB='$%\1#\2define\3'
  -ac_eC=' '
  -ac_eD='%g'
  +  test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
  +fi
  +fi
  +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
  +if test -n "$ac_ct_RANLIB"; then
  +  echo "$as_me:3609: result: $ac_ct_RANLIB" >&5
  +echo "${ECHO_T}$ac_ct_RANLIB" >&6
  +else
  +  echo "$as_me:3612: result: no" >&5
  +echo "${ECHO_T}no" >&6
  +fi
   
  -if test "${CONFIG_HEADERS+set}" != set; then
  -EOF
  -cat >> $CONFIG_STATUS <<EOF
  -  CONFIG_HEADERS="l2_config.h"
  -EOF
  -cat >> $CONFIG_STATUS <<\EOF
  +  RANLIB=$ac_ct_RANLIB
  +else
  +  RANLIB="$ac_cv_prog_RANLIB"
   fi
  -for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
  -  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
  -  case "$ac_file" in
  -  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
  -       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
  -  *) ac_file_in="${ac_file}.in" ;;
  -  esac
  -
  -  echo creating $ac_file
  -
  -  rm -f conftest.frag conftest.in conftest.out
  -  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
  -  cat $ac_file_inputs > conftest.in
   
  -EOF
  +if test -n "$ac_tool_prefix"; then
  +  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
  +set dummy ${ac_tool_prefix}strip; ac_word=$2
  +echo "$as_me:3624: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_STRIP+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test -n "$STRIP"; then
  +  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
  +else
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +ac_cv_prog_STRIP="${ac_tool_prefix}strip"
  +echo "$as_me:3639: found $ac_dir/$ac_word" >&5
  +break
  +done
   
  -# Transform confdefs.h into a sed script conftest.vals that substitutes
  -# the proper values into config.h.in to produce config.h.  And first:
  -# Protect against being on the right side of a sed subst in config.status.
  -# Protect against being in an unquoted here document in config.status.
  -rm -f conftest.vals
  -cat > conftest.hdr <<\EOF
  -s/[\\&%]/\\&/g
  -s%[\\$`]%\\&%g
  -s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
  -s%ac_d%ac_u%gp
  -s%ac_u%ac_e%gp
  -EOF
  -sed -n -f conftest.hdr confdefs.h > conftest.vals
  -rm -f conftest.hdr
  +fi
  +fi
  +STRIP=$ac_cv_prog_STRIP
  +if test -n "$STRIP"; then
  +  echo "$as_me:3647: result: $STRIP" >&5
  +echo "${ECHO_T}$STRIP" >&6
  +else
  +  echo "$as_me:3650: result: no" >&5
  +echo "${ECHO_T}no" >&6
  +fi
   
  -# This sed command replaces #undef with comments.  This is necessary, for
  -# example, in the case of _POSIX_SOURCE, which is predefined and required
  -# on some systems where configure will not decide to define it.
  -cat >> conftest.vals <<\EOF
  -s%^[ 	]*#[ 	]*undef[ 	][ 	]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
  -EOF
  +fi
  +if test -z "$ac_cv_prog_STRIP"; then
  +  ac_ct_STRIP=$STRIP
  +  # Extract the first word of "strip", so it can be a program name with args.
  +set dummy strip; ac_word=$2
  +echo "$as_me:3659: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test -n "$ac_ct_STRIP"; then
  +  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
  +else
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +ac_cv_prog_ac_ct_STRIP="strip"
  +echo "$as_me:3674: found $ac_dir/$ac_word" >&5
  +break
  +done
   
  -# Break up conftest.vals because some shells have a limit on
  -# the size of here documents, and old seds have small limits too.
  +  test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
  +fi
  +fi
  +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
  +if test -n "$ac_ct_STRIP"; then
  +  echo "$as_me:3683: result: $ac_ct_STRIP" >&5
  +echo "${ECHO_T}$ac_ct_STRIP" >&6
  +else
  +  echo "$as_me:3686: result: no" >&5
  +echo "${ECHO_T}no" >&6
  +fi
  +
  +  STRIP=$ac_ct_STRIP
  +else
  +  STRIP="$ac_cv_prog_STRIP"
  +fi
  +
  +enable_dlopen=no
  +enable_win32_dll=no
  +
  +# Check whether --enable-libtool-lock or --disable-libtool-lock was given.
  +if test "${enable_libtool_lock+set}" = set; then
  +  enableval="$enable_libtool_lock"
  +
  +fi;
  +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
  +
  +# Some flags need to be propagated to the compiler or linker for good
  +# libtool support.
  +case $host in
  +*-*-irix6*)
  +  # Find out which ABI we are using.
  +  echo '#line 3710 "configure"' > conftest.$ac_ext
  +  if { (eval echo "$as_me:3711: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:3714: \$? = $ac_status" >&5
  +  (exit $ac_status); }; then
  +    case `/usr/bin/file conftest.$ac_objext` in
  +    *32-bit*)
  +      LD="${LD-ld} -32"
  +      ;;
  +    *N32*)
  +      LD="${LD-ld} -n32"
  +      ;;
  +    *64-bit*)
  +      LD="${LD-ld} -64"
  +      ;;
  +    esac
  +  fi
  +  rm -rf conftest*
  +  ;;
   
  -rm -f conftest.tail
  -while :
  -do
  -  ac_lines=`grep -c . conftest.vals`
  -  # grep -c gives empty output for an empty file on some AIX systems.
  -  if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
  -  # Write a limited-size here document to conftest.frag.
  -  echo '  cat > conftest.frag <<CEOF' >> $CONFIG_STATUS
  -  sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
  -  echo 'CEOF
  -  sed -f conftest.frag conftest.in > conftest.out
  -  rm -f conftest.in
  -  mv conftest.out conftest.in
  -' >> $CONFIG_STATUS
  -  sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
  -  rm -f conftest.vals
  -  mv conftest.tail conftest.vals
  -done
  -rm -f conftest.vals
  -
  -cat >> $CONFIG_STATUS <<\EOF
  -  rm -f conftest.frag conftest.h
  -  echo "/* $ac_file.  Generated automatically by configure.  */" > conftest.h
  -  cat conftest.in >> conftest.h
  -  rm -f conftest.in
  -  if cmp -s $ac_file conftest.h 2>/dev/null; then
  -    echo "$ac_file is unchanged"
  -    rm -f conftest.h
  -  else
  -    # Remove last slash and all that follows it.  Not all systems have dirname.
  -      ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
  -      if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
  -      # The file is in a subdirectory.
  -      test ! -d "$ac_dir" && mkdir "$ac_dir"
  -    fi
  -    rm -f $ac_file
  -    mv conftest.h $ac_file
  +*-*-sco3.2v5*)
  +  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
  +  SAVE_CFLAGS="$CFLAGS"
  +  CFLAGS="$CFLAGS -belf"
  +  echo "$as_me:3735: checking whether the C compiler needs -belf" >&5
  +echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6
  +if test "${lt_cv_cc_needs_belf+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +
  +     ac_ext=c
  +ac_cpp='$CPP $CPPFLAGS'
  +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  +ac_compiler_gnu=$ac_cv_c_compiler_gnu
  +
  +     cat >conftest.$ac_ext <<_ACEOF
  +#line 3748 "configure"
  +#include "confdefs.h"
  +
  +int
  +main ()
  +{
  +
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext conftest$ac_exeext
  +if { (eval echo "$as_me:3760: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:3763: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest$ac_exeext'
  +  { (eval echo "$as_me:3766: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:3769: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  lt_cv_cc_needs_belf=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +lt_cv_cc_needs_belf=no
  +fi
  +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  +     ac_ext=c
  +ac_cpp='$CPP $CPPFLAGS'
  +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  +ac_compiler_gnu=$ac_cv_c_compiler_gnu
  +
  +fi
  +echo "$as_me:3785: result: $lt_cv_cc_needs_belf" >&5
  +echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6
  +  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
  +    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
  +    CFLAGS="$SAVE_CFLAGS"
     fi
  -fi; done
  +  ;;
   
  -EOF
  -cat >> $CONFIG_STATUS <<EOF
  +esac
   
  -EOF
  -cat >> $CONFIG_STATUS <<\EOF
  -chmod a+x l2-config
  +# Sed substitution that helps us do robust quoting.  It backslashifies
  +# metacharacters that are still active within double-quoted strings.
  +Xsed='sed -e s/^X//'
  +sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'
  +
  +# Same as above, but do not quote variable references.
  +double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'
  +
  +# Sed substitution to delay expansion of an escaped shell variable in a
  +# double_quote_subst'ed string.
  +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
  +
  +# Constants:
  +rm="rm -f"
  +
  +# Global variables:
  +default_ofile=libtool
  +can_build_shared=yes
  +
  +# All known linkers require a `.a' archive for static linking (except M$VC,
  +# which needs '.lib').
  +libext=a
  +ltmain="$ac_aux_dir/ltmain.sh"
  +ofile="$default_ofile"
  +with_gnu_ld="$lt_cv_prog_gnu_ld"
  +need_locks="$enable_libtool_lock"
  +
  +old_CC="$CC"
  +old_CFLAGS="$CFLAGS"
  +
  +# Set sane defaults for various variables
  +test -z "$AR" && AR=ar
  +test -z "$AR_FLAGS" && AR_FLAGS=cru
  +test -z "$AS" && AS=as
  +test -z "$CC" && CC=cc
  +test -z "$DLLTOOL" && DLLTOOL=dlltool
  +test -z "$LD" && LD=ld
  +test -z "$LN_S" && LN_S="ln -s"
  +test -z "$MAGIC_CMD" && MAGIC_CMD=file
  +test -z "$NM" && NM=nm
  +test -z "$OBJDUMP" && OBJDUMP=objdump
  +test -z "$RANLIB" && RANLIB=:
  +test -z "$STRIP" && STRIP=:
  +test -z "$ac_objext" && ac_objext=o
  +
  +if test x"$host" != x"$build"; then
  +  ac_tool_prefix=${host_alias}-
  +else
  +  ac_tool_prefix=
  +fi
  +
  +# Transform linux* to *-*-linux-gnu*, to support old configure scripts.
  +case $host_os in
  +linux-gnu*) ;;
  +linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
  +esac
   
  -exit 0
  -EOF
  -chmod +x $CONFIG_STATUS
  -rm -fr confdefs* $ac_clean_files
  -test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
  +case $host_os in
  +aix3*)
  +  # AIX sometimes has problems with the GCC collect2 program.  For some
  +  # reason, if we set the COLLECT_NAMES environment variable, the problems
  +  # vanish in a puff of smoke.
  +  if test "X${COLLECT_NAMES+set}" != Xset; then
  +    COLLECT_NAMES=
  +    export COLLECT_NAMES
  +  fi
  +  ;;
  +esac
  +
  +# Determine commands to create old-style static archives.
  +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
  +old_postinstall_cmds='chmod 644 $oldlib'
  +old_postuninstall_cmds=
  +
  +if test -n "$RANLIB"; then
  +  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
  +  old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
  +fi
  +
  +# Allow CC to be a program name with arguments.
  +set dummy $CC
  +compiler="$2"
  +
  +## FIXME: this should be a separate macro
  +##
  +echo "$as_me:3880: checking for objdir" >&5
  +echo $ECHO_N "checking for objdir... $ECHO_C" >&6
  +rm -f .libs 2>/dev/null
  +mkdir .libs 2>/dev/null
  +if test -d .libs; then
  +  objdir=.libs
  +else
  +  # MS-DOS does not allow filenames that begin with a dot.
  +  objdir=_libs
  +fi
  +rmdir .libs 2>/dev/null
  +echo "$as_me:3891: result: $objdir" >&5
  +echo "${ECHO_T}$objdir" >&6
  +##
  +## END FIXME
  +
  +## FIXME: this should be a separate macro
  +##
  +
  +# Check whether --with-pic or --without-pic was given.
  +if test "${with_pic+set}" = set; then
  +  withval="$with_pic"
  +  pic_mode="$withval"
  +else
  +  pic_mode=default
  +fi;
  +test -z "$pic_mode" && pic_mode=default
  +
  +# We assume here that the value for lt_cv_prog_cc_pic will not be cached
  +# in isolation, and that seeing it set (from the cache) indicates that
  +# the associated values are set (in the cache) correctly too.
  +echo "$as_me:3911: checking for $compiler option to produce PIC" >&5
  +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
  +if test "${lt_cv_prog_cc_pic+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +   lt_cv_prog_cc_pic=
  +  lt_cv_prog_cc_shlib=
  +  lt_cv_prog_cc_wl=
  +  lt_cv_prog_cc_static=
  +  lt_cv_prog_cc_no_builtin=
  +  lt_cv_prog_cc_can_build_shared=$can_build_shared
  +
  +  if test "$GCC" = yes; then
  +    lt_cv_prog_cc_wl='-Wl,'
  +    lt_cv_prog_cc_static='-static'
  +
  +    case $host_os in
  +    aix*)
  +      # Below there is a dirty hack to force normal static linking with -ldl
  +      # The problem is because libdl dynamically linked with both libc and
  +      # libC (AIX C++ library), which obviously doesn't included in libraries
  +      # list by gcc. This cause undefined symbols with -static flags.
  +      # This hack allows C programs to be linked with "-static -ldl", but
  +      # we not sure about C++ programs.
  +      lt_cv_prog_cc_static="$lt_cv_prog_cc_static ${lt_cv_prog_cc_wl}-lC"
  +      ;;
  +    amigaos*)
  +      # FIXME: we need at least 68020 code to build shared libraries, but
  +      # adding the `-m68020' flag to GCC prevents building anything better,
  +      # like `-m68040'.
  +      lt_cv_prog_cc_pic='-m68020 -resident32 -malways-restore-a4'
  +      ;;
  +    beos* | irix5* | irix6* | osf3* | osf4* | osf5*)
  +      # PIC is the default for these OSes.
  +      ;;
  +    darwin* | rhapsody*)
  +      # PIC is the default on this platform
  +      # Common symbols not allowed in MH_DYLIB files
  +      lt_cv_prog_cc_pic='-fno-common'
  +      ;;
  +    cygwin* | mingw* | pw32* | os2*)
  +      # This hack is so that the source file can tell whether it is being
  +      # built for inclusion in a dll (and should export symbols for example).
  +      lt_cv_prog_cc_pic='-DDLL_EXPORT'
  +      ;;
  +    sysv4*MP*)
  +      if test -d /usr/nec; then
  +	 lt_cv_prog_cc_pic=-Kconform_pic
  +      fi
  +      ;;
  +    *)
  +      lt_cv_prog_cc_pic='-fPIC'
  +      ;;
  +    esac
  +  else
  +    # PORTME Check for PIC flags for the system compiler.
  +    case $host_os in
  +    aix3* | aix4* | aix5*)
  +      # All AIX code is PIC.
  +      if test "$host_cpu" = ia64; then
  +        # AIX 5 now supports IA64 processor
  +        lt_cv_prog_cc_static='-Bstatic'
  +        lt_cv_prog_cc_wl='-Wl,'
  +      else
  +        lt_cv_prog_cc_static='-bnso -bI:/lib/syscalls.exp'
  +      fi
  +      ;;
  +
  +    hpux9* | hpux10* | hpux11*)
  +      # Is there a better lt_cv_prog_cc_static that works with the bundled CC?
  +      lt_cv_prog_cc_wl='-Wl,'
  +      lt_cv_prog_cc_static="${lt_cv_prog_cc_wl}-a ${lt_cv_prog_cc_wl}archive"
  +      lt_cv_prog_cc_pic='+Z'
  +      ;;
  +
  +    irix5* | irix6*)
  +      lt_cv_prog_cc_wl='-Wl,'
  +      lt_cv_prog_cc_static='-non_shared'
  +      # PIC (with -KPIC) is the default.
  +      ;;
  +
  +    cygwin* | mingw* | pw32* | os2*)
  +      # This hack is so that the source file can tell whether it is being
  +      # built for inclusion in a dll (and should export symbols for example).
  +      lt_cv_prog_cc_pic='-DDLL_EXPORT'
  +      ;;
  +
  +    newsos6)
  +      lt_cv_prog_cc_pic='-KPIC'
  +      lt_cv_prog_cc_static='-Bstatic'
  +      ;;
  +
  +    osf3* | osf4* | osf5*)
  +      # All OSF/1 code is PIC.
  +      lt_cv_prog_cc_wl='-Wl,'
  +      lt_cv_prog_cc_static='-non_shared'
  +      ;;
  +
  +    sco3.2v5*)
  +      lt_cv_prog_cc_pic='-Kpic'
  +      lt_cv_prog_cc_static='-dn'
  +      lt_cv_prog_cc_shlib='-belf'
  +      ;;
  +
  +    solaris*)
  +      lt_cv_prog_cc_pic='-KPIC'
  +      lt_cv_prog_cc_static='-Bstatic'
  +      lt_cv_prog_cc_wl='-Wl,'
  +      ;;
  +
  +    sunos4*)
  +      lt_cv_prog_cc_pic='-PIC'
  +      lt_cv_prog_cc_static='-Bstatic'
  +      lt_cv_prog_cc_wl='-Qoption ld '
  +      ;;
  +
  +    sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
  +      lt_cv_prog_cc_pic='-KPIC'
  +      lt_cv_prog_cc_static='-Bstatic'
  +      if test "x$host_vendor" = xsni; then
  +        lt_cv_prog_cc_wl='-LD'
  +      else
  +        lt_cv_prog_cc_wl='-Wl,'
  +      fi
  +      ;;
  +
  +    uts4*)
  +      lt_cv_prog_cc_pic='-pic'
  +      lt_cv_prog_cc_static='-Bstatic'
  +      ;;
  +
  +    sysv4*MP*)
  +      if test -d /usr/nec ;then
  +	lt_cv_prog_cc_pic='-Kconform_pic'
  +	lt_cv_prog_cc_static='-Bstatic'
  +      fi
  +      ;;
  +
  +    *)
  +      lt_cv_prog_cc_can_build_shared=no
  +      ;;
  +    esac
  +  fi
  +
  +fi
  +
  +if test -z "$lt_cv_prog_cc_pic"; then
  +  echo "$as_me:4058: result: none" >&5
  +echo "${ECHO_T}none" >&6
  +else
  +  echo "$as_me:4061: result: $lt_cv_prog_cc_pic" >&5
  +echo "${ECHO_T}$lt_cv_prog_cc_pic" >&6
  +
  +  # Check to make sure the pic_flag actually works.
  +  echo "$as_me:4065: checking if $compiler PIC flag $lt_cv_prog_cc_pic works" >&5
  +echo $ECHO_N "checking if $compiler PIC flag $lt_cv_prog_cc_pic works... $ECHO_C" >&6
  +  if test "${lt_cv_prog_cc_pic_works+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +      save_CFLAGS="$CFLAGS"
  +    CFLAGS="$CFLAGS $lt_cv_prog_cc_pic -DPIC"
  +    cat >conftest.$ac_ext <<_ACEOF
  +#line 4073 "configure"
  +#include "confdefs.h"
  +
  +int
  +main ()
  +{
  +
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:4085: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:4088: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:4091: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:4094: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +        case $host_os in
  +      hpux9* | hpux10* | hpux11*)
  +	# On HP-UX, both CC and GCC only warn that PIC is supported... then
  +	# they create non-PIC objects.  So, if there were any warnings, we
  +	# assume that PIC is not supported.
  +	if test -s conftest.err; then
  +	  lt_cv_prog_cc_pic_works=no
  +	else
  +	  lt_cv_prog_cc_pic_works=yes
  +	fi
  +	;;
  +      *)
  +	lt_cv_prog_cc_pic_works=yes
  +	;;
  +      esac
  +
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +      lt_cv_prog_cc_pic_works=no
  +
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +    CFLAGS="$save_CFLAGS"
  +
  +fi
  +
  +  if test "X$lt_cv_prog_cc_pic_works" = Xno; then
  +    lt_cv_prog_cc_pic=
  +    lt_cv_prog_cc_can_build_shared=no
  +  else
  +    lt_cv_prog_cc_pic=" $lt_cv_prog_cc_pic"
  +  fi
  +
  +  echo "$as_me:4130: result: $lt_cv_prog_cc_pic_works" >&5
  +echo "${ECHO_T}$lt_cv_prog_cc_pic_works" >&6
  +fi
  +##
  +## END FIXME
  +
  +# Check for any special shared library compilation flags.
  +if test -n "$lt_cv_prog_cc_shlib"; then
  +  { echo "$as_me:4138: WARNING: \`$CC' requires \`$lt_cv_prog_cc_shlib' to build shared libraries" >&5
  +echo "$as_me: WARNING: \`$CC' requires \`$lt_cv_prog_cc_shlib' to build shared libraries" >&2;}
  +  if echo "$old_CC $old_CFLAGS " | egrep -e "[ 	]$lt_cv_prog_cc_shlib[ 	]" >/dev/null; then :
  +  else
  +   { echo "$as_me:4142: WARNING: add \`$lt_cv_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&5
  +echo "$as_me: WARNING: add \`$lt_cv_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&2;}
  +    lt_cv_prog_cc_can_build_shared=no
  +  fi
  +fi
  +
  +## FIXME: this should be a separate macro
  +##
  +echo "$as_me:4150: checking if $compiler static flag $lt_cv_prog_cc_static works" >&5
  +echo $ECHO_N "checking if $compiler static flag $lt_cv_prog_cc_static works... $ECHO_C" >&6
  +if test "${lt_cv_prog_cc_static_works+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +    lt_cv_prog_cc_static_works=no
  +  save_LDFLAGS="$LDFLAGS"
  +  LDFLAGS="$LDFLAGS $lt_cv_prog_cc_static"
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 4159 "configure"
  +#include "confdefs.h"
  +
  +int
  +main ()
  +{
  +
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext conftest$ac_exeext
  +if { (eval echo "$as_me:4171: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:4174: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest$ac_exeext'
  +  { (eval echo "$as_me:4177: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:4180: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  lt_cv_prog_cc_static_works=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +fi
  +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  +  LDFLAGS="$save_LDFLAGS"
  +
  +fi
  +
  +# Belt *and* braces to stop my trousers falling down:
  +test "X$lt_cv_prog_cc_static_works" = Xno && lt_cv_prog_cc_static=
  +echo "$as_me:4194: result: $lt_cv_prog_cc_static_works" >&5
  +echo "${ECHO_T}$lt_cv_prog_cc_static_works" >&6
  +
  +pic_flag="$lt_cv_prog_cc_pic"
  +special_shlib_compile_flags="$lt_cv_prog_cc_shlib"
  +wl="$lt_cv_prog_cc_wl"
  +link_static_flag="$lt_cv_prog_cc_static"
  +no_builtin_flag="$lt_cv_prog_cc_no_builtin"
  +can_build_shared="$lt_cv_prog_cc_can_build_shared"
  +##
  +## END FIXME
  +
  +## FIXME: this should be a separate macro
  +##
  +# Check to see if options -o and -c are simultaneously supported by compiler
  +echo "$as_me:4209: checking if $compiler supports -c -o file.$ac_objext" >&5
  +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
  +if test "${lt_cv_compiler_c_o+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +
  +$rm -r conftest 2>/dev/null
  +mkdir conftest
  +cd conftest
  +echo "int some_variable = 0;" > conftest.$ac_ext
  +mkdir out
  +# According to Tom Tromey, Ian Lance Taylor reported there are C compilers
  +# that will create temporary files in the current directory regardless of
  +# the output directory.  Thus, making CWD read-only will cause this test
  +# to fail, enabling locking or at least warning the user not to do parallel
  +# builds.
  +chmod -w .
  +save_CFLAGS="$CFLAGS"
  +CFLAGS="$CFLAGS -o out/conftest2.$ac_objext"
  +compiler_c_o=no
  +if { (eval echo configure:4229: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.$ac_objext; then
  +  # The compiler can only warn and ignore the option if not recognized
  +  # So say no if there are warnings
  +  if test -s out/conftest.err; then
  +    lt_cv_compiler_c_o=no
  +  else
  +    lt_cv_compiler_c_o=yes
  +  fi
  +else
  +  # Append any errors to the config.log.
  +  cat out/conftest.err 1>&5
  +  lt_cv_compiler_c_o=no
  +fi
  +CFLAGS="$save_CFLAGS"
  +chmod u+w .
  +$rm conftest* out/*
  +rmdir out
  +cd ..
  +rmdir conftest
  +$rm -r conftest 2>/dev/null
  +
  +fi
  +
  +compiler_c_o=$lt_cv_compiler_c_o
  +echo "$as_me:4253: result: $compiler_c_o" >&5
  +echo "${ECHO_T}$compiler_c_o" >&6
  +
  +if test x"$compiler_c_o" = x"yes"; then
  +  # Check to see if we can write to a .lo
  +  echo "$as_me:4258: checking if $compiler supports -c -o file.lo" >&5
  +echo $ECHO_N "checking if $compiler supports -c -o file.lo... $ECHO_C" >&6
  +  if test "${lt_cv_compiler_o_lo+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +
  +  lt_cv_compiler_o_lo=no
  +  save_CFLAGS="$CFLAGS"
  +  CFLAGS="$CFLAGS -c -o conftest.lo"
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 4268 "configure"
  +#include "confdefs.h"
  +
  +int
  +main ()
  +{
  +int some_variable = 0;
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:4280: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:4283: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:4286: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:4289: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +      # The compiler can only warn and ignore the option if not recognized
  +    # So say no if there are warnings
  +    if test -s conftest.err; then
  +      lt_cv_compiler_o_lo=no
  +    else
  +      lt_cv_compiler_o_lo=yes
  +    fi
  +
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +  CFLAGS="$save_CFLAGS"
  +
  +fi
  +
  +  compiler_o_lo=$lt_cv_compiler_o_lo
  +  echo "$as_me:4309: result: $compiler_c_lo" >&5
  +echo "${ECHO_T}$compiler_c_lo" >&6
  +else
  +  compiler_o_lo=no
  +fi
  +##
  +## END FIXME
  +
  +## FIXME: this should be a separate macro
  +##
  +# Check to see if we can do hard links to lock some files if needed
  +hard_links="nottested"
  +if test "$compiler_c_o" = no && test "$need_locks" != no; then
  +  # do not overwrite the value of need_locks provided by the user
  +  echo "$as_me:4323: checking if we can lock with hard links" >&5
  +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
  +  hard_links=yes
  +  $rm conftest*
  +  ln conftest.a conftest.b 2>/dev/null && hard_links=no
  +  touch conftest.a
  +  ln conftest.a conftest.b 2>&5 || hard_links=no
  +  ln conftest.a conftest.b 2>/dev/null && hard_links=no
  +  echo "$as_me:4331: result: $hard_links" >&5
  +echo "${ECHO_T}$hard_links" >&6
  +  if test "$hard_links" = no; then
  +    { echo "$as_me:4334: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
  +echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
  +    need_locks=warn
  +  fi
  +else
  +  need_locks=no
  +fi
  +##
  +## END FIXME
  +
  +## FIXME: this should be a separate macro
  +##
  +if test "$GCC" = yes; then
  +  # Check to see if options -fno-rtti -fno-exceptions are supported by compiler
  +  echo "$as_me:4348: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
  +echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6
  +  echo "int some_variable = 0;" > conftest.$ac_ext
  +  save_CFLAGS="$CFLAGS"
  +  CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.$ac_ext"
  +  compiler_rtti_exceptions=no
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 4355 "configure"
  +#include "confdefs.h"
  +
  +int
  +main ()
  +{
  +int some_variable = 0;
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:4367: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:4370: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:4373: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:4376: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +      # The compiler can only warn and ignore the option if not recognized
  +    # So say no if there are warnings
  +    if test -s conftest.err; then
  +      compiler_rtti_exceptions=no
  +    else
  +      compiler_rtti_exceptions=yes
  +    fi
  +
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +  CFLAGS="$save_CFLAGS"
  +  echo "$as_me:4392: result: $compiler_rtti_exceptions" >&5
  +echo "${ECHO_T}$compiler_rtti_exceptions" >&6
  +
  +  if test "$compiler_rtti_exceptions" = "yes"; then
  +    no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions'
  +  else
  +    no_builtin_flag=' -fno-builtin'
  +  fi
  +fi
  +##
  +## END FIXME
  +
  +## FIXME: this should be a separate macro
  +##
  +# See if the linker supports building shared libraries.
  +echo "$as_me:4407: checking whether the linker ($LD) supports shared libraries" >&5
  +echo $ECHO_N "checking whether the linker ($LD) supports shared libraries... $ECHO_C" >&6
  +
  +allow_undefined_flag=
  +no_undefined_flag=
  +need_lib_prefix=unknown
  +need_version=unknown
  +# when you set need_version to no, make sure it does not cause -set_version
  +# flags to be left without arguments
  +archive_cmds=
  +archive_expsym_cmds=
  +old_archive_from_new_cmds=
  +old_archive_from_expsyms_cmds=
  +export_dynamic_flag_spec=
  +whole_archive_flag_spec=
  +thread_safe_flag_spec=
  +hardcode_into_libs=no
  +hardcode_libdir_flag_spec=
  +hardcode_libdir_separator=
  +hardcode_direct=no
  +hardcode_minus_L=no
  +hardcode_shlibpath_var=unsupported
  +runpath_var=
  +link_all_deplibs=unknown
  +always_export_symbols=no
  +export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols'
  +# include_expsyms should be a list of space-separated symbols to be *always*
  +# included in the symbol list
  +include_expsyms=
  +# exclude_expsyms can be an egrep regular expression of symbols to exclude
  +# it will be wrapped by ` (' and `)$', so one must not match beginning or
  +# end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
  +# as well as any symbol that contains `d'.
  +exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
  +# Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
  +# platforms (ab)use it in PIC code, but their linkers get confused if
  +# the symbol is explicitly referenced.  Since portable code cannot
  +# rely on this symbol name, it's probably fine to never include it in
  +# preloaded symbol tables.
  +extract_expsyms_cmds=
  +
  +case $host_os in
  +cygwin* | mingw* | pw32* )
  +  # FIXME: the MSVC++ port hasn't been tested in a loooong time
  +  # When not using gcc, we currently assume that we are using
  +  # Microsoft Visual C++.
  +  if test "$GCC" != yes; then
  +    with_gnu_ld=no
  +  fi
  +  ;;
  +
  +esac
  +
  +ld_shlibs=yes
  +if test "$with_gnu_ld" = yes; then
  +  # If archive_cmds runs LD, not CC, wlarc should be empty
  +  wlarc='${wl}'
  +
  +  # See if GNU ld supports shared libraries.
  +  case $host_os in
  +  aix3* | aix4* | aix5*)
  +    # On AIX, the GNU linker is very broken
  +    # Note:Check GNU linker on AIX 5-IA64 when/if it becomes available.
  +    ld_shlibs=no
  +    cat <<EOF 1>&2
  +
  +*** Warning: the GNU linker, at least up to release 2.9.1, is reported
  +*** to be unable to reliably create shared libraries on AIX.
  +*** Therefore, libtool is disabling shared libraries support.  If you
  +*** really care for shared libraries, you may want to modify your PATH
  +*** so that a non-GNU linker is found, and then restart.
  +
  +EOF
  +    ;;
  +
  +  amigaos*)
  +    archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
  +    hardcode_libdir_flag_spec='-L$libdir'
  +    hardcode_minus_L=yes
  +
  +    # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
  +    # that the semantics of dynamic libraries on AmigaOS, at least up
  +    # to version 4, is to share data among multiple programs linked
  +    # with the same dynamic library.  Since this doesn't match the
  +    # behavior of shared libraries on other platforms, we can use
  +    # them.
  +    ld_shlibs=no
  +    ;;
  +
  +  beos*)
  +    if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
  +      allow_undefined_flag=unsupported
  +      # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
  +      # support --undefined.  This deserves some investigation.  FIXME
  +      archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
  +    else
  +      ld_shlibs=no
  +    fi
  +    ;;
  +
  +  cygwin* | mingw* | pw32*)
  +    # hardcode_libdir_flag_spec is actually meaningless, as there is
  +    # no search path for DLLs.
  +    hardcode_libdir_flag_spec='-L$libdir'
  +    allow_undefined_flag=unsupported
  +    always_export_symbols=yes
  +
  +    extract_expsyms_cmds='test -f $output_objdir/impgen.c || \
  +      sed -e "/^# \/\* impgen\.c starts here \*\//,/^# \/\* impgen.c ends here \*\// { s/^# //;s/^# *$//; p; }" -e d < $''0 > $output_objdir/impgen.c~
  +      test -f $output_objdir/impgen.exe || (cd $output_objdir && \
  +      if test "x$HOST_CC" != "x" ; then $HOST_CC -o impgen impgen.c ; \
  +      else $CC -o impgen impgen.c ; fi)~
  +      $output_objdir/impgen $dir/$soroot > $output_objdir/$soname-def'
  +
  +    old_archive_from_expsyms_cmds='$DLLTOOL --as=$AS --dllname $soname --def $output_objdir/$soname-def --output-lib $output_objdir/$newlib'
  +
  +    # cygwin and mingw dlls have different entry points and sets of symbols
  +    # to exclude.
  +    # FIXME: what about values for MSVC?
  +    dll_entry=__cygwin_dll_entry@12
  +    dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12~
  +    case $host_os in
  +    mingw*)
  +      # mingw values
  +      dll_entry=_DllMainCRTStartup@12
  +      dll_exclude_symbols=DllMain@12,DllMainCRTStartup@12,DllEntryPoint@12~
  +      ;;
  +    esac
  +
  +    # mingw and cygwin differ, and it's simplest to just exclude the union
  +    # of the two symbol sets.
  +    dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12,DllMainCRTStartup@12,DllEntryPoint@12
  +
  +    # recent cygwin and mingw systems supply a stub DllMain which the user
  +    # can override, but on older systems we have to supply one (in ltdll.c)
  +    if test "x$lt_cv_need_dllmain" = "xyes"; then
  +      ltdll_obj='$output_objdir/$soname-ltdll.'"$ac_objext "
  +      ltdll_cmds='test -f $output_objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < [$]0 > $output_objdir/$soname-ltdll.c~
  +	test -f $output_objdir/$soname-ltdll.$ac_objext || (cd $output_objdir && $CC -c $soname-ltdll.c)~'
  +    else
  +      ltdll_obj=
  +      ltdll_cmds=
  +    fi
  +
  +    # Extract the symbol export list from an `--export-all' def file,
  +    # then regenerate the def file from the symbol export list, so that
  +    # the compiled dll only exports the symbol export list.
  +    # Be careful not to strip the DATA tag left be newer dlltools.
  +    export_symbols_cmds="$ltdll_cmds"'
  +      $DLLTOOL --export-all --exclude-symbols '$dll_exclude_symbols' --output-def $output_objdir/$soname-def '$ltdll_obj'$libobjs $convenience~
  +      sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]*//" -e "s/ *;.*$//" < $output_objdir/$soname-def > $export_symbols'
  +
  +    # If the export-symbols file already is a .def file (1st line
  +    # is EXPORTS), use it as is.
  +    # If DATA tags from a recent dlltool are present, honour them!
  +    archive_expsym_cmds='if test "x`head -1 $export_symbols`" = xEXPORTS; then
  +        cp $export_symbols $output_objdir/$soname-def;
  +      else
  +        echo EXPORTS > $output_objdir/$soname-def;
  +        _lt_hint=1;
  +        cat $export_symbols | while read symbol; do
  +         set dummy \$symbol;
  +         case \$# in
  +           2) echo "   \$2 @ \$_lt_hint ; " >> $output_objdir/$soname-def;;
  +           *) echo "     \$2 @ \$_lt_hint \$3 ; " >> $output_objdir/$soname-def;;
  +         esac;
  +         _lt_hint=`expr 1 + \$_lt_hint`;
  +        done;
  +      fi~
  +      '"$ltdll_cmds"'
  +      $CC -Wl,--base-file,$output_objdir/$soname-base '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~
  +      $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp~
  +      $CC -Wl,--base-file,$output_objdir/$soname-base $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~
  +      $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp --output-lib $output_objdir/$libname.dll.a~
  +      $CC $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags'
  +    ;;
  +
  +  netbsd*)
  +    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
  +      archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
  +      wlarc=
  +    else
  +      archive_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
  +      archive_expsym_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
  +    fi
  +    ;;
  +
  +  solaris* | sysv5*)
  +    if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then
  +      ld_shlibs=no
  +      cat <<EOF 1>&2
  +
  +*** Warning: The releases 2.8.* of the GNU linker cannot reliably
  +*** create shared libraries on Solaris systems.  Therefore, libtool
  +*** is disabling shared libraries support.  We urge you to upgrade GNU
  +*** binutils to release 2.9.1 or newer.  Another option is to modify
  +*** your PATH or compiler configuration so that the native linker is
  +*** used, and then restart.
  +
  +EOF
  +    elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
  +      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
  +      archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
  +    else
  +      ld_shlibs=no
  +    fi
  +    ;;
  +
  +  sunos4*)
  +    archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
  +    wlarc=
  +    hardcode_direct=yes
  +    hardcode_shlibpath_var=no
  +    ;;
  +
  +  *)
  +    if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
  +      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
  +      archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
  +    else
  +      ld_shlibs=no
  +    fi
  +    ;;
  +  esac
  +
  +  if test "$ld_shlibs" = yes; then
  +    runpath_var=LD_RUN_PATH
  +    hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
  +    export_dynamic_flag_spec='${wl}--export-dynamic'
  +    case $host_os in
  +    cygwin* | mingw* | pw32*)
  +      # dlltool doesn't understand --whole-archive et. al.
  +      whole_archive_flag_spec=
  +      ;;
  +    *)
  +      # ancient GNU ld didn't support --whole-archive et. al.
  +      if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then
  +	whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
  +      else
  +	whole_archive_flag_spec=
  +      fi
  +      ;;
  +    esac
  +  fi
  +else
  +  # PORTME fill in a description of your system's linker (not GNU ld)
  +  case $host_os in
  +  aix3*)
  +    allow_undefined_flag=unsupported
  +    always_export_symbols=yes
  +    archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
  +    # Note: this linker hardcodes the directories in LIBPATH if there
  +    # are no directories specified by -L.
  +    hardcode_minus_L=yes
  +    if test "$GCC" = yes && test -z "$link_static_flag"; then
  +      # Neither direct hardcoding nor static linking is supported with a
  +      # broken collect2.
  +      hardcode_direct=unsupported
  +    fi
  +    ;;
  +
  +  aix4* | aix5*)
  +    # When large executables or shared objects are built, AIX ld can
  +    # have problems creating the table of contents.  If linking a library
  +    # or program results in "error TOC overflow" add -mminimal-toc to
  +    # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
  +    # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
  +
  +    archive_cmds=''
  +    hardcode_libdir_separator=':'
  +    if test "$GCC" = yes; then
  +      collect2name=`${CC} -print-prog-name=collect2`
  +      if test -f "$collect2name" && \
  +	 strings "$collect2name" | grep resolve_lib_name >/dev/null
  +      then
  +	# We have reworked collect2
  +	hardcode_direct=yes
  +      else
  +        # We have old collect2
  +        hardcode_direct=unsupported
  +        # It fails to find uninstalled libraries when the uninstalled
  +        # path is not listed in the libpath.  Setting hardcode_minus_L
  +        # to unsupported forces relinking
  +        hardcode_minus_L=yes
  +        hardcode_libdir_flag_spec='-L$libdir'
  +        hardcode_libdir_separator=
  +      fi
  +      shared_flag='-shared'
  +    else
  +      if test "$host_cpu" = ia64; then
  +        shared_flag='-G'
  +      else
  +        shared_flag='${wl}-bM:SRE'
  +      fi
  +      hardcode_direct=yes
  +    fi
  +
  +    if test "$host_cpu" = ia64; then
  +      # On IA64, the linker does run time linking by default, so we don't
  +      # have to do anything special.
  +      aix_use_runtimelinking=no
  +      exp_sym_flag='-Bexport'
  +      no_entry_flag=""
  +    else
  +      # Test if we are trying to use run time linking, or normal AIX style linking.
  +      # If -brtl is somewhere in LDFLAGS, we need to do run time linking.
  +      aix_use_runtimelinking=no
  +      for ld_flag in $LDFLAGS; do
  +        if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl" ); then
  +          aix_use_runtimelinking=yes
  +          break
  +        fi
  +      done
  +      exp_sym_flag='-bexport'
  +      no_entry_flag='-bnoentry'
  +    fi
  +    # It seems that -bexpall can do strange things, so it is better to
  +    # generate a list of symbols to export.
  +    always_export_symbols=yes
  +    if test "$aix_use_runtimelinking" = yes; then
  +      hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib'
  +      allow_undefined_flag=' -Wl,-G'
  +      archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
  +    else
  +      if test "$host_cpu" = ia64; then
  +        hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
  +       allow_undefined_flag="-znodefs"
  +        archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname ${wl}-h$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
  +      else
  +        hardcode_libdir_flag_spec='${wl}-bnolibpath ${wl}-blibpath:$libdir:/usr/lib:/lib'
  +        # Warning - without using the other run time loading flags, -berok will
  +        #           link without error, but may produce a broken library.
  +        allow_undefined_flag='${wl}-berok"
  +        # This is a bit strange, but is similar to how AIX traditionally builds
  +        # it's shared libraries.
  +        archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"' ~$AR -crlo $objdir/$libname$release.a $objdir/$soname'
  +      fi
  +    fi
  +    ;;
  +
  +  amigaos*)
  +    archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
  +    hardcode_libdir_flag_spec='-L$libdir'
  +    hardcode_minus_L=yes
  +    # see comment about different semantics on the GNU ld section
  +    ld_shlibs=no
  +    ;;
  +
  +  cygwin* | mingw* | pw32*)
  +    # When not using gcc, we currently assume that we are using
  +    # Microsoft Visual C++.
  +    # hardcode_libdir_flag_spec is actually meaningless, as there is
  +    # no search path for DLLs.
  +    hardcode_libdir_flag_spec=' '
  +    allow_undefined_flag=unsupported
  +    # Tell ltmain to make .lib files, not .a files.
  +    libext=lib
  +    # FIXME: Setting linknames here is a bad hack.
  +    archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames='
  +    # The linker will automatically build a .lib file if we build a DLL.
  +    old_archive_from_new_cmds='true'
  +    # FIXME: Should let the user specify the lib program.
  +    old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs'
  +    fix_srcfile_path='`cygpath -w "$srcfile"`'
  +    ;;
  +
  +  darwin* | rhapsody*)
  +    allow_undefined_flag='-undefined suppress'
  +    # FIXME: Relying on posixy $() will cause problems for
  +    #        cross-compilation, but unfortunately the echo tests do not
  +    #        yet detect zsh echo's removal of \ escapes.
  +    archive_cmds='$CC $(test .$module = .yes && echo -bundle || echo -dynamiclib) $allow_undefined_flag -o $lib $libobjs $deplibs$linkopts -install_name $rpath/$soname $(test -n "$verstring" -a x$verstring != x0.0 && echo $verstring)'
  +    # We need to add '_' to the symbols in $export_symbols first
  +    #archive_expsym_cmds="$archive_cmds"' && strip -s $export_symbols'
  +    hardcode_direct=yes
  +    hardcode_shlibpath_var=no
  +    whole_archive_flag_spec='-all_load $convenience'
  +    ;;
  +
  +  freebsd1*)
  +    ld_shlibs=no
  +    ;;
  +
  +  # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
  +  # support.  Future versions do this automatically, but an explicit c++rt0.o
  +  # does not break anything, and helps significantly (at the cost of a little
  +  # extra space).
  +  freebsd2.2*)
  +    archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
  +    hardcode_libdir_flag_spec='-R$libdir'
  +    hardcode_direct=yes
  +    hardcode_shlibpath_var=no
  +    ;;
  +
  +  # Unfortunately, older versions of FreeBSD 2 do not have this feature.
  +  freebsd2*)
  +    archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
  +    hardcode_direct=yes
  +    hardcode_minus_L=yes
  +    hardcode_shlibpath_var=no
  +    ;;
  +
  +  # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
  +  freebsd*)
  +    archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
  +    hardcode_libdir_flag_spec='-R$libdir'
  +    hardcode_direct=yes
  +    hardcode_shlibpath_var=no
  +    ;;
  +
  +  hpux9* | hpux10* | hpux11*)
  +    case $host_os in
  +    hpux9*) archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ;;
  +    *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;;
  +    esac
  +    hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
  +    hardcode_libdir_separator=:
  +    hardcode_direct=yes
  +    hardcode_minus_L=yes # Not in the search PATH, but as the default
  +			 # location of the library.
  +    export_dynamic_flag_spec='${wl}-E'
  +    ;;
  +
  +  irix5* | irix6*)
  +    if test "$GCC" = yes; then
  +      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
  +    else
  +      archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
  +    fi
  +    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
  +    hardcode_libdir_separator=:
  +    link_all_deplibs=yes
  +    ;;
  +
  +  netbsd*)
  +    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
  +      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
  +    else
  +      archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
  +    fi
  +    hardcode_libdir_flag_spec='-R$libdir'
  +    hardcode_direct=yes
  +    hardcode_shlibpath_var=no
  +    ;;
  +
  +  newsos6)
  +    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
  +    hardcode_direct=yes
  +    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
  +    hardcode_libdir_separator=:
  +    hardcode_shlibpath_var=no
  +    ;;
  +
  +  openbsd*)
  +    archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
  +    hardcode_libdir_flag_spec='-R$libdir'
  +    hardcode_direct=yes
  +    hardcode_shlibpath_var=no
  +    ;;
  +
  +  os2*)
  +    hardcode_libdir_flag_spec='-L$libdir'
  +    hardcode_minus_L=yes
  +    allow_undefined_flag=unsupported
  +    archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
  +    old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
  +    ;;
  +
  +  osf3*)
  +    if test "$GCC" = yes; then
  +      allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
  +      archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
  +    else
  +      allow_undefined_flag=' -expect_unresolved \*'
  +      archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
  +    fi
  +    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
  +    hardcode_libdir_separator=:
  +    ;;
  +
  +  osf4* | osf5*)	# as osf3* with the addition of -msym flag
  +    if test "$GCC" = yes; then
  +      allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
  +      archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
  +      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
  +    else
  +      allow_undefined_flag=' -expect_unresolved \*'
  +      archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
  +      archive_expsym_cmds='for i in `cat $export_symbols`; do printf "-exported_symbol " >> $lib.exp; echo "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
  +      $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
  +
  +      #Both c and cxx compiler support -rpath directly
  +      hardcode_libdir_flag_spec='-rpath $libdir'
  +    fi
  +    hardcode_libdir_separator=:
  +    ;;
  +
  +  sco3.2v5*)
  +    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
  +    hardcode_shlibpath_var=no
  +    runpath_var=LD_RUN_PATH
  +    hardcode_runpath_var=yes
  +    ;;
  +
  +  solaris*)
  +    no_undefined_flag=' -z defs'
  +    # $CC -shared without GNU ld will not create a library from C++
  +    # object files and a static libstdc++, better avoid it by now
  +    archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
  +    archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
  +		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
  +    hardcode_libdir_flag_spec='-R$libdir'
  +    hardcode_shlibpath_var=no
  +    case $host_os in
  +    solaris2.[0-5] | solaris2.[0-5].*) ;;
  +    *) # Supported since Solaris 2.6 (maybe 2.5.1?)
  +      whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;
  +    esac
  +    link_all_deplibs=yes
  +    ;;
  +
  +  sunos4*)
  +    if test "x$host_vendor" = xsequent; then
  +      # Use $CC to link under sequent, because it throws in some extra .o
  +      # files that make .init and .fini sections work.
  +      archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
  +    else
  +      archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
  +    fi
  +    hardcode_libdir_flag_spec='-L$libdir'
  +    hardcode_direct=yes
  +    hardcode_minus_L=yes
  +    hardcode_shlibpath_var=no
  +    ;;
  +
  +  sysv4)
  +    if test "x$host_vendor" = xsno; then
  +      archive_cmds='$LD -G -Bsymbolic -h $soname -o $lib $libobjs $deplibs $linkopts'
  +      hardcode_direct=yes # is this really true???
  +    else
  +      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
  +      hardcode_direct=no #Motorola manual says yes, but my tests say they lie
  +    fi
  +    runpath_var='LD_RUN_PATH'
  +    hardcode_shlibpath_var=no
  +    ;;
  +
  +  sysv4.3*)
  +    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
  +    hardcode_shlibpath_var=no
  +    export_dynamic_flag_spec='-Bexport'
  +    ;;
  +
  +  sysv5*)
  +    no_undefined_flag=' -z text'
  +    # $CC -shared without GNU ld will not create a library from C++
  +    # object files and a static libstdc++, better avoid it by now
  +    archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
  +    archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
  +		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
  +    hardcode_libdir_flag_spec=
  +    hardcode_shlibpath_var=no
  +    runpath_var='LD_RUN_PATH'
  +    ;;
  +
  +  uts4*)
  +    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
  +    hardcode_libdir_flag_spec='-L$libdir'
  +    hardcode_shlibpath_var=no
  +    ;;
  +
  +  dgux*)
  +    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
  +    hardcode_libdir_flag_spec='-L$libdir'
  +    hardcode_shlibpath_var=no
  +    ;;
  +
  +  sysv4*MP*)
  +    if test -d /usr/nec; then
  +      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
  +      hardcode_shlibpath_var=no
  +      runpath_var=LD_RUN_PATH
  +      hardcode_runpath_var=yes
  +      ld_shlibs=yes
  +    fi
  +    ;;
  +
  +  sysv4.2uw2*)
  +    archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
  +    hardcode_direct=yes
  +    hardcode_minus_L=no
  +    hardcode_shlibpath_var=no
  +    hardcode_runpath_var=yes
  +    runpath_var=LD_RUN_PATH
  +    ;;
  +
  +  sysv5uw7* | unixware7*)
  +    no_undefined_flag='${wl}-z ${wl}text'
  +    if test "$GCC" = yes; then
  +      archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
  +    else
  +      archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
  +    fi
  +    runpath_var='LD_RUN_PATH'
  +    hardcode_shlibpath_var=no
  +    ;;
  +
  +  *)
  +    ld_shlibs=no
  +    ;;
  +  esac
  +fi
  +echo "$as_me:5019: result: $ld_shlibs" >&5
  +echo "${ECHO_T}$ld_shlibs" >&6
  +test "$ld_shlibs" = no && can_build_shared=no
  +##
  +## END FIXME
  +
  +## FIXME: this should be a separate macro
  +##
  +# Check hardcoding attributes.
  +echo "$as_me:5028: checking how to hardcode library paths into programs" >&5
  +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
  +hardcode_action=
  +if test -n "$hardcode_libdir_flag_spec" || \
  +   test -n "$runpath_var"; then
  +
  +  # We can hardcode non-existant directories.
  +  if test "$hardcode_direct" != no &&
  +     # If the only mechanism to avoid hardcoding is shlibpath_var, we
  +     # have to relink, otherwise we might link with an installed library
  +     # when we should be linking with a yet-to-be-installed one
  +     ## test "$hardcode_shlibpath_var" != no &&
  +     test "$hardcode_minus_L" != no; then
  +    # Linking always hardcodes the temporary library directory.
  +    hardcode_action=relink
  +  else
  +    # We can link without hardcoding, and we can hardcode nonexisting dirs.
  +    hardcode_action=immediate
  +  fi
  +else
  +  # We cannot hardcode anything, or else we can only hardcode existing
  +  # directories.
  +  hardcode_action=unsupported
  +fi
  +echo "$as_me:5052: result: $hardcode_action" >&5
  +echo "${ECHO_T}$hardcode_action" >&6
  +##
  +## END FIXME
  +
  +## FIXME: this should be a separate macro
  +##
  +striplib=
  +old_striplib=
  +echo "$as_me:5061: checking whether stripping libraries is possible" >&5
  +echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
  +if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
  +  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
  +  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
  +  echo "$as_me:5066: result: yes" >&5
  +echo "${ECHO_T}yes" >&6
  +else
  +  echo "$as_me:5069: result: no" >&5
  +echo "${ECHO_T}no" >&6
  +fi
  +##
  +## END FIXME
  +
  +reload_cmds='$LD$reload_flag -o $output$reload_objs'
  +test -z "$deplibs_check_method" && deplibs_check_method=unknown
  +
  +## FIXME: this should be a separate macro
  +##
  +# PORTME Fill in your ld.so characteristics
  +echo "$as_me:5081: checking dynamic linker characteristics" >&5
  +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
  +library_names_spec=
  +libname_spec='lib$name'
  +soname_spec=
  +postinstall_cmds=
  +postuninstall_cmds=
  +finish_cmds=
  +finish_eval=
  +shlibpath_var=
  +shlibpath_overrides_runpath=unknown
  +version_type=none
  +dynamic_linker="$host_os ld.so"
  +sys_lib_dlsearch_path_spec="/lib /usr/lib"
  +sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
  +
  +case $host_os in
  +aix3*)
  +  version_type=linux
  +  library_names_spec='${libname}${release}.so$versuffix $libname.a'
  +  shlibpath_var=LIBPATH
  +
  +  # AIX has no versioning support, so we append a major version to the name.
  +  soname_spec='${libname}${release}.so$major'
  +  ;;
  +
  +aix4* | aix5*)
  +  version_type=linux
  +  if test "$host_cpu" = ia64; then
  +    # AIX 5 supports IA64
  +    library_names_spec='${libname}${release}.so$major ${libname}${release}.so$versuffix $libname.so'
  +    shlibpath_var=LD_LIBRARY_PATH
  +  else
  +    # With GCC up to 2.95.x, collect2 would create an import file
  +    # for dependence libraries.  The import file would start with
  +    # the line `#! .'.  This would cause the generated library to
  +    # depend on `.', always an invalid library.  This was fixed in
  +    # development snapshots of GCC prior to 3.0.
  +    case $host_os in
  +       aix4 | aix4.[01] | aix4.[01].*)
  +      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
  +           echo ' yes '
  +           echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
  +        :
  +      else
  +        can_build_shared=no
  +      fi
  +      ;;
  +    esac
  +    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
  +    # soname into executable. Probably we can add versioning support to
  +    # collect2, so additional links can be useful in future.
  +    if test "$aix_use_runtimelinking" = yes; then
  +      # If using run time linking (on AIX 4.2 or later) use lib<name>.so instead of
  +      # lib<name>.a to let people know that these are not typical AIX shared libraries.
  +      library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
  +    else
  +      # We preserve .a as extension for shared libraries through AIX4.2
  +      # and later when we are not doing run time linking.
  +      library_names_spec='${libname}${release}.a $libname.a'
  +      soname_spec='${libname}${release}.so$major'
  +    fi
  +    shlibpath_var=LIBPATH
  +    deplibs_check_method=pass_all
  +  fi
  +  ;;
  +
  +amigaos*)
  +  library_names_spec='$libname.ixlibrary $libname.a'
  +  # Create ${libname}_ixlibrary.a entries in /sys/libs.
  +  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
  +  ;;
  +
  +beos*)
  +  library_names_spec='${libname}.so'
  +  dynamic_linker="$host_os ld.so"
  +  shlibpath_var=LIBRARY_PATH
  +  ;;
  +
  +bsdi4*)
  +  version_type=linux
  +  need_version=no
  +  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
  +  soname_spec='${libname}${release}.so$major'
  +  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
  +  shlibpath_var=LD_LIBRARY_PATH
  +  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
  +  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
  +  export_dynamic_flag_spec=-rdynamic
  +  # the default ld.so.conf also contains /usr/contrib/lib and
  +  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
  +  # libtool to hard-code these into programs
  +  ;;
  +
  +cygwin* | mingw* | pw32*)
  +  version_type=windows
  +  need_version=no
  +  need_lib_prefix=no
  +  case $GCC,$host_os in
  +  yes,cygwin*)
  +    library_names_spec='$libname.dll.a'
  +    soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll'
  +    postinstall_cmds='dlpath=`bash 2>&1 -c '\''. $dir/${file}i;echo \$dlname'\''`~
  +      dldir=$destdir/`dirname \$dlpath`~
  +      test -d \$dldir || mkdir -p \$dldir~
  +      $install_prog .libs/$dlname \$dldir/$dlname'
  +    postuninstall_cmds='dldll=`bash 2>&1 -c '\''. $file; echo \$dlname'\''`~
  +      dlpath=$dir/\$dldll~
  +       $rm \$dlpath'
  +    ;;
  +  yes,mingw*)
  +    library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll'
  +    sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | sed -e "s/^libraries://" -e "s/;/ /g"`
  +    ;;
  +  yes,pw32*)
  +    library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | sed -e 's/./-/g'`${versuffix}.dll'
  +    ;;
  +  *)
  +    library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.lib'
  +    ;;
  +  esac
  +  dynamic_linker='Win32 ld.exe'
  +  # FIXME: first we should search . and the directory the executable is in
  +  shlibpath_var=PATH
  +  ;;
  +
  +darwin* | rhapsody*)
  +  dynamic_linker="$host_os dyld"
  +  version_type=darwin
  +  need_lib_prefix=no
  +  need_version=no
  +  # FIXME: Relying on posixy $() will cause problems for
  +  #        cross-compilation, but unfortunately the echo tests do not
  +  #        yet detect zsh echo's removal of \ escapes.
  +  library_names_spec='${libname}${release}${versuffix}.$(test .$module = .yes && echo so || echo dylib) ${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib) ${libname}.$(test .$module = .yes && echo so || echo dylib)'
  +  soname_spec='${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib)'
  +  shlibpath_overrides_runpath=yes
  +  shlibpath_var=DYLD_LIBRARY_PATH
  +  ;;
  +
  +freebsd1*)
  +  dynamic_linker=no
  +  ;;
  +
  +freebsd*)
  +  objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
  +  version_type=freebsd-$objformat
  +  case $version_type in
  +    freebsd-elf*)
  +      library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
  +      need_version=no
  +      need_lib_prefix=no
  +      ;;
  +    freebsd-*)
  +      library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix'
  +      need_version=yes
  +      ;;
  +  esac
  +  shlibpath_var=LD_LIBRARY_PATH
  +  case $host_os in
  +  freebsd2*)
  +    shlibpath_overrides_runpath=yes
  +    ;;
  +  *)
  +    shlibpath_overrides_runpath=no
  +    hardcode_into_libs=yes
  +    ;;
  +  esac
  +  ;;
  +
  +gnu*)
  +  version_type=linux
  +  need_lib_prefix=no
  +  need_version=no
  +  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so'
  +  soname_spec='${libname}${release}.so$major'
  +  shlibpath_var=LD_LIBRARY_PATH
  +  hardcode_into_libs=yes
  +  ;;
  +
  +hpux9* | hpux10* | hpux11*)
  +  # Give a soname corresponding to the major version so that dld.sl refuses to
  +  # link against other versions.
  +  dynamic_linker="$host_os dld.sl"
  +  version_type=sunos
  +  need_lib_prefix=no
  +  need_version=no
  +  shlibpath_var=SHLIB_PATH
  +  shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
  +  library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl'
  +  soname_spec='${libname}${release}.sl$major'
  +  # HP-UX runs *really* slowly unless shared libraries are mode 555.
  +  postinstall_cmds='chmod 555 $lib'
  +  ;;
  +
  +irix5* | irix6*)
  +  version_type=irix
  +  need_lib_prefix=no
  +  need_version=no
  +  soname_spec='${libname}${release}.so$major'
  +  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so $libname.so'
  +  case $host_os in
  +  irix5*)
  +    libsuff= shlibsuff=
  +    ;;
  +  *)
  +    case $LD in # libtool.m4 will add one of these switches to LD
  +    *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;;
  +    *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;;
  +    *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;;
  +    *) libsuff= shlibsuff= libmagic=never-match;;
  +    esac
  +    ;;
  +  esac
  +  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
  +  shlibpath_overrides_runpath=no
  +  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
  +  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
  +  ;;
  +
  +# No shared lib support for Linux oldld, aout, or coff.
  +linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*)
  +  dynamic_linker=no
  +  ;;
  +
  +# This must be Linux ELF.
  +linux-gnu*)
  +  version_type=linux
  +  need_lib_prefix=no
  +  need_version=no
  +  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
  +  soname_spec='${libname}${release}.so$major'
  +  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
  +  shlibpath_var=LD_LIBRARY_PATH
  +  shlibpath_overrides_runpath=no
  +  # This implies no fast_install, which is unacceptable.
  +  # Some rework will be needed to allow for fast_install
  +  # before this can be enabled.
  +  hardcode_into_libs=yes
  +
  +  # We used to test for /lib/ld.so.1 and disable shared libraries on
  +  # powerpc, because MkLinux only supported shared libraries with the
  +  # GNU dynamic linker.  Since this was broken with cross compilers,
  +  # most powerpc-linux boxes support dynamic linking these days and
  +  # people can always --disable-shared, the test was removed, and we
  +  # assume the GNU/Linux dynamic linker is in use.
  +  dynamic_linker='GNU/Linux ld.so'
  +  ;;
  +
  +netbsd*)
  +  version_type=sunos
  +  need_lib_prefix=no
  +  need_version=no
  +  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
  +    library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
  +    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
  +    dynamic_linker='NetBSD (a.out) ld.so'
  +  else
  +    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so'
  +    soname_spec='${libname}${release}.so$major'
  +    dynamic_linker='NetBSD ld.elf_so'
  +  fi
  +  shlibpath_var=LD_LIBRARY_PATH
  +  shlibpath_overrides_runpath=yes
  +  hardcode_into_libs=yes
  +  ;;
  +
  +newsos6)
  +  version_type=linux
  +  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
  +  shlibpath_var=LD_LIBRARY_PATH
  +  shlibpath_overrides_runpath=yes
  +  ;;
  +
  +openbsd*)
  +  version_type=sunos
  +  if test "$with_gnu_ld" = yes; then
  +    need_lib_prefix=no
  +    need_version=no
  +  fi
  +  library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
  +  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
  +  shlibpath_var=LD_LIBRARY_PATH
  +  ;;
  +
  +os2*)
  +  libname_spec='$name'
  +  need_lib_prefix=no
  +  library_names_spec='$libname.dll $libname.a'
  +  dynamic_linker='OS/2 ld.exe'
  +  shlibpath_var=LIBPATH
  +  ;;
  +
  +osf3* | osf4* | osf5*)
  +  version_type=osf
  +  need_version=no
  +  soname_spec='${libname}${release}.so'
  +  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
  +  shlibpath_var=LD_LIBRARY_PATH
  +  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
  +  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
  +  ;;
  +
  +sco3.2v5*)
  +  version_type=osf
  +  soname_spec='${libname}${release}.so$major'
  +  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
  +  shlibpath_var=LD_LIBRARY_PATH
  +  ;;
  +
  +solaris*)
  +  version_type=linux
  +  need_lib_prefix=no
  +  need_version=no
  +  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
  +  soname_spec='${libname}${release}.so$major'
  +  shlibpath_var=LD_LIBRARY_PATH
  +  shlibpath_overrides_runpath=yes
  +  hardcode_into_libs=yes
  +  # ldd complains unless libraries are executable
  +  postinstall_cmds='chmod +x $lib'
  +  ;;
  +
  +sunos4*)
  +  version_type=sunos
  +  library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
  +  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
  +  shlibpath_var=LD_LIBRARY_PATH
  +  shlibpath_overrides_runpath=yes
  +  if test "$with_gnu_ld" = yes; then
  +    need_lib_prefix=no
  +  fi
  +  need_version=yes
  +  ;;
  +
  +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
  +  version_type=linux
  +  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
  +  soname_spec='${libname}${release}.so$major'
  +  shlibpath_var=LD_LIBRARY_PATH
  +  case $host_vendor in
  +    sni)
  +      shlibpath_overrides_runpath=no
  +      ;;
  +    motorola)
  +      need_lib_prefix=no
  +      need_version=no
  +      shlibpath_overrides_runpath=no
  +      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
  +      ;;
  +  esac
  +  ;;
  +
  +uts4*)
  +  version_type=linux
  +  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
  +  soname_spec='${libname}${release}.so$major'
  +  shlibpath_var=LD_LIBRARY_PATH
  +  ;;
  +
  +dgux*)
  +  version_type=linux
  +  need_lib_prefix=no
  +  need_version=no
  +  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
  +  soname_spec='${libname}${release}.so$major'
  +  shlibpath_var=LD_LIBRARY_PATH
  +  ;;
  +
  +sysv4*MP*)
  +  if test -d /usr/nec ;then
  +    version_type=linux
  +    library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so'
  +    soname_spec='$libname.so.$major'
  +    shlibpath_var=LD_LIBRARY_PATH
  +  fi
  +  ;;
  +
  +*)
  +  dynamic_linker=no
  +  ;;
  +esac
  +echo "$as_me:5463: result: $dynamic_linker" >&5
  +echo "${ECHO_T}$dynamic_linker" >&6
  +test "$dynamic_linker" = no && can_build_shared=no
  +##
  +## END FIXME
  +
  +## FIXME: this should be a separate macro
  +##
  +# Report the final consequences.
  +echo "$as_me:5472: checking if libtool supports shared libraries" >&5
  +echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6
  +echo "$as_me:5474: result: $can_build_shared" >&5
  +echo "${ECHO_T}$can_build_shared" >&6
  +##
  +## END FIXME
  +
  +if test "$hardcode_action" = relink; then
  +  # Fast installation is not supported
  +  enable_fast_install=no
  +elif test "$shlibpath_overrides_runpath" = yes ||
  +     test "$enable_shared" = no; then
  +  # Fast installation is not necessary
  +  enable_fast_install=needless
  +fi
  +
  +variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
  +if test "$GCC" = yes; then
  +  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
  +fi
  +
  +if test "x$enable_dlopen" != xyes; then
  +  enable_dlopen=unknown
  +  enable_dlopen_self=unknown
  +  enable_dlopen_self_static=unknown
  +else
  +  lt_cv_dlopen=no
  +  lt_cv_dlopen_libs=
  +
  +  case $host_os in
  +  beos*)
  +    lt_cv_dlopen="load_add_on"
  +    lt_cv_dlopen_libs=
  +    lt_cv_dlopen_self=yes
  +    ;;
  +
  +  cygwin* | mingw* | pw32*)
  +    lt_cv_dlopen="LoadLibrary"
  +    lt_cv_dlopen_libs=
  +   ;;
  +
  +  *)
  +    echo "$as_me:5514: checking for dlopen in -ldl" >&5
  +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
  +if test "${ac_cv_lib_dl_dlopen+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  ac_check_lib_save_LIBS=$LIBS
  +LIBS="-ldl  $LIBS"
  +cat >conftest.$ac_ext <<_ACEOF
  +#line 5522 "configure"
  +#include "confdefs.h"
  +
  +/* Override any gcc2 internal prototype to avoid an error.  */
  +#ifdef __cplusplus
  +extern "C"
  +#endif
  +/* We use char because int might match the return type of a gcc2
  +   builtin and then its argument prototype would still apply.  */
  +char dlopen ();
  +int
  +main ()
  +{
  +dlopen ();
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext conftest$ac_exeext
  +if { (eval echo "$as_me:5541: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:5544: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest$ac_exeext'
  +  { (eval echo "$as_me:5547: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:5550: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_cv_lib_dl_dlopen=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_lib_dl_dlopen=no
  +fi
  +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  +LIBS=$ac_check_lib_save_LIBS
  +fi
  +echo "$as_me:5561: result: $ac_cv_lib_dl_dlopen" >&5
  +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
  +if test $ac_cv_lib_dl_dlopen = yes; then
  +  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
  +else
  +  echo "$as_me:5566: checking for dlopen" >&5
  +echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
  +if test "${ac_cv_func_dlopen+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 5572 "configure"
  +#include "confdefs.h"
  +/* System header to define __stub macros and hopefully few prototypes,
  +    which can conflict with char dlopen (); below.  */
  +#include <assert.h>
  +/* Override any gcc2 internal prototype to avoid an error.  */
  +#ifdef __cplusplus
  +extern "C"
  +#endif
  +/* We use char because int might match the return type of a gcc2
  +   builtin and then its argument prototype would still apply.  */
  +char dlopen ();
  +char (*f) ();
  +
  +int
  +main ()
  +{
  +/* The GNU C library defines this for functions which it implements
  +    to always fail with ENOSYS.  Some functions are actually named
  +    something starting with __ and the normal name is an alias.  */
  +#if defined (__stub_dlopen) || defined (__stub___dlopen)
  +choke me
  +#else
  +f = dlopen;
  +#endif
  +
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext conftest$ac_exeext
  +if { (eval echo "$as_me:5603: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:5606: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest$ac_exeext'
  +  { (eval echo "$as_me:5609: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:5612: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_cv_func_dlopen=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_func_dlopen=no
  +fi
  +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  +fi
  +echo "$as_me:5622: result: $ac_cv_func_dlopen" >&5
  +echo "${ECHO_T}$ac_cv_func_dlopen" >&6
  +if test $ac_cv_func_dlopen = yes; then
  +  lt_cv_dlopen="dlopen"
  +else
  +  echo "$as_me:5627: checking for shl_load" >&5
  +echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
  +if test "${ac_cv_func_shl_load+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 5633 "configure"
  +#include "confdefs.h"
  +/* System header to define __stub macros and hopefully few prototypes,
  +    which can conflict with char shl_load (); below.  */
  +#include <assert.h>
  +/* Override any gcc2 internal prototype to avoid an error.  */
  +#ifdef __cplusplus
  +extern "C"
  +#endif
  +/* We use char because int might match the return type of a gcc2
  +   builtin and then its argument prototype would still apply.  */
  +char shl_load ();
  +char (*f) ();
  +
  +int
  +main ()
  +{
  +/* The GNU C library defines this for functions which it implements
  +    to always fail with ENOSYS.  Some functions are actually named
  +    something starting with __ and the normal name is an alias.  */
  +#if defined (__stub_shl_load) || defined (__stub___shl_load)
  +choke me
  +#else
  +f = shl_load;
  +#endif
  +
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext conftest$ac_exeext
  +if { (eval echo "$as_me:5664: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:5667: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest$ac_exeext'
  +  { (eval echo "$as_me:5670: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:5673: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_cv_func_shl_load=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_func_shl_load=no
  +fi
  +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  +fi
  +echo "$as_me:5683: result: $ac_cv_func_shl_load" >&5
  +echo "${ECHO_T}$ac_cv_func_shl_load" >&6
  +if test $ac_cv_func_shl_load = yes; then
  +  lt_cv_dlopen="shl_load"
  +else
  +  echo "$as_me:5688: checking for dlopen in -lsvld" >&5
  +echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
  +if test "${ac_cv_lib_svld_dlopen+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  ac_check_lib_save_LIBS=$LIBS
  +LIBS="-lsvld  $LIBS"
  +cat >conftest.$ac_ext <<_ACEOF
  +#line 5696 "configure"
  +#include "confdefs.h"
  +
  +/* Override any gcc2 internal prototype to avoid an error.  */
  +#ifdef __cplusplus
  +extern "C"
  +#endif
  +/* We use char because int might match the return type of a gcc2
  +   builtin and then its argument prototype would still apply.  */
  +char dlopen ();
  +int
  +main ()
  +{
  +dlopen ();
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext conftest$ac_exeext
  +if { (eval echo "$as_me:5715: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:5718: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest$ac_exeext'
  +  { (eval echo "$as_me:5721: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:5724: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_cv_lib_svld_dlopen=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_lib_svld_dlopen=no
  +fi
  +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  +LIBS=$ac_check_lib_save_LIBS
  +fi
  +echo "$as_me:5735: result: $ac_cv_lib_svld_dlopen" >&5
  +echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
  +if test $ac_cv_lib_svld_dlopen = yes; then
  +  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
  +else
  +  echo "$as_me:5740: checking for shl_load in -ldld" >&5
  +echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
  +if test "${ac_cv_lib_dld_shl_load+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  ac_check_lib_save_LIBS=$LIBS
  +LIBS="-ldld  $LIBS"
  +cat >conftest.$ac_ext <<_ACEOF
  +#line 5748 "configure"
  +#include "confdefs.h"
  +
  +/* Override any gcc2 internal prototype to avoid an error.  */
  +#ifdef __cplusplus
  +extern "C"
  +#endif
  +/* We use char because int might match the return type of a gcc2
  +   builtin and then its argument prototype would still apply.  */
  +char shl_load ();
  +int
  +main ()
  +{
  +shl_load ();
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext conftest$ac_exeext
  +if { (eval echo "$as_me:5767: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:5770: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest$ac_exeext'
  +  { (eval echo "$as_me:5773: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:5776: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_cv_lib_dld_shl_load=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_lib_dld_shl_load=no
  +fi
  +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  +LIBS=$ac_check_lib_save_LIBS
  +fi
  +echo "$as_me:5787: result: $ac_cv_lib_dld_shl_load" >&5
  +echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
  +if test $ac_cv_lib_dld_shl_load = yes; then
  +  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
  +fi
  +
  +fi
  +
  +fi
  +
  +fi
  +
  +fi
  +
  +    ;;
  +  esac
  +
  +  if test "x$lt_cv_dlopen" != xno; then
  +    enable_dlopen=yes
  +  else
  +    enable_dlopen=no
  +  fi
  +
  +  case $lt_cv_dlopen in
  +  dlopen)
  +    save_CPPFLAGS="$CPPFLAGS"
  +        test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
  +
  +    save_LDFLAGS="$LDFLAGS"
  +    eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
  +
  +    save_LIBS="$LIBS"
  +    LIBS="$lt_cv_dlopen_libs $LIBS"
  +
  +    echo "$as_me:5821: checking whether a program can dlopen itself" >&5
  +echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
  +if test "${lt_cv_dlopen_self+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  	  if test "$cross_compiling" = yes; then :
  +  lt_cv_dlopen_self=cross
  +else
  +    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
  +  lt_status=$lt_dlunknown
  +  cat > conftest.$ac_ext <<EOF
  +#line 5832 "configure"
  +#include "confdefs.h"
  +
  +#if HAVE_DLFCN_H
  +#include <dlfcn.h>
  +#endif
  +
  +#include <stdio.h>
  +
  +#ifdef RTLD_GLOBAL
  +#  define LT_DLGLOBAL		RTLD_GLOBAL
  +#else
  +#  ifdef DL_GLOBAL
  +#    define LT_DLGLOBAL		DL_GLOBAL
  +#  else
  +#    define LT_DLGLOBAL		0
  +#  endif
  +#endif
  +
  +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
  +   find out it does not work in some platform. */
  +#ifndef LT_DLLAZY_OR_NOW
  +#  ifdef RTLD_LAZY
  +#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
  +#  else
  +#    ifdef DL_LAZY
  +#      define LT_DLLAZY_OR_NOW		DL_LAZY
  +#    else
  +#      ifdef RTLD_NOW
  +#        define LT_DLLAZY_OR_NOW	RTLD_NOW
  +#      else
  +#        ifdef DL_NOW
  +#          define LT_DLLAZY_OR_NOW	DL_NOW
  +#        else
  +#          define LT_DLLAZY_OR_NOW	0
  +#        endif
  +#      endif
  +#    endif
  +#  endif
  +#endif
  +
  +#ifdef __cplusplus
  +extern "C" void exit (int);
  +#endif
  +
  +void fnord() { int i=42;}
  +int main ()
  +{
  +  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
  +  int status = $lt_dlunknown;
  +
  +  if (self)
  +    {
  +      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
  +      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
  +      /* dlclose (self); */
  +    }
  +
  +    exit (status);
  +}
  +EOF
  +  if { (eval echo "$as_me:5893: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:5896: \$? = $ac_status" >&5
  +  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
  +    (./conftest; exit; ) 2>/dev/null
  +    lt_status=$?
  +    case x$lt_status in
  +      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
  +      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
  +      x$lt_unknown|x*) lt_cv_dlopen_self=no ;;
  +    esac
  +  else :
  +    # compilation failed
  +    lt_cv_dlopen_self=no
  +  fi
  +fi
  +rm -fr conftest*
  +
  +fi
  +echo "$as_me:5913: result: $lt_cv_dlopen_self" >&5
  +echo "${ECHO_T}$lt_cv_dlopen_self" >&6
  +
  +    if test "x$lt_cv_dlopen_self" = xyes; then
  +      LDFLAGS="$LDFLAGS $link_static_flag"
  +      echo "$as_me:5918: checking whether a statically linked program can dlopen itself" >&5
  +echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
  +if test "${lt_cv_dlopen_self_static+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  	  if test "$cross_compiling" = yes; then :
  +  lt_cv_dlopen_self_static=cross
  +else
  +    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
  +  lt_status=$lt_dlunknown
  +  cat > conftest.$ac_ext <<EOF
  +#line 5929 "configure"
  +#include "confdefs.h"
  +
  +#if HAVE_DLFCN_H
  +#include <dlfcn.h>
  +#endif
  +
  +#include <stdio.h>
  +
  +#ifdef RTLD_GLOBAL
  +#  define LT_DLGLOBAL		RTLD_GLOBAL
  +#else
  +#  ifdef DL_GLOBAL
  +#    define LT_DLGLOBAL		DL_GLOBAL
  +#  else
  +#    define LT_DLGLOBAL		0
  +#  endif
  +#endif
  +
  +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
  +   find out it does not work in some platform. */
  +#ifndef LT_DLLAZY_OR_NOW
  +#  ifdef RTLD_LAZY
  +#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
  +#  else
  +#    ifdef DL_LAZY
  +#      define LT_DLLAZY_OR_NOW		DL_LAZY
  +#    else
  +#      ifdef RTLD_NOW
  +#        define LT_DLLAZY_OR_NOW	RTLD_NOW
  +#      else
  +#        ifdef DL_NOW
  +#          define LT_DLLAZY_OR_NOW	DL_NOW
  +#        else
  +#          define LT_DLLAZY_OR_NOW	0
  +#        endif
  +#      endif
  +#    endif
  +#  endif
  +#endif
  +
  +#ifdef __cplusplus
  +extern "C" void exit (int);
  +#endif
  +
  +void fnord() { int i=42;}
  +int main ()
  +{
  +  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
  +  int status = $lt_dlunknown;
  +
  +  if (self)
  +    {
  +      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
  +      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
  +      /* dlclose (self); */
  +    }
  +
  +    exit (status);
  +}
  +EOF
  +  if { (eval echo "$as_me:5990: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:5993: \$? = $ac_status" >&5
  +  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
  +    (./conftest; exit; ) 2>/dev/null
  +    lt_status=$?
  +    case x$lt_status in
  +      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
  +      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
  +      x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;;
  +    esac
  +  else :
  +    # compilation failed
  +    lt_cv_dlopen_self_static=no
  +  fi
  +fi
  +rm -fr conftest*
  +
  +fi
  +echo "$as_me:6010: result: $lt_cv_dlopen_self_static" >&5
  +echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6
  +    fi
  +
  +    CPPFLAGS="$save_CPPFLAGS"
  +    LDFLAGS="$save_LDFLAGS"
  +    LIBS="$save_LIBS"
  +    ;;
  +  esac
  +
  +  case $lt_cv_dlopen_self in
  +  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
  +  *) enable_dlopen_self=unknown ;;
  +  esac
  +
  +  case $lt_cv_dlopen_self_static in
  +  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
  +  *) enable_dlopen_self_static=unknown ;;
  +  esac
  +fi
  +
  +## FIXME: this should be a separate macro
  +##
  +if test "$enable_shared" = yes && test "$GCC" = yes; then
  +  case $archive_cmds in
  +  *'~'*)
  +    # FIXME: we may have to deal with multi-command sequences.
  +    ;;
  +  '$CC '*)
  +    # Test whether the compiler implicitly links with -lc since on some
  +    # systems, -lgcc has to come before -lc. If gcc already passes -lc
  +    # to ld, don't add -lc before -lgcc.
  +    echo "$as_me:6042: checking whether -lc should be explicitly linked in" >&5
  +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
  +    if test "${lt_cv_archive_cmds_need_lc+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  $rm conftest*
  +    echo 'static int dummy;' > conftest.$ac_ext
  +
  +    if { (eval echo "$as_me:6050: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:6053: \$? = $ac_status" >&5
  +  (exit $ac_status); }; then
  +      soname=conftest
  +      lib=conftest
  +      libobjs=conftest.$ac_objext
  +      deplibs=
  +      wl=$lt_cv_prog_cc_wl
  +      compiler_flags=-v
  +      linker_flags=-v
  +      verstring=
  +      output_objdir=.
  +      libname=conftest
  +      save_allow_undefined_flag=$allow_undefined_flag
  +      allow_undefined_flag=
  +      if { (eval echo "$as_me:6067: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
  +  (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
  +  ac_status=$?
  +  echo "$as_me:6070: \$? = $ac_status" >&5
  +  (exit $ac_status); }
  +      then
  +	lt_cv_archive_cmds_need_lc=no
  +      else
  +	lt_cv_archive_cmds_need_lc=yes
  +      fi
  +      allow_undefined_flag=$save_allow_undefined_flag
  +    else
  +      cat conftest.err 1>&5
  +    fi
  +fi
  +
  +    echo "$as_me:6083: result: $lt_cv_archive_cmds_need_lc" >&5
  +echo "${ECHO_T}$lt_cv_archive_cmds_need_lc" >&6
  +    ;;
  +  esac
  +fi
  +need_lc=${lt_cv_archive_cmds_need_lc-yes}
  +##
  +## END FIXME
  +
  +## FIXME: this should be a separate macro
  +##
  +# The second clause should only fire when bootstrapping the
  +# libtool distribution, otherwise you forgot to ship ltmain.sh
  +# with your package, and you will get complaints that there are
  +# no rules to generate ltmain.sh.
  +if test -f "$ltmain"; then
  +  :
  +else
  +  # If there is no Makefile yet, we rely on a make rule to execute
  +  # `config.status --recheck' to rerun these tests and create the
  +  # libtool script then.
  +  test -f Makefile && make "$ltmain"
  +fi
  +
  +if test -f "$ltmain"; then
  +  trap "$rm \"${ofile}T\"; exit 1" 1 2 15
  +  $rm -f "${ofile}T"
  +
  +  echo creating $ofile
  +
  +  # Now quote all the things that may contain metacharacters while being
  +  # careful not to overquote the AC_SUBSTed values.  We take copies of the
  +  # variables and quote the copies for generation of the libtool script.
  +  for var in echo old_CC old_CFLAGS \
  +    AR AR_FLAGS CC LD LN_S NM SHELL \
  +    reload_flag reload_cmds wl \
  +    pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \
  +    thread_safe_flag_spec whole_archive_flag_spec libname_spec \
  +    library_names_spec soname_spec \
  +    RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \
  +    old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds \
  +    postuninstall_cmds extract_expsyms_cmds old_archive_from_expsyms_cmds \
  +    old_striplib striplib file_magic_cmd export_symbols_cmds \
  +    deplibs_check_method allow_undefined_flag no_undefined_flag \
  +    finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \
  +    hardcode_libdir_flag_spec hardcode_libdir_separator  \
  +    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
  +    compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do
  +
  +    case $var in
  +    reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \
  +    old_postinstall_cmds | old_postuninstall_cmds | \
  +    export_symbols_cmds | archive_cmds | archive_expsym_cmds | \
  +    extract_expsyms_cmds | old_archive_from_expsyms_cmds | \
  +    postinstall_cmds | postuninstall_cmds | \
  +    finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
  +      # Double-quote double-evaled strings.
  +      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
  +      ;;
  +    *)
  +      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
  +      ;;
  +    esac
  +  done
  +
  +  cat <<__EOF__ > "${ofile}T"
  +#! $SHELL
  +
  +# `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
  +# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
  +# NOTE: Changes made to this file will be lost: look at ltmain.sh.
  +#
  +# Copyright (C) 1996-2000 Free Software Foundation, Inc.
  +# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
  +#
  +# This program is free software; you can redistribute it and/or modify
  +# it under the terms of the GNU General Public License as published by
  +# the Free Software Foundation; either version 2 of the License, or
  +# (at your option) any later version.
  +#
  +# This program is distributed in the hope that it will be useful, but
  +# WITHOUT ANY WARRANTY; without even the implied warranty of
  +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  +# General Public License for more details.
  +#
  +# You should have received a copy of the GNU General Public License
  +# along with this program; if not, write to the Free Software
  +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  +#
  +# As a special exception to the GNU General Public License, if you
  +# distribute this file as part of a program that contains a
  +# configuration script generated by Autoconf, you may include it under
  +# the same distribution terms that you use for the rest of that program.
  +
  +# Sed that helps us avoid accidentally triggering echo(1) options like -n.
  +Xsed="sed -e s/^X//"
  +
  +# The HP-UX ksh and POSIX shell print the target directory to stdout
  +# if CDPATH is set.
  +if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
  +
  +# ### BEGIN LIBTOOL CONFIG
  +
  +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
  +
  +# Shell to use when invoking shell scripts.
  +SHELL=$lt_SHELL
  +
  +# Whether or not to build shared libraries.
  +build_libtool_libs=$enable_shared
  +
  +# Whether or not to add -lc for building shared libraries.
  +build_libtool_need_lc=$need_lc
  +
  +# Whether or not to build static libraries.
  +build_old_libs=$enable_static
  +
  +# Whether or not to optimize for fast installation.
  +fast_install=$enable_fast_install
  +
  +# The host system.
  +host_alias=$host_alias
  +host=$host
  +
  +# An echo program that does not interpret backslashes.
  +echo=$lt_echo
  +
  +# The archiver.
  +AR=$lt_AR
  +AR_FLAGS=$lt_AR_FLAGS
  +
  +# The default C compiler.
  +CC=$lt_CC
  +
  +# Is the compiler the GNU C compiler?
  +with_gcc=$GCC
  +
  +# The linker used to build libraries.
  +LD=$lt_LD
  +
  +# Whether we need hard or soft links.
  +LN_S=$lt_LN_S
  +
  +# A BSD-compatible nm program.
  +NM=$lt_NM
  +
  +# A symbol stripping program
  +STRIP=$STRIP
  +
  +# Used to examine libraries when file_magic_cmd begins "file"
  +MAGIC_CMD=$MAGIC_CMD
  +
  +# Used on cygwin: DLL creation program.
  +DLLTOOL="$DLLTOOL"
  +
  +# Used on cygwin: object dumper.
  +OBJDUMP="$OBJDUMP"
  +
  +# Used on cygwin: assembler.
  +AS="$AS"
  +
  +# The name of the directory that contains temporary libtool files.
  +objdir=$objdir
  +
  +# How to create reloadable object files.
  +reload_flag=$lt_reload_flag
  +reload_cmds=$lt_reload_cmds
  +
  +# How to pass a linker flag through the compiler.
  +wl=$lt_wl
  +
  +# Object file suffix (normally "o").
  +objext="$ac_objext"
  +
  +# Old archive suffix (normally "a").
  +libext="$libext"
  +
  +# Executable file suffix (normally "").
  +exeext="$exeext"
  +
  +# Additional compiler flags for building library objects.
  +pic_flag=$lt_pic_flag
  +pic_mode=$pic_mode
  +
  +# Does compiler simultaneously support -c and -o options?
  +compiler_c_o=$lt_compiler_c_o
  +
  +# Can we write directly to a .lo ?
  +compiler_o_lo=$lt_compiler_o_lo
  +
  +# Must we lock files when doing compilation ?
  +need_locks=$lt_need_locks
  +
  +# Do we need the lib prefix for modules?
  +need_lib_prefix=$need_lib_prefix
  +
  +# Do we need a version for libraries?
  +need_version=$need_version
  +
  +# Whether dlopen is supported.
  +dlopen_support=$enable_dlopen
  +
  +# Whether dlopen of programs is supported.
  +dlopen_self=$enable_dlopen_self
  +
  +# Whether dlopen of statically linked programs is supported.
  +dlopen_self_static=$enable_dlopen_self_static
  +
  +# Compiler flag to prevent dynamic linking.
  +link_static_flag=$lt_link_static_flag
  +
  +# Compiler flag to turn off builtin functions.
  +no_builtin_flag=$lt_no_builtin_flag
  +
  +# Compiler flag to allow reflexive dlopens.
  +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
  +
  +# Compiler flag to generate shared objects directly from archives.
  +whole_archive_flag_spec=$lt_whole_archive_flag_spec
  +
  +# Compiler flag to generate thread-safe objects.
  +thread_safe_flag_spec=$lt_thread_safe_flag_spec
  +
  +# Library versioning type.
  +version_type=$version_type
  +
  +# Format of library name prefix.
  +libname_spec=$lt_libname_spec
  +
  +# List of archive names.  First name is the real one, the rest are links.
  +# The last name is the one that the linker finds with -lNAME.
  +library_names_spec=$lt_library_names_spec
  +
  +# The coded name of the library, if different from the real name.
  +soname_spec=$lt_soname_spec
  +
  +# Commands used to build and install an old-style archive.
  +RANLIB=$lt_RANLIB
  +old_archive_cmds=$lt_old_archive_cmds
  +old_postinstall_cmds=$lt_old_postinstall_cmds
  +old_postuninstall_cmds=$lt_old_postuninstall_cmds
  +
  +# Create an old-style archive from a shared archive.
  +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
  +
  +# Create a temporary old-style archive to link instead of a shared archive.
  +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
  +
  +# Commands used to build and install a shared archive.
  +archive_cmds=$lt_archive_cmds
  +archive_expsym_cmds=$lt_archive_expsym_cmds
  +postinstall_cmds=$lt_postinstall_cmds
  +postuninstall_cmds=$lt_postuninstall_cmds
  +
  +# Commands to strip libraries.
  +old_striplib=$lt_old_striplib
  +striplib=$lt_striplib
  +
  +# Method to check whether dependent libraries are shared objects.
  +deplibs_check_method=$lt_deplibs_check_method
  +
  +# Command to use when deplibs_check_method == file_magic.
  +file_magic_cmd=$lt_file_magic_cmd
  +
  +# Flag that allows shared libraries with undefined symbols to be built.
  +allow_undefined_flag=$lt_allow_undefined_flag
  +
  +# Flag that forces no undefined symbols.
  +no_undefined_flag=$lt_no_undefined_flag
  +
  +# Commands used to finish a libtool library installation in a directory.
  +finish_cmds=$lt_finish_cmds
  +
  +# Same as above, but a single script fragment to be evaled but not shown.
  +finish_eval=$lt_finish_eval
  +
  +# Take the output of nm and produce a listing of raw symbols and C names.
  +global_symbol_pipe=$lt_global_symbol_pipe
  +
  +# Transform the output of nm in a proper C declaration
  +global_symbol_to_cdecl=$lt_global_symbol_to_cdecl
  +
  +# This is the shared library runtime path variable.
  +runpath_var=$runpath_var
  +
  +# This is the shared library path variable.
  +shlibpath_var=$shlibpath_var
  +
  +# Is shlibpath searched before the hard-coded library search path?
  +shlibpath_overrides_runpath=$shlibpath_overrides_runpath
  +
  +# How to hardcode a shared library path into an executable.
  +hardcode_action=$hardcode_action
  +
  +# Whether we should hardcode library paths into libraries.
  +hardcode_into_libs=$hardcode_into_libs
  +
  +# Flag to hardcode \$libdir into a binary during linking.
  +# This must work even if \$libdir does not exist.
  +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
  +
  +# Whether we need a single -rpath flag with a separated argument.
  +hardcode_libdir_separator=$lt_hardcode_libdir_separator
  +
  +# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
  +# resulting binary.
  +hardcode_direct=$hardcode_direct
  +
  +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
  +# resulting binary.
  +hardcode_minus_L=$hardcode_minus_L
  +
  +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
  +# the resulting binary.
  +hardcode_shlibpath_var=$hardcode_shlibpath_var
  +
  +# Variables whose values should be saved in libtool wrapper scripts and
  +# restored at relink time.
  +variables_saved_for_relink="$variables_saved_for_relink"
  +
  +# Whether libtool must link a program against all its dependency libraries.
  +link_all_deplibs=$link_all_deplibs
  +
  +# Compile-time system search path for libraries
  +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
  +
  +# Run-time system search path for libraries
  +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
  +
  +# Fix the shell variable \$srcfile for the compiler.
  +fix_srcfile_path="$fix_srcfile_path"
  +
  +# Set to yes if exported symbols are required.
  +always_export_symbols=$always_export_symbols
  +
  +# The commands to list exported symbols.
  +export_symbols_cmds=$lt_export_symbols_cmds
  +
  +# The commands to extract the exported symbol list from a shared archive.
  +extract_expsyms_cmds=$lt_extract_expsyms_cmds
  +
  +# Symbols that should not be listed in the preloaded symbols.
  +exclude_expsyms=$lt_exclude_expsyms
  +
  +# Symbols that must always be exported.
  +include_expsyms=$lt_include_expsyms
  +
  +# ### END LIBTOOL CONFIG
  +
  +__EOF__
  +
  +  case $host_os in
  +  aix3*)
  +    cat <<\EOF >> "${ofile}T"
  +
  +# AIX sometimes has problems with the GCC collect2 program.  For some
  +# reason, if we set the COLLECT_NAMES environment variable, the problems
  +# vanish in a puff of smoke.
  +if test "X${COLLECT_NAMES+set}" != Xset; then
  +  COLLECT_NAMES=
  +  export COLLECT_NAMES
  +fi
  +EOF
  +    ;;
  +  esac
  +
  +  case $host_os in
  +  cygwin* | mingw* | pw32* | os2*)
  +    cat <<'EOF' >> "${ofile}T"
  +      # This is a source program that is used to create dlls on Windows
  +      # Don't remove nor modify the starting and closing comments
  +# /* ltdll.c starts here */
  +# #define WIN32_LEAN_AND_MEAN
  +# #include <windows.h>
  +# #undef WIN32_LEAN_AND_MEAN
  +# #include <stdio.h>
  +#
  +# #ifndef __CYGWIN__
  +# #  ifdef __CYGWIN32__
  +# #    define __CYGWIN__ __CYGWIN32__
  +# #  endif
  +# #endif
  +#
  +# #ifdef __cplusplus
  +# extern "C" {
  +# #endif
  +# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
  +# #ifdef __cplusplus
  +# }
  +# #endif
  +#
  +# #ifdef __CYGWIN__
  +# #include <cygwin/cygwin_dll.h>
  +# DECLARE_CYGWIN_DLL( DllMain );
  +# #endif
  +# HINSTANCE __hDllInstance_base;
  +#
  +# BOOL APIENTRY
  +# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
  +# {
  +#   __hDllInstance_base = hInst;
  +#   return TRUE;
  +# }
  +# /* ltdll.c ends here */
  +        # This is a source program that is used to create import libraries
  +        # on Windows for dlls which lack them. Don't remove nor modify the
  +        # starting and closing comments
  +# /* impgen.c starts here */
  +# /*   Copyright (C) 1999-2000 Free Software Foundation, Inc.
  +#
  +#  This file is part of GNU libtool.
  +#
  +#  This program is free software; you can redistribute it and/or modify
  +#  it under the terms of the GNU General Public License as published by
  +#  the Free Software Foundation; either version 2 of the License, or
  +#  (at your option) any later version.
  +#
  +#  This program is distributed in the hope that it will be useful,
  +#  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  +#  GNU General Public License for more details.
  +#
  +#  You should have received a copy of the GNU General Public License
  +#  along with this program; if not, write to the Free Software
  +#  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  +#  */
  +#
  +# #include <stdio.h>		/* for printf() */
  +# #include <unistd.h>		/* for open(), lseek(), read() */
  +# #include <fcntl.h>		/* for O_RDONLY, O_BINARY */
  +# #include <string.h>		/* for strdup() */
  +#
  +# /* O_BINARY isn't required (or even defined sometimes) under Unix */
  +# #ifndef O_BINARY
  +# #define O_BINARY 0
  +# #endif
  +#
  +# static unsigned int
  +# pe_get16 (fd, offset)
  +#      int fd;
  +#      int offset;
  +# {
  +#   unsigned char b[2];
  +#   lseek (fd, offset, SEEK_SET);
  +#   read (fd, b, 2);
  +#   return b[0] + (b[1]<<8);
  +# }
  +#
  +# static unsigned int
  +# pe_get32 (fd, offset)
  +#     int fd;
  +#     int offset;
  +# {
  +#   unsigned char b[4];
  +#   lseek (fd, offset, SEEK_SET);
  +#   read (fd, b, 4);
  +#   return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
  +# }
  +#
  +# static unsigned int
  +# pe_as32 (ptr)
  +#      void *ptr;
  +# {
  +#   unsigned char *b = ptr;
  +#   return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
  +# }
  +#
  +# int
  +# main (argc, argv)
  +#     int argc;
  +#     char *argv[];
  +# {
  +#     int dll;
  +#     unsigned long pe_header_offset, opthdr_ofs, num_entries, i;
  +#     unsigned long export_rva, export_size, nsections, secptr, expptr;
  +#     unsigned long name_rvas, nexp;
  +#     unsigned char *expdata, *erva;
  +#     char *filename, *dll_name;
  +#
  +#     filename = argv[1];
  +#
  +#     dll = open(filename, O_RDONLY|O_BINARY);
  +#     if (dll < 1)
  +# 	return 1;
  +#
  +#     dll_name = filename;
  +#
  +#     for (i=0; filename[i]; i++)
  +# 	if (filename[i] == '/' || filename[i] == '\\'  || filename[i] == ':')
  +# 	    dll_name = filename + i +1;
  +#
  +#     pe_header_offset = pe_get32 (dll, 0x3c);
  +#     opthdr_ofs = pe_header_offset + 4 + 20;
  +#     num_entries = pe_get32 (dll, opthdr_ofs + 92);
  +#
  +#     if (num_entries < 1) /* no exports */
  +# 	return 1;
  +#
  +#     export_rva = pe_get32 (dll, opthdr_ofs + 96);
  +#     export_size = pe_get32 (dll, opthdr_ofs + 100);
  +#     nsections = pe_get16 (dll, pe_header_offset + 4 +2);
  +#     secptr = (pe_header_offset + 4 + 20 +
  +# 	      pe_get16 (dll, pe_header_offset + 4 + 16));
  +#
  +#     expptr = 0;
  +#     for (i = 0; i < nsections; i++)
  +#     {
  +# 	char sname[8];
  +# 	unsigned long secptr1 = secptr + 40 * i;
  +# 	unsigned long vaddr = pe_get32 (dll, secptr1 + 12);
  +# 	unsigned long vsize = pe_get32 (dll, secptr1 + 16);
  +# 	unsigned long fptr = pe_get32 (dll, secptr1 + 20);
  +# 	lseek(dll, secptr1, SEEK_SET);
  +# 	read(dll, sname, 8);
  +# 	if (vaddr <= export_rva && vaddr+vsize > export_rva)
  +# 	{
  +# 	    expptr = fptr + (export_rva - vaddr);
  +# 	    if (export_rva + export_size > vaddr + vsize)
  +# 		export_size = vsize - (export_rva - vaddr);
  +# 	    break;
  +# 	}
  +#     }
  +#
  +#     expdata = (unsigned char*)malloc(export_size);
  +#     lseek (dll, expptr, SEEK_SET);
  +#     read (dll, expdata, export_size);
  +#     erva = expdata - export_rva;
  +#
  +#     nexp = pe_as32 (expdata+24);
  +#     name_rvas = pe_as32 (expdata+32);
  +#
  +#     printf ("EXPORTS\n");
  +#     for (i = 0; i<nexp; i++)
  +#     {
  +# 	unsigned long name_rva = pe_as32 (erva+name_rvas+i*4);
  +# 	printf ("\t%s @ %ld ;\n", erva+name_rva, 1+ i);
  +#     }
  +#
  +#     return 0;
  +# }
  +# /* impgen.c ends here */
  +
  +EOF
  +    ;;
  +  esac
  +
  +  # We use sed instead of cat because bash on DJGPP gets confused if
  +  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
  +  # text mode, it properly converts lines to CR/LF.  This bash problem
  +  # is reportedly fixed, but why not run on old versions too?
  +  sed '$q' "$ltmain" >> "${ofile}T" || (rm -f "${ofile}T"; exit 1)
  +
  +  mv -f "${ofile}T" "$ofile" || \
  +    (rm -f "$ofile" && cp "${ofile}T" "$ofile" && rm -f "${ofile}T")
  +  chmod +x "$ofile"
  +fi
  +##
  +## END FIXME
  +
  +    # libtool.m4 - Configure libtool for the host system. -*-Shell-script-*-
  +## Copyright 1996, 1997, 1998, 1999, 2000, 2001
  +## Free Software Foundation, Inc.
  +## Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
  +##
  +## This program is free software; you can redistribute it and/or modify
  +## it under the terms of the GNU General Public License as published by
  +## the Free Software Foundation; either version 2 of the License, or
  +## (at your option) any later version.
  +##
  +## This program is distributed in the hope that it will be useful, but
  +## WITHOUT ANY WARRANTY; without even the implied warranty of
  +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  +## General Public License for more details.
  +##
  +## You should have received a copy of the GNU General Public License
  +## along with this program; if not, write to the Free Software
  +## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  +##
  +## As a special exception to the GNU General Public License, if you
  +## distribute this file as part of a program that contains a
  +## configuration script generated by Autoconf, you may include it under
  +## the same distribution terms that you use for the rest of that program.
  +
  +# serial 46 AC_PROG_LIBTOOL
  +
  +# _LT_AC_CHECK_DLFCN
  +# --------------------
  +# _LT_AC_CHECK_DLFCN
  +
  +# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
  +# ---------------------------------
  + # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
  +
  +# _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR
  +# ---------------------------------
  +# _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR
  +
  +# _LT_AC_PROG_ECHO_BACKSLASH
  +# --------------------------
  +# Add some code to the start of the generated configure script which
  +# will find an echo command which doesn;t interpret backslashes.
  +# _LT_AC_PROG_ECHO_BACKSLASH
  +
  +# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
  +#                           ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
  +# ------------------------------------------------------------------
  +# _LT_AC_TRY_DLOPEN_SELF
  +
  +# AC_LIBTOOL_DLOPEN_SELF
  +# -------------------
  +# AC_LIBTOOL_DLOPEN_SELF
  +
  +# _LT_AC_LTCONFIG_HACK
  +
  +# AC_LIBTOOL_DLOPEN - enable checks for dlopen support
  +
  +# AC_LIBTOOL_WIN32_DLL - declare package support for building win32 dll's
  +
  +# AC_ENABLE_SHARED - implement the --enable-shared flag
  +# Usage: AC_ENABLE_SHARED[(DEFAULT)]
  +#   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
  +#   `yes'.
  +
  +# AC_DISABLE_SHARED - set the default shared flag to --disable-shared
  +
  +# AC_ENABLE_STATIC - implement the --enable-static flag
  +# Usage: AC_ENABLE_STATIC[(DEFAULT)]
  +#   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
  +#   `yes'.
  +
  +# AC_DISABLE_STATIC - set the default static flag to --disable-static
  +
  +# AC_ENABLE_FAST_INSTALL - implement the --enable-fast-install flag
  +# Usage: AC_ENABLE_FAST_INSTALL[(DEFAULT)]
  +#   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
  +#   `yes'.
  +
  +# AC_DISABLE_FAST_INSTALL - set the default to --disable-fast-install
  +
  +# AC_LIBTOOL_PICMODE - implement the --with-pic flag
  +# Usage: AC_LIBTOOL_PICMODE[(MODE)]
  +#   Where MODE is either `yes' or `no'.  If omitted, it defaults to
  +#   `both'.
  +
  +# AC_PATH_TOOL_PREFIX - find a file program which can recognise shared library
  +
  +# AC_PATH_MAGIC - find a file program which can recognise a shared library
  +
  +# AC_PROG_LD - find the path to the GNU or non-GNU linker
  +
  +# AC_PROG_LD_GNU -
  +
  +# AC_PROG_LD_RELOAD_FLAG - find reload flag for linker
  +#   -- PORTME Some linkers may need a different reload flag.
  +
  +# AC_DEPLIBS_CHECK_METHOD - how to check for library dependencies
  +#  -- PORTME fill in with the dynamic library characteristics
  +
  +# AC_PROG_NM - find the path to a BSD-compatible name lister
  +
  +# AC_CHECK_LIBM - check for math library
  +
  +# AC_LIBLTDL_CONVENIENCE[(dir)] - sets LIBLTDL to the link flags for
  +# the libltdl convenience library and INCLTDL to the include flags for
  +# the libltdl header and adds --enable-ltdl-convenience to the
  +# configure arguments.  Note that LIBLTDL and INCLTDL are not
  +# AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called.  If DIR is not
  +# provided, it is assumed to be `libltdl'.  LIBLTDL will be prefixed
  +# with '${top_builddir}/' and INCLTDL will be prefixed with
  +# '${top_srcdir}/' (note the single quotes!).  If your package is not
  +# flat and you're not using automake, define top_builddir and
  +# top_srcdir appropriately in the Makefiles.
  +
  +# AC_LIBLTDL_INSTALLABLE[(dir)] - sets LIBLTDL to the link flags for
  +# the libltdl installable library and INCLTDL to the include flags for
  +# the libltdl header and adds --enable-ltdl-install to the configure
  +# arguments.  Note that LIBLTDL and INCLTDL are not AC_SUBSTed, nor is
  +# AC_CONFIG_SUBDIRS called.  If DIR is not provided and an installed
  +# libltdl is not found, it is assumed to be `libltdl'.  LIBLTDL will
  +# be prefixed with '${top_builddir}/' and INCLTDL will be prefixed
  +# with '${top_srcdir}/' (note the single quotes!).  If your package is
  +# not flat and you're not using automake, define top_builddir and
  +# top_srcdir appropriately in the Makefiles.
  +# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
  +
  +# old names
  +
  +# This is just to silence aclocal about the macro not being used
  +
  +# This can be used to rebuild libtool when needed
  +LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
  +
  +# Always use our own libtool.
  +LIBTOOL='$(SHELL) $(top_builddir)/libtool'
  +
  +# Prevent multiple expansion
  +
  +ac_config_files="$ac_config_files Makefile l2-config"
  +ac_config_commands="$ac_config_commands default"
  +cat >confcache <<\_ACEOF
  +# This file is a shell script that caches the results of configure
  +# tests run on this system so they can be shared between configure
  +# scripts and configure runs, see configure's option --config-cache.
  +# It is not useful on other systems.  If it contains results you don't
  +# want to keep, you may remove or edit it.
  +#
  +# config.status only pays attention to the cache file if you give it
  +# the --recheck option to rerun configure.
  +#
  +# `ac_cv_env_foo' variables (set or unset) will be overriden when
  +# loading this file, other *unset* `ac_cv_foo' will be assigned the
  +# following values.
  +
  +_ACEOF
  +
  +# The following way of writing the cache mishandles newlines in values,
  +# but we know of no workaround that is simple, portable, and efficient.
  +# So, don't put newlines in cache variables' values.
  +# Ultrix sh set writes to stderr and can't be redirected directly,
  +# and sets the high bit in the cache file unless we assign to the vars.
  +{
  +  (set) 2>&1 |
  +    case `(ac_space=' '; set | grep ac_space) 2>&1` in
  +    *ac_space=\ *)
  +      # `set' does not quote correctly, so add quotes (double-quote
  +      # substitution turns \\\\ into \\, and sed turns \\ into \).
  +      sed -n \
  +        "s/'/'\\\\''/g;
  +    	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
  +      ;;
  +    *)
  +      # `set' quotes correctly as required by POSIX, so do not add quotes.
  +      sed -n \
  +        "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
  +      ;;
  +    esac;
  +} |
  +  sed '
  +     t clear
  +     : clear
  +     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
  +     t end
  +     /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
  +     : end' >>confcache
  +if cmp -s $cache_file confcache; then :; else
  +  if test -w $cache_file; then
  +    test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
  +    cat confcache >$cache_file
  +  else
  +    echo "not updating unwritable cache $cache_file"
  +  fi
  +fi
  +rm -f confcache
  +
  +test "x$prefix" = xNONE && prefix=$ac_default_prefix
  +# Let make expand exec_prefix.
  +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
  +
  +# VPATH may cause trouble with some makes, so we remove $(srcdir),
  +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
  +# trailing colons and then remove the whole line if VPATH becomes empty
  +# (actually we leave an empty line to preserve line numbers).
  +if test "x$srcdir" = x.; then
  +  ac_vpsub='/^[ 	]*VPATH[ 	]*=/{
  +s/:*\$(srcdir):*/:/;
  +s/:*\${srcdir}:*/:/;
  +s/:*@srcdir@:*/:/;
  +s/^\([^=]*=[ 	]*\):*/\1/;
  +s/:*$//;
  +s/^[^=]*=[ 	]*$//;
  +}'
  +fi
  +
  +DEFS=-DHAVE_CONFIG_H
  +
  +: ${CONFIG_STATUS=./config.status}
  +ac_clean_files_save=$ac_clean_files
  +ac_clean_files="$ac_clean_files $CONFIG_STATUS"
  +{ echo "$as_me:6861: creating $CONFIG_STATUS" >&5
  +echo "$as_me: creating $CONFIG_STATUS" >&6;}
  +cat >$CONFIG_STATUS <<_ACEOF
  +#! $SHELL
  +# Generated automatically by configure.
  +# Run this file to recreate the current configuration.
  +# Compiler output produced by configure, useful for debugging
  +# configure, is in config.log if it exists.
  +
  +debug=false
  +SHELL=\${CONFIG_SHELL-$SHELL}
  +ac_cs_invocation="\$0 \$@"
  +
  +_ACEOF
  +
  +cat >>$CONFIG_STATUS <<\_ACEOF
  +# Be Bourne compatible
  +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
  +  emulate sh
  +  NULLCMD=:
  +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
  +  set -o posix
  +fi
  +
  +# Name of the executable.
  +as_me=`echo "$0" |sed 's,.*[\\/],,'`
  +
  +if expr a : '\(a\)' >/dev/null 2>&1; then
  +  as_expr=expr
  +else
  +  as_expr=false
  +fi
  +
  +rm -f conf$$ conf$$.exe conf$$.file
  +echo >conf$$.file
  +if ln -s conf$$.file conf$$ 2>/dev/null; then
  +  # We could just check for DJGPP; but this test a) works b) is more generic
  +  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
  +  if test -f conf$$.exe; then
  +    # Don't use ln at all; we don't have any links
  +    as_ln_s='cp -p'
  +  else
  +    as_ln_s='ln -s'
  +  fi
  +elif ln conf$$.file conf$$ 2>/dev/null; then
  +  as_ln_s=ln
  +else
  +  as_ln_s='cp -p'
  +fi
  +rm -f conf$$ conf$$.exe conf$$.file
  +
  +as_executable_p="test -f"
  +
  +# Support unset when possible.
  +if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
  +  as_unset=unset
  +else
  +  as_unset=false
  +fi
  +
  +# NLS nuisances.
  +$as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; }
  +$as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; }
  +$as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; }
  +$as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; }
  +$as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; }
  +$as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; }
  +$as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; }
  +$as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; }
  +
  +# IFS
  +# We need space, tab and new line, in precisely that order.
  +as_nl='
  +'
  +IFS=" 	$as_nl"
  +
  +# CDPATH.
  +$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; }
  +
  +exec 6>&1
  +
  +_ACEOF
  +
  +# Files that config.status was made for.
  +if test -n "$ac_config_files"; then
  +  echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
  +fi
  +
  +if test -n "$ac_config_headers"; then
  +  echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
  +fi
  +
  +if test -n "$ac_config_links"; then
  +  echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
  +fi
  +
  +if test -n "$ac_config_commands"; then
  +  echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
  +fi
  +
  +cat >>$CONFIG_STATUS <<\EOF
  +
  +ac_cs_usage="\
  +\`$as_me' instantiates files from templates according to the
  +current configuration.
  +
  +Usage: $0 [OPTIONS] [FILE]...
  +
  +  -h, --help       print this help, then exit
  +  -V, --version    print version number, then exit
  +  -d, --debug      don't remove temporary files
  +      --recheck    update $as_me by reconfiguring in the same conditions
  +  --file=FILE[:TEMPLATE]
  +                   instantiate the configuration file FILE
  +  --header=FILE[:TEMPLATE]
  +                   instantiate the configuration header FILE
  +
  +Configuration files:
  +$config_files
  +
  +Configuration headers:
  +$config_headers
  +
  +Configuration commands:
  +$config_commands
  +
  +Report bugs to <bug-autoconf@gnu.org>."
  +EOF
  +
  +cat >>$CONFIG_STATUS <<EOF
  +ac_cs_version="\\
  +config.status
  +configured by $0, generated by GNU Autoconf 2.52,
  +  with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
  +
  +Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
  +Free Software Foundation, Inc.
  +This config.status script is free software; the Free Software Foundation
  +gives unlimited permission to copy, distribute and modify it."
  +srcdir=$srcdir
  +EOF
  +
  +cat >>$CONFIG_STATUS <<\EOF
  +# If no file are specified by the user, then we need to provide default
  +# value.  By we need to know if files were specified by the user.
  +ac_need_defaults=:
  +while test $# != 0
  +do
  +  case $1 in
  +  --*=*)
  +    ac_option=`expr "x$1" : 'x\([^=]*\)='`
  +    ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
  +    shift
  +    set dummy "$ac_option" "$ac_optarg" ${1+"$@"}
  +    shift
  +    ;;
  +  -*);;
  +  *) # This is not an option, so the user has probably given explicit
  +     # arguments.
  +     ac_need_defaults=false;;
  +  esac
  +
  +  case $1 in
  +  # Handling of the options.
  +EOF
  +cat >>$CONFIG_STATUS <<EOF
  +  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
  +    echo "running $SHELL $0 " $ac_configure_args " --no-create --no-recursion"
  +    exec $SHELL $0 $ac_configure_args --no-create --no-recursion ;;
  +EOF
  +cat >>$CONFIG_STATUS <<\EOF
  +  --version | --vers* | -V )
  +    echo "$ac_cs_version"; exit 0 ;;
  +  --he | --h)
  +    # Conflict between --help and --header
  +    { { echo "$as_me:7036: error: ambiguous option: $1
  +Try \`$0 --help' for more information." >&5
  +echo "$as_me: error: ambiguous option: $1
  +Try \`$0 --help' for more information." >&2;}
  +   { (exit 1); exit 1; }; };;
  +  --help | --hel | -h )
  +    echo "$ac_cs_usage"; exit 0 ;;
  +  --debug | --d* | -d )
  +    debug=: ;;
  +  --file | --fil | --fi | --f )
  +    shift
  +    CONFIG_FILES="$CONFIG_FILES $1"
  +    ac_need_defaults=false;;
  +  --header | --heade | --head | --hea )
  +    shift
  +    CONFIG_HEADERS="$CONFIG_HEADERS $1"
  +    ac_need_defaults=false;;
  +
  +  # This is an error.
  +  -*) { { echo "$as_me:7055: error: unrecognized option: $1
  +Try \`$0 --help' for more information." >&5
  +echo "$as_me: error: unrecognized option: $1
  +Try \`$0 --help' for more information." >&2;}
  +   { (exit 1); exit 1; }; } ;;
  +
  +  *) ac_config_targets="$ac_config_targets $1" ;;
  +
  +  esac
  +  shift
  +done
  +
  +exec 5>>config.log
  +cat >&5 << _ACEOF
  +
  +## ----------------------- ##
  +## Running config.status.  ##
  +## ----------------------- ##
  +
  +This file was extended by $as_me 2.52, executed with
  +  CONFIG_FILES    = $CONFIG_FILES
  +  CONFIG_HEADERS  = $CONFIG_HEADERS
  +  CONFIG_LINKS    = $CONFIG_LINKS
  +  CONFIG_COMMANDS = $CONFIG_COMMANDS
  +  > $ac_cs_invocation
  +on `(hostname || uname -n) 2>/dev/null | sed 1q`
  +
  +_ACEOF
  +EOF
  +
  +cat >>$CONFIG_STATUS <<\EOF
  +for ac_config_target in $ac_config_targets
  +do
  +  case "$ac_config_target" in
  +  # Handling of arguments.
  +  "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
  +  "l2-config" ) CONFIG_FILES="$CONFIG_FILES l2-config" ;;
  +  "default" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;;
  +  "l2_config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS l2_config.h" ;;
  +  *) { { echo "$as_me:7094: error: invalid argument: $ac_config_target" >&5
  +echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
  +   { (exit 1); exit 1; }; };;
  +  esac
  +done
  +
  +# If the user did not use the arguments to specify the items to instantiate,
  +# then the envvar interface is used.  Set only those that are not.
  +# We use the long form for the default assignment because of an extremely
  +# bizarre bug on SunOS 4.1.3.
  +if $ac_need_defaults; then
  +  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
  +  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
  +  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
  +fi
  +
  +# Create a temporary directory, and hook for its removal unless debugging.
  +$debug ||
  +{
  +  trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
  +  trap '{ (exit 1); exit 1; }' 1 2 13 15
  +}
  +
  +# Create a (secure) tmp directory for tmp files.
  +: ${TMPDIR=/tmp}
  +{
  +  tmp=`(umask 077 && mktemp -d -q "$TMPDIR/csXXXXXX") 2>/dev/null` &&
  +  test -n "$tmp" && test -d "$tmp"
  +}  ||
  +{
  +  tmp=$TMPDIR/cs$$-$RANDOM
  +  (umask 077 && mkdir $tmp)
  +} ||
  +{
  +   echo "$me: cannot create a temporary directory in $TMPDIR" >&2
  +   { (exit 1); exit 1; }
  +}
  +
  +EOF
  +
  +cat >>$CONFIG_STATUS <<EOF
  +
  +#
  +# CONFIG_FILES section.
  +#
  +
  +# No need to generate the scripts if there are no CONFIG_FILES.
  +# This happens for instance when ./config.status config.h
  +if test -n "\$CONFIG_FILES"; then
  +  # Protect against being on the right side of a sed subst in config.status.
  +  sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
  +   s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
  +s,@SHELL@,$SHELL,;t t
  +s,@exec_prefix@,$exec_prefix,;t t
  +s,@prefix@,$prefix,;t t
  +s,@program_transform_name@,$program_transform_name,;t t
  +s,@bindir@,$bindir,;t t
  +s,@sbindir@,$sbindir,;t t
  +s,@libexecdir@,$libexecdir,;t t
  +s,@datadir@,$datadir,;t t
  +s,@sysconfdir@,$sysconfdir,;t t
  +s,@sharedstatedir@,$sharedstatedir,;t t
  +s,@localstatedir@,$localstatedir,;t t
  +s,@libdir@,$libdir,;t t
  +s,@includedir@,$includedir,;t t
  +s,@oldincludedir@,$oldincludedir,;t t
  +s,@infodir@,$infodir,;t t
  +s,@mandir@,$mandir,;t t
  +s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
  +s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
  +s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
  +s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
  +s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
  +s,@build_alias@,$build_alias,;t t
  +s,@host_alias@,$host_alias,;t t
  +s,@target_alias@,$target_alias,;t t
  +s,@ECHO_C@,$ECHO_C,;t t
  +s,@ECHO_N@,$ECHO_N,;t t
  +s,@ECHO_T@,$ECHO_T,;t t
  +s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
  +s,@DEFS@,$DEFS,;t t
  +s,@LIBS@,$LIBS,;t t
  +s,@L2_VERSION_STR@,$L2_VERSION_STR,;t t
  +s,@L2_VERSION_HEX@,$L2_VERSION_HEX,;t t
  +s,@PLATFORM@,$PLATFORM,;t t
  +s,@LIBL2XX_LA@,$LIBL2XX_LA,;t t
  +s,@L2_TESTXX@,$L2_TESTXX,;t t
  +s,@L2XX_3@,$L2XX_3,;t t
  +s,@TEST_CXX@,$TEST_CXX,;t t
  +s,@INSTALL_CXX@,$INSTALL_CXX,;t t
  +s,@UNINSTALL_CXX@,$UNINSTALL_CXX,;t t
  +s,@SET_MAKE@,$SET_MAKE,;t t
  +s,@CC@,$CC,;t t
  +s,@CFLAGS@,$CFLAGS,;t t
  +s,@LDFLAGS@,$LDFLAGS,;t t
  +s,@CPPFLAGS@,$CPPFLAGS,;t t
  +s,@ac_ct_CC@,$ac_ct_CC,;t t
  +s,@EXEEXT@,$EXEEXT,;t t
  +s,@OBJEXT@,$OBJEXT,;t t
  +s,@CXX@,$CXX,;t t
  +s,@CXXFLAGS@,$CXXFLAGS,;t t
  +s,@ac_ct_CXX@,$ac_ct_CXX,;t t
  +s,@CPP@,$CPP,;t t
  +s,@build@,$build,;t t
  +s,@build_cpu@,$build_cpu,;t t
  +s,@build_vendor@,$build_vendor,;t t
  +s,@build_os@,$build_os,;t t
  +s,@host@,$host,;t t
  +s,@host_cpu@,$host_cpu,;t t
  +s,@host_vendor@,$host_vendor,;t t
  +s,@host_os@,$host_os,;t t
  +s,@LN_S@,$LN_S,;t t
  +s,@ECHO@,$ECHO,;t t
  +s,@RANLIB@,$RANLIB,;t t
  +s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
  +s,@STRIP@,$STRIP,;t t
  +s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t
  +s,@LIBTOOL@,$LIBTOOL,;t t
  +CEOF
  +
  +EOF
  +
  +  cat >>$CONFIG_STATUS <<\EOF
  +  # Split the substitutions into bite-sized pieces for seds with
  +  # small command number limits, like on Digital OSF/1 and HP-UX.
  +  ac_max_sed_lines=48
  +  ac_sed_frag=1 # Number of current file.
  +  ac_beg=1 # First line for current file.
  +  ac_end=$ac_max_sed_lines # Line after last line for current file.
  +  ac_more_lines=:
  +  ac_sed_cmds=
  +  while $ac_more_lines; do
  +    if test $ac_beg -gt 1; then
  +      sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
  +    else
  +      sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
  +    fi
  +    if test ! -s $tmp/subs.frag; then
  +      ac_more_lines=false
  +    else
  +      # The purpose of the label and of the branching condition is to
  +      # speed up the sed processing (if there are no `@' at all, there
  +      # is no need to browse any of the substitutions).
  +      # These are the two extra sed commands mentioned above.
  +      (echo ':t
  +  /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
  +      if test -z "$ac_sed_cmds"; then
  +  	ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
  +      else
  +  	ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
  +      fi
  +      ac_sed_frag=`expr $ac_sed_frag + 1`
  +      ac_beg=$ac_end
  +      ac_end=`expr $ac_end + $ac_max_sed_lines`
  +    fi
  +  done
  +  if test -z "$ac_sed_cmds"; then
  +    ac_sed_cmds=cat
  +  fi
  +fi # test -n "$CONFIG_FILES"
  +
  +EOF
  +cat >>$CONFIG_STATUS <<\EOF
  +for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
  +  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
  +  case $ac_file in
  +  - | *:- | *:-:* ) # input from stdin
  +        cat >$tmp/stdin
  +        ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
  +        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
  +  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
  +        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
  +  * )   ac_file_in=$ac_file.in ;;
  +  esac
  +
  +  # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
  +  ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
  +         X"$ac_file" : 'X\(//\)[^/]' \| \
  +         X"$ac_file" : 'X\(//\)$' \| \
  +         X"$ac_file" : 'X\(/\)' \| \
  +         .     : '\(.\)' 2>/dev/null ||
  +echo X"$ac_file" |
  +    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
  +  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
  +  	  /^X\(\/\/\)$/{ s//\1/; q; }
  +  	  /^X\(\/\).*/{ s//\1/; q; }
  +  	  s/.*/./; q'`
  +  if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
  +    { case "$ac_dir" in
  +  [\\/]* | ?:[\\/]* ) as_incr_dir=;;
  +  *)                      as_incr_dir=.;;
  +esac
  +as_dummy="$ac_dir"
  +for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do
  +  case $as_mkdir_dir in
  +    # Skip DOS drivespec
  +    ?:) as_incr_dir=$as_mkdir_dir ;;
  +    *)
  +      as_incr_dir=$as_incr_dir/$as_mkdir_dir
  +      test -d "$as_incr_dir" || mkdir "$as_incr_dir"
  +    ;;
  +  esac
  +done; }
  +
  +    ac_dir_suffix="/`echo $ac_dir|sed 's,^\./,,'`"
  +    # A "../" for each directory in $ac_dir_suffix.
  +    ac_dots=`echo "$ac_dir_suffix" | sed 's,/[^/]*,../,g'`
  +  else
  +    ac_dir_suffix= ac_dots=
  +  fi
  +
  +  case $srcdir in
  +  .)  ac_srcdir=.
  +      if test -z "$ac_dots"; then
  +         ac_top_srcdir=.
  +      else
  +         ac_top_srcdir=`echo $ac_dots | sed 's,/$,,'`
  +      fi ;;
  +  [\\/]* | ?:[\\/]* )
  +      ac_srcdir=$srcdir$ac_dir_suffix;
  +      ac_top_srcdir=$srcdir ;;
  +  *) # Relative path.
  +    ac_srcdir=$ac_dots$srcdir$ac_dir_suffix
  +    ac_top_srcdir=$ac_dots$srcdir ;;
  +  esac
  +
  +  if test x"$ac_file" != x-; then
  +    { echo "$as_me:7321: creating $ac_file" >&5
  +echo "$as_me: creating $ac_file" >&6;}
  +    rm -f "$ac_file"
  +  fi
  +  # Let's still pretend it is `configure' which instantiates (i.e., don't
  +  # use $as_me), people would be surprised to read:
  +  #    /* config.h.  Generated automatically by config.status.  */
  +  configure_input="Generated automatically from `echo $ac_file_in |
  +                                                 sed 's,.*/,,'` by configure."
  +
  +  # First look for the input files in the build tree, otherwise in the
  +  # src tree.
  +  ac_file_inputs=`IFS=:
  +    for f in $ac_file_in; do
  +      case $f in
  +      -) echo $tmp/stdin ;;
  +      [\\/$]*)
  +         # Absolute (can't be DOS-style, as IFS=:)
  +         test -f "$f" || { { echo "$as_me:7339: error: cannot find input file: $f" >&5
  +echo "$as_me: error: cannot find input file: $f" >&2;}
  +   { (exit 1); exit 1; }; }
  +         echo $f;;
  +      *) # Relative
  +         if test -f "$f"; then
  +           # Build tree
  +           echo $f
  +         elif test -f "$srcdir/$f"; then
  +           # Source tree
  +           echo $srcdir/$f
  +         else
  +           # /dev/null tree
  +           { { echo "$as_me:7352: error: cannot find input file: $f" >&5
  +echo "$as_me: error: cannot find input file: $f" >&2;}
  +   { (exit 1); exit 1; }; }
  +         fi;;
  +      esac
  +    done` || { (exit 1); exit 1; }
  +EOF
  +cat >>$CONFIG_STATUS <<EOF
  +  sed "$ac_vpsub
  +$extrasub
  +EOF
  +cat >>$CONFIG_STATUS <<\EOF
  +:t
  +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
  +s,@configure_input@,$configure_input,;t t
  +s,@srcdir@,$ac_srcdir,;t t
  +s,@top_srcdir@,$ac_top_srcdir,;t t
  +" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
  +  rm -f $tmp/stdin
  +  if test x"$ac_file" != x-; then
  +    mv $tmp/out $ac_file
  +  else
  +    cat $tmp/out
  +    rm -f $tmp/out
  +  fi
  +
  +done
  +EOF
  +cat >>$CONFIG_STATUS <<\EOF
  +
  +#
  +# CONFIG_HEADER section.
  +#
  +
  +# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
  +# NAME is the cpp macro being defined and VALUE is the value it is being given.
  +#
  +# ac_d sets the value in "#define NAME VALUE" lines.
  +ac_dA='s,^\([ 	]*\)#\([ 	]*define[ 	][ 	]*\)'
  +ac_dB='[ 	].*$,\1#\2'
  +ac_dC=' '
  +ac_dD=',;t'
  +# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
  +ac_uA='s,^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
  +ac_uB='$,\1#\2define\3'
  +ac_uC=' '
  +ac_uD=',;t'
  +
  +for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
  +  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
  +  case $ac_file in
  +  - | *:- | *:-:* ) # input from stdin
  +        cat >$tmp/stdin
  +        ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
  +        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
  +  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
  +        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
  +  * )   ac_file_in=$ac_file.in ;;
  +  esac
  +
  +  test x"$ac_file" != x- && { echo "$as_me:7412: creating $ac_file" >&5
  +echo "$as_me: creating $ac_file" >&6;}
  +
  +  # First look for the input files in the build tree, otherwise in the
  +  # src tree.
  +  ac_file_inputs=`IFS=:
  +    for f in $ac_file_in; do
  +      case $f in
  +      -) echo $tmp/stdin ;;
  +      [\\/$]*)
  +         # Absolute (can't be DOS-style, as IFS=:)
  +         test -f "$f" || { { echo "$as_me:7423: error: cannot find input file: $f" >&5
  +echo "$as_me: error: cannot find input file: $f" >&2;}
  +   { (exit 1); exit 1; }; }
  +         echo $f;;
  +      *) # Relative
  +         if test -f "$f"; then
  +           # Build tree
  +           echo $f
  +         elif test -f "$srcdir/$f"; then
  +           # Source tree
  +           echo $srcdir/$f
  +         else
  +           # /dev/null tree
  +           { { echo "$as_me:7436: error: cannot find input file: $f" >&5
  +echo "$as_me: error: cannot find input file: $f" >&2;}
  +   { (exit 1); exit 1; }; }
  +         fi;;
  +      esac
  +    done` || { (exit 1); exit 1; }
  +  # Remove the trailing spaces.
  +  sed 's/[ 	]*$//' $ac_file_inputs >$tmp/in
  +
  +EOF
  +
  +# Transform confdefs.h into two sed scripts, `conftest.defines' and
  +# `conftest.undefs', that substitutes the proper values into
  +# config.h.in to produce config.h.  The first handles `#define'
  +# templates, and the second `#undef' templates.
  +# And first: Protect against being on the right side of a sed subst in
  +# config.status.  Protect against being in an unquoted here document
  +# in config.status.
  +rm -f conftest.defines conftest.undefs
  +# Using a here document instead of a string reduces the quoting nightmare.
  +# Putting comments in sed scripts is not portable.
  +#
  +# `end' is used to avoid that the second main sed command (meant for
  +# 0-ary CPP macros) applies to n-ary macro definitions.
  +# See the Autoconf documentation for `clear'.
  +cat >confdef2sed.sed <<\EOF
  +s/[\\&,]/\\&/g
  +s,[\\$`],\\&,g
  +t clear
  +: clear
  +s,^[ 	]*#[ 	]*define[ 	][ 	]*\(\([^ 	(][^ 	(]*\)([^)]*)\)[ 	]*\(.*\)$,${ac_dA}\2${ac_dB}\1${ac_dC}\3${ac_dD},gp
  +t end
  +s,^[ 	]*#[ 	]*define[ 	][ 	]*\([^ 	][^ 	]*\)[ 	]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
  +: end
  +EOF
  +# If some macros were called several times there might be several times
  +# the same #defines, which is useless.  Nevertheless, we may not want to
  +# sort them, since we want the *last* AC-DEFINE to be honored.
  +uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
  +sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
  +rm -f confdef2sed.sed
  +
  +# This sed command replaces #undef with comments.  This is necessary, for
  +# example, in the case of _POSIX_SOURCE, which is predefined and required
  +# on some systems where configure will not decide to define it.
  +cat >>conftest.undefs <<\EOF
  +s,^[ 	]*#[ 	]*undef[ 	][ 	]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
  +EOF
  +
  +# Break up conftest.defines because some shells have a limit on the size
  +# of here documents, and old seds have small limits too (100 cmds).
  +echo '  # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
  +echo '  if egrep "^[ 	]*#[ 	]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
  +echo '  # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
  +echo '  :' >>$CONFIG_STATUS
  +rm -f conftest.tail
  +while grep . conftest.defines >/dev/null
  +do
  +  # Write a limited-size here document to $tmp/defines.sed.
  +  echo '  cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
  +  # Speed up: don't consider the non `#define' lines.
  +  echo '/^[ 	]*#[ 	]*define/!b' >>$CONFIG_STATUS
  +  # Work around the forget-to-reset-the-flag bug.
  +  echo 't clr' >>$CONFIG_STATUS
  +  echo ': clr' >>$CONFIG_STATUS
  +  sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
  +  echo 'CEOF
  +  sed -f $tmp/defines.sed $tmp/in >$tmp/out
  +  rm -f $tmp/in
  +  mv $tmp/out $tmp/in
  +' >>$CONFIG_STATUS
  +  sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
  +  rm -f conftest.defines
  +  mv conftest.tail conftest.defines
  +done
  +rm -f conftest.defines
  +echo '  fi # egrep' >>$CONFIG_STATUS
  +echo >>$CONFIG_STATUS
  +
  +# Break up conftest.undefs because some shells have a limit on the size
  +# of here documents, and old seds have small limits too (100 cmds).
  +echo '  # Handle all the #undef templates' >>$CONFIG_STATUS
  +rm -f conftest.tail
  +while grep . conftest.undefs >/dev/null
  +do
  +  # Write a limited-size here document to $tmp/undefs.sed.
  +  echo '  cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
  +  # Speed up: don't consider the non `#undef'
  +  echo '/^[ 	]*#[ 	]*undef/!b' >>$CONFIG_STATUS
  +  # Work around the forget-to-reset-the-flag bug.
  +  echo 't clr' >>$CONFIG_STATUS
  +  echo ': clr' >>$CONFIG_STATUS
  +  sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
  +  echo 'CEOF
  +  sed -f $tmp/undefs.sed $tmp/in >$tmp/out
  +  rm -f $tmp/in
  +  mv $tmp/out $tmp/in
  +' >>$CONFIG_STATUS
  +  sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
  +  rm -f conftest.undefs
  +  mv conftest.tail conftest.undefs
  +done
  +rm -f conftest.undefs
  +
  +cat >>$CONFIG_STATUS <<\EOF
  +  # Let's still pretend it is `configure' which instantiates (i.e., don't
  +  # use $as_me), people would be surprised to read:
  +  #    /* config.h.  Generated automatically by config.status.  */
  +  if test x"$ac_file" = x-; then
  +    echo "/* Generated automatically by configure.  */" >$tmp/config.h
  +  else
  +    echo "/* $ac_file.  Generated automatically by configure.  */" >$tmp/config.h
  +  fi
  +  cat $tmp/in >>$tmp/config.h
  +  rm -f $tmp/in
  +  if test x"$ac_file" != x-; then
  +    if cmp -s $ac_file $tmp/config.h 2>/dev/null; then
  +      { echo "$as_me:7553: $ac_file is unchanged" >&5
  +echo "$as_me: $ac_file is unchanged" >&6;}
  +    else
  +      ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
  +         X"$ac_file" : 'X\(//\)[^/]' \| \
  +         X"$ac_file" : 'X\(//\)$' \| \
  +         X"$ac_file" : 'X\(/\)' \| \
  +         .     : '\(.\)' 2>/dev/null ||
  +echo X"$ac_file" |
  +    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
  +  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
  +  	  /^X\(\/\/\)$/{ s//\1/; q; }
  +  	  /^X\(\/\).*/{ s//\1/; q; }
  +  	  s/.*/./; q'`
  +      if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
  +        { case "$ac_dir" in
  +  [\\/]* | ?:[\\/]* ) as_incr_dir=;;
  +  *)                      as_incr_dir=.;;
  +esac
  +as_dummy="$ac_dir"
  +for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do
  +  case $as_mkdir_dir in
  +    # Skip DOS drivespec
  +    ?:) as_incr_dir=$as_mkdir_dir ;;
  +    *)
  +      as_incr_dir=$as_incr_dir/$as_mkdir_dir
  +      test -d "$as_incr_dir" || mkdir "$as_incr_dir"
  +    ;;
  +  esac
  +done; }
  +
  +      fi
  +      rm -f $ac_file
  +      mv $tmp/config.h $ac_file
  +    fi
  +  else
  +    cat $tmp/config.h
  +    rm -f $tmp/config.h
  +  fi
  +done
  +EOF
  +cat >>$CONFIG_STATUS <<\EOF
  +
  +#
  +# CONFIG_COMMANDS section.
  +#
  +for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
  +  ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
  +  ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
  +
  +  case $ac_dest in
  +    default ) chmod a+x l2-config
  + ;;
  +  esac
  +done
  +EOF
  +
  +cat >>$CONFIG_STATUS <<\EOF
  +
  +{ (exit 0); exit 0; }
  +EOF
  +chmod +x $CONFIG_STATUS
  +ac_clean_files=$ac_clean_files_save
  +
  +# configure is writing to config.log, and then calls config.status.
  +# config.status does its own redirection, appending to config.log.
  +# Unfortunately, on DOS this fails, as config.log is still kept open
  +# by configure, so config.status won't be able to write to it; its
  +# output is simply discarded.  So we exec the FD to /dev/null,
  +# effectively closing config.log, so it can be properly (re)opened and
  +# appended to by config.status.  When coming back to configure, we
  +# need to make the FD available again.
  +if test "$no_create" != yes; then
  +  ac_cs_success=:
  +  exec 5>/dev/null
  +  $SHELL $CONFIG_STATUS || ac_cs_success=false
  +  exec 5>>config.log
  +  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
  +  # would make configure fail if this is the last instruction.
  +  $ac_cs_success || { (exit 1); exit 1; }
  +fi
   
  Index: ossp-pkg/l2/configure.in
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 configure.in
  --- ossp-pkg/l2/configure.in	2001/05/11 19:50:52	1.3
  +++ ossp-pkg/l2/configure.in	2001/08/15 07:49:59	1.4
  @@ -74,7 +74,7 @@
   fi
   AC_PROG_CPP
   AC_CHECK_DEBUGGING
  -AC_PROG_LIBTOOL($PLATFORM)
  +AC_CONFIGURE_LIBTOOL
   
   AC_OUTPUT(dnl
   Makefile dnl
  Index: ossp-pkg/l2/l2.3
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 l2.3
  --- ossp-pkg/l2/l2.3	2001/05/11 19:50:52	1.3
  +++ ossp-pkg/l2/l2.3	2001/08/15 07:49:59	1.4
  @@ -1,5 +1,5 @@
  -.\" Automatically generated by Pod::Man version 1.02
  -.\" Fri May 11 21:45:25 2001
  +.\" Automatically generated by Pod::Man version 1.15
  +.\" Wed Aug 15 09:48:16 2001
   .\"
   .\" Standard preamble:
   .\" ======================================================================
  @@ -46,8 +46,8 @@
   .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
   .    ds L" ""
   .    ds R" ""
  -.    ds C` `
  -.    ds C' '
  +.    ds C` ""
  +.    ds C' ""
   'br\}
   .el\{\
   .    ds -- \|\(em\|
  @@ -63,7 +63,7 @@
   .if \nF \{\
   .    de IX
   .    tm Index:\\$1\t\\n%\t"\\$2"
  -.    .
  +..
   .    nr % 0
   .    rr F
   .\}
  Index: ossp-pkg/l2/l2_config.h.in
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 l2_config.h.in
  --- ossp-pkg/l2/l2_config.h.in	2001/05/10 19:46:01	1.1.1.1
  +++ ossp-pkg/l2/l2_config.h.in	2001/08/15 07:49:59	1.2
  @@ -1,2 +1 @@
  -
  -
  +/* l2_config.h.in.  Generated automatically from configure.in by autoheader.  */
  Index: ossp-pkg/l2/libtool.m4
  ============================================================
  $ cvs update -p -r1.1 libtool.m4
  # libtool.m4 - Configure libtool for the host system. -*-Shell-script-*-
  ## Copyright 1996, 1997, 1998, 1999, 2000, 2001
  ## Free Software Foundation, Inc.
  ## Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
  ##
  ## This program is free software; you can redistribute it and/or modify
  ## it under the terms of the GNU General Public License as published by
  ## the Free Software Foundation; either version 2 of the License, or
  ## (at your option) any later version.
  ##
  ## This program is distributed in the hope that it will be useful, but
  ## WITHOUT ANY WARRANTY; without even the implied warranty of
  ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  ## General Public License for more details.
  ##
  ## You should have received a copy of the GNU General Public License
  ## along with this program; if not, write to the Free Software
  ## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  ##
  ## As a special exception to the GNU General Public License, if you
  ## distribute this file as part of a program that contains a
  ## configuration script generated by Autoconf, you may include it under
  ## the same distribution terms that you use for the rest of that program.
  
  # serial 46 AC_PROG_LIBTOOL
  AC_DEFUN([AC_PROG_LIBTOOL],
  [AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
  
  # This can be used to rebuild libtool when needed
  LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
  
  # Always use our own libtool.
  LIBTOOL='$(SHELL) $(top_builddir)/libtool'
  AC_SUBST(LIBTOOL)dnl
  
  # Prevent multiple expansion
  define([AC_PROG_LIBTOOL], [])
  ])
  
  AC_DEFUN([AC_LIBTOOL_SETUP],
  [AC_PREREQ(2.13)dnl
  AC_REQUIRE([AC_ENABLE_SHARED])dnl
  AC_REQUIRE([AC_ENABLE_STATIC])dnl
  AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl
  AC_REQUIRE([AC_CANONICAL_HOST])dnl
  AC_REQUIRE([AC_CANONICAL_BUILD])dnl
  AC_REQUIRE([AC_PROG_CC])dnl
  AC_REQUIRE([AC_PROG_LD])dnl
  AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl
  AC_REQUIRE([AC_PROG_NM])dnl
  AC_REQUIRE([AC_PROG_LN_S])dnl
  AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl
  AC_REQUIRE([AC_OBJEXT])dnl
  AC_REQUIRE([AC_EXEEXT])dnl
  dnl
  
  _LT_AC_PROG_ECHO_BACKSLASH
  # Only perform the check for file, if the check method requires it
  case $deplibs_check_method in
  file_magic*)
    if test "$file_magic_cmd" = '$MAGIC_CMD'; then
      AC_PATH_MAGIC
    fi
    ;;
  esac
  
  AC_CHECK_TOOL(RANLIB, ranlib, :)
  AC_CHECK_TOOL(STRIP, strip, :)
  
  ifdef([AC_PROVIDE_AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no)
  ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL],
  enable_win32_dll=yes, enable_win32_dll=no)
  
  AC_ARG_ENABLE(libtool-lock,
    [  --disable-libtool-lock  avoid locking (might break parallel builds)])
  test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
  
  # Some flags need to be propagated to the compiler or linker for good
  # libtool support.
  case $host in
  *-*-irix6*)
    # Find out which ABI we are using.
    echo '[#]line __oline__ "configure"' > conftest.$ac_ext
    if AC_TRY_EVAL(ac_compile); then
      case `/usr/bin/file conftest.$ac_objext` in
      *32-bit*)
        LD="${LD-ld} -32"
        ;;
      *N32*)
        LD="${LD-ld} -n32"
        ;;
      *64-bit*)
        LD="${LD-ld} -64"
        ;;
      esac
    fi
    rm -rf conftest*
    ;;
  
  *-*-sco3.2v5*)
    # On SCO OpenServer 5, we need -belf to get full-featured binaries.
    SAVE_CFLAGS="$CFLAGS"
    CFLAGS="$CFLAGS -belf"
    AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
      [AC_LANG_SAVE
       AC_LANG_C
       AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
       AC_LANG_RESTORE])
    if test x"$lt_cv_cc_needs_belf" != x"yes"; then
      # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
      CFLAGS="$SAVE_CFLAGS"
    fi
    ;;
  
  ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL],
  [*-*-cygwin* | *-*-mingw* | *-*-pw32*)
    AC_CHECK_TOOL(DLLTOOL, dlltool, false)
    AC_CHECK_TOOL(AS, as, false)
    AC_CHECK_TOOL(OBJDUMP, objdump, false)
  
    # recent cygwin and mingw systems supply a stub DllMain which the user
    # can override, but on older systems we have to supply one
    AC_CACHE_CHECK([if libtool should supply DllMain function], lt_cv_need_dllmain,
      [AC_TRY_LINK([],
        [extern int __attribute__((__stdcall__)) DllMain(void*, int, void*);
        DllMain (0, 0, 0);],
        [lt_cv_need_dllmain=no],[lt_cv_need_dllmain=yes])])
  
    case $host/$CC in
    *-*-cygwin*/gcc*-mno-cygwin*|*-*-mingw*)
      # old mingw systems require "-dll" to link a DLL, while more recent ones
      # require "-mdll"
      SAVE_CFLAGS="$CFLAGS"
      CFLAGS="$CFLAGS -mdll"
      AC_CACHE_CHECK([how to link DLLs], lt_cv_cc_dll_switch,
        [AC_TRY_LINK([], [], [lt_cv_cc_dll_switch=-mdll],[lt_cv_cc_dll_switch=-dll])])
      CFLAGS="$SAVE_CFLAGS" ;;
    *-*-cygwin* | *-*-pw32*)
      # cygwin systems need to pass --dll to the linker, and not link
      # crt.o which will require a WinMain@16 definition.
      lt_cv_cc_dll_switch="-Wl,--dll -nostartfiles" ;;
    esac
    ;;
    ])
  esac
  
  _LT_AC_LTCONFIG_HACK
  
  ])
  
  # _LT_AC_CHECK_DLFCN
  # --------------------
  AC_DEFUN(_LT_AC_CHECK_DLFCN,
  [AC_CHECK_HEADERS(dlfcn.h)
  ])# _LT_AC_CHECK_DLFCN
  
  # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
  # ---------------------------------
  AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE],
  [AC_REQUIRE([AC_CANONICAL_HOST])
  AC_REQUIRE([AC_PROG_NM])
  AC_REQUIRE([AC_OBJEXT])
  # Check for command to grab the raw symbol name followed by C symbol from nm.
  AC_MSG_CHECKING([command to parse $NM output])
  AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [dnl
  
  # These are sane defaults that work on at least a few old systems.
  # [They come from Ultrix.  What could be older than Ultrix?!! ;)]
  
  # Character class describing NM global symbol codes.
  [symcode='[BCDEGRST]']
  
  # Regexp to match symbols that can be accessed directly from C.
  [sympat='\([_A-Za-z][_A-Za-z0-9]*\)']
  
  # Transform the above into a raw symbol and a C symbol.
  symxfrm='\1 \2\3 \3'
  
  # Transform an extracted symbol line into a proper C declaration
  lt_cv_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'"
  
  # Define system-specific variables.
  case $host_os in
  aix*)
    [symcode='[BCDT]']
    ;;
  cygwin* | mingw* | pw32*)
    [symcode='[ABCDGISTW]']
    ;;
  hpux*) # Its linker distinguishes data from code symbols
    lt_cv_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
    ;;
  irix*)
    [symcode='[BCDEGRST]']
    ;;
  solaris* | sysv5*)
    [symcode='[BDT]']
    ;;
  sysv4)
    [symcode='[DFNSTU]']
    ;;
  esac
  
  # Handle CRLF in mingw tool chain
  opt_cr=
  case $host_os in
  mingw*)
    opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
    ;;
  esac
  
  # If we're using GNU nm, then use its standard symbol codes.
  if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then
    [symcode='[ABCDGISTW]']
  fi
  
  # Try without a prefix undercore, then with it.
  for ac_symprfx in "" "_"; do
  
    # Write the raw and C identifiers.
  [lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ 	]\($symcode$symcode*\)[ 	][ 	]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'"]
  
    # Check to see that the pipe works correctly.
    pipe_works=no
    rm -f conftest*
    cat > conftest.$ac_ext <<EOF
  #ifdef __cplusplus
  extern "C" {
  #endif
  char nm_test_var;
  void nm_test_func(){}
  #ifdef __cplusplus
  }
  #endif
  int main(){nm_test_var='a';nm_test_func();return(0);}
  EOF
  
    if AC_TRY_EVAL(ac_compile); then
      # Now try to grab the symbols.
      nlist=conftest.nm
      if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
        # Try sorting and uniquifying the output.
        if sort "$nlist" | uniq > "$nlist"T; then
  	mv -f "$nlist"T "$nlist"
        else
  	rm -f "$nlist"T
        fi
  
        # Make sure that we snagged all the symbols we need.
        if egrep ' nm_test_var$' "$nlist" >/dev/null; then
  	if egrep ' nm_test_func$' "$nlist" >/dev/null; then
  	  cat <<EOF > conftest.$ac_ext
  #ifdef __cplusplus
  extern "C" {
  #endif
  
  EOF
  	  # Now generate the symbol file.
  	  eval "$lt_cv_global_symbol_to_cdecl"' < "$nlist" >> conftest.$ac_ext'
  
  	  cat <<EOF >> conftest.$ac_ext
  #if defined (__STDC__) && __STDC__
  # define lt_ptr_t void *
  #else
  # define lt_ptr_t char *
  # define const
  #endif
  
  /* The mapping between symbol names and symbols. */
  const struct {
    const char *name;
    lt_ptr_t address;
  }
  [lt_preloaded_symbols[] =]
  {
  EOF
  	  sed "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" >> conftest.$ac_ext
  	  cat <<\EOF >> conftest.$ac_ext
    {0, (lt_ptr_t) 0}
  };
  
  #ifdef __cplusplus
  }
  #endif
  EOF
  	  # Now try linking the two files.
  	  mv conftest.$ac_objext conftstm.$ac_objext
  	  save_LIBS="$LIBS"
  	  save_CFLAGS="$CFLAGS"
  	  LIBS="conftstm.$ac_objext"
  	  CFLAGS="$CFLAGS$no_builtin_flag"
  	  if AC_TRY_EVAL(ac_link) && test -s conftest; then
  	    pipe_works=yes
  	  fi
  	  LIBS="$save_LIBS"
  	  CFLAGS="$save_CFLAGS"
  	else
  	  echo "cannot find nm_test_func in $nlist" >&AC_FD_CC
  	fi
        else
  	echo "cannot find nm_test_var in $nlist" >&AC_FD_CC
        fi
      else
        echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AC_FD_CC
      fi
    else
      echo "$progname: failed program was:" >&AC_FD_CC
      cat conftest.$ac_ext >&5
    fi
    rm -f conftest* conftst*
  
    # Do not use the global_symbol_pipe unless it works.
    if test "$pipe_works" = yes; then
      break
    else
      lt_cv_sys_global_symbol_pipe=
    fi
  done
  ])
  global_symbol_pipe="$lt_cv_sys_global_symbol_pipe"
  if test -z "$lt_cv_sys_global_symbol_pipe"; then
    global_symbol_to_cdecl=
  else
    global_symbol_to_cdecl="$lt_cv_global_symbol_to_cdecl"
  fi
  if test -z "$global_symbol_pipe$global_symbol_to_cdecl"; then
    AC_MSG_RESULT(failed)
  else
    AC_MSG_RESULT(ok)
  fi
  ]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
  
  # _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR
  # ---------------------------------
  AC_DEFUN([_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR],
  [# Find the correct PATH separator.  Usually this is `:', but
  # DJGPP uses `;' like DOS.
  if test "X${PATH_SEPARATOR+set}" != Xset; then
    UNAME=${UNAME-`uname 2>/dev/null`}
    case X$UNAME in
      *-DOS) lt_cv_sys_path_separator=';' ;;
      *)     lt_cv_sys_path_separator=':' ;;
    esac
  fi
  ])# _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR
  
  # _LT_AC_PROG_ECHO_BACKSLASH
  # --------------------------
  # Add some code to the start of the generated configure script which
  # will find an echo command which doesn;t interpret backslashes.
  AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH],
  [ifdef([AC_DIVERSION_NOTICE], [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
                                [AC_DIVERT_PUSH(NOTICE)])
  _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR
  
  # Check that we are running under the correct shell.
  SHELL=${CONFIG_SHELL-/bin/sh}
  
  case X$ECHO in
  X*--fallback-echo)
    # Remove one level of quotation (which was required for Make).
    ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
    ;;
  esac
  
  echo=${ECHO-echo}
  if test "X[$]1" = X--no-reexec; then
    # Discard the --no-reexec flag, and continue.
    shift
  elif test "X[$]1" = X--fallback-echo; then
    # Avoid inline document here, it may be left over
    :
  elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
    # Yippee, $echo works!
    :
  else
    # Restart under the correct shell.
    exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
  fi
  
  if test "X[$]1" = X--fallback-echo; then
    # used as fallback echo
    shift
    cat <<EOF
  $*
  EOF
    exit 0
  fi
  
  # The HP-UX ksh and POSIX shell print the target directory to stdout
  # if CDPATH is set.
  if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
  
  if test -z "$ECHO"; then
  if test "X${echo_test_string+set}" != Xset; then
  # find a string as large as possible, as long as the shell can cope with it
    for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
      if (echo_test_string="`eval $cmd`") 2>/dev/null &&
         echo_test_string="`eval $cmd`" &&
         (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
      then
        break
      fi
    done
  fi
  
  if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
     echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
     test "X$echo_testing_string" = "X$echo_test_string"; then
    :
  else
    # The Solaris, AIX, and Digital Unix default echo programs unquote
    # backslashes.  This makes it impossible to quote backslashes using
    #   echo "$something" | sed 's/\\/\\\\/g'
    #
    # So, first we look for a working echo in the user's PATH.
  
    IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
    for dir in $PATH /usr/ucb; do
      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
         test "X$echo_testing_string" = "X$echo_test_string"; then
        echo="$dir/echo"
        break
      fi
    done
    IFS="$save_ifs"
  
    if test "X$echo" = Xecho; then
      # We didn't find a better echo, so look for alternatives.
      if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
         echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
         test "X$echo_testing_string" = "X$echo_test_string"; then
        # This shell has a builtin print -r that does the trick.
        echo='print -r'
      elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
  	 test "X$CONFIG_SHELL" != X/bin/ksh; then
        # If we have ksh, try running configure again with it.
        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
        export ORIGINAL_CONFIG_SHELL
        CONFIG_SHELL=/bin/ksh
        export CONFIG_SHELL
        exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
      else
        # Try using printf.
        echo='printf %s\n'
        if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
  	 echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
  	 test "X$echo_testing_string" = "X$echo_test_string"; then
  	# Cool, printf works
  	:
        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
  	   test "X$echo_testing_string" = 'X\t' &&
  	   echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
  	   test "X$echo_testing_string" = "X$echo_test_string"; then
  	CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
  	export CONFIG_SHELL
  	SHELL="$CONFIG_SHELL"
  	export SHELL
  	echo="$CONFIG_SHELL [$]0 --fallback-echo"
        elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
  	   test "X$echo_testing_string" = 'X\t' &&
  	   echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
  	   test "X$echo_testing_string" = "X$echo_test_string"; then
  	echo="$CONFIG_SHELL [$]0 --fallback-echo"
        else
  	# maybe with a smaller string...
  	prev=:
  
  	for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
  	  if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
  	  then
  	    break
  	  fi
  	  prev="$cmd"
  	done
  
  	if test "$prev" != 'sed 50q "[$]0"'; then
  	  echo_test_string=`eval $prev`
  	  export echo_test_string
  	  exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
  	else
  	  # Oops.  We lost completely, so just stick with echo.
  	  echo=echo
  	fi
        fi
      fi
    fi
  fi
  fi
  
  # Copy echo and quote the copy suitably for passing to libtool from
  # the Makefile, instead of quoting the original, which is used later.
  ECHO=$echo
  if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
     ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
  fi
  
  AC_SUBST(ECHO)
  AC_DIVERT_POP
  ])# _LT_AC_PROG_ECHO_BACKSLASH
  
  # _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
  #                           ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
  # ------------------------------------------------------------------
  AC_DEFUN(_LT_AC_TRY_DLOPEN_SELF,
  [if test "$cross_compiling" = yes; then :
    [$4]
  else
    AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<EOF
  [#line __oline__ "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
  #include <dlfcn.h>
  #endif
  
  #include <stdio.h>
  
  #ifdef RTLD_GLOBAL
  #  define LT_DLGLOBAL		RTLD_GLOBAL
  #else
  #  ifdef DL_GLOBAL
  #    define LT_DLGLOBAL		DL_GLOBAL
  #  else
  #    define LT_DLGLOBAL		0
  #  endif
  #endif
  
  /* We may have to define LT_DLLAZY_OR_NOW in the command line if we
     find out it does not work in some platform. */
  #ifndef LT_DLLAZY_OR_NOW
  #  ifdef RTLD_LAZY
  #    define LT_DLLAZY_OR_NOW		RTLD_LAZY
  #  else
  #    ifdef DL_LAZY
  #      define LT_DLLAZY_OR_NOW		DL_LAZY
  #    else
  #      ifdef RTLD_NOW
  #        define LT_DLLAZY_OR_NOW	RTLD_NOW
  #      else
  #        ifdef DL_NOW
  #          define LT_DLLAZY_OR_NOW	DL_NOW
  #        else
  #          define LT_DLLAZY_OR_NOW	0
  #        endif
  #      endif
  #    endif
  #  endif
  #endif
  
  #ifdef __cplusplus
  extern "C" void exit (int);
  #endif
  
  void fnord() { int i=42;}
  int main ()
  {
    void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
    int status = $lt_dlunknown;
  
    if (self)
      {
        if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
        else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
        /* dlclose (self); */
      }
  
      exit (status);
  }]
  EOF
    if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
      (./conftest; exit; ) 2>/dev/null
      lt_status=$?
      case x$lt_status in
        x$lt_dlno_uscore) $1 ;;
        x$lt_dlneed_uscore) $2 ;;
        x$lt_unknown|x*) $3 ;;
      esac
    else :
      # compilation failed
      $3
    fi
  fi
  rm -fr conftest*
  ])# _LT_AC_TRY_DLOPEN_SELF
  
  # AC_LIBTOOL_DLOPEN_SELF
  # -------------------
  AC_DEFUN(AC_LIBTOOL_DLOPEN_SELF,
  [if test "x$enable_dlopen" != xyes; then
    enable_dlopen=unknown
    enable_dlopen_self=unknown
    enable_dlopen_self_static=unknown
  else
    lt_cv_dlopen=no
    lt_cv_dlopen_libs=
  
    case $host_os in
    beos*)
      lt_cv_dlopen="load_add_on"
      lt_cv_dlopen_libs=
      lt_cv_dlopen_self=yes
      ;;
  
    cygwin* | mingw* | pw32*)
      lt_cv_dlopen="LoadLibrary"
      lt_cv_dlopen_libs=
     ;;
  
    *)
      AC_CHECK_LIB(dl, dlopen,  [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
        [AC_CHECK_FUNC(dlopen, lt_cv_dlopen="dlopen",
          [AC_CHECK_FUNC(shl_load, lt_cv_dlopen="shl_load",
            [AC_CHECK_LIB(svld, dlopen,
  	    [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
              [AC_CHECK_LIB(dld, shl_load,
                [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
  	    ])
            ])
          ])
        ])
      ;;
    esac
  
    if test "x$lt_cv_dlopen" != xno; then
      enable_dlopen=yes
    else
      enable_dlopen=no
    fi
  
    case $lt_cv_dlopen in
    dlopen)
      save_CPPFLAGS="$CPPFLAGS"
      AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
      test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
  
      save_LDFLAGS="$LDFLAGS"
      eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
  
      save_LIBS="$LIBS"
      LIBS="$lt_cv_dlopen_libs $LIBS"
  
      AC_CACHE_CHECK([whether a program can dlopen itself],
  	  lt_cv_dlopen_self, [dnl
  	  _LT_AC_TRY_DLOPEN_SELF(
  	    lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
  	    lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
      ])
  
      if test "x$lt_cv_dlopen_self" = xyes; then
        LDFLAGS="$LDFLAGS $link_static_flag"
        AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
      	  lt_cv_dlopen_self_static, [dnl
  	  _LT_AC_TRY_DLOPEN_SELF(
  	    lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
  	    lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
        ])
      fi
  
      CPPFLAGS="$save_CPPFLAGS"
      LDFLAGS="$save_LDFLAGS"
      LIBS="$save_LIBS"
      ;;
    esac
  
    case $lt_cv_dlopen_self in
    yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
    *) enable_dlopen_self=unknown ;;
    esac
  
    case $lt_cv_dlopen_self_static in
    yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
    *) enable_dlopen_self_static=unknown ;;
    esac
  fi
  ])# AC_LIBTOOL_DLOPEN_SELF
  
  AC_DEFUN([_LT_AC_LTCONFIG_HACK],
  [AC_REQUIRE([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])dnl
  # Sed substitution that helps us do robust quoting.  It backslashifies
  # metacharacters that are still active within double-quoted strings.
  Xsed='sed -e s/^X//'
  [sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g']
  
  # Same as above, but do not quote variable references.
  [double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g']
  
  # Sed substitution to delay expansion of an escaped shell variable in a
  # double_quote_subst'ed string.
  delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
  
  # Constants:
  rm="rm -f"
  
  # Global variables:
  default_ofile=libtool
  can_build_shared=yes
  
  # All known linkers require a `.a' archive for static linking (except M$VC,
  # which needs '.lib').
  libext=a
  ltmain="$ac_aux_dir/ltmain.sh"
  ofile="$default_ofile"
  with_gnu_ld="$lt_cv_prog_gnu_ld"
  need_locks="$enable_libtool_lock"
  
  old_CC="$CC"
  old_CFLAGS="$CFLAGS"
  
  # Set sane defaults for various variables
  test -z "$AR" && AR=ar
  test -z "$AR_FLAGS" && AR_FLAGS=cru
  test -z "$AS" && AS=as
  test -z "$CC" && CC=cc
  test -z "$DLLTOOL" && DLLTOOL=dlltool
  test -z "$LD" && LD=ld
  test -z "$LN_S" && LN_S="ln -s"
  test -z "$MAGIC_CMD" && MAGIC_CMD=file
  test -z "$NM" && NM=nm
  test -z "$OBJDUMP" && OBJDUMP=objdump
  test -z "$RANLIB" && RANLIB=:
  test -z "$STRIP" && STRIP=:
  test -z "$ac_objext" && ac_objext=o
  
  if test x"$host" != x"$build"; then
    ac_tool_prefix=${host_alias}-
  else
    ac_tool_prefix=
  fi
  
  # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
  case $host_os in
  linux-gnu*) ;;
  linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
  esac
  
  case $host_os in
  aix3*)
    # AIX sometimes has problems with the GCC collect2 program.  For some
    # reason, if we set the COLLECT_NAMES environment variable, the problems
    # vanish in a puff of smoke.
    if test "X${COLLECT_NAMES+set}" != Xset; then
      COLLECT_NAMES=
      export COLLECT_NAMES
    fi
    ;;
  esac
  
  # Determine commands to create old-style static archives.
  old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
  old_postinstall_cmds='chmod 644 $oldlib'
  old_postuninstall_cmds=
  
  if test -n "$RANLIB"; then
    old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
    old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
  fi
  
  # Allow CC to be a program name with arguments.
  set dummy $CC
  compiler="[$]2"
  
  ## FIXME: this should be a separate macro
  ##
  AC_MSG_CHECKING([for objdir])
  rm -f .libs 2>/dev/null
  mkdir .libs 2>/dev/null
  if test -d .libs; then
    objdir=.libs
  else
    # MS-DOS does not allow filenames that begin with a dot.
    objdir=_libs
  fi
  rmdir .libs 2>/dev/null
  AC_MSG_RESULT($objdir)
  ##
  ## END FIXME
  
  
  ## FIXME: this should be a separate macro
  ##
  AC_ARG_WITH(pic, 
  [  --with-pic              try to use only PIC/non-PIC objects [default=use both]],
  pic_mode="$withval", pic_mode=default)
  test -z "$pic_mode" && pic_mode=default
  
  # We assume here that the value for lt_cv_prog_cc_pic will not be cached
  # in isolation, and that seeing it set (from the cache) indicates that
  # the associated values are set (in the cache) correctly too.
  AC_MSG_CHECKING([for $compiler option to produce PIC])
  AC_CACHE_VAL(lt_cv_prog_cc_pic,
  [ lt_cv_prog_cc_pic=
    lt_cv_prog_cc_shlib=
    lt_cv_prog_cc_wl=
    lt_cv_prog_cc_static=
    lt_cv_prog_cc_no_builtin=
    lt_cv_prog_cc_can_build_shared=$can_build_shared
  
    if test "$GCC" = yes; then
      lt_cv_prog_cc_wl='-Wl,'
      lt_cv_prog_cc_static='-static'
  
      case $host_os in
      aix*)
        # Below there is a dirty hack to force normal static linking with -ldl
        # The problem is because libdl dynamically linked with both libc and
        # libC (AIX C++ library), which obviously doesn't included in libraries
        # list by gcc. This cause undefined symbols with -static flags.
        # This hack allows C programs to be linked with "-static -ldl", but
        # we not sure about C++ programs.
        lt_cv_prog_cc_static="$lt_cv_prog_cc_static ${lt_cv_prog_cc_wl}-lC"
        ;;
      amigaos*)
        # FIXME: we need at least 68020 code to build shared libraries, but
        # adding the `-m68020' flag to GCC prevents building anything better,
        # like `-m68040'.
        lt_cv_prog_cc_pic='-m68020 -resident32 -malways-restore-a4'
        ;;
      beos* | irix5* | irix6* | osf3* | osf4* | osf5*)
        # PIC is the default for these OSes.
        ;;
      darwin* | rhapsody*)
        # PIC is the default on this platform
        # Common symbols not allowed in MH_DYLIB files
        lt_cv_prog_cc_pic='-fno-common'
        ;;
      cygwin* | mingw* | pw32* | os2*)
        # This hack is so that the source file can tell whether it is being
        # built for inclusion in a dll (and should export symbols for example).
        lt_cv_prog_cc_pic='-DDLL_EXPORT'
        ;;
      sysv4*MP*)
        if test -d /usr/nec; then
  	 lt_cv_prog_cc_pic=-Kconform_pic
        fi
        ;;
      *)
        lt_cv_prog_cc_pic='-fPIC'
        ;;
      esac
    else
      # PORTME Check for PIC flags for the system compiler.
      case $host_os in
      aix3* | aix4* | aix5*)
        # All AIX code is PIC.
        if test "$host_cpu" = ia64; then
          # AIX 5 now supports IA64 processor
          lt_cv_prog_cc_static='-Bstatic'
          lt_cv_prog_cc_wl='-Wl,'
        else
          lt_cv_prog_cc_static='-bnso -bI:/lib/syscalls.exp'
        fi
        ;;
  
      hpux9* | hpux10* | hpux11*)
        # Is there a better lt_cv_prog_cc_static that works with the bundled CC?
        lt_cv_prog_cc_wl='-Wl,'
        lt_cv_prog_cc_static="${lt_cv_prog_cc_wl}-a ${lt_cv_prog_cc_wl}archive"
        lt_cv_prog_cc_pic='+Z'
        ;;
  
      irix5* | irix6*)
        lt_cv_prog_cc_wl='-Wl,'
        lt_cv_prog_cc_static='-non_shared'
        # PIC (with -KPIC) is the default.
        ;;
  
      cygwin* | mingw* | pw32* | os2*)
        # This hack is so that the source file can tell whether it is being
        # built for inclusion in a dll (and should export symbols for example).
        lt_cv_prog_cc_pic='-DDLL_EXPORT'
        ;;
  
      newsos6)
        lt_cv_prog_cc_pic='-KPIC'
        lt_cv_prog_cc_static='-Bstatic'
        ;;
  
      osf3* | osf4* | osf5*)
        # All OSF/1 code is PIC.
        lt_cv_prog_cc_wl='-Wl,'
        lt_cv_prog_cc_static='-non_shared'
        ;;
  
      sco3.2v5*)
        lt_cv_prog_cc_pic='-Kpic'
        lt_cv_prog_cc_static='-dn'
        lt_cv_prog_cc_shlib='-belf'
        ;;
  
      solaris*)
        lt_cv_prog_cc_pic='-KPIC'
        lt_cv_prog_cc_static='-Bstatic'
        lt_cv_prog_cc_wl='-Wl,'
        ;;
  
      sunos4*)
        lt_cv_prog_cc_pic='-PIC'
        lt_cv_prog_cc_static='-Bstatic'
        lt_cv_prog_cc_wl='-Qoption ld '
        ;;
  
      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
        lt_cv_prog_cc_pic='-KPIC'
        lt_cv_prog_cc_static='-Bstatic'
        if test "x$host_vendor" = xsni; then
          lt_cv_prog_cc_wl='-LD'
        else
          lt_cv_prog_cc_wl='-Wl,'
        fi
        ;;
  
      uts4*)
        lt_cv_prog_cc_pic='-pic'
        lt_cv_prog_cc_static='-Bstatic'
        ;;
  
      sysv4*MP*)
        if test -d /usr/nec ;then
  	lt_cv_prog_cc_pic='-Kconform_pic'
  	lt_cv_prog_cc_static='-Bstatic'
        fi
        ;;
  
      *)
        lt_cv_prog_cc_can_build_shared=no
        ;;
      esac
    fi
  ])
  if test -z "$lt_cv_prog_cc_pic"; then
    AC_MSG_RESULT([none])
  else
    AC_MSG_RESULT([$lt_cv_prog_cc_pic])
  
    # Check to make sure the pic_flag actually works.
    AC_MSG_CHECKING([if $compiler PIC flag $lt_cv_prog_cc_pic works])
    AC_CACHE_VAL(lt_cv_prog_cc_pic_works, [dnl
      save_CFLAGS="$CFLAGS"
      CFLAGS="$CFLAGS $lt_cv_prog_cc_pic -DPIC"
      AC_TRY_COMPILE([], [], [dnl
        case $host_os in
        hpux9* | hpux10* | hpux11*)
  	# On HP-UX, both CC and GCC only warn that PIC is supported... then
  	# they create non-PIC objects.  So, if there were any warnings, we
  	# assume that PIC is not supported.
  	if test -s conftest.err; then
  	  lt_cv_prog_cc_pic_works=no
  	else
  	  lt_cv_prog_cc_pic_works=yes
  	fi
  	;;
        *)
  	lt_cv_prog_cc_pic_works=yes
  	;;
        esac
      ], [dnl
        lt_cv_prog_cc_pic_works=no
      ])
      CFLAGS="$save_CFLAGS"
    ])
  
    if test "X$lt_cv_prog_cc_pic_works" = Xno; then
      lt_cv_prog_cc_pic=
      lt_cv_prog_cc_can_build_shared=no
    else
      lt_cv_prog_cc_pic=" $lt_cv_prog_cc_pic"
    fi
  
    AC_MSG_RESULT([$lt_cv_prog_cc_pic_works])
  fi
  ##
  ## END FIXME
  
  # Check for any special shared library compilation flags.
  if test -n "$lt_cv_prog_cc_shlib"; then
    AC_MSG_WARN([\`$CC' requires \`$lt_cv_prog_cc_shlib' to build shared libraries])
    if echo "$old_CC $old_CFLAGS " | [egrep -e "[ 	]$lt_cv_prog_cc_shlib[ 	]"] >/dev/null; then :
    else
     AC_MSG_WARN([add \`$lt_cv_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure])
      lt_cv_prog_cc_can_build_shared=no
    fi
  fi
  
  ## FIXME: this should be a separate macro
  ##
  AC_MSG_CHECKING([if $compiler static flag $lt_cv_prog_cc_static works])
  AC_CACHE_VAL([lt_cv_prog_cc_static_works], [dnl
    lt_cv_prog_cc_static_works=no
    save_LDFLAGS="$LDFLAGS"
    LDFLAGS="$LDFLAGS $lt_cv_prog_cc_static"
    AC_TRY_LINK([], [], [lt_cv_prog_cc_static_works=yes])
    LDFLAGS="$save_LDFLAGS"
  ])
  
  # Belt *and* braces to stop my trousers falling down:
  test "X$lt_cv_prog_cc_static_works" = Xno && lt_cv_prog_cc_static=
  AC_MSG_RESULT([$lt_cv_prog_cc_static_works])
  
  pic_flag="$lt_cv_prog_cc_pic"
  special_shlib_compile_flags="$lt_cv_prog_cc_shlib"
  wl="$lt_cv_prog_cc_wl"
  link_static_flag="$lt_cv_prog_cc_static"
  no_builtin_flag="$lt_cv_prog_cc_no_builtin"
  can_build_shared="$lt_cv_prog_cc_can_build_shared"
  ##
  ## END FIXME
  
  
  ## FIXME: this should be a separate macro
  ##
  # Check to see if options -o and -c are simultaneously supported by compiler
  AC_MSG_CHECKING([if $compiler supports -c -o file.$ac_objext])
  AC_CACHE_VAL([lt_cv_compiler_c_o], [
  $rm -r conftest 2>/dev/null
  mkdir conftest
  cd conftest
  echo "int some_variable = 0;" > conftest.$ac_ext
  mkdir out
  # According to Tom Tromey, Ian Lance Taylor reported there are C compilers
  # that will create temporary files in the current directory regardless of
  # the output directory.  Thus, making CWD read-only will cause this test
  # to fail, enabling locking or at least warning the user not to do parallel
  # builds.
  chmod -w .
  save_CFLAGS="$CFLAGS"
  CFLAGS="$CFLAGS -o out/conftest2.$ac_objext"
  compiler_c_o=no
  if { (eval echo configure:__oline__: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.$ac_objext; then
    # The compiler can only warn and ignore the option if not recognized
    # So say no if there are warnings
    if test -s out/conftest.err; then
      lt_cv_compiler_c_o=no
    else
      lt_cv_compiler_c_o=yes
    fi
  else
    # Append any errors to the config.log.
    cat out/conftest.err 1>&AC_FD_CC
    lt_cv_compiler_c_o=no
  fi
  CFLAGS="$save_CFLAGS"
  chmod u+w .
  $rm conftest* out/*
  rmdir out
  cd ..
  rmdir conftest
  $rm -r conftest 2>/dev/null
  ])
  compiler_c_o=$lt_cv_compiler_c_o
  AC_MSG_RESULT([$compiler_c_o])
  
  if test x"$compiler_c_o" = x"yes"; then
    # Check to see if we can write to a .lo
    AC_MSG_CHECKING([if $compiler supports -c -o file.lo])
    AC_CACHE_VAL([lt_cv_compiler_o_lo], [
    lt_cv_compiler_o_lo=no
    save_CFLAGS="$CFLAGS"
    CFLAGS="$CFLAGS -c -o conftest.lo"
    AC_TRY_COMPILE([], [int some_variable = 0;], [dnl
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings
      if test -s conftest.err; then
        lt_cv_compiler_o_lo=no
      else
        lt_cv_compiler_o_lo=yes
      fi
    ])
    CFLAGS="$save_CFLAGS"
    ])
    compiler_o_lo=$lt_cv_compiler_o_lo
    AC_MSG_RESULT([$compiler_c_lo])
  else
    compiler_o_lo=no
  fi
  ##
  ## END FIXME
  
  ## FIXME: this should be a separate macro
  ##
  # Check to see if we can do hard links to lock some files if needed
  hard_links="nottested"
  if test "$compiler_c_o" = no && test "$need_locks" != no; then
    # do not overwrite the value of need_locks provided by the user
    AC_MSG_CHECKING([if we can lock with hard links])
    hard_links=yes
    $rm conftest*
    ln conftest.a conftest.b 2>/dev/null && hard_links=no
    touch conftest.a
    ln conftest.a conftest.b 2>&5 || hard_links=no
    ln conftest.a conftest.b 2>/dev/null && hard_links=no
    AC_MSG_RESULT([$hard_links])
    if test "$hard_links" = no; then
      AC_MSG_WARN([\`$CC' does not support \`-c -o', so \`make -j' may be unsafe])
      need_locks=warn
    fi
  else
    need_locks=no
  fi
  ##
  ## END FIXME
  
  ## FIXME: this should be a separate macro
  ##
  if test "$GCC" = yes; then
    # Check to see if options -fno-rtti -fno-exceptions are supported by compiler
    AC_MSG_CHECKING([if $compiler supports -fno-rtti -fno-exceptions])
    echo "int some_variable = 0;" > conftest.$ac_ext
    save_CFLAGS="$CFLAGS"
    CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.$ac_ext"
    compiler_rtti_exceptions=no
    AC_TRY_COMPILE([], [int some_variable = 0;], [dnl
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings
      if test -s conftest.err; then
        compiler_rtti_exceptions=no
      else
        compiler_rtti_exceptions=yes
      fi
    ])
    CFLAGS="$save_CFLAGS"
    AC_MSG_RESULT([$compiler_rtti_exceptions])
  
    if test "$compiler_rtti_exceptions" = "yes"; then
      no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions'
    else
      no_builtin_flag=' -fno-builtin'
    fi
  fi
  ##
  ## END FIXME
  
  ## FIXME: this should be a separate macro
  ##
  # See if the linker supports building shared libraries.
  AC_MSG_CHECKING([whether the linker ($LD) supports shared libraries])
  
  allow_undefined_flag=
  no_undefined_flag=
  need_lib_prefix=unknown
  need_version=unknown
  # when you set need_version to no, make sure it does not cause -set_version
  # flags to be left without arguments
  archive_cmds=
  archive_expsym_cmds=
  old_archive_from_new_cmds=
  old_archive_from_expsyms_cmds=
  export_dynamic_flag_spec=
  whole_archive_flag_spec=
  thread_safe_flag_spec=
  hardcode_into_libs=no
  hardcode_libdir_flag_spec=
  hardcode_libdir_separator=
  hardcode_direct=no
  hardcode_minus_L=no
  hardcode_shlibpath_var=unsupported
  runpath_var=
  link_all_deplibs=unknown
  always_export_symbols=no
  export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols'
  # include_expsyms should be a list of space-separated symbols to be *always*
  # included in the symbol list
  include_expsyms=
  # exclude_expsyms can be an egrep regular expression of symbols to exclude
  # it will be wrapped by ` (' and `)$', so one must not match beginning or
  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
  # as well as any symbol that contains `d'.
  exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
  # platforms (ab)use it in PIC code, but their linkers get confused if
  # the symbol is explicitly referenced.  Since portable code cannot
  # rely on this symbol name, it's probably fine to never include it in
  # preloaded symbol tables.
  extract_expsyms_cmds=
  
  case $host_os in
  cygwin* | mingw* | pw32* )
    # FIXME: the MSVC++ port hasn't been tested in a loooong time
    # When not using gcc, we currently assume that we are using
    # Microsoft Visual C++.
    if test "$GCC" != yes; then
      with_gnu_ld=no
    fi
    ;;
  
  esac
  
  ld_shlibs=yes
  if test "$with_gnu_ld" = yes; then
    # If archive_cmds runs LD, not CC, wlarc should be empty
    wlarc='${wl}'
  
    # See if GNU ld supports shared libraries.
    case $host_os in
    aix3* | aix4* | aix5*)
      # On AIX, the GNU linker is very broken
      # Note:Check GNU linker on AIX 5-IA64 when/if it becomes available.
      ld_shlibs=no
      cat <<EOF 1>&2
  
  *** Warning: the GNU linker, at least up to release 2.9.1, is reported
  *** to be unable to reliably create shared libraries on AIX.
  *** Therefore, libtool is disabling shared libraries support.  If you
  *** really care for shared libraries, you may want to modify your PATH
  *** so that a non-GNU linker is found, and then restart.
  
  EOF
      ;;
  
    amigaos*)
      archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
      hardcode_libdir_flag_spec='-L$libdir'
      hardcode_minus_L=yes
  
      # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
      # that the semantics of dynamic libraries on AmigaOS, at least up
      # to version 4, is to share data among multiple programs linked
      # with the same dynamic library.  Since this doesn't match the
      # behavior of shared libraries on other platforms, we can use
      # them.
      ld_shlibs=no
      ;;
  
    beos*)
      if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
        allow_undefined_flag=unsupported
        # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
        # support --undefined.  This deserves some investigation.  FIXME
        archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
      else
        ld_shlibs=no
      fi
      ;;
  
    cygwin* | mingw* | pw32*)
      # hardcode_libdir_flag_spec is actually meaningless, as there is
      # no search path for DLLs.
      hardcode_libdir_flag_spec='-L$libdir'
      allow_undefined_flag=unsupported
      always_export_symbols=yes
  
      extract_expsyms_cmds='test -f $output_objdir/impgen.c || \
        sed -e "/^# \/\* impgen\.c starts here \*\//,/^# \/\* impgen.c ends here \*\// { s/^# //;s/^# *$//; p; }" -e d < $''0 > $output_objdir/impgen.c~
        test -f $output_objdir/impgen.exe || (cd $output_objdir && \
        if test "x$HOST_CC" != "x" ; then $HOST_CC -o impgen impgen.c ; \
        else $CC -o impgen impgen.c ; fi)~
        $output_objdir/impgen $dir/$soroot > $output_objdir/$soname-def'
  
      old_archive_from_expsyms_cmds='$DLLTOOL --as=$AS --dllname $soname --def $output_objdir/$soname-def --output-lib $output_objdir/$newlib'
  
      # cygwin and mingw dlls have different entry points and sets of symbols
      # to exclude.
      # FIXME: what about values for MSVC?
      dll_entry=__cygwin_dll_entry@12
      dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12~
      case $host_os in
      mingw*)
        # mingw values
        dll_entry=_DllMainCRTStartup@12
        dll_exclude_symbols=DllMain@12,DllMainCRTStartup@12,DllEntryPoint@12~
        ;;
      esac
  
      # mingw and cygwin differ, and it's simplest to just exclude the union
      # of the two symbol sets.
      dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12,DllMainCRTStartup@12,DllEntryPoint@12
  
      # recent cygwin and mingw systems supply a stub DllMain which the user
      # can override, but on older systems we have to supply one (in ltdll.c)
      if test "x$lt_cv_need_dllmain" = "xyes"; then
        ltdll_obj='$output_objdir/$soname-ltdll.'"$ac_objext "
        ltdll_cmds='test -f $output_objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < [$]0 > $output_objdir/$soname-ltdll.c~
  	test -f $output_objdir/$soname-ltdll.$ac_objext || (cd $output_objdir && $CC -c $soname-ltdll.c)~'
      else
        ltdll_obj=
        ltdll_cmds=
      fi
  
      # Extract the symbol export list from an `--export-all' def file,
      # then regenerate the def file from the symbol export list, so that
      # the compiled dll only exports the symbol export list.
      # Be careful not to strip the DATA tag left be newer dlltools.
      export_symbols_cmds="$ltdll_cmds"'
        $DLLTOOL --export-all --exclude-symbols '$dll_exclude_symbols' --output-def $output_objdir/$soname-def '$ltdll_obj'$libobjs $convenience~
        [sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]*//" -e "s/ *;.*$//"] < $output_objdir/$soname-def > $export_symbols'
  
      # If the export-symbols file already is a .def file (1st line
      # is EXPORTS), use it as is.
      # If DATA tags from a recent dlltool are present, honour them!
      archive_expsym_cmds='if test "x`head -1 $export_symbols`" = xEXPORTS; then
          cp $export_symbols $output_objdir/$soname-def;
        else
          echo EXPORTS > $output_objdir/$soname-def;
          _lt_hint=1;
          cat $export_symbols | while read symbol; do
           set dummy \$symbol;
           case \[$]# in
             2) echo "   \[$]2 @ \$_lt_hint ; " >> $output_objdir/$soname-def;;
             *) echo "     \[$]2 @ \$_lt_hint \[$]3 ; " >> $output_objdir/$soname-def;;
           esac;
           _lt_hint=`expr 1 + \$_lt_hint`;
          done;
        fi~
        '"$ltdll_cmds"'
        $CC -Wl,--base-file,$output_objdir/$soname-base '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~
        $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp~
        $CC -Wl,--base-file,$output_objdir/$soname-base $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~
        $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp --output-lib $output_objdir/$libname.dll.a~
        $CC $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags'
      ;;
  
    netbsd*)
      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
        archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
        wlarc=
      else
        archive_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
        archive_expsym_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
      fi
      ;;
  
    solaris* | sysv5*)
      if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then
        ld_shlibs=no
        cat <<EOF 1>&2
  
  *** Warning: The releases 2.8.* of the GNU linker cannot reliably
  *** create shared libraries on Solaris systems.  Therefore, libtool
  *** is disabling shared libraries support.  We urge you to upgrade GNU
  *** binutils to release 2.9.1 or newer.  Another option is to modify
  *** your PATH or compiler configuration so that the native linker is
  *** used, and then restart.
  
  EOF
      elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
        archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
      else
        ld_shlibs=no
      fi
      ;;
  
    sunos4*)
      archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
      wlarc=
      hardcode_direct=yes
      hardcode_shlibpath_var=no
      ;;
  
    *)
      if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
        archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
      else
        ld_shlibs=no
      fi
      ;;
    esac
  
    if test "$ld_shlibs" = yes; then
      runpath_var=LD_RUN_PATH
      hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
      export_dynamic_flag_spec='${wl}--export-dynamic'
      case $host_os in
      cygwin* | mingw* | pw32*)
        # dlltool doesn't understand --whole-archive et. al.
        whole_archive_flag_spec=
        ;;
      *)
        # ancient GNU ld didn't support --whole-archive et. al.
        if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then
  	whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
        else
  	whole_archive_flag_spec=
        fi
        ;;
      esac
    fi
  else
    # PORTME fill in a description of your system's linker (not GNU ld)
    case $host_os in
    aix3*)
      allow_undefined_flag=unsupported
      always_export_symbols=yes
      archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
      # Note: this linker hardcodes the directories in LIBPATH if there
      # are no directories specified by -L.
      hardcode_minus_L=yes
      if test "$GCC" = yes && test -z "$link_static_flag"; then
        # Neither direct hardcoding nor static linking is supported with a
        # broken collect2.
        hardcode_direct=unsupported
      fi
      ;;
  
    aix4* | aix5*)
      # When large executables or shared objects are built, AIX ld can
      # have problems creating the table of contents.  If linking a library
      # or program results in "error TOC overflow" add -mminimal-toc to
      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
  
      archive_cmds=''
      hardcode_libdir_separator=':'
      if test "$GCC" = yes; then
        collect2name=`${CC} -print-prog-name=collect2`
        if test -f "$collect2name" && \
  	 strings "$collect2name" | grep resolve_lib_name >/dev/null
        then
  	# We have reworked collect2
  	hardcode_direct=yes
        else
          # We have old collect2
          hardcode_direct=unsupported
          # It fails to find uninstalled libraries when the uninstalled
          # path is not listed in the libpath.  Setting hardcode_minus_L
          # to unsupported forces relinking
          hardcode_minus_L=yes
          hardcode_libdir_flag_spec='-L$libdir'
          hardcode_libdir_separator=
        fi
        shared_flag='-shared'
      else
        if test "$host_cpu" = ia64; then
          shared_flag='-G'
        else
          shared_flag='${wl}-bM:SRE'
        fi
        hardcode_direct=yes
      fi
  
      if test "$host_cpu" = ia64; then
        # On IA64, the linker does run time linking by default, so we don't
        # have to do anything special.
        aix_use_runtimelinking=no
        exp_sym_flag='-Bexport'
        no_entry_flag=""
      else
        # Test if we are trying to use run time linking, or normal AIX style linking.
        # If -brtl is somewhere in LDFLAGS, we need to do run time linking.
        aix_use_runtimelinking=no
        for ld_flag in $LDFLAGS; do
          if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl" ); then
            aix_use_runtimelinking=yes
            break
          fi
        done
        exp_sym_flag='-bexport'
        no_entry_flag='-bnoentry'
      fi
      # It seems that -bexpall can do strange things, so it is better to
      # generate a list of symbols to export.
      always_export_symbols=yes
      if test "$aix_use_runtimelinking" = yes; then
        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib'
        allow_undefined_flag=' -Wl,-G'
        archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
      else
        if test "$host_cpu" = ia64; then
          hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
         allow_undefined_flag="-znodefs"
          archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname ${wl}-h$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
        else
          hardcode_libdir_flag_spec='${wl}-bnolibpath ${wl}-blibpath:$libdir:/usr/lib:/lib'
          # Warning - without using the other run time loading flags, -berok will
          #           link without error, but may produce a broken library.
          allow_undefined_flag='${wl}-berok"
          # This is a bit strange, but is similar to how AIX traditionally builds
          # it's shared libraries.
          archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"' ~$AR -crlo $objdir/$libname$release.a $objdir/$soname'
        fi
      fi
      ;;
  
    amigaos*)
      archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
      hardcode_libdir_flag_spec='-L$libdir'
      hardcode_minus_L=yes
      # see comment about different semantics on the GNU ld section
      ld_shlibs=no
      ;;
  
    cygwin* | mingw* | pw32*)
      # When not using gcc, we currently assume that we are using
      # Microsoft Visual C++.
      # hardcode_libdir_flag_spec is actually meaningless, as there is
      # no search path for DLLs.
      hardcode_libdir_flag_spec=' '
      allow_undefined_flag=unsupported
      # Tell ltmain to make .lib files, not .a files.
      libext=lib
      # FIXME: Setting linknames here is a bad hack.
      archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames='
      # The linker will automatically build a .lib file if we build a DLL.
      old_archive_from_new_cmds='true'
      # FIXME: Should let the user specify the lib program.
      old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs'
      fix_srcfile_path='`cygpath -w "$srcfile"`'
      ;;
  
    darwin* | rhapsody*)
      allow_undefined_flag='-undefined suppress'
      # FIXME: Relying on posixy $() will cause problems for
      #        cross-compilation, but unfortunately the echo tests do not
      #        yet detect zsh echo's removal of \ escapes.
      archive_cmds='$CC $(test .$module = .yes && echo -bundle || echo -dynamiclib) $allow_undefined_flag -o $lib $libobjs $deplibs$linkopts -install_name $rpath/$soname $(test -n "$verstring" -a x$verstring != x0.0 && echo $verstring)'
      # We need to add '_' to the symbols in $export_symbols first
      #archive_expsym_cmds="$archive_cmds"' && strip -s $export_symbols'
      hardcode_direct=yes
      hardcode_shlibpath_var=no
      whole_archive_flag_spec='-all_load $convenience'
      ;;
  
    freebsd1*)
      ld_shlibs=no
      ;;
  
    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
    # support.  Future versions do this automatically, but an explicit c++rt0.o
    # does not break anything, and helps significantly (at the cost of a little
    # extra space).
    freebsd2.2*)
      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
      hardcode_libdir_flag_spec='-R$libdir'
      hardcode_direct=yes
      hardcode_shlibpath_var=no
      ;;
  
    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
    freebsd2*)
      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
      hardcode_direct=yes
      hardcode_minus_L=yes
      hardcode_shlibpath_var=no
      ;;
  
    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
    freebsd*)
      archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
      hardcode_libdir_flag_spec='-R$libdir'
      hardcode_direct=yes
      hardcode_shlibpath_var=no
      ;;
  
    hpux9* | hpux10* | hpux11*)
      case $host_os in
      hpux9*) archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ;;
      *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;;
      esac
      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
      hardcode_libdir_separator=:
      hardcode_direct=yes
      hardcode_minus_L=yes # Not in the search PATH, but as the default
  			 # location of the library.
      export_dynamic_flag_spec='${wl}-E'
      ;;
  
    irix5* | irix6*)
      if test "$GCC" = yes; then
        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
      else
        archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
      fi
      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
      hardcode_libdir_separator=:
      link_all_deplibs=yes
      ;;
  
    netbsd*)
      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
        archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
      else
        archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
      fi
      hardcode_libdir_flag_spec='-R$libdir'
      hardcode_direct=yes
      hardcode_shlibpath_var=no
      ;;
  
    newsos6)
      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
      hardcode_direct=yes
      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
      hardcode_libdir_separator=:
      hardcode_shlibpath_var=no
      ;;
  
    openbsd*)
      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
      hardcode_libdir_flag_spec='-R$libdir'
      hardcode_direct=yes
      hardcode_shlibpath_var=no
      ;;
  
    os2*)
      hardcode_libdir_flag_spec='-L$libdir'
      hardcode_minus_L=yes
      allow_undefined_flag=unsupported
      archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
      old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
      ;;
  
    osf3*)
      if test "$GCC" = yes; then
        allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
        archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
      else
        allow_undefined_flag=' -expect_unresolved \*'
        archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
      fi
      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
      hardcode_libdir_separator=:
      ;;
  
    osf4* | osf5*)	# as osf3* with the addition of -msym flag
      if test "$GCC" = yes; then
        allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
        archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
        hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
      else
        allow_undefined_flag=' -expect_unresolved \*'
        archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
        archive_expsym_cmds='for i in `cat $export_symbols`; do printf "-exported_symbol " >> $lib.exp; echo "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
        $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
  
        #Both c and cxx compiler support -rpath directly
        hardcode_libdir_flag_spec='-rpath $libdir'
      fi
      hardcode_libdir_separator=:
      ;;
  
    sco3.2v5*)
      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
      hardcode_shlibpath_var=no
      runpath_var=LD_RUN_PATH
      hardcode_runpath_var=yes
      ;;
  
    solaris*)
      no_undefined_flag=' -z defs'
      # $CC -shared without GNU ld will not create a library from C++
      # object files and a static libstdc++, better avoid it by now
      archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
      archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
  		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
      hardcode_libdir_flag_spec='-R$libdir'
      hardcode_shlibpath_var=no
      case $host_os in
      [solaris2.[0-5] | solaris2.[0-5].*]) ;;
      *) # Supported since Solaris 2.6 (maybe 2.5.1?)
        whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;
      esac
      link_all_deplibs=yes
      ;;
  
    sunos4*)
      if test "x$host_vendor" = xsequent; then
        # Use $CC to link under sequent, because it throws in some extra .o
        # files that make .init and .fini sections work.
        archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
      else
        archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
      fi
      hardcode_libdir_flag_spec='-L$libdir'
      hardcode_direct=yes
      hardcode_minus_L=yes
      hardcode_shlibpath_var=no
      ;;
  
    sysv4)
      if test "x$host_vendor" = xsno; then
        archive_cmds='$LD -G -Bsymbolic -h $soname -o $lib $libobjs $deplibs $linkopts'
        hardcode_direct=yes # is this really true???
      else
        archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
        hardcode_direct=no #Motorola manual says yes, but my tests say they lie
      fi
      runpath_var='LD_RUN_PATH'
      hardcode_shlibpath_var=no
      ;;
  
    sysv4.3*)
      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
      hardcode_shlibpath_var=no
      export_dynamic_flag_spec='-Bexport'
      ;;
  
    sysv5*)
      no_undefined_flag=' -z text'
      # $CC -shared without GNU ld will not create a library from C++
      # object files and a static libstdc++, better avoid it by now
      archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
      archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
  		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
      hardcode_libdir_flag_spec=
      hardcode_shlibpath_var=no
      runpath_var='LD_RUN_PATH'
      ;;
  
    uts4*)
      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
      hardcode_libdir_flag_spec='-L$libdir'
      hardcode_shlibpath_var=no
      ;;
  
    dgux*)
      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
      hardcode_libdir_flag_spec='-L$libdir'
      hardcode_shlibpath_var=no
      ;;
  
    sysv4*MP*)
      if test -d /usr/nec; then
        archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
        hardcode_shlibpath_var=no
        runpath_var=LD_RUN_PATH
        hardcode_runpath_var=yes
        ld_shlibs=yes
      fi
      ;;
  
    sysv4.2uw2*)
      archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
      hardcode_direct=yes
      hardcode_minus_L=no
      hardcode_shlibpath_var=no
      hardcode_runpath_var=yes
      runpath_var=LD_RUN_PATH
      ;;
  
    sysv5uw7* | unixware7*)
      no_undefined_flag='${wl}-z ${wl}text'
      if test "$GCC" = yes; then
        archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
      else
        archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
      fi
      runpath_var='LD_RUN_PATH'
      hardcode_shlibpath_var=no
      ;;
  
    *)
      ld_shlibs=no
      ;;
    esac
  fi
  AC_MSG_RESULT([$ld_shlibs])
  test "$ld_shlibs" = no && can_build_shared=no
  ##
  ## END FIXME
  
  ## FIXME: this should be a separate macro
  ##
  # Check hardcoding attributes.
  AC_MSG_CHECKING([how to hardcode library paths into programs])
  hardcode_action=
  if test -n "$hardcode_libdir_flag_spec" || \
     test -n "$runpath_var"; then
  
    # We can hardcode non-existant directories.
    if test "$hardcode_direct" != no &&
       # If the only mechanism to avoid hardcoding is shlibpath_var, we
       # have to relink, otherwise we might link with an installed library
       # when we should be linking with a yet-to-be-installed one
       ## test "$hardcode_shlibpath_var" != no &&
       test "$hardcode_minus_L" != no; then
      # Linking always hardcodes the temporary library directory.
      hardcode_action=relink
    else
      # We can link without hardcoding, and we can hardcode nonexisting dirs.
      hardcode_action=immediate
    fi
  else
    # We cannot hardcode anything, or else we can only hardcode existing
    # directories.
    hardcode_action=unsupported
  fi
  AC_MSG_RESULT([$hardcode_action])
  ##
  ## END FIXME
  
  ## FIXME: this should be a separate macro
  ##
  striplib=
  old_striplib=
  AC_MSG_CHECKING([whether stripping libraries is possible])
  if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
    test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
    test -z "$striplib" && striplib="$STRIP --strip-unneeded"
    AC_MSG_RESULT([yes])
  else
    AC_MSG_RESULT([no])
  fi
  ##
  ## END FIXME
  
  reload_cmds='$LD$reload_flag -o $output$reload_objs'
  test -z "$deplibs_check_method" && deplibs_check_method=unknown
  
  ## FIXME: this should be a separate macro
  ##
  # PORTME Fill in your ld.so characteristics
  AC_MSG_CHECKING([dynamic linker characteristics])
  library_names_spec=
  libname_spec='lib$name'
  soname_spec=
  postinstall_cmds=
  postuninstall_cmds=
  finish_cmds=
  finish_eval=
  shlibpath_var=
  shlibpath_overrides_runpath=unknown
  version_type=none
  dynamic_linker="$host_os ld.so"
  sys_lib_dlsearch_path_spec="/lib /usr/lib"
  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
  
  case $host_os in
  aix3*)
    version_type=linux
    library_names_spec='${libname}${release}.so$versuffix $libname.a'
    shlibpath_var=LIBPATH
  
    # AIX has no versioning support, so we append a major version to the name.
    soname_spec='${libname}${release}.so$major'
    ;;
  
  aix4* | aix5*)
    version_type=linux
    if test "$host_cpu" = ia64; then
      # AIX 5 supports IA64
      library_names_spec='${libname}${release}.so$major ${libname}${release}.so$versuffix $libname.so'
      shlibpath_var=LD_LIBRARY_PATH
    else
      # With GCC up to 2.95.x, collect2 would create an import file
      # for dependence libraries.  The import file would start with
      # the line `#! .'.  This would cause the generated library to
      # depend on `.', always an invalid library.  This was fixed in
      # development snapshots of GCC prior to 3.0.
      case $host_os in
        [ aix4 | aix4.[01] | aix4.[01].*)]
        if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
             echo ' yes '
             echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
          :
        else
          can_build_shared=no
        fi
        ;;
      esac
      # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
      # soname into executable. Probably we can add versioning support to
      # collect2, so additional links can be useful in future.
      if test "$aix_use_runtimelinking" = yes; then
        # If using run time linking (on AIX 4.2 or later) use lib<name>.so instead of
        # lib<name>.a to let people know that these are not typical AIX shared libraries.
        library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
      else
        # We preserve .a as extension for shared libraries through AIX4.2
        # and later when we are not doing run time linking.
        library_names_spec='${libname}${release}.a $libname.a'
        soname_spec='${libname}${release}.so$major'
      fi
      shlibpath_var=LIBPATH
      deplibs_check_method=pass_all
    fi
    ;;
  
  amigaos*)
    library_names_spec='$libname.ixlibrary $libname.a'
    # Create ${libname}_ixlibrary.a entries in /sys/libs.
    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | [$Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\'']`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
    ;;
  
  beos*)
    library_names_spec='${libname}.so'
    dynamic_linker="$host_os ld.so"
    shlibpath_var=LIBRARY_PATH
    ;;
  
  bsdi4*)
    version_type=linux
    need_version=no
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
    soname_spec='${libname}${release}.so$major'
    finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
    shlibpath_var=LD_LIBRARY_PATH
    sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
    sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
    export_dynamic_flag_spec=-rdynamic
    # the default ld.so.conf also contains /usr/contrib/lib and
    # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
    # libtool to hard-code these into programs
    ;;
  
  cygwin* | mingw* | pw32*)
    version_type=windows
    need_version=no
    need_lib_prefix=no
    case $GCC,$host_os in
    yes,cygwin*)
      library_names_spec='$libname.dll.a'
      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | [sed -e 's/[.]/-/g']`${versuffix}.dll'
      postinstall_cmds='dlpath=`bash 2>&1 -c '\''. $dir/${file}i;echo \$dlname'\''`~
        dldir=$destdir/`dirname \$dlpath`~
        test -d \$dldir || mkdir -p \$dldir~
        $install_prog .libs/$dlname \$dldir/$dlname'
      postuninstall_cmds='dldll=`bash 2>&1 -c '\''. $file; echo \$dlname'\''`~
        dlpath=$dir/\$dldll~
         $rm \$dlpath'
      ;;
    yes,mingw*)
      library_names_spec='${libname}`echo ${release} | [sed -e 's/[.]/-/g']`${versuffix}.dll'
      sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | sed -e "s/^libraries://" -e "s/;/ /g"`
      ;;
    yes,pw32*)
      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll'
      ;;
    *)
      library_names_spec='${libname}`echo ${release} | [sed -e 's/[.]/-/g']`${versuffix}.dll $libname.lib'
      ;;
    esac
    dynamic_linker='Win32 ld.exe'
    # FIXME: first we should search . and the directory the executable is in
    shlibpath_var=PATH
    ;;
  
  darwin* | rhapsody*)
    dynamic_linker="$host_os dyld"
    version_type=darwin
    need_lib_prefix=no
    need_version=no
    # FIXME: Relying on posixy $() will cause problems for
    #        cross-compilation, but unfortunately the echo tests do not
    #        yet detect zsh echo's removal of \ escapes.
    library_names_spec='${libname}${release}${versuffix}.$(test .$module = .yes && echo so || echo dylib) ${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib) ${libname}.$(test .$module = .yes && echo so || echo dylib)'
    soname_spec='${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib)'
    shlibpath_overrides_runpath=yes
    shlibpath_var=DYLD_LIBRARY_PATH
    ;;
  
  freebsd1*)
    dynamic_linker=no
    ;;
  
  freebsd*)
    objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
    version_type=freebsd-$objformat
    case $version_type in
      freebsd-elf*)
        library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
        need_version=no
        need_lib_prefix=no
        ;;
      freebsd-*)
        library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix'
        need_version=yes
        ;;
    esac
    shlibpath_var=LD_LIBRARY_PATH
    case $host_os in
    freebsd2*)
      shlibpath_overrides_runpath=yes
      ;;
    *)
      shlibpath_overrides_runpath=no
      hardcode_into_libs=yes
      ;;
    esac
    ;;
  
  gnu*)
    version_type=linux
    need_lib_prefix=no
    need_version=no
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so'
    soname_spec='${libname}${release}.so$major'
    shlibpath_var=LD_LIBRARY_PATH
    hardcode_into_libs=yes
    ;;
  
  hpux9* | hpux10* | hpux11*)
    # Give a soname corresponding to the major version so that dld.sl refuses to
    # link against other versions.
    dynamic_linker="$host_os dld.sl"
    version_type=sunos
    need_lib_prefix=no
    need_version=no
    shlibpath_var=SHLIB_PATH
    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
    library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl'
    soname_spec='${libname}${release}.sl$major'
    # HP-UX runs *really* slowly unless shared libraries are mode 555.
    postinstall_cmds='chmod 555 $lib'
    ;;
  
  irix5* | irix6*)
    version_type=irix
    need_lib_prefix=no
    need_version=no
    soname_spec='${libname}${release}.so$major'
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so $libname.so'
    case $host_os in
    irix5*)
      libsuff= shlibsuff=
      ;;
    *)
      case $LD in # libtool.m4 will add one of these switches to LD
      *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;;
      *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;;
      *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;;
      *) libsuff= shlibsuff= libmagic=never-match;;
      esac
      ;;
    esac
    shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
    shlibpath_overrides_runpath=no
    sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
    sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
    ;;
  
  # No shared lib support for Linux oldld, aout, or coff.
  linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*)
    dynamic_linker=no
    ;;
  
  # This must be Linux ELF.
  linux-gnu*)
    version_type=linux
    need_lib_prefix=no
    need_version=no
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
    soname_spec='${libname}${release}.so$major'
    finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
    shlibpath_var=LD_LIBRARY_PATH
    shlibpath_overrides_runpath=no
    # This implies no fast_install, which is unacceptable.
    # Some rework will be needed to allow for fast_install
    # before this can be enabled.
    hardcode_into_libs=yes
  
    # We used to test for /lib/ld.so.1 and disable shared libraries on
    # powerpc, because MkLinux only supported shared libraries with the
    # GNU dynamic linker.  Since this was broken with cross compilers,
    # most powerpc-linux boxes support dynamic linking these days and
    # people can always --disable-shared, the test was removed, and we
    # assume the GNU/Linux dynamic linker is in use.
    dynamic_linker='GNU/Linux ld.so'
    ;;
  
  netbsd*)
    version_type=sunos
    need_lib_prefix=no
    need_version=no
    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
      library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
      finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
      dynamic_linker='NetBSD (a.out) ld.so'
    else
      library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so'
      soname_spec='${libname}${release}.so$major'
      dynamic_linker='NetBSD ld.elf_so'
    fi
    shlibpath_var=LD_LIBRARY_PATH
    shlibpath_overrides_runpath=yes
    hardcode_into_libs=yes
    ;;
  
  newsos6)
    version_type=linux
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
    shlibpath_var=LD_LIBRARY_PATH
    shlibpath_overrides_runpath=yes
    ;;
  
  openbsd*)
    version_type=sunos
    if test "$with_gnu_ld" = yes; then
      need_lib_prefix=no
      need_version=no
    fi
    library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
    shlibpath_var=LD_LIBRARY_PATH
    ;;
  
  os2*)
    libname_spec='$name'
    need_lib_prefix=no
    library_names_spec='$libname.dll $libname.a'
    dynamic_linker='OS/2 ld.exe'
    shlibpath_var=LIBPATH
    ;;
  
  osf3* | osf4* | osf5*)
    version_type=osf
    need_version=no
    soname_spec='${libname}${release}.so'
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
    shlibpath_var=LD_LIBRARY_PATH
    sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
    sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
    ;;
  
  sco3.2v5*)
    version_type=osf
    soname_spec='${libname}${release}.so$major'
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
    shlibpath_var=LD_LIBRARY_PATH
    ;;
  
  solaris*)
    version_type=linux
    need_lib_prefix=no
    need_version=no
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
    soname_spec='${libname}${release}.so$major'
    shlibpath_var=LD_LIBRARY_PATH
    shlibpath_overrides_runpath=yes
    hardcode_into_libs=yes
    # ldd complains unless libraries are executable
    postinstall_cmds='chmod +x $lib'
    ;;
  
  sunos4*)
    version_type=sunos
    library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
    finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
    shlibpath_var=LD_LIBRARY_PATH
    shlibpath_overrides_runpath=yes
    if test "$with_gnu_ld" = yes; then
      need_lib_prefix=no
    fi
    need_version=yes
    ;;
  
  sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
    version_type=linux
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
    soname_spec='${libname}${release}.so$major'
    shlibpath_var=LD_LIBRARY_PATH
    case $host_vendor in
      sni)
        shlibpath_overrides_runpath=no
        ;;
      motorola)
        need_lib_prefix=no
        need_version=no
        shlibpath_overrides_runpath=no
        sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
        ;;
    esac
    ;;
  
  uts4*)
    version_type=linux
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
    soname_spec='${libname}${release}.so$major'
    shlibpath_var=LD_LIBRARY_PATH
    ;;
  
  dgux*)
    version_type=linux
    need_lib_prefix=no
    need_version=no
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
    soname_spec='${libname}${release}.so$major'
    shlibpath_var=LD_LIBRARY_PATH
    ;;
  
  sysv4*MP*)
    if test -d /usr/nec ;then
      version_type=linux
      library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so'
      soname_spec='$libname.so.$major'
      shlibpath_var=LD_LIBRARY_PATH
    fi
    ;;
  
  *)
    dynamic_linker=no
    ;;
  esac
  AC_MSG_RESULT([$dynamic_linker])
  test "$dynamic_linker" = no && can_build_shared=no
  ##
  ## END FIXME
  
  ## FIXME: this should be a separate macro
  ##
  # Report the final consequences.
  AC_MSG_CHECKING([if libtool supports shared libraries])
  AC_MSG_RESULT([$can_build_shared])
  ##
  ## END FIXME
  
  if test "$hardcode_action" = relink; then
    # Fast installation is not supported
    enable_fast_install=no
  elif test "$shlibpath_overrides_runpath" = yes ||
       test "$enable_shared" = no; then
    # Fast installation is not necessary
    enable_fast_install=needless
  fi
  
  variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
  if test "$GCC" = yes; then
    variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
  fi
  
  AC_LIBTOOL_DLOPEN_SELF
  
  ## FIXME: this should be a separate macro
  ##
  if test "$enable_shared" = yes && test "$GCC" = yes; then
    case $archive_cmds in
    *'~'*)
      # FIXME: we may have to deal with multi-command sequences.
      ;;
    '$CC '*)
      # Test whether the compiler implicitly links with -lc since on some
      # systems, -lgcc has to come before -lc. If gcc already passes -lc
      # to ld, don't add -lc before -lgcc.
      AC_MSG_CHECKING([whether -lc should be explicitly linked in])
      AC_CACHE_VAL([lt_cv_archive_cmds_need_lc],
      [$rm conftest*
      echo 'static int dummy;' > conftest.$ac_ext
  
      if AC_TRY_EVAL(ac_compile); then
        soname=conftest
        lib=conftest
        libobjs=conftest.$ac_objext
        deplibs=
        wl=$lt_cv_prog_cc_wl
        compiler_flags=-v
        linker_flags=-v
        verstring=
        output_objdir=.
        libname=conftest
        save_allow_undefined_flag=$allow_undefined_flag
        allow_undefined_flag=
        if AC_TRY_EVAL(archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1)
        then
  	lt_cv_archive_cmds_need_lc=no
        else
  	lt_cv_archive_cmds_need_lc=yes
        fi
        allow_undefined_flag=$save_allow_undefined_flag
      else
        cat conftest.err 1>&5
      fi])
      AC_MSG_RESULT([$lt_cv_archive_cmds_need_lc])
      ;;
    esac
  fi
  need_lc=${lt_cv_archive_cmds_need_lc-yes}
  ##
  ## END FIXME
  
  ## FIXME: this should be a separate macro
  ##
  # The second clause should only fire when bootstrapping the
  # libtool distribution, otherwise you forgot to ship ltmain.sh
  # with your package, and you will get complaints that there are
  # no rules to generate ltmain.sh.
  if test -f "$ltmain"; then
    :
  else
    # If there is no Makefile yet, we rely on a make rule to execute
    # `config.status --recheck' to rerun these tests and create the
    # libtool script then.
    test -f Makefile && make "$ltmain"
  fi
  
  if test -f "$ltmain"; then
    trap "$rm \"${ofile}T\"; exit 1" 1 2 15
    $rm -f "${ofile}T"
  
    echo creating $ofile
  
    # Now quote all the things that may contain metacharacters while being
    # careful not to overquote the AC_SUBSTed values.  We take copies of the
    # variables and quote the copies for generation of the libtool script.
    for var in echo old_CC old_CFLAGS \
      AR AR_FLAGS CC LD LN_S NM SHELL \
      reload_flag reload_cmds wl \
      pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \
      thread_safe_flag_spec whole_archive_flag_spec libname_spec \
      library_names_spec soname_spec \
      RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \
      old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds \
      postuninstall_cmds extract_expsyms_cmds old_archive_from_expsyms_cmds \
      old_striplib striplib file_magic_cmd export_symbols_cmds \
      deplibs_check_method allow_undefined_flag no_undefined_flag \
      finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \
      hardcode_libdir_flag_spec hardcode_libdir_separator  \
      sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
      compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do
  
      case $var in
      reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \
      old_postinstall_cmds | old_postuninstall_cmds | \
      export_symbols_cmds | archive_cmds | archive_expsym_cmds | \
      extract_expsyms_cmds | old_archive_from_expsyms_cmds | \
      postinstall_cmds | postuninstall_cmds | \
      finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
        # Double-quote double-evaled strings.
        eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
        ;;
      *)
        eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
        ;;
      esac
    done
  
    cat <<__EOF__ > "${ofile}T"
  #! $SHELL
  
  # `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
  # Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
  # NOTE: Changes made to this file will be lost: look at ltmain.sh.
  #
  # Copyright (C) 1996-2000 Free Software Foundation, Inc.
  # Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
  #
  # This program is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 2 of the License, or
  # (at your option) any later version.
  #
  # This program is distributed in the hope that it will be useful, but
  # WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  # General Public License for more details.
  #
  # You should have received a copy of the GNU General Public License
  # along with this program; if not, write to the Free Software
  # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  #
  # As a special exception to the GNU General Public License, if you
  # distribute this file as part of a program that contains a
  # configuration script generated by Autoconf, you may include it under
  # the same distribution terms that you use for the rest of that program.
  
  # Sed that helps us avoid accidentally triggering echo(1) options like -n.
  Xsed="sed -e s/^X//"
  
  # The HP-UX ksh and POSIX shell print the target directory to stdout
  # if CDPATH is set.
  if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
  
  # ### BEGIN LIBTOOL CONFIG
  
  # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
  
  # Shell to use when invoking shell scripts.
  SHELL=$lt_SHELL
  
  # Whether or not to build shared libraries.
  build_libtool_libs=$enable_shared
  
  # Whether or not to add -lc for building shared libraries.
  build_libtool_need_lc=$need_lc
  
  # Whether or not to build static libraries.
  build_old_libs=$enable_static
  
  # Whether or not to optimize for fast installation.
  fast_install=$enable_fast_install
  
  # The host system.
  host_alias=$host_alias
  host=$host
  
  # An echo program that does not interpret backslashes.
  echo=$lt_echo
  
  # The archiver.
  AR=$lt_AR
  AR_FLAGS=$lt_AR_FLAGS
  
  # The default C compiler.
  CC=$lt_CC
  
  # Is the compiler the GNU C compiler?
  with_gcc=$GCC
  
  # The linker used to build libraries.
  LD=$lt_LD
  
  # Whether we need hard or soft links.
  LN_S=$lt_LN_S
  
  # A BSD-compatible nm program.
  NM=$lt_NM
  
  # A symbol stripping program
  STRIP=$STRIP
  
  # Used to examine libraries when file_magic_cmd begins "file"
  MAGIC_CMD=$MAGIC_CMD
  
  # Used on cygwin: DLL creation program.
  DLLTOOL="$DLLTOOL"
  
  # Used on cygwin: object dumper.
  OBJDUMP="$OBJDUMP"
  
  # Used on cygwin: assembler.
  AS="$AS"
  
  # The name of the directory that contains temporary libtool files.
  objdir=$objdir
  
  # How to create reloadable object files.
  reload_flag=$lt_reload_flag
  reload_cmds=$lt_reload_cmds
  
  # How to pass a linker flag through the compiler.
  wl=$lt_wl
  
  # Object file suffix (normally "o").
  objext="$ac_objext"
  
  # Old archive suffix (normally "a").
  libext="$libext"
  
  # Executable file suffix (normally "").
  exeext="$exeext"
  
  # Additional compiler flags for building library objects.
  pic_flag=$lt_pic_flag
  pic_mode=$pic_mode
  
  # Does compiler simultaneously support -c and -o options?
  compiler_c_o=$lt_compiler_c_o
  
  # Can we write directly to a .lo ?
  compiler_o_lo=$lt_compiler_o_lo
  
  # Must we lock files when doing compilation ?
  need_locks=$lt_need_locks
  
  # Do we need the lib prefix for modules?
  need_lib_prefix=$need_lib_prefix
  
  # Do we need a version for libraries?
  need_version=$need_version
  
  # Whether dlopen is supported.
  dlopen_support=$enable_dlopen
  
  # Whether dlopen of programs is supported.
  dlopen_self=$enable_dlopen_self
  
  # Whether dlopen of statically linked programs is supported.
  dlopen_self_static=$enable_dlopen_self_static
  
  # Compiler flag to prevent dynamic linking.
  link_static_flag=$lt_link_static_flag
  
  # Compiler flag to turn off builtin functions.
  no_builtin_flag=$lt_no_builtin_flag
  
  # Compiler flag to allow reflexive dlopens.
  export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
  
  # Compiler flag to generate shared objects directly from archives.
  whole_archive_flag_spec=$lt_whole_archive_flag_spec
  
  # Compiler flag to generate thread-safe objects.
  thread_safe_flag_spec=$lt_thread_safe_flag_spec
  
  # Library versioning type.
  version_type=$version_type
  
  # Format of library name prefix.
  libname_spec=$lt_libname_spec
  
  # List of archive names.  First name is the real one, the rest are links.
  # The last name is the one that the linker finds with -lNAME.
  library_names_spec=$lt_library_names_spec
  
  # The coded name of the library, if different from the real name.
  soname_spec=$lt_soname_spec
  
  # Commands used to build and install an old-style archive.
  RANLIB=$lt_RANLIB
  old_archive_cmds=$lt_old_archive_cmds
  old_postinstall_cmds=$lt_old_postinstall_cmds
  old_postuninstall_cmds=$lt_old_postuninstall_cmds
  
  # Create an old-style archive from a shared archive.
  old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
  
  # Create a temporary old-style archive to link instead of a shared archive.
  old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
  
  # Commands used to build and install a shared archive.
  archive_cmds=$lt_archive_cmds
  archive_expsym_cmds=$lt_archive_expsym_cmds
  postinstall_cmds=$lt_postinstall_cmds
  postuninstall_cmds=$lt_postuninstall_cmds
  
  # Commands to strip libraries.
  old_striplib=$lt_old_striplib
  striplib=$lt_striplib
  
  # Method to check whether dependent libraries are shared objects.
  deplibs_check_method=$lt_deplibs_check_method
  
  # Command to use when deplibs_check_method == file_magic.
  file_magic_cmd=$lt_file_magic_cmd
  
  # Flag that allows shared libraries with undefined symbols to be built.
  allow_undefined_flag=$lt_allow_undefined_flag
  
  # Flag that forces no undefined symbols.
  no_undefined_flag=$lt_no_undefined_flag
  
  # Commands used to finish a libtool library installation in a directory.
  finish_cmds=$lt_finish_cmds
  
  # Same as above, but a single script fragment to be evaled but not shown.
  finish_eval=$lt_finish_eval
  
  # Take the output of nm and produce a listing of raw symbols and C names.
  global_symbol_pipe=$lt_global_symbol_pipe
  
  # Transform the output of nm in a proper C declaration
  global_symbol_to_cdecl=$lt_global_symbol_to_cdecl
  
  # This is the shared library runtime path variable.
  runpath_var=$runpath_var
  
  # This is the shared library path variable.
  shlibpath_var=$shlibpath_var
  
  # Is shlibpath searched before the hard-coded library search path?
  shlibpath_overrides_runpath=$shlibpath_overrides_runpath
  
  # How to hardcode a shared library path into an executable.
  hardcode_action=$hardcode_action
  
  # Whether we should hardcode library paths into libraries.
  hardcode_into_libs=$hardcode_into_libs
  
  # Flag to hardcode \$libdir into a binary during linking.
  # This must work even if \$libdir does not exist.
  hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
  
  # Whether we need a single -rpath flag with a separated argument.
  hardcode_libdir_separator=$lt_hardcode_libdir_separator
  
  # Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
  # resulting binary.
  hardcode_direct=$hardcode_direct
  
  # Set to yes if using the -LDIR flag during linking hardcodes DIR into the
  # resulting binary.
  hardcode_minus_L=$hardcode_minus_L
  
  # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
  # the resulting binary.
  hardcode_shlibpath_var=$hardcode_shlibpath_var
  
  # Variables whose values should be saved in libtool wrapper scripts and
  # restored at relink time.
  variables_saved_for_relink="$variables_saved_for_relink"
  
  # Whether libtool must link a program against all its dependency libraries.
  link_all_deplibs=$link_all_deplibs
  
  # Compile-time system search path for libraries
  sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
  
  # Run-time system search path for libraries
  sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
  
  # Fix the shell variable \$srcfile for the compiler.
  fix_srcfile_path="$fix_srcfile_path"
  
  # Set to yes if exported symbols are required.
  always_export_symbols=$always_export_symbols
  
  # The commands to list exported symbols.
  export_symbols_cmds=$lt_export_symbols_cmds
  
  # The commands to extract the exported symbol list from a shared archive.
  extract_expsyms_cmds=$lt_extract_expsyms_cmds
  
  # Symbols that should not be listed in the preloaded symbols.
  exclude_expsyms=$lt_exclude_expsyms
  
  # Symbols that must always be exported.
  include_expsyms=$lt_include_expsyms
  
  # ### END LIBTOOL CONFIG
  
  __EOF__
  
    case $host_os in
    aix3*)
      cat <<\EOF >> "${ofile}T"
  
  # AIX sometimes has problems with the GCC collect2 program.  For some
  # reason, if we set the COLLECT_NAMES environment variable, the problems
  # vanish in a puff of smoke.
  if test "X${COLLECT_NAMES+set}" != Xset; then
    COLLECT_NAMES=
    export COLLECT_NAMES
  fi
  EOF
      ;;
    esac
  
    case $host_os in
    cygwin* | mingw* | pw32* | os2*)
      cat <<'EOF' >> "${ofile}T"
        # This is a source program that is used to create dlls on Windows
        # Don't remove nor modify the starting and closing comments
  # /* ltdll.c starts here */
  # #define WIN32_LEAN_AND_MEAN
  # #include <windows.h>
  # #undef WIN32_LEAN_AND_MEAN
  # #include <stdio.h>
  #
  # #ifndef __CYGWIN__
  # #  ifdef __CYGWIN32__
  # #    define __CYGWIN__ __CYGWIN32__
  # #  endif
  # #endif
  #
  # #ifdef __cplusplus
  # extern "C" {
  # #endif
  # BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
  # #ifdef __cplusplus
  # }
  # #endif
  #
  # #ifdef __CYGWIN__
  # #include <cygwin/cygwin_dll.h>
  # DECLARE_CYGWIN_DLL( DllMain );
  # #endif
  # HINSTANCE __hDllInstance_base;
  #
  # BOOL APIENTRY
  # DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
  # {
  #   __hDllInstance_base = hInst;
  #   return TRUE;
  # }
  # /* ltdll.c ends here */
          # This is a source program that is used to create import libraries
          # on Windows for dlls which lack them. Don't remove nor modify the
          # starting and closing comments
  # /* impgen.c starts here */
  # /*   Copyright (C) 1999-2000 Free Software Foundation, Inc.
  #
  #  This file is part of GNU libtool.
  #
  #  This program is free software; you can redistribute it and/or modify
  #  it under the terms of the GNU General Public License as published by
  #  the Free Software Foundation; either version 2 of the License, or
  #  (at your option) any later version.
  #
  #  This program is distributed in the hope that it will be useful,
  #  but WITHOUT ANY WARRANTY; without even the implied warranty of
  #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  #  GNU General Public License for more details.
  #
  #  You should have received a copy of the GNU General Public License
  #  along with this program; if not, write to the Free Software
  #  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  #  */
  #
  # #include <stdio.h>		/* for printf() */
  # #include <unistd.h>		/* for open(), lseek(), read() */
  # #include <fcntl.h>		/* for O_RDONLY, O_BINARY */
  # #include <string.h>		/* for strdup() */
  #
  # /* O_BINARY isn't required (or even defined sometimes) under Unix */
  # #ifndef O_BINARY
  # #define O_BINARY 0
  # #endif
  #
  # static unsigned int
  # pe_get16 (fd, offset)
  #      int fd;
  #      int offset;
  # {
  #   unsigned char b[2];
  #   lseek (fd, offset, SEEK_SET);
  #   read (fd, b, 2);
  #   return b[0] + (b[1]<<8);
  # }
  #
  # static unsigned int
  # pe_get32 (fd, offset)
  #     int fd;
  #     int offset;
  # {
  #   unsigned char b[4];
  #   lseek (fd, offset, SEEK_SET);
  #   read (fd, b, 4);
  #   return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
  # }
  #
  # static unsigned int
  # pe_as32 (ptr)
  #      void *ptr;
  # {
  #   unsigned char *b = ptr;
  #   return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
  # }
  #
  # int
  # main (argc, argv)
  #     int argc;
  #     char *argv[];
  # {
  #     int dll;
  #     unsigned long pe_header_offset, opthdr_ofs, num_entries, i;
  #     unsigned long export_rva, export_size, nsections, secptr, expptr;
  #     unsigned long name_rvas, nexp;
  #     unsigned char *expdata, *erva;
  #     char *filename, *dll_name;
  #
  #     filename = argv[1];
  #
  #     dll = open(filename, O_RDONLY|O_BINARY);
  #     if (dll < 1)
  # 	return 1;
  #
  #     dll_name = filename;
  #
  #     for (i=0; filename[i]; i++)
  # 	if (filename[i] == '/' || filename[i] == '\\'  || filename[i] == ':')
  # 	    dll_name = filename + i +1;
  #
  #     pe_header_offset = pe_get32 (dll, 0x3c);
  #     opthdr_ofs = pe_header_offset + 4 + 20;
  #     num_entries = pe_get32 (dll, opthdr_ofs + 92);
  #
  #     if (num_entries < 1) /* no exports */
  # 	return 1;
  #
  #     export_rva = pe_get32 (dll, opthdr_ofs + 96);
  #     export_size = pe_get32 (dll, opthdr_ofs + 100);
  #     nsections = pe_get16 (dll, pe_header_offset + 4 +2);
  #     secptr = (pe_header_offset + 4 + 20 +
  # 	      pe_get16 (dll, pe_header_offset + 4 + 16));
  #
  #     expptr = 0;
  #     for (i = 0; i < nsections; i++)
  #     {
  # 	char sname[8];
  # 	unsigned long secptr1 = secptr + 40 * i;
  # 	unsigned long vaddr = pe_get32 (dll, secptr1 + 12);
  # 	unsigned long vsize = pe_get32 (dll, secptr1 + 16);
  # 	unsigned long fptr = pe_get32 (dll, secptr1 + 20);
  # 	lseek(dll, secptr1, SEEK_SET);
  # 	read(dll, sname, 8);
  # 	if (vaddr <= export_rva && vaddr+vsize > export_rva)
  # 	{
  # 	    expptr = fptr + (export_rva - vaddr);
  # 	    if (export_rva + export_size > vaddr + vsize)
  # 		export_size = vsize - (export_rva - vaddr);
  # 	    break;
  # 	}
  #     }
  #
  #     expdata = (unsigned char*)malloc(export_size);
  #     lseek (dll, expptr, SEEK_SET);
  #     read (dll, expdata, export_size);
  #     erva = expdata - export_rva;
  #
  #     nexp = pe_as32 (expdata+24);
  #     name_rvas = pe_as32 (expdata+32);
  #
  #     printf ("EXPORTS\n");
  #     for (i = 0; i<nexp; i++)
  #     {
  # 	unsigned long name_rva = pe_as32 (erva+name_rvas+i*4);
  # 	printf ("\t%s @ %ld ;\n", erva+name_rva, 1+ i);
  #     }
  #
  #     return 0;
  # }
  # /* impgen.c ends here */
  
  EOF
      ;;
    esac
  
    # We use sed instead of cat because bash on DJGPP gets confused if
    # if finds mixed CR/LF and LF-only lines.  Since sed operates in
    # text mode, it properly converts lines to CR/LF.  This bash problem
    # is reportedly fixed, but why not run on old versions too?
    sed '$q' "$ltmain" >> "${ofile}T" || (rm -f "${ofile}T"; exit 1)
  
    mv -f "${ofile}T" "$ofile" || \
      (rm -f "$ofile" && cp "${ofile}T" "$ofile" && rm -f "${ofile}T")
    chmod +x "$ofile"
  fi
  ##
  ## END FIXME
  
  ])# _LT_AC_LTCONFIG_HACK
  
  # AC_LIBTOOL_DLOPEN - enable checks for dlopen support
  AC_DEFUN([AC_LIBTOOL_DLOPEN], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])])
  
  # AC_LIBTOOL_WIN32_DLL - declare package support for building win32 dll's
  AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_BEFORE([$0], [AC_LIBTOOL_SETUP])])
  
  # AC_ENABLE_SHARED - implement the --enable-shared flag
  # Usage: AC_ENABLE_SHARED[(DEFAULT)]
  #   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
  #   `yes'.
  AC_DEFUN([AC_ENABLE_SHARED],
  [define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
  AC_ARG_ENABLE(shared,
  changequote(<<, >>)dnl
  <<  --enable-shared[=PKGS]  build shared libraries [default=>>AC_ENABLE_SHARED_DEFAULT],
  changequote([, ])dnl
  [p=${PACKAGE-default}
  case $enableval in
  yes) enable_shared=yes ;;
  no) enable_shared=no ;;
  *)
    enable_shared=no
    # Look at the argument we got.  We use all the common list separators.
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
    for pkg in $enableval; do
      if test "X$pkg" = "X$p"; then
        enable_shared=yes
      fi
    done
    IFS="$ac_save_ifs"
    ;;
  esac],
  enable_shared=AC_ENABLE_SHARED_DEFAULT)dnl
  ])
  
  # AC_DISABLE_SHARED - set the default shared flag to --disable-shared
  AC_DEFUN([AC_DISABLE_SHARED],
  [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
  AC_ENABLE_SHARED(no)])
  
  # AC_ENABLE_STATIC - implement the --enable-static flag
  # Usage: AC_ENABLE_STATIC[(DEFAULT)]
  #   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
  #   `yes'.
  AC_DEFUN([AC_ENABLE_STATIC],
  [define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
  AC_ARG_ENABLE(static,
  changequote(<<, >>)dnl
  <<  --enable-static[=PKGS]  build static libraries [default=>>AC_ENABLE_STATIC_DEFAULT],
  changequote([, ])dnl
  [p=${PACKAGE-default}
  case $enableval in
  yes) enable_static=yes ;;
  no) enable_static=no ;;
  *)
    enable_static=no
    # Look at the argument we got.  We use all the common list separators.
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
    for pkg in $enableval; do
      if test "X$pkg" = "X$p"; then
        enable_static=yes
      fi
    done
    IFS="$ac_save_ifs"
    ;;
  esac],
  enable_static=AC_ENABLE_STATIC_DEFAULT)dnl
  ])
  
  # AC_DISABLE_STATIC - set the default static flag to --disable-static
  AC_DEFUN([AC_DISABLE_STATIC],
  [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
  AC_ENABLE_STATIC(no)])
  
  
  # AC_ENABLE_FAST_INSTALL - implement the --enable-fast-install flag
  # Usage: AC_ENABLE_FAST_INSTALL[(DEFAULT)]
  #   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
  #   `yes'.
  AC_DEFUN([AC_ENABLE_FAST_INSTALL],
  [define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
  AC_ARG_ENABLE(fast-install,
  changequote(<<, >>)dnl
  <<  --enable-fast-install[=PKGS]  optimize for fast installation [default=>>AC_ENABLE_FAST_INSTALL_DEFAULT],
  changequote([, ])dnl
  [p=${PACKAGE-default}
  case $enableval in
  yes) enable_fast_install=yes ;;
  no) enable_fast_install=no ;;
  *)
    enable_fast_install=no
    # Look at the argument we got.  We use all the common list separators.
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
    for pkg in $enableval; do
      if test "X$pkg" = "X$p"; then
        enable_fast_install=yes
      fi
    done
    IFS="$ac_save_ifs"
    ;;
  esac],
  enable_fast_install=AC_ENABLE_FAST_INSTALL_DEFAULT)dnl
  ])
  
  # AC_DISABLE_FAST_INSTALL - set the default to --disable-fast-install
  AC_DEFUN([AC_DISABLE_FAST_INSTALL],
  [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
  AC_ENABLE_FAST_INSTALL(no)])
  
  # AC_LIBTOOL_PICMODE - implement the --with-pic flag
  # Usage: AC_LIBTOOL_PICMODE[(MODE)]
  #   Where MODE is either `yes' or `no'.  If omitted, it defaults to
  #   `both'.
  AC_DEFUN([AC_LIBTOOL_PICMODE],
  [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
  pic_mode=ifelse($#,1,$1,default)])
  
  
  # AC_PATH_TOOL_PREFIX - find a file program which can recognise shared library
  AC_DEFUN([AC_PATH_TOOL_PREFIX],
  [AC_MSG_CHECKING([for $1])
  AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
  [case $MAGIC_CMD in
    /*)
    lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
    ;;
    ?:/*)
    lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path.
    ;;
    *)
    ac_save_MAGIC_CMD="$MAGIC_CMD"
    IFS="${IFS=   }"; ac_save_ifs="$IFS"; IFS=":"
  dnl $ac_dummy forces splitting on constant user-supplied paths.
  dnl POSIX.2 word splitting is done only on the output of word expansions,
  dnl not every word.  This closes a longstanding sh security hole.
    ac_dummy="ifelse([$2], , $PATH, [$2])"
    for ac_dir in $ac_dummy; do
      test -z "$ac_dir" && ac_dir=.
      if test -f $ac_dir/$1; then
        lt_cv_path_MAGIC_CMD="$ac_dir/$1"
        if test -n "$file_magic_test_file"; then
  	case $deplibs_check_method in
  	"file_magic "*)
  	  file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
  	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
  	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
  	    egrep "$file_magic_regex" > /dev/null; then
  	    :
  	  else
  	    cat <<EOF 1>&2
  
  *** Warning: the command libtool uses to detect shared libraries,
  *** $file_magic_cmd, produces output that libtool cannot recognize.
  *** The result is that libtool may fail to recognize shared libraries
  *** as such.  This will affect the creation of libtool libraries that
  *** depend on shared libraries, but programs linked with such libtool
  *** libraries will work regardless of this problem.  Nevertheless, you
  *** may want to report the problem to your system manager and/or to
  *** bug-libtool@gnu.org
  
  EOF
  	  fi ;;
  	esac
        fi
        break
      fi
    done
    IFS="$ac_save_ifs"
    MAGIC_CMD="$ac_save_MAGIC_CMD"
    ;;
  esac])
  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
  if test -n "$MAGIC_CMD"; then
    AC_MSG_RESULT($MAGIC_CMD)
  else
    AC_MSG_RESULT(no)
  fi
  ])
  
  
  # AC_PATH_MAGIC - find a file program which can recognise a shared library
  AC_DEFUN([AC_PATH_MAGIC],
  [AC_REQUIRE([AC_CHECK_TOOL_PREFIX])dnl
  AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin:$PATH)
  if test -z "$lt_cv_path_MAGIC_CMD"; then
    if test -n "$ac_tool_prefix"; then
      AC_PATH_TOOL_PREFIX(file, /usr/bin:$PATH)
    else
      MAGIC_CMD=:
    fi
  fi
  ])
  
  
  # AC_PROG_LD - find the path to the GNU or non-GNU linker
  AC_DEFUN([AC_PROG_LD],
  [AC_ARG_WITH(gnu-ld,
  [  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]],
  test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
  AC_REQUIRE([AC_PROG_CC])dnl
  AC_REQUIRE([AC_CANONICAL_HOST])dnl
  AC_REQUIRE([AC_CANONICAL_BUILD])dnl
  ac_prog=ld
  if test "$GCC" = yes; then
    # Check if gcc -print-prog-name=ld gives a path.
    AC_MSG_CHECKING([for ld used by GCC])
    case $host in
    *-*-mingw*)
      # gcc leaves a trailing carriage return which upsets mingw
      ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
    *)
      ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
    esac
    case $ac_prog in
      # Accept absolute paths.
      [[\\/]* | [A-Za-z]:[\\/]*)]
        [re_direlt='/[^/][^/]*/\.\./']
        # Canonicalize the path of ld
        ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
        while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
  	ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
        done
        test -z "$LD" && LD="$ac_prog"
        ;;
    "")
      # If it fails, then pretend we aren't using GCC.
      ac_prog=ld
      ;;
    *)
      # If it is relative, then search for the first ld in PATH.
      with_gnu_ld=unknown
      ;;
    esac
  elif test "$with_gnu_ld" = yes; then
    AC_MSG_CHECKING([for GNU ld])
  else
    AC_MSG_CHECKING([for non-GNU ld])
  fi
  AC_CACHE_VAL(lt_cv_path_LD,
  [if test -z "$LD"; then
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
    for ac_dir in $PATH; do
      test -z "$ac_dir" && ac_dir=.
      if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
        lt_cv_path_LD="$ac_dir/$ac_prog"
        # Check to see if the program is GNU ld.  I'd rather use --version,
        # but apparently some GNU ld's only accept -v.
        # Break only if it was the GNU/non-GNU ld that we prefer.
        if "$lt_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
  	test "$with_gnu_ld" != no && break
        else
  	test "$with_gnu_ld" != yes && break
        fi
      fi
    done
    IFS="$ac_save_ifs"
  else
    lt_cv_path_LD="$LD" # Let the user override the test with a path.
  fi])
  LD="$lt_cv_path_LD"
  if test -n "$LD"; then
    AC_MSG_RESULT($LD)
  else
    AC_MSG_RESULT(no)
  fi
  test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
  AC_PROG_LD_GNU
  ])
  
  # AC_PROG_LD_GNU -
  AC_DEFUN([AC_PROG_LD_GNU],
  [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
  [# I'd rather use --version here, but apparently some GNU ld's only accept -v.
  if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
    lt_cv_prog_gnu_ld=yes
  else
    lt_cv_prog_gnu_ld=no
  fi])
  with_gnu_ld=$lt_cv_prog_gnu_ld
  ])
  
  # AC_PROG_LD_RELOAD_FLAG - find reload flag for linker
  #   -- PORTME Some linkers may need a different reload flag.
  AC_DEFUN([AC_PROG_LD_RELOAD_FLAG],
  [AC_CACHE_CHECK([for $LD option to reload object files], lt_cv_ld_reload_flag,
  [lt_cv_ld_reload_flag='-r'])
  reload_flag=$lt_cv_ld_reload_flag
  test -n "$reload_flag" && reload_flag=" $reload_flag"
  ])
  
  # AC_DEPLIBS_CHECK_METHOD - how to check for library dependencies
  #  -- PORTME fill in with the dynamic library characteristics
  AC_DEFUN([AC_DEPLIBS_CHECK_METHOD],
  [AC_CACHE_CHECK([how to recognise dependant libraries],
  lt_cv_deplibs_check_method,
  [lt_cv_file_magic_cmd='$MAGIC_CMD'
  lt_cv_file_magic_test_file=
  lt_cv_deplibs_check_method='unknown'
  # Need to set the preceding variable on all platforms that support
  # interlibrary dependencies.
  # 'none' -- dependencies not supported.
  # `unknown' -- same as none, but documents that we really don't know.
  # 'pass_all' -- all dependencies passed with no checks.
  # 'test_compile' -- check by making test program.
  # ['file_magic [regex]'] -- check by looking for files in library path
  # which responds to the $file_magic_cmd with a given egrep regex.
  # If you have `file' or equivalent on your system and you're not sure
  # whether `pass_all' will *always* work, you probably want this one.
  
  case $host_os in
  aix4* | aix5*)
    lt_cv_deplibs_check_method=pass_all
    ;;
  
  beos*)
    lt_cv_deplibs_check_method=pass_all
    ;;
  
  bsdi4*)
    [lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)']
    lt_cv_file_magic_cmd='/usr/bin/file -L'
    lt_cv_file_magic_test_file=/shlib/libc.so
    ;;
  
  cygwin* | mingw* | pw32*)
    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
    lt_cv_file_magic_cmd='$OBJDUMP -f'
    ;;
  
  darwin* | rhapsody*)
    lt_cv_deplibs_check_method='file_magic Mach-O dynamically linked shared library'
    lt_cv_file_magic_cmd='/usr/bin/file -L'
    case "$host_os" in
    rhapsody* | darwin1.[012])
      lt_cv_file_magic_test_file=`echo /System/Library/Frameworks/System.framework/Versions/*/System | head -1`
      ;;
    *) # Darwin 1.3 on
      lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib'
      ;;
    esac
    ;;
  
  freebsd*)
    if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
      case $host_cpu in
      i*86 )
        # Not sure whether the presence of OpenBSD here was a mistake.
        # Let's accept both of them until this is cleared up.
        [lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[3-9]86 (compact )?demand paged shared library']
        lt_cv_file_magic_cmd=/usr/bin/file
        lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
        ;;
      esac
    else
      lt_cv_deplibs_check_method=pass_all
    fi
    ;;
  
  gnu*)
    lt_cv_deplibs_check_method=pass_all
    ;;
  
  hpux10.20*|hpux11*)
    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library']
    lt_cv_file_magic_cmd=/usr/bin/file
    lt_cv_file_magic_test_file=/usr/lib/libc.sl
    ;;
  
  irix5* | irix6*)
    case $host_os in
    irix5*)
      # this will be overridden with pass_all, but let us keep it just in case
      lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1"
      ;;
    *)
      case $LD in
      *-32|*"-32 ") libmagic=32-bit;;
      *-n32|*"-n32 ") libmagic=N32;;
      *-64|*"-64 ") libmagic=64-bit;;
      *) libmagic=never-match;;
      esac
      # this will be overridden with pass_all, but let us keep it just in case
      [lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[1234] dynamic lib MIPS - version 1"]
      ;;
    esac
    lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*`
    lt_cv_deplibs_check_method=pass_all
    ;;
  
  # This must be Linux ELF.
  linux-gnu*)
    case $host_cpu in
    alpha* | i*86 | powerpc* | sparc* | ia64* )
      lt_cv_deplibs_check_method=pass_all ;;
    *)
      # glibc up to 2.1.1 does not perform some relocations on ARM
      [lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;;]
    esac
    lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
    ;;
  
  netbsd*)
    if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
      [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$']
    else
      [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so$']
    fi
    ;;
  
  newos6*)
    [lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)']
    lt_cv_file_magic_cmd=/usr/bin/file
    lt_cv_file_magic_test_file=/usr/lib/libnls.so
    ;;
  
  osf3* | osf4* | osf5*)
    # this will be overridden with pass_all, but let us keep it just in case
    lt_cv_deplibs_check_method='file_magic COFF format alpha shared library'
    lt_cv_file_magic_test_file=/shlib/libc.so
    lt_cv_deplibs_check_method=pass_all
    ;;
  
  sco3.2v5*)
    lt_cv_deplibs_check_method=pass_all
    ;;
  
  solaris*)
    lt_cv_deplibs_check_method=pass_all
    lt_cv_file_magic_test_file=/lib/libc.so
    ;;
  
  [sysv5uw[78]* | sysv4*uw2*)]
    lt_cv_deplibs_check_method=pass_all
    ;;
  
  sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
    case $host_vendor in
    motorola)
      [lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]']
      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
      ;;
    ncr)
      lt_cv_deplibs_check_method=pass_all
      ;;
    sequent)
      lt_cv_file_magic_cmd='/bin/file'
      [lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )']
      ;;
    sni)
      lt_cv_file_magic_cmd='/bin/file'
      [lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"]
      lt_cv_file_magic_test_file=/lib/libc.so
      ;;
    esac
    ;;
  esac
  ])
  file_magic_cmd=$lt_cv_file_magic_cmd
  deplibs_check_method=$lt_cv_deplibs_check_method
  ])
  
  
  # AC_PROG_NM - find the path to a BSD-compatible name lister
  AC_DEFUN([AC_PROG_NM],
  [AC_MSG_CHECKING([for BSD-compatible nm])
  AC_CACHE_VAL(lt_cv_path_NM,
  [if test -n "$NM"; then
    # Let the user override the test.
    lt_cv_path_NM="$NM"
  else
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
    for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
      test -z "$ac_dir" && ac_dir=.
      tmp_nm=$ac_dir/${ac_tool_prefix}nm
      if test -f $tmp_nm || test -f $tmp_nm$ac_exeext ; then
        # Check to see if the nm accepts a BSD-compat flag.
        # Adding the `sed 1q' prevents false positives on HP-UX, which says:
        #   nm: unknown option "B" ignored
        # Tru64's nm complains that /dev/null is an invalid object file
        if ($tmp_nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep '(/dev/null|Invalid file or object type)' >/dev/null; then
  	lt_cv_path_NM="$tmp_nm -B"
  	break
        elif ($tmp_nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
  	lt_cv_path_NM="$tmp_nm -p"
  	break
        else
  	lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
  	continue # so that we can try to find one that supports BSD flags
        fi
      fi
    done
    IFS="$ac_save_ifs"
    test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
  fi])
  NM="$lt_cv_path_NM"
  AC_MSG_RESULT([$NM])
  ])
  
  # AC_CHECK_LIBM - check for math library
  AC_DEFUN([AC_CHECK_LIBM],
  [AC_REQUIRE([AC_CANONICAL_HOST])dnl
  LIBM=
  case $host in
  *-*-beos* | *-*-cygwin* | *-*-pw32*)
    # These system don't have libm
    ;;
  *-ncr-sysv4.3*)
    AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
    AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
    ;;
  *)
    AC_CHECK_LIB(m, main, LIBM="-lm")
    ;;
  esac
  ])
  
  # AC_LIBLTDL_CONVENIENCE[(dir)] - sets LIBLTDL to the link flags for
  # the libltdl convenience library and INCLTDL to the include flags for
  # the libltdl header and adds --enable-ltdl-convenience to the
  # configure arguments.  Note that LIBLTDL and INCLTDL are not
  # AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called.  If DIR is not
  # provided, it is assumed to be `libltdl'.  LIBLTDL will be prefixed
  # with '${top_builddir}/' and INCLTDL will be prefixed with
  # '${top_srcdir}/' (note the single quotes!).  If your package is not
  # flat and you're not using automake, define top_builddir and
  # top_srcdir appropriately in the Makefiles.
  AC_DEFUN([AC_LIBLTDL_CONVENIENCE],
  [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
    case $enable_ltdl_convenience in
    no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
    "") enable_ltdl_convenience=yes
        ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
    esac
    LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la
    INCLTDL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
  ])
  
  # AC_LIBLTDL_INSTALLABLE[(dir)] - sets LIBLTDL to the link flags for
  # the libltdl installable library and INCLTDL to the include flags for
  # the libltdl header and adds --enable-ltdl-install to the configure
  # arguments.  Note that LIBLTDL and INCLTDL are not AC_SUBSTed, nor is
  # AC_CONFIG_SUBDIRS called.  If DIR is not provided and an installed
  # libltdl is not found, it is assumed to be `libltdl'.  LIBLTDL will
  # be prefixed with '${top_builddir}/' and INCLTDL will be prefixed
  # with '${top_srcdir}/' (note the single quotes!).  If your package is
  # not flat and you're not using automake, define top_builddir and
  # top_srcdir appropriately in the Makefiles.
  # In the future, this macro may have to be called after AC_PROG_LIBTOOL.
  AC_DEFUN([AC_LIBLTDL_INSTALLABLE],
  [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
    AC_CHECK_LIB(ltdl, main,
    [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
    [if test x"$enable_ltdl_install" = xno; then
       AC_MSG_WARN([libltdl not installed, but installation disabled])
     else
       enable_ltdl_install=yes
     fi
    ])
    if test x"$enable_ltdl_install" = x"yes"; then
      ac_configure_args="$ac_configure_args --enable-ltdl-install"
      LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la
      INCLTDL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
    else
      ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
      LIBLTDL="-lltdl"
      INCLTDL=
    fi
  ])
  
  # old names
  AC_DEFUN([AM_PROG_LIBTOOL],   [AC_PROG_LIBTOOL])
  AC_DEFUN([AM_ENABLE_SHARED],  [AC_ENABLE_SHARED($@)])
  AC_DEFUN([AM_ENABLE_STATIC],  [AC_ENABLE_STATIC($@)])
  AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
  AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
  AC_DEFUN([AM_PROG_LD],        [AC_PROG_LD])
  AC_DEFUN([AM_PROG_NM],        [AC_PROG_NM])
  
  # This is just to silence aclocal about the macro not being used
  ifelse([AC_DISABLE_FAST_INSTALL])
    Index: ossp-pkg/l2/ltmain.sh
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 ltmain.sh
  --- ossp-pkg/l2/ltmain.sh	2001/05/10 19:46:01	1.1.1.1
  +++ ossp-pkg/l2/ltmain.sh	2001/08/15 07:49:59	1.2
  @@ -1,7 +1,8 @@
   # ltmain.sh - Provide generalized library-building support services.
  -# NOTE: Changing this file will not affect anything until you rerun ltconfig.
  +# NOTE: Changing this file will not affect anything until you rerun configure.
   #
  -# Copyright (C) 1996-1999 Free Software Foundation, Inc.
  +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
  +# Free Software Foundation, Inc.
   # Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
   #
   # This program is free software; you can redistribute it and/or modify
  @@ -54,8 +55,8 @@
   # Constants.
   PROGRAM=ltmain.sh
   PACKAGE=libtool
  -VERSION=1.3.5
  -TIMESTAMP=" (1.385.2.206 2000/05/27 11:12:27)"
  +VERSION=1.4
  +TIMESTAMP=" (1.920 2001/04/24 23:26:18)"
   
   default_mode=
   help="Try \`$progname --help' for more information."
  @@ -83,12 +84,6 @@
     save_LANG="$LANG"; LANG=C; export LANG
   fi
   
  -if test "$LTCONFIG_VERSION" != "$VERSION"; then
  -  echo "$modename: ltconfig version \`$LTCONFIG_VERSION' does not match $PROGRAM version \`$VERSION'" 1>&2
  -  echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
  -  exit 1
  -fi
  -
   if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
     echo "$modename: not configured to build any kind of library" 1>&2
     echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
  @@ -113,16 +108,16 @@
     arg="$1"
     shift
   
  -  case "$arg" in
  +  case $arg in
     -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;;
     *) optarg= ;;
     esac
   
     # If the previous option needs an argument, assign it.
     if test -n "$prev"; then
  -    case "$prev" in
  +    case $prev in
       execute_dlfiles)
  -      eval "$prev=\"\$$prev \$arg\""
  +      execute_dlfiles="$execute_dlfiles $arg"
         ;;
       *)
         eval "$prev=\$arg"
  @@ -135,7 +130,7 @@
     fi
   
     # Have we seen a non-optional argument yet?
  -  case "$arg" in
  +  case $arg in
     --help)
       show_help=yes
       ;;
  @@ -146,7 +141,7 @@
       ;;
   
     --config)
  -    sed -e '1,/^### BEGIN LIBTOOL CONFIG/d' -e '/^### END LIBTOOL CONFIG/,$d' $0
  +    sed -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $0
       exit 0
       ;;
   
  @@ -211,12 +206,12 @@
   
     # Infer the operation mode.
     if test -z "$mode"; then
  -    case "$nonopt" in
  +    case $nonopt in
       *cc | *++ | gcc* | *-gcc*)
         mode=link
         for arg
         do
  -	case "$arg" in
  +	case $arg in
   	-c)
   	   mode=compile
   	   break
  @@ -261,12 +256,13 @@
     help="Try \`$modename --help --mode=$mode' for more information."
   
     # These modes are in order of execution frequency so that they run quickly.
  -  case "$mode" in
  +  case $mode in
     # libtool compile mode
     compile)
       modename="$modename: compile"
       # Get the compilation command and the source file.
       base_compile=
  +    prev=
       lastarg=
       srcfile="$nonopt"
       suppress_output=
  @@ -274,8 +270,34 @@
       user_target=no
       for arg
       do
  +      case $prev in
  +      "") ;;
  +      xcompiler)
  +	# Aesthetically quote the previous argument.
  +	prev=
  +	lastarg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
  +
  +	case $arg in
  +	# Double-quote args containing other shell metacharacters.
  +	# Many Bourne shells cannot handle close brackets correctly
  +	# in scan sets, so we specify it separately.
  +	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
  +	  arg="\"$arg\""
  +	  ;;
  +	esac
  +
  +	# Add the previous argument to base_compile.
  +	if test -z "$base_compile"; then
  +	  base_compile="$lastarg"
  +	else
  +	  base_compile="$base_compile $lastarg"
  +	fi
  +	continue
  +	;;
  +      esac
  +
         # Accept any command-line options.
  -      case "$arg" in
  +      case $arg in
         -o)
   	if test "$user_target" != "no"; then
   	  $echo "$modename: you cannot specify \`-o' more than once" 1>&2
  @@ -288,9 +310,53 @@
   	build_old_libs=yes
   	continue
   	;;
  +
  +      -prefer-pic)
  +	pic_mode=yes
  +	continue
  +	;;
  +
  +      -prefer-non-pic)
  +	pic_mode=no
  +	continue
  +	;;
  +
  +      -Xcompiler)
  +	prev=xcompiler
  +	continue
  +	;;
  +
  +      -Wc,*)
  +	args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"`
  +	lastarg=
  +	IFS="${IFS= 	}"; save_ifs="$IFS"; IFS=','
  +	for arg in $args; do
  +	  IFS="$save_ifs"
  +
  +	  # Double-quote args containing other shell metacharacters.
  +	  # Many Bourne shells cannot handle close brackets correctly
  +	  # in scan sets, so we specify it separately.
  +	  case $arg in
  +	    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
  +	    arg="\"$arg\""
  +	    ;;
  +	  esac
  +	  lastarg="$lastarg $arg"
  +	done
  +	IFS="$save_ifs"
  +	lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"`
  +
  +	# Add the arguments to base_compile.
  +	if test -z "$base_compile"; then
  +	  base_compile="$lastarg"
  +	else
  +	  base_compile="$base_compile $lastarg"
  +	fi
  +	continue
  +	;;
         esac
   
  -      case "$user_target" in
  +      case $user_target in
         next)
   	# The next one is the -o target name
   	user_target=yes
  @@ -316,10 +382,10 @@
         lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"`
   
         # Double-quote args containing other shell metacharacters.
  -      # Many Bourne shells cannot handle close brackets correctly in scan
  -      # sets, so we specify it separately.
  -      case "$lastarg" in
  -      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
  +      # Many Bourne shells cannot handle close brackets correctly
  +      # in scan sets, so we specify it separately.
  +      case $lastarg in
  +      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
   	lastarg="\"$lastarg\""
   	;;
         esac
  @@ -332,7 +398,7 @@
         fi
       done
   
  -    case "$user_target" in
  +    case $user_target in
       set)
         ;;
       no)
  @@ -348,7 +414,7 @@
       # Recognize several different file suffixes.
       # If the user specifies -o file.o, it is replaced with file.lo
       xform='[cCFSfmso]'
  -    case "$libobj" in
  +    case $libobj in
       *.ada) xform=ada ;;
       *.adb) xform=adb ;;
       *.ads) xform=ads ;;
  @@ -363,7 +429,7 @@
   
       libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
   
  -    case "$libobj" in
  +    case $libobj in
       *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;;
       *)
         $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2
  @@ -387,10 +453,21 @@
       $run $rm $removelist
       trap "$run $rm $removelist; exit 1" 1 2 15
   
  +    # On Cygwin there's no "real" PIC flag so we must build both object types
  +    case $host_os in
  +    cygwin* | mingw* | pw32* | os2*)
  +      pic_mode=default
  +      ;;
  +    esac
  +    if test $pic_mode = no && test "$deplibs_check_method" != pass_all; then
  +      # non-PIC code in shared libraries is not supported
  +      pic_mode=default
  +    fi
  +
       # Calculate the filename of the output object if compiler does
       # not support -o with -c
       if test "$compiler_c_o" = no; then
  -      output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\..*$%%'`.${objext}
  +      output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
         lockfile="$output_obj.lock"
         removelist="$removelist $output_obj $lockfile"
         trap "$run $rm $removelist; exit 1" 1 2 15
  @@ -402,7 +479,7 @@
       # Lock this critical section if it is needed
       # We use this script file to make the link, it avoids creating a new file
       if test "$need_locks" = yes; then
  -      until ln "$0" "$lockfile" 2>/dev/null; do
  +      until $run ln "$0" "$lockfile" 2>/dev/null; do
   	$show "Waiting for $lockfile to be removed"
   	sleep 2
         done
  @@ -434,8 +511,13 @@
         # Without this assignment, base_compile gets emptied.
         fbsd_hideous_sh_bug=$base_compile
   
  -      # All platforms use -DPIC, to notify preprocessed assembler code.
  -      command="$base_compile $srcfile $pic_flag -DPIC"
  +      if test "$pic_mode" != no; then
  +	# All platforms use -DPIC, to notify preprocessed assembler code.
  +	command="$base_compile $srcfile $pic_flag -DPIC"
  +      else
  +	# Don't build PIC code
  +	command="$base_compile $srcfile"
  +      fi
         if test "$build_old_libs" = yes; then
   	lo_libobj="$libobj"
   	dir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'`
  @@ -506,7 +588,8 @@
         fi
   
         # If we have no pic_flag, then copy the object into place and finish.
  -      if test -z "$pic_flag" && test "$build_old_libs" = yes; then
  +      if (test -z "$pic_flag" || test "$pic_mode" != default) &&
  +	 test "$build_old_libs" = yes; then
   	# Rename the .lo from within objdir to obj
   	if test -f $obj; then
   	  $show $rm $obj
  @@ -546,7 +629,13 @@
   
       # Only build a position-dependent object if we build old libraries.
       if test "$build_old_libs" = yes; then
  -      command="$base_compile $srcfile"
  +      if test "$pic_mode" != yes; then
  +	# Don't build PIC code
  +	command="$base_compile $srcfile"
  +      else
  +	# All platforms use -DPIC, to notify preprocessed assembler code.
  +	command="$base_compile $srcfile $pic_flag -DPIC"
  +      fi
         if test "$compiler_c_o" = yes; then
   	command="$command -o $obj"
   	output_obj="$obj"
  @@ -612,17 +701,17 @@
   
       # Unlock the critical section if it was locked
       if test "$need_locks" != no; then
  -      $rm "$lockfile"
  +      $run $rm "$lockfile"
       fi
   
       exit 0
       ;;
   
     # libtool link mode
  -  link)
  +  link | relink)
       modename="$modename: link"
  -    case "$host" in
  -    *-*-cygwin* | *-*-mingw* | *-*-os2*)
  +    case $host in
  +    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
         # It is impossible to link a dll without this setting, and
         # we shouldn't force the makefile maintainer to figure out
         # which system we are compiling for in order to pass an extra
  @@ -635,179 +724,12 @@
         # -no-undefined on the libtool link line when we can be certain
         # that all symbols are satisfied, otherwise we get a static library.
         allow_undefined=yes
  -
  -      # This is a source program that is used to create dlls on Windows
  -      # Don't remove nor modify the starting and closing comments
  -# /* ltdll.c starts here */
  -# #define WIN32_LEAN_AND_MEAN
  -# #include <windows.h>
  -# #undef WIN32_LEAN_AND_MEAN
  -# #include <stdio.h>
  -#
  -# #ifndef __CYGWIN__
  -# #  ifdef __CYGWIN32__
  -# #    define __CYGWIN__ __CYGWIN32__
  -# #  endif
  -# #endif
  -#
  -# #ifdef __cplusplus
  -# extern "C" {
  -# #endif
  -# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
  -# #ifdef __cplusplus
  -# }
  -# #endif
  -#
  -# #ifdef __CYGWIN__
  -# #include <cygwin/cygwin_dll.h>
  -# DECLARE_CYGWIN_DLL( DllMain );
  -# #endif
  -# HINSTANCE __hDllInstance_base;
  -#
  -# BOOL APIENTRY
  -# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
  -# {
  -#   __hDllInstance_base = hInst;
  -#   return TRUE;
  -# }
  -# /* ltdll.c ends here */
  -      # This is a source program that is used to create import libraries
  -      # on Windows for dlls which lack them. Don't remove nor modify the
  -      # starting and closing comments
  -# /* impgen.c starts here */
  -# /*   Copyright (C) 1999 Free Software Foundation, Inc.
  -# 
  -#  This file is part of GNU libtool.
  -# 
  -#  This program is free software; you can redistribute it and/or modify
  -#  it under the terms of the GNU General Public License as published by
  -#  the Free Software Foundation; either version 2 of the License, or
  -#  (at your option) any later version.
  -# 
  -#  This program is distributed in the hope that it will be useful,
  -#  but WITHOUT ANY WARRANTY; without even the implied warranty of
  -#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  -#  GNU General Public License for more details.
  -# 
  -#  You should have received a copy of the GNU General Public License
  -#  along with this program; if not, write to the Free Software
  -#  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  -#  */
  -# 
  -#  #include <stdio.h>		/* for printf() */
  -#  #include <unistd.h>		/* for open(), lseek(), read() */
  -#  #include <fcntl.h>		/* for O_RDONLY, O_BINARY */
  -#  #include <string.h>		/* for strdup() */
  -# 
  -#  static unsigned int
  -#  pe_get16 (fd, offset)
  -#       int fd;
  -#       int offset;
  -#  {
  -#    unsigned char b[2];
  -#    lseek (fd, offset, SEEK_SET);
  -#    read (fd, b, 2);
  -#    return b[0] + (b[1]<<8);
  -#  }
  -# 
  -#  static unsigned int
  -#  pe_get32 (fd, offset)
  -#      int fd;
  -#      int offset;
  -#  {
  -#    unsigned char b[4];
  -#    lseek (fd, offset, SEEK_SET);
  -#    read (fd, b, 4);
  -#    return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
  -#  }
  -# 
  -#  static unsigned int
  -#  pe_as32 (ptr)
  -#       void *ptr;
  -#  {
  -#    unsigned char *b = ptr;
  -#    return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
  -#  }
  -# 
  -#  int
  -#  main (argc, argv)
  -#      int argc;
  -#      char *argv[];
  -#  {
  -#      int dll;
  -#      unsigned long pe_header_offset, opthdr_ofs, num_entries, i;
  -#      unsigned long export_rva, export_size, nsections, secptr, expptr;
  -#      unsigned long name_rvas, nexp;
  -#      unsigned char *expdata, *erva;
  -#      char *filename, *dll_name;
  -# 
  -#      filename = argv[1];
  -# 
  -#      dll = open(filename, O_RDONLY|O_BINARY);
  -#      if (!dll)
  -#  	return 1;
  -# 
  -#      dll_name = filename;
  -#    
  -#      for (i=0; filename[i]; i++)
  -#  	if (filename[i] == '/' || filename[i] == '\\'  || filename[i] == ':')
  -#  	    dll_name = filename + i +1;
  -# 
  -#      pe_header_offset = pe_get32 (dll, 0x3c);
  -#      opthdr_ofs = pe_header_offset + 4 + 20;
  -#      num_entries = pe_get32 (dll, opthdr_ofs + 92);
  -# 
  -#      if (num_entries < 1) /* no exports */
  -#  	return 1;
  -# 
  -#      export_rva = pe_get32 (dll, opthdr_ofs + 96);
  -#      export_size = pe_get32 (dll, opthdr_ofs + 100);
  -#      nsections = pe_get16 (dll, pe_header_offset + 4 +2);
  -#      secptr = (pe_header_offset + 4 + 20 +
  -#  	      pe_get16 (dll, pe_header_offset + 4 + 16));
  -# 
  -#      expptr = 0;
  -#      for (i = 0; i < nsections; i++)
  -#      {
  -#  	char sname[8];
  -#  	unsigned long secptr1 = secptr + 40 * i;
  -#  	unsigned long vaddr = pe_get32 (dll, secptr1 + 12);
  -#  	unsigned long vsize = pe_get32 (dll, secptr1 + 16);
  -#  	unsigned long fptr = pe_get32 (dll, secptr1 + 20);
  -#  	lseek(dll, secptr1, SEEK_SET);
  -#  	read(dll, sname, 8);
  -#  	if (vaddr <= export_rva && vaddr+vsize > export_rva)
  -#  	{
  -#  	    expptr = fptr + (export_rva - vaddr);
  -#  	    if (export_rva + export_size > vaddr + vsize)
  -#  		export_size = vsize - (export_rva - vaddr);
  -#  	    break;
  -#  	}
  -#      }
  -# 
  -#      expdata = (unsigned char*)malloc(export_size);
  -#      lseek (dll, expptr, SEEK_SET);
  -#      read (dll, expdata, export_size);
  -#      erva = expdata - export_rva;
  -# 
  -#      nexp = pe_as32 (expdata+24);
  -#      name_rvas = pe_as32 (expdata+32);
  -# 
  -#      printf ("EXPORTS\n");
  -#      for (i = 0; i<nexp; i++)
  -#      {
  -#  	unsigned long name_rva = pe_as32 (erva+name_rvas+i*4);
  -#  	printf ("\t%s @ %ld ;\n", erva+name_rva, 1+ i);
  -#      }
  -# 
  -#      return 0;
  -#  }
  -# /* impgen.c ends here */
         ;;
       *)
         allow_undefined=yes
         ;;
       esac
  +    libtool_args="$nonopt"
       compile_command="$nonopt"
       finalize_command="$nonopt"
   
  @@ -818,18 +740,12 @@
       convenience=
       old_convenience=
       deplibs=
  -    linkopts=
  +    old_deplibs=
  +    compiler_flags=
  +    linker_flags=
  +    dllsearchpath=
  +    lib_search_path=`pwd`
   
  -    if test -n "$shlibpath_var"; then
  -      # get the directories listed in $shlibpath_var
  -      eval lib_search_path=\`\$echo \"X \${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
  -    else
  -      lib_search_path=
  -    fi
  -    # now prepend the system-specific ones
  -    eval lib_search_path=\"$sys_lib_search_path_spec\$lib_search_path\"
  -    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
  -    
       avoid_version=no
       dlfiles=
       dlprefiles=
  @@ -839,9 +755,9 @@
       export_symbols_regex=
       generated=
       libobjs=
  -    link_against_libtool_libs=
       ltlibs=
       module=no
  +    no_install=no
       objs=
       prefer_static_libs=no
       preload=no
  @@ -858,7 +774,7 @@
       # We need to know -static, to get the right output filenames.
       for arg
       do
  -      case "$arg" in
  +      case $arg in
         -all-static | -static)
   	if test "X$arg" = "X-all-static"; then
   	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
  @@ -887,17 +803,24 @@
       while test $# -gt 0; do
         arg="$1"
         shift
  +      case $arg in
  +      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
  +	qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test
  +	;;
  +      *) qarg=$arg ;;
  +      esac
  +      libtool_args="$libtool_args $qarg"
   
         # If the previous option needs an argument, assign it.
         if test -n "$prev"; then
  -	case "$prev" in
  +	case $prev in
   	output)
   	  compile_command="$compile_command @OUTPUT@"
   	  finalize_command="$finalize_command @OUTPUT@"
   	  ;;
   	esac
   
  -	case "$prev" in
  +	case $prev in
   	dlfiles|dlprefiles)
   	  if test "$preload" = no; then
   	    # Add the symbol object into the linking commands.
  @@ -905,7 +828,7 @@
   	    finalize_command="$finalize_command @SYMFILE@"
   	    preload=yes
   	  fi
  -	  case "$arg" in
  +	  case $arg in
   	  *.la | *.lo) ;;  # We handle these cases below.
   	  force)
   	    if test "$dlself" = no; then
  @@ -934,6 +857,7 @@
   	      dlprefiles="$dlprefiles $arg"
   	    fi
   	    prev=
  +	    continue
   	    ;;
   	  esac
   	  ;;
  @@ -958,7 +882,7 @@
   	  ;;
   	rpath | xrpath)
   	  # We need an absolute path.
  -	  case "$arg" in
  +	  case $arg in
   	  [\\/]* | [A-Za-z]:[\\/]*) ;;
   	  *)
   	    $echo "$modename: only absolute run-paths are allowed" 1>&2
  @@ -979,17 +903,32 @@
   	  prev=
   	  continue
   	  ;;
  +	xcompiler)
  +	  compiler_flags="$compiler_flags $qarg"
  +	  prev=
  +	  compile_command="$compile_command $qarg"
  +	  finalize_command="$finalize_command $qarg"
  +	  continue
  +	  ;;
  +	xlinker)
  +	  linker_flags="$linker_flags $qarg"
  +	  compiler_flags="$compiler_flags $wl$qarg"
  +	  prev=
  +	  compile_command="$compile_command $wl$qarg"
  +	  finalize_command="$finalize_command $wl$qarg"
  +	  continue
  +	  ;;
   	*)
   	  eval "$prev=\"\$arg\""
   	  prev=
   	  continue
   	  ;;
   	esac
  -      fi
  +      fi # test -n $prev
   
         prevarg="$arg"
   
  -      case "$arg" in
  +      case $arg in
         -all-static)
   	if test -n "$link_static_flag"; then
   	  compile_command="$compile_command $link_static_flag"
  @@ -1026,7 +965,7 @@
   
         -export-symbols | -export-symbols-regex)
   	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
  -	  $echo "$modename: not more than one -exported-symbols argument allowed"
  +	  $echo "$modename: more than one -exported-symbols argument is not allowed"
   	  exit 1
   	fi
   	if test "X$arg" = "X-export-symbols"; then
  @@ -1037,58 +976,65 @@
   	continue
   	;;
   
  +      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
  +      # so, if we see these flags be careful not to treat them like -L
  +      -L[A-Z][A-Z]*:*)
  +	case $with_gcc/$host in
  +	no/*-*-irix*)
  +	  compile_command="$compile_command $arg"
  +	  finalize_command="$finalize_command $arg"
  +	  ;;
  +	esac
  +	continue
  +	;;
  +
         -L*)
   	dir=`$echo "X$arg" | $Xsed -e 's/^-L//'`
   	# We need an absolute path.
  -	case "$dir" in
  +	case $dir in
   	[\\/]* | [A-Za-z]:[\\/]*) ;;
   	*)
   	  absdir=`cd "$dir" && pwd`
   	  if test -z "$absdir"; then
  -	    $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
  -	    $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
  -	    absdir="$dir"
  +	    $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2
  +	    exit 1
   	  fi
   	  dir="$absdir"
   	  ;;
  -	esac
  -	case " $deplibs " in
  -	*" $arg "*) ;;
  -	*) deplibs="$deplibs $arg";;
   	esac
  -	case " $lib_search_path " in
  -	*" $dir "*) ;;
  -	*) lib_search_path="$lib_search_path $dir";;
  +	case "$deplibs " in
  +	*" -L$dir "*) ;;
  +	*)
  +	  deplibs="$deplibs -L$dir"
  +	  lib_search_path="$lib_search_path $dir"
  +	  ;;
   	esac
  -	case "$host" in
  -	*-*-cygwin* | *-*-mingw* | *-*-os2*)
  -	  dllsearchdir=`cd "$dir" && pwd || echo "$dir"`
  -	  case ":$dllsearchpath:" in
  -	  ::) dllsearchpath="$dllsearchdir";;
  -	  *":$dllsearchdir:"*) ;;
  -	  *) dllsearchpath="$dllsearchpath:$dllsearchdir";;
  +	case $host in
  +	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
  +	  case :$dllsearchpath: in
  +	  *":$dir:"*) ;;
  +	  *) dllsearchpath="$dllsearchpath:$dir";;
   	  esac
   	  ;;
   	esac
  +	continue
   	;;
   
         -l*)
  -	if test "$arg" = "-lc"; then
  -	  case "$host" in
  -	  *-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*)
  -	    # These systems don't actually have c library (as such)
  +	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
  +	  case $host in
  +	  *-*-cygwin* | *-*-pw32* | *-*-beos*)
  +	    # These systems don't actually have a C or math library (as such)
   	    continue
   	    ;;
  -	  esac
  -	elif test "$arg" = "-lm"; then
  -	  case "$host" in
  -	  *-*-cygwin* | *-*-beos*)
  -	    # These systems don't actually have math library (as such)
  -	    continue
  +	  *-*-mingw* | *-*-os2*)
  +	    # These systems don't actually have a C library (as such)
  +	    test "X$arg" = "X-lc" && continue
   	    ;;
   	  esac
   	fi
   	deplibs="$deplibs $arg"
  +	continue
   	;;
   
         -module)
  @@ -1096,6 +1042,25 @@
   	continue
   	;;
   
  +      -no-fast-install)
  +	fast_install=no
  +	continue
  +	;;
  +
  +      -no-install)
  +	case $host in
  +	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
  +	  # The PATH hackery in wrapper scripts is required on Windows
  +	  # in order for the loader to find any dlls it needs.
  +	  $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2
  +	  $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2
  +	  fast_install=no
  +	  ;;
  +	*) no_install=yes ;;
  +	esac
  +	continue
  +	;;
  +
         -no-undefined)
   	allow_undefined=no
   	continue
  @@ -1121,7 +1086,7 @@
         -R*)
   	dir=`$echo "X$arg" | $Xsed -e 's/^-R//'`
   	# We need an absolute path.
  -	case "$dir" in
  +	case $dir in
   	[\\/]* | [A-Za-z]:[\\/]*) ;;
   	*)
   	  $echo "$modename: only absolute run-paths are allowed" 1>&2
  @@ -1136,11 +1101,11 @@
   	;;
   
         -static)
  -	# If we have no pic_flag, then this is the same as -all-static.
  -	if test -z "$pic_flag" && test -n "$link_static_flag"; then
  -	  compile_command="$compile_command $link_static_flag"
  -	  finalize_command="$finalize_command $link_static_flag"
  -	fi
  +	# The effects of -static are defined in a previous loop.
  +	# We used to do the same as -all-static on platforms that
  +	# didn't have a PIC flag, but the assumption that the effects
  +	# would be equivalent was wrong.  It would break on at least
  +	# Digital Unix and AIX.
   	continue
   	;;
   
  @@ -1154,28 +1119,71 @@
   	continue
   	;;
   
  +      -Wc,*)
  +	args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'`
  +	arg=
  +	IFS="${IFS= 	}"; save_ifs="$IFS"; IFS=','
  +	for flag in $args; do
  +	  IFS="$save_ifs"
  +	  case $flag in
  +	    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
  +	    flag="\"$flag\""
  +	    ;;
  +	  esac
  +	  arg="$arg $wl$flag"
  +	  compiler_flags="$compiler_flags $flag"
  +	done
  +	IFS="$save_ifs"
  +	arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
  +	;;
  +
  +      -Wl,*)
  +	args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'`
  +	arg=
  +	IFS="${IFS= 	}"; save_ifs="$IFS"; IFS=','
  +	for flag in $args; do
  +	  IFS="$save_ifs"
  +	  case $flag in
  +	    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
  +	    flag="\"$flag\""
  +	    ;;
  +	  esac
  +	  arg="$arg $wl$flag"
  +	  compiler_flags="$compiler_flags $wl$flag"
  +	  linker_flags="$linker_flags $flag"
  +	done
  +	IFS="$save_ifs"
  +	arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
  +	;;
  +
  +      -Xcompiler)
  +	prev=xcompiler
  +	continue
  +	;;
  +
  +      -Xlinker)
  +	prev=xlinker
  +	continue
  +	;;
  +
         # Some other compiler flag.
         -* | +*)
   	# Unknown arguments in both finalize_command and compile_command need
   	# to be aesthetically quoted because they are evaled later.
   	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
  -	case "$arg" in
  -	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
  +	case $arg in
  +	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
   	  arg="\"$arg\""
   	  ;;
   	esac
   	;;
   
  -      *.o | *.obj | *.a | *.lib)
  -	# A standard object.
  -	objs="$objs $arg"
  -	;;
  -
  -      *.lo)
  -	# A library object.
  +      *.lo | *.$objext)
  +	# A library or standard object.
   	if test "$prev" = dlfiles; then
  -	  dlfiles="$dlfiles $arg"
  -	  if test "$build_libtool_libs" = yes && test "$dlopen" = yes; then
  +	  # This file was specified with -dlopen.
  +	  if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
  +	    dlfiles="$dlfiles $arg"
   	    prev=
   	    continue
   	  else
  @@ -1188,357 +1196,890 @@
   	  # Preload the old-style object.
   	  dlprefiles="$dlprefiles "`$echo "X$arg" | $Xsed -e "$lo2o"`
   	  prev=
  +	else
  +	  case $arg in
  +	  *.lo) libobjs="$libobjs $arg" ;;
  +	  *) objs="$objs $arg" ;;
  +	  esac
   	fi
  -	libobjs="$libobjs $arg"
   	;;
   
  +      *.$libext)
  +	# An archive.
  +	deplibs="$deplibs $arg"
  +	old_deplibs="$old_deplibs $arg"
  +	continue
  +	;;
  +
         *.la)
   	# A libtool-controlled library.
   
  -	dlname=
  -	libdir=
  -	library_names=
  -	old_library=
  +	if test "$prev" = dlfiles; then
  +	  # This library was specified with -dlopen.
  +	  dlfiles="$dlfiles $arg"
  +	  prev=
  +	elif test "$prev" = dlprefiles; then
  +	  # The library was specified with -dlpreopen.
  +	  dlprefiles="$dlprefiles $arg"
  +	  prev=
  +	else
  +	  deplibs="$deplibs $arg"
  +	fi
  +	continue
  +	;;
  +
  +      # Some other compiler argument.
  +      *)
  +	# Unknown arguments in both finalize_command and compile_command need
  +	# to be aesthetically quoted because they are evaled later.
  +	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
  +	case $arg in
  +	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
  +	  arg="\"$arg\""
  +	  ;;
  +	esac
  +	;;
  +      esac # arg
  +
  +      # Now actually substitute the argument into the commands.
  +      if test -n "$arg"; then
  +	compile_command="$compile_command $arg"
  +	finalize_command="$finalize_command $arg"
  +      fi
  +    done # argument parsing loop
  +
  +    if test -n "$prev"; then
  +      $echo "$modename: the \`$prevarg' option requires an argument" 1>&2
  +      $echo "$help" 1>&2
  +      exit 1
  +    fi
  +
  +    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
  +      eval arg=\"$export_dynamic_flag_spec\"
  +      compile_command="$compile_command $arg"
  +      finalize_command="$finalize_command $arg"
  +    fi
  +
  +    # calculate the name of the file, without its directory
  +    outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
  +    libobjs_save="$libobjs"
  +
  +    if test -n "$shlibpath_var"; then
  +      # get the directories listed in $shlibpath_var
  +      eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
  +    else
  +      shlib_search_path=
  +    fi
  +    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
  +    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
  +
  +    output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
  +    if test "X$output_objdir" = "X$output"; then
  +      output_objdir="$objdir"
  +    else
  +      output_objdir="$output_objdir/$objdir"
  +    fi
  +    # Create the object directory.
  +    if test ! -d $output_objdir; then
  +      $show "$mkdir $output_objdir"
  +      $run $mkdir $output_objdir
  +      status=$?
  +      if test $status -ne 0 && test ! -d $output_objdir; then
  +	exit $status
  +      fi
  +    fi
  +
  +    # Determine the type of output
  +    case $output in
  +    "")
  +      $echo "$modename: you must specify an output file" 1>&2
  +      $echo "$help" 1>&2
  +      exit 1
  +      ;;
  +    *.$libext) linkmode=oldlib ;;
  +    *.lo | *.$objext) linkmode=obj ;;
  +    *.la) linkmode=lib ;;
  +    *) linkmode=prog ;; # Anything else should be a program.
  +    esac
   
  +    specialdeplibs=
  +    libs=
  +    # Find all interdependent deplibs by searching for libraries
  +    # that are linked more than once (e.g. -la -lb -la)
  +    for deplib in $deplibs; do
  +      case "$libs " in
  +      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
  +      esac
  +      libs="$libs $deplib"
  +    done
  +    deplibs=
  +    newdependency_libs=
  +    newlib_search_path=
  +    need_relink=no # whether we're linking any uninstalled libtool libraries
  +    notinst_deplibs= # not-installed libtool libraries
  +    notinst_path= # paths that contain not-installed libtool libraries
  +    case $linkmode in
  +    lib)
  +	passes="conv link"
  +	for file in $dlfiles $dlprefiles; do
  +	  case $file in
  +	  *.la) ;;
  +	  *)
  +	    $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2
  +	    exit 1
  +	    ;;
  +	  esac
  +	done
  +	;;
  +    prog)
  +	compile_deplibs=
  +	finalize_deplibs=
  +	alldeplibs=no
  +	newdlfiles=
  +	newdlprefiles=
  +	passes="conv scan dlopen dlpreopen link"
  +	;;
  +    *)  passes="conv"
  +	;;
  +    esac
  +    for pass in $passes; do
  +      if test $linkmode = prog; then
  +	# Determine which files to process
  +	case $pass in
  +	dlopen)
  +	  libs="$dlfiles"
  +	  save_deplibs="$deplibs" # Collect dlpreopened libraries
  +	  deplibs=
  +	  ;;
  +	dlpreopen) libs="$dlprefiles" ;;
  +	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
  +	esac
  +      fi
  +      for deplib in $libs; do
  +	lib=
  +	found=no
  +	case $deplib in
  +	-l*)
  +	  if test $linkmode = oldlib && test $linkmode = obj; then
  +	    $echo "$modename: warning: \`-l' is ignored for archives/objects: $deplib" 1>&2
  +	    continue
  +	  fi
  +	  if test $pass = conv; then
  +	    deplibs="$deplib $deplibs"
  +	    continue
  +	  fi
  +	  name=`$echo "X$deplib" | $Xsed -e 's/^-l//'`
  +	  for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do
  +	    # Search the libtool library
  +	    lib="$searchdir/lib${name}.la"
  +	    if test -f "$lib"; then
  +	      found=yes
  +	      break
  +	    fi
  +	  done
  +	  if test "$found" != yes; then
  +	    # deplib doesn't seem to be a libtool library
  +	    if test "$linkmode,$pass" = "prog,link"; then
  +	      compile_deplibs="$deplib $compile_deplibs"
  +	      finalize_deplibs="$deplib $finalize_deplibs"
  +	    else
  +	      deplibs="$deplib $deplibs"
  +	      test $linkmode = lib && newdependency_libs="$deplib $newdependency_libs"
  +	    fi
  +	    continue
  +	  fi
  +	  ;; # -l
  +	-L*)
  +	  case $linkmode in
  +	  lib)
  +	    deplibs="$deplib $deplibs"
  +	    test $pass = conv && continue
  +	    newdependency_libs="$deplib $newdependency_libs"
  +	    newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
  +	    ;;
  +	  prog)
  +	    if test $pass = conv; then
  +	      deplibs="$deplib $deplibs"
  +	      continue
  +	    fi
  +	    if test $pass = scan; then
  +	      deplibs="$deplib $deplibs"
  +	      newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
  +	    else
  +	      compile_deplibs="$deplib $compile_deplibs"
  +	      finalize_deplibs="$deplib $finalize_deplibs"
  +	    fi
  +	    ;;
  +	  *)
  +	    $echo "$modename: warning: \`-L' is ignored for archives/objects: $deplib" 1>&2
  +	    ;;
  +	  esac # linkmode
  +	  continue
  +	  ;; # -L
  +	-R*)
  +	  if test $pass = link; then
  +	    dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
  +	    # Make sure the xrpath contains only unique directories.
  +	    case "$xrpath " in
  +	    *" $dir "*) ;;
  +	    *) xrpath="$xrpath $dir" ;;
  +	    esac
  +	  fi
  +	  deplibs="$deplib $deplibs"
  +	  continue
  +	  ;;
  +	*.la) lib="$deplib" ;;
  +	*.$libext)
  +	  if test $pass = conv; then
  +	    deplibs="$deplib $deplibs"
  +	    continue
  +	  fi
  +	  case $linkmode in
  +	  lib)
  +	    if test "$deplibs_check_method" != pass_all; then
  +	      echo
  +	      echo "*** Warning: This library needs some functionality provided by $deplib."
  +	      echo "*** I have the capability to make that library automatically link in when"
  +	      echo "*** you link to this library.  But I can only do this if you have a"
  +	      echo "*** shared version of the library, which you do not appear to have."
  +	    else
  +	      echo
  +	      echo "*** Warning: Linking the shared library $output against the"
  +	      echo "*** static library $deplib is not portable!"
  +	      deplibs="$deplib $deplibs"
  +	    fi
  +	    continue
  +	    ;;
  +	  prog)
  +	    if test $pass != link; then
  +	      deplibs="$deplib $deplibs"
  +	    else
  +	      compile_deplibs="$deplib $compile_deplibs"
  +	      finalize_deplibs="$deplib $finalize_deplibs"
  +	    fi
  +	    continue
  +	    ;;
  +	  esac # linkmode
  +	  ;; # *.$libext
  +	*.lo | *.$objext)
  +	  if test $pass = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
  +	    # If there is no dlopen support or we're linking statically,
  +	    # we need to preload.
  +	    newdlprefiles="$newdlprefiles $deplib"
  +	    compile_deplibs="$deplib $compile_deplibs"
  +	    finalize_deplibs="$deplib $finalize_deplibs"
  +	  else
  +	    newdlfiles="$newdlfiles $deplib"
  +	  fi
  +	  continue
  +	  ;;
  +	%DEPLIBS%)
  +	  alldeplibs=yes
  +	  continue
  +	  ;;
  +	esac # case $deplib
  +	if test $found = yes || test -f "$lib"; then :
  +	else
  +	  $echo "$modename: cannot find the library \`$lib'" 1>&2
  +	  exit 1
  +	fi
  +
   	# Check to see that this really is a libtool archive.
  -	if (sed -e '2q' $arg | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
  +	if (sed -e '2q' $lib | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
   	else
  -	  $echo "$modename: \`$arg' is not a valid libtool archive" 1>&2
  +	  $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
   	  exit 1
   	fi
   
  +	ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
  +	test "X$ladir" = "X$lib" && ladir="."
  +
  +	dlname=
  +	dlopen=
  +	dlpreopen=
  +	libdir=
  +	library_names=
  +	old_library=
   	# If the library was installed with an old release of libtool,
   	# it will not redefine variable installed.
   	installed=yes
   
   	# Read the .la file
  -	# If there is no directory component, then add one.
  -	case "$arg" in
  -	*/* | *\\*) . $arg ;;
  -	*) . ./$arg ;;
  +	case $lib in
  +	*/* | *\\*) . $lib ;;
  +	*) . ./$lib ;;
   	esac
   
  +	if test "$linkmode,$pass" = "lib,link" ||
  +	   test "$linkmode,$pass" = "prog,scan" ||
  +	   { test $linkmode = oldlib && test $linkmode = obj; }; then
  +	   # Add dl[pre]opened files of deplib
  +	  test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
  +	  test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
  +	fi
  +
  +	if test $pass = conv; then
  +	  # Only check for convenience libraries
  +	  deplibs="$lib $deplibs"
  +	  if test -z "$libdir"; then
  +	    if test -z "$old_library"; then
  +	      $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
  +	      exit 1
  +	    fi
  +	    # It is a libtool convenience library, so add in its objects.
  +	    convenience="$convenience $ladir/$objdir/$old_library"
  +	    old_convenience="$old_convenience $ladir/$objdir/$old_library"
  +	    tmp_libs=
  +	    for deplib in $dependency_libs; do
  +	      deplibs="$deplib $deplibs"
  +	      case "$tmp_libs " in
  +	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
  +	      esac
  +	      tmp_libs="$tmp_libs $deplib"
  +	    done
  +	  elif test $linkmode != prog && test $linkmode != lib; then
  +	    $echo "$modename: \`$lib' is not a convenience library" 1>&2
  +	    exit 1
  +	  fi
  +	  continue
  +	fi # $pass = conv
  +
   	# Get the name of the library we link against.
   	linklib=
   	for l in $old_library $library_names; do
   	  linklib="$l"
   	done
  -
   	if test -z "$linklib"; then
  -	  $echo "$modename: cannot find name of link library for \`$arg'" 1>&2
  +	  $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
   	  exit 1
   	fi
   
  -	# Find the relevant object directory and library name.
  -	name=`$echo "X$arg" | $Xsed -e 's%^.*/%%' -e 's/\.la$//' -e 's/^lib//'`
  -
  -	if test "X$installed" = Xyes; then
  -	  dir="$libdir"
  -	else
  -	  dir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
  -	  if test "X$dir" = "X$arg"; then
  -	    dir="$objdir"
  +	# This library was specified with -dlopen.
  +	if test $pass = dlopen; then
  +	  if test -z "$libdir"; then
  +	    $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2
  +	    exit 1
  +	  fi
  +	  if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
  +	    # If there is no dlname, no dlopen support or we're linking
  +	    # statically, we need to preload.
  +	    dlprefiles="$dlprefiles $lib"
   	  else
  -	    dir="$dir/$objdir"
  +	    newdlfiles="$newdlfiles $lib"
   	  fi
  -	fi
  -
  -	if test -n "$dependency_libs"; then
  -	  # Extract -R and -L from dependency_libs
  -	  temp_deplibs=
  -	  for deplib in $dependency_libs; do
  -	    case "$deplib" in
  -	    -R*) temp_xrpath=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
  -		 case " $rpath $xrpath " in
  -		 *" $temp_xrpath "*) ;;
  -		 *) xrpath="$xrpath $temp_xrpath";;
  -		 esac;;
  -	    -L*) case "$compile_command $temp_deplibs " in
  -		 *" $deplib "*) ;;
  -		 *) temp_deplibs="$temp_deplibs $deplib";;
  -		 esac
  -		 temp_dir=`$echo "X$deplib" | $Xsed -e 's/^-L//'`
  -		 case " $lib_search_path " in
  -		 *" $temp_dir "*) ;;
  -		 *) lib_search_path="$lib_search_path $temp_dir";;
  -		 esac
  -		 ;;
  -	    *) temp_deplibs="$temp_deplibs $deplib";;
  -	    esac
  -	  done
  -	  dependency_libs="$temp_deplibs"
  -	fi
  -
  -	if test -z "$libdir"; then
  -	  # It is a libtool convenience library, so add in its objects.
  -	  convenience="$convenience $dir/$old_library"
  -	  old_convenience="$old_convenience $dir/$old_library"
  -	  deplibs="$deplibs$dependency_libs"
  -	  compile_command="$compile_command $dir/$old_library$dependency_libs"
  -	  finalize_command="$finalize_command $dir/$old_library$dependency_libs"
   	  continue
  -	fi
  +	fi # $pass = dlopen
   
  -	# This library was specified with -dlopen.
  -	if test "$prev" = dlfiles; then
  -	  dlfiles="$dlfiles $arg"
  -	  if test -z "$dlname" || test "$dlopen" != yes || test "$build_libtool_libs" = no; then
  -	    # If there is no dlname, no dlopen support or we're linking statically,
  -	    # we need to preload.
  -	    prev=dlprefiles
  -	  else
  -	    # We should not create a dependency on this library, but we
  -	    # may need any libraries it requires.
  -	    compile_command="$compile_command$dependency_libs"
  -	    finalize_command="$finalize_command$dependency_libs"
  -	    prev=
  -	    continue
  +	# We need an absolute path.
  +	case $ladir in
  +	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
  +	*)
  +	  abs_ladir=`cd "$ladir" && pwd`
  +	  if test -z "$abs_ladir"; then
  +	    $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2
  +	    $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
  +	    abs_ladir="$ladir"
   	  fi
  -	fi
  +	  ;;
  +	esac
  +	laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
   
  -	# The library was specified with -dlpreopen.
  -	if test "$prev" = dlprefiles; then
  +	# Find the relevant object directory and library name.
  +	if test "X$installed" = Xyes; then
  +	  if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
  +	    $echo "$modename: warning: library \`$lib' was moved." 1>&2
  +	    dir="$ladir"
  +	    absdir="$abs_ladir"
  +	    libdir="$abs_ladir"
  +	  else
  +	    dir="$libdir"
  +	    absdir="$libdir"
  +	  fi
  +	else
  +	  dir="$ladir/$objdir"
  +	  absdir="$abs_ladir/$objdir"
  +	  # Remove this search path later
  +	  notinst_path="$notinst_path $abs_ladir"
  +	fi # $installed = yes
  +	name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
  +
  +	# This library was specified with -dlpreopen.
  +	if test $pass = dlpreopen; then
  +	  if test -z "$libdir"; then
  +	    $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2
  +	    exit 1
  +	  fi
   	  # Prefer using a static library (so that no silly _DYNAMIC symbols
   	  # are required to link).
   	  if test -n "$old_library"; then
  -	    dlprefiles="$dlprefiles $dir/$old_library"
  +	    newdlprefiles="$newdlprefiles $dir/$old_library"
  +	  # Otherwise, use the dlname, so that lt_dlopen finds it.
  +	  elif test -n "$dlname"; then
  +	    newdlprefiles="$newdlprefiles $dir/$dlname"
   	  else
  -	    dlprefiles="$dlprefiles $dir/$linklib"
  +	    newdlprefiles="$newdlprefiles $dir/$linklib"
   	  fi
  -	  prev=
  +	fi # $pass = dlpreopen
  +
  +	if test -z "$libdir"; then
  +	  # Link the convenience library
  +	  if test $linkmode = lib; then
  +	    deplibs="$dir/$old_library $deplibs"
  +	  elif test "$linkmode,$pass" = "prog,link"; then
  +	    compile_deplibs="$dir/$old_library $compile_deplibs"
  +	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
  +	  else
  +	    deplibs="$lib $deplibs"
  +	  fi
  +	  continue
   	fi
   
  -	if test -n "$library_names" &&
  -	   { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
  -	  link_against_libtool_libs="$link_against_libtool_libs $arg"
  -	  if test -n "$shlibpath_var"; then
  -	    # Make sure the rpath contains only unique directories.
  -	    case "$temp_rpath " in
  -	    *" $dir "*) ;;
  -	    *) temp_rpath="$temp_rpath $dir" ;;
  -	    esac
  +	if test $linkmode = prog && test $pass != link; then
  +	  newlib_search_path="$newlib_search_path $ladir"
  +	  deplibs="$lib $deplibs"
  +
  +	  linkalldeplibs=no
  +	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
  +	     test "$build_libtool_libs" = no; then
  +	    linkalldeplibs=yes
   	  fi
   
  -	  # We need an absolute path.
  -	  case "$dir" in
  -	  [\\/] | [A-Za-z]:[\\/]*) absdir="$dir" ;;
  -	  *)
  -	    absdir=`cd "$dir" && pwd`
  -	    if test -z "$absdir"; then
  -	      $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
  -	      $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
  -	      absdir="$dir"
  +	  tmp_libs=
  +	  for deplib in $dependency_libs; do
  +	    case $deplib in
  +	    -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test
  +	    esac
  +	    # Need to link against all dependency_libs?
  +	    if test $linkalldeplibs = yes; then
  +	      deplibs="$deplib $deplibs"
  +	    else
  +	      # Need to hardcode shared library paths
  +	      # or/and link against static libraries
  +	      newdependency_libs="$deplib $newdependency_libs"
   	    fi
  -	    ;;
  -	  esac
  -	  
  -	  # This is the magic to use -rpath.
  -	  # Skip directories that are in the system default run-time
  -	  # search path, unless they have been requested with -R.
  -	  case " $sys_lib_dlsearch_path " in
  -	  *" $absdir "*) ;;
  -	  *)
  -	    case "$compile_rpath " in
  -	    *" $absdir "*) ;;
  -	    *) compile_rpath="$compile_rpath $absdir" 
  +	    case "$tmp_libs " in
  +	    *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
   	    esac
  -	    ;;
  -	  esac
  +	    tmp_libs="$tmp_libs $deplib"
  +	  done # for deplib
  +	  continue
  +	fi # $linkmode = prog...
   
  -	  case " $sys_lib_dlsearch_path " in
  -	  *" $libdir "*) ;;
  -	  *)
  -	    case "$finalize_rpath " in
  +	link_static=no # Whether the deplib will be linked statically
  +	if test -n "$library_names" &&
  +	   { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
  +	  # Link against this shared library
  +
  +	  if test "$linkmode,$pass" = "prog,link" ||
  +	   { test $linkmode = lib && test $hardcode_into_libs = yes; }; then
  +	    # Hardcode the library path.
  +	    # Skip directories that are in the system default run-time
  +	    # search path.
  +	    case " $sys_lib_dlsearch_path " in
  +	    *" $absdir "*) ;;
  +	    *)
  +	      case "$compile_rpath " in
  +	      *" $absdir "*) ;;
  +	      *) compile_rpath="$compile_rpath $absdir"
  +	      esac
  +	      ;;
  +	    esac
  +	    case " $sys_lib_dlsearch_path " in
   	    *" $libdir "*) ;;
  -	    *) finalize_rpath="$finalize_rpath $libdir"
  +	    *)
  +	      case "$finalize_rpath " in
  +	      *" $libdir "*) ;;
  +	      *) finalize_rpath="$finalize_rpath $libdir"
  +	      esac
  +	      ;;
   	    esac
  -	    ;;
  -	  esac
  +	    if test $linkmode = prog; then
  +	      # We need to hardcode the library path
  +	      if test -n "$shlibpath_var"; then
  +		# Make sure the rpath contains only unique directories.
  +		case "$temp_rpath " in
  +		*" $dir "*) ;;
  +		*" $absdir "*) ;;
  +		*) temp_rpath="$temp_rpath $dir" ;;
  +		esac
  +	      fi
  +	    fi
  +	  fi # $linkmode,$pass = prog,link...
   
  -	  lib_linked=yes
  -	  case "$hardcode_action" in
  -	  immediate | unsupported)
  -	    if test "$hardcode_direct" = no; then
  -	      compile_command="$compile_command $dir/$linklib"
  -	      deplibs="$deplibs $dir/$linklib"
  -	      case "$host" in
  -	      *-*-cygwin* | *-*-mingw* | *-*-os2*)
  -		dllsearchdir=`cd "$dir" && pwd || echo "$dir"`
  -		if test -n "$dllsearchpath"; then
  -		  dllsearchpath="$dllsearchpath:$dllsearchdir"
  -		else
  -		  dllsearchpath="$dllsearchdir"
  -		fi
  -		;;
  -	      esac
  -	    elif test "$hardcode_minus_L" = no; then
  -	      case "$host" in
  -	      *-*-sunos*)
  -		compile_shlibpath="$compile_shlibpath$dir:"
  +	  if test "$alldeplibs" = yes &&
  +	     { test "$deplibs_check_method" = pass_all ||
  +	       { test "$build_libtool_libs" = yes &&
  +		 test -n "$library_names"; }; }; then
  +	    # We only need to search for static libraries
  +	    continue
  +	  fi
  +
  +	  if test "$installed" = no; then
  +	    notinst_deplibs="$notinst_deplibs $lib"
  +	    need_relink=yes
  +	  fi
  +
  +	  if test -n "$old_archive_from_expsyms_cmds"; then
  +	    # figure out the soname
  +	    set dummy $library_names
  +	    realname="$2"
  +	    shift; shift
  +	    libname=`eval \\$echo \"$libname_spec\"`
  +	    # use dlname if we got it. it's perfectly good, no?
  +	    if test -n "$dlname"; then
  +	      soname="$dlname"
  +	    elif test -n "$soname_spec"; then
  +	      # bleh windows
  +	      case $host in
  +	      *cygwin*)
  +		major=`expr $current - $age`
  +		versuffix="-$major"
   		;;
  -	      esac
  -	      case "$compile_command " in
  -	      *" -L$dir "*) ;;
  -	      *) compile_command="$compile_command -L$dir";;
   	      esac
  -	      compile_command="$compile_command -l$name"
  -	      deplibs="$deplibs -L$dir -l$name"
  -	    elif test "$hardcode_shlibpath_var" = no; then
  -	      case ":$compile_shlibpath:" in
  -	      *":$dir:"*) ;;
  -	      *) compile_shlibpath="$compile_shlibpath$dir:";;
  +	      eval soname=\"$soname_spec\"
  +	    else
  +	      soname="$realname"
  +	    fi
  +
  +	    # Make a new name for the extract_expsyms_cmds to use
  +	    soroot="$soname"
  +	    soname=`echo $soroot | sed -e 's/^.*\///'`
  +	    newlib="libimp-`echo $soname | sed 's/^lib//;s/\.dll$//'`.a"
  +
  +	    # If the library has no export list, then create one now
  +	    if test -f "$output_objdir/$soname-def"; then :
  +	    else
  +	      $show "extracting exported symbol list from \`$soname'"
  +	      IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
  +	      eval cmds=\"$extract_expsyms_cmds\"
  +	      for cmd in $cmds; do
  +		IFS="$save_ifs"
  +		$show "$cmd"
  +		$run eval "$cmd" || exit $?
  +	      done
  +	      IFS="$save_ifs"
  +	    fi
  +
  +	    # Create $newlib
  +	    if test -f "$output_objdir/$newlib"; then :; else
  +	      $show "generating import library for \`$soname'"
  +	      IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
  +	      eval cmds=\"$old_archive_from_expsyms_cmds\"
  +	      for cmd in $cmds; do
  +		IFS="$save_ifs"
  +		$show "$cmd"
  +		$run eval "$cmd" || exit $?
  +	      done
  +	      IFS="$save_ifs"
  +	    fi
  +	    # make sure the library variables are pointing to the new library
  +	    dir=$output_objdir
  +	    linklib=$newlib
  +	  fi # test -n $old_archive_from_expsyms_cmds
  +
  +	  if test $linkmode = prog || test "$mode" != relink; then
  +	    add_shlibpath=
  +	    add_dir=
  +	    add=
  +	    lib_linked=yes
  +	    case $hardcode_action in
  +	    immediate | unsupported)
  +	      if test "$hardcode_direct" = no; then
  +		add="$dir/$linklib"
  +	      elif test "$hardcode_minus_L" = no; then
  +		case $host in
  +		*-*-sunos*) add_shlibpath="$dir" ;;
  +		esac
  +		add_dir="-L$dir"
  +		add="-l$name"
  +	      elif test "$hardcode_shlibpath_var" = no; then
  +		add_shlibpath="$dir"
  +		add="-l$name"
  +	      else
  +		lib_linked=no
  +	      fi
  +	      ;;
  +	    relink)
  +	      if test "$hardcode_direct" = yes; then
  +		add="$dir/$linklib"
  +	      elif test "$hardcode_minus_L" = yes; then
  +		add_dir="-L$dir"
  +		add="-l$name"
  +	      elif test "$hardcode_shlibpath_var" = yes; then
  +		add_shlibpath="$dir"
  +		add="-l$name"
  +	      else
  +		lib_linked=no
  +	      fi
  +	      ;;
  +	    *) lib_linked=no ;;
  +	    esac
  +
  +	    if test "$lib_linked" != yes; then
  +	      $echo "$modename: configuration error: unsupported hardcode properties"
  +	      exit 1
  +	    fi
  +
  +	    if test -n "$add_shlibpath"; then
  +	      case :$compile_shlibpath: in
  +	      *":$add_shlibpath:"*) ;;
  +	      *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
   	      esac
  -	      compile_command="$compile_command -l$name"
  -	      deplibs="$deplibs -l$name"
  +	    fi
  +	    if test $linkmode = prog; then
  +	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
  +	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
   	    else
  -	      lib_linked=no
  +	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
  +	      test -n "$add" && deplibs="$add $deplibs"
  +	      if test "$hardcode_direct" != yes && \
  +		 test "$hardcode_minus_L" != yes && \
  +		 test "$hardcode_shlibpath_var" = yes; then
  +		case :$finalize_shlibpath: in
  +		*":$libdir:"*) ;;
  +		*) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
  +		esac
  +	      fi
   	    fi
  -	    ;;
  +	  fi
   
  -	  relink)
  +	  if test $linkmode = prog || test "$mode" = relink; then
  +	    add_shlibpath=
  +	    add_dir=
  +	    add=
  +	    # Finalize command for both is simple: just hardcode it.
   	    if test "$hardcode_direct" = yes; then
  -	      compile_command="$compile_command $absdir/$linklib"
  -	      deplibs="$deplibs $absdir/$linklib"
  +	      add="$libdir/$linklib"
   	    elif test "$hardcode_minus_L" = yes; then
  -	      case "$compile_command " in
  -	      *" -L$absdir "*) ;;
  -	      *) compile_command="$compile_command -L$absdir";;
  -	      esac
  -	      compile_command="$compile_command -l$name"
  -	      deplibs="$deplibs -L$absdir -l$name"
  +	      add_dir="-L$libdir"
  +	      add="-l$name"
   	    elif test "$hardcode_shlibpath_var" = yes; then
  -	      case ":$compile_shlibpath:" in
  -	      *":$absdir:"*) ;;
  -	      *) compile_shlibpath="$compile_shlibpath$absdir:";;
  +	      case :$finalize_shlibpath: in
  +	      *":$libdir:"*) ;;
  +	      *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
   	      esac
  -	      compile_command="$compile_command -l$name"
  -	      deplibs="$deplibs -l$name"
  +	      add="-l$name"
   	    else
  -	      lib_linked=no
  +	      # We cannot seem to hardcode it, guess we'll fake it.
  +	      add_dir="-L$libdir"
  +	      add="-l$name"
   	    fi
  -	    ;;
   
  -	  *)
  -	    lib_linked=no
  -	    ;;
  -	  esac
  -
  -	  if test "$lib_linked" != yes; then
  -	    $echo "$modename: configuration error: unsupported hardcode properties"
  -	    exit 1
  -	  fi
  -
  -	  # Finalize command for both is simple: just hardcode it.
  -	  if test "$hardcode_direct" = yes; then
  -	    finalize_command="$finalize_command $libdir/$linklib"
  -	  elif test "$hardcode_minus_L" = yes; then
  -	    case "$finalize_command " in
  -	    *" -L$libdir "*) ;;
  -	    *) finalize_command="$finalize_command -L$libdir";;
  -	    esac
  -	    finalize_command="$finalize_command -l$name"
  -	  elif test "$hardcode_shlibpath_var" = yes; then
  -	    case ":$finalize_shlibpath:" in
  -	    *":$libdir:"*) ;;
  -	    *) finalize_shlibpath="$finalize_shlibpath$libdir:";;
  -	    esac
  -	    finalize_command="$finalize_command -l$name"
  -	  else
  -	    # We cannot seem to hardcode it, guess we'll fake it.
  -	    case "$finalize_command " in
  -	    *" -L$dir "*) ;;
  -	    *) finalize_command="$finalize_command -L$libdir";;
  -	    esac
  -	    finalize_command="$finalize_command -l$name"
  +	    if test $linkmode = prog; then
  +	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
  +	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
  +	    else
  +	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
  +	      test -n "$add" && deplibs="$add $deplibs"
  +	    fi
   	  fi
  -	else
  -	  # Transform directly to old archives if we don't build new libraries.
  -	  if test -n "$pic_flag" && test -z "$old_library"; then
  -	    $echo "$modename: cannot find static library for \`$arg'" 1>&2
  -	    exit 1
  +	elif test $linkmode = prog; then
  +	  if test "$alldeplibs" = yes &&
  +	     { test "$deplibs_check_method" = pass_all ||
  +	       { test "$build_libtool_libs" = yes &&
  +		 test -n "$library_names"; }; }; then
  +	    # We only need to search for static libraries
  +	    continue
   	  fi
   
  +	  # Try to link the static library
   	  # Here we assume that one of hardcode_direct or hardcode_minus_L
   	  # is not unsupported.  This is valid on all known static and
   	  # shared platforms.
   	  if test "$hardcode_direct" != unsupported; then
   	    test -n "$old_library" && linklib="$old_library"
  -	    compile_command="$compile_command $dir/$linklib"
  -	    finalize_command="$finalize_command $dir/$linklib"
  +	    compile_deplibs="$dir/$linklib $compile_deplibs"
  +	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
   	  else
  -	    case "$compile_command " in
  -	    *" -L$dir "*) ;;
  -	    *) compile_command="$compile_command -L$dir";;
  -	    esac
  -	    compile_command="$compile_command -l$name"
  -	    case "$finalize_command " in
  -	    *" -L$dir "*) ;;
  -	    *) finalize_command="$finalize_command -L$dir";;
  -	    esac
  -	    finalize_command="$finalize_command -l$name"
  +	    compile_deplibs="-l$name -L$dir $compile_deplibs"
  +	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
   	  fi
  -	fi
  -
  -	# Add in any libraries that this one depends upon.
  -	compile_command="$compile_command$dependency_libs"
  -	finalize_command="$finalize_command$dependency_libs"
  -	continue
  -	;;
  -
  -      # Some other compiler argument.
  -      *)
  -	# Unknown arguments in both finalize_command and compile_command need
  -	# to be aesthetically quoted because they are evaled later.
  -	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
  -	case "$arg" in
  -	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
  -	  arg="\"$arg\""
  -	  ;;
  -	esac
  -	;;
  -      esac
  -
  -      # Now actually substitute the argument into the commands.
  -      if test -n "$arg"; then
  -	compile_command="$compile_command $arg"
  -	finalize_command="$finalize_command $arg"
  -      fi
  -    done
  -
  -    if test -n "$prev"; then
  -      $echo "$modename: the \`$prevarg' option requires an argument" 1>&2
  -      $echo "$help" 1>&2
  -      exit 1
  -    fi
  -
  -    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
  -      eval arg=\"$export_dynamic_flag_spec\"
  -      compile_command="$compile_command $arg"
  -      finalize_command="$finalize_command $arg"
  -    fi
  +	elif test "$build_libtool_libs" = yes; then
  +	  # Not a shared library
  +	  if test "$deplibs_check_method" != pass_all; then
  +	    # We're trying link a shared library against a static one
  +	    # but the system doesn't support it.
   
  -    oldlibs=
  -    # calculate the name of the file, without its directory
  -    outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
  -    libobjs_save="$libobjs"
  +	    # Just print a warning and add the library to dependency_libs so
  +	    # that the program can be linked against the static library.
  +	    echo
  +	    echo "*** Warning: This library needs some functionality provided by $lib."
  +	    echo "*** I have the capability to make that library automatically link in when"
  +	    echo "*** you link to this library.  But I can only do this if you have a"
  +	    echo "*** shared version of the library, which you do not appear to have."
  +	    if test "$module" = yes; then
  +	      echo "*** Therefore, libtool will create a static module, that should work "
  +	      echo "*** as long as the dlopening application is linked with the -dlopen flag."
  +	      if test -z "$global_symbol_pipe"; then
  +	        echo
  +	        echo "*** However, this would only work if libtool was able to extract symbol"
  +	        echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
  +	        echo "*** not find such a program.  So, this module is probably useless."
  +	        echo "*** \`nm' from GNU binutils and a full rebuild may help."
  +	      fi
  +	      if test "$build_old_libs" = no; then
  +	        build_libtool_libs=module
  +	        build_old_libs=yes
  +	      else
  +	        build_libtool_libs=no
  +	      fi
  +	    fi
  +	  else
  +	    convenience="$convenience $dir/$old_library"
  +	    old_convenience="$old_convenience $dir/$old_library"
  +	    deplibs="$dir/$old_library $deplibs"
  +	    link_static=yes
  +	  fi
  +	fi # link shared/static library?
  +
  +	if test $linkmode = lib; then
  +	  if test -n "$dependency_libs" &&
  +	     { test $hardcode_into_libs != yes || test $build_old_libs = yes ||
  +	       test $link_static = yes; }; then
  +	    # Extract -R from dependency_libs
  +	    temp_deplibs=
  +	    for libdir in $dependency_libs; do
  +	      case $libdir in
  +	      -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'`
  +		   case " $xrpath " in
  +		   *" $temp_xrpath "*) ;;
  +		   *) xrpath="$xrpath $temp_xrpath";;
  +		   esac;;
  +	      *) temp_deplibs="$temp_deplibs $libdir";;
  +	      esac
  +	    done
  +	    dependency_libs="$temp_deplibs"
  +	  fi
   
  -    case "$output" in
  -    "")
  -      $echo "$modename: you must specify an output file" 1>&2
  -      $echo "$help" 1>&2
  -      exit 1
  -      ;;
  +	  newlib_search_path="$newlib_search_path $absdir"
  +	  # Link against this library
  +	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
  +	  # ... and its dependency_libs
  +	  tmp_libs=
  +	  for deplib in $dependency_libs; do
  +	    newdependency_libs="$deplib $newdependency_libs"
  +	    case "$tmp_libs " in
  +	    *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
  +	    esac
  +	    tmp_libs="$tmp_libs $deplib"
  +	  done
   
  -    *.a | *.lib)
  -      if test -n "$link_against_libtool_libs"; then
  -	$echo "$modename: error: cannot link libtool libraries into archives" 1>&2
  -	exit 1
  +	  if test $link_all_deplibs != no; then
  +	    # Add the search paths of all dependency libraries
  +	    for deplib in $dependency_libs; do
  +	      case $deplib in
  +	      -L*) path="$deplib" ;;
  +	      *.la)
  +		dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'`
  +		test "X$dir" = "X$deplib" && dir="."
  +		# We need an absolute path.
  +		case $dir in
  +		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
  +		*)
  +		  absdir=`cd "$dir" && pwd`
  +		  if test -z "$absdir"; then
  +		    $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
  +		    absdir="$dir"
  +		  fi
  +		  ;;
  +		esac
  +		if grep "^installed=no" $deplib > /dev/null; then
  +		  path="-L$absdir/$objdir"
  +		else
  +		  eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
  +		  if test -z "$libdir"; then
  +		    $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
  +		    exit 1
  +		  fi
  +		  if test "$absdir" != "$libdir"; then
  +		    $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2
  +		  fi
  +		  path="-L$absdir"
  +		fi
  +		;;
  +	      *) continue ;;
  +	      esac
  +	      case " $deplibs " in
  +	      *" $path "*) ;;
  +	      *) deplibs="$deplibs $path" ;;
  +	      esac
  +	    done
  +	  fi # link_all_deplibs != no
  +	fi # linkmode = lib
  +      done # for deplib in $libs
  +      if test $pass = dlpreopen; then
  +	# Link the dlpreopened libraries before other libraries
  +	for deplib in $save_deplibs; do
  +	  deplibs="$deplib $deplibs"
  +	done
         fi
  +      if test $pass != dlopen; then
  +	test $pass != scan && dependency_libs="$newdependency_libs"
  +	if test $pass != conv; then
  +	  # Make sure lib_search_path contains only unique directories.
  +	  lib_search_path=
  +	  for dir in $newlib_search_path; do
  +	    case "$lib_search_path " in
  +	    *" $dir "*) ;;
  +	    *) lib_search_path="$lib_search_path $dir" ;;
  +	    esac
  +	  done
  +	  newlib_search_path=
  +	fi
   
  -      if test -n "$deplibs"; then
  -	$echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2
  +	if test "$linkmode,$pass" != "prog,link"; then
  +	  vars="deplibs"
  +	else
  +	  vars="compile_deplibs finalize_deplibs"
  +	fi
  +	for var in $vars dependency_libs; do
  +	  # Add libraries to $var in reverse order
  +	  eval tmp_libs=\"\$$var\"
  +	  new_libs=
  +	  for deplib in $tmp_libs; do
  +	    case $deplib in
  +	    -L*) new_libs="$deplib $new_libs" ;;
  +	    *)
  +	      case " $specialdeplibs " in
  +	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
  +	      *)
  +		case " $new_libs " in
  +		*" $deplib "*) ;;
  +		*) new_libs="$deplib $new_libs" ;;
  +		esac
  +		;;
  +	      esac
  +	      ;;
  +	    esac
  +	  done
  +	  tmp_libs=
  +	  for deplib in $new_libs; do
  +	    case $deplib in
  +	    -L*)
  +	      case " $tmp_libs " in
  +	      *" $deplib "*) ;;
  +	      *) tmp_libs="$tmp_libs $deplib" ;;
  +	      esac
  +	      ;;
  +	    *) tmp_libs="$tmp_libs $deplib" ;;
  +	    esac
  +	  done
  +	  eval $var=\"$tmp_libs\"
  +	done # for var
         fi
  +      if test "$pass" = "conv" &&
  +       { test "$linkmode" = "lib" || test "$linkmode" = "prog"; }; then
  +	libs="$deplibs" # reset libs
  +	deplibs=
  +      fi
  +    done # for pass
  +    if test $linkmode = prog; then
  +      dlfiles="$newdlfiles"
  +      dlprefiles="$newdlprefiles"
  +    fi
   
  +    case $linkmode in
  +    oldlib)
         if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
   	$echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2
         fi
  @@ -1566,11 +2107,12 @@
         # Now set the variables for building old libraries.
         build_libtool_libs=no
         oldlibs="$output"
  +      objs="$objs$old_deplibs"
         ;;
   
  -    *.la)
  +    lib)
         # Make sure we only generate libraries of the form `libNAME.la'.
  -      case "$outputname" in
  +      case $outputname in
         lib*)
   	name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
   	eval libname=\"$libname_spec\"
  @@ -1589,28 +2131,22 @@
   	  libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
   	fi
   	;;
  -      esac
  -
  -      output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
  -      if test "X$output_objdir" = "X$output"; then
  -	output_objdir="$objdir"
  -      else
  -	output_objdir="$output_objdir/$objdir"
  -      fi
  +      esac
   
         if test -n "$objs"; then
  -	$echo "$modename: cannot build libtool library \`$output' from non-libtool objects:$objs" 2>&1
  -	exit 1
  -      fi
  -
  -      # How the heck are we supposed to write a wrapper for a shared library?
  -      if test -n "$link_against_libtool_libs"; then
  -	 $echo "$modename: error: cannot link shared libraries into libtool libraries" 1>&2
  -	 exit 1
  +	if test "$deplibs_check_method" != pass_all; then
  +	  $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1
  +	  exit 1
  +	else
  +	  echo
  +	  echo "*** Warning: Linking the shared library $output against the non-libtool"
  +	  echo "*** objects $objs is not portable!"
  +	  libobjs="$libobjs $objs"
  +	fi
         fi
   
  -      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
  -	$echo "$modename: warning: \`-dlopen' is ignored for libtool libraries" 1>&2
  +      if test "$dlself" != no; then
  +	$echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2
         fi
   
         set dummy $rpath
  @@ -1628,7 +2164,6 @@
   	  build_libtool_libs=convenience
   	  build_old_libs=yes
   	fi
  -	dependency_libs="$deplibs"
   
   	if test -n "$vinfo"; then
   	  $echo "$modename: warning: \`-version-info' is ignored for convenience libraries" 1>&2
  @@ -1655,8 +2190,8 @@
   	age="$4"
   
   	# Check that each of the things are valid numbers.
  -	case "$current" in
  -	0 | [1-9] | [1-9][0-9]*) ;;
  +	case $current in
  +	0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
   	*)
   	  $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2
   	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
  @@ -1664,8 +2199,8 @@
   	  ;;
   	esac
   
  -	case "$revision" in
  -	0 | [1-9] | [1-9][0-9]*) ;;
  +	case $revision in
  +	0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
   	*)
   	  $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2
   	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
  @@ -1673,8 +2208,8 @@
   	  ;;
   	esac
   
  -	case "$age" in
  -	0 | [1-9] | [1-9][0-9]*) ;;
  +	case $age in
  +	0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
   	*)
   	  $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2
   	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
  @@ -1692,12 +2227,31 @@
   	major=
   	versuffix=
   	verstring=
  -	case "$version_type" in
  +	case $version_type in
   	none) ;;
   
  +	darwin)
  +	  # Like Linux, but with the current version available in
  +	  # verstring for coding it into the library header
  +	  major=.`expr $current - $age`
  +	  versuffix="$major.$age.$revision"
  +	  # Darwin ld doesn't like 0 for these options...
  +	  minor_current=`expr $current + 1`
  +	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
  +	  ;;
  +
  +	freebsd-aout)
  +	  major=".$current"
  +	  versuffix=".$current.$revision";
  +	  ;;
  +
  +	freebsd-elf)
  +	  major=".$current"
  +	  versuffix=".$current";
  +	  ;;
  +
   	irix)
   	  major=`expr $current - $age + 1`
  -	  versuffix="$major.$revision"
   	  verstring="sgi$major.$revision"
   
   	  # Add in all the interfaces that we are compatible with.
  @@ -1707,6 +2261,10 @@
   	    loop=`expr $loop - 1`
   	    verstring="sgi$major.$iface:$verstring"
   	  done
  +
  +	  # Before this point, $major must not contain `.'.
  +	  major=.$major
  +	  versuffix="$major.$revision"
   	  ;;
   
   	linux)
  @@ -1736,21 +2294,11 @@
   	  versuffix=".$current.$revision"
   	  ;;
   
  -	freebsd-aout)
  -	  major=".$current"
  -	  versuffix=".$current.$revision";
  -	  ;;
  -
  -	freebsd-elf)
  -	  major=".$current"
  -	  versuffix=".$current";
  -	  ;;
  -
   	windows)
  -	  # Like Linux, but with '-' rather than '.', since we only
  -	  # want one extension on Windows 95.
  +	  # Use '-' rather than '.', since we only want one
  +	  # extension on DOS 8.3 filesystems.
   	  major=`expr $current - $age`
  -	  versuffix="-$major-$age-$revision"
  +	  versuffix="-$major"
   	  ;;
   
   	*)
  @@ -1777,7 +2325,7 @@
   	  versuffix=
   	  verstring=""
   	fi
  -	
  +
   	# Check to see if the archive will have undefined symbols.
   	if test "$allow_undefined" = yes; then
   	  if test "$allow_undefined_flag" = unsupported; then
  @@ -1789,34 +2337,12 @@
   	  # Don't allow undefined symbols.
   	  allow_undefined_flag="$no_undefined_flag"
   	fi
  -
  -	dependency_libs="$deplibs"
  -	case "$host" in
  -	*-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*)
  -	  # these systems don't actually have a c library (as such)!
  -	  ;;
  -        *-*-rhapsody*)
  -	  # rhapsody is a little odd...
  -	  deplibs="$deplibs -framework System"
  -	  ;;
  -	*)
  -	  # Add libc to deplibs on all other systems.
  -	  deplibs="$deplibs -lc"
  -	  ;;
  -	esac
         fi
   
  -      # Create the output directory, or remove our outputs if we need to.
  -      if test -d $output_objdir; then
  +      if test "$mode" != relink; then
  +	# Remove our outputs.
   	$show "${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*"
   	$run ${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*
  -      else
  -	$show "$mkdir $output_objdir"
  -	$run $mkdir $output_objdir
  -	status=$?
  -	if test $status -ne 0 && test ! -d $output_objdir; then
  -	  exit $status
  -	fi
         fi
   
         # Now set the variables for building old libraries.
  @@ -1827,7 +2353,70 @@
   	oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
         fi
   
  +      # Eliminate all temporary directories.
  +      for path in $notinst_path; do
  +	lib_search_path=`echo "$lib_search_path " | sed -e 's% $path % %g'`
  +	deplibs=`echo "$deplibs " | sed -e 's% -L$path % %g'`
  +	dependency_libs=`echo "$dependency_libs " | sed -e 's% -L$path % %g'`
  +      done
  +
  +      if test -n "$xrpath"; then
  +	# If the user specified any rpath flags, then add them.
  +	temp_xrpath=
  +	for libdir in $xrpath; do
  +	  temp_xrpath="$temp_xrpath -R$libdir"
  +	  case "$finalize_rpath " in
  +	  *" $libdir "*) ;;
  +	  *) finalize_rpath="$finalize_rpath $libdir" ;;
  +	  esac
  +	done
  +	if test $hardcode_into_libs != yes || test $build_old_libs = yes; then
  +	  dependency_libs="$temp_xrpath $dependency_libs"
  +	fi
  +      fi
  +
  +      # Make sure dlfiles contains only unique files that won't be dlpreopened
  +      old_dlfiles="$dlfiles"
  +      dlfiles=
  +      for lib in $old_dlfiles; do
  +	case " $dlprefiles $dlfiles " in
  +	*" $lib "*) ;;
  +	*) dlfiles="$dlfiles $lib" ;;
  +	esac
  +      done
  +
  +      # Make sure dlprefiles contains only unique files
  +      old_dlprefiles="$dlprefiles"
  +      dlprefiles=
  +      for lib in $old_dlprefiles; do
  +	case "$dlprefiles " in
  +	*" $lib "*) ;;
  +	*) dlprefiles="$dlprefiles $lib" ;;
  +	esac
  +      done
  +
         if test "$build_libtool_libs" = yes; then
  +	if test -n "$rpath"; then
  +	  case $host in
  +	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*)
  +	    # these systems don't actually have a c library (as such)!
  +	    ;;
  +	  *-*-rhapsody* | *-*-darwin1.[012])
  +	    # Rhapsody C library is in the System framework
  +	    deplibs="$deplibs -framework System"
  +	    ;;
  +	  *-*-netbsd*)
  +	    # Don't link with libc until the a.out ld.so is fixed.
  +	    ;;
  +	  *)
  +	    # Add libc to deplibs on all other systems if necessary.
  +	    if test $build_libtool_need_lc = "yes"; then
  +	      deplibs="$deplibs -lc"
  +	    fi
  +	    ;;
  +	  esac
  +	fi
  +
   	# Transform deplibs into only deplibs that can be linked in shared.
   	name_save=$name
   	libname_save=$libname
  @@ -1842,7 +2431,7 @@
   	major=""
   	newdeplibs=
   	droppeddeps=no
  -	case "$deplibs_check_method" in
  +	case $deplibs_check_method in
   	pass_all)
   	  # Don't check for shared/static.  Everything works.
   	  # This might be a little naive.  We might want to check
  @@ -1867,7 +2456,7 @@
   	    for i in $deplibs; do
   	      name="`expr $i : '-l\(.*\)'`"
   	      # If $name is empty we are operating on a -L argument.
  -	      if test "$name" != "" ; then
  +	      if test -n "$name" && test "$name" != "0"; then
   		libname=`eval \\$echo \"$libname_spec\"`
   		deplib_matches=`eval \\$echo \"$library_names_spec\"`
   		set dummy $deplib_matches
  @@ -1892,7 +2481,7 @@
   	    for i in $deplibs; do
   	      name="`expr $i : '-l\(.*\)'`"
   	     # If $name is empty we are operating on a -L argument.
  -	      if test "$name" != "" ; then
  +	      if test -n "$name" && test "$name" != "0"; then
   		$rm conftest
   		$CC -o conftest conftest.c $i
   		# Did it work?
  @@ -1928,19 +2517,19 @@
   	  ;;
   	file_magic*)
   	  set dummy $deplibs_check_method
  -	  file_magic_regex="`expr \"$deplibs_check_method\" : \"$2 \(.*\)\"`"
  +	  file_magic_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
   	  for a_deplib in $deplibs; do
   	    name="`expr $a_deplib : '-l\(.*\)'`"
   	    # If $name is empty we are operating on a -L argument.
  -	    if test "$name" != "" ; then
  +	    if test -n "$name" && test "$name" != "0"; then
   	      libname=`eval \\$echo \"$libname_spec\"`
  -	      for i in $lib_search_path; do
  +	      for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
   		    potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
   		    for potent_lib in $potential_libs; do
   		      # Follow soft links.
   		      if ls -lLd "$potent_lib" 2>/dev/null \
   			 | grep " -> " >/dev/null; then
  -			continue 
  +			continue
   		      fi
   		      # The statement above tries to avoid entering an
   		      # endless loop below, in case of cyclic links.
  @@ -1950,7 +2539,7 @@
   		      potlib="$potent_lib"
   		      while test -h "$potlib" 2>/dev/null; do
   			potliblink=`ls -ld $potlib | sed 's/.* -> //'`
  -			case "$potliblink" in
  +			case $potliblink in
   			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
   			*) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
   			esac
  @@ -1978,6 +2567,40 @@
   	    fi
   	  done # Gone through all deplibs.
   	  ;;
  +	match_pattern*)
  +	  set dummy $deplibs_check_method
  +	  match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
  +	  for a_deplib in $deplibs; do
  +	    name="`expr $a_deplib : '-l\(.*\)'`"
  +	    # If $name is empty we are operating on a -L argument.
  +	    if test -n "$name" && test "$name" != "0"; then
  +	      libname=`eval \\$echo \"$libname_spec\"`
  +	      for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
  +		potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
  +		for potent_lib in $potential_libs; do
  +		  if eval echo \"$potent_lib\" 2>/dev/null \
  +		      | sed 10q \
  +		      | egrep "$match_pattern_regex" > /dev/null; then
  +		    newdeplibs="$newdeplibs $a_deplib"
  +		    a_deplib=""
  +		    break 2
  +		  fi
  +		done
  +	      done
  +	      if test -n "$a_deplib" ; then
  +		droppeddeps=yes
  +		echo
  +		echo "*** Warning: This library needs some functionality provided by $a_deplib."
  +		echo "*** I have the capability to make that library automatically link in when"
  +		echo "*** you link to this library.  But I can only do this if you have a"
  +		echo "*** shared version of the library, which you do not appear to have."
  +	      fi
  +	    else
  +	      # Add a -L argument.
  +	      newdeplibs="$newdeplibs $a_deplib"
  +	    fi
  +	  done # Gone through all deplibs.
  +	  ;;
   	none | unknown | *)
   	  newdeplibs=""
   	  if $echo "X $deplibs" | $Xsed -e 's/ -lc$//' \
  @@ -2000,6 +2623,13 @@
   	libname=$libname_save
   	name=$name_save
   
  +	case $host in
  +	*-*-rhapsody* | *-*-darwin1.[012])
  +	  # On Rhapsody replace the C library is the System framework
  +	  newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'`
  +	  ;;
  +	esac
  +
   	if test "$droppeddeps" = yes; then
   	  if test "$module" = yes; then
   	    echo
  @@ -2025,6 +2655,21 @@
   	    echo "*** The inter-library dependencies that have been dropped here will be"
   	    echo "*** automatically added whenever a program is linked with this library"
   	    echo "*** or is declared to -dlopen it."
  +
  +	    if test $allow_undefined = no; then
  +	      echo
  +	      echo "*** Since this library must not contain undefined symbols,"
  +	      echo "*** because either the platform does not support them or"
  +	      echo "*** it was explicitly requested with -no-undefined,"
  +	      echo "*** libtool will only create a static version of it."
  +	      if test "$build_old_libs" = no; then
  +		oldlibs="$output_objdir/$libname.$libext"
  +		build_libtool_libs=module
  +		build_old_libs=yes
  +	      else
  +		build_libtool_libs=no
  +	      fi
  +	    fi
   	  fi
   	fi
   	# Done checking deplibs!
  @@ -2035,9 +2680,64 @@
         library_names=
         old_library=
         dlname=
  -      
  +
         # Test again, we may have decided not to build it any more
         if test "$build_libtool_libs" = yes; then
  +	if test $hardcode_into_libs = yes; then
  +	  # Hardcode the library paths
  +	  hardcode_libdirs=
  +	  dep_rpath=
  +	  rpath="$finalize_rpath"
  +	  test "$mode" != relink && rpath="$compile_rpath$rpath"
  +	  for libdir in $rpath; do
  +	    if test -n "$hardcode_libdir_flag_spec"; then
  +	      if test -n "$hardcode_libdir_separator"; then
  +		if test -z "$hardcode_libdirs"; then
  +		  hardcode_libdirs="$libdir"
  +		else
  +		  # Just accumulate the unique libdirs.
  +		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
  +		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
  +		    ;;
  +		  *)
  +		    hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
  +		    ;;
  +		  esac
  +		fi
  +	      else
  +		eval flag=\"$hardcode_libdir_flag_spec\"
  +		dep_rpath="$dep_rpath $flag"
  +	      fi
  +	    elif test -n "$runpath_var"; then
  +	      case "$perm_rpath " in
  +	      *" $libdir "*) ;;
  +	      *) perm_rpath="$perm_rpath $libdir" ;;
  +	      esac
  +	    fi
  +	  done
  +	  # Substitute the hardcoded libdirs into the rpath.
  +	  if test -n "$hardcode_libdir_separator" &&
  +	     test -n "$hardcode_libdirs"; then
  +	    libdir="$hardcode_libdirs"
  +	    eval dep_rpath=\"$hardcode_libdir_flag_spec\"
  +	  fi
  +	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
  +	    # We should set the runpath_var.
  +	    rpath=
  +	    for dir in $perm_rpath; do
  +	      rpath="$rpath$dir:"
  +	    done
  +	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
  +	  fi
  +	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
  +	fi
  +
  +	shlibpath="$finalize_shlibpath"
  +	test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
  +	if test -n "$shlibpath"; then
  +	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
  +	fi
  +
   	# Get the real and link names of the library.
   	eval library_names=\"$library_names_spec\"
   	set dummy $library_names
  @@ -2049,6 +2749,7 @@
   	else
   	  soname="$realname"
   	fi
  +	test -z "$dlname" && dlname=$soname
   
   	lib="$output_objdir/$realname"
   	for link
  @@ -2120,7 +2821,7 @@
   
   	    for xlib in $convenience; do
   	      # Extract the objects.
  -	      case "$xlib" in
  +	      case $xlib in
   	      [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
   	      *) xabs=`pwd`"/$xlib" ;;
   	      esac
  @@ -2145,7 +2846,12 @@
   
   	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
   	  eval flag=\"$thread_safe_flag_spec\"
  -	  linkopts="$linkopts $flag"
  +	  linker_flags="$linker_flags $flag"
  +	fi
  +
  +	# Make a backup of the uninstalled library when relinking
  +	if test "$mode" = relink; then
  +	  $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $?
   	fi
   
   	# Do each of the archive commands.
  @@ -2162,6 +2868,12 @@
   	done
   	IFS="$save_ifs"
   
  +	# Restore the uninstalled library and exit
  +	if test "$mode" = relink; then
  +	  $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $?
  +	  exit 0
  +	fi
  +
   	# Create links to the real library.
   	for linkname in $linknames; do
   	  if test "$realname" != "$linkname"; then
  @@ -2178,12 +2890,7 @@
         fi
         ;;
   
  -    *.lo | *.o | *.obj)
  -      if test -n "$link_against_libtool_libs"; then
  -	$echo "$modename: error: cannot link libtool libraries into objects" 1>&2
  -	exit 1
  -      fi
  -
  +    obj)
         if test -n "$deplibs"; then
   	$echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2
         fi
  @@ -2208,9 +2915,9 @@
   	$echo "$modename: warning: \`-release' is ignored for objects" 1>&2
         fi
   
  -      case "$output" in
  +      case $output in
         *.lo)
  -	if test -n "$objs"; then
  +	if test -n "$objs$old_deplibs"; then
   	  $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2
   	  exit 1
   	fi
  @@ -2234,7 +2941,7 @@
         gentop=
         # reload_cmds runs $LD directly, so let us get rid of
         # -Wl from whole_archive_flag_spec
  -      wl= 
  +      wl=
   
         if test -n "$convenience"; then
   	if test -n "$whole_archive_flag_spec"; then
  @@ -2253,7 +2960,7 @@
   
   	  for xlib in $convenience; do
   	    # Extract the objects.
  -	    case "$xlib" in
  +	    case $xlib in
   	    [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
   	    *) xabs=`pwd`"/$xlib" ;;
   	    esac
  @@ -2277,7 +2984,7 @@
         fi
   
         # Create the old-style object.
  -      reload_objs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs"
  +      reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
   
         output="$obj"
         eval cmds=\"$reload_cmds\"
  @@ -2312,7 +3019,7 @@
   	exit 0
         fi
   
  -      if test -n "$pic_flag"; then
  +      if test -n "$pic_flag" || test "$pic_mode" != default; then
   	# Only do commands if we really have different PIC objects.
   	reload_objs="$libobjs $reload_conv_objs"
   	output="$libobj"
  @@ -2348,8 +3055,10 @@
         exit 0
         ;;
   
  -    # Anything else should be a program.
  -    *)
  +    prog)
  +      case $host in
  +	*cygwin*) output=`echo $output | sed -e 's,.exe$,,;s,$,.exe,'` ;;
  +      esac
         if test -n "$vinfo"; then
   	$echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2
         fi
  @@ -2359,20 +3068,27 @@
         fi
   
         if test "$preload" = yes; then
  -	if test "$dlopen" = unknown && test "$dlopen_self" = unknown &&
  +	if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown &&
   	   test "$dlopen_self_static" = unknown; then
   	  $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support."
  -	fi 
  +	fi
         fi
  -    
  +
  +      case $host in
  +      *-*-rhapsody* | *-*-darwin1.[012])
  +	# On Rhapsody replace the C library is the System framework
  +	compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
  +	finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
  +	;;
  +      esac
  +
  +      compile_command="$compile_command $compile_deplibs"
  +      finalize_command="$finalize_command $finalize_deplibs"
  +
         if test -n "$rpath$xrpath"; then
   	# If the user specified any rpath flags, then add them.
   	for libdir in $rpath $xrpath; do
   	  # This is the magic to use -rpath.
  -	  case "$compile_rpath " in
  -	  *" $libdir "*) ;;
  -	  *) compile_rpath="$compile_rpath $libdir" ;;
  -	  esac
   	  case "$finalize_rpath " in
   	  *" $libdir "*) ;;
   	  *) finalize_rpath="$finalize_rpath $libdir" ;;
  @@ -2390,7 +3106,7 @@
   	      hardcode_libdirs="$libdir"
   	    else
   	      # Just accumulate the unique libdirs.
  -	      case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in
  +	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
   	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
   		;;
   	      *)
  @@ -2408,6 +3124,14 @@
   	  *) perm_rpath="$perm_rpath $libdir" ;;
   	  esac
   	fi
  +	case $host in
  +	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
  +	  case :$dllsearchpath: in
  +	  *":$libdir:"*) ;;
  +	  *) dllsearchpath="$dllsearchpath:$libdir";;
  +	  esac
  +	  ;;
  +	esac
         done
         # Substitute the hardcoded libdirs into the rpath.
         if test -n "$hardcode_libdir_separator" &&
  @@ -2426,7 +3150,7 @@
   	      hardcode_libdirs="$libdir"
   	    else
   	      # Just accumulate the unique libdirs.
  -	      case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in
  +	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
   	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
   		;;
   	      *)
  @@ -2453,23 +3177,6 @@
         fi
         finalize_rpath="$rpath"
   
  -      output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
  -      if test "X$output_objdir" = "X$output"; then
  -	output_objdir="$objdir"
  -      else
  -	output_objdir="$output_objdir/$objdir"
  -      fi
  -
  -      # Create the binary in the object directory, then wrap it.
  -      if test ! -d $output_objdir; then
  -	$show "$mkdir $output_objdir"
  -	$run $mkdir $output_objdir
  -	status=$?
  -	if test $status -ne 0 && test ! -d $output_objdir; then
  -	  exit $status
  -	fi
  -      fi
  -
         if test -n "$libobjs" && test "$build_old_libs" = yes; then
   	# Transform all the library objects into standard objects.
   	compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
  @@ -2486,7 +3193,7 @@
         fi
   
         if test -n "$dlsyms"; then
  -	case "$dlsyms" in
  +	case $dlsyms in
   	"") ;;
   	*.c)
   	  # Discover the nlist of each of the dlfiles.
  @@ -2518,7 +3225,7 @@
   	    test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist"
   
   	    # Add our own program objects to the symbol list.
  -	    progfiles=`$echo "X$objs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
  +	    progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
   	    for arg in $progfiles; do
   	      $show "extracting global C symbols from \`$arg'"
   	      $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
  @@ -2528,7 +3235,7 @@
   	      $run eval 'egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
   	      $run eval '$mv "$nlist"T "$nlist"'
   	    fi
  -	    
  +
   	    if test -n "$export_symbols_regex"; then
   	      $run eval 'egrep -e "$export_symbols_regex" "$nlist" > "$nlist"T'
   	      $run eval '$mv "$nlist"T "$nlist"'
  @@ -2617,13 +3324,13 @@
   	  fi
   
   	  pic_flag_for_symtable=
  -	  case "$host" in
  +	  case $host in
   	  # compiling the symbol table file with pic_flag works around
   	  # a FreeBSD bug that causes programs to crash when -lm is
   	  # linked before any other PIC object.  But we must not use
   	  # pic_flag when linking with -static.  The problem exists in
   	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
  -	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
  +	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
   	    case "$compile_command " in
   	    *" -static "*) ;;
   	    *) pic_flag_for_symtable=" $pic_flag -DPIC -DFREEBSD_WORKAROUND";;
  @@ -2662,7 +3369,7 @@
   	finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
         fi
   
  -      if test -z "$link_against_libtool_libs" || test "$build_libtool_libs" != yes; then
  +      if test $need_relink = no || test "$build_libtool_libs" != yes; then
   	# Replace the output file specification.
   	compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
   	link_command="$compile_command$compile_rpath"
  @@ -2671,7 +3378,7 @@
   	$show "$link_command"
   	$run eval "$link_command"
   	status=$?
  -	
  +
   	# Delete the generated files.
   	if test -n "$dlsyms"; then
   	  $show "$rm $output_objdir/${outputname}S.${objext}"
  @@ -2685,7 +3392,7 @@
   	# We should set the shlibpath_var
   	rpath=
   	for dir in $temp_rpath; do
  -	  case "$dir" in
  +	  case $dir in
   	  [\\/]* | [A-Za-z]:[\\/]*)
   	    # Absolute path.
   	    rpath="$rpath$dir:"
  @@ -2727,11 +3434,24 @@
   	fi
         fi
   
  +      if test "$no_install" = yes; then
  +	# We don't need to create a wrapper script.
  +	link_command="$compile_var$compile_command$compile_rpath"
  +	# Replace the output file specification.
  +	link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
  +	# Delete the old output file.
  +	$run $rm $output
  +	# Link the executable and exit
  +	$show "$link_command"
  +	$run eval "$link_command" || exit $?
  +	exit 0
  +      fi
  +
         if test "$hardcode_action" = relink; then
   	# Fast installation is not supported
   	link_command="$compile_var$compile_command$compile_rpath"
   	relink_command="$finalize_var$finalize_command$finalize_rpath"
  -	
  +
   	$echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2
   	$echo "$modename: \`$output' will be relinked during installation" 1>&2
         else
  @@ -2751,7 +3471,7 @@
   
         # Replace the output file specification.
         link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
  -      
  +
         # Delete the old output files.
         $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname
   
  @@ -2763,12 +3483,24 @@
   
         # Quote the relink command for shipping.
         if test -n "$relink_command"; then
  +	# Preserve any variables that may affect compiler behavior
  +	for var in $variables_saved_for_relink; do
  +	  if eval test -z \"\${$var+set}\"; then
  +	    relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
  +	  elif eval var_value=\$$var; test -z "$var_value"; then
  +	    relink_command="$var=; export $var; $relink_command"
  +	  else
  +	    var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
  +	    relink_command="$var=\"$var_value\"; export $var; $relink_command"
  +	  fi
  +	done
  +	relink_command="cd `pwd`; $relink_command"
   	relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
         fi
   
         # Quote $echo for shipping.
         if test "X$echo" = "X$SHELL $0 --fallback-echo"; then
  -	case "$0" in
  +	case $0 in
   	[\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";;
   	*) qecho="$SHELL `pwd`/$0 --fallback-echo";;
   	esac
  @@ -2784,6 +3516,11 @@
   	case $output in
   	  *.exe) output=`echo $output|sed 's,.exe$,,'` ;;
   	esac
  +	# test for cygwin because mv fails w/o .exe extensions
  +	case $host in
  +	  *cygwin*) exeext=.exe ;;
  +	  *) exeext= ;;
  +	esac
   	$rm $output
   	trap "$rm $output; exit 1" 1 2 15
   
  @@ -2813,7 +3550,7 @@
   # This environment variable determines our operation mode.
   if test \"\$libtool_install_magic\" = \"$magic\"; then
     # install mode needs the following variable:
  -  link_against_libtool_libs='$link_against_libtool_libs'
  +  notinst_deplibs='$notinst_deplibs'
   else
     # When we are sourced in execute mode, \$file and \$echo are already set.
     if test \"\$libtool_execute_magic\" != \"$magic\"; then
  @@ -2846,7 +3583,7 @@
       # If there was a directory component, then change thisdir.
       if test \"x\$destdir\" != \"x\$file\"; then
         case \"\$destdir\" in
  -      [\\/]* | [A-Za-z]:[\\/]*) thisdir=\"\$destdir\" ;;
  +      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
         *) thisdir=\"\$thisdir/\$destdir\" ;;
         esac
       fi
  @@ -2862,9 +3599,9 @@
   
   	if test "$fast_install" = yes; then
   	  echo >> $output "\
  -  program=lt-'$outputname'
  +  program=lt-'$outputname'$exeext
     progdir=\"\$thisdir/$objdir\"
  -  
  +
     if test ! -f \"\$progdir/\$program\" || \\
        { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | sed 1q\`; \\
          test \"X\$file\" != \"X\$progdir/\$program\"; }; then
  @@ -2881,7 +3618,7 @@
   
       # relink executable if necessary
       if test -n \"\$relink_command\"; then
  -      if (cd \"\$thisdir\" && eval \$relink_command); then :
  +      if (eval \$relink_command); then :
         else
   	$rm \"\$progdir/\$file\"
   	exit 1
  @@ -2931,9 +3668,9 @@
         # Run the actual program with our arguments.
   "
   	case $host in
  -	  # win32 systems need to use the prog path for dll
  -	  # lookup to work
  -	*-*-cygwin*)
  +	# win32 systems need to use the prog path for dll
  +	# lookup to work
  +	*-*-cygwin* | *-*-pw32*)
   	  $echo >> $output "\
         exec \$progdir/\$program \${1+\"\$@\"}
   "
  @@ -2987,7 +3724,7 @@
   	  oldobjs="$libobjs_save"
   	  build_libtool_libs=no
   	else
  -	  oldobjs="$objs "`$echo "X$libobjs_save" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`
  +	  oldobjs="$objs$old_deplibs "`$echo "X$libobjs_save" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`
   	fi
   	addlibs="$old_convenience"
         fi
  @@ -3003,11 +3740,11 @@
   	  exit $status
   	fi
   	generated="$generated $gentop"
  -	  
  +
   	# Add in members from convenience archives.
   	for xlib in $addlibs; do
   	  # Extract the objects.
  -	  case "$xlib" in
  +	  case $xlib in
   	  [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
   	  *) xabs=`pwd`"/$xlib" ;;
   	  esac
  @@ -3068,19 +3805,26 @@
       fi
   
       # Now create the libtool archive.
  -    case "$output" in
  +    case $output in
       *.la)
         old_library=
         test "$build_old_libs" = yes && old_library="$libname.$libext"
         $show "creating $output"
   
  -      if test -n "$xrpath"; then
  -	temp_xrpath=
  -	for libdir in $xrpath; do
  -	  temp_xrpath="$temp_xrpath -R$libdir"
  -	done
  -	dependency_libs="$temp_xrpath $dependency_libs"
  -      fi
  +      # Preserve any variables that may affect compiler behavior
  +      for var in $variables_saved_for_relink; do
  +	if eval test -z \"\${$var+set}\"; then
  +	  relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
  +	elif eval var_value=\$$var; test -z "$var_value"; then
  +	  relink_command="$var=; export $var; $relink_command"
  +	else
  +	  var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
  +	  relink_command="$var=\"$var_value\"; export $var; $relink_command"
  +	fi
  +      done
  +      # Quote the link command for shipping.
  +      relink_command="cd `pwd`; $SHELL $0 --mode=relink $libtool_args"
  +      relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
   
         # Only create the output if not a dry run.
         if test -z "$run"; then
  @@ -3090,8 +3834,52 @@
   	      break
   	    fi
   	    output="$output_objdir/$outputname"i
  +	    # Replace all uninstalled libtool libraries with the installed ones
  +	    newdependency_libs=
  +	    for deplib in $dependency_libs; do
  +	      case $deplib in
  +	      *.la)
  +		name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'`
  +		eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
  +		if test -z "$libdir"; then
  +		  $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
  +		  exit 1
  +		fi
  +		newdependency_libs="$newdependency_libs $libdir/$name"
  +		;;
  +	      *) newdependency_libs="$newdependency_libs $deplib" ;;
  +	      esac
  +	    done
  +	    dependency_libs="$newdependency_libs"
  +	    newdlfiles=
  +	    for lib in $dlfiles; do
  +	      name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
  +	      eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
  +	      if test -z "$libdir"; then
  +		$echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
  +		exit 1
  +	      fi
  +	      newdlfiles="$newdlfiles $libdir/$name"
  +	    done
  +	    dlfiles="$newdlfiles"
  +	    newdlprefiles=
  +	    for lib in $dlprefiles; do
  +	      name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
  +	      eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
  +	      if test -z "$libdir"; then
  +		$echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
  +		exit 1
  +	      fi
  +	      newdlprefiles="$newdlprefiles $libdir/$name"
  +	    done
  +	    dlprefiles="$newdlprefiles"
   	  fi
   	  $rm $output
  +	  # place dlname in correct position for cygwin
  +	  tdlname=$dlname
  +	  case $host,$output,$installed,$module,$dlname in
  +	    *cygwin*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
  +	  esac
   	  $echo > $output "\
   # $outputname - a libtool library file
   # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
  @@ -3100,7 +3888,7 @@
   # It is necessary for linking the library.
   
   # The name that we can dlopen(3).
  -dlname='$dlname'
  +dlname='$tdlname'
   
   # Names of this library.
   library_names='$library_names'
  @@ -3119,16 +3907,23 @@
   # Is this an already installed library?
   installed=$installed
   
  +# Files to dlopen/dlpreopen
  +dlopen='$dlfiles'
  +dlpreopen='$dlprefiles'
  +
   # Directory that this library needs to be installed in:
  -libdir='$install_libdir'\
  -"
  +libdir='$install_libdir'"
  +	  if test "$installed" = no && test $need_relink = yes; then
  +	    $echo >> $output "\
  +relink_command=\"$relink_command\""
  +	  fi
   	done
         fi
   
         # Do a symbolic link so that the libtool archive can be found in
         # LD_LIBRARY_PATH before the program is installed.
         $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)"
  -      $run eval "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" || exit $?
  +      $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $?
         ;;
       esac
       exit 0
  @@ -3140,10 +3935,12 @@
   
       # There may be an optional sh(1) argument at the beginning of
       # install_prog (especially on Windows NT).
  -    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || test "$nonopt" = ./shtool;then
  +    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
  +       # Allow the use of GNU shtool's install command.
  +       $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then
         # Aesthetically quote it.
         arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"`
  -      case "$arg" in
  +      case $arg in
         *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
   	arg="\"$arg\""
   	;;
  @@ -3159,7 +3956,7 @@
       # The real first argument should be the name of the installation program.
       # Aesthetically quote it.
       arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
  -    case "$arg" in
  +    case $arg in
       *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
         arg="\"$arg\""
         ;;
  @@ -3182,7 +3979,7 @@
   	continue
         fi
   
  -      case "$arg" in
  +      case $arg in
         -d) isdir=yes ;;
         -f) prev="-f" ;;
         -g) prev="-g" ;;
  @@ -3207,7 +4004,7 @@
   
         # Aesthetically quote the argument.
         arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
  -      case "$arg" in
  +      case $arg in
         *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
   	arg="\"$arg\""
   	;;
  @@ -3258,11 +4055,11 @@
   	exit 1
         fi
       fi
  -    case "$destdir" in
  +    case $destdir in
       [\\/]* | [A-Za-z]:[\\/]*) ;;
       *)
         for file in $files; do
  -	case "$file" in
  +	case $file in
   	*.lo) ;;
   	*)
   	  $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2
  @@ -3284,8 +4081,8 @@
       for file in $files; do
   
         # Do each installation.
  -      case "$file" in
  -      *.a | *.lib)
  +      case $file in
  +      *.$libext)
   	# Do the static libraries later.
   	staticlibs="$staticlibs $file"
   	;;
  @@ -3301,8 +4098,9 @@
   
   	library_names=
   	old_library=
  +	relink_command=
   	# If there is no directory component, then add one.
  -	case "$file" in
  +	case $file in
   	*/* | *\\*) . $file ;;
   	*) . ./$file ;;
   	esac
  @@ -3321,10 +4119,20 @@
   	  esac
   	fi
   
  -	dir="`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/"
  +	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/
   	test "X$dir" = "X$file/" && dir=
   	dir="$dir$objdir"
   
  +	if test -n "$relink_command"; then
  +	  $echo "$modename: warning: relinking \`$file'" 1>&2
  +	  $show "$relink_command"
  +	  if $run eval "$relink_command"; then :
  +	  else
  +	    $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
  +	    continue
  +	  fi
  +	fi
  +
   	# See the names of the shared library.
   	set dummy $library_names
   	if test -n "$2"; then
  @@ -3332,9 +4140,16 @@
   	  shift
   	  shift
   
  +	  srcname="$realname"
  +	  test -n "$relink_command" && srcname="$realname"T
  +
   	  # Install the shared library and build the symlinks.
  -	  $show "$install_prog $dir/$realname $destdir/$realname"
  -	  $run eval "$install_prog $dir/$realname $destdir/$realname" || exit $?
  +	  $show "$install_prog $dir/$srcname $destdir/$realname"
  +	  $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $?
  +	  if test -n "$stripme" && test -n "$striplib"; then
  +	    $show "$striplib $destdir/$realname"
  +	    $run eval "$striplib $destdir/$realname" || exit $?
  +	  fi
   
   	  if test $# -gt 0; then
   	    # Delete the old symlinks, and create new ones.
  @@ -3381,11 +4196,11 @@
   	fi
   
   	# Deduce the name of the destination old-style object file.
  -	case "$destfile" in
  +	case $destfile in
   	*.lo)
   	  staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"`
   	  ;;
  -	*.o | *.obj)
  +	*.$objext)
   	  staticdest="$destfile"
   	  destfile=
   	  ;;
  @@ -3424,39 +4239,46 @@
   
   	# Do a test to see if this is really a libtool program.
   	if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
  -	  link_against_libtool_libs=
  +	  notinst_deplibs=
   	  relink_command=
   
   	  # If there is no directory component, then add one.
  -	  case "$file" in
  +	  case $file in
   	  */* | *\\*) . $file ;;
   	  *) . ./$file ;;
   	  esac
   
   	  # Check the variables that should have been set.
  -	  if test -z "$link_against_libtool_libs"; then
  +	  if test -z "$notinst_deplibs"; then
   	    $echo "$modename: invalid libtool wrapper script \`$file'" 1>&2
   	    exit 1
   	  fi
   
   	  finalize=yes
  -	  for lib in $link_against_libtool_libs; do
  +	  for lib in $notinst_deplibs; do
   	    # Check to see that each library is installed.
   	    libdir=
   	    if test -f "$lib"; then
   	      # If there is no directory component, then add one.
  -	      case "$lib" in
  +	      case $lib in
   	      */* | *\\*) . $lib ;;
   	      *) . ./$lib ;;
   	      esac
   	    fi
  -	    libfile="$libdir/`$echo "X$lib" | $Xsed -e 's%^.*/%%g'`"
  +	    libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
   	    if test -n "$libdir" && test ! -f "$libfile"; then
   	      $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2
   	      finalize=no
   	    fi
   	  done
   
  +	  relink_command=
  +	  # If there is no directory component, then add one.
  +	  case $file in
  +	  */* | *\\*) . $file ;;
  +	  *) . ./$file ;;
  +	  esac
  +
   	  outputname=
   	  if test "$fast_install" = no && test -n "$relink_command"; then
   	    if test "$finalize" = yes && test -z "$run"; then
  @@ -3468,6 +4290,7 @@
   		$echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2
   		continue
   	      fi
  +	      file=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
   	      outputname="$tmpdir/$file"
   	      # Replace the output file specification.
   	      relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
  @@ -3489,6 +4312,23 @@
   	  fi
   	fi
   
  +	# remove .exe since cygwin /usr/bin/install will append another
  +	# one anyways
  +	case $install_prog,$host in
  +	/usr/bin/install*,*cygwin*)
  +	  case $file:$destfile in
  +	  *.exe:*.exe)
  +	    # this is ok
  +	    ;;
  +	  *.exe:*)
  +	    destfile=$destfile.exe
  +	    ;;
  +	  *:*.exe)
  +	    destfile=`echo $destfile | sed -e 's,.exe$,,'`
  +	    ;;
  +	  esac
  +	  ;;
  +	esac
   	$show "$install_prog$stripme $file $destfile"
   	$run eval "$install_prog\$stripme \$file \$destfile" || exit $?
   	test -n "$outputname" && ${rm}r "$tmpdir"
  @@ -3505,6 +4345,11 @@
         $show "$install_prog $file $oldlib"
         $run eval "$install_prog \$file \$oldlib" || exit $?
   
  +      if test -n "$stripme" && test -n "$striplib"; then
  +	$show "$old_striplib $oldlib"
  +	$run eval "$old_striplib $oldlib" || exit $?
  +      fi
  +
         # Do each command in the postinstall commands.
         eval cmds=\"$old_postinstall_cmds\"
         IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
  @@ -3523,7 +4368,7 @@
       if test -n "$current_libdirs"; then
         # Maybe just do a dry run.
         test -n "$run" && current_libdirs=" -n$current_libdirs"
  -      exit 0 #$current_libdirs
  +      exec $SHELL $0 --finish$current_libdirs
         exit 1
       fi
   
  @@ -3565,7 +4410,7 @@
       fi
   
       # Exit here if they wanted silent mode.
  -    test "$show" = : && exit 0
  +    test "$show" = ":" && exit 0
   
       echo "----------------------------------------------------------------------"
       echo "Libraries have been installed in:"
  @@ -3575,7 +4420,7 @@
       echo
       echo "If you ever happen to want to link against installed libraries"
       echo "in a given directory, LIBDIR, you must either use libtool, and"
  -    echo "specify the full pathname of the library, or use \`-LLIBDIR'"
  +    echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
       echo "flag during linking and do at least one of the following:"
       if test -n "$shlibpath_var"; then
         echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
  @@ -3625,7 +4470,7 @@
         fi
   
         dir=
  -      case "$file" in
  +      case $file in
         *.la)
   	# Check to see that this really is a libtool archive.
   	if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
  @@ -3640,7 +4485,7 @@
   	library_names=
   
   	# If there is no directory component, then add one.
  -	case "$file" in
  +	case $file in
   	*/* | *\\*) . $file ;;
   	*) . ./$file ;;
   	esac
  @@ -3695,13 +4540,13 @@
       args=
       for file
       do
  -      case "$file" in
  +      case $file in
         -*) ;;
         *)
   	# Do a test to see if this is really a libtool program.
   	if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
   	  # If there is no directory component, then add one.
  -	  case "$file" in
  +	  case $file in
   	  */* | *\\*) . $file ;;
   	  *) . ./$file ;;
   	  esac
  @@ -3718,8 +4563,8 @@
   
       if test -z "$run"; then
         if test -n "$shlibpath_var"; then
  -        # Export the shlibpath_var.
  -        eval "export $shlibpath_var"
  +	# Export the shlibpath_var.
  +	eval "export $shlibpath_var"
         fi
   
         # Restore saved enviroment variables
  @@ -3738,23 +4583,30 @@
       else
         # Display what would be done.
         if test -n "$shlibpath_var"; then
  -        eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
  -        $echo "export $shlibpath_var"
  +	eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
  +	$echo "export $shlibpath_var"
         fi
         $echo "$cmd$args"
         exit 0
       fi
       ;;
   
  -  # libtool uninstall mode
  -  uninstall)
  -    modename="$modename: uninstall"
  +  # libtool clean and uninstall mode
  +  clean | uninstall)
  +    modename="$modename: $mode"
       rm="$nonopt"
       files=
  +    rmforce=
  +    exit_status=0
   
  +    # This variable tells wrapper scripts just to set variables rather
  +    # than running their programs.
  +    libtool_install_magic="$magic"
  +
       for arg
       do
  -      case "$arg" in
  +      case $arg in
  +      -f) rm="$rm $arg"; rmforce=yes ;;
         -*) rm="$rm $arg" ;;
         *) files="$files $arg" ;;
         esac
  @@ -3766,14 +4618,42 @@
         exit 1
       fi
   
  +    rmdirs=
  +
       for file in $files; do
         dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
  -      test "X$dir" = "X$file" && dir=.
  +      if test "X$dir" = "X$file"; then
  +	dir=.
  +	objdir="$objdir"
  +      else
  +	objdir="$dir/$objdir"
  +      fi
         name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
  +      test $mode = uninstall && objdir="$dir"
  +
  +      # Remember objdir for removal later, being careful to avoid duplicates
  +      if test $mode = clean; then
  +	case " $rmdirs " in
  +	  *" $objdir "*) ;;
  +	  *) rmdirs="$rmdirs $objdir" ;;
  +	esac
  +      fi
  +
  +      # Don't error if the file doesn't exist and rm -f was used.
  +      if (test -L "$file") >/dev/null 2>&1 \
  +        || (test -h "$file") >/dev/null 2>&1 \
  +	|| test -f "$file"; then
  +        :
  +      elif test -d "$file"; then
  +        exit_status=1
  +	continue
  +      elif test "$rmforce" = yes; then
  +        continue
  +      fi
   
         rmfiles="$file"
   
  -      case "$name" in
  +      case $name in
         *.la)
   	# Possibly a libtool archive, so verify it.
   	if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
  @@ -3781,38 +4661,43 @@
   
   	  # Delete the libtool libraries and symlinks.
   	  for n in $library_names; do
  -	    rmfiles="$rmfiles $dir/$n"
  +	    rmfiles="$rmfiles $objdir/$n"
   	  done
  -	  test -n "$old_library" && rmfiles="$rmfiles $dir/$old_library"
  -
  -	  $show "$rm $rmfiles"
  -	  $run $rm $rmfiles
  +	  test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
  +	  test $mode = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
   
  -	  if test -n "$library_names"; then
  -	    # Do each command in the postuninstall commands.
  -	    eval cmds=\"$postuninstall_cmds\"
  -	    IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
  -	    for cmd in $cmds; do
  +	  if test $mode = uninstall; then
  +	    if test -n "$library_names"; then
  +	      # Do each command in the postuninstall commands.
  +	      eval cmds=\"$postuninstall_cmds\"
  +	      IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
  +	      for cmd in $cmds; do
  +		IFS="$save_ifs"
  +		$show "$cmd"
  +		$run eval "$cmd"
  +		if test $? != 0 && test "$rmforce" != yes; then
  +		  exit_status=1
  +		fi
  +	      done
   	      IFS="$save_ifs"
  -	      $show "$cmd"
  -	      $run eval "$cmd"
  -	    done
  -	    IFS="$save_ifs"
  -	  fi
  +	    fi
   
  -	  if test -n "$old_library"; then
  -	    # Do each command in the old_postuninstall commands.
  -	    eval cmds=\"$old_postuninstall_cmds\"
  -	    IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
  -	    for cmd in $cmds; do
  +	    if test -n "$old_library"; then
  +	      # Do each command in the old_postuninstall commands.
  +	      eval cmds=\"$old_postuninstall_cmds\"
  +	      IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
  +	      for cmd in $cmds; do
  +		IFS="$save_ifs"
  +		$show "$cmd"
  +		$run eval "$cmd"
  +		if test $? != 0 && test "$rmforce" != yes; then
  +		  exit_status=1
  +		fi
  +	      done
   	      IFS="$save_ifs"
  -	      $show "$cmd"
  -	      $run eval "$cmd"
  -	    done
  -	    IFS="$save_ifs"
  +	    fi
  +	    # FIXME: should reinstall the best remaining shared library.
   	  fi
  -
  -	  # FIXME: should reinstall the best remaining shared library.
   	fi
   	;;
   
  @@ -3821,17 +4706,35 @@
   	  oldobj=`$echo "X$name" | $Xsed -e "$lo2o"`
   	  rmfiles="$rmfiles $dir/$oldobj"
   	fi
  -	$show "$rm $rmfiles"
  -	$run $rm $rmfiles
   	;;
   
         *)
  -	$show "$rm $rmfiles"
  -	$run $rm $rmfiles
  +	# Do a test to see if this is a libtool program.
  +	if test $mode = clean &&
  +	   (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
  +	  relink_command=
  +	  . $dir/$file
  +
  +	  rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
  +	  if test "$fast_install" = yes && test -n "$relink_command"; then
  +	    rmfiles="$rmfiles $objdir/lt-$name"
  +	  fi
  +	fi
   	;;
         esac
  +      $show "$rm $rmfiles"
  +      $run $rm $rmfiles || exit_status=1
       done
  -    exit 0
  +
  +    # Try to remove the ${objdir}s in the directories where we deleted files
  +    for dir in $rmdirs; do
  +      if test -d "$dir"; then
  +	$show "rmdir $dir"
  +	$run rmdir $dir >/dev/null 2>&1
  +      fi
  +    done
  +
  +    exit $exit_status
       ;;
   
     "")
  @@ -3847,7 +4750,7 @@
   fi # test -z "$show_help"
   
   # We need to display help for each of the modes.
  -case "$mode" in
  +case $mode in
   "") $echo \
   "Usage: $modename [OPTION]... [MODE-ARG]...
   
  @@ -3866,6 +4769,7 @@
   
   MODE must be one of the following:
   
  +      clean           remove files from the build directory
         compile         compile a source file into a libtool object
         execute         automatically set library path, then run a program
         finish          complete the installation of libtool libraries
  @@ -3878,6 +4782,20 @@
     exit 0
     ;;
   
  +clean)
  +  $echo \
  +"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
  +
  +Remove files from the build directory.
  +
  +RM is the name of the program to use to delete files associated with each FILE
  +(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
  +to RM.
  +
  +If FILE is a libtool library, object or program, all the files associated
  +with it are deleted. Otherwise, only FILE itself is deleted using RM."
  +  ;;
  +
   compile)
     $echo \
   "Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
  @@ -3887,6 +4805,8 @@
   This mode accepts the following additional options:
   
     -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
  +  -prefer-pic       try to building PIC objects only
  +  -prefer-non-pic   try to building non-PIC objects only
     -static           always build a \`.o' file suitable for static linking
   
   COMPILE-COMMAND is a command to be used in creating a \`standard' object file
  @@ -3966,6 +4886,8 @@
     -LLIBDIR          search LIBDIR for required installed libraries
     -lNAME            OUTPUT-FILE requires the installed library libNAME
     -module           build a library that can dlopened
  +  -no-fast-install  disable the fast-install mode
  +  -no-install       link a not-installable executable
     -no-undefined     declare that a library does not refer to external symbols
     -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
     -release RELEASE  specify package release information
  Index: ossp-pkg/l2/shtool
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 shtool
  --- ossp-pkg/l2/shtool	2001/05/21 19:29:01	1.2
  +++ ossp-pkg/l2/shtool	2001/08/15 07:49:59	1.3
  @@ -6,7 +6,7 @@
   ##  See http://www.gnu.org/software/shtool/ for more information.
   ##  See ftp://ftp.gnu.org/gnu/shtool/ for latest version.
   ##
  -##  Version:  1.5.3 (19-Apr-2001)
  +##  Version:  1.5.4 (14-Jun-2001)
   ##  Contents: all available modules
   ##
   
  @@ -63,11 +63,11 @@
       exit 1
   fi
   if [ ".$1" = ".-h" -o ".$1" = ".--help" ]; then
  -    echo "This is GNU shtool, version 1.5.3 (19-Apr-2001)"
  +    echo "This is GNU shtool, version 1.5.4 (14-Jun-2001)"
       echo "Copyright (c) 1994-2001 Ralf S. Engelschall <rse@engelschall.com>"
       echo "Report bugs to <bug-shtool@gnu.org>"
       echo ''
  -    echo "Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]" 
  +    echo "Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]"
       echo ''
       echo 'Available global <options>:'
       echo '  -v, --version   display shtool version information'
  @@ -101,7 +101,7 @@
       exit 0
   fi
   if [ ".$1" = ".-v" -o ".$1" = ."--version" ]; then
  -    echo "GNU shtool 1.5.3 (19-Apr-2001)"
  +    echo "GNU shtool 1.5.4 (14-Jun-2001)"
       exit 0
   fi
   if [ ".$1" = ".-r" -o ".$1" = ."--recreate" ]; then
  @@ -491,7 +491,7 @@
       fi
       
       #   determine terminal bold sequence
  -    term_bold='' 
  +    term_bold=''
       term_norm=''
       if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[Bb]'`" != . ]; then
           case $TERM in
  @@ -542,7 +542,7 @@
       
       #   determine user name
       username=''
  -    if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[uU]'`" != . ]; then
  +    if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[uUgG]'`" != . ]; then
           username="$LOGNAME"
           if [ ".$username" = . ]; then
               username="$USER"
  @@ -584,8 +584,38 @@
           fi
       fi
       
  -    #   determine host name
  +    #   determine (primary) group id
  +    groupid=''
  +    if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[gG]'`" != . ]; then
  +        groupid=`egrep "^${username}:" /etc/passwd 2>/dev/null | \
  +                 sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
  +        if [ ".$groupid" = . ]; then
  +            groupid=`(ypcat passwd) 2>/dev/null | egrep "^${username}:" | \
  +                     sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
  +            if [ ".$groupid" = . ]; then
  +                groupid='?'
  +            fi
  +        fi
  +    fi
  +    
  +    #   determine (primary) group name
  +    groupname=''
  +    if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%g'`" != . ]; then
  +        groupname=`egrep "^[^:]*:[^:]*:${groupid}:" /etc/group 2>/dev/null | \
  +                   sed -e 's/:.*$//'`
  +        if [ ".$groupname" = . ]; then
  +            groupname=`(ypcat group) 2>/dev/null | \
  +                       egrep "^[^:]*:[^:]*:${groupid}:" | \
  +                       sed -e 's/:.*$//'`
  +            if [ ".$groupname" = . ]; then
  +                groupname='?'
  +            fi
  +        fi
  +    fi
  +    
  +    #   determine host and domain name
       hostname=''
  +    domainname=''
       if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%h'`" != . ]; then
           hostname="`(uname -n) 2>/dev/null |\
                      awk '{ printf("%s", $1); }'`"
  @@ -603,9 +633,6 @@
                   ;;
           esac
       fi
  -    
  -    #   determine domain name
  -    domainname=''
       if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%d'`" != . ]; then
           if [ ".$domainname" = . ]; then
               if [ -f /etc/resolv.conf ]; then
  @@ -665,6 +692,8 @@
                     -e "s/%b/${term_norm}/g" \
                     -e "s/%u/${username}/g" \
                     -e "s/%U/${userid}/g" \
  +                  -e "s/%g/${groupname}/g" \
  +                  -e "s/%G/${groupid}/g" \
                     -e "s/%h/${hostname}/g" \
                     -e "s/%d/${domainname}/g" \
                     -e "s/%D/${time_day}/g" \
  @@ -1020,7 +1049,7 @@
       ##  Originally written for shtool
       ##
       
  -    #   determine source(s) and destination 
  +    #   determine source(s) and destination
       argc=$#
       srcs=""
       while [ $# -gt 1 ]; do
  @@ -2449,7 +2478,7 @@
               echo dummy | awk '{ printf("new version: "); }'
               read triple
               case $triple in
  -                [0-9]*.[0-9]*[sabp.][0-9]* ) 
  +                [0-9]*.[0-9]*[sabp.][0-9]* )
                       ;;
                   * ) echo "$msgprefix:Error: invalid version string entered: \`$triple'" 1>&2
                       continue
  @@ -2533,7 +2562,7 @@
                   exit 1
                   ;;
           esac
  -    else 
  +    else
           #   update the version file
       
           #   pre-generate various strings
  @@ -2545,7 +2574,7 @@
           vGNU="${name} ${triple} (${tim})"
           vWeb="${name}/${triple}"
           vSCCS="@(#)${name} ${triple} (${tim})"
  -        vRCS="\$Id: shtool,v 1.2 2001/05/21 19:29:01 rse Exp ${name} ${triple} (${tim}) \$"
  +        vRCS="\$Id: shtool,v 1.3 2001/08/15 07:49:59 rse Exp ${name} ${triple} (${tim}) \$"
       
           #   determine string out of filename
           #   (do NOT try to optimize this in any way because of portability)
  @@ -2556,7 +2585,7 @@
           #   generate uppercase prefix
           prefixupper=`echo $prefix |\
                        tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
  -        
  +    
           #   create the version file according the the selected language
           echo "new version: ${vLong}"
       

From ossp-cvs-owner@ossp.org  Wed Aug 15 09:52:46 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7F7qja03944; Wed, 15 Aug 2001 09:52:45 +0200 (CEST)
Date: Wed, 15 Aug 2001 09:52:45 +0200 (CEST)
Message-Id: <200108150752.f7F7qja03944@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 configure configure.ac configure.in l2_config....
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   15-Aug-2001 09:52:45
  Branch: HEAD                             Handle: 19700101010000997858364

  Added files:
    ossp-pkg/l2             configure.ac
  Modified files:
    ossp-pkg/l2             configure l2_config.h.in
  Removed files:
    ossp-pkg/l2             configure.in

  Log:
    Rename configure.in to configure.ac

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-pkg/l2/configure
    1.1         +85 -0      ossp-pkg/l2/configure.ac
    NONE        +0  -85     ossp-pkg/l2/configure.in
    1.3         +4  -1      ossp-pkg/l2/l2_config.h.in
  ____________________________________________________________________________

  Index: ossp-pkg/l2/configure
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 configure
  --- ossp-pkg/l2/configure	2001/08/15 07:49:59	1.4
  +++ ossp-pkg/l2/configure	2001/08/15 07:52:44	1.5
  @@ -1,5 +1,5 @@
   #! /bin/sh
  -# From configure.in 1.0.
  +# From configure.ac 1.0.
   # Guess values for system-dependent variables and create Makefiles.
   # Generated by Autoconf 2.52.
   #
  Index: ossp-pkg/l2/configure.ac
  ============================================================
  $ cvs update -p -r1.1 configure.ac
  dnl ##
  dnl ##  L2 - OSSP Logging Library
  dnl ##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  dnl ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  dnl ##
  dnl ##  This file is part of OSSP L2, a flexible logging library which
  dnl ##  can be found at http://www.ossp.com/pkg/l2/.
  dnl ##
  dnl ##  Permission to use, copy, modify, and distribute this software for
  dnl ##  any purpose with or without fee is hereby granted, provided that
  dnl ##  the above copyright notice and this permission notice appear in all
  dnl ##  copies.
  dnl ##
  dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  dnl ##  SUCH DAMAGE.
  dnl ##
  dnl ##  configure.in: Autoconf specification
  dnl ##
  
  AC_PREREQ(2.13)dnl
  AC_REVISION(1.0)
  
  AC_INIT(README)
  AC_HEADLINE(dnl
  L2, Logging Library, dnl
  L2_VERSION, l2_version.c, dnl
  [Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)])
  AC_CONFIG_HEADER(l2_config.h)
  AC_PREFIX_DEFAULT(/usr/local)
  AC_PLATFORM(PLATFORM)
  echo ""
  
  AC_MSG_CHECKING(whether to build C++ library)
  LIBL2XX_LA=""
  L2_TESTXX=""
  L2XX_3=""
  TEST_CXX=""
  INSTALL_CXX=""
  UNINSTALL_CXX=""
  AC_ARG_WITH(cxx,dnl
  [  --with-cxx              build C++ library (default=no)],[
      LIBL2XX_LA="libl2++.la"
      L2_TESTXX="l2_test++"
      L2XX_3="l2++.3"
      TEST_CXX=test-cxx
      INSTALL_CXX=install-cxx
      UNINSTALL_CXX=uninstall-cxx
  ],[
      with_cxx=no
  ])dnl
  AC_MSG_RESULT([$with_cxx])
  AC_SUBST(LIBL2XX_LA)
  AC_SUBST(L2_TESTXX)
  AC_SUBST(L2XX_3)
  AC_SUBST(TEST_CXX)
  AC_SUBST(INSTALL_CXX)
  AC_SUBST(UNINSTALL_CXX)
  
  AC_SET_MAKE
  AC_PROG_CC
  if test ".$with_cxx" = .yes; then
      AC_PROG_CXX
  fi
  AC_PROG_CPP
  AC_CHECK_DEBUGGING
  AC_CONFIGURE_LIBTOOL
  
  AC_OUTPUT(dnl
  Makefile dnl
  l2-config dnl
  ,dnl
  chmod a+x l2-config
  )dnl
  
    Index: ossp-pkg/l2/l2_config.h.in
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2_config.h.in
  --- ossp-pkg/l2/l2_config.h.in	2001/08/15 07:49:59	1.2
  +++ ossp-pkg/l2/l2_config.h.in	2001/08/15 07:52:44	1.3
  @@ -1 +1,4 @@
  -/* l2_config.h.in.  Generated automatically from configure.in by autoheader.  */
  +/* l2_config.h.in.  Generated automatically from configure.ac by autoheader.  */
  +
  +/* Define if you have the <dlfcn.h> header file. */
  +#undef HAVE_DLFCN_H

From ossp-cvs-owner@ossp.org  Wed Aug 15 12:36:07 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7FAa5A24216; Wed, 15 Aug 2001 12:36:05 +0200 (CEST)
Date: Wed, 15 Aug 2001 12:36:05 +0200 (CEST)
Message-Id: <200108151036.f7FAa5A24216@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 LICENSE Makefile.in aclocal.m4 autogen.sh conf...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   15-Aug-2001 12:36:05
  Branch: HEAD                             Handle: 2001081511360300

  Modified files:
    ossp-pkg/l2             LICENSE Makefile.in aclocal.m4 autogen.sh
                            configure.ac l2++.cc l2++.h l2++.pod l2-config.in
                            l2-config.pod l2.h l2.m4 l2.pod l2_ch_buffer.c
                            l2_ch_fd.c l2_ch_file.c l2_ch_filter.c
                            l2_ch_null.c l2_ch_pipe.c l2_ch_prefix.c
                            l2_ch_socket.c l2_ch_syslog.c l2_channel.c l2_p.h
                            l2_stream.c l2_test++.cc l2_test.c

  Log:
    Fix more ossp.com references by replacing with the
    correct domain name ossp.org.

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/l2/LICENSE
    1.9         +1  -1      ossp-pkg/l2/Makefile.in
    1.3         +1  -1      ossp-pkg/l2/aclocal.m4
    1.2         +1  -1      ossp-pkg/l2/autogen.sh
    1.2         +1  -1      ossp-pkg/l2/configure.ac
    1.2         +1  -1      ossp-pkg/l2/l2++.cc
    1.2         +1  -1      ossp-pkg/l2/l2++.h
    1.2         +1  -1      ossp-pkg/l2/l2++.pod
    1.3         +1  -1      ossp-pkg/l2/l2-config.in
    1.3         +1  -1      ossp-pkg/l2/l2-config.pod
    1.8         +1  -1      ossp-pkg/l2/l2.h
    1.3         +1  -1      ossp-pkg/l2/l2.m4
    1.4         +1  -1      ossp-pkg/l2/l2.pod
    1.5         +1  -1      ossp-pkg/l2/l2_ch_buffer.c
    1.4         +1  -1      ossp-pkg/l2/l2_ch_fd.c
    1.7         +1  -1      ossp-pkg/l2/l2_ch_file.c
    1.4         +1  -1      ossp-pkg/l2/l2_ch_filter.c
    1.4         +1  -1      ossp-pkg/l2/l2_ch_null.c
    1.4         +1  -1      ossp-pkg/l2/l2_ch_pipe.c
    1.4         +1  -1      ossp-pkg/l2/l2_ch_prefix.c
    1.4         +1  -1      ossp-pkg/l2/l2_ch_socket.c
    1.6         +1  -1      ossp-pkg/l2/l2_ch_syslog.c
    1.5         +1  -1      ossp-pkg/l2/l2_channel.c
    1.5         +1  -1      ossp-pkg/l2/l2_p.h
    1.5         +1  -1      ossp-pkg/l2/l2_stream.c
    1.3         +1  -1      ossp-pkg/l2/l2_test++.cc
    1.4         +1  -1      ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/LICENSE
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 LICENSE
  --- ossp-pkg/l2/LICENSE	2001/05/10 19:46:01	1.1.1.1
  +++ ossp-pkg/l2/LICENSE	2001/08/15 10:36:03	1.2
  @@ -4,7 +4,7 @@
     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   
     This file is part of OSSP L2, a flexible logging library which
  -  can be found at http://www.ossp.com/pkg/l2/.
  +  can be found at http://www.ossp.org/pkg/l2/.
   
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 Makefile.in
  --- ossp-pkg/l2/Makefile.in	2001/08/15 07:49:59	1.8
  +++ ossp-pkg/l2/Makefile.in	2001/08/15 10:36:03	1.9
  @@ -4,7 +4,7 @@
   ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
   ##  This file is part of OSSP L2, a flexible logging library which
  -##  can be found at http://www.ossp.com/pkg/l2/.
  +##  can be found at http://www.ossp.org/pkg/l2/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 aclocal.m4
  --- ossp-pkg/l2/aclocal.m4	2001/08/15 07:49:59	1.2
  +++ ossp-pkg/l2/aclocal.m4	2001/08/15 10:36:03	1.3
  @@ -4,7 +4,7 @@
   dnl ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   dnl ##
   dnl ##  This file is part of OSSP L2, a flexible logging library which
  -dnl ##  can be found at http://www.ossp.com/pkg/l2/.
  +dnl ##  can be found at http://www.ossp.org/pkg/l2/.
   dnl ##
   dnl ##  Permission to use, copy, modify, and distribute this software for
   dnl ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/autogen.sh
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 autogen.sh
  --- ossp-pkg/l2/autogen.sh	2001/08/15 07:49:59	1.1
  +++ ossp-pkg/l2/autogen.sh	2001/08/15 10:36:03	1.2
  @@ -5,7 +5,7 @@
   ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
   ##  This file is part of OSSP L2, a flexible logging library which
  -##  can be found at http://www.ossp.com/pkg/l2/.
  +##  can be found at http://www.ossp.org/pkg/l2/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/configure.ac
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 configure.ac
  --- ossp-pkg/l2/configure.ac	2001/08/15 07:52:44	1.1
  +++ ossp-pkg/l2/configure.ac	2001/08/15 10:36:03	1.2
  @@ -4,7 +4,7 @@
   dnl ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   dnl ##
   dnl ##  This file is part of OSSP L2, a flexible logging library which
  -dnl ##  can be found at http://www.ossp.com/pkg/l2/.
  +dnl ##  can be found at http://www.ossp.org/pkg/l2/.
   dnl ##
   dnl ##  Permission to use, copy, modify, and distribute this software for
   dnl ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2++.cc
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 l2++.cc
  --- ossp-pkg/l2/l2++.cc	2001/05/10 19:46:01	1.1.1.1
  +++ ossp-pkg/l2/l2++.cc	2001/08/15 10:36:03	1.2
  @@ -4,7 +4,7 @@
   **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.com/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2++.h
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 l2++.h
  --- ossp-pkg/l2/l2++.h	2001/05/10 19:46:01	1.1.1.1
  +++ ossp-pkg/l2/l2++.h	2001/08/15 10:36:03	1.2
  @@ -4,7 +4,7 @@
   **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.com/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2++.pod
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 l2++.pod
  --- ossp-pkg/l2/l2++.pod	2001/05/11 19:50:52	1.1
  +++ ossp-pkg/l2/l2++.pod	2001/08/15 10:36:03	1.2
  @@ -4,7 +4,7 @@
   ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
   ##  This file is part of OSSP L2, a flexible logging library which
  -##  can be found at http://www.ossp.com/pkg/l2/.
  +##  can be found at http://www.ossp.org/pkg/l2/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2-config.in
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2-config.in
  --- ossp-pkg/l2/l2-config.in	2001/05/11 19:50:52	1.2
  +++ ossp-pkg/l2/l2-config.in	2001/08/15 10:36:03	1.3
  @@ -5,7 +5,7 @@
   ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
   ##  This file is part of OSSP L2, a flexible logging library which
  -##  can be found at http://www.ossp.com/pkg/l2/.
  +##  can be found at http://www.ossp.org/pkg/l2/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2-config.pod
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2-config.pod
  --- ossp-pkg/l2/l2-config.pod	2001/05/11 19:50:52	1.2
  +++ ossp-pkg/l2/l2-config.pod	2001/08/15 10:36:03	1.3
  @@ -4,7 +4,7 @@
   ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
   ##  This file is part of OSSP L2, a flexible logging library which
  -##  can be found at http://www.ossp.com/pkg/l2/.
  +##  can be found at http://www.ossp.org/pkg/l2/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2.h
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 l2.h
  --- ossp-pkg/l2/l2.h	2001/05/26 08:04:12	1.7
  +++ ossp-pkg/l2/l2.h	2001/08/15 10:36:03	1.8
  @@ -4,7 +4,7 @@
   **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.com/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2.m4
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2.m4
  --- ossp-pkg/l2/l2.m4	2001/05/11 18:42:44	1.2
  +++ ossp-pkg/l2/l2.m4	2001/08/15 10:36:03	1.3
  @@ -4,7 +4,7 @@
   dnl ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   dnl ##
   dnl ##  This file is part of OSSP L2, a flexible logging library which
  -dnl ##  can be found at http://www.ossp.com/pkg/l2/.
  +dnl ##  can be found at http://www.ossp.org/pkg/l2/.
   dnl ##
   dnl ##  Permission to use, copy, modify, and distribute this software for
   dnl ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2.pod
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 l2.pod
  --- ossp-pkg/l2/l2.pod	2001/05/11 19:50:52	1.3
  +++ ossp-pkg/l2/l2.pod	2001/08/15 10:36:03	1.4
  @@ -4,7 +4,7 @@
   ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
   ##  This file is part of OSSP L2, a flexible logging library which
  -##  can be found at http://www.ossp.com/pkg/l2/.
  +##  can be found at http://www.ossp.org/pkg/l2/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2_ch_buffer.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 l2_ch_buffer.c
  --- ossp-pkg/l2/l2_ch_buffer.c	2001/05/24 09:40:28	1.4
  +++ ossp-pkg/l2/l2_ch_buffer.c	2001/08/15 10:36:03	1.5
  @@ -4,7 +4,7 @@
   **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.com/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2_ch_fd.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 l2_ch_fd.c
  --- ossp-pkg/l2/l2_ch_fd.c	2001/05/26 08:02:55	1.3
  +++ ossp-pkg/l2/l2_ch_fd.c	2001/08/15 10:36:03	1.4
  @@ -4,7 +4,7 @@
   **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.com/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2_ch_file.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 l2_ch_file.c
  --- ossp-pkg/l2/l2_ch_file.c	2001/05/24 09:40:28	1.6
  +++ ossp-pkg/l2/l2_ch_file.c	2001/08/15 10:36:03	1.7
  @@ -4,7 +4,7 @@
   **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.com/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2_ch_filter.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 l2_ch_filter.c
  --- ossp-pkg/l2/l2_ch_filter.c	2001/05/26 08:02:55	1.3
  +++ ossp-pkg/l2/l2_ch_filter.c	2001/08/15 10:36:03	1.4
  @@ -4,7 +4,7 @@
   **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.com/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2_ch_null.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 l2_ch_null.c
  --- ossp-pkg/l2/l2_ch_null.c	2001/05/26 08:02:55	1.3
  +++ ossp-pkg/l2/l2_ch_null.c	2001/08/15 10:36:03	1.4
  @@ -4,7 +4,7 @@
   **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.com/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2_ch_pipe.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 l2_ch_pipe.c
  --- ossp-pkg/l2/l2_ch_pipe.c	2001/05/26 08:02:55	1.3
  +++ ossp-pkg/l2/l2_ch_pipe.c	2001/08/15 10:36:03	1.4
  @@ -4,7 +4,7 @@
   **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.com/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2_ch_prefix.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 l2_ch_prefix.c
  --- ossp-pkg/l2/l2_ch_prefix.c	2001/05/26 08:02:55	1.3
  +++ ossp-pkg/l2/l2_ch_prefix.c	2001/08/15 10:36:03	1.4
  @@ -4,7 +4,7 @@
   **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.com/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2_ch_socket.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 l2_ch_socket.c
  --- ossp-pkg/l2/l2_ch_socket.c	2001/05/26 08:02:55	1.3
  +++ ossp-pkg/l2/l2_ch_socket.c	2001/08/15 10:36:03	1.4
  @@ -4,7 +4,7 @@
   **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.com/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2_ch_syslog.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 l2_ch_syslog.c
  --- ossp-pkg/l2/l2_ch_syslog.c	2001/05/26 08:04:12	1.5
  +++ ossp-pkg/l2/l2_ch_syslog.c	2001/08/15 10:36:03	1.6
  @@ -4,7 +4,7 @@
   **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.com/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2_channel.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 l2_channel.c
  --- ossp-pkg/l2/l2_channel.c	2001/05/24 09:40:28	1.4
  +++ ossp-pkg/l2/l2_channel.c	2001/08/15 10:36:03	1.5
  @@ -4,7 +4,7 @@
   **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.com/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2_p.h
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 l2_p.h
  --- ossp-pkg/l2/l2_p.h	2001/05/24 09:40:28	1.4
  +++ ossp-pkg/l2/l2_p.h	2001/08/15 10:36:03	1.5
  @@ -3,7 +3,7 @@
   **  Copyright (c) 2001 Cable & Wireless Deutschland GmbH
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.com/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2_stream.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 l2_stream.c
  --- ossp-pkg/l2/l2_stream.c	2001/05/26 08:02:55	1.4
  +++ ossp-pkg/l2/l2_stream.c	2001/08/15 10:36:03	1.5
  @@ -4,7 +4,7 @@
   **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.com/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2_test++.cc
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2_test++.cc
  --- ossp-pkg/l2/l2_test++.cc	2001/05/12 07:23:06	1.2
  +++ ossp-pkg/l2/l2_test++.cc	2001/08/15 10:36:03	1.3
  @@ -4,7 +4,7 @@
   **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.com/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/05/17 14:42:23	1.3
  +++ ossp-pkg/l2/l2_test.c	2001/08/15 10:36:03	1.4
  @@ -4,7 +4,7 @@
   **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.com/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that

From ossp-cvs-owner@ossp.org  Thu Aug 16 12:08:13 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7GA89518523; Thu, 16 Aug 2001 12:08:09 +0200 (CEST)
Date: Thu, 16 Aug 2001 12:08:09 +0200 (CEST)
Message-Id: <200108161008.f7GA89518523@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pcre ChangeLog.OSSP Makefile.in autogen.sh config...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   16-Aug-2001 12:08:09
  Branch: HEAD                             Handle: 19700101010000997952887

  Added files:
    ossp-pkg/pcre           autogen.sh config.guess config.sub configure.ac
                            libtool.m4
  Modified files:
    ossp-pkg/pcre           ChangeLog.OSSP Makefile.in configure ltmain.sh
                            shtool
  Removed files:
    ossp-pkg/pcre           configure.in ltconfig

  Log:
    Upgrade GNU autoconf, libtool, shtool.

  Summary:
    Revision    Changes     Path
    1.17        +3  -1      ossp-pkg/pcre/ChangeLog.OSSP
    1.6         +8  -21     ossp-pkg/pcre/Makefile.in
    1.1         +74 -0      ossp-pkg/pcre/autogen.sh
    1.1         +1371 -0    ossp-pkg/pcre/config.guess
    1.1         +1362 -0    ossp-pkg/pcre/config.sub
    1.11        +6492 -790  ossp-pkg/pcre/configure
    1.1         +0  -0      ossp-pkg/pcre/configure.ac
    NONE        +0  -75     ossp-pkg/pcre/configure.in
    1.1         +3397 -0    ossp-pkg/pcre/libtool.m4
    NONE        +0  -3114   ossp-pkg/pcre/ltconfig
    1.4         +1685 -763  ossp-pkg/pcre/ltmain.sh
    1.8         +5  -258    ossp-pkg/pcre/shtool
  ____________________________________________________________________________

  Index: ossp-pkg/pcre/ChangeLog.OSSP
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 ChangeLog.OSSP
  --- ossp-pkg/pcre/ChangeLog.OSSP	2001/08/11 19:51:49	1.16
  +++ ossp-pkg/pcre/ChangeLog.OSSP	2001/08/16 10:08:06	1.17
  @@ -2,8 +2,10 @@
    OSSP ChangeLog for PCRE
    =======================
   
  - Changes made to OSSP pcre 3.4-2 (29-Aug-2000 to 07-Aug-2001):
  + Changes made to OSSP pcre 3.5 (29-Aug-2000 to 16-Aug-2001):
   
  +  *) Upgraded GNU libtool from 1.3.5 to 1.4
  +  *) Upgraded GNU autoconf from 2.13 to 2.52
     *) Upgraded GNU shtool from 1.5.1 to 1.5.4
    
    Changes made to OSSP pcre 3.4-1 (01-Aug-2000 to 29-Aug-2000):
  Index: ossp-pkg/pcre/Makefile.in
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 Makefile.in
  --- ossp-pkg/pcre/Makefile.in	2000/02/09 16:41:17	1.5
  +++ ossp-pkg/pcre/Makefile.in	2001/08/16 10:08:06	1.6
  @@ -11,8 +11,8 @@
   CC          = @CC@
   CFLAGS      = @CFLAGS@ -I.
   LDFLAGS     = @LDFLAGS@ -L.
  -SHTOOL      = @SHTOOL@
  -LIBTOOL     = @LIBTOOL@
  +SHTOOL      = ./shtool
  +LIBTOOL     = ./libtool
   RM          = rm -f
   
   prefix      = @prefix@
  @@ -83,30 +83,17 @@
   distclean: clean
   	$(RM) -r .libs
   	$(RM) pcre_test pcre_dftables
  -	$(RM) config.cache config.status config.log
  +	$(RM) config.cache config.status config.log config.h
  +	$(RM) libtool
   	$(RM) pcre-config
   	$(RM) Makefile
   
  +realclean: distclean
  +	$(RM) config.sub config.guess
  +	$(RM) configure shtool ltmain.sh libtool.m4
  +
   dist: distclean
   	$(SHTOOL) fixperm *; \
   	$(SHTOOL) tarball -o ossp-pcre-$(PCRE_VERSION)-$(OSSP_REVISION).tar.gz \
   	                  -e 'CVS,\.cvsignore,^\.' -c 'gzip -9' -u pcre -g ossp .
  -
  -update:
  -	@$(RM) ltmain.sh ltconfig shtool
  -	@$(MAKE) $(MFLAGS) ltmain.sh ltconfig shtool configure
  -ltmain.sh:
  -	@F=`libtoolize -n -c -f | grep 'cp.*ltmain.sh' |\
  -	    sed -e 's;[^/]*;;' -e 's; .*;;'`; \
  -	echo "ltmain.sh <-- $$F"; cat $$F |\
  -	sed -e 's:/bin/sh; then:/bin/sh || test "$$nonopt" = ./shtool;then:' \
  -	    -e 's:exec \$$SHELL \$$0 --finish:exit 0 #:' >ltmain.sh
  -ltconfig:
  -	@F=`libtoolize -n -c -f | grep 'cp.*ltconfig' | sed -e 's;[^/]*;;' -e 's; .*;;'`; \
  -	echo "ltconfig <-- $$F"; cp $$F .
  -shtool:
  -	shtoolize -q -o shtool echo mkdir install guessos tarball fixperm
  -configure: configure.in
  -	$(RM) configure
  -	autoconf
   
  Index: ossp-pkg/pcre/autogen.sh
  ============================================================
  $ cvs update -p -r1.1 autogen.sh
  #!/bin/sh
  ##
  ##  L2 - OSSP Logging Library
  ##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  ##
  ##  This file is part of OSSP L2, a flexible logging library which
  ##  can be found at http://www.ossp.org/pkg/l2/.
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  autogen.sh: auto-generate library build environment tools
  ##
  
  #   generator tools version sanity check
  for spec in \
      "autoconf   --version 4 2.52  2.5*" \
      "libtoolize --version 4 1.4   1.4*" \
      "shtoolize  -v        3 1.5.4 1.5.*"
  do
      set -- $spec
      t="$1"
      o="$2"
      p="$3"
      e="$4"
      a="$5"
      v=`($t $o | head -1 | awk "{ print \\\$$p; }") 2>/dev/null`
      if [ ".$v" = . ]; then
          echo "$0:ERROR: unable to determine version of $t" 1>&2
          exit 1
      fi
      eval "${t}_version=\"$v\""
      case "$v" in
          $e )
              ;;
          $a )
              echo "$0:WARNING: $t version $v still accepted, although expected $e." 1>&2
              ;;
          * )
              echo "$0:ERROR: $t version $e expected, but found $v." 1>&2
              ;;
      esac
  done
  
  #   GNU Libtool generation
  echo "GNU Libtool $libtoolize_version -> ltmain.sh, libtool.m4, config.guess, config.sub"
  libtoolize --force --copy >/dev/null 2>&1
  cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
      sed -e 's;[^\`]*\`;;' -e "s;\'.*;;"` libtool.m4
  
  #   GNU Autoconf generation
  echo "GNU Autoconf $autoconf_version -> configure, config.h.in"
  autoconf
  
  #   GNU Shtool generation
  echo "GNU Shtool $shtoolize_version -> shtool"
  shtoolize -q echo install mkdir fixperm tarball
  
  Index: ossp-pkg/pcre/config.guess
  ============================================================
  $ cvs update -p -r1.1 config.guess
  #! /bin/sh
  # Attempt to guess a canonical system name.
  #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
  #   Free Software Foundation, Inc.
  
  timestamp='2001-04-20'
  
  # This file is free software; you can redistribute it and/or modify it
  # under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 2 of the License, or
  # (at your option) any later version.
  #
  # This program is distributed in the hope that it will be useful, but
  # WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  # General Public License for more details.
  #
  # You should have received a copy of the GNU General Public License
  # along with this program; if not, write to the Free Software
  # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  #
  # As a special exception to the GNU General Public License, if you
  # distribute this file as part of a program that contains a
  # configuration script generated by Autoconf, you may include it under
  # the same distribution terms that you use for the rest of that program.
  
  # Written by Per Bothner <bothner@cygnus.com>.
  # Please send patches to <config-patches@gnu.org>.
  #
  # This script attempts to guess a canonical system name similar to
  # config.sub.  If it succeeds, it prints the system name on stdout, and
  # exits with 0.  Otherwise, it exits with 1.
  #
  # The plan is that this can be called by configure scripts if you
  # don't specify an explicit build system type.
  
  me=`echo "$0" | sed -e 's,.*/,,'`
  
  usage="\
  Usage: $0 [OPTION]
  
  Output the configuration name of the system \`$me' is run on.
  
  Operation modes:
    -h, --help         print this help, then exit
    -t, --time-stamp   print date of last modification, then exit
    -v, --version      print version number, then exit
  
  Report bugs and patches to <config-patches@gnu.org>."
  
  version="\
  GNU config.guess ($timestamp)
  
  Originally written by Per Bothner.
  Copyright (C) 1992, 93, 94, 95, 96, 97, 98, 99, 2000
  Free Software Foundation, Inc.
  
  This is free software; see the source for copying conditions.  There is NO
  warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
  
  help="
  Try \`$me --help' for more information."
  
  # Parse command line
  while test $# -gt 0 ; do
    case $1 in
      --time-stamp | --time* | -t )
         echo "$timestamp" ; exit 0 ;;
      --version | -v )
         echo "$version" ; exit 0 ;;
      --help | --h* | -h )
         echo "$usage"; exit 0 ;;
      -- )     # Stop option processing
         shift; break ;;
      - )	# Use stdin as input.
         break ;;
      -* )
         echo "$me: invalid option $1$help" >&2
         exit 1 ;;
      * )
         break ;;
    esac
  done
  
  if test $# != 0; then
    echo "$me: too many arguments$help" >&2
    exit 1
  fi
  
  
  dummy=dummy-$$
  trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15
  
  # CC_FOR_BUILD -- compiler used by this script.
  # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
  # use `HOST_CC' if defined, but it is deprecated.
  
  case $CC_FOR_BUILD,$HOST_CC,$CC in
   ,,)    echo "int dummy(){}" > $dummy.c
  	for c in cc gcc c89 ; do
  	  ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1
  	  if test $? = 0 ; then
  	     CC_FOR_BUILD="$c"; break
  	  fi
  	done
  	rm -f $dummy.c $dummy.o $dummy.rel
  	if test x"$CC_FOR_BUILD" = x ; then
  	  CC_FOR_BUILD=no_compiler_found
  	fi
  	;;
   ,,*)   CC_FOR_BUILD=$CC ;;
   ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
  esac
  
  # This is needed to find uname on a Pyramid OSx when run in the BSD universe.
  # (ghazi@noc.rutgers.edu 8/24/94.)
  if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
  	PATH=$PATH:/.attbin ; export PATH
  fi
  
  UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
  UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
  UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
  UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
  
  # Note: order is significant - the case branches are not exclusive.
  
  case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
      *:NetBSD:*:*)
  	# Netbsd (nbsd) targets should (where applicable) match one or
  	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
  	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
  	# switched to ELF, *-*-netbsd* would select the old
  	# object file format.  This provides both forward
  	# compatibility and a consistent mechanism for selecting the
  	# object file format.
  	# Determine the machine/vendor (is the vendor relevant).
  	case "${UNAME_MACHINE}" in
  	    amiga) machine=m68k-unknown ;;
  	    arm32) machine=arm-unknown ;;
  	    atari*) machine=m68k-atari ;;
  	    sun3*) machine=m68k-sun ;;
  	    mac68k) machine=m68k-apple ;;
  	    macppc) machine=powerpc-apple ;;
  	    hp3[0-9][05]) machine=m68k-hp ;;
  	    ibmrt|romp-ibm) machine=romp-ibm ;;
  	    *) machine=${UNAME_MACHINE}-unknown ;;
  	esac
  	# The Operating System including object format, if it has switched
  	# to ELF recently, or will in the future.
  	case "${UNAME_MACHINE}" in
  	    i386|sparc|amiga|arm*|hp300|mvme68k|vax|atari|luna68k|mac68k|news68k|next68k|pc532|sun3*|x68k)
  		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
  			| grep __ELF__ >/dev/null
  		then
  		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
  		    # Return netbsd for either.  FIX?
  		    os=netbsd
  		else
  		    os=netbsdelf
  		fi
  		;;
  	    *)
  	        os=netbsd
  		;;
  	esac
  	# The OS release
  	release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
  	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
  	# contains redundant information, the shorter form:
  	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
  	echo "${machine}-${os}${release}"
  	exit 0 ;;
      alpha:OSF1:*:*)
  	if test $UNAME_RELEASE = "V4.0"; then
  		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
  	fi
  	# A Vn.n version is a released version.
  	# A Tn.n version is a released field test version.
  	# A Xn.n version is an unreleased experimental baselevel.
  	# 1.2 uses "1.2" for uname -r.
  	cat <<EOF >$dummy.s
  	.data
  \$Lformat:
  	.byte 37,100,45,37,120,10,0	# "%d-%x\n"
  
  	.text
  	.globl main
  	.align 4
  	.ent main
  main:
  	.frame \$30,16,\$26,0
  	ldgp \$29,0(\$27)
  	.prologue 1
  	.long 0x47e03d80 # implver \$0
  	lda \$2,-1
  	.long 0x47e20c21 # amask \$2,\$1
  	lda \$16,\$Lformat
  	mov \$0,\$17
  	not \$1,\$18
  	jsr \$26,printf
  	ldgp \$29,0(\$26)
  	mov 0,\$16
  	jsr \$26,exit
  	.end main
  EOF
  	$CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
  	if test "$?" = 0 ; then
  		case `./$dummy` in
  			0-0)
  				UNAME_MACHINE="alpha"
  				;;
  			1-0)
  				UNAME_MACHINE="alphaev5"
  				;;
  			1-1)
  				UNAME_MACHINE="alphaev56"
  				;;
  			1-101)
  				UNAME_MACHINE="alphapca56"
  				;;
  			2-303)
  				UNAME_MACHINE="alphaev6"
  				;;
  			2-307)
  				UNAME_MACHINE="alphaev67"
  				;;
  		esac
  	fi
  	rm -f $dummy.s $dummy
  	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
  	exit 0 ;;
      Alpha\ *:Windows_NT*:*)
  	# How do we know it's Interix rather than the generic POSIX subsystem?
  	# Should we change UNAME_MACHINE based on the output of uname instead
  	# of the specific Alpha model?
  	echo alpha-pc-interix
  	exit 0 ;;
      21064:Windows_NT:50:3)
  	echo alpha-dec-winnt3.5
  	exit 0 ;;
      Amiga*:UNIX_System_V:4.0:*)
  	echo m68k-unknown-sysv4
  	exit 0;;
      amiga:OpenBSD:*:*)
  	echo m68k-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      *:[Aa]miga[Oo][Ss]:*:*)
  	echo ${UNAME_MACHINE}-unknown-amigaos
  	exit 0 ;;
      arc64:OpenBSD:*:*)
  	echo mips64el-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      arc:OpenBSD:*:*)
  	echo mipsel-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      hkmips:OpenBSD:*:*)
  	echo mips-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      pmax:OpenBSD:*:*)
  	echo mipsel-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      sgi:OpenBSD:*:*)
  	echo mips-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      wgrisc:OpenBSD:*:*)
  	echo mipsel-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      *:OS/390:*:*)
  	echo i370-ibm-openedition
  	exit 0 ;;
      arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
  	echo arm-acorn-riscix${UNAME_RELEASE}
  	exit 0;;
      SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
  	echo hppa1.1-hitachi-hiuxmpp
  	exit 0;;
      Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
  	# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
  	if test "`(/bin/universe) 2>/dev/null`" = att ; then
  		echo pyramid-pyramid-sysv3
  	else
  		echo pyramid-pyramid-bsd
  	fi
  	exit 0 ;;
      NILE*:*:*:dcosx)
  	echo pyramid-pyramid-svr4
  	exit 0 ;;
      sun4H:SunOS:5.*:*)
  	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
  	exit 0 ;;
      sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
  	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
  	exit 0 ;;
      i86pc:SunOS:5.*:*)
  	echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
  	exit 0 ;;
      sun4*:SunOS:6*:*)
  	# According to config.sub, this is the proper way to canonicalize
  	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
  	# it's likely to be more like Solaris than SunOS4.
  	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
  	exit 0 ;;
      sun4*:SunOS:*:*)
  	case "`/usr/bin/arch -k`" in
  	    Series*|S4*)
  		UNAME_RELEASE=`uname -v`
  		;;
  	esac
  	# Japanese Language versions have a version number like `4.1.3-JL'.
  	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
  	exit 0 ;;
      sun3*:SunOS:*:*)
  	echo m68k-sun-sunos${UNAME_RELEASE}
  	exit 0 ;;
      sun*:*:4.2BSD:*)
  	UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
  	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
  	case "`/bin/arch`" in
  	    sun3)
  		echo m68k-sun-sunos${UNAME_RELEASE}
  		;;
  	    sun4)
  		echo sparc-sun-sunos${UNAME_RELEASE}
  		;;
  	esac
  	exit 0 ;;
      aushp:SunOS:*:*)
  	echo sparc-auspex-sunos${UNAME_RELEASE}
  	exit 0 ;;
      atari*:OpenBSD:*:*)
  	echo m68k-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      # The situation for MiNT is a little confusing.  The machine name
      # can be virtually everything (everything which is not
      # "atarist" or "atariste" at least should have a processor
      # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
      # to the lowercase version "mint" (or "freemint").  Finally
      # the system name "TOS" denotes a system which is actually not
      # MiNT.  But MiNT is downward compatible to TOS, so this should
      # be no problem.
      atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
          echo m68k-atari-mint${UNAME_RELEASE}
  	exit 0 ;;
      atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
  	echo m68k-atari-mint${UNAME_RELEASE}
          exit 0 ;;
      *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
          echo m68k-atari-mint${UNAME_RELEASE}
  	exit 0 ;;
      milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
          echo m68k-milan-mint${UNAME_RELEASE}
          exit 0 ;;
      hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
          echo m68k-hades-mint${UNAME_RELEASE}
          exit 0 ;;
      *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
          echo m68k-unknown-mint${UNAME_RELEASE}
          exit 0 ;;
      sun3*:OpenBSD:*:*)
  	echo m68k-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      mac68k:OpenBSD:*:*)
  	echo m68k-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      mvme68k:OpenBSD:*:*)
  	echo m68k-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      mvme88k:OpenBSD:*:*)
  	echo m88k-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      powerpc:machten:*:*)
  	echo powerpc-apple-machten${UNAME_RELEASE}
  	exit 0 ;;
      RISC*:Mach:*:*)
  	echo mips-dec-mach_bsd4.3
  	exit 0 ;;
      RISC*:ULTRIX:*:*)
  	echo mips-dec-ultrix${UNAME_RELEASE}
  	exit 0 ;;
      VAX*:ULTRIX*:*:*)
  	echo vax-dec-ultrix${UNAME_RELEASE}
  	exit 0 ;;
      2020:CLIX:*:* | 2430:CLIX:*:*)
  	echo clipper-intergraph-clix${UNAME_RELEASE}
  	exit 0 ;;
      mips:*:*:UMIPS | mips:*:*:RISCos)
  	sed 's/^	//' << EOF >$dummy.c
  #ifdef __cplusplus
  #include <stdio.h>  /* for printf() prototype */
  	int main (int argc, char *argv[]) {
  #else
  	int main (argc, argv) int argc; char *argv[]; {
  #endif
  	#if defined (host_mips) && defined (MIPSEB)
  	#if defined (SYSTYPE_SYSV)
  	  printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
  	#endif
  	#if defined (SYSTYPE_SVR4)
  	  printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
  	#endif
  	#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
  	  printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
  	#endif
  	#endif
  	  exit (-1);
  	}
  EOF
  	$CC_FOR_BUILD $dummy.c -o $dummy \
  	  && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
  	  && rm -f $dummy.c $dummy && exit 0
  	rm -f $dummy.c $dummy
  	echo mips-mips-riscos${UNAME_RELEASE}
  	exit 0 ;;
      Motorola:PowerMAX_OS:*:*)
  	echo powerpc-motorola-powermax
  	exit 0 ;;
      Night_Hawk:Power_UNIX:*:*)
  	echo powerpc-harris-powerunix
  	exit 0 ;;
      m88k:CX/UX:7*:*)
  	echo m88k-harris-cxux7
  	exit 0 ;;
      m88k:*:4*:R4*)
  	echo m88k-motorola-sysv4
  	exit 0 ;;
      m88k:*:3*:R3*)
  	echo m88k-motorola-sysv3
  	exit 0 ;;
      AViiON:dgux:*:*)
          # DG/UX returns AViiON for all architectures
          UNAME_PROCESSOR=`/usr/bin/uname -p`
  	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
  	then
  	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
  	       [ ${TARGET_BINARY_INTERFACE}x = x ]
  	    then
  		echo m88k-dg-dgux${UNAME_RELEASE}
  	    else
  		echo m88k-dg-dguxbcs${UNAME_RELEASE}
  	    fi
  	else
  	    echo i586-dg-dgux${UNAME_RELEASE}
  	fi
   	exit 0 ;;
      M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
  	echo m88k-dolphin-sysv3
  	exit 0 ;;
      M88*:*:R3*:*)
  	# Delta 88k system running SVR3
  	echo m88k-motorola-sysv3
  	exit 0 ;;
      XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
  	echo m88k-tektronix-sysv3
  	exit 0 ;;
      Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
  	echo m68k-tektronix-bsd
  	exit 0 ;;
      *:IRIX*:*:*)
  	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
  	exit 0 ;;
      ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
  	echo romp-ibm-aix      # uname -m gives an 8 hex-code CPU id
  	exit 0 ;;              # Note that: echo "'`uname -s`'" gives 'AIX '
      i*86:AIX:*:*)
  	echo i386-ibm-aix
  	exit 0 ;;
      ia64:AIX:*:*)
  	if [ -x /usr/bin/oslevel ] ; then
  		IBM_REV=`/usr/bin/oslevel`
  	else
  		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
  	fi
  	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
  	exit 0 ;;
      *:AIX:2:3)
  	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
  		sed 's/^		//' << EOF >$dummy.c
  		#include <sys/systemcfg.h>
  
  		main()
  			{
  			if (!__power_pc())
  				exit(1);
  			puts("powerpc-ibm-aix3.2.5");
  			exit(0);
  			}
  EOF
  		$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
  		rm -f $dummy.c $dummy
  		echo rs6000-ibm-aix3.2.5
  	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
  		echo rs6000-ibm-aix3.2.4
  	else
  		echo rs6000-ibm-aix3.2
  	fi
  	exit 0 ;;
      *:AIX:*:[45])
  	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'`
  	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
  		IBM_ARCH=rs6000
  	else
  		IBM_ARCH=powerpc
  	fi
  	if [ -x /usr/bin/oslevel ] ; then
  		IBM_REV=`/usr/bin/oslevel`
  	else
  		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
  	fi
  	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
  	exit 0 ;;
      *:AIX:*:*)
  	echo rs6000-ibm-aix
  	exit 0 ;;
      ibmrt:4.4BSD:*|romp-ibm:BSD:*)
  	echo romp-ibm-bsd4.4
  	exit 0 ;;
      ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
  	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
  	exit 0 ;;                           # report: romp-ibm BSD 4.3
      *:BOSX:*:*)
  	echo rs6000-bull-bosx
  	exit 0 ;;
      DPX/2?00:B.O.S.:*:*)
  	echo m68k-bull-sysv3
  	exit 0 ;;
      9000/[34]??:4.3bsd:1.*:*)
  	echo m68k-hp-bsd
  	exit 0 ;;
      hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
  	echo m68k-hp-bsd4.4
  	exit 0 ;;
      9000/[34678]??:HP-UX:*:*)
  	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
  	case "${UNAME_MACHINE}" in
  	    9000/31? )            HP_ARCH=m68000 ;;
  	    9000/[34]?? )         HP_ARCH=m68k ;;
  	    9000/[678][0-9][0-9])
                case "${HPUX_REV}" in
                  11.[0-9][0-9])
                    if [ -x /usr/bin/getconf ]; then
                      sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
                      sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
                      case "${sc_cpu_version}" in
                        523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
                        528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
                        532)                      # CPU_PA_RISC2_0
                          case "${sc_kernel_bits}" in
                            32) HP_ARCH="hppa2.0n" ;;
                            64) HP_ARCH="hppa2.0w" ;;
                          esac ;;
                      esac
                    fi ;;
                esac
                if [ "${HP_ARCH}" = "" ]; then
                sed 's/^              //' << EOF >$dummy.c
  
                #define _HPUX_SOURCE
                #include <stdlib.h>
                #include <unistd.h>
  
                int main ()
                {
                #if defined(_SC_KERNEL_BITS)
                    long bits = sysconf(_SC_KERNEL_BITS);
                #endif
                    long cpu  = sysconf (_SC_CPU_VERSION);
  
                    switch (cpu)
                	{
                	case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
                	case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
                	case CPU_PA_RISC2_0:
                #if defined(_SC_KERNEL_BITS)
                	    switch (bits)
                		{
                		case 64: puts ("hppa2.0w"); break;
                		case 32: puts ("hppa2.0n"); break;
                		default: puts ("hppa2.0"); break;
                		} break;
                #else  /* !defined(_SC_KERNEL_BITS) */
                	    puts ("hppa2.0"); break;
                #endif
                	default: puts ("hppa1.0"); break;
                	}
                    exit (0);
                }
  EOF
  	(CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
  	if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi
  	rm -f $dummy.c $dummy
  	fi ;;
  	esac
  	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
  	exit 0 ;;
      ia64:HP-UX:*:*)
  	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
  	echo ia64-hp-hpux${HPUX_REV}
  	exit 0 ;;
      3050*:HI-UX:*:*)
  	sed 's/^	//' << EOF >$dummy.c
  	#include <unistd.h>
  	int
  	main ()
  	{
  	  long cpu = sysconf (_SC_CPU_VERSION);
  	  /* The order matters, because CPU_IS_HP_MC68K erroneously returns
  	     true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
  	     results, however.  */
  	  if (CPU_IS_PA_RISC (cpu))
  	    {
  	      switch (cpu)
  		{
  		  case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
  		  case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
  		  case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
  		  default: puts ("hppa-hitachi-hiuxwe2"); break;
  		}
  	    }
  	  else if (CPU_IS_HP_MC68K (cpu))
  	    puts ("m68k-hitachi-hiuxwe2");
  	  else puts ("unknown-hitachi-hiuxwe2");
  	  exit (0);
  	}
  EOF
  	$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
  	rm -f $dummy.c $dummy
  	echo unknown-hitachi-hiuxwe2
  	exit 0 ;;
      9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
  	echo hppa1.1-hp-bsd
  	exit 0 ;;
      9000/8??:4.3bsd:*:*)
  	echo hppa1.0-hp-bsd
  	exit 0 ;;
      *9??*:MPE/iX:*:*)
  	echo hppa1.0-hp-mpeix
  	exit 0 ;;
      hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
  	echo hppa1.1-hp-osf
  	exit 0 ;;
      hp8??:OSF1:*:*)
  	echo hppa1.0-hp-osf
  	exit 0 ;;
      i*86:OSF1:*:*)
  	if [ -x /usr/sbin/sysversion ] ; then
  	    echo ${UNAME_MACHINE}-unknown-osf1mk
  	else
  	    echo ${UNAME_MACHINE}-unknown-osf1
  	fi
  	exit 0 ;;
      parisc*:Lites*:*:*)
  	echo hppa1.1-hp-lites
  	exit 0 ;;
      hppa*:OpenBSD:*:*)
  	echo hppa-unknown-openbsd
  	exit 0 ;;
      C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
  	echo c1-convex-bsd
          exit 0 ;;
      C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
  	if getsysinfo -f scalar_acc
  	then echo c32-convex-bsd
  	else echo c2-convex-bsd
  	fi
          exit 0 ;;
      C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
  	echo c34-convex-bsd
          exit 0 ;;
      C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
  	echo c38-convex-bsd
          exit 0 ;;
      C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
  	echo c4-convex-bsd
          exit 0 ;;
      CRAY*X-MP:*:*:*)
  	echo xmp-cray-unicos
          exit 0 ;;
      CRAY*Y-MP:*:*:*)
  	echo ymp-cray-unicos${UNAME_RELEASE}
  	exit 0 ;;
      CRAY*[A-Z]90:*:*:*)
  	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
  	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
  	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
  	exit 0 ;;
      CRAY*TS:*:*:*)
  	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
  	exit 0 ;;
      CRAY*T3D:*:*:*)
  	echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
  	exit 0 ;;
      CRAY*T3E:*:*:*)
  	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
  	exit 0 ;;
      CRAY*SV1:*:*:*)
  	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
  	exit 0 ;;
      CRAY-2:*:*:*)
  	echo cray2-cray-unicos
          exit 0 ;;
      F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
  	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
          FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
          FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
          echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
          exit 0 ;;
      hp300:OpenBSD:*:*)
  	echo m68k-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
  	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
  	exit 0 ;;
      sparc*:BSD/OS:*:*)
  	echo sparc-unknown-bsdi${UNAME_RELEASE}
  	exit 0 ;;
      *:BSD/OS:*:*)
  	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
  	exit 0 ;;
      *:FreeBSD:*:*)
  	echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
  	exit 0 ;;
      *:OpenBSD:*:*)
  	echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
  	exit 0 ;;
      i*:CYGWIN*:*)
  	echo ${UNAME_MACHINE}-pc-cygwin
  	exit 0 ;;
      i*:MINGW*:*)
  	echo ${UNAME_MACHINE}-pc-mingw32
  	exit 0 ;;
      i*:PW*:*)
  	echo ${UNAME_MACHINE}-pc-pw32
  	exit 0 ;;
      i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
  	# How do we know it's Interix rather than the generic POSIX subsystem?
  	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
  	# UNAME_MACHINE based on the output of uname instead of i386?
  	echo i386-pc-interix
  	exit 0 ;;
      i*:UWIN*:*)
  	echo ${UNAME_MACHINE}-pc-uwin
  	exit 0 ;;
      p*:CYGWIN*:*)
  	echo powerpcle-unknown-cygwin
  	exit 0 ;;
      prep*:SunOS:5.*:*)
  	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
  	exit 0 ;;
      *:GNU:*:*)
  	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
  	exit 0 ;;
      i*86:Minix:*:*)
  	echo ${UNAME_MACHINE}-pc-minix
  	exit 0 ;;
      arm*:Linux:*:*)
  	echo ${UNAME_MACHINE}-unknown-linux-gnu
  	exit 0 ;;
      ia64:Linux:*:*)
  	echo ${UNAME_MACHINE}-unknown-linux
  	exit 0 ;;
      m68*:Linux:*:*)
  	echo ${UNAME_MACHINE}-unknown-linux-gnu
  	exit 0 ;;
      mips:Linux:*:*)
  	cat >$dummy.c <<EOF
  #ifdef __cplusplus
  #include <stdio.h>  /* for printf() prototype */
  int main (int argc, char *argv[]) {
  #else
  int main (argc, argv) int argc; char *argv[]; {
  #endif
  #ifdef __MIPSEB__
    printf ("%s-unknown-linux-gnu\n", argv[1]);
  #endif
  #ifdef __MIPSEL__
    printf ("%sel-unknown-linux-gnu\n", argv[1]);
  #endif
    return 0;
  }
  EOF
  	$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0
  	rm -f $dummy.c $dummy
  	;;
      ppc:Linux:*:*)
  	# Determine Lib Version
  	cat >$dummy.c <<EOF
  #include <features.h>
  #if defined(__GLIBC__)
  extern char __libc_version[];
  extern char __libc_release[];
  #endif
  main(argc, argv)
       int argc;
       char *argv[];
  {
  #if defined(__GLIBC__)
    printf("%s %s\n", __libc_version, __libc_release);
  #else
    printf("unknown\n");
  #endif
    return 0;
  }
  EOF
  	LIBC=""
  	$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null
  	if test "$?" = 0 ; then
  		./$dummy | grep 1\.99 > /dev/null
  		if test "$?" = 0 ; then LIBC="libc1" ; fi
  	fi
  	rm -f $dummy.c $dummy
  	echo powerpc-unknown-linux-gnu${LIBC}
  	exit 0 ;;
      alpha:Linux:*:*)
  	cat <<EOF >$dummy.s
  	  .data
  	  \$Lformat:
  		.byte 37,100,45,37,120,10,0	# "%d-%x\n"
  	   .text
  		.globl main
  		.align 4
  		.ent main
  	    main:
  		.frame \$30,16,\$26,0
  		ldgp \$29,0(\$27)
  		.prologue 1
  		.long 0x47e03d80 # implver \$0
  		lda \$2,-1
  		.long 0x47e20c21 # amask \$2,\$1
  		lda \$16,\$Lformat
  		mov \$0,\$17
  		not \$1,\$18
  		jsr \$26,printf
  		ldgp \$29,0(\$26)
  		mov 0,\$16
  		jsr \$26,exit
  		.end main
  EOF
  	LIBC=""
  	$CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
  	if test "$?" = 0 ; then
  		case `./$dummy` in
  		0-0)	UNAME_MACHINE="alpha" ;;
  		1-0)	UNAME_MACHINE="alphaev5" ;;
  		1-1)    UNAME_MACHINE="alphaev56" ;;
  		1-101)	UNAME_MACHINE="alphapca56" ;;
  		2-303)	UNAME_MACHINE="alphaev6" ;;
  		2-307)	UNAME_MACHINE="alphaev67" ;;
  		esac
  		objdump --private-headers $dummy | \
  		  grep ld.so.1 > /dev/null
  		if test "$?" = 0 ; then
  			LIBC="libc1"
  		fi
  	fi
  	rm -f $dummy.s $dummy
  	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
  	exit 0 ;;
      parisc:Linux:*:* | hppa:Linux:*:*)
  	# Look for CPU level
  	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
  	  PA7*) echo hppa1.1-unknown-linux-gnu ;;
  	  PA8*) echo hppa2.0-unknown-linux-gnu ;;
  	  *)    echo hppa-unknown-linux-gnu ;;
  	esac
  	exit 0 ;;
      parisc64:Linux:*:* | hppa64:Linux:*:*)
  	echo hppa64-unknown-linux-gnu
  	exit 0 ;;
      s390:Linux:*:* | s390x:Linux:*:*)
  	echo ${UNAME_MACHINE}-ibm-linux
  	exit 0 ;;
      sh*:Linux:*:*)
  	echo ${UNAME_MACHINE}-unknown-linux-gnu
  	exit 0 ;;
      sparc:Linux:*:* | sparc64:Linux:*:*)
  	echo ${UNAME_MACHINE}-unknown-linux-gnu
  	exit 0 ;;
      x86_64:Linux:*:*)
  	echo x86_64-unknown-linux-gnu
  	exit 0 ;;
      i*86:Linux:*:*)
  	# The BFD linker knows what the default object file format is, so
  	# first see if it will tell us. cd to the root directory to prevent
  	# problems with other programs or directories called `ld' in the path.
  	ld_supported_emulations=`cd /; ld --help 2>&1 \
  			 | sed -ne '/supported emulations:/!d
  				    s/[ 	][ 	]*/ /g
  				    s/.*supported emulations: *//
  				    s/ .*//
  				    p'`
          case "$ld_supported_emulations" in
  	  i*86linux)
  		echo "${UNAME_MACHINE}-pc-linux-gnuaout"
  		exit 0
  		;;
  	  elf_i*86)
  		TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
  		;;
  	  i*86coff)
  		echo "${UNAME_MACHINE}-pc-linux-gnucoff"
  		exit 0
  		;;
  	esac
  	# Either a pre-BFD a.out linker (linux-gnuoldld)
  	# or one that does not give us useful --help.
  	# GCC wants to distinguish between linux-gnuoldld and linux-gnuaout.
  	# If ld does not provide *any* "supported emulations:"
  	# that means it is gnuoldld.
  	test -z "$ld_supported_emulations" && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0
  	case "${UNAME_MACHINE}" in
  	i*86)
  	  VENDOR=pc;
  	  ;;
  	*)
  	  VENDOR=unknown;
  	  ;;
  	esac
  	# Determine whether the default compiler is a.out or elf
  	cat >$dummy.c <<EOF
  #include <features.h>
  #ifdef __cplusplus
  #include <stdio.h>  /* for printf() prototype */
  	int main (int argc, char *argv[]) {
  #else
  	int main (argc, argv) int argc; char *argv[]; {
  #endif
  #ifdef __ELF__
  # ifdef __GLIBC__
  #  if __GLIBC__ >= 2
      printf ("%s-${VENDOR}-linux-gnu\n", argv[1]);
  #  else
      printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
  #  endif
  # else
     printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
  # endif
  #else
    printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]);
  #endif
    return 0;
  }
  EOF
  	$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0
  	rm -f $dummy.c $dummy
  	test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
  	;;
  # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.  earlier versions
  # are messed up and put the nodename in both sysname and nodename.
      i*86:DYNIX/ptx:4*:*)
  	echo i386-sequent-sysv4
  	exit 0 ;;
      i*86:UNIX_SV:4.2MP:2.*)
          # Unixware is an offshoot of SVR4, but it has its own version
          # number series starting with 2...
          # I am not positive that other SVR4 systems won't match this,
  	# I just have to hope.  -- rms.
          # Use sysv4.2uw... so that sysv4* matches it.
  	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
  	exit 0 ;;
      i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
  	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
  	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
  		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
  	else
  		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
  	fi
  	exit 0 ;;
      i*86:*:5:7*)
          # Fixed at (any) Pentium or better
          UNAME_MACHINE=i586
          if [ ${UNAME_SYSTEM} = "UnixWare" ] ; then
  	    echo ${UNAME_MACHINE}-sco-sysv${UNAME_RELEASE}uw${UNAME_VERSION}
  	else
  	    echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
  	fi
  	exit 0 ;;
      i*86:*:3.2:*)
  	if test -f /usr/options/cb.name; then
  		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
  		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
  	elif /bin/uname -X 2>/dev/null >/dev/null ; then
  		UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
  		(/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
  		(/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
  			&& UNAME_MACHINE=i586
  		(/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \
  			&& UNAME_MACHINE=i686
  		(/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \
  			&& UNAME_MACHINE=i686
  		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
  	else
  		echo ${UNAME_MACHINE}-pc-sysv32
  	fi
  	exit 0 ;;
      i*86:*DOS:*:*)
  	echo ${UNAME_MACHINE}-pc-msdosdjgpp
  	exit 0 ;;
      pc:*:*:*)
  	# Left here for compatibility:
          # uname -m prints for DJGPP always 'pc', but it prints nothing about
          # the processor, so we play safe by assuming i386.
  	echo i386-pc-msdosdjgpp
          exit 0 ;;
      Intel:Mach:3*:*)
  	echo i386-pc-mach3
  	exit 0 ;;
      paragon:*:*:*)
  	echo i860-intel-osf1
  	exit 0 ;;
      i860:*:4.*:*) # i860-SVR4
  	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
  	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
  	else # Add other i860-SVR4 vendors below as they are discovered.
  	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
  	fi
  	exit 0 ;;
      mini*:CTIX:SYS*5:*)
  	# "miniframe"
  	echo m68010-convergent-sysv
  	exit 0 ;;
      M68*:*:R3V[567]*:*)
  	test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
      3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
  	OS_REL=''
  	test -r /etc/.relid \
  	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
  	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
  	  && echo i486-ncr-sysv4.3${OS_REL} && exit 0
  	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
  	  && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
      3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
          /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
            && echo i486-ncr-sysv4 && exit 0 ;;
      m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
  	echo m68k-unknown-lynxos${UNAME_RELEASE}
  	exit 0 ;;
      mc68030:UNIX_System_V:4.*:*)
  	echo m68k-atari-sysv4
  	exit 0 ;;
      i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
  	echo i386-unknown-lynxos${UNAME_RELEASE}
  	exit 0 ;;
      TSUNAMI:LynxOS:2.*:*)
  	echo sparc-unknown-lynxos${UNAME_RELEASE}
  	exit 0 ;;
      rs6000:LynxOS:2.*:*)
  	echo rs6000-unknown-lynxos${UNAME_RELEASE}
  	exit 0 ;;
      PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
  	echo powerpc-unknown-lynxos${UNAME_RELEASE}
  	exit 0 ;;
      SM[BE]S:UNIX_SV:*:*)
  	echo mips-dde-sysv${UNAME_RELEASE}
  	exit 0 ;;
      RM*:ReliantUNIX-*:*:*)
  	echo mips-sni-sysv4
  	exit 0 ;;
      RM*:SINIX-*:*:*)
  	echo mips-sni-sysv4
  	exit 0 ;;
      *:SINIX-*:*:*)
  	if uname -p 2>/dev/null >/dev/null ; then
  		UNAME_MACHINE=`(uname -p) 2>/dev/null`
  		echo ${UNAME_MACHINE}-sni-sysv4
  	else
  		echo ns32k-sni-sysv
  	fi
  	exit 0 ;;
      PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
                             # says <Richard.M.Bartel@ccMail.Census.GOV>
          echo i586-unisys-sysv4
          exit 0 ;;
      *:UNIX_System_V:4*:FTX*)
  	# From Gerald Hewes <hewes@openmarket.com>.
  	# How about differentiating between stratus architectures? -djm
  	echo hppa1.1-stratus-sysv4
  	exit 0 ;;
      *:*:*:FTX*)
  	# From seanf@swdc.stratus.com.
  	echo i860-stratus-sysv4
  	exit 0 ;;
      mc68*:A/UX:*:*)
  	echo m68k-apple-aux${UNAME_RELEASE}
  	exit 0 ;;
      news*:NEWS-OS:6*:*)
  	echo mips-sony-newsos6
  	exit 0 ;;
      R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
  	if [ -d /usr/nec ]; then
  	        echo mips-nec-sysv${UNAME_RELEASE}
  	else
  	        echo mips-unknown-sysv${UNAME_RELEASE}
  	fi
          exit 0 ;;
      BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
  	echo powerpc-be-beos
  	exit 0 ;;
      BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
  	echo powerpc-apple-beos
  	exit 0 ;;
      BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
  	echo i586-pc-beos
  	exit 0 ;;
      SX-4:SUPER-UX:*:*)
  	echo sx4-nec-superux${UNAME_RELEASE}
  	exit 0 ;;
      SX-5:SUPER-UX:*:*)
  	echo sx5-nec-superux${UNAME_RELEASE}
  	exit 0 ;;
      Power*:Rhapsody:*:*)
  	echo powerpc-apple-rhapsody${UNAME_RELEASE}
  	exit 0 ;;
      *:Rhapsody:*:*)
  	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
  	exit 0 ;;
      *:Darwin:*:*)
  	echo `uname -p`-apple-darwin${UNAME_RELEASE}
  	exit 0 ;;
      *:procnto*:*:* | *:QNX:[0123456789]*:*)
  	if test "${UNAME_MACHINE}" = "x86pc"; then
  		UNAME_MACHINE=pc
  	fi
  	echo `uname -p`-${UNAME_MACHINE}-nto-qnx
  	exit 0 ;;
      *:QNX:*:4*)
  	echo i386-pc-qnx
  	exit 0 ;;
      NSR-[KW]:NONSTOP_KERNEL:*:*)
  	echo nsr-tandem-nsk${UNAME_RELEASE}
  	exit 0 ;;
      *:NonStop-UX:*:*)
  	echo mips-compaq-nonstopux
  	exit 0 ;;
      BS2000:POSIX*:*:*)
  	echo bs2000-siemens-sysv
  	exit 0 ;;
      DS/*:UNIX_System_V:*:*)
  	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
  	exit 0 ;;
      *:Plan9:*:*)
  	# "uname -m" is not consistent, so use $cputype instead. 386
  	# is converted to i386 for consistency with other x86
  	# operating systems.
  	if test "$cputype" = "386"; then
  	    UNAME_MACHINE=i386
  	else
  	    UNAME_MACHINE="$cputype"
  	fi
  	echo ${UNAME_MACHINE}-unknown-plan9
  	exit 0 ;;
      i*86:OS/2:*:*)
  	# If we were able to find `uname', then EMX Unix compatibility
  	# is probably installed.
  	echo ${UNAME_MACHINE}-pc-os2-emx
  	exit 0 ;;
      *:TOPS-10:*:*)
  	echo pdp10-unknown-tops10
  	exit 0 ;;
      *:TENEX:*:*)
  	echo pdp10-unknown-tenex
  	exit 0 ;;
      KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
  	echo pdp10-dec-tops20
  	exit 0 ;;
      XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
  	echo pdp10-xkl-tops20
  	exit 0 ;;
      *:TOPS-20:*:*)
  	echo pdp10-unknown-tops20
  	exit 0 ;;
      *:ITS:*:*)
  	echo pdp10-unknown-its
  	exit 0 ;;
  esac
  
  #echo '(No uname command or uname output not recognized.)' 1>&2
  #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
  
  cat >$dummy.c <<EOF
  #ifdef _SEQUENT_
  # include <sys/types.h>
  # include <sys/utsname.h>
  #endif
  main ()
  {
  #if defined (sony)
  #if defined (MIPSEB)
    /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
       I don't know....  */
    printf ("mips-sony-bsd\n"); exit (0);
  #else
  #include <sys/param.h>
    printf ("m68k-sony-newsos%s\n",
  #ifdef NEWSOS4
            "4"
  #else
  	  ""
  #endif
           ); exit (0);
  #endif
  #endif
  
  #if defined (__arm) && defined (__acorn) && defined (__unix)
    printf ("arm-acorn-riscix"); exit (0);
  #endif
  
  #if defined (hp300) && !defined (hpux)
    printf ("m68k-hp-bsd\n"); exit (0);
  #endif
  
  #if defined (NeXT)
  #if !defined (__ARCHITECTURE__)
  #define __ARCHITECTURE__ "m68k"
  #endif
    int version;
    version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
    if (version < 4)
      printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
    else
      printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
    exit (0);
  #endif
  
  #if defined (MULTIMAX) || defined (n16)
  #if defined (UMAXV)
    printf ("ns32k-encore-sysv\n"); exit (0);
  #else
  #if defined (CMU)
    printf ("ns32k-encore-mach\n"); exit (0);
  #else
    printf ("ns32k-encore-bsd\n"); exit (0);
  #endif
  #endif
  #endif
  
  #if defined (__386BSD__)
    printf ("i386-pc-bsd\n"); exit (0);
  #endif
  
  #if defined (sequent)
  #if defined (i386)
    printf ("i386-sequent-dynix\n"); exit (0);
  #endif
  #if defined (ns32000)
    printf ("ns32k-sequent-dynix\n"); exit (0);
  #endif
  #endif
  
  #if defined (_SEQUENT_)
      struct utsname un;
  
      uname(&un);
  
      if (strncmp(un.version, "V2", 2) == 0) {
  	printf ("i386-sequent-ptx2\n"); exit (0);
      }
      if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
  	printf ("i386-sequent-ptx1\n"); exit (0);
      }
      printf ("i386-sequent-ptx\n"); exit (0);
  
  #endif
  
  #if defined (vax)
  # if !defined (ultrix)
  #  include <sys/param.h>
  #  if defined (BSD)
  #   if BSD == 43
        printf ("vax-dec-bsd4.3\n"); exit (0);
  #   else
  #    if BSD == 199006
        printf ("vax-dec-bsd4.3reno\n"); exit (0);
  #    else
        printf ("vax-dec-bsd\n"); exit (0);
  #    endif
  #   endif
  #  else
      printf ("vax-dec-bsd\n"); exit (0);
  #  endif
  # else
      printf ("vax-dec-ultrix\n"); exit (0);
  # endif
  #endif
  
  #if defined (alliant) && defined (i860)
    printf ("i860-alliant-bsd\n"); exit (0);
  #endif
  
    exit (1);
  }
  EOF
  
  $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0
  rm -f $dummy.c $dummy
  
  # Apollos put the system type in the environment.
  
  test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
  
  # Convex versions that predate uname can use getsysinfo(1)
  
  if [ -x /usr/convex/getsysinfo ]
  then
      case `getsysinfo -f cpu_type` in
      c1*)
  	echo c1-convex-bsd
  	exit 0 ;;
      c2*)
  	if getsysinfo -f scalar_acc
  	then echo c32-convex-bsd
  	else echo c2-convex-bsd
  	fi
  	exit 0 ;;
      c34*)
  	echo c34-convex-bsd
  	exit 0 ;;
      c38*)
  	echo c38-convex-bsd
  	exit 0 ;;
      c4*)
  	echo c4-convex-bsd
  	exit 0 ;;
      esac
  fi
  
  cat >&2 <<EOF
  $0: unable to guess system type
  
  This script, last modified $timestamp, has failed to recognize
  the operating system you are using. It is advised that you
  download the most up to date version of the config scripts from
  
      ftp://ftp.gnu.org/pub/gnu/config/
  
  If the version you run ($0) is already up to date, please
  send the following data and any information you think might be
  pertinent to <config-patches@gnu.org> in order to provide the needed
  information to handle your system.
  
  config.guess timestamp = $timestamp
  
  uname -m = `(uname -m) 2>/dev/null || echo unknown`
  uname -r = `(uname -r) 2>/dev/null || echo unknown`
  uname -s = `(uname -s) 2>/dev/null || echo unknown`
  uname -v = `(uname -v) 2>/dev/null || echo unknown`
  
  /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
  /bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
  
  hostinfo               = `(hostinfo) 2>/dev/null`
  /bin/universe          = `(/bin/universe) 2>/dev/null`
  /usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
  /bin/arch              = `(/bin/arch) 2>/dev/null`
  /usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
  /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
  
  UNAME_MACHINE = ${UNAME_MACHINE}
  UNAME_RELEASE = ${UNAME_RELEASE}
  UNAME_SYSTEM  = ${UNAME_SYSTEM}
  UNAME_VERSION = ${UNAME_VERSION}
  EOF
  
  exit 1
  
  # Local variables:
  # eval: (add-hook 'write-file-hooks 'time-stamp)
  # time-stamp-start: "timestamp='"
  # time-stamp-format: "%:y-%02m-%02d"
  # time-stamp-end: "'"
  # End:
  Index: ossp-pkg/pcre/config.sub
  ============================================================
  $ cvs update -p -r1.1 config.sub
  #! /bin/sh
  # Configuration validation subroutine script.
  #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
  #   Free Software Foundation, Inc.
  
  timestamp='2001-04-20'
  
  # This file is (in principle) common to ALL GNU software.
  # The presence of a machine in this file suggests that SOME GNU software
  # can handle that machine.  It does not imply ALL GNU software can.
  #
  # This file is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 2 of the License, or
  # (at your option) any later version.
  #
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  #
  # You should have received a copy of the GNU General Public License
  # along with this program; if not, write to the Free Software
  # Foundation, Inc., 59 Temple Place - Suite 330,
  # Boston, MA 02111-1307, USA.
  
  # As a special exception to the GNU General Public License, if you
  # distribute this file as part of a program that contains a
  # configuration script generated by Autoconf, you may include it under
  # the same distribution terms that you use for the rest of that program.
  
  # Please send patches to <config-patches@gnu.org>.
  #
  # Configuration subroutine to validate and canonicalize a configuration type.
  # Supply the specified configuration type as an argument.
  # If it is invalid, we print an error message on stderr and exit with code 1.
  # Otherwise, we print the canonical config type on stdout and succeed.
  
  # This file is supposed to be the same for all GNU packages
  # and recognize all the CPU types, system types and aliases
  # that are meaningful with *any* GNU software.
  # Each package is responsible for reporting which valid configurations
  # it does not support.  The user should be able to distinguish
  # a failure to support a valid configuration from a meaningless
  # configuration.
  
  # The goal of this file is to map all the various variations of a given
  # machine specification into a single specification in the form:
  #	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
  # or in some cases, the newer four-part form:
  #	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
  # It is wrong to echo any other type of specification.
  
  me=`echo "$0" | sed -e 's,.*/,,'`
  
  usage="\
  Usage: $0 [OPTION] CPU-MFR-OPSYS
         $0 [OPTION] ALIAS
  
  Canonicalize a configuration name.
  
  Operation modes:
    -h, --help         print this help, then exit
    -t, --time-stamp   print date of last modification, then exit
    -v, --version      print version number, then exit
  
  Report bugs and patches to <config-patches@gnu.org>."
  
  version="\
  GNU config.sub ($timestamp)
  
  Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
  Free Software Foundation, Inc.
  
  This is free software; see the source for copying conditions.  There is NO
  warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
  
  help="
  Try \`$me --help' for more information."
  
  # Parse command line
  while test $# -gt 0 ; do
    case $1 in
      --time-stamp | --time* | -t )
         echo "$timestamp" ; exit 0 ;;
      --version | -v )
         echo "$version" ; exit 0 ;;
      --help | --h* | -h )
         echo "$usage"; exit 0 ;;
      -- )     # Stop option processing
         shift; break ;;
      - )	# Use stdin as input.
         break ;;
      -* )
         echo "$me: invalid option $1$help"
         exit 1 ;;
  
      *local*)
         # First pass through any local machine types.
         echo $1
         exit 0;;
  
      * )
         break ;;
    esac
  done
  
  case $# in
   0) echo "$me: missing argument$help" >&2
      exit 1;;
   1) ;;
   *) echo "$me: too many arguments$help" >&2
      exit 1;;
  esac
  
  # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
  # Here we must recognize all the valid KERNEL-OS combinations.
  maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
  case $maybe_os in
    nto-qnx* | linux-gnu* | storm-chaos* | os2-emx*)
      os=-$maybe_os
      basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
      ;;
    *)
      basic_machine=`echo $1 | sed 's/-[^-]*$//'`
      if [ $basic_machine != $1 ]
      then os=`echo $1 | sed 's/.*-/-/'`
      else os=; fi
      ;;
  esac
  
  ### Let's recognize common machines as not being operating systems so
  ### that things like config.sub decstation-3100 work.  We also
  ### recognize some manufacturers as not being operating systems, so we
  ### can provide default operating systems below.
  case $os in
  	-sun*os*)
  		# Prevent following clause from handling this invalid input.
  		;;
  	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
  	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
  	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
  	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
  	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
  	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
  	-apple | -axis)
  		os=
  		basic_machine=$1
  		;;
  	-sim | -cisco | -oki | -wec | -winbond)
  		os=
  		basic_machine=$1
  		;;
  	-scout)
  		;;
  	-wrs)
  		os=-vxworks
  		basic_machine=$1
  		;;
  	-hiux*)
  		os=-hiuxwe2
  		;;
  	-sco5)
  		os=-sco3.2v5
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  		;;
  	-sco4)
  		os=-sco3.2v4
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  		;;
  	-sco3.2.[4-9]*)
  		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  		;;
  	-sco3.2v[4-9]*)
  		# Don't forget version if it is 3.2v4 or newer.
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  		;;
  	-sco*)
  		os=-sco3.2v2
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  		;;
  	-udk*)
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  		;;
  	-isc)
  		os=-isc2.2
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  		;;
  	-clix*)
  		basic_machine=clipper-intergraph
  		;;
  	-isc*)
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  		;;
  	-lynx*)
  		os=-lynxos
  		;;
  	-ptx*)
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
  		;;
  	-windowsnt*)
  		os=`echo $os | sed -e 's/windowsnt/winnt/'`
  		;;
  	-psos*)
  		os=-psos
  		;;
  	-mint | -mint[0-9]*)
  		basic_machine=m68k-atari
  		os=-mint
  		;;
  esac
  
  # Decode aliases for certain CPU-COMPANY combinations.
  case $basic_machine in
  	# Recognize the basic CPU types without company name.
  	# Some are omitted here because they have special meanings below.
  	tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc \
  	        | arm | arme[lb] | arm[bl]e | armv[2345] | armv[345][lb] | strongarm | xscale \
  		| pyramid | mn10200 | mn10300 | tron | a29k \
  		| 580 | i960 | h8300 \
  		| x86 | ppcbe | mipsbe | mipsle | shbe | shle \
  		| hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \
  		| hppa64 \
  		| alpha | alphaev[4-8] | alphaev56 | alphapca5[67] \
  		| alphaev6[78] \
  		| we32k | ns16k | clipper | i370 | sh | sh[34] \
  		| powerpc | powerpcle \
  		| 1750a | dsp16xx | pdp10 | pdp11 \
  		| mips16 | mips64 | mipsel | mips64el \
  		| mips64orion | mips64orionel | mipstx39 | mipstx39el \
  		| mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \
  		| mips64vr5000 | miprs64vr5000el | mcore | s390 | s390x \
  		| sparc | sparclet | sparclite | sparc64 | sparcv9 | sparcv9b \
  		| v850 | c4x \
  		| thumb | d10v | d30v | fr30 | avr | openrisc | tic80 \
  		| pj | pjl | h8500)
  		basic_machine=$basic_machine-unknown
  		;;
  	m6811 | m68hc11 | m6812 | m68hc12)
  		# Motorola 68HC11/12.
  		basic_machine=$basic_machine-unknown
  		os=-none
  		;;
  	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | w65)
  		;;
  
  	# We use `pc' rather than `unknown'
  	# because (1) that's what they normally are, and
  	# (2) the word "unknown" tends to confuse beginning users.
  	i*86 | x86_64)
  	  basic_machine=$basic_machine-pc
  	  ;;
  	# Object if more than one company name word.
  	*-*-*)
  		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
  		exit 1
  		;;
  	# Recognize the basic CPU types with company name.
  	# FIXME: clean up the formatting here.
  	vax-* | tahoe-* | i*86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \
  	      | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | c[123]* \
  	      | arm-*  | armbe-* | armle-* | armv*-* | strongarm-* | xscale-* \
  	      | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \
  	      | power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \
  	      | xmp-* | ymp-* \
  	      | x86-* | ppcbe-* | mipsbe-* | mipsle-* | shbe-* | shle-* \
  	      | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* \
  	      | hppa2.0n-* | hppa64-* \
  	      | alpha-* | alphaev[4-8]-* | alphaev56-* | alphapca5[67]-* \
  	      | alphaev6[78]-* \
  	      | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \
  	      | clipper-* | orion-* \
  	      | sparclite-* | pdp10-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
  	      | sparc64-* | sparcv9-* | sparcv9b-* | sparc86x-* \
  	      | mips16-* | mips64-* | mipsel-* \
  	      | mips64el-* | mips64orion-* | mips64orionel-* \
  	      | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \
  	      | mipstx39-* | mipstx39el-* | mcore-* \
  	      | f30[01]-* | f700-* | s390-* | s390x-* | sv1-* | t3e-* \
  	      | [cjt]90-* \
  	      | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \
  	      | thumb-* | v850-* | d30v-* | tic30-* | tic80-* | c30-* | fr30-* \
  	      | bs2000-* | tic54x-* | c54x-* | x86_64-* | pj-* | pjl-*)
  		;;
  	# Recognize the various machine names and aliases which stand
  	# for a CPU type and a company and sometimes even an OS.
  	386bsd)
  		basic_machine=i386-unknown
  		os=-bsd
  		;;
  	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
  		basic_machine=m68000-att
  		;;
  	3b*)
  		basic_machine=we32k-att
  		;;
  	a29khif)
  		basic_machine=a29k-amd
  		os=-udi
  		;;
  	adobe68k)
  		basic_machine=m68010-adobe
  		os=-scout
  		;;
  	alliant | fx80)
  		basic_machine=fx80-alliant
  		;;
  	altos | altos3068)
  		basic_machine=m68k-altos
  		;;
  	am29k)
  		basic_machine=a29k-none
  		os=-bsd
  		;;
  	amdahl)
  		basic_machine=580-amdahl
  		os=-sysv
  		;;
  	amiga | amiga-*)
  		basic_machine=m68k-unknown
  		;;
  	amigaos | amigados)
  		basic_machine=m68k-unknown
  		os=-amigaos
  		;;
  	amigaunix | amix)
  		basic_machine=m68k-unknown
  		os=-sysv4
  		;;
  	apollo68)
  		basic_machine=m68k-apollo
  		os=-sysv
  		;;
  	apollo68bsd)
  		basic_machine=m68k-apollo
  		os=-bsd
  		;;
  	aux)
  		basic_machine=m68k-apple
  		os=-aux
  		;;
  	balance)
  		basic_machine=ns32k-sequent
  		os=-dynix
  		;;
  	convex-c1)
  		basic_machine=c1-convex
  		os=-bsd
  		;;
  	convex-c2)
  		basic_machine=c2-convex
  		os=-bsd
  		;;
  	convex-c32)
  		basic_machine=c32-convex
  		os=-bsd
  		;;
  	convex-c34)
  		basic_machine=c34-convex
  		os=-bsd
  		;;
  	convex-c38)
  		basic_machine=c38-convex
  		os=-bsd
  		;;
  	cray | ymp)
  		basic_machine=ymp-cray
  		os=-unicos
  		;;
  	cray2)
  		basic_machine=cray2-cray
  		os=-unicos
  		;;
  	[cjt]90)
  		basic_machine=${basic_machine}-cray
  		os=-unicos
  		;;
  	crds | unos)
  		basic_machine=m68k-crds
  		;;
  	cris | cris-* | etrax*)
  		basic_machine=cris-axis
  		;;
  	da30 | da30-*)
  		basic_machine=m68k-da30
  		;;
  	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
  		basic_machine=mips-dec
  		;;
  	delta | 3300 | motorola-3300 | motorola-delta \
  	      | 3300-motorola | delta-motorola)
  		basic_machine=m68k-motorola
  		;;
  	delta88)
  		basic_machine=m88k-motorola
  		os=-sysv3
  		;;
  	dpx20 | dpx20-*)
  		basic_machine=rs6000-bull
  		os=-bosx
  		;;
  	dpx2* | dpx2*-bull)
  		basic_machine=m68k-bull
  		os=-sysv3
  		;;
  	ebmon29k)
  		basic_machine=a29k-amd
  		os=-ebmon
  		;;
  	elxsi)
  		basic_machine=elxsi-elxsi
  		os=-bsd
  		;;
  	encore | umax | mmax)
  		basic_machine=ns32k-encore
  		;;
  	es1800 | OSE68k | ose68k | ose | OSE)
  		basic_machine=m68k-ericsson
  		os=-ose
  		;;
  	fx2800)
  		basic_machine=i860-alliant
  		;;
  	genix)
  		basic_machine=ns32k-ns
  		;;
  	gmicro)
  		basic_machine=tron-gmicro
  		os=-sysv
  		;;
  	go32)
  		basic_machine=i386-pc
  		os=-go32
  		;;
  	h3050r* | hiux*)
  		basic_machine=hppa1.1-hitachi
  		os=-hiuxwe2
  		;;
  	h8300hms)
  		basic_machine=h8300-hitachi
  		os=-hms
  		;;
  	h8300xray)
  		basic_machine=h8300-hitachi
  		os=-xray
  		;;
  	h8500hms)
  		basic_machine=h8500-hitachi
  		os=-hms
  		;;
  	harris)
  		basic_machine=m88k-harris
  		os=-sysv3
  		;;
  	hp300-*)
  		basic_machine=m68k-hp
  		;;
  	hp300bsd)
  		basic_machine=m68k-hp
  		os=-bsd
  		;;
  	hp300hpux)
  		basic_machine=m68k-hp
  		os=-hpux
  		;;
  	hp3k9[0-9][0-9] | hp9[0-9][0-9])
  		basic_machine=hppa1.0-hp
  		;;
  	hp9k2[0-9][0-9] | hp9k31[0-9])
  		basic_machine=m68000-hp
  		;;
  	hp9k3[2-9][0-9])
  		basic_machine=m68k-hp
  		;;
  	hp9k6[0-9][0-9] | hp6[0-9][0-9])
  		basic_machine=hppa1.0-hp
  		;;
  	hp9k7[0-79][0-9] | hp7[0-79][0-9])
  		basic_machine=hppa1.1-hp
  		;;
  	hp9k78[0-9] | hp78[0-9])
  		# FIXME: really hppa2.0-hp
  		basic_machine=hppa1.1-hp
  		;;
  	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
  		# FIXME: really hppa2.0-hp
  		basic_machine=hppa1.1-hp
  		;;
  	hp9k8[0-9][13679] | hp8[0-9][13679])
  		basic_machine=hppa1.1-hp
  		;;
  	hp9k8[0-9][0-9] | hp8[0-9][0-9])
  		basic_machine=hppa1.0-hp
  		;;
  	hppa-next)
  		os=-nextstep3
  		;;
  	hppaosf)
  		basic_machine=hppa1.1-hp
  		os=-osf
  		;;
  	hppro)
  		basic_machine=hppa1.1-hp
  		os=-proelf
  		;;
  	i370-ibm* | ibm*)
  		basic_machine=i370-ibm
  		;;
  # I'm not sure what "Sysv32" means.  Should this be sysv3.2?
  	i*86v32)
  		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
  		os=-sysv32
  		;;
  	i*86v4*)
  		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
  		os=-sysv4
  		;;
  	i*86v)
  		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
  		os=-sysv
  		;;
  	i*86sol2)
  		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
  		os=-solaris2
  		;;
  	i386mach)
  		basic_machine=i386-mach
  		os=-mach
  		;;
  	i386-vsta | vsta)
  		basic_machine=i386-unknown
  		os=-vsta
  		;;
  	iris | iris4d)
  		basic_machine=mips-sgi
  		case $os in
  		    -irix*)
  			;;
  		    *)
  			os=-irix4
  			;;
  		esac
  		;;
  	isi68 | isi)
  		basic_machine=m68k-isi
  		os=-sysv
  		;;
  	m88k-omron*)
  		basic_machine=m88k-omron
  		;;
  	magnum | m3230)
  		basic_machine=mips-mips
  		os=-sysv
  		;;
  	merlin)
  		basic_machine=ns32k-utek
  		os=-sysv
  		;;
  	mingw32)
  		basic_machine=i386-pc
  		os=-mingw32
  		;;
  	miniframe)
  		basic_machine=m68000-convergent
  		;;
  	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
  		basic_machine=m68k-atari
  		os=-mint
  		;;
  	mipsel*-linux*)
  		basic_machine=mipsel-unknown
  		os=-linux-gnu
  		;;
  	mips*-linux*)
  		basic_machine=mips-unknown
  		os=-linux-gnu
  		;;
  	mips3*-*)
  		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
  		;;
  	mips3*)
  		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
  		;;
  	mmix*)
  		basic_machine=mmix-knuth
  		os=-mmixware
  		;;
  	monitor)
  		basic_machine=m68k-rom68k
  		os=-coff
  		;;
  	msdos)
  		basic_machine=i386-pc
  		os=-msdos
  		;;
  	mvs)
  		basic_machine=i370-ibm
  		os=-mvs
  		;;
  	ncr3000)
  		basic_machine=i486-ncr
  		os=-sysv4
  		;;
  	netbsd386)
  		basic_machine=i386-unknown
  		os=-netbsd
  		;;
  	netwinder)
  		basic_machine=armv4l-rebel
  		os=-linux
  		;;
  	news | news700 | news800 | news900)
  		basic_machine=m68k-sony
  		os=-newsos
  		;;
  	news1000)
  		basic_machine=m68030-sony
  		os=-newsos
  		;;
  	news-3600 | risc-news)
  		basic_machine=mips-sony
  		os=-newsos
  		;;
  	necv70)
  		basic_machine=v70-nec
  		os=-sysv
  		;;
  	next | m*-next )
  		basic_machine=m68k-next
  		case $os in
  		    -nextstep* )
  			;;
  		    -ns2*)
  		      os=-nextstep2
  			;;
  		    *)
  		      os=-nextstep3
  			;;
  		esac
  		;;
  	nh3000)
  		basic_machine=m68k-harris
  		os=-cxux
  		;;
  	nh[45]000)
  		basic_machine=m88k-harris
  		os=-cxux
  		;;
  	nindy960)
  		basic_machine=i960-intel
  		os=-nindy
  		;;
  	mon960)
  		basic_machine=i960-intel
  		os=-mon960
  		;;
  	nonstopux)
  		basic_machine=mips-compaq
  		os=-nonstopux
  		;;
  	np1)
  		basic_machine=np1-gould
  		;;
  	nsr-tandem)
  		basic_machine=nsr-tandem
  		;;
  	op50n-* | op60c-*)
  		basic_machine=hppa1.1-oki
  		os=-proelf
  		;;
  	OSE68000 | ose68000)
  		basic_machine=m68000-ericsson
  		os=-ose
  		;;
  	os68k)
  		basic_machine=m68k-none
  		os=-os68k
  		;;
  	pa-hitachi)
  		basic_machine=hppa1.1-hitachi
  		os=-hiuxwe2
  		;;
  	paragon)
  		basic_machine=i860-intel
  		os=-osf
  		;;
  	pbd)
  		basic_machine=sparc-tti
  		;;
  	pbb)
  		basic_machine=m68k-tti
  		;;
          pc532 | pc532-*)
  		basic_machine=ns32k-pc532
  		;;
  	pentium | p5 | k5 | k6 | nexgen)
  		basic_machine=i586-pc
  		;;
  	pentiumpro | p6 | 6x86 | athlon)
  		basic_machine=i686-pc
  		;;
  	pentiumii | pentium2)
  		basic_machine=i686-pc
  		;;
  	pentium-* | p5-* | k5-* | k6-* | nexgen-*)
  		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
  		;;
  	pentiumpro-* | p6-* | 6x86-* | athlon-*)
  		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
  		;;
  	pentiumii-* | pentium2-*)
  		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
  		;;
  	pn)
  		basic_machine=pn-gould
  		;;
  	power)	basic_machine=power-ibm
  		;;
  	ppc)	basic_machine=powerpc-unknown
  	        ;;
  	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
  		;;
  	ppcle | powerpclittle | ppc-le | powerpc-little)
  		basic_machine=powerpcle-unknown
  	        ;;
  	ppcle-* | powerpclittle-*)
  		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
  		;;
  	ps2)
  		basic_machine=i386-ibm
  		;;
  	pw32)
  		basic_machine=i586-unknown
  		os=-pw32
  		;;
  	rom68k)
  		basic_machine=m68k-rom68k
  		os=-coff
  		;;
  	rm[46]00)
  		basic_machine=mips-siemens
  		;;
  	rtpc | rtpc-*)
  		basic_machine=romp-ibm
  		;;
  	sa29200)
  		basic_machine=a29k-amd
  		os=-udi
  		;;
  	sequent)
  		basic_machine=i386-sequent
  		;;
  	sh)
  		basic_machine=sh-hitachi
  		os=-hms
  		;;
  	sparclite-wrs)
  		basic_machine=sparclite-wrs
  		os=-vxworks
  		;;
  	sps7)
  		basic_machine=m68k-bull
  		os=-sysv2
  		;;
  	spur)
  		basic_machine=spur-unknown
  		;;
  	st2000)
  		basic_machine=m68k-tandem
  		;;
  	stratus)
  		basic_machine=i860-stratus
  		os=-sysv4
  		;;
  	sun2)
  		basic_machine=m68000-sun
  		;;
  	sun2os3)
  		basic_machine=m68000-sun
  		os=-sunos3
  		;;
  	sun2os4)
  		basic_machine=m68000-sun
  		os=-sunos4
  		;;
  	sun3os3)
  		basic_machine=m68k-sun
  		os=-sunos3
  		;;
  	sun3os4)
  		basic_machine=m68k-sun
  		os=-sunos4
  		;;
  	sun4os3)
  		basic_machine=sparc-sun
  		os=-sunos3
  		;;
  	sun4os4)
  		basic_machine=sparc-sun
  		os=-sunos4
  		;;
  	sun4sol2)
  		basic_machine=sparc-sun
  		os=-solaris2
  		;;
  	sun3 | sun3-*)
  		basic_machine=m68k-sun
  		;;
  	sun4)
  		basic_machine=sparc-sun
  		;;
  	sun386 | sun386i | roadrunner)
  		basic_machine=i386-sun
  		;;
  	sv1)
  		basic_machine=sv1-cray
  		os=-unicos
  		;;
  	symmetry)
  		basic_machine=i386-sequent
  		os=-dynix
  		;;
  	t3e)
  		basic_machine=t3e-cray
  		os=-unicos
  		;;
  	tic54x | c54x*)
  		basic_machine=tic54x-unknown
  		os=-coff
  		;;
  	tx39)
  		basic_machine=mipstx39-unknown
  		;;
  	tx39el)
  		basic_machine=mipstx39el-unknown
  		;;
  	tower | tower-32)
  		basic_machine=m68k-ncr
  		;;
  	udi29k)
  		basic_machine=a29k-amd
  		os=-udi
  		;;
  	ultra3)
  		basic_machine=a29k-nyu
  		os=-sym1
  		;;
  	v810 | necv810)
  		basic_machine=v810-nec
  		os=-none
  		;;
  	vaxv)
  		basic_machine=vax-dec
  		os=-sysv
  		;;
  	vms)
  		basic_machine=vax-dec
  		os=-vms
  		;;
  	vpp*|vx|vx-*)
                 basic_machine=f301-fujitsu
                 ;;
  	vxworks960)
  		basic_machine=i960-wrs
  		os=-vxworks
  		;;
  	vxworks68)
  		basic_machine=m68k-wrs
  		os=-vxworks
  		;;
  	vxworks29k)
  		basic_machine=a29k-wrs
  		os=-vxworks
  		;;
  	w65*)
  		basic_machine=w65-wdc
  		os=-none
  		;;
  	w89k-*)
  		basic_machine=hppa1.1-winbond
  		os=-proelf
  		;;
  	xmp)
  		basic_machine=xmp-cray
  		os=-unicos
  		;;
          xps | xps100)
  		basic_machine=xps100-honeywell
  		;;
  	z8k-*-coff)
  		basic_machine=z8k-unknown
  		os=-sim
  		;;
  	none)
  		basic_machine=none-none
  		os=-none
  		;;
  
  # Here we handle the default manufacturer of certain CPU types.  It is in
  # some cases the only manufacturer, in others, it is the most popular.
  	w89k)
  		basic_machine=hppa1.1-winbond
  		;;
  	op50n)
  		basic_machine=hppa1.1-oki
  		;;
  	op60c)
  		basic_machine=hppa1.1-oki
  		;;
  	mips)
  		if [ x$os = x-linux-gnu ]; then
  			basic_machine=mips-unknown
  		else
  			basic_machine=mips-mips
  		fi
  		;;
  	romp)
  		basic_machine=romp-ibm
  		;;
  	rs6000)
  		basic_machine=rs6000-ibm
  		;;
  	vax)
  		basic_machine=vax-dec
  		;;
  	pdp10)
  		# there are many clones, so DEC is not a safe bet
  		basic_machine=pdp10-unknown
  		;;
  	pdp11)
  		basic_machine=pdp11-dec
  		;;
  	we32k)
  		basic_machine=we32k-att
  		;;
  	sh3 | sh4)
  		basic_machine=sh-unknown
  		;;
  	sparc | sparcv9 | sparcv9b)
  		basic_machine=sparc-sun
  		;;
          cydra)
  		basic_machine=cydra-cydrome
  		;;
  	orion)
  		basic_machine=orion-highlevel
  		;;
  	orion105)
  		basic_machine=clipper-highlevel
  		;;
  	mac | mpw | mac-mpw)
  		basic_machine=m68k-apple
  		;;
  	pmac | pmac-mpw)
  		basic_machine=powerpc-apple
  		;;
  	c4x*)
  		basic_machine=c4x-none
  		os=-coff
  		;;
  	*-unknown)
  		# Make sure to match an already-canonicalized machine name.
  		;;
  	*)
  		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
  		exit 1
  		;;
  esac
  
  # Here we canonicalize certain aliases for manufacturers.
  case $basic_machine in
  	*-digital*)
  		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
  		;;
  	*-commodore*)
  		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
  		;;
  	*)
  		;;
  esac
  
  # Decode manufacturer-specific aliases for certain operating systems.
  
  if [ x"$os" != x"" ]
  then
  case $os in
          # First match some system type aliases
          # that might get confused with valid system types.
  	# -solaris* is a basic system type, with this one exception.
  	-solaris1 | -solaris1.*)
  		os=`echo $os | sed -e 's|solaris1|sunos4|'`
  		;;
  	-solaris)
  		os=-solaris2
  		;;
  	-svr4*)
  		os=-sysv4
  		;;
  	-unixware*)
  		os=-sysv4.2uw
  		;;
  	-gnu/linux*)
  		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
  		;;
  	# First accept the basic system types.
  	# The portable systems comes first.
  	# Each alternative MUST END IN A *, to match a version number.
  	# -sysv* is not here because it comes later, after sysvr4.
  	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
  	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
  	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
  	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
  	      | -aos* \
  	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
  	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
  	      | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
  	      | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
  	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
  	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
  	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
  	      | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
  	      | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
  	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
  	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* | -os2*)
  	# Remember, each alternative MUST END IN *, to match a version number.
  		;;
  	-qnx*)
  		case $basic_machine in
  		    x86-* | i*86-*)
  			;;
  		    *)
  			os=-nto$os
  			;;
  		esac
  		;;
  	-nto*)
  		os=-nto-qnx
  		;;
  	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
  	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
  	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
  		;;
  	-mac*)
  		os=`echo $os | sed -e 's|mac|macos|'`
  		;;
  	-linux*)
  		os=`echo $os | sed -e 's|linux|linux-gnu|'`
  		;;
  	-sunos5*)
  		os=`echo $os | sed -e 's|sunos5|solaris2|'`
  		;;
  	-sunos6*)
  		os=`echo $os | sed -e 's|sunos6|solaris3|'`
  		;;
  	-opened*)
  		os=-openedition
  		;;
  	-wince*)
  		os=-wince
  		;;
  	-osfrose*)
  		os=-osfrose
  		;;
  	-osf*)
  		os=-osf
  		;;
  	-utek*)
  		os=-bsd
  		;;
  	-dynix*)
  		os=-bsd
  		;;
  	-acis*)
  		os=-aos
  		;;
  	-386bsd)
  		os=-bsd
  		;;
  	-ctix* | -uts*)
  		os=-sysv
  		;;
  	-ns2 )
  	        os=-nextstep2
  		;;
  	-nsk*)
  		os=-nsk
  		;;
  	# Preserve the version number of sinix5.
  	-sinix5.*)
  		os=`echo $os | sed -e 's|sinix|sysv|'`
  		;;
  	-sinix*)
  		os=-sysv4
  		;;
  	-triton*)
  		os=-sysv3
  		;;
  	-oss*)
  		os=-sysv3
  		;;
  	-svr4)
  		os=-sysv4
  		;;
  	-svr3)
  		os=-sysv3
  		;;
  	-sysvr4)
  		os=-sysv4
  		;;
  	# This must come after -sysvr4.
  	-sysv*)
  		;;
  	-ose*)
  		os=-ose
  		;;
  	-es1800*)
  		os=-ose
  		;;
  	-xenix)
  		os=-xenix
  		;;
          -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
  	        os=-mint
  		;;
  	-none)
  		;;
  	*)
  		# Get rid of the `-' at the beginning of $os.
  		os=`echo $os | sed 's/[^-]*-//'`
  		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
  		exit 1
  		;;
  esac
  else
  
  # Here we handle the default operating systems that come with various machines.
  # The value should be what the vendor currently ships out the door with their
  # machine or put another way, the most popular os provided with the machine.
  
  # Note that if you're going to try to match "-MANUFACTURER" here (say,
  # "-sun"), then you have to tell the case statement up towards the top
  # that MANUFACTURER isn't an operating system.  Otherwise, code above
  # will signal an error saying that MANUFACTURER isn't an operating
  # system, and we'll never get to this point.
  
  case $basic_machine in
  	*-acorn)
  		os=-riscix1.2
  		;;
  	arm*-rebel)
  		os=-linux
  		;;
  	arm*-semi)
  		os=-aout
  		;;
  	pdp10-*)
  		os=-tops20
  		;;
          pdp11-*)
  		os=-none
  		;;
  	*-dec | vax-*)
  		os=-ultrix4.2
  		;;
  	m68*-apollo)
  		os=-domain
  		;;
  	i386-sun)
  		os=-sunos4.0.2
  		;;
  	m68000-sun)
  		os=-sunos3
  		# This also exists in the configure program, but was not the
  		# default.
  		# os=-sunos4
  		;;
  	m68*-cisco)
  		os=-aout
  		;;
  	mips*-cisco)
  		os=-elf
  		;;
  	mips*-*)
  		os=-elf
  		;;
  	*-tti)	# must be before sparc entry or we get the wrong os.
  		os=-sysv3
  		;;
  	sparc-* | *-sun)
  		os=-sunos4.1.1
  		;;
  	*-be)
  		os=-beos
  		;;
  	*-ibm)
  		os=-aix
  		;;
  	*-wec)
  		os=-proelf
  		;;
  	*-winbond)
  		os=-proelf
  		;;
  	*-oki)
  		os=-proelf
  		;;
  	*-hp)
  		os=-hpux
  		;;
  	*-hitachi)
  		os=-hiux
  		;;
  	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
  		os=-sysv
  		;;
  	*-cbm)
  		os=-amigaos
  		;;
  	*-dg)
  		os=-dgux
  		;;
  	*-dolphin)
  		os=-sysv3
  		;;
  	m68k-ccur)
  		os=-rtu
  		;;
  	m88k-omron*)
  		os=-luna
  		;;
  	*-next )
  		os=-nextstep
  		;;
  	*-sequent)
  		os=-ptx
  		;;
  	*-crds)
  		os=-unos
  		;;
  	*-ns)
  		os=-genix
  		;;
  	i370-*)
  		os=-mvs
  		;;
  	*-next)
  		os=-nextstep3
  		;;
          *-gould)
  		os=-sysv
  		;;
          *-highlevel)
  		os=-bsd
  		;;
  	*-encore)
  		os=-bsd
  		;;
          *-sgi)
  		os=-irix
  		;;
          *-siemens)
  		os=-sysv4
  		;;
  	*-masscomp)
  		os=-rtu
  		;;
  	f30[01]-fujitsu | f700-fujitsu)
  		os=-uxpv
  		;;
  	*-rom68k)
  		os=-coff
  		;;
  	*-*bug)
  		os=-coff
  		;;
  	*-apple)
  		os=-macos
  		;;
  	*-atari*)
  		os=-mint
  		;;
  	*)
  		os=-none
  		;;
  esac
  fi
  
  # Here we handle the case where we know the os, and the CPU type, but not the
  # manufacturer.  We pick the logical manufacturer.
  vendor=unknown
  case $basic_machine in
  	*-unknown)
  		case $os in
  			-riscix*)
  				vendor=acorn
  				;;
  			-sunos*)
  				vendor=sun
  				;;
  			-aix*)
  				vendor=ibm
  				;;
  			-beos*)
  				vendor=be
  				;;
  			-hpux*)
  				vendor=hp
  				;;
  			-mpeix*)
  				vendor=hp
  				;;
  			-hiux*)
  				vendor=hitachi
  				;;
  			-unos*)
  				vendor=crds
  				;;
  			-dgux*)
  				vendor=dg
  				;;
  			-luna*)
  				vendor=omron
  				;;
  			-genix*)
  				vendor=ns
  				;;
  			-mvs* | -opened*)
  				vendor=ibm
  				;;
  			-ptx*)
  				vendor=sequent
  				;;
  			-vxsim* | -vxworks*)
  				vendor=wrs
  				;;
  			-aux*)
  				vendor=apple
  				;;
  			-hms*)
  				vendor=hitachi
  				;;
  			-mpw* | -macos*)
  				vendor=apple
  				;;
  			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
  				vendor=atari
  				;;
  		esac
  		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
  		;;
  esac
  
  echo $basic_machine$os
  exit 0
  
  # Local variables:
  # eval: (add-hook 'write-file-hooks 'time-stamp)
  # time-stamp-start: "timestamp='"
  # time-stamp-format: "%:y-%02m-%02d"
  # time-stamp-end: "'"
  # End:
  Index: ossp-pkg/pcre/configure
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 configure
  --- ossp-pkg/pcre/configure	2000/08/29 19:24:17	1.10
  +++ ossp-pkg/pcre/configure	2001/08/16 10:08:06	1.11
  @@ -1,51 +1,276 @@
   #! /bin/sh
  -
  -# From configure.in Revision: 1.6 
  -
  -SHTOOL="./shtool"
  -
  -T_MD=`$SHTOOL echo -e %B 2>/dev/null`
  -T_ME=`$SHTOOL echo -e %b 2>/dev/null`
  -PCRE_MAJOR=`grep '#define PCRE_MAJOR' pcre.h | awk '{ print $3; }'`
  -PCRE_MINOR=`grep '#define PCRE_MINOR' pcre.h | awk '{ print $3; }'`
  -PCRE_VERSION="$PCRE_MAJOR.$PCRE_MINOR"
  -
  -echo "Configuring ${T_MD}OSSP pcre${T_ME} (Perl-Compatible Regular Expressions) ${T_MD}${PCRE_VERSION}${T_ME}"
  -echo "Copyright (c) 1997-2000 Philip Hazel <ph10@cam.ac.uk>, All rights reserved."
  -echo "Copyright (c) 1997-2000 University of Cambridge, All rights reserved."
  -echo "Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>"
  -PLATFORM=`$SHTOOL guessos`
  -echo "Platform: ${T_MD}${PLATFORM}${T_ME}"
  -echo ""
  -
  +# From configure.ac Revision: 1.6 .
   # Guess values for system-dependent variables and create Makefiles.
  -# Generated automatically using autoconf version 2.13 
  -# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
  +# Generated by Autoconf 2.52.
   #
  +# Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
  +# Free Software Foundation, Inc.
   # This configure script is free software; the Free Software Foundation
   # gives unlimited permission to copy, distribute and modify it.
  +
  +# Find the correct PATH separator.  Usually this is `:', but
  +# DJGPP uses `;' like DOS.
  +if test "X${PATH_SEPARATOR+set}" != Xset; then
  +  UNAME=${UNAME-`uname 2>/dev/null`}
  +  case X$UNAME in
  +    *-DOS) lt_cv_sys_path_separator=';' ;;
  +    *)     lt_cv_sys_path_separator=':' ;;
  +  esac
  +fi
  +
  +# Check that we are running under the correct shell.
  +SHELL=${CONFIG_SHELL-/bin/sh}
  +
  +case X$ECHO in
  +X*--fallback-echo)
  +  # Remove one level of quotation (which was required for Make).
  +  ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','`
  +  ;;
  +esac
  +
  +echo=${ECHO-echo}
  +if test "X$1" = X--no-reexec; then
  +  # Discard the --no-reexec flag, and continue.
  +  shift
  +elif test "X$1" = X--fallback-echo; then
  +  # Avoid inline document here, it may be left over
  +  :
  +elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
  +  # Yippee, $echo works!
  +  :
  +else
  +  # Restart under the correct shell.
  +  exec $SHELL "$0" --no-reexec ${1+"$@"}
  +fi
  +
  +if test "X$1" = X--fallback-echo; then
  +  # used as fallback echo
  +  shift
  +  cat <<EOF
  +
  +EOF
  +  exit 0
  +fi
  +
  +# The HP-UX ksh and POSIX shell print the target directory to stdout
  +# if CDPATH is set.
  +if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
  +
  +if test -z "$ECHO"; then
  +if test "X${echo_test_string+set}" != Xset; then
  +# find a string as large as possible, as long as the shell can cope with it
  +  for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
  +    # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
  +    if (echo_test_string="`eval $cmd`") 2>/dev/null &&
  +       echo_test_string="`eval $cmd`" &&
  +       (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
  +    then
  +      break
  +    fi
  +  done
  +fi
  +
  +if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
  +   echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
  +   test "X$echo_testing_string" = "X$echo_test_string"; then
  +  :
  +else
  +  # The Solaris, AIX, and Digital Unix default echo programs unquote
  +  # backslashes.  This makes it impossible to quote backslashes using
  +  #   echo "$something" | sed 's/\\/\\\\/g'
  +  #
  +  # So, first we look for a working echo in the user's PATH.
  +
  +  IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
  +  for dir in $PATH /usr/ucb; do
  +    if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
  +       test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
  +       echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
  +       test "X$echo_testing_string" = "X$echo_test_string"; then
  +      echo="$dir/echo"
  +      break
  +    fi
  +  done
  +  IFS="$save_ifs"
  +
  +  if test "X$echo" = Xecho; then
  +    # We didn't find a better echo, so look for alternatives.
  +    if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
  +       echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
  +       test "X$echo_testing_string" = "X$echo_test_string"; then
  +      # This shell has a builtin print -r that does the trick.
  +      echo='print -r'
  +    elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
  +	 test "X$CONFIG_SHELL" != X/bin/ksh; then
  +      # If we have ksh, try running configure again with it.
  +      ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
  +      export ORIGINAL_CONFIG_SHELL
  +      CONFIG_SHELL=/bin/ksh
  +      export CONFIG_SHELL
  +      exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
  +    else
  +      # Try using printf.
  +      echo='printf %s\n'
  +      if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
  +	 echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
  +	 test "X$echo_testing_string" = "X$echo_test_string"; then
  +	# Cool, printf works
  +	:
  +      elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
  +	   test "X$echo_testing_string" = 'X\t' &&
  +	   echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
  +	   test "X$echo_testing_string" = "X$echo_test_string"; then
  +	CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
  +	export CONFIG_SHELL
  +	SHELL="$CONFIG_SHELL"
  +	export SHELL
  +	echo="$CONFIG_SHELL $0 --fallback-echo"
  +      elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
  +	   test "X$echo_testing_string" = 'X\t' &&
  +	   echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
  +	   test "X$echo_testing_string" = "X$echo_test_string"; then
  +	echo="$CONFIG_SHELL $0 --fallback-echo"
  +      else
  +	# maybe with a smaller string...
  +	prev=:
  +
  +	for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
  +	  if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
  +	  then
  +	    break
  +	  fi
  +	  prev="$cmd"
  +	done
  +
  +	if test "$prev" != 'sed 50q "$0"'; then
  +	  echo_test_string=`eval $prev`
  +	  export echo_test_string
  +	  exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
  +	else
  +	  # Oops.  We lost completely, so just stick with echo.
  +	  echo=echo
  +	fi
  +      fi
  +    fi
  +  fi
  +fi
  +fi
  +
  +# Copy echo and quote the copy suitably for passing to libtool from
  +# the Makefile, instead of quoting the original, which is used later.
  +ECHO=$echo
  +if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
  +   ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
  +fi
  +
  +# Avoid depending upon Character Ranges.
  +as_cr_letters='abcdefghijklmnopqrstuvwxyz'
  +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  +as_cr_Letters=$as_cr_letters$as_cr_LETTERS
  +as_cr_digits='0123456789'
  +as_cr_alnum=$as_cr_Letters$as_cr_digits
  +
  +# Sed expression to map a string onto a valid variable name.
  +as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
  +
  +# Sed expression to map a string onto a valid CPP name.
  +as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g"
  +
  +# Be Bourne compatible
  +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
  +  emulate sh
  +  NULLCMD=:
  +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
  +  set -o posix
  +fi
  +
  +# Name of the executable.
  +as_me=`echo "$0" |sed 's,.*[\\/],,'`
  +
  +if expr a : '\(a\)' >/dev/null 2>&1; then
  +  as_expr=expr
  +else
  +  as_expr=false
  +fi
  +
  +rm -f conf$$ conf$$.exe conf$$.file
  +echo >conf$$.file
  +if ln -s conf$$.file conf$$ 2>/dev/null; then
  +  # We could just check for DJGPP; but this test a) works b) is more generic
  +  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
  +  if test -f conf$$.exe; then
  +    # Don't use ln at all; we don't have any links
  +    as_ln_s='cp -p'
  +  else
  +    as_ln_s='ln -s'
  +  fi
  +elif ln conf$$.file conf$$ 2>/dev/null; then
  +  as_ln_s=ln
  +else
  +  as_ln_s='cp -p'
  +fi
  +rm -f conf$$ conf$$.exe conf$$.file
  +
  +as_executable_p="test -f"
  +
  +# Support unset when possible.
  +if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
  +  as_unset=unset
  +else
  +  as_unset=false
  +fi
  +
  +# NLS nuisances.
  +$as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; }
  +$as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; }
  +$as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; }
  +$as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; }
  +$as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; }
  +$as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; }
  +$as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; }
  +$as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; }
  +
  +# IFS
  +# We need space, tab and new line, in precisely that order.
  +as_nl='
  +'
  +IFS=" 	$as_nl"
  +
  +# CDPATH.
  +$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; }
  +
  +# Name of the host.
  +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
  +# so uname gets run too.
  +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
  +
  +exec 6>&1
   
  -# Defaults:
  -ac_help=
  +#
  +# Initializations.
  +#
   ac_default_prefix=/usr/local
  -# Any additions from configure.in:
  +cross_compiling=no
  +subdirs=
  +MFLAGS= MAKEFLAGS=
  +SHELL=${CONFIG_SHELL-/bin/sh}
  +
  +# Maximum number of lines to put in a shell here document.
  +# This variable seems obsolete.  It should probably be removed, and
  +# only ac_max_sed_lines should be used.
  +: ${ac_max_here_lines=38}
  +
  +ac_unique_file="README"
   ac_default_prefix=/usr/local
  -ac_help="$ac_help
  -  --enable-utf8           enable UTF8 support (incomplete)"
  -ac_help="$ac_help
  -  --enable-static         build static libraries (default=yes)"
  -ac_help="$ac_help
  -  --enable-shared         build shared libraries (default=yes)"
   
   # Initialize some variables set by options.
  +ac_init_help=
  +ac_init_version=false
   # The variables have the same names as the options, with
   # dashes changed to underlines.
  -build=NONE
  -cache_file=./config.cache
  +cache_file=/dev/null
   exec_prefix=NONE
  -host=NONE
   no_create=
  -nonopt=NONE
   no_recursion=
   prefix=NONE
   program_prefix=NONE
  @@ -54,10 +279,15 @@
   silent=
   site=
   srcdir=
  -target=NONE
   verbose=
   x_includes=NONE
   x_libraries=NONE
  +
  +# Installation directory options.
  +# These are left unexpanded so users can "make install exec_prefix=/foo"
  +# and all the variables that are supposed to be based on exec_prefix
  +# by default will actually change.
  +# Use braces instead of parens because sh, perl, etc. also accept them.
   bindir='${exec_prefix}/bin'
   sbindir='${exec_prefix}/sbin'
   libexecdir='${exec_prefix}/libexec'
  @@ -71,17 +301,16 @@
   infodir='${prefix}/info'
   mandir='${prefix}/man'
   
  -# Initialize some other variables.
  -subdirs=
  -MFLAGS= MAKEFLAGS=
  -SHELL=${CONFIG_SHELL-/bin/sh}
  -# Maximum number of lines to put in a shell here document.
  -ac_max_here_lines=12
  +# Identity of this package.
  +PACKAGE_NAME=
  +PACKAGE_TARNAME=
  +PACKAGE_VERSION=
  +PACKAGE_STRING=
  +PACKAGE_BUGREPORT=
   
   ac_prev=
   for ac_option
   do
  -
     # If the previous option needs an argument, assign it.
     if test -n "$ac_prev"; then
       eval "$ac_prev=\$ac_option"
  @@ -89,59 +318,59 @@
       continue
     fi
   
  -  case "$ac_option" in
  -  -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
  -  *) ac_optarg= ;;
  -  esac
  +  ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
   
     # Accept the important Cygnus configure options, so we can diagnose typos.
   
  -  case "$ac_option" in
  +  case $ac_option in
   
     -bindir | --bindir | --bindi | --bind | --bin | --bi)
       ac_prev=bindir ;;
     -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
  -    bindir="$ac_optarg" ;;
  +    bindir=$ac_optarg ;;
   
     -build | --build | --buil | --bui | --bu)
  -    ac_prev=build ;;
  +    ac_prev=build_alias ;;
     -build=* | --build=* | --buil=* | --bui=* | --bu=*)
  -    build="$ac_optarg" ;;
  +    build_alias=$ac_optarg ;;
   
     -cache-file | --cache-file | --cache-fil | --cache-fi \
     | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
       ac_prev=cache_file ;;
     -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
     | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
  -    cache_file="$ac_optarg" ;;
  +    cache_file=$ac_optarg ;;
  +
  +  --config-cache | -C)
  +    cache_file=config.cache ;;
   
     -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
       ac_prev=datadir ;;
     -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
     | --da=*)
  -    datadir="$ac_optarg" ;;
  +    datadir=$ac_optarg ;;
   
     -disable-* | --disable-*)
  -    ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
  +    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
       # Reject names that are not valid shell variable names.
  -    if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
  -      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
  -    fi
  -    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
  -    eval "enable_${ac_feature}=no" ;;
  +    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
  +      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
  +   { (exit 1); exit 1; }; }
  +    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
  +    eval "enable_$ac_feature=no" ;;
   
     -enable-* | --enable-*)
  -    ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
  +    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
       # Reject names that are not valid shell variable names.
  -    if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
  -      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
  -    fi
  -    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
  -    case "$ac_option" in
  -      *=*) ;;
  +    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
  +      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
  +   { (exit 1); exit 1; }; }
  +    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
  +    case $ac_option in
  +      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
         *) ac_optarg=yes ;;
       esac
  -    eval "enable_${ac_feature}='$ac_optarg'" ;;
  +    eval "enable_$ac_feature='$ac_optarg'" ;;
   
     -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
     | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
  @@ -150,95 +379,47 @@
     -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
     | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
     | --exec=* | --exe=* | --ex=*)
  -    exec_prefix="$ac_optarg" ;;
  +    exec_prefix=$ac_optarg ;;
   
     -gas | --gas | --ga | --g)
       # Obsolete; use --with-gas.
       with_gas=yes ;;
   
  -  -help | --help | --hel | --he)
  -    # Omit some internal or obsolete options to make the list less imposing.
  -    # This message is too long to be a string in the A/UX 3.1 sh.
  -    cat << EOF
  -Usage: configure [options] [host]
  -Options: [defaults in brackets after descriptions]
  -Configuration:
  -  --cache-file=FILE       cache test results in FILE
  -  --help                  print this message
  -  --no-create             do not create output files
  -  --quiet, --silent       do not print \`checking...' messages
  -  --version               print the version of autoconf that created configure
  -Directory and file names:
  -  --prefix=PREFIX         install architecture-independent files in PREFIX
  -                          [$ac_default_prefix]
  -  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
  -                          [same as prefix]
  -  --bindir=DIR            user executables in DIR [EPREFIX/bin]
  -  --sbindir=DIR           system admin executables in DIR [EPREFIX/sbin]
  -  --libexecdir=DIR        program executables in DIR [EPREFIX/libexec]
  -  --datadir=DIR           read-only architecture-independent data in DIR
  -                          [PREFIX/share]
  -  --sysconfdir=DIR        read-only single-machine data in DIR [PREFIX/etc]
  -  --sharedstatedir=DIR    modifiable architecture-independent data in DIR
  -                          [PREFIX/com]
  -  --localstatedir=DIR     modifiable single-machine data in DIR [PREFIX/var]
  -  --libdir=DIR            object code libraries in DIR [EPREFIX/lib]
  -  --includedir=DIR        C header files in DIR [PREFIX/include]
  -  --oldincludedir=DIR     C header files for non-gcc in DIR [/usr/include]
  -  --infodir=DIR           info documentation in DIR [PREFIX/info]
  -  --mandir=DIR            man documentation in DIR [PREFIX/man]
  -  --srcdir=DIR            find the sources in DIR [configure dir or ..]
  -  --program-prefix=PREFIX prepend PREFIX to installed program names
  -  --program-suffix=SUFFIX append SUFFIX to installed program names
  -  --program-transform-name=PROGRAM
  -                          run sed PROGRAM on installed program names
  -EOF
  -    cat << EOF
  -Host type:
  -  --build=BUILD           configure for building on BUILD [BUILD=HOST]
  -  --host=HOST             configure for HOST [guessed]
  -  --target=TARGET         configure for TARGET [TARGET=HOST]
  -Features and packages:
  -  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
  -  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
  -  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
  -  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
  -  --x-includes=DIR        X include files are in DIR
  -  --x-libraries=DIR       X library files are in DIR
  -EOF
  -    if test -n "$ac_help"; then
  -      echo "--enable and --with options recognized:$ac_help"
  -    fi
  -    exit 0 ;;
  +  -help | --help | --hel | --he | -h)
  +    ac_init_help=long ;;
  +  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
  +    ac_init_help=recursive ;;
  +  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
  +    ac_init_help=short ;;
   
     -host | --host | --hos | --ho)
  -    ac_prev=host ;;
  +    ac_prev=host_alias ;;
     -host=* | --host=* | --hos=* | --ho=*)
  -    host="$ac_optarg" ;;
  +    host_alias=$ac_optarg ;;
   
     -includedir | --includedir | --includedi | --included | --include \
     | --includ | --inclu | --incl | --inc)
       ac_prev=includedir ;;
     -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
     | --includ=* | --inclu=* | --incl=* | --inc=*)
  -    includedir="$ac_optarg" ;;
  +    includedir=$ac_optarg ;;
   
     -infodir | --infodir | --infodi | --infod | --info | --inf)
       ac_prev=infodir ;;
     -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
  -    infodir="$ac_optarg" ;;
  +    infodir=$ac_optarg ;;
   
     -libdir | --libdir | --libdi | --libd)
       ac_prev=libdir ;;
     -libdir=* | --libdir=* | --libdi=* | --libd=*)
  -    libdir="$ac_optarg" ;;
  +    libdir=$ac_optarg ;;
   
     -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
     | --libexe | --libex | --libe)
       ac_prev=libexecdir ;;
     -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
     | --libexe=* | --libex=* | --libe=*)
  -    libexecdir="$ac_optarg" ;;
  +    libexecdir=$ac_optarg ;;
   
     -localstatedir | --localstatedir | --localstatedi | --localstated \
     | --localstate | --localstat | --localsta | --localst \
  @@ -247,12 +428,12 @@
     -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
     | --localstate=* | --localstat=* | --localsta=* | --localst=* \
     | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
  -    localstatedir="$ac_optarg" ;;
  +    localstatedir=$ac_optarg ;;
   
     -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
       ac_prev=mandir ;;
     -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
  -    mandir="$ac_optarg" ;;
  +    mandir=$ac_optarg ;;
   
     -nfp | --nfp | --nf)
       # Obsolete; use --without-fp.
  @@ -273,26 +454,26 @@
     -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
     | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
     | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
  -    oldincludedir="$ac_optarg" ;;
  +    oldincludedir=$ac_optarg ;;
   
     -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
       ac_prev=prefix ;;
     -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
  -    prefix="$ac_optarg" ;;
  +    prefix=$ac_optarg ;;
   
     -program-prefix | --program-prefix | --program-prefi | --program-pref \
     | --program-pre | --program-pr | --program-p)
       ac_prev=program_prefix ;;
     -program-prefix=* | --program-prefix=* | --program-prefi=* \
     | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
  -    program_prefix="$ac_optarg" ;;
  +    program_prefix=$ac_optarg ;;
   
     -program-suffix | --program-suffix | --program-suffi | --program-suff \
     | --program-suf | --program-su | --program-s)
       ac_prev=program_suffix ;;
     -program-suffix=* | --program-suffix=* | --program-suffi=* \
     | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
  -    program_suffix="$ac_optarg" ;;
  +    program_suffix=$ac_optarg ;;
   
     -program-transform-name | --program-transform-name \
     | --program-transform-nam | --program-transform-na \
  @@ -309,7 +490,7 @@
     | --program-transfo=* | --program-transf=* \
     | --program-trans=* | --program-tran=* \
     | --progr-tra=* | --program-tr=* | --program-t=*)
  -    program_transform_name="$ac_optarg" ;;
  +    program_transform_name=$ac_optarg ;;
   
     -q | -quiet | --quiet | --quie | --qui | --qu | --q \
     | -silent | --silent | --silen | --sile | --sil)
  @@ -319,7 +500,7 @@
       ac_prev=sbindir ;;
     -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
     | --sbi=* | --sb=*)
  -    sbindir="$ac_optarg" ;;
  +    sbindir=$ac_optarg ;;
   
     -sharedstatedir | --sharedstatedir | --sharedstatedi \
     | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
  @@ -330,58 +511,57 @@
     | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
     | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
     | --sha=* | --sh=*)
  -    sharedstatedir="$ac_optarg" ;;
  +    sharedstatedir=$ac_optarg ;;
   
     -site | --site | --sit)
       ac_prev=site ;;
     -site=* | --site=* | --sit=*)
  -    site="$ac_optarg" ;;
  +    site=$ac_optarg ;;
   
     -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
       ac_prev=srcdir ;;
     -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
  -    srcdir="$ac_optarg" ;;
  +    srcdir=$ac_optarg ;;
   
     -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
     | --syscon | --sysco | --sysc | --sys | --sy)
       ac_prev=sysconfdir ;;
     -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
     | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
  -    sysconfdir="$ac_optarg" ;;
  +    sysconfdir=$ac_optarg ;;
   
     -target | --target | --targe | --targ | --tar | --ta | --t)
  -    ac_prev=target ;;
  +    ac_prev=target_alias ;;
     -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
  -    target="$ac_optarg" ;;
  +    target_alias=$ac_optarg ;;
   
     -v | -verbose | --verbose | --verbos | --verbo | --verb)
       verbose=yes ;;
   
  -  -version | --version | --versio | --versi | --vers)
  -    echo "configure generated by autoconf version 2.13"
  -    exit 0 ;;
  +  -version | --version | --versio | --versi | --vers | -V)
  +    ac_init_version=: ;;
   
     -with-* | --with-*)
  -    ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
  +    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
       # Reject names that are not valid shell variable names.
  -    if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
  -      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
  -    fi
  +    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
  +      { echo "$as_me: error: invalid package name: $ac_package" >&2
  +   { (exit 1); exit 1; }; }
       ac_package=`echo $ac_package| sed 's/-/_/g'`
  -    case "$ac_option" in
  -      *=*) ;;
  +    case $ac_option in
  +      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
         *) ac_optarg=yes ;;
       esac
  -    eval "with_${ac_package}='$ac_optarg'" ;;
  +    eval "with_$ac_package='$ac_optarg'" ;;
   
     -without-* | --without-*)
  -    ac_package=`echo $ac_option|sed -e 's/-*without-//'`
  +    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
       # Reject names that are not valid shell variable names.
  -    if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
  -      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
  -    fi
  -    ac_package=`echo $ac_package| sed 's/-/_/g'`
  -    eval "with_${ac_package}=no" ;;
  +    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
  +      { echo "$as_me: error: invalid package name: $ac_package" >&2
  +   { (exit 1); exit 1; }; }
  +    ac_package=`echo $ac_package | sed 's/-/_/g'`
  +    eval "with_$ac_package=no" ;;
   
     --x)
       # Obsolete; use --with-x.
  @@ -392,98 +572,98 @@
       ac_prev=x_includes ;;
     -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
     | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
  -    x_includes="$ac_optarg" ;;
  +    x_includes=$ac_optarg ;;
   
     -x-libraries | --x-libraries | --x-librarie | --x-librari \
     | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
       ac_prev=x_libraries ;;
     -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
     | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
  -    x_libraries="$ac_optarg" ;;
  +    x_libraries=$ac_optarg ;;
   
  -  -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
  +  -*) { echo "$as_me: error: unrecognized option: $ac_option
  +Try \`$0 --help' for more information." >&2
  +   { (exit 1); exit 1; }; }
       ;;
   
  +  *=*)
  +    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
  +    # Reject names that are not valid shell variable names.
  +    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
  +      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
  +   { (exit 1); exit 1; }; }
  +    ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
  +    eval "$ac_envvar='$ac_optarg'"
  +    export $ac_envvar ;;
  +
     *)
  -    if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
  -      echo "configure: warning: $ac_option: invalid host type" 1>&2
  -    fi
  -    if test "x$nonopt" != xNONE; then
  -      { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
  -    fi
  -    nonopt="$ac_option"
  +    # FIXME: should be removed in autoconf 3.0.
  +    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
  +    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
  +      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
  +    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
       ;;
   
     esac
   done
   
   if test -n "$ac_prev"; then
  -  { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
  -fi
  -
  -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
  -
  -# File descriptor usage:
  -# 0 standard input
  -# 1 file creation
  -# 2 errors and warnings
  -# 3 some systems may open it to /dev/tty
  -# 4 used on the Kubota Titan
  -# 6 checking for... messages and results
  -# 5 compiler messages saved in config.log
  -if test "$silent" = yes; then
  -  exec 6>/dev/null
  -else
  -  exec 6>&1
  +  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
  +  { echo "$as_me: error: missing argument to $ac_option" >&2
  +   { (exit 1); exit 1; }; }
   fi
  -exec 5>./config.log
   
  -echo "\
  -This file contains any messages produced by compilers while
  -running configure, to aid debugging if configure makes a mistake.
  -" 1>&5
  +# Be sure to have absolute paths.
  +for ac_var in exec_prefix prefix
  +do
  +  eval ac_val=$`echo $ac_var`
  +  case $ac_val in
  +    [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
  +    *)  { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2
  +   { (exit 1); exit 1; }; };;
  +  esac
  +done
   
  -# Strip out --no-create and --no-recursion so they do not pile up.
  -# Also quote any args containing shell metacharacters.
  -ac_configure_args=
  -for ac_arg
  +# Be sure to have absolute paths.
  +for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
  +              localstatedir libdir includedir oldincludedir infodir mandir
   do
  -  case "$ac_arg" in
  -  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
  -  | --no-cr | --no-c) ;;
  -  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
  -  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
  -  *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
  -  ac_configure_args="$ac_configure_args '$ac_arg'" ;;
  -  *) ac_configure_args="$ac_configure_args $ac_arg" ;;
  +  eval ac_val=$`echo $ac_var`
  +  case $ac_val in
  +    [\\/$]* | ?:[\\/]* ) ;;
  +    *)  { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2
  +   { (exit 1); exit 1; }; };;
     esac
   done
   
  -# NLS nuisances.
  -# Only set these to C if already set.  These must not be set unconditionally
  -# because not all systems understand e.g. LANG=C (notably SCO).
  -# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
  -# Non-C LC_CTYPE values break the ctype check.
  -if test "${LANG+set}"   = set; then LANG=C;   export LANG;   fi
  -if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
  -if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
  -if test "${LC_CTYPE+set}"    = set; then LC_CTYPE=C;    export LC_CTYPE;    fi
  +# There might be people who depend on the old broken behavior: `$host'
  +# used to hold the argument of --host etc.
  +build=$build_alias
  +host=$host_alias
  +target=$target_alias
  +
  +# FIXME: should be removed in autoconf 3.0.
  +if test "x$host_alias" != x; then
  +  if test "x$build_alias" = x; then
  +    cross_compiling=maybe
  +    echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
  +    If a cross compiler is detected then cross compile mode will be used." >&2
  +  elif test "x$build_alias" != "x$host_alias"; then
  +    cross_compiling=yes
  +  fi
  +fi
   
  -# confdefs.h avoids OS command line length limits that DEFS can exceed.
  -rm -rf conftest* confdefs.h
  -# AIX cpp loses on an empty file, so make sure it contains at least a newline.
  -echo > confdefs.h
  +ac_tool_prefix=
  +test -n "$host_alias" && ac_tool_prefix=$host_alias-
   
  -# A filename unique to this package, relative to the directory that
  -# configure is in, which we can look for to find out if srcdir is correct.
  -ac_unique_file=README
  +test "$silent" = yes && exec 6>/dev/null
   
   # Find the source files, if location was not specified.
   if test -z "$srcdir"; then
     ac_srcdir_defaulted=yes
     # Try the directory containing this script, then its parent.
     ac_prog=$0
  -  ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
  +  ac_confdir=`echo "$ac_prog" | sed 's%[\\/][^\\/][^\\/]*$%%'`
     test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
     srcdir=$ac_confdir
     if test ! -r $srcdir/$ac_unique_file; then
  @@ -494,13 +674,314 @@
   fi
   if test ! -r $srcdir/$ac_unique_file; then
     if test "$ac_srcdir_defaulted" = yes; then
  -    { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
  +    { echo "$as_me: error: cannot find sources in $ac_confdir or .." >&2
  +   { (exit 1); exit 1; }; }
     else
  -    { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
  +    { echo "$as_me: error: cannot find sources in $srcdir" >&2
  +   { (exit 1); exit 1; }; }
     fi
  +fi
  +srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
  +ac_env_build_alias_set=${build_alias+set}
  +ac_env_build_alias_value=$build_alias
  +ac_cv_env_build_alias_set=${build_alias+set}
  +ac_cv_env_build_alias_value=$build_alias
  +ac_env_host_alias_set=${host_alias+set}
  +ac_env_host_alias_value=$host_alias
  +ac_cv_env_host_alias_set=${host_alias+set}
  +ac_cv_env_host_alias_value=$host_alias
  +ac_env_target_alias_set=${target_alias+set}
  +ac_env_target_alias_value=$target_alias
  +ac_cv_env_target_alias_set=${target_alias+set}
  +ac_cv_env_target_alias_value=$target_alias
  +ac_env_CC_set=${CC+set}
  +ac_env_CC_value=$CC
  +ac_cv_env_CC_set=${CC+set}
  +ac_cv_env_CC_value=$CC
  +ac_env_CFLAGS_set=${CFLAGS+set}
  +ac_env_CFLAGS_value=$CFLAGS
  +ac_cv_env_CFLAGS_set=${CFLAGS+set}
  +ac_cv_env_CFLAGS_value=$CFLAGS
  +ac_env_LDFLAGS_set=${LDFLAGS+set}
  +ac_env_LDFLAGS_value=$LDFLAGS
  +ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
  +ac_cv_env_LDFLAGS_value=$LDFLAGS
  +ac_env_CPPFLAGS_set=${CPPFLAGS+set}
  +ac_env_CPPFLAGS_value=$CPPFLAGS
  +ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
  +ac_cv_env_CPPFLAGS_value=$CPPFLAGS
  +ac_env_CPP_set=${CPP+set}
  +ac_env_CPP_value=$CPP
  +ac_cv_env_CPP_set=${CPP+set}
  +ac_cv_env_CPP_value=$CPP
  +
  +#
  +# Report the --help message.
  +#
  +if test "$ac_init_help" = "long"; then
  +  # Omit some internal or obsolete options to make the list less imposing.
  +  # This message is too long to be a string in the A/UX 3.1 sh.
  +  cat <<EOF
  +\`configure' configures this package to adapt to many kinds of systems.
  +
  +Usage: $0 [OPTION]... [VAR=VALUE]...
  +
  +To assign environment variables (e.g., CC, CFLAGS...), specify them as
  +VAR=VALUE.  See below for descriptions of some of the useful variables.
  +
  +Defaults for the options are specified in brackets.
  +
  +Configuration:
  +  -h, --help              display this help and exit
  +      --help=short        display options specific to this package
  +      --help=recursive    display the short help of all the included packages
  +  -V, --version           display version information and exit
  +  -q, --quiet, --silent   do not print \`checking...' messages
  +      --cache-file=FILE   cache test results in FILE [disabled]
  +  -C, --config-cache      alias for \`--cache-file=config.cache'
  +  -n, --no-create         do not create output files
  +      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
  +
  +EOF
  +
  +  cat <<EOF
  +Installation directories:
  +  --prefix=PREFIX         install architecture-independent files in PREFIX
  +                          [$ac_default_prefix]
  +  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
  +                          [PREFIX]
  +
  +By default, \`make install' will install all the files in
  +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
  +an installation prefix other than \`$ac_default_prefix' using \`--prefix',
  +for instance \`--prefix=\$HOME'.
  +
  +For better control, use the options below.
  +
  +Fine tuning of the installation directories:
  +  --bindir=DIR           user executables [EPREFIX/bin]
  +  --sbindir=DIR          system admin executables [EPREFIX/sbin]
  +  --libexecdir=DIR       program executables [EPREFIX/libexec]
  +  --datadir=DIR          read-only architecture-independent data [PREFIX/share]
  +  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
  +  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
  +  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
  +  --libdir=DIR           object code libraries [EPREFIX/lib]
  +  --includedir=DIR       C header files [PREFIX/include]
  +  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
  +  --infodir=DIR          info documentation [PREFIX/info]
  +  --mandir=DIR           man documentation [PREFIX/man]
  +EOF
  +
  +  cat <<\EOF
  +
  +System types:
  +  --build=BUILD     configure for building on BUILD [guessed]
  +  --host=HOST       build programs to run on HOST [BUILD]
  +EOF
  +fi
  +
  +if test -n "$ac_init_help"; then
  +
  +  cat <<\EOF
  +
  +Optional Features:
  +  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
  +  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
  +  --enable-utf8           enable UTF8 support (incomplete)
  +  --enable-shared=PKGS  build shared libraries default=yes
  +  --enable-static=PKGS  build static libraries default=yes
  +  --enable-fast-install=PKGS  optimize for fast installation default=yes
  +  --disable-libtool-lock  avoid locking (might break parallel builds)
  +
  +Optional Packages:
  +  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
  +  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
  +  --with-gnu-ld           assume the C compiler uses GNU ld default=no
  +  --with-pic              try to use only PIC/non-PIC objects default=use both
  +
  +Some influential environment variables:
  +  CC          C compiler command
  +  CFLAGS      C compiler flags
  +  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
  +              nonstandard directory <lib dir>
  +  CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
  +              headers in a nonstandard directory <include dir>
  +  CPP         C preprocessor
  +
  +Use these variables to override the choices made by `configure' or to help
  +it to find libraries and programs with nonstandard names/locations.
  +
  +EOF
  +fi
  +
  +if test "$ac_init_help" = "recursive"; then
  +  # If there are subdirs, report their specific --help.
  +  ac_popdir=`pwd`
  +  for ac_subdir in : $ac_subdirs_all; do test "x$ac_subdir" = x: && continue
  +    cd $ac_subdir
  +    # A "../" for each directory in /$ac_subdir.
  +    ac_dots=`echo $ac_subdir |
  +             sed 's,^\./,,;s,[^/]$,&/,;s,[^/]*/,../,g'`
  +
  +    case $srcdir in
  +    .) # No --srcdir option.  We are building in place.
  +      ac_sub_srcdir=$srcdir ;;
  +    [\\/]* | ?:[\\/]* ) # Absolute path.
  +      ac_sub_srcdir=$srcdir/$ac_subdir ;;
  +    *) # Relative path.
  +      ac_sub_srcdir=$ac_dots$srcdir/$ac_subdir ;;
  +    esac
  +
  +    # Check for guested configure; otherwise get Cygnus style configure.
  +    if test -f $ac_sub_srcdir/configure.gnu; then
  +      echo
  +      $SHELL $ac_sub_srcdir/configure.gnu  --help=recursive
  +    elif test -f $ac_sub_srcdir/configure; then
  +      echo
  +      $SHELL $ac_sub_srcdir/configure  --help=recursive
  +    elif test -f $ac_sub_srcdir/configure.ac ||
  +           test -f $ac_sub_srcdir/configure.in; then
  +      echo
  +      $ac_configure --help
  +    else
  +      echo "$as_me: WARNING: no configuration information is in $ac_subdir" >&2
  +    fi
  +    cd $ac_popdir
  +  done
  +fi
  +
  +test -n "$ac_init_help" && exit 0
  +if $ac_init_version; then
  +  cat <<\EOF
  +
  +Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
  +Free Software Foundation, Inc.
  +This configure script is free software; the Free Software Foundation
  +gives unlimited permission to copy, distribute and modify it.
  +EOF
  +  exit 0
   fi
  -srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
  +exec 5>config.log
  +cat >&5 <<EOF
  +This file contains any messages produced by compilers while
  +running configure, to aid debugging if configure makes a mistake.
  +
  +It was created by $as_me, which was
  +generated by GNU Autoconf 2.52.  Invocation command line was
  +
  +  $ $0 $@
   
  +EOF
  +{
  +cat <<_ASUNAME
  +## ---------- ##
  +## Platform.  ##
  +## ---------- ##
  +
  +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
  +uname -m = `(uname -m) 2>/dev/null || echo unknown`
  +uname -r = `(uname -r) 2>/dev/null || echo unknown`
  +uname -s = `(uname -s) 2>/dev/null || echo unknown`
  +uname -v = `(uname -v) 2>/dev/null || echo unknown`
  +
  +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
  +/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
  +
  +/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
  +/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
  +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
  +hostinfo               = `(hostinfo) 2>/dev/null               || echo unknown`
  +/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
  +/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
  +/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
  +
  +PATH = $PATH
  +
  +_ASUNAME
  +} >&5
  +
  +cat >&5 <<EOF
  +## ------------ ##
  +## Core tests.  ##
  +## ------------ ##
  +
  +EOF
  +
  +# Keep a trace of the command line.
  +# Strip out --no-create and --no-recursion so they do not pile up.
  +# Also quote any args containing shell meta-characters.
  +ac_configure_args=
  +ac_sep=
  +for ac_arg
  +do
  +  case $ac_arg in
  +  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
  +  | --no-cr | --no-c) ;;
  +  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
  +  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
  +  *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
  +    ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"`
  +    ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
  +    ac_sep=" " ;;
  +  *) ac_configure_args="$ac_configure_args$ac_sep$ac_arg"
  +     ac_sep=" " ;;
  +  esac
  +  # Get rid of the leading space.
  +done
  +
  +# When interrupted or exit'd, cleanup temporary files, and complete
  +# config.log.  We remove comments because anyway the quotes in there
  +# would cause problems or look ugly.
  +trap 'exit_status=$?
  +  # Save into config.log some information that might help in debugging.
  +  echo >&5
  +  echo "## ----------------- ##" >&5
  +  echo "## Cache variables.  ##" >&5
  +  echo "## ----------------- ##" >&5
  +  echo >&5
  +  # The following way of writing the cache mishandles newlines in values,
  +{
  +  (set) 2>&1 |
  +    case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
  +    *ac_space=\ *)
  +      sed -n \
  +        "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
  +    	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
  +      ;;
  +    *)
  +      sed -n \
  +        "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
  +      ;;
  +    esac;
  +} >&5
  +  sed "/^$/d" confdefs.h >conftest.log
  +  if test -s conftest.log; then
  +    echo >&5
  +    echo "## ------------ ##" >&5
  +    echo "## confdefs.h.  ##" >&5
  +    echo "## ------------ ##" >&5
  +    echo >&5
  +    cat conftest.log >&5
  +  fi
  +  (echo; echo) >&5
  +  test "$ac_signal" != 0 &&
  +    echo "$as_me: caught signal $ac_signal" >&5
  +  echo "$as_me: exit $exit_status" >&5
  +  rm -rf conftest* confdefs* core core.* *.core conf$$* $ac_clean_files &&
  +    exit $exit_status
  +     ' 0
  +for ac_signal in 1 2 13 15; do
  +  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
  +done
  +ac_signal=0
  +
  +# confdefs.h avoids OS command line length limits that DEFS can exceed.
  +rm -rf conftest* confdefs.h
  +# AIX cpp loses on an empty file, so make sure it contains at least a newline.
  +echo >confdefs.h
  +
  +# Let the site file select an alternate cache file if it wants to.
   # Prefer explicitly selected file to automatically selected ones.
   if test -z "$CONFIG_SITE"; then
     if test "x$prefix" != xNONE; then
  @@ -511,252 +992,682 @@
   fi
   for ac_site_file in $CONFIG_SITE; do
     if test -r "$ac_site_file"; then
  -    echo "loading site script $ac_site_file"
  +    { echo "$as_me:995: loading site script $ac_site_file" >&5
  +echo "$as_me: loading site script $ac_site_file" >&6;}
  +    cat "$ac_site_file" >&5
       . "$ac_site_file"
     fi
   done
   
   if test -r "$cache_file"; then
  -  echo "loading cache $cache_file"
  -  . $cache_file
  +  # Some versions of bash will fail to source /dev/null (special
  +  # files actually), so we avoid doing that.
  +  if test -f "$cache_file"; then
  +    { echo "$as_me:1006: loading cache $cache_file" >&5
  +echo "$as_me: loading cache $cache_file" >&6;}
  +    case $cache_file in
  +      [\\/]* | ?:[\\/]* ) . $cache_file;;
  +      *)                      . ./$cache_file;;
  +    esac
  +  fi
   else
  -  echo "creating cache $cache_file"
  -  > $cache_file
  +  { echo "$as_me:1014: creating cache $cache_file" >&5
  +echo "$as_me: creating cache $cache_file" >&6;}
  +  >$cache_file
  +fi
  +
  +# Check that the precious variables saved in the cache have kept the same
  +# value.
  +ac_cache_corrupted=false
  +for ac_var in `(set) 2>&1 |
  +               sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
  +  eval ac_old_set=\$ac_cv_env_${ac_var}_set
  +  eval ac_new_set=\$ac_env_${ac_var}_set
  +  eval ac_old_val="\$ac_cv_env_${ac_var}_value"
  +  eval ac_new_val="\$ac_env_${ac_var}_value"
  +  case $ac_old_set,$ac_new_set in
  +    set,)
  +      { echo "$as_me:1030: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
  +echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
  +      ac_cache_corrupted=: ;;
  +    ,set)
  +      { echo "$as_me:1034: error: \`$ac_var' was not set in the previous run" >&5
  +echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
  +      ac_cache_corrupted=: ;;
  +    ,);;
  +    *)
  +      if test "x$ac_old_val" != "x$ac_new_val"; then
  +        { echo "$as_me:1040: error: \`$ac_var' has changed since the previous run:" >&5
  +echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
  +        { echo "$as_me:1042:   former value:  $ac_old_val" >&5
  +echo "$as_me:   former value:  $ac_old_val" >&2;}
  +        { echo "$as_me:1044:   current value: $ac_new_val" >&5
  +echo "$as_me:   current value: $ac_new_val" >&2;}
  +        ac_cache_corrupted=:
  +      fi;;
  +  esac
  +  # Pass precious variables to config.status.  It doesn't matter if
  +  # we pass some twice (in addition to the command line arguments).
  +  if test "$ac_new_set" = set; then
  +    case $ac_new_val in
  +    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
  +      ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"`
  +      ac_configure_args="$ac_configure_args '$ac_arg'"
  +      ;;
  +    *) ac_configure_args="$ac_configure_args $ac_var=$ac_new_val"
  +       ;;
  +    esac
  +  fi
  +done
  +if $ac_cache_corrupted; then
  +  { echo "$as_me:1063: error: changes in the environment can compromise the build" >&5
  +echo "$as_me: error: changes in the environment can compromise the build" >&2;}
  +  { { echo "$as_me:1065: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
  +echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
  +   { (exit 1); exit 1; }; }
   fi
   
   ac_ext=c
  -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
   ac_cpp='$CPP $CPPFLAGS'
  -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
  -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
  -cross_compiling=$ac_cv_prog_cc_cross
  -
  -ac_exeext=
  -ac_objext=o
  -if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
  -  # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
  -  if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
  -    ac_n= ac_c='
  -' ac_t='	'
  -  else
  -    ac_n=-n ac_c= ac_t=
  -  fi
  +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  +ac_compiler_gnu=$ac_cv_c_compiler_gnu
  +
  +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
  +  *c*,-n*) ECHO_N= ECHO_C='
  +' ECHO_T='	' ;;
  +  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
  +  *)      ECHO_N= ECHO_C='\c' ECHO_T= ;;
  +esac
  +echo "#! $SHELL" >conftest.sh
  +echo  "exit 0"   >>conftest.sh
  +chmod +x conftest.sh
  +if { (echo "$as_me:1085: PATH=\".;.\"; conftest.sh") >&5
  +  (PATH=".;."; conftest.sh) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1088: \$? = $ac_status" >&5
  +  (exit $ac_status); }; then
  +  ac_path_separator=';'
   else
  -  ac_n= ac_c='\c' ac_t=
  +  ac_path_separator=:
   fi
  -
  +PATH_SEPARATOR="$ac_path_separator"
  +rm -f conftest.sh
   
  +ac_config_headers="$ac_config_headers config.h"
   
  +ac_ext=c
  +ac_cpp='$CPP $CPPFLAGS'
  +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  +ac_compiler_gnu=$ac_cv_c_compiler_gnu
  +if test -n "$ac_tool_prefix"; then
  +  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
  +set dummy ${ac_tool_prefix}gcc; ac_word=$2
  +echo "$as_me:1107: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_CC+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test -n "$CC"; then
  +  ac_cv_prog_CC="$CC" # Let the user override the test.
  +else
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +ac_cv_prog_CC="${ac_tool_prefix}gcc"
  +echo "$as_me:1122: found $ac_dir/$ac_word" >&5
  +break
  +done
   
  +fi
  +fi
  +CC=$ac_cv_prog_CC
  +if test -n "$CC"; then
  +  echo "$as_me:1130: result: $CC" >&5
  +echo "${ECHO_T}$CC" >&6
  +else
  +  echo "$as_me:1133: result: no" >&5
  +echo "${ECHO_T}no" >&6
  +fi
   
  -# Extract the first word of "gcc", so it can be a program name with args.
  +fi
  +if test -z "$ac_cv_prog_CC"; then
  +  ac_ct_CC=$CC
  +  # Extract the first word of "gcc", so it can be a program name with args.
   set dummy gcc; ac_word=$2
  -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
  -echo "configure:556: checking for $ac_word" >&5
  -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +echo "$as_me:1142: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test -n "$ac_ct_CC"; then
  +  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
  +else
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +ac_cv_prog_ac_ct_CC="gcc"
  +echo "$as_me:1157: found $ac_dir/$ac_word" >&5
  +break
  +done
  +
  +fi
  +fi
  +ac_ct_CC=$ac_cv_prog_ac_ct_CC
  +if test -n "$ac_ct_CC"; then
  +  echo "$as_me:1165: result: $ac_ct_CC" >&5
  +echo "${ECHO_T}$ac_ct_CC" >&6
  +else
  +  echo "$as_me:1168: result: no" >&5
  +echo "${ECHO_T}no" >&6
  +fi
  +
  +  CC=$ac_ct_CC
  +else
  +  CC="$ac_cv_prog_CC"
  +fi
  +
  +if test -z "$CC"; then
  +  if test -n "$ac_tool_prefix"; then
  +  # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
  +set dummy ${ac_tool_prefix}cc; ac_word=$2
  +echo "$as_me:1181: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_CC+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
     if test -n "$CC"; then
     ac_cv_prog_CC="$CC" # Let the user override the test.
   else
  -  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
  -  ac_dummy="$PATH"
  -  for ac_dir in $ac_dummy; do
  -    test -z "$ac_dir" && ac_dir=.
  -    if test -f $ac_dir/$ac_word; then
  -      ac_cv_prog_CC="gcc"
  -      break
  -    fi
  -  done
  -  IFS="$ac_save_ifs"
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +ac_cv_prog_CC="${ac_tool_prefix}cc"
  +echo "$as_me:1196: found $ac_dir/$ac_word" >&5
  +break
  +done
  +
   fi
   fi
  -CC="$ac_cv_prog_CC"
  +CC=$ac_cv_prog_CC
   if test -n "$CC"; then
  -  echo "$ac_t""$CC" 1>&6
  +  echo "$as_me:1204: result: $CC" >&5
  +echo "${ECHO_T}$CC" >&6
  +else
  +  echo "$as_me:1207: result: no" >&5
  +echo "${ECHO_T}no" >&6
  +fi
  +
  +fi
  +if test -z "$ac_cv_prog_CC"; then
  +  ac_ct_CC=$CC
  +  # Extract the first word of "cc", so it can be a program name with args.
  +set dummy cc; ac_word=$2
  +echo "$as_me:1216: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test -n "$ac_ct_CC"; then
  +  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
  +else
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +ac_cv_prog_ac_ct_CC="cc"
  +echo "$as_me:1231: found $ac_dir/$ac_word" >&5
  +break
  +done
  +
  +fi
  +fi
  +ac_ct_CC=$ac_cv_prog_ac_ct_CC
  +if test -n "$ac_ct_CC"; then
  +  echo "$as_me:1239: result: $ac_ct_CC" >&5
  +echo "${ECHO_T}$ac_ct_CC" >&6
  +else
  +  echo "$as_me:1242: result: no" >&5
  +echo "${ECHO_T}no" >&6
  +fi
  +
  +  CC=$ac_ct_CC
   else
  -  echo "$ac_t""no" 1>&6
  +  CC="$ac_cv_prog_CC"
   fi
   
  +fi
   if test -z "$CC"; then
     # Extract the first word of "cc", so it can be a program name with args.
   set dummy cc; ac_word=$2
  -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
  -echo "configure:586: checking for $ac_word" >&5
  -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +echo "$as_me:1255: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_CC+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
     if test -n "$CC"; then
     ac_cv_prog_CC="$CC" # Let the user override the test.
   else
  -  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
     ac_prog_rejected=no
  -  ac_dummy="$PATH"
  -  for ac_dir in $ac_dummy; do
  -    test -z "$ac_dir" && ac_dir=.
  -    if test -f $ac_dir/$ac_word; then
  -      if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
  -        ac_prog_rejected=yes
  -	continue
  -      fi
  -      ac_cv_prog_CC="cc"
  -      break
  -    fi
  -  done
  -  IFS="$ac_save_ifs"
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
  +  ac_prog_rejected=yes
  +  continue
  +fi
  +ac_cv_prog_CC="cc"
  +echo "$as_me:1275: found $ac_dir/$ac_word" >&5
  +break
  +done
  +
   if test $ac_prog_rejected = yes; then
     # We found a bogon in the path, so make sure we never use it.
     set dummy $ac_cv_prog_CC
     shift
  -  if test $# -gt 0; then
  +  if test $# != 0; then
       # We chose a different compiler from the bogus one.
       # However, it has the same basename, so the bogon will be chosen
       # first if we set CC to just the basename; use the full file name.
       shift
  -    set dummy "$ac_dir/$ac_word" "$@"
  +    set dummy "$ac_dir/$ac_word" ${1+"$@"}
       shift
       ac_cv_prog_CC="$@"
     fi
   fi
   fi
   fi
  -CC="$ac_cv_prog_CC"
  +CC=$ac_cv_prog_CC
   if test -n "$CC"; then
  -  echo "$ac_t""$CC" 1>&6
  +  echo "$as_me:1297: result: $CC" >&5
  +echo "${ECHO_T}$CC" >&6
   else
  -  echo "$ac_t""no" 1>&6
  +  echo "$as_me:1300: result: no" >&5
  +echo "${ECHO_T}no" >&6
   fi
   
  -  if test -z "$CC"; then
  -    case "`uname -s`" in
  -    *win32* | *WIN32*)
  -      # Extract the first word of "cl", so it can be a program name with args.
  -set dummy cl; ac_word=$2
  -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
  -echo "configure:637: checking for $ac_word" >&5
  -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +fi
  +if test -z "$CC"; then
  +  if test -n "$ac_tool_prefix"; then
  +  for ac_prog in cl
  +  do
  +    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
  +set dummy $ac_tool_prefix$ac_prog; ac_word=$2
  +echo "$as_me:1311: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_CC+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
     if test -n "$CC"; then
     ac_cv_prog_CC="$CC" # Let the user override the test.
   else
  -  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
  -  ac_dummy="$PATH"
  -  for ac_dir in $ac_dummy; do
  -    test -z "$ac_dir" && ac_dir=.
  -    if test -f $ac_dir/$ac_word; then
  -      ac_cv_prog_CC="cl"
  -      break
  -    fi
  -  done
  -  IFS="$ac_save_ifs"
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
  +echo "$as_me:1326: found $ac_dir/$ac_word" >&5
  +break
  +done
  +
   fi
   fi
  -CC="$ac_cv_prog_CC"
  +CC=$ac_cv_prog_CC
   if test -n "$CC"; then
  -  echo "$ac_t""$CC" 1>&6
  +  echo "$as_me:1334: result: $CC" >&5
  +echo "${ECHO_T}$CC" >&6
   else
  -  echo "$ac_t""no" 1>&6
  +  echo "$as_me:1337: result: no" >&5
  +echo "${ECHO_T}no" >&6
   fi
  - ;;
  -    esac
  -  fi
  -  test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
  +
  +    test -n "$CC" && break
  +  done
  +fi
  +if test -z "$CC"; then
  +  ac_ct_CC=$CC
  +  for ac_prog in cl
  +do
  +  # Extract the first word of "$ac_prog", so it can be a program name with args.
  +set dummy $ac_prog; ac_word=$2
  +echo "$as_me:1350: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test -n "$ac_ct_CC"; then
  +  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
  +else
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +ac_cv_prog_ac_ct_CC="$ac_prog"
  +echo "$as_me:1365: found $ac_dir/$ac_word" >&5
  +break
  +done
  +
  +fi
  +fi
  +ac_ct_CC=$ac_cv_prog_ac_ct_CC
  +if test -n "$ac_ct_CC"; then
  +  echo "$as_me:1373: result: $ac_ct_CC" >&5
  +echo "${ECHO_T}$ac_ct_CC" >&6
  +else
  +  echo "$as_me:1376: result: no" >&5
  +echo "${ECHO_T}no" >&6
   fi
   
  -echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
  -echo "configure:669: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
  +  test -n "$ac_ct_CC" && break
  +done
   
  -ac_ext=c
  -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
  -ac_cpp='$CPP $CPPFLAGS'
  -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
  -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
  -cross_compiling=$ac_cv_prog_cc_cross
  +  CC=$ac_ct_CC
  +fi
   
  -cat > conftest.$ac_ext << EOF
  +fi
  +
  +test -z "$CC" && { { echo "$as_me:1388: error: no acceptable cc found in \$PATH" >&5
  +echo "$as_me: error: no acceptable cc found in \$PATH" >&2;}
  +   { (exit 1); exit 1; }; }
  +
  +# Provide some information about the compiler.
  +echo "$as_me:1393:" \
  +     "checking for C compiler version" >&5
  +ac_compiler=`set X $ac_compile; echo $2`
  +{ (eval echo "$as_me:1396: \"$ac_compiler --version </dev/null >&5\"") >&5
  +  (eval $ac_compiler --version </dev/null >&5) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1399: \$? = $ac_status" >&5
  +  (exit $ac_status); }
  +{ (eval echo "$as_me:1401: \"$ac_compiler -v </dev/null >&5\"") >&5
  +  (eval $ac_compiler -v </dev/null >&5) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1404: \$? = $ac_status" >&5
  +  (exit $ac_status); }
  +{ (eval echo "$as_me:1406: \"$ac_compiler -V </dev/null >&5\"") >&5
  +  (eval $ac_compiler -V </dev/null >&5) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1409: \$? = $ac_status" >&5
  +  (exit $ac_status); }
   
  -#line 680 "configure"
  +cat >conftest.$ac_ext <<_ACEOF
  +#line 1413 "configure"
   #include "confdefs.h"
   
  -main(){return(0);}
  -EOF
  -if { (eval echo configure:685: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  -  ac_cv_prog_cc_works=yes
  -  # If we can't run a trivial program, we are probably using a cross compiler.
  -  if (./conftest; exit) 2>/dev/null; then
  -    ac_cv_prog_cc_cross=no
  +int
  +main ()
  +{
  +
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +ac_clean_files_save=$ac_clean_files
  +ac_clean_files="$ac_clean_files a.out a.exe"
  +# Try to create an executable without -o first, disregard a.out.
  +# It will help us diagnose broken compilers, and finding out an intuition
  +# of exeext.
  +echo "$as_me:1429: checking for C compiler default output" >&5
  +echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6
  +ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
  +if { (eval echo "$as_me:1432: \"$ac_link_default\"") >&5
  +  (eval $ac_link_default) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1435: \$? = $ac_status" >&5
  +  (exit $ac_status); }; then
  +  # Find the output, starting from the most likely.  This scheme is
  +# not robust to junk in `.', hence go to wildcards (a.*) only as a last
  +# resort.
  +for ac_file in `ls a.exe conftest.exe 2>/dev/null;
  +                ls a.out conftest 2>/dev/null;
  +                ls a.* conftest.* 2>/dev/null`; do
  +  case $ac_file in
  +    *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb ) ;;
  +    a.out ) # We found the default executable, but exeext='' is most
  +            # certainly right.
  +            break;;
  +    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
  +          # FIXME: I believe we export ac_cv_exeext for Libtool --akim.
  +          export ac_cv_exeext
  +          break;;
  +    * ) break;;
  +  esac
  +done
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +{ { echo "$as_me:1458: error: C compiler cannot create executables" >&5
  +echo "$as_me: error: C compiler cannot create executables" >&2;}
  +   { (exit 77); exit 77; }; }
  +fi
  +
  +ac_exeext=$ac_cv_exeext
  +echo "$as_me:1464: result: $ac_file" >&5
  +echo "${ECHO_T}$ac_file" >&6
  +
  +# Check the compiler produces executables we can run.  If not, either
  +# the compiler is broken, or we cross compile.
  +echo "$as_me:1469: checking whether the C compiler works" >&5
  +echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
  +# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
  +# If not cross compiling, check that we can run a simple program.
  +if test "$cross_compiling" != yes; then
  +  if { ac_try='./$ac_file'
  +  { (eval echo "$as_me:1475: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1478: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +    cross_compiling=no
     else
  -    ac_cv_prog_cc_cross=yes
  +    if test "$cross_compiling" = maybe; then
  +	cross_compiling=yes
  +    else
  +	{ { echo "$as_me:1485: error: cannot run C compiled programs.
  +If you meant to cross compile, use \`--host'." >&5
  +echo "$as_me: error: cannot run C compiled programs.
  +If you meant to cross compile, use \`--host'." >&2;}
  +   { (exit 1); exit 1; }; }
  +    fi
     fi
  -else
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  ac_cv_prog_cc_works=no
   fi
  -rm -fr conftest*
  -ac_ext=c
  -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
  -ac_cpp='$CPP $CPPFLAGS'
  -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
  -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
  -cross_compiling=$ac_cv_prog_cc_cross
  +echo "$as_me:1493: result: yes" >&5
  +echo "${ECHO_T}yes" >&6
   
  -echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
  -if test $ac_cv_prog_cc_works = no; then
  -  { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
  -fi
  -echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
  -echo "configure:711: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
  -echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
  -cross_compiling=$ac_cv_prog_cc_cross
  +rm -f a.out a.exe conftest$ac_cv_exeext
  +ac_clean_files=$ac_clean_files_save
  +# Check the compiler produces executables we can run.  If not, either
  +# the compiler is broken, or we cross compile.
  +echo "$as_me:1500: checking whether we are cross compiling" >&5
  +echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
  +echo "$as_me:1502: result: $cross_compiling" >&5
  +echo "${ECHO_T}$cross_compiling" >&6
  +
  +echo "$as_me:1505: checking for executable suffix" >&5
  +echo $ECHO_N "checking for executable suffix... $ECHO_C" >&6
  +if { (eval echo "$as_me:1507: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1510: \$? = $ac_status" >&5
  +  (exit $ac_status); }; then
  +  # If both `conftest.exe' and `conftest' are `present' (well, observable)
  +# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
  +# work properly (i.e., refer to `conftest.exe'), while it won't with
  +# `rm'.
  +for ac_file in `(ls conftest.exe; ls conftest; ls conftest.*) 2>/dev/null`; do
  +  case $ac_file in
  +    *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb ) ;;
  +    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
  +          export ac_cv_exeext
  +          break;;
  +    * ) break;;
  +  esac
  +done
  +else
  +  { { echo "$as_me:1526: error: cannot compute EXEEXT: cannot compile and link" >&5
  +echo "$as_me: error: cannot compute EXEEXT: cannot compile and link" >&2;}
  +   { (exit 1); exit 1; }; }
  +fi
  +
  +rm -f conftest$ac_cv_exeext
  +echo "$as_me:1532: result: $ac_cv_exeext" >&5
  +echo "${ECHO_T}$ac_cv_exeext" >&6
  +
  +rm -f conftest.$ac_ext
  +EXEEXT=$ac_cv_exeext
  +ac_exeext=$EXEEXT
  +echo "$as_me:1538: checking for object suffix" >&5
  +echo $ECHO_N "checking for object suffix... $ECHO_C" >&6
  +if test "${ac_cv_objext+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 1544 "configure"
  +#include "confdefs.h"
   
  -echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
  -echo "configure:716: checking whether we are using GNU C" >&5
  -if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +int
  +main ()
  +{
  +
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.o conftest.obj
  +if { (eval echo "$as_me:1556: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1559: \$? = $ac_status" >&5
  +  (exit $ac_status); }; then
  +  for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
  +  case $ac_file in
  +    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb ) ;;
  +    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
  +       break;;
  +  esac
  +done
   else
  -  cat > conftest.c <<EOF
  -#ifdef __GNUC__
  -  yes;
  -#endif
  -EOF
  -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:725: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
  -  ac_cv_prog_gcc=yes
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +{ { echo "$as_me:1571: error: cannot compute OBJEXT: cannot compile" >&5
  +echo "$as_me: error: cannot compute OBJEXT: cannot compile" >&2;}
  +   { (exit 1); exit 1; }; }
  +fi
  +
  +rm -f conftest.$ac_cv_objext conftest.$ac_ext
  +fi
  +echo "$as_me:1578: result: $ac_cv_objext" >&5
  +echo "${ECHO_T}$ac_cv_objext" >&6
  +OBJEXT=$ac_cv_objext
  +ac_objext=$OBJEXT
  +echo "$as_me:1582: checking whether we are using the GNU C compiler" >&5
  +echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
  +if test "${ac_cv_c_compiler_gnu+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  ac_cv_prog_gcc=no
  -fi
  -fi
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 1588 "configure"
  +#include "confdefs.h"
   
  -echo "$ac_t""$ac_cv_prog_gcc" 1>&6
  +int
  +main ()
  +{
  +#ifndef __GNUC__
  +       choke me
  +#endif
   
  -if test $ac_cv_prog_gcc = yes; then
  -  GCC=yes
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:1603: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1606: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:1609: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1612: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_compiler_gnu=yes
   else
  -  GCC=
  -fi
  -
  -ac_test_CFLAGS="${CFLAGS+set}"
  -ac_save_CFLAGS="$CFLAGS"
  -CFLAGS=
  -echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
  -echo "configure:744: checking whether ${CC-cc} accepts -g" >&5
  -if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_compiler_gnu=no
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +ac_cv_c_compiler_gnu=$ac_compiler_gnu
  +
  +fi
  +echo "$as_me:1624: result: $ac_cv_c_compiler_gnu" >&5
  +echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
  +GCC=`test $ac_compiler_gnu = yes && echo yes`
  +ac_test_CFLAGS=${CFLAGS+set}
  +ac_save_CFLAGS=$CFLAGS
  +CFLAGS="-g"
  +echo "$as_me:1630: checking whether $CC accepts -g" >&5
  +echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
  +if test "${ac_cv_prog_cc_g+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  echo 'void f(){}' > conftest.c
  -if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 1636 "configure"
  +#include "confdefs.h"
  +
  +int
  +main ()
  +{
  +
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:1648: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1651: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:1654: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1657: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
     ac_cv_prog_cc_g=yes
   else
  -  ac_cv_prog_cc_g=no
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_prog_cc_g=no
   fi
  -rm -f conftest*
  -
  +rm -f conftest.$ac_objext conftest.$ac_ext
   fi
  -
  -echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
  +echo "$as_me:1667: result: $ac_cv_prog_cc_g" >&5
  +echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
   if test "$ac_test_CFLAGS" = set; then
  -  CFLAGS="$ac_save_CFLAGS"
  +  CFLAGS=$ac_save_CFLAGS
   elif test $ac_cv_prog_cc_g = yes; then
     if test "$GCC" = yes; then
       CFLAGS="-g -O2"
  @@ -770,115 +1681,346 @@
       CFLAGS=
     fi
   fi
  +# Some people use a C++ compiler to compile C.  Since we use `exit',
  +# in C++ we need to declare it.  In case someone uses the same compiler
  +# for both compiling C and C++ we need to have the C++ compiler decide
  +# the declaration of exit, since it's the most demanding environment.
  +cat >conftest.$ac_ext <<_ACEOF
  +#ifndef __cplusplus
  +  choke me
  +#endif
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:1694: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1697: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:1700: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1703: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  for ac_declaration in \
  +   ''\
  +   '#include <stdlib.h>' \
  +   'extern "C" void std::exit (int) throw (); using std::exit;' \
  +   'extern "C" void std::exit (int); using std::exit;' \
  +   'extern "C" void exit (int) throw ();' \
  +   'extern "C" void exit (int);' \
  +   'void exit (int);'
  +do
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 1715 "configure"
  +#include "confdefs.h"
  +#include <stdlib.h>
  +$ac_declaration
  +int
  +main ()
  +{
  +exit (42);
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:1728: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1731: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:1734: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1737: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  :
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +continue
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 1747 "configure"
  +#include "confdefs.h"
  +$ac_declaration
  +int
  +main ()
  +{
  +exit (42);
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:1759: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1762: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:1765: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1768: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  break
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +done
  +rm -f conftest*
  +if test -n "$ac_declaration"; then
  +  echo '#ifdef __cplusplus' >>confdefs.h
  +  echo $ac_declaration      >>confdefs.h
  +  echo '#endif'             >>confdefs.h
  +fi
  +
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +ac_ext=c
  +ac_cpp='$CPP $CPPFLAGS'
  +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  +ac_compiler_gnu=$ac_cv_c_compiler_gnu
   
  -echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
  -echo "configure:776: checking how to run the C preprocessor" >&5
  +ac_ext=c
  +ac_cpp='$CPP $CPPFLAGS'
  +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  +ac_compiler_gnu=$ac_cv_c_compiler_gnu
  +echo "$as_me:1800: checking how to run the C preprocessor" >&5
  +echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
   # On Suns, sometimes $CPP names a directory.
   if test -n "$CPP" && test -d "$CPP"; then
     CPP=
   fi
   if test -z "$CPP"; then
  -if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +  if test "${ac_cv_prog_CPP+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -    # This must be in double quotes, not single quotes, because CPP may get
  -  # substituted into the Makefile and "${CC-cc}" will confuse make.
  -  CPP="${CC-cc} -E"
  +      # Double quotes because CPP needs to be expanded
  +    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
  +    do
  +      ac_preproc_ok=false
  +for ac_c_preproc_warn_flag in '' yes
  +do
  +  # Use a header file that comes with gcc, so configuring glibc
  +  # with a fresh cross-compiler works.
     # On the NeXT, cc -E runs the code through the compiler's parser,
  -  # not just through cpp.
  -  cat > conftest.$ac_ext <<EOF
  -#line 791 "configure"
  +  # not just through cpp. "Syntax error" is here to catch this case.
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 1821 "configure"
   #include "confdefs.h"
   #include <assert.h>
  -Syntax Error
  -EOF
  -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  -{ (eval echo configure:797: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  -if test -z "$ac_err"; then
  +                     Syntax error
  +_ACEOF
  +if { (eval echo "$as_me:1826: \"$ac_cpp conftest.$ac_ext\"") >&5
  +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  +  ac_status=$?
  +  egrep -v '^ *\+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:1832: \$? = $ac_status" >&5
  +  (exit $ac_status); } >/dev/null; then
  +  if test -s conftest.err; then
  +    ac_cpp_err=$ac_c_preproc_warn_flag
  +  else
  +    ac_cpp_err=
  +  fi
  +else
  +  ac_cpp_err=yes
  +fi
  +if test -z "$ac_cpp_err"; then
     :
   else
  -  echo "$ac_err" >&5
  -  echo "configure: failed program was:" >&5
  +  echo "$as_me: failed program was:" >&5
     cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  CPP="${CC-cc} -E -traditional-cpp"
  -  cat > conftest.$ac_ext <<EOF
  -#line 808 "configure"
  +  # Broken: fails on valid input.
  +continue
  +fi
  +rm -f conftest.err conftest.$ac_ext
  +
  +  # OK, works on sane cases.  Now check whether non-existent headers
  +  # can be detected and how.
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 1855 "configure"
   #include "confdefs.h"
  -#include <assert.h>
  -Syntax Error
  -EOF
  -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  -{ (eval echo configure:814: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  -if test -z "$ac_err"; then
  -  :
  +#include <ac_nonexistent.h>
  +_ACEOF
  +if { (eval echo "$as_me:1859: \"$ac_cpp conftest.$ac_ext\"") >&5
  +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  +  ac_status=$?
  +  egrep -v '^ *\+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:1865: \$? = $ac_status" >&5
  +  (exit $ac_status); } >/dev/null; then
  +  if test -s conftest.err; then
  +    ac_cpp_err=$ac_c_preproc_warn_flag
  +  else
  +    ac_cpp_err=
  +  fi
   else
  -  echo "$ac_err" >&5
  -  echo "configure: failed program was:" >&5
  +  ac_cpp_err=yes
  +fi
  +if test -z "$ac_cpp_err"; then
  +  # Broken: success on invalid input.
  +continue
  +else
  +  echo "$as_me: failed program was:" >&5
     cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  CPP="${CC-cc} -nologo -E"
  -  cat > conftest.$ac_ext <<EOF
  -#line 825 "configure"
  +  # Passes both tests.
  +ac_preproc_ok=:
  +break
  +fi
  +rm -f conftest.err conftest.$ac_ext
  +
  +done
  +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
  +rm -f conftest.err conftest.$ac_ext
  +if $ac_preproc_ok; then
  +  break
  +fi
  +
  +    done
  +    ac_cv_prog_CPP=$CPP
  +
  +fi
  +  CPP=$ac_cv_prog_CPP
  +else
  +  ac_cv_prog_CPP=$CPP
  +fi
  +echo "$as_me:1902: result: $CPP" >&5
  +echo "${ECHO_T}$CPP" >&6
  +ac_preproc_ok=false
  +for ac_c_preproc_warn_flag in '' yes
  +do
  +  # Use a header file that comes with gcc, so configuring glibc
  +  # with a fresh cross-compiler works.
  +  # On the NeXT, cc -E runs the code through the compiler's parser,
  +  # not just through cpp. "Syntax error" is here to catch this case.
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 1912 "configure"
   #include "confdefs.h"
   #include <assert.h>
  -Syntax Error
  -EOF
  -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  -{ (eval echo configure:831: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  -if test -z "$ac_err"; then
  +                     Syntax error
  +_ACEOF
  +if { (eval echo "$as_me:1917: \"$ac_cpp conftest.$ac_ext\"") >&5
  +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  +  ac_status=$?
  +  egrep -v '^ *\+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:1923: \$? = $ac_status" >&5
  +  (exit $ac_status); } >/dev/null; then
  +  if test -s conftest.err; then
  +    ac_cpp_err=$ac_c_preproc_warn_flag
  +  else
  +    ac_cpp_err=
  +  fi
  +else
  +  ac_cpp_err=yes
  +fi
  +if test -z "$ac_cpp_err"; then
     :
   else
  -  echo "$ac_err" >&5
  -  echo "configure: failed program was:" >&5
  +  echo "$as_me: failed program was:" >&5
     cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  CPP=/lib/cpp
  -fi
  -rm -f conftest*
  +  # Broken: fails on valid input.
  +continue
   fi
  -rm -f conftest*
  +rm -f conftest.err conftest.$ac_ext
  +
  +  # OK, works on sane cases.  Now check whether non-existent headers
  +  # can be detected and how.
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 1946 "configure"
  +#include "confdefs.h"
  +#include <ac_nonexistent.h>
  +_ACEOF
  +if { (eval echo "$as_me:1950: \"$ac_cpp conftest.$ac_ext\"") >&5
  +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  +  ac_status=$?
  +  egrep -v '^ *\+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:1956: \$? = $ac_status" >&5
  +  (exit $ac_status); } >/dev/null; then
  +  if test -s conftest.err; then
  +    ac_cpp_err=$ac_c_preproc_warn_flag
  +  else
  +    ac_cpp_err=
  +  fi
  +else
  +  ac_cpp_err=yes
   fi
  -rm -f conftest*
  -  ac_cv_prog_CPP="$CPP"
  +if test -z "$ac_cpp_err"; then
  +  # Broken: success on invalid input.
  +continue
  +else
  +  echo "$as_me: failed program was:" >&5
  +  cat conftest.$ac_ext >&5
  +  # Passes both tests.
  +ac_preproc_ok=:
  +break
   fi
  -  CPP="$ac_cv_prog_CPP"
  +rm -f conftest.err conftest.$ac_ext
  +
  +done
  +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
  +rm -f conftest.err conftest.$ac_ext
  +if $ac_preproc_ok; then
  +  :
   else
  -  ac_cv_prog_CPP="$CPP"
  +  { { echo "$as_me:1984: error: C preprocessor \"$CPP\" fails sanity check" >&5
  +echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check" >&2;}
  +   { (exit 1); exit 1; }; }
   fi
  -echo "$ac_t""$CPP" 1>&6
   
  -echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
  -echo "configure:856: checking whether ${MAKE-make} sets \${MAKE}" >&5
  -set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
  -if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +ac_ext=c
  +ac_cpp='$CPP $CPPFLAGS'
  +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  +ac_compiler_gnu=$ac_cv_c_compiler_gnu
  +
  +echo "$as_me:1995: checking whether ${MAKE-make} sets \${MAKE}" >&5
  +echo $ECHO_N "checking whether ${MAKE-make} sets \${MAKE}... $ECHO_C" >&6
  +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,./+-,__p_,'`
  +if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  cat > conftestmake <<\EOF
  +  cat >conftest.make <<\EOF
   all:
   	@echo 'ac_maketemp="${MAKE}"'
   EOF
   # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
  -eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=`
  +eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
   if test -n "$ac_maketemp"; then
     eval ac_cv_prog_make_${ac_make}_set=yes
   else
     eval ac_cv_prog_make_${ac_make}_set=no
   fi
  -rm -f conftestmake
  +rm -f conftest.make
   fi
   if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
  -  echo "$ac_t""yes" 1>&6
  +  echo "$as_me:2015: result: yes" >&5
  +echo "${ECHO_T}yes" >&6
     SET_MAKE=
   else
  -  echo "$ac_t""no" 1>&6
  +  echo "$as_me:2019: result: no" >&5
  +echo "${ECHO_T}no" >&6
     SET_MAKE="MAKE=${MAKE-make}"
   fi
   
  -
   # Check whether --enable-utf8 or --disable-utf8 was given.
   if test "${enable_utf8+set}" = set; then
     enableval="$enable_utf8"
  @@ -886,8 +2028,7 @@
   else
     enable_utf8=yes
   
  -fi
  -if test ".$enable_utf8" = .yes; then
  +fi; if test ".$enable_utf8" = .yes; then
       if test ".$CFLAGS" = .; then
           CFLAGS="-DSUPPORT_UTF8"
       else
  @@ -895,440 +2036,5001 @@
       fi
   fi
   
  -# Check whether --enable-static or --disable-static was given.
  -if test "${enable_static+set}" = set; then
  -  enableval="$enable_static"
  -  enable_static="$enableval"
  -else
  -  enable_static=yes
  -
  -fi
  -# Check whether --enable-shared or --disable-shared was given.
  -if test "${enable_shared+set}" = set; then
  -  enableval="$enable_shared"
  -  enable_shared="$enableval"
  -else
  -  enable_shared=yes
  -
  -fi
  -libtool_flags=''
  -test "$enable_static"     = no  && libtool_flags="$libtool_flags --disable-static"
  -test "$enable_shared"     = no  && libtool_flags="$libtool_flags --disable-shared"
  -test "$ac_cv_prog_gcc"    = yes && libtool_flags="$libtool_flags --with-gcc"
  -test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld"
  -CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" LD="$LD" \
  -${CONFIG_SHELL-/bin/sh} ltconfig --no-reexec \
  -$libtool_flags --no-verify ltmain.sh $PLATFORM ||\
  -{ echo "configure: error: libtool configuration failed" 1>&2; exit 1; }
  -LIBTOOL="./libtool"
  -
  -
   for ac_func in memmove strerror
   do
  -echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
  -echo "configure:930: checking for $ac_func" >&5
  -if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
  +echo "$as_me:2042: checking for $ac_func" >&5
  +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
  +if eval "test \"\${$as_ac_var+set}\" = set"; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  cat > conftest.$ac_ext <<EOF
  -#line 935 "configure"
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 2048 "configure"
   #include "confdefs.h"
   /* System header to define __stub macros and hopefully few prototypes,
  -    which can conflict with char $ac_func(); below.  */
  +    which can conflict with char $ac_func (); below.  */
   #include <assert.h>
   /* Override any gcc2 internal prototype to avoid an error.  */
  +#ifdef __cplusplus
  +extern "C"
  +#endif
   /* We use char because int might match the return type of a gcc2
  -    builtin and then its argument prototype would still apply.  */
  -char $ac_func();
  -
  -int main() {
  -
  +   builtin and then its argument prototype would still apply.  */
  +char $ac_func ();
  +char (*f) ();
  +
  +int
  +main ()
  +{
   /* The GNU C library defines this for functions which it implements
       to always fail with ENOSYS.  Some functions are actually named
       something starting with __ and the normal name is an alias.  */
   #if defined (__stub_$ac_func) || defined (__stub___$ac_func)
   choke me
   #else
  -$ac_func();
  +f = $ac_func;
   #endif
   
  -; return 0; }
  -EOF
  -if { (eval echo configure:958: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  -  rm -rf conftest*
  -  eval "ac_cv_func_$ac_func=yes"
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext conftest$ac_exeext
  +if { (eval echo "$as_me:2079: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2082: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest$ac_exeext'
  +  { (eval echo "$as_me:2085: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2088: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  eval "$as_ac_var=yes"
   else
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  eval "ac_cv_func_$ac_func=no"
  -fi
  -rm -f conftest*
  -fi
  -
  -if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
  -  echo "$ac_t""yes" 1>&6
  -    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
  -  cat >> confdefs.h <<EOF
  -#define $ac_tr_func 1
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +eval "$as_ac_var=no"
  +fi
  +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  +fi
  +echo "$as_me:2098: result: `eval echo '${'$as_ac_var'}'`" >&5
  +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
  +if test `eval echo '${'$as_ac_var'}'` = yes; then
  +  cat >>confdefs.h <<EOF
  +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
   EOF
  - 
  -else
  -  echo "$ac_t""no" 1>&6
  +
   fi
   done
   
  +# libtool.m4 - Configure libtool for the host system. -*-Shell-script-*-
  +## Copyright 1996, 1997, 1998, 1999, 2000, 2001
  +## Free Software Foundation, Inc.
  +## Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
  +##
  +## This program is free software; you can redistribute it and/or modify
  +## it under the terms of the GNU General Public License as published by
  +## the Free Software Foundation; either version 2 of the License, or
  +## (at your option) any later version.
  +##
  +## This program is distributed in the hope that it will be useful, but
  +## WITHOUT ANY WARRANTY; without even the implied warranty of
  +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  +## General Public License for more details.
  +##
  +## You should have received a copy of the GNU General Public License
  +## along with this program; if not, write to the Free Software
  +## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  +##
  +## As a special exception to the GNU General Public License, if you
  +## distribute this file as part of a program that contains a
  +## configuration script generated by Autoconf, you may include it under
  +## the same distribution terms that you use for the rest of that program.
  +
  +# serial 46 AC_PROG_LIBTOOL
  +
  +# _LT_AC_CHECK_DLFCN
  +# --------------------
  +# _LT_AC_CHECK_DLFCN
  +
  +# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
  +# ---------------------------------
  + # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
  +
  +# _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR
  +# ---------------------------------
  +# _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR
  +
  +# _LT_AC_PROG_ECHO_BACKSLASH
  +# --------------------------
  +# Add some code to the start of the generated configure script which
  +# will find an echo command which doesn;t interpret backslashes.
  +# _LT_AC_PROG_ECHO_BACKSLASH
  +
  +# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
  +#                           ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
  +# ------------------------------------------------------------------
  +# _LT_AC_TRY_DLOPEN_SELF
  +
  +# AC_LIBTOOL_DLOPEN_SELF
  +# -------------------
  +# AC_LIBTOOL_DLOPEN_SELF
  +
  +# _LT_AC_LTCONFIG_HACK
  +
  +# AC_LIBTOOL_DLOPEN - enable checks for dlopen support
  +
  +# AC_LIBTOOL_WIN32_DLL - declare package support for building win32 dll's
  +
  +# AC_ENABLE_SHARED - implement the --enable-shared flag
  +# Usage: AC_ENABLE_SHARED[(DEFAULT)]
  +#   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
  +#   `yes'.
  +
  +# AC_DISABLE_SHARED - set the default shared flag to --disable-shared
  +
  +# AC_ENABLE_STATIC - implement the --enable-static flag
  +# Usage: AC_ENABLE_STATIC[(DEFAULT)]
  +#   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
  +#   `yes'.
  +
  +# AC_DISABLE_STATIC - set the default static flag to --disable-static
  +
  +# AC_ENABLE_FAST_INSTALL - implement the --enable-fast-install flag
  +# Usage: AC_ENABLE_FAST_INSTALL[(DEFAULT)]
  +#   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
  +#   `yes'.
  +
  +# AC_DISABLE_FAST_INSTALL - set the default to --disable-fast-install
  +
  +# AC_LIBTOOL_PICMODE - implement the --with-pic flag
  +# Usage: AC_LIBTOOL_PICMODE[(MODE)]
  +#   Where MODE is either `yes' or `no'.  If omitted, it defaults to
  +#   `both'.
  +
  +# AC_PATH_TOOL_PREFIX - find a file program which can recognise shared library
  +
  +# AC_PATH_MAGIC - find a file program which can recognise a shared library
  +
  +# AC_PROG_LD - find the path to the GNU or non-GNU linker
  +
  +# AC_PROG_LD_GNU -
  +
  +# AC_PROG_LD_RELOAD_FLAG - find reload flag for linker
  +#   -- PORTME Some linkers may need a different reload flag.
  +
  +# AC_DEPLIBS_CHECK_METHOD - how to check for library dependencies
  +#  -- PORTME fill in with the dynamic library characteristics
  +
  +# AC_PROG_NM - find the path to a BSD-compatible name lister
  +
  +# AC_CHECK_LIBM - check for math library
  +
  +# AC_LIBLTDL_CONVENIENCE[(dir)] - sets LIBLTDL to the link flags for
  +# the libltdl convenience library and INCLTDL to the include flags for
  +# the libltdl header and adds --enable-ltdl-convenience to the
  +# configure arguments.  Note that LIBLTDL and INCLTDL are not
  +# AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called.  If DIR is not
  +# provided, it is assumed to be `libltdl'.  LIBLTDL will be prefixed
  +# with '${top_builddir}/' and INCLTDL will be prefixed with
  +# '${top_srcdir}/' (note the single quotes!).  If your package is not
  +# flat and you're not using automake, define top_builddir and
  +# top_srcdir appropriately in the Makefiles.
  +
  +# AC_LIBLTDL_INSTALLABLE[(dir)] - sets LIBLTDL to the link flags for
  +# the libltdl installable library and INCLTDL to the include flags for
  +# the libltdl header and adds --enable-ltdl-install to the configure
  +# arguments.  Note that LIBLTDL and INCLTDL are not AC_SUBSTed, nor is
  +# AC_CONFIG_SUBDIRS called.  If DIR is not provided and an installed
  +# libltdl is not found, it is assumed to be `libltdl'.  LIBLTDL will
  +# be prefixed with '${top_builddir}/' and INCLTDL will be prefixed
  +# with '${top_srcdir}/' (note the single quotes!).  If your package is
  +# not flat and you're not using automake, define top_builddir and
  +# top_srcdir appropriately in the Makefiles.
  +# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
   
  -trap '' 1 2 15
  -cat > confcache <<\EOF
  -# This file is a shell script that caches the results of configure
  -# tests run on this system so they can be shared between configure
  -# scripts and configure runs.  It is not useful on other systems.
  -# If it contains results you don't want to keep, you may remove or edit it.
  -#
  -# By default, configure uses ./config.cache as the cache file,
  -# creating it if it does not exist already.  You can give configure
  -# the --cache-file=FILE option to use a different cache file; that is
  -# what configure does when it calls configure scripts in
  -# subdirectories, so they share the cache.
  -# Giving --cache-file=/dev/null disables caching, for debugging configure.
  -# config.status only pays attention to the cache file if you give it the
  -# --recheck option to rerun configure.
  -#
  -EOF
  -# The following way of writing the cache mishandles newlines in values,
  -# but we know of no workaround that is simple, portable, and efficient.
  -# So, don't put newlines in cache variables' values.
  -# Ultrix sh set writes to stderr and can't be redirected directly,
  -# and sets the high bit in the cache file unless we assign to the vars.
  -(set) 2>&1 |
  -  case `(ac_space=' '; set | grep ac_space) 2>&1` in
  -  *ac_space=\ *)
  -    # `set' does not quote correctly, so add quotes (double-quote substitution
  -    # turns \\\\ into \\, and sed turns \\ into \).
  -    sed -n \
  -      -e "s/'/'\\\\''/g" \
  -      -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
  +# old names
  +
  +# This is just to silence aclocal about the macro not being used
  +
  +# Check whether --enable-shared or --disable-shared was given.
  +if test "${enable_shared+set}" = set; then
  +  enableval="$enable_shared"
  +  p=${PACKAGE-default}
  +case $enableval in
  +yes) enable_shared=yes ;;
  +no) enable_shared=no ;;
  +*)
  +  enable_shared=no
  +  # Look at the argument we got.  We use all the common list separators.
  +  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
  +  for pkg in $enableval; do
  +    if test "X$pkg" = "X$p"; then
  +      enable_shared=yes
  +    fi
  +  done
  +  IFS="$ac_save_ifs"
  +  ;;
  +esac
  +else
  +  enable_shared=yes
  +fi;
  +# Check whether --enable-static or --disable-static was given.
  +if test "${enable_static+set}" = set; then
  +  enableval="$enable_static"
  +  p=${PACKAGE-default}
  +case $enableval in
  +yes) enable_static=yes ;;
  +no) enable_static=no ;;
  +*)
  +  enable_static=no
  +  # Look at the argument we got.  We use all the common list separators.
  +  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
  +  for pkg in $enableval; do
  +    if test "X$pkg" = "X$p"; then
  +      enable_static=yes
  +    fi
  +  done
  +  IFS="$ac_save_ifs"
  +  ;;
  +esac
  +else
  +  enable_static=yes
  +fi;
  +# Check whether --enable-fast-install or --disable-fast-install was given.
  +if test "${enable_fast_install+set}" = set; then
  +  enableval="$enable_fast_install"
  +  p=${PACKAGE-default}
  +case $enableval in
  +yes) enable_fast_install=yes ;;
  +no) enable_fast_install=no ;;
  +*)
  +  enable_fast_install=no
  +  # Look at the argument we got.  We use all the common list separators.
  +  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
  +  for pkg in $enableval; do
  +    if test "X$pkg" = "X$p"; then
  +      enable_fast_install=yes
  +    fi
  +  done
  +  IFS="$ac_save_ifs"
  +  ;;
  +esac
  +else
  +  enable_fast_install=yes
  +fi;
  +ac_aux_dir=
  +for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
  +  if test -f $ac_dir/install-sh; then
  +    ac_aux_dir=$ac_dir
  +    ac_install_sh="$ac_aux_dir/install-sh -c"
  +    break
  +  elif test -f $ac_dir/install.sh; then
  +    ac_aux_dir=$ac_dir
  +    ac_install_sh="$ac_aux_dir/install.sh -c"
  +    break
  +  elif test -f $ac_dir/shtool; then
  +    ac_aux_dir=$ac_dir
  +    ac_install_sh="$ac_aux_dir/shtool install -c"
  +    break
  +  fi
  +done
  +if test -z "$ac_aux_dir"; then
  +  { { echo "$as_me:2321: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
  +echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
  +   { (exit 1); exit 1; }; }
  +fi
  +ac_config_guess="$SHELL $ac_aux_dir/config.guess"
  +ac_config_sub="$SHELL $ac_aux_dir/config.sub"
  +ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
  +
  +# Make sure we can run config.sub.
  +$ac_config_sub sun4 >/dev/null 2>&1 ||
  +  { { echo "$as_me:2331: error: cannot run $ac_config_sub" >&5
  +echo "$as_me: error: cannot run $ac_config_sub" >&2;}
  +   { (exit 1); exit 1; }; }
  +
  +echo "$as_me:2335: checking build system type" >&5
  +echo $ECHO_N "checking build system type... $ECHO_C" >&6
  +if test "${ac_cv_build+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  ac_cv_build_alias=$build_alias
  +test -z "$ac_cv_build_alias" &&
  +  ac_cv_build_alias=`$ac_config_guess`
  +test -z "$ac_cv_build_alias" &&
  +  { { echo "$as_me:2344: error: cannot guess build type; you must specify one" >&5
  +echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
  +   { (exit 1); exit 1; }; }
  +ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
  +  { { echo "$as_me:2348: error: $ac_config_sub $ac_cv_build_alias failed." >&5
  +echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed." >&2;}
  +   { (exit 1); exit 1; }; }
  +
  +fi
  +echo "$as_me:2353: result: $ac_cv_build" >&5
  +echo "${ECHO_T}$ac_cv_build" >&6
  +build=$ac_cv_build
  +build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
  +build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
  +build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
  +
  +echo "$as_me:2360: checking host system type" >&5
  +echo $ECHO_N "checking host system type... $ECHO_C" >&6
  +if test "${ac_cv_host+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  ac_cv_host_alias=$host_alias
  +test -z "$ac_cv_host_alias" &&
  +  ac_cv_host_alias=$ac_cv_build_alias
  +ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
  +  { { echo "$as_me:2369: error: $ac_config_sub $ac_cv_host_alias failed" >&5
  +echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
  +   { (exit 1); exit 1; }; }
  +
  +fi
  +echo "$as_me:2374: result: $ac_cv_host" >&5
  +echo "${ECHO_T}$ac_cv_host" >&6
  +host=$ac_cv_host
  +host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
  +host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
  +host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
  +
  +# Check whether --with-gnu-ld or --without-gnu-ld was given.
  +if test "${with_gnu_ld+set}" = set; then
  +  withval="$with_gnu_ld"
  +  test "$withval" = no || with_gnu_ld=yes
  +else
  +  with_gnu_ld=no
  +fi;
  +ac_prog=ld
  +if test "$GCC" = yes; then
  +  # Check if gcc -print-prog-name=ld gives a path.
  +  echo "$as_me:2391: checking for ld used by GCC" >&5
  +echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6
  +  case $host in
  +  *-*-mingw*)
  +    # gcc leaves a trailing carriage return which upsets mingw
  +    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
  +  *)
  +    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
  +  esac
  +  case $ac_prog in
  +    # Accept absolute paths.
  +    [\\/]* | [A-Za-z]:[\\/]*)
  +      re_direlt='/[^/][^/]*/\.\./'
  +      # Canonicalize the path of ld
  +      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
  +      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
  +	ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
  +      done
  +      test -z "$LD" && LD="$ac_prog"
  +      ;;
  +  "")
  +    # If it fails, then pretend we aren't using GCC.
  +    ac_prog=ld
       ;;
     *)
  -    # `set' quotes correctly as required by POSIX, so do not add quotes.
  -    sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
  +    # If it is relative, then search for the first ld in PATH.
  +    with_gnu_ld=unknown
       ;;
  -  esac >> confcache
  -if cmp -s $cache_file confcache; then
  -  :
  +  esac
  +elif test "$with_gnu_ld" = yes; then
  +  echo "$as_me:2421: checking for GNU ld" >&5
  +echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6
   else
  -  if test -w $cache_file; then
  -    echo "updating cache $cache_file"
  -    cat confcache > $cache_file
  -  else
  -    echo "not updating unwritable cache $cache_file"
  -  fi
  +  echo "$as_me:2424: checking for non-GNU ld" >&5
  +echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6
   fi
  -rm -f confcache
  -
  -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
  -
  -test "x$prefix" = xNONE && prefix=$ac_default_prefix
  -# Let make expand exec_prefix.
  -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
  -
  -# Any assignment to VPATH causes Sun make to only execute
  -# the first set of double-colon rules, so remove it if not needed.
  -# If there is a colon in the path, we need to keep it.
  -if test "x$srcdir" = x.; then
  -  ac_vpsub='/^[ 	]*VPATH[ 	]*=[^:]*$/d'
  +if test "${lt_cv_path_LD+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test -z "$LD"; then
  +  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
  +  for ac_dir in $PATH; do
  +    test -z "$ac_dir" && ac_dir=.
  +    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
  +      lt_cv_path_LD="$ac_dir/$ac_prog"
  +      # Check to see if the program is GNU ld.  I'd rather use --version,
  +      # but apparently some GNU ld's only accept -v.
  +      # Break only if it was the GNU/non-GNU ld that we prefer.
  +      if "$lt_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
  +	test "$with_gnu_ld" != no && break
  +      else
  +	test "$with_gnu_ld" != yes && break
  +      fi
  +    fi
  +  done
  +  IFS="$ac_save_ifs"
  +else
  +  lt_cv_path_LD="$LD" # Let the user override the test with a path.
  +fi
   fi
   
  -trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
  +LD="$lt_cv_path_LD"
  +if test -n "$LD"; then
  +  echo "$as_me:2454: result: $LD" >&5
  +echo "${ECHO_T}$LD" >&6
  +else
  +  echo "$as_me:2457: result: no" >&5
  +echo "${ECHO_T}no" >&6
  +fi
  +test -z "$LD" && { { echo "$as_me:2460: error: no acceptable ld found in \$PATH" >&5
  +echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
  +   { (exit 1); exit 1; }; }
  +echo "$as_me:2463: checking if the linker ($LD) is GNU ld" >&5
  +echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6
  +if test "${lt_cv_prog_gnu_ld+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  # I'd rather use --version here, but apparently some GNU ld's only accept -v.
  +if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
  +  lt_cv_prog_gnu_ld=yes
  +else
  +  lt_cv_prog_gnu_ld=no
  +fi
  +fi
  +echo "$as_me:2475: result: $lt_cv_prog_gnu_ld" >&5
  +echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6
  +with_gnu_ld=$lt_cv_prog_gnu_ld
   
  -DEFS=-DHAVE_CONFIG_H
  +echo "$as_me:2479: checking for $LD option to reload object files" >&5
  +echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6
  +if test "${lt_cv_ld_reload_flag+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  lt_cv_ld_reload_flag='-r'
  +fi
  +echo "$as_me:2486: result: $lt_cv_ld_reload_flag" >&5
  +echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6
  +reload_flag=$lt_cv_ld_reload_flag
  +test -n "$reload_flag" && reload_flag=" $reload_flag"
  +
  +echo "$as_me:2491: checking for BSD-compatible nm" >&5
  +echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6
  +if test "${lt_cv_path_NM+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test -n "$NM"; then
  +  # Let the user override the test.
  +  lt_cv_path_NM="$NM"
  +else
  +  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
  +  for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
  +    test -z "$ac_dir" && ac_dir=.
  +    tmp_nm=$ac_dir/${ac_tool_prefix}nm
  +    if test -f $tmp_nm || test -f $tmp_nm$ac_exeext ; then
  +      # Check to see if the nm accepts a BSD-compat flag.
  +      # Adding the `sed 1q' prevents false positives on HP-UX, which says:
  +      #   nm: unknown option "B" ignored
  +      # Tru64's nm complains that /dev/null is an invalid object file
  +      if ($tmp_nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep '(/dev/null|Invalid file or object type)' >/dev/null; then
  +	lt_cv_path_NM="$tmp_nm -B"
  +	break
  +      elif ($tmp_nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
  +	lt_cv_path_NM="$tmp_nm -p"
  +	break
  +      else
  +	lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
  +	continue # so that we can try to find one that supports BSD flags
  +      fi
  +    fi
  +  done
  +  IFS="$ac_save_ifs"
  +  test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
  +fi
  +fi
   
  -# Without the "./", some shells look in PATH for config.status.
  -: ${CONFIG_STATUS=./config.status}
  +NM="$lt_cv_path_NM"
  +echo "$as_me:2527: result: $NM" >&5
  +echo "${ECHO_T}$NM" >&6
   
  -echo creating $CONFIG_STATUS
  -rm -f $CONFIG_STATUS
  -cat > $CONFIG_STATUS <<EOF
  -#! /bin/sh
  -# Generated automatically by configure.
  -# Run this file to recreate the current configuration.
  -# This directory was configured as follows,
  -# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
  -#
  -# $0 $ac_configure_args
  -#
  -# Compiler output produced by configure, useful for debugging
  -# configure, is in ./config.log if it exists.
  +echo "$as_me:2530: checking whether ln -s works" >&5
  +echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6
  +LN_S=$as_ln_s
  +if test "$LN_S" = "ln -s"; then
  +  echo "$as_me:2534: result: yes" >&5
  +echo "${ECHO_T}yes" >&6
  +else
  +  echo "$as_me:2537: result: no, using $LN_S" >&5
  +echo "${ECHO_T}no, using $LN_S" >&6
  +fi
   
  -ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
  -for ac_option
  -do
  -  case "\$ac_option" in
  -  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
  -    echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
  -    exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
  -  -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
  -    echo "$CONFIG_STATUS generated by autoconf version 2.13"
  -    exit 0 ;;
  -  -help | --help | --hel | --he | --h)
  -    echo "\$ac_cs_usage"; exit 0 ;;
  -  *) echo "\$ac_cs_usage"; exit 1 ;;
  +echo "$as_me:2541: checking how to recognise dependant libraries" >&5
  +echo $ECHO_N "checking how to recognise dependant libraries... $ECHO_C" >&6
  +if test "${lt_cv_deplibs_check_method+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  lt_cv_file_magic_cmd='$MAGIC_CMD'
  +lt_cv_file_magic_test_file=
  +lt_cv_deplibs_check_method='unknown'
  +# Need to set the preceding variable on all platforms that support
  +# interlibrary dependencies.
  +# 'none' -- dependencies not supported.
  +# `unknown' -- same as none, but documents that we really don't know.
  +# 'pass_all' -- all dependencies passed with no checks.
  +# 'test_compile' -- check by making test program.
  +# ['file_magic [regex]'] -- check by looking for files in library path
  +# which responds to the $file_magic_cmd with a given egrep regex.
  +# If you have `file' or equivalent on your system and you're not sure
  +# whether `pass_all' will *always* work, you probably want this one.
  +
  +case $host_os in
  +aix4* | aix5*)
  +  lt_cv_deplibs_check_method=pass_all
  +  ;;
  +
  +beos*)
  +  lt_cv_deplibs_check_method=pass_all
  +  ;;
  +
  +bsdi4*)
  +  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
  +  lt_cv_file_magic_cmd='/usr/bin/file -L'
  +  lt_cv_file_magic_test_file=/shlib/libc.so
  +  ;;
  +
  +cygwin* | mingw* | pw32*)
  +  lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
  +  lt_cv_file_magic_cmd='$OBJDUMP -f'
  +  ;;
  +
  +darwin* | rhapsody*)
  +  lt_cv_deplibs_check_method='file_magic Mach-O dynamically linked shared library'
  +  lt_cv_file_magic_cmd='/usr/bin/file -L'
  +  case "$host_os" in
  +  rhapsody* | darwin1.012)
  +    lt_cv_file_magic_test_file=`echo /System/Library/Frameworks/System.framework/Versions/*/System | head -1`
  +    ;;
  +  *) # Darwin 1.3 on
  +    lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib'
  +    ;;
     esac
  -done
  -
  -ac_given_srcdir=$srcdir
  +  ;;
   
  -trap 'rm -fr `echo "Makefile pcre-config  config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
  +freebsd*)
  +  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
  +    case $host_cpu in
  +    i*86 )
  +      # Not sure whether the presence of OpenBSD here was a mistake.
  +      # Let's accept both of them until this is cleared up.
  +      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[3-9]86 (compact )?demand paged shared library'
  +      lt_cv_file_magic_cmd=/usr/bin/file
  +      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
  +      ;;
  +    esac
  +  else
  +    lt_cv_deplibs_check_method=pass_all
  +  fi
  +  ;;
  +
  +gnu*)
  +  lt_cv_deplibs_check_method=pass_all
  +  ;;
  +
  +hpux10.20*|hpux11*)
  +  lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
  +  lt_cv_file_magic_cmd=/usr/bin/file
  +  lt_cv_file_magic_test_file=/usr/lib/libc.sl
  +  ;;
  +
  +irix5* | irix6*)
  +  case $host_os in
  +  irix5*)
  +    # this will be overridden with pass_all, but let us keep it just in case
  +    lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1"
  +    ;;
  +  *)
  +    case $LD in
  +    *-32|*"-32 ") libmagic=32-bit;;
  +    *-n32|*"-n32 ") libmagic=N32;;
  +    *-64|*"-64 ") libmagic=64-bit;;
  +    *) libmagic=never-match;;
  +    esac
  +    # this will be overridden with pass_all, but let us keep it just in case
  +    lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[1234] dynamic lib MIPS - version 1"
  +    ;;
  +  esac
  +  lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*`
  +  lt_cv_deplibs_check_method=pass_all
  +  ;;
  +
  +# This must be Linux ELF.
  +linux-gnu*)
  +  case $host_cpu in
  +  alpha* | i*86 | powerpc* | sparc* | ia64* )
  +    lt_cv_deplibs_check_method=pass_all ;;
  +  *)
  +    # glibc up to 2.1.1 does not perform some relocations on ARM
  +    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;;
  +  esac
  +  lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
  +  ;;
  +
  +netbsd*)
  +  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
  +    lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
  +  else
  +    lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so$'
  +  fi
  +  ;;
  +
  +newos6*)
  +  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
  +  lt_cv_file_magic_cmd=/usr/bin/file
  +  lt_cv_file_magic_test_file=/usr/lib/libnls.so
  +  ;;
  +
  +osf3* | osf4* | osf5*)
  +  # this will be overridden with pass_all, but let us keep it just in case
  +  lt_cv_deplibs_check_method='file_magic COFF format alpha shared library'
  +  lt_cv_file_magic_test_file=/shlib/libc.so
  +  lt_cv_deplibs_check_method=pass_all
  +  ;;
  +
  +sco3.2v5*)
  +  lt_cv_deplibs_check_method=pass_all
  +  ;;
  +
  +solaris*)
  +  lt_cv_deplibs_check_method=pass_all
  +  lt_cv_file_magic_test_file=/lib/libc.so
  +  ;;
  +
  +sysv5uw[78]* | sysv4*uw2*)
  +  lt_cv_deplibs_check_method=pass_all
  +  ;;
  +
  +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
  +  case $host_vendor in
  +  motorola)
  +    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
  +    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
  +    ;;
  +  ncr)
  +    lt_cv_deplibs_check_method=pass_all
  +    ;;
  +  sequent)
  +    lt_cv_file_magic_cmd='/bin/file'
  +    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
  +    ;;
  +  sni)
  +    lt_cv_file_magic_cmd='/bin/file'
  +    lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
  +    lt_cv_file_magic_test_file=/lib/libc.so
  +    ;;
  +  esac
  +  ;;
  +esac
  +
  +fi
  +echo "$as_me:2709: result: $lt_cv_deplibs_check_method" >&5
  +echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6
  +file_magic_cmd=$lt_cv_file_magic_cmd
  +deplibs_check_method=$lt_cv_deplibs_check_method
  +
  +# Check for command to grab the raw symbol name followed by C symbol from nm.
  +echo "$as_me:2715: checking command to parse $NM output" >&5
  +echo $ECHO_N "checking command to parse $NM output... $ECHO_C" >&6
  +if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +
  +# These are sane defaults that work on at least a few old systems.
  +# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
  +
  +# Character class describing NM global symbol codes.
  +symcode='[BCDEGRST]'
  +
  +# Regexp to match symbols that can be accessed directly from C.
  +sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
  +
  +# Transform the above into a raw symbol and a C symbol.
  +symxfrm='\1 \2\3 \3'
  +
  +# Transform an extracted symbol line into a proper C declaration
  +lt_cv_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'"
  +
  +# Define system-specific variables.
  +case $host_os in
  +aix*)
  +  symcode='[BCDT]'
  +  ;;
  +cygwin* | mingw* | pw32*)
  +  symcode='[ABCDGISTW]'
  +  ;;
  +hpux*) # Its linker distinguishes data from code symbols
  +  lt_cv_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
  +  ;;
  +irix*)
  +  symcode='[BCDEGRST]'
  +  ;;
  +solaris* | sysv5*)
  +  symcode='[BDT]'
  +  ;;
  +sysv4)
  +  symcode='[DFNSTU]'
  +  ;;
  +esac
  +
  +# Handle CRLF in mingw tool chain
  +opt_cr=
  +case $host_os in
  +mingw*)
  +  opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
  +  ;;
  +esac
  +
  +# If we're using GNU nm, then use its standard symbol codes.
  +if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then
  +  symcode='[ABCDGISTW]'
  +fi
  +
  +# Try without a prefix undercore, then with it.
  +for ac_symprfx in "" "_"; do
  +
  +  # Write the raw and C identifiers.
  +lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ 	]\($symcode$symcode*\)[ 	][ 	]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'"
  +
  +  # Check to see that the pipe works correctly.
  +  pipe_works=no
  +  rm -f conftest*
  +  cat > conftest.$ac_ext <<EOF
  +#ifdef __cplusplus
  +extern "C" {
  +#endif
  +char nm_test_var;
  +void nm_test_func(){}
  +#ifdef __cplusplus
  +}
  +#endif
  +int main(){nm_test_var='a';nm_test_func();return(0);}
  +EOF
  +
  +  if { (eval echo "$as_me:2792: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2795: \$? = $ac_status" >&5
  +  (exit $ac_status); }; then
  +    # Now try to grab the symbols.
  +    nlist=conftest.nm
  +    if { (eval echo "$as_me:2799: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5
  +  (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2802: \$? = $ac_status" >&5
  +  (exit $ac_status); } && test -s "$nlist"; then
  +      # Try sorting and uniquifying the output.
  +      if sort "$nlist" | uniq > "$nlist"T; then
  +	mv -f "$nlist"T "$nlist"
  +      else
  +	rm -f "$nlist"T
  +      fi
  +
  +      # Make sure that we snagged all the symbols we need.
  +      if egrep ' nm_test_var$' "$nlist" >/dev/null; then
  +	if egrep ' nm_test_func$' "$nlist" >/dev/null; then
  +	  cat <<EOF > conftest.$ac_ext
  +#ifdef __cplusplus
  +extern "C" {
  +#endif
  +
  +EOF
  +	  # Now generate the symbol file.
  +	  eval "$lt_cv_global_symbol_to_cdecl"' < "$nlist" >> conftest.$ac_ext'
  +
  +	  cat <<EOF >> conftest.$ac_ext
  +#if defined (__STDC__) && __STDC__
  +# define lt_ptr_t void *
  +#else
  +# define lt_ptr_t char *
  +# define const
  +#endif
  +
  +/* The mapping between symbol names and symbols. */
  +const struct {
  +  const char *name;
  +  lt_ptr_t address;
  +}
  +lt_preloaded_symbols[] =
  +{
  +EOF
  +	  sed "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" >> conftest.$ac_ext
  +	  cat <<\EOF >> conftest.$ac_ext
  +  {0, (lt_ptr_t) 0}
  +};
  +
  +#ifdef __cplusplus
  +}
  +#endif
  +EOF
  +	  # Now try linking the two files.
  +	  mv conftest.$ac_objext conftstm.$ac_objext
  +	  save_LIBS="$LIBS"
  +	  save_CFLAGS="$CFLAGS"
  +	  LIBS="conftstm.$ac_objext"
  +	  CFLAGS="$CFLAGS$no_builtin_flag"
  +	  if { (eval echo "$as_me:2854: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2857: \$? = $ac_status" >&5
  +  (exit $ac_status); } && test -s conftest; then
  +	    pipe_works=yes
  +	  fi
  +	  LIBS="$save_LIBS"
  +	  CFLAGS="$save_CFLAGS"
  +	else
  +	  echo "cannot find nm_test_func in $nlist" >&5
  +	fi
  +      else
  +	echo "cannot find nm_test_var in $nlist" >&5
  +      fi
  +    else
  +      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
  +    fi
  +  else
  +    echo "$progname: failed program was:" >&5
  +    cat conftest.$ac_ext >&5
  +  fi
  +  rm -f conftest* conftst*
  +
  +  # Do not use the global_symbol_pipe unless it works.
  +  if test "$pipe_works" = yes; then
  +    break
  +  else
  +    lt_cv_sys_global_symbol_pipe=
  +  fi
  +done
  +
  +fi
  +
  +global_symbol_pipe="$lt_cv_sys_global_symbol_pipe"
  +if test -z "$lt_cv_sys_global_symbol_pipe"; then
  +  global_symbol_to_cdecl=
  +else
  +  global_symbol_to_cdecl="$lt_cv_global_symbol_to_cdecl"
  +fi
  +if test -z "$global_symbol_pipe$global_symbol_to_cdecl"; then
  +  echo "$as_me:2895: result: failed" >&5
  +echo "${ECHO_T}failed" >&6
  +else
  +  echo "$as_me:2898: result: ok" >&5
  +echo "${ECHO_T}ok" >&6
  +fi
  +
  +for ac_header in dlfcn.h
  +do
  +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
  +echo "$as_me:2905: checking for $ac_header" >&5
  +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
  +if eval "test \"\${$as_ac_Header+set}\" = set"; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 2911 "configure"
  +#include "confdefs.h"
  +#include <$ac_header>
  +_ACEOF
  +if { (eval echo "$as_me:2915: \"$ac_cpp conftest.$ac_ext\"") >&5
  +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  +  ac_status=$?
  +  egrep -v '^ *\+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:2921: \$? = $ac_status" >&5
  +  (exit $ac_status); } >/dev/null; then
  +  if test -s conftest.err; then
  +    ac_cpp_err=$ac_c_preproc_warn_flag
  +  else
  +    ac_cpp_err=
  +  fi
  +else
  +  ac_cpp_err=yes
  +fi
  +if test -z "$ac_cpp_err"; then
  +  eval "$as_ac_Header=yes"
  +else
  +  echo "$as_me: failed program was:" >&5
  +  cat conftest.$ac_ext >&5
  +  eval "$as_ac_Header=no"
  +fi
  +rm -f conftest.err conftest.$ac_ext
  +fi
  +echo "$as_me:2940: result: `eval echo '${'$as_ac_Header'}'`" >&5
  +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
  +if test `eval echo '${'$as_ac_Header'}'` = yes; then
  +  cat >>confdefs.h <<EOF
  +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
  +EOF
  +
  +fi
  +done
  +
  +# Only perform the check for file, if the check method requires it
  +case $deplibs_check_method in
  +file_magic*)
  +  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
  +    echo "$as_me:2954: checking for ${ac_tool_prefix}file" >&5
  +echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6
  +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  case $MAGIC_CMD in
  +  /*)
  +  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
  +  ;;
  +  ?:/*)
  +  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path.
  +  ;;
  +  *)
  +  ac_save_MAGIC_CMD="$MAGIC_CMD"
  +  IFS="${IFS=   }"; ac_save_ifs="$IFS"; IFS=":"
  +  ac_dummy="/usr/bin:$PATH"
  +  for ac_dir in $ac_dummy; do
  +    test -z "$ac_dir" && ac_dir=.
  +    if test -f $ac_dir/${ac_tool_prefix}file; then
  +      lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
  +      if test -n "$file_magic_test_file"; then
  +	case $deplibs_check_method in
  +	"file_magic "*)
  +	  file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
  +	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
  +	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
  +	    egrep "$file_magic_regex" > /dev/null; then
  +	    :
  +	  else
  +	    cat <<EOF 1>&2
  +
  +*** Warning: the command libtool uses to detect shared libraries,
  +*** $file_magic_cmd, produces output that libtool cannot recognize.
  +*** The result is that libtool may fail to recognize shared libraries
  +*** as such.  This will affect the creation of libtool libraries that
  +*** depend on shared libraries, but programs linked with such libtool
  +*** libraries will work regardless of this problem.  Nevertheless, you
  +*** may want to report the problem to your system manager and/or to
  +*** bug-libtool@gnu.org
  +
  +EOF
  +	  fi ;;
  +	esac
  +      fi
  +      break
  +    fi
  +  done
  +  IFS="$ac_save_ifs"
  +  MAGIC_CMD="$ac_save_MAGIC_CMD"
  +  ;;
  +esac
  +fi
  +
  +MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
  +if test -n "$MAGIC_CMD"; then
  +  echo "$as_me:3009: result: $MAGIC_CMD" >&5
  +echo "${ECHO_T}$MAGIC_CMD" >&6
  +else
  +  echo "$as_me:3012: result: no" >&5
  +echo "${ECHO_T}no" >&6
  +fi
  +
  +if test -z "$lt_cv_path_MAGIC_CMD"; then
  +  if test -n "$ac_tool_prefix"; then
  +    echo "$as_me:3018: checking for file" >&5
  +echo $ECHO_N "checking for file... $ECHO_C" >&6
  +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  case $MAGIC_CMD in
  +  /*)
  +  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
  +  ;;
  +  ?:/*)
  +  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path.
  +  ;;
  +  *)
  +  ac_save_MAGIC_CMD="$MAGIC_CMD"
  +  IFS="${IFS=   }"; ac_save_ifs="$IFS"; IFS=":"
  +  ac_dummy="/usr/bin:$PATH"
  +  for ac_dir in $ac_dummy; do
  +    test -z "$ac_dir" && ac_dir=.
  +    if test -f $ac_dir/file; then
  +      lt_cv_path_MAGIC_CMD="$ac_dir/file"
  +      if test -n "$file_magic_test_file"; then
  +	case $deplibs_check_method in
  +	"file_magic "*)
  +	  file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
  +	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
  +	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
  +	    egrep "$file_magic_regex" > /dev/null; then
  +	    :
  +	  else
  +	    cat <<EOF 1>&2
  +
  +*** Warning: the command libtool uses to detect shared libraries,
  +*** $file_magic_cmd, produces output that libtool cannot recognize.
  +*** The result is that libtool may fail to recognize shared libraries
  +*** as such.  This will affect the creation of libtool libraries that
  +*** depend on shared libraries, but programs linked with such libtool
  +*** libraries will work regardless of this problem.  Nevertheless, you
  +*** may want to report the problem to your system manager and/or to
  +*** bug-libtool@gnu.org
  +
  +EOF
  +	  fi ;;
  +	esac
  +      fi
  +      break
  +    fi
  +  done
  +  IFS="$ac_save_ifs"
  +  MAGIC_CMD="$ac_save_MAGIC_CMD"
  +  ;;
  +esac
  +fi
  +
  +MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
  +if test -n "$MAGIC_CMD"; then
  +  echo "$as_me:3073: result: $MAGIC_CMD" >&5
  +echo "${ECHO_T}$MAGIC_CMD" >&6
  +else
  +  echo "$as_me:3076: result: no" >&5
  +echo "${ECHO_T}no" >&6
  +fi
  +
  +  else
  +    MAGIC_CMD=:
  +  fi
  +fi
  +
  +  fi
  +  ;;
  +esac
  +
  +if test -n "$ac_tool_prefix"; then
  +  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
  +set dummy ${ac_tool_prefix}ranlib; ac_word=$2
  +echo "$as_me:3092: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_RANLIB+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test -n "$RANLIB"; then
  +  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
  +else
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
  +echo "$as_me:3107: found $ac_dir/$ac_word" >&5
  +break
  +done
  +
  +fi
  +fi
  +RANLIB=$ac_cv_prog_RANLIB
  +if test -n "$RANLIB"; then
  +  echo "$as_me:3115: result: $RANLIB" >&5
  +echo "${ECHO_T}$RANLIB" >&6
  +else
  +  echo "$as_me:3118: result: no" >&5
  +echo "${ECHO_T}no" >&6
  +fi
  +
  +fi
  +if test -z "$ac_cv_prog_RANLIB"; then
  +  ac_ct_RANLIB=$RANLIB
  +  # Extract the first word of "ranlib", so it can be a program name with args.
  +set dummy ranlib; ac_word=$2
  +echo "$as_me:3127: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test -n "$ac_ct_RANLIB"; then
  +  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
  +else
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +ac_cv_prog_ac_ct_RANLIB="ranlib"
  +echo "$as_me:3142: found $ac_dir/$ac_word" >&5
  +break
  +done
  +
  +  test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
  +fi
  +fi
  +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
  +if test -n "$ac_ct_RANLIB"; then
  +  echo "$as_me:3151: result: $ac_ct_RANLIB" >&5
  +echo "${ECHO_T}$ac_ct_RANLIB" >&6
  +else
  +  echo "$as_me:3154: result: no" >&5
  +echo "${ECHO_T}no" >&6
  +fi
  +
  +  RANLIB=$ac_ct_RANLIB
  +else
  +  RANLIB="$ac_cv_prog_RANLIB"
  +fi
  +
  +if test -n "$ac_tool_prefix"; then
  +  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
  +set dummy ${ac_tool_prefix}strip; ac_word=$2
  +echo "$as_me:3166: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_STRIP+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test -n "$STRIP"; then
  +  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
  +else
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +ac_cv_prog_STRIP="${ac_tool_prefix}strip"
  +echo "$as_me:3181: found $ac_dir/$ac_word" >&5
  +break
  +done
  +
  +fi
  +fi
  +STRIP=$ac_cv_prog_STRIP
  +if test -n "$STRIP"; then
  +  echo "$as_me:3189: result: $STRIP" >&5
  +echo "${ECHO_T}$STRIP" >&6
  +else
  +  echo "$as_me:3192: result: no" >&5
  +echo "${ECHO_T}no" >&6
  +fi
  +
  +fi
  +if test -z "$ac_cv_prog_STRIP"; then
  +  ac_ct_STRIP=$STRIP
  +  # Extract the first word of "strip", so it can be a program name with args.
  +set dummy strip; ac_word=$2
  +echo "$as_me:3201: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test -n "$ac_ct_STRIP"; then
  +  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
  +else
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +ac_cv_prog_ac_ct_STRIP="strip"
  +echo "$as_me:3216: found $ac_dir/$ac_word" >&5
  +break
  +done
  +
  +  test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
  +fi
  +fi
  +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
  +if test -n "$ac_ct_STRIP"; then
  +  echo "$as_me:3225: result: $ac_ct_STRIP" >&5
  +echo "${ECHO_T}$ac_ct_STRIP" >&6
  +else
  +  echo "$as_me:3228: result: no" >&5
  +echo "${ECHO_T}no" >&6
  +fi
  +
  +  STRIP=$ac_ct_STRIP
  +else
  +  STRIP="$ac_cv_prog_STRIP"
  +fi
  +
  +enable_dlopen=no
  +enable_win32_dll=no
  +
  +# Check whether --enable-libtool-lock or --disable-libtool-lock was given.
  +if test "${enable_libtool_lock+set}" = set; then
  +  enableval="$enable_libtool_lock"
  +
  +fi;
  +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
  +
  +# Some flags need to be propagated to the compiler or linker for good
  +# libtool support.
  +case $host in
  +*-*-irix6*)
  +  # Find out which ABI we are using.
  +  echo '#line 3252 "configure"' > conftest.$ac_ext
  +  if { (eval echo "$as_me:3253: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:3256: \$? = $ac_status" >&5
  +  (exit $ac_status); }; then
  +    case `/usr/bin/file conftest.$ac_objext` in
  +    *32-bit*)
  +      LD="${LD-ld} -32"
  +      ;;
  +    *N32*)
  +      LD="${LD-ld} -n32"
  +      ;;
  +    *64-bit*)
  +      LD="${LD-ld} -64"
  +      ;;
  +    esac
  +  fi
  +  rm -rf conftest*
  +  ;;
  +
  +*-*-sco3.2v5*)
  +  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
  +  SAVE_CFLAGS="$CFLAGS"
  +  CFLAGS="$CFLAGS -belf"
  +  echo "$as_me:3277: checking whether the C compiler needs -belf" >&5
  +echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6
  +if test "${lt_cv_cc_needs_belf+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +
  +     ac_ext=c
  +ac_cpp='$CPP $CPPFLAGS'
  +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  +ac_compiler_gnu=$ac_cv_c_compiler_gnu
  +
  +     cat >conftest.$ac_ext <<_ACEOF
  +#line 3290 "configure"
  +#include "confdefs.h"
  +
  +int
  +main ()
  +{
  +
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext conftest$ac_exeext
  +if { (eval echo "$as_me:3302: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:3305: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest$ac_exeext'
  +  { (eval echo "$as_me:3308: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:3311: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  lt_cv_cc_needs_belf=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +lt_cv_cc_needs_belf=no
  +fi
  +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  +     ac_ext=c
  +ac_cpp='$CPP $CPPFLAGS'
  +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  +ac_compiler_gnu=$ac_cv_c_compiler_gnu
  +
  +fi
  +echo "$as_me:3327: result: $lt_cv_cc_needs_belf" >&5
  +echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6
  +  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
  +    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
  +    CFLAGS="$SAVE_CFLAGS"
  +  fi
  +  ;;
  +
  +esac
  +
  +# Sed substitution that helps us do robust quoting.  It backslashifies
  +# metacharacters that are still active within double-quoted strings.
  +Xsed='sed -e s/^X//'
  +sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'
  +
  +# Same as above, but do not quote variable references.
  +double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'
  +
  +# Sed substitution to delay expansion of an escaped shell variable in a
  +# double_quote_subst'ed string.
  +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
  +
  +# Constants:
  +rm="rm -f"
  +
  +# Global variables:
  +default_ofile=libtool
  +can_build_shared=yes
  +
  +# All known linkers require a `.a' archive for static linking (except M$VC,
  +# which needs '.lib').
  +libext=a
  +ltmain="$ac_aux_dir/ltmain.sh"
  +ofile="$default_ofile"
  +with_gnu_ld="$lt_cv_prog_gnu_ld"
  +need_locks="$enable_libtool_lock"
  +
  +old_CC="$CC"
  +old_CFLAGS="$CFLAGS"
  +
  +# Set sane defaults for various variables
  +test -z "$AR" && AR=ar
  +test -z "$AR_FLAGS" && AR_FLAGS=cru
  +test -z "$AS" && AS=as
  +test -z "$CC" && CC=cc
  +test -z "$DLLTOOL" && DLLTOOL=dlltool
  +test -z "$LD" && LD=ld
  +test -z "$LN_S" && LN_S="ln -s"
  +test -z "$MAGIC_CMD" && MAGIC_CMD=file
  +test -z "$NM" && NM=nm
  +test -z "$OBJDUMP" && OBJDUMP=objdump
  +test -z "$RANLIB" && RANLIB=:
  +test -z "$STRIP" && STRIP=:
  +test -z "$ac_objext" && ac_objext=o
  +
  +if test x"$host" != x"$build"; then
  +  ac_tool_prefix=${host_alias}-
  +else
  +  ac_tool_prefix=
  +fi
  +
  +# Transform linux* to *-*-linux-gnu*, to support old configure scripts.
  +case $host_os in
  +linux-gnu*) ;;
  +linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
  +esac
  +
  +case $host_os in
  +aix3*)
  +  # AIX sometimes has problems with the GCC collect2 program.  For some
  +  # reason, if we set the COLLECT_NAMES environment variable, the problems
  +  # vanish in a puff of smoke.
  +  if test "X${COLLECT_NAMES+set}" != Xset; then
  +    COLLECT_NAMES=
  +    export COLLECT_NAMES
  +  fi
  +  ;;
  +esac
  +
  +# Determine commands to create old-style static archives.
  +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
  +old_postinstall_cmds='chmod 644 $oldlib'
  +old_postuninstall_cmds=
  +
  +if test -n "$RANLIB"; then
  +  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
  +  old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
  +fi
  +
  +# Allow CC to be a program name with arguments.
  +set dummy $CC
  +compiler="$2"
  +
  +## FIXME: this should be a separate macro
  +##
  +echo "$as_me:3422: checking for objdir" >&5
  +echo $ECHO_N "checking for objdir... $ECHO_C" >&6
  +rm -f .libs 2>/dev/null
  +mkdir .libs 2>/dev/null
  +if test -d .libs; then
  +  objdir=.libs
  +else
  +  # MS-DOS does not allow filenames that begin with a dot.
  +  objdir=_libs
  +fi
  +rmdir .libs 2>/dev/null
  +echo "$as_me:3433: result: $objdir" >&5
  +echo "${ECHO_T}$objdir" >&6
  +##
  +## END FIXME
  +
  +## FIXME: this should be a separate macro
  +##
  +
  +# Check whether --with-pic or --without-pic was given.
  +if test "${with_pic+set}" = set; then
  +  withval="$with_pic"
  +  pic_mode="$withval"
  +else
  +  pic_mode=default
  +fi;
  +test -z "$pic_mode" && pic_mode=default
  +
  +# We assume here that the value for lt_cv_prog_cc_pic will not be cached
  +# in isolation, and that seeing it set (from the cache) indicates that
  +# the associated values are set (in the cache) correctly too.
  +echo "$as_me:3453: checking for $compiler option to produce PIC" >&5
  +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
  +if test "${lt_cv_prog_cc_pic+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +   lt_cv_prog_cc_pic=
  +  lt_cv_prog_cc_shlib=
  +  lt_cv_prog_cc_wl=
  +  lt_cv_prog_cc_static=
  +  lt_cv_prog_cc_no_builtin=
  +  lt_cv_prog_cc_can_build_shared=$can_build_shared
  +
  +  if test "$GCC" = yes; then
  +    lt_cv_prog_cc_wl='-Wl,'
  +    lt_cv_prog_cc_static='-static'
  +
  +    case $host_os in
  +    aix*)
  +      # Below there is a dirty hack to force normal static linking with -ldl
  +      # The problem is because libdl dynamically linked with both libc and
  +      # libC (AIX C++ library), which obviously doesn't included in libraries
  +      # list by gcc. This cause undefined symbols with -static flags.
  +      # This hack allows C programs to be linked with "-static -ldl", but
  +      # we not sure about C++ programs.
  +      lt_cv_prog_cc_static="$lt_cv_prog_cc_static ${lt_cv_prog_cc_wl}-lC"
  +      ;;
  +    amigaos*)
  +      # FIXME: we need at least 68020 code to build shared libraries, but
  +      # adding the `-m68020' flag to GCC prevents building anything better,
  +      # like `-m68040'.
  +      lt_cv_prog_cc_pic='-m68020 -resident32 -malways-restore-a4'
  +      ;;
  +    beos* | irix5* | irix6* | osf3* | osf4* | osf5*)
  +      # PIC is the default for these OSes.
  +      ;;
  +    darwin* | rhapsody*)
  +      # PIC is the default on this platform
  +      # Common symbols not allowed in MH_DYLIB files
  +      lt_cv_prog_cc_pic='-fno-common'
  +      ;;
  +    cygwin* | mingw* | pw32* | os2*)
  +      # This hack is so that the source file can tell whether it is being
  +      # built for inclusion in a dll (and should export symbols for example).
  +      lt_cv_prog_cc_pic='-DDLL_EXPORT'
  +      ;;
  +    sysv4*MP*)
  +      if test -d /usr/nec; then
  +	 lt_cv_prog_cc_pic=-Kconform_pic
  +      fi
  +      ;;
  +    *)
  +      lt_cv_prog_cc_pic='-fPIC'
  +      ;;
  +    esac
  +  else
  +    # PORTME Check for PIC flags for the system compiler.
  +    case $host_os in
  +    aix3* | aix4* | aix5*)
  +      # All AIX code is PIC.
  +      if test "$host_cpu" = ia64; then
  +        # AIX 5 now supports IA64 processor
  +        lt_cv_prog_cc_static='-Bstatic'
  +        lt_cv_prog_cc_wl='-Wl,'
  +      else
  +        lt_cv_prog_cc_static='-bnso -bI:/lib/syscalls.exp'
  +      fi
  +      ;;
  +
  +    hpux9* | hpux10* | hpux11*)
  +      # Is there a better lt_cv_prog_cc_static that works with the bundled CC?
  +      lt_cv_prog_cc_wl='-Wl,'
  +      lt_cv_prog_cc_static="${lt_cv_prog_cc_wl}-a ${lt_cv_prog_cc_wl}archive"
  +      lt_cv_prog_cc_pic='+Z'
  +      ;;
  +
  +    irix5* | irix6*)
  +      lt_cv_prog_cc_wl='-Wl,'
  +      lt_cv_prog_cc_static='-non_shared'
  +      # PIC (with -KPIC) is the default.
  +      ;;
  +
  +    cygwin* | mingw* | pw32* | os2*)
  +      # This hack is so that the source file can tell whether it is being
  +      # built for inclusion in a dll (and should export symbols for example).
  +      lt_cv_prog_cc_pic='-DDLL_EXPORT'
  +      ;;
  +
  +    newsos6)
  +      lt_cv_prog_cc_pic='-KPIC'
  +      lt_cv_prog_cc_static='-Bstatic'
  +      ;;
  +
  +    osf3* | osf4* | osf5*)
  +      # All OSF/1 code is PIC.
  +      lt_cv_prog_cc_wl='-Wl,'
  +      lt_cv_prog_cc_static='-non_shared'
  +      ;;
  +
  +    sco3.2v5*)
  +      lt_cv_prog_cc_pic='-Kpic'
  +      lt_cv_prog_cc_static='-dn'
  +      lt_cv_prog_cc_shlib='-belf'
  +      ;;
  +
  +    solaris*)
  +      lt_cv_prog_cc_pic='-KPIC'
  +      lt_cv_prog_cc_static='-Bstatic'
  +      lt_cv_prog_cc_wl='-Wl,'
  +      ;;
  +
  +    sunos4*)
  +      lt_cv_prog_cc_pic='-PIC'
  +      lt_cv_prog_cc_static='-Bstatic'
  +      lt_cv_prog_cc_wl='-Qoption ld '
  +      ;;
  +
  +    sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
  +      lt_cv_prog_cc_pic='-KPIC'
  +      lt_cv_prog_cc_static='-Bstatic'
  +      if test "x$host_vendor" = xsni; then
  +        lt_cv_prog_cc_wl='-LD'
  +      else
  +        lt_cv_prog_cc_wl='-Wl,'
  +      fi
  +      ;;
  +
  +    uts4*)
  +      lt_cv_prog_cc_pic='-pic'
  +      lt_cv_prog_cc_static='-Bstatic'
  +      ;;
  +
  +    sysv4*MP*)
  +      if test -d /usr/nec ;then
  +	lt_cv_prog_cc_pic='-Kconform_pic'
  +	lt_cv_prog_cc_static='-Bstatic'
  +      fi
  +      ;;
  +
  +    *)
  +      lt_cv_prog_cc_can_build_shared=no
  +      ;;
  +    esac
  +  fi
  +
  +fi
  +
  +if test -z "$lt_cv_prog_cc_pic"; then
  +  echo "$as_me:3600: result: none" >&5
  +echo "${ECHO_T}none" >&6
  +else
  +  echo "$as_me:3603: result: $lt_cv_prog_cc_pic" >&5
  +echo "${ECHO_T}$lt_cv_prog_cc_pic" >&6
  +
  +  # Check to make sure the pic_flag actually works.
  +  echo "$as_me:3607: checking if $compiler PIC flag $lt_cv_prog_cc_pic works" >&5
  +echo $ECHO_N "checking if $compiler PIC flag $lt_cv_prog_cc_pic works... $ECHO_C" >&6
  +  if test "${lt_cv_prog_cc_pic_works+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +      save_CFLAGS="$CFLAGS"
  +    CFLAGS="$CFLAGS $lt_cv_prog_cc_pic -DPIC"
  +    cat >conftest.$ac_ext <<_ACEOF
  +#line 3615 "configure"
  +#include "confdefs.h"
  +
  +int
  +main ()
  +{
  +
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:3627: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:3630: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:3633: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:3636: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +        case $host_os in
  +      hpux9* | hpux10* | hpux11*)
  +	# On HP-UX, both CC and GCC only warn that PIC is supported... then
  +	# they create non-PIC objects.  So, if there were any warnings, we
  +	# assume that PIC is not supported.
  +	if test -s conftest.err; then
  +	  lt_cv_prog_cc_pic_works=no
  +	else
  +	  lt_cv_prog_cc_pic_works=yes
  +	fi
  +	;;
  +      *)
  +	lt_cv_prog_cc_pic_works=yes
  +	;;
  +      esac
  +
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +      lt_cv_prog_cc_pic_works=no
  +
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +    CFLAGS="$save_CFLAGS"
  +
  +fi
  +
  +  if test "X$lt_cv_prog_cc_pic_works" = Xno; then
  +    lt_cv_prog_cc_pic=
  +    lt_cv_prog_cc_can_build_shared=no
  +  else
  +    lt_cv_prog_cc_pic=" $lt_cv_prog_cc_pic"
  +  fi
  +
  +  echo "$as_me:3672: result: $lt_cv_prog_cc_pic_works" >&5
  +echo "${ECHO_T}$lt_cv_prog_cc_pic_works" >&6
  +fi
  +##
  +## END FIXME
  +
  +# Check for any special shared library compilation flags.
  +if test -n "$lt_cv_prog_cc_shlib"; then
  +  { echo "$as_me:3680: WARNING: \`$CC' requires \`$lt_cv_prog_cc_shlib' to build shared libraries" >&5
  +echo "$as_me: WARNING: \`$CC' requires \`$lt_cv_prog_cc_shlib' to build shared libraries" >&2;}
  +  if echo "$old_CC $old_CFLAGS " | egrep -e "[ 	]$lt_cv_prog_cc_shlib[ 	]" >/dev/null; then :
  +  else
  +   { echo "$as_me:3684: WARNING: add \`$lt_cv_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&5
  +echo "$as_me: WARNING: add \`$lt_cv_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&2;}
  +    lt_cv_prog_cc_can_build_shared=no
  +  fi
  +fi
  +
  +## FIXME: this should be a separate macro
  +##
  +echo "$as_me:3692: checking if $compiler static flag $lt_cv_prog_cc_static works" >&5
  +echo $ECHO_N "checking if $compiler static flag $lt_cv_prog_cc_static works... $ECHO_C" >&6
  +if test "${lt_cv_prog_cc_static_works+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +    lt_cv_prog_cc_static_works=no
  +  save_LDFLAGS="$LDFLAGS"
  +  LDFLAGS="$LDFLAGS $lt_cv_prog_cc_static"
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 3701 "configure"
  +#include "confdefs.h"
  +
  +int
  +main ()
  +{
  +
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext conftest$ac_exeext
  +if { (eval echo "$as_me:3713: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:3716: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest$ac_exeext'
  +  { (eval echo "$as_me:3719: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:3722: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  lt_cv_prog_cc_static_works=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +fi
  +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  +  LDFLAGS="$save_LDFLAGS"
  +
  +fi
  +
  +# Belt *and* braces to stop my trousers falling down:
  +test "X$lt_cv_prog_cc_static_works" = Xno && lt_cv_prog_cc_static=
  +echo "$as_me:3736: result: $lt_cv_prog_cc_static_works" >&5
  +echo "${ECHO_T}$lt_cv_prog_cc_static_works" >&6
  +
  +pic_flag="$lt_cv_prog_cc_pic"
  +special_shlib_compile_flags="$lt_cv_prog_cc_shlib"
  +wl="$lt_cv_prog_cc_wl"
  +link_static_flag="$lt_cv_prog_cc_static"
  +no_builtin_flag="$lt_cv_prog_cc_no_builtin"
  +can_build_shared="$lt_cv_prog_cc_can_build_shared"
  +##
  +## END FIXME
  +
  +## FIXME: this should be a separate macro
  +##
  +# Check to see if options -o and -c are simultaneously supported by compiler
  +echo "$as_me:3751: checking if $compiler supports -c -o file.$ac_objext" >&5
  +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
  +if test "${lt_cv_compiler_c_o+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +
  +$rm -r conftest 2>/dev/null
  +mkdir conftest
  +cd conftest
  +echo "int some_variable = 0;" > conftest.$ac_ext
  +mkdir out
  +# According to Tom Tromey, Ian Lance Taylor reported there are C compilers
  +# that will create temporary files in the current directory regardless of
  +# the output directory.  Thus, making CWD read-only will cause this test
  +# to fail, enabling locking or at least warning the user not to do parallel
  +# builds.
  +chmod -w .
  +save_CFLAGS="$CFLAGS"
  +CFLAGS="$CFLAGS -o out/conftest2.$ac_objext"
  +compiler_c_o=no
  +if { (eval echo configure:3771: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.$ac_objext; then
  +  # The compiler can only warn and ignore the option if not recognized
  +  # So say no if there are warnings
  +  if test -s out/conftest.err; then
  +    lt_cv_compiler_c_o=no
  +  else
  +    lt_cv_compiler_c_o=yes
  +  fi
  +else
  +  # Append any errors to the config.log.
  +  cat out/conftest.err 1>&5
  +  lt_cv_compiler_c_o=no
  +fi
  +CFLAGS="$save_CFLAGS"
  +chmod u+w .
  +$rm conftest* out/*
  +rmdir out
  +cd ..
  +rmdir conftest
  +$rm -r conftest 2>/dev/null
  +
  +fi
  +
  +compiler_c_o=$lt_cv_compiler_c_o
  +echo "$as_me:3795: result: $compiler_c_o" >&5
  +echo "${ECHO_T}$compiler_c_o" >&6
  +
  +if test x"$compiler_c_o" = x"yes"; then
  +  # Check to see if we can write to a .lo
  +  echo "$as_me:3800: checking if $compiler supports -c -o file.lo" >&5
  +echo $ECHO_N "checking if $compiler supports -c -o file.lo... $ECHO_C" >&6
  +  if test "${lt_cv_compiler_o_lo+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +
  +  lt_cv_compiler_o_lo=no
  +  save_CFLAGS="$CFLAGS"
  +  CFLAGS="$CFLAGS -c -o conftest.lo"
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 3810 "configure"
  +#include "confdefs.h"
  +
  +int
  +main ()
  +{
  +int some_variable = 0;
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:3822: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:3825: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:3828: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:3831: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +      # The compiler can only warn and ignore the option if not recognized
  +    # So say no if there are warnings
  +    if test -s conftest.err; then
  +      lt_cv_compiler_o_lo=no
  +    else
  +      lt_cv_compiler_o_lo=yes
  +    fi
  +
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +  CFLAGS="$save_CFLAGS"
  +
  +fi
  +
  +  compiler_o_lo=$lt_cv_compiler_o_lo
  +  echo "$as_me:3851: result: $compiler_c_lo" >&5
  +echo "${ECHO_T}$compiler_c_lo" >&6
  +else
  +  compiler_o_lo=no
  +fi
  +##
  +## END FIXME
  +
  +## FIXME: this should be a separate macro
  +##
  +# Check to see if we can do hard links to lock some files if needed
  +hard_links="nottested"
  +if test "$compiler_c_o" = no && test "$need_locks" != no; then
  +  # do not overwrite the value of need_locks provided by the user
  +  echo "$as_me:3865: checking if we can lock with hard links" >&5
  +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
  +  hard_links=yes
  +  $rm conftest*
  +  ln conftest.a conftest.b 2>/dev/null && hard_links=no
  +  touch conftest.a
  +  ln conftest.a conftest.b 2>&5 || hard_links=no
  +  ln conftest.a conftest.b 2>/dev/null && hard_links=no
  +  echo "$as_me:3873: result: $hard_links" >&5
  +echo "${ECHO_T}$hard_links" >&6
  +  if test "$hard_links" = no; then
  +    { echo "$as_me:3876: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
  +echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
  +    need_locks=warn
  +  fi
  +else
  +  need_locks=no
  +fi
  +##
  +## END FIXME
  +
  +## FIXME: this should be a separate macro
  +##
  +if test "$GCC" = yes; then
  +  # Check to see if options -fno-rtti -fno-exceptions are supported by compiler
  +  echo "$as_me:3890: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
  +echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6
  +  echo "int some_variable = 0;" > conftest.$ac_ext
  +  save_CFLAGS="$CFLAGS"
  +  CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.$ac_ext"
  +  compiler_rtti_exceptions=no
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 3897 "configure"
  +#include "confdefs.h"
  +
  +int
  +main ()
  +{
  +int some_variable = 0;
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:3909: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:3912: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:3915: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:3918: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +      # The compiler can only warn and ignore the option if not recognized
  +    # So say no if there are warnings
  +    if test -s conftest.err; then
  +      compiler_rtti_exceptions=no
  +    else
  +      compiler_rtti_exceptions=yes
  +    fi
  +
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +  CFLAGS="$save_CFLAGS"
  +  echo "$as_me:3934: result: $compiler_rtti_exceptions" >&5
  +echo "${ECHO_T}$compiler_rtti_exceptions" >&6
  +
  +  if test "$compiler_rtti_exceptions" = "yes"; then
  +    no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions'
  +  else
  +    no_builtin_flag=' -fno-builtin'
  +  fi
  +fi
  +##
  +## END FIXME
  +
  +## FIXME: this should be a separate macro
  +##
  +# See if the linker supports building shared libraries.
  +echo "$as_me:3949: checking whether the linker ($LD) supports shared libraries" >&5
  +echo $ECHO_N "checking whether the linker ($LD) supports shared libraries... $ECHO_C" >&6
  +
  +allow_undefined_flag=
  +no_undefined_flag=
  +need_lib_prefix=unknown
  +need_version=unknown
  +# when you set need_version to no, make sure it does not cause -set_version
  +# flags to be left without arguments
  +archive_cmds=
  +archive_expsym_cmds=
  +old_archive_from_new_cmds=
  +old_archive_from_expsyms_cmds=
  +export_dynamic_flag_spec=
  +whole_archive_flag_spec=
  +thread_safe_flag_spec=
  +hardcode_into_libs=no
  +hardcode_libdir_flag_spec=
  +hardcode_libdir_separator=
  +hardcode_direct=no
  +hardcode_minus_L=no
  +hardcode_shlibpath_var=unsupported
  +runpath_var=
  +link_all_deplibs=unknown
  +always_export_symbols=no
  +export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols'
  +# include_expsyms should be a list of space-separated symbols to be *always*
  +# included in the symbol list
  +include_expsyms=
  +# exclude_expsyms can be an egrep regular expression of symbols to exclude
  +# it will be wrapped by ` (' and `)$', so one must not match beginning or
  +# end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
  +# as well as any symbol that contains `d'.
  +exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
  +# Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
  +# platforms (ab)use it in PIC code, but their linkers get confused if
  +# the symbol is explicitly referenced.  Since portable code cannot
  +# rely on this symbol name, it's probably fine to never include it in
  +# preloaded symbol tables.
  +extract_expsyms_cmds=
  +
  +case $host_os in
  +cygwin* | mingw* | pw32* )
  +  # FIXME: the MSVC++ port hasn't been tested in a loooong time
  +  # When not using gcc, we currently assume that we are using
  +  # Microsoft Visual C++.
  +  if test "$GCC" != yes; then
  +    with_gnu_ld=no
  +  fi
  +  ;;
  +
  +esac
  +
  +ld_shlibs=yes
  +if test "$with_gnu_ld" = yes; then
  +  # If archive_cmds runs LD, not CC, wlarc should be empty
  +  wlarc='${wl}'
  +
  +  # See if GNU ld supports shared libraries.
  +  case $host_os in
  +  aix3* | aix4* | aix5*)
  +    # On AIX, the GNU linker is very broken
  +    # Note:Check GNU linker on AIX 5-IA64 when/if it becomes available.
  +    ld_shlibs=no
  +    cat <<EOF 1>&2
  +
  +*** Warning: the GNU linker, at least up to release 2.9.1, is reported
  +*** to be unable to reliably create shared libraries on AIX.
  +*** Therefore, libtool is disabling shared libraries support.  If you
  +*** really care for shared libraries, you may want to modify your PATH
  +*** so that a non-GNU linker is found, and then restart.
  +
  +EOF
  +    ;;
  +
  +  amigaos*)
  +    archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
  +    hardcode_libdir_flag_spec='-L$libdir'
  +    hardcode_minus_L=yes
  +
  +    # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
  +    # that the semantics of dynamic libraries on AmigaOS, at least up
  +    # to version 4, is to share data among multiple programs linked
  +    # with the same dynamic library.  Since this doesn't match the
  +    # behavior of shared libraries on other platforms, we can use
  +    # them.
  +    ld_shlibs=no
  +    ;;
  +
  +  beos*)
  +    if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
  +      allow_undefined_flag=unsupported
  +      # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
  +      # support --undefined.  This deserves some investigation.  FIXME
  +      archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
  +    else
  +      ld_shlibs=no
  +    fi
  +    ;;
  +
  +  cygwin* | mingw* | pw32*)
  +    # hardcode_libdir_flag_spec is actually meaningless, as there is
  +    # no search path for DLLs.
  +    hardcode_libdir_flag_spec='-L$libdir'
  +    allow_undefined_flag=unsupported
  +    always_export_symbols=yes
  +
  +    extract_expsyms_cmds='test -f $output_objdir/impgen.c || \
  +      sed -e "/^# \/\* impgen\.c starts here \*\//,/^# \/\* impgen.c ends here \*\// { s/^# //;s/^# *$//; p; }" -e d < $''0 > $output_objdir/impgen.c~
  +      test -f $output_objdir/impgen.exe || (cd $output_objdir && \
  +      if test "x$HOST_CC" != "x" ; then $HOST_CC -o impgen impgen.c ; \
  +      else $CC -o impgen impgen.c ; fi)~
  +      $output_objdir/impgen $dir/$soroot > $output_objdir/$soname-def'
  +
  +    old_archive_from_expsyms_cmds='$DLLTOOL --as=$AS --dllname $soname --def $output_objdir/$soname-def --output-lib $output_objdir/$newlib'
  +
  +    # cygwin and mingw dlls have different entry points and sets of symbols
  +    # to exclude.
  +    # FIXME: what about values for MSVC?
  +    dll_entry=__cygwin_dll_entry@12
  +    dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12~
  +    case $host_os in
  +    mingw*)
  +      # mingw values
  +      dll_entry=_DllMainCRTStartup@12
  +      dll_exclude_symbols=DllMain@12,DllMainCRTStartup@12,DllEntryPoint@12~
  +      ;;
  +    esac
  +
  +    # mingw and cygwin differ, and it's simplest to just exclude the union
  +    # of the two symbol sets.
  +    dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12,DllMainCRTStartup@12,DllEntryPoint@12
  +
  +    # recent cygwin and mingw systems supply a stub DllMain which the user
  +    # can override, but on older systems we have to supply one (in ltdll.c)
  +    if test "x$lt_cv_need_dllmain" = "xyes"; then
  +      ltdll_obj='$output_objdir/$soname-ltdll.'"$ac_objext "
  +      ltdll_cmds='test -f $output_objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < [$]0 > $output_objdir/$soname-ltdll.c~
  +	test -f $output_objdir/$soname-ltdll.$ac_objext || (cd $output_objdir && $CC -c $soname-ltdll.c)~'
  +    else
  +      ltdll_obj=
  +      ltdll_cmds=
  +    fi
  +
  +    # Extract the symbol export list from an `--export-all' def file,
  +    # then regenerate the def file from the symbol export list, so that
  +    # the compiled dll only exports the symbol export list.
  +    # Be careful not to strip the DATA tag left be newer dlltools.
  +    export_symbols_cmds="$ltdll_cmds"'
  +      $DLLTOOL --export-all --exclude-symbols '$dll_exclude_symbols' --output-def $output_objdir/$soname-def '$ltdll_obj'$libobjs $convenience~
  +      sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]*//" -e "s/ *;.*$//" < $output_objdir/$soname-def > $export_symbols'
  +
  +    # If the export-symbols file already is a .def file (1st line
  +    # is EXPORTS), use it as is.
  +    # If DATA tags from a recent dlltool are present, honour them!
  +    archive_expsym_cmds='if test "x`head -1 $export_symbols`" = xEXPORTS; then
  +        cp $export_symbols $output_objdir/$soname-def;
  +      else
  +        echo EXPORTS > $output_objdir/$soname-def;
  +        _lt_hint=1;
  +        cat $export_symbols | while read symbol; do
  +         set dummy \$symbol;
  +         case \$# in
  +           2) echo "   \$2 @ \$_lt_hint ; " >> $output_objdir/$soname-def;;
  +           *) echo "     \$2 @ \$_lt_hint \$3 ; " >> $output_objdir/$soname-def;;
  +         esac;
  +         _lt_hint=`expr 1 + \$_lt_hint`;
  +        done;
  +      fi~
  +      '"$ltdll_cmds"'
  +      $CC -Wl,--base-file,$output_objdir/$soname-base '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~
  +      $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp~
  +      $CC -Wl,--base-file,$output_objdir/$soname-base $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~
  +      $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp --output-lib $output_objdir/$libname.dll.a~
  +      $CC $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags'
  +    ;;
  +
  +  netbsd*)
  +    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
  +      archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
  +      wlarc=
  +    else
  +      archive_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
  +      archive_expsym_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
  +    fi
  +    ;;
  +
  +  solaris* | sysv5*)
  +    if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then
  +      ld_shlibs=no
  +      cat <<EOF 1>&2
  +
  +*** Warning: The releases 2.8.* of the GNU linker cannot reliably
  +*** create shared libraries on Solaris systems.  Therefore, libtool
  +*** is disabling shared libraries support.  We urge you to upgrade GNU
  +*** binutils to release 2.9.1 or newer.  Another option is to modify
  +*** your PATH or compiler configuration so that the native linker is
  +*** used, and then restart.
  +
  +EOF
  +    elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
  +      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
  +      archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
  +    else
  +      ld_shlibs=no
  +    fi
  +    ;;
  +
  +  sunos4*)
  +    archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
  +    wlarc=
  +    hardcode_direct=yes
  +    hardcode_shlibpath_var=no
  +    ;;
  +
  +  *)
  +    if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
  +      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
  +      archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
  +    else
  +      ld_shlibs=no
  +    fi
  +    ;;
  +  esac
  +
  +  if test "$ld_shlibs" = yes; then
  +    runpath_var=LD_RUN_PATH
  +    hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
  +    export_dynamic_flag_spec='${wl}--export-dynamic'
  +    case $host_os in
  +    cygwin* | mingw* | pw32*)
  +      # dlltool doesn't understand --whole-archive et. al.
  +      whole_archive_flag_spec=
  +      ;;
  +    *)
  +      # ancient GNU ld didn't support --whole-archive et. al.
  +      if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then
  +	whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
  +      else
  +	whole_archive_flag_spec=
  +      fi
  +      ;;
  +    esac
  +  fi
  +else
  +  # PORTME fill in a description of your system's linker (not GNU ld)
  +  case $host_os in
  +  aix3*)
  +    allow_undefined_flag=unsupported
  +    always_export_symbols=yes
  +    archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
  +    # Note: this linker hardcodes the directories in LIBPATH if there
  +    # are no directories specified by -L.
  +    hardcode_minus_L=yes
  +    if test "$GCC" = yes && test -z "$link_static_flag"; then
  +      # Neither direct hardcoding nor static linking is supported with a
  +      # broken collect2.
  +      hardcode_direct=unsupported
  +    fi
  +    ;;
  +
  +  aix4* | aix5*)
  +    # When large executables or shared objects are built, AIX ld can
  +    # have problems creating the table of contents.  If linking a library
  +    # or program results in "error TOC overflow" add -mminimal-toc to
  +    # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
  +    # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
  +
  +    archive_cmds=''
  +    hardcode_libdir_separator=':'
  +    if test "$GCC" = yes; then
  +      collect2name=`${CC} -print-prog-name=collect2`
  +      if test -f "$collect2name" && \
  +	 strings "$collect2name" | grep resolve_lib_name >/dev/null
  +      then
  +	# We have reworked collect2
  +	hardcode_direct=yes
  +      else
  +        # We have old collect2
  +        hardcode_direct=unsupported
  +        # It fails to find uninstalled libraries when the uninstalled
  +        # path is not listed in the libpath.  Setting hardcode_minus_L
  +        # to unsupported forces relinking
  +        hardcode_minus_L=yes
  +        hardcode_libdir_flag_spec='-L$libdir'
  +        hardcode_libdir_separator=
  +      fi
  +      shared_flag='-shared'
  +    else
  +      if test "$host_cpu" = ia64; then
  +        shared_flag='-G'
  +      else
  +        shared_flag='${wl}-bM:SRE'
  +      fi
  +      hardcode_direct=yes
  +    fi
  +
  +    if test "$host_cpu" = ia64; then
  +      # On IA64, the linker does run time linking by default, so we don't
  +      # have to do anything special.
  +      aix_use_runtimelinking=no
  +      exp_sym_flag='-Bexport'
  +      no_entry_flag=""
  +    else
  +      # Test if we are trying to use run time linking, or normal AIX style linking.
  +      # If -brtl is somewhere in LDFLAGS, we need to do run time linking.
  +      aix_use_runtimelinking=no
  +      for ld_flag in $LDFLAGS; do
  +        if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl" ); then
  +          aix_use_runtimelinking=yes
  +          break
  +        fi
  +      done
  +      exp_sym_flag='-bexport'
  +      no_entry_flag='-bnoentry'
  +    fi
  +    # It seems that -bexpall can do strange things, so it is better to
  +    # generate a list of symbols to export.
  +    always_export_symbols=yes
  +    if test "$aix_use_runtimelinking" = yes; then
  +      hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib'
  +      allow_undefined_flag=' -Wl,-G'
  +      archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
  +    else
  +      if test "$host_cpu" = ia64; then
  +        hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
  +       allow_undefined_flag="-znodefs"
  +        archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname ${wl}-h$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
  +      else
  +        hardcode_libdir_flag_spec='${wl}-bnolibpath ${wl}-blibpath:$libdir:/usr/lib:/lib'
  +        # Warning - without using the other run time loading flags, -berok will
  +        #           link without error, but may produce a broken library.
  +        allow_undefined_flag='${wl}-berok"
  +        # This is a bit strange, but is similar to how AIX traditionally builds
  +        # it's shared libraries.
  +        archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"' ~$AR -crlo $objdir/$libname$release.a $objdir/$soname'
  +      fi
  +    fi
  +    ;;
  +
  +  amigaos*)
  +    archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
  +    hardcode_libdir_flag_spec='-L$libdir'
  +    hardcode_minus_L=yes
  +    # see comment about different semantics on the GNU ld section
  +    ld_shlibs=no
  +    ;;
  +
  +  cygwin* | mingw* | pw32*)
  +    # When not using gcc, we currently assume that we are using
  +    # Microsoft Visual C++.
  +    # hardcode_libdir_flag_spec is actually meaningless, as there is
  +    # no search path for DLLs.
  +    hardcode_libdir_flag_spec=' '
  +    allow_undefined_flag=unsupported
  +    # Tell ltmain to make .lib files, not .a files.
  +    libext=lib
  +    # FIXME: Setting linknames here is a bad hack.
  +    archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames='
  +    # The linker will automatically build a .lib file if we build a DLL.
  +    old_archive_from_new_cmds='true'
  +    # FIXME: Should let the user specify the lib program.
  +    old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs'
  +    fix_srcfile_path='`cygpath -w "$srcfile"`'
  +    ;;
  +
  +  darwin* | rhapsody*)
  +    allow_undefined_flag='-undefined suppress'
  +    # FIXME: Relying on posixy $() will cause problems for
  +    #        cross-compilation, but unfortunately the echo tests do not
  +    #        yet detect zsh echo's removal of \ escapes.
  +    archive_cmds='$CC $(test .$module = .yes && echo -bundle || echo -dynamiclib) $allow_undefined_flag -o $lib $libobjs $deplibs$linkopts -install_name $rpath/$soname $(test -n "$verstring" -a x$verstring != x0.0 && echo $verstring)'
  +    # We need to add '_' to the symbols in $export_symbols first
  +    #archive_expsym_cmds="$archive_cmds"' && strip -s $export_symbols'
  +    hardcode_direct=yes
  +    hardcode_shlibpath_var=no
  +    whole_archive_flag_spec='-all_load $convenience'
  +    ;;
  +
  +  freebsd1*)
  +    ld_shlibs=no
  +    ;;
  +
  +  # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
  +  # support.  Future versions do this automatically, but an explicit c++rt0.o
  +  # does not break anything, and helps significantly (at the cost of a little
  +  # extra space).
  +  freebsd2.2*)
  +    archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
  +    hardcode_libdir_flag_spec='-R$libdir'
  +    hardcode_direct=yes
  +    hardcode_shlibpath_var=no
  +    ;;
  +
  +  # Unfortunately, older versions of FreeBSD 2 do not have this feature.
  +  freebsd2*)
  +    archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
  +    hardcode_direct=yes
  +    hardcode_minus_L=yes
  +    hardcode_shlibpath_var=no
  +    ;;
  +
  +  # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
  +  freebsd*)
  +    archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
  +    hardcode_libdir_flag_spec='-R$libdir'
  +    hardcode_direct=yes
  +    hardcode_shlibpath_var=no
  +    ;;
  +
  +  hpux9* | hpux10* | hpux11*)
  +    case $host_os in
  +    hpux9*) archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ;;
  +    *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;;
  +    esac
  +    hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
  +    hardcode_libdir_separator=:
  +    hardcode_direct=yes
  +    hardcode_minus_L=yes # Not in the search PATH, but as the default
  +			 # location of the library.
  +    export_dynamic_flag_spec='${wl}-E'
  +    ;;
  +
  +  irix5* | irix6*)
  +    if test "$GCC" = yes; then
  +      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
  +    else
  +      archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
  +    fi
  +    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
  +    hardcode_libdir_separator=:
  +    link_all_deplibs=yes
  +    ;;
  +
  +  netbsd*)
  +    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
  +      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
  +    else
  +      archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
  +    fi
  +    hardcode_libdir_flag_spec='-R$libdir'
  +    hardcode_direct=yes
  +    hardcode_shlibpath_var=no
  +    ;;
  +
  +  newsos6)
  +    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
  +    hardcode_direct=yes
  +    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
  +    hardcode_libdir_separator=:
  +    hardcode_shlibpath_var=no
  +    ;;
  +
  +  openbsd*)
  +    archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
  +    hardcode_libdir_flag_spec='-R$libdir'
  +    hardcode_direct=yes
  +    hardcode_shlibpath_var=no
  +    ;;
  +
  +  os2*)
  +    hardcode_libdir_flag_spec='-L$libdir'
  +    hardcode_minus_L=yes
  +    allow_undefined_flag=unsupported
  +    archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
  +    old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
  +    ;;
  +
  +  osf3*)
  +    if test "$GCC" = yes; then
  +      allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
  +      archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
  +    else
  +      allow_undefined_flag=' -expect_unresolved \*'
  +      archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
  +    fi
  +    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
  +    hardcode_libdir_separator=:
  +    ;;
  +
  +  osf4* | osf5*)	# as osf3* with the addition of -msym flag
  +    if test "$GCC" = yes; then
  +      allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
  +      archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
  +      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
  +    else
  +      allow_undefined_flag=' -expect_unresolved \*'
  +      archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
  +      archive_expsym_cmds='for i in `cat $export_symbols`; do printf "-exported_symbol " >> $lib.exp; echo "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
  +      $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
  +
  +      #Both c and cxx compiler support -rpath directly
  +      hardcode_libdir_flag_spec='-rpath $libdir'
  +    fi
  +    hardcode_libdir_separator=:
  +    ;;
  +
  +  sco3.2v5*)
  +    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
  +    hardcode_shlibpath_var=no
  +    runpath_var=LD_RUN_PATH
  +    hardcode_runpath_var=yes
  +    ;;
  +
  +  solaris*)
  +    no_undefined_flag=' -z defs'
  +    # $CC -shared without GNU ld will not create a library from C++
  +    # object files and a static libstdc++, better avoid it by now
  +    archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
  +    archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
  +		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
  +    hardcode_libdir_flag_spec='-R$libdir'
  +    hardcode_shlibpath_var=no
  +    case $host_os in
  +    solaris2.[0-5] | solaris2.[0-5].*) ;;
  +    *) # Supported since Solaris 2.6 (maybe 2.5.1?)
  +      whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;
  +    esac
  +    link_all_deplibs=yes
  +    ;;
  +
  +  sunos4*)
  +    if test "x$host_vendor" = xsequent; then
  +      # Use $CC to link under sequent, because it throws in some extra .o
  +      # files that make .init and .fini sections work.
  +      archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
  +    else
  +      archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
  +    fi
  +    hardcode_libdir_flag_spec='-L$libdir'
  +    hardcode_direct=yes
  +    hardcode_minus_L=yes
  +    hardcode_shlibpath_var=no
  +    ;;
  +
  +  sysv4)
  +    if test "x$host_vendor" = xsno; then
  +      archive_cmds='$LD -G -Bsymbolic -h $soname -o $lib $libobjs $deplibs $linkopts'
  +      hardcode_direct=yes # is this really true???
  +    else
  +      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
  +      hardcode_direct=no #Motorola manual says yes, but my tests say they lie
  +    fi
  +    runpath_var='LD_RUN_PATH'
  +    hardcode_shlibpath_var=no
  +    ;;
  +
  +  sysv4.3*)
  +    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
  +    hardcode_shlibpath_var=no
  +    export_dynamic_flag_spec='-Bexport'
  +    ;;
  +
  +  sysv5*)
  +    no_undefined_flag=' -z text'
  +    # $CC -shared without GNU ld will not create a library from C++
  +    # object files and a static libstdc++, better avoid it by now
  +    archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
  +    archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
  +		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
  +    hardcode_libdir_flag_spec=
  +    hardcode_shlibpath_var=no
  +    runpath_var='LD_RUN_PATH'
  +    ;;
  +
  +  uts4*)
  +    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
  +    hardcode_libdir_flag_spec='-L$libdir'
  +    hardcode_shlibpath_var=no
  +    ;;
  +
  +  dgux*)
  +    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
  +    hardcode_libdir_flag_spec='-L$libdir'
  +    hardcode_shlibpath_var=no
  +    ;;
  +
  +  sysv4*MP*)
  +    if test -d /usr/nec; then
  +      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
  +      hardcode_shlibpath_var=no
  +      runpath_var=LD_RUN_PATH
  +      hardcode_runpath_var=yes
  +      ld_shlibs=yes
  +    fi
  +    ;;
  +
  +  sysv4.2uw2*)
  +    archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
  +    hardcode_direct=yes
  +    hardcode_minus_L=no
  +    hardcode_shlibpath_var=no
  +    hardcode_runpath_var=yes
  +    runpath_var=LD_RUN_PATH
  +    ;;
  +
  +  sysv5uw7* | unixware7*)
  +    no_undefined_flag='${wl}-z ${wl}text'
  +    if test "$GCC" = yes; then
  +      archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
  +    else
  +      archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
  +    fi
  +    runpath_var='LD_RUN_PATH'
  +    hardcode_shlibpath_var=no
  +    ;;
  +
  +  *)
  +    ld_shlibs=no
  +    ;;
  +  esac
  +fi
  +echo "$as_me:4561: result: $ld_shlibs" >&5
  +echo "${ECHO_T}$ld_shlibs" >&6
  +test "$ld_shlibs" = no && can_build_shared=no
  +##
  +## END FIXME
  +
  +## FIXME: this should be a separate macro
  +##
  +# Check hardcoding attributes.
  +echo "$as_me:4570: checking how to hardcode library paths into programs" >&5
  +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
  +hardcode_action=
  +if test -n "$hardcode_libdir_flag_spec" || \
  +   test -n "$runpath_var"; then
  +
  +  # We can hardcode non-existant directories.
  +  if test "$hardcode_direct" != no &&
  +     # If the only mechanism to avoid hardcoding is shlibpath_var, we
  +     # have to relink, otherwise we might link with an installed library
  +     # when we should be linking with a yet-to-be-installed one
  +     ## test "$hardcode_shlibpath_var" != no &&
  +     test "$hardcode_minus_L" != no; then
  +    # Linking always hardcodes the temporary library directory.
  +    hardcode_action=relink
  +  else
  +    # We can link without hardcoding, and we can hardcode nonexisting dirs.
  +    hardcode_action=immediate
  +  fi
  +else
  +  # We cannot hardcode anything, or else we can only hardcode existing
  +  # directories.
  +  hardcode_action=unsupported
  +fi
  +echo "$as_me:4594: result: $hardcode_action" >&5
  +echo "${ECHO_T}$hardcode_action" >&6
  +##
  +## END FIXME
  +
  +## FIXME: this should be a separate macro
  +##
  +striplib=
  +old_striplib=
  +echo "$as_me:4603: checking whether stripping libraries is possible" >&5
  +echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
  +if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
  +  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
  +  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
  +  echo "$as_me:4608: result: yes" >&5
  +echo "${ECHO_T}yes" >&6
  +else
  +  echo "$as_me:4611: result: no" >&5
  +echo "${ECHO_T}no" >&6
  +fi
  +##
  +## END FIXME
  +
  +reload_cmds='$LD$reload_flag -o $output$reload_objs'
  +test -z "$deplibs_check_method" && deplibs_check_method=unknown
  +
  +## FIXME: this should be a separate macro
  +##
  +# PORTME Fill in your ld.so characteristics
  +echo "$as_me:4623: checking dynamic linker characteristics" >&5
  +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
  +library_names_spec=
  +libname_spec='lib$name'
  +soname_spec=
  +postinstall_cmds=
  +postuninstall_cmds=
  +finish_cmds=
  +finish_eval=
  +shlibpath_var=
  +shlibpath_overrides_runpath=unknown
  +version_type=none
  +dynamic_linker="$host_os ld.so"
  +sys_lib_dlsearch_path_spec="/lib /usr/lib"
  +sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
  +
  +case $host_os in
  +aix3*)
  +  version_type=linux
  +  library_names_spec='${libname}${release}.so$versuffix $libname.a'
  +  shlibpath_var=LIBPATH
  +
  +  # AIX has no versioning support, so we append a major version to the name.
  +  soname_spec='${libname}${release}.so$major'
  +  ;;
  +
  +aix4* | aix5*)
  +  version_type=linux
  +  if test "$host_cpu" = ia64; then
  +    # AIX 5 supports IA64
  +    library_names_spec='${libname}${release}.so$major ${libname}${release}.so$versuffix $libname.so'
  +    shlibpath_var=LD_LIBRARY_PATH
  +  else
  +    # With GCC up to 2.95.x, collect2 would create an import file
  +    # for dependence libraries.  The import file would start with
  +    # the line `#! .'.  This would cause the generated library to
  +    # depend on `.', always an invalid library.  This was fixed in
  +    # development snapshots of GCC prior to 3.0.
  +    case $host_os in
  +       aix4 | aix4.[01] | aix4.[01].*)
  +      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
  +           echo ' yes '
  +           echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
  +        :
  +      else
  +        can_build_shared=no
  +      fi
  +      ;;
  +    esac
  +    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
  +    # soname into executable. Probably we can add versioning support to
  +    # collect2, so additional links can be useful in future.
  +    if test "$aix_use_runtimelinking" = yes; then
  +      # If using run time linking (on AIX 4.2 or later) use lib<name>.so instead of
  +      # lib<name>.a to let people know that these are not typical AIX shared libraries.
  +      library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
  +    else
  +      # We preserve .a as extension for shared libraries through AIX4.2
  +      # and later when we are not doing run time linking.
  +      library_names_spec='${libname}${release}.a $libname.a'
  +      soname_spec='${libname}${release}.so$major'
  +    fi
  +    shlibpath_var=LIBPATH
  +    deplibs_check_method=pass_all
  +  fi
  +  ;;
  +
  +amigaos*)
  +  library_names_spec='$libname.ixlibrary $libname.a'
  +  # Create ${libname}_ixlibrary.a entries in /sys/libs.
  +  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
  +  ;;
  +
  +beos*)
  +  library_names_spec='${libname}.so'
  +  dynamic_linker="$host_os ld.so"
  +  shlibpath_var=LIBRARY_PATH
  +  ;;
  +
  +bsdi4*)
  +  version_type=linux
  +  need_version=no
  +  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
  +  soname_spec='${libname}${release}.so$major'
  +  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
  +  shlibpath_var=LD_LIBRARY_PATH
  +  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
  +  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
  +  export_dynamic_flag_spec=-rdynamic
  +  # the default ld.so.conf also contains /usr/contrib/lib and
  +  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
  +  # libtool to hard-code these into programs
  +  ;;
  +
  +cygwin* | mingw* | pw32*)
  +  version_type=windows
  +  need_version=no
  +  need_lib_prefix=no
  +  case $GCC,$host_os in
  +  yes,cygwin*)
  +    library_names_spec='$libname.dll.a'
  +    soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll'
  +    postinstall_cmds='dlpath=`bash 2>&1 -c '\''. $dir/${file}i;echo \$dlname'\''`~
  +      dldir=$destdir/`dirname \$dlpath`~
  +      test -d \$dldir || mkdir -p \$dldir~
  +      $install_prog .libs/$dlname \$dldir/$dlname'
  +    postuninstall_cmds='dldll=`bash 2>&1 -c '\''. $file; echo \$dlname'\''`~
  +      dlpath=$dir/\$dldll~
  +       $rm \$dlpath'
  +    ;;
  +  yes,mingw*)
  +    library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll'
  +    sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | sed -e "s/^libraries://" -e "s/;/ /g"`
  +    ;;
  +  yes,pw32*)
  +    library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | sed -e 's/./-/g'`${versuffix}.dll'
  +    ;;
  +  *)
  +    library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.lib'
  +    ;;
  +  esac
  +  dynamic_linker='Win32 ld.exe'
  +  # FIXME: first we should search . and the directory the executable is in
  +  shlibpath_var=PATH
  +  ;;
  +
  +darwin* | rhapsody*)
  +  dynamic_linker="$host_os dyld"
  +  version_type=darwin
  +  need_lib_prefix=no
  +  need_version=no
  +  # FIXME: Relying on posixy $() will cause problems for
  +  #        cross-compilation, but unfortunately the echo tests do not
  +  #        yet detect zsh echo's removal of \ escapes.
  +  library_names_spec='${libname}${release}${versuffix}.$(test .$module = .yes && echo so || echo dylib) ${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib) ${libname}.$(test .$module = .yes && echo so || echo dylib)'
  +  soname_spec='${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib)'
  +  shlibpath_overrides_runpath=yes
  +  shlibpath_var=DYLD_LIBRARY_PATH
  +  ;;
  +
  +freebsd1*)
  +  dynamic_linker=no
  +  ;;
  +
  +freebsd*)
  +  objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
  +  version_type=freebsd-$objformat
  +  case $version_type in
  +    freebsd-elf*)
  +      library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
  +      need_version=no
  +      need_lib_prefix=no
  +      ;;
  +    freebsd-*)
  +      library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix'
  +      need_version=yes
  +      ;;
  +  esac
  +  shlibpath_var=LD_LIBRARY_PATH
  +  case $host_os in
  +  freebsd2*)
  +    shlibpath_overrides_runpath=yes
  +    ;;
  +  *)
  +    shlibpath_overrides_runpath=no
  +    hardcode_into_libs=yes
  +    ;;
  +  esac
  +  ;;
  +
  +gnu*)
  +  version_type=linux
  +  need_lib_prefix=no
  +  need_version=no
  +  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so'
  +  soname_spec='${libname}${release}.so$major'
  +  shlibpath_var=LD_LIBRARY_PATH
  +  hardcode_into_libs=yes
  +  ;;
  +
  +hpux9* | hpux10* | hpux11*)
  +  # Give a soname corresponding to the major version so that dld.sl refuses to
  +  # link against other versions.
  +  dynamic_linker="$host_os dld.sl"
  +  version_type=sunos
  +  need_lib_prefix=no
  +  need_version=no
  +  shlibpath_var=SHLIB_PATH
  +  shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
  +  library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl'
  +  soname_spec='${libname}${release}.sl$major'
  +  # HP-UX runs *really* slowly unless shared libraries are mode 555.
  +  postinstall_cmds='chmod 555 $lib'
  +  ;;
  +
  +irix5* | irix6*)
  +  version_type=irix
  +  need_lib_prefix=no
  +  need_version=no
  +  soname_spec='${libname}${release}.so$major'
  +  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so $libname.so'
  +  case $host_os in
  +  irix5*)
  +    libsuff= shlibsuff=
  +    ;;
  +  *)
  +    case $LD in # libtool.m4 will add one of these switches to LD
  +    *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;;
  +    *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;;
  +    *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;;
  +    *) libsuff= shlibsuff= libmagic=never-match;;
  +    esac
  +    ;;
  +  esac
  +  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
  +  shlibpath_overrides_runpath=no
  +  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
  +  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
  +  ;;
  +
  +# No shared lib support for Linux oldld, aout, or coff.
  +linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*)
  +  dynamic_linker=no
  +  ;;
  +
  +# This must be Linux ELF.
  +linux-gnu*)
  +  version_type=linux
  +  need_lib_prefix=no
  +  need_version=no
  +  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
  +  soname_spec='${libname}${release}.so$major'
  +  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
  +  shlibpath_var=LD_LIBRARY_PATH
  +  shlibpath_overrides_runpath=no
  +  # This implies no fast_install, which is unacceptable.
  +  # Some rework will be needed to allow for fast_install
  +  # before this can be enabled.
  +  hardcode_into_libs=yes
  +
  +  # We used to test for /lib/ld.so.1 and disable shared libraries on
  +  # powerpc, because MkLinux only supported shared libraries with the
  +  # GNU dynamic linker.  Since this was broken with cross compilers,
  +  # most powerpc-linux boxes support dynamic linking these days and
  +  # people can always --disable-shared, the test was removed, and we
  +  # assume the GNU/Linux dynamic linker is in use.
  +  dynamic_linker='GNU/Linux ld.so'
  +  ;;
  +
  +netbsd*)
  +  version_type=sunos
  +  need_lib_prefix=no
  +  need_version=no
  +  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
  +    library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
  +    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
  +    dynamic_linker='NetBSD (a.out) ld.so'
  +  else
  +    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so'
  +    soname_spec='${libname}${release}.so$major'
  +    dynamic_linker='NetBSD ld.elf_so'
  +  fi
  +  shlibpath_var=LD_LIBRARY_PATH
  +  shlibpath_overrides_runpath=yes
  +  hardcode_into_libs=yes
  +  ;;
  +
  +newsos6)
  +  version_type=linux
  +  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
  +  shlibpath_var=LD_LIBRARY_PATH
  +  shlibpath_overrides_runpath=yes
  +  ;;
  +
  +openbsd*)
  +  version_type=sunos
  +  if test "$with_gnu_ld" = yes; then
  +    need_lib_prefix=no
  +    need_version=no
  +  fi
  +  library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
  +  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
  +  shlibpath_var=LD_LIBRARY_PATH
  +  ;;
  +
  +os2*)
  +  libname_spec='$name'
  +  need_lib_prefix=no
  +  library_names_spec='$libname.dll $libname.a'
  +  dynamic_linker='OS/2 ld.exe'
  +  shlibpath_var=LIBPATH
  +  ;;
  +
  +osf3* | osf4* | osf5*)
  +  version_type=osf
  +  need_version=no
  +  soname_spec='${libname}${release}.so'
  +  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
  +  shlibpath_var=LD_LIBRARY_PATH
  +  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
  +  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
  +  ;;
  +
  +sco3.2v5*)
  +  version_type=osf
  +  soname_spec='${libname}${release}.so$major'
  +  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
  +  shlibpath_var=LD_LIBRARY_PATH
  +  ;;
  +
  +solaris*)
  +  version_type=linux
  +  need_lib_prefix=no
  +  need_version=no
  +  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
  +  soname_spec='${libname}${release}.so$major'
  +  shlibpath_var=LD_LIBRARY_PATH
  +  shlibpath_overrides_runpath=yes
  +  hardcode_into_libs=yes
  +  # ldd complains unless libraries are executable
  +  postinstall_cmds='chmod +x $lib'
  +  ;;
  +
  +sunos4*)
  +  version_type=sunos
  +  library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
  +  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
  +  shlibpath_var=LD_LIBRARY_PATH
  +  shlibpath_overrides_runpath=yes
  +  if test "$with_gnu_ld" = yes; then
  +    need_lib_prefix=no
  +  fi
  +  need_version=yes
  +  ;;
  +
  +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
  +  version_type=linux
  +  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
  +  soname_spec='${libname}${release}.so$major'
  +  shlibpath_var=LD_LIBRARY_PATH
  +  case $host_vendor in
  +    sni)
  +      shlibpath_overrides_runpath=no
  +      ;;
  +    motorola)
  +      need_lib_prefix=no
  +      need_version=no
  +      shlibpath_overrides_runpath=no
  +      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
  +      ;;
  +  esac
  +  ;;
  +
  +uts4*)
  +  version_type=linux
  +  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
  +  soname_spec='${libname}${release}.so$major'
  +  shlibpath_var=LD_LIBRARY_PATH
  +  ;;
  +
  +dgux*)
  +  version_type=linux
  +  need_lib_prefix=no
  +  need_version=no
  +  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
  +  soname_spec='${libname}${release}.so$major'
  +  shlibpath_var=LD_LIBRARY_PATH
  +  ;;
  +
  +sysv4*MP*)
  +  if test -d /usr/nec ;then
  +    version_type=linux
  +    library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so'
  +    soname_spec='$libname.so.$major'
  +    shlibpath_var=LD_LIBRARY_PATH
  +  fi
  +  ;;
  +
  +*)
  +  dynamic_linker=no
  +  ;;
  +esac
  +echo "$as_me:5005: result: $dynamic_linker" >&5
  +echo "${ECHO_T}$dynamic_linker" >&6
  +test "$dynamic_linker" = no && can_build_shared=no
  +##
  +## END FIXME
  +
  +## FIXME: this should be a separate macro
  +##
  +# Report the final consequences.
  +echo "$as_me:5014: checking if libtool supports shared libraries" >&5
  +echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6
  +echo "$as_me:5016: result: $can_build_shared" >&5
  +echo "${ECHO_T}$can_build_shared" >&6
  +##
  +## END FIXME
  +
  +if test "$hardcode_action" = relink; then
  +  # Fast installation is not supported
  +  enable_fast_install=no
  +elif test "$shlibpath_overrides_runpath" = yes ||
  +     test "$enable_shared" = no; then
  +  # Fast installation is not necessary
  +  enable_fast_install=needless
  +fi
  +
  +variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
  +if test "$GCC" = yes; then
  +  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
  +fi
  +
  +if test "x$enable_dlopen" != xyes; then
  +  enable_dlopen=unknown
  +  enable_dlopen_self=unknown
  +  enable_dlopen_self_static=unknown
  +else
  +  lt_cv_dlopen=no
  +  lt_cv_dlopen_libs=
  +
  +  case $host_os in
  +  beos*)
  +    lt_cv_dlopen="load_add_on"
  +    lt_cv_dlopen_libs=
  +    lt_cv_dlopen_self=yes
  +    ;;
  +
  +  cygwin* | mingw* | pw32*)
  +    lt_cv_dlopen="LoadLibrary"
  +    lt_cv_dlopen_libs=
  +   ;;
  +
  +  *)
  +    echo "$as_me:5056: checking for dlopen in -ldl" >&5
  +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
  +if test "${ac_cv_lib_dl_dlopen+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  ac_check_lib_save_LIBS=$LIBS
  +LIBS="-ldl  $LIBS"
  +cat >conftest.$ac_ext <<_ACEOF
  +#line 5064 "configure"
  +#include "confdefs.h"
  +
  +/* Override any gcc2 internal prototype to avoid an error.  */
  +#ifdef __cplusplus
  +extern "C"
  +#endif
  +/* We use char because int might match the return type of a gcc2
  +   builtin and then its argument prototype would still apply.  */
  +char dlopen ();
  +int
  +main ()
  +{
  +dlopen ();
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext conftest$ac_exeext
  +if { (eval echo "$as_me:5083: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:5086: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest$ac_exeext'
  +  { (eval echo "$as_me:5089: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:5092: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_cv_lib_dl_dlopen=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_lib_dl_dlopen=no
  +fi
  +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  +LIBS=$ac_check_lib_save_LIBS
  +fi
  +echo "$as_me:5103: result: $ac_cv_lib_dl_dlopen" >&5
  +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
  +if test $ac_cv_lib_dl_dlopen = yes; then
  +  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
  +else
  +  echo "$as_me:5108: checking for dlopen" >&5
  +echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
  +if test "${ac_cv_func_dlopen+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 5114 "configure"
  +#include "confdefs.h"
  +/* System header to define __stub macros and hopefully few prototypes,
  +    which can conflict with char dlopen (); below.  */
  +#include <assert.h>
  +/* Override any gcc2 internal prototype to avoid an error.  */
  +#ifdef __cplusplus
  +extern "C"
  +#endif
  +/* We use char because int might match the return type of a gcc2
  +   builtin and then its argument prototype would still apply.  */
  +char dlopen ();
  +char (*f) ();
  +
  +int
  +main ()
  +{
  +/* The GNU C library defines this for functions which it implements
  +    to always fail with ENOSYS.  Some functions are actually named
  +    something starting with __ and the normal name is an alias.  */
  +#if defined (__stub_dlopen) || defined (__stub___dlopen)
  +choke me
  +#else
  +f = dlopen;
  +#endif
  +
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext conftest$ac_exeext
  +if { (eval echo "$as_me:5145: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:5148: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest$ac_exeext'
  +  { (eval echo "$as_me:5151: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:5154: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_cv_func_dlopen=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_func_dlopen=no
  +fi
  +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  +fi
  +echo "$as_me:5164: result: $ac_cv_func_dlopen" >&5
  +echo "${ECHO_T}$ac_cv_func_dlopen" >&6
  +if test $ac_cv_func_dlopen = yes; then
  +  lt_cv_dlopen="dlopen"
  +else
  +  echo "$as_me:5169: checking for shl_load" >&5
  +echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
  +if test "${ac_cv_func_shl_load+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 5175 "configure"
  +#include "confdefs.h"
  +/* System header to define __stub macros and hopefully few prototypes,
  +    which can conflict with char shl_load (); below.  */
  +#include <assert.h>
  +/* Override any gcc2 internal prototype to avoid an error.  */
  +#ifdef __cplusplus
  +extern "C"
  +#endif
  +/* We use char because int might match the return type of a gcc2
  +   builtin and then its argument prototype would still apply.  */
  +char shl_load ();
  +char (*f) ();
  +
  +int
  +main ()
  +{
  +/* The GNU C library defines this for functions which it implements
  +    to always fail with ENOSYS.  Some functions are actually named
  +    something starting with __ and the normal name is an alias.  */
  +#if defined (__stub_shl_load) || defined (__stub___shl_load)
  +choke me
  +#else
  +f = shl_load;
  +#endif
  +
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext conftest$ac_exeext
  +if { (eval echo "$as_me:5206: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:5209: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest$ac_exeext'
  +  { (eval echo "$as_me:5212: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:5215: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_cv_func_shl_load=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_func_shl_load=no
  +fi
  +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  +fi
  +echo "$as_me:5225: result: $ac_cv_func_shl_load" >&5
  +echo "${ECHO_T}$ac_cv_func_shl_load" >&6
  +if test $ac_cv_func_shl_load = yes; then
  +  lt_cv_dlopen="shl_load"
  +else
  +  echo "$as_me:5230: checking for dlopen in -lsvld" >&5
  +echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
  +if test "${ac_cv_lib_svld_dlopen+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  ac_check_lib_save_LIBS=$LIBS
  +LIBS="-lsvld  $LIBS"
  +cat >conftest.$ac_ext <<_ACEOF
  +#line 5238 "configure"
  +#include "confdefs.h"
  +
  +/* Override any gcc2 internal prototype to avoid an error.  */
  +#ifdef __cplusplus
  +extern "C"
  +#endif
  +/* We use char because int might match the return type of a gcc2
  +   builtin and then its argument prototype would still apply.  */
  +char dlopen ();
  +int
  +main ()
  +{
  +dlopen ();
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext conftest$ac_exeext
  +if { (eval echo "$as_me:5257: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:5260: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest$ac_exeext'
  +  { (eval echo "$as_me:5263: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:5266: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_cv_lib_svld_dlopen=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_lib_svld_dlopen=no
  +fi
  +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  +LIBS=$ac_check_lib_save_LIBS
  +fi
  +echo "$as_me:5277: result: $ac_cv_lib_svld_dlopen" >&5
  +echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
  +if test $ac_cv_lib_svld_dlopen = yes; then
  +  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
  +else
  +  echo "$as_me:5282: checking for shl_load in -ldld" >&5
  +echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
  +if test "${ac_cv_lib_dld_shl_load+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  ac_check_lib_save_LIBS=$LIBS
  +LIBS="-ldld  $LIBS"
  +cat >conftest.$ac_ext <<_ACEOF
  +#line 5290 "configure"
  +#include "confdefs.h"
  +
  +/* Override any gcc2 internal prototype to avoid an error.  */
  +#ifdef __cplusplus
  +extern "C"
  +#endif
  +/* We use char because int might match the return type of a gcc2
  +   builtin and then its argument prototype would still apply.  */
  +char shl_load ();
  +int
  +main ()
  +{
  +shl_load ();
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext conftest$ac_exeext
  +if { (eval echo "$as_me:5309: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:5312: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest$ac_exeext'
  +  { (eval echo "$as_me:5315: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:5318: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_cv_lib_dld_shl_load=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_lib_dld_shl_load=no
  +fi
  +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  +LIBS=$ac_check_lib_save_LIBS
  +fi
  +echo "$as_me:5329: result: $ac_cv_lib_dld_shl_load" >&5
  +echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
  +if test $ac_cv_lib_dld_shl_load = yes; then
  +  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
  +fi
  +
  +fi
  +
  +fi
  +
  +fi
  +
  +fi
  +
  +    ;;
  +  esac
  +
  +  if test "x$lt_cv_dlopen" != xno; then
  +    enable_dlopen=yes
  +  else
  +    enable_dlopen=no
  +  fi
  +
  +  case $lt_cv_dlopen in
  +  dlopen)
  +    save_CPPFLAGS="$CPPFLAGS"
  +        test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
  +
  +    save_LDFLAGS="$LDFLAGS"
  +    eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
  +
  +    save_LIBS="$LIBS"
  +    LIBS="$lt_cv_dlopen_libs $LIBS"
  +
  +    echo "$as_me:5363: checking whether a program can dlopen itself" >&5
  +echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
  +if test "${lt_cv_dlopen_self+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  	  if test "$cross_compiling" = yes; then :
  +  lt_cv_dlopen_self=cross
  +else
  +    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
  +  lt_status=$lt_dlunknown
  +  cat > conftest.$ac_ext <<EOF
  +#line 5374 "configure"
  +#include "confdefs.h"
  +
  +#if HAVE_DLFCN_H
  +#include <dlfcn.h>
  +#endif
  +
  +#include <stdio.h>
  +
  +#ifdef RTLD_GLOBAL
  +#  define LT_DLGLOBAL		RTLD_GLOBAL
  +#else
  +#  ifdef DL_GLOBAL
  +#    define LT_DLGLOBAL		DL_GLOBAL
  +#  else
  +#    define LT_DLGLOBAL		0
  +#  endif
  +#endif
  +
  +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
  +   find out it does not work in some platform. */
  +#ifndef LT_DLLAZY_OR_NOW
  +#  ifdef RTLD_LAZY
  +#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
  +#  else
  +#    ifdef DL_LAZY
  +#      define LT_DLLAZY_OR_NOW		DL_LAZY
  +#    else
  +#      ifdef RTLD_NOW
  +#        define LT_DLLAZY_OR_NOW	RTLD_NOW
  +#      else
  +#        ifdef DL_NOW
  +#          define LT_DLLAZY_OR_NOW	DL_NOW
  +#        else
  +#          define LT_DLLAZY_OR_NOW	0
  +#        endif
  +#      endif
  +#    endif
  +#  endif
  +#endif
  +
  +#ifdef __cplusplus
  +extern "C" void exit (int);
  +#endif
  +
  +void fnord() { int i=42;}
  +int main ()
  +{
  +  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
  +  int status = $lt_dlunknown;
  +
  +  if (self)
  +    {
  +      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
  +      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
  +      /* dlclose (self); */
  +    }
  +
  +    exit (status);
  +}
  +EOF
  +  if { (eval echo "$as_me:5435: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:5438: \$? = $ac_status" >&5
  +  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
  +    (./conftest; exit; ) 2>/dev/null
  +    lt_status=$?
  +    case x$lt_status in
  +      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
  +      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
  +      x$lt_unknown|x*) lt_cv_dlopen_self=no ;;
  +    esac
  +  else :
  +    # compilation failed
  +    lt_cv_dlopen_self=no
  +  fi
  +fi
  +rm -fr conftest*
  +
  +fi
  +echo "$as_me:5455: result: $lt_cv_dlopen_self" >&5
  +echo "${ECHO_T}$lt_cv_dlopen_self" >&6
  +
  +    if test "x$lt_cv_dlopen_self" = xyes; then
  +      LDFLAGS="$LDFLAGS $link_static_flag"
  +      echo "$as_me:5460: checking whether a statically linked program can dlopen itself" >&5
  +echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
  +if test "${lt_cv_dlopen_self_static+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  	  if test "$cross_compiling" = yes; then :
  +  lt_cv_dlopen_self_static=cross
  +else
  +    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
  +  lt_status=$lt_dlunknown
  +  cat > conftest.$ac_ext <<EOF
  +#line 5471 "configure"
  +#include "confdefs.h"
  +
  +#if HAVE_DLFCN_H
  +#include <dlfcn.h>
  +#endif
  +
  +#include <stdio.h>
  +
  +#ifdef RTLD_GLOBAL
  +#  define LT_DLGLOBAL		RTLD_GLOBAL
  +#else
  +#  ifdef DL_GLOBAL
  +#    define LT_DLGLOBAL		DL_GLOBAL
  +#  else
  +#    define LT_DLGLOBAL		0
  +#  endif
  +#endif
  +
  +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
  +   find out it does not work in some platform. */
  +#ifndef LT_DLLAZY_OR_NOW
  +#  ifdef RTLD_LAZY
  +#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
  +#  else
  +#    ifdef DL_LAZY
  +#      define LT_DLLAZY_OR_NOW		DL_LAZY
  +#    else
  +#      ifdef RTLD_NOW
  +#        define LT_DLLAZY_OR_NOW	RTLD_NOW
  +#      else
  +#        ifdef DL_NOW
  +#          define LT_DLLAZY_OR_NOW	DL_NOW
  +#        else
  +#          define LT_DLLAZY_OR_NOW	0
  +#        endif
  +#      endif
  +#    endif
  +#  endif
  +#endif
  +
  +#ifdef __cplusplus
  +extern "C" void exit (int);
  +#endif
  +
  +void fnord() { int i=42;}
  +int main ()
  +{
  +  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
  +  int status = $lt_dlunknown;
  +
  +  if (self)
  +    {
  +      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
  +      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
  +      /* dlclose (self); */
  +    }
  +
  +    exit (status);
  +}
  +EOF
  +  if { (eval echo "$as_me:5532: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:5535: \$? = $ac_status" >&5
  +  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
  +    (./conftest; exit; ) 2>/dev/null
  +    lt_status=$?
  +    case x$lt_status in
  +      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
  +      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
  +      x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;;
  +    esac
  +  else :
  +    # compilation failed
  +    lt_cv_dlopen_self_static=no
  +  fi
  +fi
  +rm -fr conftest*
  +
  +fi
  +echo "$as_me:5552: result: $lt_cv_dlopen_self_static" >&5
  +echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6
  +    fi
  +
  +    CPPFLAGS="$save_CPPFLAGS"
  +    LDFLAGS="$save_LDFLAGS"
  +    LIBS="$save_LIBS"
  +    ;;
  +  esac
  +
  +  case $lt_cv_dlopen_self in
  +  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
  +  *) enable_dlopen_self=unknown ;;
  +  esac
  +
  +  case $lt_cv_dlopen_self_static in
  +  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
  +  *) enable_dlopen_self_static=unknown ;;
  +  esac
  +fi
  +
  +## FIXME: this should be a separate macro
  +##
  +if test "$enable_shared" = yes && test "$GCC" = yes; then
  +  case $archive_cmds in
  +  *'~'*)
  +    # FIXME: we may have to deal with multi-command sequences.
  +    ;;
  +  '$CC '*)
  +    # Test whether the compiler implicitly links with -lc since on some
  +    # systems, -lgcc has to come before -lc. If gcc already passes -lc
  +    # to ld, don't add -lc before -lgcc.
  +    echo "$as_me:5584: checking whether -lc should be explicitly linked in" >&5
  +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
  +    if test "${lt_cv_archive_cmds_need_lc+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  $rm conftest*
  +    echo 'static int dummy;' > conftest.$ac_ext
  +
  +    if { (eval echo "$as_me:5592: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:5595: \$? = $ac_status" >&5
  +  (exit $ac_status); }; then
  +      soname=conftest
  +      lib=conftest
  +      libobjs=conftest.$ac_objext
  +      deplibs=
  +      wl=$lt_cv_prog_cc_wl
  +      compiler_flags=-v
  +      linker_flags=-v
  +      verstring=
  +      output_objdir=.
  +      libname=conftest
  +      save_allow_undefined_flag=$allow_undefined_flag
  +      allow_undefined_flag=
  +      if { (eval echo "$as_me:5609: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
  +  (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
  +  ac_status=$?
  +  echo "$as_me:5612: \$? = $ac_status" >&5
  +  (exit $ac_status); }
  +      then
  +	lt_cv_archive_cmds_need_lc=no
  +      else
  +	lt_cv_archive_cmds_need_lc=yes
  +      fi
  +      allow_undefined_flag=$save_allow_undefined_flag
  +    else
  +      cat conftest.err 1>&5
  +    fi
  +fi
  +
  +    echo "$as_me:5625: result: $lt_cv_archive_cmds_need_lc" >&5
  +echo "${ECHO_T}$lt_cv_archive_cmds_need_lc" >&6
  +    ;;
  +  esac
  +fi
  +need_lc=${lt_cv_archive_cmds_need_lc-yes}
  +##
  +## END FIXME
  +
  +## FIXME: this should be a separate macro
  +##
  +# The second clause should only fire when bootstrapping the
  +# libtool distribution, otherwise you forgot to ship ltmain.sh
  +# with your package, and you will get complaints that there are
  +# no rules to generate ltmain.sh.
  +if test -f "$ltmain"; then
  +  :
  +else
  +  # If there is no Makefile yet, we rely on a make rule to execute
  +  # `config.status --recheck' to rerun these tests and create the
  +  # libtool script then.
  +  test -f Makefile && make "$ltmain"
  +fi
  +
  +if test -f "$ltmain"; then
  +  trap "$rm \"${ofile}T\"; exit 1" 1 2 15
  +  $rm -f "${ofile}T"
  +
  +  echo creating $ofile
  +
  +  # Now quote all the things that may contain metacharacters while being
  +  # careful not to overquote the AC_SUBSTed values.  We take copies of the
  +  # variables and quote the copies for generation of the libtool script.
  +  for var in echo old_CC old_CFLAGS \
  +    AR AR_FLAGS CC LD LN_S NM SHELL \
  +    reload_flag reload_cmds wl \
  +    pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \
  +    thread_safe_flag_spec whole_archive_flag_spec libname_spec \
  +    library_names_spec soname_spec \
  +    RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \
  +    old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds \
  +    postuninstall_cmds extract_expsyms_cmds old_archive_from_expsyms_cmds \
  +    old_striplib striplib file_magic_cmd export_symbols_cmds \
  +    deplibs_check_method allow_undefined_flag no_undefined_flag \
  +    finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \
  +    hardcode_libdir_flag_spec hardcode_libdir_separator  \
  +    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
  +    compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do
  +
  +    case $var in
  +    reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \
  +    old_postinstall_cmds | old_postuninstall_cmds | \
  +    export_symbols_cmds | archive_cmds | archive_expsym_cmds | \
  +    extract_expsyms_cmds | old_archive_from_expsyms_cmds | \
  +    postinstall_cmds | postuninstall_cmds | \
  +    finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
  +      # Double-quote double-evaled strings.
  +      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
  +      ;;
  +    *)
  +      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
  +      ;;
  +    esac
  +  done
  +
  +  cat <<__EOF__ > "${ofile}T"
  +#! $SHELL
  +
  +# `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
  +# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
  +# NOTE: Changes made to this file will be lost: look at ltmain.sh.
  +#
  +# Copyright (C) 1996-2000 Free Software Foundation, Inc.
  +# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
  +#
  +# This program is free software; you can redistribute it and/or modify
  +# it under the terms of the GNU General Public License as published by
  +# the Free Software Foundation; either version 2 of the License, or
  +# (at your option) any later version.
  +#
  +# This program is distributed in the hope that it will be useful, but
  +# WITHOUT ANY WARRANTY; without even the implied warranty of
  +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  +# General Public License for more details.
  +#
  +# You should have received a copy of the GNU General Public License
  +# along with this program; if not, write to the Free Software
  +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  +#
  +# As a special exception to the GNU General Public License, if you
  +# distribute this file as part of a program that contains a
  +# configuration script generated by Autoconf, you may include it under
  +# the same distribution terms that you use for the rest of that program.
  +
  +# Sed that helps us avoid accidentally triggering echo(1) options like -n.
  +Xsed="sed -e s/^X//"
  +
  +# The HP-UX ksh and POSIX shell print the target directory to stdout
  +# if CDPATH is set.
  +if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
  +
  +# ### BEGIN LIBTOOL CONFIG
  +
  +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
  +
  +# Shell to use when invoking shell scripts.
  +SHELL=$lt_SHELL
  +
  +# Whether or not to build shared libraries.
  +build_libtool_libs=$enable_shared
  +
  +# Whether or not to add -lc for building shared libraries.
  +build_libtool_need_lc=$need_lc
  +
  +# Whether or not to build static libraries.
  +build_old_libs=$enable_static
  +
  +# Whether or not to optimize for fast installation.
  +fast_install=$enable_fast_install
  +
  +# The host system.
  +host_alias=$host_alias
  +host=$host
  +
  +# An echo program that does not interpret backslashes.
  +echo=$lt_echo
  +
  +# The archiver.
  +AR=$lt_AR
  +AR_FLAGS=$lt_AR_FLAGS
  +
  +# The default C compiler.
  +CC=$lt_CC
  +
  +# Is the compiler the GNU C compiler?
  +with_gcc=$GCC
  +
  +# The linker used to build libraries.
  +LD=$lt_LD
  +
  +# Whether we need hard or soft links.
  +LN_S=$lt_LN_S
  +
  +# A BSD-compatible nm program.
  +NM=$lt_NM
  +
  +# A symbol stripping program
  +STRIP=$STRIP
  +
  +# Used to examine libraries when file_magic_cmd begins "file"
  +MAGIC_CMD=$MAGIC_CMD
  +
  +# Used on cygwin: DLL creation program.
  +DLLTOOL="$DLLTOOL"
  +
  +# Used on cygwin: object dumper.
  +OBJDUMP="$OBJDUMP"
  +
  +# Used on cygwin: assembler.
  +AS="$AS"
  +
  +# The name of the directory that contains temporary libtool files.
  +objdir=$objdir
  +
  +# How to create reloadable object files.
  +reload_flag=$lt_reload_flag
  +reload_cmds=$lt_reload_cmds
  +
  +# How to pass a linker flag through the compiler.
  +wl=$lt_wl
  +
  +# Object file suffix (normally "o").
  +objext="$ac_objext"
  +
  +# Old archive suffix (normally "a").
  +libext="$libext"
  +
  +# Executable file suffix (normally "").
  +exeext="$exeext"
  +
  +# Additional compiler flags for building library objects.
  +pic_flag=$lt_pic_flag
  +pic_mode=$pic_mode
  +
  +# Does compiler simultaneously support -c and -o options?
  +compiler_c_o=$lt_compiler_c_o
  +
  +# Can we write directly to a .lo ?
  +compiler_o_lo=$lt_compiler_o_lo
  +
  +# Must we lock files when doing compilation ?
  +need_locks=$lt_need_locks
  +
  +# Do we need the lib prefix for modules?
  +need_lib_prefix=$need_lib_prefix
  +
  +# Do we need a version for libraries?
  +need_version=$need_version
  +
  +# Whether dlopen is supported.
  +dlopen_support=$enable_dlopen
  +
  +# Whether dlopen of programs is supported.
  +dlopen_self=$enable_dlopen_self
  +
  +# Whether dlopen of statically linked programs is supported.
  +dlopen_self_static=$enable_dlopen_self_static
  +
  +# Compiler flag to prevent dynamic linking.
  +link_static_flag=$lt_link_static_flag
  +
  +# Compiler flag to turn off builtin functions.
  +no_builtin_flag=$lt_no_builtin_flag
  +
  +# Compiler flag to allow reflexive dlopens.
  +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
  +
  +# Compiler flag to generate shared objects directly from archives.
  +whole_archive_flag_spec=$lt_whole_archive_flag_spec
  +
  +# Compiler flag to generate thread-safe objects.
  +thread_safe_flag_spec=$lt_thread_safe_flag_spec
  +
  +# Library versioning type.
  +version_type=$version_type
  +
  +# Format of library name prefix.
  +libname_spec=$lt_libname_spec
  +
  +# List of archive names.  First name is the real one, the rest are links.
  +# The last name is the one that the linker finds with -lNAME.
  +library_names_spec=$lt_library_names_spec
  +
  +# The coded name of the library, if different from the real name.
  +soname_spec=$lt_soname_spec
  +
  +# Commands used to build and install an old-style archive.
  +RANLIB=$lt_RANLIB
  +old_archive_cmds=$lt_old_archive_cmds
  +old_postinstall_cmds=$lt_old_postinstall_cmds
  +old_postuninstall_cmds=$lt_old_postuninstall_cmds
  +
  +# Create an old-style archive from a shared archive.
  +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
  +
  +# Create a temporary old-style archive to link instead of a shared archive.
  +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
  +
  +# Commands used to build and install a shared archive.
  +archive_cmds=$lt_archive_cmds
  +archive_expsym_cmds=$lt_archive_expsym_cmds
  +postinstall_cmds=$lt_postinstall_cmds
  +postuninstall_cmds=$lt_postuninstall_cmds
  +
  +# Commands to strip libraries.
  +old_striplib=$lt_old_striplib
  +striplib=$lt_striplib
  +
  +# Method to check whether dependent libraries are shared objects.
  +deplibs_check_method=$lt_deplibs_check_method
  +
  +# Command to use when deplibs_check_method == file_magic.
  +file_magic_cmd=$lt_file_magic_cmd
  +
  +# Flag that allows shared libraries with undefined symbols to be built.
  +allow_undefined_flag=$lt_allow_undefined_flag
  +
  +# Flag that forces no undefined symbols.
  +no_undefined_flag=$lt_no_undefined_flag
  +
  +# Commands used to finish a libtool library installation in a directory.
  +finish_cmds=$lt_finish_cmds
  +
  +# Same as above, but a single script fragment to be evaled but not shown.
  +finish_eval=$lt_finish_eval
  +
  +# Take the output of nm and produce a listing of raw symbols and C names.
  +global_symbol_pipe=$lt_global_symbol_pipe
  +
  +# Transform the output of nm in a proper C declaration
  +global_symbol_to_cdecl=$lt_global_symbol_to_cdecl
  +
  +# This is the shared library runtime path variable.
  +runpath_var=$runpath_var
  +
  +# This is the shared library path variable.
  +shlibpath_var=$shlibpath_var
  +
  +# Is shlibpath searched before the hard-coded library search path?
  +shlibpath_overrides_runpath=$shlibpath_overrides_runpath
  +
  +# How to hardcode a shared library path into an executable.
  +hardcode_action=$hardcode_action
  +
  +# Whether we should hardcode library paths into libraries.
  +hardcode_into_libs=$hardcode_into_libs
  +
  +# Flag to hardcode \$libdir into a binary during linking.
  +# This must work even if \$libdir does not exist.
  +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
  +
  +# Whether we need a single -rpath flag with a separated argument.
  +hardcode_libdir_separator=$lt_hardcode_libdir_separator
  +
  +# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
  +# resulting binary.
  +hardcode_direct=$hardcode_direct
  +
  +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
  +# resulting binary.
  +hardcode_minus_L=$hardcode_minus_L
  +
  +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
  +# the resulting binary.
  +hardcode_shlibpath_var=$hardcode_shlibpath_var
  +
  +# Variables whose values should be saved in libtool wrapper scripts and
  +# restored at relink time.
  +variables_saved_for_relink="$variables_saved_for_relink"
  +
  +# Whether libtool must link a program against all its dependency libraries.
  +link_all_deplibs=$link_all_deplibs
  +
  +# Compile-time system search path for libraries
  +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
  +
  +# Run-time system search path for libraries
  +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
  +
  +# Fix the shell variable \$srcfile for the compiler.
  +fix_srcfile_path="$fix_srcfile_path"
  +
  +# Set to yes if exported symbols are required.
  +always_export_symbols=$always_export_symbols
  +
  +# The commands to list exported symbols.
  +export_symbols_cmds=$lt_export_symbols_cmds
  +
  +# The commands to extract the exported symbol list from a shared archive.
  +extract_expsyms_cmds=$lt_extract_expsyms_cmds
  +
  +# Symbols that should not be listed in the preloaded symbols.
  +exclude_expsyms=$lt_exclude_expsyms
  +
  +# Symbols that must always be exported.
  +include_expsyms=$lt_include_expsyms
  +
  +# ### END LIBTOOL CONFIG
  +
  +__EOF__
  +
  +  case $host_os in
  +  aix3*)
  +    cat <<\EOF >> "${ofile}T"
  +
  +# AIX sometimes has problems with the GCC collect2 program.  For some
  +# reason, if we set the COLLECT_NAMES environment variable, the problems
  +# vanish in a puff of smoke.
  +if test "X${COLLECT_NAMES+set}" != Xset; then
  +  COLLECT_NAMES=
  +  export COLLECT_NAMES
  +fi
   EOF
  -cat >> $CONFIG_STATUS <<EOF
  +    ;;
  +  esac
   
  -# Protect against being on the right side of a sed subst in config.status.
  -sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
  - s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
  -$ac_vpsub
  -$extrasub
  -s%@SHTOOL@%$SHTOOL%g
  -s%@PCRE_VERSION@%$PCRE_VERSION%g
  -s%@SHELL@%$SHELL%g
  -s%@CFLAGS@%$CFLAGS%g
  -s%@CPPFLAGS@%$CPPFLAGS%g
  -s%@CXXFLAGS@%$CXXFLAGS%g
  -s%@FFLAGS@%$FFLAGS%g
  -s%@DEFS@%$DEFS%g
  -s%@LDFLAGS@%$LDFLAGS%g
  -s%@LIBS@%$LIBS%g
  -s%@exec_prefix@%$exec_prefix%g
  -s%@prefix@%$prefix%g
  -s%@program_transform_name@%$program_transform_name%g
  -s%@bindir@%$bindir%g
  -s%@sbindir@%$sbindir%g
  -s%@libexecdir@%$libexecdir%g
  -s%@datadir@%$datadir%g
  -s%@sysconfdir@%$sysconfdir%g
  -s%@sharedstatedir@%$sharedstatedir%g
  -s%@localstatedir@%$localstatedir%g
  -s%@libdir@%$libdir%g
  -s%@includedir@%$includedir%g
  -s%@oldincludedir@%$oldincludedir%g
  -s%@infodir@%$infodir%g
  -s%@mandir@%$mandir%g
  -s%@CC@%$CC%g
  -s%@CPP@%$CPP%g
  -s%@SET_MAKE@%$SET_MAKE%g
  -s%@LIBTOOL@%$LIBTOOL%g
  +  case $host_os in
  +  cygwin* | mingw* | pw32* | os2*)
  +    cat <<'EOF' >> "${ofile}T"
  +      # This is a source program that is used to create dlls on Windows
  +      # Don't remove nor modify the starting and closing comments
  +# /* ltdll.c starts here */
  +# #define WIN32_LEAN_AND_MEAN
  +# #include <windows.h>
  +# #undef WIN32_LEAN_AND_MEAN
  +# #include <stdio.h>
  +#
  +# #ifndef __CYGWIN__
  +# #  ifdef __CYGWIN32__
  +# #    define __CYGWIN__ __CYGWIN32__
  +# #  endif
  +# #endif
  +#
  +# #ifdef __cplusplus
  +# extern "C" {
  +# #endif
  +# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
  +# #ifdef __cplusplus
  +# }
  +# #endif
  +#
  +# #ifdef __CYGWIN__
  +# #include <cygwin/cygwin_dll.h>
  +# DECLARE_CYGWIN_DLL( DllMain );
  +# #endif
  +# HINSTANCE __hDllInstance_base;
  +#
  +# BOOL APIENTRY
  +# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
  +# {
  +#   __hDllInstance_base = hInst;
  +#   return TRUE;
  +# }
  +# /* ltdll.c ends here */
  +        # This is a source program that is used to create import libraries
  +        # on Windows for dlls which lack them. Don't remove nor modify the
  +        # starting and closing comments
  +# /* impgen.c starts here */
  +# /*   Copyright (C) 1999-2000 Free Software Foundation, Inc.
  +#
  +#  This file is part of GNU libtool.
  +#
  +#  This program is free software; you can redistribute it and/or modify
  +#  it under the terms of the GNU General Public License as published by
  +#  the Free Software Foundation; either version 2 of the License, or
  +#  (at your option) any later version.
  +#
  +#  This program is distributed in the hope that it will be useful,
  +#  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  +#  GNU General Public License for more details.
  +#
  +#  You should have received a copy of the GNU General Public License
  +#  along with this program; if not, write to the Free Software
  +#  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  +#  */
  +#
  +# #include <stdio.h>		/* for printf() */
  +# #include <unistd.h>		/* for open(), lseek(), read() */
  +# #include <fcntl.h>		/* for O_RDONLY, O_BINARY */
  +# #include <string.h>		/* for strdup() */
  +#
  +# /* O_BINARY isn't required (or even defined sometimes) under Unix */
  +# #ifndef O_BINARY
  +# #define O_BINARY 0
  +# #endif
  +#
  +# static unsigned int
  +# pe_get16 (fd, offset)
  +#      int fd;
  +#      int offset;
  +# {
  +#   unsigned char b[2];
  +#   lseek (fd, offset, SEEK_SET);
  +#   read (fd, b, 2);
  +#   return b[0] + (b[1]<<8);
  +# }
  +#
  +# static unsigned int
  +# pe_get32 (fd, offset)
  +#     int fd;
  +#     int offset;
  +# {
  +#   unsigned char b[4];
  +#   lseek (fd, offset, SEEK_SET);
  +#   read (fd, b, 4);
  +#   return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
  +# }
  +#
  +# static unsigned int
  +# pe_as32 (ptr)
  +#      void *ptr;
  +# {
  +#   unsigned char *b = ptr;
  +#   return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
  +# }
  +#
  +# int
  +# main (argc, argv)
  +#     int argc;
  +#     char *argv[];
  +# {
  +#     int dll;
  +#     unsigned long pe_header_offset, opthdr_ofs, num_entries, i;
  +#     unsigned long export_rva, export_size, nsections, secptr, expptr;
  +#     unsigned long name_rvas, nexp;
  +#     unsigned char *expdata, *erva;
  +#     char *filename, *dll_name;
  +#
  +#     filename = argv[1];
  +#
  +#     dll = open(filename, O_RDONLY|O_BINARY);
  +#     if (dll < 1)
  +# 	return 1;
  +#
  +#     dll_name = filename;
  +#
  +#     for (i=0; filename[i]; i++)
  +# 	if (filename[i] == '/' || filename[i] == '\\'  || filename[i] == ':')
  +# 	    dll_name = filename + i +1;
  +#
  +#     pe_header_offset = pe_get32 (dll, 0x3c);
  +#     opthdr_ofs = pe_header_offset + 4 + 20;
  +#     num_entries = pe_get32 (dll, opthdr_ofs + 92);
  +#
  +#     if (num_entries < 1) /* no exports */
  +# 	return 1;
  +#
  +#     export_rva = pe_get32 (dll, opthdr_ofs + 96);
  +#     export_size = pe_get32 (dll, opthdr_ofs + 100);
  +#     nsections = pe_get16 (dll, pe_header_offset + 4 +2);
  +#     secptr = (pe_header_offset + 4 + 20 +
  +# 	      pe_get16 (dll, pe_header_offset + 4 + 16));
  +#
  +#     expptr = 0;
  +#     for (i = 0; i < nsections; i++)
  +#     {
  +# 	char sname[8];
  +# 	unsigned long secptr1 = secptr + 40 * i;
  +# 	unsigned long vaddr = pe_get32 (dll, secptr1 + 12);
  +# 	unsigned long vsize = pe_get32 (dll, secptr1 + 16);
  +# 	unsigned long fptr = pe_get32 (dll, secptr1 + 20);
  +# 	lseek(dll, secptr1, SEEK_SET);
  +# 	read(dll, sname, 8);
  +# 	if (vaddr <= export_rva && vaddr+vsize > export_rva)
  +# 	{
  +# 	    expptr = fptr + (export_rva - vaddr);
  +# 	    if (export_rva + export_size > vaddr + vsize)
  +# 		export_size = vsize - (export_rva - vaddr);
  +# 	    break;
  +# 	}
  +#     }
  +#
  +#     expdata = (unsigned char*)malloc(export_size);
  +#     lseek (dll, expptr, SEEK_SET);
  +#     read (dll, expdata, export_size);
  +#     erva = expdata - export_rva;
  +#
  +#     nexp = pe_as32 (expdata+24);
  +#     name_rvas = pe_as32 (expdata+32);
  +#
  +#     printf ("EXPORTS\n");
  +#     for (i = 0; i<nexp; i++)
  +#     {
  +# 	unsigned long name_rva = pe_as32 (erva+name_rvas+i*4);
  +# 	printf ("\t%s @ %ld ;\n", erva+name_rva, 1+ i);
  +#     }
  +#
  +#     return 0;
  +# }
  +# /* impgen.c ends here */
   
  -CEOF
   EOF
  +    ;;
  +  esac
   
  -cat >> $CONFIG_STATUS <<\EOF
  +  # We use sed instead of cat because bash on DJGPP gets confused if
  +  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
  +  # text mode, it properly converts lines to CR/LF.  This bash problem
  +  # is reportedly fixed, but why not run on old versions too?
  +  sed '$q' "$ltmain" >> "${ofile}T" || (rm -f "${ofile}T"; exit 1)
  +
  +  mv -f "${ofile}T" "$ofile" || \
  +    (rm -f "$ofile" && cp "${ofile}T" "$ofile" && rm -f "${ofile}T")
  +  chmod +x "$ofile"
  +fi
  +##
  +## END FIXME
  +
  +# This can be used to rebuild libtool when needed
  +LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
  +
  +# Always use our own libtool.
  +LIBTOOL='$(SHELL) $(top_builddir)/libtool'
  +
  +# Prevent multiple expansion
  +
  +ac_config_files="$ac_config_files Makefile pcre-config"
  +ac_config_commands="$ac_config_commands default"
  +cat >confcache <<\_ACEOF
  +# This file is a shell script that caches the results of configure
  +# tests run on this system so they can be shared between configure
  +# scripts and configure runs, see configure's option --config-cache.
  +# It is not useful on other systems.  If it contains results you don't
  +# want to keep, you may remove or edit it.
  +#
  +# config.status only pays attention to the cache file if you give it
  +# the --recheck option to rerun configure.
  +#
  +# `ac_cv_env_foo' variables (set or unset) will be overriden when
  +# loading this file, other *unset* `ac_cv_foo' will be assigned the
  +# following values.
   
  -# Split the substitutions into bite-sized pieces for seds with
  -# small command number limits, like on Digital OSF/1 and HP-UX.
  -ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
  -ac_file=1 # Number of current file.
  -ac_beg=1 # First line for current file.
  -ac_end=$ac_max_sed_cmds # Line after last line for current file.
  -ac_more_lines=:
  -ac_sed_cmds=""
  -while $ac_more_lines; do
  -  if test $ac_beg -gt 1; then
  -    sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
  +_ACEOF
  +
  +# The following way of writing the cache mishandles newlines in values,
  +# but we know of no workaround that is simple, portable, and efficient.
  +# So, don't put newlines in cache variables' values.
  +# Ultrix sh set writes to stderr and can't be redirected directly,
  +# and sets the high bit in the cache file unless we assign to the vars.
  +{
  +  (set) 2>&1 |
  +    case `(ac_space=' '; set | grep ac_space) 2>&1` in
  +    *ac_space=\ *)
  +      # `set' does not quote correctly, so add quotes (double-quote
  +      # substitution turns \\\\ into \\, and sed turns \\ into \).
  +      sed -n \
  +        "s/'/'\\\\''/g;
  +    	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
  +      ;;
  +    *)
  +      # `set' quotes correctly as required by POSIX, so do not add quotes.
  +      sed -n \
  +        "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
  +      ;;
  +    esac;
  +} |
  +  sed '
  +     t clear
  +     : clear
  +     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
  +     t end
  +     /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
  +     : end' >>confcache
  +if cmp -s $cache_file confcache; then :; else
  +  if test -w $cache_file; then
  +    test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
  +    cat confcache >$cache_file
     else
  -    sed "${ac_end}q" conftest.subs > conftest.s$ac_file
  +    echo "not updating unwritable cache $cache_file"
     fi
  -  if test ! -s conftest.s$ac_file; then
  -    ac_more_lines=false
  -    rm -f conftest.s$ac_file
  +fi
  +rm -f confcache
  +
  +test "x$prefix" = xNONE && prefix=$ac_default_prefix
  +# Let make expand exec_prefix.
  +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
  +
  +# VPATH may cause trouble with some makes, so we remove $(srcdir),
  +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
  +# trailing colons and then remove the whole line if VPATH becomes empty
  +# (actually we leave an empty line to preserve line numbers).
  +if test "x$srcdir" = x.; then
  +  ac_vpsub='/^[ 	]*VPATH[ 	]*=/{
  +s/:*\$(srcdir):*/:/;
  +s/:*\${srcdir}:*/:/;
  +s/:*@srcdir@:*/:/;
  +s/^\([^=]*=[ 	]*\):*/\1/;
  +s/:*$//;
  +s/^[^=]*=[ 	]*$//;
  +}'
  +fi
  +
  +DEFS=-DHAVE_CONFIG_H
  +
  +: ${CONFIG_STATUS=./config.status}
  +ac_clean_files_save=$ac_clean_files
  +ac_clean_files="$ac_clean_files $CONFIG_STATUS"
  +{ echo "$as_me:6273: creating $CONFIG_STATUS" >&5
  +echo "$as_me: creating $CONFIG_STATUS" >&6;}
  +cat >$CONFIG_STATUS <<_ACEOF
  +#! $SHELL
  +# Generated automatically by configure.
  +# Run this file to recreate the current configuration.
  +# Compiler output produced by configure, useful for debugging
  +# configure, is in config.log if it exists.
  +
  +debug=false
  +SHELL=\${CONFIG_SHELL-$SHELL}
  +ac_cs_invocation="\$0 \$@"
  +
  +_ACEOF
  +
  +cat >>$CONFIG_STATUS <<\_ACEOF
  +# Be Bourne compatible
  +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
  +  emulate sh
  +  NULLCMD=:
  +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
  +  set -o posix
  +fi
  +
  +# Name of the executable.
  +as_me=`echo "$0" |sed 's,.*[\\/],,'`
  +
  +if expr a : '\(a\)' >/dev/null 2>&1; then
  +  as_expr=expr
  +else
  +  as_expr=false
  +fi
  +
  +rm -f conf$$ conf$$.exe conf$$.file
  +echo >conf$$.file
  +if ln -s conf$$.file conf$$ 2>/dev/null; then
  +  # We could just check for DJGPP; but this test a) works b) is more generic
  +  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
  +  if test -f conf$$.exe; then
  +    # Don't use ln at all; we don't have any links
  +    as_ln_s='cp -p'
     else
  -    if test -z "$ac_sed_cmds"; then
  -      ac_sed_cmds="sed -f conftest.s$ac_file"
  -    else
  -      ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
  -    fi
  -    ac_file=`expr $ac_file + 1`
  -    ac_beg=$ac_end
  -    ac_end=`expr $ac_end + $ac_max_sed_cmds`
  +    as_ln_s='ln -s'
     fi
  -done
  -if test -z "$ac_sed_cmds"; then
  -  ac_sed_cmds=cat
  +elif ln conf$$.file conf$$ 2>/dev/null; then
  +  as_ln_s=ln
  +else
  +  as_ln_s='cp -p'
  +fi
  +rm -f conf$$ conf$$.exe conf$$.file
  +
  +as_executable_p="test -f"
  +
  +# Support unset when possible.
  +if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
  +  as_unset=unset
  +else
  +  as_unset=false
  +fi
  +
  +# NLS nuisances.
  +$as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; }
  +$as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; }
  +$as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; }
  +$as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; }
  +$as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; }
  +$as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; }
  +$as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; }
  +$as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; }
  +
  +# IFS
  +# We need space, tab and new line, in precisely that order.
  +as_nl='
  +'
  +IFS=" 	$as_nl"
  +
  +# CDPATH.
  +$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; }
  +
  +exec 6>&1
  +
  +_ACEOF
  +
  +# Files that config.status was made for.
  +if test -n "$ac_config_files"; then
  +  echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
  +fi
  +
  +if test -n "$ac_config_headers"; then
  +  echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
  +fi
  +
  +if test -n "$ac_config_links"; then
  +  echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
  +fi
  +
  +if test -n "$ac_config_commands"; then
  +  echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
   fi
  +
  +cat >>$CONFIG_STATUS <<\EOF
  +
  +ac_cs_usage="\
  +\`$as_me' instantiates files from templates according to the
  +current configuration.
  +
  +Usage: $0 [OPTIONS] [FILE]...
  +
  +  -h, --help       print this help, then exit
  +  -V, --version    print version number, then exit
  +  -d, --debug      don't remove temporary files
  +      --recheck    update $as_me by reconfiguring in the same conditions
  +  --file=FILE[:TEMPLATE]
  +                   instantiate the configuration file FILE
  +  --header=FILE[:TEMPLATE]
  +                   instantiate the configuration header FILE
  +
  +Configuration files:
  +$config_files
  +
  +Configuration headers:
  +$config_headers
  +
  +Configuration commands:
  +$config_commands
  +
  +Report bugs to <bug-autoconf@gnu.org>."
  +EOF
  +
  +cat >>$CONFIG_STATUS <<EOF
  +ac_cs_version="\\
  +config.status
  +configured by $0, generated by GNU Autoconf 2.52,
  +  with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
  +
  +Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
  +Free Software Foundation, Inc.
  +This config.status script is free software; the Free Software Foundation
  +gives unlimited permission to copy, distribute and modify it."
  +srcdir=$srcdir
   EOF
   
  -cat >> $CONFIG_STATUS <<EOF
  +cat >>$CONFIG_STATUS <<\EOF
  +# If no file are specified by the user, then we need to provide default
  +# value.  By we need to know if files were specified by the user.
  +ac_need_defaults=:
  +while test $# != 0
  +do
  +  case $1 in
  +  --*=*)
  +    ac_option=`expr "x$1" : 'x\([^=]*\)='`
  +    ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
  +    shift
  +    set dummy "$ac_option" "$ac_optarg" ${1+"$@"}
  +    shift
  +    ;;
  +  -*);;
  +  *) # This is not an option, so the user has probably given explicit
  +     # arguments.
  +     ac_need_defaults=false;;
  +  esac
   
  -CONFIG_FILES=\${CONFIG_FILES-"Makefile pcre-config "}
  +  case $1 in
  +  # Handling of the options.
   EOF
  -cat >> $CONFIG_STATUS <<\EOF
  -for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
  -  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
  -  case "$ac_file" in
  -  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
  -       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
  -  *) ac_file_in="${ac_file}.in" ;;
  +cat >>$CONFIG_STATUS <<EOF
  +  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
  +    echo "running $SHELL $0 " $ac_configure_args " --no-create --no-recursion"
  +    exec $SHELL $0 $ac_configure_args --no-create --no-recursion ;;
  +EOF
  +cat >>$CONFIG_STATUS <<\EOF
  +  --version | --vers* | -V )
  +    echo "$ac_cs_version"; exit 0 ;;
  +  --he | --h)
  +    # Conflict between --help and --header
  +    { { echo "$as_me:6448: error: ambiguous option: $1
  +Try \`$0 --help' for more information." >&5
  +echo "$as_me: error: ambiguous option: $1
  +Try \`$0 --help' for more information." >&2;}
  +   { (exit 1); exit 1; }; };;
  +  --help | --hel | -h )
  +    echo "$ac_cs_usage"; exit 0 ;;
  +  --debug | --d* | -d )
  +    debug=: ;;
  +  --file | --fil | --fi | --f )
  +    shift
  +    CONFIG_FILES="$CONFIG_FILES $1"
  +    ac_need_defaults=false;;
  +  --header | --heade | --head | --hea )
  +    shift
  +    CONFIG_HEADERS="$CONFIG_HEADERS $1"
  +    ac_need_defaults=false;;
  +
  +  # This is an error.
  +  -*) { { echo "$as_me:6467: error: unrecognized option: $1
  +Try \`$0 --help' for more information." >&5
  +echo "$as_me: error: unrecognized option: $1
  +Try \`$0 --help' for more information." >&2;}
  +   { (exit 1); exit 1; }; } ;;
  +
  +  *) ac_config_targets="$ac_config_targets $1" ;;
  +
  +  esac
  +  shift
  +done
  +
  +exec 5>>config.log
  +cat >&5 << _ACEOF
  +
  +## ----------------------- ##
  +## Running config.status.  ##
  +## ----------------------- ##
  +
  +This file was extended by $as_me 2.52, executed with
  +  CONFIG_FILES    = $CONFIG_FILES
  +  CONFIG_HEADERS  = $CONFIG_HEADERS
  +  CONFIG_LINKS    = $CONFIG_LINKS
  +  CONFIG_COMMANDS = $CONFIG_COMMANDS
  +  > $ac_cs_invocation
  +on `(hostname || uname -n) 2>/dev/null | sed 1q`
  +
  +_ACEOF
  +EOF
  +
  +cat >>$CONFIG_STATUS <<\EOF
  +for ac_config_target in $ac_config_targets
  +do
  +  case "$ac_config_target" in
  +  # Handling of arguments.
  +  "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
  +  "pcre-config" ) CONFIG_FILES="$CONFIG_FILES pcre-config" ;;
  +  "default" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;;
  +  "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
  +  *) { { echo "$as_me:6506: error: invalid argument: $ac_config_target" >&5
  +echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
  +   { (exit 1); exit 1; }; };;
     esac
  +done
  +
  +# If the user did not use the arguments to specify the items to instantiate,
  +# then the envvar interface is used.  Set only those that are not.
  +# We use the long form for the default assignment because of an extremely
  +# bizarre bug on SunOS 4.1.3.
  +if $ac_need_defaults; then
  +  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
  +  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
  +  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
  +fi
  +
  +# Create a temporary directory, and hook for its removal unless debugging.
  +$debug ||
  +{
  +  trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
  +  trap '{ (exit 1); exit 1; }' 1 2 13 15
  +}
  +
  +# Create a (secure) tmp directory for tmp files.
  +: ${TMPDIR=/tmp}
  +{
  +  tmp=`(umask 077 && mktemp -d -q "$TMPDIR/csXXXXXX") 2>/dev/null` &&
  +  test -n "$tmp" && test -d "$tmp"
  +}  ||
  +{
  +  tmp=$TMPDIR/cs$$-$RANDOM
  +  (umask 077 && mkdir $tmp)
  +} ||
  +{
  +   echo "$me: cannot create a temporary directory in $TMPDIR" >&2
  +   { (exit 1); exit 1; }
  +}
  +
  +EOF
  +
  +cat >>$CONFIG_STATUS <<EOF
   
  -  # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
  +#
  +# CONFIG_FILES section.
  +#
  +
  +# No need to generate the scripts if there are no CONFIG_FILES.
  +# This happens for instance when ./config.status config.h
  +if test -n "\$CONFIG_FILES"; then
  +  # Protect against being on the right side of a sed subst in config.status.
  +  sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
  +   s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
  +s,@SHTOOL@,$SHTOOL,;t t
  +s,@PCRE_VERSION@,$PCRE_VERSION,;t t
  +s,@SHELL@,$SHELL,;t t
  +s,@exec_prefix@,$exec_prefix,;t t
  +s,@prefix@,$prefix,;t t
  +s,@program_transform_name@,$program_transform_name,;t t
  +s,@bindir@,$bindir,;t t
  +s,@sbindir@,$sbindir,;t t
  +s,@libexecdir@,$libexecdir,;t t
  +s,@datadir@,$datadir,;t t
  +s,@sysconfdir@,$sysconfdir,;t t
  +s,@sharedstatedir@,$sharedstatedir,;t t
  +s,@localstatedir@,$localstatedir,;t t
  +s,@libdir@,$libdir,;t t
  +s,@includedir@,$includedir,;t t
  +s,@oldincludedir@,$oldincludedir,;t t
  +s,@infodir@,$infodir,;t t
  +s,@mandir@,$mandir,;t t
  +s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
  +s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
  +s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
  +s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
  +s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
  +s,@build_alias@,$build_alias,;t t
  +s,@host_alias@,$host_alias,;t t
  +s,@target_alias@,$target_alias,;t t
  +s,@ECHO_C@,$ECHO_C,;t t
  +s,@ECHO_N@,$ECHO_N,;t t
  +s,@ECHO_T@,$ECHO_T,;t t
  +s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
  +s,@DEFS@,$DEFS,;t t
  +s,@LIBS@,$LIBS,;t t
  +s,@CC@,$CC,;t t
  +s,@CFLAGS@,$CFLAGS,;t t
  +s,@LDFLAGS@,$LDFLAGS,;t t
  +s,@CPPFLAGS@,$CPPFLAGS,;t t
  +s,@ac_ct_CC@,$ac_ct_CC,;t t
  +s,@EXEEXT@,$EXEEXT,;t t
  +s,@OBJEXT@,$OBJEXT,;t t
  +s,@CPP@,$CPP,;t t
  +s,@SET_MAKE@,$SET_MAKE,;t t
  +s,@build@,$build,;t t
  +s,@build_cpu@,$build_cpu,;t t
  +s,@build_vendor@,$build_vendor,;t t
  +s,@build_os@,$build_os,;t t
  +s,@host@,$host,;t t
  +s,@host_cpu@,$host_cpu,;t t
  +s,@host_vendor@,$host_vendor,;t t
  +s,@host_os@,$host_os,;t t
  +s,@LN_S@,$LN_S,;t t
  +s,@ECHO@,$ECHO,;t t
  +s,@RANLIB@,$RANLIB,;t t
  +s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
  +s,@STRIP@,$STRIP,;t t
  +s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t
  +s,@LIBTOOL@,$LIBTOOL,;t t
  +CEOF
  +
  +EOF
  +
  +  cat >>$CONFIG_STATUS <<\EOF
  +  # Split the substitutions into bite-sized pieces for seds with
  +  # small command number limits, like on Digital OSF/1 and HP-UX.
  +  ac_max_sed_lines=48
  +  ac_sed_frag=1 # Number of current file.
  +  ac_beg=1 # First line for current file.
  +  ac_end=$ac_max_sed_lines # Line after last line for current file.
  +  ac_more_lines=:
  +  ac_sed_cmds=
  +  while $ac_more_lines; do
  +    if test $ac_beg -gt 1; then
  +      sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
  +    else
  +      sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
  +    fi
  +    if test ! -s $tmp/subs.frag; then
  +      ac_more_lines=false
  +    else
  +      # The purpose of the label and of the branching condition is to
  +      # speed up the sed processing (if there are no `@' at all, there
  +      # is no need to browse any of the substitutions).
  +      # These are the two extra sed commands mentioned above.
  +      (echo ':t
  +  /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
  +      if test -z "$ac_sed_cmds"; then
  +  	ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
  +      else
  +  	ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
  +      fi
  +      ac_sed_frag=`expr $ac_sed_frag + 1`
  +      ac_beg=$ac_end
  +      ac_end=`expr $ac_end + $ac_max_sed_lines`
  +    fi
  +  done
  +  if test -z "$ac_sed_cmds"; then
  +    ac_sed_cmds=cat
  +  fi
  +fi # test -n "$CONFIG_FILES"
  +
  +EOF
  +cat >>$CONFIG_STATUS <<\EOF
  +for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
  +  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
  +  case $ac_file in
  +  - | *:- | *:-:* ) # input from stdin
  +        cat >$tmp/stdin
  +        ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
  +        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
  +  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
  +        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
  +  * )   ac_file_in=$ac_file.in ;;
  +  esac
   
  -  # Remove last slash and all that follows it.  Not all systems have dirname.
  -  ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
  +  # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
  +  ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
  +         X"$ac_file" : 'X\(//\)[^/]' \| \
  +         X"$ac_file" : 'X\(//\)$' \| \
  +         X"$ac_file" : 'X\(/\)' \| \
  +         .     : '\(.\)' 2>/dev/null ||
  +echo X"$ac_file" |
  +    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
  +  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
  +  	  /^X\(\/\/\)$/{ s//\1/; q; }
  +  	  /^X\(\/\).*/{ s//\1/; q; }
  +  	  s/.*/./; q'`
     if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
  -    # The file is in a subdirectory.
  -    test ! -d "$ac_dir" && mkdir "$ac_dir"
  -    ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
  +    { case "$ac_dir" in
  +  [\\/]* | ?:[\\/]* ) as_incr_dir=;;
  +  *)                      as_incr_dir=.;;
  +esac
  +as_dummy="$ac_dir"
  +for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do
  +  case $as_mkdir_dir in
  +    # Skip DOS drivespec
  +    ?:) as_incr_dir=$as_mkdir_dir ;;
  +    *)
  +      as_incr_dir=$as_incr_dir/$as_mkdir_dir
  +      test -d "$as_incr_dir" || mkdir "$as_incr_dir"
  +    ;;
  +  esac
  +done; }
  +
  +    ac_dir_suffix="/`echo $ac_dir|sed 's,^\./,,'`"
       # A "../" for each directory in $ac_dir_suffix.
  -    ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
  +    ac_dots=`echo "$ac_dir_suffix" | sed 's,/[^/]*,../,g'`
     else
       ac_dir_suffix= ac_dots=
     fi
   
  -  case "$ac_given_srcdir" in
  -  .)  srcdir=.
  -      if test -z "$ac_dots"; then top_srcdir=.
  -      else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
  -  /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
  +  case $srcdir in
  +  .)  ac_srcdir=.
  +      if test -z "$ac_dots"; then
  +         ac_top_srcdir=.
  +      else
  +         ac_top_srcdir=`echo $ac_dots | sed 's,/$,,'`
  +      fi ;;
  +  [\\/]* | ?:[\\/]* )
  +      ac_srcdir=$srcdir$ac_dir_suffix;
  +      ac_top_srcdir=$srcdir ;;
     *) # Relative path.
  -    srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
  -    top_srcdir="$ac_dots$ac_given_srcdir" ;;
  +    ac_srcdir=$ac_dots$srcdir$ac_dir_suffix
  +    ac_top_srcdir=$ac_dots$srcdir ;;
     esac
   
  +  if test x"$ac_file" != x-; then
  +    { echo "$as_me:6723: creating $ac_file" >&5
  +echo "$as_me: creating $ac_file" >&6;}
  +    rm -f "$ac_file"
  +  fi
  +  # Let's still pretend it is `configure' which instantiates (i.e., don't
  +  # use $as_me), people would be surprised to read:
  +  #    /* config.h.  Generated automatically by config.status.  */
  +  configure_input="Generated automatically from `echo $ac_file_in |
  +                                                 sed 's,.*/,,'` by configure."
  +
  +  # First look for the input files in the build tree, otherwise in the
  +  # src tree.
  +  ac_file_inputs=`IFS=:
  +    for f in $ac_file_in; do
  +      case $f in
  +      -) echo $tmp/stdin ;;
  +      [\\/$]*)
  +         # Absolute (can't be DOS-style, as IFS=:)
  +         test -f "$f" || { { echo "$as_me:6741: error: cannot find input file: $f" >&5
  +echo "$as_me: error: cannot find input file: $f" >&2;}
  +   { (exit 1); exit 1; }; }
  +         echo $f;;
  +      *) # Relative
  +         if test -f "$f"; then
  +           # Build tree
  +           echo $f
  +         elif test -f "$srcdir/$f"; then
  +           # Source tree
  +           echo $srcdir/$f
  +         else
  +           # /dev/null tree
  +           { { echo "$as_me:6754: error: cannot find input file: $f" >&5
  +echo "$as_me: error: cannot find input file: $f" >&2;}
  +   { (exit 1); exit 1; }; }
  +         fi;;
  +      esac
  +    done` || { (exit 1); exit 1; }
  +EOF
  +cat >>$CONFIG_STATUS <<EOF
  +  sed "$ac_vpsub
  +$extrasub
  +EOF
  +cat >>$CONFIG_STATUS <<\EOF
  +:t
  +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
  +s,@configure_input@,$configure_input,;t t
  +s,@srcdir@,$ac_srcdir,;t t
  +s,@top_srcdir@,$ac_top_srcdir,;t t
  +" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
  +  rm -f $tmp/stdin
  +  if test x"$ac_file" != x-; then
  +    mv $tmp/out $ac_file
  +  else
  +    cat $tmp/out
  +    rm -f $tmp/out
  +  fi
  +
  +done
  +EOF
  +cat >>$CONFIG_STATUS <<\EOF
   
  -  echo creating "$ac_file"
  -  rm -f "$ac_file"
  -  configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
  -  case "$ac_file" in
  -  *Makefile*) ac_comsub="1i\\
  -# $configure_input" ;;
  -  *) ac_comsub= ;;
  -  esac
  -
  -  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
  -  sed -e "$ac_comsub
  -s%@configure_input@%$configure_input%g
  -s%@srcdir@%$srcdir%g
  -s%@top_srcdir@%$top_srcdir%g
  -" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
  -fi; done
  -rm -f conftest.s*
  +#
  +# CONFIG_HEADER section.
  +#
   
   # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
   # NAME is the cpp macro being defined and VALUE is the value it is being given.
   #
   # ac_d sets the value in "#define NAME VALUE" lines.
  -ac_dA='s%^\([ 	]*\)#\([ 	]*define[ 	][ 	]*\)'
  -ac_dB='\([ 	][ 	]*\)[^ 	]*%\1#\2'
  -ac_dC='\3'
  -ac_dD='%g'
  -# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
  -ac_uA='s%^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
  -ac_uB='\([ 	]\)%\1#\2define\3'
  +ac_dA='s,^\([ 	]*\)#\([ 	]*define[ 	][ 	]*\)'
  +ac_dB='[ 	].*$,\1#\2'
  +ac_dC=' '
  +ac_dD=',;t'
  +# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
  +ac_uA='s,^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
  +ac_uB='$,\1#\2define\3'
   ac_uC=' '
  -ac_uD='\4%g'
  -# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
  -ac_eA='s%^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
  -ac_eB='$%\1#\2define\3'
  -ac_eC=' '
  -ac_eD='%g'
  +ac_uD=',;t'
   
  -if test "${CONFIG_HEADERS+set}" != set; then
  -EOF
  -cat >> $CONFIG_STATUS <<EOF
  -  CONFIG_HEADERS="config.h"
  -EOF
  -cat >> $CONFIG_STATUS <<\EOF
  -fi
  -for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
  +for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
     # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
  -  case "$ac_file" in
  -  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
  -       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
  -  *) ac_file_in="${ac_file}.in" ;;
  -  esac
  -
  -  echo creating $ac_file
  -
  -  rm -f conftest.frag conftest.in conftest.out
  -  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
  -  cat $ac_file_inputs > conftest.in
  +  case $ac_file in
  +  - | *:- | *:-:* ) # input from stdin
  +        cat >$tmp/stdin
  +        ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
  +        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
  +  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
  +        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
  +  * )   ac_file_in=$ac_file.in ;;
  +  esac
   
  +  test x"$ac_file" != x- && { echo "$as_me:6814: creating $ac_file" >&5
  +echo "$as_me: creating $ac_file" >&6;}
  +
  +  # First look for the input files in the build tree, otherwise in the
  +  # src tree.
  +  ac_file_inputs=`IFS=:
  +    for f in $ac_file_in; do
  +      case $f in
  +      -) echo $tmp/stdin ;;
  +      [\\/$]*)
  +         # Absolute (can't be DOS-style, as IFS=:)
  +         test -f "$f" || { { echo "$as_me:6825: error: cannot find input file: $f" >&5
  +echo "$as_me: error: cannot find input file: $f" >&2;}
  +   { (exit 1); exit 1; }; }
  +         echo $f;;
  +      *) # Relative
  +         if test -f "$f"; then
  +           # Build tree
  +           echo $f
  +         elif test -f "$srcdir/$f"; then
  +           # Source tree
  +           echo $srcdir/$f
  +         else
  +           # /dev/null tree
  +           { { echo "$as_me:6838: error: cannot find input file: $f" >&5
  +echo "$as_me: error: cannot find input file: $f" >&2;}
  +   { (exit 1); exit 1; }; }
  +         fi;;
  +      esac
  +    done` || { (exit 1); exit 1; }
  +  # Remove the trailing spaces.
  +  sed 's/[ 	]*$//' $ac_file_inputs >$tmp/in
  +
   EOF
   
  -# Transform confdefs.h into a sed script conftest.vals that substitutes
  -# the proper values into config.h.in to produce config.h.  And first:
  -# Protect against being on the right side of a sed subst in config.status.
  -# Protect against being in an unquoted here document in config.status.
  -rm -f conftest.vals
  -cat > conftest.hdr <<\EOF
  -s/[\\&%]/\\&/g
  -s%[\\$`]%\\&%g
  -s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
  -s%ac_d%ac_u%gp
  -s%ac_u%ac_e%gp
  +# Transform confdefs.h into two sed scripts, `conftest.defines' and
  +# `conftest.undefs', that substitutes the proper values into
  +# config.h.in to produce config.h.  The first handles `#define'
  +# templates, and the second `#undef' templates.
  +# And first: Protect against being on the right side of a sed subst in
  +# config.status.  Protect against being in an unquoted here document
  +# in config.status.
  +rm -f conftest.defines conftest.undefs
  +# Using a here document instead of a string reduces the quoting nightmare.
  +# Putting comments in sed scripts is not portable.
  +#
  +# `end' is used to avoid that the second main sed command (meant for
  +# 0-ary CPP macros) applies to n-ary macro definitions.
  +# See the Autoconf documentation for `clear'.
  +cat >confdef2sed.sed <<\EOF
  +s/[\\&,]/\\&/g
  +s,[\\$`],\\&,g
  +t clear
  +: clear
  +s,^[ 	]*#[ 	]*define[ 	][ 	]*\(\([^ 	(][^ 	(]*\)([^)]*)\)[ 	]*\(.*\)$,${ac_dA}\2${ac_dB}\1${ac_dC}\3${ac_dD},gp
  +t end
  +s,^[ 	]*#[ 	]*define[ 	][ 	]*\([^ 	][^ 	]*\)[ 	]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
  +: end
   EOF
  -sed -n -f conftest.hdr confdefs.h > conftest.vals
  -rm -f conftest.hdr
  +# If some macros were called several times there might be several times
  +# the same #defines, which is useless.  Nevertheless, we may not want to
  +# sort them, since we want the *last* AC-DEFINE to be honored.
  +uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
  +sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
  +rm -f confdef2sed.sed
   
   # This sed command replaces #undef with comments.  This is necessary, for
   # example, in the case of _POSIX_SOURCE, which is predefined and required
   # on some systems where configure will not decide to define it.
  -cat >> conftest.vals <<\EOF
  -s%^[ 	]*#[ 	]*undef[ 	][ 	]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
  +cat >>conftest.undefs <<\EOF
  +s,^[ 	]*#[ 	]*undef[ 	][ 	]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
   EOF
  -
  -# Break up conftest.vals because some shells have a limit on
  -# the size of here documents, and old seds have small limits too.
   
  +# Break up conftest.defines because some shells have a limit on the size
  +# of here documents, and old seds have small limits too (100 cmds).
  +echo '  # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
  +echo '  if egrep "^[ 	]*#[ 	]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
  +echo '  # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
  +echo '  :' >>$CONFIG_STATUS
   rm -f conftest.tail
  -while :
  +while grep . conftest.defines >/dev/null
   do
  -  ac_lines=`grep -c . conftest.vals`
  -  # grep -c gives empty output for an empty file on some AIX systems.
  -  if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
  -  # Write a limited-size here document to conftest.frag.
  -  echo '  cat > conftest.frag <<CEOF' >> $CONFIG_STATUS
  -  sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
  +  # Write a limited-size here document to $tmp/defines.sed.
  +  echo '  cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
  +  # Speed up: don't consider the non `#define' lines.
  +  echo '/^[ 	]*#[ 	]*define/!b' >>$CONFIG_STATUS
  +  # Work around the forget-to-reset-the-flag bug.
  +  echo 't clr' >>$CONFIG_STATUS
  +  echo ': clr' >>$CONFIG_STATUS
  +  sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
     echo 'CEOF
  -  sed -f conftest.frag conftest.in > conftest.out
  -  rm -f conftest.in
  -  mv conftest.out conftest.in
  -' >> $CONFIG_STATUS
  -  sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
  -  rm -f conftest.vals
  -  mv conftest.tail conftest.vals
  -done
  -rm -f conftest.vals
  -
  -cat >> $CONFIG_STATUS <<\EOF
  -  rm -f conftest.frag conftest.h
  -  echo "/* $ac_file.  Generated automatically by configure.  */" > conftest.h
  -  cat conftest.in >> conftest.h
  -  rm -f conftest.in
  -  if cmp -s $ac_file conftest.h 2>/dev/null; then
  -    echo "$ac_file is unchanged"
  -    rm -f conftest.h
  +  sed -f $tmp/defines.sed $tmp/in >$tmp/out
  +  rm -f $tmp/in
  +  mv $tmp/out $tmp/in
  +' >>$CONFIG_STATUS
  +  sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
  +  rm -f conftest.defines
  +  mv conftest.tail conftest.defines
  +done
  +rm -f conftest.defines
  +echo '  fi # egrep' >>$CONFIG_STATUS
  +echo >>$CONFIG_STATUS
  +
  +# Break up conftest.undefs because some shells have a limit on the size
  +# of here documents, and old seds have small limits too (100 cmds).
  +echo '  # Handle all the #undef templates' >>$CONFIG_STATUS
  +rm -f conftest.tail
  +while grep . conftest.undefs >/dev/null
  +do
  +  # Write a limited-size here document to $tmp/undefs.sed.
  +  echo '  cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
  +  # Speed up: don't consider the non `#undef'
  +  echo '/^[ 	]*#[ 	]*undef/!b' >>$CONFIG_STATUS
  +  # Work around the forget-to-reset-the-flag bug.
  +  echo 't clr' >>$CONFIG_STATUS
  +  echo ': clr' >>$CONFIG_STATUS
  +  sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
  +  echo 'CEOF
  +  sed -f $tmp/undefs.sed $tmp/in >$tmp/out
  +  rm -f $tmp/in
  +  mv $tmp/out $tmp/in
  +' >>$CONFIG_STATUS
  +  sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
  +  rm -f conftest.undefs
  +  mv conftest.tail conftest.undefs
  +done
  +rm -f conftest.undefs
  +
  +cat >>$CONFIG_STATUS <<\EOF
  +  # Let's still pretend it is `configure' which instantiates (i.e., don't
  +  # use $as_me), people would be surprised to read:
  +  #    /* config.h.  Generated automatically by config.status.  */
  +  if test x"$ac_file" = x-; then
  +    echo "/* Generated automatically by configure.  */" >$tmp/config.h
     else
  -    # Remove last slash and all that follows it.  Not all systems have dirname.
  -      ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
  +    echo "/* $ac_file.  Generated automatically by configure.  */" >$tmp/config.h
  +  fi
  +  cat $tmp/in >>$tmp/config.h
  +  rm -f $tmp/in
  +  if test x"$ac_file" != x-; then
  +    if cmp -s $ac_file $tmp/config.h 2>/dev/null; then
  +      { echo "$as_me:6955: $ac_file is unchanged" >&5
  +echo "$as_me: $ac_file is unchanged" >&6;}
  +    else
  +      ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
  +         X"$ac_file" : 'X\(//\)[^/]' \| \
  +         X"$ac_file" : 'X\(//\)$' \| \
  +         X"$ac_file" : 'X\(/\)' \| \
  +         .     : '\(.\)' 2>/dev/null ||
  +echo X"$ac_file" |
  +    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
  +  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
  +  	  /^X\(\/\/\)$/{ s//\1/; q; }
  +  	  /^X\(\/\).*/{ s//\1/; q; }
  +  	  s/.*/./; q'`
         if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
  -      # The file is in a subdirectory.
  -      test ! -d "$ac_dir" && mkdir "$ac_dir"
  +        { case "$ac_dir" in
  +  [\\/]* | ?:[\\/]* ) as_incr_dir=;;
  +  *)                      as_incr_dir=.;;
  +esac
  +as_dummy="$ac_dir"
  +for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do
  +  case $as_mkdir_dir in
  +    # Skip DOS drivespec
  +    ?:) as_incr_dir=$as_mkdir_dir ;;
  +    *)
  +      as_incr_dir=$as_incr_dir/$as_mkdir_dir
  +      test -d "$as_incr_dir" || mkdir "$as_incr_dir"
  +    ;;
  +  esac
  +done; }
  +
  +      fi
  +      rm -f $ac_file
  +      mv $tmp/config.h $ac_file
       fi
  -    rm -f $ac_file
  -    mv conftest.h $ac_file
  +  else
  +    cat $tmp/config.h
  +    rm -f $tmp/config.h
     fi
  -fi; done
  -
  +done
   EOF
  -cat >> $CONFIG_STATUS <<EOF
  +cat >>$CONFIG_STATUS <<\EOF
  +
  +#
  +# CONFIG_COMMANDS section.
  +#
  +for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
  +  ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
  +  ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
   
  +  case $ac_dest in
  +    default ) chmod a+x pcre-config
  + ;;
  +  esac
  +done
   EOF
  -cat >> $CONFIG_STATUS <<\EOF
  -chmod a+x pcre-config
  +
  +cat >>$CONFIG_STATUS <<\EOF
   
  -exit 0
  +{ (exit 0); exit 0; }
   EOF
   chmod +x $CONFIG_STATUS
  -rm -fr confdefs* $ac_clean_files
  -test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
  +ac_clean_files=$ac_clean_files_save
  +
  +# configure is writing to config.log, and then calls config.status.
  +# config.status does its own redirection, appending to config.log.
  +# Unfortunately, on DOS this fails, as config.log is still kept open
  +# by configure, so config.status won't be able to write to it; its
  +# output is simply discarded.  So we exec the FD to /dev/null,
  +# effectively closing config.log, so it can be properly (re)opened and
  +# appended to by config.status.  When coming back to configure, we
  +# need to make the FD available again.
  +if test "$no_create" != yes; then
  +  ac_cs_success=:
  +  exec 5>/dev/null
  +  $SHELL $CONFIG_STATUS || ac_cs_success=false
  +  exec 5>>config.log
  +  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
  +  # would make configure fail if this is the last instruction.
  +  $ac_cs_success || { (exit 1); exit 1; }
  +fi
   
  Index: ossp-pkg/pcre/configure.ac
  ============================================================
  $ cvs update -p -r1.1 configure.ac
  dnl ##
  dnl ##   Autoconf specification for PCRE library
  dnl ##
  
  AC_PREREQ(2.12)dnl
  AC_REVISION($Revision: 1.1 $)
  
  SHTOOL="./shtool"
  AC_SUBST(SHTOOL)
  T_MD=`$SHTOOL echo -e %B 2>/dev/null`
  T_ME=`$SHTOOL echo -e %b 2>/dev/null`
  PCRE_MAJOR=`grep '#define PCRE_MAJOR' pcre.h | awk '{ print $3; }'`
  PCRE_MINOR=`grep '#define PCRE_MINOR' pcre.h | awk '{ print $3; }'`
  PCRE_VERSION="$PCRE_MAJOR.$PCRE_MINOR"
  AC_SUBST(PCRE_VERSION)
  echo "Configuring ${T_MD}OSSP pcre${T_ME} (Perl-Compatible Regular Expressions) ${T_MD}${PCRE_VERSION}${T_ME}"
  echo "Copyright (c) 1997-2001 Philip Hazel <ph10@cam.ac.uk>, All rights reserved."
  echo "Copyright (c) 1997-2001 University of Cambridge, All rights reserved."
  echo "Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>"
  
  AC_INIT(README)
  AC_CONFIG_HEADER(config.h)
  AC_PREFIX_DEFAULT(/usr/local)
  
  AC_PROG_CC
  AC_PROG_CPP
  AC_SET_MAKE
  
  AC_ARG_ENABLE(utf8,dnl
  [  --enable-utf8           enable UTF8 support (incomplete)],
  enable_utf8="$enableval",
  enable_utf8=yes
  )dnl
  if test ".$enable_utf8" = .yes; then
      if test ".$CFLAGS" = .; then
          CFLAGS="-DSUPPORT_UTF8"
      else
          CFLAGS="$CFLAGS -DSUPPORT_UTF8"
      fi
  fi
  
  AC_CHECK_FUNCS(memmove strerror)
  
  sinclude(libtool.m4)
  AC_PROG_LIBTOOL
  
  AC_OUTPUT(dnl
  Makefile dnl
  pcre-config dnl
  ,dnl
  chmod a+x pcre-config
  )dnl
  
    Index: ossp-pkg/pcre/libtool.m4
  ============================================================
  $ cvs update -p -r1.1 libtool.m4
  # libtool.m4 - Configure libtool for the host system. -*-Shell-script-*-
  ## Copyright 1996, 1997, 1998, 1999, 2000, 2001
  ## Free Software Foundation, Inc.
  ## Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
  ##
  ## This program is free software; you can redistribute it and/or modify
  ## it under the terms of the GNU General Public License as published by
  ## the Free Software Foundation; either version 2 of the License, or
  ## (at your option) any later version.
  ##
  ## This program is distributed in the hope that it will be useful, but
  ## WITHOUT ANY WARRANTY; without even the implied warranty of
  ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  ## General Public License for more details.
  ##
  ## You should have received a copy of the GNU General Public License
  ## along with this program; if not, write to the Free Software
  ## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  ##
  ## As a special exception to the GNU General Public License, if you
  ## distribute this file as part of a program that contains a
  ## configuration script generated by Autoconf, you may include it under
  ## the same distribution terms that you use for the rest of that program.
  
  # serial 46 AC_PROG_LIBTOOL
  AC_DEFUN([AC_PROG_LIBTOOL],
  [AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
  
  # This can be used to rebuild libtool when needed
  LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
  
  # Always use our own libtool.
  LIBTOOL='$(SHELL) $(top_builddir)/libtool'
  AC_SUBST(LIBTOOL)dnl
  
  # Prevent multiple expansion
  define([AC_PROG_LIBTOOL], [])
  ])
  
  AC_DEFUN([AC_LIBTOOL_SETUP],
  [AC_PREREQ(2.13)dnl
  AC_REQUIRE([AC_ENABLE_SHARED])dnl
  AC_REQUIRE([AC_ENABLE_STATIC])dnl
  AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl
  AC_REQUIRE([AC_CANONICAL_HOST])dnl
  AC_REQUIRE([AC_CANONICAL_BUILD])dnl
  AC_REQUIRE([AC_PROG_CC])dnl
  AC_REQUIRE([AC_PROG_LD])dnl
  AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl
  AC_REQUIRE([AC_PROG_NM])dnl
  AC_REQUIRE([AC_PROG_LN_S])dnl
  AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl
  AC_REQUIRE([AC_OBJEXT])dnl
  AC_REQUIRE([AC_EXEEXT])dnl
  dnl
  
  _LT_AC_PROG_ECHO_BACKSLASH
  # Only perform the check for file, if the check method requires it
  case $deplibs_check_method in
  file_magic*)
    if test "$file_magic_cmd" = '$MAGIC_CMD'; then
      AC_PATH_MAGIC
    fi
    ;;
  esac
  
  AC_CHECK_TOOL(RANLIB, ranlib, :)
  AC_CHECK_TOOL(STRIP, strip, :)
  
  ifdef([AC_PROVIDE_AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no)
  ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL],
  enable_win32_dll=yes, enable_win32_dll=no)
  
  AC_ARG_ENABLE(libtool-lock,
    [  --disable-libtool-lock  avoid locking (might break parallel builds)])
  test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
  
  # Some flags need to be propagated to the compiler or linker for good
  # libtool support.
  case $host in
  *-*-irix6*)
    # Find out which ABI we are using.
    echo '[#]line __oline__ "configure"' > conftest.$ac_ext
    if AC_TRY_EVAL(ac_compile); then
      case `/usr/bin/file conftest.$ac_objext` in
      *32-bit*)
        LD="${LD-ld} -32"
        ;;
      *N32*)
        LD="${LD-ld} -n32"
        ;;
      *64-bit*)
        LD="${LD-ld} -64"
        ;;
      esac
    fi
    rm -rf conftest*
    ;;
  
  *-*-sco3.2v5*)
    # On SCO OpenServer 5, we need -belf to get full-featured binaries.
    SAVE_CFLAGS="$CFLAGS"
    CFLAGS="$CFLAGS -belf"
    AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
      [AC_LANG_SAVE
       AC_LANG_C
       AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
       AC_LANG_RESTORE])
    if test x"$lt_cv_cc_needs_belf" != x"yes"; then
      # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
      CFLAGS="$SAVE_CFLAGS"
    fi
    ;;
  
  ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL],
  [*-*-cygwin* | *-*-mingw* | *-*-pw32*)
    AC_CHECK_TOOL(DLLTOOL, dlltool, false)
    AC_CHECK_TOOL(AS, as, false)
    AC_CHECK_TOOL(OBJDUMP, objdump, false)
  
    # recent cygwin and mingw systems supply a stub DllMain which the user
    # can override, but on older systems we have to supply one
    AC_CACHE_CHECK([if libtool should supply DllMain function], lt_cv_need_dllmain,
      [AC_TRY_LINK([],
        [extern int __attribute__((__stdcall__)) DllMain(void*, int, void*);
        DllMain (0, 0, 0);],
        [lt_cv_need_dllmain=no],[lt_cv_need_dllmain=yes])])
  
    case $host/$CC in
    *-*-cygwin*/gcc*-mno-cygwin*|*-*-mingw*)
      # old mingw systems require "-dll" to link a DLL, while more recent ones
      # require "-mdll"
      SAVE_CFLAGS="$CFLAGS"
      CFLAGS="$CFLAGS -mdll"
      AC_CACHE_CHECK([how to link DLLs], lt_cv_cc_dll_switch,
        [AC_TRY_LINK([], [], [lt_cv_cc_dll_switch=-mdll],[lt_cv_cc_dll_switch=-dll])])
      CFLAGS="$SAVE_CFLAGS" ;;
    *-*-cygwin* | *-*-pw32*)
      # cygwin systems need to pass --dll to the linker, and not link
      # crt.o which will require a WinMain@16 definition.
      lt_cv_cc_dll_switch="-Wl,--dll -nostartfiles" ;;
    esac
    ;;
    ])
  esac
  
  _LT_AC_LTCONFIG_HACK
  
  ])
  
  # _LT_AC_CHECK_DLFCN
  # --------------------
  AC_DEFUN(_LT_AC_CHECK_DLFCN,
  [AC_CHECK_HEADERS(dlfcn.h)
  ])# _LT_AC_CHECK_DLFCN
  
  # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
  # ---------------------------------
  AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE],
  [AC_REQUIRE([AC_CANONICAL_HOST])
  AC_REQUIRE([AC_PROG_NM])
  AC_REQUIRE([AC_OBJEXT])
  # Check for command to grab the raw symbol name followed by C symbol from nm.
  AC_MSG_CHECKING([command to parse $NM output])
  AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [dnl
  
  # These are sane defaults that work on at least a few old systems.
  # [They come from Ultrix.  What could be older than Ultrix?!! ;)]
  
  # Character class describing NM global symbol codes.
  [symcode='[BCDEGRST]']
  
  # Regexp to match symbols that can be accessed directly from C.
  [sympat='\([_A-Za-z][_A-Za-z0-9]*\)']
  
  # Transform the above into a raw symbol and a C symbol.
  symxfrm='\1 \2\3 \3'
  
  # Transform an extracted symbol line into a proper C declaration
  lt_cv_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'"
  
  # Define system-specific variables.
  case $host_os in
  aix*)
    [symcode='[BCDT]']
    ;;
  cygwin* | mingw* | pw32*)
    [symcode='[ABCDGISTW]']
    ;;
  hpux*) # Its linker distinguishes data from code symbols
    lt_cv_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
    ;;
  irix*)
    [symcode='[BCDEGRST]']
    ;;
  solaris* | sysv5*)
    [symcode='[BDT]']
    ;;
  sysv4)
    [symcode='[DFNSTU]']
    ;;
  esac
  
  # Handle CRLF in mingw tool chain
  opt_cr=
  case $host_os in
  mingw*)
    opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
    ;;
  esac
  
  # If we're using GNU nm, then use its standard symbol codes.
  if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then
    [symcode='[ABCDGISTW]']
  fi
  
  # Try without a prefix undercore, then with it.
  for ac_symprfx in "" "_"; do
  
    # Write the raw and C identifiers.
  [lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ 	]\($symcode$symcode*\)[ 	][ 	]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'"]
  
    # Check to see that the pipe works correctly.
    pipe_works=no
    rm -f conftest*
    cat > conftest.$ac_ext <<EOF
  #ifdef __cplusplus
  extern "C" {
  #endif
  char nm_test_var;
  void nm_test_func(){}
  #ifdef __cplusplus
  }
  #endif
  int main(){nm_test_var='a';nm_test_func();return(0);}
  EOF
  
    if AC_TRY_EVAL(ac_compile); then
      # Now try to grab the symbols.
      nlist=conftest.nm
      if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
        # Try sorting and uniquifying the output.
        if sort "$nlist" | uniq > "$nlist"T; then
  	mv -f "$nlist"T "$nlist"
        else
  	rm -f "$nlist"T
        fi
  
        # Make sure that we snagged all the symbols we need.
        if egrep ' nm_test_var$' "$nlist" >/dev/null; then
  	if egrep ' nm_test_func$' "$nlist" >/dev/null; then
  	  cat <<EOF > conftest.$ac_ext
  #ifdef __cplusplus
  extern "C" {
  #endif
  
  EOF
  	  # Now generate the symbol file.
  	  eval "$lt_cv_global_symbol_to_cdecl"' < "$nlist" >> conftest.$ac_ext'
  
  	  cat <<EOF >> conftest.$ac_ext
  #if defined (__STDC__) && __STDC__
  # define lt_ptr_t void *
  #else
  # define lt_ptr_t char *
  # define const
  #endif
  
  /* The mapping between symbol names and symbols. */
  const struct {
    const char *name;
    lt_ptr_t address;
  }
  [lt_preloaded_symbols[] =]
  {
  EOF
  	  sed "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" >> conftest.$ac_ext
  	  cat <<\EOF >> conftest.$ac_ext
    {0, (lt_ptr_t) 0}
  };
  
  #ifdef __cplusplus
  }
  #endif
  EOF
  	  # Now try linking the two files.
  	  mv conftest.$ac_objext conftstm.$ac_objext
  	  save_LIBS="$LIBS"
  	  save_CFLAGS="$CFLAGS"
  	  LIBS="conftstm.$ac_objext"
  	  CFLAGS="$CFLAGS$no_builtin_flag"
  	  if AC_TRY_EVAL(ac_link) && test -s conftest; then
  	    pipe_works=yes
  	  fi
  	  LIBS="$save_LIBS"
  	  CFLAGS="$save_CFLAGS"
  	else
  	  echo "cannot find nm_test_func in $nlist" >&AC_FD_CC
  	fi
        else
  	echo "cannot find nm_test_var in $nlist" >&AC_FD_CC
        fi
      else
        echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AC_FD_CC
      fi
    else
      echo "$progname: failed program was:" >&AC_FD_CC
      cat conftest.$ac_ext >&5
    fi
    rm -f conftest* conftst*
  
    # Do not use the global_symbol_pipe unless it works.
    if test "$pipe_works" = yes; then
      break
    else
      lt_cv_sys_global_symbol_pipe=
    fi
  done
  ])
  global_symbol_pipe="$lt_cv_sys_global_symbol_pipe"
  if test -z "$lt_cv_sys_global_symbol_pipe"; then
    global_symbol_to_cdecl=
  else
    global_symbol_to_cdecl="$lt_cv_global_symbol_to_cdecl"
  fi
  if test -z "$global_symbol_pipe$global_symbol_to_cdecl"; then
    AC_MSG_RESULT(failed)
  else
    AC_MSG_RESULT(ok)
  fi
  ]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
  
  # _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR
  # ---------------------------------
  AC_DEFUN([_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR],
  [# Find the correct PATH separator.  Usually this is `:', but
  # DJGPP uses `;' like DOS.
  if test "X${PATH_SEPARATOR+set}" != Xset; then
    UNAME=${UNAME-`uname 2>/dev/null`}
    case X$UNAME in
      *-DOS) lt_cv_sys_path_separator=';' ;;
      *)     lt_cv_sys_path_separator=':' ;;
    esac
  fi
  ])# _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR
  
  # _LT_AC_PROG_ECHO_BACKSLASH
  # --------------------------
  # Add some code to the start of the generated configure script which
  # will find an echo command which doesn;t interpret backslashes.
  AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH],
  [ifdef([AC_DIVERSION_NOTICE], [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
                                [AC_DIVERT_PUSH(NOTICE)])
  _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR
  
  # Check that we are running under the correct shell.
  SHELL=${CONFIG_SHELL-/bin/sh}
  
  case X$ECHO in
  X*--fallback-echo)
    # Remove one level of quotation (which was required for Make).
    ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
    ;;
  esac
  
  echo=${ECHO-echo}
  if test "X[$]1" = X--no-reexec; then
    # Discard the --no-reexec flag, and continue.
    shift
  elif test "X[$]1" = X--fallback-echo; then
    # Avoid inline document here, it may be left over
    :
  elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
    # Yippee, $echo works!
    :
  else
    # Restart under the correct shell.
    exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
  fi
  
  if test "X[$]1" = X--fallback-echo; then
    # used as fallback echo
    shift
    cat <<EOF
  $*
  EOF
    exit 0
  fi
  
  # The HP-UX ksh and POSIX shell print the target directory to stdout
  # if CDPATH is set.
  if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
  
  if test -z "$ECHO"; then
  if test "X${echo_test_string+set}" != Xset; then
  # find a string as large as possible, as long as the shell can cope with it
    for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
      if (echo_test_string="`eval $cmd`") 2>/dev/null &&
         echo_test_string="`eval $cmd`" &&
         (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
      then
        break
      fi
    done
  fi
  
  if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
     echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
     test "X$echo_testing_string" = "X$echo_test_string"; then
    :
  else
    # The Solaris, AIX, and Digital Unix default echo programs unquote
    # backslashes.  This makes it impossible to quote backslashes using
    #   echo "$something" | sed 's/\\/\\\\/g'
    #
    # So, first we look for a working echo in the user's PATH.
  
    IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
    for dir in $PATH /usr/ucb; do
      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
         test "X$echo_testing_string" = "X$echo_test_string"; then
        echo="$dir/echo"
        break
      fi
    done
    IFS="$save_ifs"
  
    if test "X$echo" = Xecho; then
      # We didn't find a better echo, so look for alternatives.
      if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
         echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
         test "X$echo_testing_string" = "X$echo_test_string"; then
        # This shell has a builtin print -r that does the trick.
        echo='print -r'
      elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
  	 test "X$CONFIG_SHELL" != X/bin/ksh; then
        # If we have ksh, try running configure again with it.
        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
        export ORIGINAL_CONFIG_SHELL
        CONFIG_SHELL=/bin/ksh
        export CONFIG_SHELL
        exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
      else
        # Try using printf.
        echo='printf %s\n'
        if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
  	 echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
  	 test "X$echo_testing_string" = "X$echo_test_string"; then
  	# Cool, printf works
  	:
        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
  	   test "X$echo_testing_string" = 'X\t' &&
  	   echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
  	   test "X$echo_testing_string" = "X$echo_test_string"; then
  	CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
  	export CONFIG_SHELL
  	SHELL="$CONFIG_SHELL"
  	export SHELL
  	echo="$CONFIG_SHELL [$]0 --fallback-echo"
        elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
  	   test "X$echo_testing_string" = 'X\t' &&
  	   echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
  	   test "X$echo_testing_string" = "X$echo_test_string"; then
  	echo="$CONFIG_SHELL [$]0 --fallback-echo"
        else
  	# maybe with a smaller string...
  	prev=:
  
  	for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
  	  if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
  	  then
  	    break
  	  fi
  	  prev="$cmd"
  	done
  
  	if test "$prev" != 'sed 50q "[$]0"'; then
  	  echo_test_string=`eval $prev`
  	  export echo_test_string
  	  exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
  	else
  	  # Oops.  We lost completely, so just stick with echo.
  	  echo=echo
  	fi
        fi
      fi
    fi
  fi
  fi
  
  # Copy echo and quote the copy suitably for passing to libtool from
  # the Makefile, instead of quoting the original, which is used later.
  ECHO=$echo
  if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
     ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
  fi
  
  AC_SUBST(ECHO)
  AC_DIVERT_POP
  ])# _LT_AC_PROG_ECHO_BACKSLASH
  
  # _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
  #                           ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
  # ------------------------------------------------------------------
  AC_DEFUN(_LT_AC_TRY_DLOPEN_SELF,
  [if test "$cross_compiling" = yes; then :
    [$4]
  else
    AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<EOF
  [#line __oline__ "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
  #include <dlfcn.h>
  #endif
  
  #include <stdio.h>
  
  #ifdef RTLD_GLOBAL
  #  define LT_DLGLOBAL		RTLD_GLOBAL
  #else
  #  ifdef DL_GLOBAL
  #    define LT_DLGLOBAL		DL_GLOBAL
  #  else
  #    define LT_DLGLOBAL		0
  #  endif
  #endif
  
  /* We may have to define LT_DLLAZY_OR_NOW in the command line if we
     find out it does not work in some platform. */
  #ifndef LT_DLLAZY_OR_NOW
  #  ifdef RTLD_LAZY
  #    define LT_DLLAZY_OR_NOW		RTLD_LAZY
  #  else
  #    ifdef DL_LAZY
  #      define LT_DLLAZY_OR_NOW		DL_LAZY
  #    else
  #      ifdef RTLD_NOW
  #        define LT_DLLAZY_OR_NOW	RTLD_NOW
  #      else
  #        ifdef DL_NOW
  #          define LT_DLLAZY_OR_NOW	DL_NOW
  #        else
  #          define LT_DLLAZY_OR_NOW	0
  #        endif
  #      endif
  #    endif
  #  endif
  #endif
  
  #ifdef __cplusplus
  extern "C" void exit (int);
  #endif
  
  void fnord() { int i=42;}
  int main ()
  {
    void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
    int status = $lt_dlunknown;
  
    if (self)
      {
        if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
        else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
        /* dlclose (self); */
      }
  
      exit (status);
  }]
  EOF
    if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
      (./conftest; exit; ) 2>/dev/null
      lt_status=$?
      case x$lt_status in
        x$lt_dlno_uscore) $1 ;;
        x$lt_dlneed_uscore) $2 ;;
        x$lt_unknown|x*) $3 ;;
      esac
    else :
      # compilation failed
      $3
    fi
  fi
  rm -fr conftest*
  ])# _LT_AC_TRY_DLOPEN_SELF
  
  # AC_LIBTOOL_DLOPEN_SELF
  # -------------------
  AC_DEFUN(AC_LIBTOOL_DLOPEN_SELF,
  [if test "x$enable_dlopen" != xyes; then
    enable_dlopen=unknown
    enable_dlopen_self=unknown
    enable_dlopen_self_static=unknown
  else
    lt_cv_dlopen=no
    lt_cv_dlopen_libs=
  
    case $host_os in
    beos*)
      lt_cv_dlopen="load_add_on"
      lt_cv_dlopen_libs=
      lt_cv_dlopen_self=yes
      ;;
  
    cygwin* | mingw* | pw32*)
      lt_cv_dlopen="LoadLibrary"
      lt_cv_dlopen_libs=
     ;;
  
    *)
      AC_CHECK_LIB(dl, dlopen,  [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
        [AC_CHECK_FUNC(dlopen, lt_cv_dlopen="dlopen",
          [AC_CHECK_FUNC(shl_load, lt_cv_dlopen="shl_load",
            [AC_CHECK_LIB(svld, dlopen,
  	    [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
              [AC_CHECK_LIB(dld, shl_load,
                [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
  	    ])
            ])
          ])
        ])
      ;;
    esac
  
    if test "x$lt_cv_dlopen" != xno; then
      enable_dlopen=yes
    else
      enable_dlopen=no
    fi
  
    case $lt_cv_dlopen in
    dlopen)
      save_CPPFLAGS="$CPPFLAGS"
      AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
      test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
  
      save_LDFLAGS="$LDFLAGS"
      eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
  
      save_LIBS="$LIBS"
      LIBS="$lt_cv_dlopen_libs $LIBS"
  
      AC_CACHE_CHECK([whether a program can dlopen itself],
  	  lt_cv_dlopen_self, [dnl
  	  _LT_AC_TRY_DLOPEN_SELF(
  	    lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
  	    lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
      ])
  
      if test "x$lt_cv_dlopen_self" = xyes; then
        LDFLAGS="$LDFLAGS $link_static_flag"
        AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
      	  lt_cv_dlopen_self_static, [dnl
  	  _LT_AC_TRY_DLOPEN_SELF(
  	    lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
  	    lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
        ])
      fi
  
      CPPFLAGS="$save_CPPFLAGS"
      LDFLAGS="$save_LDFLAGS"
      LIBS="$save_LIBS"
      ;;
    esac
  
    case $lt_cv_dlopen_self in
    yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
    *) enable_dlopen_self=unknown ;;
    esac
  
    case $lt_cv_dlopen_self_static in
    yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
    *) enable_dlopen_self_static=unknown ;;
    esac
  fi
  ])# AC_LIBTOOL_DLOPEN_SELF
  
  AC_DEFUN([_LT_AC_LTCONFIG_HACK],
  [AC_REQUIRE([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])dnl
  # Sed substitution that helps us do robust quoting.  It backslashifies
  # metacharacters that are still active within double-quoted strings.
  Xsed='sed -e s/^X//'
  [sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g']
  
  # Same as above, but do not quote variable references.
  [double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g']
  
  # Sed substitution to delay expansion of an escaped shell variable in a
  # double_quote_subst'ed string.
  delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
  
  # Constants:
  rm="rm -f"
  
  # Global variables:
  default_ofile=libtool
  can_build_shared=yes
  
  # All known linkers require a `.a' archive for static linking (except M$VC,
  # which needs '.lib').
  libext=a
  ltmain="$ac_aux_dir/ltmain.sh"
  ofile="$default_ofile"
  with_gnu_ld="$lt_cv_prog_gnu_ld"
  need_locks="$enable_libtool_lock"
  
  old_CC="$CC"
  old_CFLAGS="$CFLAGS"
  
  # Set sane defaults for various variables
  test -z "$AR" && AR=ar
  test -z "$AR_FLAGS" && AR_FLAGS=cru
  test -z "$AS" && AS=as
  test -z "$CC" && CC=cc
  test -z "$DLLTOOL" && DLLTOOL=dlltool
  test -z "$LD" && LD=ld
  test -z "$LN_S" && LN_S="ln -s"
  test -z "$MAGIC_CMD" && MAGIC_CMD=file
  test -z "$NM" && NM=nm
  test -z "$OBJDUMP" && OBJDUMP=objdump
  test -z "$RANLIB" && RANLIB=:
  test -z "$STRIP" && STRIP=:
  test -z "$ac_objext" && ac_objext=o
  
  if test x"$host" != x"$build"; then
    ac_tool_prefix=${host_alias}-
  else
    ac_tool_prefix=
  fi
  
  # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
  case $host_os in
  linux-gnu*) ;;
  linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
  esac
  
  case $host_os in
  aix3*)
    # AIX sometimes has problems with the GCC collect2 program.  For some
    # reason, if we set the COLLECT_NAMES environment variable, the problems
    # vanish in a puff of smoke.
    if test "X${COLLECT_NAMES+set}" != Xset; then
      COLLECT_NAMES=
      export COLLECT_NAMES
    fi
    ;;
  esac
  
  # Determine commands to create old-style static archives.
  old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
  old_postinstall_cmds='chmod 644 $oldlib'
  old_postuninstall_cmds=
  
  if test -n "$RANLIB"; then
    old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
    old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
  fi
  
  # Allow CC to be a program name with arguments.
  set dummy $CC
  compiler="[$]2"
  
  ## FIXME: this should be a separate macro
  ##
  AC_MSG_CHECKING([for objdir])
  rm -f .libs 2>/dev/null
  mkdir .libs 2>/dev/null
  if test -d .libs; then
    objdir=.libs
  else
    # MS-DOS does not allow filenames that begin with a dot.
    objdir=_libs
  fi
  rmdir .libs 2>/dev/null
  AC_MSG_RESULT($objdir)
  ##
  ## END FIXME
  
  
  ## FIXME: this should be a separate macro
  ##
  AC_ARG_WITH(pic, 
  [  --with-pic              try to use only PIC/non-PIC objects [default=use both]],
  pic_mode="$withval", pic_mode=default)
  test -z "$pic_mode" && pic_mode=default
  
  # We assume here that the value for lt_cv_prog_cc_pic will not be cached
  # in isolation, and that seeing it set (from the cache) indicates that
  # the associated values are set (in the cache) correctly too.
  AC_MSG_CHECKING([for $compiler option to produce PIC])
  AC_CACHE_VAL(lt_cv_prog_cc_pic,
  [ lt_cv_prog_cc_pic=
    lt_cv_prog_cc_shlib=
    lt_cv_prog_cc_wl=
    lt_cv_prog_cc_static=
    lt_cv_prog_cc_no_builtin=
    lt_cv_prog_cc_can_build_shared=$can_build_shared
  
    if test "$GCC" = yes; then
      lt_cv_prog_cc_wl='-Wl,'
      lt_cv_prog_cc_static='-static'
  
      case $host_os in
      aix*)
        # Below there is a dirty hack to force normal static linking with -ldl
        # The problem is because libdl dynamically linked with both libc and
        # libC (AIX C++ library), which obviously doesn't included in libraries
        # list by gcc. This cause undefined symbols with -static flags.
        # This hack allows C programs to be linked with "-static -ldl", but
        # we not sure about C++ programs.
        lt_cv_prog_cc_static="$lt_cv_prog_cc_static ${lt_cv_prog_cc_wl}-lC"
        ;;
      amigaos*)
        # FIXME: we need at least 68020 code to build shared libraries, but
        # adding the `-m68020' flag to GCC prevents building anything better,
        # like `-m68040'.
        lt_cv_prog_cc_pic='-m68020 -resident32 -malways-restore-a4'
        ;;
      beos* | irix5* | irix6* | osf3* | osf4* | osf5*)
        # PIC is the default for these OSes.
        ;;
      darwin* | rhapsody*)
        # PIC is the default on this platform
        # Common symbols not allowed in MH_DYLIB files
        lt_cv_prog_cc_pic='-fno-common'
        ;;
      cygwin* | mingw* | pw32* | os2*)
        # This hack is so that the source file can tell whether it is being
        # built for inclusion in a dll (and should export symbols for example).
        lt_cv_prog_cc_pic='-DDLL_EXPORT'
        ;;
      sysv4*MP*)
        if test -d /usr/nec; then
  	 lt_cv_prog_cc_pic=-Kconform_pic
        fi
        ;;
      *)
        lt_cv_prog_cc_pic='-fPIC'
        ;;
      esac
    else
      # PORTME Check for PIC flags for the system compiler.
      case $host_os in
      aix3* | aix4* | aix5*)
        # All AIX code is PIC.
        if test "$host_cpu" = ia64; then
          # AIX 5 now supports IA64 processor
          lt_cv_prog_cc_static='-Bstatic'
          lt_cv_prog_cc_wl='-Wl,'
        else
          lt_cv_prog_cc_static='-bnso -bI:/lib/syscalls.exp'
        fi
        ;;
  
      hpux9* | hpux10* | hpux11*)
        # Is there a better lt_cv_prog_cc_static that works with the bundled CC?
        lt_cv_prog_cc_wl='-Wl,'
        lt_cv_prog_cc_static="${lt_cv_prog_cc_wl}-a ${lt_cv_prog_cc_wl}archive"
        lt_cv_prog_cc_pic='+Z'
        ;;
  
      irix5* | irix6*)
        lt_cv_prog_cc_wl='-Wl,'
        lt_cv_prog_cc_static='-non_shared'
        # PIC (with -KPIC) is the default.
        ;;
  
      cygwin* | mingw* | pw32* | os2*)
        # This hack is so that the source file can tell whether it is being
        # built for inclusion in a dll (and should export symbols for example).
        lt_cv_prog_cc_pic='-DDLL_EXPORT'
        ;;
  
      newsos6)
        lt_cv_prog_cc_pic='-KPIC'
        lt_cv_prog_cc_static='-Bstatic'
        ;;
  
      osf3* | osf4* | osf5*)
        # All OSF/1 code is PIC.
        lt_cv_prog_cc_wl='-Wl,'
        lt_cv_prog_cc_static='-non_shared'
        ;;
  
      sco3.2v5*)
        lt_cv_prog_cc_pic='-Kpic'
        lt_cv_prog_cc_static='-dn'
        lt_cv_prog_cc_shlib='-belf'
        ;;
  
      solaris*)
        lt_cv_prog_cc_pic='-KPIC'
        lt_cv_prog_cc_static='-Bstatic'
        lt_cv_prog_cc_wl='-Wl,'
        ;;
  
      sunos4*)
        lt_cv_prog_cc_pic='-PIC'
        lt_cv_prog_cc_static='-Bstatic'
        lt_cv_prog_cc_wl='-Qoption ld '
        ;;
  
      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
        lt_cv_prog_cc_pic='-KPIC'
        lt_cv_prog_cc_static='-Bstatic'
        if test "x$host_vendor" = xsni; then
          lt_cv_prog_cc_wl='-LD'
        else
          lt_cv_prog_cc_wl='-Wl,'
        fi
        ;;
  
      uts4*)
        lt_cv_prog_cc_pic='-pic'
        lt_cv_prog_cc_static='-Bstatic'
        ;;
  
      sysv4*MP*)
        if test -d /usr/nec ;then
  	lt_cv_prog_cc_pic='-Kconform_pic'
  	lt_cv_prog_cc_static='-Bstatic'
        fi
        ;;
  
      *)
        lt_cv_prog_cc_can_build_shared=no
        ;;
      esac
    fi
  ])
  if test -z "$lt_cv_prog_cc_pic"; then
    AC_MSG_RESULT([none])
  else
    AC_MSG_RESULT([$lt_cv_prog_cc_pic])
  
    # Check to make sure the pic_flag actually works.
    AC_MSG_CHECKING([if $compiler PIC flag $lt_cv_prog_cc_pic works])
    AC_CACHE_VAL(lt_cv_prog_cc_pic_works, [dnl
      save_CFLAGS="$CFLAGS"
      CFLAGS="$CFLAGS $lt_cv_prog_cc_pic -DPIC"
      AC_TRY_COMPILE([], [], [dnl
        case $host_os in
        hpux9* | hpux10* | hpux11*)
  	# On HP-UX, both CC and GCC only warn that PIC is supported... then
  	# they create non-PIC objects.  So, if there were any warnings, we
  	# assume that PIC is not supported.
  	if test -s conftest.err; then
  	  lt_cv_prog_cc_pic_works=no
  	else
  	  lt_cv_prog_cc_pic_works=yes
  	fi
  	;;
        *)
  	lt_cv_prog_cc_pic_works=yes
  	;;
        esac
      ], [dnl
        lt_cv_prog_cc_pic_works=no
      ])
      CFLAGS="$save_CFLAGS"
    ])
  
    if test "X$lt_cv_prog_cc_pic_works" = Xno; then
      lt_cv_prog_cc_pic=
      lt_cv_prog_cc_can_build_shared=no
    else
      lt_cv_prog_cc_pic=" $lt_cv_prog_cc_pic"
    fi
  
    AC_MSG_RESULT([$lt_cv_prog_cc_pic_works])
  fi
  ##
  ## END FIXME
  
  # Check for any special shared library compilation flags.
  if test -n "$lt_cv_prog_cc_shlib"; then
    AC_MSG_WARN([\`$CC' requires \`$lt_cv_prog_cc_shlib' to build shared libraries])
    if echo "$old_CC $old_CFLAGS " | [egrep -e "[ 	]$lt_cv_prog_cc_shlib[ 	]"] >/dev/null; then :
    else
     AC_MSG_WARN([add \`$lt_cv_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure])
      lt_cv_prog_cc_can_build_shared=no
    fi
  fi
  
  ## FIXME: this should be a separate macro
  ##
  AC_MSG_CHECKING([if $compiler static flag $lt_cv_prog_cc_static works])
  AC_CACHE_VAL([lt_cv_prog_cc_static_works], [dnl
    lt_cv_prog_cc_static_works=no
    save_LDFLAGS="$LDFLAGS"
    LDFLAGS="$LDFLAGS $lt_cv_prog_cc_static"
    AC_TRY_LINK([], [], [lt_cv_prog_cc_static_works=yes])
    LDFLAGS="$save_LDFLAGS"
  ])
  
  # Belt *and* braces to stop my trousers falling down:
  test "X$lt_cv_prog_cc_static_works" = Xno && lt_cv_prog_cc_static=
  AC_MSG_RESULT([$lt_cv_prog_cc_static_works])
  
  pic_flag="$lt_cv_prog_cc_pic"
  special_shlib_compile_flags="$lt_cv_prog_cc_shlib"
  wl="$lt_cv_prog_cc_wl"
  link_static_flag="$lt_cv_prog_cc_static"
  no_builtin_flag="$lt_cv_prog_cc_no_builtin"
  can_build_shared="$lt_cv_prog_cc_can_build_shared"
  ##
  ## END FIXME
  
  
  ## FIXME: this should be a separate macro
  ##
  # Check to see if options -o and -c are simultaneously supported by compiler
  AC_MSG_CHECKING([if $compiler supports -c -o file.$ac_objext])
  AC_CACHE_VAL([lt_cv_compiler_c_o], [
  $rm -r conftest 2>/dev/null
  mkdir conftest
  cd conftest
  echo "int some_variable = 0;" > conftest.$ac_ext
  mkdir out
  # According to Tom Tromey, Ian Lance Taylor reported there are C compilers
  # that will create temporary files in the current directory regardless of
  # the output directory.  Thus, making CWD read-only will cause this test
  # to fail, enabling locking or at least warning the user not to do parallel
  # builds.
  chmod -w .
  save_CFLAGS="$CFLAGS"
  CFLAGS="$CFLAGS -o out/conftest2.$ac_objext"
  compiler_c_o=no
  if { (eval echo configure:__oline__: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.$ac_objext; then
    # The compiler can only warn and ignore the option if not recognized
    # So say no if there are warnings
    if test -s out/conftest.err; then
      lt_cv_compiler_c_o=no
    else
      lt_cv_compiler_c_o=yes
    fi
  else
    # Append any errors to the config.log.
    cat out/conftest.err 1>&AC_FD_CC
    lt_cv_compiler_c_o=no
  fi
  CFLAGS="$save_CFLAGS"
  chmod u+w .
  $rm conftest* out/*
  rmdir out
  cd ..
  rmdir conftest
  $rm -r conftest 2>/dev/null
  ])
  compiler_c_o=$lt_cv_compiler_c_o
  AC_MSG_RESULT([$compiler_c_o])
  
  if test x"$compiler_c_o" = x"yes"; then
    # Check to see if we can write to a .lo
    AC_MSG_CHECKING([if $compiler supports -c -o file.lo])
    AC_CACHE_VAL([lt_cv_compiler_o_lo], [
    lt_cv_compiler_o_lo=no
    save_CFLAGS="$CFLAGS"
    CFLAGS="$CFLAGS -c -o conftest.lo"
    AC_TRY_COMPILE([], [int some_variable = 0;], [dnl
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings
      if test -s conftest.err; then
        lt_cv_compiler_o_lo=no
      else
        lt_cv_compiler_o_lo=yes
      fi
    ])
    CFLAGS="$save_CFLAGS"
    ])
    compiler_o_lo=$lt_cv_compiler_o_lo
    AC_MSG_RESULT([$compiler_c_lo])
  else
    compiler_o_lo=no
  fi
  ##
  ## END FIXME
  
  ## FIXME: this should be a separate macro
  ##
  # Check to see if we can do hard links to lock some files if needed
  hard_links="nottested"
  if test "$compiler_c_o" = no && test "$need_locks" != no; then
    # do not overwrite the value of need_locks provided by the user
    AC_MSG_CHECKING([if we can lock with hard links])
    hard_links=yes
    $rm conftest*
    ln conftest.a conftest.b 2>/dev/null && hard_links=no
    touch conftest.a
    ln conftest.a conftest.b 2>&5 || hard_links=no
    ln conftest.a conftest.b 2>/dev/null && hard_links=no
    AC_MSG_RESULT([$hard_links])
    if test "$hard_links" = no; then
      AC_MSG_WARN([\`$CC' does not support \`-c -o', so \`make -j' may be unsafe])
      need_locks=warn
    fi
  else
    need_locks=no
  fi
  ##
  ## END FIXME
  
  ## FIXME: this should be a separate macro
  ##
  if test "$GCC" = yes; then
    # Check to see if options -fno-rtti -fno-exceptions are supported by compiler
    AC_MSG_CHECKING([if $compiler supports -fno-rtti -fno-exceptions])
    echo "int some_variable = 0;" > conftest.$ac_ext
    save_CFLAGS="$CFLAGS"
    CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.$ac_ext"
    compiler_rtti_exceptions=no
    AC_TRY_COMPILE([], [int some_variable = 0;], [dnl
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings
      if test -s conftest.err; then
        compiler_rtti_exceptions=no
      else
        compiler_rtti_exceptions=yes
      fi
    ])
    CFLAGS="$save_CFLAGS"
    AC_MSG_RESULT([$compiler_rtti_exceptions])
  
    if test "$compiler_rtti_exceptions" = "yes"; then
      no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions'
    else
      no_builtin_flag=' -fno-builtin'
    fi
  fi
  ##
  ## END FIXME
  
  ## FIXME: this should be a separate macro
  ##
  # See if the linker supports building shared libraries.
  AC_MSG_CHECKING([whether the linker ($LD) supports shared libraries])
  
  allow_undefined_flag=
  no_undefined_flag=
  need_lib_prefix=unknown
  need_version=unknown
  # when you set need_version to no, make sure it does not cause -set_version
  # flags to be left without arguments
  archive_cmds=
  archive_expsym_cmds=
  old_archive_from_new_cmds=
  old_archive_from_expsyms_cmds=
  export_dynamic_flag_spec=
  whole_archive_flag_spec=
  thread_safe_flag_spec=
  hardcode_into_libs=no
  hardcode_libdir_flag_spec=
  hardcode_libdir_separator=
  hardcode_direct=no
  hardcode_minus_L=no
  hardcode_shlibpath_var=unsupported
  runpath_var=
  link_all_deplibs=unknown
  always_export_symbols=no
  export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols'
  # include_expsyms should be a list of space-separated symbols to be *always*
  # included in the symbol list
  include_expsyms=
  # exclude_expsyms can be an egrep regular expression of symbols to exclude
  # it will be wrapped by ` (' and `)$', so one must not match beginning or
  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
  # as well as any symbol that contains `d'.
  exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
  # platforms (ab)use it in PIC code, but their linkers get confused if
  # the symbol is explicitly referenced.  Since portable code cannot
  # rely on this symbol name, it's probably fine to never include it in
  # preloaded symbol tables.
  extract_expsyms_cmds=
  
  case $host_os in
  cygwin* | mingw* | pw32* )
    # FIXME: the MSVC++ port hasn't been tested in a loooong time
    # When not using gcc, we currently assume that we are using
    # Microsoft Visual C++.
    if test "$GCC" != yes; then
      with_gnu_ld=no
    fi
    ;;
  
  esac
  
  ld_shlibs=yes
  if test "$with_gnu_ld" = yes; then
    # If archive_cmds runs LD, not CC, wlarc should be empty
    wlarc='${wl}'
  
    # See if GNU ld supports shared libraries.
    case $host_os in
    aix3* | aix4* | aix5*)
      # On AIX, the GNU linker is very broken
      # Note:Check GNU linker on AIX 5-IA64 when/if it becomes available.
      ld_shlibs=no
      cat <<EOF 1>&2
  
  *** Warning: the GNU linker, at least up to release 2.9.1, is reported
  *** to be unable to reliably create shared libraries on AIX.
  *** Therefore, libtool is disabling shared libraries support.  If you
  *** really care for shared libraries, you may want to modify your PATH
  *** so that a non-GNU linker is found, and then restart.
  
  EOF
      ;;
  
    amigaos*)
      archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
      hardcode_libdir_flag_spec='-L$libdir'
      hardcode_minus_L=yes
  
      # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
      # that the semantics of dynamic libraries on AmigaOS, at least up
      # to version 4, is to share data among multiple programs linked
      # with the same dynamic library.  Since this doesn't match the
      # behavior of shared libraries on other platforms, we can use
      # them.
      ld_shlibs=no
      ;;
  
    beos*)
      if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
        allow_undefined_flag=unsupported
        # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
        # support --undefined.  This deserves some investigation.  FIXME
        archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
      else
        ld_shlibs=no
      fi
      ;;
  
    cygwin* | mingw* | pw32*)
      # hardcode_libdir_flag_spec is actually meaningless, as there is
      # no search path for DLLs.
      hardcode_libdir_flag_spec='-L$libdir'
      allow_undefined_flag=unsupported
      always_export_symbols=yes
  
      extract_expsyms_cmds='test -f $output_objdir/impgen.c || \
        sed -e "/^# \/\* impgen\.c starts here \*\//,/^# \/\* impgen.c ends here \*\// { s/^# //;s/^# *$//; p; }" -e d < $''0 > $output_objdir/impgen.c~
        test -f $output_objdir/impgen.exe || (cd $output_objdir && \
        if test "x$HOST_CC" != "x" ; then $HOST_CC -o impgen impgen.c ; \
        else $CC -o impgen impgen.c ; fi)~
        $output_objdir/impgen $dir/$soroot > $output_objdir/$soname-def'
  
      old_archive_from_expsyms_cmds='$DLLTOOL --as=$AS --dllname $soname --def $output_objdir/$soname-def --output-lib $output_objdir/$newlib'
  
      # cygwin and mingw dlls have different entry points and sets of symbols
      # to exclude.
      # FIXME: what about values for MSVC?
      dll_entry=__cygwin_dll_entry@12
      dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12~
      case $host_os in
      mingw*)
        # mingw values
        dll_entry=_DllMainCRTStartup@12
        dll_exclude_symbols=DllMain@12,DllMainCRTStartup@12,DllEntryPoint@12~
        ;;
      esac
  
      # mingw and cygwin differ, and it's simplest to just exclude the union
      # of the two symbol sets.
      dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12,DllMainCRTStartup@12,DllEntryPoint@12
  
      # recent cygwin and mingw systems supply a stub DllMain which the user
      # can override, but on older systems we have to supply one (in ltdll.c)
      if test "x$lt_cv_need_dllmain" = "xyes"; then
        ltdll_obj='$output_objdir/$soname-ltdll.'"$ac_objext "
        ltdll_cmds='test -f $output_objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < [$]0 > $output_objdir/$soname-ltdll.c~
  	test -f $output_objdir/$soname-ltdll.$ac_objext || (cd $output_objdir && $CC -c $soname-ltdll.c)~'
      else
        ltdll_obj=
        ltdll_cmds=
      fi
  
      # Extract the symbol export list from an `--export-all' def file,
      # then regenerate the def file from the symbol export list, so that
      # the compiled dll only exports the symbol export list.
      # Be careful not to strip the DATA tag left be newer dlltools.
      export_symbols_cmds="$ltdll_cmds"'
        $DLLTOOL --export-all --exclude-symbols '$dll_exclude_symbols' --output-def $output_objdir/$soname-def '$ltdll_obj'$libobjs $convenience~
        [sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]*//" -e "s/ *;.*$//"] < $output_objdir/$soname-def > $export_symbols'
  
      # If the export-symbols file already is a .def file (1st line
      # is EXPORTS), use it as is.
      # If DATA tags from a recent dlltool are present, honour them!
      archive_expsym_cmds='if test "x`head -1 $export_symbols`" = xEXPORTS; then
          cp $export_symbols $output_objdir/$soname-def;
        else
          echo EXPORTS > $output_objdir/$soname-def;
          _lt_hint=1;
          cat $export_symbols | while read symbol; do
           set dummy \$symbol;
           case \[$]# in
             2) echo "   \[$]2 @ \$_lt_hint ; " >> $output_objdir/$soname-def;;
             *) echo "     \[$]2 @ \$_lt_hint \[$]3 ; " >> $output_objdir/$soname-def;;
           esac;
           _lt_hint=`expr 1 + \$_lt_hint`;
          done;
        fi~
        '"$ltdll_cmds"'
        $CC -Wl,--base-file,$output_objdir/$soname-base '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~
        $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp~
        $CC -Wl,--base-file,$output_objdir/$soname-base $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~
        $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp --output-lib $output_objdir/$libname.dll.a~
        $CC $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags'
      ;;
  
    netbsd*)
      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
        archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
        wlarc=
      else
        archive_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
        archive_expsym_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
      fi
      ;;
  
    solaris* | sysv5*)
      if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then
        ld_shlibs=no
        cat <<EOF 1>&2
  
  *** Warning: The releases 2.8.* of the GNU linker cannot reliably
  *** create shared libraries on Solaris systems.  Therefore, libtool
  *** is disabling shared libraries support.  We urge you to upgrade GNU
  *** binutils to release 2.9.1 or newer.  Another option is to modify
  *** your PATH or compiler configuration so that the native linker is
  *** used, and then restart.
  
  EOF
      elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
        archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
      else
        ld_shlibs=no
      fi
      ;;
  
    sunos4*)
      archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
      wlarc=
      hardcode_direct=yes
      hardcode_shlibpath_var=no
      ;;
  
    *)
      if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
        archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
      else
        ld_shlibs=no
      fi
      ;;
    esac
  
    if test "$ld_shlibs" = yes; then
      runpath_var=LD_RUN_PATH
      hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
      export_dynamic_flag_spec='${wl}--export-dynamic'
      case $host_os in
      cygwin* | mingw* | pw32*)
        # dlltool doesn't understand --whole-archive et. al.
        whole_archive_flag_spec=
        ;;
      *)
        # ancient GNU ld didn't support --whole-archive et. al.
        if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then
  	whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
        else
  	whole_archive_flag_spec=
        fi
        ;;
      esac
    fi
  else
    # PORTME fill in a description of your system's linker (not GNU ld)
    case $host_os in
    aix3*)
      allow_undefined_flag=unsupported
      always_export_symbols=yes
      archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
      # Note: this linker hardcodes the directories in LIBPATH if there
      # are no directories specified by -L.
      hardcode_minus_L=yes
      if test "$GCC" = yes && test -z "$link_static_flag"; then
        # Neither direct hardcoding nor static linking is supported with a
        # broken collect2.
        hardcode_direct=unsupported
      fi
      ;;
  
    aix4* | aix5*)
      # When large executables or shared objects are built, AIX ld can
      # have problems creating the table of contents.  If linking a library
      # or program results in "error TOC overflow" add -mminimal-toc to
      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
  
      archive_cmds=''
      hardcode_libdir_separator=':'
      if test "$GCC" = yes; then
        collect2name=`${CC} -print-prog-name=collect2`
        if test -f "$collect2name" && \
  	 strings "$collect2name" | grep resolve_lib_name >/dev/null
        then
  	# We have reworked collect2
  	hardcode_direct=yes
        else
          # We have old collect2
          hardcode_direct=unsupported
          # It fails to find uninstalled libraries when the uninstalled
          # path is not listed in the libpath.  Setting hardcode_minus_L
          # to unsupported forces relinking
          hardcode_minus_L=yes
          hardcode_libdir_flag_spec='-L$libdir'
          hardcode_libdir_separator=
        fi
        shared_flag='-shared'
      else
        if test "$host_cpu" = ia64; then
          shared_flag='-G'
        else
          shared_flag='${wl}-bM:SRE'
        fi
        hardcode_direct=yes
      fi
  
      if test "$host_cpu" = ia64; then
        # On IA64, the linker does run time linking by default, so we don't
        # have to do anything special.
        aix_use_runtimelinking=no
        exp_sym_flag='-Bexport'
        no_entry_flag=""
      else
        # Test if we are trying to use run time linking, or normal AIX style linking.
        # If -brtl is somewhere in LDFLAGS, we need to do run time linking.
        aix_use_runtimelinking=no
        for ld_flag in $LDFLAGS; do
          if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl" ); then
            aix_use_runtimelinking=yes
            break
          fi
        done
        exp_sym_flag='-bexport'
        no_entry_flag='-bnoentry'
      fi
      # It seems that -bexpall can do strange things, so it is better to
      # generate a list of symbols to export.
      always_export_symbols=yes
      if test "$aix_use_runtimelinking" = yes; then
        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib'
        allow_undefined_flag=' -Wl,-G'
        archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
      else
        if test "$host_cpu" = ia64; then
          hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
         allow_undefined_flag="-znodefs"
          archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname ${wl}-h$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
        else
          hardcode_libdir_flag_spec='${wl}-bnolibpath ${wl}-blibpath:$libdir:/usr/lib:/lib'
          # Warning - without using the other run time loading flags, -berok will
          #           link without error, but may produce a broken library.
          allow_undefined_flag='${wl}-berok"
          # This is a bit strange, but is similar to how AIX traditionally builds
          # it's shared libraries.
          archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"' ~$AR -crlo $objdir/$libname$release.a $objdir/$soname'
        fi
      fi
      ;;
  
    amigaos*)
      archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
      hardcode_libdir_flag_spec='-L$libdir'
      hardcode_minus_L=yes
      # see comment about different semantics on the GNU ld section
      ld_shlibs=no
      ;;
  
    cygwin* | mingw* | pw32*)
      # When not using gcc, we currently assume that we are using
      # Microsoft Visual C++.
      # hardcode_libdir_flag_spec is actually meaningless, as there is
      # no search path for DLLs.
      hardcode_libdir_flag_spec=' '
      allow_undefined_flag=unsupported
      # Tell ltmain to make .lib files, not .a files.
      libext=lib
      # FIXME: Setting linknames here is a bad hack.
      archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames='
      # The linker will automatically build a .lib file if we build a DLL.
      old_archive_from_new_cmds='true'
      # FIXME: Should let the user specify the lib program.
      old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs'
      fix_srcfile_path='`cygpath -w "$srcfile"`'
      ;;
  
    darwin* | rhapsody*)
      allow_undefined_flag='-undefined suppress'
      # FIXME: Relying on posixy $() will cause problems for
      #        cross-compilation, but unfortunately the echo tests do not
      #        yet detect zsh echo's removal of \ escapes.
      archive_cmds='$CC $(test .$module = .yes && echo -bundle || echo -dynamiclib) $allow_undefined_flag -o $lib $libobjs $deplibs$linkopts -install_name $rpath/$soname $(test -n "$verstring" -a x$verstring != x0.0 && echo $verstring)'
      # We need to add '_' to the symbols in $export_symbols first
      #archive_expsym_cmds="$archive_cmds"' && strip -s $export_symbols'
      hardcode_direct=yes
      hardcode_shlibpath_var=no
      whole_archive_flag_spec='-all_load $convenience'
      ;;
  
    freebsd1*)
      ld_shlibs=no
      ;;
  
    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
    # support.  Future versions do this automatically, but an explicit c++rt0.o
    # does not break anything, and helps significantly (at the cost of a little
    # extra space).
    freebsd2.2*)
      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
      hardcode_libdir_flag_spec='-R$libdir'
      hardcode_direct=yes
      hardcode_shlibpath_var=no
      ;;
  
    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
    freebsd2*)
      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
      hardcode_direct=yes
      hardcode_minus_L=yes
      hardcode_shlibpath_var=no
      ;;
  
    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
    freebsd*)
      archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
      hardcode_libdir_flag_spec='-R$libdir'
      hardcode_direct=yes
      hardcode_shlibpath_var=no
      ;;
  
    hpux9* | hpux10* | hpux11*)
      case $host_os in
      hpux9*) archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ;;
      *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;;
      esac
      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
      hardcode_libdir_separator=:
      hardcode_direct=yes
      hardcode_minus_L=yes # Not in the search PATH, but as the default
  			 # location of the library.
      export_dynamic_flag_spec='${wl}-E'
      ;;
  
    irix5* | irix6*)
      if test "$GCC" = yes; then
        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
      else
        archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
      fi
      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
      hardcode_libdir_separator=:
      link_all_deplibs=yes
      ;;
  
    netbsd*)
      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
        archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
      else
        archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
      fi
      hardcode_libdir_flag_spec='-R$libdir'
      hardcode_direct=yes
      hardcode_shlibpath_var=no
      ;;
  
    newsos6)
      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
      hardcode_direct=yes
      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
      hardcode_libdir_separator=:
      hardcode_shlibpath_var=no
      ;;
  
    openbsd*)
      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
      hardcode_libdir_flag_spec='-R$libdir'
      hardcode_direct=yes
      hardcode_shlibpath_var=no
      ;;
  
    os2*)
      hardcode_libdir_flag_spec='-L$libdir'
      hardcode_minus_L=yes
      allow_undefined_flag=unsupported
      archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
      old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
      ;;
  
    osf3*)
      if test "$GCC" = yes; then
        allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
        archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
      else
        allow_undefined_flag=' -expect_unresolved \*'
        archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
      fi
      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
      hardcode_libdir_separator=:
      ;;
  
    osf4* | osf5*)	# as osf3* with the addition of -msym flag
      if test "$GCC" = yes; then
        allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
        archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
        hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
      else
        allow_undefined_flag=' -expect_unresolved \*'
        archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
        archive_expsym_cmds='for i in `cat $export_symbols`; do printf "-exported_symbol " >> $lib.exp; echo "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
        $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
  
        #Both c and cxx compiler support -rpath directly
        hardcode_libdir_flag_spec='-rpath $libdir'
      fi
      hardcode_libdir_separator=:
      ;;
  
    sco3.2v5*)
      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
      hardcode_shlibpath_var=no
      runpath_var=LD_RUN_PATH
      hardcode_runpath_var=yes
      ;;
  
    solaris*)
      no_undefined_flag=' -z defs'
      # $CC -shared without GNU ld will not create a library from C++
      # object files and a static libstdc++, better avoid it by now
      archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
      archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
  		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
      hardcode_libdir_flag_spec='-R$libdir'
      hardcode_shlibpath_var=no
      case $host_os in
      [solaris2.[0-5] | solaris2.[0-5].*]) ;;
      *) # Supported since Solaris 2.6 (maybe 2.5.1?)
        whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;
      esac
      link_all_deplibs=yes
      ;;
  
    sunos4*)
      if test "x$host_vendor" = xsequent; then
        # Use $CC to link under sequent, because it throws in some extra .o
        # files that make .init and .fini sections work.
        archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
      else
        archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
      fi
      hardcode_libdir_flag_spec='-L$libdir'
      hardcode_direct=yes
      hardcode_minus_L=yes
      hardcode_shlibpath_var=no
      ;;
  
    sysv4)
      if test "x$host_vendor" = xsno; then
        archive_cmds='$LD -G -Bsymbolic -h $soname -o $lib $libobjs $deplibs $linkopts'
        hardcode_direct=yes # is this really true???
      else
        archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
        hardcode_direct=no #Motorola manual says yes, but my tests say they lie
      fi
      runpath_var='LD_RUN_PATH'
      hardcode_shlibpath_var=no
      ;;
  
    sysv4.3*)
      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
      hardcode_shlibpath_var=no
      export_dynamic_flag_spec='-Bexport'
      ;;
  
    sysv5*)
      no_undefined_flag=' -z text'
      # $CC -shared without GNU ld will not create a library from C++
      # object files and a static libstdc++, better avoid it by now
      archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
      archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
  		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
      hardcode_libdir_flag_spec=
      hardcode_shlibpath_var=no
      runpath_var='LD_RUN_PATH'
      ;;
  
    uts4*)
      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
      hardcode_libdir_flag_spec='-L$libdir'
      hardcode_shlibpath_var=no
      ;;
  
    dgux*)
      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
      hardcode_libdir_flag_spec='-L$libdir'
      hardcode_shlibpath_var=no
      ;;
  
    sysv4*MP*)
      if test -d /usr/nec; then
        archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
        hardcode_shlibpath_var=no
        runpath_var=LD_RUN_PATH
        hardcode_runpath_var=yes
        ld_shlibs=yes
      fi
      ;;
  
    sysv4.2uw2*)
      archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
      hardcode_direct=yes
      hardcode_minus_L=no
      hardcode_shlibpath_var=no
      hardcode_runpath_var=yes
      runpath_var=LD_RUN_PATH
      ;;
  
    sysv5uw7* | unixware7*)
      no_undefined_flag='${wl}-z ${wl}text'
      if test "$GCC" = yes; then
        archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
      else
        archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
      fi
      runpath_var='LD_RUN_PATH'
      hardcode_shlibpath_var=no
      ;;
  
    *)
      ld_shlibs=no
      ;;
    esac
  fi
  AC_MSG_RESULT([$ld_shlibs])
  test "$ld_shlibs" = no && can_build_shared=no
  ##
  ## END FIXME
  
  ## FIXME: this should be a separate macro
  ##
  # Check hardcoding attributes.
  AC_MSG_CHECKING([how to hardcode library paths into programs])
  hardcode_action=
  if test -n "$hardcode_libdir_flag_spec" || \
     test -n "$runpath_var"; then
  
    # We can hardcode non-existant directories.
    if test "$hardcode_direct" != no &&
       # If the only mechanism to avoid hardcoding is shlibpath_var, we
       # have to relink, otherwise we might link with an installed library
       # when we should be linking with a yet-to-be-installed one
       ## test "$hardcode_shlibpath_var" != no &&
       test "$hardcode_minus_L" != no; then
      # Linking always hardcodes the temporary library directory.
      hardcode_action=relink
    else
      # We can link without hardcoding, and we can hardcode nonexisting dirs.
      hardcode_action=immediate
    fi
  else
    # We cannot hardcode anything, or else we can only hardcode existing
    # directories.
    hardcode_action=unsupported
  fi
  AC_MSG_RESULT([$hardcode_action])
  ##
  ## END FIXME
  
  ## FIXME: this should be a separate macro
  ##
  striplib=
  old_striplib=
  AC_MSG_CHECKING([whether stripping libraries is possible])
  if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
    test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
    test -z "$striplib" && striplib="$STRIP --strip-unneeded"
    AC_MSG_RESULT([yes])
  else
    AC_MSG_RESULT([no])
  fi
  ##
  ## END FIXME
  
  reload_cmds='$LD$reload_flag -o $output$reload_objs'
  test -z "$deplibs_check_method" && deplibs_check_method=unknown
  
  ## FIXME: this should be a separate macro
  ##
  # PORTME Fill in your ld.so characteristics
  AC_MSG_CHECKING([dynamic linker characteristics])
  library_names_spec=
  libname_spec='lib$name'
  soname_spec=
  postinstall_cmds=
  postuninstall_cmds=
  finish_cmds=
  finish_eval=
  shlibpath_var=
  shlibpath_overrides_runpath=unknown
  version_type=none
  dynamic_linker="$host_os ld.so"
  sys_lib_dlsearch_path_spec="/lib /usr/lib"
  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
  
  case $host_os in
  aix3*)
    version_type=linux
    library_names_spec='${libname}${release}.so$versuffix $libname.a'
    shlibpath_var=LIBPATH
  
    # AIX has no versioning support, so we append a major version to the name.
    soname_spec='${libname}${release}.so$major'
    ;;
  
  aix4* | aix5*)
    version_type=linux
    if test "$host_cpu" = ia64; then
      # AIX 5 supports IA64
      library_names_spec='${libname}${release}.so$major ${libname}${release}.so$versuffix $libname.so'
      shlibpath_var=LD_LIBRARY_PATH
    else
      # With GCC up to 2.95.x, collect2 would create an import file
      # for dependence libraries.  The import file would start with
      # the line `#! .'.  This would cause the generated library to
      # depend on `.', always an invalid library.  This was fixed in
      # development snapshots of GCC prior to 3.0.
      case $host_os in
        [ aix4 | aix4.[01] | aix4.[01].*)]
        if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
             echo ' yes '
             echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
          :
        else
          can_build_shared=no
        fi
        ;;
      esac
      # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
      # soname into executable. Probably we can add versioning support to
      # collect2, so additional links can be useful in future.
      if test "$aix_use_runtimelinking" = yes; then
        # If using run time linking (on AIX 4.2 or later) use lib<name>.so instead of
        # lib<name>.a to let people know that these are not typical AIX shared libraries.
        library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
      else
        # We preserve .a as extension for shared libraries through AIX4.2
        # and later when we are not doing run time linking.
        library_names_spec='${libname}${release}.a $libname.a'
        soname_spec='${libname}${release}.so$major'
      fi
      shlibpath_var=LIBPATH
      deplibs_check_method=pass_all
    fi
    ;;
  
  amigaos*)
    library_names_spec='$libname.ixlibrary $libname.a'
    # Create ${libname}_ixlibrary.a entries in /sys/libs.
    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | [$Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\'']`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
    ;;
  
  beos*)
    library_names_spec='${libname}.so'
    dynamic_linker="$host_os ld.so"
    shlibpath_var=LIBRARY_PATH
    ;;
  
  bsdi4*)
    version_type=linux
    need_version=no
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
    soname_spec='${libname}${release}.so$major'
    finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
    shlibpath_var=LD_LIBRARY_PATH
    sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
    sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
    export_dynamic_flag_spec=-rdynamic
    # the default ld.so.conf also contains /usr/contrib/lib and
    # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
    # libtool to hard-code these into programs
    ;;
  
  cygwin* | mingw* | pw32*)
    version_type=windows
    need_version=no
    need_lib_prefix=no
    case $GCC,$host_os in
    yes,cygwin*)
      library_names_spec='$libname.dll.a'
      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | [sed -e 's/[.]/-/g']`${versuffix}.dll'
      postinstall_cmds='dlpath=`bash 2>&1 -c '\''. $dir/${file}i;echo \$dlname'\''`~
        dldir=$destdir/`dirname \$dlpath`~
        test -d \$dldir || mkdir -p \$dldir~
        $install_prog .libs/$dlname \$dldir/$dlname'
      postuninstall_cmds='dldll=`bash 2>&1 -c '\''. $file; echo \$dlname'\''`~
        dlpath=$dir/\$dldll~
         $rm \$dlpath'
      ;;
    yes,mingw*)
      library_names_spec='${libname}`echo ${release} | [sed -e 's/[.]/-/g']`${versuffix}.dll'
      sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | sed -e "s/^libraries://" -e "s/;/ /g"`
      ;;
    yes,pw32*)
      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll'
      ;;
    *)
      library_names_spec='${libname}`echo ${release} | [sed -e 's/[.]/-/g']`${versuffix}.dll $libname.lib'
      ;;
    esac
    dynamic_linker='Win32 ld.exe'
    # FIXME: first we should search . and the directory the executable is in
    shlibpath_var=PATH
    ;;
  
  darwin* | rhapsody*)
    dynamic_linker="$host_os dyld"
    version_type=darwin
    need_lib_prefix=no
    need_version=no
    # FIXME: Relying on posixy $() will cause problems for
    #        cross-compilation, but unfortunately the echo tests do not
    #        yet detect zsh echo's removal of \ escapes.
    library_names_spec='${libname}${release}${versuffix}.$(test .$module = .yes && echo so || echo dylib) ${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib) ${libname}.$(test .$module = .yes && echo so || echo dylib)'
    soname_spec='${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib)'
    shlibpath_overrides_runpath=yes
    shlibpath_var=DYLD_LIBRARY_PATH
    ;;
  
  freebsd1*)
    dynamic_linker=no
    ;;
  
  freebsd*)
    objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
    version_type=freebsd-$objformat
    case $version_type in
      freebsd-elf*)
        library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
        need_version=no
        need_lib_prefix=no
        ;;
      freebsd-*)
        library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix'
        need_version=yes
        ;;
    esac
    shlibpath_var=LD_LIBRARY_PATH
    case $host_os in
    freebsd2*)
      shlibpath_overrides_runpath=yes
      ;;
    *)
      shlibpath_overrides_runpath=no
      hardcode_into_libs=yes
      ;;
    esac
    ;;
  
  gnu*)
    version_type=linux
    need_lib_prefix=no
    need_version=no
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so'
    soname_spec='${libname}${release}.so$major'
    shlibpath_var=LD_LIBRARY_PATH
    hardcode_into_libs=yes
    ;;
  
  hpux9* | hpux10* | hpux11*)
    # Give a soname corresponding to the major version so that dld.sl refuses to
    # link against other versions.
    dynamic_linker="$host_os dld.sl"
    version_type=sunos
    need_lib_prefix=no
    need_version=no
    shlibpath_var=SHLIB_PATH
    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
    library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl'
    soname_spec='${libname}${release}.sl$major'
    # HP-UX runs *really* slowly unless shared libraries are mode 555.
    postinstall_cmds='chmod 555 $lib'
    ;;
  
  irix5* | irix6*)
    version_type=irix
    need_lib_prefix=no
    need_version=no
    soname_spec='${libname}${release}.so$major'
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so $libname.so'
    case $host_os in
    irix5*)
      libsuff= shlibsuff=
      ;;
    *)
      case $LD in # libtool.m4 will add one of these switches to LD
      *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;;
      *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;;
      *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;;
      *) libsuff= shlibsuff= libmagic=never-match;;
      esac
      ;;
    esac
    shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
    shlibpath_overrides_runpath=no
    sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
    sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
    ;;
  
  # No shared lib support for Linux oldld, aout, or coff.
  linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*)
    dynamic_linker=no
    ;;
  
  # This must be Linux ELF.
  linux-gnu*)
    version_type=linux
    need_lib_prefix=no
    need_version=no
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
    soname_spec='${libname}${release}.so$major'
    finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
    shlibpath_var=LD_LIBRARY_PATH
    shlibpath_overrides_runpath=no
    # This implies no fast_install, which is unacceptable.
    # Some rework will be needed to allow for fast_install
    # before this can be enabled.
    hardcode_into_libs=yes
  
    # We used to test for /lib/ld.so.1 and disable shared libraries on
    # powerpc, because MkLinux only supported shared libraries with the
    # GNU dynamic linker.  Since this was broken with cross compilers,
    # most powerpc-linux boxes support dynamic linking these days and
    # people can always --disable-shared, the test was removed, and we
    # assume the GNU/Linux dynamic linker is in use.
    dynamic_linker='GNU/Linux ld.so'
    ;;
  
  netbsd*)
    version_type=sunos
    need_lib_prefix=no
    need_version=no
    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
      library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
      finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
      dynamic_linker='NetBSD (a.out) ld.so'
    else
      library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so'
      soname_spec='${libname}${release}.so$major'
      dynamic_linker='NetBSD ld.elf_so'
    fi
    shlibpath_var=LD_LIBRARY_PATH
    shlibpath_overrides_runpath=yes
    hardcode_into_libs=yes
    ;;
  
  newsos6)
    version_type=linux
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
    shlibpath_var=LD_LIBRARY_PATH
    shlibpath_overrides_runpath=yes
    ;;
  
  openbsd*)
    version_type=sunos
    if test "$with_gnu_ld" = yes; then
      need_lib_prefix=no
      need_version=no
    fi
    library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
    shlibpath_var=LD_LIBRARY_PATH
    ;;
  
  os2*)
    libname_spec='$name'
    need_lib_prefix=no
    library_names_spec='$libname.dll $libname.a'
    dynamic_linker='OS/2 ld.exe'
    shlibpath_var=LIBPATH
    ;;
  
  osf3* | osf4* | osf5*)
    version_type=osf
    need_version=no
    soname_spec='${libname}${release}.so'
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
    shlibpath_var=LD_LIBRARY_PATH
    sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
    sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
    ;;
  
  sco3.2v5*)
    version_type=osf
    soname_spec='${libname}${release}.so$major'
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
    shlibpath_var=LD_LIBRARY_PATH
    ;;
  
  solaris*)
    version_type=linux
    need_lib_prefix=no
    need_version=no
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
    soname_spec='${libname}${release}.so$major'
    shlibpath_var=LD_LIBRARY_PATH
    shlibpath_overrides_runpath=yes
    hardcode_into_libs=yes
    # ldd complains unless libraries are executable
    postinstall_cmds='chmod +x $lib'
    ;;
  
  sunos4*)
    version_type=sunos
    library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
    finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
    shlibpath_var=LD_LIBRARY_PATH
    shlibpath_overrides_runpath=yes
    if test "$with_gnu_ld" = yes; then
      need_lib_prefix=no
    fi
    need_version=yes
    ;;
  
  sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
    version_type=linux
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
    soname_spec='${libname}${release}.so$major'
    shlibpath_var=LD_LIBRARY_PATH
    case $host_vendor in
      sni)
        shlibpath_overrides_runpath=no
        ;;
      motorola)
        need_lib_prefix=no
        need_version=no
        shlibpath_overrides_runpath=no
        sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
        ;;
    esac
    ;;
  
  uts4*)
    version_type=linux
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
    soname_spec='${libname}${release}.so$major'
    shlibpath_var=LD_LIBRARY_PATH
    ;;
  
  dgux*)
    version_type=linux
    need_lib_prefix=no
    need_version=no
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
    soname_spec='${libname}${release}.so$major'
    shlibpath_var=LD_LIBRARY_PATH
    ;;
  
  sysv4*MP*)
    if test -d /usr/nec ;then
      version_type=linux
      library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so'
      soname_spec='$libname.so.$major'
      shlibpath_var=LD_LIBRARY_PATH
    fi
    ;;
  
  *)
    dynamic_linker=no
    ;;
  esac
  AC_MSG_RESULT([$dynamic_linker])
  test "$dynamic_linker" = no && can_build_shared=no
  ##
  ## END FIXME
  
  ## FIXME: this should be a separate macro
  ##
  # Report the final consequences.
  AC_MSG_CHECKING([if libtool supports shared libraries])
  AC_MSG_RESULT([$can_build_shared])
  ##
  ## END FIXME
  
  if test "$hardcode_action" = relink; then
    # Fast installation is not supported
    enable_fast_install=no
  elif test "$shlibpath_overrides_runpath" = yes ||
       test "$enable_shared" = no; then
    # Fast installation is not necessary
    enable_fast_install=needless
  fi
  
  variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
  if test "$GCC" = yes; then
    variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
  fi
  
  AC_LIBTOOL_DLOPEN_SELF
  
  ## FIXME: this should be a separate macro
  ##
  if test "$enable_shared" = yes && test "$GCC" = yes; then
    case $archive_cmds in
    *'~'*)
      # FIXME: we may have to deal with multi-command sequences.
      ;;
    '$CC '*)
      # Test whether the compiler implicitly links with -lc since on some
      # systems, -lgcc has to come before -lc. If gcc already passes -lc
      # to ld, don't add -lc before -lgcc.
      AC_MSG_CHECKING([whether -lc should be explicitly linked in])
      AC_CACHE_VAL([lt_cv_archive_cmds_need_lc],
      [$rm conftest*
      echo 'static int dummy;' > conftest.$ac_ext
  
      if AC_TRY_EVAL(ac_compile); then
        soname=conftest
        lib=conftest
        libobjs=conftest.$ac_objext
        deplibs=
        wl=$lt_cv_prog_cc_wl
        compiler_flags=-v
        linker_flags=-v
        verstring=
        output_objdir=.
        libname=conftest
        save_allow_undefined_flag=$allow_undefined_flag
        allow_undefined_flag=
        if AC_TRY_EVAL(archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1)
        then
  	lt_cv_archive_cmds_need_lc=no
        else
  	lt_cv_archive_cmds_need_lc=yes
        fi
        allow_undefined_flag=$save_allow_undefined_flag
      else
        cat conftest.err 1>&5
      fi])
      AC_MSG_RESULT([$lt_cv_archive_cmds_need_lc])
      ;;
    esac
  fi
  need_lc=${lt_cv_archive_cmds_need_lc-yes}
  ##
  ## END FIXME
  
  ## FIXME: this should be a separate macro
  ##
  # The second clause should only fire when bootstrapping the
  # libtool distribution, otherwise you forgot to ship ltmain.sh
  # with your package, and you will get complaints that there are
  # no rules to generate ltmain.sh.
  if test -f "$ltmain"; then
    :
  else
    # If there is no Makefile yet, we rely on a make rule to execute
    # `config.status --recheck' to rerun these tests and create the
    # libtool script then.
    test -f Makefile && make "$ltmain"
  fi
  
  if test -f "$ltmain"; then
    trap "$rm \"${ofile}T\"; exit 1" 1 2 15
    $rm -f "${ofile}T"
  
    echo creating $ofile
  
    # Now quote all the things that may contain metacharacters while being
    # careful not to overquote the AC_SUBSTed values.  We take copies of the
    # variables and quote the copies for generation of the libtool script.
    for var in echo old_CC old_CFLAGS \
      AR AR_FLAGS CC LD LN_S NM SHELL \
      reload_flag reload_cmds wl \
      pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \
      thread_safe_flag_spec whole_archive_flag_spec libname_spec \
      library_names_spec soname_spec \
      RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \
      old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds \
      postuninstall_cmds extract_expsyms_cmds old_archive_from_expsyms_cmds \
      old_striplib striplib file_magic_cmd export_symbols_cmds \
      deplibs_check_method allow_undefined_flag no_undefined_flag \
      finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \
      hardcode_libdir_flag_spec hardcode_libdir_separator  \
      sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
      compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do
  
      case $var in
      reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \
      old_postinstall_cmds | old_postuninstall_cmds | \
      export_symbols_cmds | archive_cmds | archive_expsym_cmds | \
      extract_expsyms_cmds | old_archive_from_expsyms_cmds | \
      postinstall_cmds | postuninstall_cmds | \
      finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
        # Double-quote double-evaled strings.
        eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
        ;;
      *)
        eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
        ;;
      esac
    done
  
    cat <<__EOF__ > "${ofile}T"
  #! $SHELL
  
  # `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
  # Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
  # NOTE: Changes made to this file will be lost: look at ltmain.sh.
  #
  # Copyright (C) 1996-2000 Free Software Foundation, Inc.
  # Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
  #
  # This program is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 2 of the License, or
  # (at your option) any later version.
  #
  # This program is distributed in the hope that it will be useful, but
  # WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  # General Public License for more details.
  #
  # You should have received a copy of the GNU General Public License
  # along with this program; if not, write to the Free Software
  # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  #
  # As a special exception to the GNU General Public License, if you
  # distribute this file as part of a program that contains a
  # configuration script generated by Autoconf, you may include it under
  # the same distribution terms that you use for the rest of that program.
  
  # Sed that helps us avoid accidentally triggering echo(1) options like -n.
  Xsed="sed -e s/^X//"
  
  # The HP-UX ksh and POSIX shell print the target directory to stdout
  # if CDPATH is set.
  if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
  
  # ### BEGIN LIBTOOL CONFIG
  
  # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
  
  # Shell to use when invoking shell scripts.
  SHELL=$lt_SHELL
  
  # Whether or not to build shared libraries.
  build_libtool_libs=$enable_shared
  
  # Whether or not to add -lc for building shared libraries.
  build_libtool_need_lc=$need_lc
  
  # Whether or not to build static libraries.
  build_old_libs=$enable_static
  
  # Whether or not to optimize for fast installation.
  fast_install=$enable_fast_install
  
  # The host system.
  host_alias=$host_alias
  host=$host
  
  # An echo program that does not interpret backslashes.
  echo=$lt_echo
  
  # The archiver.
  AR=$lt_AR
  AR_FLAGS=$lt_AR_FLAGS
  
  # The default C compiler.
  CC=$lt_CC
  
  # Is the compiler the GNU C compiler?
  with_gcc=$GCC
  
  # The linker used to build libraries.
  LD=$lt_LD
  
  # Whether we need hard or soft links.
  LN_S=$lt_LN_S
  
  # A BSD-compatible nm program.
  NM=$lt_NM
  
  # A symbol stripping program
  STRIP=$STRIP
  
  # Used to examine libraries when file_magic_cmd begins "file"
  MAGIC_CMD=$MAGIC_CMD
  
  # Used on cygwin: DLL creation program.
  DLLTOOL="$DLLTOOL"
  
  # Used on cygwin: object dumper.
  OBJDUMP="$OBJDUMP"
  
  # Used on cygwin: assembler.
  AS="$AS"
  
  # The name of the directory that contains temporary libtool files.
  objdir=$objdir
  
  # How to create reloadable object files.
  reload_flag=$lt_reload_flag
  reload_cmds=$lt_reload_cmds
  
  # How to pass a linker flag through the compiler.
  wl=$lt_wl
  
  # Object file suffix (normally "o").
  objext="$ac_objext"
  
  # Old archive suffix (normally "a").
  libext="$libext"
  
  # Executable file suffix (normally "").
  exeext="$exeext"
  
  # Additional compiler flags for building library objects.
  pic_flag=$lt_pic_flag
  pic_mode=$pic_mode
  
  # Does compiler simultaneously support -c and -o options?
  compiler_c_o=$lt_compiler_c_o
  
  # Can we write directly to a .lo ?
  compiler_o_lo=$lt_compiler_o_lo
  
  # Must we lock files when doing compilation ?
  need_locks=$lt_need_locks
  
  # Do we need the lib prefix for modules?
  need_lib_prefix=$need_lib_prefix
  
  # Do we need a version for libraries?
  need_version=$need_version
  
  # Whether dlopen is supported.
  dlopen_support=$enable_dlopen
  
  # Whether dlopen of programs is supported.
  dlopen_self=$enable_dlopen_self
  
  # Whether dlopen of statically linked programs is supported.
  dlopen_self_static=$enable_dlopen_self_static
  
  # Compiler flag to prevent dynamic linking.
  link_static_flag=$lt_link_static_flag
  
  # Compiler flag to turn off builtin functions.
  no_builtin_flag=$lt_no_builtin_flag
  
  # Compiler flag to allow reflexive dlopens.
  export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
  
  # Compiler flag to generate shared objects directly from archives.
  whole_archive_flag_spec=$lt_whole_archive_flag_spec
  
  # Compiler flag to generate thread-safe objects.
  thread_safe_flag_spec=$lt_thread_safe_flag_spec
  
  # Library versioning type.
  version_type=$version_type
  
  # Format of library name prefix.
  libname_spec=$lt_libname_spec
  
  # List of archive names.  First name is the real one, the rest are links.
  # The last name is the one that the linker finds with -lNAME.
  library_names_spec=$lt_library_names_spec
  
  # The coded name of the library, if different from the real name.
  soname_spec=$lt_soname_spec
  
  # Commands used to build and install an old-style archive.
  RANLIB=$lt_RANLIB
  old_archive_cmds=$lt_old_archive_cmds
  old_postinstall_cmds=$lt_old_postinstall_cmds
  old_postuninstall_cmds=$lt_old_postuninstall_cmds
  
  # Create an old-style archive from a shared archive.
  old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
  
  # Create a temporary old-style archive to link instead of a shared archive.
  old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
  
  # Commands used to build and install a shared archive.
  archive_cmds=$lt_archive_cmds
  archive_expsym_cmds=$lt_archive_expsym_cmds
  postinstall_cmds=$lt_postinstall_cmds
  postuninstall_cmds=$lt_postuninstall_cmds
  
  # Commands to strip libraries.
  old_striplib=$lt_old_striplib
  striplib=$lt_striplib
  
  # Method to check whether dependent libraries are shared objects.
  deplibs_check_method=$lt_deplibs_check_method
  
  # Command to use when deplibs_check_method == file_magic.
  file_magic_cmd=$lt_file_magic_cmd
  
  # Flag that allows shared libraries with undefined symbols to be built.
  allow_undefined_flag=$lt_allow_undefined_flag
  
  # Flag that forces no undefined symbols.
  no_undefined_flag=$lt_no_undefined_flag
  
  # Commands used to finish a libtool library installation in a directory.
  finish_cmds=$lt_finish_cmds
  
  # Same as above, but a single script fragment to be evaled but not shown.
  finish_eval=$lt_finish_eval
  
  # Take the output of nm and produce a listing of raw symbols and C names.
  global_symbol_pipe=$lt_global_symbol_pipe
  
  # Transform the output of nm in a proper C declaration
  global_symbol_to_cdecl=$lt_global_symbol_to_cdecl
  
  # This is the shared library runtime path variable.
  runpath_var=$runpath_var
  
  # This is the shared library path variable.
  shlibpath_var=$shlibpath_var
  
  # Is shlibpath searched before the hard-coded library search path?
  shlibpath_overrides_runpath=$shlibpath_overrides_runpath
  
  # How to hardcode a shared library path into an executable.
  hardcode_action=$hardcode_action
  
  # Whether we should hardcode library paths into libraries.
  hardcode_into_libs=$hardcode_into_libs
  
  # Flag to hardcode \$libdir into a binary during linking.
  # This must work even if \$libdir does not exist.
  hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
  
  # Whether we need a single -rpath flag with a separated argument.
  hardcode_libdir_separator=$lt_hardcode_libdir_separator
  
  # Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
  # resulting binary.
  hardcode_direct=$hardcode_direct
  
  # Set to yes if using the -LDIR flag during linking hardcodes DIR into the
  # resulting binary.
  hardcode_minus_L=$hardcode_minus_L
  
  # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
  # the resulting binary.
  hardcode_shlibpath_var=$hardcode_shlibpath_var
  
  # Variables whose values should be saved in libtool wrapper scripts and
  # restored at relink time.
  variables_saved_for_relink="$variables_saved_for_relink"
  
  # Whether libtool must link a program against all its dependency libraries.
  link_all_deplibs=$link_all_deplibs
  
  # Compile-time system search path for libraries
  sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
  
  # Run-time system search path for libraries
  sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
  
  # Fix the shell variable \$srcfile for the compiler.
  fix_srcfile_path="$fix_srcfile_path"
  
  # Set to yes if exported symbols are required.
  always_export_symbols=$always_export_symbols
  
  # The commands to list exported symbols.
  export_symbols_cmds=$lt_export_symbols_cmds
  
  # The commands to extract the exported symbol list from a shared archive.
  extract_expsyms_cmds=$lt_extract_expsyms_cmds
  
  # Symbols that should not be listed in the preloaded symbols.
  exclude_expsyms=$lt_exclude_expsyms
  
  # Symbols that must always be exported.
  include_expsyms=$lt_include_expsyms
  
  # ### END LIBTOOL CONFIG
  
  __EOF__
  
    case $host_os in
    aix3*)
      cat <<\EOF >> "${ofile}T"
  
  # AIX sometimes has problems with the GCC collect2 program.  For some
  # reason, if we set the COLLECT_NAMES environment variable, the problems
  # vanish in a puff of smoke.
  if test "X${COLLECT_NAMES+set}" != Xset; then
    COLLECT_NAMES=
    export COLLECT_NAMES
  fi
  EOF
      ;;
    esac
  
    case $host_os in
    cygwin* | mingw* | pw32* | os2*)
      cat <<'EOF' >> "${ofile}T"
        # This is a source program that is used to create dlls on Windows
        # Don't remove nor modify the starting and closing comments
  # /* ltdll.c starts here */
  # #define WIN32_LEAN_AND_MEAN
  # #include <windows.h>
  # #undef WIN32_LEAN_AND_MEAN
  # #include <stdio.h>
  #
  # #ifndef __CYGWIN__
  # #  ifdef __CYGWIN32__
  # #    define __CYGWIN__ __CYGWIN32__
  # #  endif
  # #endif
  #
  # #ifdef __cplusplus
  # extern "C" {
  # #endif
  # BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
  # #ifdef __cplusplus
  # }
  # #endif
  #
  # #ifdef __CYGWIN__
  # #include <cygwin/cygwin_dll.h>
  # DECLARE_CYGWIN_DLL( DllMain );
  # #endif
  # HINSTANCE __hDllInstance_base;
  #
  # BOOL APIENTRY
  # DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
  # {
  #   __hDllInstance_base = hInst;
  #   return TRUE;
  # }
  # /* ltdll.c ends here */
          # This is a source program that is used to create import libraries
          # on Windows for dlls which lack them. Don't remove nor modify the
          # starting and closing comments
  # /* impgen.c starts here */
  # /*   Copyright (C) 1999-2000 Free Software Foundation, Inc.
  #
  #  This file is part of GNU libtool.
  #
  #  This program is free software; you can redistribute it and/or modify
  #  it under the terms of the GNU General Public License as published by
  #  the Free Software Foundation; either version 2 of the License, or
  #  (at your option) any later version.
  #
  #  This program is distributed in the hope that it will be useful,
  #  but WITHOUT ANY WARRANTY; without even the implied warranty of
  #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  #  GNU General Public License for more details.
  #
  #  You should have received a copy of the GNU General Public License
  #  along with this program; if not, write to the Free Software
  #  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  #  */
  #
  # #include <stdio.h>		/* for printf() */
  # #include <unistd.h>		/* for open(), lseek(), read() */
  # #include <fcntl.h>		/* for O_RDONLY, O_BINARY */
  # #include <string.h>		/* for strdup() */
  #
  # /* O_BINARY isn't required (or even defined sometimes) under Unix */
  # #ifndef O_BINARY
  # #define O_BINARY 0
  # #endif
  #
  # static unsigned int
  # pe_get16 (fd, offset)
  #      int fd;
  #      int offset;
  # {
  #   unsigned char b[2];
  #   lseek (fd, offset, SEEK_SET);
  #   read (fd, b, 2);
  #   return b[0] + (b[1]<<8);
  # }
  #
  # static unsigned int
  # pe_get32 (fd, offset)
  #     int fd;
  #     int offset;
  # {
  #   unsigned char b[4];
  #   lseek (fd, offset, SEEK_SET);
  #   read (fd, b, 4);
  #   return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
  # }
  #
  # static unsigned int
  # pe_as32 (ptr)
  #      void *ptr;
  # {
  #   unsigned char *b = ptr;
  #   return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
  # }
  #
  # int
  # main (argc, argv)
  #     int argc;
  #     char *argv[];
  # {
  #     int dll;
  #     unsigned long pe_header_offset, opthdr_ofs, num_entries, i;
  #     unsigned long export_rva, export_size, nsections, secptr, expptr;
  #     unsigned long name_rvas, nexp;
  #     unsigned char *expdata, *erva;
  #     char *filename, *dll_name;
  #
  #     filename = argv[1];
  #
  #     dll = open(filename, O_RDONLY|O_BINARY);
  #     if (dll < 1)
  # 	return 1;
  #
  #     dll_name = filename;
  #
  #     for (i=0; filename[i]; i++)
  # 	if (filename[i] == '/' || filename[i] == '\\'  || filename[i] == ':')
  # 	    dll_name = filename + i +1;
  #
  #     pe_header_offset = pe_get32 (dll, 0x3c);
  #     opthdr_ofs = pe_header_offset + 4 + 20;
  #     num_entries = pe_get32 (dll, opthdr_ofs + 92);
  #
  #     if (num_entries < 1) /* no exports */
  # 	return 1;
  #
  #     export_rva = pe_get32 (dll, opthdr_ofs + 96);
  #     export_size = pe_get32 (dll, opthdr_ofs + 100);
  #     nsections = pe_get16 (dll, pe_header_offset + 4 +2);
  #     secptr = (pe_header_offset + 4 + 20 +
  # 	      pe_get16 (dll, pe_header_offset + 4 + 16));
  #
  #     expptr = 0;
  #     for (i = 0; i < nsections; i++)
  #     {
  # 	char sname[8];
  # 	unsigned long secptr1 = secptr + 40 * i;
  # 	unsigned long vaddr = pe_get32 (dll, secptr1 + 12);
  # 	unsigned long vsize = pe_get32 (dll, secptr1 + 16);
  # 	unsigned long fptr = pe_get32 (dll, secptr1 + 20);
  # 	lseek(dll, secptr1, SEEK_SET);
  # 	read(dll, sname, 8);
  # 	if (vaddr <= export_rva && vaddr+vsize > export_rva)
  # 	{
  # 	    expptr = fptr + (export_rva - vaddr);
  # 	    if (export_rva + export_size > vaddr + vsize)
  # 		export_size = vsize - (export_rva - vaddr);
  # 	    break;
  # 	}
  #     }
  #
  #     expdata = (unsigned char*)malloc(export_size);
  #     lseek (dll, expptr, SEEK_SET);
  #     read (dll, expdata, export_size);
  #     erva = expdata - export_rva;
  #
  #     nexp = pe_as32 (expdata+24);
  #     name_rvas = pe_as32 (expdata+32);
  #
  #     printf ("EXPORTS\n");
  #     for (i = 0; i<nexp; i++)
  #     {
  # 	unsigned long name_rva = pe_as32 (erva+name_rvas+i*4);
  # 	printf ("\t%s @ %ld ;\n", erva+name_rva, 1+ i);
  #     }
  #
  #     return 0;
  # }
  # /* impgen.c ends here */
  
  EOF
      ;;
    esac
  
    # We use sed instead of cat because bash on DJGPP gets confused if
    # if finds mixed CR/LF and LF-only lines.  Since sed operates in
    # text mode, it properly converts lines to CR/LF.  This bash problem
    # is reportedly fixed, but why not run on old versions too?
    sed '$q' "$ltmain" >> "${ofile}T" || (rm -f "${ofile}T"; exit 1)
  
    mv -f "${ofile}T" "$ofile" || \
      (rm -f "$ofile" && cp "${ofile}T" "$ofile" && rm -f "${ofile}T")
    chmod +x "$ofile"
  fi
  ##
  ## END FIXME
  
  ])# _LT_AC_LTCONFIG_HACK
  
  # AC_LIBTOOL_DLOPEN - enable checks for dlopen support
  AC_DEFUN([AC_LIBTOOL_DLOPEN], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])])
  
  # AC_LIBTOOL_WIN32_DLL - declare package support for building win32 dll's
  AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_BEFORE([$0], [AC_LIBTOOL_SETUP])])
  
  # AC_ENABLE_SHARED - implement the --enable-shared flag
  # Usage: AC_ENABLE_SHARED[(DEFAULT)]
  #   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
  #   `yes'.
  AC_DEFUN([AC_ENABLE_SHARED],
  [define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
  AC_ARG_ENABLE(shared,
  changequote(<<, >>)dnl
  <<  --enable-shared[=PKGS]  build shared libraries [default=>>AC_ENABLE_SHARED_DEFAULT],
  changequote([, ])dnl
  [p=${PACKAGE-default}
  case $enableval in
  yes) enable_shared=yes ;;
  no) enable_shared=no ;;
  *)
    enable_shared=no
    # Look at the argument we got.  We use all the common list separators.
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
    for pkg in $enableval; do
      if test "X$pkg" = "X$p"; then
        enable_shared=yes
      fi
    done
    IFS="$ac_save_ifs"
    ;;
  esac],
  enable_shared=AC_ENABLE_SHARED_DEFAULT)dnl
  ])
  
  # AC_DISABLE_SHARED - set the default shared flag to --disable-shared
  AC_DEFUN([AC_DISABLE_SHARED],
  [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
  AC_ENABLE_SHARED(no)])
  
  # AC_ENABLE_STATIC - implement the --enable-static flag
  # Usage: AC_ENABLE_STATIC[(DEFAULT)]
  #   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
  #   `yes'.
  AC_DEFUN([AC_ENABLE_STATIC],
  [define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
  AC_ARG_ENABLE(static,
  changequote(<<, >>)dnl
  <<  --enable-static[=PKGS]  build static libraries [default=>>AC_ENABLE_STATIC_DEFAULT],
  changequote([, ])dnl
  [p=${PACKAGE-default}
  case $enableval in
  yes) enable_static=yes ;;
  no) enable_static=no ;;
  *)
    enable_static=no
    # Look at the argument we got.  We use all the common list separators.
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
    for pkg in $enableval; do
      if test "X$pkg" = "X$p"; then
        enable_static=yes
      fi
    done
    IFS="$ac_save_ifs"
    ;;
  esac],
  enable_static=AC_ENABLE_STATIC_DEFAULT)dnl
  ])
  
  # AC_DISABLE_STATIC - set the default static flag to --disable-static
  AC_DEFUN([AC_DISABLE_STATIC],
  [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
  AC_ENABLE_STATIC(no)])
  
  
  # AC_ENABLE_FAST_INSTALL - implement the --enable-fast-install flag
  # Usage: AC_ENABLE_FAST_INSTALL[(DEFAULT)]
  #   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
  #   `yes'.
  AC_DEFUN([AC_ENABLE_FAST_INSTALL],
  [define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
  AC_ARG_ENABLE(fast-install,
  changequote(<<, >>)dnl
  <<  --enable-fast-install[=PKGS]  optimize for fast installation [default=>>AC_ENABLE_FAST_INSTALL_DEFAULT],
  changequote([, ])dnl
  [p=${PACKAGE-default}
  case $enableval in
  yes) enable_fast_install=yes ;;
  no) enable_fast_install=no ;;
  *)
    enable_fast_install=no
    # Look at the argument we got.  We use all the common list separators.
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
    for pkg in $enableval; do
      if test "X$pkg" = "X$p"; then
        enable_fast_install=yes
      fi
    done
    IFS="$ac_save_ifs"
    ;;
  esac],
  enable_fast_install=AC_ENABLE_FAST_INSTALL_DEFAULT)dnl
  ])
  
  # AC_DISABLE_FAST_INSTALL - set the default to --disable-fast-install
  AC_DEFUN([AC_DISABLE_FAST_INSTALL],
  [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
  AC_ENABLE_FAST_INSTALL(no)])
  
  # AC_LIBTOOL_PICMODE - implement the --with-pic flag
  # Usage: AC_LIBTOOL_PICMODE[(MODE)]
  #   Where MODE is either `yes' or `no'.  If omitted, it defaults to
  #   `both'.
  AC_DEFUN([AC_LIBTOOL_PICMODE],
  [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
  pic_mode=ifelse($#,1,$1,default)])
  
  
  # AC_PATH_TOOL_PREFIX - find a file program which can recognise shared library
  AC_DEFUN([AC_PATH_TOOL_PREFIX],
  [AC_MSG_CHECKING([for $1])
  AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
  [case $MAGIC_CMD in
    /*)
    lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
    ;;
    ?:/*)
    lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path.
    ;;
    *)
    ac_save_MAGIC_CMD="$MAGIC_CMD"
    IFS="${IFS=   }"; ac_save_ifs="$IFS"; IFS=":"
  dnl $ac_dummy forces splitting on constant user-supplied paths.
  dnl POSIX.2 word splitting is done only on the output of word expansions,
  dnl not every word.  This closes a longstanding sh security hole.
    ac_dummy="ifelse([$2], , $PATH, [$2])"
    for ac_dir in $ac_dummy; do
      test -z "$ac_dir" && ac_dir=.
      if test -f $ac_dir/$1; then
        lt_cv_path_MAGIC_CMD="$ac_dir/$1"
        if test -n "$file_magic_test_file"; then
  	case $deplibs_check_method in
  	"file_magic "*)
  	  file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
  	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
  	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
  	    egrep "$file_magic_regex" > /dev/null; then
  	    :
  	  else
  	    cat <<EOF 1>&2
  
  *** Warning: the command libtool uses to detect shared libraries,
  *** $file_magic_cmd, produces output that libtool cannot recognize.
  *** The result is that libtool may fail to recognize shared libraries
  *** as such.  This will affect the creation of libtool libraries that
  *** depend on shared libraries, but programs linked with such libtool
  *** libraries will work regardless of this problem.  Nevertheless, you
  *** may want to report the problem to your system manager and/or to
  *** bug-libtool@gnu.org
  
  EOF
  	  fi ;;
  	esac
        fi
        break
      fi
    done
    IFS="$ac_save_ifs"
    MAGIC_CMD="$ac_save_MAGIC_CMD"
    ;;
  esac])
  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
  if test -n "$MAGIC_CMD"; then
    AC_MSG_RESULT($MAGIC_CMD)
  else
    AC_MSG_RESULT(no)
  fi
  ])
  
  
  # AC_PATH_MAGIC - find a file program which can recognise a shared library
  AC_DEFUN([AC_PATH_MAGIC],
  [AC_REQUIRE([AC_CHECK_TOOL_PREFIX])dnl
  AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin:$PATH)
  if test -z "$lt_cv_path_MAGIC_CMD"; then
    if test -n "$ac_tool_prefix"; then
      AC_PATH_TOOL_PREFIX(file, /usr/bin:$PATH)
    else
      MAGIC_CMD=:
    fi
  fi
  ])
  
  
  # AC_PROG_LD - find the path to the GNU or non-GNU linker
  AC_DEFUN([AC_PROG_LD],
  [AC_ARG_WITH(gnu-ld,
  [  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]],
  test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
  AC_REQUIRE([AC_PROG_CC])dnl
  AC_REQUIRE([AC_CANONICAL_HOST])dnl
  AC_REQUIRE([AC_CANONICAL_BUILD])dnl
  ac_prog=ld
  if test "$GCC" = yes; then
    # Check if gcc -print-prog-name=ld gives a path.
    AC_MSG_CHECKING([for ld used by GCC])
    case $host in
    *-*-mingw*)
      # gcc leaves a trailing carriage return which upsets mingw
      ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
    *)
      ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
    esac
    case $ac_prog in
      # Accept absolute paths.
      [[\\/]* | [A-Za-z]:[\\/]*)]
        [re_direlt='/[^/][^/]*/\.\./']
        # Canonicalize the path of ld
        ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
        while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
  	ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
        done
        test -z "$LD" && LD="$ac_prog"
        ;;
    "")
      # If it fails, then pretend we aren't using GCC.
      ac_prog=ld
      ;;
    *)
      # If it is relative, then search for the first ld in PATH.
      with_gnu_ld=unknown
      ;;
    esac
  elif test "$with_gnu_ld" = yes; then
    AC_MSG_CHECKING([for GNU ld])
  else
    AC_MSG_CHECKING([for non-GNU ld])
  fi
  AC_CACHE_VAL(lt_cv_path_LD,
  [if test -z "$LD"; then
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
    for ac_dir in $PATH; do
      test -z "$ac_dir" && ac_dir=.
      if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
        lt_cv_path_LD="$ac_dir/$ac_prog"
        # Check to see if the program is GNU ld.  I'd rather use --version,
        # but apparently some GNU ld's only accept -v.
        # Break only if it was the GNU/non-GNU ld that we prefer.
        if "$lt_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
  	test "$with_gnu_ld" != no && break
        else
  	test "$with_gnu_ld" != yes && break
        fi
      fi
    done
    IFS="$ac_save_ifs"
  else
    lt_cv_path_LD="$LD" # Let the user override the test with a path.
  fi])
  LD="$lt_cv_path_LD"
  if test -n "$LD"; then
    AC_MSG_RESULT($LD)
  else
    AC_MSG_RESULT(no)
  fi
  test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
  AC_PROG_LD_GNU
  ])
  
  # AC_PROG_LD_GNU -
  AC_DEFUN([AC_PROG_LD_GNU],
  [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
  [# I'd rather use --version here, but apparently some GNU ld's only accept -v.
  if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
    lt_cv_prog_gnu_ld=yes
  else
    lt_cv_prog_gnu_ld=no
  fi])
  with_gnu_ld=$lt_cv_prog_gnu_ld
  ])
  
  # AC_PROG_LD_RELOAD_FLAG - find reload flag for linker
  #   -- PORTME Some linkers may need a different reload flag.
  AC_DEFUN([AC_PROG_LD_RELOAD_FLAG],
  [AC_CACHE_CHECK([for $LD option to reload object files], lt_cv_ld_reload_flag,
  [lt_cv_ld_reload_flag='-r'])
  reload_flag=$lt_cv_ld_reload_flag
  test -n "$reload_flag" && reload_flag=" $reload_flag"
  ])
  
  # AC_DEPLIBS_CHECK_METHOD - how to check for library dependencies
  #  -- PORTME fill in with the dynamic library characteristics
  AC_DEFUN([AC_DEPLIBS_CHECK_METHOD],
  [AC_CACHE_CHECK([how to recognise dependant libraries],
  lt_cv_deplibs_check_method,
  [lt_cv_file_magic_cmd='$MAGIC_CMD'
  lt_cv_file_magic_test_file=
  lt_cv_deplibs_check_method='unknown'
  # Need to set the preceding variable on all platforms that support
  # interlibrary dependencies.
  # 'none' -- dependencies not supported.
  # `unknown' -- same as none, but documents that we really don't know.
  # 'pass_all' -- all dependencies passed with no checks.
  # 'test_compile' -- check by making test program.
  # ['file_magic [regex]'] -- check by looking for files in library path
  # which responds to the $file_magic_cmd with a given egrep regex.
  # If you have `file' or equivalent on your system and you're not sure
  # whether `pass_all' will *always* work, you probably want this one.
  
  case $host_os in
  aix4* | aix5*)
    lt_cv_deplibs_check_method=pass_all
    ;;
  
  beos*)
    lt_cv_deplibs_check_method=pass_all
    ;;
  
  bsdi4*)
    [lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)']
    lt_cv_file_magic_cmd='/usr/bin/file -L'
    lt_cv_file_magic_test_file=/shlib/libc.so
    ;;
  
  cygwin* | mingw* | pw32*)
    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
    lt_cv_file_magic_cmd='$OBJDUMP -f'
    ;;
  
  darwin* | rhapsody*)
    lt_cv_deplibs_check_method='file_magic Mach-O dynamically linked shared library'
    lt_cv_file_magic_cmd='/usr/bin/file -L'
    case "$host_os" in
    rhapsody* | darwin1.[012])
      lt_cv_file_magic_test_file=`echo /System/Library/Frameworks/System.framework/Versions/*/System | head -1`
      ;;
    *) # Darwin 1.3 on
      lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib'
      ;;
    esac
    ;;
  
  freebsd*)
    if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
      case $host_cpu in
      i*86 )
        # Not sure whether the presence of OpenBSD here was a mistake.
        # Let's accept both of them until this is cleared up.
        [lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[3-9]86 (compact )?demand paged shared library']
        lt_cv_file_magic_cmd=/usr/bin/file
        lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
        ;;
      esac
    else
      lt_cv_deplibs_check_method=pass_all
    fi
    ;;
  
  gnu*)
    lt_cv_deplibs_check_method=pass_all
    ;;
  
  hpux10.20*|hpux11*)
    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library']
    lt_cv_file_magic_cmd=/usr/bin/file
    lt_cv_file_magic_test_file=/usr/lib/libc.sl
    ;;
  
  irix5* | irix6*)
    case $host_os in
    irix5*)
      # this will be overridden with pass_all, but let us keep it just in case
      lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1"
      ;;
    *)
      case $LD in
      *-32|*"-32 ") libmagic=32-bit;;
      *-n32|*"-n32 ") libmagic=N32;;
      *-64|*"-64 ") libmagic=64-bit;;
      *) libmagic=never-match;;
      esac
      # this will be overridden with pass_all, but let us keep it just in case
      [lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[1234] dynamic lib MIPS - version 1"]
      ;;
    esac
    lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*`
    lt_cv_deplibs_check_method=pass_all
    ;;
  
  # This must be Linux ELF.
  linux-gnu*)
    case $host_cpu in
    alpha* | i*86 | powerpc* | sparc* | ia64* )
      lt_cv_deplibs_check_method=pass_all ;;
    *)
      # glibc up to 2.1.1 does not perform some relocations on ARM
      [lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;;]
    esac
    lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
    ;;
  
  netbsd*)
    if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
      [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$']
    else
      [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so$']
    fi
    ;;
  
  newos6*)
    [lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)']
    lt_cv_file_magic_cmd=/usr/bin/file
    lt_cv_file_magic_test_file=/usr/lib/libnls.so
    ;;
  
  osf3* | osf4* | osf5*)
    # this will be overridden with pass_all, but let us keep it just in case
    lt_cv_deplibs_check_method='file_magic COFF format alpha shared library'
    lt_cv_file_magic_test_file=/shlib/libc.so
    lt_cv_deplibs_check_method=pass_all
    ;;
  
  sco3.2v5*)
    lt_cv_deplibs_check_method=pass_all
    ;;
  
  solaris*)
    lt_cv_deplibs_check_method=pass_all
    lt_cv_file_magic_test_file=/lib/libc.so
    ;;
  
  [sysv5uw[78]* | sysv4*uw2*)]
    lt_cv_deplibs_check_method=pass_all
    ;;
  
  sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
    case $host_vendor in
    motorola)
      [lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]']
      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
      ;;
    ncr)
      lt_cv_deplibs_check_method=pass_all
      ;;
    sequent)
      lt_cv_file_magic_cmd='/bin/file'
      [lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )']
      ;;
    sni)
      lt_cv_file_magic_cmd='/bin/file'
      [lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"]
      lt_cv_file_magic_test_file=/lib/libc.so
      ;;
    esac
    ;;
  esac
  ])
  file_magic_cmd=$lt_cv_file_magic_cmd
  deplibs_check_method=$lt_cv_deplibs_check_method
  ])
  
  
  # AC_PROG_NM - find the path to a BSD-compatible name lister
  AC_DEFUN([AC_PROG_NM],
  [AC_MSG_CHECKING([for BSD-compatible nm])
  AC_CACHE_VAL(lt_cv_path_NM,
  [if test -n "$NM"; then
    # Let the user override the test.
    lt_cv_path_NM="$NM"
  else
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
    for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
      test -z "$ac_dir" && ac_dir=.
      tmp_nm=$ac_dir/${ac_tool_prefix}nm
      if test -f $tmp_nm || test -f $tmp_nm$ac_exeext ; then
        # Check to see if the nm accepts a BSD-compat flag.
        # Adding the `sed 1q' prevents false positives on HP-UX, which says:
        #   nm: unknown option "B" ignored
        # Tru64's nm complains that /dev/null is an invalid object file
        if ($tmp_nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep '(/dev/null|Invalid file or object type)' >/dev/null; then
  	lt_cv_path_NM="$tmp_nm -B"
  	break
        elif ($tmp_nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
  	lt_cv_path_NM="$tmp_nm -p"
  	break
        else
  	lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
  	continue # so that we can try to find one that supports BSD flags
        fi
      fi
    done
    IFS="$ac_save_ifs"
    test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
  fi])
  NM="$lt_cv_path_NM"
  AC_MSG_RESULT([$NM])
  ])
  
  # AC_CHECK_LIBM - check for math library
  AC_DEFUN([AC_CHECK_LIBM],
  [AC_REQUIRE([AC_CANONICAL_HOST])dnl
  LIBM=
  case $host in
  *-*-beos* | *-*-cygwin* | *-*-pw32*)
    # These system don't have libm
    ;;
  *-ncr-sysv4.3*)
    AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
    AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
    ;;
  *)
    AC_CHECK_LIB(m, main, LIBM="-lm")
    ;;
  esac
  ])
  
  # AC_LIBLTDL_CONVENIENCE[(dir)] - sets LIBLTDL to the link flags for
  # the libltdl convenience library and INCLTDL to the include flags for
  # the libltdl header and adds --enable-ltdl-convenience to the
  # configure arguments.  Note that LIBLTDL and INCLTDL are not
  # AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called.  If DIR is not
  # provided, it is assumed to be `libltdl'.  LIBLTDL will be prefixed
  # with '${top_builddir}/' and INCLTDL will be prefixed with
  # '${top_srcdir}/' (note the single quotes!).  If your package is not
  # flat and you're not using automake, define top_builddir and
  # top_srcdir appropriately in the Makefiles.
  AC_DEFUN([AC_LIBLTDL_CONVENIENCE],
  [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
    case $enable_ltdl_convenience in
    no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
    "") enable_ltdl_convenience=yes
        ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
    esac
    LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la
    INCLTDL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
  ])
  
  # AC_LIBLTDL_INSTALLABLE[(dir)] - sets LIBLTDL to the link flags for
  # the libltdl installable library and INCLTDL to the include flags for
  # the libltdl header and adds --enable-ltdl-install to the configure
  # arguments.  Note that LIBLTDL and INCLTDL are not AC_SUBSTed, nor is
  # AC_CONFIG_SUBDIRS called.  If DIR is not provided and an installed
  # libltdl is not found, it is assumed to be `libltdl'.  LIBLTDL will
  # be prefixed with '${top_builddir}/' and INCLTDL will be prefixed
  # with '${top_srcdir}/' (note the single quotes!).  If your package is
  # not flat and you're not using automake, define top_builddir and
  # top_srcdir appropriately in the Makefiles.
  # In the future, this macro may have to be called after AC_PROG_LIBTOOL.
  AC_DEFUN([AC_LIBLTDL_INSTALLABLE],
  [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
    AC_CHECK_LIB(ltdl, main,
    [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
    [if test x"$enable_ltdl_install" = xno; then
       AC_MSG_WARN([libltdl not installed, but installation disabled])
     else
       enable_ltdl_install=yes
     fi
    ])
    if test x"$enable_ltdl_install" = x"yes"; then
      ac_configure_args="$ac_configure_args --enable-ltdl-install"
      LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la
      INCLTDL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
    else
      ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
      LIBLTDL="-lltdl"
      INCLTDL=
    fi
  ])
  
  # old names
  AC_DEFUN([AM_PROG_LIBTOOL],   [AC_PROG_LIBTOOL])
  AC_DEFUN([AM_ENABLE_SHARED],  [AC_ENABLE_SHARED($@)])
  AC_DEFUN([AM_ENABLE_STATIC],  [AC_ENABLE_STATIC($@)])
  AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
  AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
  AC_DEFUN([AM_PROG_LD],        [AC_PROG_LD])
  AC_DEFUN([AM_PROG_NM],        [AC_PROG_NM])
  
  # This is just to silence aclocal about the macro not being used
  ifelse([AC_DISABLE_FAST_INSTALL])
    Index: ossp-pkg/pcre/ltmain.sh
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 ltmain.sh
  --- ossp-pkg/pcre/ltmain.sh	2000/07/07 06:18:50	1.3
  +++ ossp-pkg/pcre/ltmain.sh	2001/08/16 10:08:07	1.4
  @@ -1,7 +1,8 @@
   # ltmain.sh - Provide generalized library-building support services.
  -# NOTE: Changing this file will not affect anything until you rerun ltconfig.
  +# NOTE: Changing this file will not affect anything until you rerun configure.
   #
  -# Copyright (C) 1996-1999 Free Software Foundation, Inc.
  +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
  +# Free Software Foundation, Inc.
   # Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
   #
   # This program is free software; you can redistribute it and/or modify
  @@ -54,8 +55,8 @@
   # Constants.
   PROGRAM=ltmain.sh
   PACKAGE=libtool
  -VERSION=1.3.5
  -TIMESTAMP=" (1.385.2.206 2000/05/27 11:12:27)"
  +VERSION=1.4
  +TIMESTAMP=" (1.920 2001/04/24 23:26:18)"
   
   default_mode=
   help="Try \`$progname --help' for more information."
  @@ -83,12 +84,6 @@
     save_LANG="$LANG"; LANG=C; export LANG
   fi
   
  -if test "$LTCONFIG_VERSION" != "$VERSION"; then
  -  echo "$modename: ltconfig version \`$LTCONFIG_VERSION' does not match $PROGRAM version \`$VERSION'" 1>&2
  -  echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
  -  exit 1
  -fi
  -
   if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
     echo "$modename: not configured to build any kind of library" 1>&2
     echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
  @@ -113,16 +108,16 @@
     arg="$1"
     shift
   
  -  case "$arg" in
  +  case $arg in
     -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;;
     *) optarg= ;;
     esac
   
     # If the previous option needs an argument, assign it.
     if test -n "$prev"; then
  -    case "$prev" in
  +    case $prev in
       execute_dlfiles)
  -      eval "$prev=\"\$$prev \$arg\""
  +      execute_dlfiles="$execute_dlfiles $arg"
         ;;
       *)
         eval "$prev=\$arg"
  @@ -135,7 +130,7 @@
     fi
   
     # Have we seen a non-optional argument yet?
  -  case "$arg" in
  +  case $arg in
     --help)
       show_help=yes
       ;;
  @@ -146,7 +141,7 @@
       ;;
   
     --config)
  -    sed -e '1,/^### BEGIN LIBTOOL CONFIG/d' -e '/^### END LIBTOOL CONFIG/,$d' $0
  +    sed -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $0
       exit 0
       ;;
   
  @@ -211,12 +206,12 @@
   
     # Infer the operation mode.
     if test -z "$mode"; then
  -    case "$nonopt" in
  +    case $nonopt in
       *cc | *++ | gcc* | *-gcc*)
         mode=link
         for arg
         do
  -	case "$arg" in
  +	case $arg in
   	-c)
   	   mode=compile
   	   break
  @@ -261,12 +256,13 @@
     help="Try \`$modename --help --mode=$mode' for more information."
   
     # These modes are in order of execution frequency so that they run quickly.
  -  case "$mode" in
  +  case $mode in
     # libtool compile mode
     compile)
       modename="$modename: compile"
       # Get the compilation command and the source file.
       base_compile=
  +    prev=
       lastarg=
       srcfile="$nonopt"
       suppress_output=
  @@ -274,8 +270,34 @@
       user_target=no
       for arg
       do
  +      case $prev in
  +      "") ;;
  +      xcompiler)
  +	# Aesthetically quote the previous argument.
  +	prev=
  +	lastarg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
  +
  +	case $arg in
  +	# Double-quote args containing other shell metacharacters.
  +	# Many Bourne shells cannot handle close brackets correctly
  +	# in scan sets, so we specify it separately.
  +	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
  +	  arg="\"$arg\""
  +	  ;;
  +	esac
  +
  +	# Add the previous argument to base_compile.
  +	if test -z "$base_compile"; then
  +	  base_compile="$lastarg"
  +	else
  +	  base_compile="$base_compile $lastarg"
  +	fi
  +	continue
  +	;;
  +      esac
  +
         # Accept any command-line options.
  -      case "$arg" in
  +      case $arg in
         -o)
   	if test "$user_target" != "no"; then
   	  $echo "$modename: you cannot specify \`-o' more than once" 1>&2
  @@ -288,9 +310,53 @@
   	build_old_libs=yes
   	continue
   	;;
  +
  +      -prefer-pic)
  +	pic_mode=yes
  +	continue
  +	;;
  +
  +      -prefer-non-pic)
  +	pic_mode=no
  +	continue
  +	;;
  +
  +      -Xcompiler)
  +	prev=xcompiler
  +	continue
  +	;;
  +
  +      -Wc,*)
  +	args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"`
  +	lastarg=
  +	IFS="${IFS= 	}"; save_ifs="$IFS"; IFS=','
  +	for arg in $args; do
  +	  IFS="$save_ifs"
  +
  +	  # Double-quote args containing other shell metacharacters.
  +	  # Many Bourne shells cannot handle close brackets correctly
  +	  # in scan sets, so we specify it separately.
  +	  case $arg in
  +	    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
  +	    arg="\"$arg\""
  +	    ;;
  +	  esac
  +	  lastarg="$lastarg $arg"
  +	done
  +	IFS="$save_ifs"
  +	lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"`
  +
  +	# Add the arguments to base_compile.
  +	if test -z "$base_compile"; then
  +	  base_compile="$lastarg"
  +	else
  +	  base_compile="$base_compile $lastarg"
  +	fi
  +	continue
  +	;;
         esac
   
  -      case "$user_target" in
  +      case $user_target in
         next)
   	# The next one is the -o target name
   	user_target=yes
  @@ -316,10 +382,10 @@
         lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"`
   
         # Double-quote args containing other shell metacharacters.
  -      # Many Bourne shells cannot handle close brackets correctly in scan
  -      # sets, so we specify it separately.
  -      case "$lastarg" in
  -      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
  +      # Many Bourne shells cannot handle close brackets correctly
  +      # in scan sets, so we specify it separately.
  +      case $lastarg in
  +      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
   	lastarg="\"$lastarg\""
   	;;
         esac
  @@ -332,7 +398,7 @@
         fi
       done
   
  -    case "$user_target" in
  +    case $user_target in
       set)
         ;;
       no)
  @@ -348,7 +414,7 @@
       # Recognize several different file suffixes.
       # If the user specifies -o file.o, it is replaced with file.lo
       xform='[cCFSfmso]'
  -    case "$libobj" in
  +    case $libobj in
       *.ada) xform=ada ;;
       *.adb) xform=adb ;;
       *.ads) xform=ads ;;
  @@ -363,7 +429,7 @@
   
       libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
   
  -    case "$libobj" in
  +    case $libobj in
       *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;;
       *)
         $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2
  @@ -387,10 +453,21 @@
       $run $rm $removelist
       trap "$run $rm $removelist; exit 1" 1 2 15
   
  +    # On Cygwin there's no "real" PIC flag so we must build both object types
  +    case $host_os in
  +    cygwin* | mingw* | pw32* | os2*)
  +      pic_mode=default
  +      ;;
  +    esac
  +    if test $pic_mode = no && test "$deplibs_check_method" != pass_all; then
  +      # non-PIC code in shared libraries is not supported
  +      pic_mode=default
  +    fi
  +
       # Calculate the filename of the output object if compiler does
       # not support -o with -c
       if test "$compiler_c_o" = no; then
  -      output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\..*$%%'`.${objext}
  +      output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
         lockfile="$output_obj.lock"
         removelist="$removelist $output_obj $lockfile"
         trap "$run $rm $removelist; exit 1" 1 2 15
  @@ -402,7 +479,7 @@
       # Lock this critical section if it is needed
       # We use this script file to make the link, it avoids creating a new file
       if test "$need_locks" = yes; then
  -      until ln "$0" "$lockfile" 2>/dev/null; do
  +      until $run ln "$0" "$lockfile" 2>/dev/null; do
   	$show "Waiting for $lockfile to be removed"
   	sleep 2
         done
  @@ -434,8 +511,13 @@
         # Without this assignment, base_compile gets emptied.
         fbsd_hideous_sh_bug=$base_compile
   
  -      # All platforms use -DPIC, to notify preprocessed assembler code.
  -      command="$base_compile $srcfile $pic_flag -DPIC"
  +      if test "$pic_mode" != no; then
  +	# All platforms use -DPIC, to notify preprocessed assembler code.
  +	command="$base_compile $srcfile $pic_flag -DPIC"
  +      else
  +	# Don't build PIC code
  +	command="$base_compile $srcfile"
  +      fi
         if test "$build_old_libs" = yes; then
   	lo_libobj="$libobj"
   	dir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'`
  @@ -506,7 +588,8 @@
         fi
   
         # If we have no pic_flag, then copy the object into place and finish.
  -      if test -z "$pic_flag" && test "$build_old_libs" = yes; then
  +      if (test -z "$pic_flag" || test "$pic_mode" != default) &&
  +	 test "$build_old_libs" = yes; then
   	# Rename the .lo from within objdir to obj
   	if test -f $obj; then
   	  $show $rm $obj
  @@ -546,7 +629,13 @@
   
       # Only build a position-dependent object if we build old libraries.
       if test "$build_old_libs" = yes; then
  -      command="$base_compile $srcfile"
  +      if test "$pic_mode" != yes; then
  +	# Don't build PIC code
  +	command="$base_compile $srcfile"
  +      else
  +	# All platforms use -DPIC, to notify preprocessed assembler code.
  +	command="$base_compile $srcfile $pic_flag -DPIC"
  +      fi
         if test "$compiler_c_o" = yes; then
   	command="$command -o $obj"
   	output_obj="$obj"
  @@ -612,17 +701,17 @@
   
       # Unlock the critical section if it was locked
       if test "$need_locks" != no; then
  -      $rm "$lockfile"
  +      $run $rm "$lockfile"
       fi
   
       exit 0
       ;;
   
     # libtool link mode
  -  link)
  +  link | relink)
       modename="$modename: link"
  -    case "$host" in
  -    *-*-cygwin* | *-*-mingw* | *-*-os2*)
  +    case $host in
  +    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
         # It is impossible to link a dll without this setting, and
         # we shouldn't force the makefile maintainer to figure out
         # which system we are compiling for in order to pass an extra
  @@ -635,179 +724,12 @@
         # -no-undefined on the libtool link line when we can be certain
         # that all symbols are satisfied, otherwise we get a static library.
         allow_undefined=yes
  -
  -      # This is a source program that is used to create dlls on Windows
  -      # Don't remove nor modify the starting and closing comments
  -# /* ltdll.c starts here */
  -# #define WIN32_LEAN_AND_MEAN
  -# #include <windows.h>
  -# #undef WIN32_LEAN_AND_MEAN
  -# #include <stdio.h>
  -#
  -# #ifndef __CYGWIN__
  -# #  ifdef __CYGWIN32__
  -# #    define __CYGWIN__ __CYGWIN32__
  -# #  endif
  -# #endif
  -#
  -# #ifdef __cplusplus
  -# extern "C" {
  -# #endif
  -# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
  -# #ifdef __cplusplus
  -# }
  -# #endif
  -#
  -# #ifdef __CYGWIN__
  -# #include <cygwin/cygwin_dll.h>
  -# DECLARE_CYGWIN_DLL( DllMain );
  -# #endif
  -# HINSTANCE __hDllInstance_base;
  -#
  -# BOOL APIENTRY
  -# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
  -# {
  -#   __hDllInstance_base = hInst;
  -#   return TRUE;
  -# }
  -# /* ltdll.c ends here */
  -      # This is a source program that is used to create import libraries
  -      # on Windows for dlls which lack them. Don't remove nor modify the
  -      # starting and closing comments
  -# /* impgen.c starts here */
  -# /*   Copyright (C) 1999 Free Software Foundation, Inc.
  -# 
  -#  This file is part of GNU libtool.
  -# 
  -#  This program is free software; you can redistribute it and/or modify
  -#  it under the terms of the GNU General Public License as published by
  -#  the Free Software Foundation; either version 2 of the License, or
  -#  (at your option) any later version.
  -# 
  -#  This program is distributed in the hope that it will be useful,
  -#  but WITHOUT ANY WARRANTY; without even the implied warranty of
  -#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  -#  GNU General Public License for more details.
  -# 
  -#  You should have received a copy of the GNU General Public License
  -#  along with this program; if not, write to the Free Software
  -#  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  -#  */
  -# 
  -#  #include <stdio.h>		/* for printf() */
  -#  #include <unistd.h>		/* for open(), lseek(), read() */
  -#  #include <fcntl.h>		/* for O_RDONLY, O_BINARY */
  -#  #include <string.h>		/* for strdup() */
  -# 
  -#  static unsigned int
  -#  pe_get16 (fd, offset)
  -#       int fd;
  -#       int offset;
  -#  {
  -#    unsigned char b[2];
  -#    lseek (fd, offset, SEEK_SET);
  -#    read (fd, b, 2);
  -#    return b[0] + (b[1]<<8);
  -#  }
  -# 
  -#  static unsigned int
  -#  pe_get32 (fd, offset)
  -#      int fd;
  -#      int offset;
  -#  {
  -#    unsigned char b[4];
  -#    lseek (fd, offset, SEEK_SET);
  -#    read (fd, b, 4);
  -#    return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
  -#  }
  -# 
  -#  static unsigned int
  -#  pe_as32 (ptr)
  -#       void *ptr;
  -#  {
  -#    unsigned char *b = ptr;
  -#    return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
  -#  }
  -# 
  -#  int
  -#  main (argc, argv)
  -#      int argc;
  -#      char *argv[];
  -#  {
  -#      int dll;
  -#      unsigned long pe_header_offset, opthdr_ofs, num_entries, i;
  -#      unsigned long export_rva, export_size, nsections, secptr, expptr;
  -#      unsigned long name_rvas, nexp;
  -#      unsigned char *expdata, *erva;
  -#      char *filename, *dll_name;
  -# 
  -#      filename = argv[1];
  -# 
  -#      dll = open(filename, O_RDONLY|O_BINARY);
  -#      if (!dll)
  -#  	return 1;
  -# 
  -#      dll_name = filename;
  -#    
  -#      for (i=0; filename[i]; i++)
  -#  	if (filename[i] == '/' || filename[i] == '\\'  || filename[i] == ':')
  -#  	    dll_name = filename + i +1;
  -# 
  -#      pe_header_offset = pe_get32 (dll, 0x3c);
  -#      opthdr_ofs = pe_header_offset + 4 + 20;
  -#      num_entries = pe_get32 (dll, opthdr_ofs + 92);
  -# 
  -#      if (num_entries < 1) /* no exports */
  -#  	return 1;
  -# 
  -#      export_rva = pe_get32 (dll, opthdr_ofs + 96);
  -#      export_size = pe_get32 (dll, opthdr_ofs + 100);
  -#      nsections = pe_get16 (dll, pe_header_offset + 4 +2);
  -#      secptr = (pe_header_offset + 4 + 20 +
  -#  	      pe_get16 (dll, pe_header_offset + 4 + 16));
  -# 
  -#      expptr = 0;
  -#      for (i = 0; i < nsections; i++)
  -#      {
  -#  	char sname[8];
  -#  	unsigned long secptr1 = secptr + 40 * i;
  -#  	unsigned long vaddr = pe_get32 (dll, secptr1 + 12);
  -#  	unsigned long vsize = pe_get32 (dll, secptr1 + 16);
  -#  	unsigned long fptr = pe_get32 (dll, secptr1 + 20);
  -#  	lseek(dll, secptr1, SEEK_SET);
  -#  	read(dll, sname, 8);
  -#  	if (vaddr <= export_rva && vaddr+vsize > export_rva)
  -#  	{
  -#  	    expptr = fptr + (export_rva - vaddr);
  -#  	    if (export_rva + export_size > vaddr + vsize)
  -#  		export_size = vsize - (export_rva - vaddr);
  -#  	    break;
  -#  	}
  -#      }
  -# 
  -#      expdata = (unsigned char*)malloc(export_size);
  -#      lseek (dll, expptr, SEEK_SET);
  -#      read (dll, expdata, export_size);
  -#      erva = expdata - export_rva;
  -# 
  -#      nexp = pe_as32 (expdata+24);
  -#      name_rvas = pe_as32 (expdata+32);
  -# 
  -#      printf ("EXPORTS\n");
  -#      for (i = 0; i<nexp; i++)
  -#      {
  -#  	unsigned long name_rva = pe_as32 (erva+name_rvas+i*4);
  -#  	printf ("\t%s @ %ld ;\n", erva+name_rva, 1+ i);
  -#      }
  -# 
  -#      return 0;
  -#  }
  -# /* impgen.c ends here */
         ;;
       *)
         allow_undefined=yes
         ;;
       esac
  +    libtool_args="$nonopt"
       compile_command="$nonopt"
       finalize_command="$nonopt"
   
  @@ -818,18 +740,12 @@
       convenience=
       old_convenience=
       deplibs=
  -    linkopts=
  +    old_deplibs=
  +    compiler_flags=
  +    linker_flags=
  +    dllsearchpath=
  +    lib_search_path=`pwd`
   
  -    if test -n "$shlibpath_var"; then
  -      # get the directories listed in $shlibpath_var
  -      eval lib_search_path=\`\$echo \"X \${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
  -    else
  -      lib_search_path=
  -    fi
  -    # now prepend the system-specific ones
  -    eval lib_search_path=\"$sys_lib_search_path_spec\$lib_search_path\"
  -    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
  -    
       avoid_version=no
       dlfiles=
       dlprefiles=
  @@ -839,9 +755,9 @@
       export_symbols_regex=
       generated=
       libobjs=
  -    link_against_libtool_libs=
       ltlibs=
       module=no
  +    no_install=no
       objs=
       prefer_static_libs=no
       preload=no
  @@ -858,7 +774,7 @@
       # We need to know -static, to get the right output filenames.
       for arg
       do
  -      case "$arg" in
  +      case $arg in
         -all-static | -static)
   	if test "X$arg" = "X-all-static"; then
   	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
  @@ -887,17 +803,24 @@
       while test $# -gt 0; do
         arg="$1"
         shift
  +      case $arg in
  +      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
  +	qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test
  +	;;
  +      *) qarg=$arg ;;
  +      esac
  +      libtool_args="$libtool_args $qarg"
   
         # If the previous option needs an argument, assign it.
         if test -n "$prev"; then
  -	case "$prev" in
  +	case $prev in
   	output)
   	  compile_command="$compile_command @OUTPUT@"
   	  finalize_command="$finalize_command @OUTPUT@"
   	  ;;
   	esac
   
  -	case "$prev" in
  +	case $prev in
   	dlfiles|dlprefiles)
   	  if test "$preload" = no; then
   	    # Add the symbol object into the linking commands.
  @@ -905,7 +828,7 @@
   	    finalize_command="$finalize_command @SYMFILE@"
   	    preload=yes
   	  fi
  -	  case "$arg" in
  +	  case $arg in
   	  *.la | *.lo) ;;  # We handle these cases below.
   	  force)
   	    if test "$dlself" = no; then
  @@ -934,6 +857,7 @@
   	      dlprefiles="$dlprefiles $arg"
   	    fi
   	    prev=
  +	    continue
   	    ;;
   	  esac
   	  ;;
  @@ -958,7 +882,7 @@
   	  ;;
   	rpath | xrpath)
   	  # We need an absolute path.
  -	  case "$arg" in
  +	  case $arg in
   	  [\\/]* | [A-Za-z]:[\\/]*) ;;
   	  *)
   	    $echo "$modename: only absolute run-paths are allowed" 1>&2
  @@ -979,17 +903,32 @@
   	  prev=
   	  continue
   	  ;;
  +	xcompiler)
  +	  compiler_flags="$compiler_flags $qarg"
  +	  prev=
  +	  compile_command="$compile_command $qarg"
  +	  finalize_command="$finalize_command $qarg"
  +	  continue
  +	  ;;
  +	xlinker)
  +	  linker_flags="$linker_flags $qarg"
  +	  compiler_flags="$compiler_flags $wl$qarg"
  +	  prev=
  +	  compile_command="$compile_command $wl$qarg"
  +	  finalize_command="$finalize_command $wl$qarg"
  +	  continue
  +	  ;;
   	*)
   	  eval "$prev=\"\$arg\""
   	  prev=
   	  continue
   	  ;;
   	esac
  -      fi
  +      fi # test -n $prev
   
         prevarg="$arg"
   
  -      case "$arg" in
  +      case $arg in
         -all-static)
   	if test -n "$link_static_flag"; then
   	  compile_command="$compile_command $link_static_flag"
  @@ -1026,7 +965,7 @@
   
         -export-symbols | -export-symbols-regex)
   	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
  -	  $echo "$modename: not more than one -exported-symbols argument allowed"
  +	  $echo "$modename: more than one -exported-symbols argument is not allowed"
   	  exit 1
   	fi
   	if test "X$arg" = "X-export-symbols"; then
  @@ -1037,58 +976,65 @@
   	continue
   	;;
   
  +      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
  +      # so, if we see these flags be careful not to treat them like -L
  +      -L[A-Z][A-Z]*:*)
  +	case $with_gcc/$host in
  +	no/*-*-irix*)
  +	  compile_command="$compile_command $arg"
  +	  finalize_command="$finalize_command $arg"
  +	  ;;
  +	esac
  +	continue
  +	;;
  +
         -L*)
   	dir=`$echo "X$arg" | $Xsed -e 's/^-L//'`
   	# We need an absolute path.
  -	case "$dir" in
  +	case $dir in
   	[\\/]* | [A-Za-z]:[\\/]*) ;;
   	*)
   	  absdir=`cd "$dir" && pwd`
   	  if test -z "$absdir"; then
  -	    $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
  -	    $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
  -	    absdir="$dir"
  +	    $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2
  +	    exit 1
   	  fi
   	  dir="$absdir"
   	  ;;
  -	esac
  -	case " $deplibs " in
  -	*" $arg "*) ;;
  -	*) deplibs="$deplibs $arg";;
   	esac
  -	case " $lib_search_path " in
  -	*" $dir "*) ;;
  -	*) lib_search_path="$lib_search_path $dir";;
  +	case "$deplibs " in
  +	*" -L$dir "*) ;;
  +	*)
  +	  deplibs="$deplibs -L$dir"
  +	  lib_search_path="$lib_search_path $dir"
  +	  ;;
   	esac
  -	case "$host" in
  -	*-*-cygwin* | *-*-mingw* | *-*-os2*)
  -	  dllsearchdir=`cd "$dir" && pwd || echo "$dir"`
  -	  case ":$dllsearchpath:" in
  -	  ::) dllsearchpath="$dllsearchdir";;
  -	  *":$dllsearchdir:"*) ;;
  -	  *) dllsearchpath="$dllsearchpath:$dllsearchdir";;
  +	case $host in
  +	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
  +	  case :$dllsearchpath: in
  +	  *":$dir:"*) ;;
  +	  *) dllsearchpath="$dllsearchpath:$dir";;
   	  esac
   	  ;;
   	esac
  +	continue
   	;;
   
         -l*)
  -	if test "$arg" = "-lc"; then
  -	  case "$host" in
  -	  *-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*)
  -	    # These systems don't actually have c library (as such)
  +	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
  +	  case $host in
  +	  *-*-cygwin* | *-*-pw32* | *-*-beos*)
  +	    # These systems don't actually have a C or math library (as such)
   	    continue
   	    ;;
  -	  esac
  -	elif test "$arg" = "-lm"; then
  -	  case "$host" in
  -	  *-*-cygwin* | *-*-beos*)
  -	    # These systems don't actually have math library (as such)
  -	    continue
  +	  *-*-mingw* | *-*-os2*)
  +	    # These systems don't actually have a C library (as such)
  +	    test "X$arg" = "X-lc" && continue
   	    ;;
   	  esac
   	fi
   	deplibs="$deplibs $arg"
  +	continue
   	;;
   
         -module)
  @@ -1096,6 +1042,25 @@
   	continue
   	;;
   
  +      -no-fast-install)
  +	fast_install=no
  +	continue
  +	;;
  +
  +      -no-install)
  +	case $host in
  +	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
  +	  # The PATH hackery in wrapper scripts is required on Windows
  +	  # in order for the loader to find any dlls it needs.
  +	  $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2
  +	  $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2
  +	  fast_install=no
  +	  ;;
  +	*) no_install=yes ;;
  +	esac
  +	continue
  +	;;
  +
         -no-undefined)
   	allow_undefined=no
   	continue
  @@ -1121,7 +1086,7 @@
         -R*)
   	dir=`$echo "X$arg" | $Xsed -e 's/^-R//'`
   	# We need an absolute path.
  -	case "$dir" in
  +	case $dir in
   	[\\/]* | [A-Za-z]:[\\/]*) ;;
   	*)
   	  $echo "$modename: only absolute run-paths are allowed" 1>&2
  @@ -1136,11 +1101,11 @@
   	;;
   
         -static)
  -	# If we have no pic_flag, then this is the same as -all-static.
  -	if test -z "$pic_flag" && test -n "$link_static_flag"; then
  -	  compile_command="$compile_command $link_static_flag"
  -	  finalize_command="$finalize_command $link_static_flag"
  -	fi
  +	# The effects of -static are defined in a previous loop.
  +	# We used to do the same as -all-static on platforms that
  +	# didn't have a PIC flag, but the assumption that the effects
  +	# would be equivalent was wrong.  It would break on at least
  +	# Digital Unix and AIX.
   	continue
   	;;
   
  @@ -1154,28 +1119,71 @@
   	continue
   	;;
   
  +      -Wc,*)
  +	args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'`
  +	arg=
  +	IFS="${IFS= 	}"; save_ifs="$IFS"; IFS=','
  +	for flag in $args; do
  +	  IFS="$save_ifs"
  +	  case $flag in
  +	    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
  +	    flag="\"$flag\""
  +	    ;;
  +	  esac
  +	  arg="$arg $wl$flag"
  +	  compiler_flags="$compiler_flags $flag"
  +	done
  +	IFS="$save_ifs"
  +	arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
  +	;;
  +
  +      -Wl,*)
  +	args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'`
  +	arg=
  +	IFS="${IFS= 	}"; save_ifs="$IFS"; IFS=','
  +	for flag in $args; do
  +	  IFS="$save_ifs"
  +	  case $flag in
  +	    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
  +	    flag="\"$flag\""
  +	    ;;
  +	  esac
  +	  arg="$arg $wl$flag"
  +	  compiler_flags="$compiler_flags $wl$flag"
  +	  linker_flags="$linker_flags $flag"
  +	done
  +	IFS="$save_ifs"
  +	arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
  +	;;
  +
  +      -Xcompiler)
  +	prev=xcompiler
  +	continue
  +	;;
  +
  +      -Xlinker)
  +	prev=xlinker
  +	continue
  +	;;
  +
         # Some other compiler flag.
         -* | +*)
   	# Unknown arguments in both finalize_command and compile_command need
   	# to be aesthetically quoted because they are evaled later.
   	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
  -	case "$arg" in
  -	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
  +	case $arg in
  +	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
   	  arg="\"$arg\""
   	  ;;
   	esac
   	;;
   
  -      *.o | *.obj | *.a | *.lib)
  -	# A standard object.
  -	objs="$objs $arg"
  -	;;
  -
  -      *.lo)
  -	# A library object.
  +      *.lo | *.$objext)
  +	# A library or standard object.
   	if test "$prev" = dlfiles; then
  -	  dlfiles="$dlfiles $arg"
  -	  if test "$build_libtool_libs" = yes && test "$dlopen" = yes; then
  +	  # This file was specified with -dlopen.
  +	  if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
  +	    dlfiles="$dlfiles $arg"
   	    prev=
   	    continue
   	  else
  @@ -1188,357 +1196,890 @@
   	  # Preload the old-style object.
   	  dlprefiles="$dlprefiles "`$echo "X$arg" | $Xsed -e "$lo2o"`
   	  prev=
  +	else
  +	  case $arg in
  +	  *.lo) libobjs="$libobjs $arg" ;;
  +	  *) objs="$objs $arg" ;;
  +	  esac
   	fi
  -	libobjs="$libobjs $arg"
   	;;
   
  +      *.$libext)
  +	# An archive.
  +	deplibs="$deplibs $arg"
  +	old_deplibs="$old_deplibs $arg"
  +	continue
  +	;;
  +
         *.la)
   	# A libtool-controlled library.
   
  -	dlname=
  -	libdir=
  -	library_names=
  -	old_library=
  +	if test "$prev" = dlfiles; then
  +	  # This library was specified with -dlopen.
  +	  dlfiles="$dlfiles $arg"
  +	  prev=
  +	elif test "$prev" = dlprefiles; then
  +	  # The library was specified with -dlpreopen.
  +	  dlprefiles="$dlprefiles $arg"
  +	  prev=
  +	else
  +	  deplibs="$deplibs $arg"
  +	fi
  +	continue
  +	;;
  +
  +      # Some other compiler argument.
  +      *)
  +	# Unknown arguments in both finalize_command and compile_command need
  +	# to be aesthetically quoted because they are evaled later.
  +	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
  +	case $arg in
  +	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
  +	  arg="\"$arg\""
  +	  ;;
  +	esac
  +	;;
  +      esac # arg
  +
  +      # Now actually substitute the argument into the commands.
  +      if test -n "$arg"; then
  +	compile_command="$compile_command $arg"
  +	finalize_command="$finalize_command $arg"
  +      fi
  +    done # argument parsing loop
  +
  +    if test -n "$prev"; then
  +      $echo "$modename: the \`$prevarg' option requires an argument" 1>&2
  +      $echo "$help" 1>&2
  +      exit 1
  +    fi
  +
  +    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
  +      eval arg=\"$export_dynamic_flag_spec\"
  +      compile_command="$compile_command $arg"
  +      finalize_command="$finalize_command $arg"
  +    fi
  +
  +    # calculate the name of the file, without its directory
  +    outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
  +    libobjs_save="$libobjs"
  +
  +    if test -n "$shlibpath_var"; then
  +      # get the directories listed in $shlibpath_var
  +      eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
  +    else
  +      shlib_search_path=
  +    fi
  +    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
  +    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
  +
  +    output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
  +    if test "X$output_objdir" = "X$output"; then
  +      output_objdir="$objdir"
  +    else
  +      output_objdir="$output_objdir/$objdir"
  +    fi
  +    # Create the object directory.
  +    if test ! -d $output_objdir; then
  +      $show "$mkdir $output_objdir"
  +      $run $mkdir $output_objdir
  +      status=$?
  +      if test $status -ne 0 && test ! -d $output_objdir; then
  +	exit $status
  +      fi
  +    fi
  +
  +    # Determine the type of output
  +    case $output in
  +    "")
  +      $echo "$modename: you must specify an output file" 1>&2
  +      $echo "$help" 1>&2
  +      exit 1
  +      ;;
  +    *.$libext) linkmode=oldlib ;;
  +    *.lo | *.$objext) linkmode=obj ;;
  +    *.la) linkmode=lib ;;
  +    *) linkmode=prog ;; # Anything else should be a program.
  +    esac
   
  +    specialdeplibs=
  +    libs=
  +    # Find all interdependent deplibs by searching for libraries
  +    # that are linked more than once (e.g. -la -lb -la)
  +    for deplib in $deplibs; do
  +      case "$libs " in
  +      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
  +      esac
  +      libs="$libs $deplib"
  +    done
  +    deplibs=
  +    newdependency_libs=
  +    newlib_search_path=
  +    need_relink=no # whether we're linking any uninstalled libtool libraries
  +    notinst_deplibs= # not-installed libtool libraries
  +    notinst_path= # paths that contain not-installed libtool libraries
  +    case $linkmode in
  +    lib)
  +	passes="conv link"
  +	for file in $dlfiles $dlprefiles; do
  +	  case $file in
  +	  *.la) ;;
  +	  *)
  +	    $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2
  +	    exit 1
  +	    ;;
  +	  esac
  +	done
  +	;;
  +    prog)
  +	compile_deplibs=
  +	finalize_deplibs=
  +	alldeplibs=no
  +	newdlfiles=
  +	newdlprefiles=
  +	passes="conv scan dlopen dlpreopen link"
  +	;;
  +    *)  passes="conv"
  +	;;
  +    esac
  +    for pass in $passes; do
  +      if test $linkmode = prog; then
  +	# Determine which files to process
  +	case $pass in
  +	dlopen)
  +	  libs="$dlfiles"
  +	  save_deplibs="$deplibs" # Collect dlpreopened libraries
  +	  deplibs=
  +	  ;;
  +	dlpreopen) libs="$dlprefiles" ;;
  +	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
  +	esac
  +      fi
  +      for deplib in $libs; do
  +	lib=
  +	found=no
  +	case $deplib in
  +	-l*)
  +	  if test $linkmode = oldlib && test $linkmode = obj; then
  +	    $echo "$modename: warning: \`-l' is ignored for archives/objects: $deplib" 1>&2
  +	    continue
  +	  fi
  +	  if test $pass = conv; then
  +	    deplibs="$deplib $deplibs"
  +	    continue
  +	  fi
  +	  name=`$echo "X$deplib" | $Xsed -e 's/^-l//'`
  +	  for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do
  +	    # Search the libtool library
  +	    lib="$searchdir/lib${name}.la"
  +	    if test -f "$lib"; then
  +	      found=yes
  +	      break
  +	    fi
  +	  done
  +	  if test "$found" != yes; then
  +	    # deplib doesn't seem to be a libtool library
  +	    if test "$linkmode,$pass" = "prog,link"; then
  +	      compile_deplibs="$deplib $compile_deplibs"
  +	      finalize_deplibs="$deplib $finalize_deplibs"
  +	    else
  +	      deplibs="$deplib $deplibs"
  +	      test $linkmode = lib && newdependency_libs="$deplib $newdependency_libs"
  +	    fi
  +	    continue
  +	  fi
  +	  ;; # -l
  +	-L*)
  +	  case $linkmode in
  +	  lib)
  +	    deplibs="$deplib $deplibs"
  +	    test $pass = conv && continue
  +	    newdependency_libs="$deplib $newdependency_libs"
  +	    newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
  +	    ;;
  +	  prog)
  +	    if test $pass = conv; then
  +	      deplibs="$deplib $deplibs"
  +	      continue
  +	    fi
  +	    if test $pass = scan; then
  +	      deplibs="$deplib $deplibs"
  +	      newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
  +	    else
  +	      compile_deplibs="$deplib $compile_deplibs"
  +	      finalize_deplibs="$deplib $finalize_deplibs"
  +	    fi
  +	    ;;
  +	  *)
  +	    $echo "$modename: warning: \`-L' is ignored for archives/objects: $deplib" 1>&2
  +	    ;;
  +	  esac # linkmode
  +	  continue
  +	  ;; # -L
  +	-R*)
  +	  if test $pass = link; then
  +	    dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
  +	    # Make sure the xrpath contains only unique directories.
  +	    case "$xrpath " in
  +	    *" $dir "*) ;;
  +	    *) xrpath="$xrpath $dir" ;;
  +	    esac
  +	  fi
  +	  deplibs="$deplib $deplibs"
  +	  continue
  +	  ;;
  +	*.la) lib="$deplib" ;;
  +	*.$libext)
  +	  if test $pass = conv; then
  +	    deplibs="$deplib $deplibs"
  +	    continue
  +	  fi
  +	  case $linkmode in
  +	  lib)
  +	    if test "$deplibs_check_method" != pass_all; then
  +	      echo
  +	      echo "*** Warning: This library needs some functionality provided by $deplib."
  +	      echo "*** I have the capability to make that library automatically link in when"
  +	      echo "*** you link to this library.  But I can only do this if you have a"
  +	      echo "*** shared version of the library, which you do not appear to have."
  +	    else
  +	      echo
  +	      echo "*** Warning: Linking the shared library $output against the"
  +	      echo "*** static library $deplib is not portable!"
  +	      deplibs="$deplib $deplibs"
  +	    fi
  +	    continue
  +	    ;;
  +	  prog)
  +	    if test $pass != link; then
  +	      deplibs="$deplib $deplibs"
  +	    else
  +	      compile_deplibs="$deplib $compile_deplibs"
  +	      finalize_deplibs="$deplib $finalize_deplibs"
  +	    fi
  +	    continue
  +	    ;;
  +	  esac # linkmode
  +	  ;; # *.$libext
  +	*.lo | *.$objext)
  +	  if test $pass = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
  +	    # If there is no dlopen support or we're linking statically,
  +	    # we need to preload.
  +	    newdlprefiles="$newdlprefiles $deplib"
  +	    compile_deplibs="$deplib $compile_deplibs"
  +	    finalize_deplibs="$deplib $finalize_deplibs"
  +	  else
  +	    newdlfiles="$newdlfiles $deplib"
  +	  fi
  +	  continue
  +	  ;;
  +	%DEPLIBS%)
  +	  alldeplibs=yes
  +	  continue
  +	  ;;
  +	esac # case $deplib
  +	if test $found = yes || test -f "$lib"; then :
  +	else
  +	  $echo "$modename: cannot find the library \`$lib'" 1>&2
  +	  exit 1
  +	fi
  +
   	# Check to see that this really is a libtool archive.
  -	if (sed -e '2q' $arg | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
  +	if (sed -e '2q' $lib | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
   	else
  -	  $echo "$modename: \`$arg' is not a valid libtool archive" 1>&2
  +	  $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
   	  exit 1
   	fi
   
  +	ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
  +	test "X$ladir" = "X$lib" && ladir="."
  +
  +	dlname=
  +	dlopen=
  +	dlpreopen=
  +	libdir=
  +	library_names=
  +	old_library=
   	# If the library was installed with an old release of libtool,
   	# it will not redefine variable installed.
   	installed=yes
   
   	# Read the .la file
  -	# If there is no directory component, then add one.
  -	case "$arg" in
  -	*/* | *\\*) . $arg ;;
  -	*) . ./$arg ;;
  +	case $lib in
  +	*/* | *\\*) . $lib ;;
  +	*) . ./$lib ;;
   	esac
   
  +	if test "$linkmode,$pass" = "lib,link" ||
  +	   test "$linkmode,$pass" = "prog,scan" ||
  +	   { test $linkmode = oldlib && test $linkmode = obj; }; then
  +	   # Add dl[pre]opened files of deplib
  +	  test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
  +	  test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
  +	fi
  +
  +	if test $pass = conv; then
  +	  # Only check for convenience libraries
  +	  deplibs="$lib $deplibs"
  +	  if test -z "$libdir"; then
  +	    if test -z "$old_library"; then
  +	      $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
  +	      exit 1
  +	    fi
  +	    # It is a libtool convenience library, so add in its objects.
  +	    convenience="$convenience $ladir/$objdir/$old_library"
  +	    old_convenience="$old_convenience $ladir/$objdir/$old_library"
  +	    tmp_libs=
  +	    for deplib in $dependency_libs; do
  +	      deplibs="$deplib $deplibs"
  +	      case "$tmp_libs " in
  +	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
  +	      esac
  +	      tmp_libs="$tmp_libs $deplib"
  +	    done
  +	  elif test $linkmode != prog && test $linkmode != lib; then
  +	    $echo "$modename: \`$lib' is not a convenience library" 1>&2
  +	    exit 1
  +	  fi
  +	  continue
  +	fi # $pass = conv
  +
   	# Get the name of the library we link against.
   	linklib=
   	for l in $old_library $library_names; do
   	  linklib="$l"
   	done
  -
   	if test -z "$linklib"; then
  -	  $echo "$modename: cannot find name of link library for \`$arg'" 1>&2
  +	  $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
   	  exit 1
   	fi
   
  -	# Find the relevant object directory and library name.
  -	name=`$echo "X$arg" | $Xsed -e 's%^.*/%%' -e 's/\.la$//' -e 's/^lib//'`
  -
  -	if test "X$installed" = Xyes; then
  -	  dir="$libdir"
  -	else
  -	  dir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
  -	  if test "X$dir" = "X$arg"; then
  -	    dir="$objdir"
  +	# This library was specified with -dlopen.
  +	if test $pass = dlopen; then
  +	  if test -z "$libdir"; then
  +	    $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2
  +	    exit 1
  +	  fi
  +	  if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
  +	    # If there is no dlname, no dlopen support or we're linking
  +	    # statically, we need to preload.
  +	    dlprefiles="$dlprefiles $lib"
   	  else
  -	    dir="$dir/$objdir"
  +	    newdlfiles="$newdlfiles $lib"
   	  fi
  -	fi
  -
  -	if test -n "$dependency_libs"; then
  -	  # Extract -R and -L from dependency_libs
  -	  temp_deplibs=
  -	  for deplib in $dependency_libs; do
  -	    case "$deplib" in
  -	    -R*) temp_xrpath=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
  -		 case " $rpath $xrpath " in
  -		 *" $temp_xrpath "*) ;;
  -		 *) xrpath="$xrpath $temp_xrpath";;
  -		 esac;;
  -	    -L*) case "$compile_command $temp_deplibs " in
  -		 *" $deplib "*) ;;
  -		 *) temp_deplibs="$temp_deplibs $deplib";;
  -		 esac
  -		 temp_dir=`$echo "X$deplib" | $Xsed -e 's/^-L//'`
  -		 case " $lib_search_path " in
  -		 *" $temp_dir "*) ;;
  -		 *) lib_search_path="$lib_search_path $temp_dir";;
  -		 esac
  -		 ;;
  -	    *) temp_deplibs="$temp_deplibs $deplib";;
  -	    esac
  -	  done
  -	  dependency_libs="$temp_deplibs"
  -	fi
  -
  -	if test -z "$libdir"; then
  -	  # It is a libtool convenience library, so add in its objects.
  -	  convenience="$convenience $dir/$old_library"
  -	  old_convenience="$old_convenience $dir/$old_library"
  -	  deplibs="$deplibs$dependency_libs"
  -	  compile_command="$compile_command $dir/$old_library$dependency_libs"
  -	  finalize_command="$finalize_command $dir/$old_library$dependency_libs"
   	  continue
  -	fi
  +	fi # $pass = dlopen
   
  -	# This library was specified with -dlopen.
  -	if test "$prev" = dlfiles; then
  -	  dlfiles="$dlfiles $arg"
  -	  if test -z "$dlname" || test "$dlopen" != yes || test "$build_libtool_libs" = no; then
  -	    # If there is no dlname, no dlopen support or we're linking statically,
  -	    # we need to preload.
  -	    prev=dlprefiles
  -	  else
  -	    # We should not create a dependency on this library, but we
  -	    # may need any libraries it requires.
  -	    compile_command="$compile_command$dependency_libs"
  -	    finalize_command="$finalize_command$dependency_libs"
  -	    prev=
  -	    continue
  +	# We need an absolute path.
  +	case $ladir in
  +	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
  +	*)
  +	  abs_ladir=`cd "$ladir" && pwd`
  +	  if test -z "$abs_ladir"; then
  +	    $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2
  +	    $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
  +	    abs_ladir="$ladir"
   	  fi
  -	fi
  +	  ;;
  +	esac
  +	laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
   
  -	# The library was specified with -dlpreopen.
  -	if test "$prev" = dlprefiles; then
  +	# Find the relevant object directory and library name.
  +	if test "X$installed" = Xyes; then
  +	  if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
  +	    $echo "$modename: warning: library \`$lib' was moved." 1>&2
  +	    dir="$ladir"
  +	    absdir="$abs_ladir"
  +	    libdir="$abs_ladir"
  +	  else
  +	    dir="$libdir"
  +	    absdir="$libdir"
  +	  fi
  +	else
  +	  dir="$ladir/$objdir"
  +	  absdir="$abs_ladir/$objdir"
  +	  # Remove this search path later
  +	  notinst_path="$notinst_path $abs_ladir"
  +	fi # $installed = yes
  +	name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
  +
  +	# This library was specified with -dlpreopen.
  +	if test $pass = dlpreopen; then
  +	  if test -z "$libdir"; then
  +	    $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2
  +	    exit 1
  +	  fi
   	  # Prefer using a static library (so that no silly _DYNAMIC symbols
   	  # are required to link).
   	  if test -n "$old_library"; then
  -	    dlprefiles="$dlprefiles $dir/$old_library"
  +	    newdlprefiles="$newdlprefiles $dir/$old_library"
  +	  # Otherwise, use the dlname, so that lt_dlopen finds it.
  +	  elif test -n "$dlname"; then
  +	    newdlprefiles="$newdlprefiles $dir/$dlname"
   	  else
  -	    dlprefiles="$dlprefiles $dir/$linklib"
  +	    newdlprefiles="$newdlprefiles $dir/$linklib"
   	  fi
  -	  prev=
  +	fi # $pass = dlpreopen
  +
  +	if test -z "$libdir"; then
  +	  # Link the convenience library
  +	  if test $linkmode = lib; then
  +	    deplibs="$dir/$old_library $deplibs"
  +	  elif test "$linkmode,$pass" = "prog,link"; then
  +	    compile_deplibs="$dir/$old_library $compile_deplibs"
  +	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
  +	  else
  +	    deplibs="$lib $deplibs"
  +	  fi
  +	  continue
   	fi
   
  -	if test -n "$library_names" &&
  -	   { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
  -	  link_against_libtool_libs="$link_against_libtool_libs $arg"
  -	  if test -n "$shlibpath_var"; then
  -	    # Make sure the rpath contains only unique directories.
  -	    case "$temp_rpath " in
  -	    *" $dir "*) ;;
  -	    *) temp_rpath="$temp_rpath $dir" ;;
  -	    esac
  +	if test $linkmode = prog && test $pass != link; then
  +	  newlib_search_path="$newlib_search_path $ladir"
  +	  deplibs="$lib $deplibs"
  +
  +	  linkalldeplibs=no
  +	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
  +	     test "$build_libtool_libs" = no; then
  +	    linkalldeplibs=yes
   	  fi
   
  -	  # We need an absolute path.
  -	  case "$dir" in
  -	  [\\/] | [A-Za-z]:[\\/]*) absdir="$dir" ;;
  -	  *)
  -	    absdir=`cd "$dir" && pwd`
  -	    if test -z "$absdir"; then
  -	      $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
  -	      $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
  -	      absdir="$dir"
  +	  tmp_libs=
  +	  for deplib in $dependency_libs; do
  +	    case $deplib in
  +	    -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test
  +	    esac
  +	    # Need to link against all dependency_libs?
  +	    if test $linkalldeplibs = yes; then
  +	      deplibs="$deplib $deplibs"
  +	    else
  +	      # Need to hardcode shared library paths
  +	      # or/and link against static libraries
  +	      newdependency_libs="$deplib $newdependency_libs"
   	    fi
  -	    ;;
  -	  esac
  -	  
  -	  # This is the magic to use -rpath.
  -	  # Skip directories that are in the system default run-time
  -	  # search path, unless they have been requested with -R.
  -	  case " $sys_lib_dlsearch_path " in
  -	  *" $absdir "*) ;;
  -	  *)
  -	    case "$compile_rpath " in
  -	    *" $absdir "*) ;;
  -	    *) compile_rpath="$compile_rpath $absdir" 
  +	    case "$tmp_libs " in
  +	    *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
   	    esac
  -	    ;;
  -	  esac
  +	    tmp_libs="$tmp_libs $deplib"
  +	  done # for deplib
  +	  continue
  +	fi # $linkmode = prog...
   
  -	  case " $sys_lib_dlsearch_path " in
  -	  *" $libdir "*) ;;
  -	  *)
  -	    case "$finalize_rpath " in
  +	link_static=no # Whether the deplib will be linked statically
  +	if test -n "$library_names" &&
  +	   { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
  +	  # Link against this shared library
  +
  +	  if test "$linkmode,$pass" = "prog,link" ||
  +	   { test $linkmode = lib && test $hardcode_into_libs = yes; }; then
  +	    # Hardcode the library path.
  +	    # Skip directories that are in the system default run-time
  +	    # search path.
  +	    case " $sys_lib_dlsearch_path " in
  +	    *" $absdir "*) ;;
  +	    *)
  +	      case "$compile_rpath " in
  +	      *" $absdir "*) ;;
  +	      *) compile_rpath="$compile_rpath $absdir"
  +	      esac
  +	      ;;
  +	    esac
  +	    case " $sys_lib_dlsearch_path " in
   	    *" $libdir "*) ;;
  -	    *) finalize_rpath="$finalize_rpath $libdir"
  +	    *)
  +	      case "$finalize_rpath " in
  +	      *" $libdir "*) ;;
  +	      *) finalize_rpath="$finalize_rpath $libdir"
  +	      esac
  +	      ;;
   	    esac
  -	    ;;
  -	  esac
  +	    if test $linkmode = prog; then
  +	      # We need to hardcode the library path
  +	      if test -n "$shlibpath_var"; then
  +		# Make sure the rpath contains only unique directories.
  +		case "$temp_rpath " in
  +		*" $dir "*) ;;
  +		*" $absdir "*) ;;
  +		*) temp_rpath="$temp_rpath $dir" ;;
  +		esac
  +	      fi
  +	    fi
  +	  fi # $linkmode,$pass = prog,link...
   
  -	  lib_linked=yes
  -	  case "$hardcode_action" in
  -	  immediate | unsupported)
  -	    if test "$hardcode_direct" = no; then
  -	      compile_command="$compile_command $dir/$linklib"
  -	      deplibs="$deplibs $dir/$linklib"
  -	      case "$host" in
  -	      *-*-cygwin* | *-*-mingw* | *-*-os2*)
  -		dllsearchdir=`cd "$dir" && pwd || echo "$dir"`
  -		if test -n "$dllsearchpath"; then
  -		  dllsearchpath="$dllsearchpath:$dllsearchdir"
  -		else
  -		  dllsearchpath="$dllsearchdir"
  -		fi
  -		;;
  -	      esac
  -	    elif test "$hardcode_minus_L" = no; then
  -	      case "$host" in
  -	      *-*-sunos*)
  -		compile_shlibpath="$compile_shlibpath$dir:"
  +	  if test "$alldeplibs" = yes &&
  +	     { test "$deplibs_check_method" = pass_all ||
  +	       { test "$build_libtool_libs" = yes &&
  +		 test -n "$library_names"; }; }; then
  +	    # We only need to search for static libraries
  +	    continue
  +	  fi
  +
  +	  if test "$installed" = no; then
  +	    notinst_deplibs="$notinst_deplibs $lib"
  +	    need_relink=yes
  +	  fi
  +
  +	  if test -n "$old_archive_from_expsyms_cmds"; then
  +	    # figure out the soname
  +	    set dummy $library_names
  +	    realname="$2"
  +	    shift; shift
  +	    libname=`eval \\$echo \"$libname_spec\"`
  +	    # use dlname if we got it. it's perfectly good, no?
  +	    if test -n "$dlname"; then
  +	      soname="$dlname"
  +	    elif test -n "$soname_spec"; then
  +	      # bleh windows
  +	      case $host in
  +	      *cygwin*)
  +		major=`expr $current - $age`
  +		versuffix="-$major"
   		;;
  -	      esac
  -	      case "$compile_command " in
  -	      *" -L$dir "*) ;;
  -	      *) compile_command="$compile_command -L$dir";;
   	      esac
  -	      compile_command="$compile_command -l$name"
  -	      deplibs="$deplibs -L$dir -l$name"
  -	    elif test "$hardcode_shlibpath_var" = no; then
  -	      case ":$compile_shlibpath:" in
  -	      *":$dir:"*) ;;
  -	      *) compile_shlibpath="$compile_shlibpath$dir:";;
  +	      eval soname=\"$soname_spec\"
  +	    else
  +	      soname="$realname"
  +	    fi
  +
  +	    # Make a new name for the extract_expsyms_cmds to use
  +	    soroot="$soname"
  +	    soname=`echo $soroot | sed -e 's/^.*\///'`
  +	    newlib="libimp-`echo $soname | sed 's/^lib//;s/\.dll$//'`.a"
  +
  +	    # If the library has no export list, then create one now
  +	    if test -f "$output_objdir/$soname-def"; then :
  +	    else
  +	      $show "extracting exported symbol list from \`$soname'"
  +	      IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
  +	      eval cmds=\"$extract_expsyms_cmds\"
  +	      for cmd in $cmds; do
  +		IFS="$save_ifs"
  +		$show "$cmd"
  +		$run eval "$cmd" || exit $?
  +	      done
  +	      IFS="$save_ifs"
  +	    fi
  +
  +	    # Create $newlib
  +	    if test -f "$output_objdir/$newlib"; then :; else
  +	      $show "generating import library for \`$soname'"
  +	      IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
  +	      eval cmds=\"$old_archive_from_expsyms_cmds\"
  +	      for cmd in $cmds; do
  +		IFS="$save_ifs"
  +		$show "$cmd"
  +		$run eval "$cmd" || exit $?
  +	      done
  +	      IFS="$save_ifs"
  +	    fi
  +	    # make sure the library variables are pointing to the new library
  +	    dir=$output_objdir
  +	    linklib=$newlib
  +	  fi # test -n $old_archive_from_expsyms_cmds
  +
  +	  if test $linkmode = prog || test "$mode" != relink; then
  +	    add_shlibpath=
  +	    add_dir=
  +	    add=
  +	    lib_linked=yes
  +	    case $hardcode_action in
  +	    immediate | unsupported)
  +	      if test "$hardcode_direct" = no; then
  +		add="$dir/$linklib"
  +	      elif test "$hardcode_minus_L" = no; then
  +		case $host in
  +		*-*-sunos*) add_shlibpath="$dir" ;;
  +		esac
  +		add_dir="-L$dir"
  +		add="-l$name"
  +	      elif test "$hardcode_shlibpath_var" = no; then
  +		add_shlibpath="$dir"
  +		add="-l$name"
  +	      else
  +		lib_linked=no
  +	      fi
  +	      ;;
  +	    relink)
  +	      if test "$hardcode_direct" = yes; then
  +		add="$dir/$linklib"
  +	      elif test "$hardcode_minus_L" = yes; then
  +		add_dir="-L$dir"
  +		add="-l$name"
  +	      elif test "$hardcode_shlibpath_var" = yes; then
  +		add_shlibpath="$dir"
  +		add="-l$name"
  +	      else
  +		lib_linked=no
  +	      fi
  +	      ;;
  +	    *) lib_linked=no ;;
  +	    esac
  +
  +	    if test "$lib_linked" != yes; then
  +	      $echo "$modename: configuration error: unsupported hardcode properties"
  +	      exit 1
  +	    fi
  +
  +	    if test -n "$add_shlibpath"; then
  +	      case :$compile_shlibpath: in
  +	      *":$add_shlibpath:"*) ;;
  +	      *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
   	      esac
  -	      compile_command="$compile_command -l$name"
  -	      deplibs="$deplibs -l$name"
  +	    fi
  +	    if test $linkmode = prog; then
  +	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
  +	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
   	    else
  -	      lib_linked=no
  +	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
  +	      test -n "$add" && deplibs="$add $deplibs"
  +	      if test "$hardcode_direct" != yes && \
  +		 test "$hardcode_minus_L" != yes && \
  +		 test "$hardcode_shlibpath_var" = yes; then
  +		case :$finalize_shlibpath: in
  +		*":$libdir:"*) ;;
  +		*) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
  +		esac
  +	      fi
   	    fi
  -	    ;;
  +	  fi
   
  -	  relink)
  +	  if test $linkmode = prog || test "$mode" = relink; then
  +	    add_shlibpath=
  +	    add_dir=
  +	    add=
  +	    # Finalize command for both is simple: just hardcode it.
   	    if test "$hardcode_direct" = yes; then
  -	      compile_command="$compile_command $absdir/$linklib"
  -	      deplibs="$deplibs $absdir/$linklib"
  +	      add="$libdir/$linklib"
   	    elif test "$hardcode_minus_L" = yes; then
  -	      case "$compile_command " in
  -	      *" -L$absdir "*) ;;
  -	      *) compile_command="$compile_command -L$absdir";;
  -	      esac
  -	      compile_command="$compile_command -l$name"
  -	      deplibs="$deplibs -L$absdir -l$name"
  +	      add_dir="-L$libdir"
  +	      add="-l$name"
   	    elif test "$hardcode_shlibpath_var" = yes; then
  -	      case ":$compile_shlibpath:" in
  -	      *":$absdir:"*) ;;
  -	      *) compile_shlibpath="$compile_shlibpath$absdir:";;
  +	      case :$finalize_shlibpath: in
  +	      *":$libdir:"*) ;;
  +	      *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
   	      esac
  -	      compile_command="$compile_command -l$name"
  -	      deplibs="$deplibs -l$name"
  +	      add="-l$name"
   	    else
  -	      lib_linked=no
  +	      # We cannot seem to hardcode it, guess we'll fake it.
  +	      add_dir="-L$libdir"
  +	      add="-l$name"
   	    fi
  -	    ;;
   
  -	  *)
  -	    lib_linked=no
  -	    ;;
  -	  esac
  -
  -	  if test "$lib_linked" != yes; then
  -	    $echo "$modename: configuration error: unsupported hardcode properties"
  -	    exit 1
  -	  fi
  -
  -	  # Finalize command for both is simple: just hardcode it.
  -	  if test "$hardcode_direct" = yes; then
  -	    finalize_command="$finalize_command $libdir/$linklib"
  -	  elif test "$hardcode_minus_L" = yes; then
  -	    case "$finalize_command " in
  -	    *" -L$libdir "*) ;;
  -	    *) finalize_command="$finalize_command -L$libdir";;
  -	    esac
  -	    finalize_command="$finalize_command -l$name"
  -	  elif test "$hardcode_shlibpath_var" = yes; then
  -	    case ":$finalize_shlibpath:" in
  -	    *":$libdir:"*) ;;
  -	    *) finalize_shlibpath="$finalize_shlibpath$libdir:";;
  -	    esac
  -	    finalize_command="$finalize_command -l$name"
  -	  else
  -	    # We cannot seem to hardcode it, guess we'll fake it.
  -	    case "$finalize_command " in
  -	    *" -L$dir "*) ;;
  -	    *) finalize_command="$finalize_command -L$libdir";;
  -	    esac
  -	    finalize_command="$finalize_command -l$name"
  +	    if test $linkmode = prog; then
  +	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
  +	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
  +	    else
  +	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
  +	      test -n "$add" && deplibs="$add $deplibs"
  +	    fi
   	  fi
  -	else
  -	  # Transform directly to old archives if we don't build new libraries.
  -	  if test -n "$pic_flag" && test -z "$old_library"; then
  -	    $echo "$modename: cannot find static library for \`$arg'" 1>&2
  -	    exit 1
  +	elif test $linkmode = prog; then
  +	  if test "$alldeplibs" = yes &&
  +	     { test "$deplibs_check_method" = pass_all ||
  +	       { test "$build_libtool_libs" = yes &&
  +		 test -n "$library_names"; }; }; then
  +	    # We only need to search for static libraries
  +	    continue
   	  fi
   
  +	  # Try to link the static library
   	  # Here we assume that one of hardcode_direct or hardcode_minus_L
   	  # is not unsupported.  This is valid on all known static and
   	  # shared platforms.
   	  if test "$hardcode_direct" != unsupported; then
   	    test -n "$old_library" && linklib="$old_library"
  -	    compile_command="$compile_command $dir/$linklib"
  -	    finalize_command="$finalize_command $dir/$linklib"
  +	    compile_deplibs="$dir/$linklib $compile_deplibs"
  +	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
   	  else
  -	    case "$compile_command " in
  -	    *" -L$dir "*) ;;
  -	    *) compile_command="$compile_command -L$dir";;
  -	    esac
  -	    compile_command="$compile_command -l$name"
  -	    case "$finalize_command " in
  -	    *" -L$dir "*) ;;
  -	    *) finalize_command="$finalize_command -L$dir";;
  -	    esac
  -	    finalize_command="$finalize_command -l$name"
  +	    compile_deplibs="-l$name -L$dir $compile_deplibs"
  +	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
   	  fi
  -	fi
  -
  -	# Add in any libraries that this one depends upon.
  -	compile_command="$compile_command$dependency_libs"
  -	finalize_command="$finalize_command$dependency_libs"
  -	continue
  -	;;
  -
  -      # Some other compiler argument.
  -      *)
  -	# Unknown arguments in both finalize_command and compile_command need
  -	# to be aesthetically quoted because they are evaled later.
  -	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
  -	case "$arg" in
  -	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
  -	  arg="\"$arg\""
  -	  ;;
  -	esac
  -	;;
  -      esac
  -
  -      # Now actually substitute the argument into the commands.
  -      if test -n "$arg"; then
  -	compile_command="$compile_command $arg"
  -	finalize_command="$finalize_command $arg"
  -      fi
  -    done
  -
  -    if test -n "$prev"; then
  -      $echo "$modename: the \`$prevarg' option requires an argument" 1>&2
  -      $echo "$help" 1>&2
  -      exit 1
  -    fi
  -
  -    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
  -      eval arg=\"$export_dynamic_flag_spec\"
  -      compile_command="$compile_command $arg"
  -      finalize_command="$finalize_command $arg"
  -    fi
  +	elif test "$build_libtool_libs" = yes; then
  +	  # Not a shared library
  +	  if test "$deplibs_check_method" != pass_all; then
  +	    # We're trying link a shared library against a static one
  +	    # but the system doesn't support it.
   
  -    oldlibs=
  -    # calculate the name of the file, without its directory
  -    outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
  -    libobjs_save="$libobjs"
  +	    # Just print a warning and add the library to dependency_libs so
  +	    # that the program can be linked against the static library.
  +	    echo
  +	    echo "*** Warning: This library needs some functionality provided by $lib."
  +	    echo "*** I have the capability to make that library automatically link in when"
  +	    echo "*** you link to this library.  But I can only do this if you have a"
  +	    echo "*** shared version of the library, which you do not appear to have."
  +	    if test "$module" = yes; then
  +	      echo "*** Therefore, libtool will create a static module, that should work "
  +	      echo "*** as long as the dlopening application is linked with the -dlopen flag."
  +	      if test -z "$global_symbol_pipe"; then
  +	        echo
  +	        echo "*** However, this would only work if libtool was able to extract symbol"
  +	        echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
  +	        echo "*** not find such a program.  So, this module is probably useless."
  +	        echo "*** \`nm' from GNU binutils and a full rebuild may help."
  +	      fi
  +	      if test "$build_old_libs" = no; then
  +	        build_libtool_libs=module
  +	        build_old_libs=yes
  +	      else
  +	        build_libtool_libs=no
  +	      fi
  +	    fi
  +	  else
  +	    convenience="$convenience $dir/$old_library"
  +	    old_convenience="$old_convenience $dir/$old_library"
  +	    deplibs="$dir/$old_library $deplibs"
  +	    link_static=yes
  +	  fi
  +	fi # link shared/static library?
  +
  +	if test $linkmode = lib; then
  +	  if test -n "$dependency_libs" &&
  +	     { test $hardcode_into_libs != yes || test $build_old_libs = yes ||
  +	       test $link_static = yes; }; then
  +	    # Extract -R from dependency_libs
  +	    temp_deplibs=
  +	    for libdir in $dependency_libs; do
  +	      case $libdir in
  +	      -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'`
  +		   case " $xrpath " in
  +		   *" $temp_xrpath "*) ;;
  +		   *) xrpath="$xrpath $temp_xrpath";;
  +		   esac;;
  +	      *) temp_deplibs="$temp_deplibs $libdir";;
  +	      esac
  +	    done
  +	    dependency_libs="$temp_deplibs"
  +	  fi
   
  -    case "$output" in
  -    "")
  -      $echo "$modename: you must specify an output file" 1>&2
  -      $echo "$help" 1>&2
  -      exit 1
  -      ;;
  +	  newlib_search_path="$newlib_search_path $absdir"
  +	  # Link against this library
  +	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
  +	  # ... and its dependency_libs
  +	  tmp_libs=
  +	  for deplib in $dependency_libs; do
  +	    newdependency_libs="$deplib $newdependency_libs"
  +	    case "$tmp_libs " in
  +	    *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
  +	    esac
  +	    tmp_libs="$tmp_libs $deplib"
  +	  done
   
  -    *.a | *.lib)
  -      if test -n "$link_against_libtool_libs"; then
  -	$echo "$modename: error: cannot link libtool libraries into archives" 1>&2
  -	exit 1
  +	  if test $link_all_deplibs != no; then
  +	    # Add the search paths of all dependency libraries
  +	    for deplib in $dependency_libs; do
  +	      case $deplib in
  +	      -L*) path="$deplib" ;;
  +	      *.la)
  +		dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'`
  +		test "X$dir" = "X$deplib" && dir="."
  +		# We need an absolute path.
  +		case $dir in
  +		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
  +		*)
  +		  absdir=`cd "$dir" && pwd`
  +		  if test -z "$absdir"; then
  +		    $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
  +		    absdir="$dir"
  +		  fi
  +		  ;;
  +		esac
  +		if grep "^installed=no" $deplib > /dev/null; then
  +		  path="-L$absdir/$objdir"
  +		else
  +		  eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
  +		  if test -z "$libdir"; then
  +		    $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
  +		    exit 1
  +		  fi
  +		  if test "$absdir" != "$libdir"; then
  +		    $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2
  +		  fi
  +		  path="-L$absdir"
  +		fi
  +		;;
  +	      *) continue ;;
  +	      esac
  +	      case " $deplibs " in
  +	      *" $path "*) ;;
  +	      *) deplibs="$deplibs $path" ;;
  +	      esac
  +	    done
  +	  fi # link_all_deplibs != no
  +	fi # linkmode = lib
  +      done # for deplib in $libs
  +      if test $pass = dlpreopen; then
  +	# Link the dlpreopened libraries before other libraries
  +	for deplib in $save_deplibs; do
  +	  deplibs="$deplib $deplibs"
  +	done
         fi
  +      if test $pass != dlopen; then
  +	test $pass != scan && dependency_libs="$newdependency_libs"
  +	if test $pass != conv; then
  +	  # Make sure lib_search_path contains only unique directories.
  +	  lib_search_path=
  +	  for dir in $newlib_search_path; do
  +	    case "$lib_search_path " in
  +	    *" $dir "*) ;;
  +	    *) lib_search_path="$lib_search_path $dir" ;;
  +	    esac
  +	  done
  +	  newlib_search_path=
  +	fi
   
  -      if test -n "$deplibs"; then
  -	$echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2
  +	if test "$linkmode,$pass" != "prog,link"; then
  +	  vars="deplibs"
  +	else
  +	  vars="compile_deplibs finalize_deplibs"
  +	fi
  +	for var in $vars dependency_libs; do
  +	  # Add libraries to $var in reverse order
  +	  eval tmp_libs=\"\$$var\"
  +	  new_libs=
  +	  for deplib in $tmp_libs; do
  +	    case $deplib in
  +	    -L*) new_libs="$deplib $new_libs" ;;
  +	    *)
  +	      case " $specialdeplibs " in
  +	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
  +	      *)
  +		case " $new_libs " in
  +		*" $deplib "*) ;;
  +		*) new_libs="$deplib $new_libs" ;;
  +		esac
  +		;;
  +	      esac
  +	      ;;
  +	    esac
  +	  done
  +	  tmp_libs=
  +	  for deplib in $new_libs; do
  +	    case $deplib in
  +	    -L*)
  +	      case " $tmp_libs " in
  +	      *" $deplib "*) ;;
  +	      *) tmp_libs="$tmp_libs $deplib" ;;
  +	      esac
  +	      ;;
  +	    *) tmp_libs="$tmp_libs $deplib" ;;
  +	    esac
  +	  done
  +	  eval $var=\"$tmp_libs\"
  +	done # for var
         fi
  +      if test "$pass" = "conv" &&
  +       { test "$linkmode" = "lib" || test "$linkmode" = "prog"; }; then
  +	libs="$deplibs" # reset libs
  +	deplibs=
  +      fi
  +    done # for pass
  +    if test $linkmode = prog; then
  +      dlfiles="$newdlfiles"
  +      dlprefiles="$newdlprefiles"
  +    fi
   
  +    case $linkmode in
  +    oldlib)
         if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
   	$echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2
         fi
  @@ -1566,11 +2107,12 @@
         # Now set the variables for building old libraries.
         build_libtool_libs=no
         oldlibs="$output"
  +      objs="$objs$old_deplibs"
         ;;
   
  -    *.la)
  +    lib)
         # Make sure we only generate libraries of the form `libNAME.la'.
  -      case "$outputname" in
  +      case $outputname in
         lib*)
   	name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
   	eval libname=\"$libname_spec\"
  @@ -1589,28 +2131,22 @@
   	  libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
   	fi
   	;;
  -      esac
  -
  -      output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
  -      if test "X$output_objdir" = "X$output"; then
  -	output_objdir="$objdir"
  -      else
  -	output_objdir="$output_objdir/$objdir"
  -      fi
  +      esac
   
         if test -n "$objs"; then
  -	$echo "$modename: cannot build libtool library \`$output' from non-libtool objects:$objs" 2>&1
  -	exit 1
  -      fi
  -
  -      # How the heck are we supposed to write a wrapper for a shared library?
  -      if test -n "$link_against_libtool_libs"; then
  -	 $echo "$modename: error: cannot link shared libraries into libtool libraries" 1>&2
  -	 exit 1
  +	if test "$deplibs_check_method" != pass_all; then
  +	  $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1
  +	  exit 1
  +	else
  +	  echo
  +	  echo "*** Warning: Linking the shared library $output against the non-libtool"
  +	  echo "*** objects $objs is not portable!"
  +	  libobjs="$libobjs $objs"
  +	fi
         fi
   
  -      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
  -	$echo "$modename: warning: \`-dlopen' is ignored for libtool libraries" 1>&2
  +      if test "$dlself" != no; then
  +	$echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2
         fi
   
         set dummy $rpath
  @@ -1628,7 +2164,6 @@
   	  build_libtool_libs=convenience
   	  build_old_libs=yes
   	fi
  -	dependency_libs="$deplibs"
   
   	if test -n "$vinfo"; then
   	  $echo "$modename: warning: \`-version-info' is ignored for convenience libraries" 1>&2
  @@ -1655,8 +2190,8 @@
   	age="$4"
   
   	# Check that each of the things are valid numbers.
  -	case "$current" in
  -	0 | [1-9] | [1-9][0-9]*) ;;
  +	case $current in
  +	0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
   	*)
   	  $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2
   	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
  @@ -1664,8 +2199,8 @@
   	  ;;
   	esac
   
  -	case "$revision" in
  -	0 | [1-9] | [1-9][0-9]*) ;;
  +	case $revision in
  +	0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
   	*)
   	  $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2
   	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
  @@ -1673,8 +2208,8 @@
   	  ;;
   	esac
   
  -	case "$age" in
  -	0 | [1-9] | [1-9][0-9]*) ;;
  +	case $age in
  +	0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
   	*)
   	  $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2
   	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
  @@ -1692,12 +2227,31 @@
   	major=
   	versuffix=
   	verstring=
  -	case "$version_type" in
  +	case $version_type in
   	none) ;;
   
  +	darwin)
  +	  # Like Linux, but with the current version available in
  +	  # verstring for coding it into the library header
  +	  major=.`expr $current - $age`
  +	  versuffix="$major.$age.$revision"
  +	  # Darwin ld doesn't like 0 for these options...
  +	  minor_current=`expr $current + 1`
  +	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
  +	  ;;
  +
  +	freebsd-aout)
  +	  major=".$current"
  +	  versuffix=".$current.$revision";
  +	  ;;
  +
  +	freebsd-elf)
  +	  major=".$current"
  +	  versuffix=".$current";
  +	  ;;
  +
   	irix)
   	  major=`expr $current - $age + 1`
  -	  versuffix="$major.$revision"
   	  verstring="sgi$major.$revision"
   
   	  # Add in all the interfaces that we are compatible with.
  @@ -1707,6 +2261,10 @@
   	    loop=`expr $loop - 1`
   	    verstring="sgi$major.$iface:$verstring"
   	  done
  +
  +	  # Before this point, $major must not contain `.'.
  +	  major=.$major
  +	  versuffix="$major.$revision"
   	  ;;
   
   	linux)
  @@ -1736,21 +2294,11 @@
   	  versuffix=".$current.$revision"
   	  ;;
   
  -	freebsd-aout)
  -	  major=".$current"
  -	  versuffix=".$current.$revision";
  -	  ;;
  -
  -	freebsd-elf)
  -	  major=".$current"
  -	  versuffix=".$current";
  -	  ;;
  -
   	windows)
  -	  # Like Linux, but with '-' rather than '.', since we only
  -	  # want one extension on Windows 95.
  +	  # Use '-' rather than '.', since we only want one
  +	  # extension on DOS 8.3 filesystems.
   	  major=`expr $current - $age`
  -	  versuffix="-$major-$age-$revision"
  +	  versuffix="-$major"
   	  ;;
   
   	*)
  @@ -1777,7 +2325,7 @@
   	  versuffix=
   	  verstring=""
   	fi
  -	
  +
   	# Check to see if the archive will have undefined symbols.
   	if test "$allow_undefined" = yes; then
   	  if test "$allow_undefined_flag" = unsupported; then
  @@ -1789,34 +2337,12 @@
   	  # Don't allow undefined symbols.
   	  allow_undefined_flag="$no_undefined_flag"
   	fi
  -
  -	dependency_libs="$deplibs"
  -	case "$host" in
  -	*-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*)
  -	  # these systems don't actually have a c library (as such)!
  -	  ;;
  -        *-*-rhapsody*)
  -	  # rhapsody is a little odd...
  -	  deplibs="$deplibs -framework System"
  -	  ;;
  -	*)
  -	  # Add libc to deplibs on all other systems.
  -	  deplibs="$deplibs -lc"
  -	  ;;
  -	esac
         fi
   
  -      # Create the output directory, or remove our outputs if we need to.
  -      if test -d $output_objdir; then
  +      if test "$mode" != relink; then
  +	# Remove our outputs.
   	$show "${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*"
   	$run ${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*
  -      else
  -	$show "$mkdir $output_objdir"
  -	$run $mkdir $output_objdir
  -	status=$?
  -	if test $status -ne 0 && test ! -d $output_objdir; then
  -	  exit $status
  -	fi
         fi
   
         # Now set the variables for building old libraries.
  @@ -1827,7 +2353,70 @@
   	oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
         fi
   
  +      # Eliminate all temporary directories.
  +      for path in $notinst_path; do
  +	lib_search_path=`echo "$lib_search_path " | sed -e 's% $path % %g'`
  +	deplibs=`echo "$deplibs " | sed -e 's% -L$path % %g'`
  +	dependency_libs=`echo "$dependency_libs " | sed -e 's% -L$path % %g'`
  +      done
  +
  +      if test -n "$xrpath"; then
  +	# If the user specified any rpath flags, then add them.
  +	temp_xrpath=
  +	for libdir in $xrpath; do
  +	  temp_xrpath="$temp_xrpath -R$libdir"
  +	  case "$finalize_rpath " in
  +	  *" $libdir "*) ;;
  +	  *) finalize_rpath="$finalize_rpath $libdir" ;;
  +	  esac
  +	done
  +	if test $hardcode_into_libs != yes || test $build_old_libs = yes; then
  +	  dependency_libs="$temp_xrpath $dependency_libs"
  +	fi
  +      fi
  +
  +      # Make sure dlfiles contains only unique files that won't be dlpreopened
  +      old_dlfiles="$dlfiles"
  +      dlfiles=
  +      for lib in $old_dlfiles; do
  +	case " $dlprefiles $dlfiles " in
  +	*" $lib "*) ;;
  +	*) dlfiles="$dlfiles $lib" ;;
  +	esac
  +      done
  +
  +      # Make sure dlprefiles contains only unique files
  +      old_dlprefiles="$dlprefiles"
  +      dlprefiles=
  +      for lib in $old_dlprefiles; do
  +	case "$dlprefiles " in
  +	*" $lib "*) ;;
  +	*) dlprefiles="$dlprefiles $lib" ;;
  +	esac
  +      done
  +
         if test "$build_libtool_libs" = yes; then
  +	if test -n "$rpath"; then
  +	  case $host in
  +	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*)
  +	    # these systems don't actually have a c library (as such)!
  +	    ;;
  +	  *-*-rhapsody* | *-*-darwin1.[012])
  +	    # Rhapsody C library is in the System framework
  +	    deplibs="$deplibs -framework System"
  +	    ;;
  +	  *-*-netbsd*)
  +	    # Don't link with libc until the a.out ld.so is fixed.
  +	    ;;
  +	  *)
  +	    # Add libc to deplibs on all other systems if necessary.
  +	    if test $build_libtool_need_lc = "yes"; then
  +	      deplibs="$deplibs -lc"
  +	    fi
  +	    ;;
  +	  esac
  +	fi
  +
   	# Transform deplibs into only deplibs that can be linked in shared.
   	name_save=$name
   	libname_save=$libname
  @@ -1842,7 +2431,7 @@
   	major=""
   	newdeplibs=
   	droppeddeps=no
  -	case "$deplibs_check_method" in
  +	case $deplibs_check_method in
   	pass_all)
   	  # Don't check for shared/static.  Everything works.
   	  # This might be a little naive.  We might want to check
  @@ -1867,7 +2456,7 @@
   	    for i in $deplibs; do
   	      name="`expr $i : '-l\(.*\)'`"
   	      # If $name is empty we are operating on a -L argument.
  -	      if test "$name" != "" ; then
  +	      if test -n "$name" && test "$name" != "0"; then
   		libname=`eval \\$echo \"$libname_spec\"`
   		deplib_matches=`eval \\$echo \"$library_names_spec\"`
   		set dummy $deplib_matches
  @@ -1892,7 +2481,7 @@
   	    for i in $deplibs; do
   	      name="`expr $i : '-l\(.*\)'`"
   	     # If $name is empty we are operating on a -L argument.
  -	      if test "$name" != "" ; then
  +	      if test -n "$name" && test "$name" != "0"; then
   		$rm conftest
   		$CC -o conftest conftest.c $i
   		# Did it work?
  @@ -1928,19 +2517,19 @@
   	  ;;
   	file_magic*)
   	  set dummy $deplibs_check_method
  -	  file_magic_regex="`expr \"$deplibs_check_method\" : \"$2 \(.*\)\"`"
  +	  file_magic_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
   	  for a_deplib in $deplibs; do
   	    name="`expr $a_deplib : '-l\(.*\)'`"
   	    # If $name is empty we are operating on a -L argument.
  -	    if test "$name" != "" ; then
  +	    if test -n "$name" && test "$name" != "0"; then
   	      libname=`eval \\$echo \"$libname_spec\"`
  -	      for i in $lib_search_path; do
  +	      for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
   		    potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
   		    for potent_lib in $potential_libs; do
   		      # Follow soft links.
   		      if ls -lLd "$potent_lib" 2>/dev/null \
   			 | grep " -> " >/dev/null; then
  -			continue 
  +			continue
   		      fi
   		      # The statement above tries to avoid entering an
   		      # endless loop below, in case of cyclic links.
  @@ -1950,7 +2539,7 @@
   		      potlib="$potent_lib"
   		      while test -h "$potlib" 2>/dev/null; do
   			potliblink=`ls -ld $potlib | sed 's/.* -> //'`
  -			case "$potliblink" in
  +			case $potliblink in
   			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
   			*) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
   			esac
  @@ -1978,6 +2567,40 @@
   	    fi
   	  done # Gone through all deplibs.
   	  ;;
  +	match_pattern*)
  +	  set dummy $deplibs_check_method
  +	  match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
  +	  for a_deplib in $deplibs; do
  +	    name="`expr $a_deplib : '-l\(.*\)'`"
  +	    # If $name is empty we are operating on a -L argument.
  +	    if test -n "$name" && test "$name" != "0"; then
  +	      libname=`eval \\$echo \"$libname_spec\"`
  +	      for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
  +		potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
  +		for potent_lib in $potential_libs; do
  +		  if eval echo \"$potent_lib\" 2>/dev/null \
  +		      | sed 10q \
  +		      | egrep "$match_pattern_regex" > /dev/null; then
  +		    newdeplibs="$newdeplibs $a_deplib"
  +		    a_deplib=""
  +		    break 2
  +		  fi
  +		done
  +	      done
  +	      if test -n "$a_deplib" ; then
  +		droppeddeps=yes
  +		echo
  +		echo "*** Warning: This library needs some functionality provided by $a_deplib."
  +		echo "*** I have the capability to make that library automatically link in when"
  +		echo "*** you link to this library.  But I can only do this if you have a"
  +		echo "*** shared version of the library, which you do not appear to have."
  +	      fi
  +	    else
  +	      # Add a -L argument.
  +	      newdeplibs="$newdeplibs $a_deplib"
  +	    fi
  +	  done # Gone through all deplibs.
  +	  ;;
   	none | unknown | *)
   	  newdeplibs=""
   	  if $echo "X $deplibs" | $Xsed -e 's/ -lc$//' \
  @@ -2000,6 +2623,13 @@
   	libname=$libname_save
   	name=$name_save
   
  +	case $host in
  +	*-*-rhapsody* | *-*-darwin1.[012])
  +	  # On Rhapsody replace the C library is the System framework
  +	  newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'`
  +	  ;;
  +	esac
  +
   	if test "$droppeddeps" = yes; then
   	  if test "$module" = yes; then
   	    echo
  @@ -2025,6 +2655,21 @@
   	    echo "*** The inter-library dependencies that have been dropped here will be"
   	    echo "*** automatically added whenever a program is linked with this library"
   	    echo "*** or is declared to -dlopen it."
  +
  +	    if test $allow_undefined = no; then
  +	      echo
  +	      echo "*** Since this library must not contain undefined symbols,"
  +	      echo "*** because either the platform does not support them or"
  +	      echo "*** it was explicitly requested with -no-undefined,"
  +	      echo "*** libtool will only create a static version of it."
  +	      if test "$build_old_libs" = no; then
  +		oldlibs="$output_objdir/$libname.$libext"
  +		build_libtool_libs=module
  +		build_old_libs=yes
  +	      else
  +		build_libtool_libs=no
  +	      fi
  +	    fi
   	  fi
   	fi
   	# Done checking deplibs!
  @@ -2035,9 +2680,64 @@
         library_names=
         old_library=
         dlname=
  -      
  +
         # Test again, we may have decided not to build it any more
         if test "$build_libtool_libs" = yes; then
  +	if test $hardcode_into_libs = yes; then
  +	  # Hardcode the library paths
  +	  hardcode_libdirs=
  +	  dep_rpath=
  +	  rpath="$finalize_rpath"
  +	  test "$mode" != relink && rpath="$compile_rpath$rpath"
  +	  for libdir in $rpath; do
  +	    if test -n "$hardcode_libdir_flag_spec"; then
  +	      if test -n "$hardcode_libdir_separator"; then
  +		if test -z "$hardcode_libdirs"; then
  +		  hardcode_libdirs="$libdir"
  +		else
  +		  # Just accumulate the unique libdirs.
  +		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
  +		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
  +		    ;;
  +		  *)
  +		    hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
  +		    ;;
  +		  esac
  +		fi
  +	      else
  +		eval flag=\"$hardcode_libdir_flag_spec\"
  +		dep_rpath="$dep_rpath $flag"
  +	      fi
  +	    elif test -n "$runpath_var"; then
  +	      case "$perm_rpath " in
  +	      *" $libdir "*) ;;
  +	      *) perm_rpath="$perm_rpath $libdir" ;;
  +	      esac
  +	    fi
  +	  done
  +	  # Substitute the hardcoded libdirs into the rpath.
  +	  if test -n "$hardcode_libdir_separator" &&
  +	     test -n "$hardcode_libdirs"; then
  +	    libdir="$hardcode_libdirs"
  +	    eval dep_rpath=\"$hardcode_libdir_flag_spec\"
  +	  fi
  +	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
  +	    # We should set the runpath_var.
  +	    rpath=
  +	    for dir in $perm_rpath; do
  +	      rpath="$rpath$dir:"
  +	    done
  +	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
  +	  fi
  +	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
  +	fi
  +
  +	shlibpath="$finalize_shlibpath"
  +	test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
  +	if test -n "$shlibpath"; then
  +	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
  +	fi
  +
   	# Get the real and link names of the library.
   	eval library_names=\"$library_names_spec\"
   	set dummy $library_names
  @@ -2049,6 +2749,7 @@
   	else
   	  soname="$realname"
   	fi
  +	test -z "$dlname" && dlname=$soname
   
   	lib="$output_objdir/$realname"
   	for link
  @@ -2120,7 +2821,7 @@
   
   	    for xlib in $convenience; do
   	      # Extract the objects.
  -	      case "$xlib" in
  +	      case $xlib in
   	      [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
   	      *) xabs=`pwd`"/$xlib" ;;
   	      esac
  @@ -2145,7 +2846,12 @@
   
   	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
   	  eval flag=\"$thread_safe_flag_spec\"
  -	  linkopts="$linkopts $flag"
  +	  linker_flags="$linker_flags $flag"
  +	fi
  +
  +	# Make a backup of the uninstalled library when relinking
  +	if test "$mode" = relink; then
  +	  $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $?
   	fi
   
   	# Do each of the archive commands.
  @@ -2162,6 +2868,12 @@
   	done
   	IFS="$save_ifs"
   
  +	# Restore the uninstalled library and exit
  +	if test "$mode" = relink; then
  +	  $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $?
  +	  exit 0
  +	fi
  +
   	# Create links to the real library.
   	for linkname in $linknames; do
   	  if test "$realname" != "$linkname"; then
  @@ -2178,12 +2890,7 @@
         fi
         ;;
   
  -    *.lo | *.o | *.obj)
  -      if test -n "$link_against_libtool_libs"; then
  -	$echo "$modename: error: cannot link libtool libraries into objects" 1>&2
  -	exit 1
  -      fi
  -
  +    obj)
         if test -n "$deplibs"; then
   	$echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2
         fi
  @@ -2208,9 +2915,9 @@
   	$echo "$modename: warning: \`-release' is ignored for objects" 1>&2
         fi
   
  -      case "$output" in
  +      case $output in
         *.lo)
  -	if test -n "$objs"; then
  +	if test -n "$objs$old_deplibs"; then
   	  $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2
   	  exit 1
   	fi
  @@ -2234,7 +2941,7 @@
         gentop=
         # reload_cmds runs $LD directly, so let us get rid of
         # -Wl from whole_archive_flag_spec
  -      wl= 
  +      wl=
   
         if test -n "$convenience"; then
   	if test -n "$whole_archive_flag_spec"; then
  @@ -2253,7 +2960,7 @@
   
   	  for xlib in $convenience; do
   	    # Extract the objects.
  -	    case "$xlib" in
  +	    case $xlib in
   	    [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
   	    *) xabs=`pwd`"/$xlib" ;;
   	    esac
  @@ -2277,7 +2984,7 @@
         fi
   
         # Create the old-style object.
  -      reload_objs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs"
  +      reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
   
         output="$obj"
         eval cmds=\"$reload_cmds\"
  @@ -2312,7 +3019,7 @@
   	exit 0
         fi
   
  -      if test -n "$pic_flag"; then
  +      if test -n "$pic_flag" || test "$pic_mode" != default; then
   	# Only do commands if we really have different PIC objects.
   	reload_objs="$libobjs $reload_conv_objs"
   	output="$libobj"
  @@ -2348,8 +3055,10 @@
         exit 0
         ;;
   
  -    # Anything else should be a program.
  -    *)
  +    prog)
  +      case $host in
  +	*cygwin*) output=`echo $output | sed -e 's,.exe$,,;s,$,.exe,'` ;;
  +      esac
         if test -n "$vinfo"; then
   	$echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2
         fi
  @@ -2359,20 +3068,27 @@
         fi
   
         if test "$preload" = yes; then
  -	if test "$dlopen" = unknown && test "$dlopen_self" = unknown &&
  +	if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown &&
   	   test "$dlopen_self_static" = unknown; then
   	  $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support."
  -	fi 
  +	fi
         fi
  -    
  +
  +      case $host in
  +      *-*-rhapsody* | *-*-darwin1.[012])
  +	# On Rhapsody replace the C library is the System framework
  +	compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
  +	finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
  +	;;
  +      esac
  +
  +      compile_command="$compile_command $compile_deplibs"
  +      finalize_command="$finalize_command $finalize_deplibs"
  +
         if test -n "$rpath$xrpath"; then
   	# If the user specified any rpath flags, then add them.
   	for libdir in $rpath $xrpath; do
   	  # This is the magic to use -rpath.
  -	  case "$compile_rpath " in
  -	  *" $libdir "*) ;;
  -	  *) compile_rpath="$compile_rpath $libdir" ;;
  -	  esac
   	  case "$finalize_rpath " in
   	  *" $libdir "*) ;;
   	  *) finalize_rpath="$finalize_rpath $libdir" ;;
  @@ -2390,7 +3106,7 @@
   	      hardcode_libdirs="$libdir"
   	    else
   	      # Just accumulate the unique libdirs.
  -	      case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in
  +	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
   	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
   		;;
   	      *)
  @@ -2408,6 +3124,14 @@
   	  *) perm_rpath="$perm_rpath $libdir" ;;
   	  esac
   	fi
  +	case $host in
  +	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
  +	  case :$dllsearchpath: in
  +	  *":$libdir:"*) ;;
  +	  *) dllsearchpath="$dllsearchpath:$libdir";;
  +	  esac
  +	  ;;
  +	esac
         done
         # Substitute the hardcoded libdirs into the rpath.
         if test -n "$hardcode_libdir_separator" &&
  @@ -2426,7 +3150,7 @@
   	      hardcode_libdirs="$libdir"
   	    else
   	      # Just accumulate the unique libdirs.
  -	      case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in
  +	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
   	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
   		;;
   	      *)
  @@ -2453,23 +3177,6 @@
         fi
         finalize_rpath="$rpath"
   
  -      output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
  -      if test "X$output_objdir" = "X$output"; then
  -	output_objdir="$objdir"
  -      else
  -	output_objdir="$output_objdir/$objdir"
  -      fi
  -
  -      # Create the binary in the object directory, then wrap it.
  -      if test ! -d $output_objdir; then
  -	$show "$mkdir $output_objdir"
  -	$run $mkdir $output_objdir
  -	status=$?
  -	if test $status -ne 0 && test ! -d $output_objdir; then
  -	  exit $status
  -	fi
  -      fi
  -
         if test -n "$libobjs" && test "$build_old_libs" = yes; then
   	# Transform all the library objects into standard objects.
   	compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
  @@ -2486,7 +3193,7 @@
         fi
   
         if test -n "$dlsyms"; then
  -	case "$dlsyms" in
  +	case $dlsyms in
   	"") ;;
   	*.c)
   	  # Discover the nlist of each of the dlfiles.
  @@ -2518,7 +3225,7 @@
   	    test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist"
   
   	    # Add our own program objects to the symbol list.
  -	    progfiles=`$echo "X$objs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
  +	    progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
   	    for arg in $progfiles; do
   	      $show "extracting global C symbols from \`$arg'"
   	      $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
  @@ -2528,7 +3235,7 @@
   	      $run eval 'egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
   	      $run eval '$mv "$nlist"T "$nlist"'
   	    fi
  -	    
  +
   	    if test -n "$export_symbols_regex"; then
   	      $run eval 'egrep -e "$export_symbols_regex" "$nlist" > "$nlist"T'
   	      $run eval '$mv "$nlist"T "$nlist"'
  @@ -2617,13 +3324,13 @@
   	  fi
   
   	  pic_flag_for_symtable=
  -	  case "$host" in
  +	  case $host in
   	  # compiling the symbol table file with pic_flag works around
   	  # a FreeBSD bug that causes programs to crash when -lm is
   	  # linked before any other PIC object.  But we must not use
   	  # pic_flag when linking with -static.  The problem exists in
   	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
  -	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
  +	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
   	    case "$compile_command " in
   	    *" -static "*) ;;
   	    *) pic_flag_for_symtable=" $pic_flag -DPIC -DFREEBSD_WORKAROUND";;
  @@ -2662,7 +3369,7 @@
   	finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
         fi
   
  -      if test -z "$link_against_libtool_libs" || test "$build_libtool_libs" != yes; then
  +      if test $need_relink = no || test "$build_libtool_libs" != yes; then
   	# Replace the output file specification.
   	compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
   	link_command="$compile_command$compile_rpath"
  @@ -2671,7 +3378,7 @@
   	$show "$link_command"
   	$run eval "$link_command"
   	status=$?
  -	
  +
   	# Delete the generated files.
   	if test -n "$dlsyms"; then
   	  $show "$rm $output_objdir/${outputname}S.${objext}"
  @@ -2685,7 +3392,7 @@
   	# We should set the shlibpath_var
   	rpath=
   	for dir in $temp_rpath; do
  -	  case "$dir" in
  +	  case $dir in
   	  [\\/]* | [A-Za-z]:[\\/]*)
   	    # Absolute path.
   	    rpath="$rpath$dir:"
  @@ -2727,11 +3434,24 @@
   	fi
         fi
   
  +      if test "$no_install" = yes; then
  +	# We don't need to create a wrapper script.
  +	link_command="$compile_var$compile_command$compile_rpath"
  +	# Replace the output file specification.
  +	link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
  +	# Delete the old output file.
  +	$run $rm $output
  +	# Link the executable and exit
  +	$show "$link_command"
  +	$run eval "$link_command" || exit $?
  +	exit 0
  +      fi
  +
         if test "$hardcode_action" = relink; then
   	# Fast installation is not supported
   	link_command="$compile_var$compile_command$compile_rpath"
   	relink_command="$finalize_var$finalize_command$finalize_rpath"
  -	
  +
   	$echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2
   	$echo "$modename: \`$output' will be relinked during installation" 1>&2
         else
  @@ -2751,7 +3471,7 @@
   
         # Replace the output file specification.
         link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
  -      
  +
         # Delete the old output files.
         $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname
   
  @@ -2763,12 +3483,24 @@
   
         # Quote the relink command for shipping.
         if test -n "$relink_command"; then
  +	# Preserve any variables that may affect compiler behavior
  +	for var in $variables_saved_for_relink; do
  +	  if eval test -z \"\${$var+set}\"; then
  +	    relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
  +	  elif eval var_value=\$$var; test -z "$var_value"; then
  +	    relink_command="$var=; export $var; $relink_command"
  +	  else
  +	    var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
  +	    relink_command="$var=\"$var_value\"; export $var; $relink_command"
  +	  fi
  +	done
  +	relink_command="cd `pwd`; $relink_command"
   	relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
         fi
   
         # Quote $echo for shipping.
         if test "X$echo" = "X$SHELL $0 --fallback-echo"; then
  -	case "$0" in
  +	case $0 in
   	[\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";;
   	*) qecho="$SHELL `pwd`/$0 --fallback-echo";;
   	esac
  @@ -2784,6 +3516,11 @@
   	case $output in
   	  *.exe) output=`echo $output|sed 's,.exe$,,'` ;;
   	esac
  +	# test for cygwin because mv fails w/o .exe extensions
  +	case $host in
  +	  *cygwin*) exeext=.exe ;;
  +	  *) exeext= ;;
  +	esac
   	$rm $output
   	trap "$rm $output; exit 1" 1 2 15
   
  @@ -2813,7 +3550,7 @@
   # This environment variable determines our operation mode.
   if test \"\$libtool_install_magic\" = \"$magic\"; then
     # install mode needs the following variable:
  -  link_against_libtool_libs='$link_against_libtool_libs'
  +  notinst_deplibs='$notinst_deplibs'
   else
     # When we are sourced in execute mode, \$file and \$echo are already set.
     if test \"\$libtool_execute_magic\" != \"$magic\"; then
  @@ -2846,7 +3583,7 @@
       # If there was a directory component, then change thisdir.
       if test \"x\$destdir\" != \"x\$file\"; then
         case \"\$destdir\" in
  -      [\\/]* | [A-Za-z]:[\\/]*) thisdir=\"\$destdir\" ;;
  +      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
         *) thisdir=\"\$thisdir/\$destdir\" ;;
         esac
       fi
  @@ -2862,9 +3599,9 @@
   
   	if test "$fast_install" = yes; then
   	  echo >> $output "\
  -  program=lt-'$outputname'
  +  program=lt-'$outputname'$exeext
     progdir=\"\$thisdir/$objdir\"
  -  
  +
     if test ! -f \"\$progdir/\$program\" || \\
        { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | sed 1q\`; \\
          test \"X\$file\" != \"X\$progdir/\$program\"; }; then
  @@ -2881,7 +3618,7 @@
   
       # relink executable if necessary
       if test -n \"\$relink_command\"; then
  -      if (cd \"\$thisdir\" && eval \$relink_command); then :
  +      if (eval \$relink_command); then :
         else
   	$rm \"\$progdir/\$file\"
   	exit 1
  @@ -2931,9 +3668,9 @@
         # Run the actual program with our arguments.
   "
   	case $host in
  -	  # win32 systems need to use the prog path for dll
  -	  # lookup to work
  -	*-*-cygwin*)
  +	# win32 systems need to use the prog path for dll
  +	# lookup to work
  +	*-*-cygwin* | *-*-pw32*)
   	  $echo >> $output "\
         exec \$progdir/\$program \${1+\"\$@\"}
   "
  @@ -2987,7 +3724,7 @@
   	  oldobjs="$libobjs_save"
   	  build_libtool_libs=no
   	else
  -	  oldobjs="$objs "`$echo "X$libobjs_save" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`
  +	  oldobjs="$objs$old_deplibs "`$echo "X$libobjs_save" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`
   	fi
   	addlibs="$old_convenience"
         fi
  @@ -3003,11 +3740,11 @@
   	  exit $status
   	fi
   	generated="$generated $gentop"
  -	  
  +
   	# Add in members from convenience archives.
   	for xlib in $addlibs; do
   	  # Extract the objects.
  -	  case "$xlib" in
  +	  case $xlib in
   	  [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
   	  *) xabs=`pwd`"/$xlib" ;;
   	  esac
  @@ -3068,19 +3805,26 @@
       fi
   
       # Now create the libtool archive.
  -    case "$output" in
  +    case $output in
       *.la)
         old_library=
         test "$build_old_libs" = yes && old_library="$libname.$libext"
         $show "creating $output"
   
  -      if test -n "$xrpath"; then
  -	temp_xrpath=
  -	for libdir in $xrpath; do
  -	  temp_xrpath="$temp_xrpath -R$libdir"
  -	done
  -	dependency_libs="$temp_xrpath $dependency_libs"
  -      fi
  +      # Preserve any variables that may affect compiler behavior
  +      for var in $variables_saved_for_relink; do
  +	if eval test -z \"\${$var+set}\"; then
  +	  relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
  +	elif eval var_value=\$$var; test -z "$var_value"; then
  +	  relink_command="$var=; export $var; $relink_command"
  +	else
  +	  var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
  +	  relink_command="$var=\"$var_value\"; export $var; $relink_command"
  +	fi
  +      done
  +      # Quote the link command for shipping.
  +      relink_command="cd `pwd`; $SHELL $0 --mode=relink $libtool_args"
  +      relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
   
         # Only create the output if not a dry run.
         if test -z "$run"; then
  @@ -3090,8 +3834,52 @@
   	      break
   	    fi
   	    output="$output_objdir/$outputname"i
  +	    # Replace all uninstalled libtool libraries with the installed ones
  +	    newdependency_libs=
  +	    for deplib in $dependency_libs; do
  +	      case $deplib in
  +	      *.la)
  +		name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'`
  +		eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
  +		if test -z "$libdir"; then
  +		  $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
  +		  exit 1
  +		fi
  +		newdependency_libs="$newdependency_libs $libdir/$name"
  +		;;
  +	      *) newdependency_libs="$newdependency_libs $deplib" ;;
  +	      esac
  +	    done
  +	    dependency_libs="$newdependency_libs"
  +	    newdlfiles=
  +	    for lib in $dlfiles; do
  +	      name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
  +	      eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
  +	      if test -z "$libdir"; then
  +		$echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
  +		exit 1
  +	      fi
  +	      newdlfiles="$newdlfiles $libdir/$name"
  +	    done
  +	    dlfiles="$newdlfiles"
  +	    newdlprefiles=
  +	    for lib in $dlprefiles; do
  +	      name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
  +	      eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
  +	      if test -z "$libdir"; then
  +		$echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
  +		exit 1
  +	      fi
  +	      newdlprefiles="$newdlprefiles $libdir/$name"
  +	    done
  +	    dlprefiles="$newdlprefiles"
   	  fi
   	  $rm $output
  +	  # place dlname in correct position for cygwin
  +	  tdlname=$dlname
  +	  case $host,$output,$installed,$module,$dlname in
  +	    *cygwin*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
  +	  esac
   	  $echo > $output "\
   # $outputname - a libtool library file
   # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
  @@ -3100,7 +3888,7 @@
   # It is necessary for linking the library.
   
   # The name that we can dlopen(3).
  -dlname='$dlname'
  +dlname='$tdlname'
   
   # Names of this library.
   library_names='$library_names'
  @@ -3119,16 +3907,23 @@
   # Is this an already installed library?
   installed=$installed
   
  +# Files to dlopen/dlpreopen
  +dlopen='$dlfiles'
  +dlpreopen='$dlprefiles'
  +
   # Directory that this library needs to be installed in:
  -libdir='$install_libdir'\
  -"
  +libdir='$install_libdir'"
  +	  if test "$installed" = no && test $need_relink = yes; then
  +	    $echo >> $output "\
  +relink_command=\"$relink_command\""
  +	  fi
   	done
         fi
   
         # Do a symbolic link so that the libtool archive can be found in
         # LD_LIBRARY_PATH before the program is installed.
         $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)"
  -      $run eval "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" || exit $?
  +      $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $?
         ;;
       esac
       exit 0
  @@ -3140,10 +3935,12 @@
   
       # There may be an optional sh(1) argument at the beginning of
       # install_prog (especially on Windows NT).
  -    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || test "$nonopt" = ./shtool;then
  +    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
  +       # Allow the use of GNU shtool's install command.
  +       $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then
         # Aesthetically quote it.
         arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"`
  -      case "$arg" in
  +      case $arg in
         *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
   	arg="\"$arg\""
   	;;
  @@ -3159,7 +3956,7 @@
       # The real first argument should be the name of the installation program.
       # Aesthetically quote it.
       arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
  -    case "$arg" in
  +    case $arg in
       *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
         arg="\"$arg\""
         ;;
  @@ -3182,7 +3979,7 @@
   	continue
         fi
   
  -      case "$arg" in
  +      case $arg in
         -d) isdir=yes ;;
         -f) prev="-f" ;;
         -g) prev="-g" ;;
  @@ -3207,7 +4004,7 @@
   
         # Aesthetically quote the argument.
         arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
  -      case "$arg" in
  +      case $arg in
         *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
   	arg="\"$arg\""
   	;;
  @@ -3258,11 +4055,11 @@
   	exit 1
         fi
       fi
  -    case "$destdir" in
  +    case $destdir in
       [\\/]* | [A-Za-z]:[\\/]*) ;;
       *)
         for file in $files; do
  -	case "$file" in
  +	case $file in
   	*.lo) ;;
   	*)
   	  $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2
  @@ -3284,8 +4081,8 @@
       for file in $files; do
   
         # Do each installation.
  -      case "$file" in
  -      *.a | *.lib)
  +      case $file in
  +      *.$libext)
   	# Do the static libraries later.
   	staticlibs="$staticlibs $file"
   	;;
  @@ -3301,8 +4098,9 @@
   
   	library_names=
   	old_library=
  +	relink_command=
   	# If there is no directory component, then add one.
  -	case "$file" in
  +	case $file in
   	*/* | *\\*) . $file ;;
   	*) . ./$file ;;
   	esac
  @@ -3321,10 +4119,20 @@
   	  esac
   	fi
   
  -	dir="`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/"
  +	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/
   	test "X$dir" = "X$file/" && dir=
   	dir="$dir$objdir"
   
  +	if test -n "$relink_command"; then
  +	  $echo "$modename: warning: relinking \`$file'" 1>&2
  +	  $show "$relink_command"
  +	  if $run eval "$relink_command"; then :
  +	  else
  +	    $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
  +	    continue
  +	  fi
  +	fi
  +
   	# See the names of the shared library.
   	set dummy $library_names
   	if test -n "$2"; then
  @@ -3332,9 +4140,16 @@
   	  shift
   	  shift
   
  +	  srcname="$realname"
  +	  test -n "$relink_command" && srcname="$realname"T
  +
   	  # Install the shared library and build the symlinks.
  -	  $show "$install_prog $dir/$realname $destdir/$realname"
  -	  $run eval "$install_prog $dir/$realname $destdir/$realname" || exit $?
  +	  $show "$install_prog $dir/$srcname $destdir/$realname"
  +	  $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $?
  +	  if test -n "$stripme" && test -n "$striplib"; then
  +	    $show "$striplib $destdir/$realname"
  +	    $run eval "$striplib $destdir/$realname" || exit $?
  +	  fi
   
   	  if test $# -gt 0; then
   	    # Delete the old symlinks, and create new ones.
  @@ -3381,11 +4196,11 @@
   	fi
   
   	# Deduce the name of the destination old-style object file.
  -	case "$destfile" in
  +	case $destfile in
   	*.lo)
   	  staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"`
   	  ;;
  -	*.o | *.obj)
  +	*.$objext)
   	  staticdest="$destfile"
   	  destfile=
   	  ;;
  @@ -3424,39 +4239,46 @@
   
   	# Do a test to see if this is really a libtool program.
   	if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
  -	  link_against_libtool_libs=
  +	  notinst_deplibs=
   	  relink_command=
   
   	  # If there is no directory component, then add one.
  -	  case "$file" in
  +	  case $file in
   	  */* | *\\*) . $file ;;
   	  *) . ./$file ;;
   	  esac
   
   	  # Check the variables that should have been set.
  -	  if test -z "$link_against_libtool_libs"; then
  +	  if test -z "$notinst_deplibs"; then
   	    $echo "$modename: invalid libtool wrapper script \`$file'" 1>&2
   	    exit 1
   	  fi
   
   	  finalize=yes
  -	  for lib in $link_against_libtool_libs; do
  +	  for lib in $notinst_deplibs; do
   	    # Check to see that each library is installed.
   	    libdir=
   	    if test -f "$lib"; then
   	      # If there is no directory component, then add one.
  -	      case "$lib" in
  +	      case $lib in
   	      */* | *\\*) . $lib ;;
   	      *) . ./$lib ;;
   	      esac
   	    fi
  -	    libfile="$libdir/`$echo "X$lib" | $Xsed -e 's%^.*/%%g'`"
  +	    libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
   	    if test -n "$libdir" && test ! -f "$libfile"; then
   	      $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2
   	      finalize=no
   	    fi
   	  done
   
  +	  relink_command=
  +	  # If there is no directory component, then add one.
  +	  case $file in
  +	  */* | *\\*) . $file ;;
  +	  *) . ./$file ;;
  +	  esac
  +
   	  outputname=
   	  if test "$fast_install" = no && test -n "$relink_command"; then
   	    if test "$finalize" = yes && test -z "$run"; then
  @@ -3468,6 +4290,7 @@
   		$echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2
   		continue
   	      fi
  +	      file=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
   	      outputname="$tmpdir/$file"
   	      # Replace the output file specification.
   	      relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
  @@ -3489,6 +4312,23 @@
   	  fi
   	fi
   
  +	# remove .exe since cygwin /usr/bin/install will append another
  +	# one anyways
  +	case $install_prog,$host in
  +	/usr/bin/install*,*cygwin*)
  +	  case $file:$destfile in
  +	  *.exe:*.exe)
  +	    # this is ok
  +	    ;;
  +	  *.exe:*)
  +	    destfile=$destfile.exe
  +	    ;;
  +	  *:*.exe)
  +	    destfile=`echo $destfile | sed -e 's,.exe$,,'`
  +	    ;;
  +	  esac
  +	  ;;
  +	esac
   	$show "$install_prog$stripme $file $destfile"
   	$run eval "$install_prog\$stripme \$file \$destfile" || exit $?
   	test -n "$outputname" && ${rm}r "$tmpdir"
  @@ -3505,6 +4345,11 @@
         $show "$install_prog $file $oldlib"
         $run eval "$install_prog \$file \$oldlib" || exit $?
   
  +      if test -n "$stripme" && test -n "$striplib"; then
  +	$show "$old_striplib $oldlib"
  +	$run eval "$old_striplib $oldlib" || exit $?
  +      fi
  +
         # Do each command in the postinstall commands.
         eval cmds=\"$old_postinstall_cmds\"
         IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
  @@ -3523,7 +4368,7 @@
       if test -n "$current_libdirs"; then
         # Maybe just do a dry run.
         test -n "$run" && current_libdirs=" -n$current_libdirs"
  -      exit 0 #$current_libdirs
  +      exec $SHELL $0 --finish$current_libdirs
         exit 1
       fi
   
  @@ -3565,7 +4410,7 @@
       fi
   
       # Exit here if they wanted silent mode.
  -    test "$show" = : && exit 0
  +    test "$show" = ":" && exit 0
   
       echo "----------------------------------------------------------------------"
       echo "Libraries have been installed in:"
  @@ -3575,7 +4420,7 @@
       echo
       echo "If you ever happen to want to link against installed libraries"
       echo "in a given directory, LIBDIR, you must either use libtool, and"
  -    echo "specify the full pathname of the library, or use \`-LLIBDIR'"
  +    echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
       echo "flag during linking and do at least one of the following:"
       if test -n "$shlibpath_var"; then
         echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
  @@ -3625,7 +4470,7 @@
         fi
   
         dir=
  -      case "$file" in
  +      case $file in
         *.la)
   	# Check to see that this really is a libtool archive.
   	if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
  @@ -3640,7 +4485,7 @@
   	library_names=
   
   	# If there is no directory component, then add one.
  -	case "$file" in
  +	case $file in
   	*/* | *\\*) . $file ;;
   	*) . ./$file ;;
   	esac
  @@ -3695,13 +4540,13 @@
       args=
       for file
       do
  -      case "$file" in
  +      case $file in
         -*) ;;
         *)
   	# Do a test to see if this is really a libtool program.
   	if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
   	  # If there is no directory component, then add one.
  -	  case "$file" in
  +	  case $file in
   	  */* | *\\*) . $file ;;
   	  *) . ./$file ;;
   	  esac
  @@ -3718,8 +4563,8 @@
   
       if test -z "$run"; then
         if test -n "$shlibpath_var"; then
  -        # Export the shlibpath_var.
  -        eval "export $shlibpath_var"
  +	# Export the shlibpath_var.
  +	eval "export $shlibpath_var"
         fi
   
         # Restore saved enviroment variables
  @@ -3738,23 +4583,30 @@
       else
         # Display what would be done.
         if test -n "$shlibpath_var"; then
  -        eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
  -        $echo "export $shlibpath_var"
  +	eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
  +	$echo "export $shlibpath_var"
         fi
         $echo "$cmd$args"
         exit 0
       fi
       ;;
   
  -  # libtool uninstall mode
  -  uninstall)
  -    modename="$modename: uninstall"
  +  # libtool clean and uninstall mode
  +  clean | uninstall)
  +    modename="$modename: $mode"
       rm="$nonopt"
       files=
  +    rmforce=
  +    exit_status=0
   
  +    # This variable tells wrapper scripts just to set variables rather
  +    # than running their programs.
  +    libtool_install_magic="$magic"
  +
       for arg
       do
  -      case "$arg" in
  +      case $arg in
  +      -f) rm="$rm $arg"; rmforce=yes ;;
         -*) rm="$rm $arg" ;;
         *) files="$files $arg" ;;
         esac
  @@ -3766,14 +4618,42 @@
         exit 1
       fi
   
  +    rmdirs=
  +
       for file in $files; do
         dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
  -      test "X$dir" = "X$file" && dir=.
  +      if test "X$dir" = "X$file"; then
  +	dir=.
  +	objdir="$objdir"
  +      else
  +	objdir="$dir/$objdir"
  +      fi
         name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
  +      test $mode = uninstall && objdir="$dir"
  +
  +      # Remember objdir for removal later, being careful to avoid duplicates
  +      if test $mode = clean; then
  +	case " $rmdirs " in
  +	  *" $objdir "*) ;;
  +	  *) rmdirs="$rmdirs $objdir" ;;
  +	esac
  +      fi
  +
  +      # Don't error if the file doesn't exist and rm -f was used.
  +      if (test -L "$file") >/dev/null 2>&1 \
  +        || (test -h "$file") >/dev/null 2>&1 \
  +	|| test -f "$file"; then
  +        :
  +      elif test -d "$file"; then
  +        exit_status=1
  +	continue
  +      elif test "$rmforce" = yes; then
  +        continue
  +      fi
   
         rmfiles="$file"
   
  -      case "$name" in
  +      case $name in
         *.la)
   	# Possibly a libtool archive, so verify it.
   	if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
  @@ -3781,38 +4661,43 @@
   
   	  # Delete the libtool libraries and symlinks.
   	  for n in $library_names; do
  -	    rmfiles="$rmfiles $dir/$n"
  +	    rmfiles="$rmfiles $objdir/$n"
   	  done
  -	  test -n "$old_library" && rmfiles="$rmfiles $dir/$old_library"
  -
  -	  $show "$rm $rmfiles"
  -	  $run $rm $rmfiles
  +	  test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
  +	  test $mode = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
   
  -	  if test -n "$library_names"; then
  -	    # Do each command in the postuninstall commands.
  -	    eval cmds=\"$postuninstall_cmds\"
  -	    IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
  -	    for cmd in $cmds; do
  +	  if test $mode = uninstall; then
  +	    if test -n "$library_names"; then
  +	      # Do each command in the postuninstall commands.
  +	      eval cmds=\"$postuninstall_cmds\"
  +	      IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
  +	      for cmd in $cmds; do
  +		IFS="$save_ifs"
  +		$show "$cmd"
  +		$run eval "$cmd"
  +		if test $? != 0 && test "$rmforce" != yes; then
  +		  exit_status=1
  +		fi
  +	      done
   	      IFS="$save_ifs"
  -	      $show "$cmd"
  -	      $run eval "$cmd"
  -	    done
  -	    IFS="$save_ifs"
  -	  fi
  +	    fi
   
  -	  if test -n "$old_library"; then
  -	    # Do each command in the old_postuninstall commands.
  -	    eval cmds=\"$old_postuninstall_cmds\"
  -	    IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
  -	    for cmd in $cmds; do
  +	    if test -n "$old_library"; then
  +	      # Do each command in the old_postuninstall commands.
  +	      eval cmds=\"$old_postuninstall_cmds\"
  +	      IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
  +	      for cmd in $cmds; do
  +		IFS="$save_ifs"
  +		$show "$cmd"
  +		$run eval "$cmd"
  +		if test $? != 0 && test "$rmforce" != yes; then
  +		  exit_status=1
  +		fi
  +	      done
   	      IFS="$save_ifs"
  -	      $show "$cmd"
  -	      $run eval "$cmd"
  -	    done
  -	    IFS="$save_ifs"
  +	    fi
  +	    # FIXME: should reinstall the best remaining shared library.
   	  fi
  -
  -	  # FIXME: should reinstall the best remaining shared library.
   	fi
   	;;
   
  @@ -3821,17 +4706,35 @@
   	  oldobj=`$echo "X$name" | $Xsed -e "$lo2o"`
   	  rmfiles="$rmfiles $dir/$oldobj"
   	fi
  -	$show "$rm $rmfiles"
  -	$run $rm $rmfiles
   	;;
   
         *)
  -	$show "$rm $rmfiles"
  -	$run $rm $rmfiles
  +	# Do a test to see if this is a libtool program.
  +	if test $mode = clean &&
  +	   (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
  +	  relink_command=
  +	  . $dir/$file
  +
  +	  rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
  +	  if test "$fast_install" = yes && test -n "$relink_command"; then
  +	    rmfiles="$rmfiles $objdir/lt-$name"
  +	  fi
  +	fi
   	;;
         esac
  +      $show "$rm $rmfiles"
  +      $run $rm $rmfiles || exit_status=1
       done
  -    exit 0
  +
  +    # Try to remove the ${objdir}s in the directories where we deleted files
  +    for dir in $rmdirs; do
  +      if test -d "$dir"; then
  +	$show "rmdir $dir"
  +	$run rmdir $dir >/dev/null 2>&1
  +      fi
  +    done
  +
  +    exit $exit_status
       ;;
   
     "")
  @@ -3847,7 +4750,7 @@
   fi # test -z "$show_help"
   
   # We need to display help for each of the modes.
  -case "$mode" in
  +case $mode in
   "") $echo \
   "Usage: $modename [OPTION]... [MODE-ARG]...
   
  @@ -3866,6 +4769,7 @@
   
   MODE must be one of the following:
   
  +      clean           remove files from the build directory
         compile         compile a source file into a libtool object
         execute         automatically set library path, then run a program
         finish          complete the installation of libtool libraries
  @@ -3878,6 +4782,20 @@
     exit 0
     ;;
   
  +clean)
  +  $echo \
  +"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
  +
  +Remove files from the build directory.
  +
  +RM is the name of the program to use to delete files associated with each FILE
  +(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
  +to RM.
  +
  +If FILE is a libtool library, object or program, all the files associated
  +with it are deleted. Otherwise, only FILE itself is deleted using RM."
  +  ;;
  +
   compile)
     $echo \
   "Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
  @@ -3887,6 +4805,8 @@
   This mode accepts the following additional options:
   
     -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
  +  -prefer-pic       try to building PIC objects only
  +  -prefer-non-pic   try to building non-PIC objects only
     -static           always build a \`.o' file suitable for static linking
   
   COMPILE-COMMAND is a command to be used in creating a \`standard' object file
  @@ -3966,6 +4886,8 @@
     -LLIBDIR          search LIBDIR for required installed libraries
     -lNAME            OUTPUT-FILE requires the installed library libNAME
     -module           build a library that can dlopened
  +  -no-fast-install  disable the fast-install mode
  +  -no-install       link a not-installable executable
     -no-undefined     declare that a library does not refer to external symbols
     -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
     -release RELEASE  specify package release information
  Index: ossp-pkg/pcre/shtool
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 shtool
  --- ossp-pkg/pcre/shtool	2001/08/11 19:51:49	1.7
  +++ ossp-pkg/pcre/shtool	2001/08/16 10:08:07	1.8
  @@ -7,7 +7,7 @@
   ##  See ftp://ftp.gnu.org/gnu/shtool/ for latest version.
   ##
   ##  Version:  1.5.4 (14-Jun-2001)
  -##  Contents: 6/17 available modules
  +##  Contents: 5/17 available modules
   ##
   
   ##
  @@ -43,7 +43,6 @@
   ##    mkdir      Make one or more directories
   ##    fixperm    Fix file permissions inside a source tree
   ##    tarball    Roll distribution tarballs
  -##    guessos    Simple operating system guesser
   ##
   ##  Not available commands (because module was not built-in):
   ##    mdate      Pretty-print modification time of a file or dir
  @@ -52,6 +51,7 @@
   ##    move       Move files with simultaneous substitution
   ##    mkln       Make link with calculation of relative paths
   ##    mkshadow   Make a shadow tree through symbolic links
  +##    guessos    Simple operating system guesser
   ##    arx        Extended archive command
   ##    slo        Separate linker options by library class
   ##    scpp       Sharing C Pre-Processor
  @@ -85,7 +85,6 @@
       echo '  fixperm  [-v] [-t] <path> [<path> ...]'
       echo '  tarball  [-t] [-v] [-o<tarball>] [-c<prog>] [-d<dir>] [-u<user>]'
       echo '           [-g<group>] [-e<pattern>] <path> [<path> ...]'
  -    echo '  guessos  '
       echo ''
       echo 'Not available <cmd-name> (because module was not built-in):'
       echo '  mdate    [-n] [-z] [-s] [-d] [-f<str>] [-o<spec>] <path>'
  @@ -94,6 +93,7 @@
       echo '  move     [-v] [-t] [-e] [-p] <src-file> <dst-file>'
       echo '  mkln     [-t] [-f] [-s] <src-path> [<src-path> ...] <dst-path>'
       echo '  mkshadow [-v] [-t] [-a] <src-dir> <dst-dir>'
  +    echo '  guessos  '
       echo '  arx      [-t] [-C<cmd>] <op> <archive> [<file> ...]'
       echo '  slo      [-p<str>] -- -L<dir> -l<lib> [-L<dir> -l<lib> ...]'
       echo '  scpp     [-v] [-p] [-f<filter>] [-o<ofile>] [-t<tfile>] [-M<mark>]'
  @@ -109,7 +109,7 @@
       exit 0
   fi
   if [ ".$1" = ".-r" -o ".$1" = ."--recreate" ]; then
  -    shtoolize -oshtool echo install mkdir fixperm tarball guessos
  +    shtoolize -oshtool echo install mkdir fixperm tarball
       exit 0
   fi
   if [ ".$1" = ".-d" -o ".$1" = ."--debug" ]; then
  @@ -118,7 +118,7 @@
   fi
   name=`echo "$0" | sed -e 's;.*/\([^/]*\)$;\1;' -e 's;-sh$;;' -e 's;\.sh$;;'`
   case "$name" in
  -    echo|install|mkdir|fixperm|tarball|guessos )
  +    echo|install|mkdir|fixperm|tarball )
           #   implicit tool command selection
           tool="$name"
           ;;
  @@ -193,12 +193,6 @@
           opt_g=""
           opt_e="CVS,\\.cvsignore,\\.[oa]\$"
           ;;
  -    guessos )
  -        str_tool="guessos"
  -        str_usage=""
  -        arg_spec="0="
  -        opt_spec=""
  -        ;;
       -* )
           echo "$0:Error: unknown option \`$tool'" 2>&1
           echo "$0:Hint:  run \`$0 -h' for usage" 2>&1
  @@ -1026,253 +1020,6 @@
           echo "rm -f $tmpfile.lst $tmpfile.out" 1>&2
       fi
       rm -f $tmpfile.lst $tmpfile.out
  -    ;;
  -
  -guessos )
  -    ##
  -    ##  guessos -- Simple operating system guesser
  -    ##  Copyright (c) 1996-1999 The Apache Group, http://www.apache.org/
  -    ##  The Apache license applies (see http://www.apache.org/docs/LICENSE)
  -    ##  Originally written for Apache
  -    ##
  -    
  -    MACHINE=`(uname -m) 2>/dev/null` || MACHINE=`(uname -p) 2>/dev/null` || MACHINE="unknown"
  -    RELEASE=`(uname -r) 2>/dev/null` || RELEASE="unknown"
  -     SYSTEM=`(uname -s) 2>/dev/null` ||  SYSTEM="unknown"
  -    VERSION=`(uname -v) 2>/dev/null` || VERSION="unknown"
  -    
  -    XREL=`(uname -X) 2>/dev/null | grep "^Release" | awk '{print $3}'`
  -    if [ "x$XREL" != "x" ]; then
  -        if [ -f /etc/kconfig ]; then
  -            case "$XREL" in
  -                4.0|4.1) echo "${MACHINE}-whatever-isc4"; exit 0 ;;
  -            esac
  -        else
  -        case "$XREL" in
  -            3.2v4.2)
  -                echo "whatever-whatever-sco3"; exit 0
  -                ;;
  -            3.2v5.0*)
  -                echo "whatever-whatever-sco5"; exit 0
  -                ;;
  -            4.2MP)
  -                if [ "x$VERSION" = "x2.1.1" ]; then
  -                    echo "${MACHINE}-whatever-unixware211"; exit 0
  -                elif [ "x$VERSION" = "x2.1.2" ]; then
  -                    echo "${MACHINE}-whatever-unixware212"; exit 0
  -                else
  -                    echo "${MACHINE}-whatever-unixware2"; exit 0
  -                fi
  -                ;;
  -            4.2)
  -                echo "whatever-whatever-unixware1"; exit 0
  -                ;;
  -            5)
  -                case "$VERSION" in
  -                    7*) echo "${MACHINE}-whatever-unixware7"; exit 0 ;;
  -                esac
  -                ;;
  -        esac
  -        fi
  -    fi
  -    case "${SYSTEM}:${RELEASE}:${VERSION}:${MACHINE}" in
  -        MiNT:*)
  -            echo "m68k-atari-mint"; exit 0
  -            ;;
  -        A/UX:*)
  -            echo "m68k-apple-aux3"; exit 0
  -            ;;
  -        AIX:*)
  -            MACH=`echo $MACHINE | sed -e 's;[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F];;'`
  -            echo "${MACH}-ibm-aix${VERSION}.${RELEASE}"; exit 0
  -            ;;
  -        dgux:*)
  -            echo "${MACHINE}-dg-dgux"; exit 0
  -            ;;
  -        HI-UX:*)
  -            echo "${MACHINE}-hi-hiux"; exit 0
  -            ;;
  -        HP-UX:*)
  -            HPUXVER=`echo ${RELEASE}|sed -e 's/[^.]*.[0B]*//'`
  -            MACHINE=`echo ${MACHINE}|sed -e 's:/:_:'`
  -            echo "${MACHINE}-hp-hpux${HPUXVER}"; exit 0
  -            ;;
  -        IRIX:*)
  -            if [ -f /usr/lib32/mips4/libm.so ]; then
  -                echo "${MACHINE}/32-sgi-irix${RELEASE}"; exit 0
  -            else
  -                echo "${MACHINE}-sgi-irix${RELEASE}"; exit 0
  -            fi
  -            ;;
  -        IRIX64:*)
  -            echo "${MACHINE}/64-sgi-irix${RELEASE}"; exit 0
  -            ;;
  -        Linux:*)
  -            V='whatever'
  -            case "$MACHINE" in
  -                i?86) V='pc' ;;
  -            esac
  -            R=''
  -            case "$RELEASE" in
  -                [1-9].*) R=`echo $RELEASE | cut -c1` ;;
  -            esac
  -            echo "${MACHINE}-${V}-linux-gnu${R}"; exit 0
  -            ;;
  -        LynxOS:*)
  -            echo "${MACHINE}-lynx-lynxos"; exit 0
  -            ;;
  -        BSD/386|BSD/OS:3.*)
  -            echo "${MACHINE}-whatever-bsdi3"; exit 0
  -            ;;
  -        BSD/386:*:*:*486*|BSD/OS:*:*:*:*486*)
  -            echo "i486-whatever-bsdi"; exit 0
  -            ;;
  -        BSD/386:*|BSD/OS:*)
  -            echo "${MACHINE}-whatever-bsdi"; exit 0
  -            ;;
  -        FreeBSD:*)
  -            VERS=`echo ${RELEASE} | sed -e 's/[-(].*//'`
  -            MACH=`/sbin/sysctl -n hw.model`
  -            ARCH='whatever'
  -            case ${MACH} in
  -               *386*       ) MACH="i386"     ;;
  -               *486*       ) MACH="i486"     ;;
  -               Pentium\ II*) MACH="i686"     ;;
  -               Pentium*    ) MACH="i586"     ;;
  -               Alpha*      ) MACH="alpha"    ;;
  -               *           ) MACH="$MACHINE" ;;
  -            esac
  -            case ${MACH} in
  -               i[0-9]86 ) ARCH="pc" ;;
  -            esac
  -            echo "${MACH}-${ARCH}-freebsd${VERS}"; exit 0
  -            ;;
  -        NetBSD:*:*:*486*)
  -            echo "i486-whatever-netbsd${RELEASE}"; exit 0
  -            ;;
  -        NetBSD:*)
  -            echo "${MACHINE}-whatever-netbsd${RELEASE}"; exit 0
  -            ;;
  -        OpenBSD:*)
  -            echo "${MACHINE}-whatever-openbsd"; exit 0
  -            ;;
  -        OSF1:*:*:*alpha*)
  -            VERS=`echo $RELEASE | sed -e 's;^V;;'`
  -            echo "${MACHINE}-dec-osf${VERS}"; exit 0
  -            ;;
  -        QNX:*)
  -            if [ "$VERSION" -gt 422 ]; then
  -                echo "${MACHINE}-qssl-qnx32"
  -            else
  -                echo "${MACHINE}-qssl-qnx"
  -            fi
  -            exit 0
  -            ;;
  -        Paragon*:*:*:*)
  -            echo "i860-intel-osf1"; exit 0
  -            ;;
  -        SunOS:5.*)
  -            VERSION=`echo $RELEASE | sed -e 's;^5\.;;'`
  -            echo "${MACHINE}-sun-solaris2.${VERSION}"; exit 0
  -            ;;
  -        SunOS:*)
  -            echo "${MACHINE}-sun-sunos4"; exit 0
  -            ;;
  -        UNIX_System_V:4.*:*)
  -            echo "${MACHINE}-whatever-sysv4"; exit 0
  -            ;;
  -        unix:3.0.9*:*:88k)
  -            echo "${MACHINE}-encore-sysv4"; exit 0
  -            ;;
  -        *:4*:R4*:m88k)
  -            echo "${MACHINE}-whatever-sysv4"; exit 0
  -            ;;
  -        UnixWare:5:99*:*)
  -            # Gemini, beta release of next rev of unixware
  -            echo "${MACHINE}-whatever-unixware212"; exit 0
  -            ;;
  -        DYNIX/ptx:4*:*)
  -            echo "${MACHINE}-whatever-sysv4"; exit 0
  -            ;;
  -        *:4.0:3.0:[345][0-9]?? | *:4.0:3.0:3[34]??[/,]* | library:*)
  -            echo "x86-ncr-sysv4"; exit 0
  -            ;;
  -        ULTRIX:*)
  -            echo "${MACHINE}-unknown-ultrix"; exit 0
  -            ;;
  -        SINIX-?:* | ReliantUNIX-?:*)
  -            echo "${MACHINE}-siemens-sysv4"; exit 0
  -            ;;
  -        POSIX*BS2000)
  -            echo "${MACHINE}-siemens-sysv4"; exit 0
  -            ;;
  -        machten:*)
  -           echo "${MACHINE}-tenon-${SYSTEM}"; exit 0;
  -           ;;
  -        ConvexOS:*:11.*:*)
  -           echo "${MACHINE}-v11-${SYSTEM}"; exit 0;
  -           ;;
  -        UNIX_SV:*:*:maxion)
  -           echo "${MACHINE}-ccur-sysv4"; exit 0;
  -           ;;
  -        PowerMAX_OS:*:*:Night_Hawk)
  -           MACHINE=`uname -p`
  -           echo "${MACHINE}-concurrent-powermax"; exit 0;
  -           ;;
  -        UNIX_SV:*)
  -           if [ -d /usr/nec ];then
  -               echo "mips-nec-sysv4"; exit 0;
  -           fi
  -           ;;
  -        NonStop-UX:4.[02]*:[BC]*:*)
  -           echo "${MACHINE}-tandem-sysv4"; exit 0;
  -           ;;
  -        Rhapsody:*:*:*)
  -           case "${MACHINE}" in
  -               "Power Macintosh") MACHINE=powerpc ;;
  -           esac
  -           echo "${MACHINE}-apple-rhapsody${RELEASE}"; exit 0
  -           ;;
  -        "Mac OS":*:*:*)
  -           MACHINE=`uname -p`
  -           echo "${MACHINE}-apple-macos${RELEASE}"; exit 0
  -           ;;
  -        "RISC iX":*)
  -           echo "arm-whatever-riscix"; exit 0;
  -           ;;
  -        *:4.0:2:*)
  -           echo "whatever-unisys-sysv4"; exit 0;
  -           ;;
  -        *:*:dcosx:NILE*)
  -           echo "pyramid-pyramid-svr4"; exit 0;
  -           ;;
  -        *:*:*:"DRS 6000")
  -           echo "drs6000-whatever-whatever"; exit 0;
  -           ;;
  -        AmigaOS:*:*:* )
  -           echo "${MACHINE}-whatever-${SYSTEM}${RELEASE}"; exit 0
  -           ;;
  -    esac
  -    
  -    # Now NeXT
  -    ISNEXT=`(hostinfo) 2>/dev/null`
  -    case "$ISNEXT" in
  -        *NeXT*)
  -             # Swiped from a friendly uname clone for NEXT/OPEN Step.
  -             NEXTOSVER="`hostinfo | sed -n 's/.*NeXT Mach \([0-9\.]*\).*/\1/p'`"
  -             if [ "$NEXTOSVER" -gt 3.3 ]; then
  -                 NEXTOS="openstep"
  -             else
  -                 NEXTOS="nextstep"
  -             fi
  -             NEXTREL="`hostinfo | sed -n 's/.*NeXT Mach \([0-9\.]*\).*/\1/p'`"
  -             NEXTARCH=`arch`
  -             echo "${NEXTARCH}-next-${NEXTOS}${NEXTREL}" ; exit 0
  -             ;;
  -    esac
  -    
  -    # Fallback
  -    echo "${MACHINE}-unknown-${SYSTEM}/${RELEASE}/${VERSION}"
       ;;
   
   esac

From ossp-cvs-owner@ossp.org  Thu Aug 16 14:04:28 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7GC4QH34574; Thu, 16 Aug 2001 14:04:26 +0200 (CEST)
Date: Thu, 16 Aug 2001 14:04:26 +0200 (CEST)
Message-Id: <200108161204.f7GC4QH34574@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str .cvsignore ChangeLog Makefile.in str_pcre.c s...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   16-Aug-2001 14:04:26
  Branch: HEAD                             Handle: 19700101010000997959865

  Modified files:
    ossp-pkg/str            .cvsignore ChangeLog Makefile.in str_pcre.c
                            str_pcre.h
  Removed files:
    ossp-pkg/str            str_pcre_mk.c str_pcre_p.h

  Log:
    Upgrade to PCRE 3.5

  Summary:
    Revision    Changes     Path
    1.7         +1  -1      ossp-pkg/str/.cvsignore
    1.30        +4  -1      ossp-pkg/str/ChangeLog
    1.32        +5  -4      ossp-pkg/str/Makefile.in
    1.5         +1649 -235  ossp-pkg/str/str_pcre.c
    1.2         +68 -42     ossp-pkg/str/str_pcre.h
    NONE        +0  -206    ossp-pkg/str/str_pcre_mk.c
    NONE        +0  -345    ossp-pkg/str/str_pcre_p.h
  ____________________________________________________________________________

  Index: ossp-pkg/str/.cvsignore
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 .cvsignore
  --- ossp-pkg/str/.cvsignore	1999/12/28 10:18:59	1.6
  +++ ossp-pkg/str/.cvsignore	2001/08/16 12:04:25	1.7
  @@ -10,5 +10,5 @@
   *.la
   .libs
   libtool
  -str_pcre_mk
  +str_pcre_gen
   str_pcre_tab.c
  Index: ossp-pkg/str/ChangeLog
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 ChangeLog
  --- ossp-pkg/str/ChangeLog	2001/08/07 18:56:56	1.29
  +++ ossp-pkg/str/ChangeLog	2001/08/16 12:04:25	1.30
  @@ -9,7 +9,10 @@
   
    ChangeLog
   
  - Changes between 0.9.4 and 0.9.5 (14-Jul-2000 to xx-Aug-2001):
  + Changes between 0.9.4 and 0.9.5 (14-Jul-2000 to 16-Aug-2001):
  +
  +   *) Upgrade to a stripped down version of PCRE 3.5
  +      [Ralf S. Engelschall]
   
      *) Upgrade to GNU shtool 1.5.4.
         [Ralf S. Engelschall]
  Index: ossp-pkg/str/Makefile.in
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 Makefile.in
  --- ossp-pkg/str/Makefile.in	2000/07/14 15:24:16	1.31
  +++ ossp-pkg/str/Makefile.in	2001/08/16 12:04:25	1.32
  @@ -113,10 +113,10 @@
   
   str_pcre.lo: str_pcre.c
   str_pcre.c: str_pcre_tab.c
  -str_pcre_tab.c: str_pcre_mk
  -	./str_pcre_mk >str_pcre_tab.c
  -str_pcre_mk: str_pcre_mk.o
  -	$(CC) $(LDFLAGS) -o str_pcre_mk str_pcre_mk.o $(LIBS)
  +str_pcre_tab.c: str_pcre_gen
  +	./str_pcre_gen >str_pcre_tab.c
  +str_pcre_gen:
  +	$(CC) $(CFLAGS) -DSTR_PCRE_GENTAB $(LDFLAGS) -o str_pcre_gen str_pcre.c $(LIBS)
   
   check: test
   test: str_test
  @@ -137,6 +137,7 @@
   clean:
   	$(RM) *.lo *.o
   	$(RM) str_test.o str_test
  +	$(RM) str_pcre_gen str_pcre_tab.c
   	$(RM) libstr.la
   	$(RM) -r .libs
   	
  Index: ossp-pkg/str/str_pcre.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 str_pcre.c
  --- ossp-pkg/str/str_pcre.c	2000/01/10 11:55:58	1.4
  +++ ossp-pkg/str/str_pcre.c	2001/08/16 12:04:25	1.5
  @@ -1,81 +1,440 @@
  +/*************************************************
  +*      Perl-Compatible Regular Expressions       *
  +*************************************************/
  +
   /*
  -**  Str - String Library
  -**  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
  -**
  -**  This file is part of Str, a string handling and manipulation 
  -**  library which can be found at http://www.engelschall.com/sw/str/.
  -**
  -**  Permission to use, copy, modify, and distribute this software for
  -**  any purpose with or without fee is hereby granted, provided that
  -**  the above copyright notice and this permission notice appear in all
  -**  copies.
  -**
  -**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  -**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  -**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  -**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  -**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  -**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  -**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  -**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  -**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  -**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  -**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  -**  SUCH DAMAGE.
  -**
  -**  str_pcre.c: Perl compatgible regular expression engine
  +This is a library of functions to support regular expressions whose syntax
  +and semantics are as close as possible to those of the Perl 5 language. See
  +the file Tech.Notes for some information on the internals.
  +
  +Written by: Philip Hazel <ph10@cam.ac.uk>
  +
  +           Copyright (c) 1997-2001 University of Cambridge
  +
  +-----------------------------------------------------------------------------
  +Permission is granted to anyone to use this software for any purpose on any
  +computer system, and to redistribute it freely, subject to the following
  +restrictions:
  +
  +1. This software is distributed in the hope that it will be useful,
  +   but WITHOUT ANY WARRANTY; without even the implied warranty of
  +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  +
  +2. The origin of this software must not be misrepresented, either by
  +   explicit claim or by omission.
  +
  +3. Altered versions must be plainly marked as such, and must not be
  +   misrepresented as being the original software.
  +
  +4. If PCRE is embedded in any software that is released under the GNU
  +   General Purpose Licence (GPL), then the terms of that licence shall
  +   supersede any condition above with which it is incompatible.
  +-----------------------------------------------------------------------------
   */
   
  -#include "str_pcre_p.h"
  +/* ____ BEGIN internal.h ____ */
   
  -/*
  - * This is the PCRE library, a set of functions to support regular
  - * expressions whose syntax and semantics are as close as possible to
  - * those of the Perl 5 language. The version we include here in
  - * the Str library is a _heavily_ stripped down version. It has
  - * the full functionality, but the source was merged into
  - * a single file, debugging code was removed, etc.
  - */
  +/* This header contains definitions that are shared between the different
  +modules, but which are not relevant to the outside. */
   
  -/*
  - * Written by: Philip Hazel <ph10@cam.ac.uk>
  - * Copyright (c) 1997-1999 University of Cambridge
  - *
  - * Permission is granted to anyone to use this software for any purpose on any
  - * computer system, and to redistribute it freely, subject to the following
  - * restrictions:
  - * 
  - * 1. This software is distributed in the hope that it will be useful,
  - *    but WITHOUT ANY WARRANTY; without even the implied warranty of
  - *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  - * 
  - * 2. The origin of this software must not be misrepresented, either by
  - *    explicit claim or by omission.
  - * 
  - * 3. Altered versions must be plainly marked as such, and must not be
  - *    misrepresented as being the original software.
  - * 
  - * 4. If PCRE is embedded in any software that is released under the GNU
  - *    General Purpose Licence (GPL), then the terms of that licence shall
  - *    supersede any condition above with which it is incompatible.
  - */
  +/* Get the definitions provided by running "configure" */
  +
  +#ifdef HAVE_CONFIG_H
  +#include "config.h"
  +#endif
  +
  +/* Standard C headers plus the external interface definition */
  +
  +#include <ctype.h>
  +#include <limits.h>
  +#include <stddef.h>
  +#include <stdio.h>
  +#include <stdlib.h>
  +#include <string.h>
  +#include "str_pcre.h"
  +
  +/* In case there is no definition of offsetof() provided - though any proper
  +Standard C system should have one. */
  +
  +#ifndef offsetof
  +#define offsetof(p_type,field) ((size_t)&(((p_type *)0)->field))
  +#endif
  +
  +/* These are the public options that can change during matching. */
  +
  +#define PCRE_IMS (PCRE_CASELESS|PCRE_MULTILINE|PCRE_DOTALL)
  +
  +/* Private options flags start at the most significant end of the four bytes,
  +but skip the top bit so we can use ints for convenience without getting tangled
  +with negative values. The public options defined in pcre.h start at the least
  +significant end. Make sure they don't overlap, though now that we have expanded
  +to four bytes there is plenty of space. */
  +
  +#define PCRE_FIRSTSET      0x40000000  /* first_char is set */
  +#define PCRE_REQCHSET      0x20000000  /* req_char is set */
  +#define PCRE_STARTLINE     0x10000000  /* start after \n for multiline */
  +#define PCRE_INGROUP       0x08000000  /* compiling inside a group */
  +#define PCRE_ICHANGED      0x04000000  /* i option changes within regex */
  +
  +/* Options for the "extra" block produced by pcre_study(). */
  +
  +#define PCRE_STUDY_MAPPED   0x01     /* a map of starting chars exists */
  +
  +/* Masks for identifying the public options which are permitted at compile
  +time, run time or study time, respectively. */
  +
  +#define PUBLIC_OPTIONS \
  +  (PCRE_CASELESS|PCRE_EXTENDED|PCRE_ANCHORED|PCRE_MULTILINE| \
  +   PCRE_DOTALL|PCRE_DOLLAR_ENDONLY|PCRE_EXTRA|PCRE_UNGREEDY|PCRE_UTF8)
  +
  +#define PUBLIC_EXEC_OPTIONS \
  +  (PCRE_ANCHORED|PCRE_NOTBOL|PCRE_NOTEOL|PCRE_NOTEMPTY)
  +
  +#define PUBLIC_STUDY_OPTIONS 0   /* None defined */
  +
  +/* Magic number to provide a small check against being handed junk. */
  +
  +#define MAGIC_NUMBER  0x50435245UL   /* 'PCRE' */
  +
  +/* Miscellaneous definitions */
   
  +typedef int BOOL;
  +
  +#ifndef FALSE
  +#define FALSE   0
  +#endif
  +#ifndef TRUE
  +#define TRUE    1
  +#endif
  +
  +/* Escape items that are just an encoding of a particular data value. Note that
  +ESC_N is defined as yet another macro, which is set in config.h to either \n
  +(the default) or \r (which some people want). */
  +
  +#ifndef ESC_E
  +#define ESC_E 27
  +#endif
  +
  +#ifndef ESC_F
  +#define ESC_F '\f'
  +#endif
  +
  +#ifndef ESC_N
  +#define ESC_N '\n'
  +#endif
  +
  +#ifndef ESC_R
  +#define ESC_R '\r'
  +#endif
  +
  +#ifndef ESC_T
  +#define ESC_T '\t'
  +#endif
  +
  +/* These are escaped items that aren't just an encoding of a particular data
  +value such as \n. They must have non-zero values, as check_escape() returns
  +their negation. Also, they must appear in the same order as in the opcode
  +definitions below, up to ESC_z. The final one must be ESC_REF as subsequent
  +values are used for \1, \2, \3, etc. There is a test in the code for an escape
  +greater than ESC_b and less than ESC_Z to detect the types that may be
  +repeated. If any new escapes are put in-between that don't consume a character,
  +that code will have to change. */
  +
  +enum { ESC_A = 1, ESC_B, ESC_b, ESC_D, ESC_d, ESC_S, ESC_s, ESC_W, ESC_w,
  +       ESC_Z, ESC_z, ESC_REF };
  +
  +/* Opcode table: OP_BRA must be last, as all values >= it are used for brackets
  +that extract substrings. Starting from 1 (i.e. after OP_END), the values up to
  +OP_EOD must correspond in order to the list of escapes immediately above. */
  +
  +enum {
  +  OP_END,
  +
  +  /* Values corresponding to backslashed metacharacters */
  +
  +  OP_SOD,            /* Start of data: \A */
  +  OP_NOT_WORD_BOUNDARY,  /* \B */
  +  OP_WORD_BOUNDARY,      /* \b */
  +  OP_NOT_DIGIT,          /* \D */
  +  OP_DIGIT,              /* \d */
  +  OP_NOT_WHITESPACE,     /* \S */
  +  OP_WHITESPACE,         /* \s */
  +  OP_NOT_WORDCHAR,       /* \W */
  +  OP_WORDCHAR,           /* \w */
  +  OP_EODN,
  +  OP_EOD,
  +
  +  OP_OPT,            /* Set runtime options */
  +  OP_CIRC,           /* Start of line - varies with multiline switch */
  +  OP_DOLL,
  +  OP_ANY,            /* Match any character */
  +  OP_CHARS,          /* Match string of characters */
  +  OP_NOT,            /* Match anything but the following char */
  +
  +  OP_STAR,           /* The maximizing and minimizing versions of */
  +  OP_MINSTAR,        /* all these opcodes must come in pairs, with */
  +  OP_PLUS,           /* the minimizing one second. */
  +  OP_MINPLUS,        /* This first set applies to single characters */
  +  OP_QUERY,
  +  OP_MINQUERY,
  +  OP_UPTO,           /* From 0 to n matches */
  +  OP_MINUPTO,
  +  OP_EXACT,          /* Exactly n matches */
  +
  +  OP_NOTSTAR,        /* The maximizing and minimizing versions of */
  +  OP_NOTMINSTAR,     /* all these opcodes must come in pairs, with */
  +  OP_NOTPLUS,        /* the minimizing one second. */
  +  OP_NOTMINPLUS,     /* This first set applies to "not" single characters */
  +  OP_NOTQUERY,
  +  OP_NOTMINQUERY,
  +  OP_NOTUPTO,        /* From 0 to n matches */
  +  OP_NOTMINUPTO,
  +  OP_NOTEXACT,       /* Exactly n matches */
  +
  +  OP_TYPESTAR,       /* The maximizing and minimizing versions of */
  +  OP_TYPEMINSTAR,    /* all these opcodes must come in pairs, with */
  +  OP_TYPEPLUS,       /* the minimizing one second. These codes must */
  +  OP_TYPEMINPLUS,    /* be in exactly the same order as those above. */
  +  OP_TYPEQUERY,      /* This set applies to character types such as \d */
  +  OP_TYPEMINQUERY,
  +  OP_TYPEUPTO,       /* From 0 to n matches */
  +  OP_TYPEMINUPTO,
  +  OP_TYPEEXACT,      /* Exactly n matches */
  +
  +  OP_CRSTAR,         /* The maximizing and minimizing versions of */
  +  OP_CRMINSTAR,      /* all these opcodes must come in pairs, with */
  +  OP_CRPLUS,         /* the minimizing one second. These codes must */
  +  OP_CRMINPLUS,      /* be in exactly the same order as those above. */
  +  OP_CRQUERY,        /* These are for character classes and back refs */
  +  OP_CRMINQUERY,
  +  OP_CRRANGE,        /* These are different to the three seta above. */
  +  OP_CRMINRANGE,
  +
  +  OP_CLASS,          /* Match a character class */
  +  OP_REF,            /* Match a back reference */
  +  OP_RECURSE,        /* Match this pattern recursively */
  +
  +  OP_ALT,            /* Start of alternation */
  +  OP_KET,
  +  OP_KETRMAX,        /* These two must remain together and in this */
  +  OP_KETRMIN,        /* order. They are for groups the repeat for ever. */
  +
  +  /* The assertions must come before ONCE and COND */
  +
  +  OP_ASSERT,         /* Positive lookahead */
  +  OP_ASSERT_NOT,     /* Negative lookahead */
  +  OP_ASSERTBACK,     /* Positive lookbehind */
  +  OP_ASSERTBACK_NOT, /* Negative lookbehind */
  +  OP_REVERSE,        /* Move pointer back - used in lookbehind assertions */
  +
  +  /* ONCE and COND must come after the assertions, with ONCE first, as there's
  +  a test for >= ONCE for a subpattern that isn't an assertion. */
  +
  +  OP_ONCE,           /* Once matched, don't back up into the subpattern */
  +  OP_COND,           /* Conditional group */
  +  OP_CREF,           /* Used to hold an extraction string number (cond ref) */
  +
  +  OP_BRAZERO,        /* These two must remain together and in this */
  +  OP_BRAMINZERO,     /* order. */
  +
  +  OP_BRANUMBER,      /* Used for extracting brackets whose number is greater
  +                        than can fit into an opcode. */
  +
  +  OP_BRA             /* This and greater values are used for brackets that
  +                        extract substrings up to a basic limit. After that,
  +                        use is made of OP_BRANUMBER. */
  +};
  +
  +/* The highest extraction number before we have to start using additional
  +bytes. (Originally PCRE didn't have support for extraction counts highter than
  +this number.) The value is limited by the number of opcodes left after OP_BRA,
  +i.e. 255 - OP_BRA. We actually set it a bit lower to leave room for additional
  +opcodes. */
  +
  +#define EXTRACT_BASIC_MAX  150
  +
  +/* The texts of compile-time error messages are defined as macros here so that
  +they can be accessed by the POSIX wrapper and converted into error codes.  Yes,
  +I could have used error codes in the first place, but didn't feel like changing
  +just to accommodate the POSIX wrapper. */
  +
  +#define ERR1  "\\ at end of pattern"
  +#define ERR2  "\\c at end of pattern"
  +#define ERR3  "unrecognized character follows \\"
  +#define ERR4  "numbers out of order in {} quantifier"
  +#define ERR5  "number too big in {} quantifier"
  +#define ERR6  "missing terminating ] for character class"
  +#define ERR7  "invalid escape sequence in character class"
  +#define ERR8  "range out of order in character class"
  +#define ERR9  "nothing to repeat"
  +#define ERR10 "operand of unlimited repeat could match the empty string"
  +#define ERR11 "internal error: unexpected repeat"
  +#define ERR12 "unrecognized character after (?"
  +#define ERR13 "unused error"
  +#define ERR14 "missing )"
  +#define ERR15 "back reference to non-existent subpattern"
  +#define ERR16 "erroffset passed as NULL"
  +#define ERR17 "unknown option bit(s) set"
  +#define ERR18 "missing ) after comment"
  +#define ERR19 "parentheses nested too deeply"
  +#define ERR20 "regular expression too large"
  +#define ERR21 "failed to get memory"
  +#define ERR22 "unmatched parentheses"
  +#define ERR23 "internal error: code overflow"
  +#define ERR24 "unrecognized character after (?<"
  +#define ERR25 "lookbehind assertion is not fixed length"
  +#define ERR26 "malformed number after (?("
  +#define ERR27 "conditional group contains more than two branches"
  +#define ERR28 "assertion expected after (?("
  +#define ERR29 "(?p must be followed by )"
  +#define ERR30 "unknown POSIX class name"
  +#define ERR31 "POSIX collating elements are not supported"
  +#define ERR32 "this version of PCRE is not compiled with PCRE_UTF8 support"
  +#define ERR33 "characters with values > 255 are not yet supported in classes"
  +#define ERR34 "character value in \\x{...} sequence is too large"
  +#define ERR35 "invalid condition (?(0)"
  +
  +/* All character handling must be done as unsigned characters. Otherwise there
  +are problems with top-bit-set characters and functions such as isspace().
  +However, we leave the interface to the outside world as char *, because that
  +should make things easier for callers. We define a short type for unsigned char
  +to save lots of typing. I tried "uchar", but it causes problems on Digital
  +Unix, where it is defined in sys/types, so use "uschar" instead. */
  +
  +typedef unsigned char uschar;
  +
  +/* The real format of the start of the pcre block; the actual code vector
  +runs on as long as necessary after the end. */
  +
  +typedef struct real_pcre {
  +  unsigned long int magic_number;
  +  size_t size;
  +  const unsigned char *tables;
  +  unsigned long int options;
  +  unsigned short int top_bracket;
  +  unsigned short int top_backref;
  +  uschar first_char;
  +  uschar req_char;
  +  uschar code[1];
  +} real_pcre;
  +
  +/* The real format of the extra block returned by pcre_study(). */
  +
  +typedef struct real_pcre_extra {
  +  uschar options;
  +  uschar start_bits[32];
  +} real_pcre_extra;
  +
  +/* Structure for passing "static" information around between the functions
  +doing the compiling, so that they are thread-safe. */
  +
  +typedef struct compile_data {
  +  const uschar *lcc;            /* Points to lower casing table */
  +  const uschar *fcc;            /* Points to case-flipping table */
  +  const uschar *cbits;          /* Points to character type table */
  +  const uschar *ctypes;         /* Points to table of type maps */
  +} compile_data;
  +
  +/* Structure for passing "static" information around between the functions
  +doing the matching, so that they are thread-safe. */
  +
  +typedef struct match_data {
  +  int    errorcode;             /* As it says */
  +  int   *offset_vector;         /* Offset vector */
  +  int    offset_end;            /* One past the end */
  +  int    offset_max;            /* The maximum usable for return data */
  +  const uschar *lcc;            /* Points to lower casing table */
  +  const uschar *ctypes;         /* Points to table of type maps */
  +  BOOL   offset_overflow;       /* Set if too many extractions */
  +  BOOL   notbol;                /* NOTBOL flag */
  +  BOOL   noteol;                /* NOTEOL flag */
  +  BOOL   utf8;                  /* UTF8 flag */
  +  BOOL   endonly;               /* Dollar not before final \n */
  +  BOOL   notempty;              /* Empty string match not wanted */
  +  const uschar *start_pattern;  /* For use when recursing */
  +  const uschar *start_subject;  /* Start of the subject string */
  +  const uschar *end_subject;
  +  const uschar *start_match;    /* Start of this match attempt */
  +  const uschar *end_match_ptr;  /* Subject position at end match */
  +  int    end_offset_top;        /* Highwater mark at end of match */
  +} match_data;
  +
  +/* Bit definitions for entries in the pcre_ctypes table. */
  +
  +#define ctype_space   0x01
  +#define ctype_letter  0x02
  +#define ctype_digit   0x04
  +#define ctype_xdigit  0x08
  +#define ctype_word    0x10   /* alphameric or '_' */
  +#define ctype_meta    0x80   /* regexp meta char or zero (end pattern) */
  +
  +/* Offsets for the bitmap tables in pcre_cbits. Each table contains a set
  +of bits for a class map. Some classes are built by combining these tables. */
  +
  +#define cbit_space     0      /* [:space:] or \s */
  +#define cbit_xdigit   32      /* [:xdigit:] */
  +#define cbit_digit    64      /* [:digit:] or \d */
  +#define cbit_upper    96      /* [:upper:] */
  +#define cbit_lower   128      /* [:lower:] */
  +#define cbit_word    160      /* [:word:] or \w */
  +#define cbit_graph   192      /* [:graph:] */
  +#define cbit_print   224      /* [:print:] */
  +#define cbit_punct   256      /* [:punct:] */
  +#define cbit_cntrl   288      /* [:cntrl:] */
  +#define cbit_length  320      /* Length of the cbits table */
  +
  +/* Offsets of the various tables from the base tables pointer, and
  +total length. */
  +
  +#define lcc_offset      0
  +#define fcc_offset    256
  +#define cbits_offset  512
  +#define ctypes_offset (cbits_offset + cbit_length)
  +#define tables_length (ctypes_offset + 256)
  +
  +/* ____ END internal.h ____ */
  +
  +#ifndef STR_PCRE_GENTAB
  +
  +/* ____ BEGIN pcre.c ____ */
  +
  +/* Use a macro for debugging printing, 'cause that eliminates the use of #ifdef
  +inline, and there are *still* stupid compilers about that don't like indented
  +pre-processor statements. I suppose it's only been 10 years... */
  +
  +/* Include the internals header, which itself includes Standard C headers plus
  +the external pcre header. */
  +
   /* Allow compilation as C++ source code, should anybody want to do that. */
   
   #ifdef __cplusplus
   #define class pcre_class
   #endif
   
  -/* Number of items on the nested bracket stacks at compile time. This should
  -not be set greater than 200. */
  +/* Maximum number of items on the nested bracket stacks at compile time. This
  +applies to the nesting of all kinds of parentheses. It does not limit
  +un-nested, non-capturing parentheses. This number can be made bigger if
  +necessary - it is used to dimension one int and one unsigned char vector at
  +compile time. */
   
   #define BRASTACK_SIZE 200
   
  +/* The number of bytes in a literal character string above which we can't add
  +any more is different when UTF-8 characters may be encountered. */
  +
  +#ifdef STR_PCRE_SUPPORT_UTF8
  +#define MAXLIT 250
  +#else
  +#define MAXLIT 255
  +#endif
  +
   /* Min and max values for the common repeats; for the maxima, 0 => infinity */
   
   static const char rep_min[] = { 0, 0, 1, 1, 0, 0 };
   static const char rep_max[] = { 0, 0, 0, 0, 1, 1 };
   
  +/* Text forms of OP_ values and things, for debugging (not all used) */
  +
   /* Table for handling escaped characters in the range '0'-'z'. Positive returns
   are simple data values; negative values are for special things like \d and so
   on. Zero means further processing is needed (for things like \x), or the escape
  @@ -88,18 +447,64 @@
       0,      0,      0,      0,      0,      0,      0,      0,   /* H - O */
       0,      0,      0, -ESC_S,      0,      0,      0, -ESC_W,   /* P - W */
       0,      0, -ESC_Z,    '[',   '\\',    ']',    '^',    '_',   /* X - _ */
  -  '`',      7, -ESC_b,      0, -ESC_d,     27,   '\f',      0,   /* ` - g */
  -    0,      0,      0,      0,      0,      0,   '\n',      0,   /* h - o */
  -    0,      0,   '\r', -ESC_s,   '\t',      0,      0, -ESC_w,   /* p - w */
  +  '`',      7, -ESC_b,      0, -ESC_d,  ESC_E,  ESC_F,      0,   /* ` - g */
  +    0,      0,      0,      0,      0,      0,  ESC_N,      0,   /* h - o */
  +    0,      0,  ESC_R, -ESC_s,  ESC_T,      0,      0, -ESC_w,   /* p - w */
       0,      0, -ESC_z                                            /* x - z */
   };
   
  +/* Tables of names of POSIX character classes and their lengths. The list is
  +terminated by a zero length entry. The first three must be alpha, upper, lower,
  +as this is assumed for handling case independence. */
  +
  +static const char *posix_names[] = {
  +  "alpha", "lower", "upper",
  +  "alnum", "ascii", "cntrl", "digit", "graph",
  +  "print", "punct", "space", "word",  "xdigit" };
  +
  +static const uschar posix_name_lengths[] = {
  +  5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 6, 0 };
  +
  +/* Table of class bit maps for each POSIX class; up to three may be combined
  +to form the class. */
  +
  +static const int posix_class_maps[] = {
  +  cbit_lower, cbit_upper, -1,             /* alpha */
  +  cbit_lower, -1,         -1,             /* lower */
  +  cbit_upper, -1,         -1,             /* upper */
  +  cbit_digit, cbit_lower, cbit_upper,     /* alnum */
  +  cbit_print, cbit_cntrl, -1,             /* ascii */
  +  cbit_cntrl, -1,         -1,             /* cntrl */
  +  cbit_digit, -1,         -1,             /* digit */
  +  cbit_graph, -1,         -1,             /* graph */
  +  cbit_print, -1,         -1,             /* print */
  +  cbit_punct, -1,         -1,             /* punct */
  +  cbit_space, -1,         -1,             /* space */
  +  cbit_word,  -1,         -1,             /* word */
  +  cbit_xdigit,-1,         -1              /* xdigit */
  +};
  +
   /* Definition to allow mutual recursion */
   
   static BOOL
     compile_regex(int, int, int *, uschar **, const uschar **, const char **,
       BOOL, int, int *, int *, compile_data *);
   
  +/* Structure for building a chain of data that actually lives on the
  +stack, for holding the values of the subject pointer at the start of each
  +subpattern, so as to detect when an empty string has been matched by a
  +subpattern - to break infinite loops. */
  +
  +typedef struct eptrblock {
  +  struct eptrblock *prev;
  +  const uschar *saved_eptr;
  +} eptrblock;
  +
  +/* Flag bits for the match() function */
  +
  +#define match_condassert   0x01    /* Called to check a condition assertion */
  +#define match_isgroup      0x02    /* Set if start of bracketed group */
  +
   /*************************************************
   *               Global variables                 *
   *************************************************/
  @@ -113,6 +518,63 @@
   void  (*pcre_free)(void *) = free;
   
   /*************************************************
  +*    Macros and tables for character handling    *
  +*************************************************/
  +
  +/* When UTF-8 encoding is being used, a character is no longer just a single
  +byte. The macros for character handling generate simple sequences when used in
  +byte-mode, and more complicated ones for UTF-8 characters. */
  +
  +#ifndef STR_PCRE_SUPPORT_UTF8
  +#define GETCHARINC(c, eptr) c = *eptr++;
  +#define GETCHARLEN(c, eptr, len) c = *eptr;
  +#define BACKCHAR(eptr)
  +
  +#else   /* STR_PCRE_SUPPORT_UTF8 */
  +
  +/* Get the next UTF-8 character, advancing the pointer */
  +
  +#define GETCHARINC(c, eptr) \
  +  c = *eptr++; \
  +  if (md->utf8 && (c & 0xc0) == 0xc0) \
  +    { \
  +    int a = utf8_table4[c & 0x3f];  /* Number of additional bytes */ \
  +    int s = 6 - a;                  /* Amount to shift next byte */  \
  +    c &= utf8_table3[a];            /* Low order bits from first byte */ \
  +    while (a-- > 0) \
  +      { \
  +      c |= (*eptr++ & 0x3f) << s; \
  +      s += 6; \
  +      } \
  +    }
  +
  +/* Get the next UTF-8 character, not advancing the pointer, setting length */
  +
  +#define GETCHARLEN(c, eptr, len) \
  +  c = *eptr; \
  +  len = 1; \
  +  if (md->utf8 && (c & 0xc0) == 0xc0) \
  +    { \
  +    int i; \
  +    int a = utf8_table4[c & 0x3f];  /* Number of additional bytes */ \
  +    int s = 6 - a;                  /* Amount to shift next byte */  \
  +    c &= utf8_table3[a];            /* Low order bits from first byte */ \
  +    for (i = 1; i <= a; i++) \
  +      { \
  +      c |= (eptr[i] & 0x3f) << s; \
  +      s += 6; \
  +      } \
  +    len += a; \
  +    }
  +
  +/* If the pointer is not at the start of a character, move it back until
  +it is. */
  +
  +#define BACKCHAR(eptr) while((*eptr & 0xc0) == 0x80) eptr--;
  +
  +#endif
  +
  +/*************************************************
   *             Default character tables           *
   *************************************************/
   
  @@ -124,6 +586,63 @@
   
   #include "str_pcre_tab.c"
   
  +#ifdef STR_PCRE_SUPPORT_UTF8
  +/*************************************************
  +*           Tables for UTF-8 support             *
  +*************************************************/
  +
  +/* These are the breakpoints for different numbers of bytes in a UTF-8
  +character. */
  +
  +static int utf8_table1[] = { 0x7f, 0x7ff, 0xffff, 0x1fffff, 0x3ffffff, 0x7fffffff};
  +
  +/* These are the indicator bits and the mask for the data bits to set in the
  +first byte of a character, indexed by the number of additional bytes. */
  +
  +static int utf8_table2[] = { 0,    0xc0, 0xe0, 0xf0, 0xf8, 0xfc};
  +static int utf8_table3[] = { 0xff, 0x1f, 0x0f, 0x07, 0x03, 0x01};
  +
  +/* Table of the number of extra characters, indexed by the first character
  +masked with 0x3f. The highest number for a valid UTF-8 character is in fact
  +0x3d. */
  +
  +static uschar utf8_table4[] = {
  +  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  +  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  +  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
  +  3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5 };
  +
  +/*************************************************
  +*       Convert character value to UTF-8         *
  +*************************************************/
  +
  +/* This function takes an integer value in the range 0 - 0x7fffffff
  +and encodes it as a UTF-8 character in 0 to 6 bytes.
  +
  +Arguments:
  +  cvalue     the character value
  +  buffer     pointer to buffer for result - at least 6 bytes long
  +
  +Returns:     number of characters placed in the buffer
  +*/
  +
  +static int
  +ord2utf8(int cvalue, uschar *buffer)
  +{
  +register int i, j;
  +for (i = 0; i < sizeof(utf8_table1)/sizeof(int); i++)
  +  if (cvalue <= utf8_table1[i]) break;
  +*buffer++ = utf8_table2[i] | (cvalue & utf8_table3[i]);
  +cvalue >>= 6 - i;
  +for (j = 0; j < i; j++)
  +  {
  +  *buffer++ = 0x80 | (cvalue & 0x3f);
  +  cvalue >>= 6;
  +  }
  +return i + 1;
  +}
  +#endif
  +
   /*************************************************
   *          Return version string                 *
   *************************************************/
  @@ -138,12 +657,13 @@
   }
   
   /*************************************************
  -*       Return info about a compiled pattern     *
  +* (Obsolete) Return info about compiled pattern  *
   *************************************************/
   
  -/* This function picks potentially useful data out of the private
  -structure. The public options are passed back in an int - though the
  -re->options field has been expanded to a long int, all the public options
  +/* This is the original "info" function. It picks potentially useful data out
  +of the private structure, but its interface was too rigid. It remains for
  +backwards compatibility. The public options are passed back in an int - though
  +the re->options field has been expanded to a long int, all the public options
   at the low end of it, and so even on 16-bit systems this will still be OK.
   Therefore, I haven't changed the API for pcre_info().
   
  @@ -154,7 +674,7 @@
                   or -1 if multiline and all branches start ^,
                   or -2 otherwise
   
  -Returns:        number of identifying extraction brackets
  +Returns:        number of capturing subpatterns
                   or negative values on error
   */
   
  @@ -172,14 +692,81 @@
   }
   
   /*************************************************
  +*        Return info about compiled pattern      *
  +*************************************************/
  +
  +/* This is a newer "info" function which has an extensible interface so
  +that additional items can be added compatibly.
  +
  +Arguments:
  +  external_re      points to compiled code
  +  external_study   points to study data, or NULL
  +  what             what information is required
  +  where            where to put the information
  +
  +Returns:           0 if data returned, negative on error
  +*/
  +
  +int
  +pcre_fullinfo(const pcre *external_re, const pcre_extra *study_data, int what,
  +  void *where)
  +{
  +const real_pcre *re = (const real_pcre *)external_re;
  +const real_pcre_extra *study = (const real_pcre_extra *)study_data;
  +
  +if (re == NULL || where == NULL) return PCRE_ERROR_NULL;
  +if (re->magic_number != MAGIC_NUMBER) return PCRE_ERROR_BADMAGIC;
  +
  +switch (what)
  +  {
  +  case PCRE_INFO_OPTIONS:
  +  *((unsigned long int *)where) = re->options & PUBLIC_OPTIONS;
  +  break;
  +
  +  case PCRE_INFO_SIZE:
  +  *((size_t *)where) = re->size;
  +  break;
  +
  +  case PCRE_INFO_CAPTURECOUNT:
  +  *((int *)where) = re->top_bracket;
  +  break;
  +
  +  case PCRE_INFO_BACKREFMAX:
  +  *((int *)where) = re->top_backref;
  +  break;
  +
  +  case PCRE_INFO_FIRSTCHAR:
  +  *((int *)where) =
  +    ((re->options & PCRE_FIRSTSET) != 0)? re->first_char :
  +    ((re->options & PCRE_STARTLINE) != 0)? -1 : -2;
  +  break;
  +
  +  case PCRE_INFO_FIRSTTABLE:
  +  *((const uschar **)where) =
  +    (study != NULL && (study->options & PCRE_STUDY_MAPPED) != 0)?
  +      study->start_bits : NULL;
  +  break;
  +
  +  case PCRE_INFO_LASTLITERAL:
  +  *((int *)where) =
  +    ((re->options & PCRE_REQCHSET) != 0)? re->req_char : -1;
  +  break;
  +
  +  default: return PCRE_ERROR_BADOPTION;
  +  }
  +
  +return 0;
  +}
  +
  +/*************************************************
   *            Handle escapes                      *
   *************************************************/
   
   /* This function is called when a \ has been encountered. It either returns a
   positive value for a simple escape such as \n, or a negative value which
  -encodes one of the more complicated things such as \d. On entry, ptr is
  -pointing at the \. On exit, it is on the final character of the escape
  -sequence.
  +encodes one of the more complicated things such as \d. When UTF-8 is enabled,
  +a positive value greater than 255 may be returned. On entry, ptr is pointing at
  +the \. On exit, it is on the final character of the escape sequence.
   
   Arguments:
     ptrptr     points to the pattern position pointer
  @@ -199,9 +786,11 @@
     int options, BOOL isclass, compile_data *cd)
   {
   const uschar *ptr = *ptrptr;
  -int c = *(++ptr) & 255;   /* Ensure > 0 on signed-char systems */
  -int i;
  +int c, i;
   
  +/* If backslash is at the end of the pattern, it's an error. */
  +
  +c = *(++ptr);
   if (c == 0) *errorptr = ERR1;
   
   /* Digits or letters may have special meaning; all others are literals. */
  @@ -261,18 +850,46 @@
         }
   
       /* \0 always starts an octal number, but we may drop through to here with a
  -    larger first octal digit */
  +    larger first octal digit. */
   
       case '0':
       c -= '0';
       while(i++ < 2 && (cd->ctypes[ptr[1]] & ctype_digit) != 0 &&
         ptr[1] != '8' && ptr[1] != '9')
           c = c * 8 + *(++ptr) - '0';
  +    c &= 255;     /* Take least significant 8 bits */
       break;
   
  -    /* Special escapes not starting with a digit are straightforward */
  +    /* \x is complicated when UTF-8 is enabled. \x{ddd} is a character number
  +    which can be greater than 0xff, but only if the ddd are hex digits. */
   
       case 'x':
  +#ifdef STR_PCRE_SUPPORT_UTF8
  +    if (ptr[1] == '{' && (options & PCRE_UTF8) != 0)
  +      {
  +      const uschar *pt = ptr + 2;
  +      register int count = 0;
  +      c = 0;
  +      while ((cd->ctypes[*pt] & ctype_xdigit) != 0)
  +        {
  +        count++;
  +        c = c * 16 + cd->lcc[*pt] -
  +          (((cd->ctypes[*pt] & ctype_digit) != 0)? '0' : 'W');
  +        pt++;
  +        }
  +      if (*pt == '}')
  +        {
  +        if (c < 0 || count > 8) *errorptr = ERR34;
  +        ptr = pt;
  +        break;
  +        }
  +      /* If the sequence of hex digits does not end with '}', then we don't
  +      recognize this construct; fall through to the normal \x handling. */
  +      }
  +#endif
  +
  +    /* Read just a single hex char */
  +
       c = 0;
       while (i++ < 2 && (cd->ctypes[ptr[1]] & ctype_xdigit) != 0)
         {
  @@ -282,6 +899,8 @@
         }
       break;
   
  +    /* Other special escapes not starting with a digit are straightforward */
  +
       case 'c':
       c = *(++ptr);
       if (c == 0)
  @@ -413,12 +1032,13 @@
   
   Arguments:
     code     points to the start of the pattern (the bracket)
  +  options  the compiling options
   
   Returns:   the fixed length, or -1 if there is no fixed length
   */
   
   static int
  -find_fixedlength(uschar *code)
  +find_fixedlength(uschar *code, int options)
   {
   int length = -1;
   
  @@ -439,7 +1059,7 @@
       case OP_BRA:
       case OP_ONCE:
       case OP_COND:
  -    d = find_fixedlength(cc);
  +    d = find_fixedlength(cc, options);
       if (d < 0) return -1;
       branchlength += d;
       do cc += (cc[1] << 8) + cc[2]; while (*cc == OP_ALT);
  @@ -475,10 +1095,11 @@
       /* Skip over things that don't match chars */
   
       case OP_REVERSE:
  +    case OP_BRANUMBER:
  +    case OP_CREF:
       cc++;
       /* Fall through */
   
  -    case OP_CREF:
       case OP_OPT:
       cc++;
       /* Fall through */
  @@ -493,10 +1114,17 @@
       cc++;
       break;
   
  -    /* Handle char strings */
  +    /* Handle char strings. In UTF-8 mode we must count characters, not bytes.
  +    This requires a scan of the string, unfortunately. We assume valid UTF-8
  +    strings, so all we do is reduce the length by one for byte whose bits are
  +    10xxxxxx. */
   
       case OP_CHARS:
       branchlength += *(++cc);
  +#ifdef STR_PCRE_SUPPORT_UTF8
  +    for (d = 1; d <= *cc; d++)
  +      if ((cc[d] & 0xc0) == 0x80) branchlength--;
  +#endif
       cc += *cc + 1;
       break;
   
  @@ -521,11 +1149,10 @@
       cc++;
       break;
   
  -
       /* Check a class for variable quantification */
   
       case OP_CLASS:
  -    cc += (*cc == OP_REF)? 2 : 33;
  +    cc += 33;
   
       switch (*cc)
         {
  @@ -557,6 +1184,65 @@
   }
   
   /*************************************************
  +*           Check for POSIX class syntax         *
  +*************************************************/
  +
  +/* This function is called when the sequence "[:" or "[." or "[=" is
  +encountered in a character class. It checks whether this is followed by an
  +optional ^ and then a sequence of letters, terminated by a matching ":]" or
  +".]" or "=]".
  +
  +Argument:
  +  ptr      pointer to the initial [
  +  endptr   where to return the end pointer
  +  cd       pointer to compile data
  +
  +Returns:   TRUE or FALSE
  +*/
  +
  +static BOOL
  +check_posix_syntax(const uschar *ptr, const uschar **endptr, compile_data *cd)
  +{
  +int terminator;          /* Don't combine these lines; the Solaris cc */
  +terminator = *(++ptr);   /* compiler warns about "non-constant" initializer. */
  +if (*(++ptr) == '^') ptr++;
  +while ((cd->ctypes[*ptr] & ctype_letter) != 0) ptr++;
  +if (*ptr == terminator && ptr[1] == ']')
  +  {
  +  *endptr = ptr;
  +  return TRUE;
  +  }
  +return FALSE;
  +}
  +
  +/*************************************************
  +*          Check POSIX class name                *
  +*************************************************/
  +
  +/* This function is called to check the name given in a POSIX-style class entry
  +such as [:alnum:].
  +
  +Arguments:
  +  ptr        points to the first letter
  +  len        the length of the name
  +
  +Returns:     a value representing the name, or -1 if unknown
  +*/
  +
  +static int
  +check_posix_name(const uschar *ptr, int len)
  +{
  +register int yield = 0;
  +while (posix_name_lengths[yield] != 0)
  +  {
  +  if (len == posix_name_lengths[yield] &&
  +    strncmp((const char *)ptr, posix_names[yield], len) == 0) return yield;
  +  yield++;
  +  }
  +return -1;
  +}
  +
  +/*************************************************
   *           Compile one branch                   *
   *************************************************/
   
  @@ -564,7 +1250,7 @@
   
   Arguments:
     options      the option bits
  -  brackets     points to number of brackets used
  +  brackets     points to number of extracting brackets used
     code         points to the pointer to the current code point
     ptrptr       points to the current pattern pointer
     errorptr     points to pointer to error message
  @@ -589,7 +1275,7 @@
   int prevreqchar;
   int condcount = 0;
   int subcountlits = 0;
  -register int c = 0;
  +register int c;
   register uschar *code = *codeptr;
   uschar *tempcode;
   const uschar *ptr = *ptrptr;
  @@ -615,7 +1301,7 @@
     int class_charcount;
     int class_lastchar;
     int newoptions;
  -  int condref;
  +  int skipbytes;
     int subreqchar;
   
     c = *ptr;
  @@ -624,7 +1310,9 @@
       if ((cd->ctypes[c] & ctype_space) != 0) continue;
       if (c == '#')
         {
  -      while ((c = *(++ptr)) != 0 && c != '\n');
  +      /* The space before the ; is to avoid a warning on a silly compiler
  +      on the Macintosh. */
  +      while ((c = *(++ptr)) != 0 && c != '\n') ;
         continue;
         }
       }
  @@ -699,6 +1387,66 @@
           goto FAILED;
           }
   
  +      /* Handle POSIX class names. Perl allows a negation extension of the
  +      form [:^name]. A square bracket that doesn't match the syntax is
  +      treated as a literal. We also recognize the POSIX constructions
  +      [.ch.] and [=ch=] ("collating elements") and fault them, as Perl
  +      5.6 does. */
  +
  +      if (c == '[' &&
  +          (ptr[1] == ':' || ptr[1] == '.' || ptr[1] == '=') &&
  +          check_posix_syntax(ptr, &tempptr, cd))
  +        {
  +        BOOL local_negate = FALSE;
  +        int posix_class, i;
  +        register const uschar *cbits = cd->cbits;
  +
  +        if (ptr[1] != ':')
  +          {
  +          *errorptr = ERR31;
  +          goto FAILED;
  +          }
  +
  +        ptr += 2;
  +        if (*ptr == '^')
  +          {
  +          local_negate = TRUE;
  +          ptr++;
  +          }
  +
  +        posix_class = check_posix_name(ptr, tempptr - ptr);
  +        if (posix_class < 0)
  +          {
  +          *errorptr = ERR30;
  +          goto FAILED;
  +          }
  +
  +        /* If matching is caseless, upper and lower are converted to
  +        alpha. This relies on the fact that the class table starts with
  +        alpha, lower, upper as the first 3 entries. */
  +
  +        if ((options & PCRE_CASELESS) != 0 && posix_class <= 2)
  +          posix_class = 0;
  +
  +        /* Or into the map we are building up to 3 of the static class
  +        tables, or their negations. */
  +
  +        posix_class *= 3;
  +        for (i = 0; i < 3; i++)
  +          {
  +          int taboffset = posix_class_maps[posix_class + i];
  +          if (taboffset < 0) break;
  +          if (local_negate)
  +            for (c = 0; c < 32; c++) class[c] |= ~cbits[c+taboffset];
  +          else
  +            for (c = 0; c < 32; c++) class[c] |= cbits[c+taboffset];
  +          }
  +
  +        ptr = tempptr + 1;
  +        class_charcount = 10;  /* Set > 1; assumes more than 1 per class */
  +        continue;
  +        }
  +
         /* Backslash may introduce a single character, or it may introduce one
         of the specials, which just set a flag. Escaped items are checked for
         validity in the pre-compiling pass. The sequence \b is a special case.
  @@ -726,13 +1474,11 @@
               continue;
   
               case ESC_w:
  -            for (c = 0; c < 32; c++)
  -              class[c] |= (cbits[c+cbit_digit] | cbits[c+cbit_word]);
  +            for (c = 0; c < 32; c++) class[c] |= cbits[c+cbit_word];
               continue;
   
               case ESC_W:
  -            for (c = 0; c < 32; c++)
  -              class[c] |= ~(cbits[c+cbit_digit] | cbits[c+cbit_word]);
  +            for (c = 0; c < 32; c++) class[c] |= ~cbits[c+cbit_word];
               continue;
   
               case ESC_s:
  @@ -747,8 +1493,18 @@
               *errorptr = ERR7;
               goto FAILED;
               }
  +          }
  +
  +        /* Fall through if single character, but don't at present allow
  +        chars > 255 in UTF-8 mode. */
  +
  +#ifdef STR_PCRE_SUPPORT_UTF8
  +        if (c > 255)
  +          {
  +          *errorptr = ERR33;
  +          goto FAILED;
             }
  -        /* Fall through if single character */
  +#endif
           }
   
         /* A single character may be followed by '-' to form a range. However,
  @@ -768,17 +1524,29 @@
             }
   
           /* The second part of a range can be a single-character escape, but
  -        not any of the other escapes. */
  +        not any of the other escapes. Perl 5.6 treats a hyphen as a literal
  +        in such circumstances. */
   
           if (d == '\\')
             {
  +          const uschar *oldptr = ptr;
             d = check_escape(&ptr, errorptr, *brackets, options, TRUE, cd);
  +
  +#ifdef STR_PCRE_SUPPORT_UTF8
  +          if (d > 255)
  +            {
  +            *errorptr = ERR33;
  +            goto FAILED;
  +            }
  +#endif
  +          /* \b is backslash; any other special means the '-' was literal */
  +
             if (d < 0)
               {
               if (d == -ESC_b) d = '\b'; else
                 {
  -              *errorptr = ERR7;
  -              goto FAILED;
  +              ptr = oldptr - 2;
  +              goto SINGLE_CHARACTER;  /* A few lines below */
                 }
               }
             }
  @@ -806,6 +1574,8 @@
         /* Handle a lone single character - we can get here for a normal
         non-escape char, or after \ that introduces a single character. */
   
  +      SINGLE_CHARACTER:
  +
         class [c/8] |= (1 << (c&7));
         if ((options & PCRE_CASELESS) != 0)
           {
  @@ -1080,7 +1850,7 @@
         OP_BRAZERO in front of it, and because the group appears once in the
         data, whereas in other cases it appears the minimum number of times. For
         this reason, it is simplest to treat this case separately, as otherwise
  -      the code gets far too mess. There are several special subcases when the
  +      the code gets far too messy. There are several special subcases when the
         minimum is zero. */
   
         if (repeat_min == 0)
  @@ -1221,7 +1991,6 @@
       previous = NULL;
       break;
   
  -
       /* Start of nested bracket sub-expression, or comment or lookahead or
       lookbehind or option setting or condition. First deal with special things
       that can come after a bracket; all are introduced by ?, and the appearance
  @@ -1231,7 +2000,7 @@
   
       case '(':
       newoptions = options;
  -    condref = -1;
  +    skipbytes = 0;
   
       if (*(++ptr) == '?')
         {
  @@ -1254,9 +2023,18 @@
           bravalue = OP_COND;       /* Conditional group */
           if ((cd->ctypes[*(++ptr)] & ctype_digit) != 0)
             {
  -          condref = *ptr - '0';
  +          int condref = *ptr - '0';
             while (*(++ptr) != ')') condref = condref*10 + *ptr - '0';
  +          if (condref == 0)
  +            {
  +            *errorptr = ERR35;
  +            goto FAILED;
  +            }
             ptr++;
  +          code[3] = OP_CREF;
  +          code[4] = condref >> 8;
  +          code[5] = condref & 255;
  +          skipbytes = 3;
             }
           else ptr--;
           break;
  @@ -1295,6 +2073,11 @@
           ptr++;
           break;
   
  +        case 'R':                 /* Pattern recursion */
  +        *code++ = OP_RECURSE;
  +        ptr++;
  +        continue;
  +
           default:                  /* Option setting */
           set = unset = 0;
           optset = &set;
  @@ -1354,16 +2137,21 @@
           }
         }
   
  -    /* Else we have a referencing group; adjust the opcode. */
  +    /* Else we have a referencing group; adjust the opcode. If the bracket
  +    number is greater than EXTRACT_BASIC_MAX, we set the opcode one higher, and
  +    arrange for the true number to follow later, in an OP_BRANUMBER item. */
   
       else
         {
  -      if (++(*brackets) > EXTRACT_MAX)
  +      if (++(*brackets) > EXTRACT_BASIC_MAX)
           {
  -        *errorptr = ERR13;
  -        goto FAILED;
  +        bravalue = OP_BRA + EXTRACT_BASIC_MAX + 1;
  +        code[3] = OP_BRANUMBER;
  +        code[4] = *brackets >> 8;
  +        code[5] = *brackets & 255;
  +        skipbytes = 3;
           }
  -      bravalue = OP_BRA + *brackets;
  +      else bravalue = OP_BRA + *brackets;
         }
   
       /* Process nested bracketed re. Assertions may not be repeated, but other
  @@ -1379,13 +2167,13 @@
            options | PCRE_INGROUP,       /* Set for all nested groups */
            ((options & PCRE_IMS) != (newoptions & PCRE_IMS))?
              newoptions & PCRE_IMS : -1, /* Pass ims options if changed */
  -         brackets,                     /* Bracket level */
  +         brackets,                     /* Extracting bracket count */
            &tempcode,                    /* Where to put code (updated) */
            &ptr,                         /* Input pointer (updated) */
            errorptr,                     /* Where to put an error message */
            (bravalue == OP_ASSERTBACK ||
             bravalue == OP_ASSERTBACK_NOT), /* TRUE if back assert */
  -         condref,                      /* Condition reference number */
  +         skipbytes,                    /* Skip over OP_COND/OP_BRANUMBER */
            &subreqchar,                  /* For possible last char */
            &subcountlits,                /* For literal count */
            cd))                          /* Tables block */
  @@ -1399,7 +2187,7 @@
       /* If this is a conditional bracket, check that there are no more than
       two branches in the group. */
   
  -    if (bravalue == OP_COND)
  +    else if (bravalue == OP_COND)
         {
         uschar *tc = code;
         condcount = 0;
  @@ -1466,9 +2254,11 @@
         {
         if (-c >= ESC_REF)
           {
  +        int number = -c - ESC_REF;
           previous = code;
           *code++ = OP_REF;
  -        *code++ = -c - ESC_REF;
  +        *code++ = number >> 8;
  +        *code++ = number & 255;
           }
         else
           {
  @@ -1501,7 +2291,9 @@
           if ((cd->ctypes[c] & ctype_space) != 0) continue;
           if (c == '#')
             {
  -          while ((c = *(++ptr)) != 0 && c != '\n');
  +          /* The space before the ; is to avoid a warning on a silly compiler
  +          on the Macintosh. */
  +          while ((c = *(++ptr)) != 0 && c != '\n') ;
             if (c == 0) break;
             continue;
             }
  @@ -1516,6 +2308,20 @@
           tempptr = ptr;
           c = check_escape(&ptr, errorptr, *brackets, options, FALSE, cd);
           if (c < 0) { ptr = tempptr; break; }
  +
  +        /* If a character is > 127 in UTF-8 mode, we have to turn it into
  +        two or more characters in the UTF-8 encoding. */
  +
  +#ifdef STR_PCRE_SUPPORT_UTF8
  +        if (c > 127 && (options & PCRE_UTF8) != 0)
  +          {
  +          uschar buffer[8];
  +          int len = ord2utf8(c, buffer);
  +          for (c = 0; c < len; c++) *code++ = buffer[c];
  +          length += len;
  +          continue;
  +          }
  +#endif
           }
   
         /* Ordinary character or single-char escape */
  @@ -1526,7 +2332,7 @@
   
       /* This "while" is the end of the "do" above. */
   
  -    while (length < 255 && (cd->ctypes[c = *(++ptr)] & ctype_meta) == 0);
  +    while (length < MAXLIT && (cd->ctypes[c = *(++ptr)] & ctype_meta) == 0);
   
       /* Update the last character and the count of literals */
   
  @@ -1538,7 +2344,7 @@
       the next state. */
   
       previous[1] = length;
  -    if (length < 255) ptr--;
  +    if (length < MAXLIT) ptr--;
       break;
       }
     }                   /* end of big loop */
  @@ -1573,7 +2379,7 @@
     ptrptr      -> the address of the current pattern pointer
     errorptr    -> pointer to error message
     lookbehind  TRUE if this is a lookbehind assertion
  -  condref     > 0 for OPT_CREF setting at start of conditional group
  +  skipbytes   skip this many bytes at start (for OP_COND, OP_BRANUMBER)
     reqchar     -> place to put the last required character, or a negative number
     countlits   -> place to put the shortest literal count of any branch
     cd          points to the data block with tables pointers
  @@ -1583,7 +2389,7 @@
   
   static BOOL
   compile_regex(int options, int optchanged, int *brackets, uschar **codeptr,
  -  const uschar **ptrptr, const char **errorptr, BOOL lookbehind, int condref,
  +  const uschar **ptrptr, const char **errorptr, BOOL lookbehind, int skipbytes,
     int *reqchar, int *countlits, compile_data *cd)
   {
   const uschar *ptr = *ptrptr;
  @@ -1596,16 +2402,7 @@
   
   *reqchar = -1;
   *countlits = INT_MAX;
  -code += 3;
  -
  -/* At the start of a reference-based conditional group, insert the reference
  -number as an OP_CREF item. */
  -
  -if (condref > 0)
  -  {
  -  *code++ = OP_CREF;
  -  *code++ = condref;
  -  }
  +code += 3 + skipbytes;
   
   /* Loop for each alternative branch */
   
  @@ -1672,7 +2469,8 @@
     if (lookbehind)
       {
       *code = OP_END;
  -    length = find_fixedlength(last_branch);
  +    length = find_fixedlength(last_branch, options);
  +
       if (length < 0)
         {
         *errorptr = ERR25;
  @@ -1752,7 +2550,8 @@
       break;
   
       case OP_CREF:
  -    code += 2;
  +    case OP_BRANUMBER:
  +    code += 3;
       break;
   
       case OP_WORD_BOUNDARY:
  @@ -1931,18 +2730,29 @@
   real_pcre *re;
   int length = 3;      /* For initial BRA plus length */
   int runlength;
  -int c, size, reqchar, countlits;
  +int c, reqchar, countlits;
   int bracount = 0;
   int top_backref = 0;
   int branch_extra = 0;
   int branch_newextra;
   unsigned int brastackptr = 0;
  +size_t size;
   uschar *code;
   const uschar *ptr;
   compile_data compile_block;
   int brastack[BRASTACK_SIZE];
   uschar bralenstack[BRASTACK_SIZE];
   
  +/* Can't support UTF8 unless PCRE has been compiled to include the code. */
  +
  +#ifndef STR_PCRE_SUPPORT_UTF8
  +if ((options & PCRE_UTF8) != 0)
  +  {
  +  *errorptr = ERR32;
  +  return NULL;
  +  }
  +#endif
  +
   /* We can't pass back an error message if errorptr is NULL; I guess the best we
   can do is just return NULL. */
   
  @@ -1972,6 +2782,8 @@
   compile_block.cbits = tables + cbits_offset;
   compile_block.ctypes = tables + ctypes_offset;
   
  +/* Reflect pattern for debugging output */
  +
   /* The first thing to do is to make a pass over the pattern to compute the
   amount of store required to hold the compiled code. This does not have to be
   perfect as long as errors are overestimates. At the same time we can detect any
  @@ -1984,13 +2796,16 @@
     {
     int min, max;
     int class_charcount;
  +  int bracket_length;
   
     if ((options & PCRE_EXTENDED) != 0)
       {
       if ((compile_block.ctypes[c] & ctype_space) != 0) continue;
       if (c == '#')
         {
  -      while ((c = *(++ptr)) != 0 && c != '\n');
  +      /* The space before the ; is to avoid a warning on a silly compiler
  +      on the Macintosh. */
  +      while ((c = *(++ptr)) != 0 && c != '\n') ;
         continue;
         }
       }
  @@ -2016,7 +2831,7 @@
         }
       length++;
   
  -    /* A back reference needs an additional char, plus either one or 5
  +    /* A back reference needs an additional 2 bytes, plus either one or 5
       bytes for a repeat. We also need to keep the value of the highest
       back reference. */
   
  @@ -2024,7 +2839,7 @@
         {
         int refnum = -c - ESC_REF;
         if (refnum > top_backref) top_backref = refnum;
  -      length++;   /* For single back reference */
  +      length += 2;   /* For single back reference */
         if (ptr[1] == '{' && is_counted_repeat(ptr+2, &compile_block))
           {
           ptr = read_repeat_counts(ptr+2, &min, &max, errorptr, &compile_block);
  @@ -2122,6 +2937,7 @@
   
       case '(':
       branch_newextra = 0;
  +    bracket_length = 3;
   
       /* Handle special forms of bracket, which all start (? */
   
  @@ -2155,6 +2971,19 @@
           ptr += 2;
           break;
   
  +        /* A recursive call to the regex is an extension, to provide the
  +        facility which can be obtained by $(?p{perl-code}) in Perl 5.6. */
  +
  +        case 'R':
  +        if (ptr[3] != ')')
  +          {
  +          *errorptr = ERR29;
  +          goto PCRE_ERROR_RETURN;
  +          }
  +        ptr += 3;
  +        length += 1;
  +        break;
  +
           /* Lookbehinds are in Perl from version 5.005 */
   
           case '<':
  @@ -2176,7 +3005,7 @@
           if ((compile_block.ctypes[ptr[3]] & ctype_digit) != 0)
             {
             ptr += 4;
  -          length += 2;
  +          length += 3;
             while ((compile_block.ctypes[*ptr] & ctype_digit) != 0) ptr++;
             if (*ptr != ')')
               {
  @@ -2187,8 +3016,8 @@
           else   /* An assertion must follow */
             {
             ptr++;   /* Can treat like ':' as far as spacing is concerned */
  -
  -          if (ptr[2] != '?' || strchr("=!<", ptr[3]) == NULL)
  +          if (ptr[2] != '?' ||
  +             (ptr[3] != '=' && ptr[3] != '!' && ptr[3] != '<') )
               {
               ptr += 2;    /* To get right offset in message */
               *errorptr = ERR28;
  @@ -2303,15 +3132,19 @@
         }
   
       /* Extracting brackets must be counted so we can process escapes in a
  -    Perlish way. */
  +    Perlish way. If the number exceeds EXTRACT_BASIC_MAX we are going to
  +    need an additional 3 bytes of store per extracting bracket. */
   
  -    else bracount++;
  +    else
  +      {
  +      bracount++;
  +      if (bracount > EXTRACT_BASIC_MAX) bracket_length += 3;
  +      }
   
  -    /* Non-special forms of bracket. Save length for computing whole length
  -    at end if there's a repeat that requires duplication of the group. Also
  -    save the current value of branch_extra, and start the new group with
  -    the new value. If non-zero, this will either be 2 for a (?imsx: group, or 3
  -    for a lookbehind assertion. */
  +    /* Save length for computing whole length at end if there's a repeat that
  +    requires duplication of the group. Also save the current value of
  +    branch_extra, and start the new group with the new value. If non-zero, this
  +    will either be 2 for a (?imsx: group, or 3 for a lookbehind assertion. */
   
       if (brastackptr >= sizeof(brastack)/sizeof(int))
         {
  @@ -2323,7 +3156,7 @@
       branch_extra = branch_newextra;
   
       brastack[brastackptr++] = length;
  -    length += 3;
  +    length += bracket_length;
       continue;
   
       /* Handle ket. Look for subsequent max/min; for certain sets of values we
  @@ -2401,7 +3234,9 @@
           if ((compile_block.ctypes[c] & ctype_space) != 0) continue;
           if (c == '#')
             {
  -          while ((c = *(++ptr)) != 0 && c != '\n');
  +          /* The space before the ; is to avoid a warning on a silly compiler
  +          on the Macintosh. */
  +          while ((c = *(++ptr)) != 0 && c != '\n') ;
             continue;
             }
           }
  @@ -2416,6 +3251,16 @@
             &compile_block);
           if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
           if (c < 0) { ptr = saveptr; break; }
  +
  +#ifdef STR_PCRE_SUPPORT_UTF8
  +        if (c > 127 && (options & PCRE_UTF8) != 0)
  +          {
  +          int i;
  +          for (i = 0; i < sizeof(utf8_table1)/sizeof(int); i++)
  +            if (c <= utf8_table1[i]) break;
  +          runlength += i;
  +          }
  +#endif
           }
   
         /* Ordinary character or single-char escape */
  @@ -2425,7 +3270,7 @@
   
       /* This "while" is the end of the "do" above. */
   
  -    while (runlength < 255 &&
  +    while (runlength < MAXLIT &&
         (compile_block.ctypes[c = *(++ptr)] & ctype_meta) == 0);
   
       ptr--;
  @@ -2457,9 +3302,10 @@
     return NULL;
     }
   
  -/* Put in the magic number and the options. */
  +/* Put in the magic number, and save the size, options, and table pointer */
   
   re->magic_number = MAGIC_NUMBER;
  +re->size = size;
   re->options = options;
   re->tables = tables;
   
  @@ -2471,7 +3317,7 @@
   code = re->code;
   *code = OP_BRA;
   bracount = 0;
  -(void)compile_regex(options, -1, &bracount, &code, &ptr, errorptr, FALSE, -1,
  +(void)compile_regex(options, -1, &bracount, &code, &ptr, errorptr, FALSE, 0,
     &reqchar, &countlits, &compile_block);
   re->top_bracket = bracount;
   re->top_backref = top_backref;
  @@ -2484,6 +3330,7 @@
   if debugging, leave the test till after things are printed out. */
   
   *code++ = OP_END;
  +if (code - re->code > length) *errorptr = ERR23;
   
   /* Give an error if there's back reference to a non-existent capturing
   subpattern. */
  @@ -2537,6 +3384,8 @@
     re->options |= PCRE_REQCHSET;
     }
   
  +/* Print out the compiled data for debugging */
  +
   return (pcre *)re;
   }
   
  @@ -2595,18 +3444,36 @@
      offset_top  current top pointer
      md          pointer to "static" info for the match
      ims         current /i, /m, and /s options
  -   condassert  TRUE if called to check a condition assertion
  -   eptrb       eptr at start of last bracket
  +   eptrb       pointer to chain of blocks containing eptr at start of
  +                 brackets - for testing for empty matches
  +   flags       can contain
  +                 match_condassert - this is an assertion condition
  +                 match_isgroup - this is the start of a bracketed group
   
   Returns:       TRUE if matched
   */
   
   static BOOL
   match(register const uschar *eptr, register const uschar *ecode,
  -  int offset_top, match_data *md, unsigned long int ims, BOOL condassert,
  -  const uschar *eptrb)
  +  int offset_top, match_data *md, unsigned long int ims, eptrblock *eptrb,
  +  int flags)
   {
   unsigned long int original_ims = ims;   /* Save for resetting on ')' */
  +eptrblock newptrb;
  +
  +/* At the start of a bracketed group, add the current subject pointer to the
  +stack of such pointers, to be re-instated at the end of the group when we hit
  +the closing ket. When match() is called in other circumstances, we don't add to
  +the stack. */
  +
  +if ((flags & match_isgroup) != 0)
  +  {
  +  newptrb.prev = eptrb;
  +  newptrb.saved_eptr = eptr;
  +  eptrb = &newptrb;
  +  }
  +
  +/* Now start processing the operations. */
   
   for (;;)
     {
  @@ -2632,8 +3499,14 @@
   
     if (op > OP_BRA)
       {
  +    int offset;
       int number = op - OP_BRA;
  -    int offset = number << 1;
  +
  +    /* For extended extraction brackets (large number), we have to fish out the
  +    number from a dummy opcode at the start. */
  +
  +    if (number > EXTRACT_BASIC_MAX) number = (ecode[4] << 8) | ecode[5];
  +    offset = number << 1;
   
       if (offset < md->offset_max)
         {
  @@ -2645,7 +3518,8 @@
   
         do
           {
  -        if (match(eptr, ecode+3, offset_top, md, ims, FALSE, eptr)) return TRUE;
  +        if (match(eptr, ecode+3, offset_top, md, ims, eptrb, match_isgroup))
  +          return TRUE;
           ecode += (ecode[1] << 8) + ecode[2];
           }
         while (*ecode == OP_ALT);
  @@ -2653,6 +3527,7 @@
         md->offset_vector[offset] = save_offset1;
         md->offset_vector[offset+1] = save_offset2;
         md->offset_vector[md->offset_end - number] = save_offset3;
  +
         return FALSE;
         }
   
  @@ -2666,12 +3541,15 @@
     switch(op)
       {
       case OP_BRA:     /* Non-capturing bracket: optimized */
  +
       do
         {
  -      if (match(eptr, ecode+3, offset_top, md, ims, FALSE, eptr)) return TRUE;
  +      if (match(eptr, ecode+3, offset_top, md, ims, eptrb, match_isgroup))
  +        return TRUE;
         ecode += (ecode[1] << 8) + ecode[2];
         }
       while (*ecode == OP_ALT);
  +
       return FALSE;
   
       /* Conditional group: compilation checked that there are no more than
  @@ -2682,11 +3560,11 @@
       case OP_COND:
       if (ecode[3] == OP_CREF)         /* Condition is extraction test */
         {
  -      int offset = ecode[4] << 1;    /* Doubled reference number */
  +      int offset = (ecode[4] << 9) | (ecode[5] << 1); /* Doubled ref number */
         return match(eptr,
           ecode + ((offset < offset_top && md->offset_vector[offset] >= 0)?
  -          5 : 3 + (ecode[1] << 8) + ecode[2]),
  -        offset_top, md, ims, FALSE, eptr);
  +          6 : 3 + (ecode[1] << 8) + ecode[2]),
  +        offset_top, md, ims, eptrb, match_isgroup);
         }
   
       /* The condition is an assertion. Call match() to evaluate it - setting
  @@ -2694,25 +3572,25 @@
   
       else
         {
  -      if (match(eptr, ecode+3, offset_top, md, ims, TRUE, NULL))
  +      if (match(eptr, ecode+3, offset_top, md, ims, NULL,
  +          match_condassert | match_isgroup))
           {
           ecode += 3 + (ecode[4] << 8) + ecode[5];
           while (*ecode == OP_ALT) ecode += (ecode[1] << 8) + ecode[2];
           }
         else ecode += (ecode[1] << 8) + ecode[2];
  -      return match(eptr, ecode+3, offset_top, md, ims, FALSE, eptr);
  +      return match(eptr, ecode+3, offset_top, md, ims, eptrb, match_isgroup);
         }
       /* Control never reaches here */
   
  -    /* Skip over conditional reference data if encountered (should not be) */
  +    /* Skip over conditional reference or large extraction number data if
  +    encountered. */
   
       case OP_CREF:
  -    ecode += 2;
  +    case OP_BRANUMBER:
  +    ecode += 3;
       break;
   
  -    /* End of the pattern. If PCRE_NOTEMPTY is set, fail if we have matched
  -    an empty string - recursion will then try other alternatives, if any. */
  -
       case OP_END:
       if (md->notempty && eptr == md->start_match) return FALSE;
       md->end_match_ptr = eptr;          /* Record where we ended */
  @@ -2724,6 +3602,7 @@
       case OP_OPT:
       ims = ecode[1];
       ecode += 2;
  +
       break;
   
       /* Assertion brackets. Check the alternative branches in turn - the
  @@ -2736,7 +3615,7 @@
       case OP_ASSERTBACK:
       do
         {
  -      if (match(eptr, ecode+3, offset_top, md, ims, FALSE, NULL)) break;
  +      if (match(eptr, ecode+3, offset_top, md, ims, NULL, match_isgroup)) break;
         ecode += (ecode[1] << 8) + ecode[2];
         }
       while (*ecode == OP_ALT);
  @@ -2744,7 +3623,7 @@
   
       /* If checking an assertion for a condition, return TRUE. */
   
  -    if (condassert) return TRUE;
  +    if ((flags & match_condassert) != 0) return TRUE;
   
       /* Continue from after the assertion, updating the offsets high water
       mark, since extracts may have been taken during the assertion. */
  @@ -2760,26 +3639,87 @@
       case OP_ASSERTBACK_NOT:
       do
         {
  -      if (match(eptr, ecode+3, offset_top, md, ims, FALSE, NULL)) return FALSE;
  +      if (match(eptr, ecode+3, offset_top, md, ims, NULL, match_isgroup))
  +        return FALSE;
         ecode += (ecode[1] << 8) + ecode[2];
         }
       while (*ecode == OP_ALT);
  +
  +    if ((flags & match_condassert) != 0) return TRUE;
   
  -    if (condassert) return TRUE;
       ecode += 3;
       continue;
   
       /* Move the subject pointer back. This occurs only at the start of
       each branch of a lookbehind assertion. If we are too close to the start to
  -    move back, this match function fails. */
  +    move back, this match function fails. When working with UTF-8 we move
  +    back a number of characters, not bytes. */
   
       case OP_REVERSE:
  +#ifdef STR_PCRE_SUPPORT_UTF8
  +    c = (ecode[1] << 8) + ecode[2];
  +    for (i = 0; i < c; i++)
  +      {
  +      eptr--;
  +      BACKCHAR(eptr)
  +      }
  +#else
       eptr -= (ecode[1] << 8) + ecode[2];
  +#endif
  +
       if (eptr < md->start_subject) return FALSE;
       ecode += 3;
       break;
   
  +    /* Recursion matches the current regex, nested. If there are any capturing
  +    brackets started but not finished, we have to save their starting points
  +    and reinstate them after the recursion. However, we don't know how many
  +    such there are (offset_top records the completed total) so we just have
  +    to save all the potential data. There may be up to 99 such values, which
  +    is a bit large to put on the stack, but using malloc for small numbers
  +    seems expensive. As a compromise, the stack is used when there are fewer
  +    than 16 values to store; otherwise malloc is used. A problem is what to do
  +    if the malloc fails ... there is no way of returning to the top level with
  +    an error. Save the top 15 values on the stack, and accept that the rest
  +    may be wrong. */
  +
  +    case OP_RECURSE:
  +      {
  +      BOOL rc;
  +      int *save;
  +      int stacksave[15];
  +
  +      c = md->offset_max;
  +
  +      if (c < 16) save = stacksave; else
  +        {
  +        save = (int *)(pcre_malloc)((c+1) * sizeof(int));
  +        if (save == NULL)
  +          {
  +          save = stacksave;
  +          c = 15;
  +          }
  +        }
  +
  +      for (i = 1; i <= c; i++)
  +        save[i] = md->offset_vector[md->offset_end - i];
  +      rc = match(eptr, md->start_pattern, offset_top, md, ims, eptrb,
  +        match_isgroup);
  +      for (i = 1; i <= c; i++)
  +        md->offset_vector[md->offset_end - i] = save[i];
  +      if (save != stacksave) (pcre_free)(save);
  +      if (!rc) return FALSE;
  +
  +      /* In case the recursion has set more capturing values, save the final
  +      number, then move along the subject till after the recursive match,
  +      and advance one byte in the pattern code. */
   
  +      offset_top = md->end_offset_top;
  +      eptr = md->end_match_ptr;
  +      ecode++;
  +      }
  +    break;
  +
       /* "Once" brackets are like assertion brackets except that after a match,
       the point in the subject string is not moved back. Thus there can never be
       a move back into the brackets. Check the alternative branches in turn - the
  @@ -2790,10 +3730,12 @@
       case OP_ONCE:
         {
         const uschar *prev = ecode;
  +      const uschar *saved_eptr = eptr;
   
         do
           {
  -        if (match(eptr, ecode+3, offset_top, md, ims, FALSE, eptr)) break;
  +        if (match(eptr, ecode+3, offset_top, md, ims, eptrb, match_isgroup))
  +          break;
           ecode += (ecode[1] << 8) + ecode[2];
           }
         while (*ecode == OP_ALT);
  @@ -2816,7 +3758,7 @@
         5.005. If there is an options reset, it will get obeyed in the normal
         course of events. */
   
  -      if (*ecode == OP_KET || eptr == eptrb)
  +      if (*ecode == OP_KET || eptr == saved_eptr)
           {
           ecode += 3;
           break;
  @@ -2830,17 +3772,19 @@
         if (ecode[3] == OP_OPT)
           {
           ims = (ims & ~PCRE_IMS) | ecode[4];
  +
           }
   
         if (*ecode == OP_KETRMIN)
           {
  -        if (match(eptr, ecode+3, offset_top, md, ims, FALSE, eptr) ||
  -            match(eptr, prev, offset_top, md, ims, FALSE, eptr)) return TRUE;
  +        if (match(eptr, ecode+3, offset_top, md, ims, eptrb, 0) ||
  +            match(eptr, prev, offset_top, md, ims, eptrb, match_isgroup))
  +              return TRUE;
           }
         else  /* OP_KETRMAX */
           {
  -        if (match(eptr, prev, offset_top, md, ims, FALSE, eptr) ||
  -            match(eptr, ecode+3, offset_top, md, ims, FALSE, eptr)) return TRUE;
  +        if (match(eptr, prev, offset_top, md, ims, eptrb, match_isgroup) ||
  +            match(eptr, ecode+3, offset_top, md, ims, eptrb, 0)) return TRUE;
           }
         }
       return FALSE;
  @@ -2861,7 +3805,8 @@
       case OP_BRAZERO:
         {
         const uschar *next = ecode+1;
  -      if (match(eptr, next, offset_top, md, ims, FALSE, eptr)) return TRUE;
  +      if (match(eptr, next, offset_top, md, ims, eptrb, match_isgroup))
  +        return TRUE;
         do next += (next[1] << 8) + next[2]; while (*next == OP_ALT);
         ecode = next + 3;
         }
  @@ -2871,22 +3816,21 @@
         {
         const uschar *next = ecode+1;
         do next += (next[1] << 8) + next[2]; while (*next == OP_ALT);
  -      if (match(eptr, next+3, offset_top, md, ims, FALSE, eptr)) return TRUE;
  +      if (match(eptr, next+3, offset_top, md, ims, eptrb, match_isgroup))
  +        return TRUE;
         ecode++;
         }
       break;
   
  -    /* End of a group, repeated or non-repeating. If we are at the end of
  -    an assertion "group", stop matching and return TRUE, but record the
  -    current high water mark for use by positive assertions. Do this also
  -    for the "once" (not-backup up) groups. */
  -
       case OP_KET:
       case OP_KETRMIN:
       case OP_KETRMAX:
         {
         const uschar *prev = ecode - (ecode[1] << 8) - ecode[2];
  +      const uschar *saved_eptr = eptrb->saved_eptr;
   
  +      eptrb = eptrb->prev;    /* Back up the stack of bracket start pointers */
  +
         if (*prev == OP_ASSERT || *prev == OP_ASSERT_NOT ||
             *prev == OP_ASSERTBACK || *prev == OP_ASSERTBACK_NOT ||
             *prev == OP_ONCE)
  @@ -2902,9 +3846,15 @@
   
         if (*prev != OP_COND)
           {
  +        int offset;
           int number = *prev - OP_BRA;
  -        int offset = number << 1;
   
  +        /* For extended extraction brackets (large number), we have to fish out
  +        the number from a dummy opcode at the start. */
  +
  +        if (number > EXTRACT_BASIC_MAX) number = (prev[4] << 8) | prev[5];
  +        offset = number << 1;
  +
           if (number > 0)
             {
             if (offset >= md->offset_max) md->offset_overflow = TRUE; else
  @@ -2928,7 +3878,7 @@
         5.005. If there is an options reset, it will get obeyed in the normal
         course of events. */
   
  -      if (*ecode == OP_KET || eptr == eptrb)
  +      if (*ecode == OP_KET || eptr == saved_eptr)
           {
           ecode += 3;
           break;
  @@ -2939,13 +3889,14 @@
   
         if (*ecode == OP_KETRMIN)
           {
  -        if (match(eptr, ecode+3, offset_top, md, ims, FALSE, eptr) ||
  -            match(eptr, prev, offset_top, md, ims, FALSE, eptr)) return TRUE;
  +        if (match(eptr, ecode+3, offset_top, md, ims, eptrb, 0) ||
  +            match(eptr, prev, offset_top, md, ims, eptrb, match_isgroup))
  +              return TRUE;
           }
         else  /* OP_KETRMAX */
           {
  -        if (match(eptr, prev, offset_top, md, ims, FALSE, eptr) ||
  -            match(eptr, ecode+3, offset_top, md, ims, FALSE, eptr)) return TRUE;
  +        if (match(eptr, prev, offset_top, md, ims, eptrb, match_isgroup) ||
  +            match(eptr, ecode+3, offset_top, md, ims, eptrb, 0)) return TRUE;
           }
         }
       return FALSE;
  @@ -2994,15 +3945,11 @@
         }
       /* ... else fall through */
   
  -    /* End of subject assertion (\z) */
  -
       case OP_EOD:
       if (eptr < md->end_subject) return FALSE;
       ecode++;
       break;
   
  -    /* End of subject or ending \n assertion (\Z) */
  -
       case OP_EODN:
       if (eptr < md->end_subject - 1 ||
          (eptr == md->end_subject - 1 && *eptr != '\n')) return FALSE;
  @@ -3030,6 +3977,10 @@
       if ((ims & PCRE_DOTALL) == 0 && eptr < md->end_subject && *eptr == '\n')
         return FALSE;
       if (eptr++ >= md->end_subject) return FALSE;
  +#ifdef STR_PCRE_SUPPORT_UTF8
  +    if (md->utf8)
  +      while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
  +#endif
       ecode++;
       break;
   
  @@ -3086,8 +4037,8 @@
       case OP_REF:
         {
         int length;
  -      int offset = ecode[1] << 1;                /* Doubled reference number */
  -      ecode += 2;                                /* Advance past the item */
  +      int offset = (ecode[1] << 9) | (ecode[2] << 1); /* Doubled ref number */
  +      ecode += 3;                                     /* Advance past item */
   
         /* If the reference is unset, set the length to be longer than the amount
         of subject left; this ensures that every attempt at a match fails. We
  @@ -3156,7 +4107,7 @@
           {
           for (i = min;; i++)
             {
  -          if (match(eptr, ecode, offset_top, md, ims, FALSE, eptrb))
  +          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
               return TRUE;
             if (i >= max || !match_ref(offset, eptr, length, md, ims))
               return FALSE;
  @@ -3177,7 +4128,7 @@
             }
           while (eptr >= pp)
             {
  -          if (match(eptr, ecode, offset_top, md, ims, FALSE, eptrb))
  +          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
               return TRUE;
             eptr -= length;
             }
  @@ -3229,7 +4180,13 @@
         for (i = 1; i <= min; i++)
           {
           if (eptr >= md->end_subject) return FALSE;
  -        c = *eptr++;
  +        GETCHARINC(c, eptr)         /* Get character; increment eptr */
  +
  +#ifdef STR_PCRE_SUPPORT_UTF8
  +        /* We do not yet support class members > 255 */
  +        if (c > 255) return FALSE;
  +#endif
  +
           if ((data[c/8] & (1 << (c&7))) != 0) continue;
           return FALSE;
           }
  @@ -3246,10 +4203,15 @@
           {
           for (i = min;; i++)
             {
  -          if (match(eptr, ecode, offset_top, md, ims, FALSE, eptrb))
  +          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
               return TRUE;
             if (i >= max || eptr >= md->end_subject) return FALSE;
  -          c = *eptr++;
  +          GETCHARINC(c, eptr)       /* Get character; increment eptr */
  +
  +#ifdef STR_PCRE_SUPPORT_UTF8
  +          /* We do not yet support class members > 255 */
  +          if (c > 255) return FALSE;
  +#endif
             if ((data[c/8] & (1 << (c&7))) != 0) continue;
             return FALSE;
             }
  @@ -3261,17 +4223,29 @@
         else
           {
           const uschar *pp = eptr;
  -        for (i = min; i < max; eptr++, i++)
  +        int len = 1;
  +        for (i = min; i < max; i++)
             {
             if (eptr >= md->end_subject) break;
  -          c = *eptr;
  -          if ((data[c/8] & (1 << (c&7))) != 0) continue;
  -          break;
  +          GETCHARLEN(c, eptr, len)  /* Get character, set length if UTF-8 */
  +
  +#ifdef STR_PCRE_SUPPORT_UTF8
  +          /* We do not yet support class members > 255 */
  +          if (c > 255) break;
  +#endif
  +          if ((data[c/8] & (1 << (c&7))) == 0) break;
  +          eptr += len;
             }
   
           while (eptr >= pp)
  -          if (match(eptr--, ecode, offset_top, md, ims, FALSE, eptrb))
  +          {
  +          if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
               return TRUE;
  +
  +#ifdef STR_PCRE_SUPPORT_UTF8
  +          BACKCHAR(eptr)
  +#endif
  +          }
           return FALSE;
           }
         }
  @@ -3345,13 +4319,141 @@
         {
         c = md->lcc[c];
         for (i = 1; i <= min; i++)
  +        if (c != md->lcc[*eptr++]) return FALSE;
  +      if (min == max) continue;
  +      if (minimize)
  +        {
  +        for (i = min;; i++)
  +          {
  +          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
  +            return TRUE;
  +          if (i >= max || eptr >= md->end_subject ||
  +              c != md->lcc[*eptr++])
  +            return FALSE;
  +          }
  +        /* Control never gets here */
  +        }
  +      else
  +        {
  +        const uschar *pp = eptr;
  +        for (i = min; i < max; i++)
  +          {
  +          if (eptr >= md->end_subject || c != md->lcc[*eptr]) break;
  +          eptr++;
  +          }
  +        while (eptr >= pp)
  +          if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
  +            return TRUE;
  +        return FALSE;
  +        }
  +      /* Control never gets here */
  +      }
  +
  +    /* Caseful comparisons */
  +
  +    else
  +      {
  +      for (i = 1; i <= min; i++) if (c != *eptr++) return FALSE;
  +      if (min == max) continue;
  +      if (minimize)
  +        {
  +        for (i = min;; i++)
  +          {
  +          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
  +            return TRUE;
  +          if (i >= max || eptr >= md->end_subject || c != *eptr++) return FALSE;
  +          }
  +        /* Control never gets here */
  +        }
  +      else
  +        {
  +        const uschar *pp = eptr;
  +        for (i = min; i < max; i++)
  +          {
  +          if (eptr >= md->end_subject || c != *eptr) break;
  +          eptr++;
  +          }
  +        while (eptr >= pp)
  +         if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
  +           return TRUE;
  +        return FALSE;
  +        }
  +      }
  +    /* Control never gets here */
  +
  +    /* Match a negated single character */
  +
  +    case OP_NOT:
  +    if (eptr >= md->end_subject) return FALSE;
  +    ecode++;
  +    if ((ims & PCRE_CASELESS) != 0)
  +      {
  +      if (md->lcc[*ecode++] == md->lcc[*eptr++]) return FALSE;
  +      }
  +    else
  +      {
  +      if (*ecode++ == *eptr++) return FALSE;
  +      }
  +    break;
  +
  +    /* Match a negated single character repeatedly. This is almost a repeat of
  +    the code for a repeated single character, but I haven't found a nice way of
  +    commoning these up that doesn't require a test of the positive/negative
  +    option for each character match. Maybe that wouldn't add very much to the
  +    time taken, but character matching *is* what this is all about... */
  +
  +    case OP_NOTEXACT:
  +    min = max = (ecode[1] << 8) + ecode[2];
  +    ecode += 3;
  +    goto REPEATNOTCHAR;
  +
  +    case OP_NOTUPTO:
  +    case OP_NOTMINUPTO:
  +    min = 0;
  +    max = (ecode[1] << 8) + ecode[2];
  +    minimize = *ecode == OP_NOTMINUPTO;
  +    ecode += 3;
  +    goto REPEATNOTCHAR;
  +
  +    case OP_NOTSTAR:
  +    case OP_NOTMINSTAR:
  +    case OP_NOTPLUS:
  +    case OP_NOTMINPLUS:
  +    case OP_NOTQUERY:
  +    case OP_NOTMINQUERY:
  +    c = *ecode++ - OP_NOTSTAR;
  +    minimize = (c & 1) != 0;
  +    min = rep_min[c];                 /* Pick up values from tables; */
  +    max = rep_max[c];                 /* zero for max => infinity */
  +    if (max == 0) max = INT_MAX;
  +
  +    /* Common code for all repeated single-character matches. We can give
  +    up quickly if there are fewer than the minimum number of characters left in
  +    the subject. */
  +
  +    REPEATNOTCHAR:
  +    if (min > md->end_subject - eptr) return FALSE;
  +    c = *ecode++;
  +
  +    /* The code is duplicated for the caseless and caseful cases, for speed,
  +    since matching characters is likely to be quite common. First, ensure the
  +    minimum number of matches are present. If min = max, continue at the same
  +    level without recursing. Otherwise, if minimizing, keep trying the rest of
  +    the expression and advancing one matching character if failing, up to the
  +    maximum. Alternatively, if maximizing, find the maximum number of
  +    characters and work backwards. */
  +
  +    if ((ims & PCRE_CASELESS) != 0)
  +      {
  +      c = md->lcc[c];
  +      for (i = 1; i <= min; i++)
           if (c == md->lcc[*eptr++]) return FALSE;
         if (min == max) continue;
         if (minimize)
           {
           for (i = min;; i++)
             {
  -          if (match(eptr, ecode, offset_top, md, ims, FALSE, eptrb))
  +          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
               return TRUE;
             if (i >= max || eptr >= md->end_subject ||
                 c == md->lcc[*eptr++])
  @@ -3368,7 +4470,7 @@
             eptr++;
             }
           while (eptr >= pp)
  -          if (match(eptr--, ecode, offset_top, md, ims, FALSE, eptrb))
  +          if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
               return TRUE;
           return FALSE;
           }
  @@ -3385,7 +4487,7 @@
           {
           for (i = min;; i++)
             {
  -          if (match(eptr, ecode, offset_top, md, ims, FALSE, eptrb))
  +          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
               return TRUE;
             if (i >= max || eptr >= md->end_subject || c == *eptr++) return FALSE;
             }
  @@ -3400,7 +4502,7 @@
             eptr++;
             }
           while (eptr >= pp)
  -         if (match(eptr--, ecode, offset_top, md, ims, FALSE, eptrb))
  +         if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
              return TRUE;
           return FALSE;
           }
  @@ -3444,13 +4546,29 @@
   
       /* First, ensure the minimum number of matches are present. Use inline
       code for maximizing the speed, and do the type test once at the start
  -    (i.e. keep it out of the loop). Also test that there are at least the
  -    minimum number of characters before we start. */
  +    (i.e. keep it out of the loop). Also we can test that there are at least
  +    the minimum number of bytes before we start, except when doing '.' in
  +    UTF8 mode. Leave the test in in all cases; in the special case we have
  +    to test after each character. */
   
       if (min > md->end_subject - eptr) return FALSE;
       if (min > 0) switch(ctype)
         {
         case OP_ANY:
  +#ifdef STR_PCRE_SUPPORT_UTF8
  +      if (md->utf8)
  +        {
  +        for (i = 1; i <= min; i++)
  +          {
  +          if (eptr >= md->end_subject ||
  +             (*eptr++ == '\n' && (ims & PCRE_DOTALL) == 0))
  +            return FALSE;
  +          while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
  +          }
  +        break;
  +        }
  +#endif
  +      /* Non-UTF8 can be faster */
         if ((ims & PCRE_DOTALL) == 0)
           { for (i = 1; i <= min; i++) if (*eptr++ == '\n') return FALSE; }
         else eptr += min;
  @@ -3500,7 +4618,7 @@
         {
         for (i = min;; i++)
           {
  -        if (match(eptr, ecode, offset_top, md, ims, FALSE, eptrb)) return TRUE;
  +        if (match(eptr, ecode, offset_top, md, ims, eptrb, 0)) return TRUE;
           if (i >= max || eptr >= md->end_subject) return FALSE;
   
           c = *eptr++;
  @@ -3508,6 +4626,10 @@
             {
             case OP_ANY:
             if ((ims & PCRE_DOTALL) == 0 && c == '\n') return FALSE;
  +#ifdef STR_PCRE_SUPPORT_UTF8
  +          if (md->utf8)
  +            while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
  +#endif
             break;
   
             case OP_NOT_DIGIT:
  @@ -3547,6 +4669,33 @@
         switch(ctype)
           {
           case OP_ANY:
  +
  +        /* Special code is required for UTF8, but when the maximum is unlimited
  +        we don't need it. */
  +
  +#ifdef STR_PCRE_SUPPORT_UTF8
  +        if (md->utf8 && max < INT_MAX)
  +          {
  +          if ((ims & PCRE_DOTALL) == 0)
  +            {
  +            for (i = min; i < max; i++)
  +              {
  +              if (eptr >= md->end_subject || *eptr++ == '\n') break;
  +              while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
  +              }
  +            }
  +          else
  +            {
  +            for (i = min; i < max; i++)
  +              {
  +              eptr++;
  +              while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
  +              }
  +            }
  +          break;
  +          }
  +#endif
  +        /* Non-UTF8 can be faster */
           if ((ims & PCRE_DOTALL) == 0)
             {
             for (i = min; i < max; i++)
  @@ -3619,8 +4768,14 @@
           }
   
         while (eptr >= pp)
  -        if (match(eptr--, ecode, offset_top, md, ims, FALSE, eptrb))
  +        {
  +        if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
             return TRUE;
  +#ifdef STR_PCRE_SUPPORT_UTF8
  +        if (md->utf8)
  +          while (eptr > pp && (*eptr & 0xc0) == 0x80) eptr--;
  +#endif
  +        }
         return FALSE;
         }
       /* Control never gets here */
  @@ -3628,6 +4783,7 @@
       /* There's been some horrible disaster. */
   
       default:
  +
       md->errorcode = PCRE_ERROR_UNKNOWN_NODE;
       return FALSE;
       }
  @@ -3636,7 +4792,7 @@
     that "continue" in the code above comes out to here to repeat the main
     loop. */
   
  -  }             /* End of main loop */
  +  }
   /* Control never reaches here */
   }
   
  @@ -3682,8 +4838,8 @@
   const real_pcre *re = (const real_pcre *)external_re;
   const real_pcre_extra *extra = (const real_pcre_extra *)external_extra;
   BOOL using_temporary_offsets = FALSE;
  -BOOL anchored = ((re->options | options) & PCRE_ANCHORED) != 0;
  -BOOL startline = (re->options & PCRE_STARTLINE) != 0;
  +BOOL anchored;
  +BOOL startline;
   
   if ((options & ~PUBLIC_EXEC_OPTIONS) != 0) return PCRE_ERROR_BADOPTION;
   
  @@ -3691,11 +4847,16 @@
      (offsets == NULL && offsetcount > 0)) return PCRE_ERROR_NULL;
   if (re->magic_number != MAGIC_NUMBER) return PCRE_ERROR_BADMAGIC;
   
  +anchored = ((re->options | options) & PCRE_ANCHORED) != 0;
  +startline = (re->options & PCRE_STARTLINE) != 0;
  +
  +match_block.start_pattern = re->code;
   match_block.start_subject = (const uschar *)subject;
   match_block.end_subject = match_block.start_subject + length;
   end_subject = match_block.end_subject;
   
   match_block.endonly = (re->options & PCRE_DOLLAR_ENDONLY) != 0;
  +match_block.utf8 = (re->options & PCRE_UTF8) != 0;
   
   match_block.notbol = (options & PCRE_NOTBOL) != 0;
   match_block.noteol = (options & PCRE_NOTEOL) != 0;
  @@ -3725,6 +4886,7 @@
     match_block.offset_vector = (int *)(pcre_malloc)(ocount * sizeof(int));
     if (match_block.offset_vector == NULL) return PCRE_ERROR_NOMEMORY;
     using_temporary_offsets = TRUE;
  +
     }
   else match_block.offset_vector = offsets;
   
  @@ -3893,7 +5055,7 @@
     if certain parts of the pattern were not used. */
   
     match_block.start_match = start_match;
  -  if (!match(start_match, re->code, 2, &match_block, ims, FALSE, start_match))
  +  if (!match(start_match, re->code, 2, &match_block, ims, NULL, match_isgroup))
       continue;
   
     /* Copy the offset information from temporary store if necessary */
  @@ -3904,6 +5066,7 @@
         {
         memcpy(offsets + 2, match_block.offset_vector + 2,
           (offsetcount - 2) * sizeof(int));
  +
         }
       if (match_block.end_offset_top > offsetcount)
         match_block.offset_overflow = TRUE;
  @@ -3930,16 +5093,20 @@
   
   if (using_temporary_offsets)
     {
  +
     (pcre_free)(match_block.offset_vector);
     }
   
   return match_block.errorcode;
   }
   
  -/* End of pcre.c */
  +/* ____ END pcre.c ____ */
   
  -/* ==== from pcre_study.c ==== */
  +/* ____ BEGIN study.c ____ */
   
  +/* Include the internals header, which itself includes Standard C headers plus
  +the external pcre header. */
  +
   /*************************************************
   *      Set a bit and maybe its alternate case    *
   *************************************************/
  @@ -4002,8 +5169,6 @@
   
     while (try_next)
       {
  -    try_next = FALSE;
  -
       /* If a branch starts with a bracket or a positive lookahead assertion,
       recurse to set bits from within them. That's all for this branch. */
   
  @@ -4011,6 +5176,7 @@
         {
         if (!set_start_bits(tcode, start_bits, caseless, cd))
           return FALSE;
  +      try_next = FALSE;
         }
   
       else switch(*tcode)
  @@ -4018,12 +5184,17 @@
         default:
         return FALSE;
   
  +      /* Skip over extended extraction bracket number */
  +
  +      case OP_BRANUMBER:
  +      tcode += 3;
  +      break;
  +
         /* Skip over lookbehind and negative lookahead assertions */
   
         case OP_ASSERT_NOT:
         case OP_ASSERTBACK:
         case OP_ASSERTBACK_NOT:
  -      try_next = TRUE;
         do tcode += (tcode[1] << 8) + tcode[2]; while (*tcode == OP_ALT);
         tcode += 3;
         break;
  @@ -4033,7 +5204,6 @@
         case OP_OPT:
         caseless = (tcode[1] & PCRE_CASELESS) != 0;
         tcode += 2;
  -      try_next = TRUE;
         break;
   
         /* BRAZERO does the bracket, but carries on. */
  @@ -4045,7 +5215,6 @@
         dummy = 1;
         do tcode += (tcode[1] << 8) + tcode[2]; while (*tcode == OP_ALT);
         tcode += 3;
  -      try_next = TRUE;
         break;
   
         /* Single-char * or ? sets the bit and tries the next item */
  @@ -4056,7 +5225,6 @@
         case OP_MINQUERY:
         set_bit(start_bits, tcode[1], caseless, cd);
         tcode += 2;
  -      try_next = TRUE;
         break;
   
         /* Single-char upto sets the bit and tries the next */
  @@ -4065,7 +5233,6 @@
         case OP_MINUPTO:
         set_bit(start_bits, tcode[3], caseless, cd);
         tcode += 4;
  -      try_next = TRUE;
         break;
   
         /* At least one single char sets the bit and stops */
  @@ -4079,6 +5246,7 @@
         case OP_PLUS:
         case OP_MINPLUS:
         set_bit(start_bits, tcode[1], caseless, cd);
  +      try_next = FALSE;
         break;
   
         /* Single character type sets the bits and stops */
  @@ -4086,31 +5254,37 @@
         case OP_NOT_DIGIT:
         for (c = 0; c < 32; c++)
           start_bits[c] |= ~cd->cbits[c+cbit_digit];
  +      try_next = FALSE;
         break;
   
         case OP_DIGIT:
         for (c = 0; c < 32; c++)
           start_bits[c] |= cd->cbits[c+cbit_digit];
  +      try_next = FALSE;
         break;
   
         case OP_NOT_WHITESPACE:
         for (c = 0; c < 32; c++)
           start_bits[c] |= ~cd->cbits[c+cbit_space];
  +      try_next = FALSE;
         break;
   
         case OP_WHITESPACE:
         for (c = 0; c < 32; c++)
           start_bits[c] |= cd->cbits[c+cbit_space];
  +      try_next = FALSE;
         break;
   
         case OP_NOT_WORDCHAR:
         for (c = 0; c < 32; c++)
  -        start_bits[c] |= ~(cd->cbits[c] | cd->cbits[c+cbit_word]);
  +        start_bits[c] |= ~cd->cbits[c+cbit_word];
  +      try_next = FALSE;
         break;
   
         case OP_WORDCHAR:
         for (c = 0; c < 32; c++)
  -        start_bits[c] |= (cd->cbits[c] | cd->cbits[c+cbit_word]);
  +        start_bits[c] |= cd->cbits[c+cbit_word];
  +      try_next = FALSE;
         break;
   
         /* One or more character type fudges the pointer and restarts, knowing
  @@ -4119,12 +5293,10 @@
         case OP_TYPEPLUS:
         case OP_TYPEMINPLUS:
         tcode++;
  -      try_next = TRUE;
         break;
   
         case OP_TYPEEXACT:
         tcode += 3;
  -      try_next = TRUE;
         break;
   
         /* Zero or more repeats of character types set the bits and then
  @@ -4162,17 +5334,16 @@
   
           case OP_NOT_WORDCHAR:
           for (c = 0; c < 32; c++)
  -          start_bits[c] |= ~(cd->cbits[c] | cd->cbits[c+cbit_word]);
  +          start_bits[c] |= ~cd->cbits[c+cbit_word];
           break;
   
           case OP_WORDCHAR:
           for (c = 0; c < 32; c++)
  -          start_bits[c] |= (cd->cbits[c] | cd->cbits[c+cbit_word]);
  +          start_bits[c] |= cd->cbits[c+cbit_word];
           break;
           }
   
         tcode += 2;
  -      try_next = TRUE;
         break;
   
         /* Character class: set the bits and either carry on or not,
  @@ -4190,23 +5361,23 @@
             case OP_CRQUERY:
             case OP_CRMINQUERY:
             tcode++;
  -          try_next = TRUE;
             break;
   
             case OP_CRRANGE:
             case OP_CRMINRANGE:
  -          if (((tcode[1] << 8) + tcode[2]) == 0)
  -            {
  -            tcode += 5;
  -            try_next = TRUE;
  -            }
  +          if (((tcode[1] << 8) + tcode[2]) == 0) tcode += 5;
  +            else try_next = FALSE;
  +          break;
  +
  +          default:
  +          try_next = FALSE;
             break;
             }
           }
  -      break; /* End of class handling */
  +      break;
   
  -      }      /* End of switch */
  -    }        /* End of try_next loop */
  +      }
  +    }
   
     code += (code[1] << 8) + code[2];   /* Advance to next branch */
     }
  @@ -4290,12 +5461,17 @@
   return (pcre_extra *)extra;
   }
   
  -/* ==== from pcre_get.c ==== */
  +/* ____ END study.c ____ */
   
  +/* ____ BEGIN get.c ____ */
  +
   /* This module contains some convenience functions for extracting substrings
   from the subject string after a regex match has succeeded. The original idea
   for these functions came from Scott Wimer <scottw@cgibuilder.com>. */
   
  +/* Include the internals header, which itself includes Standard C headers plus
  +the external pcre header. */
  +
   /*************************************************
   *      Copy captured string to given buffer      *
   *************************************************/
  @@ -4392,6 +5568,23 @@
   }
   
   /*************************************************
  +*   Free store obtained by get_substring_list    *
  +*************************************************/
  +
  +/* This function exists for the benefit of people calling PCRE from non-C
  +programs that can call its functions, but not free() or (pcre_free)() directly.
  +
  +Argument:   the result of a previous pcre_get_substring_list()
  +Returns:    nothing
  +*/
  +
  +void
  +pcre_free_substring_list(const char **pointer)
  +{
  +(pcre_free)((void *)pointer);
  +}
  +
  +/*************************************************
   *      Copy captured string to new store         *
   *************************************************/
   
  @@ -4433,4 +5626,225 @@
   *stringptr = substring;
   return yield;
   }
  +
  +/*************************************************
  +*       Free store obtained by get_substring     *
  +*************************************************/
  +
  +/* This function exists for the benefit of people calling PCRE from non-C
  +programs that can call its functions, but not free() or (pcre_free)() directly.
  +
  +Argument:   the result of a previous pcre_get_substring()
  +Returns:    nothing
  +*/
  +
  +void
  +pcre_free_substring(const char *pointer)
  +{
  +(pcre_free)((void *)pointer);
  +}
  +
  +/* ____ END get.c ____ */
  +
  +#endif /* !STR_PCRE_GENTAB */
  +
  +/* ____ BEGIN maketables.c ____ */
  +
  +/* This file is compiled on its own as part of the PCRE library. However,
  +it is also included in the compilation of dftables.c, in which case the macro
  +DFTABLES is defined. */
  +
  +/*************************************************
  +*           Create PCRE character tables         *
  +*************************************************/
  +
  +/* This function builds a set of character tables for use by PCRE and returns
  +a pointer to them. They are build using the ctype functions, and consequently
  +their contents will depend upon the current locale setting. When compiled as
  +part of the library, the store is obtained via pcre_malloc(), but when compiled
  +inside dftables, use malloc().
  +
  +Arguments:   none
  +Returns:     pointer to the contiguous block of data
  +*/
  +
  +const unsigned char *
  +pcre_maketables(void)
  +{
  +unsigned char *yield, *p;
  +int i;
  +
  +#ifndef STR_PCRE_GENTAB
  +yield = (unsigned char*)(pcre_malloc)(tables_length);
  +#else
  +yield = (unsigned char*)malloc(tables_length);
  +#endif
  +
  +if (yield == NULL) return NULL;
  +p = yield;
  +
  +/* First comes the lower casing table */
  +
  +for (i = 0; i < 256; i++) *p++ = tolower(i);
  +
  +/* Next the case-flipping table */
  +
  +for (i = 0; i < 256; i++) *p++ = islower(i)? toupper(i) : tolower(i);
  +
  +/* Then the character class tables. Don't try to be clever and save effort
  +on exclusive ones - in some locales things may be different. */
  +
  +memset(p, 0, cbit_length);
  +for (i = 0; i < 256; i++)
  +  {
  +  if (isdigit(i))
  +    {
  +    p[cbit_digit  + i/8] |= 1 << (i&7);
  +    p[cbit_word   + i/8] |= 1 << (i&7);
  +    }
  +  if (isupper(i))
  +    {
  +    p[cbit_upper  + i/8] |= 1 << (i&7);
  +    p[cbit_word   + i/8] |= 1 << (i&7);
  +    }
  +  if (islower(i))
  +    {
  +    p[cbit_lower  + i/8] |= 1 << (i&7);
  +    p[cbit_word   + i/8] |= 1 << (i&7);
  +    }
  +  if (i == '_')   p[cbit_word   + i/8] |= 1 << (i&7);
  +  if (isspace(i)) p[cbit_space  + i/8] |= 1 << (i&7);
  +  if (isxdigit(i))p[cbit_xdigit + i/8] |= 1 << (i&7);
  +  if (isgraph(i)) p[cbit_graph  + i/8] |= 1 << (i&7);
  +  if (isprint(i)) p[cbit_print  + i/8] |= 1 << (i&7);
  +  if (ispunct(i)) p[cbit_punct  + i/8] |= 1 << (i&7);
  +  if (iscntrl(i)) p[cbit_cntrl  + i/8] |= 1 << (i&7);
  +  }
  +p += cbit_length;
  +
  +/* Finally, the character type table */
  +
  +for (i = 0; i < 256; i++)
  +  {
  +  int x = 0;
  +  if (isspace(i)) x += ctype_space;
  +  if (isalpha(i)) x += ctype_letter;
  +  if (isdigit(i)) x += ctype_digit;
  +  if (isxdigit(i)) x += ctype_xdigit;
  +  if (isalnum(i) || i == '_') x += ctype_word;
  +  if (strchr("*+?{^.$|()[", i) != 0) x += ctype_meta;
  +  *p++ = x;
  +  }
  +
  +return yield;
  +}
  +
  +/* ____ END maketables.c ____ */
  +
  +#ifdef STR_PCRE_GENTAB
  +
  +/* ____ BEGIN dftables.c ____ */
  +
  +/* This is a support program to generate the file chartables.c, containing
  +character tables of various kinds. They are built according to the default C
  +locale and used as the default tables by PCRE. Now that pcre_maketables is
  +a function visible to the outside world, we make use of its code from here in
  +order to be consistent. */
  +
  +#include <ctype.h>
  +#include <stdio.h>
  +#include <string.h>
  +
  +int main(void)
  +{
  +int i;
  +const unsigned char *tables = pcre_maketables();
  +
  +printf(
  +  "/*************************************************\n"
  +  "*      Perl-Compatible Regular Expressions       *\n"
  +  "*************************************************/\n\n"
  +  "static unsigned char pcre_default_tables[] = {\n\n"
  +  "/* This table is a lower casing table. */\n\n");
  +
  +printf("  ");
  +for (i = 0; i < 256; i++)
  +  {
  +  if ((i & 7) == 0 && i != 0) printf("\n  ");
  +  printf("%3d", *tables++);
  +  if (i != 255) printf(",");
  +  }
  +printf(",\n\n");
  +
  +printf("/* This table is a case flipping table. */\n\n");
  +
  +printf("  ");
  +for (i = 0; i < 256; i++)
  +  {
  +  if ((i & 7) == 0 && i != 0) printf("\n  ");
  +  printf("%3d", *tables++);
  +  if (i != 255) printf(",");
  +  }
  +printf(",\n\n");
  +
  +printf(
  +  "/* This table contains bit maps for various character classes.\n"
  +  "Each map is 32 bytes long and the bits run from the least\n"
  +  "significant end of each byte. The classes that have their own\n"
  +  "maps are: space, xdigit, digit, upper, lower, word, graph\n"
  +  "print, punct, and cntrl. Other classes are built from combinations. */\n\n");
  +
  +printf("  ");
  +for (i = 0; i < cbit_length; i++)
  +  {
  +  if ((i & 7) == 0 && i != 0)
  +    {
  +    if ((i & 31) == 0) printf("\n");
  +    printf("\n  ");
  +    }
  +  printf("0x%02x", *tables++);
  +  if (i != cbit_length - 1) printf(",");
  +  }
  +printf(",\n\n");
  +
  +printf(
  +  "/* This table identifies various classes of character by individual bits:\n"
  +  "  0x%02x   white space character\n"
  +  "  0x%02x   letter\n"
  +  "  0x%02x   decimal digit\n"
  +  "  0x%02x   hexadecimal digit\n"
  +  "  0x%02x   alphanumeric or '_'\n"
  +  "  0x%02x   regular expression metacharacter or binary zero\n*/\n\n",
  +  ctype_space, ctype_letter, ctype_digit, ctype_xdigit, ctype_word,
  +  ctype_meta);
  +
  +printf("  ");
  +for (i = 0; i < 256; i++)
  +  {
  +  if ((i & 7) == 0 && i != 0)
  +    {
  +    printf(" /* ");
  +    if (isprint(i-8)) printf(" %c -", i-8);
  +      else printf("%3d-", i-8);
  +    if (isprint(i-1)) printf(" %c ", i-1);
  +      else printf("%3d", i-1);
  +    printf(" */\n  ");
  +    }
  +  printf("0x%02x", *tables++);
  +  if (i != 255) printf(",");
  +  }
  +
  +printf("};/* ");
  +if (isprint(i-8)) printf(" %c -", i-8);
  +  else printf("%3d-", i-8);
  +if (isprint(i-1)) printf(" %c ", i-1);
  +  else printf("%3d", i-1);
  +printf(" */\n\n\n");
  +
  +return 0;
  +}
  +
  +/* ____ END dftables.c ____ */
  +
  +#endif /* STR_PCRE_GENTAB */
   
  Index: ossp-pkg/str/str_pcre.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 str_pcre.h
  --- ossp-pkg/str/str_pcre.h	1999/12/28 10:19:00	1.1
  +++ ossp-pkg/str/str_pcre.h	2001/08/16 12:04:25	1.2
  @@ -1,38 +1,50 @@
   /*************************************************
  -*       Perl-Compatible Regular Expressions      *
  +*      Perl-Compatible Regular Expressions       *
   *************************************************/
   
  -/* Copyright (c) 1997-1999 University of Cambridge */
  +/*
  +This is a library of functions to support regular expressions whose syntax
  +and semantics are as close as possible to those of the Perl 5 language. See
  +the file Tech.Notes for some information on the internals.
   
  -#ifndef _PCRE_H
  -#define _PCRE_H
  +Written by: Philip Hazel <ph10@cam.ac.uk>
   
  -#define PCRE_MAJOR 2
  -#define PCRE_MINOR 08
  -#define PCRE_DATE  31-Aug-1999
  -
  -#define __PCRE_STRING(a)  #a
  -#define __PCRE_XSTRING(s) _STRING(s)
  -#define PCRE_VERSION __PCRE_XSTRING(PCRE_MAJOR) "." \
  -                     __PCRE_XSTRING(PCRE_MINOR) " " \
  -                     __PCRE_XSTRING(PCRE_DATE);
  -
  -/* Win32 uses DLL by default */
  -
  -#ifdef _WIN32
  -# ifdef STATIC
  -#  define PCRE_DL_IMPORT
  -# else
  -#  define PCRE_DL_IMPORT __declspec(dllimport)
  -# endif
  -#else
  -# define PCRE_DL_IMPORT
  -#endif
  +           Copyright (c) 1997-2001 University of Cambridge
  +
  +-----------------------------------------------------------------------------
  +Permission is granted to anyone to use this software for any purpose on any
  +computer system, and to redistribute it freely, subject to the following
  +restrictions:
  +
  +1. This software is distributed in the hope that it will be useful,
  +   but WITHOUT ANY WARRANTY; without even the implied warranty of
  +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  +
  +2. The origin of this software must not be misrepresented, either by
  +   explicit claim or by omission.
  +
  +3. Altered versions must be plainly marked as such, and must not be
  +   misrepresented as being the original software.
  +
  +4. If PCRE is embedded in any software that is released under the GNU
  +   General Purpose Licence (GPL), then the terms of that licence shall
  +   supersede any condition above with which it is incompatible.
  +-----------------------------------------------------------------------------
  +*/
  +
  +#ifndef __STR_PCRE_H__
  +#define __STR_PCRE_H__
   
  +/* The file pcre.h is build by "configure". Do not edit it; instead
  +make changes to pcre.in. */
  +
  +#define PCRE_MAJOR          3
  +#define PCRE_MINOR          5
  +#define PCRE_DATE           15-Aug-2001
  +
   /* Have to include stdlib.h in order to ensure that size_t is defined;
   it is needed here for malloc. */
   
  -#include <sys/types.h>
   #include <stdlib.h>
   
   /* Allow for C++ users */
  @@ -54,6 +66,7 @@
   #define PCRE_NOTEOL          0x0100
   #define PCRE_UNGREEDY        0x0200
   #define PCRE_NOTEMPTY        0x0400
  +#define PCRE_UTF8            0x0800
   
   /* Exec-time and get-time error codes */
   
  @@ -65,37 +78,50 @@
   #define PCRE_ERROR_NOMEMORY       (-6)
   #define PCRE_ERROR_NOSUBSTRING    (-7)
   
  +/* Request types for pcre_fullinfo() */
  +
  +#define PCRE_INFO_OPTIONS         0
  +#define PCRE_INFO_SIZE            1
  +#define PCRE_INFO_CAPTURECOUNT    2
  +#define PCRE_INFO_BACKREFMAX      3
  +#define PCRE_INFO_FIRSTCHAR       4
  +#define PCRE_INFO_FIRSTTABLE      5
  +#define PCRE_INFO_LASTLITERAL     6
  +
   /* Types */
  +
  +struct real_pcre;        /* declaration; the definition is private  */
  +struct real_pcre_extra;  /* declaration; the definition is private */
   
  -typedef void pcre;
  -typedef void pcre_extra;
  +typedef struct real_pcre pcre;
  +typedef struct real_pcre_extra pcre_extra;
   
   /* Store get and free functions. These can be set to alternative malloc/free
   functions if required. Some magic is required for Win32 DLL; it is null on
   other OS. */
  -
  -PCRE_DL_IMPORT extern void *(*pcre_malloc)(size_t);
  -PCRE_DL_IMPORT extern void  (*pcre_free)(void *);
   
  -#undef PCRE_DL_IMPORT
  +extern void *(*pcre_malloc)(size_t);
  +extern void  (*pcre_free)(void *);
   
   /* Functions */
   
   extern pcre *pcre_compile(const char *, int, const char **, int *,
  -  const unsigned char *);
  -extern int pcre_copy_substring(const char *, int *, int, int, char *, int);
  -extern int pcre_exec(const pcre *, const pcre_extra *, const char *,
  -  int, int, int, int *, int);
  -extern int pcre_get_substring(const char *, int *, int, int, const char **);
  -extern int pcre_get_substring_list(const char *, int *, int, const char ***);
  -extern int pcre_info(const pcre *, int *, int *);
  -extern unsigned const char *pcre_maketables(void);
  +              const unsigned char *);
  +extern int  pcre_copy_substring(const char *, int *, int, int, char *, int);
  +extern int  pcre_exec(const pcre *, const pcre_extra *, const char *,
  +              int, int, int, int *, int);
  +extern void pcre_free_substring(const char *);
  +extern void pcre_free_substring_list(const char **);
  +extern int  pcre_get_substring(const char *, int *, int, int, const char **);
  +extern int  pcre_get_substring_list(const char *, int *, int, const char ***);
  +extern int  pcre_info(const pcre *, int *, int *);
  +extern int  pcre_fullinfo(const pcre *, const pcre_extra *, int, void *);
  +extern const unsigned char *pcre_maketables(void);
   extern pcre_extra *pcre_study(const pcre *, int, const char **);
   extern const char *pcre_version(void);
  -extern int pcre_match(const char *, const char *, ...);
   
   #ifdef __cplusplus
   }  /* extern "C" */
   #endif
   
  -#endif /* _PCRE_H */
  +#endif /* __STR_PCRE_H__ */
    

From ossp-cvs-owner@ossp.org  Thu Aug 16 14:16:59 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7GCGtu36077; Thu, 16 Aug 2001 14:16:55 +0200 (CEST)
Date: Thu, 16 Aug 2001 14:16:55 +0200 (CEST)
Message-Id: <200108161216.f7GCGtu36077@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str ChangeLog Makefile.in aclocal.m4 autogen.sh c...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   16-Aug-2001 14:16:54
  Branch: HEAD                             Handle: 19700101010000997960612

  Added files:
    ossp-pkg/str            autogen.sh configure.ac libtool.m4
  Modified files:
    ossp-pkg/str            ChangeLog Makefile.in aclocal.m4 config.guess
                            config.sub configure ltmain.sh str_config.h.in
  Removed files:
    ossp-pkg/str            configure.in ltconfig

  Log:
    Upgraded STR to GNU Autoconf 2.52 and GNU Libtool 1.4

  Summary:
    Revision    Changes     Path
    1.31        +3  -0      ossp-pkg/str/ChangeLog
    1.33        +6  -19     ossp-pkg/str/Makefile.in
    1.3         +2  -41     ossp-pkg/str/aclocal.m4
    1.1         +75 -0      ossp-pkg/str/autogen.sh
    1.2         +564 -176   ossp-pkg/str/config.guess
    1.2         +219 -76    ossp-pkg/str/config.sub
    1.11        +8350 -1140 ossp-pkg/str/configure
    1.1         +0  -0      ossp-pkg/str/configure.ac
    NONE        +0  -42     ossp-pkg/str/configure.in
    1.1         +3397 -0    ossp-pkg/str/libtool.m4
    NONE        +0  -3114   ossp-pkg/str/ltconfig
    1.3         +1685 -763  ossp-pkg/str/ltmain.sh
    1.5         +58 -24     ossp-pkg/str/str_config.h.in
  ____________________________________________________________________________

  Index: ossp-pkg/str/ChangeLog
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 ChangeLog
  --- ossp-pkg/str/ChangeLog	2001/08/16 12:04:25	1.30
  +++ ossp-pkg/str/ChangeLog	2001/08/16 12:16:51	1.31
  @@ -11,6 +11,9 @@
   
    Changes between 0.9.4 and 0.9.5 (14-Jul-2000 to 16-Aug-2001):
   
  +   *) Upgraded to GNU Autoconf 2.52 and GNU Libtool 1.4
  +      [Ralf S. Engelschall]
  +
      *) Upgrade to a stripped down version of PCRE 3.5
         [Ralf S. Engelschall]
   
  Index: ossp-pkg/str/Makefile.in
  ============================================================
  $ cvs diff -u -r1.32 -r1.33 Makefile.in
  --- ossp-pkg/str/Makefile.in	2001/08/16 12:04:25	1.32
  +++ ossp-pkg/str/Makefile.in	2001/08/16 12:16:51	1.33
  @@ -149,11 +149,16 @@
   	$(RM) libtool
   	$(RM) Makefile
   
  +realclean: distclean
  +	$(RM) config.guess config.sub ltmain.sh libtool.m4
  +	$(RM) configure str_config.h.in
  +	$(RM) shtool
  +
   dist: distclean
   	@$(SHTOOL) fixperm -v .; \
   	V=`$(SHTOOL) version -l c -d short str_version.c`; \
   	$(SHTOOL) tarball -o str-$${V}.tar.gz -d str-$${V} -u rse -g str \
  -	                  -e 'CVS,\.cvsignore,\.[ao],^\.' -c 'gzip --best' .
  +	                  -e 'CVS,\.cvsignore,\.[ao],^\.,autogen.sh' -c 'gzip --best' .
   
   #   increase or update version information
   new-version:
  @@ -166,24 +171,6 @@
   	$(_VERSION)
   update-version:
   	@OPT="-s`$(SHTOOL) version -lc -dshort $(_VERSION_FILE)`" && $(_VERSION)
  -
  -update:
  -	@$(RM) ltmain.sh ltconfig shtool
  -	@$(MAKE) $(MFLAGS) ltmain.sh ltconfig configure shtool
  -configure: configure.in aclocal.m4
  -	$(RM) configure
  -	autoconf
  -ltmain.sh:
  -	@F=`libtoolize -n -c -f | grep 'cp.*ltmain.sh' |\
  -	    sed -e 's;[^/]*;;' -e 's; .*;;'`; \
  -	echo "ltmain.sh <-- $$F"; cat $$F |\
  -	sed -e 's:/bin/sh; then:/bin/sh || test "$$nonopt" = ./shtool;then:' \
  -	    -e 's:exec \$$SHELL \$$0 --finish:exit 0 #:' >ltmain.sh
  -ltconfig:
  -	@F=`libtoolize -n -c -f | grep 'cp.*ltconfig' | sed -e 's;[^/]*;;' -e 's; .*;;'`; \
  -	echo "ltconfig <-- $$F"; cp $$F .
  -shtool:
  -	shtoolize -o shtool echo version mkdir install fixperm tarball
   
   #   create dependencies
   depend:
  Index: ossp-pkg/str/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 aclocal.m4
  --- ossp-pkg/str/aclocal.m4	1999/12/26 14:56:25	1.2
  +++ ossp-pkg/str/aclocal.m4	2001/08/16 12:16:51	1.3
  @@ -7,10 +7,8 @@
   dnl ##
   
   AC_DEFUN(AC_PLATFORM,[
  -if test ".$host" != .NONE; then
  +if test ".$host" != .NONE && test ".$host" != .; then
       $1="$host"
  -elif test ".$nonopt" != .NONE; then
  -    $1="$nonopt"
   else
       $1=`${CONFIG_SHELL-/bin/sh} $srcdir/config.guess`
   fi
  @@ -31,7 +29,7 @@
   dnl ##
   
   AC_DEFUN(AC_HEADLINE,[dnl
  -AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)dnl
  +AC_DIVERT_PUSH(NOTICE)dnl
   #   configuration header
   if test ".`echo dummy [$]@ | grep help`" = .; then
       #   bootstrapping shtool
  @@ -147,43 +145,6 @@
       enable_shared=no
   fi
   ])
  -
  -dnl ##
  -dnl ##  Minimalistic Libtool Glue Code
  -dnl ##
  -dnl ##  configure.in:
  -dnl ##    AC_PROG_LIBTOOL(<platform-variable>)
  -dnl ##
  -
  -AC_DEFUN(AC_PROG_LIBTOOL,[dnl
  -AC_ARG_ENABLE(static,dnl
  -[  --enable-static         build static libraries (default=yes)],
  -enable_static="$enableval",
  -if test ".$enable_static" = .; then
  -    enable_static=yes
  -fi
  -)dnl
  -AC_ARG_ENABLE(shared,dnl
  -[  --enable-shared         build shared libraries (default=yes)],
  -enable_shared="$enableval",
  -if test ".$enable_shared" = .; then
  -    enable_shared=yes
  -fi
  -)dnl
  -libtool_flags=''
  -dnl libtool_flags="$libtool_flags --cache-file=$cache_file"
  -test ".$silent"            = .yes && libtool_flags="$libtool_flags --silent"
  -test ".$enable_static"     = .no  && libtool_flags="$libtool_flags --disable-static"
  -test ".$enable_shared"     = .no  && libtool_flags="$libtool_flags --disable-shared"
  -test ".$ac_cv_prog_gcc"    = .yes && libtool_flags="$libtool_flags --with-gcc"
  -test ".$ac_cv_prog_gnu_ld" = .yes && libtool_flags="$libtool_flags --with-gnu-ld"
  -CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" LD="$LD" \
  -${CONFIG_SHELL-/bin/sh} $srcdir/ltconfig --no-reexec \
  -$libtool_flags --srcdir=$srcdir --no-verify $srcdir/ltmain.sh $1 ||\
  -AC_MSG_ERROR([libtool configuration failed])
  -dnl (AC_CACHE_LOAD) >/dev/null 2>&1
  -])dnl
  -
   
   dnl ##
   dnl ##
  Index: ossp-pkg/str/autogen.sh
  ============================================================
  $ cvs update -p -r1.1 autogen.sh
  #!/bin/sh
  ##
  ##  L2 - OSSP Logging Library
  ##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  ##
  ##  This file is part of OSSP L2, a flexible logging library which
  ##  can be found at http://www.ossp.org/pkg/l2/.
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  autogen.sh: auto-generate library build environment tools
  ##
  
  #   generator tools version sanity check
  for spec in \
      "autoconf   --version 4 2.52  2.5*" \
      "libtoolize --version 4 1.4   1.4*" \
      "shtoolize  -v        3 1.5.4 1.5.*"
  do
      set -- $spec
      t="$1"
      o="$2"
      p="$3"
      e="$4"
      a="$5"
      v=`($t $o | head -1 | awk "{ print \\\$$p; }") 2>/dev/null`
      if [ ".$v" = . ]; then
          echo "$0:ERROR: unable to determine version of $t" 1>&2
          exit 1
      fi
      eval "${t}_version=\"$v\""
      case "$v" in
          $e )
              ;;
          $a )
              echo "$0:WARNING: $t version $v still accepted, although expected $e." 1>&2
              ;;
          * )
              echo "$0:ERROR: $t version $e expected, but found $v." 1>&2
              ;;
      esac
  done
  
  #   GNU Libtool generation
  echo "GNU Libtool $libtoolize_version -> ltmain.sh, libtool.m4, config.guess, config.sub"
  libtoolize --force --copy >/dev/null 2>&1
  cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
      sed -e 's;[^\`]*\`;;' -e "s;\'.*;;"` libtool.m4
  
  #   GNU Autoconf generation
  echo "GNU Autoconf $autoconf_version -> configure, config.h.in"
  autoconf
  autoheader
  
  #   GNU Shtool generation
  echo "GNU Shtool $shtoolize_version -> shtool"
  shtoolize -q echo install mkdir fixperm tarball version
  
  Index: ossp-pkg/str/config.guess
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 config.guess
  --- ossp-pkg/str/config.guess	1999/12/26 14:56:25	1.1
  +++ ossp-pkg/str/config.guess	2001/08/16 12:16:52	1.2
  @@ -1,8 +1,10 @@
   #! /bin/sh
   # Attempt to guess a canonical system name.
  -#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999
  +#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
   #   Free Software Foundation, Inc.
  -#
  +
  +timestamp='2001-04-20'
  +
   # This file is free software; you can redistribute it and/or modify it
   # under the terms of the GNU General Public License as published by
   # the Free Software Foundation; either version 2 of the License, or
  @@ -23,34 +25,93 @@
   # the same distribution terms that you use for the rest of that program.
   
   # Written by Per Bothner <bothner@cygnus.com>.
  -# The master version of this file is at the FSF in /home/gd/gnu/lib.
  -# Please send patches to the Autoconf mailing list <autoconf@gnu.org>.
  +# Please send patches to <config-patches@gnu.org>.
   #
   # This script attempts to guess a canonical system name similar to
   # config.sub.  If it succeeds, it prints the system name on stdout, and
   # exits with 0.  Otherwise, it exits with 1.
   #
   # The plan is that this can be called by configure scripts if you
  -# don't specify an explicit system type (host/target name).
  -#
  -# Only a few systems have been added to this list; please add others
  -# (but try to keep the structure clean).
  -#
  +# don't specify an explicit build system type.
   
  -# Use $HOST_CC if defined. $CC may point to a cross-compiler
  -if test x"$CC_FOR_BUILD" = x; then
  -  if test x"$HOST_CC" != x; then
  -    CC_FOR_BUILD="$HOST_CC"
  -  else
  -    if test x"$CC" != x; then
  -      CC_FOR_BUILD="$CC"
  -    else
  -      CC_FOR_BUILD=cc
  -    fi
  -  fi
  +me=`echo "$0" | sed -e 's,.*/,,'`
  +
  +usage="\
  +Usage: $0 [OPTION]
  +
  +Output the configuration name of the system \`$me' is run on.
  +
  +Operation modes:
  +  -h, --help         print this help, then exit
  +  -t, --time-stamp   print date of last modification, then exit
  +  -v, --version      print version number, then exit
  +
  +Report bugs and patches to <config-patches@gnu.org>."
  +
  +version="\
  +GNU config.guess ($timestamp)
  +
  +Originally written by Per Bothner.
  +Copyright (C) 1992, 93, 94, 95, 96, 97, 98, 99, 2000
  +Free Software Foundation, Inc.
  +
  +This is free software; see the source for copying conditions.  There is NO
  +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
  +
  +help="
  +Try \`$me --help' for more information."
  +
  +# Parse command line
  +while test $# -gt 0 ; do
  +  case $1 in
  +    --time-stamp | --time* | -t )
  +       echo "$timestamp" ; exit 0 ;;
  +    --version | -v )
  +       echo "$version" ; exit 0 ;;
  +    --help | --h* | -h )
  +       echo "$usage"; exit 0 ;;
  +    -- )     # Stop option processing
  +       shift; break ;;
  +    - )	# Use stdin as input.
  +       break ;;
  +    -* )
  +       echo "$me: invalid option $1$help" >&2
  +       exit 1 ;;
  +    * )
  +       break ;;
  +  esac
  +done
  +
  +if test $# != 0; then
  +  echo "$me: too many arguments$help" >&2
  +  exit 1
   fi
   
   
  +dummy=dummy-$$
  +trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15
  +
  +# CC_FOR_BUILD -- compiler used by this script.
  +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
  +# use `HOST_CC' if defined, but it is deprecated.
  +
  +case $CC_FOR_BUILD,$HOST_CC,$CC in
  + ,,)    echo "int dummy(){}" > $dummy.c
  +	for c in cc gcc c89 ; do
  +	  ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1
  +	  if test $? = 0 ; then
  +	     CC_FOR_BUILD="$c"; break
  +	  fi
  +	done
  +	rm -f $dummy.c $dummy.o $dummy.rel
  +	if test x"$CC_FOR_BUILD" = x ; then
  +	  CC_FOR_BUILD=no_compiler_found
  +	fi
  +	;;
  + ,,*)   CC_FOR_BUILD=$CC ;;
  + ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
  +esac
  +
   # This is needed to find uname on a Pyramid OSx when run in the BSD universe.
   # (ghazi@noc.rutgers.edu 8/24/94.)
   if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
  @@ -59,15 +120,57 @@
   
   UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
   UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
  -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
  +UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
   UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
   
  -dummy=dummy-$$
  -trap 'rm -f $dummy.c $dummy.o $dummy; exit 1' 1 2 15
  -
   # Note: order is significant - the case branches are not exclusive.
   
   case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
  +    *:NetBSD:*:*)
  +	# Netbsd (nbsd) targets should (where applicable) match one or
  +	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
  +	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
  +	# switched to ELF, *-*-netbsd* would select the old
  +	# object file format.  This provides both forward
  +	# compatibility and a consistent mechanism for selecting the
  +	# object file format.
  +	# Determine the machine/vendor (is the vendor relevant).
  +	case "${UNAME_MACHINE}" in
  +	    amiga) machine=m68k-unknown ;;
  +	    arm32) machine=arm-unknown ;;
  +	    atari*) machine=m68k-atari ;;
  +	    sun3*) machine=m68k-sun ;;
  +	    mac68k) machine=m68k-apple ;;
  +	    macppc) machine=powerpc-apple ;;
  +	    hp3[0-9][05]) machine=m68k-hp ;;
  +	    ibmrt|romp-ibm) machine=romp-ibm ;;
  +	    *) machine=${UNAME_MACHINE}-unknown ;;
  +	esac
  +	# The Operating System including object format, if it has switched
  +	# to ELF recently, or will in the future.
  +	case "${UNAME_MACHINE}" in
  +	    i386|sparc|amiga|arm*|hp300|mvme68k|vax|atari|luna68k|mac68k|news68k|next68k|pc532|sun3*|x68k)
  +		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
  +			| grep __ELF__ >/dev/null
  +		then
  +		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
  +		    # Return netbsd for either.  FIX?
  +		    os=netbsd
  +		else
  +		    os=netbsdelf
  +		fi
  +		;;
  +	    *)
  +	        os=netbsd
  +		;;
  +	esac
  +	# The OS release
  +	release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
  +	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
  +	# contains redundant information, the shorter form:
  +	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
  +	echo "${machine}-${os}${release}"
  +	exit 0 ;;
       alpha:OSF1:*:*)
   	if test $UNAME_RELEASE = "V4.0"; then
   		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
  @@ -77,41 +180,51 @@
   	# A Xn.n version is an unreleased experimental baselevel.
   	# 1.2 uses "1.2" for uname -r.
   	cat <<EOF >$dummy.s
  +	.data
  +\$Lformat:
  +	.byte 37,100,45,37,120,10,0	# "%d-%x\n"
  +
  +	.text
   	.globl main
  +	.align 4
   	.ent main
   main:
  -	.frame \$30,0,\$26,0
  -	.prologue 0
  -	.long 0x47e03d80 # implver $0
  -	lda \$2,259
  -	.long 0x47e20c21 # amask $2,$1
  -	srl \$1,8,\$2
  -	sll \$2,2,\$2
  -	sll \$0,3,\$0
  -	addl \$1,\$0,\$0
  -	addl \$2,\$0,\$0
  -	ret \$31,(\$26),1
  +	.frame \$30,16,\$26,0
  +	ldgp \$29,0(\$27)
  +	.prologue 1
  +	.long 0x47e03d80 # implver \$0
  +	lda \$2,-1
  +	.long 0x47e20c21 # amask \$2,\$1
  +	lda \$16,\$Lformat
  +	mov \$0,\$17
  +	not \$1,\$18
  +	jsr \$26,printf
  +	ldgp \$29,0(\$26)
  +	mov 0,\$16
  +	jsr \$26,exit
   	.end main
   EOF
   	$CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
   	if test "$?" = 0 ; then
  -		./$dummy
  -		case "$?" in
  -			7)
  +		case `./$dummy` in
  +			0-0)
   				UNAME_MACHINE="alpha"
   				;;
  -			15)
  +			1-0)
   				UNAME_MACHINE="alphaev5"
   				;;
  -			14)
  +			1-1)
   				UNAME_MACHINE="alphaev56"
   				;;
  -			10)
  +			1-101)
   				UNAME_MACHINE="alphapca56"
   				;;
  -			16)
  +			2-303)
   				UNAME_MACHINE="alphaev6"
   				;;
  +			2-307)
  +				UNAME_MACHINE="alphaev67"
  +				;;
   		esac
   	fi
   	rm -f $dummy.s $dummy
  @@ -127,11 +240,8 @@
   	echo alpha-dec-winnt3.5
   	exit 0 ;;
       Amiga*:UNIX_System_V:4.0:*)
  -	echo m68k-cbm-sysv4
  +	echo m68k-unknown-sysv4
   	exit 0;;
  -    amiga:NetBSD:*:*)
  -      echo m68k-cbm-netbsd${UNAME_RELEASE}
  -      exit 0 ;;
       amiga:OpenBSD:*:*)
   	echo m68k-unknown-openbsd${UNAME_RELEASE}
   	exit 0 ;;
  @@ -156,13 +266,13 @@
       wgrisc:OpenBSD:*:*)
   	echo mipsel-unknown-openbsd${UNAME_RELEASE}
   	exit 0 ;;
  +    *:OS/390:*:*)
  +	echo i370-ibm-openedition
  +	exit 0 ;;
       arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
   	echo arm-acorn-riscix${UNAME_RELEASE}
   	exit 0;;
  -    arm32:NetBSD:*:*)
  -	echo arm-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
  -	exit 0 ;;
  -    SR2?01:HI-UX/MPP:*:*)
  +    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
   	echo hppa1.1-hitachi-hiuxmpp
   	exit 0;;
       Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
  @@ -218,9 +328,6 @@
       aushp:SunOS:*:*)
   	echo sparc-auspex-sunos${UNAME_RELEASE}
   	exit 0 ;;
  -    atari*:NetBSD:*:*)
  -	echo m68k-atari-netbsd${UNAME_RELEASE}
  -	exit 0 ;;
       atari*:OpenBSD:*:*)
   	echo m68k-unknown-openbsd${UNAME_RELEASE}
   	exit 0 ;;
  @@ -250,15 +357,9 @@
       *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
           echo m68k-unknown-mint${UNAME_RELEASE}
           exit 0 ;;
  -    sun3*:NetBSD:*:*)
  -	echo m68k-sun-netbsd${UNAME_RELEASE}
  -	exit 0 ;;
       sun3*:OpenBSD:*:*)
   	echo m68k-unknown-openbsd${UNAME_RELEASE}
   	exit 0 ;;
  -    mac68k:NetBSD:*:*)
  -	echo m68k-apple-netbsd${UNAME_RELEASE}
  -	exit 0 ;;
       mac68k:OpenBSD:*:*)
   	echo m68k-unknown-openbsd${UNAME_RELEASE}
   	exit 0 ;;
  @@ -271,9 +372,6 @@
       powerpc:machten:*:*)
   	echo powerpc-apple-machten${UNAME_RELEASE}
   	exit 0 ;;
  -    macppc:NetBSD:*:*)
  -        echo powerpc-apple-netbsd${UNAME_RELEASE}
  -        exit 0 ;;
       RISC*:Mach:*:*)
   	echo mips-dec-mach_bsd4.3
   	exit 0 ;;
  @@ -289,6 +387,7 @@
       mips:*:*:UMIPS | mips:*:*:RISCos)
   	sed 's/^	//' << EOF >$dummy.c
   #ifdef __cplusplus
  +#include <stdio.h>  /* for printf() prototype */
   	int main (int argc, char *argv[]) {
   #else
   	int main (argc, argv) int argc; char *argv[]; {
  @@ -309,10 +408,13 @@
   EOF
   	$CC_FOR_BUILD $dummy.c -o $dummy \
   	  && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
  -	  && rm $dummy.c $dummy && exit 0
  +	  && rm -f $dummy.c $dummy && exit 0
   	rm -f $dummy.c $dummy
   	echo mips-mips-riscos${UNAME_RELEASE}
   	exit 0 ;;
  +    Motorola:PowerMAX_OS:*:*)
  +	echo powerpc-motorola-powermax
  +	exit 0 ;;
       Night_Hawk:Power_UNIX:*:*)
   	echo powerpc-harris-powerunix
   	exit 0 ;;
  @@ -328,15 +430,18 @@
       AViiON:dgux:*:*)
           # DG/UX returns AViiON for all architectures
           UNAME_PROCESSOR=`/usr/bin/uname -p`
  -        if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then
  -	if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \
  -	     -o ${TARGET_BINARY_INTERFACE}x = x ] ; then
  +	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
  +	then
  +	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
  +	       [ ${TARGET_BINARY_INTERFACE}x = x ]
  +	    then
   		echo m88k-dg-dgux${UNAME_RELEASE}
  -	else
  +	    else
   		echo m88k-dg-dguxbcs${UNAME_RELEASE}
  +	    fi
  +	else
  +	    echo i586-dg-dgux${UNAME_RELEASE}
   	fi
  -        else echo i586-dg-dgux${UNAME_RELEASE}
  -        fi
    	exit 0 ;;
       M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
   	echo m88k-dolphin-sysv3
  @@ -357,9 +462,17 @@
       ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
   	echo romp-ibm-aix      # uname -m gives an 8 hex-code CPU id
   	exit 0 ;;              # Note that: echo "'`uname -s`'" gives 'AIX '
  -    i?86:AIX:*:*)
  +    i*86:AIX:*:*)
   	echo i386-ibm-aix
   	exit 0 ;;
  +    ia64:AIX:*:*)
  +	if [ -x /usr/bin/oslevel ] ; then
  +		IBM_REV=`/usr/bin/oslevel`
  +	else
  +		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
  +	fi
  +	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
  +	exit 0 ;;
       *:AIX:2:3)
   	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
   		sed 's/^		//' << EOF >$dummy.c
  @@ -373,7 +486,7 @@
   			exit(0);
   			}
   EOF
  -		$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0
  +		$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
   		rm -f $dummy.c $dummy
   		echo rs6000-ibm-aix3.2.5
   	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
  @@ -382,9 +495,9 @@
   		echo rs6000-ibm-aix3.2
   	fi
   	exit 0 ;;
  -    *:AIX:*:4)
  +    *:AIX:*:[45])
   	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'`
  -	if /usr/sbin/lsattr -EHl ${IBM_CPU_ID} | grep POWER >/dev/null 2>&1; then
  +	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
   		IBM_ARCH=rs6000
   	else
   		IBM_ARCH=powerpc
  @@ -392,7 +505,7 @@
   	if [ -x /usr/bin/oslevel ] ; then
   		IBM_REV=`/usr/bin/oslevel`
   	else
  -		IBM_REV=4.${UNAME_RELEASE}
  +		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
   	fi
   	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
   	exit 0 ;;
  @@ -402,7 +515,7 @@
       ibmrt:4.4BSD:*|romp-ibm:BSD:*)
   	echo romp-ibm-bsd4.4
   	exit 0 ;;
  -    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC NetBSD and
  +    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
   	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
   	exit 0 ;;                           # report: romp-ibm BSD 4.3
       *:BOSX:*:*)
  @@ -418,11 +531,31 @@
   	echo m68k-hp-bsd4.4
   	exit 0 ;;
       9000/[34678]??:HP-UX:*:*)
  +	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
   	case "${UNAME_MACHINE}" in
   	    9000/31? )            HP_ARCH=m68000 ;;
   	    9000/[34]?? )         HP_ARCH=m68k ;;
   	    9000/[678][0-9][0-9])
  +              case "${HPUX_REV}" in
  +                11.[0-9][0-9])
  +                  if [ -x /usr/bin/getconf ]; then
  +                    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
  +                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
  +                    case "${sc_cpu_version}" in
  +                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
  +                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
  +                      532)                      # CPU_PA_RISC2_0
  +                        case "${sc_kernel_bits}" in
  +                          32) HP_ARCH="hppa2.0n" ;;
  +                          64) HP_ARCH="hppa2.0w" ;;
  +                        esac ;;
  +                    esac
  +                  fi ;;
  +              esac
  +              if [ "${HP_ARCH}" = "" ]; then
                 sed 's/^              //' << EOF >$dummy.c
  +
  +              #define _HPUX_SOURCE
                 #include <stdlib.h>
                 #include <unistd.h>
   
  @@ -453,12 +586,17 @@
                     exit (0);
                 }
   EOF
  -	($CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
  +	(CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
  +	if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi
   	rm -f $dummy.c $dummy
  +	fi ;;
   	esac
  -	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
   	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
   	exit 0 ;;
  +    ia64:HP-UX:*:*)
  +	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
  +	echo ia64-hp-hpux${HPUX_REV}
  +	exit 0 ;;
       3050*:HI-UX:*:*)
   	sed 's/^	//' << EOF >$dummy.c
   	#include <unistd.h>
  @@ -485,7 +623,7 @@
   	  exit (0);
   	}
   EOF
  -	$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0
  +	$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
   	rm -f $dummy.c $dummy
   	echo unknown-hitachi-hiuxwe2
   	exit 0 ;;
  @@ -504,7 +642,7 @@
       hp8??:OSF1:*:*)
   	echo hppa1.0-hp-osf
   	exit 0 ;;
  -    i?86:OSF1:*:*)
  +    i*86:OSF1:*:*)
   	if [ -x /usr/sbin/sysversion ] ; then
   	    echo ${UNAME_MACHINE}-unknown-osf1mk
   	else
  @@ -547,29 +685,30 @@
   	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
   	exit 0 ;;
       CRAY*TS:*:*:*)
  -	echo t90-cray-unicos${UNAME_RELEASE}
  +	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
   	exit 0 ;;
  +    CRAY*T3D:*:*:*)
  +	echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
  +	exit 0 ;;
       CRAY*T3E:*:*:*)
  -	echo t3e-cray-unicosmk${UNAME_RELEASE}
  +	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
  +	exit 0 ;;
  +    CRAY*SV1:*:*:*)
  +	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
   	exit 0 ;;
       CRAY-2:*:*:*)
   	echo cray2-cray-unicos
           exit 0 ;;
  -    F300:UNIX_System_V:*:*)
  +    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
  +	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
           FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
           FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
  -        echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
  +        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
           exit 0 ;;
  -    F301:UNIX_System_V:*:*)
  -       echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'`
  -       exit 0 ;;
  -    hp3[0-9][05]:NetBSD:*:*)
  -	echo m68k-hp-netbsd${UNAME_RELEASE}
  -	exit 0 ;;
       hp300:OpenBSD:*:*)
   	echo m68k-unknown-openbsd${UNAME_RELEASE}
   	exit 0 ;;
  -    i?86:BSD/386:*:* | i?86:BSD/OS:*:*)
  +    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
   	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
   	exit 0 ;;
       sparc*:BSD/OS:*:*)
  @@ -579,25 +718,7 @@
   	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
   	exit 0 ;;
       *:FreeBSD:*:*)
  -	# echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
  -        VERS=`echo ${UNAME_RELEASE} | sed -e 's/[-(].*//'`
  -        MACH=`sysctl -n hw.model`
  -        ARCH='unknown'
  -        case ${MACH} in
  -           *386*       ) MACH="i386" ;;
  -           *486*       ) MACH="i486" ;;
  -           Pentium\ II*) MACH="i686" ;;
  -           Pentium*    ) MACH="i586" ;;
  -           Alpha*      ) MACH="alpha" ;;
  -           *           ) MACH="$UNAME_MACHINE" ;;
  -        esac
  -        case ${MACH} in
  -           i[0-9]86 ) ARCH="pc" ;;
  -        esac
  -        echo "${MACH}-${ARCH}-freebsd${VERS}"
  -	exit 0 ;;
  -    *:NetBSD:*:*)
  -	echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
  +	echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
   	exit 0 ;;
       *:OpenBSD:*:*)
   	echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
  @@ -608,6 +729,9 @@
       i*:MINGW*:*)
   	echo ${UNAME_MACHINE}-pc-mingw32
   	exit 0 ;;
  +    i*:PW*:*)
  +	echo ${UNAME_MACHINE}-pc-pw32
  +	exit 0 ;;
       i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
   	# How do we know it's Interix rather than the generic POSIX subsystem?
   	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
  @@ -626,62 +750,207 @@
       *:GNU:*:*)
   	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
   	exit 0 ;;
  -    *:Linux:*:*)
  -	# determine canonical machine name
  -	MACHINE="$UNAME_MACHINE"
  -	case "$MACHINE" in
  -	    arm*|sa110*) MACHINE="arm" ;;
  -	esac
  -
  -        # determine (distribution) vendor
  -	VENDOR="gnu"
  -	for tagfile in dummy `cd /etc && echo *-release *_version 2>/dev/null`; do
  -	    test ! -f /etc/$tagfile && continue
  -	    VENDOR=`echo $tagfile | sed -e 's/-release$//' -e 's/_version$//' |\
  -	            tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
  -	done
  -
  -	# determine kernel version
  -	KERNEL=`echo ${UNAME_RELEASE} | sed -e 's/^\([0-9]*\.[0-9]*\)\..*$/\1/'`
  -
  -	# determine [g]libc version
  +    i*86:Minix:*:*)
  +	echo ${UNAME_MACHINE}-pc-minix
  +	exit 0 ;;
  +    arm*:Linux:*:*)
  +	echo ${UNAME_MACHINE}-unknown-linux-gnu
  +	exit 0 ;;
  +    ia64:Linux:*:*)
  +	echo ${UNAME_MACHINE}-unknown-linux
  +	exit 0 ;;
  +    m68*:Linux:*:*)
  +	echo ${UNAME_MACHINE}-unknown-linux-gnu
  +	exit 0 ;;
  +    mips:Linux:*:*)
  +	cat >$dummy.c <<EOF
  +#ifdef __cplusplus
  +#include <stdio.h>  /* for printf() prototype */
  +int main (int argc, char *argv[]) {
  +#else
  +int main (argc, argv) int argc; char *argv[]; {
  +#endif
  +#ifdef __MIPSEB__
  +  printf ("%s-unknown-linux-gnu\n", argv[1]);
  +#endif
  +#ifdef __MIPSEL__
  +  printf ("%sel-unknown-linux-gnu\n", argv[1]);
  +#endif
  +  return 0;
  +}
  +EOF
  +	$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0
  +	rm -f $dummy.c $dummy
  +	;;
  +    ppc:Linux:*:*)
  +	# Determine Lib Version
   	cat >$dummy.c <<EOF
  -#include <stdio.h>
   #include <features.h>
  +#if defined(__GLIBC__)
  +extern char __libc_version[];
  +extern char __libc_release[];
  +#endif
   main(argc, argv)
  -int argc;
  -char *argv[];
  +     int argc;
  +     char *argv[];
   {
  -#if defined(__GLIBC__) && !defined(__GLIBC_MINOR__)
  -    printf("%d", __GLIBC__);
  -#elif defined(__GLIBC__) && defined(__GLIBC_MINOR__)
  -    printf("%d.%d", __GLIBC__, __GLIBC_MINOR__);
  -#elif defined(__GNU_LIBRARY__)
  -    printf("%d", __GNU_LIBRARY__);
  +#if defined(__GLIBC__)
  +  printf("%s %s\n", __libc_version, __libc_release);
   #else
  -    printf("1");
  +  printf("unknown\n");
   #endif
  -    return 0;
  +  return 0;
   }
   EOF
  -	LIBC="1"
  -	$CC_FOR_BUILD $dummy.c -o $dummy # 2>/dev/null
  -	if [ $? = 0 ]; then
  -	    LIBC=`./$dummy | sed -e 's/^\([0-9]*\.[0-9]*\)\..*$/\1/'`
  +	LIBC=""
  +	$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null
  +	if test "$?" = 0 ; then
  +		./$dummy | grep 1\.99 > /dev/null
  +		if test "$?" = 0 ; then LIBC="libc1" ; fi
   	fi
   	rm -f $dummy.c $dummy
  -
  -	echo "${MACHINE}-${VENDOR}-linux${KERNEL}glibc${LIBC}"
  +	echo powerpc-unknown-linux-gnu${LIBC}
  +	exit 0 ;;
  +    alpha:Linux:*:*)
  +	cat <<EOF >$dummy.s
  +	  .data
  +	  \$Lformat:
  +		.byte 37,100,45,37,120,10,0	# "%d-%x\n"
  +	   .text
  +		.globl main
  +		.align 4
  +		.ent main
  +	    main:
  +		.frame \$30,16,\$26,0
  +		ldgp \$29,0(\$27)
  +		.prologue 1
  +		.long 0x47e03d80 # implver \$0
  +		lda \$2,-1
  +		.long 0x47e20c21 # amask \$2,\$1
  +		lda \$16,\$Lformat
  +		mov \$0,\$17
  +		not \$1,\$18
  +		jsr \$26,printf
  +		ldgp \$29,0(\$26)
  +		mov 0,\$16
  +		jsr \$26,exit
  +		.end main
  +EOF
  +	LIBC=""
  +	$CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
  +	if test "$?" = 0 ; then
  +		case `./$dummy` in
  +		0-0)	UNAME_MACHINE="alpha" ;;
  +		1-0)	UNAME_MACHINE="alphaev5" ;;
  +		1-1)    UNAME_MACHINE="alphaev56" ;;
  +		1-101)	UNAME_MACHINE="alphapca56" ;;
  +		2-303)	UNAME_MACHINE="alphaev6" ;;
  +		2-307)	UNAME_MACHINE="alphaev67" ;;
  +		esac
  +		objdump --private-headers $dummy | \
  +		  grep ld.so.1 > /dev/null
  +		if test "$?" = 0 ; then
  +			LIBC="libc1"
  +		fi
  +	fi
  +	rm -f $dummy.s $dummy
  +	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
  +	exit 0 ;;
  +    parisc:Linux:*:* | hppa:Linux:*:*)
  +	# Look for CPU level
  +	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
  +	  PA7*) echo hppa1.1-unknown-linux-gnu ;;
  +	  PA8*) echo hppa2.0-unknown-linux-gnu ;;
  +	  *)    echo hppa-unknown-linux-gnu ;;
  +	esac
  +	exit 0 ;;
  +    parisc64:Linux:*:* | hppa64:Linux:*:*)
  +	echo hppa64-unknown-linux-gnu
  +	exit 0 ;;
  +    s390:Linux:*:* | s390x:Linux:*:*)
  +	echo ${UNAME_MACHINE}-ibm-linux
  +	exit 0 ;;
  +    sh*:Linux:*:*)
  +	echo ${UNAME_MACHINE}-unknown-linux-gnu
  +	exit 0 ;;
  +    sparc:Linux:*:* | sparc64:Linux:*:*)
  +	echo ${UNAME_MACHINE}-unknown-linux-gnu
  +	exit 0 ;;
  +    x86_64:Linux:*:*)
  +	echo x86_64-unknown-linux-gnu
  +	exit 0 ;;
  +    i*86:Linux:*:*)
  +	# The BFD linker knows what the default object file format is, so
  +	# first see if it will tell us. cd to the root directory to prevent
  +	# problems with other programs or directories called `ld' in the path.
  +	ld_supported_emulations=`cd /; ld --help 2>&1 \
  +			 | sed -ne '/supported emulations:/!d
  +				    s/[ 	][ 	]*/ /g
  +				    s/.*supported emulations: *//
  +				    s/ .*//
  +				    p'`
  +        case "$ld_supported_emulations" in
  +	  i*86linux)
  +		echo "${UNAME_MACHINE}-pc-linux-gnuaout"
  +		exit 0
  +		;;
  +	  elf_i*86)
  +		TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
  +		;;
  +	  i*86coff)
  +		echo "${UNAME_MACHINE}-pc-linux-gnucoff"
  +		exit 0
  +		;;
  +	esac
  +	# Either a pre-BFD a.out linker (linux-gnuoldld)
  +	# or one that does not give us useful --help.
  +	# GCC wants to distinguish between linux-gnuoldld and linux-gnuaout.
  +	# If ld does not provide *any* "supported emulations:"
  +	# that means it is gnuoldld.
  +	test -z "$ld_supported_emulations" && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0
  +	case "${UNAME_MACHINE}" in
  +	i*86)
  +	  VENDOR=pc;
  +	  ;;
  +	*)
  +	  VENDOR=unknown;
  +	  ;;
  +	esac
  +	# Determine whether the default compiler is a.out or elf
  +	cat >$dummy.c <<EOF
  +#include <features.h>
  +#ifdef __cplusplus
  +#include <stdio.h>  /* for printf() prototype */
  +	int main (int argc, char *argv[]) {
  +#else
  +	int main (argc, argv) int argc; char *argv[]; {
  +#endif
  +#ifdef __ELF__
  +# ifdef __GLIBC__
  +#  if __GLIBC__ >= 2
  +    printf ("%s-${VENDOR}-linux-gnu\n", argv[1]);
  +#  else
  +    printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
  +#  endif
  +# else
  +   printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
  +# endif
  +#else
  +  printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]);
  +#endif
  +  return 0;
  +}
  +EOF
  +	$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0
  +	rm -f $dummy.c $dummy
  +	test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
   	;;
   # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.  earlier versions
   # are messed up and put the nodename in both sysname and nodename.
  -    i?86:DYNIX/ptx:4*:*)
  +    i*86:DYNIX/ptx:4*:*)
   	echo i386-sequent-sysv4
   	exit 0 ;;
  -    i?86:UnixWare:*:* )
  -        echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}uw${UNAME_VERSION}
  -        exit 0 ;;
  -    i?86:UNIX_SV:4.2MP:2.*)
  +    i*86:UNIX_SV:4.2MP:2.*)
           # Unixware is an offshoot of SVR4, but it has its own version
           # number series starting with 2...
           # I am not positive that other SVR4 systems won't match this,
  @@ -689,22 +958,24 @@
           # Use sysv4.2uw... so that sysv4* matches it.
   	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
   	exit 0 ;;
  -    i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*)
  +    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
  +	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
   	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
  -		echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE}
  +		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
   	else
  -		echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
  +		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
   	fi
   	exit 0 ;;
  -    i?86:*:5:7*)
  -	UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
  -	(/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
  -	(/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) && UNAME_MACHINE=i586
  -	(/bin/uname -X|egrep '^Machine.*Pent.*II' >/dev/null) && UNAME_MACHINE=i686
  -	(/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) && UNAME_MACHINE=i585
  -	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}${UNAME_VERSION}-sysv${UNAME_RELEASE}
  +    i*86:*:5:7*)
  +        # Fixed at (any) Pentium or better
  +        UNAME_MACHINE=i586
  +        if [ ${UNAME_SYSTEM} = "UnixWare" ] ; then
  +	    echo ${UNAME_MACHINE}-sco-sysv${UNAME_RELEASE}uw${UNAME_VERSION}
  +	else
  +	    echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
  +	fi
   	exit 0 ;;
  -    i?86:*:3.2:*)
  +    i*86:*:3.2:*)
   	if test -f /usr/options/cb.name; then
   		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
   		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
  @@ -722,7 +993,11 @@
   		echo ${UNAME_MACHINE}-pc-sysv32
   	fi
   	exit 0 ;;
  +    i*86:*DOS:*:*)
  +	echo ${UNAME_MACHINE}-pc-msdosdjgpp
  +	exit 0 ;;
       pc:*:*:*)
  +	# Left here for compatibility:
           # uname -m prints for DJGPP always 'pc', but it prints nothing about
           # the processor, so we play safe by assuming i386.
   	echo i386-pc-msdosdjgpp
  @@ -746,7 +1021,7 @@
   	exit 0 ;;
       M68*:*:R3V[567]*:*)
   	test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
  -    3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
  +    3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
   	OS_REL=''
   	test -r /etc/.relid \
   	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
  @@ -757,27 +1032,27 @@
       3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
           /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
             && echo i486-ncr-sysv4 && exit 0 ;;
  -    m68*:LynxOS:2.*:*)
  +    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
   	echo m68k-unknown-lynxos${UNAME_RELEASE}
   	exit 0 ;;
       mc68030:UNIX_System_V:4.*:*)
   	echo m68k-atari-sysv4
   	exit 0 ;;
  -    i?86:LynxOS:2.*:* | i?86:LynxOS:3.[01]*:*)
  +    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
   	echo i386-unknown-lynxos${UNAME_RELEASE}
   	exit 0 ;;
       TSUNAMI:LynxOS:2.*:*)
   	echo sparc-unknown-lynxos${UNAME_RELEASE}
   	exit 0 ;;
  -    rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*)
  +    rs6000:LynxOS:2.*:*)
   	echo rs6000-unknown-lynxos${UNAME_RELEASE}
   	exit 0 ;;
  +    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
  +	echo powerpc-unknown-lynxos${UNAME_RELEASE}
  +	exit 0 ;;
       SM[BE]S:UNIX_SV:*:*)
   	echo mips-dde-sysv${UNAME_RELEASE}
   	exit 0 ;;
  -    BS2000:POSIX-BC:*:*)
  -	echo BS2000-siemens-sysv4
  -	exit 0 ;;
       RM*:ReliantUNIX-*:*:*)
   	echo mips-sni-sysv4
   	exit 0 ;;
  @@ -808,7 +1083,7 @@
       mc68*:A/UX:*:*)
   	echo m68k-apple-aux${UNAME_RELEASE}
   	exit 0 ;;
  -    news*:NEWS-OS:*:6*)
  +    news*:NEWS-OS:6*:*)
   	echo mips-sony-newsos6
   	exit 0 ;;
       R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
  @@ -839,6 +1114,64 @@
       *:Rhapsody:*:*)
   	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
   	exit 0 ;;
  +    *:Darwin:*:*)
  +	echo `uname -p`-apple-darwin${UNAME_RELEASE}
  +	exit 0 ;;
  +    *:procnto*:*:* | *:QNX:[0123456789]*:*)
  +	if test "${UNAME_MACHINE}" = "x86pc"; then
  +		UNAME_MACHINE=pc
  +	fi
  +	echo `uname -p`-${UNAME_MACHINE}-nto-qnx
  +	exit 0 ;;
  +    *:QNX:*:4*)
  +	echo i386-pc-qnx
  +	exit 0 ;;
  +    NSR-[KW]:NONSTOP_KERNEL:*:*)
  +	echo nsr-tandem-nsk${UNAME_RELEASE}
  +	exit 0 ;;
  +    *:NonStop-UX:*:*)
  +	echo mips-compaq-nonstopux
  +	exit 0 ;;
  +    BS2000:POSIX*:*:*)
  +	echo bs2000-siemens-sysv
  +	exit 0 ;;
  +    DS/*:UNIX_System_V:*:*)
  +	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
  +	exit 0 ;;
  +    *:Plan9:*:*)
  +	# "uname -m" is not consistent, so use $cputype instead. 386
  +	# is converted to i386 for consistency with other x86
  +	# operating systems.
  +	if test "$cputype" = "386"; then
  +	    UNAME_MACHINE=i386
  +	else
  +	    UNAME_MACHINE="$cputype"
  +	fi
  +	echo ${UNAME_MACHINE}-unknown-plan9
  +	exit 0 ;;
  +    i*86:OS/2:*:*)
  +	# If we were able to find `uname', then EMX Unix compatibility
  +	# is probably installed.
  +	echo ${UNAME_MACHINE}-pc-os2-emx
  +	exit 0 ;;
  +    *:TOPS-10:*:*)
  +	echo pdp10-unknown-tops10
  +	exit 0 ;;
  +    *:TENEX:*:*)
  +	echo pdp10-unknown-tenex
  +	exit 0 ;;
  +    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
  +	echo pdp10-dec-tops20
  +	exit 0 ;;
  +    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
  +	echo pdp10-xkl-tops20
  +	exit 0 ;;
  +    *:TOPS-20:*:*)
  +	echo pdp10-unknown-tops20
  +	exit 0 ;;
  +    *:ITS:*:*)
  +	echo pdp10-unknown-its
  +	exit 0 ;;
   esac
   
   #echo '(No uname command or uname output not recognized.)' 1>&2
  @@ -930,12 +1263,25 @@
   #endif
   
   #if defined (vax)
  -#if !defined (ultrix)
  -  printf ("vax-dec-bsd\n"); exit (0);
  -#else
  -  printf ("vax-dec-ultrix\n"); exit (0);
  +# if !defined (ultrix)
  +#  include <sys/param.h>
  +#  if defined (BSD)
  +#   if BSD == 43
  +      printf ("vax-dec-bsd4.3\n"); exit (0);
  +#   else
  +#    if BSD == 199006
  +      printf ("vax-dec-bsd4.3reno\n"); exit (0);
  +#    else
  +      printf ("vax-dec-bsd\n"); exit (0);
  +#    endif
  +#   endif
  +#  else
  +    printf ("vax-dec-bsd\n"); exit (0);
  +#  endif
  +# else
  +    printf ("vax-dec-ultrix\n"); exit (0);
  +# endif
   #endif
  -#endif
   
   #if defined (alliant) && defined (i860)
     printf ("i860-alliant-bsd\n"); exit (0);
  @@ -945,7 +1291,7 @@
   }
   EOF
   
  -$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm $dummy.c $dummy && exit 0
  +$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0
   rm -f $dummy.c $dummy
   
   # Apollos put the system type in the environment.
  @@ -977,7 +1323,49 @@
   	exit 0 ;;
       esac
   fi
  +
  +cat >&2 <<EOF
  +$0: unable to guess system type
   
  -#echo '(Unable to guess system type)' 1>&2
  +This script, last modified $timestamp, has failed to recognize
  +the operating system you are using. It is advised that you
  +download the most up to date version of the config scripts from
  +
  +    ftp://ftp.gnu.org/pub/gnu/config/
  +
  +If the version you run ($0) is already up to date, please
  +send the following data and any information you think might be
  +pertinent to <config-patches@gnu.org> in order to provide the needed
  +information to handle your system.
  +
  +config.guess timestamp = $timestamp
  +
  +uname -m = `(uname -m) 2>/dev/null || echo unknown`
  +uname -r = `(uname -r) 2>/dev/null || echo unknown`
  +uname -s = `(uname -s) 2>/dev/null || echo unknown`
  +uname -v = `(uname -v) 2>/dev/null || echo unknown`
  +
  +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
  +/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
  +
  +hostinfo               = `(hostinfo) 2>/dev/null`
  +/bin/universe          = `(/bin/universe) 2>/dev/null`
  +/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
  +/bin/arch              = `(/bin/arch) 2>/dev/null`
  +/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
  +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
  +
  +UNAME_MACHINE = ${UNAME_MACHINE}
  +UNAME_RELEASE = ${UNAME_RELEASE}
  +UNAME_SYSTEM  = ${UNAME_SYSTEM}
  +UNAME_VERSION = ${UNAME_VERSION}
  +EOF
   
   exit 1
  +
  +# Local variables:
  +# eval: (add-hook 'write-file-hooks 'time-stamp)
  +# time-stamp-start: "timestamp='"
  +# time-stamp-format: "%:y-%02m-%02d"
  +# time-stamp-end: "'"
  +# End:
  Index: ossp-pkg/str/config.sub
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 config.sub
  --- ossp-pkg/str/config.sub	1999/12/26 14:56:25	1.1
  +++ ossp-pkg/str/config.sub	2001/08/16 12:16:52	1.2
  @@ -1,6 +1,10 @@
   #! /bin/sh
  -# Configuration validation subroutine script, version 1.1.
  -#   Copyright (C) 1991, 92-97, 1998, 1999 Free Software Foundation, Inc.
  +# Configuration validation subroutine script.
  +#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
  +#   Free Software Foundation, Inc.
  +
  +timestamp='2001-04-20'
  +
   # This file is (in principle) common to ALL GNU software.
   # The presence of a machine in this file suggests that SOME GNU software
   # can handle that machine.  It does not imply ALL GNU software can.
  @@ -25,6 +29,8 @@
   # configuration script generated by Autoconf, you may include it under
   # the same distribution terms that you use for the rest of that program.
   
  +# Please send patches to <config-patches@gnu.org>.
  +#
   # Configuration subroutine to validate and canonicalize a configuration type.
   # Supply the specified configuration type as an argument.
   # If it is invalid, we print an error message on stderr and exit with code 1.
  @@ -45,30 +51,73 @@
   #	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
   # It is wrong to echo any other type of specification.
   
  -if [ x$1 = x ]
  -then
  -	echo Configuration name missing. 1>&2
  -	echo "Usage: $0 CPU-MFR-OPSYS" 1>&2
  -	echo "or     $0 ALIAS" 1>&2
  -	echo where ALIAS is a recognized configuration type. 1>&2
  -	exit 1
  -fi
  +me=`echo "$0" | sed -e 's,.*/,,'`
   
  -# First pass through any local machine types.
  -case $1 in
  -	*local*)
  -		echo $1
  -		exit 0
  -		;;
  -	*)
  -	;;
  +usage="\
  +Usage: $0 [OPTION] CPU-MFR-OPSYS
  +       $0 [OPTION] ALIAS
  +
  +Canonicalize a configuration name.
  +
  +Operation modes:
  +  -h, --help         print this help, then exit
  +  -t, --time-stamp   print date of last modification, then exit
  +  -v, --version      print version number, then exit
  +
  +Report bugs and patches to <config-patches@gnu.org>."
  +
  +version="\
  +GNU config.sub ($timestamp)
  +
  +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
  +Free Software Foundation, Inc.
  +
  +This is free software; see the source for copying conditions.  There is NO
  +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
  +
  +help="
  +Try \`$me --help' for more information."
  +
  +# Parse command line
  +while test $# -gt 0 ; do
  +  case $1 in
  +    --time-stamp | --time* | -t )
  +       echo "$timestamp" ; exit 0 ;;
  +    --version | -v )
  +       echo "$version" ; exit 0 ;;
  +    --help | --h* | -h )
  +       echo "$usage"; exit 0 ;;
  +    -- )     # Stop option processing
  +       shift; break ;;
  +    - )	# Use stdin as input.
  +       break ;;
  +    -* )
  +       echo "$me: invalid option $1$help"
  +       exit 1 ;;
  +
  +    *local*)
  +       # First pass through any local machine types.
  +       echo $1
  +       exit 0;;
  +
  +    * )
  +       break ;;
  +  esac
  +done
  +
  +case $# in
  + 0) echo "$me: missing argument$help" >&2
  +    exit 1;;
  + 1) ;;
  + *) echo "$me: too many arguments$help" >&2
  +    exit 1;;
   esac
   
   # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
   # Here we must recognize all the valid KERNEL-OS combinations.
   maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
   case $maybe_os in
  -  linux-gnu*)
  +  nto-qnx* | linux-gnu* | storm-chaos* | os2-emx*)
       os=-$maybe_os
       basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
       ;;
  @@ -94,7 +143,7 @@
   	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
   	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
   	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
  -	-apple)
  +	-apple | -axis)
   		os=
   		basic_machine=$1
   		;;
  @@ -105,7 +154,7 @@
   	-scout)
   		;;
   	-wrs)
  -		os=vxworks
  +		os=-vxworks
   		basic_machine=$1
   		;;
   	-hiux*)
  @@ -156,33 +205,50 @@
   	-psos*)
   		os=-psos
   		;;
  +	-mint | -mint[0-9]*)
  +		basic_machine=m68k-atari
  +		os=-mint
  +		;;
   esac
   
   # Decode aliases for certain CPU-COMPANY combinations.
   case $basic_machine in
   	# Recognize the basic CPU types without company name.
   	# Some are omitted here because they have special meanings below.
  -	tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \
  -		| arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \
  +	tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc \
  +	        | arm | arme[lb] | arm[bl]e | armv[2345] | armv[345][lb] | strongarm | xscale \
  +		| pyramid | mn10200 | mn10300 | tron | a29k \
   		| 580 | i960 | h8300 \
  +		| x86 | ppcbe | mipsbe | mipsle | shbe | shle \
   		| hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \
  -		| alpha | alphaev[4-7] | alphaev56 | alphapca5[67] \
  -		| we32k | ns16k | clipper | i370 | sh | powerpc | powerpcle \
  -		| 1750a | dsp16xx | pdp11 | mips16 | mips64 | mipsel | mips64el \
  +		| hppa64 \
  +		| alpha | alphaev[4-8] | alphaev56 | alphapca5[67] \
  +		| alphaev6[78] \
  +		| we32k | ns16k | clipper | i370 | sh | sh[34] \
  +		| powerpc | powerpcle \
  +		| 1750a | dsp16xx | pdp10 | pdp11 \
  +		| mips16 | mips64 | mipsel | mips64el \
   		| mips64orion | mips64orionel | mipstx39 | mipstx39el \
   		| mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \
  -		| mips64vr5000 | miprs64vr5000el | mcore \
  -		| sparc | sparclet | sparclite | sparc64 | sparcv9 | v850 | c4x \
  -		| thumb | d10v)
  +		| mips64vr5000 | miprs64vr5000el | mcore | s390 | s390x \
  +		| sparc | sparclet | sparclite | sparc64 | sparcv9 | sparcv9b \
  +		| v850 | c4x \
  +		| thumb | d10v | d30v | fr30 | avr | openrisc | tic80 \
  +		| pj | pjl | h8500)
  +		basic_machine=$basic_machine-unknown
  +		;;
  +	m6811 | m68hc11 | m6812 | m68hc12)
  +		# Motorola 68HC11/12.
   		basic_machine=$basic_machine-unknown
  +		os=-none
   		;;
  -	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | h8500 | w65)
  +	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | w65)
   		;;
   
   	# We use `pc' rather than `unknown'
   	# because (1) that's what they normally are, and
   	# (2) the word "unknown" tends to confuse beginning users.
  -	i[34567]86)
  +	i*86 | x86_64)
   	  basic_machine=$basic_machine-pc
   	  ;;
   	# Object if more than one company name word.
  @@ -192,23 +258,30 @@
   		;;
   	# Recognize the basic CPU types with company name.
   	# FIXME: clean up the formatting here.
  -	vax-* | tahoe-* | i[34567]86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \
  -	      | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \
  +	vax-* | tahoe-* | i*86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \
  +	      | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | c[123]* \
  +	      | arm-*  | armbe-* | armle-* | armv*-* | strongarm-* | xscale-* \
   	      | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \
   	      | power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \
   	      | xmp-* | ymp-* \
  -	      | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* | hppa2.0n-* \
  -	      | alpha-* | alphaev[4-7]-* | alphaev56-* | alphapca5[67]-* \
  +	      | x86-* | ppcbe-* | mipsbe-* | mipsle-* | shbe-* | shle-* \
  +	      | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* \
  +	      | hppa2.0n-* | hppa64-* \
  +	      | alpha-* | alphaev[4-8]-* | alphaev56-* | alphapca5[67]-* \
  +	      | alphaev6[78]-* \
   	      | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \
   	      | clipper-* | orion-* \
  -	      | sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
  -	      | sparc64-* | sparcv9-* | sparc86x-* | mips16-* | mips64-* | mipsel-* \
  +	      | sparclite-* | pdp10-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
  +	      | sparc64-* | sparcv9-* | sparcv9b-* | sparc86x-* \
  +	      | mips16-* | mips64-* | mipsel-* \
   	      | mips64el-* | mips64orion-* | mips64orionel-* \
   	      | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \
   	      | mipstx39-* | mipstx39el-* | mcore-* \
  -	      | f301-* | armv*-* | t3e-* \
  +	      | f30[01]-* | f700-* | s390-* | s390x-* | sv1-* | t3e-* \
  +	      | [cjt]90-* \
   	      | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \
  -	      | thumb-* | v850-* | d30v-* | tic30-* | c30-* )
  +	      | thumb-* | v850-* | d30v-* | tic30-* | tic80-* | c30-* | fr30-* \
  +	      | bs2000-* | tic54x-* | c54x-* | x86_64-* | pj-* | pjl-*)
   		;;
   	# Recognize the various machine names and aliases which stand
   	# for a CPU type and a company and sometimes even an OS.
  @@ -245,14 +318,14 @@
   		os=-sysv
   		;;
   	amiga | amiga-*)
  -		basic_machine=m68k-cbm
  +		basic_machine=m68k-unknown
   		;;
   	amigaos | amigados)
  -		basic_machine=m68k-cbm
  +		basic_machine=m68k-unknown
   		os=-amigaos
   		;;
   	amigaunix | amix)
  -		basic_machine=m68k-cbm
  +		basic_machine=m68k-unknown
   		os=-sysv4
   		;;
   	apollo68)
  @@ -299,13 +372,16 @@
   		basic_machine=cray2-cray
   		os=-unicos
   		;;
  -	[ctj]90-cray)
  -		basic_machine=c90-cray
  +	[cjt]90)
  +		basic_machine=${basic_machine}-cray
   		os=-unicos
   		;;
   	crds | unos)
   		basic_machine=m68k-crds
   		;;
  +	cris | cris-* | etrax*)
  +		basic_machine=cris-axis
  +		;;
   	da30 | da30-*)
   		basic_machine=m68k-da30
   		;;
  @@ -353,6 +429,10 @@
   		basic_machine=tron-gmicro
   		os=-sysv
   		;;
  +	go32)
  +		basic_machine=i386-pc
  +		os=-go32
  +		;;
   	h3050r* | hiux*)
   		basic_machine=hppa1.1-hitachi
   		os=-hiuxwe2
  @@ -426,22 +506,21 @@
   		;;
   	i370-ibm* | ibm*)
   		basic_machine=i370-ibm
  -		os=-mvs
   		;;
   # I'm not sure what "Sysv32" means.  Should this be sysv3.2?
  -	i[34567]86v32)
  +	i*86v32)
   		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
   		os=-sysv32
   		;;
  -	i[34567]86v4*)
  +	i*86v4*)
   		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
   		os=-sysv4
   		;;
  -	i[34567]86v)
  +	i*86v)
   		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
   		os=-sysv
   		;;
  -	i[34567]86sol2)
  +	i*86sol2)
   		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
   		os=-solaris2
   		;;
  @@ -453,14 +532,6 @@
   		basic_machine=i386-unknown
   		os=-vsta
   		;;
  -	i386-go32 | go32)
  -		basic_machine=i386-unknown
  -		os=-go32
  -		;;
  -	i386-mingw32 | mingw32)
  -		basic_machine=i386-unknown
  -		os=-mingw32
  -		;;
   	iris | iris4d)
   		basic_machine=mips-sgi
   		case $os in
  @@ -486,10 +557,14 @@
   		basic_machine=ns32k-utek
   		os=-sysv
   		;;
  +	mingw32)
  +		basic_machine=i386-pc
  +		os=-mingw32
  +		;;
   	miniframe)
   		basic_machine=m68000-convergent
   		;;
  -	*mint | *MiNT)
  +	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
   		basic_machine=m68k-atari
   		os=-mint
   		;;
  @@ -507,14 +582,22 @@
   	mips3*)
   		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
   		;;
  +	mmix*)
  +		basic_machine=mmix-knuth
  +		os=-mmixware
  +		;;
   	monitor)
   		basic_machine=m68k-rom68k
   		os=-coff
   		;;
   	msdos)
  -		basic_machine=i386-unknown
  +		basic_machine=i386-pc
   		os=-msdos
   		;;
  +	mvs)
  +		basic_machine=i370-ibm
  +		os=-mvs
  +		;;
   	ncr3000)
   		basic_machine=i486-ncr
   		os=-sysv4
  @@ -524,7 +607,7 @@
   		os=-netbsd
   		;;
   	netwinder)
  -		basic_machine=armv4l-corel
  +		basic_machine=armv4l-rebel
   		os=-linux
   		;;
   	news | news700 | news800 | news900)
  @@ -572,9 +655,16 @@
   		basic_machine=i960-intel
   		os=-mon960
   		;;
  +	nonstopux)
  +		basic_machine=mips-compaq
  +		os=-nonstopux
  +		;;
   	np1)
   		basic_machine=np1-gould
   		;;
  +	nsr-tandem)
  +		basic_machine=nsr-tandem
  +		;;
   	op50n-* | op60c-*)
   		basic_machine=hppa1.1-oki
   		os=-proelf
  @@ -604,28 +694,28 @@
           pc532 | pc532-*)
   		basic_machine=ns32k-pc532
   		;;
  -	pentium | p5 | k5 | k6 | nexen)
  +	pentium | p5 | k5 | k6 | nexgen)
   		basic_machine=i586-pc
   		;;
  -	pentiumpro | p6 | 6x86)
  +	pentiumpro | p6 | 6x86 | athlon)
   		basic_machine=i686-pc
   		;;
   	pentiumii | pentium2)
  -		basic_machine=i786-pc
  +		basic_machine=i686-pc
   		;;
  -	pentium-* | p5-* | k5-* | k6-* | nexen-*)
  +	pentium-* | p5-* | k5-* | k6-* | nexgen-*)
   		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
   		;;
  -	pentiumpro-* | p6-* | 6x86-*)
  +	pentiumpro-* | p6-* | 6x86-* | athlon-*)
   		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
   		;;
   	pentiumii-* | pentium2-*)
  -		basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
  +		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
   		;;
   	pn)
   		basic_machine=pn-gould
   		;;
  -	power)	basic_machine=rs6000-ibm
  +	power)	basic_machine=power-ibm
   		;;
   	ppc)	basic_machine=powerpc-unknown
   	        ;;
  @@ -640,6 +730,10 @@
   	ps2)
   		basic_machine=i386-ibm
   		;;
  +	pw32)
  +		basic_machine=i586-unknown
  +		os=-pw32
  +		;;
   	rom68k)
   		basic_machine=m68k-rom68k
   		os=-coff
  @@ -719,6 +813,10 @@
   	sun386 | sun386i | roadrunner)
   		basic_machine=i386-sun
   		;;
  +	sv1)
  +		basic_machine=sv1-cray
  +		os=-unicos
  +		;;
   	symmetry)
   		basic_machine=i386-sequent
   		os=-dynix
  @@ -727,6 +825,10 @@
   		basic_machine=t3e-cray
   		os=-unicos
   		;;
  +	tic54x | c54x*)
  +		basic_machine=tic54x-unknown
  +		os=-coff
  +		;;
   	tx39)
   		basic_machine=mipstx39-unknown
   		;;
  @@ -822,13 +924,20 @@
   	vax)
   		basic_machine=vax-dec
   		;;
  +	pdp10)
  +		# there are many clones, so DEC is not a safe bet
  +		basic_machine=pdp10-unknown
  +		;;
   	pdp11)
   		basic_machine=pdp11-dec
   		;;
   	we32k)
   		basic_machine=we32k-att
  +		;;
  +	sh3 | sh4)
  +		basic_machine=sh-unknown
   		;;
  -	sparc | sparcv9)
  +	sparc | sparcv9 | sparcv9b)
   		basic_machine=sparc-sun
   		;;
           cydra)
  @@ -850,7 +959,8 @@
   		basic_machine=c4x-none
   		os=-coff
   		;;
  -	BS2000-siemens)
  +	*-unknown)
  +		# Make sure to match an already-canonicalized machine name.
   		;;
   	*)
   		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
  @@ -910,12 +1020,26 @@
   	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
   	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
   	      | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
  -	      | -interix* | -uwin* | -rhapsody* | -openstep* | -oskit*)
  +	      | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
  +	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
  +	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* | -os2*)
   	# Remember, each alternative MUST END IN *, to match a version number.
   		;;
  +	-qnx*)
  +		case $basic_machine in
  +		    x86-* | i*86-*)
  +			;;
  +		    *)
  +			os=-nto$os
  +			;;
  +		esac
  +		;;
  +	-nto*)
  +		os=-nto-qnx
  +		;;
   	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
   	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
  -	      | -macos* | -mpw* | -magic* | -mon960* | -lnews*)
  +	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
   		;;
   	-mac*)
   		os=`echo $os | sed -e 's|mac|macos|'`
  @@ -929,6 +1053,12 @@
   	-sunos6*)
   		os=`echo $os | sed -e 's|sunos6|solaris3|'`
   		;;
  +	-opened*)
  +		os=-openedition
  +		;;
  +	-wince*)
  +		os=-wince
  +		;;
   	-osfrose*)
   		os=-osfrose
   		;;
  @@ -953,6 +1083,9 @@
   	-ns2 )
   	        os=-nextstep2
   		;;
  +	-nsk*)
  +		os=-nsk
  +		;;
   	# Preserve the version number of sinix5.
   	-sinix5.*)
   		os=`echo $os | sed -e 's|sinix|sysv|'`
  @@ -987,7 +1120,7 @@
   	-xenix)
   		os=-xenix
   		;;
  -        -*mint | -*MiNT)
  +        -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
   	        os=-mint
   		;;
   	-none)
  @@ -1015,12 +1148,15 @@
   	*-acorn)
   		os=-riscix1.2
   		;;
  -	arm*-corel)
  +	arm*-rebel)
   		os=-linux
   		;;
   	arm*-semi)
   		os=-aout
   		;;
  +	pdp10-*)
  +		os=-tops20
  +		;;
           pdp11-*)
   		os=-none
   		;;
  @@ -1129,7 +1265,7 @@
   	*-masscomp)
   		os=-rtu
   		;;
  -	f301-fujitsu)
  +	f30[01]-fujitsu | f700-fujitsu)
   		os=-uxpv
   		;;
   	*-rom68k)
  @@ -1189,7 +1325,7 @@
   			-genix*)
   				vendor=ns
   				;;
  -			-mvs*)
  +			-mvs* | -opened*)
   				vendor=ibm
   				;;
   			-ptx*)
  @@ -1207,7 +1343,7 @@
   			-mpw* | -macos*)
   				vendor=apple
   				;;
  -			-*mint | -*MiNT)
  +			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
   				vendor=atari
   				;;
   		esac
  @@ -1217,3 +1353,10 @@
   
   echo $basic_machine$os
   exit 0
  +
  +# Local variables:
  +# eval: (add-hook 'write-file-hooks 'time-stamp)
  +# time-stamp-start: "timestamp='"
  +# time-stamp-format: "%:y-%02m-%02d"
  +# time-stamp-end: "'"
  +# End:
  Index: ossp-pkg/str/configure
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 configure
  --- ossp-pkg/str/configure	2001/04/28 08:18:51	1.10
  +++ ossp-pkg/str/configure	2001/08/16 12:16:52	1.11
  @@ -1,37 +1,12 @@
   #! /bin/sh
  -
  -# From configure.in Revision: 1.2 
  -
  -
  -
  -
  -
  -
  -
  -
  -
  -
  -
  -
  -
  -
  -
  -
  -
  -
  -
  -
  +# From configure.ac Revision: 1.2 .
   # Guess values for system-dependent variables and create Makefiles.
  -# Generated automatically using autoconf version 2.13 
  -# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
  +# Generated by Autoconf 2.52.
   #
  +# Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
  +# Free Software Foundation, Inc.
   # This configure script is free software; the Free Software Foundation
   # gives unlimited permission to copy, distribute and modify it.
  -
  -# Defaults:
  -ac_help=
  -ac_default_prefix=/usr/local
  -# Any additions from configure.in:
   #   configuration header
   if test ".`echo dummy $@ | grep help`" = .; then
       #   bootstrapping shtool
  @@ -46,33 +21,315 @@
   
       #   find out package version
       STR_VERSION_STR="`$ac_shtool version -l c -d long $ac_srcdir/str_version.c`"
  -    
  - 
  +
       #   friendly header ;)
       echo "Configuring ${TB}Str${TN} (String Library), Version ${TB}${STR_VERSION_STR}${TN}"
       echo "Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>"
   
       #   additionally find out hex version
       STR_VERSION_HEX="`$ac_shtool version -l c -d hex $ac_srcdir/str_version.c`"
  -    
  +
  +fi
  +
  +# Find the correct PATH separator.  Usually this is `:', but
  +# DJGPP uses `;' like DOS.
  +if test "X${PATH_SEPARATOR+set}" != Xset; then
  +  UNAME=${UNAME-`uname 2>/dev/null`}
  +  case X$UNAME in
  +    *-DOS) lt_cv_sys_path_separator=';' ;;
  +    *)     lt_cv_sys_path_separator=':' ;;
  +  esac
  +fi
  +
  +# Check that we are running under the correct shell.
  +SHELL=${CONFIG_SHELL-/bin/sh}
  +
  +case X$ECHO in
  +X*--fallback-echo)
  +  # Remove one level of quotation (which was required for Make).
  +  ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','`
  +  ;;
  +esac
  +
  +echo=${ECHO-echo}
  +if test "X$1" = X--no-reexec; then
  +  # Discard the --no-reexec flag, and continue.
  +  shift
  +elif test "X$1" = X--fallback-echo; then
  +  # Avoid inline document here, it may be left over
  +  :
  +elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
  +  # Yippee, $echo works!
  +  :
  +else
  +  # Restart under the correct shell.
  +  exec $SHELL "$0" --no-reexec ${1+"$@"}
  +fi
  +
  +if test "X$1" = X--fallback-echo; then
  +  # used as fallback echo
  +  shift
  +  cat <<EOF
  +
  +EOF
  +  exit 0
  +fi
  +
  +# The HP-UX ksh and POSIX shell print the target directory to stdout
  +# if CDPATH is set.
  +if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
  +
  +if test -z "$ECHO"; then
  +if test "X${echo_test_string+set}" != Xset; then
  +# find a string as large as possible, as long as the shell can cope with it
  +  for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
  +    # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
  +    if (echo_test_string="`eval $cmd`") 2>/dev/null &&
  +       echo_test_string="`eval $cmd`" &&
  +       (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
  +    then
  +      break
  +    fi
  +  done
  +fi
  +
  +if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
  +   echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
  +   test "X$echo_testing_string" = "X$echo_test_string"; then
  +  :
  +else
  +  # The Solaris, AIX, and Digital Unix default echo programs unquote
  +  # backslashes.  This makes it impossible to quote backslashes using
  +  #   echo "$something" | sed 's/\\/\\\\/g'
  +  #
  +  # So, first we look for a working echo in the user's PATH.
  +
  +  IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
  +  for dir in $PATH /usr/ucb; do
  +    if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
  +       test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
  +       echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
  +       test "X$echo_testing_string" = "X$echo_test_string"; then
  +      echo="$dir/echo"
  +      break
  +    fi
  +  done
  +  IFS="$save_ifs"
  +
  +  if test "X$echo" = Xecho; then
  +    # We didn't find a better echo, so look for alternatives.
  +    if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
  +       echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
  +       test "X$echo_testing_string" = "X$echo_test_string"; then
  +      # This shell has a builtin print -r that does the trick.
  +      echo='print -r'
  +    elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
  +	 test "X$CONFIG_SHELL" != X/bin/ksh; then
  +      # If we have ksh, try running configure again with it.
  +      ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
  +      export ORIGINAL_CONFIG_SHELL
  +      CONFIG_SHELL=/bin/ksh
  +      export CONFIG_SHELL
  +      exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
  +    else
  +      # Try using printf.
  +      echo='printf %s\n'
  +      if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
  +	 echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
  +	 test "X$echo_testing_string" = "X$echo_test_string"; then
  +	# Cool, printf works
  +	:
  +      elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
  +	   test "X$echo_testing_string" = 'X\t' &&
  +	   echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
  +	   test "X$echo_testing_string" = "X$echo_test_string"; then
  +	CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
  +	export CONFIG_SHELL
  +	SHELL="$CONFIG_SHELL"
  +	export SHELL
  +	echo="$CONFIG_SHELL $0 --fallback-echo"
  +      elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
  +	   test "X$echo_testing_string" = 'X\t' &&
  +	   echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
  +	   test "X$echo_testing_string" = "X$echo_test_string"; then
  +	echo="$CONFIG_SHELL $0 --fallback-echo"
  +      else
  +	# maybe with a smaller string...
  +	prev=:
  +
  +	for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
  +	  if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
  +	  then
  +	    break
  +	  fi
  +	  prev="$cmd"
  +	done
  +
  +	if test "$prev" != 'sed 50q "$0"'; then
  +	  echo_test_string=`eval $prev`
  +	  export echo_test_string
  +	  exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
  +	else
  +	  # Oops.  We lost completely, so just stick with echo.
  +	  echo=echo
  +	fi
  +      fi
  +    fi
  +  fi
  +fi
  +fi
  +
  +# Copy echo and quote the copy suitably for passing to libtool from
  +# the Makefile, instead of quoting the original, which is used later.
  +ECHO=$echo
  +if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
  +   ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
  +fi
  +
  +# Avoid depending upon Character Ranges.
  +as_cr_letters='abcdefghijklmnopqrstuvwxyz'
  +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  +as_cr_Letters=$as_cr_letters$as_cr_LETTERS
  +as_cr_digits='0123456789'
  +as_cr_alnum=$as_cr_Letters$as_cr_digits
  +
  +# Sed expression to map a string onto a valid variable name.
  +as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
  +
  +# Sed expression to map a string onto a valid CPP name.
  +as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g"
  +
  +# Be Bourne compatible
  +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
  +  emulate sh
  +  NULLCMD=:
  +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
  +  set -o posix
  +fi
  +
  +# Name of the executable.
  +as_me=`echo "$0" |sed 's,.*[\\/],,'`
  +
  +if expr a : '\(a\)' >/dev/null 2>&1; then
  +  as_expr=expr
  +else
  +  as_expr=false
  +fi
  +
  +rm -f conf$$ conf$$.exe conf$$.file
  +echo >conf$$.file
  +if ln -s conf$$.file conf$$ 2>/dev/null; then
  +  # We could just check for DJGPP; but this test a) works b) is more generic
  +  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
  +  if test -f conf$$.exe; then
  +    # Don't use ln at all; we don't have any links
  +    as_ln_s='cp -p'
  +  else
  +    as_ln_s='ln -s'
  +  fi
  +elif ln conf$$.file conf$$ 2>/dev/null; then
  +  as_ln_s=ln
  +else
  +  as_ln_s='cp -p'
  +fi
  +rm -f conf$$ conf$$.exe conf$$.file
  +
  +as_executable_p="test -f"
  +
  +# Support unset when possible.
  +if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
  +  as_unset=unset
  +else
  +  as_unset=false
   fi
  +
  +# NLS nuisances.
  +$as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; }
  +$as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; }
  +$as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; }
  +$as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; }
  +$as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; }
  +$as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; }
  +$as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; }
  +$as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; }
  +
  +# IFS
  +# We need space, tab and new line, in precisely that order.
  +as_nl='
  +'
  +IFS=" 	$as_nl"
  +
  +# CDPATH.
  +$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; }
  +
  +# Name of the host.
  +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
  +# so uname gets run too.
  +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
  +
  +exec 6>&1
  +
  +#
  +# Initializations.
  +#
  +ac_default_prefix=/usr/local
  +cross_compiling=no
  +subdirs=
  +MFLAGS= MAKEFLAGS=
  +SHELL=${CONFIG_SHELL-/bin/sh}
  +
  +# Maximum number of lines to put in a shell here document.
  +# This variable seems obsolete.  It should probably be removed, and
  +# only ac_max_sed_lines should be used.
  +: ${ac_max_here_lines=38}
  +
  +ac_unique_file="README"
   ac_default_prefix=/usr/local
  -ac_help="$ac_help
  -  --enable-debug          build for debugging (default=no)"
  -ac_help="$ac_help
  -  --enable-static         build static libraries (default=yes)"
  -ac_help="$ac_help
  -  --enable-shared         build shared libraries (default=yes)"
  +# Factoring default headers for most tests.
  +ac_includes_default="\
  +#include <stdio.h>
  +#if HAVE_SYS_TYPES_H
  +# include <sys/types.h>
  +#endif
  +#if HAVE_SYS_STAT_H
  +# include <sys/stat.h>
  +#endif
  +#if STDC_HEADERS
  +# include <stdlib.h>
  +# include <stddef.h>
  +#else
  +# if HAVE_STDLIB_H
  +#  include <stdlib.h>
  +# endif
  +#endif
  +#if HAVE_STRING_H
  +# if !STDC_HEADERS && HAVE_MEMORY_H
  +#  include <memory.h>
  +# endif
  +# include <string.h>
  +#endif
  +#if HAVE_STRINGS_H
  +# include <strings.h>
  +#endif
  +#if HAVE_INTTYPES_H
  +# include <inttypes.h>
  +#else
  +# if HAVE_STDINT_H
  +#  include <stdint.h>
  +# endif
  +#endif
  +#if HAVE_UNISTD_H
  +# include <unistd.h>
  +#endif"
   
   # Initialize some variables set by options.
  +ac_init_help=
  +ac_init_version=false
   # The variables have the same names as the options, with
   # dashes changed to underlines.
  -build=NONE
  -cache_file=./config.cache
  +cache_file=/dev/null
   exec_prefix=NONE
  -host=NONE
   no_create=
  -nonopt=NONE
   no_recursion=
   prefix=NONE
   program_prefix=NONE
  @@ -81,10 +338,15 @@
   silent=
   site=
   srcdir=
  -target=NONE
   verbose=
   x_includes=NONE
   x_libraries=NONE
  +
  +# Installation directory options.
  +# These are left unexpanded so users can "make install exec_prefix=/foo"
  +# and all the variables that are supposed to be based on exec_prefix
  +# by default will actually change.
  +# Use braces instead of parens because sh, perl, etc. also accept them.
   bindir='${exec_prefix}/bin'
   sbindir='${exec_prefix}/sbin'
   libexecdir='${exec_prefix}/libexec'
  @@ -98,17 +360,16 @@
   infodir='${prefix}/info'
   mandir='${prefix}/man'
   
  -# Initialize some other variables.
  -subdirs=
  -MFLAGS= MAKEFLAGS=
  -SHELL=${CONFIG_SHELL-/bin/sh}
  -# Maximum number of lines to put in a shell here document.
  -ac_max_here_lines=12
  +# Identity of this package.
  +PACKAGE_NAME=
  +PACKAGE_TARNAME=
  +PACKAGE_VERSION=
  +PACKAGE_STRING=
  +PACKAGE_BUGREPORT=
   
   ac_prev=
   for ac_option
   do
  -
     # If the previous option needs an argument, assign it.
     if test -n "$ac_prev"; then
       eval "$ac_prev=\$ac_option"
  @@ -116,59 +377,59 @@
       continue
     fi
   
  -  case "$ac_option" in
  -  -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
  -  *) ac_optarg= ;;
  -  esac
  +  ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
   
     # Accept the important Cygnus configure options, so we can diagnose typos.
   
  -  case "$ac_option" in
  +  case $ac_option in
   
     -bindir | --bindir | --bindi | --bind | --bin | --bi)
       ac_prev=bindir ;;
     -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
  -    bindir="$ac_optarg" ;;
  +    bindir=$ac_optarg ;;
   
     -build | --build | --buil | --bui | --bu)
  -    ac_prev=build ;;
  +    ac_prev=build_alias ;;
     -build=* | --build=* | --buil=* | --bui=* | --bu=*)
  -    build="$ac_optarg" ;;
  +    build_alias=$ac_optarg ;;
   
     -cache-file | --cache-file | --cache-fil | --cache-fi \
     | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
       ac_prev=cache_file ;;
     -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
     | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
  -    cache_file="$ac_optarg" ;;
  +    cache_file=$ac_optarg ;;
   
  +  --config-cache | -C)
  +    cache_file=config.cache ;;
  +
     -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
       ac_prev=datadir ;;
     -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
     | --da=*)
  -    datadir="$ac_optarg" ;;
  +    datadir=$ac_optarg ;;
   
     -disable-* | --disable-*)
  -    ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
  +    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
       # Reject names that are not valid shell variable names.
  -    if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
  -      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
  -    fi
  -    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
  -    eval "enable_${ac_feature}=no" ;;
  +    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
  +      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
  +   { (exit 1); exit 1; }; }
  +    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
  +    eval "enable_$ac_feature=no" ;;
   
     -enable-* | --enable-*)
  -    ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
  +    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
       # Reject names that are not valid shell variable names.
  -    if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
  -      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
  -    fi
  -    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
  -    case "$ac_option" in
  -      *=*) ;;
  +    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
  +      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
  +   { (exit 1); exit 1; }; }
  +    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
  +    case $ac_option in
  +      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
         *) ac_optarg=yes ;;
       esac
  -    eval "enable_${ac_feature}='$ac_optarg'" ;;
  +    eval "enable_$ac_feature='$ac_optarg'" ;;
   
     -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
     | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
  @@ -177,95 +438,47 @@
     -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
     | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
     | --exec=* | --exe=* | --ex=*)
  -    exec_prefix="$ac_optarg" ;;
  +    exec_prefix=$ac_optarg ;;
   
     -gas | --gas | --ga | --g)
       # Obsolete; use --with-gas.
       with_gas=yes ;;
   
  -  -help | --help | --hel | --he)
  -    # Omit some internal or obsolete options to make the list less imposing.
  -    # This message is too long to be a string in the A/UX 3.1 sh.
  -    cat << EOF
  -Usage: configure [options] [host]
  -Options: [defaults in brackets after descriptions]
  -Configuration:
  -  --cache-file=FILE       cache test results in FILE
  -  --help                  print this message
  -  --no-create             do not create output files
  -  --quiet, --silent       do not print \`checking...' messages
  -  --version               print the version of autoconf that created configure
  -Directory and file names:
  -  --prefix=PREFIX         install architecture-independent files in PREFIX
  -                          [$ac_default_prefix]
  -  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
  -                          [same as prefix]
  -  --bindir=DIR            user executables in DIR [EPREFIX/bin]
  -  --sbindir=DIR           system admin executables in DIR [EPREFIX/sbin]
  -  --libexecdir=DIR        program executables in DIR [EPREFIX/libexec]
  -  --datadir=DIR           read-only architecture-independent data in DIR
  -                          [PREFIX/share]
  -  --sysconfdir=DIR        read-only single-machine data in DIR [PREFIX/etc]
  -  --sharedstatedir=DIR    modifiable architecture-independent data in DIR
  -                          [PREFIX/com]
  -  --localstatedir=DIR     modifiable single-machine data in DIR [PREFIX/var]
  -  --libdir=DIR            object code libraries in DIR [EPREFIX/lib]
  -  --includedir=DIR        C header files in DIR [PREFIX/include]
  -  --oldincludedir=DIR     C header files for non-gcc in DIR [/usr/include]
  -  --infodir=DIR           info documentation in DIR [PREFIX/info]
  -  --mandir=DIR            man documentation in DIR [PREFIX/man]
  -  --srcdir=DIR            find the sources in DIR [configure dir or ..]
  -  --program-prefix=PREFIX prepend PREFIX to installed program names
  -  --program-suffix=SUFFIX append SUFFIX to installed program names
  -  --program-transform-name=PROGRAM
  -                          run sed PROGRAM on installed program names
  -EOF
  -    cat << EOF
  -Host type:
  -  --build=BUILD           configure for building on BUILD [BUILD=HOST]
  -  --host=HOST             configure for HOST [guessed]
  -  --target=TARGET         configure for TARGET [TARGET=HOST]
  -Features and packages:
  -  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
  -  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
  -  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
  -  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
  -  --x-includes=DIR        X include files are in DIR
  -  --x-libraries=DIR       X library files are in DIR
  -EOF
  -    if test -n "$ac_help"; then
  -      echo "--enable and --with options recognized:$ac_help"
  -    fi
  -    exit 0 ;;
  +  -help | --help | --hel | --he | -h)
  +    ac_init_help=long ;;
  +  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
  +    ac_init_help=recursive ;;
  +  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
  +    ac_init_help=short ;;
   
     -host | --host | --hos | --ho)
  -    ac_prev=host ;;
  +    ac_prev=host_alias ;;
     -host=* | --host=* | --hos=* | --ho=*)
  -    host="$ac_optarg" ;;
  +    host_alias=$ac_optarg ;;
   
     -includedir | --includedir | --includedi | --included | --include \
     | --includ | --inclu | --incl | --inc)
       ac_prev=includedir ;;
     -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
     | --includ=* | --inclu=* | --incl=* | --inc=*)
  -    includedir="$ac_optarg" ;;
  +    includedir=$ac_optarg ;;
   
     -infodir | --infodir | --infodi | --infod | --info | --inf)
       ac_prev=infodir ;;
     -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
  -    infodir="$ac_optarg" ;;
  +    infodir=$ac_optarg ;;
   
     -libdir | --libdir | --libdi | --libd)
       ac_prev=libdir ;;
     -libdir=* | --libdir=* | --libdi=* | --libd=*)
  -    libdir="$ac_optarg" ;;
  +    libdir=$ac_optarg ;;
   
     -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
     | --libexe | --libex | --libe)
       ac_prev=libexecdir ;;
     -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
     | --libexe=* | --libex=* | --libe=*)
  -    libexecdir="$ac_optarg" ;;
  +    libexecdir=$ac_optarg ;;
   
     -localstatedir | --localstatedir | --localstatedi | --localstated \
     | --localstate | --localstat | --localsta | --localst \
  @@ -274,12 +487,12 @@
     -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
     | --localstate=* | --localstat=* | --localsta=* | --localst=* \
     | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
  -    localstatedir="$ac_optarg" ;;
  +    localstatedir=$ac_optarg ;;
   
     -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
       ac_prev=mandir ;;
     -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
  -    mandir="$ac_optarg" ;;
  +    mandir=$ac_optarg ;;
   
     -nfp | --nfp | --nf)
       # Obsolete; use --without-fp.
  @@ -300,26 +513,26 @@
     -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
     | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
     | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
  -    oldincludedir="$ac_optarg" ;;
  +    oldincludedir=$ac_optarg ;;
   
     -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
       ac_prev=prefix ;;
     -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
  -    prefix="$ac_optarg" ;;
  +    prefix=$ac_optarg ;;
   
     -program-prefix | --program-prefix | --program-prefi | --program-pref \
     | --program-pre | --program-pr | --program-p)
       ac_prev=program_prefix ;;
     -program-prefix=* | --program-prefix=* | --program-prefi=* \
     | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
  -    program_prefix="$ac_optarg" ;;
  +    program_prefix=$ac_optarg ;;
   
     -program-suffix | --program-suffix | --program-suffi | --program-suff \
     | --program-suf | --program-su | --program-s)
       ac_prev=program_suffix ;;
     -program-suffix=* | --program-suffix=* | --program-suffi=* \
     | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
  -    program_suffix="$ac_optarg" ;;
  +    program_suffix=$ac_optarg ;;
   
     -program-transform-name | --program-transform-name \
     | --program-transform-nam | --program-transform-na \
  @@ -336,7 +549,7 @@
     | --program-transfo=* | --program-transf=* \
     | --program-trans=* | --program-tran=* \
     | --progr-tra=* | --program-tr=* | --program-t=*)
  -    program_transform_name="$ac_optarg" ;;
  +    program_transform_name=$ac_optarg ;;
   
     -q | -quiet | --quiet | --quie | --qui | --qu | --q \
     | -silent | --silent | --silen | --sile | --sil)
  @@ -346,7 +559,7 @@
       ac_prev=sbindir ;;
     -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
     | --sbi=* | --sb=*)
  -    sbindir="$ac_optarg" ;;
  +    sbindir=$ac_optarg ;;
   
     -sharedstatedir | --sharedstatedir | --sharedstatedi \
     | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
  @@ -357,58 +570,57 @@
     | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
     | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
     | --sha=* | --sh=*)
  -    sharedstatedir="$ac_optarg" ;;
  +    sharedstatedir=$ac_optarg ;;
   
     -site | --site | --sit)
       ac_prev=site ;;
     -site=* | --site=* | --sit=*)
  -    site="$ac_optarg" ;;
  +    site=$ac_optarg ;;
   
     -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
       ac_prev=srcdir ;;
     -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
  -    srcdir="$ac_optarg" ;;
  +    srcdir=$ac_optarg ;;
   
     -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
     | --syscon | --sysco | --sysc | --sys | --sy)
       ac_prev=sysconfdir ;;
     -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
     | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
  -    sysconfdir="$ac_optarg" ;;
  +    sysconfdir=$ac_optarg ;;
   
     -target | --target | --targe | --targ | --tar | --ta | --t)
  -    ac_prev=target ;;
  +    ac_prev=target_alias ;;
     -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
  -    target="$ac_optarg" ;;
  +    target_alias=$ac_optarg ;;
   
     -v | -verbose | --verbose | --verbos | --verbo | --verb)
       verbose=yes ;;
   
  -  -version | --version | --versio | --versi | --vers)
  -    echo "configure generated by autoconf version 2.13"
  -    exit 0 ;;
  +  -version | --version | --versio | --versi | --vers | -V)
  +    ac_init_version=: ;;
   
     -with-* | --with-*)
  -    ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
  +    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
       # Reject names that are not valid shell variable names.
  -    if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
  -      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
  -    fi
  +    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
  +      { echo "$as_me: error: invalid package name: $ac_package" >&2
  +   { (exit 1); exit 1; }; }
       ac_package=`echo $ac_package| sed 's/-/_/g'`
  -    case "$ac_option" in
  -      *=*) ;;
  +    case $ac_option in
  +      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
         *) ac_optarg=yes ;;
       esac
  -    eval "with_${ac_package}='$ac_optarg'" ;;
  +    eval "with_$ac_package='$ac_optarg'" ;;
   
     -without-* | --without-*)
  -    ac_package=`echo $ac_option|sed -e 's/-*without-//'`
  +    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
       # Reject names that are not valid shell variable names.
  -    if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
  -      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
  -    fi
  -    ac_package=`echo $ac_package| sed 's/-/_/g'`
  -    eval "with_${ac_package}=no" ;;
  +    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
  +      { echo "$as_me: error: invalid package name: $ac_package" >&2
  +   { (exit 1); exit 1; }; }
  +    ac_package=`echo $ac_package | sed 's/-/_/g'`
  +    eval "with_$ac_package=no" ;;
   
     --x)
       # Obsolete; use --with-x.
  @@ -419,98 +631,98 @@
       ac_prev=x_includes ;;
     -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
     | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
  -    x_includes="$ac_optarg" ;;
  +    x_includes=$ac_optarg ;;
   
     -x-libraries | --x-libraries | --x-librarie | --x-librari \
     | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
       ac_prev=x_libraries ;;
     -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
     | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
  -    x_libraries="$ac_optarg" ;;
  +    x_libraries=$ac_optarg ;;
   
  -  -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
  +  -*) { echo "$as_me: error: unrecognized option: $ac_option
  +Try \`$0 --help' for more information." >&2
  +   { (exit 1); exit 1; }; }
       ;;
   
  +  *=*)
  +    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
  +    # Reject names that are not valid shell variable names.
  +    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
  +      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
  +   { (exit 1); exit 1; }; }
  +    ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
  +    eval "$ac_envvar='$ac_optarg'"
  +    export $ac_envvar ;;
  +
     *)
  -    if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
  -      echo "configure: warning: $ac_option: invalid host type" 1>&2
  -    fi
  -    if test "x$nonopt" != xNONE; then
  -      { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
  -    fi
  -    nonopt="$ac_option"
  +    # FIXME: should be removed in autoconf 3.0.
  +    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
  +    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
  +      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
  +    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
       ;;
   
     esac
   done
   
   if test -n "$ac_prev"; then
  -  { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
  +  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
  +  { echo "$as_me: error: missing argument to $ac_option" >&2
  +   { (exit 1); exit 1; }; }
   fi
   
  -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
  -
  -# File descriptor usage:
  -# 0 standard input
  -# 1 file creation
  -# 2 errors and warnings
  -# 3 some systems may open it to /dev/tty
  -# 4 used on the Kubota Titan
  -# 6 checking for... messages and results
  -# 5 compiler messages saved in config.log
  -if test "$silent" = yes; then
  -  exec 6>/dev/null
  -else
  -  exec 6>&1
  -fi
  -exec 5>./config.log
  -
  -echo "\
  -This file contains any messages produced by compilers while
  -running configure, to aid debugging if configure makes a mistake.
  -" 1>&5
  +# Be sure to have absolute paths.
  +for ac_var in exec_prefix prefix
  +do
  +  eval ac_val=$`echo $ac_var`
  +  case $ac_val in
  +    [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
  +    *)  { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2
  +   { (exit 1); exit 1; }; };;
  +  esac
  +done
   
  -# Strip out --no-create and --no-recursion so they do not pile up.
  -# Also quote any args containing shell metacharacters.
  -ac_configure_args=
  -for ac_arg
  +# Be sure to have absolute paths.
  +for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
  +              localstatedir libdir includedir oldincludedir infodir mandir
   do
  -  case "$ac_arg" in
  -  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
  -  | --no-cr | --no-c) ;;
  -  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
  -  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
  -  *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
  -  ac_configure_args="$ac_configure_args '$ac_arg'" ;;
  -  *) ac_configure_args="$ac_configure_args $ac_arg" ;;
  +  eval ac_val=$`echo $ac_var`
  +  case $ac_val in
  +    [\\/$]* | ?:[\\/]* ) ;;
  +    *)  { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2
  +   { (exit 1); exit 1; }; };;
     esac
   done
   
  -# NLS nuisances.
  -# Only set these to C if already set.  These must not be set unconditionally
  -# because not all systems understand e.g. LANG=C (notably SCO).
  -# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
  -# Non-C LC_CTYPE values break the ctype check.
  -if test "${LANG+set}"   = set; then LANG=C;   export LANG;   fi
  -if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
  -if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
  -if test "${LC_CTYPE+set}"    = set; then LC_CTYPE=C;    export LC_CTYPE;    fi
  +# There might be people who depend on the old broken behavior: `$host'
  +# used to hold the argument of --host etc.
  +build=$build_alias
  +host=$host_alias
  +target=$target_alias
  +
  +# FIXME: should be removed in autoconf 3.0.
  +if test "x$host_alias" != x; then
  +  if test "x$build_alias" = x; then
  +    cross_compiling=maybe
  +    echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
  +    If a cross compiler is detected then cross compile mode will be used." >&2
  +  elif test "x$build_alias" != "x$host_alias"; then
  +    cross_compiling=yes
  +  fi
  +fi
   
  -# confdefs.h avoids OS command line length limits that DEFS can exceed.
  -rm -rf conftest* confdefs.h
  -# AIX cpp loses on an empty file, so make sure it contains at least a newline.
  -echo > confdefs.h
  +ac_tool_prefix=
  +test -n "$host_alias" && ac_tool_prefix=$host_alias-
   
  -# A filename unique to this package, relative to the directory that
  -# configure is in, which we can look for to find out if srcdir is correct.
  -ac_unique_file=README
  +test "$silent" = yes && exec 6>/dev/null
   
   # Find the source files, if location was not specified.
   if test -z "$srcdir"; then
     ac_srcdir_defaulted=yes
     # Try the directory containing this script, then its parent.
     ac_prog=$0
  -  ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
  +  ac_confdir=`echo "$ac_prog" | sed 's%[\\/][^\\/][^\\/]*$%%'`
     test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
     srcdir=$ac_confdir
     if test ! -r $srcdir/$ac_unique_file; then
  @@ -521,13 +733,314 @@
   fi
   if test ! -r $srcdir/$ac_unique_file; then
     if test "$ac_srcdir_defaulted" = yes; then
  -    { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
  +    { echo "$as_me: error: cannot find sources in $ac_confdir or .." >&2
  +   { (exit 1); exit 1; }; }
     else
  -    { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
  +    { echo "$as_me: error: cannot find sources in $srcdir" >&2
  +   { (exit 1); exit 1; }; }
     fi
  +fi
  +srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
  +ac_env_build_alias_set=${build_alias+set}
  +ac_env_build_alias_value=$build_alias
  +ac_cv_env_build_alias_set=${build_alias+set}
  +ac_cv_env_build_alias_value=$build_alias
  +ac_env_host_alias_set=${host_alias+set}
  +ac_env_host_alias_value=$host_alias
  +ac_cv_env_host_alias_set=${host_alias+set}
  +ac_cv_env_host_alias_value=$host_alias
  +ac_env_target_alias_set=${target_alias+set}
  +ac_env_target_alias_value=$target_alias
  +ac_cv_env_target_alias_set=${target_alias+set}
  +ac_cv_env_target_alias_value=$target_alias
  +ac_env_CC_set=${CC+set}
  +ac_env_CC_value=$CC
  +ac_cv_env_CC_set=${CC+set}
  +ac_cv_env_CC_value=$CC
  +ac_env_CFLAGS_set=${CFLAGS+set}
  +ac_env_CFLAGS_value=$CFLAGS
  +ac_cv_env_CFLAGS_set=${CFLAGS+set}
  +ac_cv_env_CFLAGS_value=$CFLAGS
  +ac_env_LDFLAGS_set=${LDFLAGS+set}
  +ac_env_LDFLAGS_value=$LDFLAGS
  +ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
  +ac_cv_env_LDFLAGS_value=$LDFLAGS
  +ac_env_CPPFLAGS_set=${CPPFLAGS+set}
  +ac_env_CPPFLAGS_value=$CPPFLAGS
  +ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
  +ac_cv_env_CPPFLAGS_value=$CPPFLAGS
  +ac_env_CPP_set=${CPP+set}
  +ac_env_CPP_value=$CPP
  +ac_cv_env_CPP_set=${CPP+set}
  +ac_cv_env_CPP_value=$CPP
  +
  +#
  +# Report the --help message.
  +#
  +if test "$ac_init_help" = "long"; then
  +  # Omit some internal or obsolete options to make the list less imposing.
  +  # This message is too long to be a string in the A/UX 3.1 sh.
  +  cat <<EOF
  +\`configure' configures this package to adapt to many kinds of systems.
  +
  +Usage: $0 [OPTION]... [VAR=VALUE]...
  +
  +To assign environment variables (e.g., CC, CFLAGS...), specify them as
  +VAR=VALUE.  See below for descriptions of some of the useful variables.
  +
  +Defaults for the options are specified in brackets.
  +
  +Configuration:
  +  -h, --help              display this help and exit
  +      --help=short        display options specific to this package
  +      --help=recursive    display the short help of all the included packages
  +  -V, --version           display version information and exit
  +  -q, --quiet, --silent   do not print \`checking...' messages
  +      --cache-file=FILE   cache test results in FILE [disabled]
  +  -C, --config-cache      alias for \`--cache-file=config.cache'
  +  -n, --no-create         do not create output files
  +      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
  +
  +EOF
  +
  +  cat <<EOF
  +Installation directories:
  +  --prefix=PREFIX         install architecture-independent files in PREFIX
  +                          [$ac_default_prefix]
  +  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
  +                          [PREFIX]
  +
  +By default, \`make install' will install all the files in
  +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
  +an installation prefix other than \`$ac_default_prefix' using \`--prefix',
  +for instance \`--prefix=\$HOME'.
  +
  +For better control, use the options below.
  +
  +Fine tuning of the installation directories:
  +  --bindir=DIR           user executables [EPREFIX/bin]
  +  --sbindir=DIR          system admin executables [EPREFIX/sbin]
  +  --libexecdir=DIR       program executables [EPREFIX/libexec]
  +  --datadir=DIR          read-only architecture-independent data [PREFIX/share]
  +  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
  +  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
  +  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
  +  --libdir=DIR           object code libraries [EPREFIX/lib]
  +  --includedir=DIR       C header files [PREFIX/include]
  +  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
  +  --infodir=DIR          info documentation [PREFIX/info]
  +  --mandir=DIR           man documentation [PREFIX/man]
  +EOF
  +
  +  cat <<\EOF
  +
  +System types:
  +  --build=BUILD     configure for building on BUILD [guessed]
  +  --host=HOST       build programs to run on HOST [BUILD]
  +EOF
  +fi
  +
  +if test -n "$ac_init_help"; then
  +
  +  cat <<\EOF
  +
  +Optional Features:
  +  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
  +  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
  +  --enable-debug          build for debugging (default=no)
  +  --enable-shared=PKGS  build shared libraries default=yes
  +  --enable-static=PKGS  build static libraries default=yes
  +  --enable-fast-install=PKGS  optimize for fast installation default=yes
  +  --disable-libtool-lock  avoid locking (might break parallel builds)
  +
  +Optional Packages:
  +  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
  +  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
  +  --with-gnu-ld           assume the C compiler uses GNU ld default=no
  +  --with-pic              try to use only PIC/non-PIC objects default=use both
  +
  +Some influential environment variables:
  +  CC          C compiler command
  +  CFLAGS      C compiler flags
  +  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
  +              nonstandard directory <lib dir>
  +  CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
  +              headers in a nonstandard directory <include dir>
  +  CPP         C preprocessor
  +
  +Use these variables to override the choices made by `configure' or to help
  +it to find libraries and programs with nonstandard names/locations.
  +
  +EOF
   fi
  -srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
   
  +if test "$ac_init_help" = "recursive"; then
  +  # If there are subdirs, report their specific --help.
  +  ac_popdir=`pwd`
  +  for ac_subdir in : $ac_subdirs_all; do test "x$ac_subdir" = x: && continue
  +    cd $ac_subdir
  +    # A "../" for each directory in /$ac_subdir.
  +    ac_dots=`echo $ac_subdir |
  +             sed 's,^\./,,;s,[^/]$,&/,;s,[^/]*/,../,g'`
  +
  +    case $srcdir in
  +    .) # No --srcdir option.  We are building in place.
  +      ac_sub_srcdir=$srcdir ;;
  +    [\\/]* | ?:[\\/]* ) # Absolute path.
  +      ac_sub_srcdir=$srcdir/$ac_subdir ;;
  +    *) # Relative path.
  +      ac_sub_srcdir=$ac_dots$srcdir/$ac_subdir ;;
  +    esac
  +
  +    # Check for guested configure; otherwise get Cygnus style configure.
  +    if test -f $ac_sub_srcdir/configure.gnu; then
  +      echo
  +      $SHELL $ac_sub_srcdir/configure.gnu  --help=recursive
  +    elif test -f $ac_sub_srcdir/configure; then
  +      echo
  +      $SHELL $ac_sub_srcdir/configure  --help=recursive
  +    elif test -f $ac_sub_srcdir/configure.ac ||
  +           test -f $ac_sub_srcdir/configure.in; then
  +      echo
  +      $ac_configure --help
  +    else
  +      echo "$as_me: WARNING: no configuration information is in $ac_subdir" >&2
  +    fi
  +    cd $ac_popdir
  +  done
  +fi
  +
  +test -n "$ac_init_help" && exit 0
  +if $ac_init_version; then
  +  cat <<\EOF
  +
  +Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
  +Free Software Foundation, Inc.
  +This configure script is free software; the Free Software Foundation
  +gives unlimited permission to copy, distribute and modify it.
  +EOF
  +  exit 0
  +fi
  +exec 5>config.log
  +cat >&5 <<EOF
  +This file contains any messages produced by compilers while
  +running configure, to aid debugging if configure makes a mistake.
  +
  +It was created by $as_me, which was
  +generated by GNU Autoconf 2.52.  Invocation command line was
  +
  +  $ $0 $@
  +
  +EOF
  +{
  +cat <<_ASUNAME
  +## ---------- ##
  +## Platform.  ##
  +## ---------- ##
  +
  +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
  +uname -m = `(uname -m) 2>/dev/null || echo unknown`
  +uname -r = `(uname -r) 2>/dev/null || echo unknown`
  +uname -s = `(uname -s) 2>/dev/null || echo unknown`
  +uname -v = `(uname -v) 2>/dev/null || echo unknown`
  +
  +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
  +/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
  +
  +/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
  +/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
  +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
  +hostinfo               = `(hostinfo) 2>/dev/null               || echo unknown`
  +/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
  +/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
  +/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
  +
  +PATH = $PATH
  +
  +_ASUNAME
  +} >&5
  +
  +cat >&5 <<EOF
  +## ------------ ##
  +## Core tests.  ##
  +## ------------ ##
  +
  +EOF
  +
  +# Keep a trace of the command line.
  +# Strip out --no-create and --no-recursion so they do not pile up.
  +# Also quote any args containing shell meta-characters.
  +ac_configure_args=
  +ac_sep=
  +for ac_arg
  +do
  +  case $ac_arg in
  +  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
  +  | --no-cr | --no-c) ;;
  +  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
  +  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
  +  *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
  +    ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"`
  +    ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
  +    ac_sep=" " ;;
  +  *) ac_configure_args="$ac_configure_args$ac_sep$ac_arg"
  +     ac_sep=" " ;;
  +  esac
  +  # Get rid of the leading space.
  +done
  +
  +# When interrupted or exit'd, cleanup temporary files, and complete
  +# config.log.  We remove comments because anyway the quotes in there
  +# would cause problems or look ugly.
  +trap 'exit_status=$?
  +  # Save into config.log some information that might help in debugging.
  +  echo >&5
  +  echo "## ----------------- ##" >&5
  +  echo "## Cache variables.  ##" >&5
  +  echo "## ----------------- ##" >&5
  +  echo >&5
  +  # The following way of writing the cache mishandles newlines in values,
  +{
  +  (set) 2>&1 |
  +    case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
  +    *ac_space=\ *)
  +      sed -n \
  +        "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
  +    	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
  +      ;;
  +    *)
  +      sed -n \
  +        "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
  +      ;;
  +    esac;
  +} >&5
  +  sed "/^$/d" confdefs.h >conftest.log
  +  if test -s conftest.log; then
  +    echo >&5
  +    echo "## ------------ ##" >&5
  +    echo "## confdefs.h.  ##" >&5
  +    echo "## ------------ ##" >&5
  +    echo >&5
  +    cat conftest.log >&5
  +  fi
  +  (echo; echo) >&5
  +  test "$ac_signal" != 0 &&
  +    echo "$as_me: caught signal $ac_signal" >&5
  +  echo "$as_me: exit $exit_status" >&5
  +  rm -rf conftest* confdefs* core core.* *.core conf$$* $ac_clean_files &&
  +    exit $exit_status
  +     ' 0
  +for ac_signal in 1 2 13 15; do
  +  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
  +done
  +ac_signal=0
  +
  +# confdefs.h avoids OS command line length limits that DEFS can exceed.
  +rm -rf conftest* confdefs.h
  +# AIX cpp loses on an empty file, so make sure it contains at least a newline.
  +echo >confdefs.h
  +
  +# Let the site file select an alternate cache file if it wants to.
   # Prefer explicitly selected file to automatically selected ones.
   if test -z "$CONFIG_SITE"; then
     if test "x$prefix" != xNONE; then
  @@ -538,50 +1051,112 @@
   fi
   for ac_site_file in $CONFIG_SITE; do
     if test -r "$ac_site_file"; then
  -    echo "loading site script $ac_site_file"
  +    { echo "$as_me:1054: loading site script $ac_site_file" >&5
  +echo "$as_me: loading site script $ac_site_file" >&6;}
  +    cat "$ac_site_file" >&5
       . "$ac_site_file"
     fi
   done
   
   if test -r "$cache_file"; then
  -  echo "loading cache $cache_file"
  -  . $cache_file
  +  # Some versions of bash will fail to source /dev/null (special
  +  # files actually), so we avoid doing that.
  +  if test -f "$cache_file"; then
  +    { echo "$as_me:1065: loading cache $cache_file" >&5
  +echo "$as_me: loading cache $cache_file" >&6;}
  +    case $cache_file in
  +      [\\/]* | ?:[\\/]* ) . $cache_file;;
  +      *)                      . ./$cache_file;;
  +    esac
  +  fi
   else
  -  echo "creating cache $cache_file"
  -  > $cache_file
  +  { echo "$as_me:1073: creating cache $cache_file" >&5
  +echo "$as_me: creating cache $cache_file" >&6;}
  +  >$cache_file
  +fi
  +
  +# Check that the precious variables saved in the cache have kept the same
  +# value.
  +ac_cache_corrupted=false
  +for ac_var in `(set) 2>&1 |
  +               sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
  +  eval ac_old_set=\$ac_cv_env_${ac_var}_set
  +  eval ac_new_set=\$ac_env_${ac_var}_set
  +  eval ac_old_val="\$ac_cv_env_${ac_var}_value"
  +  eval ac_new_val="\$ac_env_${ac_var}_value"
  +  case $ac_old_set,$ac_new_set in
  +    set,)
  +      { echo "$as_me:1089: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
  +echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
  +      ac_cache_corrupted=: ;;
  +    ,set)
  +      { echo "$as_me:1093: error: \`$ac_var' was not set in the previous run" >&5
  +echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
  +      ac_cache_corrupted=: ;;
  +    ,);;
  +    *)
  +      if test "x$ac_old_val" != "x$ac_new_val"; then
  +        { echo "$as_me:1099: error: \`$ac_var' has changed since the previous run:" >&5
  +echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
  +        { echo "$as_me:1101:   former value:  $ac_old_val" >&5
  +echo "$as_me:   former value:  $ac_old_val" >&2;}
  +        { echo "$as_me:1103:   current value: $ac_new_val" >&5
  +echo "$as_me:   current value: $ac_new_val" >&2;}
  +        ac_cache_corrupted=:
  +      fi;;
  +  esac
  +  # Pass precious variables to config.status.  It doesn't matter if
  +  # we pass some twice (in addition to the command line arguments).
  +  if test "$ac_new_set" = set; then
  +    case $ac_new_val in
  +    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
  +      ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"`
  +      ac_configure_args="$ac_configure_args '$ac_arg'"
  +      ;;
  +    *) ac_configure_args="$ac_configure_args $ac_var=$ac_new_val"
  +       ;;
  +    esac
  +  fi
  +done
  +if $ac_cache_corrupted; then
  +  { echo "$as_me:1122: error: changes in the environment can compromise the build" >&5
  +echo "$as_me: error: changes in the environment can compromise the build" >&2;}
  +  { { echo "$as_me:1124: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
  +echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
  +   { (exit 1); exit 1; }; }
   fi
   
   ac_ext=c
  -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
   ac_cpp='$CPP $CPPFLAGS'
  -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
  -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
  -cross_compiling=$ac_cv_prog_cc_cross
  -
  -ac_exeext=
  -ac_objext=o
  -if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
  -  # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
  -  if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
  -    ac_n= ac_c='
  -' ac_t='	'
  -  else
  -    ac_n=-n ac_c= ac_t=
  -  fi
  +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  +ac_compiler_gnu=$ac_cv_c_compiler_gnu
  +
  +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
  +  *c*,-n*) ECHO_N= ECHO_C='
  +' ECHO_T='	' ;;
  +  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
  +  *)      ECHO_N= ECHO_C='\c' ECHO_T= ;;
  +esac
  +echo "#! $SHELL" >conftest.sh
  +echo  "exit 0"   >>conftest.sh
  +chmod +x conftest.sh
  +if { (echo "$as_me:1144: PATH=\".;.\"; conftest.sh") >&5
  +  (PATH=".;."; conftest.sh) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1147: \$? = $ac_status" >&5
  +  (exit $ac_status); }; then
  +  ac_path_separator=';'
   else
  -  ac_n= ac_c='\c' ac_t=
  +  ac_path_separator=:
   fi
  -
  -
  +PATH_SEPARATOR="$ac_path_separator"
  +rm -f conftest.sh
   
  +ac_config_headers="$ac_config_headers str_config.h"
   
  -
  -
  -
  -if test ".$host" != .NONE; then
  +if test ".$host" != .NONE && test ".$host" != .; then
       PLATFORM="$host"
  -elif test ".$nonopt" != .NONE; then
  -    PLATFORM="$nonopt"
   else
       PLATFORM=`${CONFIG_SHELL-/bin/sh} $srcdir/config.guess`
   fi
  @@ -593,241 +1168,607 @@
   
   echo ""
   
  -echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
  -echo "configure:598: checking whether ${MAKE-make} sets \${MAKE}" >&5
  -set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
  -if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +echo "$as_me:1171: checking whether ${MAKE-make} sets \${MAKE}" >&5
  +echo $ECHO_N "checking whether ${MAKE-make} sets \${MAKE}... $ECHO_C" >&6
  +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,./+-,__p_,'`
  +if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  cat > conftestmake <<\EOF
  +  cat >conftest.make <<\EOF
   all:
   	@echo 'ac_maketemp="${MAKE}"'
   EOF
   # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
  -eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=`
  +eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
   if test -n "$ac_maketemp"; then
     eval ac_cv_prog_make_${ac_make}_set=yes
   else
     eval ac_cv_prog_make_${ac_make}_set=no
   fi
  -rm -f conftestmake
  +rm -f conftest.make
   fi
   if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
  -  echo "$ac_t""yes" 1>&6
  +  echo "$as_me:1191: result: yes" >&5
  +echo "${ECHO_T}yes" >&6
     SET_MAKE=
   else
  -  echo "$ac_t""no" 1>&6
  +  echo "$as_me:1195: result: no" >&5
  +echo "${ECHO_T}no" >&6
     SET_MAKE="MAKE=${MAKE-make}"
   fi
   
  -# Extract the first word of "gcc", so it can be a program name with args.
  -set dummy gcc; ac_word=$2
  -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
  -echo "configure:627: checking for $ac_word" >&5
  -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +ac_ext=c
  +ac_cpp='$CPP $CPPFLAGS'
  +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  +ac_compiler_gnu=$ac_cv_c_compiler_gnu
  +if test -n "$ac_tool_prefix"; then
  +  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
  +set dummy ${ac_tool_prefix}gcc; ac_word=$2
  +echo "$as_me:1208: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_CC+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
     if test -n "$CC"; then
     ac_cv_prog_CC="$CC" # Let the user override the test.
   else
  -  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
  -  ac_dummy="$PATH"
  -  for ac_dir in $ac_dummy; do
  -    test -z "$ac_dir" && ac_dir=.
  -    if test -f $ac_dir/$ac_word; then
  -      ac_cv_prog_CC="gcc"
  -      break
  -    fi
  -  done
  -  IFS="$ac_save_ifs"
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +ac_cv_prog_CC="${ac_tool_prefix}gcc"
  +echo "$as_me:1223: found $ac_dir/$ac_word" >&5
  +break
  +done
  +
   fi
   fi
  -CC="$ac_cv_prog_CC"
  +CC=$ac_cv_prog_CC
   if test -n "$CC"; then
  -  echo "$ac_t""$CC" 1>&6
  +  echo "$as_me:1231: result: $CC" >&5
  +echo "${ECHO_T}$CC" >&6
   else
  -  echo "$ac_t""no" 1>&6
  +  echo "$as_me:1234: result: no" >&5
  +echo "${ECHO_T}no" >&6
   fi
   
  -if test -z "$CC"; then
  -  # Extract the first word of "cc", so it can be a program name with args.
  -set dummy cc; ac_word=$2
  -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
  -echo "configure:657: checking for $ac_word" >&5
  -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +fi
  +if test -z "$ac_cv_prog_CC"; then
  +  ac_ct_CC=$CC
  +  # Extract the first word of "gcc", so it can be a program name with args.
  +set dummy gcc; ac_word=$2
  +echo "$as_me:1243: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test -n "$ac_ct_CC"; then
  +  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
  +else
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +ac_cv_prog_ac_ct_CC="gcc"
  +echo "$as_me:1258: found $ac_dir/$ac_word" >&5
  +break
  +done
  +
  +fi
  +fi
  +ac_ct_CC=$ac_cv_prog_ac_ct_CC
  +if test -n "$ac_ct_CC"; then
  +  echo "$as_me:1266: result: $ac_ct_CC" >&5
  +echo "${ECHO_T}$ac_ct_CC" >&6
   else
  -  if test -n "$CC"; then
  +  echo "$as_me:1269: result: no" >&5
  +echo "${ECHO_T}no" >&6
  +fi
  +
  +  CC=$ac_ct_CC
  +else
  +  CC="$ac_cv_prog_CC"
  +fi
  +
  +if test -z "$CC"; then
  +  if test -n "$ac_tool_prefix"; then
  +  # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
  +set dummy ${ac_tool_prefix}cc; ac_word=$2
  +echo "$as_me:1282: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_CC+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test -n "$CC"; then
  +  ac_cv_prog_CC="$CC" # Let the user override the test.
  +else
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +ac_cv_prog_CC="${ac_tool_prefix}cc"
  +echo "$as_me:1297: found $ac_dir/$ac_word" >&5
  +break
  +done
  +
  +fi
  +fi
  +CC=$ac_cv_prog_CC
  +if test -n "$CC"; then
  +  echo "$as_me:1305: result: $CC" >&5
  +echo "${ECHO_T}$CC" >&6
  +else
  +  echo "$as_me:1308: result: no" >&5
  +echo "${ECHO_T}no" >&6
  +fi
  +
  +fi
  +if test -z "$ac_cv_prog_CC"; then
  +  ac_ct_CC=$CC
  +  # Extract the first word of "cc", so it can be a program name with args.
  +set dummy cc; ac_word=$2
  +echo "$as_me:1317: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test -n "$ac_ct_CC"; then
  +  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
  +else
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +ac_cv_prog_ac_ct_CC="cc"
  +echo "$as_me:1332: found $ac_dir/$ac_word" >&5
  +break
  +done
  +
  +fi
  +fi
  +ac_ct_CC=$ac_cv_prog_ac_ct_CC
  +if test -n "$ac_ct_CC"; then
  +  echo "$as_me:1340: result: $ac_ct_CC" >&5
  +echo "${ECHO_T}$ac_ct_CC" >&6
  +else
  +  echo "$as_me:1343: result: no" >&5
  +echo "${ECHO_T}no" >&6
  +fi
  +
  +  CC=$ac_ct_CC
  +else
  +  CC="$ac_cv_prog_CC"
  +fi
  +
  +fi
  +if test -z "$CC"; then
  +  # Extract the first word of "cc", so it can be a program name with args.
  +set dummy cc; ac_word=$2
  +echo "$as_me:1356: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_CC+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test -n "$CC"; then
     ac_cv_prog_CC="$CC" # Let the user override the test.
   else
  -  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
     ac_prog_rejected=no
  -  ac_dummy="$PATH"
  -  for ac_dir in $ac_dummy; do
  -    test -z "$ac_dir" && ac_dir=.
  -    if test -f $ac_dir/$ac_word; then
  -      if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
  -        ac_prog_rejected=yes
  -	continue
  -      fi
  -      ac_cv_prog_CC="cc"
  -      break
  -    fi
  -  done
  -  IFS="$ac_save_ifs"
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
  +  ac_prog_rejected=yes
  +  continue
  +fi
  +ac_cv_prog_CC="cc"
  +echo "$as_me:1376: found $ac_dir/$ac_word" >&5
  +break
  +done
  +
   if test $ac_prog_rejected = yes; then
     # We found a bogon in the path, so make sure we never use it.
     set dummy $ac_cv_prog_CC
     shift
  -  if test $# -gt 0; then
  +  if test $# != 0; then
       # We chose a different compiler from the bogus one.
       # However, it has the same basename, so the bogon will be chosen
       # first if we set CC to just the basename; use the full file name.
       shift
  -    set dummy "$ac_dir/$ac_word" "$@"
  +    set dummy "$ac_dir/$ac_word" ${1+"$@"}
       shift
       ac_cv_prog_CC="$@"
     fi
   fi
   fi
   fi
  -CC="$ac_cv_prog_CC"
  +CC=$ac_cv_prog_CC
   if test -n "$CC"; then
  -  echo "$ac_t""$CC" 1>&6
  +  echo "$as_me:1398: result: $CC" >&5
  +echo "${ECHO_T}$CC" >&6
   else
  -  echo "$ac_t""no" 1>&6
  +  echo "$as_me:1401: result: no" >&5
  +echo "${ECHO_T}no" >&6
   fi
   
  -  if test -z "$CC"; then
  -    case "`uname -s`" in
  -    *win32* | *WIN32*)
  -      # Extract the first word of "cl", so it can be a program name with args.
  -set dummy cl; ac_word=$2
  -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
  -echo "configure:708: checking for $ac_word" >&5
  -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +fi
  +if test -z "$CC"; then
  +  if test -n "$ac_tool_prefix"; then
  +  for ac_prog in cl
  +  do
  +    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
  +set dummy $ac_tool_prefix$ac_prog; ac_word=$2
  +echo "$as_me:1412: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_CC+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
     if test -n "$CC"; then
     ac_cv_prog_CC="$CC" # Let the user override the test.
   else
  -  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
  -  ac_dummy="$PATH"
  -  for ac_dir in $ac_dummy; do
  -    test -z "$ac_dir" && ac_dir=.
  -    if test -f $ac_dir/$ac_word; then
  -      ac_cv_prog_CC="cl"
  -      break
  -    fi
  -  done
  -  IFS="$ac_save_ifs"
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
  +echo "$as_me:1427: found $ac_dir/$ac_word" >&5
  +break
  +done
  +
   fi
   fi
  -CC="$ac_cv_prog_CC"
  +CC=$ac_cv_prog_CC
   if test -n "$CC"; then
  -  echo "$ac_t""$CC" 1>&6
  +  echo "$as_me:1435: result: $CC" >&5
  +echo "${ECHO_T}$CC" >&6
   else
  -  echo "$ac_t""no" 1>&6
  +  echo "$as_me:1438: result: no" >&5
  +echo "${ECHO_T}no" >&6
   fi
  - ;;
  -    esac
  -  fi
  -  test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
  +
  +    test -n "$CC" && break
  +  done
  +fi
  +if test -z "$CC"; then
  +  ac_ct_CC=$CC
  +  for ac_prog in cl
  +do
  +  # Extract the first word of "$ac_prog", so it can be a program name with args.
  +set dummy $ac_prog; ac_word=$2
  +echo "$as_me:1451: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test -n "$ac_ct_CC"; then
  +  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
  +else
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +ac_cv_prog_ac_ct_CC="$ac_prog"
  +echo "$as_me:1466: found $ac_dir/$ac_word" >&5
  +break
  +done
  +
  +fi
  +fi
  +ac_ct_CC=$ac_cv_prog_ac_ct_CC
  +if test -n "$ac_ct_CC"; then
  +  echo "$as_me:1474: result: $ac_ct_CC" >&5
  +echo "${ECHO_T}$ac_ct_CC" >&6
  +else
  +  echo "$as_me:1477: result: no" >&5
  +echo "${ECHO_T}no" >&6
   fi
   
  -echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
  -echo "configure:740: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
  +  test -n "$ac_ct_CC" && break
  +done
   
  -ac_ext=c
  -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
  -ac_cpp='$CPP $CPPFLAGS'
  -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
  -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
  -cross_compiling=$ac_cv_prog_cc_cross
  +  CC=$ac_ct_CC
  +fi
  +
  +fi
   
  -cat > conftest.$ac_ext << EOF
  +test -z "$CC" && { { echo "$as_me:1489: error: no acceptable cc found in \$PATH" >&5
  +echo "$as_me: error: no acceptable cc found in \$PATH" >&2;}
  +   { (exit 1); exit 1; }; }
  +
  +# Provide some information about the compiler.
  +echo "$as_me:1494:" \
  +     "checking for C compiler version" >&5
  +ac_compiler=`set X $ac_compile; echo $2`
  +{ (eval echo "$as_me:1497: \"$ac_compiler --version </dev/null >&5\"") >&5
  +  (eval $ac_compiler --version </dev/null >&5) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1500: \$? = $ac_status" >&5
  +  (exit $ac_status); }
  +{ (eval echo "$as_me:1502: \"$ac_compiler -v </dev/null >&5\"") >&5
  +  (eval $ac_compiler -v </dev/null >&5) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1505: \$? = $ac_status" >&5
  +  (exit $ac_status); }
  +{ (eval echo "$as_me:1507: \"$ac_compiler -V </dev/null >&5\"") >&5
  +  (eval $ac_compiler -V </dev/null >&5) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1510: \$? = $ac_status" >&5
  +  (exit $ac_status); }
   
  -#line 751 "configure"
  +cat >conftest.$ac_ext <<_ACEOF
  +#line 1514 "configure"
   #include "confdefs.h"
   
  -main(){return(0);}
  -EOF
  -if { (eval echo configure:756: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  -  ac_cv_prog_cc_works=yes
  -  # If we can't run a trivial program, we are probably using a cross compiler.
  -  if (./conftest; exit) 2>/dev/null; then
  -    ac_cv_prog_cc_cross=no
  +int
  +main ()
  +{
  +
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +ac_clean_files_save=$ac_clean_files
  +ac_clean_files="$ac_clean_files a.out a.exe"
  +# Try to create an executable without -o first, disregard a.out.
  +# It will help us diagnose broken compilers, and finding out an intuition
  +# of exeext.
  +echo "$as_me:1530: checking for C compiler default output" >&5
  +echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6
  +ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
  +if { (eval echo "$as_me:1533: \"$ac_link_default\"") >&5
  +  (eval $ac_link_default) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1536: \$? = $ac_status" >&5
  +  (exit $ac_status); }; then
  +  # Find the output, starting from the most likely.  This scheme is
  +# not robust to junk in `.', hence go to wildcards (a.*) only as a last
  +# resort.
  +for ac_file in `ls a.exe conftest.exe 2>/dev/null;
  +                ls a.out conftest 2>/dev/null;
  +                ls a.* conftest.* 2>/dev/null`; do
  +  case $ac_file in
  +    *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb ) ;;
  +    a.out ) # We found the default executable, but exeext='' is most
  +            # certainly right.
  +            break;;
  +    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
  +          # FIXME: I believe we export ac_cv_exeext for Libtool --akim.
  +          export ac_cv_exeext
  +          break;;
  +    * ) break;;
  +  esac
  +done
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +{ { echo "$as_me:1559: error: C compiler cannot create executables" >&5
  +echo "$as_me: error: C compiler cannot create executables" >&2;}
  +   { (exit 77); exit 77; }; }
  +fi
  +
  +ac_exeext=$ac_cv_exeext
  +echo "$as_me:1565: result: $ac_file" >&5
  +echo "${ECHO_T}$ac_file" >&6
  +
  +# Check the compiler produces executables we can run.  If not, either
  +# the compiler is broken, or we cross compile.
  +echo "$as_me:1570: checking whether the C compiler works" >&5
  +echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
  +# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
  +# If not cross compiling, check that we can run a simple program.
  +if test "$cross_compiling" != yes; then
  +  if { ac_try='./$ac_file'
  +  { (eval echo "$as_me:1576: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1579: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +    cross_compiling=no
     else
  -    ac_cv_prog_cc_cross=yes
  +    if test "$cross_compiling" = maybe; then
  +	cross_compiling=yes
  +    else
  +	{ { echo "$as_me:1586: error: cannot run C compiled programs.
  +If you meant to cross compile, use \`--host'." >&5
  +echo "$as_me: error: cannot run C compiled programs.
  +If you meant to cross compile, use \`--host'." >&2;}
  +   { (exit 1); exit 1; }; }
  +    fi
     fi
  -else
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  ac_cv_prog_cc_works=no
  -fi
  -rm -fr conftest*
  -ac_ext=c
  -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
  -ac_cpp='$CPP $CPPFLAGS'
  -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
  -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
  -cross_compiling=$ac_cv_prog_cc_cross
  -
  -echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
  -if test $ac_cv_prog_cc_works = no; then
  -  { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
   fi
  -echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
  -echo "configure:782: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
  -echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
  -cross_compiling=$ac_cv_prog_cc_cross
  +echo "$as_me:1594: result: yes" >&5
  +echo "${ECHO_T}yes" >&6
   
  -echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
  -echo "configure:787: checking whether we are using GNU C" >&5
  -if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +rm -f a.out a.exe conftest$ac_cv_exeext
  +ac_clean_files=$ac_clean_files_save
  +# Check the compiler produces executables we can run.  If not, either
  +# the compiler is broken, or we cross compile.
  +echo "$as_me:1601: checking whether we are cross compiling" >&5
  +echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
  +echo "$as_me:1603: result: $cross_compiling" >&5
  +echo "${ECHO_T}$cross_compiling" >&6
  +
  +echo "$as_me:1606: checking for executable suffix" >&5
  +echo $ECHO_N "checking for executable suffix... $ECHO_C" >&6
  +if { (eval echo "$as_me:1608: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1611: \$? = $ac_status" >&5
  +  (exit $ac_status); }; then
  +  # If both `conftest.exe' and `conftest' are `present' (well, observable)
  +# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
  +# work properly (i.e., refer to `conftest.exe'), while it won't with
  +# `rm'.
  +for ac_file in `(ls conftest.exe; ls conftest; ls conftest.*) 2>/dev/null`; do
  +  case $ac_file in
  +    *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb ) ;;
  +    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
  +          export ac_cv_exeext
  +          break;;
  +    * ) break;;
  +  esac
  +done
   else
  -  cat > conftest.c <<EOF
  -#ifdef __GNUC__
  -  yes;
  -#endif
  -EOF
  -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:796: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
  -  ac_cv_prog_gcc=yes
  +  { { echo "$as_me:1627: error: cannot compute EXEEXT: cannot compile and link" >&5
  +echo "$as_me: error: cannot compute EXEEXT: cannot compile and link" >&2;}
  +   { (exit 1); exit 1; }; }
  +fi
  +
  +rm -f conftest$ac_cv_exeext
  +echo "$as_me:1633: result: $ac_cv_exeext" >&5
  +echo "${ECHO_T}$ac_cv_exeext" >&6
  +
  +rm -f conftest.$ac_ext
  +EXEEXT=$ac_cv_exeext
  +ac_exeext=$EXEEXT
  +echo "$as_me:1639: checking for object suffix" >&5
  +echo $ECHO_N "checking for object suffix... $ECHO_C" >&6
  +if test "${ac_cv_objext+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  ac_cv_prog_gcc=no
  -fi
  -fi
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 1645 "configure"
  +#include "confdefs.h"
   
  -echo "$ac_t""$ac_cv_prog_gcc" 1>&6
  +int
  +main ()
  +{
   
  -if test $ac_cv_prog_gcc = yes; then
  -  GCC=yes
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.o conftest.obj
  +if { (eval echo "$as_me:1657: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1660: \$? = $ac_status" >&5
  +  (exit $ac_status); }; then
  +  for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
  +  case $ac_file in
  +    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb ) ;;
  +    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
  +       break;;
  +  esac
  +done
   else
  -  GCC=
  -fi
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +{ { echo "$as_me:1672: error: cannot compute OBJEXT: cannot compile" >&5
  +echo "$as_me: error: cannot compute OBJEXT: cannot compile" >&2;}
  +   { (exit 1); exit 1; }; }
  +fi
  +
  +rm -f conftest.$ac_cv_objext conftest.$ac_ext
  +fi
  +echo "$as_me:1679: result: $ac_cv_objext" >&5
  +echo "${ECHO_T}$ac_cv_objext" >&6
  +OBJEXT=$ac_cv_objext
  +ac_objext=$OBJEXT
  +echo "$as_me:1683: checking whether we are using the GNU C compiler" >&5
  +echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
  +if test "${ac_cv_c_compiler_gnu+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 1689 "configure"
  +#include "confdefs.h"
  +
  +int
  +main ()
  +{
  +#ifndef __GNUC__
  +       choke me
  +#endif
   
  -ac_test_CFLAGS="${CFLAGS+set}"
  -ac_save_CFLAGS="$CFLAGS"
  -CFLAGS=
  -echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
  -echo "configure:815: checking whether ${CC-cc} accepts -g" >&5
  -if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:1704: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1707: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:1710: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1713: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_compiler_gnu=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_compiler_gnu=no
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +ac_cv_c_compiler_gnu=$ac_compiler_gnu
  +
  +fi
  +echo "$as_me:1725: result: $ac_cv_c_compiler_gnu" >&5
  +echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
  +GCC=`test $ac_compiler_gnu = yes && echo yes`
  +ac_test_CFLAGS=${CFLAGS+set}
  +ac_save_CFLAGS=$CFLAGS
  +CFLAGS="-g"
  +echo "$as_me:1731: checking whether $CC accepts -g" >&5
  +echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
  +if test "${ac_cv_prog_cc_g+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  echo 'void f(){}' > conftest.c
  -if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 1737 "configure"
  +#include "confdefs.h"
  +
  +int
  +main ()
  +{
  +
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:1749: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1752: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:1755: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1758: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
     ac_cv_prog_cc_g=yes
   else
  -  ac_cv_prog_cc_g=no
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_prog_cc_g=no
   fi
  -rm -f conftest*
  -
  +rm -f conftest.$ac_objext conftest.$ac_ext
   fi
  -
  -echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
  +echo "$as_me:1768: result: $ac_cv_prog_cc_g" >&5
  +echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
   if test "$ac_test_CFLAGS" = set; then
  -  CFLAGS="$ac_save_CFLAGS"
  +  CFLAGS=$ac_save_CFLAGS
   elif test $ac_cv_prog_cc_g = yes; then
     if test "$GCC" = yes; then
       CFLAGS="-g -O2"
  @@ -841,91 +1782,321 @@
       CFLAGS=
     fi
   fi
  +# Some people use a C++ compiler to compile C.  Since we use `exit',
  +# in C++ we need to declare it.  In case someone uses the same compiler
  +# for both compiling C and C++ we need to have the C++ compiler decide
  +# the declaration of exit, since it's the most demanding environment.
  +cat >conftest.$ac_ext <<_ACEOF
  +#ifndef __cplusplus
  +  choke me
  +#endif
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:1795: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1798: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:1801: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1804: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  for ac_declaration in \
  +   ''\
  +   '#include <stdlib.h>' \
  +   'extern "C" void std::exit (int) throw (); using std::exit;' \
  +   'extern "C" void std::exit (int); using std::exit;' \
  +   'extern "C" void exit (int) throw ();' \
  +   'extern "C" void exit (int);' \
  +   'void exit (int);'
  +do
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 1816 "configure"
  +#include "confdefs.h"
  +#include <stdlib.h>
  +$ac_declaration
  +int
  +main ()
  +{
  +exit (42);
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:1829: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1832: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:1835: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1838: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  :
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +continue
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 1848 "configure"
  +#include "confdefs.h"
  +$ac_declaration
  +int
  +main ()
  +{
  +exit (42);
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:1860: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1863: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:1866: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1869: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  break
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +done
  +rm -f conftest*
  +if test -n "$ac_declaration"; then
  +  echo '#ifdef __cplusplus' >>confdefs.h
  +  echo $ac_declaration      >>confdefs.h
  +  echo '#endif'             >>confdefs.h
  +fi
  +
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +ac_ext=c
  +ac_cpp='$CPP $CPPFLAGS'
  +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  +ac_compiler_gnu=$ac_cv_c_compiler_gnu
   
  -echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
  -echo "configure:847: checking how to run the C preprocessor" >&5
  +ac_ext=c
  +ac_cpp='$CPP $CPPFLAGS'
  +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  +ac_compiler_gnu=$ac_cv_c_compiler_gnu
  +echo "$as_me:1901: checking how to run the C preprocessor" >&5
  +echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
   # On Suns, sometimes $CPP names a directory.
   if test -n "$CPP" && test -d "$CPP"; then
     CPP=
   fi
   if test -z "$CPP"; then
  -if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +  if test "${ac_cv_prog_CPP+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -    # This must be in double quotes, not single quotes, because CPP may get
  -  # substituted into the Makefile and "${CC-cc}" will confuse make.
  -  CPP="${CC-cc} -E"
  +      # Double quotes because CPP needs to be expanded
  +    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
  +    do
  +      ac_preproc_ok=false
  +for ac_c_preproc_warn_flag in '' yes
  +do
  +  # Use a header file that comes with gcc, so configuring glibc
  +  # with a fresh cross-compiler works.
     # On the NeXT, cc -E runs the code through the compiler's parser,
  -  # not just through cpp.
  -  cat > conftest.$ac_ext <<EOF
  -#line 862 "configure"
  +  # not just through cpp. "Syntax error" is here to catch this case.
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 1922 "configure"
   #include "confdefs.h"
   #include <assert.h>
  -Syntax Error
  -EOF
  -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  -{ (eval echo configure:868: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  -if test -z "$ac_err"; then
  +                     Syntax error
  +_ACEOF
  +if { (eval echo "$as_me:1927: \"$ac_cpp conftest.$ac_ext\"") >&5
  +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  +  ac_status=$?
  +  egrep -v '^ *\+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:1933: \$? = $ac_status" >&5
  +  (exit $ac_status); } >/dev/null; then
  +  if test -s conftest.err; then
  +    ac_cpp_err=$ac_c_preproc_warn_flag
  +  else
  +    ac_cpp_err=
  +  fi
  +else
  +  ac_cpp_err=yes
  +fi
  +if test -z "$ac_cpp_err"; then
     :
   else
  -  echo "$ac_err" >&5
  -  echo "configure: failed program was:" >&5
  +  echo "$as_me: failed program was:" >&5
     cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  CPP="${CC-cc} -E -traditional-cpp"
  -  cat > conftest.$ac_ext <<EOF
  -#line 879 "configure"
  +  # Broken: fails on valid input.
  +continue
  +fi
  +rm -f conftest.err conftest.$ac_ext
  +
  +  # OK, works on sane cases.  Now check whether non-existent headers
  +  # can be detected and how.
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 1956 "configure"
   #include "confdefs.h"
  -#include <assert.h>
  -Syntax Error
  -EOF
  -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  -{ (eval echo configure:885: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  -if test -z "$ac_err"; then
  -  :
  +#include <ac_nonexistent.h>
  +_ACEOF
  +if { (eval echo "$as_me:1960: \"$ac_cpp conftest.$ac_ext\"") >&5
  +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  +  ac_status=$?
  +  egrep -v '^ *\+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:1966: \$? = $ac_status" >&5
  +  (exit $ac_status); } >/dev/null; then
  +  if test -s conftest.err; then
  +    ac_cpp_err=$ac_c_preproc_warn_flag
  +  else
  +    ac_cpp_err=
  +  fi
  +else
  +  ac_cpp_err=yes
  +fi
  +if test -z "$ac_cpp_err"; then
  +  # Broken: success on invalid input.
  +continue
   else
  -  echo "$ac_err" >&5
  -  echo "configure: failed program was:" >&5
  +  echo "$as_me: failed program was:" >&5
     cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  CPP="${CC-cc} -nologo -E"
  -  cat > conftest.$ac_ext <<EOF
  -#line 896 "configure"
  +  # Passes both tests.
  +ac_preproc_ok=:
  +break
  +fi
  +rm -f conftest.err conftest.$ac_ext
  +
  +done
  +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
  +rm -f conftest.err conftest.$ac_ext
  +if $ac_preproc_ok; then
  +  break
  +fi
  +
  +    done
  +    ac_cv_prog_CPP=$CPP
  +
  +fi
  +  CPP=$ac_cv_prog_CPP
  +else
  +  ac_cv_prog_CPP=$CPP
  +fi
  +echo "$as_me:2003: result: $CPP" >&5
  +echo "${ECHO_T}$CPP" >&6
  +ac_preproc_ok=false
  +for ac_c_preproc_warn_flag in '' yes
  +do
  +  # Use a header file that comes with gcc, so configuring glibc
  +  # with a fresh cross-compiler works.
  +  # On the NeXT, cc -E runs the code through the compiler's parser,
  +  # not just through cpp. "Syntax error" is here to catch this case.
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 2013 "configure"
   #include "confdefs.h"
   #include <assert.h>
  -Syntax Error
  -EOF
  -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  -{ (eval echo configure:902: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  -if test -z "$ac_err"; then
  +                     Syntax error
  +_ACEOF
  +if { (eval echo "$as_me:2018: \"$ac_cpp conftest.$ac_ext\"") >&5
  +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  +  ac_status=$?
  +  egrep -v '^ *\+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:2024: \$? = $ac_status" >&5
  +  (exit $ac_status); } >/dev/null; then
  +  if test -s conftest.err; then
  +    ac_cpp_err=$ac_c_preproc_warn_flag
  +  else
  +    ac_cpp_err=
  +  fi
  +else
  +  ac_cpp_err=yes
  +fi
  +if test -z "$ac_cpp_err"; then
     :
   else
  -  echo "$ac_err" >&5
  -  echo "configure: failed program was:" >&5
  +  echo "$as_me: failed program was:" >&5
     cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  CPP=/lib/cpp
  +  # Broken: fails on valid input.
  +continue
   fi
  -rm -f conftest*
  -fi
  -rm -f conftest*
  +rm -f conftest.err conftest.$ac_ext
  +
  +  # OK, works on sane cases.  Now check whether non-existent headers
  +  # can be detected and how.
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 2047 "configure"
  +#include "confdefs.h"
  +#include <ac_nonexistent.h>
  +_ACEOF
  +if { (eval echo "$as_me:2051: \"$ac_cpp conftest.$ac_ext\"") >&5
  +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  +  ac_status=$?
  +  egrep -v '^ *\+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:2057: \$? = $ac_status" >&5
  +  (exit $ac_status); } >/dev/null; then
  +  if test -s conftest.err; then
  +    ac_cpp_err=$ac_c_preproc_warn_flag
  +  else
  +    ac_cpp_err=
  +  fi
  +else
  +  ac_cpp_err=yes
   fi
  -rm -f conftest*
  -  ac_cv_prog_CPP="$CPP"
  +if test -z "$ac_cpp_err"; then
  +  # Broken: success on invalid input.
  +continue
  +else
  +  echo "$as_me: failed program was:" >&5
  +  cat conftest.$ac_ext >&5
  +  # Passes both tests.
  +ac_preproc_ok=:
  +break
   fi
  -  CPP="$ac_cv_prog_CPP"
  +rm -f conftest.err conftest.$ac_ext
  +
  +done
  +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
  +rm -f conftest.err conftest.$ac_ext
  +if $ac_preproc_ok; then
  +  :
   else
  -  ac_cv_prog_CPP="$CPP"
  +  { { echo "$as_me:2085: error: C preprocessor \"$CPP\" fails sanity check" >&5
  +echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check" >&2;}
  +   { (exit 1); exit 1; }; }
   fi
  -echo "$ac_t""$CPP" 1>&6
  +
  +ac_ext=c
  +ac_cpp='$CPP $CPPFLAGS'
  +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  +ac_compiler_gnu=$ac_cv_c_compiler_gnu
   
   # Check whether --enable-debug or --disable-debug was given.
   if test "${enable_debug+set}" = set; then
     enableval="$enable_debug"
  -  if test ".$ac_cv_prog_gcc" = ".yes"; then
  +  if test ".$ac_cv_c_compiler_gnu" = ".yes"; then
       case "$CFLAGS" in
           *-O* ) ;;
              * ) CFLAGS="$CFLAGS -O2" ;;
  @@ -936,32 +2107,45 @@
       esac
       case "$CFLAGS" in
           *-pipe* ) ;;
  -              * ) echo $ac_n "checking whether compiler option(s) -pipe work""... $ac_c" 1>&6
  -echo "configure:941: checking whether compiler option(s) -pipe work" >&5
  -if eval "test \"`echo '$''{'ac_cv_compiler_option_pipe'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +              * ) echo "$as_me:2110: checking whether compiler option(s) -pipe work" >&5
  +echo $ECHO_N "checking whether compiler option(s) -pipe work... $ECHO_C" >&6
  +if test "${ac_cv_compiler_option_pipe+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  
  +
   SAVE_CFLAGS="$CFLAGS"
   CFLAGS="$CFLAGS -pipe"
  -cat > conftest.$ac_ext <<EOF
  -#line 949 "configure"
  +cat >conftest.$ac_ext <<_ACEOF
  +#line 2119 "configure"
   #include "confdefs.h"
   
  -int main() {
  +int
  +main ()
  +{
   
  -; return 0; }
  -EOF
  -if { (eval echo configure:956: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
  -  rm -rf conftest*
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:2131: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2134: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:2137: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2140: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
     ac_cv_compiler_option_pipe=yes
   else
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  ac_cv_compiler_option_pipe=no
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_compiler_option_pipe=no
   fi
  -rm -f conftest*
  +rm -f conftest.$ac_objext conftest.$ac_ext
   CFLAGS="$SAVE_CFLAGS"
   
   fi
  @@ -970,35 +2154,49 @@
   else
       :
   fi
  -echo "$ac_t""$ac_cv_compiler_option_pipe" 1>&6
  +echo "$as_me:2157: result: $ac_cv_compiler_option_pipe" >&5
  +echo "${ECHO_T}$ac_cv_compiler_option_pipe" >&6
    ;;
       esac
  -    echo $ac_n "checking whether compiler option(s) -ggdb3 work""... $ac_c" 1>&6
  -echo "configure:978: checking whether compiler option(s) -ggdb3 work" >&5
  -if eval "test \"`echo '$''{'ac_cv_compiler_option_ggdb3'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +    echo "$as_me:2161: checking whether compiler option(s) -ggdb3 work" >&5
  +echo $ECHO_N "checking whether compiler option(s) -ggdb3 work... $ECHO_C" >&6
  +if test "${ac_cv_compiler_option_ggdb3+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  
  +
   SAVE_CFLAGS="$CFLAGS"
   CFLAGS="$CFLAGS -ggdb3"
  -cat > conftest.$ac_ext <<EOF
  -#line 986 "configure"
  +cat >conftest.$ac_ext <<_ACEOF
  +#line 2170 "configure"
   #include "confdefs.h"
   
  -int main() {
  +int
  +main ()
  +{
   
  -; return 0; }
  -EOF
  -if { (eval echo configure:993: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
  -  rm -rf conftest*
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:2182: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2185: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:2188: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2191: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
     ac_cv_compiler_option_ggdb3=yes
   else
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  ac_cv_compiler_option_ggdb3=no
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_compiler_option_ggdb3=no
   fi
  -rm -f conftest*
  +rm -f conftest.$ac_objext conftest.$ac_ext
   CFLAGS="$SAVE_CFLAGS"
   
   fi
  @@ -1007,38 +2205,52 @@
   else
       :
   fi
  -echo "$ac_t""$ac_cv_compiler_option_ggdb3" 1>&6
  +echo "$as_me:2208: result: $ac_cv_compiler_option_ggdb3" >&5
  +echo "${ECHO_T}$ac_cv_compiler_option_ggdb3" >&6
   
       CFLAGS="$CFLAGS -pedantic"
       CFLAGS="$CFLAGS -Wall"
       WMORE="-Wshadow -Wpointer-arith -Wcast-align -Winline"
       WMORE="$WMORE -Wmissing-prototypes -Wmissing-declarations -Wnested-externs"
  -    echo $ac_n "checking whether compiler option(s) -W<xxx> work""... $ac_c" 1>&6
  -echo "configure:1018: checking whether compiler option(s) -W<xxx> work" >&5
  -if eval "test \"`echo '$''{'ac_cv_compiler_option_wmore'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +    echo "$as_me:2215: checking whether compiler option(s) -W<xxx> work" >&5
  +echo $ECHO_N "checking whether compiler option(s) -W<xxx> work... $ECHO_C" >&6
  +if test "${ac_cv_compiler_option_wmore+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  
  +
   SAVE_CFLAGS="$CFLAGS"
   CFLAGS="$CFLAGS $WMORE"
  -cat > conftest.$ac_ext <<EOF
  -#line 1026 "configure"
  +cat >conftest.$ac_ext <<_ACEOF
  +#line 2224 "configure"
   #include "confdefs.h"
   
  -int main() {
  +int
  +main ()
  +{
   
  -; return 0; }
  -EOF
  -if { (eval echo configure:1033: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
  -  rm -rf conftest*
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:2236: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2239: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:2242: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2245: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
     ac_cv_compiler_option_wmore=yes
   else
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  ac_cv_compiler_option_wmore=no
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_compiler_option_wmore=no
   fi
  -rm -f conftest*
  +rm -f conftest.$ac_objext conftest.$ac_ext
   CFLAGS="$SAVE_CFLAGS"
   
   fi
  @@ -1047,34 +2259,48 @@
   else
       :
   fi
  -echo "$ac_t""$ac_cv_compiler_option_wmore" 1>&6
  +echo "$as_me:2262: result: $ac_cv_compiler_option_wmore" >&5
  +echo "${ECHO_T}$ac_cv_compiler_option_wmore" >&6
   
  -    echo $ac_n "checking whether compiler option(s) -Wno-long-long work""... $ac_c" 1>&6
  -echo "configure:1054: checking whether compiler option(s) -Wno-long-long work" >&5
  -if eval "test \"`echo '$''{'ac_cv_compiler_option_wnolonglong'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +    echo "$as_me:2265: checking whether compiler option(s) -Wno-long-long work" >&5
  +echo $ECHO_N "checking whether compiler option(s) -Wno-long-long work... $ECHO_C" >&6
  +if test "${ac_cv_compiler_option_wnolonglong+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  
  +
   SAVE_CFLAGS="$CFLAGS"
   CFLAGS="$CFLAGS -Wno-long-long"
  -cat > conftest.$ac_ext <<EOF
  -#line 1062 "configure"
  +cat >conftest.$ac_ext <<_ACEOF
  +#line 2274 "configure"
   #include "confdefs.h"
   
  -int main() {
  +int
  +main ()
  +{
   
  -; return 0; }
  -EOF
  -if { (eval echo configure:1069: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
  -  rm -rf conftest*
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:2286: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2289: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:2292: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2295: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
     ac_cv_compiler_option_wnolonglong=yes
   else
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  ac_cv_compiler_option_wnolonglong=no
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_compiler_option_wnolonglong=no
   fi
  -rm -f conftest*
  +rm -f conftest.$ac_objext conftest.$ac_ext
   CFLAGS="$SAVE_CFLAGS"
   
   fi
  @@ -1083,7 +2309,8 @@
   else
       :
   fi
  -echo "$ac_t""$ac_cv_compiler_option_wnolonglong" 1>&6
  +echo "$as_me:2312: result: $ac_cv_compiler_option_wnolonglong" >&5
  +echo "${ECHO_T}$ac_cv_compiler_option_wnolonglong" >&6
   
   else
       case "$CFLAGS" in
  @@ -1092,42 +2319,54 @@
       esac
   fi
   msg="enabled"
  -cat >> confdefs.h <<\EOF
  +cat >>confdefs.h <<\EOF
   #define STR_DEBUG 1
   EOF
   
  -
   else
  -  
  -if test ".$ac_cv_prog_gcc" = ".yes"; then
  +
  +if test ".$ac_cv_c_compiler_gnu" = ".yes"; then
   case "$CFLAGS" in
       *-pipe* ) ;;
  -          * ) echo $ac_n "checking whether compiler option(s) -pipe work""... $ac_c" 1>&6
  -echo "configure:1107: checking whether compiler option(s) -pipe work" >&5
  -if eval "test \"`echo '$''{'ac_cv_compiler_option_pipe'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +          * ) echo "$as_me:2331: checking whether compiler option(s) -pipe work" >&5
  +echo $ECHO_N "checking whether compiler option(s) -pipe work... $ECHO_C" >&6
  +if test "${ac_cv_compiler_option_pipe+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  
  +
   SAVE_CFLAGS="$CFLAGS"
   CFLAGS="$CFLAGS -pipe"
  -cat > conftest.$ac_ext <<EOF
  -#line 1115 "configure"
  +cat >conftest.$ac_ext <<_ACEOF
  +#line 2340 "configure"
   #include "confdefs.h"
   
  -int main() {
  +int
  +main ()
  +{
   
  -; return 0; }
  -EOF
  -if { (eval echo configure:1122: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
  -  rm -rf conftest*
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:2352: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2355: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:2358: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2361: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
     ac_cv_compiler_option_pipe=yes
   else
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  ac_cv_compiler_option_pipe=no
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_compiler_option_pipe=no
   fi
  -rm -f conftest*
  +rm -f conftest.$ac_objext conftest.$ac_ext
   CFLAGS="$SAVE_CFLAGS"
   
   fi
  @@ -1136,7 +2375,8 @@
   else
       :
   fi
  -echo "$ac_t""$ac_cv_compiler_option_pipe" 1>&6
  +echo "$as_me:2378: result: $ac_cv_compiler_option_pipe" >&5
  +echo "${ECHO_T}$ac_cv_compiler_option_pipe" >&6
    ;;
   esac
   fi
  @@ -1150,838 +2390,6808 @@
   esac
   msg=disabled
   
  -fi
  -echo $ac_n "checking for compilation debug mode""... $ac_c" 1>&6
  -echo "configure:1156: checking for compilation debug mode" >&5
  -echo "$ac_t""$msg" 1>&6
  +fi; echo "$as_me:2393: checking for compilation debug mode" >&5
  +echo $ECHO_N "checking for compilation debug mode... $ECHO_C" >&6
  +echo "$as_me:2395: result: $msg" >&5
  +echo "${ECHO_T}$msg" >&6
   if test ".$msg" = .enabled; then
       enable_shared=no
   fi
   
  -# Check whether --enable-static or --disable-static was given.
  -if test "${enable_static+set}" = set; then
  -  enableval="$enable_static"
  -  enable_static="$enableval"
  -else
  -  if test ".$enable_static" = .; then
  -    enable_static=yes
  -fi
  +# libtool.m4 - Configure libtool for the host system. -*-Shell-script-*-
  +## Copyright 1996, 1997, 1998, 1999, 2000, 2001
  +## Free Software Foundation, Inc.
  +## Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
  +##
  +## This program is free software; you can redistribute it and/or modify
  +## it under the terms of the GNU General Public License as published by
  +## the Free Software Foundation; either version 2 of the License, or
  +## (at your option) any later version.
  +##
  +## This program is distributed in the hope that it will be useful, but
  +## WITHOUT ANY WARRANTY; without even the implied warranty of
  +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  +## General Public License for more details.
  +##
  +## You should have received a copy of the GNU General Public License
  +## along with this program; if not, write to the Free Software
  +## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  +##
  +## As a special exception to the GNU General Public License, if you
  +## distribute this file as part of a program that contains a
  +## configuration script generated by Autoconf, you may include it under
  +## the same distribution terms that you use for the rest of that program.
  +
  +# serial 46 AC_PROG_LIBTOOL
  +
  +# _LT_AC_CHECK_DLFCN
  +# --------------------
  +# _LT_AC_CHECK_DLFCN
  +
  +# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
  +# ---------------------------------
  + # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
  +
  +# _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR
  +# ---------------------------------
  +# _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR
  +
  +# _LT_AC_PROG_ECHO_BACKSLASH
  +# --------------------------
  +# Add some code to the start of the generated configure script which
  +# will find an echo command which doesn;t interpret backslashes.
  +# _LT_AC_PROG_ECHO_BACKSLASH
  +
  +# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
  +#                           ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
  +# ------------------------------------------------------------------
  +# _LT_AC_TRY_DLOPEN_SELF
  +
  +# AC_LIBTOOL_DLOPEN_SELF
  +# -------------------
  +# AC_LIBTOOL_DLOPEN_SELF
  +
  +# _LT_AC_LTCONFIG_HACK
  +
  +# AC_LIBTOOL_DLOPEN - enable checks for dlopen support
  +
  +# AC_LIBTOOL_WIN32_DLL - declare package support for building win32 dll's
  +
  +# AC_ENABLE_SHARED - implement the --enable-shared flag
  +# Usage: AC_ENABLE_SHARED[(DEFAULT)]
  +#   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
  +#   `yes'.
  +
  +# AC_DISABLE_SHARED - set the default shared flag to --disable-shared
  +
  +# AC_ENABLE_STATIC - implement the --enable-static flag
  +# Usage: AC_ENABLE_STATIC[(DEFAULT)]
  +#   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
  +#   `yes'.
  +
  +# AC_DISABLE_STATIC - set the default static flag to --disable-static
  +
  +# AC_ENABLE_FAST_INSTALL - implement the --enable-fast-install flag
  +# Usage: AC_ENABLE_FAST_INSTALL[(DEFAULT)]
  +#   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
  +#   `yes'.
  +
  +# AC_DISABLE_FAST_INSTALL - set the default to --disable-fast-install
  +
  +# AC_LIBTOOL_PICMODE - implement the --with-pic flag
  +# Usage: AC_LIBTOOL_PICMODE[(MODE)]
  +#   Where MODE is either `yes' or `no'.  If omitted, it defaults to
  +#   `both'.
  +
  +# AC_PATH_TOOL_PREFIX - find a file program which can recognise shared library
  +
  +# AC_PATH_MAGIC - find a file program which can recognise a shared library
  +
  +# AC_PROG_LD - find the path to the GNU or non-GNU linker
  +
  +# AC_PROG_LD_GNU -
  +
  +# AC_PROG_LD_RELOAD_FLAG - find reload flag for linker
  +#   -- PORTME Some linkers may need a different reload flag.
  +
  +# AC_DEPLIBS_CHECK_METHOD - how to check for library dependencies
  +#  -- PORTME fill in with the dynamic library characteristics
  +
  +# AC_PROG_NM - find the path to a BSD-compatible name lister
  +
  +# AC_CHECK_LIBM - check for math library
  +
  +# AC_LIBLTDL_CONVENIENCE[(dir)] - sets LIBLTDL to the link flags for
  +# the libltdl convenience library and INCLTDL to the include flags for
  +# the libltdl header and adds --enable-ltdl-convenience to the
  +# configure arguments.  Note that LIBLTDL and INCLTDL are not
  +# AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called.  If DIR is not
  +# provided, it is assumed to be `libltdl'.  LIBLTDL will be prefixed
  +# with '${top_builddir}/' and INCLTDL will be prefixed with
  +# '${top_srcdir}/' (note the single quotes!).  If your package is not
  +# flat and you're not using automake, define top_builddir and
  +# top_srcdir appropriately in the Makefiles.
  +
  +# AC_LIBLTDL_INSTALLABLE[(dir)] - sets LIBLTDL to the link flags for
  +# the libltdl installable library and INCLTDL to the include flags for
  +# the libltdl header and adds --enable-ltdl-install to the configure
  +# arguments.  Note that LIBLTDL and INCLTDL are not AC_SUBSTed, nor is
  +# AC_CONFIG_SUBDIRS called.  If DIR is not provided and an installed
  +# libltdl is not found, it is assumed to be `libltdl'.  LIBLTDL will
  +# be prefixed with '${top_builddir}/' and INCLTDL will be prefixed
  +# with '${top_srcdir}/' (note the single quotes!).  If your package is
  +# not flat and you're not using automake, define top_builddir and
  +# top_srcdir appropriately in the Makefiles.
  +# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
   
  -fi
  +# old names
  +
  +# This is just to silence aclocal about the macro not being used
  +
   # Check whether --enable-shared or --disable-shared was given.
   if test "${enable_shared+set}" = set; then
     enableval="$enable_shared"
  -  enable_shared="$enableval"
  -else
  -  if test ".$enable_shared" = .; then
  -    enable_shared=yes
  -fi
  -
  -fi
  -libtool_flags=''
  -test ".$silent"            = .yes && libtool_flags="$libtool_flags --silent"
  -test ".$enable_static"     = .no  && libtool_flags="$libtool_flags --disable-static"
  -test ".$enable_shared"     = .no  && libtool_flags="$libtool_flags --disable-shared"
  -test ".$ac_cv_prog_gcc"    = .yes && libtool_flags="$libtool_flags --with-gcc"
  -test ".$ac_cv_prog_gnu_ld" = .yes && libtool_flags="$libtool_flags --with-gnu-ld"
  -CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" LD="$LD" \
  -${CONFIG_SHELL-/bin/sh} $srcdir/ltconfig --no-reexec \
  -$libtool_flags --srcdir=$srcdir --no-verify $srcdir/ltmain.sh $PLATFORM ||\
  -{ echo "configure: error: libtool configuration failed" 1>&2; exit 1; }
  -
  -
  -echo $ac_n "checking size of char""... $ac_c" 1>&6
  -echo "configure:1195: checking size of char" >&5
  -if eval "test \"`echo '$''{'ac_cv_sizeof_char'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  -else
  -  if test "$cross_compiling" = yes; then
  -  ac_cv_sizeof_char=1
  +  p=${PACKAGE-default}
  +case $enableval in
  +yes) enable_shared=yes ;;
  +no) enable_shared=no ;;
  +*)
  +  enable_shared=no
  +  # Look at the argument we got.  We use all the common list separators.
  +  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
  +  for pkg in $enableval; do
  +    if test "X$pkg" = "X$p"; then
  +      enable_shared=yes
  +    fi
  +  done
  +  IFS="$ac_save_ifs"
  +  ;;
  +esac
   else
  +  enable_shared=yes
  +fi;
  +# Check whether --enable-static or --disable-static was given.
  +if test "${enable_static+set}" = set; then
  +  enableval="$enable_static"
  +  p=${PACKAGE-default}
  +case $enableval in
  +yes) enable_static=yes ;;
  +no) enable_static=no ;;
  +*)
  +  enable_static=no
  +  # Look at the argument we got.  We use all the common list separators.
  +  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
  +  for pkg in $enableval; do
  +    if test "X$pkg" = "X$p"; then
  +      enable_static=yes
  +    fi
  +  done
  +  IFS="$ac_save_ifs"
  +  ;;
  +esac
  +else
  +  enable_static=yes
  +fi;
  +# Check whether --enable-fast-install or --disable-fast-install was given.
  +if test "${enable_fast_install+set}" = set; then
  +  enableval="$enable_fast_install"
  +  p=${PACKAGE-default}
  +case $enableval in
  +yes) enable_fast_install=yes ;;
  +no) enable_fast_install=no ;;
  +*)
  +  enable_fast_install=no
  +  # Look at the argument we got.  We use all the common list separators.
  +  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
  +  for pkg in $enableval; do
  +    if test "X$pkg" = "X$p"; then
  +      enable_fast_install=yes
  +    fi
  +  done
  +  IFS="$ac_save_ifs"
  +  ;;
  +esac
  +else
  +  enable_fast_install=yes
  +fi;
  +ac_aux_dir=
  +for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
  +  if test -f $ac_dir/install-sh; then
  +    ac_aux_dir=$ac_dir
  +    ac_install_sh="$ac_aux_dir/install-sh -c"
  +    break
  +  elif test -f $ac_dir/install.sh; then
  +    ac_aux_dir=$ac_dir
  +    ac_install_sh="$ac_aux_dir/install.sh -c"
  +    break
  +  elif test -f $ac_dir/shtool; then
  +    ac_aux_dir=$ac_dir
  +    ac_install_sh="$ac_aux_dir/shtool install -c"
  +    break
  +  fi
  +done
  +if test -z "$ac_aux_dir"; then
  +  { { echo "$as_me:2614: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
  +echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
  +   { (exit 1); exit 1; }; }
  +fi
  +ac_config_guess="$SHELL $ac_aux_dir/config.guess"
  +ac_config_sub="$SHELL $ac_aux_dir/config.sub"
  +ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
  +
  +# Make sure we can run config.sub.
  +$ac_config_sub sun4 >/dev/null 2>&1 ||
  +  { { echo "$as_me:2624: error: cannot run $ac_config_sub" >&5
  +echo "$as_me: error: cannot run $ac_config_sub" >&2;}
  +   { (exit 1); exit 1; }; }
  +
  +echo "$as_me:2628: checking build system type" >&5
  +echo $ECHO_N "checking build system type... $ECHO_C" >&6
  +if test "${ac_cv_build+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  ac_cv_build_alias=$build_alias
  +test -z "$ac_cv_build_alias" &&
  +  ac_cv_build_alias=`$ac_config_guess`
  +test -z "$ac_cv_build_alias" &&
  +  { { echo "$as_me:2637: error: cannot guess build type; you must specify one" >&5
  +echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
  +   { (exit 1); exit 1; }; }
  +ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
  +  { { echo "$as_me:2641: error: $ac_config_sub $ac_cv_build_alias failed." >&5
  +echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed." >&2;}
  +   { (exit 1); exit 1; }; }
  +
  +fi
  +echo "$as_me:2646: result: $ac_cv_build" >&5
  +echo "${ECHO_T}$ac_cv_build" >&6
  +build=$ac_cv_build
  +build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
  +build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
  +build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
  +
  +echo "$as_me:2653: checking host system type" >&5
  +echo $ECHO_N "checking host system type... $ECHO_C" >&6
  +if test "${ac_cv_host+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  ac_cv_host_alias=$host_alias
  +test -z "$ac_cv_host_alias" &&
  +  ac_cv_host_alias=$ac_cv_build_alias
  +ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
  +  { { echo "$as_me:2662: error: $ac_config_sub $ac_cv_host_alias failed" >&5
  +echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
  +   { (exit 1); exit 1; }; }
  +
  +fi
  +echo "$as_me:2667: result: $ac_cv_host" >&5
  +echo "${ECHO_T}$ac_cv_host" >&6
  +host=$ac_cv_host
  +host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
  +host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
  +host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
  +
  +# Check whether --with-gnu-ld or --without-gnu-ld was given.
  +if test "${with_gnu_ld+set}" = set; then
  +  withval="$with_gnu_ld"
  +  test "$withval" = no || with_gnu_ld=yes
  +else
  +  with_gnu_ld=no
  +fi;
  +ac_prog=ld
  +if test "$GCC" = yes; then
  +  # Check if gcc -print-prog-name=ld gives a path.
  +  echo "$as_me:2684: checking for ld used by GCC" >&5
  +echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6
  +  case $host in
  +  *-*-mingw*)
  +    # gcc leaves a trailing carriage return which upsets mingw
  +    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
  +  *)
  +    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
  +  esac
  +  case $ac_prog in
  +    # Accept absolute paths.
  +    [\\/]* | [A-Za-z]:[\\/]*)
  +      re_direlt='/[^/][^/]*/\.\./'
  +      # Canonicalize the path of ld
  +      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
  +      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
  +	ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
  +      done
  +      test -z "$LD" && LD="$ac_prog"
  +      ;;
  +  "")
  +    # If it fails, then pretend we aren't using GCC.
  +    ac_prog=ld
  +    ;;
  +  *)
  +    # If it is relative, then search for the first ld in PATH.
  +    with_gnu_ld=unknown
  +    ;;
  +  esac
  +elif test "$with_gnu_ld" = yes; then
  +  echo "$as_me:2714: checking for GNU ld" >&5
  +echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6
  +else
  +  echo "$as_me:2717: checking for non-GNU ld" >&5
  +echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6
  +fi
  +if test "${lt_cv_path_LD+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test -z "$LD"; then
  +  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
  +  for ac_dir in $PATH; do
  +    test -z "$ac_dir" && ac_dir=.
  +    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
  +      lt_cv_path_LD="$ac_dir/$ac_prog"
  +      # Check to see if the program is GNU ld.  I'd rather use --version,
  +      # but apparently some GNU ld's only accept -v.
  +      # Break only if it was the GNU/non-GNU ld that we prefer.
  +      if "$lt_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
  +	test "$with_gnu_ld" != no && break
  +      else
  +	test "$with_gnu_ld" != yes && break
  +      fi
  +    fi
  +  done
  +  IFS="$ac_save_ifs"
  +else
  +  lt_cv_path_LD="$LD" # Let the user override the test with a path.
  +fi
  +fi
  +
  +LD="$lt_cv_path_LD"
  +if test -n "$LD"; then
  +  echo "$as_me:2747: result: $LD" >&5
  +echo "${ECHO_T}$LD" >&6
  +else
  +  echo "$as_me:2750: result: no" >&5
  +echo "${ECHO_T}no" >&6
  +fi
  +test -z "$LD" && { { echo "$as_me:2753: error: no acceptable ld found in \$PATH" >&5
  +echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
  +   { (exit 1); exit 1; }; }
  +echo "$as_me:2756: checking if the linker ($LD) is GNU ld" >&5
  +echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6
  +if test "${lt_cv_prog_gnu_ld+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  # I'd rather use --version here, but apparently some GNU ld's only accept -v.
  +if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
  +  lt_cv_prog_gnu_ld=yes
  +else
  +  lt_cv_prog_gnu_ld=no
  +fi
  +fi
  +echo "$as_me:2768: result: $lt_cv_prog_gnu_ld" >&5
  +echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6
  +with_gnu_ld=$lt_cv_prog_gnu_ld
  +
  +echo "$as_me:2772: checking for $LD option to reload object files" >&5
  +echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6
  +if test "${lt_cv_ld_reload_flag+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  lt_cv_ld_reload_flag='-r'
  +fi
  +echo "$as_me:2779: result: $lt_cv_ld_reload_flag" >&5
  +echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6
  +reload_flag=$lt_cv_ld_reload_flag
  +test -n "$reload_flag" && reload_flag=" $reload_flag"
  +
  +echo "$as_me:2784: checking for BSD-compatible nm" >&5
  +echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6
  +if test "${lt_cv_path_NM+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test -n "$NM"; then
  +  # Let the user override the test.
  +  lt_cv_path_NM="$NM"
  +else
  +  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
  +  for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
  +    test -z "$ac_dir" && ac_dir=.
  +    tmp_nm=$ac_dir/${ac_tool_prefix}nm
  +    if test -f $tmp_nm || test -f $tmp_nm$ac_exeext ; then
  +      # Check to see if the nm accepts a BSD-compat flag.
  +      # Adding the `sed 1q' prevents false positives on HP-UX, which says:
  +      #   nm: unknown option "B" ignored
  +      # Tru64's nm complains that /dev/null is an invalid object file
  +      if ($tmp_nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep '(/dev/null|Invalid file or object type)' >/dev/null; then
  +	lt_cv_path_NM="$tmp_nm -B"
  +	break
  +      elif ($tmp_nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
  +	lt_cv_path_NM="$tmp_nm -p"
  +	break
  +      else
  +	lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
  +	continue # so that we can try to find one that supports BSD flags
  +      fi
  +    fi
  +  done
  +  IFS="$ac_save_ifs"
  +  test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
  +fi
  +fi
  +
  +NM="$lt_cv_path_NM"
  +echo "$as_me:2820: result: $NM" >&5
  +echo "${ECHO_T}$NM" >&6
  +
  +echo "$as_me:2823: checking whether ln -s works" >&5
  +echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6
  +LN_S=$as_ln_s
  +if test "$LN_S" = "ln -s"; then
  +  echo "$as_me:2827: result: yes" >&5
  +echo "${ECHO_T}yes" >&6
  +else
  +  echo "$as_me:2830: result: no, using $LN_S" >&5
  +echo "${ECHO_T}no, using $LN_S" >&6
  +fi
  +
  +echo "$as_me:2834: checking how to recognise dependant libraries" >&5
  +echo $ECHO_N "checking how to recognise dependant libraries... $ECHO_C" >&6
  +if test "${lt_cv_deplibs_check_method+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  lt_cv_file_magic_cmd='$MAGIC_CMD'
  +lt_cv_file_magic_test_file=
  +lt_cv_deplibs_check_method='unknown'
  +# Need to set the preceding variable on all platforms that support
  +# interlibrary dependencies.
  +# 'none' -- dependencies not supported.
  +# `unknown' -- same as none, but documents that we really don't know.
  +# 'pass_all' -- all dependencies passed with no checks.
  +# 'test_compile' -- check by making test program.
  +# ['file_magic [regex]'] -- check by looking for files in library path
  +# which responds to the $file_magic_cmd with a given egrep regex.
  +# If you have `file' or equivalent on your system and you're not sure
  +# whether `pass_all' will *always* work, you probably want this one.
  +
  +case $host_os in
  +aix4* | aix5*)
  +  lt_cv_deplibs_check_method=pass_all
  +  ;;
  +
  +beos*)
  +  lt_cv_deplibs_check_method=pass_all
  +  ;;
  +
  +bsdi4*)
  +  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
  +  lt_cv_file_magic_cmd='/usr/bin/file -L'
  +  lt_cv_file_magic_test_file=/shlib/libc.so
  +  ;;
  +
  +cygwin* | mingw* | pw32*)
  +  lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
  +  lt_cv_file_magic_cmd='$OBJDUMP -f'
  +  ;;
  +
  +darwin* | rhapsody*)
  +  lt_cv_deplibs_check_method='file_magic Mach-O dynamically linked shared library'
  +  lt_cv_file_magic_cmd='/usr/bin/file -L'
  +  case "$host_os" in
  +  rhapsody* | darwin1.012)
  +    lt_cv_file_magic_test_file=`echo /System/Library/Frameworks/System.framework/Versions/*/System | head -1`
  +    ;;
  +  *) # Darwin 1.3 on
  +    lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib'
  +    ;;
  +  esac
  +  ;;
  +
  +freebsd*)
  +  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
  +    case $host_cpu in
  +    i*86 )
  +      # Not sure whether the presence of OpenBSD here was a mistake.
  +      # Let's accept both of them until this is cleared up.
  +      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[3-9]86 (compact )?demand paged shared library'
  +      lt_cv_file_magic_cmd=/usr/bin/file
  +      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
  +      ;;
  +    esac
  +  else
  +    lt_cv_deplibs_check_method=pass_all
  +  fi
  +  ;;
  +
  +gnu*)
  +  lt_cv_deplibs_check_method=pass_all
  +  ;;
  +
  +hpux10.20*|hpux11*)
  +  lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
  +  lt_cv_file_magic_cmd=/usr/bin/file
  +  lt_cv_file_magic_test_file=/usr/lib/libc.sl
  +  ;;
  +
  +irix5* | irix6*)
  +  case $host_os in
  +  irix5*)
  +    # this will be overridden with pass_all, but let us keep it just in case
  +    lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1"
  +    ;;
  +  *)
  +    case $LD in
  +    *-32|*"-32 ") libmagic=32-bit;;
  +    *-n32|*"-n32 ") libmagic=N32;;
  +    *-64|*"-64 ") libmagic=64-bit;;
  +    *) libmagic=never-match;;
  +    esac
  +    # this will be overridden with pass_all, but let us keep it just in case
  +    lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[1234] dynamic lib MIPS - version 1"
  +    ;;
  +  esac
  +  lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*`
  +  lt_cv_deplibs_check_method=pass_all
  +  ;;
  +
  +# This must be Linux ELF.
  +linux-gnu*)
  +  case $host_cpu in
  +  alpha* | i*86 | powerpc* | sparc* | ia64* )
  +    lt_cv_deplibs_check_method=pass_all ;;
  +  *)
  +    # glibc up to 2.1.1 does not perform some relocations on ARM
  +    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;;
  +  esac
  +  lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
  +  ;;
  +
  +netbsd*)
  +  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
  +    lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
  +  else
  +    lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so$'
  +  fi
  +  ;;
  +
  +newos6*)
  +  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
  +  lt_cv_file_magic_cmd=/usr/bin/file
  +  lt_cv_file_magic_test_file=/usr/lib/libnls.so
  +  ;;
  +
  +osf3* | osf4* | osf5*)
  +  # this will be overridden with pass_all, but let us keep it just in case
  +  lt_cv_deplibs_check_method='file_magic COFF format alpha shared library'
  +  lt_cv_file_magic_test_file=/shlib/libc.so
  +  lt_cv_deplibs_check_method=pass_all
  +  ;;
  +
  +sco3.2v5*)
  +  lt_cv_deplibs_check_method=pass_all
  +  ;;
  +
  +solaris*)
  +  lt_cv_deplibs_check_method=pass_all
  +  lt_cv_file_magic_test_file=/lib/libc.so
  +  ;;
  +
  +sysv5uw[78]* | sysv4*uw2*)
  +  lt_cv_deplibs_check_method=pass_all
  +  ;;
  +
  +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
  +  case $host_vendor in
  +  motorola)
  +    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
  +    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
  +    ;;
  +  ncr)
  +    lt_cv_deplibs_check_method=pass_all
  +    ;;
  +  sequent)
  +    lt_cv_file_magic_cmd='/bin/file'
  +    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
  +    ;;
  +  sni)
  +    lt_cv_file_magic_cmd='/bin/file'
  +    lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
  +    lt_cv_file_magic_test_file=/lib/libc.so
  +    ;;
  +  esac
  +  ;;
  +esac
  +
  +fi
  +echo "$as_me:3002: result: $lt_cv_deplibs_check_method" >&5
  +echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6
  +file_magic_cmd=$lt_cv_file_magic_cmd
  +deplibs_check_method=$lt_cv_deplibs_check_method
  +
  +# Check for command to grab the raw symbol name followed by C symbol from nm.
  +echo "$as_me:3008: checking command to parse $NM output" >&5
  +echo $ECHO_N "checking command to parse $NM output... $ECHO_C" >&6
  +if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +
  +# These are sane defaults that work on at least a few old systems.
  +# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
  +
  +# Character class describing NM global symbol codes.
  +symcode='[BCDEGRST]'
  +
  +# Regexp to match symbols that can be accessed directly from C.
  +sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
  +
  +# Transform the above into a raw symbol and a C symbol.
  +symxfrm='\1 \2\3 \3'
  +
  +# Transform an extracted symbol line into a proper C declaration
  +lt_cv_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'"
  +
  +# Define system-specific variables.
  +case $host_os in
  +aix*)
  +  symcode='[BCDT]'
  +  ;;
  +cygwin* | mingw* | pw32*)
  +  symcode='[ABCDGISTW]'
  +  ;;
  +hpux*) # Its linker distinguishes data from code symbols
  +  lt_cv_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
  +  ;;
  +irix*)
  +  symcode='[BCDEGRST]'
  +  ;;
  +solaris* | sysv5*)
  +  symcode='[BDT]'
  +  ;;
  +sysv4)
  +  symcode='[DFNSTU]'
  +  ;;
  +esac
  +
  +# Handle CRLF in mingw tool chain
  +opt_cr=
  +case $host_os in
  +mingw*)
  +  opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
  +  ;;
  +esac
  +
  +# If we're using GNU nm, then use its standard symbol codes.
  +if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then
  +  symcode='[ABCDGISTW]'
  +fi
  +
  +# Try without a prefix undercore, then with it.
  +for ac_symprfx in "" "_"; do
  +
  +  # Write the raw and C identifiers.
  +lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ 	]\($symcode$symcode*\)[ 	][ 	]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'"
  +
  +  # Check to see that the pipe works correctly.
  +  pipe_works=no
  +  rm -f conftest*
  +  cat > conftest.$ac_ext <<EOF
  +#ifdef __cplusplus
  +extern "C" {
  +#endif
  +char nm_test_var;
  +void nm_test_func(){}
  +#ifdef __cplusplus
  +}
  +#endif
  +int main(){nm_test_var='a';nm_test_func();return(0);}
  +EOF
  +
  +  if { (eval echo "$as_me:3085: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:3088: \$? = $ac_status" >&5
  +  (exit $ac_status); }; then
  +    # Now try to grab the symbols.
  +    nlist=conftest.nm
  +    if { (eval echo "$as_me:3092: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5
  +  (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
  +  ac_status=$?
  +  echo "$as_me:3095: \$? = $ac_status" >&5
  +  (exit $ac_status); } && test -s "$nlist"; then
  +      # Try sorting and uniquifying the output.
  +      if sort "$nlist" | uniq > "$nlist"T; then
  +	mv -f "$nlist"T "$nlist"
  +      else
  +	rm -f "$nlist"T
  +      fi
  +
  +      # Make sure that we snagged all the symbols we need.
  +      if egrep ' nm_test_var$' "$nlist" >/dev/null; then
  +	if egrep ' nm_test_func$' "$nlist" >/dev/null; then
  +	  cat <<EOF > conftest.$ac_ext
  +#ifdef __cplusplus
  +extern "C" {
  +#endif
  +
  +EOF
  +	  # Now generate the symbol file.
  +	  eval "$lt_cv_global_symbol_to_cdecl"' < "$nlist" >> conftest.$ac_ext'
  +
  +	  cat <<EOF >> conftest.$ac_ext
  +#if defined (__STDC__) && __STDC__
  +# define lt_ptr_t void *
  +#else
  +# define lt_ptr_t char *
  +# define const
  +#endif
  +
  +/* The mapping between symbol names and symbols. */
  +const struct {
  +  const char *name;
  +  lt_ptr_t address;
  +}
  +lt_preloaded_symbols[] =
  +{
  +EOF
  +	  sed "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" >> conftest.$ac_ext
  +	  cat <<\EOF >> conftest.$ac_ext
  +  {0, (lt_ptr_t) 0}
  +};
  +
  +#ifdef __cplusplus
  +}
  +#endif
  +EOF
  +	  # Now try linking the two files.
  +	  mv conftest.$ac_objext conftstm.$ac_objext
  +	  save_LIBS="$LIBS"
  +	  save_CFLAGS="$CFLAGS"
  +	  LIBS="conftstm.$ac_objext"
  +	  CFLAGS="$CFLAGS$no_builtin_flag"
  +	  if { (eval echo "$as_me:3147: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:3150: \$? = $ac_status" >&5
  +  (exit $ac_status); } && test -s conftest; then
  +	    pipe_works=yes
  +	  fi
  +	  LIBS="$save_LIBS"
  +	  CFLAGS="$save_CFLAGS"
  +	else
  +	  echo "cannot find nm_test_func in $nlist" >&5
  +	fi
  +      else
  +	echo "cannot find nm_test_var in $nlist" >&5
  +      fi
  +    else
  +      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
  +    fi
  +  else
  +    echo "$progname: failed program was:" >&5
  +    cat conftest.$ac_ext >&5
  +  fi
  +  rm -f conftest* conftst*
  +
  +  # Do not use the global_symbol_pipe unless it works.
  +  if test "$pipe_works" = yes; then
  +    break
  +  else
  +    lt_cv_sys_global_symbol_pipe=
  +  fi
  +done
  +
  +fi
  +
  +global_symbol_pipe="$lt_cv_sys_global_symbol_pipe"
  +if test -z "$lt_cv_sys_global_symbol_pipe"; then
  +  global_symbol_to_cdecl=
  +else
  +  global_symbol_to_cdecl="$lt_cv_global_symbol_to_cdecl"
  +fi
  +if test -z "$global_symbol_pipe$global_symbol_to_cdecl"; then
  +  echo "$as_me:3188: result: failed" >&5
  +echo "${ECHO_T}failed" >&6
  +else
  +  echo "$as_me:3191: result: ok" >&5
  +echo "${ECHO_T}ok" >&6
  +fi
  +
  +for ac_header in dlfcn.h
  +do
  +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
  +echo "$as_me:3198: checking for $ac_header" >&5
  +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
  +if eval "test \"\${$as_ac_Header+set}\" = set"; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 3204 "configure"
  +#include "confdefs.h"
  +#include <$ac_header>
  +_ACEOF
  +if { (eval echo "$as_me:3208: \"$ac_cpp conftest.$ac_ext\"") >&5
  +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  +  ac_status=$?
  +  egrep -v '^ *\+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:3214: \$? = $ac_status" >&5
  +  (exit $ac_status); } >/dev/null; then
  +  if test -s conftest.err; then
  +    ac_cpp_err=$ac_c_preproc_warn_flag
  +  else
  +    ac_cpp_err=
  +  fi
  +else
  +  ac_cpp_err=yes
  +fi
  +if test -z "$ac_cpp_err"; then
  +  eval "$as_ac_Header=yes"
  +else
  +  echo "$as_me: failed program was:" >&5
  +  cat conftest.$ac_ext >&5
  +  eval "$as_ac_Header=no"
  +fi
  +rm -f conftest.err conftest.$ac_ext
  +fi
  +echo "$as_me:3233: result: `eval echo '${'$as_ac_Header'}'`" >&5
  +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
  +if test `eval echo '${'$as_ac_Header'}'` = yes; then
  +  cat >>confdefs.h <<EOF
  +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
  +EOF
  +
  +fi
  +done
  +
  +# Only perform the check for file, if the check method requires it
  +case $deplibs_check_method in
  +file_magic*)
  +  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
  +    echo "$as_me:3247: checking for ${ac_tool_prefix}file" >&5
  +echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6
  +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  case $MAGIC_CMD in
  +  /*)
  +  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
  +  ;;
  +  ?:/*)
  +  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path.
  +  ;;
  +  *)
  +  ac_save_MAGIC_CMD="$MAGIC_CMD"
  +  IFS="${IFS=   }"; ac_save_ifs="$IFS"; IFS=":"
  +  ac_dummy="/usr/bin:$PATH"
  +  for ac_dir in $ac_dummy; do
  +    test -z "$ac_dir" && ac_dir=.
  +    if test -f $ac_dir/${ac_tool_prefix}file; then
  +      lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
  +      if test -n "$file_magic_test_file"; then
  +	case $deplibs_check_method in
  +	"file_magic "*)
  +	  file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
  +	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
  +	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
  +	    egrep "$file_magic_regex" > /dev/null; then
  +	    :
  +	  else
  +	    cat <<EOF 1>&2
  +
  +*** Warning: the command libtool uses to detect shared libraries,
  +*** $file_magic_cmd, produces output that libtool cannot recognize.
  +*** The result is that libtool may fail to recognize shared libraries
  +*** as such.  This will affect the creation of libtool libraries that
  +*** depend on shared libraries, but programs linked with such libtool
  +*** libraries will work regardless of this problem.  Nevertheless, you
  +*** may want to report the problem to your system manager and/or to
  +*** bug-libtool@gnu.org
  +
  +EOF
  +	  fi ;;
  +	esac
  +      fi
  +      break
  +    fi
  +  done
  +  IFS="$ac_save_ifs"
  +  MAGIC_CMD="$ac_save_MAGIC_CMD"
  +  ;;
  +esac
  +fi
  +
  +MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
  +if test -n "$MAGIC_CMD"; then
  +  echo "$as_me:3302: result: $MAGIC_CMD" >&5
  +echo "${ECHO_T}$MAGIC_CMD" >&6
  +else
  +  echo "$as_me:3305: result: no" >&5
  +echo "${ECHO_T}no" >&6
  +fi
  +
  +if test -z "$lt_cv_path_MAGIC_CMD"; then
  +  if test -n "$ac_tool_prefix"; then
  +    echo "$as_me:3311: checking for file" >&5
  +echo $ECHO_N "checking for file... $ECHO_C" >&6
  +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  case $MAGIC_CMD in
  +  /*)
  +  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
  +  ;;
  +  ?:/*)
  +  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path.
  +  ;;
  +  *)
  +  ac_save_MAGIC_CMD="$MAGIC_CMD"
  +  IFS="${IFS=   }"; ac_save_ifs="$IFS"; IFS=":"
  +  ac_dummy="/usr/bin:$PATH"
  +  for ac_dir in $ac_dummy; do
  +    test -z "$ac_dir" && ac_dir=.
  +    if test -f $ac_dir/file; then
  +      lt_cv_path_MAGIC_CMD="$ac_dir/file"
  +      if test -n "$file_magic_test_file"; then
  +	case $deplibs_check_method in
  +	"file_magic "*)
  +	  file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
  +	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
  +	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
  +	    egrep "$file_magic_regex" > /dev/null; then
  +	    :
  +	  else
  +	    cat <<EOF 1>&2
  +
  +*** Warning: the command libtool uses to detect shared libraries,
  +*** $file_magic_cmd, produces output that libtool cannot recognize.
  +*** The result is that libtool may fail to recognize shared libraries
  +*** as such.  This will affect the creation of libtool libraries that
  +*** depend on shared libraries, but programs linked with such libtool
  +*** libraries will work regardless of this problem.  Nevertheless, you
  +*** may want to report the problem to your system manager and/or to
  +*** bug-libtool@gnu.org
  +
  +EOF
  +	  fi ;;
  +	esac
  +      fi
  +      break
  +    fi
  +  done
  +  IFS="$ac_save_ifs"
  +  MAGIC_CMD="$ac_save_MAGIC_CMD"
  +  ;;
  +esac
  +fi
  +
  +MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
  +if test -n "$MAGIC_CMD"; then
  +  echo "$as_me:3366: result: $MAGIC_CMD" >&5
  +echo "${ECHO_T}$MAGIC_CMD" >&6
  +else
  +  echo "$as_me:3369: result: no" >&5
  +echo "${ECHO_T}no" >&6
  +fi
  +
  +  else
  +    MAGIC_CMD=:
  +  fi
  +fi
  +
  +  fi
  +  ;;
  +esac
  +
  +if test -n "$ac_tool_prefix"; then
  +  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
  +set dummy ${ac_tool_prefix}ranlib; ac_word=$2
  +echo "$as_me:3385: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_RANLIB+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test -n "$RANLIB"; then
  +  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
  +else
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
  +echo "$as_me:3400: found $ac_dir/$ac_word" >&5
  +break
  +done
  +
  +fi
  +fi
  +RANLIB=$ac_cv_prog_RANLIB
  +if test -n "$RANLIB"; then
  +  echo "$as_me:3408: result: $RANLIB" >&5
  +echo "${ECHO_T}$RANLIB" >&6
  +else
  +  echo "$as_me:3411: result: no" >&5
  +echo "${ECHO_T}no" >&6
  +fi
  +
  +fi
  +if test -z "$ac_cv_prog_RANLIB"; then
  +  ac_ct_RANLIB=$RANLIB
  +  # Extract the first word of "ranlib", so it can be a program name with args.
  +set dummy ranlib; ac_word=$2
  +echo "$as_me:3420: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test -n "$ac_ct_RANLIB"; then
  +  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
  +else
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +ac_cv_prog_ac_ct_RANLIB="ranlib"
  +echo "$as_me:3435: found $ac_dir/$ac_word" >&5
  +break
  +done
  +
  +  test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
  +fi
  +fi
  +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
  +if test -n "$ac_ct_RANLIB"; then
  +  echo "$as_me:3444: result: $ac_ct_RANLIB" >&5
  +echo "${ECHO_T}$ac_ct_RANLIB" >&6
  +else
  +  echo "$as_me:3447: result: no" >&5
  +echo "${ECHO_T}no" >&6
  +fi
  +
  +  RANLIB=$ac_ct_RANLIB
  +else
  +  RANLIB="$ac_cv_prog_RANLIB"
  +fi
  +
  +if test -n "$ac_tool_prefix"; then
  +  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
  +set dummy ${ac_tool_prefix}strip; ac_word=$2
  +echo "$as_me:3459: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_STRIP+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test -n "$STRIP"; then
  +  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
  +else
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +ac_cv_prog_STRIP="${ac_tool_prefix}strip"
  +echo "$as_me:3474: found $ac_dir/$ac_word" >&5
  +break
  +done
  +
  +fi
  +fi
  +STRIP=$ac_cv_prog_STRIP
  +if test -n "$STRIP"; then
  +  echo "$as_me:3482: result: $STRIP" >&5
  +echo "${ECHO_T}$STRIP" >&6
  +else
  +  echo "$as_me:3485: result: no" >&5
  +echo "${ECHO_T}no" >&6
  +fi
  +
  +fi
  +if test -z "$ac_cv_prog_STRIP"; then
  +  ac_ct_STRIP=$STRIP
  +  # Extract the first word of "strip", so it can be a program name with args.
  +set dummy strip; ac_word=$2
  +echo "$as_me:3494: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test -n "$ac_ct_STRIP"; then
  +  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
  +else
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +ac_cv_prog_ac_ct_STRIP="strip"
  +echo "$as_me:3509: found $ac_dir/$ac_word" >&5
  +break
  +done
  +
  +  test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
  +fi
  +fi
  +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
  +if test -n "$ac_ct_STRIP"; then
  +  echo "$as_me:3518: result: $ac_ct_STRIP" >&5
  +echo "${ECHO_T}$ac_ct_STRIP" >&6
  +else
  +  echo "$as_me:3521: result: no" >&5
  +echo "${ECHO_T}no" >&6
  +fi
  +
  +  STRIP=$ac_ct_STRIP
  +else
  +  STRIP="$ac_cv_prog_STRIP"
  +fi
  +
  +enable_dlopen=no
  +enable_win32_dll=no
  +
  +# Check whether --enable-libtool-lock or --disable-libtool-lock was given.
  +if test "${enable_libtool_lock+set}" = set; then
  +  enableval="$enable_libtool_lock"
  +
  +fi;
  +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
  +
  +# Some flags need to be propagated to the compiler or linker for good
  +# libtool support.
  +case $host in
  +*-*-irix6*)
  +  # Find out which ABI we are using.
  +  echo '#line 3545 "configure"' > conftest.$ac_ext
  +  if { (eval echo "$as_me:3546: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:3549: \$? = $ac_status" >&5
  +  (exit $ac_status); }; then
  +    case `/usr/bin/file conftest.$ac_objext` in
  +    *32-bit*)
  +      LD="${LD-ld} -32"
  +      ;;
  +    *N32*)
  +      LD="${LD-ld} -n32"
  +      ;;
  +    *64-bit*)
  +      LD="${LD-ld} -64"
  +      ;;
  +    esac
  +  fi
  +  rm -rf conftest*
  +  ;;
  +
  +*-*-sco3.2v5*)
  +  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
  +  SAVE_CFLAGS="$CFLAGS"
  +  CFLAGS="$CFLAGS -belf"
  +  echo "$as_me:3570: checking whether the C compiler needs -belf" >&5
  +echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6
  +if test "${lt_cv_cc_needs_belf+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +
  +     ac_ext=c
  +ac_cpp='$CPP $CPPFLAGS'
  +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  +ac_compiler_gnu=$ac_cv_c_compiler_gnu
  +
  +     cat >conftest.$ac_ext <<_ACEOF
  +#line 3583 "configure"
  +#include "confdefs.h"
  +
  +int
  +main ()
  +{
  +
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext conftest$ac_exeext
  +if { (eval echo "$as_me:3595: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:3598: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest$ac_exeext'
  +  { (eval echo "$as_me:3601: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:3604: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  lt_cv_cc_needs_belf=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +lt_cv_cc_needs_belf=no
  +fi
  +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  +     ac_ext=c
  +ac_cpp='$CPP $CPPFLAGS'
  +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  +ac_compiler_gnu=$ac_cv_c_compiler_gnu
  +
  +fi
  +echo "$as_me:3620: result: $lt_cv_cc_needs_belf" >&5
  +echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6
  +  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
  +    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
  +    CFLAGS="$SAVE_CFLAGS"
  +  fi
  +  ;;
  +
  +esac
  +
  +# Sed substitution that helps us do robust quoting.  It backslashifies
  +# metacharacters that are still active within double-quoted strings.
  +Xsed='sed -e s/^X//'
  +sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'
  +
  +# Same as above, but do not quote variable references.
  +double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'
  +
  +# Sed substitution to delay expansion of an escaped shell variable in a
  +# double_quote_subst'ed string.
  +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
  +
  +# Constants:
  +rm="rm -f"
  +
  +# Global variables:
  +default_ofile=libtool
  +can_build_shared=yes
  +
  +# All known linkers require a `.a' archive for static linking (except M$VC,
  +# which needs '.lib').
  +libext=a
  +ltmain="$ac_aux_dir/ltmain.sh"
  +ofile="$default_ofile"
  +with_gnu_ld="$lt_cv_prog_gnu_ld"
  +need_locks="$enable_libtool_lock"
  +
  +old_CC="$CC"
  +old_CFLAGS="$CFLAGS"
  +
  +# Set sane defaults for various variables
  +test -z "$AR" && AR=ar
  +test -z "$AR_FLAGS" && AR_FLAGS=cru
  +test -z "$AS" && AS=as
  +test -z "$CC" && CC=cc
  +test -z "$DLLTOOL" && DLLTOOL=dlltool
  +test -z "$LD" && LD=ld
  +test -z "$LN_S" && LN_S="ln -s"
  +test -z "$MAGIC_CMD" && MAGIC_CMD=file
  +test -z "$NM" && NM=nm
  +test -z "$OBJDUMP" && OBJDUMP=objdump
  +test -z "$RANLIB" && RANLIB=:
  +test -z "$STRIP" && STRIP=:
  +test -z "$ac_objext" && ac_objext=o
  +
  +if test x"$host" != x"$build"; then
  +  ac_tool_prefix=${host_alias}-
  +else
  +  ac_tool_prefix=
  +fi
  +
  +# Transform linux* to *-*-linux-gnu*, to support old configure scripts.
  +case $host_os in
  +linux-gnu*) ;;
  +linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
  +esac
  +
  +case $host_os in
  +aix3*)
  +  # AIX sometimes has problems with the GCC collect2 program.  For some
  +  # reason, if we set the COLLECT_NAMES environment variable, the problems
  +  # vanish in a puff of smoke.
  +  if test "X${COLLECT_NAMES+set}" != Xset; then
  +    COLLECT_NAMES=
  +    export COLLECT_NAMES
  +  fi
  +  ;;
  +esac
  +
  +# Determine commands to create old-style static archives.
  +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
  +old_postinstall_cmds='chmod 644 $oldlib'
  +old_postuninstall_cmds=
  +
  +if test -n "$RANLIB"; then
  +  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
  +  old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
  +fi
  +
  +# Allow CC to be a program name with arguments.
  +set dummy $CC
  +compiler="$2"
  +
  +## FIXME: this should be a separate macro
  +##
  +echo "$as_me:3715: checking for objdir" >&5
  +echo $ECHO_N "checking for objdir... $ECHO_C" >&6
  +rm -f .libs 2>/dev/null
  +mkdir .libs 2>/dev/null
  +if test -d .libs; then
  +  objdir=.libs
  +else
  +  # MS-DOS does not allow filenames that begin with a dot.
  +  objdir=_libs
  +fi
  +rmdir .libs 2>/dev/null
  +echo "$as_me:3726: result: $objdir" >&5
  +echo "${ECHO_T}$objdir" >&6
  +##
  +## END FIXME
  +
  +## FIXME: this should be a separate macro
  +##
  +
  +# Check whether --with-pic or --without-pic was given.
  +if test "${with_pic+set}" = set; then
  +  withval="$with_pic"
  +  pic_mode="$withval"
  +else
  +  pic_mode=default
  +fi;
  +test -z "$pic_mode" && pic_mode=default
  +
  +# We assume here that the value for lt_cv_prog_cc_pic will not be cached
  +# in isolation, and that seeing it set (from the cache) indicates that
  +# the associated values are set (in the cache) correctly too.
  +echo "$as_me:3746: checking for $compiler option to produce PIC" >&5
  +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
  +if test "${lt_cv_prog_cc_pic+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +   lt_cv_prog_cc_pic=
  +  lt_cv_prog_cc_shlib=
  +  lt_cv_prog_cc_wl=
  +  lt_cv_prog_cc_static=
  +  lt_cv_prog_cc_no_builtin=
  +  lt_cv_prog_cc_can_build_shared=$can_build_shared
  +
  +  if test "$GCC" = yes; then
  +    lt_cv_prog_cc_wl='-Wl,'
  +    lt_cv_prog_cc_static='-static'
  +
  +    case $host_os in
  +    aix*)
  +      # Below there is a dirty hack to force normal static linking with -ldl
  +      # The problem is because libdl dynamically linked with both libc and
  +      # libC (AIX C++ library), which obviously doesn't included in libraries
  +      # list by gcc. This cause undefined symbols with -static flags.
  +      # This hack allows C programs to be linked with "-static -ldl", but
  +      # we not sure about C++ programs.
  +      lt_cv_prog_cc_static="$lt_cv_prog_cc_static ${lt_cv_prog_cc_wl}-lC"
  +      ;;
  +    amigaos*)
  +      # FIXME: we need at least 68020 code to build shared libraries, but
  +      # adding the `-m68020' flag to GCC prevents building anything better,
  +      # like `-m68040'.
  +      lt_cv_prog_cc_pic='-m68020 -resident32 -malways-restore-a4'
  +      ;;
  +    beos* | irix5* | irix6* | osf3* | osf4* | osf5*)
  +      # PIC is the default for these OSes.
  +      ;;
  +    darwin* | rhapsody*)
  +      # PIC is the default on this platform
  +      # Common symbols not allowed in MH_DYLIB files
  +      lt_cv_prog_cc_pic='-fno-common'
  +      ;;
  +    cygwin* | mingw* | pw32* | os2*)
  +      # This hack is so that the source file can tell whether it is being
  +      # built for inclusion in a dll (and should export symbols for example).
  +      lt_cv_prog_cc_pic='-DDLL_EXPORT'
  +      ;;
  +    sysv4*MP*)
  +      if test -d /usr/nec; then
  +	 lt_cv_prog_cc_pic=-Kconform_pic
  +      fi
  +      ;;
  +    *)
  +      lt_cv_prog_cc_pic='-fPIC'
  +      ;;
  +    esac
  +  else
  +    # PORTME Check for PIC flags for the system compiler.
  +    case $host_os in
  +    aix3* | aix4* | aix5*)
  +      # All AIX code is PIC.
  +      if test "$host_cpu" = ia64; then
  +        # AIX 5 now supports IA64 processor
  +        lt_cv_prog_cc_static='-Bstatic'
  +        lt_cv_prog_cc_wl='-Wl,'
  +      else
  +        lt_cv_prog_cc_static='-bnso -bI:/lib/syscalls.exp'
  +      fi
  +      ;;
  +
  +    hpux9* | hpux10* | hpux11*)
  +      # Is there a better lt_cv_prog_cc_static that works with the bundled CC?
  +      lt_cv_prog_cc_wl='-Wl,'
  +      lt_cv_prog_cc_static="${lt_cv_prog_cc_wl}-a ${lt_cv_prog_cc_wl}archive"
  +      lt_cv_prog_cc_pic='+Z'
  +      ;;
  +
  +    irix5* | irix6*)
  +      lt_cv_prog_cc_wl='-Wl,'
  +      lt_cv_prog_cc_static='-non_shared'
  +      # PIC (with -KPIC) is the default.
  +      ;;
  +
  +    cygwin* | mingw* | pw32* | os2*)
  +      # This hack is so that the source file can tell whether it is being
  +      # built for inclusion in a dll (and should export symbols for example).
  +      lt_cv_prog_cc_pic='-DDLL_EXPORT'
  +      ;;
  +
  +    newsos6)
  +      lt_cv_prog_cc_pic='-KPIC'
  +      lt_cv_prog_cc_static='-Bstatic'
  +      ;;
  +
  +    osf3* | osf4* | osf5*)
  +      # All OSF/1 code is PIC.
  +      lt_cv_prog_cc_wl='-Wl,'
  +      lt_cv_prog_cc_static='-non_shared'
  +      ;;
  +
  +    sco3.2v5*)
  +      lt_cv_prog_cc_pic='-Kpic'
  +      lt_cv_prog_cc_static='-dn'
  +      lt_cv_prog_cc_shlib='-belf'
  +      ;;
  +
  +    solaris*)
  +      lt_cv_prog_cc_pic='-KPIC'
  +      lt_cv_prog_cc_static='-Bstatic'
  +      lt_cv_prog_cc_wl='-Wl,'
  +      ;;
  +
  +    sunos4*)
  +      lt_cv_prog_cc_pic='-PIC'
  +      lt_cv_prog_cc_static='-Bstatic'
  +      lt_cv_prog_cc_wl='-Qoption ld '
  +      ;;
  +
  +    sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
  +      lt_cv_prog_cc_pic='-KPIC'
  +      lt_cv_prog_cc_static='-Bstatic'
  +      if test "x$host_vendor" = xsni; then
  +        lt_cv_prog_cc_wl='-LD'
  +      else
  +        lt_cv_prog_cc_wl='-Wl,'
  +      fi
  +      ;;
  +
  +    uts4*)
  +      lt_cv_prog_cc_pic='-pic'
  +      lt_cv_prog_cc_static='-Bstatic'
  +      ;;
  +
  +    sysv4*MP*)
  +      if test -d /usr/nec ;then
  +	lt_cv_prog_cc_pic='-Kconform_pic'
  +	lt_cv_prog_cc_static='-Bstatic'
  +      fi
  +      ;;
  +
  +    *)
  +      lt_cv_prog_cc_can_build_shared=no
  +      ;;
  +    esac
  +  fi
  +
  +fi
  +
  +if test -z "$lt_cv_prog_cc_pic"; then
  +  echo "$as_me:3893: result: none" >&5
  +echo "${ECHO_T}none" >&6
  +else
  +  echo "$as_me:3896: result: $lt_cv_prog_cc_pic" >&5
  +echo "${ECHO_T}$lt_cv_prog_cc_pic" >&6
  +
  +  # Check to make sure the pic_flag actually works.
  +  echo "$as_me:3900: checking if $compiler PIC flag $lt_cv_prog_cc_pic works" >&5
  +echo $ECHO_N "checking if $compiler PIC flag $lt_cv_prog_cc_pic works... $ECHO_C" >&6
  +  if test "${lt_cv_prog_cc_pic_works+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +      save_CFLAGS="$CFLAGS"
  +    CFLAGS="$CFLAGS $lt_cv_prog_cc_pic -DPIC"
  +    cat >conftest.$ac_ext <<_ACEOF
  +#line 3908 "configure"
  +#include "confdefs.h"
  +
  +int
  +main ()
  +{
  +
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:3920: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:3923: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:3926: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:3929: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +        case $host_os in
  +      hpux9* | hpux10* | hpux11*)
  +	# On HP-UX, both CC and GCC only warn that PIC is supported... then
  +	# they create non-PIC objects.  So, if there were any warnings, we
  +	# assume that PIC is not supported.
  +	if test -s conftest.err; then
  +	  lt_cv_prog_cc_pic_works=no
  +	else
  +	  lt_cv_prog_cc_pic_works=yes
  +	fi
  +	;;
  +      *)
  +	lt_cv_prog_cc_pic_works=yes
  +	;;
  +      esac
  +
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +      lt_cv_prog_cc_pic_works=no
  +
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +    CFLAGS="$save_CFLAGS"
  +
  +fi
  +
  +  if test "X$lt_cv_prog_cc_pic_works" = Xno; then
  +    lt_cv_prog_cc_pic=
  +    lt_cv_prog_cc_can_build_shared=no
  +  else
  +    lt_cv_prog_cc_pic=" $lt_cv_prog_cc_pic"
  +  fi
  +
  +  echo "$as_me:3965: result: $lt_cv_prog_cc_pic_works" >&5
  +echo "${ECHO_T}$lt_cv_prog_cc_pic_works" >&6
  +fi
  +##
  +## END FIXME
  +
  +# Check for any special shared library compilation flags.
  +if test -n "$lt_cv_prog_cc_shlib"; then
  +  { echo "$as_me:3973: WARNING: \`$CC' requires \`$lt_cv_prog_cc_shlib' to build shared libraries" >&5
  +echo "$as_me: WARNING: \`$CC' requires \`$lt_cv_prog_cc_shlib' to build shared libraries" >&2;}
  +  if echo "$old_CC $old_CFLAGS " | egrep -e "[ 	]$lt_cv_prog_cc_shlib[ 	]" >/dev/null; then :
  +  else
  +   { echo "$as_me:3977: WARNING: add \`$lt_cv_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&5
  +echo "$as_me: WARNING: add \`$lt_cv_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&2;}
  +    lt_cv_prog_cc_can_build_shared=no
  +  fi
  +fi
  +
  +## FIXME: this should be a separate macro
  +##
  +echo "$as_me:3985: checking if $compiler static flag $lt_cv_prog_cc_static works" >&5
  +echo $ECHO_N "checking if $compiler static flag $lt_cv_prog_cc_static works... $ECHO_C" >&6
  +if test "${lt_cv_prog_cc_static_works+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +    lt_cv_prog_cc_static_works=no
  +  save_LDFLAGS="$LDFLAGS"
  +  LDFLAGS="$LDFLAGS $lt_cv_prog_cc_static"
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 3994 "configure"
  +#include "confdefs.h"
  +
  +int
  +main ()
  +{
  +
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext conftest$ac_exeext
  +if { (eval echo "$as_me:4006: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:4009: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest$ac_exeext'
  +  { (eval echo "$as_me:4012: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:4015: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  lt_cv_prog_cc_static_works=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +fi
  +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  +  LDFLAGS="$save_LDFLAGS"
  +
  +fi
  +
  +# Belt *and* braces to stop my trousers falling down:
  +test "X$lt_cv_prog_cc_static_works" = Xno && lt_cv_prog_cc_static=
  +echo "$as_me:4029: result: $lt_cv_prog_cc_static_works" >&5
  +echo "${ECHO_T}$lt_cv_prog_cc_static_works" >&6
  +
  +pic_flag="$lt_cv_prog_cc_pic"
  +special_shlib_compile_flags="$lt_cv_prog_cc_shlib"
  +wl="$lt_cv_prog_cc_wl"
  +link_static_flag="$lt_cv_prog_cc_static"
  +no_builtin_flag="$lt_cv_prog_cc_no_builtin"
  +can_build_shared="$lt_cv_prog_cc_can_build_shared"
  +##
  +## END FIXME
  +
  +## FIXME: this should be a separate macro
  +##
  +# Check to see if options -o and -c are simultaneously supported by compiler
  +echo "$as_me:4044: checking if $compiler supports -c -o file.$ac_objext" >&5
  +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
  +if test "${lt_cv_compiler_c_o+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +
  +$rm -r conftest 2>/dev/null
  +mkdir conftest
  +cd conftest
  +echo "int some_variable = 0;" > conftest.$ac_ext
  +mkdir out
  +# According to Tom Tromey, Ian Lance Taylor reported there are C compilers
  +# that will create temporary files in the current directory regardless of
  +# the output directory.  Thus, making CWD read-only will cause this test
  +# to fail, enabling locking or at least warning the user not to do parallel
  +# builds.
  +chmod -w .
  +save_CFLAGS="$CFLAGS"
  +CFLAGS="$CFLAGS -o out/conftest2.$ac_objext"
  +compiler_c_o=no
  +if { (eval echo configure:4064: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.$ac_objext; then
  +  # The compiler can only warn and ignore the option if not recognized
  +  # So say no if there are warnings
  +  if test -s out/conftest.err; then
  +    lt_cv_compiler_c_o=no
  +  else
  +    lt_cv_compiler_c_o=yes
  +  fi
  +else
  +  # Append any errors to the config.log.
  +  cat out/conftest.err 1>&5
  +  lt_cv_compiler_c_o=no
  +fi
  +CFLAGS="$save_CFLAGS"
  +chmod u+w .
  +$rm conftest* out/*
  +rmdir out
  +cd ..
  +rmdir conftest
  +$rm -r conftest 2>/dev/null
  +
  +fi
  +
  +compiler_c_o=$lt_cv_compiler_c_o
  +echo "$as_me:4088: result: $compiler_c_o" >&5
  +echo "${ECHO_T}$compiler_c_o" >&6
  +
  +if test x"$compiler_c_o" = x"yes"; then
  +  # Check to see if we can write to a .lo
  +  echo "$as_me:4093: checking if $compiler supports -c -o file.lo" >&5
  +echo $ECHO_N "checking if $compiler supports -c -o file.lo... $ECHO_C" >&6
  +  if test "${lt_cv_compiler_o_lo+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +
  +  lt_cv_compiler_o_lo=no
  +  save_CFLAGS="$CFLAGS"
  +  CFLAGS="$CFLAGS -c -o conftest.lo"
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 4103 "configure"
  +#include "confdefs.h"
  +
  +int
  +main ()
  +{
  +int some_variable = 0;
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:4115: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:4118: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:4121: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:4124: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +      # The compiler can only warn and ignore the option if not recognized
  +    # So say no if there are warnings
  +    if test -s conftest.err; then
  +      lt_cv_compiler_o_lo=no
  +    else
  +      lt_cv_compiler_o_lo=yes
  +    fi
  +
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +  CFLAGS="$save_CFLAGS"
  +
  +fi
  +
  +  compiler_o_lo=$lt_cv_compiler_o_lo
  +  echo "$as_me:4144: result: $compiler_c_lo" >&5
  +echo "${ECHO_T}$compiler_c_lo" >&6
  +else
  +  compiler_o_lo=no
  +fi
  +##
  +## END FIXME
  +
  +## FIXME: this should be a separate macro
  +##
  +# Check to see if we can do hard links to lock some files if needed
  +hard_links="nottested"
  +if test "$compiler_c_o" = no && test "$need_locks" != no; then
  +  # do not overwrite the value of need_locks provided by the user
  +  echo "$as_me:4158: checking if we can lock with hard links" >&5
  +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
  +  hard_links=yes
  +  $rm conftest*
  +  ln conftest.a conftest.b 2>/dev/null && hard_links=no
  +  touch conftest.a
  +  ln conftest.a conftest.b 2>&5 || hard_links=no
  +  ln conftest.a conftest.b 2>/dev/null && hard_links=no
  +  echo "$as_me:4166: result: $hard_links" >&5
  +echo "${ECHO_T}$hard_links" >&6
  +  if test "$hard_links" = no; then
  +    { echo "$as_me:4169: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
  +echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
  +    need_locks=warn
  +  fi
  +else
  +  need_locks=no
  +fi
  +##
  +## END FIXME
  +
  +## FIXME: this should be a separate macro
  +##
  +if test "$GCC" = yes; then
  +  # Check to see if options -fno-rtti -fno-exceptions are supported by compiler
  +  echo "$as_me:4183: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
  +echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6
  +  echo "int some_variable = 0;" > conftest.$ac_ext
  +  save_CFLAGS="$CFLAGS"
  +  CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.$ac_ext"
  +  compiler_rtti_exceptions=no
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 4190 "configure"
  +#include "confdefs.h"
  +
  +int
  +main ()
  +{
  +int some_variable = 0;
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:4202: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:4205: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:4208: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:4211: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +      # The compiler can only warn and ignore the option if not recognized
  +    # So say no if there are warnings
  +    if test -s conftest.err; then
  +      compiler_rtti_exceptions=no
  +    else
  +      compiler_rtti_exceptions=yes
  +    fi
  +
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +  CFLAGS="$save_CFLAGS"
  +  echo "$as_me:4227: result: $compiler_rtti_exceptions" >&5
  +echo "${ECHO_T}$compiler_rtti_exceptions" >&6
  +
  +  if test "$compiler_rtti_exceptions" = "yes"; then
  +    no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions'
  +  else
  +    no_builtin_flag=' -fno-builtin'
  +  fi
  +fi
  +##
  +## END FIXME
  +
  +## FIXME: this should be a separate macro
  +##
  +# See if the linker supports building shared libraries.
  +echo "$as_me:4242: checking whether the linker ($LD) supports shared libraries" >&5
  +echo $ECHO_N "checking whether the linker ($LD) supports shared libraries... $ECHO_C" >&6
  +
  +allow_undefined_flag=
  +no_undefined_flag=
  +need_lib_prefix=unknown
  +need_version=unknown
  +# when you set need_version to no, make sure it does not cause -set_version
  +# flags to be left without arguments
  +archive_cmds=
  +archive_expsym_cmds=
  +old_archive_from_new_cmds=
  +old_archive_from_expsyms_cmds=
  +export_dynamic_flag_spec=
  +whole_archive_flag_spec=
  +thread_safe_flag_spec=
  +hardcode_into_libs=no
  +hardcode_libdir_flag_spec=
  +hardcode_libdir_separator=
  +hardcode_direct=no
  +hardcode_minus_L=no
  +hardcode_shlibpath_var=unsupported
  +runpath_var=
  +link_all_deplibs=unknown
  +always_export_symbols=no
  +export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols'
  +# include_expsyms should be a list of space-separated symbols to be *always*
  +# included in the symbol list
  +include_expsyms=
  +# exclude_expsyms can be an egrep regular expression of symbols to exclude
  +# it will be wrapped by ` (' and `)$', so one must not match beginning or
  +# end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
  +# as well as any symbol that contains `d'.
  +exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
  +# Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
  +# platforms (ab)use it in PIC code, but their linkers get confused if
  +# the symbol is explicitly referenced.  Since portable code cannot
  +# rely on this symbol name, it's probably fine to never include it in
  +# preloaded symbol tables.
  +extract_expsyms_cmds=
  +
  +case $host_os in
  +cygwin* | mingw* | pw32* )
  +  # FIXME: the MSVC++ port hasn't been tested in a loooong time
  +  # When not using gcc, we currently assume that we are using
  +  # Microsoft Visual C++.
  +  if test "$GCC" != yes; then
  +    with_gnu_ld=no
  +  fi
  +  ;;
  +
  +esac
  +
  +ld_shlibs=yes
  +if test "$with_gnu_ld" = yes; then
  +  # If archive_cmds runs LD, not CC, wlarc should be empty
  +  wlarc='${wl}'
  +
  +  # See if GNU ld supports shared libraries.
  +  case $host_os in
  +  aix3* | aix4* | aix5*)
  +    # On AIX, the GNU linker is very broken
  +    # Note:Check GNU linker on AIX 5-IA64 when/if it becomes available.
  +    ld_shlibs=no
  +    cat <<EOF 1>&2
  +
  +*** Warning: the GNU linker, at least up to release 2.9.1, is reported
  +*** to be unable to reliably create shared libraries on AIX.
  +*** Therefore, libtool is disabling shared libraries support.  If you
  +*** really care for shared libraries, you may want to modify your PATH
  +*** so that a non-GNU linker is found, and then restart.
  +
  +EOF
  +    ;;
  +
  +  amigaos*)
  +    archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
  +    hardcode_libdir_flag_spec='-L$libdir'
  +    hardcode_minus_L=yes
  +
  +    # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
  +    # that the semantics of dynamic libraries on AmigaOS, at least up
  +    # to version 4, is to share data among multiple programs linked
  +    # with the same dynamic library.  Since this doesn't match the
  +    # behavior of shared libraries on other platforms, we can use
  +    # them.
  +    ld_shlibs=no
  +    ;;
  +
  +  beos*)
  +    if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
  +      allow_undefined_flag=unsupported
  +      # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
  +      # support --undefined.  This deserves some investigation.  FIXME
  +      archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
  +    else
  +      ld_shlibs=no
  +    fi
  +    ;;
  +
  +  cygwin* | mingw* | pw32*)
  +    # hardcode_libdir_flag_spec is actually meaningless, as there is
  +    # no search path for DLLs.
  +    hardcode_libdir_flag_spec='-L$libdir'
  +    allow_undefined_flag=unsupported
  +    always_export_symbols=yes
  +
  +    extract_expsyms_cmds='test -f $output_objdir/impgen.c || \
  +      sed -e "/^# \/\* impgen\.c starts here \*\//,/^# \/\* impgen.c ends here \*\// { s/^# //;s/^# *$//; p; }" -e d < $''0 > $output_objdir/impgen.c~
  +      test -f $output_objdir/impgen.exe || (cd $output_objdir && \
  +      if test "x$HOST_CC" != "x" ; then $HOST_CC -o impgen impgen.c ; \
  +      else $CC -o impgen impgen.c ; fi)~
  +      $output_objdir/impgen $dir/$soroot > $output_objdir/$soname-def'
  +
  +    old_archive_from_expsyms_cmds='$DLLTOOL --as=$AS --dllname $soname --def $output_objdir/$soname-def --output-lib $output_objdir/$newlib'
  +
  +    # cygwin and mingw dlls have different entry points and sets of symbols
  +    # to exclude.
  +    # FIXME: what about values for MSVC?
  +    dll_entry=__cygwin_dll_entry@12
  +    dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12~
  +    case $host_os in
  +    mingw*)
  +      # mingw values
  +      dll_entry=_DllMainCRTStartup@12
  +      dll_exclude_symbols=DllMain@12,DllMainCRTStartup@12,DllEntryPoint@12~
  +      ;;
  +    esac
  +
  +    # mingw and cygwin differ, and it's simplest to just exclude the union
  +    # of the two symbol sets.
  +    dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12,DllMainCRTStartup@12,DllEntryPoint@12
  +
  +    # recent cygwin and mingw systems supply a stub DllMain which the user
  +    # can override, but on older systems we have to supply one (in ltdll.c)
  +    if test "x$lt_cv_need_dllmain" = "xyes"; then
  +      ltdll_obj='$output_objdir/$soname-ltdll.'"$ac_objext "
  +      ltdll_cmds='test -f $output_objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < [$]0 > $output_objdir/$soname-ltdll.c~
  +	test -f $output_objdir/$soname-ltdll.$ac_objext || (cd $output_objdir && $CC -c $soname-ltdll.c)~'
  +    else
  +      ltdll_obj=
  +      ltdll_cmds=
  +    fi
  +
  +    # Extract the symbol export list from an `--export-all' def file,
  +    # then regenerate the def file from the symbol export list, so that
  +    # the compiled dll only exports the symbol export list.
  +    # Be careful not to strip the DATA tag left be newer dlltools.
  +    export_symbols_cmds="$ltdll_cmds"'
  +      $DLLTOOL --export-all --exclude-symbols '$dll_exclude_symbols' --output-def $output_objdir/$soname-def '$ltdll_obj'$libobjs $convenience~
  +      sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]*//" -e "s/ *;.*$//" < $output_objdir/$soname-def > $export_symbols'
  +
  +    # If the export-symbols file already is a .def file (1st line
  +    # is EXPORTS), use it as is.
  +    # If DATA tags from a recent dlltool are present, honour them!
  +    archive_expsym_cmds='if test "x`head -1 $export_symbols`" = xEXPORTS; then
  +        cp $export_symbols $output_objdir/$soname-def;
  +      else
  +        echo EXPORTS > $output_objdir/$soname-def;
  +        _lt_hint=1;
  +        cat $export_symbols | while read symbol; do
  +         set dummy \$symbol;
  +         case \$# in
  +           2) echo "   \$2 @ \$_lt_hint ; " >> $output_objdir/$soname-def;;
  +           *) echo "     \$2 @ \$_lt_hint \$3 ; " >> $output_objdir/$soname-def;;
  +         esac;
  +         _lt_hint=`expr 1 + \$_lt_hint`;
  +        done;
  +      fi~
  +      '"$ltdll_cmds"'
  +      $CC -Wl,--base-file,$output_objdir/$soname-base '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~
  +      $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp~
  +      $CC -Wl,--base-file,$output_objdir/$soname-base $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~
  +      $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp --output-lib $output_objdir/$libname.dll.a~
  +      $CC $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags'
  +    ;;
  +
  +  netbsd*)
  +    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
  +      archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
  +      wlarc=
  +    else
  +      archive_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
  +      archive_expsym_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
  +    fi
  +    ;;
  +
  +  solaris* | sysv5*)
  +    if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then
  +      ld_shlibs=no
  +      cat <<EOF 1>&2
  +
  +*** Warning: The releases 2.8.* of the GNU linker cannot reliably
  +*** create shared libraries on Solaris systems.  Therefore, libtool
  +*** is disabling shared libraries support.  We urge you to upgrade GNU
  +*** binutils to release 2.9.1 or newer.  Another option is to modify
  +*** your PATH or compiler configuration so that the native linker is
  +*** used, and then restart.
  +
  +EOF
  +    elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
  +      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
  +      archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
  +    else
  +      ld_shlibs=no
  +    fi
  +    ;;
  +
  +  sunos4*)
  +    archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
  +    wlarc=
  +    hardcode_direct=yes
  +    hardcode_shlibpath_var=no
  +    ;;
  +
  +  *)
  +    if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
  +      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
  +      archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
  +    else
  +      ld_shlibs=no
  +    fi
  +    ;;
  +  esac
  +
  +  if test "$ld_shlibs" = yes; then
  +    runpath_var=LD_RUN_PATH
  +    hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
  +    export_dynamic_flag_spec='${wl}--export-dynamic'
  +    case $host_os in
  +    cygwin* | mingw* | pw32*)
  +      # dlltool doesn't understand --whole-archive et. al.
  +      whole_archive_flag_spec=
  +      ;;
  +    *)
  +      # ancient GNU ld didn't support --whole-archive et. al.
  +      if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then
  +	whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
  +      else
  +	whole_archive_flag_spec=
  +      fi
  +      ;;
  +    esac
  +  fi
  +else
  +  # PORTME fill in a description of your system's linker (not GNU ld)
  +  case $host_os in
  +  aix3*)
  +    allow_undefined_flag=unsupported
  +    always_export_symbols=yes
  +    archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
  +    # Note: this linker hardcodes the directories in LIBPATH if there
  +    # are no directories specified by -L.
  +    hardcode_minus_L=yes
  +    if test "$GCC" = yes && test -z "$link_static_flag"; then
  +      # Neither direct hardcoding nor static linking is supported with a
  +      # broken collect2.
  +      hardcode_direct=unsupported
  +    fi
  +    ;;
  +
  +  aix4* | aix5*)
  +    # When large executables or shared objects are built, AIX ld can
  +    # have problems creating the table of contents.  If linking a library
  +    # or program results in "error TOC overflow" add -mminimal-toc to
  +    # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
  +    # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
  +
  +    archive_cmds=''
  +    hardcode_libdir_separator=':'
  +    if test "$GCC" = yes; then
  +      collect2name=`${CC} -print-prog-name=collect2`
  +      if test -f "$collect2name" && \
  +	 strings "$collect2name" | grep resolve_lib_name >/dev/null
  +      then
  +	# We have reworked collect2
  +	hardcode_direct=yes
  +      else
  +        # We have old collect2
  +        hardcode_direct=unsupported
  +        # It fails to find uninstalled libraries when the uninstalled
  +        # path is not listed in the libpath.  Setting hardcode_minus_L
  +        # to unsupported forces relinking
  +        hardcode_minus_L=yes
  +        hardcode_libdir_flag_spec='-L$libdir'
  +        hardcode_libdir_separator=
  +      fi
  +      shared_flag='-shared'
  +    else
  +      if test "$host_cpu" = ia64; then
  +        shared_flag='-G'
  +      else
  +        shared_flag='${wl}-bM:SRE'
  +      fi
  +      hardcode_direct=yes
  +    fi
  +
  +    if test "$host_cpu" = ia64; then
  +      # On IA64, the linker does run time linking by default, so we don't
  +      # have to do anything special.
  +      aix_use_runtimelinking=no
  +      exp_sym_flag='-Bexport'
  +      no_entry_flag=""
  +    else
  +      # Test if we are trying to use run time linking, or normal AIX style linking.
  +      # If -brtl is somewhere in LDFLAGS, we need to do run time linking.
  +      aix_use_runtimelinking=no
  +      for ld_flag in $LDFLAGS; do
  +        if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl" ); then
  +          aix_use_runtimelinking=yes
  +          break
  +        fi
  +      done
  +      exp_sym_flag='-bexport'
  +      no_entry_flag='-bnoentry'
  +    fi
  +    # It seems that -bexpall can do strange things, so it is better to
  +    # generate a list of symbols to export.
  +    always_export_symbols=yes
  +    if test "$aix_use_runtimelinking" = yes; then
  +      hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib'
  +      allow_undefined_flag=' -Wl,-G'
  +      archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
  +    else
  +      if test "$host_cpu" = ia64; then
  +        hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
  +       allow_undefined_flag="-znodefs"
  +        archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname ${wl}-h$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
  +      else
  +        hardcode_libdir_flag_spec='${wl}-bnolibpath ${wl}-blibpath:$libdir:/usr/lib:/lib'
  +        # Warning - without using the other run time loading flags, -berok will
  +        #           link without error, but may produce a broken library.
  +        allow_undefined_flag='${wl}-berok"
  +        # This is a bit strange, but is similar to how AIX traditionally builds
  +        # it's shared libraries.
  +        archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"' ~$AR -crlo $objdir/$libname$release.a $objdir/$soname'
  +      fi
  +    fi
  +    ;;
  +
  +  amigaos*)
  +    archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
  +    hardcode_libdir_flag_spec='-L$libdir'
  +    hardcode_minus_L=yes
  +    # see comment about different semantics on the GNU ld section
  +    ld_shlibs=no
  +    ;;
  +
  +  cygwin* | mingw* | pw32*)
  +    # When not using gcc, we currently assume that we are using
  +    # Microsoft Visual C++.
  +    # hardcode_libdir_flag_spec is actually meaningless, as there is
  +    # no search path for DLLs.
  +    hardcode_libdir_flag_spec=' '
  +    allow_undefined_flag=unsupported
  +    # Tell ltmain to make .lib files, not .a files.
  +    libext=lib
  +    # FIXME: Setting linknames here is a bad hack.
  +    archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames='
  +    # The linker will automatically build a .lib file if we build a DLL.
  +    old_archive_from_new_cmds='true'
  +    # FIXME: Should let the user specify the lib program.
  +    old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs'
  +    fix_srcfile_path='`cygpath -w "$srcfile"`'
  +    ;;
  +
  +  darwin* | rhapsody*)
  +    allow_undefined_flag='-undefined suppress'
  +    # FIXME: Relying on posixy $() will cause problems for
  +    #        cross-compilation, but unfortunately the echo tests do not
  +    #        yet detect zsh echo's removal of \ escapes.
  +    archive_cmds='$CC $(test .$module = .yes && echo -bundle || echo -dynamiclib) $allow_undefined_flag -o $lib $libobjs $deplibs$linkopts -install_name $rpath/$soname $(test -n "$verstring" -a x$verstring != x0.0 && echo $verstring)'
  +    # We need to add '_' to the symbols in $export_symbols first
  +    #archive_expsym_cmds="$archive_cmds"' && strip -s $export_symbols'
  +    hardcode_direct=yes
  +    hardcode_shlibpath_var=no
  +    whole_archive_flag_spec='-all_load $convenience'
  +    ;;
  +
  +  freebsd1*)
  +    ld_shlibs=no
  +    ;;
  +
  +  # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
  +  # support.  Future versions do this automatically, but an explicit c++rt0.o
  +  # does not break anything, and helps significantly (at the cost of a little
  +  # extra space).
  +  freebsd2.2*)
  +    archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
  +    hardcode_libdir_flag_spec='-R$libdir'
  +    hardcode_direct=yes
  +    hardcode_shlibpath_var=no
  +    ;;
  +
  +  # Unfortunately, older versions of FreeBSD 2 do not have this feature.
  +  freebsd2*)
  +    archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
  +    hardcode_direct=yes
  +    hardcode_minus_L=yes
  +    hardcode_shlibpath_var=no
  +    ;;
  +
  +  # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
  +  freebsd*)
  +    archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
  +    hardcode_libdir_flag_spec='-R$libdir'
  +    hardcode_direct=yes
  +    hardcode_shlibpath_var=no
  +    ;;
  +
  +  hpux9* | hpux10* | hpux11*)
  +    case $host_os in
  +    hpux9*) archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ;;
  +    *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;;
  +    esac
  +    hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
  +    hardcode_libdir_separator=:
  +    hardcode_direct=yes
  +    hardcode_minus_L=yes # Not in the search PATH, but as the default
  +			 # location of the library.
  +    export_dynamic_flag_spec='${wl}-E'
  +    ;;
  +
  +  irix5* | irix6*)
  +    if test "$GCC" = yes; then
  +      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
  +    else
  +      archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
  +    fi
  +    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
  +    hardcode_libdir_separator=:
  +    link_all_deplibs=yes
  +    ;;
  +
  +  netbsd*)
  +    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
  +      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
  +    else
  +      archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
  +    fi
  +    hardcode_libdir_flag_spec='-R$libdir'
  +    hardcode_direct=yes
  +    hardcode_shlibpath_var=no
  +    ;;
  +
  +  newsos6)
  +    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
  +    hardcode_direct=yes
  +    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
  +    hardcode_libdir_separator=:
  +    hardcode_shlibpath_var=no
  +    ;;
  +
  +  openbsd*)
  +    archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
  +    hardcode_libdir_flag_spec='-R$libdir'
  +    hardcode_direct=yes
  +    hardcode_shlibpath_var=no
  +    ;;
  +
  +  os2*)
  +    hardcode_libdir_flag_spec='-L$libdir'
  +    hardcode_minus_L=yes
  +    allow_undefined_flag=unsupported
  +    archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
  +    old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
  +    ;;
  +
  +  osf3*)
  +    if test "$GCC" = yes; then
  +      allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
  +      archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
  +    else
  +      allow_undefined_flag=' -expect_unresolved \*'
  +      archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
  +    fi
  +    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
  +    hardcode_libdir_separator=:
  +    ;;
  +
  +  osf4* | osf5*)	# as osf3* with the addition of -msym flag
  +    if test "$GCC" = yes; then
  +      allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
  +      archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
  +      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
  +    else
  +      allow_undefined_flag=' -expect_unresolved \*'
  +      archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
  +      archive_expsym_cmds='for i in `cat $export_symbols`; do printf "-exported_symbol " >> $lib.exp; echo "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
  +      $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
  +
  +      #Both c and cxx compiler support -rpath directly
  +      hardcode_libdir_flag_spec='-rpath $libdir'
  +    fi
  +    hardcode_libdir_separator=:
  +    ;;
  +
  +  sco3.2v5*)
  +    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
  +    hardcode_shlibpath_var=no
  +    runpath_var=LD_RUN_PATH
  +    hardcode_runpath_var=yes
  +    ;;
  +
  +  solaris*)
  +    no_undefined_flag=' -z defs'
  +    # $CC -shared without GNU ld will not create a library from C++
  +    # object files and a static libstdc++, better avoid it by now
  +    archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
  +    archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
  +		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
  +    hardcode_libdir_flag_spec='-R$libdir'
  +    hardcode_shlibpath_var=no
  +    case $host_os in
  +    solaris2.[0-5] | solaris2.[0-5].*) ;;
  +    *) # Supported since Solaris 2.6 (maybe 2.5.1?)
  +      whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;
  +    esac
  +    link_all_deplibs=yes
  +    ;;
  +
  +  sunos4*)
  +    if test "x$host_vendor" = xsequent; then
  +      # Use $CC to link under sequent, because it throws in some extra .o
  +      # files that make .init and .fini sections work.
  +      archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
  +    else
  +      archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
  +    fi
  +    hardcode_libdir_flag_spec='-L$libdir'
  +    hardcode_direct=yes
  +    hardcode_minus_L=yes
  +    hardcode_shlibpath_var=no
  +    ;;
  +
  +  sysv4)
  +    if test "x$host_vendor" = xsno; then
  +      archive_cmds='$LD -G -Bsymbolic -h $soname -o $lib $libobjs $deplibs $linkopts'
  +      hardcode_direct=yes # is this really true???
  +    else
  +      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
  +      hardcode_direct=no #Motorola manual says yes, but my tests say they lie
  +    fi
  +    runpath_var='LD_RUN_PATH'
  +    hardcode_shlibpath_var=no
  +    ;;
  +
  +  sysv4.3*)
  +    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
  +    hardcode_shlibpath_var=no
  +    export_dynamic_flag_spec='-Bexport'
  +    ;;
  +
  +  sysv5*)
  +    no_undefined_flag=' -z text'
  +    # $CC -shared without GNU ld will not create a library from C++
  +    # object files and a static libstdc++, better avoid it by now
  +    archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
  +    archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
  +		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
  +    hardcode_libdir_flag_spec=
  +    hardcode_shlibpath_var=no
  +    runpath_var='LD_RUN_PATH'
  +    ;;
  +
  +  uts4*)
  +    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
  +    hardcode_libdir_flag_spec='-L$libdir'
  +    hardcode_shlibpath_var=no
  +    ;;
  +
  +  dgux*)
  +    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
  +    hardcode_libdir_flag_spec='-L$libdir'
  +    hardcode_shlibpath_var=no
  +    ;;
  +
  +  sysv4*MP*)
  +    if test -d /usr/nec; then
  +      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
  +      hardcode_shlibpath_var=no
  +      runpath_var=LD_RUN_PATH
  +      hardcode_runpath_var=yes
  +      ld_shlibs=yes
  +    fi
  +    ;;
  +
  +  sysv4.2uw2*)
  +    archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
  +    hardcode_direct=yes
  +    hardcode_minus_L=no
  +    hardcode_shlibpath_var=no
  +    hardcode_runpath_var=yes
  +    runpath_var=LD_RUN_PATH
  +    ;;
  +
  +  sysv5uw7* | unixware7*)
  +    no_undefined_flag='${wl}-z ${wl}text'
  +    if test "$GCC" = yes; then
  +      archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
  +    else
  +      archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
  +    fi
  +    runpath_var='LD_RUN_PATH'
  +    hardcode_shlibpath_var=no
  +    ;;
  +
  +  *)
  +    ld_shlibs=no
  +    ;;
  +  esac
  +fi
  +echo "$as_me:4854: result: $ld_shlibs" >&5
  +echo "${ECHO_T}$ld_shlibs" >&6
  +test "$ld_shlibs" = no && can_build_shared=no
  +##
  +## END FIXME
  +
  +## FIXME: this should be a separate macro
  +##
  +# Check hardcoding attributes.
  +echo "$as_me:4863: checking how to hardcode library paths into programs" >&5
  +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
  +hardcode_action=
  +if test -n "$hardcode_libdir_flag_spec" || \
  +   test -n "$runpath_var"; then
  +
  +  # We can hardcode non-existant directories.
  +  if test "$hardcode_direct" != no &&
  +     # If the only mechanism to avoid hardcoding is shlibpath_var, we
  +     # have to relink, otherwise we might link with an installed library
  +     # when we should be linking with a yet-to-be-installed one
  +     ## test "$hardcode_shlibpath_var" != no &&
  +     test "$hardcode_minus_L" != no; then
  +    # Linking always hardcodes the temporary library directory.
  +    hardcode_action=relink
  +  else
  +    # We can link without hardcoding, and we can hardcode nonexisting dirs.
  +    hardcode_action=immediate
  +  fi
  +else
  +  # We cannot hardcode anything, or else we can only hardcode existing
  +  # directories.
  +  hardcode_action=unsupported
  +fi
  +echo "$as_me:4887: result: $hardcode_action" >&5
  +echo "${ECHO_T}$hardcode_action" >&6
  +##
  +## END FIXME
  +
  +## FIXME: this should be a separate macro
  +##
  +striplib=
  +old_striplib=
  +echo "$as_me:4896: checking whether stripping libraries is possible" >&5
  +echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
  +if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
  +  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
  +  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
  +  echo "$as_me:4901: result: yes" >&5
  +echo "${ECHO_T}yes" >&6
  +else
  +  echo "$as_me:4904: result: no" >&5
  +echo "${ECHO_T}no" >&6
  +fi
  +##
  +## END FIXME
  +
  +reload_cmds='$LD$reload_flag -o $output$reload_objs'
  +test -z "$deplibs_check_method" && deplibs_check_method=unknown
  +
  +## FIXME: this should be a separate macro
  +##
  +# PORTME Fill in your ld.so characteristics
  +echo "$as_me:4916: checking dynamic linker characteristics" >&5
  +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
  +library_names_spec=
  +libname_spec='lib$name'
  +soname_spec=
  +postinstall_cmds=
  +postuninstall_cmds=
  +finish_cmds=
  +finish_eval=
  +shlibpath_var=
  +shlibpath_overrides_runpath=unknown
  +version_type=none
  +dynamic_linker="$host_os ld.so"
  +sys_lib_dlsearch_path_spec="/lib /usr/lib"
  +sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
  +
  +case $host_os in
  +aix3*)
  +  version_type=linux
  +  library_names_spec='${libname}${release}.so$versuffix $libname.a'
  +  shlibpath_var=LIBPATH
  +
  +  # AIX has no versioning support, so we append a major version to the name.
  +  soname_spec='${libname}${release}.so$major'
  +  ;;
  +
  +aix4* | aix5*)
  +  version_type=linux
  +  if test "$host_cpu" = ia64; then
  +    # AIX 5 supports IA64
  +    library_names_spec='${libname}${release}.so$major ${libname}${release}.so$versuffix $libname.so'
  +    shlibpath_var=LD_LIBRARY_PATH
  +  else
  +    # With GCC up to 2.95.x, collect2 would create an import file
  +    # for dependence libraries.  The import file would start with
  +    # the line `#! .'.  This would cause the generated library to
  +    # depend on `.', always an invalid library.  This was fixed in
  +    # development snapshots of GCC prior to 3.0.
  +    case $host_os in
  +       aix4 | aix4.[01] | aix4.[01].*)
  +      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
  +           echo ' yes '
  +           echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
  +        :
  +      else
  +        can_build_shared=no
  +      fi
  +      ;;
  +    esac
  +    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
  +    # soname into executable. Probably we can add versioning support to
  +    # collect2, so additional links can be useful in future.
  +    if test "$aix_use_runtimelinking" = yes; then
  +      # If using run time linking (on AIX 4.2 or later) use lib<name>.so instead of
  +      # lib<name>.a to let people know that these are not typical AIX shared libraries.
  +      library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
  +    else
  +      # We preserve .a as extension for shared libraries through AIX4.2
  +      # and later when we are not doing run time linking.
  +      library_names_spec='${libname}${release}.a $libname.a'
  +      soname_spec='${libname}${release}.so$major'
  +    fi
  +    shlibpath_var=LIBPATH
  +    deplibs_check_method=pass_all
  +  fi
  +  ;;
  +
  +amigaos*)
  +  library_names_spec='$libname.ixlibrary $libname.a'
  +  # Create ${libname}_ixlibrary.a entries in /sys/libs.
  +  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
  +  ;;
  +
  +beos*)
  +  library_names_spec='${libname}.so'
  +  dynamic_linker="$host_os ld.so"
  +  shlibpath_var=LIBRARY_PATH
  +  ;;
  +
  +bsdi4*)
  +  version_type=linux
  +  need_version=no
  +  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
  +  soname_spec='${libname}${release}.so$major'
  +  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
  +  shlibpath_var=LD_LIBRARY_PATH
  +  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
  +  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
  +  export_dynamic_flag_spec=-rdynamic
  +  # the default ld.so.conf also contains /usr/contrib/lib and
  +  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
  +  # libtool to hard-code these into programs
  +  ;;
  +
  +cygwin* | mingw* | pw32*)
  +  version_type=windows
  +  need_version=no
  +  need_lib_prefix=no
  +  case $GCC,$host_os in
  +  yes,cygwin*)
  +    library_names_spec='$libname.dll.a'
  +    soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll'
  +    postinstall_cmds='dlpath=`bash 2>&1 -c '\''. $dir/${file}i;echo \$dlname'\''`~
  +      dldir=$destdir/`dirname \$dlpath`~
  +      test -d \$dldir || mkdir -p \$dldir~
  +      $install_prog .libs/$dlname \$dldir/$dlname'
  +    postuninstall_cmds='dldll=`bash 2>&1 -c '\''. $file; echo \$dlname'\''`~
  +      dlpath=$dir/\$dldll~
  +       $rm \$dlpath'
  +    ;;
  +  yes,mingw*)
  +    library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll'
  +    sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | sed -e "s/^libraries://" -e "s/;/ /g"`
  +    ;;
  +  yes,pw32*)
  +    library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | sed -e 's/./-/g'`${versuffix}.dll'
  +    ;;
  +  *)
  +    library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.lib'
  +    ;;
  +  esac
  +  dynamic_linker='Win32 ld.exe'
  +  # FIXME: first we should search . and the directory the executable is in
  +  shlibpath_var=PATH
  +  ;;
  +
  +darwin* | rhapsody*)
  +  dynamic_linker="$host_os dyld"
  +  version_type=darwin
  +  need_lib_prefix=no
  +  need_version=no
  +  # FIXME: Relying on posixy $() will cause problems for
  +  #        cross-compilation, but unfortunately the echo tests do not
  +  #        yet detect zsh echo's removal of \ escapes.
  +  library_names_spec='${libname}${release}${versuffix}.$(test .$module = .yes && echo so || echo dylib) ${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib) ${libname}.$(test .$module = .yes && echo so || echo dylib)'
  +  soname_spec='${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib)'
  +  shlibpath_overrides_runpath=yes
  +  shlibpath_var=DYLD_LIBRARY_PATH
  +  ;;
  +
  +freebsd1*)
  +  dynamic_linker=no
  +  ;;
  +
  +freebsd*)
  +  objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
  +  version_type=freebsd-$objformat
  +  case $version_type in
  +    freebsd-elf*)
  +      library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
  +      need_version=no
  +      need_lib_prefix=no
  +      ;;
  +    freebsd-*)
  +      library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix'
  +      need_version=yes
  +      ;;
  +  esac
  +  shlibpath_var=LD_LIBRARY_PATH
  +  case $host_os in
  +  freebsd2*)
  +    shlibpath_overrides_runpath=yes
  +    ;;
  +  *)
  +    shlibpath_overrides_runpath=no
  +    hardcode_into_libs=yes
  +    ;;
  +  esac
  +  ;;
  +
  +gnu*)
  +  version_type=linux
  +  need_lib_prefix=no
  +  need_version=no
  +  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so'
  +  soname_spec='${libname}${release}.so$major'
  +  shlibpath_var=LD_LIBRARY_PATH
  +  hardcode_into_libs=yes
  +  ;;
  +
  +hpux9* | hpux10* | hpux11*)
  +  # Give a soname corresponding to the major version so that dld.sl refuses to
  +  # link against other versions.
  +  dynamic_linker="$host_os dld.sl"
  +  version_type=sunos
  +  need_lib_prefix=no
  +  need_version=no
  +  shlibpath_var=SHLIB_PATH
  +  shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
  +  library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl'
  +  soname_spec='${libname}${release}.sl$major'
  +  # HP-UX runs *really* slowly unless shared libraries are mode 555.
  +  postinstall_cmds='chmod 555 $lib'
  +  ;;
  +
  +irix5* | irix6*)
  +  version_type=irix
  +  need_lib_prefix=no
  +  need_version=no
  +  soname_spec='${libname}${release}.so$major'
  +  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so $libname.so'
  +  case $host_os in
  +  irix5*)
  +    libsuff= shlibsuff=
  +    ;;
  +  *)
  +    case $LD in # libtool.m4 will add one of these switches to LD
  +    *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;;
  +    *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;;
  +    *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;;
  +    *) libsuff= shlibsuff= libmagic=never-match;;
  +    esac
  +    ;;
  +  esac
  +  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
  +  shlibpath_overrides_runpath=no
  +  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
  +  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
  +  ;;
  +
  +# No shared lib support for Linux oldld, aout, or coff.
  +linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*)
  +  dynamic_linker=no
  +  ;;
  +
  +# This must be Linux ELF.
  +linux-gnu*)
  +  version_type=linux
  +  need_lib_prefix=no
  +  need_version=no
  +  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
  +  soname_spec='${libname}${release}.so$major'
  +  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
  +  shlibpath_var=LD_LIBRARY_PATH
  +  shlibpath_overrides_runpath=no
  +  # This implies no fast_install, which is unacceptable.
  +  # Some rework will be needed to allow for fast_install
  +  # before this can be enabled.
  +  hardcode_into_libs=yes
  +
  +  # We used to test for /lib/ld.so.1 and disable shared libraries on
  +  # powerpc, because MkLinux only supported shared libraries with the
  +  # GNU dynamic linker.  Since this was broken with cross compilers,
  +  # most powerpc-linux boxes support dynamic linking these days and
  +  # people can always --disable-shared, the test was removed, and we
  +  # assume the GNU/Linux dynamic linker is in use.
  +  dynamic_linker='GNU/Linux ld.so'
  +  ;;
  +
  +netbsd*)
  +  version_type=sunos
  +  need_lib_prefix=no
  +  need_version=no
  +  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
  +    library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
  +    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
  +    dynamic_linker='NetBSD (a.out) ld.so'
  +  else
  +    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so'
  +    soname_spec='${libname}${release}.so$major'
  +    dynamic_linker='NetBSD ld.elf_so'
  +  fi
  +  shlibpath_var=LD_LIBRARY_PATH
  +  shlibpath_overrides_runpath=yes
  +  hardcode_into_libs=yes
  +  ;;
  +
  +newsos6)
  +  version_type=linux
  +  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
  +  shlibpath_var=LD_LIBRARY_PATH
  +  shlibpath_overrides_runpath=yes
  +  ;;
  +
  +openbsd*)
  +  version_type=sunos
  +  if test "$with_gnu_ld" = yes; then
  +    need_lib_prefix=no
  +    need_version=no
  +  fi
  +  library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
  +  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
  +  shlibpath_var=LD_LIBRARY_PATH
  +  ;;
  +
  +os2*)
  +  libname_spec='$name'
  +  need_lib_prefix=no
  +  library_names_spec='$libname.dll $libname.a'
  +  dynamic_linker='OS/2 ld.exe'
  +  shlibpath_var=LIBPATH
  +  ;;
  +
  +osf3* | osf4* | osf5*)
  +  version_type=osf
  +  need_version=no
  +  soname_spec='${libname}${release}.so'
  +  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
  +  shlibpath_var=LD_LIBRARY_PATH
  +  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
  +  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
  +  ;;
  +
  +sco3.2v5*)
  +  version_type=osf
  +  soname_spec='${libname}${release}.so$major'
  +  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
  +  shlibpath_var=LD_LIBRARY_PATH
  +  ;;
  +
  +solaris*)
  +  version_type=linux
  +  need_lib_prefix=no
  +  need_version=no
  +  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
  +  soname_spec='${libname}${release}.so$major'
  +  shlibpath_var=LD_LIBRARY_PATH
  +  shlibpath_overrides_runpath=yes
  +  hardcode_into_libs=yes
  +  # ldd complains unless libraries are executable
  +  postinstall_cmds='chmod +x $lib'
  +  ;;
  +
  +sunos4*)
  +  version_type=sunos
  +  library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
  +  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
  +  shlibpath_var=LD_LIBRARY_PATH
  +  shlibpath_overrides_runpath=yes
  +  if test "$with_gnu_ld" = yes; then
  +    need_lib_prefix=no
  +  fi
  +  need_version=yes
  +  ;;
  +
  +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
  +  version_type=linux
  +  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
  +  soname_spec='${libname}${release}.so$major'
  +  shlibpath_var=LD_LIBRARY_PATH
  +  case $host_vendor in
  +    sni)
  +      shlibpath_overrides_runpath=no
  +      ;;
  +    motorola)
  +      need_lib_prefix=no
  +      need_version=no
  +      shlibpath_overrides_runpath=no
  +      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
  +      ;;
  +  esac
  +  ;;
  +
  +uts4*)
  +  version_type=linux
  +  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
  +  soname_spec='${libname}${release}.so$major'
  +  shlibpath_var=LD_LIBRARY_PATH
  +  ;;
  +
  +dgux*)
  +  version_type=linux
  +  need_lib_prefix=no
  +  need_version=no
  +  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
  +  soname_spec='${libname}${release}.so$major'
  +  shlibpath_var=LD_LIBRARY_PATH
  +  ;;
  +
  +sysv4*MP*)
  +  if test -d /usr/nec ;then
  +    version_type=linux
  +    library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so'
  +    soname_spec='$libname.so.$major'
  +    shlibpath_var=LD_LIBRARY_PATH
  +  fi
  +  ;;
  +
  +*)
  +  dynamic_linker=no
  +  ;;
  +esac
  +echo "$as_me:5298: result: $dynamic_linker" >&5
  +echo "${ECHO_T}$dynamic_linker" >&6
  +test "$dynamic_linker" = no && can_build_shared=no
  +##
  +## END FIXME
  +
  +## FIXME: this should be a separate macro
  +##
  +# Report the final consequences.
  +echo "$as_me:5307: checking if libtool supports shared libraries" >&5
  +echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6
  +echo "$as_me:5309: result: $can_build_shared" >&5
  +echo "${ECHO_T}$can_build_shared" >&6
  +##
  +## END FIXME
  +
  +if test "$hardcode_action" = relink; then
  +  # Fast installation is not supported
  +  enable_fast_install=no
  +elif test "$shlibpath_overrides_runpath" = yes ||
  +     test "$enable_shared" = no; then
  +  # Fast installation is not necessary
  +  enable_fast_install=needless
  +fi
  +
  +variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
  +if test "$GCC" = yes; then
  +  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
  +fi
  +
  +if test "x$enable_dlopen" != xyes; then
  +  enable_dlopen=unknown
  +  enable_dlopen_self=unknown
  +  enable_dlopen_self_static=unknown
  +else
  +  lt_cv_dlopen=no
  +  lt_cv_dlopen_libs=
  +
  +  case $host_os in
  +  beos*)
  +    lt_cv_dlopen="load_add_on"
  +    lt_cv_dlopen_libs=
  +    lt_cv_dlopen_self=yes
  +    ;;
  +
  +  cygwin* | mingw* | pw32*)
  +    lt_cv_dlopen="LoadLibrary"
  +    lt_cv_dlopen_libs=
  +   ;;
  +
  +  *)
  +    echo "$as_me:5349: checking for dlopen in -ldl" >&5
  +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
  +if test "${ac_cv_lib_dl_dlopen+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  ac_check_lib_save_LIBS=$LIBS
  +LIBS="-ldl  $LIBS"
  +cat >conftest.$ac_ext <<_ACEOF
  +#line 5357 "configure"
  +#include "confdefs.h"
  +
  +/* Override any gcc2 internal prototype to avoid an error.  */
  +#ifdef __cplusplus
  +extern "C"
  +#endif
  +/* We use char because int might match the return type of a gcc2
  +   builtin and then its argument prototype would still apply.  */
  +char dlopen ();
  +int
  +main ()
  +{
  +dlopen ();
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext conftest$ac_exeext
  +if { (eval echo "$as_me:5376: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:5379: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest$ac_exeext'
  +  { (eval echo "$as_me:5382: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:5385: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_cv_lib_dl_dlopen=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_lib_dl_dlopen=no
  +fi
  +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  +LIBS=$ac_check_lib_save_LIBS
  +fi
  +echo "$as_me:5396: result: $ac_cv_lib_dl_dlopen" >&5
  +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
  +if test $ac_cv_lib_dl_dlopen = yes; then
  +  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
  +else
  +  echo "$as_me:5401: checking for dlopen" >&5
  +echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
  +if test "${ac_cv_func_dlopen+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 5407 "configure"
  +#include "confdefs.h"
  +/* System header to define __stub macros and hopefully few prototypes,
  +    which can conflict with char dlopen (); below.  */
  +#include <assert.h>
  +/* Override any gcc2 internal prototype to avoid an error.  */
  +#ifdef __cplusplus
  +extern "C"
  +#endif
  +/* We use char because int might match the return type of a gcc2
  +   builtin and then its argument prototype would still apply.  */
  +char dlopen ();
  +char (*f) ();
  +
  +int
  +main ()
  +{
  +/* The GNU C library defines this for functions which it implements
  +    to always fail with ENOSYS.  Some functions are actually named
  +    something starting with __ and the normal name is an alias.  */
  +#if defined (__stub_dlopen) || defined (__stub___dlopen)
  +choke me
  +#else
  +f = dlopen;
  +#endif
  +
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext conftest$ac_exeext
  +if { (eval echo "$as_me:5438: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:5441: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest$ac_exeext'
  +  { (eval echo "$as_me:5444: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:5447: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_cv_func_dlopen=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_func_dlopen=no
  +fi
  +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  +fi
  +echo "$as_me:5457: result: $ac_cv_func_dlopen" >&5
  +echo "${ECHO_T}$ac_cv_func_dlopen" >&6
  +if test $ac_cv_func_dlopen = yes; then
  +  lt_cv_dlopen="dlopen"
  +else
  +  echo "$as_me:5462: checking for shl_load" >&5
  +echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
  +if test "${ac_cv_func_shl_load+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 5468 "configure"
  +#include "confdefs.h"
  +/* System header to define __stub macros and hopefully few prototypes,
  +    which can conflict with char shl_load (); below.  */
  +#include <assert.h>
  +/* Override any gcc2 internal prototype to avoid an error.  */
  +#ifdef __cplusplus
  +extern "C"
  +#endif
  +/* We use char because int might match the return type of a gcc2
  +   builtin and then its argument prototype would still apply.  */
  +char shl_load ();
  +char (*f) ();
  +
  +int
  +main ()
  +{
  +/* The GNU C library defines this for functions which it implements
  +    to always fail with ENOSYS.  Some functions are actually named
  +    something starting with __ and the normal name is an alias.  */
  +#if defined (__stub_shl_load) || defined (__stub___shl_load)
  +choke me
  +#else
  +f = shl_load;
  +#endif
  +
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext conftest$ac_exeext
  +if { (eval echo "$as_me:5499: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:5502: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest$ac_exeext'
  +  { (eval echo "$as_me:5505: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:5508: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_cv_func_shl_load=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_func_shl_load=no
  +fi
  +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  +fi
  +echo "$as_me:5518: result: $ac_cv_func_shl_load" >&5
  +echo "${ECHO_T}$ac_cv_func_shl_load" >&6
  +if test $ac_cv_func_shl_load = yes; then
  +  lt_cv_dlopen="shl_load"
  +else
  +  echo "$as_me:5523: checking for dlopen in -lsvld" >&5
  +echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
  +if test "${ac_cv_lib_svld_dlopen+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  ac_check_lib_save_LIBS=$LIBS
  +LIBS="-lsvld  $LIBS"
  +cat >conftest.$ac_ext <<_ACEOF
  +#line 5531 "configure"
  +#include "confdefs.h"
  +
  +/* Override any gcc2 internal prototype to avoid an error.  */
  +#ifdef __cplusplus
  +extern "C"
  +#endif
  +/* We use char because int might match the return type of a gcc2
  +   builtin and then its argument prototype would still apply.  */
  +char dlopen ();
  +int
  +main ()
  +{
  +dlopen ();
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext conftest$ac_exeext
  +if { (eval echo "$as_me:5550: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:5553: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest$ac_exeext'
  +  { (eval echo "$as_me:5556: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:5559: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_cv_lib_svld_dlopen=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_lib_svld_dlopen=no
  +fi
  +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  +LIBS=$ac_check_lib_save_LIBS
  +fi
  +echo "$as_me:5570: result: $ac_cv_lib_svld_dlopen" >&5
  +echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
  +if test $ac_cv_lib_svld_dlopen = yes; then
  +  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
  +else
  +  echo "$as_me:5575: checking for shl_load in -ldld" >&5
  +echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
  +if test "${ac_cv_lib_dld_shl_load+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  ac_check_lib_save_LIBS=$LIBS
  +LIBS="-ldld  $LIBS"
  +cat >conftest.$ac_ext <<_ACEOF
  +#line 5583 "configure"
  +#include "confdefs.h"
  +
  +/* Override any gcc2 internal prototype to avoid an error.  */
  +#ifdef __cplusplus
  +extern "C"
  +#endif
  +/* We use char because int might match the return type of a gcc2
  +   builtin and then its argument prototype would still apply.  */
  +char shl_load ();
  +int
  +main ()
  +{
  +shl_load ();
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext conftest$ac_exeext
  +if { (eval echo "$as_me:5602: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:5605: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest$ac_exeext'
  +  { (eval echo "$as_me:5608: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:5611: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_cv_lib_dld_shl_load=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_lib_dld_shl_load=no
  +fi
  +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  +LIBS=$ac_check_lib_save_LIBS
  +fi
  +echo "$as_me:5622: result: $ac_cv_lib_dld_shl_load" >&5
  +echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
  +if test $ac_cv_lib_dld_shl_load = yes; then
  +  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
  +fi
  +
  +fi
  +
  +fi
  +
  +fi
  +
  +fi
  +
  +    ;;
  +  esac
  +
  +  if test "x$lt_cv_dlopen" != xno; then
  +    enable_dlopen=yes
  +  else
  +    enable_dlopen=no
  +  fi
  +
  +  case $lt_cv_dlopen in
  +  dlopen)
  +    save_CPPFLAGS="$CPPFLAGS"
  +        test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
  +
  +    save_LDFLAGS="$LDFLAGS"
  +    eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
  +
  +    save_LIBS="$LIBS"
  +    LIBS="$lt_cv_dlopen_libs $LIBS"
  +
  +    echo "$as_me:5656: checking whether a program can dlopen itself" >&5
  +echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
  +if test "${lt_cv_dlopen_self+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  	  if test "$cross_compiling" = yes; then :
  +  lt_cv_dlopen_self=cross
  +else
  +    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
  +  lt_status=$lt_dlunknown
  +  cat > conftest.$ac_ext <<EOF
  +#line 5667 "configure"
  +#include "confdefs.h"
  +
  +#if HAVE_DLFCN_H
  +#include <dlfcn.h>
  +#endif
  +
  +#include <stdio.h>
  +
  +#ifdef RTLD_GLOBAL
  +#  define LT_DLGLOBAL		RTLD_GLOBAL
  +#else
  +#  ifdef DL_GLOBAL
  +#    define LT_DLGLOBAL		DL_GLOBAL
  +#  else
  +#    define LT_DLGLOBAL		0
  +#  endif
  +#endif
  +
  +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
  +   find out it does not work in some platform. */
  +#ifndef LT_DLLAZY_OR_NOW
  +#  ifdef RTLD_LAZY
  +#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
  +#  else
  +#    ifdef DL_LAZY
  +#      define LT_DLLAZY_OR_NOW		DL_LAZY
  +#    else
  +#      ifdef RTLD_NOW
  +#        define LT_DLLAZY_OR_NOW	RTLD_NOW
  +#      else
  +#        ifdef DL_NOW
  +#          define LT_DLLAZY_OR_NOW	DL_NOW
  +#        else
  +#          define LT_DLLAZY_OR_NOW	0
  +#        endif
  +#      endif
  +#    endif
  +#  endif
  +#endif
  +
  +#ifdef __cplusplus
  +extern "C" void exit (int);
  +#endif
  +
  +void fnord() { int i=42;}
  +int main ()
  +{
  +  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
  +  int status = $lt_dlunknown;
  +
  +  if (self)
  +    {
  +      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
  +      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
  +      /* dlclose (self); */
  +    }
  +
  +    exit (status);
  +}
  +EOF
  +  if { (eval echo "$as_me:5728: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:5731: \$? = $ac_status" >&5
  +  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
  +    (./conftest; exit; ) 2>/dev/null
  +    lt_status=$?
  +    case x$lt_status in
  +      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
  +      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
  +      x$lt_unknown|x*) lt_cv_dlopen_self=no ;;
  +    esac
  +  else :
  +    # compilation failed
  +    lt_cv_dlopen_self=no
  +  fi
  +fi
  +rm -fr conftest*
  +
  +fi
  +echo "$as_me:5748: result: $lt_cv_dlopen_self" >&5
  +echo "${ECHO_T}$lt_cv_dlopen_self" >&6
  +
  +    if test "x$lt_cv_dlopen_self" = xyes; then
  +      LDFLAGS="$LDFLAGS $link_static_flag"
  +      echo "$as_me:5753: checking whether a statically linked program can dlopen itself" >&5
  +echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
  +if test "${lt_cv_dlopen_self_static+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  	  if test "$cross_compiling" = yes; then :
  +  lt_cv_dlopen_self_static=cross
  +else
  +    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
  +  lt_status=$lt_dlunknown
     cat > conftest.$ac_ext <<EOF
  -#line 1203 "configure"
  +#line 5764 "configure"
   #include "confdefs.h"
  +
  +#if HAVE_DLFCN_H
  +#include <dlfcn.h>
  +#endif
  +
   #include <stdio.h>
  -main()
  +
  +#ifdef RTLD_GLOBAL
  +#  define LT_DLGLOBAL		RTLD_GLOBAL
  +#else
  +#  ifdef DL_GLOBAL
  +#    define LT_DLGLOBAL		DL_GLOBAL
  +#  else
  +#    define LT_DLGLOBAL		0
  +#  endif
  +#endif
  +
  +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
  +   find out it does not work in some platform. */
  +#ifndef LT_DLLAZY_OR_NOW
  +#  ifdef RTLD_LAZY
  +#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
  +#  else
  +#    ifdef DL_LAZY
  +#      define LT_DLLAZY_OR_NOW		DL_LAZY
  +#    else
  +#      ifdef RTLD_NOW
  +#        define LT_DLLAZY_OR_NOW	RTLD_NOW
  +#      else
  +#        ifdef DL_NOW
  +#          define LT_DLLAZY_OR_NOW	DL_NOW
  +#        else
  +#          define LT_DLLAZY_OR_NOW	0
  +#        endif
  +#      endif
  +#    endif
  +#  endif
  +#endif
  +
  +#ifdef __cplusplus
  +extern "C" void exit (int);
  +#endif
  +
  +void fnord() { int i=42;}
  +int main ()
   {
  -  FILE *f=fopen("conftestval", "w");
  -  if (!f) exit(1);
  -  fprintf(f, "%d\n", sizeof(char));
  -  exit(0);
  +  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
  +  int status = $lt_dlunknown;
  +
  +  if (self)
  +    {
  +      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
  +      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
  +      /* dlclose (self); */
  +    }
  +
  +    exit (status);
   }
  +EOF
  +  if { (eval echo "$as_me:5825: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:5828: \$? = $ac_status" >&5
  +  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
  +    (./conftest; exit; ) 2>/dev/null
  +    lt_status=$?
  +    case x$lt_status in
  +      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
  +      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
  +      x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;;
  +    esac
  +  else :
  +    # compilation failed
  +    lt_cv_dlopen_self_static=no
  +  fi
  +fi
  +rm -fr conftest*
  +
  +fi
  +echo "$as_me:5845: result: $lt_cv_dlopen_self_static" >&5
  +echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6
  +    fi
  +
  +    CPPFLAGS="$save_CPPFLAGS"
  +    LDFLAGS="$save_LDFLAGS"
  +    LIBS="$save_LIBS"
  +    ;;
  +  esac
  +
  +  case $lt_cv_dlopen_self in
  +  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
  +  *) enable_dlopen_self=unknown ;;
  +  esac
  +
  +  case $lt_cv_dlopen_self_static in
  +  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
  +  *) enable_dlopen_self_static=unknown ;;
  +  esac
  +fi
  +
  +## FIXME: this should be a separate macro
  +##
  +if test "$enable_shared" = yes && test "$GCC" = yes; then
  +  case $archive_cmds in
  +  *'~'*)
  +    # FIXME: we may have to deal with multi-command sequences.
  +    ;;
  +  '$CC '*)
  +    # Test whether the compiler implicitly links with -lc since on some
  +    # systems, -lgcc has to come before -lc. If gcc already passes -lc
  +    # to ld, don't add -lc before -lgcc.
  +    echo "$as_me:5877: checking whether -lc should be explicitly linked in" >&5
  +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
  +    if test "${lt_cv_archive_cmds_need_lc+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  $rm conftest*
  +    echo 'static int dummy;' > conftest.$ac_ext
  +
  +    if { (eval echo "$as_me:5885: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:5888: \$? = $ac_status" >&5
  +  (exit $ac_status); }; then
  +      soname=conftest
  +      lib=conftest
  +      libobjs=conftest.$ac_objext
  +      deplibs=
  +      wl=$lt_cv_prog_cc_wl
  +      compiler_flags=-v
  +      linker_flags=-v
  +      verstring=
  +      output_objdir=.
  +      libname=conftest
  +      save_allow_undefined_flag=$allow_undefined_flag
  +      allow_undefined_flag=
  +      if { (eval echo "$as_me:5902: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
  +  (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
  +  ac_status=$?
  +  echo "$as_me:5905: \$? = $ac_status" >&5
  +  (exit $ac_status); }
  +      then
  +	lt_cv_archive_cmds_need_lc=no
  +      else
  +	lt_cv_archive_cmds_need_lc=yes
  +      fi
  +      allow_undefined_flag=$save_allow_undefined_flag
  +    else
  +      cat conftest.err 1>&5
  +    fi
  +fi
  +
  +    echo "$as_me:5918: result: $lt_cv_archive_cmds_need_lc" >&5
  +echo "${ECHO_T}$lt_cv_archive_cmds_need_lc" >&6
  +    ;;
  +  esac
  +fi
  +need_lc=${lt_cv_archive_cmds_need_lc-yes}
  +##
  +## END FIXME
  +
  +## FIXME: this should be a separate macro
  +##
  +# The second clause should only fire when bootstrapping the
  +# libtool distribution, otherwise you forgot to ship ltmain.sh
  +# with your package, and you will get complaints that there are
  +# no rules to generate ltmain.sh.
  +if test -f "$ltmain"; then
  +  :
  +else
  +  # If there is no Makefile yet, we rely on a make rule to execute
  +  # `config.status --recheck' to rerun these tests and create the
  +  # libtool script then.
  +  test -f Makefile && make "$ltmain"
  +fi
  +
  +if test -f "$ltmain"; then
  +  trap "$rm \"${ofile}T\"; exit 1" 1 2 15
  +  $rm -f "${ofile}T"
  +
  +  echo creating $ofile
  +
  +  # Now quote all the things that may contain metacharacters while being
  +  # careful not to overquote the AC_SUBSTed values.  We take copies of the
  +  # variables and quote the copies for generation of the libtool script.
  +  for var in echo old_CC old_CFLAGS \
  +    AR AR_FLAGS CC LD LN_S NM SHELL \
  +    reload_flag reload_cmds wl \
  +    pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \
  +    thread_safe_flag_spec whole_archive_flag_spec libname_spec \
  +    library_names_spec soname_spec \
  +    RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \
  +    old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds \
  +    postuninstall_cmds extract_expsyms_cmds old_archive_from_expsyms_cmds \
  +    old_striplib striplib file_magic_cmd export_symbols_cmds \
  +    deplibs_check_method allow_undefined_flag no_undefined_flag \
  +    finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \
  +    hardcode_libdir_flag_spec hardcode_libdir_separator  \
  +    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
  +    compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do
  +
  +    case $var in
  +    reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \
  +    old_postinstall_cmds | old_postuninstall_cmds | \
  +    export_symbols_cmds | archive_cmds | archive_expsym_cmds | \
  +    extract_expsyms_cmds | old_archive_from_expsyms_cmds | \
  +    postinstall_cmds | postuninstall_cmds | \
  +    finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
  +      # Double-quote double-evaled strings.
  +      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
  +      ;;
  +    *)
  +      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
  +      ;;
  +    esac
  +  done
  +
  +  cat <<__EOF__ > "${ofile}T"
  +#! $SHELL
  +
  +# `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
  +# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
  +# NOTE: Changes made to this file will be lost: look at ltmain.sh.
  +#
  +# Copyright (C) 1996-2000 Free Software Foundation, Inc.
  +# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
  +#
  +# This program is free software; you can redistribute it and/or modify
  +# it under the terms of the GNU General Public License as published by
  +# the Free Software Foundation; either version 2 of the License, or
  +# (at your option) any later version.
  +#
  +# This program is distributed in the hope that it will be useful, but
  +# WITHOUT ANY WARRANTY; without even the implied warranty of
  +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  +# General Public License for more details.
  +#
  +# You should have received a copy of the GNU General Public License
  +# along with this program; if not, write to the Free Software
  +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  +#
  +# As a special exception to the GNU General Public License, if you
  +# distribute this file as part of a program that contains a
  +# configuration script generated by Autoconf, you may include it under
  +# the same distribution terms that you use for the rest of that program.
  +
  +# Sed that helps us avoid accidentally triggering echo(1) options like -n.
  +Xsed="sed -e s/^X//"
  +
  +# The HP-UX ksh and POSIX shell print the target directory to stdout
  +# if CDPATH is set.
  +if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
  +
  +# ### BEGIN LIBTOOL CONFIG
  +
  +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
  +
  +# Shell to use when invoking shell scripts.
  +SHELL=$lt_SHELL
  +
  +# Whether or not to build shared libraries.
  +build_libtool_libs=$enable_shared
  +
  +# Whether or not to add -lc for building shared libraries.
  +build_libtool_need_lc=$need_lc
  +
  +# Whether or not to build static libraries.
  +build_old_libs=$enable_static
  +
  +# Whether or not to optimize for fast installation.
  +fast_install=$enable_fast_install
  +
  +# The host system.
  +host_alias=$host_alias
  +host=$host
  +
  +# An echo program that does not interpret backslashes.
  +echo=$lt_echo
  +
  +# The archiver.
  +AR=$lt_AR
  +AR_FLAGS=$lt_AR_FLAGS
  +
  +# The default C compiler.
  +CC=$lt_CC
  +
  +# Is the compiler the GNU C compiler?
  +with_gcc=$GCC
  +
  +# The linker used to build libraries.
  +LD=$lt_LD
  +
  +# Whether we need hard or soft links.
  +LN_S=$lt_LN_S
  +
  +# A BSD-compatible nm program.
  +NM=$lt_NM
  +
  +# A symbol stripping program
  +STRIP=$STRIP
  +
  +# Used to examine libraries when file_magic_cmd begins "file"
  +MAGIC_CMD=$MAGIC_CMD
  +
  +# Used on cygwin: DLL creation program.
  +DLLTOOL="$DLLTOOL"
  +
  +# Used on cygwin: object dumper.
  +OBJDUMP="$OBJDUMP"
  +
  +# Used on cygwin: assembler.
  +AS="$AS"
  +
  +# The name of the directory that contains temporary libtool files.
  +objdir=$objdir
  +
  +# How to create reloadable object files.
  +reload_flag=$lt_reload_flag
  +reload_cmds=$lt_reload_cmds
  +
  +# How to pass a linker flag through the compiler.
  +wl=$lt_wl
  +
  +# Object file suffix (normally "o").
  +objext="$ac_objext"
  +
  +# Old archive suffix (normally "a").
  +libext="$libext"
  +
  +# Executable file suffix (normally "").
  +exeext="$exeext"
  +
  +# Additional compiler flags for building library objects.
  +pic_flag=$lt_pic_flag
  +pic_mode=$pic_mode
  +
  +# Does compiler simultaneously support -c and -o options?
  +compiler_c_o=$lt_compiler_c_o
  +
  +# Can we write directly to a .lo ?
  +compiler_o_lo=$lt_compiler_o_lo
  +
  +# Must we lock files when doing compilation ?
  +need_locks=$lt_need_locks
  +
  +# Do we need the lib prefix for modules?
  +need_lib_prefix=$need_lib_prefix
  +
  +# Do we need a version for libraries?
  +need_version=$need_version
  +
  +# Whether dlopen is supported.
  +dlopen_support=$enable_dlopen
  +
  +# Whether dlopen of programs is supported.
  +dlopen_self=$enable_dlopen_self
  +
  +# Whether dlopen of statically linked programs is supported.
  +dlopen_self_static=$enable_dlopen_self_static
  +
  +# Compiler flag to prevent dynamic linking.
  +link_static_flag=$lt_link_static_flag
  +
  +# Compiler flag to turn off builtin functions.
  +no_builtin_flag=$lt_no_builtin_flag
  +
  +# Compiler flag to allow reflexive dlopens.
  +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
  +
  +# Compiler flag to generate shared objects directly from archives.
  +whole_archive_flag_spec=$lt_whole_archive_flag_spec
  +
  +# Compiler flag to generate thread-safe objects.
  +thread_safe_flag_spec=$lt_thread_safe_flag_spec
  +
  +# Library versioning type.
  +version_type=$version_type
  +
  +# Format of library name prefix.
  +libname_spec=$lt_libname_spec
  +
  +# List of archive names.  First name is the real one, the rest are links.
  +# The last name is the one that the linker finds with -lNAME.
  +library_names_spec=$lt_library_names_spec
  +
  +# The coded name of the library, if different from the real name.
  +soname_spec=$lt_soname_spec
  +
  +# Commands used to build and install an old-style archive.
  +RANLIB=$lt_RANLIB
  +old_archive_cmds=$lt_old_archive_cmds
  +old_postinstall_cmds=$lt_old_postinstall_cmds
  +old_postuninstall_cmds=$lt_old_postuninstall_cmds
  +
  +# Create an old-style archive from a shared archive.
  +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
  +
  +# Create a temporary old-style archive to link instead of a shared archive.
  +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
  +
  +# Commands used to build and install a shared archive.
  +archive_cmds=$lt_archive_cmds
  +archive_expsym_cmds=$lt_archive_expsym_cmds
  +postinstall_cmds=$lt_postinstall_cmds
  +postuninstall_cmds=$lt_postuninstall_cmds
  +
  +# Commands to strip libraries.
  +old_striplib=$lt_old_striplib
  +striplib=$lt_striplib
  +
  +# Method to check whether dependent libraries are shared objects.
  +deplibs_check_method=$lt_deplibs_check_method
  +
  +# Command to use when deplibs_check_method == file_magic.
  +file_magic_cmd=$lt_file_magic_cmd
  +
  +# Flag that allows shared libraries with undefined symbols to be built.
  +allow_undefined_flag=$lt_allow_undefined_flag
  +
  +# Flag that forces no undefined symbols.
  +no_undefined_flag=$lt_no_undefined_flag
  +
  +# Commands used to finish a libtool library installation in a directory.
  +finish_cmds=$lt_finish_cmds
  +
  +# Same as above, but a single script fragment to be evaled but not shown.
  +finish_eval=$lt_finish_eval
  +
  +# Take the output of nm and produce a listing of raw symbols and C names.
  +global_symbol_pipe=$lt_global_symbol_pipe
  +
  +# Transform the output of nm in a proper C declaration
  +global_symbol_to_cdecl=$lt_global_symbol_to_cdecl
  +
  +# This is the shared library runtime path variable.
  +runpath_var=$runpath_var
  +
  +# This is the shared library path variable.
  +shlibpath_var=$shlibpath_var
  +
  +# Is shlibpath searched before the hard-coded library search path?
  +shlibpath_overrides_runpath=$shlibpath_overrides_runpath
  +
  +# How to hardcode a shared library path into an executable.
  +hardcode_action=$hardcode_action
  +
  +# Whether we should hardcode library paths into libraries.
  +hardcode_into_libs=$hardcode_into_libs
  +
  +# Flag to hardcode \$libdir into a binary during linking.
  +# This must work even if \$libdir does not exist.
  +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
  +
  +# Whether we need a single -rpath flag with a separated argument.
  +hardcode_libdir_separator=$lt_hardcode_libdir_separator
  +
  +# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
  +# resulting binary.
  +hardcode_direct=$hardcode_direct
  +
  +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
  +# resulting binary.
  +hardcode_minus_L=$hardcode_minus_L
  +
  +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
  +# the resulting binary.
  +hardcode_shlibpath_var=$hardcode_shlibpath_var
  +
  +# Variables whose values should be saved in libtool wrapper scripts and
  +# restored at relink time.
  +variables_saved_for_relink="$variables_saved_for_relink"
  +
  +# Whether libtool must link a program against all its dependency libraries.
  +link_all_deplibs=$link_all_deplibs
  +
  +# Compile-time system search path for libraries
  +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
  +
  +# Run-time system search path for libraries
  +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
  +
  +# Fix the shell variable \$srcfile for the compiler.
  +fix_srcfile_path="$fix_srcfile_path"
  +
  +# Set to yes if exported symbols are required.
  +always_export_symbols=$always_export_symbols
  +
  +# The commands to list exported symbols.
  +export_symbols_cmds=$lt_export_symbols_cmds
  +
  +# The commands to extract the exported symbol list from a shared archive.
  +extract_expsyms_cmds=$lt_extract_expsyms_cmds
  +
  +# Symbols that should not be listed in the preloaded symbols.
  +exclude_expsyms=$lt_exclude_expsyms
  +
  +# Symbols that must always be exported.
  +include_expsyms=$lt_include_expsyms
  +
  +# ### END LIBTOOL CONFIG
  +
  +__EOF__
  +
  +  case $host_os in
  +  aix3*)
  +    cat <<\EOF >> "${ofile}T"
  +
  +# AIX sometimes has problems with the GCC collect2 program.  For some
  +# reason, if we set the COLLECT_NAMES environment variable, the problems
  +# vanish in a puff of smoke.
  +if test "X${COLLECT_NAMES+set}" != Xset; then
  +  COLLECT_NAMES=
  +  export COLLECT_NAMES
  +fi
  +EOF
  +    ;;
  +  esac
  +
  +  case $host_os in
  +  cygwin* | mingw* | pw32* | os2*)
  +    cat <<'EOF' >> "${ofile}T"
  +      # This is a source program that is used to create dlls on Windows
  +      # Don't remove nor modify the starting and closing comments
  +# /* ltdll.c starts here */
  +# #define WIN32_LEAN_AND_MEAN
  +# #include <windows.h>
  +# #undef WIN32_LEAN_AND_MEAN
  +# #include <stdio.h>
  +#
  +# #ifndef __CYGWIN__
  +# #  ifdef __CYGWIN32__
  +# #    define __CYGWIN__ __CYGWIN32__
  +# #  endif
  +# #endif
  +#
  +# #ifdef __cplusplus
  +# extern "C" {
  +# #endif
  +# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
  +# #ifdef __cplusplus
  +# }
  +# #endif
  +#
  +# #ifdef __CYGWIN__
  +# #include <cygwin/cygwin_dll.h>
  +# DECLARE_CYGWIN_DLL( DllMain );
  +# #endif
  +# HINSTANCE __hDllInstance_base;
  +#
  +# BOOL APIENTRY
  +# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
  +# {
  +#   __hDllInstance_base = hInst;
  +#   return TRUE;
  +# }
  +# /* ltdll.c ends here */
  +        # This is a source program that is used to create import libraries
  +        # on Windows for dlls which lack them. Don't remove nor modify the
  +        # starting and closing comments
  +# /* impgen.c starts here */
  +# /*   Copyright (C) 1999-2000 Free Software Foundation, Inc.
  +#
  +#  This file is part of GNU libtool.
  +#
  +#  This program is free software; you can redistribute it and/or modify
  +#  it under the terms of the GNU General Public License as published by
  +#  the Free Software Foundation; either version 2 of the License, or
  +#  (at your option) any later version.
  +#
  +#  This program is distributed in the hope that it will be useful,
  +#  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  +#  GNU General Public License for more details.
  +#
  +#  You should have received a copy of the GNU General Public License
  +#  along with this program; if not, write to the Free Software
  +#  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  +#  */
  +#
  +# #include <stdio.h>		/* for printf() */
  +# #include <unistd.h>		/* for open(), lseek(), read() */
  +# #include <fcntl.h>		/* for O_RDONLY, O_BINARY */
  +# #include <string.h>		/* for strdup() */
  +#
  +# /* O_BINARY isn't required (or even defined sometimes) under Unix */
  +# #ifndef O_BINARY
  +# #define O_BINARY 0
  +# #endif
  +#
  +# static unsigned int
  +# pe_get16 (fd, offset)
  +#      int fd;
  +#      int offset;
  +# {
  +#   unsigned char b[2];
  +#   lseek (fd, offset, SEEK_SET);
  +#   read (fd, b, 2);
  +#   return b[0] + (b[1]<<8);
  +# }
  +#
  +# static unsigned int
  +# pe_get32 (fd, offset)
  +#     int fd;
  +#     int offset;
  +# {
  +#   unsigned char b[4];
  +#   lseek (fd, offset, SEEK_SET);
  +#   read (fd, b, 4);
  +#   return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
  +# }
  +#
  +# static unsigned int
  +# pe_as32 (ptr)
  +#      void *ptr;
  +# {
  +#   unsigned char *b = ptr;
  +#   return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
  +# }
  +#
  +# int
  +# main (argc, argv)
  +#     int argc;
  +#     char *argv[];
  +# {
  +#     int dll;
  +#     unsigned long pe_header_offset, opthdr_ofs, num_entries, i;
  +#     unsigned long export_rva, export_size, nsections, secptr, expptr;
  +#     unsigned long name_rvas, nexp;
  +#     unsigned char *expdata, *erva;
  +#     char *filename, *dll_name;
  +#
  +#     filename = argv[1];
  +#
  +#     dll = open(filename, O_RDONLY|O_BINARY);
  +#     if (dll < 1)
  +# 	return 1;
  +#
  +#     dll_name = filename;
  +#
  +#     for (i=0; filename[i]; i++)
  +# 	if (filename[i] == '/' || filename[i] == '\\'  || filename[i] == ':')
  +# 	    dll_name = filename + i +1;
  +#
  +#     pe_header_offset = pe_get32 (dll, 0x3c);
  +#     opthdr_ofs = pe_header_offset + 4 + 20;
  +#     num_entries = pe_get32 (dll, opthdr_ofs + 92);
  +#
  +#     if (num_entries < 1) /* no exports */
  +# 	return 1;
  +#
  +#     export_rva = pe_get32 (dll, opthdr_ofs + 96);
  +#     export_size = pe_get32 (dll, opthdr_ofs + 100);
  +#     nsections = pe_get16 (dll, pe_header_offset + 4 +2);
  +#     secptr = (pe_header_offset + 4 + 20 +
  +# 	      pe_get16 (dll, pe_header_offset + 4 + 16));
  +#
  +#     expptr = 0;
  +#     for (i = 0; i < nsections; i++)
  +#     {
  +# 	char sname[8];
  +# 	unsigned long secptr1 = secptr + 40 * i;
  +# 	unsigned long vaddr = pe_get32 (dll, secptr1 + 12);
  +# 	unsigned long vsize = pe_get32 (dll, secptr1 + 16);
  +# 	unsigned long fptr = pe_get32 (dll, secptr1 + 20);
  +# 	lseek(dll, secptr1, SEEK_SET);
  +# 	read(dll, sname, 8);
  +# 	if (vaddr <= export_rva && vaddr+vsize > export_rva)
  +# 	{
  +# 	    expptr = fptr + (export_rva - vaddr);
  +# 	    if (export_rva + export_size > vaddr + vsize)
  +# 		export_size = vsize - (export_rva - vaddr);
  +# 	    break;
  +# 	}
  +#     }
  +#
  +#     expdata = (unsigned char*)malloc(export_size);
  +#     lseek (dll, expptr, SEEK_SET);
  +#     read (dll, expdata, export_size);
  +#     erva = expdata - export_rva;
  +#
  +#     nexp = pe_as32 (expdata+24);
  +#     name_rvas = pe_as32 (expdata+32);
  +#
  +#     printf ("EXPORTS\n");
  +#     for (i = 0; i<nexp; i++)
  +#     {
  +# 	unsigned long name_rva = pe_as32 (erva+name_rvas+i*4);
  +# 	printf ("\t%s @ %ld ;\n", erva+name_rva, 1+ i);
  +#     }
  +#
  +#     return 0;
  +# }
  +# /* impgen.c ends here */
  +
   EOF
  -if { (eval echo configure:1214: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
  -then
  -  ac_cv_sizeof_char=`cat conftestval`
  +    ;;
  +  esac
  +
  +  # We use sed instead of cat because bash on DJGPP gets confused if
  +  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
  +  # text mode, it properly converts lines to CR/LF.  This bash problem
  +  # is reportedly fixed, but why not run on old versions too?
  +  sed '$q' "$ltmain" >> "${ofile}T" || (rm -f "${ofile}T"; exit 1)
  +
  +  mv -f "${ofile}T" "$ofile" || \
  +    (rm -f "$ofile" && cp "${ofile}T" "$ofile" && rm -f "${ofile}T")
  +  chmod +x "$ofile"
  +fi
  +##
  +## END FIXME
  +
  +# This can be used to rebuild libtool when needed
  +LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
  +
  +# Always use our own libtool.
  +LIBTOOL='$(SHELL) $(top_builddir)/libtool'
  +
  +# Prevent multiple expansion
  +
  +echo "$as_me:6485: checking for ANSI C header files" >&5
  +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
  +if test "${ac_cv_header_stdc+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  echo "configure: failed program was:" >&5
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 6491 "configure"
  +#include "confdefs.h"
  +#include <stdlib.h>
  +#include <stdarg.h>
  +#include <string.h>
  +#include <float.h>
  +
  +_ACEOF
  +if { (eval echo "$as_me:6499: \"$ac_cpp conftest.$ac_ext\"") >&5
  +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  +  ac_status=$?
  +  egrep -v '^ *\+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:6505: \$? = $ac_status" >&5
  +  (exit $ac_status); } >/dev/null; then
  +  if test -s conftest.err; then
  +    ac_cpp_err=$ac_c_preproc_warn_flag
  +  else
  +    ac_cpp_err=
  +  fi
  +else
  +  ac_cpp_err=yes
  +fi
  +if test -z "$ac_cpp_err"; then
  +  ac_cv_header_stdc=yes
  +else
  +  echo "$as_me: failed program was:" >&5
     cat conftest.$ac_ext >&5
  -  rm -fr conftest*
  -  ac_cv_sizeof_char=0
  +  ac_cv_header_stdc=no
   fi
  -rm -fr conftest*
  +rm -f conftest.err conftest.$ac_ext
  +
  +if test $ac_cv_header_stdc = yes; then
  +  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 6527 "configure"
  +#include "confdefs.h"
  +#include <string.h>
  +
  +_ACEOF
  +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
  +  egrep "memchr" >/dev/null 2>&1; then
  +  :
  +else
  +  ac_cv_header_stdc=no
   fi
  +rm -f conftest*
   
   fi
  -echo "$ac_t""$ac_cv_sizeof_char" 1>&6
  -cat >> confdefs.h <<EOF
  -#define SIZEOF_CHAR $ac_cv_sizeof_char
  -EOF
   
  +if test $ac_cv_header_stdc = yes; then
  +  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 6545 "configure"
  +#include "confdefs.h"
  +#include <stdlib.h>
   
  -echo $ac_n "checking size of short""... $ac_c" 1>&6
  -echo "configure:1234: checking size of short" >&5
  -if eval "test \"`echo '$''{'ac_cv_sizeof_short'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +_ACEOF
  +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
  +  egrep "free" >/dev/null 2>&1; then
  +  :
   else
  +  ac_cv_header_stdc=no
  +fi
  +rm -f conftest*
  +
  +fi
  +
  +if test $ac_cv_header_stdc = yes; then
  +  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
     if test "$cross_compiling" = yes; then
  -  ac_cv_sizeof_short=2
  +  :
   else
  -  cat > conftest.$ac_ext <<EOF
  -#line 1242 "configure"
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 6566 "configure"
   #include "confdefs.h"
  -#include <stdio.h>
  -main()
  +#include <ctype.h>
  +#if ((' ' & 0x0FF) == 0x020)
  +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
  +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
  +#else
  +# define ISLOWER(c) (('a' <= (c) && (c) <= 'i') \
  +                     || ('j' <= (c) && (c) <= 'r') \
  +                     || ('s' <= (c) && (c) <= 'z'))
  +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
  +#endif
  +
  +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
  +int
  +main ()
   {
  -  FILE *f=fopen("conftestval", "w");
  -  if (!f) exit(1);
  -  fprintf(f, "%d\n", sizeof(short));
  -  exit(0);
  +  int i;
  +  for (i = 0; i < 256; i++)
  +    if (XOR (islower (i), ISLOWER (i))
  +        || toupper (i) != TOUPPER (i))
  +      exit(2);
  +  exit (0);
   }
  -EOF
  -if { (eval echo configure:1253: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
  -then
  -  ac_cv_sizeof_short=`cat conftestval`
  +_ACEOF
  +rm -f conftest$ac_exeext
  +if { (eval echo "$as_me:6592: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:6595: \$? = $ac_status" >&5
  +  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
  +  { (eval echo "$as_me:6597: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:6600: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  :
   else
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  rm -fr conftest*
  -  ac_cv_sizeof_short=0
  +  echo "$as_me: program exited with status $ac_status" >&5
  +echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_header_stdc=no
   fi
  -rm -fr conftest*
  +rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
  +fi
  +fi
   fi
  +echo "$as_me:6613: result: $ac_cv_header_stdc" >&5
  +echo "${ECHO_T}$ac_cv_header_stdc" >&6
  +if test $ac_cv_header_stdc = yes; then
   
  +cat >>confdefs.h <<\EOF
  +#define STDC_HEADERS 1
  +EOF
  +
   fi
  -echo "$ac_t""$ac_cv_sizeof_short" 1>&6
  -cat >> confdefs.h <<EOF
  -#define SIZEOF_SHORT $ac_cv_sizeof_short
  +
  +# On IRIX 5.3, sys/types and inttypes.h are conflicting.
  +
  +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
  +                  inttypes.h stdint.h unistd.h
  +do
  +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
  +echo "$as_me:6629: checking for $ac_header" >&5
  +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
  +if eval "test \"\${$as_ac_Header+set}\" = set"; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 6635 "configure"
  +#include "confdefs.h"
  +$ac_includes_default
  +#include <$ac_header>
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:6641: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:6644: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:6647: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:6650: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  eval "$as_ac_Header=yes"
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +eval "$as_ac_Header=no"
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +fi
  +echo "$as_me:6660: result: `eval echo '${'$as_ac_Header'}'`" >&5
  +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
  +if test `eval echo '${'$as_ac_Header'}'` = yes; then
  +  cat >>confdefs.h <<EOF
  +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
   EOF
   
  +fi
  +done
   
  -echo $ac_n "checking size of int""... $ac_c" 1>&6
  -echo "configure:1273: checking size of int" >&5
  -if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +echo "$as_me:6670: checking for char" >&5
  +echo $ECHO_N "checking for char... $ECHO_C" >&6
  +if test "${ac_cv_type_char+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 6676 "configure"
  +#include "confdefs.h"
  +$ac_includes_default
  +int
  +main ()
  +{
  +if ((char *) 0)
  +  return 0;
  +if (sizeof (char))
  +  return 0;
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:6691: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:6694: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:6697: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:6700: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_cv_type_char=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_type_char=no
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +fi
  +echo "$as_me:6710: result: $ac_cv_type_char" >&5
  +echo "${ECHO_T}$ac_cv_type_char" >&6
  +
  +echo "$as_me:6713: checking size of char" >&5
  +echo $ECHO_N "checking size of char... $ECHO_C" >&6
  +if test "${ac_cv_sizeof_char+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  +  if test "$ac_cv_type_char" = yes; then
     if test "$cross_compiling" = yes; then
  -  ac_cv_sizeof_int=4
  +  # Depending upon the size, compute the lo and hi bounds.
  +cat >conftest.$ac_ext <<_ACEOF
  +#line 6722 "configure"
  +#include "confdefs.h"
  +$ac_includes_default
  +int
  +main ()
  +{
  +int _array_ [1 - 2 * !((sizeof (char)) >= 0)]
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:6734: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:6737: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:6740: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:6743: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_lo=0 ac_mid=0
  +  while :; do
  +    cat >conftest.$ac_ext <<_ACEOF
  +#line 6748 "configure"
  +#include "confdefs.h"
  +$ac_includes_default
  +int
  +main ()
  +{
  +int _array_ [1 - 2 * !((sizeof (char)) <= $ac_mid)]
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:6760: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:6763: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:6766: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:6769: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_hi=$ac_mid; break
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_lo=`expr $ac_mid + 1`; ac_mid=`expr 2 '*' $ac_mid + 1`
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +  done
   else
  -  cat > conftest.$ac_ext <<EOF
  -#line 1281 "configure"
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_hi=-1 ac_mid=-1
  +  while :; do
  +    cat >conftest.$ac_ext <<_ACEOF
  +#line 6785 "configure"
   #include "confdefs.h"
  -#include <stdio.h>
  -main()
  +$ac_includes_default
  +int
  +main ()
  +{
  +int _array_ [1 - 2 * !((sizeof (char)) >= $ac_mid)]
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:6797: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:6800: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:6803: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:6806: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_lo=$ac_mid; break
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_hi=`expr $ac_mid - 1`; ac_mid=`expr 2 '*' $ac_mid`
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +  done
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +# Binary search between lo and hi bounds.
  +while test "x$ac_lo" != "x$ac_hi"; do
  +  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 6822 "configure"
  +#include "confdefs.h"
  +$ac_includes_default
  +int
  +main ()
  +{
  +int _array_ [1 - 2 * !((sizeof (char)) <= $ac_mid)]
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:6834: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:6837: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:6840: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:6843: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_hi=$ac_mid
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_lo=`expr $ac_mid + 1`
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +done
  +ac_cv_sizeof_char=$ac_lo
  +else
  +  if test "$cross_compiling" = yes; then
  +  { { echo "$as_me:6856: error: cannot run test program while cross compiling" >&5
  +echo "$as_me: error: cannot run test program while cross compiling" >&2;}
  +   { (exit 1); exit 1; }; }
  +else
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 6861 "configure"
  +#include "confdefs.h"
  +$ac_includes_default
  +int
  +main ()
   {
  -  FILE *f=fopen("conftestval", "w");
  -  if (!f) exit(1);
  -  fprintf(f, "%d\n", sizeof(int));
  -  exit(0);
  +FILE *f = fopen ("conftest.val", "w");
  +if (!f)
  +  exit (1);
  +fprintf (f, "%d", (sizeof (char)));
  +fclose (f);
  +  ;
  +  return 0;
   }
  +_ACEOF
  +rm -f conftest$ac_exeext
  +if { (eval echo "$as_me:6877: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:6880: \$? = $ac_status" >&5
  +  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
  +  { (eval echo "$as_me:6882: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:6885: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_cv_sizeof_char=`cat conftest.val`
  +else
  +  echo "$as_me: program exited with status $ac_status" >&5
  +echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +fi
  +rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
  +fi
  +fi
  +rm -f conftest.val
  +else
  +  ac_cv_sizeof_char=0
  +fi
  +fi
  +echo "$as_me:6901: result: $ac_cv_sizeof_char" >&5
  +echo "${ECHO_T}$ac_cv_sizeof_char" >&6
  +cat >>confdefs.h <<EOF
  +#define SIZEOF_CHAR $ac_cv_sizeof_char
   EOF
  -if { (eval echo configure:1292: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
  -then
  -  ac_cv_sizeof_int=`cat conftestval`
  +
  +echo "$as_me:6907: checking for short" >&5
  +echo $ECHO_N "checking for short... $ECHO_C" >&6
  +if test "${ac_cv_type_short+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  rm -fr conftest*
  -  ac_cv_sizeof_int=0
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 6913 "configure"
  +#include "confdefs.h"
  +$ac_includes_default
  +int
  +main ()
  +{
  +if ((short *) 0)
  +  return 0;
  +if (sizeof (short))
  +  return 0;
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:6928: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:6931: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:6934: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:6937: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_cv_type_short=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_type_short=no
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +fi
  +echo "$as_me:6947: result: $ac_cv_type_short" >&5
  +echo "${ECHO_T}$ac_cv_type_short" >&6
  +
  +echo "$as_me:6950: checking size of short" >&5
  +echo $ECHO_N "checking size of short... $ECHO_C" >&6
  +if test "${ac_cv_sizeof_short+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test "$ac_cv_type_short" = yes; then
  +  if test "$cross_compiling" = yes; then
  +  # Depending upon the size, compute the lo and hi bounds.
  +cat >conftest.$ac_ext <<_ACEOF
  +#line 6959 "configure"
  +#include "confdefs.h"
  +$ac_includes_default
  +int
  +main ()
  +{
  +int _array_ [1 - 2 * !((sizeof (short)) >= 0)]
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:6971: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:6974: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:6977: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:6980: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_lo=0 ac_mid=0
  +  while :; do
  +    cat >conftest.$ac_ext <<_ACEOF
  +#line 6985 "configure"
  +#include "confdefs.h"
  +$ac_includes_default
  +int
  +main ()
  +{
  +int _array_ [1 - 2 * !((sizeof (short)) <= $ac_mid)]
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:6997: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7000: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:7003: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7006: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_hi=$ac_mid; break
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_lo=`expr $ac_mid + 1`; ac_mid=`expr 2 '*' $ac_mid + 1`
   fi
  -rm -fr conftest*
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +  done
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_hi=-1 ac_mid=-1
  +  while :; do
  +    cat >conftest.$ac_ext <<_ACEOF
  +#line 7022 "configure"
  +#include "confdefs.h"
  +$ac_includes_default
  +int
  +main ()
  +{
  +int _array_ [1 - 2 * !((sizeof (short)) >= $ac_mid)]
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:7034: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7037: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:7040: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7043: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_lo=$ac_mid; break
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_hi=`expr $ac_mid - 1`; ac_mid=`expr 2 '*' $ac_mid`
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +  done
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +# Binary search between lo and hi bounds.
  +while test "x$ac_lo" != "x$ac_hi"; do
  +  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 7059 "configure"
  +#include "confdefs.h"
  +$ac_includes_default
  +int
  +main ()
  +{
  +int _array_ [1 - 2 * !((sizeof (short)) <= $ac_mid)]
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:7071: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7074: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:7077: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7080: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_hi=$ac_mid
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_lo=`expr $ac_mid + 1`
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +done
  +ac_cv_sizeof_short=$ac_lo
  +else
  +  if test "$cross_compiling" = yes; then
  +  { { echo "$as_me:7093: error: cannot run test program while cross compiling" >&5
  +echo "$as_me: error: cannot run test program while cross compiling" >&2;}
  +   { (exit 1); exit 1; }; }
  +else
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 7098 "configure"
  +#include "confdefs.h"
  +$ac_includes_default
  +int
  +main ()
  +{
  +FILE *f = fopen ("conftest.val", "w");
  +if (!f)
  +  exit (1);
  +fprintf (f, "%d", (sizeof (short)));
  +fclose (f);
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest$ac_exeext
  +if { (eval echo "$as_me:7114: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7117: \$? = $ac_status" >&5
  +  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
  +  { (eval echo "$as_me:7119: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7122: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_cv_sizeof_short=`cat conftest.val`
  +else
  +  echo "$as_me: program exited with status $ac_status" >&5
  +echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +fi
  +rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
  +fi
  +fi
  +rm -f conftest.val
  +else
  +  ac_cv_sizeof_short=0
  +fi
   fi
  +echo "$as_me:7138: result: $ac_cv_sizeof_short" >&5
  +echo "${ECHO_T}$ac_cv_sizeof_short" >&6
  +cat >>confdefs.h <<EOF
  +#define SIZEOF_SHORT $ac_cv_sizeof_short
  +EOF
   
  +echo "$as_me:7144: checking for int" >&5
  +echo $ECHO_N "checking for int... $ECHO_C" >&6
  +if test "${ac_cv_type_int+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 7150 "configure"
  +#include "confdefs.h"
  +$ac_includes_default
  +int
  +main ()
  +{
  +if ((int *) 0)
  +  return 0;
  +if (sizeof (int))
  +  return 0;
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:7165: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7168: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:7171: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7174: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_cv_type_int=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_type_int=no
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +fi
  +echo "$as_me:7184: result: $ac_cv_type_int" >&5
  +echo "${ECHO_T}$ac_cv_type_int" >&6
  +
  +echo "$as_me:7187: checking size of int" >&5
  +echo $ECHO_N "checking size of int... $ECHO_C" >&6
  +if test "${ac_cv_sizeof_int+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test "$ac_cv_type_int" = yes; then
  +  if test "$cross_compiling" = yes; then
  +  # Depending upon the size, compute the lo and hi bounds.
  +cat >conftest.$ac_ext <<_ACEOF
  +#line 7196 "configure"
  +#include "confdefs.h"
  +$ac_includes_default
  +int
  +main ()
  +{
  +int _array_ [1 - 2 * !((sizeof (int)) >= 0)]
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:7208: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7211: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:7214: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7217: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_lo=0 ac_mid=0
  +  while :; do
  +    cat >conftest.$ac_ext <<_ACEOF
  +#line 7222 "configure"
  +#include "confdefs.h"
  +$ac_includes_default
  +int
  +main ()
  +{
  +int _array_ [1 - 2 * !((sizeof (int)) <= $ac_mid)]
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:7234: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7237: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:7240: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7243: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_hi=$ac_mid; break
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_lo=`expr $ac_mid + 1`; ac_mid=`expr 2 '*' $ac_mid + 1`
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +  done
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_hi=-1 ac_mid=-1
  +  while :; do
  +    cat >conftest.$ac_ext <<_ACEOF
  +#line 7259 "configure"
  +#include "confdefs.h"
  +$ac_includes_default
  +int
  +main ()
  +{
  +int _array_ [1 - 2 * !((sizeof (int)) >= $ac_mid)]
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:7271: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7274: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:7277: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7280: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_lo=$ac_mid; break
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_hi=`expr $ac_mid - 1`; ac_mid=`expr 2 '*' $ac_mid`
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +  done
   fi
  -echo "$ac_t""$ac_cv_sizeof_int" 1>&6
  -cat >> confdefs.h <<EOF
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +# Binary search between lo and hi bounds.
  +while test "x$ac_lo" != "x$ac_hi"; do
  +  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 7296 "configure"
  +#include "confdefs.h"
  +$ac_includes_default
  +int
  +main ()
  +{
  +int _array_ [1 - 2 * !((sizeof (int)) <= $ac_mid)]
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:7308: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7311: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:7314: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7317: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_hi=$ac_mid
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_lo=`expr $ac_mid + 1`
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +done
  +ac_cv_sizeof_int=$ac_lo
  +else
  +  if test "$cross_compiling" = yes; then
  +  { { echo "$as_me:7330: error: cannot run test program while cross compiling" >&5
  +echo "$as_me: error: cannot run test program while cross compiling" >&2;}
  +   { (exit 1); exit 1; }; }
  +else
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 7335 "configure"
  +#include "confdefs.h"
  +$ac_includes_default
  +int
  +main ()
  +{
  +FILE *f = fopen ("conftest.val", "w");
  +if (!f)
  +  exit (1);
  +fprintf (f, "%d", (sizeof (int)));
  +fclose (f);
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest$ac_exeext
  +if { (eval echo "$as_me:7351: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7354: \$? = $ac_status" >&5
  +  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
  +  { (eval echo "$as_me:7356: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7359: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_cv_sizeof_int=`cat conftest.val`
  +else
  +  echo "$as_me: program exited with status $ac_status" >&5
  +echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +fi
  +rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
  +fi
  +fi
  +rm -f conftest.val
  +else
  +  ac_cv_sizeof_int=0
  +fi
  +fi
  +echo "$as_me:7375: result: $ac_cv_sizeof_int" >&5
  +echo "${ECHO_T}$ac_cv_sizeof_int" >&6
  +cat >>confdefs.h <<EOF
   #define SIZEOF_INT $ac_cv_sizeof_int
   EOF
   
  -
  -echo $ac_n "checking size of long""... $ac_c" 1>&6
  -echo "configure:1312: checking size of long" >&5
  -if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +echo "$as_me:7381: checking for long" >&5
  +echo $ECHO_N "checking for long... $ECHO_C" >&6
  +if test "${ac_cv_type_long+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 7387 "configure"
  +#include "confdefs.h"
  +$ac_includes_default
  +int
  +main ()
  +{
  +if ((long *) 0)
  +  return 0;
  +if (sizeof (long))
  +  return 0;
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:7402: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7405: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:7408: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7411: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_cv_type_long=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_type_long=no
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +fi
  +echo "$as_me:7421: result: $ac_cv_type_long" >&5
  +echo "${ECHO_T}$ac_cv_type_long" >&6
  +
  +echo "$as_me:7424: checking size of long" >&5
  +echo $ECHO_N "checking size of long... $ECHO_C" >&6
  +if test "${ac_cv_sizeof_long+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  +  if test "$ac_cv_type_long" = yes; then
     if test "$cross_compiling" = yes; then
  -  ac_cv_sizeof_long=4
  +  # Depending upon the size, compute the lo and hi bounds.
  +cat >conftest.$ac_ext <<_ACEOF
  +#line 7433 "configure"
  +#include "confdefs.h"
  +$ac_includes_default
  +int
  +main ()
  +{
  +int _array_ [1 - 2 * !((sizeof (long)) >= 0)]
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:7445: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7448: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:7451: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7454: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_lo=0 ac_mid=0
  +  while :; do
  +    cat >conftest.$ac_ext <<_ACEOF
  +#line 7459 "configure"
  +#include "confdefs.h"
  +$ac_includes_default
  +int
  +main ()
  +{
  +int _array_ [1 - 2 * !((sizeof (long)) <= $ac_mid)]
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:7471: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7474: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:7477: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7480: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_hi=$ac_mid; break
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_lo=`expr $ac_mid + 1`; ac_mid=`expr 2 '*' $ac_mid + 1`
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +  done
   else
  -  cat > conftest.$ac_ext <<EOF
  -#line 1320 "configure"
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_hi=-1 ac_mid=-1
  +  while :; do
  +    cat >conftest.$ac_ext <<_ACEOF
  +#line 7496 "configure"
   #include "confdefs.h"
  -#include <stdio.h>
  -main()
  +$ac_includes_default
  +int
  +main ()
   {
  -  FILE *f=fopen("conftestval", "w");
  -  if (!f) exit(1);
  -  fprintf(f, "%d\n", sizeof(long));
  -  exit(0);
  +int _array_ [1 - 2 * !((sizeof (long)) >= $ac_mid)]
  +  ;
  +  return 0;
   }
  -EOF
  -if { (eval echo configure:1331: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
  -then
  -  ac_cv_sizeof_long=`cat conftestval`
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:7508: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7511: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:7514: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7517: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_lo=$ac_mid; break
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_hi=`expr $ac_mid - 1`; ac_mid=`expr 2 '*' $ac_mid`
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +  done
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +# Binary search between lo and hi bounds.
  +while test "x$ac_lo" != "x$ac_hi"; do
  +  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 7533 "configure"
  +#include "confdefs.h"
  +$ac_includes_default
  +int
  +main ()
  +{
  +int _array_ [1 - 2 * !((sizeof (long)) <= $ac_mid)]
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:7545: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7548: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:7551: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7554: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_hi=$ac_mid
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_lo=`expr $ac_mid + 1`
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +done
  +ac_cv_sizeof_long=$ac_lo
   else
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  rm -fr conftest*
  -  ac_cv_sizeof_long=0
  +  if test "$cross_compiling" = yes; then
  +  { { echo "$as_me:7567: error: cannot run test program while cross compiling" >&5
  +echo "$as_me: error: cannot run test program while cross compiling" >&2;}
  +   { (exit 1); exit 1; }; }
  +else
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 7572 "configure"
  +#include "confdefs.h"
  +$ac_includes_default
  +int
  +main ()
  +{
  +FILE *f = fopen ("conftest.val", "w");
  +if (!f)
  +  exit (1);
  +fprintf (f, "%d", (sizeof (long)));
  +fclose (f);
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest$ac_exeext
  +if { (eval echo "$as_me:7588: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7591: \$? = $ac_status" >&5
  +  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
  +  { (eval echo "$as_me:7593: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7596: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_cv_sizeof_long=`cat conftest.val`
  +else
  +  echo "$as_me: program exited with status $ac_status" >&5
  +echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
   fi
  -rm -fr conftest*
  +rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
   fi
  -
  +fi
  +rm -f conftest.val
  +else
  +  ac_cv_sizeof_long=0
   fi
  -echo "$ac_t""$ac_cv_sizeof_long" 1>&6
  -cat >> confdefs.h <<EOF
  +fi
  +echo "$as_me:7612: result: $ac_cv_sizeof_long" >&5
  +echo "${ECHO_T}$ac_cv_sizeof_long" >&6
  +cat >>confdefs.h <<EOF
   #define SIZEOF_LONG $ac_cv_sizeof_long
   EOF
   
  +echo "$as_me:7618: checking for long long" >&5
  +echo $ECHO_N "checking for long long... $ECHO_C" >&6
  +if test "${ac_cv_type_long_long+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 7624 "configure"
  +#include "confdefs.h"
  +$ac_includes_default
  +int
  +main ()
  +{
  +if ((long long *) 0)
  +  return 0;
  +if (sizeof (long long))
  +  return 0;
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:7639: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7642: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:7645: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7648: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_cv_type_long_long=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_type_long_long=no
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +fi
  +echo "$as_me:7658: result: $ac_cv_type_long_long" >&5
  +echo "${ECHO_T}$ac_cv_type_long_long" >&6
  +
  +echo "$as_me:7661: checking size of long long" >&5
  +echo $ECHO_N "checking size of long long... $ECHO_C" >&6
  +if test "${ac_cv_sizeof_long_long+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test "$ac_cv_type_long_long" = yes; then
  +  if test "$cross_compiling" = yes; then
  +  # Depending upon the size, compute the lo and hi bounds.
  +cat >conftest.$ac_ext <<_ACEOF
  +#line 7670 "configure"
  +#include "confdefs.h"
  +$ac_includes_default
  +int
  +main ()
  +{
  +int _array_ [1 - 2 * !((sizeof (long long)) >= 0)]
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:7682: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7685: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:7688: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7691: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_lo=0 ac_mid=0
  +  while :; do
  +    cat >conftest.$ac_ext <<_ACEOF
  +#line 7696 "configure"
  +#include "confdefs.h"
  +$ac_includes_default
  +int
  +main ()
  +{
  +int _array_ [1 - 2 * !((sizeof (long long)) <= $ac_mid)]
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:7708: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7711: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:7714: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7717: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_hi=$ac_mid; break
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_lo=`expr $ac_mid + 1`; ac_mid=`expr 2 '*' $ac_mid + 1`
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +  done
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_hi=-1 ac_mid=-1
  +  while :; do
  +    cat >conftest.$ac_ext <<_ACEOF
  +#line 7733 "configure"
  +#include "confdefs.h"
  +$ac_includes_default
  +int
  +main ()
  +{
  +int _array_ [1 - 2 * !((sizeof (long long)) >= $ac_mid)]
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:7745: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7748: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:7751: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7754: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_lo=$ac_mid; break
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_hi=`expr $ac_mid - 1`; ac_mid=`expr 2 '*' $ac_mid`
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +  done
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +# Binary search between lo and hi bounds.
  +while test "x$ac_lo" != "x$ac_hi"; do
  +  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 7770 "configure"
  +#include "confdefs.h"
  +$ac_includes_default
  +int
  +main ()
  +{
  +int _array_ [1 - 2 * !((sizeof (long long)) <= $ac_mid)]
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:7782: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7785: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:7788: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7791: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_hi=$ac_mid
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_lo=`expr $ac_mid + 1`
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +done
  +ac_cv_sizeof_long_long=$ac_lo
  +else
  +  if test "$cross_compiling" = yes; then
  +  { { echo "$as_me:7804: error: cannot run test program while cross compiling" >&5
  +echo "$as_me: error: cannot run test program while cross compiling" >&2;}
  +   { (exit 1); exit 1; }; }
  +else
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 7809 "configure"
  +#include "confdefs.h"
  +$ac_includes_default
  +int
  +main ()
  +{
  +FILE *f = fopen ("conftest.val", "w");
  +if (!f)
  +  exit (1);
  +fprintf (f, "%d", (sizeof (long long)));
  +fclose (f);
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest$ac_exeext
  +if { (eval echo "$as_me:7825: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7828: \$? = $ac_status" >&5
  +  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
  +  { (eval echo "$as_me:7830: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7833: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_cv_sizeof_long_long=`cat conftest.val`
  +else
  +  echo "$as_me: program exited with status $ac_status" >&5
  +echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +fi
  +rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
  +fi
  +fi
  +rm -f conftest.val
  +else
  +  ac_cv_sizeof_long_long=0
  +fi
  +fi
  +echo "$as_me:7849: result: $ac_cv_sizeof_long_long" >&5
  +echo "${ECHO_T}$ac_cv_sizeof_long_long" >&6
  +cat >>confdefs.h <<EOF
  +#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long
  +EOF
   
  -echo $ac_n "checking size of long long""... $ac_c" 1>&6
  -echo "configure:1351: checking size of long long" >&5
  -if eval "test \"`echo '$''{'ac_cv_sizeof_long_long'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +echo "$as_me:7855: checking for void *" >&5
  +echo $ECHO_N "checking for void *... $ECHO_C" >&6
  +if test "${ac_cv_type_void_p+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  if test "$cross_compiling" = yes; then
  -  ac_cv_sizeof_long_long=8
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 7861 "configure"
  +#include "confdefs.h"
  +$ac_includes_default
  +int
  +main ()
  +{
  +if ((void * *) 0)
  +  return 0;
  +if (sizeof (void *))
  +  return 0;
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:7876: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7879: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:7882: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7885: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_cv_type_void_p=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_type_void_p=no
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +fi
  +echo "$as_me:7895: result: $ac_cv_type_void_p" >&5
  +echo "${ECHO_T}$ac_cv_type_void_p" >&6
  +
  +echo "$as_me:7898: checking size of void *" >&5
  +echo $ECHO_N "checking size of void *... $ECHO_C" >&6
  +if test "${ac_cv_sizeof_void_p+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  cat > conftest.$ac_ext <<EOF
  -#line 1359 "configure"
  +  if test "$ac_cv_type_void_p" = yes; then
  +  if test "$cross_compiling" = yes; then
  +  # Depending upon the size, compute the lo and hi bounds.
  +cat >conftest.$ac_ext <<_ACEOF
  +#line 7907 "configure"
   #include "confdefs.h"
  -#include <stdio.h>
  -main()
  +$ac_includes_default
  +int
  +main ()
   {
  -  FILE *f=fopen("conftestval", "w");
  -  if (!f) exit(1);
  -  fprintf(f, "%d\n", sizeof(long long));
  -  exit(0);
  +int _array_ [1 - 2 * !((sizeof (void *)) >= 0)]
  +  ;
  +  return 0;
   }
  -EOF
  -if { (eval echo configure:1370: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
  -then
  -  ac_cv_sizeof_long_long=`cat conftestval`
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:7919: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7922: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:7925: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7928: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_lo=0 ac_mid=0
  +  while :; do
  +    cat >conftest.$ac_ext <<_ACEOF
  +#line 7933 "configure"
  +#include "confdefs.h"
  +$ac_includes_default
  +int
  +main ()
  +{
  +int _array_ [1 - 2 * !((sizeof (void *)) <= $ac_mid)]
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:7945: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7948: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:7951: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7954: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_hi=$ac_mid; break
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_lo=`expr $ac_mid + 1`; ac_mid=`expr 2 '*' $ac_mid + 1`
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +  done
   else
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  rm -fr conftest*
  -  ac_cv_sizeof_long_long=0
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_hi=-1 ac_mid=-1
  +  while :; do
  +    cat >conftest.$ac_ext <<_ACEOF
  +#line 7970 "configure"
  +#include "confdefs.h"
  +$ac_includes_default
  +int
  +main ()
  +{
  +int _array_ [1 - 2 * !((sizeof (void *)) >= $ac_mid)]
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:7982: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7985: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:7988: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:7991: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_lo=$ac_mid; break
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_hi=`expr $ac_mid - 1`; ac_mid=`expr 2 '*' $ac_mid`
   fi
  -rm -fr conftest*
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +  done
   fi
  -
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +# Binary search between lo and hi bounds.
  +while test "x$ac_lo" != "x$ac_hi"; do
  +  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 8007 "configure"
  +#include "confdefs.h"
  +$ac_includes_default
  +int
  +main ()
  +{
  +int _array_ [1 - 2 * !((sizeof (void *)) <= $ac_mid)]
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:8019: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:8022: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:8025: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:8028: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_hi=$ac_mid
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_lo=`expr $ac_mid + 1`
   fi
  -echo "$ac_t""$ac_cv_sizeof_long_long" 1>&6
  -cat >> confdefs.h <<EOF
  -#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long
  -EOF
  -
  -
  -echo $ac_n "checking size of void *""... $ac_c" 1>&6
  -echo "configure:1390: checking size of void *" >&5
  -if eval "test \"`echo '$''{'ac_cv_sizeof_void_p'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +done
  +ac_cv_sizeof_void_p=$ac_lo
   else
     if test "$cross_compiling" = yes; then
  -  ac_cv_sizeof_void_p=4
  +  { { echo "$as_me:8041: error: cannot run test program while cross compiling" >&5
  +echo "$as_me: error: cannot run test program while cross compiling" >&2;}
  +   { (exit 1); exit 1; }; }
   else
  -  cat > conftest.$ac_ext <<EOF
  -#line 1398 "configure"
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 8046 "configure"
   #include "confdefs.h"
  -#include <stdio.h>
  -main()
  +$ac_includes_default
  +int
  +main ()
   {
  -  FILE *f=fopen("conftestval", "w");
  -  if (!f) exit(1);
  -  fprintf(f, "%d\n", sizeof(void *));
  -  exit(0);
  +FILE *f = fopen ("conftest.val", "w");
  +if (!f)
  +  exit (1);
  +fprintf (f, "%d", (sizeof (void *)));
  +fclose (f);
  +  ;
  +  return 0;
   }
  -EOF
  -if { (eval echo configure:1409: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
  -then
  -  ac_cv_sizeof_void_p=`cat conftestval`
  +_ACEOF
  +rm -f conftest$ac_exeext
  +if { (eval echo "$as_me:8062: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:8065: \$? = $ac_status" >&5
  +  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
  +  { (eval echo "$as_me:8067: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:8070: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_cv_sizeof_void_p=`cat conftest.val`
  +else
  +  echo "$as_me: program exited with status $ac_status" >&5
  +echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +fi
  +rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
  +fi
  +fi
  +rm -f conftest.val
   else
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  rm -fr conftest*
     ac_cv_sizeof_void_p=0
   fi
  -rm -fr conftest*
  -fi
  -
   fi
  -echo "$ac_t""$ac_cv_sizeof_void_p" 1>&6
  -cat >> confdefs.h <<EOF
  +echo "$as_me:8086: result: $ac_cv_sizeof_void_p" >&5
  +echo "${ECHO_T}$ac_cv_sizeof_void_p" >&6
  +cat >>confdefs.h <<EOF
   #define SIZEOF_VOID_P $ac_cv_sizeof_void_p
   EOF
   
  -
  -
   for ac_func in memmove memset memcmp memchr
   do
  -echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
  -echo "configure:1432: checking for $ac_func" >&5
  -if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
  +echo "$as_me:8095: checking for $ac_func" >&5
  +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
  +if eval "test \"\${$as_ac_var+set}\" = set"; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  cat > conftest.$ac_ext <<EOF
  -#line 1437 "configure"
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 8101 "configure"
   #include "confdefs.h"
   /* System header to define __stub macros and hopefully few prototypes,
  -    which can conflict with char $ac_func(); below.  */
  +    which can conflict with char $ac_func (); below.  */
   #include <assert.h>
   /* Override any gcc2 internal prototype to avoid an error.  */
  +#ifdef __cplusplus
  +extern "C"
  +#endif
   /* We use char because int might match the return type of a gcc2
  -    builtin and then its argument prototype would still apply.  */
  -char $ac_func();
  -
  -int main() {
  +   builtin and then its argument prototype would still apply.  */
  +char $ac_func ();
  +char (*f) ();
   
  +int
  +main ()
  +{
   /* The GNU C library defines this for functions which it implements
       to always fail with ENOSYS.  Some functions are actually named
       something starting with __ and the normal name is an alias.  */
   #if defined (__stub_$ac_func) || defined (__stub___$ac_func)
   choke me
   #else
  -$ac_func();
  +f = $ac_func;
   #endif
   
  -; return 0; }
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext conftest$ac_exeext
  +if { (eval echo "$as_me:8132: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:8135: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest$ac_exeext'
  +  { (eval echo "$as_me:8138: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:8141: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  eval "$as_ac_var=yes"
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +eval "$as_ac_var=no"
  +fi
  +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  +fi
  +echo "$as_me:8151: result: `eval echo '${'$as_ac_var'}'`" >&5
  +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
  +if test `eval echo '${'$as_ac_var'}'` = yes; then
  +  cat >>confdefs.h <<EOF
  +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
   EOF
  -if { (eval echo configure:1460: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  -  rm -rf conftest*
  -  eval "ac_cv_func_$ac_func=yes"
  -else
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  eval "ac_cv_func_$ac_func=no"
  -fi
  -rm -f conftest*
  -fi
   
  -if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
  -  echo "$ac_t""yes" 1>&6
  -    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
  -  cat >> confdefs.h <<EOF
  -#define $ac_tr_func 1
  -EOF
  - 
  -else
  -  echo "$ac_t""no" 1>&6
   fi
   done
  - 
  +
   for ac_func in isnan isinf
   do
  -echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
  -echo "configure:1487: checking for $ac_func" >&5
  -if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
  +echo "$as_me:8164: checking for $ac_func" >&5
  +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
  +if eval "test \"\${$as_ac_var+set}\" = set"; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  cat > conftest.$ac_ext <<EOF
  -#line 1492 "configure"
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 8170 "configure"
   #include "confdefs.h"
   /* System header to define __stub macros and hopefully few prototypes,
  -    which can conflict with char $ac_func(); below.  */
  +    which can conflict with char $ac_func (); below.  */
   #include <assert.h>
   /* Override any gcc2 internal prototype to avoid an error.  */
  +#ifdef __cplusplus
  +extern "C"
  +#endif
   /* We use char because int might match the return type of a gcc2
  -    builtin and then its argument prototype would still apply.  */
  -char $ac_func();
  +   builtin and then its argument prototype would still apply.  */
  +char $ac_func ();
  +char (*f) ();
   
  -int main() {
  -
  +int
  +main ()
  +{
   /* The GNU C library defines this for functions which it implements
       to always fail with ENOSYS.  Some functions are actually named
       something starting with __ and the normal name is an alias.  */
   #if defined (__stub_$ac_func) || defined (__stub___$ac_func)
   choke me
   #else
  -$ac_func();
  +f = $ac_func;
   #endif
   
  -; return 0; }
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext conftest$ac_exeext
  +if { (eval echo "$as_me:8201: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:8204: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest$ac_exeext'
  +  { (eval echo "$as_me:8207: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:8210: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  eval "$as_ac_var=yes"
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +eval "$as_ac_var=no"
  +fi
  +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  +fi
  +echo "$as_me:8220: result: `eval echo '${'$as_ac_var'}'`" >&5
  +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
  +if test `eval echo '${'$as_ac_var'}'` = yes; then
  +  cat >>confdefs.h <<EOF
  +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
   EOF
  -if { (eval echo configure:1515: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  -  rm -rf conftest*
  -  eval "ac_cv_func_$ac_func=yes"
  -else
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  eval "ac_cv_func_$ac_func=no"
  -fi
  -rm -f conftest*
  -fi
   
  -if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
  -  echo "$ac_t""yes" 1>&6
  -    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
  -  cat >> confdefs.h <<EOF
  -#define $ac_tr_func 1
  -EOF
  - 
  -else
  -  echo "$ac_t""no" 1>&6
   fi
   done
  - 
   
  -echo $ac_n "checking for modf""... $ac_c" 1>&6
  -echo "configure:1541: checking for modf" >&5
  -if eval "test \"`echo '$''{'ac_cv_func_modf'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +echo "$as_me:8230: checking for modf" >&5
  +echo $ECHO_N "checking for modf... $ECHO_C" >&6
  +if test "${ac_cv_func_modf+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  cat > conftest.$ac_ext <<EOF
  -#line 1546 "configure"
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 8236 "configure"
   #include "confdefs.h"
   /* System header to define __stub macros and hopefully few prototypes,
  -    which can conflict with char modf(); below.  */
  +    which can conflict with char modf (); below.  */
   #include <assert.h>
   /* Override any gcc2 internal prototype to avoid an error.  */
  +#ifdef __cplusplus
  +extern "C"
  +#endif
   /* We use char because int might match the return type of a gcc2
  -    builtin and then its argument prototype would still apply.  */
  -char modf();
  +   builtin and then its argument prototype would still apply.  */
  +char modf ();
  +char (*f) ();
   
  -int main() {
  -
  +int
  +main ()
  +{
   /* The GNU C library defines this for functions which it implements
       to always fail with ENOSYS.  Some functions are actually named
       something starting with __ and the normal name is an alias.  */
   #if defined (__stub_modf) || defined (__stub___modf)
   choke me
   #else
  -modf();
  +f = modf;
   #endif
  -
  -; return 0; }
  -EOF
  -if { (eval echo configure:1569: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  -  rm -rf conftest*
  -  eval "ac_cv_func_modf=yes"
  -else
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  eval "ac_cv_func_modf=no"
  -fi
  -rm -f conftest*
  -fi
   
  -if eval "test \"`echo '$ac_cv_func_'modf`\" = yes"; then
  -  echo "$ac_t""yes" 1>&6
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext conftest$ac_exeext
  +if { (eval echo "$as_me:8267: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:8270: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest$ac_exeext'
  +  { (eval echo "$as_me:8273: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:8276: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_cv_func_modf=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_func_modf=no
  +fi
  +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  +fi
  +echo "$as_me:8286: result: $ac_cv_func_modf" >&5
  +echo "${ECHO_T}$ac_cv_func_modf" >&6
  +if test $ac_cv_func_modf = yes; then
     :
   else
  -  echo "$ac_t""no" 1>&6
  -echo $ac_n "checking for modf in -lm""... $ac_c" 1>&6
  -echo "configure:1587: checking for modf in -lm" >&5
  -ac_lib_var=`echo m'_'modf | sed 'y%./+-%__p_%'`
  -if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +
  +echo "$as_me:8292: checking for modf in -lm" >&5
  +echo $ECHO_N "checking for modf in -lm... $ECHO_C" >&6
  +if test "${ac_cv_lib_m_modf+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  ac_save_LIBS="$LIBS"
  +  ac_check_lib_save_LIBS=$LIBS
   LIBS="-lm  $LIBS"
  -cat > conftest.$ac_ext <<EOF
  -#line 1595 "configure"
  +cat >conftest.$ac_ext <<_ACEOF
  +#line 8300 "configure"
   #include "confdefs.h"
  +
   /* Override any gcc2 internal prototype to avoid an error.  */
  +#ifdef __cplusplus
  +extern "C"
  +#endif
   /* We use char because int might match the return type of a gcc2
  -    builtin and then its argument prototype would still apply.  */
  -char modf();
  -
  -int main() {
  -modf()
  -; return 0; }
  -EOF
  -if { (eval echo configure:1606: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  -  rm -rf conftest*
  -  eval "ac_cv_lib_$ac_lib_var=yes"
  -else
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  eval "ac_cv_lib_$ac_lib_var=no"
  -fi
  -rm -f conftest*
  -LIBS="$ac_save_LIBS"
  -
  -fi
  -if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
  -  echo "$ac_t""yes" 1>&6
  -    ac_tr_lib=HAVE_LIB`echo m | sed -e 's/^a-zA-Z0-9_/_/g' \
  -    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
  -  cat >> confdefs.h <<EOF
  -#define $ac_tr_lib 1
  +   builtin and then its argument prototype would still apply.  */
  +char modf ();
  +int
  +main ()
  +{
  +modf ();
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext conftest$ac_exeext
  +if { (eval echo "$as_me:8319: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:8322: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest$ac_exeext'
  +  { (eval echo "$as_me:8325: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:8328: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_cv_lib_m_modf=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_lib_m_modf=no
  +fi
  +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  +LIBS=$ac_check_lib_save_LIBS
  +fi
  +echo "$as_me:8339: result: $ac_cv_lib_m_modf" >&5
  +echo "${ECHO_T}$ac_cv_lib_m_modf" >&6
  +if test $ac_cv_lib_m_modf = yes; then
  +  cat >>confdefs.h <<EOF
  +#define HAVE_LIBM 1
   EOF
   
     LIBS="-lm $LIBS"
   
  -else
  -  echo "$ac_t""no" 1>&6
   fi
   
   fi
   
  -
  -trap '' 1 2 15
  -cat > confcache <<\EOF
  +ac_config_files="$ac_config_files Makefile str-config"
  +ac_config_commands="$ac_config_commands default"
  +cat >confcache <<\_ACEOF
   # This file is a shell script that caches the results of configure
   # tests run on this system so they can be shared between configure
  -# scripts and configure runs.  It is not useful on other systems.
  -# If it contains results you don't want to keep, you may remove or edit it.
  +# scripts and configure runs, see configure's option --config-cache.
  +# It is not useful on other systems.  If it contains results you don't
  +# want to keep, you may remove or edit it.
   #
  -# By default, configure uses ./config.cache as the cache file,
  -# creating it if it does not exist already.  You can give configure
  -# the --cache-file=FILE option to use a different cache file; that is
  -# what configure does when it calls configure scripts in
  -# subdirectories, so they share the cache.
  -# Giving --cache-file=/dev/null disables caching, for debugging configure.
  -# config.status only pays attention to the cache file if you give it the
  -# --recheck option to rerun configure.
  +# config.status only pays attention to the cache file if you give it
  +# the --recheck option to rerun configure.
   #
  -EOF
  +# `ac_cv_env_foo' variables (set or unset) will be overriden when
  +# loading this file, other *unset* `ac_cv_foo' will be assigned the
  +# following values.
  +
  +_ACEOF
  +
   # The following way of writing the cache mishandles newlines in values,
   # but we know of no workaround that is simple, portable, and efficient.
   # So, don't put newlines in cache variables' values.
   # Ultrix sh set writes to stderr and can't be redirected directly,
   # and sets the high bit in the cache file unless we assign to the vars.
  -(set) 2>&1 |
  -  case `(ac_space=' '; set | grep ac_space) 2>&1` in
  -  *ac_space=\ *)
  -    # `set' does not quote correctly, so add quotes (double-quote substitution
  -    # turns \\\\ into \\, and sed turns \\ into \).
  -    sed -n \
  -      -e "s/'/'\\\\''/g" \
  -      -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
  -    ;;
  -  *)
  -    # `set' quotes correctly as required by POSIX, so do not add quotes.
  -    sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
  -    ;;
  -  esac >> confcache
  -if cmp -s $cache_file confcache; then
  -  :
  -else
  +{
  +  (set) 2>&1 |
  +    case `(ac_space=' '; set | grep ac_space) 2>&1` in
  +    *ac_space=\ *)
  +      # `set' does not quote correctly, so add quotes (double-quote
  +      # substitution turns \\\\ into \\, and sed turns \\ into \).
  +      sed -n \
  +        "s/'/'\\\\''/g;
  +    	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
  +      ;;
  +    *)
  +      # `set' quotes correctly as required by POSIX, so do not add quotes.
  +      sed -n \
  +        "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
  +      ;;
  +    esac;
  +} |
  +  sed '
  +     t clear
  +     : clear
  +     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
  +     t end
  +     /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
  +     : end' >>confcache
  +if cmp -s $cache_file confcache; then :; else
     if test -w $cache_file; then
  -    echo "updating cache $cache_file"
  -    cat confcache > $cache_file
  +    test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
  +    cat confcache >$cache_file
     else
       echo "not updating unwritable cache $cache_file"
     fi
   fi
   rm -f confcache
   
  -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
  -
   test "x$prefix" = xNONE && prefix=$ac_default_prefix
   # Let make expand exec_prefix.
   test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
   
  -# Any assignment to VPATH causes Sun make to only execute
  -# the first set of double-colon rules, so remove it if not needed.
  -# If there is a colon in the path, we need to keep it.
  +# VPATH may cause trouble with some makes, so we remove $(srcdir),
  +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
  +# trailing colons and then remove the whole line if VPATH becomes empty
  +# (actually we leave an empty line to preserve line numbers).
   if test "x$srcdir" = x.; then
  -  ac_vpsub='/^[ 	]*VPATH[ 	]*=[^:]*$/d'
  +  ac_vpsub='/^[ 	]*VPATH[ 	]*=/{
  +s/:*\$(srcdir):*/:/;
  +s/:*\${srcdir}:*/:/;
  +s/:*@srcdir@:*/:/;
  +s/^\([^=]*=[ 	]*\):*/\1/;
  +s/:*$//;
  +s/^[^=]*=[ 	]*$//;
  +}'
   fi
   
  -trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
  -
   DEFS=-DHAVE_CONFIG_H
   
  -# Without the "./", some shells look in PATH for config.status.
   : ${CONFIG_STATUS=./config.status}
  -
  -echo creating $CONFIG_STATUS
  -rm -f $CONFIG_STATUS
  -cat > $CONFIG_STATUS <<EOF
  -#! /bin/sh
  +ac_clean_files_save=$ac_clean_files
  +ac_clean_files="$ac_clean_files $CONFIG_STATUS"
  +{ echo "$as_me:8433: creating $CONFIG_STATUS" >&5
  +echo "$as_me: creating $CONFIG_STATUS" >&6;}
  +cat >$CONFIG_STATUS <<_ACEOF
  +#! $SHELL
   # Generated automatically by configure.
   # Run this file to recreate the current configuration.
  -# This directory was configured as follows,
  -# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
  -#
  -# $0 $ac_configure_args
  -#
   # Compiler output produced by configure, useful for debugging
  -# configure, is in ./config.log if it exists.
  +# configure, is in config.log if it exists.
   
  -ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
  -for ac_option
  +debug=false
  +SHELL=\${CONFIG_SHELL-$SHELL}
  +ac_cs_invocation="\$0 \$@"
  +
  +_ACEOF
  +
  +cat >>$CONFIG_STATUS <<\_ACEOF
  +# Be Bourne compatible
  +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
  +  emulate sh
  +  NULLCMD=:
  +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
  +  set -o posix
  +fi
  +
  +# Name of the executable.
  +as_me=`echo "$0" |sed 's,.*[\\/],,'`
  +
  +if expr a : '\(a\)' >/dev/null 2>&1; then
  +  as_expr=expr
  +else
  +  as_expr=false
  +fi
  +
  +rm -f conf$$ conf$$.exe conf$$.file
  +echo >conf$$.file
  +if ln -s conf$$.file conf$$ 2>/dev/null; then
  +  # We could just check for DJGPP; but this test a) works b) is more generic
  +  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
  +  if test -f conf$$.exe; then
  +    # Don't use ln at all; we don't have any links
  +    as_ln_s='cp -p'
  +  else
  +    as_ln_s='ln -s'
  +  fi
  +elif ln conf$$.file conf$$ 2>/dev/null; then
  +  as_ln_s=ln
  +else
  +  as_ln_s='cp -p'
  +fi
  +rm -f conf$$ conf$$.exe conf$$.file
  +
  +as_executable_p="test -f"
  +
  +# Support unset when possible.
  +if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
  +  as_unset=unset
  +else
  +  as_unset=false
  +fi
  +
  +# NLS nuisances.
  +$as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; }
  +$as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; }
  +$as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; }
  +$as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; }
  +$as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; }
  +$as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; }
  +$as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; }
  +$as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; }
  +
  +# IFS
  +# We need space, tab and new line, in precisely that order.
  +as_nl='
  +'
  +IFS=" 	$as_nl"
  +
  +# CDPATH.
  +$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; }
  +
  +exec 6>&1
  +
  +_ACEOF
  +
  +# Files that config.status was made for.
  +if test -n "$ac_config_files"; then
  +  echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
  +fi
  +
  +if test -n "$ac_config_headers"; then
  +  echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
  +fi
  +
  +if test -n "$ac_config_links"; then
  +  echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
  +fi
  +
  +if test -n "$ac_config_commands"; then
  +  echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
  +fi
  +
  +cat >>$CONFIG_STATUS <<\EOF
  +
  +ac_cs_usage="\
  +\`$as_me' instantiates files from templates according to the
  +current configuration.
  +
  +Usage: $0 [OPTIONS] [FILE]...
  +
  +  -h, --help       print this help, then exit
  +  -V, --version    print version number, then exit
  +  -d, --debug      don't remove temporary files
  +      --recheck    update $as_me by reconfiguring in the same conditions
  +  --file=FILE[:TEMPLATE]
  +                   instantiate the configuration file FILE
  +  --header=FILE[:TEMPLATE]
  +                   instantiate the configuration header FILE
  +
  +Configuration files:
  +$config_files
  +
  +Configuration headers:
  +$config_headers
  +
  +Configuration commands:
  +$config_commands
  +
  +Report bugs to <bug-autoconf@gnu.org>."
  +EOF
  +
  +cat >>$CONFIG_STATUS <<EOF
  +ac_cs_version="\\
  +config.status
  +configured by $0, generated by GNU Autoconf 2.52,
  +  with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
  +
  +Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
  +Free Software Foundation, Inc.
  +This config.status script is free software; the Free Software Foundation
  +gives unlimited permission to copy, distribute and modify it."
  +srcdir=$srcdir
  +EOF
  +
  +cat >>$CONFIG_STATUS <<\EOF
  +# If no file are specified by the user, then we need to provide default
  +# value.  By we need to know if files were specified by the user.
  +ac_need_defaults=:
  +while test $# != 0
   do
  -  case "\$ac_option" in
  +  case $1 in
  +  --*=*)
  +    ac_option=`expr "x$1" : 'x\([^=]*\)='`
  +    ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
  +    shift
  +    set dummy "$ac_option" "$ac_optarg" ${1+"$@"}
  +    shift
  +    ;;
  +  -*);;
  +  *) # This is not an option, so the user has probably given explicit
  +     # arguments.
  +     ac_need_defaults=false;;
  +  esac
  +
  +  case $1 in
  +  # Handling of the options.
  +EOF
  +cat >>$CONFIG_STATUS <<EOF
     -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
  -    echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
  -    exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
  -  -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
  -    echo "$CONFIG_STATUS generated by autoconf version 2.13"
  -    exit 0 ;;
  -  -help | --help | --hel | --he | --h)
  -    echo "\$ac_cs_usage"; exit 0 ;;
  -  *) echo "\$ac_cs_usage"; exit 1 ;;
  +    echo "running $SHELL $0 " $ac_configure_args " --no-create --no-recursion"
  +    exec $SHELL $0 $ac_configure_args --no-create --no-recursion ;;
  +EOF
  +cat >>$CONFIG_STATUS <<\EOF
  +  --version | --vers* | -V )
  +    echo "$ac_cs_version"; exit 0 ;;
  +  --he | --h)
  +    # Conflict between --help and --header
  +    { { echo "$as_me:8608: error: ambiguous option: $1
  +Try \`$0 --help' for more information." >&5
  +echo "$as_me: error: ambiguous option: $1
  +Try \`$0 --help' for more information." >&2;}
  +   { (exit 1); exit 1; }; };;
  +  --help | --hel | -h )
  +    echo "$ac_cs_usage"; exit 0 ;;
  +  --debug | --d* | -d )
  +    debug=: ;;
  +  --file | --fil | --fi | --f )
  +    shift
  +    CONFIG_FILES="$CONFIG_FILES $1"
  +    ac_need_defaults=false;;
  +  --header | --heade | --head | --hea )
  +    shift
  +    CONFIG_HEADERS="$CONFIG_HEADERS $1"
  +    ac_need_defaults=false;;
  +
  +  # This is an error.
  +  -*) { { echo "$as_me:8627: error: unrecognized option: $1
  +Try \`$0 --help' for more information." >&5
  +echo "$as_me: error: unrecognized option: $1
  +Try \`$0 --help' for more information." >&2;}
  +   { (exit 1); exit 1; }; } ;;
  +
  +  *) ac_config_targets="$ac_config_targets $1" ;;
  +
     esac
  +  shift
   done
   
  -ac_given_srcdir=$srcdir
  +exec 5>>config.log
  +cat >&5 << _ACEOF
   
  -trap 'rm -fr `echo "Makefile str-config  str_config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
  +## ----------------------- ##
  +## Running config.status.  ##
  +## ----------------------- ##
  +
  +This file was extended by $as_me 2.52, executed with
  +  CONFIG_FILES    = $CONFIG_FILES
  +  CONFIG_HEADERS  = $CONFIG_HEADERS
  +  CONFIG_LINKS    = $CONFIG_LINKS
  +  CONFIG_COMMANDS = $CONFIG_COMMANDS
  +  > $ac_cs_invocation
  +on `(hostname || uname -n) 2>/dev/null | sed 1q`
  +
  +_ACEOF
   EOF
  -cat >> $CONFIG_STATUS <<EOF
   
  -# Protect against being on the right side of a sed subst in config.status.
  -sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
  - s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
  -$ac_vpsub
  -$extrasub
  -s%@SHELL@%$SHELL%g
  -s%@CFLAGS@%$CFLAGS%g
  -s%@CPPFLAGS@%$CPPFLAGS%g
  -s%@CXXFLAGS@%$CXXFLAGS%g
  -s%@FFLAGS@%$FFLAGS%g
  -s%@DEFS@%$DEFS%g
  -s%@LDFLAGS@%$LDFLAGS%g
  -s%@LIBS@%$LIBS%g
  -s%@exec_prefix@%$exec_prefix%g
  -s%@prefix@%$prefix%g
  -s%@program_transform_name@%$program_transform_name%g
  -s%@bindir@%$bindir%g
  -s%@sbindir@%$sbindir%g
  -s%@libexecdir@%$libexecdir%g
  -s%@datadir@%$datadir%g
  -s%@sysconfdir@%$sysconfdir%g
  -s%@sharedstatedir@%$sharedstatedir%g
  -s%@localstatedir@%$localstatedir%g
  -s%@libdir@%$libdir%g
  -s%@includedir@%$includedir%g
  -s%@oldincludedir@%$oldincludedir%g
  -s%@infodir@%$infodir%g
  -s%@mandir@%$mandir%g
  -s%@STR_VERSION_STR@%$STR_VERSION_STR%g
  -s%@STR_VERSION_HEX@%$STR_VERSION_HEX%g
  -s%@PLATFORM@%$PLATFORM%g
  -s%@SET_MAKE@%$SET_MAKE%g
  -s%@CC@%$CC%g
  -s%@CPP@%$CPP%g
  +cat >>$CONFIG_STATUS <<\EOF
  +for ac_config_target in $ac_config_targets
  +do
  +  case "$ac_config_target" in
  +  # Handling of arguments.
  +  "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
  +  "str-config" ) CONFIG_FILES="$CONFIG_FILES str-config" ;;
  +  "default" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;;
  +  "str_config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS str_config.h" ;;
  +  *) { { echo "$as_me:8666: error: invalid argument: $ac_config_target" >&5
  +echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
  +   { (exit 1); exit 1; }; };;
  +  esac
  +done
   
  -CEOF
  +# If the user did not use the arguments to specify the items to instantiate,
  +# then the envvar interface is used.  Set only those that are not.
  +# We use the long form for the default assignment because of an extremely
  +# bizarre bug on SunOS 4.1.3.
  +if $ac_need_defaults; then
  +  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
  +  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
  +  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
  +fi
  +
  +# Create a temporary directory, and hook for its removal unless debugging.
  +$debug ||
  +{
  +  trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
  +  trap '{ (exit 1); exit 1; }' 1 2 13 15
  +}
  +
  +# Create a (secure) tmp directory for tmp files.
  +: ${TMPDIR=/tmp}
  +{
  +  tmp=`(umask 077 && mktemp -d -q "$TMPDIR/csXXXXXX") 2>/dev/null` &&
  +  test -n "$tmp" && test -d "$tmp"
  +}  ||
  +{
  +  tmp=$TMPDIR/cs$$-$RANDOM
  +  (umask 077 && mkdir $tmp)
  +} ||
  +{
  +   echo "$me: cannot create a temporary directory in $TMPDIR" >&2
  +   { (exit 1); exit 1; }
  +}
  +
   EOF
   
  -cat >> $CONFIG_STATUS <<\EOF
  +cat >>$CONFIG_STATUS <<EOF
   
  -# Split the substitutions into bite-sized pieces for seds with
  -# small command number limits, like on Digital OSF/1 and HP-UX.
  -ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
  -ac_file=1 # Number of current file.
  -ac_beg=1 # First line for current file.
  -ac_end=$ac_max_sed_cmds # Line after last line for current file.
  -ac_more_lines=:
  -ac_sed_cmds=""
  -while $ac_more_lines; do
  -  if test $ac_beg -gt 1; then
  -    sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
  -  else
  -    sed "${ac_end}q" conftest.subs > conftest.s$ac_file
  -  fi
  -  if test ! -s conftest.s$ac_file; then
  -    ac_more_lines=false
  -    rm -f conftest.s$ac_file
  -  else
  -    if test -z "$ac_sed_cmds"; then
  -      ac_sed_cmds="sed -f conftest.s$ac_file"
  +#
  +# CONFIG_FILES section.
  +#
  +
  +# No need to generate the scripts if there are no CONFIG_FILES.
  +# This happens for instance when ./config.status config.h
  +if test -n "\$CONFIG_FILES"; then
  +  # Protect against being on the right side of a sed subst in config.status.
  +  sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
  +   s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
  +s,@SHELL@,$SHELL,;t t
  +s,@exec_prefix@,$exec_prefix,;t t
  +s,@prefix@,$prefix,;t t
  +s,@program_transform_name@,$program_transform_name,;t t
  +s,@bindir@,$bindir,;t t
  +s,@sbindir@,$sbindir,;t t
  +s,@libexecdir@,$libexecdir,;t t
  +s,@datadir@,$datadir,;t t
  +s,@sysconfdir@,$sysconfdir,;t t
  +s,@sharedstatedir@,$sharedstatedir,;t t
  +s,@localstatedir@,$localstatedir,;t t
  +s,@libdir@,$libdir,;t t
  +s,@includedir@,$includedir,;t t
  +s,@oldincludedir@,$oldincludedir,;t t
  +s,@infodir@,$infodir,;t t
  +s,@mandir@,$mandir,;t t
  +s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
  +s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
  +s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
  +s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
  +s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
  +s,@build_alias@,$build_alias,;t t
  +s,@host_alias@,$host_alias,;t t
  +s,@target_alias@,$target_alias,;t t
  +s,@ECHO_C@,$ECHO_C,;t t
  +s,@ECHO_N@,$ECHO_N,;t t
  +s,@ECHO_T@,$ECHO_T,;t t
  +s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
  +s,@DEFS@,$DEFS,;t t
  +s,@LIBS@,$LIBS,;t t
  +s,@STR_VERSION_STR@,$STR_VERSION_STR,;t t
  +s,@STR_VERSION_HEX@,$STR_VERSION_HEX,;t t
  +s,@PLATFORM@,$PLATFORM,;t t
  +s,@SET_MAKE@,$SET_MAKE,;t t
  +s,@CC@,$CC,;t t
  +s,@CFLAGS@,$CFLAGS,;t t
  +s,@LDFLAGS@,$LDFLAGS,;t t
  +s,@CPPFLAGS@,$CPPFLAGS,;t t
  +s,@ac_ct_CC@,$ac_ct_CC,;t t
  +s,@EXEEXT@,$EXEEXT,;t t
  +s,@OBJEXT@,$OBJEXT,;t t
  +s,@CPP@,$CPP,;t t
  +s,@build@,$build,;t t
  +s,@build_cpu@,$build_cpu,;t t
  +s,@build_vendor@,$build_vendor,;t t
  +s,@build_os@,$build_os,;t t
  +s,@host@,$host,;t t
  +s,@host_cpu@,$host_cpu,;t t
  +s,@host_vendor@,$host_vendor,;t t
  +s,@host_os@,$host_os,;t t
  +s,@LN_S@,$LN_S,;t t
  +s,@ECHO@,$ECHO,;t t
  +s,@RANLIB@,$RANLIB,;t t
  +s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
  +s,@STRIP@,$STRIP,;t t
  +s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t
  +s,@LIBTOOL@,$LIBTOOL,;t t
  +CEOF
  +
  +EOF
  +
  +  cat >>$CONFIG_STATUS <<\EOF
  +  # Split the substitutions into bite-sized pieces for seds with
  +  # small command number limits, like on Digital OSF/1 and HP-UX.
  +  ac_max_sed_lines=48
  +  ac_sed_frag=1 # Number of current file.
  +  ac_beg=1 # First line for current file.
  +  ac_end=$ac_max_sed_lines # Line after last line for current file.
  +  ac_more_lines=:
  +  ac_sed_cmds=
  +  while $ac_more_lines; do
  +    if test $ac_beg -gt 1; then
  +      sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
  +    else
  +      sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
  +    fi
  +    if test ! -s $tmp/subs.frag; then
  +      ac_more_lines=false
       else
  -      ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
  +      # The purpose of the label and of the branching condition is to
  +      # speed up the sed processing (if there are no `@' at all, there
  +      # is no need to browse any of the substitutions).
  +      # These are the two extra sed commands mentioned above.
  +      (echo ':t
  +  /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
  +      if test -z "$ac_sed_cmds"; then
  +  	ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
  +      else
  +  	ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
  +      fi
  +      ac_sed_frag=`expr $ac_sed_frag + 1`
  +      ac_beg=$ac_end
  +      ac_end=`expr $ac_end + $ac_max_sed_lines`
       fi
  -    ac_file=`expr $ac_file + 1`
  -    ac_beg=$ac_end
  -    ac_end=`expr $ac_end + $ac_max_sed_cmds`
  +  done
  +  if test -z "$ac_sed_cmds"; then
  +    ac_sed_cmds=cat
     fi
  -done
  -if test -z "$ac_sed_cmds"; then
  -  ac_sed_cmds=cat
  -fi
  -EOF
  -
  -cat >> $CONFIG_STATUS <<EOF
  +fi # test -n "$CONFIG_FILES"
   
  -CONFIG_FILES=\${CONFIG_FILES-"Makefile str-config "}
   EOF
  -cat >> $CONFIG_STATUS <<\EOF
  -for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
  +cat >>$CONFIG_STATUS <<\EOF
  +for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
     # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
  -  case "$ac_file" in
  -  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
  -       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
  -  *) ac_file_in="${ac_file}.in" ;;
  +  case $ac_file in
  +  - | *:- | *:-:* ) # input from stdin
  +        cat >$tmp/stdin
  +        ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
  +        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
  +  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
  +        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
  +  * )   ac_file_in=$ac_file.in ;;
     esac
   
  -  # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
  -
  -  # Remove last slash and all that follows it.  Not all systems have dirname.
  -  ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
  +  # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
  +  ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
  +         X"$ac_file" : 'X\(//\)[^/]' \| \
  +         X"$ac_file" : 'X\(//\)$' \| \
  +         X"$ac_file" : 'X\(/\)' \| \
  +         .     : '\(.\)' 2>/dev/null ||
  +echo X"$ac_file" |
  +    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
  +  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
  +  	  /^X\(\/\/\)$/{ s//\1/; q; }
  +  	  /^X\(\/\).*/{ s//\1/; q; }
  +  	  s/.*/./; q'`
     if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
  -    # The file is in a subdirectory.
  -    test ! -d "$ac_dir" && mkdir "$ac_dir"
  -    ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
  +    { case "$ac_dir" in
  +  [\\/]* | ?:[\\/]* ) as_incr_dir=;;
  +  *)                      as_incr_dir=.;;
  +esac
  +as_dummy="$ac_dir"
  +for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do
  +  case $as_mkdir_dir in
  +    # Skip DOS drivespec
  +    ?:) as_incr_dir=$as_mkdir_dir ;;
  +    *)
  +      as_incr_dir=$as_incr_dir/$as_mkdir_dir
  +      test -d "$as_incr_dir" || mkdir "$as_incr_dir"
  +    ;;
  +  esac
  +done; }
  +
  +    ac_dir_suffix="/`echo $ac_dir|sed 's,^\./,,'`"
       # A "../" for each directory in $ac_dir_suffix.
  -    ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
  +    ac_dots=`echo "$ac_dir_suffix" | sed 's,/[^/]*,../,g'`
     else
       ac_dir_suffix= ac_dots=
     fi
   
  -  case "$ac_given_srcdir" in
  -  .)  srcdir=.
  -      if test -z "$ac_dots"; then top_srcdir=.
  -      else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
  -  /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
  +  case $srcdir in
  +  .)  ac_srcdir=.
  +      if test -z "$ac_dots"; then
  +         ac_top_srcdir=.
  +      else
  +         ac_top_srcdir=`echo $ac_dots | sed 's,/$,,'`
  +      fi ;;
  +  [\\/]* | ?:[\\/]* )
  +      ac_srcdir=$srcdir$ac_dir_suffix;
  +      ac_top_srcdir=$srcdir ;;
     *) # Relative path.
  -    srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
  -    top_srcdir="$ac_dots$ac_given_srcdir" ;;
  +    ac_srcdir=$ac_dots$srcdir$ac_dir_suffix
  +    ac_top_srcdir=$ac_dots$srcdir ;;
     esac
   
  +  if test x"$ac_file" != x-; then
  +    { echo "$as_me:8884: creating $ac_file" >&5
  +echo "$as_me: creating $ac_file" >&6;}
  +    rm -f "$ac_file"
  +  fi
  +  # Let's still pretend it is `configure' which instantiates (i.e., don't
  +  # use $as_me), people would be surprised to read:
  +  #    /* config.h.  Generated automatically by config.status.  */
  +  configure_input="Generated automatically from `echo $ac_file_in |
  +                                                 sed 's,.*/,,'` by configure."
  +
  +  # First look for the input files in the build tree, otherwise in the
  +  # src tree.
  +  ac_file_inputs=`IFS=:
  +    for f in $ac_file_in; do
  +      case $f in
  +      -) echo $tmp/stdin ;;
  +      [\\/$]*)
  +         # Absolute (can't be DOS-style, as IFS=:)
  +         test -f "$f" || { { echo "$as_me:8902: error: cannot find input file: $f" >&5
  +echo "$as_me: error: cannot find input file: $f" >&2;}
  +   { (exit 1); exit 1; }; }
  +         echo $f;;
  +      *) # Relative
  +         if test -f "$f"; then
  +           # Build tree
  +           echo $f
  +         elif test -f "$srcdir/$f"; then
  +           # Source tree
  +           echo $srcdir/$f
  +         else
  +           # /dev/null tree
  +           { { echo "$as_me:8915: error: cannot find input file: $f" >&5
  +echo "$as_me: error: cannot find input file: $f" >&2;}
  +   { (exit 1); exit 1; }; }
  +         fi;;
  +      esac
  +    done` || { (exit 1); exit 1; }
  +EOF
  +cat >>$CONFIG_STATUS <<EOF
  +  sed "$ac_vpsub
  +$extrasub
  +EOF
  +cat >>$CONFIG_STATUS <<\EOF
  +:t
  +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
  +s,@configure_input@,$configure_input,;t t
  +s,@srcdir@,$ac_srcdir,;t t
  +s,@top_srcdir@,$ac_top_srcdir,;t t
  +" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
  +  rm -f $tmp/stdin
  +  if test x"$ac_file" != x-; then
  +    mv $tmp/out $ac_file
  +  else
  +    cat $tmp/out
  +    rm -f $tmp/out
  +  fi
  +
  +done
  +EOF
  +cat >>$CONFIG_STATUS <<\EOF
   
  -  echo creating "$ac_file"
  -  rm -f "$ac_file"
  -  configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
  -  case "$ac_file" in
  -  *Makefile*) ac_comsub="1i\\
  -# $configure_input" ;;
  -  *) ac_comsub= ;;
  -  esac
  -
  -  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
  -  sed -e "$ac_comsub
  -s%@configure_input@%$configure_input%g
  -s%@srcdir@%$srcdir%g
  -s%@top_srcdir@%$top_srcdir%g
  -" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
  -fi; done
  -rm -f conftest.s*
  +#
  +# CONFIG_HEADER section.
  +#
   
   # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
   # NAME is the cpp macro being defined and VALUE is the value it is being given.
   #
   # ac_d sets the value in "#define NAME VALUE" lines.
  -ac_dA='s%^\([ 	]*\)#\([ 	]*define[ 	][ 	]*\)'
  -ac_dB='\([ 	][ 	]*\)[^ 	]*%\1#\2'
  -ac_dC='\3'
  -ac_dD='%g'
  -# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
  -ac_uA='s%^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
  -ac_uB='\([ 	]\)%\1#\2define\3'
  +ac_dA='s,^\([ 	]*\)#\([ 	]*define[ 	][ 	]*\)'
  +ac_dB='[ 	].*$,\1#\2'
  +ac_dC=' '
  +ac_dD=',;t'
  +# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
  +ac_uA='s,^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
  +ac_uB='$,\1#\2define\3'
   ac_uC=' '
  -ac_uD='\4%g'
  -# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
  -ac_eA='s%^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
  -ac_eB='$%\1#\2define\3'
  -ac_eC=' '
  -ac_eD='%g'
  +ac_uD=',;t'
   
  -if test "${CONFIG_HEADERS+set}" != set; then
  -EOF
  -cat >> $CONFIG_STATUS <<EOF
  -  CONFIG_HEADERS="str_config.h"
  -EOF
  -cat >> $CONFIG_STATUS <<\EOF
  -fi
  -for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
  +for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
     # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
  -  case "$ac_file" in
  -  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
  -       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
  -  *) ac_file_in="${ac_file}.in" ;;
  -  esac
  -
  -  echo creating $ac_file
  -
  -  rm -f conftest.frag conftest.in conftest.out
  -  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
  -  cat $ac_file_inputs > conftest.in
  +  case $ac_file in
  +  - | *:- | *:-:* ) # input from stdin
  +        cat >$tmp/stdin
  +        ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
  +        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
  +  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
  +        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
  +  * )   ac_file_in=$ac_file.in ;;
  +  esac
   
  -EOF
  +  test x"$ac_file" != x- && { echo "$as_me:8975: creating $ac_file" >&5
  +echo "$as_me: creating $ac_file" >&6;}
  +
  +  # First look for the input files in the build tree, otherwise in the
  +  # src tree.
  +  ac_file_inputs=`IFS=:
  +    for f in $ac_file_in; do
  +      case $f in
  +      -) echo $tmp/stdin ;;
  +      [\\/$]*)
  +         # Absolute (can't be DOS-style, as IFS=:)
  +         test -f "$f" || { { echo "$as_me:8986: error: cannot find input file: $f" >&5
  +echo "$as_me: error: cannot find input file: $f" >&2;}
  +   { (exit 1); exit 1; }; }
  +         echo $f;;
  +      *) # Relative
  +         if test -f "$f"; then
  +           # Build tree
  +           echo $f
  +         elif test -f "$srcdir/$f"; then
  +           # Source tree
  +           echo $srcdir/$f
  +         else
  +           # /dev/null tree
  +           { { echo "$as_me:8999: error: cannot find input file: $f" >&5
  +echo "$as_me: error: cannot find input file: $f" >&2;}
  +   { (exit 1); exit 1; }; }
  +         fi;;
  +      esac
  +    done` || { (exit 1); exit 1; }
  +  # Remove the trailing spaces.
  +  sed 's/[ 	]*$//' $ac_file_inputs >$tmp/in
   
  -# Transform confdefs.h into a sed script conftest.vals that substitutes
  -# the proper values into config.h.in to produce config.h.  And first:
  -# Protect against being on the right side of a sed subst in config.status.
  -# Protect against being in an unquoted here document in config.status.
  -rm -f conftest.vals
  -cat > conftest.hdr <<\EOF
  -s/[\\&%]/\\&/g
  -s%[\\$`]%\\&%g
  -s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
  -s%ac_d%ac_u%gp
  -s%ac_u%ac_e%gp
   EOF
  -sed -n -f conftest.hdr confdefs.h > conftest.vals
  -rm -f conftest.hdr
   
  +# Transform confdefs.h into two sed scripts, `conftest.defines' and
  +# `conftest.undefs', that substitutes the proper values into
  +# config.h.in to produce config.h.  The first handles `#define'
  +# templates, and the second `#undef' templates.
  +# And first: Protect against being on the right side of a sed subst in
  +# config.status.  Protect against being in an unquoted here document
  +# in config.status.
  +rm -f conftest.defines conftest.undefs
  +# Using a here document instead of a string reduces the quoting nightmare.
  +# Putting comments in sed scripts is not portable.
  +#
  +# `end' is used to avoid that the second main sed command (meant for
  +# 0-ary CPP macros) applies to n-ary macro definitions.
  +# See the Autoconf documentation for `clear'.
  +cat >confdef2sed.sed <<\EOF
  +s/[\\&,]/\\&/g
  +s,[\\$`],\\&,g
  +t clear
  +: clear
  +s,^[ 	]*#[ 	]*define[ 	][ 	]*\(\([^ 	(][^ 	(]*\)([^)]*)\)[ 	]*\(.*\)$,${ac_dA}\2${ac_dB}\1${ac_dC}\3${ac_dD},gp
  +t end
  +s,^[ 	]*#[ 	]*define[ 	][ 	]*\([^ 	][^ 	]*\)[ 	]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
  +: end
  +EOF
  +# If some macros were called several times there might be several times
  +# the same #defines, which is useless.  Nevertheless, we may not want to
  +# sort them, since we want the *last* AC-DEFINE to be honored.
  +uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
  +sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
  +rm -f confdef2sed.sed
  +
   # This sed command replaces #undef with comments.  This is necessary, for
   # example, in the case of _POSIX_SOURCE, which is predefined and required
   # on some systems where configure will not decide to define it.
  -cat >> conftest.vals <<\EOF
  -s%^[ 	]*#[ 	]*undef[ 	][ 	]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
  +cat >>conftest.undefs <<\EOF
  +s,^[ 	]*#[ 	]*undef[ 	][ 	]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
   EOF
   
  -# Break up conftest.vals because some shells have a limit on
  -# the size of here documents, and old seds have small limits too.
  -
  +# Break up conftest.defines because some shells have a limit on the size
  +# of here documents, and old seds have small limits too (100 cmds).
  +echo '  # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
  +echo '  if egrep "^[ 	]*#[ 	]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
  +echo '  # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
  +echo '  :' >>$CONFIG_STATUS
  +rm -f conftest.tail
  +while grep . conftest.defines >/dev/null
  +do
  +  # Write a limited-size here document to $tmp/defines.sed.
  +  echo '  cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
  +  # Speed up: don't consider the non `#define' lines.
  +  echo '/^[ 	]*#[ 	]*define/!b' >>$CONFIG_STATUS
  +  # Work around the forget-to-reset-the-flag bug.
  +  echo 't clr' >>$CONFIG_STATUS
  +  echo ': clr' >>$CONFIG_STATUS
  +  sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
  +  echo 'CEOF
  +  sed -f $tmp/defines.sed $tmp/in >$tmp/out
  +  rm -f $tmp/in
  +  mv $tmp/out $tmp/in
  +' >>$CONFIG_STATUS
  +  sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
  +  rm -f conftest.defines
  +  mv conftest.tail conftest.defines
  +done
  +rm -f conftest.defines
  +echo '  fi # egrep' >>$CONFIG_STATUS
  +echo >>$CONFIG_STATUS
  +
  +# Break up conftest.undefs because some shells have a limit on the size
  +# of here documents, and old seds have small limits too (100 cmds).
  +echo '  # Handle all the #undef templates' >>$CONFIG_STATUS
   rm -f conftest.tail
  -while :
  +while grep . conftest.undefs >/dev/null
   do
  -  ac_lines=`grep -c . conftest.vals`
  -  # grep -c gives empty output for an empty file on some AIX systems.
  -  if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
  -  # Write a limited-size here document to conftest.frag.
  -  echo '  cat > conftest.frag <<CEOF' >> $CONFIG_STATUS
  -  sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
  +  # Write a limited-size here document to $tmp/undefs.sed.
  +  echo '  cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
  +  # Speed up: don't consider the non `#undef'
  +  echo '/^[ 	]*#[ 	]*undef/!b' >>$CONFIG_STATUS
  +  # Work around the forget-to-reset-the-flag bug.
  +  echo 't clr' >>$CONFIG_STATUS
  +  echo ': clr' >>$CONFIG_STATUS
  +  sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
     echo 'CEOF
  -  sed -f conftest.frag conftest.in > conftest.out
  -  rm -f conftest.in
  -  mv conftest.out conftest.in
  -' >> $CONFIG_STATUS
  -  sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
  -  rm -f conftest.vals
  -  mv conftest.tail conftest.vals
  -done
  -rm -f conftest.vals
  -
  -cat >> $CONFIG_STATUS <<\EOF
  -  rm -f conftest.frag conftest.h
  -  echo "/* $ac_file.  Generated automatically by configure.  */" > conftest.h
  -  cat conftest.in >> conftest.h
  -  rm -f conftest.in
  -  if cmp -s $ac_file conftest.h 2>/dev/null; then
  -    echo "$ac_file is unchanged"
  -    rm -f conftest.h
  +  sed -f $tmp/undefs.sed $tmp/in >$tmp/out
  +  rm -f $tmp/in
  +  mv $tmp/out $tmp/in
  +' >>$CONFIG_STATUS
  +  sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
  +  rm -f conftest.undefs
  +  mv conftest.tail conftest.undefs
  +done
  +rm -f conftest.undefs
  +
  +cat >>$CONFIG_STATUS <<\EOF
  +  # Let's still pretend it is `configure' which instantiates (i.e., don't
  +  # use $as_me), people would be surprised to read:
  +  #    /* config.h.  Generated automatically by config.status.  */
  +  if test x"$ac_file" = x-; then
  +    echo "/* Generated automatically by configure.  */" >$tmp/config.h
     else
  -    # Remove last slash and all that follows it.  Not all systems have dirname.
  -      ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
  +    echo "/* $ac_file.  Generated automatically by configure.  */" >$tmp/config.h
  +  fi
  +  cat $tmp/in >>$tmp/config.h
  +  rm -f $tmp/in
  +  if test x"$ac_file" != x-; then
  +    if cmp -s $ac_file $tmp/config.h 2>/dev/null; then
  +      { echo "$as_me:9116: $ac_file is unchanged" >&5
  +echo "$as_me: $ac_file is unchanged" >&6;}
  +    else
  +      ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
  +         X"$ac_file" : 'X\(//\)[^/]' \| \
  +         X"$ac_file" : 'X\(//\)$' \| \
  +         X"$ac_file" : 'X\(/\)' \| \
  +         .     : '\(.\)' 2>/dev/null ||
  +echo X"$ac_file" |
  +    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
  +  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
  +  	  /^X\(\/\/\)$/{ s//\1/; q; }
  +  	  /^X\(\/\).*/{ s//\1/; q; }
  +  	  s/.*/./; q'`
         if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
  -      # The file is in a subdirectory.
  -      test ! -d "$ac_dir" && mkdir "$ac_dir"
  +        { case "$ac_dir" in
  +  [\\/]* | ?:[\\/]* ) as_incr_dir=;;
  +  *)                      as_incr_dir=.;;
  +esac
  +as_dummy="$ac_dir"
  +for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do
  +  case $as_mkdir_dir in
  +    # Skip DOS drivespec
  +    ?:) as_incr_dir=$as_mkdir_dir ;;
  +    *)
  +      as_incr_dir=$as_incr_dir/$as_mkdir_dir
  +      test -d "$as_incr_dir" || mkdir "$as_incr_dir"
  +    ;;
  +  esac
  +done; }
  +
  +      fi
  +      rm -f $ac_file
  +      mv $tmp/config.h $ac_file
       fi
  -    rm -f $ac_file
  -    mv conftest.h $ac_file
  +  else
  +    cat $tmp/config.h
  +    rm -f $tmp/config.h
     fi
  -fi; done
  -
  +done
   EOF
  -cat >> $CONFIG_STATUS <<EOF
  +cat >>$CONFIG_STATUS <<\EOF
  +
  +#
  +# CONFIG_COMMANDS section.
  +#
  +for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
  +  ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
  +  ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
   
  +  case $ac_dest in
  +    default ) chmod a+x str-config
  + ;;
  +  esac
  +done
   EOF
  -cat >> $CONFIG_STATUS <<\EOF
  -chmod a+x str-config
  +
  +cat >>$CONFIG_STATUS <<\EOF
   
  -exit 0
  +{ (exit 0); exit 0; }
   EOF
   chmod +x $CONFIG_STATUS
  -rm -fr confdefs* $ac_clean_files
  -test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
  +ac_clean_files=$ac_clean_files_save
  +
  +# configure is writing to config.log, and then calls config.status.
  +# config.status does its own redirection, appending to config.log.
  +# Unfortunately, on DOS this fails, as config.log is still kept open
  +# by configure, so config.status won't be able to write to it; its
  +# output is simply discarded.  So we exec the FD to /dev/null,
  +# effectively closing config.log, so it can be properly (re)opened and
  +# appended to by config.status.  When coming back to configure, we
  +# need to make the FD available again.
  +if test "$no_create" != yes; then
  +  ac_cs_success=:
  +  exec 5>/dev/null
  +  $SHELL $CONFIG_STATUS || ac_cs_success=false
  +  exec 5>>config.log
  +  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
  +  # would make configure fail if this is the last instruction.
  +  $ac_cs_success || { (exit 1); exit 1; }
  +fi
   
  Index: ossp-pkg/str/configure.ac
  ============================================================
  $ cvs update -p -r1.1 configure.ac
  dnl ##
  dnl ##   Autoconf specification for STR library
  dnl ##
  
  AC_PREREQ(2.12)dnl
  AC_REVISION($Revision: 1.1 $)
  
  AC_INIT(README)
  AC_HEADLINE(dnl
  Str, String Library, dnl
  STR_VERSION, str_version.c, dnl
  [Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>])
  AC_CONFIG_HEADER(str_config.h)
  AC_PREFIX_DEFAULT(/usr/local)
  AC_PLATFORM(PLATFORM)
  echo ""
  
  AC_SET_MAKE
  AC_PROG_CC
  AC_PROG_CPP
  AC_CHECK_DEBUGGING
  
  sinclude(libtool.m4)
  AC_PROG_LIBTOOL
  
  AC_CHECK_SIZEOF(char, 1)
  AC_CHECK_SIZEOF(short, 2)
  AC_CHECK_SIZEOF(int, 4)
  AC_CHECK_SIZEOF(long, 4)
  AC_CHECK_SIZEOF(long long, 8)
  AC_CHECK_SIZEOF(void *, 4)
  
  AC_HAVE_FUNCS(memmove memset memcmp memchr) 
  AC_HAVE_FUNCS(isnan isinf) 
  
  AC_CHECK_FUNC(modf, , AC_CHECK_LIB(m, modf))
  
  AC_OUTPUT(dnl
  Makefile dnl
  str-config dnl
  ,dnl
  chmod a+x str-config
  )dnl
  
    Index: ossp-pkg/str/libtool.m4
  ============================================================
  $ cvs update -p -r1.1 libtool.m4
  # libtool.m4 - Configure libtool for the host system. -*-Shell-script-*-
  ## Copyright 1996, 1997, 1998, 1999, 2000, 2001
  ## Free Software Foundation, Inc.
  ## Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
  ##
  ## This program is free software; you can redistribute it and/or modify
  ## it under the terms of the GNU General Public License as published by
  ## the Free Software Foundation; either version 2 of the License, or
  ## (at your option) any later version.
  ##
  ## This program is distributed in the hope that it will be useful, but
  ## WITHOUT ANY WARRANTY; without even the implied warranty of
  ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  ## General Public License for more details.
  ##
  ## You should have received a copy of the GNU General Public License
  ## along with this program; if not, write to the Free Software
  ## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  ##
  ## As a special exception to the GNU General Public License, if you
  ## distribute this file as part of a program that contains a
  ## configuration script generated by Autoconf, you may include it under
  ## the same distribution terms that you use for the rest of that program.
  
  # serial 46 AC_PROG_LIBTOOL
  AC_DEFUN([AC_PROG_LIBTOOL],
  [AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
  
  # This can be used to rebuild libtool when needed
  LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
  
  # Always use our own libtool.
  LIBTOOL='$(SHELL) $(top_builddir)/libtool'
  AC_SUBST(LIBTOOL)dnl
  
  # Prevent multiple expansion
  define([AC_PROG_LIBTOOL], [])
  ])
  
  AC_DEFUN([AC_LIBTOOL_SETUP],
  [AC_PREREQ(2.13)dnl
  AC_REQUIRE([AC_ENABLE_SHARED])dnl
  AC_REQUIRE([AC_ENABLE_STATIC])dnl
  AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl
  AC_REQUIRE([AC_CANONICAL_HOST])dnl
  AC_REQUIRE([AC_CANONICAL_BUILD])dnl
  AC_REQUIRE([AC_PROG_CC])dnl
  AC_REQUIRE([AC_PROG_LD])dnl
  AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl
  AC_REQUIRE([AC_PROG_NM])dnl
  AC_REQUIRE([AC_PROG_LN_S])dnl
  AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl
  AC_REQUIRE([AC_OBJEXT])dnl
  AC_REQUIRE([AC_EXEEXT])dnl
  dnl
  
  _LT_AC_PROG_ECHO_BACKSLASH
  # Only perform the check for file, if the check method requires it
  case $deplibs_check_method in
  file_magic*)
    if test "$file_magic_cmd" = '$MAGIC_CMD'; then
      AC_PATH_MAGIC
    fi
    ;;
  esac
  
  AC_CHECK_TOOL(RANLIB, ranlib, :)
  AC_CHECK_TOOL(STRIP, strip, :)
  
  ifdef([AC_PROVIDE_AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no)
  ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL],
  enable_win32_dll=yes, enable_win32_dll=no)
  
  AC_ARG_ENABLE(libtool-lock,
    [  --disable-libtool-lock  avoid locking (might break parallel builds)])
  test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
  
  # Some flags need to be propagated to the compiler or linker for good
  # libtool support.
  case $host in
  *-*-irix6*)
    # Find out which ABI we are using.
    echo '[#]line __oline__ "configure"' > conftest.$ac_ext
    if AC_TRY_EVAL(ac_compile); then
      case `/usr/bin/file conftest.$ac_objext` in
      *32-bit*)
        LD="${LD-ld} -32"
        ;;
      *N32*)
        LD="${LD-ld} -n32"
        ;;
      *64-bit*)
        LD="${LD-ld} -64"
        ;;
      esac
    fi
    rm -rf conftest*
    ;;
  
  *-*-sco3.2v5*)
    # On SCO OpenServer 5, we need -belf to get full-featured binaries.
    SAVE_CFLAGS="$CFLAGS"
    CFLAGS="$CFLAGS -belf"
    AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
      [AC_LANG_SAVE
       AC_LANG_C
       AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
       AC_LANG_RESTORE])
    if test x"$lt_cv_cc_needs_belf" != x"yes"; then
      # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
      CFLAGS="$SAVE_CFLAGS"
    fi
    ;;
  
  ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL],
  [*-*-cygwin* | *-*-mingw* | *-*-pw32*)
    AC_CHECK_TOOL(DLLTOOL, dlltool, false)
    AC_CHECK_TOOL(AS, as, false)
    AC_CHECK_TOOL(OBJDUMP, objdump, false)
  
    # recent cygwin and mingw systems supply a stub DllMain which the user
    # can override, but on older systems we have to supply one
    AC_CACHE_CHECK([if libtool should supply DllMain function], lt_cv_need_dllmain,
      [AC_TRY_LINK([],
        [extern int __attribute__((__stdcall__)) DllMain(void*, int, void*);
        DllMain (0, 0, 0);],
        [lt_cv_need_dllmain=no],[lt_cv_need_dllmain=yes])])
  
    case $host/$CC in
    *-*-cygwin*/gcc*-mno-cygwin*|*-*-mingw*)
      # old mingw systems require "-dll" to link a DLL, while more recent ones
      # require "-mdll"
      SAVE_CFLAGS="$CFLAGS"
      CFLAGS="$CFLAGS -mdll"
      AC_CACHE_CHECK([how to link DLLs], lt_cv_cc_dll_switch,
        [AC_TRY_LINK([], [], [lt_cv_cc_dll_switch=-mdll],[lt_cv_cc_dll_switch=-dll])])
      CFLAGS="$SAVE_CFLAGS" ;;
    *-*-cygwin* | *-*-pw32*)
      # cygwin systems need to pass --dll to the linker, and not link
      # crt.o which will require a WinMain@16 definition.
      lt_cv_cc_dll_switch="-Wl,--dll -nostartfiles" ;;
    esac
    ;;
    ])
  esac
  
  _LT_AC_LTCONFIG_HACK
  
  ])
  
  # _LT_AC_CHECK_DLFCN
  # --------------------
  AC_DEFUN(_LT_AC_CHECK_DLFCN,
  [AC_CHECK_HEADERS(dlfcn.h)
  ])# _LT_AC_CHECK_DLFCN
  
  # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
  # ---------------------------------
  AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE],
  [AC_REQUIRE([AC_CANONICAL_HOST])
  AC_REQUIRE([AC_PROG_NM])
  AC_REQUIRE([AC_OBJEXT])
  # Check for command to grab the raw symbol name followed by C symbol from nm.
  AC_MSG_CHECKING([command to parse $NM output])
  AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [dnl
  
  # These are sane defaults that work on at least a few old systems.
  # [They come from Ultrix.  What could be older than Ultrix?!! ;)]
  
  # Character class describing NM global symbol codes.
  [symcode='[BCDEGRST]']
  
  # Regexp to match symbols that can be accessed directly from C.
  [sympat='\([_A-Za-z][_A-Za-z0-9]*\)']
  
  # Transform the above into a raw symbol and a C symbol.
  symxfrm='\1 \2\3 \3'
  
  # Transform an extracted symbol line into a proper C declaration
  lt_cv_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'"
  
  # Define system-specific variables.
  case $host_os in
  aix*)
    [symcode='[BCDT]']
    ;;
  cygwin* | mingw* | pw32*)
    [symcode='[ABCDGISTW]']
    ;;
  hpux*) # Its linker distinguishes data from code symbols
    lt_cv_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
    ;;
  irix*)
    [symcode='[BCDEGRST]']
    ;;
  solaris* | sysv5*)
    [symcode='[BDT]']
    ;;
  sysv4)
    [symcode='[DFNSTU]']
    ;;
  esac
  
  # Handle CRLF in mingw tool chain
  opt_cr=
  case $host_os in
  mingw*)
    opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
    ;;
  esac
  
  # If we're using GNU nm, then use its standard symbol codes.
  if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then
    [symcode='[ABCDGISTW]']
  fi
  
  # Try without a prefix undercore, then with it.
  for ac_symprfx in "" "_"; do
  
    # Write the raw and C identifiers.
  [lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ 	]\($symcode$symcode*\)[ 	][ 	]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'"]
  
    # Check to see that the pipe works correctly.
    pipe_works=no
    rm -f conftest*
    cat > conftest.$ac_ext <<EOF
  #ifdef __cplusplus
  extern "C" {
  #endif
  char nm_test_var;
  void nm_test_func(){}
  #ifdef __cplusplus
  }
  #endif
  int main(){nm_test_var='a';nm_test_func();return(0);}
  EOF
  
    if AC_TRY_EVAL(ac_compile); then
      # Now try to grab the symbols.
      nlist=conftest.nm
      if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
        # Try sorting and uniquifying the output.
        if sort "$nlist" | uniq > "$nlist"T; then
  	mv -f "$nlist"T "$nlist"
        else
  	rm -f "$nlist"T
        fi
  
        # Make sure that we snagged all the symbols we need.
        if egrep ' nm_test_var$' "$nlist" >/dev/null; then
  	if egrep ' nm_test_func$' "$nlist" >/dev/null; then
  	  cat <<EOF > conftest.$ac_ext
  #ifdef __cplusplus
  extern "C" {
  #endif
  
  EOF
  	  # Now generate the symbol file.
  	  eval "$lt_cv_global_symbol_to_cdecl"' < "$nlist" >> conftest.$ac_ext'
  
  	  cat <<EOF >> conftest.$ac_ext
  #if defined (__STDC__) && __STDC__
  # define lt_ptr_t void *
  #else
  # define lt_ptr_t char *
  # define const
  #endif
  
  /* The mapping between symbol names and symbols. */
  const struct {
    const char *name;
    lt_ptr_t address;
  }
  [lt_preloaded_symbols[] =]
  {
  EOF
  	  sed "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" >> conftest.$ac_ext
  	  cat <<\EOF >> conftest.$ac_ext
    {0, (lt_ptr_t) 0}
  };
  
  #ifdef __cplusplus
  }
  #endif
  EOF
  	  # Now try linking the two files.
  	  mv conftest.$ac_objext conftstm.$ac_objext
  	  save_LIBS="$LIBS"
  	  save_CFLAGS="$CFLAGS"
  	  LIBS="conftstm.$ac_objext"
  	  CFLAGS="$CFLAGS$no_builtin_flag"
  	  if AC_TRY_EVAL(ac_link) && test -s conftest; then
  	    pipe_works=yes
  	  fi
  	  LIBS="$save_LIBS"
  	  CFLAGS="$save_CFLAGS"
  	else
  	  echo "cannot find nm_test_func in $nlist" >&AC_FD_CC
  	fi
        else
  	echo "cannot find nm_test_var in $nlist" >&AC_FD_CC
        fi
      else
        echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AC_FD_CC
      fi
    else
      echo "$progname: failed program was:" >&AC_FD_CC
      cat conftest.$ac_ext >&5
    fi
    rm -f conftest* conftst*
  
    # Do not use the global_symbol_pipe unless it works.
    if test "$pipe_works" = yes; then
      break
    else
      lt_cv_sys_global_symbol_pipe=
    fi
  done
  ])
  global_symbol_pipe="$lt_cv_sys_global_symbol_pipe"
  if test -z "$lt_cv_sys_global_symbol_pipe"; then
    global_symbol_to_cdecl=
  else
    global_symbol_to_cdecl="$lt_cv_global_symbol_to_cdecl"
  fi
  if test -z "$global_symbol_pipe$global_symbol_to_cdecl"; then
    AC_MSG_RESULT(failed)
  else
    AC_MSG_RESULT(ok)
  fi
  ]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
  
  # _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR
  # ---------------------------------
  AC_DEFUN([_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR],
  [# Find the correct PATH separator.  Usually this is `:', but
  # DJGPP uses `;' like DOS.
  if test "X${PATH_SEPARATOR+set}" != Xset; then
    UNAME=${UNAME-`uname 2>/dev/null`}
    case X$UNAME in
      *-DOS) lt_cv_sys_path_separator=';' ;;
      *)     lt_cv_sys_path_separator=':' ;;
    esac
  fi
  ])# _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR
  
  # _LT_AC_PROG_ECHO_BACKSLASH
  # --------------------------
  # Add some code to the start of the generated configure script which
  # will find an echo command which doesn;t interpret backslashes.
  AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH],
  [ifdef([AC_DIVERSION_NOTICE], [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
                                [AC_DIVERT_PUSH(NOTICE)])
  _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR
  
  # Check that we are running under the correct shell.
  SHELL=${CONFIG_SHELL-/bin/sh}
  
  case X$ECHO in
  X*--fallback-echo)
    # Remove one level of quotation (which was required for Make).
    ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
    ;;
  esac
  
  echo=${ECHO-echo}
  if test "X[$]1" = X--no-reexec; then
    # Discard the --no-reexec flag, and continue.
    shift
  elif test "X[$]1" = X--fallback-echo; then
    # Avoid inline document here, it may be left over
    :
  elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
    # Yippee, $echo works!
    :
  else
    # Restart under the correct shell.
    exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
  fi
  
  if test "X[$]1" = X--fallback-echo; then
    # used as fallback echo
    shift
    cat <<EOF
  $*
  EOF
    exit 0
  fi
  
  # The HP-UX ksh and POSIX shell print the target directory to stdout
  # if CDPATH is set.
  if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
  
  if test -z "$ECHO"; then
  if test "X${echo_test_string+set}" != Xset; then
  # find a string as large as possible, as long as the shell can cope with it
    for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
      if (echo_test_string="`eval $cmd`") 2>/dev/null &&
         echo_test_string="`eval $cmd`" &&
         (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
      then
        break
      fi
    done
  fi
  
  if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
     echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
     test "X$echo_testing_string" = "X$echo_test_string"; then
    :
  else
    # The Solaris, AIX, and Digital Unix default echo programs unquote
    # backslashes.  This makes it impossible to quote backslashes using
    #   echo "$something" | sed 's/\\/\\\\/g'
    #
    # So, first we look for a working echo in the user's PATH.
  
    IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
    for dir in $PATH /usr/ucb; do
      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
         test "X$echo_testing_string" = "X$echo_test_string"; then
        echo="$dir/echo"
        break
      fi
    done
    IFS="$save_ifs"
  
    if test "X$echo" = Xecho; then
      # We didn't find a better echo, so look for alternatives.
      if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
         echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
         test "X$echo_testing_string" = "X$echo_test_string"; then
        # This shell has a builtin print -r that does the trick.
        echo='print -r'
      elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
  	 test "X$CONFIG_SHELL" != X/bin/ksh; then
        # If we have ksh, try running configure again with it.
        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
        export ORIGINAL_CONFIG_SHELL
        CONFIG_SHELL=/bin/ksh
        export CONFIG_SHELL
        exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
      else
        # Try using printf.
        echo='printf %s\n'
        if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
  	 echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
  	 test "X$echo_testing_string" = "X$echo_test_string"; then
  	# Cool, printf works
  	:
        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
  	   test "X$echo_testing_string" = 'X\t' &&
  	   echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
  	   test "X$echo_testing_string" = "X$echo_test_string"; then
  	CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
  	export CONFIG_SHELL
  	SHELL="$CONFIG_SHELL"
  	export SHELL
  	echo="$CONFIG_SHELL [$]0 --fallback-echo"
        elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
  	   test "X$echo_testing_string" = 'X\t' &&
  	   echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
  	   test "X$echo_testing_string" = "X$echo_test_string"; then
  	echo="$CONFIG_SHELL [$]0 --fallback-echo"
        else
  	# maybe with a smaller string...
  	prev=:
  
  	for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
  	  if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
  	  then
  	    break
  	  fi
  	  prev="$cmd"
  	done
  
  	if test "$prev" != 'sed 50q "[$]0"'; then
  	  echo_test_string=`eval $prev`
  	  export echo_test_string
  	  exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
  	else
  	  # Oops.  We lost completely, so just stick with echo.
  	  echo=echo
  	fi
        fi
      fi
    fi
  fi
  fi
  
  # Copy echo and quote the copy suitably for passing to libtool from
  # the Makefile, instead of quoting the original, which is used later.
  ECHO=$echo
  if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
     ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
  fi
  
  AC_SUBST(ECHO)
  AC_DIVERT_POP
  ])# _LT_AC_PROG_ECHO_BACKSLASH
  
  # _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
  #                           ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
  # ------------------------------------------------------------------
  AC_DEFUN(_LT_AC_TRY_DLOPEN_SELF,
  [if test "$cross_compiling" = yes; then :
    [$4]
  else
    AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<EOF
  [#line __oline__ "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
  #include <dlfcn.h>
  #endif
  
  #include <stdio.h>
  
  #ifdef RTLD_GLOBAL
  #  define LT_DLGLOBAL		RTLD_GLOBAL
  #else
  #  ifdef DL_GLOBAL
  #    define LT_DLGLOBAL		DL_GLOBAL
  #  else
  #    define LT_DLGLOBAL		0
  #  endif
  #endif
  
  /* We may have to define LT_DLLAZY_OR_NOW in the command line if we
     find out it does not work in some platform. */
  #ifndef LT_DLLAZY_OR_NOW
  #  ifdef RTLD_LAZY
  #    define LT_DLLAZY_OR_NOW		RTLD_LAZY
  #  else
  #    ifdef DL_LAZY
  #      define LT_DLLAZY_OR_NOW		DL_LAZY
  #    else
  #      ifdef RTLD_NOW
  #        define LT_DLLAZY_OR_NOW	RTLD_NOW
  #      else
  #        ifdef DL_NOW
  #          define LT_DLLAZY_OR_NOW	DL_NOW
  #        else
  #          define LT_DLLAZY_OR_NOW	0
  #        endif
  #      endif
  #    endif
  #  endif
  #endif
  
  #ifdef __cplusplus
  extern "C" void exit (int);
  #endif
  
  void fnord() { int i=42;}
  int main ()
  {
    void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
    int status = $lt_dlunknown;
  
    if (self)
      {
        if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
        else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
        /* dlclose (self); */
      }
  
      exit (status);
  }]
  EOF
    if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
      (./conftest; exit; ) 2>/dev/null
      lt_status=$?
      case x$lt_status in
        x$lt_dlno_uscore) $1 ;;
        x$lt_dlneed_uscore) $2 ;;
        x$lt_unknown|x*) $3 ;;
      esac
    else :
      # compilation failed
      $3
    fi
  fi
  rm -fr conftest*
  ])# _LT_AC_TRY_DLOPEN_SELF
  
  # AC_LIBTOOL_DLOPEN_SELF
  # -------------------
  AC_DEFUN(AC_LIBTOOL_DLOPEN_SELF,
  [if test "x$enable_dlopen" != xyes; then
    enable_dlopen=unknown
    enable_dlopen_self=unknown
    enable_dlopen_self_static=unknown
  else
    lt_cv_dlopen=no
    lt_cv_dlopen_libs=
  
    case $host_os in
    beos*)
      lt_cv_dlopen="load_add_on"
      lt_cv_dlopen_libs=
      lt_cv_dlopen_self=yes
      ;;
  
    cygwin* | mingw* | pw32*)
      lt_cv_dlopen="LoadLibrary"
      lt_cv_dlopen_libs=
     ;;
  
    *)
      AC_CHECK_LIB(dl, dlopen,  [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
        [AC_CHECK_FUNC(dlopen, lt_cv_dlopen="dlopen",
          [AC_CHECK_FUNC(shl_load, lt_cv_dlopen="shl_load",
            [AC_CHECK_LIB(svld, dlopen,
  	    [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
              [AC_CHECK_LIB(dld, shl_load,
                [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
  	    ])
            ])
          ])
        ])
      ;;
    esac
  
    if test "x$lt_cv_dlopen" != xno; then
      enable_dlopen=yes
    else
      enable_dlopen=no
    fi
  
    case $lt_cv_dlopen in
    dlopen)
      save_CPPFLAGS="$CPPFLAGS"
      AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
      test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
  
      save_LDFLAGS="$LDFLAGS"
      eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
  
      save_LIBS="$LIBS"
      LIBS="$lt_cv_dlopen_libs $LIBS"
  
      AC_CACHE_CHECK([whether a program can dlopen itself],
  	  lt_cv_dlopen_self, [dnl
  	  _LT_AC_TRY_DLOPEN_SELF(
  	    lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
  	    lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
      ])
  
      if test "x$lt_cv_dlopen_self" = xyes; then
        LDFLAGS="$LDFLAGS $link_static_flag"
        AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
      	  lt_cv_dlopen_self_static, [dnl
  	  _LT_AC_TRY_DLOPEN_SELF(
  	    lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
  	    lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
        ])
      fi
  
      CPPFLAGS="$save_CPPFLAGS"
      LDFLAGS="$save_LDFLAGS"
      LIBS="$save_LIBS"
      ;;
    esac
  
    case $lt_cv_dlopen_self in
    yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
    *) enable_dlopen_self=unknown ;;
    esac
  
    case $lt_cv_dlopen_self_static in
    yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
    *) enable_dlopen_self_static=unknown ;;
    esac
  fi
  ])# AC_LIBTOOL_DLOPEN_SELF
  
  AC_DEFUN([_LT_AC_LTCONFIG_HACK],
  [AC_REQUIRE([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])dnl
  # Sed substitution that helps us do robust quoting.  It backslashifies
  # metacharacters that are still active within double-quoted strings.
  Xsed='sed -e s/^X//'
  [sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g']
  
  # Same as above, but do not quote variable references.
  [double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g']
  
  # Sed substitution to delay expansion of an escaped shell variable in a
  # double_quote_subst'ed string.
  delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
  
  # Constants:
  rm="rm -f"
  
  # Global variables:
  default_ofile=libtool
  can_build_shared=yes
  
  # All known linkers require a `.a' archive for static linking (except M$VC,
  # which needs '.lib').
  libext=a
  ltmain="$ac_aux_dir/ltmain.sh"
  ofile="$default_ofile"
  with_gnu_ld="$lt_cv_prog_gnu_ld"
  need_locks="$enable_libtool_lock"
  
  old_CC="$CC"
  old_CFLAGS="$CFLAGS"
  
  # Set sane defaults for various variables
  test -z "$AR" && AR=ar
  test -z "$AR_FLAGS" && AR_FLAGS=cru
  test -z "$AS" && AS=as
  test -z "$CC" && CC=cc
  test -z "$DLLTOOL" && DLLTOOL=dlltool
  test -z "$LD" && LD=ld
  test -z "$LN_S" && LN_S="ln -s"
  test -z "$MAGIC_CMD" && MAGIC_CMD=file
  test -z "$NM" && NM=nm
  test -z "$OBJDUMP" && OBJDUMP=objdump
  test -z "$RANLIB" && RANLIB=:
  test -z "$STRIP" && STRIP=:
  test -z "$ac_objext" && ac_objext=o
  
  if test x"$host" != x"$build"; then
    ac_tool_prefix=${host_alias}-
  else
    ac_tool_prefix=
  fi
  
  # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
  case $host_os in
  linux-gnu*) ;;
  linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
  esac
  
  case $host_os in
  aix3*)
    # AIX sometimes has problems with the GCC collect2 program.  For some
    # reason, if we set the COLLECT_NAMES environment variable, the problems
    # vanish in a puff of smoke.
    if test "X${COLLECT_NAMES+set}" != Xset; then
      COLLECT_NAMES=
      export COLLECT_NAMES
    fi
    ;;
  esac
  
  # Determine commands to create old-style static archives.
  old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
  old_postinstall_cmds='chmod 644 $oldlib'
  old_postuninstall_cmds=
  
  if test -n "$RANLIB"; then
    old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
    old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
  fi
  
  # Allow CC to be a program name with arguments.
  set dummy $CC
  compiler="[$]2"
  
  ## FIXME: this should be a separate macro
  ##
  AC_MSG_CHECKING([for objdir])
  rm -f .libs 2>/dev/null
  mkdir .libs 2>/dev/null
  if test -d .libs; then
    objdir=.libs
  else
    # MS-DOS does not allow filenames that begin with a dot.
    objdir=_libs
  fi
  rmdir .libs 2>/dev/null
  AC_MSG_RESULT($objdir)
  ##
  ## END FIXME
  
  
  ## FIXME: this should be a separate macro
  ##
  AC_ARG_WITH(pic, 
  [  --with-pic              try to use only PIC/non-PIC objects [default=use both]],
  pic_mode="$withval", pic_mode=default)
  test -z "$pic_mode" && pic_mode=default
  
  # We assume here that the value for lt_cv_prog_cc_pic will not be cached
  # in isolation, and that seeing it set (from the cache) indicates that
  # the associated values are set (in the cache) correctly too.
  AC_MSG_CHECKING([for $compiler option to produce PIC])
  AC_CACHE_VAL(lt_cv_prog_cc_pic,
  [ lt_cv_prog_cc_pic=
    lt_cv_prog_cc_shlib=
    lt_cv_prog_cc_wl=
    lt_cv_prog_cc_static=
    lt_cv_prog_cc_no_builtin=
    lt_cv_prog_cc_can_build_shared=$can_build_shared
  
    if test "$GCC" = yes; then
      lt_cv_prog_cc_wl='-Wl,'
      lt_cv_prog_cc_static='-static'
  
      case $host_os in
      aix*)
        # Below there is a dirty hack to force normal static linking with -ldl
        # The problem is because libdl dynamically linked with both libc and
        # libC (AIX C++ library), which obviously doesn't included in libraries
        # list by gcc. This cause undefined symbols with -static flags.
        # This hack allows C programs to be linked with "-static -ldl", but
        # we not sure about C++ programs.
        lt_cv_prog_cc_static="$lt_cv_prog_cc_static ${lt_cv_prog_cc_wl}-lC"
        ;;
      amigaos*)
        # FIXME: we need at least 68020 code to build shared libraries, but
        # adding the `-m68020' flag to GCC prevents building anything better,
        # like `-m68040'.
        lt_cv_prog_cc_pic='-m68020 -resident32 -malways-restore-a4'
        ;;
      beos* | irix5* | irix6* | osf3* | osf4* | osf5*)
        # PIC is the default for these OSes.
        ;;
      darwin* | rhapsody*)
        # PIC is the default on this platform
        # Common symbols not allowed in MH_DYLIB files
        lt_cv_prog_cc_pic='-fno-common'
        ;;
      cygwin* | mingw* | pw32* | os2*)
        # This hack is so that the source file can tell whether it is being
        # built for inclusion in a dll (and should export symbols for example).
        lt_cv_prog_cc_pic='-DDLL_EXPORT'
        ;;
      sysv4*MP*)
        if test -d /usr/nec; then
  	 lt_cv_prog_cc_pic=-Kconform_pic
        fi
        ;;
      *)
        lt_cv_prog_cc_pic='-fPIC'
        ;;
      esac
    else
      # PORTME Check for PIC flags for the system compiler.
      case $host_os in
      aix3* | aix4* | aix5*)
        # All AIX code is PIC.
        if test "$host_cpu" = ia64; then
          # AIX 5 now supports IA64 processor
          lt_cv_prog_cc_static='-Bstatic'
          lt_cv_prog_cc_wl='-Wl,'
        else
          lt_cv_prog_cc_static='-bnso -bI:/lib/syscalls.exp'
        fi
        ;;
  
      hpux9* | hpux10* | hpux11*)
        # Is there a better lt_cv_prog_cc_static that works with the bundled CC?
        lt_cv_prog_cc_wl='-Wl,'
        lt_cv_prog_cc_static="${lt_cv_prog_cc_wl}-a ${lt_cv_prog_cc_wl}archive"
        lt_cv_prog_cc_pic='+Z'
        ;;
  
      irix5* | irix6*)
        lt_cv_prog_cc_wl='-Wl,'
        lt_cv_prog_cc_static='-non_shared'
        # PIC (with -KPIC) is the default.
        ;;
  
      cygwin* | mingw* | pw32* | os2*)
        # This hack is so that the source file can tell whether it is being
        # built for inclusion in a dll (and should export symbols for example).
        lt_cv_prog_cc_pic='-DDLL_EXPORT'
        ;;
  
      newsos6)
        lt_cv_prog_cc_pic='-KPIC'
        lt_cv_prog_cc_static='-Bstatic'
        ;;
  
      osf3* | osf4* | osf5*)
        # All OSF/1 code is PIC.
        lt_cv_prog_cc_wl='-Wl,'
        lt_cv_prog_cc_static='-non_shared'
        ;;
  
      sco3.2v5*)
        lt_cv_prog_cc_pic='-Kpic'
        lt_cv_prog_cc_static='-dn'
        lt_cv_prog_cc_shlib='-belf'
        ;;
  
      solaris*)
        lt_cv_prog_cc_pic='-KPIC'
        lt_cv_prog_cc_static='-Bstatic'
        lt_cv_prog_cc_wl='-Wl,'
        ;;
  
      sunos4*)
        lt_cv_prog_cc_pic='-PIC'
        lt_cv_prog_cc_static='-Bstatic'
        lt_cv_prog_cc_wl='-Qoption ld '
        ;;
  
      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
        lt_cv_prog_cc_pic='-KPIC'
        lt_cv_prog_cc_static='-Bstatic'
        if test "x$host_vendor" = xsni; then
          lt_cv_prog_cc_wl='-LD'
        else
          lt_cv_prog_cc_wl='-Wl,'
        fi
        ;;
  
      uts4*)
        lt_cv_prog_cc_pic='-pic'
        lt_cv_prog_cc_static='-Bstatic'
        ;;
  
      sysv4*MP*)
        if test -d /usr/nec ;then
  	lt_cv_prog_cc_pic='-Kconform_pic'
  	lt_cv_prog_cc_static='-Bstatic'
        fi
        ;;
  
      *)
        lt_cv_prog_cc_can_build_shared=no
        ;;
      esac
    fi
  ])
  if test -z "$lt_cv_prog_cc_pic"; then
    AC_MSG_RESULT([none])
  else
    AC_MSG_RESULT([$lt_cv_prog_cc_pic])
  
    # Check to make sure the pic_flag actually works.
    AC_MSG_CHECKING([if $compiler PIC flag $lt_cv_prog_cc_pic works])
    AC_CACHE_VAL(lt_cv_prog_cc_pic_works, [dnl
      save_CFLAGS="$CFLAGS"
      CFLAGS="$CFLAGS $lt_cv_prog_cc_pic -DPIC"
      AC_TRY_COMPILE([], [], [dnl
        case $host_os in
        hpux9* | hpux10* | hpux11*)
  	# On HP-UX, both CC and GCC only warn that PIC is supported... then
  	# they create non-PIC objects.  So, if there were any warnings, we
  	# assume that PIC is not supported.
  	if test -s conftest.err; then
  	  lt_cv_prog_cc_pic_works=no
  	else
  	  lt_cv_prog_cc_pic_works=yes
  	fi
  	;;
        *)
  	lt_cv_prog_cc_pic_works=yes
  	;;
        esac
      ], [dnl
        lt_cv_prog_cc_pic_works=no
      ])
      CFLAGS="$save_CFLAGS"
    ])
  
    if test "X$lt_cv_prog_cc_pic_works" = Xno; then
      lt_cv_prog_cc_pic=
      lt_cv_prog_cc_can_build_shared=no
    else
      lt_cv_prog_cc_pic=" $lt_cv_prog_cc_pic"
    fi
  
    AC_MSG_RESULT([$lt_cv_prog_cc_pic_works])
  fi
  ##
  ## END FIXME
  
  # Check for any special shared library compilation flags.
  if test -n "$lt_cv_prog_cc_shlib"; then
    AC_MSG_WARN([\`$CC' requires \`$lt_cv_prog_cc_shlib' to build shared libraries])
    if echo "$old_CC $old_CFLAGS " | [egrep -e "[ 	]$lt_cv_prog_cc_shlib[ 	]"] >/dev/null; then :
    else
     AC_MSG_WARN([add \`$lt_cv_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure])
      lt_cv_prog_cc_can_build_shared=no
    fi
  fi
  
  ## FIXME: this should be a separate macro
  ##
  AC_MSG_CHECKING([if $compiler static flag $lt_cv_prog_cc_static works])
  AC_CACHE_VAL([lt_cv_prog_cc_static_works], [dnl
    lt_cv_prog_cc_static_works=no
    save_LDFLAGS="$LDFLAGS"
    LDFLAGS="$LDFLAGS $lt_cv_prog_cc_static"
    AC_TRY_LINK([], [], [lt_cv_prog_cc_static_works=yes])
    LDFLAGS="$save_LDFLAGS"
  ])
  
  # Belt *and* braces to stop my trousers falling down:
  test "X$lt_cv_prog_cc_static_works" = Xno && lt_cv_prog_cc_static=
  AC_MSG_RESULT([$lt_cv_prog_cc_static_works])
  
  pic_flag="$lt_cv_prog_cc_pic"
  special_shlib_compile_flags="$lt_cv_prog_cc_shlib"
  wl="$lt_cv_prog_cc_wl"
  link_static_flag="$lt_cv_prog_cc_static"
  no_builtin_flag="$lt_cv_prog_cc_no_builtin"
  can_build_shared="$lt_cv_prog_cc_can_build_shared"
  ##
  ## END FIXME
  
  
  ## FIXME: this should be a separate macro
  ##
  # Check to see if options -o and -c are simultaneously supported by compiler
  AC_MSG_CHECKING([if $compiler supports -c -o file.$ac_objext])
  AC_CACHE_VAL([lt_cv_compiler_c_o], [
  $rm -r conftest 2>/dev/null
  mkdir conftest
  cd conftest
  echo "int some_variable = 0;" > conftest.$ac_ext
  mkdir out
  # According to Tom Tromey, Ian Lance Taylor reported there are C compilers
  # that will create temporary files in the current directory regardless of
  # the output directory.  Thus, making CWD read-only will cause this test
  # to fail, enabling locking or at least warning the user not to do parallel
  # builds.
  chmod -w .
  save_CFLAGS="$CFLAGS"
  CFLAGS="$CFLAGS -o out/conftest2.$ac_objext"
  compiler_c_o=no
  if { (eval echo configure:__oline__: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.$ac_objext; then
    # The compiler can only warn and ignore the option if not recognized
    # So say no if there are warnings
    if test -s out/conftest.err; then
      lt_cv_compiler_c_o=no
    else
      lt_cv_compiler_c_o=yes
    fi
  else
    # Append any errors to the config.log.
    cat out/conftest.err 1>&AC_FD_CC
    lt_cv_compiler_c_o=no
  fi
  CFLAGS="$save_CFLAGS"
  chmod u+w .
  $rm conftest* out/*
  rmdir out
  cd ..
  rmdir conftest
  $rm -r conftest 2>/dev/null
  ])
  compiler_c_o=$lt_cv_compiler_c_o
  AC_MSG_RESULT([$compiler_c_o])
  
  if test x"$compiler_c_o" = x"yes"; then
    # Check to see if we can write to a .lo
    AC_MSG_CHECKING([if $compiler supports -c -o file.lo])
    AC_CACHE_VAL([lt_cv_compiler_o_lo], [
    lt_cv_compiler_o_lo=no
    save_CFLAGS="$CFLAGS"
    CFLAGS="$CFLAGS -c -o conftest.lo"
    AC_TRY_COMPILE([], [int some_variable = 0;], [dnl
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings
      if test -s conftest.err; then
        lt_cv_compiler_o_lo=no
      else
        lt_cv_compiler_o_lo=yes
      fi
    ])
    CFLAGS="$save_CFLAGS"
    ])
    compiler_o_lo=$lt_cv_compiler_o_lo
    AC_MSG_RESULT([$compiler_c_lo])
  else
    compiler_o_lo=no
  fi
  ##
  ## END FIXME
  
  ## FIXME: this should be a separate macro
  ##
  # Check to see if we can do hard links to lock some files if needed
  hard_links="nottested"
  if test "$compiler_c_o" = no && test "$need_locks" != no; then
    # do not overwrite the value of need_locks provided by the user
    AC_MSG_CHECKING([if we can lock with hard links])
    hard_links=yes
    $rm conftest*
    ln conftest.a conftest.b 2>/dev/null && hard_links=no
    touch conftest.a
    ln conftest.a conftest.b 2>&5 || hard_links=no
    ln conftest.a conftest.b 2>/dev/null && hard_links=no
    AC_MSG_RESULT([$hard_links])
    if test "$hard_links" = no; then
      AC_MSG_WARN([\`$CC' does not support \`-c -o', so \`make -j' may be unsafe])
      need_locks=warn
    fi
  else
    need_locks=no
  fi
  ##
  ## END FIXME
  
  ## FIXME: this should be a separate macro
  ##
  if test "$GCC" = yes; then
    # Check to see if options -fno-rtti -fno-exceptions are supported by compiler
    AC_MSG_CHECKING([if $compiler supports -fno-rtti -fno-exceptions])
    echo "int some_variable = 0;" > conftest.$ac_ext
    save_CFLAGS="$CFLAGS"
    CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.$ac_ext"
    compiler_rtti_exceptions=no
    AC_TRY_COMPILE([], [int some_variable = 0;], [dnl
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings
      if test -s conftest.err; then
        compiler_rtti_exceptions=no
      else
        compiler_rtti_exceptions=yes
      fi
    ])
    CFLAGS="$save_CFLAGS"
    AC_MSG_RESULT([$compiler_rtti_exceptions])
  
    if test "$compiler_rtti_exceptions" = "yes"; then
      no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions'
    else
      no_builtin_flag=' -fno-builtin'
    fi
  fi
  ##
  ## END FIXME
  
  ## FIXME: this should be a separate macro
  ##
  # See if the linker supports building shared libraries.
  AC_MSG_CHECKING([whether the linker ($LD) supports shared libraries])
  
  allow_undefined_flag=
  no_undefined_flag=
  need_lib_prefix=unknown
  need_version=unknown
  # when you set need_version to no, make sure it does not cause -set_version
  # flags to be left without arguments
  archive_cmds=
  archive_expsym_cmds=
  old_archive_from_new_cmds=
  old_archive_from_expsyms_cmds=
  export_dynamic_flag_spec=
  whole_archive_flag_spec=
  thread_safe_flag_spec=
  hardcode_into_libs=no
  hardcode_libdir_flag_spec=
  hardcode_libdir_separator=
  hardcode_direct=no
  hardcode_minus_L=no
  hardcode_shlibpath_var=unsupported
  runpath_var=
  link_all_deplibs=unknown
  always_export_symbols=no
  export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols'
  # include_expsyms should be a list of space-separated symbols to be *always*
  # included in the symbol list
  include_expsyms=
  # exclude_expsyms can be an egrep regular expression of symbols to exclude
  # it will be wrapped by ` (' and `)$', so one must not match beginning or
  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
  # as well as any symbol that contains `d'.
  exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
  # platforms (ab)use it in PIC code, but their linkers get confused if
  # the symbol is explicitly referenced.  Since portable code cannot
  # rely on this symbol name, it's probably fine to never include it in
  # preloaded symbol tables.
  extract_expsyms_cmds=
  
  case $host_os in
  cygwin* | mingw* | pw32* )
    # FIXME: the MSVC++ port hasn't been tested in a loooong time
    # When not using gcc, we currently assume that we are using
    # Microsoft Visual C++.
    if test "$GCC" != yes; then
      with_gnu_ld=no
    fi
    ;;
  
  esac
  
  ld_shlibs=yes
  if test "$with_gnu_ld" = yes; then
    # If archive_cmds runs LD, not CC, wlarc should be empty
    wlarc='${wl}'
  
    # See if GNU ld supports shared libraries.
    case $host_os in
    aix3* | aix4* | aix5*)
      # On AIX, the GNU linker is very broken
      # Note:Check GNU linker on AIX 5-IA64 when/if it becomes available.
      ld_shlibs=no
      cat <<EOF 1>&2
  
  *** Warning: the GNU linker, at least up to release 2.9.1, is reported
  *** to be unable to reliably create shared libraries on AIX.
  *** Therefore, libtool is disabling shared libraries support.  If you
  *** really care for shared libraries, you may want to modify your PATH
  *** so that a non-GNU linker is found, and then restart.
  
  EOF
      ;;
  
    amigaos*)
      archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
      hardcode_libdir_flag_spec='-L$libdir'
      hardcode_minus_L=yes
  
      # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
      # that the semantics of dynamic libraries on AmigaOS, at least up
      # to version 4, is to share data among multiple programs linked
      # with the same dynamic library.  Since this doesn't match the
      # behavior of shared libraries on other platforms, we can use
      # them.
      ld_shlibs=no
      ;;
  
    beos*)
      if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
        allow_undefined_flag=unsupported
        # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
        # support --undefined.  This deserves some investigation.  FIXME
        archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
      else
        ld_shlibs=no
      fi
      ;;
  
    cygwin* | mingw* | pw32*)
      # hardcode_libdir_flag_spec is actually meaningless, as there is
      # no search path for DLLs.
      hardcode_libdir_flag_spec='-L$libdir'
      allow_undefined_flag=unsupported
      always_export_symbols=yes
  
      extract_expsyms_cmds='test -f $output_objdir/impgen.c || \
        sed -e "/^# \/\* impgen\.c starts here \*\//,/^# \/\* impgen.c ends here \*\// { s/^# //;s/^# *$//; p; }" -e d < $''0 > $output_objdir/impgen.c~
        test -f $output_objdir/impgen.exe || (cd $output_objdir && \
        if test "x$HOST_CC" != "x" ; then $HOST_CC -o impgen impgen.c ; \
        else $CC -o impgen impgen.c ; fi)~
        $output_objdir/impgen $dir/$soroot > $output_objdir/$soname-def'
  
      old_archive_from_expsyms_cmds='$DLLTOOL --as=$AS --dllname $soname --def $output_objdir/$soname-def --output-lib $output_objdir/$newlib'
  
      # cygwin and mingw dlls have different entry points and sets of symbols
      # to exclude.
      # FIXME: what about values for MSVC?
      dll_entry=__cygwin_dll_entry@12
      dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12~
      case $host_os in
      mingw*)
        # mingw values
        dll_entry=_DllMainCRTStartup@12
        dll_exclude_symbols=DllMain@12,DllMainCRTStartup@12,DllEntryPoint@12~
        ;;
      esac
  
      # mingw and cygwin differ, and it's simplest to just exclude the union
      # of the two symbol sets.
      dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12,DllMainCRTStartup@12,DllEntryPoint@12
  
      # recent cygwin and mingw systems supply a stub DllMain which the user
      # can override, but on older systems we have to supply one (in ltdll.c)
      if test "x$lt_cv_need_dllmain" = "xyes"; then
        ltdll_obj='$output_objdir/$soname-ltdll.'"$ac_objext "
        ltdll_cmds='test -f $output_objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < [$]0 > $output_objdir/$soname-ltdll.c~
  	test -f $output_objdir/$soname-ltdll.$ac_objext || (cd $output_objdir && $CC -c $soname-ltdll.c)~'
      else
        ltdll_obj=
        ltdll_cmds=
      fi
  
      # Extract the symbol export list from an `--export-all' def file,
      # then regenerate the def file from the symbol export list, so that
      # the compiled dll only exports the symbol export list.
      # Be careful not to strip the DATA tag left be newer dlltools.
      export_symbols_cmds="$ltdll_cmds"'
        $DLLTOOL --export-all --exclude-symbols '$dll_exclude_symbols' --output-def $output_objdir/$soname-def '$ltdll_obj'$libobjs $convenience~
        [sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]*//" -e "s/ *;.*$//"] < $output_objdir/$soname-def > $export_symbols'
  
      # If the export-symbols file already is a .def file (1st line
      # is EXPORTS), use it as is.
      # If DATA tags from a recent dlltool are present, honour them!
      archive_expsym_cmds='if test "x`head -1 $export_symbols`" = xEXPORTS; then
          cp $export_symbols $output_objdir/$soname-def;
        else
          echo EXPORTS > $output_objdir/$soname-def;
          _lt_hint=1;
          cat $export_symbols | while read symbol; do
           set dummy \$symbol;
           case \[$]# in
             2) echo "   \[$]2 @ \$_lt_hint ; " >> $output_objdir/$soname-def;;
             *) echo "     \[$]2 @ \$_lt_hint \[$]3 ; " >> $output_objdir/$soname-def;;
           esac;
           _lt_hint=`expr 1 + \$_lt_hint`;
          done;
        fi~
        '"$ltdll_cmds"'
        $CC -Wl,--base-file,$output_objdir/$soname-base '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~
        $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp~
        $CC -Wl,--base-file,$output_objdir/$soname-base $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~
        $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp --output-lib $output_objdir/$libname.dll.a~
        $CC $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags'
      ;;
  
    netbsd*)
      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
        archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
        wlarc=
      else
        archive_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
        archive_expsym_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
      fi
      ;;
  
    solaris* | sysv5*)
      if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then
        ld_shlibs=no
        cat <<EOF 1>&2
  
  *** Warning: The releases 2.8.* of the GNU linker cannot reliably
  *** create shared libraries on Solaris systems.  Therefore, libtool
  *** is disabling shared libraries support.  We urge you to upgrade GNU
  *** binutils to release 2.9.1 or newer.  Another option is to modify
  *** your PATH or compiler configuration so that the native linker is
  *** used, and then restart.
  
  EOF
      elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
        archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
      else
        ld_shlibs=no
      fi
      ;;
  
    sunos4*)
      archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
      wlarc=
      hardcode_direct=yes
      hardcode_shlibpath_var=no
      ;;
  
    *)
      if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
        archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
      else
        ld_shlibs=no
      fi
      ;;
    esac
  
    if test "$ld_shlibs" = yes; then
      runpath_var=LD_RUN_PATH
      hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
      export_dynamic_flag_spec='${wl}--export-dynamic'
      case $host_os in
      cygwin* | mingw* | pw32*)
        # dlltool doesn't understand --whole-archive et. al.
        whole_archive_flag_spec=
        ;;
      *)
        # ancient GNU ld didn't support --whole-archive et. al.
        if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then
  	whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
        else
  	whole_archive_flag_spec=
        fi
        ;;
      esac
    fi
  else
    # PORTME fill in a description of your system's linker (not GNU ld)
    case $host_os in
    aix3*)
      allow_undefined_flag=unsupported
      always_export_symbols=yes
      archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
      # Note: this linker hardcodes the directories in LIBPATH if there
      # are no directories specified by -L.
      hardcode_minus_L=yes
      if test "$GCC" = yes && test -z "$link_static_flag"; then
        # Neither direct hardcoding nor static linking is supported with a
        # broken collect2.
        hardcode_direct=unsupported
      fi
      ;;
  
    aix4* | aix5*)
      # When large executables or shared objects are built, AIX ld can
      # have problems creating the table of contents.  If linking a library
      # or program results in "error TOC overflow" add -mminimal-toc to
      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
  
      archive_cmds=''
      hardcode_libdir_separator=':'
      if test "$GCC" = yes; then
        collect2name=`${CC} -print-prog-name=collect2`
        if test -f "$collect2name" && \
  	 strings "$collect2name" | grep resolve_lib_name >/dev/null
        then
  	# We have reworked collect2
  	hardcode_direct=yes
        else
          # We have old collect2
          hardcode_direct=unsupported
          # It fails to find uninstalled libraries when the uninstalled
          # path is not listed in the libpath.  Setting hardcode_minus_L
          # to unsupported forces relinking
          hardcode_minus_L=yes
          hardcode_libdir_flag_spec='-L$libdir'
          hardcode_libdir_separator=
        fi
        shared_flag='-shared'
      else
        if test "$host_cpu" = ia64; then
          shared_flag='-G'
        else
          shared_flag='${wl}-bM:SRE'
        fi
        hardcode_direct=yes
      fi
  
      if test "$host_cpu" = ia64; then
        # On IA64, the linker does run time linking by default, so we don't
        # have to do anything special.
        aix_use_runtimelinking=no
        exp_sym_flag='-Bexport'
        no_entry_flag=""
      else
        # Test if we are trying to use run time linking, or normal AIX style linking.
        # If -brtl is somewhere in LDFLAGS, we need to do run time linking.
        aix_use_runtimelinking=no
        for ld_flag in $LDFLAGS; do
          if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl" ); then
            aix_use_runtimelinking=yes
            break
          fi
        done
        exp_sym_flag='-bexport'
        no_entry_flag='-bnoentry'
      fi
      # It seems that -bexpall can do strange things, so it is better to
      # generate a list of symbols to export.
      always_export_symbols=yes
      if test "$aix_use_runtimelinking" = yes; then
        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib'
        allow_undefined_flag=' -Wl,-G'
        archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
      else
        if test "$host_cpu" = ia64; then
          hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
         allow_undefined_flag="-znodefs"
          archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname ${wl}-h$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
        else
          hardcode_libdir_flag_spec='${wl}-bnolibpath ${wl}-blibpath:$libdir:/usr/lib:/lib'
          # Warning - without using the other run time loading flags, -berok will
          #           link without error, but may produce a broken library.
          allow_undefined_flag='${wl}-berok"
          # This is a bit strange, but is similar to how AIX traditionally builds
          # it's shared libraries.
          archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"' ~$AR -crlo $objdir/$libname$release.a $objdir/$soname'
        fi
      fi
      ;;
  
    amigaos*)
      archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
      hardcode_libdir_flag_spec='-L$libdir'
      hardcode_minus_L=yes
      # see comment about different semantics on the GNU ld section
      ld_shlibs=no
      ;;
  
    cygwin* | mingw* | pw32*)
      # When not using gcc, we currently assume that we are using
      # Microsoft Visual C++.
      # hardcode_libdir_flag_spec is actually meaningless, as there is
      # no search path for DLLs.
      hardcode_libdir_flag_spec=' '
      allow_undefined_flag=unsupported
      # Tell ltmain to make .lib files, not .a files.
      libext=lib
      # FIXME: Setting linknames here is a bad hack.
      archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames='
      # The linker will automatically build a .lib file if we build a DLL.
      old_archive_from_new_cmds='true'
      # FIXME: Should let the user specify the lib program.
      old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs'
      fix_srcfile_path='`cygpath -w "$srcfile"`'
      ;;
  
    darwin* | rhapsody*)
      allow_undefined_flag='-undefined suppress'
      # FIXME: Relying on posixy $() will cause problems for
      #        cross-compilation, but unfortunately the echo tests do not
      #        yet detect zsh echo's removal of \ escapes.
      archive_cmds='$CC $(test .$module = .yes && echo -bundle || echo -dynamiclib) $allow_undefined_flag -o $lib $libobjs $deplibs$linkopts -install_name $rpath/$soname $(test -n "$verstring" -a x$verstring != x0.0 && echo $verstring)'
      # We need to add '_' to the symbols in $export_symbols first
      #archive_expsym_cmds="$archive_cmds"' && strip -s $export_symbols'
      hardcode_direct=yes
      hardcode_shlibpath_var=no
      whole_archive_flag_spec='-all_load $convenience'
      ;;
  
    freebsd1*)
      ld_shlibs=no
      ;;
  
    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
    # support.  Future versions do this automatically, but an explicit c++rt0.o
    # does not break anything, and helps significantly (at the cost of a little
    # extra space).
    freebsd2.2*)
      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
      hardcode_libdir_flag_spec='-R$libdir'
      hardcode_direct=yes
      hardcode_shlibpath_var=no
      ;;
  
    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
    freebsd2*)
      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
      hardcode_direct=yes
      hardcode_minus_L=yes
      hardcode_shlibpath_var=no
      ;;
  
    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
    freebsd*)
      archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
      hardcode_libdir_flag_spec='-R$libdir'
      hardcode_direct=yes
      hardcode_shlibpath_var=no
      ;;
  
    hpux9* | hpux10* | hpux11*)
      case $host_os in
      hpux9*) archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ;;
      *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;;
      esac
      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
      hardcode_libdir_separator=:
      hardcode_direct=yes
      hardcode_minus_L=yes # Not in the search PATH, but as the default
  			 # location of the library.
      export_dynamic_flag_spec='${wl}-E'
      ;;
  
    irix5* | irix6*)
      if test "$GCC" = yes; then
        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
      else
        archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
      fi
      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
      hardcode_libdir_separator=:
      link_all_deplibs=yes
      ;;
  
    netbsd*)
      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
        archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
      else
        archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
      fi
      hardcode_libdir_flag_spec='-R$libdir'
      hardcode_direct=yes
      hardcode_shlibpath_var=no
      ;;
  
    newsos6)
      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
      hardcode_direct=yes
      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
      hardcode_libdir_separator=:
      hardcode_shlibpath_var=no
      ;;
  
    openbsd*)
      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
      hardcode_libdir_flag_spec='-R$libdir'
      hardcode_direct=yes
      hardcode_shlibpath_var=no
      ;;
  
    os2*)
      hardcode_libdir_flag_spec='-L$libdir'
      hardcode_minus_L=yes
      allow_undefined_flag=unsupported
      archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
      old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
      ;;
  
    osf3*)
      if test "$GCC" = yes; then
        allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
        archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
      else
        allow_undefined_flag=' -expect_unresolved \*'
        archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
      fi
      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
      hardcode_libdir_separator=:
      ;;
  
    osf4* | osf5*)	# as osf3* with the addition of -msym flag
      if test "$GCC" = yes; then
        allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
        archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
        hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
      else
        allow_undefined_flag=' -expect_unresolved \*'
        archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
        archive_expsym_cmds='for i in `cat $export_symbols`; do printf "-exported_symbol " >> $lib.exp; echo "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
        $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
  
        #Both c and cxx compiler support -rpath directly
        hardcode_libdir_flag_spec='-rpath $libdir'
      fi
      hardcode_libdir_separator=:
      ;;
  
    sco3.2v5*)
      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
      hardcode_shlibpath_var=no
      runpath_var=LD_RUN_PATH
      hardcode_runpath_var=yes
      ;;
  
    solaris*)
      no_undefined_flag=' -z defs'
      # $CC -shared without GNU ld will not create a library from C++
      # object files and a static libstdc++, better avoid it by now
      archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
      archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
  		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
      hardcode_libdir_flag_spec='-R$libdir'
      hardcode_shlibpath_var=no
      case $host_os in
      [solaris2.[0-5] | solaris2.[0-5].*]) ;;
      *) # Supported since Solaris 2.6 (maybe 2.5.1?)
        whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;
      esac
      link_all_deplibs=yes
      ;;
  
    sunos4*)
      if test "x$host_vendor" = xsequent; then
        # Use $CC to link under sequent, because it throws in some extra .o
        # files that make .init and .fini sections work.
        archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
      else
        archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
      fi
      hardcode_libdir_flag_spec='-L$libdir'
      hardcode_direct=yes
      hardcode_minus_L=yes
      hardcode_shlibpath_var=no
      ;;
  
    sysv4)
      if test "x$host_vendor" = xsno; then
        archive_cmds='$LD -G -Bsymbolic -h $soname -o $lib $libobjs $deplibs $linkopts'
        hardcode_direct=yes # is this really true???
      else
        archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
        hardcode_direct=no #Motorola manual says yes, but my tests say they lie
      fi
      runpath_var='LD_RUN_PATH'
      hardcode_shlibpath_var=no
      ;;
  
    sysv4.3*)
      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
      hardcode_shlibpath_var=no
      export_dynamic_flag_spec='-Bexport'
      ;;
  
    sysv5*)
      no_undefined_flag=' -z text'
      # $CC -shared without GNU ld will not create a library from C++
      # object files and a static libstdc++, better avoid it by now
      archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
      archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
  		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
      hardcode_libdir_flag_spec=
      hardcode_shlibpath_var=no
      runpath_var='LD_RUN_PATH'
      ;;
  
    uts4*)
      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
      hardcode_libdir_flag_spec='-L$libdir'
      hardcode_shlibpath_var=no
      ;;
  
    dgux*)
      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
      hardcode_libdir_flag_spec='-L$libdir'
      hardcode_shlibpath_var=no
      ;;
  
    sysv4*MP*)
      if test -d /usr/nec; then
        archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
        hardcode_shlibpath_var=no
        runpath_var=LD_RUN_PATH
        hardcode_runpath_var=yes
        ld_shlibs=yes
      fi
      ;;
  
    sysv4.2uw2*)
      archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
      hardcode_direct=yes
      hardcode_minus_L=no
      hardcode_shlibpath_var=no
      hardcode_runpath_var=yes
      runpath_var=LD_RUN_PATH
      ;;
  
    sysv5uw7* | unixware7*)
      no_undefined_flag='${wl}-z ${wl}text'
      if test "$GCC" = yes; then
        archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
      else
        archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
      fi
      runpath_var='LD_RUN_PATH'
      hardcode_shlibpath_var=no
      ;;
  
    *)
      ld_shlibs=no
      ;;
    esac
  fi
  AC_MSG_RESULT([$ld_shlibs])
  test "$ld_shlibs" = no && can_build_shared=no
  ##
  ## END FIXME
  
  ## FIXME: this should be a separate macro
  ##
  # Check hardcoding attributes.
  AC_MSG_CHECKING([how to hardcode library paths into programs])
  hardcode_action=
  if test -n "$hardcode_libdir_flag_spec" || \
     test -n "$runpath_var"; then
  
    # We can hardcode non-existant directories.
    if test "$hardcode_direct" != no &&
       # If the only mechanism to avoid hardcoding is shlibpath_var, we
       # have to relink, otherwise we might link with an installed library
       # when we should be linking with a yet-to-be-installed one
       ## test "$hardcode_shlibpath_var" != no &&
       test "$hardcode_minus_L" != no; then
      # Linking always hardcodes the temporary library directory.
      hardcode_action=relink
    else
      # We can link without hardcoding, and we can hardcode nonexisting dirs.
      hardcode_action=immediate
    fi
  else
    # We cannot hardcode anything, or else we can only hardcode existing
    # directories.
    hardcode_action=unsupported
  fi
  AC_MSG_RESULT([$hardcode_action])
  ##
  ## END FIXME
  
  ## FIXME: this should be a separate macro
  ##
  striplib=
  old_striplib=
  AC_MSG_CHECKING([whether stripping libraries is possible])
  if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
    test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
    test -z "$striplib" && striplib="$STRIP --strip-unneeded"
    AC_MSG_RESULT([yes])
  else
    AC_MSG_RESULT([no])
  fi
  ##
  ## END FIXME
  
  reload_cmds='$LD$reload_flag -o $output$reload_objs'
  test -z "$deplibs_check_method" && deplibs_check_method=unknown
  
  ## FIXME: this should be a separate macro
  ##
  # PORTME Fill in your ld.so characteristics
  AC_MSG_CHECKING([dynamic linker characteristics])
  library_names_spec=
  libname_spec='lib$name'
  soname_spec=
  postinstall_cmds=
  postuninstall_cmds=
  finish_cmds=
  finish_eval=
  shlibpath_var=
  shlibpath_overrides_runpath=unknown
  version_type=none
  dynamic_linker="$host_os ld.so"
  sys_lib_dlsearch_path_spec="/lib /usr/lib"
  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
  
  case $host_os in
  aix3*)
    version_type=linux
    library_names_spec='${libname}${release}.so$versuffix $libname.a'
    shlibpath_var=LIBPATH
  
    # AIX has no versioning support, so we append a major version to the name.
    soname_spec='${libname}${release}.so$major'
    ;;
  
  aix4* | aix5*)
    version_type=linux
    if test "$host_cpu" = ia64; then
      # AIX 5 supports IA64
      library_names_spec='${libname}${release}.so$major ${libname}${release}.so$versuffix $libname.so'
      shlibpath_var=LD_LIBRARY_PATH
    else
      # With GCC up to 2.95.x, collect2 would create an import file
      # for dependence libraries.  The import file would start with
      # the line `#! .'.  This would cause the generated library to
      # depend on `.', always an invalid library.  This was fixed in
      # development snapshots of GCC prior to 3.0.
      case $host_os in
        [ aix4 | aix4.[01] | aix4.[01].*)]
        if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
             echo ' yes '
             echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
          :
        else
          can_build_shared=no
        fi
        ;;
      esac
      # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
      # soname into executable. Probably we can add versioning support to
      # collect2, so additional links can be useful in future.
      if test "$aix_use_runtimelinking" = yes; then
        # If using run time linking (on AIX 4.2 or later) use lib<name>.so instead of
        # lib<name>.a to let people know that these are not typical AIX shared libraries.
        library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
      else
        # We preserve .a as extension for shared libraries through AIX4.2
        # and later when we are not doing run time linking.
        library_names_spec='${libname}${release}.a $libname.a'
        soname_spec='${libname}${release}.so$major'
      fi
      shlibpath_var=LIBPATH
      deplibs_check_method=pass_all
    fi
    ;;
  
  amigaos*)
    library_names_spec='$libname.ixlibrary $libname.a'
    # Create ${libname}_ixlibrary.a entries in /sys/libs.
    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | [$Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\'']`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
    ;;
  
  beos*)
    library_names_spec='${libname}.so'
    dynamic_linker="$host_os ld.so"
    shlibpath_var=LIBRARY_PATH
    ;;
  
  bsdi4*)
    version_type=linux
    need_version=no
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
    soname_spec='${libname}${release}.so$major'
    finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
    shlibpath_var=LD_LIBRARY_PATH
    sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
    sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
    export_dynamic_flag_spec=-rdynamic
    # the default ld.so.conf also contains /usr/contrib/lib and
    # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
    # libtool to hard-code these into programs
    ;;
  
  cygwin* | mingw* | pw32*)
    version_type=windows
    need_version=no
    need_lib_prefix=no
    case $GCC,$host_os in
    yes,cygwin*)
      library_names_spec='$libname.dll.a'
      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | [sed -e 's/[.]/-/g']`${versuffix}.dll'
      postinstall_cmds='dlpath=`bash 2>&1 -c '\''. $dir/${file}i;echo \$dlname'\''`~
        dldir=$destdir/`dirname \$dlpath`~
        test -d \$dldir || mkdir -p \$dldir~
        $install_prog .libs/$dlname \$dldir/$dlname'
      postuninstall_cmds='dldll=`bash 2>&1 -c '\''. $file; echo \$dlname'\''`~
        dlpath=$dir/\$dldll~
         $rm \$dlpath'
      ;;
    yes,mingw*)
      library_names_spec='${libname}`echo ${release} | [sed -e 's/[.]/-/g']`${versuffix}.dll'
      sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | sed -e "s/^libraries://" -e "s/;/ /g"`
      ;;
    yes,pw32*)
      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll'
      ;;
    *)
      library_names_spec='${libname}`echo ${release} | [sed -e 's/[.]/-/g']`${versuffix}.dll $libname.lib'
      ;;
    esac
    dynamic_linker='Win32 ld.exe'
    # FIXME: first we should search . and the directory the executable is in
    shlibpath_var=PATH
    ;;
  
  darwin* | rhapsody*)
    dynamic_linker="$host_os dyld"
    version_type=darwin
    need_lib_prefix=no
    need_version=no
    # FIXME: Relying on posixy $() will cause problems for
    #        cross-compilation, but unfortunately the echo tests do not
    #        yet detect zsh echo's removal of \ escapes.
    library_names_spec='${libname}${release}${versuffix}.$(test .$module = .yes && echo so || echo dylib) ${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib) ${libname}.$(test .$module = .yes && echo so || echo dylib)'
    soname_spec='${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib)'
    shlibpath_overrides_runpath=yes
    shlibpath_var=DYLD_LIBRARY_PATH
    ;;
  
  freebsd1*)
    dynamic_linker=no
    ;;
  
  freebsd*)
    objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
    version_type=freebsd-$objformat
    case $version_type in
      freebsd-elf*)
        library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
        need_version=no
        need_lib_prefix=no
        ;;
      freebsd-*)
        library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix'
        need_version=yes
        ;;
    esac
    shlibpath_var=LD_LIBRARY_PATH
    case $host_os in
    freebsd2*)
      shlibpath_overrides_runpath=yes
      ;;
    *)
      shlibpath_overrides_runpath=no
      hardcode_into_libs=yes
      ;;
    esac
    ;;
  
  gnu*)
    version_type=linux
    need_lib_prefix=no
    need_version=no
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so'
    soname_spec='${libname}${release}.so$major'
    shlibpath_var=LD_LIBRARY_PATH
    hardcode_into_libs=yes
    ;;
  
  hpux9* | hpux10* | hpux11*)
    # Give a soname corresponding to the major version so that dld.sl refuses to
    # link against other versions.
    dynamic_linker="$host_os dld.sl"
    version_type=sunos
    need_lib_prefix=no
    need_version=no
    shlibpath_var=SHLIB_PATH
    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
    library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl'
    soname_spec='${libname}${release}.sl$major'
    # HP-UX runs *really* slowly unless shared libraries are mode 555.
    postinstall_cmds='chmod 555 $lib'
    ;;
  
  irix5* | irix6*)
    version_type=irix
    need_lib_prefix=no
    need_version=no
    soname_spec='${libname}${release}.so$major'
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so $libname.so'
    case $host_os in
    irix5*)
      libsuff= shlibsuff=
      ;;
    *)
      case $LD in # libtool.m4 will add one of these switches to LD
      *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;;
      *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;;
      *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;;
      *) libsuff= shlibsuff= libmagic=never-match;;
      esac
      ;;
    esac
    shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
    shlibpath_overrides_runpath=no
    sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
    sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
    ;;
  
  # No shared lib support for Linux oldld, aout, or coff.
  linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*)
    dynamic_linker=no
    ;;
  
  # This must be Linux ELF.
  linux-gnu*)
    version_type=linux
    need_lib_prefix=no
    need_version=no
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
    soname_spec='${libname}${release}.so$major'
    finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
    shlibpath_var=LD_LIBRARY_PATH
    shlibpath_overrides_runpath=no
    # This implies no fast_install, which is unacceptable.
    # Some rework will be needed to allow for fast_install
    # before this can be enabled.
    hardcode_into_libs=yes
  
    # We used to test for /lib/ld.so.1 and disable shared libraries on
    # powerpc, because MkLinux only supported shared libraries with the
    # GNU dynamic linker.  Since this was broken with cross compilers,
    # most powerpc-linux boxes support dynamic linking these days and
    # people can always --disable-shared, the test was removed, and we
    # assume the GNU/Linux dynamic linker is in use.
    dynamic_linker='GNU/Linux ld.so'
    ;;
  
  netbsd*)
    version_type=sunos
    need_lib_prefix=no
    need_version=no
    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
      library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
      finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
      dynamic_linker='NetBSD (a.out) ld.so'
    else
      library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so'
      soname_spec='${libname}${release}.so$major'
      dynamic_linker='NetBSD ld.elf_so'
    fi
    shlibpath_var=LD_LIBRARY_PATH
    shlibpath_overrides_runpath=yes
    hardcode_into_libs=yes
    ;;
  
  newsos6)
    version_type=linux
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
    shlibpath_var=LD_LIBRARY_PATH
    shlibpath_overrides_runpath=yes
    ;;
  
  openbsd*)
    version_type=sunos
    if test "$with_gnu_ld" = yes; then
      need_lib_prefix=no
      need_version=no
    fi
    library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
    shlibpath_var=LD_LIBRARY_PATH
    ;;
  
  os2*)
    libname_spec='$name'
    need_lib_prefix=no
    library_names_spec='$libname.dll $libname.a'
    dynamic_linker='OS/2 ld.exe'
    shlibpath_var=LIBPATH
    ;;
  
  osf3* | osf4* | osf5*)
    version_type=osf
    need_version=no
    soname_spec='${libname}${release}.so'
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
    shlibpath_var=LD_LIBRARY_PATH
    sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
    sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
    ;;
  
  sco3.2v5*)
    version_type=osf
    soname_spec='${libname}${release}.so$major'
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
    shlibpath_var=LD_LIBRARY_PATH
    ;;
  
  solaris*)
    version_type=linux
    need_lib_prefix=no
    need_version=no
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
    soname_spec='${libname}${release}.so$major'
    shlibpath_var=LD_LIBRARY_PATH
    shlibpath_overrides_runpath=yes
    hardcode_into_libs=yes
    # ldd complains unless libraries are executable
    postinstall_cmds='chmod +x $lib'
    ;;
  
  sunos4*)
    version_type=sunos
    library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
    finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
    shlibpath_var=LD_LIBRARY_PATH
    shlibpath_overrides_runpath=yes
    if test "$with_gnu_ld" = yes; then
      need_lib_prefix=no
    fi
    need_version=yes
    ;;
  
  sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
    version_type=linux
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
    soname_spec='${libname}${release}.so$major'
    shlibpath_var=LD_LIBRARY_PATH
    case $host_vendor in
      sni)
        shlibpath_overrides_runpath=no
        ;;
      motorola)
        need_lib_prefix=no
        need_version=no
        shlibpath_overrides_runpath=no
        sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
        ;;
    esac
    ;;
  
  uts4*)
    version_type=linux
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
    soname_spec='${libname}${release}.so$major'
    shlibpath_var=LD_LIBRARY_PATH
    ;;
  
  dgux*)
    version_type=linux
    need_lib_prefix=no
    need_version=no
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
    soname_spec='${libname}${release}.so$major'
    shlibpath_var=LD_LIBRARY_PATH
    ;;
  
  sysv4*MP*)
    if test -d /usr/nec ;then
      version_type=linux
      library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so'
      soname_spec='$libname.so.$major'
      shlibpath_var=LD_LIBRARY_PATH
    fi
    ;;
  
  *)
    dynamic_linker=no
    ;;
  esac
  AC_MSG_RESULT([$dynamic_linker])
  test "$dynamic_linker" = no && can_build_shared=no
  ##
  ## END FIXME
  
  ## FIXME: this should be a separate macro
  ##
  # Report the final consequences.
  AC_MSG_CHECKING([if libtool supports shared libraries])
  AC_MSG_RESULT([$can_build_shared])
  ##
  ## END FIXME
  
  if test "$hardcode_action" = relink; then
    # Fast installation is not supported
    enable_fast_install=no
  elif test "$shlibpath_overrides_runpath" = yes ||
       test "$enable_shared" = no; then
    # Fast installation is not necessary
    enable_fast_install=needless
  fi
  
  variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
  if test "$GCC" = yes; then
    variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
  fi
  
  AC_LIBTOOL_DLOPEN_SELF
  
  ## FIXME: this should be a separate macro
  ##
  if test "$enable_shared" = yes && test "$GCC" = yes; then
    case $archive_cmds in
    *'~'*)
      # FIXME: we may have to deal with multi-command sequences.
      ;;
    '$CC '*)
      # Test whether the compiler implicitly links with -lc since on some
      # systems, -lgcc has to come before -lc. If gcc already passes -lc
      # to ld, don't add -lc before -lgcc.
      AC_MSG_CHECKING([whether -lc should be explicitly linked in])
      AC_CACHE_VAL([lt_cv_archive_cmds_need_lc],
      [$rm conftest*
      echo 'static int dummy;' > conftest.$ac_ext
  
      if AC_TRY_EVAL(ac_compile); then
        soname=conftest
        lib=conftest
        libobjs=conftest.$ac_objext
        deplibs=
        wl=$lt_cv_prog_cc_wl
        compiler_flags=-v
        linker_flags=-v
        verstring=
        output_objdir=.
        libname=conftest
        save_allow_undefined_flag=$allow_undefined_flag
        allow_undefined_flag=
        if AC_TRY_EVAL(archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1)
        then
  	lt_cv_archive_cmds_need_lc=no
        else
  	lt_cv_archive_cmds_need_lc=yes
        fi
        allow_undefined_flag=$save_allow_undefined_flag
      else
        cat conftest.err 1>&5
      fi])
      AC_MSG_RESULT([$lt_cv_archive_cmds_need_lc])
      ;;
    esac
  fi
  need_lc=${lt_cv_archive_cmds_need_lc-yes}
  ##
  ## END FIXME
  
  ## FIXME: this should be a separate macro
  ##
  # The second clause should only fire when bootstrapping the
  # libtool distribution, otherwise you forgot to ship ltmain.sh
  # with your package, and you will get complaints that there are
  # no rules to generate ltmain.sh.
  if test -f "$ltmain"; then
    :
  else
    # If there is no Makefile yet, we rely on a make rule to execute
    # `config.status --recheck' to rerun these tests and create the
    # libtool script then.
    test -f Makefile && make "$ltmain"
  fi
  
  if test -f "$ltmain"; then
    trap "$rm \"${ofile}T\"; exit 1" 1 2 15
    $rm -f "${ofile}T"
  
    echo creating $ofile
  
    # Now quote all the things that may contain metacharacters while being
    # careful not to overquote the AC_SUBSTed values.  We take copies of the
    # variables and quote the copies for generation of the libtool script.
    for var in echo old_CC old_CFLAGS \
      AR AR_FLAGS CC LD LN_S NM SHELL \
      reload_flag reload_cmds wl \
      pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \
      thread_safe_flag_spec whole_archive_flag_spec libname_spec \
      library_names_spec soname_spec \
      RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \
      old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds \
      postuninstall_cmds extract_expsyms_cmds old_archive_from_expsyms_cmds \
      old_striplib striplib file_magic_cmd export_symbols_cmds \
      deplibs_check_method allow_undefined_flag no_undefined_flag \
      finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \
      hardcode_libdir_flag_spec hardcode_libdir_separator  \
      sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
      compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do
  
      case $var in
      reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \
      old_postinstall_cmds | old_postuninstall_cmds | \
      export_symbols_cmds | archive_cmds | archive_expsym_cmds | \
      extract_expsyms_cmds | old_archive_from_expsyms_cmds | \
      postinstall_cmds | postuninstall_cmds | \
      finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
        # Double-quote double-evaled strings.
        eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
        ;;
      *)
        eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
        ;;
      esac
    done
  
    cat <<__EOF__ > "${ofile}T"
  #! $SHELL
  
  # `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
  # Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
  # NOTE: Changes made to this file will be lost: look at ltmain.sh.
  #
  # Copyright (C) 1996-2000 Free Software Foundation, Inc.
  # Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
  #
  # This program is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 2 of the License, or
  # (at your option) any later version.
  #
  # This program is distributed in the hope that it will be useful, but
  # WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  # General Public License for more details.
  #
  # You should have received a copy of the GNU General Public License
  # along with this program; if not, write to the Free Software
  # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  #
  # As a special exception to the GNU General Public License, if you
  # distribute this file as part of a program that contains a
  # configuration script generated by Autoconf, you may include it under
  # the same distribution terms that you use for the rest of that program.
  
  # Sed that helps us avoid accidentally triggering echo(1) options like -n.
  Xsed="sed -e s/^X//"
  
  # The HP-UX ksh and POSIX shell print the target directory to stdout
  # if CDPATH is set.
  if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
  
  # ### BEGIN LIBTOOL CONFIG
  
  # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
  
  # Shell to use when invoking shell scripts.
  SHELL=$lt_SHELL
  
  # Whether or not to build shared libraries.
  build_libtool_libs=$enable_shared
  
  # Whether or not to add -lc for building shared libraries.
  build_libtool_need_lc=$need_lc
  
  # Whether or not to build static libraries.
  build_old_libs=$enable_static
  
  # Whether or not to optimize for fast installation.
  fast_install=$enable_fast_install
  
  # The host system.
  host_alias=$host_alias
  host=$host
  
  # An echo program that does not interpret backslashes.
  echo=$lt_echo
  
  # The archiver.
  AR=$lt_AR
  AR_FLAGS=$lt_AR_FLAGS
  
  # The default C compiler.
  CC=$lt_CC
  
  # Is the compiler the GNU C compiler?
  with_gcc=$GCC
  
  # The linker used to build libraries.
  LD=$lt_LD
  
  # Whether we need hard or soft links.
  LN_S=$lt_LN_S
  
  # A BSD-compatible nm program.
  NM=$lt_NM
  
  # A symbol stripping program
  STRIP=$STRIP
  
  # Used to examine libraries when file_magic_cmd begins "file"
  MAGIC_CMD=$MAGIC_CMD
  
  # Used on cygwin: DLL creation program.
  DLLTOOL="$DLLTOOL"
  
  # Used on cygwin: object dumper.
  OBJDUMP="$OBJDUMP"
  
  # Used on cygwin: assembler.
  AS="$AS"
  
  # The name of the directory that contains temporary libtool files.
  objdir=$objdir
  
  # How to create reloadable object files.
  reload_flag=$lt_reload_flag
  reload_cmds=$lt_reload_cmds
  
  # How to pass a linker flag through the compiler.
  wl=$lt_wl
  
  # Object file suffix (normally "o").
  objext="$ac_objext"
  
  # Old archive suffix (normally "a").
  libext="$libext"
  
  # Executable file suffix (normally "").
  exeext="$exeext"
  
  # Additional compiler flags for building library objects.
  pic_flag=$lt_pic_flag
  pic_mode=$pic_mode
  
  # Does compiler simultaneously support -c and -o options?
  compiler_c_o=$lt_compiler_c_o
  
  # Can we write directly to a .lo ?
  compiler_o_lo=$lt_compiler_o_lo
  
  # Must we lock files when doing compilation ?
  need_locks=$lt_need_locks
  
  # Do we need the lib prefix for modules?
  need_lib_prefix=$need_lib_prefix
  
  # Do we need a version for libraries?
  need_version=$need_version
  
  # Whether dlopen is supported.
  dlopen_support=$enable_dlopen
  
  # Whether dlopen of programs is supported.
  dlopen_self=$enable_dlopen_self
  
  # Whether dlopen of statically linked programs is supported.
  dlopen_self_static=$enable_dlopen_self_static
  
  # Compiler flag to prevent dynamic linking.
  link_static_flag=$lt_link_static_flag
  
  # Compiler flag to turn off builtin functions.
  no_builtin_flag=$lt_no_builtin_flag
  
  # Compiler flag to allow reflexive dlopens.
  export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
  
  # Compiler flag to generate shared objects directly from archives.
  whole_archive_flag_spec=$lt_whole_archive_flag_spec
  
  # Compiler flag to generate thread-safe objects.
  thread_safe_flag_spec=$lt_thread_safe_flag_spec
  
  # Library versioning type.
  version_type=$version_type
  
  # Format of library name prefix.
  libname_spec=$lt_libname_spec
  
  # List of archive names.  First name is the real one, the rest are links.
  # The last name is the one that the linker finds with -lNAME.
  library_names_spec=$lt_library_names_spec
  
  # The coded name of the library, if different from the real name.
  soname_spec=$lt_soname_spec
  
  # Commands used to build and install an old-style archive.
  RANLIB=$lt_RANLIB
  old_archive_cmds=$lt_old_archive_cmds
  old_postinstall_cmds=$lt_old_postinstall_cmds
  old_postuninstall_cmds=$lt_old_postuninstall_cmds
  
  # Create an old-style archive from a shared archive.
  old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
  
  # Create a temporary old-style archive to link instead of a shared archive.
  old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
  
  # Commands used to build and install a shared archive.
  archive_cmds=$lt_archive_cmds
  archive_expsym_cmds=$lt_archive_expsym_cmds
  postinstall_cmds=$lt_postinstall_cmds
  postuninstall_cmds=$lt_postuninstall_cmds
  
  # Commands to strip libraries.
  old_striplib=$lt_old_striplib
  striplib=$lt_striplib
  
  # Method to check whether dependent libraries are shared objects.
  deplibs_check_method=$lt_deplibs_check_method
  
  # Command to use when deplibs_check_method == file_magic.
  file_magic_cmd=$lt_file_magic_cmd
  
  # Flag that allows shared libraries with undefined symbols to be built.
  allow_undefined_flag=$lt_allow_undefined_flag
  
  # Flag that forces no undefined symbols.
  no_undefined_flag=$lt_no_undefined_flag
  
  # Commands used to finish a libtool library installation in a directory.
  finish_cmds=$lt_finish_cmds
  
  # Same as above, but a single script fragment to be evaled but not shown.
  finish_eval=$lt_finish_eval
  
  # Take the output of nm and produce a listing of raw symbols and C names.
  global_symbol_pipe=$lt_global_symbol_pipe
  
  # Transform the output of nm in a proper C declaration
  global_symbol_to_cdecl=$lt_global_symbol_to_cdecl
  
  # This is the shared library runtime path variable.
  runpath_var=$runpath_var
  
  # This is the shared library path variable.
  shlibpath_var=$shlibpath_var
  
  # Is shlibpath searched before the hard-coded library search path?
  shlibpath_overrides_runpath=$shlibpath_overrides_runpath
  
  # How to hardcode a shared library path into an executable.
  hardcode_action=$hardcode_action
  
  # Whether we should hardcode library paths into libraries.
  hardcode_into_libs=$hardcode_into_libs
  
  # Flag to hardcode \$libdir into a binary during linking.
  # This must work even if \$libdir does not exist.
  hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
  
  # Whether we need a single -rpath flag with a separated argument.
  hardcode_libdir_separator=$lt_hardcode_libdir_separator
  
  # Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
  # resulting binary.
  hardcode_direct=$hardcode_direct
  
  # Set to yes if using the -LDIR flag during linking hardcodes DIR into the
  # resulting binary.
  hardcode_minus_L=$hardcode_minus_L
  
  # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
  # the resulting binary.
  hardcode_shlibpath_var=$hardcode_shlibpath_var
  
  # Variables whose values should be saved in libtool wrapper scripts and
  # restored at relink time.
  variables_saved_for_relink="$variables_saved_for_relink"
  
  # Whether libtool must link a program against all its dependency libraries.
  link_all_deplibs=$link_all_deplibs
  
  # Compile-time system search path for libraries
  sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
  
  # Run-time system search path for libraries
  sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
  
  # Fix the shell variable \$srcfile for the compiler.
  fix_srcfile_path="$fix_srcfile_path"
  
  # Set to yes if exported symbols are required.
  always_export_symbols=$always_export_symbols
  
  # The commands to list exported symbols.
  export_symbols_cmds=$lt_export_symbols_cmds
  
  # The commands to extract the exported symbol list from a shared archive.
  extract_expsyms_cmds=$lt_extract_expsyms_cmds
  
  # Symbols that should not be listed in the preloaded symbols.
  exclude_expsyms=$lt_exclude_expsyms
  
  # Symbols that must always be exported.
  include_expsyms=$lt_include_expsyms
  
  # ### END LIBTOOL CONFIG
  
  __EOF__
  
    case $host_os in
    aix3*)
      cat <<\EOF >> "${ofile}T"
  
  # AIX sometimes has problems with the GCC collect2 program.  For some
  # reason, if we set the COLLECT_NAMES environment variable, the problems
  # vanish in a puff of smoke.
  if test "X${COLLECT_NAMES+set}" != Xset; then
    COLLECT_NAMES=
    export COLLECT_NAMES
  fi
  EOF
      ;;
    esac
  
    case $host_os in
    cygwin* | mingw* | pw32* | os2*)
      cat <<'EOF' >> "${ofile}T"
        # This is a source program that is used to create dlls on Windows
        # Don't remove nor modify the starting and closing comments
  # /* ltdll.c starts here */
  # #define WIN32_LEAN_AND_MEAN
  # #include <windows.h>
  # #undef WIN32_LEAN_AND_MEAN
  # #include <stdio.h>
  #
  # #ifndef __CYGWIN__
  # #  ifdef __CYGWIN32__
  # #    define __CYGWIN__ __CYGWIN32__
  # #  endif
  # #endif
  #
  # #ifdef __cplusplus
  # extern "C" {
  # #endif
  # BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
  # #ifdef __cplusplus
  # }
  # #endif
  #
  # #ifdef __CYGWIN__
  # #include <cygwin/cygwin_dll.h>
  # DECLARE_CYGWIN_DLL( DllMain );
  # #endif
  # HINSTANCE __hDllInstance_base;
  #
  # BOOL APIENTRY
  # DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
  # {
  #   __hDllInstance_base = hInst;
  #   return TRUE;
  # }
  # /* ltdll.c ends here */
          # This is a source program that is used to create import libraries
          # on Windows for dlls which lack them. Don't remove nor modify the
          # starting and closing comments
  # /* impgen.c starts here */
  # /*   Copyright (C) 1999-2000 Free Software Foundation, Inc.
  #
  #  This file is part of GNU libtool.
  #
  #  This program is free software; you can redistribute it and/or modify
  #  it under the terms of the GNU General Public License as published by
  #  the Free Software Foundation; either version 2 of the License, or
  #  (at your option) any later version.
  #
  #  This program is distributed in the hope that it will be useful,
  #  but WITHOUT ANY WARRANTY; without even the implied warranty of
  #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  #  GNU General Public License for more details.
  #
  #  You should have received a copy of the GNU General Public License
  #  along with this program; if not, write to the Free Software
  #  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  #  */
  #
  # #include <stdio.h>		/* for printf() */
  # #include <unistd.h>		/* for open(), lseek(), read() */
  # #include <fcntl.h>		/* for O_RDONLY, O_BINARY */
  # #include <string.h>		/* for strdup() */
  #
  # /* O_BINARY isn't required (or even defined sometimes) under Unix */
  # #ifndef O_BINARY
  # #define O_BINARY 0
  # #endif
  #
  # static unsigned int
  # pe_get16 (fd, offset)
  #      int fd;
  #      int offset;
  # {
  #   unsigned char b[2];
  #   lseek (fd, offset, SEEK_SET);
  #   read (fd, b, 2);
  #   return b[0] + (b[1]<<8);
  # }
  #
  # static unsigned int
  # pe_get32 (fd, offset)
  #     int fd;
  #     int offset;
  # {
  #   unsigned char b[4];
  #   lseek (fd, offset, SEEK_SET);
  #   read (fd, b, 4);
  #   return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
  # }
  #
  # static unsigned int
  # pe_as32 (ptr)
  #      void *ptr;
  # {
  #   unsigned char *b = ptr;
  #   return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
  # }
  #
  # int
  # main (argc, argv)
  #     int argc;
  #     char *argv[];
  # {
  #     int dll;
  #     unsigned long pe_header_offset, opthdr_ofs, num_entries, i;
  #     unsigned long export_rva, export_size, nsections, secptr, expptr;
  #     unsigned long name_rvas, nexp;
  #     unsigned char *expdata, *erva;
  #     char *filename, *dll_name;
  #
  #     filename = argv[1];
  #
  #     dll = open(filename, O_RDONLY|O_BINARY);
  #     if (dll < 1)
  # 	return 1;
  #
  #     dll_name = filename;
  #
  #     for (i=0; filename[i]; i++)
  # 	if (filename[i] == '/' || filename[i] == '\\'  || filename[i] == ':')
  # 	    dll_name = filename + i +1;
  #
  #     pe_header_offset = pe_get32 (dll, 0x3c);
  #     opthdr_ofs = pe_header_offset + 4 + 20;
  #     num_entries = pe_get32 (dll, opthdr_ofs + 92);
  #
  #     if (num_entries < 1) /* no exports */
  # 	return 1;
  #
  #     export_rva = pe_get32 (dll, opthdr_ofs + 96);
  #     export_size = pe_get32 (dll, opthdr_ofs + 100);
  #     nsections = pe_get16 (dll, pe_header_offset + 4 +2);
  #     secptr = (pe_header_offset + 4 + 20 +
  # 	      pe_get16 (dll, pe_header_offset + 4 + 16));
  #
  #     expptr = 0;
  #     for (i = 0; i < nsections; i++)
  #     {
  # 	char sname[8];
  # 	unsigned long secptr1 = secptr + 40 * i;
  # 	unsigned long vaddr = pe_get32 (dll, secptr1 + 12);
  # 	unsigned long vsize = pe_get32 (dll, secptr1 + 16);
  # 	unsigned long fptr = pe_get32 (dll, secptr1 + 20);
  # 	lseek(dll, secptr1, SEEK_SET);
  # 	read(dll, sname, 8);
  # 	if (vaddr <= export_rva && vaddr+vsize > export_rva)
  # 	{
  # 	    expptr = fptr + (export_rva - vaddr);
  # 	    if (export_rva + export_size > vaddr + vsize)
  # 		export_size = vsize - (export_rva - vaddr);
  # 	    break;
  # 	}
  #     }
  #
  #     expdata = (unsigned char*)malloc(export_size);
  #     lseek (dll, expptr, SEEK_SET);
  #     read (dll, expdata, export_size);
  #     erva = expdata - export_rva;
  #
  #     nexp = pe_as32 (expdata+24);
  #     name_rvas = pe_as32 (expdata+32);
  #
  #     printf ("EXPORTS\n");
  #     for (i = 0; i<nexp; i++)
  #     {
  # 	unsigned long name_rva = pe_as32 (erva+name_rvas+i*4);
  # 	printf ("\t%s @ %ld ;\n", erva+name_rva, 1+ i);
  #     }
  #
  #     return 0;
  # }
  # /* impgen.c ends here */
  
  EOF
      ;;
    esac
  
    # We use sed instead of cat because bash on DJGPP gets confused if
    # if finds mixed CR/LF and LF-only lines.  Since sed operates in
    # text mode, it properly converts lines to CR/LF.  This bash problem
    # is reportedly fixed, but why not run on old versions too?
    sed '$q' "$ltmain" >> "${ofile}T" || (rm -f "${ofile}T"; exit 1)
  
    mv -f "${ofile}T" "$ofile" || \
      (rm -f "$ofile" && cp "${ofile}T" "$ofile" && rm -f "${ofile}T")
    chmod +x "$ofile"
  fi
  ##
  ## END FIXME
  
  ])# _LT_AC_LTCONFIG_HACK
  
  # AC_LIBTOOL_DLOPEN - enable checks for dlopen support
  AC_DEFUN([AC_LIBTOOL_DLOPEN], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])])
  
  # AC_LIBTOOL_WIN32_DLL - declare package support for building win32 dll's
  AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_BEFORE([$0], [AC_LIBTOOL_SETUP])])
  
  # AC_ENABLE_SHARED - implement the --enable-shared flag
  # Usage: AC_ENABLE_SHARED[(DEFAULT)]
  #   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
  #   `yes'.
  AC_DEFUN([AC_ENABLE_SHARED],
  [define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
  AC_ARG_ENABLE(shared,
  changequote(<<, >>)dnl
  <<  --enable-shared[=PKGS]  build shared libraries [default=>>AC_ENABLE_SHARED_DEFAULT],
  changequote([, ])dnl
  [p=${PACKAGE-default}
  case $enableval in
  yes) enable_shared=yes ;;
  no) enable_shared=no ;;
  *)
    enable_shared=no
    # Look at the argument we got.  We use all the common list separators.
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
    for pkg in $enableval; do
      if test "X$pkg" = "X$p"; then
        enable_shared=yes
      fi
    done
    IFS="$ac_save_ifs"
    ;;
  esac],
  enable_shared=AC_ENABLE_SHARED_DEFAULT)dnl
  ])
  
  # AC_DISABLE_SHARED - set the default shared flag to --disable-shared
  AC_DEFUN([AC_DISABLE_SHARED],
  [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
  AC_ENABLE_SHARED(no)])
  
  # AC_ENABLE_STATIC - implement the --enable-static flag
  # Usage: AC_ENABLE_STATIC[(DEFAULT)]
  #   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
  #   `yes'.
  AC_DEFUN([AC_ENABLE_STATIC],
  [define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
  AC_ARG_ENABLE(static,
  changequote(<<, >>)dnl
  <<  --enable-static[=PKGS]  build static libraries [default=>>AC_ENABLE_STATIC_DEFAULT],
  changequote([, ])dnl
  [p=${PACKAGE-default}
  case $enableval in
  yes) enable_static=yes ;;
  no) enable_static=no ;;
  *)
    enable_static=no
    # Look at the argument we got.  We use all the common list separators.
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
    for pkg in $enableval; do
      if test "X$pkg" = "X$p"; then
        enable_static=yes
      fi
    done
    IFS="$ac_save_ifs"
    ;;
  esac],
  enable_static=AC_ENABLE_STATIC_DEFAULT)dnl
  ])
  
  # AC_DISABLE_STATIC - set the default static flag to --disable-static
  AC_DEFUN([AC_DISABLE_STATIC],
  [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
  AC_ENABLE_STATIC(no)])
  
  
  # AC_ENABLE_FAST_INSTALL - implement the --enable-fast-install flag
  # Usage: AC_ENABLE_FAST_INSTALL[(DEFAULT)]
  #   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
  #   `yes'.
  AC_DEFUN([AC_ENABLE_FAST_INSTALL],
  [define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
  AC_ARG_ENABLE(fast-install,
  changequote(<<, >>)dnl
  <<  --enable-fast-install[=PKGS]  optimize for fast installation [default=>>AC_ENABLE_FAST_INSTALL_DEFAULT],
  changequote([, ])dnl
  [p=${PACKAGE-default}
  case $enableval in
  yes) enable_fast_install=yes ;;
  no) enable_fast_install=no ;;
  *)
    enable_fast_install=no
    # Look at the argument we got.  We use all the common list separators.
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
    for pkg in $enableval; do
      if test "X$pkg" = "X$p"; then
        enable_fast_install=yes
      fi
    done
    IFS="$ac_save_ifs"
    ;;
  esac],
  enable_fast_install=AC_ENABLE_FAST_INSTALL_DEFAULT)dnl
  ])
  
  # AC_DISABLE_FAST_INSTALL - set the default to --disable-fast-install
  AC_DEFUN([AC_DISABLE_FAST_INSTALL],
  [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
  AC_ENABLE_FAST_INSTALL(no)])
  
  # AC_LIBTOOL_PICMODE - implement the --with-pic flag
  # Usage: AC_LIBTOOL_PICMODE[(MODE)]
  #   Where MODE is either `yes' or `no'.  If omitted, it defaults to
  #   `both'.
  AC_DEFUN([AC_LIBTOOL_PICMODE],
  [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
  pic_mode=ifelse($#,1,$1,default)])
  
  
  # AC_PATH_TOOL_PREFIX - find a file program which can recognise shared library
  AC_DEFUN([AC_PATH_TOOL_PREFIX],
  [AC_MSG_CHECKING([for $1])
  AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
  [case $MAGIC_CMD in
    /*)
    lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
    ;;
    ?:/*)
    lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path.
    ;;
    *)
    ac_save_MAGIC_CMD="$MAGIC_CMD"
    IFS="${IFS=   }"; ac_save_ifs="$IFS"; IFS=":"
  dnl $ac_dummy forces splitting on constant user-supplied paths.
  dnl POSIX.2 word splitting is done only on the output of word expansions,
  dnl not every word.  This closes a longstanding sh security hole.
    ac_dummy="ifelse([$2], , $PATH, [$2])"
    for ac_dir in $ac_dummy; do
      test -z "$ac_dir" && ac_dir=.
      if test -f $ac_dir/$1; then
        lt_cv_path_MAGIC_CMD="$ac_dir/$1"
        if test -n "$file_magic_test_file"; then
  	case $deplibs_check_method in
  	"file_magic "*)
  	  file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
  	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
  	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
  	    egrep "$file_magic_regex" > /dev/null; then
  	    :
  	  else
  	    cat <<EOF 1>&2
  
  *** Warning: the command libtool uses to detect shared libraries,
  *** $file_magic_cmd, produces output that libtool cannot recognize.
  *** The result is that libtool may fail to recognize shared libraries
  *** as such.  This will affect the creation of libtool libraries that
  *** depend on shared libraries, but programs linked with such libtool
  *** libraries will work regardless of this problem.  Nevertheless, you
  *** may want to report the problem to your system manager and/or to
  *** bug-libtool@gnu.org
  
  EOF
  	  fi ;;
  	esac
        fi
        break
      fi
    done
    IFS="$ac_save_ifs"
    MAGIC_CMD="$ac_save_MAGIC_CMD"
    ;;
  esac])
  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
  if test -n "$MAGIC_CMD"; then
    AC_MSG_RESULT($MAGIC_CMD)
  else
    AC_MSG_RESULT(no)
  fi
  ])
  
  
  # AC_PATH_MAGIC - find a file program which can recognise a shared library
  AC_DEFUN([AC_PATH_MAGIC],
  [AC_REQUIRE([AC_CHECK_TOOL_PREFIX])dnl
  AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin:$PATH)
  if test -z "$lt_cv_path_MAGIC_CMD"; then
    if test -n "$ac_tool_prefix"; then
      AC_PATH_TOOL_PREFIX(file, /usr/bin:$PATH)
    else
      MAGIC_CMD=:
    fi
  fi
  ])
  
  
  # AC_PROG_LD - find the path to the GNU or non-GNU linker
  AC_DEFUN([AC_PROG_LD],
  [AC_ARG_WITH(gnu-ld,
  [  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]],
  test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
  AC_REQUIRE([AC_PROG_CC])dnl
  AC_REQUIRE([AC_CANONICAL_HOST])dnl
  AC_REQUIRE([AC_CANONICAL_BUILD])dnl
  ac_prog=ld
  if test "$GCC" = yes; then
    # Check if gcc -print-prog-name=ld gives a path.
    AC_MSG_CHECKING([for ld used by GCC])
    case $host in
    *-*-mingw*)
      # gcc leaves a trailing carriage return which upsets mingw
      ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
    *)
      ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
    esac
    case $ac_prog in
      # Accept absolute paths.
      [[\\/]* | [A-Za-z]:[\\/]*)]
        [re_direlt='/[^/][^/]*/\.\./']
        # Canonicalize the path of ld
        ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
        while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
  	ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
        done
        test -z "$LD" && LD="$ac_prog"
        ;;
    "")
      # If it fails, then pretend we aren't using GCC.
      ac_prog=ld
      ;;
    *)
      # If it is relative, then search for the first ld in PATH.
      with_gnu_ld=unknown
      ;;
    esac
  elif test "$with_gnu_ld" = yes; then
    AC_MSG_CHECKING([for GNU ld])
  else
    AC_MSG_CHECKING([for non-GNU ld])
  fi
  AC_CACHE_VAL(lt_cv_path_LD,
  [if test -z "$LD"; then
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
    for ac_dir in $PATH; do
      test -z "$ac_dir" && ac_dir=.
      if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
        lt_cv_path_LD="$ac_dir/$ac_prog"
        # Check to see if the program is GNU ld.  I'd rather use --version,
        # but apparently some GNU ld's only accept -v.
        # Break only if it was the GNU/non-GNU ld that we prefer.
        if "$lt_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
  	test "$with_gnu_ld" != no && break
        else
  	test "$with_gnu_ld" != yes && break
        fi
      fi
    done
    IFS="$ac_save_ifs"
  else
    lt_cv_path_LD="$LD" # Let the user override the test with a path.
  fi])
  LD="$lt_cv_path_LD"
  if test -n "$LD"; then
    AC_MSG_RESULT($LD)
  else
    AC_MSG_RESULT(no)
  fi
  test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
  AC_PROG_LD_GNU
  ])
  
  # AC_PROG_LD_GNU -
  AC_DEFUN([AC_PROG_LD_GNU],
  [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
  [# I'd rather use --version here, but apparently some GNU ld's only accept -v.
  if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
    lt_cv_prog_gnu_ld=yes
  else
    lt_cv_prog_gnu_ld=no
  fi])
  with_gnu_ld=$lt_cv_prog_gnu_ld
  ])
  
  # AC_PROG_LD_RELOAD_FLAG - find reload flag for linker
  #   -- PORTME Some linkers may need a different reload flag.
  AC_DEFUN([AC_PROG_LD_RELOAD_FLAG],
  [AC_CACHE_CHECK([for $LD option to reload object files], lt_cv_ld_reload_flag,
  [lt_cv_ld_reload_flag='-r'])
  reload_flag=$lt_cv_ld_reload_flag
  test -n "$reload_flag" && reload_flag=" $reload_flag"
  ])
  
  # AC_DEPLIBS_CHECK_METHOD - how to check for library dependencies
  #  -- PORTME fill in with the dynamic library characteristics
  AC_DEFUN([AC_DEPLIBS_CHECK_METHOD],
  [AC_CACHE_CHECK([how to recognise dependant libraries],
  lt_cv_deplibs_check_method,
  [lt_cv_file_magic_cmd='$MAGIC_CMD'
  lt_cv_file_magic_test_file=
  lt_cv_deplibs_check_method='unknown'
  # Need to set the preceding variable on all platforms that support
  # interlibrary dependencies.
  # 'none' -- dependencies not supported.
  # `unknown' -- same as none, but documents that we really don't know.
  # 'pass_all' -- all dependencies passed with no checks.
  # 'test_compile' -- check by making test program.
  # ['file_magic [regex]'] -- check by looking for files in library path
  # which responds to the $file_magic_cmd with a given egrep regex.
  # If you have `file' or equivalent on your system and you're not sure
  # whether `pass_all' will *always* work, you probably want this one.
  
  case $host_os in
  aix4* | aix5*)
    lt_cv_deplibs_check_method=pass_all
    ;;
  
  beos*)
    lt_cv_deplibs_check_method=pass_all
    ;;
  
  bsdi4*)
    [lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)']
    lt_cv_file_magic_cmd='/usr/bin/file -L'
    lt_cv_file_magic_test_file=/shlib/libc.so
    ;;
  
  cygwin* | mingw* | pw32*)
    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
    lt_cv_file_magic_cmd='$OBJDUMP -f'
    ;;
  
  darwin* | rhapsody*)
    lt_cv_deplibs_check_method='file_magic Mach-O dynamically linked shared library'
    lt_cv_file_magic_cmd='/usr/bin/file -L'
    case "$host_os" in
    rhapsody* | darwin1.[012])
      lt_cv_file_magic_test_file=`echo /System/Library/Frameworks/System.framework/Versions/*/System | head -1`
      ;;
    *) # Darwin 1.3 on
      lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib'
      ;;
    esac
    ;;
  
  freebsd*)
    if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
      case $host_cpu in
      i*86 )
        # Not sure whether the presence of OpenBSD here was a mistake.
        # Let's accept both of them until this is cleared up.
        [lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[3-9]86 (compact )?demand paged shared library']
        lt_cv_file_magic_cmd=/usr/bin/file
        lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
        ;;
      esac
    else
      lt_cv_deplibs_check_method=pass_all
    fi
    ;;
  
  gnu*)
    lt_cv_deplibs_check_method=pass_all
    ;;
  
  hpux10.20*|hpux11*)
    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library']
    lt_cv_file_magic_cmd=/usr/bin/file
    lt_cv_file_magic_test_file=/usr/lib/libc.sl
    ;;
  
  irix5* | irix6*)
    case $host_os in
    irix5*)
      # this will be overridden with pass_all, but let us keep it just in case
      lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1"
      ;;
    *)
      case $LD in
      *-32|*"-32 ") libmagic=32-bit;;
      *-n32|*"-n32 ") libmagic=N32;;
      *-64|*"-64 ") libmagic=64-bit;;
      *) libmagic=never-match;;
      esac
      # this will be overridden with pass_all, but let us keep it just in case
      [lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[1234] dynamic lib MIPS - version 1"]
      ;;
    esac
    lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*`
    lt_cv_deplibs_check_method=pass_all
    ;;
  
  # This must be Linux ELF.
  linux-gnu*)
    case $host_cpu in
    alpha* | i*86 | powerpc* | sparc* | ia64* )
      lt_cv_deplibs_check_method=pass_all ;;
    *)
      # glibc up to 2.1.1 does not perform some relocations on ARM
      [lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;;]
    esac
    lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
    ;;
  
  netbsd*)
    if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
      [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$']
    else
      [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so$']
    fi
    ;;
  
  newos6*)
    [lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)']
    lt_cv_file_magic_cmd=/usr/bin/file
    lt_cv_file_magic_test_file=/usr/lib/libnls.so
    ;;
  
  osf3* | osf4* | osf5*)
    # this will be overridden with pass_all, but let us keep it just in case
    lt_cv_deplibs_check_method='file_magic COFF format alpha shared library'
    lt_cv_file_magic_test_file=/shlib/libc.so
    lt_cv_deplibs_check_method=pass_all
    ;;
  
  sco3.2v5*)
    lt_cv_deplibs_check_method=pass_all
    ;;
  
  solaris*)
    lt_cv_deplibs_check_method=pass_all
    lt_cv_file_magic_test_file=/lib/libc.so
    ;;
  
  [sysv5uw[78]* | sysv4*uw2*)]
    lt_cv_deplibs_check_method=pass_all
    ;;
  
  sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
    case $host_vendor in
    motorola)
      [lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]']
      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
      ;;
    ncr)
      lt_cv_deplibs_check_method=pass_all
      ;;
    sequent)
      lt_cv_file_magic_cmd='/bin/file'
      [lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )']
      ;;
    sni)
      lt_cv_file_magic_cmd='/bin/file'
      [lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"]
      lt_cv_file_magic_test_file=/lib/libc.so
      ;;
    esac
    ;;
  esac
  ])
  file_magic_cmd=$lt_cv_file_magic_cmd
  deplibs_check_method=$lt_cv_deplibs_check_method
  ])
  
  
  # AC_PROG_NM - find the path to a BSD-compatible name lister
  AC_DEFUN([AC_PROG_NM],
  [AC_MSG_CHECKING([for BSD-compatible nm])
  AC_CACHE_VAL(lt_cv_path_NM,
  [if test -n "$NM"; then
    # Let the user override the test.
    lt_cv_path_NM="$NM"
  else
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
    for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
      test -z "$ac_dir" && ac_dir=.
      tmp_nm=$ac_dir/${ac_tool_prefix}nm
      if test -f $tmp_nm || test -f $tmp_nm$ac_exeext ; then
        # Check to see if the nm accepts a BSD-compat flag.
        # Adding the `sed 1q' prevents false positives on HP-UX, which says:
        #   nm: unknown option "B" ignored
        # Tru64's nm complains that /dev/null is an invalid object file
        if ($tmp_nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep '(/dev/null|Invalid file or object type)' >/dev/null; then
  	lt_cv_path_NM="$tmp_nm -B"
  	break
        elif ($tmp_nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
  	lt_cv_path_NM="$tmp_nm -p"
  	break
        else
  	lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
  	continue # so that we can try to find one that supports BSD flags
        fi
      fi
    done
    IFS="$ac_save_ifs"
    test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
  fi])
  NM="$lt_cv_path_NM"
  AC_MSG_RESULT([$NM])
  ])
  
  # AC_CHECK_LIBM - check for math library
  AC_DEFUN([AC_CHECK_LIBM],
  [AC_REQUIRE([AC_CANONICAL_HOST])dnl
  LIBM=
  case $host in
  *-*-beos* | *-*-cygwin* | *-*-pw32*)
    # These system don't have libm
    ;;
  *-ncr-sysv4.3*)
    AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
    AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
    ;;
  *)
    AC_CHECK_LIB(m, main, LIBM="-lm")
    ;;
  esac
  ])
  
  # AC_LIBLTDL_CONVENIENCE[(dir)] - sets LIBLTDL to the link flags for
  # the libltdl convenience library and INCLTDL to the include flags for
  # the libltdl header and adds --enable-ltdl-convenience to the
  # configure arguments.  Note that LIBLTDL and INCLTDL are not
  # AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called.  If DIR is not
  # provided, it is assumed to be `libltdl'.  LIBLTDL will be prefixed
  # with '${top_builddir}/' and INCLTDL will be prefixed with
  # '${top_srcdir}/' (note the single quotes!).  If your package is not
  # flat and you're not using automake, define top_builddir and
  # top_srcdir appropriately in the Makefiles.
  AC_DEFUN([AC_LIBLTDL_CONVENIENCE],
  [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
    case $enable_ltdl_convenience in
    no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
    "") enable_ltdl_convenience=yes
        ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
    esac
    LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la
    INCLTDL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
  ])
  
  # AC_LIBLTDL_INSTALLABLE[(dir)] - sets LIBLTDL to the link flags for
  # the libltdl installable library and INCLTDL to the include flags for
  # the libltdl header and adds --enable-ltdl-install to the configure
  # arguments.  Note that LIBLTDL and INCLTDL are not AC_SUBSTed, nor is
  # AC_CONFIG_SUBDIRS called.  If DIR is not provided and an installed
  # libltdl is not found, it is assumed to be `libltdl'.  LIBLTDL will
  # be prefixed with '${top_builddir}/' and INCLTDL will be prefixed
  # with '${top_srcdir}/' (note the single quotes!).  If your package is
  # not flat and you're not using automake, define top_builddir and
  # top_srcdir appropriately in the Makefiles.
  # In the future, this macro may have to be called after AC_PROG_LIBTOOL.
  AC_DEFUN([AC_LIBLTDL_INSTALLABLE],
  [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
    AC_CHECK_LIB(ltdl, main,
    [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
    [if test x"$enable_ltdl_install" = xno; then
       AC_MSG_WARN([libltdl not installed, but installation disabled])
     else
       enable_ltdl_install=yes
     fi
    ])
    if test x"$enable_ltdl_install" = x"yes"; then
      ac_configure_args="$ac_configure_args --enable-ltdl-install"
      LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la
      INCLTDL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
    else
      ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
      LIBLTDL="-lltdl"
      INCLTDL=
    fi
  ])
  
  # old names
  AC_DEFUN([AM_PROG_LIBTOOL],   [AC_PROG_LIBTOOL])
  AC_DEFUN([AM_ENABLE_SHARED],  [AC_ENABLE_SHARED($@)])
  AC_DEFUN([AM_ENABLE_STATIC],  [AC_ENABLE_STATIC($@)])
  AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
  AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
  AC_DEFUN([AM_PROG_LD],        [AC_PROG_LD])
  AC_DEFUN([AM_PROG_NM],        [AC_PROG_NM])
  
  # This is just to silence aclocal about the macro not being used
  ifelse([AC_DISABLE_FAST_INSTALL])
    Index: ossp-pkg/str/ltmain.sh
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 ltmain.sh
  --- ossp-pkg/str/ltmain.sh	2000/07/14 11:09:10	1.2
  +++ ossp-pkg/str/ltmain.sh	2001/08/16 12:16:52	1.3
  @@ -1,7 +1,8 @@
   # ltmain.sh - Provide generalized library-building support services.
  -# NOTE: Changing this file will not affect anything until you rerun ltconfig.
  +# NOTE: Changing this file will not affect anything until you rerun configure.
   #
  -# Copyright (C) 1996-1999 Free Software Foundation, Inc.
  +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
  +# Free Software Foundation, Inc.
   # Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
   #
   # This program is free software; you can redistribute it and/or modify
  @@ -54,8 +55,8 @@
   # Constants.
   PROGRAM=ltmain.sh
   PACKAGE=libtool
  -VERSION=1.3.5
  -TIMESTAMP=" (1.385.2.206 2000/05/27 11:12:27)"
  +VERSION=1.4
  +TIMESTAMP=" (1.920 2001/04/24 23:26:18)"
   
   default_mode=
   help="Try \`$progname --help' for more information."
  @@ -83,12 +84,6 @@
     save_LANG="$LANG"; LANG=C; export LANG
   fi
   
  -if test "$LTCONFIG_VERSION" != "$VERSION"; then
  -  echo "$modename: ltconfig version \`$LTCONFIG_VERSION' does not match $PROGRAM version \`$VERSION'" 1>&2
  -  echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
  -  exit 1
  -fi
  -
   if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
     echo "$modename: not configured to build any kind of library" 1>&2
     echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
  @@ -113,16 +108,16 @@
     arg="$1"
     shift
   
  -  case "$arg" in
  +  case $arg in
     -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;;
     *) optarg= ;;
     esac
   
     # If the previous option needs an argument, assign it.
     if test -n "$prev"; then
  -    case "$prev" in
  +    case $prev in
       execute_dlfiles)
  -      eval "$prev=\"\$$prev \$arg\""
  +      execute_dlfiles="$execute_dlfiles $arg"
         ;;
       *)
         eval "$prev=\$arg"
  @@ -135,7 +130,7 @@
     fi
   
     # Have we seen a non-optional argument yet?
  -  case "$arg" in
  +  case $arg in
     --help)
       show_help=yes
       ;;
  @@ -146,7 +141,7 @@
       ;;
   
     --config)
  -    sed -e '1,/^### BEGIN LIBTOOL CONFIG/d' -e '/^### END LIBTOOL CONFIG/,$d' $0
  +    sed -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $0
       exit 0
       ;;
   
  @@ -211,12 +206,12 @@
   
     # Infer the operation mode.
     if test -z "$mode"; then
  -    case "$nonopt" in
  +    case $nonopt in
       *cc | *++ | gcc* | *-gcc*)
         mode=link
         for arg
         do
  -	case "$arg" in
  +	case $arg in
   	-c)
   	   mode=compile
   	   break
  @@ -261,12 +256,13 @@
     help="Try \`$modename --help --mode=$mode' for more information."
   
     # These modes are in order of execution frequency so that they run quickly.
  -  case "$mode" in
  +  case $mode in
     # libtool compile mode
     compile)
       modename="$modename: compile"
       # Get the compilation command and the source file.
       base_compile=
  +    prev=
       lastarg=
       srcfile="$nonopt"
       suppress_output=
  @@ -274,8 +270,34 @@
       user_target=no
       for arg
       do
  +      case $prev in
  +      "") ;;
  +      xcompiler)
  +	# Aesthetically quote the previous argument.
  +	prev=
  +	lastarg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
  +
  +	case $arg in
  +	# Double-quote args containing other shell metacharacters.
  +	# Many Bourne shells cannot handle close brackets correctly
  +	# in scan sets, so we specify it separately.
  +	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
  +	  arg="\"$arg\""
  +	  ;;
  +	esac
  +
  +	# Add the previous argument to base_compile.
  +	if test -z "$base_compile"; then
  +	  base_compile="$lastarg"
  +	else
  +	  base_compile="$base_compile $lastarg"
  +	fi
  +	continue
  +	;;
  +      esac
  +
         # Accept any command-line options.
  -      case "$arg" in
  +      case $arg in
         -o)
   	if test "$user_target" != "no"; then
   	  $echo "$modename: you cannot specify \`-o' more than once" 1>&2
  @@ -288,9 +310,53 @@
   	build_old_libs=yes
   	continue
   	;;
  +
  +      -prefer-pic)
  +	pic_mode=yes
  +	continue
  +	;;
  +
  +      -prefer-non-pic)
  +	pic_mode=no
  +	continue
  +	;;
  +
  +      -Xcompiler)
  +	prev=xcompiler
  +	continue
  +	;;
  +
  +      -Wc,*)
  +	args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"`
  +	lastarg=
  +	IFS="${IFS= 	}"; save_ifs="$IFS"; IFS=','
  +	for arg in $args; do
  +	  IFS="$save_ifs"
  +
  +	  # Double-quote args containing other shell metacharacters.
  +	  # Many Bourne shells cannot handle close brackets correctly
  +	  # in scan sets, so we specify it separately.
  +	  case $arg in
  +	    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
  +	    arg="\"$arg\""
  +	    ;;
  +	  esac
  +	  lastarg="$lastarg $arg"
  +	done
  +	IFS="$save_ifs"
  +	lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"`
  +
  +	# Add the arguments to base_compile.
  +	if test -z "$base_compile"; then
  +	  base_compile="$lastarg"
  +	else
  +	  base_compile="$base_compile $lastarg"
  +	fi
  +	continue
  +	;;
         esac
   
  -      case "$user_target" in
  +      case $user_target in
         next)
   	# The next one is the -o target name
   	user_target=yes
  @@ -316,10 +382,10 @@
         lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"`
   
         # Double-quote args containing other shell metacharacters.
  -      # Many Bourne shells cannot handle close brackets correctly in scan
  -      # sets, so we specify it separately.
  -      case "$lastarg" in
  -      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
  +      # Many Bourne shells cannot handle close brackets correctly
  +      # in scan sets, so we specify it separately.
  +      case $lastarg in
  +      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
   	lastarg="\"$lastarg\""
   	;;
         esac
  @@ -332,7 +398,7 @@
         fi
       done
   
  -    case "$user_target" in
  +    case $user_target in
       set)
         ;;
       no)
  @@ -348,7 +414,7 @@
       # Recognize several different file suffixes.
       # If the user specifies -o file.o, it is replaced with file.lo
       xform='[cCFSfmso]'
  -    case "$libobj" in
  +    case $libobj in
       *.ada) xform=ada ;;
       *.adb) xform=adb ;;
       *.ads) xform=ads ;;
  @@ -363,7 +429,7 @@
   
       libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
   
  -    case "$libobj" in
  +    case $libobj in
       *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;;
       *)
         $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2
  @@ -387,10 +453,21 @@
       $run $rm $removelist
       trap "$run $rm $removelist; exit 1" 1 2 15
   
  +    # On Cygwin there's no "real" PIC flag so we must build both object types
  +    case $host_os in
  +    cygwin* | mingw* | pw32* | os2*)
  +      pic_mode=default
  +      ;;
  +    esac
  +    if test $pic_mode = no && test "$deplibs_check_method" != pass_all; then
  +      # non-PIC code in shared libraries is not supported
  +      pic_mode=default
  +    fi
  +
       # Calculate the filename of the output object if compiler does
       # not support -o with -c
       if test "$compiler_c_o" = no; then
  -      output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\..*$%%'`.${objext}
  +      output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
         lockfile="$output_obj.lock"
         removelist="$removelist $output_obj $lockfile"
         trap "$run $rm $removelist; exit 1" 1 2 15
  @@ -402,7 +479,7 @@
       # Lock this critical section if it is needed
       # We use this script file to make the link, it avoids creating a new file
       if test "$need_locks" = yes; then
  -      until ln "$0" "$lockfile" 2>/dev/null; do
  +      until $run ln "$0" "$lockfile" 2>/dev/null; do
   	$show "Waiting for $lockfile to be removed"
   	sleep 2
         done
  @@ -434,8 +511,13 @@
         # Without this assignment, base_compile gets emptied.
         fbsd_hideous_sh_bug=$base_compile
   
  -      # All platforms use -DPIC, to notify preprocessed assembler code.
  -      command="$base_compile $srcfile $pic_flag -DPIC"
  +      if test "$pic_mode" != no; then
  +	# All platforms use -DPIC, to notify preprocessed assembler code.
  +	command="$base_compile $srcfile $pic_flag -DPIC"
  +      else
  +	# Don't build PIC code
  +	command="$base_compile $srcfile"
  +      fi
         if test "$build_old_libs" = yes; then
   	lo_libobj="$libobj"
   	dir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'`
  @@ -506,7 +588,8 @@
         fi
   
         # If we have no pic_flag, then copy the object into place and finish.
  -      if test -z "$pic_flag" && test "$build_old_libs" = yes; then
  +      if (test -z "$pic_flag" || test "$pic_mode" != default) &&
  +	 test "$build_old_libs" = yes; then
   	# Rename the .lo from within objdir to obj
   	if test -f $obj; then
   	  $show $rm $obj
  @@ -546,7 +629,13 @@
   
       # Only build a position-dependent object if we build old libraries.
       if test "$build_old_libs" = yes; then
  -      command="$base_compile $srcfile"
  +      if test "$pic_mode" != yes; then
  +	# Don't build PIC code
  +	command="$base_compile $srcfile"
  +      else
  +	# All platforms use -DPIC, to notify preprocessed assembler code.
  +	command="$base_compile $srcfile $pic_flag -DPIC"
  +      fi
         if test "$compiler_c_o" = yes; then
   	command="$command -o $obj"
   	output_obj="$obj"
  @@ -612,17 +701,17 @@
   
       # Unlock the critical section if it was locked
       if test "$need_locks" != no; then
  -      $rm "$lockfile"
  +      $run $rm "$lockfile"
       fi
   
       exit 0
       ;;
   
     # libtool link mode
  -  link)
  +  link | relink)
       modename="$modename: link"
  -    case "$host" in
  -    *-*-cygwin* | *-*-mingw* | *-*-os2*)
  +    case $host in
  +    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
         # It is impossible to link a dll without this setting, and
         # we shouldn't force the makefile maintainer to figure out
         # which system we are compiling for in order to pass an extra
  @@ -635,179 +724,12 @@
         # -no-undefined on the libtool link line when we can be certain
         # that all symbols are satisfied, otherwise we get a static library.
         allow_undefined=yes
  -
  -      # This is a source program that is used to create dlls on Windows
  -      # Don't remove nor modify the starting and closing comments
  -# /* ltdll.c starts here */
  -# #define WIN32_LEAN_AND_MEAN
  -# #include <windows.h>
  -# #undef WIN32_LEAN_AND_MEAN
  -# #include <stdio.h>
  -#
  -# #ifndef __CYGWIN__
  -# #  ifdef __CYGWIN32__
  -# #    define __CYGWIN__ __CYGWIN32__
  -# #  endif
  -# #endif
  -#
  -# #ifdef __cplusplus
  -# extern "C" {
  -# #endif
  -# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
  -# #ifdef __cplusplus
  -# }
  -# #endif
  -#
  -# #ifdef __CYGWIN__
  -# #include <cygwin/cygwin_dll.h>
  -# DECLARE_CYGWIN_DLL( DllMain );
  -# #endif
  -# HINSTANCE __hDllInstance_base;
  -#
  -# BOOL APIENTRY
  -# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
  -# {
  -#   __hDllInstance_base = hInst;
  -#   return TRUE;
  -# }
  -# /* ltdll.c ends here */
  -      # This is a source program that is used to create import libraries
  -      # on Windows for dlls which lack them. Don't remove nor modify the
  -      # starting and closing comments
  -# /* impgen.c starts here */
  -# /*   Copyright (C) 1999 Free Software Foundation, Inc.
  -# 
  -#  This file is part of GNU libtool.
  -# 
  -#  This program is free software; you can redistribute it and/or modify
  -#  it under the terms of the GNU General Public License as published by
  -#  the Free Software Foundation; either version 2 of the License, or
  -#  (at your option) any later version.
  -# 
  -#  This program is distributed in the hope that it will be useful,
  -#  but WITHOUT ANY WARRANTY; without even the implied warranty of
  -#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  -#  GNU General Public License for more details.
  -# 
  -#  You should have received a copy of the GNU General Public License
  -#  along with this program; if not, write to the Free Software
  -#  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  -#  */
  -# 
  -#  #include <stdio.h>		/* for printf() */
  -#  #include <unistd.h>		/* for open(), lseek(), read() */
  -#  #include <fcntl.h>		/* for O_RDONLY, O_BINARY */
  -#  #include <string.h>		/* for strdup() */
  -# 
  -#  static unsigned int
  -#  pe_get16 (fd, offset)
  -#       int fd;
  -#       int offset;
  -#  {
  -#    unsigned char b[2];
  -#    lseek (fd, offset, SEEK_SET);
  -#    read (fd, b, 2);
  -#    return b[0] + (b[1]<<8);
  -#  }
  -# 
  -#  static unsigned int
  -#  pe_get32 (fd, offset)
  -#      int fd;
  -#      int offset;
  -#  {
  -#    unsigned char b[4];
  -#    lseek (fd, offset, SEEK_SET);
  -#    read (fd, b, 4);
  -#    return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
  -#  }
  -# 
  -#  static unsigned int
  -#  pe_as32 (ptr)
  -#       void *ptr;
  -#  {
  -#    unsigned char *b = ptr;
  -#    return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
  -#  }
  -# 
  -#  int
  -#  main (argc, argv)
  -#      int argc;
  -#      char *argv[];
  -#  {
  -#      int dll;
  -#      unsigned long pe_header_offset, opthdr_ofs, num_entries, i;
  -#      unsigned long export_rva, export_size, nsections, secptr, expptr;
  -#      unsigned long name_rvas, nexp;
  -#      unsigned char *expdata, *erva;
  -#      char *filename, *dll_name;
  -# 
  -#      filename = argv[1];
  -# 
  -#      dll = open(filename, O_RDONLY|O_BINARY);
  -#      if (!dll)
  -#  	return 1;
  -# 
  -#      dll_name = filename;
  -#    
  -#      for (i=0; filename[i]; i++)
  -#  	if (filename[i] == '/' || filename[i] == '\\'  || filename[i] == ':')
  -#  	    dll_name = filename + i +1;
  -# 
  -#      pe_header_offset = pe_get32 (dll, 0x3c);
  -#      opthdr_ofs = pe_header_offset + 4 + 20;
  -#      num_entries = pe_get32 (dll, opthdr_ofs + 92);
  -# 
  -#      if (num_entries < 1) /* no exports */
  -#  	return 1;
  -# 
  -#      export_rva = pe_get32 (dll, opthdr_ofs + 96);
  -#      export_size = pe_get32 (dll, opthdr_ofs + 100);
  -#      nsections = pe_get16 (dll, pe_header_offset + 4 +2);
  -#      secptr = (pe_header_offset + 4 + 20 +
  -#  	      pe_get16 (dll, pe_header_offset + 4 + 16));
  -# 
  -#      expptr = 0;
  -#      for (i = 0; i < nsections; i++)
  -#      {
  -#  	char sname[8];
  -#  	unsigned long secptr1 = secptr + 40 * i;
  -#  	unsigned long vaddr = pe_get32 (dll, secptr1 + 12);
  -#  	unsigned long vsize = pe_get32 (dll, secptr1 + 16);
  -#  	unsigned long fptr = pe_get32 (dll, secptr1 + 20);
  -#  	lseek(dll, secptr1, SEEK_SET);
  -#  	read(dll, sname, 8);
  -#  	if (vaddr <= export_rva && vaddr+vsize > export_rva)
  -#  	{
  -#  	    expptr = fptr + (export_rva - vaddr);
  -#  	    if (export_rva + export_size > vaddr + vsize)
  -#  		export_size = vsize - (export_rva - vaddr);
  -#  	    break;
  -#  	}
  -#      }
  -# 
  -#      expdata = (unsigned char*)malloc(export_size);
  -#      lseek (dll, expptr, SEEK_SET);
  -#      read (dll, expdata, export_size);
  -#      erva = expdata - export_rva;
  -# 
  -#      nexp = pe_as32 (expdata+24);
  -#      name_rvas = pe_as32 (expdata+32);
  -# 
  -#      printf ("EXPORTS\n");
  -#      for (i = 0; i<nexp; i++)
  -#      {
  -#  	unsigned long name_rva = pe_as32 (erva+name_rvas+i*4);
  -#  	printf ("\t%s @ %ld ;\n", erva+name_rva, 1+ i);
  -#      }
  -# 
  -#      return 0;
  -#  }
  -# /* impgen.c ends here */
         ;;
       *)
         allow_undefined=yes
         ;;
       esac
  +    libtool_args="$nonopt"
       compile_command="$nonopt"
       finalize_command="$nonopt"
   
  @@ -818,18 +740,12 @@
       convenience=
       old_convenience=
       deplibs=
  -    linkopts=
  +    old_deplibs=
  +    compiler_flags=
  +    linker_flags=
  +    dllsearchpath=
  +    lib_search_path=`pwd`
   
  -    if test -n "$shlibpath_var"; then
  -      # get the directories listed in $shlibpath_var
  -      eval lib_search_path=\`\$echo \"X \${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
  -    else
  -      lib_search_path=
  -    fi
  -    # now prepend the system-specific ones
  -    eval lib_search_path=\"$sys_lib_search_path_spec\$lib_search_path\"
  -    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
  -    
       avoid_version=no
       dlfiles=
       dlprefiles=
  @@ -839,9 +755,9 @@
       export_symbols_regex=
       generated=
       libobjs=
  -    link_against_libtool_libs=
       ltlibs=
       module=no
  +    no_install=no
       objs=
       prefer_static_libs=no
       preload=no
  @@ -858,7 +774,7 @@
       # We need to know -static, to get the right output filenames.
       for arg
       do
  -      case "$arg" in
  +      case $arg in
         -all-static | -static)
   	if test "X$arg" = "X-all-static"; then
   	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
  @@ -887,17 +803,24 @@
       while test $# -gt 0; do
         arg="$1"
         shift
  +      case $arg in
  +      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
  +	qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test
  +	;;
  +      *) qarg=$arg ;;
  +      esac
  +      libtool_args="$libtool_args $qarg"
   
         # If the previous option needs an argument, assign it.
         if test -n "$prev"; then
  -	case "$prev" in
  +	case $prev in
   	output)
   	  compile_command="$compile_command @OUTPUT@"
   	  finalize_command="$finalize_command @OUTPUT@"
   	  ;;
   	esac
   
  -	case "$prev" in
  +	case $prev in
   	dlfiles|dlprefiles)
   	  if test "$preload" = no; then
   	    # Add the symbol object into the linking commands.
  @@ -905,7 +828,7 @@
   	    finalize_command="$finalize_command @SYMFILE@"
   	    preload=yes
   	  fi
  -	  case "$arg" in
  +	  case $arg in
   	  *.la | *.lo) ;;  # We handle these cases below.
   	  force)
   	    if test "$dlself" = no; then
  @@ -934,6 +857,7 @@
   	      dlprefiles="$dlprefiles $arg"
   	    fi
   	    prev=
  +	    continue
   	    ;;
   	  esac
   	  ;;
  @@ -958,7 +882,7 @@
   	  ;;
   	rpath | xrpath)
   	  # We need an absolute path.
  -	  case "$arg" in
  +	  case $arg in
   	  [\\/]* | [A-Za-z]:[\\/]*) ;;
   	  *)
   	    $echo "$modename: only absolute run-paths are allowed" 1>&2
  @@ -979,17 +903,32 @@
   	  prev=
   	  continue
   	  ;;
  +	xcompiler)
  +	  compiler_flags="$compiler_flags $qarg"
  +	  prev=
  +	  compile_command="$compile_command $qarg"
  +	  finalize_command="$finalize_command $qarg"
  +	  continue
  +	  ;;
  +	xlinker)
  +	  linker_flags="$linker_flags $qarg"
  +	  compiler_flags="$compiler_flags $wl$qarg"
  +	  prev=
  +	  compile_command="$compile_command $wl$qarg"
  +	  finalize_command="$finalize_command $wl$qarg"
  +	  continue
  +	  ;;
   	*)
   	  eval "$prev=\"\$arg\""
   	  prev=
   	  continue
   	  ;;
   	esac
  -      fi
  +      fi # test -n $prev
   
         prevarg="$arg"
   
  -      case "$arg" in
  +      case $arg in
         -all-static)
   	if test -n "$link_static_flag"; then
   	  compile_command="$compile_command $link_static_flag"
  @@ -1026,7 +965,7 @@
   
         -export-symbols | -export-symbols-regex)
   	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
  -	  $echo "$modename: not more than one -exported-symbols argument allowed"
  +	  $echo "$modename: more than one -exported-symbols argument is not allowed"
   	  exit 1
   	fi
   	if test "X$arg" = "X-export-symbols"; then
  @@ -1037,58 +976,65 @@
   	continue
   	;;
   
  +      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
  +      # so, if we see these flags be careful not to treat them like -L
  +      -L[A-Z][A-Z]*:*)
  +	case $with_gcc/$host in
  +	no/*-*-irix*)
  +	  compile_command="$compile_command $arg"
  +	  finalize_command="$finalize_command $arg"
  +	  ;;
  +	esac
  +	continue
  +	;;
  +
         -L*)
   	dir=`$echo "X$arg" | $Xsed -e 's/^-L//'`
   	# We need an absolute path.
  -	case "$dir" in
  +	case $dir in
   	[\\/]* | [A-Za-z]:[\\/]*) ;;
   	*)
   	  absdir=`cd "$dir" && pwd`
   	  if test -z "$absdir"; then
  -	    $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
  -	    $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
  -	    absdir="$dir"
  +	    $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2
  +	    exit 1
   	  fi
   	  dir="$absdir"
   	  ;;
  -	esac
  -	case " $deplibs " in
  -	*" $arg "*) ;;
  -	*) deplibs="$deplibs $arg";;
   	esac
  -	case " $lib_search_path " in
  -	*" $dir "*) ;;
  -	*) lib_search_path="$lib_search_path $dir";;
  +	case "$deplibs " in
  +	*" -L$dir "*) ;;
  +	*)
  +	  deplibs="$deplibs -L$dir"
  +	  lib_search_path="$lib_search_path $dir"
  +	  ;;
   	esac
  -	case "$host" in
  -	*-*-cygwin* | *-*-mingw* | *-*-os2*)
  -	  dllsearchdir=`cd "$dir" && pwd || echo "$dir"`
  -	  case ":$dllsearchpath:" in
  -	  ::) dllsearchpath="$dllsearchdir";;
  -	  *":$dllsearchdir:"*) ;;
  -	  *) dllsearchpath="$dllsearchpath:$dllsearchdir";;
  +	case $host in
  +	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
  +	  case :$dllsearchpath: in
  +	  *":$dir:"*) ;;
  +	  *) dllsearchpath="$dllsearchpath:$dir";;
   	  esac
   	  ;;
   	esac
  +	continue
   	;;
   
         -l*)
  -	if test "$arg" = "-lc"; then
  -	  case "$host" in
  -	  *-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*)
  -	    # These systems don't actually have c library (as such)
  +	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
  +	  case $host in
  +	  *-*-cygwin* | *-*-pw32* | *-*-beos*)
  +	    # These systems don't actually have a C or math library (as such)
   	    continue
   	    ;;
  -	  esac
  -	elif test "$arg" = "-lm"; then
  -	  case "$host" in
  -	  *-*-cygwin* | *-*-beos*)
  -	    # These systems don't actually have math library (as such)
  -	    continue
  +	  *-*-mingw* | *-*-os2*)
  +	    # These systems don't actually have a C library (as such)
  +	    test "X$arg" = "X-lc" && continue
   	    ;;
   	  esac
   	fi
   	deplibs="$deplibs $arg"
  +	continue
   	;;
   
         -module)
  @@ -1096,6 +1042,25 @@
   	continue
   	;;
   
  +      -no-fast-install)
  +	fast_install=no
  +	continue
  +	;;
  +
  +      -no-install)
  +	case $host in
  +	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
  +	  # The PATH hackery in wrapper scripts is required on Windows
  +	  # in order for the loader to find any dlls it needs.
  +	  $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2
  +	  $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2
  +	  fast_install=no
  +	  ;;
  +	*) no_install=yes ;;
  +	esac
  +	continue
  +	;;
  +
         -no-undefined)
   	allow_undefined=no
   	continue
  @@ -1121,7 +1086,7 @@
         -R*)
   	dir=`$echo "X$arg" | $Xsed -e 's/^-R//'`
   	# We need an absolute path.
  -	case "$dir" in
  +	case $dir in
   	[\\/]* | [A-Za-z]:[\\/]*) ;;
   	*)
   	  $echo "$modename: only absolute run-paths are allowed" 1>&2
  @@ -1136,11 +1101,11 @@
   	;;
   
         -static)
  -	# If we have no pic_flag, then this is the same as -all-static.
  -	if test -z "$pic_flag" && test -n "$link_static_flag"; then
  -	  compile_command="$compile_command $link_static_flag"
  -	  finalize_command="$finalize_command $link_static_flag"
  -	fi
  +	# The effects of -static are defined in a previous loop.
  +	# We used to do the same as -all-static on platforms that
  +	# didn't have a PIC flag, but the assumption that the effects
  +	# would be equivalent was wrong.  It would break on at least
  +	# Digital Unix and AIX.
   	continue
   	;;
   
  @@ -1154,28 +1119,71 @@
   	continue
   	;;
   
  +      -Wc,*)
  +	args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'`
  +	arg=
  +	IFS="${IFS= 	}"; save_ifs="$IFS"; IFS=','
  +	for flag in $args; do
  +	  IFS="$save_ifs"
  +	  case $flag in
  +	    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
  +	    flag="\"$flag\""
  +	    ;;
  +	  esac
  +	  arg="$arg $wl$flag"
  +	  compiler_flags="$compiler_flags $flag"
  +	done
  +	IFS="$save_ifs"
  +	arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
  +	;;
  +
  +      -Wl,*)
  +	args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'`
  +	arg=
  +	IFS="${IFS= 	}"; save_ifs="$IFS"; IFS=','
  +	for flag in $args; do
  +	  IFS="$save_ifs"
  +	  case $flag in
  +	    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
  +	    flag="\"$flag\""
  +	    ;;
  +	  esac
  +	  arg="$arg $wl$flag"
  +	  compiler_flags="$compiler_flags $wl$flag"
  +	  linker_flags="$linker_flags $flag"
  +	done
  +	IFS="$save_ifs"
  +	arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
  +	;;
  +
  +      -Xcompiler)
  +	prev=xcompiler
  +	continue
  +	;;
  +
  +      -Xlinker)
  +	prev=xlinker
  +	continue
  +	;;
  +
         # Some other compiler flag.
         -* | +*)
   	# Unknown arguments in both finalize_command and compile_command need
   	# to be aesthetically quoted because they are evaled later.
   	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
  -	case "$arg" in
  -	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
  +	case $arg in
  +	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
   	  arg="\"$arg\""
   	  ;;
   	esac
   	;;
   
  -      *.o | *.obj | *.a | *.lib)
  -	# A standard object.
  -	objs="$objs $arg"
  -	;;
  -
  -      *.lo)
  -	# A library object.
  +      *.lo | *.$objext)
  +	# A library or standard object.
   	if test "$prev" = dlfiles; then
  -	  dlfiles="$dlfiles $arg"
  -	  if test "$build_libtool_libs" = yes && test "$dlopen" = yes; then
  +	  # This file was specified with -dlopen.
  +	  if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
  +	    dlfiles="$dlfiles $arg"
   	    prev=
   	    continue
   	  else
  @@ -1188,357 +1196,890 @@
   	  # Preload the old-style object.
   	  dlprefiles="$dlprefiles "`$echo "X$arg" | $Xsed -e "$lo2o"`
   	  prev=
  +	else
  +	  case $arg in
  +	  *.lo) libobjs="$libobjs $arg" ;;
  +	  *) objs="$objs $arg" ;;
  +	  esac
   	fi
  -	libobjs="$libobjs $arg"
   	;;
   
  +      *.$libext)
  +	# An archive.
  +	deplibs="$deplibs $arg"
  +	old_deplibs="$old_deplibs $arg"
  +	continue
  +	;;
  +
         *.la)
   	# A libtool-controlled library.
   
  -	dlname=
  -	libdir=
  -	library_names=
  -	old_library=
  +	if test "$prev" = dlfiles; then
  +	  # This library was specified with -dlopen.
  +	  dlfiles="$dlfiles $arg"
  +	  prev=
  +	elif test "$prev" = dlprefiles; then
  +	  # The library was specified with -dlpreopen.
  +	  dlprefiles="$dlprefiles $arg"
  +	  prev=
  +	else
  +	  deplibs="$deplibs $arg"
  +	fi
  +	continue
  +	;;
  +
  +      # Some other compiler argument.
  +      *)
  +	# Unknown arguments in both finalize_command and compile_command need
  +	# to be aesthetically quoted because they are evaled later.
  +	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
  +	case $arg in
  +	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
  +	  arg="\"$arg\""
  +	  ;;
  +	esac
  +	;;
  +      esac # arg
  +
  +      # Now actually substitute the argument into the commands.
  +      if test -n "$arg"; then
  +	compile_command="$compile_command $arg"
  +	finalize_command="$finalize_command $arg"
  +      fi
  +    done # argument parsing loop
  +
  +    if test -n "$prev"; then
  +      $echo "$modename: the \`$prevarg' option requires an argument" 1>&2
  +      $echo "$help" 1>&2
  +      exit 1
  +    fi
  +
  +    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
  +      eval arg=\"$export_dynamic_flag_spec\"
  +      compile_command="$compile_command $arg"
  +      finalize_command="$finalize_command $arg"
  +    fi
  +
  +    # calculate the name of the file, without its directory
  +    outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
  +    libobjs_save="$libobjs"
  +
  +    if test -n "$shlibpath_var"; then
  +      # get the directories listed in $shlibpath_var
  +      eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
  +    else
  +      shlib_search_path=
  +    fi
  +    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
  +    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
  +
  +    output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
  +    if test "X$output_objdir" = "X$output"; then
  +      output_objdir="$objdir"
  +    else
  +      output_objdir="$output_objdir/$objdir"
  +    fi
  +    # Create the object directory.
  +    if test ! -d $output_objdir; then
  +      $show "$mkdir $output_objdir"
  +      $run $mkdir $output_objdir
  +      status=$?
  +      if test $status -ne 0 && test ! -d $output_objdir; then
  +	exit $status
  +      fi
  +    fi
  +
  +    # Determine the type of output
  +    case $output in
  +    "")
  +      $echo "$modename: you must specify an output file" 1>&2
  +      $echo "$help" 1>&2
  +      exit 1
  +      ;;
  +    *.$libext) linkmode=oldlib ;;
  +    *.lo | *.$objext) linkmode=obj ;;
  +    *.la) linkmode=lib ;;
  +    *) linkmode=prog ;; # Anything else should be a program.
  +    esac
   
  +    specialdeplibs=
  +    libs=
  +    # Find all interdependent deplibs by searching for libraries
  +    # that are linked more than once (e.g. -la -lb -la)
  +    for deplib in $deplibs; do
  +      case "$libs " in
  +      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
  +      esac
  +      libs="$libs $deplib"
  +    done
  +    deplibs=
  +    newdependency_libs=
  +    newlib_search_path=
  +    need_relink=no # whether we're linking any uninstalled libtool libraries
  +    notinst_deplibs= # not-installed libtool libraries
  +    notinst_path= # paths that contain not-installed libtool libraries
  +    case $linkmode in
  +    lib)
  +	passes="conv link"
  +	for file in $dlfiles $dlprefiles; do
  +	  case $file in
  +	  *.la) ;;
  +	  *)
  +	    $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2
  +	    exit 1
  +	    ;;
  +	  esac
  +	done
  +	;;
  +    prog)
  +	compile_deplibs=
  +	finalize_deplibs=
  +	alldeplibs=no
  +	newdlfiles=
  +	newdlprefiles=
  +	passes="conv scan dlopen dlpreopen link"
  +	;;
  +    *)  passes="conv"
  +	;;
  +    esac
  +    for pass in $passes; do
  +      if test $linkmode = prog; then
  +	# Determine which files to process
  +	case $pass in
  +	dlopen)
  +	  libs="$dlfiles"
  +	  save_deplibs="$deplibs" # Collect dlpreopened libraries
  +	  deplibs=
  +	  ;;
  +	dlpreopen) libs="$dlprefiles" ;;
  +	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
  +	esac
  +      fi
  +      for deplib in $libs; do
  +	lib=
  +	found=no
  +	case $deplib in
  +	-l*)
  +	  if test $linkmode = oldlib && test $linkmode = obj; then
  +	    $echo "$modename: warning: \`-l' is ignored for archives/objects: $deplib" 1>&2
  +	    continue
  +	  fi
  +	  if test $pass = conv; then
  +	    deplibs="$deplib $deplibs"
  +	    continue
  +	  fi
  +	  name=`$echo "X$deplib" | $Xsed -e 's/^-l//'`
  +	  for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do
  +	    # Search the libtool library
  +	    lib="$searchdir/lib${name}.la"
  +	    if test -f "$lib"; then
  +	      found=yes
  +	      break
  +	    fi
  +	  done
  +	  if test "$found" != yes; then
  +	    # deplib doesn't seem to be a libtool library
  +	    if test "$linkmode,$pass" = "prog,link"; then
  +	      compile_deplibs="$deplib $compile_deplibs"
  +	      finalize_deplibs="$deplib $finalize_deplibs"
  +	    else
  +	      deplibs="$deplib $deplibs"
  +	      test $linkmode = lib && newdependency_libs="$deplib $newdependency_libs"
  +	    fi
  +	    continue
  +	  fi
  +	  ;; # -l
  +	-L*)
  +	  case $linkmode in
  +	  lib)
  +	    deplibs="$deplib $deplibs"
  +	    test $pass = conv && continue
  +	    newdependency_libs="$deplib $newdependency_libs"
  +	    newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
  +	    ;;
  +	  prog)
  +	    if test $pass = conv; then
  +	      deplibs="$deplib $deplibs"
  +	      continue
  +	    fi
  +	    if test $pass = scan; then
  +	      deplibs="$deplib $deplibs"
  +	      newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
  +	    else
  +	      compile_deplibs="$deplib $compile_deplibs"
  +	      finalize_deplibs="$deplib $finalize_deplibs"
  +	    fi
  +	    ;;
  +	  *)
  +	    $echo "$modename: warning: \`-L' is ignored for archives/objects: $deplib" 1>&2
  +	    ;;
  +	  esac # linkmode
  +	  continue
  +	  ;; # -L
  +	-R*)
  +	  if test $pass = link; then
  +	    dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
  +	    # Make sure the xrpath contains only unique directories.
  +	    case "$xrpath " in
  +	    *" $dir "*) ;;
  +	    *) xrpath="$xrpath $dir" ;;
  +	    esac
  +	  fi
  +	  deplibs="$deplib $deplibs"
  +	  continue
  +	  ;;
  +	*.la) lib="$deplib" ;;
  +	*.$libext)
  +	  if test $pass = conv; then
  +	    deplibs="$deplib $deplibs"
  +	    continue
  +	  fi
  +	  case $linkmode in
  +	  lib)
  +	    if test "$deplibs_check_method" != pass_all; then
  +	      echo
  +	      echo "*** Warning: This library needs some functionality provided by $deplib."
  +	      echo "*** I have the capability to make that library automatically link in when"
  +	      echo "*** you link to this library.  But I can only do this if you have a"
  +	      echo "*** shared version of the library, which you do not appear to have."
  +	    else
  +	      echo
  +	      echo "*** Warning: Linking the shared library $output against the"
  +	      echo "*** static library $deplib is not portable!"
  +	      deplibs="$deplib $deplibs"
  +	    fi
  +	    continue
  +	    ;;
  +	  prog)
  +	    if test $pass != link; then
  +	      deplibs="$deplib $deplibs"
  +	    else
  +	      compile_deplibs="$deplib $compile_deplibs"
  +	      finalize_deplibs="$deplib $finalize_deplibs"
  +	    fi
  +	    continue
  +	    ;;
  +	  esac # linkmode
  +	  ;; # *.$libext
  +	*.lo | *.$objext)
  +	  if test $pass = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
  +	    # If there is no dlopen support or we're linking statically,
  +	    # we need to preload.
  +	    newdlprefiles="$newdlprefiles $deplib"
  +	    compile_deplibs="$deplib $compile_deplibs"
  +	    finalize_deplibs="$deplib $finalize_deplibs"
  +	  else
  +	    newdlfiles="$newdlfiles $deplib"
  +	  fi
  +	  continue
  +	  ;;
  +	%DEPLIBS%)
  +	  alldeplibs=yes
  +	  continue
  +	  ;;
  +	esac # case $deplib
  +	if test $found = yes || test -f "$lib"; then :
  +	else
  +	  $echo "$modename: cannot find the library \`$lib'" 1>&2
  +	  exit 1
  +	fi
  +
   	# Check to see that this really is a libtool archive.
  -	if (sed -e '2q' $arg | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
  +	if (sed -e '2q' $lib | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
   	else
  -	  $echo "$modename: \`$arg' is not a valid libtool archive" 1>&2
  +	  $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
   	  exit 1
   	fi
   
  +	ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
  +	test "X$ladir" = "X$lib" && ladir="."
  +
  +	dlname=
  +	dlopen=
  +	dlpreopen=
  +	libdir=
  +	library_names=
  +	old_library=
   	# If the library was installed with an old release of libtool,
   	# it will not redefine variable installed.
   	installed=yes
   
   	# Read the .la file
  -	# If there is no directory component, then add one.
  -	case "$arg" in
  -	*/* | *\\*) . $arg ;;
  -	*) . ./$arg ;;
  +	case $lib in
  +	*/* | *\\*) . $lib ;;
  +	*) . ./$lib ;;
   	esac
   
  +	if test "$linkmode,$pass" = "lib,link" ||
  +	   test "$linkmode,$pass" = "prog,scan" ||
  +	   { test $linkmode = oldlib && test $linkmode = obj; }; then
  +	   # Add dl[pre]opened files of deplib
  +	  test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
  +	  test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
  +	fi
  +
  +	if test $pass = conv; then
  +	  # Only check for convenience libraries
  +	  deplibs="$lib $deplibs"
  +	  if test -z "$libdir"; then
  +	    if test -z "$old_library"; then
  +	      $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
  +	      exit 1
  +	    fi
  +	    # It is a libtool convenience library, so add in its objects.
  +	    convenience="$convenience $ladir/$objdir/$old_library"
  +	    old_convenience="$old_convenience $ladir/$objdir/$old_library"
  +	    tmp_libs=
  +	    for deplib in $dependency_libs; do
  +	      deplibs="$deplib $deplibs"
  +	      case "$tmp_libs " in
  +	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
  +	      esac
  +	      tmp_libs="$tmp_libs $deplib"
  +	    done
  +	  elif test $linkmode != prog && test $linkmode != lib; then
  +	    $echo "$modename: \`$lib' is not a convenience library" 1>&2
  +	    exit 1
  +	  fi
  +	  continue
  +	fi # $pass = conv
  +
   	# Get the name of the library we link against.
   	linklib=
   	for l in $old_library $library_names; do
   	  linklib="$l"
   	done
  -
   	if test -z "$linklib"; then
  -	  $echo "$modename: cannot find name of link library for \`$arg'" 1>&2
  +	  $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
   	  exit 1
   	fi
   
  -	# Find the relevant object directory and library name.
  -	name=`$echo "X$arg" | $Xsed -e 's%^.*/%%' -e 's/\.la$//' -e 's/^lib//'`
  -
  -	if test "X$installed" = Xyes; then
  -	  dir="$libdir"
  -	else
  -	  dir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
  -	  if test "X$dir" = "X$arg"; then
  -	    dir="$objdir"
  +	# This library was specified with -dlopen.
  +	if test $pass = dlopen; then
  +	  if test -z "$libdir"; then
  +	    $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2
  +	    exit 1
  +	  fi
  +	  if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
  +	    # If there is no dlname, no dlopen support or we're linking
  +	    # statically, we need to preload.
  +	    dlprefiles="$dlprefiles $lib"
   	  else
  -	    dir="$dir/$objdir"
  +	    newdlfiles="$newdlfiles $lib"
   	  fi
  -	fi
  -
  -	if test -n "$dependency_libs"; then
  -	  # Extract -R and -L from dependency_libs
  -	  temp_deplibs=
  -	  for deplib in $dependency_libs; do
  -	    case "$deplib" in
  -	    -R*) temp_xrpath=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
  -		 case " $rpath $xrpath " in
  -		 *" $temp_xrpath "*) ;;
  -		 *) xrpath="$xrpath $temp_xrpath";;
  -		 esac;;
  -	    -L*) case "$compile_command $temp_deplibs " in
  -		 *" $deplib "*) ;;
  -		 *) temp_deplibs="$temp_deplibs $deplib";;
  -		 esac
  -		 temp_dir=`$echo "X$deplib" | $Xsed -e 's/^-L//'`
  -		 case " $lib_search_path " in
  -		 *" $temp_dir "*) ;;
  -		 *) lib_search_path="$lib_search_path $temp_dir";;
  -		 esac
  -		 ;;
  -	    *) temp_deplibs="$temp_deplibs $deplib";;
  -	    esac
  -	  done
  -	  dependency_libs="$temp_deplibs"
  -	fi
  -
  -	if test -z "$libdir"; then
  -	  # It is a libtool convenience library, so add in its objects.
  -	  convenience="$convenience $dir/$old_library"
  -	  old_convenience="$old_convenience $dir/$old_library"
  -	  deplibs="$deplibs$dependency_libs"
  -	  compile_command="$compile_command $dir/$old_library$dependency_libs"
  -	  finalize_command="$finalize_command $dir/$old_library$dependency_libs"
   	  continue
  -	fi
  +	fi # $pass = dlopen
   
  -	# This library was specified with -dlopen.
  -	if test "$prev" = dlfiles; then
  -	  dlfiles="$dlfiles $arg"
  -	  if test -z "$dlname" || test "$dlopen" != yes || test "$build_libtool_libs" = no; then
  -	    # If there is no dlname, no dlopen support or we're linking statically,
  -	    # we need to preload.
  -	    prev=dlprefiles
  -	  else
  -	    # We should not create a dependency on this library, but we
  -	    # may need any libraries it requires.
  -	    compile_command="$compile_command$dependency_libs"
  -	    finalize_command="$finalize_command$dependency_libs"
  -	    prev=
  -	    continue
  +	# We need an absolute path.
  +	case $ladir in
  +	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
  +	*)
  +	  abs_ladir=`cd "$ladir" && pwd`
  +	  if test -z "$abs_ladir"; then
  +	    $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2
  +	    $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
  +	    abs_ladir="$ladir"
   	  fi
  -	fi
  +	  ;;
  +	esac
  +	laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
   
  -	# The library was specified with -dlpreopen.
  -	if test "$prev" = dlprefiles; then
  +	# Find the relevant object directory and library name.
  +	if test "X$installed" = Xyes; then
  +	  if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
  +	    $echo "$modename: warning: library \`$lib' was moved." 1>&2
  +	    dir="$ladir"
  +	    absdir="$abs_ladir"
  +	    libdir="$abs_ladir"
  +	  else
  +	    dir="$libdir"
  +	    absdir="$libdir"
  +	  fi
  +	else
  +	  dir="$ladir/$objdir"
  +	  absdir="$abs_ladir/$objdir"
  +	  # Remove this search path later
  +	  notinst_path="$notinst_path $abs_ladir"
  +	fi # $installed = yes
  +	name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
  +
  +	# This library was specified with -dlpreopen.
  +	if test $pass = dlpreopen; then
  +	  if test -z "$libdir"; then
  +	    $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2
  +	    exit 1
  +	  fi
   	  # Prefer using a static library (so that no silly _DYNAMIC symbols
   	  # are required to link).
   	  if test -n "$old_library"; then
  -	    dlprefiles="$dlprefiles $dir/$old_library"
  +	    newdlprefiles="$newdlprefiles $dir/$old_library"
  +	  # Otherwise, use the dlname, so that lt_dlopen finds it.
  +	  elif test -n "$dlname"; then
  +	    newdlprefiles="$newdlprefiles $dir/$dlname"
   	  else
  -	    dlprefiles="$dlprefiles $dir/$linklib"
  +	    newdlprefiles="$newdlprefiles $dir/$linklib"
   	  fi
  -	  prev=
  +	fi # $pass = dlpreopen
  +
  +	if test -z "$libdir"; then
  +	  # Link the convenience library
  +	  if test $linkmode = lib; then
  +	    deplibs="$dir/$old_library $deplibs"
  +	  elif test "$linkmode,$pass" = "prog,link"; then
  +	    compile_deplibs="$dir/$old_library $compile_deplibs"
  +	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
  +	  else
  +	    deplibs="$lib $deplibs"
  +	  fi
  +	  continue
   	fi
   
  -	if test -n "$library_names" &&
  -	   { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
  -	  link_against_libtool_libs="$link_against_libtool_libs $arg"
  -	  if test -n "$shlibpath_var"; then
  -	    # Make sure the rpath contains only unique directories.
  -	    case "$temp_rpath " in
  -	    *" $dir "*) ;;
  -	    *) temp_rpath="$temp_rpath $dir" ;;
  -	    esac
  +	if test $linkmode = prog && test $pass != link; then
  +	  newlib_search_path="$newlib_search_path $ladir"
  +	  deplibs="$lib $deplibs"
  +
  +	  linkalldeplibs=no
  +	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
  +	     test "$build_libtool_libs" = no; then
  +	    linkalldeplibs=yes
   	  fi
   
  -	  # We need an absolute path.
  -	  case "$dir" in
  -	  [\\/] | [A-Za-z]:[\\/]*) absdir="$dir" ;;
  -	  *)
  -	    absdir=`cd "$dir" && pwd`
  -	    if test -z "$absdir"; then
  -	      $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
  -	      $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
  -	      absdir="$dir"
  +	  tmp_libs=
  +	  for deplib in $dependency_libs; do
  +	    case $deplib in
  +	    -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test
  +	    esac
  +	    # Need to link against all dependency_libs?
  +	    if test $linkalldeplibs = yes; then
  +	      deplibs="$deplib $deplibs"
  +	    else
  +	      # Need to hardcode shared library paths
  +	      # or/and link against static libraries
  +	      newdependency_libs="$deplib $newdependency_libs"
   	    fi
  -	    ;;
  -	  esac
  -	  
  -	  # This is the magic to use -rpath.
  -	  # Skip directories that are in the system default run-time
  -	  # search path, unless they have been requested with -R.
  -	  case " $sys_lib_dlsearch_path " in
  -	  *" $absdir "*) ;;
  -	  *)
  -	    case "$compile_rpath " in
  -	    *" $absdir "*) ;;
  -	    *) compile_rpath="$compile_rpath $absdir" 
  +	    case "$tmp_libs " in
  +	    *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
   	    esac
  -	    ;;
  -	  esac
  +	    tmp_libs="$tmp_libs $deplib"
  +	  done # for deplib
  +	  continue
  +	fi # $linkmode = prog...
   
  -	  case " $sys_lib_dlsearch_path " in
  -	  *" $libdir "*) ;;
  -	  *)
  -	    case "$finalize_rpath " in
  +	link_static=no # Whether the deplib will be linked statically
  +	if test -n "$library_names" &&
  +	   { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
  +	  # Link against this shared library
  +
  +	  if test "$linkmode,$pass" = "prog,link" ||
  +	   { test $linkmode = lib && test $hardcode_into_libs = yes; }; then
  +	    # Hardcode the library path.
  +	    # Skip directories that are in the system default run-time
  +	    # search path.
  +	    case " $sys_lib_dlsearch_path " in
  +	    *" $absdir "*) ;;
  +	    *)
  +	      case "$compile_rpath " in
  +	      *" $absdir "*) ;;
  +	      *) compile_rpath="$compile_rpath $absdir"
  +	      esac
  +	      ;;
  +	    esac
  +	    case " $sys_lib_dlsearch_path " in
   	    *" $libdir "*) ;;
  -	    *) finalize_rpath="$finalize_rpath $libdir"
  +	    *)
  +	      case "$finalize_rpath " in
  +	      *" $libdir "*) ;;
  +	      *) finalize_rpath="$finalize_rpath $libdir"
  +	      esac
  +	      ;;
   	    esac
  -	    ;;
  -	  esac
  +	    if test $linkmode = prog; then
  +	      # We need to hardcode the library path
  +	      if test -n "$shlibpath_var"; then
  +		# Make sure the rpath contains only unique directories.
  +		case "$temp_rpath " in
  +		*" $dir "*) ;;
  +		*" $absdir "*) ;;
  +		*) temp_rpath="$temp_rpath $dir" ;;
  +		esac
  +	      fi
  +	    fi
  +	  fi # $linkmode,$pass = prog,link...
   
  -	  lib_linked=yes
  -	  case "$hardcode_action" in
  -	  immediate | unsupported)
  -	    if test "$hardcode_direct" = no; then
  -	      compile_command="$compile_command $dir/$linklib"
  -	      deplibs="$deplibs $dir/$linklib"
  -	      case "$host" in
  -	      *-*-cygwin* | *-*-mingw* | *-*-os2*)
  -		dllsearchdir=`cd "$dir" && pwd || echo "$dir"`
  -		if test -n "$dllsearchpath"; then
  -		  dllsearchpath="$dllsearchpath:$dllsearchdir"
  -		else
  -		  dllsearchpath="$dllsearchdir"
  -		fi
  -		;;
  -	      esac
  -	    elif test "$hardcode_minus_L" = no; then
  -	      case "$host" in
  -	      *-*-sunos*)
  -		compile_shlibpath="$compile_shlibpath$dir:"
  +	  if test "$alldeplibs" = yes &&
  +	     { test "$deplibs_check_method" = pass_all ||
  +	       { test "$build_libtool_libs" = yes &&
  +		 test -n "$library_names"; }; }; then
  +	    # We only need to search for static libraries
  +	    continue
  +	  fi
  +
  +	  if test "$installed" = no; then
  +	    notinst_deplibs="$notinst_deplibs $lib"
  +	    need_relink=yes
  +	  fi
  +
  +	  if test -n "$old_archive_from_expsyms_cmds"; then
  +	    # figure out the soname
  +	    set dummy $library_names
  +	    realname="$2"
  +	    shift; shift
  +	    libname=`eval \\$echo \"$libname_spec\"`
  +	    # use dlname if we got it. it's perfectly good, no?
  +	    if test -n "$dlname"; then
  +	      soname="$dlname"
  +	    elif test -n "$soname_spec"; then
  +	      # bleh windows
  +	      case $host in
  +	      *cygwin*)
  +		major=`expr $current - $age`
  +		versuffix="-$major"
   		;;
  -	      esac
  -	      case "$compile_command " in
  -	      *" -L$dir "*) ;;
  -	      *) compile_command="$compile_command -L$dir";;
   	      esac
  -	      compile_command="$compile_command -l$name"
  -	      deplibs="$deplibs -L$dir -l$name"
  -	    elif test "$hardcode_shlibpath_var" = no; then
  -	      case ":$compile_shlibpath:" in
  -	      *":$dir:"*) ;;
  -	      *) compile_shlibpath="$compile_shlibpath$dir:";;
  +	      eval soname=\"$soname_spec\"
  +	    else
  +	      soname="$realname"
  +	    fi
  +
  +	    # Make a new name for the extract_expsyms_cmds to use
  +	    soroot="$soname"
  +	    soname=`echo $soroot | sed -e 's/^.*\///'`
  +	    newlib="libimp-`echo $soname | sed 's/^lib//;s/\.dll$//'`.a"
  +
  +	    # If the library has no export list, then create one now
  +	    if test -f "$output_objdir/$soname-def"; then :
  +	    else
  +	      $show "extracting exported symbol list from \`$soname'"
  +	      IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
  +	      eval cmds=\"$extract_expsyms_cmds\"
  +	      for cmd in $cmds; do
  +		IFS="$save_ifs"
  +		$show "$cmd"
  +		$run eval "$cmd" || exit $?
  +	      done
  +	      IFS="$save_ifs"
  +	    fi
  +
  +	    # Create $newlib
  +	    if test -f "$output_objdir/$newlib"; then :; else
  +	      $show "generating import library for \`$soname'"
  +	      IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
  +	      eval cmds=\"$old_archive_from_expsyms_cmds\"
  +	      for cmd in $cmds; do
  +		IFS="$save_ifs"
  +		$show "$cmd"
  +		$run eval "$cmd" || exit $?
  +	      done
  +	      IFS="$save_ifs"
  +	    fi
  +	    # make sure the library variables are pointing to the new library
  +	    dir=$output_objdir
  +	    linklib=$newlib
  +	  fi # test -n $old_archive_from_expsyms_cmds
  +
  +	  if test $linkmode = prog || test "$mode" != relink; then
  +	    add_shlibpath=
  +	    add_dir=
  +	    add=
  +	    lib_linked=yes
  +	    case $hardcode_action in
  +	    immediate | unsupported)
  +	      if test "$hardcode_direct" = no; then
  +		add="$dir/$linklib"
  +	      elif test "$hardcode_minus_L" = no; then
  +		case $host in
  +		*-*-sunos*) add_shlibpath="$dir" ;;
  +		esac
  +		add_dir="-L$dir"
  +		add="-l$name"
  +	      elif test "$hardcode_shlibpath_var" = no; then
  +		add_shlibpath="$dir"
  +		add="-l$name"
  +	      else
  +		lib_linked=no
  +	      fi
  +	      ;;
  +	    relink)
  +	      if test "$hardcode_direct" = yes; then
  +		add="$dir/$linklib"
  +	      elif test "$hardcode_minus_L" = yes; then
  +		add_dir="-L$dir"
  +		add="-l$name"
  +	      elif test "$hardcode_shlibpath_var" = yes; then
  +		add_shlibpath="$dir"
  +		add="-l$name"
  +	      else
  +		lib_linked=no
  +	      fi
  +	      ;;
  +	    *) lib_linked=no ;;
  +	    esac
  +
  +	    if test "$lib_linked" != yes; then
  +	      $echo "$modename: configuration error: unsupported hardcode properties"
  +	      exit 1
  +	    fi
  +
  +	    if test -n "$add_shlibpath"; then
  +	      case :$compile_shlibpath: in
  +	      *":$add_shlibpath:"*) ;;
  +	      *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
   	      esac
  -	      compile_command="$compile_command -l$name"
  -	      deplibs="$deplibs -l$name"
  +	    fi
  +	    if test $linkmode = prog; then
  +	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
  +	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
   	    else
  -	      lib_linked=no
  +	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
  +	      test -n "$add" && deplibs="$add $deplibs"
  +	      if test "$hardcode_direct" != yes && \
  +		 test "$hardcode_minus_L" != yes && \
  +		 test "$hardcode_shlibpath_var" = yes; then
  +		case :$finalize_shlibpath: in
  +		*":$libdir:"*) ;;
  +		*) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
  +		esac
  +	      fi
   	    fi
  -	    ;;
  +	  fi
   
  -	  relink)
  +	  if test $linkmode = prog || test "$mode" = relink; then
  +	    add_shlibpath=
  +	    add_dir=
  +	    add=
  +	    # Finalize command for both is simple: just hardcode it.
   	    if test "$hardcode_direct" = yes; then
  -	      compile_command="$compile_command $absdir/$linklib"
  -	      deplibs="$deplibs $absdir/$linklib"
  +	      add="$libdir/$linklib"
   	    elif test "$hardcode_minus_L" = yes; then
  -	      case "$compile_command " in
  -	      *" -L$absdir "*) ;;
  -	      *) compile_command="$compile_command -L$absdir";;
  -	      esac
  -	      compile_command="$compile_command -l$name"
  -	      deplibs="$deplibs -L$absdir -l$name"
  +	      add_dir="-L$libdir"
  +	      add="-l$name"
   	    elif test "$hardcode_shlibpath_var" = yes; then
  -	      case ":$compile_shlibpath:" in
  -	      *":$absdir:"*) ;;
  -	      *) compile_shlibpath="$compile_shlibpath$absdir:";;
  +	      case :$finalize_shlibpath: in
  +	      *":$libdir:"*) ;;
  +	      *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
   	      esac
  -	      compile_command="$compile_command -l$name"
  -	      deplibs="$deplibs -l$name"
  +	      add="-l$name"
   	    else
  -	      lib_linked=no
  +	      # We cannot seem to hardcode it, guess we'll fake it.
  +	      add_dir="-L$libdir"
  +	      add="-l$name"
   	    fi
  -	    ;;
   
  -	  *)
  -	    lib_linked=no
  -	    ;;
  -	  esac
  -
  -	  if test "$lib_linked" != yes; then
  -	    $echo "$modename: configuration error: unsupported hardcode properties"
  -	    exit 1
  -	  fi
  -
  -	  # Finalize command for both is simple: just hardcode it.
  -	  if test "$hardcode_direct" = yes; then
  -	    finalize_command="$finalize_command $libdir/$linklib"
  -	  elif test "$hardcode_minus_L" = yes; then
  -	    case "$finalize_command " in
  -	    *" -L$libdir "*) ;;
  -	    *) finalize_command="$finalize_command -L$libdir";;
  -	    esac
  -	    finalize_command="$finalize_command -l$name"
  -	  elif test "$hardcode_shlibpath_var" = yes; then
  -	    case ":$finalize_shlibpath:" in
  -	    *":$libdir:"*) ;;
  -	    *) finalize_shlibpath="$finalize_shlibpath$libdir:";;
  -	    esac
  -	    finalize_command="$finalize_command -l$name"
  -	  else
  -	    # We cannot seem to hardcode it, guess we'll fake it.
  -	    case "$finalize_command " in
  -	    *" -L$dir "*) ;;
  -	    *) finalize_command="$finalize_command -L$libdir";;
  -	    esac
  -	    finalize_command="$finalize_command -l$name"
  +	    if test $linkmode = prog; then
  +	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
  +	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
  +	    else
  +	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
  +	      test -n "$add" && deplibs="$add $deplibs"
  +	    fi
   	  fi
  -	else
  -	  # Transform directly to old archives if we don't build new libraries.
  -	  if test -n "$pic_flag" && test -z "$old_library"; then
  -	    $echo "$modename: cannot find static library for \`$arg'" 1>&2
  -	    exit 1
  +	elif test $linkmode = prog; then
  +	  if test "$alldeplibs" = yes &&
  +	     { test "$deplibs_check_method" = pass_all ||
  +	       { test "$build_libtool_libs" = yes &&
  +		 test -n "$library_names"; }; }; then
  +	    # We only need to search for static libraries
  +	    continue
   	  fi
   
  +	  # Try to link the static library
   	  # Here we assume that one of hardcode_direct or hardcode_minus_L
   	  # is not unsupported.  This is valid on all known static and
   	  # shared platforms.
   	  if test "$hardcode_direct" != unsupported; then
   	    test -n "$old_library" && linklib="$old_library"
  -	    compile_command="$compile_command $dir/$linklib"
  -	    finalize_command="$finalize_command $dir/$linklib"
  +	    compile_deplibs="$dir/$linklib $compile_deplibs"
  +	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
   	  else
  -	    case "$compile_command " in
  -	    *" -L$dir "*) ;;
  -	    *) compile_command="$compile_command -L$dir";;
  -	    esac
  -	    compile_command="$compile_command -l$name"
  -	    case "$finalize_command " in
  -	    *" -L$dir "*) ;;
  -	    *) finalize_command="$finalize_command -L$dir";;
  -	    esac
  -	    finalize_command="$finalize_command -l$name"
  +	    compile_deplibs="-l$name -L$dir $compile_deplibs"
  +	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
   	  fi
  -	fi
  -
  -	# Add in any libraries that this one depends upon.
  -	compile_command="$compile_command$dependency_libs"
  -	finalize_command="$finalize_command$dependency_libs"
  -	continue
  -	;;
  -
  -      # Some other compiler argument.
  -      *)
  -	# Unknown arguments in both finalize_command and compile_command need
  -	# to be aesthetically quoted because they are evaled later.
  -	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
  -	case "$arg" in
  -	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
  -	  arg="\"$arg\""
  -	  ;;
  -	esac
  -	;;
  -      esac
  -
  -      # Now actually substitute the argument into the commands.
  -      if test -n "$arg"; then
  -	compile_command="$compile_command $arg"
  -	finalize_command="$finalize_command $arg"
  -      fi
  -    done
  -
  -    if test -n "$prev"; then
  -      $echo "$modename: the \`$prevarg' option requires an argument" 1>&2
  -      $echo "$help" 1>&2
  -      exit 1
  -    fi
  -
  -    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
  -      eval arg=\"$export_dynamic_flag_spec\"
  -      compile_command="$compile_command $arg"
  -      finalize_command="$finalize_command $arg"
  -    fi
  +	elif test "$build_libtool_libs" = yes; then
  +	  # Not a shared library
  +	  if test "$deplibs_check_method" != pass_all; then
  +	    # We're trying link a shared library against a static one
  +	    # but the system doesn't support it.
   
  -    oldlibs=
  -    # calculate the name of the file, without its directory
  -    outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
  -    libobjs_save="$libobjs"
  +	    # Just print a warning and add the library to dependency_libs so
  +	    # that the program can be linked against the static library.
  +	    echo
  +	    echo "*** Warning: This library needs some functionality provided by $lib."
  +	    echo "*** I have the capability to make that library automatically link in when"
  +	    echo "*** you link to this library.  But I can only do this if you have a"
  +	    echo "*** shared version of the library, which you do not appear to have."
  +	    if test "$module" = yes; then
  +	      echo "*** Therefore, libtool will create a static module, that should work "
  +	      echo "*** as long as the dlopening application is linked with the -dlopen flag."
  +	      if test -z "$global_symbol_pipe"; then
  +	        echo
  +	        echo "*** However, this would only work if libtool was able to extract symbol"
  +	        echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
  +	        echo "*** not find such a program.  So, this module is probably useless."
  +	        echo "*** \`nm' from GNU binutils and a full rebuild may help."
  +	      fi
  +	      if test "$build_old_libs" = no; then
  +	        build_libtool_libs=module
  +	        build_old_libs=yes
  +	      else
  +	        build_libtool_libs=no
  +	      fi
  +	    fi
  +	  else
  +	    convenience="$convenience $dir/$old_library"
  +	    old_convenience="$old_convenience $dir/$old_library"
  +	    deplibs="$dir/$old_library $deplibs"
  +	    link_static=yes
  +	  fi
  +	fi # link shared/static library?
  +
  +	if test $linkmode = lib; then
  +	  if test -n "$dependency_libs" &&
  +	     { test $hardcode_into_libs != yes || test $build_old_libs = yes ||
  +	       test $link_static = yes; }; then
  +	    # Extract -R from dependency_libs
  +	    temp_deplibs=
  +	    for libdir in $dependency_libs; do
  +	      case $libdir in
  +	      -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'`
  +		   case " $xrpath " in
  +		   *" $temp_xrpath "*) ;;
  +		   *) xrpath="$xrpath $temp_xrpath";;
  +		   esac;;
  +	      *) temp_deplibs="$temp_deplibs $libdir";;
  +	      esac
  +	    done
  +	    dependency_libs="$temp_deplibs"
  +	  fi
   
  -    case "$output" in
  -    "")
  -      $echo "$modename: you must specify an output file" 1>&2
  -      $echo "$help" 1>&2
  -      exit 1
  -      ;;
  +	  newlib_search_path="$newlib_search_path $absdir"
  +	  # Link against this library
  +	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
  +	  # ... and its dependency_libs
  +	  tmp_libs=
  +	  for deplib in $dependency_libs; do
  +	    newdependency_libs="$deplib $newdependency_libs"
  +	    case "$tmp_libs " in
  +	    *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
  +	    esac
  +	    tmp_libs="$tmp_libs $deplib"
  +	  done
   
  -    *.a | *.lib)
  -      if test -n "$link_against_libtool_libs"; then
  -	$echo "$modename: error: cannot link libtool libraries into archives" 1>&2
  -	exit 1
  +	  if test $link_all_deplibs != no; then
  +	    # Add the search paths of all dependency libraries
  +	    for deplib in $dependency_libs; do
  +	      case $deplib in
  +	      -L*) path="$deplib" ;;
  +	      *.la)
  +		dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'`
  +		test "X$dir" = "X$deplib" && dir="."
  +		# We need an absolute path.
  +		case $dir in
  +		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
  +		*)
  +		  absdir=`cd "$dir" && pwd`
  +		  if test -z "$absdir"; then
  +		    $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
  +		    absdir="$dir"
  +		  fi
  +		  ;;
  +		esac
  +		if grep "^installed=no" $deplib > /dev/null; then
  +		  path="-L$absdir/$objdir"
  +		else
  +		  eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
  +		  if test -z "$libdir"; then
  +		    $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
  +		    exit 1
  +		  fi
  +		  if test "$absdir" != "$libdir"; then
  +		    $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2
  +		  fi
  +		  path="-L$absdir"
  +		fi
  +		;;
  +	      *) continue ;;
  +	      esac
  +	      case " $deplibs " in
  +	      *" $path "*) ;;
  +	      *) deplibs="$deplibs $path" ;;
  +	      esac
  +	    done
  +	  fi # link_all_deplibs != no
  +	fi # linkmode = lib
  +      done # for deplib in $libs
  +      if test $pass = dlpreopen; then
  +	# Link the dlpreopened libraries before other libraries
  +	for deplib in $save_deplibs; do
  +	  deplibs="$deplib $deplibs"
  +	done
         fi
  +      if test $pass != dlopen; then
  +	test $pass != scan && dependency_libs="$newdependency_libs"
  +	if test $pass != conv; then
  +	  # Make sure lib_search_path contains only unique directories.
  +	  lib_search_path=
  +	  for dir in $newlib_search_path; do
  +	    case "$lib_search_path " in
  +	    *" $dir "*) ;;
  +	    *) lib_search_path="$lib_search_path $dir" ;;
  +	    esac
  +	  done
  +	  newlib_search_path=
  +	fi
   
  -      if test -n "$deplibs"; then
  -	$echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2
  +	if test "$linkmode,$pass" != "prog,link"; then
  +	  vars="deplibs"
  +	else
  +	  vars="compile_deplibs finalize_deplibs"
  +	fi
  +	for var in $vars dependency_libs; do
  +	  # Add libraries to $var in reverse order
  +	  eval tmp_libs=\"\$$var\"
  +	  new_libs=
  +	  for deplib in $tmp_libs; do
  +	    case $deplib in
  +	    -L*) new_libs="$deplib $new_libs" ;;
  +	    *)
  +	      case " $specialdeplibs " in
  +	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
  +	      *)
  +		case " $new_libs " in
  +		*" $deplib "*) ;;
  +		*) new_libs="$deplib $new_libs" ;;
  +		esac
  +		;;
  +	      esac
  +	      ;;
  +	    esac
  +	  done
  +	  tmp_libs=
  +	  for deplib in $new_libs; do
  +	    case $deplib in
  +	    -L*)
  +	      case " $tmp_libs " in
  +	      *" $deplib "*) ;;
  +	      *) tmp_libs="$tmp_libs $deplib" ;;
  +	      esac
  +	      ;;
  +	    *) tmp_libs="$tmp_libs $deplib" ;;
  +	    esac
  +	  done
  +	  eval $var=\"$tmp_libs\"
  +	done # for var
         fi
  +      if test "$pass" = "conv" &&
  +       { test "$linkmode" = "lib" || test "$linkmode" = "prog"; }; then
  +	libs="$deplibs" # reset libs
  +	deplibs=
  +      fi
  +    done # for pass
  +    if test $linkmode = prog; then
  +      dlfiles="$newdlfiles"
  +      dlprefiles="$newdlprefiles"
  +    fi
   
  +    case $linkmode in
  +    oldlib)
         if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
   	$echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2
         fi
  @@ -1566,11 +2107,12 @@
         # Now set the variables for building old libraries.
         build_libtool_libs=no
         oldlibs="$output"
  +      objs="$objs$old_deplibs"
         ;;
   
  -    *.la)
  +    lib)
         # Make sure we only generate libraries of the form `libNAME.la'.
  -      case "$outputname" in
  +      case $outputname in
         lib*)
   	name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
   	eval libname=\"$libname_spec\"
  @@ -1589,28 +2131,22 @@
   	  libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
   	fi
   	;;
  -      esac
  -
  -      output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
  -      if test "X$output_objdir" = "X$output"; then
  -	output_objdir="$objdir"
  -      else
  -	output_objdir="$output_objdir/$objdir"
  -      fi
  +      esac
   
         if test -n "$objs"; then
  -	$echo "$modename: cannot build libtool library \`$output' from non-libtool objects:$objs" 2>&1
  -	exit 1
  -      fi
  -
  -      # How the heck are we supposed to write a wrapper for a shared library?
  -      if test -n "$link_against_libtool_libs"; then
  -	 $echo "$modename: error: cannot link shared libraries into libtool libraries" 1>&2
  -	 exit 1
  +	if test "$deplibs_check_method" != pass_all; then
  +	  $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1
  +	  exit 1
  +	else
  +	  echo
  +	  echo "*** Warning: Linking the shared library $output against the non-libtool"
  +	  echo "*** objects $objs is not portable!"
  +	  libobjs="$libobjs $objs"
  +	fi
         fi
   
  -      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
  -	$echo "$modename: warning: \`-dlopen' is ignored for libtool libraries" 1>&2
  +      if test "$dlself" != no; then
  +	$echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2
         fi
   
         set dummy $rpath
  @@ -1628,7 +2164,6 @@
   	  build_libtool_libs=convenience
   	  build_old_libs=yes
   	fi
  -	dependency_libs="$deplibs"
   
   	if test -n "$vinfo"; then
   	  $echo "$modename: warning: \`-version-info' is ignored for convenience libraries" 1>&2
  @@ -1655,8 +2190,8 @@
   	age="$4"
   
   	# Check that each of the things are valid numbers.
  -	case "$current" in
  -	0 | [1-9] | [1-9][0-9]*) ;;
  +	case $current in
  +	0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
   	*)
   	  $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2
   	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
  @@ -1664,8 +2199,8 @@
   	  ;;
   	esac
   
  -	case "$revision" in
  -	0 | [1-9] | [1-9][0-9]*) ;;
  +	case $revision in
  +	0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
   	*)
   	  $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2
   	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
  @@ -1673,8 +2208,8 @@
   	  ;;
   	esac
   
  -	case "$age" in
  -	0 | [1-9] | [1-9][0-9]*) ;;
  +	case $age in
  +	0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
   	*)
   	  $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2
   	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
  @@ -1692,12 +2227,31 @@
   	major=
   	versuffix=
   	verstring=
  -	case "$version_type" in
  +	case $version_type in
   	none) ;;
   
  +	darwin)
  +	  # Like Linux, but with the current version available in
  +	  # verstring for coding it into the library header
  +	  major=.`expr $current - $age`
  +	  versuffix="$major.$age.$revision"
  +	  # Darwin ld doesn't like 0 for these options...
  +	  minor_current=`expr $current + 1`
  +	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
  +	  ;;
  +
  +	freebsd-aout)
  +	  major=".$current"
  +	  versuffix=".$current.$revision";
  +	  ;;
  +
  +	freebsd-elf)
  +	  major=".$current"
  +	  versuffix=".$current";
  +	  ;;
  +
   	irix)
   	  major=`expr $current - $age + 1`
  -	  versuffix="$major.$revision"
   	  verstring="sgi$major.$revision"
   
   	  # Add in all the interfaces that we are compatible with.
  @@ -1707,6 +2261,10 @@
   	    loop=`expr $loop - 1`
   	    verstring="sgi$major.$iface:$verstring"
   	  done
  +
  +	  # Before this point, $major must not contain `.'.
  +	  major=.$major
  +	  versuffix="$major.$revision"
   	  ;;
   
   	linux)
  @@ -1736,21 +2294,11 @@
   	  versuffix=".$current.$revision"
   	  ;;
   
  -	freebsd-aout)
  -	  major=".$current"
  -	  versuffix=".$current.$revision";
  -	  ;;
  -
  -	freebsd-elf)
  -	  major=".$current"
  -	  versuffix=".$current";
  -	  ;;
  -
   	windows)
  -	  # Like Linux, but with '-' rather than '.', since we only
  -	  # want one extension on Windows 95.
  +	  # Use '-' rather than '.', since we only want one
  +	  # extension on DOS 8.3 filesystems.
   	  major=`expr $current - $age`
  -	  versuffix="-$major-$age-$revision"
  +	  versuffix="-$major"
   	  ;;
   
   	*)
  @@ -1777,7 +2325,7 @@
   	  versuffix=
   	  verstring=""
   	fi
  -	
  +
   	# Check to see if the archive will have undefined symbols.
   	if test "$allow_undefined" = yes; then
   	  if test "$allow_undefined_flag" = unsupported; then
  @@ -1789,34 +2337,12 @@
   	  # Don't allow undefined symbols.
   	  allow_undefined_flag="$no_undefined_flag"
   	fi
  -
  -	dependency_libs="$deplibs"
  -	case "$host" in
  -	*-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*)
  -	  # these systems don't actually have a c library (as such)!
  -	  ;;
  -        *-*-rhapsody*)
  -	  # rhapsody is a little odd...
  -	  deplibs="$deplibs -framework System"
  -	  ;;
  -	*)
  -	  # Add libc to deplibs on all other systems.
  -	  deplibs="$deplibs -lc"
  -	  ;;
  -	esac
         fi
   
  -      # Create the output directory, or remove our outputs if we need to.
  -      if test -d $output_objdir; then
  +      if test "$mode" != relink; then
  +	# Remove our outputs.
   	$show "${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*"
   	$run ${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*
  -      else
  -	$show "$mkdir $output_objdir"
  -	$run $mkdir $output_objdir
  -	status=$?
  -	if test $status -ne 0 && test ! -d $output_objdir; then
  -	  exit $status
  -	fi
         fi
   
         # Now set the variables for building old libraries.
  @@ -1827,7 +2353,70 @@
   	oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
         fi
   
  +      # Eliminate all temporary directories.
  +      for path in $notinst_path; do
  +	lib_search_path=`echo "$lib_search_path " | sed -e 's% $path % %g'`
  +	deplibs=`echo "$deplibs " | sed -e 's% -L$path % %g'`
  +	dependency_libs=`echo "$dependency_libs " | sed -e 's% -L$path % %g'`
  +      done
  +
  +      if test -n "$xrpath"; then
  +	# If the user specified any rpath flags, then add them.
  +	temp_xrpath=
  +	for libdir in $xrpath; do
  +	  temp_xrpath="$temp_xrpath -R$libdir"
  +	  case "$finalize_rpath " in
  +	  *" $libdir "*) ;;
  +	  *) finalize_rpath="$finalize_rpath $libdir" ;;
  +	  esac
  +	done
  +	if test $hardcode_into_libs != yes || test $build_old_libs = yes; then
  +	  dependency_libs="$temp_xrpath $dependency_libs"
  +	fi
  +      fi
  +
  +      # Make sure dlfiles contains only unique files that won't be dlpreopened
  +      old_dlfiles="$dlfiles"
  +      dlfiles=
  +      for lib in $old_dlfiles; do
  +	case " $dlprefiles $dlfiles " in
  +	*" $lib "*) ;;
  +	*) dlfiles="$dlfiles $lib" ;;
  +	esac
  +      done
  +
  +      # Make sure dlprefiles contains only unique files
  +      old_dlprefiles="$dlprefiles"
  +      dlprefiles=
  +      for lib in $old_dlprefiles; do
  +	case "$dlprefiles " in
  +	*" $lib "*) ;;
  +	*) dlprefiles="$dlprefiles $lib" ;;
  +	esac
  +      done
  +
         if test "$build_libtool_libs" = yes; then
  +	if test -n "$rpath"; then
  +	  case $host in
  +	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*)
  +	    # these systems don't actually have a c library (as such)!
  +	    ;;
  +	  *-*-rhapsody* | *-*-darwin1.[012])
  +	    # Rhapsody C library is in the System framework
  +	    deplibs="$deplibs -framework System"
  +	    ;;
  +	  *-*-netbsd*)
  +	    # Don't link with libc until the a.out ld.so is fixed.
  +	    ;;
  +	  *)
  +	    # Add libc to deplibs on all other systems if necessary.
  +	    if test $build_libtool_need_lc = "yes"; then
  +	      deplibs="$deplibs -lc"
  +	    fi
  +	    ;;
  +	  esac
  +	fi
  +
   	# Transform deplibs into only deplibs that can be linked in shared.
   	name_save=$name
   	libname_save=$libname
  @@ -1842,7 +2431,7 @@
   	major=""
   	newdeplibs=
   	droppeddeps=no
  -	case "$deplibs_check_method" in
  +	case $deplibs_check_method in
   	pass_all)
   	  # Don't check for shared/static.  Everything works.
   	  # This might be a little naive.  We might want to check
  @@ -1867,7 +2456,7 @@
   	    for i in $deplibs; do
   	      name="`expr $i : '-l\(.*\)'`"
   	      # If $name is empty we are operating on a -L argument.
  -	      if test "$name" != "" ; then
  +	      if test -n "$name" && test "$name" != "0"; then
   		libname=`eval \\$echo \"$libname_spec\"`
   		deplib_matches=`eval \\$echo \"$library_names_spec\"`
   		set dummy $deplib_matches
  @@ -1892,7 +2481,7 @@
   	    for i in $deplibs; do
   	      name="`expr $i : '-l\(.*\)'`"
   	     # If $name is empty we are operating on a -L argument.
  -	      if test "$name" != "" ; then
  +	      if test -n "$name" && test "$name" != "0"; then
   		$rm conftest
   		$CC -o conftest conftest.c $i
   		# Did it work?
  @@ -1928,19 +2517,19 @@
   	  ;;
   	file_magic*)
   	  set dummy $deplibs_check_method
  -	  file_magic_regex="`expr \"$deplibs_check_method\" : \"$2 \(.*\)\"`"
  +	  file_magic_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
   	  for a_deplib in $deplibs; do
   	    name="`expr $a_deplib : '-l\(.*\)'`"
   	    # If $name is empty we are operating on a -L argument.
  -	    if test "$name" != "" ; then
  +	    if test -n "$name" && test "$name" != "0"; then
   	      libname=`eval \\$echo \"$libname_spec\"`
  -	      for i in $lib_search_path; do
  +	      for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
   		    potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
   		    for potent_lib in $potential_libs; do
   		      # Follow soft links.
   		      if ls -lLd "$potent_lib" 2>/dev/null \
   			 | grep " -> " >/dev/null; then
  -			continue 
  +			continue
   		      fi
   		      # The statement above tries to avoid entering an
   		      # endless loop below, in case of cyclic links.
  @@ -1950,7 +2539,7 @@
   		      potlib="$potent_lib"
   		      while test -h "$potlib" 2>/dev/null; do
   			potliblink=`ls -ld $potlib | sed 's/.* -> //'`
  -			case "$potliblink" in
  +			case $potliblink in
   			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
   			*) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
   			esac
  @@ -1978,6 +2567,40 @@
   	    fi
   	  done # Gone through all deplibs.
   	  ;;
  +	match_pattern*)
  +	  set dummy $deplibs_check_method
  +	  match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
  +	  for a_deplib in $deplibs; do
  +	    name="`expr $a_deplib : '-l\(.*\)'`"
  +	    # If $name is empty we are operating on a -L argument.
  +	    if test -n "$name" && test "$name" != "0"; then
  +	      libname=`eval \\$echo \"$libname_spec\"`
  +	      for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
  +		potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
  +		for potent_lib in $potential_libs; do
  +		  if eval echo \"$potent_lib\" 2>/dev/null \
  +		      | sed 10q \
  +		      | egrep "$match_pattern_regex" > /dev/null; then
  +		    newdeplibs="$newdeplibs $a_deplib"
  +		    a_deplib=""
  +		    break 2
  +		  fi
  +		done
  +	      done
  +	      if test -n "$a_deplib" ; then
  +		droppeddeps=yes
  +		echo
  +		echo "*** Warning: This library needs some functionality provided by $a_deplib."
  +		echo "*** I have the capability to make that library automatically link in when"
  +		echo "*** you link to this library.  But I can only do this if you have a"
  +		echo "*** shared version of the library, which you do not appear to have."
  +	      fi
  +	    else
  +	      # Add a -L argument.
  +	      newdeplibs="$newdeplibs $a_deplib"
  +	    fi
  +	  done # Gone through all deplibs.
  +	  ;;
   	none | unknown | *)
   	  newdeplibs=""
   	  if $echo "X $deplibs" | $Xsed -e 's/ -lc$//' \
  @@ -2000,6 +2623,13 @@
   	libname=$libname_save
   	name=$name_save
   
  +	case $host in
  +	*-*-rhapsody* | *-*-darwin1.[012])
  +	  # On Rhapsody replace the C library is the System framework
  +	  newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'`
  +	  ;;
  +	esac
  +
   	if test "$droppeddeps" = yes; then
   	  if test "$module" = yes; then
   	    echo
  @@ -2025,6 +2655,21 @@
   	    echo "*** The inter-library dependencies that have been dropped here will be"
   	    echo "*** automatically added whenever a program is linked with this library"
   	    echo "*** or is declared to -dlopen it."
  +
  +	    if test $allow_undefined = no; then
  +	      echo
  +	      echo "*** Since this library must not contain undefined symbols,"
  +	      echo "*** because either the platform does not support them or"
  +	      echo "*** it was explicitly requested with -no-undefined,"
  +	      echo "*** libtool will only create a static version of it."
  +	      if test "$build_old_libs" = no; then
  +		oldlibs="$output_objdir/$libname.$libext"
  +		build_libtool_libs=module
  +		build_old_libs=yes
  +	      else
  +		build_libtool_libs=no
  +	      fi
  +	    fi
   	  fi
   	fi
   	# Done checking deplibs!
  @@ -2035,9 +2680,64 @@
         library_names=
         old_library=
         dlname=
  -      
  +
         # Test again, we may have decided not to build it any more
         if test "$build_libtool_libs" = yes; then
  +	if test $hardcode_into_libs = yes; then
  +	  # Hardcode the library paths
  +	  hardcode_libdirs=
  +	  dep_rpath=
  +	  rpath="$finalize_rpath"
  +	  test "$mode" != relink && rpath="$compile_rpath$rpath"
  +	  for libdir in $rpath; do
  +	    if test -n "$hardcode_libdir_flag_spec"; then
  +	      if test -n "$hardcode_libdir_separator"; then
  +		if test -z "$hardcode_libdirs"; then
  +		  hardcode_libdirs="$libdir"
  +		else
  +		  # Just accumulate the unique libdirs.
  +		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
  +		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
  +		    ;;
  +		  *)
  +		    hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
  +		    ;;
  +		  esac
  +		fi
  +	      else
  +		eval flag=\"$hardcode_libdir_flag_spec\"
  +		dep_rpath="$dep_rpath $flag"
  +	      fi
  +	    elif test -n "$runpath_var"; then
  +	      case "$perm_rpath " in
  +	      *" $libdir "*) ;;
  +	      *) perm_rpath="$perm_rpath $libdir" ;;
  +	      esac
  +	    fi
  +	  done
  +	  # Substitute the hardcoded libdirs into the rpath.
  +	  if test -n "$hardcode_libdir_separator" &&
  +	     test -n "$hardcode_libdirs"; then
  +	    libdir="$hardcode_libdirs"
  +	    eval dep_rpath=\"$hardcode_libdir_flag_spec\"
  +	  fi
  +	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
  +	    # We should set the runpath_var.
  +	    rpath=
  +	    for dir in $perm_rpath; do
  +	      rpath="$rpath$dir:"
  +	    done
  +	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
  +	  fi
  +	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
  +	fi
  +
  +	shlibpath="$finalize_shlibpath"
  +	test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
  +	if test -n "$shlibpath"; then
  +	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
  +	fi
  +
   	# Get the real and link names of the library.
   	eval library_names=\"$library_names_spec\"
   	set dummy $library_names
  @@ -2049,6 +2749,7 @@
   	else
   	  soname="$realname"
   	fi
  +	test -z "$dlname" && dlname=$soname
   
   	lib="$output_objdir/$realname"
   	for link
  @@ -2120,7 +2821,7 @@
   
   	    for xlib in $convenience; do
   	      # Extract the objects.
  -	      case "$xlib" in
  +	      case $xlib in
   	      [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
   	      *) xabs=`pwd`"/$xlib" ;;
   	      esac
  @@ -2145,7 +2846,12 @@
   
   	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
   	  eval flag=\"$thread_safe_flag_spec\"
  -	  linkopts="$linkopts $flag"
  +	  linker_flags="$linker_flags $flag"
  +	fi
  +
  +	# Make a backup of the uninstalled library when relinking
  +	if test "$mode" = relink; then
  +	  $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $?
   	fi
   
   	# Do each of the archive commands.
  @@ -2162,6 +2868,12 @@
   	done
   	IFS="$save_ifs"
   
  +	# Restore the uninstalled library and exit
  +	if test "$mode" = relink; then
  +	  $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $?
  +	  exit 0
  +	fi
  +
   	# Create links to the real library.
   	for linkname in $linknames; do
   	  if test "$realname" != "$linkname"; then
  @@ -2178,12 +2890,7 @@
         fi
         ;;
   
  -    *.lo | *.o | *.obj)
  -      if test -n "$link_against_libtool_libs"; then
  -	$echo "$modename: error: cannot link libtool libraries into objects" 1>&2
  -	exit 1
  -      fi
  -
  +    obj)
         if test -n "$deplibs"; then
   	$echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2
         fi
  @@ -2208,9 +2915,9 @@
   	$echo "$modename: warning: \`-release' is ignored for objects" 1>&2
         fi
   
  -      case "$output" in
  +      case $output in
         *.lo)
  -	if test -n "$objs"; then
  +	if test -n "$objs$old_deplibs"; then
   	  $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2
   	  exit 1
   	fi
  @@ -2234,7 +2941,7 @@
         gentop=
         # reload_cmds runs $LD directly, so let us get rid of
         # -Wl from whole_archive_flag_spec
  -      wl= 
  +      wl=
   
         if test -n "$convenience"; then
   	if test -n "$whole_archive_flag_spec"; then
  @@ -2253,7 +2960,7 @@
   
   	  for xlib in $convenience; do
   	    # Extract the objects.
  -	    case "$xlib" in
  +	    case $xlib in
   	    [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
   	    *) xabs=`pwd`"/$xlib" ;;
   	    esac
  @@ -2277,7 +2984,7 @@
         fi
   
         # Create the old-style object.
  -      reload_objs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs"
  +      reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
   
         output="$obj"
         eval cmds=\"$reload_cmds\"
  @@ -2312,7 +3019,7 @@
   	exit 0
         fi
   
  -      if test -n "$pic_flag"; then
  +      if test -n "$pic_flag" || test "$pic_mode" != default; then
   	# Only do commands if we really have different PIC objects.
   	reload_objs="$libobjs $reload_conv_objs"
   	output="$libobj"
  @@ -2348,8 +3055,10 @@
         exit 0
         ;;
   
  -    # Anything else should be a program.
  -    *)
  +    prog)
  +      case $host in
  +	*cygwin*) output=`echo $output | sed -e 's,.exe$,,;s,$,.exe,'` ;;
  +      esac
         if test -n "$vinfo"; then
   	$echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2
         fi
  @@ -2359,20 +3068,27 @@
         fi
   
         if test "$preload" = yes; then
  -	if test "$dlopen" = unknown && test "$dlopen_self" = unknown &&
  +	if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown &&
   	   test "$dlopen_self_static" = unknown; then
   	  $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support."
  -	fi 
  +	fi
         fi
  -    
  +
  +      case $host in
  +      *-*-rhapsody* | *-*-darwin1.[012])
  +	# On Rhapsody replace the C library is the System framework
  +	compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
  +	finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
  +	;;
  +      esac
  +
  +      compile_command="$compile_command $compile_deplibs"
  +      finalize_command="$finalize_command $finalize_deplibs"
  +
         if test -n "$rpath$xrpath"; then
   	# If the user specified any rpath flags, then add them.
   	for libdir in $rpath $xrpath; do
   	  # This is the magic to use -rpath.
  -	  case "$compile_rpath " in
  -	  *" $libdir "*) ;;
  -	  *) compile_rpath="$compile_rpath $libdir" ;;
  -	  esac
   	  case "$finalize_rpath " in
   	  *" $libdir "*) ;;
   	  *) finalize_rpath="$finalize_rpath $libdir" ;;
  @@ -2390,7 +3106,7 @@
   	      hardcode_libdirs="$libdir"
   	    else
   	      # Just accumulate the unique libdirs.
  -	      case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in
  +	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
   	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
   		;;
   	      *)
  @@ -2408,6 +3124,14 @@
   	  *) perm_rpath="$perm_rpath $libdir" ;;
   	  esac
   	fi
  +	case $host in
  +	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
  +	  case :$dllsearchpath: in
  +	  *":$libdir:"*) ;;
  +	  *) dllsearchpath="$dllsearchpath:$libdir";;
  +	  esac
  +	  ;;
  +	esac
         done
         # Substitute the hardcoded libdirs into the rpath.
         if test -n "$hardcode_libdir_separator" &&
  @@ -2426,7 +3150,7 @@
   	      hardcode_libdirs="$libdir"
   	    else
   	      # Just accumulate the unique libdirs.
  -	      case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in
  +	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
   	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
   		;;
   	      *)
  @@ -2453,23 +3177,6 @@
         fi
         finalize_rpath="$rpath"
   
  -      output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
  -      if test "X$output_objdir" = "X$output"; then
  -	output_objdir="$objdir"
  -      else
  -	output_objdir="$output_objdir/$objdir"
  -      fi
  -
  -      # Create the binary in the object directory, then wrap it.
  -      if test ! -d $output_objdir; then
  -	$show "$mkdir $output_objdir"
  -	$run $mkdir $output_objdir
  -	status=$?
  -	if test $status -ne 0 && test ! -d $output_objdir; then
  -	  exit $status
  -	fi
  -      fi
  -
         if test -n "$libobjs" && test "$build_old_libs" = yes; then
   	# Transform all the library objects into standard objects.
   	compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
  @@ -2486,7 +3193,7 @@
         fi
   
         if test -n "$dlsyms"; then
  -	case "$dlsyms" in
  +	case $dlsyms in
   	"") ;;
   	*.c)
   	  # Discover the nlist of each of the dlfiles.
  @@ -2518,7 +3225,7 @@
   	    test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist"
   
   	    # Add our own program objects to the symbol list.
  -	    progfiles=`$echo "X$objs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
  +	    progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
   	    for arg in $progfiles; do
   	      $show "extracting global C symbols from \`$arg'"
   	      $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
  @@ -2528,7 +3235,7 @@
   	      $run eval 'egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
   	      $run eval '$mv "$nlist"T "$nlist"'
   	    fi
  -	    
  +
   	    if test -n "$export_symbols_regex"; then
   	      $run eval 'egrep -e "$export_symbols_regex" "$nlist" > "$nlist"T'
   	      $run eval '$mv "$nlist"T "$nlist"'
  @@ -2617,13 +3324,13 @@
   	  fi
   
   	  pic_flag_for_symtable=
  -	  case "$host" in
  +	  case $host in
   	  # compiling the symbol table file with pic_flag works around
   	  # a FreeBSD bug that causes programs to crash when -lm is
   	  # linked before any other PIC object.  But we must not use
   	  # pic_flag when linking with -static.  The problem exists in
   	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
  -	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
  +	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
   	    case "$compile_command " in
   	    *" -static "*) ;;
   	    *) pic_flag_for_symtable=" $pic_flag -DPIC -DFREEBSD_WORKAROUND";;
  @@ -2662,7 +3369,7 @@
   	finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
         fi
   
  -      if test -z "$link_against_libtool_libs" || test "$build_libtool_libs" != yes; then
  +      if test $need_relink = no || test "$build_libtool_libs" != yes; then
   	# Replace the output file specification.
   	compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
   	link_command="$compile_command$compile_rpath"
  @@ -2671,7 +3378,7 @@
   	$show "$link_command"
   	$run eval "$link_command"
   	status=$?
  -	
  +
   	# Delete the generated files.
   	if test -n "$dlsyms"; then
   	  $show "$rm $output_objdir/${outputname}S.${objext}"
  @@ -2685,7 +3392,7 @@
   	# We should set the shlibpath_var
   	rpath=
   	for dir in $temp_rpath; do
  -	  case "$dir" in
  +	  case $dir in
   	  [\\/]* | [A-Za-z]:[\\/]*)
   	    # Absolute path.
   	    rpath="$rpath$dir:"
  @@ -2727,11 +3434,24 @@
   	fi
         fi
   
  +      if test "$no_install" = yes; then
  +	# We don't need to create a wrapper script.
  +	link_command="$compile_var$compile_command$compile_rpath"
  +	# Replace the output file specification.
  +	link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
  +	# Delete the old output file.
  +	$run $rm $output
  +	# Link the executable and exit
  +	$show "$link_command"
  +	$run eval "$link_command" || exit $?
  +	exit 0
  +      fi
  +
         if test "$hardcode_action" = relink; then
   	# Fast installation is not supported
   	link_command="$compile_var$compile_command$compile_rpath"
   	relink_command="$finalize_var$finalize_command$finalize_rpath"
  -	
  +
   	$echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2
   	$echo "$modename: \`$output' will be relinked during installation" 1>&2
         else
  @@ -2751,7 +3471,7 @@
   
         # Replace the output file specification.
         link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
  -      
  +
         # Delete the old output files.
         $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname
   
  @@ -2763,12 +3483,24 @@
   
         # Quote the relink command for shipping.
         if test -n "$relink_command"; then
  +	# Preserve any variables that may affect compiler behavior
  +	for var in $variables_saved_for_relink; do
  +	  if eval test -z \"\${$var+set}\"; then
  +	    relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
  +	  elif eval var_value=\$$var; test -z "$var_value"; then
  +	    relink_command="$var=; export $var; $relink_command"
  +	  else
  +	    var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
  +	    relink_command="$var=\"$var_value\"; export $var; $relink_command"
  +	  fi
  +	done
  +	relink_command="cd `pwd`; $relink_command"
   	relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
         fi
   
         # Quote $echo for shipping.
         if test "X$echo" = "X$SHELL $0 --fallback-echo"; then
  -	case "$0" in
  +	case $0 in
   	[\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";;
   	*) qecho="$SHELL `pwd`/$0 --fallback-echo";;
   	esac
  @@ -2784,6 +3516,11 @@
   	case $output in
   	  *.exe) output=`echo $output|sed 's,.exe$,,'` ;;
   	esac
  +	# test for cygwin because mv fails w/o .exe extensions
  +	case $host in
  +	  *cygwin*) exeext=.exe ;;
  +	  *) exeext= ;;
  +	esac
   	$rm $output
   	trap "$rm $output; exit 1" 1 2 15
   
  @@ -2813,7 +3550,7 @@
   # This environment variable determines our operation mode.
   if test \"\$libtool_install_magic\" = \"$magic\"; then
     # install mode needs the following variable:
  -  link_against_libtool_libs='$link_against_libtool_libs'
  +  notinst_deplibs='$notinst_deplibs'
   else
     # When we are sourced in execute mode, \$file and \$echo are already set.
     if test \"\$libtool_execute_magic\" != \"$magic\"; then
  @@ -2846,7 +3583,7 @@
       # If there was a directory component, then change thisdir.
       if test \"x\$destdir\" != \"x\$file\"; then
         case \"\$destdir\" in
  -      [\\/]* | [A-Za-z]:[\\/]*) thisdir=\"\$destdir\" ;;
  +      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
         *) thisdir=\"\$thisdir/\$destdir\" ;;
         esac
       fi
  @@ -2862,9 +3599,9 @@
   
   	if test "$fast_install" = yes; then
   	  echo >> $output "\
  -  program=lt-'$outputname'
  +  program=lt-'$outputname'$exeext
     progdir=\"\$thisdir/$objdir\"
  -  
  +
     if test ! -f \"\$progdir/\$program\" || \\
        { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | sed 1q\`; \\
          test \"X\$file\" != \"X\$progdir/\$program\"; }; then
  @@ -2881,7 +3618,7 @@
   
       # relink executable if necessary
       if test -n \"\$relink_command\"; then
  -      if (cd \"\$thisdir\" && eval \$relink_command); then :
  +      if (eval \$relink_command); then :
         else
   	$rm \"\$progdir/\$file\"
   	exit 1
  @@ -2931,9 +3668,9 @@
         # Run the actual program with our arguments.
   "
   	case $host in
  -	  # win32 systems need to use the prog path for dll
  -	  # lookup to work
  -	*-*-cygwin*)
  +	# win32 systems need to use the prog path for dll
  +	# lookup to work
  +	*-*-cygwin* | *-*-pw32*)
   	  $echo >> $output "\
         exec \$progdir/\$program \${1+\"\$@\"}
   "
  @@ -2987,7 +3724,7 @@
   	  oldobjs="$libobjs_save"
   	  build_libtool_libs=no
   	else
  -	  oldobjs="$objs "`$echo "X$libobjs_save" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`
  +	  oldobjs="$objs$old_deplibs "`$echo "X$libobjs_save" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`
   	fi
   	addlibs="$old_convenience"
         fi
  @@ -3003,11 +3740,11 @@
   	  exit $status
   	fi
   	generated="$generated $gentop"
  -	  
  +
   	# Add in members from convenience archives.
   	for xlib in $addlibs; do
   	  # Extract the objects.
  -	  case "$xlib" in
  +	  case $xlib in
   	  [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
   	  *) xabs=`pwd`"/$xlib" ;;
   	  esac
  @@ -3068,19 +3805,26 @@
       fi
   
       # Now create the libtool archive.
  -    case "$output" in
  +    case $output in
       *.la)
         old_library=
         test "$build_old_libs" = yes && old_library="$libname.$libext"
         $show "creating $output"
   
  -      if test -n "$xrpath"; then
  -	temp_xrpath=
  -	for libdir in $xrpath; do
  -	  temp_xrpath="$temp_xrpath -R$libdir"
  -	done
  -	dependency_libs="$temp_xrpath $dependency_libs"
  -      fi
  +      # Preserve any variables that may affect compiler behavior
  +      for var in $variables_saved_for_relink; do
  +	if eval test -z \"\${$var+set}\"; then
  +	  relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
  +	elif eval var_value=\$$var; test -z "$var_value"; then
  +	  relink_command="$var=; export $var; $relink_command"
  +	else
  +	  var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
  +	  relink_command="$var=\"$var_value\"; export $var; $relink_command"
  +	fi
  +      done
  +      # Quote the link command for shipping.
  +      relink_command="cd `pwd`; $SHELL $0 --mode=relink $libtool_args"
  +      relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
   
         # Only create the output if not a dry run.
         if test -z "$run"; then
  @@ -3090,8 +3834,52 @@
   	      break
   	    fi
   	    output="$output_objdir/$outputname"i
  +	    # Replace all uninstalled libtool libraries with the installed ones
  +	    newdependency_libs=
  +	    for deplib in $dependency_libs; do
  +	      case $deplib in
  +	      *.la)
  +		name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'`
  +		eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
  +		if test -z "$libdir"; then
  +		  $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
  +		  exit 1
  +		fi
  +		newdependency_libs="$newdependency_libs $libdir/$name"
  +		;;
  +	      *) newdependency_libs="$newdependency_libs $deplib" ;;
  +	      esac
  +	    done
  +	    dependency_libs="$newdependency_libs"
  +	    newdlfiles=
  +	    for lib in $dlfiles; do
  +	      name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
  +	      eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
  +	      if test -z "$libdir"; then
  +		$echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
  +		exit 1
  +	      fi
  +	      newdlfiles="$newdlfiles $libdir/$name"
  +	    done
  +	    dlfiles="$newdlfiles"
  +	    newdlprefiles=
  +	    for lib in $dlprefiles; do
  +	      name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
  +	      eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
  +	      if test -z "$libdir"; then
  +		$echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
  +		exit 1
  +	      fi
  +	      newdlprefiles="$newdlprefiles $libdir/$name"
  +	    done
  +	    dlprefiles="$newdlprefiles"
   	  fi
   	  $rm $output
  +	  # place dlname in correct position for cygwin
  +	  tdlname=$dlname
  +	  case $host,$output,$installed,$module,$dlname in
  +	    *cygwin*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
  +	  esac
   	  $echo > $output "\
   # $outputname - a libtool library file
   # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
  @@ -3100,7 +3888,7 @@
   # It is necessary for linking the library.
   
   # The name that we can dlopen(3).
  -dlname='$dlname'
  +dlname='$tdlname'
   
   # Names of this library.
   library_names='$library_names'
  @@ -3119,16 +3907,23 @@
   # Is this an already installed library?
   installed=$installed
   
  +# Files to dlopen/dlpreopen
  +dlopen='$dlfiles'
  +dlpreopen='$dlprefiles'
  +
   # Directory that this library needs to be installed in:
  -libdir='$install_libdir'\
  -"
  +libdir='$install_libdir'"
  +	  if test "$installed" = no && test $need_relink = yes; then
  +	    $echo >> $output "\
  +relink_command=\"$relink_command\""
  +	  fi
   	done
         fi
   
         # Do a symbolic link so that the libtool archive can be found in
         # LD_LIBRARY_PATH before the program is installed.
         $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)"
  -      $run eval "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" || exit $?
  +      $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $?
         ;;
       esac
       exit 0
  @@ -3140,10 +3935,12 @@
   
       # There may be an optional sh(1) argument at the beginning of
       # install_prog (especially on Windows NT).
  -    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || test "$nonopt" = ./shtool;then
  +    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
  +       # Allow the use of GNU shtool's install command.
  +       $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then
         # Aesthetically quote it.
         arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"`
  -      case "$arg" in
  +      case $arg in
         *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
   	arg="\"$arg\""
   	;;
  @@ -3159,7 +3956,7 @@
       # The real first argument should be the name of the installation program.
       # Aesthetically quote it.
       arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
  -    case "$arg" in
  +    case $arg in
       *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
         arg="\"$arg\""
         ;;
  @@ -3182,7 +3979,7 @@
   	continue
         fi
   
  -      case "$arg" in
  +      case $arg in
         -d) isdir=yes ;;
         -f) prev="-f" ;;
         -g) prev="-g" ;;
  @@ -3207,7 +4004,7 @@
   
         # Aesthetically quote the argument.
         arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
  -      case "$arg" in
  +      case $arg in
         *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
   	arg="\"$arg\""
   	;;
  @@ -3258,11 +4055,11 @@
   	exit 1
         fi
       fi
  -    case "$destdir" in
  +    case $destdir in
       [\\/]* | [A-Za-z]:[\\/]*) ;;
       *)
         for file in $files; do
  -	case "$file" in
  +	case $file in
   	*.lo) ;;
   	*)
   	  $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2
  @@ -3284,8 +4081,8 @@
       for file in $files; do
   
         # Do each installation.
  -      case "$file" in
  -      *.a | *.lib)
  +      case $file in
  +      *.$libext)
   	# Do the static libraries later.
   	staticlibs="$staticlibs $file"
   	;;
  @@ -3301,8 +4098,9 @@
   
   	library_names=
   	old_library=
  +	relink_command=
   	# If there is no directory component, then add one.
  -	case "$file" in
  +	case $file in
   	*/* | *\\*) . $file ;;
   	*) . ./$file ;;
   	esac
  @@ -3321,10 +4119,20 @@
   	  esac
   	fi
   
  -	dir="`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/"
  +	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/
   	test "X$dir" = "X$file/" && dir=
   	dir="$dir$objdir"
   
  +	if test -n "$relink_command"; then
  +	  $echo "$modename: warning: relinking \`$file'" 1>&2
  +	  $show "$relink_command"
  +	  if $run eval "$relink_command"; then :
  +	  else
  +	    $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
  +	    continue
  +	  fi
  +	fi
  +
   	# See the names of the shared library.
   	set dummy $library_names
   	if test -n "$2"; then
  @@ -3332,9 +4140,16 @@
   	  shift
   	  shift
   
  +	  srcname="$realname"
  +	  test -n "$relink_command" && srcname="$realname"T
  +
   	  # Install the shared library and build the symlinks.
  -	  $show "$install_prog $dir/$realname $destdir/$realname"
  -	  $run eval "$install_prog $dir/$realname $destdir/$realname" || exit $?
  +	  $show "$install_prog $dir/$srcname $destdir/$realname"
  +	  $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $?
  +	  if test -n "$stripme" && test -n "$striplib"; then
  +	    $show "$striplib $destdir/$realname"
  +	    $run eval "$striplib $destdir/$realname" || exit $?
  +	  fi
   
   	  if test $# -gt 0; then
   	    # Delete the old symlinks, and create new ones.
  @@ -3381,11 +4196,11 @@
   	fi
   
   	# Deduce the name of the destination old-style object file.
  -	case "$destfile" in
  +	case $destfile in
   	*.lo)
   	  staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"`
   	  ;;
  -	*.o | *.obj)
  +	*.$objext)
   	  staticdest="$destfile"
   	  destfile=
   	  ;;
  @@ -3424,39 +4239,46 @@
   
   	# Do a test to see if this is really a libtool program.
   	if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
  -	  link_against_libtool_libs=
  +	  notinst_deplibs=
   	  relink_command=
   
   	  # If there is no directory component, then add one.
  -	  case "$file" in
  +	  case $file in
   	  */* | *\\*) . $file ;;
   	  *) . ./$file ;;
   	  esac
   
   	  # Check the variables that should have been set.
  -	  if test -z "$link_against_libtool_libs"; then
  +	  if test -z "$notinst_deplibs"; then
   	    $echo "$modename: invalid libtool wrapper script \`$file'" 1>&2
   	    exit 1
   	  fi
   
   	  finalize=yes
  -	  for lib in $link_against_libtool_libs; do
  +	  for lib in $notinst_deplibs; do
   	    # Check to see that each library is installed.
   	    libdir=
   	    if test -f "$lib"; then
   	      # If there is no directory component, then add one.
  -	      case "$lib" in
  +	      case $lib in
   	      */* | *\\*) . $lib ;;
   	      *) . ./$lib ;;
   	      esac
   	    fi
  -	    libfile="$libdir/`$echo "X$lib" | $Xsed -e 's%^.*/%%g'`"
  +	    libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
   	    if test -n "$libdir" && test ! -f "$libfile"; then
   	      $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2
   	      finalize=no
   	    fi
   	  done
   
  +	  relink_command=
  +	  # If there is no directory component, then add one.
  +	  case $file in
  +	  */* | *\\*) . $file ;;
  +	  *) . ./$file ;;
  +	  esac
  +
   	  outputname=
   	  if test "$fast_install" = no && test -n "$relink_command"; then
   	    if test "$finalize" = yes && test -z "$run"; then
  @@ -3468,6 +4290,7 @@
   		$echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2
   		continue
   	      fi
  +	      file=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
   	      outputname="$tmpdir/$file"
   	      # Replace the output file specification.
   	      relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
  @@ -3489,6 +4312,23 @@
   	  fi
   	fi
   
  +	# remove .exe since cygwin /usr/bin/install will append another
  +	# one anyways
  +	case $install_prog,$host in
  +	/usr/bin/install*,*cygwin*)
  +	  case $file:$destfile in
  +	  *.exe:*.exe)
  +	    # this is ok
  +	    ;;
  +	  *.exe:*)
  +	    destfile=$destfile.exe
  +	    ;;
  +	  *:*.exe)
  +	    destfile=`echo $destfile | sed -e 's,.exe$,,'`
  +	    ;;
  +	  esac
  +	  ;;
  +	esac
   	$show "$install_prog$stripme $file $destfile"
   	$run eval "$install_prog\$stripme \$file \$destfile" || exit $?
   	test -n "$outputname" && ${rm}r "$tmpdir"
  @@ -3505,6 +4345,11 @@
         $show "$install_prog $file $oldlib"
         $run eval "$install_prog \$file \$oldlib" || exit $?
   
  +      if test -n "$stripme" && test -n "$striplib"; then
  +	$show "$old_striplib $oldlib"
  +	$run eval "$old_striplib $oldlib" || exit $?
  +      fi
  +
         # Do each command in the postinstall commands.
         eval cmds=\"$old_postinstall_cmds\"
         IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
  @@ -3523,7 +4368,7 @@
       if test -n "$current_libdirs"; then
         # Maybe just do a dry run.
         test -n "$run" && current_libdirs=" -n$current_libdirs"
  -      exit 0 #$current_libdirs
  +      exec $SHELL $0 --finish$current_libdirs
         exit 1
       fi
   
  @@ -3565,7 +4410,7 @@
       fi
   
       # Exit here if they wanted silent mode.
  -    test "$show" = : && exit 0
  +    test "$show" = ":" && exit 0
   
       echo "----------------------------------------------------------------------"
       echo "Libraries have been installed in:"
  @@ -3575,7 +4420,7 @@
       echo
       echo "If you ever happen to want to link against installed libraries"
       echo "in a given directory, LIBDIR, you must either use libtool, and"
  -    echo "specify the full pathname of the library, or use \`-LLIBDIR'"
  +    echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
       echo "flag during linking and do at least one of the following:"
       if test -n "$shlibpath_var"; then
         echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
  @@ -3625,7 +4470,7 @@
         fi
   
         dir=
  -      case "$file" in
  +      case $file in
         *.la)
   	# Check to see that this really is a libtool archive.
   	if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
  @@ -3640,7 +4485,7 @@
   	library_names=
   
   	# If there is no directory component, then add one.
  -	case "$file" in
  +	case $file in
   	*/* | *\\*) . $file ;;
   	*) . ./$file ;;
   	esac
  @@ -3695,13 +4540,13 @@
       args=
       for file
       do
  -      case "$file" in
  +      case $file in
         -*) ;;
         *)
   	# Do a test to see if this is really a libtool program.
   	if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
   	  # If there is no directory component, then add one.
  -	  case "$file" in
  +	  case $file in
   	  */* | *\\*) . $file ;;
   	  *) . ./$file ;;
   	  esac
  @@ -3718,8 +4563,8 @@
   
       if test -z "$run"; then
         if test -n "$shlibpath_var"; then
  -        # Export the shlibpath_var.
  -        eval "export $shlibpath_var"
  +	# Export the shlibpath_var.
  +	eval "export $shlibpath_var"
         fi
   
         # Restore saved enviroment variables
  @@ -3738,23 +4583,30 @@
       else
         # Display what would be done.
         if test -n "$shlibpath_var"; then
  -        eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
  -        $echo "export $shlibpath_var"
  +	eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
  +	$echo "export $shlibpath_var"
         fi
         $echo "$cmd$args"
         exit 0
       fi
       ;;
   
  -  # libtool uninstall mode
  -  uninstall)
  -    modename="$modename: uninstall"
  +  # libtool clean and uninstall mode
  +  clean | uninstall)
  +    modename="$modename: $mode"
       rm="$nonopt"
       files=
  +    rmforce=
  +    exit_status=0
   
  +    # This variable tells wrapper scripts just to set variables rather
  +    # than running their programs.
  +    libtool_install_magic="$magic"
  +
       for arg
       do
  -      case "$arg" in
  +      case $arg in
  +      -f) rm="$rm $arg"; rmforce=yes ;;
         -*) rm="$rm $arg" ;;
         *) files="$files $arg" ;;
         esac
  @@ -3766,14 +4618,42 @@
         exit 1
       fi
   
  +    rmdirs=
  +
       for file in $files; do
         dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
  -      test "X$dir" = "X$file" && dir=.
  +      if test "X$dir" = "X$file"; then
  +	dir=.
  +	objdir="$objdir"
  +      else
  +	objdir="$dir/$objdir"
  +      fi
         name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
  +      test $mode = uninstall && objdir="$dir"
  +
  +      # Remember objdir for removal later, being careful to avoid duplicates
  +      if test $mode = clean; then
  +	case " $rmdirs " in
  +	  *" $objdir "*) ;;
  +	  *) rmdirs="$rmdirs $objdir" ;;
  +	esac
  +      fi
  +
  +      # Don't error if the file doesn't exist and rm -f was used.
  +      if (test -L "$file") >/dev/null 2>&1 \
  +        || (test -h "$file") >/dev/null 2>&1 \
  +	|| test -f "$file"; then
  +        :
  +      elif test -d "$file"; then
  +        exit_status=1
  +	continue
  +      elif test "$rmforce" = yes; then
  +        continue
  +      fi
   
         rmfiles="$file"
   
  -      case "$name" in
  +      case $name in
         *.la)
   	# Possibly a libtool archive, so verify it.
   	if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
  @@ -3781,38 +4661,43 @@
   
   	  # Delete the libtool libraries and symlinks.
   	  for n in $library_names; do
  -	    rmfiles="$rmfiles $dir/$n"
  +	    rmfiles="$rmfiles $objdir/$n"
   	  done
  -	  test -n "$old_library" && rmfiles="$rmfiles $dir/$old_library"
  -
  -	  $show "$rm $rmfiles"
  -	  $run $rm $rmfiles
  +	  test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
  +	  test $mode = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
   
  -	  if test -n "$library_names"; then
  -	    # Do each command in the postuninstall commands.
  -	    eval cmds=\"$postuninstall_cmds\"
  -	    IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
  -	    for cmd in $cmds; do
  +	  if test $mode = uninstall; then
  +	    if test -n "$library_names"; then
  +	      # Do each command in the postuninstall commands.
  +	      eval cmds=\"$postuninstall_cmds\"
  +	      IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
  +	      for cmd in $cmds; do
  +		IFS="$save_ifs"
  +		$show "$cmd"
  +		$run eval "$cmd"
  +		if test $? != 0 && test "$rmforce" != yes; then
  +		  exit_status=1
  +		fi
  +	      done
   	      IFS="$save_ifs"
  -	      $show "$cmd"
  -	      $run eval "$cmd"
  -	    done
  -	    IFS="$save_ifs"
  -	  fi
  +	    fi
   
  -	  if test -n "$old_library"; then
  -	    # Do each command in the old_postuninstall commands.
  -	    eval cmds=\"$old_postuninstall_cmds\"
  -	    IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
  -	    for cmd in $cmds; do
  +	    if test -n "$old_library"; then
  +	      # Do each command in the old_postuninstall commands.
  +	      eval cmds=\"$old_postuninstall_cmds\"
  +	      IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
  +	      for cmd in $cmds; do
  +		IFS="$save_ifs"
  +		$show "$cmd"
  +		$run eval "$cmd"
  +		if test $? != 0 && test "$rmforce" != yes; then
  +		  exit_status=1
  +		fi
  +	      done
   	      IFS="$save_ifs"
  -	      $show "$cmd"
  -	      $run eval "$cmd"
  -	    done
  -	    IFS="$save_ifs"
  +	    fi
  +	    # FIXME: should reinstall the best remaining shared library.
   	  fi
  -
  -	  # FIXME: should reinstall the best remaining shared library.
   	fi
   	;;
   
  @@ -3821,17 +4706,35 @@
   	  oldobj=`$echo "X$name" | $Xsed -e "$lo2o"`
   	  rmfiles="$rmfiles $dir/$oldobj"
   	fi
  -	$show "$rm $rmfiles"
  -	$run $rm $rmfiles
   	;;
   
         *)
  -	$show "$rm $rmfiles"
  -	$run $rm $rmfiles
  +	# Do a test to see if this is a libtool program.
  +	if test $mode = clean &&
  +	   (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
  +	  relink_command=
  +	  . $dir/$file
  +
  +	  rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
  +	  if test "$fast_install" = yes && test -n "$relink_command"; then
  +	    rmfiles="$rmfiles $objdir/lt-$name"
  +	  fi
  +	fi
   	;;
         esac
  +      $show "$rm $rmfiles"
  +      $run $rm $rmfiles || exit_status=1
       done
  -    exit 0
  +
  +    # Try to remove the ${objdir}s in the directories where we deleted files
  +    for dir in $rmdirs; do
  +      if test -d "$dir"; then
  +	$show "rmdir $dir"
  +	$run rmdir $dir >/dev/null 2>&1
  +      fi
  +    done
  +
  +    exit $exit_status
       ;;
   
     "")
  @@ -3847,7 +4750,7 @@
   fi # test -z "$show_help"
   
   # We need to display help for each of the modes.
  -case "$mode" in
  +case $mode in
   "") $echo \
   "Usage: $modename [OPTION]... [MODE-ARG]...
   
  @@ -3866,6 +4769,7 @@
   
   MODE must be one of the following:
   
  +      clean           remove files from the build directory
         compile         compile a source file into a libtool object
         execute         automatically set library path, then run a program
         finish          complete the installation of libtool libraries
  @@ -3878,6 +4782,20 @@
     exit 0
     ;;
   
  +clean)
  +  $echo \
  +"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
  +
  +Remove files from the build directory.
  +
  +RM is the name of the program to use to delete files associated with each FILE
  +(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
  +to RM.
  +
  +If FILE is a libtool library, object or program, all the files associated
  +with it are deleted. Otherwise, only FILE itself is deleted using RM."
  +  ;;
  +
   compile)
     $echo \
   "Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
  @@ -3887,6 +4805,8 @@
   This mode accepts the following additional options:
   
     -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
  +  -prefer-pic       try to building PIC objects only
  +  -prefer-non-pic   try to building non-PIC objects only
     -static           always build a \`.o' file suitable for static linking
   
   COMPILE-COMMAND is a command to be used in creating a \`standard' object file
  @@ -3966,6 +4886,8 @@
     -LLIBDIR          search LIBDIR for required installed libraries
     -lNAME            OUTPUT-FILE requires the installed library libNAME
     -module           build a library that can dlopened
  +  -no-fast-install  disable the fast-install mode
  +  -no-install       link a not-installable executable
     -no-undefined     declare that a library does not refer to external symbols
     -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
     -release RELEASE  specify package release information
  Index: ossp-pkg/str/str_config.h.in
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 str_config.h.in
  --- ossp-pkg/str/str_config.h.in	2001/04/28 08:18:51	1.4
  +++ ossp-pkg/str/str_config.h.in	2001/08/16 12:16:52	1.5
  @@ -1,42 +1,76 @@
  -/* str_config.h.in.  Generated automatically from configure.in by autoheader.  */
  +/* str_config.h.in.  Generated automatically from configure.ac by autoheader.  */
   
   #undef STR_DEBUG
   
  -/* The number of bytes in a char.  */
  -#undef SIZEOF_CHAR
  -
  -/* The number of bytes in a int.  */
  -#undef SIZEOF_INT
  -
  -/* The number of bytes in a long.  */
  -#undef SIZEOF_LONG
  -
  -/* The number of bytes in a long long.  */
  -#undef SIZEOF_LONG_LONG
   
  -/* The number of bytes in a short.  */
  -#undef SIZEOF_SHORT
  +/* Define if you have the <dlfcn.h> header file. */
  +#undef HAVE_DLFCN_H
   
  -/* The number of bytes in a void *.  */
  -#undef SIZEOF_VOID_P
  +/* Define if you have the <inttypes.h> header file. */
  +#undef HAVE_INTTYPES_H
   
  -/* Define if you have the isinf function.  */
  +/* Define if you have the `isinf' function. */
   #undef HAVE_ISINF
   
  -/* Define if you have the isnan function.  */
  +/* Define if you have the `isnan' function. */
   #undef HAVE_ISNAN
  +
  +/* Define if you have the `m' library (-lm). */
  +#undef HAVE_LIBM
   
  -/* Define if you have the memchr function.  */
  +/* Define if you have the `memchr' function. */
   #undef HAVE_MEMCHR
   
  -/* Define if you have the memcmp function.  */
  +/* Define if you have the `memcmp' function. */
   #undef HAVE_MEMCMP
   
  -/* Define if you have the memmove function.  */
  +/* Define if you have the `memmove' function. */
   #undef HAVE_MEMMOVE
  +
  +/* Define if you have the <memory.h> header file. */
  +#undef HAVE_MEMORY_H
   
  -/* Define if you have the memset function.  */
  +/* Define if you have the `memset' function. */
   #undef HAVE_MEMSET
   
  -/* Define if you have the m library (-lm).  */
  -#undef HAVE_LIBM
  +/* Define if you have the <stdint.h> header file. */
  +#undef HAVE_STDINT_H
  +
  +/* Define if you have the <stdlib.h> header file. */
  +#undef HAVE_STDLIB_H
  +
  +/* Define if you have the <strings.h> header file. */
  +#undef HAVE_STRINGS_H
  +
  +/* Define if you have the <string.h> header file. */
  +#undef HAVE_STRING_H
  +
  +/* Define if you have the <sys/stat.h> header file. */
  +#undef HAVE_SYS_STAT_H
  +
  +/* Define if you have the <sys/types.h> header file. */
  +#undef HAVE_SYS_TYPES_H
  +
  +/* Define if you have the <unistd.h> header file. */
  +#undef HAVE_UNISTD_H
  +
  +/* The size of a `char', as computed by sizeof. */
  +#undef SIZEOF_CHAR
  +
  +/* The size of a `int', as computed by sizeof. */
  +#undef SIZEOF_INT
  +
  +/* The size of a `long', as computed by sizeof. */
  +#undef SIZEOF_LONG
  +
  +/* The size of a `long long', as computed by sizeof. */
  +#undef SIZEOF_LONG_LONG
  +
  +/* The size of a `short', as computed by sizeof. */
  +#undef SIZEOF_SHORT
  +
  +/* The size of a `void *', as computed by sizeof. */
  +#undef SIZEOF_VOID_P
  +
  +/* Define if you have the ANSI C header files. */
  +#undef STDC_HEADERS

From ossp-cvs-owner@ossp.org  Thu Aug 16 14:21:22 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7GCLME36964; Thu, 16 Aug 2001 14:21:22 +0200 (CEST)
Date: Thu, 16 Aug 2001 14:21:22 +0200 (CEST)
Message-Id: <200108161221.f7GCLME36964@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str ChangeLog str_base64.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   16-Aug-2001 14:21:22
  Branch: HEAD                             Handle: 2001081613212100

  Modified files:
    ossp-pkg/str            ChangeLog str_base64.c

  Log:
    Let str_base64(STR_BASE64_DECODE, ...) correctly honor
    the specified maximum size of the input string.
    
    Submitted by: Peter Simons <simons@cryp.to>

  Summary:
    Revision    Changes     Path
    1.32        +4  -0      ossp-pkg/str/ChangeLog
    1.3         +6  -4      ossp-pkg/str/str_base64.c
  ____________________________________________________________________________

  Index: ossp-pkg/str/ChangeLog
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 ChangeLog
  --- ossp-pkg/str/ChangeLog	2001/08/16 12:16:51	1.31
  +++ ossp-pkg/str/ChangeLog	2001/08/16 12:21:21	1.32
  @@ -11,6 +11,10 @@
   
    Changes between 0.9.4 and 0.9.5 (14-Jul-2000 to 16-Aug-2001):
   
  +   *) Let str_base64(STR_BASE64_DECODE, ...) correctly honor 
  +      the specified maximum size of the input string.
  +      [Peter Simons <simons@cryp.to>]
  +
      *) Upgraded to GNU Autoconf 2.52 and GNU Libtool 1.4
         [Ralf S. Engelschall]
   
  Index: ossp-pkg/str/str_base64.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 str_base64.c
  --- ossp-pkg/str/str_base64.c	2000/02/04 17:05:00	1.2
  +++ ossp-pkg/str/str_base64.c	2001/08/16 12:21:21	1.3
  @@ -298,29 +298,31 @@
        */
   
       if (ch == Pad64) {          /* We got a pad char. */
  -        ch = *src++;            /* Skip it, get next. */
           switch (state) {
               case 0:             /* Invalid = in first position */
               case 1:             /* Invalid = in second position */
                   return -1;
               case 2:             /* Valid, means one byte of info */
                   /* Skip any number of spaces. */
  -                for (; ch != NUL; ch = *src++)
  +                while (srclen-- > 0) {
  +                    ch = *src++;
                       if (!(isascii(ch) && isspace(ch)))
                           break;
  +                }
                   /* Make sure there is another trailing = sign. */
                   if (ch != Pad64)
                       return -1;
  -                ch = *src++;        /* Skip the = */
                   /* FALLTHROUGH */
               case 3:             /* Valid, means two bytes of info */
                   /*
                    * We know this char is an =.  Is there anything but
                    * whitespace after it?
                    */
  -                for (; ch != NUL; ch = *src++)
  +                while (srclen-- > 0) {
  +                    ch = *src++;
                       if (!(isascii(ch) && isspace(ch)))
                           return -1;
  +                }
                   /*
                    * Now make sure for cases 2 and 3 that the "extra"
                    * bits that slopped past the last full byte were

From ossp-cvs-owner@ossp.org  Thu Aug 16 14:24:26 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7GCOPf37213; Thu, 16 Aug 2001 14:24:25 +0200 (CEST)
Date: Thu, 16 Aug 2001 14:24:25 +0200 (CEST)
Message-Id: <200108161224.f7GCOPf37213@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str configure configure.ac
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   16-Aug-2001 14:24:25
  Branch: HEAD                             Handle: 2001081613242400

  Modified files:
    ossp-pkg/str            configure configure.ac

  Log:
    We require Autoconf 2.52

  Summary:
    Revision    Changes     Path
    1.12        +1  -1      ossp-pkg/str/configure
    1.2         +2  -2      ossp-pkg/str/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/str/configure
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 configure
  --- ossp-pkg/str/configure	2001/08/16 12:16:52	1.11
  +++ ossp-pkg/str/configure	2001/08/16 12:24:24	1.12
  @@ -1,5 +1,5 @@
   #! /bin/sh
  -# From configure.ac Revision: 1.2 .
  +# From configure.ac 1.0.
   # Guess values for system-dependent variables and create Makefiles.
   # Generated by Autoconf 2.52.
   #
  Index: ossp-pkg/str/configure.ac
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 configure.ac
  --- ossp-pkg/str/configure.ac	2001/08/16 12:16:52	1.1
  +++ ossp-pkg/str/configure.ac	2001/08/16 12:24:24	1.2
  @@ -2,8 +2,8 @@
   dnl ##   Autoconf specification for STR library
   dnl ##
   
  -AC_PREREQ(2.12)dnl
  -AC_REVISION($Revision: 1.1 $)
  +AC_PREREQ(2.52)dnl
  +AC_REVISION(1.0)
   
   AC_INIT(README)
   AC_HEADLINE(dnl

From ossp-cvs-owner@ossp.org  Thu Aug 16 15:16:33 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7GDGWJ44638; Thu, 16 Aug 2001 15:16:32 +0200 (CEST)
Date: Thu, 16 Aug 2001 15:16:32 +0200 (CEST)
Message-Id: <200108161316.f7GDGWJ44638@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str str_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   16-Aug-2001 15:16:32
  Branch: HEAD                             Handle: 2001081614163100

  Modified files:
    ossp-pkg/str            str_test.c

  Log:
    Add two more tests for the recent problematic regex

  Summary:
    Revision    Changes     Path
    1.20        +2  -0      ossp-pkg/str/str_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/str/str_test.c
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 str_test.c
  --- ossp-pkg/str/str_test.c	2000/03/01 11:08:48	1.19
  +++ ossp-pkg/str/str_test.c	2001/08/16 13:16:31	1.20
  @@ -243,6 +243,8 @@
       { "foobar", "s/((f(.)\\3)(b.*))/$2-$4/io", "foo-bar", NULL, NULL, NULL, 1 },
       { "foobar", "s/((f(.)\\3)(b.*))/$2-%s-$4/io", "foo-quux-bar", "quux", NULL, NULL, 1 },
       { "foobar", "s/((f(.)\\3)(b.*))/$2-%s-%s-%s-$4/io", "foo-quux-baz-0815-bar", "quux", "baz", "0815", 1 },
  +    { "foo:bar", "m/^(f[^:]+):(.*)$/", "foo", "bar", NULL, NULL, 1 },
  +    { "foo:bar", "s/^([^:]+):(.*)$/$1-%s-$2/o", "foo-quux-bar", "quux", NULL, NULL, 1 },
       { NULL, NULL, NULL, NULL, NULL, NULL, 0 }
   };
   

From ossp-cvs-owner@ossp.org  Thu Aug 16 15:17:01 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7GDH0Z44711; Thu, 16 Aug 2001 15:17:00 +0200 (CEST)
Date: Thu, 16 Aug 2001 15:17:00 +0200 (CEST)
Message-Id: <200108161317.f7GDH0Z44711@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str ChangeLog str.3 str.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   16-Aug-2001 15:17:00
  Branch: HEAD                             Handle: 2001081614170000

  Modified files:
    ossp-pkg/str            ChangeLog str.3 str.pod

  Log:
    Fix return code documentation of str_parse(): it -1 (error), 0
    (no matching) or +1 (matching) and not just TRUE or FALSE.
    Additionally fixed the str_parse() examples in the documentation.

  Summary:
    Revision    Changes     Path
    1.33        +5  -0      ossp-pkg/str/ChangeLog
    1.34        +16 -13     ossp-pkg/str/str.3
    1.27        +11 -8      ossp-pkg/str/str.pod
  ____________________________________________________________________________

  Index: ossp-pkg/str/ChangeLog
  ============================================================
  $ cvs diff -u -r1.32 -r1.33 ChangeLog
  --- ossp-pkg/str/ChangeLog	2001/08/16 12:21:21	1.32
  +++ ossp-pkg/str/ChangeLog	2001/08/16 13:17:00	1.33
  @@ -10,6 +10,11 @@
    ChangeLog
   
    Changes between 0.9.4 and 0.9.5 (14-Jul-2000 to 16-Aug-2001):
  +   
  +   *) Fix return code documentation of str_parse(): it -1 (error), 0 
  +      (no matching) or +1 (matching) and not just TRUE or FALSE.
  +      Additionally fixed the str_parse() examples in the documentation.
  +      [Ralf S. Engelschall]
   
      *) Let str_base64(STR_BASE64_DECODE, ...) correctly honor 
         the specified maximum size of the input string.
  Index: ossp-pkg/str/str.3
  ============================================================
  $ cvs diff -u -r1.33 -r1.34 str.3
  --- ossp-pkg/str/str.3	2001/04/27 12:22:21	1.33
  +++ ossp-pkg/str/str.3	2001/08/16 13:17:00	1.34
  @@ -1,5 +1,5 @@
  -.\" Automatically generated by Pod::Man version 1.02
  -.\" Sun Dec 31 12:23:40 2000
  +.\" Automatically generated by Pod::Man version 1.15
  +.\" Thu Aug 16 15:15:59 2001
   .\"
   .\" Standard preamble:
   .\" ======================================================================
  @@ -46,8 +46,8 @@
   .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
   .    ds L" ""
   .    ds R" ""
  -.    ds C` `
  -.    ds C' '
  +.    ds C` ""
  +.    ds C' ""
   'br\}
   .el\{\
   .    ds -- \|\(em\|
  @@ -63,7 +63,7 @@
   .if \nF \{\
   .    de IX
   .    tm Index:\\$1\t\\n%\t"\\$2"
  -.    .
  +..
   .    nr % 0
   .    rr F
   .\}
  @@ -283,8 +283,10 @@
   .Ip "int \fBstr_parse\fR(const char *\fIs\fR, const char *\fIpop\fR, ...);" 4
   .IX Item "int str_parse(const char *s, const char *pop, ...);"
   This parses the string \fIs\fR according to the parsing operation specified
  -by \fIpop\fR. If the parsing operation succeeds, \f(CW\*(C`TRUE\*(C'\fR is returned. Else
  -\&\f(CW\*(C`FALSE\*(C'\fR is returned.
  +by \fIpop\fR. If the parsing operation succeeds, \f(CW\*(C`1\*(C'\fR is returned. If the
  +parsing operation failed because the pattern \fIpop\fR did not match, \f(CW\*(C`0\*(C'\fR
  +is returned. If the parsing operation failed because the underlying
  +regular expression library failed, \f(CW\*(C`\-1\*(C'\fR is returned.
   .Sp
   The \fIpop\fR string usually has one of the following two syntax variants:
   `\fBm\fR \fIdelim\fR \fIregex\fR \fIdelim\fR \fIflags\fR*' (for matching operations)
  @@ -699,7 +701,7 @@
   .IX Item "Match a String"
   .Vb 5
   \& char *var = "foo:bar";
  -\& if (str_parse(var, "^.+?:.+$/)) {
  +\& if (str_parse(var, "^.+?:.+$/) > 0) {
   \&     /* var matched */
   \&     ...
   \& }
  @@ -709,7 +711,7 @@
   .Vb 10
   \& char *var = "foo:bar";
   \& char *cp, *v1, *v2;
  -\& if (str_parse(var, "m/^(.+?):(.+)$/b", &cp, &v1, &v2)) {
  +\& if (str_parse(var, "m/^(.+?):(.+)$/b", &cp, &v1, &v2) > 0) {
   \&     ...
   \&     /* now we have: 
   \&        cp = "foo\e0bar\e0" and v1 and v2 pointing
  @@ -758,11 +760,12 @@
   recycled: for the \fIstr_token\fR\|(3) implementation an anchient \fIstrtok\fR\|(3)
   flavor from William Deich 1991 was cleaned up and adjusted. As the
   background parsing engine for \fIstr_parse\fR\|(3) a heavily stripped down
  -version of Philip Hazel's \s-1PCRE\s0 2.08 library was used. The \fIstr_format\fR\|(3)
  +version of Philip Hazel's Perl Compatible Regular Expression (\s-1PCRE\s0)
  +library (initially version 2.08 and now 3.5) was used. The \fIstr_format\fR\|(3)
   implementation was based on Panos Tsirigotis' \fIsprintf\fR\|(3) code as
  -adjusted by the Apache Software Foundation 1998. The formatting engine
  -was stripped down and enhanced to support internal extensions which were
  -required by \fIstr_format\fR\|(3) and \fIstr_parse\fR\|(3).
  +adjusted by the Apache Software Foundation (\s-1ASF\s0) 1998. The formatting
  +engine was stripped down and enhanced to support internal extensions
  +which were required by \fIstr_format\fR\|(3) and \fIstr_parse\fR\|(3).
   .SH "AUTHOR"
   .IX Header "AUTHOR"
   .Vb 3
  Index: ossp-pkg/str/str.pod
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 str.pod
  --- ossp-pkg/str/str.pod	2000/02/04 17:11:08	1.26
  +++ ossp-pkg/str/str.pod	2001/08/16 13:17:00	1.27
  @@ -225,8 +225,10 @@
   =item int B<str_parse>(const char *I<s>, const char *I<pop>, ...);
   
   This parses the string I<s> according to the parsing operation specified
  -by I<pop>. If the parsing operation succeeds, C<TRUE> is returned. Else
  -C<FALSE> is returned.
  +by I<pop>. If the parsing operation succeeds, C<1> is returned. If the
  +parsing operation failed because the pattern I<pop> did not match, C<0>
  +is returned. If the parsing operation failed because the underlying
  +regular expression library failed, C<-1> is returned.
   
   The I<pop> string usually has one of the following two syntax variants:
   `B<m> I<delim> I<regex> I<delim> I<flags>*' (for matching operations)
  @@ -697,7 +699,7 @@
   =item B<Match a String>
   
    char *var = "foo:bar";
  - if (str_parse(var, "^.+?:.+$/)) {
  + if (str_parse(var, "^.+?:.+$/) > 0) {
        /* var matched */
        ...
    }
  @@ -706,7 +708,7 @@
   
    char *var = "foo:bar";
    char *cp, *v1, *v2;
  - if (str_parse(var, "m/^(.+?):(.+)$/b", &cp, &v1, &v2)) {
  + if (str_parse(var, "m/^(.+?):(.+)$/b", &cp, &v1, &v2) > 0) {
        ...
        /* now we have: 
           cp = "foo\0bar\0" and v1 and v2 pointing
  @@ -755,11 +757,12 @@
   recycled: for the str_token(3) implementation an anchient strtok(3)
   flavor from William Deich 1991 was cleaned up and adjusted. As the
   background parsing engine for str_parse(3) a heavily stripped down
  -version of Philip Hazel's PCRE 2.08 library was used. The str_format(3)
  +version of Philip Hazel's Perl Compatible Regular Expression (PCRE)
  +library (initially version 2.08 and now 3.5) was used. The str_format(3)
   implementation was based on Panos Tsirigotis' sprintf(3) code as
  -adjusted by the Apache Software Foundation 1998. The formatting engine
  -was stripped down and enhanced to support internal extensions which were
  -required by str_format(3) and str_parse(3).
  +adjusted by the Apache Software Foundation (ASF) 1998. The formatting
  +engine was stripped down and enhanced to support internal extensions
  +which were required by str_format(3) and str_parse(3).
   
   =head1 AUTHOR
   

From ossp-cvs-owner@ossp.org  Thu Aug 16 15:18:40 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7GDIdu44846; Thu, 16 Aug 2001 15:18:39 +0200 (CEST)
Date: Thu, 16 Aug 2001 15:18:39 +0200 (CEST)
Message-Id: <200108161318.f7GDIdu44846@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str THANKS
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   16-Aug-2001 15:18:39
  Branch: HEAD                             Handle: 2001081614183900

  Modified files:
    ossp-pkg/str            THANKS

  Log:
    Add Thomas and Peter S. for their help

  Summary:
    Revision    Changes     Path
    1.6         +2  -0      ossp-pkg/str/THANKS
  ____________________________________________________________________________

  Index: ossp-pkg/str/THANKS
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 THANKS
  --- ossp-pkg/str/THANKS	2000/01/09 19:11:42	1.5
  +++ ossp-pkg/str/THANKS	2001/08/16 13:18:39	1.6
  @@ -13,7 +13,9 @@
     stuff, bugfixes, hints etc. (in alphabetical order):
   
     o Dean Gaudet              <dgaudet@arctic.org>
  +  o Thomas Lotterer          <thomas.lotterer@cw.com>
     o Alfred Reibenschuh       <alfred.reibenschu@chello.at>
  +  o Peter Simons             <simons@cryp.to>
     o Fritz Zaucker            <zaucker@ee.ethz.ch>
   
     ...and all other Str users who gave me feedback but I've forgot...

From ossp-cvs-owner@ossp.org  Thu Aug 16 15:19:13 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7GDJCa44910; Thu, 16 Aug 2001 15:19:12 +0200 (CEST)
Date: Thu, 16 Aug 2001 15:19:12 +0200 (CEST)
Message-Id: <200108161319.f7GDJCa44910@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str ChangeLog
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   16-Aug-2001 15:19:12
  Branch: HEAD                             Handle: 2001081614191200

  Modified files:
    ossp-pkg/str            ChangeLog

  Log:
    Ops, this was fixed by me, but discovered by Thomas.

  Summary:
    Revision    Changes     Path
    1.34        +1  -1      ossp-pkg/str/ChangeLog
  ____________________________________________________________________________

  Index: ossp-pkg/str/ChangeLog
  ============================================================
  $ cvs diff -u -r1.33 -r1.34 ChangeLog
  --- ossp-pkg/str/ChangeLog	2001/08/16 13:17:00	1.33
  +++ ossp-pkg/str/ChangeLog	2001/08/16 13:19:12	1.34
  @@ -14,7 +14,7 @@
      *) Fix return code documentation of str_parse(): it -1 (error), 0 
         (no matching) or +1 (matching) and not just TRUE or FALSE.
         Additionally fixed the str_parse() examples in the documentation.
  -      [Ralf S. Engelschall]
  +      [Ralf S. Engelschall, Thomas Lotterer]
   
      *) Let str_base64(STR_BASE64_DECODE, ...) correctly honor 
         the specified maximum size of the input string.

From ossp-cvs-owner@ossp.org  Thu Aug 16 15:21:26 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7GDLOn45477; Thu, 16 Aug 2001 15:21:24 +0200 (CEST)
Date: Thu, 16 Aug 2001 15:21:24 +0200 (CEST)
Message-Id: <200108161321.f7GDLOn45477@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str LICENSE Makefile.in README configure configur...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   16-Aug-2001 15:21:24
  Branch: HEAD                             Handle: 2001081614212201

  Modified files:
    ossp-pkg/str            LICENSE Makefile.in README configure configure.ac
                            str-config.in str-config.pod str.h str.pod
                            str_base64.c str_basic.c str_format.c str_hash.c
                            str_memory.c str_p.h str_parse.c str_search.c
                            str_test.c str_token.c

  Log:
    Adjust copyright for year 2001.

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/str/LICENSE
    1.34        +1  -1      ossp-pkg/str/Makefile.in
    1.14        +1  -1      ossp-pkg/str/README
    1.13        +1  -1      ossp-pkg/str/configure
    1.3         +1  -1      ossp-pkg/str/configure.ac
    1.3         +1  -1      ossp-pkg/str/str-config.in
    1.3         +1  -1      ossp-pkg/str/str-config.pod
    1.21        +1  -1      ossp-pkg/str/str.h
    1.28        +1  -1      ossp-pkg/str/str.pod
    1.4         +1  -1      ossp-pkg/str/str_base64.c
    1.8         +1  -1      ossp-pkg/str/str_basic.c
    1.25        +1  -1      ossp-pkg/str/str_format.c
    1.4         +1  -1      ossp-pkg/str/str_hash.c
    1.5         +1  -1      ossp-pkg/str/str_memory.c
    1.16        +1  -1      ossp-pkg/str/str_p.h
    1.14        +1  -1      ossp-pkg/str/str_parse.c
    1.16        +1  -1      ossp-pkg/str/str_search.c
    1.21        +1  -1      ossp-pkg/str/str_test.c
    1.6         +1  -1      ossp-pkg/str/str_token.c
  ____________________________________________________________________________

  Index: ossp-pkg/str/LICENSE
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 LICENSE
  --- ossp-pkg/str/LICENSE	2000/01/02 12:23:09	1.1
  +++ ossp-pkg/str/LICENSE	2001/08/16 13:21:22	1.2
  @@ -1,6 +1,6 @@
   
     Str - String Library
  -  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
   
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/str/Makefile.in
  ============================================================
  $ cvs diff -u -r1.33 -r1.34 Makefile.in
  --- ossp-pkg/str/Makefile.in	2001/08/16 12:16:51	1.33
  +++ ossp-pkg/str/Makefile.in	2001/08/16 13:21:22	1.34
  @@ -1,6 +1,6 @@
   ##
   ##  Str - String Library
  -##  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of Str, a string handling and manipulation 
   ##  library which can be found at http://www.engelschall.com/sw/str/.
  Index: ossp-pkg/str/README
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 README
  --- ossp-pkg/str/README	2000/07/14 15:24:16	1.13
  +++ ossp-pkg/str/README	2001/08/16 13:21:22	1.14
  @@ -17,7 +17,7 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
   
     This product includes software developed by the University of
     California, Berkeley and its contributors. This product includes
  Index: ossp-pkg/str/configure
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 configure
  --- ossp-pkg/str/configure	2001/08/16 12:24:24	1.12
  +++ ossp-pkg/str/configure	2001/08/16 13:21:22	1.13
  @@ -24,7 +24,7 @@
   
       #   friendly header ;)
       echo "Configuring ${TB}Str${TN} (String Library), Version ${TB}${STR_VERSION_STR}${TN}"
  -    echo "Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>"
  +    echo "Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>"
   
       #   additionally find out hex version
       STR_VERSION_HEX="`$ac_shtool version -l c -d hex $ac_srcdir/str_version.c`"
  Index: ossp-pkg/str/configure.ac
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 configure.ac
  --- ossp-pkg/str/configure.ac	2001/08/16 12:24:24	1.2
  +++ ossp-pkg/str/configure.ac	2001/08/16 13:21:22	1.3
  @@ -9,7 +9,7 @@
   AC_HEADLINE(dnl
   Str, String Library, dnl
   STR_VERSION, str_version.c, dnl
  -[Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>])
  +[Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>])
   AC_CONFIG_HEADER(str_config.h)
   AC_PREFIX_DEFAULT(/usr/local)
   AC_PLATFORM(PLATFORM)
  Index: ossp-pkg/str/str-config.in
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 str-config.in
  --- ossp-pkg/str/str-config.in	2000/01/01 13:05:17	1.2
  +++ ossp-pkg/str/str-config.in	2001/08/16 13:21:22	1.3
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  Str - String Library
  -##  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of Str, a string handling and manipulation 
   ##  library which can be found at http://www.engelschall.com/sw/str/.
  Index: ossp-pkg/str/str-config.pod
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 str-config.pod
  --- ossp-pkg/str/str-config.pod	2000/01/01 13:05:17	1.2
  +++ ossp-pkg/str/str-config.pod	2001/08/16 13:21:22	1.3
  @@ -1,6 +1,6 @@
   ##
   ##  Str - String Library
  -##  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of Str, a string handling and manipulation 
   ##  library which can be found at http://www.engelschall.com/sw/str/.
  Index: ossp-pkg/str/str.h
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 str.h
  --- ossp-pkg/str/str.h	2000/01/20 20:42:10	1.20
  +++ ossp-pkg/str/str.h	2001/08/16 13:21:22	1.21
  @@ -1,6 +1,6 @@
   /*
   **  Str - String Library
  -**  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of Str, a string handling and manipulation 
   **  library which can be found at http://www.engelschall.com/sw/str/.
  Index: ossp-pkg/str/str.pod
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 str.pod
  --- ossp-pkg/str/str.pod	2001/08/16 13:17:00	1.27
  +++ ossp-pkg/str/str.pod	2001/08/16 13:21:22	1.28
  @@ -1,6 +1,6 @@
   ##
   ##  Str - String Library
  -##  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of Str, a string handling and manipulation 
   ##  library which can be found at http://www.engelschall.com/sw/str/.
  Index: ossp-pkg/str/str_base64.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 str_base64.c
  --- ossp-pkg/str/str_base64.c	2001/08/16 12:21:21	1.3
  +++ ossp-pkg/str/str_base64.c	2001/08/16 13:21:22	1.4
  @@ -1,6 +1,6 @@
   /*
   **  Str - String Library
  -**  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of Str, a string handling and manipulation 
   **  library which can be found at http://www.engelschall.com/sw/str/.
  Index: ossp-pkg/str/str_basic.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 str_basic.c
  --- ossp-pkg/str/str_basic.c	2000/05/25 13:04:22	1.7
  +++ ossp-pkg/str/str_basic.c	2001/08/16 13:21:22	1.8
  @@ -1,6 +1,6 @@
   /*
   **  Str - String Library
  -**  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of Str, a string handling and manipulation 
   **  library which can be found at http://www.engelschall.com/sw/str/.
  Index: ossp-pkg/str/str_format.c
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 str_format.c
  --- ossp-pkg/str/str_format.c	2001/04/28 08:18:51	1.24
  +++ ossp-pkg/str/str_format.c	2001/08/16 13:21:22	1.25
  @@ -1,6 +1,6 @@
   /*
   **  Str - String Library
  -**  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of Str, a string handling and manipulation 
   **  library which can be found at http://www.engelschall.com/sw/str/.
  Index: ossp-pkg/str/str_hash.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 str_hash.c
  --- ossp-pkg/str/str_hash.c	2000/01/20 19:02:31	1.3
  +++ ossp-pkg/str/str_hash.c	2001/08/16 13:21:22	1.4
  @@ -1,6 +1,6 @@
   /*
   **  Str - String Library
  -**  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of Str, a string handling and manipulation 
   **  library which can be found at http://www.engelschall.com/sw/str/.
  Index: ossp-pkg/str/str_memory.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 str_memory.c
  --- ossp-pkg/str/str_memory.c	2000/01/01 13:05:18	1.4
  +++ ossp-pkg/str/str_memory.c	2001/08/16 13:21:22	1.5
  @@ -1,6 +1,6 @@
   /*
   **  Str - String Library
  -**  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of Str, a string handling and manipulation 
   **  library which can be found at http://www.engelschall.com/sw/str/.
  Index: ossp-pkg/str/str_p.h
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 str_p.h
  --- ossp-pkg/str/str_p.h	2000/05/25 13:04:22	1.15
  +++ ossp-pkg/str/str_p.h	2001/08/16 13:21:22	1.16
  @@ -1,6 +1,6 @@
   /*
   **  Str - String Library
  -**  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of Str, a string handling and manipulation 
   **  library which can be found at http://www.engelschall.com/sw/str/.
  Index: ossp-pkg/str/str_parse.c
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 str_parse.c
  --- ossp-pkg/str/str_parse.c	2000/01/20 20:42:11	1.13
  +++ ossp-pkg/str/str_parse.c	2001/08/16 13:21:23	1.14
  @@ -1,6 +1,6 @@
   /*
   **  Str - String Library
  -**  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of Str, a string handling and manipulation 
   **  library which can be found at http://www.engelschall.com/sw/str/.
  Index: ossp-pkg/str/str_search.c
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 str_search.c
  --- ossp-pkg/str/str_search.c	2000/11/20 19:48:39	1.15
  +++ ossp-pkg/str/str_search.c	2001/08/16 13:21:23	1.16
  @@ -1,6 +1,6 @@
   /*
   **  Str - String Library
  -**  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of Str, a string handling and manipulation 
   **  library which can be found at http://www.engelschall.com/sw/str/.
  Index: ossp-pkg/str/str_test.c
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 str_test.c
  --- ossp-pkg/str/str_test.c	2001/08/16 13:16:31	1.20
  +++ ossp-pkg/str/str_test.c	2001/08/16 13:21:23	1.21
  @@ -1,6 +1,6 @@
   /*
   **  Str - String Library
  -**  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of Str, a string handling and manipulation 
   **  library which can be found at http://www.engelschall.com/sw/str/.
  Index: ossp-pkg/str/str_token.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 str_token.c
  --- ossp-pkg/str/str_token.c	2000/01/04 19:42:00	1.5
  +++ ossp-pkg/str/str_token.c	2001/08/16 13:21:23	1.6
  @@ -1,6 +1,6 @@
   /*
   **  Str - String Library
  -**  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of Str, a string handling and manipulation 
   **  library which can be found at http://www.engelschall.com/sw/str/.

From ossp-cvs-owner@ossp.org  Thu Aug 16 15:22:23 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7GDMLx45588; Thu, 16 Aug 2001 15:22:21 +0200 (CEST)
Date: Thu, 16 Aug 2001 15:22:21 +0200 (CEST)
Message-Id: <200108161322.f7GDMLx45588@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str README str-config.1 str.3 str_version.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   16-Aug-2001 15:22:21
  Branch: HEAD                             Handle: 2001081614222100

  Modified files:
    ossp-pkg/str            README str-config.1 str.3 str_version.c

  Log:
    Update current date for release of version 0.9.5

  Summary:
    Revision    Changes     Path
    1.15        +1  -1      ossp-pkg/str/README
    1.15        +152 -229   ossp-pkg/str/str-config.1
    1.35        +3  -3      ossp-pkg/str/str.3
    1.12        +5  -5      ossp-pkg/str/str_version.c
  ____________________________________________________________________________

  Index: ossp-pkg/str/README
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 README
  --- ossp-pkg/str/README	2001/08/16 13:21:22	1.14
  +++ ossp-pkg/str/README	2001/08/16 13:22:21	1.15
  @@ -5,7 +5,7 @@
     |____/ \__|_|   
                   
     Str - String Library                 
  -  Version 0.9.5 (14-Jul-2000)
  +  Version 0.9.5 (16-Aug-2001)
   
     ABSTRACT
   
  Index: ossp-pkg/str/str-config.1
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 str-config.1
  --- ossp-pkg/str/str-config.1	2000/07/14 15:24:16	1.14
  +++ ossp-pkg/str/str-config.1	2001/08/16 13:22:21	1.15
  @@ -1,9 +1,9 @@
  -.rn '' }`
  -''' $RCSfile$$Revision$$Date$
  -'''
  -''' $Log$
  -'''
  -.de Sh
  +.\" Automatically generated by Pod::Man version 1.15
  +.\" Thu Aug 16 15:21:44 2001
  +.\"
  +.\" Standard preamble:
  +.\" ======================================================================
  +.de Sh \" Subsection heading
   .br
   .if t .Sp
   .ne 5
  @@ -11,150 +11,106 @@
   \fB\\$1\fR
   .PP
   ..
  -.de Sp
  +.de Sp \" Vertical space (when we can't use .PP)
   .if t .sp .5v
   .if n .sp
   ..
  -.de Ip
  +.de Ip \" List item
   .br
   .ie \\n(.$>=3 .ne \\$3
   .el .ne 3
   .IP "\\$1" \\$2
   ..
  -.de Vb
  +.de Vb \" Begin verbatim text
   .ft CW
   .nf
   .ne \\$1
   ..
  -.de Ve
  +.de Ve \" End verbatim text
   .ft R
   
   .fi
   ..
  -'''
  -'''
  -'''     Set up \*(-- to give an unbreakable dash;
  -'''     string Tr holds user defined translation string.
  -'''     Bell System Logo is used as a dummy character.
  -'''
  +.\" Set up some character translations and predefined strings.  \*(-- will
  +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
  +.\" double quote, and \*(R" will give a right double quote.  | will give a
  +.\" real vertical bar.  \*(C+ will give a nicer C++.  Capital omega is used
  +.\" to do unbreakable dashes and therefore won't be available.  \*(C` and
  +.\" \*(C' expand to `' in nroff, nothing in troff, for use with C<>
   .tr \(*W-|\(bv\*(Tr
  +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
   .ie n \{\
  -.ds -- \(*W-
  -.ds PI pi
  -.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
  -.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
  -.ds L" ""
  -.ds R" ""
  -'''   \*(M", \*(S", \*(N" and \*(T" are the equivalent of
  -'''   \*(L" and \*(R", except that they are used on ".xx" lines,
  -'''   such as .IP and .SH, which do another additional levels of
  -'''   double-quote interpretation
  -.ds M" """
  -.ds S" """
  -.ds N" """""
  -.ds T" """""
  -.ds L' '
  -.ds R' '
  -.ds M' '
  -.ds S' '
  -.ds N' '
  -.ds T' '
  +.    ds -- \(*W-
  +.    ds PI pi
  +.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
  +.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
  +.    ds L" ""
  +.    ds R" ""
  +.    ds C` ""
  +.    ds C' ""
   'br\}
   .el\{\
  -.ds -- \(em\|
  -.tr \*(Tr
  -.ds L" ``
  -.ds R" ''
  -.ds M" ``
  -.ds S" ''
  -.ds N" ``
  -.ds T" ''
  -.ds L' `
  -.ds R' '
  -.ds M' `
  -.ds S' '
  -.ds N' `
  -.ds T' '
  -.ds PI \(*p
  +.    ds -- \|\(em\|
  +.    ds PI \(*p
  +.    ds L" ``
  +.    ds R" ''
   'br\}
  -.\"	If the F register is turned on, we'll generate
  -.\"	index entries out stderr for the following things:
  -.\"		TH	Title 
  -.\"		SH	Header
  -.\"		Sh	Subsection 
  -.\"		Ip	Item
  -.\"		X<>	Xref  (embedded
  -.\"	Of course, you have to process the output yourself
  -.\"	in some meaninful fashion.
  -.if \nF \{
  -.de IX
  -.tm Index:\\$1\t\\n%\t"\\$2"
  -..
  -.nr % 0
  -.rr F
  -.\}
  -.TH STR-CONFIG 1 "14-Jul-2000" "Str 0.9.5" "String Library"
  -.UC
  -.if n .hy 0
  +.\"
  +.\" If the F register is turned on, we'll generate index entries on stderr
  +.\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and
  +.\" index entries marked with X<> in POD.  Of course, you'll have to process
  +.\" the output yourself in some meaningful fashion.
  +.if \nF \{\
  +.    de IX
  +.    tm Index:\\$1\t\\n%\t"\\$2"
  +..
  +.    nr % 0
  +.    rr F
  +.\}
  +.\"
  +.\" For nroff, turn off justification.  Always turn off hyphenation; it
  +.\" makes way too many mistakes in technical documents.
  +.hy 0
   .if n .na
  -.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
  -.de CQ          \" put $1 in typewriter font
  -.ft CW
  -'if n "\c
  -'if t \\&\\$1\c
  -'if n \\&\\$1\c
  -'if n \&"
  -\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
  -'.ft R
  -..
  -.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
  -.	\" AM - accent mark definitions
  +.\"
  +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
  +.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
   .bd B 3
  -.	\" fudge factors for nroff and troff
  +.    \" fudge factors for nroff and troff
   .if n \{\
  -.	ds #H 0
  -.	ds #V .8m
  -.	ds #F .3m
  -.	ds #[ \f1
  -.	ds #] \fP
  +.    ds #H 0
  +.    ds #V .8m
  +.    ds #F .3m
  +.    ds #[ \f1
  +.    ds #] \fP
   .\}
   .if t \{\
  -.	ds #H ((1u-(\\\\n(.fu%2u))*.13m)
  -.	ds #V .6m
  -.	ds #F 0
  -.	ds #[ \&
  -.	ds #] \&
  +.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
  +.    ds #V .6m
  +.    ds #F 0
  +.    ds #[ \&
  +.    ds #] \&
   .\}
  -.	\" simple accents for nroff and troff
  +.    \" simple accents for nroff and troff
   .if n \{\
  -.	ds ' \&
  -.	ds ` \&
  -.	ds ^ \&
  -.	ds , \&
  -.	ds ~ ~
  -.	ds ? ?
  -.	ds ! !
  -.	ds /
  -.	ds q
  +.    ds ' \&
  +.    ds ` \&
  +.    ds ^ \&
  +.    ds , \&
  +.    ds ~ ~
  +.    ds /
   .\}
   .if t \{\
  -.	ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
  -.	ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
  -.	ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
  -.	ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
  -.	ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
  -.	ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
  -.	ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
  -.	ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
  -.	ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
  +.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
  +.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
  +.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
  +.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
  +.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
  +.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
   .\}
  -.	\" troff and (daisy-wheel) nroff accents
  +.    \" troff and (daisy-wheel) nroff accents
   .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
   .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
  -.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
  -.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
  -.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
  -.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
   .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
   .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
   .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
  @@ -162,95 +118,110 @@
   .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
   .ds ae a\h'-(\w'a'u*4/10)'e
   .ds Ae A\h'-(\w'A'u*4/10)'E
  -.ds oe o\h'-(\w'o'u*4/10)'e
  -.ds Oe O\h'-(\w'O'u*4/10)'E
  -.	\" corrections for vroff
  +.    \" corrections for vroff
   .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
   .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
  -.	\" for low resolution devices (crt and lpr)
  +.    \" for low resolution devices (crt and lpr)
   .if \n(.H>23 .if \n(.V>19 \
   \{\
  -.	ds : e
  -.	ds 8 ss
  -.	ds v \h'-1'\o'\(aa\(ga'
  -.	ds _ \h'-1'^
  -.	ds . \h'-1'.
  -.	ds 3 3
  -.	ds o a
  -.	ds d- d\h'-1'\(ga
  -.	ds D- D\h'-1'\(hy
  -.	ds th \o'bp'
  -.	ds Th \o'LP'
  -.	ds ae ae
  -.	ds Ae AE
  -.	ds oe oe
  -.	ds Oe OE
  +.    ds : e
  +.    ds 8 ss
  +.    ds o a
  +.    ds d- d\h'-1'\(ga
  +.    ds D- D\h'-1'\(hy
  +.    ds th \o'bp'
  +.    ds Th \o'LP'
  +.    ds ae ae
  +.    ds Ae AE
   .\}
   .rm #[ #] #H #V #F C
  +.\" ======================================================================
  +.\"
  +.IX Title "STR-CONFIG 1"
  +.TH STR-CONFIG 1 "16-Aug-2001" "Str 0.9.5" "String Library"
  +.UC
   .SH "NAME"
  -\fBstr-config\fR \- Str library build utility
  +\&\fBstr-config\fR \- Str library build utility
   .SH "VERSION"
  -Str 0.9.5 (14-Jul-2000)
  +.IX Header "VERSION"
  +Str \s-10.9.5 (16-Aug-2001)\s0
   .SH "SYNOPSIS"
  -\fBstr-config\fR
  -[\fB--help\fR]
  -[\fB--version\fR]
  -[\fB--all\fR]
  -[\fB--prefix\fR]
  -[\fB--exec-prefix\fR]
  -[\fB--bindir\fR]
  -[\fB--libdir\fR]
  -[\fB--includedir\fR]
  -[\fB--mandir\fR]
  -[\fB--datadir\fR]
  -[\fB--acdir\fR]
  -[\fB--cflags\fR]
  -[\fB--ldflags\fR]
  -[\fB--libs\fR]
  +.IX Header "SYNOPSIS"
  +\&\fBstr-config\fR
  +[\fB\*(--help\fR]
  +[\fB\*(--version\fR]
  +[\fB\*(--all\fR]
  +[\fB\*(--prefix\fR]
  +[\fB\*(--exec-prefix\fR]
  +[\fB\*(--bindir\fR]
  +[\fB\*(--libdir\fR]
  +[\fB\*(--includedir\fR]
  +[\fB\*(--mandir\fR]
  +[\fB\*(--datadir\fR]
  +[\fB\*(--acdir\fR]
  +[\fB\*(--cflags\fR]
  +[\fB\*(--ldflags\fR]
  +[\fB\*(--libs\fR]
   .SH "DESCRIPTION"
  +.IX Header "DESCRIPTION"
   The \fBstr-config\fR program is a little helper utility for easy configuring and
   building applications based on the \fIstr\fR\|(3) library.  It can be used to query the
   C compiler and linker flags which are required to correctly compile and link
   the application against the \fIstr\fR\|(3) library.
   .SH "OPTIONS"
  -\fBstr-config\fR accepts the following options:
  -.Ip "\fB--help\fR" 4
  +.IX Header "OPTIONS"
  +\&\fBstr-config\fR accepts the following options:
  +.Ip "\fB\*(--help\fR" 4
  +.IX Item "help"
   Prints the short usage information.
  -.Ip "\fB--version\fR" 4
  +.Ip "\fB\*(--version\fR" 4
  +.IX Item "version"
   Prints the version number and date of the installed \fIstr\fR\|(3) library.
  -.Ip "\fB--all\fR" 4
  +.Ip "\fB\*(--all\fR" 4
  +.IX Item "all"
   Forces the output of all flags, that is, including extra flags which are not
  -\fBStr\fR specific.
  -.Ip "\fB--prefix\fR" 4
  +\&\fBStr\fR specific.
  +.Ip "\fB\*(--prefix\fR" 4
  +.IX Item "prefix"
   Prints the installation prefix of architecture independent files
  -.Ip "\fB--exec-prefix\fR" 4
  +.Ip "\fB\*(--exec-prefix\fR" 4
  +.IX Item "exec-prefix"
   Prints the installation prefix of architecture dependent files.
  -.Ip "\fB--bindir\fR" 4
  +.Ip "\fB\*(--bindir\fR" 4
  +.IX Item "bindir"
   Prints the installation directory of binaries.
  -.Ip "\fB--libdir\fR" 4
  +.Ip "\fB\*(--libdir\fR" 4
  +.IX Item "libdir"
   Prints the installation directory of libraries.
  -.Ip "\fB--includedir\fR" 4
  +.Ip "\fB\*(--includedir\fR" 4
  +.IX Item "includedir"
   Prints the installation directory of include headers.
  -.Ip "\fB--mandir\fR" 4
  +.Ip "\fB\*(--mandir\fR" 4
  +.IX Item "mandir"
   Prints the installation directory of manual pages.
  -.Ip "\fB--datadir\fR" 4
  +.Ip "\fB\*(--datadir\fR" 4
  +.IX Item "datadir"
   Prints the installation directory of shared data.
  -.Ip "\fB--acdir\fR" 4
  +.Ip "\fB\*(--acdir\fR" 4
  +.IX Item "acdir"
   Prints the installation directory of \fBautoconf\fR data.
  -.Ip "\fB--cflags\fR" 4
  +.Ip "\fB\*(--cflags\fR" 4
  +.IX Item "cflags"
   Prints the C compiler flags which are needed to compile the \fIstr\fR\|(3)\-based
  -application. The output is usually added to the \f(CWCFLAGS\fR variable of the
  -applications \f(CWMakefile\fR.
  -.Ip "\fB--ldflags\fR" 4
  -Prints the linker flags (\f(CW-L\fR) which are needed to link the application with
  -the \fIstr\fR\|(3) library. The output is usually added to the \f(CWLDFLAGS\fR variable of
  -the applications \f(CWMakefile\fR.
  -.Ip "\fB--libs\fR" 4
  -Prints the library flags (\f(CW-l\fR) which are needed to link the application with
  -the \fIstr\fR\|(3) library. The output is usually added to the \f(CWLIBS\fR variable of the
  -applications \f(CWMakefile\fR.
  +application. The output is usually added to the \f(CW\*(C`CFLAGS\*(C'\fR variable of the
  +applications \f(CW\*(C`Makefile\*(C'\fR.
  +.Ip "\fB\*(--ldflags\fR" 4
  +.IX Item "ldflags"
  +Prints the linker flags (\f(CW\*(C`\-L\*(C'\fR) which are needed to link the application with
  +the \fIstr\fR\|(3) library. The output is usually added to the \f(CW\*(C`LDFLAGS\*(C'\fR variable of
  +the applications \f(CW\*(C`Makefile\*(C'\fR.
  +.Ip "\fB\*(--libs\fR" 4
  +.IX Item "libs"
  +Prints the library flags (\f(CW\*(C`\-l\*(C'\fR) which are needed to link the application with
  +the \fIstr\fR\|(3) library. The output is usually added to the \f(CW\*(C`LIBS\*(C'\fR variable of the
  +applications \f(CW\*(C`Makefile\*(C'\fR.
   .SH "EXAMPLE"
  -.PP
  +.IX Header "EXAMPLE"
   .Vb 4
   \& CC      = cc
   \& CFLAGS  = -O `str-config --cflags`
  @@ -265,60 +236,12 @@
   \&     $(CC) $(CFLAGS) -c foo.c
   .Ve
   .SH "SEE ALSO"
  -\fIstr\fR\|(3).
  +.IX Header "SEE ALSO"
  +\&\fIstr\fR\|(3).
   .SH "AUTHOR"
  -.PP
  +.IX Header "AUTHOR"
   .Vb 3
   \& Ralf S. Engelschall
   \& rse@engelschall.com
   \& www.engelschall.com
   .Ve
  -
  -.rn }` ''
  -.IX Title "STR-CONFIG 1"
  -.IX Name "B<str-config> - Str library build utility"
  -
  -.IX Header "NAME"
  -
  -.IX Header "VERSION"
  -
  -.IX Header "SYNOPSIS"
  -
  -.IX Header "DESCRIPTION"
  -
  -.IX Header "OPTIONS"
  -
  -.IX Item "\fB--help\fR"
  -
  -.IX Item "\fB--version\fR"
  -
  -.IX Item "\fB--all\fR"
  -
  -.IX Item "\fB--prefix\fR"
  -
  -.IX Item "\fB--exec-prefix\fR"
  -
  -.IX Item "\fB--bindir\fR"
  -
  -.IX Item "\fB--libdir\fR"
  -
  -.IX Item "\fB--includedir\fR"
  -
  -.IX Item "\fB--mandir\fR"
  -
  -.IX Item "\fB--datadir\fR"
  -
  -.IX Item "\fB--acdir\fR"
  -
  -.IX Item "\fB--cflags\fR"
  -
  -.IX Item "\fB--ldflags\fR"
  -
  -.IX Item "\fB--libs\fR"
  -
  -.IX Header "EXAMPLE"
  -
  -.IX Header "SEE ALSO"
  -
  -.IX Header "AUTHOR"
  -
  Index: ossp-pkg/str/str.3
  ============================================================
  $ cvs diff -u -r1.34 -r1.35 str.3
  --- ossp-pkg/str/str.3	2001/08/16 13:17:00	1.34
  +++ ossp-pkg/str/str.3	2001/08/16 13:22:21	1.35
  @@ -1,5 +1,5 @@
   .\" Automatically generated by Pod::Man version 1.15
  -.\" Thu Aug 16 15:15:59 2001
  +.\" Thu Aug 16 15:21:43 2001
   .\"
   .\" Standard preamble:
   .\" ======================================================================
  @@ -138,13 +138,13 @@
   .\" ======================================================================
   .\"
   .IX Title "str 3"
  -.TH str 3 "14-Jul-2000" "Str 0.9.5" "String Library"
  +.TH str 3 "16-Aug-2001" "Str 0.9.5" "String Library"
   .UC
   .SH "NAME"
   \&\fBStr\fR \- String Library
   .SH "VERSION"
   .IX Header "VERSION"
  -Str \s-10.9.5 (14-Jul-2000)\s0
  +Str \s-10.9.5 (16-Aug-2001)\s0
   .SH "SYNOPSIS"
   .IX Header "SYNOPSIS"
   \&\fBstr_len\fR,
  Index: ossp-pkg/str/str_version.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 str_version.c
  --- ossp-pkg/str/str_version.c	2000/07/14 15:24:16	1.11
  +++ ossp-pkg/str/str_version.c	2001/08/16 13:22:21	1.12
  @@ -34,12 +34,12 @@
   str_version_t str_version = {
       0x009205,
       "0.9.5",
  -    "0.9.5 (14-Jul-2000)",
  -    "This is Str, Version 0.9.5 (14-Jul-2000)",
  -    "Str 0.9.5 (14-Jul-2000)",
  +    "0.9.5 (16-Aug-2001)",
  +    "This is Str, Version 0.9.5 (16-Aug-2001)",
  +    "Str 0.9.5 (16-Aug-2001)",
       "Str/0.9.5",
  -    "@(#)Str 0.9.5 (14-Jul-2000)",
  -    "$Id: str_version.c,v 1.11 2000/07/14 15:24:16 rse Exp $"
  +    "@(#)Str 0.9.5 (16-Aug-2001)",
  +    "$Id: str_version.c,v 1.12 2001/08/16 13:22:21 rse Exp $"
   };
   
   #endif /* _STR_VERSION_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Thu Aug 16 15:24:10 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7GDO9M45738; Thu, 16 Aug 2001 15:24:09 +0200 (CEST)
Date: Thu, 16 Aug 2001 15:24:09 +0200 (CEST)
Message-Id: <200108161324.f7GDO9M45738@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str str-config.1 str.3
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   16-Aug-2001 15:24:09
  Branch: HEAD                             Handle: 2001081614240800

  Modified files:
    ossp-pkg/str            str-config.1 str.3

  Log:
    update generated files

  Summary:
    Revision    Changes     Path
    1.16        +1  -1      ossp-pkg/str/str-config.1
    1.36        +1  -1      ossp-pkg/str/str.3
  ____________________________________________________________________________

  Index: ossp-pkg/str/str-config.1
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 str-config.1
  --- ossp-pkg/str/str-config.1	2001/08/16 13:22:21	1.15
  +++ ossp-pkg/str/str-config.1	2001/08/16 13:24:08	1.16
  @@ -1,5 +1,5 @@
   .\" Automatically generated by Pod::Man version 1.15
  -.\" Thu Aug 16 15:21:44 2001
  +.\" Thu Aug 16 15:22:30 2001
   .\"
   .\" Standard preamble:
   .\" ======================================================================
  Index: ossp-pkg/str/str.3
  ============================================================
  $ cvs diff -u -r1.35 -r1.36 str.3
  --- ossp-pkg/str/str.3	2001/08/16 13:22:21	1.35
  +++ ossp-pkg/str/str.3	2001/08/16 13:24:08	1.36
  @@ -1,5 +1,5 @@
   .\" Automatically generated by Pod::Man version 1.15
  -.\" Thu Aug 16 15:21:43 2001
  +.\" Thu Aug 16 15:22:29 2001
   .\"
   .\" Standard preamble:
   .\" ======================================================================

From ossp-cvs-owner@ossp.org  Thu Aug 16 15:25:55 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7GDPsE45886; Thu, 16 Aug 2001 15:25:54 +0200 (CEST)
Date: Thu, 16 Aug 2001 15:25:54 +0200 (CEST)
Message-Id: <200108161325.f7GDPsE45886@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str THANKS
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   16-Aug-2001 15:25:54
  Branch: HEAD                             Handle: 2001081614255400

  Modified files:
    ossp-pkg/str            THANKS

  Log:
    Give proper credit to contributors

  Summary:
    Revision    Changes     Path
    1.7         +4  -0      ossp-pkg/str/THANKS
  ____________________________________________________________________________

  Index: ossp-pkg/str/THANKS
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 THANKS
  --- ossp-pkg/str/THANKS	2001/08/16 13:18:39	1.6
  +++ ossp-pkg/str/THANKS	2001/08/16 13:25:54	1.7
  @@ -13,8 +13,12 @@
     stuff, bugfixes, hints etc. (in alphabetical order):
   
     o Dean Gaudet              <dgaudet@arctic.org>
  +  o Ed Griffiths             <edgrif@sanger.ac.uk>
  +  o Joseph Heenan            <joseph@picsel.com>
     o Thomas Lotterer          <thomas.lotterer@cw.com>
  +  o Kai Poitschke            <kai.poitschke@computer.org>
     o Alfred Reibenschuh       <alfred.reibenschu@chello.at>
  +  o Lukas Schroeder          <lukas@edeal.de>
     o Peter Simons             <simons@cryp.to>
     o Fritz Zaucker            <zaucker@ee.ethz.ch>
   

From ossp-cvs-owner@ossp.org  Fri Aug 17 21:23:52 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7HJNpd77078; Fri, 17 Aug 2001 21:23:51 +0200 (CEST)
Date: Fri, 17 Aug 2001 21:23:51 +0200 (CEST)
Message-Id: <200108171923.f7HJNpd77078@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 epreuve.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   17-Aug-2001 21:23:51
  Branch: HEAD                             Handle: 2001081720235100

  Added files:
    ossp-pkg/l2             epreuve.c

  Log:
    File used for individual channel testing, currently using file handler object
    
    Submitted by: ms

  Summary:
    Revision    Changes     Path
    1.1         +59 -0      ossp-pkg/l2/epreuve.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/epreuve.c
  ============================================================
  $ cvs update -p -r1.1 epreuve.c
  #include "l2.h"
  #define SZ_LOGSTRING "String LogTest c'est deja la.\n"
  
  /*--------------------------------------------------------*/
  /* void throw(char *pszError)                             */
  /* Quick exception kludge                                 */
  /*--------------------------------------------------------*/
  void throw(char *pszError)
  {
      fprintf(stderr, pszError);
      exit(1);
  }
  
  /*--------------------------------------------------------*/
  /* int main(int argc, char **argv)                        */
  /* Main program code                                      */
  /*--------------------------------------------------------*/
  int main(int argc, char **argv)
  {
      int iRet                       = 0;
      l2_channel_t *pMyChannel       = NULL;
      l2_handler_t *g_pFileHandler   = &l2_handler_file;
  
      fprintf(stdout, "Trying file channel handler...\n");
  
      pMyChannel = l2_channel_create(g_pFileHandler);
      if (pMyChannel == NULL)
          throw("Channel create failed!\n");
  
      /* Parameters "path", "File path", "append", TRUE, "perm", 0xValue */
      iRet = l2_channel_configure(pMyChannel, "path",\
          "/u/ms/travail/l2/ding", "append", TRUE, "perm", 0x755);
      if (iRet != L2_OK)
          throw("Channel configure failed!\n");
  
      iRet = l2_channel_open(pMyChannel);
      if (iRet != L2_OK)
          throw("Channel open failed!\n");
  
      /* Need to subtract one to throw away null termination */
      iRet = l2_channel_write(pMyChannel, SZ_LOGSTRING, sizeof(SZ_LOGSTRING) - 1);
      if (iRet != L2_OK)
          throw("Channel write failed!\n");
  
      iRet = l2_channel_flush(pMyChannel);
      if (iRet != L2_OK)
          throw("Channel flush failed!\n");
  
      iRet = l2_channel_close(pMyChannel);
      if (iRet != L2_OK)
          throw("Channel close failed!\n");
  
      iRet = l2_channel_destroy(pMyChannel);
      if (iRet != L2_OK)
          throw("Channel destroy failed!\n");
  
      fprintf(stdout, "Success, exiting...\n");
      return 0;
  }

From ossp-cvs-owner@ossp.org  Mon Aug 20 14:12:55 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7KCCsj64004; Mon, 20 Aug 2001 14:12:54 +0200 (CEST)
Date: Mon, 20 Aug 2001 14:12:54 +0200 (CEST)
Message-Id: <200108201212.f7KCCsj64004@ossp.org>
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   OSSP Project Master
  Root:   /e/ossp/cvs                      Email:  ossp@ossp.org
  Module: CVSROOT                          Date:   20-Aug-2001 14:12:54
  Branch: HEAD                             Handle: 2001082013125300

  Modified files:
    CVSROOT                 modules

  Log:
    add lmtp2nntp

  Summary:
    Revision    Changes     Path
    1.27        +1  -0      CVSROOT/modules
  ____________________________________________________________________________

  Index: CVSROOT/modules
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 modules
  --- CVSROOT/modules	2001/07/30 08:58:46	1.26
  +++ CVSROOT/modules	2001/08/20 12:12:53	1.27
  @@ -75,5 +75,6 @@
   l2              ossp-pkg/l2
   srpc            ossp-pkg/srpc
   xds             ossp-pkg/srpc/libxds
  +lmtp2nntp       ossp-pkg/lmtp2nntp
   
   

From ossp-cvs-owner@ossp.org  Mon Aug 20 14:17:44 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7KCHh564858; Mon, 20 Aug 2001 14:17:43 +0200 (CEST)
Date: Mon, 20 Aug 2001 14:17:43 +0200 (CEST)
Message-Id: <200108201217.f7KCHh564858@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp .configure
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   20-Aug-2001 14:17:43
  Branch: HEAD                             Handle: 2001082013174200

  Modified files:
    ossp-pkg/lmtp2nntp      .configure

  Log:
    better developer stuff

  Summary:
    Revision    Changes     Path
    1.3         +6  -1      ossp-pkg/lmtp2nntp/.configure
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/.configure
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 .configure
  --- ossp-pkg/lmtp2nntp/.configure	2001/08/20 11:28:29	1.2
  +++ ossp-pkg/lmtp2nntp/.configure	2001/08/20 12:17:42	1.3
  @@ -1,4 +1,9 @@
   #!/bin/sh
  +if [ ! -f configure ]; then
  +    ./autogen.sh
  +fi
  +PATH=/cw/bin:$PATH
   ./configure \
      --prefix=/tmp/lmtp2nntp \
  -   --with-str=/cw
  +   --with-str=/cw \
  +   --enable-debug

From ossp-cvs-owner@ossp.org  Mon Aug 20 14:22:24 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7KCMOC65332; Mon, 20 Aug 2001 14:22:24 +0200 (CEST)
Date: Mon, 20 Aug 2001 14:22:24 +0200 (CEST)
Message-Id: <200108201222.f7KCMOC65332@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp Makefile.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   20-Aug-2001 14:22:24
  Branch: HEAD                             Handle: 2001082013222200

  Modified files:
    ossp-pkg/lmtp2nntp      Makefile.in

  Log:
    moved test stuff to subdir

  Summary:
    Revision    Changes     Path
    1.7         +3  -2      ossp-pkg/lmtp2nntp/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	2001/08/20 11:32:59	1.6
  +++ ossp-pkg/lmtp2nntp/Makefile.in	2001/08/20 12:22:22	1.7
  @@ -65,5 +65,6 @@
   	$(SHTOOL) tarball -o lmtp2nntp-$${V}.tar.gz -d lmtp2nntp-$${V} -u ossp -g ossp \
   	                  -e 'CVS,\.cvsignore,\.[ao],^\.,autogen.sh,*.tar.gz' -c 'gzip --best' .
   
  -test: lmtp2nntp
  -	./run.sh
  +check: lmtp2nntp
  +	@cd test && ./run.sh
  +

From ossp-cvs-owner@ossp.org  Mon Aug 20 14:23:02 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7KCN1G65401; Mon, 20 Aug 2001 14:23:01 +0200 (CEST)
Date: Mon, 20 Aug 2001 14:23:01 +0200 (CEST)
Message-Id: <200108201223.f7KCN1G65401@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp Makefile.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   20-Aug-2001 14:23:01
  Branch: HEAD                             Handle: 2001082013230000

  Modified files:
    ossp-pkg/lmtp2nntp      Makefile.in

  Log:
    do not distribute developer test suite

  Summary:
    Revision    Changes     Path
    1.8         +1  -1      ossp-pkg/lmtp2nntp/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	2001/08/20 12:22:22	1.7
  +++ ossp-pkg/lmtp2nntp/Makefile.in	2001/08/20 12:23:00	1.8
  @@ -63,7 +63,7 @@
   	@$(SHTOOL) fixperm -v .; \
   	V=`$(SHTOOL) version -lc -dshort version.c`; \
   	$(SHTOOL) tarball -o lmtp2nntp-$${V}.tar.gz -d lmtp2nntp-$${V} -u ossp -g ossp \
  -	                  -e 'CVS,\.cvsignore,\.[ao],^\.,autogen.sh,*.tar.gz' -c 'gzip --best' .
  +	                  -e 'CVS,\.cvsignore,\.[ao],^\.,autogen.sh,test,*.tar.gz' -c 'gzip --best' .
   
   check: lmtp2nntp
   	@cd test && ./run.sh

From ossp-cvs-owner@ossp.org  Mon Aug 20 14:57:41 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7KCvd071412; Mon, 20 Aug 2001 14:57:39 +0200 (CEST)
Date: Mon, 20 Aug 2001 14:57:39 +0200 (CEST)
Message-Id: <200108201257.f7KCvd071412@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp INSTALL
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   20-Aug-2001 14:57:39
  Branch: HEAD                             Handle: 2001082013573800

  Added files:
    ossp-pkg/lmtp2nntp      INSTALL

  Log:
    Add first cut for INSTALL document with Sendmail info

  Summary:
    Revision    Changes     Path
    1.1         +39 -0      ossp-pkg/lmtp2nntp/INSTALL
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/INSTALL
  ============================================================
  $ cvs update -p -r1.1 INSTALL
     
  Sendmail Integration
  ====================
  
  Create an cf/mailer/lmtp2nntp.m4 files with the following contents:
  ______________________________________________________________________
  
  PUSHDIVERT(-1)
  
  _DEFIFNOT(`LMTP2NNTP_MAILER_PATH',         `/usr/local/bin/lmtp2nntp')
  _DEFIFNOT(`LMTP2NNTP_MAILER_FLAGS',        `mDFMuXz')
  _DEFIFNOT(`LMTP2NNTP_MAILER_MAX',          `800000')
  _DEFIFNOT(`LMTP2NNTP_MAILER_NNTPSERVER',   `news')
  _DEFIFNOT(`LMTP2NNTP_MAILER_DELIVERYMODE', `post')
  _DEFIFNOT(`LMTP2NNTP_MAILER_GROUPMODE',    `envelope')
  _DEFIFNOT(`LMTP2NNTP_MAILER_ARGS',         `')
  _DEFIFNOT(`LMTP2NNTP_MAILER_NEWSGROUPS',   `\*')
  
  POPDIVERT
  
  #########################################
  ###   LMTP2NNTP Mailer specification  ###
  #########################################
  
  Mlmtp2nntp, P=LMTP2NNTP_MAILER_PATH, F=LMTP2NNTP_MAILER_FLAGS,
              S=EnvFromSMTP/HdrFromSMTP, R=MasqSMTP, E=\r\n,
              L=990, T=DNS/RFC822/SMTP, M=LMTP2NNTP_MAILER_MAX,
              A=lmtp2nntp -d LMTP2NNTP_MAILER_DELIVERYMODE dnl
                          -g LMTP2NNTP_MAILER_GROUPMODE dnl
                          -h LMTP2NNTP_MAILER_NNTPSERVER dnl
                          LMTP2NNTP_MAILER_NEWSGROUPS
  ______________________________________________________________________
  
  Add to your sendmail.m4 (or sendmail.mc) the following entry:
  
  dnl #  Mailer: LMTP2NNTP (mail to news gateway)
  dnl define(`LMTP2NNTP_MAILER_PATH', `/path/to/your/lmtp2nntp')
  dnl MAILER(lmtp2nntp)
  

From ossp-cvs-owner@ossp.org  Mon Aug 20 15:02:37 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7KD2aU72467; Mon, 20 Aug 2001 15:02:36 +0200 (CEST)
Date: Mon, 20 Aug 2001 15:02:36 +0200 (CEST)
Message-Id: <200108201302.f7KD2aU72467@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   20-Aug-2001 15:02:36
  Branch: HEAD                             Handle: 2001082014023500

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO

  Log:
    done ;)

  Summary:
    Revision    Changes     Path
    1.12        +0  -2      ossp-pkg/lmtp2nntp/00TODO
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	2001/08/20 10:02:44	1.11
  +++ ossp-pkg/lmtp2nntp/00TODO	2001/08/20 13:02:35	1.12
  @@ -1,8 +1,6 @@
   
  -openpkg 
   test auf mail.de.cw.net
   whatsup draufleiten
  -autoconf
   ----------
   dmalloc
   

From ossp-cvs-owner@ossp.org  Mon Aug 20 15:08:23 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7KD8Mr73151; Mon, 20 Aug 2001 15:08:22 +0200 (CEST)
Date: Mon, 20 Aug 2001 15:08:22 +0200 (CEST)
Message-Id: <200108201308.f7KD8Mr73151@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/petidomo Makefile.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   20-Aug-2001 15:08:22
  Branch: HEAD                             Handle: 2001082014082100

  Modified files:
    ossp-pkg/petidomo       Makefile.in

  Log:
    Added docs to the list of subdirectories that need to be handled in
    the *clean targets.

  Summary:
    Revision    Changes     Path
    1.46        +1  -1      ossp-pkg/petidomo/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/petidomo/Makefile.in
  ============================================================
  $ cvs diff -u -r1.45 -r1.46 Makefile.in
  --- ossp-pkg/petidomo/Makefile.in	2001/01/21 12:20:41	1.45
  +++ ossp-pkg/petidomo/Makefile.in	2001/08/20 13:08:21	1.46
  @@ -106,7 +106,7 @@
   	$(SHTOOL) install -c -m 644 /dev/null $(DESTDIR)$(localstatedir)/lists/testlist/list
   
   clean distclean realclean::
  -	@for subdir in lib*; do \
  +	@for subdir in lib* docs; do \
   	echo "===> $$subdir"; \
   	(cd $$subdir && $(MAKE) $(FLAGS_TO_PASS) $@); \
   	echo "<=== $$subdir"; \

From ossp-cvs-owner@ossp.org  Mon Aug 20 15:22:35 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7KDMYF75510; Mon, 20 Aug 2001 15:22:34 +0200 (CEST)
Date: Mon, 20 Aug 2001 15:22:34 +0200 (CEST)
Message-Id: <200108201322.f7KDMYF75510@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp INSTALL
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   20-Aug-2001 15:22:34
  Branch: HEAD                             Handle: 2001082014223300

  Modified files:
    ossp-pkg/lmtp2nntp      INSTALL

  Log:
    More sendmail config required

  Summary:
    Revision    Changes     Path
    1.2         +20 -3      ossp-pkg/lmtp2nntp/INSTALL
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/INSTALL
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 INSTALL
  --- ossp-pkg/lmtp2nntp/INSTALL	2001/08/20 12:57:38	1.1
  +++ ossp-pkg/lmtp2nntp/INSTALL	2001/08/20 13:22:33	1.2
  @@ -10,7 +10,6 @@
   _DEFIFNOT(`LMTP2NNTP_MAILER_PATH',         `/usr/local/bin/lmtp2nntp')
   _DEFIFNOT(`LMTP2NNTP_MAILER_FLAGS',        `mDFMuXz')
   _DEFIFNOT(`LMTP2NNTP_MAILER_MAX',          `800000')
  -_DEFIFNOT(`LMTP2NNTP_MAILER_NNTPSERVER',   `news')
   _DEFIFNOT(`LMTP2NNTP_MAILER_DELIVERYMODE', `post')
   _DEFIFNOT(`LMTP2NNTP_MAILER_GROUPMODE',    `envelope')
   _DEFIFNOT(`LMTP2NNTP_MAILER_ARGS',         `')
  @@ -26,14 +25,32 @@
               S=EnvFromSMTP/HdrFromSMTP, R=MasqSMTP, E=\r\n,
               L=990, T=DNS/RFC822/SMTP, M=LMTP2NNTP_MAILER_MAX,
               A=lmtp2nntp -d LMTP2NNTP_MAILER_DELIVERYMODE dnl
  -                        -g LMTP2NNTP_MAILER_GROUPMODE dnl
  -                        -h LMTP2NNTP_MAILER_NNTPSERVER dnl
  +                        -h $h -g LMTP2NNTP_MAILER_GROUPMODE dnl
                           LMTP2NNTP_MAILER_NEWSGROUPS
   ______________________________________________________________________
   
   Add to your sendmail.m4 (or sendmail.mc) the following entry:
   
  +______________________________________________________________________
  +
   dnl #  Mailer: LMTP2NNTP (mail to news gateway)
   dnl define(`LMTP2NNTP_MAILER_PATH', `/path/to/your/lmtp2nntp')
   dnl MAILER(lmtp2nntp)
  +______________________________________________________________________
  +
  +
  +Add to your virtualusertable:
  +______________________________________________________________________
  +
  +posting@dev12.dev.de.cw.net    posting@news-posting
  +posting+*@dev12.dev.de.cw.net  %2@news-posting
  +@news.dev.de.cw.net            %1@news-posting
  +______________________________________________________________________
  +
  +
  +Add to your mailertable:
  +______________________________________________________________________
  +
  +news-posting    lmtp2nntp:news.de.cw.net
  +______________________________________________________________________
   

From ossp-cvs-owner@ossp.org  Mon Aug 20 16:11:32 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7KEBVQ83366; Mon, 20 Aug 2001 16:11:31 +0200 (CEST)
Date: Mon, 20 Aug 2001 16:11:31 +0200 (CEST)
Message-Id: <200108201411.f7KEBVQ83366@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO INSTALL lmtp2nntp.c ossp-pkg/lmt...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   20-Aug-2001 16:11:31
  Branch: HEAD                             Handle: 2001082015113001

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO INSTALL lmtp2nntp.c
    ossp-pkg/lmtp2nntp/test run.sh

  Log:
    fixed GROUPMODE_ENVELOPE foo+bar@quux.com notation prefix stripping where sendmail passes us already rewritten <bar@quux.com> as argument to "RCPT To:" command

  Summary:
    Revision    Changes     Path
    1.13        +1  -0      ossp-pkg/lmtp2nntp/00TODO
    1.3         +6  -3      ossp-pkg/lmtp2nntp/INSTALL
    1.20        +2  -2      ossp-pkg/lmtp2nntp/lmtp2nntp.c
    1.8         +11 -8      ossp-pkg/lmtp2nntp/test/run.sh
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	2001/08/20 13:02:35	1.12
  +++ ossp-pkg/lmtp2nntp/00TODO	2001/08/20 14:11:30	1.13
  @@ -10,6 +10,7 @@
   RFC1891 ENVID
   RFC1891 6.2
   FALSE, TRUE vs. == FALSE, == TRUE, != FALSE, != TRUE
  +-h needs to understand multiple hosts as commaseparated list
   
       **** LMTP REDESIGN ****
   
  Index: ossp-pkg/lmtp2nntp/INSTALL
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 INSTALL
  --- ossp-pkg/lmtp2nntp/INSTALL	2001/08/20 13:22:33	1.2
  +++ ossp-pkg/lmtp2nntp/INSTALL	2001/08/20 14:11:30	1.3
  @@ -24,9 +24,12 @@
   Mlmtp2nntp, P=LMTP2NNTP_MAILER_PATH, F=LMTP2NNTP_MAILER_FLAGS,
               S=EnvFromSMTP/HdrFromSMTP, R=MasqSMTP, E=\r\n,
               L=990, T=DNS/RFC822/SMTP, M=LMTP2NNTP_MAILER_MAX,
  -            A=lmtp2nntp -d LMTP2NNTP_MAILER_DELIVERYMODE dnl
  -                        -h $h -g LMTP2NNTP_MAILER_GROUPMODE dnl
  -                        LMTP2NNTP_MAILER_NEWSGROUPS
  +            A=lmtp2nntp LMTP2NNTP_MAILER_ARGS dnl
  +                        -d LMTP2NNTP_MAILER_DELIVERYMODE dnl
  +                        -h $h dnl
  +                        -g LMTP2NNTP_MAILER_GROUPMODE dnl
  +                        LMTP2NNTP_MAILER_GROUPS
  +
   ______________________________________________________________________
   
   Add to your sendmail.m4 (or sendmail.mc) the following entry:
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/08/20 10:33:22	1.19
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/08/20 14:11:30	1.20
  @@ -156,7 +156,7 @@
       initsession(&ctx->session);
       ctx->msg = NULL;
   
  -#if 0
  +#if 1
       {
           char buf[1000];
           int bufused = 0;
  @@ -648,7 +648,7 @@
   
       if (ctx->option_groupmode == GROUPMODE_ENVELOPE) {
           //fprintf(stderr, "DEBUG: before transform cp=***%s***\n", cp);
  -        if (!str_parse(cp, "m/^.+?\\+(.+)?@.+$/i", &group)) { //FIXME >=2 * @
  +        if (!str_parse(cp, "m/^<(.+)?@[^@]+>$/i", &group)) {
               res.statuscode = "550";
               res.dsncode    = "5.1.1";
               res.statusmsg  = "Recipient did not transform into Group.";
  Index: ossp-pkg/lmtp2nntp/test/run.sh
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 run.sh
  --- ossp-pkg/lmtp2nntp/test/run.sh	2001/08/20 10:33:22	1.7
  +++ ossp-pkg/lmtp2nntp/test/run.sh	2001/08/20 14:11:31	1.8
  @@ -12,11 +12,14 @@
       h="H"
       z="Z"
       e="E"
  -    if [ -e /tmp/tracing ]
  -    then
  +    if [ -e /tmp/tracing ]; then
           ssh -t -x root@localhost exec rm -f /tmp/tracing
       fi
       touch /tmp/tracing
  +    if [ -e /tmp/testmessage ]; then
  +        ssh -t -x root@localhost exec rm -f /tmp/testmessage
  +    fi
  +    touch /tmp/testmessage
   }
   
   post1000 ()
  @@ -40,18 +43,18 @@
   {
       newmsg lmtp
       cat /tmp/testmessage \
  -     | ./lmtp2nntp -t /tmp/tracing -d $1 -g $2 -h dev16 cw.de.sd.apps.dev.test
  +     | ../lmtp2nntp -t /tmp/tracing -d $1 -g $2 -h dev16 cw.de.sd.apps.dev.test
       cat /tmp/testmessage \
  -     | ./lmtp2nntp -t /tmp/tracing -d $1 -g $2 -h dev16 cw.de.sd.apps.dev.test
  +     | ../lmtp2nntp -t /tmp/tracing -d $1 -g $2 -h dev16 cw.de.sd.apps.dev.test
   }
   
   sendmaildup()
   {
       newmsg sendmail
       cat /tmp/testmessage \
  -     | sendmail -i posting+$h$z$e@dev12.dev.de.cw.net
  +     | sendmail -i posting+cw.de.sd.apps.dev.test@dev12.dev.de.cw.net
       cat /tmp/testmessage \
  -     | sendmail -i posting+$h$z$e@dev12.dev.de.cw.net
  +     | sendmail -i posting+cw.de.sd.apps.dev.test@dev12.dev.de.cw.net
   }
   
   newmsg()
  @@ -88,10 +91,10 @@
   
   #ok newmsg sendmail; ls -l /tmp/testmessage && cat /tmp/testmessage
   #ok lmtp feed arg
  -lmtp post arg
  +# lmtp post arg
   #ok lmtp feed envelope
   #ok lmtp post envelope
  -#sendmaildup
  +sendmaildup
   #post1000
   
   after

From ossp-cvs-owner@ossp.org  Mon Aug 20 16:36:31 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7KEaUn86771; Mon, 20 Aug 2001 16:36:30 +0200 (CEST)
Date: Mon, 20 Aug 2001 16:36:30 +0200 (CEST)
Message-Id: <200108201436.f7KEaUn86771@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp INSTALL
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   20-Aug-2001 16:36:29
  Branch: HEAD                             Handle: 2001082015362900

  Modified files:
    ossp-pkg/lmtp2nntp      INSTALL

  Log:
    typo

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/lmtp2nntp/INSTALL
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/INSTALL
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 INSTALL
  --- ossp-pkg/lmtp2nntp/INSTALL	2001/08/20 14:11:30	1.3
  +++ ossp-pkg/lmtp2nntp/INSTALL	2001/08/20 14:36:29	1.4
  @@ -13,7 +13,7 @@
   _DEFIFNOT(`LMTP2NNTP_MAILER_DELIVERYMODE', `post')
   _DEFIFNOT(`LMTP2NNTP_MAILER_GROUPMODE',    `envelope')
   _DEFIFNOT(`LMTP2NNTP_MAILER_ARGS',         `')
  -_DEFIFNOT(`LMTP2NNTP_MAILER_NEWSGROUPS',   `\*')
  +_DEFIFNOT(`LMTP2NNTP_MAILER_GROUPS',       `\*')
   
   POPDIVERT
   

From ossp-cvs-owner@ossp.org  Mon Aug 20 16:41:58 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7KEfvk87526; Mon, 20 Aug 2001 16:41:57 +0200 (CEST)
Date: Mon, 20 Aug 2001 16:41:57 +0200 (CEST)
Message-Id: <200108201441.f7KEfvk87526@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp version.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   20-Aug-2001 16:41:56
  Branch: HEAD                             Handle: 2001082015415600

  Modified files:
    ossp-pkg/lmtp2nntp      version.c

  Log:
    bump version for release

  Summary:
    Revision    Changes     Path
    1.2         +9  -9      ossp-pkg/lmtp2nntp/version.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/version.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 version.c
  --- ossp-pkg/lmtp2nntp/version.c	2001/08/20 10:33:23	1.1
  +++ ossp-pkg/lmtp2nntp/version.c	2001/08/20 14:41:56	1.2
  @@ -8,7 +8,7 @@
   #ifndef _VERSION_C_
   #define _VERSION_C_
   
  -#define LMTP2NNTP_VERSION 0x009200
  +#define LMTP2NNTP_VERSION 0x009201
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _VERSION_C_AS_HEADER_
   
   lmtp2nntp_version_t lmtp2nntp_version = {
  -    0x009200,
  -    "0.9.0",
  -    "0.9.0 (20-Aug-2001)",
  -    "This is lmtp2nntp, Version 0.9.0 (20-Aug-2001)",
  -    "lmtp2nntp 0.9.0 (20-Aug-2001)",
  -    "lmtp2nntp/0.9.0",
  -    "@(#)lmtp2nntp 0.9.0 (20-Aug-2001)",
  -    "$Id: version.c,v 1.1 2001/08/20 10:33:23 rse Exp $"
  +    0x009201,
  +    "0.9.1",
  +    "0.9.1 (20-Aug-2001)",
  +    "This is lmtp2nntp, Version 0.9.1 (20-Aug-2001)",
  +    "lmtp2nntp 0.9.1 (20-Aug-2001)",
  +    "lmtp2nntp/0.9.1",
  +    "@(#)lmtp2nntp 0.9.1 (20-Aug-2001)",
  +    "$Id: version.c,v 1.2 2001/08/20 14:41:56 thl Exp $"
   };
   
   #endif /* _VERSION_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Mon Aug 20 19:06:55 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7KH6rs25587; Mon, 20 Aug 2001 19:06:53 +0200 (CEST)
Date: Mon, 20 Aug 2001 19:06:53 +0200 (CEST)
Message-Id: <200108201706.f7KH6rs25587@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_objects.fig
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   20-Aug-2001 19:06:53
  Branch: HEAD                             Handle: 2001082018065300

  Added files:
    ossp-pkg/l2             l2_objects.fig

  Log:
    Graphical representation of stream and channel objects in xfig format.

  Summary:
    Revision    Changes     Path
    1.1         +211 -0     ossp-pkg/l2/l2_objects.fig
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_objects.fig
  ============================================================
  $ cvs update -p -r1.1 l2_objects.fig
  #FIG 3.2
  Landscape
  Center
  Inches
  A4      
  88.00
  Single
  -2
  1200 2
  0 32 #8e8e8e
  0 33 #868286
  0 34 #e7e3e7
  0 35 #808080
  0 36 #c0c0c0
  0 37 #e0e0e0
  0 38 #8e8f8e
  0 39 #444444
  0 40 #868686
  0 41 #c7c7c7
  0 42 #e7e7e7
  0 43 #f7f7f7
  0 44 #9e9e9e
  0 45 #717571
  0 46 #414541
  0 47 #c7c3c7
  0 48 #414141
  0 49 #c7c3c7
  0 50 #effbff
  0 51 #aaaaaa
  0 52 #555555
  0 53 #666666
  0 54 #cccccc
  0 55 #fff2d3
  0 56 #ffe4ae
  0 57 #ffd279
  0 58 #cfcfcf
  0 59 #999999
  0 60 #b2b2b2
  0 61 #404040
  0 62 #000079
  0 63 #ff8200
  0 64 #007d00
  0 65 #0000be
  0 66 #909090
  0 67 #e6e4ce
  0 68 #9b9b9b
  0 69 #ce9100
  0 70 #f762aa
  0 71 #7070ff
  0 72 #5f5f5f
  0 73 #c6b797
  0 74 #eff8ff
  0 75 #dccba6
  0 76 #bebebe
  0 77 #515151
  0 78 #000049
  0 79 #797979
  0 80 #303430
  0 81 #c7b696
  0 82 #e2e2ee
  0 83 #94949a
  0 84 #dbdbdb
  0 85 #a1a1b7
  0 86 #9c0000
  0 87 #ededed
  0 88 #86acff
  6 6750 5100 9225 6975
  2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
  	 6777 5450 9177 5450
  2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
  	 6777 5976 9177 5976
  2 2 0 1 0 7 101 0 20 4.000 0 0 7 0 0 5
  	 6777 5151 9177 5151 9177 6950 6777 6950 6777 5151
  4 0 0 100 0 16 12 0.0000 4 135 705 6851 5375 Channel\001
  4 0 0 100 0 16 12 0.0000 4 165 1725 6851 6200 + l2_channel_create\001
  4 0 0 100 0 16 12 0.0000 4 180 1980 6851 6437 + l2_channel_configure\001
  4 0 0 100 0 16 12 0.0000 4 180 1620 6851 6673 + l2_channel_open\001
  4 0 0 100 0 16 12 0.0000 4 165 825 6851 5676 channel_t\001
  -6
  6 10350 5100 12825 6975
  2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
  	 10377 5450 12777 5450
  2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
  	 10377 5976 12777 5976
  2 2 0 1 0 7 101 0 20 4.000 0 0 7 0 0 5
  	 10377 5151 12777 5151 12777 6950 10377 6950 10377 5151
  4 0 0 100 0 16 12 0.0000 4 135 570 10451 5375 Stream\001
  4 0 0 100 0 16 12 0.0000 4 165 1590 10451 6200 + l2_stream_create\001
  4 0 0 100 0 16 12 0.0000 4 165 1740 10451 6437 + l2_stream_channel\001
  4 0 0 100 0 16 12 0.0000 4 165 1770 10451 6673 + l2_stream_formatter\001
  4 0 0 100 0 16 12 0.0000 4 165 690 10451 5676 stream_t\001
  -6
  6 5100 8025 7575 9900
  2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
  	 5127 8375 7527 8375
  2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
  	 5127 8901 7527 8901
  2 2 0 1 0 7 101 0 20 4.000 0 0 7 0 0 5
  	 5127 8076 7527 8076 7527 9875 5127 9875 5127 8076
  4 0 0 100 0 16 12 0.0000 4 135 420 5201 8300 Filter\001
  4 0 0 100 0 16 12 0.0000 4 165 1590 5201 9125 + l2_channel_write\001
  4 0 0 100 0 16 12 0.0000 4 165 1590 5201 9362 + l2_channel_flush\001
  4 0 0 100 0 16 12 0.0000 4 165 1650 5201 9598 + l2_channel_close\001
  4 0 0 100 0 16 12 0.0000 4 165 825 5201 8601 channel_t\001
  -6
  6 8475 8025 10950 9900
  2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
  	 8502 8375 10902 8375
  2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
  	 8502 8901 10902 8901
  2 2 0 1 0 7 101 0 20 4.000 0 0 7 0 0 5
  	 8502 8076 10902 8076 10902 9875 8502 9875 8502 8076
  4 0 0 100 0 16 12 0.0000 4 180 555 8576 8300 Output\001
  4 0 0 100 0 16 12 0.0000 4 165 1650 8576 9125 + l2_channel_close\001
  4 0 0 100 0 16 12 0.0000 4 180 1815 8576 9362 + l2_channel_destroy\001
  4 0 0 100 0 16 12 0.0000 4 165 1635 8576 9598 + l2_channel_stack\001
  4 0 0 100 0 16 12 0.0000 4 165 825 8576 8601 channel_t\001
  -6
  2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
  	 0 0 12450 0 12450 2400 0 2400 0 0
  2 2 0 1 0 7 50 0 0 0.000 0 0 -1 0 0 5
  	 0 0 12450 0 12450 600 0 600 0 0
  2 1 0 6 0 7 50 0 0 0.000 0 0 -1 0 0 2
  	 1050 2400 1050 3000
  2 1 0 6 0 7 50 0 0 0.000 0 0 -1 0 0 2
  	 6300 2400 6300 3000
  2 1 0 6 0 7 50 0 0 0.000 0 0 -1 0 0 2
  	 8850 2400 8850 3000
  2 1 0 6 0 7 50 0 0 0.000 0 0 -1 0 0 2
  	 11325 2400 11325 3000
  2 2 0 1 0 7 50 0 0 0.000 0 0 -1 0 0 5
  	 0 3000 2100 3000 2100 3450 0 3450 0 3000
  2 2 0 1 0 7 50 0 0 0.000 0 0 -1 0 0 5
  	 2625 3000 4725 3000 4725 3450 2625 3450 2625 3000
  2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
  	 2625 3000 4725 3000 4725 4800 2625 4800 2625 3000
  2 1 0 6 0 7 50 0 0 0.000 0 0 -1 0 0 2
  	 3675 2400 3675 3000
  2 2 0 1 0 7 50 0 0 0.000 0 0 -1 0 0 5
  	 5250 3000 7350 3000 7350 3450 5250 3450 5250 3000
  2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
  	 5250 3000 7350 3000 7350 4800 5250 4800 5250 3000
  2 2 0 1 0 7 50 0 0 0.000 0 0 -1 0 0 5
  	 7800 3000 9900 3000 9900 3450 7800 3450 7800 3000
  2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
  	 7800 3000 9900 3000 9900 4800 7800 4800 7800 3000
  2 2 0 1 0 7 50 0 0 0.000 0 0 -1 0 0 5
  	 10350 3000 12450 3000 12450 3450 10350 3450 10350 3000
  2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
  	 10350 3000 12450 3000 12450 4800 10350 4800 10350 3000
  2 1 0 2 0 7 50 0 0 0.000 0 0 -1 1 0 2
  	1 1 2.00 120.00 240.00
  	 1800 4800 1800 5400
  2 1 0 2 0 7 50 0 0 0.000 0 0 -1 1 0 2
  	1 1 2.00 120.00 240.00
  	 4425 4800 4425 5400
  2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
  	 0 3000 2100 3000 2100 4800 0 4800 0 3000
  2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
  	 0 5400 2100 5400 2100 7200 0 7200 0 5400
  2 2 0 1 0 7 50 0 0 0.000 0 0 -1 0 0 5
  	 0 5400 2100 5400 2100 5850 0 5850 0 5400
  2 2 0 1 0 7 50 0 0 0.000 0 0 -1 0 0 5
  	 2625 5400 4725 5400 4725 5850 2625 5850 2625 5400
  2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
  	 2625 5400 4725 5400 4725 7200 2625 7200 2625 5400
  2 1 0 2 0 7 50 0 0 0.000 0 0 -1 1 0 2
  	1 1 2.00 120.00 240.00
  	 1800 7200 1800 7800
  2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
  	 0 7800 2100 7800 2100 9600 0 9600 0 7800
  2 2 0 1 0 7 50 0 0 0.000 0 0 -1 0 0 5
  	 0 7800 2100 7800 2100 8250 0 8250 0 7800
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
  	1 1 1.00 60.00 120.00
  	 6300 8025 6300 7500 7950 7500 7950 6975
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
  	1 1 1.00 60.00 120.00
  	 9675 8025 9675 7500 7950 7500 7950 6975
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
  	 9225 6150 10350 6150
  4 0 0 50 0 0 16 0.0000 4 165 825 5925 2250 ERROR\001
  4 0 0 50 0 0 16 0.0000 4 165 1155 8250 2250 MESSAGE\001
  4 0 0 50 0 0 16 0.0000 4 165 1125 10800 2250 CRITICAL\001
  4 0 0 50 0 0 16 0.0000 4 165 855 3300 2250 DEBUG\001
  4 0 0 50 0 0 16 0.0000 4 165 570 825 2250 INFO\001
  4 0 0 50 0 0 14 0.0000 4 150 630 675 3975 <filter>\001
  4 0 0 50 0 0 14 0.0000 4 150 630 3375 3975 <filter>\001
  4 0 0 50 0 0 30 0.0000 4 405 1020 3150 4350 prefix\001
  4 0 0 50 0 0 30 0.0000 4 300 795 600 4350 filter\001
  4 0 0 50 0 0 14 0.0000 4 180 780 5925 3975 <output>\001
  4 0 0 50 0 0 30 0.0000 4 405 720 5925 4350 pipe\001
  4 0 0 50 0 0 14 0.0000 4 180 780 8475 3975 <output>\001
  4 0 0 50 0 0 30 0.0000 4 405 1080 8325 4350 syslog\001
  4 0 0 50 0 0 14 0.0000 4 180 780 11025 3975 <output>\001
  4 0 0 50 0 0 24 0.0000 4 330 1905 10425 4350 filedescriptor\001
  4 0 0 50 0 0 12 0.0000 4 180 465 6825 4725 pNext\001
  4 0 0 50 0 0 12 0.0000 4 180 465 9375 4725 pNext\001
  4 0 0 50 0 0 12 0.0000 4 180 465 11925 4725 pNext\001
  4 0 0 50 0 0 12 0.0000 4 180 465 1575 4725 pNext\001
  4 0 0 50 0 0 12 0.0000 4 180 465 4200 4725 pNext\001
  4 0 0 50 0 0 14 0.0000 4 180 780 3300 6375 <output>\001
  4 0 0 50 0 0 30 0.0000 4 300 1110 3150 6750 socket\001
  4 0 0 50 0 0 12 0.0000 4 180 465 4200 7125 pNext\001
  4 0 0 50 0 0 12 0.0000 4 180 465 1575 7125 pNext\001
  4 0 0 50 0 0 30 0.0000 4 300 1035 525 6750 buffer\001
  4 0 0 50 0 0 14 0.0000 4 150 630 750 6375 <filter>\001
  4 0 0 50 0 0 14 0.0000 4 180 780 600 8775 <output>\001
  4 0 0 50 0 0 30 0.0000 4 300 525 675 9150 file\001
  4 0 0 50 0 0 60 0.0000 4 510 2400 5025 1725 stream\001
  4 0 0 50 0 0 12 0.0000 4 180 465 1575 9525 pNext\001

From ossp-cvs-owner@ossp.org  Mon Aug 20 19:17:18 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7KHHHK27191; Mon, 20 Aug 2001 19:17:17 +0200 (CEST)
Date: Mon, 20 Aug 2001 19:17:17 +0200 (CEST)
Message-Id: <200108201717.f7KHHHK27191@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_epreuve.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   20-Aug-2001 19:17:17
  Branch: HEAD                             Handle: 2001082018171600

  Added files:
    ossp-pkg/l2             l2_epreuve.c

  Log:
    Test file for individual channel testing

  Summary:
    Revision    Changes     Path
    1.1         +95 -0      ossp-pkg/l2/l2_epreuve.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_epreuve.c
  ============================================================
  $ cvs update -p -r1.1 l2_epreuve.c
  /*
  **  L2 - OSSP Logging Library
  **  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP L2, a flexible logging library which
  **  can be found at http://www.ossp.org/pkg/l2/. 
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **  
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  l2_epreuve.c: channel-level test code
  **
  */
      
  #include "l2.h"
  #define SZ_LOGSTRING "String LogTest c'est deja la.\n"
  
  /*--------------------------------------------------------*/
  /* void throwup(char *pszError)                           */
  /* Quick exception kludge                                 */
  /*--------------------------------------------------------*/
  void throwup(char *pszError)
  {
      fprintf(stderr, pszError);
      exit(1);
  }
  
  /*--------------------------------------------------------*/
  /* int main(int argc, char *argv[])                       */
  /* Main program code                                      */
  /*--------------------------------------------------------*/
  int main(int argc, char *argv[])
  {
      int iRet                       = 0;
      l2_channel_t *pMyChannel       = NULL;
      l2_handler_t *g_pFileHandler   = &l2_handler_file;
  
      if (argc < 2)
      {
          fprintf(stdout, "Usage: %s filepath\n", *argv);
          exit(1);
      }
  
      fprintf(stdout, "Trying file channel handler...\n");
  
      pMyChannel = l2_channel_create(g_pFileHandler);
      if (pMyChannel == NULL)
          throwup("Channel create failed!\n");
  
      /* Params "path", <File path>, "append", <TRUE/FALSE>, "perm", <0xValue>, */
      iRet = l2_channel_configure(pMyChannel, "path", argv[1],\
          "append", TRUE, "perm", 0x755);
      if (iRet != L2_OK)
          throwup("Channel configure failed!\n");
  
      iRet = l2_channel_open(pMyChannel);
      if (iRet != L2_OK)
          throwup("Channel open failed!\n");
  
      /* Need to subtract one to throw away null termination */
      iRet = l2_channel_write(pMyChannel, SZ_LOGSTRING, sizeof(SZ_LOGSTRING) - 1);
      if (iRet != L2_OK)
          throwup("Channel write failed!\n");
  
      iRet = l2_channel_flush(pMyChannel);
      if (iRet != L2_OK)
          throwup("Channel flush failed!\n");
  
      iRet = l2_channel_close(pMyChannel);
      if (iRet != L2_OK)
          throwup("Channel close failed!\n");
  
      iRet = l2_channel_destroy(pMyChannel);
      if (iRet != L2_OK)
          throwup("Channel destroy failed!\n");
  
      fprintf(stdout, "Success, exiting...\n");
      return 0;
  }

From ossp-cvs-owner@ossp.org  Mon Aug 20 19:19:46 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7KHJjv27742; Mon, 20 Aug 2001 19:19:45 +0200 (CEST)
Date: Mon, 20 Aug 2001 19:19:45 +0200 (CEST)
Message-Id: <200108201719.f7KHJjv27742@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 epreuve.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   20-Aug-2001 19:19:45
  Branch: HEAD                             Handle: 1970010101000000

  Removed files:
    ossp-pkg/l2             epreuve.c

  Log:
    The file 'epreuve.c' is now called 'l2_epreuve.c'.

  Summary:
    Revision    Changes     Path
    NONE        +0  -59     ossp-pkg/l2/epreuve.c
  ____________________________________________________________________________

  

From ossp-cvs-owner@ossp.org  Tue Aug 21 09:40:43 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7L7ef043258; Tue, 21 Aug 2001 09:40:41 +0200 (CEST)
Date: Tue, 21 Aug 2001 09:40:41 +0200 (CEST)
Message-Id: <200108210740.f7L7ef043258@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp.c lmtp2nntp.c msg.c nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   21-Aug-2001 09:40:41
  Branch: HEAD                             Handle: 2001082108404100

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp.c lmtp2nntp.c msg.c nntp.c

  Log:
    replaced c++ style // comments with c style /* */ comments

  Summary:
    Revision    Changes     Path
    1.12        +1  -1      ossp-pkg/lmtp2nntp/lmtp.c
    1.21        +27 -27     ossp-pkg/lmtp2nntp/lmtp2nntp.c
    1.6         +12 -12     ossp-pkg/lmtp2nntp/msg.c
    1.9         +11 -11     ossp-pkg/lmtp2nntp/nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 lmtp.c
  --- ossp-pkg/lmtp2nntp/lmtp.c	2001/08/16 15:00:50	1.11
  +++ ossp-pkg/lmtp2nntp/lmtp.c	2001/08/21 07:40:41	1.12
  @@ -142,7 +142,7 @@
   lmtp_rc_t lmtp_readline(lmtp_t *lmtp, char *buf, size_t buflen)
   {
       /* read a line (characters until NL) from input stream */
  -    //FIXME RFC0821 4.2. SMTP REPLIES "Only the EXPN and HELP commands are expected to result in multiline replies in normal circumstances, however multiline replies are allowed for any command."
  +    /*FIXME RFC0821 4.2. SMTP REPLIES "Only the EXPN and HELP commands are expected to result in multiline replies in normal circumstances, however multiline replies are allowed for any command." */
       size_t n;
       char c;
       lmtp_readline_t *rl = &lmtp->rl;
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/08/20 14:11:30	1.20
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/08/21 07:40:41	1.21
  @@ -263,19 +263,19 @@
                       exit(ERR_EXECUTION);
                   }
                   ctx->ns[ctx->nsc].sa = sa;
  -                //FIXME sa_destroy(sa);
  +                /*FIXME sa_destroy(sa); */
                   ctx->ns[ctx->nsc].nntp = NULL;
                   ctx->nsc++;
                   break;
  -            case 't': // -t (tracing)
  +            case 't': /* -t (tracing) */
                   ctx->option_tracing = TRUE;
                   trace_read (-1, optarg, 0);
                   trace_write(-1, optarg, 0);
                   break;
  -            case 'v': // -v (verbose)
  +            case 'v': /* -v (verbose) */
                   ctx->option_verbose = TRUE;
                   break;
  -            case 'V': // -V (version)
  +            case 'V': /* -V (version) */
                   fprintf(stdout, "%s\n", lmtp2nntp_version.v_gnu);
                   exit(0);
                   break;
  @@ -287,7 +287,7 @@
       }
       /* remaining arguments are Groupargs */
       for (i = optind; i < argc; i++) {
  -        //fprintf(stderr, "DEBUG: argv[i] = ***%s***\n", argv[i]);
  +        /*fprintf(stderr, "DEBUG: argv[i] = ***%s***\n", argv[i]); */
           argz_add(&ctx->azGroupargs, &ctx->asGroupargs, argv[i]);
       }
   
  @@ -315,7 +315,7 @@
   
   static void resetsession(struct session *session)
   {
  -                                             //FIXME what about non-graceful aborts?
  +                                             /*FIXME what about non-graceful aborts? */
       if (session->lhlo_domain != NULL)
           free(session->lhlo_domain);         
       initsession(session);
  @@ -393,16 +393,16 @@
       do {
           bOk = TRUE;
           if (connect(ctx->ns[i].s, ctx->ns[i].sa->sa_buf, ctx->ns[i].sa->sa_len) < 0) {
  -            //fprintf(stderr, "DEBUG: connect failed: %s\n", strerror(errno));
  +            /*fprintf(stderr, "DEBUG: connect failed: %s\n", strerror(errno)); */
               bOk = FALSE;
           }
           if (bOk && ((ctx->ns[i].nntp = nntp_create(ctx->ns[i].s, ctx->ns[i].s, 
                                                      ctx->option_tracing != TRUE ? NULL : &nntp_io)) == NULL)) {
  -            //fprintf(stderr, "DEBUG: nntp_create failed: %s\n", strerror(errno));
  +            /*fprintf(stderr, "DEBUG: nntp_create failed: %s\n", strerror(errno)); */
               bOk = FALSE;
           }
           if (bOk && ((rc = nntp_init(ctx->ns[i].nntp)) != NNTP_OK)) {
  -            //fprintf(stderr, "DEBUG: nntp_init failed: %s\n", nntp_error(rc));
  +            /*fprintf(stderr, "DEBUG: nntp_init failed: %s\n", nntp_error(rc)); */
               bOk = FALSE;
           }
           if (bOk)
  @@ -425,7 +425,7 @@
       if (ctx->nsc == 0) {
           res.statuscode = "421";
           res.dsncode    = "4.4.1";
  -        res.statusmsg  = "No connection to any NNTP Service."; //FIXME add error strings from above DEBUGs
  +        res.statusmsg  = "No connection to any NNTP Service."; /*FIXME add error strings from above DEBUGs */
           lmtp_response(lmtp, &res);
           return LMTP_OK;
       }
  @@ -584,7 +584,7 @@
       }
   
       if ((ctx->msg = msg_create()) == NULL) {
  -        res.statuscode = "503"; // FIXME
  +        res.statuscode = "503"; /* FIXME */
           res.dsncode    = "5.5.0";
           res.statusmsg  = "Internal error - memory.";
           lmtp_response(lmtp, &res);
  @@ -592,7 +592,7 @@
       }
   
       if (!str_parse(req->msg, "m/^MAIL From:\\s*<(.+@.+)>$/i", &ctx->msg->mail_from)) {
  -        //FIXME                            ^^^^ is this space required/ valid? Sendmail skips them!
  +        /*FIXME                            ^^^^ is this space required/ valid? Sendmail skips them! */
           res.statuscode = "553";
           res.dsncode    = "5.5.4";
           res.statusmsg  = "Domain name required for sender address.";
  @@ -623,7 +623,7 @@
       }
   
       if (!str_parse(req->msg, "m/^RCPT To:\\s*(.+)$/i", &cp)) {
  -        //FIXME                          ^^^^ is this space required/ valid? Sendmail skips them!
  +        /*FIXME                          ^^^^ is this space required/ valid? Sendmail skips them! */
           res.statuscode = "501";
           res.dsncode    = "5.5.2";
           res.statusmsg  = "Syntax error in parameters.";
  @@ -647,7 +647,7 @@
        */
   
       if (ctx->option_groupmode == GROUPMODE_ENVELOPE) {
  -        //fprintf(stderr, "DEBUG: before transform cp=***%s***\n", cp);
  +        /*fprintf(stderr, "DEBUG: before transform cp=***%s***\n", cp); */
           if (!str_parse(cp, "m/^<(.+)?@[^@]+>$/i", &group)) {
               res.statuscode = "550";
               res.dsncode    = "5.1.1";
  @@ -655,8 +655,8 @@
               lmtp_response(lmtp, &res);
               return LMTP_OK;
           }
  -        //fprintf(stderr, "DEBUG: after  transform group=***%s***\n", group);
  -        //FIXME do additional transform and checking
  +        /*fprintf(stderr, "DEBUG: after  transform group=***%s***\n", group); */
  +        /*FIXME do additional transform and checking */
           if (0) {
               res.statuscode = "550";
               res.dsncode    = "5.1.1";
  @@ -667,7 +667,7 @@
           argz_add(&ctx->msg->azEnvgroups, &ctx->msg->asEnvgroups, group);
       }
       
  -    //fprintf(stderr, "DEBUG: cp=***%s***\n", cp);
  +    /*fprintf(stderr, "DEBUG: cp=***%s***\n", cp); */
       argz_add(&ctx->msg->azRcpt, &ctx->msg->asRcpt, cp);
       res.statuscode = "250";
       res.dsncode    = "2.1.5";
  @@ -705,7 +705,7 @@
           str_format(errorstring, sizeof(errorstring), "Overflow reading message: %s", lmtp_error(rc));
           res.statuscode = "500";
           res.dsncode    = "5.0.0";
  -        res.statusmsg  = errorstring; //FIXME temp or perm error?
  +        res.statusmsg  = errorstring; /*FIXME temp or perm error? */
           rcpt = NULL;
           while ((rcpt = argz_next(ctx->msg->azRcpt, ctx->msg->asRcpt, rcpt)) != NULL) {
               lmtp_response(lmtp, &res);
  @@ -737,7 +737,7 @@
           return LMTP_OK;
       }
   
  -    //fprintf(stderr, "DEBUG: before msg_split\n");
  +    /*fprintf(stderr, "DEBUG: before msg_split\n"); */
       if ((rc = msg_split(ctx->msg)) != MSG_OK) {
           str_format(errorstring, sizeof(errorstring), "Error splitting message: %s", msg_error(rc));
           res.statuscode = "500";
  @@ -749,26 +749,26 @@
           }
           return LMTP_OK;
       }
  -    //fprintf(stderr, "DEBUG: after msg_split\n");
  +    /*fprintf(stderr, "DEBUG: after msg_split\n"); */
   
       if      (ctx->option_groupmode == GROUPMODE_ENVELOPE) {
  -        ctx->msg->azNewsgroups = memcpy(malloc(ctx->msg->asEnvgroups + 1), ctx->msg->azEnvgroups, ctx->msg->asEnvgroups); //FIXME strdup == NULL
  +        ctx->msg->azNewsgroups = memcpy(malloc(ctx->msg->asEnvgroups + 1), ctx->msg->azEnvgroups, ctx->msg->asEnvgroups); /*FIXME strdup == NULL */
           ctx->msg->asNewsgroups =        ctx->msg->asEnvgroups;
       }
       else if (ctx->option_groupmode == GROUPMODE_ARG) {
  -        ctx->msg->azNewsgroups = memcpy(malloc(ctx->asGroupargs + 1),      ctx->azGroupargs,      ctx->asGroupargs);      //FIXME strdup == NULL
  +        ctx->msg->azNewsgroups = memcpy(malloc(ctx->asGroupargs + 1),      ctx->azGroupargs,      ctx->asGroupargs);      /*FIXME strdup == NULL */
           ctx->msg->asNewsgroups =        ctx->asGroupargs;
       }
       /* else keep                   == GROUPMODE_HEADERS */
   
  -#if 0 //FIXME debug paragraph
  +#if 0 /*FIXME debug paragraph */
       rcpt = NULL;
       while ((rcpt = argz_next(ctx->msg->azNewsgroups, ctx->msg->asNewsgroups, rcpt)) != NULL) {
           fprintf(stderr, "DEBUG: commited group ***%s***\n", rcpt);
       }
   #endif
   
  -    //fprintf(stderr, "DEBUG: before msg_join\n");
  +    /*fprintf(stderr, "DEBUG: before msg_join\n"); */
       if ((rc = msg_join(ctx->msg)) != MSG_OK) {
           str_format(errorstring, sizeof(errorstring), "Error joining message: %s", msg_error(rc));
           res.statuscode = "500";
  @@ -780,11 +780,11 @@
           }
           return LMTP_OK;
       }
  -    //fprintf(stderr, "DEBUG: after msg_join\n");
  +    /*fprintf(stderr, "DEBUG: after msg_join\n"); */
   
       bSuccess = NNTP_EOF; /* assume a hard error for the worst case */
       for (i = 0; i < ctx->nsc; i++) {
  -        //fprintf(stderr, "DEBUG: trying service %s\n", ctx->ns[i].h);
  +        /*fprintf(stderr, "DEBUG: trying service %s\n", ctx->ns[i].h); */
           switch (ctx->option_deliverymode) {
               case DELIVERYMODE_FAKE:
                   break;
  @@ -806,7 +806,7 @@
                 )
               bSuccess = NNTP_DEFER;
       }
  -    //FIXME rc has only last error
  +    /*FIXME rc has only last error */
   
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS
        *  "250 Requested mail action okay, completed"
  Index: ossp-pkg/lmtp2nntp/msg.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 msg.c
  --- ossp-pkg/lmtp2nntp/msg.c	2001/08/16 15:00:50	1.5
  +++ ossp-pkg/lmtp2nntp/msg.c	2001/08/21 07:40:41	1.6
  @@ -32,7 +32,7 @@
   {
       if (msg == NULL)
           return;
  -                                             //FIXME what about non-graceful aborts?
  +                                             /*FIXME what about non-graceful aborts? */
       if (msg->azEnvgroups != NULL)
           free(msg->azEnvgroups);
       if (msg->cpMsg != NULL)
  @@ -103,17 +103,17 @@
           memcpy(cpHeaders, "X-F:", 4);
   
       /* unwrap header lines */
  -    //FIXME poor man's s///g simulator as current str library doesn't support //global substitution
  +    /*FIXME poor man's s///g simulator as current str library doesn't support //global substitution */
       while (str_parse(cpHeaders, "s/(.*?)\\n[ \\t]+(.*)/$1 $2/s", &cpRem)) {
           free(cpHeaders);
           cpHeaders = cpRem;
       }
   
       /* split header lines into names and values */
  -    //FIXME str enhancement requests and bugs to be fixed
  -    //FIXME - fix bug "not" [^...] working
  -    //FIXME - improve str_parse(foo, "...", &foo) should free foo() on it's own
  -    //FIXME - add "global" in s/search/replace/g (see above "unwrap hader lines")
  +    /*FIXME str enhancement requests and bugs to be fixed */
  +    /*FIXME - fix bug "not" [^...] working */
  +    /*FIXME - improve str_parse(foo, "...", &foo) should free foo() on it's own */
  +    /*FIXME - add "global" in s/search/replace/g (see above "unwrap hader lines") */
       while (str_parse(cpHeaders, "m/^([\\w-]+?:)[ \\t]*(.*?)[ \\t]*\\n(.*)/s", &cpName, &cpValue, &cpRem)) {
           free(cpHeaders);
           cpHeaders = cpRem;
  @@ -156,7 +156,7 @@
               if (msg->cpMsgid != NULL)
                   return MSG_ERR_SPLITIDMULTI;
               argz_delete(&msg->azHeaders, &msg->asHeaders, cp);             /* del  name  */
  -            //fprintf(stderr, "DEBUG: Message-ID cp = ***%s***\n", cp);
  +            /*fprintf(stderr, "DEBUG: Message-ID cp = ***%s***\n", cp); */
               if ((cp == NULL) || (strlen(cp) == 0))                         /* get  value */
                   return MSG_ERR_SPLITIDEMPTY;
               if ((msg->cpMsgid = strdup(cp)) == NULL)
  @@ -166,7 +166,7 @@
           }
           if (strcasecmp("Newsgroups:", cp) == 0) {
               argz_delete(&msg->azHeaders, &msg->asHeaders, cp);             /* del  name  */
  -            //fprintf(stderr, "DEBUG: Newsgroups cp = ***%s***\n", cp);
  +            /*fprintf(stderr, "DEBUG: Newsgroups cp = ***%s***\n", cp); */
               if (argz_add(&msg->azNewsgroups, &msg->asNewsgroups, cp) != 0) /* get  value */
                   return MSG_ERR_MEM;
               argz_delete(&msg->azHeaders, &msg->asHeaders, cp);             /* del  value */
  @@ -186,7 +186,7 @@
               return MSG_ERR_MEM;
       }
       argz_add(&msg->azHeaders, &msg->asHeaders, "Path:");
  -    argz_add(&msg->azHeaders, &msg->asHeaders, "not-for-mail"); //FIXME
  +    argz_add(&msg->azHeaders, &msg->asHeaders, "not-for-mail"); /*FIXME */
   
       return MSG_OK;
   }
  @@ -208,7 +208,7 @@
       if (msg->azNewsgroups == NULL)
           return MSG_ERR_JOINGROUPNONE;
       argz_stringify(msg->azNewsgroups, msg->asNewsgroups, ',');
  -    //fprintf(stderr, "DEBUG: join consolidated azNewsgroups = ***%s***\n", msg->azNewsgroups);
  +    /*fprintf(stderr, "DEBUG: join consolidated azNewsgroups = ***%s***\n", msg->azNewsgroups); */
       if (strlen(msg->azNewsgroups) == 0)
           return MSG_ERR_JOINGROUPEMPTY;
       argz_add(&msg->azHeaders, &msg->asHeaders, "Newsgroups:");
  @@ -253,7 +253,7 @@
                   if (i < WRAPAT)
                       i++; /* we don't care about the whitespace itself */
                   cpCut = str_dup(cpRem, i);
  -                //FIXME 1.) continue searching downwards skipping all whitespaces and 2.) as we know the length replace str_dup/ strcat/ free with strncat only
  +                /*FIXME 1.) continue searching downwards skipping all whitespaces and 2.) as we know the length replace str_dup/ strcat/ free with strncat only */
                   if (cpWrap == NULL) {
                       if ((cpWrap = (char *)malloc(strlen(cpCut)+strlen(WRAPUSING)+1)) == NULL)
                           return MSG_ERR_MEM;
  @@ -356,7 +356,7 @@
       msg->cpMsg[n++] = '\n';
       msg->cpMsg[n]   = '\0';
   
  -    //fprintf(stderr, "DEBUG: Message = ***%s***\n", msg->cpMsg);
  +    /*fprintf(stderr, "DEBUG: Message = ***%s***\n", msg->cpMsg); */
       return MSG_OK;
   }
   
  Index: ossp-pkg/lmtp2nntp/nntp.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 nntp.c
  --- ossp-pkg/lmtp2nntp/nntp.c	2001/08/16 15:00:50	1.8
  +++ ossp-pkg/lmtp2nntp/nntp.c	2001/08/21 07:40:41	1.9
  @@ -124,12 +124,12 @@
   
       do {
           if ((rc = nntp_readline(nntp, line, sizeof(line))) != NNTP_OK) {
  -            //fprintf(stderr, "DEBUG: nntp_readline returned ***%d***\n", rc);
  +            /*fprintf(stderr, "DEBUG: nntp_readline returned ***%d***\n", rc); */
               return rc;
               }
       } while (line[0] == '1');
   
  -    //fprintf(stderr, "DEBUG: nntp_readline got ***%s***\n", line);
  +    /*fprintf(stderr, "DEBUG: nntp_readline got ***%s***\n", line); */
   
       /* prepare for the INN kludge using 441 returns for other things but
        * "Duplicate".  Typical welcome string is "200 host InterNetNews NNRP
  @@ -137,11 +137,11 @@
        */
       if (str_parse(line, "m/^200.*\\sINN\\s/")) {
           nntp->kludgeinn441dup = TRUE;
  -        //fprintf(stderr, "DEBUG: INN kludge activated!\n");
  +        /*fprintf(stderr, "DEBUG: INN kludge activated!\n"); */
       }
       else {
           nntp->kludgeinn441dup = FALSE;
  -        //fprintf(stderr, "DEBUG: no INN kludge!\n");
  +        /*fprintf(stderr, "DEBUG: no INN kludge!\n"); */
       }
   
       if (strncmp(line, "200", 3) == 0)
  @@ -205,7 +205,7 @@
       buf[n] = '\0';          /* string termination */
       if (n == (buflen-1)) 
           return NNTP_ERR_OVERFLOW;
  -    //fprintf(stderr, "DEBUG: nntp_readline  <<<%s\n", buf);
  +    /*fprintf(stderr, "DEBUG: nntp_readline  <<<%s\n", buf); */
       return NNTP_OK;
   }
   
  @@ -217,7 +217,7 @@
           return NNTP_ERR_ARG;
       strncpy(tmp, buf, NNTP_LINE_MAXLEN-3);
       strcat(tmp, "\r\n");
  -    //fprintf(stderr, "DEBUG: nntp_writeline >>>%s", tmp);
  +    /*fprintf(stderr, "DEBUG: nntp_writeline >>>%s", tmp); */
       if (nntp->io.write(nntp->wfd, tmp, strlen(tmp)) < 0)
           return NNTP_ERR_SYSTEM;
       return NNTP_OK;
  @@ -327,12 +327,12 @@
       if (strncmp(line, "340", 3) != 0)
           return NNTP_ERR_POST;
   
  -    if ((rc = nntp->io.write(nntp->wfd, msg->cpMsg, strlen(msg->cpMsg))) < 0) //FIXME while() wrapper around write required
  +    if ((rc = nntp->io.write(nntp->wfd, msg->cpMsg, strlen(msg->cpMsg))) < 0) /*FIXME while() wrapper around write required */
           return NNTP_ERR_SYSTEM;
   
       if ((rc = nntp_readline(nntp, line, sizeof(line))) != NNTP_OK)
           return rc;
  -    //fprintf(stderr, "DEBUG: answer to post = ***%s***, rc = %s\n", line, nntp_error(rc));
  +    /*fprintf(stderr, "DEBUG: answer to post = ***%s***, rc = %s\n", line, nntp_error(rc)); */
   
       if (strncmp(line, "240", 3) == 0)
           return NNTP_OK;
  @@ -394,18 +394,18 @@
       if (strncmp(line, "436", 3) == 0)
           return NNTP_DEFER;
   
  -    if (   (strncmp(line, "437", 3) == 0) //FIXME style vs. optimization - redundant lines
  +    if (   (strncmp(line, "437", 3) == 0) /*FIXME style vs. optimization - redundant lines */
           || (strncmp(line, "480", 3) == 0)
           || (strncmp(line, "335", 3) != 0)
             )
           return NNTP_ERR_POST;
   
  -    if ((rc = nntp->io.write(nntp->wfd, msg->cpMsg, strlen(msg->cpMsg))) < 0) //FIXME while() wrapper around write required
  +    if ((rc = nntp->io.write(nntp->wfd, msg->cpMsg, strlen(msg->cpMsg))) < 0) /*FIXME while() wrapper around write required */
           return NNTP_ERR_SYSTEM;
   
       if ((rc = nntp_readline(nntp, line, sizeof(line))) != NNTP_OK)
           return rc;
  -    //fprintf(stderr, "DEBUG: answer to post = ***%s***, rc = %s\n", line, nntp_error(rc));
  +    /*fprintf(stderr, "DEBUG: answer to post = ***%s***, rc = %s\n", line, nntp_error(rc)); */
   
       if (strncmp(line, "235", 3) == 0)
           return NNTP_OK;

From ossp-cvs-owner@ossp.org  Tue Aug 21 09:44:33 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7L7iWg43836; Tue, 21 Aug 2001 09:44:32 +0200 (CEST)
Date: Tue, 21 Aug 2001 09:44:32 +0200 (CEST)
Message-Id: <200108210744.f7L7iWg43836@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   21-Aug-2001 09:44:32
  Branch: HEAD                             Handle: 2001082108443200

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c

  Log:
    isdigit() paramters casted to int. Now only a single warning remains on solaris (string length in line 509).

  Summary:
    Revision    Changes     Path
    1.22        +6  -6      ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/08/21 07:40:41	1.21
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/08/21 07:44:32	1.22
  @@ -195,19 +195,19 @@
                       ctx->option_deliverymodefakedsn    = &optarg[4];
   
                       if (   strlen(ctx->option_deliverymodefakestatus) != 3
  -                        || !isdigit(ctx->option_deliverymodefakestatus[0])
  -                        || !isdigit(ctx->option_deliverymodefakestatus[1])
  -                        || !isdigit(ctx->option_deliverymodefakestatus[2])) {
  +                        || !isdigit((int)ctx->option_deliverymodefakestatus[0])
  +                        || !isdigit((int)ctx->option_deliverymodefakestatus[1])
  +                        || !isdigit((int)ctx->option_deliverymodefakestatus[2])) {
                               fprintf(stderr, "%s:Error: Invalid status in format \"%s\" to option -d\n", progname, optarg);
                               exit(ERR_EXECUTION);
                           }
   
                       if (   (strlen(ctx->option_deliverymodefakedsn) != 5)
  -                        || !isdigit(ctx->option_deliverymodefakedsn[0])
  +                        || !isdigit((int)ctx->option_deliverymodefakedsn[0])
                           || (ctx->option_deliverymodefakedsn[1] != '.')
  -                        || !isdigit(ctx->option_deliverymodefakedsn[2])
  +                        || !isdigit((int)ctx->option_deliverymodefakedsn[2])
                           || (ctx->option_deliverymodefakedsn[3] != '.')
  -                        || !isdigit(ctx->option_deliverymodefakedsn[4])
  +                        || !isdigit((int)ctx->option_deliverymodefakedsn[4])
                           || (ctx->option_deliverymodefakedsn[0] != ctx->option_deliverymodefakestatus[0])) {
                               fprintf(stderr, "%s:Error: Invalid dsn in format \"%s\" to option -d\n", progname, optarg);
                               exit(ERR_EXECUTION);

From ossp-cvs-owner@ossp.org  Tue Aug 21 10:56:43 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7L8ugb53667; Tue, 21 Aug 2001 10:56:42 +0200 (CEST)
Date: Tue, 21 Aug 2001 10:56:42 +0200 (CEST)
Message-Id: <200108210856.f7L8ugb53667@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   21-Aug-2001 10:56:42
  Branch: HEAD                             Handle: 2001082109564100

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c

  Log:
    added support for BODY keyword detection with =7BIT and =8BITMIME in MAIL command

  Summary:
    Revision    Changes     Path
    1.23        +27 -2      ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/08/21 07:44:32	1.22
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/08/21 08:56:41	1.23
  @@ -591,12 +591,37 @@
           return LMTP_ERR_MEM;
       }
   
  -    if (!str_parse(req->msg, "m/^MAIL From:\\s*<(.+@.+)>$/i", &ctx->msg->mail_from)) {
  -        /*FIXME                            ^^^^ is this space required/ valid? Sendmail skips them! */
  +    /* RFC1652 2. Framework for the 8bit MIME Transport Extension
  +     * (4)  one optional parameter using the keyword BODY is added to the MAIL
  +     * FROM command.  The value associated with this parameter is a keyword
  +     * indicating whether a 7bit message [...] or a MIME message [...] is
  +     * being sent. The syntax of the value is as follows, using the ABNF
  +     * notation [...]
  +     *
  +     * body-value ::= "7BIT" / "8BITMIME"
  +     *
  +     * "MAIL From:<foo@bar>"
  +     * "MAIL From:<foo@bar> BODY=8BITMIME"
  +     * "MAIL From:<foo@bar> BODY=7BIT"
  +     */
  +    if (!str_parse(req->msg, "m/^MAIL From:\\s*<(?:.+@.+)>/i")) {
           res.statuscode = "553";
           res.dsncode    = "5.5.4";
           res.statusmsg  = "Domain name required for sender address.";
           lmtp_response(lmtp, &res);
  +        msg_destroy(ctx->msg);
  +        ctx->msg = NULL;
  +        return LMTP_OK;
  +    }
  +    if (!str_parse(req->msg, "m/^MAIL From:\\s*<(.+@.+)>"
  +                             "(?:\\s+BODY=(?:7BIT|8BITMIME)\\s*){0,1}$/i", 
  +                             &ctx->msg->mail_from)) {
  +        res.statuscode = "501";
  +        res.dsncode    = "5.5.4";
  +        res.statusmsg  = "Unknown parameter for keyword BODY.";
  +        lmtp_response(lmtp, &res);
  +        msg_destroy(ctx->msg);
  +        ctx->msg = NULL;
           return LMTP_OK;
       }
       

From ossp-cvs-owner@ossp.org  Tue Aug 21 11:32:40 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7L9Weo58413; Tue, 21 Aug 2001 11:32:40 +0200 (CEST)
Date: Tue, 21 Aug 2001 11:32:40 +0200 (CEST)
Message-Id: <200108210932.f7L9Weo58413@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp configure.ac
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   21-Aug-2001 11:32:40
  Branch: HEAD                             Handle: 2001082110323900

  Modified files:
    ossp-pkg/lmtp2nntp      configure.ac

  Log:
    Report failure in the configure script using AC_MSG_ERROR() rather
    than using exit().

  Summary:
    Revision    Changes     Path
    1.5         +4  -1      ossp-pkg/lmtp2nntp/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/configure.ac
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 configure.ac
  --- ossp-pkg/lmtp2nntp/configure.ac	2001/08/20 11:28:29	1.4
  +++ ossp-pkg/lmtp2nntp/configure.ac	2001/08/21 09:32:39	1.5
  @@ -17,7 +17,10 @@
   AC_PROG_CC
   AC_PROG_CPP
   AC_CHECK_DEBUGGING
  -AC_CHECK_EXTLIB([Generic String Library], str, str_parse, str.h, :, echo "REQUIRE STR!"; exit 1)
  +AC_CHECK_EXTLIB([Generic String Library], str, str_parse, str.h, , [
  +			 AC_MSG_RESULT(not found)
  +			 AC_MSG_ERROR([lmtp2nntp requires libstr!])
  +			 ])
   AC_CHECK_LIB(socket, getprotobyname)
   AC_CHECK_LIB(nsl, gethostbyname)
   AC_CHECK_FUNCS(inet_pton inet_aton)

From ossp-cvs-owner@ossp.org  Tue Aug 21 11:35:06 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7L9Z4R58894; Tue, 21 Aug 2001 11:35:04 +0200 (CEST)
Date: Tue, 21 Aug 2001 11:35:04 +0200 (CEST)
Message-Id: <200108210935.f7L9Z4R58894@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp configure.ac
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   21-Aug-2001 11:35:04
  Branch: HEAD                             Handle: 2001082110350400

  Modified files:
    ossp-pkg/lmtp2nntp      configure.ac

  Log:
    Removed unnecessary white-space at the end of the file.

  Summary:
    Revision    Changes     Path
    1.6         +0  -1      ossp-pkg/lmtp2nntp/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/configure.ac
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 configure.ac
  --- ossp-pkg/lmtp2nntp/configure.ac	2001/08/21 09:32:39	1.5
  +++ ossp-pkg/lmtp2nntp/configure.ac	2001/08/21 09:35:04	1.6
  @@ -29,4 +29,3 @@
   AC_CONFIG_HEADERS(config.h)
   AC_CONFIG_FILES(Makefile:Makefile.in)
   AC_OUTPUT
  -

From ossp-cvs-owner@ossp.org  Tue Aug 21 12:02:16 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7LA2FR62037; Tue, 21 Aug 2001 12:02:15 +0200 (CEST)
Date: Tue, 21 Aug 2001 12:02:15 +0200 (CEST)
Message-Id: <200108211002.f7LA2FR62037@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp aclocal.m4
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   21-Aug-2001 12:02:15
  Branch: HEAD                             Handle: 2001082111021500

  Modified files:
    ossp-pkg/lmtp2nntp      aclocal.m4

  Log:
    Fixed --help output of AC_CHECK_EXTLIB macro to show the correct flag
    name rather than the hard-coded name "substr". There's still something
    to do, though, because the amount of white-space to insert between the
    flag and the help text must be calculated dynamically according to the
    length of the library name rather than being hard-coded as it is right
    now.

  Summary:
    Revision    Changes     Path
    1.2         +4  -4      ossp-pkg/lmtp2nntp/aclocal.m4
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 aclocal.m4
  --- ossp-pkg/lmtp2nntp/aclocal.m4	2001/08/20 10:45:44	1.1
  +++ ossp-pkg/lmtp2nntp/aclocal.m4	2001/08/21 10:02:15	1.2
  @@ -23,8 +23,8 @@
   dnl ##  Support for Configuration Headers
   dnl ##
   dnl ##  configure.in:
  -dnl ##    AC_HEADLINE(<short-name>, <long-name>, 
  -dnl ##                <vers-var>, <vers-file>, 
  +dnl ##    AC_HEADLINE(<short-name>, <long-name>,
  +dnl ##                <vers-var>, <vers-file>,
   dnl ##                <copyright>)
   dnl ##
   
  @@ -47,7 +47,7 @@
       #   find out package version
       $3_STR="`$ac_shtool version -l c -d long $ac_srcdir/$4`"
       AC_SUBST($3_STR)
  - 
  +
       #   friendly header ;)
       echo "Configuring ${TB}$1${TN} ($2), Version ${TB}${$3_STR}${TN}"
       echo "$5"
  @@ -201,7 +201,7 @@
   
   AC_DEFUN(AC_CHECK_EXTLIB,[dnl
   AC_ARG_WITH($2,dnl
  -[  --with-]substr([$2[[=DIR]]                 ], 0, 19)[build against $1 library (default=no)],
  +[  --with-]$2[[[=DIR]]        build with $1 library (default=no)]),
       if test ".$with_$2" = .yes; then
           #   via config script
           $2_version=`($2-config --version) 2>/dev/null`

From ossp-cvs-owner@ossp.org  Tue Aug 21 12:13:29 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7LADRn63439; Tue, 21 Aug 2001 12:13:27 +0200 (CEST)
Date: Tue, 21 Aug 2001 12:13:27 +0200 (CEST)
Message-Id: <200108211013.f7LADRn63439@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp aclocal.m4
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   21-Aug-2001 12:13:27
  Branch: HEAD                             Handle: 2001082111132700

  Modified files:
    ossp-pkg/lmtp2nntp      aclocal.m4

  Log:
    Grouped the parameters of AC_CHECK_EXTLIB's AC_WITH_ARG macro call by
    '[' and ']' delimiters to avoid autoconf confusion.

  Summary:
    Revision    Changes     Path
    1.3         +4  -4      ossp-pkg/lmtp2nntp/aclocal.m4
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 aclocal.m4
  --- ossp-pkg/lmtp2nntp/aclocal.m4	2001/08/21 10:02:15	1.2
  +++ ossp-pkg/lmtp2nntp/aclocal.m4	2001/08/21 10:13:27	1.3
  @@ -200,8 +200,8 @@
   dnl ##
   
   AC_DEFUN(AC_CHECK_EXTLIB,[dnl
  -AC_ARG_WITH($2,dnl
  -[  --with-]$2[[[=DIR]]        build with $1 library (default=no)]),
  +AC_ARG_WITH($2, [dnl
  +[  --with-]$2[[[=DIR]]        build with $1 library (default=no)]], [dnl
       if test ".$with_$2" = .yes; then
           #   via config script
           $2_version=`($2-config --version) 2>/dev/null`
  @@ -268,11 +268,11 @@
       if test ".$with_$2" = .no; then
           AC_ERROR([Unable to find $1 library])
       fi
  -,
  +    ], [dnl
   if test ".$with_$2" = .; then
       with_$2=no
   fi
  -)dnl
  +    ])dnl
   AC_MSG_CHECKING(whether to build against $1 library)
   if test ".$with_$2" = .yes; then
       ifelse([$5], , :, [$5])

From ossp-cvs-owner@ossp.org  Tue Aug 21 12:16:31 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7LAGVv63911; Tue, 21 Aug 2001 12:16:31 +0200 (CEST)
Date: Tue, 21 Aug 2001 12:16:31 +0200 (CEST)
Message-Id: <200108211016.f7LAGVv63911@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp aclocal.m4
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   21-Aug-2001 12:16:31
  Branch: HEAD                             Handle: 2001082111163000

  Modified files:
    ossp-pkg/lmtp2nntp      aclocal.m4

  Log:
    Removed duplicate quotation characters in AC_CHECK_EXTLIB's help
    string.

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/lmtp2nntp/aclocal.m4
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 aclocal.m4
  --- ossp-pkg/lmtp2nntp/aclocal.m4	2001/08/21 10:13:27	1.3
  +++ ossp-pkg/lmtp2nntp/aclocal.m4	2001/08/21 10:16:30	1.4
  @@ -201,7 +201,7 @@
   
   AC_DEFUN(AC_CHECK_EXTLIB,[dnl
   AC_ARG_WITH($2, [dnl
  -[  --with-]$2[[[=DIR]]        build with $1 library (default=no)]], [dnl
  +[  --with-]$2[[=DIR]        build with $1 library (default=no)]], [dnl
       if test ".$with_$2" = .yes; then
           #   via config script
           $2_version=`($2-config --version) 2>/dev/null`

From ossp-cvs-owner@ossp.org  Tue Aug 21 12:52:49 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7LAqmZ67690; Tue, 21 Aug 2001 12:52:48 +0200 (CEST)
Date: Tue, 21 Aug 2001 12:52:48 +0200 (CEST)
Message-Id: <200108211052.f7LAqmZ67690@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   21-Aug-2001 12:52:48
  Branch: HEAD                             Handle: 2001082111524700

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp.c

  Log:
    removed FIXME. We are a LMTP server and we send multiline replies and don't
    receive any so no need to handle such incoming messages. The NNTP client has
    no need for handling multiline replies because the protocol does not support
    multiline replies.

  Summary:
    Revision    Changes     Path
    1.13        +0  -1      ossp-pkg/lmtp2nntp/lmtp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp.c
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 lmtp.c
  --- ossp-pkg/lmtp2nntp/lmtp.c	2001/08/21 07:40:41	1.12
  +++ ossp-pkg/lmtp2nntp/lmtp.c	2001/08/21 10:52:47	1.13
  @@ -142,7 +142,6 @@
   lmtp_rc_t lmtp_readline(lmtp_t *lmtp, char *buf, size_t buflen)
   {
       /* read a line (characters until NL) from input stream */
  -    /*FIXME RFC0821 4.2. SMTP REPLIES "Only the EXPN and HELP commands are expected to result in multiline replies in normal circumstances, however multiline replies are allowed for any command." */
       size_t n;
       char c;
       lmtp_readline_t *rl = &lmtp->rl;

From ossp-cvs-owner@ossp.org  Tue Aug 21 15:00:59 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7LD0w485331; Tue, 21 Aug 2001 15:00:58 +0200 (CEST)
Date: Tue, 21 Aug 2001 15:00:58 +0200 (CEST)
Message-Id: <200108211300.f7LD0w485331@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   21-Aug-2001 15:00:58
  Branch: HEAD                             Handle: 2001082114005700

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    A stream could grow its member channels dynamically.

  Summary:
    Revision    Changes     Path
    1.8         +4  -0      ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 TODO
  --- ossp-pkg/l2/TODO	2001/08/15 07:41:54	1.7
  +++ ossp-pkg/l2/TODO	2001/08/21 13:00:57	1.8
  @@ -62,6 +62,10 @@
   o l2_handler_buffer
     - size=size_t
   
  +Stream Members:
  +o channels static array
  +  - consider dynamic
  +
   Braindump:
   - debugging is special case of logging
   - tracing is special case of debugging

From ossp-cvs-owner@ossp.org  Tue Aug 21 15:03:12 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7LD3CK85513; Tue, 21 Aug 2001 15:03:12 +0200 (CEST)
Date: Tue, 21 Aug 2001 15:03:12 +0200 (CEST)
Message-Id: <200108211303.f7LD3CK85513@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_objects.fig
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   21-Aug-2001 15:03:12
  Branch: HEAD                             Handle: 2001082114031100

  Modified files:
    ossp-pkg/l2             l2_objects.fig

  Log:
    Added shading, layer info, and reformatted a little.

  Summary:
    Revision    Changes     Path
    1.2         +141 -104   ossp-pkg/l2/l2_objects.fig
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_objects.fig
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 l2_objects.fig
  --- ossp-pkg/l2/l2_objects.fig	2001/08/20 17:06:53	1.1
  +++ ossp-pkg/l2/l2_objects.fig	2001/08/21 13:03:11	1.2
  @@ -3,7 +3,7 @@
   Center
   Inches
   A4      
  -88.00
  +90.00
   Single
   -2
   1200 2
  @@ -64,148 +64,185 @@
   0 86 #9c0000
   0 87 #ededed
   0 88 #86acff
  -6 6750 5100 9225 6975
  +6 7050 5925 8925 7350
   2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
  -	 6777 5450 9177 5450
  +	 7071 6195 8888 6195
   2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
  -	 6777 5976 9177 5976
  +	 7071 6594 8888 6594
   2 2 0 1 0 7 101 0 20 4.000 0 0 7 0 0 5
  -	 6777 5151 9177 5151 9177 6950 6777 6950 6777 5151
  -4 0 0 100 0 16 12 0.0000 4 135 705 6851 5375 Channel\001
  -4 0 0 100 0 16 12 0.0000 4 165 1725 6851 6200 + l2_channel_create\001
  -4 0 0 100 0 16 12 0.0000 4 180 1980 6851 6437 + l2_channel_configure\001
  -4 0 0 100 0 16 12 0.0000 4 180 1620 6851 6673 + l2_channel_open\001
  -4 0 0 100 0 16 12 0.0000 4 165 825 6851 5676 channel_t\001
  +	 7071 5969 8888 5969 8888 7331 7071 7331 7071 5969
  +4 0 0 100 0 16 9 0.0000 4 105 465 7127 6139 Channel\001
  +4 0 0 100 0 16 9 0.0000 4 120 1125 7127 6763 + l2_channel_create\001
  +4 0 0 100 0 16 9 0.0000 4 120 1320 7127 6943 + l2_channel_configure\001
  +4 0 0 100 0 16 9 0.0000 4 120 1080 7127 7122 + l2_channel_open\001
  +4 0 0 100 0 16 9 0.0000 4 120 555 7127 6367 channel_t\001
   -6
  -6 10350 5100 12825 6975
  +6 8475 8325 10200 9675
   2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
  -	 10377 5450 12777 5450
  +	 8494 8569 10166 8569
   2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
  -	 10377 5976 12777 5976
  +	 8494 8936 10166 8936
   2 2 0 1 0 7 101 0 20 4.000 0 0 7 0 0 5
  -	 10377 5151 12777 5151 12777 6950 10377 6950 10377 5151
  -4 0 0 100 0 16 12 0.0000 4 135 570 10451 5375 Stream\001
  -4 0 0 100 0 16 12 0.0000 4 165 1590 10451 6200 + l2_stream_create\001
  -4 0 0 100 0 16 12 0.0000 4 165 1740 10451 6437 + l2_stream_channel\001
  -4 0 0 100 0 16 12 0.0000 4 165 1770 10451 6673 + l2_stream_formatter\001
  -4 0 0 100 0 16 12 0.0000 4 165 690 10451 5676 stream_t\001
  +	 8494 8361 10166 8361 10166 9614 8494 9614 8494 8361
  +4 0 0 100 0 16 8 0.0000 4 120 375 8546 8517 Output\001
  +4 0 0 100 0 16 8 0.0000 4 120 1080 8546 9092 + l2_channel_close\001
  +4 0 0 100 0 16 8 0.0000 4 120 1215 8546 9257 + l2_channel_destroy\001
  +4 0 0 100 0 16 8 0.0000 4 120 1080 8546 9421 + l2_channel_stack\001
  +4 0 0 100 0 16 8 0.0000 4 120 555 8546 8727 channel_t\001
   -6
  -6 5100 8025 7575 9900
  +6 9675 5925 11550 7350
   2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
  -	 5127 8375 7527 8375
  +	 9696 6190 11513 6190
   2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
  -	 5127 8901 7527 8901
  +	 9696 6589 11513 6589
   2 2 0 1 0 7 101 0 20 4.000 0 0 7 0 0 5
  -	 5127 8076 7527 8076 7527 9875 5127 9875 5127 8076
  -4 0 0 100 0 16 12 0.0000 4 135 420 5201 8300 Filter\001
  -4 0 0 100 0 16 12 0.0000 4 165 1590 5201 9125 + l2_channel_write\001
  -4 0 0 100 0 16 12 0.0000 4 165 1590 5201 9362 + l2_channel_flush\001
  -4 0 0 100 0 16 12 0.0000 4 165 1650 5201 9598 + l2_channel_close\001
  -4 0 0 100 0 16 12 0.0000 4 165 825 5201 8601 channel_t\001
  +	 9696 5964 11513 5964 11513 7326 9696 7326 9696 5964
  +4 0 0 100 0 16 9 0.0000 4 105 390 9752 6134 Stream\001
  +4 0 0 100 0 16 9 0.0000 4 120 1050 9752 6758 + l2_stream_create\001
  +4 0 0 100 0 16 9 0.0000 4 120 1155 9752 6938 + l2_stream_channel\001
  +4 0 0 100 0 16 9 0.0000 4 120 1230 9752 7117 + l2_stream_formatter\001
  +4 0 0 100 0 16 9 0.0000 4 120 480 9752 6362 stream_t\001
   -6
  -6 8475 8025 10950 9900
  +6 5925 8325 7650 9600
   2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
  -	 8502 8375 10902 8375
  +	 5985 8563 7617 8563
   2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
  -	 8502 8901 10902 8901
  +	 5985 8921 7617 8921
   2 2 0 1 0 7 101 0 20 4.000 0 0 7 0 0 5
  -	 8502 8076 10902 8076 10902 9875 8502 9875 8502 8076
  -4 0 0 100 0 16 12 0.0000 4 180 555 8576 8300 Output\001
  -4 0 0 100 0 16 12 0.0000 4 165 1650 8576 9125 + l2_channel_close\001
  -4 0 0 100 0 16 12 0.0000 4 180 1815 8576 9362 + l2_channel_destroy\001
  -4 0 0 100 0 16 12 0.0000 4 165 1635 8576 9598 + l2_channel_stack\001
  -4 0 0 100 0 16 12 0.0000 4 165 825 8576 8601 channel_t\001
  +	 5985 8360 7617 8360 7617 9583 5985 9583 5985 8360
  +4 0 0 100 0 16 8 0.0000 4 105 285 6036 8512 Filter\001
  +4 0 0 100 0 16 8 0.0000 4 120 1065 6036 9073 + l2_channel_write\001
  +4 0 0 100 0 16 8 0.0000 4 120 1065 6036 9234 + l2_channel_flush\001
  +4 0 0 100 0 16 8 0.0000 4 120 1080 6036 9394 + l2_channel_close\001
  +4 0 0 100 0 16 8 0.0000 4 120 555 6036 8717 channel_t\001
   -6
  -2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
  +2 2 0 1 0 7 60 0 10 0.000 0 0 -1 0 0 5
   	 0 0 12450 0 12450 2400 0 2400 0 0
  -2 2 0 1 0 7 50 0 0 0.000 0 0 -1 0 0 5
  +2 2 0 1 0 7 46 0 0 0.000 0 0 -1 0 0 5
   	 0 0 12450 0 12450 600 0 600 0 0
  -2 1 0 6 0 7 50 0 0 0.000 0 0 -1 0 0 2
  +2 1 0 6 0 7 54 0 0 0.000 0 0 -1 0 0 2
   	 1050 2400 1050 3000
  -2 1 0 6 0 7 50 0 0 0.000 0 0 -1 0 0 2
  +2 1 0 6 0 7 54 0 0 0.000 0 0 -1 0 0 2
   	 6300 2400 6300 3000
  -2 1 0 6 0 7 50 0 0 0.000 0 0 -1 0 0 2
  +2 1 0 6 0 7 54 0 0 0.000 0 0 -1 0 0 2
   	 8850 2400 8850 3000
  -2 1 0 6 0 7 50 0 0 0.000 0 0 -1 0 0 2
  +2 1 0 6 0 7 54 0 0 0.000 0 0 -1 0 0 2
   	 11325 2400 11325 3000
  -2 2 0 1 0 7 50 0 0 0.000 0 0 -1 0 0 5
  +2 2 0 1 0 7 46 0 0 0.000 0 0 -1 0 0 5
   	 0 3000 2100 3000 2100 3450 0 3450 0 3000
  -2 2 0 1 0 7 50 0 0 0.000 0 0 -1 0 0 5
  +2 2 0 1 0 7 46 0 0 0.000 0 0 -1 0 0 5
   	 2625 3000 4725 3000 4725 3450 2625 3450 2625 3000
  -2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
  +2 2 0 1 0 7 60 0 19 0.000 0 0 -1 0 0 5
   	 2625 3000 4725 3000 4725 4800 2625 4800 2625 3000
  -2 1 0 6 0 7 50 0 0 0.000 0 0 -1 0 0 2
  +2 1 0 6 0 7 54 0 0 0.000 0 0 -1 0 0 2
   	 3675 2400 3675 3000
  -2 2 0 1 0 7 50 0 0 0.000 0 0 -1 0 0 5
  +2 2 0 1 0 7 46 0 0 0.000 0 0 -1 0 0 5
   	 5250 3000 7350 3000 7350 3450 5250 3450 5250 3000
  -2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
  -	 5250 3000 7350 3000 7350 4800 5250 4800 5250 3000
  -2 2 0 1 0 7 50 0 0 0.000 0 0 -1 0 0 5
  +2 2 0 1 0 7 46 0 0 0.000 0 0 -1 0 0 5
   	 7800 3000 9900 3000 9900 3450 7800 3450 7800 3000
  -2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
  +2 2 0 0 0 7 64 0 15 0.000 0 0 -1 0 0 5
   	 7800 3000 9900 3000 9900 4800 7800 4800 7800 3000
  -2 2 0 1 0 7 50 0 0 0.000 0 0 -1 0 0 5
  +2 2 0 1 0 7 46 0 0 0.000 0 0 -1 0 0 5
   	 10350 3000 12450 3000 12450 3450 10350 3450 10350 3000
  -2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
  +2 2 0 0 0 7 64 0 15 0.000 0 0 -1 0 0 5
   	 10350 3000 12450 3000 12450 4800 10350 4800 10350 3000
  -2 1 0 2 0 7 50 0 0 0.000 0 0 -1 1 0 2
  -	1 1 2.00 120.00 240.00
  -	 1800 4800 1800 5400
  -2 1 0 2 0 7 50 0 0 0.000 0 0 -1 1 0 2
  +2 1 0 2 0 7 56 0 0 0.000 0 0 -1 1 0 2
   	1 1 2.00 120.00 240.00
   	 4425 4800 4425 5400
  -2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
  +2 2 0 1 0 7 60 0 19 0.000 0 0 -1 0 0 5
   	 0 3000 2100 3000 2100 4800 0 4800 0 3000
  -2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
  +2 2 0 1 0 7 60 0 19 0.000 0 0 -1 0 0 5
   	 0 5400 2100 5400 2100 7200 0 7200 0 5400
  -2 2 0 1 0 7 50 0 0 0.000 0 0 -1 0 0 5
  +2 2 0 1 0 7 46 0 0 0.000 0 0 -1 0 0 5
   	 0 5400 2100 5400 2100 5850 0 5850 0 5400
  -2 2 0 1 0 7 50 0 0 0.000 0 0 -1 0 0 5
  +2 2 0 1 0 7 46 0 0 0.000 0 0 -1 0 0 5
   	 2625 5400 4725 5400 4725 5850 2625 5850 2625 5400
  -2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
  +2 2 0 0 0 7 64 0 15 0.000 0 0 -1 0 0 5
   	 2625 5400 4725 5400 4725 7200 2625 7200 2625 5400
  -2 1 0 2 0 7 50 0 0 0.000 0 0 -1 1 0 2
  +2 1 0 2 0 7 56 0 0 0.000 0 0 -1 1 0 2
   	1 1 2.00 120.00 240.00
   	 1800 7200 1800 7800
  -2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
  +2 2 0 0 0 7 64 0 15 0.000 0 0 -1 0 0 5
   	 0 7800 2100 7800 2100 9600 0 9600 0 7800
  -2 2 0 1 0 7 50 0 0 0.000 0 0 -1 0 0 5
  +2 2 0 1 0 7 46 0 0 0.000 0 0 -1 0 0 5
   	 0 7800 2100 7800 2100 8250 0 8250 0 7800
  -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
  -	1 1 1.00 60.00 120.00
  -	 6300 8025 6300 7500 7950 7500 7950 6975
  -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
  -	1 1 1.00 60.00 120.00
  -	 9675 8025 9675 7500 7950 7500 7950 6975
  -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
  -	 9225 6150 10350 6150
  -4 0 0 50 0 0 16 0.0000 4 165 825 5925 2250 ERROR\001
  -4 0 0 50 0 0 16 0.0000 4 165 1155 8250 2250 MESSAGE\001
  -4 0 0 50 0 0 16 0.0000 4 165 1125 10800 2250 CRITICAL\001
  -4 0 0 50 0 0 16 0.0000 4 165 855 3300 2250 DEBUG\001
  -4 0 0 50 0 0 16 0.0000 4 165 570 825 2250 INFO\001
  -4 0 0 50 0 0 14 0.0000 4 150 630 675 3975 <filter>\001
  -4 0 0 50 0 0 14 0.0000 4 150 630 3375 3975 <filter>\001
  -4 0 0 50 0 0 30 0.0000 4 405 1020 3150 4350 prefix\001
  -4 0 0 50 0 0 30 0.0000 4 300 795 600 4350 filter\001
  -4 0 0 50 0 0 14 0.0000 4 180 780 5925 3975 <output>\001
  -4 0 0 50 0 0 30 0.0000 4 405 720 5925 4350 pipe\001
  -4 0 0 50 0 0 14 0.0000 4 180 780 8475 3975 <output>\001
  -4 0 0 50 0 0 30 0.0000 4 405 1080 8325 4350 syslog\001
  -4 0 0 50 0 0 14 0.0000 4 180 780 11025 3975 <output>\001
  -4 0 0 50 0 0 24 0.0000 4 330 1905 10425 4350 filedescriptor\001
  -4 0 0 50 0 0 12 0.0000 4 180 465 6825 4725 pNext\001
  -4 0 0 50 0 0 12 0.0000 4 180 465 9375 4725 pNext\001
  -4 0 0 50 0 0 12 0.0000 4 180 465 11925 4725 pNext\001
  -4 0 0 50 0 0 12 0.0000 4 180 465 1575 4725 pNext\001
  -4 0 0 50 0 0 12 0.0000 4 180 465 4200 4725 pNext\001
  -4 0 0 50 0 0 14 0.0000 4 180 780 3300 6375 <output>\001
  -4 0 0 50 0 0 30 0.0000 4 300 1110 3150 6750 socket\001
  -4 0 0 50 0 0 12 0.0000 4 180 465 4200 7125 pNext\001
  -4 0 0 50 0 0 12 0.0000 4 180 465 1575 7125 pNext\001
  -4 0 0 50 0 0 30 0.0000 4 300 1035 525 6750 buffer\001
  -4 0 0 50 0 0 14 0.0000 4 150 630 750 6375 <filter>\001
  -4 0 0 50 0 0 14 0.0000 4 180 780 600 8775 <output>\001
  -4 0 0 50 0 0 30 0.0000 4 300 525 675 9150 file\001
  -4 0 0 50 0 0 60 0.0000 4 510 2400 5025 1725 stream\001
  -4 0 0 50 0 0 12 0.0000 4 180 465 1575 9525 pNext\001
  +2 2 0 0 0 7 64 0 15 0.000 0 0 -1 0 0 5
  +	 5250 3000 7350 3000 7350 4800 5250 4800 5250 3000
  +2 2 0 1 0 7 60 0 -1 0.000 0 0 -1 0 0 5
  +	 0 7800 2100 7800 2100 9600 0 9600 0 7800
  +2 2 0 1 0 7 60 0 -1 0.000 0 0 -1 0 0 5
  +	 2625 5400 4725 5400 4725 7200 2625 7200 2625 5400
  +2 2 0 1 0 7 60 0 -1 0.000 0 0 -1 0 0 5
  +	 5250 3000 7350 3000 7350 4800 5250 4800 5250 3000
  +2 2 0 1 0 7 60 0 -1 0.000 0 0 -1 0 0 5
  +	 7800 3000 9900 3000 9900 4800 7800 4800 7800 3000
  +2 2 0 1 0 7 60 0 -1 0.000 0 0 -1 0 0 5
  +	 10350 3000 12450 3000 12450 4800 10350 4800 10350 3000
  +2 4 0 0 0 7 58 0 20 0.000 0 0 7 0 0 5
  +	 4350 6825 3075 6825 3075 6150 4350 6150 4350 6825
  +2 4 0 0 0 7 58 0 20 0.000 0 0 7 0 0 5
  +	 1500 9225 450 9225 450 8550 1500 8550 1500 9225
  +2 4 0 0 0 7 58 0 20 0.000 0 0 7 0 0 5
  +	 6825 4500 5775 4500 5775 3750 6825 3750 6825 4500
  +2 4 0 0 0 7 58 0 20 0.000 0 0 7 0 0 5
  +	 9525 4500 8250 4500 8250 3750 9525 3750 9525 4500
  +2 4 0 0 0 7 58 0 20 0.000 0 0 7 0 0 5
  +	 12375 4500 10425 4500 10425 3750 12375 3750 12375 4500
  +2 4 0 0 0 7 58 0 20 0.000 0 0 7 0 0 5
  +	 1650 6825 450 6825 450 6150 1650 6150 1650 6825
  +2 4 0 0 0 7 58 0 20 0.000 0 0 7 0 0 5
  +	 1500 4425 525 4425 525 3750 1500 3750 1500 4425
  +2 4 0 0 0 7 58 0 20 0.000 0 0 7 0 0 5
  +	 4275 4500 3075 4500 3075 3750 4275 3750 4275 4500
  +2 4 0 0 0 7 57 0 20 0.000 0 0 30 0 0 5
  +	 12450 2400 0 2400 0 600 12450 600 12450 2400
  +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 4
  +	1 1 4.00 120.00 120.00
  +	 9300 8325 9300 7875 7950 7875 7950 7350
  +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2
  +	 8925 6675 9675 6675
  +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 4
  +	1 1 4.00 120.00 120.00
  +	 6825 8325 6825 7875 7950 7875 7950 7350
  +2 1 0 2 0 7 56 0 0 0.000 0 0 -1 1 0 2
  +	1 1 2.00 120.00 240.00
  +	 1800 4800 1800 5400
  +3 2 0 0 0 7 112 0 10 0.000 0 0 0 23
  +	 5625 8025 6150 7500 6150 6525 6450 5850 6975 5550 8100 5175
  +	 9225 5100 10350 5100 11325 5400 12000 5925 11925 6975 11700 7875
  +	 11475 8175 10950 8400 10650 9000 10650 9750 9975 9900 8625 9825
  +	 7275 9900 6075 9825 5550 9675 5400 9150 5475 8550
  +	 0.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000
  +	 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000
  +	 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 0.000
  +4 0 0 34 0 0 16 0.0000 4 165 825 5925 2250 ERROR\001
  +4 0 0 34 0 0 16 0.0000 4 165 1155 8250 2250 MESSAGE\001
  +4 0 0 34 0 0 16 0.0000 4 165 1125 10800 2250 CRITICAL\001
  +4 0 0 34 0 0 16 0.0000 4 165 855 3300 2250 DEBUG\001
  +4 0 0 34 0 0 16 0.0000 4 165 570 825 2250 INFO\001
  +4 0 0 38 0 0 14 0.0000 4 150 630 675 3975 <filter>\001
  +4 0 0 38 0 0 14 0.0000 4 150 630 3375 3975 <filter>\001
  +4 0 0 30 0 0 30 0.0000 4 405 1020 3150 4350 prefix\001
  +4 0 0 30 0 0 30 0.0000 4 300 795 600 4350 filter\001
  +4 0 0 38 0 0 14 0.0000 4 180 780 5925 3975 <output>\001
  +4 0 0 30 0 0 30 0.0000 4 405 720 5925 4350 pipe\001
  +4 0 0 38 0 0 14 0.0000 4 180 780 8475 3975 <output>\001
  +4 0 0 30 0 0 30 0.0000 4 405 1080 8325 4350 syslog\001
  +4 0 0 38 0 0 14 0.0000 4 180 780 11025 3975 <output>\001
  +4 0 0 30 0 0 24 0.0000 4 330 1905 10425 4350 filedescriptor\001
  +4 0 0 42 0 0 12 0.0000 4 180 465 6825 4725 pNext\001
  +4 0 0 42 0 0 12 0.0000 4 180 465 9375 4725 pNext\001
  +4 0 0 42 0 0 12 0.0000 4 180 465 11925 4725 pNext\001
  +4 0 0 42 0 0 12 0.0000 4 180 465 1575 4725 pNext\001
  +4 0 0 42 0 0 12 0.0000 4 180 465 4200 4725 pNext\001
  +4 0 0 38 0 0 14 0.0000 4 180 780 3300 6375 <output>\001
  +4 0 0 30 0 0 30 0.0000 4 300 1110 3150 6750 socket\001
  +4 0 0 42 0 0 12 0.0000 4 180 465 4200 7125 pNext\001
  +4 0 0 42 0 0 12 0.0000 4 180 465 1575 7125 pNext\001
  +4 0 0 30 0 0 30 0.0000 4 300 1035 525 6750 buffer\001
  +4 0 0 38 0 0 14 0.0000 4 150 630 750 6375 <filter>\001
  +4 0 0 38 0 0 14 0.0000 4 180 780 600 8775 <output>\001
  +4 0 0 30 0 0 30 0.0000 4 300 525 675 9150 file\001
  +4 0 0 30 0 0 60 0.0000 4 510 2400 5025 1725 stream\001
  +4 0 0 42 0 0 12 0.0000 4 180 465 1575 9525 pNext\001
  +4 0 7 32 0 0 40 0.0000 4 420 1695 8325 5700 classes\001

From ossp-cvs-owner@ossp.org  Tue Aug 21 19:38:44 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7LHchV20774; Tue, 21 Aug 2001 19:38:43 +0200 (CEST)
Date: Tue, 21 Aug 2001 19:38:43 +0200 (CEST)
Message-Id: <200108211738.f7LHchV20774@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_objects.fig
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   21-Aug-2001 19:38:43
  Branch: HEAD                             Handle: 2001082118384200

  Modified files:
    ossp-pkg/l2             l2_objects.fig

  Log:
    Improved the class blob, and added the missing logging level constants.

  Summary:
    Revision    Changes     Path
    1.3         +77 -60     ossp-pkg/l2/l2_objects.fig
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_objects.fig
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2_objects.fig
  --- ossp-pkg/l2/l2_objects.fig	2001/08/21 13:03:11	1.2
  +++ ossp-pkg/l2/l2_objects.fig	2001/08/21 17:38:42	1.3
  @@ -64,57 +64,64 @@
   0 86 #9c0000
   0 87 #ededed
   0 88 #86acff
  -6 7050 5925 8925 7350
  +6 7875 5400 9600 7725
   2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
  -	 7071 6195 8888 6195
  -2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
  -	 7071 6594 8888 6594
  +	 7875 6450 9600 6450
   2 2 0 1 0 7 101 0 20 4.000 0 0 7 0 0 5
  -	 7071 5969 8888 5969 8888 7331 7071 7331 7071 5969
  -4 0 0 100 0 16 9 0.0000 4 105 465 7127 6139 Channel\001
  -4 0 0 100 0 16 9 0.0000 4 120 1125 7127 6763 + l2_channel_create\001
  -4 0 0 100 0 16 9 0.0000 4 120 1320 7127 6943 + l2_channel_configure\001
  -4 0 0 100 0 16 9 0.0000 4 120 1080 7127 7122 + l2_channel_open\001
  -4 0 0 100 0 16 9 0.0000 4 120 555 7127 6367 channel_t\001
  --6
  -6 8475 8325 10200 9675
  +	 7875 5400 9600 5400 9600 7725 7875 7725 7875 5400
   2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
  -	 8494 8569 10166 8569
  +	 7875 5625 9600 5625
  +4 0 0 100 0 16 9 0.0000 4 120 1155 7950 6825 + l2_stream_channel\001
  +4 0 0 100 0 16 9 0.0000 4 120 1230 7952 6972 + l2_stream_formatter\001
  +4 0 0 100 0 16 9 0.0000 4 120 1035 7950 7125 + l2_stream_levels\001
  +4 0 0 100 0 16 9 0.0000 4 120 900 7950 7275 + l2_stream_log\001
  +4 0 0 100 0 16 9 0.0000 4 120 975 7950 7425 + l2_stream_vlog\001
  +4 0 0 100 0 16 9 0.0000 4 120 1050 7950 6675 + l2_stream_create\001
  +4 0 0 100 0 16 9 0.0000 4 120 1140 7950 7575 + l2_stream_destroy\001
  +4 0 0 100 0 16 9 0.0000 4 105 795 7950 5850 - uiLevelMask\001
  +4 0 0 100 0 16 9 0.0000 4 105 795 7950 6000 - pszMessage\001
  +4 0 0 100 0 16 9 0.0000 4 120 795 7950 6150 - ppChannels\001
  +4 0 0 100 0 16 9 0.0000 4 120 870 7950 6300 - ppFormatters\001
  +4 0 0 100 0 16 9 0.0000 4 120 660 7950 5550 l2_stream_t\001
  +-6
  +6 7875 8250 9600 9300
   2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
  -	 8494 8936 10166 8936
  +	 7875 8475 9600 8475
   2 2 0 1 0 7 101 0 20 4.000 0 0 7 0 0 5
  -	 8494 8361 10166 8361 10166 9614 8494 9614 8494 8361
  -4 0 0 100 0 16 8 0.0000 4 120 375 8546 8517 Output\001
  -4 0 0 100 0 16 8 0.0000 4 120 1080 8546 9092 + l2_channel_close\001
  -4 0 0 100 0 16 8 0.0000 4 120 1215 8546 9257 + l2_channel_destroy\001
  -4 0 0 100 0 16 8 0.0000 4 120 1080 8546 9421 + l2_channel_stack\001
  -4 0 0 100 0 16 8 0.0000 4 120 555 8546 8727 channel_t\001
  +	 7875 8250 9600 8250 9600 9300 7875 9300 7875 8250
  +4 0 0 100 0 16 9 0.0000 4 105 480 7950 8700 - eState\001
  +4 0 0 100 0 16 9 0.0000 4 120 885 7950 8850 - pDownstream\001
  +4 0 0 100 0 16 9 0.0000 4 105 585 7950 9000 - Context\001
  +4 0 0 100 0 16 9 0.0000 4 120 870 7950 9150 - ppFormatters\001
  +4 0 0 100 0 16 9 0.0000 4 120 735 7950 8400 l2_channel_t\001
   -6
  -6 9675 5925 11550 7350
  -2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
  -	 9696 6190 11513 6190
  -2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
  -	 9696 6589 11513 6589
  +6 10275 8250 12000 8625
  +2 2 0 1 0 7 101 0 20 4.000 0 0 7 0 0 5
  +	 10275 8250 12000 8250 12000 8625 10275 8625 10275 8250
  +4 0 0 100 0 16 9 0.0000 4 105 285 10950 8475 Filter\001
  +-6
  +6 10275 8925 12000 9300
   2 2 0 1 0 7 101 0 20 4.000 0 0 7 0 0 5
  -	 9696 5964 11513 5964 11513 7326 9696 7326 9696 5964
  -4 0 0 100 0 16 9 0.0000 4 105 390 9752 6134 Stream\001
  -4 0 0 100 0 16 9 0.0000 4 120 1050 9752 6758 + l2_stream_create\001
  -4 0 0 100 0 16 9 0.0000 4 120 1155 9752 6938 + l2_stream_channel\001
  -4 0 0 100 0 16 9 0.0000 4 120 1230 9752 7117 + l2_stream_formatter\001
  -4 0 0 100 0 16 9 0.0000 4 120 480 9752 6362 stream_t\001
  +	 10275 8925 12000 8925 12000 9300 10275 9300 10275 8925
  +4 0 0 100 0 16 9 0.0000 4 120 375 10950 9150 Output\001
   -6
  -6 5925 8325 7650 9600
  +6 5475 7275 7200 9300
   2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
  -	 5985 8563 7617 8563
  +	 5475 7500 7200 7500
   2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
  -	 5985 8921 7617 8921
  +	 5475 7725 7200 7725
   2 2 0 1 0 7 101 0 20 4.000 0 0 7 0 0 5
  -	 5985 8360 7617 8360 7617 9583 5985 9583 5985 8360
  -4 0 0 100 0 16 8 0.0000 4 105 285 6036 8512 Filter\001
  -4 0 0 100 0 16 8 0.0000 4 120 1065 6036 9073 + l2_channel_write\001
  -4 0 0 100 0 16 8 0.0000 4 120 1065 6036 9234 + l2_channel_flush\001
  -4 0 0 100 0 16 8 0.0000 4 120 1080 6036 9394 + l2_channel_close\001
  -4 0 0 100 0 16 8 0.0000 4 120 555 6036 8717 channel_t\001
  +	 5475 7275 7200 7275 7200 9300 5475 9300 5475 7275
  +4 0 0 100 0 16 9 0.0000 4 120 1320 5550 8100 + l2_channel_configure\001
  +4 0 0 100 0 16 9 0.0000 4 120 1080 5552 8247 + l2_channel_open\001
  +4 0 0 100 0 16 9 0.0000 4 120 1065 5550 8400 + l2_channel_write\001
  +4 0 0 100 0 16 9 0.0000 4 120 1215 5550 8850 + l2_channel_destroy\001
  +4 0 0 100 0 16 9 0.0000 4 120 1065 5550 8550 + l2_channel_flush\001
  +4 0 0 100 0 16 9 0.0000 4 120 1080 5550 8700 + l2_channel_close\001
  +4 0 0 100 0 16 9 0.0000 4 120 1080 5550 9000 + l2_channel_stack\001
  +4 0 0 100 0 16 9 0.0000 4 120 1350 5550 9150 + l2_channel_setparams\001
  +4 0 0 100 0 16 9 0.0000 4 120 720 5550 7425 l2_handler_t\001
  +4 0 0 100 0 16 9 0.0000 4 120 1125 5550 7950 + l2_channel_create\001
   -6
   2 2 0 1 0 7 60 0 10 0.000 0 0 -1 0 0 5
   	 0 0 12450 0 12450 2400 0 2400 0 0
  @@ -196,30 +203,33 @@
   	 4275 4500 3075 4500 3075 3750 4275 3750 4275 4500
   2 4 0 0 0 7 57 0 20 0.000 0 0 30 0 0 5
   	 12450 2400 0 2400 0 600 12450 600 12450 2400
  -2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 4
  -	1 1 4.00 120.00 120.00
  -	 9300 8325 9300 7875 7950 7875 7950 7350
  -2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2
  -	 8925 6675 9675 6675
  -2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 4
  -	1 1 4.00 120.00 120.00
  -	 6825 8325 6825 7875 7950 7875 7950 7350
   2 1 0 2 0 7 56 0 0 0.000 0 0 -1 1 0 2
   	1 1 2.00 120.00 240.00
   	 1800 4800 1800 5400
  -3 2 0 0 0 7 112 0 10 0.000 0 0 0 23
  -	 5625 8025 6150 7500 6150 6525 6450 5850 6975 5550 8100 5175
  -	 9225 5100 10350 5100 11325 5400 12000 5925 11925 6975 11700 7875
  -	 11475 8175 10950 8400 10650 9000 10650 9750 9975 9900 8625 9825
  -	 7275 9900 6075 9825 5550 9675 5400 9150 5475 8550
  -	 0.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000
  -	 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000
  -	 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 0.000
  -4 0 0 34 0 0 16 0.0000 4 165 825 5925 2250 ERROR\001
  -4 0 0 34 0 0 16 0.0000 4 165 1155 8250 2250 MESSAGE\001
  +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2
  +	 8700 7725 8700 8250
  +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2
  +	1 1 4.00 120.00 120.00
  +	 10275 8425 9600 8425
  +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2
  +	1 1 4.00 120.00 120.00
  +	 10275 9100 9600 9100
  +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2
  +	1 0 1.00 210.00 210.00
  +	 7200 8775 7875 8775
  +3 1 0 1 0 7 112 0 10 0.000 0 0 0 25
  +	 4950 7800 5025 7125 5550 6750 5700 6075 6225 5400 7275 5100
  +	 8550 5025 9675 5100 10725 5550 10875 6300 11175 6975 12075 7350
  +	 12450 7950 12450 8775 12375 9525 11850 9825 10650 9750 9825 9525
  +	 8700 9600 7725 9825 6150 9675 4950 9750 4425 9375 4275 8700
  +	 4425 8175
  +	 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000
  +	 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000
  +	 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000
  +	 1.000
  +4 0 0 34 0 0 16 0.0000 4 165 1200 8250 2250 WARNING\001
   4 0 0 34 0 0 16 0.0000 4 165 1125 10800 2250 CRITICAL\001
   4 0 0 34 0 0 16 0.0000 4 165 855 3300 2250 DEBUG\001
  -4 0 0 34 0 0 16 0.0000 4 165 570 825 2250 INFO\001
   4 0 0 38 0 0 14 0.0000 4 150 630 675 3975 <filter>\001
   4 0 0 38 0 0 14 0.0000 4 150 630 3375 3975 <filter>\001
   4 0 0 30 0 0 30 0.0000 4 405 1020 3150 4350 prefix\001
  @@ -245,4 +255,11 @@
   4 0 0 30 0 0 30 0.0000 4 300 525 675 9150 file\001
   4 0 0 30 0 0 60 0.0000 4 510 2400 5025 1725 stream\001
   4 0 0 42 0 0 12 0.0000 4 180 465 1575 9525 pNext\001
  -4 0 7 32 0 0 40 0.0000 4 420 1695 8325 5700 classes\001
  +4 0 0 50 0 0 12 0.0000 4 135 90 8775 7950 1\001
  +4 0 0 50 0 0 12 0.0000 4 75 105 8775 8175 +\001
  +4 0 0 34 0 0 16 0.0000 4 165 810 675 2250 TRACE\001
  +4 0 0 34 0 0 16 0.0000 4 165 570 6075 2250 INFO\001
  +4 0 0 34 0 0 16 0.0000 4 165 1155 8250 1950 NOTICE &\001
  +4 0 0 34 0 0 16 0.0000 4 165 1080 10800 1950 ERROR &\001
  +4 0 0 34 0 0 16 0.0000 4 165 990 10800 1650 PANIC &\001
  +4 0 7 32 0 0 40 0.0000 4 420 1695 6000 6600 classes\001

From ossp-cvs-owner@ossp.org  Wed Aug 22 09:54:37 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7M7saS32812; Wed, 22 Aug 2001 09:54:36 +0200 (CEST)
Date: Wed, 22 Aug 2001 09:54:36 +0200 (CEST)
Message-Id: <200108220754.f7M7saS32812@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/jitterbug COPYING INSTALL Makefile.in README acco...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   22-Aug-2001 09:54:36
  Branch: VENDOR                           Handle: 19700101010000998463272

  Modified files:           (Branch: VENDOR)
    ossp-pkg/jitterbug      Makefile.in cgi.c includes.h jitterbug.c
                            loadparm.c proto.h pulldown.c snprintf.c util.c
  Touched files:            (Branch: VENDOR)
    ossp-pkg/jitterbug      COPYING INSTALL README acconfig.h config.guess
                            config.h.in config.sub configure configure.in
                            html.c html.h jconfig.h jitterbug.h list.c lock.c
                            match.c mkproto.awk new_message.c notify.c
                            search.c smtp.c version.h vslprintf.c

  Log:
    Import of Jitterbug 20010822
    
    [Release Tag: JITTERBUG_20010822]

  Summary:
    Revision    Changes     Path
    1.1.1.3     +1  -1      ossp-pkg/jitterbug/Makefile.in
    1.1.1.3     +16 -2      ossp-pkg/jitterbug/cgi.c
    1.1.1.2     +4  -0      ossp-pkg/jitterbug/includes.h
    1.1.1.3     +29 -28     ossp-pkg/jitterbug/jitterbug.c
    1.1.1.3     +12 -12     ossp-pkg/jitterbug/loadparm.c
    1.1.1.3     +4  -4      ossp-pkg/jitterbug/proto.h
    1.1.1.2     +2  -1      ossp-pkg/jitterbug/pulldown.c
    1.1.1.2     +4  -4      ossp-pkg/jitterbug/snprintf.c
    1.1.1.3     +26 -0      ossp-pkg/jitterbug/util.c
  ____________________________________________________________________________

  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/jitterbug/Makefile.in?cvsroot=ossp&r1=1.1.1.2&r2=1.1.1.3
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/jitterbug/cgi.c?cvsroot=ossp&r1=1.1.1.2&r2=1.1.1.3
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/jitterbug/includes.h?cvsroot=ossp&r1=1.1.1.1&r2=1.1.1.2
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/jitterbug/jitterbug.c?cvsroot=ossp&r1=1.1.1.2&r2=1.1.1.3
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/jitterbug/loadparm.c?cvsroot=ossp&r1=1.1.1.2&r2=1.1.1.3
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/jitterbug/proto.h?cvsroot=ossp&r1=1.1.1.2&r2=1.1.1.3
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/jitterbug/pulldown.c?cvsroot=ossp&r1=1.1.1.1&r2=1.1.1.2
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/jitterbug/snprintf.c?cvsroot=ossp&r1=1.1.1.1&r2=1.1.1.2
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/jitterbug/util.c?cvsroot=ossp&r1=1.1.1.2&r2=1.1.1.3

From ossp-cvs-owner@ossp.org  Wed Aug 22 09:54:37 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7M7sZr32811; Wed, 22 Aug 2001 09:54:35 +0200 (CEST)
Date: Wed, 22 Aug 2001 09:54:35 +0200 (CEST)
Message-Id: <200108220754.f7M7sZr32811@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/jitterbug COPYING INSTALL Makefile.in README acco...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   22-Aug-2001 09:54:35
  Branch: VENDOR                           Handle: 19700101010000998463272

  Modified files:           (Branch: VENDOR)
    ossp-pkg/jitterbug      Makefile.in cgi.c includes.h jitterbug.c
                            loadparm.c proto.h pulldown.c snprintf.c util.c
  Touched files:            (Branch: VENDOR)
    ossp-pkg/jitterbug      COPYING INSTALL README acconfig.h config.guess
                            config.h.in config.sub configure configure.in
                            html.c html.h jconfig.h jitterbug.h list.c lock.c
                            match.c mkproto.awk new_message.c notify.c
                            search.c smtp.c version.h vslprintf.c

  Log:
    Import of Jitterbug 20010822
    
    [Release Tag: JITTERBUG_20010822]

  Summary:
    Revision    Changes     Path
    1.1.1.3     +1  -1      ossp-pkg/jitterbug/Makefile.in
    1.1.1.3     +16 -2      ossp-pkg/jitterbug/cgi.c
    1.1.1.2     +4  -0      ossp-pkg/jitterbug/includes.h
    1.1.1.3     +29 -28     ossp-pkg/jitterbug/jitterbug.c
    1.1.1.3     +12 -12     ossp-pkg/jitterbug/loadparm.c
    1.1.1.3     +4  -4      ossp-pkg/jitterbug/proto.h
    1.1.1.2     +2  -1      ossp-pkg/jitterbug/pulldown.c
    1.1.1.2     +4  -4      ossp-pkg/jitterbug/snprintf.c
    1.1.1.3     +26 -0      ossp-pkg/jitterbug/util.c
  ____________________________________________________________________________

  Index: ossp-pkg/jitterbug/Makefile.in
  ============================================================
  $ cvs diff -u -r1.1.1.2 -r1.1.1.3 Makefile.in
  --- ossp-pkg/jitterbug/Makefile.in	2000/05/31 19:56:41	1.1.1.2
  +++ ossp-pkg/jitterbug/Makefile.in	2001/08/22 07:54:22	1.1.1.3
  @@ -10,7 +10,7 @@
   #INSTALL_MAN=@prefix@/man
   #INSTALLCMD=@INSTALL@
   
  -LIBS=@LIBS@
  +LIBS=@LIBS@ -lz
   CC=@CC@
   CFLAGS=@CFLAGS@
   
  Index: ossp-pkg/jitterbug/cgi.c
  ============================================================
  $ cvs diff -u -r1.1.1.2 -r1.1.1.3 cgi.c
  --- ossp-pkg/jitterbug/cgi.c	2000/05/31 19:56:41	1.1.1.2
  +++ ossp-pkg/jitterbug/cgi.c	2001/08/22 07:54:24	1.1.1.3
  @@ -445,6 +445,19 @@
   	}
   }
   
  +
  +static void gzip_input(void)
  +{
  +	gzFile *g = gzdopen(1, "w");
  +	char buf[1024];
  +	int n;
  +
  +	while ((n=read(0, buf, sizeof(buf))) > 0) {
  +		gzwrite(g, buf, n);
  +	}
  +	gzclose(g);
  +}
  +
   /***************************************************************************
   setup for gzip encoding
     ***************************************************************************/
  @@ -457,11 +470,12 @@
   	if (pipe(fd) != 0) fatal("failed to create pipe");
   
   	if (fork()) {
  +		gzFile *gz;
   		if (dup2(fd[0],0) != 0) fatal("dup2 failed\n");
   		if (fd[0] != 0) close(fd[0]);
   		close(fd[1]);
  -		execl(lp_gzip_path(), "gzip", "-f", NULL);
  -		fatal("execl of %s failed\n", lp_gzip_path());
  +		gzip_input();
  +		_exit(0);
   	}
   
   	if (dup2(fd[1],1) != 1) {
  Index: ossp-pkg/jitterbug/includes.h
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 includes.h
  --- ossp-pkg/jitterbug/includes.h	2000/05/31 19:54:30	1.1.1.1
  +++ ossp-pkg/jitterbug/includes.h	2001/08/22 07:54:27	1.1.1.2
  @@ -21,6 +21,8 @@
   #include <unistd.h>
   #endif
   #include <stdio.h>
  +#include <pwd.h>
  +#include <grp.h>
   
   #ifdef HAVE_SYS_PARAM_H
   #include <sys/param.h>
  @@ -157,3 +159,5 @@
   extern char *sys_errlist[];
   #define strerror(i) sys_errlist[i]
   #endif
  +
  +#include "zlib.h"
  Index: ossp-pkg/jitterbug/jitterbug.c
  ============================================================
  $ cvs diff -u -r1.1.1.2 -r1.1.1.3 jitterbug.c
  --- ossp-pkg/jitterbug/jitterbug.c	2000/05/31 19:56:41	1.1.1.2
  +++ ossp-pkg/jitterbug/jitterbug.c	2001/08/22 07:54:29	1.1.1.3
  @@ -209,7 +209,7 @@
   				
   				while ((*p) &&
   				       (isalnum(*p) || 
  -					strchr("/.@~-_#;&?:", *p))) {
  +					strchr("/.@~-_#;&?:=", *p))) {
   					p++;
   				}
   				if (p[-1] == '.') p--;
  @@ -547,7 +547,31 @@
   	char *dir;
   	time_t t;
   	char buf[10];
  +	gid_t gid;
  +	uid_t uid;
   
  +	p = getenv("AUTH_TYPE");
  +	if (!p || !*p) {
  +		guest = 1;
  +	}
  +	
  +	user = lp_auth_user();
  +	if (user && *user) {
  +		p = getenv("REMOTE_USER");
  +		if (!p || strcmp(p, user)) {
  +			guest = 1;
  +		}
  +	}
  +
  +	if (guest) {
  +		gid = interpret_gid(lp_guest_gid());
  +		uid = interpret_uid(lp_guest_uid());
  +	} else {
  +		gid = interpret_gid(lp_gid());
  +		uid = interpret_uid(lp_uid());
  +	}
  +
  +
   	/* this looks pointless, but it is needed in order for the
   	   C library on some systems to fetch the timezone info
   	   before the chroot */
  @@ -577,33 +601,11 @@
   		fatal("failed to chdir(%s)", dir);
   	}
   
  -	p = getenv("AUTH_TYPE");
  -	if (!p || !*p) {
  -		guest = 1;
  -	}
  -	
  -	user = lp_auth_user();
  -	if (user && *user) {
  -		p = getenv("REMOTE_USER");
  -		if (!p || strcmp(p, user)) {
  -			guest = 1;
  -		}
  +	if (getgid() != gid && setgid(gid)) {
  +		fatal("failed to set gid %d", (int)gid);
   	}
  -
  -	if (guest) {
  -		if (getgid() != (gid_t)lp_guest_gid() && setgid(lp_guest_gid())) {
  -			fatal("failed to set guest gid");
  -		}
  -		if (getuid() != (uid_t)lp_guest_uid() && setuid(lp_guest_uid())) {
  -			fatal("failed to set guest uid");
  -		}
  -	} else {
  -		if (getgid() != (gid_t)lp_gid() && setgid(lp_gid())) {
  -			fatal("failed to set gid to %d", lp_gid());
  -		}
  -		if (getuid() != (uid_t)lp_uid() && setuid(lp_uid())) {
  -			fatal("failed to set uid to %d", lp_uid());
  -		}
  +	if (getuid() != uid && setuid(uid)) {
  +		fatal("failed to set uid %d", (int)uid);
   	}
   }
   
  @@ -1991,7 +1993,6 @@
   		add_audit(id, "changed notification");
   	}
   
  -	add_audit(id, "foobar");
   	pulldowns_do_changes(id);
   
   	unlock_system();
  Index: ossp-pkg/jitterbug/loadparm.c
  ============================================================
  $ cvs diff -u -r1.1.1.2 -r1.1.1.3 loadparm.c
  --- ossp-pkg/jitterbug/loadparm.c	2000/05/31 19:56:41	1.1.1.2
  +++ ossp-pkg/jitterbug/loadparm.c	2001/08/22 07:54:30	1.1.1.3
  @@ -57,10 +57,10 @@
   static char *decoder;
   static char *pr_identifier;
   static char *pulldown_directory;
  -static int guest_gid;
  -static int guest_uid;
  -static int gid;
  -static int uid;
  +static char *guest_gid;
  +static char *guest_uid;
  +static char *gid;
  +static char *uid;
   static int display_binary;
   static int guest_download;
   static int group_authentication;
  @@ -76,10 +76,10 @@
    {"base directory", P_STRING, (void *)&base_directory, FLAG_MANDATORY, NULL},
    {"chroot directory", P_STRING, (void *)&chroot_directory, 0, NULL},
    {"auth user", P_STRING, (void *)&auth_user, 0, NULL},
  - {"guest gid", P_INTEGER, (void *)&guest_gid, FLAG_MANDATORY, NULL},
  - {"guest uid", P_INTEGER, (void *)&guest_uid, FLAG_MANDATORY, NULL},
  - {"uid", P_INTEGER, (void *)&uid, FLAG_MANDATORY, NULL},
  - {"gid", P_INTEGER, (void *)&gid, FLAG_MANDATORY, NULL},
  + {"guest gid", P_STRING, (void *)&guest_gid, FLAG_MANDATORY, NULL},
  + {"guest uid", P_STRING, (void *)&guest_uid, FLAG_MANDATORY, NULL},
  + {"uid", P_STRING, (void *)&uid, FLAG_MANDATORY, NULL},
  + {"gid", P_STRING, (void *)&gid, FLAG_MANDATORY, NULL},
    {"display binary", P_BOOL, (void *)&display_binary, 0, NULL},
    {"background", P_STRING, (void *)&background, 0, "/images/back.gif"},
    {"group authentication", P_BOOL, (void *)&group_authentication, 0, NULL},
  @@ -256,22 +256,22 @@
   	return auth_user;
   }
   
  -int lp_guest_gid(void)
  +char *lp_guest_gid(void)
   {
   	return guest_gid;
   }
   
  -int lp_guest_uid(void)
  +char *lp_guest_uid(void)
   {
   	return guest_uid;
   }
   
  -int lp_gid(void)
  +char *lp_gid(void)
   {
   	return gid;
   }
   
  -int lp_uid(void)
  +char *lp_uid(void)
   {
   	return uid;
   }
  Index: ossp-pkg/jitterbug/proto.h
  ============================================================
  $ cvs diff -u -r1.1.1.2 -r1.1.1.3 proto.h
  --- ossp-pkg/jitterbug/proto.h	2000/05/31 19:56:41	1.1.1.2
  +++ ossp-pkg/jitterbug/proto.h	2001/08/22 07:54:31	1.1.1.3
  @@ -61,10 +61,10 @@
   char *lp_base_directory(void);
   char *lp_chroot_directory(void);
   char *lp_auth_user(void);
  -int lp_guest_gid(void);
  -int lp_guest_uid(void);
  -int lp_gid(void);
  -int lp_uid(void);
  +char *lp_guest_gid(void);
  +char *lp_guest_uid(void);
  +char *lp_gid(void);
  +char *lp_uid(void);
   int lp_display_binary(void);
   int lp_guest_download(void);
   int lp_gzip_download(void);
  Index: ossp-pkg/jitterbug/pulldown.c
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 pulldown.c
  --- ossp-pkg/jitterbug/pulldown.c	2000/05/31 19:56:41	1.1.1.1
  +++ ossp-pkg/jitterbug/pulldown.c	2001/08/22 07:54:31	1.1.1.2
  @@ -129,8 +129,9 @@
   		
   		list = pulldown_list(pulldowns[i]);
   		buf = load_file(xsprintf("%s.%s", id, pulldowns[i]), NULL, 0);
  +		if (!buf) return 0;
   		trim_string(buf, NULL, "\n");
  -		if (!buf || strcmp(v, buf)!=0) return 0;
  +		if (strcmp(v, buf)!=0) return 0;
   	}
   
   	return 1;
  Index: ossp-pkg/jitterbug/snprintf.c
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 snprintf.c
  --- ossp-pkg/jitterbug/snprintf.c	2000/05/31 19:54:30	1.1.1.1
  +++ ossp-pkg/jitterbug/snprintf.c	2001/08/22 07:54:31	1.1.1.2
  @@ -263,7 +263,7 @@
         case 'd':
         case 'i':
   	if (cflags == DP_C_SHORT) 
  -	  value = va_arg (args, short int);
  +	  value = (short) va_arg (args, int);
   	else if (cflags == DP_C_LONG)
   	  value = va_arg (args, long int);
   	else
  @@ -273,7 +273,7 @@
         case 'o':
   	flags |= DP_F_UNSIGNED;
   	if (cflags == DP_C_SHORT)
  -	  value = va_arg (args, unsigned short int);
  +	  value = (unsigned short) va_arg (args, unsigned );
   	else if (cflags == DP_C_LONG)
   	  value = (long)va_arg (args, unsigned long int);
   	else
  @@ -283,7 +283,7 @@
         case 'u':
   	flags |= DP_F_UNSIGNED;
   	if (cflags == DP_C_SHORT)
  -	  value = va_arg (args, unsigned short int);
  +	  value = (unsigned short) va_arg (args, unsigned int);
   	else if (cflags == DP_C_LONG)
   	  value = (long)va_arg (args, unsigned long int);
   	else
  @@ -295,7 +295,7 @@
         case 'x':
   	flags |= DP_F_UNSIGNED;
   	if (cflags == DP_C_SHORT)
  -	  value = va_arg (args, unsigned short int);
  +	  value = va_arg (args, unsigned int);
   	else if (cflags == DP_C_LONG)
   	  value = (long)va_arg (args, unsigned long int);
   	else
  Index: ossp-pkg/jitterbug/util.c
  ============================================================
  $ cvs diff -u -r1.1.1.2 -r1.1.1.3 util.c
  --- ossp-pkg/jitterbug/util.c	2000/05/31 19:56:41	1.1.1.2
  +++ ossp-pkg/jitterbug/util.c	2001/08/22 07:54:32	1.1.1.3
  @@ -674,3 +674,29 @@
   	if (!s) return "(NULL)";
   	return s;
   }
  +
  +gid_t interpret_gid(char *s)
  +{
  +	struct group *grp;
  +	grp = getgrnam(s);
  +	if (!grp) {
  +		if (!isdigit(*s)) {
  +			fatal("group %s not found\n", s);
  +		}
  +		return atoi(s);
  +	}
  +	return grp->gr_gid;
  +}
  +
  +uid_t interpret_uid(char *s)
  +{
  +	struct passwd *pwd;
  +	pwd = getpwnam(s);
  +	if (!pwd) {
  +		if (!isdigit(*s)) {
  +			fatal("user %s not found\n", s);
  +		}
  +		return atoi(s);
  +	}
  +	return pwd->pw_uid;
  +}

From ossp-cvs-owner@ossp.org  Wed Aug 22 10:02:26 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7M82Qj34332; Wed, 22 Aug 2001 10:02:26 +0200 (CEST)
Date: Wed, 22 Aug 2001 10:02:26 +0200 (CEST)
Message-Id: <200108220802.f7M82Qj34332@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/jitterbug jitterbug.c loadparm.c proto.h snprintf...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   22-Aug-2001 10:02:26
  Branch: HEAD                             Handle: 2001082209022500

  Modified files:
    ossp-pkg/jitterbug      jitterbug.c loadparm.c proto.h snprintf.c util.c

  Log:
    Solve conflicts after import

  Summary:
    Revision    Changes     Path
    1.8         +29 -12     ossp-pkg/jitterbug/jitterbug.c
    1.5         +12 -12     ossp-pkg/jitterbug/loadparm.c
    1.5         +4  -4      ossp-pkg/jitterbug/proto.h
    1.3         +4  -4      ossp-pkg/jitterbug/snprintf.c
    1.5         +25 -0      ossp-pkg/jitterbug/util.c
  ____________________________________________________________________________

  Index: ossp-pkg/jitterbug/jitterbug.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 jitterbug.c
  --- ossp-pkg/jitterbug/jitterbug.c	2001/03/03 16:03:25	1.7
  +++ ossp-pkg/jitterbug/jitterbug.c	2001/08/22 08:02:25	1.8
  @@ -230,7 +230,7 @@
   				
   				while ((*p) &&
   				       (isalnum(*p) || 
  -					strchr("/.@~-_#;&?:", *p))) {
  +					strchr("/.@~-_#;&?:=", *p))) {
   					p++;
   				}
   				if (p[-1] == '.') p--;
  @@ -572,7 +572,31 @@
   	char *dir;
   	time_t t;
   	char buf[10];
  +	gid_t gid;
  +	uid_t uid;
   
  +	p = getenv("AUTH_TYPE");
  +	if (!p || !*p) {
  +		guest = 1;
  +	}
  +	
  +	user = lp_auth_user();
  +	if (user && *user) {
  +		p = getenv("REMOTE_USER");
  +		if (!p || strcmp(p, user)) {
  +			guest = 1;
  +		}
  +	}
  +
  +	if (guest) {
  +		gid = interpret_gid(lp_guest_gid());
  +		uid = interpret_uid(lp_guest_uid());
  +	} else {
  +		gid = interpret_gid(lp_gid());
  +		uid = interpret_uid(lp_uid());
  +	}
  +
  +
   	/* this looks pointless, but it is needed in order for the
   	   C library on some systems to fetch the timezone info
   	   before the chroot */
  @@ -602,17 +626,11 @@
   		fatal("failed to chdir(%s)", dir);
   	}
   
  -	p = getenv("AUTH_TYPE");
  -	if (!p || !*p) {
  -		guest = 1;
  +	if (getgid() != gid && setgid(gid)) {
  +		fatal("failed to set gid %d", (int)gid);
   	}
  -	
  -	authuser = lp_auth_user();
  -	if (authuser && *authuser) {
  -		p = getenv("REMOTE_USER");
  -		if (!p || strcmp(p, authuser)) {
  -			guest = 1;
  -		}
  +	if (getuid() != uid && setuid(uid)) {
  +		fatal("failed to set uid %d", (int)uid);
   	}
   
   	if (guest) {
  @@ -2111,7 +2129,6 @@
   		add_audit(id, "changed notification");
   	}
   
  -	add_audit(id, "foobar");
   	pulldowns_do_changes(id);
   
   	unlock_system();
  Index: ossp-pkg/jitterbug/loadparm.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 loadparm.c
  --- ossp-pkg/jitterbug/loadparm.c	2000/06/02 15:42:06	1.4
  +++ ossp-pkg/jitterbug/loadparm.c	2001/08/22 08:02:25	1.5
  @@ -66,10 +66,10 @@
   static char *decoder;
   static char *pr_identifier;
   static char *pulldown_directory;
  -static int guest_gid;
  -static int guest_uid;
  -static int gid;
  -static int uid;
  +static char *guest_gid;
  +static char *guest_uid;
  +static char *gid;
  +static char *uid;
   static int display_binary;
   static int guest_download;
   static int group_authentication;
  @@ -85,10 +85,10 @@
    {"base directory", P_STRING, (void *)&base_directory, FLAG_MANDATORY, NULL},
    {"chroot directory", P_STRING, (void *)&chroot_directory, 0, NULL},
    {"auth user", P_STRING, (void *)&auth_user, 0, NULL},
  - {"guest gid", P_INTEGER, (void *)&guest_gid, FLAG_MANDATORY, NULL},
  - {"guest uid", P_INTEGER, (void *)&guest_uid, FLAG_MANDATORY, NULL},
  - {"uid", P_INTEGER, (void *)&uid, FLAG_MANDATORY, NULL},
  - {"gid", P_INTEGER, (void *)&gid, FLAG_MANDATORY, NULL},
  + {"guest gid", P_STRING, (void *)&guest_gid, FLAG_MANDATORY, NULL},
  + {"guest uid", P_STRING, (void *)&guest_uid, FLAG_MANDATORY, NULL},
  + {"uid", P_STRING, (void *)&uid, FLAG_MANDATORY, NULL},
  + {"gid", P_STRING, (void *)&gid, FLAG_MANDATORY, NULL},
    {"display binary", P_BOOL, (void *)&display_binary, 0, NULL},
    {"background", P_STRING, (void *)&background, 0, "/images/back.gif"},
    {"group authentication", P_BOOL, (void *)&group_authentication, 0, NULL},
  @@ -274,22 +274,22 @@
   	return auth_user;
   }
   
  -int lp_guest_gid(void)
  +char *lp_guest_gid(void)
   {
   	return guest_gid;
   }
   
  -int lp_guest_uid(void)
  +char *lp_guest_uid(void)
   {
   	return guest_uid;
   }
   
  -int lp_gid(void)
  +char *lp_gid(void)
   {
   	return gid;
   }
   
  -int lp_uid(void)
  +char *lp_uid(void)
   {
   	return uid;
   }
  Index: ossp-pkg/jitterbug/proto.h
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 proto.h
  --- ossp-pkg/jitterbug/proto.h	2000/06/02 15:42:06	1.4
  +++ ossp-pkg/jitterbug/proto.h	2001/08/22 08:02:25	1.5
  @@ -61,10 +61,10 @@
   char *lp_base_directory(void);
   char *lp_chroot_directory(void);
   char *lp_auth_user(void);
  -int lp_guest_gid(void);
  -int lp_guest_uid(void);
  -int lp_gid(void);
  -int lp_uid(void);
  +char *lp_guest_gid(void);
  +char *lp_guest_uid(void);
  +char *lp_gid(void);
  +char *lp_uid(void);
   int lp_display_binary(void);
   int lp_guest_download(void);
   int lp_gzip_download(void);
  Index: ossp-pkg/jitterbug/snprintf.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 snprintf.c
  --- ossp-pkg/jitterbug/snprintf.c	2001/03/03 15:01:58	1.2
  +++ ossp-pkg/jitterbug/snprintf.c	2001/08/22 08:02:25	1.3
  @@ -263,7 +263,7 @@
         case 'd':
         case 'i':
   	if (cflags == DP_C_SHORT) 
  -	  value = va_arg (args, short int);
  +	  value = (short) va_arg (args, int);
   	else if (cflags == DP_C_LONG)
   	  value = va_arg (args, long int);
   	else
  @@ -273,7 +273,7 @@
         case 'o':
   	flags |= DP_F_UNSIGNED;
   	if (cflags == DP_C_SHORT)
  -	  value = va_arg (args, unsigned short int);
  +	  value = (unsigned short) va_arg (args, unsigned );
   	else if (cflags == DP_C_LONG)
   	  value = (long)va_arg (args, unsigned long int);
   	else
  @@ -283,7 +283,7 @@
         case 'u':
   	flags |= DP_F_UNSIGNED;
   	if (cflags == DP_C_SHORT)
  -	  value = va_arg (args, unsigned short int);
  +	  value = (unsigned short) va_arg (args, unsigned int);
   	else if (cflags == DP_C_LONG)
   	  value = (long)va_arg (args, unsigned long int);
   	else
  @@ -295,7 +295,7 @@
         case 'x':
   	flags |= DP_F_UNSIGNED;
   	if (cflags == DP_C_SHORT)
  -	  value = va_arg (args, unsigned short int);
  +	  value = va_arg (args, unsigned int);
   	else if (cflags == DP_C_LONG)
   	  value = (long)va_arg (args, unsigned long int);
   	else
  Index: ossp-pkg/jitterbug/util.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 util.c
  --- ossp-pkg/jitterbug/util.c	2000/06/02 15:42:06	1.4
  +++ ossp-pkg/jitterbug/util.c	2001/08/22 08:02:25	1.5
  @@ -778,3 +778,28 @@
   	return p1;
   }
   
  +gid_t interpret_gid(char *s)
  +{
  +	struct group *grp;
  +	grp = getgrnam(s);
  +	if (!grp) {
  +		if (!isdigit(*s)) {
  +			fatal("group %s not found\n", s);
  +		}
  +		return atoi(s);
  +	}
  +	return grp->gr_gid;
  +}
  +
  +uid_t interpret_uid(char *s)
  +{
  +	struct passwd *pwd;
  +	pwd = getpwnam(s);
  +	if (!pwd) {
  +		if (!isdigit(*s)) {
  +			fatal("user %s not found\n", s);
  +		}
  +		return atoi(s);
  +	}
  +	return pwd->pw_uid;
  +}

From ossp-cvs-owner@ossp.org  Wed Aug 22 10:03:04 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7M833W34412; Wed, 22 Aug 2001 10:03:03 +0200 (CEST)
Date: Wed, 22 Aug 2001 10:03:03 +0200 (CEST)
Message-Id: <200108220803.f7M833W34412@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/jitterbug shtool
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   22-Aug-2001 10:03:03
  Branch: HEAD                             Handle: 2001082209030200

  Modified files:
    ossp-pkg/jitterbug      shtool

  Log:
    Update shtool

  Summary:
    Revision    Changes     Path
    1.3         +50 -15     ossp-pkg/jitterbug/shtool
  ____________________________________________________________________________

  Index: ossp-pkg/jitterbug/shtool
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 shtool
  --- ossp-pkg/jitterbug/shtool	2001/03/03 14:46:38	1.2
  +++ ossp-pkg/jitterbug/shtool	2001/08/22 08:03:02	1.3
  @@ -6,7 +6,7 @@
   ##  See http://www.gnu.org/software/shtool/ for more information.
   ##  See ftp://ftp.gnu.org/gnu/shtool/ for latest version.
   ##
  -##  Version:  1.5.2 (27-Feb-2001)
  +##  Version:  1.5.4 (14-Jun-2001)
   ##  Contents: 5/17 available modules
   ##
   
  @@ -26,7 +26,7 @@
   ##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
   ##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
   ##
  -##  Notice: Given that you include this file verbatim into your own
  +##  NOTICE: Given that you include this file verbatim into your own
   ##  source tree, you are justified in saying that it remains separate
   ##  from your package, and that this way you are simply just using GNU
   ##  shtool. So, in this situation, there is no requirement that your
  @@ -65,11 +65,11 @@
       exit 1
   fi
   if [ ".$1" = ".-h" -o ".$1" = ".--help" ]; then
  -    echo "This is GNU shtool, version 1.5.2 (27-Feb-2001)"
  +    echo "This is GNU shtool, version 1.5.4 (14-Jun-2001)"
       echo "Copyright (c) 1994-2001 Ralf S. Engelschall <rse@engelschall.com>"
       echo "Report bugs to <bug-shtool@gnu.org>"
       echo ''
  -    echo "Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]" 
  +    echo "Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]"
       echo ''
       echo 'Available global <options>:'
       echo '  -v, --version   display shtool version information'
  @@ -83,8 +83,8 @@
       echo '           [-e<sed-cmd>] <file> [<file> ...] <path>'
       echo '  mkdir    [-t] [-f] [-p] [-m<mode>] <dir> [<dir> ...]'
       echo '  fixperm  [-v] [-t] <path> [<path> ...]'
  -    echo '  tarball  [-t] [-v] [-o <tarball>] [-c <prog>] [-d <dir>] [-u'
  -    echo '           <user>] [-g <group>] [-e <pattern>] <path> [<path> ...]'
  +    echo '  tarball  [-t] [-v] [-o<tarball>] [-c<prog>] [-d<dir>] [-u<user>]'
  +    echo '           [-g<group>] [-e<pattern>] <path> [<path> ...]'
       echo ''
       echo 'Not available <cmd-name> (because module was not built-in):'
       echo '  mdate    [-n] [-z] [-s] [-d] [-f<str>] [-o<spec>] <path>'
  @@ -105,7 +105,7 @@
       exit 0
   fi
   if [ ".$1" = ".-v" -o ".$1" = ."--version" ]; then
  -    echo "GNU shtool 1.5.2 (27-Feb-2001)"
  +    echo "GNU shtool 1.5.4 (14-Jun-2001)"
       exit 0
   fi
   if [ ".$1" = ".-r" -o ".$1" = ."--recreate" ]; then
  @@ -180,7 +180,7 @@
           ;;
       tarball )
           str_tool="tarball"
  -        str_usage="[-t] [-v] [-o <tarball>] [-c <prog>] [-d <dir>] [-u <user>] [-g <group>] [-e <pattern>] <path> [<path> ...]"
  +        str_usage="[-t] [-v] [-o<tarball>] [-c<prog>] [-d<dir>] [-u<user>] [-g<group>] [-e<pattern>] <path> [<path> ...]"
           gen_tmpfile=yes
           arg_spec="1+"
           opt_spec="t.v.o:c:d:u:g:e:"
  @@ -376,7 +376,7 @@
       fi
       
       #   determine terminal bold sequence
  -    term_bold='' 
  +    term_bold=''
       term_norm=''
       if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[Bb]'`" != . ]; then
           case $TERM in
  @@ -427,7 +427,7 @@
       
       #   determine user name
       username=''
  -    if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[uU]'`" != . ]; then
  +    if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[uUgG]'`" != . ]; then
           username="$LOGNAME"
           if [ ".$username" = . ]; then
               username="$USER"
  @@ -469,8 +469,38 @@
           fi
       fi
       
  -    #   determine host name
  +    #   determine (primary) group id
  +    groupid=''
  +    if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[gG]'`" != . ]; then
  +        groupid=`egrep "^${username}:" /etc/passwd 2>/dev/null | \
  +                 sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
  +        if [ ".$groupid" = . ]; then
  +            groupid=`(ypcat passwd) 2>/dev/null | egrep "^${username}:" | \
  +                     sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
  +            if [ ".$groupid" = . ]; then
  +                groupid='?'
  +            fi
  +        fi
  +    fi
  +    
  +    #   determine (primary) group name
  +    groupname=''
  +    if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%g'`" != . ]; then
  +        groupname=`egrep "^[^:]*:[^:]*:${groupid}:" /etc/group 2>/dev/null | \
  +                   sed -e 's/:.*$//'`
  +        if [ ".$groupname" = . ]; then
  +            groupname=`(ypcat group) 2>/dev/null | \
  +                       egrep "^[^:]*:[^:]*:${groupid}:" | \
  +                       sed -e 's/:.*$//'`
  +            if [ ".$groupname" = . ]; then
  +                groupname='?'
  +            fi
  +        fi
  +    fi
  +    
  +    #   determine host and domain name
       hostname=''
  +    domainname=''
       if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%h'`" != . ]; then
           hostname="`(uname -n) 2>/dev/null |\
                      awk '{ printf("%s", $1); }'`"
  @@ -488,9 +518,6 @@
                   ;;
           esac
       fi
  -    
  -    #   determine domain name
  -    domainname=''
       if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%d'`" != . ]; then
           if [ ".$domainname" = . ]; then
               if [ -f /etc/resolv.conf ]; then
  @@ -550,6 +577,8 @@
                     -e "s/%b/${term_norm}/g" \
                     -e "s/%u/${username}/g" \
                     -e "s/%U/${userid}/g" \
  +                  -e "s/%g/${groupname}/g" \
  +                  -e "s/%G/${groupid}/g" \
                     -e "s/%h/${hostname}/g" \
                     -e "s/%d/${domainname}/g" \
                     -e "s/%D/${time_day}/g" \
  @@ -579,7 +608,7 @@
       ##  Originally written for shtool
       ##
       
  -    #   determine source(s) and destination 
  +    #   determine source(s) and destination
       argc=$#
       srcs=""
       while [ $# -gt 1 ]; do
  @@ -735,6 +764,12 @@
                   echo "mkdir $p" 1>&2
               fi
               mkdir $p || errstatus=$?
  +            if [ ".$opt_m" != . ]; then
  +                if [ ".$opt_t" = .yes ]; then
  +                    echo "chmod $opt_m $p" 1>&2
  +                fi
  +                chmod $opt_m $p || errstatus=$?
  +            fi
           else
               #   the smart situation
               set fnord `echo ":$p" |\

From ossp-cvs-owner@ossp.org  Wed Aug 22 10:46:13 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7M8kCp39874; Wed, 22 Aug 2001 10:46:12 +0200 (CEST)
Date: Wed, 22 Aug 2001 10:46:12 +0200 (CEST)
Message-Id: <200108220846.f7M8kCp39874@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/jitterbug jitterbug.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   22-Aug-2001 10:46:12
  Branch: HEAD                             Handle: 2001082209461200

  Modified files:
    ossp-pkg/jitterbug      jitterbug.c

  Log:
    Remove left-over code

  Summary:
    Revision    Changes     Path
    1.9         +1  -17     ossp-pkg/jitterbug/jitterbug.c
  ____________________________________________________________________________

  Index: ossp-pkg/jitterbug/jitterbug.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 jitterbug.c
  --- ossp-pkg/jitterbug/jitterbug.c	2001/08/22 08:02:25	1.8
  +++ ossp-pkg/jitterbug/jitterbug.c	2001/08/22 08:46:12	1.9
  @@ -568,7 +568,7 @@
      they can only get at the bug reports files */
   static void do_chroot(void)
   {
  -	char *p, *authuser;
  +	char *p;
   	char *dir;
   	time_t t;
   	char buf[10];
  @@ -631,22 +631,6 @@
   	}
   	if (getuid() != uid && setuid(uid)) {
   		fatal("failed to set uid %d", (int)uid);
  -	}
  -
  -	if (guest) {
  -		if (getgid() != (gid_t)lp_guest_gid() && setgid(lp_guest_gid())) {
  -			fatal("failed to set guest gid");
  -		}
  -		if (getuid() != (uid_t)lp_guest_uid() && setuid(lp_guest_uid())) {
  -			fatal("failed to set guest uid");
  -		}
  -	} else {
  -		if (getgid() != (gid_t)lp_gid() && setgid(lp_gid())) {
  -			fatal("failed to set gid to %d", lp_gid());
  -		}
  -		if (getuid() != (uid_t)lp_uid() && setuid(lp_uid())) {
  -			fatal("failed to set uid to %d", lp_uid());
  -		}
   	}
   }
   

From ossp-cvs-owner@ossp.org  Wed Aug 22 10:47:35 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7M8lZV40007; Wed, 22 Aug 2001 10:47:35 +0200 (CEST)
Date: Wed, 22 Aug 2001 10:47:35 +0200 (CEST)
Message-Id: <200108220847.f7M8lZV40007@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/jitterbug mkproto.awk proto.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   22-Aug-2001 10:47:34
  Branch: HEAD                             Handle: 2001082209473400

  Modified files:
    ossp-pkg/jitterbug      mkproto.awk proto.h

  Log:
    Fix prototype generation

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/jitterbug/mkproto.awk
    1.6         +2  -0      ossp-pkg/jitterbug/proto.h
  ____________________________________________________________________________

  Index: ossp-pkg/jitterbug/mkproto.awk
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 mkproto.awk
  --- ossp-pkg/jitterbug/mkproto.awk	2000/05/31 19:54:30	1.1.1.1
  +++ ossp-pkg/jitterbug/mkproto.awk	2001/08/22 08:47:34	1.2
  @@ -27,7 +27,7 @@
     next;
   }
   
  -!/^unsigned|^mode_t|^DIR|^user|^int|^char|^uint|^struct|^BOOL|^void|^time|^smb_shm_offset_t|^shm_offset_t|^enum remote_arch_types|arc4_key/ {
  +!/^unsigned|^mode_t|^DIR|^user|^int|^char|^uint|^struct|^BOOL|^void|^time|^smb_shm_offset_t|^shm_offset_t|^enum remote_arch_types|arc4_key|gid_t|uid_t/ {
     next;
   }
   
  Index: ossp-pkg/jitterbug/proto.h
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 proto.h
  --- ossp-pkg/jitterbug/proto.h	2001/08/22 08:02:25	1.5
  +++ ossp-pkg/jitterbug/proto.h	2001/08/22 08:47:34	1.6
  @@ -163,6 +163,8 @@
   char *getenv_null(char *ename);
   void forward_mail(char *mbuf, char *to, int id);
   char *getsubject(char *mbuf);
  +gid_t interpret_gid(char *s);
  +uid_t interpret_uid(char *s);
   
   /*The following definitions come from  vslprintf.c  */
   

From ossp-cvs-owner@ossp.org  Wed Aug 22 10:47:46 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7M8ljX40053; Wed, 22 Aug 2001 10:47:45 +0200 (CEST)
Date: Wed, 22 Aug 2001 10:47:45 +0200 (CEST)
Message-Id: <200108220847.f7M8ljX40053@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/jitterbug cgi.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   22-Aug-2001 10:47:45
  Branch: HEAD                             Handle: 2001082209474500

  Modified files:
    ossp-pkg/jitterbug      cgi.c

  Log:
    Fix warning

  Summary:
    Revision    Changes     Path
    1.2         +15 -4      ossp-pkg/jitterbug/cgi.c
  ____________________________________________________________________________

  Index: ossp-pkg/jitterbug/cgi.c
  ============================================================
  $ cvs diff -u -r1.1.1.3 -r1.2 cgi.c
  --- ossp-pkg/jitterbug/cgi.c	2001/08/22 07:54:24	1.1.1.3
  +++ ossp-pkg/jitterbug/cgi.c	2001/08/22 08:47:45	1.2
  @@ -470,7 +470,6 @@
   	if (pipe(fd) != 0) fatal("failed to create pipe");
   
   	if (fork()) {
  -		gzFile *gz;
   		if (dup2(fd[0],0) != 0) fatal("dup2 failed\n");
   		if (fd[0] != 0) close(fd[0]);
   		close(fd[1]);

From ossp-cvs-owner@ossp.org  Wed Aug 22 10:54:41 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7M8sek40568; Wed, 22 Aug 2001 10:54:40 +0200 (CEST)
Date: Wed, 22 Aug 2001 10:54:40 +0200 (CEST)
Message-Id: <200108220854.f7M8sek40568@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/jitterbug html.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   22-Aug-2001 10:54:40
  Branch: HEAD                             Handle: 2001082209543900

  Modified files:
    ossp-pkg/jitterbug      html.h

  Log:
    Although I do not understand why GCC 3.0 complains about this usage of
    "##", it doesn't matter because ANSI C explicitly supports automatic
    concatenation of subsequent string constants. This fixes these warnings:
    
    jitterbug.c:466:14: warning: pasting ""selectid"" and ""=%d;"" does not give a valid preprocessing token
    jitterbug.c:467:14: warning: pasting ""numquotelines"" and ""=%d;"" does not give a valid preprocessing token
    jitterbug.c:468:14: warning: pasting ""casesensitive"" and ""=%d;"" does not give a valid preprocessing token
    jitterbug.c:469:14: warning: pasting ""addsignature"" and ""=%d;"" does not give a valid preprocessing token
    jitterbug.c:470:14: warning: pasting ""fullheaders"" and ""=%d;"" does not give a valid preprocessing token
    jitterbug.c:471:14: warning: pasting ""messagetype"" and ""=%d;"" does not give a valid preprocessing token

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/jitterbug/html.h
  ____________________________________________________________________________

  Index: ossp-pkg/jitterbug/html.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 html.h
  --- ossp-pkg/jitterbug/html.h	2000/05/31 20:07:42	1.2
  +++ ossp-pkg/jitterbug/html.h	2001/08/22 08:54:39	1.3
  @@ -2,4 +2,4 @@
   #define html_hiddenivar(x) do {if (x) html_input_hidden(#x, xistr((int)x)); } while (0)
   #define html_input_hiddenivar(x) do {char *_p = cgi_variable(#x); if (_p && *_p) x = atoi(_p);} while (0)
   #define html_url_var(p, x, v) (v && *v ? sprintf(p, "%s=%s;", x, v) : 0)
  -#define html_url_ivar(p, x) (x? sprintf(p, #x ## "=%d;", x) : 0)
  +#define html_url_ivar(p, x) (x? sprintf(p, #x "=%d;", x) : 0)

From ossp-cvs-owner@ossp.org  Wed Aug 22 16:05:43 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7ME5gs84693; Wed, 22 Aug 2001 16:05:42 +0200 (CEST)
Date: Wed, 22 Aug 2001 16:05:42 +0200 (CEST)
Message-Id: <200108221405.f7ME5gs84693@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/jitterbug jitterbug.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   22-Aug-2001 16:05:42
  Branch: HEAD                             Handle: 2001082215054100

  Modified files:
    ossp-pkg/jitterbug      jitterbug.c

  Log:
    Fix sanity stuff

  Summary:
    Revision    Changes     Path
    1.10        +5  -1      ossp-pkg/jitterbug/jitterbug.c
  ____________________________________________________________________________

  Index: ossp-pkg/jitterbug/jitterbug.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 jitterbug.c
  --- ossp-pkg/jitterbug/jitterbug.c	2001/08/22 08:46:12	1.9
  +++ ossp-pkg/jitterbug/jitterbug.c	2001/08/22 14:05:41	1.10
  @@ -120,7 +120,7 @@
   	}
   	
   
  -#ifdef OSSP_PATCH_SANITY
  +#if 0 && defined(OSSP_PATCH_SANITY)
   	if (strchr(fname, '/') && geteuid() == 0) return 0;
   #else
   	if (getuid() == 0) return 0;
  @@ -632,6 +632,10 @@
   	if (getuid() != uid && setuid(uid)) {
   		fatal("failed to set uid %d", (int)uid);
   	}
  +#ifdef OSSP_PATCH_SANITY
  +    seteuid(getuid());
  +    setegid(getgid());
  +#endif
   }
   
   

From ossp-cvs-owner@ossp.org  Wed Aug 22 16:06:03 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7ME61H84756; Wed, 22 Aug 2001 16:06:01 +0200 (CEST)
Date: Wed, 22 Aug 2001 16:06:01 +0200 (CEST)
Message-Id: <200108221406.f7ME61H84756@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/jitterbug configure configure.in version.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   22-Aug-2001 16:06:01
  Branch: HEAD                             Handle: 2001082215060000

  Modified files:
    ossp-pkg/jitterbug      configure configure.in version.h

  Log:
    Commit pending files after regeneration

  Summary:
    Revision    Changes     Path
    1.5         +2813 -1151 ossp-pkg/jitterbug/configure
    1.4         +6  -3      ossp-pkg/jitterbug/configure.in
    1.4         +1  -1      ossp-pkg/jitterbug/version.h
  ____________________________________________________________________________

  Index: ossp-pkg/jitterbug/configure
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 configure
  --- ossp-pkg/jitterbug/configure	2000/06/01 08:09:31	1.4
  +++ ossp-pkg/jitterbug/configure	2001/08/22 14:06:00	1.5
  @@ -1,33 +1,125 @@
   #! /bin/sh
  -
  +# From configure.in 1.0.
   # Guess values for system-dependent variables and create Makefiles.
  -# Generated automatically using autoconf version 2.13 
  -# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
  +# Generated by Autoconf 2.52.
   #
  +# Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
  +# Free Software Foundation, Inc.
   # This configure script is free software; the Free Software Foundation
   # gives unlimited permission to copy, distribute and modify it.
   
  -# Defaults:
  -ac_help=
  -ac_default_prefix=/usr/local
  -# Any additions from configure.in:
  -
   V=`sed <version.h -e 's;^[^"]*";;' -e 's;".*;;'`
   ./shtool echo -e "Configuring %BOSSP Jitterbug%b, Version %B${V}%b"
  -echo "Copyright (c) 1997-2000 Andrew Tridgell <tridge@samba.org>"
  +echo "Copyright (c) 1997-2001 Andrew Tridgell <tridge@samba.org>"
   echo ""
  -ac_help="$ac_help
  -  --disable-ossp          disable the OSSP source patches"
   
  +# Avoid depending upon Character Ranges.
  +as_cr_letters='abcdefghijklmnopqrstuvwxyz'
  +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  +as_cr_Letters=$as_cr_letters$as_cr_LETTERS
  +as_cr_digits='0123456789'
  +as_cr_alnum=$as_cr_Letters$as_cr_digits
  +
  +# Sed expression to map a string onto a valid variable name.
  +as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
  +
  +# Sed expression to map a string onto a valid CPP name.
  +as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g"
  +
  +# Be Bourne compatible
  +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
  +  emulate sh
  +  NULLCMD=:
  +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
  +  set -o posix
  +fi
  +
  +# Name of the executable.
  +as_me=`echo "$0" |sed 's,.*[\\/],,'`
  +
  +if expr a : '\(a\)' >/dev/null 2>&1; then
  +  as_expr=expr
  +else
  +  as_expr=false
  +fi
  +
  +rm -f conf$$ conf$$.exe conf$$.file
  +echo >conf$$.file
  +if ln -s conf$$.file conf$$ 2>/dev/null; then
  +  # We could just check for DJGPP; but this test a) works b) is more generic
  +  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
  +  if test -f conf$$.exe; then
  +    # Don't use ln at all; we don't have any links
  +    as_ln_s='cp -p'
  +  else
  +    as_ln_s='ln -s'
  +  fi
  +elif ln conf$$.file conf$$ 2>/dev/null; then
  +  as_ln_s=ln
  +else
  +  as_ln_s='cp -p'
  +fi
  +rm -f conf$$ conf$$.exe conf$$.file
  +
  +as_executable_p="test -f"
  +
  +# Support unset when possible.
  +if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
  +  as_unset=unset
  +else
  +  as_unset=false
  +fi
  +
  +# NLS nuisances.
  +$as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; }
  +$as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; }
  +$as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; }
  +$as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; }
  +$as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; }
  +$as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; }
  +$as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; }
  +$as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; }
  +
  +# IFS
  +# We need space, tab and new line, in precisely that order.
  +as_nl='
  +'
  +IFS=" 	$as_nl"
  +
  +# CDPATH.
  +$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; }
  +
  +# Name of the host.
  +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
  +# so uname gets run too.
  +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
  +
  +exec 6>&1
  +
  +#
  +# Initializations.
  +#
  +ac_default_prefix=/usr/local
  +cross_compiling=no
  +subdirs=
  +MFLAGS= MAKEFLAGS=
  +SHELL=${CONFIG_SHELL-/bin/sh}
  +
  +# Maximum number of lines to put in a shell here document.
  +# This variable seems obsolete.  It should probably be removed, and
  +# only ac_max_sed_lines should be used.
  +: ${ac_max_here_lines=38}
  +
  +ac_unique_file="jitterbug.c"
  +
   # Initialize some variables set by options.
  +ac_init_help=
  +ac_init_version=false
   # The variables have the same names as the options, with
   # dashes changed to underlines.
  -build=NONE
  -cache_file=./config.cache
  +cache_file=/dev/null
   exec_prefix=NONE
  -host=NONE
   no_create=
  -nonopt=NONE
   no_recursion=
   prefix=NONE
   program_prefix=NONE
  @@ -36,10 +128,15 @@
   silent=
   site=
   srcdir=
  -target=NONE
   verbose=
   x_includes=NONE
   x_libraries=NONE
  +
  +# Installation directory options.
  +# These are left unexpanded so users can "make install exec_prefix=/foo"
  +# and all the variables that are supposed to be based on exec_prefix
  +# by default will actually change.
  +# Use braces instead of parens because sh, perl, etc. also accept them.
   bindir='${exec_prefix}/bin'
   sbindir='${exec_prefix}/sbin'
   libexecdir='${exec_prefix}/libexec'
  @@ -53,17 +150,16 @@
   infodir='${prefix}/info'
   mandir='${prefix}/man'
   
  -# Initialize some other variables.
  -subdirs=
  -MFLAGS= MAKEFLAGS=
  -SHELL=${CONFIG_SHELL-/bin/sh}
  -# Maximum number of lines to put in a shell here document.
  -ac_max_here_lines=12
  +# Identity of this package.
  +PACKAGE_NAME=
  +PACKAGE_TARNAME=
  +PACKAGE_VERSION=
  +PACKAGE_STRING=
  +PACKAGE_BUGREPORT=
   
   ac_prev=
   for ac_option
   do
  -
     # If the previous option needs an argument, assign it.
     if test -n "$ac_prev"; then
       eval "$ac_prev=\$ac_option"
  @@ -71,59 +167,59 @@
       continue
     fi
   
  -  case "$ac_option" in
  -  -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
  -  *) ac_optarg= ;;
  -  esac
  +  ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
   
     # Accept the important Cygnus configure options, so we can diagnose typos.
   
  -  case "$ac_option" in
  +  case $ac_option in
   
     -bindir | --bindir | --bindi | --bind | --bin | --bi)
       ac_prev=bindir ;;
     -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
  -    bindir="$ac_optarg" ;;
  +    bindir=$ac_optarg ;;
   
     -build | --build | --buil | --bui | --bu)
  -    ac_prev=build ;;
  +    ac_prev=build_alias ;;
     -build=* | --build=* | --buil=* | --bui=* | --bu=*)
  -    build="$ac_optarg" ;;
  +    build_alias=$ac_optarg ;;
   
     -cache-file | --cache-file | --cache-fil | --cache-fi \
     | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
       ac_prev=cache_file ;;
     -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
     | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
  -    cache_file="$ac_optarg" ;;
  +    cache_file=$ac_optarg ;;
   
  +  --config-cache | -C)
  +    cache_file=config.cache ;;
  +
     -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
       ac_prev=datadir ;;
     -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
     | --da=*)
  -    datadir="$ac_optarg" ;;
  +    datadir=$ac_optarg ;;
   
     -disable-* | --disable-*)
  -    ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
  +    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
       # Reject names that are not valid shell variable names.
  -    if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
  -      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
  -    fi
  -    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
  -    eval "enable_${ac_feature}=no" ;;
  +    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
  +      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
  +   { (exit 1); exit 1; }; }
  +    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
  +    eval "enable_$ac_feature=no" ;;
   
     -enable-* | --enable-*)
  -    ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
  +    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
       # Reject names that are not valid shell variable names.
  -    if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
  -      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
  -    fi
  -    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
  -    case "$ac_option" in
  -      *=*) ;;
  +    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
  +      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
  +   { (exit 1); exit 1; }; }
  +    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
  +    case $ac_option in
  +      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
         *) ac_optarg=yes ;;
       esac
  -    eval "enable_${ac_feature}='$ac_optarg'" ;;
  +    eval "enable_$ac_feature='$ac_optarg'" ;;
   
     -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
     | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
  @@ -132,95 +228,47 @@
     -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
     | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
     | --exec=* | --exe=* | --ex=*)
  -    exec_prefix="$ac_optarg" ;;
  +    exec_prefix=$ac_optarg ;;
   
     -gas | --gas | --ga | --g)
       # Obsolete; use --with-gas.
       with_gas=yes ;;
   
  -  -help | --help | --hel | --he)
  -    # Omit some internal or obsolete options to make the list less imposing.
  -    # This message is too long to be a string in the A/UX 3.1 sh.
  -    cat << EOF
  -Usage: configure [options] [host]
  -Options: [defaults in brackets after descriptions]
  -Configuration:
  -  --cache-file=FILE       cache test results in FILE
  -  --help                  print this message
  -  --no-create             do not create output files
  -  --quiet, --silent       do not print \`checking...' messages
  -  --version               print the version of autoconf that created configure
  -Directory and file names:
  -  --prefix=PREFIX         install architecture-independent files in PREFIX
  -                          [$ac_default_prefix]
  -  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
  -                          [same as prefix]
  -  --bindir=DIR            user executables in DIR [EPREFIX/bin]
  -  --sbindir=DIR           system admin executables in DIR [EPREFIX/sbin]
  -  --libexecdir=DIR        program executables in DIR [EPREFIX/libexec]
  -  --datadir=DIR           read-only architecture-independent data in DIR
  -                          [PREFIX/share]
  -  --sysconfdir=DIR        read-only single-machine data in DIR [PREFIX/etc]
  -  --sharedstatedir=DIR    modifiable architecture-independent data in DIR
  -                          [PREFIX/com]
  -  --localstatedir=DIR     modifiable single-machine data in DIR [PREFIX/var]
  -  --libdir=DIR            object code libraries in DIR [EPREFIX/lib]
  -  --includedir=DIR        C header files in DIR [PREFIX/include]
  -  --oldincludedir=DIR     C header files for non-gcc in DIR [/usr/include]
  -  --infodir=DIR           info documentation in DIR [PREFIX/info]
  -  --mandir=DIR            man documentation in DIR [PREFIX/man]
  -  --srcdir=DIR            find the sources in DIR [configure dir or ..]
  -  --program-prefix=PREFIX prepend PREFIX to installed program names
  -  --program-suffix=SUFFIX append SUFFIX to installed program names
  -  --program-transform-name=PROGRAM
  -                          run sed PROGRAM on installed program names
  -EOF
  -    cat << EOF
  -Host type:
  -  --build=BUILD           configure for building on BUILD [BUILD=HOST]
  -  --host=HOST             configure for HOST [guessed]
  -  --target=TARGET         configure for TARGET [TARGET=HOST]
  -Features and packages:
  -  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
  -  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
  -  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
  -  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
  -  --x-includes=DIR        X include files are in DIR
  -  --x-libraries=DIR       X library files are in DIR
  -EOF
  -    if test -n "$ac_help"; then
  -      echo "--enable and --with options recognized:$ac_help"
  -    fi
  -    exit 0 ;;
  +  -help | --help | --hel | --he | -h)
  +    ac_init_help=long ;;
  +  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
  +    ac_init_help=recursive ;;
  +  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
  +    ac_init_help=short ;;
   
     -host | --host | --hos | --ho)
  -    ac_prev=host ;;
  +    ac_prev=host_alias ;;
     -host=* | --host=* | --hos=* | --ho=*)
  -    host="$ac_optarg" ;;
  +    host_alias=$ac_optarg ;;
   
     -includedir | --includedir | --includedi | --included | --include \
     | --includ | --inclu | --incl | --inc)
       ac_prev=includedir ;;
     -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
     | --includ=* | --inclu=* | --incl=* | --inc=*)
  -    includedir="$ac_optarg" ;;
  +    includedir=$ac_optarg ;;
   
     -infodir | --infodir | --infodi | --infod | --info | --inf)
       ac_prev=infodir ;;
     -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
  -    infodir="$ac_optarg" ;;
  +    infodir=$ac_optarg ;;
   
     -libdir | --libdir | --libdi | --libd)
       ac_prev=libdir ;;
     -libdir=* | --libdir=* | --libdi=* | --libd=*)
  -    libdir="$ac_optarg" ;;
  +    libdir=$ac_optarg ;;
   
     -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
     | --libexe | --libex | --libe)
       ac_prev=libexecdir ;;
     -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
     | --libexe=* | --libex=* | --libe=*)
  -    libexecdir="$ac_optarg" ;;
  +    libexecdir=$ac_optarg ;;
   
     -localstatedir | --localstatedir | --localstatedi | --localstated \
     | --localstate | --localstat | --localsta | --localst \
  @@ -229,12 +277,12 @@
     -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
     | --localstate=* | --localstat=* | --localsta=* | --localst=* \
     | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
  -    localstatedir="$ac_optarg" ;;
  +    localstatedir=$ac_optarg ;;
   
     -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
       ac_prev=mandir ;;
     -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
  -    mandir="$ac_optarg" ;;
  +    mandir=$ac_optarg ;;
   
     -nfp | --nfp | --nf)
       # Obsolete; use --without-fp.
  @@ -255,26 +303,26 @@
     -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
     | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
     | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
  -    oldincludedir="$ac_optarg" ;;
  +    oldincludedir=$ac_optarg ;;
   
     -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
       ac_prev=prefix ;;
     -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
  -    prefix="$ac_optarg" ;;
  +    prefix=$ac_optarg ;;
   
     -program-prefix | --program-prefix | --program-prefi | --program-pref \
     | --program-pre | --program-pr | --program-p)
       ac_prev=program_prefix ;;
     -program-prefix=* | --program-prefix=* | --program-prefi=* \
     | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
  -    program_prefix="$ac_optarg" ;;
  +    program_prefix=$ac_optarg ;;
   
     -program-suffix | --program-suffix | --program-suffi | --program-suff \
     | --program-suf | --program-su | --program-s)
       ac_prev=program_suffix ;;
     -program-suffix=* | --program-suffix=* | --program-suffi=* \
     | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
  -    program_suffix="$ac_optarg" ;;
  +    program_suffix=$ac_optarg ;;
   
     -program-transform-name | --program-transform-name \
     | --program-transform-nam | --program-transform-na \
  @@ -291,7 +339,7 @@
     | --program-transfo=* | --program-transf=* \
     | --program-trans=* | --program-tran=* \
     | --progr-tra=* | --program-tr=* | --program-t=*)
  -    program_transform_name="$ac_optarg" ;;
  +    program_transform_name=$ac_optarg ;;
   
     -q | -quiet | --quiet | --quie | --qui | --qu | --q \
     | -silent | --silent | --silen | --sile | --sil)
  @@ -301,7 +349,7 @@
       ac_prev=sbindir ;;
     -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
     | --sbi=* | --sb=*)
  -    sbindir="$ac_optarg" ;;
  +    sbindir=$ac_optarg ;;
   
     -sharedstatedir | --sharedstatedir | --sharedstatedi \
     | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
  @@ -312,58 +360,57 @@
     | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
     | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
     | --sha=* | --sh=*)
  -    sharedstatedir="$ac_optarg" ;;
  +    sharedstatedir=$ac_optarg ;;
   
     -site | --site | --sit)
       ac_prev=site ;;
     -site=* | --site=* | --sit=*)
  -    site="$ac_optarg" ;;
  +    site=$ac_optarg ;;
   
     -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
       ac_prev=srcdir ;;
     -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
  -    srcdir="$ac_optarg" ;;
  +    srcdir=$ac_optarg ;;
   
     -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
     | --syscon | --sysco | --sysc | --sys | --sy)
       ac_prev=sysconfdir ;;
     -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
     | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
  -    sysconfdir="$ac_optarg" ;;
  +    sysconfdir=$ac_optarg ;;
   
     -target | --target | --targe | --targ | --tar | --ta | --t)
  -    ac_prev=target ;;
  +    ac_prev=target_alias ;;
     -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
  -    target="$ac_optarg" ;;
  +    target_alias=$ac_optarg ;;
   
     -v | -verbose | --verbose | --verbos | --verbo | --verb)
       verbose=yes ;;
   
  -  -version | --version | --versio | --versi | --vers)
  -    echo "configure generated by autoconf version 2.13"
  -    exit 0 ;;
  +  -version | --version | --versio | --versi | --vers | -V)
  +    ac_init_version=: ;;
   
     -with-* | --with-*)
  -    ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
  +    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
       # Reject names that are not valid shell variable names.
  -    if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
  -      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
  -    fi
  +    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
  +      { echo "$as_me: error: invalid package name: $ac_package" >&2
  +   { (exit 1); exit 1; }; }
       ac_package=`echo $ac_package| sed 's/-/_/g'`
  -    case "$ac_option" in
  -      *=*) ;;
  +    case $ac_option in
  +      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
         *) ac_optarg=yes ;;
       esac
  -    eval "with_${ac_package}='$ac_optarg'" ;;
  +    eval "with_$ac_package='$ac_optarg'" ;;
   
     -without-* | --without-*)
  -    ac_package=`echo $ac_option|sed -e 's/-*without-//'`
  +    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
       # Reject names that are not valid shell variable names.
  -    if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
  -      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
  -    fi
  -    ac_package=`echo $ac_package| sed 's/-/_/g'`
  -    eval "with_${ac_package}=no" ;;
  +    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
  +      { echo "$as_me: error: invalid package name: $ac_package" >&2
  +   { (exit 1); exit 1; }; }
  +    ac_package=`echo $ac_package | sed 's/-/_/g'`
  +    eval "with_$ac_package=no" ;;
   
     --x)
       # Obsolete; use --with-x.
  @@ -374,98 +421,98 @@
       ac_prev=x_includes ;;
     -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
     | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
  -    x_includes="$ac_optarg" ;;
  +    x_includes=$ac_optarg ;;
   
     -x-libraries | --x-libraries | --x-librarie | --x-librari \
     | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
       ac_prev=x_libraries ;;
     -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
     | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
  -    x_libraries="$ac_optarg" ;;
  +    x_libraries=$ac_optarg ;;
   
  -  -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
  +  -*) { echo "$as_me: error: unrecognized option: $ac_option
  +Try \`$0 --help' for more information." >&2
  +   { (exit 1); exit 1; }; }
       ;;
   
  +  *=*)
  +    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
  +    # Reject names that are not valid shell variable names.
  +    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
  +      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
  +   { (exit 1); exit 1; }; }
  +    ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
  +    eval "$ac_envvar='$ac_optarg'"
  +    export $ac_envvar ;;
  +
     *)
  -    if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
  -      echo "configure: warning: $ac_option: invalid host type" 1>&2
  -    fi
  -    if test "x$nonopt" != xNONE; then
  -      { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
  -    fi
  -    nonopt="$ac_option"
  +    # FIXME: should be removed in autoconf 3.0.
  +    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
  +    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
  +      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
  +    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
       ;;
   
     esac
   done
   
   if test -n "$ac_prev"; then
  -  { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
  -fi
  -
  -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
  -
  -# File descriptor usage:
  -# 0 standard input
  -# 1 file creation
  -# 2 errors and warnings
  -# 3 some systems may open it to /dev/tty
  -# 4 used on the Kubota Titan
  -# 6 checking for... messages and results
  -# 5 compiler messages saved in config.log
  -if test "$silent" = yes; then
  -  exec 6>/dev/null
  -else
  -  exec 6>&1
  +  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
  +  { echo "$as_me: error: missing argument to $ac_option" >&2
  +   { (exit 1); exit 1; }; }
   fi
  -exec 5>./config.log
   
  -echo "\
  -This file contains any messages produced by compilers while
  -running configure, to aid debugging if configure makes a mistake.
  -" 1>&5
  +# Be sure to have absolute paths.
  +for ac_var in exec_prefix prefix
  +do
  +  eval ac_val=$`echo $ac_var`
  +  case $ac_val in
  +    [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
  +    *)  { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2
  +   { (exit 1); exit 1; }; };;
  +  esac
  +done
   
  -# Strip out --no-create and --no-recursion so they do not pile up.
  -# Also quote any args containing shell metacharacters.
  -ac_configure_args=
  -for ac_arg
  +# Be sure to have absolute paths.
  +for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
  +              localstatedir libdir includedir oldincludedir infodir mandir
   do
  -  case "$ac_arg" in
  -  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
  -  | --no-cr | --no-c) ;;
  -  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
  -  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
  -  *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
  -  ac_configure_args="$ac_configure_args '$ac_arg'" ;;
  -  *) ac_configure_args="$ac_configure_args $ac_arg" ;;
  +  eval ac_val=$`echo $ac_var`
  +  case $ac_val in
  +    [\\/$]* | ?:[\\/]* ) ;;
  +    *)  { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2
  +   { (exit 1); exit 1; }; };;
     esac
   done
   
  -# NLS nuisances.
  -# Only set these to C if already set.  These must not be set unconditionally
  -# because not all systems understand e.g. LANG=C (notably SCO).
  -# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
  -# Non-C LC_CTYPE values break the ctype check.
  -if test "${LANG+set}"   = set; then LANG=C;   export LANG;   fi
  -if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
  -if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
  -if test "${LC_CTYPE+set}"    = set; then LC_CTYPE=C;    export LC_CTYPE;    fi
  +# There might be people who depend on the old broken behavior: `$host'
  +# used to hold the argument of --host etc.
  +build=$build_alias
  +host=$host_alias
  +target=$target_alias
  +
  +# FIXME: should be removed in autoconf 3.0.
  +if test "x$host_alias" != x; then
  +  if test "x$build_alias" = x; then
  +    cross_compiling=maybe
  +    echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
  +    If a cross compiler is detected then cross compile mode will be used." >&2
  +  elif test "x$build_alias" != "x$host_alias"; then
  +    cross_compiling=yes
  +  fi
  +fi
   
  -# confdefs.h avoids OS command line length limits that DEFS can exceed.
  -rm -rf conftest* confdefs.h
  -# AIX cpp loses on an empty file, so make sure it contains at least a newline.
  -echo > confdefs.h
  +ac_tool_prefix=
  +test -n "$host_alias" && ac_tool_prefix=$host_alias-
   
  -# A filename unique to this package, relative to the directory that
  -# configure is in, which we can look for to find out if srcdir is correct.
  -ac_unique_file=jitterbug.c
  +test "$silent" = yes && exec 6>/dev/null
   
   # Find the source files, if location was not specified.
   if test -z "$srcdir"; then
     ac_srcdir_defaulted=yes
     # Try the directory containing this script, then its parent.
     ac_prog=$0
  -  ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
  +  ac_confdir=`echo "$ac_prog" | sed 's%[\\/][^\\/][^\\/]*$%%'`
     test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
     srcdir=$ac_confdir
     if test ! -r $srcdir/$ac_unique_file; then
  @@ -476,13 +523,305 @@
   fi
   if test ! -r $srcdir/$ac_unique_file; then
     if test "$ac_srcdir_defaulted" = yes; then
  -    { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
  +    { echo "$as_me: error: cannot find sources in $ac_confdir or .." >&2
  +   { (exit 1); exit 1; }; }
     else
  -    { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
  +    { echo "$as_me: error: cannot find sources in $srcdir" >&2
  +   { (exit 1); exit 1; }; }
     fi
  +fi
  +srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
  +ac_env_build_alias_set=${build_alias+set}
  +ac_env_build_alias_value=$build_alias
  +ac_cv_env_build_alias_set=${build_alias+set}
  +ac_cv_env_build_alias_value=$build_alias
  +ac_env_host_alias_set=${host_alias+set}
  +ac_env_host_alias_value=$host_alias
  +ac_cv_env_host_alias_set=${host_alias+set}
  +ac_cv_env_host_alias_value=$host_alias
  +ac_env_target_alias_set=${target_alias+set}
  +ac_env_target_alias_value=$target_alias
  +ac_cv_env_target_alias_set=${target_alias+set}
  +ac_cv_env_target_alias_value=$target_alias
  +ac_env_CC_set=${CC+set}
  +ac_env_CC_value=$CC
  +ac_cv_env_CC_set=${CC+set}
  +ac_cv_env_CC_value=$CC
  +ac_env_CFLAGS_set=${CFLAGS+set}
  +ac_env_CFLAGS_value=$CFLAGS
  +ac_cv_env_CFLAGS_set=${CFLAGS+set}
  +ac_cv_env_CFLAGS_value=$CFLAGS
  +ac_env_LDFLAGS_set=${LDFLAGS+set}
  +ac_env_LDFLAGS_value=$LDFLAGS
  +ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
  +ac_cv_env_LDFLAGS_value=$LDFLAGS
  +ac_env_CPPFLAGS_set=${CPPFLAGS+set}
  +ac_env_CPPFLAGS_value=$CPPFLAGS
  +ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
  +ac_cv_env_CPPFLAGS_value=$CPPFLAGS
  +ac_env_CPP_set=${CPP+set}
  +ac_env_CPP_value=$CPP
  +ac_cv_env_CPP_set=${CPP+set}
  +ac_cv_env_CPP_value=$CPP
  +
  +#
  +# Report the --help message.
  +#
  +if test "$ac_init_help" = "long"; then
  +  # Omit some internal or obsolete options to make the list less imposing.
  +  # This message is too long to be a string in the A/UX 3.1 sh.
  +  cat <<EOF
  +\`configure' configures this package to adapt to many kinds of systems.
  +
  +Usage: $0 [OPTION]... [VAR=VALUE]...
  +
  +To assign environment variables (e.g., CC, CFLAGS...), specify them as
  +VAR=VALUE.  See below for descriptions of some of the useful variables.
  +
  +Defaults for the options are specified in brackets.
  +
  +Configuration:
  +  -h, --help              display this help and exit
  +      --help=short        display options specific to this package
  +      --help=recursive    display the short help of all the included packages
  +  -V, --version           display version information and exit
  +  -q, --quiet, --silent   do not print \`checking...' messages
  +      --cache-file=FILE   cache test results in FILE [disabled]
  +  -C, --config-cache      alias for \`--cache-file=config.cache'
  +  -n, --no-create         do not create output files
  +      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
  +
  +EOF
  +
  +  cat <<EOF
  +Installation directories:
  +  --prefix=PREFIX         install architecture-independent files in PREFIX
  +                          [$ac_default_prefix]
  +  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
  +                          [PREFIX]
  +
  +By default, \`make install' will install all the files in
  +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
  +an installation prefix other than \`$ac_default_prefix' using \`--prefix',
  +for instance \`--prefix=\$HOME'.
  +
  +For better control, use the options below.
  +
  +Fine tuning of the installation directories:
  +  --bindir=DIR           user executables [EPREFIX/bin]
  +  --sbindir=DIR          system admin executables [EPREFIX/sbin]
  +  --libexecdir=DIR       program executables [EPREFIX/libexec]
  +  --datadir=DIR          read-only architecture-independent data [PREFIX/share]
  +  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
  +  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
  +  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
  +  --libdir=DIR           object code libraries [EPREFIX/lib]
  +  --includedir=DIR       C header files [PREFIX/include]
  +  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
  +  --infodir=DIR          info documentation [PREFIX/info]
  +  --mandir=DIR           man documentation [PREFIX/man]
  +EOF
  +
  +  cat <<\EOF
  +
  +System types:
  +  --build=BUILD     configure for building on BUILD [guessed]
  +  --host=HOST       build programs to run on HOST [BUILD]
  +  --target=TARGET   configure for building compilers for TARGET [HOST]
  +EOF
  +fi
  +
  +if test -n "$ac_init_help"; then
  +
  +  cat <<\EOF
  +
  +Optional Features:
  +  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
  +  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
  +  --disable-ossp          disable the OSSP source patches
  +
  +Some influential environment variables:
  +  CC          C compiler command
  +  CFLAGS      C compiler flags
  +  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
  +              nonstandard directory <lib dir>
  +  CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
  +              headers in a nonstandard directory <include dir>
  +  CPP         C preprocessor
  +
  +Use these variables to override the choices made by `configure' or to help
  +it to find libraries and programs with nonstandard names/locations.
  +
  +EOF
  +fi
  +
  +if test "$ac_init_help" = "recursive"; then
  +  # If there are subdirs, report their specific --help.
  +  ac_popdir=`pwd`
  +  for ac_subdir in : $ac_subdirs_all; do test "x$ac_subdir" = x: && continue
  +    cd $ac_subdir
  +    # A "../" for each directory in /$ac_subdir.
  +    ac_dots=`echo $ac_subdir |
  +             sed 's,^\./,,;s,[^/]$,&/,;s,[^/]*/,../,g'`
  +
  +    case $srcdir in
  +    .) # No --srcdir option.  We are building in place.
  +      ac_sub_srcdir=$srcdir ;;
  +    [\\/]* | ?:[\\/]* ) # Absolute path.
  +      ac_sub_srcdir=$srcdir/$ac_subdir ;;
  +    *) # Relative path.
  +      ac_sub_srcdir=$ac_dots$srcdir/$ac_subdir ;;
  +    esac
  +
  +    # Check for guested configure; otherwise get Cygnus style configure.
  +    if test -f $ac_sub_srcdir/configure.gnu; then
  +      echo
  +      $SHELL $ac_sub_srcdir/configure.gnu  --help=recursive
  +    elif test -f $ac_sub_srcdir/configure; then
  +      echo
  +      $SHELL $ac_sub_srcdir/configure  --help=recursive
  +    elif test -f $ac_sub_srcdir/configure.ac ||
  +           test -f $ac_sub_srcdir/configure.in; then
  +      echo
  +      $ac_configure --help
  +    else
  +      echo "$as_me: WARNING: no configuration information is in $ac_subdir" >&2
  +    fi
  +    cd $ac_popdir
  +  done
  +fi
  +
  +test -n "$ac_init_help" && exit 0
  +if $ac_init_version; then
  +  cat <<\EOF
  +
  +Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
  +Free Software Foundation, Inc.
  +This configure script is free software; the Free Software Foundation
  +gives unlimited permission to copy, distribute and modify it.
  +EOF
  +  exit 0
   fi
  -srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
  +exec 5>config.log
  +cat >&5 <<EOF
  +This file contains any messages produced by compilers while
  +running configure, to aid debugging if configure makes a mistake.
  +
  +It was created by $as_me, which was
  +generated by GNU Autoconf 2.52.  Invocation command line was
  +
  +  $ $0 $@
  +
  +EOF
  +{
  +cat <<_ASUNAME
  +## ---------- ##
  +## Platform.  ##
  +## ---------- ##
  +
  +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
  +uname -m = `(uname -m) 2>/dev/null || echo unknown`
  +uname -r = `(uname -r) 2>/dev/null || echo unknown`
  +uname -s = `(uname -s) 2>/dev/null || echo unknown`
  +uname -v = `(uname -v) 2>/dev/null || echo unknown`
  +
  +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
  +/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
  +
  +/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
  +/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
  +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
  +hostinfo               = `(hostinfo) 2>/dev/null               || echo unknown`
  +/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
  +/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
  +/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
  +
  +PATH = $PATH
  +
  +_ASUNAME
  +} >&5
  +
  +cat >&5 <<EOF
  +## ------------ ##
  +## Core tests.  ##
  +## ------------ ##
  +
  +EOF
   
  +# Keep a trace of the command line.
  +# Strip out --no-create and --no-recursion so they do not pile up.
  +# Also quote any args containing shell meta-characters.
  +ac_configure_args=
  +ac_sep=
  +for ac_arg
  +do
  +  case $ac_arg in
  +  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
  +  | --no-cr | --no-c) ;;
  +  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
  +  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
  +  *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
  +    ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"`
  +    ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
  +    ac_sep=" " ;;
  +  *) ac_configure_args="$ac_configure_args$ac_sep$ac_arg"
  +     ac_sep=" " ;;
  +  esac
  +  # Get rid of the leading space.
  +done
  +
  +# When interrupted or exit'd, cleanup temporary files, and complete
  +# config.log.  We remove comments because anyway the quotes in there
  +# would cause problems or look ugly.
  +trap 'exit_status=$?
  +  # Save into config.log some information that might help in debugging.
  +  echo >&5
  +  echo "## ----------------- ##" >&5
  +  echo "## Cache variables.  ##" >&5
  +  echo "## ----------------- ##" >&5
  +  echo >&5
  +  # The following way of writing the cache mishandles newlines in values,
  +{
  +  (set) 2>&1 |
  +    case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
  +    *ac_space=\ *)
  +      sed -n \
  +        "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
  +    	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
  +      ;;
  +    *)
  +      sed -n \
  +        "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
  +      ;;
  +    esac;
  +} >&5
  +  sed "/^$/d" confdefs.h >conftest.log
  +  if test -s conftest.log; then
  +    echo >&5
  +    echo "## ------------ ##" >&5
  +    echo "## confdefs.h.  ##" >&5
  +    echo "## ------------ ##" >&5
  +    echo >&5
  +    cat conftest.log >&5
  +  fi
  +  (echo; echo) >&5
  +  test "$ac_signal" != 0 &&
  +    echo "$as_me: caught signal $ac_signal" >&5
  +  echo "$as_me: exit $exit_status" >&5
  +  rm -rf conftest* confdefs* core core.* *.core conf$$* $ac_clean_files &&
  +    exit $exit_status
  +     ' 0
  +for ac_signal in 1 2 13 15; do
  +  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
  +done
  +ac_signal=0
  +
  +# confdefs.h avoids OS command line length limits that DEFS can exceed.
  +rm -rf conftest* confdefs.h
  +# AIX cpp loses on an empty file, so make sure it contains at least a newline.
  +echo >confdefs.h
  +
  +# Let the site file select an alternate cache file if it wants to.
   # Prefer explicitly selected file to automatically selected ones.
   if test -z "$CONFIG_SITE"; then
     if test "x$prefix" != xNONE; then
  @@ -493,254 +832,682 @@
   fi
   for ac_site_file in $CONFIG_SITE; do
     if test -r "$ac_site_file"; then
  -    echo "loading site script $ac_site_file"
  +    { echo "$as_me:835: loading site script $ac_site_file" >&5
  +echo "$as_me: loading site script $ac_site_file" >&6;}
  +    cat "$ac_site_file" >&5
       . "$ac_site_file"
     fi
   done
   
   if test -r "$cache_file"; then
  -  echo "loading cache $cache_file"
  -  . $cache_file
  +  # Some versions of bash will fail to source /dev/null (special
  +  # files actually), so we avoid doing that.
  +  if test -f "$cache_file"; then
  +    { echo "$as_me:846: loading cache $cache_file" >&5
  +echo "$as_me: loading cache $cache_file" >&6;}
  +    case $cache_file in
  +      [\\/]* | ?:[\\/]* ) . $cache_file;;
  +      *)                      . ./$cache_file;;
  +    esac
  +  fi
   else
  -  echo "creating cache $cache_file"
  -  > $cache_file
  +  { echo "$as_me:854: creating cache $cache_file" >&5
  +echo "$as_me: creating cache $cache_file" >&6;}
  +  >$cache_file
  +fi
  +
  +# Check that the precious variables saved in the cache have kept the same
  +# value.
  +ac_cache_corrupted=false
  +for ac_var in `(set) 2>&1 |
  +               sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
  +  eval ac_old_set=\$ac_cv_env_${ac_var}_set
  +  eval ac_new_set=\$ac_env_${ac_var}_set
  +  eval ac_old_val="\$ac_cv_env_${ac_var}_value"
  +  eval ac_new_val="\$ac_env_${ac_var}_value"
  +  case $ac_old_set,$ac_new_set in
  +    set,)
  +      { echo "$as_me:870: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
  +echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
  +      ac_cache_corrupted=: ;;
  +    ,set)
  +      { echo "$as_me:874: error: \`$ac_var' was not set in the previous run" >&5
  +echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
  +      ac_cache_corrupted=: ;;
  +    ,);;
  +    *)
  +      if test "x$ac_old_val" != "x$ac_new_val"; then
  +        { echo "$as_me:880: error: \`$ac_var' has changed since the previous run:" >&5
  +echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
  +        { echo "$as_me:882:   former value:  $ac_old_val" >&5
  +echo "$as_me:   former value:  $ac_old_val" >&2;}
  +        { echo "$as_me:884:   current value: $ac_new_val" >&5
  +echo "$as_me:   current value: $ac_new_val" >&2;}
  +        ac_cache_corrupted=:
  +      fi;;
  +  esac
  +  # Pass precious variables to config.status.  It doesn't matter if
  +  # we pass some twice (in addition to the command line arguments).
  +  if test "$ac_new_set" = set; then
  +    case $ac_new_val in
  +    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
  +      ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"`
  +      ac_configure_args="$ac_configure_args '$ac_arg'"
  +      ;;
  +    *) ac_configure_args="$ac_configure_args $ac_var=$ac_new_val"
  +       ;;
  +    esac
  +  fi
  +done
  +if $ac_cache_corrupted; then
  +  { echo "$as_me:903: error: changes in the environment can compromise the build" >&5
  +echo "$as_me: error: changes in the environment can compromise the build" >&2;}
  +  { { echo "$as_me:905: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
  +echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
  +   { (exit 1); exit 1; }; }
   fi
   
   ac_ext=c
  -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
   ac_cpp='$CPP $CPPFLAGS'
  -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
  -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
  -cross_compiling=$ac_cv_prog_cc_cross
  -
  -ac_exeext=
  -ac_objext=o
  -if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
  -  # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
  -  if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
  -    ac_n= ac_c='
  -' ac_t='	'
  -  else
  -    ac_n=-n ac_c= ac_t=
  -  fi
  +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  +ac_compiler_gnu=$ac_cv_c_compiler_gnu
  +
  +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
  +  *c*,-n*) ECHO_N= ECHO_C='
  +' ECHO_T='	' ;;
  +  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
  +  *)      ECHO_N= ECHO_C='\c' ECHO_T= ;;
  +esac
  +echo "#! $SHELL" >conftest.sh
  +echo  "exit 0"   >>conftest.sh
  +chmod +x conftest.sh
  +if { (echo "$as_me:925: PATH=\".;.\"; conftest.sh") >&5
  +  (PATH=".;."; conftest.sh) 2>&5
  +  ac_status=$?
  +  echo "$as_me:928: \$? = $ac_status" >&5
  +  (exit $ac_status); }; then
  +  ac_path_separator=';'
   else
  -  ac_n= ac_c='\c' ac_t=
  +  ac_path_separator=:
   fi
  +PATH_SEPARATOR="$ac_path_separator"
  +rm -f conftest.sh
   
  +ac_config_headers="$ac_config_headers config.h"
   
  +ac_ext=c
  +ac_cpp='$CPP $CPPFLAGS'
  +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  +ac_compiler_gnu=$ac_cv_c_compiler_gnu
  +if test -n "$ac_tool_prefix"; then
  +  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
  +set dummy ${ac_tool_prefix}gcc; ac_word=$2
  +echo "$as_me:947: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_CC+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test -n "$CC"; then
  +  ac_cv_prog_CC="$CC" # Let the user override the test.
  +else
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +ac_cv_prog_CC="${ac_tool_prefix}gcc"
  +echo "$as_me:962: found $ac_dir/$ac_word" >&5
  +break
  +done
   
  +fi
  +fi
  +CC=$ac_cv_prog_CC
  +if test -n "$CC"; then
  +  echo "$as_me:970: result: $CC" >&5
  +echo "${ECHO_T}$CC" >&6
  +else
  +  echo "$as_me:973: result: no" >&5
  +echo "${ECHO_T}no" >&6
  +fi
   
  +fi
  +if test -z "$ac_cv_prog_CC"; then
  +  ac_ct_CC=$CC
  +  # Extract the first word of "gcc", so it can be a program name with args.
  +set dummy gcc; ac_word=$2
  +echo "$as_me:982: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test -n "$ac_ct_CC"; then
  +  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
  +else
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +ac_cv_prog_ac_ct_CC="gcc"
  +echo "$as_me:997: found $ac_dir/$ac_word" >&5
  +break
  +done
   
  +fi
  +fi
  +ac_ct_CC=$ac_cv_prog_ac_ct_CC
  +if test -n "$ac_ct_CC"; then
  +  echo "$as_me:1005: result: $ac_ct_CC" >&5
  +echo "${ECHO_T}$ac_ct_CC" >&6
  +else
  +  echo "$as_me:1008: result: no" >&5
  +echo "${ECHO_T}no" >&6
  +fi
   
  +  CC=$ac_ct_CC
  +else
  +  CC="$ac_cv_prog_CC"
  +fi
   
  -# Extract the first word of "gcc", so it can be a program name with args.
  -set dummy gcc; ac_word=$2
  -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
  -echo "configure:540: checking for $ac_word" >&5
  -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +if test -z "$CC"; then
  +  if test -n "$ac_tool_prefix"; then
  +  # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
  +set dummy ${ac_tool_prefix}cc; ac_word=$2
  +echo "$as_me:1021: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_CC+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
     if test -n "$CC"; then
     ac_cv_prog_CC="$CC" # Let the user override the test.
   else
  -  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
  -  ac_dummy="$PATH"
  -  for ac_dir in $ac_dummy; do
  -    test -z "$ac_dir" && ac_dir=.
  -    if test -f $ac_dir/$ac_word; then
  -      ac_cv_prog_CC="gcc"
  -      break
  -    fi
  -  done
  -  IFS="$ac_save_ifs"
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +ac_cv_prog_CC="${ac_tool_prefix}cc"
  +echo "$as_me:1036: found $ac_dir/$ac_word" >&5
  +break
  +done
  +
   fi
   fi
  -CC="$ac_cv_prog_CC"
  +CC=$ac_cv_prog_CC
   if test -n "$CC"; then
  -  echo "$ac_t""$CC" 1>&6
  +  echo "$as_me:1044: result: $CC" >&5
  +echo "${ECHO_T}$CC" >&6
  +else
  +  echo "$as_me:1047: result: no" >&5
  +echo "${ECHO_T}no" >&6
  +fi
  +
  +fi
  +if test -z "$ac_cv_prog_CC"; then
  +  ac_ct_CC=$CC
  +  # Extract the first word of "cc", so it can be a program name with args.
  +set dummy cc; ac_word=$2
  +echo "$as_me:1056: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test -n "$ac_ct_CC"; then
  +  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
  +else
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +ac_cv_prog_ac_ct_CC="cc"
  +echo "$as_me:1071: found $ac_dir/$ac_word" >&5
  +break
  +done
  +
  +fi
  +fi
  +ac_ct_CC=$ac_cv_prog_ac_ct_CC
  +if test -n "$ac_ct_CC"; then
  +  echo "$as_me:1079: result: $ac_ct_CC" >&5
  +echo "${ECHO_T}$ac_ct_CC" >&6
  +else
  +  echo "$as_me:1082: result: no" >&5
  +echo "${ECHO_T}no" >&6
  +fi
  +
  +  CC=$ac_ct_CC
   else
  -  echo "$ac_t""no" 1>&6
  +  CC="$ac_cv_prog_CC"
   fi
   
  +fi
   if test -z "$CC"; then
     # Extract the first word of "cc", so it can be a program name with args.
   set dummy cc; ac_word=$2
  -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
  -echo "configure:570: checking for $ac_word" >&5
  -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +echo "$as_me:1095: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_CC+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
     if test -n "$CC"; then
     ac_cv_prog_CC="$CC" # Let the user override the test.
   else
  -  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
     ac_prog_rejected=no
  -  ac_dummy="$PATH"
  -  for ac_dir in $ac_dummy; do
  -    test -z "$ac_dir" && ac_dir=.
  -    if test -f $ac_dir/$ac_word; then
  -      if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
  -        ac_prog_rejected=yes
  -	continue
  -      fi
  -      ac_cv_prog_CC="cc"
  -      break
  -    fi
  -  done
  -  IFS="$ac_save_ifs"
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
  +  ac_prog_rejected=yes
  +  continue
  +fi
  +ac_cv_prog_CC="cc"
  +echo "$as_me:1115: found $ac_dir/$ac_word" >&5
  +break
  +done
  +
   if test $ac_prog_rejected = yes; then
     # We found a bogon in the path, so make sure we never use it.
     set dummy $ac_cv_prog_CC
     shift
  -  if test $# -gt 0; then
  +  if test $# != 0; then
       # We chose a different compiler from the bogus one.
       # However, it has the same basename, so the bogon will be chosen
       # first if we set CC to just the basename; use the full file name.
       shift
  -    set dummy "$ac_dir/$ac_word" "$@"
  +    set dummy "$ac_dir/$ac_word" ${1+"$@"}
       shift
       ac_cv_prog_CC="$@"
     fi
   fi
   fi
   fi
  -CC="$ac_cv_prog_CC"
  +CC=$ac_cv_prog_CC
   if test -n "$CC"; then
  -  echo "$ac_t""$CC" 1>&6
  +  echo "$as_me:1137: result: $CC" >&5
  +echo "${ECHO_T}$CC" >&6
   else
  -  echo "$ac_t""no" 1>&6
  +  echo "$as_me:1140: result: no" >&5
  +echo "${ECHO_T}no" >&6
   fi
   
  -  if test -z "$CC"; then
  -    case "`uname -s`" in
  -    *win32* | *WIN32*)
  -      # Extract the first word of "cl", so it can be a program name with args.
  -set dummy cl; ac_word=$2
  -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
  -echo "configure:621: checking for $ac_word" >&5
  -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +fi
  +if test -z "$CC"; then
  +  if test -n "$ac_tool_prefix"; then
  +  for ac_prog in cl
  +  do
  +    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
  +set dummy $ac_tool_prefix$ac_prog; ac_word=$2
  +echo "$as_me:1151: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_CC+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
     if test -n "$CC"; then
     ac_cv_prog_CC="$CC" # Let the user override the test.
   else
  -  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
  -  ac_dummy="$PATH"
  -  for ac_dir in $ac_dummy; do
  -    test -z "$ac_dir" && ac_dir=.
  -    if test -f $ac_dir/$ac_word; then
  -      ac_cv_prog_CC="cl"
  -      break
  -    fi
  -  done
  -  IFS="$ac_save_ifs"
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
  +echo "$as_me:1166: found $ac_dir/$ac_word" >&5
  +break
  +done
  +
   fi
   fi
  -CC="$ac_cv_prog_CC"
  +CC=$ac_cv_prog_CC
   if test -n "$CC"; then
  -  echo "$ac_t""$CC" 1>&6
  +  echo "$as_me:1174: result: $CC" >&5
  +echo "${ECHO_T}$CC" >&6
   else
  -  echo "$ac_t""no" 1>&6
  +  echo "$as_me:1177: result: no" >&5
  +echo "${ECHO_T}no" >&6
   fi
  - ;;
  -    esac
  -  fi
  -  test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
  +
  +    test -n "$CC" && break
  +  done
  +fi
  +if test -z "$CC"; then
  +  ac_ct_CC=$CC
  +  for ac_prog in cl
  +do
  +  # Extract the first word of "$ac_prog", so it can be a program name with args.
  +set dummy $ac_prog; ac_word=$2
  +echo "$as_me:1190: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test -n "$ac_ct_CC"; then
  +  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
  +else
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +ac_cv_prog_ac_ct_CC="$ac_prog"
  +echo "$as_me:1205: found $ac_dir/$ac_word" >&5
  +break
  +done
  +
  +fi
  +fi
  +ac_ct_CC=$ac_cv_prog_ac_ct_CC
  +if test -n "$ac_ct_CC"; then
  +  echo "$as_me:1213: result: $ac_ct_CC" >&5
  +echo "${ECHO_T}$ac_ct_CC" >&6
  +else
  +  echo "$as_me:1216: result: no" >&5
  +echo "${ECHO_T}no" >&6
   fi
   
  -echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
  -echo "configure:653: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
  +  test -n "$ac_ct_CC" && break
  +done
   
  -ac_ext=c
  -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
  -ac_cpp='$CPP $CPPFLAGS'
  -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
  -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
  -cross_compiling=$ac_cv_prog_cc_cross
  +  CC=$ac_ct_CC
  +fi
  +
  +fi
   
  -cat > conftest.$ac_ext << EOF
  +test -z "$CC" && { { echo "$as_me:1228: error: no acceptable cc found in \$PATH" >&5
  +echo "$as_me: error: no acceptable cc found in \$PATH" >&2;}
  +   { (exit 1); exit 1; }; }
  +
  +# Provide some information about the compiler.
  +echo "$as_me:1233:" \
  +     "checking for C compiler version" >&5
  +ac_compiler=`set X $ac_compile; echo $2`
  +{ (eval echo "$as_me:1236: \"$ac_compiler --version </dev/null >&5\"") >&5
  +  (eval $ac_compiler --version </dev/null >&5) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1239: \$? = $ac_status" >&5
  +  (exit $ac_status); }
  +{ (eval echo "$as_me:1241: \"$ac_compiler -v </dev/null >&5\"") >&5
  +  (eval $ac_compiler -v </dev/null >&5) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1244: \$? = $ac_status" >&5
  +  (exit $ac_status); }
  +{ (eval echo "$as_me:1246: \"$ac_compiler -V </dev/null >&5\"") >&5
  +  (eval $ac_compiler -V </dev/null >&5) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1249: \$? = $ac_status" >&5
  +  (exit $ac_status); }
   
  -#line 664 "configure"
  +cat >conftest.$ac_ext <<_ACEOF
  +#line 1253 "configure"
   #include "confdefs.h"
   
  -main(){return(0);}
  -EOF
  -if { (eval echo configure:669: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  -  ac_cv_prog_cc_works=yes
  -  # If we can't run a trivial program, we are probably using a cross compiler.
  -  if (./conftest; exit) 2>/dev/null; then
  -    ac_cv_prog_cc_cross=no
  +int
  +main ()
  +{
  +
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +ac_clean_files_save=$ac_clean_files
  +ac_clean_files="$ac_clean_files a.out a.exe"
  +# Try to create an executable without -o first, disregard a.out.
  +# It will help us diagnose broken compilers, and finding out an intuition
  +# of exeext.
  +echo "$as_me:1269: checking for C compiler default output" >&5
  +echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6
  +ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
  +if { (eval echo "$as_me:1272: \"$ac_link_default\"") >&5
  +  (eval $ac_link_default) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1275: \$? = $ac_status" >&5
  +  (exit $ac_status); }; then
  +  # Find the output, starting from the most likely.  This scheme is
  +# not robust to junk in `.', hence go to wildcards (a.*) only as a last
  +# resort.
  +for ac_file in `ls a.exe conftest.exe 2>/dev/null;
  +                ls a.out conftest 2>/dev/null;
  +                ls a.* conftest.* 2>/dev/null`; do
  +  case $ac_file in
  +    *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb ) ;;
  +    a.out ) # We found the default executable, but exeext='' is most
  +            # certainly right.
  +            break;;
  +    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
  +          # FIXME: I believe we export ac_cv_exeext for Libtool --akim.
  +          export ac_cv_exeext
  +          break;;
  +    * ) break;;
  +  esac
  +done
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +{ { echo "$as_me:1298: error: C compiler cannot create executables" >&5
  +echo "$as_me: error: C compiler cannot create executables" >&2;}
  +   { (exit 77); exit 77; }; }
  +fi
  +
  +ac_exeext=$ac_cv_exeext
  +echo "$as_me:1304: result: $ac_file" >&5
  +echo "${ECHO_T}$ac_file" >&6
  +
  +# Check the compiler produces executables we can run.  If not, either
  +# the compiler is broken, or we cross compile.
  +echo "$as_me:1309: checking whether the C compiler works" >&5
  +echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
  +# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
  +# If not cross compiling, check that we can run a simple program.
  +if test "$cross_compiling" != yes; then
  +  if { ac_try='./$ac_file'
  +  { (eval echo "$as_me:1315: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1318: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +    cross_compiling=no
     else
  -    ac_cv_prog_cc_cross=yes
  +    if test "$cross_compiling" = maybe; then
  +	cross_compiling=yes
  +    else
  +	{ { echo "$as_me:1325: error: cannot run C compiled programs.
  +If you meant to cross compile, use \`--host'." >&5
  +echo "$as_me: error: cannot run C compiled programs.
  +If you meant to cross compile, use \`--host'." >&2;}
  +   { (exit 1); exit 1; }; }
  +    fi
     fi
  -else
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  ac_cv_prog_cc_works=no
   fi
  -rm -fr conftest*
  -ac_ext=c
  -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
  -ac_cpp='$CPP $CPPFLAGS'
  -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
  -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
  -cross_compiling=$ac_cv_prog_cc_cross
  -
  -echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
  -if test $ac_cv_prog_cc_works = no; then
  -  { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
  -fi
  -echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
  -echo "configure:695: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
  -echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
  -cross_compiling=$ac_cv_prog_cc_cross
  -
  -echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
  -echo "configure:700: checking whether we are using GNU C" >&5
  -if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  -else
  -  cat > conftest.c <<EOF
  -#ifdef __GNUC__
  -  yes;
  -#endif
  -EOF
  -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:709: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
  -  ac_cv_prog_gcc=yes
  +echo "$as_me:1333: result: yes" >&5
  +echo "${ECHO_T}yes" >&6
  +
  +rm -f a.out a.exe conftest$ac_cv_exeext
  +ac_clean_files=$ac_clean_files_save
  +# Check the compiler produces executables we can run.  If not, either
  +# the compiler is broken, or we cross compile.
  +echo "$as_me:1340: checking whether we are cross compiling" >&5
  +echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
  +echo "$as_me:1342: result: $cross_compiling" >&5
  +echo "${ECHO_T}$cross_compiling" >&6
  +
  +echo "$as_me:1345: checking for executable suffix" >&5
  +echo $ECHO_N "checking for executable suffix... $ECHO_C" >&6
  +if { (eval echo "$as_me:1347: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1350: \$? = $ac_status" >&5
  +  (exit $ac_status); }; then
  +  # If both `conftest.exe' and `conftest' are `present' (well, observable)
  +# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
  +# work properly (i.e., refer to `conftest.exe'), while it won't with
  +# `rm'.
  +for ac_file in `(ls conftest.exe; ls conftest; ls conftest.*) 2>/dev/null`; do
  +  case $ac_file in
  +    *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb ) ;;
  +    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
  +          export ac_cv_exeext
  +          break;;
  +    * ) break;;
  +  esac
  +done
   else
  -  ac_cv_prog_gcc=no
  -fi
  -fi
  +  { { echo "$as_me:1366: error: cannot compute EXEEXT: cannot compile and link" >&5
  +echo "$as_me: error: cannot compute EXEEXT: cannot compile and link" >&2;}
  +   { (exit 1); exit 1; }; }
  +fi
  +
  +rm -f conftest$ac_cv_exeext
  +echo "$as_me:1372: result: $ac_cv_exeext" >&5
  +echo "${ECHO_T}$ac_cv_exeext" >&6
  +
  +rm -f conftest.$ac_ext
  +EXEEXT=$ac_cv_exeext
  +ac_exeext=$EXEEXT
  +echo "$as_me:1378: checking for object suffix" >&5
  +echo $ECHO_N "checking for object suffix... $ECHO_C" >&6
  +if test "${ac_cv_objext+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 1384 "configure"
  +#include "confdefs.h"
   
  -echo "$ac_t""$ac_cv_prog_gcc" 1>&6
  +int
  +main ()
  +{
   
  -if test $ac_cv_prog_gcc = yes; then
  -  GCC=yes
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.o conftest.obj
  +if { (eval echo "$as_me:1396: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1399: \$? = $ac_status" >&5
  +  (exit $ac_status); }; then
  +  for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
  +  case $ac_file in
  +    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb ) ;;
  +    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
  +       break;;
  +  esac
  +done
   else
  -  GCC=
  -fi
  -
  -ac_test_CFLAGS="${CFLAGS+set}"
  -ac_save_CFLAGS="$CFLAGS"
  -CFLAGS=
  -echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
  -echo "configure:728: checking whether ${CC-cc} accepts -g" >&5
  -if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +{ { echo "$as_me:1411: error: cannot compute OBJEXT: cannot compile" >&5
  +echo "$as_me: error: cannot compute OBJEXT: cannot compile" >&2;}
  +   { (exit 1); exit 1; }; }
  +fi
  +
  +rm -f conftest.$ac_cv_objext conftest.$ac_ext
  +fi
  +echo "$as_me:1418: result: $ac_cv_objext" >&5
  +echo "${ECHO_T}$ac_cv_objext" >&6
  +OBJEXT=$ac_cv_objext
  +ac_objext=$OBJEXT
  +echo "$as_me:1422: checking whether we are using the GNU C compiler" >&5
  +echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
  +if test "${ac_cv_c_compiler_gnu+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  echo 'void f(){}' > conftest.c
  -if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
  -  ac_cv_prog_cc_g=yes
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 1428 "configure"
  +#include "confdefs.h"
  +
  +int
  +main ()
  +{
  +#ifndef __GNUC__
  +       choke me
  +#endif
  +
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:1443: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1446: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:1449: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1452: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_compiler_gnu=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_compiler_gnu=no
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +ac_cv_c_compiler_gnu=$ac_compiler_gnu
  +
  +fi
  +echo "$as_me:1464: result: $ac_cv_c_compiler_gnu" >&5
  +echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
  +GCC=`test $ac_compiler_gnu = yes && echo yes`
  +ac_test_CFLAGS=${CFLAGS+set}
  +ac_save_CFLAGS=$CFLAGS
  +CFLAGS="-g"
  +echo "$as_me:1470: checking whether $CC accepts -g" >&5
  +echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
  +if test "${ac_cv_prog_cc_g+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  ac_cv_prog_cc_g=no
  -fi
  -rm -f conftest*
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 1476 "configure"
  +#include "confdefs.h"
   
  -fi
  +int
  +main ()
  +{
   
  -echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:1488: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1491: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:1494: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1497: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_cv_prog_cc_g=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_prog_cc_g=no
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +fi
  +echo "$as_me:1507: result: $ac_cv_prog_cc_g" >&5
  +echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
   if test "$ac_test_CFLAGS" = set; then
  -  CFLAGS="$ac_save_CFLAGS"
  +  CFLAGS=$ac_save_CFLAGS
   elif test $ac_cv_prog_cc_g = yes; then
     if test "$GCC" = yes; then
       CFLAGS="-g -O2"
  @@ -754,638 +1521,1086 @@
       CFLAGS=
     fi
   fi
  +# Some people use a C++ compiler to compile C.  Since we use `exit',
  +# in C++ we need to declare it.  In case someone uses the same compiler
  +# for both compiling C and C++ we need to have the C++ compiler decide
  +# the declaration of exit, since it's the most demanding environment.
  +cat >conftest.$ac_ext <<_ACEOF
  +#ifndef __cplusplus
  +  choke me
  +#endif
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:1534: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1537: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:1540: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1543: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  for ac_declaration in \
  +   ''\
  +   '#include <stdlib.h>' \
  +   'extern "C" void std::exit (int) throw (); using std::exit;' \
  +   'extern "C" void std::exit (int); using std::exit;' \
  +   'extern "C" void exit (int) throw ();' \
  +   'extern "C" void exit (int);' \
  +   'void exit (int);'
  +do
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 1555 "configure"
  +#include "confdefs.h"
  +#include <stdlib.h>
  +$ac_declaration
  +int
  +main ()
  +{
  +exit (42);
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:1568: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1571: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:1574: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1577: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  :
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +continue
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 1587 "configure"
  +#include "confdefs.h"
  +$ac_declaration
  +int
  +main ()
  +{
  +exit (42);
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:1599: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1602: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:1605: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1608: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  break
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +done
  +rm -f conftest*
  +if test -n "$ac_declaration"; then
  +  echo '#ifdef __cplusplus' >>confdefs.h
  +  echo $ac_declaration      >>confdefs.h
  +  echo '#endif'             >>confdefs.h
  +fi
   
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +ac_ext=c
  +ac_cpp='$CPP $CPPFLAGS'
  +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  +ac_compiler_gnu=$ac_cv_c_compiler_gnu
  +
   for ac_prog in mawk gawk nawk awk
   do
  -# Extract the first word of "$ac_prog", so it can be a program name with args.
  +  # Extract the first word of "$ac_prog", so it can be a program name with args.
   set dummy $ac_prog; ac_word=$2
  -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
  -echo "configure:764: checking for $ac_word" >&5
  -if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +echo "$as_me:1639: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_AWK+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
     if test -n "$AWK"; then
     ac_cv_prog_AWK="$AWK" # Let the user override the test.
   else
  -  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
  -  ac_dummy="$PATH"
  -  for ac_dir in $ac_dummy; do
  -    test -z "$ac_dir" && ac_dir=.
  -    if test -f $ac_dir/$ac_word; then
  -      ac_cv_prog_AWK="$ac_prog"
  -      break
  -    fi
  -  done
  -  IFS="$ac_save_ifs"
  +  ac_save_IFS=$IFS; IFS=$ac_path_separator
  +ac_dummy="$PATH"
  +for ac_dir in $ac_dummy; do
  +  IFS=$ac_save_IFS
  +  test -z "$ac_dir" && ac_dir=.
  +  $as_executable_p "$ac_dir/$ac_word" || continue
  +ac_cv_prog_AWK="$ac_prog"
  +echo "$as_me:1654: found $ac_dir/$ac_word" >&5
  +break
  +done
  +
   fi
   fi
  -AWK="$ac_cv_prog_AWK"
  +AWK=$ac_cv_prog_AWK
   if test -n "$AWK"; then
  -  echo "$ac_t""$AWK" 1>&6
  +  echo "$as_me:1662: result: $AWK" >&5
  +echo "${ECHO_T}$AWK" >&6
   else
  -  echo "$ac_t""no" 1>&6
  +  echo "$as_me:1665: result: no" >&5
  +echo "${ECHO_T}no" >&6
   fi
   
  -test -n "$AWK" && break
  +  test -n "$AWK" && break
   done
   
  -
  -
   ac_header_dirent=no
  -for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h
  -do
  -ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
  -echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6
  -echo "configure:800: checking for $ac_hdr that defines DIR" >&5
  -if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do
  +  as_ac_Header=`echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
  +echo "$as_me:1675: checking for $ac_hdr that defines DIR" >&5
  +echo $ECHO_N "checking for $ac_hdr that defines DIR... $ECHO_C" >&6
  +if eval "test \"\${$as_ac_Header+set}\" = set"; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  cat > conftest.$ac_ext <<EOF
  -#line 805 "configure"
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 1681 "configure"
   #include "confdefs.h"
   #include <sys/types.h>
   #include <$ac_hdr>
  -int main() {
  -DIR *dirp = 0;
  -; return 0; }
  -EOF
  -if { (eval echo configure:813: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
  -  rm -rf conftest*
  -  eval "ac_cv_header_dirent_$ac_safe=yes"
  -else
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  eval "ac_cv_header_dirent_$ac_safe=no"
  -fi
  -rm -f conftest*
  -fi
  -if eval "test \"`echo '$ac_cv_header_dirent_'$ac_safe`\" = yes"; then
  -  echo "$ac_t""yes" 1>&6
  -    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
  -  cat >> confdefs.h <<EOF
  -#define $ac_tr_hdr 1
  +
  +int
  +main ()
  +{
  +if ((DIR *) 0)
  +return 0;
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:1696: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1699: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:1702: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1705: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  eval "$as_ac_Header=yes"
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +eval "$as_ac_Header=no"
  +fi
  +rm -f conftest.$ac_objext conftest.$ac_ext
  +fi
  +echo "$as_me:1715: result: `eval echo '${'$as_ac_Header'}'`" >&5
  +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
  +if test `eval echo '${'$as_ac_Header'}'` = yes; then
  +  cat >>confdefs.h <<EOF
  +#define `echo "HAVE_$ac_hdr" | $as_tr_cpp` 1
   EOF
  - ac_header_dirent=$ac_hdr; break
  -else
  -  echo "$ac_t""no" 1>&6
  +
  +ac_header_dirent=$ac_hdr; break
   fi
  +
   done
   # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
   if test $ac_header_dirent = dirent.h; then
  -echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6
  -echo "configure:838: checking for opendir in -ldir" >&5
  -ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'`
  -if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +  echo "$as_me:1728: checking for opendir in -ldir" >&5
  +echo $ECHO_N "checking for opendir in -ldir... $ECHO_C" >&6
  +if test "${ac_cv_lib_dir_opendir+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  ac_save_LIBS="$LIBS"
  +  ac_check_lib_save_LIBS=$LIBS
   LIBS="-ldir  $LIBS"
  -cat > conftest.$ac_ext <<EOF
  -#line 846 "configure"
  +cat >conftest.$ac_ext <<_ACEOF
  +#line 1736 "configure"
   #include "confdefs.h"
  +
   /* Override any gcc2 internal prototype to avoid an error.  */
  +#ifdef __cplusplus
  +extern "C"
  +#endif
   /* We use char because int might match the return type of a gcc2
  -    builtin and then its argument prototype would still apply.  */
  -char opendir();
  -
  -int main() {
  -opendir()
  -; return 0; }
  -EOF
  -if { (eval echo configure:857: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  -  rm -rf conftest*
  -  eval "ac_cv_lib_$ac_lib_var=yes"
  -else
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  eval "ac_cv_lib_$ac_lib_var=no"
  -fi
  -rm -f conftest*
  -LIBS="$ac_save_LIBS"
  -
  -fi
  -if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
  -  echo "$ac_t""yes" 1>&6
  +   builtin and then its argument prototype would still apply.  */
  +char opendir ();
  +int
  +main ()
  +{
  +opendir ();
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext conftest$ac_exeext
  +if { (eval echo "$as_me:1755: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1758: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest$ac_exeext'
  +  { (eval echo "$as_me:1761: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1764: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_cv_lib_dir_opendir=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_lib_dir_opendir=no
  +fi
  +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  +LIBS=$ac_check_lib_save_LIBS
  +fi
  +echo "$as_me:1775: result: $ac_cv_lib_dir_opendir" >&5
  +echo "${ECHO_T}$ac_cv_lib_dir_opendir" >&6
  +if test $ac_cv_lib_dir_opendir = yes; then
     LIBS="$LIBS -ldir"
  -else
  -  echo "$ac_t""no" 1>&6
   fi
   
   else
  -echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6
  -echo "configure:879: checking for opendir in -lx" >&5
  -ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'`
  -if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +  echo "$as_me:1782: checking for opendir in -lx" >&5
  +echo $ECHO_N "checking for opendir in -lx... $ECHO_C" >&6
  +if test "${ac_cv_lib_x_opendir+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  ac_save_LIBS="$LIBS"
  +  ac_check_lib_save_LIBS=$LIBS
   LIBS="-lx  $LIBS"
  -cat > conftest.$ac_ext <<EOF
  -#line 887 "configure"
  +cat >conftest.$ac_ext <<_ACEOF
  +#line 1790 "configure"
   #include "confdefs.h"
  +
   /* Override any gcc2 internal prototype to avoid an error.  */
  +#ifdef __cplusplus
  +extern "C"
  +#endif
   /* We use char because int might match the return type of a gcc2
  -    builtin and then its argument prototype would still apply.  */
  -char opendir();
  -
  -int main() {
  -opendir()
  -; return 0; }
  -EOF
  -if { (eval echo configure:898: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  -  rm -rf conftest*
  -  eval "ac_cv_lib_$ac_lib_var=yes"
  -else
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  eval "ac_cv_lib_$ac_lib_var=no"
  -fi
  -rm -f conftest*
  -LIBS="$ac_save_LIBS"
  -
  -fi
  -if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
  -  echo "$ac_t""yes" 1>&6
  +   builtin and then its argument prototype would still apply.  */
  +char opendir ();
  +int
  +main ()
  +{
  +opendir ();
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext conftest$ac_exeext
  +if { (eval echo "$as_me:1809: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1812: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest$ac_exeext'
  +  { (eval echo "$as_me:1815: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1818: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_cv_lib_x_opendir=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_lib_x_opendir=no
  +fi
  +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  +LIBS=$ac_check_lib_save_LIBS
  +fi
  +echo "$as_me:1829: result: $ac_cv_lib_x_opendir" >&5
  +echo "${ECHO_T}$ac_cv_lib_x_opendir" >&6
  +if test $ac_cv_lib_x_opendir = yes; then
     LIBS="$LIBS -lx"
  -else
  -  echo "$ac_t""no" 1>&6
   fi
   
   fi
   
  -echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
  -echo "configure:921: checking whether time.h and sys/time.h may both be included" >&5
  -if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +echo "$as_me:1837: checking whether time.h and sys/time.h may both be included" >&5
  +echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6
  +if test "${ac_cv_header_time+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  cat > conftest.$ac_ext <<EOF
  -#line 926 "configure"
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 1843 "configure"
   #include "confdefs.h"
   #include <sys/types.h>
   #include <sys/time.h>
   #include <time.h>
  -int main() {
  -struct tm *tp;
  -; return 0; }
  -EOF
  -if { (eval echo configure:935: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
  -  rm -rf conftest*
  +
  +int
  +main ()
  +{
  +if ((struct tm *) 0)
  +return 0;
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:1859: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1862: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:1865: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:1868: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
     ac_cv_header_time=yes
   else
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  ac_cv_header_time=no
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_header_time=no
   fi
  -rm -f conftest*
  +rm -f conftest.$ac_objext conftest.$ac_ext
   fi
  -
  -echo "$ac_t""$ac_cv_header_time" 1>&6
  +echo "$as_me:1878: result: $ac_cv_header_time" >&5
  +echo "${ECHO_T}$ac_cv_header_time" >&6
   if test $ac_cv_header_time = yes; then
  -  cat >> confdefs.h <<\EOF
  +
  +cat >>confdefs.h <<\EOF
   #define TIME_WITH_SYS_TIME 1
   EOF
   
   fi
   
  -echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
  -echo "configure:956: checking how to run the C preprocessor" >&5
  +ac_ext=c
  +ac_cpp='$CPP $CPPFLAGS'
  +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  +ac_compiler_gnu=$ac_cv_c_compiler_gnu
  +echo "$as_me:1893: checking how to run the C preprocessor" >&5
  +echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
   # On Suns, sometimes $CPP names a directory.
   if test -n "$CPP" && test -d "$CPP"; then
     CPP=
   fi
   if test -z "$CPP"; then
  -if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +  if test "${ac_cv_prog_CPP+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -    # This must be in double quotes, not single quotes, because CPP may get
  -  # substituted into the Makefile and "${CC-cc}" will confuse make.
  -  CPP="${CC-cc} -E"
  +      # Double quotes because CPP needs to be expanded
  +    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
  +    do
  +      ac_preproc_ok=false
  +for ac_c_preproc_warn_flag in '' yes
  +do
  +  # Use a header file that comes with gcc, so configuring glibc
  +  # with a fresh cross-compiler works.
     # On the NeXT, cc -E runs the code through the compiler's parser,
  -  # not just through cpp.
  -  cat > conftest.$ac_ext <<EOF
  -#line 971 "configure"
  +  # not just through cpp. "Syntax error" is here to catch this case.
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 1914 "configure"
   #include "confdefs.h"
   #include <assert.h>
  -Syntax Error
  -EOF
  -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  -{ (eval echo configure:977: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  -if test -z "$ac_err"; then
  +                     Syntax error
  +_ACEOF
  +if { (eval echo "$as_me:1919: \"$ac_cpp conftest.$ac_ext\"") >&5
  +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  +  ac_status=$?
  +  egrep -v '^ *\+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:1925: \$? = $ac_status" >&5
  +  (exit $ac_status); } >/dev/null; then
  +  if test -s conftest.err; then
  +    ac_cpp_err=$ac_c_preproc_warn_flag
  +  else
  +    ac_cpp_err=
  +  fi
  +else
  +  ac_cpp_err=yes
  +fi
  +if test -z "$ac_cpp_err"; then
     :
   else
  -  echo "$ac_err" >&5
  -  echo "configure: failed program was:" >&5
  +  echo "$as_me: failed program was:" >&5
     cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  CPP="${CC-cc} -E -traditional-cpp"
  -  cat > conftest.$ac_ext <<EOF
  -#line 988 "configure"
  +  # Broken: fails on valid input.
  +continue
  +fi
  +rm -f conftest.err conftest.$ac_ext
  +
  +  # OK, works on sane cases.  Now check whether non-existent headers
  +  # can be detected and how.
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 1948 "configure"
   #include "confdefs.h"
  -#include <assert.h>
  -Syntax Error
  -EOF
  -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  -{ (eval echo configure:994: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  -if test -z "$ac_err"; then
  -  :
  +#include <ac_nonexistent.h>
  +_ACEOF
  +if { (eval echo "$as_me:1952: \"$ac_cpp conftest.$ac_ext\"") >&5
  +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  +  ac_status=$?
  +  egrep -v '^ *\+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:1958: \$? = $ac_status" >&5
  +  (exit $ac_status); } >/dev/null; then
  +  if test -s conftest.err; then
  +    ac_cpp_err=$ac_c_preproc_warn_flag
  +  else
  +    ac_cpp_err=
  +  fi
   else
  -  echo "$ac_err" >&5
  -  echo "configure: failed program was:" >&5
  +  ac_cpp_err=yes
  +fi
  +if test -z "$ac_cpp_err"; then
  +  # Broken: success on invalid input.
  +continue
  +else
  +  echo "$as_me: failed program was:" >&5
     cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  CPP="${CC-cc} -nologo -E"
  -  cat > conftest.$ac_ext <<EOF
  -#line 1005 "configure"
  +  # Passes both tests.
  +ac_preproc_ok=:
  +break
  +fi
  +rm -f conftest.err conftest.$ac_ext
  +
  +done
  +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
  +rm -f conftest.err conftest.$ac_ext
  +if $ac_preproc_ok; then
  +  break
  +fi
  +
  +    done
  +    ac_cv_prog_CPP=$CPP
  +
  +fi
  +  CPP=$ac_cv_prog_CPP
  +else
  +  ac_cv_prog_CPP=$CPP
  +fi
  +echo "$as_me:1995: result: $CPP" >&5
  +echo "${ECHO_T}$CPP" >&6
  +ac_preproc_ok=false
  +for ac_c_preproc_warn_flag in '' yes
  +do
  +  # Use a header file that comes with gcc, so configuring glibc
  +  # with a fresh cross-compiler works.
  +  # On the NeXT, cc -E runs the code through the compiler's parser,
  +  # not just through cpp. "Syntax error" is here to catch this case.
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 2005 "configure"
   #include "confdefs.h"
   #include <assert.h>
  -Syntax Error
  -EOF
  -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  -{ (eval echo configure:1011: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  -if test -z "$ac_err"; then
  +                     Syntax error
  +_ACEOF
  +if { (eval echo "$as_me:2010: \"$ac_cpp conftest.$ac_ext\"") >&5
  +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  +  ac_status=$?
  +  egrep -v '^ *\+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:2016: \$? = $ac_status" >&5
  +  (exit $ac_status); } >/dev/null; then
  +  if test -s conftest.err; then
  +    ac_cpp_err=$ac_c_preproc_warn_flag
  +  else
  +    ac_cpp_err=
  +  fi
  +else
  +  ac_cpp_err=yes
  +fi
  +if test -z "$ac_cpp_err"; then
     :
   else
  -  echo "$ac_err" >&5
  -  echo "configure: failed program was:" >&5
  +  echo "$as_me: failed program was:" >&5
     cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  CPP=/lib/cpp
  -fi
  -rm -f conftest*
  +  # Broken: fails on valid input.
  +continue
   fi
  -rm -f conftest*
  +rm -f conftest.err conftest.$ac_ext
  +
  +  # OK, works on sane cases.  Now check whether non-existent headers
  +  # can be detected and how.
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 2039 "configure"
  +#include "confdefs.h"
  +#include <ac_nonexistent.h>
  +_ACEOF
  +if { (eval echo "$as_me:2043: \"$ac_cpp conftest.$ac_ext\"") >&5
  +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  +  ac_status=$?
  +  egrep -v '^ *\+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:2049: \$? = $ac_status" >&5
  +  (exit $ac_status); } >/dev/null; then
  +  if test -s conftest.err; then
  +    ac_cpp_err=$ac_c_preproc_warn_flag
  +  else
  +    ac_cpp_err=
  +  fi
  +else
  +  ac_cpp_err=yes
   fi
  -rm -f conftest*
  -  ac_cv_prog_CPP="$CPP"
  +if test -z "$ac_cpp_err"; then
  +  # Broken: success on invalid input.
  +continue
  +else
  +  echo "$as_me: failed program was:" >&5
  +  cat conftest.$ac_ext >&5
  +  # Passes both tests.
  +ac_preproc_ok=:
  +break
   fi
  -  CPP="$ac_cv_prog_CPP"
  +rm -f conftest.err conftest.$ac_ext
  +
  +done
  +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
  +rm -f conftest.err conftest.$ac_ext
  +if $ac_preproc_ok; then
  +  :
   else
  -  ac_cv_prog_CPP="$CPP"
  +  { { echo "$as_me:2077: error: C preprocessor \"$CPP\" fails sanity check" >&5
  +echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check" >&2;}
  +   { (exit 1); exit 1; }; }
   fi
  -echo "$ac_t""$CPP" 1>&6
  +
  +ac_ext=c
  +ac_cpp='$CPP $CPPFLAGS'
  +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  +ac_compiler_gnu=$ac_cv_c_compiler_gnu
   
  -for ac_hdr in sys/fcntl.h fcntl.h sys/time.h sys/unistd.h unistd.h
  +for ac_header in sys/fcntl.h fcntl.h sys/time.h sys/unistd.h unistd.h
   do
  -ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
  -echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
  -echo "configure:1039: checking for $ac_hdr" >&5
  -if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
  +echo "$as_me:2091: checking for $ac_header" >&5
  +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
  +if eval "test \"\${$as_ac_Header+set}\" = set"; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  cat > conftest.$ac_ext <<EOF
  -#line 1044 "configure"
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 2097 "configure"
   #include "confdefs.h"
  -#include <$ac_hdr>
  -EOF
  -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  -{ (eval echo configure:1049: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  -if test -z "$ac_err"; then
  -  rm -rf conftest*
  -  eval "ac_cv_header_$ac_safe=yes"
  +#include <$ac_header>
  +_ACEOF
  +if { (eval echo "$as_me:2101: \"$ac_cpp conftest.$ac_ext\"") >&5
  +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  +  ac_status=$?
  +  egrep -v '^ *\+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:2107: \$? = $ac_status" >&5
  +  (exit $ac_status); } >/dev/null; then
  +  if test -s conftest.err; then
  +    ac_cpp_err=$ac_c_preproc_warn_flag
  +  else
  +    ac_cpp_err=
  +  fi
  +else
  +  ac_cpp_err=yes
  +fi
  +if test -z "$ac_cpp_err"; then
  +  eval "$as_ac_Header=yes"
   else
  -  echo "$ac_err" >&5
  -  echo "configure: failed program was:" >&5
  +  echo "$as_me: failed program was:" >&5
     cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  eval "ac_cv_header_$ac_safe=no"
  +  eval "$as_ac_Header=no"
   fi
  -rm -f conftest*
  +rm -f conftest.err conftest.$ac_ext
   fi
  -if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
  -  echo "$ac_t""yes" 1>&6
  -    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
  -  cat >> confdefs.h <<EOF
  -#define $ac_tr_hdr 1
  +echo "$as_me:2126: result: `eval echo '${'$as_ac_Header'}'`" >&5
  +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
  +if test `eval echo '${'$as_ac_Header'}'` = yes; then
  +  cat >>confdefs.h <<EOF
  +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
   EOF
  - 
  -else
  -  echo "$ac_t""no" 1>&6
  +
   fi
   done
   
  -for ac_hdr in compat.h sys/param.h ctype.h
  +for ac_header in compat.h sys/param.h ctype.h
   do
  -ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
  -echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
  -echo "configure:1079: checking for $ac_hdr" >&5
  -if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
  +echo "$as_me:2139: checking for $ac_header" >&5
  +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
  +if eval "test \"\${$as_ac_Header+set}\" = set"; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  cat > conftest.$ac_ext <<EOF
  -#line 1084 "configure"
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 2145 "configure"
   #include "confdefs.h"
  -#include <$ac_hdr>
  -EOF
  -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  -{ (eval echo configure:1089: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  -if test -z "$ac_err"; then
  -  rm -rf conftest*
  -  eval "ac_cv_header_$ac_safe=yes"
  +#include <$ac_header>
  +_ACEOF
  +if { (eval echo "$as_me:2149: \"$ac_cpp conftest.$ac_ext\"") >&5
  +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  +  ac_status=$?
  +  egrep -v '^ *\+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:2155: \$? = $ac_status" >&5
  +  (exit $ac_status); } >/dev/null; then
  +  if test -s conftest.err; then
  +    ac_cpp_err=$ac_c_preproc_warn_flag
  +  else
  +    ac_cpp_err=
  +  fi
  +else
  +  ac_cpp_err=yes
  +fi
  +if test -z "$ac_cpp_err"; then
  +  eval "$as_ac_Header=yes"
   else
  -  echo "$ac_err" >&5
  -  echo "configure: failed program was:" >&5
  +  echo "$as_me: failed program was:" >&5
     cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  eval "ac_cv_header_$ac_safe=no"
  +  eval "$as_ac_Header=no"
   fi
  -rm -f conftest*
  +rm -f conftest.err conftest.$ac_ext
   fi
  -if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
  -  echo "$ac_t""yes" 1>&6
  -    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
  -  cat >> confdefs.h <<EOF
  -#define $ac_tr_hdr 1
  +echo "$as_me:2174: result: `eval echo '${'$as_ac_Header'}'`" >&5
  +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
  +if test `eval echo '${'$as_ac_Header'}'` = yes; then
  +  cat >>confdefs.h <<EOF
  +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
   EOF
  - 
  -else
  -  echo "$ac_t""no" 1>&6
  +
   fi
   done
   
  -for ac_hdr in string.h strings.h stdlib.h sys/socket.h regex.h
  +for ac_header in string.h strings.h stdlib.h sys/socket.h regex.h
   do
  -ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
  -echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
  -echo "configure:1119: checking for $ac_hdr" >&5
  -if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
  +echo "$as_me:2187: checking for $ac_header" >&5
  +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
  +if eval "test \"\${$as_ac_Header+set}\" = set"; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  cat > conftest.$ac_ext <<EOF
  -#line 1124 "configure"
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 2193 "configure"
   #include "confdefs.h"
  -#include <$ac_hdr>
  -EOF
  -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  -{ (eval echo configure:1129: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  -if test -z "$ac_err"; then
  -  rm -rf conftest*
  -  eval "ac_cv_header_$ac_safe=yes"
  +#include <$ac_header>
  +_ACEOF
  +if { (eval echo "$as_me:2197: \"$ac_cpp conftest.$ac_ext\"") >&5
  +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  +  ac_status=$?
  +  egrep -v '^ *\+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:2203: \$? = $ac_status" >&5
  +  (exit $ac_status); } >/dev/null; then
  +  if test -s conftest.err; then
  +    ac_cpp_err=$ac_c_preproc_warn_flag
  +  else
  +    ac_cpp_err=
  +  fi
  +else
  +  ac_cpp_err=yes
  +fi
  +if test -z "$ac_cpp_err"; then
  +  eval "$as_ac_Header=yes"
   else
  -  echo "$ac_err" >&5
  -  echo "configure: failed program was:" >&5
  +  echo "$as_me: failed program was:" >&5
     cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  eval "ac_cv_header_$ac_safe=no"
  +  eval "$as_ac_Header=no"
   fi
  -rm -f conftest*
  +rm -f conftest.err conftest.$ac_ext
   fi
  -if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
  -  echo "$ac_t""yes" 1>&6
  -    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
  -  cat >> confdefs.h <<EOF
  -#define $ac_tr_hdr 1
  +echo "$as_me:2222: result: `eval echo '${'$as_ac_Header'}'`" >&5
  +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
  +if test `eval echo '${'$as_ac_Header'}'` = yes; then
  +  cat >>confdefs.h <<EOF
  +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
   EOF
  - 
  -else
  -  echo "$ac_t""no" 1>&6
  +
   fi
   done
  -
   
  -echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6
  -echo "configure:1157: checking for 8-bit clean memcmp" >&5
  -if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +echo "$as_me:2232: checking for working memcmp" >&5
  +echo $ECHO_N "checking for working memcmp... $ECHO_C" >&6
  +if test "${ac_cv_func_memcmp_working+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
     if test "$cross_compiling" = yes; then
  -  ac_cv_func_memcmp_clean=no
  +  ac_cv_func_memcmp_working=no
   else
  -  cat > conftest.$ac_ext <<EOF
  -#line 1165 "configure"
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 2241 "configure"
   #include "confdefs.h"
   
  -main()
  +int
  +main ()
   {
  -  char c0 = 0x40, c1 = 0x80, c2 = 0x81;
  -  exit(memcmp(&c0, &c2, 1) < 0 && memcmp(&c1, &c2, 1) < 0 ? 0 : 1);
  -}
   
  -EOF
  -if { (eval echo configure:1175: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
  -then
  -  ac_cv_func_memcmp_clean=yes
  -else
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  rm -fr conftest*
  -  ac_cv_func_memcmp_clean=no
  -fi
  -rm -fr conftest*
  -fi
  +  /* Some versions of memcmp are not 8-bit clean.  */
  +  char c0 = 0x40, c1 = 0x80, c2 = 0x81;
  +  if (memcmp(&c0, &c2, 1) >= 0 || memcmp(&c1, &c2, 1) >= 0)
  +    exit (1);
   
  -fi
  +  /* The Next x86 OpenStep bug shows up only when comparing 16 bytes
  +     or more and with at least one buffer not starting on a 4-byte boundary.
  +     William Lewis provided this test program.   */
  +  {
  +    char foo[21];
  +    char bar[21];
  +    int i;
  +    for (i = 0; i < 4; i++)
  +      {
  +        char *a = foo + i;
  +        char *b = bar + i;
  +        strcpy (a, "--------01111111");
  +        strcpy (b, "--------10000000");
  +        if (memcmp (a, b, 16) >= 0)
  +          exit (1);
  +      }
  +    exit (0);
  +  }
   
  -echo "$ac_t""$ac_cv_func_memcmp_clean" 1>&6
  -test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}"
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest$ac_exeext
  +if { (eval echo "$as_me:2277: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2280: \$? = $ac_status" >&5
  +  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
  +  { (eval echo "$as_me:2282: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2285: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_cv_func_memcmp_working=yes
  +else
  +  echo "$as_me: program exited with status $ac_status" >&5
  +echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_func_memcmp_working=no
  +fi
  +rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
  +fi
  +fi
  +echo "$as_me:2297: result: $ac_cv_func_memcmp_working" >&5
  +echo "${ECHO_T}$ac_cv_func_memcmp_working" >&6
  +test $ac_cv_func_memcmp_working = no && LIBOBJS="$LIBOBJS memcmp.$ac_objext"
   
   for ac_func in strtok getcwd mkdir strdup strerror
   do
  -echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
  -echo "configure:1195: checking for $ac_func" >&5
  -if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
  +echo "$as_me:2304: checking for $ac_func" >&5
  +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
  +if eval "test \"\${$as_ac_var+set}\" = set"; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  cat > conftest.$ac_ext <<EOF
  -#line 1200 "configure"
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 2310 "configure"
   #include "confdefs.h"
   /* System header to define __stub macros and hopefully few prototypes,
  -    which can conflict with char $ac_func(); below.  */
  +    which can conflict with char $ac_func (); below.  */
   #include <assert.h>
   /* Override any gcc2 internal prototype to avoid an error.  */
  +#ifdef __cplusplus
  +extern "C"
  +#endif
   /* We use char because int might match the return type of a gcc2
  -    builtin and then its argument prototype would still apply.  */
  -char $ac_func();
  -
  -int main() {
  +   builtin and then its argument prototype would still apply.  */
  +char $ac_func ();
  +char (*f) ();
   
  +int
  +main ()
  +{
   /* The GNU C library defines this for functions which it implements
       to always fail with ENOSYS.  Some functions are actually named
       something starting with __ and the normal name is an alias.  */
   #if defined (__stub_$ac_func) || defined (__stub___$ac_func)
   choke me
   #else
  -$ac_func();
  +f = $ac_func;
   #endif
   
  -; return 0; }
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext conftest$ac_exeext
  +if { (eval echo "$as_me:2341: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2344: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest$ac_exeext'
  +  { (eval echo "$as_me:2347: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2350: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  eval "$as_ac_var=yes"
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +eval "$as_ac_var=no"
  +fi
  +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  +fi
  +echo "$as_me:2360: result: `eval echo '${'$as_ac_var'}'`" >&5
  +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
  +if test `eval echo '${'$as_ac_var'}'` = yes; then
  +  cat >>confdefs.h <<EOF
  +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
   EOF
  -if { (eval echo configure:1223: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  -  rm -rf conftest*
  -  eval "ac_cv_func_$ac_func=yes"
  -else
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  eval "ac_cv_func_$ac_func=no"
  -fi
  -rm -f conftest*
  -fi
   
  -if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
  -  echo "$ac_t""yes" 1>&6
  -    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
  -  cat >> confdefs.h <<EOF
  -#define $ac_tr_func 1
  -EOF
  - 
  -else
  -  echo "$ac_t""no" 1>&6
   fi
   done
   
   for ac_func in fstat strchr bcopy bzero
   do
  -echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
  -echo "configure:1250: checking for $ac_func" >&5
  -if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
  +echo "$as_me:2373: checking for $ac_func" >&5
  +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
  +if eval "test \"\${$as_ac_var+set}\" = set"; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  cat > conftest.$ac_ext <<EOF
  -#line 1255 "configure"
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 2379 "configure"
   #include "confdefs.h"
   /* System header to define __stub macros and hopefully few prototypes,
  -    which can conflict with char $ac_func(); below.  */
  +    which can conflict with char $ac_func (); below.  */
   #include <assert.h>
   /* Override any gcc2 internal prototype to avoid an error.  */
  +#ifdef __cplusplus
  +extern "C"
  +#endif
   /* We use char because int might match the return type of a gcc2
  -    builtin and then its argument prototype would still apply.  */
  -char $ac_func();
  +   builtin and then its argument prototype would still apply.  */
  +char $ac_func ();
  +char (*f) ();
   
  -int main() {
  -
  +int
  +main ()
  +{
   /* The GNU C library defines this for functions which it implements
       to always fail with ENOSYS.  Some functions are actually named
       something starting with __ and the normal name is an alias.  */
   #if defined (__stub_$ac_func) || defined (__stub___$ac_func)
   choke me
   #else
  -$ac_func();
  +f = $ac_func;
   #endif
   
  -; return 0; }
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext conftest$ac_exeext
  +if { (eval echo "$as_me:2410: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2413: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest$ac_exeext'
  +  { (eval echo "$as_me:2416: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2419: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  eval "$as_ac_var=yes"
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +eval "$as_ac_var=no"
  +fi
  +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  +fi
  +echo "$as_me:2429: result: `eval echo '${'$as_ac_var'}'`" >&5
  +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
  +if test `eval echo '${'$as_ac_var'}'` = yes; then
  +  cat >>confdefs.h <<EOF
  +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
   EOF
  -if { (eval echo configure:1278: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  -  rm -rf conftest*
  -  eval "ac_cv_func_$ac_func=yes"
  -else
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  eval "ac_cv_func_$ac_func=no"
  -fi
  -rm -f conftest*
  -fi
   
  -if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
  -  echo "$ac_t""yes" 1>&6
  -    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
  -  cat >> confdefs.h <<EOF
  -#define $ac_tr_func 1
  -EOF
  - 
  -else
  -  echo "$ac_t""no" 1>&6
   fi
   done
   
   for ac_func in memmove setbuf socket vsnprintf snprintf
   do
  -echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
  -echo "configure:1305: checking for $ac_func" >&5
  -if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
  +echo "$as_me:2442: checking for $ac_func" >&5
  +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
  +if eval "test \"\${$as_ac_var+set}\" = set"; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  cat > conftest.$ac_ext <<EOF
  -#line 1310 "configure"
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 2448 "configure"
   #include "confdefs.h"
   /* System header to define __stub macros and hopefully few prototypes,
  -    which can conflict with char $ac_func(); below.  */
  +    which can conflict with char $ac_func (); below.  */
   #include <assert.h>
   /* Override any gcc2 internal prototype to avoid an error.  */
  +#ifdef __cplusplus
  +extern "C"
  +#endif
   /* We use char because int might match the return type of a gcc2
  -    builtin and then its argument prototype would still apply.  */
  -char $ac_func();
  +   builtin and then its argument prototype would still apply.  */
  +char $ac_func ();
  +char (*f) ();
   
  -int main() {
  -
  +int
  +main ()
  +{
   /* The GNU C library defines this for functions which it implements
       to always fail with ENOSYS.  Some functions are actually named
       something starting with __ and the normal name is an alias.  */
   #if defined (__stub_$ac_func) || defined (__stub___$ac_func)
   choke me
   #else
  -$ac_func();
  +f = $ac_func;
   #endif
   
  -; return 0; }
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext conftest$ac_exeext
  +if { (eval echo "$as_me:2479: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2482: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest$ac_exeext'
  +  { (eval echo "$as_me:2485: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2488: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  eval "$as_ac_var=yes"
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +eval "$as_ac_var=no"
  +fi
  +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  +fi
  +echo "$as_me:2498: result: `eval echo '${'$as_ac_var'}'`" >&5
  +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
  +if test `eval echo '${'$as_ac_var'}'` = yes; then
  +  cat >>confdefs.h <<EOF
  +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
   EOF
  -if { (eval echo configure:1333: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  -  rm -rf conftest*
  -  eval "ac_cv_func_$ac_func=yes"
  -else
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  eval "ac_cv_func_$ac_func=no"
  -fi
  -rm -f conftest*
  -fi
   
  -if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
  -  echo "$ac_t""yes" 1>&6
  -    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
  -  cat >> confdefs.h <<EOF
  -#define $ac_tr_func 1
  -EOF
  - 
  -else
  -  echo "$ac_t""no" 1>&6
   fi
   done
   
  -
  -
  -
  -
   echo $ac_n "checking for broken readdir ... $ac_c"
   if test "$cross_compiling" = yes; then
  -    { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
  +  { { echo "$as_me:2510: error: cannot run test program while cross compiling" >&5
  +echo "$as_me: error: cannot run test program while cross compiling" >&2;}
  +   { (exit 1); exit 1; }; }
   else
  -  cat > conftest.$ac_ext <<EOF
  -#line 1366 "configure"
  +  cat >conftest.$ac_ext <<_ACEOF
  +#line 2515 "configure"
   #include "confdefs.h"
   #include <sys/types.h>
   #include <dirent.h>
   main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d);
   if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 &&
  -di->d_name[0] == 0) return 0; return 1;} 
  -EOF
  -if { (eval echo configure:1374: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
  -then
  -  echo yes;cat >> confdefs.h <<\EOF
  +di->d_name[0] == 0) return 0; return 1;}
  +_ACEOF
  +rm -f conftest$ac_exeext
  +if { (eval echo "$as_me:2524: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2527: \$? = $ac_status" >&5
  +  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
  +  { (eval echo "$as_me:2529: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2532: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  echo yes;cat >>confdefs.h <<\EOF
   #define HAVE_BROKEN_READDIR 1
   EOF
   
   else
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  rm -fr conftest*
  -  echo no
  -fi
  -rm -fr conftest*
  -fi
  +  echo "$as_me: program exited with status $ac_status" >&5
  +echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +echo no
  +fi
  +rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
  +fi
  +
  +echo "$as_me:2547: checking for gzwrite in -lz" >&5
  +echo $ECHO_N "checking for gzwrite in -lz... $ECHO_C" >&6
  +if test "${ac_cv_lib_z_gzwrite+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  ac_check_lib_save_LIBS=$LIBS
  +LIBS="-lz  $LIBS"
  +cat >conftest.$ac_ext <<_ACEOF
  +#line 2555 "configure"
  +#include "confdefs.h"
   
  +/* Override any gcc2 internal prototype to avoid an error.  */
  +#ifdef __cplusplus
  +extern "C"
  +#endif
  +/* We use char because int might match the return type of a gcc2
  +   builtin and then its argument prototype would still apply.  */
  +char gzwrite ();
  +int
  +main ()
  +{
  +gzwrite ();
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext conftest$ac_exeext
  +if { (eval echo "$as_me:2574: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2577: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +         { ac_try='test -s conftest$ac_exeext'
  +  { (eval echo "$as_me:2580: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:2583: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_cv_lib_z_gzwrite=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +cat conftest.$ac_ext >&5
  +ac_cv_lib_z_gzwrite=no
  +fi
  +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  +LIBS=$ac_check_lib_save_LIBS
  +fi
  +echo "$as_me:2594: result: $ac_cv_lib_z_gzwrite" >&5
  +echo "${ECHO_T}$ac_cv_lib_z_gzwrite" >&6
  +if test $ac_cv_lib_z_gzwrite = yes; then
  +  cat >>confdefs.h <<EOF
  +#define HAVE_LIBZ 1
  +EOF
  +
  +  LIBS="-lz $LIBS"
   
  +fi
   
   ac_aux_dir=
   for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
  @@ -1404,101 +2619,93 @@
     fi
   done
   if test -z "$ac_aux_dir"; then
  -  { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; }
  -fi
  -ac_config_guess=$ac_aux_dir/config.guess
  -ac_config_sub=$ac_aux_dir/config.sub
  -ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
  -
  +  { { echo "$as_me:2622: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
  +echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
  +   { (exit 1); exit 1; }; }
  +fi
  +ac_config_guess="$SHELL $ac_aux_dir/config.guess"
  +ac_config_sub="$SHELL $ac_aux_dir/config.sub"
  +ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
   
  -# Do some error checking and defaulting for the host and target type.
  -# The inputs are:
  -#    configure --host=HOST --target=TARGET --build=BUILD NONOPT
  -#
  -# The rules are:
  -# 1. You are not allowed to specify --host, --target, and nonopt at the
  -#    same time.
  -# 2. Host defaults to nonopt.
  -# 3. If nonopt is not specified, then host defaults to the current host,
  -#    as determined by config.guess.
  -# 4. Target and build default to nonopt.
  -# 5. If nonopt is not specified, then target and build default to host.
  +# Make sure we can run config.sub.
  +$ac_config_sub sun4 >/dev/null 2>&1 ||
  +  { { echo "$as_me:2632: error: cannot run $ac_config_sub" >&5
  +echo "$as_me: error: cannot run $ac_config_sub" >&2;}
  +   { (exit 1); exit 1; }; }
  +
  +echo "$as_me:2636: checking build system type" >&5
  +echo $ECHO_N "checking build system type... $ECHO_C" >&6
  +if test "${ac_cv_build+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  ac_cv_build_alias=$build_alias
  +test -z "$ac_cv_build_alias" &&
  +  ac_cv_build_alias=`$ac_config_guess`
  +test -z "$ac_cv_build_alias" &&
  +  { { echo "$as_me:2645: error: cannot guess build type; you must specify one" >&5
  +echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
  +   { (exit 1); exit 1; }; }
  +ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
  +  { { echo "$as_me:2649: error: $ac_config_sub $ac_cv_build_alias failed." >&5
  +echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed." >&2;}
  +   { (exit 1); exit 1; }; }
  +
  +fi
  +echo "$as_me:2654: result: $ac_cv_build" >&5
  +echo "${ECHO_T}$ac_cv_build" >&6
  +build=$ac_cv_build
  +build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
  +build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
  +build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
  +
  +echo "$as_me:2661: checking host system type" >&5
  +echo $ECHO_N "checking host system type... $ECHO_C" >&6
  +if test "${ac_cv_host+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  ac_cv_host_alias=$host_alias
  +test -z "$ac_cv_host_alias" &&
  +  ac_cv_host_alias=$ac_cv_build_alias
  +ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
  +  { { echo "$as_me:2670: error: $ac_config_sub $ac_cv_host_alias failed" >&5
  +echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
  +   { (exit 1); exit 1; }; }
  +
  +fi
  +echo "$as_me:2675: result: $ac_cv_host" >&5
  +echo "${ECHO_T}$ac_cv_host" >&6
  +host=$ac_cv_host
  +host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
  +host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
  +host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
  +
  +echo "$as_me:2682: checking target system type" >&5
  +echo $ECHO_N "checking target system type... $ECHO_C" >&6
  +if test "${ac_cv_target+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  ac_cv_target_alias=$target_alias
  +test "x$ac_cv_target_alias" = "x" &&
  +  ac_cv_target_alias=$ac_cv_host_alias
  +ac_cv_target=`$ac_config_sub $ac_cv_target_alias` ||
  +  { { echo "$as_me:2691: error: $ac_config_sub $ac_cv_target_alias failed" >&5
  +echo "$as_me: error: $ac_config_sub $ac_cv_target_alias failed" >&2;}
  +   { (exit 1); exit 1; }; }
  +
  +fi
  +echo "$as_me:2696: result: $ac_cv_target" >&5
  +echo "${ECHO_T}$ac_cv_target" >&6
  +target=$ac_cv_target
  +target_cpu=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
  +target_vendor=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
  +target_os=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
   
   # The aliases save the names the user supplied, while $host etc.
   # will get canonicalized.
  -case $host---$target---$nonopt in
  -NONE---*---* | *---NONE---* | *---*---NONE) ;;
  -*) { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } ;;
  -esac
  -
  -
  -# Make sure we can run config.sub.
  -if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then :
  -else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
  -fi
  -
  -echo $ac_n "checking host system type""... $ac_c" 1>&6
  -echo "configure:1442: checking host system type" >&5
  -
  -host_alias=$host
  -case "$host_alias" in
  -NONE)
  -  case $nonopt in
  -  NONE)
  -    if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then :
  -    else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; }
  -    fi ;;
  -  *) host_alias=$nonopt ;;
  -  esac ;;
  -esac
  -
  -host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias`
  -host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
  -host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
  -host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
  -echo "$ac_t""$host" 1>&6
  -
  -echo $ac_n "checking target system type""... $ac_c" 1>&6
  -echo "configure:1463: checking target system type" >&5
  -
  -target_alias=$target
  -case "$target_alias" in
  -NONE)
  -  case $nonopt in
  -  NONE) target_alias=$host_alias ;;
  -  *) target_alias=$nonopt ;;
  -  esac ;;
  -esac
  -
  -target=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $target_alias`
  -target_cpu=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
  -target_vendor=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
  -target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
  -echo "$ac_t""$target" 1>&6
  -
  -echo $ac_n "checking build system type""... $ac_c" 1>&6
  -echo "configure:1481: checking build system type" >&5
  -
  -build_alias=$build
  -case "$build_alias" in
  -NONE)
  -  case $nonopt in
  -  NONE) build_alias=$host_alias ;;
  -  *) build_alias=$nonopt ;;
  -  esac ;;
  -esac
  -
  -build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias`
  -build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
  -build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
  -build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
  -echo "$ac_t""$build" 1>&6
  -
  -test "$host_alias" != "$target_alias" &&
  +test -n "$target_alias" &&
     test "$program_prefix$program_suffix$program_transform_name" = \
       NONENONEs,x,x, &&
     program_prefix=${target_alias}-
  -
   case "$host_os" in
   	*linux*)   CCOPTFLAGS="-Wall";;
           *solaris*) LIBS="-lsocket -lnsl";;
  @@ -1510,381 +2717,836 @@
     case "${enableval}" in
      yes) ossp=true  ;;
       no) ossp=false ;;
  -     *) { echo "configure: error: bad value ${enableval} for --disable-ossp option" 1>&2; exit 1; } ;;
  +     *) { { echo "$as_me:2720: error: bad value ${enableval} for --disable-ossp option" >&5
  +echo "$as_me: error: bad value ${enableval} for --disable-ossp option" >&2;}
  +   { (exit 1); exit 1; }; } ;;
   esac
   
   else
     ossp=true
  -
  -fi
   
  +fi;
   if test ".$ossp" = ".true"; then
       CFLAGS="$CFLAGS -DOSSP_PATCHES"
   fi
   
  -trap '' 1 2 15
  -cat > confcache <<\EOF
  +ac_config_files="$ac_config_files Makefile"
  +cat >confcache <<\_ACEOF
   # This file is a shell script that caches the results of configure
   # tests run on this system so they can be shared between configure
  -# scripts and configure runs.  It is not useful on other systems.
  -# If it contains results you don't want to keep, you may remove or edit it.
  +# scripts and configure runs, see configure's option --config-cache.
  +# It is not useful on other systems.  If it contains results you don't
  +# want to keep, you may remove or edit it.
   #
  -# By default, configure uses ./config.cache as the cache file,
  -# creating it if it does not exist already.  You can give configure
  -# the --cache-file=FILE option to use a different cache file; that is
  -# what configure does when it calls configure scripts in
  -# subdirectories, so they share the cache.
  -# Giving --cache-file=/dev/null disables caching, for debugging configure.
  -# config.status only pays attention to the cache file if you give it the
  -# --recheck option to rerun configure.
  +# config.status only pays attention to the cache file if you give it
  +# the --recheck option to rerun configure.
   #
  -EOF
  +# `ac_cv_env_foo' variables (set or unset) will be overriden when
  +# loading this file, other *unset* `ac_cv_foo' will be assigned the
  +# following values.
  +
  +_ACEOF
  +
   # The following way of writing the cache mishandles newlines in values,
   # but we know of no workaround that is simple, portable, and efficient.
   # So, don't put newlines in cache variables' values.
   # Ultrix sh set writes to stderr and can't be redirected directly,
   # and sets the high bit in the cache file unless we assign to the vars.
  -(set) 2>&1 |
  -  case `(ac_space=' '; set | grep ac_space) 2>&1` in
  -  *ac_space=\ *)
  -    # `set' does not quote correctly, so add quotes (double-quote substitution
  -    # turns \\\\ into \\, and sed turns \\ into \).
  -    sed -n \
  -      -e "s/'/'\\\\''/g" \
  -      -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
  -    ;;
  -  *)
  -    # `set' quotes correctly as required by POSIX, so do not add quotes.
  -    sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
  -    ;;
  -  esac >> confcache
  -if cmp -s $cache_file confcache; then
  -  :
  -else
  +{
  +  (set) 2>&1 |
  +    case `(ac_space=' '; set | grep ac_space) 2>&1` in
  +    *ac_space=\ *)
  +      # `set' does not quote correctly, so add quotes (double-quote
  +      # substitution turns \\\\ into \\, and sed turns \\ into \).
  +      sed -n \
  +        "s/'/'\\\\''/g;
  +    	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
  +      ;;
  +    *)
  +      # `set' quotes correctly as required by POSIX, so do not add quotes.
  +      sed -n \
  +        "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
  +      ;;
  +    esac;
  +} |
  +  sed '
  +     t clear
  +     : clear
  +     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
  +     t end
  +     /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
  +     : end' >>confcache
  +if cmp -s $cache_file confcache; then :; else
     if test -w $cache_file; then
  -    echo "updating cache $cache_file"
  -    cat confcache > $cache_file
  +    test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
  +    cat confcache >$cache_file
     else
       echo "not updating unwritable cache $cache_file"
     fi
   fi
   rm -f confcache
   
  -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
  -
   test "x$prefix" = xNONE && prefix=$ac_default_prefix
   # Let make expand exec_prefix.
   test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
   
  -# Any assignment to VPATH causes Sun make to only execute
  -# the first set of double-colon rules, so remove it if not needed.
  -# If there is a colon in the path, we need to keep it.
  +# VPATH may cause trouble with some makes, so we remove $(srcdir),
  +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
  +# trailing colons and then remove the whole line if VPATH becomes empty
  +# (actually we leave an empty line to preserve line numbers).
   if test "x$srcdir" = x.; then
  -  ac_vpsub='/^[ 	]*VPATH[ 	]*=[^:]*$/d'
  +  ac_vpsub='/^[ 	]*VPATH[ 	]*=/{
  +s/:*\$(srcdir):*/:/;
  +s/:*\${srcdir}:*/:/;
  +s/:*@srcdir@:*/:/;
  +s/^\([^=]*=[ 	]*\):*/\1/;
  +s/:*$//;
  +s/^[^=]*=[ 	]*$//;
  +}'
   fi
   
  -trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
  -
   DEFS=-DHAVE_CONFIG_H
   
  -# Without the "./", some shells look in PATH for config.status.
   : ${CONFIG_STATUS=./config.status}
  -
  -echo creating $CONFIG_STATUS
  -rm -f $CONFIG_STATUS
  -cat > $CONFIG_STATUS <<EOF
  -#! /bin/sh
  +ac_clean_files_save=$ac_clean_files
  +ac_clean_files="$ac_clean_files $CONFIG_STATUS"
  +{ echo "$as_me:2813: creating $CONFIG_STATUS" >&5
  +echo "$as_me: creating $CONFIG_STATUS" >&6;}
  +cat >$CONFIG_STATUS <<_ACEOF
  +#! $SHELL
   # Generated automatically by configure.
   # Run this file to recreate the current configuration.
  -# This directory was configured as follows,
  -# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
  -#
  -# $0 $ac_configure_args
  -#
   # Compiler output produced by configure, useful for debugging
  -# configure, is in ./config.log if it exists.
  +# configure, is in config.log if it exists.
   
  -ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
  -for ac_option
  +debug=false
  +SHELL=\${CONFIG_SHELL-$SHELL}
  +ac_cs_invocation="\$0 \$@"
  +
  +_ACEOF
  +
  +cat >>$CONFIG_STATUS <<\_ACEOF
  +# Be Bourne compatible
  +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
  +  emulate sh
  +  NULLCMD=:
  +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
  +  set -o posix
  +fi
  +
  +# Name of the executable.
  +as_me=`echo "$0" |sed 's,.*[\\/],,'`
  +
  +if expr a : '\(a\)' >/dev/null 2>&1; then
  +  as_expr=expr
  +else
  +  as_expr=false
  +fi
  +
  +rm -f conf$$ conf$$.exe conf$$.file
  +echo >conf$$.file
  +if ln -s conf$$.file conf$$ 2>/dev/null; then
  +  # We could just check for DJGPP; but this test a) works b) is more generic
  +  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
  +  if test -f conf$$.exe; then
  +    # Don't use ln at all; we don't have any links
  +    as_ln_s='cp -p'
  +  else
  +    as_ln_s='ln -s'
  +  fi
  +elif ln conf$$.file conf$$ 2>/dev/null; then
  +  as_ln_s=ln
  +else
  +  as_ln_s='cp -p'
  +fi
  +rm -f conf$$ conf$$.exe conf$$.file
  +
  +as_executable_p="test -f"
  +
  +# Support unset when possible.
  +if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
  +  as_unset=unset
  +else
  +  as_unset=false
  +fi
  +
  +# NLS nuisances.
  +$as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; }
  +$as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; }
  +$as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; }
  +$as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; }
  +$as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; }
  +$as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; }
  +$as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; }
  +$as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; }
  +
  +# IFS
  +# We need space, tab and new line, in precisely that order.
  +as_nl='
  +'
  +IFS=" 	$as_nl"
  +
  +# CDPATH.
  +$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; }
  +
  +exec 6>&1
  +
  +_ACEOF
  +
  +# Files that config.status was made for.
  +if test -n "$ac_config_files"; then
  +  echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
  +fi
  +
  +if test -n "$ac_config_headers"; then
  +  echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
  +fi
  +
  +if test -n "$ac_config_links"; then
  +  echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
  +fi
  +
  +if test -n "$ac_config_commands"; then
  +  echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
  +fi
  +
  +cat >>$CONFIG_STATUS <<\EOF
  +
  +ac_cs_usage="\
  +\`$as_me' instantiates files from templates according to the
  +current configuration.
  +
  +Usage: $0 [OPTIONS] [FILE]...
  +
  +  -h, --help       print this help, then exit
  +  -V, --version    print version number, then exit
  +  -d, --debug      don't remove temporary files
  +      --recheck    update $as_me by reconfiguring in the same conditions
  +  --file=FILE[:TEMPLATE]
  +                   instantiate the configuration file FILE
  +  --header=FILE[:TEMPLATE]
  +                   instantiate the configuration header FILE
  +
  +Configuration files:
  +$config_files
  +
  +Configuration headers:
  +$config_headers
  +
  +Report bugs to <bug-autoconf@gnu.org>."
  +EOF
  +
  +cat >>$CONFIG_STATUS <<EOF
  +ac_cs_version="\\
  +config.status
  +configured by $0, generated by GNU Autoconf 2.52,
  +  with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
  +
  +Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
  +Free Software Foundation, Inc.
  +This config.status script is free software; the Free Software Foundation
  +gives unlimited permission to copy, distribute and modify it."
  +srcdir=$srcdir
  +EOF
  +
  +cat >>$CONFIG_STATUS <<\EOF
  +# If no file are specified by the user, then we need to provide default
  +# value.  By we need to know if files were specified by the user.
  +ac_need_defaults=:
  +while test $# != 0
   do
  -  case "\$ac_option" in
  +  case $1 in
  +  --*=*)
  +    ac_option=`expr "x$1" : 'x\([^=]*\)='`
  +    ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
  +    shift
  +    set dummy "$ac_option" "$ac_optarg" ${1+"$@"}
  +    shift
  +    ;;
  +  -*);;
  +  *) # This is not an option, so the user has probably given explicit
  +     # arguments.
  +     ac_need_defaults=false;;
  +  esac
  +
  +  case $1 in
  +  # Handling of the options.
  +EOF
  +cat >>$CONFIG_STATUS <<EOF
     -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
  -    echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
  -    exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
  -  -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
  -    echo "$CONFIG_STATUS generated by autoconf version 2.13"
  -    exit 0 ;;
  -  -help | --help | --hel | --he | --h)
  -    echo "\$ac_cs_usage"; exit 0 ;;
  -  *) echo "\$ac_cs_usage"; exit 1 ;;
  +    echo "running $SHELL $0 " $ac_configure_args " --no-create --no-recursion"
  +    exec $SHELL $0 $ac_configure_args --no-create --no-recursion ;;
  +EOF
  +cat >>$CONFIG_STATUS <<\EOF
  +  --version | --vers* | -V )
  +    echo "$ac_cs_version"; exit 0 ;;
  +  --he | --h)
  +    # Conflict between --help and --header
  +    { { echo "$as_me:2985: error: ambiguous option: $1
  +Try \`$0 --help' for more information." >&5
  +echo "$as_me: error: ambiguous option: $1
  +Try \`$0 --help' for more information." >&2;}
  +   { (exit 1); exit 1; }; };;
  +  --help | --hel | -h )
  +    echo "$ac_cs_usage"; exit 0 ;;
  +  --debug | --d* | -d )
  +    debug=: ;;
  +  --file | --fil | --fi | --f )
  +    shift
  +    CONFIG_FILES="$CONFIG_FILES $1"
  +    ac_need_defaults=false;;
  +  --header | --heade | --head | --hea )
  +    shift
  +    CONFIG_HEADERS="$CONFIG_HEADERS $1"
  +    ac_need_defaults=false;;
  +
  +  # This is an error.
  +  -*) { { echo "$as_me:3004: error: unrecognized option: $1
  +Try \`$0 --help' for more information." >&5
  +echo "$as_me: error: unrecognized option: $1
  +Try \`$0 --help' for more information." >&2;}
  +   { (exit 1); exit 1; }; } ;;
  +
  +  *) ac_config_targets="$ac_config_targets $1" ;;
  +
     esac
  +  shift
   done
   
  -ac_given_srcdir=$srcdir
  +exec 5>>config.log
  +cat >&5 << _ACEOF
   
  -trap 'rm -fr `echo "Makefile config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
  +## ----------------------- ##
  +## Running config.status.  ##
  +## ----------------------- ##
  +
  +This file was extended by $as_me 2.52, executed with
  +  CONFIG_FILES    = $CONFIG_FILES
  +  CONFIG_HEADERS  = $CONFIG_HEADERS
  +  CONFIG_LINKS    = $CONFIG_LINKS
  +  CONFIG_COMMANDS = $CONFIG_COMMANDS
  +  > $ac_cs_invocation
  +on `(hostname || uname -n) 2>/dev/null | sed 1q`
  +
  +_ACEOF
   EOF
  -cat >> $CONFIG_STATUS <<EOF
   
  -# Protect against being on the right side of a sed subst in config.status.
  -sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
  - s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
  -$ac_vpsub
  -$extrasub
  -s%@SHELL@%$SHELL%g
  -s%@CFLAGS@%$CFLAGS%g
  -s%@CPPFLAGS@%$CPPFLAGS%g
  -s%@CXXFLAGS@%$CXXFLAGS%g
  -s%@FFLAGS@%$FFLAGS%g
  -s%@DEFS@%$DEFS%g
  -s%@LDFLAGS@%$LDFLAGS%g
  -s%@LIBS@%$LIBS%g
  -s%@exec_prefix@%$exec_prefix%g
  -s%@prefix@%$prefix%g
  -s%@program_transform_name@%$program_transform_name%g
  -s%@bindir@%$bindir%g
  -s%@sbindir@%$sbindir%g
  -s%@libexecdir@%$libexecdir%g
  -s%@datadir@%$datadir%g
  -s%@sysconfdir@%$sysconfdir%g
  -s%@sharedstatedir@%$sharedstatedir%g
  -s%@localstatedir@%$localstatedir%g
  -s%@libdir@%$libdir%g
  -s%@includedir@%$includedir%g
  -s%@oldincludedir@%$oldincludedir%g
  -s%@infodir@%$infodir%g
  -s%@mandir@%$mandir%g
  -s%@CC@%$CC%g
  -s%@AWK@%$AWK%g
  -s%@CPP@%$CPP%g
  -s%@LIBOBJS@%$LIBOBJS%g
  -s%@CCOPTFLAGS@%$CCOPTFLAGS%g
  -s%@host@%$host%g
  -s%@host_alias@%$host_alias%g
  -s%@host_cpu@%$host_cpu%g
  -s%@host_vendor@%$host_vendor%g
  -s%@host_os@%$host_os%g
  -s%@target@%$target%g
  -s%@target_alias@%$target_alias%g
  -s%@target_cpu@%$target_cpu%g
  -s%@target_vendor@%$target_vendor%g
  -s%@target_os@%$target_os%g
  -s%@build@%$build%g
  -s%@build_alias@%$build_alias%g
  -s%@build_cpu@%$build_cpu%g
  -s%@build_vendor@%$build_vendor%g
  -s%@build_os@%$build_os%g
  +cat >>$CONFIG_STATUS <<\EOF
  +for ac_config_target in $ac_config_targets
  +do
  +  case "$ac_config_target" in
  +  # Handling of arguments.
  +  "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
  +  "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
  +  *) { { echo "$as_me:3041: error: invalid argument: $ac_config_target" >&5
  +echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
  +   { (exit 1); exit 1; }; };;
  +  esac
  +done
   
  -CEOF
  +# If the user did not use the arguments to specify the items to instantiate,
  +# then the envvar interface is used.  Set only those that are not.
  +# We use the long form for the default assignment because of an extremely
  +# bizarre bug on SunOS 4.1.3.
  +if $ac_need_defaults; then
  +  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
  +  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
  +fi
  +
  +# Create a temporary directory, and hook for its removal unless debugging.
  +$debug ||
  +{
  +  trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
  +  trap '{ (exit 1); exit 1; }' 1 2 13 15
  +}
  +
  +# Create a (secure) tmp directory for tmp files.
  +: ${TMPDIR=/tmp}
  +{
  +  tmp=`(umask 077 && mktemp -d -q "$TMPDIR/csXXXXXX") 2>/dev/null` &&
  +  test -n "$tmp" && test -d "$tmp"
  +}  ||
  +{
  +  tmp=$TMPDIR/cs$$-$RANDOM
  +  (umask 077 && mkdir $tmp)
  +} ||
  +{
  +   echo "$me: cannot create a temporary directory in $TMPDIR" >&2
  +   { (exit 1); exit 1; }
  +}
  +
   EOF
   
  -cat >> $CONFIG_STATUS <<\EOF
  +cat >>$CONFIG_STATUS <<EOF
   
  -# Split the substitutions into bite-sized pieces for seds with
  -# small command number limits, like on Digital OSF/1 and HP-UX.
  -ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
  -ac_file=1 # Number of current file.
  -ac_beg=1 # First line for current file.
  -ac_end=$ac_max_sed_cmds # Line after last line for current file.
  -ac_more_lines=:
  -ac_sed_cmds=""
  -while $ac_more_lines; do
  -  if test $ac_beg -gt 1; then
  -    sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
  -  else
  -    sed "${ac_end}q" conftest.subs > conftest.s$ac_file
  -  fi
  -  if test ! -s conftest.s$ac_file; then
  -    ac_more_lines=false
  -    rm -f conftest.s$ac_file
  -  else
  -    if test -z "$ac_sed_cmds"; then
  -      ac_sed_cmds="sed -f conftest.s$ac_file"
  +#
  +# CONFIG_FILES section.
  +#
  +
  +# No need to generate the scripts if there are no CONFIG_FILES.
  +# This happens for instance when ./config.status config.h
  +if test -n "\$CONFIG_FILES"; then
  +  # Protect against being on the right side of a sed subst in config.status.
  +  sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
  +   s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
  +s,@SHELL@,$SHELL,;t t
  +s,@exec_prefix@,$exec_prefix,;t t
  +s,@prefix@,$prefix,;t t
  +s,@program_transform_name@,$program_transform_name,;t t
  +s,@bindir@,$bindir,;t t
  +s,@sbindir@,$sbindir,;t t
  +s,@libexecdir@,$libexecdir,;t t
  +s,@datadir@,$datadir,;t t
  +s,@sysconfdir@,$sysconfdir,;t t
  +s,@sharedstatedir@,$sharedstatedir,;t t
  +s,@localstatedir@,$localstatedir,;t t
  +s,@libdir@,$libdir,;t t
  +s,@includedir@,$includedir,;t t
  +s,@oldincludedir@,$oldincludedir,;t t
  +s,@infodir@,$infodir,;t t
  +s,@mandir@,$mandir,;t t
  +s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
  +s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
  +s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
  +s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
  +s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
  +s,@build_alias@,$build_alias,;t t
  +s,@host_alias@,$host_alias,;t t
  +s,@target_alias@,$target_alias,;t t
  +s,@ECHO_C@,$ECHO_C,;t t
  +s,@ECHO_N@,$ECHO_N,;t t
  +s,@ECHO_T@,$ECHO_T,;t t
  +s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
  +s,@DEFS@,$DEFS,;t t
  +s,@LIBS@,$LIBS,;t t
  +s,@CC@,$CC,;t t
  +s,@CFLAGS@,$CFLAGS,;t t
  +s,@LDFLAGS@,$LDFLAGS,;t t
  +s,@CPPFLAGS@,$CPPFLAGS,;t t
  +s,@ac_ct_CC@,$ac_ct_CC,;t t
  +s,@EXEEXT@,$EXEEXT,;t t
  +s,@OBJEXT@,$OBJEXT,;t t
  +s,@AWK@,$AWK,;t t
  +s,@CPP@,$CPP,;t t
  +s,@LIBOBJS@,$LIBOBJS,;t t
  +s,@CCOPTFLAGS@,$CCOPTFLAGS,;t t
  +s,@build@,$build,;t t
  +s,@build_cpu@,$build_cpu,;t t
  +s,@build_vendor@,$build_vendor,;t t
  +s,@build_os@,$build_os,;t t
  +s,@host@,$host,;t t
  +s,@host_cpu@,$host_cpu,;t t
  +s,@host_vendor@,$host_vendor,;t t
  +s,@host_os@,$host_os,;t t
  +s,@target@,$target,;t t
  +s,@target_cpu@,$target_cpu,;t t
  +s,@target_vendor@,$target_vendor,;t t
  +s,@target_os@,$target_os,;t t
  +CEOF
  +
  +EOF
  +
  +  cat >>$CONFIG_STATUS <<\EOF
  +  # Split the substitutions into bite-sized pieces for seds with
  +  # small command number limits, like on Digital OSF/1 and HP-UX.
  +  ac_max_sed_lines=48
  +  ac_sed_frag=1 # Number of current file.
  +  ac_beg=1 # First line for current file.
  +  ac_end=$ac_max_sed_lines # Line after last line for current file.
  +  ac_more_lines=:
  +  ac_sed_cmds=
  +  while $ac_more_lines; do
  +    if test $ac_beg -gt 1; then
  +      sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
       else
  -      ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
  +      sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
       fi
  -    ac_file=`expr $ac_file + 1`
  -    ac_beg=$ac_end
  -    ac_end=`expr $ac_end + $ac_max_sed_cmds`
  +    if test ! -s $tmp/subs.frag; then
  +      ac_more_lines=false
  +    else
  +      # The purpose of the label and of the branching condition is to
  +      # speed up the sed processing (if there are no `@' at all, there
  +      # is no need to browse any of the substitutions).
  +      # These are the two extra sed commands mentioned above.
  +      (echo ':t
  +  /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
  +      if test -z "$ac_sed_cmds"; then
  +  	ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
  +      else
  +  	ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
  +      fi
  +      ac_sed_frag=`expr $ac_sed_frag + 1`
  +      ac_beg=$ac_end
  +      ac_end=`expr $ac_end + $ac_max_sed_lines`
  +    fi
  +  done
  +  if test -z "$ac_sed_cmds"; then
  +    ac_sed_cmds=cat
     fi
  -done
  -if test -z "$ac_sed_cmds"; then
  -  ac_sed_cmds=cat
  -fi
  -EOF
  +fi # test -n "$CONFIG_FILES"
   
  -cat >> $CONFIG_STATUS <<EOF
  -
  -CONFIG_FILES=\${CONFIG_FILES-"Makefile"}
   EOF
  -cat >> $CONFIG_STATUS <<\EOF
  -for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
  +cat >>$CONFIG_STATUS <<\EOF
  +for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
     # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
  -  case "$ac_file" in
  -  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
  -       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
  -  *) ac_file_in="${ac_file}.in" ;;
  +  case $ac_file in
  +  - | *:- | *:-:* ) # input from stdin
  +        cat >$tmp/stdin
  +        ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
  +        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
  +  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
  +        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
  +  * )   ac_file_in=$ac_file.in ;;
     esac
  -
  -  # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
   
  -  # Remove last slash and all that follows it.  Not all systems have dirname.
  -  ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
  +  # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
  +  ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
  +         X"$ac_file" : 'X\(//\)[^/]' \| \
  +         X"$ac_file" : 'X\(//\)$' \| \
  +         X"$ac_file" : 'X\(/\)' \| \
  +         .     : '\(.\)' 2>/dev/null ||
  +echo X"$ac_file" |
  +    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
  +  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
  +  	  /^X\(\/\/\)$/{ s//\1/; q; }
  +  	  /^X\(\/\).*/{ s//\1/; q; }
  +  	  s/.*/./; q'`
     if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
  -    # The file is in a subdirectory.
  -    test ! -d "$ac_dir" && mkdir "$ac_dir"
  -    ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
  +    { case "$ac_dir" in
  +  [\\/]* | ?:[\\/]* ) as_incr_dir=;;
  +  *)                      as_incr_dir=.;;
  +esac
  +as_dummy="$ac_dir"
  +for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do
  +  case $as_mkdir_dir in
  +    # Skip DOS drivespec
  +    ?:) as_incr_dir=$as_mkdir_dir ;;
  +    *)
  +      as_incr_dir=$as_incr_dir/$as_mkdir_dir
  +      test -d "$as_incr_dir" || mkdir "$as_incr_dir"
  +    ;;
  +  esac
  +done; }
  +
  +    ac_dir_suffix="/`echo $ac_dir|sed 's,^\./,,'`"
       # A "../" for each directory in $ac_dir_suffix.
  -    ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
  +    ac_dots=`echo "$ac_dir_suffix" | sed 's,/[^/]*,../,g'`
     else
       ac_dir_suffix= ac_dots=
     fi
   
  -  case "$ac_given_srcdir" in
  -  .)  srcdir=.
  -      if test -z "$ac_dots"; then top_srcdir=.
  -      else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
  -  /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
  +  case $srcdir in
  +  .)  ac_srcdir=.
  +      if test -z "$ac_dots"; then
  +         ac_top_srcdir=.
  +      else
  +         ac_top_srcdir=`echo $ac_dots | sed 's,/$,,'`
  +      fi ;;
  +  [\\/]* | ?:[\\/]* )
  +      ac_srcdir=$srcdir$ac_dir_suffix;
  +      ac_top_srcdir=$srcdir ;;
     *) # Relative path.
  -    srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
  -    top_srcdir="$ac_dots$ac_given_srcdir" ;;
  +    ac_srcdir=$ac_dots$srcdir$ac_dir_suffix
  +    ac_top_srcdir=$ac_dots$srcdir ;;
     esac
   
  +  if test x"$ac_file" != x-; then
  +    { echo "$as_me:3254: creating $ac_file" >&5
  +echo "$as_me: creating $ac_file" >&6;}
  +    rm -f "$ac_file"
  +  fi
  +  # Let's still pretend it is `configure' which instantiates (i.e., don't
  +  # use $as_me), people would be surprised to read:
  +  #    /* config.h.  Generated automatically by config.status.  */
  +  configure_input="Generated automatically from `echo $ac_file_in |
  +                                                 sed 's,.*/,,'` by configure."
  +
  +  # First look for the input files in the build tree, otherwise in the
  +  # src tree.
  +  ac_file_inputs=`IFS=:
  +    for f in $ac_file_in; do
  +      case $f in
  +      -) echo $tmp/stdin ;;
  +      [\\/$]*)
  +         # Absolute (can't be DOS-style, as IFS=:)
  +         test -f "$f" || { { echo "$as_me:3272: error: cannot find input file: $f" >&5
  +echo "$as_me: error: cannot find input file: $f" >&2;}
  +   { (exit 1); exit 1; }; }
  +         echo $f;;
  +      *) # Relative
  +         if test -f "$f"; then
  +           # Build tree
  +           echo $f
  +         elif test -f "$srcdir/$f"; then
  +           # Source tree
  +           echo $srcdir/$f
  +         else
  +           # /dev/null tree
  +           { { echo "$as_me:3285: error: cannot find input file: $f" >&5
  +echo "$as_me: error: cannot find input file: $f" >&2;}
  +   { (exit 1); exit 1; }; }
  +         fi;;
  +      esac
  +    done` || { (exit 1); exit 1; }
  +EOF
  +cat >>$CONFIG_STATUS <<EOF
  +  sed "$ac_vpsub
  +$extrasub
  +EOF
  +cat >>$CONFIG_STATUS <<\EOF
  +:t
  +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
  +s,@configure_input@,$configure_input,;t t
  +s,@srcdir@,$ac_srcdir,;t t
  +s,@top_srcdir@,$ac_top_srcdir,;t t
  +" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
  +  rm -f $tmp/stdin
  +  if test x"$ac_file" != x-; then
  +    mv $tmp/out $ac_file
  +  else
  +    cat $tmp/out
  +    rm -f $tmp/out
  +  fi
   
  -  echo creating "$ac_file"
  -  rm -f "$ac_file"
  -  configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
  -  case "$ac_file" in
  -  *Makefile*) ac_comsub="1i\\
  -# $configure_input" ;;
  -  *) ac_comsub= ;;
  -  esac
  +done
  +EOF
  +cat >>$CONFIG_STATUS <<\EOF
   
  -  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
  -  sed -e "$ac_comsub
  -s%@configure_input@%$configure_input%g
  -s%@srcdir@%$srcdir%g
  -s%@top_srcdir@%$top_srcdir%g
  -" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
  -fi; done
  -rm -f conftest.s*
  +#
  +# CONFIG_HEADER section.
  +#
   
   # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
   # NAME is the cpp macro being defined and VALUE is the value it is being given.
   #
   # ac_d sets the value in "#define NAME VALUE" lines.
  -ac_dA='s%^\([ 	]*\)#\([ 	]*define[ 	][ 	]*\)'
  -ac_dB='\([ 	][ 	]*\)[^ 	]*%\1#\2'
  -ac_dC='\3'
  -ac_dD='%g'
  -# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
  -ac_uA='s%^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
  -ac_uB='\([ 	]\)%\1#\2define\3'
  +ac_dA='s,^\([ 	]*\)#\([ 	]*define[ 	][ 	]*\)'
  +ac_dB='[ 	].*$,\1#\2'
  +ac_dC=' '
  +ac_dD=',;t'
  +# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
  +ac_uA='s,^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
  +ac_uB='$,\1#\2define\3'
   ac_uC=' '
  -ac_uD='\4%g'
  -# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
  -ac_eA='s%^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
  -ac_eB='$%\1#\2define\3'
  -ac_eC=' '
  -ac_eD='%g'
  +ac_uD=',;t'
   
  -if test "${CONFIG_HEADERS+set}" != set; then
  -EOF
  -cat >> $CONFIG_STATUS <<EOF
  -  CONFIG_HEADERS="config.h"
  -EOF
  -cat >> $CONFIG_STATUS <<\EOF
  -fi
  -for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
  +for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
     # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
  -  case "$ac_file" in
  -  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
  -       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
  -  *) ac_file_in="${ac_file}.in" ;;
  +  case $ac_file in
  +  - | *:- | *:-:* ) # input from stdin
  +        cat >$tmp/stdin
  +        ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
  +        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
  +  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
  +        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
  +  * )   ac_file_in=$ac_file.in ;;
     esac
   
  -  echo creating $ac_file
  +  test x"$ac_file" != x- && { echo "$as_me:3345: creating $ac_file" >&5
  +echo "$as_me: creating $ac_file" >&6;}
   
  -  rm -f conftest.frag conftest.in conftest.out
  -  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
  -  cat $ac_file_inputs > conftest.in
  +  # First look for the input files in the build tree, otherwise in the
  +  # src tree.
  +  ac_file_inputs=`IFS=:
  +    for f in $ac_file_in; do
  +      case $f in
  +      -) echo $tmp/stdin ;;
  +      [\\/$]*)
  +         # Absolute (can't be DOS-style, as IFS=:)
  +         test -f "$f" || { { echo "$as_me:3356: error: cannot find input file: $f" >&5
  +echo "$as_me: error: cannot find input file: $f" >&2;}
  +   { (exit 1); exit 1; }; }
  +         echo $f;;
  +      *) # Relative
  +         if test -f "$f"; then
  +           # Build tree
  +           echo $f
  +         elif test -f "$srcdir/$f"; then
  +           # Source tree
  +           echo $srcdir/$f
  +         else
  +           # /dev/null tree
  +           { { echo "$as_me:3369: error: cannot find input file: $f" >&5
  +echo "$as_me: error: cannot find input file: $f" >&2;}
  +   { (exit 1); exit 1; }; }
  +         fi;;
  +      esac
  +    done` || { (exit 1); exit 1; }
  +  # Remove the trailing spaces.
  +  sed 's/[ 	]*$//' $ac_file_inputs >$tmp/in
   
   EOF
   
  -# Transform confdefs.h into a sed script conftest.vals that substitutes
  -# the proper values into config.h.in to produce config.h.  And first:
  -# Protect against being on the right side of a sed subst in config.status.
  -# Protect against being in an unquoted here document in config.status.
  -rm -f conftest.vals
  -cat > conftest.hdr <<\EOF
  -s/[\\&%]/\\&/g
  -s%[\\$`]%\\&%g
  -s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
  -s%ac_d%ac_u%gp
  -s%ac_u%ac_e%gp
  -EOF
  -sed -n -f conftest.hdr confdefs.h > conftest.vals
  -rm -f conftest.hdr
  +# Transform confdefs.h into two sed scripts, `conftest.defines' and
  +# `conftest.undefs', that substitutes the proper values into
  +# config.h.in to produce config.h.  The first handles `#define'
  +# templates, and the second `#undef' templates.
  +# And first: Protect against being on the right side of a sed subst in
  +# config.status.  Protect against being in an unquoted here document
  +# in config.status.
  +rm -f conftest.defines conftest.undefs
  +# Using a here document instead of a string reduces the quoting nightmare.
  +# Putting comments in sed scripts is not portable.
  +#
  +# `end' is used to avoid that the second main sed command (meant for
  +# 0-ary CPP macros) applies to n-ary macro definitions.
  +# See the Autoconf documentation for `clear'.
  +cat >confdef2sed.sed <<\EOF
  +s/[\\&,]/\\&/g
  +s,[\\$`],\\&,g
  +t clear
  +: clear
  +s,^[ 	]*#[ 	]*define[ 	][ 	]*\(\([^ 	(][^ 	(]*\)([^)]*)\)[ 	]*\(.*\)$,${ac_dA}\2${ac_dB}\1${ac_dC}\3${ac_dD},gp
  +t end
  +s,^[ 	]*#[ 	]*define[ 	][ 	]*\([^ 	][^ 	]*\)[ 	]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
  +: end
  +EOF
  +# If some macros were called several times there might be several times
  +# the same #defines, which is useless.  Nevertheless, we may not want to
  +# sort them, since we want the *last* AC-DEFINE to be honored.
  +uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
  +sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
  +rm -f confdef2sed.sed
   
   # This sed command replaces #undef with comments.  This is necessary, for
   # example, in the case of _POSIX_SOURCE, which is predefined and required
   # on some systems where configure will not decide to define it.
  -cat >> conftest.vals <<\EOF
  -s%^[ 	]*#[ 	]*undef[ 	][ 	]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
  +cat >>conftest.undefs <<\EOF
  +s,^[ 	]*#[ 	]*undef[ 	][ 	]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
   EOF
  -
  -# Break up conftest.vals because some shells have a limit on
  -# the size of here documents, and old seds have small limits too.
   
  +# Break up conftest.defines because some shells have a limit on the size
  +# of here documents, and old seds have small limits too (100 cmds).
  +echo '  # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
  +echo '  if egrep "^[ 	]*#[ 	]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
  +echo '  # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
  +echo '  :' >>$CONFIG_STATUS
  +rm -f conftest.tail
  +while grep . conftest.defines >/dev/null
  +do
  +  # Write a limited-size here document to $tmp/defines.sed.
  +  echo '  cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
  +  # Speed up: don't consider the non `#define' lines.
  +  echo '/^[ 	]*#[ 	]*define/!b' >>$CONFIG_STATUS
  +  # Work around the forget-to-reset-the-flag bug.
  +  echo 't clr' >>$CONFIG_STATUS
  +  echo ': clr' >>$CONFIG_STATUS
  +  sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
  +  echo 'CEOF
  +  sed -f $tmp/defines.sed $tmp/in >$tmp/out
  +  rm -f $tmp/in
  +  mv $tmp/out $tmp/in
  +' >>$CONFIG_STATUS
  +  sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
  +  rm -f conftest.defines
  +  mv conftest.tail conftest.defines
  +done
  +rm -f conftest.defines
  +echo '  fi # egrep' >>$CONFIG_STATUS
  +echo >>$CONFIG_STATUS
  +
  +# Break up conftest.undefs because some shells have a limit on the size
  +# of here documents, and old seds have small limits too (100 cmds).
  +echo '  # Handle all the #undef templates' >>$CONFIG_STATUS
   rm -f conftest.tail
  -while :
  +while grep . conftest.undefs >/dev/null
   do
  -  ac_lines=`grep -c . conftest.vals`
  -  # grep -c gives empty output for an empty file on some AIX systems.
  -  if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
  -  # Write a limited-size here document to conftest.frag.
  -  echo '  cat > conftest.frag <<CEOF' >> $CONFIG_STATUS
  -  sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
  +  # Write a limited-size here document to $tmp/undefs.sed.
  +  echo '  cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
  +  # Speed up: don't consider the non `#undef'
  +  echo '/^[ 	]*#[ 	]*undef/!b' >>$CONFIG_STATUS
  +  # Work around the forget-to-reset-the-flag bug.
  +  echo 't clr' >>$CONFIG_STATUS
  +  echo ': clr' >>$CONFIG_STATUS
  +  sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
     echo 'CEOF
  -  sed -f conftest.frag conftest.in > conftest.out
  -  rm -f conftest.in
  -  mv conftest.out conftest.in
  -' >> $CONFIG_STATUS
  -  sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
  -  rm -f conftest.vals
  -  mv conftest.tail conftest.vals
  -done
  -rm -f conftest.vals
  -
  -cat >> $CONFIG_STATUS <<\EOF
  -  rm -f conftest.frag conftest.h
  -  echo "/* $ac_file.  Generated automatically by configure.  */" > conftest.h
  -  cat conftest.in >> conftest.h
  -  rm -f conftest.in
  -  if cmp -s $ac_file conftest.h 2>/dev/null; then
  -    echo "$ac_file is unchanged"
  -    rm -f conftest.h
  +  sed -f $tmp/undefs.sed $tmp/in >$tmp/out
  +  rm -f $tmp/in
  +  mv $tmp/out $tmp/in
  +' >>$CONFIG_STATUS
  +  sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
  +  rm -f conftest.undefs
  +  mv conftest.tail conftest.undefs
  +done
  +rm -f conftest.undefs
  +
  +cat >>$CONFIG_STATUS <<\EOF
  +  # Let's still pretend it is `configure' which instantiates (i.e., don't
  +  # use $as_me), people would be surprised to read:
  +  #    /* config.h.  Generated automatically by config.status.  */
  +  if test x"$ac_file" = x-; then
  +    echo "/* Generated automatically by configure.  */" >$tmp/config.h
     else
  -    # Remove last slash and all that follows it.  Not all systems have dirname.
  -      ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
  +    echo "/* $ac_file.  Generated automatically by configure.  */" >$tmp/config.h
  +  fi
  +  cat $tmp/in >>$tmp/config.h
  +  rm -f $tmp/in
  +  if test x"$ac_file" != x-; then
  +    if cmp -s $ac_file $tmp/config.h 2>/dev/null; then
  +      { echo "$as_me:3486: $ac_file is unchanged" >&5
  +echo "$as_me: $ac_file is unchanged" >&6;}
  +    else
  +      ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
  +         X"$ac_file" : 'X\(//\)[^/]' \| \
  +         X"$ac_file" : 'X\(//\)$' \| \
  +         X"$ac_file" : 'X\(/\)' \| \
  +         .     : '\(.\)' 2>/dev/null ||
  +echo X"$ac_file" |
  +    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
  +  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
  +  	  /^X\(\/\/\)$/{ s//\1/; q; }
  +  	  /^X\(\/\).*/{ s//\1/; q; }
  +  	  s/.*/./; q'`
         if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
  -      # The file is in a subdirectory.
  -      test ! -d "$ac_dir" && mkdir "$ac_dir"
  +        { case "$ac_dir" in
  +  [\\/]* | ?:[\\/]* ) as_incr_dir=;;
  +  *)                      as_incr_dir=.;;
  +esac
  +as_dummy="$ac_dir"
  +for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do
  +  case $as_mkdir_dir in
  +    # Skip DOS drivespec
  +    ?:) as_incr_dir=$as_mkdir_dir ;;
  +    *)
  +      as_incr_dir=$as_incr_dir/$as_mkdir_dir
  +      test -d "$as_incr_dir" || mkdir "$as_incr_dir"
  +    ;;
  +  esac
  +done; }
  +
  +      fi
  +      rm -f $ac_file
  +      mv $tmp/config.h $ac_file
       fi
  -    rm -f $ac_file
  -    mv conftest.h $ac_file
  +  else
  +    cat $tmp/config.h
  +    rm -f $tmp/config.h
     fi
  -fi; done
  -
  +done
   EOF
  -cat >> $CONFIG_STATUS <<EOF
   
  -EOF
  -cat >> $CONFIG_STATUS <<\EOF
  +cat >>$CONFIG_STATUS <<\EOF
   
  -exit 0
  +{ (exit 0); exit 0; }
   EOF
   chmod +x $CONFIG_STATUS
  -rm -fr confdefs* $ac_clean_files
  -test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
  +ac_clean_files=$ac_clean_files_save
  +
  +# configure is writing to config.log, and then calls config.status.
  +# config.status does its own redirection, appending to config.log.
  +# Unfortunately, on DOS this fails, as config.log is still kept open
  +# by configure, so config.status won't be able to write to it; its
  +# output is simply discarded.  So we exec the FD to /dev/null,
  +# effectively closing config.log, so it can be properly (re)opened and
  +# appended to by config.status.  When coming back to configure, we
  +# need to make the FD available again.
  +if test "$no_create" != yes; then
  +  ac_cs_success=:
  +  exec 5>/dev/null
  +  $SHELL $CONFIG_STATUS || ac_cs_success=false
  +  exec 5>>config.log
  +  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
  +  # would make configure fail if this is the last instruction.
  +  $ac_cs_success || { (exit 1); exit 1; }
  +fi
   
  Index: ossp-pkg/jitterbug/configure.in
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 configure.in
  --- ossp-pkg/jitterbug/configure.in	2000/06/01 08:09:31	1.3
  +++ ossp-pkg/jitterbug/configure.in	2001/08/22 14:06:00	1.4
  @@ -1,10 +1,12 @@
  -dnl Process this file with autoconf to produce a configure script.
  +
  +AC_PREREQ(2.52)
  +AC_REVISION(1.0)
   AC_INIT(jitterbug.c)
   
  -AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)
  +AC_DIVERT_PUSH(NOTICE)
   V=`sed <version.h -e 's;^[[^"]]*";;' -e 's;".*;;'`
   ./shtool echo -e "Configuring %BOSSP Jitterbug%b, Version %B${V}%b"
  -echo "Copyright (c) 1997-2000 Andrew Tridgell <tridge@samba.org>"
  +echo "Copyright (c) 1997-2001 Andrew Tridgell <tridge@samba.org>"
   echo ""
   AC_DIVERT_POP()
   
  @@ -38,6 +40,7 @@
   echo yes;AC_DEFINE(HAVE_BROKEN_READDIR), 
   echo no)
   
  +AC_CHECK_LIB(z, gzwrite)
   
   AC_CANONICAL_SYSTEM
   case "$host_os" in
  Index: ossp-pkg/jitterbug/version.h
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 version.h
  --- ossp-pkg/jitterbug/version.h	2000/06/01 12:38:31	1.3
  +++ ossp-pkg/jitterbug/version.h	2001/08/22 14:06:00	1.4
  @@ -1 +1 @@
  -#define VERSION "1.6.2.1"
  +#define VERSION "1.6.2.2"

From ossp-cvs-owner@ossp.org  Wed Aug 22 19:28:42 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7MHSfW12248; Wed, 22 Aug 2001 19:28:41 +0200 (CEST)
Date: Wed, 22 Aug 2001 19:28:41 +0200 (CEST)
Message-Id: <200108221728.f7MHSfW12248@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_objects.fig
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   22-Aug-2001 19:28:41
  Branch: HEAD                             Handle: 2001082218284000

  Modified files:
    ossp-pkg/l2             l2_objects.fig

  Log:
    A new and better blob, minor cleanup, and full compliance to OMG UML standard.

  Summary:
    Revision    Changes     Path
    1.4         +187 -167   ossp-pkg/l2/l2_objects.fig
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_objects.fig
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 l2_objects.fig
  --- ossp-pkg/l2/l2_objects.fig	2001/08/21 17:38:42	1.3
  +++ ossp-pkg/l2/l2_objects.fig	2001/08/22 17:28:40	1.4
  @@ -64,69 +64,206 @@
   0 86 #9c0000
   0 87 #ededed
   0 88 #86acff
  -6 7875 5400 9600 7725
  -2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
  -	 7875 6450 9600 6450
  +6 0 7800 2100 9600
  +2 2 0 1 0 7 64 0 15 0.000 0 0 -1 0 0 5
  +	 0 7800 2100 7800 2100 9600 0 9600 0 7800
  +2 2 0 1 0 7 46 0 0 0.000 0 0 -1 0 0 5
  +	 0 7800 2100 7800 2100 8250 0 8250 0 7800
  +2 4 0 0 0 7 58 0 20 0.000 0 0 7 0 0 5
  +	 1500 9225 450 9225 450 8550 1500 8550 1500 9225
  +4 0 0 38 0 0 14 0.0000 4 180 780 600 8775 <output>\001
  +4 0 0 30 0 0 30 0.0000 4 300 525 675 9150 file\001
  +4 0 0 42 0 0 12 0.0000 4 180 465 1575 9525 pNext\001
  +-6
  +6 0 5400 2100 7200
  +2 2 0 1 0 7 46 0 0 0.000 0 0 -1 0 0 5
  +	 0 5400 2100 5400 2100 5850 0 5850 0 5400
  +2 4 0 0 0 7 58 0 20 0.000 0 0 7 0 0 5
  +	 1650 6825 450 6825 450 6150 1650 6150 1650 6825
  +2 2 0 1 0 7 60 0 19 0.000 0 0 -1 0 0 5
  +	 0 5400 2100 5400 2100 7200 0 7200 0 5400
  +4 0 0 42 0 0 12 0.0000 4 180 465 1575 7125 pNext\001
  +4 0 0 30 0 0 30 0.0000 4 300 1035 525 6750 buffer\001
  +4 0 0 38 0 0 14 0.0000 4 150 630 750 6375 <filter>\001
  +-6
  +6 2625 5400 4725 7200
  +2 2 0 1 0 7 64 0 15 0.000 0 0 -1 0 0 5
  +	 2625 5400 4725 5400 4725 7200 2625 7200 2625 5400
  +2 2 0 1 0 7 46 0 0 0.000 0 0 -1 0 0 5
  +	 2625 5400 4725 5400 4725 5850 2625 5850 2625 5400
  +2 4 0 0 0 7 58 0 20 0.000 0 0 7 0 0 5
  +	 4350 6825 3075 6825 3075 6150 4350 6150 4350 6825
  +4 0 0 38 0 0 14 0.0000 4 180 780 3300 6375 <output>\001
  +4 0 0 30 0 0 30 0.0000 4 300 1110 3150 6750 socket\001
  +4 0 0 42 0 0 12 0.0000 4 180 465 4200 7125 pNext\001
  +-6
  +6 0 3000 2100 4800
  +2 2 0 1 0 7 46 0 0 0.000 0 0 -1 0 0 5
  +	 0 3000 2100 3000 2100 3450 0 3450 0 3000
  +2 4 0 0 0 7 58 0 20 0.000 0 0 7 0 0 5
  +	 1500 4425 525 4425 525 3750 1500 3750 1500 4425
  +2 2 0 1 0 7 60 0 19 0.000 0 0 -1 0 0 5
  +	 0 3000 2100 3000 2100 4800 0 4800 0 3000
  +4 0 0 38 0 0 14 0.0000 4 150 630 675 3975 <filter>\001
  +4 0 0 30 0 0 30 0.0000 4 300 795 600 4350 filter\001
  +4 0 0 42 0 0 12 0.0000 4 180 465 1575 4725 pNext\001
  +-6
  +6 2625 3000 4725 4800
  +2 2 0 1 0 7 46 0 0 0.000 0 0 -1 0 0 5
  +	 2625 3000 4725 3000 4725 3450 2625 3450 2625 3000
  +2 2 0 1 0 7 60 0 19 0.000 0 0 -1 0 0 5
  +	 2625 3000 4725 3000 4725 4800 2625 4800 2625 3000
  +2 4 0 0 0 7 58 0 20 0.000 0 0 7 0 0 5
  +	 4275 4500 3075 4500 3075 3750 4275 3750 4275 4500
  +4 0 0 38 0 0 14 0.0000 4 150 630 3375 3975 <filter>\001
  +4 0 0 30 0 0 30 0.0000 4 405 1020 3150 4350 prefix\001
  +4 0 0 42 0 0 12 0.0000 4 180 465 4200 4725 pNext\001
  +-6
  +6 5250 3000 7350 4800
  +2 2 0 1 0 7 64 0 15 0.000 0 0 -1 0 0 5
  +	 5250 3000 7350 3000 7350 4800 5250 4800 5250 3000
  +2 2 0 1 0 7 46 0 0 0.000 0 0 -1 0 0 5
  +	 5250 3000 7350 3000 7350 3450 5250 3450 5250 3000
  +2 4 0 0 0 7 58 0 20 0.000 0 0 7 0 0 5
  +	 6825 4500 5775 4500 5775 3750 6825 3750 6825 4500
  +4 0 0 38 0 0 14 0.0000 4 180 780 5925 3975 <output>\001
  +4 0 0 30 0 0 30 0.0000 4 405 720 5925 4350 pipe\001
  +4 0 0 42 0 0 12 0.0000 4 180 465 6825 4725 pNext\001
  +-6
  +6 7800 3000 9900 4800
  +2 2 0 1 0 7 64 0 15 0.000 0 0 -1 0 0 5
  +	 7800 3000 9900 3000 9900 4800 7800 4800 7800 3000
  +2 2 0 1 0 7 46 0 0 0.000 0 0 -1 0 0 5
  +	 7800 3000 9900 3000 9900 3450 7800 3450 7800 3000
  +2 4 0 0 0 7 58 0 20 0.000 0 0 7 0 0 5
  +	 9525 4500 8250 4500 8250 3750 9525 3750 9525 4500
  +4 0 0 38 0 0 14 0.0000 4 180 780 8475 3975 <output>\001
  +4 0 0 30 0 0 30 0.0000 4 405 1080 8325 4350 syslog\001
  +4 0 0 42 0 0 12 0.0000 4 180 465 9375 4725 pNext\001
  +-6
  +6 10350 3000 12450 4800
  +2 2 0 1 0 7 64 0 15 0.000 0 0 -1 0 0 5
  +	 10350 3000 12450 3000 12450 4800 10350 4800 10350 3000
  +2 2 0 1 0 7 46 0 0 0.000 0 0 -1 0 0 5
  +	 10350 3000 12450 3000 12450 3450 10350 3450 10350 3000
  +2 4 0 0 0 7 58 0 20 0.000 0 0 7 0 0 5
  +	 12375 4500 10425 4500 10425 3750 12375 3750 12375 4500
  +4 0 0 38 0 0 14 0.0000 4 180 780 11025 3975 <output>\001
  +4 0 0 30 0 0 24 0.0000 4 330 1905 10425 4350 filedescriptor\001
  +4 0 0 42 0 0 12 0.0000 4 180 465 11925 4725 pNext\001
  +-6
  +6 0 0 12450 2400
  +2 2 0 1 0 7 60 0 18 0.000 0 0 -1 0 0 5
  +	 0 0 12450 0 12450 2400 0 2400 0 0
  +2 2 0 1 0 7 46 0 0 0.000 0 0 -1 0 0 5
  +	 0 0 12450 0 12450 600 0 600 0 0
  +2 4 0 1 0 7 57 0 20 0.000 0 0 50 0 0 5
  +	 12450 2400 0 2400 0 600 12450 600 12450 2400
  +4 0 0 34 0 0 16 0.0000 4 165 1200 8250 2250 WARNING\001
  +4 0 0 34 0 0 16 0.0000 4 165 1125 10800 2250 CRITICAL\001
  +4 0 0 34 0 0 16 0.0000 4 165 855 3300 2250 DEBUG\001
  +4 0 0 30 0 0 60 0.0000 4 510 2400 5025 1725 stream\001
  +4 0 0 34 0 0 16 0.0000 4 165 810 675 2250 TRACE\001
  +4 0 0 34 0 0 16 0.0000 4 165 570 6075 2250 INFO\001
  +4 0 0 34 0 0 16 0.0000 4 165 1170 8250 1950 NOTICE  | |\001
  +4 0 0 34 0 0 16 0.0000 4 165 1095 10800 1950 ERROR  | |\001
  +4 0 0 34 0 0 16 0.0000 4 165 1005 10800 1650 PANIC  | |\001
  +-6
  +6 5475 4875 12150 9825
  +6 10800 8925 11700 9300
   2 2 0 1 0 7 101 0 20 4.000 0 0 7 0 0 5
  -	 7875 5400 9600 5400 9600 7725 7875 7725 7875 5400
  -2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
  -	 7875 5625 9600 5625
  -4 0 0 100 0 16 9 0.0000 4 120 1155 7950 6825 + l2_stream_channel\001
  -4 0 0 100 0 16 9 0.0000 4 120 1230 7952 6972 + l2_stream_formatter\001
  -4 0 0 100 0 16 9 0.0000 4 120 1035 7950 7125 + l2_stream_levels\001
  -4 0 0 100 0 16 9 0.0000 4 120 900 7950 7275 + l2_stream_log\001
  -4 0 0 100 0 16 9 0.0000 4 120 975 7950 7425 + l2_stream_vlog\001
  -4 0 0 100 0 16 9 0.0000 4 120 1050 7950 6675 + l2_stream_create\001
  -4 0 0 100 0 16 9 0.0000 4 120 1140 7950 7575 + l2_stream_destroy\001
  -4 0 0 100 0 16 9 0.0000 4 105 795 7950 5850 - uiLevelMask\001
  -4 0 0 100 0 16 9 0.0000 4 105 795 7950 6000 - pszMessage\001
  -4 0 0 100 0 16 9 0.0000 4 120 795 7950 6150 - ppChannels\001
  -4 0 0 100 0 16 9 0.0000 4 120 870 7950 6300 - ppFormatters\001
  -4 0 0 100 0 16 9 0.0000 4 120 660 7950 5550 l2_stream_t\001
  +	 10800 8925 11700 8925 11700 9300 10800 9300 10800 8925
  +4 0 0 100 0 16 9 0.0000 4 120 375 11025 9150 Output\001
  +-6
  +6 10050 8400 10875 9150
  +2 1 0 2 0 7 104 0 -1 0.000 0 0 -1 1 0 4
  +	1 1 2.00 120.00 120.00
  +	 10800 9125 10500 9125 10500 8775 10125 8775
  +2 1 0 2 0 7 104 0 -1 0.000 0 0 -1 1 0 4
  +	1 1 2.00 120.00 120.00
  +	 10800 8425 10500 8425 10500 8775 10125 8775
  +4 0 0 50 0 0 12 0.0000 4 135 90 10200 8625 1\001
   -6
  -6 7875 8250 9600 9300
  +6 8475 5400 10500 7725
   2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
  -	 7875 8475 9600 8475
  +	 8475 6450 10500 6450
  +2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
  +	 8475 5625 10500 5625
   2 2 0 1 0 7 101 0 20 4.000 0 0 7 0 0 5
  -	 7875 8250 9600 8250 9600 9300 7875 9300 7875 8250
  -4 0 0 100 0 16 9 0.0000 4 105 480 7950 8700 - eState\001
  -4 0 0 100 0 16 9 0.0000 4 120 885 7950 8850 - pDownstream\001
  -4 0 0 100 0 16 9 0.0000 4 105 585 7950 9000 - Context\001
  -4 0 0 100 0 16 9 0.0000 4 120 870 7950 9150 - ppFormatters\001
  -4 0 0 100 0 16 9 0.0000 4 120 735 7950 8400 l2_channel_t\001
  +	 8475 5400 10500 5400 10500 7725 8475 7725 8475 5400
  +4 0 0 100 0 16 9 0.0000 4 120 1155 8550 6825 + l2_stream_channel\001
  +4 0 0 100 0 16 9 0.0000 4 120 1230 8552 6972 + l2_stream_formatter\001
  +4 0 0 100 0 16 9 0.0000 4 120 1035 8550 7125 + l2_stream_levels\001
  +4 0 0 100 0 16 9 0.0000 4 120 900 8550 7275 + l2_stream_log\001
  +4 0 0 100 0 16 9 0.0000 4 120 975 8550 7425 + l2_stream_vlog\001
  +4 0 0 100 0 16 9 0.0000 4 120 1050 8550 6675 + l2_stream_create\001
  +4 0 0 100 0 16 9 0.0000 4 120 1140 8550 7575 + l2_stream_destroy\001
  +4 0 0 100 0 16 9 0.0000 4 105 1095 8550 5850 - uiLevelMask : uint\001
  +4 0 0 100 0 16 9 0.0000 4 120 1200 8550 6000 - pszMessage : char *\001
  +4 0 0 100 0 16 9 0.0000 4 120 1740 8550 6150 - ppChannels : l2_channel_t **\001
  +4 0 0 100 0 16 9 0.0000 4 120 1740 8550 6300 - ppFormatters : l2_format_t **\001
  +4 0 0 100 0 16 9 0.0000 4 120 660 8550 5550 l2_stream_t\001
   -6
  -6 10275 8250 12000 8625
  +6 10800 8250 11700 8625
   2 2 0 1 0 7 101 0 20 4.000 0 0 7 0 0 5
  -	 10275 8250 12000 8250 12000 8625 10275 8625 10275 8250
  -4 0 0 100 0 16 9 0.0000 4 105 285 10950 8475 Filter\001
  +	 10800 8250 11700 8250 11700 8625 10800 8625 10800 8250
  +4 0 0 100 0 16 9 0.0000 4 105 285 11100 8475 Filter\001
   -6
  -6 10275 8925 12000 9300
  +6 8025 8250 10125 9300
  +2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
  +	 8025 8475 10125 8475
   2 2 0 1 0 7 101 0 20 4.000 0 0 7 0 0 5
  -	 10275 8925 12000 8925 12000 9300 10275 9300 10275 8925
  -4 0 0 100 0 16 9 0.0000 4 120 375 10950 9150 Output\001
  +	 8025 8250 10125 8250 10125 9300 8025 9300 8025 8250
  +4 0 0 100 0 16 9 0.0000 4 105 855 8100 8700 - eState : enum\001
  +4 0 0 100 0 16 9 0.0000 4 120 1785 8100 8850 - pDownstream : l2_channel_t *\001
  +4 0 0 100 0 16 9 0.0000 4 105 990 8100 9000 - Context : union\001
  +4 0 0 100 0 16 9 0.0000 4 120 1365 8100 9150 - Handler : l2_handler_t\001
  +4 0 0 100 0 16 9 0.0000 4 120 735 8100 8400 l2_channel_t\001
   -6
  -6 5475 7275 7200 9300
  +6 9375 7650 9825 8325
  +2 1 0 2 0 7 104 0 -1 0.000 0 0 -1 0 0 2
  +	 9450 7725 9450 8250
  +4 0 0 50 0 0 12 0.0000 4 135 270 9525 8175 1..*\001
  +4 0 0 50 0 0 12 0.0000 4 135 90 9525 7950 1\001
  +-6
  +6 5925 7275 7500 9300
   2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
  -	 5475 7500 7200 7500
  +	 5925 7500 7500 7500
   2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
  -	 5475 7725 7200 7725
  +	 5925 7725 7500 7725
   2 2 0 1 0 7 101 0 20 4.000 0 0 7 0 0 5
  -	 5475 7275 7200 7275 7200 9300 5475 9300 5475 7275
  -4 0 0 100 0 16 9 0.0000 4 120 1320 5550 8100 + l2_channel_configure\001
  -4 0 0 100 0 16 9 0.0000 4 120 1080 5552 8247 + l2_channel_open\001
  -4 0 0 100 0 16 9 0.0000 4 120 1065 5550 8400 + l2_channel_write\001
  -4 0 0 100 0 16 9 0.0000 4 120 1215 5550 8850 + l2_channel_destroy\001
  -4 0 0 100 0 16 9 0.0000 4 120 1065 5550 8550 + l2_channel_flush\001
  -4 0 0 100 0 16 9 0.0000 4 120 1080 5550 8700 + l2_channel_close\001
  -4 0 0 100 0 16 9 0.0000 4 120 1080 5550 9000 + l2_channel_stack\001
  -4 0 0 100 0 16 9 0.0000 4 120 1350 5550 9150 + l2_channel_setparams\001
  -4 0 0 100 0 16 9 0.0000 4 120 720 5550 7425 l2_handler_t\001
  -4 0 0 100 0 16 9 0.0000 4 120 1125 5550 7950 + l2_channel_create\001
  +	 5925 7275 7500 7275 7500 9300 5925 9300 5925 7275
  +4 0 0 100 0 16 9 0.0000 4 120 1320 6000 8100 + l2_channel_configure\001
  +4 0 0 100 0 16 9 0.0000 4 120 1080 6002 8247 + l2_channel_open\001
  +4 0 0 100 0 16 9 0.0000 4 120 1065 6000 8400 + l2_channel_write\001
  +4 0 0 100 0 16 9 0.0000 4 120 1215 6000 8850 + l2_channel_destroy\001
  +4 0 0 100 0 16 9 0.0000 4 120 1065 6000 8550 + l2_channel_flush\001
  +4 0 0 100 0 16 9 0.0000 4 120 1080 6000 8700 + l2_channel_close\001
  +4 0 0 100 0 16 9 0.0000 4 120 1080 6000 9000 + l2_channel_stack\001
  +4 0 0 100 0 16 9 0.0000 4 120 1350 6000 9150 + l2_channel_setparams\001
  +4 0 0 100 0 16 9 0.0000 4 120 720 6000 7425 l2_handler_t\001
  +4 0 0 100 0 16 9 0.0000 4 120 1125 6000 7950 + l2_channel_create\001
   -6
  -2 2 0 1 0 7 60 0 10 0.000 0 0 -1 0 0 5
  -	 0 0 12450 0 12450 2400 0 2400 0 0
  -2 2 0 1 0 7 46 0 0 0.000 0 0 -1 0 0 5
  -	 0 0 12450 0 12450 600 0 600 0 0
  +6 7425 8475 8100 8850
  +2 1 0 2 0 7 104 0 -1 0.000 0 0 -1 0 0 2
  +	 7500 8775 8025 8775
  +2 3 0 1 0 7 102 0 20 0.000 0 0 -1 0 0 5
  +	 7875 8700 7725 8775 7875 8850 8025 8775 7875 8700
  +4 0 0 50 0 0 12 0.0000 4 135 90 7875 8625 1\001
  +4 0 0 50 0 0 12 0.0000 4 135 90 7575 8625 1\001
  +-6
  +6 5475 4875 12150 9825
  +3 1 0 1 0 7 112 0 10 0.000 0 0 0 22
  +	 5625 7575 5550 6975 6150 6750 6225 6075 7575 5850 7875 4950
  +	 9150 5250 10575 4875 11025 5700 10500 6750 11550 7125 12150 8175
  +	 11850 8700 12150 9600 10875 9750 10200 9450 9225 9600 8250 9825
  +	 6675 9675 5925 9750 5550 9450 5475 8250
  +	 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000
  +	 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000
  +	 1.000 1.000 1.000 1.000 1.000 1.000
  +4 0 7 32 0 0 40 0.0000 4 420 1695 6525 6600 classes\001
  +-6
  +-6
   2 1 0 6 0 7 54 0 0 0.000 0 0 -1 0 0 2
   	 1050 2400 1050 3000
   2 1 0 6 0 7 54 0 0 0.000 0 0 -1 0 0 2
  @@ -135,131 +272,14 @@
   	 8850 2400 8850 3000
   2 1 0 6 0 7 54 0 0 0.000 0 0 -1 0 0 2
   	 11325 2400 11325 3000
  -2 2 0 1 0 7 46 0 0 0.000 0 0 -1 0 0 5
  -	 0 3000 2100 3000 2100 3450 0 3450 0 3000
  -2 2 0 1 0 7 46 0 0 0.000 0 0 -1 0 0 5
  -	 2625 3000 4725 3000 4725 3450 2625 3450 2625 3000
  -2 2 0 1 0 7 60 0 19 0.000 0 0 -1 0 0 5
  -	 2625 3000 4725 3000 4725 4800 2625 4800 2625 3000
   2 1 0 6 0 7 54 0 0 0.000 0 0 -1 0 0 2
   	 3675 2400 3675 3000
  -2 2 0 1 0 7 46 0 0 0.000 0 0 -1 0 0 5
  -	 5250 3000 7350 3000 7350 3450 5250 3450 5250 3000
  -2 2 0 1 0 7 46 0 0 0.000 0 0 -1 0 0 5
  -	 7800 3000 9900 3000 9900 3450 7800 3450 7800 3000
  -2 2 0 0 0 7 64 0 15 0.000 0 0 -1 0 0 5
  -	 7800 3000 9900 3000 9900 4800 7800 4800 7800 3000
  -2 2 0 1 0 7 46 0 0 0.000 0 0 -1 0 0 5
  -	 10350 3000 12450 3000 12450 3450 10350 3450 10350 3000
  -2 2 0 0 0 7 64 0 15 0.000 0 0 -1 0 0 5
  -	 10350 3000 12450 3000 12450 4800 10350 4800 10350 3000
   2 1 0 2 0 7 56 0 0 0.000 0 0 -1 1 0 2
   	1 1 2.00 120.00 240.00
   	 4425 4800 4425 5400
  -2 2 0 1 0 7 60 0 19 0.000 0 0 -1 0 0 5
  -	 0 3000 2100 3000 2100 4800 0 4800 0 3000
  -2 2 0 1 0 7 60 0 19 0.000 0 0 -1 0 0 5
  -	 0 5400 2100 5400 2100 7200 0 7200 0 5400
  -2 2 0 1 0 7 46 0 0 0.000 0 0 -1 0 0 5
  -	 0 5400 2100 5400 2100 5850 0 5850 0 5400
  -2 2 0 1 0 7 46 0 0 0.000 0 0 -1 0 0 5
  -	 2625 5400 4725 5400 4725 5850 2625 5850 2625 5400
  -2 2 0 0 0 7 64 0 15 0.000 0 0 -1 0 0 5
  -	 2625 5400 4725 5400 4725 7200 2625 7200 2625 5400
   2 1 0 2 0 7 56 0 0 0.000 0 0 -1 1 0 2
   	1 1 2.00 120.00 240.00
   	 1800 7200 1800 7800
  -2 2 0 0 0 7 64 0 15 0.000 0 0 -1 0 0 5
  -	 0 7800 2100 7800 2100 9600 0 9600 0 7800
  -2 2 0 1 0 7 46 0 0 0.000 0 0 -1 0 0 5
  -	 0 7800 2100 7800 2100 8250 0 8250 0 7800
  -2 2 0 0 0 7 64 0 15 0.000 0 0 -1 0 0 5
  -	 5250 3000 7350 3000 7350 4800 5250 4800 5250 3000
  -2 2 0 1 0 7 60 0 -1 0.000 0 0 -1 0 0 5
  -	 0 7800 2100 7800 2100 9600 0 9600 0 7800
  -2 2 0 1 0 7 60 0 -1 0.000 0 0 -1 0 0 5
  -	 2625 5400 4725 5400 4725 7200 2625 7200 2625 5400
  -2 2 0 1 0 7 60 0 -1 0.000 0 0 -1 0 0 5
  -	 5250 3000 7350 3000 7350 4800 5250 4800 5250 3000
  -2 2 0 1 0 7 60 0 -1 0.000 0 0 -1 0 0 5
  -	 7800 3000 9900 3000 9900 4800 7800 4800 7800 3000
  -2 2 0 1 0 7 60 0 -1 0.000 0 0 -1 0 0 5
  -	 10350 3000 12450 3000 12450 4800 10350 4800 10350 3000
  -2 4 0 0 0 7 58 0 20 0.000 0 0 7 0 0 5
  -	 4350 6825 3075 6825 3075 6150 4350 6150 4350 6825
  -2 4 0 0 0 7 58 0 20 0.000 0 0 7 0 0 5
  -	 1500 9225 450 9225 450 8550 1500 8550 1500 9225
  -2 4 0 0 0 7 58 0 20 0.000 0 0 7 0 0 5
  -	 6825 4500 5775 4500 5775 3750 6825 3750 6825 4500
  -2 4 0 0 0 7 58 0 20 0.000 0 0 7 0 0 5
  -	 9525 4500 8250 4500 8250 3750 9525 3750 9525 4500
  -2 4 0 0 0 7 58 0 20 0.000 0 0 7 0 0 5
  -	 12375 4500 10425 4500 10425 3750 12375 3750 12375 4500
  -2 4 0 0 0 7 58 0 20 0.000 0 0 7 0 0 5
  -	 1650 6825 450 6825 450 6150 1650 6150 1650 6825
  -2 4 0 0 0 7 58 0 20 0.000 0 0 7 0 0 5
  -	 1500 4425 525 4425 525 3750 1500 3750 1500 4425
  -2 4 0 0 0 7 58 0 20 0.000 0 0 7 0 0 5
  -	 4275 4500 3075 4500 3075 3750 4275 3750 4275 4500
  -2 4 0 0 0 7 57 0 20 0.000 0 0 30 0 0 5
  -	 12450 2400 0 2400 0 600 12450 600 12450 2400
   2 1 0 2 0 7 56 0 0 0.000 0 0 -1 1 0 2
   	1 1 2.00 120.00 240.00
   	 1800 4800 1800 5400
  -2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2
  -	 8700 7725 8700 8250
  -2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2
  -	1 1 4.00 120.00 120.00
  -	 10275 8425 9600 8425
  -2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2
  -	1 1 4.00 120.00 120.00
  -	 10275 9100 9600 9100
  -2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2
  -	1 0 1.00 210.00 210.00
  -	 7200 8775 7875 8775
  -3 1 0 1 0 7 112 0 10 0.000 0 0 0 25
  -	 4950 7800 5025 7125 5550 6750 5700 6075 6225 5400 7275 5100
  -	 8550 5025 9675 5100 10725 5550 10875 6300 11175 6975 12075 7350
  -	 12450 7950 12450 8775 12375 9525 11850 9825 10650 9750 9825 9525
  -	 8700 9600 7725 9825 6150 9675 4950 9750 4425 9375 4275 8700
  -	 4425 8175
  -	 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000
  -	 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000
  -	 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000
  -	 1.000
  -4 0 0 34 0 0 16 0.0000 4 165 1200 8250 2250 WARNING\001
  -4 0 0 34 0 0 16 0.0000 4 165 1125 10800 2250 CRITICAL\001
  -4 0 0 34 0 0 16 0.0000 4 165 855 3300 2250 DEBUG\001
  -4 0 0 38 0 0 14 0.0000 4 150 630 675 3975 <filter>\001
  -4 0 0 38 0 0 14 0.0000 4 150 630 3375 3975 <filter>\001
  -4 0 0 30 0 0 30 0.0000 4 405 1020 3150 4350 prefix\001
  -4 0 0 30 0 0 30 0.0000 4 300 795 600 4350 filter\001
  -4 0 0 38 0 0 14 0.0000 4 180 780 5925 3975 <output>\001
  -4 0 0 30 0 0 30 0.0000 4 405 720 5925 4350 pipe\001
  -4 0 0 38 0 0 14 0.0000 4 180 780 8475 3975 <output>\001
  -4 0 0 30 0 0 30 0.0000 4 405 1080 8325 4350 syslog\001
  -4 0 0 38 0 0 14 0.0000 4 180 780 11025 3975 <output>\001
  -4 0 0 30 0 0 24 0.0000 4 330 1905 10425 4350 filedescriptor\001
  -4 0 0 42 0 0 12 0.0000 4 180 465 6825 4725 pNext\001
  -4 0 0 42 0 0 12 0.0000 4 180 465 9375 4725 pNext\001
  -4 0 0 42 0 0 12 0.0000 4 180 465 11925 4725 pNext\001
  -4 0 0 42 0 0 12 0.0000 4 180 465 1575 4725 pNext\001
  -4 0 0 42 0 0 12 0.0000 4 180 465 4200 4725 pNext\001
  -4 0 0 38 0 0 14 0.0000 4 180 780 3300 6375 <output>\001
  -4 0 0 30 0 0 30 0.0000 4 300 1110 3150 6750 socket\001
  -4 0 0 42 0 0 12 0.0000 4 180 465 4200 7125 pNext\001
  -4 0 0 42 0 0 12 0.0000 4 180 465 1575 7125 pNext\001
  -4 0 0 30 0 0 30 0.0000 4 300 1035 525 6750 buffer\001
  -4 0 0 38 0 0 14 0.0000 4 150 630 750 6375 <filter>\001
  -4 0 0 38 0 0 14 0.0000 4 180 780 600 8775 <output>\001
  -4 0 0 30 0 0 30 0.0000 4 300 525 675 9150 file\001
  -4 0 0 30 0 0 60 0.0000 4 510 2400 5025 1725 stream\001
  -4 0 0 42 0 0 12 0.0000 4 180 465 1575 9525 pNext\001
  -4 0 0 50 0 0 12 0.0000 4 135 90 8775 7950 1\001
  -4 0 0 50 0 0 12 0.0000 4 75 105 8775 8175 +\001
  -4 0 0 34 0 0 16 0.0000 4 165 810 675 2250 TRACE\001
  -4 0 0 34 0 0 16 0.0000 4 165 570 6075 2250 INFO\001
  -4 0 0 34 0 0 16 0.0000 4 165 1155 8250 1950 NOTICE &\001
  -4 0 0 34 0 0 16 0.0000 4 165 1080 10800 1950 ERROR &\001
  -4 0 0 34 0 0 16 0.0000 4 165 990 10800 1650 PANIC &\001
  -4 0 7 32 0 0 40 0.0000 4 420 1695 6000 6600 classes\001

From ossp-cvs-owner@ossp.org  Wed Aug 22 20:08:14 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7MI8D618943; Wed, 22 Aug 2001 20:08:13 +0200 (CEST)
Date: Wed, 22 Aug 2001 20:08:13 +0200 (CEST)
Message-Id: <200108221808.f7MI8D618943@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_epreuve.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   22-Aug-2001 20:08:13
  Branch: HEAD                             Handle: 2001082219081300

  Modified files:
    ossp-pkg/l2             l2_epreuve.c

  Log:
    Additionally tests the buffer handler.

  Summary:
    Revision    Changes     Path
    1.2         +139 -28    ossp-pkg/l2/l2_epreuve.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_epreuve.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 l2_epreuve.c
  --- ossp-pkg/l2/l2_epreuve.c	2001/08/20 17:17:16	1.1
  +++ ossp-pkg/l2/l2_epreuve.c	2001/08/22 18:08:13	1.2
  @@ -29,8 +29,20 @@
   */
       
   #include "l2.h"
  -#define SZ_LOGSTRING "String LogTest c'est deja la.\n"
  +#include "l2_p.h"
   
  +#define L2_HEXBASE       16
  +#define L2_COMMANDARG     0
  +#define L2_BUFSIZEARG     1
  +#define L2_FILEARG        2
  +#define L2_MESSAGEARG     3
  +#define L2_VONBUFSTRING   " in L2_buffer.\n"
  +#define L2_VONFILESTRING  " von L2_file Kanal.\n"
  +
  +void throwup(char *);
  +int trybuf(char **);
  +int tryfile(char **);
  +
   /*--------------------------------------------------------*/
   /* void throwup(char *pszError)                           */
   /* Quick exception kludge                                 */
  @@ -42,54 +54,153 @@
   }
   
   /*--------------------------------------------------------*/
  -/* int main(int argc, char *argv[])                       */
  -/* Main program code                                      */
  +/* void trybuf(char *pszArgs[])                           */
  +/* Test logic for the buffer channel handler              */
   /*--------------------------------------------------------*/
  -int main(int argc, char *argv[])
  +int trybuf(char *pszArgs[])
  +{
  +    int iRet                       = 0;    /* for checking return value  */
  +    int iMsgSize                   = 0;    /* holds the message size     */
  +    char *pszMsgIn                 = NULL; /* string we pass to ch_write */
  +    l2_channel_t *pMyBChannel      = NULL; /* handle to channel instance */
  +    l2_handler_t *g_pBufferHandler = &l2_handler_buffer;
  +
  +    fprintf(stdout, "Trying buffer channel handler...\n");
  +
  +    pMyBChannel = l2_channel_create(g_pBufferHandler);
  +    if (pMyBChannel == NULL)
  +        return 1;
  +
  +    /* Params "size", <Buffer size> */
  +    iRet = l2_channel_configure(pMyBChannel, "size",\
  +        strtol(pszArgs[L2_BUFSIZEARG], NULL, L2_HEXBASE));
  +    if (iRet != L2_OK)
  +        return 1;
  +
  +    iRet = l2_channel_open(pMyBChannel);
  +    if (iRet != L2_OK)
  +        return 1;
  +
  +    /* Need to add extra bytes to string length to allow for the text we add */
  +    iMsgSize = strlen(pszArgs[L2_MESSAGEARG]) + strlen(L2_VONBUFSTRING);
  +    pszMsgIn = malloc(iMsgSize);
  +    strcpy(pszMsgIn, pszArgs[L2_MESSAGEARG]);
  +    strcat(pszMsgIn, L2_VONBUFSTRING);
  +    iRet = l2_channel_write(pMyBChannel, pszMsgIn, iMsgSize);
  +    if (iRet != L2_OK)
  +        return 1;
  +    free(pszMsgIn);
  +
  +    /* We are breaking an opaque data type to examine its contents by   */
  +    /* casting it. ANSI C allows this hack, but it's not good practice. */
  +    fprintf(stderr, "0x%X octets Speichersize.\n",\
  +        (int)(*((char **)pMyBChannel->context.vp + 2)));
  +    fprintf(stderr, *(char **)pMyBChannel->context.vp);
  +
  +    iRet = l2_channel_flush(pMyBChannel);
  +    if (iRet != L2_OK)
  +        return 1;
  +
  +    fprintf(stderr, "\nThis next test should not return any data, because "\
  +    "we are\ntrying to read the buffer after it has been flushed.\n"\
  +        "    Buffer contents: ");
  +    if (strlen(*(char **)pMyBChannel->context.vp))
  +        fprintf(stderr, *(char **)pMyBChannel->context.vp);
  +    else
  +        fprintf(stderr, "(Nada)");
  +    fputc('\n', stderr);
  +    fputc('\n', stderr);
  +
  +    iRet = l2_channel_close(pMyBChannel);
  +    if (iRet != L2_OK)
  +        return 1;
  +
  +    iRet = l2_channel_destroy(pMyBChannel);
  +    if (iRet != L2_OK)
  +        return 1;
  +
  +    return 0; /* All stages of execution completed successfully */
  +}
  +
  +/*--------------------------------------------------------*/
  +/* void tryfile(char *pszArgs[])                          */
  +/* Test logic for the file channel handler                */
  +/*--------------------------------------------------------*/
  +int tryfile(char *pszArgs[])
   {
       int iRet                       = 0;
  -    l2_channel_t *pMyChannel       = NULL;
  +    int iMsgSize                   = 0;
  +    char *pszMsgIn                 = NULL;
  +    l2_channel_t *pMyFChannel      = NULL;
       l2_handler_t *g_pFileHandler   = &l2_handler_file;
   
  -    if (argc < 2)
  -    {
  -        fprintf(stdout, "Usage: %s filepath\n", *argv);
  -        exit(1);
  -    }
  -
       fprintf(stdout, "Trying file channel handler...\n");
   
  -    pMyChannel = l2_channel_create(g_pFileHandler);
  -    if (pMyChannel == NULL)
  -        throwup("Channel create failed!\n");
  +    pMyFChannel = l2_channel_create(g_pFileHandler);
  +    if (pMyFChannel == NULL)
  +        return 1;
   
       /* Params "path", <File path>, "append", <TRUE/FALSE>, "perm", <0xValue>, */
  -    iRet = l2_channel_configure(pMyChannel, "path", argv[1],\
  +    iRet = l2_channel_configure(pMyFChannel, "path", pszArgs[L2_FILEARG],\
           "append", TRUE, "perm", 0x755);
       if (iRet != L2_OK)
  -        throwup("Channel configure failed!\n");
  +        return 1;
   
  -    iRet = l2_channel_open(pMyChannel);
  +    iRet = l2_channel_open(pMyFChannel);
       if (iRet != L2_OK)
  -        throwup("Channel open failed!\n");
  +        return 1;
   
  -    /* Need to subtract one to throw away null termination */
  -    iRet = l2_channel_write(pMyChannel, SZ_LOGSTRING, sizeof(SZ_LOGSTRING) - 1);
  +    /* Need to add n bytes to string length to allow for the text we add */
  +    iMsgSize = strlen(pszArgs[L2_MESSAGEARG]) + strlen(L2_VONFILESTRING);
  +    pszMsgIn = malloc(iMsgSize);
  +    strcpy(pszMsgIn, pszArgs[L2_MESSAGEARG]);
  +    strcat(pszMsgIn, L2_VONFILESTRING);
  +    iRet = l2_channel_write(pMyFChannel, pszMsgIn, iMsgSize);
       if (iRet != L2_OK)
  -        throwup("Channel write failed!\n");
  +        return 1;
  +    free(pszMsgIn);
   
  -    iRet = l2_channel_flush(pMyChannel);
  +    iRet = l2_channel_flush(pMyFChannel);
       if (iRet != L2_OK)
  -        throwup("Channel flush failed!\n");
  +        return 1;
   
  -    iRet = l2_channel_close(pMyChannel);
  +    iRet = l2_channel_close(pMyFChannel);
       if (iRet != L2_OK)
  -        throwup("Channel close failed!\n");
  +        return 1;
   
  -    iRet = l2_channel_destroy(pMyChannel);
  +    iRet = l2_channel_destroy(pMyFChannel);
       if (iRet != L2_OK)
  -        throwup("Channel destroy failed!\n");
  +        return 1;
  +
  +    return 0; /* All stages of execution completed successfully */
  +}
  +
  +/*--------------------------------------------------------*/
  +/* int main(int argc, char *argv[])                       */
  +/* Main program code                                      */
  +/*--------------------------------------------------------*/
  +int main(int argc, char *argv[])
  +{
  +    if (argc < 4)
  +    {
  +        fprintf(stdout, "Usage:   %s 0xbufsize file string\n"\
  +            "Example: %s 2F myoutfile DontPutAnySpacesInThisString\n",\
  +            *argv, *argv);
  +        exit(1);
  +    }
  +
  +    if (trybuf(argv))
  +    {
  +        throwup("Buffer channel handler failed!\n");
  +        exit(1);
  +    }
  +
  +    if (tryfile(argv))
  +    {
  +        throwup("File channel handler failed!\n");
  +        exit(1);
  +    }
   
  -    fprintf(stdout, "Success, exiting...\n");
  +    fprintf(stdout, "Success, exiting.\n");
       return 0;
   }

From ossp-cvs-owner@ossp.org  Wed Aug 22 20:09:19 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7MI9Ii19109; Wed, 22 Aug 2001 20:09:18 +0200 (CEST)
Date: Wed, 22 Aug 2001 20:09:18 +0200 (CEST)
Message-Id: <200108221809.f7MI9Ii19109@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   22-Aug-2001 20:09:18
  Branch: HEAD                             Handle: 2001082219091700

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    Added two important things to remember - Error msgs and Doku.

  Summary:
    Revision    Changes     Path
    1.9         +17 -0      ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 TODO
  --- ossp-pkg/l2/TODO	2001/08/21 13:00:57	1.8
  +++ ossp-pkg/l2/TODO	2001/08/22 18:09:17	1.9
  @@ -66,6 +66,23 @@
   o channels static array
     - consider dynamic
   
  +Documentation:
  +o buffer
  +    user needs to know how a buffer object behaves in
  +    relation to up/downstream channels. When does it
  +    pass its data to the next channel, when does it
  +    erase, what happens to its data when it is over
  +    written or flushed...
  +
  +o errors
  +    when a channel fails during an operation, how
  +    does it report this? How should a user interpret
  +    the error message or other data? Do we need more
  +    accurate or detailed error messages in the channel
  +    code? When a channel fails, does it continue
  +    passing data on to downstream channels? Is it
  +    corrupt data?
  +
   Braindump:
   - debugging is special case of logging
   - tracing is special case of debugging

From ossp-cvs-owner@ossp.org  Wed Aug 22 20:12:18 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7MICHu19632; Wed, 22 Aug 2001 20:12:17 +0200 (CEST)
Date: Wed, 22 Aug 2001 20:12:17 +0200 (CEST)
Message-Id: <200108221812.f7MICHu19632@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_buffer.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   22-Aug-2001 20:12:17
  Branch: HEAD                             Handle: 2001082219121600

  Modified files:
    ossp-pkg/l2             l2_ch_buffer.c

  Log:
    When buffer will overflow, it should fail first. Also, when buffer gets a
    write message it should not pass it downstream. The buffer writes data further
    downstream only when it is flushed (either by the user or implicitly.)

  Summary:
    Revision    Changes     Path
    1.6         +3  -6      ossp-pkg/l2/l2_ch_buffer.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_buffer.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 l2_ch_buffer.c
  --- ossp-pkg/l2/l2_ch_buffer.c	2001/08/15 10:36:03	1.5
  +++ ossp-pkg/l2/l2_ch_buffer.c	2001/08/22 18:12:16	1.6
  @@ -92,12 +92,8 @@
       if ((cfg = (l2_ch_buffer_t *)ctx->vp) == NULL)
           return L2_ERROR;
   
  -    if (bufsize > (cfg->bufsize - cfg->bufpos)) {
  -        if (downstream != NULL)
  -            if (l2_channel_write(downstream, cfg->buf, cfg->bufpos) == L2_ERROR)
  -                return L2_ERROR;
  -        cfg->bufpos = 0;
  -    }
  +    if (bufsize > (cfg->bufsize - cfg->bufpos))
  +        return L2_ERROR; /* The buffer is too small */
   
       memcpy(cfg->buf+cfg->bufpos, buf, bufsize);
       cfg->bufpos += bufsize;
  @@ -117,6 +113,7 @@
               if (l2_channel_write(downstream, cfg->buf, cfg->bufpos) == L2_ERROR)
                   return L2_ERROR;
           cfg->bufpos = 0;
  +        bzero(cfg->buf, cfg->bufsize); /* Guard against improper usage */
       }
   
       if (downstream != NULL)

From ossp-cvs-owner@ossp.org  Wed Aug 22 22:19:51 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7MKJoE36379; Wed, 22 Aug 2001 22:19:50 +0200 (CEST)
Date: Wed, 22 Aug 2001 22:19:50 +0200 (CEST)
Message-Id: <200108222019.f7MKJoE36379@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xds.h.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   22-Aug-2001 22:19:50
  Branch: HEAD                             Handle: 2001082221195000

  Modified files:
    ossp-pkg/srpc/libxds    xds.h.in

  Log:
    Added the data structure declaration needed in float2xds_float(). It
    does not really belong here, but for the moment it should be fine.

  Summary:
    Revision    Changes     Path
    1.15        +12 -1      ossp-pkg/srpc/libxds/xds.h.in
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xds.h.in
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 xds.h.in
  --- ossp-pkg/srpc/libxds/xds.h.in	2001/08/12 11:31:45	1.14
  +++ ossp-pkg/srpc/libxds/xds.h.in	2001/08/22 20:19:50	1.15
  @@ -129,6 +129,8 @@
   xds_declare_formatting_engine(xdr_encode_int64);
   xds_declare_formatting_engine(xdr_decode_int64);
   #endif
  +xds_declare_formatting_engine(xdr_encode_float);
  +xds_declare_formatting_engine(xdr_decode_float);
   xds_declare_formatting_engine(xdr_encode_double);
   xds_declare_formatting_engine(xdr_decode_double);
   xds_declare_formatting_engine(xdr_encode_octetstream);
  @@ -157,5 +159,14 @@
   xds_declare_formatting_engine(xml_encode_string);
   xds_declare_formatting_engine(xml_decode_string);
   
  -#endif /* __XDS_H__ */
  +typedef struct
  +    {
  +    unsigned int sign     :1;
  +    unsigned int fraction :23;
  +    int          exponent :8;
  +    }
  +xds_float_t;
  +
  +int float2xds_float(xds_float_t* new_num, float num);
   
  +#endif /* __XDS_H__ */

From ossp-cvs-owner@ossp.org  Wed Aug 22 22:21:02 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7MKL2U36504; Wed, 22 Aug 2001 22:21:02 +0200 (CEST)
Date: Wed, 22 Aug 2001 22:21:02 +0200 (CEST)
Message-Id: <200108222021.f7MKL2U36504@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds float2xds-float.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   22-Aug-2001 22:21:02
  Branch: HEAD                             Handle: 2001082221210100

  Added files:
    ossp-pkg/srpc/libxds    float2xds-float.c

  Log:
    The float2xds_float() routine will break a float number down into
    sign, fraction part and exponent. This representation is then used in
    the formatting callbacks such as xdr_encode_float().

  Summary:
    Revision    Changes     Path
    1.1         +71 -0      ossp-pkg/srpc/libxds/float2xds-float.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/float2xds-float.c
  ============================================================
  $ cvs update -p -r1.1 float2xds-float.c
  #include "xds_p.h"
  
  int float2xds_float(xds_float_t* new_num, float num)
      {
      const static unsigned int base = 2;
      size_t i;
      float  tmp;
  
      /* Handle zero as a special case. */
  
      if (num == 0.0)
  	{
  	new_num->sign     = 0;
  	new_num->fraction = 0;
  	new_num->exponent = -127;
  	return 0;
  	}
  
      /* Determine the sign of the number. */
  
      if (num < 0)
  	{
  	new_num->sign = 1;
  	num = 0 - num;
  	}
      else
  	new_num->sign = 0;
  
      /* Canonify the number before we convert it. */
  
      new_num->exponent = 0;
      while (num < 1)
  	{
  	num *= base;
  	--new_num->exponent;
  	}
  
      /* Find the exponent. */
  
      for (i = 0, tmp = 1; i <= 128; ++i, tmp *= base)
  	{
  	if (tmp*base > num)
  	    break;
  	}
      if (i <= 128)
  	{
  	num = num / tmp - 1;
  	new_num->exponent += i;
  	}
      else
  	return 1;
  
      /* Calculate the fraction part. */
  
      for (new_num->fraction = 0, i = 0; i < 23; ++i)
  	{
  	new_num->fraction *= base;
  	if (num >= 1.0 / base)
  	    {
  	    new_num->fraction |= 1;
  	    num = num * base - 1;
  	    }
  	else
  	    {
  	    new_num->fraction |= 0;
  	    num *= base;
  	    }
  	}
  
      return 0;
      }

From ossp-cvs-owner@ossp.org  Wed Aug 22 22:21:34 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7MKLXq36573; Wed, 22 Aug 2001 22:21:33 +0200 (CEST)
Date: Wed, 22 Aug 2001 22:21:33 +0200 (CEST)
Message-Id: <200108222021.f7MKLXq36573@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xds_test_lib.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   22-Aug-2001 22:21:33
  Branch: HEAD                             Handle: 2001082221213200

  Modified files:
    ossp-pkg/srpc/libxds    xds_test_lib.c

  Log:
    Removed trailing whitespace.

  Summary:
    Revision    Changes     Path
    1.5         +0  -1      ossp-pkg/srpc/libxds/xds_test_lib.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xds_test_lib.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xds_test_lib.c
  --- ossp-pkg/srpc/libxds/xds_test_lib.c	2001/08/12 11:31:45	1.4
  +++ ossp-pkg/srpc/libxds/xds_test_lib.c	2001/08/22 20:21:32	1.5
  @@ -834,4 +834,3 @@
   }
   
   #endif /* XDS_TEST_XDS_MYSTRUCT */
  -

From ossp-cvs-owner@ossp.org  Wed Aug 22 22:22:20 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7MKMJs36662; Wed, 22 Aug 2001 22:22:19 +0200 (CEST)
Date: Wed, 22 Aug 2001 22:22:19 +0200 (CEST)
Message-Id: <200108222022.f7MKMJs36662@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   22-Aug-2001 22:22:19
  Branch: HEAD                             Handle: 2001082221221800

  Modified files:
    ossp-pkg/srpc/libxds    Makefile.in

  Log:
    Added the float2xds_float.c module to the list of library objects.

  Summary:
    Revision    Changes     Path
    1.33        +1  -1      ossp-pkg/srpc/libxds/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile.in
  ============================================================
  $ cvs diff -u -r1.32 -r1.33 Makefile.in
  --- ossp-pkg/srpc/libxds/Makefile.in	2001/08/13 19:48:02	1.32
  +++ ossp-pkg/srpc/libxds/Makefile.in	2001/08/22 20:22:18	1.33
  @@ -53,7 +53,7 @@
   
   #   list of objects
   LIB_NAME    = libxds.la
  -LIB_OBJS    = xds.lo xds_engine_xdr.lo xds_engine_xml.lo
  +LIB_OBJS    = xds.lo xds_engine_xdr.lo xds_engine_xml.lo float2xds-float.lo
   TST_SRCS    = xds_test_lib.c xds_test_xdr.c xds_test_xml.c
   
   #   file containing the official version information

From ossp-cvs-owner@ossp.org  Wed Aug 22 22:22:43 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7MKMgv36718; Wed, 22 Aug 2001 22:22:42 +0200 (CEST)
Date: Wed, 22 Aug 2001 22:22:42 +0200 (CEST)
Message-Id: <200108222022.f7MKMgv36718@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xds_test_xdr.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   22-Aug-2001 22:22:42
  Branch: HEAD                             Handle: 2001082221224100

  Modified files:
    ossp-pkg/srpc/libxds    xds_test_xdr.c

  Log:
    Added test suite for float encoding/decoding.

  Summary:
    Revision    Changes     Path
    1.6         +100 -0     ossp-pkg/srpc/libxds/xds_test_xdr.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xds_test_xdr.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 xds_test_xdr.c
  --- ossp-pkg/srpc/libxds/xds_test_xdr.c	2001/08/13 19:48:02	1.5
  +++ ossp-pkg/srpc/libxds/xds_test_xdr.c	2001/08/22 20:22:41	1.6
  @@ -734,3 +734,103 @@
   
   #endif /* XDS_TEST_XDR_OCTETSTREAM_EMPTY */
   
  +#ifdef XDS_TEST_XDR_FLOAT
  +
  +int main(int argc, char *argv[])
  +{
  +    XDR xdrs;
  +    char xdr_buf[1024];
  +    size_t xdr_buf_size;
  +
  +    xds_t *xds;
  +    char *xds_buf;
  +    size_t xds_buf_size;
  +
  +    float values[] =
  +	{
  +        0,
  +	3.14,
  +	-3.14,
  +	0.14,
  +	-0.14,
  +	123456.789,
  +	-123456.789
  +	};
  +
  +    size_t i;
  +
  +    /* Encode the values array using the RPC-XDR implementation. */
  +    xdrmem_create(&xdrs, xdr_buf, sizeof (xdr_buf), XDR_ENCODE);
  +    for (i = 0; i < sizeof (values) / sizeof (float); ++i)
  +        xdr_float(&xdrs, &values[i]);
  +    xdr_buf_size = xdr_getpos(&xdrs);
  +    xdr_destroy(&xdrs);
  +
  +    /* Encode the values array using the XDS implementation. */
  +    xds = xds_init(XDS_ENCODE);
  +    if (xds == NULL) {
  +        printf("Failed to initialize XDS context.\n");
  +        return 1;
  +    }
  +    if (xds_register(xds, "float", &xdr_encode_float, NULL) != XDS_OK) {
  +        printf("Failed to register my encoding engines.\n");
  +        return 1;
  +    }
  +    for (i = 0; i < sizeof (values) / sizeof (float); ++i) {
  +        if (xds_encode(xds, "float", values[i]) != XDS_OK) {
  +            printf("xds_encode(values[%d]) failed!\n", i);
  +            return 1;
  +        }
  +    }
  +    if (xds_getbuffer(xds, XDS_GIFT, (void **)&xds_buf, &xds_buf_size) !=
  +        XDS_OK) {
  +        printf("getbuffer() failed.\n");
  +        return 1;
  +    }
  +    xds_destroy(xds);
  +
  +    /* Both buffers must be equal now. */
  +    if (xdr_buf_size != xds_buf_size) {
  +        printf("The buffer sizes don't match: %d != %d.\n", xdr_buf_size,
  +               xds_buf_size);
  +        return 1;
  +    }
  +    if (memcmp(xds_buf, xdr_buf, xds_buf_size) != 0) {
  +        printf("The buffers' contents is not identical!\n");
  +        return 1;
  +    }
  +
  +    /* Now we decode the values again using the XDS implementation and
  +       compare them to our original values. Obviously, they should not
  +       differ. */
  +    xds = xds_init(XDS_DECODE);
  +    if (xds == NULL) {
  +        printf("Failed to initialize XDS context.\n");
  +        return 1;
  +    }
  +    if (xds_register(xds, "float", &xdr_decode_float, NULL) != XDS_OK) {
  +        printf("Failed to register my decoding engines.\n");
  +        return 1;
  +    }
  +    if (xds_setbuffer(xds, XDS_GIFT, xds_buf, xds_buf_size) != XDS_OK) {
  +        printf("setbuffer() failed.\n");
  +        return 1;
  +    }
  +    for (i = 0; i < sizeof (values) / sizeof (float); ++i) {
  +        float tmp;
  +        if (xds_decode(xds, "float", &tmp) != XDS_OK) {
  +            printf("xds_decode() failed for the %d value!\n", i);
  +            return 1;
  +        }
  +        if (values[i] != tmp) {
  +            printf("The %dth value has not been decoded correctly!\n", i);
  +            return 1;
  +        }
  +    }
  +    xds_destroy(xds);
  +
  +    /* Everything went fine. */
  +    return 0;
  +}
  +
  +#endif /* XDS_TEST_XDR_FLOAT */

From ossp-cvs-owner@ossp.org  Wed Aug 22 22:23:24 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7MKNNT36800; Wed, 22 Aug 2001 22:23:23 +0200 (CEST)
Date: Wed, 22 Aug 2001 22:23:23 +0200 (CEST)
Message-Id: <200108222023.f7MKNNT36800@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xds_p.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   22-Aug-2001 22:23:22
  Branch: HEAD                             Handle: 2001082221232200

  Modified files:
    ossp-pkg/srpc/libxds    xds_p.h

  Log:
    Removed trailing whitespace.

  Summary:
    Revision    Changes     Path
    1.7         +0  -1      ossp-pkg/srpc/libxds/xds_p.h
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xds_p.h
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 xds_p.h
  --- ossp-pkg/srpc/libxds/xds_p.h	2001/08/12 11:31:45	1.6
  +++ ossp-pkg/srpc/libxds/xds_p.h	2001/08/22 20:23:22	1.7
  @@ -57,4 +57,3 @@
   };
   
   #endif /* __XDS_P_H__ */
  -

From ossp-cvs-owner@ossp.org  Wed Aug 22 22:23:50 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7MKNmO36859; Wed, 22 Aug 2001 22:23:48 +0200 (CEST)
Date: Wed, 22 Aug 2001 22:23:48 +0200 (CEST)
Message-Id: <200108222023.f7MKNmO36859@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xds_engine_xdr.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   22-Aug-2001 22:23:48
  Branch: HEAD                             Handle: 2001082221234800

  Modified files:
    ossp-pkg/srpc/libxds    xds_engine_xdr.c

  Log:
    Implemented xdr_encode_float() and xdr_decode_float().

  Summary:
    Revision    Changes     Path
    1.7         +84 -0      ossp-pkg/srpc/libxds/xds_engine_xdr.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xds_engine_xdr.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 xds_engine_xdr.c
  --- ossp-pkg/srpc/libxds/xds_engine_xdr.c	2001/08/13 19:48:02	1.6
  +++ ossp-pkg/srpc/libxds/xds_engine_xdr.c	2001/08/22 20:23:48	1.7
  @@ -294,6 +294,90 @@
   #endif /* XDS_HAVE_64_BIT_SUPPORT */
   
   /*
  + * Encode/decode floating point values.
  + */
  +
  +int xdr_encode_float(xds_t *xds, void *engine_context,
  +		     void *buffer, size_t buffer_size,
  +		     size_t *used_buffer_size, va_list *args)
  +{
  +    xds_float_t value;
  +    xds_uint8_t tmp;
  +
  +    xds_init_encoding_engine(4);
  +
  +    /* Get value and format it into the structure. */
  +    float2xds_float(&value, (float)va_arg(*args, double));
  +
  +    memset(buffer, 0, 4);
  +
  +    if (value.sign == 1)
  +	((xds_uint8_t*)buffer)[0] |= 0x80;
  +
  +    tmp = value.exponent + 127;
  +    ((xds_uint8_t*)buffer)[0] |= tmp >> 1;
  +    ((xds_uint8_t*)buffer)[1] |= (tmp & 0x01) << 7;
  +
  +    ((xds_uint8_t*)buffer)[1] |= (xds_uint8_t)((value.fraction & 0x7fffff) >> 16);
  +    ((xds_uint8_t*)buffer)[2] |= (xds_uint8_t)((value.fraction & 0x00ffff) >>  8);
  +    ((xds_uint8_t*)buffer)[3] |= (xds_uint8_t)((value.fraction & 0x0000ff) >>  0);
  +
  +    return XDS_OK;
  +}
  +
  +int xdr_decode_float(xds_t *xds, void *engine_context,
  +		     void *buffer, size_t buffer_size,
  +		     size_t *used_buffer_size, va_list *args)
  +{
  +    float*       value;
  +    xds_uint32_t fraction;
  +    xds_uint8_t  exponent;
  +    size_t       i;
  +    char         sign;
  +
  +    xds_init_decoding_engine(4);
  +
  +    value = va_arg(*args, float*);
  +    *value = 0.0;
  +
  +    fraction  = (((xds_uint8_t*)buffer)[1] & 0x7fffff) << 16;
  +    fraction += ((xds_uint8_t*)buffer)[2] << 8;
  +    fraction += ((xds_uint8_t*)buffer)[3];
  +    exponent  = (((xds_uint8_t*)buffer)[0] & 0x7f) << 1;
  +    exponent += (((xds_uint8_t*)buffer)[1] & 0x80) >> 7;
  +    sign = (((xds_uint8_t*)buffer)[0] & 0x80) >> 7;
  +
  +    if (fraction == 0 && exponent == 0)
  +	return XDS_OK;
  +
  +    for (i = 23; i > 0; --i)
  +	{
  +	if ((fraction & 0x01) == 1)
  +	    *value += 1;
  +	*value /= 2.0;
  +	fraction /= 2;
  +	}
  +    *value += 1;
  +
  +    if (exponent > 127)
  +	{
  +	for (exponent -= 127; exponent > 0; --exponent)
  +	    *value *= 2.0;
  +	}
  +    else
  +	{
  +	for (exponent = 127 - exponent; exponent > 0; --exponent)
  +	    *value /= 2.0;
  +	}
  +
  +    if (sign == 1)
  +	*value = 0.0 - *value;
  +
  +    return XDS_OK;
  +}
  +
  +
  +/*
    * Encode/decode double-precision floating point values.
    */
   

From ossp-cvs-owner@ossp.org  Wed Aug 22 22:25:08 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7MKP7d36991; Wed, 22 Aug 2001 22:25:07 +0200 (CEST)
Date: Wed, 22 Aug 2001 22:25:07 +0200 (CEST)
Message-Id: <200108222025.f7MKP7d36991@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   22-Aug-2001 22:25:07
  Branch: HEAD                             Handle: 2001082221250600

  Modified files:
    ossp-pkg/srpc           TODO

  Log:
    Updated state of the "man page" action.

  Summary:
    Revision    Changes     Path
    1.24        +1  -1      ossp-pkg/srpc/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/TODO
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 TODO
  --- ossp-pkg/srpc/TODO	2001/08/11 19:27:03	1.23
  +++ ossp-pkg/srpc/TODO	2001/08/22 20:25:06	1.24
  @@ -32,7 +32,7 @@
   
    - conversion of LaTeX documentation into POD source format
      for Unix manual page xds(3).
  -   done: 0%
  +   done: 100%
   
    - IEEE values ranges for floating point numbers will be used for
      accurarcy in XML presentation.

From ossp-cvs-owner@ossp.org  Thu Aug 23 07:30:59 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7N5Uw907400; Thu, 23 Aug 2001 07:30:58 +0200 (CEST)
Date: Thu, 23 Aug 2001 07:30:58 +0200 (CEST)
Message-Id: <200108230530.f7N5Uw907400@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_buffer.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   23-Aug-2001 07:30:58
  Branch: HEAD                             Handle: 2001082306305800

  Modified files:
    ossp-pkg/l2             l2_ch_buffer.c

  Log:
    Upgraded bzero(3) to memset(3).

  Summary:
    Revision    Changes     Path
    1.7         +1  -1      ossp-pkg/l2/l2_ch_buffer.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_buffer.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 l2_ch_buffer.c
  --- ossp-pkg/l2/l2_ch_buffer.c	2001/08/22 18:12:16	1.6
  +++ ossp-pkg/l2/l2_ch_buffer.c	2001/08/23 05:30:58	1.7
  @@ -113,7 +113,7 @@
               if (l2_channel_write(downstream, cfg->buf, cfg->bufpos) == L2_ERROR)
                   return L2_ERROR;
           cfg->bufpos = 0;
  -        bzero(cfg->buf, cfg->bufsize); /* Guard against improper usage */
  +        memset(cfg->buf, 0x5A, cfg->bufsize); /* Guard against improper usage */
       }
   
       if (downstream != NULL)

From ossp-cvs-owner@ossp.org  Thu Aug 23 07:32:46 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7N5Wjp07555; Thu, 23 Aug 2001 07:32:45 +0200 (CEST)
Date: Thu, 23 Aug 2001 07:32:45 +0200 (CEST)
Message-Id: <200108230532.f7N5Wjp07555@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_epreuve.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   23-Aug-2001 07:32:45
  Branch: HEAD                             Handle: 2001082306324500

  Modified files:
    ossp-pkg/l2             l2_epreuve.c

  Log:
    Removed problematic after-flush buf-checker. Now we don't verify that the
    buffer is left unused after an immediate flush operation.

  Summary:
    Revision    Changes     Path
    1.3         +0  -10     ossp-pkg/l2/l2_epreuve.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_epreuve.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2_epreuve.c
  --- ossp-pkg/l2/l2_epreuve.c	2001/08/22 18:08:13	1.2
  +++ ossp-pkg/l2/l2_epreuve.c	2001/08/23 05:32:45	1.3
  @@ -101,16 +101,6 @@
       if (iRet != L2_OK)
           return 1;
   
  -    fprintf(stderr, "\nThis next test should not return any data, because "\
  -    "we are\ntrying to read the buffer after it has been flushed.\n"\
  -        "    Buffer contents: ");
  -    if (strlen(*(char **)pMyBChannel->context.vp))
  -        fprintf(stderr, *(char **)pMyBChannel->context.vp);
  -    else
  -        fprintf(stderr, "(Nada)");
  -    fputc('\n', stderr);
  -    fputc('\n', stderr);
  -
       iRet = l2_channel_close(pMyBChannel);
       if (iRet != L2_OK)
           return 1;

From ossp-cvs-owner@ossp.org  Thu Aug 23 09:50:43 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7N7ogc24480; Thu, 23 Aug 2001 09:50:42 +0200 (CEST)
Date: Thu, 23 Aug 2001 09:50:42 +0200 (CEST)
Message-Id: <200108230750.f7N7ogc24480@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   23-Aug-2001 09:50:42
  Branch: HEAD                             Handle: 2001082308504200

  Modified files:
    ossp-pkg/lmtp2nntp      nntp.c

  Log:
    fixed style vs. optimization

  Summary:
    Revision    Changes     Path
    1.10        +7  -6      ossp-pkg/lmtp2nntp/nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/nntp.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 nntp.c
  --- ossp-pkg/lmtp2nntp/nntp.c	2001/08/21 07:40:41	1.9
  +++ ossp-pkg/lmtp2nntp/nntp.c	2001/08/23 07:50:42	1.10
  @@ -228,14 +228,14 @@
       nntp_rc_t rc = NNTP_OK;
       char line[NNTP_LINE_MAXLEN];
   
  -    /*  RFC 2980
  +    /*  RFC2980
        *   
        *  2.3 MODE READER
        *  MODE READER is used by the client to indicate to the server that it is
        *  a news reading client.  Some implementations make use of this
        *  information to reconfigure themselves for better performance in
        *  responding to news reader commands.  This command can be contrasted
  -     *  with the SLAVE command in RFC 977, which was not widely implemented.
  +     *  with the SLAVE command in RFC0977, which was not widely implemented.
        *  MODE READER was first available in INN.
        *  
        *  2.3.1 Responses
  @@ -394,10 +394,11 @@
       if (strncmp(line, "436", 3) == 0)
           return NNTP_DEFER;
   
  -    if (   (strncmp(line, "437", 3) == 0) /*FIXME style vs. optimization - redundant lines */
  -        || (strncmp(line, "480", 3) == 0)
  -        || (strncmp(line, "335", 3) != 0)
  -          )
  +    if (   (strncmp(line, "437", 3) == 0)
  +        || (strncmp(line, "480", 3) == 0))
  +        return NNTP_ERR_POST;
  +
  +    if (strncmp(line, "335", 3) != 0)
           return NNTP_ERR_POST;
   
       if ((rc = nntp->io.write(nntp->wfd, msg->cpMsg, strlen(msg->cpMsg))) < 0) /*FIXME while() wrapper around write required */

From ossp-cvs-owner@ossp.org  Thu Aug 23 09:52:27 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7N7qQQ25033; Thu, 23 Aug 2001 09:52:26 +0200 (CEST)
Date: Thu, 23 Aug 2001 09:52:26 +0200 (CEST)
Message-Id: <200108230752.f7N7qQQ25033@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp nntp.c nntp.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   23-Aug-2001 09:52:26
  Branch: HEAD                             Handle: 2001082308522500

  Modified files:
    ossp-pkg/lmtp2nntp      nntp.c nntp.h

  Log:
    added NNTP_ERR_UNKNOWN which is useful for injecting artifical errors when debugging

  Summary:
    Revision    Changes     Path
    1.11        +1  -0      ossp-pkg/lmtp2nntp/nntp.c
    1.7         +2  -1      ossp-pkg/lmtp2nntp/nntp.h
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/nntp.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 nntp.c
  --- ossp-pkg/lmtp2nntp/nntp.c	2001/08/23 07:50:42	1.10
  +++ ossp-pkg/lmtp2nntp/nntp.c	2001/08/23 07:52:25	1.11
  @@ -430,6 +430,7 @@
       else if (rc == NNTP_ERR_OVERFLOW) str = "NNTP: buffer overflow";
       else if (rc == NNTP_ERR_POST    ) str = "NNTP: cannot post message";
       else if (rc == NNTP_ERR_INIT    ) str = "NNTP: initialization failed";
  +    else if (rc == NNTP_ERR_UNKNOWN ) str = "NNTP: unknown error";
       return str;
   }
   
  Index: ossp-pkg/lmtp2nntp/nntp.h
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 nntp.h
  --- ossp-pkg/lmtp2nntp/nntp.h	2001/08/16 15:00:50	1.6
  +++ ossp-pkg/lmtp2nntp/nntp.h	2001/08/23 07:52:25	1.7
  @@ -54,7 +54,8 @@
       NNTP_ERR_ARG,
       NNTP_ERR_OVERFLOW,
       NNTP_ERR_POST,
  -    NNTP_ERR_INIT
  +    NNTP_ERR_INIT,
  +    NNTP_ERR_UNKNOWN
   } nntp_rc_t;
   
   nntp_t     *nntp_create   (int, int, nntp_io_t *);

From ossp-cvs-owner@ossp.org  Thu Aug 23 09:54:07 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7N7s6Q25433; Thu, 23 Aug 2001 09:54:06 +0200 (CEST)
Date: Thu, 23 Aug 2001 09:54:06 +0200 (CEST)
Message-Id: <200108230754.f7N7s6Q25433@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp.c msg.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   23-Aug-2001 09:54:06
  Branch: HEAD                             Handle: 2001082308540600

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp.c msg.c

  Log:
    cosmetic correction make all RFC references match RFC\d{4} allowing to grep for them when writing documentation

  Summary:
    Revision    Changes     Path
    1.14        +2  -2      ossp-pkg/lmtp2nntp/lmtp.c
    1.7         +1  -1      ossp-pkg/lmtp2nntp/msg.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp.c
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 lmtp.c
  --- ossp-pkg/lmtp2nntp/lmtp.c	2001/08/21 10:52:47	1.13
  +++ ossp-pkg/lmtp2nntp/lmtp.c	2001/08/23 07:54:06	1.14
  @@ -188,7 +188,7 @@
        *        function must assume multiline messages have lines terminated
        *        with NL only.
        *
  -     *  RFC821 "Simple Mail Transfer Protocol" [excerpt]
  +     *  RFC0821 "Simple Mail Transfer Protocol" [excerpt]
        *  4.5.2. TRANSPARENCY
        *  When a line of mail text is received by the receiver-SMTP it checks
        *  the line.  If the line is composed of a single period it is the end of
  @@ -256,7 +256,7 @@
        *  LMTP_ERR_OVERFLOW req->msg set, req->verb NULL means buf overflow
        *  LMTP_ERR_SYSTEM   req->msg set, req->verb NULL means system error
        *
  -     *  RFC821 "Simple Mail Transfer Protocol" [excerpts]
  +     *  RFC0821 "Simple Mail Transfer Protocol" [excerpts]
        *  4.1.1. COMMAND SEMANTICS
        *  The command codes themselves are alphabetic characters terminated by
        *  <SP> if parameters follow and <CRLF> otherwise.
  Index: ossp-pkg/lmtp2nntp/msg.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 msg.c
  --- ossp-pkg/lmtp2nntp/msg.c	2001/08/21 07:40:41	1.6
  +++ ossp-pkg/lmtp2nntp/msg.c	2001/08/23 07:54:06	1.7
  @@ -65,7 +65,7 @@
       /* INPUTS
        *
        * msg->cpMsg
  -     * must contain the wholly RFC822 formatted message with native
  +     * must contain the wholly RFC0822 formatted message with native
        * (unescaped) dots at the beginning of a line, the 'From ' envelope,
        * headers, double newline, body, '\0', no trailing dot;
        *

From ossp-cvs-owner@ossp.org  Thu Aug 23 09:55:54 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7N7tsv25591; Thu, 23 Aug 2001 09:55:54 +0200 (CEST)
Date: Thu, 23 Aug 2001 09:55:54 +0200 (CEST)
Message-Id: <200108230755.f7N7tsv25591@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   23-Aug-2001 09:55:54
  Branch: HEAD                             Handle: 2001082308555300

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c

  Log:
    worked out all FIXMEs in lmtp2nntp.c; completely reviewed all lmtp_response()
    statuscodes and dsncodes especially distinguishing between "5xx Permanent
    Failure" and "4xx Persistent Transient Failure" conditions, documented every
    return code including reference to and excerpt from related RFCs; added
    graceful release of all resources; replaced hardcoded uname by uname(3) system
    call; added wildmat-style pattern matching for GROUPMODE_ENVELOPE and
    GROUPMODE_HEADER using shpat_match; added multiline responses for erroneous
    status after posting/feeding in lmtp_cb_data(); pushed down and updated 00TODO
    including relocation of pertinent information directly into source;

  Summary:
    Revision    Changes     Path
    1.24        +367 -141   ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/08/21 08:56:41	1.23
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/08/23 07:55:53	1.24
  @@ -15,10 +15,12 @@
   #include <errno.h>
   #include <string.h>
   #include <fcntl.h>
  +#include <sys/utsname.h>
   
   /* third party */
   #include "str.h"
   #include "argz.h"
  +#include "shpat_match.h"
   
   /* own headers */
   #include "lmtp.h"
  @@ -64,6 +66,7 @@
   
   static void initsession(struct session *session);
   static void resetsession(struct session *session);
  +int groupmatch(char *, size_t, char *);
   
   struct ns {
       char *h;        /* host */
  @@ -71,23 +74,29 @@
       sa_t *sa;
       int s;          /* socket */
       nntp_t *nntp;
  +    nntp_rc_t rc;
   };
   
   typedef struct {
  -    int     option_verbose;
  -    int     option_tracing;
  -    int     option_groupmode;
  -    int     option_deliverymode;
  -    char   *option_deliverymodefakestatus;
  -    char   *option_deliverymodefakedsn;
  -    int     nsc;
  -    struct  ns ns[MAXNEWSSERVICES];
  -    char   *azGroupargs;
  -    size_t  asGroupargs;
  -    struct  session session;
  -    msg_t  *msg;
  +    int             option_verbose;
  +    int             option_tracing;
  +    int             option_groupmode;
  +    int             option_deliverymode;
  +    char           *option_deliverymodefakestatus;
  +    char           *option_deliverymodefakedsn;
  +    int             nsc;
  +    struct ns       ns[MAXNEWSSERVICES];
  +    char           *azGroupargs;
  +    size_t          asGroupargs;
  +    struct          session session;
  +    msg_t          *msg;
  +    struct utsname  uname;
   } lmtp2nntp_t;
   
  +static void lmtp_gfs_lhlo(lmtp2nntp_t *ctx);
  +static void lmtp_gfs_rset(lmtp2nntp_t *ctx);
  +static void lmtp_gfs_quit(lmtp2nntp_t *ctx);
  +
   enum {
       GROUPMODE_ARG,
       GROUPMODE_ENVELOPE,
  @@ -124,16 +133,6 @@
       char *cpPort;
       sa_t *sa;
   
  -#if 0
  -    /* begin NNTP posting test */
  -    {
  -    nntp_post(nntp, "...");
  -    nntp_destroy(nntp);
  -    sock_destroy(s);
  -    exit(0);
  -    }
  -#endif
  -
       progname = argv[0];
   
       /* create application context */
  @@ -147,14 +146,21 @@
       ctx->option_deliverymodefakedsn    = "5.7.1"; /* Delivery not authorized, message refused */
       ctx->nsc = 0;
       for (i=0; i < MAXNEWSSERVICES; i++) {
  -        ctx->ns[i].h = "";
  +        ctx->ns[i].h = NULL;
  +        ctx->ns[i].p = NULL;
  +        ctx->ns[i].sa = NULL;
           ctx->ns[i].s = -1;
           ctx->ns[i].nntp = NULL;
  +        ctx->ns[i].rc = LMTP_ERR_UNKNOWN;
       }
       ctx->azGroupargs = NULL;
       ctx->asGroupargs = 0;
       initsession(&ctx->session);
       ctx->msg = NULL;
  +    if (uname(&ctx->uname) != 0) {
  +        fprintf(stderr, "%s:Error: uname failed \"%s\"\n", progname, strerror(errno));
  +        exit(ERR_EXECUTION);
  +    }
   
   #if 1
       {
  @@ -253,6 +259,7 @@
                               strerror(errno));
                       exit(ERR_EXECUTION);
                   }
  +                ctx->ns[ctx->nsc].sa = sa;
                   if ((ctx->ns[ctx->nsc].s =
                        socket(sa->sa_buf->sa_family, SOCK_STREAM, sa->sa_proto)) == -1) {
                       fprintf(stderr, "%s:Error: Creating TCP socket failed for \"%s:%s\": %s\n", 
  @@ -262,8 +269,6 @@
                               strerror(errno));
                       exit(ERR_EXECUTION);
                   }
  -                ctx->ns[ctx->nsc].sa = sa;
  -                /*FIXME sa_destroy(sa); */
                   ctx->ns[ctx->nsc].nntp = NULL;
                   ctx->nsc++;
                   break;
  @@ -299,25 +304,43 @@
           fprintf(stderr, "%s:Error: Unable to initialize LMTP library\n", progname);
           exit(ERR_EXECUTION);
       }
  +    /*  RFC0821, 4.5.1. MINIMUM IMPLEMENTATION
  +     *  In order to make SMTP workable, the following minimum implementation
  +     *  is required for all receivers: [...]
  +     *  RFC0821, 4.1.2. COMMAND SYNTAX
  +     *  
  +     *  Verb Parameter
  +     *  ----+-------------------------------
  +     *  HELO <SP> <domain> <CRLF>
  +     *  MAIL <SP> FROM:<reverse-path> <CRLF>
  +     *  RCPT <SP> TO:<forward-path> <CRLF>
  +     *  DATA <CRLF>
  +     *  RSET <CRLF>
  +     *  NOOP <CRLF>
  +     *  QUIT <CRLF>
  +     */
       lmtp_register(lmtp, "LHLO", lmtp_cb_lhlo, ctx, NULL, NULL); 
       lmtp_register(lmtp, "MAIL", lmtp_cb_mail, ctx, NULL, NULL);
       lmtp_register(lmtp, "RCPT", lmtp_cb_rcpt, ctx, NULL, NULL);
       lmtp_register(lmtp, "DATA", lmtp_cb_data, ctx, NULL, NULL);
  -    lmtp_register(lmtp, "NOOP", lmtp_cb_noop, ctx, NULL, NULL);
       lmtp_register(lmtp, "RSET", lmtp_cb_rset, ctx, NULL, NULL);
  +    lmtp_register(lmtp, "NOOP", lmtp_cb_noop, ctx, NULL, NULL);
       lmtp_register(lmtp, "QUIT", lmtp_cb_quit, ctx, NULL, NULL);
       
       /* loop for LMTP protocol */
       lmtp_loop(lmtp);
   
  +    /* graceful shutdown */
  +    lmtp_gfs_quit(ctx);
  +    lmtp_gfs_lhlo(ctx);
  +
       return rc;
   }
   
   static void resetsession(struct session *session)
   {
  -                                             /*FIXME what about non-graceful aborts? */
       if (session->lhlo_domain != NULL)
  -        free(session->lhlo_domain);         
  +        free(session->lhlo_domain);
       initsession(session);
       return;
   }
  @@ -332,7 +355,7 @@
   static lmtp_rc_t lmtp_cb_lhlo(lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *_ctx)
   {
       /*  
  -     *  RFC821 [excerpt] 4.1. SMTP COMMANDS
  +     *  RFC0821 [excerpt] 4.1. SMTP COMMANDS
        *  4.1.1.  COMMAND SEMANTICS, HELO
        *  This command and an OK reply to it confirm that both the sender-SMTP
        *  and the receiver-SMTP are in the initial state, that is, there is no
  @@ -363,6 +386,10 @@
       nntp_io.read   = trace_read;
       nntp_io.write  = trace_write;
   
  +    /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   503 Bad sequence of commands
  +     *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
  +     *  RFC1893 3.5 Network and Routing Status          X.0.0   Other undefined Status
  +     */
       if (ctx->session.lhlo_seen == TRUE) {
           res.statuscode = "503";
           res.dsncode    = "5.0.0";
  @@ -371,9 +398,12 @@
           return LMTP_OK;
       }
   
  +    /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   501 Syntax error in parameters or arguments
  +     *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
  +     *  RFC1893 3.5 Network and Routing Status          X.0.0   Other undefined Status
  +     */
       if (! (   helo_rfc0821domain(req->msg, &ctx->session.lhlo_domain)
  -           || helo_rfc1035domain(req->msg, &ctx->session.lhlo_domain)
  -             )) {
  +           || helo_rfc1035domain(req->msg, &ctx->session.lhlo_domain))) {
           res.statuscode = "501";
           res.dsncode    = "5.0.0";
           res.statusmsg  = "Please identify yourself. Domain must match RFC0821/RFC1035.";
  @@ -381,10 +411,14 @@
           return LMTP_OK;
       }
   
  +    /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   451 Requested action aborted: local error in processing
  +     *  RFC1893 2. Status Codes                         4.X.X   Persistent Transient Failure
  +     *  RFC1893 3.5 Network and Routing Status          X.3.5   System incorrectly configured
  +     */
       if (ctx->nsc == 0) {
  -        res.statuscode = "501";
  -        res.dsncode    = "5.0.0";
  -        res.statusmsg  = "No valid NNTP Services specified.";
  +        res.statuscode = "451";
  +        res.dsncode    = "4.3.5";
  +        res.statusmsg  = "No valid NNTP services configured.";
           lmtp_response(lmtp, &res);
           return LMTP_OK;
       }
  @@ -414,38 +448,56 @@
           }
       } while (i < ctx->nsc);
   
  -    /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS
  -     *  "421 <domain> Service not available, closing transmission channel [This
  -     *  may be a reply to any command if the service knows it must shut down]"
  -     *  
  -     *  RFC1893 2. Status Codes, 3.5 Network and Routing Status
  -     *  4.X.X   Persistent Transient Failure
  -     *  X.4.1   No answer from host
  +    /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   421 <domain> Service not available
  +     *  RFC1893 2. Status Codes                         4.X.X   Persistent Transient Failure
  +     *  RFC1893 3.5 Network and Routing Status          X.4.1   No answer from host
        */
       if (ctx->nsc == 0) {
           res.statuscode = "421";
           res.dsncode    = "4.4.1";
  -        res.statusmsg  = "No connection to any NNTP Service."; /*FIXME add error strings from above DEBUGs */
  +        res.statusmsg  = "All attempts connecting to NNTP services failed.";
           lmtp_response(lmtp, &res);
           return LMTP_OK;
       }
           
       ctx->session.lhlo_seen = TRUE;
  +
  +    /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   250 Requested mail action okay, completed
  +     */
       str_format(str, sizeof(str),
  -               "FIXME.dev.de.cw.net"   /* RFC2821 4.1.1.1 */
  -               " Hello %s, pleased to meet you.\n"
  -               "ENHANCEDSTATUSCODES\n" /* RFC2034 */
  -               "DSN\n"                 /* RFC1894 */
  -               "PIPELINING\n"          /* RFC1854 */
  -               "8BITMIME",             /* RFC1652 */
  +               "%s Hello %s, pleased to meet you.\n" /* RFC2821 4.1.1.1 */
  +               "ENHANCEDSTATUSCODES\n"               /* RFC2034 */
  +               "DSN\n"                               /* RFC1894 */
  +               "PIPELINING\n"                        /* RFC1854 */
  +               "8BITMIME",                           /* RFC1652 */
  +               ctx->uname.nodename,
                  ctx->session.lhlo_domain);
       res.statuscode = "250";
  -    res.dsncode    = NULL;             /* DSN not used for greeting */
  +    res.dsncode    = NULL; /* DSN not used for greeting */
       res.statusmsg  = str;
       lmtp_response(lmtp, &res);
       return LMTP_OK;
   }
   
  +static void lmtp_gfs_lhlo(lmtp2nntp_t *ctx)
  +{
  +    /* graceful shutdown */
  +    int i;
  +
  +    for (i = 0; i < ctx->nsc; i++) {
  +        if (ctx->ns[i].nntp != NULL)
  +            nntp_destroy(ctx->ns[i].nntp);
  +        if (ctx->ns[i].s != -1)
  +            close(ctx->ns[i].s);
  +        if (ctx->ns[i].sa != NULL)
  +            sa_destroy(ctx->ns[ctx->nsc].sa);
  +        if (ctx->ns[i].p != NULL)
  +            free(ctx->ns[i].p);
  +        if (ctx->ns[i].h != NULL)
  +            free(ctx->ns[i].h);
  +    }
  +}
  +
   static int helo_rfc0821domain(char *msg, char **domain)
   {
       int rc;
  @@ -460,7 +512,7 @@
        ##  linear grammar, but noth both).
        ##
       
  -     # BNF grammar for <domain> according to RFC 821:
  +     # BNF grammar for <domain> according to RFC0821:
        # <snum>        ::= one, two, or three digits representing a decimal integer value in the range 0 through 255
        # <a>           ::= any one of the 52 alphabetic characters A through Z in upper case and a through z in lower case
        # <d>           ::= any one of the ten digits 0 through 9
  @@ -489,11 +541,12 @@
        # translate into C string block suitable for passing to the Perl
        # Compatible Regular Expressions (PCRE) based string library Str.
        my $cregex = $domain;
  +     $cregex .= "\n";
        $cregex =~ s|\\|\\\\|sg;
  -     $cregex =~ s|(.{70})|"$1"\n|sg;
  -     $cregex =~ s|\n([^\n]+)$|\n"$1"|s; #FIXME this fails when last
  -                                        #FIXME line matches linelength exacly
  -     print "$cregex\n";
  +     $cregex =~ s|(.{17})|$1\n|sg;
  +     $cregex =~ s|([^\n]+)\n|"$1"\n|sg;
  +     $cregex =~ s|\n\n|\n|sg;
  +     print "$cregex";
        */
   
       "(?:(?:[A-Za-z](?:[A-Za-z]|[0-9]|-)+(?:[A-Za-z]|[0-9])|#[0-9]+|\\[(?:[0"
  @@ -547,11 +600,12 @@
        # translate into C string block suitable for passing to the Perl
        # Compatible Regular Expressions (PCRE) based string library Str.
        my $cregex = $domain;
  +     $cregex .= "\n";
        $cregex =~ s|\\|\\\\|sg;
  -     $cregex =~ s|(.{70})|"$1"\n|sg;
  -     $cregex =~ s|\n([^\n]+)$|\n"$1"|s; #FIXME this fails when last
  -                                        #FIXME line matches linelength exacly
  -     print "$cregex\n";
  +     $cregex =~ s|(.{17})|$1\n|sg;
  +     $cregex =~ s|([^\n]+)\n|"$1"\n|sg;
  +     $cregex =~ s|\n\n|\n|sg;
  +     print "$cregex";
        */
   
       "(?:(?:(?:[A-Za-z](?:(?:(?:(?:[A-Za-z]|[0-9])|-)+)?(?:[A-Za-z]|[0-9]))?"
  @@ -567,6 +621,10 @@
       lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx;
       lmtp_res_t res;
   
  +    /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   553 Requested action not taken: mailbox name not allowed
  +     *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
  +     *  RFC1893 3.5 Network and Routing Status          X.1.8   Bad sender's system address
  +     */
       if (ctx->session.lhlo_seen != TRUE) {
           res.statuscode = "553";
           res.dsncode    = "5.1.8";
  @@ -575,6 +633,10 @@
           return LMTP_OK;
       }
   
  +    /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   503 Bad sequence of commands
  +     *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
  +     *  RFC1893 3.5 Network and Routing Status          X.5.0   Other or undefined protocol status
  +     */
       if (ctx->msg != NULL) {
           res.statuscode = "503";
           res.dsncode    = "5.5.0";
  @@ -583,36 +645,48 @@
           return LMTP_OK;
       }
   
  +    /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   452 Requested action not taken: insufficient system storage
  +     *  RFC1893 2. Status Codes                         4.X.X   Persistent Transient Failure
  +     *  RFC1893 3.5 Network and Routing Status          X.3.1   Mail system full 
  +     */
       if ((ctx->msg = msg_create()) == NULL) {
  -        res.statuscode = "503"; /* FIXME */
  -        res.dsncode    = "5.5.0";
  +        res.statuscode = "452";
  +        res.dsncode    = "4.3.1";
           res.statusmsg  = "Internal error - memory.";
           lmtp_response(lmtp, &res);
           return LMTP_ERR_MEM;
       }
   
  -    /* RFC1652 2. Framework for the 8bit MIME Transport Extension
  -     * (4)  one optional parameter using the keyword BODY is added to the MAIL
  -     * FROM command.  The value associated with this parameter is a keyword
  -     * indicating whether a 7bit message [...] or a MIME message [...] is
  -     * being sent. The syntax of the value is as follows, using the ABNF
  -     * notation [...]
  -     *
  -     * body-value ::= "7BIT" / "8BITMIME"
  -     *
  -     * "MAIL From:<foo@bar>"
  -     * "MAIL From:<foo@bar> BODY=8BITMIME"
  -     * "MAIL From:<foo@bar> BODY=7BIT"
  +    /*  RFC1652 2. Framework for the 8bit MIME Transport Extension
  +     *  (4)  one optional parameter using the keyword BODY is added to the MAIL
  +     *  FROM command.  The value associated with this parameter is a keyword
  +     *  indicating whether a 7bit message [...] or a MIME message [...] is
  +     *  being sent. The syntax of the value is as follows, using the ABNF
  +     *  notation [...]
  +     *  
  +     *  body-value ::= "7BIT" / "8BITMIME"
  +     *  
  +     *  "MAIL From:<foo@bar>"
  +     *  "MAIL From:<foo@bar> BODY=8BITMIME"
  +     *  "MAIL From:<foo@bar> BODY=7BIT"
  +     *  
  +     *  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   553 Requested action not taken: mailbox name not allowed
  +     *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
  +     *  RFC1893 3.5 Network and Routing Status          X.1.7   Bad sender's mailbox address syntax
        */
       if (!str_parse(req->msg, "m/^MAIL From:\\s*<(?:.+@.+)>/i")) {
           res.statuscode = "553";
  -        res.dsncode    = "5.5.4";
  +        res.dsncode    = "5.1.7";
           res.statusmsg  = "Domain name required for sender address.";
           lmtp_response(lmtp, &res);
           msg_destroy(ctx->msg);
           ctx->msg = NULL;
           return LMTP_OK;
       }
  +    /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   501 Syntax error in parameters or arguments
  +     *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
  +     *  RFC1893 3.5 Network and Routing Status          X.5.4   Invalid command arguments
  +     */
       if (!str_parse(req->msg, "m/^MAIL From:\\s*<(.+@.+)>"
                                "(?:\\s+BODY=(?:7BIT|8BITMIME)\\s*){0,1}$/i", 
                                &ctx->msg->mail_from)) {
  @@ -625,6 +699,10 @@
           return LMTP_OK;
       }
       
  +    /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   250 Requested mail action okay, completed
  +     *  RFC1893 2. Status Codes                         2.X.X   Success
  +     *  RFC1893 3.5 Network and Routing Status          X.1.0   Other address status
  +     */
       res.statuscode = "250";
       res.dsncode    = "2.1.0";
       res.statusmsg  = "Sender ok.";
  @@ -639,16 +717,23 @@
       char *cp;
       char *group;
   
  +    /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   503 Bad sequence of commands
  +     *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
  +     *  RFC1893 3.5 Network and Routing Status          X.5.0   Other or undefined protocol status
  +     */
       if (ctx->msg->mail_from == NULL) {
           res.statuscode = "503";
  -        res.dsncode    = "5.0.0";
  +        res.dsncode    = "5.5.0";
           res.statusmsg  = "specify sender with MAIL first.";
           lmtp_response(lmtp, &res);
           return LMTP_OK;
       }
   
  +    /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   501 Syntax error in parameters or arguments
  +     *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
  +     *  RFC1893 3.5 Network and Routing Status          X.5.2   Syntax error
  +     */
       if (!str_parse(req->msg, "m/^RCPT To:\\s*(.+)$/i", &cp)) {
  -        /*FIXME                          ^^^^ is this space required/ valid? Sendmail skips them! */
           res.statuscode = "501";
           res.dsncode    = "5.5.2";
           res.statusmsg  = "Syntax error in parameters.";
  @@ -656,6 +741,10 @@
           return LMTP_OK;
       }
       
  +    /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   550 Requested action not taken: mailbox unavailable
  +     *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
  +     *  RFC1893 3.5 Network and Routing Status          X.1.1   Bad destination mailbox address
  +     */
       if ((cp == NULL) || (strlen(cp) == 0)) {
           res.statuscode = "550";
           res.dsncode    = "5.1.1";
  @@ -664,61 +753,87 @@
           return LMTP_OK;
       }
   
  -    /* FIXME
  -     * in GROUPMODE = ARG|HEADER recipient must be acknowledged and stored to
  +    /* in GROUPMODE = ARG|HEADER recipient must be acknowledged and stored to
        * give proper pipelining responses.  in GROUPMODE = ENVELOPE recipient is
        * transformed into a group and matched against groupfilter. Only valid
        * groups are stored to give proper pipelining responses.
  +     *
  +     *  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   550 Requested action not taken: mailbox unavailable
  +     *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
  +     *  RFC1893 3.5 Network and Routing Status          X.1.1   Bad destination mailbox address
  +     *                                                  X.7.2   Mailing list expansion prohibited
        */
  -
       if (ctx->option_groupmode == GROUPMODE_ENVELOPE) {
  -        /*fprintf(stderr, "DEBUG: before transform cp=***%s***\n", cp); */
           if (!str_parse(cp, "m/^<(.+)?@[^@]+>$/i", &group)) {
               res.statuscode = "550";
               res.dsncode    = "5.1.1";
  -            res.statusmsg  = "Recipient did not transform into Group.";
  +            res.statusmsg  = "Recipient did not transform into group.";
               lmtp_response(lmtp, &res);
               return LMTP_OK;
           }
  -        /*fprintf(stderr, "DEBUG: after  transform group=***%s***\n", group); */
  -        /*FIXME do additional transform and checking */
  -        if (0) {
  +        if (groupmatch(ctx->azGroupargs, ctx->asGroupargs, group) != TRUE) {
               res.statuscode = "550";
  -            res.dsncode    = "5.1.1";
  +            res.dsncode    = "5.7.2";
               res.statusmsg  = "unmatched Group.";
               lmtp_response(lmtp, &res);
               return LMTP_OK;
           }
           argz_add(&ctx->msg->azEnvgroups, &ctx->msg->asEnvgroups, group);
       }
  -    
  -    /*fprintf(stderr, "DEBUG: cp=***%s***\n", cp); */
       argz_add(&ctx->msg->azRcpt, &ctx->msg->asRcpt, cp);
  +
  +    /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   250 Requested mail action okay, completed
  +     *  RFC1893 2. Status Codes                         2.X.X   Success
  +     *  RFC1893 3.5 Network and Routing Status          X.1.5   Destination address valid
  +     */
       res.statuscode = "250";
       res.dsncode    = "2.1.5";
  -    res.statusmsg  = "Recipient/ Group accepted";
  +    res.statusmsg  = ctx->option_groupmode == GROUPMODE_ENVELOPE ? "Group accepted." : "Recipient accepted.";
       lmtp_response(lmtp, &res);
       return LMTP_OK;
   }
   
  +int groupmatch(char *azPattern, size_t asPattern, char *cpGroup)
  +{
  +    int bGroupmatch;
  +    char *cpGroupmatch;
  +
  +    bGroupmatch = FALSE;
  +    cpGroupmatch = NULL;
  +    while ((cpGroupmatch = argz_next(azPattern, asPattern, cpGroupmatch)) != NULL) {
  +        if (shpat_match(cpGroupmatch, cpGroup, 0) == 0)
  +            bGroupmatch = TRUE;
  +    }
  +    return bGroupmatch;
  +}
  +
   static lmtp_rc_t lmtp_cb_data(lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *_ctx)
   {
       lmtp_res_t res;
       lmtp_rc_t rc = LMTP_OK;
       lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx;
  +    char   *azErr;
  +    size_t  asErr;
       char errorstring[STDSTRLEN];
       char *rcpt;
       int i;
       int bSuccess;
  +    char *cp;
   
  +    /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   503 Bad sequence of commands
  +     *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
  +     *  RFC1893 3.5 Network and Routing Status          X.5.0   Other or undefined protocol status
  +     */
       if (argz_count(ctx->msg->azRcpt, ctx->msg->asRcpt) == 0) {
           res.statuscode = "503";
  -        res.dsncode    = "5.0.0";
  +        res.dsncode    = "5.5.0";
           res.statusmsg  = "specify recipient with RCPT first.";
           lmtp_response(lmtp, &res);
           return LMTP_OK;
       }
   
  +    /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   354 Start mail input; end with <CRLF>.<CRLF>
  +     */
       res.statuscode = "354";
       res.dsncode    = NULL; /* DSN not used for data */
       res.statusmsg  = "Enter mail, end with \".\" on a line by itself";
  @@ -726,11 +841,15 @@
   
       rc = lmtp_readmsg(lmtp, &ctx->msg->cpMsg, MESSAGE_MAXLEN);
   
  +    /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   552 Requested mail action aborted: exceeded storage allocation
  +     *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
  +     *  RFC1893 3.5 Network and Routing Status          X.3.4   Message too big for system
  +     */
       if (rc == LMTP_ERR_OVERFLOW) {
           str_format(errorstring, sizeof(errorstring), "Overflow reading message: %s", lmtp_error(rc));
  -        res.statuscode = "500";
  -        res.dsncode    = "5.0.0";
  -        res.statusmsg  = errorstring; /*FIXME temp or perm error? */
  +        res.statuscode = "552";
  +        res.dsncode    = "5.3.4";
  +        res.statusmsg  = errorstring;
           rcpt = NULL;
           while ((rcpt = argz_next(ctx->msg->azRcpt, ctx->msg->asRcpt, rcpt)) != NULL) {
               lmtp_response(lmtp, &res);
  @@ -738,10 +857,14 @@
           return LMTP_OK;
       }
   
  +    /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   451 Requested action aborted: local error in processing
  +     *  RFC1893 2. Status Codes                         4.X.X   Persistent Transient Failure
  +     *  RFC1893 3.5 Network and Routing Status          X.3.2   System not accepting network messages
  +     */
       if (rc == LMTP_ERR_SYSTEM) {
           str_format(errorstring, sizeof(errorstring), "System error reading message: %s", strerror(errno));
  -        res.statuscode = "500";
  -        res.dsncode    = "5.0.0";
  +        res.statuscode = "451";
  +        res.dsncode    = "4.3.2";
           res.statusmsg  = errorstring;
           rcpt = NULL;
           while ((rcpt = argz_next(ctx->msg->azRcpt, ctx->msg->asRcpt, rcpt)) != NULL) {
  @@ -750,10 +873,14 @@
           return LMTP_OK;
       }
   
  +    /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   451 Requested action aborted: local error in processing
  +     *  RFC1893 2. Status Codes                         4.X.X   Persistent Transient Failure
  +     *  RFC1893 3.5 Network and Routing Status          X.3.2   System not accepting network messages
  +     */
       if(rc != LMTP_OK) {
           str_format(errorstring, sizeof(errorstring), "Unknown error reading message: %s", lmtp_error(rc));
  -        res.statuscode = "500";
  -        res.dsncode    = "5.0.0";
  +        res.statuscode = "451";
  +        res.dsncode    = "4.3.2";
           res.statusmsg  = errorstring;
           rcpt = NULL;
           while ((rcpt = argz_next(ctx->msg->azRcpt, ctx->msg->asRcpt, rcpt)) != NULL) {
  @@ -762,11 +889,14 @@
           return LMTP_OK;
       }
   
  -    /*fprintf(stderr, "DEBUG: before msg_split\n"); */
  +    /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   554 Transaction failed
  +     *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
  +     *  RFC1893 3.5 Network and Routing Status          X.6.5   Conversion Failed
  +     */
       if ((rc = msg_split(ctx->msg)) != MSG_OK) {
           str_format(errorstring, sizeof(errorstring), "Error splitting message: %s", msg_error(rc));
  -        res.statuscode = "500";
  -        res.dsncode    = "5.0.0";
  +        res.statuscode = "554";
  +        res.dsncode    = "5.6.5";
           res.statusmsg  = errorstring;
           rcpt = NULL;
           while ((rcpt = argz_next(ctx->msg->azRcpt, ctx->msg->asRcpt, rcpt)) != NULL) {
  @@ -774,30 +904,86 @@
           }
           return LMTP_OK;
       }
  -    /*fprintf(stderr, "DEBUG: after msg_split\n"); */
   
       if      (ctx->option_groupmode == GROUPMODE_ENVELOPE) {
  -        ctx->msg->azNewsgroups = memcpy(malloc(ctx->msg->asEnvgroups + 1), ctx->msg->azEnvgroups, ctx->msg->asEnvgroups); /*FIXME strdup == NULL */
  -        ctx->msg->asNewsgroups =        ctx->msg->asEnvgroups;
  +        if ((cp = malloc(ctx->msg->asEnvgroups + 1)) == NULL) {
  +            /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   452 Requested action not taken: insufficient system storage
  +             *  RFC1893 2. Status Codes                         4.X.X   Persistent Transient Failure
  +             *  RFC1893 3.5 Network and Routing Status          X.3.1   Mail system full 
  +             */
  +            if ((ctx->msg = msg_create()) == NULL) {
  +                res.statuscode = "452";
  +                res.dsncode    = "4.3.1";
  +                res.statusmsg  = "Internal error - memory.";
  +                lmtp_response(lmtp, &res);
  +                return LMTP_ERR_MEM;
  +            }
  +        }
  +        ctx->msg->azNewsgroups = memcpy(cp, ctx->msg->azEnvgroups, ctx->msg->asEnvgroups);
  +        ctx->msg->asNewsgroups =                                   ctx->msg->asEnvgroups;
       }
       else if (ctx->option_groupmode == GROUPMODE_ARG) {
  -        ctx->msg->azNewsgroups = memcpy(malloc(ctx->asGroupargs + 1),      ctx->azGroupargs,      ctx->asGroupargs);      /*FIXME strdup == NULL */
  -        ctx->msg->asNewsgroups =        ctx->asGroupargs;
  +        if ((cp = malloc(ctx->asGroupargs + 1)) == NULL) {
  +            /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   452 Requested action not taken: insufficient system storage
  +             *  RFC1893 2. Status Codes                         4.X.X   Persistent Transient Failure
  +             *  RFC1893 3.5 Network and Routing Status          X.3.1   Mail system full 
  +             */
  +            if ((ctx->msg = msg_create()) == NULL) {
  +                res.statuscode = "452";
  +                res.dsncode    = "4.3.1";
  +                res.statusmsg  = "Internal error - memory.";
  +                lmtp_response(lmtp, &res);
  +                return LMTP_ERR_MEM;
  +            }
  +        }
  +        ctx->msg->azNewsgroups = memcpy(cp, ctx->azGroupargs, ctx->asGroupargs);
  +        ctx->msg->asNewsgroups =                              ctx->asGroupargs;
  +    }
  +    else { /*                      == GROUPMODE_HEADER */
  +        cp = ctx->msg->azNewsgroups;
  +        while (cp != NULL) {
  +            if (groupmatch(ctx->azGroupargs, ctx->asGroupargs, cp) != TRUE) {
  +                if (argz_next(ctx->msg->azNewsgroups, ctx->msg->asNewsgroups, cp) == NULL) {
  +                    argz_delete(&ctx->msg->azNewsgroups, &ctx->msg->asNewsgroups, cp);
  +                    break;
  +                }
  +                else
  +                    argz_delete(&ctx->msg->azNewsgroups, &ctx->msg->asNewsgroups, cp);
  +            } else {
  +                cp = argz_next(ctx->msg->azNewsgroups, ctx->msg->asNewsgroups, cp);
  +            }
  +        }
  +        /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   550 Requested action not taken: mailbox unavailable
  +         *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
  +         *  RFC1893 3.5 Network and Routing Status          X.7.2   Mailing list expansion prohibited
  +         */
  +        if (ctx->msg->asNewsgroups == 0) {
  +            rcpt = NULL;
  +            while ((rcpt = argz_next(ctx->msg->azRcpt, ctx->msg->asRcpt, rcpt)) != NULL) {
  +                res.statuscode = "550";
  +                res.dsncode    = "5.7.2";
  +                res.statusmsg  = "Header did not match any valid group.";
  +                lmtp_response(lmtp, &res);
  +            }
  +            return LMTP_OK;
  +        }
       }
  -    /* else keep                   == GROUPMODE_HEADERS */
   
  -#if 0 /*FIXME debug paragraph */
  +#if 0 /*DEBUG and LOGGING paragraph */
       rcpt = NULL;
       while ((rcpt = argz_next(ctx->msg->azNewsgroups, ctx->msg->asNewsgroups, rcpt)) != NULL) {
           fprintf(stderr, "DEBUG: commited group ***%s***\n", rcpt);
       }
   #endif
   
  -    /*fprintf(stderr, "DEBUG: before msg_join\n"); */
  +    /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   554 Transaction failed
  +     *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
  +     *  RFC1893 3.5 Network and Routing Status          X.6.5   Conversion Failed
  +     */
       if ((rc = msg_join(ctx->msg)) != MSG_OK) {
           str_format(errorstring, sizeof(errorstring), "Error joining message: %s", msg_error(rc));
  -        res.statuscode = "500";
  -        res.dsncode    = "5.0.0";
  +        res.statuscode = "554";
  +        res.dsncode    = "5.6.5";
           res.statusmsg  = errorstring;
           rcpt = NULL;
           while ((rcpt = argz_next(ctx->msg->azRcpt, ctx->msg->asRcpt, rcpt)) != NULL) {
  @@ -814,67 +1000,83 @@
               case DELIVERYMODE_FAKE:
                   break;
               case DELIVERYMODE_POST:
  -                rc = nntp_post(ctx->ns[i].nntp, ctx->msg);
  +                ctx->ns[i].rc = nntp_post(ctx->ns[i].nntp, ctx->msg);
                   break;
               case DELIVERYMODE_FEED:
  -                rc = nntp_feed(ctx->ns[i].nntp, ctx->msg);
  +                ctx->ns[i].rc = nntp_feed(ctx->ns[i].nntp, ctx->msg);
                   break;
           }
  -        if (rc == NNTP_OK)
  +        if (ctx->ns[i].rc == NNTP_OK)
               bSuccess = NNTP_OK;
           if (   bSuccess != NNTP_OK
               && (
  -                   (rc == NNTP_TIMEOUT)
  -                || (rc == NNTP_ERR_SYSTEM)
  -                || (rc == NNTP_DEFER)
  +                   (ctx->ns[i].rc == NNTP_TIMEOUT)
  +                || (ctx->ns[i].rc == NNTP_ERR_SYSTEM)
  +                || (ctx->ns[i].rc == NNTP_DEFER)
                     )
                 )
               bSuccess = NNTP_DEFER;
       }
  -    /*FIXME rc has only last error */
   
  -    /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS
  -     *  "250 Requested mail action okay, completed"
  -     *  "451 Requested action aborted: local error in processing"
  -     *  "554 Transaction failed"
  -     *  
  -     *  RFC1893 2. Status Codes
  -     *  2.X.X   Success
  -     *  4.X.X   Persistent Transient Failure
  -     *  5.X.X   Permanent Failure
  -     *  
  -     *  RFC1893 3.5 Network and Routing Status
  -     *  X.0.0   Other undefined Status
  -     *  X.4.2   Bad connection
  +    /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   250 Requested mail action okay, completed
  +     *                                                  451 Requested action aborted: local error in processing
  +     *                                                  554 Transaction failed
  +     *  RFC1893 2. Status Codes                         2.X.X   Success
  +     *                                                  4.X.X   Persistent Transient Failure
  +     *                                                  5.X.X   Permanent Failure
  +     *  RFC1893 3.5 Network and Routing Status          X.0.0   Other undefined Status
  +     *                                                  X.4.2   Bad connection
        */
       rcpt = NULL;
       while ((rcpt = argz_next(ctx->msg->azRcpt, ctx->msg->asRcpt, rcpt)) != NULL) {
           if (ctx->option_deliverymode == DELIVERYMODE_FAKE) {
                       res.statuscode = ctx->option_deliverymodefakestatus;
                       res.dsncode    = ctx->option_deliverymodefakedsn;
  -                    res.statusmsg  = "NNTP noop fake return";
  +                    str_format(errorstring, sizeof(errorstring),
  +                               "NNTP noop fake return for %s", rcpt);
           } else {
               switch (bSuccess) {
                   case NNTP_OK:
  -                    str_format(errorstring, sizeof(errorstring), "Message accepted for delivery to %s", rcpt);
  +                    str_format(errorstring, sizeof(errorstring),
  +                               "Message accepted for delivery to %s", rcpt);
                       res.statuscode = "250";
                       res.dsncode    = "2.0.0";
  -                    res.statusmsg  = errorstring;
                       break;
                   case NNTP_DEFER:
  +                    str_format(errorstring, sizeof(errorstring),
  +                               "Requested action aborted for %s, local error in processing.", rcpt);
                       res.statuscode = "451";
                       res.dsncode    = "4.4.2";
  -                    res.statusmsg  = "Requested action aborted, local error in processing.";
  -                    lmtp_response(lmtp, &res);
                       break;
                   default:
  -                    str_format(errorstring, sizeof(errorstring), "Last error posting message: %s", nntp_error(rc));
  +                    str_format(errorstring, sizeof(errorstring),
  +                               "Error sending article for %s.", rcpt);
                       res.statuscode = "554";
                       res.dsncode    = "5.4.2";
  -                    res.statusmsg  = errorstring;
  +                    break;
               }
           }
  -        lmtp_response(lmtp, &res);
  +        azErr = NULL;
  +        asErr = 0;
  +        argz_add(&azErr, &asErr, errorstring);
  +        for (i = 0; i < ctx->nsc; i++) {
  +            if (ctx->ns[i].rc != NNTP_OK) {
  +                str_format(errorstring, sizeof(errorstring), "%s:%s returned %s", ctx->ns[i].h, ctx->ns[i].p, nntp_error(ctx->ns[i].rc));
  +                argz_add(&azErr, &asErr, errorstring);
  +            }
  +        }
  +        if (azErr != NULL) {
  +            argz_stringify(azErr, asErr, '\n');
  +            res.statusmsg  = azErr;
  +            lmtp_response(lmtp, &res);
  +            free(azErr);
  +            azErr = NULL;
  +            asErr = 0;
  +        }
  +        else {
  +            res.statusmsg  = errorstring;
  +            lmtp_response(lmtp, &res);
  +        }
       }
   
       msg_destroy(ctx->msg);
  @@ -888,6 +1090,10 @@
       lmtp_res_t res;
       lmtp_rc_t rc = LMTP_OK;
   
  +    /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   250 Requested mail action okay, completed
  +     *  RFC1893 2. Status Codes                         2.X.X   Success
  +     *  RFC1893 3.5 Network and Routing Status          X.0.0   Other undefined Status
  +     */
       res.statuscode = "250";
       res.dsncode    = "2.0.0";
       res.statusmsg  = "OK. Nice talking to you.";
  @@ -901,9 +1107,12 @@
       lmtp_res_t res;
       lmtp_rc_t rc = LMTP_OK;
   
  -    msg_destroy(ctx->msg);
  -    ctx->msg = NULL;
  +    lmtp_gfs_rset(ctx);
   
  +    /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   250 Requested mail action okay, completed
  +     *  RFC1893 2. Status Codes                         2.X.X   Success
  +     *  RFC1893 3.5 Network and Routing Status          X.0.0   Other undefined Status
  +     */
       res.statuscode = "250";
       res.dsncode    = "2.0.0";
       res.statusmsg  = "Reset state.";
  @@ -911,16 +1120,27 @@
       return rc;
   }
   
  +static void lmtp_gfs_rset(lmtp2nntp_t *ctx)
  +{
  +    /* graceful shutdown */
  +    if (ctx->msg != NULL) {
  +        msg_destroy(ctx->msg);
  +        ctx->msg = NULL;
  +    }
  +}
  +
   static lmtp_rc_t lmtp_cb_quit(lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *_ctx)
   {
       lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx;
       lmtp_res_t res;
       lmtp_rc_t rc = LMTP_EOF;
   
  -    msg_destroy(ctx->msg);
  -    ctx->msg = NULL;
  +    lmtp_gfs_quit(ctx);
   
  -    resetsession(&ctx->session);
  +    /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   221 <domain> Service closing transmission channel
  +     *  RFC1893 2. Status Codes                         2.X.X   Success
  +     *  RFC1893 3.5 Network and Routing Status          X.0.0   Other undefined Status
  +     */
       res.statuscode = "221";
       res.dsncode    = "2.0.0";
       res.statusmsg  = "LMTP Service closing transmission channel.";
  @@ -928,3 +1148,9 @@
       return rc;
   }
   
  +static void lmtp_gfs_quit(lmtp2nntp_t *ctx)
  +{
  +    /* graceful shutdown */
  +    lmtp_gfs_rset(ctx);
  +    resetsession(&ctx->session);
  +}

From ossp-cvs-owner@ossp.org  Thu Aug 23 09:57:10 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7N7v9F25987; Thu, 23 Aug 2001 09:57:09 +0200 (CEST)
Date: Thu, 23 Aug 2001 09:57:09 +0200 (CEST)
Message-Id: <200108230757.f7N7v9F25987@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   23-Aug-2001 09:57:09
  Branch: HEAD                             Handle: 2001082308570800

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO

  Log:
    pushed down and updated 00TODO including relocation of pertinent informatin directly into source

  Summary:
    Revision    Changes     Path
    1.14        +8  -82     ossp-pkg/lmtp2nntp/00TODO
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	2001/08/20 14:11:30	1.13
  +++ ossp-pkg/lmtp2nntp/00TODO	2001/08/23 07:57:08	1.14
  @@ -1,108 +1,34 @@
   
  -test auf mail.de.cw.net
   whatsup draufleiten
  -----------
   dmalloc
  -
   FIXMEs
  -//
   DEBUGs
   RFC1891 ENVID
   RFC1891 6.2
   FALSE, TRUE vs. == FALSE, == TRUE, != FALSE, != TRUE
  --h needs to understand multiple hosts as commaseparated list
  +-h needs to understand multiple hosts as comma separated list
  +NUL statt '\0'
  +ID logging problem
  +
  +lmtp_response segfaults when a physical line ('\n' terminated) of the logical
  +line input exceeds LMTP_LINE_MAXLEN.
   
       **** LMTP REDESIGN ****
   
   RESULT:
   - robust checking and handling of NNTP protocol errors
  -	- logging into a single file -> write(2) !fwrite(3)
  +- logging into a single file -> write(2) !fwrite(3), (optional) syslog
   - invoked as mailer using LMTP, providing useful return status
   - invoked as command line (lowpri)
   - queuing is not supported for command line and a client issue for LMTP
   - remove To: and Cc: headers
   - allow crosspostings only through command line
   - new manpage
  -	- (optional) syslog
  -- command line choice for sending "exactly once" or "at least once" (default)
  -
  -   **** SMTP ENGINE ****
  -
  -[RFC821, 4.5.1. MINIMUM IMPLEMENTATION]
  -In order to make SMTP workable, the following minimum implementation is required for all receivers:
  -[RFC821, 4.1.2. COMMAND SYNTAX]
  -
  -Verb Parameter                         Buffer
  -----+---------------------------------+-------------------
  -HELO <SP> <domain> <CRLF>
  -MAIL <SP> FROM:<reverse-path> <CRLF>   (char *)sender
  -RCPT <SP> TO:<forward-path> <CRLF>     (char **)recipients
  -DATA <CRLF>                            (char *)message
  -RSET <CRLF>
  -NOOP <CRLF>
  -QUIT <CRLF>
  -
  -
  -rfc822 header parsing from petidomo
  -
  -o posting@news.de.cw.net
  -  Newsgroup: cw.alert
  -
  -o posting+cw.alert@news.de.cw.net
  -
  -o cw.alert@news.de.cw.net
  -  cw.alert: "|lmtp2nntp ..."
   
  -o cw.alert@news.de.cw.net
  -  cw.alert: "|lmtp2nntp ... -d cw.alert"
  +    **** DEVELOPMENT INFORMATION ****
   
  -ID logging problem
  -
   news-muc1.de.cw.net Feeder
   news-ffm2.de.cw.net Feeder
   news-dus2.de.cw.net Feeder
   news.ecrc.de        Feeder/Reader
  -
  -                *************
  -                **** SMTP ***
  -                *************
  -
  ---- RFC2800 ----
  -2800 Internet Official Protocol Standards. J. Reynolds, R. Braden, S.
  -     Ginoza. May 2001. (Format: TXT=101648 bytes) (Obsoletes RFC2700)
  -     (Also STD1) (Status: STANDARD)
  -                                                                RFC STD
  -SMTP-Pipe  SMTP Service Extension for Command Pipelining       2920 60*
  -SMTP       [Reserved for Simple Mail Transfer Protocol (SMTP).      10*
  -              See RFC 2821.]
  -MAIL       [Reserved for Internet Message Format.  See RFC          11*
  -              See RFC 2822.]
  -
  ---- RFC2821 ---
  -2821 Simple Mail Transfer Protocol. J. Klensin, Editor. April 2001.
  -     (Format: TXT=192504 bytes) (Obsoletes RFC0821, RFC0974, RFC1869)
  -     (Status: PROPOSED STANDARD)
  -
  ---- RFC2822 ---
  -2822 Internet Message Format. P. Resnick, Editor. April 2001. (Format:
  -     TXT=110695 bytes) (Obsoletes RFC0822) (Status: PROPOSED STANDARD)
  -
  ---- RFC2920 ---
  -2920 SMTP Service Extension for Command Pipelining. N. Freed.
  -     September 2000. (Format: TXT=17065 bytes) (Obsoletes RFC2197) (Also
  -     STD0060) (Status: STANDARD)
  -
  -                *************
  -                **** NNTP ***
  -                *************
  -
  -0977 Network News Transfer Protocol. B. Kantor, P. Lapsley.
  -     Feb-01-1986. (Format: TXT=55062 bytes) (Status: PROPOSED STANDARD)
  -
  -1036 Standard for interchange of USENET messages. M.R. Horton, R.
  -     Adams. Dec-01-1987. (Format: TXT=46891 bytes) (Obsoletes RFC0850)
  -     (Status: UNKNOWN)
  -
  -2980 Common NNTP Extensions. S. Barber. October 2000. (Format:
  -     TXT=57165 bytes) (Status: INFORMATIONAL)
   

From ossp-cvs-owner@ossp.org  Thu Aug 23 09:58:46 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7N7wjj26148; Thu, 23 Aug 2001 09:58:45 +0200 (CEST)
Date: Thu, 23 Aug 2001 09:58:45 +0200 (CEST)
Message-Id: <200108230758.f7N7wjj26148@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/test run.sh testmessage.vialmtp triplec...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   23-Aug-2001 09:58:45
  Branch: HEAD                             Handle: 2001082308584400

  Added files:
    ossp-pkg/lmtp2nntp/test triplecheck.sh
  Modified files:
    ossp-pkg/lmtp2nntp/test run.sh testmessage.vialmtp

  Log:
    updated check/test environment

  Summary:
    Revision    Changes     Path
    1.9         +12 -9      ossp-pkg/lmtp2nntp/test/run.sh
    1.2         +5  -2      ossp-pkg/lmtp2nntp/test/testmessage.vialmtp
    1.1         +2  -0      ossp-pkg/lmtp2nntp/test/triplecheck.sh
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/test/run.sh
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 run.sh
  --- ossp-pkg/lmtp2nntp/test/run.sh	2001/08/20 14:11:31	1.8
  +++ ossp-pkg/lmtp2nntp/test/run.sh	2001/08/23 07:58:44	1.9
  @@ -43,9 +43,10 @@
   {
       newmsg lmtp
       cat /tmp/testmessage \
  -     | ../lmtp2nntp -t /tmp/tracing -d $1 -g $2 -h dev16 cw.de.sd.apps.dev.test
  -    cat /tmp/testmessage \
  -     | ../lmtp2nntp -t /tmp/tracing -d $1 -g $2 -h dev16 cw.de.sd.apps.dev.test
  +     | ../lmtp2nntp -t /tmp/tracing -d $1 -g $2 -h dev16 -h dev16.de.cw.net -h 141.1.23.116 $3 >/dev/null; echo $?
  +  echo ../lmtp2nntp -t /tmp/tracing -d $1 -g $2 -h dev16 $3
  +#   cat /tmp/testmessage \
  +#    | ../lmtp2nntp -t /tmp/tracing -d $1 -g $2 -h dev16 $3 >/dev/null; echo $?
   }
   
   sendmaildup()
  @@ -89,12 +90,14 @@
   
   before
   
  -#ok newmsg sendmail; ls -l /tmp/testmessage && cat /tmp/testmessage
  -#ok lmtp feed arg
  -# lmtp post arg
  -#ok lmtp feed envelope
  -#ok lmtp post envelope
  -sendmaildup
  +#newmsg sendmail; ls -l /tmp/testmessage && cat /tmp/testmessage
  +#lmtp feed arg
  +lmtp post arg cw.de.sd.apps.dev.test
  +#ok lmtp post envelope '*.test.* cw.*.dev.*'
  +#ok lmtp post header '*.test.* cw.*.dev.* *foo*'
  +#lmtp feed envelope
  +#lmtp post envelope
  +#sendmaildup
   #post1000
   
   after
  Index: ossp-pkg/lmtp2nntp/test/testmessage.vialmtp
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 testmessage.vialmtp
  --- ossp-pkg/lmtp2nntp/test/testmessage.vialmtp	2001/08/14 14:43:26	1.1
  +++ ossp-pkg/lmtp2nntp/test/testmessage.vialmtp	2001/08/23 07:58:44	1.2
  @@ -1,15 +1,18 @@
   LHLO dev.de.cw.net
   MAIL From:<thl@dev.de.cw.net>
  -RCPT To:<x+quux@news-posting>
  +RCPT To:<cw.de.sd.apps.dev.test@news-posting>
  +RCPT To:<foo.bar@news-posting>
  +RCPT To:<foo.test.bar@news-posting>
   DATA
   Date: Tue, 14 Aug 2001 14:51:48 +0200 (CEST)
   Message-Id: <200108141251.f7ECpmn74812@dev.de.cw.net>
   From: Thomas Lotterer <Thomas.Lotterer@de.cw.net>
  -Newsgroups: foo,bar
  +Newsgroups: fu,bar,quux,fuzel,nasen,baer
   Subject: lmtp2nntp testmessage.viasendmail
   
   ..
   a dot above
  +#
   a dot below
   ..
   .
  Index: ossp-pkg/lmtp2nntp/test/triplecheck.sh
  ============================================================
  $ cvs update -p -r1.1 triplecheck.sh
  #!/bin/sh
  egrep -ih '^Message-ID:' lmtp2nntp.log t | sed 's///' | sort -f | uniq -ic | egrep -iv '^[ ]+3[ ]'

From ossp-cvs-owner@ossp.org  Thu Aug 23 10:10:14 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7N8ADN27652; Thu, 23 Aug 2001 10:10:13 +0200 (CEST)
Date: Thu, 23 Aug 2001 10:10:13 +0200 (CEST)
Message-Id: <200108230810.f7N8ADN27652@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   23-Aug-2001 10:10:13
  Branch: HEAD                             Handle: 2001082309101200

  Modified files:
    ossp-pkg/lmtp2nntp      nntp.c

  Log:
    remove fixmes

  Summary:
    Revision    Changes     Path
    1.12        +8  -2      ossp-pkg/lmtp2nntp/nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/nntp.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 nntp.c
  --- ossp-pkg/lmtp2nntp/nntp.c	2001/08/23 07:52:25	1.11
  +++ ossp-pkg/lmtp2nntp/nntp.c	2001/08/23 08:10:12	1.12
  @@ -327,7 +327,10 @@
       if (strncmp(line, "340", 3) != 0)
           return NNTP_ERR_POST;
   
  -    if ((rc = nntp->io.write(nntp->wfd, msg->cpMsg, strlen(msg->cpMsg))) < 0) /*FIXME while() wrapper around write required */
  +    do {
  +        rc = nntp->io.write(nntp->wfd, msg->cpMsg, strlen(msg->cpMsg));
  +    } while (rc == -1 && errno = EINTR);
  +    if (rc == -1)
           return NNTP_ERR_SYSTEM;
   
       if ((rc = nntp_readline(nntp, line, sizeof(line))) != NNTP_OK)
  @@ -401,7 +404,10 @@
       if (strncmp(line, "335", 3) != 0)
           return NNTP_ERR_POST;
   
  -    if ((rc = nntp->io.write(nntp->wfd, msg->cpMsg, strlen(msg->cpMsg))) < 0) /*FIXME while() wrapper around write required */
  +    do {
  +        rc = nntp->io.write(nntp->wfd, msg->cpMsg, strlen(msg->cpMsg));
  +    } while (rc == -1 && errno = EINTR);
  +    if (rc == -1)
           return NNTP_ERR_SYSTEM;
   
       if ((rc = nntp_readline(nntp, line, sizeof(line))) != NNTP_OK)

From ossp-cvs-owner@ossp.org  Thu Aug 23 10:18:28 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7N8IR828906; Thu, 23 Aug 2001 10:18:27 +0200 (CEST)
Date: Thu, 23 Aug 2001 10:18:27 +0200 (CEST)
Message-Id: <200108230818.f7N8IR828906@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   23-Aug-2001 10:18:26
  Branch: HEAD                             Handle: 2001082309182600

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO

  Log:
    one more item

  Summary:
    Revision    Changes     Path
    1.15        +3  -0      ossp-pkg/lmtp2nntp/00TODO
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	2001/08/23 07:57:08	1.14
  +++ ossp-pkg/lmtp2nntp/00TODO	2001/08/23 08:18:26	1.15
  @@ -1,4 +1,7 @@
   
  +M=NNNN im Sendmail ergaenzen (weil Postfix gar nix hat) durch
  +-l Commandline options fuer Maximum Message Size
  +
   whatsup draufleiten
   dmalloc
   FIXMEs

From ossp-cvs-owner@ossp.org  Thu Aug 23 10:30:43 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7N8Ugw30311; Thu, 23 Aug 2001 10:30:42 +0200 (CEST)
Date: Thu, 23 Aug 2001 10:30:42 +0200 (CEST)
Message-Id: <200108230830.f7N8Ugw30311@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   23-Aug-2001 10:30:42
  Branch: HEAD                             Handle: 2001082309304100

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c

  Log:
    simplify regex

  Summary:
    Revision    Changes     Path
    1.25        +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/08/23 07:55:53	1.24
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/08/23 08:30:41	1.25
  @@ -688,7 +688,7 @@
        *  RFC1893 3.5 Network and Routing Status          X.5.4   Invalid command arguments
        */
       if (!str_parse(req->msg, "m/^MAIL From:\\s*<(.+@.+)>"
  -                             "(?:\\s+BODY=(?:7BIT|8BITMIME)\\s*){0,1}$/i", 
  +                             "(?:\\s+BODY=(?:7BIT|8BITMIME)\\s*)?$/i", 
                                &ctx->msg->mail_from)) {
           res.statuscode = "501";
           res.dsncode    = "5.5.4";

From ossp-cvs-owner@ossp.org  Thu Aug 23 10:36:18 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7N8aHM31012; Thu, 23 Aug 2001 10:36:17 +0200 (CEST)
Date: Thu, 23 Aug 2001 10:36:17 +0200 (CEST)
Message-Id: <200108230836.f7N8aHM31012@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   23-Aug-2001 10:36:17
  Branch: HEAD                             Handle: 2001082309361600

  Modified files:
    ossp-pkg/lmtp2nntp      nntp.c

  Log:
    remove dependency to Str library

  Summary:
    Revision    Changes     Path
    1.13        +1  -1      ossp-pkg/lmtp2nntp/nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/nntp.c
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 nntp.c
  --- ossp-pkg/lmtp2nntp/nntp.c	2001/08/23 08:10:12	1.12
  +++ ossp-pkg/lmtp2nntp/nntp.c	2001/08/23 08:36:16	1.13
  @@ -135,7 +135,7 @@
        * "Duplicate".  Typical welcome string is "200 host InterNetNews NNRP
        * server INN 2.3.2 ready (posting * ok)."
        */
  -    if (str_parse(line, "m/^200.*\\sINN\\s/")) {
  +    if (strncmp(line, "200", 3) == 0 && strstr(line, " INN ") != NULL) {
           nntp->kludgeinn441dup = TRUE;
           /*fprintf(stderr, "DEBUG: INN kludge activated!\n"); */
       }

From ossp-cvs-owner@ossp.org  Thu Aug 23 10:36:55 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7N8ara31095; Thu, 23 Aug 2001 10:36:53 +0200 (CEST)
Date: Thu, 23 Aug 2001 10:36:53 +0200 (CEST)
Message-Id: <200108230836.f7N8ara31095@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c msg.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   23-Aug-2001 10:36:53
  Branch: HEAD                             Handle: 2001082309365300

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c msg.c

  Log:
    adjust for recently fixed return code semantic of str_parse()

  Summary:
    Revision    Changes     Path
    1.26        +8  -8      ossp-pkg/lmtp2nntp/lmtp2nntp.c
    1.8         +4  -3      ossp-pkg/lmtp2nntp/msg.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/08/23 08:30:41	1.25
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/08/23 08:36:53	1.26
  @@ -402,8 +402,8 @@
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.0.0   Other undefined Status
        */
  -    if (! (   helo_rfc0821domain(req->msg, &ctx->session.lhlo_domain)
  -           || helo_rfc1035domain(req->msg, &ctx->session.lhlo_domain))) {
  +    if (! (   helo_rfc0821domain(req->msg, &ctx->session.lhlo_domain) > 0
  +           || helo_rfc1035domain(req->msg, &ctx->session.lhlo_domain) > 0)) {
           res.statuscode = "501";
           res.dsncode    = "5.0.0";
           res.statusmsg  = "Please identify yourself. Domain must match RFC0821/RFC1035.";
  @@ -674,7 +674,7 @@
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.1.7   Bad sender's mailbox address syntax
        */
  -    if (!str_parse(req->msg, "m/^MAIL From:\\s*<(?:.+@.+)>/i")) {
  +    if (str_parse(req->msg, "m/^MAIL From:\\s*<(?:.+@.+)>/i") <= 0) {
           res.statuscode = "553";
           res.dsncode    = "5.1.7";
           res.statusmsg  = "Domain name required for sender address.";
  @@ -687,9 +687,9 @@
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.5.4   Invalid command arguments
        */
  -    if (!str_parse(req->msg, "m/^MAIL From:\\s*<(.+@.+)>"
  -                             "(?:\\s+BODY=(?:7BIT|8BITMIME)\\s*)?$/i", 
  -                             &ctx->msg->mail_from)) {
  +    if (str_parse(req->msg, "m/^MAIL From:\\s*<(.+@.+)>"
  +                            "(?:\\s+BODY=(?:7BIT|8BITMIME)\\s*)?$/i", 
  +                            &ctx->msg->mail_from) <= 0) {
           res.statuscode = "501";
           res.dsncode    = "5.5.4";
           res.statusmsg  = "Unknown parameter for keyword BODY.";
  @@ -733,7 +733,7 @@
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.5.2   Syntax error
        */
  -    if (!str_parse(req->msg, "m/^RCPT To:\\s*(.+)$/i", &cp)) {
  +    if (str_parse(req->msg, "m/^RCPT To:\\s*(.+)$/i", &cp) <= 0) {
           res.statuscode = "501";
           res.dsncode    = "5.5.2";
           res.statusmsg  = "Syntax error in parameters.";
  @@ -764,7 +764,7 @@
        *                                                  X.7.2   Mailing list expansion prohibited
        */
       if (ctx->option_groupmode == GROUPMODE_ENVELOPE) {
  -        if (!str_parse(cp, "m/^<(.+)?@[^@]+>$/i", &group)) {
  +        if (str_parse(cp, "m/^<(.+)?@[^@]+>$/i", &group) <= 0) {
               res.statuscode = "550";
               res.dsncode    = "5.1.1";
               res.statusmsg  = "Recipient did not transform into group.";
  Index: ossp-pkg/lmtp2nntp/msg.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 msg.c
  --- ossp-pkg/lmtp2nntp/msg.c	2001/08/23 07:54:06	1.7
  +++ ossp-pkg/lmtp2nntp/msg.c	2001/08/23 08:36:53	1.8
  @@ -91,7 +91,7 @@
        */
   
       /* split message into header and body */
  -    if (!str_parse(msg->cpMsg, "m/((?:.*?)\\n)\\n(.*)$/s", &cpHeaders, &msg->cpBody))
  +    if (str_parse(msg->cpMsg, "m/((?:.*?)\\n)\\n(.*)$/s", &cpHeaders, &msg->cpBody) <= 0)
           return MSG_ERR_SPLITSPLITBODY;
   
       /* replace envelope From w/o colon by X-F: pseudotag. This eliminates the
  @@ -104,7 +104,7 @@
   
       /* unwrap header lines */
       /*FIXME poor man's s///g simulator as current str library doesn't support //global substitution */
  -    while (str_parse(cpHeaders, "s/(.*?)\\n[ \\t]+(.*)/$1 $2/s", &cpRem)) {
  +    while (str_parse(cpHeaders, "s/(.*?)\\n[ \\t]+(.*)/$1 $2/s", &cpRem) > 0) {
           free(cpHeaders);
           cpHeaders = cpRem;
       }
  @@ -114,7 +114,8 @@
       /*FIXME - fix bug "not" [^...] working */
       /*FIXME - improve str_parse(foo, "...", &foo) should free foo() on it's own */
       /*FIXME - add "global" in s/search/replace/g (see above "unwrap hader lines") */
  -    while (str_parse(cpHeaders, "m/^([\\w-]+?:)[ \\t]*(.*?)[ \\t]*\\n(.*)/s", &cpName, &cpValue, &cpRem)) {
  +    while (str_parse(cpHeaders, "m/^([\\w-]+?:)[ \\t]*(.*?)[ \\t]*\\n(.*)/s",
  +                     &cpName, &cpValue, &cpRem) > 0) {
           free(cpHeaders);
           cpHeaders = cpRem;
           argz_add(&msg->azHeaders, &msg->asHeaders, cpName);

From ossp-cvs-owner@ossp.org  Thu Aug 23 10:41:36 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7N8fZ031462; Thu, 23 Aug 2001 10:41:35 +0200 (CEST)
Date: Thu, 23 Aug 2001 10:41:35 +0200 (CEST)
Message-Id: <200108230841.f7N8fZ031462@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xds_test_lib.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   23-Aug-2001 10:41:35
  Branch: HEAD                             Handle: 2001082309413400

  Modified files:
    ossp-pkg/srpc/libxds    xds_test_lib.c

  Log:
    Removed test suite for xds_find_engine(). After the reorganisation of
    the build system, the routine is static and can't be accessed from
    outside the library anymore.

  Summary:
    Revision    Changes     Path
    1.6         +0  -105    ossp-pkg/srpc/libxds/xds_test_lib.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xds_test_lib.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 xds_test_lib.c
  --- ossp-pkg/srpc/libxds/xds_test_lib.c	2001/08/22 20:21:32	1.5
  +++ ossp-pkg/srpc/libxds/xds_test_lib.c	2001/08/23 08:41:34	1.6
  @@ -74,111 +74,6 @@
   
   #endif /* XDS_TEST_XDS_CORE */
   
  -#ifdef XDS_TEST_XDS_FIND_ENGINE
  -
  -int main(int argc, char *argv[])
  -{
  -    const engine_map_t engines[] = {
  -        {"alan", NULL, 0},
  -        {"berta", NULL, 0},
  -        {"caesar", NULL, 0},
  -        {"doris", NULL, 0},
  -        {"egon", NULL, 0},
  -        {"franziska", NULL, 0},
  -        {"gudrun", NULL, 0},
  -        {"heinz", NULL, 0},
  -        {"igor", NULL, 0},
  -        {"jamila", NULL, 0},
  -        {"karin", NULL, 0},
  -        {"louis", NULL, 0},
  -    };
  -    size_t engines_len = sizeof (engines) / sizeof (engine_map_t);
  -    size_t pos;
  -    size_t i;
  -
  -    /* Does xds_find_engine handle an empty array? */
  -    if (xds_find_engine(engines, 0, "whatever", &pos)) {
  -        printf("xds_find_engine() said 'whatever' would be in the array, but that's wrong.\n");
  -        exit(1);
  -    }
  -    if (pos != 0) {
  -        printf("xds_find_engine() would insert 'whatever' at position %d, but 0 is correct.\n", pos);
  -        exit(1);
  -    }
  -
  -    /* Search for every single entry in the array and check the results. */
  -    for (i = 0; i < engines_len; ++i) {
  -        if (!xds_find_engine(engines, engines_len, engines[i].name, &pos)) {
  -            printf("xds_find_engine() said '%s' wouldn't be in the array, but that's wrong.\n", engines[i].name);
  -            exit(1);
  -        }
  -        if (pos != i) {
  -            printf("xds_find_engine() would insert '%s' at position %d, but %d is correct.\n", engines[i].name, pos, i);
  -            exit(1);
  -        }
  -    }
  -
  -    /* Search for non-existing name that would be inserted at the first
  -       position. */
  -    if (xds_find_engine(engines, engines_len, "aaron", &pos)) {
  -        printf("xds_find_engine() said 'aaron' would be in the array, but that's wrong.\n");
  -        exit(1);
  -    }
  -    if (pos != 0) {
  -        printf("xds_find_engine() would insert 'aaron' at position %d, but 0 is correct.\n", pos);
  -        exit(1);
  -    }
  -
  -    /* Search for non-existing name that would be inserted at last position. */
  -    if (xds_find_engine(engines, engines_len, "zerberos", &pos)) {
  -        printf("xds_find_engine() said 'zerberos' would be in the array, but that's wrong.\n");
  -        exit(1);
  -    }
  -    if (pos != engines_len) {
  -        printf("xds_find_engine() would insert 'zerberos' at position %d, but %d is correct.\n", pos, engines_len);
  -        exit(1);
  -    }
  -
  -    /* Search for non-existing names that would be inserted at random positions. */
  -    if (xds_find_engine(engines, engines_len, "balthasar", &pos)) {
  -        printf("xds_find_engine() said 'balthasar' would be in the array, but that's wrong.\n");
  -        exit(1);
  -    }
  -    if (pos != 1) {
  -        printf("xds_find_engine() would insert 'balthasar' at position %d, but 1 is correct.\n", pos);
  -        exit(1);
  -    }
  -    if (xds_find_engine(engines, engines_len, "bulli", &pos)) {
  -        printf("xds_find_engine() said 'bulli' would be in the array, but that's wrong.\n");
  -        exit(1);
  -    }
  -    if (pos != 2) {
  -        printf("xds_find_engine() would insert 'bulli' at position %d, but 2 is correct.\n", pos);
  -        exit(1);
  -    }
  -    if (xds_find_engine(engines, engines_len, "hildegard", &pos)) {
  -        printf("xds_find_engine() said 'hildegard' would be in the array, but that's wrong.\n");
  -        exit(1);
  -    }
  -    if (pos != 8) {
  -        printf("xds_find_engine() would insert 'hildegard' at position %d, but 8 is correct.\n", pos);
  -        exit(1);
  -    }
  -    if (xds_find_engine(engines, engines_len, "harald", &pos)) {
  -        printf("xds_find_engine() said 'harald' would be in the array, but that's wrong.\n");
  -        exit(1);
  -    }
  -    if (pos != 7) {
  -        printf("xds_find_engine() would insert 'harald' at position %d, but 7 is correct.\n", pos);
  -        exit(1);
  -    }
  -
  -    /* Everything went fine. */
  -    return 0;
  -}
  -
  -#endif /* XDS_TEST_XDS_FIND_ENGINE */
  -
   #ifdef XDS_TEST_XDS_REGISTER
   
   static int dummy_engine(xds_t *xds, void *engine_context,

From ossp-cvs-owner@ossp.org  Thu Aug 23 10:42:51 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7N8goM31597; Thu, 23 Aug 2001 10:42:50 +0200 (CEST)
Date: Thu, 23 Aug 2001 10:42:50 +0200 (CEST)
Message-Id: <200108230842.f7N8goM31597@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile.in float2xds-float.c xds.h.i...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   23-Aug-2001 10:42:50
  Branch: HEAD                             Handle: 19700101010000998552570

  Modified files:
    ossp-pkg/srpc/libxds    Makefile.in xds.h.in xds_engine_xdr.c
  Removed files:
    ossp-pkg/srpc/libxds    float2xds-float.c

  Log:
    - Moved all float-related stuff into xds_engine_xdr.c so that we don't
      need any prototypes or structure declarations in the public header
      file.
    
    - Renamed xds_float_t to my_float.
    
    - Renamed float2xds_float() to float2myfloat().

  Summary:
    Revision    Changes     Path
    1.34        +1  -1      ossp-pkg/srpc/libxds/Makefile.in
    NONE        +0  -71     ossp-pkg/srpc/libxds/float2xds-float.c
    1.16        +0  -10     ossp-pkg/srpc/libxds/xds.h.in
    1.8         +81 -2      ossp-pkg/srpc/libxds/xds_engine_xdr.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile.in
  ============================================================
  $ cvs diff -u -r1.33 -r1.34 Makefile.in
  --- ossp-pkg/srpc/libxds/Makefile.in	2001/08/22 20:22:18	1.33
  +++ ossp-pkg/srpc/libxds/Makefile.in	2001/08/23 08:42:49	1.34
  @@ -53,7 +53,7 @@
   
   #   list of objects
   LIB_NAME    = libxds.la
  -LIB_OBJS    = xds.lo xds_engine_xdr.lo xds_engine_xml.lo float2xds-float.lo
  +LIB_OBJS    = xds.lo xds_engine_xdr.lo xds_engine_xml.lo
   TST_SRCS    = xds_test_lib.c xds_test_xdr.c xds_test_xml.c
   
   #   file containing the official version information
    Index: ossp-pkg/srpc/libxds/xds.h.in
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 xds.h.in
  --- ossp-pkg/srpc/libxds/xds.h.in	2001/08/22 20:19:50	1.15
  +++ ossp-pkg/srpc/libxds/xds.h.in	2001/08/23 08:42:50	1.16
  @@ -159,14 +159,4 @@
   xds_declare_formatting_engine(xml_encode_string);
   xds_declare_formatting_engine(xml_decode_string);
   
  -typedef struct
  -    {
  -    unsigned int sign     :1;
  -    unsigned int fraction :23;
  -    int          exponent :8;
  -    }
  -xds_float_t;
  -
  -int float2xds_float(xds_float_t* new_num, float num);
  -
   #endif /* __XDS_H__ */
  Index: ossp-pkg/srpc/libxds/xds_engine_xdr.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 xds_engine_xdr.c
  --- ossp-pkg/srpc/libxds/xds_engine_xdr.c	2001/08/22 20:23:48	1.7
  +++ ossp-pkg/srpc/libxds/xds_engine_xdr.c	2001/08/23 08:42:50	1.8
  @@ -297,17 +297,96 @@
    * Encode/decode floating point values.
    */
   
  +typedef struct
  +    {
  +    unsigned int sign     :1;
  +    unsigned int fraction :23;
  +    int          exponent :8;
  +    }
  +myfloat_t;
  +
  +static int float2myfloat(myfloat_t* new_num, float num)
  +    {
  +    const static unsigned int base = 2;
  +    size_t i;
  +    float  tmp;
  +
  +    /* Handle zero as a special case. */
  +
  +    if (num == 0.0)
  +	{
  +	new_num->sign     = 0;
  +	new_num->fraction = 0;
  +	new_num->exponent = -127;
  +	return 0;
  +	}
  +
  +    /* Determine the sign of the number. */
  +
  +    if (num < 0)
  +	{
  +	new_num->sign = 1;
  +	num = 0 - num;
  +	}
  +    else
  +	new_num->sign = 0;
  +
  +    /* Canonify the number before we convert it. */
  +
  +    new_num->exponent = 0;
  +    while (num < 1)
  +	{
  +	num *= base;
  +	--new_num->exponent;
  +	}
  +
  +    /* Find the exponent. */
  +
  +    for (i = 0, tmp = 1; i <= 128; ++i, tmp *= base)
  +	{
  +	if (tmp*base > num)
  +	    break;
  +	}
  +    if (i <= 128)
  +	{
  +	num = num / tmp - 1;
  +	new_num->exponent += i;
  +	}
  +    else
  +	return 1;
  +
  +    /* Calculate the fraction part. */
  +
  +    for (new_num->fraction = 0, i = 0; i < 23; ++i)
  +	{
  +	new_num->fraction *= base;
  +	if (num >= 1.0 / base)
  +	    {
  +	    new_num->fraction |= 1;
  +	    num = num * base - 1;
  +	    }
  +	else
  +	    {
  +	    new_num->fraction |= 0;
  +	    num *= base;
  +	    }
  +	}
  +
  +    return 0;
  +    }
  +
  +
   int xdr_encode_float(xds_t *xds, void *engine_context,
   		     void *buffer, size_t buffer_size,
   		     size_t *used_buffer_size, va_list *args)
   {
  -    xds_float_t value;
  +    myfloat_t   value;
       xds_uint8_t tmp;
   
       xds_init_encoding_engine(4);
   
       /* Get value and format it into the structure. */
  -    float2xds_float(&value, (float)va_arg(*args, double));
  +    float2myfloat(&value, (float)va_arg(*args, double));
   
       memset(buffer, 0, 4);
   

From ossp-cvs-owner@ossp.org  Thu Aug 23 11:00:24 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7N90Mk34128; Thu, 23 Aug 2001 11:00:22 +0200 (CEST)
Date: Thu, 23 Aug 2001 11:00:22 +0200 (CEST)
Message-Id: <200108230900.f7N90Mk34128@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   23-Aug-2001 11:00:22
  Branch: HEAD                             Handle: 2001082310002200

  Modified files:
    ossp-pkg/lmtp2nntp      nntp.c

  Log:
    Ops, no assignment! A comparison, of course.

  Summary:
    Revision    Changes     Path
    1.14        +2  -2      ossp-pkg/lmtp2nntp/nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/nntp.c
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 nntp.c
  --- ossp-pkg/lmtp2nntp/nntp.c	2001/08/23 08:36:16	1.13
  +++ ossp-pkg/lmtp2nntp/nntp.c	2001/08/23 09:00:22	1.14
  @@ -329,7 +329,7 @@
   
       do {
           rc = nntp->io.write(nntp->wfd, msg->cpMsg, strlen(msg->cpMsg));
  -    } while (rc == -1 && errno = EINTR);
  +    } while (rc == -1 && errno == EINTR);
       if (rc == -1)
           return NNTP_ERR_SYSTEM;
   
  @@ -406,7 +406,7 @@
   
       do {
           rc = nntp->io.write(nntp->wfd, msg->cpMsg, strlen(msg->cpMsg));
  -    } while (rc == -1 && errno = EINTR);
  +    } while (rc == -1 && errno == EINTR);
       if (rc == -1)
           return NNTP_ERR_SYSTEM;
   

From ossp-cvs-owner@ossp.org  Thu Aug 23 11:12:33 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7N9CVS35368; Thu, 23 Aug 2001 11:12:31 +0200 (CEST)
Date: Thu, 23 Aug 2001 11:12:31 +0200 (CEST)
Message-Id: <200108230912.f7N9CVS35368@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp .configure .dmallocrc Makefile.in READM...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   23-Aug-2001 11:12:31
  Branch: HEAD                             Handle: 2001082310123000

  Added files:
    ossp-pkg/lmtp2nntp      .dmallocrc acconfig.h
  Modified files:
    ossp-pkg/lmtp2nntp      .configure Makefile.in README argz.c configure.ac
                            lmtp.c lmtp2nntp.c msg.c nntp.c sa.c shpat_match.c
                            trace.c

  Log:
    Add DMalloc support

  Summary:
    Revision    Changes     Path
    1.4         +1  -0      ossp-pkg/lmtp2nntp/.configure
    1.1         +20 -0      ossp-pkg/lmtp2nntp/.dmallocrc
    1.9         +1  -1      ossp-pkg/lmtp2nntp/Makefile.in
    1.2         +5  -0      ossp-pkg/lmtp2nntp/README
    1.1         +3  -0      ossp-pkg/lmtp2nntp/acconfig.h
    1.2         +7  -0      ossp-pkg/lmtp2nntp/argz.c
    1.7         +3  -0      ossp-pkg/lmtp2nntp/configure.ac
    1.15        +7  -0      ossp-pkg/lmtp2nntp/lmtp.c
    1.27        +6  -0      ossp-pkg/lmtp2nntp/lmtp2nntp.c
    1.9         +7  -0      ossp-pkg/lmtp2nntp/msg.c
    1.15        +7  -0      ossp-pkg/lmtp2nntp/nntp.c
    1.4         +6  -0      ossp-pkg/lmtp2nntp/sa.c
    1.3         +7  -0      ossp-pkg/lmtp2nntp/shpat_match.c
    1.3         +7  -0      ossp-pkg/lmtp2nntp/trace.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/.configure
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 .configure
  --- ossp-pkg/lmtp2nntp/.configure	2001/08/20 12:17:42	1.3
  +++ ossp-pkg/lmtp2nntp/.configure	2001/08/23 09:12:30	1.4
  @@ -6,4 +6,5 @@
   ./configure \
      --prefix=/tmp/lmtp2nntp \
      --with-str=/cw \
  +   --with-dmalloc=/cw \
      --enable-debug
  Index: ossp-pkg/lmtp2nntp/.dmallocrc
  ============================================================
  $ cvs update -p -r1.1 .dmallocrc
  ##
  ##  Dmalloc Init Script for use with GNU Pth
  ##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  ##
  
  # no debugging
  none    none
  
  # basic debugging
  debug1  log-stats, log-non-free, check-fence
  
  # more logging and some heap checking
  debug2  log-stats, log-non-free, log-trans, \
          check-fence, check-heap, check-lists, error-abort
  
  # good utilities
  debug3  log-stats, log-non-free, log-trans, \
          log-admin, check-fence, check-heap, check-lists, realloc-copy, \
          free-blank, error-abort
  
  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	2001/08/20 12:23:00	1.8
  +++ ossp-pkg/lmtp2nntp/Makefile.in	2001/08/23 09:12:30	1.9
  @@ -10,7 +10,7 @@
   mandir      = @mandir@
   
   CC          = @CC@
  -CFLAGS      = @CFLAGS@
  +CFLAGS      = @CFLAGS@ @DEFS@
   LDFLAGS     = @LDFLAGS@
   LIBS        = @LIBS@
   
  Index: ossp-pkg/lmtp2nntp/README
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 README
  --- ossp-pkg/lmtp2nntp/README	2001/08/20 10:02:44	1.1
  +++ ossp-pkg/lmtp2nntp/README	2001/08/23 09:12:30	1.2
  @@ -1,3 +1,8 @@
   
     OSSP lmtp2nntp - Mail to News Gateway
   
  +  Debugging:
  +  $ ./.configure [wegen --with-dmalloc!]
  +  $ dmalloc -l dmalloc.log
  +  $ dmalloc debug3
  +
  Index: ossp-pkg/lmtp2nntp/acconfig.h
  ============================================================
  $ cvs update -p -r1.1 acconfig.h
  
  #undef DMALLOC
  
  Index: ossp-pkg/lmtp2nntp/argz.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 argz.c
  --- ossp-pkg/lmtp2nntp/argz.c	2001/07/25 15:02:57	1.1
  +++ ossp-pkg/lmtp2nntp/argz.c	2001/08/23 09:12:30	1.2
  @@ -24,6 +24,13 @@
   
   #include "argz.h"
   
  +#ifdef HAVE_CONFIG_H
  +#include "config.h"
  +#endif
  +#if defined(HAVE_DMALLOC_H) && defined(DMALLOC)
  +#include "dmalloc.h"
  +#endif
  +
   /* Find the length of STRING, but scan at most MAXLEN characters.
      If no '\0' terminator is found in that many characters, return MAXLEN.  */
   static size_t my_strnlen(const char *string, size_t maxlen)
  Index: ossp-pkg/lmtp2nntp/configure.ac
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 configure.ac
  --- ossp-pkg/lmtp2nntp/configure.ac	2001/08/21 09:35:04	1.6
  +++ ossp-pkg/lmtp2nntp/configure.ac	2001/08/23 09:12:30	1.7
  @@ -21,6 +21,9 @@
   			 AC_MSG_RESULT(not found)
   			 AC_MSG_ERROR([lmtp2nntp requires libstr!])
   			 ])
  +
  +AC_CHECK_EXTLIB([Dmalloc Library], dmalloc, dmalloc_debug, dmalloc.h, AC_DEFINE(DMALLOC))
  +
   AC_CHECK_LIB(socket, getprotobyname)
   AC_CHECK_LIB(nsl, gethostbyname)
   AC_CHECK_FUNCS(inet_pton inet_aton)
  Index: ossp-pkg/lmtp2nntp/lmtp.c
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 lmtp.c
  --- ossp-pkg/lmtp2nntp/lmtp.c	2001/08/23 07:54:06	1.14
  +++ ossp-pkg/lmtp2nntp/lmtp.c	2001/08/23 09:12:30	1.15
  @@ -36,6 +36,13 @@
   
   #include "lmtp.h"
   
  +#ifdef HAVE_CONFIG_H
  +#include "config.h"
  +#endif
  +#if defined(HAVE_DMALLOC_H) && defined(DMALLOC)
  +#include "dmalloc.h"
  +#endif
  +
   /* maximum LMTP protocol line length */
   #define LMTP_LINE_MAXLEN 1024
   
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/08/23 08:36:53	1.26
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/08/23 09:12:30	1.27
  @@ -23,6 +23,12 @@
   #include "shpat_match.h"
   
   /* own headers */
  +#ifdef HAVE_CONFIG_H
  +#include "config.h"
  +#endif
  +#if defined(HAVE_DMALLOC_H) && defined(DMALLOC)
  +#include "dmalloc.h"
  +#endif
   #include "lmtp.h"
   #include "nntp.h"
   #include "sa.h"
  Index: ossp-pkg/lmtp2nntp/msg.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 msg.c
  --- ossp-pkg/lmtp2nntp/msg.c	2001/08/23 08:36:53	1.8
  +++ ossp-pkg/lmtp2nntp/msg.c	2001/08/23 09:12:30	1.9
  @@ -5,6 +5,13 @@
   #include "argz.h"
   #include <stdio.h>
   
  +#ifdef HAVE_CONFIG_H
  +#include "config.h"
  +#endif
  +#if defined(HAVE_DMALLOC_H) && defined(DMALLOC)
  +#include "dmalloc.h"
  +#endif
  +
   msg_t *msg_create(void)
   {
       msg_t *msg;
  Index: ossp-pkg/lmtp2nntp/nntp.c
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 nntp.c
  --- ossp-pkg/lmtp2nntp/nntp.c	2001/08/23 09:00:22	1.14
  +++ ossp-pkg/lmtp2nntp/nntp.c	2001/08/23 09:12:30	1.15
  @@ -39,6 +39,13 @@
   #include "nntp.h"
   #include "str.h"
   
  +#ifdef HAVE_CONFIG_H
  +#include "config.h"
  +#endif
  +#if defined(HAVE_DMALLOC_H) && defined(DMALLOC)
  +#include "dmalloc.h"
  +#endif
  +
   #ifndef FALSE
   #define FALSE (1 != 1)
   #endif
  Index: ossp-pkg/lmtp2nntp/sa.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 sa.c
  --- ossp-pkg/lmtp2nntp/sa.c	2001/08/20 11:28:29	1.3
  +++ ossp-pkg/lmtp2nntp/sa.c	2001/08/23 09:12:30	1.4
  @@ -42,7 +42,13 @@
   #include <sys/socket.h>
   #include <arpa/inet.h>
   
  +#ifdef HAVE_CONFIG_H
   #include "config.h"
  +#endif
  +#if defined(HAVE_DMALLOC_H) && defined(DMALLOC)
  +#include "dmalloc.h"
  +#endif
  +
   #include "sa.h"
   
   #if !defined(AF_LOCAL) && defined(AF_UNIX)
  Index: ossp-pkg/lmtp2nntp/shpat_match.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 shpat_match.c
  --- ossp-pkg/lmtp2nntp/shpat_match.c	2001/08/12 13:49:51	1.2
  +++ ossp-pkg/lmtp2nntp/shpat_match.c	2001/08/23 09:12:30	1.3
  @@ -49,6 +49,13 @@
   #include <string.h>
   #include <stdio.h>
   
  +#ifdef HAVE_CONFIG_H
  +#include "config.h"
  +#endif
  +#if defined(HAVE_DMALLOC_H) && defined(DMALLOC)
  +#include "dmalloc.h"
  +#endif
  +
   #include "shpat_match.h"
   
   #define EOS '\0'
  Index: ossp-pkg/lmtp2nntp/trace.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 trace.c
  --- ossp-pkg/lmtp2nntp/trace.c	2001/08/20 11:28:30	1.2
  +++ ossp-pkg/lmtp2nntp/trace.c	2001/08/23 09:12:30	1.3
  @@ -2,6 +2,13 @@
   #include <errno.h>
   #include <limits.h>
   
  +#ifdef HAVE_CONFIG_H
  +#include "config.h"
  +#endif
  +#if defined(HAVE_DMALLOC_H) && defined(DMALLOC)
  +#include "dmalloc.h"
  +#endif
  +
   #include "trace.h"
   
   #ifndef _POSIX_PATH_MAX

From ossp-cvs-owner@ossp.org  Thu Aug 23 14:24:49 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7NCOmC59038; Thu, 23 Aug 2001 14:24:48 +0200 (CEST)
Date: Thu, 23 Aug 2001 14:24:48 +0200 (CEST)
Message-Id: <200108231224.f7NCOmC59038@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libamp .cvsignore Odinfile amp.h test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   23-Aug-2001 14:24:48
  Branch: HEAD                             Handle: 2001082313244700

  Added files:
    ossp-pkg/srpc/libamp    .cvsignore Odinfile amp.h test.c

  Log:
    Added a skeleton project for the amp library.

  Summary:
    Revision    Changes     Path
    1.1         +1  -0      ossp-pkg/srpc/libamp/.cvsignore
    1.1         +4  -0      ossp-pkg/srpc/libamp/Odinfile
    1.1         +32 -0      ossp-pkg/srpc/libamp/amp.h
    1.1         +6  -0      ossp-pkg/srpc/libamp/test.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libamp/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  test
  Index: ossp-pkg/srpc/libamp/Odinfile
  ============================================================
  $ cvs update -p -r1.1 Odinfile
  test == test.c +cc_flags='-Wall -pedantic' :exe
  
  %clean !== !<<
      rm -f test
  Index: ossp-pkg/srpc/libamp/amp.h
  ============================================================
  $ cvs update -p -r1.1 amp.h
  #ifndef __LIBAMP_H__
  #define __LIBAMP_H__
  
  #include <sys/types.h>
  #include <sys/uio.h>
  #include <unistd.h>
  #include <stdio.h>
  #include <sys/socket.h>
  
  typedef struct
      {
      int (*listen)(int s, int backlog);
      int (*accept)(int s, struct sockaddr *addr, socklen_t *addrlen);
      int (*bind)(int s, const struct sockaddr *addr, socklen_t addrlen);
      ssize_t (*read)(int d, void *buf, size_t nbytes);
      ssize_t (*readv)(int d, const struct iovec *iov, int iovcnt);
      ssize_t (*write)(int d, const void* buf, size_t nbytes);
      ssize_t (*writev)(int d, const struct iovec* iov, int iovcnt);
      }
  amp_engine_t;
  
  typedef struct
      {
      int          fd;
      amp_engine_t engine;
      }
  amp_peer_t;
  
  amp_peer_t* amp_create_peer(const char* engine, const char* peer);
  int amp_destroy_peer(amp_peer_t* peer);
  
  #endif /* !defined(__LIBAMP_H__) */
  Index: ossp-pkg/srpc/libamp/test.c
  ============================================================
  $ cvs update -p -r1.1 test.c
  #include "amp.h"
  
  int main(int argc, char** argv)
      {
      return 0;
      }

From ossp-cvs-owner@ossp.org  Thu Aug 23 14:34:42 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7NCYfX60280; Thu, 23 Aug 2001 14:34:41 +0200 (CEST)
Date: Thu, 23 Aug 2001 14:34:41 +0200 (CEST)
Message-Id: <200108231234.f7NCYfX60280@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libamp amp.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   23-Aug-2001 14:34:41
  Branch: HEAD                             Handle: 2001082313344000

  Modified files:
    ossp-pkg/srpc/libamp    amp.h

  Log:
    Added more routines to amp_engine_t.

  Summary:
    Revision    Changes     Path
    1.2         +17 -8      ossp-pkg/srpc/libamp/amp.h
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libamp/amp.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 amp.h
  --- ossp-pkg/srpc/libamp/amp.h	2001/08/23 12:24:47	1.1
  +++ ossp-pkg/srpc/libamp/amp.h	2001/08/23 12:34:40	1.2
  @@ -9,24 +9,33 @@
   
   typedef struct
       {
  -    int (*listen)(int s, int backlog);
  -    int (*accept)(int s, struct sockaddr *addr, socklen_t *addrlen);
  -    int (*bind)(int s, const struct sockaddr *addr, socklen_t addrlen);
  -    ssize_t (*read)(int d, void *buf, size_t nbytes);
  -    ssize_t (*readv)(int d, const struct iovec *iov, int iovcnt);
  -    ssize_t (*write)(int d, const void* buf, size_t nbytes);
  -    ssize_t (*writev)(int d, const struct iovec* iov, int iovcnt);
  +    int (*listen) (int fd, int backlog);
  +    int (*accept) (int fd, struct sockaddr *addr, socklen_t *addrlen);
  +    int (*bind) (int fd, const struct sockaddr *addr, socklen_t addrlen);
  +    ssize_t (*read) (int fd, void *buf, size_t nbytes);
  +    ssize_t (*readv) (int fd, const struct iovec *iov, int iovcnt);
  +    ssize_t (*write) (int fd, const void* buf, size_t nbytes);
  +    ssize_t (*writev) (int fd, const struct iovec* iov, int iovcnt);
  +    ssize_t (*send)(int s, const void *msg, size_t len, int flags);
  +    ssize_t (*sendto)(int s, const void *msg, size_t len, int flags,
  +		      const struct sockaddr *to, socklen_t tolen);
  +    ssize_t (*recv)(int s, void *buf, size_t len, int flags);
  +    ssize_t (*recvfrom)(int s, void *buf, size_t len, int flags, struct sockaddr *from,
  +			socklen_t *fromlen);
       }
   amp_engine_t;
   
   typedef struct
       {
  -    int          fd;
  +    int fd;
       amp_engine_t engine;
       }
   amp_peer_t;
   
   amp_peer_t* amp_create_peer(const char* engine, const char* peer);
   int amp_destroy_peer(amp_peer_t* peer);
  +
  +int amp_send(amp_peer_t* peer, const void* msg, size_t msg_len);
  +int amp_receive(amp_peer_t* peer, const void** msg, size_t* msg_len);
   
   #endif /* !defined(__LIBAMP_H__) */

From ossp-cvs-owner@ossp.org  Thu Aug 23 14:39:28 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7NCdRu60919; Thu, 23 Aug 2001 14:39:27 +0200 (CEST)
Date: Thu, 23 Aug 2001 14:39:27 +0200 (CEST)
Message-Id: <200108231239.f7NCdRu60919@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libamp amp.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   23-Aug-2001 14:39:27
  Branch: HEAD                             Handle: 2001082313392600

  Modified files:
    ossp-pkg/srpc/libamp    amp.h

  Log:
    Added connect() to amp_engine_t.

  Summary:
    Revision    Changes     Path
    1.3         +14 -10     ossp-pkg/srpc/libamp/amp.h
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libamp/amp.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 amp.h
  --- ossp-pkg/srpc/libamp/amp.h	2001/08/23 12:34:40	1.2
  +++ ossp-pkg/srpc/libamp/amp.h	2001/08/23 12:39:26	1.3
  @@ -10,18 +10,19 @@
   typedef struct
       {
       int (*listen) (int fd, int backlog);
  -    int (*accept) (int fd, struct sockaddr *addr, socklen_t *addrlen);
  -    int (*bind) (int fd, const struct sockaddr *addr, socklen_t addrlen);
  -    ssize_t (*read) (int fd, void *buf, size_t nbytes);
  -    ssize_t (*readv) (int fd, const struct iovec *iov, int iovcnt);
  +    int (*accept) (int fd, struct sockaddr* addr, socklen_t* addrlen);
  +    int (*bind) (int fd, const struct sockaddr* addr, socklen_t addrlen);
  +    int (*connect)(int fd, const struct sockaddr* name, socklen_t namelen);
  +    ssize_t (*read) (int fd, void* buf, size_t nbytes);
  +    ssize_t (*readv) (int fd, const struct iovec* iov, int iovcnt);
       ssize_t (*write) (int fd, const void* buf, size_t nbytes);
       ssize_t (*writev) (int fd, const struct iovec* iov, int iovcnt);
  -    ssize_t (*send)(int s, const void *msg, size_t len, int flags);
  -    ssize_t (*sendto)(int s, const void *msg, size_t len, int flags,
  -		      const struct sockaddr *to, socklen_t tolen);
  -    ssize_t (*recv)(int s, void *buf, size_t len, int flags);
  -    ssize_t (*recvfrom)(int s, void *buf, size_t len, int flags, struct sockaddr *from,
  -			socklen_t *fromlen);
  +    ssize_t (*send)(int s, const void* msg, size_t len, int flags);
  +    ssize_t (*sendto)(int s, const void* msg, size_t len, int flags,
  +		      const struct sockaddr* to, socklen_t tolen);
  +    ssize_t (*recv)(int s, void* buf, size_t len, int flags);
  +    ssize_t (*recvfrom)(int s, void* buf, size_t len, int flags, struct sockaddr* from,
  +			socklen_t* fromlen);
       }
   amp_engine_t;
   
  @@ -31,6 +32,9 @@
       amp_engine_t engine;
       }
   amp_peer_t;
  +
  +amp_peer_t* amp_create_message_port(const char* engine, const char* peer);
  +int amp_destroy_message_port(amp_peer_t* peer);
   
   amp_peer_t* amp_create_peer(const char* engine, const char* peer);
   int amp_destroy_peer(amp_peer_t* peer);

From ossp-cvs-owner@ossp.org  Thu Aug 23 14:41:14 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7NCfDn61089; Thu, 23 Aug 2001 14:41:13 +0200 (CEST)
Date: Thu, 23 Aug 2001 14:41:13 +0200 (CEST)
Message-Id: <200108231241.f7NCfDn61089@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libamp amp.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   23-Aug-2001 14:41:13
  Branch: HEAD                             Handle: 2001082313411200

  Modified files:
    ossp-pkg/srpc/libamp    amp.h

  Log:
    Added prototypes of routines mapping between amp_peer_t and fd.

  Summary:
    Revision    Changes     Path
    1.4         +3  -0      ossp-pkg/srpc/libamp/amp.h
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libamp/amp.h
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 amp.h
  --- ossp-pkg/srpc/libamp/amp.h	2001/08/23 12:39:26	1.3
  +++ ossp-pkg/srpc/libamp/amp.h	2001/08/23 12:41:12	1.4
  @@ -39,6 +39,9 @@
   amp_peer_t* amp_create_peer(const char* engine, const char* peer);
   int amp_destroy_peer(amp_peer_t* peer);
   
  +int amp_peer2fd(amp_peer_t* peer);
  +amp_peer_t* amp_fd2peer(int fd);
  +
   int amp_send(amp_peer_t* peer, const void* msg, size_t msg_len);
   int amp_receive(amp_peer_t* peer, const void** msg, size_t* msg_len);
   

From ossp-cvs-owner@ossp.org  Thu Aug 23 14:42:51 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7NCgol61239; Thu, 23 Aug 2001 14:42:50 +0200 (CEST)
Date: Thu, 23 Aug 2001 14:42:50 +0200 (CEST)
Message-Id: <200108231242.f7NCgol61239@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libamp amp.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   23-Aug-2001 14:42:50
  Branch: HEAD                             Handle: 2001082313424900

  Modified files:
    ossp-pkg/srpc/libamp    amp.h

  Log:
    amp_create_xxx() now expects an amp_engine_t* as parameter.

  Summary:
    Revision    Changes     Path
    1.5         +2  -2      ossp-pkg/srpc/libamp/amp.h
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libamp/amp.h
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 amp.h
  --- ossp-pkg/srpc/libamp/amp.h	2001/08/23 12:41:12	1.4
  +++ ossp-pkg/srpc/libamp/amp.h	2001/08/23 12:42:49	1.5
  @@ -33,10 +33,10 @@
       }
   amp_peer_t;
   
  -amp_peer_t* amp_create_message_port(const char* engine, const char* peer);
  +amp_peer_t* amp_create_message_port(const char* peer, amp_engine_t* engine);
   int amp_destroy_message_port(amp_peer_t* peer);
   
  -amp_peer_t* amp_create_peer(const char* engine, const char* peer);
  +amp_peer_t* amp_create_peer(const char* peer, const char* engine);
   int amp_destroy_peer(amp_peer_t* peer);
   
   int amp_peer2fd(amp_peer_t* peer);

From ossp-cvs-owner@ossp.org  Thu Aug 23 14:43:28 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7NChRW61315; Thu, 23 Aug 2001 14:43:27 +0200 (CEST)
Date: Thu, 23 Aug 2001 14:43:27 +0200 (CEST)
Message-Id: <200108231243.f7NChRW61315@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libamp amp.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   23-Aug-2001 14:43:27
  Branch: HEAD                             Handle: 2001082313432600

  Modified files:
    ossp-pkg/srpc/libamp    amp.h

  Log:
    Remove unnecessary whitespace.

  Summary:
    Revision    Changes     Path
    1.6         +7  -7      ossp-pkg/srpc/libamp/amp.h
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libamp/amp.h
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 amp.h
  --- ossp-pkg/srpc/libamp/amp.h	2001/08/23 12:42:49	1.5
  +++ ossp-pkg/srpc/libamp/amp.h	2001/08/23 12:43:26	1.6
  @@ -9,14 +9,14 @@
   
   typedef struct
       {
  -    int (*listen) (int fd, int backlog);
  -    int (*accept) (int fd, struct sockaddr* addr, socklen_t* addrlen);
  -    int (*bind) (int fd, const struct sockaddr* addr, socklen_t addrlen);
  +    int (*listen)(int fd, int backlog);
  +    int (*accept)(int fd, struct sockaddr* addr, socklen_t* addrlen);
  +    int (*bind)(int fd, const struct sockaddr* addr, socklen_t addrlen);
       int (*connect)(int fd, const struct sockaddr* name, socklen_t namelen);
  -    ssize_t (*read) (int fd, void* buf, size_t nbytes);
  -    ssize_t (*readv) (int fd, const struct iovec* iov, int iovcnt);
  -    ssize_t (*write) (int fd, const void* buf, size_t nbytes);
  -    ssize_t (*writev) (int fd, const struct iovec* iov, int iovcnt);
  +    ssize_t (*read)(int fd, void* buf, size_t nbytes);
  +    ssize_t (*readv)(int fd, const struct iovec* iov, int iovcnt);
  +    ssize_t (*write)(int fd, const void* buf, size_t nbytes);
  +    ssize_t (*writev)(int fd, const struct iovec* iov, int iovcnt);
       ssize_t (*send)(int s, const void* msg, size_t len, int flags);
       ssize_t (*sendto)(int s, const void* msg, size_t len, int flags,
   		      const struct sockaddr* to, socklen_t tolen);

From ossp-cvs-owner@ossp.org  Thu Aug 23 16:00:21 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7NE0KI72027; Thu, 23 Aug 2001 16:00:20 +0200 (CEST)
Date: Thu, 23 Aug 2001 16:00:20 +0200 (CEST)
Message-Id: <200108231400.f7NE0KI72027@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/petidomo README
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   23-Aug-2001 16:00:20
  Branch: HEAD                             Handle: 2001082315002000

  Modified files:
    ossp-pkg/petidomo       README

  Log:
    Added a more apropriate README text, which can also be re-used for the
    web site.

  Summary:
    Revision    Changes     Path
    1.5         +44 -89     ossp-pkg/petidomo/README
  ____________________________________________________________________________

  Index: ossp-pkg/petidomo/README
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 README
  --- ossp-pkg/petidomo/README	2001/01/18 20:30:50	1.4
  +++ ossp-pkg/petidomo/README	2001/08/23 14:00:20	1.5
  @@ -1,90 +1,45 @@
  +			  OSSP Petidomo 4.0
   
  -		    Petidomo Mailing List Manager
  -			  Version 4
  -
  -
  -Greetings citizen,
  -
  -I know how  tedious reading "manuals"  is when you're eager to install
  -the new  software,  so  I'll keep  it   as short as  possible.  Before
  -Petidomo can  be   installed, either  from  a   binary or  a    source
  -distribution, you -must- do the following:
  -
  - 1) Create a user of the name "petidomo".
  -
  -    The petidomo-user is needed by the software,  but will usually not
  -    be used to  log into  the system,  so you should  set the password
  -    entry   to   "*"  and  the  login   shell   to "/usr/bin/true"  or
  -    "/sbin/nologin" -- depending on what your system uses.
  -
  -
  - 2) Create a group of the name "petidomo".
  -
  -    This group should contain all users of your system who are allowed
  -    to  administrate Petidomo or for  other reasons need access to the
  -    installation. The  "petidomo" user  should be   a member  of  this
  -    group, too, even though this is not strictly necessary.
  -
  -
  - 3) Create the home directory of the "petidomo" user.
  -
  -    The home directory  is the place  where  the package will  live. A
  -    good  place   is "/usr/local/petidomo",   but   you  can  place it
  -    wherever it suits your installation.
  -
  -
  -Once  the user, the  group and  the directory  exist, you can  use the
  -following mechanisms to do the actual installation.
  -
  -If you're upgrading  from  Petidomo 2.0 and  have  some  mailing lists
  -installed  already, you  can safely use   these mechanisms, too. In no
  -event  will the installation procedure  overwrite your config files or
  -change anything except for the actual binaries.
  -
  -The installation itself works as follows:
  -
  - Binary distribution:
  -
  -    Become 'root' and   start  the "install.sh" script,  which  can be
  -    found in the same directory as this file. install.sh will populate
  -    the home  directory of the  petidomo user and  insert the required
  -    mail  aliases  into  /etc/aliases.  Then  it will install  the CGI
  -    config manager and that's it: Petidomo is ready to run.
  -
  -
  - Source distribution:
  -
  -    Obviously you  need to compile the sources  first of all. In order
  -    to compile Petidomo, you will need the following tools:
  -
  -     - a C compiler, preferably gcc or egcs
  -
  -     - a  version of   make(1)  that  understands   the "include"  and
  -       ".PHONY" statement (use GNU make if your native make doesn't)
  -
  -     - flex, the GNU version of lex
  -
  -     - bison, the  GNU version of yacc,  at least version  1.25. Older
  -       version -might- work,  but I had   problems with them,  because
  -       they're lacking the YYERROR_VERBOSE mechanism.
  -
  -    If  you have all  these tools,  you can  compile Petidomo with the
  -    following commands:
  -
  -      $ make
  -      $ make install      (must be done as root)
  -
  -
  -In  case you experience any  problems  you're not  able to fix, you're
  -welcome to file a problem report  with the "send-pr" utility, included
  -in  the distribution.   You   might  also  want    to check out    the
  -petidomo-users mailing list, to which  you can subscribe by sending  a
  -SUBSCRIBE command to the following address:
  -
  -   petidomo-users-request@petidomo.com
  -
  -Okay, I hope you'll find the Petidomo Mailing List Manager useful, and
  -may the force be with you!
  -
  -
  -                                    Peter Simons <simons@petidomo.com>
  +On December 12th, 2000, CyberSolutions GmbH published a version of
  +Petidomo 2.2 under the GNU General Public License. The OSSP project
  +enhanced that version significantly and hereby releases the result of
  +its efforts as »OSSP Petidomo 4.0«. OSSP Petidomo is a small but
  +powerful package that can be used to host and maintain mailing lists
  +on an Unix machine. Its only requirement is that there is a working
  +mail transport agent installed, such as sendmail.
  +
  +OSSP Petidomo has -- among other things -- the following features:
  +
  + * A simple-to-use e-mail command interface, which can be used by
  +   users and administrators of a mailing list to subscribe or
  +   unsubscribe addresses, approve postings that have been deferred or
  +   rejected, list all subscribed addresses of a list, etc.
  +
  + * Petidomo supports various modes of operation for a mailing list
  +   such as open lists, closed lists, and moderated lists.
  +
  + * Mailing list subscriptions or postings can be verified by requiring
  +   an acknowledgement. This feature is particularly useful when used
  +   for mailing list postings as it will keep the vast majority of all
  +   spam mail off the list.
  +
  + * Petidomo can host an arbitrary number of mailing lists in entirely
  +   different domain name spaces -- also known as »Virtual Hosting«.
  +
  + * A powerful »Access Control Language« (ACL) can be used to reject,
  +   approve, drop, or redirect postings or subscription attempts.
  +
  + * Mailing list postings can be piped through an external »Posting
  +   Filter«, which can modify the article before it's delivered in any
  +   way it sees fit.
  +
  + * Petidomo can be configured to add arbitrary headers to any mail
  +   that's posted on a mailing list.
  +
  + * Petidomo can be configured to add a signature to any mail that's
  +   posted on a mailing list.
  +
  +The whole package is written in ISO-C and should compile
  +out-of-the-box on any POSIX.1 compliant system that provides a mail
  +transport agent. It has been released under the GNU General Public
  +License.

From ossp-cvs-owner@ossp.org  Thu Aug 23 16:02:22 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7NE2Lk72412; Thu, 23 Aug 2001 16:02:21 +0200 (CEST)
Date: Thu, 23 Aug 2001 16:02:21 +0200 (CEST)
Message-Id: <200108231402.f7NE2Lk72412@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/petidomo README
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   23-Aug-2001 16:02:21
  Branch: HEAD                             Handle: 2001082315022100

  Modified files:
    ossp-pkg/petidomo       README

  Log:
    Replaced tabs by blanks to make the formatting more robust.

  Summary:
    Revision    Changes     Path
    1.6         +1  -1      ossp-pkg/petidomo/README
  ____________________________________________________________________________

  Index: ossp-pkg/petidomo/README
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 README
  --- ossp-pkg/petidomo/README	2001/08/23 14:00:20	1.5
  +++ ossp-pkg/petidomo/README	2001/08/23 14:02:21	1.6
  @@ -1,4 +1,4 @@
  -			  OSSP Petidomo 4.0
  +                          OSSP Petidomo 4.0
   
   On December 12th, 2000, CyberSolutions GmbH published a version of
   Petidomo 2.2 under the GNU General Public License. The OSSP project

From ossp-cvs-owner@ossp.org  Thu Aug 23 16:03:32 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7NE3UD72776; Thu, 23 Aug 2001 16:03:30 +0200 (CEST)
Date: Thu, 23 Aug 2001 16:03:30 +0200 (CEST)
Message-Id: <200108231403.f7NE3UD72776@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp version.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   23-Aug-2001 16:03:30
  Branch: HEAD                             Handle: 2001082315033000

  Modified files:
    ossp-pkg/lmtp2nntp      version.c

  Log:
    bump version for release

  Summary:
    Revision    Changes     Path
    1.3         +9  -9      ossp-pkg/lmtp2nntp/version.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/version.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 version.c
  --- ossp-pkg/lmtp2nntp/version.c	2001/08/20 14:41:56	1.2
  +++ ossp-pkg/lmtp2nntp/version.c	2001/08/23 14:03:30	1.3
  @@ -8,7 +8,7 @@
   #ifndef _VERSION_C_
   #define _VERSION_C_
   
  -#define LMTP2NNTP_VERSION 0x009201
  +#define LMTP2NNTP_VERSION 0x009202
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _VERSION_C_AS_HEADER_
   
   lmtp2nntp_version_t lmtp2nntp_version = {
  -    0x009201,
  -    "0.9.1",
  -    "0.9.1 (20-Aug-2001)",
  -    "This is lmtp2nntp, Version 0.9.1 (20-Aug-2001)",
  -    "lmtp2nntp 0.9.1 (20-Aug-2001)",
  -    "lmtp2nntp/0.9.1",
  -    "@(#)lmtp2nntp 0.9.1 (20-Aug-2001)",
  -    "$Id: version.c,v 1.2 2001/08/20 14:41:56 thl Exp $"
  +    0x009202,
  +    "0.9.2",
  +    "0.9.2 (23-Aug-2001)",
  +    "This is lmtp2nntp, Version 0.9.2 (23-Aug-2001)",
  +    "lmtp2nntp 0.9.2 (23-Aug-2001)",
  +    "lmtp2nntp/0.9.2",
  +    "@(#)lmtp2nntp 0.9.2 (23-Aug-2001)",
  +    "$Id: version.c,v 1.3 2001/08/23 14:03:30 thl Exp $"
   };
   
   #endif /* _VERSION_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Fri Aug 24 17:15:24 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7OFFMF70660; Fri, 24 Aug 2001 17:15:22 +0200 (CEST)
Date: Fri, 24 Aug 2001 17:15:22 +0200 (CEST)
Message-Id: <200108241515.f7OFFMF70660@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   24-Aug-2001 17:15:22
  Branch: HEAD                             Handle: 2001082416152200

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    Added one more loggin level definition.

  Summary:
    Revision    Changes     Path
    1.10        +1  -0      ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 TODO
  --- ossp-pkg/l2/TODO	2001/08/22 18:09:17	1.9
  +++ ossp-pkg/l2/TODO	2001/08/24 15:15:22	1.10
  @@ -117,6 +117,7 @@
   - INFO
   - TRACE    (-> LOG_DEBUG)
   - DEBUG    (-> LOG_DEBUG)
  +- ALERT
   
   Level Entscheidungen:
   >= (default)

From ossp-cvs-owner@ossp.org  Fri Aug 24 17:15:48 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7OFFlI70746; Fri, 24 Aug 2001 17:15:47 +0200 (CEST)
Date: Fri, 24 Aug 2001 17:15:47 +0200 (CEST)
Message-Id: <200108241515.f7OFFlI70746@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_epreuve.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   24-Aug-2001 17:15:47
  Branch: HEAD                             Handle: 2001082416154700

  Modified files:
    ossp-pkg/l2             l2_epreuve.c

  Log:
    Some output format changes.

  Summary:
    Revision    Changes     Path
    1.4         +2  -2      ossp-pkg/l2/l2_epreuve.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_epreuve.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 l2_epreuve.c
  --- ossp-pkg/l2/l2_epreuve.c	2001/08/23 05:32:45	1.3
  +++ ossp-pkg/l2/l2_epreuve.c	2001/08/24 15:15:47	1.4
  @@ -82,10 +82,9 @@
           return 1;
   
       /* Need to add extra bytes to string length to allow for the text we add */
  -    iMsgSize = strlen(pszArgs[L2_MESSAGEARG]) + strlen(L2_VONBUFSTRING);
  +    iMsgSize = strlen(pszArgs[L2_MESSAGEARG]);
       pszMsgIn = malloc(iMsgSize);
       strcpy(pszMsgIn, pszArgs[L2_MESSAGEARG]);
  -    strcat(pszMsgIn, L2_VONBUFSTRING);
       iRet = l2_channel_write(pMyBChannel, pszMsgIn, iMsgSize);
       if (iRet != L2_OK)
           return 1;
  @@ -96,6 +95,7 @@
       fprintf(stderr, "0x%X octets Speichersize.\n",\
           (int)(*((char **)pMyBChannel->context.vp + 2)));
       fprintf(stderr, *(char **)pMyBChannel->context.vp);
  +    fprintf(stderr, " von de Buffer\n");
   
       iRet = l2_channel_flush(pMyBChannel);
       if (iRet != L2_OK)

From ossp-cvs-owner@ossp.org  Fri Aug 24 17:16:45 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7OFGim70832; Fri, 24 Aug 2001 17:16:44 +0200 (CEST)
Date: Fri, 24 Aug 2001 17:16:44 +0200 (CEST)
Message-Id: <200108241516.f7OFGim70832@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_buffer.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   24-Aug-2001 17:16:44
  Branch: HEAD                             Handle: 2001082416164300

  Modified files:
    ossp-pkg/l2             l2_ch_buffer.c

  Log:
    Conforms to doc (mostly comments) standard set by l2_ch_file.c.

  Summary:
    Revision    Changes     Path
    1.8         +45 -3      ossp-pkg/l2/l2_ch_buffer.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_buffer.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 l2_ch_buffer.c
  --- ossp-pkg/l2/l2_ch_buffer.c	2001/08/23 05:30:58	1.7
  +++ ossp-pkg/l2/l2_ch_buffer.c	2001/08/24 15:16:43	1.8
  @@ -32,33 +32,45 @@
   
   #include <string.h>
   
  +/* declare private channel configuration */
   typedef struct {
       char  *buf;
       int    bufpos;
       int    bufsize;
   } l2_ch_buffer_t;
   
  +/* create channel */
   static int hook_create(l2_context_t *ctx)
   {
       l2_ch_buffer_t *cfg;
   
  +    /* allocate private channel configuration */
       if ((cfg = (l2_ch_buffer_t *)malloc(sizeof(l2_ch_buffer_t))) == NULL)
           return L2_ERROR;
  +
  +    /* initialize configuration with reasonable defaults */
       cfg->buf     = NULL;
       cfg->bufpos  = 0;
       cfg->bufsize = 4096;
  +
  +    /* link private channel configuration into channel context */
       ctx->vp = cfg;
  +
       return L2_OK;
   }
   
  +/* configure channel */
   static int hook_configure(l2_context_t *ctx, const char *fmt, va_list ap)
   {
       l2_ch_buffer_t *cfg;
       l2_param_t pa[3]; 
       l2_result_t rv;
   
  +    /* parameter checks */
       if ((cfg = (l2_ch_buffer_t *)ctx->vp) == NULL)
           return L2_ERROR;
  +
  +    /* feed and call generic parameter parsing engine */
       L2_PARAM_SET(pa[0], size, INT, &cfg->bufsize);
       L2_PARAM_END(pa[2]);
       rv = l2_channel_setparams(pa, fmt, ap);
  @@ -67,89 +79,119 @@
       return rv;
   }
   
  +/* open channel */
   static int hook_open(l2_context_t *ctx, l2_channel_t *downstream)
   {
       l2_ch_buffer_t *cfg;
   
  +    /* parameter checks */
       if ((cfg = (l2_ch_buffer_t *)ctx->vp) == NULL)
           return L2_ERROR;
  +
  +    /* open channel buffer */
       if (cfg->bufsize > 0) {
           if ((cfg->buf = malloc(cfg->bufsize)) == NULL)
               return L2_ERROR;
           cfg->bufpos = 0;
       }
  +
  +    /* optionally open downstream channel, too */
       if (downstream != NULL)
           if (l2_channel_open(downstream) == L2_ERROR)
               return L2_ERROR;
  +
       return L2_OK;
   }
   
  +/* write to channel */
   static int hook_write(l2_context_t *ctx, l2_channel_t *downstream, 
                         const char *buf, size_t bufsize)
   {
       l2_ch_buffer_t *cfg;
   
  +    /* parameter checks */
       if ((cfg = (l2_ch_buffer_t *)ctx->vp) == NULL)
           return L2_ERROR;
  -
       if (bufsize > (cfg->bufsize - cfg->bufpos))
           return L2_ERROR; /* The buffer is too small */
   
  +    /* write message to channel buffer */
       memcpy(cfg->buf+cfg->bufpos, buf, bufsize);
       cfg->bufpos += bufsize;
   
       return L2_OK;
   }
   
  +/* flush channel */
   static int hook_flush(l2_context_t *ctx, l2_channel_t *downstream)
   {
       l2_ch_buffer_t *cfg;
   
  +    /* parameter checks */
       if ((cfg = (l2_ch_buffer_t *)ctx->vp) == NULL)
           return L2_ERROR;
   
  +    /* write the buffer contents downstream */
       if (cfg->bufpos > 0) {
           if (downstream != NULL)
               if (l2_channel_write(downstream, cfg->buf, cfg->bufpos) == L2_ERROR)
                   return L2_ERROR;
           cfg->bufpos = 0;
  -        memset(cfg->buf, 0x5A, cfg->bufsize); /* Guard against improper usage */
       }
   
  +    /* optionally flush downstream channel, too */
       if (downstream != NULL)
           if (l2_channel_flush(downstream) == L2_ERROR)
               return L2_ERROR;
  +
       return L2_OK;
   }
   
  +/* close channel */
   static int hook_close(l2_context_t *ctx, l2_channel_t *downstream)
   {
       l2_ch_buffer_t *cfg;
   
  +    /* optionally close downstream channel, too */
       if (downstream != NULL)
           if (l2_channel_close(downstream) == L2_ERROR)
               return L2_ERROR;
  +
  +    /* parameter checks */
       if ((cfg = (l2_ch_buffer_t *)ctx->vp) == NULL)
           return L2_ERROR;
  +
  +    /* close channel buffer */
       if (cfg->buf != NULL) {
           free(cfg->buf);
           cfg->buf = NULL;
       }
  +
       return L2_OK;
   }
   
  +/* destroy channel */
   static int hook_destroy(l2_context_t *ctx)
   {
       l2_ch_buffer_t *cfg;
   
  +    /* parameter checks */
       if ((cfg = (l2_ch_buffer_t *)ctx->vp) == NULL)
           return L2_ERROR;
  -    if (cfg->buf != NULL) 
  +
  +    /* if not already closed, close channel buffer now */
  +    if (cfg->buf != NULL) {
           free(cfg->buf);
  +        cfg->buf = NULL;
  +    }
  +
  +    /* destroy channel configuration */
       free(cfg);
  +
       return L2_OK;
   }
   
  +/* exported channel handler structure */
   l2_handler_t l2_handler_buffer = {
       hook_create,
       hook_configure,

From ossp-cvs-owner@ossp.org  Sat Aug 25 20:27:50 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7PIRnJ73914; Sat, 25 Aug 2001 20:27:49 +0200 (CEST)
Date: Sat, 25 Aug 2001 20:27:49 +0200 (CEST)
Message-Id: <200108251827.f7PIRnJ73914@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_syslog.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   25-Aug-2001 20:27:49
  Branch: HEAD                             Handle: 2001082519274800

  Modified files:
    ossp-pkg/l2             l2_ch_syslog.c

  Log:
    Upgraded skeleton of syslog channel module.

  Summary:
    Revision    Changes     Path
    1.7         +97 -2      ossp-pkg/l2/l2_ch_syslog.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_syslog.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 l2_ch_syslog.c
  --- ossp-pkg/l2/l2_ch_syslog.c	2001/08/15 10:36:03	1.6
  +++ ossp-pkg/l2/l2_ch_syslog.c	2001/08/25 18:27:48	1.7
  @@ -32,42 +32,137 @@
   
   #include <syslog.h>
   
  +/* declare private channel configuration */
  +typedef struct {
  +    int iEtwas;
  +    char *pszNada;
  +} l2_ch_syslog_t;
  +
  +/* create channel */
   static int hook_create(l2_context_t *ctx)
   {
  +    l2_ch_syslog_t *cfg;
  +
  +    /* allocate private channel configuration */
  +
  +    /* initialize configuration with reasonable defaults */
  +
  +    /* link private channel configuration into channel context */
  +
       return L2_OK;
   }
   
  +/* configure channel */
   static int hook_configure(l2_context_t *ctx, const char *fmt, va_list ap)
   {
  -    return L2_OK;
  +    l2_ch_syslog_t *cfg;
  +    l2_param_t pa[3]; 
  +    l2_result_t rv;
  +
  +    /* parameter checks */
  +    if ((cfg = (l2_ch_syslog_t *)ctx->vp) == NULL)
  +        return L2_ERROR;
  +
  +    /* feed and call generic parameter parsing engine */
  +    L2_PARAM_SET(pa[0], iEtwas,   CHARPTR, &cfg->iEtwas);
  +    L2_PARAM_SET(pa[1], pszNada, INT,     &cfg->pszNada);
  +    L2_PARAM_END(pa[2]);
  +    rv = l2_channel_setparams(pa, fmt, ap);
  +
  +    return rv;
   }
   
  +/* open channel */
   static int hook_open(l2_context_t *ctx, l2_channel_t *downstream)
   {
  +    l2_ch_syslog_t *cfg;
  +
  +    /* parameter checks */
  +    if ((cfg = (l2_ch_syslog_t *)ctx->vp) == NULL)
  +        return L2_ERROR;
  +    if (cfg->pszNada == NULL) /* ATTENTION */
  +        return L2_ERROR;
  +
  +    /* open channel syslog */
  +
  +    /* optionally open downstream channel, too */
  +    if (downstream != NULL)
  +        if (l2_channel_open(downstream) == L2_ERROR)
  +            return L2_ERROR;
  +
       return L2_OK;
   }
   
  -static int hook_write(l2_context_t *ctx, l2_channel_t *downstream,
  +/* write to channel */
  +static int hook_write(l2_context_t *ctx, l2_channel_t *downstream, 
                         const char *buf, size_t buf_size)
   {
  +    l2_ch_syslog_t *cfg;
  +
  +    /* parameter checks */
  +    if ((cfg = (l2_ch_syslog_t *)ctx->vp) == NULL)
  +        return L2_ERROR;
  +
  +    /* write message to channel syslog */
  +
  +    /* optionally write to downstream channel, too */
  +    if (downstream != NULL)
  +        if (l2_channel_write(downstream, buf, buf_size) == L2_ERROR)
  +            return L2_ERROR;
  +
       return L2_OK;
   }
   
  +/* flush channel */
   static int hook_flush(l2_context_t *ctx, l2_channel_t *downstream)
   {
  +    l2_ch_syslog_t *cfg;
  +
  +    /* parameter checks */
  +    if ((cfg = (l2_ch_syslog_t *)ctx->vp) == NULL)
  +        return L2_ERROR;
  +
  +    /* optionally flush downstream channel, too */
  +    if (downstream != NULL)
  +        if (l2_channel_flush(downstream) == L2_ERROR)
  +            return L2_ERROR;
  +
       return L2_OK;
   }
   
  +/* close channel */
   static int hook_close(l2_context_t *ctx, l2_channel_t *downstream)
   {
  +    l2_ch_syslog_t *cfg;
  +
  +    /* optionally close downstream channel, too */
  +    if (downstream != NULL)
  +        if (l2_channel_close(downstream) == L2_ERROR)
  +            return L2_ERROR;
  +
  +    /* parameter checks */
  +    if ((cfg = (l2_ch_syslog_t *)ctx->vp) == NULL)
  +        return L2_ERROR;
  +
  +    /* close channel syslog */
  +
       return L2_OK;
   }
   
  +/* destroy channel */
   static int hook_destroy(l2_context_t *ctx)
   {
  +    /* parameter checks */
  +    if (ctx->vp == NULL) 
  +        return L2_ERROR;
  +
  +    /* destroy channel configuration */
  +    free(ctx->vp);
  +
       return L2_OK;
   }
   
  +/* exported channel handler structure */
   l2_handler_t l2_handler_syslog = {
       hook_create,
       hook_configure,

From ossp-cvs-owner@ossp.org  Sun Aug 26 14:59:57 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7QCxuM09159; Sun, 26 Aug 2001 14:59:56 +0200 (CEST)
Date: Sun, 26 Aug 2001 14:59:56 +0200 (CEST)
Message-Id: <200108261259.f7QCxuM09159@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   26-Aug-2001 14:59:56
  Branch: HEAD                             Handle: 2001082613595500

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    Added syslog channel remarks and question about using a pointer reference.

  Summary:
    Revision    Changes     Path
    1.11        +19 -0      ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 TODO
  --- ossp-pkg/l2/TODO	2001/08/24 15:15:22	1.10
  +++ ossp-pkg/l2/TODO	2001/08/26 12:59:55	1.11
  @@ -34,6 +34,12 @@
   o hook_write's should perhaps receive a nul-termined string
     instead of buf+size, because syslog else has to re-buffer it.
   
  +QUESTIONS
  +---------
  +
  +o Should the following line copy the string or just use the reference?
  +    L2_PARAM_SET(pa[0], ident,   CHARPTR,  &cfg->pszIdent);
  +
   BRAINSTORMING
   -------------
   
  @@ -74,6 +80,14 @@
       erase, what happens to its data when it is over
       written or flushed...
   
  +o syslog
  +    many options need docu, and we should mention to
  +    the user that more info is found in the man page
  +    for syslog(), because after all that is what is
  +    doing all the work in our implementation. Also,
  +    can we really properly document these features
  +    if they change from one system's syslog to the next?
  +
   o errors
       when a channel fails during an operation, how
       does it report this? How should a user interpret
  @@ -86,6 +100,11 @@
   Braindump:
   - debugging is special case of logging
   - tracing is special case of debugging
  +
  +Kanalen:
  +o Syslog Kanal
  +  - Trim down to what will be used, right now the
  +    channel supports ALL functionality through syslog(3)
   
   License:
   - ISC/MIT/BSD

From ossp-cvs-owner@ossp.org  Sun Aug 26 15:01:46 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7QD1jX09711; Sun, 26 Aug 2001 15:01:45 +0200 (CEST)
Date: Sun, 26 Aug 2001 15:01:45 +0200 (CEST)
Message-Id: <200108261301.f7QD1jX09711@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.h l2_p.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   26-Aug-2001 15:01:45
  Branch: HEAD                             Handle: 2001082614014500

  Modified files:
    ossp-pkg/l2             l2.h l2_p.h

  Log:
    Added unsigned short type to PARAMETER macros for sockaddr_in struct.

  Summary:
    Revision    Changes     Path
    1.9         +1  -0      ossp-pkg/l2/l2.h
    1.6         +3  -0      ossp-pkg/l2/l2_p.h
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2.h
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 l2.h
  --- ossp-pkg/l2/l2.h	2001/08/15 10:36:03	1.8
  +++ ossp-pkg/l2/l2.h	2001/08/26 13:01:45	1.9
  @@ -95,6 +95,7 @@
   typedef enum {
       L2_TYPE_CHAR,
       L2_TYPE_SHORT,
  +    L2_TYPE_USHORT,
       L2_TYPE_INT,
       L2_TYPE_LONG,
       L2_TYPE_FLOAT,
  Index: ossp-pkg/l2/l2_p.h
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 l2_p.h
  --- ossp-pkg/l2/l2_p.h	2001/08/15 10:36:03	1.5
  +++ ossp-pkg/l2/l2_p.h	2001/08/26 13:01:45	1.6
  @@ -36,6 +36,7 @@
   #define L2_MAX_MSGSIZE    4096
   #define L2_MAX_CHANNELS    128
   #define L2_MAX_FORMATTERS  128
  +#define L2_MAX_STRING      256
   
   typedef enum {
       L2_CHSTATE_CREATED,
  @@ -67,6 +68,8 @@
   #define _va_type_cast_char    char
   #define _va_type_recv_short   int
   #define _va_type_cast_short   short
  +#define _va_type_recv_ushort   int
  +#define _va_type_cast_ushort   short
   #define _va_type_recv_int     int
   #define _va_type_cast_int     int
   #define _va_type_recv_long    long

From ossp-cvs-owner@ossp.org  Sun Aug 26 15:02:29 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7QD2SP09789; Sun, 26 Aug 2001 15:02:28 +0200 (CEST)
Date: Sun, 26 Aug 2001 15:02:28 +0200 (CEST)
Message-Id: <200108261302.f7QD2SP09789@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_epreuve.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   26-Aug-2001 15:02:28
  Branch: HEAD                             Handle: 2001082614022700

  Modified files:
    ossp-pkg/l2             l2_epreuve.c

  Log:
    Added code to check syslog channel logic.

  Summary:
    Revision    Changes     Path
    1.5         +73 -8      ossp-pkg/l2/l2_epreuve.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_epreuve.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 l2_epreuve.c
  --- ossp-pkg/l2/l2_epreuve.c	2001/08/24 15:15:47	1.4
  +++ ossp-pkg/l2/l2_epreuve.c	2001/08/26 13:02:27	1.5
  @@ -30,17 +30,21 @@
       
   #include "l2.h"
   #include "l2_p.h"
  +#include <syslog.h>
   
  -#define L2_HEXBASE       16
  -#define L2_COMMANDARG     0
  -#define L2_BUFSIZEARG     1
  -#define L2_FILEARG        2
  -#define L2_MESSAGEARG     3
  -#define L2_VONBUFSTRING   " in L2_buffer.\n"
  -#define L2_VONFILESTRING  " von L2_file Kanal.\n"
  +#define L2_HEXBASE          16
  +#define L2_COMMANDARG        0
  +#define L2_BUFSIZEARG        1
  +#define L2_FILEARG           2
  +#define L2_MESSAGEARG        3
  +#define L2_VONBUFSTRING      " in L2_buffer.\n"
  +#define L2_VONFILESTRING     " von L2_file Kanal.\n"
  +#define L2_VONL2LIB          " L2Lib"
  +#define L2_VONSYSLOGSTRING   " von L2_syslog Kanal.\n"
   
   void throwup(char *);
   int trybuf(char **);
  +int trysyslog(char **);
   int tryfile(char **);
   
   /*--------------------------------------------------------*/
  @@ -113,6 +117,61 @@
   }
   
   /*--------------------------------------------------------*/
  +/* void trysyslog(char *pszArgs[])                        */
  +/* Test logic for the syslog channel handler              */
  +/*--------------------------------------------------------*/
  +int trysyslog(char *pszArgs[])
  +{
  +    int iRet                       = 0;
  +    int iMsgSize                   = 0;
  +    char *pszMsgIn                 = NULL;
  +    l2_channel_t *pMySChannel      = NULL;
  +    l2_handler_t *g_pSLogHandler   = &l2_handler_syslog;
  +
  +    fprintf(stdout, "Trying syslog channel handler...\n");
  +
  +    pMySChannel = l2_channel_create(g_pSLogHandler);
  +    if (pMySChannel == NULL)
  +        return 1;
  +
  +    /* Params "ident", <String>, "logopts", <LOG_?>, "facility", <LOG_?> */
  +    /*        "priority", <LOG_?>, "maskpriority", <LOG_?>               */
  +    iRet = l2_channel_configure(pMySChannel, "ident", L2_VONL2LIB,\
  +        "logopts", (LOG_PID|LOG_CONS), "facility", LOG_USER, "priority",\
  +        (LOG_CRIT|LOG_ALERT|LOG_NOTICE), "maskpriority", 0xFFFFFFFF);
  +    if (iRet != L2_OK)
  +        return 1;
  +
  +    iRet = l2_channel_open(pMySChannel);
  +    if (iRet != L2_OK)
  +        return 1;
  +
  +    /* Need to add n bytes to string length to allow for the text we add */
  +    iMsgSize = strlen(pszArgs[L2_MESSAGEARG]) + strlen(L2_VONSYSLOGSTRING);
  +    pszMsgIn = malloc(iMsgSize);
  +    strcpy(pszMsgIn, pszArgs[L2_MESSAGEARG]);
  +    strcat(pszMsgIn, L2_VONSYSLOGSTRING);
  +    iRet = l2_channel_write(pMySChannel, pszMsgIn, iMsgSize);
  +    if (iRet != L2_OK)
  +        return 1;
  +    free(pszMsgIn);
  +
  +    iRet = l2_channel_flush(pMySChannel);
  +    if (iRet != L2_OK)
  +        return 1;
  +
  +    iRet = l2_channel_close(pMySChannel);
  +    if (iRet != L2_OK)
  +        return 1;
  +
  +    iRet = l2_channel_destroy(pMySChannel);
  +    if (iRet != L2_OK)
  +        return 1;
  +
  +    return 0; /* All stages of execution completed successfully */
  +}
  +
  +/*--------------------------------------------------------*/
   /* void tryfile(char *pszArgs[])                          */
   /* Test logic for the file channel handler                */
   /*--------------------------------------------------------*/
  @@ -130,7 +189,7 @@
       if (pMyFChannel == NULL)
           return 1;
   
  -    /* Params "path", <File path>, "append", <TRUE/FALSE>, "perm", <0xValue>, */
  +    /* Params "path", <File path>, "append", <TRUE/FALSE>, "perm", <0xValue> */
       iRet = l2_channel_configure(pMyFChannel, "path", pszArgs[L2_FILEARG],\
           "append", TRUE, "perm", 0x755);
       if (iRet != L2_OK)
  @@ -182,6 +241,12 @@
       if (trybuf(argv))
       {
           throwup("Buffer channel handler failed!\n");
  +        exit(1);
  +    }
  +
  +    if (trysyslog(argv))
  +    {
  +        throwup("Syslog channel handler failed!\n");
           exit(1);
       }
   

From ossp-cvs-owner@ossp.org  Sun Aug 26 15:04:39 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7QD4cr09965; Sun, 26 Aug 2001 15:04:38 +0200 (CEST)
Date: Sun, 26 Aug 2001 15:04:38 +0200 (CEST)
Message-Id: <200108261304.f7QD4cr09965@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_channel.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   26-Aug-2001 15:04:38
  Branch: HEAD                             Handle: 2001082614043700

  Modified files:
    ossp-pkg/l2             l2_channel.c

  Log:
    Added unsigned short type to PARAMETER macros for sockaddr_in struct.

  Summary:
    Revision    Changes     Path
    1.6         +3  -0      ossp-pkg/l2/l2_channel.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_channel.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 l2_channel.c
  --- ossp-pkg/l2/l2_channel.c	2001/08/15 10:36:03	1.5
  +++ ossp-pkg/l2/l2_channel.c	2001/08/26 13:04:37	1.6
  @@ -210,6 +210,9 @@
                       case L2_TYPE_SHORT:
                           *(short *)(pa[i].store) = va_get(ap, short); 
                           break;
  +                    case L2_TYPE_USHORT:
  +                        *(unsigned short *)(pa[i].store) = va_get(ap, ushort); 
  +                        break;
                       case L2_TYPE_INT:
                           *(int *)(pa[i].store) = va_get(ap, int); 
                           break;

From ossp-cvs-owner@ossp.org  Sun Aug 26 15:05:43 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7QD5gQ10345; Sun, 26 Aug 2001 15:05:42 +0200 (CEST)
Date: Sun, 26 Aug 2001 15:05:42 +0200 (CEST)
Message-Id: <200108261305.f7QD5gQ10345@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_syslog.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   26-Aug-2001 15:05:42
  Branch: HEAD                             Handle: 2001082614054100

  Modified files:
    ossp-pkg/l2             l2_ch_syslog.c

  Log:
    Completed syslog channel implementation - might need trimming down.

  Summary:
    Revision    Changes     Path
    1.8         +24 -12     ossp-pkg/l2/l2_ch_syslog.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_syslog.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 l2_ch_syslog.c
  --- ossp-pkg/l2/l2_ch_syslog.c	2001/08/25 18:27:48	1.7
  +++ ossp-pkg/l2/l2_ch_syslog.c	2001/08/26 13:05:41	1.8
  @@ -34,8 +34,11 @@
   
   /* declare private channel configuration */
   typedef struct {
  -    int iEtwas;
  -    char *pszNada;
  +    char *pszIdent; /* String to prepend to each syslog message */
  +    int iLogopt;    /* Manipulates how kernel interacts with syslogd */
  +    int iFacility;  /* Which part of the system generates this message */
  +    int iPriority;  /* EMERG, ALERT, CRIT, ERR, WARNING, NOTICE, INFO... */
  +    int iMaskpri;   /* Controls which priorities are or are not logged */
   } l2_ch_syslog_t;
   
   /* create channel */
  @@ -44,10 +47,18 @@
       l2_ch_syslog_t *cfg;
   
       /* allocate private channel configuration */
  +    if ((cfg = (l2_ch_syslog_t *)malloc(sizeof(l2_ch_syslog_t))) == NULL)
  +        return L2_ERROR;
   
       /* initialize configuration with reasonable defaults */
  +    cfg->pszIdent  = NULL;
  +    cfg->iLogopt   = 0;
  +    cfg->iFacility = LOG_USER;
  +    cfg->iPriority = (LOG_DEBUG|LOG_ERR);
  +    cfg->iMaskpri  = (0xFFFFFFFF); /* Allow all priorities to pass through */
   
       /* link private channel configuration into channel context */
  +    ctx->vp = cfg;
   
       return L2_OK;
   }
  @@ -56,7 +67,7 @@
   static int hook_configure(l2_context_t *ctx, const char *fmt, va_list ap)
   {
       l2_ch_syslog_t *cfg;
  -    l2_param_t pa[3]; 
  +    l2_param_t pa[3];
       l2_result_t rv;
   
       /* parameter checks */
  @@ -64,8 +75,11 @@
           return L2_ERROR;
   
       /* feed and call generic parameter parsing engine */
  -    L2_PARAM_SET(pa[0], iEtwas,   CHARPTR, &cfg->iEtwas);
  -    L2_PARAM_SET(pa[1], pszNada, INT,     &cfg->pszNada);
  +    L2_PARAM_SET(pa[0], ident,   CHARPTR,  &cfg->pszIdent);
  +    L2_PARAM_SET(pa[1], logopts, INT,      &cfg->iLogopt);
  +    L2_PARAM_SET(pa[1], facility, INT,     &cfg->iFacility);
  +    L2_PARAM_SET(pa[1], priority, INT,     &cfg->iPriority);
  +    L2_PARAM_SET(pa[1], maskpriority, INT, &cfg->iMaskpri);
       L2_PARAM_END(pa[2]);
       rv = l2_channel_setparams(pa, fmt, ap);
   
  @@ -80,10 +94,10 @@
       /* parameter checks */
       if ((cfg = (l2_ch_syslog_t *)ctx->vp) == NULL)
           return L2_ERROR;
  -    if (cfg->pszNada == NULL) /* ATTENTION */
  -        return L2_ERROR;
   
       /* open channel syslog */
  +    openlog(cfg->pszIdent, cfg->iLogopt, cfg->iFacility);
  +    setlogmask(cfg->iMaskpri);
   
       /* optionally open downstream channel, too */
       if (downstream != NULL)
  @@ -104,6 +118,7 @@
           return L2_ERROR;
   
       /* write message to channel syslog */
  +    syslog(cfg->iPriority, buf);
   
       /* optionally write to downstream channel, too */
       if (downstream != NULL)
  @@ -116,11 +131,7 @@
   /* flush channel */
   static int hook_flush(l2_context_t *ctx, l2_channel_t *downstream)
   {
  -    l2_ch_syslog_t *cfg;
  -
  -    /* parameter checks */
  -    if ((cfg = (l2_ch_syslog_t *)ctx->vp) == NULL)
  -        return L2_ERROR;
  +    /* Noop for this channel, because syslog entries are unbuffered */
   
       /* optionally flush downstream channel, too */
       if (downstream != NULL)
  @@ -145,6 +156,7 @@
           return L2_ERROR;
   
       /* close channel syslog */
  +    closelog();
   
       return L2_OK;
   }

From ossp-cvs-owner@ossp.org  Sun Aug 26 15:07:29 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7QD7Sm10494; Sun, 26 Aug 2001 15:07:28 +0200 (CEST)
Date: Sun, 26 Aug 2001 15:07:28 +0200 (CEST)
Message-Id: <200108261307.f7QD7Sm10494@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_socket.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   26-Aug-2001 15:07:28
  Branch: HEAD                             Handle: 2001082614072700

  Modified files:
    ossp-pkg/l2             l2_ch_socket.c

  Log:
    Wrote the l2_ch_socket_t class, and its create and configure methods.

  Summary:
    Revision    Changes     Path
    1.5         +108 -1     ossp-pkg/l2/l2_ch_socket.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_socket.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 l2_ch_socket.c
  --- ossp-pkg/l2/l2_ch_socket.c	2001/08/15 10:36:03	1.4
  +++ ossp-pkg/l2/l2_ch_socket.c	2001/08/26 13:07:27	1.5
  @@ -30,42 +30,149 @@
   #include "l2.h"
   #include "l2_p.h"
   
  +#include <sys/types.h>
  +#include <sys/socket.h>
  +#include <netinet/in.h>
  +
  +/* declare private channel configuration */
  +typedef struct {
  +    int iSocket;             /* Socket descriptor                        */
  +    int iDomain;             /* Hardcoded to support only IPv4 and IPv6  */
  +    int iProtocol;           /* Hardcoded to support only IPv4 and IPv6  */
  +    int iType;               /* Hardcoded for writing streams to iSocket */
  +    struct sockaddr *pAddr;  /* Where do we open a socket?               */
  +} l2_ch_socket_t;
  +
  +/* create channel */
   static int hook_create(l2_context_t *ctx)
   {
  +    l2_ch_socket_t *cfg;
  +
  +    /* allocate private channel configuration */
  +    if ((cfg = (l2_ch_socket_t *)malloc(sizeof(l2_ch_socket_t))) == NULL)
  +        return L2_ERROR;
  +
  +    /* initialize configuration with reasonable defaults */
  +    cfg->iSocket   = 0;
  +    cfg->iDomain   = PF_INET;         /* Internet family             */
  +    cfg->iType     = SOCK_STREAM;     /* We write streams reliably   */
  +    cfg->iProtocol = IPPROTO_TCP;     /* TCP socket                  */
  +    cfg->pAddr      = NULL;
  +
  +    /* link private channel configuration into channel context */
  +    ctx->vp = cfg;
  +
       return L2_OK;
   }
   
  +/* configure channel */
   static int hook_configure(l2_context_t *ctx, const char *fmt, va_list ap)
   {
  -    return L2_OK;
  +    l2_ch_socket_t *cfg;
  +    char pszAddress[L2_MAX_STRING];
  +    unsigned short unInport;
  +    l2_param_t pa[3];
  +    l2_result_t rv;
  +
  +    unInport = 0;
  +
  +    /* parameter checks */
  +    if ((cfg = (l2_ch_socket_t *)ctx->vp) == NULL)
  +        return L2_ERROR;
  +
  +    /* feed and call generic parameter parsing engine */
  +    L2_PARAM_SET(pa[0], address, CHARPTR, pszAddress);
  +    L2_PARAM_SET(pa[1], port,    USHORT,     &unInport);
  +/* TODO: Fill in the cfg-> structure after building the socket */
  +    L2_PARAM_END(pa[2]);
  +    rv = l2_channel_setparams(pa, fmt, ap);
  +
  +    return rv;
   }
   
  +/* open channel */
   static int hook_open(l2_context_t *ctx, l2_channel_t *downstream)
   {
  +    l2_ch_socket_t *cfg;
  +
  +    /* parameter checks */
  +    if ((cfg = (l2_ch_socket_t *)ctx->vp) == NULL)
  +        return L2_ERROR;
  +
  +    /* open channel socket */
  +
  +    /* optionally open downstream channel, too */
  +    if (downstream != NULL)
  +        if (l2_channel_open(downstream) == L2_ERROR)
  +            return L2_ERROR;
  +
       return L2_OK;
   }
   
  +/* write to channel */
   static int hook_write(l2_context_t *ctx, l2_channel_t *downstream, 
                         const char *buf, size_t buf_size)
   {
  +    l2_ch_socket_t *cfg;
  +
  +    /* parameter checks */
  +    if ((cfg = (l2_ch_socket_t *)ctx->vp) == NULL)
  +        return L2_ERROR;
  +
  +    /* write message to channel socket */
  +
  +    /* optionally write to downstream channel, too */
  +    if (downstream != NULL)
  +        if (l2_channel_write(downstream, buf, buf_size) == L2_ERROR)
  +            return L2_ERROR;
  +
       return L2_OK;
   }
   
  +/* flush channel */
   static int hook_flush(l2_context_t *ctx, l2_channel_t *downstream)
   {
  +    /* optionally flush downstream channel, too */
  +    if (downstream != NULL)
  +        if (l2_channel_flush(downstream) == L2_ERROR)
  +            return L2_ERROR;
  +
       return L2_OK;
   }
   
  +/* close channel */
   static int hook_close(l2_context_t *ctx, l2_channel_t *downstream)
   {
  +    l2_ch_socket_t *cfg;
  +
  +    /* optionally close downstream channel, too */
  +    if (downstream != NULL)
  +        if (l2_channel_close(downstream) == L2_ERROR)
  +            return L2_ERROR;
  +
  +    /* parameter checks */
  +    if ((cfg = (l2_ch_socket_t *)ctx->vp) == NULL)
  +        return L2_ERROR;
  +
  +    /* close channel socket */
  +
       return L2_OK;
   }
   
  +/* destroy channel */
   static int hook_destroy(l2_context_t *ctx)
   {
  +    /* parameter checks */
  +    if (ctx->vp == NULL) 
  +        return L2_ERROR;
  +
  +    /* destroy channel configuration */
  +    free(ctx->vp);
  +
       return L2_OK;
   }
   
  +/* exported channel handler structure */
   l2_handler_t l2_handler_socket = {
       hook_create,
       hook_configure,

From ossp-cvs-owner@ossp.org  Mon Aug 27 15:45:55 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7RDjsX84597; Mon, 27 Aug 2001 15:45:54 +0200 (CEST)
Date: Mon, 27 Aug 2001 15:45:54 +0200 (CEST)
Message-Id: <200108271345.f7RDjsX84597@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO msg.c msg.h ossp-pkg/lmtp2nntp/t...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   27-Aug-2001 15:45:54
  Branch: HEAD                             Handle: 2001082714455300

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO msg.c msg.h
    ossp-pkg/lmtp2nntp/test run.sh testmessage.vialmtp

  Log:
    worked out all FIXMEs in msg.c; renamed SPLITSPLITBODY to SPLITHEADBODY - this
    was a search'n'replace accident; major changes in the "fold headers"
    functionality in msg_join(); modified str_parse calls to (re)use the now fixed
    [^not] operator; made workarounds for missing str_parse() functionality "s//g"
    and "malloc optimization" permanent; reviewed "Path: not-for-mail" issue and
    kept it as is; the "testmessage.vialmtp" now contains very long headers to be
    wrapped/ folded; updated 00TODO;

  Summary:
    Revision    Changes     Path
    1.16        +1  -0      ossp-pkg/lmtp2nntp/00TODO
    1.10        +42 -35     ossp-pkg/lmtp2nntp/msg.c
    1.4         +1  -1      ossp-pkg/lmtp2nntp/msg.h
    1.10        +1  -1      ossp-pkg/lmtp2nntp/test/run.sh
    1.3         +7  -2      ossp-pkg/lmtp2nntp/test/testmessage.vialmtp
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	2001/08/23 08:18:26	1.15
  +++ ossp-pkg/lmtp2nntp/00TODO	2001/08/27 13:45:53	1.16
  @@ -2,6 +2,7 @@
   M=NNNN im Sendmail ergaenzen (weil Postfix gar nix hat) durch
   -l Commandline options fuer Maximum Message Size
   
  +use "RFC1918-like" private Domainnames for @example.com (check which name is registered)
   whatsup draufleiten
   dmalloc
   FIXMEs
  Index: ossp-pkg/lmtp2nntp/msg.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 msg.c
  --- ossp-pkg/lmtp2nntp/msg.c	2001/08/23 09:12:30	1.9
  +++ ossp-pkg/lmtp2nntp/msg.c	2001/08/27 13:45:53	1.10
  @@ -39,7 +39,7 @@
   {
       if (msg == NULL)
           return;
  -                                             /*FIXME what about non-graceful aborts? */
  +
       if (msg->azEnvgroups != NULL)
           free(msg->azEnvgroups);
       if (msg->cpMsg != NULL)
  @@ -99,7 +99,7 @@
   
       /* split message into header and body */
       if (str_parse(msg->cpMsg, "m/((?:.*?)\\n)\\n(.*)$/s", &cpHeaders, &msg->cpBody) <= 0)
  -        return MSG_ERR_SPLITSPLITBODY;
  +        return MSG_ERR_SPLITHEADBODY;
   
       /* replace envelope From w/o colon by X-F: pseudotag. This eliminates the
        * special case of having one header, which is really an embedded
  @@ -110,19 +110,14 @@
           memcpy(cpHeaders, "X-F:", 4);
   
       /* unwrap header lines */
  -    /*FIXME poor man's s///g simulator as current str library doesn't support //global substitution */
  +    /* poor man's s///g simulator as current str library doesn't support global substitution */
       while (str_parse(cpHeaders, "s/(.*?)\\n[ \\t]+(.*)/$1 $2/s", &cpRem) > 0) {
           free(cpHeaders);
           cpHeaders = cpRem;
       }
   
       /* split header lines into names and values */
  -    /*FIXME str enhancement requests and bugs to be fixed */
  -    /*FIXME - fix bug "not" [^...] working */
  -    /*FIXME - improve str_parse(foo, "...", &foo) should free foo() on it's own */
  -    /*FIXME - add "global" in s/search/replace/g (see above "unwrap hader lines") */
  -    while (str_parse(cpHeaders, "m/^([\\w-]+?:)[ \\t]*(.*?)[ \\t]*\\n(.*)/s",
  -                     &cpName, &cpValue, &cpRem) > 0) {
  +    while (str_parse(cpHeaders, "m/^([\\w-]+?:)[ \\t]*([^\\n]*?)[ \\t]*\\n(.*)/s", &cpName, &cpValue, &cpRem) > 0) {
           free(cpHeaders);
           cpHeaders = cpRem;
           argz_add(&msg->azHeaders, &msg->asHeaders, cpName);
  @@ -194,7 +189,7 @@
               return MSG_ERR_MEM;
       }
       argz_add(&msg->azHeaders, &msg->asHeaders, "Path:");
  -    argz_add(&msg->azHeaders, &msg->asHeaders, "not-for-mail"); /*FIXME */
  +    argz_add(&msg->azHeaders, &msg->asHeaders, "not-for-mail");
   
       return MSG_OK;
   }
  @@ -205,6 +200,7 @@
       char        *cpRem;
       char       **aHeaders;
       int          i;
  +    int          o;
       char        *cpCut;
       char        *cpWrap;
       char         c;
  @@ -248,36 +244,47 @@
       }
       free(aHeaders);
   
  -    /* fold headers */
  +    /* fold headers
  +     *
  +     * A logical line is split into one or more physical '\n'-terminated
  +     * lines. The physical line is never longer than WRAPAT characters. This
  +     * includes the folded data and the header name + colon + space for the
  +     * first line and WRAPUSING string prefix for all other lines. Leading and
  +     * trailing blanks of folded lines are removed while blanks inside the
  +     * line are preserved.  The header is never left alone in a physical line.
  +     * Fragments exceeding WRAPAT characters without having a blank as a
  +     * splitting point are forcibly cut at a non-blank character.
  +     */
       cp = NULL;
       while ((cp = argz_next(msg->azHeaders, msg->asHeaders, cp)) != NULL) {
  -        if (strlen(cp) >= WRAPAT) {
  +        if (strlen(cp) > WRAPAT) {
               cpRem = cp;
               cpWrap = NULL;
  -            while (strlen(cpRem) >= WRAPAT) {
  -                for (i = WRAPAT; i >= 1 && (cpRem[i] != ' ') && (cpRem[i] != '\t'); i--);
  -                if (i == 0)
  -                    i = WRAPAT; /* sorry, hard cut at non-whitespace */
  -                if (i < WRAPAT)
  -                    i++; /* we don't care about the whitespace itself */
  -                cpCut = str_dup(cpRem, i);
  -                /*FIXME 1.) continue searching downwards skipping all whitespaces and 2.) as we know the length replace str_dup/ strcat/ free with strncat only */
  -                if (cpWrap == NULL) {
  -                    if ((cpWrap = (char *)malloc(strlen(cpCut)+strlen(WRAPUSING)+1)) == NULL)
  -                        return MSG_ERR_MEM;
  -                    *cpWrap = '\0';
  -                }
  -                else {
  -                    if ((cpWrap = (char *)realloc(cpWrap, strlen(cpWrap)+strlen(cpCut)+strlen(WRAPUSING)+1)) == NULL)
  -                        return MSG_ERR_MEM;
  -                    strcat(cpWrap, WRAPUSING);
  -                }
  -                strcat(cpWrap, cpCut);
  -                free(cpCut);
  +            for (o = 0; (cpRem[o] != ':') && (cpRem[o] != '\0'); o++); /* offset name so at least one char of value remains in first line */
  +            o += 2; /* skip ": " */
  +            while ((strlen(cpRem) + (cpWrap == NULL ? 0 : strlen(WRAPUSING))) > WRAPAT) {
  +                for (i = WRAPAT - 1 - (cpWrap == NULL ? 0 : strlen(WRAPUSING)); (i >= o) && !isblank(cpRem[i]); i--);
  +                if (i < o)
  +                    i = WRAPAT - 1 - (cpWrap == NULL ? 0 : strlen(WRAPUSING) - 1); /* sorry, forced cut at non-blank */
  +                cpCut = cpRem;
                   cpRem += i;
  +                for (; (isblank(*cpRem) && (*cpRem != '\0')); cpRem++); /* skip next lines leading blanks */
  +                for (; (i >= o) && isblank(cpCut[i-1]); i--); /* chop off this lines trailing blanks */
  +                if (i >= o) { /* only keep line fragment if some non-blanks inside */
  +                    if (cpWrap == NULL) {
  +                        if ((cpWrap = (char *)malloc(i+strlen(WRAPUSING)+1)) == NULL)
  +                            return MSG_ERR_MEM;
  +                        *cpWrap = '\0';
  +                        o = 1;
  +                    }
  +                    else {
  +                        if ((cpWrap = (char *)realloc(cpWrap, strlen(cpWrap)+i+strlen(WRAPUSING)+1)) == NULL)
  +                            return MSG_ERR_MEM;
  +                        strcat(cpWrap, WRAPUSING);
  +                    }
  +                    strncat(cpWrap, cpCut, i);
  +                }
               }
  -            for (i = 0; i < strlen(cpRem) && ((cpRem[i] == ' ') || (cpRem[i] == '\t')); i++);
  -            cpRem += i;
               if (strlen(cpRem) > 0) {
                   if ((cpWrap = (char *)realloc(cpWrap, strlen(cpWrap)+strlen(cpRem)+strlen(WRAPUSING)+1)) == NULL)
                           return MSG_ERR_MEM;
  @@ -374,7 +381,7 @@
                                                 str = "MSG: no description";
       if      (rc == MSG_OK                   ) str = "MSG: no error";
       else if (rc == MSG_ERR_MEM              ) str = "MSG: memory";
  -    else if (rc == MSG_ERR_SPLITSPLITBODY   ) str = "MSG: split into header and body failed";
  +    else if (rc == MSG_ERR_SPLITHEADBODY    ) str = "MSG: split into header and body failed";
       else if (rc == MSG_ERR_SPLITLEN         ) str = "MSG: header is too short";
       else if (rc == MSG_ERR_SPLITMISSINGFROM ) str = "MSG: header is missing 'From ' envelope";
       else if (rc == MSG_ERR_SPLITIDNONE      ) str = "MSG: header is missing 'Message-ID'";
  Index: ossp-pkg/lmtp2nntp/msg.h
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 msg.h
  --- ossp-pkg/lmtp2nntp/msg.h	2001/08/14 14:42:41	1.3
  +++ ossp-pkg/lmtp2nntp/msg.h	2001/08/27 13:45:53	1.4
  @@ -25,7 +25,7 @@
   typedef enum {
       MSG_OK,
       MSG_ERR_MEM,
  -    MSG_ERR_SPLITSPLITBODY,
  +    MSG_ERR_SPLITHEADBODY,
       MSG_ERR_SPLITLEN,
       MSG_ERR_SPLITMISSINGFROM,
       MSG_ERR_SPLITIDNONE,
  Index: ossp-pkg/lmtp2nntp/test/run.sh
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 run.sh
  --- ossp-pkg/lmtp2nntp/test/run.sh	2001/08/23 07:58:44	1.9
  +++ ossp-pkg/lmtp2nntp/test/run.sh	2001/08/27 13:45:53	1.10
  @@ -43,7 +43,7 @@
   {
       newmsg lmtp
       cat /tmp/testmessage \
  -     | ../lmtp2nntp -t /tmp/tracing -d $1 -g $2 -h dev16 -h dev16.de.cw.net -h 141.1.23.116 $3 >/dev/null; echo $?
  +     | ../lmtp2nntp -t /tmp/tracing -d $1 -g $2 -h dev16 $3 >/dev/null; echo $?
     echo ../lmtp2nntp -t /tmp/tracing -d $1 -g $2 -h dev16 $3
   #   cat /tmp/testmessage \
   #    | ../lmtp2nntp -t /tmp/tracing -d $1 -g $2 -h dev16 $3 >/dev/null; echo $?
  Index: ossp-pkg/lmtp2nntp/test/testmessage.vialmtp
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 testmessage.vialmtp
  --- ossp-pkg/lmtp2nntp/test/testmessage.vialmtp	2001/08/23 07:58:44	1.2
  +++ ossp-pkg/lmtp2nntp/test/testmessage.vialmtp	2001/08/27 13:45:53	1.3
  @@ -4,10 +4,15 @@
   RCPT To:<foo.bar@news-posting>
   RCPT To:<foo.test.bar@news-posting>
   DATA
  -Date: Tue, 14 Aug 2001 14:51:48 +0200 (CEST)
  +Date: Tue, 26 Aug 2001 14:51:48 +0200 (CEST)
   Message-Id: <200108141251.f7ECpmn74812@dev.de.cw.net>
   From: Thomas Lotterer <Thomas.Lotterer@de.cw.net>
  -Newsgroups: fu,bar,quux,fuzel,nasen,baer
  +X-Wraptest1:      0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
  +X-Wraptest2: 01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
  +X-Wraptest3:    the quick brown fox jumps over the lazy dog. THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG. the quick brown fox jumps over the lazy dog. THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG. the quick brown fox jumps over the lazy dog. THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG. the quick brown fox jumps over the lazy dog. THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG. the quick brown fox jumps over the lazy dog. THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG. the quick brown fox jumps over the lazy dog. THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG. the quick brown fox jumps over the lazy dog. THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG!
  +X-Wraptest4: thequickbrownfoxjumpsoverthelazydog.THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG.thequickbrownfoxjumpsoverthelazydog.THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG.thequickbrownfoxjumpsoverthelazydog.THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG.thequickbrownfoxjumpsoverthelazydog.THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG.thequickbrownfoxjumpsoverthelazydog.THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG.thequickbrownfoxjumpsoverthelazydog.THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG.thequickbrownfoxjumpsoverthelazydog.THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG!
  +X-Wraptest5:        the  quick  brown  fox  jumps  over  the  lazy  dog.  THE  QUICK  BROWN  FOX  JUMPS  OVER  THE  LAZY  DOG.  the  quick  brown  fox  jumps  over  the  lazy  dog.  THE  QUICK  BROWN  FOX  JUMPS  OVER  THE  LAZY  DOG.  the  quick  brown  fox  jumps  over  the  lazy  dog.  THE  QUICK  BROWN  FOX  JUMPS  OVER  THE  LAZY  DOG.  the  quick  brown  fox  jumps  over  the  lazy  dog.  THE  QUICK  BROWN  FOX  JUMPS  OVER  THE  LAZY  DOG.  the  quick  brown  fox  jumps  over  the  lazy  dog.  THE  QUICK  BROWN  FOX  JUMPS  OVER  THE  LAZY  DOG.  the  quick  brown  fox  jumps  over  the  lazy  dog.  THE  QUICK  BROWN  FOX  JUMPS  OVER  THE  LAZY  DOG.  the  quick  brown  fox  jumps  over  the  lazy  dog.  THE  QUICK  BROWN  FOX  JUMPS  OVER  THE  LAZY  DOG!
  +X-Wraptest6:                the    quick    brown    fox    jumps    over    the    lazy    dog.    THE    QUICK    BROWN    FOX    JUMPS    OVER    THE    LAZY    DOG.    the    quick    brown    fox    jumps    over    the    lazy    dog.    THE    QUICK    BROWN    FOX    JUMPS    OVER    THE    LAZY    DOG.    the    quick    brown    fox    jumps    over    the    lazy    dog.    THE    QUICK    BROWN    FOX    JUMPS    OVER    THE    LAZY    DOG.    the    quick    brown    fox    jumps    over    the    lazy    dog.    THE    QUICK    BROWN    FOX    JUMPS    OVER    THE    LAZY    DOG.    the    quick    brown    fox    jumps    over    the    lazy    dog.    THE    QUICK    BROWN    FOX    JUMPS    OVER    THE    LAZY    DOG.    the    quick    brown    fox    jumps    over    the    lazy    dog.    THE    QUICK    BROWN    FOX    JUMPS    OVER    THE    LAZY    DOG.    the    quick    brown    fox    jumps    over    the    lazy    dog.    THE    QUICK    BROWN    FOX    JUMPS    OVER    THE    LAZY    DOG!
   Subject: lmtp2nntp testmessage.viasendmail
   
   ..

From ossp-cvs-owner@ossp.org  Mon Aug 27 16:25:34 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7REPXx89142; Mon, 27 Aug 2001 16:25:33 +0200 (CEST)
Date: Mon, 27 Aug 2001 16:25:33 +0200 (CEST)
Message-Id: <200108271425.f7REPXx89142@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   27-Aug-2001 16:25:33
  Branch: HEAD                             Handle: 2001082715253300

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c nntp.c

  Log:
    removed ==TRUE and !=TRUE comparisons in favor of ==FALSE, !=FALSE and boolean expressions

  Summary:
    Revision    Changes     Path
    1.28        +6  -6      ossp-pkg/lmtp2nntp/lmtp2nntp.c
    1.16        +1  -1      ossp-pkg/lmtp2nntp/nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/08/23 09:12:30	1.27
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/08/27 14:25:33	1.28
  @@ -306,7 +306,7 @@
       lmtp_io.select = NULL;
       lmtp_io.read   = trace_read;
       lmtp_io.write  = trace_write;
  -    if ((lmtp = lmtp_create(STDIN_FILENO, STDOUT_FILENO, ctx->option_tracing != TRUE ? NULL : &lmtp_io)) == NULL) {
  +    if ((lmtp = lmtp_create(STDIN_FILENO, STDOUT_FILENO, ctx->option_tracing ? &lmtp_io : NULL)) == NULL) {
           fprintf(stderr, "%s:Error: Unable to initialize LMTP library\n", progname);
           exit(ERR_EXECUTION);
       }
  @@ -396,7 +396,7 @@
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.0.0   Other undefined Status
        */
  -    if (ctx->session.lhlo_seen == TRUE) {
  +    if (ctx->session.lhlo_seen) {
           res.statuscode = "503";
           res.dsncode    = "5.0.0";
           res.statusmsg  = "Duplicate LHLO.";
  @@ -437,7 +437,7 @@
               bOk = FALSE;
           }
           if (bOk && ((ctx->ns[i].nntp = nntp_create(ctx->ns[i].s, ctx->ns[i].s, 
  -                                                   ctx->option_tracing != TRUE ? NULL : &nntp_io)) == NULL)) {
  +                                                   ctx->option_tracing ? &nntp_io : NULL)) == NULL)) {
               /*fprintf(stderr, "DEBUG: nntp_create failed: %s\n", strerror(errno)); */
               bOk = FALSE;
           }
  @@ -631,7 +631,7 @@
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.1.8   Bad sender's system address
        */
  -    if (ctx->session.lhlo_seen != TRUE) {
  +    if (!ctx->session.lhlo_seen) {
           res.statuscode = "553";
           res.dsncode    = "5.1.8";
           res.statusmsg  = "friendly people say LHLO to open a transmission channel.";
  @@ -777,7 +777,7 @@
               lmtp_response(lmtp, &res);
               return LMTP_OK;
           }
  -        if (groupmatch(ctx->azGroupargs, ctx->asGroupargs, group) != TRUE) {
  +        if (!groupmatch(ctx->azGroupargs, ctx->asGroupargs, group)) {
               res.statuscode = "550";
               res.dsncode    = "5.7.2";
               res.statusmsg  = "unmatched Group.";
  @@ -948,7 +948,7 @@
       else { /*                      == GROUPMODE_HEADER */
           cp = ctx->msg->azNewsgroups;
           while (cp != NULL) {
  -            if (groupmatch(ctx->azGroupargs, ctx->asGroupargs, cp) != TRUE) {
  +            if (!groupmatch(ctx->azGroupargs, ctx->asGroupargs, cp)) {
                   if (argz_next(ctx->msg->azNewsgroups, ctx->msg->asNewsgroups, cp) == NULL) {
                       argz_delete(&ctx->msg->azNewsgroups, &ctx->msg->asNewsgroups, cp);
                       break;
  Index: ossp-pkg/lmtp2nntp/nntp.c
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 nntp.c
  --- ossp-pkg/lmtp2nntp/nntp.c	2001/08/23 09:12:30	1.15
  +++ ossp-pkg/lmtp2nntp/nntp.c	2001/08/27 14:25:33	1.16
  @@ -347,7 +347,7 @@
       if (strncmp(line, "240", 3) == 0)
           return NNTP_OK;
   
  -    if (nntp->kludgeinn441dup == TRUE) {
  +    if (nntp->kludgeinn441dup) {
           if (strncmp(line, "441 435", 7) == 0)
               return NNTP_OK;
       }

From ossp-cvs-owner@ossp.org  Mon Aug 27 16:29:13 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7RETCU89879; Mon, 27 Aug 2001 16:29:12 +0200 (CEST)
Date: Mon, 27 Aug 2001 16:29:12 +0200 (CEST)
Message-Id: <200108271429.f7RETCU89879@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO lmtp2nntp.c msg.c nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   27-Aug-2001 16:29:12
  Branch: HEAD                             Handle: 2001082715291100

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO lmtp2nntp.c msg.c nntp.c

  Log:
    removed DEBUGs; updated 00TODO;

  Summary:
    Revision    Changes     Path
    1.17        +2  -9      ossp-pkg/lmtp2nntp/00TODO
    1.29        +0  -13     ossp-pkg/lmtp2nntp/lmtp2nntp.c
    1.11        +0  -4      ossp-pkg/lmtp2nntp/msg.c
    1.17        +0  -9      ossp-pkg/lmtp2nntp/nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	2001/08/27 13:45:53	1.16
  +++ ossp-pkg/lmtp2nntp/00TODO	2001/08/27 14:29:11	1.17
  @@ -1,21 +1,14 @@
   
  -M=NNNN im Sendmail ergaenzen (weil Postfix gar nix hat) durch
  --l Commandline options fuer Maximum Message Size
  -
  +M=NNNN im Sendmail ergaenzen (weil Postfix gar nix hat) durch -l Commandline options fuer Maximum Message Size
   use "RFC1918-like" private Domainnames for @example.com (check which name is registered)
   whatsup draufleiten
   dmalloc
  -FIXMEs
  -DEBUGs
   RFC1891 ENVID
   RFC1891 6.2
  -FALSE, TRUE vs. == FALSE, == TRUE, != FALSE, != TRUE
   -h needs to understand multiple hosts as comma separated list
   NUL statt '\0'
   ID logging problem
  -
  -lmtp_response segfaults when a physical line ('\n' terminated) of the logical
  -line input exceeds LMTP_LINE_MAXLEN.
  +lmtp_response segfaults when a physical line ('\n' terminated) of the logical line input exceeds LMTP_LINE_MAXLEN.
   
       **** LMTP REDESIGN ****
   
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/08/27 14:25:33	1.28
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/08/27 14:29:11	1.29
  @@ -298,7 +298,6 @@
       }
       /* remaining arguments are Groupargs */
       for (i = optind; i < argc; i++) {
  -        /*fprintf(stderr, "DEBUG: argv[i] = ***%s***\n", argv[i]); */
           argz_add(&ctx->azGroupargs, &ctx->asGroupargs, argv[i]);
       }
   
  @@ -433,16 +432,13 @@
       do {
           bOk = TRUE;
           if (connect(ctx->ns[i].s, ctx->ns[i].sa->sa_buf, ctx->ns[i].sa->sa_len) < 0) {
  -            /*fprintf(stderr, "DEBUG: connect failed: %s\n", strerror(errno)); */
               bOk = FALSE;
           }
           if (bOk && ((ctx->ns[i].nntp = nntp_create(ctx->ns[i].s, ctx->ns[i].s, 
                                                      ctx->option_tracing ? &nntp_io : NULL)) == NULL)) {
  -            /*fprintf(stderr, "DEBUG: nntp_create failed: %s\n", strerror(errno)); */
               bOk = FALSE;
           }
           if (bOk && ((rc = nntp_init(ctx->ns[i].nntp)) != NNTP_OK)) {
  -            /*fprintf(stderr, "DEBUG: nntp_init failed: %s\n", nntp_error(rc)); */
               bOk = FALSE;
           }
           if (bOk)
  @@ -975,13 +971,6 @@
           }
       }
   
  -#if 0 /*DEBUG and LOGGING paragraph */
  -    rcpt = NULL;
  -    while ((rcpt = argz_next(ctx->msg->azNewsgroups, ctx->msg->asNewsgroups, rcpt)) != NULL) {
  -        fprintf(stderr, "DEBUG: commited group ***%s***\n", rcpt);
  -    }
  -#endif
  -
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   554 Transaction failed
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.6.5   Conversion Failed
  @@ -997,11 +986,9 @@
           }
           return LMTP_OK;
       }
  -    /*fprintf(stderr, "DEBUG: after msg_join\n"); */
   
       bSuccess = NNTP_EOF; /* assume a hard error for the worst case */
       for (i = 0; i < ctx->nsc; i++) {
  -        /*fprintf(stderr, "DEBUG: trying service %s\n", ctx->ns[i].h); */
           switch (ctx->option_deliverymode) {
               case DELIVERYMODE_FAKE:
                   break;
  Index: ossp-pkg/lmtp2nntp/msg.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 msg.c
  --- ossp-pkg/lmtp2nntp/msg.c	2001/08/27 13:45:53	1.10
  +++ ossp-pkg/lmtp2nntp/msg.c	2001/08/27 14:29:11	1.11
  @@ -159,7 +159,6 @@
               if (msg->cpMsgid != NULL)
                   return MSG_ERR_SPLITIDMULTI;
               argz_delete(&msg->azHeaders, &msg->asHeaders, cp);             /* del  name  */
  -            /*fprintf(stderr, "DEBUG: Message-ID cp = ***%s***\n", cp); */
               if ((cp == NULL) || (strlen(cp) == 0))                         /* get  value */
                   return MSG_ERR_SPLITIDEMPTY;
               if ((msg->cpMsgid = strdup(cp)) == NULL)
  @@ -169,7 +168,6 @@
           }
           if (strcasecmp("Newsgroups:", cp) == 0) {
               argz_delete(&msg->azHeaders, &msg->asHeaders, cp);             /* del  name  */
  -            /*fprintf(stderr, "DEBUG: Newsgroups cp = ***%s***\n", cp); */
               if (argz_add(&msg->azNewsgroups, &msg->asNewsgroups, cp) != 0) /* get  value */
                   return MSG_ERR_MEM;
               argz_delete(&msg->azHeaders, &msg->asHeaders, cp);             /* del  value */
  @@ -212,7 +210,6 @@
       if (msg->azNewsgroups == NULL)
           return MSG_ERR_JOINGROUPNONE;
       argz_stringify(msg->azNewsgroups, msg->asNewsgroups, ',');
  -    /*fprintf(stderr, "DEBUG: join consolidated azNewsgroups = ***%s***\n", msg->azNewsgroups); */
       if (strlen(msg->azNewsgroups) == 0)
           return MSG_ERR_JOINGROUPEMPTY;
       argz_add(&msg->azHeaders, &msg->asHeaders, "Newsgroups:");
  @@ -371,7 +368,6 @@
       msg->cpMsg[n++] = '\n';
       msg->cpMsg[n]   = '\0';
   
  -    /*fprintf(stderr, "DEBUG: Message = ***%s***\n", msg->cpMsg); */
       return MSG_OK;
   }
   
  Index: ossp-pkg/lmtp2nntp/nntp.c
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 nntp.c
  --- ossp-pkg/lmtp2nntp/nntp.c	2001/08/27 14:25:33	1.16
  +++ ossp-pkg/lmtp2nntp/nntp.c	2001/08/27 14:29:11	1.17
  @@ -131,24 +131,19 @@
   
       do {
           if ((rc = nntp_readline(nntp, line, sizeof(line))) != NNTP_OK) {
  -            /*fprintf(stderr, "DEBUG: nntp_readline returned ***%d***\n", rc); */
               return rc;
               }
       } while (line[0] == '1');
   
  -    /*fprintf(stderr, "DEBUG: nntp_readline got ***%s***\n", line); */
  -
       /* prepare for the INN kludge using 441 returns for other things but
        * "Duplicate".  Typical welcome string is "200 host InterNetNews NNRP
        * server INN 2.3.2 ready (posting * ok)."
        */
       if (strncmp(line, "200", 3) == 0 && strstr(line, " INN ") != NULL) {
           nntp->kludgeinn441dup = TRUE;
  -        /*fprintf(stderr, "DEBUG: INN kludge activated!\n"); */
       }
       else {
           nntp->kludgeinn441dup = FALSE;
  -        /*fprintf(stderr, "DEBUG: no INN kludge!\n"); */
       }
   
       if (strncmp(line, "200", 3) == 0)
  @@ -212,7 +207,6 @@
       buf[n] = '\0';          /* string termination */
       if (n == (buflen-1)) 
           return NNTP_ERR_OVERFLOW;
  -    /*fprintf(stderr, "DEBUG: nntp_readline  <<<%s\n", buf); */
       return NNTP_OK;
   }
   
  @@ -224,7 +218,6 @@
           return NNTP_ERR_ARG;
       strncpy(tmp, buf, NNTP_LINE_MAXLEN-3);
       strcat(tmp, "\r\n");
  -    /*fprintf(stderr, "DEBUG: nntp_writeline >>>%s", tmp); */
       if (nntp->io.write(nntp->wfd, tmp, strlen(tmp)) < 0)
           return NNTP_ERR_SYSTEM;
       return NNTP_OK;
  @@ -342,7 +335,6 @@
   
       if ((rc = nntp_readline(nntp, line, sizeof(line))) != NNTP_OK)
           return rc;
  -    /*fprintf(stderr, "DEBUG: answer to post = ***%s***, rc = %s\n", line, nntp_error(rc)); */
   
       if (strncmp(line, "240", 3) == 0)
           return NNTP_OK;
  @@ -419,7 +411,6 @@
   
       if ((rc = nntp_readline(nntp, line, sizeof(line))) != NNTP_OK)
           return rc;
  -    /*fprintf(stderr, "DEBUG: answer to post = ***%s***, rc = %s\n", line, nntp_error(rc)); */
   
       if (strncmp(line, "235", 3) == 0)
           return NNTP_OK;

From ossp-cvs-owner@ossp.org  Mon Aug 27 16:49:34 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7REnX492516; Mon, 27 Aug 2001 16:49:33 +0200 (CEST)
Date: Mon, 27 Aug 2001 16:49:33 +0200 (CEST)
Message-Id: <200108271449.f7REnX492516@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp.c lmtp2nntp.c msg.c nntp.c sa.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   27-Aug-2001 16:49:33
  Branch: HEAD                             Handle: 2001082715493200

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp.c lmtp2nntp.c msg.c nntp.c sa.c

  Log:
    now using NUL instead of '\0'

  Summary:
    Revision    Changes     Path
    1.16        +9  -5      ossp-pkg/lmtp2nntp/lmtp.c
    1.30        +6  -2      ossp-pkg/lmtp2nntp/lmtp2nntp.c
    1.12        +13 -13     ossp-pkg/lmtp2nntp/msg.c
    1.18        +10 -6      ossp-pkg/lmtp2nntp/nntp.c
    1.5         +5  -1      ossp-pkg/lmtp2nntp/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp.c
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 lmtp.c
  --- ossp-pkg/lmtp2nntp/lmtp.c	2001/08/23 09:12:30	1.15
  +++ ossp-pkg/lmtp2nntp/lmtp.c	2001/08/27 14:49:32	1.16
  @@ -43,6 +43,10 @@
   #include "dmalloc.h"
   #endif
   
  +#ifndef NUL
  +#define NUL '\0'
  +#endif
  +
   /* maximum LMTP protocol line length */
   #define LMTP_LINE_MAXLEN 1024
   
  @@ -120,7 +124,7 @@
   
       lmtp->rl.rl_cnt = 0;
       lmtp->rl.rl_bufptr = NULL;
  -    lmtp->rl.rl_buf[0] = '\0';
  +    lmtp->rl.rl_buf[0] = NUL;
       lmtp->rfd = rfd;
       lmtp->wfd = wfd;
       
  @@ -179,7 +183,7 @@
           buf[n++] = c;       /* output char into given buffer */
   
       }
  -    buf[n] = '\0';          /* string termination */
  +    buf[n] = NUL;          /* string termination */
       if (n == (buflen-1)) 
           return LMTP_ERR_OVERFLOW;
       return LMTP_OK;
  @@ -237,14 +241,14 @@
           }
           else if (rc == LMTP_OK) {
               if (strcmp(cpLine, ".") == 0) {     /* dot alone is end of message */
  -                *cpLine = '\0';                 /* hide dot from caller */
  +                *cpLine = NUL;                 /* hide dot from caller */
                   break;
               }
               if (*cpLine == '.')                 /* escaped dot */
                   memmove(cpLine, cpLine+1, strlen(cpLine+1)+1);
               cpPtr += strlen(cpPtr);             /* write cursor to the end */
               *cpPtr++ = '\n';                    /* artifical NL */
  -            *cpPtr = '\0';                      /* artifical end of string */
  +            *cpPtr = NUL;                      /* artifical end of string */
               cpLine = cpPtr;                     /* start of line */
           }
           else break;                             /* rc == LMTP_ERR* */
  @@ -286,7 +290,7 @@
                   continue; /* skip  ""  verb */
               if (   (strlen(req->msg) >= verblen)
                   && (strncasecmp(req->msg, verb, verblen) == 0)
  -                && (   (req->msg[verblen] == '\0')
  +                && (   (req->msg[verblen] == NUL)
                       || (req->msg[verblen] == ' ') )           ) {
                   req->verb = verb;
                   return LMTP_OK;
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/08/27 14:29:11	1.29
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/08/27 14:49:32	1.30
  @@ -45,6 +45,10 @@
   #define TRUE (!FALSE)
   #endif
   
  +#ifndef NUL
  +#define NUL '\0'
  +#endif
  +
   #define ERR_EXECUTION -1
   #define ERR_DELIVERY -2
   
  @@ -202,7 +206,7 @@
                           exit(ERR_EXECUTION);
                       }
   
  -                    optarg[3] = '\0';
  +                    optarg[3] = NUL;
                       ctx->option_deliverymodefakestatus = &optarg[0];
                       ctx->option_deliverymodefakedsn    = &optarg[4];
   
  @@ -247,7 +251,7 @@
                   /* parse host[:port] string into host and port */
                   cpHost = strdup(optarg);
                   if ((cpPort = strrchr(cpHost, ':')) != NULL) {
  -                    *cpPort++ = '\0';
  +                    *cpPort++ = NUL;
                       cpPort = strdup(cpPort);
                   }
                   else 
  Index: ossp-pkg/lmtp2nntp/msg.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 msg.c
  --- ossp-pkg/lmtp2nntp/msg.c	2001/08/27 14:29:11	1.11
  +++ ossp-pkg/lmtp2nntp/msg.c	2001/08/27 14:49:32	1.12
  @@ -74,19 +74,19 @@
        * msg->cpMsg
        * must contain the wholly RFC0822 formatted message with native
        * (unescaped) dots at the beginning of a line, the 'From ' envelope,
  -     * headers, double newline, body, '\0', no trailing dot;
  +     * headers, double newline, body, NUL, no trailing dot;
        *
        * OUTPUTS
        *
        * msg->azHeaders, msg->asHeaders contains the headers in argz format, one
  -     * logical '\0'-terminated line per header which might be wrapped into
  +     * logical NUL-terminated line per header which might be wrapped into
        * multiple '\n'-ended physical lines. The "From " envelope, "Received:",
        * "Path:", "To:" and "Cc:" headers are removed silently. The
        * "Newsgroups:" and "Message-ID" headers are removed and their values are
        * stored in separate structures (see below).
        *
        * msg->cpBody
  -     * contains the unmodified body of the message, '\0'-terminated, no
  +     * contains the unmodified body of the message, NUL-terminated, no
        * trailing dot.
        *
        * msg->cpMsgid
  @@ -228,7 +228,7 @@
       if ((aHeaders = (char **)malloc((argz_count(msg->azHeaders, msg->asHeaders) + 1) * sizeof(char *))) == NULL)
           return MSG_ERR_MEM;
       argz_extract(msg->azHeaders, msg->asHeaders, aHeaders);
  -    /* replace the trailing '\0', which is *(cp-1) of the predecessor, with a
  +    /* replace the trailing NUL, which is *(cp-1) of the predecessor, with a
        * space at every second string. Break action when terminating NULL string
        * is detected */
       i=0;
  @@ -257,7 +257,7 @@
           if (strlen(cp) > WRAPAT) {
               cpRem = cp;
               cpWrap = NULL;
  -            for (o = 0; (cpRem[o] != ':') && (cpRem[o] != '\0'); o++); /* offset name so at least one char of value remains in first line */
  +            for (o = 0; (cpRem[o] != ':') && (cpRem[o] != NUL); o++); /* offset name so at least one char of value remains in first line */
               o += 2; /* skip ": " */
               while ((strlen(cpRem) + (cpWrap == NULL ? 0 : strlen(WRAPUSING))) > WRAPAT) {
                   for (i = WRAPAT - 1 - (cpWrap == NULL ? 0 : strlen(WRAPUSING)); (i >= o) && !isblank(cpRem[i]); i--);
  @@ -265,13 +265,13 @@
                       i = WRAPAT - 1 - (cpWrap == NULL ? 0 : strlen(WRAPUSING) - 1); /* sorry, forced cut at non-blank */
                   cpCut = cpRem;
                   cpRem += i;
  -                for (; (isblank(*cpRem) && (*cpRem != '\0')); cpRem++); /* skip next lines leading blanks */
  +                for (; (isblank(*cpRem) && (*cpRem != NUL)); cpRem++); /* skip next lines leading blanks */
                   for (; (i >= o) && isblank(cpCut[i-1]); i--); /* chop off this lines trailing blanks */
                   if (i >= o) { /* only keep line fragment if some non-blanks inside */
                       if (cpWrap == NULL) {
                           if ((cpWrap = (char *)malloc(i+strlen(WRAPUSING)+1)) == NULL)
                               return MSG_ERR_MEM;
  -                        *cpWrap = '\0';
  +                        *cpWrap = NUL;
                           o = 1;
                       }
                       else {
  @@ -298,12 +298,12 @@
       cpHeaders = msg->azHeaders;
   
       /********************************************************************
  -     * header + CRLF + body + '.' + CRLF + '\0', replacing NL with CRLF *
  +     * header + CRLF + body + '.' + CRLF + NUL, replacing NL with CRLF *
        ********************************************************************/
   
       n = 0;
       /* count size of headers, reserve space for NL to CRLF conversion */
  -    for (i = 0; ((c = cpHeaders[i]) != '\0'); i++) {
  +    for (i = 0; ((c = cpHeaders[i]) != NUL); i++) {
           if (c == '\n')
               n++;
           n++;
  @@ -315,7 +315,7 @@
       n+=2;
       /* count size of body, reserve space for NL-DOT escape and NL to CRLF conversion */
       cOld = '\n';
  -    for (i = 0; ((c = msg->cpBody[i]) != '\0'); i++) {
  +    for (i = 0; ((c = msg->cpBody[i]) != NUL); i++) {
           if (c == '\n')
               n++;
           if (c == '.' && cOld == '\n')
  @@ -334,7 +334,7 @@
   
       n = 0;
       /* copy headers, do NL to CRLF conversion */
  -    for (i = 0; ((c = cpHeaders[i]) != '\0'); i++) {
  +    for (i = 0; ((c = cpHeaders[i]) != NUL); i++) {
           if (c == '\n')
               msg->cpMsg[n++] = '\r';
           msg->cpMsg[n++] = c;
  @@ -349,7 +349,7 @@
       msg->cpMsg[n++] = '\n';
       /* copy body, do NL-DOT escape and NL to CRLF conversion */
       cOld = '\n';
  -    for (i = 0; ((c = msg->cpBody[i]) != '\0'); i++) {
  +    for (i = 0; ((c = msg->cpBody[i]) != NUL); i++) {
           if (c == '\n')
               msg->cpMsg[n++] = '\r';
           if (c == '.' && cOld == '\n')
  @@ -366,7 +366,7 @@
       msg->cpMsg[n++] =  '.';
       msg->cpMsg[n++] = '\r';
       msg->cpMsg[n++] = '\n';
  -    msg->cpMsg[n]   = '\0';
  +    msg->cpMsg[n]   = NUL;
   
       return MSG_OK;
   }
  Index: ossp-pkg/lmtp2nntp/nntp.c
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 nntp.c
  --- ossp-pkg/lmtp2nntp/nntp.c	2001/08/27 14:29:11	1.17
  +++ ossp-pkg/lmtp2nntp/nntp.c	2001/08/27 14:49:32	1.18
  @@ -53,6 +53,10 @@
   #define TRUE (!FALSE)
   #endif
   
  +#ifndef NUL
  +#define NUL '\0'
  +#endif
  +
   /* maximum NNTP protocol line length */
   #define NNTP_LINE_MAXLEN 1024
   
  @@ -92,7 +96,7 @@
       nntp->wfd = wfd;
       nntp->rl.rl_cnt = 0;
       nntp->rl.rl_bufptr = NULL;
  -    nntp->rl.rl_buf[0] = '\0';
  +    nntp->rl.rl_buf[0] = NUL;
       nntp_timeout(nntp, 3);
       nntp->kludgeinn441dup = FALSE;
   
  @@ -204,7 +208,7 @@
           buf[n++] = c;       /* output char into given buffer */
   
       }
  -    buf[n] = '\0';          /* string termination */
  +    buf[n] = NUL;          /* string termination */
       if (n == (buflen-1)) 
           return NNTP_ERR_OVERFLOW;
       return NNTP_OK;
  @@ -254,7 +258,7 @@
        *  
        *  In other words, INN *requires* the use of "MODE READER".
        */
  -    *line = '\0';
  +    *line = NUL;
       strcat(line, "MODE READER");
       if ((rc = nntp_writeline(nntp, line)) != NNTP_OK)
           return rc;
  @@ -278,7 +282,7 @@
        *  < 223 yes, article already known
        *  < 430 no, i don't know the article, yet
        */
  -    *line = '\0';
  +    *line = NUL;
       strcat(line, "STAT ");
       strcat(line, msg->cpMsgid);
       if ((rc = nntp_writeline(nntp, line)) != NNTP_OK)
  @@ -318,7 +322,7 @@
        *  
        *  In other words, INN uses 441 for other status messages as well.
        */
  -    *line = '\0';
  +    *line = NUL;
       strcat(line, "POST");
       if ((rc = nntp_writeline(nntp, line)) != NNTP_OK)
           return rc;
  @@ -381,7 +385,7 @@
        *  < 437 Unwanted newsgroup "quux"
        *  < 480 Transfer permission denied
        */
  -    *line = '\0';
  +    *line = NUL;
       strcat(line, "IHAVE ");
       strcat(line, msg->cpMsgid);
       if ((rc = nntp_writeline(nntp, line)) != NNTP_OK)
  Index: ossp-pkg/lmtp2nntp/sa.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 sa.c
  --- ossp-pkg/lmtp2nntp/sa.c	2001/08/23 09:12:30	1.4
  +++ ossp-pkg/lmtp2nntp/sa.c	2001/08/27 14:49:32	1.5
  @@ -76,6 +76,10 @@
   #endif
   #endif
   
  +#ifndef NUL
  +#define NUL '\0'
  +#endif
  +
   sa_t *sa_create(int sa_type, ...)
   {
       va_list ap;
  @@ -133,7 +137,7 @@
   
           /* resolve port */
           bNumeric = 1;
  -        for (i = 0; cpPort[i] != '\0'; i++) {
  +        for (i = 0; cpPort[i] != NUL; i++) {
               if (!isdigit(cpPort[i])) {
                   bNumeric = 0;
                   break;

From ossp-cvs-owner@ossp.org  Tue Aug 28 12:38:45 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7SAcij30626; Tue, 28 Aug 2001 12:38:44 +0200 (CEST)
Date: Tue, 28 Aug 2001 12:38:44 +0200 (CEST)
Message-Id: <200108281038.f7SAcij30626@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str str_parse.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   28-Aug-2001 12:38:44
  Branch: HEAD                             Handle: 2001082811384400

  Modified files:
    ossp-pkg/str            str_parse.c

  Log:
    Fix a memory leak in Str

  Summary:
    Revision    Changes     Path
    1.15        +2  -0      ossp-pkg/str/str_parse.c
  ____________________________________________________________________________

  Index: ossp-pkg/str/str_parse.c
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 str_parse.c
  --- ossp-pkg/str/str_parse.c	2001/08/16 13:21:23	1.14
  +++ ossp-pkg/str/str_parse.c	2001/08/28 10:38:44	1.15
  @@ -120,6 +120,8 @@
           while (he != NULL) {
               ohe = he;
               he = he->next;
  +            if (ohe->key != NULL)
  +                free(ohe->key);
               free(ohe);
           }
       }

From ossp-cvs-owner@ossp.org  Tue Aug 28 13:29:41 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7SBTea36360; Tue, 28 Aug 2001 13:29:40 +0200 (CEST)
Date: Tue, 28 Aug 2001 13:29:40 +0200 (CEST)
Message-Id: <200108281129.f7SBTea36360@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   28-Aug-2001 13:29:40
  Branch: HEAD                             Handle: 2001082812294000

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.pod

  Log:
    rewrote DESCRIPTION; added RFCs to STANDARD section;

  Summary:
    Revision    Changes     Path
    1.7         +51 -5      ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 lmtp2nntp.pod
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/08/16 15:00:50	1.6
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/08/28 11:29:40	1.7
  @@ -24,9 +24,13 @@
   
   =head1 DESCRIPTION
   
  -The B<lmtp2nntp> program reads mail from stdin and posts it to one or more
  -newsgroups using NNTP. It delivers the message immediately or fails.
  -If queuing is desired it can operate as a LMTP server.
  +The B<lmtp2nntp> program is a LMTP service which is usually invoked by a MTA.
  +Input messages get their headers slightly reformatted to match network news
  +article format. The article is then posted or fed into a NNTP service.
  +Delivery must take place immediately or the transaction fails.  A LMTP service
  +relies on the queuing capabilities of its MTA. To support this, the program
  +returns proper delivery status notification which indicates successful
  +completed action, persistent transient failure or permanent failure.
   
   The following options are available:
   
  @@ -161,9 +165,50 @@
   
   =head1 STANDARDS
   
  - RFC1891 Delivery Status Notification (DSN)
  - FIXME
  +0821 Simple Mail Transfer Protocol. J. Postel. Aug-01-1982. (Format:
  +     TXT=124482 bytes) (Obsoletes RFC0788) (Obsoleted by RFC2821) (Also
  +     STD0010) (Status: STANDARD)
  +
  +0822 Standard for the format of ARPA Internet text messages. D.
  +     Crocker. Aug-13-1982. (Format: TXT=109200 bytes) (Obsoletes RFC0733)
  +     (Obsoleted by RFC2822) (Updated by RFC1123, RFC1138, RFC1148,
  +     RFC1327, RFC2156) (Also STD0011) (Status: STANDARD)
  +
  +0977 Network News Transfer Protocol. B. Kantor, P. Lapsley.
  +     Feb-01-1986. (Format: TXT=55062 bytes) (Status: PROPOSED STANDARD)
  +
  +1035 Domain names - implementation and specification. P.V.
  +     Mockapetris. Nov-01-1987. (Format: TXT=125626 bytes) (Obsoletes
  +     RFC0973, RFC0882, RFC0883) (Updated by RFC1101, RFC1183, RFC1348,
  +     RFC1876, RFC1982, RFC1995, RFC1996, RFC2065, RFC2136, RFC2181,
  +     RFC2137, RFC2308, RFC2535, RFC2845) (Also STD0013) (Status: STANDARD)
  +
  +1652 SMTP Service Extension for 8bit-MIMEtransport. J. Klensin, N.
  +     Freed, M. Rose, E. Stefferud, D. Crocker. July 1994. (Format:
  +     TXT=11842 bytes) (Obsoletes RFC1426) (Status: DRAFT STANDARD)
  +
  +1854 SMTP Service Extension for Command Pipelining. N. Freed. October
  +     1995. (Format: TXT=14097 bytes) (Obsoleted by RFC2197) (Status:
  +     PROPOSED STANDARD)
  +
  +1893 Enhanced Mail System Status Codes. G. Vaudreuil. January 1996.
  +     (Format: TXT=28218 bytes) (Status: PROPOSED STANDARD)
  +
  +1894 An Extensible Message Format for Delivery Status Notifications.
  +     K. Moore, G. Vaudreuil. January 1996. (Format: TXT=77462 bytes)
  +     (Updated by RFC2852) (Status: PROPOSED STANDARD)
  +
  +2034 SMTP Service Extension for Returning Enhanced Error Codes. N.
  +     Freed. October 1996. (Format: TXT=10460 bytes) (Status: PROPOSED
  +     STANDARD)
  +
  +2821 Simple Mail Transfer Protocol. J. Klensin, Editor. April 2001.
  +     (Format: TXT=192504 bytes) (Obsoletes RFC0821, RFC0974, RFC1869)
  +     (Status: PROPOSED STANDARD)
   
  +2980 Common NNTP Extensions. S. Barber. October 2000. (Format:
  +     TXT=57165 bytes) (Status: INFORMATIONAL)
  +
   =head1 AUTHOR
   
    The OSSP Project
  @@ -172,4 +217,5 @@
    <thomas.lotterer@cw.com>
   
   =cut
  +
   

From ossp-cvs-owner@ossp.org  Tue Aug 28 13:31:24 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7SBVNR36789; Tue, 28 Aug 2001 13:31:23 +0200 (CEST)
Date: Tue, 28 Aug 2001 13:31:23 +0200 (CEST)
Message-Id: <200108281131.f7SBVNR36789@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp .configure .cvsignore .dmallocrc 00TODO...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   28-Aug-2001 13:31:23
  Branch: HEAD                             Handle: 2001082812312200

  Modified files:
    ossp-pkg/lmtp2nntp      .configure .cvsignore .dmallocrc 00TODO README
                            lmtp.c lmtp2nntp.c msg.c sa.c

  Log:
    reduced dmalloc() complaints about non-free()d resources during one a "lmtp
    post arg cw.de.sd.apps.dev.test" run to zero regarding own code; A memoryleak
    in str library 0.9.5 was detected which was reported to and fixed by RSE;

  Summary:
    Revision    Changes     Path
    1.5         +3  -3      ossp-pkg/lmtp2nntp/.configure
    1.8         +1  -0      ossp-pkg/lmtp2nntp/.cvsignore
    1.2         +7  -0      ossp-pkg/lmtp2nntp/.dmallocrc
    1.18        +4  -2      ossp-pkg/lmtp2nntp/00TODO
    1.3         +0  -5      ossp-pkg/lmtp2nntp/README
    1.17        +21 -8      ossp-pkg/lmtp2nntp/lmtp.c
    1.31        +7  -1      ossp-pkg/lmtp2nntp/lmtp2nntp.c
    1.13        +6  -0      ossp-pkg/lmtp2nntp/msg.c
    1.6         +1  -1      ossp-pkg/lmtp2nntp/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/.configure
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 .configure
  --- ossp-pkg/lmtp2nntp/.configure	2001/08/23 09:12:30	1.4
  +++ ossp-pkg/lmtp2nntp/.configure	2001/08/28 11:31:22	1.5
  @@ -4,7 +4,7 @@
   fi
   PATH=/cw/bin:$PATH
   ./configure \
  -   --prefix=/tmp/lmtp2nntp \
      --with-str=/cw \
  -   --with-dmalloc=/cw \
  -   --enable-debug
  +#  --with-dmalloc=/cw \
  +   --enable-debug \
  +   --prefix=/tmp/lmtp2nntp
  Index: ossp-pkg/lmtp2nntp/.cvsignore
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 .cvsignore
  --- ossp-pkg/lmtp2nntp/.cvsignore	2001/08/20 11:32:59	1.7
  +++ ossp-pkg/lmtp2nntp/.cvsignore	2001/08/28 11:31:22	1.8
  @@ -9,3 +9,4 @@
   lmtp2nntp
   lmtp2nntp.1
   lmtp2nntp-*.tar.gz
  +dmalloc.log
  Index: ossp-pkg/lmtp2nntp/.dmallocrc
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 .dmallocrc
  --- ossp-pkg/lmtp2nntp/.dmallocrc	2001/08/23 09:12:30	1.1
  +++ ossp-pkg/lmtp2nntp/.dmallocrc	2001/08/28 11:31:22	1.2
  @@ -8,6 +8,7 @@
   
   # basic debugging
   debug1  log-stats, log-non-free, check-fence
  +debug1f log-stats, log-non-free, log-nonfree-space, allow-free-null, check-fence
   
   # more logging and some heap checking
   debug2  log-stats, log-non-free, log-trans, \
  @@ -17,4 +18,10 @@
   debug3  log-stats, log-non-free, log-trans, \
           log-admin, check-fence, check-heap, check-lists, realloc-copy, \
           free-blank, error-abort
  +
  +# good utilities but allow free(NULL);
  +debug3f log-stats, log-non-free, log-trans, \
  +        log-admin, check-fence, check-heap, check-lists, realloc-copy, \
  +        free-blank, error-abort, \
  +        allow-free-null
   
  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	2001/08/27 14:29:11	1.17
  +++ ossp-pkg/lmtp2nntp/00TODO	2001/08/28 11:31:22	1.18
  @@ -2,11 +2,9 @@
   M=NNNN im Sendmail ergaenzen (weil Postfix gar nix hat) durch -l Commandline options fuer Maximum Message Size
   use "RFC1918-like" private Domainnames for @example.com (check which name is registered)
   whatsup draufleiten
  -dmalloc
   RFC1891 ENVID
   RFC1891 6.2
   -h needs to understand multiple hosts as comma separated list
  -NUL statt '\0'
   ID logging problem
   lmtp_response segfaults when a physical line ('\n' terminated) of the logical line input exceeds LMTP_LINE_MAXLEN.
   
  @@ -29,3 +27,7 @@
   news-dus2.de.cw.net Feeder
   news.ecrc.de        Feeder/Reader
   
  +  Debugging:
  +  $ ./.configure [wegen --with-dmalloc!]
  +  $ dmalloc -l dmalloc.log
  +  $ dmalloc debug3
  Index: ossp-pkg/lmtp2nntp/README
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 README
  --- ossp-pkg/lmtp2nntp/README	2001/08/23 09:12:30	1.2
  +++ ossp-pkg/lmtp2nntp/README	2001/08/28 11:31:22	1.3
  @@ -1,8 +1,3 @@
   
     OSSP lmtp2nntp - Mail to News Gateway
   
  -  Debugging:
  -  $ ./.configure [wegen --with-dmalloc!]
  -  $ dmalloc -l dmalloc.log
  -  $ dmalloc debug3
  -
  Index: ossp-pkg/lmtp2nntp/lmtp.c
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 lmtp.c
  --- ossp-pkg/lmtp2nntp/lmtp.c	2001/08/27 14:49:32	1.16
  +++ ossp-pkg/lmtp2nntp/lmtp.c	2001/08/28 11:31:22	1.17
  @@ -143,10 +143,13 @@
   
       if (lmtp == NULL)
           return;
  -    for (i = 0; (i < LMTP_MAXVERBS) && (lmtp->dispatch[i] != NULL); i++)
  -        free(lmtp->dispatch[i]);    /* lmtp_register() */
  -    free(lmtp->dispatch);           /* lmtp_create() */
  -    free(lmtp);                     /* lmtp_create() */
  +
  +    for (i = 0; (i < LMTP_MAXVERBS) && (lmtp->dispatch[i] != NULL); i++) {
  +        free(lmtp->dispatch[i]->verb); /* lmtp_register() */
  +        free(lmtp->dispatch[i]);       /* lmtp_register() */
  +    }
  +    free(lmtp->dispatch);              /* lmtp_create() */
  +    free(lmtp);                        /* lmtp_create() */
       return;
   }
   
  @@ -216,7 +219,8 @@
       size_t offsetline; /* memorizing start of line when reallocing in the middle of a line */
   
       nBuf = 4096;
  -    if ((cpBuf = (char *)malloc(nBuf)) == NULL) return LMTP_ERR_MEM;
  +    if ((cpBuf = (char *)malloc(nBuf)) == NULL)
  +        return LMTP_ERR_MEM;
       *cppBuf = cpBuf;                           /* tell caller about the buffer */
       cpPtr = cpBuf;                             /* initialize write cursor */
       cpLine = cpBuf;                            /* initialize start of line */
  @@ -437,9 +441,10 @@
       /*  Print a welcome message then execute a request/ dispatch loop until
        *  request signals no more data. Each request is checked to contain a
        *  registered verb and if a verb is found the correspondig callback is
  -     *  executed. The create() function usually cares to register a default
  -     *  callback in order to handle unregistered verbs. The psoudoverb for
  -     *  default is the empty string "".
  +     *  executed. The lmtp_create() function usually cares to register a
  +     *  default callback in order to handle unregistered verbs. The psoudoverb
  +     *  for default is the empty string "" and the callback for this verb can
  +     *  be overridden.
        */
       lmtp_rc_t rc = LMTP_OK;
       lmtp_req_t req;
  @@ -447,6 +452,9 @@
       char *verb;
       int i;
   
  +    req.verb = "";
  +    req.msg = NULL;
  +
       res.statuscode = "220";
       res.dsncode    = NULL;
       res.statusmsg  = "LMTP Service ready.";
  @@ -457,6 +465,11 @@
           verb = req.verb;
           if ((i = verbindex(lmtp, verb)) != -1) {
               rc = lmtp->dispatch[i]->cb(lmtp, &lmtp->io, &req, lmtp->dispatch[i]->ctx);
  +            if (req.msg != NULL)
  +                free(req.msg);
  +            req.verb = "";
  +            req.msg = NULL;
  +
               if (rc != LMTP_OK) 
                   break;
           }
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/08/27 14:49:32	1.30
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/08/28 11:31:22	1.31
  @@ -342,6 +342,12 @@
       /* graceful shutdown */
       lmtp_gfs_quit(ctx);
       lmtp_gfs_lhlo(ctx);
  +    lmtp_destroy(lmtp);
  +    if (ctx->azGroupargs != NULL)
  +        free(ctx->azGroupargs);
  +    if (ctx != NULL)
  +        free(ctx);
  +    str_parse(NULL, NULL);
   
       return rc;
   }
  @@ -496,7 +502,7 @@
           if (ctx->ns[i].s != -1)
               close(ctx->ns[i].s);
           if (ctx->ns[i].sa != NULL)
  -            sa_destroy(ctx->ns[ctx->nsc].sa);
  +            sa_destroy(ctx->ns[i].sa);
           if (ctx->ns[i].p != NULL)
               free(ctx->ns[i].p);
           if (ctx->ns[i].h != NULL)
  Index: ossp-pkg/lmtp2nntp/msg.c
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 msg.c
  --- ossp-pkg/lmtp2nntp/msg.c	2001/08/27 14:49:32	1.12
  +++ ossp-pkg/lmtp2nntp/msg.c	2001/08/28 11:31:22	1.13
  @@ -78,6 +78,9 @@
        *
        * OUTPUTS
        *
  +     * msg->cpMsg
  +     * free()d and set to NULL
  +     * 
        * msg->azHeaders, msg->asHeaders contains the headers in argz format, one
        * logical NUL-terminated line per header which might be wrapped into
        * multiple '\n'-ended physical lines. The "From " envelope, "Received:",
  @@ -100,6 +103,9 @@
       /* split message into header and body */
       if (str_parse(msg->cpMsg, "m/((?:.*?)\\n)\\n(.*)$/s", &cpHeaders, &msg->cpBody) <= 0)
           return MSG_ERR_SPLITHEADBODY;
  +
  +    free(msg->cpMsg);
  +    msg->cpMsg = NULL;
   
       /* replace envelope From w/o colon by X-F: pseudotag. This eliminates the
        * special case of having one header, which is really an embedded
  Index: ossp-pkg/lmtp2nntp/sa.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 sa.c
  --- ossp-pkg/lmtp2nntp/sa.c	2001/08/27 14:49:32	1.5
  +++ ossp-pkg/lmtp2nntp/sa.c	2001/08/28 11:31:22	1.6
  @@ -212,8 +212,8 @@
   
       if (sa->sa_buf != NULL)
           free(sa->sa_buf);
  -
       free(sa);
  +
       return;
   }
   

From ossp-cvs-owner@ossp.org  Tue Aug 28 14:49:35 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7SCnXm45749; Tue, 28 Aug 2001 14:49:33 +0200 (CEST)
Date: Tue, 28 Aug 2001 14:49:33 +0200 (CEST)
Message-Id: <200108281249.f7SCnXm45749@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   28-Aug-2001 14:49:33
  Branch: HEAD                             Handle: 2001082813493300

  Modified files:
    ossp-pkg/lmtp2nntp      nntp.c

  Log:
    news regarding INNs MODE READER behavior and 441 returns

  Summary:
    Revision    Changes     Path
    1.19        +7  -2      ossp-pkg/lmtp2nntp/nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/nntp.c
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 nntp.c
  --- ossp-pkg/lmtp2nntp/nntp.c	2001/08/27 14:49:32	1.18
  +++ ossp-pkg/lmtp2nntp/nntp.c	2001/08/28 12:49:33	1.19
  @@ -141,7 +141,7 @@
   
       /* prepare for the INN kludge using 441 returns for other things but
        * "Duplicate".  Typical welcome string is "200 host InterNetNews NNRP
  -     * server INN 2.3.2 ready (posting * ok)."
  +     * server INN 2.3.2 ready (posting ok)."
        */
       if (strncmp(line, "200", 3) == 0 && strstr(line, " INN ") != NULL) {
           nntp->kludgeinn441dup = TRUE;
  @@ -256,7 +256,11 @@
        *  > POST
        *  < 340 Ok, recommended ID <...>
        *  
  -     *  In other words, INN *requires* the use of "MODE READER".
  +     *  In other words, INN *requires* the use of "MODE READER". This has been
  +     *  verified when INN is configured for expecting both news readers and
  +     *  feeders from a given source address. When INN is configured to expect
  +     *  readers only for a given source address the use of "MODE READER" is
  +     *  optional.
        */
       *line = NUL;
       strcat(line, "MODE READER");
  @@ -319,6 +323,7 @@
        *  441 Duplicate "Newsgroups" header
        *  441 Required "Subject" header is missing
        *  441 Obsolete "Received" header
  +     *  441 Line # too long
        *  
        *  In other words, INN uses 441 for other status messages as well.
        */

From ossp-cvs-owner@ossp.org  Tue Aug 28 15:13:01 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7SDCxj48448; Tue, 28 Aug 2001 15:12:59 +0200 (CEST)
Date: Tue, 28 Aug 2001 15:12:59 +0200 (CEST)
Message-Id: <200108281312.f7SDCxj48448@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp .cvsignore 00TODO Makefile.in README lm...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   28-Aug-2001 15:12:59
  Branch: HEAD                             Handle: 2001082814125801

  Modified files:
    ossp-pkg/lmtp2nntp      .cvsignore 00TODO Makefile.in README lmtp2nntp.c
                            lmtp2nntp.pod
    ossp-pkg/lmtp2nntp/test run.sh

  Log:
    option -h now understands multiple hosts as comma separated list; .cvsignore
    test/dmalloc.log; program is now called "mail to news gateway" consequently -
    including case; parts of usage() and .pod can now be created from source; test
    suite and 00TODO updated;

  Summary:
    Revision    Changes     Path
    1.9         +1  -0      ossp-pkg/lmtp2nntp/.cvsignore
    1.19        +2  -1      ossp-pkg/lmtp2nntp/00TODO
    1.10        +2  -1      ossp-pkg/lmtp2nntp/Makefile.in
    1.4         +1  -1      ossp-pkg/lmtp2nntp/README
    1.32        +74 -52     ossp-pkg/lmtp2nntp/lmtp2nntp.c
    1.8         +16 -11     ossp-pkg/lmtp2nntp/lmtp2nntp.pod
    1.11        +3  -2      ossp-pkg/lmtp2nntp/test/run.sh
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/.cvsignore
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 .cvsignore
  --- ossp-pkg/lmtp2nntp/.cvsignore	2001/08/28 11:31:22	1.8
  +++ ossp-pkg/lmtp2nntp/.cvsignore	2001/08/28 13:12:58	1.9
  @@ -10,3 +10,4 @@
   lmtp2nntp.1
   lmtp2nntp-*.tar.gz
   dmalloc.log
  +test/dmalloc.log
  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	2001/08/28 11:31:22	1.18
  +++ ossp-pkg/lmtp2nntp/00TODO	2001/08/28 13:12:58	1.19
  @@ -4,9 +4,10 @@
   whatsup draufleiten
   RFC1891 ENVID
   RFC1891 6.2
  --h needs to understand multiple hosts as comma separated list
   ID logging problem
   lmtp_response segfaults when a physical line ('\n' terminated) of the logical line input exceeds LMTP_LINE_MAXLEN.
  +something segfaults when NNTP unreachable data with very long lines is read as commands
  +manpage header reads "User Contributed Perl Documentation" - Perl!?
   
       **** LMTP REDESIGN ****
   
  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	2001/08/23 09:12:30	1.9
  +++ ossp-pkg/lmtp2nntp/Makefile.in	2001/08/28 13:12:58	1.10
  @@ -32,7 +32,7 @@
   lmtp2nntp.1: lmtp2nntp.pod
   	VS=`$(SHTOOL) version -lc -dshort version.c`; \
   	VL=`$(SHTOOL) version -lc -dlong version.c`; \
  -	$(POD2MAN) --section=1 --center="Mail to News Gateway" \
  +	$(POD2MAN) --section=1 --center="mail to news gateway" \
                  --release="$$VS" --date="$$VL" \
                  lmtp2nntp.pod >lmtp2nntp.1 
   
  @@ -43,6 +43,7 @@
   
   clean:
   	-rm -f *.core
  +    -rm -f dmalloc.log test/dmalloc.log
   	-rm -f $(PROG)
   	-rm -f $(OBJS)
   
  Index: ossp-pkg/lmtp2nntp/README
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 README
  --- ossp-pkg/lmtp2nntp/README	2001/08/28 11:31:22	1.3
  +++ ossp-pkg/lmtp2nntp/README	2001/08/28 13:12:58	1.4
  @@ -1,3 +1,3 @@
   
  -  OSSP lmtp2nntp - Mail to News Gateway
  +  OSSP lmtp2nntp - mail to news gateway
   
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/08/28 11:31:22	1.31
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/08/28 13:12:58	1.32
  @@ -124,24 +124,33 @@
    */
   static void usage(char *command)
   {
  +    /*  use
  +     *  perl <lmtp2nntp.c -e 'while (<>) { if(m/\/\*POD (.*) .*\*\//) { $_=$1; s/.<(.*?)>/$1/g ; print "$_ " };}'
  +     *  to pull the USAGE string out of this source
  +     */
       fprintf(stderr, 
  -            "USAGE: %s [-p protocol] [-l logtarget] "
  -            "[-h host[:port]] [-m mode] [-t] [-v] newsgroup [newsgroup ...]\n",
  +            "USAGE: %s "
  +            "lmtp2nntp [-d deliverymode] [-g groupmode] [-h host[:port]] "
  +            "[-t tracefile] [-v] [-V] newsgroup [newsgroup ...]"
  +            "\n",
               command);
       return;
   }
   
   int main(int argc, char **argv)
   {
  -    int rc = 0;
  -    lmtp_t *lmtp;
  -    lmtp_io_t lmtp_io;
  +    int          rc = 0;
  +    lmtp_t      *lmtp;
  +    lmtp_io_t    lmtp_io;
       lmtp2nntp_t *ctx;
  -    int i;             /* general purpose scratch int, index ... */
  -    char *progname;
  -    char *cpHost;
  -    char *cpPort;
  -    sa_t *sa;
  +    int          i;             /* general purpose scratch int, index ... */
  +    char        *cp;            /* general purpose character pointer */
  +    char        *progname;
  +    char        *azHosts;
  +    size_t       asHosts;
  +    char        *cpHost;
  +    char        *cpPort;
  +    sa_t        *sa;
   
       progname = argv[0];
   
  @@ -187,10 +196,17 @@
       }
   #endif
   
  +    /*POD B<lmtp2nntp> */
  +
  +    /*  use
  +     *  perl <lmtp2nntp.c -e 'while (<>) { if(m/\/\*POD (.*) .*\*\//) { $_=$1; s/.<(.*?)>/$1/g ; print "$_\n" };}'
  +     *  to pull the POD SYNOPSIS header directly out of this source
  +     */
  +
       /* read in the arguments */
       while ((i = getopt(argc, argv, "d:g:h:t:vV")) != -1) {
           switch (i) {
  -            case 'd': /* -d deliverymode */
  +            case 'd': /*POD [B<-d> I<deliverymode>] */
                   if      (strcasecmp(optarg, "post") == 0)
                       ctx->option_deliverymode = DELIVERYMODE_POST;
                   else if (strcasecmp(optarg, "feed") == 0)
  @@ -230,7 +246,7 @@
                           }
                       }
                   break;
  -            case 'g': /* -g groupmode */
  +            case 'g': /*POD [B<-g> I<groupmode>] */
                   if      (strcasecmp(optarg, "arg") == 0)
                       ctx->option_groupmode = GROUPMODE_ARG;
                   else if (strcasecmp(optarg, "envelope") == 0)
  @@ -242,55 +258,61 @@
                       exit(ERR_EXECUTION);
                   }
                   break;
  -            case 'h': /* -h host */
  -                if (ctx->nsc >= MAXNEWSSERVICES) {
  -                    fprintf(stderr, "%s:Error: Too many services (%d) using option -h\n", progname, ctx->nsc);
  +            case 'h': /*POD [B<-h> I<host>[I<:port>]] */
  +                if (argz_create_sep(optarg, ',', &azHosts, &asHosts) != 0)
                       exit(ERR_EXECUTION);
  -                }
  +                cp = NULL;
  +                while ((cp = argz_next(azHosts, asHosts, cp)) != NULL) {
  +                    if (ctx->nsc >= MAXNEWSSERVICES) {
  +                        fprintf(stderr, "%s:Error: Too many services (%d) using option -h\n", progname, ctx->nsc);
  +                        exit(ERR_EXECUTION);
  +                    }
   
  -                /* parse host[:port] string into host and port */
  -                cpHost = strdup(optarg);
  -                if ((cpPort = strrchr(cpHost, ':')) != NULL) {
  -                    *cpPort++ = NUL;
  -                    cpPort = strdup(cpPort);
  -                }
  -                else 
  -                    cpPort = strdup("nntp");
  -                ctx->ns[ctx->nsc].h = cpHost;
  -                ctx->ns[ctx->nsc].p = cpPort;
  -
  -                if ((sa = sa_create(SA_IP, "tcp",
  -                                    ctx->ns[ctx->nsc].h,
  -                                    ctx->ns[ctx->nsc].p)) == NULL) {
  -                    fprintf(stderr, "%s:Error: creating TCP socket address failed for \"%s:%s\": %s\n", 
  -                            progname, 
  -                            ctx->ns[ctx->nsc].h, 
  -                            ctx->ns[ctx->nsc].p, 
  -                            strerror(errno));
  -                    exit(ERR_EXECUTION);
  -                }
  -                ctx->ns[ctx->nsc].sa = sa;
  -                if ((ctx->ns[ctx->nsc].s =
  -                     socket(sa->sa_buf->sa_family, SOCK_STREAM, sa->sa_proto)) == -1) {
  -                    fprintf(stderr, "%s:Error: Creating TCP socket failed for \"%s:%s\": %s\n", 
  -                            progname, 
  -                            ctx->ns[ctx->nsc].h, 
  -                            ctx->ns[ctx->nsc].p, 
  -                            strerror(errno));
  -                    exit(ERR_EXECUTION);
  +                    /* parse host[:port] string into host and port */
  +                    cpHost = strdup(cp);
  +                    if ((cpPort = strrchr(cpHost, ':')) != NULL) {
  +                        *cpPort++ = NUL;
  +                        cpPort = strdup(cpPort);
  +                    }
  +                    else 
  +                        cpPort = strdup("nntp");
  +                    ctx->ns[ctx->nsc].h = cpHost;
  +                    ctx->ns[ctx->nsc].p = cpPort;
  +
  +                    if ((sa = sa_create(SA_IP, "tcp",
  +                                        ctx->ns[ctx->nsc].h,
  +                                        ctx->ns[ctx->nsc].p)) == NULL) {
  +                        fprintf(stderr, "%s:Error: creating TCP socket address failed for \"%s:%s\": %s\n", 
  +                                progname, 
  +                                ctx->ns[ctx->nsc].h, 
  +                                ctx->ns[ctx->nsc].p, 
  +                                strerror(errno));
  +                        exit(ERR_EXECUTION);
  +                    }
  +                    ctx->ns[ctx->nsc].sa = sa;
  +                    if ((ctx->ns[ctx->nsc].s =
  +                         socket(sa->sa_buf->sa_family, SOCK_STREAM, sa->sa_proto)) == -1) {
  +                        fprintf(stderr, "%s:Error: Creating TCP socket failed for \"%s:%s\": %s\n", 
  +                                progname, 
  +                                ctx->ns[ctx->nsc].h, 
  +                                ctx->ns[ctx->nsc].p, 
  +                                strerror(errno));
  +                        exit(ERR_EXECUTION);
  +                    }
  +                    ctx->ns[ctx->nsc].nntp = NULL;
  +                    ctx->nsc++;
                   }
  -                ctx->ns[ctx->nsc].nntp = NULL;
  -                ctx->nsc++;
  +                free(azHosts);
                   break;
  -            case 't': /* -t (tracing) */
  +            case 't': /*POD [B<-t> I<tracefile>] */
                   ctx->option_tracing = TRUE;
                   trace_read (-1, optarg, 0);
                   trace_write(-1, optarg, 0);
                   break;
  -            case 'v': /* -v (verbose) */
  +            case 'v': /*POD [B<-v>] (verbose)*/
                   ctx->option_verbose = TRUE;
                   break;
  -            case 'V': /* -V (version) */
  +            case 'V': /*POD [B<-V>] (version)*/
                   fprintf(stdout, "%s\n", lmtp2nntp_version.v_gnu);
                   exit(0);
                   break;
  @@ -300,7 +322,7 @@
                   exit(ERR_EXECUTION);
           }
       }
  -    /* remaining arguments are Groupargs */
  +    /*POD I<newsgroup> [I<newsgroup> ...] */
       for (i = optind; i < argc; i++) {
           argz_add(&ctx->azGroupargs, &ctx->asGroupargs, argv[i]);
       }
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 lmtp2nntp.pod
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/08/28 11:29:40	1.7
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/08/28 13:12:58	1.8
  @@ -3,24 +3,25 @@
   
   =head1 NAME
   
  -B<lmtp2nntp> - mail to nntp gateway
  +B<lmtp2nntp> - mail to news gateway
   
   =head1 SYNOPSIS
   
  -B<lmtp2nntp> 
  -[B<-o> I<origin>]
  -[B<-j> I<hostname>]
  -[B<-i> I<messageid>]
  -[B<-t> I<timeout>]
  -[B<-p> I<protocol>]
  -[B<-l> I<logtarget>]
  -[B<-h> I<host>[I<:port>]]
  +B<lmtp2nntp>
   [B<-d> I<deliverymode>]
   [B<-g> I<groupmode>]
  +[B<-h> I<host>[I<:port>]]
   [B<-t> I<tracefile>]
   [B<-v>]
  -I<newsgroup> 
  -[I<newsgroup> ...]
  +[B<-V>]
  +I<newsgroup> [I<newsgroup> ...]
  +B<FIXME NOT YET IMPLEMENTED>
  +[B<-o> I<origin>]
  +[B<-j> I<hostname>]
  +[B<-i> I<messageid>]
  +[B<-T> I<timeout>]
  +[B<-l> I<logtarget>]
  +
   
   =head1 DESCRIPTION
   
  @@ -201,6 +202,10 @@
   2034 SMTP Service Extension for Returning Enhanced Error Codes. N.
        Freed. October 1996. (Format: TXT=10460 bytes) (Status: PROPOSED
        STANDARD)
  +
  +2606 Reserved Top Level DNS Names. D. Eastlake, A. Panitz. June 1999.
  +     (Format: TXT=8008 bytes) (Also BCP0032) (Status: BEST CURRENT
  +     PRACTICE)
   
   2821 Simple Mail Transfer Protocol. J. Klensin, Editor. April 2001.
        (Format: TXT=192504 bytes) (Obsoletes RFC0821, RFC0974, RFC1869)
  Index: ossp-pkg/lmtp2nntp/test/run.sh
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 run.sh
  --- ossp-pkg/lmtp2nntp/test/run.sh	2001/08/27 13:45:53	1.10
  +++ ossp-pkg/lmtp2nntp/test/run.sh	2001/08/28 13:12:59	1.11
  @@ -42,9 +42,10 @@
   lmtp()
   {
       newmsg lmtp
  +    set -x
       cat /tmp/testmessage \
  -     | ../lmtp2nntp -t /tmp/tracing -d $1 -g $2 -h dev16 $3 >/dev/null; echo $?
  -  echo ../lmtp2nntp -t /tmp/tracing -d $1 -g $2 -h dev16 $3
  +     | ../lmtp2nntp -t /tmp/tracing -d $1 -g $2 -h dev16,141.1.23.116:nntp -h dev16.de.cw.net:119 $3 >/dev/null; echo $?
  +    set +x
   #   cat /tmp/testmessage \
   #    | ../lmtp2nntp -t /tmp/tracing -d $1 -g $2 -h dev16 $3 >/dev/null; echo $?
   }

From ossp-cvs-owner@ossp.org  Tue Aug 28 15:35:25 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7SDZOC51051; Tue, 28 Aug 2001 15:35:24 +0200 (CEST)
Date: Tue, 28 Aug 2001 15:35:24 +0200 (CEST)
Message-Id: <200108281335.f7SDZOC51051@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp Makefile.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   28-Aug-2001 15:35:24
  Branch: HEAD                             Handle: 2001082814352300

  Modified files:
    ossp-pkg/lmtp2nntp      Makefile.in

  Log:
    fixed Makefile tab vs. space problem

  Summary:
    Revision    Changes     Path
    1.11        +1  -1      ossp-pkg/lmtp2nntp/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	2001/08/28 13:12:58	1.10
  +++ ossp-pkg/lmtp2nntp/Makefile.in	2001/08/28 13:35:23	1.11
  @@ -43,7 +43,7 @@
   
   clean:
   	-rm -f *.core
  -    -rm -f dmalloc.log test/dmalloc.log
  +	-rm -f dmalloc.log test/dmalloc.log
   	-rm -f $(PROG)
   	-rm -f $(OBJS)
   

From ossp-cvs-owner@ossp.org  Tue Aug 28 16:22:48 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7SEMkU56301; Tue, 28 Aug 2001 16:22:46 +0200 (CEST)
Date: Tue, 28 Aug 2001 16:22:46 +0200 (CEST)
Message-Id: <200108281422.f7SEMkU56301@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp .configure
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   28-Aug-2001 16:22:46
  Branch: HEAD                             Handle: 2001082815224500

  Modified files:
    ossp-pkg/lmtp2nntp      .configure

  Log:
    dmalloc comment inside multiline command failes - relocated

  Summary:
    Revision    Changes     Path
    1.6         +2  -1      ossp-pkg/lmtp2nntp/.configure
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/.configure
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 .configure
  --- ossp-pkg/lmtp2nntp/.configure	2001/08/28 11:31:22	1.5
  +++ ossp-pkg/lmtp2nntp/.configure	2001/08/28 14:22:45	1.6
  @@ -5,6 +5,7 @@
   PATH=/cw/bin:$PATH
   ./configure \
      --with-str=/cw \
  -#  --with-dmalloc=/cw \
      --enable-debug \
      --prefix=/tmp/lmtp2nntp
  +
  +#  --with-dmalloc=/cw \

From ossp-cvs-owner@ossp.org  Tue Aug 28 16:24:05 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7SEO4K56427; Tue, 28 Aug 2001 16:24:04 +0200 (CEST)
Date: Tue, 28 Aug 2001 16:24:04 +0200 (CEST)
Message-Id: <200108281424.f7SEO4K56427@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp msg.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   28-Aug-2001 16:24:04
  Branch: HEAD                             Handle: 2001082815240300

  Modified files:
    ossp-pkg/lmtp2nntp      msg.c

  Log:
    isblank() not available on solaris8 - replaced by isspace()

  Summary:
    Revision    Changes     Path
    1.14        +3  -3      ossp-pkg/lmtp2nntp/msg.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/msg.c
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 msg.c
  --- ossp-pkg/lmtp2nntp/msg.c	2001/08/28 11:31:22	1.13
  +++ ossp-pkg/lmtp2nntp/msg.c	2001/08/28 14:24:03	1.14
  @@ -266,13 +266,13 @@
               for (o = 0; (cpRem[o] != ':') && (cpRem[o] != NUL); o++); /* offset name so at least one char of value remains in first line */
               o += 2; /* skip ": " */
               while ((strlen(cpRem) + (cpWrap == NULL ? 0 : strlen(WRAPUSING))) > WRAPAT) {
  -                for (i = WRAPAT - 1 - (cpWrap == NULL ? 0 : strlen(WRAPUSING)); (i >= o) && !isblank(cpRem[i]); i--);
  +                for (i = WRAPAT - 1 - (cpWrap == NULL ? 0 : strlen(WRAPUSING)); (i >= o) && !isspace(cpRem[i]); i--);
                   if (i < o)
                       i = WRAPAT - 1 - (cpWrap == NULL ? 0 : strlen(WRAPUSING) - 1); /* sorry, forced cut at non-blank */
                   cpCut = cpRem;
                   cpRem += i;
  -                for (; (isblank(*cpRem) && (*cpRem != NUL)); cpRem++); /* skip next lines leading blanks */
  -                for (; (i >= o) && isblank(cpCut[i-1]); i--); /* chop off this lines trailing blanks */
  +                for (; (isspace(*cpRem) && (*cpRem != NUL)); cpRem++); /* skip next lines leading blanks */
  +                for (; (i >= o) && isspace(cpCut[i-1]); i--); /* chop off this lines trailing blanks */
                   if (i >= o) { /* only keep line fragment if some non-blanks inside */
                       if (cpWrap == NULL) {
                           if ((cpWrap = (char *)malloc(i+strlen(WRAPUSING)+1)) == NULL)

From ossp-cvs-owner@ossp.org  Tue Aug 28 16:27:37 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7SERaQ56738; Tue, 28 Aug 2001 16:27:36 +0200 (CEST)
Date: Tue, 28 Aug 2001 16:27:36 +0200 (CEST)
Message-Id: <200108281427.f7SERaQ56738@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO lmtp2nntp.c ossp-pkg/lmtp2nntp/t...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   28-Aug-2001 16:27:36
  Branch: HEAD                             Handle: 2001082815273500

  Added files:
    ossp-pkg/lmtp2nntp/test testmessage.foldlinesvialmtp
  Modified files:
    ossp-pkg/lmtp2nntp      00TODO lmtp2nntp.c
    ossp-pkg/lmtp2nntp/test testmessage.vialmtp

  Log:
    the MAIL and DATA callbacks checked for information no longer available after
    we proper free the structure containing this data. Now rewritten to first
    check for existence of structure then look into the structure; segfault fixed;
    00TODO updated; long line test file renamed and long lines removed from normal
    test suite;

  Summary:
    Revision    Changes     Path
    1.20        +0  -1      ossp-pkg/lmtp2nntp/00TODO
    1.33        +3  -3      ossp-pkg/lmtp2nntp/lmtp2nntp.c
    1.1         +24 -0      ossp-pkg/lmtp2nntp/test/testmessage.foldlinesvialmtp
    1.4         +0  -6      ossp-pkg/lmtp2nntp/test/testmessage.vialmtp
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	2001/08/28 13:12:58	1.19
  +++ ossp-pkg/lmtp2nntp/00TODO	2001/08/28 14:27:35	1.20
  @@ -6,7 +6,6 @@
   RFC1891 6.2
   ID logging problem
   lmtp_response segfaults when a physical line ('\n' terminated) of the logical line input exceeds LMTP_LINE_MAXLEN.
  -something segfaults when NNTP unreachable data with very long lines is read as commands
   manpage header reads "User Contributed Perl Documentation" - Perl!?
   
       **** LMTP REDESIGN ****
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.32 -r1.33 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/08/28 13:12:58	1.32
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/08/28 14:27:35	1.33
  @@ -176,7 +176,7 @@
       ctx->asGroupargs = 0;
       initsession(&ctx->session);
       ctx->msg = NULL;
  -    if (uname(&ctx->uname) != 0) {
  +    if (uname(&ctx->uname) == -1) {
           fprintf(stderr, "%s:Error: uname failed \"%s\"\n", progname, strerror(errno));
           exit(ERR_EXECUTION);
       }
  @@ -755,7 +755,7 @@
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.5.0   Other or undefined protocol status
        */
  -    if (ctx->msg->mail_from == NULL) {
  +    if ((ctx->msg == NULL) || (ctx->msg->mail_from == NULL)) {
           res.statuscode = "503";
           res.dsncode    = "5.5.0";
           res.statusmsg  = "specify sender with MAIL first.";
  @@ -858,7 +858,7 @@
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.5.0   Other or undefined protocol status
        */
  -    if (argz_count(ctx->msg->azRcpt, ctx->msg->asRcpt) == 0) {
  +    if ((ctx->msg == NULL) || (argz_count(ctx->msg->azRcpt, ctx->msg->asRcpt) == 0)) {
           res.statuscode = "503";
           res.dsncode    = "5.5.0";
           res.statusmsg  = "specify recipient with RCPT first.";
  Index: ossp-pkg/lmtp2nntp/test/testmessage.foldlinesvialmtp
  ============================================================
  $ cvs update -p -r1.1 testmessage.foldlinesvialmtp
  LHLO dev.de.cw.net
  MAIL From:<thl@dev.de.cw.net>
  RCPT To:<cw.de.sd.apps.dev.test@news-posting>
  RCPT To:<foo.bar@news-posting>
  RCPT To:<foo.test.bar@news-posting>
  DATA
  Date: Tue, 26 Aug 2001 14:51:48 +0200 (CEST)
  Message-Id: <200108141251.f7ECpmn74812@dev.de.cw.net>
  From: Thomas Lotterer <Thomas.Lotterer@de.cw.net>
  X-Wraptest1:      0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
  X-Wraptest2: 01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
  X-Wraptest3:    the quick brown fox jumps over the lazy dog. THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG. the quick brown fox jumps over the lazy dog. THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG. the quick brown fox jumps over the lazy dog. THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG. the quick brown fox jumps over the lazy dog. THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG. the quick brown fox jumps over the lazy dog. THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG. the quick brown fox jumps over the lazy dog. THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG. the quick brown fox jumps over the lazy dog. THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG!
  X-Wraptest4: thequickbrownfoxjumpsoverthelazydog.THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG.thequickbrownfoxjumpsoverthelazydog.THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG.thequickbrownfoxjumpsoverthelazydog.THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG.thequickbrownfoxjumpsoverthelazydog.THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG.thequickbrownfoxjumpsoverthelazydog.THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG.thequickbrownfoxjumpsoverthelazydog.THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG.thequickbrownfoxjumpsoverthelazydog.THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG!
  X-Wraptest5:        the  quick  brown  fox  jumps  over  the  lazy  dog.  THE  QUICK  BROWN  FOX  JUMPS  OVER  THE  LAZY  DOG.  the  quick  brown  fox  jumps  over  the  lazy  dog.  THE  QUICK  BROWN  FOX  JUMPS  OVER  THE  LAZY  DOG.  the  quick  brown  fox  jumps  over  the  lazy  dog.  THE  QUICK  BROWN  FOX  JUMPS  OVER  THE  LAZY  DOG.  the  quick  brown  fox  jumps  over  the  lazy  dog.  THE  QUICK  BROWN  FOX  JUMPS  OVER  THE  LAZY  DOG.  the  quick  brown  fox  jumps  over  the  lazy  dog.  THE  QUICK  BROWN  FOX  JUMPS  OVER  THE  LAZY  DOG.  the  quick  brown  fox  jumps  over  the  lazy  dog.  THE  QUICK  BROWN  FOX  JUMPS  OVER  THE  LAZY  DOG.  the  quick  brown  fox  jumps  over  the  lazy  dog.  THE  QUICK  BROWN  FOX  JUMPS  OVER  THE  LAZY  DOG!
  X-Wraptest6:                the    quick    brown    fox    jumps    over    the    lazy    dog.    THE    QUICK    BROWN    FOX    JUMPS    OVER    THE    LAZY    DOG.    the    quick    brown    fox    jumps    over    the    lazy    dog.    THE    QUICK    BROWN    FOX    JUMPS    OVER    THE    LAZY    DOG.    the    quick    brown    fox    jumps    over    the    lazy    dog.    THE    QUICK    BROWN    FOX    JUMPS    OVER    THE    LAZY    DOG.    the    quick    brown    fox    jumps    over    the    lazy    dog.    THE    QUICK    BROWN    FOX    JUMPS    OVER    THE    LAZY    DOG.    the    quick    brown    fox    jumps    over    the    lazy    dog.    THE    QUICK    BROWN    FOX    JUMPS    OVER    THE    LAZY    DOG.    the    quick    brown    fox    jumps    over    the    lazy    dog.    THE    QUICK    BROWN    FOX    JUMPS    OVER    THE    LAZY    DOG.    the    quick    brown    fox    jumps    over    the    lazy    dog.    THE    QUICK    BROWN    FOX    JUMPS    OVER    THE    LAZY    DOG!
  Subject: lmtp2nntp testmessage.viasendmail
  
  ..
  a dot above
  #
  a dot below
  ..
  .
  QUIT
  Index: ossp-pkg/lmtp2nntp/test/testmessage.vialmtp
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 testmessage.vialmtp
  --- ossp-pkg/lmtp2nntp/test/testmessage.vialmtp	2001/08/27 13:45:53	1.3
  +++ ossp-pkg/lmtp2nntp/test/testmessage.vialmtp	2001/08/28 14:27:35	1.4
  @@ -7,12 +7,6 @@
   Date: Tue, 26 Aug 2001 14:51:48 +0200 (CEST)
   Message-Id: <200108141251.f7ECpmn74812@dev.de.cw.net>
   From: Thomas Lotterer <Thomas.Lotterer@de.cw.net>
  -X-Wraptest1:      0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
  -X-Wraptest2: 01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
  -X-Wraptest3:    the quick brown fox jumps over the lazy dog. THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG. the quick brown fox jumps over the lazy dog. THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG. the quick brown fox jumps over the lazy dog. THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG. the quick brown fox jumps over the lazy dog. THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG. the quick brown fox jumps over the lazy dog. THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG. the quick brown fox jumps over the lazy dog. THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG. the quick brown fox jumps over the lazy dog. THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG!
  -X-Wraptest4: thequickbrownfoxjumpsoverthelazydog.THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG.thequickbrownfoxjumpsoverthelazydog.THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG.thequickbrownfoxjumpsoverthelazydog.THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG.thequickbrownfoxjumpsoverthelazydog.THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG.thequickbrownfoxjumpsoverthelazydog.THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG.thequickbrownfoxjumpsoverthelazydog.THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG.thequickbrownfoxjumpsoverthelazydog.THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG!
  -X-Wraptest5:        the  quick  brown  fox  jumps  over  the  lazy  dog.  THE  QUICK  BROWN  FOX  JUMPS  OVER  THE  LAZY  DOG.  the  quick  brown  fox  jumps  over  the  lazy  dog.  THE  QUICK  BROWN  FOX  JUMPS  OVER  THE  LAZY  DOG.  the  quick  brown  fox  jumps  over  the  lazy  dog.  THE  QUICK  BROWN  FOX  JUMPS  OVER  THE  LAZY  DOG.  the  quick  brown  fox  jumps  over  the  lazy  dog.  THE  QUICK  BROWN  FOX  JUMPS  OVER  THE  LAZY  DOG.  the  quick  brown  fox  jumps  over  the  lazy  dog.  THE  QUICK  BROWN  FOX  JUMPS  OVER  THE  LAZY  DOG.  the  quick  brown  fox  jumps  over  the  lazy  dog.  THE  QUICK  BROWN  FOX  JUMPS  OVER  THE  LAZY  DOG.  the  quick  brown  fox  jumps  over  the  lazy  dog.  THE  QUICK  BROWN  FOX  JUMPS  OVER  THE  LAZY  DOG!
  -X-Wraptest6:                the    quick    brown    fox    jumps    over    the    lazy    dog.    THE    QUICK    BROWN    FOX    JUMPS    OVER    THE    LAZY    DOG.    the    quick    brown    fox    jumps    over    the    lazy    dog.    THE    QUICK    BROWN    FOX    JUMPS    OVER    THE    LAZY    DOG.    the    quick    brown    fox    jumps    over    the    lazy    dog.    THE    QUICK    BROWN    FOX    JUMPS    OVER    THE    LAZY    DOG.    the    quick    brown    fox    jumps    over    the    lazy    dog.    THE    QUICK    BROWN    FOX    JUMPS    OVER    THE    LAZY    DOG.    the    quick    brown    fox    jumps    over    the    lazy    dog.    THE    QUICK    BROWN    FOX    JUMPS    OVER    THE    LAZY    DOG.    the    quick    brown    fox    jumps    over    the    lazy    dog.    THE    QUICK    BROWN    FOX    JUMPS    OVER    THE    LAZY    DOG.    the    quick    brown    fox    jumps    over    the    lazy    dog.    THE    QUICK    BROWN    FOX    JUMPS    OVER    THE    LAZY    DOG!
   Subject: lmtp2nntp testmessage.viasendmail
   
   ..

From ossp-cvs-owner@ossp.org  Tue Aug 28 16:30:11 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7SEUA557453; Tue, 28 Aug 2001 16:30:10 +0200 (CEST)
Date: Tue, 28 Aug 2001 16:30:10 +0200 (CEST)
Message-Id: <200108281430.f7SEUA557453@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp version.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   28-Aug-2001 16:30:10
  Branch: HEAD                             Handle: 2001082815301000

  Modified files:
    ossp-pkg/lmtp2nntp      version.c

  Log:
    bump version for release

  Summary:
    Revision    Changes     Path
    1.4         +9  -9      ossp-pkg/lmtp2nntp/version.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/version.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 version.c
  --- ossp-pkg/lmtp2nntp/version.c	2001/08/23 14:03:30	1.3
  +++ ossp-pkg/lmtp2nntp/version.c	2001/08/28 14:30:10	1.4
  @@ -8,7 +8,7 @@
   #ifndef _VERSION_C_
   #define _VERSION_C_
   
  -#define LMTP2NNTP_VERSION 0x009202
  +#define LMTP2NNTP_VERSION 0x009203
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _VERSION_C_AS_HEADER_
   
   lmtp2nntp_version_t lmtp2nntp_version = {
  -    0x009202,
  -    "0.9.2",
  -    "0.9.2 (23-Aug-2001)",
  -    "This is lmtp2nntp, Version 0.9.2 (23-Aug-2001)",
  -    "lmtp2nntp 0.9.2 (23-Aug-2001)",
  -    "lmtp2nntp/0.9.2",
  -    "@(#)lmtp2nntp 0.9.2 (23-Aug-2001)",
  -    "$Id: version.c,v 1.3 2001/08/23 14:03:30 thl Exp $"
  +    0x009203,
  +    "0.9.3",
  +    "0.9.3 (28-Aug-2001)",
  +    "This is lmtp2nntp, Version 0.9.3 (28-Aug-2001)",
  +    "lmtp2nntp 0.9.3 (28-Aug-2001)",
  +    "lmtp2nntp/0.9.3",
  +    "@(#)lmtp2nntp 0.9.3 (28-Aug-2001)",
  +    "$Id: version.c,v 1.4 2001/08/28 14:30:10 thl Exp $"
   };
   
   #endif /* _VERSION_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Wed Aug 29 16:58:23 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7TEwMR27480; Wed, 29 Aug 2001 16:58:22 +0200 (CEST)
Date: Wed, 29 Aug 2001 16:58:22 +0200 (CEST)
Message-Id: <200108291458.f7TEwMR27480@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO lmtp.c lmtp2nntp.c lmtp2nntp.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   29-Aug-2001 16:58:21
  Branch: HEAD                             Handle: 2001082915582100

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO lmtp.c lmtp2nntp.c lmtp2nntp.pod

  Log:
    added -m maxmessagesize option

  Summary:
    Revision    Changes     Path
    1.21        +0  -1      ossp-pkg/lmtp2nntp/00TODO
    1.18        +1  -1      ossp-pkg/lmtp2nntp/lmtp.c
    1.34        +18 -9      ossp-pkg/lmtp2nntp/lmtp2nntp.c
    1.9         +26 -2      ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	2001/08/28 14:27:35	1.20
  +++ ossp-pkg/lmtp2nntp/00TODO	2001/08/29 14:58:21	1.21
  @@ -1,5 +1,4 @@
   
  -M=NNNN im Sendmail ergaenzen (weil Postfix gar nix hat) durch -l Commandline options fuer Maximum Message Size
   use "RFC1918-like" private Domainnames for @example.com (check which name is registered)
   whatsup draufleiten
   RFC1891 ENVID
  Index: ossp-pkg/lmtp2nntp/lmtp.c
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 lmtp.c
  --- ossp-pkg/lmtp2nntp/lmtp.c	2001/08/28 11:31:22	1.17
  +++ ossp-pkg/lmtp2nntp/lmtp.c	2001/08/29 14:58:21	1.18
  @@ -218,7 +218,7 @@
       size_t offset;     /* required when cpBuf changed through realloc */
       size_t offsetline; /* memorizing start of line when reallocing in the middle of a line */
   
  -    nBuf = 4096;
  +    for (nBuf = 4096; nBuf > maxlen; nBuf = nBuf >> 1);
       if ((cpBuf = (char *)malloc(nBuf)) == NULL)
           return LMTP_ERR_MEM;
       *cppBuf = cpBuf;                           /* tell caller about the buffer */
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.33 -r1.34 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/08/28 14:27:35	1.33
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/08/29 14:58:21	1.34
  @@ -52,7 +52,6 @@
   #define ERR_EXECUTION -1
   #define ERR_DELIVERY -2
   
  -#define MESSAGE_MAXLEN 8*1024*1024
   #define STDSTRLEN 128
   #define MAXNEWSSERVICES 3
   
  @@ -94,6 +93,7 @@
       int             option_deliverymode;
       char           *option_deliverymodefakestatus;
       char           *option_deliverymodefakedsn;
  +    int             option_maxmessagesize;
       int             nsc;
       struct ns       ns[MAXNEWSSERVICES];
       char           *azGroupargs;
  @@ -130,8 +130,8 @@
        */
       fprintf(stderr, 
               "USAGE: %s "
  -            "lmtp2nntp [-d deliverymode] [-g groupmode] [-h host[:port]] "
  -            "[-t tracefile] [-v] [-V] newsgroup [newsgroup ...]"
  +            "[-d deliverymode] [-g groupmode] [-h host[:port]] "
  +            "[-m maxmessagesize] [-t tracefile] [-v] [-V] newsgroup [newsgroup ...]"
               "\n",
               command);
       return;
  @@ -163,6 +163,7 @@
       ctx->option_deliverymode = DELIVERYMODE_FAKE;
       ctx->option_deliverymodefakestatus = "553";   /* Requested action not taken: mailbox name not allowed */
       ctx->option_deliverymodefakedsn    = "5.7.1"; /* Delivery not authorized, message refused */
  +    ctx->option_maxmessagesize = 8 * 1024 * 1024;
       ctx->nsc = 0;
       for (i=0; i < MAXNEWSSERVICES; i++) {
           ctx->ns[i].h = NULL;
  @@ -199,12 +200,12 @@
       /*POD B<lmtp2nntp> */
   
       /*  use
  -     *  perl <lmtp2nntp.c -e 'while (<>) { if(m/\/\*POD (.*) .*\*\//) { $_=$1; s/.<(.*?)>/$1/g ; print "$_\n" };}'
  +     *  perl <lmtp2nntp.c -e 'while (<>) { if(m/\/\*POD (.*) .*\*\//) { $_=$1; print "$_\n" };}'
        *  to pull the POD SYNOPSIS header directly out of this source
        */
   
       /* read in the arguments */
  -    while ((i = getopt(argc, argv, "d:g:h:t:vV")) != -1) {
  +    while ((i = getopt(argc, argv, "d:g:h:m:t:vV")) != -1) {
           switch (i) {
               case 'd': /*POD [B<-d> I<deliverymode>] */
                   if      (strcasecmp(optarg, "post") == 0)
  @@ -304,6 +305,13 @@
                   }
                   free(azHosts);
                   break;
  +            case 'm': /*POD [B<-m> I<maxmessagesize>] */
  +                    ctx->option_maxmessagesize = atoi(optarg);
  +                    if(ctx->option_maxmessagesize < 64) {
  +                        fprintf(stderr, "%s:Error: maximum message size is unacceptable small.\n", progname);
  +                        exit(ERR_EXECUTION);
  +                    }
  +                break;
               case 't': /*POD [B<-t> I<tracefile>] */
                   ctx->option_tracing = TRUE;
                   trace_read (-1, optarg, 0);
  @@ -873,16 +881,17 @@
       res.statusmsg  = "Enter mail, end with \".\" on a line by itself";
       lmtp_response(lmtp, &res);
   
  -    rc = lmtp_readmsg(lmtp, &ctx->msg->cpMsg, MESSAGE_MAXLEN);
  +    rc = lmtp_readmsg(lmtp, &ctx->msg->cpMsg, ctx->option_maxmessagesize);
   
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   552 Requested mail action aborted: exceeded storage allocation
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
  -     *  RFC1893 3.5 Network and Routing Status          X.3.4   Message too big for system
  +     *  RFC1893 3.5 Network and Routing Status          X.2.3   Message length exceeds administrative limit.
  +
        */
       if (rc == LMTP_ERR_OVERFLOW) {
  -        str_format(errorstring, sizeof(errorstring), "Overflow reading message: %s", lmtp_error(rc));
  +        str_format(errorstring, sizeof(errorstring), "Message length exceeds administrative limit. %s", lmtp_error(rc));
           res.statuscode = "552";
  -        res.dsncode    = "5.3.4";
  +        res.dsncode    = "5.2.3";
           res.statusmsg  = errorstring;
           rcpt = NULL;
           while ((rcpt = argz_next(ctx->msg->azRcpt, ctx->msg->asRcpt, rcpt)) != NULL) {
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 lmtp2nntp.pod
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/08/28 13:12:58	1.8
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/08/29 14:58:21	1.9
  @@ -11,10 +11,10 @@
   [B<-d> I<deliverymode>]
   [B<-g> I<groupmode>]
   [B<-h> I<host>[I<:port>]]
  +[B<-m> I<maxmessagesize>]
   [B<-t> I<tracefile>]
   [B<-v>]
   [B<-V>]
  -I<newsgroup> [I<newsgroup> ...]
   B<FIXME NOT YET IMPLEMENTED>
   [B<-o> I<origin>]
   [B<-j> I<hostname>]
  @@ -53,6 +53,11 @@
   
   LMTP and NNTP protocol timeouts (in seconds).
    
  +=item [B<-m> I<maxmessagesize>]
  +
  +Maximum message size in bytes. Default is 8388608 (8M). Values below 64 are
  +considered unacceptable small.
  +
   =item B<-p> I<protocol>
   
   Incoming protocol. Default is C<stdin> which means B<lmtp2nntp>
  @@ -125,8 +130,27 @@
   =back
   
   =head1 SENDMAIL INTEGRATION
  +
  +t.virtusertable
  +
  +    # mail to news gateway
  +    posting+*@mail.de.cw.net %2@lmtp2nntp
  +
  +t.mailertable
   
  -  Mlmtp2nntp, P=/... /*FIXME*/
  +    # mail to news gateway
  +    lmtp2nntp       lmtp2nntp:visp.engelschall.com
  +
  +sendmail.m4
  +
  +    dnl #  Mailer: LMTP2NNTP (mail to news gateway)
  +    define(`LMTP2NNTP_MAILER_PATH',         `confMYBINDIR/lmtp2nntp')
  +    define(`LMTP2NNTP_MAILER_MAX',          `100000')
  +    define(`LMTP2NNTP_MAILER_DELIVERYMODE', `post')
  +    define(`LMTP2NNTP_MAILER_GROUPMODE',    `envelope')
  +    define(`LMTP2NNTP_MAILER_ARGS',         `-t confMYVARDIR/lmtp2nntp.log')
  +    define(`LMTP2NNTP_MAILER_GROUPS',       `cw.\* en.\*')
  +    MAILER(lmtp2nntp)
   
   =head1 EXAMPLE
   

From ossp-cvs-owner@ossp.org  Thu Aug 30 09:41:05 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7U7f3S44921; Thu, 30 Aug 2001 09:41:03 +0200 (CEST)
Date: Thu, 30 Aug 2001 09:41:03 +0200 (CEST)
Message-Id: <200108300741.f7U7f3S44921@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela shiela.pl
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   30-Aug-2001 09:41:03
  Branch: HEAD                             Handle: 2001083008410300

  Modified files:
    ossp-pkg/shiela         shiela.pl

  Log:
    better reporting plus bugfix for stock CVS

  Summary:
    Revision    Changes     Path
    1.11        +4  -4      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/shiela.pl
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	2001/05/22 19:26:12	1.10
  +++ ossp-pkg/shiela/shiela.pl	2001/08/30 07:41:03	1.11
  @@ -1488,8 +1488,8 @@
           #   extend the CVS summary of each file
           my @newinfo = ();
           foreach my $info (@cvsinfo) {
  -            $info =~ m|^([^,]+),([^,]+),([^,]+)$|
  -                || die "invalid loginfo argument `$info'";
  +            $info =~ m|^([^,]+),([^,]+),([^,]+)|
  +                || die "invalid loginfo argument `$info' while extending stock CVS information";
               my ($Is, $IV, $Iv) = ($1, $2, $3);
   
               my $It = '';
  @@ -1509,7 +1509,7 @@
       my @newinfo = ();
       foreach my $info (@cvsinfo) {
           $info =~ m|^([^,]+),([^,]+),([^,]+),([^,]*),([^,]*)$|
  -            || die "invalid loginfo argument `$info'";
  +            || die "invalid loginfo argument `$info' while extending summary information";
           my ($Is, $IV, $Iv, $It, $Io) = ($1, $2, $3, $4, $5);
   
           #   fix branch/tag and accumulate information
  @@ -1749,7 +1749,7 @@
       my $handle_max = undef;
       foreach my $cvsinfo (@cvsinfo) {
           $cvsinfo =~ m|^([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+)$|
  -             || die "invalid loginfo argument `$cvsinfo'";
  +             || die "invalid loginfo argument `$cvsinfo' while accumulating information";
           my ($Is, $IV, $Iv, $It, $Io, $Ik, $ID, $Id) = ($1, $2, $3, $4, $5, $6, $7, $8, $9);
           my $e = {};
           $e->{oldrev} = $IV;

From ossp-cvs-owner@ossp.org  Thu Aug 30 09:44:02 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7U7i1Q45155; Thu, 30 Aug 2001 09:44:01 +0200 (CEST)
Date: Thu, 30 Aug 2001 09:44:01 +0200 (CEST)
Message-Id: <200108300744.f7U7i1Q45155@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela ChangeLog
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   30-Aug-2001 09:44:01
  Branch: HEAD                             Handle: 2001083008440100

  Modified files:
    ossp-pkg/shiela         ChangeLog

  Log:
    add entry for bugfix

  Summary:
    Revision    Changes     Path
    1.7         +3  -0      ossp-pkg/shiela/ChangeLog
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/ChangeLog
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	2001/05/22 19:26:12	1.6
  +++ ossp-pkg/shiela/ChangeLog	2001/08/30 07:44:01	1.7
  @@ -10,6 +10,9 @@
     ChangeLog
   
     Changes between 0.9.1 and 0.9.2 (10-Feb-2001 to 04-May-2001):
  +
  +   *) Fixed information gathering for stock CVS version.
  +      [Ralf S. Engelschall]
     
      *) Fixed +d/-d output on removed files.
         [Ralf S. Engelschall]

From ossp-cvs-owner@ossp.org  Thu Aug 30 10:35:45 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7U8ZjV51241; Thu, 30 Aug 2001 10:35:45 +0200 (CEST)
Date: Thu, 30 Aug 2001 10:35:45 +0200 (CEST)
Message-Id: <200108300835.f7U8ZjV51241@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO lmtp2nntp.c lmtp2nntp.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   30-Aug-2001 10:35:44
  Branch: HEAD                             Handle: 2001083009354400

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO lmtp2nntp.c lmtp2nntp.pod

  Log:
    updated documentation

  Summary:
    Revision    Changes     Path
    1.22        +0  -1      ossp-pkg/lmtp2nntp/00TODO
    1.35        +8  -8      ossp-pkg/lmtp2nntp/lmtp2nntp.c
    1.10        +133 -133   ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	2001/08/29 14:58:21	1.21
  +++ ossp-pkg/lmtp2nntp/00TODO	2001/08/30 08:35:44	1.22
  @@ -1,5 +1,4 @@
   
  -use "RFC1918-like" private Domainnames for @example.com (check which name is registered)
   whatsup draufleiten
   RFC1891 ENVID
   RFC1891 6.2
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.34 -r1.35 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/08/29 14:58:21	1.34
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/08/30 08:35:44	1.35
  @@ -130,8 +130,8 @@
        */
       fprintf(stderr, 
               "USAGE: %s "
  -            "[-d deliverymode] [-g groupmode] [-h host[:port]] "
  -            "[-m maxmessagesize] [-t tracefile] [-v] [-V] newsgroup [newsgroup ...]"
  +            "[-V] [-d deliverymode] [-g groupmode] [-h host[:port]] "
  +            "[-m maxmessagesize] [-t tracefile] [-v] newsgroup [newsgroup ...]"
               "\n",
               command);
       return;
  @@ -205,8 +205,12 @@
        */
   
       /* read in the arguments */
  -    while ((i = getopt(argc, argv, "d:g:h:m:t:vV")) != -1) {
  +    while ((i = getopt(argc, argv, "Vd:g:h:m:t:v")) != -1) {
           switch (i) {
  +            case 'V': /*POD [B<-V>] (version)*/
  +                fprintf(stdout, "%s\n", lmtp2nntp_version.v_gnu);
  +                exit(0);
  +                break;
               case 'd': /*POD [B<-d> I<deliverymode>] */
                   if      (strcasecmp(optarg, "post") == 0)
                       ctx->option_deliverymode = DELIVERYMODE_POST;
  @@ -259,7 +263,7 @@
                       exit(ERR_EXECUTION);
                   }
                   break;
  -            case 'h': /*POD [B<-h> I<host>[I<:port>]] */
  +            case 'h': /*POD [B<-h> I<host>[I<:port>][,I<host>[I<:port>], ...]] */
                   if (argz_create_sep(optarg, ',', &azHosts, &asHosts) != 0)
                       exit(ERR_EXECUTION);
                   cp = NULL;
  @@ -319,10 +323,6 @@
                   break;
               case 'v': /*POD [B<-v>] (verbose)*/
                   ctx->option_verbose = TRUE;
  -                break;
  -            case 'V': /*POD [B<-V>] (version)*/
  -                fprintf(stdout, "%s\n", lmtp2nntp_version.v_gnu);
  -                exit(0);
                   break;
               case '?':
               default:
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 lmtp2nntp.pod
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/08/29 14:58:21	1.9
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/08/30 08:35:44	1.10
  @@ -8,13 +8,14 @@
   =head1 SYNOPSIS
   
   B<lmtp2nntp>
  +[B<-V>]
   [B<-d> I<deliverymode>]
   [B<-g> I<groupmode>]
  -[B<-h> I<host>[I<:port>]]
  +[B<-h> I<host>[I<:port>][,I<host>[I<:port>], ...]]
   [B<-m> I<maxmessagesize>]
   [B<-t> I<tracefile>]
   [B<-v>]
  -[B<-V>]
  +I<newsgroup> [I<newsgroup> ...]
   B<FIXME NOT YET IMPLEMENTED>
   [B<-o> I<origin>]
   [B<-j> I<hostname>]
  @@ -22,7 +23,6 @@
   [B<-T> I<timeout>]
   [B<-l> I<logtarget>]
   
  -
   =head1 DESCRIPTION
   
   The B<lmtp2nntp> program is a LMTP service which is usually invoked by a MTA.
  @@ -36,57 +36,11 @@
   The following options are available:
   
   =over 4
  -
  -=item B<-o> I<origin>
  -
  -Outgoing network IP address or hostname to bind to.
  -
  -=item B<-j> I<hostname>
  -
  -Own FQDN used in LMTP and NNTP protocols.
  -
  -=item B<-i> I<messageid>
  -
  -Message id of MTA (for logging purposes only).
   
  -=item B<-t> I<timeout>
  +=item B<-V>
   
  -LMTP and NNTP protocol timeouts (in seconds).
  - 
  -=item [B<-m> I<maxmessagesize>]
  -
  -Maximum message size in bytes. Default is 8388608 (8M). Values below 64 are
  -considered unacceptable small.
  -
  -=item B<-p> I<protocol>
  -
  -Incoming protocol. Default is C<stdin> which means B<lmtp2nntp>
  -reads the incoming mail from F<stdin> in RFC822 message format and reports errors to F<stderr>.
  -Alternatively if I<protocol> is C<LMTP>, B<lmtp2nntp> speaks Local Mail
  -Transport Protocol (LMTP) according to RFC 2033 on F<stdin>/F<stdout>.
  -
  -=item B<-l> C<stderr>
  +Print version information.
   
  -=item B<-l> C<syslog>[C<:>I<facility>]
  -
  -=item B<-l> C<file:>I<localfile>
  -
  -Logging target. This option can be specified more than once. Default is no
  -logging. Default I<facility> for C<syslog:> is C<lmtp2nntp>.
  -
  -=item B<-h> I<host>[:<port>]
  -
  -Hostname or address and optional TCP port of a NNTP service. Unless a port is
  -specified, getserbyname(nntp) is queried with fallback to 119/tcp. If C<-h>
  -option is ommited, the environment variable C<NNTPSERVER> is read, if this is
  -undefined or empty C<news> is used and if this doesn't resolve, C<localhost>
  -is assumed.
  -
  -This option can be specified more than once. It is assumed that multiple
  -servers are used to increase the reliability of the news system and to speed
  -up distribution by posting the same article to more than one server. In regard
  -to this program they must provide the same groups and talk to each other. 
  -
   =item B<-d> I<deliverymode>
   
   Possible values for I<deliverymode> are C<post>, C<feed> or a string used to
  @@ -105,13 +59,33 @@
   Possible values for I<groupmode> are C<arg> (default), C<envelope> and
   C<header>. In C<arg> mode, the C<newsgroup>s specified as command line
   arguments are ultimate destinations for the received messages.  Addresses from
  -envelope are ignored.  In C<envelope> mode the newsgroup(s) are taken from the
  -LMTP envelope, in C<header> mode the newsgroup(s) are taken from the header.
  -In all modes C<Newsgroups:> header is rewritten. In C<envelope> and C<header>
  -mode groups must still be specified as command line arguments. However, in
  -these modes the command line arguments are filters representing allowed
  -groups. Filters can be specified as wildmat's.
  +envelope and headers are ignored.  In C<envelope> mode the newsgroup(s) are
  +taken from the LMTP envelope, in C<header> mode the newsgroup(s) are taken
  +from the header.  In all modes C<Newsgroups:> header is rewritten. In
  +C<envelope> and C<header> mode groups must still be specified as command line
  +arguments. However, in these modes the command line arguments are filters
  +representing allowed groups. Filters can be specified as wildmat's.
   
  +=item [B<-h> I<host>[I<:port>][,I<host>[I<:port>], ...]]
  +
  +Hostname or address and optional TCP port of a NNTP service. Unless a port is
  +specified, getserbyname(nntp) is queried with fallback to 119/tcp. If C<-h>
  +option is ommited, the environment variable C<NNTPSERVER> is read, if this is
  +undefined or empty C<news> is used and if this doesn't resolve, C<localhost>
  +is assumed.
  +
  +This option can be specified more than once and it is possible to specify more
  +than one host/ port per option as a comma-separated list. It is assumed that
  +multiple servers are used to increase the reliability of the news system and
  +to speed up distribution by posting the same article to more than one server.
  +In regard to this program they must provide the same groups and talk to each
  +other. 
  +
  +=item [B<-m> I<maxmessagesize>]
  +
  +Maximum message size in bytes. Default is 8388608 (8M). Values below 64 are
  +considered unacceptable small.
  +
   =item B<-t> I<tracefile>
   
   Enable LMTP and NNTP protocol tracing into tracefile. When using C<syslog:>
  @@ -121,12 +95,47 @@
   
   Enable verbose processing messages in logfile.  When using C<syslog:> these
   messages are logged with C<info> level.
  +
  +=item I<newsgroup> [I<newsgroup> ...]
   
  -=item I<newsgroup> 
  +Newsgroup to post the message to or filter, depending on groupmode.  Multiple
  +groups can be specified.  Crosspostings succeed if delivery to I<any> group
  +succeeds.
   
  -Newsgroup to post the message to. Multiple groups can be specified.
  -Crosspostings only succeed if delivery to I<all> groups succeed.
  +B<FIXME NOT YET IMPLEMENTED>
   
  +=item B<-o> I<origin>
  +
  +Outgoing network IP address or hostname to bind to.
  +
  +=item B<-j> I<hostname>
  +
  +Own FQDN used in LMTP and NNTP protocols.
  +
  +=item B<-i> I<messageid>
  +
  +Message id of MTA (for logging purposes only).
  +
  +=item B<-t> I<timeout>
  +
  +LMTP and NNTP protocol timeouts (in seconds).
  + 
  +=item B<-p> I<protocol>
  +
  +Incoming protocol. Default is C<stdin> which means B<lmtp2nntp>
  +reads the incoming mail from F<stdin> in RFC822 message format and reports errors to F<stderr>.
  +Alternatively if I<protocol> is C<LMTP>, B<lmtp2nntp> speaks Local Mail
  +Transport Protocol (LMTP) according to RFC 2033 on F<stdin>/F<stdout>.
  +
  +=item B<-l> C<stderr>
  +
  +=item B<-l> C<syslog>[C<:>I<facility>]
  +
  +=item B<-l> C<file:>I<localfile>
  +
  +Logging target. This option can be specified more than once. Default is no
  +logging. Default I<facility> for C<syslog:> is C<lmtp2nntp>.
  +
   =back
   
   =head1 SENDMAIL INTEGRATION
  @@ -134,12 +143,12 @@
   t.virtusertable
   
       # mail to news gateway
  -    posting+*@mail.de.cw.net %2@lmtp2nntp
  +    posting+*@first.gateway.example %2@lmtp2nntp
   
   t.mailertable
   
       # mail to news gateway
  -    lmtp2nntp       lmtp2nntp:visp.engelschall.com
  +    lmtp2nntp       lmtp2nntp:second.gateway.example
   
   sendmail.m4
   
  @@ -149,94 +158,85 @@
       define(`LMTP2NNTP_MAILER_DELIVERYMODE', `post')
       define(`LMTP2NNTP_MAILER_GROUPMODE',    `envelope')
       define(`LMTP2NNTP_MAILER_ARGS',         `-t confMYVARDIR/lmtp2nntp.log')
  -    define(`LMTP2NNTP_MAILER_GROUPS',       `cw.\* en.\*')
  +    define(`LMTP2NNTP_MAILER_GROUPS',       `alt.test.\* alt.binaries.test')
       MAILER(lmtp2nntp)
   
  -=head1 EXAMPLE
  +=head1 DIAGNOSTICS
   
  - $ cat rfc822.message | lmtp2nntp -l /tmp/log -v -h mynews foo.bar
  +when invoked as LMTP server
   
  -reads rfc822.message and posts it into group "foo.bar" using NNTP service on
  -host "mynews". Activity is logged to /tmp/log. If posting is
  -successful, the exit status is 0.
  + 0 = successful execution
  + 1 = execution failed
   
  - $ cat rfc822.message | lmtp2nntp -h news1 -h news2 -h news3 foo.bar
  +Returning proper delivery status notification is part of the LMTP protocol.
   
  -reads rfc822.message and posts it into group "foo.bar" using NNTP service on
  -all hosts "news1", "news2" and "news3". Activtiy is not logged.
  -If at least one posting is successful, the exit status is 0.
  +=head1 STANDARDS
   
  - $ cat rfc822.message | lmtp2nntp -l stderr foo.bar quux.bar test.bar
  +=over 4
   
  -reads rfc822.message and posts it into groups "foo.bar", "quux.bar" and
  -"test.bar" using NNTP service on host C<${NNTPSERVER:-news}>. Activity
  -is logged to stderr. Only if all three crosspostings succeed, the exit
  -status is 0.
  +=item RFC0821 Simple Mail Transfer Protocol.
   
  -=head1 DIAGNOSTICS
  +J. Postel. Aug-01-1982. (Format: TXT=124482 bytes) (Obsoletes RFC0788 )
  +(Obsoleted by RFC2821) (Also STD0010) (Status: STANDARD )
   
  -when invoked from command line
  +=item RFC0822 Standard for the format of ARPA Internet text messages.
   
  - 0 = successful execution and delivery
  - 1 = execution failed
  - 2 = cannot deliver to any nntpserver
  +D. Crocker. Aug-13-1982. (Format: TXT=109200 bytes) (Obsoletes RFC0733)
  +(Obsoleted by RFC2822) (Updated by RFC1123, RFC1138, RFC1148, RFC1327,
  +RFC2156) (Also STD0011) (Status: STANDARD)
   
  -when invoked as LMTP server
  +=item RFC0977 Network News Transfer Protocol.
   
  - 0 = successful execution
  - 1 = execution failed
  +B. Kantor, P. Lapsley. Feb-01-1986. (Format: TXT=55062 bytes) (Status:
  +PROPOSED STANDARD)
   
  -delivery status is part of the LMTP protocol
  +=item RFC1035 Domain names - implementation and specification.
   
  -=head1 STANDARDS
  +P.V. Mockapetris. Nov-01-1987. (Format: TXT=125626 bytes) (Obsoletes
  +RFC0973, RFC0882, RFC0883) (Updated by RFC1101, RFC1183, RFC1348,
  +RFC1876, RFC1982, RFC1995, RFC1996, RFC2065, RFC2136, RFC2181, RFC2137,
  +RFC2308, RFC2535, RFC2845) (Also STD0013) (Status: STANDARD)
  +
  +=item RFC1652 SMTP Service Extension for 8bit-MIMEtransport.
   
  -0821 Simple Mail Transfer Protocol. J. Postel. Aug-01-1982. (Format:
  -     TXT=124482 bytes) (Obsoletes RFC0788) (Obsoleted by RFC2821) (Also
  -     STD0010) (Status: STANDARD)
  -
  -0822 Standard for the format of ARPA Internet text messages. D.
  -     Crocker. Aug-13-1982. (Format: TXT=109200 bytes) (Obsoletes RFC0733)
  -     (Obsoleted by RFC2822) (Updated by RFC1123, RFC1138, RFC1148,
  -     RFC1327, RFC2156) (Also STD0011) (Status: STANDARD)
  -
  -0977 Network News Transfer Protocol. B. Kantor, P. Lapsley.
  -     Feb-01-1986. (Format: TXT=55062 bytes) (Status: PROPOSED STANDARD)
  -
  -1035 Domain names - implementation and specification. P.V.
  -     Mockapetris. Nov-01-1987. (Format: TXT=125626 bytes) (Obsoletes
  -     RFC0973, RFC0882, RFC0883) (Updated by RFC1101, RFC1183, RFC1348,
  -     RFC1876, RFC1982, RFC1995, RFC1996, RFC2065, RFC2136, RFC2181,
  -     RFC2137, RFC2308, RFC2535, RFC2845) (Also STD0013) (Status: STANDARD)
  -
  -1652 SMTP Service Extension for 8bit-MIMEtransport. J. Klensin, N.
  -     Freed, M. Rose, E. Stefferud, D. Crocker. July 1994. (Format:
  -     TXT=11842 bytes) (Obsoletes RFC1426) (Status: DRAFT STANDARD)
  -
  -1854 SMTP Service Extension for Command Pipelining. N. Freed. October
  -     1995. (Format: TXT=14097 bytes) (Obsoleted by RFC2197) (Status:
  -     PROPOSED STANDARD)
  -
  -1893 Enhanced Mail System Status Codes. G. Vaudreuil. January 1996.
  -     (Format: TXT=28218 bytes) (Status: PROPOSED STANDARD)
  -
  -1894 An Extensible Message Format for Delivery Status Notifications.
  -     K. Moore, G. Vaudreuil. January 1996. (Format: TXT=77462 bytes)
  -     (Updated by RFC2852) (Status: PROPOSED STANDARD)
  -
  -2034 SMTP Service Extension for Returning Enhanced Error Codes. N.
  -     Freed. October 1996. (Format: TXT=10460 bytes) (Status: PROPOSED
  -     STANDARD)
  -
  -2606 Reserved Top Level DNS Names. D. Eastlake, A. Panitz. June 1999.
  -     (Format: TXT=8008 bytes) (Also BCP0032) (Status: BEST CURRENT
  -     PRACTICE)
  -
  -2821 Simple Mail Transfer Protocol. J. Klensin, Editor. April 2001.
  -     (Format: TXT=192504 bytes) (Obsoletes RFC0821, RFC0974, RFC1869)
  -     (Status: PROPOSED STANDARD)
  +J. Klensin, N. Freed, M. Rose, E. Stefferud, D. Crocker. July 1994.
  +(Format: TXT=11842 bytes) (Obsoletes RFC1426) (Status: DRAFT STANDARD)
   
  -2980 Common NNTP Extensions. S. Barber. October 2000. (Format:
  -     TXT=57165 bytes) (Status: INFORMATIONAL)
  +=item RFC1854 SMTP Service Extension for Command Pipelining.
  +
  +N. Freed. October 1995. (Format: TXT=14097 bytes) (Obsoleted by RFC2197)
  +(Status: PROPOSED STANDARD)
  +
  +=item RFC1893 Enhanced Mail System Status Codes.
  +
  +G. Vaudreuil. January 1996. (Format: TXT=28218 bytes) (Status: PROPOSED
  +STANDARD)
  +
  +=item RFC1894 An Extensible Message Format for Delivery Status Notifications.
  +
  +K. Moore, G. Vaudreuil. January 1996. (Format: TXT=77462 bytes) (Updated
  +by RFC2852) (Status: PROPOSED STANDARD)
  +
  +=item RFC2034 SMTP Service Extension for Returning Enhanced Error Codes.
  +
  +N. Freed. October 1996. (Format: TXT=10460 bytes) (Status: PROPOSED
  +STANDARD)
  +
  +=item RFC2606 Reserved Top Level DNS Names.
  +
  +D. Eastlake, A. Panitz. June 1999. (Format: TXT=8008 bytes) (Also
  +BCP0032) (Status: BEST CURRENT PRACTICE)
  +
  +=item RFC2821 Simple Mail Transfer Protocol.
  +
  +J. Klensin, Editor. April 2001.  (Format: TXT=192504 bytes) (Obsoletes RFC0821, RFC0974, RFC1869) (Status: PROPOSED STANDARD)
  +
  +=item RFC2980 Common NNTP Extensions.
  +
  +S. Barber. October 2000. (Format: TXT=57165 bytes) (Status:
  +INFORMATIONAL)
  +
  +=back
   
   =head1 AUTHOR
   

From ossp-cvs-owner@ossp.org  Thu Aug 30 10:55:43 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7U8tgv53436; Thu, 30 Aug 2001 10:55:42 +0200 (CEST)
Date: Thu, 30 Aug 2001 10:55:42 +0200 (CEST)
Message-Id: <200108300855.f7U8tgv53436@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xds_test_xdr.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   30-Aug-2001 10:55:42
  Branch: HEAD                             Handle: 2001083009554100

  Modified files:
    ossp-pkg/srpc/libxds    xds_test_xdr.c

  Log:
    Added test suite for double types.

  Summary:
    Revision    Changes     Path
    1.7         +101 -0     ossp-pkg/srpc/libxds/xds_test_xdr.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xds_test_xdr.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 xds_test_xdr.c
  --- ossp-pkg/srpc/libxds/xds_test_xdr.c	2001/08/22 20:22:41	1.6
  +++ ossp-pkg/srpc/libxds/xds_test_xdr.c	2001/08/30 08:55:41	1.7
  @@ -834,3 +834,104 @@
   }
   
   #endif /* XDS_TEST_XDR_FLOAT */
  +
  +#ifdef XDS_TEST_XDR_DOUBLE
  +
  +int main(int argc, char *argv[])
  +{
  +    XDR xdrs;
  +    char xdr_buf[1024];
  +    size_t xdr_buf_size;
  +
  +    xds_t *xds;
  +    char *xds_buf;
  +    size_t xds_buf_size;
  +
  +    double values[] =
  +	{
  +        0,
  +	3.14,
  +	-3.14,
  +	0.14,
  +	-0.14,
  +	123456.789,
  +	-123456.789
  +	};
  +
  +    size_t i;
  +
  +    /* Encode the values array using the RPC-XDR implementation. */
  +    xdrmem_create(&xdrs, xdr_buf, sizeof (xdr_buf), XDR_ENCODE);
  +    for (i = 0; i < sizeof (values) / sizeof (double); ++i)
  +        xdr_double(&xdrs, &values[i]);
  +    xdr_buf_size = xdr_getpos(&xdrs);
  +    xdr_destroy(&xdrs);
  +
  +    /* Encode the values array using the XDS implementation. */
  +    xds = xds_init(XDS_ENCODE);
  +    if (xds == NULL) {
  +        printf("Failed to initialize XDS context.\n");
  +        return 1;
  +    }
  +    if (xds_register(xds, "double", &xdr_encode_double, NULL) != XDS_OK) {
  +        printf("Failed to register my encoding engines.\n");
  +        return 1;
  +    }
  +    for (i = 0; i < sizeof (values) / sizeof (double); ++i) {
  +        if (xds_encode(xds, "double", values[i]) != XDS_OK) {
  +            printf("xds_encode(values[%d]) failed!\n", i);
  +            return 1;
  +        }
  +    }
  +    if (xds_getbuffer(xds, XDS_GIFT, (void **)&xds_buf, &xds_buf_size) !=
  +        XDS_OK) {
  +        printf("getbuffer() failed.\n");
  +        return 1;
  +    }
  +    xds_destroy(xds);
  +
  +    /* Both buffers must be equal now. */
  +    if (xdr_buf_size != xds_buf_size) {
  +        printf("The buffer sizes don't match: %d != %d.\n", xdr_buf_size,
  +               xds_buf_size);
  +        return 1;
  +    }
  +    if (memcmp(xds_buf, xdr_buf, xds_buf_size) != 0) {
  +        printf("The buffers' contents is not identical!\n");
  +        return 1;
  +    }
  +
  +    /* Now we decode the values again using the XDS implementation and
  +       compare them to our original values. Obviously, they should not
  +       differ. */
  +    xds = xds_init(XDS_DECODE);
  +    if (xds == NULL) {
  +        printf("Failed to initialize XDS context.\n");
  +        return 1;
  +    }
  +    if (xds_register(xds, "double", &xdr_decode_double, NULL) != XDS_OK) {
  +        printf("Failed to register my decoding engines.\n");
  +        return 1;
  +    }
  +    if (xds_setbuffer(xds, XDS_GIFT, xds_buf, xds_buf_size) != XDS_OK) {
  +        printf("setbuffer() failed.\n");
  +        return 1;
  +    }
  +    for (i = 0; i < sizeof (values) / sizeof (double); ++i) {
  +        double tmp;
  +        if (xds_decode(xds, "double", &tmp) != XDS_OK) {
  +            printf("xds_decode() failed for the %d value!\n", i);
  +            return 1;
  +        }
  +        if (values[i] != tmp) {
  +            printf("The %dth value has not been decoded correctly!\n", i);
  +            return 1;
  +        }
  +    }
  +    xds_destroy(xds);
  +
  +    /* Everything went fine. */
  +    return 0;
  +}
  +
  +#endif /* XDS_TEST_XDR_DOUBLE */

From ossp-cvs-owner@ossp.org  Thu Aug 30 10:58:21 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7U8wJm53663; Thu, 30 Aug 2001 10:58:19 +0200 (CEST)
Date: Thu, 30 Aug 2001 10:58:19 +0200 (CEST)
Message-Id: <200108300858.f7U8wJm53663@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   30-Aug-2001 10:58:19
  Branch: HEAD                             Handle: 2001083009581900

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO

  Log:
    RFC1891 ENVID option to MAIL command might solve the ID logging problem

  Summary:
    Revision    Changes     Path
    1.23        +1  -3      ossp-pkg/lmtp2nntp/00TODO
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	2001/08/30 08:35:44	1.22
  +++ ossp-pkg/lmtp2nntp/00TODO	2001/08/30 08:58:19	1.23
  @@ -1,8 +1,6 @@
   
   whatsup draufleiten
  -RFC1891 ENVID
  -RFC1891 6.2
  -ID logging problem
  +ID logging problem, RFC1891 ENVID, 6.2
   lmtp_response segfaults when a physical line ('\n' terminated) of the logical line input exceeds LMTP_LINE_MAXLEN.
   manpage header reads "User Contributed Perl Documentation" - Perl!?
   

From ossp-cvs-owner@ossp.org  Thu Aug 30 11:02:01 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7U920154623; Thu, 30 Aug 2001 11:02:00 +0200 (CEST)
Date: Thu, 30 Aug 2001 11:02:00 +0200 (CEST)
Message-Id: <200108300902.f7U920154623@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c lmtp2nntp.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   30-Aug-2001 11:02:00
  Branch: HEAD                             Handle: 2001083010015900

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c lmtp2nntp.pod

  Log:
    implemented and documented [-n hostname] option

  Summary:
    Revision    Changes     Path
    1.36        +11 -4      ossp-pkg/lmtp2nntp/lmtp2nntp.c
    1.11        +8  -7      ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.35 -r1.36 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/08/30 08:35:44	1.35
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/08/30 09:01:59	1.36
  @@ -53,7 +53,7 @@
   #define ERR_DELIVERY -2
   
   #define STDSTRLEN 128
  -#define MAXNEWSSERVICES 3
  +#define MAXNEWSSERVICES 16
   
   extern void lmtp_debug_dumplmtp(lmtp_t *lmtp);
   
  @@ -130,8 +130,8 @@
        */
       fprintf(stderr, 
               "USAGE: %s "
  -            "[-V] [-d deliverymode] [-g groupmode] [-h host[:port]] "
  -            "[-m maxmessagesize] [-t tracefile] [-v] newsgroup [newsgroup ...]"
  +            "[-V] [-d deliverymode] [-g groupmode] [-h host[:port][,host[:port], ...]] "
  +            "[-m maxmessagesize] [-n hostname] [-t tracefile] [-v] newsgroup [newsgroup ...]"
               "\n",
               command);
       return;
  @@ -205,7 +205,7 @@
        */
   
       /* read in the arguments */
  -    while ((i = getopt(argc, argv, "Vd:g:h:m:t:v")) != -1) {
  +    while ((i = getopt(argc, argv, "Vd:g:h:m:n:t:v")) != -1) {
           switch (i) {
               case 'V': /*POD [B<-V>] (version)*/
                   fprintf(stdout, "%s\n", lmtp2nntp_version.v_gnu);
  @@ -315,6 +315,13 @@
                           fprintf(stderr, "%s:Error: maximum message size is unacceptable small.\n", progname);
                           exit(ERR_EXECUTION);
                       }
  +                break;
  +            case 'n': /*POD [B<-n> I<hostname>] */
  +                if (strlen(optarg) > sizeof(ctx->uname.nodename)-1) {
  +                        fprintf(stderr, "%s:Error: nodename \"%s\" to long to option -n.\n", progname, optarg);
  +                        exit(ERR_EXECUTION);
  +                }
  +                strcpy(ctx->uname.nodename, optarg);
                   break;
               case 't': /*POD [B<-t> I<tracefile>] */
                   ctx->option_tracing = TRUE;
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 lmtp2nntp.pod
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/08/30 08:35:44	1.10
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/08/30 09:01:59	1.11
  @@ -13,12 +13,12 @@
   [B<-g> I<groupmode>]
   [B<-h> I<host>[I<:port>][,I<host>[I<:port>], ...]]
   [B<-m> I<maxmessagesize>]
  +[B<-n> I<hostname>]
   [B<-t> I<tracefile>]
   [B<-v>]
   I<newsgroup> [I<newsgroup> ...]
   B<FIXME NOT YET IMPLEMENTED>
   [B<-o> I<origin>]
  -[B<-j> I<hostname>]
   [B<-i> I<messageid>]
   [B<-T> I<timeout>]
   [B<-l> I<logtarget>]
  @@ -66,7 +66,7 @@
   arguments. However, in these modes the command line arguments are filters
   representing allowed groups. Filters can be specified as wildmat's.
   
  -=item [B<-h> I<host>[I<:port>][,I<host>[I<:port>], ...]]
  +=item B<-h> I<host>[I<:port>][,I<host>[I<:port>], ...]
   
   Hostname or address and optional TCP port of a NNTP service. Unless a port is
   specified, getserbyname(nntp) is queried with fallback to 119/tcp. If C<-h>
  @@ -81,11 +81,16 @@
   In regard to this program they must provide the same groups and talk to each
   other. 
   
  -=item [B<-m> I<maxmessagesize>]
  +=item B<-m> I<maxmessagesize>
   
   Maximum message size in bytes. Default is 8388608 (8M). Values below 64 are
   considered unacceptable small.
   
  +=item B<-n> I<nodename>
  +
  +Own FQDN used in LMTP and NNTP protocols. This overrides the nodename returned
  +by uname(3).
  +
   =item B<-t> I<tracefile>
   
   Enable LMTP and NNTP protocol tracing into tracefile. When using C<syslog:>
  @@ -107,10 +112,6 @@
   =item B<-o> I<origin>
   
   Outgoing network IP address or hostname to bind to.
  -
  -=item B<-j> I<hostname>
  -
  -Own FQDN used in LMTP and NNTP protocols.
   
   =item B<-i> I<messageid>
   

From ossp-cvs-owner@ossp.org  Thu Aug 30 12:31:57 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7UAVta64888; Thu, 30 Aug 2001 12:31:55 +0200 (CEST)
Date: Thu, 30 Aug 2001 12:31:55 +0200 (CEST)
Message-Id: <200108301031.f7UAVta64888@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xds_test_xdr.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   30-Aug-2001 12:31:55
  Branch: HEAD                             Handle: 2001083011315500

  Modified files:
    ossp-pkg/srpc/libxds    xds_test_xdr.c

  Log:
    Use longer numbers for the double test.

  Summary:
    Revision    Changes     Path
    1.8         +2  -2      ossp-pkg/srpc/libxds/xds_test_xdr.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xds_test_xdr.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 xds_test_xdr.c
  --- ossp-pkg/srpc/libxds/xds_test_xdr.c	2001/08/30 08:55:41	1.7
  +++ ossp-pkg/srpc/libxds/xds_test_xdr.c	2001/08/30 10:31:55	1.8
  @@ -850,8 +850,8 @@
       double values[] =
   	{
           0,
  -	3.14,
  -	-3.14,
  +	3.141592653,
  +	-3.14159265,
   	0.14,
   	-0.14,
   	123456.789,

From ossp-cvs-owner@ossp.org  Thu Aug 30 12:42:11 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7UAgAW65915; Thu, 30 Aug 2001 12:42:10 +0200 (CEST)
Date: Thu, 30 Aug 2001 12:42:10 +0200 (CEST)
Message-Id: <200108301042.f7UAgAW65915@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xds_engine_xdr.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   30-Aug-2001 12:42:10
  Branch: HEAD                             Handle: 2001083011420900

  Modified files:
    ossp-pkg/srpc/libxds    xds_engine_xdr.c

  Log:
    Implemented encoding and decoding of doubles.

  Summary:
    Revision    Changes     Path
    1.9         +176 -33    ossp-pkg/srpc/libxds/xds_engine_xdr.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xds_engine_xdr.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 xds_engine_xdr.c
  --- ossp-pkg/srpc/libxds/xds_engine_xdr.c	2001/08/23 08:42:50	1.8
  +++ ossp-pkg/srpc/libxds/xds_engine_xdr.c	2001/08/30 10:42:09	1.9
  @@ -299,15 +299,14 @@
   
   typedef struct
       {
  -    unsigned int sign     :1;
  -    unsigned int fraction :23;
  -    int          exponent :8;
  +    xds_uint8_t  sign     :1;
  +    xds_uint32_t fraction :23;
  +    xds_int8_t   exponent :8;
       }
   myfloat_t;
   
   static int float2myfloat(myfloat_t* new_num, float num)
       {
  -    const static unsigned int base = 2;
       size_t i;
       float  tmp;
   
  @@ -323,10 +322,10 @@
   
       /* Determine the sign of the number. */
   
  -    if (num < 0)
  +    if (num < 0.0)
   	{
   	new_num->sign = 1;
  -	num = 0 - num;
  +	num = 0.0 - num;
   	}
       else
   	new_num->sign = 0;
  @@ -334,22 +333,22 @@
       /* Canonify the number before we convert it. */
   
       new_num->exponent = 0;
  -    while (num < 1)
  +    while (num < 1.0)
   	{
  -	num *= base;
  +	num *= 2.0;
   	--new_num->exponent;
   	}
   
       /* Find the exponent. */
   
  -    for (i = 0, tmp = 1; i <= 128; ++i, tmp *= base)
  +    for (i = 0, tmp = 1.0; i <= 128; ++i, tmp *= 2.0)
   	{
  -	if (tmp*base > num)
  +	if (tmp * 2.0 > num)
   	    break;
   	}
       if (i <= 128)
   	{
  -	num = num / tmp - 1;
  +	num = num / tmp - 1.0;
   	new_num->exponent += i;
   	}
       else
  @@ -359,17 +358,14 @@
   
       for (new_num->fraction = 0, i = 0; i < 23; ++i)
   	{
  -	new_num->fraction *= base;
  -	if (num >= 1.0 / base)
  +	new_num->fraction *= 2.0;
  +	if (num >= 1.0 / 2.0)
   	    {
  -	    new_num->fraction |= 1;
  -	    num = num * base - 1;
  +	    new_num->fraction += 1.0;
  +	    num = num * 2.0 - 1.0;
   	    }
   	else
  -	    {
  -	    new_num->fraction |= 0;
  -	    num *= base;
  -	    }
  +	    num *= 2.0;
   	}
   
       return 0;
  @@ -419,12 +415,12 @@
       value = va_arg(*args, float*);
       *value = 0.0;
   
  +    sign = (((xds_uint8_t*)buffer)[0] & 0x80) >> 7;
  +    exponent  = (((xds_uint8_t*)buffer)[0] & 0x7f) << 1;
  +    exponent += (((xds_uint8_t*)buffer)[1] & 0x80) >> 7;
       fraction  = (((xds_uint8_t*)buffer)[1] & 0x7fffff) << 16;
       fraction += ((xds_uint8_t*)buffer)[2] << 8;
       fraction += ((xds_uint8_t*)buffer)[3];
  -    exponent  = (((xds_uint8_t*)buffer)[0] & 0x7f) << 1;
  -    exponent += (((xds_uint8_t*)buffer)[1] & 0x80) >> 7;
  -    sign = (((xds_uint8_t*)buffer)[0] & 0x80) >> 7;
   
       if (fraction == 0 && exponent == 0)
   	return XDS_OK;
  @@ -432,11 +428,11 @@
       for (i = 23; i > 0; --i)
   	{
   	if ((fraction & 0x01) == 1)
  -	    *value += 1;
  +	    *value += 1.0;
   	*value /= 2.0;
  -	fraction /= 2;
  +	fraction /= 2.0;
   	}
  -    *value += 1;
  +    *value += 1.0;
   
       if (exponent > 127)
   	{
  @@ -460,20 +456,167 @@
    * Encode/decode double-precision floating point values.
    */
   
  +typedef struct
  +    {
  +    xds_uint8_t  sign     :1;
  +    xds_uint64_t fraction :52;
  +    xds_int16_t  exponent :11;
  +    }
  +mydouble_t;
  +
  +static int double2mydouble(mydouble_t* new_num, double num)
  +    {
  +    size_t i;
  +    double  tmp;
  +
  +    /* Handle zero as a special case. */
  +
  +    if (num == 0.0)
  +	{
  +	new_num->sign     = 0;
  +	new_num->fraction = 0;
  +	new_num->exponent = -1023;
  +	return 0;
  +	}
  +
  +    /* Determine the sign of the number. */
  +
  +    if (num < 0.0)
  +	{
  +	new_num->sign = 1;
  +	num = 0.0 - num;
  +	}
  +    else
  +	new_num->sign = 0;
  +
  +    /* Canonify the number before we convert it. */
  +
  +    new_num->exponent = 0;
  +    while (num < 1.0)
  +	{
  +	num *= 2.0;
  +	--new_num->exponent;
  +	}
  +
  +    /* Find the exponent. */
  +
  +    for (i = 0, tmp = 1.0; i <= 1024; ++i, tmp *= 2.0)
  +	{
  +	if (tmp * 2.0 > num)
  +	    break;
  +	}
  +    if (i <= 1024)
  +	{
  +	num = num / tmp - 1.0;
  +	new_num->exponent += i;
  +	}
  +    else
  +	return 1;
  +
  +    /* Calculate the fraction part. */
  +
  +    for (new_num->fraction = 0, i = 0; i < 52; ++i)
  +	{
  +	new_num->fraction *= 2.0;
  +	if (num >= 1.0 / 2.0)
  +	    {
  +	    new_num->fraction += 1.0;
  +	    num = num * 2.0 - 1.0;
  +	    }
  +	else
  +	    num *= 2.0;
  +	}
  +
  +    return 0;
  +    }
  +
  +
   int xdr_encode_double(xds_t *xds, void *engine_context,
  -                      void *buffer, size_t buffer_size,
  -                      size_t *used_buffer_size, va_list *args)
  +		     void *buffer, size_t buffer_size,
  +		     size_t *used_buffer_size, va_list *args)
   {
  -    /* XXX */
  -    return -1;
  +    mydouble_t   value;
  +    xds_uint16_t tmp;
  +
  +    xds_init_encoding_engine(8);
  +
  +    /* Get value and format it into the structure. */
  +    double2mydouble(&value, va_arg(*args, double));
  +
  +    memset(buffer, 0, 8);
  +
  +    if (value.sign == 1)
  +	((xds_uint8_t*)buffer)[0] |= 0x80;
  +
  +    tmp = value.exponent + 1023;
  +    ((xds_uint8_t*)buffer)[0] |= (tmp >> 4) & 0x7f;
  +    ((xds_uint8_t*)buffer)[1] |= (tmp & 0x0f) << 4;
  +
  +    ((xds_uint8_t*)buffer)[1] |= (xds_uint8_t)((value.fraction & 0x0f000000000000) >> 48);
  +    ((xds_uint8_t*)buffer)[2] |= (xds_uint8_t)((value.fraction & 0x00ff0000000000) >> 40);
  +    ((xds_uint8_t*)buffer)[3] |= (xds_uint8_t)((value.fraction & 0x0000ff00000000) >> 32);
  +    ((xds_uint8_t*)buffer)[4] |= (xds_uint8_t)((value.fraction & 0x000000ff000000) >> 24);
  +    ((xds_uint8_t*)buffer)[5] |= (xds_uint8_t)((value.fraction & 0x00000000ff0000) >> 16);
  +    ((xds_uint8_t*)buffer)[6] |= (xds_uint8_t)((value.fraction & 0x0000000000ff00) >>  8);
  +    ((xds_uint8_t*)buffer)[7] |= (xds_uint8_t)((value.fraction & 0x000000000000ff) >>  0);
  +
  +    return XDS_OK;
   }
   
   int xdr_decode_double(xds_t *xds, void *engine_context,
  -                      void *buffer, size_t buffer_size,
  -                      size_t *used_buffer_size, va_list *args)
  +		     void *buffer, size_t buffer_size,
  +		     size_t *used_buffer_size, va_list *args)
   {
  -    /* XXX */
  -    return -1;
  +    double*      value;
  +    xds_uint64_t fraction;
  +    xds_uint16_t exponent;
  +    size_t       i;
  +    char         sign;
  +
  +    xds_init_decoding_engine(8);
  +
  +    value = va_arg(*args, double*);
  +    *value = 0.0;
  +
  +    sign = (((xds_uint8_t*)buffer)[0] & 0x80) >> 7;
  +    exponent  = (((xds_uint8_t*)buffer)[0] & 0x7f) << 4;
  +    exponent += (((xds_uint8_t*)buffer)[1] & 0xf0) >> 4;
  +
  +    fraction  = (xds_uint64_t)((((xds_uint8_t*)buffer)[1] & 0x0f)) << 48;
  +    fraction += (xds_uint64_t)(((xds_uint8_t*)buffer)[2]) << 40;
  +    fraction += (xds_uint64_t)(((xds_uint8_t*)buffer)[3]) << 32;
  +    fraction += (xds_uint64_t)(((xds_uint8_t*)buffer)[4]) << 24;
  +    fraction += (xds_uint64_t)(((xds_uint8_t*)buffer)[5]) << 16;
  +    fraction += (xds_uint64_t)(((xds_uint8_t*)buffer)[6]) <<  8;
  +    fraction += (xds_uint64_t)(((xds_uint8_t*)buffer)[7]) <<  0;
  +
  +    if (fraction == 0 && exponent == 0)
  +	return XDS_OK;
  +
  +    for (i = 52; i > 0; --i)
  +	{
  +	if ((fraction & 0x01) == 1)
  +	    *value += 1.0;
  +	*value /= 2.0;
  +	fraction /= 2.0;
  +	}
  +    *value += 1.0;
  +
  +    if (exponent > 1023)
  +	{
  +	for (exponent -= 1023; exponent > 0; --exponent)
  +	    *value *= 2.0;
  +	}
  +    else
  +	{
  +	for (exponent = 1023 - exponent; exponent > 0; --exponent)
  +	    *value /= 2.0;
  +	}
  +
  +    if (sign == 1)
  +	*value = 0.0 - *value;
  +
  +    return XDS_OK;
   }
   
   /*

From ossp-cvs-owner@ossp.org  Thu Aug 30 12:42:26 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7UAgPD65970; Thu, 30 Aug 2001 12:42:25 +0200 (CEST)
Date: Thu, 30 Aug 2001 12:42:25 +0200 (CEST)
Message-Id: <200108301042.f7UAgPD65970@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xds_test_lib.c xds_test_xml.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   30-Aug-2001 12:42:25
  Branch: HEAD                             Handle: 2001083011422400

  Modified files:
    ossp-pkg/srpc/libxds    xds_test_lib.c xds_test_xml.c

  Log:
    Removed unnecessary debug output.

  Summary:
    Revision    Changes     Path
    1.7         +0  -1      ossp-pkg/srpc/libxds/xds_test_lib.c
    1.5         +0  -8      ossp-pkg/srpc/libxds/xds_test_xml.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xds_test_lib.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 xds_test_lib.c
  --- ossp-pkg/srpc/libxds/xds_test_lib.c	2001/08/23 08:41:34	1.6
  +++ ossp-pkg/srpc/libxds/xds_test_lib.c	2001/08/30 10:42:24	1.7
  @@ -693,7 +693,6 @@
           return 1;
       }
       xds_destroy(xds);
  -    printf("The encoded representation is %u bytes long.\n", buffer_size);
   
       /* Now create a decoding context and decode the whole thing again. */
       xds = xds_init(XDS_DECODE);
  Index: ossp-pkg/srpc/libxds/xds_test_xml.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xds_test_xml.c
  --- ossp-pkg/srpc/libxds/xds_test_xml.c	2001/08/12 11:31:45	1.4
  +++ ossp-pkg/srpc/libxds/xds_test_xml.c	2001/08/30 10:42:24	1.5
  @@ -469,8 +469,6 @@
           return 1;
       }
       xds_destroy(xds);
  -    write(1, buffer, buffer_size);
  -    printf("\n");
   
       xds = xds_init(XDS_DECODE);
       if (xds == NULL) {
  @@ -542,8 +540,6 @@
           return 1;
       }
       xds_destroy(xds);
  -    write(1, buffer, buffer_size);
  -    printf("\n");
   
       xds = xds_init(XDS_DECODE);
       if (xds == NULL) {
  @@ -616,8 +612,6 @@
           return 1;
       }
       xds_destroy(xds);
  -    write(1, buffer, buffer_size);
  -    printf("\n");
   
       xds = xds_init(XDS_DECODE);
       if (xds == NULL) {
  @@ -690,8 +684,6 @@
           return 1;
       }
       xds_destroy(xds);
  -    write(1, buffer, buffer_size);
  -    printf("\n");
   
       xds = xds_init(XDS_DECODE);
       if (xds == NULL) {

From ossp-cvs-owner@ossp.org  Thu Aug 30 12:55:31 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7UAtTF67417; Thu, 30 Aug 2001 12:55:29 +0200 (CEST)
Date: Thu, 30 Aug 2001 12:55:29 +0200 (CEST)
Message-Id: <200108301055.f7UAtTF67417@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds Makefile.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   30-Aug-2001 12:55:29
  Branch: HEAD                             Handle: 2001083011552900

  Modified files:
    ossp-pkg/srpc/libxds    Makefile.in

  Log:
    - Removed _GNU_SOURCE define, which is only needed when compiling on
      Linux with the -ansi flag set.
    
    - Added @xdr_lib@ to LIBS define so that the test suites are linked
      with it when necessary on that platform.

  Summary:
    Revision    Changes     Path
    1.35        +2  -2      ossp-pkg/srpc/libxds/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/Makefile.in
  ============================================================
  $ cvs diff -u -r1.34 -r1.35 Makefile.in
  --- ossp-pkg/srpc/libxds/Makefile.in	2001/08/23 08:42:49	1.34
  +++ ossp-pkg/srpc/libxds/Makefile.in	2001/08/30 10:55:29	1.35
  @@ -43,10 +43,10 @@
   CC          = @CC@
   LIBTOOL     = ./libtool
   SHTOOL      = ./shtool
  -CPPFLAGS    = @CPPFLAGS@ @DEFS@ -D_GNU_SOURCE
  +CPPFLAGS    = @CPPFLAGS@ @DEFS@
   CFLAGS      = @CFLAGS@
   LDFLAGS     = @LDFLAGS@
  -LIBS        = @LIBS@
  +LIBS        = @xdr_lib@ @LIBS@
   POD2MAN     = @POD2MAN@
   RM          = rm -f
   RMDIR       = rmdir

From ossp-cvs-owner@ossp.org  Thu Aug 30 13:15:56 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7UBFtT70039; Thu, 30 Aug 2001 13:15:55 +0200 (CEST)
Date: Thu, 30 Aug 2001 13:15:55 +0200 (CEST)
Message-Id: <200108301115.f7UBFtT70039@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xds_engine_xdr.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   30-Aug-2001 13:15:55
  Branch: HEAD                             Handle: 2001083012155400

  Modified files:
    ossp-pkg/srpc/libxds    xds_engine_xdr.c

  Log:
    Removed the bitfield specifications from myfloat_t and mydouble_t
    because some compilers cannot handle bitfield elements that are bigger
    than an integer and we need this for the 52-bit fraction part in
    mydouble_t. By omitting the qualifiers, we waste a few byte on the
    stack, but that's way better than trying to deal with this problem by
    splitting fractions into two integers.

  Summary:
    Revision    Changes     Path
    1.10        +6  -6      ossp-pkg/srpc/libxds/xds_engine_xdr.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xds_engine_xdr.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 xds_engine_xdr.c
  --- ossp-pkg/srpc/libxds/xds_engine_xdr.c	2001/08/30 10:42:09	1.9
  +++ ossp-pkg/srpc/libxds/xds_engine_xdr.c	2001/08/30 11:15:54	1.10
  @@ -299,9 +299,9 @@
   
   typedef struct
       {
  -    xds_uint8_t  sign     :1;
  -    xds_uint32_t fraction :23;
  -    xds_int8_t   exponent :8;
  +    xds_uint8_t  sign;		/* :1 */
  +    xds_uint32_t fraction;	/* :23 */
  +    xds_int8_t   exponent;	/* :8 */
       }
   myfloat_t;
   
  @@ -458,9 +458,9 @@
   
   typedef struct
       {
  -    xds_uint8_t  sign     :1;
  -    xds_uint64_t fraction :52;
  -    xds_int16_t  exponent :11;
  +    xds_uint8_t  sign;		/* :1 */
  +    xds_uint64_t fraction;	/* :52 */
  +    xds_int16_t  exponent;	/* :11 */
       }
   mydouble_t;
   

From ossp-cvs-owner@ossp.org  Thu Aug 30 13:19:12 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7UBJBN70295; Thu, 30 Aug 2001 13:19:11 +0200 (CEST)
Date: Thu, 30 Aug 2001 13:19:11 +0200 (CEST)
Message-Id: <200108301119.f7UBJBN70295@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   30-Aug-2001 13:19:11
  Branch: HEAD                             Handle: 2001083012191000

  Modified files:
    ossp-pkg/srpc           TODO

  Log:
    "double" support is now fully implemented for XDR.

  Summary:
    Revision    Changes     Path
    1.25        +5  -8      ossp-pkg/srpc/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/TODO
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 TODO
  --- ossp-pkg/srpc/TODO	2001/08/22 20:25:06	1.24
  +++ ossp-pkg/srpc/TODO	2001/08/30 11:19:10	1.25
  @@ -16,16 +16,17 @@
   
   o M4 (peti) [4 weeks until 30-Jul-2001]
    - implementation of libxds library framework
  -   done: 100% [-> libxds/*.c]
  +   done: 100% [-> libxds/xds.c]
   
    - implementation XDR engines for basic data types.
  -   done: 99% [-> everything is implemented except "double" support]
  +   done: 100% [-> libxds/xds_engine_xdr.c]
   
    - implementation XML engines for basic data types.
  -   done: 99% [-> everything is implemented except "double" support]
  +   done: 99% [-> libxds/xds_engine_xml.c]
  +         "double" support is still missing.
   
    - regression tests for libxds (make check)
  -   done: 100% [-> regression-tests/*.c]
  +   done: 100% [-> xds_test_*.c]
   
    - UFT-8 RFC: rfc2279.txt
      done: 100%
  @@ -33,10 +34,6 @@
    - conversion of LaTeX documentation into POD source format
      for Unix manual page xds(3).
      done: 100%
  -
  - - IEEE values ranges for floating point numbers will be used for
  -   accurarcy in XML presentation.
  -   done: 0%
   
    - autoconf should find the types for int32 etc. even if they're not
      defined in sys/types.h. And it should fallback to own types in

From ossp-cvs-owner@ossp.org  Thu Aug 30 13:21:55 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7UBLsA70797; Thu, 30 Aug 2001 13:21:54 +0200 (CEST)
Date: Thu, 30 Aug 2001 13:21:54 +0200 (CEST)
Message-Id: <200108301121.f7UBLsA70797@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xds.h.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   30-Aug-2001 13:21:54
  Branch: HEAD                             Handle: 2001083012215400

  Modified files:
    ossp-pkg/srpc/libxds    xds.h.in

  Log:
    Added typedef for xds_float_t, just for consistency.

  Summary:
    Revision    Changes     Path
    1.17        +1  -0      ossp-pkg/srpc/libxds/xds.h.in
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xds.h.in
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 xds.h.in
  --- ossp-pkg/srpc/libxds/xds.h.in	2001/08/23 08:42:50	1.16
  +++ ossp-pkg/srpc/libxds/xds.h.in	2001/08/30 11:21:54	1.17
  @@ -50,6 +50,7 @@
   typedef @xds_uint64_t@ xds_uint64_t;
   typedef @xds_int64_t@  xds_int64_t;
   #endif
  +typedef float          xds_float_t;
   typedef double         xds_double_t;
   
   enum {

From ossp-cvs-owner@ossp.org  Thu Aug 30 13:29:41 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7UBTe271383; Thu, 30 Aug 2001 13:29:40 +0200 (CEST)
Date: Thu, 30 Aug 2001 13:29:40 +0200 (CEST)
Message-Id: <200108301129.f7UBTe271383@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/docs libxds.tex ossp-pkg/srpc/libxds ...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   30-Aug-2001 13:29:39
  Branch: HEAD                             Handle: 2001083012293801

  Modified files:
    ossp-pkg/srpc/libxds    xds.pod
    ossp-pkg/srpc/libxds/docs libxds.tex

  Log:
    Updated the documentation to include the xdr_*_float() routines and to
    include the sizes for both native and encoded float and double values.

  Summary:
    Revision    Changes     Path
    1.17        +9  -5      ossp-pkg/srpc/libxds/docs/libxds.tex
    1.11        +8  -4      ossp-pkg/srpc/libxds/xds.pod
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/docs/libxds.tex
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 libxds.tex
  --- ossp-pkg/srpc/libxds/docs/libxds.tex	2001/08/13 15:20:44	1.16
  +++ ossp-pkg/srpc/libxds/docs/libxds.tex	2001/08/30 11:29:39	1.17
  @@ -1,6 +1,6 @@
   % -*- mode: LaTeX; fill-column: 75; -*-
   %
  -% $Id: libxds.tex,v 1.16 2001/08/13 15:20:44 simons Exp $
  +% $Id: libxds.tex,v 1.17 2001/08/30 11:29:39 simons Exp $
   %
   \documentclass[a4paper,10pt,pointlessnumbers,bibtotoc]{scrartcl}
   \usepackage[dvips,xdvi]{graphicx}
  @@ -953,8 +953,10 @@
   xdr\_decode\_uint64()      & xds\_uint64\_t*  & 4 bytes  & 4 bytes  \\[1ex]
   xdr\_encode\_int64()       & xds\_int64\_t    & 4 bytes  & 4 bytes  \\
   xdr\_decode\_int64()       & xds\_int64\_t*   & 4 bytes  & 4 bytes  \\[1ex]
  -xdr\_encode\_double()      & xds\_double\_t   & ?? bytes & ?? bytes \\
  -xdr\_decode\_double()      & xds\_double\_t*  & ?? bytes & ?? bytes \\[1ex]
  +xdr\_encode\_float()       & xds\_float\_t    & 4 bytes  & 4 bytes  \\
  +xdr\_decode\_float()       & xds\_float\_t*   & 4 bytes  & 4 bytes  \\[1ex]
  +xdr\_encode\_double()      & xds\_double\_t   & 8 bytes  & 8 bytes  \\
  +xdr\_decode\_double()      & xds\_double\_t*  & 8 bytes  & 8 bytes  \\[1ex]
   xdr\_encode\_octetstream() & void*, size\_t   & variable & variable \\
   xdr\_decode\_octetstream() & void**, size\_t* & variable & variable \\[1ex]
   xdr\_encode\_string()      & char*            & variable & variable \\
  @@ -984,8 +986,10 @@
   xml\_decode\_uint64()      & xds\_uint64\_t*  & 18--37 bytes & 8 bytes      \\[1ex]
   xml\_encode\_int64()       & xds\_int64\_t    & 8 bytes      & 16--36 bytes \\
   xml\_decode\_int64()       & xds\_int64\_t*   & 16--36 bytes & 8 bytes      \\[1ex]
  -xml\_encode\_double()      & xds\_double\_t   & ?? bytes     & ?? bytes     \\
  -xml\_decode\_double()      & xds\_double\_t*  & ?? bytes     & ?? bytes     \\[1ex]
  +xml\_encode\_float()       & xds\_float\_t    & 4 bytes      & ?? bytes     \\
  +xml\_decode\_float()       & xds\_float\_t*   & ?? bytes     & 4 bytes      \\[1ex]
  +xml\_encode\_double()      & xds\_double\_t   & 8 bytes      & ?? bytes     \\
  +xml\_decode\_double()      & xds\_double\_t*  & ?? bytes     & 8 bytes      \\[1ex]
   xml\_encode\_octetstream() & void*, size\_t   & variable     & variable     \\
   xml\_decode\_octetstream() & void**, size\_t* & variable     & variable     \\[1ex]
   xml\_encode\_string()      & char*            & variable     & variable     \\
  Index: ossp-pkg/srpc/libxds/xds.pod
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 xds.pod
  --- ossp-pkg/srpc/libxds/xds.pod	2001/08/13 18:31:53	1.10
  +++ ossp-pkg/srpc/libxds/xds.pod	2001/08/30 11:29:38	1.11
  @@ -343,8 +343,10 @@
     xdr_decode_uint64()        xds_uint64_t*     4 bytes    4 bytes
     xdr_encode_int64()         xds_int64_t       4 bytes    4 bytes
     xdr_decode_int64()         xds_int64_t*      4 bytes    4 bytes
  -  xdr_encode_double()        xds_double_t      ? bytes    ? bytes
  -  xdr_decode_double()        xds_double_t*     ? bytes    ? bytes
  +  xdr_encode_float()         xds_float_t       4 bytes    4 bytes
  +  xdr_decode_float()         xds_float_t*      4 bytes    4 bytes
  +  xdr_encode_double()        xds_double_t      8 bytes    8 bytes
  +  xdr_decode_double()        xds_double_t*     8 bytes    8 bytes
     xdr_encode_octetstream()   void*, size_t     variable   variable
     xdr_decode_octetstream()   void**, size_t*   variable   variable
     xdr_encode_string()        char*             variable   variable
  @@ -371,8 +373,10 @@
     xml_decode_uint64()        xds_uint64_t*     18-37 bytes   8 bytes
     xml_encode_int64()         xds_int64_t       8 bytes       16-36 bytes
     xml_decode_int64()         xds_int64_t*      16-36 bytes   8 bytes
  -  xml_encode_double()        xds_double_t      ? bytes       ? bytes
  -  xml_decode_double()        xds_double_t*     ? bytes       ? bytes
  +  xml_encode_float()         xds_float_t       4 bytes       ? bytes
  +  xml_decode_float()         xds_float_t*      ? bytes       4 bytes
  +  xml_encode_double()        xds_double_t      8 bytes       ? bytes
  +  xml_decode_double()        xds_double_t*     ? bytes       8 bytes
     xml_encode_octetstream()   void*, size_t     variable      variable
     xml_decode_octetstream()   void**, size_t*   variable      variable
     xml_encode_string()        char*             variable      variable

From ossp-cvs-owner@ossp.org  Thu Aug 30 13:53:27 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7UBrPX74362; Thu, 30 Aug 2001 13:53:25 +0200 (CEST)
Date: Thu, 30 Aug 2001 13:53:25 +0200 (CEST)
Message-Id: <200108301153.f7UBrPX74362@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c lmtp2nntp.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   30-Aug-2001 13:53:25
  Branch: HEAD                             Handle: 2001083012532500

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c lmtp2nntp.pod

  Log:
    implemented and documented [-w waittime] option including nonblocking connect

  Summary:
    Revision    Changes     Path
    1.37        +92 -6      ossp-pkg/lmtp2nntp/lmtp2nntp.c
    1.12        +9  -1      ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.36 -r1.37 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/08/30 09:01:59	1.36
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/08/30 11:53:25	1.37
  @@ -16,6 +16,7 @@
   #include <string.h>
   #include <fcntl.h>
   #include <sys/utsname.h>
  +#include <sys/time.h>
   
   /* third party */
   #include "str.h"
  @@ -73,6 +74,7 @@
       char   *lhlo_domain;
   };
   
  +static int connect_nonb(int, const struct sockaddr *, socklen_t, int);
   static void initsession(struct session *session);
   static void resetsession(struct session *session);
   int groupmatch(char *, size_t, char *);
  @@ -94,6 +96,7 @@
       char           *option_deliverymodefakestatus;
       char           *option_deliverymodefakedsn;
       int             option_maxmessagesize;
  +    int             option_waittime;
       int             nsc;
       struct ns       ns[MAXNEWSSERVICES];
       char           *azGroupargs;
  @@ -125,13 +128,21 @@
   static void usage(char *command)
   {
       /*  use
  -     *  perl <lmtp2nntp.c -e 'while (<>) { if(m/\/\*POD (.*) .*\*\//) { $_=$1; s/.<(.*?)>/$1/g ; print "$_ " };}'
  +     *  perl <lmtp2nntp.c -e 'while (<>) { if(m/\/\*POD (.*) .*\*\//) { $_=$1; s/.<(.*?)>/$1/g ; print "\"$_\"\n" };}'
        *  to pull the USAGE string out of this source
        */
       fprintf(stderr, 
               "USAGE: %s "
  -            "[-V] [-d deliverymode] [-g groupmode] [-h host[:port][,host[:port], ...]] "
  -            "[-m maxmessagesize] [-n hostname] [-t tracefile] [-v] newsgroup [newsgroup ...]"
  +            "[-V]"
  +            "[-d deliverymode]"
  +            "[-g groupmode]"
  +            "[-h host[:port][,host[:port], ...]]"
  +            "[-m maxmessagesize]"
  +            "[-n hostname]"
  +            "[-t tracefile]"
  +            "[-v]"
  +            "[-w waittime]"
  +            "newsgroup [newsgroup ...]"
               "\n",
               command);
       return;
  @@ -164,6 +175,7 @@
       ctx->option_deliverymodefakestatus = "553";   /* Requested action not taken: mailbox name not allowed */
       ctx->option_deliverymodefakedsn    = "5.7.1"; /* Delivery not authorized, message refused */
       ctx->option_maxmessagesize = 8 * 1024 * 1024;
  +    ctx->option_waittime = -1;
       ctx->nsc = 0;
       for (i=0; i < MAXNEWSSERVICES; i++) {
           ctx->ns[i].h = NULL;
  @@ -205,7 +217,7 @@
        */
   
       /* read in the arguments */
  -    while ((i = getopt(argc, argv, "Vd:g:h:m:n:t:v")) != -1) {
  +    while ((i = getopt(argc, argv, "Vd:g:h:m:n:t:vw:")) != -1) {
           switch (i) {
               case 'V': /*POD [B<-V>] (version)*/
                   fprintf(stdout, "%s\n", lmtp2nntp_version.v_gnu);
  @@ -331,6 +343,14 @@
               case 'v': /*POD [B<-v>] (verbose)*/
                   ctx->option_verbose = TRUE;
                   break;
  +            case 'w': /*POD [B<-w> I<waittime>] */
  +                    ctx->option_waittime = atoi(optarg);
  +                    if(ctx->option_waittime < 1) {
  +                        fprintf(stderr, "%s:Error: waittime %d to option -w must be greater 1 second.\n", 
  +                                progname, ctx->option_waittime);
  +                        exit(ERR_EXECUTION);
  +                    }
  +                break;
               case '?':
               default:
                   usage(progname);
  @@ -389,6 +409,61 @@
       return rc;
   }
   
  +/* taken from "UNIX Network Programming", Volume 1, second edition W. Richard
  + * Stevens, connect_nonb.c from section 15.4 "Nonblocking connect", page 411,
  + * http://www.kohala.com/start/
  + */
  +int connect_nonb(int sockfd, const struct sockaddr *saptr, socklen_t salen, int nsec)
  +{
  +	int				flags, n, error;
  +	socklen_t		len;
  +	fd_set			rset, wset;
  +	struct timeval	tval;
  +
  +	flags = fcntl(sockfd, F_GETFL, 0);
  +	fcntl(sockfd, F_SETFL, flags | O_NONBLOCK);
  +
  +	error = 0;
  +	if ( (n = connect(sockfd, (struct sockaddr *) saptr, salen)) < 0)
  +		if (errno != EINPROGRESS)
  +			return(-1);
  +
  +	/* Do whatever we want while the connect is taking place. */
  +
  +	if (n == 0)
  +		goto done;	/* connect completed immediately */
  +
  +	FD_ZERO(&rset);
  +	FD_SET(sockfd, &rset);
  +	wset = rset;
  +	tval.tv_sec = nsec;
  +	tval.tv_usec = 0;
  +
  +	if ( (n = select(sockfd+1, &rset, &wset, NULL,
  +					 nsec ? &tval : NULL)) == 0) {
  +		close(sockfd);		/* timeout */
  +		errno = ETIMEDOUT;
  +		return(-1);
  +	}
  +
  +	if (FD_ISSET(sockfd, &rset) || FD_ISSET(sockfd, &wset)) {
  +		len = sizeof(error);
  +		if (getsockopt(sockfd, SOL_SOCKET, SO_ERROR, &error, &len) < 0)
  +			return(-1);			/* Solaris pending error */
  +	} else
  +		return(-1); /* err_quit("select error: sockfd not set"); */
  +
  +done:
  +	fcntl(sockfd, F_SETFL, flags);	/* restore file status flags */
  +
  +	if (error) {
  +		close(sockfd);		/* just in case */
  +		errno = error;
  +		return(-1);
  +	}
  +	return(0);
  +}
  +
   static void resetsession(struct session *session)
   {
       if (session->lhlo_domain != NULL)
  @@ -478,12 +553,23 @@
       i = 0;
       do {
           bOk = TRUE;
  -        if (connect(ctx->ns[i].s, ctx->ns[i].sa->sa_buf, ctx->ns[i].sa->sa_len) < 0) {
  -            bOk = FALSE;
  +        if (ctx->option_waittime > 0) {
  +            if (connect_nonb(ctx->ns[i].s, ctx->ns[i].sa->sa_buf, ctx->ns[i].sa->sa_len, 
  +                         ctx->option_waittime) < 0) {
  +                bOk = FALSE;
  +            }
           }
  +        else {
  +            if (connect(ctx->ns[i].s, ctx->ns[i].sa->sa_buf, ctx->ns[i].sa->sa_len) < 0) {
  +                bOk = FALSE;
  +            }
  +        }
           if (bOk && ((ctx->ns[i].nntp = nntp_create(ctx->ns[i].s, ctx->ns[i].s, 
                                                      ctx->option_tracing ? &nntp_io : NULL)) == NULL)) {
               bOk = FALSE;
  +        }
  +        if (bOk && ctx->option_waittime >= 0) {
  +            nntp_timeout(ctx->ns[i].nntp, ctx->option_waittime);
           }
           if (bOk && ((rc = nntp_init(ctx->ns[i].nntp)) != NNTP_OK)) {
               bOk = FALSE;
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 lmtp2nntp.pod
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/08/30 09:01:59	1.11
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/08/30 11:53:25	1.12
  @@ -16,11 +16,12 @@
   [B<-n> I<hostname>]
   [B<-t> I<tracefile>]
   [B<-v>]
  +[B<-w> I<waittime>]
   I<newsgroup> [I<newsgroup> ...]
  +
   B<FIXME NOT YET IMPLEMENTED>
   [B<-o> I<origin>]
   [B<-i> I<messageid>]
  -[B<-T> I<timeout>]
   [B<-l> I<logtarget>]
   
   =head1 DESCRIPTION
  @@ -100,6 +101,13 @@
   
   Enable verbose processing messages in logfile.  When using C<syslog:> these
   messages are logged with C<info> level.
  +
  +=item B<-w> I<waittime>
  +
  +Specify the time the NNTP client waits for the initial connect to complete and
  +the time to wait for every server's response. Value is given in seconds and
  +must be greater than or equal to 1 second. The default is OS dependent for the
  +connect and a 3 second timeout waiting for a server's response.
   
   =item I<newsgroup> [I<newsgroup> ...]
   

From ossp-cvs-owner@ossp.org  Thu Aug 30 15:38:05 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7UDc4p86930; Thu, 30 Aug 2001 15:38:04 +0200 (CEST)
Date: Thu, 30 Aug 2001 15:38:04 +0200 (CEST)
Message-Id: <200108301338.f7UDc4p86930@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO lmtp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   30-Aug-2001 15:38:04
  Branch: HEAD                             Handle: 2001083014380400

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO lmtp.c

  Log:
    lmtp_response() no longer segfaults when a physical line ('\n' terminated) of
    the logical line input exceeds LMTP_LINE_MAXLEN but wraps the line by cutting
    it off; manpage header issue was no problem when using pod in Makefile; 00TODO
    updated;

  Summary:
    Revision    Changes     Path
    1.24        +1  -3      ossp-pkg/lmtp2nntp/00TODO
    1.19        +9  -1      ossp-pkg/lmtp2nntp/lmtp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	2001/08/30 08:58:19	1.23
  +++ ossp-pkg/lmtp2nntp/00TODO	2001/08/30 13:38:04	1.24
  @@ -1,8 +1,6 @@
   
   whatsup draufleiten
  -ID logging problem, RFC1891 ENVID, 6.2
  -lmtp_response segfaults when a physical line ('\n' terminated) of the logical line input exceeds LMTP_LINE_MAXLEN.
  -manpage header reads "User Contributed Perl Documentation" - Perl!?
  +ID logging, RFC1891 ENVID, 6.2
   
       **** LMTP REDESIGN ****
   
  Index: ossp-pkg/lmtp2nntp/lmtp.c
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 lmtp.c
  --- ossp-pkg/lmtp2nntp/lmtp.c	2001/08/29 14:58:21	1.18
  +++ ossp-pkg/lmtp2nntp/lmtp.c	2001/08/30 13:38:04	1.19
  @@ -346,15 +346,23 @@
               len = sprintf(formatbuf, "%3.3s%c%5.5s ", res->statuscode, dash ? '-' : ' ', res->dsncode);
           else
               len = sprintf(formatbuf, "%3.3s%c", res->statuscode, dash ? '-' : ' ');
  +        if ((len + cpE - cpS + 2) > sizeof(formatbuf)) { /* status + line + '\r\n' does not fit into formatbuf */
  +            dash = 1;
  +            if ((cpE = cpS + sizeof(formatbuf) - 2 - len) <= cpS) /* no space for line at all */
  +                return LMTP_ERR_ARG;
  +        }
           strncpy(formatbuf+len, cpS, cpE-cpS);
           len += (cpE-cpS);
  +        formatbuf[len++] = '\r';
           formatbuf[len++] = '\n';
           do {
               rv = lmtp->io.write(lmtp->wfd, formatbuf, len);
           } while (rv == -1 && errno == EINTR);
           if (rv == -1)
               return LMTP_ERR_SYSTEM;
  -        cpS = cpE+1;
  +        cpS = cpE;
  +        if (*cpS == '\n')
  +            cpS++;
       }
       return rc;
   }

From ossp-cvs-owner@ossp.org  Thu Aug 30 15:56:39 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7UDucw89069; Thu, 30 Aug 2001 15:56:38 +0200 (CEST)
Date: Thu, 30 Aug 2001 15:56:38 +0200 (CEST)
Message-Id: <200108301356.f7UDucw89069@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   30-Aug-2001 15:56:38
  Branch: HEAD                             Handle: 2001083014563800

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.pod

  Log:
    updated and reformatted manpage

  Summary:
    Revision    Changes     Path
    1.13        +45 -42     ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 lmtp2nntp.pod
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/08/30 11:53:25	1.12
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/08/30 13:56:38	1.13
  @@ -125,10 +125,6 @@
   
   Message id of MTA (for logging purposes only).
   
  -=item B<-t> I<timeout>
  -
  -LMTP and NNTP protocol timeouts (in seconds).
  - 
   =item B<-p> I<protocol>
   
   Incoming protocol. Default is C<stdin> which means B<lmtp2nntp>
  @@ -183,67 +179,74 @@
   
   =over 4
   
  -=item RFC0821 Simple Mail Transfer Protocol.
  +=item RFC0821
   
  -J. Postel. Aug-01-1982. (Format: TXT=124482 bytes) (Obsoletes RFC0788 )
  -(Obsoleted by RFC2821) (Also STD0010) (Status: STANDARD )
  +Simple Mail Transfer Protocol.  J. Postel. Aug-01-1982. (Format: TXT=124482
  +bytes) (Obsoletes RFC0788 ) (Obsoleted by RFC2821) (Also STD0010) (Status:
  +STANDARD )
   
  -=item RFC0822 Standard for the format of ARPA Internet text messages.
  +=item RFC0822
   
  -D. Crocker. Aug-13-1982. (Format: TXT=109200 bytes) (Obsoletes RFC0733)
  -(Obsoleted by RFC2822) (Updated by RFC1123, RFC1138, RFC1148, RFC1327,
  -RFC2156) (Also STD0011) (Status: STANDARD)
  +Standard for the format of ARPA Internet text messages.  D. Crocker.
  +Aug-13-1982. (Format: TXT=109200 bytes) (Obsoletes RFC0733) (Obsoleted by
  +RFC2822) (Updated by RFC1123, RFC1138, RFC1148, RFC1327, RFC2156) (Also
  +STD0011) (Status: STANDARD)
   
  -=item RFC0977 Network News Transfer Protocol.
  +=item RFC0977
   
  -B. Kantor, P. Lapsley. Feb-01-1986. (Format: TXT=55062 bytes) (Status:
  -PROPOSED STANDARD)
  +Network News Transfer Protocol.  B. Kantor, P. Lapsley. Feb-01-1986. (Format:
  +TXT=55062 bytes) (Status: PROPOSED STANDARD)
   
  -=item RFC1035 Domain names - implementation and specification.
  +=item RFC1035
   
  -P.V. Mockapetris. Nov-01-1987. (Format: TXT=125626 bytes) (Obsoletes
  -RFC0973, RFC0882, RFC0883) (Updated by RFC1101, RFC1183, RFC1348,
  -RFC1876, RFC1982, RFC1995, RFC1996, RFC2065, RFC2136, RFC2181, RFC2137,
  -RFC2308, RFC2535, RFC2845) (Also STD0013) (Status: STANDARD)
  +Domain names - implementation and specification.  P.V. Mockapetris.
  +Nov-01-1987. (Format: TXT=125626 bytes) (Obsoletes RFC0973, RFC0882, RFC0883)
  +(Updated by RFC1101, RFC1183, RFC1348, RFC1876, RFC1982, RFC1995, RFC1996,
  +RFC2065, RFC2136, RFC2181, RFC2137, RFC2308, RFC2535, RFC2845) (Also STD0013)
  +(Status: STANDARD)
   
  -=item RFC1652 SMTP Service Extension for 8bit-MIMEtransport.
  +=item RFC1652
   
  -J. Klensin, N. Freed, M. Rose, E. Stefferud, D. Crocker. July 1994.
  -(Format: TXT=11842 bytes) (Obsoletes RFC1426) (Status: DRAFT STANDARD)
  +SMTP Service Extension for 8bit-MIMEtransport.  J. Klensin, N. Freed, M. Rose,
  +E. Stefferud, D. Crocker. July 1994.  (Format: TXT=11842 bytes) (Obsoletes
  +RFC1426) (Status: DRAFT STANDARD)
   
  -=item RFC1854 SMTP Service Extension for Command Pipelining.
  +=item RFC1854
   
  -N. Freed. October 1995. (Format: TXT=14097 bytes) (Obsoleted by RFC2197)
  -(Status: PROPOSED STANDARD)
  +SMTP Service Extension for Command Pipelining.  N. Freed. October 1995.
  +(Format: TXT=14097 bytes) (Obsoleted by RFC2197) (Status: PROPOSED STANDARD)
   
  -=item RFC1893 Enhanced Mail System Status Codes.
  +=item RFC1893
   
  -G. Vaudreuil. January 1996. (Format: TXT=28218 bytes) (Status: PROPOSED
  -STANDARD)
  +Enhanced Mail System Status Codes.  G. Vaudreuil. January 1996. (Format:
  +TXT=28218 bytes) (Status: PROPOSED STANDARD)
   
  -=item RFC1894 An Extensible Message Format for Delivery Status Notifications.
  +=item RFC1894
   
  -K. Moore, G. Vaudreuil. January 1996. (Format: TXT=77462 bytes) (Updated
  -by RFC2852) (Status: PROPOSED STANDARD)
  +An Extensible Message Format for Delivery Status Notifications.  K. Moore, G.
  +Vaudreuil. January 1996. (Format: TXT=77462 bytes) (Updated by RFC2852)
  +(Status: PROPOSED STANDARD)
   
  -=item RFC2034 SMTP Service Extension for Returning Enhanced Error Codes.
  +=item RFC2034
   
  -N. Freed. October 1996. (Format: TXT=10460 bytes) (Status: PROPOSED
  -STANDARD)
  +SMTP Service Extension for Returning Enhanced Error Codes.  N. Freed. October
  +1996. (Format: TXT=10460 bytes) (Status: PROPOSED STANDARD)
   
  -=item RFC2606 Reserved Top Level DNS Names.
  +=item RFC2606
   
  -D. Eastlake, A. Panitz. June 1999. (Format: TXT=8008 bytes) (Also
  -BCP0032) (Status: BEST CURRENT PRACTICE)
  +Reserved Top Level DNS Names.  D. Eastlake, A. Panitz. June 1999. (Format:
  +TXT=8008 bytes) (Also BCP0032) (Status: BEST CURRENT PRACTICE)
   
  -=item RFC2821 Simple Mail Transfer Protocol.
  +=item RFC2821
   
  -J. Klensin, Editor. April 2001.  (Format: TXT=192504 bytes) (Obsoletes RFC0821, RFC0974, RFC1869) (Status: PROPOSED STANDARD)
  +Simple Mail Transfer Protocol.  J. Klensin, Editor. April 2001.  (Format:
  +TXT=192504 bytes) (Obsoletes RFC0821, RFC0974, RFC1869) (Status: PROPOSED
  +STANDARD)
   
  -=item RFC2980 Common NNTP Extensions.
  +=item RFC2980
   
  -S. Barber. October 2000. (Format: TXT=57165 bytes) (Status:
  -INFORMATIONAL)
  +Common NNTP Extensions.  S. Barber. October 2000. (Format: TXT=57165 bytes)
  +(Status: INFORMATIONAL)
   
   =back
   

From ossp-cvs-owner@ossp.org  Thu Aug 30 15:57:23 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7UDvMQ89162; Thu, 30 Aug 2001 15:57:22 +0200 (CEST)
Date: Thu, 30 Aug 2001 15:57:22 +0200 (CEST)
Message-Id: <200108301357.f7UDvMQ89162@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp.c msg.c sa.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   30-Aug-2001 15:57:22
  Branch: HEAD                             Handle: 2001083014572100

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp.c msg.c sa.c

  Log:
    get rid of warnings by properly casting char to int for isdigit()

  Summary:
    Revision    Changes     Path
    1.20        +6  -6      ossp-pkg/lmtp2nntp/lmtp.c
    1.15        +4  -3      ossp-pkg/lmtp2nntp/msg.c
    1.7         +1  -1      ossp-pkg/lmtp2nntp/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp.c
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 lmtp.c
  --- ossp-pkg/lmtp2nntp/lmtp.c	2001/08/30 13:38:04	1.19
  +++ ossp-pkg/lmtp2nntp/lmtp.c	2001/08/30 13:57:21	1.20
  @@ -320,18 +320,18 @@
       char formatbuf[LMTP_LINE_MAXLEN];
   
       if (   strlen(res->statuscode) != 3
  -        || !isdigit(res->statuscode[0])
  -        || !isdigit(res->statuscode[1])
  -        || !isdigit(res->statuscode[2]))
  +        || !isdigit((int)res->statuscode[0])
  +        || !isdigit((int)res->statuscode[1])
  +        || !isdigit((int)res->statuscode[2]))
           return LMTP_ERR_ARG;
   
       if (res->dsncode != NULL) {
           if (   (strlen(res->dsncode) != 5)
  -            || !isdigit(res->dsncode[0])
  +            || !isdigit((int)res->dsncode[0])
               || (res->dsncode[1] != '.')
  -            || !isdigit(res->dsncode[2])
  +            || !isdigit((int)res->dsncode[2])
               || (res->dsncode[3] != '.')
  -            || !isdigit(res->dsncode[4])
  +            || !isdigit((int)res->dsncode[4])
               || (res->dsncode[0] != res->statuscode[0]))
               return LMTP_ERR_ARG;
       }
  Index: ossp-pkg/lmtp2nntp/msg.c
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 msg.c
  --- ossp-pkg/lmtp2nntp/msg.c	2001/08/28 14:24:03	1.14
  +++ ossp-pkg/lmtp2nntp/msg.c	2001/08/30 13:57:21	1.15
  @@ -266,13 +266,14 @@
               for (o = 0; (cpRem[o] != ':') && (cpRem[o] != NUL); o++); /* offset name so at least one char of value remains in first line */
               o += 2; /* skip ": " */
               while ((strlen(cpRem) + (cpWrap == NULL ? 0 : strlen(WRAPUSING))) > WRAPAT) {
  -                for (i = WRAPAT - 1 - (cpWrap == NULL ? 0 : strlen(WRAPUSING)); (i >= o) && !isspace(cpRem[i]); i--);
  +                for (i = WRAPAT - 1 - (cpWrap == NULL ? 0 :
  +                    strlen(WRAPUSING)); (i >= o) && !isspace((int)cpRem[i]); i--);
                   if (i < o)
                       i = WRAPAT - 1 - (cpWrap == NULL ? 0 : strlen(WRAPUSING) - 1); /* sorry, forced cut at non-blank */
                   cpCut = cpRem;
                   cpRem += i;
  -                for (; (isspace(*cpRem) && (*cpRem != NUL)); cpRem++); /* skip next lines leading blanks */
  -                for (; (i >= o) && isspace(cpCut[i-1]); i--); /* chop off this lines trailing blanks */
  +                for (; (isspace((int)*cpRem) && (*cpRem != NUL)); cpRem++); /* skip next lines leading blanks */
  +                for (; (i >= o) && isspace((int)cpCut[i-1]); i--); /* chop off this lines trailing blanks */
                   if (i >= o) { /* only keep line fragment if some non-blanks inside */
                       if (cpWrap == NULL) {
                           if ((cpWrap = (char *)malloc(i+strlen(WRAPUSING)+1)) == NULL)
  Index: ossp-pkg/lmtp2nntp/sa.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 sa.c
  --- ossp-pkg/lmtp2nntp/sa.c	2001/08/28 11:31:22	1.6
  +++ ossp-pkg/lmtp2nntp/sa.c	2001/08/30 13:57:21	1.7
  @@ -138,7 +138,7 @@
           /* resolve port */
           bNumeric = 1;
           for (i = 0; cpPort[i] != NUL; i++) {
  -            if (!isdigit(cpPort[i])) {
  +            if (!isdigit((int)cpPort[i])) {
                   bNumeric = 0;
                   break;
               }

From ossp-cvs-owner@ossp.org  Thu Aug 30 15:58:57 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7UDwuL89304; Thu, 30 Aug 2001 15:58:56 +0200 (CEST)
Date: Thu, 30 Aug 2001 15:58:56 +0200 (CEST)
Message-Id: <200108301358.f7UDwuL89304@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp version.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   30-Aug-2001 15:58:56
  Branch: HEAD                             Handle: 2001083014585600

  Modified files:
    ossp-pkg/lmtp2nntp      version.c

  Log:
    bump version for release

  Summary:
    Revision    Changes     Path
    1.5         +9  -9      ossp-pkg/lmtp2nntp/version.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/version.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 version.c
  --- ossp-pkg/lmtp2nntp/version.c	2001/08/28 14:30:10	1.4
  +++ ossp-pkg/lmtp2nntp/version.c	2001/08/30 13:58:56	1.5
  @@ -8,7 +8,7 @@
   #ifndef _VERSION_C_
   #define _VERSION_C_
   
  -#define LMTP2NNTP_VERSION 0x009203
  +#define LMTP2NNTP_VERSION 0x009204
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _VERSION_C_AS_HEADER_
   
   lmtp2nntp_version_t lmtp2nntp_version = {
  -    0x009203,
  -    "0.9.3",
  -    "0.9.3 (28-Aug-2001)",
  -    "This is lmtp2nntp, Version 0.9.3 (28-Aug-2001)",
  -    "lmtp2nntp 0.9.3 (28-Aug-2001)",
  -    "lmtp2nntp/0.9.3",
  -    "@(#)lmtp2nntp 0.9.3 (28-Aug-2001)",
  -    "$Id: version.c,v 1.4 2001/08/28 14:30:10 thl Exp $"
  +    0x009204,
  +    "0.9.4",
  +    "0.9.4 (30-Aug-2001)",
  +    "This is lmtp2nntp, Version 0.9.4 (30-Aug-2001)",
  +    "lmtp2nntp 0.9.4 (30-Aug-2001)",
  +    "lmtp2nntp/0.9.4",
  +    "@(#)lmtp2nntp 0.9.4 (30-Aug-2001)",
  +    "$Id: version.c,v 1.5 2001/08/30 13:58:56 thl Exp $"
   };
   
   #endif /* _VERSION_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Thu Aug 30 16:47:43 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7UElgg01615; Thu, 30 Aug 2001 16:47:42 +0200 (CEST)
Date: Thu, 30 Aug 2001 16:47:42 +0200 (CEST)
Message-Id: <200108301447.f7UElgg01615@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xds.h.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   30-Aug-2001 16:47:42
  Branch: HEAD                             Handle: 2001083015474100

  Modified files:
    ossp-pkg/srpc/libxds    xds.h.in

  Log:
    Added prototypes for xml_encode_float() and xml_decode_float().

  Summary:
    Revision    Changes     Path
    1.18        +2  -0      ossp-pkg/srpc/libxds/xds.h.in
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xds.h.in
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 xds.h.in
  --- ossp-pkg/srpc/libxds/xds.h.in	2001/08/30 11:21:54	1.17
  +++ ossp-pkg/srpc/libxds/xds.h.in	2001/08/30 14:47:41	1.18
  @@ -153,6 +153,8 @@
   xds_declare_formatting_engine(xml_encode_int64);
   xds_declare_formatting_engine(xml_decode_int64);
   #endif
  +xds_declare_formatting_engine(xml_encode_float);
  +xds_declare_formatting_engine(xml_decode_float);
   xds_declare_formatting_engine(xml_encode_double);
   xds_declare_formatting_engine(xml_decode_double);
   xds_declare_formatting_engine(xml_encode_octetstream);

From ossp-cvs-owner@ossp.org  Thu Aug 30 16:48:47 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7UEmkH01721; Thu, 30 Aug 2001 16:48:46 +0200 (CEST)
Date: Thu, 30 Aug 2001 16:48:46 +0200 (CEST)
Message-Id: <200108301448.f7UEmkH01721@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xds_test_xml.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   30-Aug-2001 16:48:46
  Branch: HEAD                             Handle: 2001083015484500

  Modified files:
    ossp-pkg/srpc/libxds    xds_test_xml.c

  Log:
    - Activated the old test for XML-encoding of doubles.
    - Added a new test for XML-encoding of floats.

  Summary:
    Revision    Changes     Path
    1.6         +146 -19    ossp-pkg/srpc/libxds/xds_test_xml.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xds_test_xml.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 xds_test_xml.c
  --- ossp-pkg/srpc/libxds/xds_test_xml.c	2001/08/30 10:42:24	1.5
  +++ ossp-pkg/srpc/libxds/xds_test_xml.c	2001/08/30 14:48:45	1.6
  @@ -363,13 +363,17 @@
   
   int main(int argc, char *argv[])
   {
  -#if 0
       xds_t *xds;
       char *buffer;
       size_t buffer_size;
   
       xds_double_t values[] = {
  -        3.14159265358979323844
  +        0.0,
  +        -0.0,
  +        3.141592,
  +        -3.141592,
  +        298473.141592,
  +        -298473.141592
       };
   
       size_t i;
  @@ -381,31 +385,45 @@
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  -    if (xds_register(xds, "int", &xml_encode_double, NULL) != XDS_OK) {
  +    if (xds_register(xds, "begin", &xml_encode_begin, NULL) != XDS_OK ||
  +	xds_register(xds, "end", &xml_encode_end, NULL) != XDS_OK ||
  +	xds_register(xds, "double", &xml_encode_double, NULL) != XDS_OK) {
           printf("Failed to register my encoding engines.\n");
           return 1;
       }
  -    for (i = 0; i < sizeof (values) / sizeof (xds_double_t); ++i) {
  -        if (xds_encode(xds, "int", values[i]) != XDS_OK) {
  +    if (xds_encode(xds, "begin") != XDS_OK)
  +	{
  +	printf("xds_encode_begin() failed!\n");
  +	return 1;
  +	}
  +    for (i = 0; i < sizeof (values) / sizeof (xds_double_t); ++i)
  +	{
  +        if (xds_encode(xds, "double", values[i]) != XDS_OK)
  +	    {
               printf("xds_encode(values[%d]) failed!\n", i);
               return 1;
  -        }
  -    }
  -    if (xds_getbuffer(xds, XDS_GIFT, (void **)&buffer, &buffer_size) !=
  -        XDS_OK) {
  +	    }
  +	}
  +    if (xds_encode(xds, "end") != XDS_OK)
  +	{
  +	printf("xds_encode_end() failed!\n");
  +	return 1;
  +	}
  +    if (xds_getbuffer(xds, XDS_GIFT, (void **)&buffer, &buffer_size) != XDS_OK)
  +	{
           printf("getbuffer() failed.\n");
           return 1;
  -    }
  +	}
       xds_destroy(xds);
   
  -    printf("%s\n", buffer);
  -
       xds = xds_init(XDS_DECODE);
       if (xds == NULL) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  -    if (xds_register(xds, "int", &xml_decode_double, NULL) != XDS_OK) {
  +    if (xds_register(xds, "begin", &xml_decode_begin, NULL) != XDS_OK ||
  +	xds_register(xds, "end", &xml_decode_end, NULL) != XDS_OK ||
  +	xds_register(xds, "double", &xml_decode_double, NULL) != XDS_OK) {
           printf("Failed to register my decoding engines.\n");
           return 1;
       }
  @@ -413,28 +431,138 @@
           printf("setbuffer() failed.\n");
           return 1;
       }
  +    if (xds_decode(xds, "begin") != XDS_OK)
  +	{
  +	printf("xds_decode_begin() failed!\n");
  +	return 1;
  +	}
       for (i = 0; i < sizeof (values) / sizeof (xds_double_t); ++i) {
           xds_double_t val;
  -        if (xds_decode(xds, "int", &val) != XDS_OK) {
  +        if (xds_decode(xds, "double", &val) != XDS_OK) {
               printf("xds_decode(values[%d]) failed!\n", i);
               return 1;
           }
           if (val != values[i]) {
  -            printf
  -                ("Decoded value (%E) does not match the original value (%E)!\n",
  -                 val, values[i]);
  +	    printf("Decoding the %dth value failed!\n", i);
               return 1;
           }
       }
  +    if (xds_decode(xds, "end") != XDS_OK)
  +	{
  +	printf("xds_decode_end() failed!\n");
  +	return 1;
  +	}
       xds_destroy(xds);
   
       /* Everything went fine. */
  -#endif
  +
       return 0;
   }
   
   #endif /* XDS_TEST_XML_DOUBLE */
   
  +#ifdef XDS_TEST_XML_FLOAT
  +
  +int main(int argc, char *argv[])
  +{
  +    xds_t *xds;
  +    char *buffer;
  +    size_t buffer_size;
  +
  +    xds_float_t values[] = {
  +        0.0,
  +        -0.0,
  +        3.141592,
  +        -3.141592,
  +        298473.141592,
  +        -298473.141592
  +    };
  +
  +    size_t i;
  +
  +    /* Encode the values array, then decode it back and compare the numbers. */
  +
  +    xds = xds_init(XDS_ENCODE);
  +    if (xds == NULL) {
  +        printf("Failed to initialize XDS context.\n");
  +        return 1;
  +    }
  +    if (xds_register(xds, "begin", &xml_encode_begin, NULL) != XDS_OK ||
  +	xds_register(xds, "end", &xml_encode_end, NULL) != XDS_OK ||
  +	xds_register(xds, "float", &xml_encode_float, NULL) != XDS_OK) {
  +        printf("Failed to register my encoding engines.\n");
  +        return 1;
  +    }
  +    if (xds_encode(xds, "begin") != XDS_OK)
  +	{
  +	printf("xds_encode_begin() failed!\n");
  +	return 1;
  +	}
  +    for (i = 0; i < sizeof (values) / sizeof (xds_float_t); ++i)
  +	{
  +        if (xds_encode(xds, "float", values[i]) != XDS_OK)
  +	    {
  +            printf("xds_encode(values[%d]) failed!\n", i);
  +            return 1;
  +	    }
  +	}
  +    if (xds_encode(xds, "end") != XDS_OK)
  +	{
  +	printf("xds_encode_end() failed!\n");
  +	return 1;
  +	}
  +    if (xds_getbuffer(xds, XDS_GIFT, (void **)&buffer, &buffer_size) != XDS_OK)
  +	{
  +        printf("getbuffer() failed.\n");
  +        return 1;
  +	}
  +    xds_destroy(xds);
  +
  +    xds = xds_init(XDS_DECODE);
  +    if (xds == NULL) {
  +        printf("Failed to initialize XDS context.\n");
  +        return 1;
  +    }
  +    if (xds_register(xds, "begin", &xml_decode_begin, NULL) != XDS_OK ||
  +	xds_register(xds, "end", &xml_decode_end, NULL) != XDS_OK ||
  +	xds_register(xds, "float", &xml_decode_float, NULL) != XDS_OK) {
  +        printf("Failed to register my decoding engines.\n");
  +        return 1;
  +    }
  +    if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK) {
  +        printf("setbuffer() failed.\n");
  +        return 1;
  +    }
  +    if (xds_decode(xds, "begin") != XDS_OK)
  +	{
  +	printf("xds_decode_begin() failed!\n");
  +	return 1;
  +	}
  +    for (i = 0; i < sizeof (values) / sizeof (xds_float_t); ++i) {
  +        xds_float_t val;
  +        if (xds_decode(xds, "float", &val) != XDS_OK) {
  +            printf("xds_decode(values[%d]) failed!\n", i);
  +            return 1;
  +        }
  +        if (val != values[i]) {
  +	    printf("Decoding the %dth value failed!\n", i);
  +            return 1;
  +        }
  +    }
  +    if (xds_decode(xds, "end") != XDS_OK)
  +	{
  +	printf("xds_decode_end() failed!\n");
  +	return 1;
  +	}
  +    xds_destroy(xds);
  +
  +    /* Everything went fine. */
  +
  +    return 0;
  +}
  +
  +#endif /* XDS_TEST_XML_FLOAT */
  +
   #ifdef XDS_TEST_XML_STRING
   
   int main(int argc, char *argv[])
  @@ -720,4 +848,3 @@
   }
   
   #endif /* XDS_TEST_XML_OCTETSTREAM_EMPTY */
  -

From ossp-cvs-owner@ossp.org  Thu Aug 30 16:49:51 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7UEnom01833; Thu, 30 Aug 2001 16:49:50 +0200 (CEST)
Date: Thu, 30 Aug 2001 16:49:50 +0200 (CEST)
Message-Id: <200108301449.f7UEnom01833@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds xds_engine_xml.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   30-Aug-2001 16:49:50
  Branch: HEAD                             Handle: 2001083015494900

  Modified files:
    ossp-pkg/srpc/libxds    xds_engine_xml.c

  Log:
    Implemented xml_encode_double(), xml_decode_double(),
    xml_encode_float(), and xml_decode_float().

  Summary:
    Revision    Changes     Path
    1.8         +42 -4      ossp-pkg/srpc/libxds/xds_engine_xml.c
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/xds_engine_xml.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 xds_engine_xml.c
  --- ossp-pkg/srpc/libxds/xds_engine_xml.c	2001/08/13 19:48:02	1.7
  +++ ossp-pkg/srpc/libxds/xds_engine_xml.c	2001/08/30 14:49:49	1.8
  @@ -414,6 +414,35 @@
   #endif /* XDS_HAVE_64_BIT_SUPPORT */
   
   /*
  + * Encode/decode floating point values.
  + */
  +
  +int xml_encode_float(xds_t *xds, void *engine_context,
  +		     void *buffer, size_t buffer_size,
  +		     size_t *used_buffer_size, va_list *args)
  +    {
  +    xds_init_encoding_engine(7 + 8 + 1);
  +    *used_buffer_size =
  +	snprintf(buffer, buffer_size, "<float>%f</float>", va_arg(*args, double));
  +    if (*used_buffer_size >= buffer_size)
  +	return XDS_ERR_OVERFLOW;
  +    else
  +	return XDS_OK;
  +    }
  +
  +int xml_decode_float(xds_t *xds, void *engine_context,
  +                      void *buffer, size_t buffer_size,
  +                      size_t *used_buffer_size, va_list *args)
  +    {
  +    xds_init_decoding_engine(7 + 8 + 1);
  +    if (sscanf(buffer, "<float>%f</float>%n",
  +	       va_arg(*args, float*), used_buffer_size) != 1)
  +	return XDS_ERR_TYPE_MISMATCH;
  +    else
  +	return XDS_OK;
  +    }
  +
  +/*
    * Encode/decode double-precision floating point values.
    */
   
  @@ -421,16 +450,25 @@
                         void *buffer, size_t buffer_size,
                         size_t *used_buffer_size, va_list *args)
   {
  -    /* XXX */
  -    return -1;
  +    xds_init_encoding_engine(8 + 9 + 1);
  +    *used_buffer_size =
  +	snprintf(buffer, buffer_size, "<double>%f</double>", va_arg(*args, double));
  +    if (*used_buffer_size >= buffer_size)
  +	return XDS_ERR_OVERFLOW;
  +    else
  +	return XDS_OK;
   }
   
   int xml_decode_double(xds_t *xds, void *engine_context,
                         void *buffer, size_t buffer_size,
                         size_t *used_buffer_size, va_list *args)
   {
  -    /* XXX */
  -    return -1;
  +    xds_init_decoding_engine(8 + 9 + 1);
  +    if (sscanf(buffer, "<double>%lf</double>%n",
  +	       va_arg(*args, double*), used_buffer_size) != 1)
  +	return XDS_ERR_TYPE_MISMATCH;
  +    else
  +	return XDS_OK;
   }
   
   /*

From ossp-cvs-owner@ossp.org  Thu Aug 30 16:58:35 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7UEwYg02773; Thu, 30 Aug 2001 16:58:34 +0200 (CEST)
Date: Thu, 30 Aug 2001 16:58:34 +0200 (CEST)
Message-Id: <200108301458.f7UEwYg02773@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   30-Aug-2001 16:58:34
  Branch: HEAD                             Handle: 2001083015583300

  Modified files:
    ossp-pkg/srpc           TODO

  Log:
    XML now supports the float and double data type and the library is
    complete. The regression tests ran successfully on FreeBSD, Linux and
    Solaris (cc & gcc).

  Summary:
    Revision    Changes     Path
    1.26        +1  -2      ossp-pkg/srpc/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/TODO
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 TODO
  --- ossp-pkg/srpc/TODO	2001/08/30 11:19:10	1.25
  +++ ossp-pkg/srpc/TODO	2001/08/30 14:58:33	1.26
  @@ -22,8 +22,7 @@
      done: 100% [-> libxds/xds_engine_xdr.c]
   
    - implementation XML engines for basic data types.
  -   done: 99% [-> libxds/xds_engine_xml.c]
  -         "double" support is still missing.
  +   done: 100% [-> libxds/xds_engine_xml.c]
   
    - regression tests for libxds (make check)
      done: 100% [-> xds_test_*.c]

From ossp-cvs-owner@ossp.org  Thu Aug 30 16:59:20 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7UExJw02855; Thu, 30 Aug 2001 16:59:19 +0200 (CEST)
Date: Thu, 30 Aug 2001 16:59:19 +0200 (CEST)
Message-Id: <200108301459.f7UExJw02855@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   30-Aug-2001 16:59:19
  Branch: HEAD                             Handle: 2001083015591900

  Modified files:
    ossp-pkg/srpc           TODO

  Log:
    Closed milestone 5.

  Summary:
    Revision    Changes     Path
    1.27        +1  -0      ossp-pkg/srpc/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/TODO
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 TODO
  --- ossp-pkg/srpc/TODO	2001/08/30 14:58:33	1.26
  +++ ossp-pkg/srpc/TODO	2001/08/30 14:59:19	1.27
  @@ -42,6 +42,7 @@
   o M5 (peti+rse) [1 week until 06-Aug-2001]
    - [peti] documentation for libxds (xds.pod)
    - [rse]  OSSP adjustments for libxds
  +   done: 100%
   
   o M6 (peti+rse) [1 week until 13-Aug-2001]
    - design API for libamp

From ossp-cvs-owner@ossp.org  Thu Aug 30 17:02:55 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7UF2r003819; Thu, 30 Aug 2001 17:02:53 +0200 (CEST)
Date: Thu, 30 Aug 2001 17:02:53 +0200 (CEST)
Message-Id: <200108301502.f7UF2r003819@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/srpc/libxds/docs libxds.tex ossp-pkg/srpc/libxds ...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   30-Aug-2001 17:02:53
  Branch: HEAD                             Handle: 2001083016025201

  Modified files:
    ossp-pkg/srpc/libxds    xds.pod
    ossp-pkg/srpc/libxds/docs libxds.tex

  Log:
    Completed the documentation of (xml|xdr)_(en|de)code_(float|double)().

  Summary:
    Revision    Changes     Path
    1.18        +5  -5      ossp-pkg/srpc/libxds/docs/libxds.tex
    1.12        +4  -4      ossp-pkg/srpc/libxds/xds.pod
  ____________________________________________________________________________

  Index: ossp-pkg/srpc/libxds/docs/libxds.tex
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 libxds.tex
  --- ossp-pkg/srpc/libxds/docs/libxds.tex	2001/08/30 11:29:39	1.17
  +++ ossp-pkg/srpc/libxds/docs/libxds.tex	2001/08/30 15:02:53	1.18
  @@ -1,6 +1,6 @@
   % -*- mode: LaTeX; fill-column: 75; -*-
   %
  -% $Id: libxds.tex,v 1.17 2001/08/30 11:29:39 simons Exp $
  +% $Id: libxds.tex,v 1.18 2001/08/30 15:02:53 simons Exp $
   %
   \documentclass[a4paper,10pt,pointlessnumbers,bibtotoc]{scrartcl}
   \usepackage[dvips,xdvi]{graphicx}
  @@ -986,10 +986,10 @@
   xml\_decode\_uint64()      & xds\_uint64\_t*  & 18--37 bytes & 8 bytes      \\[1ex]
   xml\_encode\_int64()       & xds\_int64\_t    & 8 bytes      & 16--36 bytes \\
   xml\_decode\_int64()       & xds\_int64\_t*   & 16--36 bytes & 8 bytes      \\[1ex]
  -xml\_encode\_float()       & xds\_float\_t    & 4 bytes      & ?? bytes     \\
  -xml\_decode\_float()       & xds\_float\_t*   & ?? bytes     & 4 bytes      \\[1ex]
  -xml\_encode\_double()      & xds\_double\_t   & 8 bytes      & ?? bytes     \\
  -xml\_decode\_double()      & xds\_double\_t*  & ?? bytes     & 8 bytes      \\[1ex]
  +xml\_encode\_float()       & xds\_float\_t    & 4 bytes      & variable     \\
  +xml\_decode\_float()       & xds\_float\_t*   & variable     & 4 bytes      \\[1ex]
  +xml\_encode\_double()      & xds\_double\_t   & 8 bytes      & variable     \\
  +xml\_decode\_double()      & xds\_double\_t*  & variable     & 8 bytes      \\[1ex]
   xml\_encode\_octetstream() & void*, size\_t   & variable     & variable     \\
   xml\_decode\_octetstream() & void**, size\_t* & variable     & variable     \\[1ex]
   xml\_encode\_string()      & char*            & variable     & variable     \\
  Index: ossp-pkg/srpc/libxds/xds.pod
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 xds.pod
  --- ossp-pkg/srpc/libxds/xds.pod	2001/08/30 11:29:38	1.11
  +++ ossp-pkg/srpc/libxds/xds.pod	2001/08/30 15:02:52	1.12
  @@ -373,10 +373,10 @@
     xml_decode_uint64()        xds_uint64_t*     18-37 bytes   8 bytes
     xml_encode_int64()         xds_int64_t       8 bytes       16-36 bytes
     xml_decode_int64()         xds_int64_t*      16-36 bytes   8 bytes
  -  xml_encode_float()         xds_float_t       4 bytes       ? bytes
  -  xml_decode_float()         xds_float_t*      ? bytes       4 bytes
  -  xml_encode_double()        xds_double_t      8 bytes       ? bytes
  -  xml_decode_double()        xds_double_t*     ? bytes       8 bytes
  +  xml_encode_float()         xds_float_t       4 bytes       variable
  +  xml_decode_float()         xds_float_t*      variable      4 bytes
  +  xml_encode_double()        xds_double_t      8 bytes       variable
  +  xml_decode_double()        xds_double_t*     variable      8 bytes
     xml_encode_octetstream()   void*, size_t     variable      variable
     xml_decode_octetstream()   void**, size_t*   variable      variable
     xml_encode_string()        char*             variable      variable

From ossp-cvs-owner@ossp.org  Thu Aug 30 19:37:04 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f7UHb2R21457; Thu, 30 Aug 2001 19:37:02 +0200 (CEST)
Date: Thu, 30 Aug 2001 19:37:02 +0200 (CEST)
Message-Id: <200108301737.f7UHb2R21457@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str str-config.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   30-Aug-2001 19:37:02
  Branch: HEAD                             Handle: 2001083018370200

  Modified files:
    ossp-pkg/str            str-config.in

  Log:
    Fix version variable in str-config.in

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/str/str-config.in
  ____________________________________________________________________________

  Index: ossp-pkg/str/str-config.in
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 str-config.in
  --- ossp-pkg/str/str-config.in	2001/08/16 13:21:22	1.3
  +++ ossp-pkg/str/str-config.in	2001/08/30 17:37:02	1.4
  @@ -44,7 +44,7 @@
   str_cflags="@CFLAGS@"
   str_ldflags="@LDFLAGS@"
   str_libs="@LIBS@"
  -str_version="@PTH_VERSION_STR@"
  +str_version="@STR_VERSION_STR@"
   
   help=no
   version=no

From ossp-cvs-owner@ossp.org  Mon Sep  3 03:03:26 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f82FZfA40824; Sun, 2 Sep 2001 17:35:41 +0200 (CEST)
Date: Sun, 2 Sep 2001 17:35:41 +0200 (CEST)
Message-Id: <200109021535.f82FZfA40824@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_channel.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   02-Sep-2001 17:35:41
  Branch: HEAD                             Handle: 2001090216354000

  Modified files:
    ossp-pkg/l2             l2_channel.c

  Log:
    When destroying a channel, erase its pointer to avoid a double-destruction
    mistake (possibly by both the channel and stream parent.)

  Summary:
    Revision    Changes     Path
    1.8         +1  -0      ossp-pkg/l2/l2_channel.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_channel.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 l2_channel.c
  --- ossp-pkg/l2/l2_channel.c	2001/09/02 14:37:58	1.7
  +++ ossp-pkg/l2/l2_channel.c	2001/09/02 15:35:40	1.8
  @@ -166,6 +166,7 @@
       else
           rv = L2_OK;
       free(ch);
  +    ch = NULL;
       return rv;
   }
   

From ossp-cvs-owner@ossp.org  Mon Sep  3 03:03:28 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f82FWMw40444; Sun, 2 Sep 2001 17:32:22 +0200 (CEST)
Date: Sun, 2 Sep 2001 17:32:22 +0200 (CEST)
Message-Id: <200109021532.f82FWMw40444@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   02-Sep-2001 17:32:22
  Branch: HEAD                             Handle: 2001090216322100

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    Added remarks about buffer write, socket send, and output endpoint.

  Summary:
    Revision    Changes     Path
    1.12        +8  -0      ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 TODO
  --- ossp-pkg/l2/TODO	2001/08/26 12:59:55	1.11
  +++ ossp-pkg/l2/TODO	2001/09/02 15:32:21	1.12
  @@ -67,6 +67,14 @@
     - prefix=char*
   o l2_handler_buffer
     - size=size_t
  +o all output channels
  +  - should they have downstream, or be true endpoints?
  +o l2_ch_socket
  +  - write should handle partial send()
  +    thus check the return of send
  +o l2_ch_buffer
  +  - write() must implicitly flush() when incoming
  +    data is larger than remaining buffer capacity
   
   Stream Members:
   o channels static array

From ossp-cvs-owner@ossp.org  Mon Sep  3 03:03:28 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f82EbxX37404; Sun, 2 Sep 2001 16:37:59 +0200 (CEST)
Date: Sun, 2 Sep 2001 16:37:59 +0200 (CEST)
Message-Id: <200109021437.f82EbxX37404@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_channel.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   02-Sep-2001 16:37:59
  Branch: HEAD                             Handle: 2001090215375800

  Modified files:
    ossp-pkg/l2             l2_channel.c

  Log:
    Revert to last version due to new design of l2_ch_socket_t.

  Summary:
    Revision    Changes     Path
    1.7         +0  -3      ossp-pkg/l2/l2_channel.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_channel.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 l2_channel.c
  --- ossp-pkg/l2/l2_channel.c	2001/08/26 13:04:37	1.6
  +++ ossp-pkg/l2/l2_channel.c	2001/09/02 14:37:58	1.7
  @@ -210,9 +210,6 @@
                       case L2_TYPE_SHORT:
                           *(short *)(pa[i].store) = va_get(ap, short); 
                           break;
  -                    case L2_TYPE_USHORT:
  -                        *(unsigned short *)(pa[i].store) = va_get(ap, ushort); 
  -                        break;
                       case L2_TYPE_INT:
                           *(int *)(pa[i].store) = va_get(ap, int); 
                           break;

From ossp-cvs-owner@ossp.org  Mon Sep  3 03:03:34 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f82DIaE33100; Sun, 2 Sep 2001 15:18:36 +0200 (CEST)
Date: Sun, 2 Sep 2001 15:18:36 +0200 (CEST)
Message-Id: <200109021318.f82DIaE33100@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.h l2_p.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   02-Sep-2001 15:18:36
  Branch: HEAD                             Handle: 2001090214183600

  Modified files:
    ossp-pkg/l2             l2.h l2_p.h

  Log:
    Revert to last version due to new design of l2_ch_socket_t.

  Summary:
    Revision    Changes     Path
    1.10        +0  -1      ossp-pkg/l2/l2.h
    1.7         +0  -3      ossp-pkg/l2/l2_p.h
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2.h
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 l2.h
  --- ossp-pkg/l2/l2.h	2001/08/26 13:01:45	1.9
  +++ ossp-pkg/l2/l2.h	2001/09/02 13:18:36	1.10
  @@ -95,7 +95,6 @@
   typedef enum {
       L2_TYPE_CHAR,
       L2_TYPE_SHORT,
  -    L2_TYPE_USHORT,
       L2_TYPE_INT,
       L2_TYPE_LONG,
       L2_TYPE_FLOAT,
  Index: ossp-pkg/l2/l2_p.h
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 l2_p.h
  --- ossp-pkg/l2/l2_p.h	2001/08/26 13:01:45	1.6
  +++ ossp-pkg/l2/l2_p.h	2001/09/02 13:18:36	1.7
  @@ -36,7 +36,6 @@
   #define L2_MAX_MSGSIZE    4096
   #define L2_MAX_CHANNELS    128
   #define L2_MAX_FORMATTERS  128
  -#define L2_MAX_STRING      256
   
   typedef enum {
       L2_CHSTATE_CREATED,
  @@ -68,8 +67,6 @@
   #define _va_type_cast_char    char
   #define _va_type_recv_short   int
   #define _va_type_cast_short   short
  -#define _va_type_recv_ushort   int
  -#define _va_type_cast_ushort   short
   #define _va_type_recv_int     int
   #define _va_type_cast_int     int
   #define _va_type_recv_long    long

From ossp-cvs-owner@ossp.org  Mon Sep  3 03:03:36 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f82Fbma40871; Sun, 2 Sep 2001 17:37:48 +0200 (CEST)
Date: Sun, 2 Sep 2001 17:37:48 +0200 (CEST)
Message-Id: <200109021537.f82Fbma40871@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_buffer.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   02-Sep-2001 17:37:48
  Branch: HEAD                             Handle: 2001090216374800

  Modified files:
    ossp-pkg/l2             l2_ch_buffer.c

  Log:
    Buffer channel now flushes itself to the downstream channel before closing
    itself due to a call to its close method.

  Summary:
    Revision    Changes     Path
    1.9         +13 -5      ossp-pkg/l2/l2_ch_buffer.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_buffer.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 l2_ch_buffer.c
  --- ossp-pkg/l2/l2_ch_buffer.c	2001/08/24 15:16:43	1.8
  +++ ossp-pkg/l2/l2_ch_buffer.c	2001/09/02 15:37:48	1.9
  @@ -63,7 +63,7 @@
   static int hook_configure(l2_context_t *ctx, const char *fmt, va_list ap)
   {
       l2_ch_buffer_t *cfg;
  -    l2_param_t pa[3]; 
  +    l2_param_t pa[3];
       l2_result_t rv;
   
       /* parameter checks */
  @@ -152,14 +152,22 @@
   {
       l2_ch_buffer_t *cfg;
   
  +    /* parameter checks */
  +    if ((cfg = (l2_ch_buffer_t *)ctx->vp) == NULL)
  +        return L2_ERROR;
  +
  +    /* write stale data before closing down */
  +    if (cfg->bufpos > 0) {
  +        if (downstream != NULL)
  +            if (l2_channel_write(downstream, cfg->buf, cfg->bufpos) == L2_ERROR)
  +                return L2_ERROR;
  +        cfg->bufpos = 0;
  +    }
  +
       /* optionally close downstream channel, too */
       if (downstream != NULL)
           if (l2_channel_close(downstream) == L2_ERROR)
               return L2_ERROR;
  -
  -    /* parameter checks */
  -    if ((cfg = (l2_ch_buffer_t *)ctx->vp) == NULL)
  -        return L2_ERROR;
   
       /* close channel buffer */
       if (cfg->buf != NULL) {

From ossp-cvs-owner@ossp.org  Mon Sep  3 03:03:39 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f82Fcrk40909; Sun, 2 Sep 2001 17:38:53 +0200 (CEST)
Date: Sun, 2 Sep 2001 17:38:53 +0200 (CEST)
Message-Id: <200109021538.f82Fcrk40909@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   02-Sep-2001 17:38:53
  Branch: HEAD                             Handle: 2001090216385200

  Modified files:
    ossp-pkg/l2             l2_test.c

  Log:
    Added configuration and opening of buffer and file channels.

  Summary:
    Revision    Changes     Path
    1.5         +22 -7      ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/08/15 10:36:03	1.4
  +++ ossp-pkg/l2/l2_test.c	2001/09/02 15:38:52	1.5
  @@ -32,21 +32,30 @@
   
   int main(int argc, char *argv[])
       {
  -    l2_channel_t* log_channel;
  +    l2_channel_t* log_channel_buf;
  +    l2_channel_t* log_channel_file;
       l2_stream_t*  log_stream;
   
       /* Create the channel. */
   
       setbuf(stdout, 0);
       printf("Creating channel ... ");
  -    log_channel = l2_channel_create(&l2_handler_syslog);
  -    if (log_channel == 0)
  +    log_channel_buf = l2_channel_create(&l2_handler_buffer);
  +    log_channel_file = l2_channel_create(&l2_handler_file);
  +    if ((log_channel_buf == 0) || (log_channel_file == 0))
   	{
  -	fprintf(stderr, "Can't create my log channel!\n");
  +	fprintf(stderr, "Can't create my log channels!\n");
   	return 1;
   	}
       printf("done\n");
   
  +    l2_channel_configure(log_channel_buf, "size", 100);
  +    l2_channel_configure(log_channel_file, "path", "myfilelog", "append",\
  +        TRUE, "perm", 0x644);
  +
  +    l2_channel_open(log_channel_buf);
  +    l2_channel_open(log_channel_file);
  +
       /* Create the stream and attach the channel to it. */
   
       printf("Creating stream ... ");
  @@ -58,9 +67,14 @@
   	}
       printf("done\n");
       printf("Attaching channel to stream ... ");
  -    if (!l2_stream_channel(log_stream, log_channel, -1))
  +    if (!l2_stream_channel(log_stream, log_channel_buf, -1))
  +	{
  +	fprintf(stderr, "Can't attach buffer channel to log stream!\n");
  +	return 1;
  +	}
  +    if (!l2_stream_channel(log_stream, log_channel_file, -1))
   	{
  -	fprintf(stderr, "Can't attach channel to log stream!\n");
  +	fprintf(stderr, "Can't attach file channel to log stream!\n");
   	return 1;
   	}
       printf("done\n");
  @@ -68,7 +82,8 @@
       /* Log an example message. */
   
       printf("Writing log message ... ");
  -    l2_stream_log(log_stream, -1, "%cstream = 0x%lx, channel = 0x%lx%c", '"', log_stream, log_channel, '"');
  +    l2_stream_log(log_stream, -1, "%cstream = 0x%lx, channel = 0x%lx%c\n", '"',\
  +        log_stream, log_channel_buf, '"');
       printf("done\n");
   
       /* Clean up. */

From ossp-cvs-owner@ossp.org  Mon Sep  3 03:03:41 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f82Ecqp37437; Sun, 2 Sep 2001 16:38:52 +0200 (CEST)
Date: Sun, 2 Sep 2001 16:38:52 +0200 (CEST)
Message-Id: <200109021438.f82Ecqp37437@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_socket.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   02-Sep-2001 16:38:52
  Branch: HEAD                             Handle: 2001090215385100

  Modified files:
    ossp-pkg/l2             l2_ch_socket.c

  Log:
    Basic architecture and functionality additions.

  Summary:
    Revision    Changes     Path
    1.6         +120 -24    ossp-pkg/l2/l2_ch_socket.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_socket.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 l2_ch_socket.c
  --- ossp-pkg/l2/l2_ch_socket.c	2001/08/26 13:07:27	1.5
  +++ ossp-pkg/l2/l2_ch_socket.c	2001/09/02 14:38:51	1.6
  @@ -27,37 +27,86 @@
   **  l2_ch_socket.c: socket channel implementation
   */
   
  -#include "l2.h"
  -#include "l2_p.h"
  -
   #include <sys/types.h>
   #include <sys/socket.h>
   #include <netinet/in.h>
  +#include <arpa/inet.h>
  +#include <netdb.h>
  +#include <unistd.h>
  +
  +#include "l2.h"
  +#include "l2_p.h"
   
  +#define HAVE_INET_ATON
  +#ifndef HAVE_INET_PTON
  +#ifdef HAVE_INET_ATON
  +/* !!! TODO change pton1 to pton !!! */
  +static int inet_pton1(int iFamily, const char *pszAddress, void *pvMemref)
  +{
  +    int             i    = 0;
  +    struct in_addr  IP4Addr;
  +    struct in6_addr IP6Addr;
  +    char            *pszNextfield = NULL;          /* For IPv6 address trans */
  +    char            **ppszVerify  = &pszNextfield; /* To check IPv6 validity */
  +
  +    if (iFamily == AF_INET)
  +    {
  +        if (inet_aton(pszAddress, &IP4Addr))
  +        {
  +            memcpy(pvMemref, &IP4Addr, sizeof(struct in_addr));
  +            return 1;
  +        }
  +        return 0;
  +    }
  +
  +    else if (iFamily == AF_INET6)
  +    {
  +        for (i = 0; i < 16; i++)   /* Iterate through the IPv6 address fields */
  +        {
  +            ppszVerify = &pszNextfield;  /* Reset and compare later to verify */
  +            IP6Addr.__u6_addr.__u6_addr8[i] = (u_int8_t)strtol(pszAddress,\
  +                &pszNextfield, 16);
  +            *pszNextfield++; /* !!! TODO Problema !!! */
  +
  +            if ((&pszNextfield - ppszVerify) != 2)
  +                return 0; /* User is supplying a IPv6 format we don't support */
  +        }
  +        memcpy(pvMemref, &IP6Addr, sizeof(struct in6_addr));
  +        return 1;
  +    }
  +
  +    else      /* User converting from an address family that we don't support */
  +    {
  +        errno = EAFNOSUPPORT;
  +        return -1;
  +    }
  +}
  +#else
  +#error "neither inet_pton nor inet_aton available"
  +#endif
  +#endif
  +
   /* declare private channel configuration */
  -typedef struct {
  -    int iSocket;             /* Socket descriptor                        */
  -    int iDomain;             /* Hardcoded to support only IPv4 and IPv6  */
  -    int iProtocol;           /* Hardcoded to support only IPv4 and IPv6  */
  -    int iType;               /* Hardcoded for writing streams to iSocket */
  -    struct sockaddr *pAddr;  /* Where do we open a socket?               */
  +typedef struct
  +{
  +    char *pszHost;           /* IP Address or name of host to connect to */
  +    int iPort;               /* TCP Port to connect to                   */
  +    int iSocket;             /* Socket descriptor used during writing    */
   } l2_ch_socket_t;
   
   /* create channel */
   static int hook_create(l2_context_t *ctx)
   {
  -    l2_ch_socket_t *cfg;
  +    l2_ch_socket_t *cfg = NULL;
   
       /* allocate private channel configuration */
       if ((cfg = (l2_ch_socket_t *)malloc(sizeof(l2_ch_socket_t))) == NULL)
           return L2_ERROR;
   
       /* initialize configuration with reasonable defaults */
  -    cfg->iSocket   = 0;
  -    cfg->iDomain   = PF_INET;         /* Internet family             */
  -    cfg->iType     = SOCK_STREAM;     /* We write streams reliably   */
  -    cfg->iProtocol = IPPROTO_TCP;     /* TCP socket                  */
  -    cfg->pAddr      = NULL;
  +    cfg->pszHost   = NULL;
  +    cfg->iPort     = 0;
  +    cfg->iSocket   = -1;
   
       /* link private channel configuration into channel context */
       ctx->vp = cfg;
  @@ -69,21 +118,16 @@
   static int hook_configure(l2_context_t *ctx, const char *fmt, va_list ap)
   {
       l2_ch_socket_t *cfg;
  -    char pszAddress[L2_MAX_STRING];
  -    unsigned short unInport;
       l2_param_t pa[3];
       l2_result_t rv;
   
  -    unInport = 0;
  -
       /* parameter checks */
       if ((cfg = (l2_ch_socket_t *)ctx->vp) == NULL)
           return L2_ERROR;
   
       /* feed and call generic parameter parsing engine */
  -    L2_PARAM_SET(pa[0], address, CHARPTR, pszAddress);
  -    L2_PARAM_SET(pa[1], port,    USHORT,     &unInport);
  -/* TODO: Fill in the cfg-> structure after building the socket */
  +    L2_PARAM_SET(pa[0], host, CHARPTR, &cfg->pszHost);
  +    L2_PARAM_SET(pa[1], port, INT,     &cfg->iPort);
       L2_PARAM_END(pa[2]);
       rv = l2_channel_setparams(pa, fmt, ap);
   
  @@ -93,13 +137,55 @@
   /* open channel */
   static int hook_open(l2_context_t *ctx, l2_channel_t *downstream)
   {
  -    l2_ch_socket_t *cfg;
  +    l2_ch_socket_t      *cfg;
  +    struct hostent      *pHostentry;
  +    struct sockaddr_in  IP4Sockaddr;
  +    struct sockaddr_in6 IP6Sockaddr;
   
       /* parameter checks */
       if ((cfg = (l2_ch_socket_t *)ctx->vp) == NULL)
           return L2_ERROR;
  +    if (cfg->pszHost == NULL)
  +        return L2_ERROR;
  +
  +    /* open channel socket      */
  +    /* resolve host numerically */
  +    if (inet_pton1(AF_INET, cfg->pszHost, &IP4Sockaddr.sin_addr.s_addr) == 1)
  +    {
  +        IP4Sockaddr.sin_family = AF_INET;
  +        IP4Sockaddr.sin_port   = htons(cfg->iPort);
  +    }
  +
  +    /* resolve host nominally   */
  +    else if ((pHostentry = gethostbyname(cfg->pszHost)) != NULL)
  +    {
  +        if (pHostentry->h_addrtype == AF_INET)
  +        {
  +            IP4Sockaddr.sin_family = AF_INET;
  +            IP4Sockaddr.sin_port   = htons(cfg->iPort);
  +            memcpy(&IP4Sockaddr.sin_addr.s_addr, pHostentry->h_addr_list[0],\
  +                sizeof(IP4Sockaddr.sin_addr.s_addr));
  +        }
  +
  +        else if (pHostentry->h_addrtype == AF_INET6)
  +        {
  +            IP6Sockaddr.sin6_family = AF_INET6;
  +            IP6Sockaddr.sin6_port   = htons(cfg->iPort);
  +            memcpy(&IP6Sockaddr.sin6_addr.__u6_addr, pHostentry->h_addr_list[0],\
  +                sizeof(IP6Sockaddr.sin6_addr.__u6_addr));
  +        }
  +    }
  +
  +    else
  +        return L2_ERROR;
   
  -    /* open channel socket */
  +    if ((cfg->iSocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1)
  +        return L2_ERROR;
  +    if (connect(cfg->iSocket, (struct sockaddr *)&IP4Sockaddr, sizeof(IP4Sockaddr)))
  +    {
  +        close(cfg->iSocket);
  +        return L2_ERROR;
  +    }
   
       /* optionally open downstream channel, too */
       if (downstream != NULL)
  @@ -118,8 +204,12 @@
       /* parameter checks */
       if ((cfg = (l2_ch_socket_t *)ctx->vp) == NULL)
           return L2_ERROR;
  +    if (cfg->iSocket == -1)
  +        return L2_ERROR;
   
       /* write message to channel socket */
  +    if (send(cfg->iSocket, buf, buf_size, 0) == -1)
  +        return L2_ERROR;
   
       /* optionally write to downstream channel, too */
       if (downstream != NULL)
  @@ -132,6 +222,8 @@
   /* flush channel */
   static int hook_flush(l2_context_t *ctx, l2_channel_t *downstream)
   {
  +    /* NOP for this channel, because Unix I/O sockets are unbuffered! */
  +
       /* optionally flush downstream channel, too */
       if (downstream != NULL)
           if (l2_channel_flush(downstream) == L2_ERROR)
  @@ -153,8 +245,12 @@
       /* parameter checks */
       if ((cfg = (l2_ch_socket_t *)ctx->vp) == NULL)
           return L2_ERROR;
  +    if (cfg->iSocket == -1)
  +        return L2_ERROR;
   
       /* close channel socket */
  +    if ((shutdown(cfg->iSocket, SHUT_RDWR)) || (close(cfg->iSocket)))
  +        return L2_ERROR;
   
       return L2_OK;
   }

From ossp-cvs-owner@ossp.org  Mon Sep  3 03:03:41 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f82FXw140502; Sun, 2 Sep 2001 17:33:58 +0200 (CEST)
Date: Sun, 2 Sep 2001 17:33:58 +0200 (CEST)
Message-Id: <200109021533.f82FXw140502@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_objects.fig
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   02-Sep-2001 17:33:58
  Branch: HEAD                             Handle: 2001090216335800

  Modified files:
    ossp-pkg/l2             l2_objects.fig

  Log:
    Better positions of text labels.

  Summary:
    Revision    Changes     Path
    1.5         +123 -60    ossp-pkg/l2/l2_objects.fig
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_objects.fig
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 l2_objects.fig
  --- ossp-pkg/l2/l2_objects.fig	2001/08/22 17:28:40	1.4
  +++ ossp-pkg/l2/l2_objects.fig	2001/09/02 15:33:58	1.5
  @@ -64,51 +64,109 @@
   0 86 #9c0000
   0 87 #ededed
   0 88 #86acff
  -6 0 7800 2100 9600
  -2 2 0 1 0 7 64 0 15 0.000 0 0 -1 0 0 5
  -	 0 7800 2100 7800 2100 9600 0 9600 0 7800
  +6 0 0 12450 2400
  +2 2 0 1 0 7 60 0 18 0.000 0 0 -1 0 0 5
  +	 0 0 12450 0 12450 2400 0 2400 0 0
   2 2 0 1 0 7 46 0 0 0.000 0 0 -1 0 0 5
  -	 0 7800 2100 7800 2100 8250 0 8250 0 7800
  -2 4 0 0 0 7 58 0 20 0.000 0 0 7 0 0 5
  -	 1500 9225 450 9225 450 8550 1500 8550 1500 9225
  -4 0 0 38 0 0 14 0.0000 4 180 780 600 8775 <output>\001
  -4 0 0 30 0 0 30 0.0000 4 300 525 675 9150 file\001
  -4 0 0 42 0 0 12 0.0000 4 180 465 1575 9525 pNext\001
  +	 0 0 12450 0 12450 600 0 600 0 0
  +2 4 0 1 0 7 57 0 20 0.000 0 0 50 0 0 5
  +	 12450 2400 0 2400 0 600 12450 600 12450 2400
  +4 0 0 34 0 0 16 0.0000 4 165 1200 8250 2250 WARNING\001
  +4 0 0 34 0 0 16 0.0000 4 165 1125 10800 2250 CRITICAL\001
  +4 0 0 30 0 0 60 0.0000 4 510 2400 5025 1725 stream\001
  +4 0 0 34 0 0 16 0.0000 4 165 855 3300 2250 DEBUG\001
  +4 0 0 34 0 0 16 0.0000 4 165 1080 3300 2025 TRACE  | |\001
  +4 0 0 34 0 0 16 0.0000 4 165 1065 8250 2025 ALERT  | |\001
  +4 0 0 34 0 0 16 0.0000 4 165 1095 10800 2025 ERROR  | |\001
  +4 0 0 34 0 0 16 0.0000 4 165 1005 10800 1800 PANIC  | |\001
  +4 0 0 34 0 0 16 0.0000 4 165 570 825 2250 INFO\001
  +4 0 0 34 0 0 16 0.0000 4 165 900 5850 2250 NOTICE\001
   -6
  -6 0 5400 2100 7200
  +6 0 3000 2100 4800
  +6 1425 4500 2100 4800
  +2 2 0 1 0 0 44 0 20 0.000 0 0 -1 0 0 5
  +	 2100 4800 1800 4800 1800 4550 2100 4550 2100 4800
  +2 2 0 1 0 0 44 0 20 0.000 0 0 -1 0 0 5
  +	 1800 4800 1475 4800 1475 4675 1800 4675 1800 4800
  +2 4 0 1 0 0 44 0 20 0.000 0 0 9 0 0 5
  +	 1475 4550 2100 4550 2100 4800 1475 4800 1475 4550
  +-6
   2 2 0 1 0 7 46 0 0 0.000 0 0 -1 0 0 5
  -	 0 5400 2100 5400 2100 5850 0 5850 0 5400
  +	 0 3000 2100 3000 2100 3450 0 3450 0 3000
   2 4 0 0 0 7 58 0 20 0.000 0 0 7 0 0 5
  -	 1650 6825 450 6825 450 6150 1650 6150 1650 6825
  +	 1500 4425 525 4425 525 3750 1500 3750 1500 4425
   2 2 0 1 0 7 60 0 19 0.000 0 0 -1 0 0 5
  -	 0 5400 2100 5400 2100 7200 0 7200 0 5400
  -4 0 0 42 0 0 12 0.0000 4 180 465 1575 7125 pNext\001
  -4 0 0 30 0 0 30 0.0000 4 300 1035 525 6750 buffer\001
  -4 0 0 38 0 0 14 0.0000 4 150 630 750 6375 <filter>\001
  +	 0 3000 2100 3000 2100 4800 0 4800 0 3000
  +4 0 0 38 0 0 14 0.0000 4 150 630 675 3975 <filter>\001
  +4 0 0 30 0 0 30 0.0000 4 300 795 600 4350 filter\001
  +4 0 7 42 0 0 12 0.0000 4 180 465 1575 4725 pNext\001
   -6
   6 2625 5400 4725 7200
  +6 4050 6900 4725 7200
  +2 2 0 1 0 0 44 0 20 0.000 0 0 -1 0 0 5
  +	 4725 7200 4425 7200 4425 6950 4725 6950 4725 7200
  +2 2 0 1 0 0 44 0 20 0.000 0 0 -1 0 0 5
  +	 4425 7200 4100 7200 4100 7075 4425 7075 4425 7200
  +2 4 0 1 0 0 44 0 20 0.000 0 0 9 0 0 5
  +	 4100 6950 4725 6950 4725 7200 4100 7200 4100 6950
  +-6
   2 2 0 1 0 7 64 0 15 0.000 0 0 -1 0 0 5
   	 2625 5400 4725 5400 4725 7200 2625 7200 2625 5400
  -2 2 0 1 0 7 46 0 0 0.000 0 0 -1 0 0 5
  -	 2625 5400 4725 5400 4725 5850 2625 5850 2625 5400
   2 4 0 0 0 7 58 0 20 0.000 0 0 7 0 0 5
   	 4350 6825 3075 6825 3075 6150 4350 6150 4350 6825
  +2 2 0 1 0 7 46 0 0 0.000 0 0 -1 0 0 5
  +	 2625 5400 4725 5400 4725 5850 2625 5850 2625 5400
   4 0 0 38 0 0 14 0.0000 4 180 780 3300 6375 <output>\001
   4 0 0 30 0 0 30 0.0000 4 300 1110 3150 6750 socket\001
  -4 0 0 42 0 0 12 0.0000 4 180 465 4200 7125 pNext\001
  +4 0 7 42 0 0 12 0.0000 4 180 465 4200 7125 pNext\001
   -6
  -6 0 3000 2100 4800
  +6 0 5400 2100 7200
  +6 1425 6900 2100 7200
  +2 2 0 1 0 0 44 0 20 0.000 0 0 -1 0 0 5
  +	 2100 7200 1800 7200 1800 6950 2100 6950 2100 7200
  +2 2 0 1 0 0 44 0 20 0.000 0 0 -1 0 0 5
  +	 1800 7200 1475 7200 1475 7075 1800 7075 1800 7200
  +2 4 0 1 0 0 44 0 20 0.000 0 0 9 0 0 5
  +	 1475 6950 2100 6950 2100 7200 1475 7200 1475 6950
  +-6
   2 2 0 1 0 7 46 0 0 0.000 0 0 -1 0 0 5
  -	 0 3000 2100 3000 2100 3450 0 3450 0 3000
  +	 0 5400 2100 5400 2100 5850 0 5850 0 5400
   2 4 0 0 0 7 58 0 20 0.000 0 0 7 0 0 5
  -	 1500 4425 525 4425 525 3750 1500 3750 1500 4425
  +	 1650 6825 450 6825 450 6150 1650 6150 1650 6825
   2 2 0 1 0 7 60 0 19 0.000 0 0 -1 0 0 5
  -	 0 3000 2100 3000 2100 4800 0 4800 0 3000
  -4 0 0 38 0 0 14 0.0000 4 150 630 675 3975 <filter>\001
  -4 0 0 30 0 0 30 0.0000 4 300 795 600 4350 filter\001
  -4 0 0 42 0 0 12 0.0000 4 180 465 1575 4725 pNext\001
  +	 0 5400 2100 5400 2100 7200 0 7200 0 5400
  +4 0 0 30 0 0 30 0.0000 4 300 1035 525 6750 buffer\001
  +4 0 0 38 0 0 14 0.0000 4 150 630 750 6375 <filter>\001
  +4 0 7 42 0 0 12 0.0000 4 180 465 1575 7125 pNext\001
  +-6
  +6 0 7800 2100 9600
  +6 1425 9300 2100 9600
  +2 2 0 1 0 0 44 0 20 0.000 0 0 -1 0 0 5
  +	 2100 9600 1800 9600 1800 9350 2100 9350 2100 9600
  +2 2 0 1 0 0 44 0 20 0.000 0 0 -1 0 0 5
  +	 1800 9600 1475 9600 1475 9475 1800 9475 1800 9600
  +2 4 0 1 0 0 44 0 20 0.000 0 0 9 0 0 5
  +	 1475 9350 2100 9350 2100 9600 1475 9600 1475 9350
  +-6
  +2 2 0 1 0 7 64 0 15 0.000 0 0 -1 0 0 5
  +	 0 7800 2100 7800 2100 9600 0 9600 0 7800
  +2 2 0 1 0 7 46 0 0 0.000 0 0 -1 0 0 5
  +	 0 7800 2100 7800 2100 8250 0 8250 0 7800
  +2 4 0 0 0 7 58 0 20 0.000 0 0 7 0 0 5
  +	 1500 9225 450 9225 450 8550 1500 8550 1500 9225
  +4 0 0 38 0 0 14 0.0000 4 180 780 600 8775 <output>\001
  +4 0 0 30 0 0 30 0.0000 4 300 525 675 9150 file\001
  +4 0 7 42 0 0 12 0.0000 4 180 465 1575 9525 pNext\001
   -6
   6 2625 3000 4725 4800
  +6 4050 4500 4725 4800
  +2 2 0 1 0 0 44 0 20 0.000 0 0 -1 0 0 5
  +	 4725 4800 4425 4800 4425 4550 4725 4550 4725 4800
  +2 2 0 1 0 0 44 0 20 0.000 0 0 -1 0 0 5
  +	 4425 4800 4100 4800 4100 4675 4425 4675 4425 4800
  +2 4 0 1 0 0 44 0 20 0.000 0 0 9 0 0 5
  +	 4100 4550 4725 4550 4725 4800 4100 4800 4100 4550
  +-6
   2 2 0 1 0 7 46 0 0 0.000 0 0 -1 0 0 5
   	 2625 3000 4725 3000 4725 3450 2625 3450 2625 3000
   2 2 0 1 0 7 60 0 19 0.000 0 0 -1 0 0 5
  @@ -117,59 +175,66 @@
   	 4275 4500 3075 4500 3075 3750 4275 3750 4275 4500
   4 0 0 38 0 0 14 0.0000 4 150 630 3375 3975 <filter>\001
   4 0 0 30 0 0 30 0.0000 4 405 1020 3150 4350 prefix\001
  -4 0 0 42 0 0 12 0.0000 4 180 465 4200 4725 pNext\001
  +4 0 7 42 0 0 12 0.0000 4 180 465 4200 4725 pNext\001
   -6
   6 5250 3000 7350 4800
  +6 6675 4500 7350 4800
  +2 2 0 1 0 0 44 0 20 0.000 0 0 -1 0 0 5
  +	 7350 4800 7050 4800 7050 4550 7350 4550 7350 4800
  +2 2 0 1 0 0 44 0 20 0.000 0 0 -1 0 0 5
  +	 7050 4800 6725 4800 6725 4675 7050 4675 7050 4800
  +2 4 0 1 0 0 44 0 20 0.000 0 0 9 0 0 5
  +	 6725 4550 7350 4550 7350 4800 6725 4800 6725 4550
  +-6
   2 2 0 1 0 7 64 0 15 0.000 0 0 -1 0 0 5
   	 5250 3000 7350 3000 7350 4800 5250 4800 5250 3000
  -2 2 0 1 0 7 46 0 0 0.000 0 0 -1 0 0 5
  -	 5250 3000 7350 3000 7350 3450 5250 3450 5250 3000
   2 4 0 0 0 7 58 0 20 0.000 0 0 7 0 0 5
   	 6825 4500 5775 4500 5775 3750 6825 3750 6825 4500
  +2 2 0 1 0 7 46 0 0 0.000 0 0 -1 0 0 5
  +	 5250 3000 7350 3000 7350 3450 5250 3450 5250 3000
   4 0 0 38 0 0 14 0.0000 4 180 780 5925 3975 <output>\001
   4 0 0 30 0 0 30 0.0000 4 405 720 5925 4350 pipe\001
  -4 0 0 42 0 0 12 0.0000 4 180 465 6825 4725 pNext\001
  +4 0 7 42 0 0 12 0.0000 4 180 465 6825 4725 pNext\001
   -6
   6 7800 3000 9900 4800
  -2 2 0 1 0 7 64 0 15 0.000 0 0 -1 0 0 5
  -	 7800 3000 9900 3000 9900 4800 7800 4800 7800 3000
  +6 9225 4500 9900 4800
  +2 2 0 1 0 0 44 0 20 0.000 0 0 -1 0 0 5
  +	 9900 4800 9600 4800 9600 4550 9900 4550 9900 4800
  +2 2 0 1 0 0 44 0 20 0.000 0 0 -1 0 0 5
  +	 9600 4800 9275 4800 9275 4675 9600 4675 9600 4800
  +2 4 0 1 0 0 44 0 20 0.000 0 0 9 0 0 5
  +	 9275 4550 9900 4550 9900 4800 9275 4800 9275 4550
  +-6
   2 2 0 1 0 7 46 0 0 0.000 0 0 -1 0 0 5
   	 7800 3000 9900 3000 9900 3450 7800 3450 7800 3000
   2 4 0 0 0 7 58 0 20 0.000 0 0 7 0 0 5
   	 9525 4500 8250 4500 8250 3750 9525 3750 9525 4500
  +2 2 0 1 0 7 64 0 15 0.000 0 0 -1 0 0 5
  +	 7800 3000 9900 3000 9900 4800 7800 4800 7800 3000
   4 0 0 38 0 0 14 0.0000 4 180 780 8475 3975 <output>\001
   4 0 0 30 0 0 30 0.0000 4 405 1080 8325 4350 syslog\001
  -4 0 0 42 0 0 12 0.0000 4 180 465 9375 4725 pNext\001
  +4 0 7 42 0 0 12 0.0000 4 180 465 9375 4725 pNext\001
   -6
   6 10350 3000 12450 4800
  -2 2 0 1 0 7 64 0 15 0.000 0 0 -1 0 0 5
  -	 10350 3000 12450 3000 12450 4800 10350 4800 10350 3000
  +6 11775 4500 12450 4800
  +2 2 0 1 0 0 44 0 20 0.000 0 0 -1 0 0 5
  +	 12450 4800 12150 4800 12150 4550 12450 4550 12450 4800
  +2 2 0 1 0 0 44 0 20 0.000 0 0 -1 0 0 5
  +	 12150 4800 11825 4800 11825 4675 12150 4675 12150 4800
  +2 4 0 1 0 0 44 0 20 0.000 0 0 9 0 0 5
  +	 11825 4550 12450 4550 12450 4800 11825 4800 11825 4550
  +-6
   2 2 0 1 0 7 46 0 0 0.000 0 0 -1 0 0 5
   	 10350 3000 12450 3000 12450 3450 10350 3450 10350 3000
   2 4 0 0 0 7 58 0 20 0.000 0 0 7 0 0 5
   	 12375 4500 10425 4500 10425 3750 12375 3750 12375 4500
  +2 2 0 1 0 7 64 0 15 0.000 0 0 -1 0 0 5
  +	 10350 3000 12450 3000 12450 4800 10350 4800 10350 3000
   4 0 0 38 0 0 14 0.0000 4 180 780 11025 3975 <output>\001
   4 0 0 30 0 0 24 0.0000 4 330 1905 10425 4350 filedescriptor\001
  -4 0 0 42 0 0 12 0.0000 4 180 465 11925 4725 pNext\001
  --6
  -6 0 0 12450 2400
  -2 2 0 1 0 7 60 0 18 0.000 0 0 -1 0 0 5
  -	 0 0 12450 0 12450 2400 0 2400 0 0
  -2 2 0 1 0 7 46 0 0 0.000 0 0 -1 0 0 5
  -	 0 0 12450 0 12450 600 0 600 0 0
  -2 4 0 1 0 7 57 0 20 0.000 0 0 50 0 0 5
  -	 12450 2400 0 2400 0 600 12450 600 12450 2400
  -4 0 0 34 0 0 16 0.0000 4 165 1200 8250 2250 WARNING\001
  -4 0 0 34 0 0 16 0.0000 4 165 1125 10800 2250 CRITICAL\001
  -4 0 0 34 0 0 16 0.0000 4 165 855 3300 2250 DEBUG\001
  -4 0 0 30 0 0 60 0.0000 4 510 2400 5025 1725 stream\001
  -4 0 0 34 0 0 16 0.0000 4 165 810 675 2250 TRACE\001
  -4 0 0 34 0 0 16 0.0000 4 165 570 6075 2250 INFO\001
  -4 0 0 34 0 0 16 0.0000 4 165 1170 8250 1950 NOTICE  | |\001
  -4 0 0 34 0 0 16 0.0000 4 165 1095 10800 1950 ERROR  | |\001
  -4 0 0 34 0 0 16 0.0000 4 165 1005 10800 1650 PANIC  | |\001
  +4 0 7 42 0 0 12 0.0000 4 180 465 11925 4725 pNext\001
   -6
  -6 5475 4875 12150 9825
  +6 5475 4875 12150 9750
   6 10800 8925 11700 9300
   2 2 0 1 0 7 101 0 20 4.000 0 0 7 0 0 5
   	 10800 8925 11700 8925 11700 9300 10800 9300 10800 8925
  @@ -252,17 +317,15 @@
   4 0 0 50 0 0 12 0.0000 4 135 90 7875 8625 1\001
   4 0 0 50 0 0 12 0.0000 4 135 90 7575 8625 1\001
   -6
  -6 5475 4875 12150 9825
   3 1 0 1 0 7 112 0 10 0.000 0 0 0 22
   	 5625 7575 5550 6975 6150 6750 6225 6075 7575 5850 7875 4950
  -	 9150 5250 10575 4875 11025 5700 10500 6750 11550 7125 12150 8175
  -	 11850 8700 12150 9600 10875 9750 10200 9450 9225 9600 8250 9825
  -	 6675 9675 5925 9750 5550 9450 5475 8250
  +	 9150 5250 10575 4875 11025 5550 10725 6825 11550 7125 12150 8175
  +	 11925 8850 12150 9600 10875 9750 10125 9525 9075 9600 8025 9750
  +	 6675 9600 5925 9750 5550 9450 5475 8250
   	 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000
   	 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000
   	 1.000 1.000 1.000 1.000 1.000 1.000
  -4 0 7 32 0 0 40 0.0000 4 420 1695 6525 6600 classes\001
  --6
  +4 0 7 32 0 0 40 0.0000 4 420 1695 6525 6825 classes\001
   -6
   2 1 0 6 0 7 54 0 0 0.000 0 0 -1 0 0 2
   	 1050 2400 1050 3000

From ossp-cvs-owner@ossp.org  Tue Sep  4 03:03:25 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f83BoQg10342; Mon, 3 Sep 2001 13:50:26 +0200 (CEST)
Date: Mon, 3 Sep 2001 13:50:26 +0200 (CEST)
Message-Id: <200109031150.f83BoQg10342@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_channel.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   03-Sep-2001 13:50:26
  Branch: HEAD                             Handle: 2001090312502500

  Modified files:
    ossp-pkg/l2             l2_channel.c

  Log:
    remove useless assign

  Summary:
    Revision    Changes     Path
    1.9         +0  -1      ossp-pkg/l2/l2_channel.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_channel.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 l2_channel.c
  --- ossp-pkg/l2/l2_channel.c	2001/09/02 15:35:40	1.8
  +++ ossp-pkg/l2/l2_channel.c	2001/09/03 11:50:25	1.9
  @@ -166,7 +166,6 @@
       else
           rv = L2_OK;
       free(ch);
  -    ch = NULL;
       return rv;
   }
   

From ossp-cvs-owner@ossp.org  Tue Sep  4 03:03:36 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f83Db0516448; Mon, 3 Sep 2001 15:37:00 +0200 (CEST)
Date: Mon, 3 Sep 2001 15:37:00 +0200 (CEST)
Message-Id: <200109031337.f83Db0516448@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_file.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   03-Sep-2001 15:37:00
  Branch: HEAD                             Handle: 2001090314370000

  Modified files:
    ossp-pkg/l2             l2_ch_file.c

  Log:
    fix configuration bug in file channel

  Summary:
    Revision    Changes     Path
    1.8         +3  -3      ossp-pkg/l2/l2_ch_file.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_file.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 l2_ch_file.c
  --- ossp-pkg/l2/l2_ch_file.c	2001/08/15 10:36:03	1.7
  +++ ossp-pkg/l2/l2_ch_file.c	2001/09/03 13:37:00	1.8
  @@ -67,7 +67,7 @@
   static int hook_configure(l2_context_t *ctx, const char *fmt, va_list ap)
   {
       l2_ch_file_t *cfg;
  -    l2_param_t pa[3]; 
  +    l2_param_t pa[4]; 
       l2_result_t rv;
   
       /* parameter checks */
  @@ -77,8 +77,8 @@
       /* feed and call generic parameter parsing engine */
       L2_PARAM_SET(pa[0], path,   CHARPTR, &cfg->path);
       L2_PARAM_SET(pa[1], append, INT,     &cfg->append);
  -    L2_PARAM_SET(pa[1], perm,   LONG,    &cfg->perm);
  -    L2_PARAM_END(pa[2]);
  +    L2_PARAM_SET(pa[2], perm,   LONG,    &cfg->perm);
  +    L2_PARAM_END(pa[3]);
       rv = l2_channel_setparams(pa, fmt, ap);
   
       return rv;

From ossp-cvs-owner@ossp.org  Tue Sep  4 03:03:41 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f83HNmP28979; Mon, 3 Sep 2001 19:23:48 +0200 (CEST)
Date: Mon, 3 Sep 2001 19:23:48 +0200 (CEST)
Message-Id: <200109031723.f83HNmP28979@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 Makefile.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   03-Sep-2001 19:23:48
  Branch: HEAD                             Handle: 2001090318234800

  Modified files:
    ossp-pkg/l2             Makefile.in

  Log:
    - fix realclean target
    - remove tool update targets (done by autogen.sh)

  Summary:
    Revision    Changes     Path
    1.10        +4  -19     ossp-pkg/l2/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 Makefile.in
  --- ossp-pkg/l2/Makefile.in	2001/08/15 10:36:03	1.9
  +++ ossp-pkg/l2/Makefile.in	2001/09/03 17:23:48	1.10
  @@ -211,8 +211,12 @@
   #   by "autoconf && autoheader && ./configure && make all"
   realclean: distclean
   	$(RM) configure
  +	$(RM) config.guess config.sub
  +	$(RM) ltmain.sh libtool.m4
  +	$(RM) shtool
   	$(RM) l2-config.1
   	$(RM) l2.3
  +	$(RM) l2++.3
   
   #   roll a distribution tarball
   dist: distclean
  @@ -232,25 +236,6 @@
   	$(_VERSION)
   update-version:
   	@OPT="-s`$(SHTOOL) version -lc -dshort $(_VERSION_FILE)`" && $(_VERSION)
  -
  -#   update build environment tools
  -update-tools:
  -	@$(RM) ltmain.sh ltconfig shtool
  -	@$(MAKE) $(MFLAGS) ltmain.sh ltconfig configure shtool
  -configure: configure.in aclocal.m4
  -	$(RM) configure
  -	autoconf
  -ltmain.sh:
  -	@F=`libtoolize -n -c -f | grep 'cp.*ltmain.sh' |\
  -	    sed -e 's;[^/]*;;' -e 's; .*;;'`; \
  -	echo "ltmain.sh <-- $$F"; cat $$F |\
  -	sed -e 's:/bin/sh; then:/bin/sh || test "$$nonopt" = ./shtool;then:' \
  -	    -e 's:exec \$$SHELL \$$0 --finish:exit 0 #:' >ltmain.sh
  -ltconfig:
  -	@F=`libtoolize -n -c -f | grep 'cp.*ltconfig' | sed -e 's;[^/]*;;' -e 's; .*;;'`; \
  -	echo "ltconfig <-- $$F"; cp $$F .
  -shtool:
  -	shtoolize -o shtool echo version mkdir install fixperm tarball
   
   #   create dependencies
   depend:

From ossp-cvs-owner@ossp.org  Tue Sep  4 03:03:54 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f83F6UC21635; Mon, 3 Sep 2001 17:06:30 +0200 (CEST)
Date: Mon, 3 Sep 2001 17:06:30 +0200 (CEST)
Message-Id: <200109031506.f83F6UC21635@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO lmtp2nntp.c lmtp2nntp.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   03-Sep-2001 17:06:30
  Branch: HEAD                             Handle: 2001090316062900

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO lmtp2nntp.c lmtp2nntp.pod

  Log:
    tried to add -b option w/o success. Binding to a given port, which should only be a side effect anyway) works but binding to given address currently fails for unknown reason.

  Summary:
    Revision    Changes     Path
    1.25        +17 -11     ossp-pkg/lmtp2nntp/00TODO
    1.38        +48 -2      ossp-pkg/lmtp2nntp/lmtp2nntp.c
    1.14        +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	2001/08/30 13:38:04	1.24
  +++ ossp-pkg/lmtp2nntp/00TODO	2001/09/03 15:06:29	1.25
  @@ -1,18 +1,24 @@
   
   whatsup draufleiten
  -ID logging, RFC1891 ENVID, 6.2
   
  -    **** LMTP REDESIGN ****
   
  -RESULT:
  -- robust checking and handling of NNTP protocol errors
  -- logging into a single file -> write(2) !fwrite(3), (optional) syslog
  -- invoked as mailer using LMTP, providing useful return status
  -- invoked as command line (lowpri)
  -- queuing is not supported for command line and a client issue for LMTP
  -- remove To: and Cc: headers
  -- allow crosspostings only through command line
  -- new manpage
  +[B<-b> I<bindaddress>]
  +
  +use L2 for logging, grab ID through RFC1891 ENVID, 6.2
  +[B<-i> I<messageid>]
  +[B<-l> I<logtarget>]
  +
  +CU/CUS
  +
  +str debugging
  +
  +check str library version
  +- openpkg (package time)
  +- autoconf, (autoconf time)
  +- str.h, #err (compile time)
  +- STR_VERSION (run time)
  +
  +check gcc3 compatiblity
   
       **** DEVELOPMENT INFORMATION ****
   
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.37 -r1.38 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/08/30 11:53:25	1.37
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/03 15:06:29	1.38
  @@ -97,6 +97,9 @@
       char           *option_deliverymodefakedsn;
       int             option_maxmessagesize;
       int             option_waittime;
  +    char           *cpBindh;
  +    char           *cpBindp;
  +    sa_t           *saBind;
       int             nsc;
       struct ns       ns[MAXNEWSSERVICES];
       char           *azGroupargs;
  @@ -176,6 +179,9 @@
       ctx->option_deliverymodefakedsn    = "5.7.1"; /* Delivery not authorized, message refused */
       ctx->option_maxmessagesize = 8 * 1024 * 1024;
       ctx->option_waittime = -1;
  +    ctx->cpBindh = NULL;
  +    ctx->cpBindp = NULL;
  +    ctx->saBind = NULL;
       ctx->nsc = 0;
       for (i=0; i < MAXNEWSSERVICES; i++) {
           ctx->ns[i].h = NULL;
  @@ -194,7 +200,7 @@
           exit(ERR_EXECUTION);
       }
   
  -#if 1
  +#if 0
       {
           char buf[1000];
           int bufused = 0;
  @@ -217,12 +223,43 @@
        */
   
       /* read in the arguments */
  -    while ((i = getopt(argc, argv, "Vd:g:h:m:n:t:vw:")) != -1) {
  +    while ((i = getopt(argc, argv, "Vb:d:g:h:m:n:t:vw:")) != -1) {
           switch (i) {
               case 'V': /*POD [B<-V>] (version)*/
                   fprintf(stdout, "%s\n", lmtp2nntp_version.v_gnu);
                   exit(0);
                   break;
  +            case 'b': /*POD [B<-b> I<bindaddr>[I<:port>] */
  +                /* parse host[:port] string into host and port */
  +                ctx->cpBindh = strdup(optarg);
  +                if ((ctx->cpBindp = strrchr(ctx->cpBindh, ':')) != NULL) {
  +                    *ctx->cpBindp++ = NUL;
  +                    ctx->cpBindp = strdup(ctx->cpBindp);
  +                }
  +                else 
  +                    ctx->cpBindp = strdup("0");
  +
  +                fprintf(stderr, "DEBUG: creating TCP socket address for \"%s:%s\"\n", ctx->cpBindh, ctx->cpBindp);
  +                if ((ctx->saBind = sa_create(SA_IP, "tcp", ctx->cpBindh, ctx->cpBindp)) == NULL) {
  +                    fprintf(stderr, "%s:Error: creating TCP socket address failed for \"%s:%s\": %s\n", 
  +                            progname, 
  +                            ctx->cpBindh, 
  +                            ctx->cpBindp, 
  +                            strerror(errno));
  +                    exit(ERR_EXECUTION);
  +                }
  +                fprintf(stderr, "DEBUG: saBind->sa_len=%d\n",
  +                ctx->saBind->sa_buf->sa_len);
  +                fprintf(stderr, "DEBUG: saBind->sa_family=%d\n", (int)ctx->saBind->sa_buf->sa_family);
  +                for (i=0; i<14; i++)
  +                fprintf(stderr, "DEBUG: saBind->sa_data[%2d]=%2x %d\n", i,
  +                (unsigned int)(unsigned char)ctx->saBind->sa_buf->sa_data[i],
  +                (unsigned int)(unsigned char)ctx->saBind->sa_buf->sa_data[i]);
  +                ctx->saBind->sa_buf->sa_data[ 7]='0'; //DEBUG
  +                ctx->saBind->sa_buf->sa_data[ 8]='0'; //DEBUG
  +                ctx->saBind->sa_buf->sa_data[ 9]='0'; //DEBUG
  +                ctx->saBind->sa_buf->sa_data[10]='0'; //DEBUG
  +                break;
               case 'd': /*POD [B<-d> I<deliverymode>] */
                   if      (strcasecmp(optarg, "post") == 0)
                       ctx->option_deliverymode = DELIVERYMODE_POST;
  @@ -553,6 +590,11 @@
       i = 0;
       do {
           bOk = TRUE;
  +        if (bOk && (ctx->saBind != NULL) &&
  +                   bind(ctx->ns[i].s, ctx->saBind->sa_buf, ctx->saBind->sa_len) < 0) {
  +            bOk = FALSE;
  +            fprintf(stderr, "DEBUG: errno=%d\n", errno);
  +        }
           if (ctx->option_waittime > 0) {
               if (connect_nonb(ctx->ns[i].s, ctx->ns[i].sa->sa_buf, ctx->ns[i].sa->sa_len, 
                            ctx->option_waittime) < 0) {
  @@ -631,6 +673,10 @@
           if (ctx->ns[i].h != NULL)
               free(ctx->ns[i].h);
       }
  +    if (ctx->cpBindh != NULL)
  +        free(ctx->cpBindh);
  +    if (ctx->cpBindp != NULL)
  +        free(ctx->cpBindp);
   }
   
   static int helo_rfc0821domain(char *msg, char **domain)
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 lmtp2nntp.pod
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/08/30 13:56:38	1.13
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/09/03 15:06:29	1.14
  @@ -20,7 +20,7 @@
   I<newsgroup> [I<newsgroup> ...]
   
   B<FIXME NOT YET IMPLEMENTED>
  -[B<-o> I<origin>]
  +[B<-b> I<bindaddress>]
   [B<-i> I<messageid>]
   [B<-l> I<logtarget>]
   

From ossp-cvs-owner@ossp.org  Tue Sep  4 03:03:57 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f83DhYr16572; Mon, 3 Sep 2001 15:43:34 +0200 (CEST)
Date: Mon, 3 Sep 2001 15:43:34 +0200 (CEST)
Message-Id: <200109031343.f83DhYr16572@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.h l2_channel.c l2_p.h l2_stream.c l2_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   03-Sep-2001 15:43:34
  Branch: HEAD                             Handle: 2001090314433300

  Modified files:
    ossp-pkg/l2             l2.h l2_channel.c l2_p.h l2_stream.c l2_test.c

  Log:
    - replace "int" with "l2_result_t" in L2 channel API
    - use a 2^n for L2_LEVEL_XXX in order to be able to create mask
    - remember loglevel for each channel
    - rewrite test suite

  Summary:
    Revision    Changes     Path
    1.12        +21 -17     ossp-pkg/l2/l2.h
    1.10        +16 -16     ossp-pkg/l2/l2_channel.c
    1.9         +13 -8      ossp-pkg/l2/l2_p.h
    1.7         +33 -20     ossp-pkg/l2/l2_stream.c
    1.6         +55 -61     ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2.h
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 l2.h
  --- ossp-pkg/l2/l2.h	2001/09/03 12:16:44	1.11
  +++ ossp-pkg/l2/l2.h	2001/09/03 13:43:33	1.12
  @@ -61,18 +61,22 @@
   typedef struct l2_stream_st  l2_stream_t;
   typedef struct l2_channel_st l2_channel_t;
   
  -/* list of logging levels */
  +/* list of logging levels (high to low priority; low to high amount of logging) */
   typedef enum {
  -    L2_LEVEL_DEBUG,
  -    L2_LEVEL_TRACE,
  -    L2_LEVEL_INFO,
  -    L2_LEVEL_NOTICE,
  -    L2_LEVEL_WARNING,
  -    L2_LEVEL_ERROR,
  -    L2_LEVEL_CRITICAL,
  -    L2_LEVEL_PANIC
  +    L2_LEVEL_PANIC    = (1 << 0),
  +    L2_LEVEL_CRITICAL = (1 << 1),
  +    L2_LEVEL_ERROR    = (1 << 2),
  +    L2_LEVEL_WARNING  = (1 << 3),
  +    L2_LEVEL_NOTICE   = (1 << 4),
  +    L2_LEVEL_INFO     = (1 << 5),  
  +    L2_LEVEL_TRACE    = (1 << 6),
  +    L2_LEVEL_DEBUG    = (1 << 7)
   } l2_level_t;
   
  +/* all levels from highest (PANIC) to and including a particular low level */
  +#define L2_LEVEL_UPTO(level) \
  +    (((level)-1)|(level))
  +
   /* list of return values */
   typedef enum {
       L2_OK,
  @@ -154,14 +158,14 @@
   
   /* channel operations */
   l2_channel_t *l2_channel_create   (l2_handler_t *h);
  -int           l2_channel_configure(l2_channel_t *ch, const char *fmt, ...);
  -int           l2_channel_open     (l2_channel_t *ch);
  -int           l2_channel_write    (l2_channel_t *ch, const char *buf, size_t bufsize);
  -int           l2_channel_flush    (l2_channel_t *ch);
  -int           l2_channel_close    (l2_channel_t *ch);
  -int           l2_channel_destroy  (l2_channel_t *ch);
  -l2_channel_t *l2_channel_stack    (l2_channel_t *ch1, l2_channel_t *ch2);
  -int           l2_channel_setparams(l2_param_t p[], const char *fmt, va_list ap);
  +l2_result_t   l2_channel_configure(l2_channel_t *ch, const char *fmt, ...);
  +l2_result_t   l2_channel_open     (l2_channel_t *ch);
  +l2_result_t   l2_channel_write    (l2_channel_t *ch, const char *buf, size_t bufsize);
  +l2_result_t   l2_channel_flush    (l2_channel_t *ch);
  +l2_result_t   l2_channel_close    (l2_channel_t *ch);
  +l2_result_t   l2_channel_destroy  (l2_channel_t *ch);
  +l2_result_t   l2_channel_stack    (l2_channel_t *ch, l2_channel_t *chTop);
  +l2_result_t   l2_channel_setparams(l2_param_t p[], const char *fmt, va_list ap);
   
   /* stream operations */
   l2_stream_t  *l2_stream_create    (void);
  Index: ossp-pkg/l2/l2_channel.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 l2_channel.c
  --- ossp-pkg/l2/l2_channel.c	2001/09/03 11:50:25	1.9
  +++ ossp-pkg/l2/l2_channel.c	2001/09/03 13:43:33	1.10
  @@ -52,20 +52,20 @@
       return ch;
   }
   
  -l2_channel_t *l2_channel_stack(l2_channel_t *ch1, l2_channel_t *ch2)
  +l2_result_t l2_channel_stack(l2_channel_t *ch, l2_channel_t *chTop)
   {
  -    if (ch1 == NULL || ch2 == NULL)
  -        return NULL;
  -    if (   ch1->state != L2_CHSTATE_CREATED 
  -        || ch2->state != L2_CHSTATE_CREATED)
  -        return NULL;
  -    ch1->downstream = ch2;
  -    return ch1;
  +    if (ch == NULL || chTop == NULL)
  +        return L2_ERROR;
  +    if (   ch->state    != L2_CHSTATE_CREATED
  +        || chTop->state != L2_CHSTATE_CREATED)
  +        return L2_ERROR;
  +    chTop->downstream = ch;
  +    return L2_OK;
   }
   
  -int l2_channel_configure(l2_channel_t *ch, const char *fmt, ...)
  +l2_result_t l2_channel_configure(l2_channel_t *ch, const char *fmt, ...)
   {
  -    int rv;
  +    l2_result_t rv;
       va_list ap;
   
       if (ch == NULL || fmt == NULL)
  @@ -78,7 +78,7 @@
       return rv;
   }
   
  -int l2_channel_open(l2_channel_t *ch)
  +l2_result_t l2_channel_open(l2_channel_t *ch)
   {
       l2_result_t rv;
   
  @@ -96,7 +96,7 @@
       return rv;
   }
   
  -int l2_channel_write(l2_channel_t *ch, const char *buf, size_t bufsize)
  +l2_result_t l2_channel_write(l2_channel_t *ch, const char *buf, size_t bufsize)
   {
       l2_result_t rv;
   
  @@ -116,7 +116,7 @@
       return rv;
   }
   
  -int l2_channel_flush(l2_channel_t *ch)
  +l2_result_t l2_channel_flush(l2_channel_t *ch)
   {
       l2_result_t rv;
   
  @@ -132,7 +132,7 @@
       return rv;
   }
   
  -int l2_channel_close(l2_channel_t *ch)
  +l2_result_t l2_channel_close(l2_channel_t *ch)
   {
       l2_result_t rv;
   
  @@ -150,7 +150,7 @@
       return rv;
   }
   
  -int l2_channel_destroy(l2_channel_t *ch)
  +l2_result_t l2_channel_destroy(l2_channel_t *ch)
   {
       l2_result_t rv;
   
  @@ -169,7 +169,7 @@
       return rv;
   }
   
  -int l2_channel_setparams(l2_param_t pa[], const char *fmt, va_list ap)
  +l2_result_t l2_channel_setparams(l2_param_t pa[], const char *fmt, va_list ap)
   {
       const char *cpB, *cpE;
       const char *cpC, *cpG;
  Index: ossp-pkg/l2/l2_p.h
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 l2_p.h
  --- ossp-pkg/l2/l2_p.h	2001/09/03 12:16:44	1.8
  +++ ossp-pkg/l2/l2_p.h	2001/09/03 13:43:33	1.9
  @@ -49,17 +49,22 @@
       l2_handler_t  handler;
   };
   
  -typedef struct l2_format_st {
  +typedef struct {
  +    l2_channel_t *ch;
  +    unsigned int levelmask;
  +} l2_channel_entry_t;
  +
  +typedef struct {
  +    l2_formatter_t cb;
  +    void *ctx;
       char *name;
  -    void *context;
  -    l2_formatter_t callback;
  -} l2_format_t;
  +} l2_formatter_entry_t;
   
   struct l2_stream_st {
  -    unsigned int  levelmask;
  -    char          message[L2_MAX_MSGSIZE];
  -    l2_channel_t *channels[L2_MAX_CHANNELS];
  -    l2_format_t   formatters[L2_MAX_FORMATTERS];
  +    unsigned int          levelmask;
  +    char                  message[L2_MAX_MSGSIZE];
  +    l2_channel_entry_t    channels[L2_MAX_CHANNELS];
  +    l2_formatter_entry_t  formatters[L2_MAX_FORMATTERS];
   };
   
   /* variable argument handling taking care on argument passing conventions */
  Index: ossp-pkg/l2/l2_stream.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 l2_stream.c
  --- ossp-pkg/l2/l2_stream.c	2001/09/03 12:16:44	1.6
  +++ ossp-pkg/l2/l2_stream.c	2001/09/03 13:43:33	1.7
  @@ -40,9 +40,9 @@
           return NULL;
       st->levelmask = 0;
       for (i = 0; i < L2_MAX_CHANNELS; i++)
  -        st->channels[i] = NULL;
  +        st->channels[i].ch = NULL;
       for (i = 0; i < L2_MAX_FORMATTERS; i++)
  -        st->formatters[i].name = NULL;
  +        st->formatters[i].cb = NULL;
       return st;
   }
   
  @@ -50,13 +50,14 @@
   {
       int i;
   
  -    if (st == NULL || ch == NULL)
  +    if (st == NULL || ch == NULL || levelmask == 0)
           return L2_ERROR;
  -    for (i = 0; i < L2_MAX_CHANNELS && st->channels[i] != NULL; i++)
  +    for (i = 0; i < L2_MAX_CHANNELS && st->channels[i].ch != NULL; i++)
           ;
       if (i == L2_MAX_CHANNELS)
           return L2_ERROR;
  -    st->channels[i] = ch;
  +    st->channels[i].ch = ch;
  +    st->channels[i].levelmask = levelmask;
       return L2_OK;
   }
   
  @@ -66,13 +67,13 @@
   
       if (st == NULL || name == NULL || cb != NULL)
           return L2_ERROR;
  -    for (i = 0; i < L2_MAX_FORMATTERS && st->formatters[i].name != NULL; i++)
  +    for (i = 0; i < L2_MAX_FORMATTERS && st->formatters[i].cb != NULL; i++)
           ;
       if (i == L2_MAX_FORMATTERS)
           return L2_ERROR;
       st->formatters[i].name = strdup(name);
  -    st->formatters[i].context = ctx;
  -    st->formatters[i].callback = cb;
  +    st->formatters[i].ctx  = ctx;
  +    st->formatters[i].cb   = cb;
       return L2_OK;
   }
   
  @@ -86,36 +87,48 @@
       return L2_OK;
   }
   
  -l2_result_t l2_stream_log(l2_stream_t *st, unsigned int log_level, const char *fmt, ...)
  +l2_result_t l2_stream_log(l2_stream_t *st, unsigned int level, const char *fmt, ...)
   {
       va_list ap;
       l2_result_t rv;
   
  -    if (st == NULL || log_level == 0 || fmt == NULL)
  +    if (st == NULL || level == 0 || fmt == NULL)
           return L2_ERROR;
       va_start(ap, fmt);
  -    rv = l2_stream_vlog(st, log_level, fmt, ap);
  +    rv = l2_stream_vlog(st, level, fmt, ap);
       va_end(ap);
       return rv;
   }
   
  -l2_result_t l2_stream_vlog(l2_stream_t *st, unsigned int log_level, const char *fmt, va_list ap)
  +l2_result_t l2_stream_vlog(l2_stream_t *st, unsigned int level, const char *fmt, va_list ap)
   {
       int i;
  +    int l, j;
       size_t len;
       l2_result_t rv;
   
  -    if (st == NULL || log_level == 0 || fmt == NULL || ap == NULL)
  +    if (st == NULL || fmt == NULL || ap == NULL)
           return L2_ERROR;
   
  +    /* make sure only a single level is specified */
  +    for (l = level, j = 0; l != 0; l = (l >> 1))
  +        j++;
  +    if (j != 1)
  +        return L2_ERROR;
  +
  +    /* check whether level is globally enabled */
  +    if (!(st->levelmask & level))
  +        return L2_OK;
  +
       /* XXX use st->formatter!! XXX */
       len = vsnprintf(st->message, L2_MAX_MSGSIZE, fmt, ap);
   
       rv = L2_OK;
  -    for (i = 0; i < L2_MAX_CHANNELS && st->channels[i] != NULL; i++) {
  -        /* XXX write only if st->levelmask contains log_level */
  -        if ((rv = l2_channel_write(st->channels[i], st->message, len)) != L2_OK)
  -            break;
  +    for (i = 0; i < L2_MAX_CHANNELS && st->channels[i].ch != NULL; i++) {
  +        if (st->channels[i].levelmask & level) {
  +            if ((rv = l2_channel_write(st->channels[i].ch, st->message, len)) != L2_OK)
  +                break;
  +        }
       }
       return rv;
   }
  @@ -126,9 +139,9 @@
   
       if (st == NULL)
           return L2_ERROR;
  -    for (i = 0; i < L2_MAX_CHANNELS && st->channels[i] != NULL; i++)
  -        l2_channel_destroy(st->channels[i]);
  -    for (i = 0; i < L2_MAX_FORMATTERS && st->formatters[i].name != NULL; i++)
  +    for (i = 0; i < L2_MAX_CHANNELS && st->channels[i].ch != NULL; i++)
  +        l2_channel_destroy(st->channels[i].ch);
  +    for (i = 0; i < L2_MAX_FORMATTERS && st->formatters[i].cb != NULL; i++)
           free(st->formatters[i].name);
       free(st);
       return L2_OK;
  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/09/02 15:38:52	1.5
  +++ ossp-pkg/l2/l2_test.c	2001/09/03 13:43:33	1.6
  @@ -30,67 +30,61 @@
   #include <stdio.h>
   #include "l2.h"
   
  +static void die(char *fmt, ...)
  +{
  +    va_list ap;
  +
  +    va_start(ap, fmt);
  +    fprintf(stderr, "l2_test:ERROR: ");
  +    vfprintf(stderr, fmt, ap);
  +    fprintf(stderr, "\n");
  +    va_end(ap);
  +    exit(1);
  +}
  +
   int main(int argc, char *argv[])
  -    {
  -    l2_channel_t* log_channel_buf;
  -    l2_channel_t* log_channel_file;
  -    l2_stream_t*  log_stream;
  -
  -    /* Create the channel. */
  -
  -    setbuf(stdout, 0);
  -    printf("Creating channel ... ");
  -    log_channel_buf = l2_channel_create(&l2_handler_buffer);
  -    log_channel_file = l2_channel_create(&l2_handler_file);
  -    if ((log_channel_buf == 0) || (log_channel_file == 0))
  -	{
  -	fprintf(stderr, "Can't create my log channels!\n");
  -	return 1;
  -	}
  -    printf("done\n");
  -
  -    l2_channel_configure(log_channel_buf, "size", 100);
  -    l2_channel_configure(log_channel_file, "path", "myfilelog", "append",\
  -        TRUE, "perm", 0x644);
  -
  -    l2_channel_open(log_channel_buf);
  -    l2_channel_open(log_channel_file);
  -
  -    /* Create the stream and attach the channel to it. */
  -
  -    printf("Creating stream ... ");
  -    log_stream = l2_stream_create();
  -    if (log_stream == 0)
  -	{
  -	fprintf(stderr, "Can't create my log stream!\n");
  -	return 1;
  -	}
  -    printf("done\n");
  -    printf("Attaching channel to stream ... ");
  -    if (!l2_stream_channel(log_stream, log_channel_buf, -1))
  -	{
  -	fprintf(stderr, "Can't attach buffer channel to log stream!\n");
  -	return 1;
  -	}
  -    if (!l2_stream_channel(log_stream, log_channel_file, -1))
  -	{
  -	fprintf(stderr, "Can't attach file channel to log stream!\n");
  -	return 1;
  -	}
  -    printf("done\n");
  -
  -    /* Log an example message. */
  -
  -    printf("Writing log message ... ");
  -    l2_stream_log(log_stream, -1, "%cstream = 0x%lx, channel = 0x%lx%c\n", '"',\
  -        log_stream, log_channel_buf, '"');
  -    printf("done\n");
  -
  -    /* Clean up. */
  -
  -    printf("Destroying stream ... ");
  -    l2_stream_destroy(log_stream);
  -    printf("done\n");
  +{
  +    l2_channel_t *chBuf;
  +    l2_channel_t *chFile;
  +    l2_stream_t *st;
  +
  +    /*
  +     * Typical steps to use a buffered file logging stream
  +     */
  +
  +    if ((chBuf  = l2_channel_create(&l2_handler_buffer)) == NULL)
  +        die("failed to create buffer channel");
  +
  +    if ((chFile = l2_channel_create(&l2_handler_file)) == NULL)
  +        die("failed to create file channel");
  +
  +    if (l2_channel_configure(chBuf, "size", 100) != L2_OK)
  +        die("failed to configure buffer channel");
  +
  +    if (l2_channel_configure(chFile, "path,append,perm", "l2_test.log", TRUE, 0644) != L2_OK)
  +        die("failed to configure file channel");
  +
  +    if (l2_channel_stack(chFile, chBuf) != L2_OK)
  +        die("failed to stack buffer channel on top of file channel");
   
  +    if (l2_channel_open(chBuf) != L2_OK)
  +        die("failed to open buffer channel");
  +
  +    if ((st = l2_stream_create()) == NULL)
  +        die("failed to create stream");
  +
  +    if (l2_stream_channel(st, chBuf, L2_LEVEL_UPTO(L2_LEVEL_WARNING)) != L2_OK)
  +        die("failed to attach channel into stream");
  +
  +    if (l2_stream_levels(st, L2_LEVEL_UPTO(L2_LEVEL_WARNING), NULL) != L2_OK)
  +        die("failed to set global logging level");
  +    
  +    if (l2_stream_log(st, L2_LEVEL_PANIC, "test %s", "foo") != L2_OK)
  +        die("failed to log message to stream");
  +
  +    if (l2_stream_destroy(st) != L2_OK)
  +        die("failed to destroy stream");
  +
       return 0;
  -    }
  +}
  +

From ossp-cvs-owner@ossp.org  Tue Sep  4 03:03:57 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f83CGjX12096; Mon, 3 Sep 2001 14:16:45 +0200 (CEST)
Date: Mon, 3 Sep 2001 14:16:45 +0200 (CEST)
Message-Id: <200109031216.f83CGjX12096@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO l2-config.1 l2.h l2_p.h l2_stream.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   03-Sep-2001 14:16:45
  Branch: HEAD                             Handle: 2001090313164400

  Modified files:
    ossp-pkg/l2             TODO l2-config.1 l2.h l2_p.h l2_stream.c

  Log:
    revamped L2 stream API

  Summary:
    Revision    Changes     Path
    1.13        +2  -0      ossp-pkg/l2/TODO
    1.3         +236 -158   ossp-pkg/l2/l2-config.1
    1.11        +6  -6      ossp-pkg/l2/l2.h
    1.8         +1  -1      ossp-pkg/l2/l2_p.h
    1.6         +68 -29     ossp-pkg/l2/l2_stream.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 TODO
  --- ossp-pkg/l2/TODO	2001/09/02 15:32:21	1.12
  +++ ossp-pkg/l2/TODO	2001/09/03 12:16:44	1.13
  @@ -2,6 +2,8 @@
   OSSP L2
   =======
   
  +Improvement: return L2_ERR_XXX instead of just a single L2_ERROR
  +
   Idea:
   l2_handler_t:
      - function pointers
  Index: ossp-pkg/l2/l2-config.1
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2-config.1
  --- ossp-pkg/l2/l2-config.1	2001/05/11 19:50:52	1.2
  +++ ossp-pkg/l2/l2-config.1	2001/09/03 12:16:44	1.3
  @@ -1,9 +1,12 @@
  -.\" Automatically generated by Pod::Man version 1.02
  -.\" Fri May 11 21:45:25 2001
  -.\"
  -.\" Standard preamble:
  -.\" ======================================================================
  -.de Sh \" Subsection heading
  +.rn '' }`
  +''' $RCSfile: l2-config.1,v $$Revision: 1.3 $$Date: 2001/09/03 12:16:44 $
  +'''
  +''' $Log: l2-config.1,v $
  +''' Revision 1.3  2001/09/03 12:16:44  rse
  +''' revamped L2 stream API
  +'''
  +'''
  +.de Sh
   .br
   .if t .Sp
   .ne 5
  @@ -11,106 +14,150 @@
   \fB\\$1\fR
   .PP
   ..
  -.de Sp \" Vertical space (when we can't use .PP)
  +.de Sp
   .if t .sp .5v
   .if n .sp
   ..
  -.de Ip \" List item
  +.de Ip
   .br
   .ie \\n(.$>=3 .ne \\$3
   .el .ne 3
   .IP "\\$1" \\$2
   ..
  -.de Vb \" Begin verbatim text
  +.de Vb
   .ft CW
   .nf
   .ne \\$1
   ..
  -.de Ve \" End verbatim text
  +.de Ve
   .ft R
   
   .fi
   ..
  -.\" Set up some character translations and predefined strings.  \*(-- will
  -.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
  -.\" double quote, and \*(R" will give a right double quote.  | will give a
  -.\" real vertical bar.  \*(C+ will give a nicer C++.  Capital omega is used
  -.\" to do unbreakable dashes and therefore won't be available.  \*(C` and
  -.\" \*(C' expand to `' in nroff, nothing in troff, for use with C<>
  +'''
  +'''
  +'''     Set up \*(-- to give an unbreakable dash;
  +'''     string Tr holds user defined translation string.
  +'''     Bell System Logo is used as a dummy character.
  +'''
   .tr \(*W-|\(bv\*(Tr
  -.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
   .ie n \{\
  -.    ds -- \(*W-
  -.    ds PI pi
  -.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
  -.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
  -.    ds L" ""
  -.    ds R" ""
  -.    ds C` `
  -.    ds C' '
  +.ds -- \(*W-
  +.ds PI pi
  +.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
  +.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
  +.ds L" ""
  +.ds R" ""
  +'''   \*(M", \*(S", \*(N" and \*(T" are the equivalent of
  +'''   \*(L" and \*(R", except that they are used on ".xx" lines,
  +'''   such as .IP and .SH, which do another additional levels of
  +'''   double-quote interpretation
  +.ds M" """
  +.ds S" """
  +.ds N" """""
  +.ds T" """""
  +.ds L' '
  +.ds R' '
  +.ds M' '
  +.ds S' '
  +.ds N' '
  +.ds T' '
   'br\}
   .el\{\
  -.    ds -- \|\(em\|
  -.    ds PI \(*p
  -.    ds L" ``
  -.    ds R" ''
  +.ds -- \(em\|
  +.tr \*(Tr
  +.ds L" ``
  +.ds R" ''
  +.ds M" ``
  +.ds S" ''
  +.ds N" ``
  +.ds T" ''
  +.ds L' `
  +.ds R' '
  +.ds M' `
  +.ds S' '
  +.ds N' `
  +.ds T' '
  +.ds PI \(*p
   'br\}
  -.\"
  -.\" If the F register is turned on, we'll generate index entries on stderr
  -.\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and
  -.\" index entries marked with X<> in POD.  Of course, you'll have to process
  -.\" the output yourself in some meaningful fashion.
  -.if \nF \{\
  -.    de IX
  -.    tm Index:\\$1\t\\n%\t"\\$2"
  -.    .
  -.    nr % 0
  -.    rr F
  -.\}
  -.\"
  -.\" For nroff, turn off justification.  Always turn off hyphenation; it
  -.\" makes way too many mistakes in technical documents.
  -.hy 0
  +.\"	If the F register is turned on, we'll generate
  +.\"	index entries out stderr for the following things:
  +.\"		TH	Title 
  +.\"		SH	Header
  +.\"		Sh	Subsection 
  +.\"		Ip	Item
  +.\"		X<>	Xref  (embedded
  +.\"	Of course, you have to process the output yourself
  +.\"	in some meaninful fashion.
  +.if \nF \{
  +.de IX
  +.tm Index:\\$1\t\\n%\t"\\$2"
  +..
  +.nr % 0
  +.rr F
  +.\}
  +.TH L2-CONFIG 1 "08-May-2001" "L2 0.1.0" "Logging Library"
  +.UC
  +.if n .hy 0
   .if n .na
  -.\"
  -.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
  -.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
  +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
  +.de CQ          \" put $1 in typewriter font
  +.ft CW
  +'if n "\c
  +'if t \\&\\$1\c
  +'if n \\&\\$1\c
  +'if n \&"
  +\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
  +'.ft R
  +..
  +.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
  +.	\" AM - accent mark definitions
   .bd B 3
  -.    \" fudge factors for nroff and troff
  +.	\" fudge factors for nroff and troff
   .if n \{\
  -.    ds #H 0
  -.    ds #V .8m
  -.    ds #F .3m
  -.    ds #[ \f1
  -.    ds #] \fP
  +.	ds #H 0
  +.	ds #V .8m
  +.	ds #F .3m
  +.	ds #[ \f1
  +.	ds #] \fP
   .\}
   .if t \{\
  -.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
  -.    ds #V .6m
  -.    ds #F 0
  -.    ds #[ \&
  -.    ds #] \&
  +.	ds #H ((1u-(\\\\n(.fu%2u))*.13m)
  +.	ds #V .6m
  +.	ds #F 0
  +.	ds #[ \&
  +.	ds #] \&
   .\}
  -.    \" simple accents for nroff and troff
  +.	\" simple accents for nroff and troff
   .if n \{\
  -.    ds ' \&
  -.    ds ` \&
  -.    ds ^ \&
  -.    ds , \&
  -.    ds ~ ~
  -.    ds /
  +.	ds ' \&
  +.	ds ` \&
  +.	ds ^ \&
  +.	ds , \&
  +.	ds ~ ~
  +.	ds ? ?
  +.	ds ! !
  +.	ds /
  +.	ds q
   .\}
   .if t \{\
  -.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
  -.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
  -.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
  -.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
  -.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
  -.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
  +.	ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
  +.	ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
  +.	ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
  +.	ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
  +.	ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
  +.	ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
  +.	ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
  +.	ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
  +.	ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
   .\}
  -.    \" troff and (daisy-wheel) nroff accents
  +.	\" troff and (daisy-wheel) nroff accents
   .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
   .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
  +.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
  +.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
  +.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
  +.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
   .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
   .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
   .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
  @@ -118,116 +165,100 @@
   .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
   .ds ae a\h'-(\w'a'u*4/10)'e
   .ds Ae A\h'-(\w'A'u*4/10)'E
  -.    \" corrections for vroff
  +.ds oe o\h'-(\w'o'u*4/10)'e
  +.ds Oe O\h'-(\w'O'u*4/10)'E
  +.	\" corrections for vroff
   .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
   .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
  -.    \" for low resolution devices (crt and lpr)
  +.	\" for low resolution devices (crt and lpr)
   .if \n(.H>23 .if \n(.V>19 \
   \{\
  -.    ds : e
  -.    ds 8 ss
  -.    ds o a
  -.    ds d- d\h'-1'\(ga
  -.    ds D- D\h'-1'\(hy
  -.    ds th \o'bp'
  -.    ds Th \o'LP'
  -.    ds ae ae
  -.    ds Ae AE
  +.	ds : e
  +.	ds 8 ss
  +.	ds v \h'-1'\o'\(aa\(ga'
  +.	ds _ \h'-1'^
  +.	ds . \h'-1'.
  +.	ds 3 3
  +.	ds o a
  +.	ds d- d\h'-1'\(ga
  +.	ds D- D\h'-1'\(hy
  +.	ds th \o'bp'
  +.	ds Th \o'LP'
  +.	ds ae ae
  +.	ds Ae AE
  +.	ds oe oe
  +.	ds Oe OE
   .\}
   .rm #[ #] #H #V #F C
  -.\" ======================================================================
  -.\"
  -.IX Title "L2-CONFIG 1"
  -.TH L2-CONFIG 1 "08-May-2001" "L2 0.1.0" "Logging Library"
  -.UC
   .SH "NAME"
  -\&\fBl2\-config\fR \- L2 library build utility
  +\fBl2-config\fR \- L2 library build utility
   .SH "VERSION"
  -.IX Header "VERSION"
  -\&\s-1OSSP\s0 L2 0.1.0 (08-May-2001)
  +OSSP L2 0.1.0 (08-May-2001)
   .SH "SYNOPSIS"
  -.IX Header "SYNOPSIS"
  -\&\fBl2\-config\fR
  -[\fB\*(--help\fR]
  -[\fB\*(--version\fR]
  -[\fB\*(--all\fR]
  -[\fB\*(--prefix\fR]
  -[\fB\*(--exec-prefix\fR]
  -[\fB\*(--bindir\fR]
  -[\fB\*(--libdir\fR]
  -[\fB\*(--includedir\fR]
  -[\fB\*(--mandir\fR]
  -[\fB\*(--datadir\fR]
  -[\fB\*(--acdir\fR]
  -[\fB\*(--cflags\fR]
  -[\fB\*(--ldflags\fR]
  -[\fB\*(--libs\fR]
  -[\fB\*(--libs++\fR]
  +\fBl2-config\fR
  +[\fB--help\fR]
  +[\fB--version\fR]
  +[\fB--all\fR]
  +[\fB--prefix\fR]
  +[\fB--exec-prefix\fR]
  +[\fB--bindir\fR]
  +[\fB--libdir\fR]
  +[\fB--includedir\fR]
  +[\fB--mandir\fR]
  +[\fB--datadir\fR]
  +[\fB--acdir\fR]
  +[\fB--cflags\fR]
  +[\fB--ldflags\fR]
  +[\fB--libs\fR]
  +[\fB--libs++\fR]
   .SH "DESCRIPTION"
  -.IX Header "DESCRIPTION"
  -The \fBl2\-config\fR program is a little helper utility for easy configuring and
  +The \fBl2-config\fR program is a little helper utility for easy configuring and
   building applications based on the \fIl2\fR\|(3) library.  It can be used to query the
   C compiler and linker flags which are required to correctly compile and link
   the application against the \fIl2\fR\|(3) library.
   .SH "OPTIONS"
  -.IX Header "OPTIONS"
  -\&\fBl2\-config\fR accepts the following options:
  -.Ip "\fB\*(--help\fR" 4
  -.IX Item "help"
  +\fBl2-config\fR accepts the following options:
  +.Ip "\fB--help\fR" 4
   Prints the short usage information.
  -.Ip "\fB\*(--version\fR" 4
  -.IX Item "version"
  +.Ip "\fB--version\fR" 4
   Prints the version number and date of the installed \fIl2\fR\|(3) library.
  -.Ip "\fB\*(--all\fR" 4
  -.IX Item "all"
  +.Ip "\fB--all\fR" 4
   Forces the output of all flags, that is, including extra flags which are not
  -\&\fBL2\fR specific.
  -.Ip "\fB\*(--prefix\fR" 4
  -.IX Item "prefix"
  +\fBL2\fR specific.
  +.Ip "\fB--prefix\fR" 4
   Prints the installation prefix of architecture independent files
  -.Ip "\fB\*(--exec-prefix\fR" 4
  -.IX Item "exec-prefix"
  +.Ip "\fB--exec-prefix\fR" 4
   Prints the installation prefix of architecture dependent files.
  -.Ip "\fB\*(--bindir\fR" 4
  -.IX Item "bindir"
  +.Ip "\fB--bindir\fR" 4
   Prints the installation directory of binaries.
  -.Ip "\fB\*(--libdir\fR" 4
  -.IX Item "libdir"
  +.Ip "\fB--libdir\fR" 4
   Prints the installation directory of libraries.
  -.Ip "\fB\*(--includedir\fR" 4
  -.IX Item "includedir"
  +.Ip "\fB--includedir\fR" 4
   Prints the installation directory of include headers.
  -.Ip "\fB\*(--mandir\fR" 4
  -.IX Item "mandir"
  +.Ip "\fB--mandir\fR" 4
   Prints the installation directory of manual pages.
  -.Ip "\fB\*(--datadir\fR" 4
  -.IX Item "datadir"
  +.Ip "\fB--datadir\fR" 4
   Prints the installation directory of shared data.
  -.Ip "\fB\*(--acdir\fR" 4
  -.IX Item "acdir"
  +.Ip "\fB--acdir\fR" 4
   Prints the installation directory of \fBautoconf\fR data.
  -.Ip "\fB\*(--cflags\fR" 4
  -.IX Item "cflags"
  +.Ip "\fB--cflags\fR" 4
   Prints the C compiler flags which are needed to compile the \fIl2\fR\|(3)\-based
  -application. The output is usually added to the \f(CW\*(C`CFLAGS\*(C'\fR variable of the
  -applications \f(CW\*(C`Makefile\*(C'\fR.
  -.Ip "\fB\*(--ldflags\fR" 4
  -.IX Item "ldflags"
  -Prints the linker flags (\f(CW\*(C`\-L\*(C'\fR) which are needed to link the application with
  -the \fIl2\fR\|(3) library. The output is usually added to the \f(CW\*(C`LDFLAGS\*(C'\fR variable of
  -the applications \f(CW\*(C`Makefile\*(C'\fR.
  -.Ip "\fB\*(--libs\fR" 4
  -.IX Item "libs"
  -Prints the library flags (\f(CW\*(C`\-l\*(C'\fR) which are needed to link the application with
  -the C \fIl2\fR\|(3) library. The output is usually added to the \f(CW\*(C`LIBS\*(C'\fR variable of the
  -applications \f(CW\*(C`Makefile\*(C'\fR.
  -.Ip "\fB\*(--libs++\fR" 4
  -.IX Item "libs++"
  -Prints the library flags (\f(CW\*(C`\-l\*(C'\fR) which are needed to link the
  +application. The output is usually added to the \f(CWCFLAGS\fR variable of the
  +applications \f(CWMakefile\fR.
  +.Ip "\fB--ldflags\fR" 4
  +Prints the linker flags (\f(CW-L\fR) which are needed to link the application with
  +the \fIl2\fR\|(3) library. The output is usually added to the \f(CWLDFLAGS\fR variable of
  +the applications \f(CWMakefile\fR.
  +.Ip "\fB--libs\fR" 4
  +Prints the library flags (\f(CW-l\fR) which are needed to link the application with
  +the C \fIl2\fR\|(3) library. The output is usually added to the \f(CWLIBS\fR variable of the
  +applications \f(CWMakefile\fR.
  +.Ip "\fB--libs++\fR" 4
  +Prints the library flags (\f(CW-l\fR) which are needed to link the
   application with the \*(C+ \fIl2\fR\|(3) library. The output is usually added to
  -the \f(CW\*(C`LIBS\*(C'\fR variable of the applications \f(CW\*(C`Makefile\*(C'\fR.
  +the \f(CWLIBS\fR variable of the applications \f(CWMakefile\fR.
   .SH "EXAMPLE"
  -.IX Header "EXAMPLE"
  +.PP
   .Vb 4
   \& CC      = cc
   \& CFLAGS  = -O `l2-config --cflags`
  @@ -242,12 +273,62 @@
   \&     $(CC) $(CFLAGS) -c foo.c
   .Ve
   .SH "SEE ALSO"
  -.IX Header "SEE ALSO"
  -\&\fIl2\fR\|(3), \fIcc\fR\|(1).
  +\fIl2\fR\|(3), \fIcc\fR\|(1).
   .SH "AUTHOR"
  -.IX Header "AUTHOR"
  +.PP
   .Vb 3
   \& Ralf S. Engelschall
   \& rse@engelschall.com
   \& www.engelschall.com
   .Ve
  +
  +.rn }` ''
  +.IX Title "L2-CONFIG 1"
  +.IX Name "B<l2-config> - L2 library build utility"
  +
  +.IX Header "NAME"
  +
  +.IX Header "VERSION"
  +
  +.IX Header "SYNOPSIS"
  +
  +.IX Header "DESCRIPTION"
  +
  +.IX Header "OPTIONS"
  +
  +.IX Item "\fB--help\fR"
  +
  +.IX Item "\fB--version\fR"
  +
  +.IX Item "\fB--all\fR"
  +
  +.IX Item "\fB--prefix\fR"
  +
  +.IX Item "\fB--exec-prefix\fR"
  +
  +.IX Item "\fB--bindir\fR"
  +
  +.IX Item "\fB--libdir\fR"
  +
  +.IX Item "\fB--includedir\fR"
  +
  +.IX Item "\fB--mandir\fR"
  +
  +.IX Item "\fB--datadir\fR"
  +
  +.IX Item "\fB--acdir\fR"
  +
  +.IX Item "\fB--cflags\fR"
  +
  +.IX Item "\fB--ldflags\fR"
  +
  +.IX Item "\fB--libs\fR"
  +
  +.IX Item "\fB--libs++\fR"
  +
  +.IX Header "EXAMPLE"
  +
  +.IX Header "SEE ALSO"
  +
  +.IX Header "AUTHOR"
  +
  Index: ossp-pkg/l2/l2.h
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 l2.h
  --- ossp-pkg/l2/l2.h	2001/09/02 13:18:36	1.10
  +++ ossp-pkg/l2/l2.h	2001/09/03 12:16:44	1.11
  @@ -165,12 +165,12 @@
   
   /* stream operations */
   l2_stream_t  *l2_stream_create    (void);
  -l2_stream_t  *l2_stream_channel   (l2_stream_t *st, l2_channel_t *ch, unsigned int levelmask);
  -l2_stream_t  *l2_stream_formatter (l2_stream_t *st, l2_formatter_t *cb, l2_context_t *ctx);
  -unsigned int  l2_stream_levels    (l2_stream_t *st, unsigned int levelmask);
  -void          l2_stream_log       (l2_stream_t *st, unsigned int log_level, const char *fmt, ...);
  -void          l2_stream_vlog      (l2_stream_t *st, unsigned int log_level, const char *fmt, va_list ap);
  -void          l2_stream_destroy   (l2_stream_t *st);
  +l2_result_t   l2_stream_channel   (l2_stream_t *st, l2_channel_t *ch, unsigned int levelmask);
  +l2_result_t   l2_stream_formatter (l2_stream_t *st, const char *name, l2_formatter_t cb, l2_context_t *ctx);
  +l2_result_t   l2_stream_levels    (l2_stream_t *st, unsigned int levelmask, unsigned int *levelmaskold);
  +l2_result_t   l2_stream_log       (l2_stream_t *st, unsigned int log_level, const char *fmt, ...);
  +l2_result_t   l2_stream_vlog      (l2_stream_t *st, unsigned int log_level, const char *fmt, va_list ap);
  +l2_result_t   l2_stream_destroy   (l2_stream_t *st);
   
   #endif /* __L2_H__ */
   
  Index: ossp-pkg/l2/l2_p.h
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 l2_p.h
  --- ossp-pkg/l2/l2_p.h	2001/09/02 13:18:36	1.7
  +++ ossp-pkg/l2/l2_p.h	2001/09/03 12:16:44	1.8
  @@ -59,7 +59,7 @@
       unsigned int  levelmask;
       char          message[L2_MAX_MSGSIZE];
       l2_channel_t *channels[L2_MAX_CHANNELS];
  -    l2_format_t  *formatters[L2_MAX_FORMATTERS];
  +    l2_format_t   formatters[L2_MAX_FORMATTERS];
   };
   
   /* variable argument handling taking care on argument passing conventions */
  Index: ossp-pkg/l2/l2_stream.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 l2_stream.c
  --- ossp-pkg/l2/l2_stream.c	2001/08/15 10:36:03	1.5
  +++ ossp-pkg/l2/l2_stream.c	2001/09/03 12:16:44	1.6
  @@ -34,64 +34,103 @@
   l2_stream_t *l2_stream_create(void)
   {
       l2_stream_t *st;
  +    int i;
       
       if ((st = (l2_stream_t *)malloc(sizeof(l2_stream_t))) == NULL)
           return NULL;
  -    memset(st, 0, sizeof(l2_stream_t));
  +    st->levelmask = 0;
  +    for (i = 0; i < L2_MAX_CHANNELS; i++)
  +        st->channels[i] = NULL;
  +    for (i = 0; i < L2_MAX_FORMATTERS; i++)
  +        st->formatters[i].name = NULL;
       return st;
   }
   
  -l2_stream_t *l2_stream_channel(l2_stream_t *st, l2_channel_t *ch, unsigned int levelmask)
  +l2_result_t l2_stream_channel(l2_stream_t *st, l2_channel_t *ch, unsigned int levelmask)
   {
  -    size_t i;
  +    int i;
   
  -    for (i = 0; i <= L2_MAX_CHANNELS && st->channels[i] != NULL; i++)
  +    if (st == NULL || ch == NULL)
  +        return L2_ERROR;
  +    for (i = 0; i < L2_MAX_CHANNELS && st->channels[i] != NULL; i++)
           ;
       if (i == L2_MAX_CHANNELS)
  -        return NULL;
  +        return L2_ERROR;
       st->channels[i] = ch;
  -    return st;
  +    return L2_OK;
   }
   
  -l2_stream_t *l2_stream_formatter(l2_stream_t *st, l2_formatter_t *cb, l2_context_t *ctx)
  +l2_result_t l2_stream_formatter(l2_stream_t *st, const char *name, l2_formatter_t cb, l2_context_t *ctx)
   {
  -    return NULL;
  +    int i;
  +
  +    if (st == NULL || name == NULL || cb != NULL)
  +        return L2_ERROR;
  +    for (i = 0; i < L2_MAX_FORMATTERS && st->formatters[i].name != NULL; i++)
  +        ;
  +    if (i == L2_MAX_FORMATTERS)
  +        return L2_ERROR;
  +    st->formatters[i].name = strdup(name);
  +    st->formatters[i].context = ctx;
  +    st->formatters[i].callback = cb;
  +    return L2_OK;
   }
   
  -unsigned int l2_stream_levels(l2_stream_t *st, unsigned int levelmask)
  +l2_result_t l2_stream_levels(l2_stream_t *st, unsigned int levelmask, unsigned int *levelmaskold)
   {
  -    return 0;
  +    if (st == NULL)
  +        return L2_ERROR;
  +    if (levelmaskold != NULL)
  +        *levelmaskold = st->levelmask;
  +    st->levelmask = levelmask;
  +    return L2_OK;
   }
   
  -void l2_stream_log(l2_stream_t *st, unsigned int log_level, const char *fmt, ...)
  +l2_result_t l2_stream_log(l2_stream_t *st, unsigned int log_level, const char *fmt, ...)
   {
       va_list ap;
  +    l2_result_t rv;
  +
  +    if (st == NULL || log_level == 0 || fmt == NULL)
  +        return L2_ERROR;
       va_start(ap, fmt);
  -    l2_stream_vlog(st, log_level, fmt, ap);
  +    rv = l2_stream_vlog(st, log_level, fmt, ap);
       va_end(ap);
  -    return;
  +    return rv;
   }
   
  -void l2_stream_vlog(l2_stream_t *st, unsigned int log_level, const char *fmt, va_list ap)
  +l2_result_t l2_stream_vlog(l2_stream_t *st, unsigned int log_level, const char *fmt, va_list ap)
   {
  -    size_t i, len;
  +    int i;
  +    size_t len;
  +    l2_result_t rv;
   
  -    len = vsnprintf(st->message, L2_MAX_MSGSIZE, fmt, ap);
  -    for (i = 0; i <= L2_MAX_CHANNELS && st->channels[i] != NULL; i++)
  -        st->channels[i]->handler.write(&st->channels[i]->context,
  -                                       st->channels[i]->downstream,
  -                                       st->message, len);
  -    return;
  -}
  +    if (st == NULL || log_level == 0 || fmt == NULL || ap == NULL)
  +        return L2_ERROR;
   
  -void l2_stream_destroy(l2_stream_t *st)
  -{
  -    size_t i;
  +    /* XXX use st->formatter!! XXX */
  +    len = vsnprintf(st->message, L2_MAX_MSGSIZE, fmt, ap);
   
  -    for (i = 0; i <= L2_MAX_CHANNELS && st->channels[i] != NULL; i++)
  +    rv = L2_OK;
  +    for (i = 0; i < L2_MAX_CHANNELS && st->channels[i] != NULL; i++) {
  +        /* XXX write only if st->levelmask contains log_level */
  +        if ((rv = l2_channel_write(st->channels[i], st->message, len)) != L2_OK)
  +            break;
  +    }
  +    return rv;
  +}
  +
  +l2_result_t l2_stream_destroy(l2_stream_t *st)
  +{
  +    int i;
  +
  +    if (st == NULL)
  +        return L2_ERROR;
  +    for (i = 0; i < L2_MAX_CHANNELS && st->channels[i] != NULL; i++)
           l2_channel_destroy(st->channels[i]);
  -    for (i = 0; i <= L2_MAX_FORMATTERS && st->formatters[i] != NULL; i++)
  -        free(st->formatters[i]);
  -    return;
  +    for (i = 0; i < L2_MAX_FORMATTERS && st->formatters[i].name != NULL; i++)
  +        free(st->formatters[i].name);
  +    free(st);
  +    return L2_OK;
   }
   

From ossp-cvs-owner@ossp.org  Tue Sep  4 17:52:31 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f84BWL490873; Tue, 4 Sep 2001 13:32:21 +0200 (CEST)
Date: Tue, 4 Sep 2001 13:32:21 +0200 (CEST)
Message-Id: <200109041132.f84BWL490873@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_config.h.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   04-Sep-2001 13:32:21
  Branch: HEAD                             Handle: 1970010101000000

  Removed files:
    ossp-pkg/l2             l2_config.h.in

  Log:
    Removed file which is generated by autoheader during autogen.sh execution.

  Summary:
    Revision    Changes     Path
    NONE        +0  -4      ossp-pkg/l2/l2_config.h.in
  ____________________________________________________________________________

  

From ossp-cvs-owner@ossp.org  Tue Sep  4 17:52:31 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f84DliN98592; Tue, 4 Sep 2001 15:47:44 +0200 (CEST)
Date: Tue, 4 Sep 2001 15:47:44 +0200 (CEST)
Message-Id: <200109041347.f84DliN98592@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 .cvsignore
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-Sep-2001 15:47:44
  Branch: HEAD                             Handle: 2001090414474400

  Modified files:
    ossp-pkg/l2             .cvsignore

  Log:
    fix ignore list

  Summary:
    Revision    Changes     Path
    1.4         +2  -0      ossp-pkg/l2/.cvsignore
  ____________________________________________________________________________

  Index: ossp-pkg/l2/.cvsignore
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 .cvsignore
  --- ossp-pkg/l2/.cvsignore	2001/09/04 13:12:08	1.3
  +++ ossp-pkg/l2/.cvsignore	2001/09/04 13:47:44	1.4
  @@ -3,7 +3,9 @@
   config.cache
   Makefile
   l2_config.h
  +l2_config.h.in
   l2-config
  +l2_test.log
   l2_test
   l2_test++
   config.guess

From ossp-cvs-owner@ossp.org  Tue Sep  4 17:52:32 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f84DC9x96429; Tue, 4 Sep 2001 15:12:09 +0200 (CEST)
Date: Tue, 4 Sep 2001 15:12:09 +0200 (CEST)
Message-Id: <200109041312.f84DC9x96429@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 .cvsignore
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-Sep-2001 15:12:09
  Branch: HEAD                             Handle: 2001090414120800

  Modified files:
    ossp-pkg/l2             .cvsignore

  Log:
    ignore generated files

  Summary:
    Revision    Changes     Path
    1.3         +8  -0      ossp-pkg/l2/.cvsignore
  ____________________________________________________________________________

  Index: ossp-pkg/l2/.cvsignore
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 .cvsignore
  --- ossp-pkg/l2/.cvsignore	2001/05/11 19:50:52	1.2
  +++ ossp-pkg/l2/.cvsignore	2001/09/04 13:12:08	1.3
  @@ -6,3 +6,11 @@
   l2-config
   l2_test
   l2_test++
  +config.guess
  +config.sub
  +ltmain.sh
  +libtool.m4
  +configure
  +shtool
  +l2-config.1
  +l2.3

From ossp-cvs-owner@ossp.org  Tue Sep  4 17:52:32 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f849Cx082438; Tue, 4 Sep 2001 11:12:59 +0200 (CEST)
Date: Tue, 4 Sep 2001 11:12:59 +0200 (CEST)
Message-Id: <200109040912.f849Cx082438@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 AUTHORS
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-Sep-2001 11:12:59
  Branch: HEAD                             Handle: 2001090410125800

  Modified files:
    ossp-pkg/l2             AUTHORS

  Log:
    do not forget Michael

  Summary:
    Revision    Changes     Path
    1.2         +1  -0      ossp-pkg/l2/AUTHORS
  ____________________________________________________________________________

  Index: ossp-pkg/l2/AUTHORS
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 AUTHORS
  --- ossp-pkg/l2/AUTHORS	2001/05/10 19:46:01	1.1.1.1
  +++ ossp-pkg/l2/AUTHORS	2001/09/04 09:12:58	1.2
  @@ -6,5 +6,6 @@
     or edited major parts of the OSSP L2 sources.
   
     Ralf S. Engelschall   <rse@engelschall.com>
  +  Michael Schloh        <michael.schloh@cw.com>
     Peter Simons          <simons@cryp.to>
   

From ossp-cvs-owner@ossp.org  Tue Sep  4 17:52:32 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f84Drp798775; Tue, 4 Sep 2001 15:53:51 +0200 (CEST)
Date: Tue, 4 Sep 2001 15:53:51 +0200 (CEST)
Message-Id: <200109041353.f84Drp798775@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 Makefile.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-Sep-2001 15:53:51
  Branch: HEAD                             Handle: 2001090414535000

  Modified files:
    ossp-pkg/l2             Makefile.in

  Log:
    remove test logfile from 'make check'

  Summary:
    Revision    Changes     Path
    1.12        +1  -0      ossp-pkg/l2/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 Makefile.in
  --- ossp-pkg/l2/Makefile.in	2001/09/04 13:52:59	1.11
  +++ ossp-pkg/l2/Makefile.in	2001/09/04 13:53:50	1.12
  @@ -208,6 +208,7 @@
   	$(RM) config.log config.cache config.status
   	$(RM) libtool
   	$(RM) Makefile
  +	$(RM) l2_test.log
   
   #   remove everything which can be regenerated
   #   by "autoconf && autoheader && ./configure && make all"

From ossp-cvs-owner@ossp.org  Tue Sep  4 17:52:33 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f849Fik82763; Tue, 4 Sep 2001 11:15:44 +0200 (CEST)
Date: Tue, 4 Sep 2001 11:15:44 +0200 (CEST)
Message-Id: <200109040915.f849Fik82763@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 config.guess config.sub configure l2++.3 l2-co...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-Sep-2001 11:15:44
  Branch: HEAD                             Handle: 1970010101000000

  Removed files:
    ossp-pkg/l2             config.guess config.sub configure l2++.3
                            l2-config.1 l2.3 libtool.m4 ltmain.sh shtool

  Log:
    Finally remove the generated files from CVS now that
    we have a working autogen.sh.

  Summary:
    Revision    Changes     Path
    NONE        +0  -1371   ossp-pkg/l2/config.guess
    NONE        +0  -1362   ossp-pkg/l2/config.sub
    NONE        +0  -7634   ossp-pkg/l2/configure
    NONE        +0  -156    ossp-pkg/l2/l2++.3
    NONE        +0  -334    ossp-pkg/l2/l2-config.1
    NONE        +0  -156    ossp-pkg/l2/l2.3
    NONE        +0  -3397   ossp-pkg/l2/libtool.m4
    NONE        +0  -4946   ossp-pkg/l2/ltmain.sh
    NONE        +0  -2837   ossp-pkg/l2/shtool
  ____________________________________________________________________________

                  

From ossp-cvs-owner@ossp.org  Tue Sep  4 17:52:33 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f84EkDe02019; Tue, 4 Sep 2001 16:46:13 +0200 (CEST)
Date: Tue, 4 Sep 2001 16:46:13 +0200 (CEST)
Message-Id: <200109041446.f84EkDe02019@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-Sep-2001 16:46:13
  Branch: HEAD                             Handle: 2001090415461200

  Modified files:
    ossp-pkg/l2             l2_test.c

  Log:
    make static

  Summary:
    Revision    Changes     Path
    1.9         +3  -2      ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/09/04 14:23:33	1.8
  +++ ossp-pkg/l2/l2_test.c	2001/09/04 14:46:12	1.9
  @@ -42,8 +42,9 @@
       exit(1);
   }
   
  -l2_result_t formatter(l2_context_t *ctx, const char id, const char *param,
  -                      char *bufptr, size_t bufsize, size_t *buflen, va_list *ap)
  +static l2_result_t 
  +formatter(l2_context_t *ctx, const char id, const char *param,
  +          char *bufptr, size_t bufsize, size_t *buflen, va_list *ap)
   {
       int i;
       

From ossp-cvs-owner@ossp.org  Tue Sep  4 17:52:34 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f849EC482476; Tue, 4 Sep 2001 11:14:12 +0200 (CEST)
Date: Tue, 4 Sep 2001 11:14:12 +0200 (CEST)
Message-Id: <200109040914.f849EC482476@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 autogen.sh
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-Sep-2001 11:14:12
  Branch: HEAD                             Handle: 2001090410141200

  Modified files:
    ossp-pkg/l2             autogen.sh

  Log:
    Fix quoting

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/l2/autogen.sh
  ____________________________________________________________________________

  Index: ossp-pkg/l2/autogen.sh
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 autogen.sh
  --- ossp-pkg/l2/autogen.sh	2001/08/15 10:36:03	1.2
  +++ ossp-pkg/l2/autogen.sh	2001/09/04 09:14:12	1.3
  @@ -62,7 +62,7 @@
   echo "GNU Libtool $libtoolize_version -> ltmain.sh, libtool.m4, config.guess, config.sub"
   libtoolize --force --copy >/dev/null 2>&1
   cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
  -    sed -e 's;[^\`]*\`;;' -e "s;\'.*;;"` libtool.m4
  +    sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` libtool.m4
   
   #   GNU Autoconf generation
   echo "GNU Autoconf $autoconf_version -> configure, config.h.in"

From ossp-cvs-owner@ossp.org  Tue Sep  4 17:52:34 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f84ENXT00727; Tue, 4 Sep 2001 16:23:33 +0200 (CEST)
Date: Tue, 4 Sep 2001 16:23:33 +0200 (CEST)
Message-Id: <200109041423.f84ENXT00727@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   04-Sep-2001 16:23:33
  Branch: HEAD                             Handle: 2001090415233300

  Modified files:
    ossp-pkg/l2             l2_test.c

  Log:
    Much more beautiful formatter callback (whitespace cleanup.)

  Summary:
    Revision    Changes     Path
    1.8         +2  -9      ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/09/04 14:17:11	1.7
  +++ ossp-pkg/l2/l2_test.c	2001/09/04 14:23:33	1.8
  @@ -42,15 +42,8 @@
       exit(1);
   }
   
  -l2_result_t formatter(
  -    l2_context_t *ctx,     
  -    const char    id,     
  -    const char   *param,  
  -    char         *bufptr, 
  -    size_t        bufsize,
  -    size_t       *buflen, 
  -    va_list      *ap 
  -)
  +l2_result_t formatter(l2_context_t *ctx, const char id, const char *param,
  +                      char *bufptr, size_t bufsize, size_t *buflen, va_list *ap)
   {
       int i;
       

From ossp-cvs-owner@ossp.org  Tue Sep  4 17:52:34 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f84Es4A02460; Tue, 4 Sep 2001 16:54:04 +0200 (CEST)
Date: Tue, 4 Sep 2001 16:54:04 +0200 (CEST)
Message-Id: <200109041454.f84Es4A02460@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_buffer.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-Sep-2001 16:54:04
  Branch: HEAD                             Handle: 2001090415540300

  Modified files:
    ossp-pkg/l2             l2_ch_buffer.c

  Log:
    fix array sizes

  Summary:
    Revision    Changes     Path
    1.11        +2  -2      ossp-pkg/l2/l2_ch_buffer.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_buffer.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 l2_ch_buffer.c
  --- ossp-pkg/l2/l2_ch_buffer.c	2001/09/04 13:52:59	1.10
  +++ ossp-pkg/l2/l2_ch_buffer.c	2001/09/04 14:54:03	1.11
  @@ -63,7 +63,7 @@
   static int hook_configure(l2_context_t *ctx, const char *fmt, va_list ap)
   {
       l2_ch_buffer_t *cfg;
  -    l2_param_t pa[3];
  +    l2_param_t pa[2];
       l2_result_t rv;
   
       /* parameter checks */
  @@ -72,7 +72,7 @@
   
       /* feed and call generic parameter parsing engine */
       L2_PARAM_SET(pa[0], size, INT, &cfg->bufsize);
  -    L2_PARAM_END(pa[2]);
  +    L2_PARAM_END(pa[1]);
       rv = l2_util_setparams(pa, fmt, ap);
       if (cfg->bufsize < 0) 
           return L2_ERROR;

From ossp-cvs-owner@ossp.org  Tue Sep  4 17:52:40 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f84EHCg00628; Tue, 4 Sep 2001 16:17:12 +0200 (CEST)
Date: Tue, 4 Sep 2001 16:17:12 +0200 (CEST)
Message-Id: <200109041417.f84EHCg00628@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_stream.c l2_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   04-Sep-2001 16:17:12
  Branch: HEAD                             Handle: 2001090415171100

  Modified files:
    ossp-pkg/l2             l2_stream.c l2_test.c

  Log:
    Bugfixes and new format testing.

  Summary:
    Revision    Changes     Path
    1.9         +1  -1      ossp-pkg/l2/l2_stream.c
    1.7         +22 -1      ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_stream.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 l2_stream.c
  --- ossp-pkg/l2/l2_stream.c	2001/09/04 13:52:59	1.8
  +++ ossp-pkg/l2/l2_stream.c	2001/09/04 14:17:11	1.9
  @@ -65,7 +65,7 @@
   {
       int i;
   
  -    if (st == NULL || id == '\0' || cb != NULL)
  +    if (st == NULL || id == '\0' || cb == NULL)
           return L2_ERROR;
       for (i = 0; i < L2_MAX_FORMATTERS && st->formatters[i].cb != NULL; i++)
           ;
  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/09/03 13:43:33	1.6
  +++ ossp-pkg/l2/l2_test.c	2001/09/04 14:17:11	1.7
  @@ -42,6 +42,24 @@
       exit(1);
   }
   
  +l2_result_t formatter(
  +    l2_context_t *ctx,     
  +    const char    id,     
  +    const char   *param,  
  +    char         *bufptr, 
  +    size_t        bufsize,
  +    size_t       *buflen, 
  +    va_list      *ap 
  +)
  +{
  +    int i;
  +    
  +    i = va_arg(*ap, int);
  +    sprintf(bufptr, "[%d/%s]", i, param);
  +    *buflen = strlen(bufptr);
  +    return L2_OK;
  +}
  +
   int main(int argc, char *argv[])
   {
       l2_channel_t *chBuf;
  @@ -79,7 +97,10 @@
       if (l2_stream_levels(st, L2_LEVEL_UPTO(L2_LEVEL_WARNING), NULL) != L2_OK)
           die("failed to set global logging level");
       
  -    if (l2_stream_log(st, L2_LEVEL_PANIC, "test %s", "foo") != L2_OK)
  +    if (l2_stream_formatter(st, 'k', formatter, NULL) != L2_OK)
  +        die("failed to configure formatter for %%x");
  +
  +    if (l2_stream_log(st, L2_LEVEL_PANIC, "test %s %{foo}k", "foo", 12345) != L2_OK)
           die("failed to log message to stream");
   
       if (l2_stream_destroy(st) != L2_OK)

From ossp-cvs-owner@ossp.org  Tue Sep  4 17:52:44 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f84EuQI02526; Tue, 4 Sep 2001 16:56:26 +0200 (CEST)
Date: Tue, 4 Sep 2001 16:56:26 +0200 (CEST)
Message-Id: <200109041456.f84EuQI02526@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.h l2_stream.c l2_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-Sep-2001 16:56:26
  Branch: HEAD                             Handle: 2001090415562500

  Modified files:
    ossp-pkg/l2             l2.h l2_stream.c l2_test.c

  Log:
    cleanup level API (no need for retrieving old mask just in
    one function - either in all or in none).

  Summary:
    Revision    Changes     Path
    1.14        +3  -3      ossp-pkg/l2/l2.h
    1.10        +1  -3      ossp-pkg/l2/l2_stream.c
    1.10        +1  -1      ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2.h
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 l2.h
  --- ossp-pkg/l2/l2.h	2001/09/04 13:52:59	1.13
  +++ ossp-pkg/l2/l2.h	2001/09/04 14:56:25	1.14
  @@ -169,9 +169,9 @@
   l2_stream_t  *l2_stream_create    (void);
   l2_result_t   l2_stream_channel   (l2_stream_t *st, l2_channel_t *ch, unsigned int levelmask);
   l2_result_t   l2_stream_formatter (l2_stream_t *st, char id, l2_formatter_t cb, l2_context_t *ctx);
  -l2_result_t   l2_stream_levels    (l2_stream_t *st, unsigned int levelmask, unsigned int *levelmaskold);
  -l2_result_t   l2_stream_log       (l2_stream_t *st, unsigned int log_level, const char *fmt, ...);
  -l2_result_t   l2_stream_vlog      (l2_stream_t *st, unsigned int log_level, const char *fmt, va_list ap);
  +l2_result_t   l2_stream_levels    (l2_stream_t *st, unsigned int levelmask);
  +l2_result_t   l2_stream_log       (l2_stream_t *st, unsigned int level, const char *fmt, ...);
  +l2_result_t   l2_stream_vlog      (l2_stream_t *st, unsigned int level, const char *fmt, va_list ap);
   l2_result_t   l2_stream_destroy   (l2_stream_t *st);
   
   /* utility operations */
  Index: ossp-pkg/l2/l2_stream.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 l2_stream.c
  --- ossp-pkg/l2/l2_stream.c	2001/09/04 14:17:11	1.9
  +++ ossp-pkg/l2/l2_stream.c	2001/09/04 14:56:25	1.10
  @@ -77,12 +77,10 @@
       return L2_OK;
   }
   
  -l2_result_t l2_stream_levels(l2_stream_t *st, unsigned int levelmask, unsigned int *levelmaskold)
  +l2_result_t l2_stream_levels(l2_stream_t *st, unsigned int levelmask)
   {
       if (st == NULL)
           return L2_ERROR;
  -    if (levelmaskold != NULL)
  -        *levelmaskold = st->levelmask;
       st->levelmask = levelmask;
       return L2_OK;
   }
  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/09/04 14:46:12	1.9
  +++ ossp-pkg/l2/l2_test.c	2001/09/04 14:56:25	1.10
  @@ -88,7 +88,7 @@
       if (l2_stream_channel(st, chBuf, L2_LEVEL_UPTO(L2_LEVEL_WARNING)) != L2_OK)
           die("failed to attach channel into stream");
   
  -    if (l2_stream_levels(st, L2_LEVEL_UPTO(L2_LEVEL_WARNING), NULL) != L2_OK)
  +    if (l2_stream_levels(st, L2_LEVEL_UPTO(L2_LEVEL_WARNING)) != L2_OK)
           die("failed to set global logging level");
       
       if (l2_stream_formatter(st, 'k', formatter, NULL) != L2_OK)

From ossp-cvs-owner@ossp.org  Tue Sep  4 17:52:49 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f84FinQ05368; Tue, 4 Sep 2001 17:44:49 +0200 (CEST)
Date: Tue, 4 Sep 2001 17:44:49 +0200 (CEST)
Message-Id: <200109041544.f84FinQ05368@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_file.c l2_ch_socket.c l2_ch_syslog.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-Sep-2001 17:44:49
  Branch: HEAD                             Handle: 2001090416444800

  Modified files:
    ossp-pkg/l2             l2_ch_file.c l2_ch_socket.c l2_ch_syslog.c

  Log:
    Whohooo, now we can simplify output channels: because output channels
    are guarrantied to be not on top of other channels, they do not have any
    downstream channels. So remove all downstream handling from them. Only
    filter channels have to be aware of downstream channels.

  Summary:
    Revision    Changes     Path
    1.11        +0  -25     ossp-pkg/l2/l2_ch_file.c
    1.9         +0  -25     ossp-pkg/l2/l2_ch_socket.c
    1.11        +0  -25     ossp-pkg/l2/l2_ch_syslog.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_file.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 l2_ch_file.c
  --- ossp-pkg/l2/l2_ch_file.c	2001/09/04 15:41:17	1.10
  +++ ossp-pkg/l2/l2_ch_file.c	2001/09/04 15:44:48	1.11
  @@ -88,7 +88,6 @@
   static int hook_open(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_file_t *cfg;
  -    l2_channel_t *downstream;
       int mode;
   
       /* parameter checks */
  @@ -104,11 +103,6 @@
       if ((cfg->fd = open(cfg->path, mode, cfg->perm)) == -1)
           return L2_ERROR;
   
  -    /* optionally open downstream channel, too */
  -    if ((downstream = l2_channel_downstream(ch)) != NULL)
  -        if (l2_channel_open(downstream) == L2_ERROR)
  -            return L2_ERROR;
  -
       return L2_OK;
   }
   
  @@ -117,7 +111,6 @@
                         const char *buf, size_t buf_size)
   {
       l2_ch_file_t *cfg;
  -    l2_channel_t *downstream;
   
       /* parameter checks */
       if ((cfg = (l2_ch_file_t *)ctx->vp) == NULL)
  @@ -129,26 +122,14 @@
       if (write(cfg->fd, buf, buf_size) == -1)
           return L2_ERROR;
   
  -    /* optionally write to downstream channel, too */
  -    if ((downstream = l2_channel_downstream(ch)) != NULL)
  -        if (l2_channel_write(downstream, buf, buf_size) == L2_ERROR)
  -            return L2_ERROR;
  -
       return L2_OK;
   }
   
   /* flush channel */
   static int hook_flush(l2_context_t *ctx, l2_channel_t *ch)
   {
  -    l2_channel_t *downstream;
  -
       /* NOP for this channel, because Unix I/O files are unbuffered! */
   
  -    /* optionally flush downstream channel, too */
  -    if ((downstream = l2_channel_downstream(ch)) != NULL)
  -        if (l2_channel_flush(downstream) == L2_ERROR)
  -            return L2_ERROR;
  -
       return L2_OK;
   }
   
  @@ -156,12 +137,6 @@
   static int hook_close(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_file_t *cfg;
  -    l2_channel_t *downstream;
  -
  -    /* optionally close downstream channel, too */
  -    if ((downstream = l2_channel_downstream(ch)) != NULL)
  -        if (l2_channel_close(downstream) == L2_ERROR)
  -            return L2_ERROR;
   
       /* parameter checks */
       if ((cfg = (l2_ch_file_t *)ctx->vp) == NULL)
  Index: ossp-pkg/l2/l2_ch_socket.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 l2_ch_socket.c
  --- ossp-pkg/l2/l2_ch_socket.c	2001/09/04 15:41:17	1.8
  +++ ossp-pkg/l2/l2_ch_socket.c	2001/09/04 15:44:48	1.9
  @@ -141,7 +141,6 @@
       struct hostent      *pHostentry;
       struct sockaddr_in  IP4Sockaddr;
       struct sockaddr_in6 IP6Sockaddr;
  -    l2_channel_t *downstream;
   
       /* parameter checks */
       if ((cfg = (l2_ch_socket_t *)ctx->vp) == NULL)
  @@ -188,11 +187,6 @@
           return L2_ERROR;
       }
   
  -    /* optionally open downstream channel, too */
  -    if ((downstream = l2_channel_downstream(ch)) != NULL)
  -        if (l2_channel_open(downstream) == L2_ERROR)
  -            return L2_ERROR;
  -
       return L2_OK;
   }
   
  @@ -201,7 +195,6 @@
                         const char *buf, size_t buf_size)
   {
       l2_ch_socket_t *cfg;
  -    l2_channel_t *downstream;
   
       /* parameter checks */
       if ((cfg = (l2_ch_socket_t *)ctx->vp) == NULL)
  @@ -213,26 +206,14 @@
       if (send(cfg->iSocket, buf, buf_size, 0) == -1)
           return L2_ERROR;
   
  -    /* optionally write to downstream channel, too */
  -    if ((downstream = l2_channel_downstream(ch)) != NULL)
  -        if (l2_channel_write(downstream, buf, buf_size) == L2_ERROR)
  -            return L2_ERROR;
  -
       return L2_OK;
   }
   
   /* flush channel */
   static int hook_flush(l2_context_t *ctx, l2_channel_t *ch)
   {
  -    l2_channel_t *downstream;
  -
       /* NOP for this channel, because Unix I/O sockets are unbuffered! */
   
  -    /* optionally flush downstream channel, too */
  -    if ((downstream = l2_channel_downstream(ch)) != NULL)
  -        if (l2_channel_flush(downstream) == L2_ERROR)
  -            return L2_ERROR;
  -
       return L2_OK;
   }
   
  @@ -240,12 +221,6 @@
   static int hook_close(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_socket_t *cfg;
  -    l2_channel_t *downstream;
  -
  -    /* optionally close downstream channel, too */
  -    if ((downstream = l2_channel_downstream(ch)) != NULL)
  -        if (l2_channel_close(downstream) == L2_ERROR)
  -            return L2_ERROR;
   
       /* parameter checks */
       if ((cfg = (l2_ch_socket_t *)ctx->vp) == NULL)
  Index: ossp-pkg/l2/l2_ch_syslog.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 l2_ch_syslog.c
  --- ossp-pkg/l2/l2_ch_syslog.c	2001/09/04 15:41:17	1.10
  +++ ossp-pkg/l2/l2_ch_syslog.c	2001/09/04 15:44:48	1.11
  @@ -90,7 +90,6 @@
   static int hook_open(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_syslog_t *cfg;
  -    l2_channel_t *downstream;
   
       /* parameter checks */
       if ((cfg = (l2_ch_syslog_t *)ctx->vp) == NULL)
  @@ -100,11 +99,6 @@
       openlog(cfg->pszIdent, cfg->iLogopt, cfg->iFacility);
       setlogmask(cfg->iMaskpri);
   
  -    /* optionally open downstream channel, too */
  -    if ((downstream = l2_channel_downstream(ch)) != NULL)
  -        if (l2_channel_open(downstream) == L2_ERROR)
  -            return L2_ERROR;
  -
       return L2_OK;
   }
   
  @@ -113,7 +107,6 @@
                         const char *buf, size_t buf_size)
   {
       l2_ch_syslog_t *cfg;
  -    l2_channel_t *downstream;
   
       /* parameter checks */
       if ((cfg = (l2_ch_syslog_t *)ctx->vp) == NULL)
  @@ -122,26 +115,14 @@
       /* write message to channel syslog */
       syslog(cfg->iPriority, buf);
   
  -    /* optionally write to downstream channel, too */
  -    if ((downstream = l2_channel_downstream(ch)) != NULL)
  -        if (l2_channel_write(downstream, buf, buf_size) == L2_ERROR)
  -            return L2_ERROR;
  -
       return L2_OK;
   }
   
   /* flush channel */
   static int hook_flush(l2_context_t *ctx, l2_channel_t *ch)
   {
  -    l2_channel_t *downstream;
  -
       /* Noop for this channel, because syslog entries are unbuffered */
   
  -    /* optionally flush downstream channel, too */
  -    if ((downstream = l2_channel_downstream(ch)) != NULL)
  -        if (l2_channel_flush(downstream) == L2_ERROR)
  -            return L2_ERROR;
  -
       return L2_OK;
   }
   
  @@ -149,12 +130,6 @@
   static int hook_close(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_syslog_t *cfg;
  -    l2_channel_t *downstream;
  -
  -    /* optionally close downstream channel, too */
  -    if ((downstream = l2_channel_downstream(ch)) != NULL)
  -        if (l2_channel_close(downstream) == L2_ERROR)
  -            return L2_ERROR;
   
       /* parameter checks */
       if ((cfg = (l2_ch_syslog_t *)ctx->vp) == NULL)

From ossp-cvs-owner@ossp.org  Tue Sep  4 17:52:49 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f84FfIc05298; Tue, 4 Sep 2001 17:41:18 +0200 (CEST)
Date: Tue, 4 Sep 2001 17:41:18 +0200 (CEST)
Message-Id: <200109041541.f84FfIc05298@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.h l2_ch_buffer.c l2_ch_fd.c l2_ch_file.c l2...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-Sep-2001 17:41:18
  Branch: HEAD                             Handle: 2001090416411700

  Modified files:
    ossp-pkg/l2             l2.h l2_ch_buffer.c l2_ch_fd.c l2_ch_file.c
                            l2_ch_filter.c l2_ch_null.c l2_ch_pipe.c
                            l2_ch_prefix.c l2_ch_socket.c l2_ch_syslog.c
                            l2_channel.c

  Log:
    Revamp channel handler API:
    
    Instead of passing the downstream channel to all channels we instead
    provide a l2_channel_downstream() function and provide the current
    channel. This way the handler API is prototype-wise fully orthogonal
    with the channel API (which it implements) and we no longer pass
    information to 2/3 of our (output) channels which is of no use there.
    
    Additionally add a channel type field to l2_handler_t which allows a
    handler to say what type of channel it implements (filter or output).
    This information is now used in l2_channel_stack() to make sure that
    one can only stack a filter channel on top of another channel. For
    convinience reasons there is also a new l2_channel_type() function which
    allows one to query the type of a particular channel.

  Summary:
    Revision    Changes     Path
    1.15        +31 -22     ossp-pkg/l2/l2.h
    1.12        +16 -12     ossp-pkg/l2/l2_ch_buffer.c
    1.5         +8  -7      ossp-pkg/l2/l2_ch_fd.c
    1.10        +17 -11     ossp-pkg/l2/l2_ch_file.c
    1.5         +8  -7      ossp-pkg/l2/l2_ch_filter.c
    1.5         +8  -8      ossp-pkg/l2/l2_ch_null.c
    1.5         +8  -7      ossp-pkg/l2/l2_ch_pipe.c
    1.5         +8  -7      ossp-pkg/l2/l2_ch_prefix.c
    1.8         +17 -11     ossp-pkg/l2/l2_ch_socket.c
    1.10        +17 -11     ossp-pkg/l2/l2_ch_syslog.c
    1.12        +34 -18     ossp-pkg/l2/l2_channel.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2.h
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 l2.h
  --- ossp-pkg/l2/l2.h	2001/09/04 14:56:25	1.14
  +++ ossp-pkg/l2/l2.h	2001/09/04 15:41:17	1.15
  @@ -120,15 +120,22 @@
   #define L2_PARAM_END(pa) \
       pa.name = NULL
   
  +/* list of handler types */
  +typedef enum {
  +    L2_CHANNEL_FILTER,
  +    L2_CHANNEL_OUTPUT
  +} l2_chtype_t;
  +
   /* channel handler specification structure */
   struct l2_handler_st {
  -    int (*create)   (l2_context_t *ctx);
  -    int (*configure)(l2_context_t *ctx, const char *fmt, va_list ap);
  -    int (*open)     (l2_context_t *ctx, l2_channel_t *downstream);
  -    int (*write)    (l2_context_t *ctx, l2_channel_t *downstream, const char *buf, size_t buf_size);
  -    int (*flush)    (l2_context_t *ctx, l2_channel_t *downstream);
  -    int (*close)    (l2_context_t *ctx, l2_channel_t *downstream);
  -    int (*destroy)  (l2_context_t *ctx);
  +    l2_chtype_t type;
  +    int (*create)   (l2_context_t *ctx, l2_channel_t *ch);
  +    int (*configure)(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap);
  +    int (*open)     (l2_context_t *ctx, l2_channel_t *ch);
  +    int (*write)    (l2_context_t *ctx, l2_channel_t *ch, const char *buf, size_t bufsize);
  +    int (*flush)    (l2_context_t *ctx, l2_channel_t *ch);
  +    int (*close)    (l2_context_t *ctx, l2_channel_t *ch);
  +    int (*destroy)  (l2_context_t *ctx, l2_channel_t *ch);
   };
   
   /* type of formatter callback function */
  @@ -156,23 +163,25 @@
   extern l2_handler_t l2_handler_buffer;
   
   /* channel operations */
  -l2_channel_t *l2_channel_create   (l2_handler_t *h);
  -l2_result_t   l2_channel_configure(l2_channel_t *ch, const char *fmt, ...);
  -l2_result_t   l2_channel_open     (l2_channel_t *ch);
  -l2_result_t   l2_channel_write    (l2_channel_t *ch, const char *buf, size_t bufsize);
  -l2_result_t   l2_channel_flush    (l2_channel_t *ch);
  -l2_result_t   l2_channel_close    (l2_channel_t *ch);
  -l2_result_t   l2_channel_destroy  (l2_channel_t *ch);
  -l2_result_t   l2_channel_stack    (l2_channel_t *ch, l2_channel_t *chTop);
  +l2_channel_t *l2_channel_create     (l2_handler_t *h);
  +l2_result_t   l2_channel_configure  (l2_channel_t *ch, const char *fmt, ...);
  +l2_result_t   l2_channel_open       (l2_channel_t *ch);
  +l2_result_t   l2_channel_write      (l2_channel_t *ch, const char *buf, size_t bufsize);
  +l2_result_t   l2_channel_flush      (l2_channel_t *ch);
  +l2_result_t   l2_channel_close      (l2_channel_t *ch);
  +l2_result_t   l2_channel_destroy    (l2_channel_t *ch);
  +l2_result_t   l2_channel_stack      (l2_channel_t *ch, l2_channel_t *chTop);
  +l2_channel_t *l2_channel_downstream (l2_channel_t *ch);
  +l2_chtype_t   l2_channel_type       (l2_channel_t *ch);
   
   /* stream operations */
  -l2_stream_t  *l2_stream_create    (void);
  -l2_result_t   l2_stream_channel   (l2_stream_t *st, l2_channel_t *ch, unsigned int levelmask);
  -l2_result_t   l2_stream_formatter (l2_stream_t *st, char id, l2_formatter_t cb, l2_context_t *ctx);
  -l2_result_t   l2_stream_levels    (l2_stream_t *st, unsigned int levelmask);
  -l2_result_t   l2_stream_log       (l2_stream_t *st, unsigned int level, const char *fmt, ...);
  -l2_result_t   l2_stream_vlog      (l2_stream_t *st, unsigned int level, const char *fmt, va_list ap);
  -l2_result_t   l2_stream_destroy   (l2_stream_t *st);
  +l2_stream_t  *l2_stream_create     (void);
  +l2_result_t   l2_stream_channel    (l2_stream_t *st, l2_channel_t *ch, unsigned int levelmask);
  +l2_result_t   l2_stream_formatter  (l2_stream_t *st, char id, l2_formatter_t cb, l2_context_t *ctx);
  +l2_result_t   l2_stream_levels     (l2_stream_t *st, unsigned int levelmask);
  +l2_result_t   l2_stream_log        (l2_stream_t *st, unsigned int level, const char *fmt, ...);
  +l2_result_t   l2_stream_vlog       (l2_stream_t *st, unsigned int level, const char *fmt, va_list ap);
  +l2_result_t   l2_stream_destroy    (l2_stream_t *st);
   
   /* utility operations */
   l2_result_t   l2_util_setparams(l2_param_t p[], const char *fmt, va_list ap);
  Index: ossp-pkg/l2/l2_ch_buffer.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 l2_ch_buffer.c
  --- ossp-pkg/l2/l2_ch_buffer.c	2001/09/04 14:54:03	1.11
  +++ ossp-pkg/l2/l2_ch_buffer.c	2001/09/04 15:41:17	1.12
  @@ -40,7 +40,7 @@
   } l2_ch_buffer_t;
   
   /* create channel */
  -static int hook_create(l2_context_t *ctx)
  +static int hook_create(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_buffer_t *cfg;
   
  @@ -60,7 +60,7 @@
   }
   
   /* configure channel */
  -static int hook_configure(l2_context_t *ctx, const char *fmt, va_list ap)
  +static int hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
       l2_ch_buffer_t *cfg;
       l2_param_t pa[2];
  @@ -80,9 +80,10 @@
   }
   
   /* open channel */
  -static int hook_open(l2_context_t *ctx, l2_channel_t *downstream)
  +static int hook_open(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_buffer_t *cfg;
  +    l2_channel_t *downstream;
   
       /* parameter checks */
       if ((cfg = (l2_ch_buffer_t *)ctx->vp) == NULL)
  @@ -96,7 +97,7 @@
       }
   
       /* optionally open downstream channel, too */
  -    if (downstream != NULL)
  +    if ((downstream = l2_channel_downstream(ch)) != NULL)
           if (l2_channel_open(downstream) == L2_ERROR)
               return L2_ERROR;
   
  @@ -104,7 +105,7 @@
   }
   
   /* write to channel */
  -static int hook_write(l2_context_t *ctx, l2_channel_t *downstream, 
  +static int hook_write(l2_context_t *ctx, l2_channel_t *ch, 
                         const char *buf, size_t bufsize)
   {
       l2_ch_buffer_t *cfg;
  @@ -123,9 +124,10 @@
   }
   
   /* flush channel */
  -static int hook_flush(l2_context_t *ctx, l2_channel_t *downstream)
  +static int hook_flush(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_buffer_t *cfg;
  +    l2_channel_t *downstream;
   
       /* parameter checks */
       if ((cfg = (l2_ch_buffer_t *)ctx->vp) == NULL)
  @@ -133,14 +135,14 @@
   
       /* write the buffer contents downstream */
       if (cfg->bufpos > 0) {
  -        if (downstream != NULL)
  +        if ((downstream = l2_channel_downstream(ch)) != NULL)
               if (l2_channel_write(downstream, cfg->buf, cfg->bufpos) == L2_ERROR)
                   return L2_ERROR;
           cfg->bufpos = 0;
       }
   
       /* optionally flush downstream channel, too */
  -    if (downstream != NULL)
  +    if ((downstream = l2_channel_downstream(ch)) != NULL)
           if (l2_channel_flush(downstream) == L2_ERROR)
               return L2_ERROR;
   
  @@ -148,9 +150,10 @@
   }
   
   /* close channel */
  -static int hook_close(l2_context_t *ctx, l2_channel_t *downstream)
  +static int hook_close(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_buffer_t *cfg;
  +    l2_channel_t *downstream;
   
       /* parameter checks */
       if ((cfg = (l2_ch_buffer_t *)ctx->vp) == NULL)
  @@ -158,14 +161,14 @@
   
       /* write stale data before closing down */
       if (cfg->bufpos > 0) {
  -        if (downstream != NULL)
  +        if ((downstream = l2_channel_downstream(ch)) != NULL)
               if (l2_channel_write(downstream, cfg->buf, cfg->bufpos) == L2_ERROR)
                   return L2_ERROR;
           cfg->bufpos = 0;
       }
   
       /* optionally close downstream channel, too */
  -    if (downstream != NULL)
  +    if ((downstream = l2_channel_downstream(ch)) != NULL)
           if (l2_channel_close(downstream) == L2_ERROR)
               return L2_ERROR;
   
  @@ -179,7 +182,7 @@
   }
   
   /* destroy channel */
  -static int hook_destroy(l2_context_t *ctx)
  +static int hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_buffer_t *cfg;
   
  @@ -201,6 +204,7 @@
   
   /* exported channel handler structure */
   l2_handler_t l2_handler_buffer = {
  +    L2_CHANNEL_FILTER,
       hook_create,
       hook_configure,
       hook_open,
  Index: ossp-pkg/l2/l2_ch_fd.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 l2_ch_fd.c
  --- ossp-pkg/l2/l2_ch_fd.c	2001/08/15 10:36:03	1.4
  +++ ossp-pkg/l2/l2_ch_fd.c	2001/09/04 15:41:17	1.5
  @@ -30,43 +30,44 @@
   #include "l2.h"
   #include "l2_p.h"
   
  -static int hook_create(l2_context_t *ctx)
  +static int hook_create(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
  -static int hook_configure(l2_context_t *ctx, const char *fmt, va_list ap)
  +static int hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
       return L2_OK;
   }
   
  -static int hook_open(l2_context_t *ctx, l2_channel_t *downstream)
  +static int hook_open(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
  -static int hook_write(l2_context_t *ctx, l2_channel_t *downstream, 
  +static int hook_write(l2_context_t *ctx, l2_channel_t *ch, 
                         const char *buf, size_t buf_size)
   {
       return L2_OK;
   }
   
  -static int hook_flush(l2_context_t *ctx, l2_channel_t *downstream)
  +static int hook_flush(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
  -static int hook_close(l2_context_t *ctx, l2_channel_t *downstream)
  +static int hook_close(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
  -static int hook_destroy(l2_context_t *ctx)
  +static int hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
   l2_handler_t l2_handler_fd = {
  +    L2_CHANNEL_OUTPUT,
       hook_create,
       hook_configure,
       hook_open,
  Index: ossp-pkg/l2/l2_ch_file.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 l2_ch_file.c
  --- ossp-pkg/l2/l2_ch_file.c	2001/09/04 13:52:59	1.9
  +++ ossp-pkg/l2/l2_ch_file.c	2001/09/04 15:41:17	1.10
  @@ -43,7 +43,7 @@
   } l2_ch_file_t;
   
   /* create channel */
  -static int hook_create(l2_context_t *ctx)
  +static int hook_create(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_file_t *cfg;
   
  @@ -64,7 +64,7 @@
   }
   
   /* configure channel */
  -static int hook_configure(l2_context_t *ctx, const char *fmt, va_list ap)
  +static int hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
       l2_ch_file_t *cfg;
       l2_param_t pa[4]; 
  @@ -85,9 +85,10 @@
   }
   
   /* open channel */
  -static int hook_open(l2_context_t *ctx, l2_channel_t *downstream)
  +static int hook_open(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_file_t *cfg;
  +    l2_channel_t *downstream;
       int mode;
   
       /* parameter checks */
  @@ -104,7 +105,7 @@
           return L2_ERROR;
   
       /* optionally open downstream channel, too */
  -    if (downstream != NULL)
  +    if ((downstream = l2_channel_downstream(ch)) != NULL)
           if (l2_channel_open(downstream) == L2_ERROR)
               return L2_ERROR;
   
  @@ -112,10 +113,11 @@
   }
   
   /* write to channel */
  -static int hook_write(l2_context_t *ctx, l2_channel_t *downstream, 
  +static int hook_write(l2_context_t *ctx, l2_channel_t *ch, 
                         const char *buf, size_t buf_size)
   {
       l2_ch_file_t *cfg;
  +    l2_channel_t *downstream;
   
       /* parameter checks */
       if ((cfg = (l2_ch_file_t *)ctx->vp) == NULL)
  @@ -128,7 +130,7 @@
           return L2_ERROR;
   
       /* optionally write to downstream channel, too */
  -    if (downstream != NULL)
  +    if ((downstream = l2_channel_downstream(ch)) != NULL)
           if (l2_channel_write(downstream, buf, buf_size) == L2_ERROR)
               return L2_ERROR;
   
  @@ -136,12 +138,14 @@
   }
   
   /* flush channel */
  -static int hook_flush(l2_context_t *ctx, l2_channel_t *downstream)
  +static int hook_flush(l2_context_t *ctx, l2_channel_t *ch)
   {
  +    l2_channel_t *downstream;
  +
       /* NOP for this channel, because Unix I/O files are unbuffered! */
   
       /* optionally flush downstream channel, too */
  -    if (downstream != NULL)
  +    if ((downstream = l2_channel_downstream(ch)) != NULL)
           if (l2_channel_flush(downstream) == L2_ERROR)
               return L2_ERROR;
   
  @@ -149,12 +153,13 @@
   }
   
   /* close channel */
  -static int hook_close(l2_context_t *ctx, l2_channel_t *downstream)
  +static int hook_close(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_file_t *cfg;
  +    l2_channel_t *downstream;
   
       /* optionally close downstream channel, too */
  -    if (downstream != NULL)
  +    if ((downstream = l2_channel_downstream(ch)) != NULL)
           if (l2_channel_close(downstream) == L2_ERROR)
               return L2_ERROR;
   
  @@ -172,7 +177,7 @@
   }
   
   /* destroy channel */
  -static int hook_destroy(l2_context_t *ctx)
  +static int hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
   {
       /* parameter checks */
       if (ctx->vp == NULL) 
  @@ -186,6 +191,7 @@
   
   /* exported channel handler structure */
   l2_handler_t l2_handler_file = {
  +    L2_CHANNEL_OUTPUT,
       hook_create,
       hook_configure,
       hook_open,
  Index: ossp-pkg/l2/l2_ch_filter.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 l2_ch_filter.c
  --- ossp-pkg/l2/l2_ch_filter.c	2001/08/15 10:36:03	1.4
  +++ ossp-pkg/l2/l2_ch_filter.c	2001/09/04 15:41:17	1.5
  @@ -30,43 +30,44 @@
   #include "l2.h"
   #include "l2_p.h"
   
  -static int hook_create(l2_context_t *ctx)
  +static int hook_create(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
  -static int hook_configure(l2_context_t *ctx, const char *fmt, va_list ap)
  +static int hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
       return L2_OK;
   }
   
  -static int hook_open(l2_context_t *ctx, l2_channel_t *downstream)
  +static int hook_open(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
  -static int hook_write(l2_context_t *ctx, l2_channel_t *downstream, 
  +static int hook_write(l2_context_t *ctx, l2_channel_t *ch, 
                         const char *buf, size_t buf_size)
   {
       return L2_OK;
   }
   
  -static int hook_flush(l2_context_t *ctx, l2_channel_t *downstream)
  +static int hook_flush(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
  -static int hook_close(l2_context_t *ctx, l2_channel_t *downstream)
  +static int hook_close(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
  -static int hook_destroy(l2_context_t *ctx)
  +static int hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
   l2_handler_t l2_handler_filter = {
  +    L2_CHANNEL_FILTER,
       hook_create,
       hook_configure,
       hook_open,
  Index: ossp-pkg/l2/l2_ch_null.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 l2_ch_null.c
  --- ossp-pkg/l2/l2_ch_null.c	2001/08/15 10:36:03	1.4
  +++ ossp-pkg/l2/l2_ch_null.c	2001/09/04 15:41:17	1.5
  @@ -30,43 +30,43 @@
   #include "l2.h"
   #include "l2_p.h"
   
  -static int hook_create(l2_context_t *ctx)
  +static int hook_create(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
  -static int hook_configure(l2_context_t *ctx, const char *fmt, va_list ap)
  +static int hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
       return L2_OK;
   }
   
  -static int hook_open(l2_context_t *ctx, l2_channel_t *downstream)
  +static int hook_open(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
  -static int hook_write(l2_context_t *ctx, l2_channel_t *downstream, 
  -                      const char *buf, size_t buf_size)
  +static int hook_write(l2_context_t *ctx, l2_channel_t *ch, const char *buf, size_t buf_size)
   {
       return L2_OK;
   }
   
  -static int hook_flush(l2_context_t *ctx, l2_channel_t *downstream)
  +static int hook_flush(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
  -static int hook_close(l2_context_t *ctx, l2_channel_t *downstream)
  +static int hook_close(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
  -static int hook_destroy(l2_context_t *ctx)
  +static int hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
   l2_handler_t l2_handler_null = {
  +    L2_CHANNEL_OUTPUT,
       hook_create,
       hook_configure,
       hook_open,
  Index: ossp-pkg/l2/l2_ch_pipe.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 l2_ch_pipe.c
  --- ossp-pkg/l2/l2_ch_pipe.c	2001/08/15 10:36:03	1.4
  +++ ossp-pkg/l2/l2_ch_pipe.c	2001/09/04 15:41:17	1.5
  @@ -30,43 +30,44 @@
   #include "l2.h"
   #include "l2_p.h"
   
  -static int hook_create(l2_context_t *ctx)
  +static int hook_create(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
  -static int hook_configure(l2_context_t *ctx, const char *fmt, va_list ap)
  +static int hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
       return L2_OK;
   }
   
  -static int hook_open(l2_context_t *ctx, l2_channel_t *downstream)
  +static int hook_open(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
  -static int hook_write(l2_context_t *ctx, l2_channel_t *downstream, 
  +static int hook_write(l2_context_t *ctx, l2_channel_t *ch, 
                         const char *buf, size_t buf_size)
   {
       return L2_OK;
   }
   
  -static int hook_flush(l2_context_t *ctx, l2_channel_t *downstream)
  +static int hook_flush(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
  -static int hook_close(l2_context_t *ctx, l2_channel_t *downstream)
  +static int hook_close(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
  -static int hook_destroy(l2_context_t *ctx)
  +static int hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
   l2_handler_t l2_handler_pipe = {
  +    L2_CHANNEL_OUTPUT,
       hook_create,
       hook_configure,
       hook_open,
  Index: ossp-pkg/l2/l2_ch_prefix.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 l2_ch_prefix.c
  --- ossp-pkg/l2/l2_ch_prefix.c	2001/08/15 10:36:03	1.4
  +++ ossp-pkg/l2/l2_ch_prefix.c	2001/09/04 15:41:17	1.5
  @@ -30,43 +30,44 @@
   #include "l2.h"
   #include "l2_p.h"
   
  -static int hook_create(l2_context_t *ctx)
  +static int hook_create(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
  -static int hook_configure(l2_context_t *ctx, const char *fmt, va_list ap)
  +static int hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
       return L2_OK;
   }
   
  -static int hook_open(l2_context_t *ctx, l2_channel_t *downstream)
  +static int hook_open(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
  -static int hook_write(l2_context_t *ctx, l2_channel_t *downstream, 
  +static int hook_write(l2_context_t *ctx, l2_channel_t *ch, 
                         const char *buf, size_t buf_size)
   {
       return L2_OK;
   }
   
  -static int hook_flush(l2_context_t *ctx, l2_channel_t *downstream)
  +static int hook_flush(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
  -static int hook_close(l2_context_t *ctx, l2_channel_t *downstream)
  +static int hook_close(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
  -static int hook_destroy(l2_context_t *ctx)
  +static int hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
   l2_handler_t l2_handler_prefix = {
  +    L2_CHANNEL_FILTER,
       hook_create,
       hook_configure,
       hook_open,
  Index: ossp-pkg/l2/l2_ch_socket.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 l2_ch_socket.c
  --- ossp-pkg/l2/l2_ch_socket.c	2001/09/04 13:52:59	1.7
  +++ ossp-pkg/l2/l2_ch_socket.c	2001/09/04 15:41:17	1.8
  @@ -95,7 +95,7 @@
   } l2_ch_socket_t;
   
   /* create channel */
  -static int hook_create(l2_context_t *ctx)
  +static int hook_create(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_socket_t *cfg = NULL;
   
  @@ -115,7 +115,7 @@
   }
   
   /* configure channel */
  -static int hook_configure(l2_context_t *ctx, const char *fmt, va_list ap)
  +static int hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
       l2_ch_socket_t *cfg;
       l2_param_t pa[3];
  @@ -135,12 +135,13 @@
   }
   
   /* open channel */
  -static int hook_open(l2_context_t *ctx, l2_channel_t *downstream)
  +static int hook_open(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_socket_t      *cfg;
       struct hostent      *pHostentry;
       struct sockaddr_in  IP4Sockaddr;
       struct sockaddr_in6 IP6Sockaddr;
  +    l2_channel_t *downstream;
   
       /* parameter checks */
       if ((cfg = (l2_ch_socket_t *)ctx->vp) == NULL)
  @@ -188,7 +189,7 @@
       }
   
       /* optionally open downstream channel, too */
  -    if (downstream != NULL)
  +    if ((downstream = l2_channel_downstream(ch)) != NULL)
           if (l2_channel_open(downstream) == L2_ERROR)
               return L2_ERROR;
   
  @@ -196,10 +197,11 @@
   }
   
   /* write to channel */
  -static int hook_write(l2_context_t *ctx, l2_channel_t *downstream, 
  +static int hook_write(l2_context_t *ctx, l2_channel_t *ch, 
                         const char *buf, size_t buf_size)
   {
       l2_ch_socket_t *cfg;
  +    l2_channel_t *downstream;
   
       /* parameter checks */
       if ((cfg = (l2_ch_socket_t *)ctx->vp) == NULL)
  @@ -212,7 +214,7 @@
           return L2_ERROR;
   
       /* optionally write to downstream channel, too */
  -    if (downstream != NULL)
  +    if ((downstream = l2_channel_downstream(ch)) != NULL)
           if (l2_channel_write(downstream, buf, buf_size) == L2_ERROR)
               return L2_ERROR;
   
  @@ -220,12 +222,14 @@
   }
   
   /* flush channel */
  -static int hook_flush(l2_context_t *ctx, l2_channel_t *downstream)
  +static int hook_flush(l2_context_t *ctx, l2_channel_t *ch)
   {
  +    l2_channel_t *downstream;
  +
       /* NOP for this channel, because Unix I/O sockets are unbuffered! */
   
       /* optionally flush downstream channel, too */
  -    if (downstream != NULL)
  +    if ((downstream = l2_channel_downstream(ch)) != NULL)
           if (l2_channel_flush(downstream) == L2_ERROR)
               return L2_ERROR;
   
  @@ -233,12 +237,13 @@
   }
   
   /* close channel */
  -static int hook_close(l2_context_t *ctx, l2_channel_t *downstream)
  +static int hook_close(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_socket_t *cfg;
  +    l2_channel_t *downstream;
   
       /* optionally close downstream channel, too */
  -    if (downstream != NULL)
  +    if ((downstream = l2_channel_downstream(ch)) != NULL)
           if (l2_channel_close(downstream) == L2_ERROR)
               return L2_ERROR;
   
  @@ -256,7 +261,7 @@
   }
   
   /* destroy channel */
  -static int hook_destroy(l2_context_t *ctx)
  +static int hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
   {
       /* parameter checks */
       if (ctx->vp == NULL) 
  @@ -270,6 +275,7 @@
   
   /* exported channel handler structure */
   l2_handler_t l2_handler_socket = {
  +    L2_CHANNEL_OUTPUT,
       hook_create,
       hook_configure,
       hook_open,
  Index: ossp-pkg/l2/l2_ch_syslog.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 l2_ch_syslog.c
  --- ossp-pkg/l2/l2_ch_syslog.c	2001/09/04 13:52:59	1.9
  +++ ossp-pkg/l2/l2_ch_syslog.c	2001/09/04 15:41:17	1.10
  @@ -42,7 +42,7 @@
   } l2_ch_syslog_t;
   
   /* create channel */
  -static int hook_create(l2_context_t *ctx)
  +static int hook_create(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_syslog_t *cfg;
   
  @@ -64,7 +64,7 @@
   }
   
   /* configure channel */
  -static int hook_configure(l2_context_t *ctx, const char *fmt, va_list ap)
  +static int hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
       l2_ch_syslog_t *cfg;
       l2_param_t pa[3];
  @@ -87,9 +87,10 @@
   }
   
   /* open channel */
  -static int hook_open(l2_context_t *ctx, l2_channel_t *downstream)
  +static int hook_open(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_syslog_t *cfg;
  +    l2_channel_t *downstream;
   
       /* parameter checks */
       if ((cfg = (l2_ch_syslog_t *)ctx->vp) == NULL)
  @@ -100,7 +101,7 @@
       setlogmask(cfg->iMaskpri);
   
       /* optionally open downstream channel, too */
  -    if (downstream != NULL)
  +    if ((downstream = l2_channel_downstream(ch)) != NULL)
           if (l2_channel_open(downstream) == L2_ERROR)
               return L2_ERROR;
   
  @@ -108,10 +109,11 @@
   }
   
   /* write to channel */
  -static int hook_write(l2_context_t *ctx, l2_channel_t *downstream, 
  +static int hook_write(l2_context_t *ctx, l2_channel_t *ch, 
                         const char *buf, size_t buf_size)
   {
       l2_ch_syslog_t *cfg;
  +    l2_channel_t *downstream;
   
       /* parameter checks */
       if ((cfg = (l2_ch_syslog_t *)ctx->vp) == NULL)
  @@ -121,7 +123,7 @@
       syslog(cfg->iPriority, buf);
   
       /* optionally write to downstream channel, too */
  -    if (downstream != NULL)
  +    if ((downstream = l2_channel_downstream(ch)) != NULL)
           if (l2_channel_write(downstream, buf, buf_size) == L2_ERROR)
               return L2_ERROR;
   
  @@ -129,12 +131,14 @@
   }
   
   /* flush channel */
  -static int hook_flush(l2_context_t *ctx, l2_channel_t *downstream)
  +static int hook_flush(l2_context_t *ctx, l2_channel_t *ch)
   {
  +    l2_channel_t *downstream;
  +
       /* Noop for this channel, because syslog entries are unbuffered */
   
       /* optionally flush downstream channel, too */
  -    if (downstream != NULL)
  +    if ((downstream = l2_channel_downstream(ch)) != NULL)
           if (l2_channel_flush(downstream) == L2_ERROR)
               return L2_ERROR;
   
  @@ -142,12 +146,13 @@
   }
   
   /* close channel */
  -static int hook_close(l2_context_t *ctx, l2_channel_t *downstream)
  +static int hook_close(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_syslog_t *cfg;
  +    l2_channel_t *downstream;
   
       /* optionally close downstream channel, too */
  -    if (downstream != NULL)
  +    if ((downstream = l2_channel_downstream(ch)) != NULL)
           if (l2_channel_close(downstream) == L2_ERROR)
               return L2_ERROR;
   
  @@ -162,7 +167,7 @@
   }
   
   /* destroy channel */
  -static int hook_destroy(l2_context_t *ctx)
  +static int hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
   {
       /* parameter checks */
       if (ctx->vp == NULL) 
  @@ -176,6 +181,7 @@
   
   /* exported channel handler structure */
   l2_handler_t l2_handler_syslog = {
  +    L2_CHANNEL_OUTPUT,
       hook_create,
       hook_configure,
       hook_open,
  Index: ossp-pkg/l2/l2_channel.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 l2_channel.c
  --- ossp-pkg/l2/l2_channel.c	2001/09/04 13:52:59	1.11
  +++ ossp-pkg/l2/l2_channel.c	2001/09/04 15:41:17	1.12
  @@ -45,24 +45,13 @@
       ch->downstream = NULL;
       memset(&ch->context, 0, sizeof(l2_context_t));
       memcpy(&ch->handler, h, sizeof(l2_handler_t));
  -    if (ch->handler.create(&ch->context) == L2_ERROR) {
  +    if (ch->handler.create(&ch->context, ch) == L2_ERROR) {
           free(ch);
           return NULL;
       }
       return ch;
   }
   
  -l2_result_t l2_channel_stack(l2_channel_t *ch, l2_channel_t *chTop)
  -{
  -    if (ch == NULL || chTop == NULL)
  -        return L2_ERROR;
  -    if (   ch->state    != L2_CHSTATE_CREATED
  -        || chTop->state != L2_CHSTATE_CREATED)
  -        return L2_ERROR;
  -    chTop->downstream = ch;
  -    return L2_OK;
  -}
  -
   l2_result_t l2_channel_configure(l2_channel_t *ch, const char *fmt, ...)
   {
       l2_result_t rv;
  @@ -73,7 +62,7 @@
       if (ch->state != L2_CHSTATE_CREATED)
           return L2_ERROR;
       va_start(ap, fmt);
  -    rv = ch->handler.configure(&ch->context, fmt, ap);
  +    rv = ch->handler.configure(&ch->context, ch, fmt, ap);
       va_end(ap);
       return rv;
   }
  @@ -90,7 +79,7 @@
           ch = ch->downstream;
       if (ch == NULL)
           return L2_ERROR;
  -    rv = ch->handler.open(&ch->context, ch->downstream);
  +    rv = ch->handler.open(&ch->context, ch);
       if (rv == L2_OK)
           ch->state = L2_CHSTATE_OPENED;
       return rv;
  @@ -112,7 +101,7 @@
           ch = ch->downstream;
       if (ch == NULL)
           return L2_ERROR;
  -    rv = ch->handler.write(&ch->context, ch->downstream, buf, bufsize);
  +    rv = ch->handler.write(&ch->context, ch, buf, bufsize);
       return rv;
   }
   
  @@ -128,7 +117,7 @@
           ch = ch->downstream;
       if (ch == NULL)
           return L2_ERROR;
  -    rv = ch->handler.flush(&ch->context, ch->downstream);
  +    rv = ch->handler.flush(&ch->context, ch);
       return rv;
   }
   
  @@ -144,7 +133,7 @@
           ch = ch->downstream;
       if (ch == NULL)
           return L2_ERROR;
  -    rv = ch->handler.close(&ch->context, ch->downstream);
  +    rv = ch->handler.close(&ch->context, ch);
       if (rv == L2_OK)
           ch->state = L2_CHSTATE_CREATED;
       return rv;
  @@ -162,10 +151,37 @@
       while (ch != NULL && ch->handler.destroy == NULL)
           ch = ch->downstream;
       if (ch != NULL)
  -        rv = ch->handler.destroy(&ch->context);
  +        rv = ch->handler.destroy(&ch->context, ch);
       else
           rv = L2_OK;
       free(ch);
       return rv;
  +}
  +
  +l2_result_t l2_channel_stack(l2_channel_t *ch, l2_channel_t *chTop)
  +{
  +    if (ch == NULL || chTop == NULL)
  +        return L2_ERROR;
  +    if (   ch->state    != L2_CHSTATE_CREATED
  +        || chTop->state != L2_CHSTATE_CREATED)
  +        return L2_ERROR;
  +    if (chTop->handler.type != L2_CHANNEL_FILTER)
  +        return L2_ERROR;
  +    chTop->downstream = ch;
  +    return L2_OK;
  +}
  +
  +l2_channel_t *l2_channel_downstream(l2_channel_t *ch)
  +{
  +    if (ch == NULL)
  +        return NULL;
  +    return ch->downstream;
  +}
  +
  +l2_chtype_t l2_channel_type(l2_channel_t *ch)
  +{
  +    if (ch == NULL)
  +        return NULL;
  +    return ch->handler.type;
   }
   

From ossp-cvs-owner@ossp.org  Tue Sep  4 17:52:50 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f84Dr1m98740; Tue, 4 Sep 2001 15:53:01 +0200 (CEST)
Date: Tue, 4 Sep 2001 15:53:01 +0200 (CEST)
Message-Id: <200109041353.f84Dr1m98740@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 Makefile.in l2.h l2_ch_buffer.c l2_ch_file.c l...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-Sep-2001 15:53:01
  Branch: HEAD                             Handle: 2001090414525900

  Added files:
    ossp-pkg/l2             l2_ut_format.c l2_ut_param.c
  Modified files:
    ossp-pkg/l2             Makefile.in l2.h l2_ch_buffer.c l2_ch_file.c
                            l2_ch_socket.c l2_ch_syslog.c l2_channel.c l2_p.h
                            l2_stream.c

  Log:
    Wohhooooo! Here comes the underlying message formatting support:
    
    1. renamed l2_channel_setparam() to l2_util_setparam() because it
       is just a utility function and is not tied to any channel.
    
    2. moved l2_util_setparam() to its own l2_ut_param.c source file.
    
    3. added l2_ut_format.c which contains a slightly adjusted version
       of Str's str_format() stuff under the name l2_util_format().
    
    4. use l2_util_format() in l2_stream.c instead of vsnprintf()
       and this way finally support l2_formatter_t callbacks.
    
    5. cleanup adjustments to the l2_stream_formatter() API.
    
    Let's rock...

  Summary:
    Revision    Changes     Path
    1.11        +37 -2      ossp-pkg/l2/Makefile.in
    1.13        +12 -11     ossp-pkg/l2/l2.h
    1.10        +1  -1      ossp-pkg/l2/l2_ch_buffer.c
    1.9         +1  -1      ossp-pkg/l2/l2_ch_file.c
    1.7         +1  -1      ossp-pkg/l2/l2_ch_socket.c
    1.9         +1  -1      ossp-pkg/l2/l2_ch_syslog.c
    1.11        +0  -70     ossp-pkg/l2/l2_channel.c
    1.10        +42 -1      ossp-pkg/l2/l2_p.h
    1.8         +45 -8      ossp-pkg/l2/l2_stream.c
    1.1         +1165 -0    ossp-pkg/l2/l2_ut_format.c
    1.1         +104 -0     ossp-pkg/l2/l2_ut_param.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 Makefile.in
  --- ossp-pkg/l2/Makefile.in	2001/09/03 17:23:48	1.10
  +++ ossp-pkg/l2/Makefile.in	2001/09/04 13:52:59	1.11
  @@ -73,7 +73,9 @@
       l2_ch_null.lo \
       l2_ch_filter.lo \
       l2_ch_prefix.lo \
  -    l2_ch_buffer.lo
  +    l2_ch_buffer.lo \
  +    l2_ut_format.lo \
  +    l2_ut_param.lo
   
   #   file containing the official version information
   _VERSION_FILE = \
  @@ -215,6 +217,7 @@
   	$(RM) ltmain.sh libtool.m4
   	$(RM) shtool
   	$(RM) l2-config.1
  +	$(RM) l2_config.h.in
   	$(RM) l2.3
   	$(RM) l2++.3
   
  @@ -242,7 +245,7 @@
   	cp Makefile.in Makefile.in.bak \
   	&& sed -ne '1,/^# DO NOT REMOVE/p' Makefile.in > Makefile.new \
   	&& $(CC) -MM $(CPPFLAGS) $(CFLAGS) *.c |\
  -	   sed -e 's/^\(pth_.*\)\.o:/\1.lo:/' >> Makefile.new \
  +	   sed -e 's/^\(l2_.*\)\.o:/\1.lo:/' >> Makefile.new \
   	&& cp Makefile.new Makefile.in
   	&& rm -f Makefile.new
   
  @@ -266,3 +269,35 @@
   l2_stream.o: l2_stream.c l2.h l2_p.h
   l2_test.o: l2_test.c l2.h
   l2_version.o: l2_version.c l2_version.c
  +l2_ch_buffer.o: l2_ch_buffer.c l2.h l2_p.h
  +l2_ch_fd.o: l2_ch_fd.c l2.h l2_p.h
  +l2_ch_file.o: l2_ch_file.c l2.h l2_p.h
  +l2_ch_filter.o: l2_ch_filter.c l2.h l2_p.h
  +l2_ch_null.o: l2_ch_null.c l2.h l2_p.h
  +l2_ch_pipe.o: l2_ch_pipe.c l2.h l2_p.h
  +l2_ch_prefix.o: l2_ch_prefix.c l2.h l2_p.h
  +l2_ch_socket.o: l2_ch_socket.c l2.h l2_p.h
  +l2_ch_syslog.o: l2_ch_syslog.c l2.h l2_p.h
  +l2_channel.o: l2_channel.c l2.h l2_p.h
  +l2_epreuve.o: l2_epreuve.c l2.h l2_p.h
  +l2_stream.o: l2_stream.c l2.h l2_p.h
  +l2_test.o: l2_test.c l2.h
  +l2_ut_format.o: l2_ut_format.c l2.h l2_p.h
  +l2_ut_param.o: l2_ut_param.c l2.h l2_p.h
  +l2_version.o: l2_version.c l2_version.c
  +l2_ch_buffer.lo: l2_ch_buffer.c l2.h l2_p.h
  +l2_ch_fd.lo: l2_ch_fd.c l2.h l2_p.h
  +l2_ch_file.lo: l2_ch_file.c l2.h l2_p.h
  +l2_ch_filter.lo: l2_ch_filter.c l2.h l2_p.h
  +l2_ch_null.lo: l2_ch_null.c l2.h l2_p.h
  +l2_ch_pipe.lo: l2_ch_pipe.c l2.h l2_p.h
  +l2_ch_prefix.lo: l2_ch_prefix.c l2.h l2_p.h
  +l2_ch_socket.lo: l2_ch_socket.c l2.h l2_p.h
  +l2_ch_syslog.lo: l2_ch_syslog.c l2.h l2_p.h
  +l2_channel.lo: l2_channel.c l2.h l2_p.h
  +l2_epreuve.lo: l2_epreuve.c l2.h l2_p.h
  +l2_stream.lo: l2_stream.c l2.h l2_p.h
  +l2_test.lo: l2_test.c l2.h
  +l2_ut_format.lo: l2_ut_format.c l2.h l2_p.h
  +l2_ut_param.lo: l2_ut_param.c l2.h l2_p.h
  +l2_version.lo: l2_version.c l2_version.c
  Index: ossp-pkg/l2/l2.h
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 l2.h
  --- ossp-pkg/l2/l2.h	2001/09/03 13:43:33	1.12
  +++ ossp-pkg/l2/l2.h	2001/09/04 13:52:59	1.13
  @@ -132,13 +132,14 @@
   };
   
   /* type of formatter callback function */
  -typedef int (*l2_formatter_t)(
  -    l2_context_t *context, 
  -    const char   *name, 
  -    const char   *param, 
  -    char         *buf, 
  -    size_t        bufsize, 
  -    va_list       ap
  +typedef l2_result_t (*l2_formatter_t)(
  +    l2_context_t *ctx,      /* application context */
  +    const char    id,       /* input  arg: format string id ('x' of '%x') */
  +    const char   *param,    /* input  arg: format string parameter ('foo' of '%{foo}x') */
  +    char         *bufptr,   /* input  arg: pointer to output buffer */
  +    size_t        bufsize,  /* input  arg: maximum size of output buffer */
  +    size_t       *buflen,   /* ouput  arg: written characters in output buffer */
  +    va_list      *ap        /* in/out arg: variable argument pointer */
   );
   
   /* list of shipped (output) channel handlers */
  @@ -154,8 +155,6 @@
   extern l2_handler_t l2_handler_prefix;
   extern l2_handler_t l2_handler_buffer;
   
  -/* parameter operations */
  -
   /* channel operations */
   l2_channel_t *l2_channel_create   (l2_handler_t *h);
   l2_result_t   l2_channel_configure(l2_channel_t *ch, const char *fmt, ...);
  @@ -165,16 +164,18 @@
   l2_result_t   l2_channel_close    (l2_channel_t *ch);
   l2_result_t   l2_channel_destroy  (l2_channel_t *ch);
   l2_result_t   l2_channel_stack    (l2_channel_t *ch, l2_channel_t *chTop);
  -l2_result_t   l2_channel_setparams(l2_param_t p[], const char *fmt, va_list ap);
   
   /* stream operations */
   l2_stream_t  *l2_stream_create    (void);
   l2_result_t   l2_stream_channel   (l2_stream_t *st, l2_channel_t *ch, unsigned int levelmask);
  -l2_result_t   l2_stream_formatter (l2_stream_t *st, const char *name, l2_formatter_t cb, l2_context_t *ctx);
  +l2_result_t   l2_stream_formatter (l2_stream_t *st, char id, l2_formatter_t cb, l2_context_t *ctx);
   l2_result_t   l2_stream_levels    (l2_stream_t *st, unsigned int levelmask, unsigned int *levelmaskold);
   l2_result_t   l2_stream_log       (l2_stream_t *st, unsigned int log_level, const char *fmt, ...);
   l2_result_t   l2_stream_vlog      (l2_stream_t *st, unsigned int log_level, const char *fmt, va_list ap);
   l2_result_t   l2_stream_destroy   (l2_stream_t *st);
  +
  +/* utility operations */
  +l2_result_t   l2_util_setparams(l2_param_t p[], const char *fmt, va_list ap);
   
   #endif /* __L2_H__ */
   
  Index: ossp-pkg/l2/l2_ch_buffer.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 l2_ch_buffer.c
  --- ossp-pkg/l2/l2_ch_buffer.c	2001/09/02 15:37:48	1.9
  +++ ossp-pkg/l2/l2_ch_buffer.c	2001/09/04 13:52:59	1.10
  @@ -73,7 +73,7 @@
       /* feed and call generic parameter parsing engine */
       L2_PARAM_SET(pa[0], size, INT, &cfg->bufsize);
       L2_PARAM_END(pa[2]);
  -    rv = l2_channel_setparams(pa, fmt, ap);
  +    rv = l2_util_setparams(pa, fmt, ap);
       if (cfg->bufsize < 0) 
           return L2_ERROR;
       return rv;
  Index: ossp-pkg/l2/l2_ch_file.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 l2_ch_file.c
  --- ossp-pkg/l2/l2_ch_file.c	2001/09/03 13:37:00	1.8
  +++ ossp-pkg/l2/l2_ch_file.c	2001/09/04 13:52:59	1.9
  @@ -79,7 +79,7 @@
       L2_PARAM_SET(pa[1], append, INT,     &cfg->append);
       L2_PARAM_SET(pa[2], perm,   LONG,    &cfg->perm);
       L2_PARAM_END(pa[3]);
  -    rv = l2_channel_setparams(pa, fmt, ap);
  +    rv = l2_util_setparams(pa, fmt, ap);
   
       return rv;
   }
  Index: ossp-pkg/l2/l2_ch_socket.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 l2_ch_socket.c
  --- ossp-pkg/l2/l2_ch_socket.c	2001/09/02 14:38:51	1.6
  +++ ossp-pkg/l2/l2_ch_socket.c	2001/09/04 13:52:59	1.7
  @@ -129,7 +129,7 @@
       L2_PARAM_SET(pa[0], host, CHARPTR, &cfg->pszHost);
       L2_PARAM_SET(pa[1], port, INT,     &cfg->iPort);
       L2_PARAM_END(pa[2]);
  -    rv = l2_channel_setparams(pa, fmt, ap);
  +    rv = l2_util_setparams(pa, fmt, ap);
   
       return rv;
   }
  Index: ossp-pkg/l2/l2_ch_syslog.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 l2_ch_syslog.c
  --- ossp-pkg/l2/l2_ch_syslog.c	2001/08/26 13:05:41	1.8
  +++ ossp-pkg/l2/l2_ch_syslog.c	2001/09/04 13:52:59	1.9
  @@ -81,7 +81,7 @@
       L2_PARAM_SET(pa[1], priority, INT,     &cfg->iPriority);
       L2_PARAM_SET(pa[1], maskpriority, INT, &cfg->iMaskpri);
       L2_PARAM_END(pa[2]);
  -    rv = l2_channel_setparams(pa, fmt, ap);
  +    rv = l2_util_setparams(pa, fmt, ap);
   
       return rv;
   }
  Index: ossp-pkg/l2/l2_channel.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 l2_channel.c
  --- ossp-pkg/l2/l2_channel.c	2001/09/03 13:43:33	1.10
  +++ ossp-pkg/l2/l2_channel.c	2001/09/04 13:52:59	1.11
  @@ -169,73 +169,3 @@
       return rv;
   }
   
  -l2_result_t l2_channel_setparams(l2_param_t pa[], const char *fmt, va_list ap)
  -{
  -    const char *cpB, *cpE;
  -    const char *cpC, *cpG;
  -    int ok;
  -    int i; 
  -
  -    if (pa == NULL || fmt == NULL || ap == NULL)
  -        return L2_ERROR;
  -    cpE = fmt;
  -    while (*cpE != '\0') {
  -        /* determine begin of parameter name */
  -        cpB = cpE;
  -        while (*cpB == ',')
  -            cpB++;
  -
  -        /* determine end of parameter name */
  -        cpE = cpB;
  -        while (*cpE != ',' && *cpE != '\0')
  -            cpE++;
  -
  -        /* try to match with configured parameters */
  -        ok = FALSE;
  -        for (i = 0; pa[i].name != NULL; i++) {
  -            cpC = pa[i].name;
  -            cpG = cpB;
  -            while (*cpC != '\0' && cpG < cpE) {
  -                if (*cpC != *cpG)
  -                    break;
  -                cpC++;
  -                cpG++;
  -            }
  -            if (*cpC == '\0' && cpG == cpE) {
  -                /* parameter matched, so store value */
  -                switch (pa[i].type) {
  -                    case L2_TYPE_CHAR:
  -                        *(char *)(pa[i].store) = va_get(ap, char); 
  -                        break;
  -                    case L2_TYPE_SHORT:
  -                        *(short *)(pa[i].store) = va_get(ap, short); 
  -                        break;
  -                    case L2_TYPE_INT:
  -                        *(int *)(pa[i].store) = va_get(ap, int); 
  -                        break;
  -                    case L2_TYPE_LONG:
  -                        *(long *)(pa[i].store) = va_get(ap, long); 
  -                        break;
  -                    case L2_TYPE_FLOAT:
  -                        *(float *)(pa[i].store) = va_get(ap, float); 
  -                        break;
  -                    case L2_TYPE_DOUBLE:
  -                        *(double *)(pa[i].store) = va_get(ap, double); 
  -                        break;
  -                    case L2_TYPE_CHARPTR:
  -                        *(char **)(pa[i].store) = va_get(ap, charptr); 
  -                        break;
  -                    case L2_TYPE_VOIDPTR:
  -                        *(void **)(pa[i].store) = va_get(ap, voidptr); 
  -                        break;
  -                }
  -                ok = TRUE;
  -                break;
  -            }
  -        }
  -        if (!ok)
  -            return L2_ERROR;
  -    }
  -    return L2_OK;
  -}
  -
  Index: ossp-pkg/l2/l2_p.h
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 l2_p.h
  --- ossp-pkg/l2/l2_p.h	2001/09/03 13:43:33	1.9
  +++ ossp-pkg/l2/l2_p.h	2001/09/04 13:52:59	1.10
  @@ -57,7 +57,7 @@
   typedef struct {
       l2_formatter_t cb;
       void *ctx;
  -    char *name;
  +    char id;
   } l2_formatter_entry_t;
   
   struct l2_stream_st {
  @@ -85,6 +85,47 @@
   #define _va_type_recv_voidptr void *
   #define _va_type_cast_voidptr void *
   #define va_get(ap,type) (_va_type_cast_##type)va_arg((ap),_va_type_recv_##type)
  +
  +struct l2_util_format_st {
  +
  +    /* the output buffer */
  +    char *curpos;                        /* start of output buffer (first pos) */
  +    char *endpos;                        /* end   of output buffer (last pos)  */
  +
  +    /* callback for flushing the output buffer */
  +    int (*flush)(
  +        struct l2_util_format_st *spec   /* this l2_util_format_t specification */
  +    );
  +
  +    /* callback for formatting unknown %-constructs */
  +    void (*format)(
  +        struct l2_util_format_st *spec,  /* this l2_util_format_t specification */
  +        char *prefix_char,               /* output arg: prefix character */
  +        char *pad_char,                  /* output arg: padding character */
  +        char **s_buf,                    /* output arg: string buffer */
  +        size_t *s_len,                   /* output arg: string len */
  +        char *num_buf,                   /* input  arg: temporary buffer */
  +        int num_buf_size,                /* input  arg: temporary buffer len */
  +        char *extinfo,                   /* input  arg: extension information */
  +        char fmt_char,                   /* input  arg: current formatting character */ 
  +        va_list *ap                      /* in/out arg: variable argument pointer */
  +    );
  +
  +    /* arbitrary passed-through application data */
  +    union { 
  +        int i;                        
  +        long l; 
  +        double d; 
  +        void *vp; 
  +    } data[6];                           
  +};
  +typedef struct l2_util_format_st l2_util_format_t;
  +
  +int   l2_util_format     (l2_util_format_t *vbuff, const char *fmt, va_list ap);
  +int   l2_util_vsprintf   (char *s, size_t n, const char *fmt, va_list ap);
  +char *l2_util_vasprintf  (const char *fmt, va_list ap);
  +int   l2_util_sprintf    (char *s, size_t n, const char *fmt, ...);
  +char *l2_util_asprintf   (const char *fmt, ...);
   
   #endif /* __L2_P_H__ */
   
  Index: ossp-pkg/l2/l2_stream.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 l2_stream.c
  --- ossp-pkg/l2/l2_stream.c	2001/09/03 13:43:33	1.7
  +++ ossp-pkg/l2/l2_stream.c	2001/09/04 13:52:59	1.8
  @@ -61,17 +61,17 @@
       return L2_OK;
   }
   
  -l2_result_t l2_stream_formatter(l2_stream_t *st, const char *name, l2_formatter_t cb, l2_context_t *ctx)
  +l2_result_t l2_stream_formatter(l2_stream_t *st, char id, l2_formatter_t cb, l2_context_t *ctx)
   {
       int i;
   
  -    if (st == NULL || name == NULL || cb != NULL)
  +    if (st == NULL || id == '\0' || cb != NULL)
           return L2_ERROR;
       for (i = 0; i < L2_MAX_FORMATTERS && st->formatters[i].cb != NULL; i++)
           ;
       if (i == L2_MAX_FORMATTERS)
           return L2_ERROR;
  -    st->formatters[i].name = strdup(name);
  +    st->formatters[i].id   = id;
       st->formatters[i].ctx  = ctx;
       st->formatters[i].cb   = cb;
       return L2_OK;
  @@ -100,12 +100,45 @@
       return rv;
   }
   
  +static int l2_stream_vlog_flush(l2_util_format_t *vfmt)
  +{
  +    return -1;
  +}
  +
  +static void l2_stream_vlog_format(
  +    l2_util_format_t *vfmt,
  +    char *cPrefix, char *cPad, char **cppOut, size_t *npOutLen,
  +    char *cpBuf, int nBufLenMax, char *cpParam, char cId, va_list *apArgs)
  +{
  +    l2_stream_t *st = (l2_stream_t *)(vfmt->data[0].vp);
  +    int i;
  +
  +    /* init result */
  +    *cPrefix = '\0';
  +    *cPad = ' ';
  +    *cppOut = NULL;
  +    *npOutLen = 0;
  +
  +    /* iterate over all configured formatters */
  +    for (i = 0; i < L2_MAX_FORMATTERS && st->formatters[i].cb != NULL; i++) {
  +        if (st->formatters[i].id == cId) {
  +            if (st->formatters[i].cb(st->formatters[i].ctx, cId, cpParam, 
  +                                     cpBuf, nBufLenMax, npOutLen, apArgs) == L2_OK) {
  +                *cppOut = cpBuf;
  +                break;
  +            }
  +        }
  +    }
  +    return;
  +}
  +
   l2_result_t l2_stream_vlog(l2_stream_t *st, unsigned int level, const char *fmt, va_list ap)
   {
       int i;
       int l, j;
       size_t len;
       l2_result_t rv;
  +    l2_util_format_t vfmt;
   
       if (st == NULL || fmt == NULL || ap == NULL)
           return L2_ERROR;
  @@ -119,9 +152,15 @@
       /* check whether level is globally enabled */
       if (!(st->levelmask & level))
           return L2_OK;
  -
  -    /* XXX use st->formatter!! XXX */
  -    len = vsnprintf(st->message, L2_MAX_MSGSIZE, fmt, ap);
  +    
  +    /* format message */
  +    vfmt.curpos = st->message;
  +    vfmt.endpos = st->message+ L2_MAX_MSGSIZE;
  +    vfmt.data[0].vp = st;
  +    vfmt.flush  = l2_stream_vlog_flush;
  +    vfmt.format = l2_stream_vlog_format;
  +    if ((len = l2_util_format(&vfmt, fmt, ap)) == -1)
  +        return L2_ERROR;
   
       rv = L2_OK;
       for (i = 0; i < L2_MAX_CHANNELS && st->channels[i].ch != NULL; i++) {
  @@ -141,8 +180,6 @@
           return L2_ERROR;
       for (i = 0; i < L2_MAX_CHANNELS && st->channels[i].ch != NULL; i++)
           l2_channel_destroy(st->channels[i].ch);
  -    for (i = 0; i < L2_MAX_FORMATTERS && st->formatters[i].cb != NULL; i++)
  -        free(st->formatters[i].name);
       free(st);
       return L2_OK;
   }
  Index: ossp-pkg/l2/l2_ut_format.c
  ============================================================
  $ cvs update -p -r1.1 l2_ut_format.c
  /*
  **  L2 - OSSP Logging Library
  **  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP L2, a flexible logging library which
  **  can be found at http://www.ossp.org/pkg/l2/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  l2_ut_format.c: printf(3)-style formatting
  */
  
  /*
   * This is a generic printf-style formatting code which is based on
   * Apache's ap_snprintf which it turn is based on and used with the
   * permission of, the SIO stdio-replacement strx_* functions by Panos
   * Tsirigotis <panos@alumni.cs.colorado.edu> for xinetd. The IEEE
   * floating point formatting routines are derived from an anchient
   * FreeBSD version which took it from GNU libc-4.6.27 and modified it
   * to be thread safe. The whole code was finally cleaned up, stripped
   * and extended by Ralf S. Engelschall for use inside the Str library.
   * Especially any Apache and network specific kludges were removed again
   * and instead the formatting engine now can be extended by the caller
   * on-the-fly. It was then finally adjusted to be stand-alone for use
   * inside OSSP L2.
   */
  
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   */
  
  #include <stdio.h>
  #include <stdlib.h>
  #include <stdarg.h>
  #include <string.h>
  #include <ctype.h>
  #include <math.h>
  
  #include "l2.h"
  #include "l2_p.h"
  
  /* types which are locally use */
  typedef long                 long_int;
  typedef unsigned long      u_long_int;
  #if defined(SIZEOF_LONG_LONG) && (SIZEOF_LONG_LONG > 0)
  typedef long long            quad_int;
  typedef unsigned long long u_quad_int;
  #else
  typedef long                 quad_int;
  typedef unsigned long      u_quad_int;
  #endif
  
  /* a few handy defines */
  #ifndef NUL
  #define NUL '\0'
  #endif
  #ifndef NULL
  #define NULL ((void *)0)
  #endif
  #ifndef FALSE
  #define FALSE (0)
  #endif
  #ifndef TRUE
  #define TRUE (!FALSE)
  #endif
  #define S_NULL          "(NULL)"
  #define S_NULL_LEN      6
  #define FLOAT_DIGITS    6
  #define EXPONENT_LENGTH 10
  
  /* NUM_BUF_SIZE is the size of the buffer used for arithmetic 
     conversions. This is a magic number; do NOT decrease it! */
  #define NUM_BUF_SIZE    512
  #define NDIG            80
  
  /* compatibility */
  #if !defined(HAVE_ISNAN)
  #define isnan(d) (0)
  #endif
  #if !defined(HAVE_ISINF)
  #define isinf(d) (0)
  #endif
  
  /* explicit support for unsigned char based ctype stuff */
  #define l2_util_isalpha(c)  (isalpha(((unsigned char)(c))))
  #define l2_util_isdigit(c)  (isdigit(((unsigned char)(c))))
  #define l2_util_isxdigit(c) (isxdigit(((unsigned char)(c))))
  #define l2_util_islower(c)  (islower(((unsigned char)(c))))
  #define l2_util_tolower(c)  (tolower((unsigned char)(c)))
  
  /* 
   * Convert decimal number to its string representation. The number of
   * digits is specified by ndigit decpt is set to the position of the
   * decimal point sign is set to 0 for positive, 1 for negative. buf must
   * have at least NDIG bytes.
   */
  
  #define l2_util_ecvt(arg,ndigits,decpt,sign,buf) \
          l2_util_cvt((arg), (ndigits), (decpt), (sign), 1, (buf))
  
  #define l2_util_fcvt(arg,ndigits,decpt,sign,buf) \
          l2_util_cvt((arg), (ndigits), (decpt), (sign), 0, (buf))
  
  static char *
  l2_util_cvt(
      double arg, 
      int ndigits, 
      int *decpt, 
      int *sign, 
      int eflag,
      char *buf)
  {
      register int r2;
      double fi, fj;
      register char *p, *p1;
  
      if (ndigits >= NDIG - 1)
          ndigits = NDIG - 2;
      r2 = 0;
      *sign = FALSE;
      p = &buf[0];
      if (arg < 0) {
          *sign = TRUE;
          arg = -arg;
      }
      arg = modf(arg, &fi);
      p1 = &buf[NDIG];
  
      /* Do integer part */
      if (fi != 0) {
          p1 = &buf[NDIG];
          while (fi != 0 && p1 > &buf[0]) {
              fj = modf(fi / 10, &fi);
              *--p1 = (int)((fj + .03) * 10) + '0';
              r2++;
          }
          while (p1 < &buf[NDIG])
              *p++ = *p1++;
      }
      else if (arg > 0) {
          while ((fj = arg * 10) < 1) {
              arg = fj;
              r2--;
          }
      }
      p1 = &buf[ndigits];
      if (eflag == 0)
          p1 += r2;
      *decpt = r2;
      if (p1 < &buf[0]) {
          buf[0] = NUL;
          return (buf);
      }
      while (p <= p1 && p < &buf[NDIG]) {
          arg *= 10;
          arg = modf(arg, &fj);
          *p++ = (int) fj + '0';
      }
      if (p1 >= &buf[NDIG]) {
          buf[NDIG - 1] = NUL;
          return (buf);
      }
      p = p1;
      *p1 += 5;
      while (*p1 > '9') {
          *p1 = '0';
          if (p1 > buf)
              ++ * --p1;
          else {
              *p1 = '1';
              (*decpt)++;
              if (eflag == 0) {
                  if (p > buf)
                      *p = '0';
                  p++;
              }
          }
      }
      *p = NUL;
      return buf;
  }
  
  static char *
  l2_util_gcvt(
      double number, 
      int ndigit, 
      char *buf, 
      int altform)
  {
      int sign;
      int decpt;
      register char *p1, *p2;
      register int i;
      char buf1[NDIG];
  
      p1 = l2_util_ecvt(number, ndigit, &decpt, &sign, buf1);
      p2 = buf;
      if (sign)
          *p2++ = '-';
      for (i = ndigit - 1; i > 0 && p1[i] == '0'; i--)
          ndigit--;
      if ((decpt >= 0 && decpt - ndigit > 4)
          || (decpt < 0 && decpt < -3)) { /* use E-style */
          decpt--;
          *p2++ = *p1++;
          *p2++ = '.';
          for (i = 1; i < ndigit; i++)
              *p2++ = *p1++;
          *p2++ = 'e';
          if (decpt < 0) {
              decpt = -decpt;
              *p2++ = '-';
          }
          else
              *p2++ = '+';
          if (decpt / 100 > 0)
              *p2++ = decpt / 100 + '0';
          if (decpt / 10 > 0)
              *p2++ = (decpt % 100) / 10 + '0';
          *p2++ = decpt % 10 + '0';
      }
      else {
          if (decpt <= 0) {
              if (*p1 != '0')
                  *p2++ = '.';
              while (decpt < 0) {
                  decpt++;
                  *p2++ = '0';
              }
          }
          for (i = 1; i <= ndigit; i++) {
              *p2++ = *p1++;
              if (i == decpt)
                  *p2++ = '.';
          }
          if (ndigit < decpt) {
              while (ndigit++ < decpt)
                  *p2++ = '0';
              *p2++ = '.';
          }
      }
      if (p2[-1] == '.' && !altform)
          p2--;
      *p2 = NUL;
      return buf;
  }
  
  /*
   * The INS_CHAR macro inserts a character in the buffer and flushes the
   * buffer if necessary. It uses the char pointers sp and bep: sp points
   * to the next available character in the buffer, bep points to the
   * end-of-buffer+1. While using this macro, note that the nextb pointer
   * is NOT updated. NOTE: Evaluation of the c argument should not have
   * any side-effects
   */
  #define INS_CHAR(c, sp, bep, cc) {  \
      if (sp >= bep) {                \
          vbuff->curpos = sp;         \
          if (vbuff->flush(vbuff))    \
              return -1;              \
          sp = vbuff->curpos;         \
          bep = vbuff->endpos;        \
      }                               \
      *sp++ = (c);                    \
      cc++;                           \
  }
  
  /*
   * Convert a string to decimal value 
   */
  #define NUM(c) ((c) - '0')
  #define STR_TO_DEC(str, num) {    \
      num = NUM(*str++);            \
      while (l2_util_isdigit(*(str))) { \
          num *= 10 ;               \
          num += NUM(*str++) ;      \
      }                             \
  }
       
  /*
   * This macro does zero padding so that the precision requirement is
   * satisfied. The padding is done by adding '0's to the left of the
   * string that is going to be printed.
   */
  #define FIX_PRECISION(adjust, precision, s, s_len)  \
      if (adjust) {                                   \
          while (s_len < precision) {                 \
              *--s = '0';                             \
              s_len++;                                \
          }                                           \
      }
  
  /*
   * This macro does padding. 
   * The padding is done by printing the character ch.
   */
  #define PAD(width, len, ch) \
      do {                            \
          INS_CHAR(ch, sp, bep, cc);  \
          width-- ;                   \
      } while (width > len)
  
  /*
   * Prefix the character ch to the string str
   * Increase length. Set the has_prefix flag.
   */
  #define PREFIX(str, length, ch) \
      *--str = ch;                \
      length++;                   \
      has_prefix = TRUE
  
  /*
   * Convert num to its decimal format.
   * Return value:
   *   - a pointer to a string containing the number (no sign)
   *   - len contains the length of the string
   *   - is_negative is set to TRUE or FALSE depending on the sign
   *     of the number (always set to FALSE if is_unsigned is TRUE)
   * The caller provides a buffer for the string: that is the buf_end argument
   * which is a pointer to the END of the buffer + 1 (i.e. if the buffer
   * is declared as buf[ 100 ], buf_end should be &buf[ 100 ])
   * Note: we have 2 versions. One is used when we need to use quads
   * (conv_10_quad), the other when we don't (conv_10). We're assuming the
   * latter is faster.
   */
  static char *
  conv_10(
      register long_int num, 
      register int is_unsigned,
      register int *is_negative, 
      char *buf_end,
      register size_t *len)
  {
      register char *p = buf_end;
      register u_long_int magnitude;
  
      if (is_unsigned) {
          magnitude = (u_long_int)num;
          *is_negative = FALSE;
      }
      else {
          *is_negative = (num < 0);
          /* On a 2's complement machine, negating the most negative integer 
             results in a number that cannot be represented as a signed integer.
             Here is what we do to obtain the number's magnitude:
                  a. add 1 to the number
                  b. negate it (becomes positive)
                  c. convert it to unsigned
                  d. add 1 */
          if (*is_negative) {
              long_int t = num + 1;
  
              magnitude = ((u_long_int) - t) + 1;
          }
          else
              magnitude = (u_long_int)num;
      }
      /* We use a do-while loop so that we write at least 1 digit */
      do {
          register u_long_int new_magnitude = magnitude / 10;
          *--p = (char) (magnitude - new_magnitude * 10 + '0');
          magnitude = new_magnitude;
      } while (magnitude);
      *len = (int)(buf_end - p);
      return p;
  }
  
  static char *
  conv_10_quad(
      quad_int num, 
      register int is_unsigned,
      register int *is_negative, 
      char *buf_end,
      register size_t *len)
  {
      register char *p = buf_end;
      u_quad_int magnitude;
  
      if (is_unsigned) {
          magnitude = (u_quad_int)num;
          *is_negative = FALSE;
      }
      else {
          *is_negative = (num < 0);
          /* On a 2's complement machine, negating the most negative integer 
             result in a number that cannot be represented as a signed integer.
             Here is what we do to obtain the number's magnitude:
                  a. add 1 to the number
                  b. negate it (becomes positive)
                  c. convert it to unsigned
                  d. add 1 */
          if (*is_negative) {
              quad_int t = num + 1;
              magnitude = ((u_quad_int) - t) + 1;
          }
          else
              magnitude = (u_quad_int)num;
      }
      /* We use a do-while loop so that we write at least 1 digit */
      do {
          u_quad_int new_magnitude = magnitude / 10;
          *--p = (char)(magnitude - new_magnitude * 10 + '0');
          magnitude = new_magnitude;
      } while (magnitude);
      *len = (int)(buf_end - p);
      return p;
  }
  
  /*
   * Convert a floating point number to a string formats 'f', 'e' or 'E'.
   * The result is placed in buf, and len denotes the length of the string
   * The sign is returned in the is_negative argument (and is not placed
   * in buf).
   */
  static char *
  conv_fp(
      register char format, 
      register double num,
      int add_dp, 
      int precision, 
      int *is_negative,
      char *buf, 
      size_t *len)
  {
      register char *s = buf;
      register char *p;
      int decimal_point;
      char buf1[NDIG];
  
      if (format == 'f')
          p = l2_util_fcvt(num, precision, &decimal_point, is_negative, buf1);
      else  /* either e or E format */
          p = l2_util_ecvt(num, precision + 1, &decimal_point, is_negative, buf1);
  
      /* Check for Infinity and NaN */
      if (l2_util_isalpha(*p)) {
          *len = strlen(strcpy(buf, p));
          *is_negative = FALSE;
          return (buf);
      }
  
      if (format == 'f') {
          if (decimal_point <= 0) {
              *s++ = '0';
              if (precision > 0) {
                  *s++ = '.';
                  while (decimal_point++ < 0)
                      *s++ = '0';
              }
              else if (add_dp)
                  *s++ = '.';
          }
          else {
              while (decimal_point-- > 0)
                  *s++ = *p++;
              if (precision > 0 || add_dp)
                  *s++ = '.';
          }
      }
      else {
          *s++ = *p++;
          if (precision > 0 || add_dp)
              *s++ = '.';
      }
  
      /* copy the rest of p, the NUL is NOT copied */
      while (*p)
          *s++ = *p++;
  
      if (format != 'f') {
          char temp[EXPONENT_LENGTH];     /* for exponent conversion */
          size_t t_len;
          int exponent_is_negative;
  
          *s++ = format;          /* either e or E */
          decimal_point--;
          if (decimal_point != 0) {
              p = conv_10((long_int) decimal_point, FALSE, &exponent_is_negative, 
                          &temp[EXPONENT_LENGTH], &t_len);
              *s++ = exponent_is_negative ? '-' : '+';
              /* Make sure the exponent has at least 2 digits */
              if (t_len == 1)
                  *s++ = '0';
              while (t_len--)
                  *s++ = *p++;
          }
          else {
              *s++ = '+';
              *s++ = '0';
              *s++ = '0';
          }
      }
  
      *len = (int)(s - buf);
      return buf;
  }
  
  /*
   * Convert num to a base X number where X is a power of 2. nbits determines X.
   * For example, if nbits is 3, we do base 8 conversion
   * Return value:
   *      a pointer to a string containing the number
   * The caller provides a buffer for the string: that is the buf_end
   * argument which is a pointer to the END of the buffer + 1 (i.e. if the
   * buffer is declared as buf[100], buf_end should be &buf[100]) As with
   * conv_10, we have a faster version which is used when the number isn't
   * quad size.
   */
  
  static const char low_digits[]   = "0123456789abcdef";
  static const char upper_digits[] = "0123456789ABCDEF";
  
  static char *
  conv_p2(
      register u_long_int num, 
      register int nbits,
      char format, 
      char *buf_end, 
      register size_t *len)
  {
      register int mask = (1 << nbits) - 1;
      register char *p = buf_end;
      register const char *digits = (format == 'X') ? upper_digits : low_digits;
  
      do {
          *--p = digits[num & mask];
          num >>= nbits;
      } while (num);
      *len = (int)(buf_end - p);
      return p;
  }
  
  static char *
  conv_p2_quad(
      u_quad_int num, 
      register int nbits,
      char format, 
      char *buf_end, 
      register size_t *len)
  {
      register int mask = (1 << nbits) - 1;
      register char *p = buf_end;
      register const char *digits = (format == 'X') ? upper_digits : low_digits;
  
      do {
          *--p = digits[num & mask];
          num >>= nbits;
      } while (num);
      *len = (size_t)(buf_end - p);
      return p;
  }
  
  /* 
   * l2_util_format(), the generic printf-style formatting routine
   * and heart of this piece of source.
   */
  int 
  l2_util_format(
      l2_util_format_t *vbuff, 
      const char *fmt, 
      va_list ap)
  {
      register char *sp;
      register char *bep;
      register int cc = 0;
      register int i;
  
      char *s = NULL;
      char *q;
      size_t s_len;
  
      register int min_width = 0;
      int precision = 0;
      enum { LEFT, RIGHT } adjust;
      char pad_char;
      char prefix_char;
  
      double fp_num;
      quad_int i_quad = (quad_int)0;
      u_quad_int ui_quad;
      long_int i_num = (long_int)0;
      u_long_int ui_num;
  
      char num_buf[NUM_BUF_SIZE];
      char char_buf[2]; /* for printing %% and %<unknown> */
  
      enum var_type_enum { IS_QUAD, IS_LONG, IS_SHORT, IS_INT };
      enum var_type_enum var_type = IS_INT;
  
      int alternate_form;
      int print_sign;
      int print_blank;
      int adjust_precision;
      int adjust_width;
      int is_negative;
  
      char extinfo[20];
  
      sp = vbuff->curpos;
      bep = vbuff->endpos;
  
      while (*fmt != NUL) {
          if (*fmt != '%') {
              INS_CHAR(*fmt, sp, bep, cc);
          }
          else {
              /*
               * Default variable settings
               */
              adjust = RIGHT;
              alternate_form = print_sign = print_blank = FALSE;
              pad_char = ' ';
              prefix_char = NUL;
              extinfo[0] = NUL;
  
              fmt++;
  
              /*
               * Try to avoid checking for flags, width or precision
               */
              if (!l2_util_islower(*fmt)) {
                  /*
                   * Recognize flags: -, #, BLANK, +
                   */
                  for (;; fmt++) {
                      if (*fmt == '{') {
                          i = 0;
                          for (fmt++; *fmt != '}' && *fmt != NUL; fmt++) {
                              if (i < sizeof(extinfo)-1)
                                  extinfo[i++] = *fmt;
                          }
                          extinfo[i] = NUL;
                      }
                      else if (*fmt == '-')
                          adjust = LEFT;
                      else if (*fmt == '+')
                          print_sign = TRUE;
                      else if (*fmt == '#')
                          alternate_form = TRUE;
                      else if (*fmt == ' ')
                          print_blank = TRUE;
                      else if (*fmt == '0')
                          pad_char = '0';
                      else
                          break;
                  }
  
                  /*
                   * Check if a width was specified
                   */
                  if (l2_util_isdigit(*fmt)) {
                      STR_TO_DEC(fmt, min_width);
                      adjust_width = TRUE;
                  }
                  else if (*fmt == '*') {
                      min_width = va_arg(ap, int);
                      fmt++;
                      adjust_width = TRUE;
                      if (min_width < 0) {
                          adjust = LEFT;
                          min_width = -min_width;
                      }
                  }
                  else
                      adjust_width = FALSE;
  
                  /*
                   * Check if a precision was specified
                   *
                   * XXX: an unreasonable amount of precision may be specified
                   * resulting in overflow of num_buf. Currently we
                   * ignore this possibility.
                   */
                  if (*fmt == '.') {
                      adjust_precision = TRUE;
                      fmt++;
                      if (l2_util_isdigit(*fmt)) {
                          STR_TO_DEC(fmt, precision);
                      }
                      else if (*fmt == '*') {
                          precision = va_arg(ap, int);
                          fmt++;
                          if (precision < 0)
                              precision = 0;
                      }
                      else
                          precision = 0;
                  }
                  else
                      adjust_precision = FALSE;
              }
              else
                  adjust_precision = adjust_width = FALSE;
  
              /*
               * Modifier check
               */
              if (*fmt == 'q') {
                  var_type = IS_QUAD;
                  fmt++;
              }
              else if (*fmt == 'l') {
                  var_type = IS_LONG;
                  fmt++;
              }
              else if (*fmt == 'h') {
                  var_type = IS_SHORT;
                  fmt++;
              }
              else {
                  var_type = IS_INT;
              }
  
              /*
               * Argument extraction and printing.
               * First we determine the argument type.
               * Then, we convert the argument to a string.
               * On exit from the switch, s points to the string that
               * must be printed, s_len has the length of the string
               * The precision requirements, if any, are reflected in s_len.
               *
               * NOTE: pad_char may be set to '0' because of the 0 flag.
               *   It is reset to ' ' by non-numeric formats
               */
              switch (*fmt) {
  
                  /* Unsigned Decimal Integer */
                  case 'u':
                      if (var_type == IS_QUAD) {
                          i_quad = va_arg(ap, u_quad_int);
                          s = conv_10_quad(i_quad, 1, &is_negative,
                                           &num_buf[NUM_BUF_SIZE], &s_len);
                      }
                      else {
                          if (var_type == IS_LONG)
                              i_num = (long_int)va_arg(ap, u_long_int);
                          else if (var_type == IS_SHORT)
                              i_num = (long_int)(unsigned short)va_arg(ap, unsigned int);
                          else
                              i_num = (long_int)va_arg(ap, unsigned int);
                          s = conv_10(i_num, 1, &is_negative,
                                      &num_buf[NUM_BUF_SIZE], &s_len);
                      }
                      FIX_PRECISION(adjust_precision, precision, s, s_len);
                      break;
  
                  /* Signed Decimal Integer */
                  case 'd':
                  case 'i':
                      if (var_type == IS_QUAD) {
                          i_quad = va_arg(ap, quad_int);
                          s = conv_10_quad(i_quad, 0, &is_negative,
                                           &num_buf[NUM_BUF_SIZE], &s_len);
                      }
                      else {
                          if (var_type == IS_LONG)
                              i_num = (long_int)va_arg(ap, long_int);
                          else if (var_type == IS_SHORT)
                              i_num = (long_int)(short)va_arg(ap, int);
                          else
                              i_num = (long_int)va_arg(ap, int);
                          s = conv_10(i_num, 0, &is_negative,
                                      &num_buf[NUM_BUF_SIZE], &s_len);
                      }
                      FIX_PRECISION(adjust_precision, precision, s, s_len);
  
                      if (is_negative)
                          prefix_char = '-';
                      else if (print_sign)
                          prefix_char = '+';
                      else if (print_blank)
                          prefix_char = ' ';
                      break;
  
                  /* Unsigned Octal Integer */
                  case 'o':
                      if (var_type == IS_QUAD) {
                          ui_quad = va_arg(ap, u_quad_int);
                          s = conv_p2_quad(ui_quad, 3, *fmt,
                                           &num_buf[NUM_BUF_SIZE], &s_len);
                      }
                      else {
                          if (var_type == IS_LONG)
                              ui_num = (u_long_int) va_arg(ap, u_long_int);
                          else if (var_type == IS_SHORT)
                              ui_num = (u_long_int)(unsigned short)va_arg(ap, unsigned int);
                          else
                              ui_num = (u_long_int)va_arg(ap, unsigned int);
                          s = conv_p2(ui_num, 3, *fmt, &num_buf[NUM_BUF_SIZE], &s_len);
                      }
                      FIX_PRECISION(adjust_precision, precision, s, s_len);
                      if (alternate_form && *s != '0') {
                          *--s = '0';
                          s_len++;
                      }
                      break;
  
                  /* Unsigned Hexadecimal Integer */
                  case 'x':
                  case 'X':
                      if (var_type == IS_QUAD) {
                          ui_quad = va_arg(ap, u_quad_int);
                          s = conv_p2_quad(ui_quad, 4, *fmt,
                                           &num_buf[NUM_BUF_SIZE], &s_len);
                      }
                      else {
                          if (var_type == IS_LONG)
                              ui_num = (u_long_int)va_arg(ap, u_long_int);
                          else if (var_type == IS_SHORT)
                              ui_num = (u_long_int)(unsigned short)va_arg(ap, unsigned int);
                          else
                              ui_num = (u_long_int)va_arg(ap, unsigned int);
                          s = conv_p2(ui_num, 4, *fmt, &num_buf[NUM_BUF_SIZE], &s_len);
                      }
                      FIX_PRECISION(adjust_precision, precision, s, s_len);
                      if (alternate_form && i_num != 0) {
                          *--s = *fmt; /* 'x' or 'X' */
                          *--s = '0';
                          s_len += 2;
                      }
                      break;
  
                  /* String */
                  case 's':
                      s = va_arg(ap, char *);
                      if (s != NULL) {
                          s_len = strlen(s);
                          if (adjust_precision && precision < s_len)
                              s_len = precision;
                      }
                      else {
                          s = S_NULL;
                          s_len = S_NULL_LEN;
                      }
                      pad_char = ' ';
                      break;
  
                  /* Double Floating Point (style 1) */
                  case 'f':
                  case 'e':
                  case 'E':
                      fp_num = va_arg(ap, double);
                      if (isnan(fp_num)) {
                          s = "NaN";
                          s_len = 3;
                      }
                      else if (isinf(fp_num)) {
                          s = "Inf";
                          s_len = 3;
                      }
                      else {
                          /* use &num_buf[1], so that we have room for the sign */
                          s = conv_fp(*fmt, fp_num, alternate_form,
                                      (adjust_precision == FALSE) ? FLOAT_DIGITS : precision, 
                                      &is_negative, &num_buf[1], &s_len);
                          if (is_negative)
                              prefix_char = '-';
                          else if (print_sign)
                              prefix_char = '+';
                          else if (print_blank)
                              prefix_char = ' ';
                      }
                      break;
  
                  /* Double Floating Point (style 2) */
                  case 'g':
                  case 'G':
                      fp_num = va_arg(ap, double);
                      if (isnan(fp_num)) {
                          s = "NaN";
                          s_len = 3;
                      }
                      else if (isinf(fp_num)) {
                          s = "Inf";
                          s_len = 3;
                      }
                      else {
                          if (adjust_precision == FALSE)
                              precision = FLOAT_DIGITS;
                          else if (precision == 0)
                              precision = 1;
                          /* use &num_buf[1], so that we have room for the sign */
                          s = l2_util_gcvt(fp_num, precision, &num_buf[1], alternate_form);
                          if (*s == '-')
                              prefix_char = *s++;
                          else if (print_sign)
                              prefix_char = '+';
                          else if (print_blank)
                              prefix_char = ' ';
                          s_len = strlen(s);
                          if (alternate_form && (q = strchr(s, '.')) == NULL) {
                              s[s_len++] = '.';
                              s[s_len] = NUL; /* delimit for following strchr() */
                          }
                          if (*fmt == 'G' && (q = strchr(s, 'e')) != NULL)
                              *q = 'E';
                      }
                      break;
  
                  /* Single Character */
                  case 'c':
                      char_buf[0] = (char) (va_arg(ap, int));
                      s = &char_buf[0];
                      s_len = 1;
                      pad_char = ' ';
                      break;
  
                  /* The '%' Character */
                  case '%':
                      char_buf[0] = '%';
                      s = &char_buf[0];
                      s_len = 1;
                      pad_char = ' ';
                      break;
  
                  /* Special: Number of already written characters */
                  case 'n':
                      if (var_type == IS_QUAD)
                          *(va_arg(ap, quad_int *)) = cc;
                      else if (var_type == IS_LONG)
                          *(va_arg(ap, long *)) = cc;
                      else if (var_type == IS_SHORT)
                          *(va_arg(ap, short *)) = cc;
                      else
                          *(va_arg(ap, int *)) = cc;
                      break;
  
                  /*
                   * Pointer argument type. 
                   */
                  case 'p':
  #if defined(SIZEOF_LONG_LONG) && (SIZEOF_LONG_LONG == SIZEOF_VOID_P)
                      ui_quad = (u_quad_int) va_arg(ap, void *);
                      s = conv_p2_quad(ui_quad, 4, 'x', &num_buf[NUM_BUF_SIZE], &s_len);
  #else
                      ui_num = (u_long_int) va_arg(ap, void *);
                      s = conv_p2(ui_num, 4, 'x', &num_buf[NUM_BUF_SIZE], &s_len);
  #endif
                      pad_char = ' ';
                      break;
  
                  case NUL:
                      /*
                       * The last character of the format string was %.
                       * We ignore it.
                       */
                      continue;
  
                  /*
                   * The default case is for unrecognized %'s. We print
                   * %<char> to help the user identify what option is not
                   * understood. This is also useful in case the user
                   * wants to pass the output of format_converter to
                   * another function that understands some other %<char>
                   * (like syslog). Note that we can't point s inside fmt
                   * because the unknown <char> could be preceded by width
                   * etc.
                   */
                  default:
                      s = NULL;
                      if (vbuff->format != NULL) {
                          vbuff->format(vbuff,
                                        &prefix_char, &pad_char, &s, &s_len, 
                                        num_buf, NUM_BUF_SIZE, extinfo, *fmt, &ap);
                      }
                      if (s == NULL) {
                          char_buf[0] = '%';
                          char_buf[1] = *fmt;
                          s = char_buf;
                          s_len = 2;
                          pad_char = ' ';
                      }
                      break;
              }
  
              if (prefix_char != NUL && s != S_NULL && s != char_buf) {
                  *--s = prefix_char;
                  s_len++;
              }
  
              if (adjust_width && adjust == RIGHT && min_width > s_len) {
                  if (pad_char == '0' && prefix_char != NUL) {
                      INS_CHAR(*s, sp, bep, cc);
                      s++;
                      s_len--;
                      min_width--;
                  }
                  PAD(min_width, s_len, pad_char);
              }
  
              /*
               * Print the string s. 
               */
              for (i = s_len; i != 0; i--) {
                  INS_CHAR(*s, sp, bep, cc);
                  s++;
              }
  
              if (adjust_width && adjust == LEFT && min_width > s_len)
                  PAD(min_width, s_len, pad_char);
          }
          fmt++;
      }
      vbuff->curpos = sp;
      return cc;
  }
  
  /*
   * l2_util_format -- format a new string.
   * This is inspired by POSIX sprintf(3), but mainly provides the
   * following differences: first it is actually a snprintf(3) style, i.e.
   * it allows one to specify the maximum number of characters which are
   * allowed to write. Second, it allows one to just count the number of
   * characters which have to be written.
   */
  
  #define STR_FORMAT_BUFLEN 20
  
  static int l2_util_flush_fake(l2_util_format_t *out_handle)
  {
      out_handle->data[1].i += out_handle->data[2].i;
      out_handle->curpos = (char *)out_handle->data[0].vp;
      return 0;
  }
  
  static int l2_util_flush_real(l2_util_format_t *out_handle)
  {
      return -1;
  }
  
  int l2_util_vsprintf(char *s, size_t n, const char *fmt, va_list ap)
  {
      l2_util_format_t handle;
      char buf[STR_FORMAT_BUFLEN];
      int rv;
  
      if (n == 0)
          return 0;
      if (s == NULL) {
          /* fake formatting, i.e., calculate output length only */
          handle.curpos     = buf;
          handle.endpos     = buf + sizeof(buf) - 1;
          handle.flush      = l2_util_flush_fake;
          handle.format     = NULL;
          handle.data[0].vp = buf;
          handle.data[1].i  = 0;
          handle.data[2].i  = sizeof(buf);
          rv = l2_util_format(&handle, fmt, ap);
          if (rv == -1)
              rv = (int)n;
      }
      else {
          /* real formatting, i.e., create output */
          handle.curpos  = s;
          handle.endpos  = s + n - 1;
          handle.flush   = l2_util_flush_real;
          handle.format  = NULL;
          rv = l2_util_format(&handle, fmt, ap);
          *(handle.curpos) = NUL;
          if (rv == -1)
              rv = (int)n;
      }
      return rv;
  }
  
  char *l2_util_vasprintf(const char *fmt, va_list ap)
  {
      va_list apbak;
      char *s;
      int rv;
  
      apbak = ap;
      if ((rv = l2_util_vsprintf(NULL, -1, fmt, ap)) == -1)
          return NULL;
      if ((s = malloc(rv+1)) == NULL)
          return NULL;
      ap = apbak;
      if ((rv = l2_util_vsprintf(s, rv+1, fmt, ap)) == -1)
          return NULL;
      return s;
  }
  
  int l2_util_sprintf(char *s, size_t n, const char *fmt, ...)
  {
      va_list ap;
      int rv;
  
      va_start(ap, fmt);
      rv = l2_util_vsprintf(s, n, fmt, ap);
      va_end(ap);
      return rv;
  }
  
  char *l2_util_asprintf(const char *fmt, ...)
  {
      va_list ap;
      char *rv;
  
      va_start(ap, fmt);
      rv = l2_util_asprintf(fmt, ap);
      va_end(ap);
      return rv;
  }
  
  Index: ossp-pkg/l2/l2_ut_param.c
  ============================================================
  $ cvs update -p -r1.1 l2_ut_param.c
  /*
  **  L2 - OSSP Logging Library
  **  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP L2, a flexible logging library which
  **  can be found at http://www.ossp.org/pkg/l2/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  l2_ut_param.c: parameter parsing support
  */
  
  #include "l2.h"
  #include "l2_p.h"
  
  #include <string.h>
  
  l2_result_t l2_util_setparams(l2_param_t pa[], const char *fmt, va_list ap)
  {
      const char *cpB, *cpE;
      const char *cpC, *cpG;
      int ok;
      int i; 
  
      if (pa == NULL || fmt == NULL || ap == NULL)
          return L2_ERROR;
      cpE = fmt;
      while (*cpE != '\0') {
          /* determine begin of parameter name */
          cpB = cpE;
          while (*cpB == ',')
              cpB++;
  
          /* determine end of parameter name */
          cpE = cpB;
          while (*cpE != ',' && *cpE != '\0')
              cpE++;
  
          /* try to match with configured parameters */
          ok = FALSE;
          for (i = 0; pa[i].name != NULL; i++) {
              cpC = pa[i].name;
              cpG = cpB;
              while (*cpC != '\0' && cpG < cpE) {
                  if (*cpC != *cpG)
                      break;
                  cpC++;
                  cpG++;
              }
              if (*cpC == '\0' && cpG == cpE) {
                  /* parameter matched, so store value */
                  switch (pa[i].type) {
                      case L2_TYPE_CHAR:
                          *(char *)(pa[i].store) = va_get(ap, char); 
                          break;
                      case L2_TYPE_SHORT:
                          *(short *)(pa[i].store) = va_get(ap, short); 
                          break;
                      case L2_TYPE_INT:
                          *(int *)(pa[i].store) = va_get(ap, int); 
                          break;
                      case L2_TYPE_LONG:
                          *(long *)(pa[i].store) = va_get(ap, long); 
                          break;
                      case L2_TYPE_FLOAT:
                          *(float *)(pa[i].store) = va_get(ap, float); 
                          break;
                      case L2_TYPE_DOUBLE:
                          *(double *)(pa[i].store) = va_get(ap, double); 
                          break;
                      case L2_TYPE_CHARPTR:
                          *(char **)(pa[i].store) = va_get(ap, charptr); 
                          break;
                      case L2_TYPE_VOIDPTR:
                          *(void **)(pa[i].store) = va_get(ap, voidptr); 
                          break;
                  }
                  ok = TRUE;
                  break;
              }
          }
          if (!ok)
              return L2_ERROR;
      }
      return L2_OK;
  }
  

From ossp-cvs-owner@ossp.org  Tue Sep  4 17:52:50 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f849k8w84523; Tue, 4 Sep 2001 11:46:08 +0200 (CEST)
Date: Tue, 4 Sep 2001 11:46:08 +0200 (CEST)
Message-Id: <200109040946.f849k8w84523@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp AUTHORS COPYING Makefile.in aclocal.m4 ...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-Sep-2001 11:46:08
  Branch: HEAD                             Handle: 2001090410460600

  Added files:
    ossp-pkg/lmtp2nntp      AUTHORS COPYING
  Modified files:
    ossp-pkg/lmtp2nntp      Makefile.in aclocal.m4 argz.c argz.h autogen.sh
                            configure.ac lmtp.c lmtp.h lmtp.pod lmtp2nntp.c
                            lmtp2nntp.pod msg.c msg.h nntp.c nntp.h sa.c sa.h
                            shpat_match.c shpat_match.h trace.c trace.h

  Log:
    Finally apply GNU General Public License (GPL) to OSSP lmtp2nntp.

  Summary:
    Revision    Changes     Path
    1.1         +10 -0      ossp-pkg/lmtp2nntp/AUTHORS
    1.1         +280 -0     ossp-pkg/lmtp2nntp/COPYING
    1.12        +25 -0      ossp-pkg/lmtp2nntp/Makefile.in
    1.5         +25 -0      ossp-pkg/lmtp2nntp/aclocal.m4
    1.3         +26 -0      ossp-pkg/lmtp2nntp/argz.c
    1.2         +26 -0      ossp-pkg/lmtp2nntp/argz.h
    1.4         +23 -1      ossp-pkg/lmtp2nntp/autogen.sh
    1.8         +34 -8      ossp-pkg/lmtp2nntp/configure.ac
    1.21        +24 -27     ossp-pkg/lmtp2nntp/lmtp.c
    1.9         +24 -27     ossp-pkg/lmtp2nntp/lmtp.h
    1.2         +20 -23     ossp-pkg/lmtp2nntp/lmtp.pod
    1.39        +24 -9      ossp-pkg/lmtp2nntp/lmtp2nntp.c
    1.15        +25 -0      ossp-pkg/lmtp2nntp/lmtp2nntp.pod
    1.16        +27 -1      ossp-pkg/lmtp2nntp/msg.c
    1.5         +28 -3      ossp-pkg/lmtp2nntp/msg.h
    1.20        +24 -27     ossp-pkg/lmtp2nntp/nntp.c
    1.8         +24 -27     ossp-pkg/lmtp2nntp/nntp.h
    1.8         +24 -28     ossp-pkg/lmtp2nntp/sa.c
    1.3         +24 -28     ossp-pkg/lmtp2nntp/sa.h
    1.4         +21 -1      ossp-pkg/lmtp2nntp/shpat_match.c
    1.2         +25 -4      ossp-pkg/lmtp2nntp/shpat_match.h
    1.4         +25 -0      ossp-pkg/lmtp2nntp/trace.c
    1.3         +25 -0      ossp-pkg/lmtp2nntp/trace.h
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/AUTHORS
  ============================================================
  $ cvs update -p -r1.1 AUTHORS
  
    AUTHORS
    =======
  
    This is a list of authors who have written
    or edited major parts of the OSSP lmtp2nntp sources.
  
    Ralf S. Engelschall   <rse@engelschall.com>
    Thomas Lotterer       <thomas.lotterer@cw.com>
  
  Index: ossp-pkg/lmtp2nntp/COPYING
  ============================================================
  $ cvs update -p -r1.1 COPYING
                      GNU GENERAL PUBLIC LICENSE
                         Version 2, June 1991
  
   Copyright (C) 1989, 1991 Free Software Foundation, Inc.
                         59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   Everyone is permitted to copy and distribute verbatim copies
   of this license document, but changing it is not allowed.
  
                              Preamble
  
    The licenses for most software are designed to take away your
  freedom to share and change it.  By contrast, the GNU General Public
  License is intended to guarantee your freedom to share and change free
  software--to make sure the software is free for all its users.  This
  General Public License applies to most of the Free Software
  Foundation's software and to any other program whose authors commit to
  using it.  (Some other Free Software Foundation software is covered by
  the GNU Library General Public License instead.)  You can apply it to
  your programs, too.
  
    When we speak of free software, we are referring to freedom, not
  price.  Our General Public Licenses are designed to make sure that you
  have the freedom to distribute copies of free software (and charge for
  this service if you wish), that you receive source code or can get it
  if you want it, that you can change the software or use pieces of it
  in new free programs; and that you know you can do these things.
  
    To protect your rights, we need to make restrictions that forbid
  anyone to deny you these rights or to ask you to surrender the rights.
  These restrictions translate to certain responsibilities for you if you
  distribute copies of the software, or if you modify it.
  
    For example, if you distribute copies of such a program, whether
  gratis or for a fee, you must give the recipients all the rights that
  you have.  You must make sure that they, too, receive or can get the
  source code.  And you must show them these terms so they know their
  rights.
  
    We protect your rights with two steps: (1) copyright the software, and
  (2) offer you this license which gives you legal permission to copy,
  distribute and/or modify the software.
  
    Also, for each author's protection and ours, we want to make certain
  that everyone understands that there is no warranty for this free
  software.  If the software is modified by someone else and passed on, we
  want its recipients to know that what they have is not the original, so
  that any problems introduced by others will not reflect on the original
  authors' reputations.
  
    Finally, any free program is threatened constantly by software
  patents.  We wish to avoid the danger that redistributors of a free
  program will individually obtain patent licenses, in effect making the
  program proprietary.  To prevent this, we have made it clear that any
  patent must be licensed for everyone's free use or not licensed at all.
  
    The precise terms and conditions for copying, distribution and
  modification follow.
  
                      GNU GENERAL PUBLIC LICENSE
     TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
  
    0. This License applies to any program or other work which contains
  a notice placed by the copyright holder saying it may be distributed
  under the terms of this General Public License.  The "Program", below,
  refers to any such program or work, and a "work based on the Program"
  means either the Program or any derivative work under copyright law:
  that is to say, a work containing the Program or a portion of it,
  either verbatim or with modifications and/or translated into another
  language.  (Hereinafter, translation is included without limitation in
  the term "modification".)  Each licensee is addressed as "you".
  
  Activities other than copying, distribution and modification are not
  covered by this License; they are outside its scope.  The act of
  running the Program is not restricted, and the output from the Program
  is covered only if its contents constitute a work based on the
  Program (independent of having been made by running the Program).
  Whether that is true depends on what the Program does.
  
    1. You may copy and distribute verbatim copies of the Program's
  source code as you receive it, in any medium, provided that you
  conspicuously and appropriately publish on each copy an appropriate
  copyright notice and disclaimer of warranty; keep intact all the
  notices that refer to this License and to the absence of any warranty;
  and give any other recipients of the Program a copy of this License
  along with the Program.
  
  You may charge a fee for the physical act of transferring a copy, and
  you may at your option offer warranty protection in exchange for a fee.
  
    2. You may modify your copy or copies of the Program or any portion
  of it, thus forming a work based on the Program, and copy and
  distribute such modifications or work under the terms of Section 1
  above, provided that you also meet all of these conditions:
  
      a) You must cause the modified files to carry prominent notices
      stating that you changed the files and the date of any change.
  
      b) You must cause any work that you distribute or publish, that in
      whole or in part contains or is derived from the Program or any
      part thereof, to be licensed as a whole at no charge to all third
      parties under the terms of this License.
  
      c) If the modified program normally reads commands interactively
      when run, you must cause it, when started running for such
      interactive use in the most ordinary way, to print or display an
      announcement including an appropriate copyright notice and a
      notice that there is no warranty (or else, saying that you provide
      a warranty) and that users may redistribute the program under
      these conditions, and telling the user how to view a copy of this
      License.  (Exception: if the Program itself is interactive but
      does not normally print such an announcement, your work based on
      the Program is not required to print an announcement.)
  
  These requirements apply to the modified work as a whole.  If
  identifiable sections of that work are not derived from the Program,
  and can be reasonably considered independent and separate works in
  themselves, then this License, and its terms, do not apply to those
  sections when you distribute them as separate works.  But when you
  distribute the same sections as part of a whole which is a work based
  on the Program, the distribution of the whole must be on the terms of
  this License, whose permissions for other licensees extend to the
  entire whole, and thus to each and every part regardless of who wrote it.
  
  Thus, it is not the intent of this section to claim rights or contest
  your rights to work written entirely by you; rather, the intent is to
  exercise the right to control the distribution of derivative or
  collective works based on the Program.
  
  In addition, mere aggregation of another work not based on the Program
  with the Program (or with a work based on the Program) on a volume of
  a storage or distribution medium does not bring the other work under
  the scope of this License.
  
    3. You may copy and distribute the Program (or a work based on it,
  under Section 2) in object code or executable form under the terms of
  Sections 1 and 2 above provided that you also do one of the following:
  
      a) Accompany it with the complete corresponding machine-readable
      source code, which must be distributed under the terms of Sections
      1 and 2 above on a medium customarily used for software interchange; or,
  
      b) Accompany it with a written offer, valid for at least three
      years, to give any third party, for a charge no more than your
      cost of physically performing source distribution, a complete
      machine-readable copy of the corresponding source code, to be
      distributed under the terms of Sections 1 and 2 above on a medium
      customarily used for software interchange; or,
  
      c) Accompany it with the information you received as to the offer
      to distribute corresponding source code.  (This alternative is
      allowed only for noncommercial distribution and only if you
      received the program in object code or executable form with such
      an offer, in accord with Subsection b above.)
  
  The source code for a work means the preferred form of the work for
  making modifications to it.  For an executable work, complete source
  code means all the source code for all modules it contains, plus any
  associated interface definition files, plus the scripts used to
  control compilation and installation of the executable.  However, as a
  special exception, the source code distributed need not include
  anything that is normally distributed (in either source or binary
  form) with the major components (compiler, kernel, and so on) of the
  operating system on which the executable runs, unless that component
  itself accompanies the executable.
  
  If distribution of executable or object code is made by offering
  access to copy from a designated place, then offering equivalent
  access to copy the source code from the same place counts as
  distribution of the source code, even though third parties are not
  compelled to copy the source along with the object code.
  
    4. You may not copy, modify, sublicense, or distribute the Program
  except as expressly provided under this License.  Any attempt
  otherwise to copy, modify, sublicense or distribute the Program is
  void, and will automatically terminate your rights under this License.
  However, parties who have received copies, or rights, from you under
  this License will not have their licenses terminated so long as such
  parties remain in full compliance.
  
    5. You are not required to accept this License, since you have not
  signed it.  However, nothing else grants you permission to modify or
  distribute the Program or its derivative works.  These actions are
  prohibited by law if you do not accept this License.  Therefore, by
  modifying or distributing the Program (or any work based on the
  Program), you indicate your acceptance of this License to do so, and
  all its terms and conditions for copying, distributing or modifying
  the Program or works based on it.
  
    6. Each time you redistribute the Program (or any work based on the
  Program), the recipient automatically receives a license from the
  original licensor to copy, distribute or modify the Program subject to
  these terms and conditions.  You may not impose any further
  restrictions on the recipients' exercise of the rights granted herein.
  You are not responsible for enforcing compliance by third parties to
  this License.
  
    7. If, as a consequence of a court judgment or allegation of patent
  infringement or for any other reason (not limited to patent issues),
  conditions are imposed on you (whether by court order, agreement or
  otherwise) that contradict the conditions of this License, they do not
  excuse you from the conditions of this License.  If you cannot
  distribute so as to satisfy simultaneously your obligations under this
  License and any other pertinent obligations, then as a consequence you
  may not distribute the Program at all.  For example, if a patent
  license would not permit royalty-free redistribution of the Program by
  all those who receive copies directly or indirectly through you, then
  the only way you could satisfy both it and this License would be to
  refrain entirely from distribution of the Program.
  
  If any portion of this section is held invalid or unenforceable under
  any particular circumstance, the balance of the section is intended to
  apply and the section as a whole is intended to apply in other
  circumstances.
  
  It is not the purpose of this section to induce you to infringe any
  patents or other property right claims or to contest validity of any
  such claims; this section has the sole purpose of protecting the
  integrity of the free software distribution system, which is
  implemented by public license practices.  Many people have made
  generous contributions to the wide range of software distributed
  through that system in reliance on consistent application of that
  system; it is up to the author/donor to decide if he or she is willing
  to distribute software through any other system and a licensee cannot
  impose that choice.
  
  This section is intended to make thoroughly clear what is believed to
  be a consequence of the rest of this License.
  
    8. If the distribution and/or use of the Program is restricted in
  certain countries either by patents or by copyrighted interfaces, the
  original copyright holder who places the Program under this License
  may add an explicit geographical distribution limitation excluding
  those countries, so that distribution is permitted only in or among
  countries not thus excluded.  In such case, this License incorporates
  the limitation as if written in the body of this License.
  
    9. The Free Software Foundation may publish revised and/or new versions
  of the General Public License from time to time.  Such new versions will
  be similar in spirit to the present version, but may differ in detail to
  address new problems or concerns.
  
  Each version is given a distinguishing version number.  If the Program
  specifies a version number of this License which applies to it and "any
  later version", you have the option of following the terms and conditions
  either of that version or of any later version published by the Free
  Software Foundation.  If the Program does not specify a version number of
  this License, you may choose any version ever published by the Free Software
  Foundation.
  
    10. If you wish to incorporate parts of the Program into other free
  programs whose distribution conditions are different, write to the author
  to ask for permission.  For software which is copyrighted by the Free
  Software Foundation, write to the Free Software Foundation; we sometimes
  make exceptions for this.  Our decision will be guided by the two goals
  of preserving the free status of all derivatives of our free software and
  of promoting the sharing and reuse of software generally.
  
                              NO WARRANTY
  
    11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
  FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
  OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
  PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
  OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
  TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
  PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
  REPAIR OR CORRECTION.
  
    12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
  WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
  REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
  INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
  OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
  TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
  YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
  PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
  POSSIBILITY OF SUCH DAMAGES.
  
                       END OF TERMS AND CONDITIONS
  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	2001/08/28 13:35:23	1.11
  +++ ossp-pkg/lmtp2nntp/Makefile.in	2001/09/04 09:46:06	1.12
  @@ -1,3 +1,28 @@
  +##
  +##  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##
  +##  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  +##  mailer which forwards mails as Usenet news articles via NNTP.
  +##  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +##
  +##  This program is free software; you can redistribute it and/or
  +##  modify it under the terms of the GNU General Public  License
  +##  as published by the Free Software Foundation; either version
  +##  2.0 of the License, or (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this file; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +##  USA, or contact the OSSP project <ossp@ossp.org>.
  +##
  +##  Makefile.in: make(1) build specification
  +##
   
   @SET_MAKE@
   
  Index: ossp-pkg/lmtp2nntp/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 aclocal.m4
  --- ossp-pkg/lmtp2nntp/aclocal.m4	2001/08/21 10:16:30	1.4
  +++ ossp-pkg/lmtp2nntp/aclocal.m4	2001/09/04 09:46:06	1.5
  @@ -1,3 +1,28 @@
  +dnl ##
  +dnl ##  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##
  +dnl ##  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  +dnl ##  mailer which forwards mails as Usenet news articles via NNTP.
  +dnl ##  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +dnl ##
  +dnl ##  This program is free software; you can redistribute it and/or
  +dnl ##  modify it under the terms of the GNU General Public  License
  +dnl ##  as published by the Free Software Foundation; either version
  +dnl ##  2.0 of the License, or (at your option) any later version.
  +dnl ##
  +dnl ##  This program is distributed in the hope that it will be useful,
  +dnl ##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +dnl ##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +dnl ##  General Public License for more details.
  +dnl ##
  +dnl ##  You should have received a copy of the GNU General Public License
  +dnl ##  along with this file; if not, write to the Free Software
  +dnl ##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +dnl ##  USA, or contact the OSSP project <ossp@ossp.org>.
  +dnl ##
  +dnl ##  aclocal.m4: GNU Autoconf local macros
  +dnl ##
   
   dnl ##
   dnl ##  Support for Platform IDs
  Index: ossp-pkg/lmtp2nntp/argz.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 argz.c
  --- ossp-pkg/lmtp2nntp/argz.c	2001/08/23 09:12:30	1.2
  +++ ossp-pkg/lmtp2nntp/argz.c	2001/09/04 09:46:06	1.3
  @@ -1,3 +1,29 @@
  +/*
  +**  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**
  +**  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  +**  mailer which forwards mails as Usenet news articles via NNTP.
  +**  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +**
  +**  This program is free software; you can redistribute it and/or
  +**  modify it under the terms of the GNU General Public  License
  +**  as published by the Free Software Foundation; either version
  +**  2.0 of the License, or (at your option) any later version.
  +**
  +**  This program is distributed in the hope that it will be useful,
  +**  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +**  General Public License for more details.
  +**
  +**  You should have received a copy of the GNU General Public License
  +**  along with this file; if not, write to the Free Software
  +**  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +**  USA, or contact the OSSP project <ossp@ossp.org>.
  +**
  +**  argz.h: Zero-Terminated Argument Vector library
  +*/
  +
   /* Routines for dealing with '\0' separated arg vectors.
      Copyright (C) 1996, 1997 Free Software Foundation, Inc.
      This file is part of the GNU C Library.
  Index: ossp-pkg/lmtp2nntp/argz.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 argz.h
  --- ossp-pkg/lmtp2nntp/argz.h	2001/07/25 15:02:57	1.1
  +++ ossp-pkg/lmtp2nntp/argz.h	2001/09/04 09:46:06	1.2
  @@ -1,3 +1,29 @@
  +/*
  +**  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**
  +**  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  +**  mailer which forwards mails as Usenet news articles via NNTP.
  +**  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +**
  +**  This program is free software; you can redistribute it and/or
  +**  modify it under the terms of the GNU General Public  License
  +**  as published by the Free Software Foundation; either version
  +**  2.0 of the License, or (at your option) any later version.
  +**
  +**  This program is distributed in the hope that it will be useful,
  +**  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +**  General Public License for more details.
  +**
  +**  You should have received a copy of the GNU General Public License
  +**  along with this file; if not, write to the Free Software
  +**  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +**  USA, or contact the OSSP project <ossp@ossp.org>.
  +**
  +**  argz.c: Zero-Terminated Argument Vector library (API)
  +*/
  +
   /* Routines for dealing with '\0' separated arg vectors.
      Copyright (C) 1996, 1997 Free Software Foundation, Inc.
      This file is part of the GNU C Library.
  Index: ossp-pkg/lmtp2nntp/autogen.sh
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 autogen.sh
  --- ossp-pkg/lmtp2nntp/autogen.sh	2001/08/20 11:28:29	1.3
  +++ ossp-pkg/lmtp2nntp/autogen.sh	2001/09/04 09:46:06	1.4
  @@ -1,6 +1,28 @@
   #!/bin/sh
   ##
  -##  autogen.sh: auto-generate library build environment tools
  +##  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##
  +##  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  +##  mailer which forwards mails as Usenet news articles via NNTP.
  +##  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +##
  +##  This program is free software; you can redistribute it and/or
  +##  modify it under the terms of the GNU General Public  License
  +##  as published by the Free Software Foundation; either version
  +##  2.0 of the License, or (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this file; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +##  USA, or contact the OSSP project <ossp@ossp.org>.
  +##
  +##  autogen.sh: auto-generate build environment
   ##
   
   #   generator tools version sanity check
  Index: ossp-pkg/lmtp2nntp/configure.ac
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 configure.ac
  --- ossp-pkg/lmtp2nntp/configure.ac	2001/08/23 09:12:30	1.7
  +++ ossp-pkg/lmtp2nntp/configure.ac	2001/09/04 09:46:06	1.8
  @@ -1,4 +1,26 @@
   dnl ##
  +dnl ##  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##
  +dnl ##  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  +dnl ##  mailer which forwards mails as Usenet news articles via NNTP.
  +dnl ##  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +dnl ##
  +dnl ##  This program is free software; you can redistribute it and/or
  +dnl ##  modify it under the terms of the GNU General Public  License
  +dnl ##  as published by the Free Software Foundation; either version
  +dnl ##  2.0 of the License, or (at your option) any later version.
  +dnl ##
  +dnl ##  This program is distributed in the hope that it will be useful,
  +dnl ##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +dnl ##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +dnl ##  General Public License for more details.
  +dnl ##
  +dnl ##  You should have received a copy of the GNU General Public License
  +dnl ##  along with this file; if not, write to the Free Software
  +dnl ##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +dnl ##  USA, or contact the OSSP project <ossp@ossp.org>.
  +dnl ##
   dnl ##  configure.ac: GNU Autoconf script input (M4 syntax)
   dnl ##
   
  @@ -7,28 +29,32 @@
   AC_REVISION(1.0)
   AC_INIT(lmtp2nntp.c)
   
  +dnl #   announce our version
   AC_DIVERT_PUSH(NOTICE)
   V=`./shtool version -lc -dlong version.c`
   ./shtool echo -e "Configuring %BOSSP lmtp2nntp%b, Version %B${V}%b"
   AC_DIVERT_POP()
   
  -dnl #   feature tests
  +dnl #   perform feature tests
   AC_SET_MAKE
   AC_PROG_CC
   AC_PROG_CPP
   AC_CHECK_DEBUGGING
  -AC_CHECK_EXTLIB([Generic String Library], str, str_parse, str.h, , [
  -			 AC_MSG_RESULT(not found)
  -			 AC_MSG_ERROR([lmtp2nntp requires libstr!])
  -			 ])
  -
  -AC_CHECK_EXTLIB([Dmalloc Library], dmalloc, dmalloc_debug, dmalloc.h, AC_DEFINE(DMALLOC))
  -
   AC_CHECK_LIB(socket, getprotobyname)
   AC_CHECK_LIB(nsl, gethostbyname)
   AC_CHECK_FUNCS(inet_pton inet_aton)
   
  +dnl #   check for external Str library
  +AC_CHECK_EXTLIB([Generic String Library], 
  +                str, str_parse, str.h, , 
  +                [AC_MSG_RESULT(not found)
  +                 AC_MSG_ERROR([lmtp2nntp requires libstr!])])
  +
  +dnl #   check for external Dmalloc library
  +AC_CHECK_EXTLIB([Dmalloc Library], dmalloc, dmalloc_debug, dmalloc.h, AC_DEFINE(DMALLOC))
  +
   dnl #   standard output generation
   AC_CONFIG_HEADERS(config.h)
   AC_CONFIG_FILES(Makefile:Makefile.in)
   AC_OUTPUT
  +
  Index: ossp-pkg/lmtp2nntp/lmtp.c
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 lmtp.c
  --- ossp-pkg/lmtp2nntp/lmtp.c	2001/08/30 13:57:21	1.20
  +++ ossp-pkg/lmtp2nntp/lmtp.c	2001/09/04 09:46:06	1.21
  @@ -1,31 +1,28 @@
   /*
  - *  lmtp.c: LMTP library (implementation)
  - *
  - *  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  - *  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  - *
  - *  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  - *  mailer which forwards mails as Usenet news articles via NNTP.
  - *  It can be found at http://www.ossp.com/pkg/lmtp2nntp/.
  - *
  - *  Permission to use, copy, modify, and distribute this software for
  - *  any purpose with or without fee is hereby granted, provided that
  - *  the above copyright notice and this permission notice appear in all
  - *  copies.
  - *
  - *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  - *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  - *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  - *  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  - *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  - *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  - *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  - *  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  - *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  - *  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  - *  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  - *  SUCH DAMAGE.
  - */
  +**  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**
  +**  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  +**  mailer which forwards mails as Usenet news articles via NNTP.
  +**  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +**
  +**  This program is free software; you can redistribute it and/or
  +**  modify it under the terms of the GNU General Public  License
  +**  as published by the Free Software Foundation; either version
  +**  2.0 of the License, or (at your option) any later version.
  +**
  +**  This program is distributed in the hope that it will be useful,
  +**  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +**  General Public License for more details.
  +**
  +**  You should have received a copy of the GNU General Public License
  +**  along with this file; if not, write to the Free Software
  +**  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +**  USA, or contact the OSSP project <ossp@ossp.org>.
  +**
  +**  lmtp.c: Local Mail Transfer Protocol (LMTP) server library
  +*/
   
   #include <stdio.h>
   #include <stdlib.h>
  Index: ossp-pkg/lmtp2nntp/lmtp.h
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 lmtp.h
  --- ossp-pkg/lmtp2nntp/lmtp.h	2001/08/14 14:42:41	1.8
  +++ ossp-pkg/lmtp2nntp/lmtp.h	2001/09/04 09:46:06	1.9
  @@ -1,31 +1,28 @@
   /*
  - *  lmtp.h: LMTP library (API definition)
  - *
  - *  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  - *  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  - *
  - *  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  - *  mailer which forwards mails as Usenet news articles via NNTP.
  - *  It can be found at http://www.ossp.com/pkg/lmtp2nntp/.
  - *
  - *  Permission to use, copy, modify, and distribute this software for
  - *  any purpose with or without fee is hereby granted, provided that
  - *  the above copyright notice and this permission notice appear in all
  - *  copies.
  - *
  - *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  - *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  - *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  - *  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  - *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  - *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  - *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  - *  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  - *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  - *  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  - *  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  - *  SUCH DAMAGE.
  - */
  +**  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**
  +**  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  +**  mailer which forwards mails as Usenet news articles via NNTP.
  +**  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +**
  +**  This program is free software; you can redistribute it and/or
  +**  modify it under the terms of the GNU General Public  License
  +**  as published by the Free Software Foundation; either version
  +**  2.0 of the License, or (at your option) any later version.
  +**
  +**  This program is distributed in the hope that it will be useful,
  +**  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +**  General Public License for more details.
  +**
  +**  You should have received a copy of the GNU General Public License
  +**  along with this file; if not, write to the Free Software
  +**  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +**  USA, or contact the OSSP project <ossp@ossp.org>.
  +**
  +**  lmtp.h: Local Mail Transfer Protocol (LMTP) server library (API)
  +*/
   
   #ifndef __LMTP_H__
   #define __LMTP_H__
  Index: ossp-pkg/lmtp2nntp/lmtp.pod
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 lmtp.pod
  --- ossp-pkg/lmtp2nntp/lmtp.pod	2001/07/25 19:51:13	1.1
  +++ ossp-pkg/lmtp2nntp/lmtp.pod	2001/09/04 09:46:06	1.2
  @@ -1,37 +1,34 @@
   ##
  -##  lmtp.pod: LMTP library (Unix manual page)
  +##  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
  -##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  -##
   ##  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   ##  mailer which forwards mails as Usenet news articles via NNTP.
  -##  It can be found at http://www.ossp.com/pkg/lmtp2nntp/.
  +##  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +##
  +##  This program is free software; you can redistribute it and/or
  +##  modify it under the terms of the GNU General Public  License
  +##  as published by the Free Software Foundation; either version
  +##  2.0 of the License, or (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this file; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +##  USA, or contact the OSSP project <ossp@ossp.org>.
   ##
  -##  Permission to use, copy, modify, and distribute this software for
  -##  any purpose with or without fee is hereby granted, provided that
  -##  the above copyright notice and this permission notice appear in all
  -##  copies.
  -##
  -##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  -##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  -##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  -##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  -##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  -##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  -##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  -##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  -##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  -##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  -##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  -##  SUCH DAMAGE.
  +##  lmtp.pod: Local Mail Transfer Protocol (LMTP) server library (manual page)
   ##
   
   =pod
   
   =head1 NAME
   
  -B<lmtp> - Local Mail Transfer Protocol (LMTP) Library
  +B<lmtp> - Local Mail Transfer Protocol (LMTP) Server Library
   
   =head1 SYNOPSIS
   
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.38 -r1.39 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/03 15:06:29	1.38
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/04 09:46:06	1.39
  @@ -1,13 +1,28 @@
   /*
  - * lmtp2nntp.c
  - *
  - * The lmtp2nntp program reads mail as a LMTP server and posts it to one or
  - * more newsgroups using NNTP. It delivers the message immediately or fails.
  - *
  - * The OSSP Project, Cable & Wireless Deutschland GmbH
  - * Thomas Lotterer, <thomas.lotterer@cw.com>
  - *
  - */
  +**  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**
  +**  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  +**  mailer which forwards mails as Usenet news articles via NNTP.
  +**  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +**
  +**  This program is free software; you can redistribute it and/or
  +**  modify it under the terms of the GNU General Public  License
  +**  as published by the Free Software Foundation; either version
  +**  2.0 of the License, or (at your option) any later version.
  +**
  +**  This program is distributed in the hope that it will be useful,
  +**  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +**  General Public License for more details.
  +**
  +**  You should have received a copy of the GNU General Public License
  +**  along with this file; if not, write to the Free Software
  +**  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +**  USA, or contact the OSSP project <ossp@ossp.org>.
  +**
  +**  lmtp2nntp.c: LMTP to NNTP main procedure
  +*/
   
   #include <stdlib.h>
   #include <stdio.h>
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 lmtp2nntp.pod
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/09/03 15:06:29	1.14
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/09/04 09:46:06	1.15
  @@ -1,3 +1,28 @@
  +##
  +##  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##
  +##  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  +##  mailer which forwards mails as Usenet news articles via NNTP.
  +##  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +##
  +##  This program is free software; you can redistribute it and/or
  +##  modify it under the terms of the GNU General Public  License
  +##  as published by the Free Software Foundation; either version
  +##  2.0 of the License, or (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this file; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +##  USA, or contact the OSSP project <ossp@ossp.org>.
  +##
  +##  lmtp2nntp.pod: LMTP to NNTP (manual page)
  +##
   
   =pod
   
  Index: ossp-pkg/lmtp2nntp/msg.c
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 msg.c
  --- ossp-pkg/lmtp2nntp/msg.c	2001/08/30 13:57:21	1.15
  +++ ossp-pkg/lmtp2nntp/msg.c	2001/09/04 09:46:06	1.16
  @@ -1,9 +1,35 @@
  +/*
  +**  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**
  +**  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  +**  mailer which forwards mails as Usenet news articles via NNTP.
  +**  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +**
  +**  This program is free software; you can redistribute it and/or
  +**  modify it under the terms of the GNU General Public  License
  +**  as published by the Free Software Foundation; either version
  +**  2.0 of the License, or (at your option) any later version.
  +**
  +**  This program is distributed in the hope that it will be useful,
  +**  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +**  General Public License for more details.
  +**
  +**  You should have received a copy of the GNU General Public License
  +**  along with this file; if not, write to the Free Software
  +**  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +**  USA, or contact the OSSP project <ossp@ossp.org>.
  +**
  +**  msg.c: mail message manipulation library
  +*/
   
   #include <stdlib.h>
  +#include <stdio.h>
  +
   #include "msg.h"
   #include "str.h"
   #include "argz.h"
  -#include <stdio.h>
   
   #ifdef HAVE_CONFIG_H
   #include "config.h"
  Index: ossp-pkg/lmtp2nntp/msg.h
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 msg.h
  --- ossp-pkg/lmtp2nntp/msg.h	2001/08/27 13:45:53	1.4
  +++ ossp-pkg/lmtp2nntp/msg.h	2001/09/04 09:46:06	1.5
  @@ -1,3 +1,28 @@
  +/*
  +**  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**
  +**  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  +**  mailer which forwards mails as Usenet news articles via NNTP.
  +**  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +**
  +**  This program is free software; you can redistribute it and/or
  +**  modify it under the terms of the GNU General Public  License
  +**  as published by the Free Software Foundation; either version
  +**  2.0 of the License, or (at your option) any later version.
  +**
  +**  This program is distributed in the hope that it will be useful,
  +**  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +**  General Public License for more details.
  +**
  +**  You should have received a copy of the GNU General Public License
  +**  along with this file; if not, write to the Free Software
  +**  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +**  USA, or contact the OSSP project <ossp@ossp.org>.
  +**
  +**  msg.c: mail message manipulation library (API)
  +*/
   
   #ifndef __MSG_H__
   #define __MSG_H__
  @@ -7,10 +32,10 @@
   typedef struct {
       char   *azEnvgroups;  /* Groups according to Envelope in GROUPMODE_ENVELOPE */
       size_t  asEnvgroups;
  -    char   *cpMsg;      /* the wholly message to be received by DATA command */
  -    char   *azHeaders;  /* header part of message above */
  +    char   *cpMsg;        /* the wholly message to be received by DATA command */
  +    char   *azHeaders;    /* header part of message above */
       size_t  asHeaders;
  -    char   *cpBody;     /* body part of message above */
  +    char   *cpBody;       /* body part of message above */
       char   *cpMsgid;
       char   *mail_from;
       char   *azRcpt;
  Index: ossp-pkg/lmtp2nntp/nntp.c
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 nntp.c
  --- ossp-pkg/lmtp2nntp/nntp.c	2001/08/28 12:49:33	1.19
  +++ ossp-pkg/lmtp2nntp/nntp.c	2001/09/04 09:46:06	1.20
  @@ -1,31 +1,28 @@
   /*
  - *  nntp.c: NNTP library (implementation)
  - *
  - *  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  - *  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  - *
  - *  This file is part of OSSP lmtp2nntp, an NNTP speaking local
  - *  mailer which forwards mails as Usenet news articles via NNTP.
  - *  It can be found at http://www.ossp.com/pkg/lmtp2nntp/.
  - *
  - *  Permission to use, copy, modify, and distribute this software for
  - *  any purpose with or without fee is hereby granted, provided that
  - *  the above copyright notice and this permission notice appear in all
  - *  copies.
  - *
  - *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  - *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  - *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  - *  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  - *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  - *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  - *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  - *  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  - *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  - *  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  - *  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  - *  SUCH DAMAGE.
  - */
  +**  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**
  +**  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  +**  mailer which forwards mails as Usenet news articles via NNTP.
  +**  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +**
  +**  This program is free software; you can redistribute it and/or
  +**  modify it under the terms of the GNU General Public  License
  +**  as published by the Free Software Foundation; either version
  +**  2.0 of the License, or (at your option) any later version.
  +**
  +**  This program is distributed in the hope that it will be useful,
  +**  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +**  General Public License for more details.
  +**
  +**  You should have received a copy of the GNU General Public License
  +**  along with this file; if not, write to the Free Software
  +**  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +**  USA, or contact the OSSP project <ossp@ossp.org>.
  +**
  +**  nntp.c: Network News Transfer Protocol (NNTP) client library
  +*/
   
   #include <stdio.h>
   #include <stdlib.h>
  Index: ossp-pkg/lmtp2nntp/nntp.h
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 nntp.h
  --- ossp-pkg/lmtp2nntp/nntp.h	2001/08/23 07:52:25	1.7
  +++ ossp-pkg/lmtp2nntp/nntp.h	2001/09/04 09:46:06	1.8
  @@ -1,31 +1,28 @@
   /*
  - *  nntp.h: NNTP library (API definition)
  - *
  - *  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  - *  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  - *
  - *  This file is part of OSSP nntp2nntp, an NNTP speaking local
  - *  mailer which forwards mails as Usenet news articles via NNTP.
  - *  It can be found at http://www.ossp.com/pkg/nntp2nntp/.
  - *
  - *  Permission to use, copy, modify, and distribute this software for
  - *  any purpose with or without fee is hereby granted, provided that
  - *  the above copyright notice and this permission notice appear in all
  - *  copies.
  - *
  - *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  - *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  - *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  - *  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  - *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  - *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  - *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  - *  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  - *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  - *  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  - *  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  - *  SUCH DAMAGE.
  - */
  +**  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**
  +**  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  +**  mailer which forwards mails as Usenet news articles via NNTP.
  +**  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +**
  +**  This program is free software; you can redistribute it and/or
  +**  modify it under the terms of the GNU General Public  License
  +**  as published by the Free Software Foundation; either version
  +**  2.0 of the License, or (at your option) any later version.
  +**
  +**  This program is distributed in the hope that it will be useful,
  +**  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +**  General Public License for more details.
  +**
  +**  You should have received a copy of the GNU General Public License
  +**  along with this file; if not, write to the Free Software
  +**  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +**  USA, or contact the OSSP project <ossp@ossp.org>.
  +**
  +**  nntp.h: Network News Transfer Protocol (NNTP) client library (API)
  +*/
   
   #ifndef __NNTP_H__
   #define __NNTP_H__
  Index: ossp-pkg/lmtp2nntp/sa.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 sa.c
  --- ossp-pkg/lmtp2nntp/sa.c	2001/08/30 13:57:21	1.7
  +++ ossp-pkg/lmtp2nntp/sa.c	2001/09/04 09:46:06	1.8
  @@ -1,32 +1,28 @@
   /*
  - *  SA - Socket Address Library
  - *  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  - *  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  - *
  - *  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  - *  mailer which forwards mails as Usenet news articles via NNTP.
  - *  It can be found at http://www.ossp.com/pkg/lmtp2nntp/.
  - *
  - *  Permission to use, copy, modify, and distribute this software for
  - *  any purpose with or without fee is hereby granted, provided that
  - *  the above copyright notice and this permission notice appear in all
  - *  copies.
  - *
  - *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  - *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  - *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  - *  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  - *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  - *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  - *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  - *  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  - *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  - *  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  - *  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  - *  SUCH DAMAGE.
  - *
  - *  sa.c: implementation
  - */
  +**  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**
  +**  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  +**  mailer which forwards mails as Usenet news articles via NNTP.
  +**  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +**
  +**  This program is free software; you can redistribute it and/or
  +**  modify it under the terms of the GNU General Public  License
  +**  as published by the Free Software Foundation; either version
  +**  2.0 of the License, or (at your option) any later version.
  +**
  +**  This program is distributed in the hope that it will be useful,
  +**  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +**  General Public License for more details.
  +**
  +**  You should have received a copy of the GNU General Public License
  +**  along with this file; if not, write to the Free Software
  +**  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +**  USA, or contact the OSSP project <ossp@ossp.org>.
  +**
  +**  sa.c: Socket Address library
  +*/
   
   #include <stdio.h>
   #include <stdlib.h>
  Index: ossp-pkg/lmtp2nntp/sa.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 sa.h
  --- ossp-pkg/lmtp2nntp/sa.h	2001/08/12 13:44:10	1.2
  +++ ossp-pkg/lmtp2nntp/sa.h	2001/09/04 09:46:06	1.3
  @@ -1,32 +1,28 @@
   /*
  - *  SA - Socket Address Library
  - *  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  - *  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  - *
  - *  This file is part of OSSP nntp2nntp, an SOCK speaking local
  - *  mailer which forwards mails as Usenet news articles via SOCK.
  - *  It can be found at http://www.ossp.com/pkg/nntp2nntp/.
  - *
  - *  Permission to use, copy, modify, and distribute this software for
  - *  any purpose with or without fee is hereby granted, provided that
  - *  the above copyright notice and this permission notice appear in all
  - *  copies.
  - *
  - *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  - *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  - *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  - *  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  - *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  - *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  - *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  - *  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  - *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  - *  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  - *  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  - *  SUCH DAMAGE.
  - *
  - *  sa.h: API definition
  - */
  +**  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**
  +**  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  +**  mailer which forwards mails as Usenet news articles via NNTP.
  +**  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +**
  +**  This program is free software; you can redistribute it and/or
  +**  modify it under the terms of the GNU General Public  License
  +**  as published by the Free Software Foundation; either version
  +**  2.0 of the License, or (at your option) any later version.
  +**
  +**  This program is distributed in the hope that it will be useful,
  +**  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +**  General Public License for more details.
  +**
  +**  You should have received a copy of the GNU General Public License
  +**  along with this file; if not, write to the Free Software
  +**  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +**  USA, or contact the OSSP project <ossp@ossp.org>.
  +**
  +**  sa.c: Socket Address library (API)
  +*/
   
   #ifndef __SA_H__
   #define __SA_H__
  Index: ossp-pkg/lmtp2nntp/shpat_match.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 shpat_match.c
  --- ossp-pkg/lmtp2nntp/shpat_match.c	2001/08/23 09:12:30	1.3
  +++ ossp-pkg/lmtp2nntp/shpat_match.c	2001/09/04 09:46:06	1.4
  @@ -1,7 +1,27 @@
   /*
  +**  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
  -**  shpat_match.c -- MAX POSIX-compliant fnmatch library
  +**  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  +**  mailer which forwards mails as Usenet news articles via NNTP.
  +**  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
   **
  +**  This program is free software; you can redistribute it and/or
  +**  modify it under the terms of the GNU General Public  License
  +**  as published by the Free Software Foundation; either version
  +**  2.0 of the License, or (at your option) any later version.
  +**
  +**  This program is distributed in the hope that it will be useful,
  +**  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +**  General Public License for more details.
  +**
  +**  You should have received a copy of the GNU General Public License
  +**  along with this file; if not, write to the Free Software
  +**  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +**  USA, or contact the OSSP project <ossp@ossp.org>.
  +**
  +**  shpat_match.c: Shell Pattern Matching library
   */
   
   /*
  Index: ossp-pkg/lmtp2nntp/shpat_match.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 shpat_match.h
  --- ossp-pkg/lmtp2nntp/shpat_match.h	2001/08/06 10:51:12	1.1
  +++ ossp-pkg/lmtp2nntp/shpat_match.h	2001/09/04 09:46:06	1.2
  @@ -1,7 +1,27 @@
   /*
  +**  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
  -**  shpat_match.h -- MAX POSIX-compliant fnmatch library
  +**  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  +**  mailer which forwards mails as Usenet news articles via NNTP.
  +**  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
   **
  +**  This program is free software; you can redistribute it and/or
  +**  modify it under the terms of the GNU General Public  License
  +**  as published by the Free Software Foundation; either version
  +**  2.0 of the License, or (at your option) any later version.
  +**
  +**  This program is distributed in the hope that it will be useful,
  +**  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +**  General Public License for more details.
  +**
  +**  You should have received a copy of the GNU General Public License
  +**  along with this file; if not, write to the Free Software
  +**  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +**  USA, or contact the OSSP project <ossp@ossp.org>.
  +**
  +**  shpat_match.c: Shell Pattern Matching library (API)
   */
   
   /*-
  @@ -37,8 +57,8 @@
    * SUCH DAMAGE.
    */
   
  -#ifndef _SHPAT_MATCH_H_
  -#define _SHPAT_MATCH_H_
  +#ifndef __SHPAT_MATCH_H__
  +#define __SHPAT_MATCH_H__
   
   #define SHPAT_M_NOMATCH     1       /* Match failed. */
   
  @@ -59,5 +79,6 @@
   #if defined(__cplusplus)
   }
   #endif
  +
  +#endif /* __SHPAT_MATCH_H__ */
   
  -#endif /* !_SHPAT_MATCH_H_ */
  Index: ossp-pkg/lmtp2nntp/trace.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 trace.c
  --- ossp-pkg/lmtp2nntp/trace.c	2001/08/23 09:12:30	1.3
  +++ ossp-pkg/lmtp2nntp/trace.c	2001/09/04 09:46:06	1.4
  @@ -1,3 +1,28 @@
  +/*
  +**  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**
  +**  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  +**  mailer which forwards mails as Usenet news articles via NNTP.
  +**  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +**
  +**  This program is free software; you can redistribute it and/or
  +**  modify it under the terms of the GNU General Public  License
  +**  as published by the Free Software Foundation; either version
  +**  2.0 of the License, or (at your option) any later version.
  +**
  +**  This program is distributed in the hope that it will be useful,
  +**  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +**  General Public License for more details.
  +**
  +**  You should have received a copy of the GNU General Public License
  +**  along with this file; if not, write to the Free Software
  +**  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +**  USA, or contact the OSSP project <ossp@ossp.org>.
  +**
  +**  trace.c: I/O tracing support
  +*/
   
   #include <errno.h>
   #include <limits.h>
  Index: ossp-pkg/lmtp2nntp/trace.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 trace.h
  --- ossp-pkg/lmtp2nntp/trace.h	2001/08/20 11:28:30	1.2
  +++ ossp-pkg/lmtp2nntp/trace.h	2001/09/04 09:46:06	1.3
  @@ -1,3 +1,28 @@
  +/*
  +**  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**
  +**  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  +**  mailer which forwards mails as Usenet news articles via NNTP.
  +**  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +**
  +**  This program is free software; you can redistribute it and/or
  +**  modify it under the terms of the GNU General Public  License
  +**  as published by the Free Software Foundation; either version
  +**  2.0 of the License, or (at your option) any later version.
  +**
  +**  This program is distributed in the hope that it will be useful,
  +**  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +**  General Public License for more details.
  +**
  +**  You should have received a copy of the GNU General Public License
  +**  along with this file; if not, write to the Free Software
  +**  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +**  USA, or contact the OSSP project <ossp@ossp.org>.
  +**
  +**  trace.h: I/O tracing support (API)
  +*/
   
   #ifndef __TRACE_H__
   #define __TRACE_H__

From ossp-cvs-owner@ossp.org  Tue Sep  4 17:52:51 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f84EqTB02418; Tue, 4 Sep 2001 16:52:29 +0200 (CEST)
Date: Tue, 4 Sep 2001 16:52:29 +0200 (CEST)
Message-Id: <200109041452.f84EqTB02418@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 .cvsignore Makefile.in l2_p.h l2_ut_pcre.c l2_...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-Sep-2001 16:52:29
  Branch: HEAD                             Handle: 2001090415522800

  Added files:
    ossp-pkg/l2             l2_ut_pcre.c l2_ut_pcre.h
  Modified files:
    ossp-pkg/l2             .cvsignore Makefile.in l2_p.h

  Log:
    Add (automatically) stripped down version of PCRE 3.5 for
    use in the filter channel.

  Summary:
    Revision    Changes     Path
    1.5         +2  -0      ossp-pkg/l2/.cvsignore
    1.13        +45 -1      ossp-pkg/l2/Makefile.in
    1.11        +2  -0      ossp-pkg/l2/l2_p.h
    1.1         +5850 -0    ossp-pkg/l2/l2_ut_pcre.c
    1.1         +127 -0     ossp-pkg/l2/l2_ut_pcre.h
  ____________________________________________________________________________

  Index: ossp-pkg/l2/.cvsignore
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 .cvsignore
  --- ossp-pkg/l2/.cvsignore	2001/09/04 13:47:44	1.4
  +++ ossp-pkg/l2/.cvsignore	2001/09/04 14:52:28	1.5
  @@ -16,3 +16,5 @@
   shtool
   l2-config.1
   l2.3
  +l2_ut_pcre_gen
  +l2_ut_pcre_tab.c
  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 Makefile.in
  --- ossp-pkg/l2/Makefile.in	2001/09/04 13:53:50	1.12
  +++ ossp-pkg/l2/Makefile.in	2001/09/04 14:52:28	1.13
  @@ -75,7 +75,8 @@
       l2_ch_prefix.lo \
       l2_ch_buffer.lo \
       l2_ut_format.lo \
  -    l2_ut_param.lo
  +    l2_ut_param.lo \
  +    l2_ut_pcre.lo
   
   #   file containing the official version information
   _VERSION_FILE = \
  @@ -120,6 +121,14 @@
   	$(LIBTOOL) --mode=link --quiet $(CC) -o libl2++.la $(OBJS) l2++.lo -rpath $(libdir) \
   	    -version-info `$(SHTOOL) version -l c -d libtool l2_version.c`
   
  +#   build regex library
  +l2_ut_pcre.lo: l2_ut_pcre.c
  +l2_ut_pcre.c: l2_ut_pcre_tab.c
  +l2_ut_pcre_tab.c: l2_ut_pcre_gen
  +	./l2_ut_pcre_gen >l2_ut_pcre_tab.c
  +l2_ut_pcre_gen:
  +	$(CC) $(CFLAGS) -DL2_UT_PCRE_GENTAB $(LDFLAGS) -o l2_ut_pcre_gen l2_ut_pcre.c $(LIBS)
  +
   #   build test suite programs
   l2_test: l2_test.o libl2.la
   	$(LIBTOOL) --mode=link --quiet $(CC) $(LDFLAGS) -o l2_test l2_test.o libl2.la $(LIBS)
  @@ -209,6 +218,7 @@
   	$(RM) libtool
   	$(RM) Makefile
   	$(RM) l2_test.log
  +	$(RM) l2_ut_pcre_gen l2_ut_pcre_tab.c
   
   #   remove everything which can be regenerated
   #   by "autoconf && autoheader && ./configure && make all"
  @@ -301,4 +311,38 @@
   l2_test.lo: l2_test.c l2.h
   l2_ut_format.lo: l2_ut_format.c l2.h l2_p.h
   l2_ut_param.lo: l2_ut_param.c l2.h l2_p.h
  +l2_version.lo: l2_version.c l2_version.c
  +l2_ch_buffer.lo: l2_ch_buffer.c l2.h l2_p.h
  +l2_ch_fd.lo: l2_ch_fd.c l2.h l2_p.h
  +l2_ch_file.lo: l2_ch_file.c l2.h l2_p.h
  +l2_ch_filter.lo: l2_ch_filter.c l2.h l2_p.h
  +l2_ch_null.lo: l2_ch_null.c l2.h l2_p.h
  +l2_ch_pipe.lo: l2_ch_pipe.c l2.h l2_p.h
  +l2_ch_prefix.lo: l2_ch_prefix.c l2.h l2_p.h
  +l2_ch_socket.lo: l2_ch_socket.c l2.h l2_p.h
  +l2_ch_syslog.lo: l2_ch_syslog.c l2.h l2_p.h
  +l2_channel.lo: l2_channel.c l2.h l2_p.h
  +l2_epreuve.lo: l2_epreuve.c l2.h l2_p.h
  +l2_stream.lo: l2_stream.c l2.h l2_p.h
  +l2_test.lo: l2_test.c l2.h
  +l2_ut_format.lo: l2_ut_format.c l2.h l2_p.h
  +l2_ut_param.lo: l2_ut_param.c l2.h l2_p.h
  +l2_version.lo: l2_version.c l2_version.c
  +l2_ch_buffer.lo: l2_ch_buffer.c l2.h l2_p.h l2_ut_pcre.h
  +l2_ch_fd.lo: l2_ch_fd.c l2.h l2_p.h l2_ut_pcre.h
  +l2_ch_file.lo: l2_ch_file.c l2.h l2_p.h l2_ut_pcre.h
  +l2_ch_filter.lo: l2_ch_filter.c l2.h l2_p.h l2_ut_pcre.h
  +l2_ch_null.lo: l2_ch_null.c l2.h l2_p.h l2_ut_pcre.h
  +l2_ch_pipe.lo: l2_ch_pipe.c l2.h l2_p.h l2_ut_pcre.h
  +l2_ch_prefix.lo: l2_ch_prefix.c l2.h l2_p.h l2_ut_pcre.h
  +l2_ch_socket.lo: l2_ch_socket.c l2.h l2_p.h l2_ut_pcre.h
  +l2_ch_syslog.lo: l2_ch_syslog.c l2.h l2_p.h l2_ut_pcre.h
  +l2_channel.lo: l2_channel.c l2.h l2_p.h l2_ut_pcre.h
  +l2_epreuve.lo: l2_epreuve.c l2.h l2_p.h l2_ut_pcre.h
  +l2_stream.lo: l2_stream.c l2.h l2_p.h l2_ut_pcre.h
  +l2_test.lo: l2_test.c l2.h
  +l2_ut_format.lo: l2_ut_format.c l2.h l2_p.h l2_ut_pcre.h
  +l2_ut_param.lo: l2_ut_param.c l2.h l2_p.h l2_ut_pcre.h
  +l2_ut_pcre.lo: l2_ut_pcre.c l2_ut_pcre.h l2_ut_pcre_tab.c
  +l2_ut_pcre_tab.lo: l2_ut_pcre_tab.c
   l2_version.lo: l2_version.c l2_version.c
  Index: ossp-pkg/l2/l2_p.h
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 l2_p.h
  --- ossp-pkg/l2/l2_p.h	2001/09/04 13:52:59	1.10
  +++ ossp-pkg/l2/l2_p.h	2001/09/04 14:52:28	1.11
  @@ -33,6 +33,8 @@
   #include <stdlib.h>
   #include <errno.h>
   
  +#include "l2_ut_pcre.h"
  +
   #define L2_MAX_MSGSIZE    4096
   #define L2_MAX_CHANNELS    128
   #define L2_MAX_FORMATTERS  128
  Index: ossp-pkg/l2/l2_ut_pcre.c
  ============================================================
  $ cvs update -p -r1.1 l2_ut_pcre.c
  /*************************************************
  *      Perl-Compatible Regular Expressions       *
  *************************************************/
  
  /*
  This is a library of functions to support regular expressions whose syntax
  and semantics are as close as possible to those of the Perl 5 language. See
  the file Tech.Notes for some information on the internals.
  
  Written by: Philip Hazel <ph10@cam.ac.uk>
  
             Copyright (c) 1997-2001 University of Cambridge
  
  -----------------------------------------------------------------------------
  Permission is granted to anyone to use this software for any purpose on any
  computer system, and to redistribute it freely, subject to the following
  restrictions:
  
  1. This software is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  
  2. The origin of this software must not be misrepresented, either by
     explicit claim or by omission.
  
  3. Altered versions must be plainly marked as such, and must not be
     misrepresented as being the original software.
  
  4. If PCRE is embedded in any software that is released under the GNU
     General Purpose Licence (GPL), then the terms of that licence shall
     supersede any condition above with which it is incompatible.
  -----------------------------------------------------------------------------
  */
  
  /* ____ BEGIN internal.h ____ */
  
  /* This header contains definitions that are shared between the different
  modules, but which are not relevant to the outside. */
  
  /* Get the definitions provided by running "configure" */
  
  #ifdef HAVE_CONFIG_H
  #include "config.h"
  #endif
  
  /* Standard C headers plus the external interface definition */
  
  #include <ctype.h>
  #include <limits.h>
  #include <stddef.h>
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  #include "l2_ut_pcre.h"
  
  /* In case there is no definition of offsetof() provided - though any proper
  Standard C system should have one. */
  
  #ifndef offsetof
  #define offsetof(p_type,field) ((size_t)&(((p_type *)0)->field))
  #endif
  
  /* These are the public options that can change during matching. */
  
  #define PCRE_IMS (PCRE_CASELESS|PCRE_MULTILINE|PCRE_DOTALL)
  
  /* Private options flags start at the most significant end of the four bytes,
  but skip the top bit so we can use ints for convenience without getting tangled
  with negative values. The public options defined in pcre.h start at the least
  significant end. Make sure they don't overlap, though now that we have expanded
  to four bytes there is plenty of space. */
  
  #define PCRE_FIRSTSET      0x40000000  /* first_char is set */
  #define PCRE_REQCHSET      0x20000000  /* req_char is set */
  #define PCRE_STARTLINE     0x10000000  /* start after \n for multiline */
  #define PCRE_INGROUP       0x08000000  /* compiling inside a group */
  #define PCRE_ICHANGED      0x04000000  /* i option changes within regex */
  
  /* Options for the "extra" block produced by pcre_study(). */
  
  #define PCRE_STUDY_MAPPED   0x01     /* a map of starting chars exists */
  
  /* Masks for identifying the public options which are permitted at compile
  time, run time or study time, respectively. */
  
  #define PUBLIC_OPTIONS \
    (PCRE_CASELESS|PCRE_EXTENDED|PCRE_ANCHORED|PCRE_MULTILINE| \
     PCRE_DOTALL|PCRE_DOLLAR_ENDONLY|PCRE_EXTRA|PCRE_UNGREEDY|PCRE_UTF8)
  
  #define PUBLIC_EXEC_OPTIONS \
    (PCRE_ANCHORED|PCRE_NOTBOL|PCRE_NOTEOL|PCRE_NOTEMPTY)
  
  #define PUBLIC_STUDY_OPTIONS 0   /* None defined */
  
  /* Magic number to provide a small check against being handed junk. */
  
  #define MAGIC_NUMBER  0x50435245UL   /* 'PCRE' */
  
  /* Miscellaneous definitions */
  
  typedef int BOOL;
  
  #ifndef FALSE
  #define FALSE   0
  #endif
  #ifndef TRUE
  #define TRUE    1
  #endif
  
  /* Escape items that are just an encoding of a particular data value. Note that
  ESC_N is defined as yet another macro, which is set in config.h to either \n
  (the default) or \r (which some people want). */
  
  #ifndef ESC_E
  #define ESC_E 27
  #endif
  
  #ifndef ESC_F
  #define ESC_F '\f'
  #endif
  
  #ifndef ESC_N
  #define ESC_N '\n'
  #endif
  
  #ifndef ESC_R
  #define ESC_R '\r'
  #endif
  
  #ifndef ESC_T
  #define ESC_T '\t'
  #endif
  
  /* These are escaped items that aren't just an encoding of a particular data
  value such as \n. They must have non-zero values, as check_escape() returns
  their negation. Also, they must appear in the same order as in the opcode
  definitions below, up to ESC_z. The final one must be ESC_REF as subsequent
  values are used for \1, \2, \3, etc. There is a test in the code for an escape
  greater than ESC_b and less than ESC_Z to detect the types that may be
  repeated. If any new escapes are put in-between that don't consume a character,
  that code will have to change. */
  
  enum { ESC_A = 1, ESC_B, ESC_b, ESC_D, ESC_d, ESC_S, ESC_s, ESC_W, ESC_w,
         ESC_Z, ESC_z, ESC_REF };
  
  /* Opcode table: OP_BRA must be last, as all values >= it are used for brackets
  that extract substrings. Starting from 1 (i.e. after OP_END), the values up to
  OP_EOD must correspond in order to the list of escapes immediately above. */
  
  enum {
    OP_END,
  
    /* Values corresponding to backslashed metacharacters */
  
    OP_SOD,            /* Start of data: \A */
    OP_NOT_WORD_BOUNDARY,  /* \B */
    OP_WORD_BOUNDARY,      /* \b */
    OP_NOT_DIGIT,          /* \D */
    OP_DIGIT,              /* \d */
    OP_NOT_WHITESPACE,     /* \S */
    OP_WHITESPACE,         /* \s */
    OP_NOT_WORDCHAR,       /* \W */
    OP_WORDCHAR,           /* \w */
    OP_EODN,
    OP_EOD,
  
    OP_OPT,            /* Set runtime options */
    OP_CIRC,           /* Start of line - varies with multiline switch */
    OP_DOLL,
    OP_ANY,            /* Match any character */
    OP_CHARS,          /* Match string of characters */
    OP_NOT,            /* Match anything but the following char */
  
    OP_STAR,           /* The maximizing and minimizing versions of */
    OP_MINSTAR,        /* all these opcodes must come in pairs, with */
    OP_PLUS,           /* the minimizing one second. */
    OP_MINPLUS,        /* This first set applies to single characters */
    OP_QUERY,
    OP_MINQUERY,
    OP_UPTO,           /* From 0 to n matches */
    OP_MINUPTO,
    OP_EXACT,          /* Exactly n matches */
  
    OP_NOTSTAR,        /* The maximizing and minimizing versions of */
    OP_NOTMINSTAR,     /* all these opcodes must come in pairs, with */
    OP_NOTPLUS,        /* the minimizing one second. */
    OP_NOTMINPLUS,     /* This first set applies to "not" single characters */
    OP_NOTQUERY,
    OP_NOTMINQUERY,
    OP_NOTUPTO,        /* From 0 to n matches */
    OP_NOTMINUPTO,
    OP_NOTEXACT,       /* Exactly n matches */
  
    OP_TYPESTAR,       /* The maximizing and minimizing versions of */
    OP_TYPEMINSTAR,    /* all these opcodes must come in pairs, with */
    OP_TYPEPLUS,       /* the minimizing one second. These codes must */
    OP_TYPEMINPLUS,    /* be in exactly the same order as those above. */
    OP_TYPEQUERY,      /* This set applies to character types such as \d */
    OP_TYPEMINQUERY,
    OP_TYPEUPTO,       /* From 0 to n matches */
    OP_TYPEMINUPTO,
    OP_TYPEEXACT,      /* Exactly n matches */
  
    OP_CRSTAR,         /* The maximizing and minimizing versions of */
    OP_CRMINSTAR,      /* all these opcodes must come in pairs, with */
    OP_CRPLUS,         /* the minimizing one second. These codes must */
    OP_CRMINPLUS,      /* be in exactly the same order as those above. */
    OP_CRQUERY,        /* These are for character classes and back refs */
    OP_CRMINQUERY,
    OP_CRRANGE,        /* These are different to the three seta above. */
    OP_CRMINRANGE,
  
    OP_CLASS,          /* Match a character class */
    OP_REF,            /* Match a back reference */
    OP_RECURSE,        /* Match this pattern recursively */
  
    OP_ALT,            /* Start of alternation */
    OP_KET,
    OP_KETRMAX,        /* These two must remain together and in this */
    OP_KETRMIN,        /* order. They are for groups the repeat for ever. */
  
    /* The assertions must come before ONCE and COND */
  
    OP_ASSERT,         /* Positive lookahead */
    OP_ASSERT_NOT,     /* Negative lookahead */
    OP_ASSERTBACK,     /* Positive lookbehind */
    OP_ASSERTBACK_NOT, /* Negative lookbehind */
    OP_REVERSE,        /* Move pointer back - used in lookbehind assertions */
  
    /* ONCE and COND must come after the assertions, with ONCE first, as there's
    a test for >= ONCE for a subpattern that isn't an assertion. */
  
    OP_ONCE,           /* Once matched, don't back up into the subpattern */
    OP_COND,           /* Conditional group */
    OP_CREF,           /* Used to hold an extraction string number (cond ref) */
  
    OP_BRAZERO,        /* These two must remain together and in this */
    OP_BRAMINZERO,     /* order. */
  
    OP_BRANUMBER,      /* Used for extracting brackets whose number is greater
                          than can fit into an opcode. */
  
    OP_BRA             /* This and greater values are used for brackets that
                          extract substrings up to a basic limit. After that,
                          use is made of OP_BRANUMBER. */
  };
  
  /* The highest extraction number before we have to start using additional
  bytes. (Originally PCRE didn't have support for extraction counts highter than
  this number.) The value is limited by the number of opcodes left after OP_BRA,
  i.e. 255 - OP_BRA. We actually set it a bit lower to leave room for additional
  opcodes. */
  
  #define EXTRACT_BASIC_MAX  150
  
  /* The texts of compile-time error messages are defined as macros here so that
  they can be accessed by the POSIX wrapper and converted into error codes.  Yes,
  I could have used error codes in the first place, but didn't feel like changing
  just to accommodate the POSIX wrapper. */
  
  #define ERR1  "\\ at end of pattern"
  #define ERR2  "\\c at end of pattern"
  #define ERR3  "unrecognized character follows \\"
  #define ERR4  "numbers out of order in {} quantifier"
  #define ERR5  "number too big in {} quantifier"
  #define ERR6  "missing terminating ] for character class"
  #define ERR7  "invalid escape sequence in character class"
  #define ERR8  "range out of order in character class"
  #define ERR9  "nothing to repeat"
  #define ERR10 "operand of unlimited repeat could match the empty string"
  #define ERR11 "internal error: unexpected repeat"
  #define ERR12 "unrecognized character after (?"
  #define ERR13 "unused error"
  #define ERR14 "missing )"
  #define ERR15 "back reference to non-existent subpattern"
  #define ERR16 "erroffset passed as NULL"
  #define ERR17 "unknown option bit(s) set"
  #define ERR18 "missing ) after comment"
  #define ERR19 "parentheses nested too deeply"
  #define ERR20 "regular expression too large"
  #define ERR21 "failed to get memory"
  #define ERR22 "unmatched parentheses"
  #define ERR23 "internal error: code overflow"
  #define ERR24 "unrecognized character after (?<"
  #define ERR25 "lookbehind assertion is not fixed length"
  #define ERR26 "malformed number after (?("
  #define ERR27 "conditional group contains more than two branches"
  #define ERR28 "assertion expected after (?("
  #define ERR29 "(?p must be followed by )"
  #define ERR30 "unknown POSIX class name"
  #define ERR31 "POSIX collating elements are not supported"
  #define ERR32 "this version of PCRE is not compiled with PCRE_UTF8 support"
  #define ERR33 "characters with values > 255 are not yet supported in classes"
  #define ERR34 "character value in \\x{...} sequence is too large"
  #define ERR35 "invalid condition (?(0)"
  
  /* All character handling must be done as unsigned characters. Otherwise there
  are problems with top-bit-set characters and functions such as isspace().
  However, we leave the interface to the outside world as char *, because that
  should make things easier for callers. We define a short type for unsigned char
  to save lots of typing. I tried "uchar", but it causes problems on Digital
  Unix, where it is defined in sys/types, so use "uschar" instead. */
  
  typedef unsigned char uschar;
  
  /* The real format of the start of the pcre block; the actual code vector
  runs on as long as necessary after the end. */
  
  typedef struct real_pcre {
    unsigned long int magic_number;
    size_t size;
    const unsigned char *tables;
    unsigned long int options;
    unsigned short int top_bracket;
    unsigned short int top_backref;
    uschar first_char;
    uschar req_char;
    uschar code[1];
  } real_pcre;
  
  /* The real format of the extra block returned by pcre_study(). */
  
  typedef struct real_pcre_extra {
    uschar options;
    uschar start_bits[32];
  } real_pcre_extra;
  
  /* Structure for passing "static" information around between the functions
  doing the compiling, so that they are thread-safe. */
  
  typedef struct compile_data {
    const uschar *lcc;            /* Points to lower casing table */
    const uschar *fcc;            /* Points to case-flipping table */
    const uschar *cbits;          /* Points to character type table */
    const uschar *ctypes;         /* Points to table of type maps */
  } compile_data;
  
  /* Structure for passing "static" information around between the functions
  doing the matching, so that they are thread-safe. */
  
  typedef struct match_data {
    int    errorcode;             /* As it says */
    int   *offset_vector;         /* Offset vector */
    int    offset_end;            /* One past the end */
    int    offset_max;            /* The maximum usable for return data */
    const uschar *lcc;            /* Points to lower casing table */
    const uschar *ctypes;         /* Points to table of type maps */
    BOOL   offset_overflow;       /* Set if too many extractions */
    BOOL   notbol;                /* NOTBOL flag */
    BOOL   noteol;                /* NOTEOL flag */
    BOOL   utf8;                  /* UTF8 flag */
    BOOL   endonly;               /* Dollar not before final \n */
    BOOL   notempty;              /* Empty string match not wanted */
    const uschar *start_pattern;  /* For use when recursing */
    const uschar *start_subject;  /* Start of the subject string */
    const uschar *end_subject;
    const uschar *start_match;    /* Start of this match attempt */
    const uschar *end_match_ptr;  /* Subject position at end match */
    int    end_offset_top;        /* Highwater mark at end of match */
  } match_data;
  
  /* Bit definitions for entries in the pcre_ctypes table. */
  
  #define ctype_space   0x01
  #define ctype_letter  0x02
  #define ctype_digit   0x04
  #define ctype_xdigit  0x08
  #define ctype_word    0x10   /* alphameric or '_' */
  #define ctype_meta    0x80   /* regexp meta char or zero (end pattern) */
  
  /* Offsets for the bitmap tables in pcre_cbits. Each table contains a set
  of bits for a class map. Some classes are built by combining these tables. */
  
  #define cbit_space     0      /* [:space:] or \s */
  #define cbit_xdigit   32      /* [:xdigit:] */
  #define cbit_digit    64      /* [:digit:] or \d */
  #define cbit_upper    96      /* [:upper:] */
  #define cbit_lower   128      /* [:lower:] */
  #define cbit_word    160      /* [:word:] or \w */
  #define cbit_graph   192      /* [:graph:] */
  #define cbit_print   224      /* [:print:] */
  #define cbit_punct   256      /* [:punct:] */
  #define cbit_cntrl   288      /* [:cntrl:] */
  #define cbit_length  320      /* Length of the cbits table */
  
  /* Offsets of the various tables from the base tables pointer, and
  total length. */
  
  #define lcc_offset      0
  #define fcc_offset    256
  #define cbits_offset  512
  #define ctypes_offset (cbits_offset + cbit_length)
  #define tables_length (ctypes_offset + 256)
  
  /* ____ END internal.h ____ */
  
  #ifndef L2_UT_PCRE_GENTAB
  
  /* ____ BEGIN pcre.c ____ */
  
  /* Use a macro for debugging printing, 'cause that eliminates the use of #ifdef
  inline, and there are *still* stupid compilers about that don't like indented
  pre-processor statements. I suppose it's only been 10 years... */
  
  /* Include the internals header, which itself includes Standard C headers plus
  the external pcre header. */
  
  /* Allow compilation as C++ source code, should anybody want to do that. */
  
  #ifdef __cplusplus
  #define class pcre_class
  #endif
  
  /* Maximum number of items on the nested bracket stacks at compile time. This
  applies to the nesting of all kinds of parentheses. It does not limit
  un-nested, non-capturing parentheses. This number can be made bigger if
  necessary - it is used to dimension one int and one unsigned char vector at
  compile time. */
  
  #define BRASTACK_SIZE 200
  
  /* The number of bytes in a literal character string above which we can't add
  any more is different when UTF-8 characters may be encountered. */
  
  #ifdef L2_UT_PCRE_SUPPORT_UTF8
  #define MAXLIT 250
  #else
  #define MAXLIT 255
  #endif
  
  /* Min and max values for the common repeats; for the maxima, 0 => infinity */
  
  static const char rep_min[] = { 0, 0, 1, 1, 0, 0 };
  static const char rep_max[] = { 0, 0, 0, 0, 1, 1 };
  
  /* Text forms of OP_ values and things, for debugging (not all used) */
  
  /* Table for handling escaped characters in the range '0'-'z'. Positive returns
  are simple data values; negative values are for special things like \d and so
  on. Zero means further processing is needed (for things like \x), or the escape
  is invalid. */
  
  static const short int escapes[] = {
      0,      0,      0,      0,      0,      0,      0,      0,   /* 0 - 7 */
      0,      0,    ':',    ';',    '<',    '=',    '>',    '?',   /* 8 - ? */
    '@', -ESC_A, -ESC_B,      0, -ESC_D,      0,      0,      0,   /* @ - G */
      0,      0,      0,      0,      0,      0,      0,      0,   /* H - O */
      0,      0,      0, -ESC_S,      0,      0,      0, -ESC_W,   /* P - W */
      0,      0, -ESC_Z,    '[',   '\\',    ']',    '^',    '_',   /* X - _ */
    '`',      7, -ESC_b,      0, -ESC_d,  ESC_E,  ESC_F,      0,   /* ` - g */
      0,      0,      0,      0,      0,      0,  ESC_N,      0,   /* h - o */
      0,      0,  ESC_R, -ESC_s,  ESC_T,      0,      0, -ESC_w,   /* p - w */
      0,      0, -ESC_z                                            /* x - z */
  };
  
  /* Tables of names of POSIX character classes and their lengths. The list is
  terminated by a zero length entry. The first three must be alpha, upper, lower,
  as this is assumed for handling case independence. */
  
  static const char *posix_names[] = {
    "alpha", "lower", "upper",
    "alnum", "ascii", "cntrl", "digit", "graph",
    "print", "punct", "space", "word",  "xdigit" };
  
  static const uschar posix_name_lengths[] = {
    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 6, 0 };
  
  /* Table of class bit maps for each POSIX class; up to three may be combined
  to form the class. */
  
  static const int posix_class_maps[] = {
    cbit_lower, cbit_upper, -1,             /* alpha */
    cbit_lower, -1,         -1,             /* lower */
    cbit_upper, -1,         -1,             /* upper */
    cbit_digit, cbit_lower, cbit_upper,     /* alnum */
    cbit_print, cbit_cntrl, -1,             /* ascii */
    cbit_cntrl, -1,         -1,             /* cntrl */
    cbit_digit, -1,         -1,             /* digit */
    cbit_graph, -1,         -1,             /* graph */
    cbit_print, -1,         -1,             /* print */
    cbit_punct, -1,         -1,             /* punct */
    cbit_space, -1,         -1,             /* space */
    cbit_word,  -1,         -1,             /* word */
    cbit_xdigit,-1,         -1              /* xdigit */
  };
  
  /* Definition to allow mutual recursion */
  
  static BOOL
    compile_regex(int, int, int *, uschar **, const uschar **, const char **,
      BOOL, int, int *, int *, compile_data *);
  
  /* Structure for building a chain of data that actually lives on the
  stack, for holding the values of the subject pointer at the start of each
  subpattern, so as to detect when an empty string has been matched by a
  subpattern - to break infinite loops. */
  
  typedef struct eptrblock {
    struct eptrblock *prev;
    const uschar *saved_eptr;
  } eptrblock;
  
  /* Flag bits for the match() function */
  
  #define match_condassert   0x01    /* Called to check a condition assertion */
  #define match_isgroup      0x02    /* Set if start of bracketed group */
  
  /*************************************************
  *               Global variables                 *
  *************************************************/
  
  /* PCRE is thread-clean and doesn't use any global variables in the normal
  sense. However, it calls memory allocation and free functions via the two
  indirections below, which are can be changed by the caller, but are shared
  between all threads. */
  
  void *(*pcre_malloc)(size_t) = malloc;
  void  (*pcre_free)(void *) = free;
  
  /*************************************************
  *    Macros and tables for character handling    *
  *************************************************/
  
  /* When UTF-8 encoding is being used, a character is no longer just a single
  byte. The macros for character handling generate simple sequences when used in
  byte-mode, and more complicated ones for UTF-8 characters. */
  
  #ifndef L2_UT_PCRE_SUPPORT_UTF8
  #define GETCHARINC(c, eptr) c = *eptr++;
  #define GETCHARLEN(c, eptr, len) c = *eptr;
  #define BACKCHAR(eptr)
  
  #else   /* L2_UT_PCRE_SUPPORT_UTF8 */
  
  /* Get the next UTF-8 character, advancing the pointer */
  
  #define GETCHARINC(c, eptr) \
    c = *eptr++; \
    if (md->utf8 && (c & 0xc0) == 0xc0) \
      { \
      int a = utf8_table4[c & 0x3f];  /* Number of additional bytes */ \
      int s = 6 - a;                  /* Amount to shift next byte */  \
      c &= utf8_table3[a];            /* Low order bits from first byte */ \
      while (a-- > 0) \
        { \
        c |= (*eptr++ & 0x3f) << s; \
        s += 6; \
        } \
      }
  
  /* Get the next UTF-8 character, not advancing the pointer, setting length */
  
  #define GETCHARLEN(c, eptr, len) \
    c = *eptr; \
    len = 1; \
    if (md->utf8 && (c & 0xc0) == 0xc0) \
      { \
      int i; \
      int a = utf8_table4[c & 0x3f];  /* Number of additional bytes */ \
      int s = 6 - a;                  /* Amount to shift next byte */  \
      c &= utf8_table3[a];            /* Low order bits from first byte */ \
      for (i = 1; i <= a; i++) \
        { \
        c |= (eptr[i] & 0x3f) << s; \
        s += 6; \
        } \
      len += a; \
      }
  
  /* If the pointer is not at the start of a character, move it back until
  it is. */
  
  #define BACKCHAR(eptr) while((*eptr & 0xc0) == 0x80) eptr--;
  
  #endif
  
  /*************************************************
  *             Default character tables           *
  *************************************************/
  
  /* A default set of character tables is included in the PCRE binary. Its source
  is built by the maketables auxiliary program, which uses the default C ctypes
  functions, and put in the file chartables.c. These tables are used by PCRE
  whenever the caller of pcre_compile() does not provide an alternate set of
  tables. */
  
  #include "l2_ut_pcre_tab.c"
  
  #ifdef L2_UT_PCRE_SUPPORT_UTF8
  /*************************************************
  *           Tables for UTF-8 support             *
  *************************************************/
  
  /* These are the breakpoints for different numbers of bytes in a UTF-8
  character. */
  
  static int utf8_table1[] = { 0x7f, 0x7ff, 0xffff, 0x1fffff, 0x3ffffff, 0x7fffffff};
  
  /* These are the indicator bits and the mask for the data bits to set in the
  first byte of a character, indexed by the number of additional bytes. */
  
  static int utf8_table2[] = { 0,    0xc0, 0xe0, 0xf0, 0xf8, 0xfc};
  static int utf8_table3[] = { 0xff, 0x1f, 0x0f, 0x07, 0x03, 0x01};
  
  /* Table of the number of extra characters, indexed by the first character
  masked with 0x3f. The highest number for a valid UTF-8 character is in fact
  0x3d. */
  
  static uschar utf8_table4[] = {
    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
    3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5 };
  
  /*************************************************
  *       Convert character value to UTF-8         *
  *************************************************/
  
  /* This function takes an integer value in the range 0 - 0x7fffffff
  and encodes it as a UTF-8 character in 0 to 6 bytes.
  
  Arguments:
    cvalue     the character value
    buffer     pointer to buffer for result - at least 6 bytes long
  
  Returns:     number of characters placed in the buffer
  */
  
  static int
  ord2utf8(int cvalue, uschar *buffer)
  {
  register int i, j;
  for (i = 0; i < sizeof(utf8_table1)/sizeof(int); i++)
    if (cvalue <= utf8_table1[i]) break;
  *buffer++ = utf8_table2[i] | (cvalue & utf8_table3[i]);
  cvalue >>= 6 - i;
  for (j = 0; j < i; j++)
    {
    *buffer++ = 0x80 | (cvalue & 0x3f);
    cvalue >>= 6;
    }
  return i + 1;
  }
  #endif
  
  /*************************************************
  *          Return version string                 *
  *************************************************/
  
  #define STRING(a)  # a
  #define XSTRING(s) STRING(s)
  
  const char *
  pcre_version(void)
  {
  return XSTRING(PCRE_MAJOR) "." XSTRING(PCRE_MINOR) " " XSTRING(PCRE_DATE);
  }
  
  /*************************************************
  * (Obsolete) Return info about compiled pattern  *
  *************************************************/
  
  /* This is the original "info" function. It picks potentially useful data out
  of the private structure, but its interface was too rigid. It remains for
  backwards compatibility. The public options are passed back in an int - though
  the re->options field has been expanded to a long int, all the public options
  at the low end of it, and so even on 16-bit systems this will still be OK.
  Therefore, I haven't changed the API for pcre_info().
  
  Arguments:
    external_re   points to compiled code
    optptr        where to pass back the options
    first_char    where to pass back the first character,
                  or -1 if multiline and all branches start ^,
                  or -2 otherwise
  
  Returns:        number of capturing subpatterns
                  or negative values on error
  */
  
  int
  pcre_info(const pcre *external_re, int *optptr, int *first_char)
  {
  const real_pcre *re = (const real_pcre *)external_re;
  if (re == NULL) return PCRE_ERROR_NULL;
  if (re->magic_number != MAGIC_NUMBER) return PCRE_ERROR_BADMAGIC;
  if (optptr != NULL) *optptr = (int)(re->options & PUBLIC_OPTIONS);
  if (first_char != NULL)
    *first_char = ((re->options & PCRE_FIRSTSET) != 0)? re->first_char :
       ((re->options & PCRE_STARTLINE) != 0)? -1 : -2;
  return re->top_bracket;
  }
  
  /*************************************************
  *        Return info about compiled pattern      *
  *************************************************/
  
  /* This is a newer "info" function which has an extensible interface so
  that additional items can be added compatibly.
  
  Arguments:
    external_re      points to compiled code
    external_study   points to study data, or NULL
    what             what information is required
    where            where to put the information
  
  Returns:           0 if data returned, negative on error
  */
  
  int
  pcre_fullinfo(const pcre *external_re, const pcre_extra *study_data, int what,
    void *where)
  {
  const real_pcre *re = (const real_pcre *)external_re;
  const real_pcre_extra *study = (const real_pcre_extra *)study_data;
  
  if (re == NULL || where == NULL) return PCRE_ERROR_NULL;
  if (re->magic_number != MAGIC_NUMBER) return PCRE_ERROR_BADMAGIC;
  
  switch (what)
    {
    case PCRE_INFO_OPTIONS:
    *((unsigned long int *)where) = re->options & PUBLIC_OPTIONS;
    break;
  
    case PCRE_INFO_SIZE:
    *((size_t *)where) = re->size;
    break;
  
    case PCRE_INFO_CAPTURECOUNT:
    *((int *)where) = re->top_bracket;
    break;
  
    case PCRE_INFO_BACKREFMAX:
    *((int *)where) = re->top_backref;
    break;
  
    case PCRE_INFO_FIRSTCHAR:
    *((int *)where) =
      ((re->options & PCRE_FIRSTSET) != 0)? re->first_char :
      ((re->options & PCRE_STARTLINE) != 0)? -1 : -2;
    break;
  
    case PCRE_INFO_FIRSTTABLE:
    *((const uschar **)where) =
      (study != NULL && (study->options & PCRE_STUDY_MAPPED) != 0)?
        study->start_bits : NULL;
    break;
  
    case PCRE_INFO_LASTLITERAL:
    *((int *)where) =
      ((re->options & PCRE_REQCHSET) != 0)? re->req_char : -1;
    break;
  
    default: return PCRE_ERROR_BADOPTION;
    }
  
  return 0;
  }
  
  /*************************************************
  *            Handle escapes                      *
  *************************************************/
  
  /* This function is called when a \ has been encountered. It either returns a
  positive value for a simple escape such as \n, or a negative value which
  encodes one of the more complicated things such as \d. When UTF-8 is enabled,
  a positive value greater than 255 may be returned. On entry, ptr is pointing at
  the \. On exit, it is on the final character of the escape sequence.
  
  Arguments:
    ptrptr     points to the pattern position pointer
    errorptr   points to the pointer to the error message
    bracount   number of previous extracting brackets
    options    the options bits
    isclass    TRUE if inside a character class
    cd         pointer to char tables block
  
  Returns:     zero or positive => a data character
               negative => a special escape sequence
               on error, errorptr is set
  */
  
  static int
  check_escape(const uschar **ptrptr, const char **errorptr, int bracount,
    int options, BOOL isclass, compile_data *cd)
  {
  const uschar *ptr = *ptrptr;
  int c, i;
  
  /* If backslash is at the end of the pattern, it's an error. */
  
  c = *(++ptr);
  if (c == 0) *errorptr = ERR1;
  
  /* Digits or letters may have special meaning; all others are literals. */
  
  else if (c < '0' || c > 'z') {}
  
  /* Do an initial lookup in a table. A non-zero result is something that can be
  returned immediately. Otherwise further processing may be required. */
  
  else if ((i = escapes[c - '0']) != 0) c = i;
  
  /* Escapes that need further processing, or are illegal. */
  
  else
    {
    const uschar *oldptr;
    switch (c)
      {
      /* The handling of escape sequences consisting of a string of digits
      starting with one that is not zero is not straightforward. By experiment,
      the way Perl works seems to be as follows:
  
      Outside a character class, the digits are read as a decimal number. If the
      number is less than 10, or if there are that many previous extracting
      left brackets, then it is a back reference. Otherwise, up to three octal
      digits are read to form an escaped byte. Thus \123 is likely to be octal
      123 (cf \0123, which is octal 012 followed by the literal 3). If the octal
      value is greater than 377, the least significant 8 bits are taken. Inside a
      character class, \ followed by a digit is always an octal number. */
  
      case '1': case '2': case '3': case '4': case '5':
      case '6': case '7': case '8': case '9':
  
      if (!isclass)
        {
        oldptr = ptr;
        c -= '0';
        while ((cd->ctypes[ptr[1]] & ctype_digit) != 0)
          c = c * 10 + *(++ptr) - '0';
        if (c < 10 || c <= bracount)
          {
          c = -(ESC_REF + c);
          break;
          }
        ptr = oldptr;      /* Put the pointer back and fall through */
        }
  
      /* Handle an octal number following \. If the first digit is 8 or 9, Perl
      generates a binary zero byte and treats the digit as a following literal.
      Thus we have to pull back the pointer by one. */
  
      if ((c = *ptr) >= '8')
        {
        ptr--;
        c = 0;
        break;
        }
  
      /* \0 always starts an octal number, but we may drop through to here with a
      larger first octal digit. */
  
      case '0':
      c -= '0';
      while(i++ < 2 && (cd->ctypes[ptr[1]] & ctype_digit) != 0 &&
        ptr[1] != '8' && ptr[1] != '9')
          c = c * 8 + *(++ptr) - '0';
      c &= 255;     /* Take least significant 8 bits */
      break;
  
      /* \x is complicated when UTF-8 is enabled. \x{ddd} is a character number
      which can be greater than 0xff, but only if the ddd are hex digits. */
  
      case 'x':
  #ifdef L2_UT_PCRE_SUPPORT_UTF8
      if (ptr[1] == '{' && (options & PCRE_UTF8) != 0)
        {
        const uschar *pt = ptr + 2;
        register int count = 0;
        c = 0;
        while ((cd->ctypes[*pt] & ctype_xdigit) != 0)
          {
          count++;
          c = c * 16 + cd->lcc[*pt] -
            (((cd->ctypes[*pt] & ctype_digit) != 0)? '0' : 'W');
          pt++;
          }
        if (*pt == '}')
          {
          if (c < 0 || count > 8) *errorptr = ERR34;
          ptr = pt;
          break;
          }
        /* If the sequence of hex digits does not end with '}', then we don't
        recognize this construct; fall through to the normal \x handling. */
        }
  #endif
  
      /* Read just a single hex char */
  
      c = 0;
      while (i++ < 2 && (cd->ctypes[ptr[1]] & ctype_xdigit) != 0)
        {
        ptr++;
        c = c * 16 + cd->lcc[*ptr] -
          (((cd->ctypes[*ptr] & ctype_digit) != 0)? '0' : 'W');
        }
      break;
  
      /* Other special escapes not starting with a digit are straightforward */
  
      case 'c':
      c = *(++ptr);
      if (c == 0)
        {
        *errorptr = ERR2;
        return 0;
        }
  
      /* A letter is upper-cased; then the 0x40 bit is flipped */
  
      if (c >= 'a' && c <= 'z') c = cd->fcc[c];
      c ^= 0x40;
      break;
  
      /* PCRE_EXTRA enables extensions to Perl in the matter of escapes. Any
      other alphameric following \ is an error if PCRE_EXTRA was set; otherwise,
      for Perl compatibility, it is a literal. This code looks a bit odd, but
      there used to be some cases other than the default, and there may be again
      in future, so I haven't "optimized" it. */
  
      default:
      if ((options & PCRE_EXTRA) != 0) switch(c)
        {
        default:
        *errorptr = ERR3;
        break;
        }
      break;
      }
    }
  
  *ptrptr = ptr;
  return c;
  }
  
  /*************************************************
  *            Check for counted repeat            *
  *************************************************/
  
  /* This function is called when a '{' is encountered in a place where it might
  start a quantifier. It looks ahead to see if it really is a quantifier or not.
  It is only a quantifier if it is one of the forms {ddd} {ddd,} or {ddd,ddd}
  where the ddds are digits.
  
  Arguments:
    p         pointer to the first char after '{'
    cd        pointer to char tables block
  
  Returns:    TRUE or FALSE
  */
  
  static BOOL
  is_counted_repeat(const uschar *p, compile_data *cd)
  {
  if ((cd->ctypes[*p++] & ctype_digit) == 0) return FALSE;
  while ((cd->ctypes[*p] & ctype_digit) != 0) p++;
  if (*p == '}') return TRUE;
  
  if (*p++ != ',') return FALSE;
  if (*p == '}') return TRUE;
  
  if ((cd->ctypes[*p++] & ctype_digit) == 0) return FALSE;
  while ((cd->ctypes[*p] & ctype_digit) != 0) p++;
  return (*p == '}');
  }
  
  /*************************************************
  *         Read repeat counts                     *
  *************************************************/
  
  /* Read an item of the form {n,m} and return the values. This is called only
  after is_counted_repeat() has confirmed that a repeat-count quantifier exists,
  so the syntax is guaranteed to be correct, but we need to check the values.
  
  Arguments:
    p          pointer to first char after '{'
    minp       pointer to int for min
    maxp       pointer to int for max
               returned as -1 if no max
    errorptr   points to pointer to error message
    cd         pointer to character tables clock
  
  Returns:     pointer to '}' on success;
               current ptr on error, with errorptr set
  */
  
  static const uschar *
  read_repeat_counts(const uschar *p, int *minp, int *maxp,
    const char **errorptr, compile_data *cd)
  {
  int min = 0;
  int max = -1;
  
  while ((cd->ctypes[*p] & ctype_digit) != 0) min = min * 10 + *p++ - '0';
  
  if (*p == '}') max = min; else
    {
    if (*(++p) != '}')
      {
      max = 0;
      while((cd->ctypes[*p] & ctype_digit) != 0) max = max * 10 + *p++ - '0';
      if (max < min)
        {
        *errorptr = ERR4;
        return p;
        }
      }
    }
  
  /* Do paranoid checks, then fill in the required variables, and pass back the
  pointer to the terminating '}'. */
  
  if (min > 65535 || max > 65535)
    *errorptr = ERR5;
  else
    {
    *minp = min;
    *maxp = max;
    }
  return p;
  }
  
  /*************************************************
  *        Find the fixed length of a pattern      *
  *************************************************/
  
  /* Scan a pattern and compute the fixed length of subject that will match it,
  if the length is fixed. This is needed for dealing with backward assertions.
  
  Arguments:
    code     points to the start of the pattern (the bracket)
    options  the compiling options
  
  Returns:   the fixed length, or -1 if there is no fixed length
  */
  
  static int
  find_fixedlength(uschar *code, int options)
  {
  int length = -1;
  
  register int branchlength = 0;
  register uschar *cc = code + 3;
  
  /* Scan along the opcodes for this branch. If we get to the end of the
  branch, check the length against that of the other branches. */
  
  for (;;)
    {
    int d;
    register int op = *cc;
    if (op >= OP_BRA) op = OP_BRA;
  
    switch (op)
      {
      case OP_BRA:
      case OP_ONCE:
      case OP_COND:
      d = find_fixedlength(cc, options);
      if (d < 0) return -1;
      branchlength += d;
      do cc += (cc[1] << 8) + cc[2]; while (*cc == OP_ALT);
      cc += 3;
      break;
  
      /* Reached end of a branch; if it's a ket it is the end of a nested
      call. If it's ALT it is an alternation in a nested call. If it is
      END it's the end of the outer call. All can be handled by the same code. */
  
      case OP_ALT:
      case OP_KET:
      case OP_KETRMAX:
      case OP_KETRMIN:
      case OP_END:
      if (length < 0) length = branchlength;
        else if (length != branchlength) return -1;
      if (*cc != OP_ALT) return length;
      cc += 3;
      branchlength = 0;
      break;
  
      /* Skip over assertive subpatterns */
  
      case OP_ASSERT:
      case OP_ASSERT_NOT:
      case OP_ASSERTBACK:
      case OP_ASSERTBACK_NOT:
      do cc += (cc[1] << 8) + cc[2]; while (*cc == OP_ALT);
      cc += 3;
      break;
  
      /* Skip over things that don't match chars */
  
      case OP_REVERSE:
      case OP_BRANUMBER:
      case OP_CREF:
      cc++;
      /* Fall through */
  
      case OP_OPT:
      cc++;
      /* Fall through */
  
      case OP_SOD:
      case OP_EOD:
      case OP_EODN:
      case OP_CIRC:
      case OP_DOLL:
      case OP_NOT_WORD_BOUNDARY:
      case OP_WORD_BOUNDARY:
      cc++;
      break;
  
      /* Handle char strings. In UTF-8 mode we must count characters, not bytes.
      This requires a scan of the string, unfortunately. We assume valid UTF-8
      strings, so all we do is reduce the length by one for byte whose bits are
      10xxxxxx. */
  
      case OP_CHARS:
      branchlength += *(++cc);
  #ifdef L2_UT_PCRE_SUPPORT_UTF8
      for (d = 1; d <= *cc; d++)
        if ((cc[d] & 0xc0) == 0x80) branchlength--;
  #endif
      cc += *cc + 1;
      break;
  
      /* Handle exact repetitions */
  
      case OP_EXACT:
      case OP_TYPEEXACT:
      branchlength += (cc[1] << 8) + cc[2];
      cc += 4;
      break;
  
      /* Handle single-char matchers */
  
      case OP_NOT_DIGIT:
      case OP_DIGIT:
      case OP_NOT_WHITESPACE:
      case OP_WHITESPACE:
      case OP_NOT_WORDCHAR:
      case OP_WORDCHAR:
      case OP_ANY:
      branchlength++;
      cc++;
      break;
  
      /* Check a class for variable quantification */
  
      case OP_CLASS:
      cc += 33;
  
      switch (*cc)
        {
        case OP_CRSTAR:
        case OP_CRMINSTAR:
        case OP_CRQUERY:
        case OP_CRMINQUERY:
        return -1;
  
        case OP_CRRANGE:
        case OP_CRMINRANGE:
        if ((cc[1] << 8) + cc[2] != (cc[3] << 8) + cc[4]) return -1;
        branchlength += (cc[1] << 8) + cc[2];
        cc += 5;
        break;
  
        default:
        branchlength++;
        }
      break;
  
      /* Anything else is variable length */
  
      default:
      return -1;
      }
    }
  /* Control never gets here */
  }
  
  /*************************************************
  *           Check for POSIX class syntax         *
  *************************************************/
  
  /* This function is called when the sequence "[:" or "[." or "[=" is
  encountered in a character class. It checks whether this is followed by an
  optional ^ and then a sequence of letters, terminated by a matching ":]" or
  ".]" or "=]".
  
  Argument:
    ptr      pointer to the initial [
    endptr   where to return the end pointer
    cd       pointer to compile data
  
  Returns:   TRUE or FALSE
  */
  
  static BOOL
  check_posix_syntax(const uschar *ptr, const uschar **endptr, compile_data *cd)
  {
  int terminator;          /* Don't combine these lines; the Solaris cc */
  terminator = *(++ptr);   /* compiler warns about "non-constant" initializer. */
  if (*(++ptr) == '^') ptr++;
  while ((cd->ctypes[*ptr] & ctype_letter) != 0) ptr++;
  if (*ptr == terminator && ptr[1] == ']')
    {
    *endptr = ptr;
    return TRUE;
    }
  return FALSE;
  }
  
  /*************************************************
  *          Check POSIX class name                *
  *************************************************/
  
  /* This function is called to check the name given in a POSIX-style class entry
  such as [:alnum:].
  
  Arguments:
    ptr        points to the first letter
    len        the length of the name
  
  Returns:     a value representing the name, or -1 if unknown
  */
  
  static int
  check_posix_name(const uschar *ptr, int len)
  {
  register int yield = 0;
  while (posix_name_lengths[yield] != 0)
    {
    if (len == posix_name_lengths[yield] &&
      strncmp((const char *)ptr, posix_names[yield], len) == 0) return yield;
    yield++;
    }
  return -1;
  }
  
  /*************************************************
  *           Compile one branch                   *
  *************************************************/
  
  /* Scan the pattern, compiling it into the code vector.
  
  Arguments:
    options      the option bits
    brackets     points to number of extracting brackets used
    code         points to the pointer to the current code point
    ptrptr       points to the current pattern pointer
    errorptr     points to pointer to error message
    optchanged   set to the value of the last OP_OPT item compiled
    reqchar      set to the last literal character required, else -1
    countlits    set to count of mandatory literal characters
    cd           contains pointers to tables
  
  Returns:       TRUE on success
                 FALSE, with *errorptr set on error
  */
  
  static BOOL
  compile_branch(int options, int *brackets, uschar **codeptr,
    const uschar **ptrptr, const char **errorptr, int *optchanged,
    int *reqchar, int *countlits, compile_data *cd)
  {
  int repeat_type, op_type;
  int repeat_min, repeat_max;
  int bravalue, length;
  int greedy_default, greedy_non_default;
  int prevreqchar;
  int condcount = 0;
  int subcountlits = 0;
  register int c;
  register uschar *code = *codeptr;
  uschar *tempcode;
  const uschar *ptr = *ptrptr;
  const uschar *tempptr;
  uschar *previous = NULL;
  uschar class[32];
  
  /* Set up the default and non-default settings for greediness */
  
  greedy_default = ((options & PCRE_UNGREEDY) != 0);
  greedy_non_default = greedy_default ^ 1;
  
  /* Initialize no required char, and count of literals */
  
  *reqchar = prevreqchar = -1;
  *countlits = 0;
  
  /* Switch on next character until the end of the branch */
  
  for (;; ptr++)
    {
    BOOL negate_class;
    int class_charcount;
    int class_lastchar;
    int newoptions;
    int skipbytes;
    int subreqchar;
  
    c = *ptr;
    if ((options & PCRE_EXTENDED) != 0)
      {
      if ((cd->ctypes[c] & ctype_space) != 0) continue;
      if (c == '#')
        {
        /* The space before the ; is to avoid a warning on a silly compiler
        on the Macintosh. */
        while ((c = *(++ptr)) != 0 && c != '\n') ;
        continue;
        }
      }
  
    switch(c)
      {
      /* The branch terminates at end of string, |, or ). */
  
      case 0:
      case '|':
      case ')':
      *codeptr = code;
      *ptrptr = ptr;
      return TRUE;
  
      /* Handle single-character metacharacters */
  
      case '^':
      previous = NULL;
      *code++ = OP_CIRC;
      break;
  
      case '$':
      previous = NULL;
      *code++ = OP_DOLL;
      break;
  
      case '.':
      previous = code;
      *code++ = OP_ANY;
      break;
  
      /* Character classes. These always build a 32-byte bitmap of the permitted
      characters, except in the special case where there is only one character.
      For negated classes, we build the map as usual, then invert it at the end.
      */
  
      case '[':
      previous = code;
      *code++ = OP_CLASS;
  
      /* If the first character is '^', set the negation flag and skip it. */
  
      if ((c = *(++ptr)) == '^')
        {
        negate_class = TRUE;
        c = *(++ptr);
        }
      else negate_class = FALSE;
  
      /* Keep a count of chars so that we can optimize the case of just a single
      character. */
  
      class_charcount = 0;
      class_lastchar = -1;
  
      /* Initialize the 32-char bit map to all zeros. We have to build the
      map in a temporary bit of store, in case the class contains only 1
      character, because in that case the compiled code doesn't use the
      bit map. */
  
      memset(class, 0, 32 * sizeof(uschar));
  
      /* Process characters until ] is reached. By writing this as a "do" it
      means that an initial ] is taken as a data character. */
  
      do
        {
        if (c == 0)
          {
          *errorptr = ERR6;
          goto FAILED;
          }
  
        /* Handle POSIX class names. Perl allows a negation extension of the
        form [:^name]. A square bracket that doesn't match the syntax is
        treated as a literal. We also recognize the POSIX constructions
        [.ch.] and [=ch=] ("collating elements") and fault them, as Perl
        5.6 does. */
  
        if (c == '[' &&
            (ptr[1] == ':' || ptr[1] == '.' || ptr[1] == '=') &&
            check_posix_syntax(ptr, &tempptr, cd))
          {
          BOOL local_negate = FALSE;
          int posix_class, i;
          register const uschar *cbits = cd->cbits;
  
          if (ptr[1] != ':')
            {
            *errorptr = ERR31;
            goto FAILED;
            }
  
          ptr += 2;
          if (*ptr == '^')
            {
            local_negate = TRUE;
            ptr++;
            }
  
          posix_class = check_posix_name(ptr, tempptr - ptr);
          if (posix_class < 0)
            {
            *errorptr = ERR30;
            goto FAILED;
            }
  
          /* If matching is caseless, upper and lower are converted to
          alpha. This relies on the fact that the class table starts with
          alpha, lower, upper as the first 3 entries. */
  
          if ((options & PCRE_CASELESS) != 0 && posix_class <= 2)
            posix_class = 0;
  
          /* Or into the map we are building up to 3 of the static class
          tables, or their negations. */
  
          posix_class *= 3;
          for (i = 0; i < 3; i++)
            {
            int taboffset = posix_class_maps[posix_class + i];
            if (taboffset < 0) break;
            if (local_negate)
              for (c = 0; c < 32; c++) class[c] |= ~cbits[c+taboffset];
            else
              for (c = 0; c < 32; c++) class[c] |= cbits[c+taboffset];
            }
  
          ptr = tempptr + 1;
          class_charcount = 10;  /* Set > 1; assumes more than 1 per class */
          continue;
          }
  
        /* Backslash may introduce a single character, or it may introduce one
        of the specials, which just set a flag. Escaped items are checked for
        validity in the pre-compiling pass. The sequence \b is a special case.
        Inside a class (and only there) it is treated as backspace. Elsewhere
        it marks a word boundary. Other escapes have preset maps ready to
        or into the one we are building. We assume they have more than one
        character in them, so set class_count bigger than one. */
  
        if (c == '\\')
          {
          c = check_escape(&ptr, errorptr, *brackets, options, TRUE, cd);
          if (-c == ESC_b) c = '\b';
          else if (c < 0)
            {
            register const uschar *cbits = cd->cbits;
            class_charcount = 10;
            switch (-c)
              {
              case ESC_d:
              for (c = 0; c < 32; c++) class[c] |= cbits[c+cbit_digit];
              continue;
  
              case ESC_D:
              for (c = 0; c < 32; c++) class[c] |= ~cbits[c+cbit_digit];
              continue;
  
              case ESC_w:
              for (c = 0; c < 32; c++) class[c] |= cbits[c+cbit_word];
              continue;
  
              case ESC_W:
              for (c = 0; c < 32; c++) class[c] |= ~cbits[c+cbit_word];
              continue;
  
              case ESC_s:
              for (c = 0; c < 32; c++) class[c] |= cbits[c+cbit_space];
              continue;
  
              case ESC_S:
              for (c = 0; c < 32; c++) class[c] |= ~cbits[c+cbit_space];
              continue;
  
              default:
              *errorptr = ERR7;
              goto FAILED;
              }
            }
  
          /* Fall through if single character, but don't at present allow
          chars > 255 in UTF-8 mode. */
  
  #ifdef L2_UT_PCRE_SUPPORT_UTF8
          if (c > 255)
            {
            *errorptr = ERR33;
            goto FAILED;
            }
  #endif
          }
  
        /* A single character may be followed by '-' to form a range. However,
        Perl does not permit ']' to be the end of the range. A '-' character
        here is treated as a literal. */
  
        if (ptr[1] == '-' && ptr[2] != ']')
          {
          int d;
          ptr += 2;
          d = *ptr;
  
          if (d == 0)
            {
            *errorptr = ERR6;
            goto FAILED;
            }
  
          /* The second part of a range can be a single-character escape, but
          not any of the other escapes. Perl 5.6 treats a hyphen as a literal
          in such circumstances. */
  
          if (d == '\\')
            {
            const uschar *oldptr = ptr;
            d = check_escape(&ptr, errorptr, *brackets, options, TRUE, cd);
  
  #ifdef L2_UT_PCRE_SUPPORT_UTF8
            if (d > 255)
              {
              *errorptr = ERR33;
              goto FAILED;
              }
  #endif
            /* \b is backslash; any other special means the '-' was literal */
  
            if (d < 0)
              {
              if (d == -ESC_b) d = '\b'; else
                {
                ptr = oldptr - 2;
                goto SINGLE_CHARACTER;  /* A few lines below */
                }
              }
            }
  
          if (d < c)
            {
            *errorptr = ERR8;
            goto FAILED;
            }
  
          for (; c <= d; c++)
            {
            class[c/8] |= (1 << (c&7));
            if ((options & PCRE_CASELESS) != 0)
              {
              int uc = cd->fcc[c];           /* flip case */
              class[uc/8] |= (1 << (uc&7));
              }
            class_charcount++;                /* in case a one-char range */
            class_lastchar = c;
            }
          continue;   /* Go get the next char in the class */
          }
  
        /* Handle a lone single character - we can get here for a normal
        non-escape char, or after \ that introduces a single character. */
  
        SINGLE_CHARACTER:
  
        class [c/8] |= (1 << (c&7));
        if ((options & PCRE_CASELESS) != 0)
          {
          c = cd->fcc[c];   /* flip case */
          class[c/8] |= (1 << (c&7));
          }
        class_charcount++;
        class_lastchar = c;
        }
  
      /* Loop until ']' reached; the check for end of string happens inside the
      loop. This "while" is the end of the "do" above. */
  
      while ((c = *(++ptr)) != ']');
  
      /* If class_charcount is 1 and class_lastchar is not negative, we saw
      precisely one character. This doesn't need the whole 32-byte bit map.
      We turn it into a 1-character OP_CHAR if it's positive, or OP_NOT if
      it's negative. */
  
      if (class_charcount == 1 && class_lastchar >= 0)
        {
        if (negate_class)
          {
          code[-1] = OP_NOT;
          }
        else
          {
          code[-1] = OP_CHARS;
          *code++ = 1;
          }
        *code++ = class_lastchar;
        }
  
      /* Otherwise, negate the 32-byte map if necessary, and copy it into
      the code vector. */
  
      else
        {
        if (negate_class)
          for (c = 0; c < 32; c++) code[c] = ~class[c];
        else
          memcpy(code, class, 32);
        code += 32;
        }
      break;
  
      /* Various kinds of repeat */
  
      case '{':
      if (!is_counted_repeat(ptr+1, cd)) goto NORMAL_CHAR;
      ptr = read_repeat_counts(ptr+1, &repeat_min, &repeat_max, errorptr, cd);
      if (*errorptr != NULL) goto FAILED;
      goto REPEAT;
  
      case '*':
      repeat_min = 0;
      repeat_max = -1;
      goto REPEAT;
  
      case '+':
      repeat_min = 1;
      repeat_max = -1;
      goto REPEAT;
  
      case '?':
      repeat_min = 0;
      repeat_max = 1;
  
      REPEAT:
      if (previous == NULL)
        {
        *errorptr = ERR9;
        goto FAILED;
        }
  
      /* If the next character is '?' this is a minimizing repeat, by default,
      but if PCRE_UNGREEDY is set, it works the other way round. Advance to the
      next character. */
  
      if (ptr[1] == '?')
        { repeat_type = greedy_non_default; ptr++; }
      else repeat_type = greedy_default;
  
      /* If previous was a string of characters, chop off the last one and use it
      as the subject of the repeat. If there was only one character, we can
      abolish the previous item altogether. A repeat with a zero minimum wipes
      out any reqchar setting, backing up to the previous value. We must also
      adjust the countlits value. */
  
      if (*previous == OP_CHARS)
        {
        int len = previous[1];
  
        if (repeat_min == 0) *reqchar = prevreqchar;
        *countlits += repeat_min - 1;
  
        if (len == 1)
          {
          c = previous[2];
          code = previous;
          }
        else
          {
          c = previous[len+1];
          previous[1]--;
          code--;
          }
        op_type = 0;                 /* Use single-char op codes */
        goto OUTPUT_SINGLE_REPEAT;   /* Code shared with single character types */
        }
  
      /* If previous was a single negated character ([^a] or similar), we use
      one of the special opcodes, replacing it. The code is shared with single-
      character repeats by adding a suitable offset into repeat_type. */
  
      else if ((int)*previous == OP_NOT)
        {
        op_type = OP_NOTSTAR - OP_STAR;  /* Use "not" opcodes */
        c = previous[1];
        code = previous;
        goto OUTPUT_SINGLE_REPEAT;
        }
  
      /* If previous was a character type match (\d or similar), abolish it and
      create a suitable repeat item. The code is shared with single-character
      repeats by adding a suitable offset into repeat_type. */
  
      else if ((int)*previous < OP_EODN || *previous == OP_ANY)
        {
        op_type = OP_TYPESTAR - OP_STAR;  /* Use type opcodes */
        c = *previous;
        code = previous;
  
        OUTPUT_SINGLE_REPEAT:
  
        /* If the maximum is zero then the minimum must also be zero; Perl allows
        this case, so we do too - by simply omitting the item altogether. */
  
        if (repeat_max == 0) goto END_REPEAT;
  
        /* Combine the op_type with the repeat_type */
  
        repeat_type += op_type;
  
        /* A minimum of zero is handled either as the special case * or ?, or as
        an UPTO, with the maximum given. */
  
        if (repeat_min == 0)
          {
          if (repeat_max == -1) *code++ = OP_STAR + repeat_type;
            else if (repeat_max == 1) *code++ = OP_QUERY + repeat_type;
          else
            {
            *code++ = OP_UPTO + repeat_type;
            *code++ = repeat_max >> 8;
            *code++ = (repeat_max & 255);
            }
          }
  
        /* The case {1,} is handled as the special case + */
  
        else if (repeat_min == 1 && repeat_max == -1)
          *code++ = OP_PLUS + repeat_type;
  
        /* The case {n,n} is just an EXACT, while the general case {n,m} is
        handled as an EXACT followed by an UPTO. An EXACT of 1 is optimized. */
  
        else
          {
          if (repeat_min != 1)
            {
            *code++ = OP_EXACT + op_type;  /* NB EXACT doesn't have repeat_type */
            *code++ = repeat_min >> 8;
            *code++ = (repeat_min & 255);
            }
  
          /* If the mininum is 1 and the previous item was a character string,
          we either have to put back the item that got cancelled if the string
          length was 1, or add the character back onto the end of a longer
          string. For a character type nothing need be done; it will just get
          put back naturally. Note that the final character is always going to
          get added below. */
  
          else if (*previous == OP_CHARS)
            {
            if (code == previous) code += 2; else previous[1]++;
            }
  
          /*  For a single negated character we also have to put back the
          item that got cancelled. */
  
          else if (*previous == OP_NOT) code++;
  
          /* If the maximum is unlimited, insert an OP_STAR. */
  
          if (repeat_max < 0)
            {
            *code++ = c;
            *code++ = OP_STAR + repeat_type;
            }
  
          /* Else insert an UPTO if the max is greater than the min. */
  
          else if (repeat_max != repeat_min)
            {
            *code++ = c;
            repeat_max -= repeat_min;
            *code++ = OP_UPTO + repeat_type;
            *code++ = repeat_max >> 8;
            *code++ = (repeat_max & 255);
            }
          }
  
        /* The character or character type itself comes last in all cases. */
  
        *code++ = c;
        }
  
      /* If previous was a character class or a back reference, we put the repeat
      stuff after it, but just skip the item if the repeat was {0,0}. */
  
      else if (*previous == OP_CLASS || *previous == OP_REF)
        {
        if (repeat_max == 0)
          {
          code = previous;
          goto END_REPEAT;
          }
        if (repeat_min == 0 && repeat_max == -1)
          *code++ = OP_CRSTAR + repeat_type;
        else if (repeat_min == 1 && repeat_max == -1)
          *code++ = OP_CRPLUS + repeat_type;
        else if (repeat_min == 0 && repeat_max == 1)
          *code++ = OP_CRQUERY + repeat_type;
        else
          {
          *code++ = OP_CRRANGE + repeat_type;
          *code++ = repeat_min >> 8;
          *code++ = repeat_min & 255;
          if (repeat_max == -1) repeat_max = 0;  /* 2-byte encoding for max */
          *code++ = repeat_max >> 8;
          *code++ = repeat_max & 255;
          }
        }
  
      /* If previous was a bracket group, we may have to replicate it in certain
      cases. */
  
      else if ((int)*previous >= OP_BRA || (int)*previous == OP_ONCE ||
               (int)*previous == OP_COND)
        {
        register int i;
        int ketoffset = 0;
        int len = code - previous;
        uschar *bralink = NULL;
  
        /* If the maximum repeat count is unlimited, find the end of the bracket
        by scanning through from the start, and compute the offset back to it
        from the current code pointer. There may be an OP_OPT setting following
        the final KET, so we can't find the end just by going back from the code
        pointer. */
  
        if (repeat_max == -1)
          {
          register uschar *ket = previous;
          do ket += (ket[1] << 8) + ket[2]; while (*ket != OP_KET);
          ketoffset = code - ket;
          }
  
        /* The case of a zero minimum is special because of the need to stick
        OP_BRAZERO in front of it, and because the group appears once in the
        data, whereas in other cases it appears the minimum number of times. For
        this reason, it is simplest to treat this case separately, as otherwise
        the code gets far too messy. There are several special subcases when the
        minimum is zero. */
  
        if (repeat_min == 0)
          {
          /* If we set up a required char from the bracket, we must back off
          to the previous value and reset the countlits value too. */
  
          if (subcountlits > 0)
            {
            *reqchar = prevreqchar;
            *countlits -= subcountlits;
            }
  
          /* If the maximum is also zero, we just omit the group from the output
          altogether. */
  
          if (repeat_max == 0)
            {
            code = previous;
            goto END_REPEAT;
            }
  
          /* If the maximum is 1 or unlimited, we just have to stick in the
          BRAZERO and do no more at this point. */
  
          if (repeat_max <= 1)
            {
            memmove(previous+1, previous, len);
            code++;
            *previous++ = OP_BRAZERO + repeat_type;
            }
  
          /* If the maximum is greater than 1 and limited, we have to replicate
          in a nested fashion, sticking OP_BRAZERO before each set of brackets.
          The first one has to be handled carefully because it's the original
          copy, which has to be moved up. The remainder can be handled by code
          that is common with the non-zero minimum case below. We just have to
          adjust the value or repeat_max, since one less copy is required. */
  
          else
            {
            int offset;
            memmove(previous+4, previous, len);
            code += 4;
            *previous++ = OP_BRAZERO + repeat_type;
            *previous++ = OP_BRA;
  
            /* We chain together the bracket offset fields that have to be
            filled in later when the ends of the brackets are reached. */
  
            offset = (bralink == NULL)? 0 : previous - bralink;
            bralink = previous;
            *previous++ = offset >> 8;
            *previous++ = offset & 255;
            }
  
          repeat_max--;
          }
  
        /* If the minimum is greater than zero, replicate the group as many
        times as necessary, and adjust the maximum to the number of subsequent
        copies that we need. */
  
        else
          {
          for (i = 1; i < repeat_min; i++)
            {
            memcpy(code, previous, len);
            code += len;
            }
          if (repeat_max > 0) repeat_max -= repeat_min;
          }
  
        /* This code is common to both the zero and non-zero minimum cases. If
        the maximum is limited, it replicates the group in a nested fashion,
        remembering the bracket starts on a stack. In the case of a zero minimum,
        the first one was set up above. In all cases the repeat_max now specifies
        the number of additional copies needed. */
  
        if (repeat_max >= 0)
          {
          for (i = repeat_max - 1; i >= 0; i--)
            {
            *code++ = OP_BRAZERO + repeat_type;
  
            /* All but the final copy start a new nesting, maintaining the
            chain of brackets outstanding. */
  
            if (i != 0)
              {
              int offset;
              *code++ = OP_BRA;
              offset = (bralink == NULL)? 0 : code - bralink;
              bralink = code;
              *code++ = offset >> 8;
              *code++ = offset & 255;
              }
  
            memcpy(code, previous, len);
            code += len;
            }
  
          /* Now chain through the pending brackets, and fill in their length
          fields (which are holding the chain links pro tem). */
  
          while (bralink != NULL)
            {
            int oldlinkoffset;
            int offset = code - bralink + 1;
            uschar *bra = code - offset;
            oldlinkoffset = (bra[1] << 8) + bra[2];
            bralink = (oldlinkoffset == 0)? NULL : bralink - oldlinkoffset;
            *code++ = OP_KET;
            *code++ = bra[1] = offset >> 8;
            *code++ = bra[2] = (offset & 255);
            }
          }
  
        /* If the maximum is unlimited, set a repeater in the final copy. We
        can't just offset backwards from the current code point, because we
        don't know if there's been an options resetting after the ket. The
        correct offset was computed above. */
  
        else code[-ketoffset] = OP_KETRMAX + repeat_type;
        }
  
      /* Else there's some kind of shambles */
  
      else
        {
        *errorptr = ERR11;
        goto FAILED;
        }
  
      /* In all case we no longer have a previous item. */
  
      END_REPEAT:
      previous = NULL;
      break;
  
      /* Start of nested bracket sub-expression, or comment or lookahead or
      lookbehind or option setting or condition. First deal with special things
      that can come after a bracket; all are introduced by ?, and the appearance
      of any of them means that this is not a referencing group. They were
      checked for validity in the first pass over the string, so we don't have to
      check for syntax errors here.  */
  
      case '(':
      newoptions = options;
      skipbytes = 0;
  
      if (*(++ptr) == '?')
        {
        int set, unset;
        int *optset;
  
        switch (*(++ptr))
          {
          case '#':                 /* Comment; skip to ket */
          ptr++;
          while (*ptr != ')') ptr++;
          continue;
  
          case ':':                 /* Non-extracting bracket */
          bravalue = OP_BRA;
          ptr++;
          break;
  
          case '(':
          bravalue = OP_COND;       /* Conditional group */
          if ((cd->ctypes[*(++ptr)] & ctype_digit) != 0)
            {
            int condref = *ptr - '0';
            while (*(++ptr) != ')') condref = condref*10 + *ptr - '0';
            if (condref == 0)
              {
              *errorptr = ERR35;
              goto FAILED;
              }
            ptr++;
            code[3] = OP_CREF;
            code[4] = condref >> 8;
            code[5] = condref & 255;
            skipbytes = 3;
            }
          else ptr--;
          break;
  
          case '=':                 /* Positive lookahead */
          bravalue = OP_ASSERT;
          ptr++;
          break;
  
          case '!':                 /* Negative lookahead */
          bravalue = OP_ASSERT_NOT;
          ptr++;
          break;
  
          case '<':                 /* Lookbehinds */
          switch (*(++ptr))
            {
            case '=':               /* Positive lookbehind */
            bravalue = OP_ASSERTBACK;
            ptr++;
            break;
  
            case '!':               /* Negative lookbehind */
            bravalue = OP_ASSERTBACK_NOT;
            ptr++;
            break;
  
            default:                /* Syntax error */
            *errorptr = ERR24;
            goto FAILED;
            }
          break;
  
          case '>':                 /* One-time brackets */
          bravalue = OP_ONCE;
          ptr++;
          break;
  
          case 'R':                 /* Pattern recursion */
          *code++ = OP_RECURSE;
          ptr++;
          continue;
  
          default:                  /* Option setting */
          set = unset = 0;
          optset = &set;
  
          while (*ptr != ')' && *ptr != ':')
            {
            switch (*ptr++)
              {
              case '-': optset = &unset; break;
  
              case 'i': *optset |= PCRE_CASELESS; break;
              case 'm': *optset |= PCRE_MULTILINE; break;
              case 's': *optset |= PCRE_DOTALL; break;
              case 'x': *optset |= PCRE_EXTENDED; break;
              case 'U': *optset |= PCRE_UNGREEDY; break;
              case 'X': *optset |= PCRE_EXTRA; break;
  
              default:
              *errorptr = ERR12;
              goto FAILED;
              }
            }
  
          /* Set up the changed option bits, but don't change anything yet. */
  
          newoptions = (options | set) & (~unset);
  
          /* If the options ended with ')' this is not the start of a nested
          group with option changes, so the options change at this level. At top
          level there is nothing else to be done (the options will in fact have
          been set from the start of compiling as a result of the first pass) but
          at an inner level we must compile code to change the ims options if
          necessary, and pass the new setting back so that it can be put at the
          start of any following branches, and when this group ends, a resetting
          item can be compiled. */
  
          if (*ptr == ')')
            {
            if ((options & PCRE_INGROUP) != 0 &&
                (options & PCRE_IMS) != (newoptions & PCRE_IMS))
              {
              *code++ = OP_OPT;
              *code++ = *optchanged = newoptions & PCRE_IMS;
              }
            options = newoptions;  /* Change options at this level */
            previous = NULL;       /* This item can't be repeated */
            continue;              /* It is complete */
            }
  
          /* If the options ended with ':' we are heading into a nested group
          with possible change of options. Such groups are non-capturing and are
          not assertions of any kind. All we need to do is skip over the ':';
          the newoptions value is handled below. */
  
          bravalue = OP_BRA;
          ptr++;
          }
        }
  
      /* Else we have a referencing group; adjust the opcode. If the bracket
      number is greater than EXTRACT_BASIC_MAX, we set the opcode one higher, and
      arrange for the true number to follow later, in an OP_BRANUMBER item. */
  
      else
        {
        if (++(*brackets) > EXTRACT_BASIC_MAX)
          {
          bravalue = OP_BRA + EXTRACT_BASIC_MAX + 1;
          code[3] = OP_BRANUMBER;
          code[4] = *brackets >> 8;
          code[5] = *brackets & 255;
          skipbytes = 3;
          }
        else bravalue = OP_BRA + *brackets;
        }
  
      /* Process nested bracketed re. Assertions may not be repeated, but other
      kinds can be. We copy code into a non-register variable in order to be able
      to pass its address because some compilers complain otherwise. Pass in a
      new setting for the ims options if they have changed. */
  
      previous = (bravalue >= OP_ONCE)? code : NULL;
      *code = bravalue;
      tempcode = code;
  
      if (!compile_regex(
           options | PCRE_INGROUP,       /* Set for all nested groups */
           ((options & PCRE_IMS) != (newoptions & PCRE_IMS))?
             newoptions & PCRE_IMS : -1, /* Pass ims options if changed */
           brackets,                     /* Extracting bracket count */
           &tempcode,                    /* Where to put code (updated) */
           &ptr,                         /* Input pointer (updated) */
           errorptr,                     /* Where to put an error message */
           (bravalue == OP_ASSERTBACK ||
            bravalue == OP_ASSERTBACK_NOT), /* TRUE if back assert */
           skipbytes,                    /* Skip over OP_COND/OP_BRANUMBER */
           &subreqchar,                  /* For possible last char */
           &subcountlits,                /* For literal count */
           cd))                          /* Tables block */
        goto FAILED;
  
      /* At the end of compiling, code is still pointing to the start of the
      group, while tempcode has been updated to point past the end of the group
      and any option resetting that may follow it. The pattern pointer (ptr)
      is on the bracket. */
  
      /* If this is a conditional bracket, check that there are no more than
      two branches in the group. */
  
      else if (bravalue == OP_COND)
        {
        uschar *tc = code;
        condcount = 0;
  
        do {
           condcount++;
           tc += (tc[1] << 8) | tc[2];
           }
        while (*tc != OP_KET);
  
        if (condcount > 2)
          {
          *errorptr = ERR27;
          goto FAILED;
          }
        }
  
      /* Handle updating of the required character. If the subpattern didn't
      set one, leave it as it was. Otherwise, update it for normal brackets of
      all kinds, forward assertions, and conditions with two branches. Don't
      update the literal count for forward assertions, however. If the bracket
      is followed by a quantifier with zero repeat, we have to back off. Hence
      the definition of prevreqchar and subcountlits outside the main loop so
      that they can be accessed for the back off. */
  
      if (subreqchar > 0 &&
           (bravalue >= OP_BRA || bravalue == OP_ONCE || bravalue == OP_ASSERT ||
           (bravalue == OP_COND && condcount == 2)))
        {
        prevreqchar = *reqchar;
        *reqchar = subreqchar;
        if (bravalue != OP_ASSERT) *countlits += subcountlits;
        }
  
      /* Now update the main code pointer to the end of the group. */
  
      code = tempcode;
  
      /* Error if hit end of pattern */
  
      if (*ptr != ')')
        {
        *errorptr = ERR14;
        goto FAILED;
        }
      break;
  
      /* Check \ for being a real metacharacter; if not, fall through and handle
      it as a data character at the start of a string. Escape items are checked
      for validity in the pre-compiling pass. */
  
      case '\\':
      tempptr = ptr;
      c = check_escape(&ptr, errorptr, *brackets, options, FALSE, cd);
  
      /* Handle metacharacters introduced by \. For ones like \d, the ESC_ values
      are arranged to be the negation of the corresponding OP_values. For the
      back references, the values are ESC_REF plus the reference number. Only
      back references and those types that consume a character may be repeated.
      We can test for values between ESC_b and ESC_Z for the latter; this may
      have to change if any new ones are ever created. */
  
      if (c < 0)
        {
        if (-c >= ESC_REF)
          {
          int number = -c - ESC_REF;
          previous = code;
          *code++ = OP_REF;
          *code++ = number >> 8;
          *code++ = number & 255;
          }
        else
          {
          previous = (-c > ESC_b && -c < ESC_Z)? code : NULL;
          *code++ = -c;
          }
        continue;
        }
  
      /* Data character: reset and fall through */
  
      ptr = tempptr;
      c = '\\';
  
      /* Handle a run of data characters until a metacharacter is encountered.
      The first character is guaranteed not to be whitespace or # when the
      extended flag is set. */
  
      NORMAL_CHAR:
      default:
      previous = code;
      *code = OP_CHARS;
      code += 2;
      length = 0;
  
      do
        {
        if ((options & PCRE_EXTENDED) != 0)
          {
          if ((cd->ctypes[c] & ctype_space) != 0) continue;
          if (c == '#')
            {
            /* The space before the ; is to avoid a warning on a silly compiler
            on the Macintosh. */
            while ((c = *(++ptr)) != 0 && c != '\n') ;
            if (c == 0) break;
            continue;
            }
          }
  
        /* Backslash may introduce a data char or a metacharacter. Escaped items
        are checked for validity in the pre-compiling pass. Stop the string
        before a metaitem. */
  
        if (c == '\\')
          {
          tempptr = ptr;
          c = check_escape(&ptr, errorptr, *brackets, options, FALSE, cd);
          if (c < 0) { ptr = tempptr; break; }
  
          /* If a character is > 127 in UTF-8 mode, we have to turn it into
          two or more characters in the UTF-8 encoding. */
  
  #ifdef L2_UT_PCRE_SUPPORT_UTF8
          if (c > 127 && (options & PCRE_UTF8) != 0)
            {
            uschar buffer[8];
            int len = ord2utf8(c, buffer);
            for (c = 0; c < len; c++) *code++ = buffer[c];
            length += len;
            continue;
            }
  #endif
          }
  
        /* Ordinary character or single-char escape */
  
        *code++ = c;
        length++;
        }
  
      /* This "while" is the end of the "do" above. */
  
      while (length < MAXLIT && (cd->ctypes[c = *(++ptr)] & ctype_meta) == 0);
  
      /* Update the last character and the count of literals */
  
      prevreqchar = (length > 1)? code[-2] : *reqchar;
      *reqchar = code[-1];
      *countlits += length;
  
      /* Compute the length and set it in the data vector, and advance to
      the next state. */
  
      previous[1] = length;
      if (length < MAXLIT) ptr--;
      break;
      }
    }                   /* end of big loop */
  
  /* Control never reaches here by falling through, only by a goto for all the
  error states. Pass back the position in the pattern so that it can be displayed
  to the user for diagnosing the error. */
  
  FAILED:
  *ptrptr = ptr;
  return FALSE;
  }
  
  /*************************************************
  *     Compile sequence of alternatives           *
  *************************************************/
  
  /* On entry, ptr is pointing past the bracket character, but on return
  it points to the closing bracket, or vertical bar, or end of string.
  The code variable is pointing at the byte into which the BRA operator has been
  stored. If the ims options are changed at the start (for a (?ims: group) or
  during any branch, we need to insert an OP_OPT item at the start of every
  following branch to ensure they get set correctly at run time, and also pass
  the new options into every subsequent branch compile.
  
  Argument:
    options     the option bits
    optchanged  new ims options to set as if (?ims) were at the start, or -1
                 for no change
    brackets    -> int containing the number of extracting brackets used
    codeptr     -> the address of the current code pointer
    ptrptr      -> the address of the current pattern pointer
    errorptr    -> pointer to error message
    lookbehind  TRUE if this is a lookbehind assertion
    skipbytes   skip this many bytes at start (for OP_COND, OP_BRANUMBER)
    reqchar     -> place to put the last required character, or a negative number
    countlits   -> place to put the shortest literal count of any branch
    cd          points to the data block with tables pointers
  
  Returns:      TRUE on success
  */
  
  static BOOL
  compile_regex(int options, int optchanged, int *brackets, uschar **codeptr,
    const uschar **ptrptr, const char **errorptr, BOOL lookbehind, int skipbytes,
    int *reqchar, int *countlits, compile_data *cd)
  {
  const uschar *ptr = *ptrptr;
  uschar *code = *codeptr;
  uschar *last_branch = code;
  uschar *start_bracket = code;
  uschar *reverse_count = NULL;
  int oldoptions = options & PCRE_IMS;
  int branchreqchar, branchcountlits;
  
  *reqchar = -1;
  *countlits = INT_MAX;
  code += 3 + skipbytes;
  
  /* Loop for each alternative branch */
  
  for (;;)
    {
    int length;
  
    /* Handle change of options */
  
    if (optchanged >= 0)
      {
      *code++ = OP_OPT;
      *code++ = optchanged;
      options = (options & ~PCRE_IMS) | optchanged;
      }
  
    /* Set up dummy OP_REVERSE if lookbehind assertion */
  
    if (lookbehind)
      {
      *code++ = OP_REVERSE;
      reverse_count = code;
      *code++ = 0;
      *code++ = 0;
      }
  
    /* Now compile the branch */
  
    if (!compile_branch(options, brackets, &code, &ptr, errorptr, &optchanged,
        &branchreqchar, &branchcountlits, cd))
      {
      *ptrptr = ptr;
      return FALSE;
      }
  
    /* Fill in the length of the last branch */
  
    length = code - last_branch;
    last_branch[1] = length >> 8;
    last_branch[2] = length & 255;
  
    /* Save the last required character if all branches have the same; a current
    value of -1 means unset, while -2 means "previous branch had no last required
    char".  */
  
    if (*reqchar != -2)
      {
      if (branchreqchar >= 0)
        {
        if (*reqchar == -1) *reqchar = branchreqchar;
        else if (*reqchar != branchreqchar) *reqchar = -2;
        }
      else *reqchar = -2;
      }
  
    /* Keep the shortest literal count */
  
    if (branchcountlits < *countlits) *countlits = branchcountlits;
  
    /* If lookbehind, check that this branch matches a fixed-length string,
    and put the length into the OP_REVERSE item. Temporarily mark the end of
    the branch with OP_END. */
  
    if (lookbehind)
      {
      *code = OP_END;
      length = find_fixedlength(last_branch, options);
  
      if (length < 0)
        {
        *errorptr = ERR25;
        *ptrptr = ptr;
        return FALSE;
        }
      reverse_count[0] = (length >> 8);
      reverse_count[1] = length & 255;
      }
  
    /* Reached end of expression, either ')' or end of pattern. Insert a
    terminating ket and the length of the whole bracketed item, and return,
    leaving the pointer at the terminating char. If any of the ims options
    were changed inside the group, compile a resetting op-code following. */
  
    if (*ptr != '|')
      {
      length = code - start_bracket;
      *code++ = OP_KET;
      *code++ = length >> 8;
      *code++ = length & 255;
      if (optchanged >= 0)
        {
        *code++ = OP_OPT;
        *code++ = oldoptions;
        }
      *codeptr = code;
      *ptrptr = ptr;
      return TRUE;
      }
  
    /* Another branch follows; insert an "or" node and advance the pointer. */
  
    *code = OP_ALT;
    last_branch = code;
    code += 3;
    ptr++;
    }
  /* Control never reaches here */
  }
  
  /*************************************************
  *      Find first significant op code            *
  *************************************************/
  
  /* This is called by several functions that scan a compiled expression looking
  for a fixed first character, or an anchoring op code etc. It skips over things
  that do not influence this. For one application, a change of caseless option is
  important.
  
  Arguments:
    code       pointer to the start of the group
    options    pointer to external options
    optbit     the option bit whose changing is significant, or
               zero if none are
    optstop    TRUE to return on option change, otherwise change the options
                 value and continue
  
  Returns:     pointer to the first significant opcode
  */
  
  static const uschar*
  first_significant_code(const uschar *code, int *options, int optbit,
    BOOL optstop)
  {
  for (;;)
    {
    switch ((int)*code)
      {
      case OP_OPT:
      if (optbit > 0 && ((int)code[1] & optbit) != (*options & optbit))
        {
        if (optstop) return code;
        *options = (int)code[1];
        }
      code += 2;
      break;
  
      case OP_CREF:
      case OP_BRANUMBER:
      code += 3;
      break;
  
      case OP_WORD_BOUNDARY:
      case OP_NOT_WORD_BOUNDARY:
      code++;
      break;
  
      case OP_ASSERT_NOT:
      case OP_ASSERTBACK:
      case OP_ASSERTBACK_NOT:
      do code += (code[1] << 8) + code[2]; while (*code == OP_ALT);
      code += 3;
      break;
  
      default:
      return code;
      }
    }
  /* Control never reaches here */
  }
  
  /*************************************************
  *          Check for anchored expression         *
  *************************************************/
  
  /* Try to find out if this is an anchored regular expression. Consider each
  alternative branch. If they all start with OP_SOD or OP_CIRC, or with a bracket
  all of whose alternatives start with OP_SOD or OP_CIRC (recurse ad lib), then
  it's anchored. However, if this is a multiline pattern, then only OP_SOD
  counts, since OP_CIRC can match in the middle.
  
  A branch is also implicitly anchored if it starts with .* and DOTALL is set,
  because that will try the rest of the pattern at all possible matching points,
  so there is no point trying them again.
  
  Arguments:
    code       points to start of expression (the bracket)
    options    points to the options setting
  
  Returns:     TRUE or FALSE
  */
  
  static BOOL
  is_anchored(register const uschar *code, int *options)
  {
  do {
     const uschar *scode = first_significant_code(code + 3, options,
       PCRE_MULTILINE, FALSE);
     register int op = *scode;
     if (op >= OP_BRA || op == OP_ASSERT || op == OP_ONCE || op == OP_COND)
       { if (!is_anchored(scode, options)) return FALSE; }
     else if ((op == OP_TYPESTAR || op == OP_TYPEMINSTAR) &&
              (*options & PCRE_DOTALL) != 0)
       { if (scode[1] != OP_ANY) return FALSE; }
     else if (op != OP_SOD &&
             ((*options & PCRE_MULTILINE) != 0 || op != OP_CIRC))
       return FALSE;
     code += (code[1] << 8) + code[2];
     }
  while (*code == OP_ALT);
  return TRUE;
  }
  
  /*************************************************
  *         Check for starting with ^ or .*        *
  *************************************************/
  
  /* This is called to find out if every branch starts with ^ or .* so that
  "first char" processing can be done to speed things up in multiline
  matching and for non-DOTALL patterns that start with .* (which must start at
  the beginning or after \n).
  
  Argument:  points to start of expression (the bracket)
  Returns:   TRUE or FALSE
  */
  
  static BOOL
  is_startline(const uschar *code)
  {
  do {
     const uschar *scode = first_significant_code(code + 3, NULL, 0, FALSE);
     register int op = *scode;
     if (op >= OP_BRA || op == OP_ASSERT || op == OP_ONCE || op == OP_COND)
       { if (!is_startline(scode)) return FALSE; }
     else if (op == OP_TYPESTAR || op == OP_TYPEMINSTAR)
       { if (scode[1] != OP_ANY) return FALSE; }
     else if (op != OP_CIRC) return FALSE;
     code += (code[1] << 8) + code[2];
     }
  while (*code == OP_ALT);
  return TRUE;
  }
  
  /*************************************************
  *          Check for fixed first char            *
  *************************************************/
  
  /* Try to find out if there is a fixed first character. This is called for
  unanchored expressions, as it speeds up their processing quite considerably.
  Consider each alternative branch. If they all start with the same char, or with
  a bracket all of whose alternatives start with the same char (recurse ad lib),
  then we return that char, otherwise -1.
  
  Arguments:
    code       points to start of expression (the bracket)
    options    pointer to the options (used to check casing changes)
  
  Returns:     -1 or the fixed first char
  */
  
  static int
  find_firstchar(const uschar *code, int *options)
  {
  register int c = -1;
  do {
     int d;
     const uschar *scode = first_significant_code(code + 3, options,
       PCRE_CASELESS, TRUE);
     register int op = *scode;
  
     if (op >= OP_BRA) op = OP_BRA;
  
     switch(op)
       {
       default:
       return -1;
  
       case OP_BRA:
       case OP_ASSERT:
       case OP_ONCE:
       case OP_COND:
       if ((d = find_firstchar(scode, options)) < 0) return -1;
       if (c < 0) c = d; else if (c != d) return -1;
       break;
  
       case OP_EXACT:       /* Fall through */
       scode++;
  
       case OP_CHARS:       /* Fall through */
       scode++;
  
       case OP_PLUS:
       case OP_MINPLUS:
       if (c < 0) c = scode[1]; else if (c != scode[1]) return -1;
       break;
       }
  
     code += (code[1] << 8) + code[2];
     }
  while (*code == OP_ALT);
  return c;
  }
  
  /*************************************************
  *        Compile a Regular Expression            *
  *************************************************/
  
  /* This function takes a string and returns a pointer to a block of store
  holding a compiled version of the expression.
  
  Arguments:
    pattern      the regular expression
    options      various option bits
    errorptr     pointer to pointer to error text
    erroroffset  ptr offset in pattern where error was detected
    tables       pointer to character tables or NULL
  
  Returns:       pointer to compiled data block, or NULL on error,
                 with errorptr and erroroffset set
  */
  
  pcre *
  pcre_compile(const char *pattern, int options, const char **errorptr,
    int *erroroffset, const unsigned char *tables)
  {
  real_pcre *re;
  int length = 3;      /* For initial BRA plus length */
  int runlength;
  int c, reqchar, countlits;
  int bracount = 0;
  int top_backref = 0;
  int branch_extra = 0;
  int branch_newextra;
  unsigned int brastackptr = 0;
  size_t size;
  uschar *code;
  const uschar *ptr;
  compile_data compile_block;
  int brastack[BRASTACK_SIZE];
  uschar bralenstack[BRASTACK_SIZE];
  
  /* Can't support UTF8 unless PCRE has been compiled to include the code. */
  
  #ifndef L2_UT_PCRE_SUPPORT_UTF8
  if ((options & PCRE_UTF8) != 0)
    {
    *errorptr = ERR32;
    return NULL;
    }
  #endif
  
  /* We can't pass back an error message if errorptr is NULL; I guess the best we
  can do is just return NULL. */
  
  if (errorptr == NULL) return NULL;
  *errorptr = NULL;
  
  /* However, we can give a message for this error */
  
  if (erroroffset == NULL)
    {
    *errorptr = ERR16;
    return NULL;
    }
  *erroroffset = 0;
  
  if ((options & ~PUBLIC_OPTIONS) != 0)
    {
    *errorptr = ERR17;
    return NULL;
    }
  
  /* Set up pointers to the individual character tables */
  
  if (tables == NULL) tables = pcre_default_tables;
  compile_block.lcc = tables + lcc_offset;
  compile_block.fcc = tables + fcc_offset;
  compile_block.cbits = tables + cbits_offset;
  compile_block.ctypes = tables + ctypes_offset;
  
  /* Reflect pattern for debugging output */
  
  /* The first thing to do is to make a pass over the pattern to compute the
  amount of store required to hold the compiled code. This does not have to be
  perfect as long as errors are overestimates. At the same time we can detect any
  internal flag settings. Make an attempt to correct for any counted white space
  if an "extended" flag setting appears late in the pattern. We can't be so
  clever for #-comments. */
  
  ptr = (const uschar *)(pattern - 1);
  while ((c = *(++ptr)) != 0)
    {
    int min, max;
    int class_charcount;
    int bracket_length;
  
    if ((options & PCRE_EXTENDED) != 0)
      {
      if ((compile_block.ctypes[c] & ctype_space) != 0) continue;
      if (c == '#')
        {
        /* The space before the ; is to avoid a warning on a silly compiler
        on the Macintosh. */
        while ((c = *(++ptr)) != 0 && c != '\n') ;
        continue;
        }
      }
  
    switch(c)
      {
      /* A backslashed item may be an escaped "normal" character or a
      character type. For a "normal" character, put the pointers and
      character back so that tests for whitespace etc. in the input
      are done correctly. */
  
      case '\\':
        {
        const uschar *save_ptr = ptr;
        c = check_escape(&ptr, errorptr, bracount, options, FALSE, &compile_block);
        if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
        if (c >= 0)
          {
          ptr = save_ptr;
          c = '\\';
          goto NORMAL_CHAR;
          }
        }
      length++;
  
      /* A back reference needs an additional 2 bytes, plus either one or 5
      bytes for a repeat. We also need to keep the value of the highest
      back reference. */
  
      if (c <= -ESC_REF)
        {
        int refnum = -c - ESC_REF;
        if (refnum > top_backref) top_backref = refnum;
        length += 2;   /* For single back reference */
        if (ptr[1] == '{' && is_counted_repeat(ptr+2, &compile_block))
          {
          ptr = read_repeat_counts(ptr+2, &min, &max, errorptr, &compile_block);
          if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
          if ((min == 0 && (max == 1 || max == -1)) ||
            (min == 1 && max == -1))
              length++;
          else length += 5;
          if (ptr[1] == '?') ptr++;
          }
        }
      continue;
  
      case '^':
      case '.':
      case '$':
      case '*':     /* These repeats won't be after brackets; */
      case '+':     /* those are handled separately */
      case '?':
      length++;
      continue;
  
      /* This covers the cases of repeats after a single char, metachar, class,
      or back reference. */
  
      case '{':
      if (!is_counted_repeat(ptr+1, &compile_block)) goto NORMAL_CHAR;
      ptr = read_repeat_counts(ptr+1, &min, &max, errorptr, &compile_block);
      if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
      if ((min == 0 && (max == 1 || max == -1)) ||
        (min == 1 && max == -1))
          length++;
      else
        {
        length--;   /* Uncount the original char or metachar */
        if (min == 1) length++; else if (min > 0) length += 4;
        if (max > 0) length += 4; else length += 2;
        }
      if (ptr[1] == '?') ptr++;
      continue;
  
      /* An alternation contains an offset to the next branch or ket. If any ims
      options changed in the previous branch(es), and/or if we are in a
      lookbehind assertion, extra space will be needed at the start of the
      branch. This is handled by branch_extra. */
  
      case '|':
      length += 3 + branch_extra;
      continue;
  
      /* A character class uses 33 characters. Don't worry about character types
      that aren't allowed in classes - they'll get picked up during the compile.
      A character class that contains only one character uses 2 or 3 bytes,
      depending on whether it is negated or not. Notice this where we can. */
  
      case '[':
      class_charcount = 0;
      if (*(++ptr) == '^') ptr++;
      do
        {
        if (*ptr == '\\')
          {
          int ch = check_escape(&ptr, errorptr, bracount, options, TRUE,
            &compile_block);
          if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
          if (-ch == ESC_b) class_charcount++; else class_charcount = 10;
          }
        else class_charcount++;
        ptr++;
        }
      while (*ptr != 0 && *ptr != ']');
  
      /* Repeats for negated single chars are handled by the general code */
  
      if (class_charcount == 1) length += 3; else
        {
        length += 33;
  
        /* A repeat needs either 1 or 5 bytes. */
  
        if (*ptr != 0 && ptr[1] == '{' && is_counted_repeat(ptr+2, &compile_block))
          {
          ptr = read_repeat_counts(ptr+2, &min, &max, errorptr, &compile_block);
          if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
          if ((min == 0 && (max == 1 || max == -1)) ||
            (min == 1 && max == -1))
              length++;
          else length += 5;
          if (ptr[1] == '?') ptr++;
          }
        }
      continue;
  
      /* Brackets may be genuine groups or special things */
  
      case '(':
      branch_newextra = 0;
      bracket_length = 3;
  
      /* Handle special forms of bracket, which all start (? */
  
      if (ptr[1] == '?')
        {
        int set, unset;
        int *optset;
  
        switch (c = ptr[2])
          {
          /* Skip over comments entirely */
          case '#':
          ptr += 3;
          while (*ptr != 0 && *ptr != ')') ptr++;
          if (*ptr == 0)
            {
            *errorptr = ERR18;
            goto PCRE_ERROR_RETURN;
            }
          continue;
  
          /* Non-referencing groups and lookaheads just move the pointer on, and
          then behave like a non-special bracket, except that they don't increment
          the count of extracting brackets. Ditto for the "once only" bracket,
          which is in Perl from version 5.005. */
  
          case ':':
          case '=':
          case '!':
          case '>':
          ptr += 2;
          break;
  
          /* A recursive call to the regex is an extension, to provide the
          facility which can be obtained by $(?p{perl-code}) in Perl 5.6. */
  
          case 'R':
          if (ptr[3] != ')')
            {
            *errorptr = ERR29;
            goto PCRE_ERROR_RETURN;
            }
          ptr += 3;
          length += 1;
          break;
  
          /* Lookbehinds are in Perl from version 5.005 */
  
          case '<':
          if (ptr[3] == '=' || ptr[3] == '!')
            {
            ptr += 3;
            branch_newextra = 3;
            length += 3;         /* For the first branch */
            break;
            }
          *errorptr = ERR24;
          goto PCRE_ERROR_RETURN;
  
          /* Conditionals are in Perl from version 5.005. The bracket must either
          be followed by a number (for bracket reference) or by an assertion
          group. */
  
          case '(':
          if ((compile_block.ctypes[ptr[3]] & ctype_digit) != 0)
            {
            ptr += 4;
            length += 3;
            while ((compile_block.ctypes[*ptr] & ctype_digit) != 0) ptr++;
            if (*ptr != ')')
              {
              *errorptr = ERR26;
              goto PCRE_ERROR_RETURN;
              }
            }
          else   /* An assertion must follow */
            {
            ptr++;   /* Can treat like ':' as far as spacing is concerned */
            if (ptr[2] != '?' ||
               (ptr[3] != '=' && ptr[3] != '!' && ptr[3] != '<') )
              {
              ptr += 2;    /* To get right offset in message */
              *errorptr = ERR28;
              goto PCRE_ERROR_RETURN;
              }
            }
          break;
  
          /* Else loop checking valid options until ) is met. Anything else is an
          error. If we are without any brackets, i.e. at top level, the settings
          act as if specified in the options, so massage the options immediately.
          This is for backward compatibility with Perl 5.004. */
  
          default:
          set = unset = 0;
          optset = &set;
          ptr += 2;
  
          for (;; ptr++)
            {
            c = *ptr;
            switch (c)
              {
              case 'i':
              *optset |= PCRE_CASELESS;
              continue;
  
              case 'm':
              *optset |= PCRE_MULTILINE;
              continue;
  
              case 's':
              *optset |= PCRE_DOTALL;
              continue;
  
              case 'x':
              *optset |= PCRE_EXTENDED;
              continue;
  
              case 'X':
              *optset |= PCRE_EXTRA;
              continue;
  
              case 'U':
              *optset |= PCRE_UNGREEDY;
              continue;
  
              case '-':
              optset = &unset;
              continue;
  
              /* A termination by ')' indicates an options-setting-only item;
              this is global at top level; otherwise nothing is done here and
              it is handled during the compiling process on a per-bracket-group
              basis. */
  
              case ')':
              if (brastackptr == 0)
                {
                options = (options | set) & (~unset);
                set = unset = 0;     /* To save length */
                }
              /* Fall through */
  
              /* A termination by ':' indicates the start of a nested group with
              the given options set. This is again handled at compile time, but
              we must allow for compiled space if any of the ims options are
              set. We also have to allow for resetting space at the end of
              the group, which is why 4 is added to the length and not just 2.
              If there are several changes of options within the same group, this
              will lead to an over-estimate on the length, but this shouldn't
              matter very much. We also have to allow for resetting options at
              the start of any alternations, which we do by setting
              branch_newextra to 2. Finally, we record whether the case-dependent
              flag ever changes within the regex. This is used by the "required
              character" code. */
  
              case ':':
              if (((set|unset) & PCRE_IMS) != 0)
                {
                length += 4;
                branch_newextra = 2;
                if (((set|unset) & PCRE_CASELESS) != 0) options |= PCRE_ICHANGED;
                }
              goto END_OPTIONS;
  
              /* Unrecognized option character */
  
              default:
              *errorptr = ERR12;
              goto PCRE_ERROR_RETURN;
              }
            }
  
          /* If we hit a closing bracket, that's it - this is a freestanding
          option-setting. We need to ensure that branch_extra is updated if
          necessary. The only values branch_newextra can have here are 0 or 2.
          If the value is 2, then branch_extra must either be 2 or 5, depending
          on whether this is a lookbehind group or not. */
  
          END_OPTIONS:
          if (c == ')')
            {
            if (branch_newextra == 2 && (branch_extra == 0 || branch_extra == 3))
              branch_extra += branch_newextra;
            continue;
            }
  
          /* If options were terminated by ':' control comes here. Fall through
          to handle the group below. */
          }
        }
  
      /* Extracting brackets must be counted so we can process escapes in a
      Perlish way. If the number exceeds EXTRACT_BASIC_MAX we are going to
      need an additional 3 bytes of store per extracting bracket. */
  
      else
        {
        bracount++;
        if (bracount > EXTRACT_BASIC_MAX) bracket_length += 3;
        }
  
      /* Save length for computing whole length at end if there's a repeat that
      requires duplication of the group. Also save the current value of
      branch_extra, and start the new group with the new value. If non-zero, this
      will either be 2 for a (?imsx: group, or 3 for a lookbehind assertion. */
  
      if (brastackptr >= sizeof(brastack)/sizeof(int))
        {
        *errorptr = ERR19;
        goto PCRE_ERROR_RETURN;
        }
  
      bralenstack[brastackptr] = branch_extra;
      branch_extra = branch_newextra;
  
      brastack[brastackptr++] = length;
      length += bracket_length;
      continue;
  
      /* Handle ket. Look for subsequent max/min; for certain sets of values we
      have to replicate this bracket up to that many times. If brastackptr is
      0 this is an unmatched bracket which will generate an error, but take care
      not to try to access brastack[-1] when computing the length and restoring
      the branch_extra value. */
  
      case ')':
      length += 3;
        {
        int minval = 1;
        int maxval = 1;
        int duplength;
  
        if (brastackptr > 0)
          {
          duplength = length - brastack[--brastackptr];
          branch_extra = bralenstack[brastackptr];
          }
        else duplength = 0;
  
        /* Leave ptr at the final char; for read_repeat_counts this happens
        automatically; for the others we need an increment. */
  
        if ((c = ptr[1]) == '{' && is_counted_repeat(ptr+2, &compile_block))
          {
          ptr = read_repeat_counts(ptr+2, &minval, &maxval, errorptr,
            &compile_block);
          if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
          }
        else if (c == '*') { minval = 0; maxval = -1; ptr++; }
        else if (c == '+') { maxval = -1; ptr++; }
        else if (c == '?') { minval = 0; ptr++; }
  
        /* If the minimum is zero, we have to allow for an OP_BRAZERO before the
        group, and if the maximum is greater than zero, we have to replicate
        maxval-1 times; each replication acquires an OP_BRAZERO plus a nesting
        bracket set - hence the 7. */
  
        if (minval == 0)
          {
          length++;
          if (maxval > 0) length += (maxval - 1) * (duplength + 7);
          }
  
        /* When the minimum is greater than zero, 1 we have to replicate up to
        minval-1 times, with no additions required in the copies. Then, if
        there is a limited maximum we have to replicate up to maxval-1 times
        allowing for a BRAZERO item before each optional copy and nesting
        brackets for all but one of the optional copies. */
  
        else
          {
          length += (minval - 1) * duplength;
          if (maxval > minval)   /* Need this test as maxval=-1 means no limit */
            length += (maxval - minval) * (duplength + 7) - 6;
          }
        }
      continue;
  
      /* Non-special character. For a run of such characters the length required
      is the number of characters + 2, except that the maximum run length is 255.
      We won't get a skipped space or a non-data escape or the start of a #
      comment as the first character, so the length can't be zero. */
  
      NORMAL_CHAR:
      default:
      length += 2;
      runlength = 0;
      do
        {
        if ((options & PCRE_EXTENDED) != 0)
          {
          if ((compile_block.ctypes[c] & ctype_space) != 0) continue;
          if (c == '#')
            {
            /* The space before the ; is to avoid a warning on a silly compiler
            on the Macintosh. */
            while ((c = *(++ptr)) != 0 && c != '\n') ;
            continue;
            }
          }
  
        /* Backslash may introduce a data char or a metacharacter; stop the
        string before the latter. */
  
        if (c == '\\')
          {
          const uschar *saveptr = ptr;
          c = check_escape(&ptr, errorptr, bracount, options, FALSE,
            &compile_block);
          if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
          if (c < 0) { ptr = saveptr; break; }
  
  #ifdef L2_UT_PCRE_SUPPORT_UTF8
          if (c > 127 && (options & PCRE_UTF8) != 0)
            {
            int i;
            for (i = 0; i < sizeof(utf8_table1)/sizeof(int); i++)
              if (c <= utf8_table1[i]) break;
            runlength += i;
            }
  #endif
          }
  
        /* Ordinary character or single-char escape */
  
        runlength++;
        }
  
      /* This "while" is the end of the "do" above. */
  
      while (runlength < MAXLIT &&
        (compile_block.ctypes[c = *(++ptr)] & ctype_meta) == 0);
  
      ptr--;
      length += runlength;
      continue;
      }
    }
  
  length += 4;    /* For final KET and END */
  
  if (length > 65539)
    {
    *errorptr = ERR20;
    return NULL;
    }
  
  /* Compute the size of data block needed and get it, either from malloc or
  externally provided function. We specify "code[0]" in the offsetof() expression
  rather than just "code", because it has been reported that one broken compiler
  fails on "code" because it is also an independent variable. It should make no
  difference to the value of the offsetof(). */
  
  size = length + offsetof(real_pcre, code[0]);
  re = (real_pcre *)(pcre_malloc)(size);
  
  if (re == NULL)
    {
    *errorptr = ERR21;
    return NULL;
    }
  
  /* Put in the magic number, and save the size, options, and table pointer */
  
  re->magic_number = MAGIC_NUMBER;
  re->size = size;
  re->options = options;
  re->tables = tables;
  
  /* Set up a starting, non-extracting bracket, then compile the expression. On
  error, *errorptr will be set non-NULL, so we don't need to look at the result
  of the function here. */
  
  ptr = (const uschar *)pattern;
  code = re->code;
  *code = OP_BRA;
  bracount = 0;
  (void)compile_regex(options, -1, &bracount, &code, &ptr, errorptr, FALSE, 0,
    &reqchar, &countlits, &compile_block);
  re->top_bracket = bracount;
  re->top_backref = top_backref;
  
  /* If not reached end of pattern on success, there's an excess bracket. */
  
  if (*errorptr == NULL && *ptr != 0) *errorptr = ERR22;
  
  /* Fill in the terminating state and check for disastrous overflow, but
  if debugging, leave the test till after things are printed out. */
  
  *code++ = OP_END;
  if (code - re->code > length) *errorptr = ERR23;
  
  /* Give an error if there's back reference to a non-existent capturing
  subpattern. */
  
  if (top_backref > re->top_bracket) *errorptr = ERR15;
  
  /* Failed to compile */
  
  if (*errorptr != NULL)
    {
    (pcre_free)(re);
    PCRE_ERROR_RETURN:
    *erroroffset = ptr - (const uschar *)pattern;
    return NULL;
    }
  
  /* If the anchored option was not passed, set flag if we can determine that the
  pattern is anchored by virtue of ^ characters or \A or anything else (such as
  starting with .* when DOTALL is set).
  
  Otherwise, see if we can determine what the first character has to be, because
  that speeds up unanchored matches no end. If not, see if we can set the
  PCRE_STARTLINE flag. This is helpful for multiline matches when all branches
  start with ^. and also when all branches start with .* for non-DOTALL matches.
  */
  
  if ((options & PCRE_ANCHORED) == 0)
    {
    int temp_options = options;
    if (is_anchored(re->code, &temp_options))
      re->options |= PCRE_ANCHORED;
    else
      {
      int ch = find_firstchar(re->code, &temp_options);
      if (ch >= 0)
        {
        re->first_char = ch;
        re->options |= PCRE_FIRSTSET;
        }
      else if (is_startline(re->code))
        re->options |= PCRE_STARTLINE;
      }
    }
  
  /* Save the last required character if there are at least two literal
  characters on all paths, or if there is no first character setting. */
  
  if (reqchar >= 0 && (countlits > 1 || (re->options & PCRE_FIRSTSET) == 0))
    {
    re->req_char = reqchar;
    re->options |= PCRE_REQCHSET;
    }
  
  /* Print out the compiled data for debugging */
  
  return (pcre *)re;
  }
  
  /*************************************************
  *          Match a back-reference                *
  *************************************************/
  
  /* If a back reference hasn't been set, the length that is passed is greater
  than the number of characters left in the string, so the match fails.
  
  Arguments:
    offset      index into the offset vector
    eptr        points into the subject
    length      length to be matched
    md          points to match data block
    ims         the ims flags
  
  Returns:      TRUE if matched
  */
  
  static BOOL
  match_ref(int offset, register const uschar *eptr, int length, match_data *md,
    unsigned long int ims)
  {
  const uschar *p = md->start_subject + md->offset_vector[offset];
  
  /* Always fail if not enough characters left */
  
  if (length > md->end_subject - eptr) return FALSE;
  
  /* Separate the caselesss case for speed */
  
  if ((ims & PCRE_CASELESS) != 0)
    {
    while (length-- > 0)
      if (md->lcc[*p++] != md->lcc[*eptr++]) return FALSE;
    }
  else
    { while (length-- > 0) if (*p++ != *eptr++) return FALSE; }
  
  return TRUE;
  }
  
  /*************************************************
  *         Match from current position            *
  *************************************************/
  
  /* On entry ecode points to the first opcode, and eptr to the first character
  in the subject string, while eptrb holds the value of eptr at the start of the
  last bracketed group - used for breaking infinite loops matching zero-length
  strings.
  
  Arguments:
     eptr        pointer in subject
     ecode       position in code
     offset_top  current top pointer
     md          pointer to "static" info for the match
     ims         current /i, /m, and /s options
     eptrb       pointer to chain of blocks containing eptr at start of
                   brackets - for testing for empty matches
     flags       can contain
                   match_condassert - this is an assertion condition
                   match_isgroup - this is the start of a bracketed group
  
  Returns:       TRUE if matched
  */
  
  static BOOL
  match(register const uschar *eptr, register const uschar *ecode,
    int offset_top, match_data *md, unsigned long int ims, eptrblock *eptrb,
    int flags)
  {
  unsigned long int original_ims = ims;   /* Save for resetting on ')' */
  eptrblock newptrb;
  
  /* At the start of a bracketed group, add the current subject pointer to the
  stack of such pointers, to be re-instated at the end of the group when we hit
  the closing ket. When match() is called in other circumstances, we don't add to
  the stack. */
  
  if ((flags & match_isgroup) != 0)
    {
    newptrb.prev = eptrb;
    newptrb.saved_eptr = eptr;
    eptrb = &newptrb;
    }
  
  /* Now start processing the operations. */
  
  for (;;)
    {
    int op = (int)*ecode;
    int min, max, ctype;
    register int i;
    register int c;
    BOOL minimize = FALSE;
  
    /* Opening capturing bracket. If there is space in the offset vector, save
    the current subject position in the working slot at the top of the vector. We
    mustn't change the current values of the data slot, because they may be set
    from a previous iteration of this group, and be referred to by a reference
    inside the group.
  
    If the bracket fails to match, we need to restore this value and also the
    values of the final offsets, in case they were set by a previous iteration of
    the same bracket.
  
    If there isn't enough space in the offset vector, treat this as if it were a
    non-capturing bracket. Don't worry about setting the flag for the error case
    here; that is handled in the code for KET. */
  
    if (op > OP_BRA)
      {
      int offset;
      int number = op - OP_BRA;
  
      /* For extended extraction brackets (large number), we have to fish out the
      number from a dummy opcode at the start. */
  
      if (number > EXTRACT_BASIC_MAX) number = (ecode[4] << 8) | ecode[5];
      offset = number << 1;
  
      if (offset < md->offset_max)
        {
        int save_offset1 = md->offset_vector[offset];
        int save_offset2 = md->offset_vector[offset+1];
        int save_offset3 = md->offset_vector[md->offset_end - number];
  
        md->offset_vector[md->offset_end - number] = eptr - md->start_subject;
  
        do
          {
          if (match(eptr, ecode+3, offset_top, md, ims, eptrb, match_isgroup))
            return TRUE;
          ecode += (ecode[1] << 8) + ecode[2];
          }
        while (*ecode == OP_ALT);
  
        md->offset_vector[offset] = save_offset1;
        md->offset_vector[offset+1] = save_offset2;
        md->offset_vector[md->offset_end - number] = save_offset3;
  
        return FALSE;
        }
  
      /* Insufficient room for saving captured contents */
  
      else op = OP_BRA;
      }
  
    /* Other types of node can be handled by a switch */
  
    switch(op)
      {
      case OP_BRA:     /* Non-capturing bracket: optimized */
  
      do
        {
        if (match(eptr, ecode+3, offset_top, md, ims, eptrb, match_isgroup))
          return TRUE;
        ecode += (ecode[1] << 8) + ecode[2];
        }
      while (*ecode == OP_ALT);
  
      return FALSE;
  
      /* Conditional group: compilation checked that there are no more than
      two branches. If the condition is false, skipping the first branch takes us
      past the end if there is only one branch, but that's OK because that is
      exactly what going to the ket would do. */
  
      case OP_COND:
      if (ecode[3] == OP_CREF)         /* Condition is extraction test */
        {
        int offset = (ecode[4] << 9) | (ecode[5] << 1); /* Doubled ref number */
        return match(eptr,
          ecode + ((offset < offset_top && md->offset_vector[offset] >= 0)?
            6 : 3 + (ecode[1] << 8) + ecode[2]),
          offset_top, md, ims, eptrb, match_isgroup);
        }
  
      /* The condition is an assertion. Call match() to evaluate it - setting
      the final argument TRUE causes it to stop at the end of an assertion. */
  
      else
        {
        if (match(eptr, ecode+3, offset_top, md, ims, NULL,
            match_condassert | match_isgroup))
          {
          ecode += 3 + (ecode[4] << 8) + ecode[5];
          while (*ecode == OP_ALT) ecode += (ecode[1] << 8) + ecode[2];
          }
        else ecode += (ecode[1] << 8) + ecode[2];
        return match(eptr, ecode+3, offset_top, md, ims, eptrb, match_isgroup);
        }
      /* Control never reaches here */
  
      /* Skip over conditional reference or large extraction number data if
      encountered. */
  
      case OP_CREF:
      case OP_BRANUMBER:
      ecode += 3;
      break;
  
      case OP_END:
      if (md->notempty && eptr == md->start_match) return FALSE;
      md->end_match_ptr = eptr;          /* Record where we ended */
      md->end_offset_top = offset_top;   /* and how many extracts were taken */
      return TRUE;
  
      /* Change option settings */
  
      case OP_OPT:
      ims = ecode[1];
      ecode += 2;
  
      break;
  
      /* Assertion brackets. Check the alternative branches in turn - the
      matching won't pass the KET for an assertion. If any one branch matches,
      the assertion is true. Lookbehind assertions have an OP_REVERSE item at the
      start of each branch to move the current point backwards, so the code at
      this level is identical to the lookahead case. */
  
      case OP_ASSERT:
      case OP_ASSERTBACK:
      do
        {
        if (match(eptr, ecode+3, offset_top, md, ims, NULL, match_isgroup)) break;
        ecode += (ecode[1] << 8) + ecode[2];
        }
      while (*ecode == OP_ALT);
      if (*ecode == OP_KET) return FALSE;
  
      /* If checking an assertion for a condition, return TRUE. */
  
      if ((flags & match_condassert) != 0) return TRUE;
  
      /* Continue from after the assertion, updating the offsets high water
      mark, since extracts may have been taken during the assertion. */
  
      do ecode += (ecode[1] << 8) + ecode[2]; while (*ecode == OP_ALT);
      ecode += 3;
      offset_top = md->end_offset_top;
      continue;
  
      /* Negative assertion: all branches must fail to match */
  
      case OP_ASSERT_NOT:
      case OP_ASSERTBACK_NOT:
      do
        {
        if (match(eptr, ecode+3, offset_top, md, ims, NULL, match_isgroup))
          return FALSE;
        ecode += (ecode[1] << 8) + ecode[2];
        }
      while (*ecode == OP_ALT);
  
      if ((flags & match_condassert) != 0) return TRUE;
  
      ecode += 3;
      continue;
  
      /* Move the subject pointer back. This occurs only at the start of
      each branch of a lookbehind assertion. If we are too close to the start to
      move back, this match function fails. When working with UTF-8 we move
      back a number of characters, not bytes. */
  
      case OP_REVERSE:
  #ifdef L2_UT_PCRE_SUPPORT_UTF8
      c = (ecode[1] << 8) + ecode[2];
      for (i = 0; i < c; i++)
        {
        eptr--;
        BACKCHAR(eptr)
        }
  #else
      eptr -= (ecode[1] << 8) + ecode[2];
  #endif
  
      if (eptr < md->start_subject) return FALSE;
      ecode += 3;
      break;
  
      /* Recursion matches the current regex, nested. If there are any capturing
      brackets started but not finished, we have to save their starting points
      and reinstate them after the recursion. However, we don't know how many
      such there are (offset_top records the completed total) so we just have
      to save all the potential data. There may be up to 99 such values, which
      is a bit large to put on the stack, but using malloc for small numbers
      seems expensive. As a compromise, the stack is used when there are fewer
      than 16 values to store; otherwise malloc is used. A problem is what to do
      if the malloc fails ... there is no way of returning to the top level with
      an error. Save the top 15 values on the stack, and accept that the rest
      may be wrong. */
  
      case OP_RECURSE:
        {
        BOOL rc;
        int *save;
        int stacksave[15];
  
        c = md->offset_max;
  
        if (c < 16) save = stacksave; else
          {
          save = (int *)(pcre_malloc)((c+1) * sizeof(int));
          if (save == NULL)
            {
            save = stacksave;
            c = 15;
            }
          }
  
        for (i = 1; i <= c; i++)
          save[i] = md->offset_vector[md->offset_end - i];
        rc = match(eptr, md->start_pattern, offset_top, md, ims, eptrb,
          match_isgroup);
        for (i = 1; i <= c; i++)
          md->offset_vector[md->offset_end - i] = save[i];
        if (save != stacksave) (pcre_free)(save);
        if (!rc) return FALSE;
  
        /* In case the recursion has set more capturing values, save the final
        number, then move along the subject till after the recursive match,
        and advance one byte in the pattern code. */
  
        offset_top = md->end_offset_top;
        eptr = md->end_match_ptr;
        ecode++;
        }
      break;
  
      /* "Once" brackets are like assertion brackets except that after a match,
      the point in the subject string is not moved back. Thus there can never be
      a move back into the brackets. Check the alternative branches in turn - the
      matching won't pass the KET for this kind of subpattern. If any one branch
      matches, we carry on as at the end of a normal bracket, leaving the subject
      pointer. */
  
      case OP_ONCE:
        {
        const uschar *prev = ecode;
        const uschar *saved_eptr = eptr;
  
        do
          {
          if (match(eptr, ecode+3, offset_top, md, ims, eptrb, match_isgroup))
            break;
          ecode += (ecode[1] << 8) + ecode[2];
          }
        while (*ecode == OP_ALT);
  
        /* If hit the end of the group (which could be repeated), fail */
  
        if (*ecode != OP_ONCE && *ecode != OP_ALT) return FALSE;
  
        /* Continue as from after the assertion, updating the offsets high water
        mark, since extracts may have been taken. */
  
        do ecode += (ecode[1] << 8) + ecode[2]; while (*ecode == OP_ALT);
  
        offset_top = md->end_offset_top;
        eptr = md->end_match_ptr;
  
        /* For a non-repeating ket, just continue at this level. This also
        happens for a repeating ket if no characters were matched in the group.
        This is the forcible breaking of infinite loops as implemented in Perl
        5.005. If there is an options reset, it will get obeyed in the normal
        course of events. */
  
        if (*ecode == OP_KET || eptr == saved_eptr)
          {
          ecode += 3;
          break;
          }
  
        /* The repeating kets try the rest of the pattern or restart from the
        preceding bracket, in the appropriate order. We need to reset any options
        that changed within the bracket before re-running it, so check the next
        opcode. */
  
        if (ecode[3] == OP_OPT)
          {
          ims = (ims & ~PCRE_IMS) | ecode[4];
  
          }
  
        if (*ecode == OP_KETRMIN)
          {
          if (match(eptr, ecode+3, offset_top, md, ims, eptrb, 0) ||
              match(eptr, prev, offset_top, md, ims, eptrb, match_isgroup))
                return TRUE;
          }
        else  /* OP_KETRMAX */
          {
          if (match(eptr, prev, offset_top, md, ims, eptrb, match_isgroup) ||
              match(eptr, ecode+3, offset_top, md, ims, eptrb, 0)) return TRUE;
          }
        }
      return FALSE;
  
      /* An alternation is the end of a branch; scan along to find the end of the
      bracketed group and go to there. */
  
      case OP_ALT:
      do ecode += (ecode[1] << 8) + ecode[2]; while (*ecode == OP_ALT);
      break;
  
      /* BRAZERO and BRAMINZERO occur just before a bracket group, indicating
      that it may occur zero times. It may repeat infinitely, or not at all -
      i.e. it could be ()* or ()? in the pattern. Brackets with fixed upper
      repeat limits are compiled as a number of copies, with the optional ones
      preceded by BRAZERO or BRAMINZERO. */
  
      case OP_BRAZERO:
        {
        const uschar *next = ecode+1;
        if (match(eptr, next, offset_top, md, ims, eptrb, match_isgroup))
          return TRUE;
        do next += (next[1] << 8) + next[2]; while (*next == OP_ALT);
        ecode = next + 3;
        }
      break;
  
      case OP_BRAMINZERO:
        {
        const uschar *next = ecode+1;
        do next += (next[1] << 8) + next[2]; while (*next == OP_ALT);
        if (match(eptr, next+3, offset_top, md, ims, eptrb, match_isgroup))
          return TRUE;
        ecode++;
        }
      break;
  
      case OP_KET:
      case OP_KETRMIN:
      case OP_KETRMAX:
        {
        const uschar *prev = ecode - (ecode[1] << 8) - ecode[2];
        const uschar *saved_eptr = eptrb->saved_eptr;
  
        eptrb = eptrb->prev;    /* Back up the stack of bracket start pointers */
  
        if (*prev == OP_ASSERT || *prev == OP_ASSERT_NOT ||
            *prev == OP_ASSERTBACK || *prev == OP_ASSERTBACK_NOT ||
            *prev == OP_ONCE)
          {
          md->end_match_ptr = eptr;      /* For ONCE */
          md->end_offset_top = offset_top;
          return TRUE;
          }
  
        /* In all other cases except a conditional group we have to check the
        group number back at the start and if necessary complete handling an
        extraction by setting the offsets and bumping the high water mark. */
  
        if (*prev != OP_COND)
          {
          int offset;
          int number = *prev - OP_BRA;
  
          /* For extended extraction brackets (large number), we have to fish out
          the number from a dummy opcode at the start. */
  
          if (number > EXTRACT_BASIC_MAX) number = (prev[4] << 8) | prev[5];
          offset = number << 1;
  
          if (number > 0)
            {
            if (offset >= md->offset_max) md->offset_overflow = TRUE; else
              {
              md->offset_vector[offset] =
                md->offset_vector[md->offset_end - number];
              md->offset_vector[offset+1] = eptr - md->start_subject;
              if (offset_top <= offset) offset_top = offset + 2;
              }
            }
          }
  
        /* Reset the value of the ims flags, in case they got changed during
        the group. */
  
        ims = original_ims;
  
        /* For a non-repeating ket, just continue at this level. This also
        happens for a repeating ket if no characters were matched in the group.
        This is the forcible breaking of infinite loops as implemented in Perl
        5.005. If there is an options reset, it will get obeyed in the normal
        course of events. */
  
        if (*ecode == OP_KET || eptr == saved_eptr)
          {
          ecode += 3;
          break;
          }
  
        /* The repeating kets try the rest of the pattern or restart from the
        preceding bracket, in the appropriate order. */
  
        if (*ecode == OP_KETRMIN)
          {
          if (match(eptr, ecode+3, offset_top, md, ims, eptrb, 0) ||
              match(eptr, prev, offset_top, md, ims, eptrb, match_isgroup))
                return TRUE;
          }
        else  /* OP_KETRMAX */
          {
          if (match(eptr, prev, offset_top, md, ims, eptrb, match_isgroup) ||
              match(eptr, ecode+3, offset_top, md, ims, eptrb, 0)) return TRUE;
          }
        }
      return FALSE;
  
      /* Start of subject unless notbol, or after internal newline if multiline */
  
      case OP_CIRC:
      if (md->notbol && eptr == md->start_subject) return FALSE;
      if ((ims & PCRE_MULTILINE) != 0)
        {
        if (eptr != md->start_subject && eptr[-1] != '\n') return FALSE;
        ecode++;
        break;
        }
      /* ... else fall through */
  
      /* Start of subject assertion */
  
      case OP_SOD:
      if (eptr != md->start_subject) return FALSE;
      ecode++;
      break;
  
      /* Assert before internal newline if multiline, or before a terminating
      newline unless endonly is set, else end of subject unless noteol is set. */
  
      case OP_DOLL:
      if ((ims & PCRE_MULTILINE) != 0)
        {
        if (eptr < md->end_subject) { if (*eptr != '\n') return FALSE; }
          else { if (md->noteol) return FALSE; }
        ecode++;
        break;
        }
      else
        {
        if (md->noteol) return FALSE;
        if (!md->endonly)
          {
          if (eptr < md->end_subject - 1 ||
             (eptr == md->end_subject - 1 && *eptr != '\n')) return FALSE;
  
          ecode++;
          break;
          }
        }
      /* ... else fall through */
  
      case OP_EOD:
      if (eptr < md->end_subject) return FALSE;
      ecode++;
      break;
  
      case OP_EODN:
      if (eptr < md->end_subject - 1 ||
         (eptr == md->end_subject - 1 && *eptr != '\n')) return FALSE;
      ecode++;
      break;
  
      /* Word boundary assertions */
  
      case OP_NOT_WORD_BOUNDARY:
      case OP_WORD_BOUNDARY:
        {
        BOOL prev_is_word = (eptr != md->start_subject) &&
          ((md->ctypes[eptr[-1]] & ctype_word) != 0);
        BOOL cur_is_word = (eptr < md->end_subject) &&
          ((md->ctypes[*eptr] & ctype_word) != 0);
        if ((*ecode++ == OP_WORD_BOUNDARY)?
             cur_is_word == prev_is_word : cur_is_word != prev_is_word)
          return FALSE;
        }
      break;
  
      /* Match a single character type; inline for speed */
  
      case OP_ANY:
      if ((ims & PCRE_DOTALL) == 0 && eptr < md->end_subject && *eptr == '\n')
        return FALSE;
      if (eptr++ >= md->end_subject) return FALSE;
  #ifdef L2_UT_PCRE_SUPPORT_UTF8
      if (md->utf8)
        while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
  #endif
      ecode++;
      break;
  
      case OP_NOT_DIGIT:
      if (eptr >= md->end_subject ||
         (md->ctypes[*eptr++] & ctype_digit) != 0)
        return FALSE;
      ecode++;
      break;
  
      case OP_DIGIT:
      if (eptr >= md->end_subject ||
         (md->ctypes[*eptr++] & ctype_digit) == 0)
        return FALSE;
      ecode++;
      break;
  
      case OP_NOT_WHITESPACE:
      if (eptr >= md->end_subject ||
         (md->ctypes[*eptr++] & ctype_space) != 0)
        return FALSE;
      ecode++;
      break;
  
      case OP_WHITESPACE:
      if (eptr >= md->end_subject ||
         (md->ctypes[*eptr++] & ctype_space) == 0)
        return FALSE;
      ecode++;
      break;
  
      case OP_NOT_WORDCHAR:
      if (eptr >= md->end_subject ||
         (md->ctypes[*eptr++] & ctype_word) != 0)
        return FALSE;
      ecode++;
      break;
  
      case OP_WORDCHAR:
      if (eptr >= md->end_subject ||
         (md->ctypes[*eptr++] & ctype_word) == 0)
        return FALSE;
      ecode++;
      break;
  
      /* Match a back reference, possibly repeatedly. Look past the end of the
      item to see if there is repeat information following. The code is similar
      to that for character classes, but repeated for efficiency. Then obey
      similar code to character type repeats - written out again for speed.
      However, if the referenced string is the empty string, always treat
      it as matched, any number of times (otherwise there could be infinite
      loops). */
  
      case OP_REF:
        {
        int length;
        int offset = (ecode[1] << 9) | (ecode[2] << 1); /* Doubled ref number */
        ecode += 3;                                     /* Advance past item */
  
        /* If the reference is unset, set the length to be longer than the amount
        of subject left; this ensures that every attempt at a match fails. We
        can't just fail here, because of the possibility of quantifiers with zero
        minima. */
  
        length = (offset >= offset_top || md->offset_vector[offset] < 0)?
          md->end_subject - eptr + 1 :
          md->offset_vector[offset+1] - md->offset_vector[offset];
  
        /* Set up for repetition, or handle the non-repeated case */
  
        switch (*ecode)
          {
          case OP_CRSTAR:
          case OP_CRMINSTAR:
          case OP_CRPLUS:
          case OP_CRMINPLUS:
          case OP_CRQUERY:
          case OP_CRMINQUERY:
          c = *ecode++ - OP_CRSTAR;
          minimize = (c & 1) != 0;
          min = rep_min[c];                 /* Pick up values from tables; */
          max = rep_max[c];                 /* zero for max => infinity */
          if (max == 0) max = INT_MAX;
          break;
  
          case OP_CRRANGE:
          case OP_CRMINRANGE:
          minimize = (*ecode == OP_CRMINRANGE);
          min = (ecode[1] << 8) + ecode[2];
          max = (ecode[3] << 8) + ecode[4];
          if (max == 0) max = INT_MAX;
          ecode += 5;
          break;
  
          default:               /* No repeat follows */
          if (!match_ref(offset, eptr, length, md, ims)) return FALSE;
          eptr += length;
          continue;              /* With the main loop */
          }
  
        /* If the length of the reference is zero, just continue with the
        main loop. */
  
        if (length == 0) continue;
  
        /* First, ensure the minimum number of matches are present. We get back
        the length of the reference string explicitly rather than passing the
        address of eptr, so that eptr can be a register variable. */
  
        for (i = 1; i <= min; i++)
          {
          if (!match_ref(offset, eptr, length, md, ims)) return FALSE;
          eptr += length;
          }
  
        /* If min = max, continue at the same level without recursion.
        They are not both allowed to be zero. */
  
        if (min == max) continue;
  
        /* If minimizing, keep trying and advancing the pointer */
  
        if (minimize)
          {
          for (i = min;; i++)
            {
            if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
              return TRUE;
            if (i >= max || !match_ref(offset, eptr, length, md, ims))
              return FALSE;
            eptr += length;
            }
          /* Control never gets here */
          }
  
        /* If maximizing, find the longest string and work backwards */
  
        else
          {
          const uschar *pp = eptr;
          for (i = min; i < max; i++)
            {
            if (!match_ref(offset, eptr, length, md, ims)) break;
            eptr += length;
            }
          while (eptr >= pp)
            {
            if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
              return TRUE;
            eptr -= length;
            }
          return FALSE;
          }
        }
      /* Control never gets here */
  
      /* Match a character class, possibly repeatedly. Look past the end of the
      item to see if there is repeat information following. Then obey similar
      code to character type repeats - written out again for speed. */
  
      case OP_CLASS:
        {
        const uschar *data = ecode + 1;  /* Save for matching */
        ecode += 33;                     /* Advance past the item */
  
        switch (*ecode)
          {
          case OP_CRSTAR:
          case OP_CRMINSTAR:
          case OP_CRPLUS:
          case OP_CRMINPLUS:
          case OP_CRQUERY:
          case OP_CRMINQUERY:
          c = *ecode++ - OP_CRSTAR;
          minimize = (c & 1) != 0;
          min = rep_min[c];                 /* Pick up values from tables; */
          max = rep_max[c];                 /* zero for max => infinity */
          if (max == 0) max = INT_MAX;
          break;
  
          case OP_CRRANGE:
          case OP_CRMINRANGE:
          minimize = (*ecode == OP_CRMINRANGE);
          min = (ecode[1] << 8) + ecode[2];
          max = (ecode[3] << 8) + ecode[4];
          if (max == 0) max = INT_MAX;
          ecode += 5;
          break;
  
          default:               /* No repeat follows */
          min = max = 1;
          break;
          }
  
        /* First, ensure the minimum number of matches are present. */
  
        for (i = 1; i <= min; i++)
          {
          if (eptr >= md->end_subject) return FALSE;
          GETCHARINC(c, eptr)         /* Get character; increment eptr */
  
  #ifdef L2_UT_PCRE_SUPPORT_UTF8
          /* We do not yet support class members > 255 */
          if (c > 255) return FALSE;
  #endif
  
          if ((data[c/8] & (1 << (c&7))) != 0) continue;
          return FALSE;
          }
  
        /* If max == min we can continue with the main loop without the
        need to recurse. */
  
        if (min == max) continue;
  
        /* If minimizing, keep testing the rest of the expression and advancing
        the pointer while it matches the class. */
  
        if (minimize)
          {
          for (i = min;; i++)
            {
            if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
              return TRUE;
            if (i >= max || eptr >= md->end_subject) return FALSE;
            GETCHARINC(c, eptr)       /* Get character; increment eptr */
  
  #ifdef L2_UT_PCRE_SUPPORT_UTF8
            /* We do not yet support class members > 255 */
            if (c > 255) return FALSE;
  #endif
            if ((data[c/8] & (1 << (c&7))) != 0) continue;
            return FALSE;
            }
          /* Control never gets here */
          }
  
        /* If maximizing, find the longest possible run, then work backwards. */
  
        else
          {
          const uschar *pp = eptr;
          int len = 1;
          for (i = min; i < max; i++)
            {
            if (eptr >= md->end_subject) break;
            GETCHARLEN(c, eptr, len)  /* Get character, set length if UTF-8 */
  
  #ifdef L2_UT_PCRE_SUPPORT_UTF8
            /* We do not yet support class members > 255 */
            if (c > 255) break;
  #endif
            if ((data[c/8] & (1 << (c&7))) == 0) break;
            eptr += len;
            }
  
          while (eptr >= pp)
            {
            if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
              return TRUE;
  
  #ifdef L2_UT_PCRE_SUPPORT_UTF8
            BACKCHAR(eptr)
  #endif
            }
          return FALSE;
          }
        }
      /* Control never gets here */
  
      /* Match a run of characters */
  
      case OP_CHARS:
        {
        register int length = ecode[1];
        ecode += 2;
  
        if (length > md->end_subject - eptr) return FALSE;
        if ((ims & PCRE_CASELESS) != 0)
          {
          while (length-- > 0)
            if (md->lcc[*ecode++] != md->lcc[*eptr++])
              return FALSE;
          }
        else
          {
          while (length-- > 0) if (*ecode++ != *eptr++) return FALSE;
          }
        }
      break;
  
      /* Match a single character repeatedly; different opcodes share code. */
  
      case OP_EXACT:
      min = max = (ecode[1] << 8) + ecode[2];
      ecode += 3;
      goto REPEATCHAR;
  
      case OP_UPTO:
      case OP_MINUPTO:
      min = 0;
      max = (ecode[1] << 8) + ecode[2];
      minimize = *ecode == OP_MINUPTO;
      ecode += 3;
      goto REPEATCHAR;
  
      case OP_STAR:
      case OP_MINSTAR:
      case OP_PLUS:
      case OP_MINPLUS:
      case OP_QUERY:
      case OP_MINQUERY:
      c = *ecode++ - OP_STAR;
      minimize = (c & 1) != 0;
      min = rep_min[c];                 /* Pick up values from tables; */
      max = rep_max[c];                 /* zero for max => infinity */
      if (max == 0) max = INT_MAX;
  
      /* Common code for all repeated single-character matches. We can give
      up quickly if there are fewer than the minimum number of characters left in
      the subject. */
  
      REPEATCHAR:
      if (min > md->end_subject - eptr) return FALSE;
      c = *ecode++;
  
      /* The code is duplicated for the caseless and caseful cases, for speed,
      since matching characters is likely to be quite common. First, ensure the
      minimum number of matches are present. If min = max, continue at the same
      level without recursing. Otherwise, if minimizing, keep trying the rest of
      the expression and advancing one matching character if failing, up to the
      maximum. Alternatively, if maximizing, find the maximum number of
      characters and work backwards. */
  
      if ((ims & PCRE_CASELESS) != 0)
        {
        c = md->lcc[c];
        for (i = 1; i <= min; i++)
          if (c != md->lcc[*eptr++]) return FALSE;
        if (min == max) continue;
        if (minimize)
          {
          for (i = min;; i++)
            {
            if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
              return TRUE;
            if (i >= max || eptr >= md->end_subject ||
                c != md->lcc[*eptr++])
              return FALSE;
            }
          /* Control never gets here */
          }
        else
          {
          const uschar *pp = eptr;
          for (i = min; i < max; i++)
            {
            if (eptr >= md->end_subject || c != md->lcc[*eptr]) break;
            eptr++;
            }
          while (eptr >= pp)
            if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
              return TRUE;
          return FALSE;
          }
        /* Control never gets here */
        }
  
      /* Caseful comparisons */
  
      else
        {
        for (i = 1; i <= min; i++) if (c != *eptr++) return FALSE;
        if (min == max) continue;
        if (minimize)
          {
          for (i = min;; i++)
            {
            if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
              return TRUE;
            if (i >= max || eptr >= md->end_subject || c != *eptr++) return FALSE;
            }
          /* Control never gets here */
          }
        else
          {
          const uschar *pp = eptr;
          for (i = min; i < max; i++)
            {
            if (eptr >= md->end_subject || c != *eptr) break;
            eptr++;
            }
          while (eptr >= pp)
           if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
             return TRUE;
          return FALSE;
          }
        }
      /* Control never gets here */
  
      /* Match a negated single character */
  
      case OP_NOT:
      if (eptr >= md->end_subject) return FALSE;
      ecode++;
      if ((ims & PCRE_CASELESS) != 0)
        {
        if (md->lcc[*ecode++] == md->lcc[*eptr++]) return FALSE;
        }
      else
        {
        if (*ecode++ == *eptr++) return FALSE;
        }
      break;
  
      /* Match a negated single character repeatedly. This is almost a repeat of
      the code for a repeated single character, but I haven't found a nice way of
      commoning these up that doesn't require a test of the positive/negative
      option for each character match. Maybe that wouldn't add very much to the
      time taken, but character matching *is* what this is all about... */
  
      case OP_NOTEXACT:
      min = max = (ecode[1] << 8) + ecode[2];
      ecode += 3;
      goto REPEATNOTCHAR;
  
      case OP_NOTUPTO:
      case OP_NOTMINUPTO:
      min = 0;
      max = (ecode[1] << 8) + ecode[2];
      minimize = *ecode == OP_NOTMINUPTO;
      ecode += 3;
      goto REPEATNOTCHAR;
  
      case OP_NOTSTAR:
      case OP_NOTMINSTAR:
      case OP_NOTPLUS:
      case OP_NOTMINPLUS:
      case OP_NOTQUERY:
      case OP_NOTMINQUERY:
      c = *ecode++ - OP_NOTSTAR;
      minimize = (c & 1) != 0;
      min = rep_min[c];                 /* Pick up values from tables; */
      max = rep_max[c];                 /* zero for max => infinity */
      if (max == 0) max = INT_MAX;
  
      /* Common code for all repeated single-character matches. We can give
      up quickly if there are fewer than the minimum number of characters left in
      the subject. */
  
      REPEATNOTCHAR:
      if (min > md->end_subject - eptr) return FALSE;
      c = *ecode++;
  
      /* The code is duplicated for the caseless and caseful cases, for speed,
      since matching characters is likely to be quite common. First, ensure the
      minimum number of matches are present. If min = max, continue at the same
      level without recursing. Otherwise, if minimizing, keep trying the rest of
      the expression and advancing one matching character if failing, up to the
      maximum. Alternatively, if maximizing, find the maximum number of
      characters and work backwards. */
  
      if ((ims & PCRE_CASELESS) != 0)
        {
        c = md->lcc[c];
        for (i = 1; i <= min; i++)
          if (c == md->lcc[*eptr++]) return FALSE;
        if (min == max) continue;
        if (minimize)
          {
          for (i = min;; i++)
            {
            if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
              return TRUE;
            if (i >= max || eptr >= md->end_subject ||
                c == md->lcc[*eptr++])
              return FALSE;
            }
          /* Control never gets here */
          }
        else
          {
          const uschar *pp = eptr;
          for (i = min; i < max; i++)
            {
            if (eptr >= md->end_subject || c == md->lcc[*eptr]) break;
            eptr++;
            }
          while (eptr >= pp)
            if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
              return TRUE;
          return FALSE;
          }
        /* Control never gets here */
        }
  
      /* Caseful comparisons */
  
      else
        {
        for (i = 1; i <= min; i++) if (c == *eptr++) return FALSE;
        if (min == max) continue;
        if (minimize)
          {
          for (i = min;; i++)
            {
            if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
              return TRUE;
            if (i >= max || eptr >= md->end_subject || c == *eptr++) return FALSE;
            }
          /* Control never gets here */
          }
        else
          {
          const uschar *pp = eptr;
          for (i = min; i < max; i++)
            {
            if (eptr >= md->end_subject || c == *eptr) break;
            eptr++;
            }
          while (eptr >= pp)
           if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
             return TRUE;
          return FALSE;
          }
        }
      /* Control never gets here */
  
      /* Match a single character type repeatedly; several different opcodes
      share code. This is very similar to the code for single characters, but we
      repeat it in the interests of efficiency. */
  
      case OP_TYPEEXACT:
      min = max = (ecode[1] << 8) + ecode[2];
      minimize = TRUE;
      ecode += 3;
      goto REPEATTYPE;
  
      case OP_TYPEUPTO:
      case OP_TYPEMINUPTO:
      min = 0;
      max = (ecode[1] << 8) + ecode[2];
      minimize = *ecode == OP_TYPEMINUPTO;
      ecode += 3;
      goto REPEATTYPE;
  
      case OP_TYPESTAR:
      case OP_TYPEMINSTAR:
      case OP_TYPEPLUS:
      case OP_TYPEMINPLUS:
      case OP_TYPEQUERY:
      case OP_TYPEMINQUERY:
      c = *ecode++ - OP_TYPESTAR;
      minimize = (c & 1) != 0;
      min = rep_min[c];                 /* Pick up values from tables; */
      max = rep_max[c];                 /* zero for max => infinity */
      if (max == 0) max = INT_MAX;
  
      /* Common code for all repeated single character type matches */
  
      REPEATTYPE:
      ctype = *ecode++;      /* Code for the character type */
  
      /* First, ensure the minimum number of matches are present. Use inline
      code for maximizing the speed, and do the type test once at the start
      (i.e. keep it out of the loop). Also we can test that there are at least
      the minimum number of bytes before we start, except when doing '.' in
      UTF8 mode. Leave the test in in all cases; in the special case we have
      to test after each character. */
  
      if (min > md->end_subject - eptr) return FALSE;
      if (min > 0) switch(ctype)
        {
        case OP_ANY:
  #ifdef L2_UT_PCRE_SUPPORT_UTF8
        if (md->utf8)
          {
          for (i = 1; i <= min; i++)
            {
            if (eptr >= md->end_subject ||
               (*eptr++ == '\n' && (ims & PCRE_DOTALL) == 0))
              return FALSE;
            while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
            }
          break;
          }
  #endif
        /* Non-UTF8 can be faster */
        if ((ims & PCRE_DOTALL) == 0)
          { for (i = 1; i <= min; i++) if (*eptr++ == '\n') return FALSE; }
        else eptr += min;
        break;
  
        case OP_NOT_DIGIT:
        for (i = 1; i <= min; i++)
          if ((md->ctypes[*eptr++] & ctype_digit) != 0) return FALSE;
        break;
  
        case OP_DIGIT:
        for (i = 1; i <= min; i++)
          if ((md->ctypes[*eptr++] & ctype_digit) == 0) return FALSE;
        break;
  
        case OP_NOT_WHITESPACE:
        for (i = 1; i <= min; i++)
          if ((md->ctypes[*eptr++] & ctype_space) != 0) return FALSE;
        break;
  
        case OP_WHITESPACE:
        for (i = 1; i <= min; i++)
          if ((md->ctypes[*eptr++] & ctype_space) == 0) return FALSE;
        break;
  
        case OP_NOT_WORDCHAR:
        for (i = 1; i <= min; i++)
          if ((md->ctypes[*eptr++] & ctype_word) != 0)
            return FALSE;
        break;
  
        case OP_WORDCHAR:
        for (i = 1; i <= min; i++)
          if ((md->ctypes[*eptr++] & ctype_word) == 0)
            return FALSE;
        break;
        }
  
      /* If min = max, continue at the same level without recursing */
  
      if (min == max) continue;
  
      /* If minimizing, we have to test the rest of the pattern before each
      subsequent match. */
  
      if (minimize)
        {
        for (i = min;; i++)
          {
          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0)) return TRUE;
          if (i >= max || eptr >= md->end_subject) return FALSE;
  
          c = *eptr++;
          switch(ctype)
            {
            case OP_ANY:
            if ((ims & PCRE_DOTALL) == 0 && c == '\n') return FALSE;
  #ifdef L2_UT_PCRE_SUPPORT_UTF8
            if (md->utf8)
              while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
  #endif
            break;
  
            case OP_NOT_DIGIT:
            if ((md->ctypes[c] & ctype_digit) != 0) return FALSE;
            break;
  
            case OP_DIGIT:
            if ((md->ctypes[c] & ctype_digit) == 0) return FALSE;
            break;
  
            case OP_NOT_WHITESPACE:
            if ((md->ctypes[c] & ctype_space) != 0) return FALSE;
            break;
  
            case OP_WHITESPACE:
            if  ((md->ctypes[c] & ctype_space) == 0) return FALSE;
            break;
  
            case OP_NOT_WORDCHAR:
            if ((md->ctypes[c] & ctype_word) != 0) return FALSE;
            break;
  
            case OP_WORDCHAR:
            if ((md->ctypes[c] & ctype_word) == 0) return FALSE;
            break;
            }
          }
        /* Control never gets here */
        }
  
      /* If maximizing it is worth using inline code for speed, doing the type
      test once at the start (i.e. keep it out of the loop). */
  
      else
        {
        const uschar *pp = eptr;
        switch(ctype)
          {
          case OP_ANY:
  
          /* Special code is required for UTF8, but when the maximum is unlimited
          we don't need it. */
  
  #ifdef L2_UT_PCRE_SUPPORT_UTF8
          if (md->utf8 && max < INT_MAX)
            {
            if ((ims & PCRE_DOTALL) == 0)
              {
              for (i = min; i < max; i++)
                {
                if (eptr >= md->end_subject || *eptr++ == '\n') break;
                while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
                }
              }
            else
              {
              for (i = min; i < max; i++)
                {
                eptr++;
                while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
                }
              }
            break;
            }
  #endif
          /* Non-UTF8 can be faster */
          if ((ims & PCRE_DOTALL) == 0)
            {
            for (i = min; i < max; i++)
              {
              if (eptr >= md->end_subject || *eptr == '\n') break;
              eptr++;
              }
            }
          else
            {
            c = max - min;
            if (c > md->end_subject - eptr) c = md->end_subject - eptr;
            eptr += c;
            }
          break;
  
          case OP_NOT_DIGIT:
          for (i = min; i < max; i++)
            {
            if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_digit) != 0)
              break;
            eptr++;
            }
          break;
  
          case OP_DIGIT:
          for (i = min; i < max; i++)
            {
            if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_digit) == 0)
              break;
            eptr++;
            }
          break;
  
          case OP_NOT_WHITESPACE:
          for (i = min; i < max; i++)
            {
            if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_space) != 0)
              break;
            eptr++;
            }
          break;
  
          case OP_WHITESPACE:
          for (i = min; i < max; i++)
            {
            if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_space) == 0)
              break;
            eptr++;
            }
          break;
  
          case OP_NOT_WORDCHAR:
          for (i = min; i < max; i++)
            {
            if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_word) != 0)
              break;
            eptr++;
            }
          break;
  
          case OP_WORDCHAR:
          for (i = min; i < max; i++)
            {
            if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_word) == 0)
              break;
            eptr++;
            }
          break;
          }
  
        while (eptr >= pp)
          {
          if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
            return TRUE;
  #ifdef L2_UT_PCRE_SUPPORT_UTF8
          if (md->utf8)
            while (eptr > pp && (*eptr & 0xc0) == 0x80) eptr--;
  #endif
          }
        return FALSE;
        }
      /* Control never gets here */
  
      /* There's been some horrible disaster. */
  
      default:
  
      md->errorcode = PCRE_ERROR_UNKNOWN_NODE;
      return FALSE;
      }
  
    /* Do not stick any code in here without much thought; it is assumed
    that "continue" in the code above comes out to here to repeat the main
    loop. */
  
    }
  /* Control never reaches here */
  }
  
  /*************************************************
  *         Execute a Regular Expression           *
  *************************************************/
  
  /* This function applies a compiled re to a subject string and picks out
  portions of the string if it matches. Two elements in the vector are set for
  each substring: the offsets to the start and end of the substring.
  
  Arguments:
    external_re     points to the compiled expression
    external_extra  points to "hints" from pcre_study() or is NULL
    subject         points to the subject string
    length          length of subject string (may contain binary zeros)
    start_offset    where to start in the subject string
    options         option bits
    offsets         points to a vector of ints to be filled in with offsets
    offsetcount     the number of elements in the vector
  
  Returns:          > 0 => success; value is the number of elements filled in
                    = 0 => success, but offsets is not big enough
                     -1 => failed to match
                   < -1 => some kind of unexpected problem
  */
  
  int
  pcre_exec(const pcre *external_re, const pcre_extra *external_extra,
    const char *subject, int length, int start_offset, int options, int *offsets,
    int offsetcount)
  {
  int resetcount, ocount;
  int first_char = -1;
  int req_char = -1;
  int req_char2 = -1;
  unsigned long int ims = 0;
  match_data match_block;
  const uschar *start_bits = NULL;
  const uschar *start_match = (const uschar *)subject + start_offset;
  const uschar *end_subject;
  const uschar *req_char_ptr = start_match - 1;
  const real_pcre *re = (const real_pcre *)external_re;
  const real_pcre_extra *extra = (const real_pcre_extra *)external_extra;
  BOOL using_temporary_offsets = FALSE;
  BOOL anchored;
  BOOL startline;
  
  if ((options & ~PUBLIC_EXEC_OPTIONS) != 0) return PCRE_ERROR_BADOPTION;
  
  if (re == NULL || subject == NULL ||
     (offsets == NULL && offsetcount > 0)) return PCRE_ERROR_NULL;
  if (re->magic_number != MAGIC_NUMBER) return PCRE_ERROR_BADMAGIC;
  
  anchored = ((re->options | options) & PCRE_ANCHORED) != 0;
  startline = (re->options & PCRE_STARTLINE) != 0;
  
  match_block.start_pattern = re->code;
  match_block.start_subject = (const uschar *)subject;
  match_block.end_subject = match_block.start_subject + length;
  end_subject = match_block.end_subject;
  
  match_block.endonly = (re->options & PCRE_DOLLAR_ENDONLY) != 0;
  match_block.utf8 = (re->options & PCRE_UTF8) != 0;
  
  match_block.notbol = (options & PCRE_NOTBOL) != 0;
  match_block.noteol = (options & PCRE_NOTEOL) != 0;
  match_block.notempty = (options & PCRE_NOTEMPTY) != 0;
  
  match_block.errorcode = PCRE_ERROR_NOMATCH;     /* Default error */
  
  match_block.lcc = re->tables + lcc_offset;
  match_block.ctypes = re->tables + ctypes_offset;
  
  /* The ims options can vary during the matching as a result of the presence
  of (?ims) items in the pattern. They are kept in a local variable so that
  restoring at the exit of a group is easy. */
  
  ims = re->options & (PCRE_CASELESS|PCRE_MULTILINE|PCRE_DOTALL);
  
  /* If the expression has got more back references than the offsets supplied can
  hold, we get a temporary bit of working store to use during the matching.
  Otherwise, we can use the vector supplied, rounding down its size to a multiple
  of 3. */
  
  ocount = offsetcount - (offsetcount % 3);
  
  if (re->top_backref > 0 && re->top_backref >= ocount/3)
    {
    ocount = re->top_backref * 3 + 3;
    match_block.offset_vector = (int *)(pcre_malloc)(ocount * sizeof(int));
    if (match_block.offset_vector == NULL) return PCRE_ERROR_NOMEMORY;
    using_temporary_offsets = TRUE;
  
    }
  else match_block.offset_vector = offsets;
  
  match_block.offset_end = ocount;
  match_block.offset_max = (2*ocount)/3;
  match_block.offset_overflow = FALSE;
  
  /* Compute the minimum number of offsets that we need to reset each time. Doing
  this makes a huge difference to execution time when there aren't many brackets
  in the pattern. */
  
  resetcount = 2 + re->top_bracket * 2;
  if (resetcount > offsetcount) resetcount = ocount;
  
  /* Reset the working variable associated with each extraction. These should
  never be used unless previously set, but they get saved and restored, and so we
  initialize them to avoid reading uninitialized locations. */
  
  if (match_block.offset_vector != NULL)
    {
    register int *iptr = match_block.offset_vector + ocount;
    register int *iend = iptr - resetcount/2 + 1;
    while (--iptr >= iend) *iptr = -1;
    }
  
  /* Set up the first character to match, if available. The first_char value is
  never set for an anchored regular expression, but the anchoring may be forced
  at run time, so we have to test for anchoring. The first char may be unset for
  an unanchored pattern, of course. If there's no first char and the pattern was
  studied, there may be a bitmap of possible first characters. */
  
  if (!anchored)
    {
    if ((re->options & PCRE_FIRSTSET) != 0)
      {
      first_char = re->first_char;
      if ((ims & PCRE_CASELESS) != 0) first_char = match_block.lcc[first_char];
      }
    else
      if (!startline && extra != NULL &&
        (extra->options & PCRE_STUDY_MAPPED) != 0)
          start_bits = extra->start_bits;
    }
  
  /* For anchored or unanchored matches, there may be a "last known required
  character" set. If the PCRE_CASELESS is set, implying that the match starts
  caselessly, or if there are any changes of this flag within the regex, set up
  both cases of the character. Otherwise set the two values the same, which will
  avoid duplicate testing (which takes significant time). This covers the vast
  majority of cases. It will be suboptimal when the case flag changes in a regex
  and the required character in fact is caseful. */
  
  if ((re->options & PCRE_REQCHSET) != 0)
    {
    req_char = re->req_char;
    req_char2 = ((re->options & (PCRE_CASELESS | PCRE_ICHANGED)) != 0)?
      (re->tables + fcc_offset)[req_char] : req_char;
    }
  
  /* Loop for handling unanchored repeated matching attempts; for anchored regexs
  the loop runs just once. */
  
  do
    {
    int rc;
    register int *iptr = match_block.offset_vector;
    register int *iend = iptr + resetcount;
  
    /* Reset the maximum number of extractions we might see. */
  
    while (iptr < iend) *iptr++ = -1;
  
    /* Advance to a unique first char if possible */
  
    if (first_char >= 0)
      {
      if ((ims & PCRE_CASELESS) != 0)
        while (start_match < end_subject &&
               match_block.lcc[*start_match] != first_char)
          start_match++;
      else
        while (start_match < end_subject && *start_match != first_char)
          start_match++;
      }
  
    /* Or to just after \n for a multiline match if possible */
  
    else if (startline)
      {
      if (start_match > match_block.start_subject + start_offset)
        {
        while (start_match < end_subject && start_match[-1] != '\n')
          start_match++;
        }
      }
  
    /* Or to a non-unique first char after study */
  
    else if (start_bits != NULL)
      {
      while (start_match < end_subject)
        {
        register int c = *start_match;
        if ((start_bits[c/8] & (1 << (c&7))) == 0) start_match++; else break;
        }
      }
  
    /* If req_char is set, we know that that character must appear in the subject
    for the match to succeed. If the first character is set, req_char must be
    later in the subject; otherwise the test starts at the match point. This
    optimization can save a huge amount of backtracking in patterns with nested
    unlimited repeats that aren't going to match. We don't know what the state of
    case matching may be when this character is hit, so test for it in both its
    cases if necessary. However, the different cased versions will not be set up
    unless PCRE_CASELESS was given or the casing state changes within the regex.
    Writing separate code makes it go faster, as does using an autoincrement and
    backing off on a match. */
  
    if (req_char >= 0)
      {
      register const uschar *p = start_match + ((first_char >= 0)? 1 : 0);
  
      /* We don't need to repeat the search if we haven't yet reached the
      place we found it at last time. */
  
      if (p > req_char_ptr)
        {
        /* Do a single test if no case difference is set up */
  
        if (req_char == req_char2)
          {
          while (p < end_subject)
            {
            if (*p++ == req_char) { p--; break; }
            }
          }
  
        /* Otherwise test for either case */
  
        else
          {
          while (p < end_subject)
            {
            register int pp = *p++;
            if (pp == req_char || pp == req_char2) { p--; break; }
            }
          }
  
        /* If we can't find the required character, break the matching loop */
  
        if (p >= end_subject) break;
  
        /* If we have found the required character, save the point where we
        found it, so that we don't search again next time round the loop if
        the start hasn't passed this character yet. */
  
        req_char_ptr = p;
        }
      }
  
    /* When a match occurs, substrings will be set for all internal extractions;
    we just need to set up the whole thing as substring 0 before returning. If
    there were too many extractions, set the return code to zero. In the case
    where we had to get some local store to hold offsets for backreferences, copy
    those back references that we can. In this case there need not be overflow
    if certain parts of the pattern were not used. */
  
    match_block.start_match = start_match;
    if (!match(start_match, re->code, 2, &match_block, ims, NULL, match_isgroup))
      continue;
  
    /* Copy the offset information from temporary store if necessary */
  
    if (using_temporary_offsets)
      {
      if (offsetcount >= 4)
        {
        memcpy(offsets + 2, match_block.offset_vector + 2,
          (offsetcount - 2) * sizeof(int));
  
        }
      if (match_block.end_offset_top > offsetcount)
        match_block.offset_overflow = TRUE;
  
      (pcre_free)(match_block.offset_vector);
      }
  
    rc = match_block.offset_overflow? 0 : match_block.end_offset_top/2;
  
    if (match_block.offset_end < 2) rc = 0; else
      {
      offsets[0] = start_match - match_block.start_subject;
      offsets[1] = match_block.end_match_ptr - match_block.start_subject;
      }
  
    return rc;
    }
  
  /* This "while" is the end of the "do" above */
  
  while (!anchored &&
         match_block.errorcode == PCRE_ERROR_NOMATCH &&
         start_match++ < end_subject);
  
  if (using_temporary_offsets)
    {
  
    (pcre_free)(match_block.offset_vector);
    }
  
  return match_block.errorcode;
  }
  
  /* ____ END pcre.c ____ */
  
  /* ____ BEGIN study.c ____ */
  
  /* Include the internals header, which itself includes Standard C headers plus
  the external pcre header. */
  
  /*************************************************
  *      Set a bit and maybe its alternate case    *
  *************************************************/
  
  /* Given a character, set its bit in the table, and also the bit for the other
  version of a letter if we are caseless.
  
  Arguments:
    start_bits    points to the bit map
    c             is the character
    caseless      the caseless flag
    cd            the block with char table pointers
  
  Returns:        nothing
  */
  
  static void
  set_bit(uschar *start_bits, int c, BOOL caseless, compile_data *cd)
  {
  start_bits[c/8] |= (1 << (c&7));
  if (caseless && (cd->ctypes[c] & ctype_letter) != 0)
    start_bits[cd->fcc[c]/8] |= (1 << (cd->fcc[c]&7));
  }
  
  /*************************************************
  *          Create bitmap of starting chars       *
  *************************************************/
  
  /* This function scans a compiled unanchored expression and attempts to build a
  bitmap of the set of initial characters. If it can't, it returns FALSE. As time
  goes by, we may be able to get more clever at doing this.
  
  Arguments:
    code         points to an expression
    start_bits   points to a 32-byte table, initialized to 0
    caseless     the current state of the caseless flag
    cd           the block with char table pointers
  
  Returns:       TRUE if table built, FALSE otherwise
  */
  
  static BOOL
  set_start_bits(const uschar *code, uschar *start_bits, BOOL caseless,
    compile_data *cd)
  {
  register int c;
  
  /* This next statement and the later reference to dummy are here in order to
  trick the optimizer of the IBM C compiler for OS/2 into generating correct
  code. Apparently IBM isn't going to fix the problem, and we would rather not
  disable optimization (in this module it actually makes a big difference, and
  the pcre module can use all the optimization it can get). */
  
  volatile int dummy;
  
  do
    {
    const uschar *tcode = code + 3;
    BOOL try_next = TRUE;
  
    while (try_next)
      {
      /* If a branch starts with a bracket or a positive lookahead assertion,
      recurse to set bits from within them. That's all for this branch. */
  
      if ((int)*tcode >= OP_BRA || *tcode == OP_ASSERT)
        {
        if (!set_start_bits(tcode, start_bits, caseless, cd))
          return FALSE;
        try_next = FALSE;
        }
  
      else switch(*tcode)
        {
        default:
        return FALSE;
  
        /* Skip over extended extraction bracket number */
  
        case OP_BRANUMBER:
        tcode += 3;
        break;
  
        /* Skip over lookbehind and negative lookahead assertions */
  
        case OP_ASSERT_NOT:
        case OP_ASSERTBACK:
        case OP_ASSERTBACK_NOT:
        do tcode += (tcode[1] << 8) + tcode[2]; while (*tcode == OP_ALT);
        tcode += 3;
        break;
  
        /* Skip over an option setting, changing the caseless flag */
  
        case OP_OPT:
        caseless = (tcode[1] & PCRE_CASELESS) != 0;
        tcode += 2;
        break;
  
        /* BRAZERO does the bracket, but carries on. */
  
        case OP_BRAZERO:
        case OP_BRAMINZERO:
        if (!set_start_bits(++tcode, start_bits, caseless, cd))
          return FALSE;
        dummy = 1;
        do tcode += (tcode[1] << 8) + tcode[2]; while (*tcode == OP_ALT);
        tcode += 3;
        break;
  
        /* Single-char * or ? sets the bit and tries the next item */
  
        case OP_STAR:
        case OP_MINSTAR:
        case OP_QUERY:
        case OP_MINQUERY:
        set_bit(start_bits, tcode[1], caseless, cd);
        tcode += 2;
        break;
  
        /* Single-char upto sets the bit and tries the next */
  
        case OP_UPTO:
        case OP_MINUPTO:
        set_bit(start_bits, tcode[3], caseless, cd);
        tcode += 4;
        break;
  
        /* At least one single char sets the bit and stops */
  
        case OP_EXACT:       /* Fall through */
        tcode++;
  
        case OP_CHARS:       /* Fall through */
        tcode++;
  
        case OP_PLUS:
        case OP_MINPLUS:
        set_bit(start_bits, tcode[1], caseless, cd);
        try_next = FALSE;
        break;
  
        /* Single character type sets the bits and stops */
  
        case OP_NOT_DIGIT:
        for (c = 0; c < 32; c++)
          start_bits[c] |= ~cd->cbits[c+cbit_digit];
        try_next = FALSE;
        break;
  
        case OP_DIGIT:
        for (c = 0; c < 32; c++)
          start_bits[c] |= cd->cbits[c+cbit_digit];
        try_next = FALSE;
        break;
  
        case OP_NOT_WHITESPACE:
        for (c = 0; c < 32; c++)
          start_bits[c] |= ~cd->cbits[c+cbit_space];
        try_next = FALSE;
        break;
  
        case OP_WHITESPACE:
        for (c = 0; c < 32; c++)
          start_bits[c] |= cd->cbits[c+cbit_space];
        try_next = FALSE;
        break;
  
        case OP_NOT_WORDCHAR:
        for (c = 0; c < 32; c++)
          start_bits[c] |= ~cd->cbits[c+cbit_word];
        try_next = FALSE;
        break;
  
        case OP_WORDCHAR:
        for (c = 0; c < 32; c++)
          start_bits[c] |= cd->cbits[c+cbit_word];
        try_next = FALSE;
        break;
  
        /* One or more character type fudges the pointer and restarts, knowing
        it will hit a single character type and stop there. */
  
        case OP_TYPEPLUS:
        case OP_TYPEMINPLUS:
        tcode++;
        break;
  
        case OP_TYPEEXACT:
        tcode += 3;
        break;
  
        /* Zero or more repeats of character types set the bits and then
        try again. */
  
        case OP_TYPEUPTO:
        case OP_TYPEMINUPTO:
        tcode += 2;               /* Fall through */
  
        case OP_TYPESTAR:
        case OP_TYPEMINSTAR:
        case OP_TYPEQUERY:
        case OP_TYPEMINQUERY:
        switch(tcode[1])
          {
          case OP_NOT_DIGIT:
          for (c = 0; c < 32; c++)
            start_bits[c] |= ~cd->cbits[c+cbit_digit];
          break;
  
          case OP_DIGIT:
          for (c = 0; c < 32; c++)
            start_bits[c] |= cd->cbits[c+cbit_digit];
          break;
  
          case OP_NOT_WHITESPACE:
          for (c = 0; c < 32; c++)
            start_bits[c] |= ~cd->cbits[c+cbit_space];
          break;
  
          case OP_WHITESPACE:
          for (c = 0; c < 32; c++)
            start_bits[c] |= cd->cbits[c+cbit_space];
          break;
  
          case OP_NOT_WORDCHAR:
          for (c = 0; c < 32; c++)
            start_bits[c] |= ~cd->cbits[c+cbit_word];
          break;
  
          case OP_WORDCHAR:
          for (c = 0; c < 32; c++)
            start_bits[c] |= cd->cbits[c+cbit_word];
          break;
          }
  
        tcode += 2;
        break;
  
        /* Character class: set the bits and either carry on or not,
        according to the repeat count. */
  
        case OP_CLASS:
          {
          tcode++;
          for (c = 0; c < 32; c++) start_bits[c] |= tcode[c];
          tcode += 32;
          switch (*tcode)
            {
            case OP_CRSTAR:
            case OP_CRMINSTAR:
            case OP_CRQUERY:
            case OP_CRMINQUERY:
            tcode++;
            break;
  
            case OP_CRRANGE:
            case OP_CRMINRANGE:
            if (((tcode[1] << 8) + tcode[2]) == 0) tcode += 5;
              else try_next = FALSE;
            break;
  
            default:
            try_next = FALSE;
            break;
            }
          }
        break;
  
        }
      }
  
    code += (code[1] << 8) + code[2];   /* Advance to next branch */
    }
  while (*code == OP_ALT);
  return TRUE;
  }
  
  /*************************************************
  *          Study a compiled expression           *
  *************************************************/
  
  /* This function is handed a compiled expression that it must study to produce
  information that will speed up the matching. It returns a pcre_extra block
  which then gets handed back to pcre_exec().
  
  Arguments:
    re        points to the compiled expression
    options   contains option bits
    errorptr  points to where to place error messages;
              set NULL unless error
  
  Returns:    pointer to a pcre_extra block,
              NULL on error or if no optimization possible
  */
  
  pcre_extra *
  pcre_study(const pcre *external_re, int options, const char **errorptr)
  {
  uschar start_bits[32];
  real_pcre_extra *extra;
  const real_pcre *re = (const real_pcre *)external_re;
  compile_data compile_block;
  
  *errorptr = NULL;
  
  if (re == NULL || re->magic_number != MAGIC_NUMBER)
    {
    *errorptr = "argument is not a compiled regular expression";
    return NULL;
    }
  
  if ((options & ~PUBLIC_STUDY_OPTIONS) != 0)
    {
    *errorptr = "unknown or incorrect option bit(s) set";
    return NULL;
    }
  
  /* For an anchored pattern, or an unchored pattern that has a first char, or a
  multiline pattern that matches only at "line starts", no further processing at
  present. */
  
  if ((re->options & (PCRE_ANCHORED|PCRE_FIRSTSET|PCRE_STARTLINE)) != 0)
    return NULL;
  
  /* Set the character tables in the block which is passed around */
  
  compile_block.lcc = re->tables + lcc_offset;
  compile_block.fcc = re->tables + fcc_offset;
  compile_block.cbits = re->tables + cbits_offset;
  compile_block.ctypes = re->tables + ctypes_offset;
  
  /* See if we can find a fixed set of initial characters for the pattern. */
  
  memset(start_bits, 0, 32 * sizeof(uschar));
  if (!set_start_bits(re->code, start_bits, (re->options & PCRE_CASELESS) != 0,
    &compile_block)) return NULL;
  
  /* Get an "extra" block and put the information therein. */
  
  extra = (real_pcre_extra *)(pcre_malloc)(sizeof(real_pcre_extra));
  
  if (extra == NULL)
    {
    *errorptr = "failed to get memory";
    return NULL;
    }
  
  extra->options = PCRE_STUDY_MAPPED;
  memcpy(extra->start_bits, start_bits, sizeof(start_bits));
  
  return (pcre_extra *)extra;
  }
  
  /* ____ END study.c ____ */
  
  /* ____ BEGIN get.c ____ */
  
  /* This module contains some convenience functions for extracting substrings
  from the subject string after a regex match has succeeded. The original idea
  for these functions came from Scott Wimer <scottw@cgibuilder.com>. */
  
  /* Include the internals header, which itself includes Standard C headers plus
  the external pcre header. */
  
  /*************************************************
  *      Copy captured string to given buffer      *
  *************************************************/
  
  /* This function copies a single captured substring into a given buffer.
  Note that we use memcpy() rather than strncpy() in case there are binary zeros
  in the string.
  
  Arguments:
    subject        the subject string that was matched
    ovector        pointer to the offsets table
    stringcount    the number of substrings that were captured
                     (i.e. the yield of the pcre_exec call, unless
                     that was zero, in which case it should be 1/3
                     of the offset table size)
    stringnumber   the number of the required substring
    buffer         where to put the substring
    size           the size of the buffer
  
  Returns:         if successful:
                     the length of the copied string, not including the zero
                     that is put on the end; can be zero
                   if not successful:
                     PCRE_ERROR_NOMEMORY (-6) buffer too small
                     PCRE_ERROR_NOSUBSTRING (-7) no such captured substring
  */
  
  int
  pcre_copy_substring(const char *subject, int *ovector, int stringcount,
    int stringnumber, char *buffer, int size)
  {
  int yield;
  if (stringnumber < 0 || stringnumber >= stringcount)
    return PCRE_ERROR_NOSUBSTRING;
  stringnumber *= 2;
  yield = ovector[stringnumber+1] - ovector[stringnumber];
  if (size < yield + 1) return PCRE_ERROR_NOMEMORY;
  memcpy(buffer, subject + ovector[stringnumber], yield);
  buffer[yield] = 0;
  return yield;
  }
  
  /*************************************************
  *      Copy all captured strings to new store    *
  *************************************************/
  
  /* This function gets one chunk of store and builds a list of pointers and all
  of the captured substrings in it. A NULL pointer is put on the end of the list.
  
  Arguments:
    subject        the subject string that was matched
    ovector        pointer to the offsets table
    stringcount    the number of substrings that were captured
                     (i.e. the yield of the pcre_exec call, unless
                     that was zero, in which case it should be 1/3
                     of the offset table size)
    listptr        set to point to the list of pointers
  
  Returns:         if successful: 0
                   if not successful:
                     PCRE_ERROR_NOMEMORY (-6) failed to get store
  */
  
  int
  pcre_get_substring_list(const char *subject, int *ovector, int stringcount,
    const char ***listptr)
  {
  int i;
  int size = sizeof(char *);
  int double_count = stringcount * 2;
  char **stringlist;
  char *p;
  
  for (i = 0; i < double_count; i += 2)
    size += sizeof(char *) + ovector[i+1] - ovector[i] + 1;
  
  stringlist = (char **)(pcre_malloc)(size);
  if (stringlist == NULL) return PCRE_ERROR_NOMEMORY;
  
  *listptr = (const char **)stringlist;
  p = (char *)(stringlist + stringcount + 1);
  
  for (i = 0; i < double_count; i += 2)
    {
    int len = ovector[i+1] - ovector[i];
    memcpy(p, subject + ovector[i], len);
    *stringlist++ = p;
    p += len;
    *p++ = 0;
    }
  
  *stringlist = NULL;
  return 0;
  }
  
  /*************************************************
  *   Free store obtained by get_substring_list    *
  *************************************************/
  
  /* This function exists for the benefit of people calling PCRE from non-C
  programs that can call its functions, but not free() or (pcre_free)() directly.
  
  Argument:   the result of a previous pcre_get_substring_list()
  Returns:    nothing
  */
  
  void
  pcre_free_substring_list(const char **pointer)
  {
  (pcre_free)((void *)pointer);
  }
  
  /*************************************************
  *      Copy captured string to new store         *
  *************************************************/
  
  /* This function copies a single captured substring into a piece of new
  store
  
  Arguments:
    subject        the subject string that was matched
    ovector        pointer to the offsets table
    stringcount    the number of substrings that were captured
                     (i.e. the yield of the pcre_exec call, unless
                     that was zero, in which case it should be 1/3
                     of the offset table size)
    stringnumber   the number of the required substring
    stringptr      where to put a pointer to the substring
  
  Returns:         if successful:
                     the length of the string, not including the zero that
                     is put on the end; can be zero
                   if not successful:
                     PCRE_ERROR_NOMEMORY (-6) failed to get store
                     PCRE_ERROR_NOSUBSTRING (-7) substring not present
  */
  
  int
  pcre_get_substring(const char *subject, int *ovector, int stringcount,
    int stringnumber, const char **stringptr)
  {
  int yield;
  char *substring;
  if (stringnumber < 0 || stringnumber >= stringcount)
    return PCRE_ERROR_NOSUBSTRING;
  stringnumber *= 2;
  yield = ovector[stringnumber+1] - ovector[stringnumber];
  substring = (char *)(pcre_malloc)(yield + 1);
  if (substring == NULL) return PCRE_ERROR_NOMEMORY;
  memcpy(substring, subject + ovector[stringnumber], yield);
  substring[yield] = 0;
  *stringptr = substring;
  return yield;
  }
  
  /*************************************************
  *       Free store obtained by get_substring     *
  *************************************************/
  
  /* This function exists for the benefit of people calling PCRE from non-C
  programs that can call its functions, but not free() or (pcre_free)() directly.
  
  Argument:   the result of a previous pcre_get_substring()
  Returns:    nothing
  */
  
  void
  pcre_free_substring(const char *pointer)
  {
  (pcre_free)((void *)pointer);
  }
  
  /* ____ END get.c ____ */
  
  #endif /* !L2_UT_PCRE_GENTAB */
  
  /* ____ BEGIN maketables.c ____ */
  
  /* This file is compiled on its own as part of the PCRE library. However,
  it is also included in the compilation of dftables.c, in which case the macro
  DFTABLES is defined. */
  
  /*************************************************
  *           Create PCRE character tables         *
  *************************************************/
  
  /* This function builds a set of character tables for use by PCRE and returns
  a pointer to them. They are build using the ctype functions, and consequently
  their contents will depend upon the current locale setting. When compiled as
  part of the library, the store is obtained via pcre_malloc(), but when compiled
  inside dftables, use malloc().
  
  Arguments:   none
  Returns:     pointer to the contiguous block of data
  */
  
  const unsigned char *
  pcre_maketables(void)
  {
  unsigned char *yield, *p;
  int i;
  
  #ifndef L2_UT_PCRE_GENTAB
  yield = (unsigned char*)(pcre_malloc)(tables_length);
  #else
  yield = (unsigned char*)malloc(tables_length);
  #endif
  
  if (yield == NULL) return NULL;
  p = yield;
  
  /* First comes the lower casing table */
  
  for (i = 0; i < 256; i++) *p++ = tolower(i);
  
  /* Next the case-flipping table */
  
  for (i = 0; i < 256; i++) *p++ = islower(i)? toupper(i) : tolower(i);
  
  /* Then the character class tables. Don't try to be clever and save effort
  on exclusive ones - in some locales things may be different. */
  
  memset(p, 0, cbit_length);
  for (i = 0; i < 256; i++)
    {
    if (isdigit(i))
      {
      p[cbit_digit  + i/8] |= 1 << (i&7);
      p[cbit_word   + i/8] |= 1 << (i&7);
      }
    if (isupper(i))
      {
      p[cbit_upper  + i/8] |= 1 << (i&7);
      p[cbit_word   + i/8] |= 1 << (i&7);
      }
    if (islower(i))
      {
      p[cbit_lower  + i/8] |= 1 << (i&7);
      p[cbit_word   + i/8] |= 1 << (i&7);
      }
    if (i == '_')   p[cbit_word   + i/8] |= 1 << (i&7);
    if (isspace(i)) p[cbit_space  + i/8] |= 1 << (i&7);
    if (isxdigit(i))p[cbit_xdigit + i/8] |= 1 << (i&7);
    if (isgraph(i)) p[cbit_graph  + i/8] |= 1 << (i&7);
    if (isprint(i)) p[cbit_print  + i/8] |= 1 << (i&7);
    if (ispunct(i)) p[cbit_punct  + i/8] |= 1 << (i&7);
    if (iscntrl(i)) p[cbit_cntrl  + i/8] |= 1 << (i&7);
    }
  p += cbit_length;
  
  /* Finally, the character type table */
  
  for (i = 0; i < 256; i++)
    {
    int x = 0;
    if (isspace(i)) x += ctype_space;
    if (isalpha(i)) x += ctype_letter;
    if (isdigit(i)) x += ctype_digit;
    if (isxdigit(i)) x += ctype_xdigit;
    if (isalnum(i) || i == '_') x += ctype_word;
    if (strchr("*+?{^.$|()[", i) != 0) x += ctype_meta;
    *p++ = x;
    }
  
  return yield;
  }
  
  /* ____ END maketables.c ____ */
  
  #ifdef L2_UT_PCRE_GENTAB
  
  /* ____ BEGIN dftables.c ____ */
  
  /* This is a support program to generate the file chartables.c, containing
  character tables of various kinds. They are built according to the default C
  locale and used as the default tables by PCRE. Now that pcre_maketables is
  a function visible to the outside world, we make use of its code from here in
  order to be consistent. */
  
  #include <ctype.h>
  #include <stdio.h>
  #include <string.h>
  
  int main(void)
  {
  int i;
  const unsigned char *tables = pcre_maketables();
  
  printf(
    "/*************************************************\n"
    "*      Perl-Compatible Regular Expressions       *\n"
    "*************************************************/\n\n"
    "static unsigned char pcre_default_tables[] = {\n\n"
    "/* This table is a lower casing table. */\n\n");
  
  printf("  ");
  for (i = 0; i < 256; i++)
    {
    if ((i & 7) == 0 && i != 0) printf("\n  ");
    printf("%3d", *tables++);
    if (i != 255) printf(",");
    }
  printf(",\n\n");
  
  printf("/* This table is a case flipping table. */\n\n");
  
  printf("  ");
  for (i = 0; i < 256; i++)
    {
    if ((i & 7) == 0 && i != 0) printf("\n  ");
    printf("%3d", *tables++);
    if (i != 255) printf(",");
    }
  printf(",\n\n");
  
  printf(
    "/* This table contains bit maps for various character classes.\n"
    "Each map is 32 bytes long and the bits run from the least\n"
    "significant end of each byte. The classes that have their own\n"
    "maps are: space, xdigit, digit, upper, lower, word, graph\n"
    "print, punct, and cntrl. Other classes are built from combinations. */\n\n");
  
  printf("  ");
  for (i = 0; i < cbit_length; i++)
    {
    if ((i & 7) == 0 && i != 0)
      {
      if ((i & 31) == 0) printf("\n");
      printf("\n  ");
      }
    printf("0x%02x", *tables++);
    if (i != cbit_length - 1) printf(",");
    }
  printf(",\n\n");
  
  printf(
    "/* This table identifies various classes of character by individual bits:\n"
    "  0x%02x   white space character\n"
    "  0x%02x   letter\n"
    "  0x%02x   decimal digit\n"
    "  0x%02x   hexadecimal digit\n"
    "  0x%02x   alphanumeric or '_'\n"
    "  0x%02x   regular expression metacharacter or binary zero\n*/\n\n",
    ctype_space, ctype_letter, ctype_digit, ctype_xdigit, ctype_word,
    ctype_meta);
  
  printf("  ");
  for (i = 0; i < 256; i++)
    {
    if ((i & 7) == 0 && i != 0)
      {
      printf(" /* ");
      if (isprint(i-8)) printf(" %c -", i-8);
        else printf("%3d-", i-8);
      if (isprint(i-1)) printf(" %c ", i-1);
        else printf("%3d", i-1);
      printf(" */\n  ");
      }
    printf("0x%02x", *tables++);
    if (i != 255) printf(",");
    }
  
  printf("};/* ");
  if (isprint(i-8)) printf(" %c -", i-8);
    else printf("%3d-", i-8);
  if (isprint(i-1)) printf(" %c ", i-1);
    else printf("%3d", i-1);
  printf(" */\n\n\n");
  
  return 0;
  }
  
  /* ____ END dftables.c ____ */
  
  #endif /* L2_UT_PCRE_GENTAB */
  
  Index: ossp-pkg/l2/l2_ut_pcre.h
  ============================================================
  $ cvs update -p -r1.1 l2_ut_pcre.h
  /*************************************************
  *      Perl-Compatible Regular Expressions       *
  *************************************************/
  
  /*
  This is a library of functions to support regular expressions whose syntax
  and semantics are as close as possible to those of the Perl 5 language. See
  the file Tech.Notes for some information on the internals.
  
  Written by: Philip Hazel <ph10@cam.ac.uk>
  
             Copyright (c) 1997-2001 University of Cambridge
  
  -----------------------------------------------------------------------------
  Permission is granted to anyone to use this software for any purpose on any
  computer system, and to redistribute it freely, subject to the following
  restrictions:
  
  1. This software is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  
  2. The origin of this software must not be misrepresented, either by
     explicit claim or by omission.
  
  3. Altered versions must be plainly marked as such, and must not be
     misrepresented as being the original software.
  
  4. If PCRE is embedded in any software that is released under the GNU
     General Purpose Licence (GPL), then the terms of that licence shall
     supersede any condition above with which it is incompatible.
  -----------------------------------------------------------------------------
  */
  
  #ifndef __L2_UT_PCRE_H__
  #define __L2_UT_PCRE_H__
  
  /* The file pcre.h is build by "configure". Do not edit it; instead
  make changes to pcre.in. */
  
  #define PCRE_MAJOR          3
  #define PCRE_MINOR          5
  #define PCRE_DATE           15-Aug-2001
  
  /* Have to include stdlib.h in order to ensure that size_t is defined;
  it is needed here for malloc. */
  
  #include <stdlib.h>
  
  /* Allow for C++ users */
  
  #ifdef __cplusplus
  extern "C" {
  #endif
  
  /* Options */
  
  #define PCRE_CASELESS        0x0001
  #define PCRE_MULTILINE       0x0002
  #define PCRE_DOTALL          0x0004
  #define PCRE_EXTENDED        0x0008
  #define PCRE_ANCHORED        0x0010
  #define PCRE_DOLLAR_ENDONLY  0x0020
  #define PCRE_EXTRA           0x0040
  #define PCRE_NOTBOL          0x0080
  #define PCRE_NOTEOL          0x0100
  #define PCRE_UNGREEDY        0x0200
  #define PCRE_NOTEMPTY        0x0400
  #define PCRE_UTF8            0x0800
  
  /* Exec-time and get-time error codes */
  
  #define PCRE_ERROR_NOMATCH        (-1)
  #define PCRE_ERROR_NULL           (-2)
  #define PCRE_ERROR_BADOPTION      (-3)
  #define PCRE_ERROR_BADMAGIC       (-4)
  #define PCRE_ERROR_UNKNOWN_NODE   (-5)
  #define PCRE_ERROR_NOMEMORY       (-6)
  #define PCRE_ERROR_NOSUBSTRING    (-7)
  
  /* Request types for pcre_fullinfo() */
  
  #define PCRE_INFO_OPTIONS         0
  #define PCRE_INFO_SIZE            1
  #define PCRE_INFO_CAPTURECOUNT    2
  #define PCRE_INFO_BACKREFMAX      3
  #define PCRE_INFO_FIRSTCHAR       4
  #define PCRE_INFO_FIRSTTABLE      5
  #define PCRE_INFO_LASTLITERAL     6
  
  /* Types */
  
  struct real_pcre;        /* declaration; the definition is private  */
  struct real_pcre_extra;  /* declaration; the definition is private */
  
  typedef struct real_pcre pcre;
  typedef struct real_pcre_extra pcre_extra;
  
  /* Store get and free functions. These can be set to alternative malloc/free
  functions if required. Some magic is required for Win32 DLL; it is null on
  other OS. */
  
  extern void *(*pcre_malloc)(size_t);
  extern void  (*pcre_free)(void *);
  
  /* Functions */
  
  extern pcre *pcre_compile(const char *, int, const char **, int *,
                const unsigned char *);
  extern int  pcre_copy_substring(const char *, int *, int, int, char *, int);
  extern int  pcre_exec(const pcre *, const pcre_extra *, const char *,
                int, int, int, int *, int);
  extern void pcre_free_substring(const char *);
  extern void pcre_free_substring_list(const char **);
  extern int  pcre_get_substring(const char *, int *, int, int, const char **);
  extern int  pcre_get_substring_list(const char *, int *, int, const char ***);
  extern int  pcre_info(const pcre *, int *, int *);
  extern int  pcre_fullinfo(const pcre *, const pcre_extra *, int, void *);
  extern const unsigned char *pcre_maketables(void);
  extern pcre_extra *pcre_study(const pcre *, int, const char **);
  extern const char *pcre_version(void);
  
  #ifdef __cplusplus
  }  /* extern "C" */
  #endif
  
  #endif /* __L2_UT_PCRE_H__ */

From ossp-cvs-owner@ossp.org  Tue Sep  4 17:59:25 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f84FxP607025; Tue, 4 Sep 2001 17:59:25 +0200 (CEST)
Date: Tue, 4 Sep 2001 17:59:25 +0200 (CEST)
Message-Id: <200109041559.f84FxP607025@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 .cvsignore
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   04-Sep-2001 17:59:25
  Branch: HEAD                             Handle: 2001090416592400

  Modified files:
    ossp-pkg/l2             .cvsignore

  Log:
    Ignore l2_config.h.in during cvs new file checks.

  Summary:
    Revision    Changes     Path
    1.6         +1  -0      ossp-pkg/l2/.cvsignore
  ____________________________________________________________________________

  Index: ossp-pkg/l2/.cvsignore
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 .cvsignore
  --- ossp-pkg/l2/.cvsignore	2001/09/04 14:52:28	1.5
  +++ ossp-pkg/l2/.cvsignore	2001/09/04 15:59:24	1.6
  @@ -14,6 +14,7 @@
   libtool.m4
   configure
   shtool
  +l2_config.h.in
   l2-config.1
   l2.3
   l2_ut_pcre_gen

From ossp-cvs-owner@ossp.org  Tue Sep  4 18:00:35 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f84G0Yi07517; Tue, 4 Sep 2001 18:00:34 +0200 (CEST)
Date: Tue, 4 Sep 2001 18:00:34 +0200 (CEST)
Message-Id: <200109041600.f84G0Yi07517@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 .cvsignore
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   04-Sep-2001 18:00:34
  Branch: HEAD                             Handle: 2001090417003300

  Modified files:
    ossp-pkg/l2             .cvsignore

  Log:
    Whoops, Ralf already fixed this. Back out my last change.

  Summary:
    Revision    Changes     Path
    1.7         +0  -1      ossp-pkg/l2/.cvsignore
  ____________________________________________________________________________

  Index: ossp-pkg/l2/.cvsignore
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 .cvsignore
  --- ossp-pkg/l2/.cvsignore	2001/09/04 15:59:24	1.6
  +++ ossp-pkg/l2/.cvsignore	2001/09/04 16:00:33	1.7
  @@ -14,7 +14,6 @@
   libtool.m4
   configure
   shtool
  -l2_config.h.in
   l2-config.1
   l2.3
   l2_ut_pcre_gen

From ossp-cvs-owner@ossp.org  Tue Sep  4 21:18:51 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f84JIo829812; Tue, 4 Sep 2001 21:18:50 +0200 (CEST)
Date: Tue, 4 Sep 2001 21:18:50 +0200 (CEST)
Message-Id: <200109041918.f84JIo829812@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.h l2_ch_buffer.c l2_ch_fd.c l2_ch_file.c l2...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-Sep-2001 21:18:50
  Branch: HEAD                             Handle: 2001090420184900

  Modified files:
    ossp-pkg/l2             l2.h l2_ch_buffer.c l2_ch_fd.c l2_ch_file.c
                            l2_ch_filter.c l2_ch_null.c l2_ch_pipe.c
                            l2_ch_prefix.c l2_ch_socket.c l2_ch_syslog.c

  Log:
    Be pedantically correct: handler hooks return "l2_result_t"
    and not "int", although currently it is just an int/enum.

  Summary:
    Revision    Changes     Path
    1.16        +7  -7      ossp-pkg/l2/l2.h
    1.13        +7  -7      ossp-pkg/l2/l2_ch_buffer.c
    1.6         +7  -7      ossp-pkg/l2/l2_ch_fd.c
    1.12        +7  -7      ossp-pkg/l2/l2_ch_file.c
    1.6         +7  -7      ossp-pkg/l2/l2_ch_filter.c
    1.6         +7  -7      ossp-pkg/l2/l2_ch_null.c
    1.6         +7  -7      ossp-pkg/l2/l2_ch_pipe.c
    1.6         +7  -7      ossp-pkg/l2/l2_ch_prefix.c
    1.10        +7  -7      ossp-pkg/l2/l2_ch_socket.c
    1.12        +7  -7      ossp-pkg/l2/l2_ch_syslog.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2.h
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 l2.h
  --- ossp-pkg/l2/l2.h	2001/09/04 15:41:17	1.15
  +++ ossp-pkg/l2/l2.h	2001/09/04 19:18:49	1.16
  @@ -129,13 +129,13 @@
   /* channel handler specification structure */
   struct l2_handler_st {
       l2_chtype_t type;
  -    int (*create)   (l2_context_t *ctx, l2_channel_t *ch);
  -    int (*configure)(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap);
  -    int (*open)     (l2_context_t *ctx, l2_channel_t *ch);
  -    int (*write)    (l2_context_t *ctx, l2_channel_t *ch, const char *buf, size_t bufsize);
  -    int (*flush)    (l2_context_t *ctx, l2_channel_t *ch);
  -    int (*close)    (l2_context_t *ctx, l2_channel_t *ch);
  -    int (*destroy)  (l2_context_t *ctx, l2_channel_t *ch);
  +    l2_result_t (*create)   (l2_context_t *ctx, l2_channel_t *ch);
  +    l2_result_t (*configure)(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap);
  +    l2_result_t (*open)     (l2_context_t *ctx, l2_channel_t *ch);
  +    l2_result_t (*write)    (l2_context_t *ctx, l2_channel_t *ch, const char *buf, size_t bufsize);
  +    l2_result_t (*flush)    (l2_context_t *ctx, l2_channel_t *ch);
  +    l2_result_t (*close)    (l2_context_t *ctx, l2_channel_t *ch);
  +    l2_result_t (*destroy)  (l2_context_t *ctx, l2_channel_t *ch);
   };
   
   /* type of formatter callback function */
  Index: ossp-pkg/l2/l2_ch_buffer.c
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 l2_ch_buffer.c
  --- ossp-pkg/l2/l2_ch_buffer.c	2001/09/04 15:41:17	1.12
  +++ ossp-pkg/l2/l2_ch_buffer.c	2001/09/04 19:18:49	1.13
  @@ -40,7 +40,7 @@
   } l2_ch_buffer_t;
   
   /* create channel */
  -static int hook_create(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_create(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_buffer_t *cfg;
   
  @@ -60,7 +60,7 @@
   }
   
   /* configure channel */
  -static int hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
  +static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
       l2_ch_buffer_t *cfg;
       l2_param_t pa[2];
  @@ -80,7 +80,7 @@
   }
   
   /* open channel */
  -static int hook_open(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_open(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_buffer_t *cfg;
       l2_channel_t *downstream;
  @@ -105,7 +105,7 @@
   }
   
   /* write to channel */
  -static int hook_write(l2_context_t *ctx, l2_channel_t *ch, 
  +static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch, 
                         const char *buf, size_t bufsize)
   {
       l2_ch_buffer_t *cfg;
  @@ -124,7 +124,7 @@
   }
   
   /* flush channel */
  -static int hook_flush(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_flush(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_buffer_t *cfg;
       l2_channel_t *downstream;
  @@ -150,7 +150,7 @@
   }
   
   /* close channel */
  -static int hook_close(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_close(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_buffer_t *cfg;
       l2_channel_t *downstream;
  @@ -182,7 +182,7 @@
   }
   
   /* destroy channel */
  -static int hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_buffer_t *cfg;
   
  Index: ossp-pkg/l2/l2_ch_fd.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 l2_ch_fd.c
  --- ossp-pkg/l2/l2_ch_fd.c	2001/09/04 15:41:17	1.5
  +++ ossp-pkg/l2/l2_ch_fd.c	2001/09/04 19:18:49	1.6
  @@ -30,38 +30,38 @@
   #include "l2.h"
   #include "l2_p.h"
   
  -static int hook_create(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_create(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
  -static int hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
  +static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
       return L2_OK;
   }
   
  -static int hook_open(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_open(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
  -static int hook_write(l2_context_t *ctx, l2_channel_t *ch, 
  +static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch, 
                         const char *buf, size_t buf_size)
   {
       return L2_OK;
   }
   
  -static int hook_flush(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_flush(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
  -static int hook_close(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_close(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
  -static int hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
  Index: ossp-pkg/l2/l2_ch_file.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 l2_ch_file.c
  --- ossp-pkg/l2/l2_ch_file.c	2001/09/04 15:44:48	1.11
  +++ ossp-pkg/l2/l2_ch_file.c	2001/09/04 19:18:49	1.12
  @@ -43,7 +43,7 @@
   } l2_ch_file_t;
   
   /* create channel */
  -static int hook_create(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_create(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_file_t *cfg;
   
  @@ -64,7 +64,7 @@
   }
   
   /* configure channel */
  -static int hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
  +static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
       l2_ch_file_t *cfg;
       l2_param_t pa[4]; 
  @@ -85,7 +85,7 @@
   }
   
   /* open channel */
  -static int hook_open(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_open(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_file_t *cfg;
       int mode;
  @@ -107,7 +107,7 @@
   }
   
   /* write to channel */
  -static int hook_write(l2_context_t *ctx, l2_channel_t *ch, 
  +static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch, 
                         const char *buf, size_t buf_size)
   {
       l2_ch_file_t *cfg;
  @@ -126,7 +126,7 @@
   }
   
   /* flush channel */
  -static int hook_flush(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_flush(l2_context_t *ctx, l2_channel_t *ch)
   {
       /* NOP for this channel, because Unix I/O files are unbuffered! */
   
  @@ -134,7 +134,7 @@
   }
   
   /* close channel */
  -static int hook_close(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_close(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_file_t *cfg;
   
  @@ -152,7 +152,7 @@
   }
   
   /* destroy channel */
  -static int hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
   {
       /* parameter checks */
       if (ctx->vp == NULL) 
  Index: ossp-pkg/l2/l2_ch_filter.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 l2_ch_filter.c
  --- ossp-pkg/l2/l2_ch_filter.c	2001/09/04 15:41:17	1.5
  +++ ossp-pkg/l2/l2_ch_filter.c	2001/09/04 19:18:49	1.6
  @@ -30,38 +30,38 @@
   #include "l2.h"
   #include "l2_p.h"
   
  -static int hook_create(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_create(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
  -static int hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
  +static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
       return L2_OK;
   }
   
  -static int hook_open(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_open(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
  -static int hook_write(l2_context_t *ctx, l2_channel_t *ch, 
  +static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch, 
                         const char *buf, size_t buf_size)
   {
       return L2_OK;
   }
   
  -static int hook_flush(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_flush(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
  -static int hook_close(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_close(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
  -static int hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
  Index: ossp-pkg/l2/l2_ch_null.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 l2_ch_null.c
  --- ossp-pkg/l2/l2_ch_null.c	2001/09/04 15:41:17	1.5
  +++ ossp-pkg/l2/l2_ch_null.c	2001/09/04 19:18:49	1.6
  @@ -30,37 +30,37 @@
   #include "l2.h"
   #include "l2_p.h"
   
  -static int hook_create(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_create(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
  -static int hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
  +static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
       return L2_OK;
   }
   
  -static int hook_open(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_open(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
  -static int hook_write(l2_context_t *ctx, l2_channel_t *ch, const char *buf, size_t buf_size)
  +static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch, const char *buf, size_t buf_size)
   {
       return L2_OK;
   }
   
  -static int hook_flush(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_flush(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
  -static int hook_close(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_close(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
  -static int hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
  Index: ossp-pkg/l2/l2_ch_pipe.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 l2_ch_pipe.c
  --- ossp-pkg/l2/l2_ch_pipe.c	2001/09/04 15:41:17	1.5
  +++ ossp-pkg/l2/l2_ch_pipe.c	2001/09/04 19:18:49	1.6
  @@ -30,38 +30,38 @@
   #include "l2.h"
   #include "l2_p.h"
   
  -static int hook_create(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_create(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
  -static int hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
  +static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
       return L2_OK;
   }
   
  -static int hook_open(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_open(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
  -static int hook_write(l2_context_t *ctx, l2_channel_t *ch, 
  +static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch, 
                         const char *buf, size_t buf_size)
   {
       return L2_OK;
   }
   
  -static int hook_flush(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_flush(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
  -static int hook_close(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_close(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
  -static int hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
  Index: ossp-pkg/l2/l2_ch_prefix.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 l2_ch_prefix.c
  --- ossp-pkg/l2/l2_ch_prefix.c	2001/09/04 15:41:17	1.5
  +++ ossp-pkg/l2/l2_ch_prefix.c	2001/09/04 19:18:49	1.6
  @@ -30,38 +30,38 @@
   #include "l2.h"
   #include "l2_p.h"
   
  -static int hook_create(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_create(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
  -static int hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
  +static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
       return L2_OK;
   }
   
  -static int hook_open(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_open(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
  -static int hook_write(l2_context_t *ctx, l2_channel_t *ch, 
  +static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch, 
                         const char *buf, size_t buf_size)
   {
       return L2_OK;
   }
   
  -static int hook_flush(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_flush(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
  -static int hook_close(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_close(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
   
  -static int hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
   {
       return L2_OK;
   }
  Index: ossp-pkg/l2/l2_ch_socket.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 l2_ch_socket.c
  --- ossp-pkg/l2/l2_ch_socket.c	2001/09/04 15:44:48	1.9
  +++ ossp-pkg/l2/l2_ch_socket.c	2001/09/04 19:18:49	1.10
  @@ -95,7 +95,7 @@
   } l2_ch_socket_t;
   
   /* create channel */
  -static int hook_create(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_create(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_socket_t *cfg = NULL;
   
  @@ -115,7 +115,7 @@
   }
   
   /* configure channel */
  -static int hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
  +static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
       l2_ch_socket_t *cfg;
       l2_param_t pa[3];
  @@ -135,7 +135,7 @@
   }
   
   /* open channel */
  -static int hook_open(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_open(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_socket_t      *cfg;
       struct hostent      *pHostentry;
  @@ -191,7 +191,7 @@
   }
   
   /* write to channel */
  -static int hook_write(l2_context_t *ctx, l2_channel_t *ch, 
  +static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch, 
                         const char *buf, size_t buf_size)
   {
       l2_ch_socket_t *cfg;
  @@ -210,7 +210,7 @@
   }
   
   /* flush channel */
  -static int hook_flush(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_flush(l2_context_t *ctx, l2_channel_t *ch)
   {
       /* NOP for this channel, because Unix I/O sockets are unbuffered! */
   
  @@ -218,7 +218,7 @@
   }
   
   /* close channel */
  -static int hook_close(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_close(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_socket_t *cfg;
   
  @@ -236,7 +236,7 @@
   }
   
   /* destroy channel */
  -static int hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
   {
       /* parameter checks */
       if (ctx->vp == NULL) 
  Index: ossp-pkg/l2/l2_ch_syslog.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 l2_ch_syslog.c
  --- ossp-pkg/l2/l2_ch_syslog.c	2001/09/04 15:44:48	1.11
  +++ ossp-pkg/l2/l2_ch_syslog.c	2001/09/04 19:18:49	1.12
  @@ -42,7 +42,7 @@
   } l2_ch_syslog_t;
   
   /* create channel */
  -static int hook_create(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_create(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_syslog_t *cfg;
   
  @@ -64,7 +64,7 @@
   }
   
   /* configure channel */
  -static int hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
  +static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
       l2_ch_syslog_t *cfg;
       l2_param_t pa[3];
  @@ -87,7 +87,7 @@
   }
   
   /* open channel */
  -static int hook_open(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_open(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_syslog_t *cfg;
   
  @@ -103,7 +103,7 @@
   }
   
   /* write to channel */
  -static int hook_write(l2_context_t *ctx, l2_channel_t *ch, 
  +static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch, 
                         const char *buf, size_t buf_size)
   {
       l2_ch_syslog_t *cfg;
  @@ -119,7 +119,7 @@
   }
   
   /* flush channel */
  -static int hook_flush(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_flush(l2_context_t *ctx, l2_channel_t *ch)
   {
       /* Noop for this channel, because syslog entries are unbuffered */
   
  @@ -127,7 +127,7 @@
   }
   
   /* close channel */
  -static int hook_close(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_close(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_syslog_t *cfg;
   
  @@ -142,7 +142,7 @@
   }
   
   /* destroy channel */
  -static int hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
  +static l2_result_t hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
   {
       /* parameter checks */
       if (ctx->vp == NULL) 

From ossp-cvs-owner@ossp.org  Tue Sep  4 21:34:35 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f84JYYg31675; Tue, 4 Sep 2001 21:34:34 +0200 (CEST)
Date: Tue, 4 Sep 2001 21:34:34 +0200 (CEST)
Message-Id: <200109041934.f84JYYg31675@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_socket.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   04-Sep-2001 21:34:34
  Branch: HEAD                             Handle: 2001090420343300

  Modified files:
    ossp-pkg/l2             l2_ch_socket.c

  Log:
    Completed IPv4 and IPv6 implementations of configure, open, and write
    callbacks functions.

  Summary:
    Revision    Changes     Path
    1.11        +103 -46    ossp-pkg/l2/l2_ch_socket.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_socket.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 l2_ch_socket.c
  --- ossp-pkg/l2/l2_ch_socket.c	2001/09/04 19:18:49	1.10
  +++ ossp-pkg/l2/l2_ch_socket.c	2001/09/04 19:34:33	1.11
  @@ -30,7 +30,6 @@
   #include <sys/types.h>
   #include <sys/socket.h>
   #include <netinet/in.h>
  -#include <arpa/inet.h>
   #include <netdb.h>
   #include <unistd.h>
   
  @@ -40,14 +39,13 @@
   #define HAVE_INET_ATON
   #ifndef HAVE_INET_PTON
   #ifdef HAVE_INET_ATON
  -/* !!! TODO change pton1 to pton !!! */
  -static int inet_pton1(int iFamily, const char *pszAddress, void *pvMemref)
  +static int inet_pton(int iFamily, const char *pszAddress, void *pvMemref)
   {
       int             i    = 0;
       struct in_addr  IP4Addr;
       struct in6_addr IP6Addr;
  -    char            *pszNextfield = NULL;          /* For IPv6 address trans */
  -    char            **ppszVerify  = &pszNextfield; /* To check IPv6 validity */
  +    char            *pszIndex     = NULL;    /* To index IPv6 validity */
  +    char            *pszNextfield = NULL;    /* For IPv6 address trans */
   
       if (iFamily == AF_INET)
       {
  @@ -59,18 +57,23 @@
           return 0;
       }
   
  -    else if (iFamily == AF_INET6)
  -    {
  -        for (i = 0; i < 16; i++)   /* Iterate through the IPv6 address fields */
  +    else if (iFamily == AF_INET6) /* If we are translating IPv6 addresses     */
  +    {                             /* the user needs to use precise notation   */
  +        pszIndex = malloc(strlen(pszAddress));
  +        strcpy(pszIndex, pszAddress);           /* Initialize, verify in loop */
  +        for (i = 0; i < 8; i++)    /* Iterate through the IPv6 address fields */
           {
  -            ppszVerify = &pszNextfield;  /* Reset and compare later to verify */
  -            IP6Addr.__u6_addr.__u6_addr8[i] = (u_int8_t)strtol(pszAddress,\
  -                &pszNextfield, 16);
  -            *pszNextfield++; /* !!! TODO Problema !!! */
  -
  -            if ((&pszNextfield - ppszVerify) != 2)
  +            IP6Addr.__u6_addr.__u6_addr16[i] =\
  +                ntohs((u_int16_t)strtol(pszIndex, &pszNextfield, 16));
  +            if ((pszNextfield == '\0') ||\
  +               ((pszNextfield - pszIndex) != (4 * sizeof(char))))
  +            {
                   return 0; /* User is supplying a IPv6 format we don't support */
  +            }
  +
  +            pszIndex = ++pszNextfield;
           }
  +
           memcpy(pvMemref, &IP6Addr, sizeof(struct in6_addr));
           return 1;
       }
  @@ -89,6 +92,7 @@
   /* declare private channel configuration */
   typedef struct
   {
  +    int iFamily;             /* IP version to use, AF_INET4 or AF_INET6  */
       char *pszHost;           /* IP Address or name of host to connect to */
       int iPort;               /* TCP Port to connect to                   */
       int iSocket;             /* Socket descriptor used during writing    */
  @@ -118,7 +122,7 @@
   static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
       l2_ch_socket_t *cfg;
  -    l2_param_t pa[3];
  +    l2_param_t pa[4];
       l2_result_t rv;
   
       /* parameter checks */
  @@ -126,9 +130,10 @@
           return L2_ERROR;
   
       /* feed and call generic parameter parsing engine */
  -    L2_PARAM_SET(pa[0], host, CHARPTR, &cfg->pszHost);
  -    L2_PARAM_SET(pa[1], port, INT,     &cfg->iPort);
  -    L2_PARAM_END(pa[2]);
  +    L2_PARAM_SET(pa[0], ipversion, INT,     &cfg->iFamily);
  +    L2_PARAM_SET(pa[1], host,      CHARPTR, &cfg->pszHost);
  +    L2_PARAM_SET(pa[2], port,      INT,     &cfg->iPort);
  +    L2_PARAM_END(pa[3]);
       rv = l2_util_setparams(pa, fmt, ap);
   
       return rv;
  @@ -141,6 +146,7 @@
       struct hostent      *pHostentry;
       struct sockaddr_in  IP4Sockaddr;
       struct sockaddr_in6 IP6Sockaddr;
  +    struct in6_addr     *IP6Addr;
   
       /* parameter checks */
       if ((cfg = (l2_ch_socket_t *)ctx->vp) == NULL)
  @@ -149,45 +155,85 @@
           return L2_ERROR;
   
       /* open channel socket      */
  -    /* resolve host numerically */
  -    if (inet_pton1(AF_INET, cfg->pszHost, &IP4Sockaddr.sin_addr.s_addr) == 1)
  -    {
  -        IP4Sockaddr.sin_family = AF_INET;
  -        IP4Sockaddr.sin_port   = htons(cfg->iPort);
  -    }
  -
  -    /* resolve host nominally   */
  -    else if ((pHostentry = gethostbyname(cfg->pszHost)) != NULL)
  +    if (cfg->iFamily == AF_INET) /* IPv4 */
       {
  -        if (pHostentry->h_addrtype == AF_INET)
  +        /* resolve host numerically */
  +        if (inet_pton(AF_INET, cfg->pszHost, &IP4Sockaddr.sin_addr.s_addr) == 1)
           {
               IP4Sockaddr.sin_family = AF_INET;
               IP4Sockaddr.sin_port   = htons(cfg->iPort);
  -            memcpy(&IP4Sockaddr.sin_addr.s_addr, pHostentry->h_addr_list[0],\
  -                sizeof(IP4Sockaddr.sin_addr.s_addr));
           }
   
  -        else if (pHostentry->h_addrtype == AF_INET6)
  +        /* resolve host nominally */
  +        else if ((pHostentry = gethostbyname(cfg->pszHost)) != NULL)
  +        {
  +            if (pHostentry->h_addrtype == AF_INET)
  +            {
  +                IP4Sockaddr.sin_family = AF_INET;
  +                IP4Sockaddr.sin_port   = htons(cfg->iPort);
  +                memcpy(&IP4Sockaddr.sin_addr.s_addr, pHostentry->h_addr_list[0],\
  +                    sizeof(IP4Sockaddr.sin_addr.s_addr));
  +            }
  +
  +            else
  +                return L2_ERROR; /* what?? we specify IPv4 when it is not? */
  +        }
  +
  +        else /* host string was not parsable for some reason */
  +            return L2_ERROR;
  +
  +        if ((cfg->iSocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1)
  +            return L2_ERROR;
  +
  +        if (connect(cfg->iSocket, (struct sockaddr *)&IP4Sockaddr, sizeof(IP4Sockaddr)))
  +        {
  +            close(cfg->iSocket);
  +            return L2_ERROR;
  +        }
  +
  +        return L2_OK; /* we are connected */
  +    }
  +
  +    else if (cfg->iFamily == AF_INET6) /* IPv6 */
  +    {
  +        /* resolve host numerically */
  +        if (inet_pton(AF_INET6, cfg->pszHost, &IP6Sockaddr.sin6_addr.s6_addr) == 1)
           {
               IP6Sockaddr.sin6_family = AF_INET6;
               IP6Sockaddr.sin6_port   = htons(cfg->iPort);
  -            memcpy(&IP6Sockaddr.sin6_addr.__u6_addr, pHostentry->h_addr_list[0],\
  -                sizeof(IP6Sockaddr.sin6_addr.__u6_addr));
           }
  -    }
   
  -    else
  -        return L2_ERROR;
  +        /* resolve host nominally */
  +        else if ((pHostentry = gethostbyname2(cfg->pszHost, AF_INET6)) != NULL)
  +        {
  +            if (pHostentry->h_addrtype == AF_INET6)
  +            {
  +                IP6Sockaddr.sin6_family = AF_INET6;
  +                IP6Sockaddr.sin6_port   = htons(cfg->iPort);
  +                memcpy(&IP6Sockaddr.sin6_addr.__u6_addr, pHostentry->h_addr_list[0],\
  +                    sizeof(IP6Sockaddr.sin6_addr.__u6_addr));
  +            }
   
  -    if ((cfg->iSocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1)
  -        return L2_ERROR;
  -    if (connect(cfg->iSocket, (struct sockaddr *)&IP4Sockaddr, sizeof(IP4Sockaddr)))
  -    {
  -        close(cfg->iSocket);
  -        return L2_ERROR;
  +            else
  +                return L2_ERROR; /* what?? we specify IPv6 when it is not? */
  +        }
  +
  +        else /* host string was not parsable for some reason */
  +            return L2_ERROR;
  +
  +        if ((cfg->iSocket = socket(PF_INET6, SOCK_STREAM, IPPROTO_TCP)) == -1)
  +            return L2_ERROR;
  +
  +        if (connect(cfg->iSocket, (struct sockaddr *)&IP6Sockaddr, sizeof(IP6Sockaddr)))
  +        {
  +            close(cfg->iSocket);
  +            return L2_ERROR;
  +        }
  +
  +        return L2_OK; /* we are connected */
       }
   
  -    return L2_OK;
  +    return L2_ERROR;
   }
   
   /* write to channel */
  @@ -195,6 +241,8 @@
                         const char *buf, size_t buf_size)
   {
       l2_ch_socket_t *cfg;
  +    size_t          sizeWrite;
  +    size_t          sizeRemain;
   
       /* parameter checks */
       if ((cfg = (l2_ch_socket_t *)ctx->vp) == NULL)
  @@ -202,9 +250,18 @@
       if (cfg->iSocket == -1)
           return L2_ERROR;
   
  -    /* write message to channel socket */
  -    if (send(cfg->iSocket, buf, buf_size, 0) == -1)
  -        return L2_ERROR;
  +    /* write message to channel socket, but check to make   */
  +    /* sure that the whole message was successfully written */
  +    sizeWrite  = 0;
  +    sizeRemain = buf_size;
  +    while(sizeRemain)
  +    {
  +        sizeWrite  = send(cfg->iSocket, buf + sizeWrite, sizeRemain, 0);
  +        sizeRemain = sizeRemain - sizeWrite; /* how much is left? */
  +
  +        if (sizeWrite == -1)
  +            return L2_ERROR;
  +    }
   
       return L2_OK;
   }

From ossp-cvs-owner@ossp.org  Tue Sep  4 21:35:21 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f84JZKO31759; Tue, 4 Sep 2001 21:35:20 +0200 (CEST)
Date: Tue, 4 Sep 2001 21:35:20 +0200 (CEST)
Message-Id: <200109041935.f84JZKO31759@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_syslog.c l2_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   04-Sep-2001 21:35:20
  Branch: HEAD                             Handle: 2001090420352000

  Modified files:
    ossp-pkg/l2             l2_ch_syslog.c l2_test.c

  Log:
    Array bug fixes and code to test sockets.

  Summary:
    Revision    Changes     Path
    1.13        +5  -5      ossp-pkg/l2/l2_ch_syslog.c
    1.11        +36 -9      ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_syslog.c
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 l2_ch_syslog.c
  --- ossp-pkg/l2/l2_ch_syslog.c	2001/09/04 19:18:49	1.12
  +++ ossp-pkg/l2/l2_ch_syslog.c	2001/09/04 19:35:20	1.13
  @@ -67,7 +67,7 @@
   static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
       l2_ch_syslog_t *cfg;
  -    l2_param_t pa[3];
  +    l2_param_t pa[6];
       l2_result_t rv;
   
       /* parameter checks */
  @@ -77,10 +77,10 @@
       /* feed and call generic parameter parsing engine */
       L2_PARAM_SET(pa[0], ident,   CHARPTR,  &cfg->pszIdent);
       L2_PARAM_SET(pa[1], logopts, INT,      &cfg->iLogopt);
  -    L2_PARAM_SET(pa[1], facility, INT,     &cfg->iFacility);
  -    L2_PARAM_SET(pa[1], priority, INT,     &cfg->iPriority);
  -    L2_PARAM_SET(pa[1], maskpriority, INT, &cfg->iMaskpri);
  -    L2_PARAM_END(pa[2]);
  +    L2_PARAM_SET(pa[2], facility, INT,     &cfg->iFacility);
  +    L2_PARAM_SET(pa[3], priority, INT,     &cfg->iPriority);
  +    L2_PARAM_SET(pa[4], maskpriority, INT, &cfg->iMaskpri);
  +    L2_PARAM_END(pa[5]);
       rv = l2_util_setparams(pa, fmt, ap);
   
       return rv;
  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/09/04 14:56:25	1.10
  +++ ossp-pkg/l2/l2_test.c	2001/09/04 19:35:20	1.11
  @@ -28,6 +28,12 @@
   */
   
   #include <stdio.h>
  +
  +#include <sys/types.h>   /* following group of includes are for */
  +#include <sys/socket.h>  /* socket testing only                 */
  +#include <netinet/in.h>
  +#include <netdb.h>
  +
   #include "l2.h"
   
   static void die(char *fmt, ...)
  @@ -58,21 +64,45 @@
   {
       l2_channel_t *chBuf;
       l2_channel_t *chFile;
  +    l2_channel_t *chSock;
       l2_stream_t *st;
   
       /*
        * Typical steps to use a buffered file logging stream
        */
   
  -    if ((chBuf  = l2_channel_create(&l2_handler_buffer)) == NULL)
  -        die("failed to create buffer channel");
  +    if ((st = l2_stream_create()) == NULL)
  +        die("failed to create stream");
   
  -    if ((chFile = l2_channel_create(&l2_handler_file)) == NULL)
  -        die("failed to create file channel");
  +/* Atenzione! Before doing any socket testing, make sure you have a valid */
  +/* end point listening, or else you will only get an error message when   */
  +/* the thing tries to connect.                                            */
  +/*    if ((chSock = l2_channel_create(&l2_handler_socket)) == NULL)
  +        die("failed to create socket channel");
  +
  +    if (l2_channel_configure(chSock, "ipversion,host,port", AF_INET,\
  +        "localhost", 2002) != L2_OK)
  +        die("failed to configure socket ipv4 channel");
  +
  +    if (l2_channel_configure(chSock, "ipversion,host,port", AF_INET6,\
  +        "0123:4567:4455:6677:8899:AABB:9876:5432", 2002) != L2_OK)
  +        die("failed to configure socket ipv6 channel");
  +
  +    if (l2_channel_open(chSock) != L2_OK)
  +        die("failed to open socket channel");
  +
  +    if (l2_stream_channel(st, chSock, L2_LEVEL_UPTO(L2_LEVEL_WARNING)) != L2_OK)
  +        die("failed to attach first channel into stream");
  +*/
  +    if ((chBuf  = l2_channel_create(&l2_handler_buffer)) == NULL) /* Buffer */
  +        die("failed to create buffer channel");
   
       if (l2_channel_configure(chBuf, "size", 100) != L2_OK)
           die("failed to configure buffer channel");
   
  +    if ((chFile = l2_channel_create(&l2_handler_file)) == NULL)   /* File   */
  +        die("failed to create file channel");
  +
       if (l2_channel_configure(chFile, "path,append,perm", "l2_test.log", TRUE, 0644) != L2_OK)
           die("failed to configure file channel");
   
  @@ -82,11 +112,8 @@
       if (l2_channel_open(chBuf) != L2_OK)
           die("failed to open buffer channel");
   
  -    if ((st = l2_stream_create()) == NULL)
  -        die("failed to create stream");
  -
       if (l2_stream_channel(st, chBuf, L2_LEVEL_UPTO(L2_LEVEL_WARNING)) != L2_OK)
  -        die("failed to attach channel into stream");
  +        die("failed to attach second channel into stream");
   
       if (l2_stream_levels(st, L2_LEVEL_UPTO(L2_LEVEL_WARNING)) != L2_OK)
           die("failed to set global logging level");
  @@ -94,7 +121,7 @@
       if (l2_stream_formatter(st, 'k', formatter, NULL) != L2_OK)
           die("failed to configure formatter for %%x");
   
  -    if (l2_stream_log(st, L2_LEVEL_PANIC, "test %s %{foo}k", "foo", 12345) != L2_OK)
  +    if (l2_stream_log(st, L2_LEVEL_PANIC, "Checking localhost %s %{myparm}k\n", "foo", 12345) != L2_OK)
           die("failed to log message to stream");
   
       if (l2_stream_destroy(st) != L2_OK)

From ossp-cvs-owner@ossp.org  Wed Sep  5 09:38:06 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f857c4A14733; Wed, 5 Sep 2001 09:38:04 +0200 (CEST)
Date: Wed, 5 Sep 2001 09:38:04 +0200 (CEST)
Message-Id: <200109050738.f857c4A14733@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_stream.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   05-Sep-2001 09:38:04
  Branch: HEAD                             Handle: 2001090508380400

  Modified files:
    ossp-pkg/l2             l2_stream.c

  Log:
    on stream attachment of a channel stack, make sure the stack of channels
    consists of zero or more filter channels followed by exactly one output
    channel. I knew that providing l2_channel_type() will be useful... ;)

  Summary:
    Revision    Changes     Path
    1.11        +15 -0      ossp-pkg/l2/l2_stream.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_stream.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 l2_stream.c
  --- ossp-pkg/l2/l2_stream.c	2001/09/04 14:56:25	1.10
  +++ ossp-pkg/l2/l2_stream.c	2001/09/05 07:38:04	1.11
  @@ -49,15 +49,30 @@
   l2_result_t l2_stream_channel(l2_stream_t *st, l2_channel_t *ch, unsigned int levelmask)
   {
       int i;
  +    l2_channel_t *chC;
  +    l2_channel_t *chN;
   
       if (st == NULL || ch == NULL || levelmask == 0)
           return L2_ERROR;
  +
  +    /* make sure the stack of channels consists of zero or more
  +       filter channels followed by exactly one output channel */
  +    for (chC = ch; (chN = l2_channel_downstream(chC)) != NULL; chC = chN)
  +        if (l2_channel_type(chC) != L2_CHANNEL_FILTER)
  +            return L2_ERROR;
  +    if (l2_channel_type(chC) != L2_CHANNEL_OUTPUT)
  +        return L2_ERROR;
  +
  +    /* find next free channel position in channel array */
       for (i = 0; i < L2_MAX_CHANNELS && st->channels[i].ch != NULL; i++)
           ;
       if (i == L2_MAX_CHANNELS)
           return L2_ERROR;
  +
  +    /* attach this channel */
       st->channels[i].ch = ch;
       st->channels[i].levelmask = levelmask;
  +
       return L2_OK;
   }
   

From ossp-cvs-owner@ossp.org  Wed Sep  5 09:41:19 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f857fIN15286; Wed, 5 Sep 2001 09:41:18 +0200 (CEST)
Date: Wed, 5 Sep 2001 09:41:18 +0200 (CEST)
Message-Id: <200109050741.f857fIN15286@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.h l2_ut_param.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   05-Sep-2001 09:41:18
  Branch: HEAD                             Handle: 2001090508411800

  Modified files:
    ossp-pkg/l2             l2.h l2_ut_param.c

  Log:
    Provide an L2_TYPE_STRING for the channel configuration steps. This is
    like L2_TYPE_CHARPTR but treats the target as a NUL-terminated string
    and performs a strdup() on it. This make the channels simpler, because
    they no longer have to post-process the configuration step in order to
    make own copies of provided strings.

  Summary:
    Revision    Changes     Path
    1.17        +1  -0      ossp-pkg/l2/l2.h
    1.2         +3  -0      ossp-pkg/l2/l2_ut_param.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2.h
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 l2.h
  --- ossp-pkg/l2/l2.h	2001/09/04 19:18:49	1.16
  +++ ossp-pkg/l2/l2.h	2001/09/05 07:41:18	1.17
  @@ -103,6 +103,7 @@
       L2_TYPE_LONG,
       L2_TYPE_FLOAT,
       L2_TYPE_DOUBLE,
  +    L2_TYPE_STRING,
       L2_TYPE_CHARPTR,
       L2_TYPE_VOIDPTR
   } l2_type_t;
  Index: ossp-pkg/l2/l2_ut_param.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 l2_ut_param.c
  --- ossp-pkg/l2/l2_ut_param.c	2001/09/04 13:52:59	1.1
  +++ ossp-pkg/l2/l2_ut_param.c	2001/09/05 07:41:18	1.2
  @@ -85,6 +85,9 @@
                       case L2_TYPE_DOUBLE:
                           *(double *)(pa[i].store) = va_get(ap, double); 
                           break;
  +                    case L2_TYPE_STRING:
  +                        *(char **)(pa[i].store) = strdup(va_get(ap, charptr)); 
  +                        break;
                       case L2_TYPE_CHARPTR:
                           *(char **)(pa[i].store) = va_get(ap, charptr); 
                           break;

From ossp-cvs-owner@ossp.org  Wed Sep  5 09:47:14 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f857lDH15998; Wed, 5 Sep 2001 09:47:13 +0200 (CEST)
Date: Wed, 5 Sep 2001 09:47:13 +0200 (CEST)
Message-Id: <200109050747.f857lDH15998@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_buffer.c l2_ch_fd.c l2_ch_file.c l2_ch_f...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   05-Sep-2001 09:47:13
  Branch: HEAD                             Handle: 2001090508471200

  Modified files:
    ossp-pkg/l2             l2_ch_buffer.c l2_ch_fd.c l2_ch_file.c
                            l2_ch_filter.c l2_ch_null.c l2_ch_pipe.c
                            l2_ch_prefix.c l2_ch_socket.c l2_ch_syslog.c

  Log:
    Be politically correct: channels are intended to be implemented also by
    users, which have only access to the public API (l2.h), so do not even
    try to use anything more in our own shipped channels.

  Summary:
    Revision    Changes     Path
    1.14        +0  -1      ossp-pkg/l2/l2_ch_buffer.c
    1.7         +0  -1      ossp-pkg/l2/l2_ch_fd.c
    1.13        +0  -1      ossp-pkg/l2/l2_ch_file.c
    1.7         +0  -1      ossp-pkg/l2/l2_ch_filter.c
    1.7         +0  -1      ossp-pkg/l2/l2_ch_null.c
    1.7         +0  -1      ossp-pkg/l2/l2_ch_pipe.c
    1.7         +0  -1      ossp-pkg/l2/l2_ch_prefix.c
    1.12        +4  -3      ossp-pkg/l2/l2_ch_socket.c
    1.14        +0  -1      ossp-pkg/l2/l2_ch_syslog.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_buffer.c
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 l2_ch_buffer.c
  --- ossp-pkg/l2/l2_ch_buffer.c	2001/09/04 19:18:49	1.13
  +++ ossp-pkg/l2/l2_ch_buffer.c	2001/09/05 07:47:12	1.14
  @@ -28,7 +28,6 @@
   */
   
   #include "l2.h"
  -#include "l2_p.h"
   
   #include <string.h>
   
  Index: ossp-pkg/l2/l2_ch_fd.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 l2_ch_fd.c
  --- ossp-pkg/l2/l2_ch_fd.c	2001/09/04 19:18:49	1.6
  +++ ossp-pkg/l2/l2_ch_fd.c	2001/09/05 07:47:12	1.7
  @@ -28,7 +28,6 @@
   */
   
   #include "l2.h"
  -#include "l2_p.h"
   
   static l2_result_t hook_create(l2_context_t *ctx, l2_channel_t *ch)
   {
  Index: ossp-pkg/l2/l2_ch_file.c
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 l2_ch_file.c
  --- ossp-pkg/l2/l2_ch_file.c	2001/09/04 19:18:49	1.12
  +++ ossp-pkg/l2/l2_ch_file.c	2001/09/05 07:47:12	1.13
  @@ -28,7 +28,6 @@
   */
   
   #include "l2.h"
  -#include "l2_p.h"
   
   #include <fcntl.h>
   #include <unistd.h>
  Index: ossp-pkg/l2/l2_ch_filter.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 l2_ch_filter.c
  --- ossp-pkg/l2/l2_ch_filter.c	2001/09/04 19:18:49	1.6
  +++ ossp-pkg/l2/l2_ch_filter.c	2001/09/05 07:47:12	1.7
  @@ -28,7 +28,6 @@
   */
   
   #include "l2.h"
  -#include "l2_p.h"
   
   static l2_result_t hook_create(l2_context_t *ctx, l2_channel_t *ch)
   {
  Index: ossp-pkg/l2/l2_ch_null.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 l2_ch_null.c
  --- ossp-pkg/l2/l2_ch_null.c	2001/09/04 19:18:49	1.6
  +++ ossp-pkg/l2/l2_ch_null.c	2001/09/05 07:47:12	1.7
  @@ -28,7 +28,6 @@
   */
   
   #include "l2.h"
  -#include "l2_p.h"
   
   static l2_result_t hook_create(l2_context_t *ctx, l2_channel_t *ch)
   {
  Index: ossp-pkg/l2/l2_ch_pipe.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 l2_ch_pipe.c
  --- ossp-pkg/l2/l2_ch_pipe.c	2001/09/04 19:18:49	1.6
  +++ ossp-pkg/l2/l2_ch_pipe.c	2001/09/05 07:47:12	1.7
  @@ -28,7 +28,6 @@
   */
   
   #include "l2.h"
  -#include "l2_p.h"
   
   static l2_result_t hook_create(l2_context_t *ctx, l2_channel_t *ch)
   {
  Index: ossp-pkg/l2/l2_ch_prefix.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 l2_ch_prefix.c
  --- ossp-pkg/l2/l2_ch_prefix.c	2001/09/04 19:18:49	1.6
  +++ ossp-pkg/l2/l2_ch_prefix.c	2001/09/05 07:47:12	1.7
  @@ -28,7 +28,6 @@
   */
   
   #include "l2.h"
  -#include "l2_p.h"
   
   static l2_result_t hook_create(l2_context_t *ctx, l2_channel_t *ch)
   {
  Index: ossp-pkg/l2/l2_ch_socket.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 l2_ch_socket.c
  --- ossp-pkg/l2/l2_ch_socket.c	2001/09/04 19:34:33	1.11
  +++ ossp-pkg/l2/l2_ch_socket.c	2001/09/05 07:47:12	1.12
  @@ -27,14 +27,15 @@
   **  l2_ch_socket.c: socket channel implementation
   */
   
  +#include <unistd.h>
  +#include <errno.h>
  +#include <netdb.h>
   #include <sys/types.h>
   #include <sys/socket.h>
   #include <netinet/in.h>
  -#include <netdb.h>
  -#include <unistd.h>
  +#include <arpa/inet.h>
   
   #include "l2.h"
  -#include "l2_p.h"
   
   #define HAVE_INET_ATON
   #ifndef HAVE_INET_PTON
  Index: ossp-pkg/l2/l2_ch_syslog.c
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 l2_ch_syslog.c
  --- ossp-pkg/l2/l2_ch_syslog.c	2001/09/04 19:35:20	1.13
  +++ ossp-pkg/l2/l2_ch_syslog.c	2001/09/05 07:47:12	1.14
  @@ -28,7 +28,6 @@
   */
   
   #include "l2.h"
  -#include "l2_p.h"
   
   #include <syslog.h>
   

From ossp-cvs-owner@ossp.org  Wed Sep  5 10:20:05 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f858K4P19974; Wed, 5 Sep 2001 10:20:04 +0200 (CEST)
Date: Wed, 5 Sep 2001 10:20:04 +0200 (CEST)
Message-Id: <200109050820.f858K4P19974@ossp.org>
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   OSSP Project Master
  Root:   /e/ossp/cvs                      Email:  ossp@ossp.org
  Module: CVSROOT                          Date:   05-Sep-2001 10:20:04
  Branch: HEAD                             Handle: 2001090509200400

  Modified files:
    CVSROOT                 modules

  Log:
    link L2 and Str into lmtp2nntp source tree

  Summary:
    Revision    Changes     Path
    1.28        +1  -2      CVSROOT/modules
  ____________________________________________________________________________

  Index: CVSROOT/modules
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 modules
  --- CVSROOT/modules	2001/08/20 12:12:53	1.27
  +++ CVSROOT/modules	2001/09/05 08:20:04	1.28
  @@ -75,6 +75,5 @@
   l2              ossp-pkg/l2
   srpc            ossp-pkg/srpc
   xds             ossp-pkg/srpc/libxds
  -lmtp2nntp       ossp-pkg/lmtp2nntp
  -
  +lmtp2nntp       ossp-pkg/lmtp2nntp &str &l2
   

From ossp-cvs-owner@ossp.org  Wed Sep  5 10:29:19 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f858TIU20899; Wed, 5 Sep 2001 10:29:18 +0200 (CEST)
Date: Wed, 5 Sep 2001 10:29:18 +0200 (CEST)
Message-Id: <200109050829.f858TIU20899@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str .cvsignore Makefile.in autogen.sh config.gues...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   05-Sep-2001 10:29:18
  Branch: HEAD                             Handle: 19700101010000999674956

  Modified files:
    ossp-pkg/str            .cvsignore Makefile.in autogen.sh
  Removed files:
    ossp-pkg/str            config.guess config.sub configure libtool.m4
                            ltmain.sh shtool str-config.1 str.3
                            str_config.h.in

  Log:
    finally remove generated stuff from Str tree

  Summary:
    Revision    Changes     Path
    1.8         +6  -0      ossp-pkg/str/.cvsignore
    1.35        +1  -0      ossp-pkg/str/Makefile.in
    1.2         +1  -1      ossp-pkg/str/autogen.sh
    NONE        +0  -1371   ossp-pkg/str/config.guess
    NONE        +0  -1362   ossp-pkg/str/config.sub
    NONE        +0  -9197   ossp-pkg/str/configure
    NONE        +0  -3397   ossp-pkg/str/libtool.m4
    NONE        +0  -4946   ossp-pkg/str/ltmain.sh
    NONE        +0  -1320   ossp-pkg/str/shtool
    NONE        +0  -247    ossp-pkg/str/str-config.1
    NONE        +0  -775    ossp-pkg/str/str.3
    NONE        +0  -76     ossp-pkg/str/str_config.h.in
  ____________________________________________________________________________

  Index: ossp-pkg/str/.cvsignore
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 .cvsignore
  --- ossp-pkg/str/.cvsignore	2001/08/16 12:04:25	1.7
  +++ ossp-pkg/str/.cvsignore	2001/09/05 08:29:16	1.8
  @@ -4,6 +4,7 @@
   config.status
   str-config
   str_config.h
  +str_config.h.in
   str_test
   *.core
   *.lo
  @@ -12,3 +13,8 @@
   libtool
   str_pcre_gen
   str_pcre_tab.c
  +config.guess
  +config.sub
  +configure
  +libtool.m4
  +ltmain.sh
  Index: ossp-pkg/str/Makefile.in
  ============================================================
  $ cvs diff -u -r1.34 -r1.35 Makefile.in
  --- ossp-pkg/str/Makefile.in	2001/08/16 13:21:22	1.34
  +++ ossp-pkg/str/Makefile.in	2001/09/05 08:29:16	1.35
  @@ -152,6 +152,7 @@
   realclean: distclean
   	$(RM) config.guess config.sub ltmain.sh libtool.m4
   	$(RM) configure str_config.h.in
  +	$(RM) str-config.1 str.3
   	$(RM) shtool
   
   dist: distclean
  Index: ossp-pkg/str/autogen.sh
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 autogen.sh
  --- ossp-pkg/str/autogen.sh	2001/08/16 12:16:51	1.1
  +++ ossp-pkg/str/autogen.sh	2001/09/05 08:29:16	1.2
  @@ -62,7 +62,7 @@
   echo "GNU Libtool $libtoolize_version -> ltmain.sh, libtool.m4, config.guess, config.sub"
   libtoolize --force --copy >/dev/null 2>&1
   cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
  -    sed -e 's;[^\`]*\`;;' -e "s;\'.*;;"` libtool.m4
  +    sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` libtool.m4
   
   #   GNU Autoconf generation
   echo "GNU Autoconf $autoconf_version -> configure, config.h.in"
                  

From ossp-cvs-owner@ossp.org  Wed Sep  5 10:31:01 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f858V0c21263; Wed, 5 Sep 2001 10:31:00 +0200 (CEST)
Date: Wed, 5 Sep 2001 10:31:00 +0200 (CEST)
Message-Id: <200109050831.f858V0c21263@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str .cvsignore
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   05-Sep-2001 10:31:00
  Branch: HEAD                             Handle: 2001090509305900

  Modified files:
    ossp-pkg/str            .cvsignore

  Log:
    more ignored files

  Summary:
    Revision    Changes     Path
    1.9         +3  -0      ossp-pkg/str/.cvsignore
  ____________________________________________________________________________

  Index: ossp-pkg/str/.cvsignore
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 .cvsignore
  --- ossp-pkg/str/.cvsignore	2001/09/05 08:29:16	1.8
  +++ ossp-pkg/str/.cvsignore	2001/09/05 08:30:59	1.9
  @@ -18,3 +18,6 @@
   configure
   libtool.m4
   ltmain.sh
  +shtool
  +str.3
  +str-config.1

From ossp-cvs-owner@ossp.org  Wed Sep  5 11:10:30 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f859AT525561; Wed, 5 Sep 2001 11:10:29 +0200 (CEST)
Date: Wed, 5 Sep 2001 11:10:29 +0200 (CEST)
Message-Id: <200109050910.f859AT525561@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp .configure Makefile.in aclocal.m4 autog...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   05-Sep-2001 11:10:29
  Branch: HEAD                             Handle: 2001090510102800

  Modified files:
    ossp-pkg/lmtp2nntp      .configure Makefile.in aclocal.m4 autogen.sh
                            configure.ac

  Log:
    Add support for local OSSP Str and OSSP L2 library source copies.

  Summary:
    Revision    Changes     Path
    1.7         +0  -1      ossp-pkg/lmtp2nntp/.configure
    1.13        +25 -2      ossp-pkg/lmtp2nntp/Makefile.in
    1.6         +2  -2      ossp-pkg/lmtp2nntp/aclocal.m4
    1.5         +8  -0      ossp-pkg/lmtp2nntp/autogen.sh
    1.9         +26 -6      ossp-pkg/lmtp2nntp/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/.configure
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 .configure
  --- ossp-pkg/lmtp2nntp/.configure	2001/08/28 14:22:45	1.6
  +++ ossp-pkg/lmtp2nntp/.configure	2001/09/05 09:10:28	1.7
  @@ -4,7 +4,6 @@
   fi
   PATH=/cw/bin:$PATH
   ./configure \
  -   --with-str=/cw \
      --enable-debug \
      --prefix=/tmp/lmtp2nntp
   
  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	2001/09/04 09:46:06	1.12
  +++ ossp-pkg/lmtp2nntp/Makefile.in	2001/09/05 09:10:28	1.13
  @@ -46,11 +46,31 @@
   HDRS = lmtp.h nntp.h sa.h argz.h shpat_match.h msg.h trace.h
   OBJS = lmtp2nntp.o lmtp.o nntp.o sa.o argz.o shpat_match.o msg.o trace.o version.o
   
  -all: lmtp2nntp lmtp2nntp.1
  +SUBDIRS = @SUBDIR_STR@ @SUBDIR_L2@ 
   
  +all: _SUBDIRS_all lmtp2nntp lmtp2nntp.1
  +
   .c.o:
   	$(CC) $(CFLAGS) -c $<
   
  +#   convinience rule for calling _SUBDIRS with various make targets
  +_SUBDIRS_all _SUBDIRS_check _SUBDIRS_install _SUBDIRS_uninstall _SUBDIRS_clean _SUBDIRS_distclean _SUBDIRS_depend:
  +	@$(MAKE) $(MFLAGS) \
  +	         _SUBDIRS_TARGET=`echo $@ | sed -e 's/^_SUBDIRS_//'` \
  +	         _SUBDIRS_STEPDOWN 
  +
  +#   the work horse rule which steps down to the subdirs in a loop
  +_SUBDIRS_STEPDOWN:
  +	@for subdir in $(SUBDIRS); do \
  +	    test ! -f "$$subdir/Makefile" && continue; \
  +	    echo "===> $(_SUBDIRS_DP)$$subdir ($(_SUBDIRS_TARGET))"; \
  +	    (cd $$subdir; \
  +	     $(MAKE) $(MFLAGS) \
  +	             _SUBDIRS_DP="$(_SUBDIRS_DP)$$subdir/" \
  +	             $(_SUBDIRS_TARGET) || exit 1) || exit 1; \
  +	    echo "<=== $(_SUBDIRS_DP)$$subdir"; \
  +	done
  +
   $(PROG): Makefile $(OBJS) $(HDRS)
   	$(CC) $(LDFLAGS) -o $(PROG) $(OBJS) $(LIBS)
   
  @@ -67,16 +87,19 @@
   	$(SHTOOL) install -c -m 644 lmtp2nntp.1 $(DESTDIR)$(mandir)/man1/
   
   clean:
  +	@$(MAKE) $(MFLAGS) _SUBDIRS_clean
   	-rm -f *.core
   	-rm -f dmalloc.log test/dmalloc.log
   	-rm -f $(PROG)
   	-rm -f $(OBJS)
   
   distclean: clean
  +	@$(MAKE) $(MFLAGS) _SUBDIRS_distclean
   	-rm -f config.h config.status config.log config.cache
   	-rm -f Makefile
   
   realclean: distclean
  +	@$(MAKE) $(MFLAGS) _SUBDIRS_realclean
   	-rm -f lmtp2nntp.1
   	-rm -f config.h.in
   	-rm -f configure
  @@ -89,7 +112,7 @@
   	@$(SHTOOL) fixperm -v .; \
   	V=`$(SHTOOL) version -lc -dshort version.c`; \
   	$(SHTOOL) tarball -o lmtp2nntp-$${V}.tar.gz -d lmtp2nntp-$${V} -u ossp -g ossp \
  -	                  -e 'CVS,\.cvsignore,\.[ao],^\.,autogen.sh,test,*.tar.gz' -c 'gzip --best' .
  +	                  -e 'CVS,\.cvsignore,\.[ao],^\.,/\.,autogen.sh,test,*.tar.gz' -c 'gzip --best' .
   
   check: lmtp2nntp
   	@cd test && ./run.sh
  Index: ossp-pkg/lmtp2nntp/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 aclocal.m4
  --- ossp-pkg/lmtp2nntp/aclocal.m4	2001/09/04 09:46:06	1.5
  +++ ossp-pkg/lmtp2nntp/aclocal.m4	2001/09/05 09:10:28	1.6
  @@ -226,7 +226,7 @@
   
   AC_DEFUN(AC_CHECK_EXTLIB,[dnl
   AC_ARG_WITH($2, [dnl
  -[  --with-]$2[[=DIR]        build with $1 library (default=no)]], [dnl
  +[  --with-]$2[[=DIR]        build with external $1 library (default=no)]], [dnl
       if test ".$with_$2" = .yes; then
           #   via config script
           $2_version=`($2-config --version) 2>/dev/null`
  @@ -298,7 +298,7 @@
       with_$2=no
   fi
       ])dnl
  -AC_MSG_CHECKING(whether to build against $1 library)
  +AC_MSG_CHECKING(whether to build against external $1 library)
   if test ".$with_$2" = .yes; then
       ifelse([$5], , :, [$5])
   else
  Index: ossp-pkg/lmtp2nntp/autogen.sh
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 autogen.sh
  --- ossp-pkg/lmtp2nntp/autogen.sh	2001/09/04 09:46:06	1.4
  +++ ossp-pkg/lmtp2nntp/autogen.sh	2001/09/05 09:10:28	1.5
  @@ -63,3 +63,11 @@
   echo "GNU Shtool $shtoolize_version -> shtool"
   shtoolize -q all
   
  +#   perform same operation in subdirs
  +echo "===> str (autogen.sh)"
  +(cd str && ./autogen.sh)
  +echo "<=== str"
  +echo "===> l2 (autogen.sh)"
  +(cd l2  && ./autogen.sh)
  +echo "<=== l2"
  +
  Index: ossp-pkg/lmtp2nntp/configure.ac
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 configure.ac
  --- ossp-pkg/lmtp2nntp/configure.ac	2001/09/04 09:46:06	1.8
  +++ ossp-pkg/lmtp2nntp/configure.ac	2001/09/05 09:10:28	1.9
  @@ -44,14 +44,34 @@
   AC_CHECK_LIB(nsl, gethostbyname)
   AC_CHECK_FUNCS(inet_pton inet_aton)
   
  -dnl #   check for external Str library
  -AC_CHECK_EXTLIB([Generic String Library], 
  -                str, str_parse, str.h, , 
  -                [AC_MSG_RESULT(not found)
  -                 AC_MSG_ERROR([lmtp2nntp requires libstr!])])
  +dnl #   check for Str library
  +AC_CHECK_EXTLIB([OSSP Str], 
  +                str, str_parse, str.h, 
  +                [SUBDIR_STR=""], 
  +                [SUBDIR_STR="str"
  +                 CPPFLAGS="$CPPFLAGS -Istr"
  +                 CFLAGS="$CFLAGS -Istr"
  +                 LDFLAGS="$LDFLAGS -Lstr/.libs"
  +                 LIBS="$LIBS -lstr"])
  +AC_SUBST(SUBDIR_STR)
   
  +dnl #   check for L2 library
  +AC_CHECK_EXTLIB([OSSP L2], 
  +                l2, l2_stream_log, l2.h, 
  +                [SUBDIR_L2=""], 
  +                [SUBDIR_L2="l2"
  +                 CPPFLAGS="$CPPFLAGS -Il2"
  +                 CFLAGS="$CFLAGS -Il2"
  +                 LDFLAGS="$LDFLAGS -Ll2/.libs"
  +                 LIBS="$LIBS -ll2"])
  +AC_SUBST(SUBDIR_L2)
  +
   dnl #   check for external Dmalloc library
  -AC_CHECK_EXTLIB([Dmalloc Library], dmalloc, dmalloc_debug, dmalloc.h, AC_DEFINE(DMALLOC))
  +AC_CHECK_EXTLIB([Dmalloc], dmalloc, dmalloc_debug, dmalloc.h, AC_DEFINE(DMALLOC))
  +
  +enable_shared=no
  +export enable_shared
  +AC_CONFIG_SUBDIRS($SUBDIR_STR $SUBDIR_L2)
   
   dnl #   standard output generation
   AC_CONFIG_HEADERS(config.h)

From ossp-cvs-owner@ossp.org  Wed Sep  5 11:14:29 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f859ERi25871; Wed, 5 Sep 2001 11:14:27 +0200 (CEST)
Date: Wed, 5 Sep 2001 11:14:27 +0200 (CEST)
Message-Id: <200109050914.f859ERi25871@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO lmtp2nntp.c lmtp2nntp.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   05-Sep-2001 11:14:27
  Branch: HEAD                             Handle: 2001090510142601

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO lmtp2nntp.c lmtp2nntp.pod

  Log:
    flush pending (unfinished) work.

  Summary:
    Revision    Changes     Path
    1.26        +8  -0      ossp-pkg/lmtp2nntp/00TODO
    1.40        +18 -10     ossp-pkg/lmtp2nntp/lmtp2nntp.c
    1.16        +21 -6      ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	2001/09/03 15:06:29	1.25
  +++ ossp-pkg/lmtp2nntp/00TODO	2001/09/05 09:14:26	1.26
  @@ -4,6 +4,14 @@
   
   [B<-b> I<bindaddress>]
   
  +
  +Hallo Thomas, wir haben festgestellt, dass wir noch ein feature brauchen.
  +Momentan waere es moeglich, dass jeder x-beliebige (der die entsprechende
  +Mail-Adresse kennt) eine Mail an mail.de.cw.net schickt, und diese somit auf
  +unsern News-Server abgebildet wird. Wir brauchen daher noch einen Filter, der
  +dies pro Gruppe auf einen definierten, erlaubten Absender erlaubt.
  +[B<-m> I<mailfrom>]
  +
   use L2 for logging, grab ID through RFC1891 ENVID, 6.2
   [B<-i> I<messageid>]
   [B<-l> I<logtarget>]
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.39 -r1.40 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/04 09:46:06	1.39
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/05 09:14:26	1.40
  @@ -112,6 +112,7 @@
       char           *option_deliverymodefakedsn;
       int             option_maxmessagesize;
       int             option_waittime;
  +    char           *option_mailfrom;
       char           *cpBindh;
       char           *cpBindp;
       sa_t           *saBind;
  @@ -152,11 +153,13 @@
       fprintf(stderr, 
               "USAGE: %s "
               "[-V]"
  +            "[-b bindaddr[:port]"
               "[-d deliverymode]"
               "[-g groupmode]"
               "[-h host[:port][,host[:port], ...]]"
  -            "[-m maxmessagesize]"
  -            "[-n hostname]"
  +            "[-m mailfrom]"
  +            "[-n nodename]"
  +            "[-s size]"
               "[-t tracefile]"
               "[-v]"
               "[-w waittime]"
  @@ -194,6 +197,7 @@
       ctx->option_deliverymodefakedsn    = "5.7.1"; /* Delivery not authorized, message refused */
       ctx->option_maxmessagesize = 8 * 1024 * 1024;
       ctx->option_waittime = -1;
  +    ctx->option_mailfrom = NULL;
       ctx->cpBindh = NULL;
       ctx->cpBindp = NULL;
       ctx->saBind = NULL;
  @@ -238,7 +242,7 @@
        */
   
       /* read in the arguments */
  -    while ((i = getopt(argc, argv, "Vb:d:g:h:m:n:t:vw:")) != -1) {
  +    while ((i = getopt(argc, argv, "Vb:d:g:h:m:n:s:t:vw:")) != -1) {
           switch (i) {
               case 'V': /*POD [B<-V>] (version)*/
                   fprintf(stdout, "%s\n", lmtp2nntp_version.v_gnu);
  @@ -373,20 +377,22 @@
                   }
                   free(azHosts);
                   break;
  -            case 'm': /*POD [B<-m> I<maxmessagesize>] */
  -                    ctx->option_maxmessagesize = atoi(optarg);
  -                    if(ctx->option_maxmessagesize < 64) {
  -                        fprintf(stderr, "%s:Error: maximum message size is unacceptable small.\n", progname);
  -                        exit(ERR_EXECUTION);
  -                    }
  +            case 'm': /*POD [B<-m> I<mailfrom>] */
  +                    ctx->option_mailfrom = strdup(optarg);
                   break;
  -            case 'n': /*POD [B<-n> I<hostname>] */
  +            case 'n': /*POD [B<-n> I<nodename>] */
                   if (strlen(optarg) > sizeof(ctx->uname.nodename)-1) {
                           fprintf(stderr, "%s:Error: nodename \"%s\" to long to option -n.\n", progname, optarg);
                           exit(ERR_EXECUTION);
                   }
                   strcpy(ctx->uname.nodename, optarg);
                   break;
  +            case 's': /*POD [B<-s> I<size>] */
  +                    ctx->option_maxmessagesize = atoi(optarg);
  +                    if(ctx->option_maxmessagesize < 64) {
  +                        fprintf(stderr, "%s:Error: maximum message size is unacceptable small.\n", progname);
  +                        exit(ERR_EXECUTION);
  +                    }
               case 't': /*POD [B<-t> I<tracefile>] */
                   ctx->option_tracing = TRUE;
                   trace_read (-1, optarg, 0);
  @@ -688,6 +694,8 @@
           if (ctx->ns[i].h != NULL)
               free(ctx->ns[i].h);
       }
  +    if (ctx->option_mailfrom != NULL)
  +        free(ctx->option_mailfrom);
       if (ctx->cpBindh != NULL)
           free(ctx->cpBindh);
       if (ctx->cpBindp != NULL)
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 lmtp2nntp.pod
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/09/04 09:46:06	1.15
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/09/05 09:14:27	1.16
  @@ -34,18 +34,19 @@
   
   B<lmtp2nntp>
   [B<-V>]
  +[B<-b> I<bindaddr>[I<:port>]
   [B<-d> I<deliverymode>]
   [B<-g> I<groupmode>]
   [B<-h> I<host>[I<:port>][,I<host>[I<:port>], ...]]
  -[B<-m> I<maxmessagesize>]
  -[B<-n> I<hostname>]
  +[B<-m> I<mailfrom>]
  +[B<-n> I<nodename>]
  +[B<-s> I<size>]
   [B<-t> I<tracefile>]
   [B<-v>]
   [B<-w> I<waittime>]
   I<newsgroup> [I<newsgroup> ...]
   
   B<FIXME NOT YET IMPLEMENTED>
  -[B<-b> I<bindaddress>]
   [B<-i> I<messageid>]
   [B<-l> I<logtarget>]
   
  @@ -67,6 +68,14 @@
   
   Print version information.
   
  +=item B<-b> I<bindaddr>[I<:port>]
  +
  +Bind address and/or port to be used by the LMTP client.  If an address is
  +specified but port is omitted the kernel chooses an ephemeral port. If you
  +want to specify a port but no address replace address with 0.0.0.0.  If
  +completely omitted, 0.0.0.0:0 is assumed which causes the kernel to choose an
  +address based on routing information and an ephemeral port.
  +
   =item B<-d> I<deliverymode>
   
   Possible values for I<deliverymode> are C<post>, C<feed> or a string used to
  @@ -107,15 +116,21 @@
   In regard to this program they must provide the same groups and talk to each
   other. 
   
  -=item B<-m> I<maxmessagesize>
  +=item B<-m> I<mailfrom>
   
  -Maximum message size in bytes. Default is 8388608 (8M). Values below 64 are
  -considered unacceptable small.
  +"MAIL From:" filter to limit sender addresses. If ommitted, anyone can send
  +mail. The value to be compared includes the angle brackets. Use a PCRE (Perl
  +compatible reguar expression) for I<mailfrom>.
   
   =item B<-n> I<nodename>
   
   Own FQDN used in LMTP and NNTP protocols. This overrides the nodename returned
   by uname(3).
  +
  +=item B<-s> I<size>
  +
  +Size limitation on message in bytes. Default is 8388608 (8M). Values below 64
  +are considered unacceptable small.
   
   =item B<-t> I<tracefile>
   

From ossp-cvs-owner@ossp.org  Wed Sep  5 12:59:39 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f85AxcO37790; Wed, 5 Sep 2001 12:59:38 +0200 (CEST)
Date: Wed, 5 Sep 2001 12:59:38 +0200 (CEST)
Message-Id: <200109051059.f85AxcO37790@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_channel.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   05-Sep-2001 12:59:37
  Branch: HEAD                             Handle: 2001090511593700

  Modified files:
    ossp-pkg/l2             l2_channel.c

  Log:
    Bring into conformance with new l2_result_t channel handler return standard.

  Summary:
    Revision    Changes     Path
    1.13        +5  -5      ossp-pkg/l2/l2_channel.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_channel.c
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 l2_channel.c
  --- ossp-pkg/l2/l2_channel.c	2001/09/04 15:41:17	1.12
  +++ ossp-pkg/l2/l2_channel.c	2001/09/05 10:59:37	1.13
  @@ -75,7 +75,7 @@
           return L2_ERROR;
       if (ch->state != L2_CHSTATE_CREATED)
           return L2_ERROR;
  -    while (ch != NULL && ch->handler.open == NULL)
  +    while (ch != NULL && ch->handler.open == L2_OK)
           ch = ch->downstream;
       if (ch == NULL)
           return L2_ERROR;
  @@ -97,7 +97,7 @@
           return L2_ERROR;
       if (bufsize == 0)
           return L2_OK;
  -    while (ch != NULL && ch->handler.write == NULL)
  +    while (ch != NULL && ch->handler.write == L2_OK)
           ch = ch->downstream;
       if (ch == NULL)
           return L2_ERROR;
  @@ -113,7 +113,7 @@
           return L2_ERROR;
       if (ch->state != L2_CHSTATE_OPENED)
           return L2_ERROR;
  -    while (ch != NULL && ch->handler.flush == NULL)
  +    while (ch != NULL && ch->handler.flush == L2_OK)
           ch = ch->downstream;
       if (ch == NULL)
           return L2_ERROR;
  @@ -129,7 +129,7 @@
           return L2_ERROR;
       if (ch->state != L2_CHSTATE_OPENED)
           return L2_ERROR;
  -    while (ch != NULL && ch->handler.close == NULL)
  +    while (ch != NULL && ch->handler.close == L2_OK)
           ch = ch->downstream;
       if (ch == NULL)
           return L2_ERROR;
  @@ -148,7 +148,7 @@
       if (ch->state == L2_CHSTATE_OPENED)
           if ((rv = l2_channel_close(ch)) != L2_OK)
               return rv;
  -    while (ch != NULL && ch->handler.destroy == NULL)
  +    while (ch != NULL && ch->handler.destroy == L2_OK)
           ch = ch->downstream;
       if (ch != NULL)
           rv = ch->handler.destroy(&ch->context, ch);

From ossp-cvs-owner@ossp.org  Wed Sep  5 15:32:06 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f85DW5L55078; Wed, 5 Sep 2001 15:32:05 +0200 (CEST)
Date: Wed, 5 Sep 2001 15:32:05 +0200 (CEST)
Message-Id: <200109051332.f85DW5L55078@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 Makefile.in l2.h l2_ut_level.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   05-Sep-2001 15:32:05
  Branch: HEAD                             Handle: 2001090514320400

  Added files:
    ossp-pkg/l2             l2_ut_level.c
  Modified files:
    ossp-pkg/l2             Makefile.in l2.h

  Log:
    added to utility functions for transforming levelmask between string and int and vice versa

  Summary:
    Revision    Changes     Path
    1.14        +2  -1      ossp-pkg/l2/Makefile.in
    1.18        +6  -1      ossp-pkg/l2/l2.h
    1.1         +139 -0     ossp-pkg/l2/l2_ut_level.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 Makefile.in
  --- ossp-pkg/l2/Makefile.in	2001/09/04 14:52:28	1.13
  +++ ossp-pkg/l2/Makefile.in	2001/09/05 13:32:04	1.14
  @@ -76,7 +76,8 @@
       l2_ch_buffer.lo \
       l2_ut_format.lo \
       l2_ut_param.lo \
  -    l2_ut_pcre.lo
  +    l2_ut_pcre.lo \
  +    l2_ut_level.lo
   
   #   file containing the official version information
   _VERSION_FILE = \
  Index: ossp-pkg/l2/l2.h
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 l2.h
  --- ossp-pkg/l2/l2.h	2001/09/05 07:41:18	1.17
  +++ ossp-pkg/l2/l2.h	2001/09/05 13:32:04	1.18
  @@ -72,6 +72,7 @@
       L2_LEVEL_TRACE    = (1 << 6),
       L2_LEVEL_DEBUG    = (1 << 7)
   } l2_level_t;
  +#define L2_LEVEL_CUSTOM(n) (1 << (8+(n))
   
   /* all levels from highest (PANIC) to and including a particular low level */
   #define L2_LEVEL_UPTO(level) \
  @@ -163,6 +164,8 @@
   extern l2_handler_t l2_handler_prefix;
   extern l2_handler_t l2_handler_buffer;
   
  +/* level operations */
  +
   /* channel operations */
   l2_channel_t *l2_channel_create     (l2_handler_t *h);
   l2_result_t   l2_channel_configure  (l2_channel_t *ch, const char *fmt, ...);
  @@ -185,7 +188,9 @@
   l2_result_t   l2_stream_destroy    (l2_stream_t *st);
   
   /* utility operations */
  -l2_result_t   l2_util_setparams(l2_param_t p[], const char *fmt, va_list ap);
  +l2_result_t   l2_util_setparams    (l2_param_t p[], const char *fmt, va_list ap);
  +l2_result_t   l2_util_l2s          (char *string,       size_t maxlen, int sep, unsigned int  levelmask);
  +l2_result_t   l2_util_s2l          (const char *string, size_t maxlen, int sep, unsigned int *levelmask);
   
   #endif /* __L2_H__ */
   
  Index: ossp-pkg/l2/l2_ut_level.c
  ============================================================
  $ cvs update -p -r1.1 l2_ut_level.c
  /*
  **  L2 - OSSP Logging Library
  **  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP L2, a flexible logging library which
  **  can be found at http://www.ossp.org/pkg/l2/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  l2_ut_level.c: level mask transformations
  */
  
  #include "l2.h"
  #include "l2_p.h"
  
  #include <string.h>
  #include <ctype.h>
  
  static struct {
      l2_level_t level;
      char *string;
  } l2s_table[] = {
      { L2_LEVEL_PANIC,    "panic"    },
      { L2_LEVEL_CRITICAL, "critical" },
      { L2_LEVEL_ERROR,    "error"    },
      { L2_LEVEL_WARNING,  "warning"  },
      { L2_LEVEL_NOTICE,   "notice"   },
      { L2_LEVEL_INFO,     "info"     },
      { L2_LEVEL_TRACE,    "trace"    },
      { L2_LEVEL_DEBUG,    "debug"    },
      { 0,                 NULL       }
  };
  
  l2_result_t l2_util_l2s(char *string, size_t maxlen, int sep, unsigned int levelmask)
  {
      char hexbuf[2+(sizeof(unsigned int)*2)+1];
      int len;
      int i;
      int l;
  
      len = maxlen;
      string[0] = '\0';
      for (i = 0; l2s_table[i].level != NULL; i++) {
          if (levelmask & l2s_table[i].level) {
              levelmask &= ~(l2s_table[i].level);
              l = strlen(l2s_table[i].string) + 1;
              if (len < l)
                  return L2_ERROR;
              sprintf(string+(maxlen-len), "%s%c", l2s_table[i].string, sep);
              len -= l;
          }
      }
      if (levelmask != 0) {
          sprintf(hexbuf, "0x%x", levelmask);
          l = strlen(hexbuf) + 1;
          if (len < l)
              return L2_ERROR;
          sprintf(string+(maxlen-len), "%s%c", hexbuf, sep);
          len -= l;
      }
      /* remove trailing comma */
      if ((maxlen-len) > 0)
          string[(maxlen-len)-1] = '\0'; 
  
      return L2_OK;
  }
  
  static unsigned int hexval(const char *cpB, const char *cpE)
  {
      unsigned int hv;
      unsigned int nibble;
  
      hv = 0;
      while (cpB < cpE) {
          nibble = tolower((unsigned int)(*cpB++));
          if (isdigit(nibble)) 
              nibble = nibble - '0';
          else
              nibble = nibble - 'a';
          hv = ((hv << 4) | nibble);
      }
      return hv;
  }
  
  l2_result_t l2_util_s2l(const char *string, size_t maxlen, int sep, unsigned int *levelmask)
  {
      const char *cpB;
      const char *cpE;
      int bFound;
      int i;
  
      *levelmask = 0;
      cpE = string;
      while (1) {
          cpB = cpE;
          if (cpB >= (string+maxlen))
              break;
          if ((int)(*cpB) == sep)
              cpB++;
          for (cpE = cpB; cpE < (string+maxlen) && (int)(*cpE) != sep; cpE++)
              ;
          if (cpE > (string+maxlen))
              break;
          bFound = 0;
          for (i = 0; l2s_table[i].level != NULL; i++) {
              if (strncasecmp(cpB, l2s_table[i].string, cpE-cpB) == 0) {
                  *levelmask |= l2s_table[i].level;
                  bFound = 1;
                  break;
              }
          }
          if (!bFound) {
              if ((cpE > cpB+2) && strncasecmp(cpB, "0x", 2) == 0 && ishexnumber((int)(*(cpB+2)))) {
                  *levelmask |= hexval(cpB+2, cpE);
              }
              else
                  return L2_ERROR;
          }
      }
      return L2_OK;
  }
  

From ossp-cvs-owner@ossp.org  Wed Sep  5 15:33:27 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f85DXQn55201; Wed, 5 Sep 2001 15:33:26 +0200 (CEST)
Date: Wed, 5 Sep 2001 15:33:26 +0200 (CEST)
Message-Id: <200109051333.f85DXQn55201@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 Makefile.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   05-Sep-2001 15:33:26
  Branch: HEAD                             Handle: 2001090514332600

  Modified files:
    ossp-pkg/l2             Makefile.in

  Log:
    fix 'make check'

  Summary:
    Revision    Changes     Path
    1.15        +1  -1      ossp-pkg/l2/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 Makefile.in
  --- ossp-pkg/l2/Makefile.in	2001/09/05 13:32:04	1.14
  +++ ossp-pkg/l2/Makefile.in	2001/09/05 13:33:26	1.15
  @@ -152,7 +152,7 @@
   
   #   (minimalistic) test suite
   check: test
  -test: test-c @TEST_CXX@
  +test: all test-c @TEST_CXX@
   test-c:
   	$(LIBTOOL) --mode=execute ./l2_test
   test-cxx:

From ossp-cvs-owner@ossp.org  Wed Sep  5 15:33:57 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f85DXtU55266; Wed, 5 Sep 2001 15:33:55 +0200 (CEST)
Date: Wed, 5 Sep 2001 15:33:55 +0200 (CEST)
Message-Id: <200109051333.f85DXtU55266@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_stream.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   05-Sep-2001 15:33:55
  Branch: HEAD                             Handle: 2001090514335500

  Modified files:
    ossp-pkg/l2             l2_stream.c

  Log:
    make sure logging message has a trailing newline

  Summary:
    Revision    Changes     Path
    1.12        +11 -1      ossp-pkg/l2/l2_stream.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_stream.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 l2_stream.c
  --- ossp-pkg/l2/l2_stream.c	2001/09/05 07:38:04	1.11
  +++ ossp-pkg/l2/l2_stream.c	2001/09/05 13:33:55	1.12
  @@ -168,12 +168,22 @@
       
       /* format message */
       vfmt.curpos = st->message;
  -    vfmt.endpos = st->message+ L2_MAX_MSGSIZE;
  +    vfmt.endpos = st->message + L2_MAX_MSGSIZE;
       vfmt.data[0].vp = st;
       vfmt.flush  = l2_stream_vlog_flush;
       vfmt.format = l2_stream_vlog_format;
       if ((len = l2_util_format(&vfmt, fmt, ap)) == -1)
           return L2_ERROR;
  +    if (len == 0)
  +        return L2_ERROR;
  +
  +    /* make sure a trailing newline exists */
  +    if (st->message[len-1] != '\n') {
  +        if (len == L2_MAX_MSGSIZE)
  +            return L2_ERROR;
  +        st->message[len++] = '\n';
  +        st->message[len]   = '\0';
  +    }
   
       rv = L2_OK;
       for (i = 0; i < L2_MAX_CHANNELS && st->channels[i].ch != NULL; i++) {

From ossp-cvs-owner@ossp.org  Wed Sep  5 15:34:59 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f85DYxM55371; Wed, 5 Sep 2001 15:34:59 +0200 (CEST)
Date: Wed, 5 Sep 2001 15:34:59 +0200 (CEST)
Message-Id: <200109051334.f85DYxM55371@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ut_param.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   05-Sep-2001 15:34:58
  Branch: HEAD                             Handle: 2001090514345800

  Modified files:
    ossp-pkg/l2             l2_ut_param.c

  Log:
    fix L2_TYPE_STRING: argument can be NULL

  Summary:
    Revision    Changes     Path
    1.3         +3  -1      ossp-pkg/l2/l2_ut_param.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ut_param.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2_ut_param.c
  --- ossp-pkg/l2/l2_ut_param.c	2001/09/05 07:41:18	1.2
  +++ ossp-pkg/l2/l2_ut_param.c	2001/09/05 13:34:58	1.3
  @@ -86,7 +86,9 @@
                           *(double *)(pa[i].store) = va_get(ap, double); 
                           break;
                       case L2_TYPE_STRING:
  -                        *(char **)(pa[i].store) = strdup(va_get(ap, charptr)); 
  +                        *(char **)(pa[i].store) = va_get(ap, charptr);
  +                        if (*(char **)(pa[i].store) != NULL)
  +                            *(char **)(pa[i].store) = strdup(*(char **)(pa[i].store));
                           break;
                       case L2_TYPE_CHARPTR:
                           *(char **)(pa[i].store) = va_get(ap, charptr); 

From ossp-cvs-owner@ossp.org  Wed Sep  5 15:56:13 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f85DuC757656; Wed, 5 Sep 2001 15:56:12 +0200 (CEST)
Date: Wed, 5 Sep 2001 15:56:12 +0200 (CEST)
Message-Id: <200109051356.f85DuC757656@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_channel.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   05-Sep-2001 15:56:12
  Branch: HEAD                             Handle: 2001090514561200

  Modified files:
    ossp-pkg/l2             l2_channel.c

  Log:
    Bugfix channel API: L2_OK -> NULL, states have to be remembered for
    all channels in a stack, not just the last found one.

  Summary:
    Revision    Changes     Path
    1.14        +23 -9      ossp-pkg/l2/l2_channel.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_channel.c
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 l2_channel.c
  --- ossp-pkg/l2/l2_channel.c	2001/09/05 10:59:37	1.13
  +++ ossp-pkg/l2/l2_channel.c	2001/09/05 13:56:12	1.14
  @@ -70,18 +70,25 @@
   l2_result_t l2_channel_open(l2_channel_t *ch)
   {
       l2_result_t rv;
  +    l2_channel_t *chFirst;
   
       if (ch == NULL)
           return L2_ERROR;
       if (ch->state != L2_CHSTATE_CREATED)
           return L2_ERROR;
  -    while (ch != NULL && ch->handler.open == L2_OK)
  +    chFirst = ch;
  +    while (ch != NULL && ch->handler.open == NULL)
           ch = ch->downstream;
       if (ch == NULL)
           return L2_ERROR;
       rv = ch->handler.open(&ch->context, ch);
  -    if (rv == L2_OK)
  -        ch->state = L2_CHSTATE_OPENED;
  +    if (rv == L2_OK) {
  +        ch = chFirst;
  +        do {
  +            ch->state = L2_CHSTATE_OPENED;
  +            ch = ch->downstream;
  +        } while (ch != NULL);
  +    }
       return rv;
   }
   
  @@ -97,7 +104,7 @@
           return L2_ERROR;
       if (bufsize == 0)
           return L2_OK;
  -    while (ch != NULL && ch->handler.write == L2_OK)
  +    while (ch != NULL && ch->handler.write == NULL)
           ch = ch->downstream;
       if (ch == NULL)
           return L2_ERROR;
  @@ -113,7 +120,7 @@
           return L2_ERROR;
       if (ch->state != L2_CHSTATE_OPENED)
           return L2_ERROR;
  -    while (ch != NULL && ch->handler.flush == L2_OK)
  +    while (ch != NULL && ch->handler.flush == NULL)
           ch = ch->downstream;
       if (ch == NULL)
           return L2_ERROR;
  @@ -124,18 +131,25 @@
   l2_result_t l2_channel_close(l2_channel_t *ch)
   {
       l2_result_t rv;
  +    l2_channel_t *chFirst;
   
       if (ch == NULL)
           return L2_ERROR;
  +    chFirst = ch;
       if (ch->state != L2_CHSTATE_OPENED)
           return L2_ERROR;
  -    while (ch != NULL && ch->handler.close == L2_OK)
  +    while (ch != NULL && ch->handler.close == NULL)
           ch = ch->downstream;
       if (ch == NULL)
           return L2_ERROR;
       rv = ch->handler.close(&ch->context, ch);
  -    if (rv == L2_OK)
  -        ch->state = L2_CHSTATE_CREATED;
  +    if (rv == L2_OK) {
  +        ch = chFirst;
  +        do {
  +            ch->state = L2_CHSTATE_CREATED;
  +            ch = ch->downstream;
  +        } while (ch != NULL);
  +    }
       return rv;
   }
   
  @@ -148,7 +162,7 @@
       if (ch->state == L2_CHSTATE_OPENED)
           if ((rv = l2_channel_close(ch)) != L2_OK)
               return rv;
  -    while (ch != NULL && ch->handler.destroy == L2_OK)
  +    while (ch != NULL && ch->handler.destroy == NULL)
           ch = ch->downstream;
       if (ch != NULL)
           rv = ch->handler.destroy(&ch->context, ch);

From ossp-cvs-owner@ossp.org  Wed Sep  5 15:56:45 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f85Duin57729; Wed, 5 Sep 2001 15:56:44 +0200 (CEST)
Date: Wed, 5 Sep 2001 15:56:44 +0200 (CEST)
Message-Id: <200109051356.f85Duin57729@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_prefix.c l2_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   05-Sep-2001 15:56:44
  Branch: HEAD                             Handle: 2001090514564300

  Modified files:
    ossp-pkg/l2             l2_ch_prefix.c l2_test.c

  Log:
    Implemented prefix channel plus mini test.

  Summary:
    Revision    Changes     Path
    1.8         +88 -18     ossp-pkg/l2/l2_ch_prefix.c
    1.12        +15 -4      ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_prefix.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 l2_ch_prefix.c
  --- ossp-pkg/l2/l2_ch_prefix.c	2001/09/05 07:47:12	1.7
  +++ ossp-pkg/l2/l2_ch_prefix.c	2001/09/05 13:56:43	1.8
  @@ -27,52 +27,122 @@
   **  l2_ch_prefix.c: prefixing channel implementation
   */
   
  +#include <time.h>
  +
   #include "l2.h"
   
  +/* declare private channel configuration */
  +typedef struct {
  +    char *timefmt;
  +    char *timezone;
  +    char  timebuf[1024];
  +} l2_ch_prefix_t;
  +
  +/* create channel */
   static l2_result_t hook_create(l2_context_t *ctx, l2_channel_t *ch)
   {
  +    l2_ch_prefix_t *cfg;
  +
  +    /* allocate private channel configuration */
  +    if ((cfg = (l2_ch_prefix_t *)malloc(sizeof(l2_ch_prefix_t))) == NULL)
  +        return L2_ERROR;
  +
  +    /* initialize configuration with reasonable defaults */
  +    cfg->timefmt  = NULL;
  +    cfg->timezone = strdup("local");
  +
  +    /* link private channel configuration into channel context */
  +    ctx->vp = cfg;
  +
       return L2_OK;
   }
   
  +/* configure channel */
   static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
  -    return L2_OK;
  -}
  +    l2_ch_prefix_t *cfg = (l2_ch_prefix_t *)ctx->vp;
  +    l2_param_t pa[3]; 
  +    l2_result_t rv;
  +
  +    /* feed and call generic parameter parsing engine */
  +    L2_PARAM_SET(pa[0], timefmt,  STRING, &cfg->timefmt);
  +    L2_PARAM_SET(pa[1], timezone, STRING, &cfg->timezone);
  +    L2_PARAM_END(pa[2]);
  +    rv = l2_util_setparams(pa, fmt, ap);
  +
  +    /* argument consistency check */
  +    if (rv == L2_OK) {
  +        if (cfg->timezone == NULL)
  +            return L2_ERROR;
  +        if (!(   strcmp(cfg->timezone, "local") == 0 
  +              || strcmp(cfg->timezone, "utc")   == 0))
  +            return L2_ERROR;
  +    }
   
  -static l2_result_t hook_open(l2_context_t *ctx, l2_channel_t *ch)
  -{
  -    return L2_OK;
  +    return rv;
   }
   
  +/* write to channel */
   static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch, 
  -                      const char *buf, size_t buf_size)
  +                              const char *buf, size_t buf_size)
   {
  -    return L2_OK;
  -}
  +    l2_ch_prefix_t *cfg;
  +    l2_channel_t *downstream;
  +    time_t t;
  +    struct tm *tm;
  +    size_t n;
  +    l2_result_t rv;
  +
  +    /* get environment */
  +    cfg = (l2_ch_prefix_t *)ctx->vp;
  +    downstream = l2_channel_downstream(ch);
  +
  +    /* optionally provide prefix */
  +    if (cfg->timefmt != NULL) {
  +        t = time(NULL);
  +        if (strcmp(cfg->timezone, "local") == 0)
  +            tm = localtime(&t);
  +        else if (strcmp(cfg->timezone, "utc") == 0)
  +            tm = gmtime(&t);
  +        else
  +            return L2_ERROR;
  +        if ((n = strftime(cfg->timebuf, sizeof(cfg->timebuf), cfg->timefmt, tm)) == 0)
  +            return L2_ERROR;
  +        if ((rv = l2_channel_write(downstream, cfg->timebuf, n)) != L2_OK)
  +            return rv;
  +    }
  +
  +    /* write to downstream channel */
  +    if ((rv = l2_channel_write(downstream, buf, buf_size)) != L2_OK)
  +        return rv;
   
  -static l2_result_t hook_flush(l2_context_t *ctx, l2_channel_t *ch)
  -{
       return L2_OK;
   }
   
  -static l2_result_t hook_close(l2_context_t *ctx, l2_channel_t *ch)
  -{
  -    return L2_OK;
  -}
  -
  +/* destroy channel */
   static l2_result_t hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
   {
  +    l2_ch_prefix_t *cfg = (l2_ch_prefix_t *)ctx->vp;
  +
  +    if (cfg->timefmt != NULL)
  +        free(cfg->timefmt);
  +    if (cfg->timezone != NULL)
  +        free(cfg->timezone);
  +    free(cfg);
  +    ctx->vp = NULL;
  +
       return L2_OK;
   }
   
  +/* exported channel handler structure */
   l2_handler_t l2_handler_prefix = {
       L2_CHANNEL_FILTER,
       hook_create,
       hook_configure,
  -    hook_open,
  +    NULL,
       hook_write,
  -    hook_flush,
  -    hook_close,
  +    NULL,
  +    NULL,
       hook_destroy
   };
   
  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/09/04 19:35:20	1.11
  +++ ossp-pkg/l2/l2_test.c	2001/09/05 13:56:43	1.12
  @@ -62,6 +62,7 @@
   
   int main(int argc, char *argv[])
   {
  +    l2_channel_t *chPrefix;
       l2_channel_t *chBuf;
       l2_channel_t *chFile;
       l2_channel_t *chSock;
  @@ -94,6 +95,13 @@
       if (l2_stream_channel(st, chSock, L2_LEVEL_UPTO(L2_LEVEL_WARNING)) != L2_OK)
           die("failed to attach first channel into stream");
   */
  +
  +    if ((chPrefix  = l2_channel_create(&l2_handler_prefix)) == NULL) /* Prefix */
  +        die("failed to create prefix channel");
  +
  +    if (l2_channel_configure(chPrefix, "timefmt,timezone", "[%d-%m-%Y/%H:%M:%S] ", "local") != L2_OK)
  +        die("failed to configure prefix channel");
  +
       if ((chBuf  = l2_channel_create(&l2_handler_buffer)) == NULL) /* Buffer */
           die("failed to create buffer channel");
   
  @@ -108,12 +116,15 @@
   
       if (l2_channel_stack(chFile, chBuf) != L2_OK)
           die("failed to stack buffer channel on top of file channel");
  +    
  +    if (l2_channel_stack(chBuf, chPrefix) != L2_OK)
  +        die("failed to stack prefix channel on top of buffer channel");
   
  -    if (l2_channel_open(chBuf) != L2_OK)
  -        die("failed to open buffer channel");
  +    if (l2_channel_open(chPrefix) != L2_OK)
  +        die("failed to open channel stack");
   
  -    if (l2_stream_channel(st, chBuf, L2_LEVEL_UPTO(L2_LEVEL_WARNING)) != L2_OK)
  -        die("failed to attach second channel into stream");
  +    if (l2_stream_channel(st, chPrefix, L2_LEVEL_UPTO(L2_LEVEL_WARNING)) != L2_OK)
  +        die("failed to attach channel stack into stream");
   
       if (l2_stream_levels(st, L2_LEVEL_UPTO(L2_LEVEL_WARNING)) != L2_OK)
           die("failed to set global logging level");

From ossp-cvs-owner@ossp.org  Wed Sep  5 16:10:02 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f85EA1m59650; Wed, 5 Sep 2001 16:10:01 +0200 (CEST)
Date: Wed, 5 Sep 2001 16:10:01 +0200 (CEST)
Message-Id: <200109051410.f85EA1m59650@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_stream.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   05-Sep-2001 16:10:01
  Branch: HEAD                             Handle: 2001090515100000

  Modified files:
    ossp-pkg/l2             l2_stream.c

  Log:
    fix bit-check

  Summary:
    Revision    Changes     Path
    1.13        +3  -2      ossp-pkg/l2/l2_stream.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_stream.c
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 l2_stream.c
  --- ossp-pkg/l2/l2_stream.c	2001/09/05 13:33:55	1.12
  +++ ossp-pkg/l2/l2_stream.c	2001/09/05 14:10:00	1.13
  @@ -158,14 +158,15 @@
   
       /* make sure only a single level is specified */
       for (l = level, j = 0; l != 0; l = (l >> 1))
  -        j++;
  +        if (l & 0x1)
  +            j++;
       if (j != 1)
           return L2_ERROR;
   
       /* check whether level is globally enabled */
       if (!(st->levelmask & level))
           return L2_OK;
  -    
  +
       /* format message */
       vfmt.curpos = st->message;
       vfmt.endpos = st->message + L2_MAX_MSGSIZE;

From ossp-cvs-owner@ossp.org  Wed Sep  5 17:02:00 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f85F1wr65458; Wed, 5 Sep 2001 17:01:58 +0200 (CEST)
Date: Wed, 5 Sep 2001 17:01:58 +0200 (CEST)
Message-Id: <200109051501.f85F1wr65458@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c lmtp2nntp.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   05-Sep-2001 17:01:58
  Branch: HEAD                             Handle: 2001090516015700

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c lmtp2nntp.pod

  Log:
    flush pending (unfinished) work.

  Summary:
    Revision    Changes     Path
    1.41        +104 -14    ossp-pkg/lmtp2nntp/lmtp2nntp.c
    1.17        +8  -0      ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.40 -r1.41 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/05 09:14:26	1.40
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/05 15:01:57	1.41
  @@ -37,6 +37,7 @@
   #include "str.h"
   #include "argz.h"
   #include "shpat_match.h"
  +#include "l2/l2.h" //FIXME
   
   /* own headers */
   #ifdef HAVE_CONFIG_H
  @@ -113,6 +114,8 @@
       int             option_maxmessagesize;
       int             option_waittime;
       char           *option_mailfrom;
  +    unsigned int    option_levelmask;
  +    l2_stream_t    *l2;
       char           *cpBindh;
       char           *cpBindp;
       sa_t           *saBind;
  @@ -171,18 +174,20 @@
   
   int main(int argc, char **argv)
   {
  -    int          rc = 0;
  -    lmtp_t      *lmtp;
  -    lmtp_io_t    lmtp_io;
  -    lmtp2nntp_t *ctx;
  -    int          i;             /* general purpose scratch int, index ... */
  -    char        *cp;            /* general purpose character pointer */
  -    char        *progname;
  -    char        *azHosts;
  -    size_t       asHosts;
  -    char        *cpHost;
  -    char        *cpPort;
  -    sa_t        *sa;
  +    lmtp_t       *lmtp;
  +    lmtp_io_t     lmtp_io;
  +    lmtp2nntp_t  *ctx;
  +    int           i;             /* general purpose scratch int, index ... */
  +    char         *cp;            /* general purpose character pointer */
  +    char         *progname;
  +    char         *azHosts;
  +    size_t        asHosts;
  +    char         *cpHost;
  +    char         *cpPort;
  +    sa_t         *sa;
  +    l2_channel_t *chPrefix;
  +    l2_channel_t *chBuf;
  +    l2_channel_t *chFile;
   
       progname = argv[0];
   
  @@ -198,6 +203,8 @@
       ctx->option_maxmessagesize = 8 * 1024 * 1024;
       ctx->option_waittime = -1;
       ctx->option_mailfrom = NULL;
  +    ctx->option_levelmask = L2_LEVEL_UPTO(L2_LEVEL_ERROR);
  +    ctx->l2 = NULL;
       ctx->cpBindh = NULL;
       ctx->cpBindp = NULL;
       ctx->saBind = NULL;
  @@ -234,6 +241,57 @@
       }
   #endif
   
  +    if ((ctx->l2 = l2_stream_create()) == NULL) {
  +        fprintf(stderr, "%s:Error: logging failed to create stream\n", progname);
  +        exit(ERR_EXECUTION);
  +    }
  +
  +    if ((chPrefix  = l2_channel_create(&l2_handler_prefix)) == NULL) {
  +        fprintf(stderr, "%s:Error: logging failed to create prefix channel\n", progname);
  +        exit(ERR_EXECUTION);
  +    }
  +    if (l2_channel_configure(chPrefix, "timefmt,timezone", "[%d-%m-%Y/%H:%M:%S] ", "local") != L2_OK) {
  +        fprintf(stderr, "%s:Error: logging failed to configure prefix channel\n", progname);
  +        exit(ERR_EXECUTION);
  +    }
  +
  +    if ((chBuf  = l2_channel_create(&l2_handler_buffer)) == NULL) {
  +        fprintf(stderr, "%s:Error: logging failed to create buffer channel\n", progname);
  +        exit(ERR_EXECUTION);
  +    }
  +    if (l2_channel_configure(chBuf, "size", 4096) != L2_OK) {
  +        fprintf(stderr, "%s:Error: logging failed to configure buffer channel\n", progname);
  +        exit(ERR_EXECUTION);
  +    }
  +
  +    if ((chFile = l2_channel_create(&l2_handler_file)) == NULL) {
  +        fprintf(stderr, "%s:Error: logging failed to create file channel\n", progname);
  +        exit(ERR_EXECUTION);
  +    }
  +    if (l2_channel_configure(chFile, "path,append,perm", "logtest", TRUE, 0644) != L2_OK) {
  +        fprintf(stderr, "%s:Error: logging failed to configure file channel\n", progname);
  +        exit(ERR_EXECUTION);
  +    }
  +
  +    if (l2_channel_stack(chFile, chBuf) != L2_OK) {
  +        fprintf(stderr, "%s:Error: logging failed to stack buffer channel on top of file channel\n", progname);
  +        exit(ERR_EXECUTION);
  +    }
  +    if (l2_channel_stack(chBuf, chPrefix) != L2_OK) {
  +        fprintf(stderr, "%s:Error: logging failed to stack prefix channel on top of buffer channel\n", progname);
  +        exit(ERR_EXECUTION);
  +    }
  +
  +    if (l2_channel_open(chPrefix) != L2_OK) {
  +        fprintf(stderr, "%s:Error: logging failed to open buffer channel\n", progname);
  +        exit(ERR_EXECUTION);
  +    }
  +
  +    if (l2_stream_channel(ctx->l2, chPrefix, L2_LEVEL_UPTO(L2_LEVEL_DEBUG)) != L2_OK) {
  +        fprintf(stderr, "%s:Error: logging failed to attach channel into stream\n", progname);
  +        exit(ERR_EXECUTION);
  +    }
  +
       /*POD B<lmtp2nntp> */
   
       /*  use
  @@ -242,8 +300,15 @@
        */
   
       /* read in the arguments */
  -    while ((i = getopt(argc, argv, "Vb:d:g:h:m:n:s:t:vw:")) != -1) {
  +    while ((i = getopt(argc, argv, "L:Vb:d:g:h:l:m:n:s:t:vw:")) != -1) {
           switch (i) {
  +            case 'L': /*POD B<-L> I<level>*/
  +                if (l2_util_s2l(optarg, strlen(optarg), ',', &ctx->option_levelmask) != L2_OK) {
  +                    fprintf(stderr, "%s:Error: Invalid format \"%s\" to option -L\n", progname, optarg);
  +                    exit(ERR_EXECUTION);
  +                }
  +                //FIXME
  +                break;
               case 'V': /*POD [B<-V>] (version)*/
                   fprintf(stdout, "%s\n", lmtp2nntp_version.v_gnu);
                   exit(0);
  @@ -420,6 +485,26 @@
           argz_add(&ctx->azGroupargs, &ctx->asGroupargs, argv[i]);
       }
   
  +    /* initialize L2 logging context */
  +    fprintf(stderr, "DEBUG: ctx->option_levelmask=0x%x\n", ctx->option_levelmask);
  +    if (l2_stream_levels(ctx->l2, ctx->option_levelmask) != L2_OK) {
  +        fprintf(stderr, "%s:Error: logging failed to set global logging level\n", progname);
  +        exit(ERR_EXECUTION);
  +    }
  +
  +    if (l2_stream_log(ctx->l2, L2_LEVEL_INFO, "%s: Startup", progname) != L2_OK) {
  +        fprintf(stderr, "%s:Error: logging failed to log \"Startup\" message to stream\n", progname);
  +        exit(ERR_EXECUTION);
  +    }
  +    if (l2_stream_log(ctx->l2, L2_LEVEL_DEBUG, "%s: Startup DEBUG-test", progname) != L2_OK) {
  +        fprintf(stderr, "%s:Error: logging failed to log \"Startup\" message to stream\n", progname);
  +        exit(ERR_EXECUTION);
  +    }
  +    if (l2_stream_log(ctx->l2, L2_LEVEL_PANIC, "%s: Startup PANIC-test", progname) != L2_OK) {
  +        fprintf(stderr, "%s:Error: logging failed to log \"Startup\" message to stream\n", progname);
  +        exit(ERR_EXECUTION);
  +    }
  +
       /* initialize LMTP context */
       lmtp_io.select = NULL;
       lmtp_io.read   = trace_read;
  @@ -463,8 +548,13 @@
       if (ctx != NULL)
           free(ctx);
       str_parse(NULL, NULL);
  +
  +    if (l2_stream_destroy(ctx->l2) != L2_OK) {
  +        fprintf(stderr, "%s:Error: logging failed to destroy stream\n", progname);
  +        exit(ERR_EXECUTION);
  +    }
   
  -    return rc;
  +    return 0;
   }
   
   /* taken from "UNIX Network Programming", Volume 1, second edition W. Richard
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 lmtp2nntp.pod
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/09/05 09:14:27	1.16
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/09/05 15:01:57	1.17
  @@ -178,8 +178,16 @@
   
   =item B<-l> C<file:>I<localfile>
   
  +
   Logging target. This option can be specified more than once. Default is no
   logging. Default I<facility> for C<syslog:> is C<lmtp2nntp>.
  +
  +=item B<-L> I<level>
  +
  +Logging level. Default is C<warn>. Possible levels from highest priority with
  +least output to lowest priority with most most outpout are C<panic>,
  +C<critical>, C<error>, C<warning>, C<notice>, C<info>, C<trace>, C<debug>
  +where the chosen level includes all levels with higher priority.
   
   =back
   

From ossp-cvs-owner@ossp.org  Wed Sep  5 18:15:40 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f85GFcj73655; Wed, 5 Sep 2001 18:15:38 +0200 (CEST)
Date: Wed, 5 Sep 2001 18:15:38 +0200 (CEST)
Message-Id: <200109051615.f85GFcj73655@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_socket.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   05-Sep-2001 18:15:38
  Branch: HEAD                             Handle: 2001090517153800

  Modified files:
    ossp-pkg/l2             l2_ch_socket.c

  Log:
    Gethostbyname2() is not yet stable across platforms, and actually unnecessary
    in this case.

  Summary:
    Revision    Changes     Path
    1.13        +6  -2      ossp-pkg/l2/l2_ch_socket.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_socket.c
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 l2_ch_socket.c
  --- ossp-pkg/l2/l2_ch_socket.c	2001/09/05 07:47:12	1.12
  +++ ossp-pkg/l2/l2_ch_socket.c	2001/09/05 16:15:38	1.13
  @@ -39,7 +39,11 @@
   
   #define HAVE_INET_ATON
   #ifndef HAVE_INET_PTON
  -#ifdef HAVE_INET_ATON
  +#ifdef  HAVE_INET_ATON
  +
  +/******************************************************************
  +IPv4 source used from Unix Network Programming by Richard STEVENS
  + ******************************************************************/
   static int inet_pton(int iFamily, const char *pszAddress, void *pvMemref)
   {
       int             i    = 0;
  @@ -205,7 +209,7 @@
           }
   
           /* resolve host nominally */
  -        else if ((pHostentry = gethostbyname2(cfg->pszHost, AF_INET6)) != NULL)
  +        else if (pHostentry = gethostbyname(cfg->pszHost) != NULL)
           {
               if (pHostentry->h_addrtype == AF_INET6)
               {

From ossp-cvs-owner@ossp.org  Wed Sep  5 18:15:50 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f85GFnL73700; Wed, 5 Sep 2001 18:15:49 +0200 (CEST)
Date: Wed, 5 Sep 2001 18:15:49 +0200 (CEST)
Message-Id: <200109051615.f85GFnL73700@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_sockmon.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   05-Sep-2001 18:15:49
  Branch: HEAD                             Handle: 2001090517154800

  Added files:
    ossp-pkg/l2             l2_sockmon.c

  Log:
    Added socket monitoring tool for testing the socket channel handler.

  Summary:
    Revision    Changes     Path
    1.1         +129 -0     ossp-pkg/l2/l2_sockmon.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_sockmon.c
  ============================================================
  $ cvs update -p -r1.1 l2_sockmon.c
  /*
  **  L2 - OSSP Logging Library
  **  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP L2, a flexible logging library which
  **  can be found at http://www.ossp.org/pkg/l2/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  l2_sockmon.c: Socket monitor for use with l2_test.c
  */
  
  #include <sys/types.h>
  #include <sys/socket.h>
  #include <netinet/in.h>
  #include <stdio.h>
  #include <errno.h>
  
  #define BACKLOG 1024    /* max # pending connections */
  #define BUFFSIZ 256     /* max string size           */
  
  void do_work(int sock)
  {
      char buf[BUFFSIZ];
      int  cc;
  
  /*    ASSERT(sock); */
  
      while (1) { /* Exits when read finishes */
          cc = read(sock, buf, sizeof (buf));
          if (cc == -1) {
              perror("read");
              exit(1);
          }
  
          if (cc == 0) {
              /* EOF */
              (void) close(sock);
              (void) printf("Connection closed\n");
              return;
          }
  
          buf[cc + 1] = '\0';
          (void) printf("Read: %s", buf);
  
          if (write(sock, buf, cc) == -1) {
              perror("write");
              exit(1);
          }
      }
  }
  
  int myserver(int port)
  {
      struct sockaddr_in  laddr,   faddr             ;
      int                 sock,    new_sock, sock_opt;
      socklen_t           faddrlen                   ;
  
  /*    ASSERT(port); */
      /* Set up an IPv4 TCP socket to listen on for connections. */
      laddr.sin_family      = AF_INET;
      laddr.sin_port        = port;
      laddr.sin_addr.s_addr = INADDR_ANY;
      sock                  = socket(PF_INET, SOCK_STREAM, 0);
  
      if (sock == -1) {
          perror("socket");
          return (-1);
      }
  
      /* Tell the system to allow local addresses to be reused. */
      sock_opt = 1;
      if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (void *)&sock_opt, sizeof (sock_opt)) == -1) {
          perror("setsockopt(SO_REUSEADDR)");
          (void) close(sock);
          return (-1);
      }
      if (bind(sock, (struct sockaddr *)&laddr, sizeof (laddr)) == -1) {
          perror("bind"); /* Bad bind */
          (void) close(sock);
          return (-1);
          }
      if (listen(sock, BACKLOG) == -1) {
          perror("listen"); /* Listen just blew up */
          (void) close(sock);
          return (-1);
      }
      /* Wait for a connection request. */
      for (;;) {
          faddrlen = sizeof (faddr);
          new_sock = accept(sock, (struct sockaddr *)&faddr, &faddrlen);
          if (new_sock == -1) {
              if (errno != EINTR && errno != ECONNABORTED) {
                  perror("accept");
              }
              continue;
          }
          (void) printf("Connection from %s/%d\n", inet_ntoa(faddr.sin_addr), ntohs(faddr.sin_port));
          do_work(new_sock);  /* do some sockwork */
      }
      /*NOTREACHED*/
  }
  
  int main(int argc, char *argv[])
  {
      if (argc != 2) {
          (void) fprintf(stderr, "Usage: %s <port>\n", argv[0]);
          exit(1); /* Dink donk if the user doesn't know how to use this */
      }
      (void) myserver(htons(atoi(argv[1])));
      return 0;
  }

From ossp-cvs-owner@ossp.org  Wed Sep  5 21:58:46 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f85Jwim97738; Wed, 5 Sep 2001 21:58:44 +0200 (CEST)
Date: Wed, 5 Sep 2001 21:58:44 +0200 (CEST)
Message-Id: <200109051958.f85Jwim97738@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_channel.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   05-Sep-2001 21:58:44
  Branch: HEAD                             Handle: 2001090520584400

  Modified files:
    ossp-pkg/l2             l2_channel.c

  Log:
    Perform the channel state tagging immediately for a channel and not
    afterwards. Functionality-wise this is the same, but semantically it is
    more clean.

  Summary:
    Revision    Changes     Path
    1.15        +10 -20     ossp-pkg/l2/l2_channel.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_channel.c
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 l2_channel.c
  --- ossp-pkg/l2/l2_channel.c	2001/09/05 13:56:12	1.14
  +++ ossp-pkg/l2/l2_channel.c	2001/09/05 19:58:44	1.15
  @@ -70,25 +70,20 @@
   l2_result_t l2_channel_open(l2_channel_t *ch)
   {
       l2_result_t rv;
  -    l2_channel_t *chFirst;
   
       if (ch == NULL)
           return L2_ERROR;
       if (ch->state != L2_CHSTATE_CREATED)
           return L2_ERROR;
  -    chFirst = ch;
  -    while (ch != NULL && ch->handler.open == NULL)
  +    while (ch != NULL && ch->handler.open == NULL) {
  +        ch->state = L2_CHSTATE_OPENED;
           ch = ch->downstream;
  +    }
       if (ch == NULL)
           return L2_ERROR;
       rv = ch->handler.open(&ch->context, ch);
  -    if (rv == L2_OK) {
  -        ch = chFirst;
  -        do {
  -            ch->state = L2_CHSTATE_OPENED;
  -            ch = ch->downstream;
  -        } while (ch != NULL);
  -    }
  +    if (rv == L2_OK)
  +        ch->state = L2_CHSTATE_OPENED;
       return rv;
   }
   
  @@ -131,25 +126,20 @@
   l2_result_t l2_channel_close(l2_channel_t *ch)
   {
       l2_result_t rv;
  -    l2_channel_t *chFirst;
   
       if (ch == NULL)
           return L2_ERROR;
  -    chFirst = ch;
       if (ch->state != L2_CHSTATE_OPENED)
           return L2_ERROR;
  -    while (ch != NULL && ch->handler.close == NULL)
  +    while (ch != NULL && ch->handler.close == NULL) {
  +        ch->state = L2_CHSTATE_CREATED;
           ch = ch->downstream;
  +    }
       if (ch == NULL)
           return L2_ERROR;
       rv = ch->handler.close(&ch->context, ch);
  -    if (rv == L2_OK) {
  -        ch = chFirst;
  -        do {
  -            ch->state = L2_CHSTATE_CREATED;
  -            ch = ch->downstream;
  -        } while (ch != NULL);
  -    }
  +    if (rv == L2_OK)
  +        ch->state = L2_CHSTATE_CREATED;
       return rv;
   }
   

From ossp-cvs-owner@ossp.org  Thu Sep  6 13:47:53 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f86BlpC09076; Thu, 6 Sep 2001 13:47:51 +0200 (CEST)
Date: Thu, 6 Sep 2001 13:47:51 +0200 (CEST)
Message-Id: <200109061147.f86BlpC09076@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_buffer.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   06-Sep-2001 13:47:51
  Branch: HEAD                             Handle: 2001090612475100

  Modified files:
    ossp-pkg/l2             l2_ch_buffer.c

  Log:
    Fix buffer channel: in case the buffer is full, the "write" operation
    has to flush it instead of complaining, of course.

  Summary:
    Revision    Changes     Path
    1.15        +14 -2      ossp-pkg/l2/l2_ch_buffer.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_buffer.c
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 l2_ch_buffer.c
  --- ossp-pkg/l2/l2_ch_buffer.c	2001/09/05 07:47:12	1.14
  +++ ossp-pkg/l2/l2_ch_buffer.c	2001/09/06 11:47:51	1.15
  @@ -107,13 +107,25 @@
   static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch, 
                         const char *buf, size_t bufsize)
   {
  +    l2_channel_t *downstream = l2_channel_downstream(ch);
       l2_ch_buffer_t *cfg;
  +    l2_result_t rv;
   
       /* parameter checks */
       if ((cfg = (l2_ch_buffer_t *)ctx->vp) == NULL)
           return L2_ERROR;
  -    if (bufsize > (cfg->bufsize - cfg->bufpos))
  -        return L2_ERROR; /* The buffer is too small */
  +
  +    if (bufsize > (cfg->bufsize - cfg->bufpos)) {
  +        /* flush buffer if necessary */
  +        if (cfg->bufpos > 0) {
  +            if ((rv = l2_channel_write(downstream, cfg->buf, cfg->bufpos)) != L2_OK)
  +                return rv;
  +            cfg->bufpos = 0;
  +        }
  +        /* pass through immediately to downstream if still too large */
  +        if (bufsize > cfg->bufsize)
  +            return l2_channel_write(downstream, buf, bufsize);
  +    }
   
       /* write message to channel buffer */
       memcpy(cfg->buf+cfg->bufpos, buf, bufsize);

From ossp-cvs-owner@ossp.org  Thu Sep  6 13:56:17 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f86BuGM09995; Thu, 6 Sep 2001 13:56:16 +0200 (CEST)
Date: Thu, 6 Sep 2001 13:56:16 +0200 (CEST)
Message-Id: <200109061156.f86BuGM09995@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 Makefile.in l2.h l2_test.c l2_ut_fmtcb.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   06-Sep-2001 13:56:16
  Branch: HEAD                             Handle: 2001090612561500

  Added files:
    ossp-pkg/l2             l2_ut_fmtcb.c
  Modified files:
    ossp-pkg/l2             Makefile.in l2.h l2_test.c

  Log:
    Add two cool extra formatter functions ;)
    
    l2_util_fmt_string:
       This can be used like %s, but instead of fetching only a "char *"
       from the var-args stack, it fetches a "char *" plus a "size_t" and
       this way allows one to log only a sub-string of a larger string
       without the need for any temporary buffers, etc.
    
    l2_util_fmt_dump:
       This can be used as "%{type}X" for dumping arbitrary octets. The
       parameter "type" can be either "text" (the default if only "%X"
       is used) for dumping the octets as text but with non-printable
       characters replaced by "\xXX" constructs; "hex" for dumping the
       octets in hexadecimal as "XX:XX:XX:XX" or "base64" for dumping the
       octets Base64 encoded. All three are intended for making it easier to
       produce reasonable L2_LEVEL_DEBUG messages without having to fiddle
       around with temporary buffers and having to care with non-printable
       characters.
    
    For instance, using...
    
          :
      l2_stream_formatter(st, 'D', l2_util_fmt_dump, NULL);
          :
      l2_stream_vlog(st, L2_LEVEL_DEBUG, "%{text}D %{hex}D %{base64}D\n",
                     "foo", 12345, "foo\1bar", 7, "foo\1bar", 7, "foo\1bar", 7);
          :
    
    ...produces "foo\x01bar 66:6f:6f:01:62:61:72 Zm9vAWJhcg==" in the output.

  Summary:
    Revision    Changes     Path
    1.16        +2  -1      ossp-pkg/l2/Makefile.in
    1.19        +2  -2      ossp-pkg/l2/l2.h
    1.13        +4  -1      ossp-pkg/l2/l2_test.c
    1.1         +173 -0     ossp-pkg/l2/l2_ut_fmtcb.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 Makefile.in
  --- ossp-pkg/l2/Makefile.in	2001/09/05 13:33:26	1.15
  +++ ossp-pkg/l2/Makefile.in	2001/09/06 11:56:15	1.16
  @@ -77,7 +77,8 @@
       l2_ut_format.lo \
       l2_ut_param.lo \
       l2_ut_pcre.lo \
  -    l2_ut_level.lo
  +    l2_ut_level.lo \
  +    l2_ut_fmtcb.lo
   
   #   file containing the official version information
   _VERSION_FILE = \
  Index: ossp-pkg/l2/l2.h
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 l2.h
  --- ossp-pkg/l2/l2.h	2001/09/05 13:32:04	1.18
  +++ ossp-pkg/l2/l2.h	2001/09/06 11:56:15	1.19
  @@ -164,8 +164,6 @@
   extern l2_handler_t l2_handler_prefix;
   extern l2_handler_t l2_handler_buffer;
   
  -/* level operations */
  -
   /* channel operations */
   l2_channel_t *l2_channel_create     (l2_handler_t *h);
   l2_result_t   l2_channel_configure  (l2_channel_t *ch, const char *fmt, ...);
  @@ -191,6 +189,8 @@
   l2_result_t   l2_util_setparams    (l2_param_t p[], const char *fmt, va_list ap);
   l2_result_t   l2_util_l2s          (char *string,       size_t maxlen, int sep, unsigned int  levelmask);
   l2_result_t   l2_util_s2l          (const char *string, size_t maxlen, int sep, unsigned int *levelmask);
  +l2_result_t   l2_util_fmt_string   (l2_context_t *, const char, const char *, char *, size_t, size_t *, va_list *);
  +l2_result_t   l2_util_fmt_dump     (l2_context_t *, const char, const char *, char *, size_t, size_t *, va_list *);
   
   #endif /* __L2_H__ */
   
  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/09/05 13:56:43	1.12
  +++ ossp-pkg/l2/l2_test.c	2001/09/06 11:56:15	1.13
  @@ -132,7 +132,10 @@
       if (l2_stream_formatter(st, 'k', formatter, NULL) != L2_OK)
           die("failed to configure formatter for %%x");
   
  -    if (l2_stream_log(st, L2_LEVEL_PANIC, "Checking localhost %s %{myparm}k\n", "foo", 12345) != L2_OK)
  +    if (l2_stream_formatter(st, 'S', l2_util_fmt_dump, NULL) != L2_OK)
  +        die("failed to configure formatter for %%S");
  +
  +    if (l2_stream_log(st, L2_LEVEL_PANIC, "Checking localhost %s %{myparm}k <%{text}S><%{hex}S><%{base64}S>\n", "foo", 12345, "foo\1bar", 7, "foo\1bar", 7, "foo\1bar", 7) != L2_OK)
           die("failed to log message to stream");
   
       if (l2_stream_destroy(st) != L2_OK)
  Index: ossp-pkg/l2/l2_ut_fmtcb.c
  ============================================================
  $ cvs update -p -r1.1 l2_ut_fmtcb.c
  /*
  **  L2 - OSSP Logging Library
  **  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP L2, a flexible logging library which
  **  can be found at http://www.ossp.org/pkg/l2/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  l2_format.c: extra formatters
  */
  
  #include <ctype.h>
  
  #include "l2.h"
  
  l2_result_t 
  l2_util_fmt_string(
      l2_context_t *ctx, const char id, const char *param, 
      char *bufptr, size_t bufsize, size_t *buflen, va_list *ap)
  {
      char *cpStr;
      size_t nStr;
  
      cpStr = va_arg(*ap, char *);
      nStr  = (size_t)va_arg(*ap, int);
      if (nStr > bufsize)
          return L2_ERROR;
      memcpy(bufptr, cpStr, nStr);
      *buflen = nStr;
      return L2_OK;
  }
  
  l2_result_t 
  l2_util_fmt_dump(
      l2_context_t *ctx, const char id, const char *param, 
      char *bufptr, size_t bufsize, size_t *buflen, va_list *ap)
  {
      static const char hex_table[]    = "0123456789abcdef";
      static const char base64_table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 
                                         "abcdefghijklmnopqrstuvwxyz"
                                         "0123456789+/";
      unsigned char base64_in[3];
      unsigned char base64_out[4];
      size_t nData;
      unsigned char *ucpData;
      unsigned char uc;
      unsigned char *cpO;
      unsigned char *cpI;
      int i;
      int n;
  
      /* fetch data pointer and data size from argument list */
      ucpData = va_arg(*ap, unsigned char *);
      nData   = (size_t)va_arg(*ap, int);
  
      /* 
       * textual dumping: "foo\1bar" -> "foo\x01bar"
       */
      if (strcmp(param, "text") == 0 || param[0] == '\0') {
          cpI = ucpData;
          cpO = (unsigned char *)bufptr;
          while (cpI < (ucpData+nData)) {
              uc = *cpI++;
              if (isprint((int)uc)) {
                  if ((char *)cpO >= (bufptr+bufsize))
                      return L2_ERROR;
                  *cpO++ = uc;
              }
              else if (uc == '\\') {
                  if ((char *)(cpO+1) >= (bufptr+bufsize))
                      return L2_ERROR;
                  *cpO++ = '\\';
                  *cpO++ = '\\';
              }
              else {
                  if ((char *)(cpO+3) >= (bufptr+bufsize))
                      return L2_ERROR;
                  *cpO++ = '\\';
                  *cpO++ = 'x';
                  *cpO++ = hex_table[(uc >> 4) & 0xf];
                  *cpO++ = hex_table[uc & 0xf];
              }
          }
          *buflen = ((char *)cpO - bufptr);
      }
  
      /* 
       * hexadecimal dumping: "foo\1bar" -> "66:6f:6f:01:62:61:72"
       */
      else if (strcmp(param, "hex") == 0) {
          if (((nData * 3) - 1) > bufsize)
              return L2_ERROR;
          cpO = (unsigned char *)bufptr;
          for (i = 0; i < nData; i++) {
              uc = *ucpData++;
              *cpO++ = hex_table[(uc >> 4) & 0xf];
              *cpO++ = hex_table[uc & 0xf];
              if (i < (nData - 1))
                  *cpO++ = ':';
          }
          *buflen = (nData * 3) - 1;
      }
  
      /*
       * Base64 dumping: "foo\1bar" -> "Zm9vAWJhcg=="
       */
      else if (strcmp(param, "base64") == 0) {
          /* bulk encoding */
          n = 0;
          while (nData >= 3) {
              base64_in[0] = *ucpData++;
              base64_in[1] = *ucpData++;
              base64_in[2] = *ucpData++;
              nData -= 3;
              base64_out[0] = ( base64_in[0] >> 2);
              base64_out[1] = ((base64_in[0] & 0x03) << 4) + (base64_in[1] >> 4);
              base64_out[2] = ((base64_in[1] & 0x0f) << 2) + (base64_in[2] >> 6);
              base64_out[3] = ( base64_in[2] & 0x3f);
              if (n + 4 > bufsize)
                  return L2_ERROR;
              bufptr[n++] = base64_table[base64_out[0]];
              bufptr[n++] = base64_table[base64_out[1]];
              bufptr[n++] = base64_table[base64_out[2]];
              bufptr[n++] = base64_table[base64_out[3]];
          }
          /* now worry about padding with remaining 1 or 2 bytes */
          if (nData != 0) {
              base64_in[0] = base64_in[1] = base64_in[2] = '\0';
              for (i = 0; i < nData; i++)
                  base64_in[i] = *ucpData++;
              base64_out[0] = ( base64_in[0] >> 2);
              base64_out[1] = ((base64_in[0] & 0x03) << 4) + (base64_in[1] >> 4);
              base64_out[2] = ((base64_in[1] & 0x0f) << 2) + (base64_in[2] >> 6);
              if (n + 4 > bufsize)
                  return L2_ERROR;
              bufptr[n++] = base64_table[base64_out[0]];
              bufptr[n++] = base64_table[base64_out[1]];
              if (nData == 1)
                  bufptr[n++] = '=';
              else
                  bufptr[n++] = base64_table[base64_out[2]];
              bufptr[n++] = '=';
          }
          if (n >= bufsize)
              return L2_ERROR;
          *buflen = n;
      }
  
      /* anything else is an unknown dumping method... */
      else
          return L2_ERROR;
  
      return L2_OK;
  }
  

From ossp-cvs-owner@ossp.org  Thu Sep  6 16:31:35 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f86EVY127337; Thu, 6 Sep 2001 16:31:34 +0200 (CEST)
Date: Thu, 6 Sep 2001 16:31:34 +0200 (CEST)
Message-Id: <200109061431.f86EVY127337@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_sockmon.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   06-Sep-2001 16:31:34
  Branch: HEAD                             Handle: 2001090615313300

  Modified files:
    ossp-pkg/l2             l2_sockmon.c

  Log:
    Included logic to monitor IPv6 and UDP connections.

  Summary:
    Revision    Changes     Path
    1.2         +67 -31     ossp-pkg/l2/l2_sockmon.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_sockmon.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 l2_sockmon.c
  --- ossp-pkg/l2/l2_sockmon.c	2001/09/05 16:15:48	1.1
  +++ ossp-pkg/l2/l2_sockmon.c	2001/09/06 14:31:33	1.2
  @@ -36,15 +36,34 @@
   #define BACKLOG 1024    /* max # pending connections */
   #define BUFFSIZ 256     /* max string size           */
   
  -void do_work(int sock)
  +char *strcasedup(const char *pszIn)
   {
  -    char buf[BUFFSIZ];
  +    int  i        = 0;
  +    char *pszTemp = NULL;
  +
  +/*    ASSERT(pszIn);*/
  +/*    ASSERT(*pszIn);*/
  +
  +    if ((pszTemp = (char *)strdup(pszIn)) == NULL)
  +        return NULL;
  +    else
  +    {
  +        for (i = 0; *(pszTemp + i); i++)
  +            if (isupper(*(pszTemp + i)))
  +                *(pszTemp + i) = (char)tolower(*(pszTemp + i));
  +        return pszTemp;
  +    }
  +}
  +
  +void dowork(int iSock)
  +{
  +    char pszBuf[BUFFSIZ];
       int  cc;
   
  -/*    ASSERT(sock); */
  +/*    ASSERT(iSock);*/
   
       while (1) { /* Exits when read finishes */
  -        cc = read(sock, buf, sizeof (buf));
  +        cc = read(iSock, pszBuf, sizeof (pszBuf));
           if (cc == -1) {
               perror("read");
               exit(1);
  @@ -52,78 +71,95 @@
   
           if (cc == 0) {
               /* EOF */
  -            (void) close(sock);
  +            (void) close(iSock);
               (void) printf("Connection closed\n");
               return;
           }
   
  -        buf[cc + 1] = '\0';
  -        (void) printf("Read: %s", buf);
  +        pszBuf[cc + 1] = '\0';
  +        (void) printf("Read: %s", pszBuf);
   
  -        if (write(sock, buf, cc) == -1) {
  +        if (write(iSock, pszBuf, cc) == -1) {
               perror("write");
               exit(1);
           }
       }
   }
   
  -int myserver(int port)
  +int myserver(int iFamily, int iProtocol, int iPort)
   {
  -    struct sockaddr_in  laddr,   faddr             ;
  -    int                 sock,    new_sock, sock_opt;
  -    socklen_t           faddrlen                   ;
  +    struct sockaddr_in  laddr,    faddr;
  +    int                 iSock,    iNewsock, iSockopt, iProtofam;
  +    socklen_t           faddrlen;
   
  -/*    ASSERT(port); */
  +/*    ASSERT(iPort);*/
       /* Set up an IPv4 TCP socket to listen on for connections. */
  -    laddr.sin_family      = AF_INET;
  -    laddr.sin_port        = port;
  +    laddr.sin_family      = iFamily;
  +    laddr.sin_port        = iPort;
       laddr.sin_addr.s_addr = INADDR_ANY;
  -    sock                  = socket(PF_INET, SOCK_STREAM, 0);
   
  -    if (sock == -1) {
  +    iProtofam             = (iFamily == AF_INET) ? PF_INET : PF_INET6;
  +    iSock = socket(iProtofam, SOCK_STREAM, iProtocol);
  +
  +    if (iSock == -1) {
           perror("socket");
           return (-1);
       }
   
       /* Tell the system to allow local addresses to be reused. */
  -    sock_opt = 1;
  -    if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (void *)&sock_opt, sizeof (sock_opt)) == -1) {
  +    iSockopt = 1;
  +    if (setsockopt(iSock, SOL_SOCKET, SO_REUSEADDR, (void *)&iSockopt,\
  +        sizeof (iSockopt)) == -1) {
           perror("setsockopt(SO_REUSEADDR)");
  -        (void) close(sock);
  +        (void) close(iSock);
           return (-1);
       }
  -    if (bind(sock, (struct sockaddr *)&laddr, sizeof (laddr)) == -1) {
  +    if (bind(iSock, (struct sockaddr *)&laddr, sizeof (laddr)) == -1) {
           perror("bind"); /* Bad bind */
  -        (void) close(sock);
  +        (void) close(iSock);
           return (-1);
           }
  -    if (listen(sock, BACKLOG) == -1) {
  +fprintf(stderr, "Listening on %d or 0x%x\n", iPort, iPort);
  +    if (listen(iSock, BACKLOG) == -1) {
           perror("listen"); /* Listen just blew up */
  -        (void) close(sock);
  +        (void) close(iSock);
           return (-1);
       }
       /* Wait for a connection request. */
       for (;;) {
           faddrlen = sizeof (faddr);
  -        new_sock = accept(sock, (struct sockaddr *)&faddr, &faddrlen);
  -        if (new_sock == -1) {
  +        iNewsock = accept(iSock, (struct sockaddr *)&faddr, &faddrlen);
  +        if (iNewsock == -1) {
               if (errno != EINTR && errno != ECONNABORTED) {
                   perror("accept");
               }
               continue;
           }
           (void) printf("Connection from %s/%d\n", inet_ntoa(faddr.sin_addr), ntohs(faddr.sin_port));
  -        do_work(new_sock);  /* do some sockwork */
  +        dowork(iNewsock); /* do some sockwork */
       }
       /*NOTREACHED*/
   }
   
   int main(int argc, char *argv[])
   {
  -    if (argc != 2) {
  -        (void) fprintf(stderr, "Usage: %s <port>\n", argv[0]);
  +    char *pszArgv = NULL;
  +    int iFamily   = -1;
  +    int iNetproto = -1;
  +    int iNetport  = 0;
  +
  +    if (argc < 2) {
  +        (void) fprintf(stderr, "Usage: %s [IPv6] [UDP] <Port>\n", argv[0]);
           exit(1); /* Dink donk if the user doesn't know how to use this */
       }
  -    (void) myserver(htons(atoi(argv[1])));
  -    return 0;
  +
  +    if ((pszArgv = strcasedup(*argv)) == NULL)
  +        return -1;
  +
  +    iFamily    = (strstr(pszArgv, "ipv6")) ? AF_INET6    : AF_INET;
  +    iNetproto  = (strstr(pszArgv, "udp"))  ? IPPROTO_UDP : IPPROTO_TCP;
  +    iNetport   = htons(atoi(argv[argc - 1]));
  +
  +    free (pszArgv);
  +    return myserver(iFamily, iNetproto, iNetport);
   }

From ossp-cvs-owner@ossp.org  Thu Sep  6 16:37:56 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f86EbtJ27828; Thu, 6 Sep 2001 16:37:55 +0200 (CEST)
Date: Thu, 6 Sep 2001 16:37:55 +0200 (CEST)
Message-Id: <200109061437.f86EbtJ27828@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO l2.h l2_ch_buffer.c l2_ch_file.c l2_ch_pr...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   06-Sep-2001 16:37:54
  Branch: HEAD                             Handle: 2001090615375300

  Modified files:
    ossp-pkg/l2             TODO l2.h l2_ch_buffer.c l2_ch_file.c
                            l2_ch_prefix.c l2_ch_socket.c l2_ch_syslog.c
                            l2_channel.c l2_stream.c l2_ut_fmtcb.c
                            l2_ut_format.c l2_ut_level.c l2_ut_param.c

  Log:
    Replace generic L2_ERROR with more granular L2_ERR_XXX and
    make sure that we always check with "!= L2_OK".

  Summary:
    Revision    Changes     Path
    1.14        +0  -2      ossp-pkg/l2/TODO
    1.20        +6  -1      ossp-pkg/l2/l2.h
    1.16        +22 -19     ossp-pkg/l2/l2_ch_buffer.c
    1.14        +11 -11     ossp-pkg/l2/l2_ch_file.c
    1.9         +5  -5      ossp-pkg/l2/l2_ch_prefix.c
    1.14        +20 -20     ossp-pkg/l2/l2_ch_socket.c
    1.15        +6  -6      ossp-pkg/l2/l2_ch_syslog.c
    1.16        +107 -25    ossp-pkg/l2/l2_channel.c
    1.14        +65 -22     ossp-pkg/l2/l2_stream.c
    1.2         +15 -9      ossp-pkg/l2/l2_ut_fmtcb.c
    1.2         +2  -0      ossp-pkg/l2/l2_ut_format.c
    1.2         +3  -3      ossp-pkg/l2/l2_ut_level.c
    1.4         +2  -2      ossp-pkg/l2/l2_ut_param.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 TODO
  --- ossp-pkg/l2/TODO	2001/09/03 12:16:44	1.13
  +++ ossp-pkg/l2/TODO	2001/09/06 14:37:53	1.14
  @@ -2,8 +2,6 @@
   OSSP L2
   =======
   
  -Improvement: return L2_ERR_XXX instead of just a single L2_ERROR
  -
   Idea:
   l2_handler_t:
      - function pointers
  Index: ossp-pkg/l2/l2.h
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 l2.h
  --- ossp-pkg/l2/l2.h	2001/09/06 11:56:15	1.19
  +++ ossp-pkg/l2/l2.h	2001/09/06 14:37:53	1.20
  @@ -81,7 +81,12 @@
   /* list of return values */
   typedef enum {
       L2_OK,
  -    L2_ERROR
  +    L2_ERR_ARG,    /* invalid argument */
  +    L2_ERR_USE,    /* invalid usage */
  +    L2_ERR_MEM,    /* no more memory available */
  +    L2_ERR_SYS,    /* system error (see errno) */
  +    L2_ERR_FMT,    /* message formating error */
  +    L2_ERR_INT     /* internal error */
   } l2_result_t;
   
   /* context union for storing data */
  Index: ossp-pkg/l2/l2_ch_buffer.c
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 l2_ch_buffer.c
  --- ossp-pkg/l2/l2_ch_buffer.c	2001/09/06 11:47:51	1.15
  +++ ossp-pkg/l2/l2_ch_buffer.c	2001/09/06 14:37:53	1.16
  @@ -45,7 +45,7 @@
   
       /* allocate private channel configuration */
       if ((cfg = (l2_ch_buffer_t *)malloc(sizeof(l2_ch_buffer_t))) == NULL)
  -        return L2_ERROR;
  +        return L2_ERR_MEM;
   
       /* initialize configuration with reasonable defaults */
       cfg->buf     = NULL;
  @@ -67,14 +67,14 @@
   
       /* parameter checks */
       if ((cfg = (l2_ch_buffer_t *)ctx->vp) == NULL)
  -        return L2_ERROR;
  +        return L2_ERR_ARG;
   
       /* feed and call generic parameter parsing engine */
       L2_PARAM_SET(pa[0], size, INT, &cfg->bufsize);
       L2_PARAM_END(pa[1]);
       rv = l2_util_setparams(pa, fmt, ap);
       if (cfg->bufsize < 0) 
  -        return L2_ERROR;
  +        return L2_ERR_ARG;
       return rv;
   }
   
  @@ -83,22 +83,23 @@
   {
       l2_ch_buffer_t *cfg;
       l2_channel_t *downstream;
  +    l2_result_t rv;
   
       /* parameter checks */
       if ((cfg = (l2_ch_buffer_t *)ctx->vp) == NULL)
  -        return L2_ERROR;
  +        return L2_ERR_ARG;
   
       /* open channel buffer */
       if (cfg->bufsize > 0) {
           if ((cfg->buf = malloc(cfg->bufsize)) == NULL)
  -            return L2_ERROR;
  +            return L2_ERR_MEM;
           cfg->bufpos = 0;
       }
   
       /* optionally open downstream channel, too */
       if ((downstream = l2_channel_downstream(ch)) != NULL)
  -        if (l2_channel_open(downstream) == L2_ERROR)
  -            return L2_ERROR;
  +        if ((rv = l2_channel_open(downstream)) != L2_OK)
  +            return rv;
   
       return L2_OK;
   }
  @@ -113,7 +114,7 @@
   
       /* parameter checks */
       if ((cfg = (l2_ch_buffer_t *)ctx->vp) == NULL)
  -        return L2_ERROR;
  +        return L2_ERR_ARG;
   
       if (bufsize > (cfg->bufsize - cfg->bufpos)) {
           /* flush buffer if necessary */
  @@ -139,23 +140,24 @@
   {
       l2_ch_buffer_t *cfg;
       l2_channel_t *downstream;
  +    l2_result_t rv;
   
       /* parameter checks */
       if ((cfg = (l2_ch_buffer_t *)ctx->vp) == NULL)
  -        return L2_ERROR;
  +        return L2_ERR_ARG;
   
       /* write the buffer contents downstream */
       if (cfg->bufpos > 0) {
           if ((downstream = l2_channel_downstream(ch)) != NULL)
  -            if (l2_channel_write(downstream, cfg->buf, cfg->bufpos) == L2_ERROR)
  -                return L2_ERROR;
  +            if ((rv = l2_channel_write(downstream, cfg->buf, cfg->bufpos)) != L2_OK)
  +                return rv;
           cfg->bufpos = 0;
       }
   
       /* optionally flush downstream channel, too */
       if ((downstream = l2_channel_downstream(ch)) != NULL)
  -        if (l2_channel_flush(downstream) == L2_ERROR)
  -            return L2_ERROR;
  +        if ((rv = l2_channel_flush(downstream)) != L2_OK)
  +            return rv;
   
       return L2_OK;
   }
  @@ -165,23 +167,24 @@
   {
       l2_ch_buffer_t *cfg;
       l2_channel_t *downstream;
  +    l2_result_t rv;
   
       /* parameter checks */
       if ((cfg = (l2_ch_buffer_t *)ctx->vp) == NULL)
  -        return L2_ERROR;
  +        return L2_ERR_ARG;
   
       /* write stale data before closing down */
       if (cfg->bufpos > 0) {
           if ((downstream = l2_channel_downstream(ch)) != NULL)
  -            if (l2_channel_write(downstream, cfg->buf, cfg->bufpos) == L2_ERROR)
  -                return L2_ERROR;
  +            if ((rv = l2_channel_write(downstream, cfg->buf, cfg->bufpos)) != L2_OK)
  +                return rv;
           cfg->bufpos = 0;
       }
   
       /* optionally close downstream channel, too */
       if ((downstream = l2_channel_downstream(ch)) != NULL)
  -        if (l2_channel_close(downstream) == L2_ERROR)
  -            return L2_ERROR;
  +        if ((rv = l2_channel_close(downstream)) != L2_OK)
  +            return rv;
   
       /* close channel buffer */
       if (cfg->buf != NULL) {
  @@ -199,7 +202,7 @@
   
       /* parameter checks */
       if ((cfg = (l2_ch_buffer_t *)ctx->vp) == NULL)
  -        return L2_ERROR;
  +        return L2_ERR_ARG;
   
       /* if not already closed, close channel buffer now */
       if (cfg->buf != NULL) {
  Index: ossp-pkg/l2/l2_ch_file.c
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 l2_ch_file.c
  --- ossp-pkg/l2/l2_ch_file.c	2001/09/05 07:47:12	1.13
  +++ ossp-pkg/l2/l2_ch_file.c	2001/09/06 14:37:53	1.14
  @@ -48,7 +48,7 @@
   
       /* allocate private channel configuration */
       if ((cfg = (l2_ch_file_t *)malloc(sizeof(l2_ch_file_t))) == NULL)
  -        return L2_ERROR;
  +        return L2_ERR_ARG;
   
       /* initialize configuration with reasonable defaults */
       cfg->fd     = -1; 
  @@ -71,7 +71,7 @@
   
       /* parameter checks */
       if ((cfg = (l2_ch_file_t *)ctx->vp) == NULL)
  -        return L2_ERROR;
  +        return L2_ERR_ARG;
   
       /* feed and call generic parameter parsing engine */
       L2_PARAM_SET(pa[0], path,   CHARPTR, &cfg->path);
  @@ -91,16 +91,16 @@
   
       /* parameter checks */
       if ((cfg = (l2_ch_file_t *)ctx->vp) == NULL)
  -        return L2_ERROR;
  +        return L2_ERR_ARG;
       if (cfg->path == NULL)
  -        return L2_ERROR;
  +        return L2_ERR_USE;
   
       /* open channel file */
       mode = O_WRONLY|O_CREAT;
       if (cfg->append)
           mode |= O_APPEND;
       if ((cfg->fd = open(cfg->path, mode, cfg->perm)) == -1)
  -        return L2_ERROR;
  +        return L2_ERR_SYS;
   
       return L2_OK;
   }
  @@ -113,13 +113,13 @@
   
       /* parameter checks */
       if ((cfg = (l2_ch_file_t *)ctx->vp) == NULL)
  -        return L2_ERROR;
  +        return L2_ERR_ARG;
       if (cfg->fd == -1)
  -        return L2_ERROR;
  +        return L2_ERR_USE;
   
       /* write message to channel file */
       if (write(cfg->fd, buf, buf_size) == -1)
  -        return L2_ERROR;
  +        return L2_ERR_SYS;
   
       return L2_OK;
   }
  @@ -139,9 +139,9 @@
   
       /* parameter checks */
       if ((cfg = (l2_ch_file_t *)ctx->vp) == NULL)
  -        return L2_ERROR;
  +        return L2_ERR_ARG;
       if (cfg->fd == -1)
  -        return L2_ERROR;
  +        return L2_ERR_USE;
   
       /* close channel file */
       close(cfg->fd);
  @@ -155,7 +155,7 @@
   {
       /* parameter checks */
       if (ctx->vp == NULL) 
  -        return L2_ERROR;
  +        return L2_ERR_ARG;
   
       /* destroy channel configuration */
       free(ctx->vp);
  Index: ossp-pkg/l2/l2_ch_prefix.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 l2_ch_prefix.c
  --- ossp-pkg/l2/l2_ch_prefix.c	2001/09/05 13:56:43	1.8
  +++ ossp-pkg/l2/l2_ch_prefix.c	2001/09/06 14:37:53	1.9
  @@ -45,7 +45,7 @@
   
       /* allocate private channel configuration */
       if ((cfg = (l2_ch_prefix_t *)malloc(sizeof(l2_ch_prefix_t))) == NULL)
  -        return L2_ERROR;
  +        return L2_ERR_MEM;
   
       /* initialize configuration with reasonable defaults */
       cfg->timefmt  = NULL;
  @@ -73,10 +73,10 @@
       /* argument consistency check */
       if (rv == L2_OK) {
           if (cfg->timezone == NULL)
  -            return L2_ERROR;
  +            return L2_ERR_ARG;
           if (!(   strcmp(cfg->timezone, "local") == 0 
                 || strcmp(cfg->timezone, "utc")   == 0))
  -            return L2_ERROR;
  +            return L2_ERR_ARG;
       }
   
       return rv;
  @@ -105,9 +105,9 @@
           else if (strcmp(cfg->timezone, "utc") == 0)
               tm = gmtime(&t);
           else
  -            return L2_ERROR;
  +            return L2_ERR_ARG;
           if ((n = strftime(cfg->timebuf, sizeof(cfg->timebuf), cfg->timefmt, tm)) == 0)
  -            return L2_ERROR;
  +            return L2_ERR_SYS;
           if ((rv = l2_channel_write(downstream, cfg->timebuf, n)) != L2_OK)
               return rv;
       }
  Index: ossp-pkg/l2/l2_ch_socket.c
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 l2_ch_socket.c
  --- ossp-pkg/l2/l2_ch_socket.c	2001/09/05 16:15:38	1.13
  +++ ossp-pkg/l2/l2_ch_socket.c	2001/09/06 14:37:53	1.14
  @@ -110,7 +110,7 @@
   
       /* allocate private channel configuration */
       if ((cfg = (l2_ch_socket_t *)malloc(sizeof(l2_ch_socket_t))) == NULL)
  -        return L2_ERROR;
  +        return L2_ERR_MEM;
   
       /* initialize configuration with reasonable defaults */
       cfg->pszHost   = NULL;
  @@ -132,7 +132,7 @@
   
       /* parameter checks */
       if ((cfg = (l2_ch_socket_t *)ctx->vp) == NULL)
  -        return L2_ERROR;
  +        return L2_ERR_ARG;
   
       /* feed and call generic parameter parsing engine */
       L2_PARAM_SET(pa[0], ipversion, INT,     &cfg->iFamily);
  @@ -155,9 +155,9 @@
   
       /* parameter checks */
       if ((cfg = (l2_ch_socket_t *)ctx->vp) == NULL)
  -        return L2_ERROR;
  +        return L2_ERR_ARG;
       if (cfg->pszHost == NULL)
  -        return L2_ERROR;
  +        return L2_ERR_USE;
   
       /* open channel socket      */
       if (cfg->iFamily == AF_INET) /* IPv4 */
  @@ -181,19 +181,19 @@
               }
   
               else
  -                return L2_ERROR; /* what?? we specify IPv4 when it is not? */
  +                return L2_ERR_USE; /* what?? we specify IPv4 when it is not? */
           }
   
           else /* host string was not parsable for some reason */
  -            return L2_ERROR;
  +            return L2_ERR_SYS;
   
           if ((cfg->iSocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1)
  -            return L2_ERROR;
  +            return L2_ERR_SYS;
   
           if (connect(cfg->iSocket, (struct sockaddr *)&IP4Sockaddr, sizeof(IP4Sockaddr)))
           {
               close(cfg->iSocket);
  -            return L2_ERROR;
  +            return L2_ERR_SYS;
           }
   
           return L2_OK; /* we are connected */
  @@ -220,25 +220,25 @@
               }
   
               else
  -                return L2_ERROR; /* what?? we specify IPv6 when it is not? */
  +                return L2_ERR_USE; /* what?? we specify IPv6 when it is not? */
           }
   
           else /* host string was not parsable for some reason */
  -            return L2_ERROR;
  +            return L2_ERR_SYS;
   
           if ((cfg->iSocket = socket(PF_INET6, SOCK_STREAM, IPPROTO_TCP)) == -1)
  -            return L2_ERROR;
  +            return L2_ERR_SYS;
   
           if (connect(cfg->iSocket, (struct sockaddr *)&IP6Sockaddr, sizeof(IP6Sockaddr)))
           {
               close(cfg->iSocket);
  -            return L2_ERROR;
  +            return L2_ERR_SYS;
           }
   
           return L2_OK; /* we are connected */
       }
   
  -    return L2_ERROR;
  +    return L2_ERR_USE;
   }
   
   /* write to channel */
  @@ -251,9 +251,9 @@
   
       /* parameter checks */
       if ((cfg = (l2_ch_socket_t *)ctx->vp) == NULL)
  -        return L2_ERROR;
  +        return L2_ERR_ARG;
       if (cfg->iSocket == -1)
  -        return L2_ERROR;
  +        return L2_ERR_USE;
   
       /* write message to channel socket, but check to make   */
       /* sure that the whole message was successfully written */
  @@ -265,7 +265,7 @@
           sizeRemain = sizeRemain - sizeWrite; /* how much is left? */
   
           if (sizeWrite == -1)
  -            return L2_ERROR;
  +            return L2_ERR_SYS;
       }
   
       return L2_OK;
  @@ -286,13 +286,13 @@
   
       /* parameter checks */
       if ((cfg = (l2_ch_socket_t *)ctx->vp) == NULL)
  -        return L2_ERROR;
  +        return L2_ERR_ARG;
       if (cfg->iSocket == -1)
  -        return L2_ERROR;
  +        return L2_ERR_USE;
   
       /* close channel socket */
       if ((shutdown(cfg->iSocket, SHUT_RDWR)) || (close(cfg->iSocket)))
  -        return L2_ERROR;
  +        return L2_ERR_SYS;
   
       return L2_OK;
   }
  @@ -302,7 +302,7 @@
   {
       /* parameter checks */
       if (ctx->vp == NULL) 
  -        return L2_ERROR;
  +        return L2_ERR_ARG;
   
       /* destroy channel configuration */
       free(ctx->vp);
  Index: ossp-pkg/l2/l2_ch_syslog.c
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 l2_ch_syslog.c
  --- ossp-pkg/l2/l2_ch_syslog.c	2001/09/05 07:47:12	1.14
  +++ ossp-pkg/l2/l2_ch_syslog.c	2001/09/06 14:37:53	1.15
  @@ -47,7 +47,7 @@
   
       /* allocate private channel configuration */
       if ((cfg = (l2_ch_syslog_t *)malloc(sizeof(l2_ch_syslog_t))) == NULL)
  -        return L2_ERROR;
  +        return L2_ERR_MEM;
   
       /* initialize configuration with reasonable defaults */
       cfg->pszIdent  = NULL;
  @@ -71,7 +71,7 @@
   
       /* parameter checks */
       if ((cfg = (l2_ch_syslog_t *)ctx->vp) == NULL)
  -        return L2_ERROR;
  +        return L2_ERR_ARG;
   
       /* feed and call generic parameter parsing engine */
       L2_PARAM_SET(pa[0], ident,   CHARPTR,  &cfg->pszIdent);
  @@ -92,7 +92,7 @@
   
       /* parameter checks */
       if ((cfg = (l2_ch_syslog_t *)ctx->vp) == NULL)
  -        return L2_ERROR;
  +        return L2_ERR_ARG;
   
       /* open channel syslog */
       openlog(cfg->pszIdent, cfg->iLogopt, cfg->iFacility);
  @@ -109,7 +109,7 @@
   
       /* parameter checks */
       if ((cfg = (l2_ch_syslog_t *)ctx->vp) == NULL)
  -        return L2_ERROR;
  +        return L2_ERR_ARG;
   
       /* write message to channel syslog */
       syslog(cfg->iPriority, buf);
  @@ -132,7 +132,7 @@
   
       /* parameter checks */
       if ((cfg = (l2_ch_syslog_t *)ctx->vp) == NULL)
  -        return L2_ERROR;
  +        return L2_ERR_ARG;
   
       /* close channel syslog */
       closelog();
  @@ -145,7 +145,7 @@
   {
       /* parameter checks */
       if (ctx->vp == NULL) 
  -        return L2_ERROR;
  +        return L2_ERR_ARG;
   
       /* destroy channel configuration */
       free(ctx->vp);
  Index: ossp-pkg/l2/l2_channel.c
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 l2_channel.c
  --- ossp-pkg/l2/l2_channel.c	2001/09/05 19:58:44	1.15
  +++ ossp-pkg/l2/l2_channel.c	2001/09/06 14:37:53	1.16
  @@ -33,159 +33,241 @@
   
   #include <string.h>
   
  +/* create channel */
   l2_channel_t *l2_channel_create(l2_handler_t *h)
   {
       l2_channel_t *ch;
   
  +    /* argument sanity check */
       if (h == NULL)
           return NULL;
  +
  +    /* allocate channel structure */
       if ((ch = (l2_channel_t *)malloc(sizeof(l2_channel_t))) == NULL)
           return NULL;
  +
  +    /* initialize channel structure */
       ch->state = L2_CHSTATE_CREATED;
       ch->downstream = NULL;
       memset(&ch->context, 0, sizeof(l2_context_t));
       memcpy(&ch->handler, h, sizeof(l2_handler_t));
  -    if (ch->handler.create(&ch->context, ch) == L2_ERROR) {
  -        free(ch);
  -        return NULL;
  +
  +    /* (optionally) perform create operation in handler */
  +    if (ch->handler.create != NULL) {
  +        if (ch->handler.create(&ch->context, ch) != L2_OK) {
  +            free(ch);
  +            return NULL;
  +        }
       }
  +
       return ch;
   }
   
  +/* configure channel */
   l2_result_t l2_channel_configure(l2_channel_t *ch, const char *fmt, ...)
   {
       l2_result_t rv;
       va_list ap;
   
  +    /* argument sanity check */
       if (ch == NULL || fmt == NULL)
  -        return L2_ERROR;
  +        return L2_ERR_ARG;
  +
  +    /* make sure the channel is in state "created" */
       if (ch->state != L2_CHSTATE_CREATED)
  -        return L2_ERROR;
  +        return L2_ERR_USE;
  +
  +    /* pass operation to handler */
  +    rv = L2_OK;
       va_start(ap, fmt);
  -    rv = ch->handler.configure(&ch->context, ch, fmt, ap);
  +    if (ch->handler.configure != NULL)
  +        rv = ch->handler.configure(&ch->context, ch, fmt, ap);
       va_end(ap);
  +
       return rv;
   }
   
  +/* open channel (stack) */
   l2_result_t l2_channel_open(l2_channel_t *ch)
   {
       l2_result_t rv;
   
  +    /* argument sanity check */
       if (ch == NULL)
  -        return L2_ERROR;
  +        return L2_ERR_ARG;
  +
  +    /* make sure channel is in state "created" */
       if (ch->state != L2_CHSTATE_CREATED)
  -        return L2_ERROR;
  +        return L2_ERR_USE;
  +
  +    /* skip empty open handlers on channel stack */
       while (ch != NULL && ch->handler.open == NULL) {
           ch->state = L2_CHSTATE_OPENED;
           ch = ch->downstream;
       }
       if (ch == NULL)
  -        return L2_ERROR;
  +        return L2_ERR_USE;
  +
  +    /* pass operation to handler */
       rv = ch->handler.open(&ch->context, ch);
       if (rv == L2_OK)
           ch->state = L2_CHSTATE_OPENED;
  +
       return rv;
   }
   
  +/* write to channel (stack) */
   l2_result_t l2_channel_write(l2_channel_t *ch, const char *buf, size_t bufsize)
   {
       l2_result_t rv;
   
  -    if (ch == NULL)
  -        return L2_ERROR;
  +    /* argument sanity check */
  +    if (ch == NULL || buf == NULL)
  +        return L2_ERR_ARG;
  +
  +    /* make sure channel is in state "opened" */
       if (ch->state != L2_CHSTATE_OPENED)
  -        return L2_ERROR;
  -    if (buf == NULL)
  -        return L2_ERROR;
  +        return L2_ERR_USE;
  +
  +    /* short circuiting */
       if (bufsize == 0)
           return L2_OK;
  +
  +    /* walk to next available write handler */
       while (ch != NULL && ch->handler.write == NULL)
           ch = ch->downstream;
       if (ch == NULL)
  -        return L2_ERROR;
  +        return L2_ERR_USE;
  +
  +    /* pass operation to handler */
       rv = ch->handler.write(&ch->context, ch, buf, bufsize);
  +
       return rv;
   }
   
  +/* flush channel (stack) */
   l2_result_t l2_channel_flush(l2_channel_t *ch)
   {
       l2_result_t rv;
   
  +    /* argument sanity check */
       if (ch == NULL)
  -        return L2_ERROR;
  +        return L2_ERR_ARG;
  +
  +    /* make sure channel is in state "opened" */
       if (ch->state != L2_CHSTATE_OPENED)
  -        return L2_ERROR;
  +        return L2_ERR_USE;
  +
  +    /* walk to next available flush handler */
       while (ch != NULL && ch->handler.flush == NULL)
           ch = ch->downstream;
       if (ch == NULL)
  -        return L2_ERROR;
  +        return L2_ERR_USE;
  +
  +    /* pass operation to handler */
       rv = ch->handler.flush(&ch->context, ch);
  +
       return rv;
   }
   
  +/* close channel (stack) */
   l2_result_t l2_channel_close(l2_channel_t *ch)
   {
       l2_result_t rv;
   
  +    /* argument sanity check */
       if (ch == NULL)
  -        return L2_ERROR;
  +        return L2_ERR_ARG;
  +    
  +    /* make sure channel is in state "opened" */
       if (ch->state != L2_CHSTATE_OPENED)
  -        return L2_ERROR;
  +        return L2_ERR_USE;
  +
  +    /* walk to next available close handler */
       while (ch != NULL && ch->handler.close == NULL) {
           ch->state = L2_CHSTATE_CREATED;
           ch = ch->downstream;
       }
       if (ch == NULL)
  -        return L2_ERROR;
  +        return L2_ERR_USE;
  +
  +    /* pass operation to handler */
       rv = ch->handler.close(&ch->context, ch);
       if (rv == L2_OK)
           ch->state = L2_CHSTATE_CREATED;
  +
       return rv;
   }
   
  +/* destroy channel */
   l2_result_t l2_channel_destroy(l2_channel_t *ch)
   {
       l2_result_t rv;
   
  +    /* argument sanity check */
       if (ch == NULL)
  -        return L2_ERROR;
  +        return L2_ERR_ARG;
  +
  +    /* make sure channel is in state "opened" */
       if (ch->state == L2_CHSTATE_OPENED)
           if ((rv = l2_channel_close(ch)) != L2_OK)
               return rv;
  +
  +    /* walk to next available destroy handler */
       while (ch != NULL && ch->handler.destroy == NULL)
           ch = ch->downstream;
  +    
  +    /* pass operation to handler */
       if (ch != NULL)
           rv = ch->handler.destroy(&ch->context, ch);
       else
           rv = L2_OK;
  +
  +    /* free channel structure */
       free(ch);
  +
       return rv;
   }
   
  +/* stack channel on top of another channel */
   l2_result_t l2_channel_stack(l2_channel_t *ch, l2_channel_t *chTop)
   {
  +    /* argument sanity check */
       if (ch == NULL || chTop == NULL)
  -        return L2_ERROR;
  +        return L2_ERR_ARG;
  +
  +    /* make sure both channels are in state "created" */
       if (   ch->state    != L2_CHSTATE_CREATED
           || chTop->state != L2_CHSTATE_CREATED)
  -        return L2_ERROR;
  +        return L2_ERR_USE;
  +
  +    /* make sure top channel is a filter channel */
       if (chTop->handler.type != L2_CHANNEL_FILTER)
  -        return L2_ERROR;
  +        return L2_ERR_USE;
  +
  +    /* stack the channels */
       chTop->downstream = ch;
  +
       return L2_OK;
   }
   
  +/* return downstream channel */
   l2_channel_t *l2_channel_downstream(l2_channel_t *ch)
   {
  +    /* argument sanity check */
       if (ch == NULL)
           return NULL;
  +
       return ch->downstream;
   }
   
  +/* return channel type */
   l2_chtype_t l2_channel_type(l2_channel_t *ch)
   {
  +    /* argument sanity check */
       if (ch == NULL)
           return NULL;
  +
       return ch->handler.type;
   }
   
  Index: ossp-pkg/l2/l2_stream.c
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 l2_stream.c
  --- ossp-pkg/l2/l2_stream.c	2001/09/05 14:10:00	1.13
  +++ ossp-pkg/l2/l2_stream.c	2001/09/06 14:37:53	1.14
  @@ -31,112 +31,142 @@
   #include "l2.h"
   #include "l2_p.h"
   
  +/* create stream */
   l2_stream_t *l2_stream_create(void)
   {
       l2_stream_t *st;
       int i;
       
  +    /* allocate stream structure */ 
       if ((st = (l2_stream_t *)malloc(sizeof(l2_stream_t))) == NULL)
           return NULL;
  +
  +    /* initialize stream structure */
       st->levelmask = 0;
       for (i = 0; i < L2_MAX_CHANNELS; i++)
           st->channels[i].ch = NULL;
       for (i = 0; i < L2_MAX_FORMATTERS; i++)
           st->formatters[i].cb = NULL;
  +
       return st;
   }
   
  +/* attach channel to stream */
   l2_result_t l2_stream_channel(l2_stream_t *st, l2_channel_t *ch, unsigned int levelmask)
   {
  -    int i;
       l2_channel_t *chC;
       l2_channel_t *chN;
  +    int i;
   
  +    /* argument sanity check */
       if (st == NULL || ch == NULL || levelmask == 0)
  -        return L2_ERROR;
  +        return L2_ERR_ARG;
   
       /* make sure the stack of channels consists of zero or more
          filter channels followed by exactly one output channel */
       for (chC = ch; (chN = l2_channel_downstream(chC)) != NULL; chC = chN)
           if (l2_channel_type(chC) != L2_CHANNEL_FILTER)
  -            return L2_ERROR;
  +            return L2_ERR_USE;
       if (l2_channel_type(chC) != L2_CHANNEL_OUTPUT)
  -        return L2_ERROR;
  +        return L2_ERR_USE;
   
       /* find next free channel position in channel array */
       for (i = 0; i < L2_MAX_CHANNELS && st->channels[i].ch != NULL; i++)
           ;
       if (i == L2_MAX_CHANNELS)
  -        return L2_ERROR;
  +        return L2_ERR_MEM;
   
  -    /* attach this channel */
  +    /* attach channel to stream */
       st->channels[i].ch = ch;
       st->channels[i].levelmask = levelmask;
   
       return L2_OK;
   }
   
  +/* attach formatter to stream */
   l2_result_t l2_stream_formatter(l2_stream_t *st, char id, l2_formatter_t cb, l2_context_t *ctx)
   {
       int i;
   
  +    /* argument sanity check */
       if (st == NULL || id == '\0' || cb == NULL)
  -        return L2_ERROR;
  +        return L2_ERR_ARG;
  +
  +    /* find next free formatter position in formatter array */
       for (i = 0; i < L2_MAX_FORMATTERS && st->formatters[i].cb != NULL; i++)
           ;
       if (i == L2_MAX_FORMATTERS)
  -        return L2_ERROR;
  +        return L2_ERR_MEM;
  +
  +    /* attach formatter to stream */
       st->formatters[i].id   = id;
       st->formatters[i].ctx  = ctx;
       st->formatters[i].cb   = cb;
  +
       return L2_OK;
   }
   
  +/* set stream level mask */
   l2_result_t l2_stream_levels(l2_stream_t *st, unsigned int levelmask)
   {
  +    /* argument sanity check */
       if (st == NULL)
  -        return L2_ERROR;
  +        return L2_ERR_ARG;
  +
  +    /* override global level mask */
       st->levelmask = levelmask;
  +
       return L2_OK;
   }
   
  +/* log a message to stream */
   l2_result_t l2_stream_log(l2_stream_t *st, unsigned int level, const char *fmt, ...)
   {
       va_list ap;
       l2_result_t rv;
   
  +    /* argument sanity check */
       if (st == NULL || level == 0 || fmt == NULL)
  -        return L2_ERROR;
  +        return L2_ERR_ARG;
  +
  +    /* pass-through to va_list-based variant */
       va_start(ap, fmt);
       rv = l2_stream_vlog(st, level, fmt, ap);
       va_end(ap);
  +
       return rv;
   }
   
  +/* indirect callback function from l2_stream_vlog for flushing */
   static int l2_stream_vlog_flush(l2_util_format_t *vfmt)
   {
  +    /* we do no format buffer flushing */
       return -1;
   }
   
  +/* indirect callback function from l2_stream_vlog for formatting */
   static void l2_stream_vlog_format(
       l2_util_format_t *vfmt,
       char *cPrefix, char *cPad, char **cppOut, size_t *npOutLen,
       char *cpBuf, int nBufLenMax, char *cpParam, char cId, va_list *apArgs)
   {
       l2_stream_t *st = (l2_stream_t *)(vfmt->data[0].vp);
  +    l2_result_t rv;
       int i;
   
  -    /* init result */
  +    /* init formatting result */
       *cPrefix = '\0';
       *cPad = ' ';
       *cppOut = NULL;
       *npOutLen = 0;
   
  -    /* iterate over all configured formatters */
  +    /* iterate over all configured L2 formatters */
       for (i = 0; i < L2_MAX_FORMATTERS && st->formatters[i].cb != NULL; i++) {
           if (st->formatters[i].id == cId) {
  -            if (st->formatters[i].cb(st->formatters[i].ctx, cId, cpParam, 
  -                                     cpBuf, nBufLenMax, npOutLen, apArgs) == L2_OK) {
  +            rv = st->formatters[i].cb(st->formatters[i].ctx, cId, cpParam, 
  +                                      cpBuf, nBufLenMax, npOutLen, apArgs);
  +            vfmt->data[1].i = (int)rv;
  +            if (rv == L2_OK) {
                   *cppOut = cpBuf;
                   break;
               }
  @@ -145,6 +175,7 @@
       return;
   }
   
  +/* log a message to stream (va_list-variant) */
   l2_result_t l2_stream_vlog(l2_stream_t *st, unsigned int level, const char *fmt, va_list ap)
   {
       int i;
  @@ -153,17 +184,18 @@
       l2_result_t rv;
       l2_util_format_t vfmt;
   
  +    /* argument sanity check */
       if (st == NULL || fmt == NULL || ap == NULL)
  -        return L2_ERROR;
  +        return L2_ERR_ARG;
   
       /* make sure only a single level is specified */
       for (l = level, j = 0; l != 0; l = (l >> 1))
           if (l & 0x1)
               j++;
       if (j != 1)
  -        return L2_ERROR;
  +        return L2_ERR_ARG;
   
  -    /* check whether level is globally enabled */
  +    /* check whether global level mask already stops processing */
       if (!(st->levelmask & level))
           return L2_OK;
   
  @@ -171,21 +203,23 @@
       vfmt.curpos = st->message;
       vfmt.endpos = st->message + L2_MAX_MSGSIZE;
       vfmt.data[0].vp = st;
  +    vfmt.data[1].i  = L2_ERR_FMT;
       vfmt.flush  = l2_stream_vlog_flush;
       vfmt.format = l2_stream_vlog_format;
       if ((len = l2_util_format(&vfmt, fmt, ap)) == -1)
  -        return L2_ERROR;
  +        return (l2_result_t)(vfmt.data[1].i);
       if (len == 0)
  -        return L2_ERROR;
  +        return L2_ERR_FMT;
   
       /* make sure a trailing newline exists */
       if (st->message[len-1] != '\n') {
           if (len == L2_MAX_MSGSIZE)
  -            return L2_ERROR;
  +            return L2_ERR_MEM;
           st->message[len++] = '\n';
           st->message[len]   = '\0';
       }
   
  +    /* write message to zero or more channels */
       rv = L2_OK;
       for (i = 0; i < L2_MAX_CHANNELS && st->channels[i].ch != NULL; i++) {
           if (st->channels[i].levelmask & level) {
  @@ -196,15 +230,24 @@
       return rv;
   }
   
  +/* destroy stream */
   l2_result_t l2_stream_destroy(l2_stream_t *st)
   {
       int i;
  +    l2_result_t rv;
   
  +    /* argument sanity check */
       if (st == NULL)
  -        return L2_ERROR;
  +        return L2_ERR_ARG;
  +
  +    /* destroy all attached channels */
       for (i = 0; i < L2_MAX_CHANNELS && st->channels[i].ch != NULL; i++)
  -        l2_channel_destroy(st->channels[i].ch);
  +        if ((rv = l2_channel_destroy(st->channels[i].ch)) != L2_OK)
  +            return rv;
  +
  +    /* free stream structure */
       free(st);
  +
       return L2_OK;
   }
   
  Index: ossp-pkg/l2/l2_ut_fmtcb.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 l2_ut_fmtcb.c
  --- ossp-pkg/l2/l2_ut_fmtcb.c	2001/09/06 11:56:15	1.1
  +++ ossp-pkg/l2/l2_ut_fmtcb.c	2001/09/06 14:37:53	1.2
  @@ -41,8 +41,10 @@
   
       cpStr = va_arg(*ap, char *);
       nStr  = (size_t)va_arg(*ap, int);
  +    if (cpStr == NULL)
  +        return L2_ERR_ARG;
       if (nStr > bufsize)
  -        return L2_ERROR;
  +        return L2_ERR_MEM;
       memcpy(bufptr, cpStr, nStr);
       *buflen = nStr;
       return L2_OK;
  @@ -71,6 +73,10 @@
       ucpData = va_arg(*ap, unsigned char *);
       nData   = (size_t)va_arg(*ap, int);
   
  +    /* argument sanity check */
  +    if (ucpData == NULL)
  +        return L2_ERR_ARG;
  +
       /* 
        * textual dumping: "foo\1bar" -> "foo\x01bar"
        */
  @@ -81,18 +87,18 @@
               uc = *cpI++;
               if (isprint((int)uc)) {
                   if ((char *)cpO >= (bufptr+bufsize))
  -                    return L2_ERROR;
  +                    return L2_ERR_MEM;
                   *cpO++ = uc;
               }
               else if (uc == '\\') {
                   if ((char *)(cpO+1) >= (bufptr+bufsize))
  -                    return L2_ERROR;
  +                    return L2_ERR_MEM;
                   *cpO++ = '\\';
                   *cpO++ = '\\';
               }
               else {
                   if ((char *)(cpO+3) >= (bufptr+bufsize))
  -                    return L2_ERROR;
  +                    return L2_ERR_MEM;
                   *cpO++ = '\\';
                   *cpO++ = 'x';
                   *cpO++ = hex_table[(uc >> 4) & 0xf];
  @@ -107,7 +113,7 @@
        */
       else if (strcmp(param, "hex") == 0) {
           if (((nData * 3) - 1) > bufsize)
  -            return L2_ERROR;
  +            return L2_ERR_MEM;
           cpO = (unsigned char *)bufptr;
           for (i = 0; i < nData; i++) {
               uc = *ucpData++;
  @@ -135,7 +141,7 @@
               base64_out[2] = ((base64_in[1] & 0x0f) << 2) + (base64_in[2] >> 6);
               base64_out[3] = ( base64_in[2] & 0x3f);
               if (n + 4 > bufsize)
  -                return L2_ERROR;
  +                return L2_ERR_MEM;
               bufptr[n++] = base64_table[base64_out[0]];
               bufptr[n++] = base64_table[base64_out[1]];
               bufptr[n++] = base64_table[base64_out[2]];
  @@ -150,7 +156,7 @@
               base64_out[1] = ((base64_in[0] & 0x03) << 4) + (base64_in[1] >> 4);
               base64_out[2] = ((base64_in[1] & 0x0f) << 2) + (base64_in[2] >> 6);
               if (n + 4 > bufsize)
  -                return L2_ERROR;
  +                return L2_ERR_MEM;
               bufptr[n++] = base64_table[base64_out[0]];
               bufptr[n++] = base64_table[base64_out[1]];
               if (nData == 1)
  @@ -160,13 +166,13 @@
               bufptr[n++] = '=';
           }
           if (n >= bufsize)
  -            return L2_ERROR;
  +            return L2_ERR_MEM;
           *buflen = n;
       }
   
       /* anything else is an unknown dumping method... */
       else
  -        return L2_ERROR;
  +        return L2_ERR_ARG;
   
       return L2_OK;
   }
  Index: ossp-pkg/l2/l2_ut_format.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 l2_ut_format.c
  --- ossp-pkg/l2/l2_ut_format.c	2001/09/04 13:52:59	1.1
  +++ ossp-pkg/l2/l2_ut_format.c	2001/09/06 14:37:53	1.2
  @@ -1023,6 +1023,8 @@
                           vbuff->format(vbuff,
                                         &prefix_char, &pad_char, &s, &s_len, 
                                         num_buf, NUM_BUF_SIZE, extinfo, *fmt, &ap);
  +                        if (s == NULL)
  +                            return -1;
                       }
                       if (s == NULL) {
                           char_buf[0] = '%';
  Index: ossp-pkg/l2/l2_ut_level.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 l2_ut_level.c
  --- ossp-pkg/l2/l2_ut_level.c	2001/09/05 13:32:04	1.1
  +++ ossp-pkg/l2/l2_ut_level.c	2001/09/06 14:37:53	1.2
  @@ -62,7 +62,7 @@
               levelmask &= ~(l2s_table[i].level);
               l = strlen(l2s_table[i].string) + 1;
               if (len < l)
  -                return L2_ERROR;
  +                return L2_ERR_MEM;
               sprintf(string+(maxlen-len), "%s%c", l2s_table[i].string, sep);
               len -= l;
           }
  @@ -71,7 +71,7 @@
           sprintf(hexbuf, "0x%x", levelmask);
           l = strlen(hexbuf) + 1;
           if (len < l)
  -            return L2_ERROR;
  +            return L2_ERR_MEM;
           sprintf(string+(maxlen-len), "%s%c", hexbuf, sep);
           len -= l;
       }
  @@ -131,7 +131,7 @@
                   *levelmask |= hexval(cpB+2, cpE);
               }
               else
  -                return L2_ERROR;
  +                return L2_ERR_ARG;
           }
       }
       return L2_OK;
  Index: ossp-pkg/l2/l2_ut_param.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 l2_ut_param.c
  --- ossp-pkg/l2/l2_ut_param.c	2001/09/05 13:34:58	1.3
  +++ ossp-pkg/l2/l2_ut_param.c	2001/09/06 14:37:53	1.4
  @@ -40,7 +40,7 @@
       int i; 
   
       if (pa == NULL || fmt == NULL || ap == NULL)
  -        return L2_ERROR;
  +        return L2_ERR_ARG;
       cpE = fmt;
       while (*cpE != '\0') {
           /* determine begin of parameter name */
  @@ -102,7 +102,7 @@
               }
           }
           if (!ok)
  -            return L2_ERROR;
  +            return L2_ERR_USE;
       }
       return L2_OK;
   }

From ossp-cvs-owner@ossp.org  Thu Sep  6 16:43:27 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f86EhPX28493; Thu, 6 Sep 2001 16:43:25 +0200 (CEST)
Date: Thu, 6 Sep 2001 16:43:25 +0200 (CEST)
Message-Id: <200109061443.f86EhPX28493@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_file.c l2_ch_socket.c l2_ch_syslog.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   06-Sep-2001 16:43:25
  Branch: HEAD                             Handle: 2001090615432500

  Modified files:
    ossp-pkg/l2             l2_ch_file.c l2_ch_socket.c l2_ch_syslog.c

  Log:
    It is fully legal to have some handler operations not implemented in
    case there is nothing to do for the handler. So remove the No-op hooks.

  Summary:
    Revision    Changes     Path
    1.15        +1  -9      ossp-pkg/l2/l2_ch_file.c
    1.15        +1  -9      ossp-pkg/l2/l2_ch_socket.c
    1.16        +1  -9      ossp-pkg/l2/l2_ch_syslog.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_file.c
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 l2_ch_file.c
  --- ossp-pkg/l2/l2_ch_file.c	2001/09/06 14:37:53	1.14
  +++ ossp-pkg/l2/l2_ch_file.c	2001/09/06 14:43:25	1.15
  @@ -124,14 +124,6 @@
       return L2_OK;
   }
   
  -/* flush channel */
  -static l2_result_t hook_flush(l2_context_t *ctx, l2_channel_t *ch)
  -{
  -    /* NOP for this channel, because Unix I/O files are unbuffered! */
  -
  -    return L2_OK;
  -}
  -
   /* close channel */
   static l2_result_t hook_close(l2_context_t *ctx, l2_channel_t *ch)
   {
  @@ -170,7 +162,7 @@
       hook_configure,
       hook_open,
       hook_write,
  -    hook_flush,
  +    NULL,
       hook_close,
       hook_destroy
   };
  Index: ossp-pkg/l2/l2_ch_socket.c
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 l2_ch_socket.c
  --- ossp-pkg/l2/l2_ch_socket.c	2001/09/06 14:37:53	1.14
  +++ ossp-pkg/l2/l2_ch_socket.c	2001/09/06 14:43:25	1.15
  @@ -271,14 +271,6 @@
       return L2_OK;
   }
   
  -/* flush channel */
  -static l2_result_t hook_flush(l2_context_t *ctx, l2_channel_t *ch)
  -{
  -    /* NOP for this channel, because Unix I/O sockets are unbuffered! */
  -
  -    return L2_OK;
  -}
  -
   /* close channel */
   static l2_result_t hook_close(l2_context_t *ctx, l2_channel_t *ch)
   {
  @@ -317,7 +309,7 @@
       hook_configure,
       hook_open,
       hook_write,
  -    hook_flush,
  +    NULL,
       hook_close,
       hook_destroy
   };
  Index: ossp-pkg/l2/l2_ch_syslog.c
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 l2_ch_syslog.c
  --- ossp-pkg/l2/l2_ch_syslog.c	2001/09/06 14:37:53	1.15
  +++ ossp-pkg/l2/l2_ch_syslog.c	2001/09/06 14:43:25	1.16
  @@ -117,14 +117,6 @@
       return L2_OK;
   }
   
  -/* flush channel */
  -static l2_result_t hook_flush(l2_context_t *ctx, l2_channel_t *ch)
  -{
  -    /* Noop for this channel, because syslog entries are unbuffered */
  -
  -    return L2_OK;
  -}
  -
   /* close channel */
   static l2_result_t hook_close(l2_context_t *ctx, l2_channel_t *ch)
   {
  @@ -160,7 +152,7 @@
       hook_configure,
       hook_open,
       hook_write,
  -    hook_flush,
  +    NULL,
       hook_close,
       hook_destroy
   };

From ossp-cvs-owner@ossp.org  Thu Sep  6 18:10:08 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f86GA6P37947; Thu, 6 Sep 2001 18:10:06 +0200 (CEST)
Date: Thu, 6 Sep 2001 18:10:06 +0200 (CEST)
Message-Id: <200109061610.f86GA6P37947@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_buffer.c l2_ch_file.c l2_ch_prefix.c l2_...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   06-Sep-2001 18:10:06
  Branch: HEAD                             Handle: 2001090617100500

  Modified files:
    ossp-pkg/l2             l2_ch_buffer.c l2_ch_file.c l2_ch_prefix.c
                            l2_ch_socket.c l2_ch_syslog.c

  Log:
    Simplify channels again: The channel framework gurranties that the
    handler context is available if the handler has set it, so there is
    no need to perform an additional run-time check and try to return
    L2_ERR_ARG.

  Summary:
    Revision    Changes     Path
    1.17        +21 -49     ossp-pkg/l2/l2_ch_buffer.c
    1.16        +8  -28     ossp-pkg/l2/l2_ch_file.c
    1.10        +3  -7      ossp-pkg/l2/l2_ch_prefix.c
    1.16        +7  -19     ossp-pkg/l2/l2_ch_socket.c
    1.17        +6  -24     ossp-pkg/l2/l2_ch_syslog.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_buffer.c
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 l2_ch_buffer.c
  --- ossp-pkg/l2/l2_ch_buffer.c	2001/09/06 14:37:53	1.16
  +++ ossp-pkg/l2/l2_ch_buffer.c	2001/09/06 16:10:05	1.17
  @@ -61,34 +61,27 @@
   /* configure channel */
   static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
  -    l2_ch_buffer_t *cfg;
  +    l2_ch_buffer_t *cfg = (l2_ch_buffer_t *)ctx->vp;
       l2_param_t pa[2];
       l2_result_t rv;
   
  -    /* parameter checks */
  -    if ((cfg = (l2_ch_buffer_t *)ctx->vp) == NULL)
  -        return L2_ERR_ARG;
  -
       /* feed and call generic parameter parsing engine */
       L2_PARAM_SET(pa[0], size, INT, &cfg->bufsize);
       L2_PARAM_END(pa[1]);
       rv = l2_util_setparams(pa, fmt, ap);
       if (cfg->bufsize < 0) 
           return L2_ERR_ARG;
  +
       return rv;
   }
   
   /* open channel */
   static l2_result_t hook_open(l2_context_t *ctx, l2_channel_t *ch)
   {
  -    l2_ch_buffer_t *cfg;
  -    l2_channel_t *downstream;
  +    l2_ch_buffer_t *cfg = (l2_ch_buffer_t *)ctx->vp;
  +    l2_channel_t *downstream = l2_channel_downstream(ch);
       l2_result_t rv;
   
  -    /* parameter checks */
  -    if ((cfg = (l2_ch_buffer_t *)ctx->vp) == NULL)
  -        return L2_ERR_ARG;
  -
       /* open channel buffer */
       if (cfg->bufsize > 0) {
           if ((cfg->buf = malloc(cfg->bufsize)) == NULL)
  @@ -97,9 +90,8 @@
       }
   
       /* optionally open downstream channel, too */
  -    if ((downstream = l2_channel_downstream(ch)) != NULL)
  -        if ((rv = l2_channel_open(downstream)) != L2_OK)
  -            return rv;
  +    if ((rv = l2_channel_open(downstream)) != L2_OK)
  +        return rv;
   
       return L2_OK;
   }
  @@ -108,14 +100,10 @@
   static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch, 
                         const char *buf, size_t bufsize)
   {
  +    l2_ch_buffer_t *cfg = (l2_ch_buffer_t *)ctx->vp;
       l2_channel_t *downstream = l2_channel_downstream(ch);
  -    l2_ch_buffer_t *cfg;
       l2_result_t rv;
   
  -    /* parameter checks */
  -    if ((cfg = (l2_ch_buffer_t *)ctx->vp) == NULL)
  -        return L2_ERR_ARG;
  -
       if (bufsize > (cfg->bufsize - cfg->bufpos)) {
           /* flush buffer if necessary */
           if (cfg->bufpos > 0) {
  @@ -138,26 +126,20 @@
   /* flush channel */
   static l2_result_t hook_flush(l2_context_t *ctx, l2_channel_t *ch)
   {
  -    l2_ch_buffer_t *cfg;
  -    l2_channel_t *downstream;
  +    l2_ch_buffer_t *cfg = (l2_ch_buffer_t *)ctx->vp;
  +    l2_channel_t *downstream = l2_channel_downstream(ch);
       l2_result_t rv;
   
  -    /* parameter checks */
  -    if ((cfg = (l2_ch_buffer_t *)ctx->vp) == NULL)
  -        return L2_ERR_ARG;
  -
       /* write the buffer contents downstream */
       if (cfg->bufpos > 0) {
  -        if ((downstream = l2_channel_downstream(ch)) != NULL)
  -            if ((rv = l2_channel_write(downstream, cfg->buf, cfg->bufpos)) != L2_OK)
  -                return rv;
  +        if ((rv = l2_channel_write(downstream, cfg->buf, cfg->bufpos)) != L2_OK)
  +            return rv;
           cfg->bufpos = 0;
       }
   
       /* optionally flush downstream channel, too */
  -    if ((downstream = l2_channel_downstream(ch)) != NULL)
  -        if ((rv = l2_channel_flush(downstream)) != L2_OK)
  -            return rv;
  +    if ((rv = l2_channel_flush(downstream)) != L2_OK)
  +        return rv;
   
       return L2_OK;
   }
  @@ -165,26 +147,20 @@
   /* close channel */
   static l2_result_t hook_close(l2_context_t *ctx, l2_channel_t *ch)
   {
  -    l2_ch_buffer_t *cfg;
  -    l2_channel_t *downstream;
  +    l2_ch_buffer_t *cfg = (l2_ch_buffer_t *)ctx->vp;
  +    l2_channel_t *downstream = l2_channel_downstream(ch);
       l2_result_t rv;
  -
  -    /* parameter checks */
  -    if ((cfg = (l2_ch_buffer_t *)ctx->vp) == NULL)
  -        return L2_ERR_ARG;
   
  -    /* write stale data before closing down */
  +    /* write pending data before closing down */
       if (cfg->bufpos > 0) {
  -        if ((downstream = l2_channel_downstream(ch)) != NULL)
  -            if ((rv = l2_channel_write(downstream, cfg->buf, cfg->bufpos)) != L2_OK)
  -                return rv;
  +        if ((rv = l2_channel_write(downstream, cfg->buf, cfg->bufpos)) != L2_OK)
  +            return rv;
           cfg->bufpos = 0;
       }
   
       /* optionally close downstream channel, too */
  -    if ((downstream = l2_channel_downstream(ch)) != NULL)
  -        if ((rv = l2_channel_close(downstream)) != L2_OK)
  -            return rv;
  +    if ((rv = l2_channel_close(downstream)) != L2_OK)
  +        return rv;
   
       /* close channel buffer */
       if (cfg->buf != NULL) {
  @@ -198,11 +174,7 @@
   /* destroy channel */
   static l2_result_t hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
   {
  -    l2_ch_buffer_t *cfg;
  -
  -    /* parameter checks */
  -    if ((cfg = (l2_ch_buffer_t *)ctx->vp) == NULL)
  -        return L2_ERR_ARG;
  +    l2_ch_buffer_t *cfg = (l2_ch_buffer_t *)ctx->vp;
   
       /* if not already closed, close channel buffer now */
       if (cfg->buf != NULL) {
  Index: ossp-pkg/l2/l2_ch_file.c
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 l2_ch_file.c
  --- ossp-pkg/l2/l2_ch_file.c	2001/09/06 14:43:25	1.15
  +++ ossp-pkg/l2/l2_ch_file.c	2001/09/06 16:10:05	1.16
  @@ -65,14 +65,10 @@
   /* configure channel */
   static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
  -    l2_ch_file_t *cfg;
  +    l2_ch_file_t *cfg = (l2_ch_file_t *)ctx->vp;
       l2_param_t pa[4]; 
       l2_result_t rv;
   
  -    /* parameter checks */
  -    if ((cfg = (l2_ch_file_t *)ctx->vp) == NULL)
  -        return L2_ERR_ARG;
  -
       /* feed and call generic parameter parsing engine */
       L2_PARAM_SET(pa[0], path,   CHARPTR, &cfg->path);
       L2_PARAM_SET(pa[1], append, INT,     &cfg->append);
  @@ -86,12 +82,10 @@
   /* open channel */
   static l2_result_t hook_open(l2_context_t *ctx, l2_channel_t *ch)
   {
  -    l2_ch_file_t *cfg;
  +    l2_ch_file_t *cfg = (l2_ch_file_t *)ctx->vp;
       int mode;
   
  -    /* parameter checks */
  -    if ((cfg = (l2_ch_file_t *)ctx->vp) == NULL)
  -        return L2_ERR_ARG;
  +    /* make sure a path was set */
       if (cfg->path == NULL)
           return L2_ERR_USE;
   
  @@ -109,14 +103,8 @@
   static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch, 
                         const char *buf, size_t buf_size)
   {
  -    l2_ch_file_t *cfg;
  -
  -    /* parameter checks */
  -    if ((cfg = (l2_ch_file_t *)ctx->vp) == NULL)
  -        return L2_ERR_ARG;
  -    if (cfg->fd == -1)
  -        return L2_ERR_USE;
  -
  +    l2_ch_file_t *cfg = (l2_ch_file_t *)ctx->vp;
  +    
       /* write message to channel file */
       if (write(cfg->fd, buf, buf_size) == -1)
           return L2_ERR_SYS;
  @@ -127,13 +115,7 @@
   /* close channel */
   static l2_result_t hook_close(l2_context_t *ctx, l2_channel_t *ch)
   {
  -    l2_ch_file_t *cfg;
  -
  -    /* parameter checks */
  -    if ((cfg = (l2_ch_file_t *)ctx->vp) == NULL)
  -        return L2_ERR_ARG;
  -    if (cfg->fd == -1)
  -        return L2_ERR_USE;
  +    l2_ch_file_t *cfg = (l2_ch_file_t *)ctx->vp;
   
       /* close channel file */
       close(cfg->fd);
  @@ -145,12 +127,10 @@
   /* destroy channel */
   static l2_result_t hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
   {
  -    /* parameter checks */
  -    if (ctx->vp == NULL) 
  -        return L2_ERR_ARG;
  +    l2_ch_file_t *cfg = (l2_ch_file_t *)ctx->vp;
   
       /* destroy channel configuration */
  -    free(ctx->vp);
  +    free(cfg);
   
       return L2_OK;
   }
  Index: ossp-pkg/l2/l2_ch_prefix.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 l2_ch_prefix.c
  --- ossp-pkg/l2/l2_ch_prefix.c	2001/09/06 14:37:53	1.9
  +++ ossp-pkg/l2/l2_ch_prefix.c	2001/09/06 16:10:05	1.10
  @@ -86,17 +86,13 @@
   static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch, 
                                 const char *buf, size_t buf_size)
   {
  -    l2_ch_prefix_t *cfg;
  -    l2_channel_t *downstream;
  +    l2_ch_prefix_t *cfg = (l2_ch_prefix_t *)ctx->vp;
  +    l2_channel_t *downstream = l2_channel_downstream(ch);
       time_t t;
       struct tm *tm;
       size_t n;
       l2_result_t rv;
   
  -    /* get environment */
  -    cfg = (l2_ch_prefix_t *)ctx->vp;
  -    downstream = l2_channel_downstream(ch);
  -
       /* optionally provide prefix */
       if (cfg->timefmt != NULL) {
           t = time(NULL);
  @@ -124,12 +120,12 @@
   {
       l2_ch_prefix_t *cfg = (l2_ch_prefix_t *)ctx->vp;
   
  +    /* free prefix structure */
       if (cfg->timefmt != NULL)
           free(cfg->timefmt);
       if (cfg->timezone != NULL)
           free(cfg->timezone);
       free(cfg);
  -    ctx->vp = NULL;
   
       return L2_OK;
   }
  Index: ossp-pkg/l2/l2_ch_socket.c
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 l2_ch_socket.c
  --- ossp-pkg/l2/l2_ch_socket.c	2001/09/06 14:43:25	1.15
  +++ ossp-pkg/l2/l2_ch_socket.c	2001/09/06 16:10:05	1.16
  @@ -126,14 +126,10 @@
   /* configure channel */
   static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
  -    l2_ch_socket_t *cfg;
  +    l2_ch_socket_t *cfg = (l2_ch_socket_t *)ctx->vp;
       l2_param_t pa[4];
       l2_result_t rv;
   
  -    /* parameter checks */
  -    if ((cfg = (l2_ch_socket_t *)ctx->vp) == NULL)
  -        return L2_ERR_ARG;
  -
       /* feed and call generic parameter parsing engine */
       L2_PARAM_SET(pa[0], ipversion, INT,     &cfg->iFamily);
       L2_PARAM_SET(pa[1], host,      CHARPTR, &cfg->pszHost);
  @@ -147,15 +143,13 @@
   /* open channel */
   static l2_result_t hook_open(l2_context_t *ctx, l2_channel_t *ch)
   {
  -    l2_ch_socket_t      *cfg;
  +    l2_ch_socket_t *cfg = (l2_ch_socket_t *)ctx->vp;
       struct hostent      *pHostentry;
       struct sockaddr_in  IP4Sockaddr;
       struct sockaddr_in6 IP6Sockaddr;
       struct in6_addr     *IP6Addr;
   
  -    /* parameter checks */
  -    if ((cfg = (l2_ch_socket_t *)ctx->vp) == NULL)
  -        return L2_ERR_ARG;
  +    /* make sure a target is configured */
       if (cfg->pszHost == NULL)
           return L2_ERR_USE;
   
  @@ -245,13 +239,11 @@
   static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch, 
                         const char *buf, size_t buf_size)
   {
  -    l2_ch_socket_t *cfg;
  +    l2_ch_socket_t *cfg = (l2_ch_socket_t *)ctx->vp;
       size_t          sizeWrite;
       size_t          sizeRemain;
   
       /* parameter checks */
  -    if ((cfg = (l2_ch_socket_t *)ctx->vp) == NULL)
  -        return L2_ERR_ARG;
       if (cfg->iSocket == -1)
           return L2_ERR_USE;
   
  @@ -274,11 +266,9 @@
   /* close channel */
   static l2_result_t hook_close(l2_context_t *ctx, l2_channel_t *ch)
   {
  -    l2_ch_socket_t *cfg;
  +    l2_ch_socket_t *cfg = (l2_ch_socket_t *)ctx->vp;
   
       /* parameter checks */
  -    if ((cfg = (l2_ch_socket_t *)ctx->vp) == NULL)
  -        return L2_ERR_ARG;
       if (cfg->iSocket == -1)
           return L2_ERR_USE;
   
  @@ -292,12 +282,10 @@
   /* destroy channel */
   static l2_result_t hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
   {
  -    /* parameter checks */
  -    if (ctx->vp == NULL) 
  -        return L2_ERR_ARG;
  +    l2_ch_socket_t *cfg = (l2_ch_socket_t *)ctx->vp;
   
       /* destroy channel configuration */
  -    free(ctx->vp);
  +    free(cfg);
   
       return L2_OK;
   }
  Index: ossp-pkg/l2/l2_ch_syslog.c
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 l2_ch_syslog.c
  --- ossp-pkg/l2/l2_ch_syslog.c	2001/09/06 14:43:25	1.16
  +++ ossp-pkg/l2/l2_ch_syslog.c	2001/09/06 16:10:05	1.17
  @@ -65,14 +65,10 @@
   /* configure channel */
   static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
  -    l2_ch_syslog_t *cfg;
  +    l2_ch_syslog_t *cfg = (l2_ch_syslog_t *)ctx->vp;
       l2_param_t pa[6];
       l2_result_t rv;
   
  -    /* parameter checks */
  -    if ((cfg = (l2_ch_syslog_t *)ctx->vp) == NULL)
  -        return L2_ERR_ARG;
  -
       /* feed and call generic parameter parsing engine */
       L2_PARAM_SET(pa[0], ident,   CHARPTR,  &cfg->pszIdent);
       L2_PARAM_SET(pa[1], logopts, INT,      &cfg->iLogopt);
  @@ -88,11 +84,7 @@
   /* open channel */
   static l2_result_t hook_open(l2_context_t *ctx, l2_channel_t *ch)
   {
  -    l2_ch_syslog_t *cfg;
  -
  -    /* parameter checks */
  -    if ((cfg = (l2_ch_syslog_t *)ctx->vp) == NULL)
  -        return L2_ERR_ARG;
  +    l2_ch_syslog_t *cfg = (l2_ch_syslog_t *)ctx->vp;
   
       /* open channel syslog */
       openlog(cfg->pszIdent, cfg->iLogopt, cfg->iFacility);
  @@ -105,12 +97,8 @@
   static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch, 
                         const char *buf, size_t buf_size)
   {
  -    l2_ch_syslog_t *cfg;
  +    l2_ch_syslog_t *cfg = (l2_ch_syslog_t *)ctx->vp;
   
  -    /* parameter checks */
  -    if ((cfg = (l2_ch_syslog_t *)ctx->vp) == NULL)
  -        return L2_ERR_ARG;
  -
       /* write message to channel syslog */
       syslog(cfg->iPriority, buf);
   
  @@ -120,11 +108,7 @@
   /* close channel */
   static l2_result_t hook_close(l2_context_t *ctx, l2_channel_t *ch)
   {
  -    l2_ch_syslog_t *cfg;
  -
  -    /* parameter checks */
  -    if ((cfg = (l2_ch_syslog_t *)ctx->vp) == NULL)
  -        return L2_ERR_ARG;
  +    l2_ch_syslog_t *cfg = (l2_ch_syslog_t *)ctx->vp;
   
       /* close channel syslog */
       closelog();
  @@ -135,12 +119,10 @@
   /* destroy channel */
   static l2_result_t hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
   {
  -    /* parameter checks */
  -    if (ctx->vp == NULL) 
  -        return L2_ERR_ARG;
  +    l2_ch_syslog_t *cfg = (l2_ch_syslog_t *)ctx->vp;
   
       /* destroy channel configuration */
  -    free(ctx->vp);
  +    free(cfg);
   
       return L2_OK;
   }

From ossp-cvs-owner@ossp.org  Thu Sep  6 18:14:55 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f86GEsc38546; Thu, 6 Sep 2001 18:14:54 +0200 (CEST)
Date: Thu, 6 Sep 2001 18:14:54 +0200 (CEST)
Message-Id: <200109061614.f86GEsc38546@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_socket.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   06-Sep-2001 18:14:54
  Branch: HEAD                             Handle: 2001090617145400

  Modified files:
    ossp-pkg/l2             l2_ch_socket.c

  Log:
    Use plain K&R coding style.

  Summary:
    Revision    Changes     Path
    1.17        +23 -38     ossp-pkg/l2/l2_ch_socket.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_socket.c
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 l2_ch_socket.c
  --- ossp-pkg/l2/l2_ch_socket.c	2001/09/06 16:10:05	1.16
  +++ ossp-pkg/l2/l2_ch_socket.c	2001/09/06 16:14:54	1.17
  @@ -95,8 +95,7 @@
   #endif
   
   /* declare private channel configuration */
  -typedef struct
  -{
  +typedef struct {
       int iFamily;             /* IP version to use, AF_INET4 or AF_INET6  */
       char *pszHost;           /* IP Address or name of host to connect to */
       int iPort;               /* TCP Port to connect to                   */
  @@ -144,36 +143,31 @@
   static l2_result_t hook_open(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_socket_t *cfg = (l2_ch_socket_t *)ctx->vp;
  -    struct hostent      *pHostentry;
  -    struct sockaddr_in  IP4Sockaddr;
  +    struct hostent *pHostentry;
  +    struct sockaddr_in IP4Sockaddr;
       struct sockaddr_in6 IP6Sockaddr;
  -    struct in6_addr     *IP6Addr;
  +    struct in6_addr *IP6Addr;
   
       /* make sure a target is configured */
       if (cfg->pszHost == NULL)
           return L2_ERR_USE;
   
  -    /* open channel socket      */
  -    if (cfg->iFamily == AF_INET) /* IPv4 */
  -    {
  +    /* open channel socket */
  +    if (cfg->iFamily == AF_INET) { /* IPv4 */
           /* resolve host numerically */
  -        if (inet_pton(AF_INET, cfg->pszHost, &IP4Sockaddr.sin_addr.s_addr) == 1)
  -        {
  +        if (inet_pton(AF_INET, cfg->pszHost, &IP4Sockaddr.sin_addr.s_addr) == 1) {
               IP4Sockaddr.sin_family = AF_INET;
               IP4Sockaddr.sin_port   = htons(cfg->iPort);
           }
   
           /* resolve host nominally */
  -        else if ((pHostentry = gethostbyname(cfg->pszHost)) != NULL)
  -        {
  -            if (pHostentry->h_addrtype == AF_INET)
  -            {
  +        else if ((pHostentry = gethostbyname(cfg->pszHost)) != NULL) {
  +            if (pHostentry->h_addrtype == AF_INET) {
                   IP4Sockaddr.sin_family = AF_INET;
                   IP4Sockaddr.sin_port   = htons(cfg->iPort);
  -                memcpy(&IP4Sockaddr.sin_addr.s_addr, pHostentry->h_addr_list[0],\
  -                    sizeof(IP4Sockaddr.sin_addr.s_addr));
  +                memcpy(&IP4Sockaddr.sin_addr.s_addr, pHostentry->h_addr_list[0],
  +                       sizeof(IP4Sockaddr.sin_addr.s_addr));
               }
  -
               else
                   return L2_ERR_USE; /* what?? we specify IPv4 when it is not? */
           }
  @@ -184,8 +178,7 @@
           if ((cfg->iSocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1)
               return L2_ERR_SYS;
   
  -        if (connect(cfg->iSocket, (struct sockaddr *)&IP4Sockaddr, sizeof(IP4Sockaddr)))
  -        {
  +        if (connect(cfg->iSocket, (struct sockaddr *)&IP4Sockaddr, sizeof(IP4Sockaddr))) {
               close(cfg->iSocket);
               return L2_ERR_SYS;
           }
  @@ -193,26 +186,21 @@
           return L2_OK; /* we are connected */
       }
   
  -    else if (cfg->iFamily == AF_INET6) /* IPv6 */
  -    {
  +    else if (cfg->iFamily == AF_INET6) { /* IPv6 */
           /* resolve host numerically */
  -        if (inet_pton(AF_INET6, cfg->pszHost, &IP6Sockaddr.sin6_addr.s6_addr) == 1)
  -        {
  +        if (inet_pton(AF_INET6, cfg->pszHost, &IP6Sockaddr.sin6_addr.s6_addr) == 1) {
               IP6Sockaddr.sin6_family = AF_INET6;
               IP6Sockaddr.sin6_port   = htons(cfg->iPort);
           }
   
           /* resolve host nominally */
  -        else if (pHostentry = gethostbyname(cfg->pszHost) != NULL)
  -        {
  -            if (pHostentry->h_addrtype == AF_INET6)
  -            {
  +        else if (pHostentry = gethostbyname(cfg->pszHost) != NULL) {
  +            if (pHostentry->h_addrtype == AF_INET6) {
                   IP6Sockaddr.sin6_family = AF_INET6;
                   IP6Sockaddr.sin6_port   = htons(cfg->iPort);
                   memcpy(&IP6Sockaddr.sin6_addr.__u6_addr, pHostentry->h_addr_list[0],\
                       sizeof(IP6Sockaddr.sin6_addr.__u6_addr));
               }
  -
               else
                   return L2_ERR_USE; /* what?? we specify IPv6 when it is not? */
           }
  @@ -223,8 +211,7 @@
           if ((cfg->iSocket = socket(PF_INET6, SOCK_STREAM, IPPROTO_TCP)) == -1)
               return L2_ERR_SYS;
   
  -        if (connect(cfg->iSocket, (struct sockaddr *)&IP6Sockaddr, sizeof(IP6Sockaddr)))
  -        {
  +        if (connect(cfg->iSocket, (struct sockaddr *)&IP6Sockaddr, sizeof(IP6Sockaddr))) {
               close(cfg->iSocket);
               return L2_ERR_SYS;
           }
  @@ -240,22 +227,20 @@
                         const char *buf, size_t buf_size)
   {
       l2_ch_socket_t *cfg = (l2_ch_socket_t *)ctx->vp;
  -    size_t          sizeWrite;
  -    size_t          sizeRemain;
  +    size_t sizeWrite;
  +    size_t sizeRemain;
   
       /* parameter checks */
       if (cfg->iSocket == -1)
           return L2_ERR_USE;
   
  -    /* write message to channel socket, but check to make   */
  -    /* sure that the whole message was successfully written */
  +    /* write message to channel socket, but check to make 
  +       sure that the whole message was successfully written */
       sizeWrite  = 0;
       sizeRemain = buf_size;
  -    while(sizeRemain)
  -    {
  +    while (sizeRemain) {
           sizeWrite  = send(cfg->iSocket, buf + sizeWrite, sizeRemain, 0);
  -        sizeRemain = sizeRemain - sizeWrite; /* how much is left? */
  -
  +        sizeRemain = sizeRemain - sizeWrite;
           if (sizeWrite == -1)
               return L2_ERR_SYS;
       }

From ossp-cvs-owner@ossp.org  Thu Sep  6 18:28:40 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f86GSdJ39978; Thu, 6 Sep 2001 18:28:39 +0200 (CEST)
Date: Thu, 6 Sep 2001 18:28:39 +0200 (CEST)
Message-Id: <200109061628.f86GSdJ39978@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 Makefile.in configure.ac l2_p.h l2_ut_sa.c l2_...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   06-Sep-2001 18:28:39
  Branch: HEAD                             Handle: 2001090617283800

  Added files:
    ossp-pkg/l2             l2_ut_sa.c l2_ut_sa.h
  Modified files:
    ossp-pkg/l2             Makefile.in configure.ac l2_p.h

  Log:
    Add a copy of our SA library to L2 in order to simplify socket channel
    and socket monitor program.

  Summary:
    Revision    Changes     Path
    1.17        +2  -1      ossp-pkg/l2/Makefile.in
    1.3         +1  -0      ossp-pkg/l2/configure.ac
    1.12        +1  -0      ossp-pkg/l2/l2_p.h
    1.1         +212 -0     ossp-pkg/l2/l2_ut_sa.c
    1.1         +54 -0      ossp-pkg/l2/l2_ut_sa.h
  ____________________________________________________________________________

  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 Makefile.in
  --- ossp-pkg/l2/Makefile.in	2001/09/06 11:56:15	1.16
  +++ ossp-pkg/l2/Makefile.in	2001/09/06 16:28:38	1.17
  @@ -78,7 +78,8 @@
       l2_ut_param.lo \
       l2_ut_pcre.lo \
       l2_ut_level.lo \
  -    l2_ut_fmtcb.lo
  +    l2_ut_fmtcb.lo \
  +    l2_ut_sa.lo
   
   #   file containing the official version information
   _VERSION_FILE = \
  Index: ossp-pkg/l2/configure.ac
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 configure.ac
  --- ossp-pkg/l2/configure.ac	2001/08/15 10:36:03	1.2
  +++ ossp-pkg/l2/configure.ac	2001/09/06 16:28:38	1.3
  @@ -75,6 +75,7 @@
   AC_PROG_CPP
   AC_CHECK_DEBUGGING
   AC_CONFIGURE_LIBTOOL
  +AC_CHECK_FUNCS(inet_aton inet_pton)
   
   AC_OUTPUT(dnl
   Makefile dnl
  Index: ossp-pkg/l2/l2_p.h
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 l2_p.h
  --- ossp-pkg/l2/l2_p.h	2001/09/04 14:52:28	1.11
  +++ ossp-pkg/l2/l2_p.h	2001/09/06 16:28:38	1.12
  @@ -34,6 +34,7 @@
   #include <errno.h>
   
   #include "l2_ut_pcre.h"
  +#include "l2_ut_sa.h"
   
   #define L2_MAX_MSGSIZE    4096
   #define L2_MAX_CHANNELS    128
  Index: ossp-pkg/l2/l2_ut_sa.c
  ============================================================
  $ cvs update -p -r1.1 l2_ut_sa.c
  /*
  **  L2 - OSSP Logging Library
  **  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP L2, a flexible logging library which
  **  can be found at http://www.ossp.org/pkg/l2/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  l2_ut_sa.c: utility library for socket address handling
  */
  
  #include <stdio.h>
  #include <stdlib.h>
  #include <stdarg.h>
  #include <string.h>
  #include <unistd.h>
  #include <ctype.h>
  #include <errno.h>
  #include <netdb.h>
  #include <sys/types.h>
  #include <sys/un.h>
  #include <netinet/in.h>
  #include <sys/socket.h>
  #include <arpa/inet.h>
  
  #include "l2_config.h"
  #include "l2_ut_sa.h"
  
  #if !defined(AF_LOCAL) && defined(AF_UNIX)
  #define AF_LOCAL AF_UNIX
  #endif
  
  #ifndef HAVE_INET_PTON
  #ifdef HAVE_INET_ATON
  static int inet_pton(int family, const char *strptr, void *addrptr)
  {
      struct in_addr in_val;
  
      if (family == AF_INET) {
          if (inet_aton(strptr, &in_val)) {
              memcpy(addrptr, &in_val, sizeof(struct in_addr));
              return 1;
          }
          return 0;
      }
      errno = EAFNOSUPPORT;
      return -1;
  }
  #else
  #error "neither inet_pton nor inet_aton available"
  #endif
  #endif
  
  #ifndef NUL
  #define NUL '\0'
  #endif
  
  l2_util_sa_t *l2_util_sa_create(int sa_type, ...)
  {
      va_list ap;
      l2_util_sa_t *rc;
      int nPort;
      socklen_t sl;
      struct sockaddr *sa;
      struct sockaddr_in sa4;
  #ifdef AF_INET6
      struct sockaddr_in6 sa6;
  #endif
      struct sockaddr_un sau;
      struct hostent *he;
      struct servent *se;
      struct protoent *pe;
      int bNumeric;
      int i;
      char *cpPath;
      int   nPath;
      char *cpProto;
      int   nProto;
      char *cpHost;
      char *cpPort;
  
      va_start(ap, sa_type);
      sa = NULL;
      sl = 0;
      if (sa_type == SA_UNIX) {
  #if defined(AF_LOCAL)
          if ((cpPath = va_arg(ap, char *)) == NULL)
              return NULL;
          if ((nPath = strlen(cpPath)) >= (sizeof(sau.sun_path)-1))
              return NULL;
          nProto = 0;
          sau.sun_family = AF_LOCAL;
          memcpy(sau.sun_path, cpPath, nPath + 1);
          sa = (struct sockaddr *)&sau;
          sl = sizeof(sau);
  #else
          return NULL;
  #endif
      }
      else if (sa_type == SA_IP) {
          if ((cpProto = va_arg(ap, char *)) == NULL)
              return NULL;
          if ((cpHost = va_arg(ap, char *)) == NULL)
              return NULL;
          if ((cpPort = va_arg(ap, char *)) == NULL)
              return NULL;
  
          /* resolve protocol */
          if ((pe = getprotobyname(cpProto)) == NULL)
              return NULL;
          nProto = pe->p_proto;
  
          /* resolve port */
          bNumeric = 1;
          for (i = 0; cpPort[i] != NUL; i++) {
              if (!isdigit((int)cpPort[i])) {
                  bNumeric = 0;
                  break;
              }
          }
          if (bNumeric)
              nPort = atoi(cpPort);
          else {
              if ((se = getservbyname(cpPort, cpProto)) == NULL)
                  return NULL;
              nPort = ntohs(se->s_port);
          }
  
          /* resolve host */
          if (inet_pton(AF_INET, cpHost, &sa4.sin_addr.s_addr) == 1) {
              sa4.sin_family = AF_INET;
              sa4.sin_port = htons(nPort);
              sa = (struct sockaddr *)&sa4;
              sl = sizeof(sa4);
          }
  #ifdef AF_INET6
          else if (inet_pton(AF_INET6, cpHost, &sa6.sin6_addr.s6_addr) == 1) {
              sa6.sin6_family = AF_INET6;
              sa6.sin6_port = htons(nPort);
              sa = (struct sockaddr *)&sa6;
              sl = sizeof(sa6);
          }
  #endif
          else if ((he = gethostbyname(cpHost)) != NULL) {
              if (he->h_addrtype == AF_INET) {
                  sa4.sin_family = AF_INET;
                  sa4.sin_port = htons(nPort);
                  memcpy(&sa4.sin_addr.s_addr, he->h_addr_list[0], sizeof(sa4.sin_addr.s_addr));
                  sa = (struct sockaddr *)&sa4;
                  sl = sizeof(sa4);
              }
  #ifdef AF_INET6
              else if (he->h_addrtype == AF_INET6) {
                  sa6.sin6_family = AF_INET6;
                  sa6.sin6_port = htons(nPort);
                  memcpy(&sa6.sin6_addr.s6_addr, he->h_addr_list[0], sizeof(sa6.sin6_addr.s6_addr));
                  sa = (struct sockaddr *)&sa6;
                  sl = sizeof(sa6);
              }
  #endif
          }
      }
      else
          return NULL;
      va_end(ap);
  
      if (sa == NULL)
          return NULL;
          
      if ((rc = (l2_util_sa_t *)malloc(sizeof(l2_util_sa_t))) == NULL)
          return NULL;
      if ((rc->sa_buf = (struct sockaddr *)malloc(sl)) == NULL) {
          free(rc);
          return NULL;
      }
      memcpy(rc->sa_buf, sa, sl);
      rc->sa_len = sl;
      rc->sa_proto = nProto;
  
      return rc;
  }
  
  void l2_ut_sa_destroy(l2_util_sa_t *sa)
  {
      if (sa == NULL)
          return;
  
      if (sa->sa_buf != NULL)
          free(sa->sa_buf);
      free(sa);
  
      return;
  }
  
  Index: ossp-pkg/l2/l2_ut_sa.h
  ============================================================
  $ cvs update -p -r1.1 l2_ut_sa.h
  /*
  **  L2 - OSSP Logging Library
  **  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP L2, a flexible logging library which
  **  can be found at http://www.ossp.org/pkg/l2/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  l2_ut_sa.h: utility library for socket address handling
  */
  
  #ifndef __L2_UT_SA_H__
  #define __L2_UT_SA_H__
  
  #include <netdb.h>
  #include <sys/types.h>
  #include <netinet/in.h>
  #include <sys/socket.h>
  #include <arpa/inet.h>
  
  typedef struct {
      struct sockaddr *sa_buf;
      socklen_t        sa_len;
      int              sa_proto;
  } l2_util_sa_t;
  
  enum {
      SA_UNIX,
      SA_IP
  };
  
  l2_util_sa_t *l2_util_sa_create(int, ...);
  void          l2_util_sa_destroy(l2_util_sa_t *);
  
  #endif /* __L2_UT_SA_H__ */
  

From ossp-cvs-owner@ossp.org  Thu Sep  6 19:17:42 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f86HHft45502; Thu, 6 Sep 2001 19:17:41 +0200 (CEST)
Date: Thu, 6 Sep 2001 19:17:41 +0200 (CEST)
Message-Id: <200109061717.f86HHft45502@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ut_sa.c l2_ut_sa.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   06-Sep-2001 19:17:41
  Branch: HEAD                             Handle: 2001090618174100

  Modified files:
    ossp-pkg/l2             l2_ut_sa.c l2_ut_sa.h

  Log:
    use the L2 prefix

  Summary:
    Revision    Changes     Path
    1.2         +2  -2      ossp-pkg/l2/l2_ut_sa.c
    1.2         +2  -2      ossp-pkg/l2/l2_ut_sa.h
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ut_sa.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 l2_ut_sa.c
  --- ossp-pkg/l2/l2_ut_sa.c	2001/09/06 16:28:38	1.1
  +++ ossp-pkg/l2/l2_ut_sa.c	2001/09/06 17:17:41	1.2
  @@ -100,7 +100,7 @@
       va_start(ap, sa_type);
       sa = NULL;
       sl = 0;
  -    if (sa_type == SA_UNIX) {
  +    if (sa_type == L2_UTIL_SA_UNIX) {
   #if defined(AF_LOCAL)
           if ((cpPath = va_arg(ap, char *)) == NULL)
               return NULL;
  @@ -115,7 +115,7 @@
           return NULL;
   #endif
       }
  -    else if (sa_type == SA_IP) {
  +    else if (sa_type == L2_UTIL_SA_IP) {
           if ((cpProto = va_arg(ap, char *)) == NULL)
               return NULL;
           if ((cpHost = va_arg(ap, char *)) == NULL)
  Index: ossp-pkg/l2/l2_ut_sa.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 l2_ut_sa.h
  --- ossp-pkg/l2/l2_ut_sa.h	2001/09/06 16:28:38	1.1
  +++ ossp-pkg/l2/l2_ut_sa.h	2001/09/06 17:17:41	1.2
  @@ -43,8 +43,8 @@
   } l2_util_sa_t;
   
   enum {
  -    SA_UNIX,
  -    SA_IP
  +    L2_UTIL_SA_UNIX,
  +    L2_UTIL_SA_IP
   };
   
   l2_util_sa_t *l2_util_sa_create(int, ...);

From ossp-cvs-owner@ossp.org  Thu Sep  6 21:27:04 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f86JR3T59325; Thu, 6 Sep 2001 21:27:03 +0200 (CEST)
Date: Thu, 6 Sep 2001 21:27:03 +0200 (CEST)
Message-Id: <200109061927.f86JR3T59325@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_fd.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   06-Sep-2001 21:27:03
  Branch: HEAD                             Handle: 2001090620270200

  Modified files:
    ossp-pkg/l2             l2_ch_fd.c

  Log:
    Added the file descriptor implementation, just a copy of the file channel with
    some stuff left out.

  Summary:
    Revision    Changes     Path
    1.8         +82 -2      ossp-pkg/l2/l2_ch_fd.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_fd.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 l2_ch_fd.c
  --- ossp-pkg/l2/l2_ch_fd.c	2001/09/05 07:47:12	1.7
  +++ ossp-pkg/l2/l2_ch_fd.c	2001/09/06 19:27:02	1.8
  @@ -24,47 +24,127 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  l2_ch_syslog.c: filedescriptor channel implementation
  +**  l2_ch_fd.c: file descriptor channel implementation
   */
   
   #include "l2.h"
  +#include <unistd.h>
   
  +/* declare private channel configuration */
  +typedef struct {
  +    int fd;
  +} l2_ch_file_t;
  +
  +/* create channel */
   static l2_result_t hook_create(l2_context_t *ctx, l2_channel_t *ch)
   {
  +    l2_ch_file_t *cfg;
  +
  +    /* allocate private channel configuration */
  +    if ((cfg = (l2_ch_file_t *)malloc(sizeof(l2_ch_file_t))) == NULL)
  +        return L2_ERR_MEM;
  +
  +    /* initialize configuration with reasonable defaults */
  +    cfg->fd = -1; 
  +
  +    /* link private channel configuration into channel context */
  +    ctx->vp = cfg;
  +
       return L2_OK;
   }
   
  +/* configure channel */
   static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
  -    return L2_OK;
  +    l2_ch_file_t *cfg;
  +    l2_param_t pa[1]; 
  +    l2_result_t rv;
  +
  +    /* parameter checks */
  +    if ((cfg = (l2_ch_file_t *)ctx->vp) == NULL)
  +        return L2_ERR_ARG;
  +
  +    /* feed and call generic parameter parsing engine */
  +    L2_PARAM_SET(pa[0], filedescriptor, INT, &cfg->fd);
  +    L2_PARAM_END(pa[1]);
  +    rv = l2_util_setparams(pa, fmt, ap);
  +
  +    return rv;
   }
   
  +/* open channel */
   static l2_result_t hook_open(l2_context_t *ctx, l2_channel_t *ch)
   {
  +    l2_ch_file_t *cfg;
  +    int mode;
  +
  +    /* parameter checks */
  +    if ((cfg = (l2_ch_file_t *)ctx->vp) == NULL)
  +        return L2_ERR_ARG;
  +    if ((cfg->fd == -1))
  +        return L2_ERR_ARG;
  +
       return L2_OK;
   }
   
  +/* write to channel */
   static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch, 
                         const char *buf, size_t buf_size)
   {
  +    l2_ch_file_t *cfg;
  +
  +    /* parameter checks */
  +    if ((cfg = (l2_ch_file_t *)ctx->vp) == NULL)
  +        return L2_ERR_ARG;
  +    if (cfg->fd == -1)
  +        return L2_ERR_ARG;
  +
  +    /* write message to channel file */
  +    if (write(cfg->fd, buf, buf_size) == -1)
  +        return L2_ERR_SYS;
  +
       return L2_OK;
   }
   
  +/* flush channel */
   static l2_result_t hook_flush(l2_context_t *ctx, l2_channel_t *ch)
   {
  +    /* NOP for this channel, because Unix I/O files are unbuffered! */
  +
       return L2_OK;
   }
   
  +/* close channel */
   static l2_result_t hook_close(l2_context_t *ctx, l2_channel_t *ch)
   {
  +    l2_ch_file_t *cfg;
  +
  +    /* parameter checks */
  +    if ((cfg = (l2_ch_file_t *)ctx->vp) == NULL)
  +        return L2_ERR_ARG;
  +    if (cfg->fd == -1)
  +        return L2_ERR_ARG;
  +
  +    /* close channel file */
  +    /* nothing to close   */
  +
       return L2_OK;
   }
   
  +/* destroy channel */
   static l2_result_t hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
   {
  +    /* parameter checks */
  +    if (ctx->vp == NULL) 
  +        return L2_ERR_ARG;
  +
  +    /* destroy channel configuration */
  +    free(ctx->vp);
  +
       return L2_OK;
   }
   
  +/* exported channel handler structure */
   l2_handler_t l2_handler_fd = {
       L2_CHANNEL_OUTPUT,
       hook_create,

From ossp-cvs-owner@ossp.org  Thu Sep  6 21:28:26 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f86JSPt59443; Thu, 6 Sep 2001 21:28:25 +0200 (CEST)
Date: Thu, 6 Sep 2001 21:28:25 +0200 (CEST)
Message-Id: <200109061928.f86JSPt59443@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_socket.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   06-Sep-2001 21:28:25
  Branch: HEAD                             Handle: 2001090620282400

  Modified files:
    ossp-pkg/l2             l2_ch_socket.c

  Log:
    Redesigned IPv6 logic, added support for UDP. UDP write operation is still not
    working.

  Summary:
    Revision    Changes     Path
    1.18        +110 -51    ossp-pkg/l2/l2_ch_socket.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_socket.c
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 l2_ch_socket.c
  --- ossp-pkg/l2/l2_ch_socket.c	2001/09/06 16:14:54	1.17
  +++ ossp-pkg/l2/l2_ch_socket.c	2001/09/06 19:28:24	1.18
  @@ -50,37 +50,37 @@
       struct in_addr  IP4Addr;
       struct in6_addr IP6Addr;
       char            *pszIndex     = NULL;    /* To index IPv6 validity */
  -    char            *pszNextfield = NULL;    /* For IPv6 address trans */
  +    char            *pszNextfield = -1;      /* For IPv6 address trans */
   
       if (iFamily == AF_INET)
       {
           if (inet_aton(pszAddress, &IP4Addr))
           {
               memcpy(pvMemref, &IP4Addr, sizeof(struct in_addr));
  -            return 1;
  +            return 1; /* Success */
           }
           return 0;
       }
   
       else if (iFamily == AF_INET6) /* If we are translating IPv6 addresses     */
       {                             /* the user needs to use precise notation   */
  -        pszIndex = malloc(strlen(pszAddress));
  -        strcpy(pszIndex, pszAddress);           /* Initialize, verify in loop */
  -        for (i = 0; i < 8; i++)    /* Iterate through the IPv6 address fields */
  +        pszIndex = pszAddress;    /* Initialize, verify in loop               */
  +        for (i = 0; (i < 8) && pszNextfield; i++) /* Iterate through fields   */
           {
               IP6Addr.__u6_addr.__u6_addr16[i] =\
                   ntohs((u_int16_t)strtol(pszIndex, &pszNextfield, 16));
  -            if ((pszNextfield == '\0') ||\
  -               ((pszNextfield - pszIndex) != (4 * sizeof(char))))
  -            {
  -                return 0; /* User is supplying a IPv6 format we don't support */
  -            }
  +            pszIndex = pszNextfield + 1;
  +        }
  +
  +        if ((i != 8) || (*pszNextfield))
  +            return 0;
   
  -            pszIndex = ++pszNextfield;
  +        else /* Success */
  +        {
  +            memcpy(pvMemref, &IP6Addr, sizeof(struct in6_addr));
  +            return 1;
           }
   
  -        memcpy(pvMemref, &IP6Addr, sizeof(struct in6_addr));
  -        return 1;
       }
   
       else      /* User converting from an address family that we don't support */
  @@ -96,10 +96,11 @@
   
   /* declare private channel configuration */
   typedef struct {
  -    int iFamily;             /* IP version to use, AF_INET4 or AF_INET6  */
  -    char *pszHost;           /* IP Address or name of host to connect to */
  -    int iPort;               /* TCP Port to connect to                   */
  -    int iSocket;             /* Socket descriptor used during writing    */
  +    char *pszHost;           /* IP Address or name of host to connect to    */
  +    int  iFamily;            /* IP version to use, AF_INET4 or AF_INET6     */
  +    int  iProto;             /* Protocol to use, IPPROTO_TCP or IPPROTO_UDP */
  +    int  iPort;              /* TCP Port to connect to                      */
  +    int  iSocket;            /* Socket descriptor used during writing       */
   } l2_ch_socket_t;
   
   /* create channel */
  @@ -113,6 +114,8 @@
   
       /* initialize configuration with reasonable defaults */
       cfg->pszHost   = NULL;
  +    cfg->iFamily   = -1;
  +    cfg->iProto    = -1;
       cfg->iPort     = 0;
       cfg->iSocket   = -1;
   
  @@ -126,14 +129,15 @@
   static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
       l2_ch_socket_t *cfg = (l2_ch_socket_t *)ctx->vp;
  -    l2_param_t pa[4];
  +    l2_param_t pa[5];
       l2_result_t rv;
   
       /* feed and call generic parameter parsing engine */
       L2_PARAM_SET(pa[0], ipversion, INT,     &cfg->iFamily);
  -    L2_PARAM_SET(pa[1], host,      CHARPTR, &cfg->pszHost);
  -    L2_PARAM_SET(pa[2], port,      INT,     &cfg->iPort);
  -    L2_PARAM_END(pa[3]);
  +    L2_PARAM_SET(pa[1], protocol,  INT,     &cfg->iProto );
  +    L2_PARAM_SET(pa[2], host,      CHARPTR, &cfg->pszHost);
  +    L2_PARAM_SET(pa[3], port,      INT,     &cfg->iPort  );
  +    L2_PARAM_END(pa[4]);
       rv = l2_util_setparams(pa, fmt, ap);
   
       return rv;
  @@ -142,11 +146,12 @@
   /* open channel */
   static l2_result_t hook_open(l2_context_t *ctx, l2_channel_t *ch)
   {
  -    l2_ch_socket_t *cfg = (l2_ch_socket_t *)ctx->vp;
  -    struct hostent *pHostentry;
  -    struct sockaddr_in IP4Sockaddr;
  +    int                 i;
  +    l2_ch_socket_t      *cfg = (l2_ch_socket_t *)ctx->vp;
  +    struct hostent      *pHostentry;
  +    struct sockaddr_in  IP4Sockaddr;
       struct sockaddr_in6 IP6Sockaddr;
  -    struct in6_addr *IP6Addr;
  +    struct in6_addr     *IP6Addr;
   
       /* make sure a target is configured */
       if (cfg->pszHost == NULL)
  @@ -175,15 +180,22 @@
           else /* host string was not parsable for some reason */
               return L2_ERR_SYS;
   
  -        if ((cfg->iSocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1)
  -            return L2_ERR_SYS;
  +        if (cfg->iProto == IPPROTO_TCP) /* With TCP we must connect */
  +        {
  +            if ((cfg->iSocket = socket(PF_INET, SOCK_STREAM, cfg->iProto)) == -1)
  +                return L2_ERR_SYS;
   
  -        if (connect(cfg->iSocket, (struct sockaddr *)&IP4Sockaddr, sizeof(IP4Sockaddr))) {
  -            close(cfg->iSocket);
  -            return L2_ERR_SYS;
  +            if (connect(cfg->iSocket, (struct sockaddr *)&IP4Sockaddr, sizeof(IP4Sockaddr)))
  +            {
  +                close(cfg->iSocket);
  +                return L2_ERR_SYS;
  +            }
           }
  +        else if (cfg->iProto == IPPROTO_UDP) /* With UDP we do not connect */
  +            if ((cfg->iSocket = socket(PF_INET, SOCK_DGRAM, cfg->iProto)) == -1)
  +                return L2_ERR_SYS;
   
  -        return L2_OK; /* we are connected */
  +        return L2_OK;
       }
   
       else if (cfg->iFamily == AF_INET6) { /* IPv6 */
  @@ -208,15 +220,21 @@
           else /* host string was not parsable for some reason */
               return L2_ERR_SYS;
   
  -        if ((cfg->iSocket = socket(PF_INET6, SOCK_STREAM, IPPROTO_TCP)) == -1)
  -            return L2_ERR_SYS;
  -
  -        if (connect(cfg->iSocket, (struct sockaddr *)&IP6Sockaddr, sizeof(IP6Sockaddr))) {
  -            close(cfg->iSocket);
  -            return L2_ERR_SYS;
  +        if (cfg->iProto == IPPROTO_TCP) { /* With TCP we must connect */
  +            if ((cfg->iSocket = socket(PF_INET6, SOCK_STREAM, cfg->iProto)) == -1)
  +                return L2_ERR_SYS;
  +
  +            if (connect(cfg->iSocket, (struct sockaddr *)&IP6Sockaddr,\
  +                sizeof(IP6Sockaddr))) {
  +                close(cfg->iSocket);
  +                return L2_ERR_SYS;
  +            }
           }
  +        else if (cfg->iProto == IPPROTO_UDP) /* With UDP we do not connect */
  +            if ((cfg->iSocket = socket(PF_INET, SOCK_DGRAM, cfg->iProto)) == -1)
  +                return L2_ERR_SYS;
   
  -        return L2_OK; /* we are connected */
  +        return L2_OK;
       }
   
       return L2_ERR_USE;
  @@ -226,23 +244,64 @@
   static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch, 
                         const char *buf, size_t buf_size)
   {
  -    l2_ch_socket_t *cfg = (l2_ch_socket_t *)ctx->vp;
  -    size_t sizeWrite;
  -    size_t sizeRemain;
  +    struct sockaddr_in IP4Sockaddr, IP6Sockaddr;
  +    l2_ch_socket_t    *cfg = (l2_ch_socket_t *)ctx->vp;
  +    size_t             sizeWrite;
  +    size_t             sizeRemain;
   
       /* parameter checks */
       if (cfg->iSocket == -1)
  -        return L2_ERR_USE;
  +        return L2_ERR_ARG;
   
  -    /* write message to channel socket, but check to make 
  -       sure that the whole message was successfully written */
  -    sizeWrite  = 0;
  -    sizeRemain = buf_size;
  -    while (sizeRemain) {
  -        sizeWrite  = send(cfg->iSocket, buf + sizeWrite, sizeRemain, 0);
  -        sizeRemain = sizeRemain - sizeWrite;
  -        if (sizeWrite == -1)
  -            return L2_ERR_SYS;
  +    if (cfg->iProto == IPPROTO_TCP)
  +    {
  +        /* write message to channel socket, but check to make   */
  +        /* sure that the whole message was successfully written */
  +        sizeWrite  = 0;
  +        sizeRemain = buf_size;
  +        while(sizeRemain)
  +        {
  +            sizeWrite  = send(cfg->iSocket, buf + sizeWrite, sizeRemain, 0);
  +            sizeRemain = sizeRemain - sizeWrite; /* how much is left? */
  +
  +            if (sizeWrite == -1)
  +                return L2_ERR_SYS;
  +        }
  +    }
  +
  +    else if (cfg->iProto == IPPROTO_UDP)
  +    {
  +        /* write message to the host target, but check to make  */
  +        /* sure that the whole message was successfully written */
  +        sizeWrite  = 0;
  +        sizeRemain = buf_size;
  +        while(sizeRemain)
  +        {
  +            if (cfg->iFamily == AF_INET) /* IPv4 */
  +            {
  +/* TODO !!! */  sizeWrite  = sendto(cfg->iSocket, buf + sizeWrite, sizeRemain, 0,\
  +/* Fill in  */      (struct sockaddr *)&IP4Sockaddr, sizeof(IP4Sockaddr));
  +/* the host */
  +/* address  */  sizeRemain = sizeRemain - sizeWrite; /* how much is left? */
  +/* structs  */
  +                if (sizeWrite == -1)
  +                    return L2_ERR_SYS;
  +            }
  +
  +            else if (cfg->iFamily == AF_INET6) /* IPv6 */
  +            {
  + /* TODO !!! */     sizeWrite  = sendto(cfg->iSocket, buf + sizeWrite, sizeRemain, 0,\
  + /* Fill in  */         (struct sockaddr *)&IP6Sockaddr, sizeof(IP6Sockaddr));
  + /* the host */
  + /* address  */     sizeRemain = sizeRemain - sizeWrite; /* how much is left? */
  + /* structs  */
  +                if (sizeWrite == -1)
  +                    return L2_ERR_USE;
  +            }
  +
  +            else /* Neither IPv4 nor IPv6 */
  +                return L2_ERR_USE;
  +        }
       }
   
       return L2_OK;

From ossp-cvs-owner@ossp.org  Thu Sep  6 21:29:16 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f86JTEC59524; Thu, 6 Sep 2001 21:29:14 +0200 (CEST)
Date: Thu, 6 Sep 2001 21:29:14 +0200 (CEST)
Message-Id: <200109061929.f86JTEC59524@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_sockmon.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   06-Sep-2001 21:29:14
  Branch: HEAD                             Handle: 2001090620291400

  Modified files:
    ossp-pkg/l2             l2_sockmon.c

  Log:
    The monitor can now server UDP sockets and IPv6 connections.

  Summary:
    Revision    Changes     Path
    1.3         +155 -44    ossp-pkg/l2/l2_sockmon.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_sockmon.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2_sockmon.c
  --- ossp-pkg/l2/l2_sockmon.c	2001/09/06 14:31:33	1.2
  +++ ossp-pkg/l2/l2_sockmon.c	2001/09/06 19:29:14	1.3
  @@ -36,7 +36,7 @@
   #define BACKLOG 1024    /* max # pending connections */
   #define BUFFSIZ 256     /* max string size           */
   
  -char *strcasedup(const char *pszIn)
  +char *strlowerdup(const char *pszIn)
   {
       int  i        = 0;
       char *pszTemp = NULL;
  @@ -88,22 +88,39 @@
   
   int myserver(int iFamily, int iProtocol, int iPort)
   {
  -    struct sockaddr_in  laddr,    faddr;
  -    int                 iSock,    iNewsock, iSockopt, iProtofam;
  +    char pszBuf[BUFFSIZ];
  +    struct sockaddr_in  laddr4,   faddr4,    caddr4;
  +    struct sockaddr_in6 laddr6,   faddr6,    caddr6;
  +    int                 iSock,    iNewsock;
  +    int                 iSockopt, iProtofam;
  +    int                 iTrans,   cc;
       socklen_t           faddrlen;
   
   /*    ASSERT(iPort);*/
       /* Set up an IPv4 TCP socket to listen on for connections. */
  -    laddr.sin_family      = iFamily;
  -    laddr.sin_port        = iPort;
  -    laddr.sin_addr.s_addr = INADDR_ANY;
  +    if (iFamily == AF_INET6)
  +    {
  +        laddr6.sin6_family      = AF_INET6;
  +        laddr6.sin6_flowinfo    = 0;
  +        laddr6.sin6_port        = iPort;
  +        laddr6.sin6_addr        = in6addr_any; /* Structure assignment */
  +    }
  +    else if (iFamily == AF_INET)
  +    {
  +        laddr4.sin_family       = AF_INET;
  +        laddr4.sin_port         = iPort;
  +        laddr4.sin_addr.s_addr  = INADDR_ANY;
  +    }
  +    else
  +        return -1; /* Not IPv4 or IPv6 */
   
  -    iProtofam             = (iFamily == AF_INET) ? PF_INET : PF_INET6;
  -    iSock = socket(iProtofam, SOCK_STREAM, iProtocol);
  +    iProtofam = (iFamily   == AF_INET)     ? PF_INET    : PF_INET6;
  +    iTrans    = (iProtocol == IPPROTO_UDP) ? SOCK_DGRAM : SOCK_STREAM;
  +    iSock     = socket(iProtofam, iTrans, iProtocol);
   
       if (iSock == -1) {
           perror("socket");
  -        return (-1);
  +        return -1;
       }
   
       /* Tell the system to allow local addresses to be reused. */
  @@ -112,54 +129,148 @@
           sizeof (iSockopt)) == -1) {
           perror("setsockopt(SO_REUSEADDR)");
           (void) close(iSock);
  -        return (-1);
  +        return -1;
       }
  -    if (bind(iSock, (struct sockaddr *)&laddr, sizeof (laddr)) == -1) {
  -        perror("bind"); /* Bad bind */
  -        (void) close(iSock);
  -        return (-1);
  +
  +    if (iFamily == AF_INET6) {
  +        if (bind(iSock, (struct sockaddr *)&laddr6, sizeof (laddr6)) == -1) {
  +            perror("bind"); /* Bad bind */
  +            (void) close(iSock);
  +            return -1;
  +            }
  +    }
  +    else if (iFamily == AF_INET) {
  +        if (bind(iSock, (struct sockaddr *)&laddr4, sizeof (laddr4)) == -1) {
  +            perror("bind"); /* Bad bind */
  +            (void) close(iSock);
  +            return -1;
  +            }
  +    }
  +
  +    if (iProtocol == IPPROTO_UDP) {
  +        if (iFamily == AF_INET6) {
  +            for (;;) { /* Receive messages */
  +                faddrlen = sizeof(caddr6);
  +                memset(pszBuf, 0x0, BUFFSIZ); /* Init the buffer */
  +                cc = recvfrom(iSock, pszBuf, BUFFSIZ, 0, (struct sockaddr *)\
  +                    &caddr6, &faddrlen);
  +
  +                if (cc == -1) {
  +                    perror("recvfrom");
  +                    exit(1);
  +                }
  +
  +                if (cc == 0) {
  +                    /* EOF */
  +                    (void) close(iSock);
  +                    (void) printf("Connection closed\n");
  +                    return;
  +                }
  +
  +                if (cc != BUFFSIZ) {
  +                    pszBuf[cc + 1] = '\0';
  +                    (void) printf("Read: %s", pszBuf);
  +
  +                    if (write(iSock, pszBuf, cc) == -1) {
  +                        perror("write");
  +                        exit(1);
  +                    }
  +                }
  +                else
  +                    return -1;
  +            }
           }
  -fprintf(stderr, "Listening on %d or 0x%x\n", iPort, iPort);
  -    if (listen(iSock, BACKLOG) == -1) {
  -        perror("listen"); /* Listen just blew up */
  -        (void) close(iSock);
  -        return (-1);
  +        else if (iFamily == AF_INET) {
  +            for (;;) { /* Receive messages */
  +                faddrlen = sizeof(caddr4);
  +                memset(pszBuf, 0x0, BUFFSIZ); /* Init the buffer */
  +                cc = recvfrom(iSock, pszBuf, BUFFSIZ, 0, (struct sockaddr *)\
  +                    &caddr4, &faddrlen);
  +
  +                if (cc == -1) {
  +                    perror("recvfrom");
  +                    exit(1);
  +                }
  +
  +                if (cc == 0) {
  +                    /* EOF */
  +                    (void) close(iSock);
  +                    (void) printf("Connection closed\n");
  +                    return;
  +                }
  +
  +                if (cc != BUFFSIZ) {
  +                    pszBuf[cc + 1] = '\0';
  +                    (void) printf("Read: %s", pszBuf);
  +
  +                    if (write(iSock, pszBuf, cc) == -1) {
  +                        perror("write");
  +                        exit(1);
  +                    }
  +                }
  +                else
  +                    return -1;
  +            }
  +        }
       }
  -    /* Wait for a connection request. */
  -    for (;;) {
  -        faddrlen = sizeof (faddr);
  -        iNewsock = accept(iSock, (struct sockaddr *)&faddr, &faddrlen);
  -        if (iNewsock == -1) {
  -            if (errno != EINTR && errno != ECONNABORTED) {
  -                perror("accept");
  +    else if (iProtocol == IPPROTO_TCP) { /* Only try to listen if we have TCP */
  +        if (listen(iSock, BACKLOG) == -1) {
  +            perror("listen"); /* Listen just blew up */
  +            (void) close(iSock);
  +            return -1;
  +        }
  +
  +        /* Wait for a connection request */
  +        if (iFamily == AF_INET6) {
  +            for (;;) {
  +                faddrlen = sizeof (faddr6);
  +                iNewsock = accept(iSock, (struct sockaddr *)&faddr6, &faddrlen);
  +                if (iNewsock == -1) {
  +                    if (errno != EINTR && errno != ECONNABORTED) {
  +                        perror("accept");
  +                    }
  +                    continue;
  +                }
  +                (void) printf("Connection from %s/%d\n",\
  +                    inet_ntop(faddr6.sin6_addr), ntohs(faddr6.sin6_port));
  +                dowork(iNewsock); /* do some sockwork */
  +            }
  +        }
  +        else if (iFamily == AF_INET) {
  +            for (;;) {
  +                faddrlen = sizeof (faddr4);
  +                iNewsock = accept(iSock, (struct sockaddr *)&faddr4, &faddrlen);
  +                if (iNewsock == -1) {
  +                    if (errno != EINTR && errno != ECONNABORTED) {
  +                        perror("accept");
  +                    }
  +                    continue;
  +                }
  +                (void) printf("Connection from %s/%d\n",\
  +                    inet_ntop(faddr4.sin_addr), ntohs(faddr4.sin_port));
  +                dowork(iNewsock); /* do some sockwork */
               }
  -            continue;
           }
  -        (void) printf("Connection from %s/%d\n", inet_ntoa(faddr.sin_addr), ntohs(faddr.sin_port));
  -        dowork(iNewsock); /* do some sockwork */
  +        /* NOTREACHED */
       }
  -    /*NOTREACHED*/
  +    else
  +        return -1; /* We are being asked to serve other than TCP or UDP */
   }
   
   int main(int argc, char *argv[])
   {
  -    char *pszArgv = NULL;
  -    int iFamily   = -1;
  -    int iNetproto = -1;
  -    int iNetport  = 0;
  +    int iFam      = -1;
  +    int iProto = -1;
  +    int iPort  = 0;
   
  -    if (argc < 2) {
  -        (void) fprintf(stderr, "Usage: %s [IPv6] [UDP] <Port>\n", argv[0]);
  +    if (argc != 4) {
  +        (void) fprintf(stderr, "Usage: %s <IPv4-or-IPv6> <TCP-or-UDP> <Port>\n", argv[0]);
           exit(1); /* Dink donk if the user doesn't know how to use this */
       }
  -
  -    if ((pszArgv = strcasedup(*argv)) == NULL)
  -        return -1;
   
  -    iFamily    = (strstr(pszArgv, "ipv6")) ? AF_INET6    : AF_INET;
  -    iNetproto  = (strstr(pszArgv, "udp"))  ? IPPROTO_UDP : IPPROTO_TCP;
  -    iNetport   = htons(atoi(argv[argc - 1]));
  +    iFam    = (!strcmp(argv[1], "IPv6")) ? AF_INET6    : AF_INET;
  +    iProto  = (!strcmp(argv[2], "UDP"))  ? IPPROTO_UDP : IPPROTO_TCP;
  +    iPort   = htons(atoi(argv[3]));
   
  -    free (pszArgv);
  -    return myserver(iFamily, iNetproto, iNetport);
  +    return myserver(iFam, iProto, iPort);
   }

From ossp-cvs-owner@ossp.org  Thu Sep  6 21:29:46 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f86JTjm59585; Thu, 6 Sep 2001 21:29:45 +0200 (CEST)
Date: Thu, 6 Sep 2001 21:29:45 +0200 (CEST)
Message-Id: <200109061929.f86JTjm59585@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   06-Sep-2001 21:29:44
  Branch: HEAD                             Handle: 2001090620294400

  Modified files:
    ossp-pkg/l2             l2_test.c

  Log:
    More kludges to test sockets UDP and IPv6.

  Summary:
    Revision    Changes     Path
    1.14        +6  -7      ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/09/06 11:56:15	1.13
  +++ ossp-pkg/l2/l2_test.c	2001/09/06 19:29:44	1.14
  @@ -78,23 +78,22 @@
   /* Atenzione! Before doing any socket testing, make sure you have a valid */
   /* end point listening, or else you will only get an error message when   */
   /* the thing tries to connect.                                            */
  -/*    if ((chSock = l2_channel_create(&l2_handler_socket)) == NULL)
  +    if ((chSock = l2_channel_create(&l2_handler_socket)) == NULL)
           die("failed to create socket channel");
   
  -    if (l2_channel_configure(chSock, "ipversion,host,port", AF_INET,\
  -        "localhost", 2002) != L2_OK)
  +    if (l2_channel_configure(chSock, "protocol,ipversion,host,port",\
  +        IPPROTO_UDP, AF_INET, "localhost", 2002) != L2_OK)
           die("failed to configure socket ipv4 channel");
   
  -    if (l2_channel_configure(chSock, "ipversion,host,port", AF_INET6,\
  -        "0123:4567:4455:6677:8899:AABB:9876:5432", 2002) != L2_OK)
  -        die("failed to configure socket ipv6 channel");
  +//    if (l2_channel_configure(chSock, "protocol,ipversion,host,port",\
  +//        IPPROTO_TCP, AF_INET6, "0:0:0:0:0:0:0:1", 2002) != L2_OK)
  +//        die("failed to configure socket ipv6 channel");
   
       if (l2_channel_open(chSock) != L2_OK)
           die("failed to open socket channel");
   
       if (l2_stream_channel(st, chSock, L2_LEVEL_UPTO(L2_LEVEL_WARNING)) != L2_OK)
           die("failed to attach first channel into stream");
  -*/
   
       if ((chPrefix  = l2_channel_create(&l2_handler_prefix)) == NULL) /* Prefix */
           die("failed to create prefix channel");

From ossp-cvs-owner@ossp.org  Fri Sep  7 12:23:32 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f87ANVK62788; Fri, 7 Sep 2001 12:23:31 +0200 (CEST)
Date: Fri, 7 Sep 2001 12:23:31 +0200 (CEST)
Message-Id: <200109071023.f87ANVK62788@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_socket.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   07-Sep-2001 12:23:31
  Branch: HEAD                             Handle: 2001090711233100

  Modified files:
    ossp-pkg/l2             l2_ch_socket.c

  Log:
    Cleaned up and KR styled.

  Summary:
    Revision    Changes     Path
    1.19        +17 -42     ossp-pkg/l2/l2_ch_socket.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_socket.c
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 l2_ch_socket.c
  --- ossp-pkg/l2/l2_ch_socket.c	2001/09/06 19:28:24	1.18
  +++ ossp-pkg/l2/l2_ch_socket.c	2001/09/07 10:23:31	1.19
  @@ -46,27 +46,22 @@
    ******************************************************************/
   static int inet_pton(int iFamily, const char *pszAddress, void *pvMemref)
   {
  -    int             i    = 0;
  +    int             i             = 0;
       struct in_addr  IP4Addr;
       struct in6_addr IP6Addr;
       char            *pszIndex     = NULL;    /* To index IPv6 validity */
       char            *pszNextfield = -1;      /* For IPv6 address trans */
   
  -    if (iFamily == AF_INET)
  -    {
  -        if (inet_aton(pszAddress, &IP4Addr))
  -        {
  +    if (iFamily == AF_INET) {
  +        if (inet_aton(pszAddress, &IP4Addr)) {
               memcpy(pvMemref, &IP4Addr, sizeof(struct in_addr));
               return 1; /* Success */
           }
           return 0;
       }
  -
  -    else if (iFamily == AF_INET6) /* If we are translating IPv6 addresses     */
  -    {                             /* the user needs to use precise notation   */
  -        pszIndex = pszAddress;    /* Initialize, verify in loop               */
  -        for (i = 0; (i < 8) && pszNextfield; i++) /* Iterate through fields   */
  -        {
  +    else if (iFamily == AF_INET6) { /* Translate IPv6 addresses               */
  +        pszIndex = pszAddress;      /* Initialize, verify in loop             */
  +        for (i = 0; (i < 8) && pszNextfield; i++) { /* Iterate through fields */
               IP6Addr.__u6_addr.__u6_addr16[i] =\
                   ntohs((u_int16_t)strtol(pszIndex, &pszNextfield, 16));
               pszIndex = pszNextfield + 1;
  @@ -74,17 +69,12 @@
   
           if ((i != 8) || (*pszNextfield))
               return 0;
  -
  -        else /* Success */
  -        {
  +        else { /* Success */
               memcpy(pvMemref, &IP6Addr, sizeof(struct in6_addr));
               return 1;
           }
  -
       }
  -
  -    else      /* User converting from an address family that we don't support */
  -    {
  +    else {    /* User converting from an address family that we don't support */
           errno = EAFNOSUPPORT;
           return -1;
       }
  @@ -164,7 +154,6 @@
               IP4Sockaddr.sin_family = AF_INET;
               IP4Sockaddr.sin_port   = htons(cfg->iPort);
           }
  -
           /* resolve host nominally */
           else if ((pHostentry = gethostbyname(cfg->pszHost)) != NULL) {
               if (pHostentry->h_addrtype == AF_INET) {
  @@ -176,17 +165,15 @@
               else
                   return L2_ERR_USE; /* what?? we specify IPv4 when it is not? */
           }
  -
           else /* host string was not parsable for some reason */
               return L2_ERR_SYS;
   
  -        if (cfg->iProto == IPPROTO_TCP) /* With TCP we must connect */
  -        {
  +        if (cfg->iProto == IPPROTO_TCP) {        /* With TCP we must connect */
               if ((cfg->iSocket = socket(PF_INET, SOCK_STREAM, cfg->iProto)) == -1)
                   return L2_ERR_SYS;
   
  -            if (connect(cfg->iSocket, (struct sockaddr *)&IP4Sockaddr, sizeof(IP4Sockaddr)))
  -            {
  +            if (connect(cfg->iSocket, (struct sockaddr *)&IP4Sockaddr,
  +                sizeof(IP4Sockaddr))) {
                   close(cfg->iSocket);
                   return L2_ERR_SYS;
               }
  @@ -197,14 +184,12 @@
   
           return L2_OK;
       }
  -
       else if (cfg->iFamily == AF_INET6) { /* IPv6 */
           /* resolve host numerically */
           if (inet_pton(AF_INET6, cfg->pszHost, &IP6Sockaddr.sin6_addr.s6_addr) == 1) {
               IP6Sockaddr.sin6_family = AF_INET6;
               IP6Sockaddr.sin6_port   = htons(cfg->iPort);
           }
  -
           /* resolve host nominally */
           else if (pHostentry = gethostbyname(cfg->pszHost) != NULL) {
               if (pHostentry->h_addrtype == AF_INET6) {
  @@ -216,7 +201,6 @@
               else
                   return L2_ERR_USE; /* what?? we specify IPv6 when it is not? */
           }
  -
           else /* host string was not parsable for some reason */
               return L2_ERR_SYS;
   
  @@ -253,14 +237,12 @@
       if (cfg->iSocket == -1)
           return L2_ERR_ARG;
   
  -    if (cfg->iProto == IPPROTO_TCP)
  -    {
  +    if (cfg->iProto == IPPROTO_TCP) {
           /* write message to channel socket, but check to make   */
           /* sure that the whole message was successfully written */
           sizeWrite  = 0;
           sizeRemain = buf_size;
  -        while(sizeRemain)
  -        {
  +        while(sizeRemain) {
               sizeWrite  = send(cfg->iSocket, buf + sizeWrite, sizeRemain, 0);
               sizeRemain = sizeRemain - sizeWrite; /* how much is left? */
   
  @@ -268,17 +250,13 @@
                   return L2_ERR_SYS;
           }
       }
  -
  -    else if (cfg->iProto == IPPROTO_UDP)
  -    {
  +    else if (cfg->iProto == IPPROTO_UDP) {
           /* write message to the host target, but check to make  */
           /* sure that the whole message was successfully written */
           sizeWrite  = 0;
           sizeRemain = buf_size;
  -        while(sizeRemain)
  -        {
  -            if (cfg->iFamily == AF_INET) /* IPv4 */
  -            {
  +        while(sizeRemain) {
  +            if (cfg->iFamily == AF_INET) { /* IPv4 */
   /* TODO !!! */  sizeWrite  = sendto(cfg->iSocket, buf + sizeWrite, sizeRemain, 0,\
   /* Fill in  */      (struct sockaddr *)&IP4Sockaddr, sizeof(IP4Sockaddr));
   /* the host */
  @@ -287,9 +265,7 @@
                   if (sizeWrite == -1)
                       return L2_ERR_SYS;
               }
  -
  -            else if (cfg->iFamily == AF_INET6) /* IPv6 */
  -            {
  +            else if (cfg->iFamily == AF_INET6) { /* IPv6 */
    /* TODO !!! */     sizeWrite  = sendto(cfg->iSocket, buf + sizeWrite, sizeRemain, 0,\
    /* Fill in  */         (struct sockaddr *)&IP6Sockaddr, sizeof(IP6Sockaddr));
    /* the host */
  @@ -298,7 +274,6 @@
                   if (sizeWrite == -1)
                       return L2_ERR_USE;
               }
  -
               else /* Neither IPv4 nor IPv6 */
                   return L2_ERR_USE;
           }

From ossp-cvs-owner@ossp.org  Fri Sep  7 12:25:57 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f87APu463002; Fri, 7 Sep 2001 12:25:56 +0200 (CEST)
Date: Fri, 7 Sep 2001 12:25:56 +0200 (CEST)
Message-Id: <200109071025.f87APu463002@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ut_sa.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   07-Sep-2001 12:25:56
  Branch: HEAD                             Handle: 2001090711255600

  Modified files:
    ossp-pkg/l2             l2_ut_sa.c

  Log:
    fix mandatory sockaddr_in initialization

  Summary:
    Revision    Changes     Path
    1.3         +6  -0      ossp-pkg/l2/l2_ut_sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ut_sa.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2_ut_sa.c
  --- ossp-pkg/l2/l2_ut_sa.c	2001/09/06 17:17:41	1.2
  +++ ossp-pkg/l2/l2_ut_sa.c	2001/09/07 10:25:56	1.3
  @@ -107,6 +107,7 @@
           if ((nPath = strlen(cpPath)) >= (sizeof(sau.sun_path)-1))
               return NULL;
           nProto = 0;
  +        memset(&sau, 0, sizeof(sau));
           sau.sun_family = AF_LOCAL;
           memcpy(sau.sun_path, cpPath, nPath + 1);
           sa = (struct sockaddr *)&sau;
  @@ -144,6 +145,11 @@
               nPort = ntohs(se->s_port);
           }
   
  +        /* mandatory initialization */
  +        memset(&sa4, 0, sizeof(sa4));
  +#ifdef AF_INET6
  +        memset(&sa6, 0, sizeof(sa6));
  +#endif
           /* resolve host */
           if (inet_pton(AF_INET, cpHost, &sa4.sin_addr.s_addr) == 1) {
               sa4.sin_family = AF_INET;

From ossp-cvs-owner@ossp.org  Fri Sep  7 12:26:09 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f87AQ9v63044; Fri, 7 Sep 2001 12:26:09 +0200 (CEST)
Date: Fri, 7 Sep 2001 12:26:09 +0200 (CEST)
Message-Id: <200109071026.f87AQ9v63044@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp sa.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   07-Sep-2001 12:26:09
  Branch: HEAD                             Handle: 2001090711260800

  Modified files:
    ossp-pkg/lmtp2nntp      sa.c

  Log:
    fix mandatory sockaddr_in initialization

  Summary:
    Revision    Changes     Path
    1.9         +6  -0      ossp-pkg/lmtp2nntp/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/sa.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 sa.c
  --- ossp-pkg/lmtp2nntp/sa.c	2001/09/04 09:46:06	1.8
  +++ ossp-pkg/lmtp2nntp/sa.c	2001/09/07 10:26:08	1.9
  @@ -110,6 +110,7 @@
           if ((nPath = strlen(cpPath)) >= (sizeof(sau.sun_path)-1))
               return NULL;
           nProto = 0;
  +        memset(&sau, 0, sizeof(sau));
           sau.sun_family = AF_LOCAL;
           memcpy(sau.sun_path, cpPath, nPath + 1);
           sa = (struct sockaddr *)&sau;
  @@ -147,6 +148,11 @@
               nPort = ntohs(se->s_port);
           }
   
  +        /* mandatory initialization */
  +        memset(&sa4, 0, sizeof(sa4));
  +#ifdef AF_INET6
  +        memset(&sa6, 0, sizeof(sa6));
  +#endif
           /* resolve host */
           if (inet_pton(AF_INET, cpHost, &sa4.sin_addr.s_addr) == 1) {
               sa4.sin_family = AF_INET;

From ossp-cvs-owner@ossp.org  Fri Sep  7 12:27:53 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f87ARq563221; Fri, 7 Sep 2001 12:27:52 +0200 (CEST)
Date: Fri, 7 Sep 2001 12:27:52 +0200 (CEST)
Message-Id: <200109071027.f87ARq563221@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp .cvsignore ossp-pkg/lmtp2nntp/test .cvs...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   07-Sep-2001 12:27:52
  Branch: HEAD                             Handle: 2001090711275100

  Added files:
    ossp-pkg/lmtp2nntp/test .cvsignore
  Modified files:
    ossp-pkg/lmtp2nntp      .cvsignore

  Log:
    ignore more files

  Summary:
    Revision    Changes     Path
    1.10        +1  -1      ossp-pkg/lmtp2nntp/.cvsignore
    1.1         +2  -0      ossp-pkg/lmtp2nntp/test/.cvsignore
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/.cvsignore
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 .cvsignore
  --- ossp-pkg/lmtp2nntp/.cvsignore	2001/08/28 13:12:58	1.9
  +++ ossp-pkg/lmtp2nntp/.cvsignore	2001/09/07 10:27:51	1.10
  @@ -10,4 +10,4 @@
   lmtp2nntp.1
   lmtp2nntp-*.tar.gz
   dmalloc.log
  -test/dmalloc.log
  +logtest
  Index: ossp-pkg/lmtp2nntp/test/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  dmalloc.log
  logtest

From ossp-cvs-owner@ossp.org  Fri Sep  7 15:03:09 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f87D38B81330; Fri, 7 Sep 2001 15:03:08 +0200 (CEST)
Date: Fri, 7 Sep 2001 15:03:08 +0200 (CEST)
Message-Id: <200109071303.f87D38B81330@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_socket.c l2_sockmon.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   07-Sep-2001 15:03:08
  Branch: HEAD                             Handle: 2001090714030700

  Modified files:
    ossp-pkg/l2             l2_ch_socket.c l2_sockmon.c

  Log:
    Bug fixes to both IPv4 and IPv6 socket binding.

  Summary:
    Revision    Changes     Path
    1.20        +58 -8      ossp-pkg/l2/l2_ch_socket.c
    1.4         +26 -0      ossp-pkg/l2/l2_sockmon.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_socket.c
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 l2_ch_socket.c
  --- ossp-pkg/l2/l2_ch_socket.c	2001/09/07 10:23:31	1.19
  +++ ossp-pkg/l2/l2_ch_socket.c	2001/09/07 13:03:07	1.20
  @@ -139,8 +139,8 @@
       int                 i;
       l2_ch_socket_t      *cfg = (l2_ch_socket_t *)ctx->vp;
       struct hostent      *pHostentry;
  -    struct sockaddr_in  IP4Sockaddr;
  -    struct sockaddr_in6 IP6Sockaddr;
  +    struct sockaddr_in  IP4Localsock, IP4Sockaddr;
  +    struct sockaddr_in6 IP6Localsock, IP6Sockaddr;
       struct in6_addr     *IP6Addr;
   
       /* make sure a target is configured */
  @@ -149,6 +149,10 @@
   
       /* open channel socket */
       if (cfg->iFamily == AF_INET) { /* IPv4 */
  +        /* initialize address structures */
  +        memset(&IP4Localsock, 0, sizeof(IP4Localsock));
  +        memset(&IP4Sockaddr,  0, sizeof(IP4Sockaddr));
  +
           /* resolve host numerically */
           if (inet_pton(AF_INET, cfg->pszHost, &IP4Sockaddr.sin_addr.s_addr) == 1) {
               IP4Sockaddr.sin_family = AF_INET;
  @@ -168,23 +172,48 @@
           else /* host string was not parsable for some reason */
               return L2_ERR_SYS;
   
  -        if (cfg->iProto == IPPROTO_TCP) {        /* With TCP we must connect */
  +        if (cfg->iProto == IPPROTO_TCP) {        /* with TCP we must connect */
               if ((cfg->iSocket = socket(PF_INET, SOCK_STREAM, cfg->iProto)) == -1)
                   return L2_ERR_SYS;
   
  +            /* if we have a socket, then bind ourselves to any port number   */
  +            IP4Localsock.sin_family      = AF_INET;
  +            IP4Localsock.sin_addr.s_addr = htonl(INADDR_ANY);
  +            IP4Localsock.sin_port        = htons(0);
  +
  +            if (bind(cfg->iSocket, (struct sockaddr *)&IP4Localsock,\
  +                sizeof(IP4Localsock))) {
  +                return L2_ERR_SYS;
  +            }
  +
               if (connect(cfg->iSocket, (struct sockaddr *)&IP4Sockaddr,
                   sizeof(IP4Sockaddr))) {
                   close(cfg->iSocket);
                   return L2_ERR_SYS;
               }
           }
  -        else if (cfg->iProto == IPPROTO_UDP) /* With UDP we do not connect */
  +        else if (cfg->iProto == IPPROTO_UDP) { /* with UDP we do not connect  */
               if ((cfg->iSocket = socket(PF_INET, SOCK_DGRAM, cfg->iProto)) == -1)
                   return L2_ERR_SYS;
   
  +            /* if we have a socket, then bind ourselves to any port number   */
  +            IP4Localsock.sin_family      = AF_INET;
  +            IP4Localsock.sin_addr.s_addr = htonl(INADDR_ANY);
  +            IP4Localsock.sin_port        = htons(0);
  +
  +            if (bind(cfg->iSocket, (struct sockaddr *)&IP4Localsock,\
  +                sizeof(IP4Localsock))) {
  +                return L2_ERR_SYS;
  +            }
  +        }
  +
           return L2_OK;
       }
       else if (cfg->iFamily == AF_INET6) { /* IPv6 */
  +        /* initialize address structures */
  +        memset(&IP6Localsock, 0, sizeof(IP6Localsock));
  +        memset(&IP6Sockaddr,  0, sizeof(IP6Sockaddr));
  +
           /* resolve host numerically */
           if (inet_pton(AF_INET6, cfg->pszHost, &IP6Sockaddr.sin6_addr.s6_addr) == 1) {
               IP6Sockaddr.sin6_family = AF_INET6;
  @@ -199,24 +228,45 @@
                       sizeof(IP6Sockaddr.sin6_addr.__u6_addr));
               }
               else
  -                return L2_ERR_USE; /* what?? we specify IPv6 when it is not? */
  +                return L2_ERR_USE; /* what?? we specify IPv6 when it is not?  */
           }
  -        else /* host string was not parsable for some reason */
  +        else                  /* host string was not parsable for some reason */
               return L2_ERR_SYS;
   
  -        if (cfg->iProto == IPPROTO_TCP) { /* With TCP we must connect */
  +        if (cfg->iProto == IPPROTO_TCP) {         /* with TCP we must connect */
               if ((cfg->iSocket = socket(PF_INET6, SOCK_STREAM, cfg->iProto)) == -1)
                   return L2_ERR_SYS;
   
  +            /* if we have a socket, then bind ourselves to any port number    */
  +            IP6Localsock.sin6_family = AF_INET6;
  +            IP6Localsock.sin6_addr   = in6addr_any;
  +            IP6Localsock.sin6_port   = htons(0);
  +
  +            if (bind(cfg->iSocket, (struct sockaddr *)&IP6Localsock,\
  +                sizeof(IP6Localsock))) {
  +                return L2_ERR_SYS;
  +            }
  +
               if (connect(cfg->iSocket, (struct sockaddr *)&IP6Sockaddr,\
                   sizeof(IP6Sockaddr))) {
                   close(cfg->iSocket);
                   return L2_ERR_SYS;
               }
           }
  -        else if (cfg->iProto == IPPROTO_UDP) /* With UDP we do not connect */
  +        else if (cfg->iProto == IPPROTO_UDP) {  /* with UDP we do not connect */
               if ((cfg->iSocket = socket(PF_INET, SOCK_DGRAM, cfg->iProto)) == -1)
                   return L2_ERR_SYS;
  +
  +            /* if we have a socket, then bind ourselves to any port number    */
  +            IP6Localsock.sin6_family = AF_INET6;
  +            IP6Localsock.sin6_addr   = in6addr_any;
  +            IP6Localsock.sin6_port   = htons(0);
  +
  +            if (bind(cfg->iSocket, (struct sockaddr *)&IP6Localsock,\
  +                sizeof(IP6Localsock))) {
  +                return L2_ERR_SYS;
  +            }
  +        }
   
           return L2_OK;
       }
  Index: ossp-pkg/l2/l2_sockmon.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 l2_sockmon.c
  --- ossp-pkg/l2/l2_sockmon.c	2001/09/06 19:29:14	1.3
  +++ ossp-pkg/l2/l2_sockmon.c	2001/09/07 13:03:07	1.4
  @@ -27,6 +27,8 @@
   **  l2_sockmon.c: Socket monitor for use with l2_test.c
   */
   
  +#include <l2.h>
  +
   #include <sys/types.h>
   #include <sys/socket.h>
   #include <netinet/in.h>
  @@ -100,6 +102,10 @@
       /* Set up an IPv4 TCP socket to listen on for connections. */
       if (iFamily == AF_INET6)
       {
  +        /* initialize address structures */
  +        memset(&laddr6,  0, sizeof(laddr6));
  +        memset(&laddr6,  0, sizeof(laddr6));
  +
           laddr6.sin6_family      = AF_INET6;
           laddr6.sin6_flowinfo    = 0;
           laddr6.sin6_port        = iPort;
  @@ -107,6 +113,10 @@
       }
       else if (iFamily == AF_INET)
       {
  +        /* initialize address structures */
  +        memset(&laddr4,  0, sizeof(laddr4));
  +        memset(&laddr4,  0, sizeof(laddr4));
  +
           laddr4.sin_family       = AF_INET;
           laddr4.sin_port         = iPort;
           laddr4.sin_addr.s_addr  = INADDR_ANY;
  @@ -149,6 +159,10 @@
   
       if (iProtocol == IPPROTO_UDP) {
           if (iFamily == AF_INET6) {
  +            /* initialize address structures */
  +            memset(&caddr6,  0, sizeof(caddr6));
  +            memset(&caddr6,  0, sizeof(caddr6));
  +
               for (;;) { /* Receive messages */
                   faddrlen = sizeof(caddr6);
                   memset(pszBuf, 0x0, BUFFSIZ); /* Init the buffer */
  @@ -181,6 +195,10 @@
               }
           }
           else if (iFamily == AF_INET) {
  +            /* initialize address structures */
  +            memset(&caddr4,  0, sizeof(caddr4));
  +            memset(&caddr4,  0, sizeof(caddr4));
  +
               for (;;) { /* Receive messages */
                   faddrlen = sizeof(caddr4);
                   memset(pszBuf, 0x0, BUFFSIZ); /* Init the buffer */
  @@ -222,6 +240,10 @@
   
           /* Wait for a connection request */
           if (iFamily == AF_INET6) {
  +            /* initialize address structures */
  +            memset(&faddr6,  0, sizeof(faddr6));
  +            memset(&faddr6,  0, sizeof(faddr6));
  +
               for (;;) {
                   faddrlen = sizeof (faddr6);
                   iNewsock = accept(iSock, (struct sockaddr *)&faddr6, &faddrlen);
  @@ -237,6 +259,10 @@
               }
           }
           else if (iFamily == AF_INET) {
  +            /* initialize address structures */
  +            memset(&faddr4,  0, sizeof(faddr4));
  +            memset(&faddr4,  0, sizeof(faddr4));
  +
               for (;;) {
                   faddrlen = sizeof (faddr4);
                   iNewsock = accept(iSock, (struct sockaddr *)&faddr4, &faddrlen);

From ossp-cvs-owner@ossp.org  Fri Sep  7 15:53:19 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f87DrIm86647; Fri, 7 Sep 2001 15:53:18 +0200 (CEST)
Date: Fri, 7 Sep 2001 15:53:18 +0200 (CEST)
Message-Id: <200109071353.f87DrIm86647@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp .cvsignore 00TODO Makefile.in lmtp2nntp...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   07-Sep-2001 15:53:17
  Branch: HEAD                             Handle: 2001090714531601

  Added files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.h
  Modified files:
    ossp-pkg/lmtp2nntp      .cvsignore 00TODO Makefile.in lmtp2nntp.c
                            lmtp2nntp.pod
    ossp-pkg/lmtp2nntp/test .cvsignore run.sh testmessage.vialmtp

  Log:
    The -b option now works. L2 logging included.

  Summary:
    Revision    Changes     Path
    1.11        +1  -1      ossp-pkg/lmtp2nntp/.cvsignore
    1.27        +6  -3      ossp-pkg/lmtp2nntp/00TODO
    1.14        +1  -1      ossp-pkg/lmtp2nntp/Makefile.in
    1.42        +197 -139   ossp-pkg/lmtp2nntp/lmtp2nntp.c
    1.1         +39 -0      ossp-pkg/lmtp2nntp/lmtp2nntp.h
    1.18        +2  -42     ossp-pkg/lmtp2nntp/lmtp2nntp.pod
    1.2         +1  -1      ossp-pkg/lmtp2nntp/test/.cvsignore
    1.12        +1  -5      ossp-pkg/lmtp2nntp/test/run.sh
    1.5         +1  -1      ossp-pkg/lmtp2nntp/test/testmessage.vialmtp
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/.cvsignore
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 .cvsignore
  --- ossp-pkg/lmtp2nntp/.cvsignore	2001/09/07 10:27:51	1.10
  +++ ossp-pkg/lmtp2nntp/.cvsignore	2001/09/07 13:53:16	1.11
  @@ -10,4 +10,4 @@
   lmtp2nntp.1
   lmtp2nntp-*.tar.gz
   dmalloc.log
  -logtest
  +logfile
  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	2001/09/05 09:14:26	1.26
  +++ ossp-pkg/lmtp2nntp/00TODO	2001/09/07 13:53:16	1.27
  @@ -1,10 +1,14 @@
   
   whatsup draufleiten
   
  +panic   = unexpected
  +error   = i/o error, errno ...
  +warning = NNTP connect failed
  + info   = *MOST COMMON* step by step
  +trace   = ist bisheriger trace.c
  +debug   = developer meldungen
   
  -[B<-b> I<bindaddress>]
   
  -
   Hallo Thomas, wir haben festgestellt, dass wir noch ein feature brauchen.
   Momentan waere es moeglich, dass jeder x-beliebige (der die entsprechende
   Mail-Adresse kennt) eine Mail an mail.de.cw.net schickt, und diese somit auf
  @@ -14,7 +18,6 @@
   
   use L2 for logging, grab ID through RFC1891 ENVID, 6.2
   [B<-i> I<messageid>]
  -[B<-l> I<logtarget>]
   
   CU/CUS
   
  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	2001/09/05 09:10:28	1.13
  +++ ossp-pkg/lmtp2nntp/Makefile.in	2001/09/07 13:53:16	1.14
  @@ -43,7 +43,7 @@
   POD2MAN     = pod2man
   
   PROG = lmtp2nntp
  -HDRS = lmtp.h nntp.h sa.h argz.h shpat_match.h msg.h trace.h
  +HDRS = lmtp2nntp.h lmtp.h nntp.h sa.h argz.h shpat_match.h msg.h trace.h
   OBJS = lmtp2nntp.o lmtp.o nntp.o sa.o argz.o shpat_match.o msg.o trace.o version.o
   
   SUBDIRS = @SUBDIR_STR@ @SUBDIR_L2@ 
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.41 -r1.42 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/05 15:01:57	1.41
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/07 13:53:16	1.42
  @@ -37,9 +37,10 @@
   #include "str.h"
   #include "argz.h"
   #include "shpat_match.h"
  -#include "l2/l2.h" //FIXME
  +#include "l2.h"
   
   /* own headers */
  +#include "lmtp2nntp.h"
   #ifdef HAVE_CONFIG_H
   #include "config.h"
   #endif
  @@ -105,8 +106,8 @@
   };
   
   typedef struct {
  -    int             option_verbose;
  -    int             option_tracing;
  +    char           *progname;
  +    char           *option_logfile;
       int             option_groupmode;
       int             option_deliverymode;
       char           *option_deliverymodefakestatus;
  @@ -172,6 +173,26 @@
       return;
   }
   
  +static l2_result_t 
  +formatter_prefix(l2_context_t *_ctx, const char id, const char *param,
  +          char *bufptr, size_t bufsize, size_t *buflen, va_list *ap)
  +{
  +    lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx->vp;
  +            
  +    sprintf(bufptr, "%s[%ld]", ctx->progname, (long)getpid());
  +    *buflen = strlen(bufptr);
  +    return L2_OK;
  +}
  +
  +static l2_result_t 
  +formatter_errno(l2_context_t *_ctx, const char id, const char *param,
  +          char *bufptr, size_t bufsize, size_t *buflen, va_list *ap)
  +{
  +    sprintf(bufptr, "(%d) %s", errno, strerror(errno));
  +    *buflen = strlen(bufptr);
  +    return L2_OK;
  +}
  +
   int main(int argc, char **argv)
   {
       lmtp_t       *lmtp;
  @@ -179,7 +200,6 @@
       lmtp2nntp_t  *ctx;
       int           i;             /* general purpose scratch int, index ... */
       char         *cp;            /* general purpose character pointer */
  -    char         *progname;
       char         *azHosts;
       size_t        asHosts;
       char         *cpHost;
  @@ -189,13 +209,11 @@
       l2_channel_t *chBuf;
       l2_channel_t *chFile;
   
  -    progname = argv[0];
  -
       /* create application context */
       if ((ctx = (lmtp2nntp_t *)malloc(sizeof(lmtp2nntp_t))) == NULL)
           exit(ERR_EXECUTION);
  -    ctx->option_verbose = FALSE;
  -    ctx->option_tracing = FALSE;
  +    ctx->progname = strdup(argv[0]);
  +    ctx->option_logfile = NULL;
       ctx->option_groupmode = GROUPMODE_ARG;
       ctx->option_deliverymode = DELIVERYMODE_FAKE;
       ctx->option_deliverymodefakestatus = "553";   /* Requested action not taken: mailbox name not allowed */
  @@ -203,7 +221,7 @@
       ctx->option_maxmessagesize = 8 * 1024 * 1024;
       ctx->option_waittime = -1;
       ctx->option_mailfrom = NULL;
  -    ctx->option_levelmask = L2_LEVEL_UPTO(L2_LEVEL_ERROR);
  +    ctx->option_levelmask = L2_LEVEL_UPTO(L2_LEVEL_WARNING);
       ctx->l2 = NULL;
       ctx->cpBindh = NULL;
       ctx->cpBindp = NULL;
  @@ -222,7 +240,7 @@
       initsession(&ctx->session);
       ctx->msg = NULL;
       if (uname(&ctx->uname) == -1) {
  -        fprintf(stderr, "%s:Error: uname failed \"%s\"\n", progname, strerror(errno));
  +        fprintf(stderr, "%s:Error: uname failed \"%s\"\n", ctx->progname, strerror(errno));
           exit(ERR_EXECUTION);
       }
   
  @@ -241,57 +259,6 @@
       }
   #endif
   
  -    if ((ctx->l2 = l2_stream_create()) == NULL) {
  -        fprintf(stderr, "%s:Error: logging failed to create stream\n", progname);
  -        exit(ERR_EXECUTION);
  -    }
  -
  -    if ((chPrefix  = l2_channel_create(&l2_handler_prefix)) == NULL) {
  -        fprintf(stderr, "%s:Error: logging failed to create prefix channel\n", progname);
  -        exit(ERR_EXECUTION);
  -    }
  -    if (l2_channel_configure(chPrefix, "timefmt,timezone", "[%d-%m-%Y/%H:%M:%S] ", "local") != L2_OK) {
  -        fprintf(stderr, "%s:Error: logging failed to configure prefix channel\n", progname);
  -        exit(ERR_EXECUTION);
  -    }
  -
  -    if ((chBuf  = l2_channel_create(&l2_handler_buffer)) == NULL) {
  -        fprintf(stderr, "%s:Error: logging failed to create buffer channel\n", progname);
  -        exit(ERR_EXECUTION);
  -    }
  -    if (l2_channel_configure(chBuf, "size", 4096) != L2_OK) {
  -        fprintf(stderr, "%s:Error: logging failed to configure buffer channel\n", progname);
  -        exit(ERR_EXECUTION);
  -    }
  -
  -    if ((chFile = l2_channel_create(&l2_handler_file)) == NULL) {
  -        fprintf(stderr, "%s:Error: logging failed to create file channel\n", progname);
  -        exit(ERR_EXECUTION);
  -    }
  -    if (l2_channel_configure(chFile, "path,append,perm", "logtest", TRUE, 0644) != L2_OK) {
  -        fprintf(stderr, "%s:Error: logging failed to configure file channel\n", progname);
  -        exit(ERR_EXECUTION);
  -    }
  -
  -    if (l2_channel_stack(chFile, chBuf) != L2_OK) {
  -        fprintf(stderr, "%s:Error: logging failed to stack buffer channel on top of file channel\n", progname);
  -        exit(ERR_EXECUTION);
  -    }
  -    if (l2_channel_stack(chBuf, chPrefix) != L2_OK) {
  -        fprintf(stderr, "%s:Error: logging failed to stack prefix channel on top of buffer channel\n", progname);
  -        exit(ERR_EXECUTION);
  -    }
  -
  -    if (l2_channel_open(chPrefix) != L2_OK) {
  -        fprintf(stderr, "%s:Error: logging failed to open buffer channel\n", progname);
  -        exit(ERR_EXECUTION);
  -    }
  -
  -    if (l2_stream_channel(ctx->l2, chPrefix, L2_LEVEL_UPTO(L2_LEVEL_DEBUG)) != L2_OK) {
  -        fprintf(stderr, "%s:Error: logging failed to attach channel into stream\n", progname);
  -        exit(ERR_EXECUTION);
  -    }
  -
       /*POD B<lmtp2nntp> */
   
       /*  use
  @@ -300,19 +267,8 @@
        */
   
       /* read in the arguments */
  -    while ((i = getopt(argc, argv, "L:Vb:d:g:h:l:m:n:s:t:vw:")) != -1) {
  +    while ((i = getopt(argc, argv, "b:d:g:h:l:m:n:s:vw:")) != -1) {
           switch (i) {
  -            case 'L': /*POD B<-L> I<level>*/
  -                if (l2_util_s2l(optarg, strlen(optarg), ',', &ctx->option_levelmask) != L2_OK) {
  -                    fprintf(stderr, "%s:Error: Invalid format \"%s\" to option -L\n", progname, optarg);
  -                    exit(ERR_EXECUTION);
  -                }
  -                //FIXME
  -                break;
  -            case 'V': /*POD [B<-V>] (version)*/
  -                fprintf(stdout, "%s\n", lmtp2nntp_version.v_gnu);
  -                exit(0);
  -                break;
               case 'b': /*POD [B<-b> I<bindaddr>[I<:port>] */
                   /* parse host[:port] string into host and port */
                   ctx->cpBindh = strdup(optarg);
  @@ -326,23 +282,12 @@
                   fprintf(stderr, "DEBUG: creating TCP socket address for \"%s:%s\"\n", ctx->cpBindh, ctx->cpBindp);
                   if ((ctx->saBind = sa_create(SA_IP, "tcp", ctx->cpBindh, ctx->cpBindp)) == NULL) {
                       fprintf(stderr, "%s:Error: creating TCP socket address failed for \"%s:%s\": %s\n", 
  -                            progname, 
  +                            ctx->progname, 
                               ctx->cpBindh, 
                               ctx->cpBindp, 
                               strerror(errno));
                       exit(ERR_EXECUTION);
                   }
  -                fprintf(stderr, "DEBUG: saBind->sa_len=%d\n",
  -                ctx->saBind->sa_buf->sa_len);
  -                fprintf(stderr, "DEBUG: saBind->sa_family=%d\n", (int)ctx->saBind->sa_buf->sa_family);
  -                for (i=0; i<14; i++)
  -                fprintf(stderr, "DEBUG: saBind->sa_data[%2d]=%2x %d\n", i,
  -                (unsigned int)(unsigned char)ctx->saBind->sa_buf->sa_data[i],
  -                (unsigned int)(unsigned char)ctx->saBind->sa_buf->sa_data[i]);
  -                ctx->saBind->sa_buf->sa_data[ 7]='0'; //DEBUG
  -                ctx->saBind->sa_buf->sa_data[ 8]='0'; //DEBUG
  -                ctx->saBind->sa_buf->sa_data[ 9]='0'; //DEBUG
  -                ctx->saBind->sa_buf->sa_data[10]='0'; //DEBUG
                   break;
               case 'd': /*POD [B<-d> I<deliverymode>] */
                   if      (strcasecmp(optarg, "post") == 0)
  @@ -351,12 +296,12 @@
                       ctx->option_deliverymode = DELIVERYMODE_FEED;
                   else {
                       if (strlen(optarg) != 9) {
  -                        fprintf(stderr, "%s:Error: Invalid format or length \"%s\" to option -d\n", progname, optarg);
  +                        fprintf(stderr, "%s:Error: Invalid format or length \"%s\" to option -d\n", ctx->progname, optarg);
                           exit(ERR_EXECUTION);
                       }
   
                       if (optarg[3] != '/') {
  -                        fprintf(stderr, "%s:Error: Invalid format or missing slash \"%s\" to option -d\n", progname, optarg);
  +                        fprintf(stderr, "%s:Error: Invalid format or missing slash \"%s\" to option -d\n", ctx->progname, optarg);
                           exit(ERR_EXECUTION);
                       }
   
  @@ -368,7 +313,7 @@
                           || !isdigit((int)ctx->option_deliverymodefakestatus[0])
                           || !isdigit((int)ctx->option_deliverymodefakestatus[1])
                           || !isdigit((int)ctx->option_deliverymodefakestatus[2])) {
  -                            fprintf(stderr, "%s:Error: Invalid status in format \"%s\" to option -d\n", progname, optarg);
  +                            fprintf(stderr, "%s:Error: Invalid status in format \"%s\" to option -d\n", ctx->progname, optarg);
                               exit(ERR_EXECUTION);
                           }
   
  @@ -379,7 +324,7 @@
                           || (ctx->option_deliverymodefakedsn[3] != '.')
                           || !isdigit((int)ctx->option_deliverymodefakedsn[4])
                           || (ctx->option_deliverymodefakedsn[0] != ctx->option_deliverymodefakestatus[0])) {
  -                            fprintf(stderr, "%s:Error: Invalid dsn in format \"%s\" to option -d\n", progname, optarg);
  +                            fprintf(stderr, "%s:Error: Invalid dsn in format \"%s\" to option -d\n", ctx->progname, optarg);
                               exit(ERR_EXECUTION);
                           }
                       }
  @@ -392,7 +337,7 @@
                   else if (strcasecmp(optarg, "header") == 0)
                       ctx->option_groupmode = GROUPMODE_HEADER;
                   else {
  -                    fprintf(stderr, "%s:Error: Invalid mode \"%s\" to option -g\n", progname, optarg);
  +                    fprintf(stderr, "%s:Error: Invalid mode \"%s\" to option -g\n", ctx->progname, optarg);
                       exit(ERR_EXECUTION);
                   }
                   break;
  @@ -402,7 +347,7 @@
                   cp = NULL;
                   while ((cp = argz_next(azHosts, asHosts, cp)) != NULL) {
                       if (ctx->nsc >= MAXNEWSSERVICES) {
  -                        fprintf(stderr, "%s:Error: Too many services (%d) using option -h\n", progname, ctx->nsc);
  +                        fprintf(stderr, "%s:Error: Too many services (%d) using option -h\n", ctx->progname, ctx->nsc);
                           exit(ERR_EXECUTION);
                       }
   
  @@ -421,7 +366,7 @@
                                           ctx->ns[ctx->nsc].h,
                                           ctx->ns[ctx->nsc].p)) == NULL) {
                           fprintf(stderr, "%s:Error: creating TCP socket address failed for \"%s:%s\": %s\n", 
  -                                progname, 
  +                                ctx->progname, 
                                   ctx->ns[ctx->nsc].h, 
                                   ctx->ns[ctx->nsc].p, 
                                   strerror(errno));
  @@ -431,7 +376,7 @@
                       if ((ctx->ns[ctx->nsc].s =
                            socket(sa->sa_buf->sa_family, SOCK_STREAM, sa->sa_proto)) == -1) {
                           fprintf(stderr, "%s:Error: Creating TCP socket failed for \"%s:%s\": %s\n", 
  -                                progname, 
  +                                ctx->progname, 
                                   ctx->ns[ctx->nsc].h, 
                                   ctx->ns[ctx->nsc].p, 
                                   strerror(errno));
  @@ -447,7 +392,7 @@
                   break;
               case 'n': /*POD [B<-n> I<nodename>] */
                   if (strlen(optarg) > sizeof(ctx->uname.nodename)-1) {
  -                        fprintf(stderr, "%s:Error: nodename \"%s\" to long to option -n.\n", progname, optarg);
  +                        fprintf(stderr, "%s:Error: nodename \"%s\" to long to option -n.\n", ctx->progname, optarg);
                           exit(ERR_EXECUTION);
                   }
                   strcpy(ctx->uname.nodename, optarg);
  @@ -455,28 +400,42 @@
               case 's': /*POD [B<-s> I<size>] */
                       ctx->option_maxmessagesize = atoi(optarg);
                       if(ctx->option_maxmessagesize < 64) {
  -                        fprintf(stderr, "%s:Error: maximum message size is unacceptable small.\n", progname);
  +                        fprintf(stderr, "%s:Error: maximum message size is unacceptable small.\n", ctx->progname);
                           exit(ERR_EXECUTION);
                       }
  -            case 't': /*POD [B<-t> I<tracefile>] */
  -                ctx->option_tracing = TRUE;
  -                trace_read (-1, optarg, 0);
  -                trace_write(-1, optarg, 0);
  +            case 'l': /*POD [B<-l> I<level>[:I<logfile>]] */
  +                if ((cp = strrchr(optarg, ':')) != NULL) {
  +                    *cp++ = NUL;
  +                    if (*cp == NUL) {
  +                        fprintf(stderr, "%s:Error: empty logfile to option -l\n", ctx->progname);
  +                        exit(ERR_EXECUTION);
  +                    }
  +                    else
  +                        ctx->option_logfile = strdup(cp);
  +                }
  +                else
  +                    ctx->option_logfile = strdup("logfile");
  +
  +                if (l2_util_s2l(optarg, strlen(optarg), ',', &ctx->option_levelmask) != L2_OK) {
  +                    fprintf(stderr, "%s:Error: invalid level \"%s\" to option -l\n", ctx->progname, optarg);
  +                    exit(ERR_EXECUTION);
  +                }
  +                ctx->option_levelmask = L2_LEVEL_UPTO(ctx->option_levelmask);
                   break;
  -            case 'v': /*POD [B<-v>] (verbose)*/
  -                ctx->option_verbose = TRUE;
  +            case 'v': /*POD [B<-v>] (version)*/
  +                fprintf(stdout, "%s\n", lmtp2nntp_version.v_gnu);
  +                exit(0);
                   break;
               case 'w': /*POD [B<-w> I<waittime>] */
                       ctx->option_waittime = atoi(optarg);
                       if(ctx->option_waittime < 1) {
  -                        fprintf(stderr, "%s:Error: waittime %d to option -w must be greater 1 second.\n", 
  -                                progname, ctx->option_waittime);
  +                        fprintf(stderr, "%s:Error: waittime %d to option -w must be greater 1 second.\n", ctx->progname, ctx->option_waittime);
                           exit(ERR_EXECUTION);
                       }
                   break;
               case '?':
               default:
  -                usage(progname);
  +                usage(ctx->progname);
                   exit(ERR_EXECUTION);
           }
       }
  @@ -485,32 +444,94 @@
           argz_add(&ctx->azGroupargs, &ctx->asGroupargs, argv[i]);
       }
   
  -    /* initialize L2 logging context */
  -    fprintf(stderr, "DEBUG: ctx->option_levelmask=0x%x\n", ctx->option_levelmask);
  -    if (l2_stream_levels(ctx->l2, ctx->option_levelmask) != L2_OK) {
  -        fprintf(stderr, "%s:Error: logging failed to set global logging level\n", progname);
  +    if ((ctx->l2 = l2_stream_create()) == NULL) {
  +        fprintf(stderr, "%s:Error: logging failed to create stream\n", ctx->progname);
           exit(ERR_EXECUTION);
       }
   
  -    if (l2_stream_log(ctx->l2, L2_LEVEL_INFO, "%s: Startup", progname) != L2_OK) {
  -        fprintf(stderr, "%s:Error: logging failed to log \"Startup\" message to stream\n", progname);
  +    if (l2_stream_formatter(ctx->l2, 'P', formatter_prefix, (l2_context_t *)&ctx) != L2_OK) {
  +        fprintf(stderr, "%s:Error: logging failed to register formatter\n", ctx->progname);
           exit(ERR_EXECUTION);
       }
  -    if (l2_stream_log(ctx->l2, L2_LEVEL_DEBUG, "%s: Startup DEBUG-test", progname) != L2_OK) {
  -        fprintf(stderr, "%s:Error: logging failed to log \"Startup\" message to stream\n", progname);
  +    if (l2_stream_formatter(ctx->l2, 'D', l2_util_fmt_dump, NULL) != L2_OK) {
  +        fprintf(stderr, "%s:Error: logging failed to register dump formatter\n", ctx->progname);
           exit(ERR_EXECUTION);
       }
  -    if (l2_stream_log(ctx->l2, L2_LEVEL_PANIC, "%s: Startup PANIC-test", progname) != L2_OK) {
  -        fprintf(stderr, "%s:Error: logging failed to log \"Startup\" message to stream\n", progname);
  +    if (l2_stream_formatter(ctx->l2, 'm', formatter_errno, NULL) != L2_OK) {
  +        fprintf(stderr, "%s:Error: logging failed to register dump formatter\n", ctx->progname);
           exit(ERR_EXECUTION);
       }
   
  +    if ((chPrefix  = l2_channel_create(&l2_handler_prefix)) == NULL) {
  +        fprintf(stderr, "%s:Error: logging failed to create prefix channel\n", ctx->progname);
  +        exit(ERR_EXECUTION);
  +    }
  +    if (l2_channel_configure(chPrefix, "timefmt,timezone", "[%d-%m-%Y/%H:%M:%S] ", "local") != L2_OK) {
  +        fprintf(stderr, "%s:Error: logging failed to configure prefix channel\n", ctx->progname);
  +        exit(ERR_EXECUTION);
  +    }
  +
  +    if ((chBuf  = l2_channel_create(&l2_handler_buffer)) == NULL) {
  +        fprintf(stderr, "%s:Error: logging failed to create buffer channel\n", ctx->progname);
  +        exit(ERR_EXECUTION);
  +    }
  +    if (l2_channel_configure(chBuf, "size", 4) != L2_OK) { //FIXME 4096
  +        fprintf(stderr, "%s:Error: logging failed to configure buffer channel\n", ctx->progname);
  +        exit(ERR_EXECUTION);
  +    }
  +
  +    if ((chFile = l2_channel_create(&l2_handler_file)) == NULL) {
  +        fprintf(stderr, "%s:Error: logging failed to create file channel\n", ctx->progname);
  +        exit(ERR_EXECUTION);
  +    }
  +    if (l2_channel_configure(chFile, "path,append,perm", ctx->option_logfile, TRUE, 0644) != L2_OK) {
  +        fprintf(stderr, "%s:Error: logging failed to configure file channel\n", ctx->progname);
  +        exit(ERR_EXECUTION);
  +    }
  +
  +    if (l2_channel_stack(chFile, chBuf) != L2_OK) {
  +        fprintf(stderr, "%s:Error: logging failed to stack buffer channel on top of file channel\n", ctx->progname);
  +        exit(ERR_EXECUTION);
  +    }
  +    if (l2_channel_stack(chBuf, chPrefix) != L2_OK) {
  +        fprintf(stderr, "%s:Error: logging failed to stack prefix channel on top of buffer channel\n", ctx->progname);
  +        exit(ERR_EXECUTION);
  +    }
  +
  +    if (l2_channel_open(chPrefix) != L2_OK) {
  +        fprintf(stderr, "%s:Error: logging failed to open buffer channel\n", ctx->progname);
  +        exit(ERR_EXECUTION);
  +    }
  +
  +    if (l2_stream_channel(ctx->l2, chPrefix, L2_LEVEL_UPTO(L2_LEVEL_DEBUG)) != L2_OK) {
  +        fprintf(stderr, "%s:Error: logging failed to attach channel into stream\n", ctx->progname);
  +        exit(ERR_EXECUTION);
  +    }
  +
  +fprintf(stderr, "DEBUG: ctx->option_levelmask=0x%x\n", ctx->option_levelmask);
  +    if (l2_stream_levels(ctx->l2, ctx->option_levelmask) != L2_OK) {
  +        fprintf(stderr, "%s:Error: logging failed to set global logging level\n", ctx->progname);
  +        exit(ERR_EXECUTION);
  +    }
  +
  +    if (l2_stream_log(ctx->l2, L2_LEVEL_INFO, "%P: startup, version %s", lmtp2nntp_version.v_gnu) != L2_OK) {
  +        fprintf(stderr, "%s:Error: logging failed to log startup message to stream\n", ctx->progname);
  +        exit(ERR_EXECUTION);
  +    }
  +
  +    if (ctx->option_logfile && (ctx->option_levelmask >= L2_LEVEL_TRACE)) {
  +        trace_read (-1, ctx->option_logfile, 0);
  +        trace_write(-1, ctx->option_logfile, 0);
  +    }
  +
       /* initialize LMTP context */
       lmtp_io.select = NULL;
       lmtp_io.read   = trace_read;
       lmtp_io.write  = trace_write;
  -    if ((lmtp = lmtp_create(STDIN_FILENO, STDOUT_FILENO, ctx->option_tracing ? &lmtp_io : NULL)) == NULL) {
  -        fprintf(stderr, "%s:Error: Unable to initialize LMTP library\n", progname);
  +    if ((lmtp = lmtp_create(STDIN_FILENO, STDOUT_FILENO,
  +                            (ctx->option_logfile && (ctx->option_levelmask >= L2_LEVEL_TRACE)) ?
  +                             &lmtp_io : NULL )) == NULL) {
  +        fprintf(stderr, "%s:Error: Unable to initialize LMTP library\n", ctx->progname);
           exit(ERR_EXECUTION);
       }
       /*  RFC0821, 4.5.1. MINIMUM IMPLEMENTATION
  @@ -540,19 +561,20 @@
       lmtp_loop(lmtp);
   
       /* graceful shutdown */
  +    log0(ctx, INFO, "%P: graceful shutdown, no more logging until exit");
       lmtp_gfs_quit(ctx);
       lmtp_gfs_lhlo(ctx);
       lmtp_destroy(lmtp);
  +    if (ctx->option_logfile != NULL)
  +        free(ctx->option_logfile);
  +    if (ctx->progname != NULL)
  +        free(ctx->progname);
       if (ctx->azGroupargs != NULL)
           free(ctx->azGroupargs);
       if (ctx != NULL)
           free(ctx);
       str_parse(NULL, NULL);
  -
  -    if (l2_stream_destroy(ctx->l2) != L2_OK) {
  -        fprintf(stderr, "%s:Error: logging failed to destroy stream\n", progname);
  -        exit(ERR_EXECUTION);
  -    }
  +    l2_stream_destroy(ctx->l2);
   
       return 0;
   }
  @@ -657,6 +679,8 @@
       int i;
       nntp_io_t nntp_io;
   
  +    log0(ctx, INFO, "lmtp_cb_lhlo");
  +
       nntp_io.select = NULL;
       nntp_io.read   = trace_read;
       nntp_io.write  = trace_write;
  @@ -701,35 +725,56 @@
       i = 0;
       do {
           bOk = TRUE;
  -        if (bOk && (ctx->saBind != NULL) &&
  -                   bind(ctx->ns[i].s, ctx->saBind->sa_buf, ctx->saBind->sa_len) < 0) {
  -            bOk = FALSE;
  -            fprintf(stderr, "DEBUG: errno=%d\n", errno);
  -        }
  -        if (ctx->option_waittime > 0) {
  -            if (connect_nonb(ctx->ns[i].s, ctx->ns[i].sa->sa_buf, ctx->ns[i].sa->sa_len, 
  -                         ctx->option_waittime) < 0) {
  +        if (bOk && (ctx->saBind != NULL)) {
  +            log0(ctx, DEBUG, "bind");
  +            if (bind(ctx->ns[i].s, ctx->saBind->sa_buf, ctx->saBind->sa_len) < 0) {
                   bOk = FALSE;
  +                log0(ctx, ERROR, "bind=%m");
               }
           }
  -        else {
  -            if (connect(ctx->ns[i].s, ctx->ns[i].sa->sa_buf, ctx->ns[i].sa->sa_len) < 0) {
  -                bOk = FALSE;
  +        if (bOk) {
  +            if(ctx->option_waittime > 0) {
  +                log0(ctx, DEBUG, "connect_nonb");
  +                if (connect_nonb(ctx->ns[i].s, ctx->ns[i].sa->sa_buf, ctx->ns[i].sa->sa_len, 
  +                             ctx->option_waittime) < 0) {
  +                    bOk = FALSE;
  +                    log0(ctx, ERROR, "connect_nonb=%m");
  +                }
  +            }
  +            else {
  +                log0(ctx, DEBUG, "connect");
  +                if (connect(ctx->ns[i].s, ctx->ns[i].sa->sa_buf, ctx->ns[i].sa->sa_len) < 0) {
  +                    bOk = FALSE;
  +                    log0(ctx, ERROR, "connect=%m");
  +                }
               }
           }
  -        if (bOk && ((ctx->ns[i].nntp = nntp_create(ctx->ns[i].s, ctx->ns[i].s, 
  -                                                   ctx->option_tracing ? &nntp_io : NULL)) == NULL)) {
  -            bOk = FALSE;
  +        if (bOk) {
  +            log0(ctx, DEBUG, "nntp_create");
  +            if ((ctx->ns[i].nntp = nntp_create(ctx->ns[i].s, ctx->ns[i].s, 
  +                                               (ctx->option_logfile && (ctx->option_levelmask >= L2_LEVEL_TRACE)) ?
  +                                                &nntp_io : NULL)) == NULL) {
  +                bOk = FALSE;
  +                log0(ctx, ERROR, "nntp_create failed");
  +            }
           }
           if (bOk && ctx->option_waittime >= 0) {
  +            log1(ctx, DEBUG, "nntp_timeout(%d)", ctx->option_waittime);
               nntp_timeout(ctx->ns[i].nntp, ctx->option_waittime);
           }
  -        if (bOk && ((rc = nntp_init(ctx->ns[i].nntp)) != NNTP_OK)) {
  -            bOk = FALSE;
  +        if (bOk) {
  +            log0(ctx, DEBUG, "nntp_init");
  +            if ((rc = nntp_init(ctx->ns[i].nntp)) != NNTP_OK) {
  +                bOk = FALSE;
  +                log2(ctx, ERROR, "nntp_init=(%m) %s", rc, nntp_error(rc));
  +            }
           }
  -        if (bOk)
  +        if (bOk) {
  +            log0(ctx, INFO, "nntp connection successfully established");
               i++;
  +        }
           else {
  +            log0(ctx, INFO, "nntp connection establishment failed");
               if (i < --ctx->nsc) {
                   memcpy(&ctx->ns[i], &ctx->ns[i+1], (ctx->nsc - i ) * sizeof(struct ns));
               }
  @@ -915,6 +960,8 @@
       lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx;
       lmtp_res_t res;
   
  +    log0(ctx, INFO, "lmtp_cb_mail");
  +
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   553 Requested action not taken: mailbox name not allowed
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.1.8   Bad sender's system address
  @@ -1011,6 +1058,8 @@
       char *cp;
       char *group;
   
  +    log0(ctx, INFO, "lmtp_cb_rcpt");
  +
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   503 Bad sequence of commands
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.5.0   Other or undefined protocol status
  @@ -1114,6 +1163,8 @@
       int bSuccess;
       char *cp;
   
  +    log0(ctx, INFO, "lmtp_cb_data");
  +
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   503 Bad sequence of commands
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.5.0   Other or undefined protocol status
  @@ -1371,11 +1422,14 @@
       return LMTP_OK;
   }
   
  -static lmtp_rc_t lmtp_cb_noop(lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *ctx)
  +static lmtp_rc_t lmtp_cb_noop(lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *_ctx)
   {
  +    lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx;
       lmtp_res_t res;
       lmtp_rc_t rc = LMTP_OK;
   
  +    log0(ctx, INFO, "lmtp_cb_noop");
  +
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   250 Requested mail action okay, completed
        *  RFC1893 2. Status Codes                         2.X.X   Success
        *  RFC1893 3.5 Network and Routing Status          X.0.0   Other undefined Status
  @@ -1393,6 +1447,8 @@
       lmtp_res_t res;
       lmtp_rc_t rc = LMTP_OK;
   
  +    log0(ctx, INFO, "lmtp_cb_rset");
  +
       lmtp_gfs_rset(ctx);
   
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   250 Requested mail action okay, completed
  @@ -1420,6 +1476,8 @@
       lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx;
       lmtp_res_t res;
       lmtp_rc_t rc = LMTP_EOF;
  +
  +    log0(ctx, INFO, "lmtp_cb_quit");
   
       lmtp_gfs_quit(ctx);
   
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.h
  ============================================================
  $ cvs update -p -r1.1 lmtp2nntp.h
  /*
  **  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  **  mailer which forwards mails as Usenet news articles via NNTP.
  **  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  **
  **  This program is free software; you can redistribute it and/or
  **  modify it under the terms of the GNU General Public  License
  **  as published by the Free Software Foundation; either version
  **  2.0 of the License, or (at your option) any later version.
  **
  **  This program is distributed in the hope that it will be useful,
  **  but WITHOUT ANY WARRANTY; without even the implied warranty of
  **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  **  General Public License for more details.
  **
  **  You should have received a copy of the GNU General Public License
  **  along with this file; if not, write to the Free Software
  **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  **  USA, or contact the OSSP project <ossp@ossp.org>.
  **
  **  lmtp2nntp.h: LMTP to NNTP global header
  */
  
  #ifndef __LMTP2NNTP_H__
  #define __LMTP2NNTP_H__
  
  #define log0(ctx,level,msg) \
      l2_stream_log((ctx)->l2, L2_LEVEL_##level, "%P: " msg)
  #define log1(ctx,level,msg,a1) \
      l2_stream_log((ctx)->l2, L2_LEVEL_##level, "%P: " msg, a1)
  #define log2(ctx,level,msg,a1,a2) \
      l2_stream_log((ctx)->l2, L2_LEVEL_##level, "%P: " msg, a1, a2)
  #define log3(ctx,level,msg,a1,a2,a3) \
      l2_stream_log((ctx)->l2, L2_LEVEL_##level, "%P: " msg, a1, a2, a3)
  
  #endif /* __LMTP2NNTP_H__ */
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 lmtp2nntp.pod
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/09/05 15:01:57	1.17
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/09/07 13:53:16	1.18
  @@ -33,7 +33,6 @@
   =head1 SYNOPSIS
   
   B<lmtp2nntp>
  -[B<-V>]
   [B<-b> I<bindaddr>[I<:port>]
   [B<-d> I<deliverymode>]
   [B<-g> I<groupmode>]
  @@ -41,14 +40,13 @@
   [B<-m> I<mailfrom>]
   [B<-n> I<nodename>]
   [B<-s> I<size>]
  -[B<-t> I<tracefile>]
  +[B<-l> I<level>[:I<logfile>]]
   [B<-v>]
   [B<-w> I<waittime>]
   I<newsgroup> [I<newsgroup> ...]
   
   B<FIXME NOT YET IMPLEMENTED>
   [B<-i> I<messageid>]
  -[B<-l> I<logtarget>]
   
   =head1 DESCRIPTION
   
  @@ -64,10 +62,6 @@
   
   =over 4
   
  -=item B<-V>
  -
  -Print version information.
  -
   =item B<-b> I<bindaddr>[I<:port>]
   
   Bind address and/or port to be used by the LMTP client.  If an address is
  @@ -132,15 +126,9 @@
   Size limitation on message in bytes. Default is 8388608 (8M). Values below 64
   are considered unacceptable small.
   
  -=item B<-t> I<tracefile>
  -
  -Enable LMTP and NNTP protocol tracing into tracefile. When using C<syslog:>
  -these messages are logged with C<debug> level.
  -
   =item B<-v>
   
  -Enable verbose processing messages in logfile.  When using C<syslog:> these
  -messages are logged with C<info> level.
  +Print version information.
   
   =item B<-w> I<waittime>
   
  @@ -157,37 +145,9 @@
   
   B<FIXME NOT YET IMPLEMENTED>
   
  -=item B<-o> I<origin>
  -
  -Outgoing network IP address or hostname to bind to.
  -
   =item B<-i> I<messageid>
   
   Message id of MTA (for logging purposes only).
  -
  -=item B<-p> I<protocol>
  -
  -Incoming protocol. Default is C<stdin> which means B<lmtp2nntp>
  -reads the incoming mail from F<stdin> in RFC822 message format and reports errors to F<stderr>.
  -Alternatively if I<protocol> is C<LMTP>, B<lmtp2nntp> speaks Local Mail
  -Transport Protocol (LMTP) according to RFC 2033 on F<stdin>/F<stdout>.
  -
  -=item B<-l> C<stderr>
  -
  -=item B<-l> C<syslog>[C<:>I<facility>]
  -
  -=item B<-l> C<file:>I<localfile>
  -
  -
  -Logging target. This option can be specified more than once. Default is no
  -logging. Default I<facility> for C<syslog:> is C<lmtp2nntp>.
  -
  -=item B<-L> I<level>
  -
  -Logging level. Default is C<warn>. Possible levels from highest priority with
  -least output to lowest priority with most most outpout are C<panic>,
  -C<critical>, C<error>, C<warning>, C<notice>, C<info>, C<trace>, C<debug>
  -where the chosen level includes all levels with higher priority.
   
   =back
   
  Index: ossp-pkg/lmtp2nntp/test/.cvsignore
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 .cvsignore
  --- ossp-pkg/lmtp2nntp/test/.cvsignore	2001/09/07 10:27:51	1.1
  +++ ossp-pkg/lmtp2nntp/test/.cvsignore	2001/09/07 13:53:17	1.2
  @@ -1,2 +1,2 @@
   dmalloc.log
  -logtest
  +logfile
  Index: ossp-pkg/lmtp2nntp/test/run.sh
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 run.sh
  --- ossp-pkg/lmtp2nntp/test/run.sh	2001/08/28 13:12:59	1.11
  +++ ossp-pkg/lmtp2nntp/test/run.sh	2001/09/07 13:53:17	1.12
  @@ -42,12 +42,8 @@
   lmtp()
   {
       newmsg lmtp
  -    set -x
       cat /tmp/testmessage \
  -     | ../lmtp2nntp -t /tmp/tracing -d $1 -g $2 -h dev16,141.1.23.116:nntp -h dev16.de.cw.net:119 $3 >/dev/null; echo $?
  -    set +x
  -#   cat /tmp/testmessage \
  -#    | ../lmtp2nntp -t /tmp/tracing -d $1 -g $2 -h dev16 $3 >/dev/null; echo $?
  +     | ../lmtp2nntp -l debug:/tmp/tracing -w 1 -d $1 -g $2 -b dev12 -h dev16,141.1.23.116:nntp -h dev16.de.cw.net:119 $3 >/dev/null; echo $?
   }
   
   sendmaildup()
  Index: ossp-pkg/lmtp2nntp/test/testmessage.vialmtp
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 testmessage.vialmtp
  --- ossp-pkg/lmtp2nntp/test/testmessage.vialmtp	2001/08/28 14:27:35	1.4
  +++ ossp-pkg/lmtp2nntp/test/testmessage.vialmtp	2001/09/07 13:53:17	1.5
  @@ -4,7 +4,7 @@
   RCPT To:<foo.bar@news-posting>
   RCPT To:<foo.test.bar@news-posting>
   DATA
  -Date: Tue, 26 Aug 2001 14:51:48 +0200 (CEST)
  +Date: Tue, 6 Sep 2001 14:51:48 +0200 (CEST)
   Message-Id: <200108141251.f7ECpmn74812@dev.de.cw.net>
   From: Thomas Lotterer <Thomas.Lotterer@de.cw.net>
   Subject: lmtp2nntp testmessage.viasendmail

From ossp-cvs-owner@ossp.org  Fri Sep  7 15:56:33 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f87DuW086907; Fri, 7 Sep 2001 15:56:32 +0200 (CEST)
Date: Fri, 7 Sep 2001 15:56:32 +0200 (CEST)
Message-Id: <200109071356.f87DuW086907@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   07-Sep-2001 15:56:32
  Branch: HEAD                             Handle: 2001090714563100

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c

  Log:
    remove obsolete DEBUG stuff

  Summary:
    Revision    Changes     Path
    1.43        +1  -4      ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.42 -r1.43 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/07 13:53:16	1.42
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/07 13:56:31	1.43
  @@ -156,7 +156,6 @@
        */
       fprintf(stderr, 
               "USAGE: %s "
  -            "[-V]"
               "[-b bindaddr[:port]"
               "[-d deliverymode]"
               "[-g groupmode]"
  @@ -164,7 +163,7 @@
               "[-m mailfrom]"
               "[-n nodename]"
               "[-s size]"
  -            "[-t tracefile]"
  +            "[-l level[:logfile]]"
               "[-v]"
               "[-w waittime]"
               "newsgroup [newsgroup ...]"
  @@ -279,7 +278,6 @@
                   else 
                       ctx->cpBindp = strdup("0");
   
  -                fprintf(stderr, "DEBUG: creating TCP socket address for \"%s:%s\"\n", ctx->cpBindh, ctx->cpBindp);
                   if ((ctx->saBind = sa_create(SA_IP, "tcp", ctx->cpBindh, ctx->cpBindp)) == NULL) {
                       fprintf(stderr, "%s:Error: creating TCP socket address failed for \"%s:%s\": %s\n", 
                               ctx->progname, 
  @@ -508,7 +506,6 @@
           exit(ERR_EXECUTION);
       }
   
  -fprintf(stderr, "DEBUG: ctx->option_levelmask=0x%x\n", ctx->option_levelmask);
       if (l2_stream_levels(ctx->l2, ctx->option_levelmask) != L2_OK) {
           fprintf(stderr, "%s:Error: logging failed to set global logging level\n", ctx->progname);
           exit(ERR_EXECUTION);

From ossp-cvs-owner@ossp.org  Fri Sep  7 16:49:09 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f87En8S92982; Fri, 7 Sep 2001 16:49:08 +0200 (CEST)
Date: Fri, 7 Sep 2001 16:49:08 +0200 (CEST)
Message-Id: <200109071449.f87En8S92982@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ut_fmtcb.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   07-Sep-2001 16:49:08
  Branch: HEAD                             Handle: 2001090715490800

  Modified files:
    ossp-pkg/l2             l2_ut_fmtcb.c

  Log:
    better readable text dumping

  Summary:
    Revision    Changes     Path
    1.3         +11 -0      ossp-pkg/l2/l2_ut_fmtcb.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ut_fmtcb.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2_ut_fmtcb.c
  --- ossp-pkg/l2/l2_ut_fmtcb.c	2001/09/06 14:37:53	1.2
  +++ ossp-pkg/l2/l2_ut_fmtcb.c	2001/09/07 14:49:08	1.3
  @@ -96,6 +96,17 @@
                   *cpO++ = '\\';
                   *cpO++ = '\\';
               }
  +            else if (uc == '\t' || uc == '\r' || uc == '\n') {
  +                if ((char *)(cpO+1) >= (bufptr+bufsize))
  +                    return L2_ERR_MEM;
  +                *cpO++ = '\\';
  +                switch ((int)uc) {
  +                    case '\t': *cpO++ = 't'; break; 
  +                    case '\r': *cpO++ = 'r'; break; 
  +                    case '\n': *cpO++ = 'n'; break; 
  +                    default: break;
  +                }
  +            }
               else {
                   if ((char *)(cpO+3) >= (bufptr+bufsize))
                       return L2_ERR_MEM;

From ossp-cvs-owner@ossp.org  Fri Sep  7 17:02:11 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f87F2AI94835; Fri, 7 Sep 2001 17:02:10 +0200 (CEST)
Date: Fri, 7 Sep 2001 17:02:10 +0200 (CEST)
Message-Id: <200109071502.f87F2AI94835@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp Makefile.in lmtp.c lmtp.h lmtp2nntp.c l...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   07-Sep-2001 17:02:10
  Branch: HEAD                             Handle: 19700101010000999871328

  Modified files:
    ossp-pkg/lmtp2nntp      Makefile.in lmtp.c lmtp.h lmtp2nntp.c lmtp2nntp.h
                            nntp.c nntp.h
  Removed files:
    ossp-pkg/lmtp2nntp      trace.c trace.h

  Log:
    Replace ad-hoc tracing with L2_LEVEL_TRACE based approach.

  Summary:
    Revision    Changes     Path
    1.15        +2  -2      ossp-pkg/lmtp2nntp/Makefile.in
    1.22        +25 -8      ossp-pkg/lmtp2nntp/lmtp.c
    1.10        +4  -3      ossp-pkg/lmtp2nntp/lmtp.h
    1.44        +60 -10     ossp-pkg/lmtp2nntp/lmtp2nntp.c
    1.2         +7  -0      ossp-pkg/lmtp2nntp/lmtp2nntp.h
    1.21        +28 -11     ossp-pkg/lmtp2nntp/nntp.c
    1.9         +4  -3      ossp-pkg/lmtp2nntp/nntp.h
    NONE        +0  -87     ossp-pkg/lmtp2nntp/trace.c
    NONE        +0  -40     ossp-pkg/lmtp2nntp/trace.h
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	2001/09/07 13:53:16	1.14
  +++ ossp-pkg/lmtp2nntp/Makefile.in	2001/09/07 15:02:08	1.15
  @@ -43,8 +43,8 @@
   POD2MAN     = pod2man
   
   PROG = lmtp2nntp
  -HDRS = lmtp2nntp.h lmtp.h nntp.h sa.h argz.h shpat_match.h msg.h trace.h
  -OBJS = lmtp2nntp.o lmtp.o nntp.o sa.o argz.o shpat_match.o msg.o trace.o version.o
  +HDRS = lmtp2nntp.h lmtp.h nntp.h sa.h argz.h shpat_match.h msg.h 
  +OBJS = lmtp2nntp.o lmtp.o nntp.o sa.o argz.o shpat_match.o msg.o version.o
   
   SUBDIRS = @SUBDIR_STR@ @SUBDIR_L2@ 
   
  Index: ossp-pkg/lmtp2nntp/lmtp.c
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 lmtp.c
  --- ossp-pkg/lmtp2nntp/lmtp.c	2001/09/04 09:46:06	1.21
  +++ ossp-pkg/lmtp2nntp/lmtp.c	2001/09/07 15:02:08	1.22
  @@ -70,6 +70,21 @@
       int               wfd;      /* file descriptor for writing */
   };
   
  +static int lmtp_select(void *ctx, int nfds, fd_set *rfds, fd_set *wfds, fd_set *efds, struct timeval *tv)
  +{
  +    return select(nfds, rfds, wfds, efds, tv);
  +}
  +
  +static ssize_t lmtp_read(void *ctx, int fd, void *buf, size_t buflen)
  +{
  +    return read(fd, buf, buflen);
  +}
  +
  +static ssize_t lmtp_write(void *ctx, int fd, const void *buf, size_t buflen)
  +{
  +    return write(fd, buf, buflen);
  +}
  +
   static int verbindex(lmtp_t *lmtp, char *verb)
   {
       /* returns the index of the verb or -1 if verb not registered */
  @@ -110,13 +125,15 @@
           return NULL;
   
       if (io == NULL) {
  -        lmtp->io.select = select;
  -        lmtp->io.read   = read;
  -        lmtp->io.write  = write;
  +        lmtp->io.ctx    = NULL;
  +        lmtp->io.select = lmtp_select;
  +        lmtp->io.read   = lmtp_read;
  +        lmtp->io.write  = lmtp_write;
       } else {
  -        lmtp->io.select = io->select ? io->select : select;
  -        lmtp->io.read   = io->read   ? io->read   : read;
  -        lmtp->io.write  = io->write  ? io->write  : write;
  +        lmtp->io.ctx    = io->ctx;
  +        lmtp->io.select = io->select ? io->select : lmtp_select;
  +        lmtp->io.read   = io->read   ? io->read   : lmtp_read;
  +        lmtp->io.write  = io->write  ? io->write  : lmtp_write;
       }
   
       lmtp->rl.rl_cnt = 0;
  @@ -164,7 +181,7 @@
           /* fetch one character (but read more) */
           if (rl->rl_cnt <= 0) {
               do {
  -                rl->rl_cnt = lmtp->io.read(lmtp->rfd, rl->rl_buf, LMTP_LINE_MAXLEN);
  +                rl->rl_cnt = lmtp->io.read(lmtp->io.ctx, lmtp->rfd, rl->rl_buf, LMTP_LINE_MAXLEN);
               } while (rl->rl_cnt == -1 && errno == EINTR);
               if (rl->rl_cnt == -1)
                   return LMTP_ERR_SYSTEM;
  @@ -353,7 +370,7 @@
           formatbuf[len++] = '\r';
           formatbuf[len++] = '\n';
           do {
  -            rv = lmtp->io.write(lmtp->wfd, formatbuf, len);
  +            rv = lmtp->io.write(lmtp->io.ctx, lmtp->wfd, formatbuf, len);
           } while (rv == -1 && errno == EINTR);
           if (rv == -1)
               return LMTP_ERR_SYSTEM;
  Index: ossp-pkg/lmtp2nntp/lmtp.h
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 lmtp.h
  --- ossp-pkg/lmtp2nntp/lmtp.h	2001/09/04 09:46:06	1.9
  +++ ossp-pkg/lmtp2nntp/lmtp.h	2001/09/07 15:02:08	1.10
  @@ -36,9 +36,10 @@
   typedef struct lmtp_st lmtp_t;
   
   typedef struct {
  -    int     (*select)(int, fd_set *, fd_set *, fd_set *, struct timeval *);
  -    ssize_t (*read)(int, void *, size_t);
  -    ssize_t (*write)(int, const void *, size_t);
  +    void    *ctx;
  +    int     (*select)(void *, int, fd_set *, fd_set *, fd_set *, struct timeval *);
  +    ssize_t (*read)(void *, int, void *, size_t);
  +    ssize_t (*write)(void *, int, const void *, size_t);
   } lmtp_io_t;
   
   typedef struct {
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.43 -r1.44 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/07 13:56:31	1.43
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/07 15:02:08	1.44
  @@ -51,7 +51,6 @@
   #include "nntp.h"
   #include "sa.h"
   #include "msg.h"
  -#include "trace.h"
   #define _VERSION_C_AS_HEADER_
   #include "version.c"
   #undef  _VERSION_C_AS_HEADER_
  @@ -172,6 +171,56 @@
       return;
   }
   
  +static ssize_t trace_lmtp_read(void *_ctx, int d, void *buf, size_t nbytes)
  +{
  +    lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx;
  +    ssize_t rc;
  +
  +    rc = read(d, buf, nbytes);
  +    if (rc == -1)
  +        log0(ctx, TRACE, "LMTP read error: %m");
  +    else
  +        log3(ctx, TRACE, "LMTP %5d << \"%{text}D\"", rc, buf, rc);
  +    return rc;
  +}
  +
  +static ssize_t trace_lmtp_write(void *_ctx, int d, const void *buf, size_t nbytes)
  +{
  +    lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx;
  +    ssize_t rc;
  +
  +    log3(ctx, TRACE, "LMTP %5d >> \"%{text}D\"", nbytes, buf, nbytes);
  +    rc = write(d, buf, nbytes);
  +    if (rc == -1)
  +        log0(ctx, TRACE, "LMTP write error: %m");
  +    return rc;
  +}
  +
  +static ssize_t trace_nntp_read(void *_ctx, int d, void *buf, size_t nbytes)
  +{
  +    lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx;
  +    ssize_t rc;
  +
  +    rc = read(d, buf, nbytes);
  +    if (rc == -1)
  +        log0(ctx, TRACE, "NNTP read error: %m");
  +    else
  +        log3(ctx, TRACE, "NNTP %5d << \"%{text}D\"", rc, buf, rc);
  +    return rc;
  +}
  +
  +static ssize_t trace_nntp_write(void *_ctx, int d, const void *buf, size_t nbytes)
  +{
  +    lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx;
  +    ssize_t rc;
  +
  +    log3(ctx, TRACE, "NNTP %5d >> \"%{text}D\"", nbytes, buf, nbytes);
  +    rc = write(d, buf, nbytes);
  +    if (rc == -1)
  +        log0(ctx, TRACE, "NNTP write error: %m");
  +    return rc;
  +}
  +
   static l2_result_t 
   formatter_prefix(l2_context_t *_ctx, const char id, const char *param,
             char *bufptr, size_t bufsize, size_t *buflen, va_list *ap)
  @@ -455,6 +504,10 @@
           fprintf(stderr, "%s:Error: logging failed to register dump formatter\n", ctx->progname);
           exit(ERR_EXECUTION);
       }
  +    if (l2_stream_formatter(ctx->l2, 'S', l2_util_fmt_string, NULL) != L2_OK) {
  +        fprintf(stderr, "%s:Error: logging failed to register string formatter\n", ctx->progname);
  +        exit(ERR_EXECUTION);
  +    }
       if (l2_stream_formatter(ctx->l2, 'm', formatter_errno, NULL) != L2_OK) {
           fprintf(stderr, "%s:Error: logging failed to register dump formatter\n", ctx->progname);
           exit(ERR_EXECUTION);
  @@ -516,15 +569,11 @@
           exit(ERR_EXECUTION);
       }
   
  -    if (ctx->option_logfile && (ctx->option_levelmask >= L2_LEVEL_TRACE)) {
  -        trace_read (-1, ctx->option_logfile, 0);
  -        trace_write(-1, ctx->option_logfile, 0);
  -    }
  -
       /* initialize LMTP context */
  +    lmtp_io.ctx    = ctx;
       lmtp_io.select = NULL;
  -    lmtp_io.read   = trace_read;
  -    lmtp_io.write  = trace_write;
  +    lmtp_io.read   = trace_lmtp_read;
  +    lmtp_io.write  = trace_lmtp_write;
       if ((lmtp = lmtp_create(STDIN_FILENO, STDOUT_FILENO,
                               (ctx->option_logfile && (ctx->option_levelmask >= L2_LEVEL_TRACE)) ?
                                &lmtp_io : NULL )) == NULL) {
  @@ -678,9 +727,10 @@
   
       log0(ctx, INFO, "lmtp_cb_lhlo");
   
  +    nntp_io.ctx    = ctx;
       nntp_io.select = NULL;
  -    nntp_io.read   = trace_read;
  -    nntp_io.write  = trace_write;
  +    nntp_io.read   = trace_nntp_read;
  +    nntp_io.write  = trace_nntp_write;
   
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   503 Bad sequence of commands
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 lmtp2nntp.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.h	2001/09/07 13:53:16	1.1
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.h	2001/09/07 15:02:08	1.2
  @@ -27,6 +27,13 @@
   #ifndef __LMTP2NNTP_H__
   #define __LMTP2NNTP_H__
   
  +#ifdef HAVE_CONFIG_H
  +#include "config.h"
  +#endif
  +#if defined(HAVE_DMALLOC_H) && defined(DMALLOC)
  +#include "dmalloc.h"
  +#endif
  +
   #define log0(ctx,level,msg) \
       l2_stream_log((ctx)->l2, L2_LEVEL_##level, "%P: " msg)
   #define log1(ctx,level,msg,a1) \
  Index: ossp-pkg/lmtp2nntp/nntp.c
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 nntp.c
  --- ossp-pkg/lmtp2nntp/nntp.c	2001/09/04 09:46:06	1.20
  +++ ossp-pkg/lmtp2nntp/nntp.c	2001/09/07 15:02:08	1.21
  @@ -72,6 +72,21 @@
       int             kludgeinn441dup;
   };
   
  +static int nntp_select(void *ctx, int nfds, fd_set *rfds, fd_set *wfds, fd_set *efds, struct timeval *tv)
  +{
  +    return select(nfds, rfds, wfds, efds, tv);
  +}
  +
  +static ssize_t nntp_read(void *ctx, int fd, void *buf, size_t buflen)
  +{
  +    return read(fd, buf, buflen);
  +}
  +
  +static ssize_t nntp_write(void *ctx, int fd, const void *buf, size_t buflen)
  +{
  +    return write(fd, buf, buflen);
  +}
  +
   nntp_t *nntp_create(int rfd, int wfd, nntp_io_t *io)
   {
       nntp_t *nntp;
  @@ -80,13 +95,15 @@
           return NULL;
   
       if (io == NULL) {
  -        nntp->io.select = select;
  -        nntp->io.read   = read;
  -        nntp->io.write  = write;
  +        nntp->io.ctx    = NULL;
  +        nntp->io.select = nntp_select;
  +        nntp->io.read   = nntp_read;
  +        nntp->io.write  = nntp_write;
       } else {
  -        nntp->io.select = io->select ? io->select : select;
  -        nntp->io.read   = io->read   ? io->read   : read;
  -        nntp->io.write  = io->write  ? io->write  : write;
  +        nntp->io.ctx    = io->ctx;
  +        nntp->io.select = io->select ? io->select : nntp_select;
  +        nntp->io.read   = io->read   ? io->read   : nntp_read;
  +        nntp->io.write  = io->write  ? io->write  : nntp_write;
       }
   
       nntp->rfd = rfd;
  @@ -180,13 +197,13 @@
               FD_SET(nntp->rfd, &fds);
               tv.tv_sec  = nntp->tv.tv_sec;
               tv.tv_usec = nntp->tv.tv_usec;
  -            rc = nntp->io.select(nntp->rfd + 1, &fds, NULL, NULL, &tv);
  +            rc = nntp->io.select(nntp->io.ctx, nntp->rfd + 1, &fds, NULL, NULL, &tv);
               if (rc == 0)
                   return NNTP_TIMEOUT;
               else if (rc == -1)
                   return NNTP_ERR_SYSTEM;
               do {
  -                rl->rl_cnt = nntp->io.read(nntp->rfd, rl->rl_buf, NNTP_LINE_MAXLEN);
  +                rl->rl_cnt = nntp->io.read(nntp->io.ctx, nntp->rfd, rl->rl_buf, NNTP_LINE_MAXLEN);
               } while (rl->rl_cnt == -1 && errno == EINTR);
               if (rl->rl_cnt == -1)
                   return NNTP_ERR_SYSTEM;
  @@ -219,7 +236,7 @@
           return NNTP_ERR_ARG;
       strncpy(tmp, buf, NNTP_LINE_MAXLEN-3);
       strcat(tmp, "\r\n");
  -    if (nntp->io.write(nntp->wfd, tmp, strlen(tmp)) < 0)
  +    if (nntp->io.write(nntp->io.ctx, nntp->wfd, tmp, strlen(tmp)) < 0)
           return NNTP_ERR_SYSTEM;
       return NNTP_OK;
   }
  @@ -334,7 +351,7 @@
           return NNTP_ERR_POST;
   
       do {
  -        rc = nntp->io.write(nntp->wfd, msg->cpMsg, strlen(msg->cpMsg));
  +        rc = nntp->io.write(nntp->io.ctx, nntp->wfd, msg->cpMsg, strlen(msg->cpMsg));
       } while (rc == -1 && errno == EINTR);
       if (rc == -1)
           return NNTP_ERR_SYSTEM;
  @@ -410,7 +427,7 @@
           return NNTP_ERR_POST;
   
       do {
  -        rc = nntp->io.write(nntp->wfd, msg->cpMsg, strlen(msg->cpMsg));
  +        rc = nntp->io.write(nntp->io.ctx, nntp->wfd, msg->cpMsg, strlen(msg->cpMsg));
       } while (rc == -1 && errno == EINTR);
       if (rc == -1)
           return NNTP_ERR_SYSTEM;
  Index: ossp-pkg/lmtp2nntp/nntp.h
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 nntp.h
  --- ossp-pkg/lmtp2nntp/nntp.h	2001/09/04 09:46:06	1.8
  +++ ossp-pkg/lmtp2nntp/nntp.h	2001/09/07 15:02:08	1.9
  @@ -37,9 +37,10 @@
   typedef struct nntp_st nntp_t;
   
   typedef struct {
  -    int     (*select)(int, fd_set *, fd_set *, fd_set *, struct timeval *);
  -    ssize_t (*read)(int, void *, size_t);
  -    ssize_t (*write)(int, const void *, size_t);
  +    void    *ctx;
  +    int     (*select)(void *, int, fd_set *, fd_set *, fd_set *, struct timeval *);
  +    ssize_t (*read)(void *, int, void *, size_t);
  +    ssize_t (*write)(void *, int, const void *, size_t);
   } nntp_io_t;
   
   typedef enum {
    

From ossp-cvs-owner@ossp.org  Sat Sep  8 13:07:52 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f88B7pQ34734; Sat, 8 Sep 2001 13:07:51 +0200 (CEST)
Date: Sat, 8 Sep 2001 13:07:51 +0200 (CEST)
Message-Id: <200109081107.f88B7pQ34734@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_fd.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   08-Sep-2001 13:07:51
  Branch: HEAD                             Handle: 2001090812075100

  Modified files:
    ossp-pkg/l2             l2_ch_fd.c

  Log:
    remove ununsed variable

  Summary:
    Revision    Changes     Path
    1.9         +0  -1      ossp-pkg/l2/l2_ch_fd.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_fd.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 l2_ch_fd.c
  --- ossp-pkg/l2/l2_ch_fd.c	2001/09/06 19:27:02	1.8
  +++ ossp-pkg/l2/l2_ch_fd.c	2001/09/08 11:07:51	1.9
  @@ -76,7 +76,6 @@
   static l2_result_t hook_open(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_file_t *cfg;
  -    int mode;
   
       /* parameter checks */
       if ((cfg = (l2_ch_file_t *)ctx->vp) == NULL)

From ossp-cvs-owner@ossp.org  Sat Sep  8 13:25:31 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f88BPU736772; Sat, 8 Sep 2001 13:25:30 +0200 (CEST)
Date: Sat, 8 Sep 2001 13:25:30 +0200 (CEST)
Message-Id: <200109081125.f88BPU736772@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   08-Sep-2001 13:25:30
  Branch: HEAD                             Handle: 2001090812252900

  Modified files:
    ossp-pkg/l2             l2_test.c

  Log:
    do not use C++ comments

  Summary:
    Revision    Changes     Path
    1.15        +3  -3      ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/09/06 19:29:44	1.14
  +++ ossp-pkg/l2/l2_test.c	2001/09/08 11:25:29	1.15
  @@ -85,9 +85,9 @@
           IPPROTO_UDP, AF_INET, "localhost", 2002) != L2_OK)
           die("failed to configure socket ipv4 channel");
   
  -//    if (l2_channel_configure(chSock, "protocol,ipversion,host,port",\
  -//        IPPROTO_TCP, AF_INET6, "0:0:0:0:0:0:0:1", 2002) != L2_OK)
  -//        die("failed to configure socket ipv6 channel");
  +/*    if (l2_channel_configure(chSock, "protocol,ipversion,host,port",\
  +          IPPROTO_TCP, AF_INET6, "0:0:0:0:0:0:0:1", 2002) != L2_OK)
  +          die("failed to configure socket ipv6 channel"); */
   
       if (l2_channel_open(chSock) != L2_OK)
           die("failed to open socket channel");

From ossp-cvs-owner@ossp.org  Sat Sep  8 23:05:00 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f88L4xn03640; Sat, 8 Sep 2001 23:04:59 +0200 (CEST)
Date: Sat, 8 Sep 2001 23:04:59 +0200 (CEST)
Message-Id: <200109082104.f88L4xn03640@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 README l2_version.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   08-Sep-2001 23:04:59
  Branch: HEAD                             Handle: 2001090822045800

  Modified files:
    ossp-pkg/l2             README l2_version.c

  Log:
    regenerate l2_version.c with correct prefix

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/l2/README
    1.2         +8  -8      ossp-pkg/l2/l2_version.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/README
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 README
  --- ossp-pkg/l2/README	2001/08/14 14:43:29	1.2
  +++ ossp-pkg/l2/README	2001/09/08 21:04:58	1.3
  @@ -5,7 +5,7 @@
     |_____|_____|
                  
     L2 - Logging Library
  -  Version 0.1.0 (14-Jul-2000)
  +  Version 0.1.0 (08-Sep-2001)
   
     ABSTRACT
   
  Index: ossp-pkg/l2/l2_version.c
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 l2_version.c
  --- ossp-pkg/l2/l2_version.c	2001/05/10 19:46:01	1.1.1.1
  +++ ossp-pkg/l2/l2_version.c	2001/09/08 21:04:58	1.2
  @@ -19,9 +19,9 @@
       const char *v_web;
       const char *v_sccs;
       const char *v_rcs;
  -} L2_version_t;
  +} l2_version_t;
   
  -extern L2_version_t L2_version;
  +extern l2_version_t l2_version;
   
   #endif /* _L2_VERSION_C_ */
   
  @@ -31,15 +31,15 @@
   #include "l2_version.c"
   #undef  _L2_VERSION_C_AS_HEADER_
   
  -L2_version_t L2_version = {
  +l2_version_t l2_version = {
       0x001200,
       "0.1.0",
  -    "0.1.0 (08-May-2001)",
  -    "This is L2, Version 0.1.0 (08-May-2001)",
  -    "L2 0.1.0 (08-May-2001)",
  +    "0.1.0 (08-Sep-2001)",
  +    "This is L2, Version 0.1.0 (08-Sep-2001)",
  +    "L2 0.1.0 (08-Sep-2001)",
       "L2/0.1.0",
  -    "@(#)L2 0.1.0 (08-May-2001)",
  -    "$Id: l2_version.c,v 1.1.1.1 2001/05/10 19:46:01 rse Exp $"
  +    "@(#)L2 0.1.0 (08-Sep-2001)",
  +    "$Id: l2_version.c,v 1.2 2001/09/08 21:04:58 rse Exp $"
   };
   
   #endif /* _L2_VERSION_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Sun Sep  9 00:05:47 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f88M5l512820; Sun, 9 Sep 2001 00:05:47 +0200 (CEST)
Date: Sun, 9 Sep 2001 00:05:47 +0200 (CEST)
Message-Id: <200109082205.f88M5l512820@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ut_sa.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Sep-2001 00:05:46
  Branch: HEAD                             Handle: 2001090823054600

  Modified files:
    ossp-pkg/l2             l2_ut_sa.c

  Log:
    fix function name

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/l2/l2_ut_sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ut_sa.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 l2_ut_sa.c
  --- ossp-pkg/l2/l2_ut_sa.c	2001/09/07 10:25:56	1.3
  +++ ossp-pkg/l2/l2_ut_sa.c	2001/09/08 22:05:46	1.4
  @@ -204,7 +204,7 @@
       return rc;
   }
   
  -void l2_ut_sa_destroy(l2_util_sa_t *sa)
  +void l2_util_sa_destroy(l2_util_sa_t *sa)
   {
       if (sa == NULL)
           return;

From ossp-cvs-owner@ossp.org  Sun Sep  9 00:06:10 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f88M6AK12878; Sun, 9 Sep 2001 00:06:10 +0200 (CEST)
Date: Sun, 9 Sep 2001 00:06:10 +0200 (CEST)
Message-Id: <200109082206.f88M6AK12878@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ut_param.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Sep-2001 00:06:10
  Branch: HEAD                             Handle: 2001090823060900

  Modified files:
    ossp-pkg/l2             l2_ut_param.c

  Log:
    fix memory leak for string parameters

  Summary:
    Revision    Changes     Path
    1.5         +2  -0      ossp-pkg/l2/l2_ut_param.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ut_param.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 l2_ut_param.c
  --- ossp-pkg/l2/l2_ut_param.c	2001/09/06 14:37:53	1.4
  +++ ossp-pkg/l2/l2_ut_param.c	2001/09/08 22:06:09	1.5
  @@ -86,6 +86,8 @@
                           *(double *)(pa[i].store) = va_get(ap, double); 
                           break;
                       case L2_TYPE_STRING:
  +                        if (*(char **)(pa[i].store) != NULL) 
  +                            free(*(char **)(pa[i].store));
                           *(char **)(pa[i].store) = va_get(ap, charptr);
                           if (*(char **)(pa[i].store) != NULL)
                               *(char **)(pa[i].store) = strdup(*(char **)(pa[i].store));

From ossp-cvs-owner@ossp.org  Sun Sep  9 00:06:56 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f88M6tY12961; Sun, 9 Sep 2001 00:06:55 +0200 (CEST)
Date: Sun, 9 Sep 2001 00:06:55 +0200 (CEST)
Message-Id: <200109082206.f88M6tY12961@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ut_format.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Sep-2001 00:06:55
  Branch: HEAD                             Handle: 2001090823065400

  Modified files:
    ossp-pkg/l2             l2_ut_format.c

  Log:
    Ops, endless recursion! Use friend function instead our own, of course.

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/l2/l2_ut_format.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ut_format.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2_ut_format.c
  --- ossp-pkg/l2/l2_ut_format.c	2001/09/06 14:37:53	1.2
  +++ ossp-pkg/l2/l2_ut_format.c	2001/09/08 22:06:54	1.3
  @@ -1160,7 +1160,7 @@
       char *rv;
   
       va_start(ap, fmt);
  -    rv = l2_util_asprintf(fmt, ap);
  +    rv = l2_util_vasprintf(fmt, ap);
       va_end(ap);
       return rv;
   }

From ossp-cvs-owner@ossp.org  Sun Sep  9 17:42:26 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f89FgPK33825; Sun, 9 Sep 2001 17:42:25 +0200 (CEST)
Date: Sun, 9 Sep 2001 17:42:25 +0200 (CEST)
Message-Id: <200109091542.f89FgPK33825@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 Makefile.in l2_p.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Sep-2001 17:42:25
  Branch: HEAD                             Handle: 2001090916422500

  Modified files:
    ossp-pkg/l2             Makefile.in l2_p.h

  Log:
    make sure the version is available internally

  Summary:
    Revision    Changes     Path
    1.18        +2  -1      ossp-pkg/l2/Makefile.in
    1.13        +4  -0      ossp-pkg/l2/l2_p.h
  ____________________________________________________________________________

  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 Makefile.in
  --- ossp-pkg/l2/Makefile.in	2001/09/06 16:28:38	1.17
  +++ ossp-pkg/l2/Makefile.in	2001/09/09 15:42:25	1.18
  @@ -79,7 +79,8 @@
       l2_ut_pcre.lo \
       l2_ut_level.lo \
       l2_ut_fmtcb.lo \
  -    l2_ut_sa.lo
  +    l2_ut_sa.lo \
  +    l2_version.lo
   
   #   file containing the official version information
   _VERSION_FILE = \
  Index: ossp-pkg/l2/l2_p.h
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 l2_p.h
  --- ossp-pkg/l2/l2_p.h	2001/09/06 16:28:38	1.12
  +++ ossp-pkg/l2/l2_p.h	2001/09/09 15:42:25	1.13
  @@ -36,6 +36,10 @@
   #include "l2_ut_pcre.h"
   #include "l2_ut_sa.h"
   
  +#define _L2_VERSION_C_AS_HEADER_
  +#include "l2_version.c"
  +#undef  _L2_VERSION_C_AS_HEADER_
  +
   #define L2_MAX_MSGSIZE    4096
   #define L2_MAX_CHANNELS    128
   #define L2_MAX_FORMATTERS  128

From ossp-cvs-owner@ossp.org  Sun Sep  9 17:54:33 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f89FsWL35197; Sun, 9 Sep 2001 17:54:32 +0200 (CEST)
Date: Sun, 9 Sep 2001 17:54:32 +0200 (CEST)
Message-Id: <200109091554.f89FsWL35197@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ut_sa.c l2_ut_sa.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Sep-2001 17:54:32
  Branch: HEAD                             Handle: 2001090916543100

  Modified files:
    ossp-pkg/l2             l2_ut_sa.c l2_ut_sa.h

  Log:
    Whohoooooo! The first cut for a Socket Abstraction (SA) library. Later
    it should be moved to its own source tree because it should be a highly
    reusable library, but until it proofed to be the way we want it, let's
    stay in L2.
    
    This beast allows us to greatly simplify socket handling, because it
    provides bi-directional socket address conversions (between URIs or
    "struct sockaddr *" to "sa_addr_t *"), read/write buffering support
    (readline!) and timeout support (for connect, read, write, etc.).

  Summary:
    Revision    Changes     Path
    1.5         +671 -96    ossp-pkg/l2/l2_ut_sa.c
    1.3         +43 -16     ossp-pkg/l2/l2_ut_sa.h
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ut_sa.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 l2_ut_sa.c
  --- ossp-pkg/l2/l2_ut_sa.c	2001/09/08 22:05:46	1.4
  +++ ossp-pkg/l2/l2_ut_sa.c	2001/09/09 15:54:31	1.5
  @@ -24,9 +24,10 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  l2_ut_sa.c: utility library for socket address handling
  +**  l2_ut_sa.c: socket abstraction library
   */
   
  +/* system headers */
   #include <stdio.h>
   #include <stdlib.h>
   #include <stdarg.h>
  @@ -34,6 +35,9 @@
   #include <unistd.h>
   #include <ctype.h>
   #include <errno.h>
  +#include <fcntl.h>
  +#include <time.h>
  +#include <sys/time.h>
   #include <netdb.h>
   #include <sys/types.h>
   #include <sys/un.h>
  @@ -41,15 +45,24 @@
   #include <sys/socket.h>
   #include <arpa/inet.h>
   
  +/* own headers */
   #include "l2_config.h"
   #include "l2_ut_sa.h"
   
  +struct sa_addr_st {
  +    struct sockaddr *saa_buf;
  +    socklen_t        saa_len;
  +    int              saa_family;
  +    int              saa_proto;
  +};
  +
   #if !defined(AF_LOCAL) && defined(AF_UNIX)
   #define AF_LOCAL AF_UNIX
   #endif
   
  -#ifndef HAVE_INET_PTON
  -#ifdef HAVE_INET_ATON
  +#if defined(HAVE_INET_PTON)
  +#define sa_inet_pton inet_pton
  +#elif defined(HAVE_INET_ATON)
   static int inet_pton(int family, const char *strptr, void *addrptr)
   {
       struct in_addr in_val;
  @@ -67,16 +80,69 @@
   #else
   #error "neither inet_pton nor inet_aton available"
   #endif
  +
  +#if defined(HAVE_INET_NTOP)
  +#define sa_inet_ntop inet_ntop
  +#elif defined(HAVE_INET_NTOA)
  +static char *inet_ntop(int family, const void *src, char *dst, size_t size)
  +{
  +    struct in_addr in_val;
  +    char *cp;
  +    int n;
  +
  +    if (family == AF_INET) {
  +        if ((cp = inet_ntoa(src)) != NULL) {
  +            n = strlen(cp);
  +            if (n > size-1)
  +                n = size-1;
  +            memcpy(dst, cp, n);
  +            dst[n] = '\0';
  +            return 1;
  +        }
  +        return 0;
  +    }
  +    errno = EAFNOSUPPORT;
  +    return -1;
  +}
  +#else
  +#error "neither inet_ntop nor inet_ntoa available"
  +#endif
  +
  +#if defined(HAVE_VSNPRINTF)
  +#define sa_vsnprintf vsnprintf
  +#elif defined(HAVE_VSPRINTF)
  +static int sa_vsnprintf(char *str, size_t size, const char *fmt, va_list ap)
  +{
  +    int rv;
  +    
  +    rv = vsprintf(str, fmt, ap);
  +    if (rv > size) {
  +        fprintf(stderr, "ERROR: vsprintf(3) buffer overflow!\n");
  +        abort();
  +    }
  +}
  +#else
  +#error "neither vsnprintf nor vsprintf available"
   #endif
   
  -#ifndef NUL
  -#define NUL '\0'
  +#if defined(HAVE_SNPRINTF)
  +#define sa_snprintf snprintf
  +#else
  +static int sa_snprintf(char *str, size_t size, const char *fmt, ...)
  +{
  +    va_list ap;
  +    int rv;
  +
  +    va_start(ap, fmt);
  +    rv = sa_vsnprintf(str, size, fmt, ap);
  +    va_end(ap);
  +    return rv;
  +}
   #endif
   
  -l2_util_sa_t *l2_util_sa_create(int sa_type, ...)
  +sa_rc_t sa_u2a(sa_addr_t **saa, const char *uri, ...)
   {
       va_list ap;
  -    l2_util_sa_t *rc;
       int nPort;
       socklen_t sl;
       struct sockaddr *sa;
  @@ -84,135 +150,644 @@
   #ifdef AF_INET6
       struct sockaddr_in6 sa6;
   #endif
  -    struct sockaddr_un sau;
       struct hostent *he;
       struct servent *se;
       struct protoent *pe;
       int bNumeric;
       int i;
  -    char *cpPath;
  -    int   nPath;
       char *cpProto;
       int   nProto;
       char *cpHost;
       char *cpPort;
  +    char uribuf[1024];
  +    char *cp;
  +    int sf;
  +
  +    if (saa == NULL || uri == NULL)
  +        return SA_ERR_ARG;
  +
  +    /* create or just take over URI */
  +    va_start(ap, uri);
  +    sa_vsnprintf(uribuf, sizeof(uribuf), uri, ap);
  +    va_end(ap);
   
  -    va_start(ap, sa_type);
  -    sa = NULL;
  -    sl = 0;
  -    if (sa_type == L2_UTIL_SA_UNIX) {
  -#if defined(AF_LOCAL)
  -        if ((cpPath = va_arg(ap, char *)) == NULL)
  -            return NULL;
  -        if ((nPath = strlen(cpPath)) >= (sizeof(sau.sun_path)-1))
  -            return NULL;
  -        nProto = 0;
  -        memset(&sau, 0, sizeof(sau));
  -        sau.sun_family = AF_LOCAL;
  -        memcpy(sau.sun_path, cpPath, nPath + 1);
  -        sa = (struct sockaddr *)&sau;
  -        sl = sizeof(sau);
  -#else
  -        return NULL;
  -#endif
  +    /* parse URI into protocol, host and port parts */
  +    uri = uribuf;
  +    cpProto = "tcp";
  +    if ((cp = strstr(uri, "://")) != NULL) {
  +        cpProto = (char *)uri;
  +        *cp = '\0';
  +        uri = cp+3;
       }
  -    else if (sa_type == L2_UTIL_SA_IP) {
  -        if ((cpProto = va_arg(ap, char *)) == NULL)
  -            return NULL;
  -        if ((cpHost = va_arg(ap, char *)) == NULL)
  -            return NULL;
  -        if ((cpPort = va_arg(ap, char *)) == NULL)
  -            return NULL;
  -
  -        /* resolve protocol */
  -        if ((pe = getprotobyname(cpProto)) == NULL)
  -            return NULL;
  -        nProto = pe->p_proto;
  -
  -        /* resolve port */
  -        bNumeric = 1;
  -        for (i = 0; cpPort[i] != NUL; i++) {
  -            if (!isdigit((int)cpPort[i])) {
  -                bNumeric = 0;
  -                break;
  -            }
  +    cpHost = (char *)uri;
  +    if ((cp = strchr(uri, ':')) == NULL)
  +        return SA_ERR_ARG;
  +    *cp++ = '\0';
  +    cpPort = cp;
  +
  +    /* resolve protocol */
  +    if ((pe = getprotobyname(cpProto)) == NULL)
  +        return SA_ERR_SYS;
  +    nProto = pe->p_proto;
  +
  +    /* resolve port */
  +    bNumeric = 1;
  +    for (i = 0; cpPort[i] != '\0'; i++) {
  +        if (!isdigit((int)cpPort[i])) {
  +            bNumeric = 0;
  +            break;
           }
  -        if (bNumeric)
  -            nPort = atoi(cpPort);
  -        else {
  -            if ((se = getservbyname(cpPort, cpProto)) == NULL)
  -                return NULL;
  -            nPort = ntohs(se->s_port);
  -        }
  +    }
  +    if (bNumeric)
  +        nPort = atoi(cpPort);
  +    else {
  +        if ((se = getservbyname(cpPort, cpProto)) == NULL)
  +            return SA_ERR_SYS;
  +        nPort = ntohs(se->s_port);
  +    }
   
  -        /* mandatory initialization */
  -        memset(&sa4, 0, sizeof(sa4));
  +    /* mandatory(!) socket address structure initialization */
  +    memset(&sa4, 0, sizeof(sa4));
   #ifdef AF_INET6
  -        memset(&sa6, 0, sizeof(sa6));
  +    memset(&sa6, 0, sizeof(sa6));
   #endif
  -        /* resolve host */
  -        if (inet_pton(AF_INET, cpHost, &sa4.sin_addr.s_addr) == 1) {
  +
  +    /* resolve host by trying to parse it as either directly a IPv4 or
  +       IPv6 address or by resolving it to either a IPv4 or IPv6 address */
  +    sa = NULL;
  +    sl = 0;
  +    sf = 0;
  +    if (inet_pton(AF_INET, cpHost, &sa4.sin_addr.s_addr) == 1) {
  +        sa4.sin_family = AF_INET;
  +        sa4.sin_port = htons(nPort);
  +        sa = (struct sockaddr *)&sa4;
  +        sl = sizeof(sa4);
  +        sf = AF_INET;
  +    }
  +#ifdef AF_INET6
  +    else if (inet_pton(AF_INET6, cpHost, &sa6.sin6_addr.s6_addr) == 1) {
  +        sa6.sin6_family = AF_INET6;
  +        sa6.sin6_port = htons(nPort);
  +        sa = (struct sockaddr *)&sa6;
  +        sl = sizeof(sa6);
  +        sf = AF_INET6;
  +    }
  +#endif
  +    else if ((he = gethostbyname(cpHost)) != NULL) {
  +        if (he->h_addrtype == AF_INET) {
               sa4.sin_family = AF_INET;
               sa4.sin_port = htons(nPort);
  +            memcpy(&sa4.sin_addr.s_addr, he->h_addr_list[0], sizeof(sa4.sin_addr.s_addr));
               sa = (struct sockaddr *)&sa4;
               sl = sizeof(sa4);
  +            sf = AF_INET;
           }
   #ifdef AF_INET6
  -        else if (inet_pton(AF_INET6, cpHost, &sa6.sin6_addr.s6_addr) == 1) {
  +        else if (he->h_addrtype == AF_INET6) {
               sa6.sin6_family = AF_INET6;
               sa6.sin6_port = htons(nPort);
  +            memcpy(&sa6.sin6_addr.s6_addr, he->h_addr_list[0], sizeof(sa6.sin6_addr.s6_addr));
               sa = (struct sockaddr *)&sa6;
               sl = sizeof(sa6);
  +            sf = AF_INET6;
           }
   #endif
  -        else if ((he = gethostbyname(cpHost)) != NULL) {
  -            if (he->h_addrtype == AF_INET) {
  -                sa4.sin_family = AF_INET;
  -                sa4.sin_port = htons(nPort);
  -                memcpy(&sa4.sin_addr.s_addr, he->h_addr_list[0], sizeof(sa4.sin_addr.s_addr));
  -                sa = (struct sockaddr *)&sa4;
  -                sl = sizeof(sa4);
  -            }
  +    }
  +    if (sa == NULL)
  +        return SA_ERR_ARG;
  +        
  +    /* create result address structure */
  +    if ((*saa = (sa_addr_t *)malloc(sizeof(sa_addr_t))) == NULL)
  +        return SA_ERR_MEM;
  +    if (((*saa)->saa_buf = (struct sockaddr *)malloc(sl)) == NULL) {
  +        free(*saa);
  +        return SA_ERR_MEM;
  +    }
  +    memcpy((*saa)->saa_buf, sa, sl);
  +    (*saa)->saa_len = sl;
  +    (*saa)->saa_family = sf;
  +    (*saa)->saa_proto = nProto;
  +    return SA_OK;
  +}
  +
  +sa_rc_t sa_s2a(sa_addr_t **saa, const struct sockaddr *sabuf, socklen_t salen)
  +{
  +    struct sockaddr_in *sa4;
   #ifdef AF_INET6
  -            else if (he->h_addrtype == AF_INET6) {
  -                sa6.sin6_family = AF_INET6;
  -                sa6.sin6_port = htons(nPort);
  -                memcpy(&sa6.sin6_addr.s6_addr, he->h_addr_list[0], sizeof(sa6.sin6_addr.s6_addr));
  -                sa = (struct sockaddr *)&sa6;
  -                sl = sizeof(sa6);
  -            }
  +    struct sockaddr_in6 *sa6;
   #endif
  -        }
  +    struct protoent *pe;
  +    int sf;
  +
  +    if (saa == NULL || sabuf == NULL || salen == 0)
  +        return SA_ERR_ARG;
  +
  +    /* create result address structure */
  +    if ((*saa = (sa_addr_t *)malloc(sizeof(sa_addr_t))) == NULL)
  +        return SA_ERR_MEM;
  +    if (((*saa)->saa_buf = (struct sockaddr *)malloc(salen)) == NULL) {
  +        free(*saa);
  +        return SA_ERR_MEM;
       }
  +    memcpy((*saa)->saa_buf, sabuf, salen);
  +    (*saa)->saa_len = salen;
  +
  +    /* fill in family */
  +    sf = 0;
  +    if (sizeof(struct sockaddr_in) == salen) {
  +        sa4 = (struct sockaddr_in *)sabuf;
  +        if (sa4->sin_family == AF_INET)
  +            sf = AF_INET;
  +    }
  +#ifdef AF_INET6
  +    else if (sizeof(struct sockaddr_in6) == salen) {
  +        sa6 = (struct sockaddr_in6 *)sabuf;
  +        if (sa6->sin6_family == AF_INET6)
  +            sf = AF_INET6;
  +    }
  +#endif
  +    (*saa)->saa_family = sf;
  +
  +    /* fill in protocol */
  +    if ((pe = getprotobyname("tcp")) != NULL)
  +        (*saa)->saa_proto = pe->p_proto;
       else
  -        return NULL;
  -    va_end(ap);
  +        (*saa)->saa_proto = 0;
  +    return SA_OK;
  +}
   
  -    if (sa == NULL)
  -        return NULL;
  -        
  -    if ((rc = (l2_util_sa_t *)malloc(sizeof(l2_util_sa_t))) == NULL)
  -        return NULL;
  -    if ((rc->sa_buf = (struct sockaddr *)malloc(sl)) == NULL) {
  -        free(rc);
  -        return NULL;
  +sa_rc_t sa_a2u(const sa_addr_t *saa, char **uri)
  +{
  +    char uribuf[1024];
  +    struct protoent *pe;
  +    struct sockaddr_in *sa4;
  +#ifdef AF_INET6
  +    struct sockaddr_in6 *sa6;
  +#endif
  +    char caHost[512];
  +    int nPort;
  +
  +    if (saa == NULL || uri == NULL)
  +        return SA_ERR_ARG;
  +    if ((pe = getprotobynumber(saa->saa_proto)) == NULL)
  +        return SA_ERR_SYS;
  +    if (saa->saa_family == AF_INET) {
  +        sa4 = (struct sockaddr_in *)saa->saa_buf;
  +        inet_ntop(AF_INET, &sa4->sin_addr.s_addr, caHost, sizeof(caHost));
  +        nPort = ntohs(sa4->sin_port);
       }
  -    memcpy(rc->sa_buf, sa, sl);
  -    rc->sa_len = sl;
  -    rc->sa_proto = nProto;
  +#ifdef AF_INET6
  +    else if (saa->saa_family == AF_INET6) {
  +        sa6 = (struct sockaddr_in6 *)saa->saa_buf;
  +        inet_ntop(AF_INET6, &sa6->sin6_addr.s6_addr, caHost, sizeof(caHost));
  +        nPort = ntohs(sa6->sin6_port);
  +    }
  +#endif
  +    else
  +        return SA_ERR_ARG;
  +    sa_snprintf(uribuf, sizeof(uribuf), "%s://%s:%d", pe->p_name, caHost, nPort);
  +    *uri = strdup(uribuf);
  +    return SA_OK;
  +}
  +
  +sa_rc_t sa_a2s(const sa_addr_t *saa, struct sockaddr **sabuf, socklen_t *salen)
  +{
  +    if (saa == NULL || sabuf == NULL || salen == 0)
  +        return SA_ERR_ARG;
   
  -    return rc;
  +    if ((*sabuf = (struct sockaddr *)malloc(saa->saa_len)) == NULL)
  +        return SA_ERR_MEM;
  +    memmove(*sabuf, saa->saa_buf, saa->saa_len);
  +    *salen = saa->saa_len;
  +    return SA_OK;
   }
   
  -void l2_util_sa_destroy(l2_util_sa_t *sa)
  +struct sa_st {
  +    int   sSocket;
  +    int   bTimeout;
  +    struct timeval tvTimeout;
  +    int   nReadLen;
  +    int   nReadSize;
  +    char *cpReadBuf;
  +    int   nWriteLen;
  +    int   nWriteSize;
  +    char *cpWriteBuf;
  +};
  +
  +static sa_rc_t sa_socket_init(sa_t *sa, int family, int proto)
   {
       if (sa == NULL)
  -        return;
  +        return SA_ERR_ARG;
  +    if (sa->sSocket != -1)
  +        return SA_ERR_USE;
  +    if ((sa->sSocket = socket(family, SOCK_STREAM, proto)) == -1)
  +        return SA_ERR_SYS;
  +    return SA_OK;
  +}
  +
  +static sa_rc_t sa_socket_kill(sa_t *sa)
  +{
  +    if (sa == NULL)
  +        return SA_ERR_ARG;
  +    if (sa->sSocket == -1) {
  +        close(sa->sSocket);
  +        sa->sSocket = -1;
  +    }
  +    return SA_OK;
  +}
  +
  +sa_rc_t sa_create(sa_t **sap)
  +{
  +    sa_t *sa;
   
  -    if (sa->sa_buf != NULL)
  -        free(sa->sa_buf);
  +    if ((sa = (sa_t *)malloc(sizeof(sa_t))) == NULL)
  +        return SA_ERR_MEM;
  +    sa->sSocket    = -1;
  +    sa->bTimeout   = 0;
  +    sa->nReadLen   = 0;
  +    sa->nReadSize  = 1024;
  +    if ((sa->cpReadBuf = (char *)malloc(sa->nReadSize)) == NULL) {
  +        free(sa);
  +        return SA_ERR_MEM;
  +    }
  +    sa->nWriteLen  = 0;
  +    sa->nWriteSize = 1024;
  +    if ((sa->cpWriteBuf = (char *)malloc(sa->nWriteSize)) == NULL) {
  +        free(sa->cpReadBuf);
  +        free(sa);
  +        return SA_ERR_MEM;
  +    }
  +    *sap = sa;
  +    return SA_OK;
  +}
  +
  +sa_rc_t sa_destroy(sa_t *sa)
  +{
  +    if (sa == NULL)
  +        return SA_ERR_ARG;
  +    sa_socket_kill(sa);
  +    if (sa->cpReadBuf != NULL)
  +        free(sa->cpReadBuf);
  +    if (sa->cpWriteBuf != NULL)
  +        free(sa->cpWriteBuf);
       free(sa);
  +    return SA_OK;
  +}
  +
  +sa_rc_t sa_timeout(sa_t *sa, long sec, long usec)
  +{
  +    if (sa == NULL)
  +        return SA_ERR_ARG;
  +    if (sec == 0 && usec == 0) {
  +        sa->bTimeout = 0;
  +        sa->tvTimeout.tv_sec  = 0;
  +        sa->tvTimeout.tv_usec = 0;
  +    }
  +    else {
  +        sa->bTimeout = 1;
  +        sa->tvTimeout.tv_sec  = sec;
  +        sa->tvTimeout.tv_usec = usec;
  +    }
  +    return SA_OK;
  +}
  +
  +sa_rc_t sa_buffers(sa_t *sa, size_t rsize, size_t wsize)
  +{
  +    char *cp;
  +
  +    if (sa == NULL)
  +        return SA_ERR_ARG;
  +    if (sa->nReadLen > rsize || sa->nWriteLen > wsize)
  +        return SA_ERR_ARG;
  +    if ((cp = (char *)realloc(sa->cpReadBuf, rsize)) == NULL)
  +        return SA_ERR_SYS;
  +    sa->cpReadBuf = cp;
  +    sa->nReadSize  = rsize;
  +    if ((cp = (char *)realloc(sa->cpWriteBuf, wsize)) == NULL)
  +        return SA_ERR_SYS;
  +    sa->cpWriteBuf = cp;
  +    sa->nWriteSize = wsize;
  +    return SA_OK;
  +}
  +
  +sa_rc_t sa_bind(sa_t *sa, sa_addr_t *laddr)
  +{
  +    sa_rc_t rv;
  +
  +    if (sa->sSocket == -1)
  +        if ((rv = sa_socket_init(sa, laddr->saa_family, laddr->saa_proto)) != SA_OK)
  +            return rv;
  +    /* NOT YET IMPLEMENTED */
  +    return SA_ERR_INT;
  +}
  +
  +sa_rc_t sa_connect(sa_t *sa, sa_addr_t *raddr)
  +{
  +    int flags, n, error;
  +    fd_set rset, wset;
  +    socklen_t len;
  +    sa_rc_t rv;
  +
  +    if (sa == NULL)
  +        return SA_ERR_ARG;
  +
  +    if (sa->sSocket == -1)
  +        if ((rv = sa_socket_init(sa, raddr->saa_family, raddr->saa_proto)) != SA_OK)
  +            return rv;
  +
  +    if (!sa->bTimeout)
  +        return connect(sa->sSocket, raddr->saa_buf, raddr->saa_len);
  +
  +    error = 0;
  +    rv = SA_OK;
  +
  +    /* remember socket flags */
  +    flags = fcntl(sa->sSocket, F_GETFL, 0);
  +
  +    /* switch to non-blocking mode */
  +    fcntl(sa->sSocket, F_SETFL, flags|O_NONBLOCK);
  +
  +    /* perform the connect */
  +    if ((n = connect(sa->sSocket, raddr->saa_buf, raddr->saa_len)) < 0) {
  +        if (errno != EINPROGRESS) {
  +            error = errno;
  +            goto done;
  +        }
  +    }
  +
  +    /* if connect completed immediately */
  +    if (n == 0)
  +        goto done; 
  +
  +    /* wait for read or write possibility */
  +    FD_ZERO(&rset);
  +    FD_ZERO(&wset);
  +    FD_SET(sa->sSocket, &rset);
  +    FD_SET(sa->sSocket, &wset);
  +    do {
  +        n = select(sa->sSocket+1, &rset, &wset, NULL, &sa->tvTimeout);
  +    } while (n == -1 && errno == EINTR);
  +
  +    /* decide on return semantic */
  +    if (n < 0) {
  +        error = errno;
  +        goto done;
  +    }
  +    else if (n == 0) {
  +        error = ETIMEDOUT;
  +        goto done;
  +    }
  +
  +    /* fetch pending error */
  +    len = sizeof(error);
  +    if (getsockopt(sa->sSocket, SOL_SOCKET, SO_ERROR, &error, &len) < 0)
  +        error = errno;
  +
  +    done:
  +
  +    /* reset socket flags */
  +    fcntl(sa->sSocket, F_SETFL, flags);
  +
  +    /* optionally set errno */
  +    if (error != 0) {
  +        errno = error;
  +        rv = SA_ERR_SYS;
  +    }
  +
  +    return rv;
  +}
  +
  +sa_rc_t sa_listen(sa_t *sa)
  +{
  +    /* FIXME: NOT YET IMPLEMENTED */
  +    return SA_ERR_INT;
  +}
  +
  +sa_rc_t sa_accept(sa_t *sa, sa_t **sa_new)
  +{
  +    /* FIXME: NOT YET IMPLEMENTED */
  +    return SA_ERR_INT;
  +}
  +
  +static int sa_read_raw(sa_t *sa, char *cpBuf, int nBufLen)
  +{
  +    int rv;
  +    fd_set fds;
  +
  +    if (sa->bTimeout) {
  +        FD_ZERO(&fds);
  +        FD_SET(sa->sSocket, &fds);
  +        do {
  +            rv = select(sa->sSocket+1, &fds, NULL, NULL, &sa->tvTimeout);
  +        } while (rv == -1 && errno == EINTR);
  +        if (rv == 0) {
  +            errno = ETIMEDOUT;
  +            return -1;
  +        }
  +    }
  +    do {
  +        rv = read(sa->sSocket, cpBuf, nBufLen);
  +    } while (rv == -1 && errno == EINTR);
  +    return rv;
  +}
  +
  +sa_rc_t sa_read(sa_t *sa, char *cpBuf, size_t nBufReq, size_t *nBufRes)
  +{
  +    int n;
  +    int rv;
  +
  +    if (sa == NULL)
  +        return 0;
  +    
  +    /* flush write buffer */
  +    if (sa->nWriteLen > 0)
  +        sa_flush(sa);
  +    rv = SA_OK;
  +    *nBufRes = 0;
  +    while (1) {
  +        if (nBufReq <= sa->nReadLen) {
  +            /* buffer holds enough data, so use this */
  +            memmove(cpBuf, sa->cpReadBuf, nBufReq);
  +            memmove(sa->cpReadBuf, sa->cpReadBuf+nBufReq, sa->nReadLen-nBufReq);
  +            sa->nReadLen -= nBufReq;
  +            *nBufRes += nBufReq;
  +        }
  +        else {
  +            if (sa->nReadLen > 0) {
  +                /* fetch already existing buffer contents as a start */
  +                memmove(cpBuf, sa->cpReadBuf, sa->nReadLen);
  +                nBufReq -= sa->nReadLen;
  +                cpBuf   += sa->nReadLen;
  +                *nBufRes += sa->nReadLen;
  +                sa->nReadLen = 0;
  +            }
  +            if (nBufReq >= sa->nReadSize) {
  +                /* buffer is too small at all, so read directly */
  +                n = sa_read_raw(sa, cpBuf, nBufReq);
  +                if (n > 0)
  +                    *nBufRes += n;
  +                else if (n <= 0)
  +                    rv = SA_ERR_SYS;
  +            }
  +            else {
  +                /* fill buffer with new data */
  +                n = sa_read_raw(sa, sa->cpReadBuf, sa->nReadSize);
  +                if (n <= 0)
  +                    rv = SA_ERR_SYS;
  +                else {
  +                    sa->nReadLen = n;
  +                    continue;
  +                }
  +            }
  +        }
  +        break;
  +    }
  +    return rv;
  +}
  +
  +sa_rc_t sa_readfrom(sa_t *sa, char *buf, size_t buflen, size_t *bufdone, sa_addr_t *addr)
  +{
  +    sa_rc_t rv;
  +
  +    if (sa->sSocket == -1)
  +        if ((rv = sa_socket_init(sa, addr->saa_family, addr->saa_proto)) != SA_OK)
  +            return rv;
  +    /* FIXME: NOT YET IMPLEMENTED */
  +    return SA_ERR_INT;
  +}
  +
  +sa_rc_t sa_readline(sa_t *sa, char *cpBuf, size_t nBufReq, size_t *nBufRes)
  +{
  +    char c;
  +    size_t n;
  +
  +    if (sa == NULL)
  +        return SA_ERR_ARG;
  +    *nBufRes = 0;
  +    while ((*nBufRes) < (nBufReq-1)) {
  +        sa_read(sa, &c, 1, &n);
  +        if (n <= 0)
  +            break;
  +        cpBuf[(*nBufRes)++] = c;
  +        if (c == '\n')
  +            break;
  +    }
  +    cpBuf[(*nBufRes)] = '\0';
  +    return SA_OK;
  +}
  +
  +static int sa_write_raw(sa_t *sa, const char *cpBuf, int nBufLen)
  +{
  +    int rv;
  +    fd_set fds;
  +
  +    if (sa->bTimeout) {
  +        FD_ZERO(&fds);
  +        FD_SET(sa->sSocket, &fds);
  +        do {
  +            rv = select(sa->sSocket+1, NULL, &fds, NULL, &sa->tvTimeout);
  +        } while (rv == -1 && errno == EINTR);
  +        if (rv == 0) {
  +            errno = ETIMEDOUT;
  +            return -1;
  +        }
  +    }
  +    do {
  +        rv = write(sa->sSocket, cpBuf, nBufLen);
  +    } while (rv == -1 && errno == EINTR);
  +    return rv;
  +}
  +
  +sa_rc_t sa_write(sa_t *sa, const char *cpBuf, size_t nBufReq, size_t *nBufRes)
  +{
  +    size_t n;
  +
  +    if (sa == NULL)
  +        return SA_ERR_ARG;
  +
  +    if (nBufReq > (sa->nWriteSize - sa->nWriteLen)) {
  +        /* not enough space in buffer, so flush buffer */
  +        sa_flush(sa);
  +    }
  +    if (nBufReq >= sa->nWriteSize) {
  +        /* buffer too small at all, so write immediately */
  +        *nBufRes = 0;
  +        while (nBufReq > 0) {
  +            n = sa_write_raw(sa, cpBuf, nBufReq);
  +            if (n <= 0)
  +                break;
  +            nBufReq  -= n;
  +            cpBuf    += n;
  +            *nBufRes += n;
  +        }
  +    }
  +    else {
  +        /* (again) enough sprace in buffer, so store data */
  +        memmove(sa->cpWriteBuf+sa->nWriteLen, cpBuf, nBufReq);
  +        sa->nWriteLen += nBufReq;
  +        *nBufRes = nBufReq;
  +    }
  +    return SA_OK;
  +}
  +
  +sa_rc_t sa_writeto(sa_t *sa, const char *buf, size_t buflen, size_t *bufdone, sa_addr_t *addr)
  +{
  +    sa_rc_t rv;
  +
  +    if (sa->sSocket == -1)
  +        if ((rv = sa_socket_init(sa, addr->saa_family, addr->saa_proto)) != SA_OK)
  +            return rv;
  +    /* FIXME: NOT YET IMPLEMENTED */
  +    return SA_ERR_INT;
  +}
  +
  +sa_rc_t sa_printf(sa_t *sa, const char *cpFmt, ...)
  +{
  +    va_list ap;
  +    size_t n;
  +    char caBuf[1024];
  +
  +    if (sa == NULL)
  +        return SA_ERR_ARG;
  +    va_start(ap, cpFmt);
  +    n = sa_vsnprintf(caBuf, sizeof(caBuf), cpFmt, ap);
  +    sa_write(sa, caBuf, n, &n);
  +    va_end(ap);
  +    return SA_OK;
  +}
  +
  +sa_rc_t sa_flush(sa_t *sa)
  +{
  +    size_t n;
  +
  +    if (sa == NULL)
  +        return SA_ERR_ARG;
  +    while (sa->nWriteLen > 0) {
  +        n = sa_write_raw(sa, sa->cpWriteBuf, sa->nWriteLen);
  +        if (n <= 0)
  +            break;
  +        memmove(sa->cpWriteBuf, sa->cpWriteBuf+n, sa->nWriteLen-n);
  +        sa->nWriteLen -= n;
  +    }
  +    sa->nWriteLen = 0;
  +    return SA_OK;
  +}
  +
  +sa_rc_t sa_shutdown(sa_t *sa, char *flags)
  +{
  +    int how;
   
  -    return;
  +    if (sa == NULL || flags == NULL)
  +        return SA_ERR_ARG;
  +    how = 0;
  +    if (strcmp(flags, "r") == 0)
  +        how = SHUT_RD;
  +    else if (strcmp(flags, "w") == 0)
  +        how = SHUT_WR;
  +    else if (strcmp(flags, "rw") == 0)
  +        how = SHUT_RDWR;
  +    if (shutdown(sa->sSocket, how) == -1)
  +        return SA_ERR_SYS;
  +    return SA_OK;
   }
   
  Index: ossp-pkg/l2/l2_ut_sa.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2_ut_sa.h
  --- ossp-pkg/l2/l2_ut_sa.h	2001/09/06 17:17:41	1.2
  +++ ossp-pkg/l2/l2_ut_sa.h	2001/09/09 15:54:31	1.3
  @@ -24,31 +24,58 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  l2_ut_sa.h: utility library for socket address handling
  +**  l2_ut_sa.h: socket abstraction library
   */
   
   #ifndef __L2_UT_SA_H__
   #define __L2_UT_SA_H__
   
  -#include <netdb.h>
  +#include <string.h>
   #include <sys/types.h>
  -#include <netinet/in.h>
   #include <sys/socket.h>
  -#include <arpa/inet.h>
   
  -typedef struct {
  -    struct sockaddr *sa_buf;
  -    socklen_t        sa_len;
  -    int              sa_proto;
  -} l2_util_sa_t;
  -
  -enum {
  -    L2_UTIL_SA_UNIX,
  -    L2_UTIL_SA_IP
  -};
  +struct sa_st;
  +typedef struct sa_st sa_t;
   
  -l2_util_sa_t *l2_util_sa_create(int, ...);
  -void          l2_util_sa_destroy(l2_util_sa_t *);
  +struct sa_addr_st;
  +typedef struct sa_addr_st sa_addr_t;
  +
  +typedef enum {
  +    SA_OK,
  +    SA_ERR_ARG,
  +    SA_ERR_USE,
  +    SA_ERR_MEM,
  +    SA_ERR_SYS,
  +    SA_ERR_INT
  +} sa_rc_t;
  +
  +sa_rc_t sa_u2a      (sa_addr_t **asaa, const char *uri, ...);
  +sa_rc_t sa_s2a      (sa_addr_t **saa, const struct sockaddr *sabuf, socklen_t salen);
  +sa_rc_t sa_a2u      (const sa_addr_t *saa, char **uri);
  +sa_rc_t sa_a2s      (const sa_addr_t *saa, struct sockaddr **sabuf, socklen_t *salen);
  +
  +sa_rc_t sa_create   (sa_t **sa);
  +sa_rc_t sa_destroy  (sa_t *sa);
  +
  +sa_rc_t sa_timeout  (sa_t *sa, long sec, long usec);
  +sa_rc_t sa_buffers  (sa_t *sa, size_t rsize, size_t wsize);
  +
  +sa_rc_t sa_bind     (sa_t *sa, sa_addr_t *laddr);
  +sa_rc_t sa_connect  (sa_t *sa, sa_addr_t *raddr);
  +sa_rc_t sa_listen   (sa_t *sa);
  +sa_rc_t sa_accept   (sa_t *sa, sa_t **sa_new);
  +
  +sa_rc_t sa_getremote(sa_t *sa, sa_addr_t *raddr);
  +sa_rc_t sa_getlocal (sa_t *sa, sa_addr_t *laddr);
  +
  +sa_rc_t sa_read     (sa_t *sa, char *buf, size_t buflen, size_t *bufdone);
  +sa_rc_t sa_readfrom (sa_t *sa, char *buf, size_t buflen, size_t *bufdone, sa_addr_t *addr);
  +sa_rc_t sa_readline (sa_t *sa, char *buf, size_t buflen, size_t *bufdone);
  +sa_rc_t sa_write    (sa_t *sa, const char *buf, size_t buflen, size_t *bufdone);
  +sa_rc_t sa_writeto  (sa_t *sa, const char *buf, size_t buflen, size_t *bufdone, sa_addr_t *addr);
  +sa_rc_t sa_printf   (sa_t *sa, const char *fmt, ...);
  +sa_rc_t sa_flush    (sa_t *sa);
  +sa_rc_t sa_shutdown (sa_t *sa, char *flags);
   
   #endif /* __L2_UT_SA_H__ */
   

From ossp-cvs-owner@ossp.org  Sun Sep  9 17:55:10 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f89Ft9e35550; Sun, 9 Sep 2001 17:55:09 +0200 (CEST)
Date: Sun, 9 Sep 2001 17:55:09 +0200 (CEST)
Message-Id: <200109091555.f89Ft9e35550@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 configure.ac
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Sep-2001 17:55:09
  Branch: HEAD                             Handle: 2001090916550800

  Modified files:
    ossp-pkg/l2             configure.ac

  Log:
    ops, l2_ut_sa.c now requires more Autoconf magic

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/l2/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/l2/configure.ac
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 configure.ac
  --- ossp-pkg/l2/configure.ac	2001/09/06 16:28:38	1.3
  +++ ossp-pkg/l2/configure.ac	2001/09/09 15:55:08	1.4
  @@ -75,7 +75,7 @@
   AC_PROG_CPP
   AC_CHECK_DEBUGGING
   AC_CONFIGURE_LIBTOOL
  -AC_CHECK_FUNCS(inet_aton inet_pton)
  +AC_CHECK_FUNCS(inet_aton inet_pton inet_ntoa inet_ntop snprintf vsnprintf)
   
   AC_OUTPUT(dnl
   Makefile dnl

From ossp-cvs-owner@ossp.org  Sun Sep  9 17:57:12 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f89FvBo35732; Sun, 9 Sep 2001 17:57:11 +0200 (CEST)
Date: Sun, 9 Sep 2001 17:57:11 +0200 (CEST)
Message-Id: <200109091557.f89FvBo35732@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 Makefile.in l2.h l2_ch_smtp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Sep-2001 17:57:11
  Branch: HEAD                             Handle: 2001090916571000

  Added files:
    ossp-pkg/l2             l2_ch_smtp.c
  Modified files:
    ossp-pkg/l2             Makefile.in l2.h

  Log:
    First cut for an SMTP output channel. This is very useful for
    (additionally) logging L2_LEVEL_PANIC messages in real-time to a mailbox
    via direct SMTP connection to a mail server. Internally it is very
    simple, because it is based on our new Socket Abstraction (SA) library
    (l2_ut_sa.[ch])...

  Summary:
    Revision    Changes     Path
    1.19        +1  -0      ossp-pkg/l2/Makefile.in
    1.21        +2  -0      ossp-pkg/l2/l2.h
    1.1         +287 -0     ossp-pkg/l2/l2_ch_smtp.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 Makefile.in
  --- ossp-pkg/l2/Makefile.in	2001/09/09 15:42:25	1.18
  +++ ossp-pkg/l2/Makefile.in	2001/09/09 15:57:10	1.19
  @@ -70,6 +70,7 @@
       l2_ch_pipe.lo \
       l2_ch_syslog.lo \
       l2_ch_socket.lo \
  +    l2_ch_smtp.lo \
       l2_ch_null.lo \
       l2_ch_filter.lo \
       l2_ch_prefix.lo \
  Index: ossp-pkg/l2/l2.h
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 l2.h
  --- ossp-pkg/l2/l2.h	2001/09/06 14:37:53	1.20
  +++ ossp-pkg/l2/l2.h	2001/09/09 15:57:10	1.21
  @@ -85,6 +85,7 @@
       L2_ERR_USE,    /* invalid usage */
       L2_ERR_MEM,    /* no more memory available */
       L2_ERR_SYS,    /* system error (see errno) */
  +    L2_ERR_IO,     /* input/output error */
       L2_ERR_FMT,    /* message formating error */
       L2_ERR_INT     /* internal error */
   } l2_result_t;
  @@ -163,6 +164,7 @@
   extern l2_handler_t l2_handler_pipe;
   extern l2_handler_t l2_handler_socket;
   extern l2_handler_t l2_handler_syslog;
  +extern l2_handler_t l2_handler_smtp;
   
   /* list of shipped (filter) channel handlers */
   extern l2_handler_t l2_handler_filter;
  Index: ossp-pkg/l2/l2_ch_smtp.c
  ============================================================
  $ cvs update -p -r1.1 l2_ch_smtp.c
  /*
  **  L2 - OSSP Logging Library
  **  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP L2, a flexible logging library which
  **  can be found at http://www.ossp.org/pkg/l2/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  l2_ch_smtp.c: SMTP channel implementation
  */
  
  #include "l2.h"
  #include "l2_p.h" /* for l2_version */
  
  #include <unistd.h>
  #include <sys/utsname.h>
  #include <sys/types.h>
  #include <pwd.h>
  
  /* declare private channel configuration */
  typedef struct {
      char *cpFrom;
      char *cpRcpt;
      char *cpSubject;
      char *cpHost;
      char *cpPort;
      char *cpLocalProg;
      char *cpLocalUser;
      char *cpLocalHost;
      long nTimeout; 
      sa_addr_t *saaServer;
      sa_t *saServer;
  } l2_ch_smtp_t;
  
  /* create channel */
  static l2_result_t hook_create(l2_context_t *ctx, l2_channel_t *ch)
  {
      l2_ch_smtp_t *cfg;
      struct utsname uts;
      struct passwd *pw;
  
      /* allocate private channel configuration */
      if ((cfg = (l2_ch_smtp_t *)malloc(sizeof(l2_ch_smtp_t))) == NULL)
          return L2_ERR_ARG;
  
      /* initialize configuration with reasonable defaults */
      cfg->cpLocalProg = NULL;
      if ((pw = getpwuid(getuid())) != NULL)
          cfg->cpLocalUser = strdup(pw->pw_name);
      else
          cfg->cpLocalUser = l2_util_asprintf("uid#%d", getuid());
      if (uname(&uts) == 0)
          cfg->cpLocalHost = strdup(uts.nodename);
      else
          cfg->cpLocalHost = strdup("localhost");
      cfg->cpFrom    = l2_util_asprintf("%s@%s", cfg->cpLocalUser, cfg->cpLocalHost);
      cfg->cpRcpt    = NULL;
      cfg->cpSubject = l2_util_asprintf("[L2] log channel output on %s", cfg->cpLocalHost);
      cfg->cpHost    = NULL;
      cfg->cpPort    = strdup("smtp");
      cfg->nTimeout  = 30;
      cfg->saaServer = NULL;
      cfg->saServer  = NULL;
  
      /* link private channel configuration into channel context */
      ctx->vp = cfg;
  
      return L2_OK;
  }
  
  /* configure channel */
  static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
  {
      l2_ch_smtp_t *cfg = (l2_ch_smtp_t *)ctx->vp;
      l2_param_t pa[10]; 
      l2_result_t rv;
  
      /* feed and call generic parameter parsing engine */
      L2_PARAM_SET(pa[0], progname,  STRING, &cfg->cpLocalProg);
      L2_PARAM_SET(pa[1], localhost, STRING, &cfg->cpLocalHost);
      L2_PARAM_SET(pa[2], localuser, STRING, &cfg->cpLocalUser);
      L2_PARAM_SET(pa[3], from,      STRING, &cfg->cpFrom);
      L2_PARAM_SET(pa[4], rcpt,      STRING, &cfg->cpRcpt);
      L2_PARAM_SET(pa[5], subject,   STRING, &cfg->cpSubject);
      L2_PARAM_SET(pa[6], host,      STRING, &cfg->cpHost);
      L2_PARAM_SET(pa[7], port,      STRING, &cfg->cpPort);
      L2_PARAM_SET(pa[8], timeout,   INT,    &cfg->nTimeout);
      L2_PARAM_END(pa[9]);
      rv = l2_util_setparams(pa, fmt, ap);
  
      return rv;
  }
  
  /* open channel */
  static l2_result_t hook_open(l2_context_t *ctx, l2_channel_t *ch)
  {
      l2_ch_smtp_t *cfg = (l2_ch_smtp_t *)ctx->vp;
      sa_rc_t rc;
  
      /* make sure a path was set */
      if (cfg->cpHost == NULL || cfg->cpRcpt == NULL)
          return L2_ERR_USE;
  
      /* create socket address */
      if ((rc = sa_u2a(&cfg->saaServer, "tcp://%s:%s", cfg->cpHost, cfg->cpPort)) != SA_OK)
          return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
  
      /* create socket */
      if ((rc = sa_create(&cfg->saServer)) != SA_OK)
          return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
  
      /* configure socket parameters */
      sa_timeout(cfg->saServer, cfg->nTimeout, 0);
      sa_buffers(cfg->saServer, 1024, 1024);
  
      return L2_OK;
  }
  
  /* write to channel */
  static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch, 
                                const char *buf, size_t buf_size)
  {
      l2_ch_smtp_t *cfg = (l2_ch_smtp_t *)ctx->vp;
      char caLine[1024];
      int bSent;
      sa_t *sa;
      sa_addr_t *saa;
      sa_rc_t rc;
      size_t n;
      
      /* establish connection to server */
      saa = cfg->saaServer;
      sa  = cfg->saServer;
      if ((rc = sa_connect(sa, saa)) != SA_OK)
          return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
  
      /* 
       * Sample SMTP transaction for reference:
       *
       * | 220 en1.engelschall.com ESMTP SMTP Sendmail 8.11.0+ ready
       * | HELO l2
       * | 250 en1.engelschall.com Hello en1.engelschall.com [141.1.129.1], pleased to meet you
       * | MAIL From: <l2@localhost>
       * | 250 2.1.0 <l2@localhost>... Sender ok
       * | RCPT To: <rse@engelschall.com>
       * | 250 2.1.5 <rse@engelschall.com>... Recipient ok
       * | DATA
       * | 354 Enter mail, end with "." on a line by itself
       * | From: l2@localhost
       * | To: rse@engelschall.com
       * | Subject: [L2] SMTP channel output
       * |
       * | test log entry
       * | .
       * | 250 2.0.0 f88Aev847031 Message accepted for delivery
       * | QUIT
       * | 221 2.0.0 en1.engelschall.com closing connection
       *
       * For more details about SMTP, see RFC 2821: 
       * Simple Mail Transfer Protocol; J. Klensin; April 2001.
       */
  
      bSent = FALSE;
      if (sa_readline(sa, caLine, sizeof(caLine), &n) == SA_OK
          && n > 3 && atoi(caLine) == 220) {
          sa_printf(sa, "HELO %s\r\n", cfg->cpLocalHost);
          if (sa_readline(sa, caLine, sizeof(caLine), &n) == SA_OK
              && n > 3 && atoi(caLine) == 250) {
              sa_printf(sa, "MAIL FROM:<%s>\r\n", cfg->cpFrom);
              if (sa_readline(sa, caLine, sizeof(caLine), &n) == SA_OK
                  && n > 3 && atoi(caLine) == 250) {
                  sa_printf(sa, "RCPT TO:<%s>\r\n", cfg->cpRcpt);
                  if (sa_readline(sa, caLine, sizeof(caLine), &n) == SA_OK
                      && n > 3 && atoi(caLine) == 250) {
                      sa_printf(sa, "DATA\r\n");
                      if (sa_readline(sa, caLine, sizeof(caLine), &n) == SA_OK
                          && n > 3 && atoi(caLine) == 354) {
                          sa_printf(sa, "From: %s\r\n", cfg->cpFrom);
                          sa_printf(sa, "To: %s\r\n", cfg->cpRcpt);
                          sa_printf(sa, "Subject: %s\r\n", cfg->cpSubject);
                          if (cfg->cpLocalProg != NULL)
                              sa_printf(sa, "User-Agent: %s, %s\r\n", 
                                         cfg->cpLocalProg, l2_version.v_gnu);
                          else
                              sa_printf(sa, "User-Agent: %s\r\n", l2_version.v_gnu);
                          sa_printf(sa, "\r\n");
                          if (cfg->cpLocalProg != NULL)
                              sa_printf(sa, "Program %s of user %s on host %s logged:\r\n", 
                                         cfg->cpLocalProg, cfg->cpLocalUser, cfg->cpLocalHost);
                          else
                              sa_printf(sa, "A program of user %s on host %s logged:\r\n", 
                                         cfg->cpLocalUser, cfg->cpLocalHost);
                          /* FIXME: dot-escaping and remove doubled newline */
                          sa_write(sa, buf, buf_size, &n);
                          sa_printf(sa, "\r\n");
                          sa_printf(sa, ".\r\n");
                          if (sa_readline(sa, caLine, sizeof(caLine), &n) == SA_OK
                              && n > 3 && atoi(caLine) == 250) {
                              sa_printf(sa, "QUIT\r\n");
                              sa_readline(sa, caLine, sizeof(caLine), &n);
                              bSent = TRUE;
                          }
                      }
                  }
              }
          }
      }
  
      /* shutdown connection to server */
      sa_shutdown(sa, "rw");
  
      return (bSent ? L2_OK : L2_ERR_IO);
  }
  
  /* close channel */
  static l2_result_t hook_close(l2_context_t *ctx, l2_channel_t *ch)
  {
      l2_ch_smtp_t *cfg = (l2_ch_smtp_t *)ctx->vp;
  
      /* destroy remote address */
      if (cfg->saServer != NULL) {
          sa_destroy(cfg->saServer);
          cfg->saServer = NULL;
      }
      if (cfg->saaServer != NULL) {
          free(cfg->saaServer);
          cfg->saaServer = NULL;
      }
  
      return L2_OK;
  }
  
  /* destroy channel */
  static l2_result_t hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
  {
      l2_ch_smtp_t *cfg = (l2_ch_smtp_t *)ctx->vp;
  
      /* destroy channel configuration */
      if (cfg->cpFrom != NULL)
          free(cfg->cpFrom);
      if (cfg->cpRcpt != NULL)
          free(cfg->cpRcpt);
      if (cfg->cpSubject != NULL)
          free(cfg->cpSubject);
      if (cfg->cpHost != NULL)
          free(cfg->cpHost);
      if (cfg->cpPort != NULL)
          free(cfg->cpPort);
      if (cfg->cpLocalHost != NULL)
          free(cfg->cpLocalHost);
      if (cfg->cpLocalUser != NULL)
          free(cfg->cpLocalUser);
      free(cfg);
  
      return L2_OK;
  }
  
  /* exported channel handler structure */
  l2_handler_t l2_handler_smtp = {
      L2_CHANNEL_OUTPUT,
      hook_create,
      hook_configure,
      hook_open,
      hook_write,
      NULL,
      hook_close,
      hook_destroy
  };
  

From ossp-cvs-owner@ossp.org  Sun Sep  9 17:59:48 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f89Fxls35943; Sun, 9 Sep 2001 17:59:47 +0200 (CEST)
Date: Sun, 9 Sep 2001 17:59:47 +0200 (CEST)
Message-Id: <200109091559.f89Fxls35943@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Sep-2001 17:59:47
  Branch: HEAD                             Handle: 2001090916594600

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    remember my personal points

  Summary:
    Revision    Changes     Path
    1.15        +11 -0      ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 TODO
  --- ossp-pkg/l2/TODO	2001/09/06 14:37:53	1.14
  +++ ossp-pkg/l2/TODO	2001/09/09 15:59:46	1.15
  @@ -11,6 +11,17 @@
   Auf diese Weise ist l2_channel_setparams aus API
   draussen und..
   
  +RSE:
  +- channel API cleanup: open semantics
  +- bind and udp parameters in socket channel
  +- "subdir config then quiet" feature
  +- smtp channel: MIME quoted printable?
  +- prefix channels:
  +  - printf style without strftime;
  +  - levels logged with l2_util_l2s()
  +- l2tool [addr:]port
  +- autoflush via shared memory and sub-process?
  +
   Timeplan
   --------
   

From ossp-cvs-owner@ossp.org  Sun Sep  9 18:01:45 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f89G1i436502; Sun, 9 Sep 2001 18:01:44 +0200 (CEST)
Date: Sun, 9 Sep 2001 18:01:44 +0200 (CEST)
Message-Id: <200109091601.f89G1i436502@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Sep-2001 18:01:44
  Branch: HEAD                             Handle: 2001090917014300

  Modified files:
    ossp-pkg/l2             l2_test.c

  Log:
    Cleanup socket stuff and add SMTP test.

  Summary:
    Revision    Changes     Path
    1.16        +28 -7      ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/09/08 11:25:29	1.15
  +++ ossp-pkg/l2/l2_test.c	2001/09/09 16:01:43	1.16
  @@ -65,7 +65,12 @@
       l2_channel_t *chPrefix;
       l2_channel_t *chBuf;
       l2_channel_t *chFile;
  +#ifdef WITH_SOCKET
       l2_channel_t *chSock;
  +#endif
  +#ifdef WITH_SMTP
  +    l2_channel_t *chSmtp;
  +#endif
       l2_stream_t *st;
   
       /*
  @@ -75,25 +80,27 @@
       if ((st = l2_stream_create()) == NULL)
           die("failed to create stream");
   
  -/* Atenzione! Before doing any socket testing, make sure you have a valid */
  -/* end point listening, or else you will only get an error message when   */
  -/* the thing tries to connect.                                            */
  +#ifdef WITH_SOCKET
  +    /* Atenzione! Before doing any socket testing, make sure you have a valid */
  +    /* end point listening, or else you will only get an error message when   */
  +    /* the thing tries to connect.                                            */
       if ((chSock = l2_channel_create(&l2_handler_socket)) == NULL)
           die("failed to create socket channel");
   
       if (l2_channel_configure(chSock, "protocol,ipversion,host,port",\
           IPPROTO_UDP, AF_INET, "localhost", 2002) != L2_OK)
           die("failed to configure socket ipv4 channel");
  -
  -/*    if (l2_channel_configure(chSock, "protocol,ipversion,host,port",\
  +#if 0
  +    if (l2_channel_configure(chSock, "protocol,ipversion,host,port",\
             IPPROTO_TCP, AF_INET6, "0:0:0:0:0:0:0:1", 2002) != L2_OK)
  -          die("failed to configure socket ipv6 channel"); */
  -
  +          die("failed to configure socket ipv6 channel");
  +#endif
       if (l2_channel_open(chSock) != L2_OK)
           die("failed to open socket channel");
   
       if (l2_stream_channel(st, chSock, L2_LEVEL_UPTO(L2_LEVEL_WARNING)) != L2_OK)
           die("failed to attach first channel into stream");
  +#endif
   
       if ((chPrefix  = l2_channel_create(&l2_handler_prefix)) == NULL) /* Prefix */
           die("failed to create prefix channel");
  @@ -124,6 +131,20 @@
   
       if (l2_stream_channel(st, chPrefix, L2_LEVEL_UPTO(L2_LEVEL_WARNING)) != L2_OK)
           die("failed to attach channel stack into stream");
  +
  +#ifdef WITH_SMTP
  +    if ((chSmtp = l2_channel_create(&l2_handler_smtp)) == NULL)   /* SMTP */
  +        die("failed to create smtp channel");
  +
  +    if (l2_channel_configure(chSmtp, "rcpt,host,port", "rse@engelschall.com", "en1", "25") != L2_OK)
  +        die("failed to configure smtp channel");
  +
  +    if (l2_channel_open(chSmtp) != L2_OK)
  +        die("failed to open smtp channel");
  +
  +    if (l2_stream_channel(st, chSmtp, L2_LEVEL_UPTO(L2_LEVEL_ERROR)) != L2_OK)
  +        die("failed to attach smtp channel into stream");
  +#endif
   
       if (l2_stream_levels(st, L2_LEVEL_UPTO(L2_LEVEL_WARNING)) != L2_OK)
           die("failed to set global logging level");

From ossp-cvs-owner@ossp.org  Mon Sep 10 06:27:38 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8A4Ra723381; Mon, 10 Sep 2001 06:27:36 +0200 (CEST)
Date: Mon, 10 Sep 2001 06:27:36 +0200 (CEST)
Message-Id: <200109100427.f8A4Ra723381@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_sockmon.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   10-Sep-2001 06:27:36
  Branch: HEAD                             Handle: 2001091005273600

  Modified files:
    ossp-pkg/l2             l2_sockmon.c

  Log:
    Removed redundant call to memset for address structures.

  Summary:
    Revision    Changes     Path
    1.5         +7  -13     ossp-pkg/l2/l2_sockmon.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_sockmon.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 l2_sockmon.c
  --- ossp-pkg/l2/l2_sockmon.c	2001/09/07 13:03:07	1.4
  +++ ossp-pkg/l2/l2_sockmon.c	2001/09/10 04:27:36	1.5
  @@ -91,7 +91,7 @@
   int myserver(int iFamily, int iProtocol, int iPort)
   {
       char pszBuf[BUFFSIZ];
  -    struct sockaddr_in  laddr4,   faddr4,    caddr4;
  +    struct sockaddr_in  laddr4,   faddr4,    CADDR4;
       struct sockaddr_in6 laddr6,   faddr6,    caddr6;
       int                 iSock,    iNewsock;
       int                 iSockopt, iProtofam;
  @@ -102,9 +102,8 @@
       /* Set up an IPv4 TCP socket to listen on for connections. */
       if (iFamily == AF_INET6)
       {
  -        /* initialize address structures */
  +        /* initialize address structure */
           memset(&laddr6,  0, sizeof(laddr6));
  -        memset(&laddr6,  0, sizeof(laddr6));
   
           laddr6.sin6_family      = AF_INET6;
           laddr6.sin6_flowinfo    = 0;
  @@ -113,8 +112,7 @@
       }
       else if (iFamily == AF_INET)
       {
  -        /* initialize address structures */
  -        memset(&laddr4,  0, sizeof(laddr4));
  +        /* initialize address structure */
           memset(&laddr4,  0, sizeof(laddr4));
   
           laddr4.sin_family       = AF_INET;
  @@ -159,8 +157,7 @@
   
       if (iProtocol == IPPROTO_UDP) {
           if (iFamily == AF_INET6) {
  -            /* initialize address structures */
  -            memset(&caddr6,  0, sizeof(caddr6));
  +            /* initialize address structure */
               memset(&caddr6,  0, sizeof(caddr6));
   
               for (;;) { /* Receive messages */
  @@ -195,9 +192,8 @@
               }
           }
           else if (iFamily == AF_INET) {
  -            /* initialize address structures */
  +            /* initialize address structure */
               memset(&caddr4,  0, sizeof(caddr4));
  -            memset(&caddr4,  0, sizeof(caddr4));
   
               for (;;) { /* Receive messages */
                   faddrlen = sizeof(caddr4);
  @@ -240,8 +236,7 @@
   
           /* Wait for a connection request */
           if (iFamily == AF_INET6) {
  -            /* initialize address structures */
  -            memset(&faddr6,  0, sizeof(faddr6));
  +            /* initialize address structure */
               memset(&faddr6,  0, sizeof(faddr6));
   
               for (;;) {
  @@ -259,8 +254,7 @@
               }
           }
           else if (iFamily == AF_INET) {
  -            /* initialize address structures */
  -            memset(&faddr4,  0, sizeof(faddr4));
  +            /* initialize address structure */
               memset(&faddr4,  0, sizeof(faddr4));
   
               for (;;) {

From ossp-cvs-owner@ossp.org  Mon Sep 10 08:42:01 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8A6g0o38753; Mon, 10 Sep 2001 08:42:00 +0200 (CEST)
Date: Mon, 10 Sep 2001 08:42:00 +0200 (CEST)
Message-Id: <200109100642.f8A6g0o38753@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_socket.c l2_ch_syslog.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   10-Sep-2001 08:42:00
  Branch: HEAD                             Handle: 2001091007415901

  Modified files:
    ossp-pkg/l2             l2_ch_socket.c l2_ch_syslog.c

  Log:
    minor modifications for compile run to survive --pendantic-errors. Please review.

  Summary:
    Revision    Changes     Path
    1.21        +5  -5      ossp-pkg/l2/l2_ch_socket.c
    1.18        +1  -1      ossp-pkg/l2/l2_ch_syslog.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_socket.c
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 l2_ch_socket.c
  --- ossp-pkg/l2/l2_ch_socket.c	2001/09/07 13:03:07	1.20
  +++ ossp-pkg/l2/l2_ch_socket.c	2001/09/10 06:41:59	1.21
  @@ -49,8 +49,8 @@
       int             i             = 0;
       struct in_addr  IP4Addr;
       struct in6_addr IP6Addr;
  -    char            *pszIndex     = NULL;    /* To index IPv6 validity */
  -    char            *pszNextfield = -1;      /* For IPv6 address trans */
  +    const char      *pszIndex     = NULL;    /* To index IPv6 validity */
  +    char            *pszNextfield = "";      /* For IPv6 address trans */
   
       if (iFamily == AF_INET) {
           if (inet_aton(pszAddress, &IP4Addr)) {
  @@ -136,12 +136,12 @@
   /* open channel */
   static l2_result_t hook_open(l2_context_t *ctx, l2_channel_t *ch)
   {
  -    int                 i;
  +    //FIXME int                 i;
       l2_ch_socket_t      *cfg = (l2_ch_socket_t *)ctx->vp;
       struct hostent      *pHostentry;
       struct sockaddr_in  IP4Localsock, IP4Sockaddr;
       struct sockaddr_in6 IP6Localsock, IP6Sockaddr;
  -    struct in6_addr     *IP6Addr;
  +    //FIXME struct in6_addr     *IP6Addr;
   
       /* make sure a target is configured */
       if (cfg->pszHost == NULL)
  @@ -220,7 +220,7 @@
               IP6Sockaddr.sin6_port   = htons(cfg->iPort);
           }
           /* resolve host nominally */
  -        else if (pHostentry = gethostbyname(cfg->pszHost) != NULL) {
  +        else if ((pHostentry = gethostbyname(cfg->pszHost)) != NULL) {
               if (pHostentry->h_addrtype == AF_INET6) {
                   IP6Sockaddr.sin6_family = AF_INET6;
                   IP6Sockaddr.sin6_port   = htons(cfg->iPort);
  Index: ossp-pkg/l2/l2_ch_syslog.c
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 l2_ch_syslog.c
  --- ossp-pkg/l2/l2_ch_syslog.c	2001/09/06 16:10:05	1.17
  +++ ossp-pkg/l2/l2_ch_syslog.c	2001/09/10 06:42:00	1.18
  @@ -108,7 +108,7 @@
   /* close channel */
   static l2_result_t hook_close(l2_context_t *ctx, l2_channel_t *ch)
   {
  -    l2_ch_syslog_t *cfg = (l2_ch_syslog_t *)ctx->vp;
  +    //FIXME l2_ch_syslog_t *cfg = (l2_ch_syslog_t *)ctx->vp;
   
       /* close channel syslog */
       closelog();

From ossp-cvs-owner@ossp.org  Mon Sep 10 08:43:12 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8A6hBL38901; Mon, 10 Sep 2001 08:43:11 +0200 (CEST)
Date: Mon, 10 Sep 2001 08:43:11 +0200 (CEST)
Message-Id: <200109100643.f8A6hBL38901@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 Makefile.in l2_ch_socket.c l2_sockmon.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   10-Sep-2001 08:43:11
  Branch: HEAD                             Handle: 2001091007431000

  Modified files:
    ossp-pkg/l2             Makefile.in l2_ch_socket.c l2_sockmon.c

  Log:
    Bug fixes, cleanup, and removed makefile redundancies (see end.)

  Summary:
    Revision    Changes     Path
    1.20        +4  -50     ossp-pkg/l2/Makefile.in
    1.22        +7  -7      ossp-pkg/l2/l2_ch_socket.c
    1.6         +1  -3      ossp-pkg/l2/l2_sockmon.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 Makefile.in
  --- ossp-pkg/l2/Makefile.in	2001/09/09 15:57:10	1.19
  +++ ossp-pkg/l2/Makefile.in	2001/09/10 06:43:10	1.20
  @@ -139,6 +139,8 @@
   	$(LIBTOOL) --mode=link --quiet $(CC) $(LDFLAGS) -o l2_test l2_test.o libl2.la $(LIBS)
   l2_test++: l2_test++.o libl2++.la
   	$(LIBTOOL) --mode=link --quiet $(CC) $(LDFLAGS) -o l2_test++ l2_test++.o libl2++.la $(LIBS)
  +l2_sockmon: l2_sockmon.o
  +	$(LIBTOOL) --mode=link --quiet $(CC) $(LDFLAGS) -o l2_sockmon l2_sockmon.o $(LIBS)
   
   #   build Unix manual pages
   l2-config.1: l2-config.pod $(_VERSION_FILE)
  @@ -284,55 +286,9 @@
   l2_channel.o: l2_channel.c l2.h l2_p.h
   l2_stream.o: l2_stream.c l2.h l2_p.h
   l2_test.o: l2_test.c l2.h
  +l2_sockmon.o: l2_sockmon.c
   l2_version.o: l2_version.c l2_version.c
  -l2_ch_buffer.o: l2_ch_buffer.c l2.h l2_p.h
  -l2_ch_fd.o: l2_ch_fd.c l2.h l2_p.h
  -l2_ch_file.o: l2_ch_file.c l2.h l2_p.h
  -l2_ch_filter.o: l2_ch_filter.c l2.h l2_p.h
  -l2_ch_null.o: l2_ch_null.c l2.h l2_p.h
  -l2_ch_pipe.o: l2_ch_pipe.c l2.h l2_p.h
  -l2_ch_prefix.o: l2_ch_prefix.c l2.h l2_p.h
  -l2_ch_socket.o: l2_ch_socket.c l2.h l2_p.h
  -l2_ch_syslog.o: l2_ch_syslog.c l2.h l2_p.h
  -l2_channel.o: l2_channel.c l2.h l2_p.h
  -l2_epreuve.o: l2_epreuve.c l2.h l2_p.h
  -l2_stream.o: l2_stream.c l2.h l2_p.h
  -l2_test.o: l2_test.c l2.h
  -l2_ut_format.o: l2_ut_format.c l2.h l2_p.h
  -l2_ut_param.o: l2_ut_param.c l2.h l2_p.h
  -l2_version.o: l2_version.c l2_version.c
  -l2_ch_buffer.lo: l2_ch_buffer.c l2.h l2_p.h
  -l2_ch_fd.lo: l2_ch_fd.c l2.h l2_p.h
  -l2_ch_file.lo: l2_ch_file.c l2.h l2_p.h
  -l2_ch_filter.lo: l2_ch_filter.c l2.h l2_p.h
  -l2_ch_null.lo: l2_ch_null.c l2.h l2_p.h
  -l2_ch_pipe.lo: l2_ch_pipe.c l2.h l2_p.h
  -l2_ch_prefix.lo: l2_ch_prefix.c l2.h l2_p.h
  -l2_ch_socket.lo: l2_ch_socket.c l2.h l2_p.h
  -l2_ch_syslog.lo: l2_ch_syslog.c l2.h l2_p.h
  -l2_channel.lo: l2_channel.c l2.h l2_p.h
  -l2_epreuve.lo: l2_epreuve.c l2.h l2_p.h
  -l2_stream.lo: l2_stream.c l2.h l2_p.h
  -l2_test.lo: l2_test.c l2.h
  -l2_ut_format.lo: l2_ut_format.c l2.h l2_p.h
  -l2_ut_param.lo: l2_ut_param.c l2.h l2_p.h
  -l2_version.lo: l2_version.c l2_version.c
  -l2_ch_buffer.lo: l2_ch_buffer.c l2.h l2_p.h
  -l2_ch_fd.lo: l2_ch_fd.c l2.h l2_p.h
  -l2_ch_file.lo: l2_ch_file.c l2.h l2_p.h
  -l2_ch_filter.lo: l2_ch_filter.c l2.h l2_p.h
  -l2_ch_null.lo: l2_ch_null.c l2.h l2_p.h
  -l2_ch_pipe.lo: l2_ch_pipe.c l2.h l2_p.h
  -l2_ch_prefix.lo: l2_ch_prefix.c l2.h l2_p.h
  -l2_ch_socket.lo: l2_ch_socket.c l2.h l2_p.h
  -l2_ch_syslog.lo: l2_ch_syslog.c l2.h l2_p.h
  -l2_channel.lo: l2_channel.c l2.h l2_p.h
  -l2_epreuve.lo: l2_epreuve.c l2.h l2_p.h
  -l2_stream.lo: l2_stream.c l2.h l2_p.h
  -l2_test.lo: l2_test.c l2.h
  -l2_ut_format.lo: l2_ut_format.c l2.h l2_p.h
  -l2_ut_param.lo: l2_ut_param.c l2.h l2_p.h
  -l2_version.lo: l2_version.c l2_version.c
  +
   l2_ch_buffer.lo: l2_ch_buffer.c l2.h l2_p.h l2_ut_pcre.h
   l2_ch_fd.lo: l2_ch_fd.c l2.h l2_p.h l2_ut_pcre.h
   l2_ch_file.lo: l2_ch_file.c l2.h l2_p.h l2_ut_pcre.h
  @@ -343,9 +299,7 @@
   l2_ch_socket.lo: l2_ch_socket.c l2.h l2_p.h l2_ut_pcre.h
   l2_ch_syslog.lo: l2_ch_syslog.c l2.h l2_p.h l2_ut_pcre.h
   l2_channel.lo: l2_channel.c l2.h l2_p.h l2_ut_pcre.h
  -l2_epreuve.lo: l2_epreuve.c l2.h l2_p.h l2_ut_pcre.h
   l2_stream.lo: l2_stream.c l2.h l2_p.h l2_ut_pcre.h
  -l2_test.lo: l2_test.c l2.h
   l2_ut_format.lo: l2_ut_format.c l2.h l2_p.h l2_ut_pcre.h
   l2_ut_param.lo: l2_ut_param.c l2.h l2_p.h l2_ut_pcre.h
   l2_ut_pcre.lo: l2_ut_pcre.c l2_ut_pcre.h l2_ut_pcre_tab.c
  Index: ossp-pkg/l2/l2_ch_socket.c
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 l2_ch_socket.c
  --- ossp-pkg/l2/l2_ch_socket.c	2001/09/10 06:41:59	1.21
  +++ ossp-pkg/l2/l2_ch_socket.c	2001/09/10 06:43:10	1.22
  @@ -36,15 +36,16 @@
   #include <arpa/inet.h>
   
   #include "l2.h"
  +#include "l2_config.h"
   
  -#define HAVE_INET_ATON
  -#ifndef HAVE_INET_PTON
  -#ifdef  HAVE_INET_ATON
  +#if defined(HAVE_INET_PTON)
  +#define l2_inet_pton inet_pton
  +#elif defined(HAVE_INET_ATON)
   
   /******************************************************************
   IPv4 source used from Unix Network Programming by Richard STEVENS
    ******************************************************************/
  -static int inet_pton(int iFamily, const char *pszAddress, void *pvMemref)
  +static int l2_inet_pton(int iFamily, const char *pszAddress, void *pvMemref)
   {
       int             i             = 0;
       struct in_addr  IP4Addr;
  @@ -82,7 +83,6 @@
   #else
   #error "neither inet_pton nor inet_aton available"
   #endif
  -#endif
   
   /* declare private channel configuration */
   typedef struct {
  @@ -154,7 +154,7 @@
           memset(&IP4Sockaddr,  0, sizeof(IP4Sockaddr));
   
           /* resolve host numerically */
  -        if (inet_pton(AF_INET, cfg->pszHost, &IP4Sockaddr.sin_addr.s_addr) == 1) {
  +        if (l2_inet_pton(AF_INET, cfg->pszHost, &IP4Sockaddr.sin_addr.s_addr) == 1) {
               IP4Sockaddr.sin_family = AF_INET;
               IP4Sockaddr.sin_port   = htons(cfg->iPort);
           }
  @@ -215,7 +215,7 @@
           memset(&IP6Sockaddr,  0, sizeof(IP6Sockaddr));
   
           /* resolve host numerically */
  -        if (inet_pton(AF_INET6, cfg->pszHost, &IP6Sockaddr.sin6_addr.s6_addr) == 1) {
  +        if (l2_inet_pton(AF_INET6, cfg->pszHost, &IP6Sockaddr.sin6_addr.s6_addr) == 1) {
               IP6Sockaddr.sin6_family = AF_INET6;
               IP6Sockaddr.sin6_port   = htons(cfg->iPort);
           }
  Index: ossp-pkg/l2/l2_sockmon.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 l2_sockmon.c
  --- ossp-pkg/l2/l2_sockmon.c	2001/09/10 04:27:36	1.5
  +++ ossp-pkg/l2/l2_sockmon.c	2001/09/10 06:43:10	1.6
  @@ -27,8 +27,6 @@
   **  l2_sockmon.c: Socket monitor for use with l2_test.c
   */
   
  -#include <l2.h>
  -
   #include <sys/types.h>
   #include <sys/socket.h>
   #include <netinet/in.h>
  @@ -91,7 +89,7 @@
   int myserver(int iFamily, int iProtocol, int iPort)
   {
       char pszBuf[BUFFSIZ];
  -    struct sockaddr_in  laddr4,   faddr4,    CADDR4;
  +    struct sockaddr_in  laddr4,   faddr4,    caddr4;
       struct sockaddr_in6 laddr6,   faddr6,    caddr6;
       int                 iSock,    iNewsock;
       int                 iSockopt, iProtofam;

From ossp-cvs-owner@ossp.org  Mon Sep 10 08:50:57 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8A6ov340141; Mon, 10 Sep 2001 08:50:57 +0200 (CEST)
Date: Mon, 10 Sep 2001 08:50:57 +0200 (CEST)
Message-Id: <200109100650.f8A6ov340141@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO lmtp2nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   10-Sep-2001 08:50:56
  Branch: HEAD                             Handle: 2001091007505600

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO lmtp2nntp.c

  Log:
    added -m mailfrom filter

  Summary:
    Revision    Changes     Path
    1.28        +3  -17     ossp-pkg/lmtp2nntp/00TODO
    1.45        +20 -1      ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	2001/09/07 13:53:16	1.27
  +++ ossp-pkg/lmtp2nntp/00TODO	2001/09/10 06:50:56	1.28
  @@ -1,28 +1,19 @@
   
  -whatsup draufleiten
  -
   panic   = unexpected
   error   = i/o error, errno ...
   warning = NNTP connect failed
    info   = *MOST COMMON* step by step
   trace   = ist bisheriger trace.c
   debug   = developer meldungen
  -
  -
  -Hallo Thomas, wir haben festgestellt, dass wir noch ein feature brauchen.
  -Momentan waere es moeglich, dass jeder x-beliebige (der die entsprechende
  -Mail-Adresse kennt) eine Mail an mail.de.cw.net schickt, und diese somit auf
  -unsern News-Server abgebildet wird. Wir brauchen daher noch einen Filter, der
  -dies pro Gruppe auf einen definierten, erlaubten Absender erlaubt.
  -[B<-m> I<mailfrom>]
   
  -use L2 for logging, grab ID through RFC1891 ENVID, 6.2
  -[B<-i> I<messageid>]
  +[B<-i> I<messageid>] use L2 for logging, grab ID through RFC1891 ENVID, 6.2
   
   CU/CUS
   
   str debugging
   
  +FIXME 
  +
   check str library version
   - openpkg (package time)
   - autoconf, (autoconf time)
  @@ -32,11 +23,6 @@
   check gcc3 compatiblity
   
       **** DEVELOPMENT INFORMATION ****
  -
  -news-muc1.de.cw.net Feeder
  -news-ffm2.de.cw.net Feeder
  -news-dus2.de.cw.net Feeder
  -news.ecrc.de        Feeder/Reader
   
     Debugging:
     $ ./.configure [wegen --with-dmalloc!]
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.44 -r1.45 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/07 15:02:08	1.44
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/10 06:50:56	1.45
  @@ -435,7 +435,11 @@
                   free(azHosts);
                   break;
               case 'm': /*POD [B<-m> I<mailfrom>] */
  -                    ctx->option_mailfrom = strdup(optarg);
  +                ctx->option_mailfrom = strdup(optarg);
  +                if (str_parse("<>", ctx->option_mailfrom) == -1) {
  +                    fprintf(stderr, "%s:Error: illegal regex \"%s\" to option -m.\n", ctx->progname, ctx->option_mailfrom);
  +                    exit(ERR_EXECUTION);
  +                }
                   break;
               case 'n': /*POD [B<-n> I<nodename>] */
                   if (strlen(optarg) > sizeof(ctx->uname.nodename)-1) {
  @@ -1087,6 +1091,21 @@
           return LMTP_OK;
       }
       
  +    /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   550 Requested action not taken: mailbox unavailable
  +     *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
  +     *  RFC1893 3.5 Network and Routing Status          X.7.1   Delivery not authorized, message refused
  +     */
  +    if ((ctx->option_mailfrom != NULL) &&
  +        (str_parse(ctx->msg->mail_from, ctx->option_mailfrom) <= 0)) {
  +        res.statuscode = "550";
  +        res.dsncode    = "5.7.1";
  +        res.statusmsg  = "Delivery not authorized, message refused.";
  +        lmtp_response(lmtp, &res);
  +        msg_destroy(ctx->msg);
  +        ctx->msg = NULL;
  +        return LMTP_OK;
  +    }
  +
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   250 Requested mail action okay, completed
        *  RFC1893 2. Status Codes                         2.X.X   Success
        *  RFC1893 3.5 Network and Routing Status          X.1.0   Other address status

From ossp-cvs-owner@ossp.org  Mon Sep 10 08:54:07 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8A6s6E40403; Mon, 10 Sep 2001 08:54:06 +0200 (CEST)
Date: Mon, 10 Sep 2001 08:54:06 +0200 (CEST)
Message-Id: <200109100654.f8A6s6E40403@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c lmtp2nntp.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   10-Sep-2001 08:54:06
  Branch: HEAD                             Handle: 2001091007540600

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c lmtp2nntp.h

  Log:
    added *lot* of l2 logging

  Summary:
    Revision    Changes     Path
    1.46        +124 -88    ossp-pkg/lmtp2nntp/lmtp2nntp.c
    1.3         +9  -0      ossp-pkg/lmtp2nntp/lmtp2nntp.h
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.45 -r1.46 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/10 06:50:56	1.45
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/10 06:54:06	1.46
  @@ -72,15 +72,15 @@
   #define STDSTRLEN 128
   #define MAXNEWSSERVICES 16
   
  -extern void lmtp_debug_dumplmtp(lmtp_t *lmtp);
  +//FIXME extern void lmtp_debug_dumplmtp(lmtp_t *lmtp);
   
  -static lmtp_rc_t lmtp_cb_lhlo   (lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *ctx);
  -static lmtp_rc_t lmtp_cb_mail   (lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *ctx);
  -static lmtp_rc_t lmtp_cb_rcpt   (lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *ctx);
  -static lmtp_rc_t lmtp_cb_data   (lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *ctx);
  -static lmtp_rc_t lmtp_cb_noop   (lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *ctx);
  -static lmtp_rc_t lmtp_cb_rset   (lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *ctx);
  -static lmtp_rc_t lmtp_cb_quit   (lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *ctx);
  +static lmtp_rc_t lmtp_cb_lhlo(lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *ctx);
  +static lmtp_rc_t lmtp_cb_mail(lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *ctx);
  +static lmtp_rc_t lmtp_cb_rcpt(lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *ctx);
  +static lmtp_rc_t lmtp_cb_data(lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *ctx);
  +static lmtp_rc_t lmtp_cb_noop(lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *ctx);
  +static lmtp_rc_t lmtp_cb_rset(lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *ctx);
  +static lmtp_rc_t lmtp_cb_quit(lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *ctx);
   
   static int helo_rfc0821domain(char *msg, char **domain);
   static int helo_rfc1035domain(char *msg, char **domain);
  @@ -611,9 +611,10 @@
       lmtp_loop(lmtp);
   
       /* graceful shutdown */
  -    log0(ctx, INFO, "%P: graceful shutdown, no more logging until exit");
       lmtp_gfs_quit(ctx);
       lmtp_gfs_lhlo(ctx);
  +    log0(ctx, INFO, "%P: graceful shutdown, no more logging until exit");
  +    l2_stream_destroy(ctx->l2);
       lmtp_destroy(lmtp);
       if (ctx->option_logfile != NULL)
           free(ctx->option_logfile);
  @@ -624,7 +625,6 @@
       if (ctx != NULL)
           free(ctx);
       str_parse(NULL, NULL);
  -    l2_stream_destroy(ctx->l2);
   
       return 0;
   }
  @@ -722,14 +722,14 @@
        *  HELO <SP> <domain> <CRLF>
        */
       lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx;
  -    lmtp_res_t res;
  -    nntp_rc_t rc;
  -    char str[STDSTRLEN];
  -    int bOk;
  -    int i;
  -    nntp_io_t nntp_io;
  +    nntp_rc_t    rc;
  +    lmtp_res_t   res;
  +    char         str[STDSTRLEN];
  +    int          bOk;
  +    int          i;
  +    nntp_io_t    nntp_io;
   
  -    log0(ctx, INFO, "lmtp_cb_lhlo");
  +    log1(ctx, INFO, "lmtp_cb_lhlo < %s", req->msg);
   
       nntp_io.ctx    = ctx;
       nntp_io.select = NULL;
  @@ -740,66 +740,72 @@
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.0.0   Other undefined Status
        */
  +    log0(ctx, TRACE, "checking for Duplicate LHLO");
       if (ctx->session.lhlo_seen) {
           res.statuscode = "503";
           res.dsncode    = "5.0.0";
           res.statusmsg  = "Duplicate LHLO.";
  -        lmtp_response(lmtp, &res);
  -        return LMTP_OK;
  +        CU(LMTP_OK);
       }
   
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   501 Syntax error in parameters or arguments
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.0.0   Other undefined Status
        */
  +    log0(ctx, TRACE, "checking lhlo_domain to match either RFC0821 or RFC1035 syntax");
       if (! (   helo_rfc0821domain(req->msg, &ctx->session.lhlo_domain) > 0
              || helo_rfc1035domain(req->msg, &ctx->session.lhlo_domain) > 0)) {
           res.statuscode = "501";
           res.dsncode    = "5.0.0";
           res.statusmsg  = "Please identify yourself. Domain must match RFC0821/RFC1035.";
  -        lmtp_response(lmtp, &res);
  -        return LMTP_OK;
  +        CU(LMTP_OK);
       }
   
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   451 Requested action aborted: local error in processing
        *  RFC1893 2. Status Codes                         4.X.X   Persistent Transient Failure
        *  RFC1893 3.5 Network and Routing Status          X.3.5   System incorrectly configured
        */
  +    log0(ctx, TRACE, "check if at least one NNTP service was successfully configured");
       if (ctx->nsc == 0) {
           res.statuscode = "451";
           res.dsncode    = "4.3.5";
           res.statusmsg  = "No valid NNTP services configured.";
  -        lmtp_response(lmtp, &res);
  -        return LMTP_OK;
  +        CU(LMTP_OK);
       }
   
  +    log0(ctx, TRACE, "try to establish a session to any configured NNTP services");
       i = 0;
       do {
  +        log1(ctx, DEBUG, "trying ns[%d]", i);
           bOk = TRUE;
  +        log2(ctx, TRACE, "try %s:%s", ctx->ns[i].h, ctx->ns[i].p);
  +
           if (bOk && (ctx->saBind != NULL)) {
  -            log0(ctx, DEBUG, "bind");
  +            log2(ctx, DEBUG, "bind local socket to %s:%s", ctx->cpBindh, ctx->cpBindp);
               if (bind(ctx->ns[i].s, ctx->saBind->sa_buf, ctx->saBind->sa_len) < 0) {
                   bOk = FALSE;
                   log0(ctx, ERROR, "bind=%m");
               }
           }
  +
           if (bOk) {
               if(ctx->option_waittime > 0) {
  -                log0(ctx, DEBUG, "connect_nonb");
  +                log1(ctx, DEBUG, "connect_nonb with waittime=%d", ctx->option_waittime);
                   if (connect_nonb(ctx->ns[i].s, ctx->ns[i].sa->sa_buf, ctx->ns[i].sa->sa_len, 
                                ctx->option_waittime) < 0) {
                       bOk = FALSE;
  -                    log0(ctx, ERROR, "connect_nonb=%m");
  +                    log0(ctx, WARNING, "connect_nonb=%m");
                   }
               }
               else {
                   log0(ctx, DEBUG, "connect");
                   if (connect(ctx->ns[i].s, ctx->ns[i].sa->sa_buf, ctx->ns[i].sa->sa_len) < 0) {
                       bOk = FALSE;
  -                    log0(ctx, ERROR, "connect=%m");
  +                    log0(ctx, WARNING, "connect=%m");
                   }
               }
           }
  +
           if (bOk) {
               log0(ctx, DEBUG, "nntp_create");
               if ((ctx->ns[i].nntp = nntp_create(ctx->ns[i].s, ctx->ns[i].s, 
  @@ -809,10 +815,12 @@
                   log0(ctx, ERROR, "nntp_create failed");
               }
           }
  +
           if (bOk && ctx->option_waittime >= 0) {
  -            log1(ctx, DEBUG, "nntp_timeout(%d)", ctx->option_waittime);
  +            log1(ctx, DEBUG, "nntp_timeout with %d", ctx->option_waittime);
               nntp_timeout(ctx->ns[i].nntp, ctx->option_waittime);
           }
  +
           if (bOk) {
               log0(ctx, DEBUG, "nntp_init");
               if ((rc = nntp_init(ctx->ns[i].nntp)) != NNTP_OK) {
  @@ -820,12 +828,14 @@
                   log2(ctx, ERROR, "nntp_init=(%m) %s", rc, nntp_error(rc));
               }
           }
  +
           if (bOk) {
  -            log0(ctx, INFO, "nntp connection successfully established");
  +            log2(ctx, INFO, "NNTP session to %s:%s successfully established", ctx->ns[i].h, ctx->ns[i].p);
               i++;
           }
           else {
  -            log0(ctx, INFO, "nntp connection establishment failed");
  +            log2(ctx, WARNING, "NNTP session establishment to %s:%s failed", ctx->ns[i].h, ctx->ns[i].p);
  +            log1(ctx, DEBUG, "removing ns[%d] from list", i);
               if (i < --ctx->nsc) {
                   memcpy(&ctx->ns[i], &ctx->ns[i+1], (ctx->nsc - i ) * sizeof(struct ns));
               }
  @@ -836,12 +846,13 @@
        *  RFC1893 2. Status Codes                         4.X.X   Persistent Transient Failure
        *  RFC1893 3.5 Network and Routing Status          X.4.1   No answer from host
        */
  +    log0(ctx, DEBUG, "check if at least one NNTP session successfully established");
       if (ctx->nsc == 0) {
  +        log0(ctx, ERROR, "no NNTP session established");
           res.statuscode = "421";
           res.dsncode    = "4.4.1";
  -        res.statusmsg  = "All attempts connecting to NNTP services failed.";
  -        lmtp_response(lmtp, &res);
  -        return LMTP_OK;
  +        res.statusmsg  = "No NNTP session established.";
  +        CU(LMTP_OK);
       }
           
       ctx->session.lhlo_seen = TRUE;
  @@ -853,21 +864,26 @@
                  "ENHANCEDSTATUSCODES\n"               /* RFC2034 */
                  "DSN\n"                               /* RFC1894 */
                  "PIPELINING\n"                        /* RFC1854 */
  -               "8BITMIME",                           /* RFC1652 */
  +               "8BITMIME\n"                          /* RFC1652 */
  +               "ENVID",                              /* FIXME */
                  ctx->uname.nodename,
                  ctx->session.lhlo_domain);
       res.statuscode = "250";
       res.dsncode    = NULL; /* DSN not used for greeting */
       res.statusmsg  = str;
  +    CU(LMTP_OK);
  +
  +    CUS:
       lmtp_response(lmtp, &res);
  -    return LMTP_OK;
  +    return rc;
   }
   
   static void lmtp_gfs_lhlo(lmtp2nntp_t *ctx)
   {
  -    /* graceful shutdown */
       int i;
   
  +    log0(ctx, INFO, "lmtp_gfs_lhlo - graceful shutdown");
  +
       for (i = 0; i < ctx->nsc; i++) {
           if (ctx->ns[i].nntp != NULL)
               nntp_destroy(ctx->ns[i].nntp);
  @@ -1009,44 +1025,45 @@
   static lmtp_rc_t lmtp_cb_mail(lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *_ctx)
   {
       lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx;
  -    lmtp_res_t res;
  +    lmtp_rc_t    rc;
  +    lmtp_res_t   res;
   
  -    log0(ctx, INFO, "lmtp_cb_mail");
  +    log1(ctx, INFO, "lmtp_cb_mail < %s", req->msg);
   
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   553 Requested action not taken: mailbox name not allowed
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.1.8   Bad sender's system address
        */
  +    log0(ctx, TRACE, "checking for previous LHLO");
       if (!ctx->session.lhlo_seen) {
           res.statuscode = "553";
           res.dsncode    = "5.1.8";
           res.statusmsg  = "friendly people say LHLO to open a transmission channel.";
  -        lmtp_response(lmtp, &res);
  -        return LMTP_OK;
  +        CU(LMTP_OK);
       }
   
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   503 Bad sequence of commands
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.5.0   Other or undefined protocol status
        */
  +    log0(ctx, TRACE, "checking for previous MAIL");
       if (ctx->msg != NULL) {
           res.statuscode = "503";
           res.dsncode    = "5.5.0";
           res.statusmsg  = "Sender already specified.";
  -        lmtp_response(lmtp, &res);
  -        return LMTP_OK;
  +        CU(LMTP_OK);
       }
   
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   452 Requested action not taken: insufficient system storage
        *  RFC1893 2. Status Codes                         4.X.X   Persistent Transient Failure
        *  RFC1893 3.5 Network and Routing Status          X.3.1   Mail system full 
        */
  +    log0(ctx, TRACE, "msg_create");
       if ((ctx->msg = msg_create()) == NULL) {
           res.statuscode = "452";
           res.dsncode    = "4.3.1";
           res.statusmsg  = "Internal error - memory.";
  -        lmtp_response(lmtp, &res);
  -        return LMTP_ERR_MEM;
  +        CU(LMTP_ERR_MEM);
       }
   
       /*  RFC1652 2. Framework for the 8bit MIME Transport Extension
  @@ -1066,44 +1083,38 @@
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.1.7   Bad sender's mailbox address syntax
        */
  +    log0(ctx, TRACE, "checking if sender address is a domain name");
       if (str_parse(req->msg, "m/^MAIL From:\\s*<(?:.+@.+)>/i") <= 0) {
           res.statuscode = "553";
           res.dsncode    = "5.1.7";
           res.statusmsg  = "Domain name required for sender address.";
  -        lmtp_response(lmtp, &res);
  -        msg_destroy(ctx->msg);
  -        ctx->msg = NULL;
  -        return LMTP_OK;
  +        CU(LMTP_OK);
       }
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   501 Syntax error in parameters or arguments
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.5.4   Invalid command arguments
        */
  +    log0(ctx, TRACE, "checking BODY keyword");
       if (str_parse(req->msg, "m/^MAIL From:\\s*<(.+@.+)>"
                               "(?:\\s+BODY=(?:7BIT|8BITMIME)\\s*)?$/i", 
                               &ctx->msg->mail_from) <= 0) {
           res.statuscode = "501";
           res.dsncode    = "5.5.4";
           res.statusmsg  = "Unknown parameter for keyword BODY.";
  -        lmtp_response(lmtp, &res);
  -        msg_destroy(ctx->msg);
  -        ctx->msg = NULL;
  -        return LMTP_OK;
  +        CU(LMTP_OK);
       }
       
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   550 Requested action not taken: mailbox unavailable
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.7.1   Delivery not authorized, message refused
        */
  +    log0(ctx, TRACE, "checking if sender is allowed");
       if ((ctx->option_mailfrom != NULL) &&
           (str_parse(ctx->msg->mail_from, ctx->option_mailfrom) <= 0)) {
           res.statuscode = "550";
           res.dsncode    = "5.7.1";
           res.statusmsg  = "Delivery not authorized, message refused.";
  -        lmtp_response(lmtp, &res);
  -        msg_destroy(ctx->msg);
  -        ctx->msg = NULL;
  -        return LMTP_OK;
  +        CU(LMTP_OK);
       }
   
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   250 Requested mail action okay, completed
  @@ -1115,51 +1126,60 @@
       res.statusmsg  = "Sender ok.";
       lmtp_response(lmtp, &res);
       return LMTP_OK;
  +
  +    CUS:
  +    lmtp_response(lmtp, &res);
  +    if (ctx->msg != NULL) {
  +        msg_destroy(ctx->msg);
  +        ctx->msg = NULL;
  +    }
  +    return rc;
   }
   
   static lmtp_rc_t lmtp_cb_rcpt(lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *_ctx)
   {
  -    lmtp_res_t res;
  +    lmtp_res_t   res;
  +    lmtp_rc_t    rc;
       lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx;
  -    char *cp;
  -    char *group;
  +    char        *cp;
  +    char        *group;
   
  -    log0(ctx, INFO, "lmtp_cb_rcpt");
  +    log1(ctx, INFO, "lmtp_cb_rcpt < %s", req->msg);
   
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   503 Bad sequence of commands
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.5.0   Other or undefined protocol status
        */
  +    log0(ctx, TRACE, "checking for previous MAIL");
       if ((ctx->msg == NULL) || (ctx->msg->mail_from == NULL)) {
           res.statuscode = "503";
           res.dsncode    = "5.5.0";
           res.statusmsg  = "specify sender with MAIL first.";
  -        lmtp_response(lmtp, &res);
  -        return LMTP_OK;
  +        CU(LMTP_OK);
       }
   
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   501 Syntax error in parameters or arguments
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.5.2   Syntax error
        */
  +    log0(ctx, TRACE, "checking parameter syntax");
       if (str_parse(req->msg, "m/^RCPT To:\\s*(.+)$/i", &cp) <= 0) {
           res.statuscode = "501";
           res.dsncode    = "5.5.2";
           res.statusmsg  = "Syntax error in parameters.";
  -        lmtp_response(lmtp, &res);
  -        return LMTP_OK;
  +        CU(LMTP_OK);
       }
       
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   550 Requested action not taken: mailbox unavailable
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.1.1   Bad destination mailbox address
        */
  +    log0(ctx, TRACE, "checking for empty parameter");
       if ((cp == NULL) || (strlen(cp) == 0)) {
           res.statuscode = "550";
           res.dsncode    = "5.1.1";
  -        res.statusmsg  = "nul Recipient/ Group.";
  -        lmtp_response(lmtp, &res);
  -        return LMTP_OK;
  +        res.statusmsg  = "empty Recipient/ Group.";
  +        CU(LMTP_OK);
       }
   
       /* in GROUPMODE = ARG|HEADER recipient must be acknowledged and stored to
  @@ -1172,23 +1192,26 @@
        *  RFC1893 3.5 Network and Routing Status          X.1.1   Bad destination mailbox address
        *                                                  X.7.2   Mailing list expansion prohibited
        */
  +    log1(ctx, DEBUG, "ctx->option_groupmode=%d", ctx->option_groupmode);
       if (ctx->option_groupmode == GROUPMODE_ENVELOPE) {
  +        log0(ctx, TRACE, "groupmode=envelope; transform recipient into group");
           if (str_parse(cp, "m/^<(.+)?@[^@]+>$/i", &group) <= 0) {
               res.statuscode = "550";
               res.dsncode    = "5.1.1";
               res.statusmsg  = "Recipient did not transform into group.";
  -            lmtp_response(lmtp, &res);
  -            return LMTP_OK;
  +            CU(LMTP_OK);
           }
  +        log1(ctx, TRACE, "groupmode=envelope; match group %s", group);
           if (!groupmatch(ctx->azGroupargs, ctx->asGroupargs, group)) {
               res.statuscode = "550";
               res.dsncode    = "5.7.2";
               res.statusmsg  = "unmatched Group.";
  -            lmtp_response(lmtp, &res);
  -            return LMTP_OK;
  +            CU(LMTP_OK);
           }
  +        log1(ctx, TRACE, "memorize group %s", group);
           argz_add(&ctx->msg->azEnvgroups, &ctx->msg->asEnvgroups, group);
       }
  +    log1(ctx, TRACE, "memorize recipient %s", cp);
       argz_add(&ctx->msg->azRcpt, &ctx->msg->asRcpt, cp);
   
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   250 Requested mail action okay, completed
  @@ -1198,8 +1221,11 @@
       res.statuscode = "250";
       res.dsncode    = "2.1.5";
       res.statusmsg  = ctx->option_groupmode == GROUPMODE_ENVELOPE ? "Group accepted." : "Recipient accepted.";
  +    CU(LMTP_OK);
  +
  +    CUS:
       lmtp_response(lmtp, &res);
  -    return LMTP_OK;
  +    return rc;
   }
   
   int groupmatch(char *azPattern, size_t asPattern, char *cpGroup)
  @@ -1218,23 +1244,24 @@
   
   static lmtp_rc_t lmtp_cb_data(lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *_ctx)
   {
  -    lmtp_res_t res;
  -    lmtp_rc_t rc = LMTP_OK;
       lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx;
  -    char   *azErr;
  -    size_t  asErr;
  -    char errorstring[STDSTRLEN];
  -    char *rcpt;
  -    int i;
  -    int bSuccess;
  -    char *cp;
  +    lmtp_rc_t    rc = LMTP_OK;
  +    lmtp_res_t   res;
  +    char        *azErr;
  +    size_t       asErr;
  +    char         errorstring[STDSTRLEN];
  +    char        *rcpt;
  +    int          i;
  +    int          bSuccess;
  +    char        *cp;
   
  -    log0(ctx, INFO, "lmtp_cb_data");
  +    log1(ctx, INFO, "lmtp_cb_data < %s", req->msg);
   
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   503 Bad sequence of commands
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.5.0   Other or undefined protocol status
        */
  +    log0(ctx, TRACE, "checking for previous RCPT");
       if ((ctx->msg == NULL) || (argz_count(ctx->msg->azRcpt, ctx->msg->asRcpt) == 0)) {
           res.statuscode = "503";
           res.dsncode    = "5.5.0";
  @@ -1245,18 +1272,20 @@
   
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   354 Start mail input; end with <CRLF>.<CRLF>
        */
  +    log0(ctx, TRACE, "tell remote to send message now");
       res.statuscode = "354";
       res.dsncode    = NULL; /* DSN not used for data */
       res.statusmsg  = "Enter mail, end with \".\" on a line by itself";
       lmtp_response(lmtp, &res);
   
  +    log1(ctx, TRACE, "lmtp_readmsg, maximum size to accept = %d", ctx->option_maxmessagesize);
       rc = lmtp_readmsg(lmtp, &ctx->msg->cpMsg, ctx->option_maxmessagesize);
   
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   552 Requested mail action aborted: exceeded storage allocation
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.2.3   Message length exceeds administrative limit.
  -
        */
  +    log0(ctx, TRACE, "checking for excessive message size");
       if (rc == LMTP_ERR_OVERFLOW) {
           str_format(errorstring, sizeof(errorstring), "Message length exceeds administrative limit. %s", lmtp_error(rc));
           res.statuscode = "552";
  @@ -1273,6 +1302,7 @@
        *  RFC1893 2. Status Codes                         4.X.X   Persistent Transient Failure
        *  RFC1893 3.5 Network and Routing Status          X.3.2   System not accepting network messages
        */
  +    log0(ctx, TRACE, "checking for system error");
       if (rc == LMTP_ERR_SYSTEM) {
           str_format(errorstring, sizeof(errorstring), "System error reading message: %s", strerror(errno));
           res.statuscode = "451";
  @@ -1289,6 +1319,7 @@
        *  RFC1893 2. Status Codes                         4.X.X   Persistent Transient Failure
        *  RFC1893 3.5 Network and Routing Status          X.3.2   System not accepting network messages
        */
  +    log0(ctx, TRACE, "checking for other error");
       if(rc != LMTP_OK) {
           str_format(errorstring, sizeof(errorstring), "Unknown error reading message: %s", lmtp_error(rc));
           res.statuscode = "451";
  @@ -1305,6 +1336,7 @@
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.6.5   Conversion Failed
        */
  +    log0(ctx, TRACE, "split message");
       if ((rc = msg_split(ctx->msg)) != MSG_OK) {
           str_format(errorstring, sizeof(errorstring), "Error splitting message: %s", msg_error(rc));
           res.statuscode = "554";
  @@ -1385,6 +1417,7 @@
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.6.5   Conversion Failed
        */
  +    log0(ctx, TRACE, "join message");
       if ((rc = msg_join(ctx->msg)) != MSG_OK) {
           str_format(errorstring, sizeof(errorstring), "Error joining message: %s", msg_error(rc));
           res.statuscode = "554";
  @@ -1397,6 +1430,7 @@
           return LMTP_OK;
       }
   
  +    log0(ctx, TRACE, "deliver message");
       bSuccess = NNTP_EOF; /* assume a hard error for the worst case */
       for (i = 0; i < ctx->nsc; i++) {
           switch (ctx->option_deliverymode) {
  @@ -1494,7 +1528,7 @@
       lmtp_res_t res;
       lmtp_rc_t rc = LMTP_OK;
   
  -    log0(ctx, INFO, "lmtp_cb_noop");
  +    log1(ctx, INFO, "lmtp_cb_noop < %s", req->msg);
   
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   250 Requested mail action okay, completed
        *  RFC1893 2. Status Codes                         2.X.X   Success
  @@ -1513,7 +1547,7 @@
       lmtp_res_t res;
       lmtp_rc_t rc = LMTP_OK;
   
  -    log0(ctx, INFO, "lmtp_cb_rset");
  +    log1(ctx, INFO, "lmtp_cb_rset < %s", req->msg);
   
       lmtp_gfs_rset(ctx);
   
  @@ -1530,7 +1564,8 @@
   
   static void lmtp_gfs_rset(lmtp2nntp_t *ctx)
   {
  -    /* graceful shutdown */
  +    log0(ctx, INFO, "lmtp_gfs_rset - graceful shutdown");
  +
       if (ctx->msg != NULL) {
           msg_destroy(ctx->msg);
           ctx->msg = NULL;
  @@ -1543,7 +1578,7 @@
       lmtp_res_t res;
       lmtp_rc_t rc = LMTP_EOF;
   
  -    log0(ctx, INFO, "lmtp_cb_quit");
  +    log1(ctx, INFO, "lmtp_cb_quit < %s", req->msg);
   
       lmtp_gfs_quit(ctx);
   
  @@ -1560,7 +1595,8 @@
   
   static void lmtp_gfs_quit(lmtp2nntp_t *ctx)
   {
  -    /* graceful shutdown */
  +    log0(ctx, INFO, "lmtp_gfs_quit - graceful shutdown");
  +
       lmtp_gfs_rset(ctx);
       resetsession(&ctx->session);
   }
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 lmtp2nntp.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.h	2001/09/07 15:02:08	1.2
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.h	2001/09/10 06:54:06	1.3
  @@ -42,5 +42,14 @@
       l2_stream_log((ctx)->l2, L2_LEVEL_##level, "%P: " msg, a1, a2)
   #define log3(ctx,level,msg,a1,a2,a3) \
       l2_stream_log((ctx)->l2, L2_LEVEL_##level, "%P: " msg, a1, a2, a3)
  +#define log4(ctx,level,msg,a1,a2,a3,a4) \
  +    l2_stream_log((ctx)->l2, L2_LEVEL_##level, "%P: " msg, a1, a2, a3, a4)
  +
  +#define ZERO 0
  +#define STMT(stuff) do { stuff } while (ZERO)
  +#define CU(returncode) STMT( rc = returncode; goto CUS; )
  +//FIXME #define VCU STMT( goto CUS; )
  +//FIXME #define RETURN_WVAL(val) return (val)
  +//FIXME #define RETURN_EXRC return (rc)
   
   #endif /* __LMTP2NNTP_H__ */

From ossp-cvs-owner@ossp.org  Mon Sep 10 08:55:35 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8A6tYm40562; Mon, 10 Sep 2001 08:55:34 +0200 (CEST)
Date: Mon, 10 Sep 2001 08:55:34 +0200 (CEST)
Message-Id: <200109100655.f8A6tYm40562@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp .configure ossp-pkg/lmtp2nntp/test run....
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   10-Sep-2001 08:55:34
  Branch: HEAD                             Handle: 2001091007553300

  Modified files:
    ossp-pkg/lmtp2nntp      .configure
    ossp-pkg/lmtp2nntp/test run.sh

  Log:
    change test modifications and enable dmalloc debugging

  Summary:
    Revision    Changes     Path
    1.8         +1  -1      ossp-pkg/lmtp2nntp/.configure
    1.13        +7  -4      ossp-pkg/lmtp2nntp/test/run.sh
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/.configure
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 .configure
  --- ossp-pkg/lmtp2nntp/.configure	2001/09/05 09:10:28	1.7
  +++ ossp-pkg/lmtp2nntp/.configure	2001/09/10 06:55:33	1.8
  @@ -3,8 +3,8 @@
       ./autogen.sh
   fi
   PATH=/cw/bin:$PATH
  +#  --with-dmalloc=/cw \
   ./configure \
      --enable-debug \
      --prefix=/tmp/lmtp2nntp
   
  -#  --with-dmalloc=/cw \
  Index: ossp-pkg/lmtp2nntp/test/run.sh
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 run.sh
  --- ossp-pkg/lmtp2nntp/test/run.sh	2001/09/07 13:53:17	1.12
  +++ ossp-pkg/lmtp2nntp/test/run.sh	2001/09/10 06:55:33	1.13
  @@ -13,13 +13,15 @@
       z="Z"
       e="E"
       if [ -e /tmp/tracing ]; then
  -        ssh -t -x root@localhost exec rm -f /tmp/tracing
  +        rm -f /tmp/tracing
       fi
       touch /tmp/tracing
  +    chmod 666 /tmp/tracing
       if [ -e /tmp/testmessage ]; then
  -        ssh -t -x root@localhost exec rm -f /tmp/testmessage
  +        rm -f /tmp/testmessage
       fi
       touch /tmp/testmessage
  +    chmod 666 /tmp/testmessage
   }
   
   post1000 ()
  @@ -43,7 +45,8 @@
   {
       newmsg lmtp
       cat /tmp/testmessage \
  -     | ../lmtp2nntp -l debug:/tmp/tracing -w 1 -d $1 -g $2 -b dev12 -h dev16,141.1.23.116:nntp -h dev16.de.cw.net:119 $3 >/dev/null; echo $?
  +     | ../lmtp2nntp -l debug:/tmp/tracing -w 1 -d $1 -g $2 -b 127.0.0.1 -h 127.0.0.1 $3 >/dev/null; echo $?
  +     #| ../lmtp2nntp -l debug:/tmp/tracing -w 1 -d $1 -g $2 -b dev12 -h dev16,141.1.23.116:nntp -h dev16.de.cw.net:119 $3 >/dev/null; echo $?
   }
   
   sendmaildup()
  @@ -80,7 +83,7 @@
   {
       if [ -r /tmp/tracing ]
       then
  -        echo more /tmp/tracing
  +        less -S /tmp/tracing
           #tail -f /tmp/tracing
       fi
   }

From ossp-cvs-owner@ossp.org  Mon Sep 10 11:48:50 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8A9mm660847; Mon, 10 Sep 2001 11:48:48 +0200 (CEST)
Date: Mon, 10 Sep 2001 11:48:48 +0200 (CEST)
Message-Id: <200109100948.f8A9mm660847@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 .cvsignore configure.ac l2.h l2.h.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   10-Sep-2001 11:48:48
  Branch: HEAD                             Handle: 197001010100001000111728

  Added files:
    ossp-pkg/l2             l2.h.in
  Modified files:
    ossp-pkg/l2             .cvsignore configure.ac
  Removed files:
    ossp-pkg/l2             l2.h

  Log:
    add version information to public API

  Summary:
    Revision    Changes     Path
    1.8         +1  -0      ossp-pkg/l2/.cvsignore
    1.5         +1  -0      ossp-pkg/l2/configure.ac
    NONE        +0  -203    ossp-pkg/l2/l2.h
    1.1         +206 -0     ossp-pkg/l2/l2.h.in
  ____________________________________________________________________________

  Index: ossp-pkg/l2/.cvsignore
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 .cvsignore
  --- ossp-pkg/l2/.cvsignore	2001/09/04 16:00:33	1.7
  +++ ossp-pkg/l2/.cvsignore	2001/09/10 09:48:48	1.8
  @@ -18,3 +18,4 @@
   l2.3
   l2_ut_pcre_gen
   l2_ut_pcre_tab.c
  +l2.h
  Index: ossp-pkg/l2/configure.ac
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 configure.ac
  --- ossp-pkg/l2/configure.ac	2001/09/09 15:55:08	1.4
  +++ ossp-pkg/l2/configure.ac	2001/09/10 09:48:48	1.5
  @@ -79,6 +79,7 @@
   
   AC_OUTPUT(dnl
   Makefile dnl
  +l2.h dnl
   l2-config dnl
   ,dnl
   chmod a+x l2-config
    Index: ossp-pkg/l2/l2.h.in
  ============================================================
  $ cvs update -p -r1.1 l2.h.in
  /*
  **  L2 - OSSP Logging Library
  **  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP L2, a flexible logging library which
  **  can be found at http://www.ossp.org/pkg/l2/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  l2.h: C API
  */
  
  #ifndef __L2_H__
  #define __L2_H__
  
  #define L2_VERSION_STR @L2_VERSION_STR@
  #define L2_VERSION_HEX @L2_VERSION_HEX@
  
  /* include standard environment we are based on */
  #include <stdio.h>
  #include <stdlib.h>
  #include <stdarg.h>
  #include <string.h>
  
  /* counterbalance poor standard environments */ 
  #ifndef NULL
  #define NULL (void *)0
  #endif
  #ifndef FALSE
  #define FALSE (0)
  #endif
  #ifndef TRUE
  #define TRUE (!FALSE)
  #endif
  
  /* forward declarations for opaque data structures */
  union  l2_context_un;
  struct l2_param_st;
  struct l2_stream_st;
  struct l2_channel_st;
  struct l2_handler_st;
  
  /* corresponding data types for data structures */
  typedef union  l2_context_un l2_context_t;
  typedef struct l2_param_st   l2_param_t;
  typedef struct l2_handler_st l2_handler_t;
  typedef struct l2_stream_st  l2_stream_t;
  typedef struct l2_channel_st l2_channel_t;
  
  /* list of logging levels (high to low priority; low to high amount of logging) */
  typedef enum {
      L2_LEVEL_PANIC    = (1 << 0),
      L2_LEVEL_CRITICAL = (1 << 1),
      L2_LEVEL_ERROR    = (1 << 2),
      L2_LEVEL_WARNING  = (1 << 3),
      L2_LEVEL_NOTICE   = (1 << 4),
      L2_LEVEL_INFO     = (1 << 5),  
      L2_LEVEL_TRACE    = (1 << 6),
      L2_LEVEL_DEBUG    = (1 << 7)
  } l2_level_t;
  #define L2_LEVEL_CUSTOM(n) (1 << (8+(n))
  
  /* all levels from highest (PANIC) to and including a particular low level */
  #define L2_LEVEL_UPTO(level) \
      (((level)-1)|(level))
  
  /* list of return values */
  typedef enum {
      L2_OK,
      L2_ERR_ARG,    /* invalid argument */
      L2_ERR_USE,    /* invalid usage */
      L2_ERR_MEM,    /* no more memory available */
      L2_ERR_SYS,    /* system error (see errno) */
      L2_ERR_IO,     /* input/output error */
      L2_ERR_FMT,    /* message formating error */
      L2_ERR_INT     /* internal error */
  } l2_result_t;
  
  /* context union for storing data */
  union l2_context_un {
      char    c;
      short   s;
      int     i;
      long    l;
      float   f;
      double  d;
      char   *cp;
      void   *vp;
  };
  
  /* list of types for storing data */
  typedef enum {
      L2_TYPE_CHAR,
      L2_TYPE_SHORT,
      L2_TYPE_INT,
      L2_TYPE_LONG,
      L2_TYPE_FLOAT,
      L2_TYPE_DOUBLE,
      L2_TYPE_STRING,
      L2_TYPE_CHARPTR,
      L2_TYPE_VOIDPTR
  } l2_type_t;
  
  /* parameter specification */
  struct l2_param_st {
      char     *name;
      l2_type_t type;
      void     *store;
  };
  
  /* parameter constructors */
  #define L2_PARAM_SET(pa,n,t,s) \
      pa.name = #n, pa.type = L2_TYPE_##t, pa.store = s
  #define L2_PARAM_END(pa) \
      pa.name = NULL
  
  /* list of handler types */
  typedef enum {
      L2_CHANNEL_FILTER,
      L2_CHANNEL_OUTPUT
  } l2_chtype_t;
  
  /* channel handler specification structure */
  struct l2_handler_st {
      l2_chtype_t type;
      l2_result_t (*create)   (l2_context_t *ctx, l2_channel_t *ch);
      l2_result_t (*configure)(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap);
      l2_result_t (*open)     (l2_context_t *ctx, l2_channel_t *ch);
      l2_result_t (*write)    (l2_context_t *ctx, l2_channel_t *ch, const char *buf, size_t bufsize);
      l2_result_t (*flush)    (l2_context_t *ctx, l2_channel_t *ch);
      l2_result_t (*close)    (l2_context_t *ctx, l2_channel_t *ch);
      l2_result_t (*destroy)  (l2_context_t *ctx, l2_channel_t *ch);
  };
  
  /* type of formatter callback function */
  typedef l2_result_t (*l2_formatter_t)(
      l2_context_t *ctx,      /* application context */
      const char    id,       /* input  arg: format string id ('x' of '%x') */
      const char   *param,    /* input  arg: format string parameter ('foo' of '%{foo}x') */
      char         *bufptr,   /* input  arg: pointer to output buffer */
      size_t        bufsize,  /* input  arg: maximum size of output buffer */
      size_t       *buflen,   /* ouput  arg: written characters in output buffer */
      va_list      *ap        /* in/out arg: variable argument pointer */
  );
  
  /* list of shipped (output) channel handlers */
  extern l2_handler_t l2_handler_null;
  extern l2_handler_t l2_handler_fd;
  extern l2_handler_t l2_handler_file;
  extern l2_handler_t l2_handler_pipe;
  extern l2_handler_t l2_handler_socket;
  extern l2_handler_t l2_handler_syslog;
  extern l2_handler_t l2_handler_smtp;
  
  /* list of shipped (filter) channel handlers */
  extern l2_handler_t l2_handler_filter;
  extern l2_handler_t l2_handler_prefix;
  extern l2_handler_t l2_handler_buffer;
  
  /* channel operations */
  l2_channel_t *l2_channel_create     (l2_handler_t *h);
  l2_result_t   l2_channel_configure  (l2_channel_t *ch, const char *fmt, ...);
  l2_result_t   l2_channel_open       (l2_channel_t *ch);
  l2_result_t   l2_channel_write      (l2_channel_t *ch, const char *buf, size_t bufsize);
  l2_result_t   l2_channel_flush      (l2_channel_t *ch);
  l2_result_t   l2_channel_close      (l2_channel_t *ch);
  l2_result_t   l2_channel_destroy    (l2_channel_t *ch);
  l2_result_t   l2_channel_stack      (l2_channel_t *ch, l2_channel_t *chTop);
  l2_channel_t *l2_channel_downstream (l2_channel_t *ch);
  l2_chtype_t   l2_channel_type       (l2_channel_t *ch);
  
  /* stream operations */
  l2_stream_t  *l2_stream_create     (void);
  l2_result_t   l2_stream_channel    (l2_stream_t *st, l2_channel_t *ch, unsigned int levelmask);
  l2_result_t   l2_stream_formatter  (l2_stream_t *st, char id, l2_formatter_t cb, l2_context_t *ctx);
  l2_result_t   l2_stream_levels     (l2_stream_t *st, unsigned int levelmask);
  l2_result_t   l2_stream_log        (l2_stream_t *st, unsigned int level, const char *fmt, ...);
  l2_result_t   l2_stream_vlog       (l2_stream_t *st, unsigned int level, const char *fmt, va_list ap);
  l2_result_t   l2_stream_destroy    (l2_stream_t *st);
  
  /* utility operations */
  l2_result_t   l2_util_setparams    (l2_param_t p[], const char *fmt, va_list ap);
  l2_result_t   l2_util_l2s          (char *string,       size_t maxlen, int sep, unsigned int  levelmask);
  l2_result_t   l2_util_s2l          (const char *string, size_t maxlen, int sep, unsigned int *levelmask);
  l2_result_t   l2_util_fmt_string   (l2_context_t *, const char, const char *, char *, size_t, size_t *, va_list *);
  l2_result_t   l2_util_fmt_dump     (l2_context_t *, const char, const char *, char *, size_t, size_t *, va_list *);
  
  #endif /* __L2_H__ */
  

From ossp-cvs-owner@ossp.org  Mon Sep 10 11:54:42 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8A9sgg61304; Mon, 10 Sep 2001 11:54:42 +0200 (CEST)
Date: Mon, 10 Sep 2001 11:54:42 +0200 (CEST)
Message-Id: <200109100954.f8A9sgg61304@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.h.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   10-Sep-2001 11:54:42
  Branch: HEAD                             Handle: 2001091010544100

  Modified files:
    ossp-pkg/l2             l2.h.in

  Log:
    a string is a string ;)

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/l2/l2.h.in
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2.h.in
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 l2.h.in
  --- ossp-pkg/l2/l2.h.in	2001/09/10 09:48:48	1.1
  +++ ossp-pkg/l2/l2.h.in	2001/09/10 09:54:41	1.2
  @@ -30,7 +30,7 @@
   #ifndef __L2_H__
   #define __L2_H__
   
  -#define L2_VERSION_STR @L2_VERSION_STR@
  +#define L2_VERSION_STR "@L2_VERSION_STR@"
   #define L2_VERSION_HEX @L2_VERSION_HEX@
   
   /* include standard environment we are based on */

From ossp-cvs-owner@ossp.org  Mon Sep 10 11:55:15 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8A9tDI61391; Mon, 10 Sep 2001 11:55:13 +0200 (CEST)
Date: Mon, 10 Sep 2001 11:55:13 +0200 (CEST)
Message-Id: <200109100955.f8A9tDI61391@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str .cvsignore configure.ac str.h str.h.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   10-Sep-2001 11:55:13
  Branch: HEAD                             Handle: 197001010100001000112113

  Added files:
    ossp-pkg/str            str.h.in
  Modified files:
    ossp-pkg/str            .cvsignore configure.ac
  Removed files:
    ossp-pkg/str            str.h

  Log:
    add library version to public API

  Summary:
    Revision    Changes     Path
    1.10        +1  -0      ossp-pkg/str/.cvsignore
    1.4         +1  -0      ossp-pkg/str/configure.ac
    NONE        +0  -109    ossp-pkg/str/str.h
    1.1         +112 -0     ossp-pkg/str/str.h.in
  ____________________________________________________________________________

  Index: ossp-pkg/str/.cvsignore
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 .cvsignore
  --- ossp-pkg/str/.cvsignore	2001/09/05 08:30:59	1.9
  +++ ossp-pkg/str/.cvsignore	2001/09/10 09:55:13	1.10
  @@ -21,3 +21,4 @@
   shtool
   str.3
   str-config.1
  +str.h
  Index: ossp-pkg/str/configure.ac
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 configure.ac
  --- ossp-pkg/str/configure.ac	2001/08/16 13:21:22	1.3
  +++ ossp-pkg/str/configure.ac	2001/09/10 09:55:13	1.4
  @@ -37,6 +37,7 @@
   
   AC_OUTPUT(dnl
   Makefile dnl
  +str.h dnl
   str-config dnl
   ,dnl
   chmod a+x str-config
    Index: ossp-pkg/str/str.h.in
  ============================================================
  $ cvs update -p -r1.1 str.h.in
  /*
  **  Str - String Library
  **  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  **
  **  This file is part of Str, a string handling and manipulation 
  **  library which can be found at http://www.engelschall.com/sw/str/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  str.h: public API header
  */
  
  #ifndef _STR_H_
  #define _STR_H_
  
      /* C++ support */
  #ifdef __cplusplus
  #define BEGIN_DECLARATION extern "C" {
  #define END_DECLARATION   }
  #else
  #define BEGIN_DECLARATION /*nop*/
  #define END_DECLARATION   /*nop*/
  #endif
  
  #define STR_VERSION_STR "@STR_VERSION_STR@"
  #define STR_VERSION_HEX @STR_VERSION_HEX@
  
  #include <string.h>
  #include <sys/types.h>
  #include <stdarg.h>
  #include <ctype.h>
  
  /* true and false boolean values and corresponding type */
  #undef TRUE
  #undef FALSE
  #undef BOOL
  #ifdef __cplusplus
  #define BOOL  bool
  #define TRUE  true
  #define FALSE false
  #else
  #define BOOL  char
  #define TRUE  ((BOOL)(1 == 1))
  #define FALSE ((BOOL)(0 == 1))
  #endif
  
  /* null values for pointers and characters */
  #ifndef NULL
  #define NULL ((void *)0)
  #endif
  #ifndef NUL
  #define NUL '\0'
  #endif
  
  BEGIN_DECLARATION
  
  typedef unsigned int str_size_t;
  
  #define STR_RIGHT        (1 << 0)  /* operate from right end */
  #define STR_COMPLEMENT   (1 << 1)  /* use complement */
  #define STR_NOCASE       (1 << 2)  /* no case sensitive operation */
  #define STR_STRIPQUOTES  (1 << 3)  /* strip quote characters */
  #define STR_BACKSLASHESC (1 << 4)  /* enable ANSI C style (backslashed) escape sequences */
  #define STR_SKIPDELIMS   (1 << 5)  /* skip trailing delimiters before return */
  #define STR_TRIGRAPHS    (1 << 6)  /* enable ANSI C trigraph processing (implies STR_BACKSLASHESCAPE) */
  
  #define STR_HASH_DJBX33  (1 << 0)  /* Daniel J. Bernstein: Times 33 */
  #define STR_HASH_BJDDJ   (1 << 1)  /* Bob Jenkins: Dr. Dobbs Journal */ 
  #define STR_HASH_MACRC32 (1 << 2)  /* Mark Adler: Cyclic Redudancy Check 32 */
  
  #define STR_BASE64_ENCODE (1 << 0) /* encode: string -> base64 */
  #define STR_BASE64_DECODE (1 << 1) /* decode: base64 -> string */
  #define STR_BASE64_STRICT (1 << 2) /* strict encoding with no more than 72 chars/line */
  
  extern str_size_t    str_len        (const char *);
  extern char         *str_copy       (char *, const char *, str_size_t);
  extern char         *str_dup        (const char *, str_size_t);
  extern char         *str_concat     (char *, ...);
  extern char         *str_splice     (char *, str_size_t, str_size_t, char *, str_size_t);
  extern char         *str_token      (char **, const char *, const char *, const char *, int);
  extern int           str_parse      (const char *, const char *, ...);
  extern int           str_compare    (const char *, const char *, str_size_t, int);
  extern char         *str_span       (const char *, str_size_t, const char *, int);
  extern char         *str_locate     (const char *, str_size_t, const char *);
  extern int           str_format     (char *, str_size_t, const char *, ...);
  extern unsigned long str_hash       (const char *, str_size_t, int);
  extern int           str_base64     (char *, str_size_t, unsigned char *, str_size_t, int);
  
  extern char         *str_concat_va  (char *, va_list);
  extern int           str_parse_va   (const char *, const char *, va_list);
  extern int           str_format_va  (char *, str_size_t, const char *, va_list);
  
  END_DECLARATION
  
  #endif /* _STR_H_ */
  

From ossp-cvs-owner@ossp.org  Mon Sep 10 12:14:40 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8AAEdB63732; Mon, 10 Sep 2001 12:14:39 +0200 (CEST)
Date: Mon, 10 Sep 2001 12:14:39 +0200 (CEST)
Message-Id: <200109101014.f8AAEdB63732@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str Makefile.in str.h.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   10-Sep-2001 12:14:39
  Branch: HEAD                             Handle: 2001091011143800

  Modified files:
    ossp-pkg/str            Makefile.in str.h.in

  Log:
    add also run-time version information to public API

  Summary:
    Revision    Changes     Path
    1.36        +4  -2      ossp-pkg/str/Makefile.in
    1.2         +14 -0      ossp-pkg/str/str.h.in
  ____________________________________________________________________________

  Index: ossp-pkg/str/Makefile.in
  ============================================================
  $ cvs diff -u -r1.35 -r1.36 Makefile.in
  --- ossp-pkg/str/Makefile.in	2001/09/05 08:29:16	1.35
  +++ ossp-pkg/str/Makefile.in	2001/09/10 10:14:38	1.36
  @@ -56,7 +56,8 @@
   str_parse.c \
   str_format.c \
   str_hash.c \
  -str_base64.c
  +str_base64.c \
  +str_version.c
   
   OBJS=\
   str_pcre.lo \
  @@ -67,7 +68,8 @@
   str_parse.lo \
   str_format.lo \
   str_hash.lo \
  -str_base64.lo
  +str_base64.lo \
  +str_version.lo
   
   _VERSION_FILE = \
   	$(S)str_version.c
  Index: ossp-pkg/str/str.h.in
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 str.h.in
  --- ossp-pkg/str/str.h.in	2001/09/10 09:55:13	1.1
  +++ ossp-pkg/str/str.h.in	2001/09/10 10:14:38	1.2
  @@ -38,8 +38,22 @@
   #define END_DECLARATION   /*nop*/
   #endif
   
  +/* version information (compile-time) */
   #define STR_VERSION_STR "@STR_VERSION_STR@"
   #define STR_VERSION_HEX @STR_VERSION_HEX@
  +
  +/* version information (run-time) */
  +typedef struct {
  +    const int   v_hex;
  +    const char *v_short;
  +    const char *v_long;
  +    const char *v_tex;
  +    const char *v_gnu;
  +    const char *v_web;
  +    const char *v_sccs;
  +    const char *v_rcs;
  +} str_version_t;
  +extern str_version_t str_version;
   
   #include <string.h>
   #include <sys/types.h>

From ossp-cvs-owner@ossp.org  Mon Sep 10 12:15:12 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8AAFCo64036; Mon, 10 Sep 2001 12:15:12 +0200 (CEST)
Date: Mon, 10 Sep 2001 12:15:12 +0200 (CEST)
Message-Id: <200109101015.f8AAFCo64036@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.h.in l2_p.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   10-Sep-2001 12:15:12
  Branch: HEAD                             Handle: 2001091011151100

  Modified files:
    ossp-pkg/l2             l2.h.in l2_p.h

  Log:
    no need to double-declare the version stuff

  Summary:
    Revision    Changes     Path
    1.3         +14 -0      ossp-pkg/l2/l2.h.in
    1.14        +0  -4      ossp-pkg/l2/l2_p.h
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2.h.in
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2.h.in
  --- ossp-pkg/l2/l2.h.in	2001/09/10 09:54:41	1.2
  +++ ossp-pkg/l2/l2.h.in	2001/09/10 10:15:11	1.3
  @@ -30,8 +30,22 @@
   #ifndef __L2_H__
   #define __L2_H__
   
  +/* version information (compile-time) */
   #define L2_VERSION_STR "@L2_VERSION_STR@"
   #define L2_VERSION_HEX @L2_VERSION_HEX@
  +
  +/* version information (run-time) */
  +typedef struct {
  +    const int   v_hex;
  +    const char *v_short;
  +    const char *v_long;
  +    const char *v_tex;
  +    const char *v_gnu;
  +    const char *v_web;
  +    const char *v_sccs;
  +    const char *v_rcs;
  +} l2_version_t;
  +extern l2_version_t l2_version;
   
   /* include standard environment we are based on */
   #include <stdio.h>
  Index: ossp-pkg/l2/l2_p.h
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 l2_p.h
  --- ossp-pkg/l2/l2_p.h	2001/09/09 15:42:25	1.13
  +++ ossp-pkg/l2/l2_p.h	2001/09/10 10:15:11	1.14
  @@ -36,10 +36,6 @@
   #include "l2_ut_pcre.h"
   #include "l2_ut_sa.h"
   
  -#define _L2_VERSION_C_AS_HEADER_
  -#include "l2_version.c"
  -#undef  _L2_VERSION_C_AS_HEADER_
  -
   #define L2_MAX_MSGSIZE    4096
   #define L2_MAX_CHANNELS    128
   #define L2_MAX_FORMATTERS  128

From ossp-cvs-owner@ossp.org  Mon Sep 10 12:15:27 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8AAFQQ64085; Mon, 10 Sep 2001 12:15:26 +0200 (CEST)
Date: Mon, 10 Sep 2001 12:15:26 +0200 (CEST)
Message-Id: <200109101015.f8AAFQQ64085@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   10-Sep-2001 12:15:26
  Branch: HEAD                             Handle: 2001091011152600

  Modified files:
    ossp-pkg/lmtp2nntp      nntp.c

  Log:
    Str is not used here

  Summary:
    Revision    Changes     Path
    1.22        +0  -1      ossp-pkg/lmtp2nntp/nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/nntp.c
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 nntp.c
  --- ossp-pkg/lmtp2nntp/nntp.c	2001/09/07 15:02:08	1.21
  +++ ossp-pkg/lmtp2nntp/nntp.c	2001/09/10 10:15:26	1.22
  @@ -34,7 +34,6 @@
   #include <sys/time.h>
   
   #include "nntp.h"
  -#include "str.h"
   
   #ifdef HAVE_CONFIG_H
   #include "config.h"

From ossp-cvs-owner@ossp.org  Mon Sep 10 12:16:07 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8AAG5M64445; Mon, 10 Sep 2001 12:16:05 +0200 (CEST)
Date: Mon, 10 Sep 2001 12:16:05 +0200 (CEST)
Message-Id: <200109101016.f8AAG5M64445@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO lmtp2nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   10-Sep-2001 12:16:05
  Branch: HEAD                             Handle: 2001091011160500

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO lmtp2nntp.c

  Log:
    add library version checks (compile-time and run-time)

  Summary:
    Revision    Changes     Path
    1.29        +0  -6      ossp-pkg/lmtp2nntp/00TODO
    1.47        +26 -0      ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	2001/09/10 06:50:56	1.28
  +++ ossp-pkg/lmtp2nntp/00TODO	2001/09/10 10:16:05	1.29
  @@ -14,12 +14,6 @@
   
   FIXME 
   
  -check str library version
  -- openpkg (package time)
  -- autoconf, (autoconf time)
  -- str.h, #err (compile time)
  -- STR_VERSION (run time)
  -
   check gcc3 compatiblity
   
       **** DEVELOPMENT INFORMATION ****
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.46 -r1.47 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/10 06:54:06	1.46
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/10 10:16:05	1.47
  @@ -39,6 +39,22 @@
   #include "shpat_match.h"
   #include "l2.h"
   
  +/* library version check (compile-time) */
  +#define  L2_VERSION_HEX_REQ 0x001200
  +#define  L2_VERSION_STR_REQ "0.1.0"
  +#define STR_VERSION_HEX_REQ 0x009205
  +#define STR_VERSION_STR_REQ "0.9.5"
  +#ifdef L2_VERSION_HEX
  +#if L2_VERSION_HEX < L2_VERSION_HEX_REQ
  +#error "require a newer version of OSSP L2"
  +#endif
  +#endif
  +#ifdef STR_VERSION_HEX
  +#if STR_VERSION_HEX < STR_VERSION_HEX_REQ
  +#error "require a newer version of OSSP Str"
  +#endif
  +#endif
  +
   /* own headers */
   #include "lmtp2nntp.h"
   #ifdef HAVE_CONFIG_H
  @@ -256,6 +272,16 @@
       l2_channel_t *chPrefix;
       l2_channel_t *chBuf;
       l2_channel_t *chFile;
  +
  +    /* library version check (run-time) */
  +    if (l2_version.v_hex < L2_VERSION_HEX_REQ) {
  +        fprintf(stderr, "require at least OSSP L2 >= %s\n", L2_VERSION_STR_REQ);
  +        exit(ERR_EXECUTION);
  +    }
  +    if (str_version.v_hex < STR_VERSION_HEX_REQ + 1) {
  +        fprintf(stderr, "require at least OSSP Str >= %s\n", STR_VERSION_STR_REQ);
  +        exit(ERR_EXECUTION);
  +    }
   
       /* create application context */
       if ((ctx = (lmtp2nntp_t *)malloc(sizeof(lmtp2nntp_t))) == NULL)

From ossp-cvs-owner@ossp.org  Mon Sep 10 13:19:07 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8ABJ5M71766; Mon, 10 Sep 2001 13:19:05 +0200 (CEST)
Date: Mon, 10 Sep 2001 13:19:05 +0200 (CEST)
Message-Id: <200109101119.f8ABJ5M71766@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   10-Sep-2001 13:19:05
  Branch: HEAD                             Handle: 2001091012190500

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO

  Log:
    input from team meeting

  Summary:
    Revision    Changes     Path
    1.30        +10 -0      ossp-pkg/lmtp2nntp/00TODO
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	2001/09/10 10:16:05	1.29
  +++ ossp-pkg/lmtp2nntp/00TODO	2001/09/10 11:19:05	1.30
  @@ -6,6 +6,16 @@
   trace   = ist bisheriger trace.c
   debug   = developer meldungen
   
  +NOTICE = startup/ statistics/ shutdown
  + ERROR = reject
  + nur bei DEBUG die function names verwenden
  +
  + README
  + Changelog - via cvs2cl - ask RSE for apache-style
  + NEWS
  + AUTHORS
  + THANKS - contributors
  +
   [B<-i> I<messageid>] use L2 for logging, grab ID through RFC1891 ENVID, 6.2
   
   CU/CUS

From ossp-cvs-owner@ossp.org  Mon Sep 10 13:21:00 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8ABKxT71949; Mon, 10 Sep 2001 13:20:59 +0200 (CEST)
Date: Mon, 10 Sep 2001 13:20:59 +0200 (CEST)
Message-Id: <200109101120.f8ABKxT71949@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 .cvsignore
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   10-Sep-2001 13:20:59
  Branch: HEAD                             Handle: 2001091012205800

  Modified files:
    ossp-pkg/l2             .cvsignore

  Log:
    Added l2_sockmon (executable) to cvs ignore list.

  Summary:
    Revision    Changes     Path
    1.9         +1  -0      ossp-pkg/l2/.cvsignore
  ____________________________________________________________________________

  Index: ossp-pkg/l2/.cvsignore
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 .cvsignore
  --- ossp-pkg/l2/.cvsignore	2001/09/10 09:48:48	1.8
  +++ ossp-pkg/l2/.cvsignore	2001/09/10 11:20:58	1.9
  @@ -8,6 +8,7 @@
   l2_test.log
   l2_test
   l2_test++
  +l2_sockmon
   config.guess
   config.sub
   ltmain.sh

From ossp-cvs-owner@ossp.org  Mon Sep 10 13:26:52 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8ABQpv72673; Mon, 10 Sep 2001 13:26:51 +0200 (CEST)
Date: Mon, 10 Sep 2001 13:26:51 +0200 (CEST)
Message-Id: <200109101126.f8ABQpv72673@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 ChangeLog
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   10-Sep-2001 13:26:51
  Branch: HEAD                             Handle: 1970010101000000

  Removed files:
    ossp-pkg/l2             ChangeLog

  Log:
    remove ChangeLog; will be generated soon

  Summary:
    Revision    Changes     Path
    NONE        +0  -0      ossp-pkg/l2/ChangeLog
  ____________________________________________________________________________

  

From ossp-cvs-owner@ossp.org  Mon Sep 10 14:48:16 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8ACmEc82237; Mon, 10 Sep 2001 14:48:14 +0200 (CEST)
Date: Mon, 10 Sep 2001 14:48:14 +0200 (CEST)
Message-Id: <200109101248.f8ACmEc82237@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp nntp.c nntp.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   10-Sep-2001 14:48:14
  Branch: HEAD                             Handle: 2001091013481400

  Modified files:
    ossp-pkg/lmtp2nntp      nntp.c nntp.h

  Log:
    POST really should be called DELIVERY as we support posting and feeding

  Summary:
    Revision    Changes     Path
    1.23        +9  -9      ossp-pkg/lmtp2nntp/nntp.c
    1.10        +1  -1      ossp-pkg/lmtp2nntp/nntp.h
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/nntp.c
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 nntp.c
  --- ossp-pkg/lmtp2nntp/nntp.c	2001/09/10 10:15:26	1.22
  +++ ossp-pkg/lmtp2nntp/nntp.c	2001/09/10 12:48:14	1.23
  @@ -288,11 +288,11 @@
        *  expected and we treat this as an error.
        */
       if (strncmp(line, "201", 3) == 0)
  -        return NNTP_ERR_POST;
  +        return NNTP_ERR_DELIVERY;
       if (   strncmp(line, "200", 3) != 0
           && strncmp(line, "5"  , 1) != 0
             )
  -        return NNTP_ERR_POST;
  +        return NNTP_ERR_DELIVERY;
   
       /*  check if this server already knows that artice
        *  > STAT <message-id>
  @@ -309,7 +309,7 @@
       if (strncmp(line, "223", 3) == 0)
           return NNTP_OK;
       if (strncmp(line, "430", 3) != 0)
  -        return NNTP_ERR_POST;
  +        return NNTP_ERR_DELIVERY;
   
       /*  post the article
        *  > POST
  @@ -347,7 +347,7 @@
       if ((rc = nntp_readline(nntp, line, sizeof(line))) != NNTP_OK)
           return rc;
       if (strncmp(line, "340", 3) != 0)
  -        return NNTP_ERR_POST;
  +        return NNTP_ERR_DELIVERY;
   
       do {
           rc = nntp->io.write(nntp->io.ctx, nntp->wfd, msg->cpMsg, strlen(msg->cpMsg));
  @@ -370,7 +370,7 @@
               return NNTP_OK;
       }
   
  -    return NNTP_ERR_POST;
  +    return NNTP_ERR_DELIVERY;
   
   #if 0
               /* check if this server accepts at least one of the newsgroups
  @@ -420,10 +420,10 @@
   
       if (   (strncmp(line, "437", 3) == 0)
           || (strncmp(line, "480", 3) == 0))
  -        return NNTP_ERR_POST;
  +        return NNTP_ERR_DELIVERY;
   
       if (strncmp(line, "335", 3) != 0)
  -        return NNTP_ERR_POST;
  +        return NNTP_ERR_DELIVERY;
   
       do {
           rc = nntp->io.write(nntp->io.ctx, nntp->wfd, msg->cpMsg, strlen(msg->cpMsg));
  @@ -440,7 +440,7 @@
       if (strncmp(line, "436", 3) == 0)
           return NNTP_DEFER;
   
  -    return NNTP_ERR_POST;
  +    return NNTP_ERR_DELIVERY;
   }
   
   char *nntp_error(nntp_rc_t rc)
  @@ -454,7 +454,7 @@
       else if (rc == NNTP_ERR_SYSTEM  ) str = "NNTP: see errno";
       else if (rc == NNTP_ERR_ARG     ) str = "NNTP: invalid argument";
       else if (rc == NNTP_ERR_OVERFLOW) str = "NNTP: buffer overflow";
  -    else if (rc == NNTP_ERR_POST    ) str = "NNTP: cannot post message";
  +    else if (rc == NNTP_ERR_DELIVERY) str = "NNTP: cannot deliver message";
       else if (rc == NNTP_ERR_INIT    ) str = "NNTP: initialization failed";
       else if (rc == NNTP_ERR_UNKNOWN ) str = "NNTP: unknown error";
       return str;
  Index: ossp-pkg/lmtp2nntp/nntp.h
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 nntp.h
  --- ossp-pkg/lmtp2nntp/nntp.h	2001/09/07 15:02:08	1.9
  +++ ossp-pkg/lmtp2nntp/nntp.h	2001/09/10 12:48:14	1.10
  @@ -51,7 +51,7 @@
       NNTP_ERR_SYSTEM,
       NNTP_ERR_ARG,
       NNTP_ERR_OVERFLOW,
  -    NNTP_ERR_POST,
  +    NNTP_ERR_DELIVERY,
       NNTP_ERR_INIT,
       NNTP_ERR_UNKNOWN
   } nntp_rc_t;

From ossp-cvs-owner@ossp.org  Mon Sep 10 14:49:49 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8ACnmq82367; Mon, 10 Sep 2001 14:49:48 +0200 (CEST)
Date: Mon, 10 Sep 2001 14:49:48 +0200 (CEST)
Message-Id: <200109101249.f8ACnmq82367@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   10-Sep-2001 14:49:48
  Branch: HEAD                             Handle: 2001091013494800

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c

  Log:
    more user friendly and detailled logging

  Summary:
    Revision    Changes     Path
    1.48        +37 -24     ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.47 -r1.48 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/10 10:16:05	1.47
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/10 12:49:48	1.48
  @@ -275,11 +275,11 @@
   
       /* library version check (run-time) */
       if (l2_version.v_hex < L2_VERSION_HEX_REQ) {
  -        fprintf(stderr, "require at least OSSP L2 >= %s\n", L2_VERSION_STR_REQ);
  +        fprintf(stderr, "require OSSP L2 >= %s, found %s\n", L2_VERSION_STR_REQ, L2_VERSION_STR);
           exit(ERR_EXECUTION);
       }
  -    if (str_version.v_hex < STR_VERSION_HEX_REQ + 1) {
  -        fprintf(stderr, "require at least OSSP Str >= %s\n", STR_VERSION_STR_REQ);
  +    if (str_version.v_hex < STR_VERSION_HEX_REQ) {
  +        fprintf(stderr, "require OSSP Str >= %s, found %s\n", STR_VERSION_STR_REQ, STR_VERSION_STR);
           exit(ERR_EXECUTION);
       }
   
  @@ -594,7 +594,7 @@
           exit(ERR_EXECUTION);
       }
   
  -    if (l2_stream_log(ctx->l2, L2_LEVEL_INFO, "%P: startup, version %s", lmtp2nntp_version.v_gnu) != L2_OK) {
  +    if (l2_stream_log(ctx->l2, L2_LEVEL_NOTICE, "%P: startup, version %s", lmtp2nntp_version.v_gnu) != L2_OK) {
           fprintf(stderr, "%s:Error: logging failed to log startup message to stream\n", ctx->progname);
           exit(ERR_EXECUTION);
       }
  @@ -639,7 +639,7 @@
       /* graceful shutdown */
       lmtp_gfs_quit(ctx);
       lmtp_gfs_lhlo(ctx);
  -    log0(ctx, INFO, "%P: graceful shutdown, no more logging until exit");
  +    log0(ctx, NOTICE, "%P: graceful shutdown shortly before exit - no more logging");
       l2_stream_destroy(ctx->l2);
       lmtp_destroy(lmtp);
       if (ctx->option_logfile != NULL)
  @@ -755,7 +755,7 @@
       int          i;
       nntp_io_t    nntp_io;
   
  -    log1(ctx, INFO, "lmtp_cb_lhlo < %s", req->msg);
  +    log1(ctx, INFO, "LMTP service executing LHLO command < %s", req->msg);
   
       nntp_io.ctx    = ctx;
       nntp_io.select = NULL;
  @@ -766,7 +766,7 @@
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.0.0   Other undefined Status
        */
  -    log0(ctx, TRACE, "checking for Duplicate LHLO");
  +    log0(ctx, TRACE, "checking for duplicate LHLO");
       if (ctx->session.lhlo_seen) {
           res.statuscode = "503";
           res.dsncode    = "5.0.0";
  @@ -778,7 +778,7 @@
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.0.0   Other undefined Status
        */
  -    log0(ctx, TRACE, "checking lhlo_domain to match either RFC0821 or RFC1035 syntax");
  +    log0(ctx, TRACE, "checking domain to match either RFC0821 or RFC1035 syntax");
       if (! (   helo_rfc0821domain(req->msg, &ctx->session.lhlo_domain) > 0
              || helo_rfc1035domain(req->msg, &ctx->session.lhlo_domain) > 0)) {
           res.statuscode = "501";
  @@ -810,7 +810,7 @@
               log2(ctx, DEBUG, "bind local socket to %s:%s", ctx->cpBindh, ctx->cpBindp);
               if (bind(ctx->ns[i].s, ctx->saBind->sa_buf, ctx->saBind->sa_len) < 0) {
                   bOk = FALSE;
  -                log0(ctx, ERROR, "bind=%m");
  +                log2(ctx, ERROR, "binding NNTP client to local address %s:%s failed, %m", ctx->cpBindh, ctx->cpBindp);
               }
           }
   
  @@ -820,14 +820,16 @@
                   if (connect_nonb(ctx->ns[i].s, ctx->ns[i].sa->sa_buf, ctx->ns[i].sa->sa_len, 
                                ctx->option_waittime) < 0) {
                       bOk = FALSE;
  -                    log0(ctx, WARNING, "connect_nonb=%m");
  +                    log3(ctx, WARNING, "nonblocking connect to %s:%s with waittime=%d failed, %m",
  +                         ctx->ns[i].h, ctx->ns[i].p, ctx->option_waittime);
                   }
               }
               else {
                   log0(ctx, DEBUG, "connect");
                   if (connect(ctx->ns[i].s, ctx->ns[i].sa->sa_buf, ctx->ns[i].sa->sa_len) < 0) {
                       bOk = FALSE;
  -                    log0(ctx, WARNING, "connect=%m");
  +                    log2(ctx, WARNING, "connect to %s:%s failed, %m",
  +                         ctx->ns[i].h, ctx->ns[i].p);
                   }
               }
           }
  @@ -838,7 +840,7 @@
                                                  (ctx->option_logfile && (ctx->option_levelmask >= L2_LEVEL_TRACE)) ?
                                                   &nntp_io : NULL)) == NULL) {
                   bOk = FALSE;
  -                log0(ctx, ERROR, "nntp_create failed");
  +                log0(ctx, ERROR, "creation of NNTP context failed");
               }
           }
   
  @@ -851,7 +853,7 @@
               log0(ctx, DEBUG, "nntp_init");
               if ((rc = nntp_init(ctx->ns[i].nntp)) != NNTP_OK) {
                   bOk = FALSE;
  -                log2(ctx, ERROR, "nntp_init=(%m) %s", rc, nntp_error(rc));
  +                log2(ctx, ERROR, "initialization of NNTP context failed, (%d) %s", rc, nntp_error(rc));
               }
           }
   
  @@ -908,7 +910,7 @@
   {
       int i;
   
  -    log0(ctx, INFO, "lmtp_gfs_lhlo - graceful shutdown");
  +    log0(ctx, TRACE, "LMTP service LHLO command - graceful shutdown");
   
       for (i = 0; i < ctx->nsc; i++) {
           if (ctx->ns[i].nntp != NULL)
  @@ -1054,7 +1056,7 @@
       lmtp_rc_t    rc;
       lmtp_res_t   res;
   
  -    log1(ctx, INFO, "lmtp_cb_mail < %s", req->msg);
  +    log1(ctx, INFO, "LMTP service executing MAIL command < %s", req->msg);
   
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   553 Requested action not taken: mailbox name not allowed
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
  @@ -1170,7 +1172,7 @@
       char        *cp;
       char        *group;
   
  -    log1(ctx, INFO, "lmtp_cb_rcpt < %s", req->msg);
  +    log1(ctx, INFO, "LMTP service executing RCPT command < %s", req->msg);
   
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   503 Bad sequence of commands
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
  @@ -1281,7 +1283,7 @@
       int          bSuccess;
       char        *cp;
   
  -    log1(ctx, INFO, "lmtp_cb_data < %s", req->msg);
  +    log1(ctx, INFO, "LMTP service executing DATA command < %s", req->msg);
   
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   503 Bad sequence of commands
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
  @@ -1304,7 +1306,7 @@
       res.statusmsg  = "Enter mail, end with \".\" on a line by itself";
       lmtp_response(lmtp, &res);
   
  -    log1(ctx, TRACE, "lmtp_readmsg, maximum size to accept = %d", ctx->option_maxmessagesize);
  +    log1(ctx, TRACE, "read message with maximum size to accept = %d", ctx->option_maxmessagesize);
       rc = lmtp_readmsg(lmtp, &ctx->msg->cpMsg, ctx->option_maxmessagesize);
   
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   552 Requested mail action aborted: exceeded storage allocation
  @@ -1457,7 +1459,7 @@
       }
   
       log0(ctx, TRACE, "deliver message");
  -    bSuccess = NNTP_EOF; /* assume a hard error for the worst case */
  +    bSuccess = NNTP_ERR_DELIVERY; /* assume a hard error for the worst case */
       for (i = 0; i < ctx->nsc; i++) {
           switch (ctx->option_deliverymode) {
               case DELIVERYMODE_FAKE:
  @@ -1481,6 +1483,17 @@
               bSuccess = NNTP_DEFER;
       }
   
  +    str_format(errorstring, sizeof(errorstring), "%sdelivery of %s", 
  +        ((ctx->option_deliverymode == DELIVERYMODE_FAKE) ? "fake " :
  +         (ctx->option_deliverymode == DELIVERYMODE_POST) ? "post " :
  +         (ctx->option_deliverymode == DELIVERYMODE_FEED) ? "feed " : ""), ctx->msg->cpMsgid);
  +    if (bSuccess == NNTP_OK)
  +        log2(ctx, NOTICE,  "%s %s", errorstring, "succeeded");
  +    else if(bSuccess == NNTP_DEFER)
  +        log2(ctx, WARNING, "%s %s", errorstring, "deferred");
  +    else
  +        log2(ctx, ERROR,   "%s %s", errorstring, "failed");
  +
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   250 Requested mail action okay, completed
        *                                                  451 Requested action aborted: local error in processing
        *                                                  554 Transaction failed
  @@ -1554,7 +1567,7 @@
       lmtp_res_t res;
       lmtp_rc_t rc = LMTP_OK;
   
  -    log1(ctx, INFO, "lmtp_cb_noop < %s", req->msg);
  +    log1(ctx, INFO, "LMTP service executing NOOP command < %s", req->msg);
   
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   250 Requested mail action okay, completed
        *  RFC1893 2. Status Codes                         2.X.X   Success
  @@ -1573,7 +1586,7 @@
       lmtp_res_t res;
       lmtp_rc_t rc = LMTP_OK;
   
  -    log1(ctx, INFO, "lmtp_cb_rset < %s", req->msg);
  +    log1(ctx, INFO, "LMTP service executing RSET command < %s", req->msg);
   
       lmtp_gfs_rset(ctx);
   
  @@ -1590,7 +1603,7 @@
   
   static void lmtp_gfs_rset(lmtp2nntp_t *ctx)
   {
  -    log0(ctx, INFO, "lmtp_gfs_rset - graceful shutdown");
  +    log0(ctx, TRACE, "LMTP service RSET command - graceful shutdown");
   
       if (ctx->msg != NULL) {
           msg_destroy(ctx->msg);
  @@ -1604,7 +1617,7 @@
       lmtp_res_t res;
       lmtp_rc_t rc = LMTP_EOF;
   
  -    log1(ctx, INFO, "lmtp_cb_quit < %s", req->msg);
  +    log1(ctx, INFO, "LMTP service executing QUIT command < %s", req->msg);
   
       lmtp_gfs_quit(ctx);
   
  @@ -1621,7 +1634,7 @@
   
   static void lmtp_gfs_quit(lmtp2nntp_t *ctx)
   {
  -    log0(ctx, INFO, "lmtp_gfs_quit - graceful shutdown");
  +    log0(ctx, TRACE, "LMTP service QUIT command - graceful shutdown");
   
       lmtp_gfs_rset(ctx);
       resetsession(&ctx->session);

From ossp-cvs-owner@ossp.org  Mon Sep 10 14:50:36 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8ACoZY82460; Mon, 10 Sep 2001 14:50:35 +0200 (CEST)
Date: Mon, 10 Sep 2001 14:50:35 +0200 (CEST)
Message-Id: <200109101250.f8ACoZY82460@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   10-Sep-2001 14:50:35
  Branch: HEAD                             Handle: 2001091013503500

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO

  Log:
    request to support SMTP and SYSLOG logging in addition to FILE

  Summary:
    Revision    Changes     Path
    1.31        +5  -0      ossp-pkg/lmtp2nntp/00TODO
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	2001/09/10 11:19:05	1.30
  +++ ossp-pkg/lmtp2nntp/00TODO	2001/09/10 12:50:35	1.31
  @@ -24,6 +24,11 @@
   
   FIXME 
   
  +- -l error:syslog[:facility]
  +- -l error:smtp://host[:port][/postmaster@mail.de.cw.net]
  +- -l debug:file:/path
  +- -L warning
  +
   check gcc3 compatiblity
   
       **** DEVELOPMENT INFORMATION ****

From ossp-cvs-owner@ossp.org  Mon Sep 10 16:11:35 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8AEBYf91318; Mon, 10 Sep 2001 16:11:34 +0200 (CEST)
Date: Mon, 10 Sep 2001 16:11:34 +0200 (CEST)
Message-Id: <200109101411.f8AEBYf91318@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c lmtp2nntp.pod nntp.c nntp.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   10-Sep-2001 16:11:34
  Branch: HEAD                             Handle: 2001091015113300

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c lmtp2nntp.pod nntp.c nntp.h

  Log:
    fake mode now supports NTTP-less setups

  Summary:
    Revision    Changes     Path
    1.49        +58 -27     ossp-pkg/lmtp2nntp/lmtp2nntp.c
    1.19        +12 -10     ossp-pkg/lmtp2nntp/lmtp2nntp.pod
    1.24        +1  -0      ossp-pkg/lmtp2nntp/nntp.c
    1.11        +1  -0      ossp-pkg/lmtp2nntp/nntp.h
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.48 -r1.49 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/10 12:49:48	1.48
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/10 14:11:33	1.49
  @@ -791,15 +791,19 @@
        *  RFC1893 2. Status Codes                         4.X.X   Persistent Transient Failure
        *  RFC1893 3.5 Network and Routing Status          X.3.5   System incorrectly configured
        */
  -    log0(ctx, TRACE, "check if at least one NNTP service was successfully configured");
  -    if (ctx->nsc == 0) {
  -        res.statuscode = "451";
  -        res.dsncode    = "4.3.5";
  -        res.statusmsg  = "No valid NNTP services configured.";
  -        CU(LMTP_OK);
  +    if (ctx->option_deliverymode != DELIVERYMODE_FAKE) {
  +        log0(ctx, TRACE, "check if at least one NNTP service was successfully configured");
  +        if (ctx->nsc == 0) {
  +            res.statuscode = "451";
  +            res.dsncode    = "4.3.5";
  +            res.statusmsg  = "No valid NNTP services configured.";
  +            CU(LMTP_OK);
  +        }
       }
   
       log0(ctx, TRACE, "try to establish a session to any configured NNTP services");
  +    if (ctx->option_deliverymode == DELIVERYMODE_FAKE)
  +        log0(ctx, NOTICE, "NNTP running in fake mode, network connections will be executed but result is ignored");
       i = 0;
       do {
           log1(ctx, DEBUG, "trying ns[%d]", i);
  @@ -870,17 +874,22 @@
           }
       } while (i < ctx->nsc);
   
  -    /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   421 <domain> Service not available
  -     *  RFC1893 2. Status Codes                         4.X.X   Persistent Transient Failure
  -     *  RFC1893 3.5 Network and Routing Status          X.4.1   No answer from host
  -     */
  -    log0(ctx, DEBUG, "check if at least one NNTP session successfully established");
  -    if (ctx->nsc == 0) {
  -        log0(ctx, ERROR, "no NNTP session established");
  -        res.statuscode = "421";
  -        res.dsncode    = "4.4.1";
  -        res.statusmsg  = "No NNTP session established.";
  -        CU(LMTP_OK);
  +    if (ctx->option_deliverymode == DELIVERYMODE_FAKE)
  +        log1(ctx, NOTICE, "NNTP running in fake mode, network connections successfully established=%d but ignored", ctx->nsc);
  +    else
  +    {
  +        /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   421 <domain> Service not available
  +         *  RFC1893 2. Status Codes                         4.X.X   Persistent Transient Failure
  +         *  RFC1893 3.5 Network and Routing Status          X.4.1   No answer from host
  +         */
  +        log0(ctx, DEBUG, "check if at least one NNTP session successfully established");
  +        if (ctx->nsc == 0) {
  +            log0(ctx, ERROR, "no NNTP session established");
  +            res.statuscode = "421";
  +            res.dsncode    = "4.4.1";
  +            res.statusmsg  = "No NNTP session established.";
  +            CU(LMTP_OK);
  +        }
       }
           
       ctx->session.lhlo_seen = TRUE;
  @@ -1463,6 +1472,7 @@
       for (i = 0; i < ctx->nsc; i++) {
           switch (ctx->option_deliverymode) {
               case DELIVERYMODE_FAKE:
  +                ctx->ns[i].rc = NNTP_FAKE;
                   break;
               case DELIVERYMODE_POST:
                   ctx->ns[i].rc = nntp_post(ctx->ns[i].nntp, ctx->msg);
  @@ -1483,16 +1493,37 @@
               bSuccess = NNTP_DEFER;
       }
   
  -    str_format(errorstring, sizeof(errorstring), "%sdelivery of %s", 
  -        ((ctx->option_deliverymode == DELIVERYMODE_FAKE) ? "fake " :
  -         (ctx->option_deliverymode == DELIVERYMODE_POST) ? "post " :
  -         (ctx->option_deliverymode == DELIVERYMODE_FEED) ? "feed " : ""), ctx->msg->cpMsgid);
  -    if (bSuccess == NNTP_OK)
  -        log2(ctx, NOTICE,  "%s %s", errorstring, "succeeded");
  -    else if(bSuccess == NNTP_DEFER)
  -        log2(ctx, WARNING, "%s %s", errorstring, "deferred");
  -    else
  -        log2(ctx, ERROR,   "%s %s", errorstring, "failed");
  +    if (ctx->option_deliverymode == DELIVERYMODE_FAKE) {
  +        str_format(errorstring, sizeof(errorstring),
  +                   "NNTP running in fake mode, delivery of %s %s but delivery status forced to",
  +                   ctx->msg->cpMsgid,
  +                   ((bSuccess == NNTP_OK)    ? "succeeded" :
  +                    (bSuccess == NNTP_DEFER) ? "deferred"  : "failed"));
  +        switch (ctx->option_deliverymodefakestatus[0]) {
  +            case '5':
  +                bSuccess = NNTP_ERR_UNKNOWN;
  +                log2(ctx, NOTICE, "%s %s", errorstring, "failed");
  +                break;
  +            case '4':
  +                bSuccess = NNTP_DEFER;
  +                log2(ctx, NOTICE, "%s %s", errorstring, "deferred");
  +                break;
  +            default:
  +                bSuccess = NNTP_OK;
  +                log2(ctx, NOTICE, "%s %s", errorstring, "succeeded");
  +                break;
  +        }
  +    } else {
  +        str_format(errorstring, sizeof(errorstring), "%sdelivery of %s", 
  +            ((ctx->option_deliverymode == DELIVERYMODE_POST) ? "post " :
  +             (ctx->option_deliverymode == DELIVERYMODE_FEED) ? "feed " : ""), ctx->msg->cpMsgid);
  +        if (bSuccess == NNTP_OK)
  +            log2(ctx, NOTICE,  "%s %s", errorstring, "succeeded");
  +        else if(bSuccess == NNTP_DEFER)
  +            log2(ctx, WARNING, "%s %s", errorstring, "deferred");
  +        else
  +            log2(ctx, ERROR,   "%s %s", errorstring, "failed");
  +    }
   
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   250 Requested mail action okay, completed
        *                                                  451 Requested action aborted: local error in processing
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 lmtp2nntp.pod
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/09/07 13:53:16	1.18
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/09/10 14:11:33	1.19
  @@ -72,16 +72,18 @@
   
   =item B<-d> I<deliverymode>
   
  -Possible values for I<deliverymode> are C<post>, C<feed> or a string used to
  -fake a LMTP return code and DSN in "LLL/D.D.D" format. The slash is replaced
  -by a space internally. The default is "553/5.7.1" meaning "Requested action
  -not taken: mailbox name not allowed/ Delivery not authorized, message
  -refused". In C<post> mode articles are sent to the NNTP server(s) using POST
  -command. Before posting, a duplicate check using STAT command is issued. In
  -C<feed> mode articles are sent to the NNTP server(s) using IHAVE command.
  -Specifying a return code/ DSN replaces the post/ feed logic by a noop and
  -assumes the given string must be returned to the LMTP side. This is useful for
  -debugging LMTP setups without engaging NNTP.
  +Possible values for I<deliverymode> are C<post>, C<feed> or a string in
  +"LLL/D.D.D" format used to fake a LMTP return code.  In C<post> mode articles
  +are sent to the NNTP server(s) using POST command. Before posting, a duplicate
  +check using STAT command is issued. In C<feed> mode articles are sent to the
  +NNTP server(s) using IHAVE command.  Specifying a return code and DSN replaces
  +the post/ feed logic by a noop and assumes the given string must be returned
  +to the LMTP side.  The slash is replaced by a space internally. The default is
  +"553/5.7.1" meaning "Requested action not taken: mailbox name not allowed/
  +Delivery not authorized, message refused".  This is useful for debugging LMTP
  +setups without engaging NNTP.  Fake mode makes it possible to run without any
  +B<-h> option. However, if B<-h> option is given the NNTP client tries to
  +connect but it's return codes are ignored.
   
   =item B<-g> I<groupmode>
   
  Index: ossp-pkg/lmtp2nntp/nntp.c
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 nntp.c
  --- ossp-pkg/lmtp2nntp/nntp.c	2001/09/10 12:48:14	1.23
  +++ ossp-pkg/lmtp2nntp/nntp.c	2001/09/10 14:11:33	1.24
  @@ -451,6 +451,7 @@
       else if (rc == NNTP_EOF         ) str = "NNTP: end of file";
       else if (rc == NNTP_TIMEOUT     ) str = "NNTP: timeout";
       else if (rc == NNTP_DEFER       ) str = "NNTP: transmission deferred";
  +    else if (rc == NNTP_FAKE        ) str = "NNTP: fake status not real";
       else if (rc == NNTP_ERR_SYSTEM  ) str = "NNTP: see errno";
       else if (rc == NNTP_ERR_ARG     ) str = "NNTP: invalid argument";
       else if (rc == NNTP_ERR_OVERFLOW) str = "NNTP: buffer overflow";
  Index: ossp-pkg/lmtp2nntp/nntp.h
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 nntp.h
  --- ossp-pkg/lmtp2nntp/nntp.h	2001/09/10 12:48:14	1.10
  +++ ossp-pkg/lmtp2nntp/nntp.h	2001/09/10 14:11:33	1.11
  @@ -48,6 +48,7 @@
       NNTP_EOF,
       NNTP_TIMEOUT,
       NNTP_DEFER,
  +    NNTP_FAKE,
       NNTP_ERR_SYSTEM,
       NNTP_ERR_ARG,
       NNTP_ERR_OVERFLOW,

From ossp-cvs-owner@ossp.org  Mon Sep 10 16:32:59 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8AEWwD93714; Mon, 10 Sep 2001 16:32:58 +0200 (CEST)
Date: Mon, 10 Sep 2001 16:32:58 +0200 (CEST)
Message-Id: <200109101432.f8AEWwD93714@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_socket.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   10-Sep-2001 16:32:58
  Branch: HEAD                             Handle: 2001091015325700

  Modified files:
    ossp-pkg/l2             l2_ch_socket.c

  Log:
    Removed unused variables.

  Summary:
    Revision    Changes     Path
    1.23        +0  -2      ossp-pkg/l2/l2_ch_socket.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_socket.c
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 l2_ch_socket.c
  --- ossp-pkg/l2/l2_ch_socket.c	2001/09/10 06:43:10	1.22
  +++ ossp-pkg/l2/l2_ch_socket.c	2001/09/10 14:32:57	1.23
  @@ -136,12 +136,10 @@
   /* open channel */
   static l2_result_t hook_open(l2_context_t *ctx, l2_channel_t *ch)
   {
  -    //FIXME int                 i;
       l2_ch_socket_t      *cfg = (l2_ch_socket_t *)ctx->vp;
       struct hostent      *pHostentry;
       struct sockaddr_in  IP4Localsock, IP4Sockaddr;
       struct sockaddr_in6 IP6Localsock, IP6Sockaddr;
  -    //FIXME struct in6_addr     *IP6Addr;
   
       /* make sure a target is configured */
       if (cfg->pszHost == NULL)

From ossp-cvs-owner@ossp.org  Mon Sep 10 16:33:26 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8AEXPX93773; Mon, 10 Sep 2001 16:33:25 +0200 (CEST)
Date: Mon, 10 Sep 2001 16:33:25 +0200 (CEST)
Message-Id: <200109101433.f8AEXPX93773@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_syslog.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   10-Sep-2001 16:33:25
  Branch: HEAD                             Handle: 2001091015332400

  Modified files:
    ossp-pkg/l2             l2_ch_syslog.c

  Log:
    Removed unused variable.

  Summary:
    Revision    Changes     Path
    1.19        +0  -2      ossp-pkg/l2/l2_ch_syslog.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_syslog.c
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 l2_ch_syslog.c
  --- ossp-pkg/l2/l2_ch_syslog.c	2001/09/10 06:42:00	1.18
  +++ ossp-pkg/l2/l2_ch_syslog.c	2001/09/10 14:33:24	1.19
  @@ -108,8 +108,6 @@
   /* close channel */
   static l2_result_t hook_close(l2_context_t *ctx, l2_channel_t *ch)
   {
  -    //FIXME l2_ch_syslog_t *cfg = (l2_ch_syslog_t *)ctx->vp;
  -
       /* close channel syslog */
       closelog();
   

From ossp-cvs-owner@ossp.org  Mon Sep 10 16:34:13 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8AEYCd93849; Mon, 10 Sep 2001 16:34:12 +0200 (CEST)
Date: Mon, 10 Sep 2001 16:34:12 +0200 (CEST)
Message-Id: <200109101434.f8AEYCd93849@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   10-Sep-2001 16:34:12
  Branch: HEAD                             Handle: 2001091015341100

  Modified files:
    ossp-pkg/l2             l2_test.c

  Log:
    Added provisional testing of syslog channel. Once syslog is trimmed or
    redesigned, this test code will reflect the changes.

  Summary:
    Revision    Changes     Path
    1.17        +17 -1      ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/09/09 16:01:43	1.16
  +++ ossp-pkg/l2/l2_test.c	2001/09/10 14:34:11	1.17
  @@ -33,6 +33,7 @@
   #include <sys/socket.h>  /* socket testing only                 */
   #include <netinet/in.h>
   #include <netdb.h>
  +#include <syslog.h>
   
   #include "l2.h"
   
  @@ -65,6 +66,7 @@
       l2_channel_t *chPrefix;
       l2_channel_t *chBuf;
       l2_channel_t *chFile;
  +    l2_channel_t *chSyslog;
   #ifdef WITH_SOCKET
       l2_channel_t *chSock;
   #endif
  @@ -88,7 +90,7 @@
           die("failed to create socket channel");
   
       if (l2_channel_configure(chSock, "protocol,ipversion,host,port",\
  -        IPPROTO_UDP, AF_INET, "localhost", 2002) != L2_OK)
  +        IPPROTO_TCP, AF_INET, "localhost", 2002) != L2_OK)
           die("failed to configure socket ipv4 channel");
   #if 0
       if (l2_channel_configure(chSock, "protocol,ipversion,host,port",\
  @@ -131,6 +133,20 @@
   
       if (l2_stream_channel(st, chPrefix, L2_LEVEL_UPTO(L2_LEVEL_WARNING)) != L2_OK)
           die("failed to attach channel stack into stream");
  +
  +    if ((chSyslog = l2_channel_create(&l2_handler_syslog)) == NULL)   /* Syslog */
  +        die("failed to create syslog channel");
  +
  +    if (l2_channel_configure(chSyslog, "ident,logopts,facility,priority,maskpriority",\
  +        "Test", (LOG_PID | LOG_CONS), LOG_USER, (LOG_CRIT|LOG_ALERT|LOG_NOTICE),\
  +        0xFFFFFFFF) != L2_OK)
  +        die("failed to configure file channel");
  +
  +    if (l2_channel_open(chSyslog) != L2_OK)
  +        die("failed to open channel stack");
  +
  +    if (l2_stream_channel(st, chSyslog, L2_LEVEL_UPTO(L2_LEVEL_WARNING)) != L2_OK)
  +        die("failed to attach channel syslog into stream");
   
   #ifdef WITH_SMTP
       if ((chSmtp = l2_channel_create(&l2_handler_smtp)) == NULL)   /* SMTP */

From ossp-cvs-owner@ossp.org  Tue Sep 11 08:36:10 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8B6a8X15781; Tue, 11 Sep 2001 08:36:08 +0200 (CEST)
Date: Tue, 11 Sep 2001 08:36:08 +0200 (CEST)
Message-Id: <200109110636.f8B6a8X15781@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp sa.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   11-Sep-2001 08:36:08
  Branch: HEAD                             Handle: 1970010101000000

  Removed files:
    ossp-pkg/lmtp2nntp      sa.pod

  Log:
    The socket adapter was a starting point only. It was the base for and is
    currenlty maintained in l2/l2_ut_sa.c and still growing. So this tiny little
    incarnation is a dead-end and needs no manual page.

  Summary:
    Revision    Changes     Path
    NONE        +0  -90     ossp-pkg/lmtp2nntp/sa.pod
  ____________________________________________________________________________

  

From ossp-cvs-owner@ossp.org  Tue Sep 11 08:37:54 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8B6bru16217; Tue, 11 Sep 2001 08:37:53 +0200 (CEST)
Date: Tue, 11 Sep 2001 08:37:53 +0200 (CEST)
Message-Id: <200109110637.f8B6bru16217@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   11-Sep-2001 08:37:53
  Branch: HEAD                             Handle: 2001091107375300

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.h

  Log:
    cleaned FIXMEs regarding CU/CUS cleanup sequence logic

  Summary:
    Revision    Changes     Path
    1.4         +2  -5      ossp-pkg/lmtp2nntp/lmtp2nntp.h
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.h
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 lmtp2nntp.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.h	2001/09/10 06:54:06	1.3
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.h	2001/09/11 06:37:53	1.4
  @@ -45,11 +45,8 @@
   #define log4(ctx,level,msg,a1,a2,a3,a4) \
       l2_stream_log((ctx)->l2, L2_LEVEL_##level, "%P: " msg, a1, a2, a3, a4)
   
  -#define ZERO 0
  -#define STMT(stuff) do { stuff } while (ZERO)
  +#define STMT(stuff) do { stuff } while (0)
   #define CU(returncode) STMT( rc = returncode; goto CUS; )
  -//FIXME #define VCU STMT( goto CUS; )
  -//FIXME #define RETURN_WVAL(val) return (val)
  -//FIXME #define RETURN_EXRC return (rc)
  +#define VCU STMT( goto CUS; )
   
   #endif /* __LMTP2NNTP_H__ */

From ossp-cvs-owner@ossp.org  Tue Sep 11 08:42:01 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8B6g0A16692; Tue, 11 Sep 2001 08:42:00 +0200 (CEST)
Date: Tue, 11 Sep 2001 08:42:00 +0200 (CEST)
Message-Id: <200109110642.f8B6g0A16692@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO lmtp2nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   11-Sep-2001 08:42:00
  Branch: HEAD                             Handle: 2001091107415900

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO lmtp2nntp.c

  Log:
    RFC1891 ENVID, 6.2 is not the way to go findind out the queue-ID from
    sendmail. It is a information stored in the message envelope and received and
    forwarded by sendmail but it has no relationship to the queue-ID.

  Summary:
    Revision    Changes     Path
    1.32        +1  -1      ossp-pkg/lmtp2nntp/00TODO
    1.50        +1  -4      ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	2001/09/10 12:50:35	1.31
  +++ ossp-pkg/lmtp2nntp/00TODO	2001/09/11 06:41:59	1.32
  @@ -16,7 +16,7 @@
    AUTHORS
    THANKS - contributors
   
  -[B<-i> I<messageid>] use L2 for logging, grab ID through RFC1891 ENVID, 6.2
  +[B<-i> I<messageid>]
   
   CU/CUS
   
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.49 -r1.50 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/10 14:11:33	1.49
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/11 06:41:59	1.50
  @@ -88,8 +88,6 @@
   #define STDSTRLEN 128
   #define MAXNEWSSERVICES 16
   
  -//FIXME extern void lmtp_debug_dumplmtp(lmtp_t *lmtp);
  -
   static lmtp_rc_t lmtp_cb_lhlo(lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *ctx);
   static lmtp_rc_t lmtp_cb_mail(lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *ctx);
   static lmtp_rc_t lmtp_cb_rcpt(lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *ctx);
  @@ -901,8 +899,7 @@
                  "ENHANCEDSTATUSCODES\n"               /* RFC2034 */
                  "DSN\n"                               /* RFC1894 */
                  "PIPELINING\n"                        /* RFC1854 */
  -               "8BITMIME\n"                          /* RFC1652 */
  -               "ENVID",                              /* FIXME */
  +               "8BITMIME\n",                         /* RFC1652 */
                  ctx->uname.nodename,
                  ctx->session.lhlo_domain);
       res.statuscode = "250";

From ossp-cvs-owner@ossp.org  Tue Sep 11 08:43:15 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8B6hE916848; Tue, 11 Sep 2001 08:43:14 +0200 (CEST)
Date: Tue, 11 Sep 2001 08:43:14 +0200 (CEST)
Message-Id: <200109110643.f8B6hE916848@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO AUTHORS NEWS README THANKS
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   11-Sep-2001 08:43:14
  Branch: HEAD                             Handle: 2001091107431300

  Added files:
    ossp-pkg/lmtp2nntp      NEWS THANKS
  Modified files:
    ossp-pkg/lmtp2nntp      00TODO AUTHORS README

  Log:
    added/ updated GNU style information files

  Summary:
    Revision    Changes     Path
    1.33        +12 -30     ossp-pkg/lmtp2nntp/00TODO
    1.2         +4  -3      ossp-pkg/lmtp2nntp/AUTHORS
    1.1         +11 -0      ossp-pkg/lmtp2nntp/NEWS
    1.5         +12 -0      ossp-pkg/lmtp2nntp/README
    1.1         +10 -0      ossp-pkg/lmtp2nntp/THANKS
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.32 -r1.33 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	2001/09/11 06:41:59	1.32
  +++ ossp-pkg/lmtp2nntp/00TODO	2001/09/11 06:43:13	1.33
  @@ -1,35 +1,17 @@
   
  -panic   = unexpected
  -error   = i/o error, errno ...
  -warning = NNTP connect failed
  - info   = *MOST COMMON* step by step
  -trace   = ist bisheriger trace.c
  -debug   = developer meldungen
  +- [B<-i> I<messageid>]
  +- CU/CUS
  +- str debugging
  +- FIXME
  +- signal handler to catch EINTR and segfaults
  +- check gcc3 compatiblity
  +- how to log nothing
  +
  +  -l syslog:[mask]//[localhost[:port]][/facility]
  +  -l   smtp:[mask]//[localhost[:port]][/tag:value ...]
  +  -l   file:[mask]//path/file
  +  -L streamlog
   
  -NOTICE = startup/ statistics/ shutdown
  - ERROR = reject
  - nur bei DEBUG die function names verwenden
  -
  - README
  - Changelog - via cvs2cl - ask RSE for apache-style
  - NEWS
  - AUTHORS
  - THANKS - contributors
  -
  -[B<-i> I<messageid>]
  -
  -CU/CUS
  -
  -str debugging
  -
  -FIXME 
  -
  -- -l error:syslog[:facility]
  -- -l error:smtp://host[:port][/postmaster@mail.de.cw.net]
  -- -l debug:file:/path
  -- -L warning
  -
  -check gcc3 compatiblity
   
       **** DEVELOPMENT INFORMATION ****
   
  Index: ossp-pkg/lmtp2nntp/AUTHORS
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 AUTHORS
  --- ossp-pkg/lmtp2nntp/AUTHORS	2001/09/04 09:46:06	1.1
  +++ ossp-pkg/lmtp2nntp/AUTHORS	2001/09/11 06:43:13	1.2
  @@ -2,9 +2,10 @@
     AUTHORS
     =======
   
  -  This is a list of authors who have written
  -  or edited major parts of the OSSP lmtp2nntp sources.
  +  This is a list of authors who have written or 
  +  edited major parts of the OSSP lmtp2nntp sources.
   
  -  Ralf S. Engelschall   <rse@engelschall.com>
  +  Ralf S. Engelschall   <ralf.engelschall@cw.com>
     Thomas Lotterer       <thomas.lotterer@cw.com>
  +  Michael Schloh        <michael.schloh@cw.com>
   
  Index: ossp-pkg/lmtp2nntp/NEWS
  ============================================================
  $ cvs update -p -r1.1 NEWS
  
    NEWS
    ====
  
    OSSP lmtp2nntp - mail to news gateway
  
    This is the initial public release. Thanks to Cable & Wireless Deutschland
    GmbH for supporting open source software. Those folks who tested and
    implemented the internal 0.9.x releases please review the options. Both
    names and functionality has been changed!
  
  Index: ossp-pkg/lmtp2nntp/README
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 README
  --- ossp-pkg/lmtp2nntp/README	2001/08/28 13:12:58	1.4
  +++ ossp-pkg/lmtp2nntp/README	2001/09/11 06:43:13	1.5
  @@ -1,3 +1,15 @@
   
  +  README
  +  ======
  +
     OSSP lmtp2nntp - mail to news gateway
  +
  +  The lmtp2nntp program is a LMTP service which is usually invoked by a MTA.
  +  Input messages get their headers slightly reformatted to match network news
  +  article format. The article is then posted or fed into a NNTP service.
  +  Delivery must take place immediately or the transaction fails.  A LMTP
  +  service relies on the queuing capabilities of its MTA. To support this, the
  +  program returns proper delivery status notification which indicates
  +  successful completed action, persistent transient failure or permanent
  +  failure.
   
  Index: ossp-pkg/lmtp2nntp/THANKS
  ============================================================
  $ cvs update -p -r1.1 THANKS
  
    THANKS
    ======
  
    This is a list of contributors who have written or edited
    parts of the OSSP lmtp2nntp sources or inspired the AUTHORS.
  
    Christoph Schug <christoph.schug@cw.com>
    - LMTP idea as an alternative to piping into a script
  

From ossp-cvs-owner@ossp.org  Tue Sep 11 12:17:24 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8BAHNh42462; Tue, 11 Sep 2001 12:17:23 +0200 (CEST)
Date: Tue, 11 Sep 2001 12:17:23 +0200 (CEST)
Message-Id: <200109111017.f8BAHNh42462@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   11-Sep-2001 12:17:23
  Branch: HEAD                             Handle: 2001091111172300

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    Added idea of rewriting the syslog write hook.

  Summary:
    Revision    Changes     Path
    1.16        +4  -0      ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 TODO
  --- ossp-pkg/l2/TODO	2001/09/09 15:59:46	1.15
  +++ ossp-pkg/l2/TODO	2001/09/11 10:17:23	1.16
  @@ -72,6 +72,10 @@
     - fd=int
   o l2_handler_syslog
     - ident=char*
  +  - should have its own logic
  +    and not use unix lib syslog()
  +    thus able to write to a remote
  +    syslog daemon
   o l2_handler_filter
     - pattern=char*
   o l2_handler_prefix

From ossp-cvs-owner@ossp.org  Tue Sep 11 12:24:55 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8BAOsm43305; Tue, 11 Sep 2001 12:24:54 +0200 (CEST)
Date: Tue, 11 Sep 2001 12:24:54 +0200 (CEST)
Message-Id: <200109111024.f8BAOsm43305@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp configure.ac
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   11-Sep-2001 12:24:54
  Branch: HEAD                             Handle: 2001091111245400

  Modified files:
    ossp-pkg/lmtp2nntp      configure.ac

  Log:
    fix EXTLIB stuff

  Summary:
    Revision    Changes     Path
    1.10        +6  -3      ossp-pkg/lmtp2nntp/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/configure.ac
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 configure.ac
  --- ossp-pkg/lmtp2nntp/configure.ac	2001/09/05 09:10:28	1.9
  +++ ossp-pkg/lmtp2nntp/configure.ac	2001/09/11 10:24:54	1.10
  @@ -52,7 +52,7 @@
                    CPPFLAGS="$CPPFLAGS -Istr"
                    CFLAGS="$CFLAGS -Istr"
                    LDFLAGS="$LDFLAGS -Lstr/.libs"
  -                 LIBS="$LIBS -lstr"])
  +                 LIBS_EXTRA="$LIBS_EXTRA -lstr"])
   AC_SUBST(SUBDIR_STR)
   
   dnl #   check for L2 library
  @@ -63,15 +63,18 @@
                    CPPFLAGS="$CPPFLAGS -Il2"
                    CFLAGS="$CFLAGS -Il2"
                    LDFLAGS="$LDFLAGS -Ll2/.libs"
  -                 LIBS="$LIBS -ll2"])
  +                 LIBS_EXTRA="$LIBS_EXTRA -ll2"])
   AC_SUBST(SUBDIR_L2)
   
   dnl #   check for external Dmalloc library
   AC_CHECK_EXTLIB([Dmalloc], dmalloc, dmalloc_debug, dmalloc.h, AC_DEFINE(DMALLOC))
   
  +dnl #   post-processing for LIBS_EXTRA
  +LIBS="$LIBS $LIBS_EXTRA"
  +
   enable_shared=no
   export enable_shared
  -AC_CONFIG_SUBDIRS($SUBDIR_STR $SUBDIR_L2)
  +AC_CONFIG_SUBDIRS([$SUBDIR_STR $SUBDIR_L2])
   
   dnl #   standard output generation
   AC_CONFIG_HEADERS(config.h)

From ossp-cvs-owner@ossp.org  Tue Sep 11 12:37:07 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8BAb5o44751; Tue, 11 Sep 2001 12:37:05 +0200 (CEST)
Date: Tue, 11 Sep 2001 12:37:05 +0200 (CEST)
Message-Id: <200109111037.f8BAb5o44751@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 acconfig.h aclocal.m4 configure.ac l2_ch_socke...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   11-Sep-2001 12:37:05
  Branch: HEAD                             Handle: 2001091111370400

  Added files:
    ossp-pkg/l2             acconfig.h
  Modified files:
    ossp-pkg/l2             aclocal.m4 configure.ac l2_ch_socket.c l2_p.h
                            l2_ut_sa.c

  Log:
    add Dmalloc support to L2

  Summary:
    Revision    Changes     Path
    1.1         +4  -0      ossp-pkg/l2/acconfig.h
    1.4         +135 -0     ossp-pkg/l2/aclocal.m4
    1.6         +2  -0      ossp-pkg/l2/configure.ac
    1.24        +1  -1      ossp-pkg/l2/l2_ch_socket.c
    1.15        +6  -0      ossp-pkg/l2/l2_p.h
    1.6         +1  -1      ossp-pkg/l2/l2_ut_sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/acconfig.h
  ============================================================
  $ cvs update -p -r1.1 acconfig.h
  
  /* optional Dmalloc support */
  #undef WITH_DMALLOC
  
  Index: ossp-pkg/l2/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 aclocal.m4
  --- ossp-pkg/l2/aclocal.m4	2001/08/15 10:36:03	1.3
  +++ ossp-pkg/l2/aclocal.m4	2001/09/11 10:37:04	1.4
  @@ -186,3 +186,138 @@
       AC_PROG_LIBTOOL
   ])
   
  +dnl ##
  +dnl ##  Check for an external/extension library.
  +dnl ##  - is aware of <libname>-config style scripts
  +dnl ##  - searches under standard paths include, lib, etc.
  +dnl ##  - searches under subareas like .libs, etc.
  +dnl ##
  +dnl ##  configure.in:
  +dnl ##      AC_CHECK_EXTLIB(<realname>, <libname>, <func>, <header>,
  +dnl ##                      [<success-action> [, <fail-action>]])
  +dnl ##  Makefile.in:
  +dnl ##      CFLAGS  = @CFLAGS@
  +dnl ##      LDFLAGS = @LDFLAGS@
  +dnl ##      LIBS    = @LIBS@
  +dnl ##  shell:
  +dnl ##      $ ./configure --with-<libname>[=DIR]
  +dnl ##
  +
  +AC_DEFUN(AC_CHECK_EXTLIB,[dnl
  +AC_ARG_WITH($2, [dnl
  +[  --with-]$2[[=DIR]        build with external $1 library (default=no)]], [dnl
  +    if test ".$with_$2" = .yes; then
  +        #   via config script
  +        $2_version=`($2-config --version) 2>/dev/null`
  +        if test ".$$2_version" != .; then
  +            CPPFLAGS="$CPPFLAGS `$2-config --cflags`"
  +            CFLAGS="$CFLAGS `$2-config --cflags`"
  +            LDFLAGS="$LDFLAGS `$2-config --ldflags`"
  +        fi
  +    else
  +        if test -d "$with_$2"; then
  +            found=0
  +            #   via config script
  +            for dir in $with_$2/bin $with_$2; do
  +                if test -f "$dir/$2-config"; then
  +                    $2_version=`($dir/$2-config --version) 2>/dev/null`
  +                    if test ".$$2_version" != .; then
  +                        CPPFLAGS="$CPPFLAGS `$dir/$2-config --cflags`"
  +                        CFLAGS="$CFLAGS `$dir/$2-config --cflags`"
  +                        LDFLAGS="$LDFLAGS `$dir/$2-config --ldflags`"
  +                        found=1
  +                        break
  +                    fi
  +                fi
  +            done
  +            #   via standard paths
  +            if test ".$found" = .0; then
  +                for dir in $with_$2/include/$2 $with_$2/include $with_$2; do
  +                    if test -f "$dir/$4"; then
  +                        CPPFLAGS="$CPPFLAGS -I$dir"
  +                        CFLAGS="$CFLAGS -I$dir"
  +                        found=1
  +                        break
  +                    fi
  +                done
  +                for dir in $with_$2/lib/$2 $with_$2/lib $with_$2; do
  +                    if test -f "$dir/lib$2.a" -o -f "$dir/lib$2.so"; then
  +                        LDFLAGS="$LDFLAGS -L$dir"
  +                        found=1
  +                        break
  +                    fi
  +                done
  +            fi
  +            #   in any subarea
  +            if test ".$found" = .0; then
  +changequote(, )dnl
  +                for file in x `find $with_$2 -name "$4" -type f -print`; do
  +                    test .$file = .x && continue
  +                    dir=`echo $file | sed -e 's;[[^/]]*$;;' -e 's;\(.\)/$;\1;'`
  +                    CPPFLAGS="$CPPFLAGS -I$dir"
  +                    CFLAGS="$CFLAGS -I$dir"
  +                done
  +                for file in x `find $with_$2 -name "lib$2.[[aso]]" -type f -print`; do
  +                    test .$file = .x && continue
  +                    dir=`echo $file | sed -e 's;[[^/]]*$;;' -e 's;\(.\)/$;\1;'`
  +                    LDFLAGS="$LDFLAGS -L$dir"
  +                done
  +changequote([, ])dnl
  +            fi
  +        fi
  +    fi
  +    AC_HAVE_HEADERS($4)
  +    AC_CHECK_LIB($2, $3)
  +    AC_IFALLYES(header:$4 lib:$2_$3, with_$2=yes, with_$2=no)
  +    if test ".$with_$2" = .no; then
  +        AC_ERROR([Unable to find $1 library])
  +    fi
  +    ], [dnl
  +if test ".$with_$2" = .; then
  +    with_$2=no
  +fi
  +    ])dnl
  +AC_MSG_CHECKING(whether to build against external $1 library)
  +if test ".$with_$2" = .yes; then
  +    ifelse([$5], , :, [$5])
  +else
  +    ifelse([$6], , :, [$6])
  +fi
  +AC_MSG_RESULT([$with_$2])
  +])dnl
  +
  +define(AC_IFALLYES,[dnl
  +ac_rc=yes
  +for ac_spec in $1; do
  +    ac_type=`echo "$ac_spec" | sed -e 's/:.*$//'`
  +    ac_item=`echo "$ac_spec" | sed -e 's/^.*://'`
  +    case $ac_type in
  +        header [)]
  +            ac_item=`echo "$ac_item" | sed 'y%./+-%__p_%'`
  +            ac_var="ac_cv_header_$ac_item"
  +            ;;
  +        file [)]
  +            ac_item=`echo "$ac_item" | sed 'y%./+-%__p_%'`
  +            ac_var="ac_cv_file_$ac_item"
  +            ;;
  +        func    [)] ac_var="ac_cv_func_$ac_item"   ;;
  +        lib     [)] ac_var="ac_cv_lib_$ac_item"    ;;
  +        define  [)] ac_var="ac_cv_define_$ac_item" ;;
  +        typedef [)] ac_var="ac_cv_typedef_$ac_item" ;;
  +        custom  [)] ac_var="$ac_item" ;;
  +    esac
  +    eval "ac_val=\$$ac_var"
  +    if test ".$ac_val" != .yes; then
  +        ac_rc=no
  +        break
  +    fi
  +done
  +if test ".$ac_rc" = .yes; then
  +    :
  +    $2
  +else
  +    :
  +    $3
  +fi
  +])
  +
  Index: ossp-pkg/l2/configure.ac
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 configure.ac
  --- ossp-pkg/l2/configure.ac	2001/09/10 09:48:48	1.5
  +++ ossp-pkg/l2/configure.ac	2001/09/11 10:37:04	1.6
  @@ -77,6 +77,8 @@
   AC_CONFIGURE_LIBTOOL
   AC_CHECK_FUNCS(inet_aton inet_pton inet_ntoa inet_ntop snprintf vsnprintf)
   
  +AC_CHECK_EXTLIB([Dmalloc], dmalloc, dmalloc_debug, dmalloc.h, AC_DEFINE(WITH_DMALLOC))
  +
   AC_OUTPUT(dnl
   Makefile dnl
   l2.h dnl
  Index: ossp-pkg/l2/l2_ch_socket.c
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 l2_ch_socket.c
  --- ossp-pkg/l2/l2_ch_socket.c	2001/09/10 14:32:57	1.23
  +++ ossp-pkg/l2/l2_ch_socket.c	2001/09/11 10:37:04	1.24
  @@ -36,7 +36,7 @@
   #include <arpa/inet.h>
   
   #include "l2.h"
  -#include "l2_config.h"
  +#include "l2_p.h"
   
   #if defined(HAVE_INET_PTON)
   #define l2_inet_pton inet_pton
  Index: ossp-pkg/l2/l2_p.h
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 l2_p.h
  --- ossp-pkg/l2/l2_p.h	2001/09/10 10:15:11	1.14
  +++ ossp-pkg/l2/l2_p.h	2001/09/11 10:37:04	1.15
  @@ -33,8 +33,14 @@
   #include <stdlib.h>
   #include <errno.h>
   
  +#include "l2.h"
  +#include "l2_config.h"
   #include "l2_ut_pcre.h"
   #include "l2_ut_sa.h"
  +
  +#if defined(HAVE_DMALLOC_H) && defined(WITH_DMALLOC)
  +#include "dmalloc.h"
  +#endif
   
   #define L2_MAX_MSGSIZE    4096
   #define L2_MAX_CHANNELS    128
  Index: ossp-pkg/l2/l2_ut_sa.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 l2_ut_sa.c
  --- ossp-pkg/l2/l2_ut_sa.c	2001/09/09 15:54:31	1.5
  +++ ossp-pkg/l2/l2_ut_sa.c	2001/09/11 10:37:04	1.6
  @@ -46,7 +46,7 @@
   #include <arpa/inet.h>
   
   /* own headers */
  -#include "l2_config.h"
  +#include "l2_p.h"
   #include "l2_ut_sa.h"
   
   struct sa_addr_st {

From ossp-cvs-owner@ossp.org  Tue Sep 11 12:40:58 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8BAevT45362; Tue, 11 Sep 2001 12:40:57 +0200 (CEST)
Date: Tue, 11 Sep 2001 12:40:57 +0200 (CEST)
Message-Id: <200109111040.f8BAevT45362@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str acconfig.h configure.ac str_p.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   11-Sep-2001 12:40:57
  Branch: HEAD                             Handle: 2001091111405600

  Modified files:
    ossp-pkg/str            acconfig.h configure.ac str_p.h

  Log:
    add Dmalloc support to Str

  Summary:
    Revision    Changes     Path
    1.3         +3  -0      ossp-pkg/str/acconfig.h
    1.5         +2  -0      ossp-pkg/str/configure.ac
    1.17        +4  -0      ossp-pkg/str/str_p.h
  ____________________________________________________________________________

  Index: ossp-pkg/str/acconfig.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 acconfig.h
  --- ossp-pkg/str/acconfig.h	1999/12/28 10:18:59	1.2
  +++ ossp-pkg/str/acconfig.h	2001/09/11 10:40:56	1.3
  @@ -1,3 +1,6 @@
   
  +/* optional Dmalloc support */
  +#undef WITH_DMALLOC
  +
   #undef STR_DEBUG
   
  Index: ossp-pkg/str/configure.ac
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 configure.ac
  --- ossp-pkg/str/configure.ac	2001/09/10 09:55:13	1.4
  +++ ossp-pkg/str/configure.ac	2001/09/11 10:40:56	1.5
  @@ -35,6 +35,8 @@
   
   AC_CHECK_FUNC(modf, , AC_CHECK_LIB(m, modf))
   
  +AC_CHECK_EXTLIB([Dmalloc], dmalloc, dmalloc_debug, dmalloc.h, AC_DEFINE(WITH_DMALLOC))
  +
   AC_OUTPUT(dnl
   Makefile dnl
   str.h dnl
  Index: ossp-pkg/str/str_p.h
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 str_p.h
  --- ossp-pkg/str/str_p.h	2001/08/16 13:21:22	1.16
  +++ ossp-pkg/str/str_p.h	2001/09/11 10:40:56	1.17
  @@ -38,6 +38,10 @@
   
   #include "str_pcre.h"
   
  +#if defined(HAVE_DMALLOC_H) && defined(WITH_DMALLOC)
  +#include "dmalloc.h"
  +#endif
  +
   /* explicit support for unsigned char based ctype stuff */
   #define str_isalpha(c)  (isalpha(((unsigned char)(c))))
   #define str_isdigit(c)  (isdigit(((unsigned char)(c))))

From ossp-cvs-owner@ossp.org  Tue Sep 11 13:39:30 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8BBdSL52358; Tue, 11 Sep 2001 13:39:28 +0200 (CEST)
Date: Tue, 11 Sep 2001 13:39:28 +0200 (CEST)
Message-Id: <200109111139.f8BBdSL52358@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str str_parse.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   11-Sep-2001 13:39:28
  Branch: HEAD                             Handle: 2001091112392800

  Modified files:
    ossp-pkg/str            str_parse.c

  Log:
    try to fix memory leak

  Summary:
    Revision    Changes     Path
    1.16        +14 -9      ossp-pkg/str/str_parse.c
  ____________________________________________________________________________

  Index: ossp-pkg/str/str_parse.c
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 str_parse.c
  --- ossp-pkg/str/str_parse.c	2001/08/28 10:38:44	1.15
  +++ ossp-pkg/str/str_parse.c	2001/09/11 11:39:28	1.16
  @@ -270,8 +270,8 @@
   }
   int str_parse_va(const char *string, const char *pattern, va_list ap)
   {
  -    pcre *p_pcre;
  -    pcre_extra *p_pcre_extra;
  +    pcre *p_pcre = NULL;
  +    pcre_extra *p_pcre_extra = NULL;
       const char *match_ptr; 
       int match_len;
       int match_opt;
  @@ -417,10 +417,10 @@
       if (cap_num > 0) {
           cap_len = (cap_num+1)*3;
           if ((cap_vec = (int *)malloc(cap_len*sizeof(int))) == NULL) {
  -            if (!match_once) {
  +            if (p_pcre != NULL)
                   free(p_pcre);
  +            if (p_pcre_extra != NULL)
                   free(p_pcre_extra);
  -            }
               return -1;
           }
       }
  @@ -432,10 +432,10 @@
       if (n < 0) {
           if (cap_vec != NULL)
               free(cap_vec);
  -        if (!match_once) {
  +        if (p_pcre != NULL)
               free(p_pcre);
  +        if (p_pcre_extra != NULL)
               free(p_pcre_extra);
  -        }
           if (n == PCRE_ERROR_NOMATCH)
               return 0;
           return -1;
  @@ -566,8 +566,13 @@
           l = str_vformat(&sf, buf_ptr, ap);
   
           /* allocate output buffer */
  -        if ((*cpp = (char *)malloc(l+1)) == NULL)
  +        if ((*cpp = (char *)malloc(l+1)) == NULL) {
  +            if (p_pcre != NULL)
  +                free(p_pcre);
  +            if (p_pcre_extra != NULL)
  +                free(p_pcre_extra);
               return -1; /* XXX */
  +        }
   
           /* finally expand the substitutions string into output buffer */
           sf.curpos    = *cpp;
  @@ -588,10 +593,10 @@
       /* cleanup */
       if (cap_vec != NULL)
           free(cap_vec);
  -    if (!match_once) {
  +    if (p_pcre != NULL)
           free(p_pcre);
  +    if (p_pcre_extra != NULL)
           free(p_pcre_extra);
  -    }
       /* return success */
       return 1;
   }

From ossp-cvs-owner@ossp.org  Tue Sep 11 14:00:02 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8BC01M54950; Tue, 11 Sep 2001 14:00:01 +0200 (CEST)
Date: Tue, 11 Sep 2001 14:00:01 +0200 (CEST)
Message-Id: <200109111200.f8BC01M54950@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_buffer.c l2_ch_prefix.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   11-Sep-2001 14:00:01
  Branch: HEAD                             Handle: 2001091112595900

  Modified files:
    ossp-pkg/l2             l2_ch_buffer.c l2_ch_prefix.c

  Log:
    fix channel destruction in case of channel stacks

  Summary:
    Revision    Changes     Path
    1.18        +6  -0      ossp-pkg/l2/l2_ch_buffer.c
    1.11        +6  -0      ossp-pkg/l2/l2_ch_prefix.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_buffer.c
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 l2_ch_buffer.c
  --- ossp-pkg/l2/l2_ch_buffer.c	2001/09/06 16:10:05	1.17
  +++ ossp-pkg/l2/l2_ch_buffer.c	2001/09/11 11:59:59	1.18
  @@ -175,6 +175,8 @@
   static l2_result_t hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_buffer_t *cfg = (l2_ch_buffer_t *)ctx->vp;
  +    l2_channel_t *downstream = l2_channel_downstream(ch);
  +    l2_result_t rv;
   
       /* if not already closed, close channel buffer now */
       if (cfg->buf != NULL) {
  @@ -184,6 +186,10 @@
   
       /* destroy channel configuration */
       free(cfg);
  +
  +    /* optionally destroy downstream channel, too */
  +    if ((rv = l2_channel_destroy(downstream)) != L2_OK)
  +        return rv;
   
       return L2_OK;
   }
  Index: ossp-pkg/l2/l2_ch_prefix.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 l2_ch_prefix.c
  --- ossp-pkg/l2/l2_ch_prefix.c	2001/09/06 16:10:05	1.10
  +++ ossp-pkg/l2/l2_ch_prefix.c	2001/09/11 11:59:59	1.11
  @@ -119,6 +119,8 @@
   static l2_result_t hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_prefix_t *cfg = (l2_ch_prefix_t *)ctx->vp;
  +    l2_channel_t *downstream = l2_channel_downstream(ch);
  +    l2_result_t rv;
   
       /* free prefix structure */
       if (cfg->timefmt != NULL)
  @@ -126,6 +128,10 @@
       if (cfg->timezone != NULL)
           free(cfg->timezone);
       free(cfg);
  +
  +    /* optionally destroy downstream channel, too */
  +    if ((rv = l2_channel_destroy(downstream)) != L2_OK)
  +        return rv;
   
       return L2_OK;
   }

From ossp-cvs-owner@ossp.org  Tue Sep 11 14:32:03 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8BCW3w58724; Tue, 11 Sep 2001 14:32:03 +0200 (CEST)
Date: Tue, 11 Sep 2001 14:32:03 +0200 (CEST)
Message-Id: <200109111232.f8BCW3w58724@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   11-Sep-2001 14:32:03
  Branch: HEAD                             Handle: 2001091113320200

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    update TODO list

  Summary:
    Revision    Changes     Path
    1.17        +36 -70     ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 TODO
  --- ossp-pkg/l2/TODO	2001/09/11 10:17:23	1.16
  +++ ossp-pkg/l2/TODO	2001/09/11 12:32:02	1.17
  @@ -2,15 +2,6 @@
   OSSP L2
   =======
   
  -Idea:
  -l2_handler_t:
  -   - function pointers
  -   - sizeof(handler struct)
  -   - table of config callsbacks
  -     which use offsetof into handler struct
  -Auf diese Weise ist l2_channel_setparams aus API
  -draussen und..
  -
   RSE:
   - channel API cleanup: open semantics
   - bind and udp parameters in socket channel
  @@ -22,38 +13,51 @@
   - l2tool [addr:]port
   - autoflush via shared memory and sub-process?
   
  -Timeplan
  ---------
  +ISSUES
  +------
   
  -o M1 
  -  - fixed C API
  -  - established build environment
  -o M2
  -  - implemented C API
  -  - fixed C++ API
  -o M3
  -  - implemented C++ API
  -  - documented C API
  -  - documented C++ API
  -  - release version 0.9.0
  -o M4
  -  - release version 1.0.0
  +o hook_write's should perhaps receive a nul-termined string
  +  instead of buf+size, because syslog else has to re-buffer it
  +  in order to append the nul terminator character.
   
  -ATTENTION
  ----------
  +o Stream Members: channels static array
  +  - consider dynamic
   
  -o hook_write's should perhaps receive a nul-termined string
  -  instead of buf+size, because syslog else has to re-buffer it.
  +o buffer
  +  user needs to know how a buffer object behaves in
  +  relation to up/downstream channels. When does it
  +  pass its data to the next channel, when does it
  +  erase, what happens to its data when it is over
  +  written or flushed...
  +
  +o syslog
  +  many options need docu, and we should mention to
  +  the user that more info is found in the man page
  +  for syslog(), because after all that is what is
  +  doing all the work in our implementation. Also,
  +  can we really properly document these features
  +  if they change from one system's syslog to the next?
   
  -QUESTIONS
  ----------
  +o errors
  +  when a channel fails during an operation, how
  +  does it report this? How should a user interpret
  +  the error message or other data? Do we need more
  +  accurate or detailed error messages in the channel
  +  code? When a channel fails, does it continue
  +  passing data on to downstream channels? Is it
  +  corrupt data?
   
  -o Should the following line copy the string or just use the reference?
  -    L2_PARAM_SET(pa[0], ident,   CHARPTR,  &cfg->pszIdent);
  +o Syslog Kanal
  +  - Trim down to what will be used, right now the
  +    channel supports ALL functionality through syslog(3)
   
   BRAINSTORMING
   -------------
   
  +Braindump:
  +- debugging is special case of logging
  +- tracing is special case of debugging
  +
   Channel Handler Configuration:
   o l2_handler_null
     - no configuration at all
  @@ -90,44 +94,6 @@
   o l2_ch_buffer
     - write() must implicitly flush() when incoming
       data is larger than remaining buffer capacity
  -
  -Stream Members:
  -o channels static array
  -  - consider dynamic
  -
  -Documentation:
  -o buffer
  -    user needs to know how a buffer object behaves in
  -    relation to up/downstream channels. When does it
  -    pass its data to the next channel, when does it
  -    erase, what happens to its data when it is over
  -    written or flushed...
  -
  -o syslog
  -    many options need docu, and we should mention to
  -    the user that more info is found in the man page
  -    for syslog(), because after all that is what is
  -    doing all the work in our implementation. Also,
  -    can we really properly document these features
  -    if they change from one system's syslog to the next?
  -
  -o errors
  -    when a channel fails during an operation, how
  -    does it report this? How should a user interpret
  -    the error message or other data? Do we need more
  -    accurate or detailed error messages in the channel
  -    code? When a channel fails, does it continue
  -    passing data on to downstream channels? Is it
  -    corrupt data?
  -
  -Braindump:
  -- debugging is special case of logging
  -- tracing is special case of debugging
  -
  -Kanalen:
  -o Syslog Kanal
  -  - Trim down to what will be used, right now the
  -    channel supports ALL functionality through syslog(3)
   
   License:
   - ISC/MIT/BSD

From ossp-cvs-owner@ossp.org  Tue Sep 11 14:55:17 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8BCtGH90475; Tue, 11 Sep 2001 14:55:16 +0200 (CEST)
Date: Tue, 11 Sep 2001 14:55:16 +0200 (CEST)
Message-Id: <200109111255.f8BCtGH90475@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   11-Sep-2001 14:55:16
  Branch: HEAD                             Handle: 2001091113551600

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    do not forget interesting channel ideas

  Summary:
    Revision    Changes     Path
    1.18        +3  -0      ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 TODO
  --- ossp-pkg/l2/TODO	2001/09/11 12:32:02	1.17
  +++ ossp-pkg/l2/TODO	2001/09/11 12:55:16	1.18
  @@ -12,6 +12,9 @@
     - levels logged with l2_util_l2s()
   - l2tool [addr:]port
   - autoflush via shared memory and sub-process?
  +- IRC channel
  +- NNTP channel
  +- SNMP trap channel
   
   ISSUES
   ------

From ossp-cvs-owner@ossp.org  Tue Sep 11 15:20:29 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8BDKRd90307; Tue, 11 Sep 2001 15:20:27 +0200 (CEST)
Date: Tue, 11 Sep 2001 15:20:27 +0200 (CEST)
Message-Id: <200109111320.f8BDKRd90307@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str str_parse.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   11-Sep-2001 15:20:27
  Branch: HEAD                             Handle: 2001091114202700

  Modified files:
    ossp-pkg/str            str_parse.c

  Log:
    fix one more memory leak

  Summary:
    Revision    Changes     Path
    1.17        +2  -0      ossp-pkg/str/str_parse.c
  ____________________________________________________________________________

  Index: ossp-pkg/str/str_parse.c
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 str_parse.c
  --- ossp-pkg/str/str_parse.c	2001/09/11 11:39:28	1.16
  +++ ossp-pkg/str/str_parse.c	2001/09/11 13:20:27	1.17
  @@ -567,6 +567,8 @@
   
           /* allocate output buffer */
           if ((*cpp = (char *)malloc(l+1)) == NULL) {
  +            if (cap_vec != NULL)
  +                free(cap_vec);
               if (p_pcre != NULL)
                   free(p_pcre);
               if (p_pcre_extra != NULL)

From ossp-cvs-owner@ossp.org  Tue Sep 11 15:38:09 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8BDc7q35112; Tue, 11 Sep 2001 15:38:07 +0200 (CEST)
Date: Tue, 11 Sep 2001 15:38:07 +0200 (CEST)
Message-Id: <200109111338.f8BDc7q35112@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   11-Sep-2001 15:38:07
  Branch: HEAD                             Handle: 2001091114380700

  Modified files:
    ossp-pkg/lmtp2nntp      nntp.c

  Log:
    we do no longer care about checking groups

  Summary:
    Revision    Changes     Path
    1.25        +0  -9      ossp-pkg/lmtp2nntp/nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/nntp.c
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 nntp.c
  --- ossp-pkg/lmtp2nntp/nntp.c	2001/09/10 14:11:33	1.24
  +++ ossp-pkg/lmtp2nntp/nntp.c	2001/09/11 13:38:07	1.25
  @@ -371,15 +371,6 @@
       }
   
       return NNTP_ERR_DELIVERY;
  -
  -#if 0
  -            /* check if this server accepts at least one of the newsgroups
  -            > GROUP
  -            < 211 yes, group exists
  -            < 411 no, group doesn't exist
  -            */
  -
  -#endif
   }
   
   nntp_rc_t nntp_feed(nntp_t *nntp, msg_t *msg)

From ossp-cvs-owner@ossp.org  Tue Sep 11 15:41:24 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8BDfND41295; Tue, 11 Sep 2001 15:41:23 +0200 (CEST)
Date: Tue, 11 Sep 2001 15:41:23 +0200 (CEST)
Message-Id: <200109111341.f8BDfND41295@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp .configure 00TODO lmtp2nntp.c lmtp2nntp...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   11-Sep-2001 15:41:23
  Branch: HEAD                             Handle: 2001091114412200

  Modified files:
    ossp-pkg/lmtp2nntp      .configure 00TODO lmtp2nntp.c lmtp2nntp.h msg.c
                            msg.h
    ossp-pkg/lmtp2nntp/test run.sh testmessage.vialmtp

  Log:
    msg.c is now l2 enabled; improved logging using foreign (aka sendmail queuing)
    id; now calculating and logging message size;

  Summary:
    Revision    Changes     Path
    1.9         +1  -1      ossp-pkg/lmtp2nntp/.configure
    1.34        +4  -6      ossp-pkg/lmtp2nntp/00TODO
    1.51        +18 -7      ossp-pkg/lmtp2nntp/lmtp2nntp.c
    1.5         +5  -5      ossp-pkg/lmtp2nntp/lmtp2nntp.h
    1.17        +35 -14     ossp-pkg/lmtp2nntp/msg.c
    1.6         +4  -0      ossp-pkg/lmtp2nntp/msg.h
    1.14        +59 -32     ossp-pkg/lmtp2nntp/test/run.sh
    1.6         +9  -0      ossp-pkg/lmtp2nntp/test/testmessage.vialmtp
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/.configure
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 .configure
  --- ossp-pkg/lmtp2nntp/.configure	2001/09/10 06:55:33	1.8
  +++ ossp-pkg/lmtp2nntp/.configure	2001/09/11 13:41:22	1.9
  @@ -3,8 +3,8 @@
       ./autogen.sh
   fi
   PATH=/cw/bin:$PATH
  -#  --with-dmalloc=/cw \
   ./configure \
  +   --with-dmalloc=/cw \
      --enable-debug \
      --prefix=/tmp/lmtp2nntp
   
  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.33 -r1.34 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	2001/09/11 06:43:13	1.33
  +++ ossp-pkg/lmtp2nntp/00TODO	2001/09/11 13:41:22	1.34
  @@ -1,17 +1,15 @@
   
  -- [B<-i> I<messageid>]
  -- CU/CUS
  -- str debugging
   - FIXME
   - signal handler to catch EINTR and segfaults
   - check gcc3 compatiblity
   - how to log nothing
  +- improve sendmail.m4 templates
  +- l2 date format should be same as syslog
   
  -  -l syslog:[mask]//[localhost[:port]][/facility]
  -  -l   smtp:[mask]//[localhost[:port]][/tag:value ...]
  +  -l syslog:[mask]//[localhost[:port]][/tag=value ...] with /tag=value i.e. facility=local0
  +  -l   smtp:[mask]//[localhost[:port]][/tag=value ...] with /tag=value i.e. to=foo@example.com
     -l   file:[mask]//path/file
     -L streamlog
  -
   
       **** DEVELOPMENT INFORMATION ****
   
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.50 -r1.51 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/11 06:41:59	1.50
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/11 13:41:22	1.51
  @@ -241,7 +241,11 @@
   {
       lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx->vp;
               
  -    sprintf(bufptr, "%s[%ld]", ctx->progname, (long)getpid());
  +    if ((ctx->msg != NULL) &&
  +        (ctx->msg->cpFid != NULL))
  +        sprintf(bufptr, "%s[%ld]: %s: ", ctx->progname, (long)getpid(), ctx->msg->cpFid);
  +    else
  +        sprintf(bufptr, "%s[%ld]: ", ctx->progname, (long)getpid());
       *buflen = strlen(bufptr);
       return L2_OK;
   }
  @@ -592,7 +596,7 @@
           exit(ERR_EXECUTION);
       }
   
  -    if (l2_stream_log(ctx->l2, L2_LEVEL_NOTICE, "%P: startup, version %s", lmtp2nntp_version.v_gnu) != L2_OK) {
  +    if (log1(ctx, NOTICE, "startup, version %s", lmtp2nntp_version.v_gnu) != L2_OK) {
           fprintf(stderr, "%s:Error: logging failed to log startup message to stream\n", ctx->progname);
           exit(ERR_EXECUTION);
       }
  @@ -637,7 +641,7 @@
       /* graceful shutdown */
       lmtp_gfs_quit(ctx);
       lmtp_gfs_lhlo(ctx);
  -    log0(ctx, NOTICE, "%P: graceful shutdown shortly before exit - no more logging");
  +    log0(ctx, NOTICE, "graceful shutdown shortly before exit - no more logging");
       l2_stream_destroy(ctx->l2);
       lmtp_destroy(lmtp);
       if (ctx->option_logfile != NULL)
  @@ -936,6 +940,8 @@
           free(ctx->cpBindh);
       if (ctx->cpBindp != NULL)
           free(ctx->cpBindp);
  +    if (ctx->saBind != NULL)
  +        sa_destroy(ctx->saBind);
   }
   
   static int helo_rfc0821domain(char *msg, char **domain)
  @@ -1099,6 +1105,7 @@
           res.statusmsg  = "Internal error - memory.";
           CU(LMTP_ERR_MEM);
       }
  +    ctx->msg->l2 = ctx->l2;
   
       /*  RFC1652 2. Framework for the 8bit MIME Transport Extension
        *  (4)  one optional parameter using the keyword BODY is added to the MAIL
  @@ -1492,8 +1499,9 @@
   
       if (ctx->option_deliverymode == DELIVERYMODE_FAKE) {
           str_format(errorstring, sizeof(errorstring),
  -                   "NNTP running in fake mode, delivery of %s %s but delivery status forced to",
  +                   "NNTP running in fake mode, delivery of %s [%d bytes] %s but delivery status forced to",
                      ctx->msg->cpMsgid,
  +                   strlen(ctx->msg->cpMsg),
                      ((bSuccess == NNTP_OK)    ? "succeeded" :
                       (bSuccess == NNTP_DEFER) ? "deferred"  : "failed"));
           switch (ctx->option_deliverymodefakestatus[0]) {
  @@ -1511,9 +1519,11 @@
                   break;
           }
       } else {
  -        str_format(errorstring, sizeof(errorstring), "%sdelivery of %s", 
  -            ((ctx->option_deliverymode == DELIVERYMODE_POST) ? "post " :
  -             (ctx->option_deliverymode == DELIVERYMODE_FEED) ? "feed " : ""), ctx->msg->cpMsgid);
  +        str_format(errorstring, sizeof(errorstring), "%sdelivery of %s [%d bytes]", 
  +                   ((ctx->option_deliverymode == DELIVERYMODE_POST) ? "post " :
  +                   (ctx->option_deliverymode == DELIVERYMODE_FEED) ? "feed " : ""),
  +                   ctx->msg->cpMsgid,
  +                   strlen(ctx->msg->cpMsg));
           if (bSuccess == NNTP_OK)
               log2(ctx, NOTICE,  "%s %s", errorstring, "succeeded");
           else if(bSuccess == NNTP_DEFER)
  @@ -1521,6 +1531,7 @@
           else
               log2(ctx, ERROR,   "%s %s", errorstring, "failed");
       }
  +
   
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   250 Requested mail action okay, completed
        *                                                  451 Requested action aborted: local error in processing
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.h
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 lmtp2nntp.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.h	2001/09/11 06:37:53	1.4
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.h	2001/09/11 13:41:22	1.5
  @@ -35,15 +35,15 @@
   #endif
   
   #define log0(ctx,level,msg) \
  -    l2_stream_log((ctx)->l2, L2_LEVEL_##level, "%P: " msg)
  +    l2_stream_log((ctx)->l2, L2_LEVEL_##level, "%P" msg)
   #define log1(ctx,level,msg,a1) \
  -    l2_stream_log((ctx)->l2, L2_LEVEL_##level, "%P: " msg, a1)
  +    l2_stream_log((ctx)->l2, L2_LEVEL_##level, "%P" msg, a1)
   #define log2(ctx,level,msg,a1,a2) \
  -    l2_stream_log((ctx)->l2, L2_LEVEL_##level, "%P: " msg, a1, a2)
  +    l2_stream_log((ctx)->l2, L2_LEVEL_##level, "%P" msg, a1, a2)
   #define log3(ctx,level,msg,a1,a2,a3) \
  -    l2_stream_log((ctx)->l2, L2_LEVEL_##level, "%P: " msg, a1, a2, a3)
  +    l2_stream_log((ctx)->l2, L2_LEVEL_##level, "%P" msg, a1, a2, a3)
   #define log4(ctx,level,msg,a1,a2,a3,a4) \
  -    l2_stream_log((ctx)->l2, L2_LEVEL_##level, "%P: " msg, a1, a2, a3, a4)
  +    l2_stream_log((ctx)->l2, L2_LEVEL_##level, "%P" msg, a1, a2, a3, a4)
   
   #define STMT(stuff) do { stuff } while (0)
   #define CU(returncode) STMT( rc = returncode; goto CUS; )
  Index: ossp-pkg/lmtp2nntp/msg.c
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 msg.c
  --- ossp-pkg/lmtp2nntp/msg.c	2001/09/04 09:46:06	1.16
  +++ ossp-pkg/lmtp2nntp/msg.c	2001/09/11 13:41:22	1.17
  @@ -31,6 +31,9 @@
   #include "str.h"
   #include "argz.h"
   
  +/* third party */
  +#include "l2.h"
  +
   #ifdef HAVE_CONFIG_H
   #include "config.h"
   #endif
  @@ -50,6 +53,7 @@
       msg->cpMsg = NULL;
       msg->azHeaders = NULL;
       msg->asHeaders = 0;
  +    msg->cpFid = NULL;
       msg->cpBody = NULL;
       msg->cpMsgid = NULL;
       msg->mail_from = NULL;
  @@ -57,6 +61,7 @@
       msg->asRcpt = 0;
       msg->azNewsgroups = NULL;
       msg->asNewsgroups = 0;
  +    msg->l2 = NULL; /* this is a copy only */
   
       return msg;
   }
  @@ -72,6 +77,8 @@
           free(msg->cpMsg);
       if (msg->azHeaders != NULL)
           free(msg->azHeaders);
  +    if (msg->cpFid != NULL)
  +        free(msg->cpFid);
       if (msg->cpBody != NULL)
           free(msg->cpBody);
       if (msg->cpMsgid != NULL)
  @@ -82,6 +89,7 @@
           free(msg->azRcpt);
       if (msg->azNewsgroups != NULL)
           free(msg->azNewsgroups);
  +    msg->l2 = NULL; /* this is a copy only, the "parent" needs to clean this up */
   
       free(msg);
       return;
  @@ -126,29 +134,30 @@
        * header information.
        */
   
  -    /* split message into header and body */
  +    log0(msg, DEBUG, "split message into header and body");
       if (str_parse(msg->cpMsg, "m/((?:.*?)\\n)\\n(.*)$/s", &cpHeaders, &msg->cpBody) <= 0)
           return MSG_ERR_SPLITHEADBODY;
   
       free(msg->cpMsg);
       msg->cpMsg = NULL;
   
  -    /* replace envelope From w/o colon by X-F: pseudotag. This eliminates the
  -     * special case of having one header, which is really an embedded
  -     * envelope, not ending with a colon while all others do. After splitting
  -     * headers into name and value pairs this envelope ist stripped off.
  +    log0(msg, DEBUG, "replace envelope From w/o colon by X-F: pseudotag");
  +    /* This eliminates the special case of having one header, which is really
  +     * an embedded envelope, not ending with a colon while all others do.
  +     * After splitting headers into name and value pairs this envelope ist
  +     * stripped off.
        */
       if (strncasecmp(cpHeaders, "From", 4) == 0)
           memcpy(cpHeaders, "X-F:", 4);
   
  -    /* unwrap header lines */
  +    log0(msg, DEBUG, "unwrap header lines");
       /* poor man's s///g simulator as current str library doesn't support global substitution */
       while (str_parse(cpHeaders, "s/(.*?)\\n[ \\t]+(.*)/$1 $2/s", &cpRem) > 0) {
           free(cpHeaders);
           cpHeaders = cpRem;
       }
   
  -    /* split header lines into names and values */
  +    log0(msg, DEBUG, "split header lines into names and values");
       while (str_parse(cpHeaders, "m/^([\\w-]+?:)[ \\t]*([^\\n]*?)[ \\t]*\\n(.*)/s", &cpName, &cpValue, &cpRem) > 0) {
           free(cpHeaders);
           cpHeaders = cpRem;
  @@ -156,12 +165,13 @@
           argz_add(&msg->azHeaders, &msg->asHeaders, cpValue);
       }
   
  -    /* check for headers we care about and do whatever neccessary */
  +    log0(msg, DEBUG, "check for headers we care about and do whatever neccessary");
       msg->cpMsgid = NULL;
       msg->azNewsgroups = NULL;
       msg->asNewsgroups = 0;
       cp = msg->azHeaders;
       while (cp != NULL) {
  +        log1(msg, DEBUG, "processing header \"%s\"", cp);
           if (strcasecmp("X-F:", cp) == 0) {
               argz_delete(&msg->azHeaders, &msg->asHeaders, cp);             /* del  name  */
               argz_delete(&msg->azHeaders, &msg->asHeaders, cp);             /* del  value */
  @@ -174,6 +184,9 @@
           }
           if (strcasecmp("Received:", cp) == 0) {
               argz_delete(&msg->azHeaders, &msg->asHeaders, cp);             /* del  name  */
  +            if ((msg->cpFid == NULL) &&
  +                (str_parse(cp, "m/\\sid\\s+<?([\\w\\d]{1,30})/i", &msg->cpFid) > 0))
  +                    log1(msg, DEBUG, "found foreign-ID \"%s\" for logging", msg->cpFid);
               argz_delete(&msg->azHeaders, &msg->asHeaders, cp);             /* del  value */
               continue;
           }
  @@ -210,17 +223,23 @@
           if ((cp = argz_next(msg->azHeaders, msg->asHeaders, cp)) == NULL)  /* next name  */
               break;
       }
  +
  +    log0(msg, DEBUG, "checking Message-ID");
       if (msg->cpMsgid == NULL)
           return MSG_ERR_SPLITIDNONE;
   
  +    log0(msg, DEBUG, "checking Newsgroups");
       if (msg->azNewsgroups != NULL) {
           argz_stringify(msg->azNewsgroups, msg->asNewsgroups, ',');
           if (argz_create_sep(msg->azNewsgroups, ',', &msg->azNewsgroups, &msg->asNewsgroups) != 0)
               return MSG_ERR_MEM;
       }
  +
  +    log0(msg, DEBUG, "adding mandatory Path: header");
       argz_add(&msg->azHeaders, &msg->asHeaders, "Path:");
       argz_add(&msg->azHeaders, &msg->asHeaders, "not-for-mail");
   
  +    log0(msg, DEBUG, "split complete");
       return MSG_OK;
   }
   
  @@ -238,7 +257,7 @@
       int          n;
       char        *cpHeaders;
   
  -    /* verify asNewsgroups */
  +    log0(msg, DEBUG, "verify Newsgroups");
       if (msg->azNewsgroups == NULL)
           return MSG_ERR_JOINGROUPNONE;
       argz_stringify(msg->azNewsgroups, msg->asNewsgroups, ',');
  @@ -247,7 +266,7 @@
       argz_add(&msg->azHeaders, &msg->asHeaders, "Newsgroups:");
       argz_add(&msg->azHeaders, &msg->asHeaders, msg->azNewsgroups);
   
  -    /* verify Message-ID */
  +    log0(msg, DEBUG, "verify Message-ID");
       if (msg->cpMsgid == NULL)
           return MSG_ERR_JOINIDNONE;
       if (strlen(msg->cpMsgid) == 0)
  @@ -255,7 +274,7 @@
       argz_add(&msg->azHeaders, &msg->asHeaders, "Message-ID:");
       argz_add(&msg->azHeaders, &msg->asHeaders, msg->cpMsgid);
   
  -    /* merge name/value pairs into single string */
  +    log0(msg, DEBUG, "merge name/value pairs into single string");
       argz_add(&msg->azHeaders, &msg->asHeaders, ""); /* append empty string */
       if ((aHeaders = (char **)malloc((argz_count(msg->azHeaders, msg->asHeaders) + 1) * sizeof(char *))) == NULL)
           return MSG_ERR_MEM;
  @@ -273,9 +292,8 @@
       }
       free(aHeaders);
   
  -    /* fold headers
  -     *
  -     * A logical line is split into one or more physical '\n'-terminated
  +    log0(msg, DEBUG, "fold headers");
  +    /* A logical line is split into one or more physical '\n'-terminated
        * lines. The physical line is never longer than WRAPAT characters. This
        * includes the folded data and the header name + colon + space for the
        * first line and WRAPUSING string prefix for all other lines. Leading and
  @@ -327,6 +345,7 @@
           }
       }
   
  +    log0(msg, DEBUG, "strigify headers");
       argz_stringify(msg->azHeaders, msg->asHeaders, '\n');
       cpHeaders = msg->azHeaders;
   
  @@ -334,6 +353,7 @@
        * header + CRLF + body + '.' + CRLF + NUL, replacing NL with CRLF *
        ********************************************************************/
   
  +    log0(msg, DEBUG, "assemble header and body");
       n = 0;
       /* count size of headers, reserve space for NL to CRLF conversion */
       for (i = 0; ((c = cpHeaders[i]) != NUL); i++) {
  @@ -401,6 +421,7 @@
       msg->cpMsg[n++] = '\n';
       msg->cpMsg[n]   = NUL;
   
  +    log0(msg, DEBUG, "join complete");
       return MSG_OK;
   }
   
  Index: ossp-pkg/lmtp2nntp/msg.h
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 msg.h
  --- ossp-pkg/lmtp2nntp/msg.h	2001/09/04 09:46:06	1.5
  +++ ossp-pkg/lmtp2nntp/msg.h	2001/09/11 13:41:22	1.6
  @@ -28,6 +28,8 @@
   #define __MSG_H__
   
   #include <sys/types.h>
  +#include "l2.h"
  +#include "lmtp2nntp.h"
   
   typedef struct {
       char   *azEnvgroups;  /* Groups according to Envelope in GROUPMODE_ENVELOPE */
  @@ -35,6 +37,7 @@
       char   *cpMsg;        /* the wholly message to be received by DATA command */
       char   *azHeaders;    /* header part of message above */
       size_t  asHeaders;
  +    char   *cpFid;        /* foreign (aka sendmail queue) id from parsing headers */
       char   *cpBody;       /* body part of message above */
       char   *cpMsgid;
       char   *mail_from;
  @@ -42,6 +45,7 @@
       size_t  asRcpt;
       char   *azNewsgroups;
       size_t  asNewsgroups;
  +    l2_stream_t *l2;
   } msg_t;
   
   #define WRAPAT 120          /* join wraps header lines when exceeding this value */
  Index: ossp-pkg/lmtp2nntp/test/run.sh
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 run.sh
  --- ossp-pkg/lmtp2nntp/test/run.sh	2001/09/10 06:55:33	1.13
  +++ ossp-pkg/lmtp2nntp/test/run.sh	2001/09/11 13:41:22	1.14
  @@ -6,24 +6,6 @@
   # -h news.ecrc.de
   # -h dev16
   
  -before ()
  -{
  -    #set -v -x
  -    h="H"
  -    z="Z"
  -    e="E"
  -    if [ -e /tmp/tracing ]; then
  -        rm -f /tmp/tracing
  -    fi
  -    touch /tmp/tracing
  -    chmod 666 /tmp/tracing
  -    if [ -e /tmp/testmessage ]; then
  -        rm -f /tmp/testmessage
  -    fi
  -    touch /tmp/testmessage
  -    chmod 666 /tmp/testmessage
  -}
  -
   post1000 ()
   {
       for h in 0 1 2 3 4 5 6 7 8 9
  @@ -45,8 +27,9 @@
   {
       newmsg lmtp
       cat /tmp/testmessage \
  -     | ../lmtp2nntp -l debug:/tmp/tracing -w 1 -d $1 -g $2 -b 127.0.0.1 -h 127.0.0.1 $3 >/dev/null; echo $?
  -     #| ../lmtp2nntp -l debug:/tmp/tracing -w 1 -d $1 -g $2 -b dev12 -h dev16,141.1.23.116:nntp -h dev16.de.cw.net:119 $3 >/dev/null; echo $?
  +      | ../lmtp2nntp -l $1:$FILE -w 1 -d $2 -g $2 -b dev12 -h dev16,141.1.23.116:nntp -h dev16.de.cw.net:119 $3 >/dev/null; echo $?
  +     #| ../lmtp2nntp -l $1:$FILE -w 1 -d 255/2.5.5 -g $3 -b 127.0.0.1 $4 >/dev/null; echo $?
  +     #| ../lmtp2nntp -l $1:$FILE -w 1 -d $2 -g $3 -b 127.0.0.1 -h 127.0.0.2 $4 >/dev/null; echo $?
   }
   
   sendmaildup()
  @@ -79,26 +62,70 @@
       fi
       echo -----------------------------------------------------------
   }
  +
  +before ()
  +{
  +    set -v -x
  +    h="H"
  +    z="Z"
  +    e="E"
  +
  +    if [ -e $FILE ]; then
  +        rm -f $FILE
  +    fi
  +    touch $FILE
  +    chmod 666 $FILE
  +
  +    if [ -e /tmp/testmessage ]; then
  +        rm -f /tmp/testmessage
  +    fi
  +    touch /tmp/testmessage
  +    chmod 666 /tmp/testmessage
  +
  +    if [ -e dmalloc.log ]; then
  +        rm -f dmalloc.log
  +    fi
  +    touch dmalloc.log
  +    chmod 666 dmalloc.log
  +}
  +
   after ()
   {
  -    if [ -r /tmp/tracing ]
  +    if [ -r $FILE ]
       then
  -        less -S /tmp/tracing
  -        #tail -f /tmp/tracing
  +        read DUMMY
  +        less -S $FILE
       fi
  +
  +    if [ -r dmalloc.log ]
  +    then
  +        read DUMMY
  +        less -S dmalloc.log
  +    fi
   }
   
  +#   lmtp notice post arg cw.de.sd.apps.dev.test
  +#   newmsg sendmail; ls -l /tmp/testmessage && cat /tmp/testmessage
  +#   lmtp feed arg
  +#   lmtp post envelope '*.test.* cw.*.dev.*'
  +#   lmtp post header '*.test.* cw.*.dev.* *foo*'
  +#   lmtp feed envelope
  +#   lmtp post envelope
  +#   sendmaildup
  +#   post1000
  +
  +  LOG="notice"
  + FILE="/tmp/tracing"
  +GROUP="cw.de.sd.apps.dev.test"
  +LOCAL="dev12"
  +HOST="dev16,141.1.23.116:nntp -h dev16.de.cw.net:119"
   before
  +
  +newmsg lmtp
  +../lmtp2nntp </tmp/testmessage -l $LOG:$FILE -w 1 -d post -g arg -b $LOCAL -h $HOST $GROUP >/dev/null; echo $?
   
  -#newmsg sendmail; ls -l /tmp/testmessage && cat /tmp/testmessage
  -#lmtp feed arg
  -lmtp post arg cw.de.sd.apps.dev.test
  -#ok lmtp post envelope '*.test.* cw.*.dev.*'
  -#ok lmtp post header '*.test.* cw.*.dev.* *foo*'
  -#lmtp feed envelope
  -#lmtp post envelope
  -#sendmaildup
  -#post1000
  +#newmsg sendmail
  +# sendmail -i </tmp/testmessage -V nase123baer posting+$GROUP@$LOCAL
   
   after
   exit 0
  Index: ossp-pkg/lmtp2nntp/test/testmessage.vialmtp
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 testmessage.vialmtp
  --- ossp-pkg/lmtp2nntp/test/testmessage.vialmtp	2001/09/07 13:53:17	1.5
  +++ ossp-pkg/lmtp2nntp/test/testmessage.vialmtp	2001/09/11 13:41:22	1.6
  @@ -7,6 +7,15 @@
   Date: Tue, 6 Sep 2001 14:51:48 +0200 (CEST)
   Message-Id: <200108141251.f7ECpmn74812@dev.de.cw.net>
   From: Thomas Lotterer <Thomas.Lotterer@de.cw.net>
  +Received: from augias.ecrc.de (augias.ecrc.de [141.1.1.32])
  +    by ns1.ecrc.de (8.9.2/8.9.2/$Revision: 1.6 $) with SMTP id NAA08840
  +    for <thomas.lotterer@ns1.ecrc.de>; Mon, 2 Apr 2001 13:20:25 +0200 (MET DST)
  +Received: from clhq029 (clhq029.computerlinks.de [195.143.102.41])
  +    by augias.ecrc.de (8.11.0/8.11.0/$Revision: 1.6 $) with ESMTP id f32BKPb12235
  +    for <thomas.lotterer@de.cw.net>; Mon, 2 Apr 2001 13:20:25 +0200
  +Received: from computerlinks.de (nwrulez.computerlinks.de [195.143.103.160])
  +	by clhq029 (8.8.8/8.8.8) with ESMTP id LAA12678;
  +	Mon, 2 Apr 2001 11:23:14 GMT
   Subject: lmtp2nntp testmessage.viasendmail
   
   ..

From ossp-cvs-owner@ossp.org  Wed Sep 12 08:50:27 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8C6oQ659676; Wed, 12 Sep 2001 08:50:26 +0200 (CEST)
Date: Wed, 12 Sep 2001 08:50:26 +0200 (CEST)
Message-Id: <200109120650.f8C6oQ659676@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp .dmallocrc
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   12-Sep-2001 08:50:26
  Branch: HEAD                             Handle: 2001091207502600

  Modified files:
    ossp-pkg/lmtp2nntp      .dmallocrc

  Log:
    dmalloc now dumps unfreed memory using log-nonfree-space option

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/lmtp2nntp/.dmallocrc
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/.dmallocrc
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 .dmallocrc
  --- ossp-pkg/lmtp2nntp/.dmallocrc	2001/08/28 11:31:22	1.2
  +++ ossp-pkg/lmtp2nntp/.dmallocrc	2001/09/12 06:50:26	1.3
  @@ -23,5 +23,5 @@
   debug3f log-stats, log-non-free, log-trans, \
           log-admin, check-fence, check-heap, check-lists, realloc-copy, \
           free-blank, error-abort, \
  -        allow-free-null
  +        allow-free-null, log-nonfree-space
   

From ossp-cvs-owner@ossp.org  Wed Sep 12 08:50:54 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8C6oqp59744; Wed, 12 Sep 2001 08:50:52 +0200 (CEST)
Date: Wed, 12 Sep 2001 08:50:52 +0200 (CEST)
Message-Id: <200109120650.f8C6oqp59744@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp Makefile.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   12-Sep-2001 08:50:52
  Branch: HEAD                             Handle: 2001091207505200

  Modified files:
    ossp-pkg/lmtp2nntp      Makefile.in

  Log:
    added make depend

  Summary:
    Revision    Changes     Path
    1.16        +13 -0      ossp-pkg/lmtp2nntp/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	2001/09/07 15:02:08	1.15
  +++ ossp-pkg/lmtp2nntp/Makefile.in	2001/09/12 06:50:52	1.16
  @@ -117,3 +117,16 @@
   check: lmtp2nntp
   	@cd test && ./run.sh
   
  +#   create dependencies
  +depend:
  +	cp Makefile.in Makefile.in.bak \
  +	&& sed -ne '1,/^# DO NOT REMOVE/p' Makefile.in > Makefile.new \
  +	&& $(CC) -MM $(CPPFLAGS) $(CFLAGS) *.c |\
  +	   sed -e 's/^\(l2_.*\)\.o:/\1.lo:/' >> Makefile.new \
  +	&& cp Makefile.new Makefile.in
  +	&& rm -f Makefile.new
  +
  +##
  +##  ____ DEPENDENCY AREA ____________________________________________
  +##  (AUTOMATICALLY UPDATED - DO NOT EDIT)
  +##

From ossp-cvs-owner@ossp.org  Wed Sep 12 08:52:28 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8C6qRx59886; Wed, 12 Sep 2001 08:52:27 +0200 (CEST)
Date: Wed, 12 Sep 2001 08:52:27 +0200 (CEST)
Message-Id: <200109120652.f8C6qRx59886@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/test run.sh
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   12-Sep-2001 08:52:27
  Branch: HEAD                             Handle: 2001091207522600

  Modified files:
    ossp-pkg/lmtp2nntp/test run.sh

  Log:
    relax hostname/ address dependencies for make check

  Summary:
    Revision    Changes     Path
    1.15        +4  -2      ossp-pkg/lmtp2nntp/test/run.sh
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/test/run.sh
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 run.sh
  --- ossp-pkg/lmtp2nntp/test/run.sh	2001/09/11 13:41:22	1.14
  +++ ossp-pkg/lmtp2nntp/test/run.sh	2001/09/12 06:52:26	1.15
  @@ -117,12 +117,14 @@
     LOG="notice"
    FILE="/tmp/tracing"
   GROUP="cw.de.sd.apps.dev.test"
  -LOCAL="dev12"
  +LOCAL="0.0.0.0"
   HOST="dev16,141.1.23.116:nntp -h dev16.de.cw.net:119"
  +HOST="0.0.0.0"
   before
   
   newmsg lmtp
  -../lmtp2nntp </tmp/testmessage -l $LOG:$FILE -w 1 -d post -g arg -b $LOCAL -h $HOST $GROUP >/dev/null; echo $?
  +#./lmtp2nntp </tmp/testmessage -l $LOG:$FILE -w 1 -d post -g arg -b $LOCAL -h $HOST $GROUP >/dev/null; echo $?
  +../lmtp2nntp </tmp/testmessage -l $LOG:$FILE -w 1 -d 250/2.0.0 -g arg -b $LOCAL -h $HOST $GROUP >/dev/null; echo $?
   
   #newmsg sendmail
   # sendmail -i </tmp/testmessage -V nase123baer posting+$GROUP@$LOCAL

From ossp-cvs-owner@ossp.org  Wed Sep 12 08:53:58 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8C6rv060023; Wed, 12 Sep 2001 08:53:57 +0200 (CEST)
Date: Wed, 12 Sep 2001 08:53:57 +0200 (CEST)
Message-Id: <200109120653.f8C6rv060023@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   12-Sep-2001 08:53:57
  Branch: HEAD                             Handle: 2001091207535600

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c

  Log:
    For the -m option any capturing brackets are rewritten to clustering syntax.

  Summary:
    Revision    Changes     Path
    1.52        +10 -1      ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.51 -r1.52 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/11 13:41:22	1.51
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/12 06:53:56	1.52
  @@ -164,7 +164,7 @@
   static void usage(char *command)
   {
       /*  use
  -     *  perl <lmtp2nntp.c -e 'while (<>) { if(m/\/\*POD (.*) .*\*\//) { $_=$1; s/.<(.*?)>/$1/g ; print "\"$_\"\n" };}'
  +     *  perl <lmtp2nntp.c -e 'while (<>) { if(m/\/\*POD (.*) .*\*\//) { $_=$1; s/.<(.*?)>/$1/g ; print "\"$_ \"\n" };}'
        *  to pull the USAGE string out of this source
        */
       fprintf(stderr, 
  @@ -464,6 +464,15 @@
                   break;
               case 'm': /*POD [B<-m> I<mailfrom>] */
                   ctx->option_mailfrom = strdup(optarg);
  +                /* protect ourselfs from the substitution of backreferences.
  +                 * Missing varargs would cause segfaults.  Rewrite capturing
  +                 * brackets to clustering syntax. Use poor man's s///g
  +                 * simulator as current str library doesn't support global
  +                 * substitution */
  +                while (str_parse(ctx->option_mailfrom, "s/(.*?)\\((?!\\?:)(.*)/$1(?:$2/", &cp) > 0) {
  +                    free(ctx->option_mailfrom);
  +                    ctx->option_mailfrom = cp;
  +                }
                   if (str_parse("<>", ctx->option_mailfrom) == -1) {
                       fprintf(stderr, "%s:Error: illegal regex \"%s\" to option -m.\n", ctx->progname, ctx->option_mailfrom);
                       exit(ERR_EXECUTION);

From ossp-cvs-owner@ossp.org  Wed Sep 12 09:29:24 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8C7TOm64239; Wed, 12 Sep 2001 09:29:24 +0200 (CEST)
Date: Wed, 12 Sep 2001 09:29:24 +0200 (CEST)
Message-Id: <200109120729.f8C7TOm64239@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c lmtp2nntp.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   12-Sep-2001 09:29:24
  Branch: HEAD                             Handle: 2001091208292300

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c lmtp2nntp.pod

  Log:
    updated documentation

  Summary:
    Revision    Changes     Path
    1.53        +13 -12     ossp-pkg/lmtp2nntp/lmtp2nntp.c
    1.20        +14 -10     ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.52 -r1.53 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/12 06:53:56	1.52
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/12 07:29:23	1.53
  @@ -169,17 +169,18 @@
        */
       fprintf(stderr, 
               "USAGE: %s "
  -            "[-b bindaddr[:port]"
  -            "[-d deliverymode]"
  -            "[-g groupmode]"
  -            "[-h host[:port][,host[:port], ...]]"
  -            "[-m mailfrom]"
  -            "[-n nodename]"
  -            "[-s size]"
  -            "[-l level[:logfile]]"
  -            "[-v]"
  -            "[-w waittime]"
  -            "newsgroup [newsgroup ...]"
  +            "lmtp2nntp "
  +            "[-b bindaddr[:port]] "
  +            "[-d deliverymode] "
  +            "[-g groupmode] "
  +            "[-h host[:port][,host[:port], ...]] "
  +            "[-m mailfrom] "
  +            "[-n nodename] "
  +            "[-s size] "
  +            "[-l level[:logfile]] "
  +            "[-v] "
  +            "[-w waittime] "
  +            "newsgroup [newsgroup ...] "
               "\n",
               command);
       return;
  @@ -345,7 +346,7 @@
       /* read in the arguments */
       while ((i = getopt(argc, argv, "b:d:g:h:l:m:n:s:vw:")) != -1) {
           switch (i) {
  -            case 'b': /*POD [B<-b> I<bindaddr>[I<:port>] */
  +            case 'b': /*POD [B<-b> I<bindaddr>[I<:port>]] */
                   /* parse host[:port] string into host and port */
                   ctx->cpBindh = strdup(optarg);
                   if ((ctx->cpBindp = strrchr(ctx->cpBindh, ':')) != NULL) {
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 lmtp2nntp.pod
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/09/10 14:11:33	1.19
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/09/12 07:29:23	1.20
  @@ -33,7 +33,7 @@
   =head1 SYNOPSIS
   
   B<lmtp2nntp>
  -[B<-b> I<bindaddr>[I<:port>]
  +[B<-b> I<bindaddr>[I<:port>]]
   [B<-d> I<deliverymode>]
   [B<-g> I<groupmode>]
   [B<-h> I<host>[I<:port>][,I<host>[I<:port>], ...]]
  @@ -45,9 +45,6 @@
   [B<-w> I<waittime>]
   I<newsgroup> [I<newsgroup> ...]
   
  -B<FIXME NOT YET IMPLEMENTED>
  -[B<-i> I<messageid>]
  -
   =head1 DESCRIPTION
   
   The B<lmtp2nntp> program is a LMTP service which is usually invoked by a MTA.
  @@ -128,6 +125,19 @@
   Size limitation on message in bytes. Default is 8388608 (8M). Values below 64
   are considered unacceptable small.
   
  +=item B<-l> I<level>[:I<logfile>]
  +
  +The level measures the degree and importance of output and can be any of
  +PANIC, CRITICAL, ERROR, WARNING, NOTICE, INFO, TRACE or DEBUG. The recommended
  +level for daily operations is NOTICE. The default name for logfile is
  +"logfile".  This program is using the logging library (l2) which is currently
  +under development. An early access snapshot with limited functionality has
  +been included.  Currently the common denominator of usage between lmtp2nntp
  +and l2 is to use logging into a file only. Note that this will change soon as
  +during integration of l2 into lmtp2nntp logging channels for local syslog and
  +a SMTP client were already finished and IRC and NNTP clients are under
  +development.
  +
   =item B<-v>
   
   Print version information.
  @@ -144,12 +154,6 @@
   Newsgroup to post the message to or filter, depending on groupmode.  Multiple
   groups can be specified.  Crosspostings succeed if delivery to I<any> group
   succeeds.
  -
  -B<FIXME NOT YET IMPLEMENTED>
  -
  -=item B<-i> I<messageid>
  -
  -Message id of MTA (for logging purposes only).
   
   =back
   

From ossp-cvs-owner@ossp.org  Wed Sep 12 10:08:48 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8C88lw68707; Wed, 12 Sep 2001 10:08:47 +0200 (CEST)
Date: Wed, 12 Sep 2001 10:08:47 +0200 (CEST)
Message-Id: <200109120808.f8C88lw68707@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   12-Sep-2001 10:08:47
  Branch: HEAD                             Handle: 2001091209084600

  Added files:
    ossp-pkg/l2             l2.h

  Log:
    added L2_LEVEL_NONE

  Summary:
    Revision    Changes     Path
    1.23        +220 -0     ossp-pkg/l2/l2.h
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2.h
  ============================================================
  $ cvs update -p -r1.23 l2.h
  /*
  **  L2 - OSSP Logging Library
  **  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP L2, a flexible logging library which
  **  can be found at http://www.ossp.org/pkg/l2/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  l2.h: C API
  */
  
  #ifndef __L2_H__
  #define __L2_H__
  
  /* version information (compile-time) */
  #define L2_VERSION_STR "0.1.0 (08-Sep-2001)"
  #define L2_VERSION_HEX 0x001200
  
  /* version information (run-time) */
  typedef struct {
      const int   v_hex;
      const char *v_short;
      const char *v_long;
      const char *v_tex;
      const char *v_gnu;
      const char *v_web;
      const char *v_sccs;
      const char *v_rcs;
  } l2_version_t;
  extern l2_version_t l2_version;
  
  /* include standard environment we are based on */
  #include <stdio.h>
  #include <stdlib.h>
  #include <stdarg.h>
  #include <string.h>
  
  /* counterbalance poor standard environments */ 
  #ifndef NULL
  #define NULL (void *)0
  #endif
  #ifndef FALSE
  #define FALSE (0)
  #endif
  #ifndef TRUE
  #define TRUE (!FALSE)
  #endif
  
  /* forward declarations for opaque data structures */
  union  l2_context_un;
  struct l2_param_st;
  struct l2_stream_st;
  struct l2_channel_st;
  struct l2_handler_st;
  
  /* corresponding data types for data structures */
  typedef union  l2_context_un l2_context_t;
  typedef struct l2_param_st   l2_param_t;
  typedef struct l2_handler_st l2_handler_t;
  typedef struct l2_stream_st  l2_stream_t;
  typedef struct l2_channel_st l2_channel_t;
  
  /* list of logging levels (high to low priority; low to high amount of logging) */
  typedef enum {
      L2_LEVEL_PANIC    = (1 << 0),
      L2_LEVEL_CRITICAL = (1 << 1),
      L2_LEVEL_ERROR    = (1 << 2),
      L2_LEVEL_WARNING  = (1 << 3),
      L2_LEVEL_NOTICE   = (1 << 4),
      L2_LEVEL_INFO     = (1 << 5),  
      L2_LEVEL_TRACE    = (1 << 6),
      L2_LEVEL_DEBUG    = (1 << 7)
  } l2_level_t;
  #define L2_LEVEL_CUSTOM(n) (1 << (8+(n))
  
  /* all levels from highest (PANIC) to and including a particular low level */
  #define L2_LEVEL_UPTO(level) \
      (((level)-1)|(level))
  
  /* list of return values */
  typedef enum {
      L2_OK,
      L2_ERR_ARG,    /* invalid argument */
      L2_ERR_USE,    /* invalid usage */
      L2_ERR_MEM,    /* no more memory available */
      L2_ERR_SYS,    /* system error (see errno) */
      L2_ERR_IO,     /* input/output error */
      L2_ERR_FMT,    /* message formating error */
      L2_ERR_INT     /* internal error */
  } l2_result_t;
  
  /* context union for storing data */
  union l2_context_un {
      char    c;
      short   s;
      int     i;
      long    l;
      float   f;
      double  d;
      char   *cp;
      void   *vp;
  };
  
  /* list of types for storing data */
  typedef enum {
      L2_TYPE_CHAR,
      L2_TYPE_SHORT,
      L2_TYPE_INT,
      L2_TYPE_LONG,
      L2_TYPE_FLOAT,
      L2_TYPE_DOUBLE,
      L2_TYPE_STRING,
      L2_TYPE_CHARPTR,
      L2_TYPE_VOIDPTR
  } l2_type_t;
  
  /* parameter specification */
  struct l2_param_st {
      char     *name;
      l2_type_t type;
      void     *store;
  };
  
  /* parameter constructors */
  #define L2_PARAM_SET(pa,n,t,s) \
      pa.name = #n, pa.type = L2_TYPE_##t, pa.store = s
  #define L2_PARAM_END(pa) \
      pa.name = NULL
  
  /* list of handler types */
  typedef enum {
      L2_CHANNEL_FILTER,
      L2_CHANNEL_OUTPUT
  } l2_chtype_t;
  
  /* channel handler specification structure */
  struct l2_handler_st {
      l2_chtype_t type;
      l2_result_t (*create)   (l2_context_t *ctx, l2_channel_t *ch);
      l2_result_t (*configure)(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap);
      l2_result_t (*open)     (l2_context_t *ctx, l2_channel_t *ch);
      l2_result_t (*write)    (l2_context_t *ctx, l2_channel_t *ch, const char *buf, size_t bufsize);
      l2_result_t (*flush)    (l2_context_t *ctx, l2_channel_t *ch);
      l2_result_t (*close)    (l2_context_t *ctx, l2_channel_t *ch);
      l2_result_t (*destroy)  (l2_context_t *ctx, l2_channel_t *ch);
  };
  
  /* type of formatter callback function */
  typedef l2_result_t (*l2_formatter_t)(
      l2_context_t *ctx,      /* application context */
      const char    id,       /* input  arg: format string id ('x' of '%x') */
      const char   *param,    /* input  arg: format string parameter ('foo' of '%{foo}x') */
      char         *bufptr,   /* input  arg: pointer to output buffer */
      size_t        bufsize,  /* input  arg: maximum size of output buffer */
      size_t       *buflen,   /* ouput  arg: written characters in output buffer */
      va_list      *ap        /* in/out arg: variable argument pointer */
  );
  
  /* list of shipped (output) channel handlers */
  extern l2_handler_t l2_handler_null;
  extern l2_handler_t l2_handler_fd;
  extern l2_handler_t l2_handler_file;
  extern l2_handler_t l2_handler_pipe;
  extern l2_handler_t l2_handler_socket;
  extern l2_handler_t l2_handler_syslog;
  extern l2_handler_t l2_handler_smtp;
  
  /* list of shipped (filter) channel handlers */
  extern l2_handler_t l2_handler_filter;
  extern l2_handler_t l2_handler_prefix;
  extern l2_handler_t l2_handler_buffer;
  
  /* channel operations */
  l2_channel_t *l2_channel_create     (l2_handler_t *h);
  l2_result_t   l2_channel_configure  (l2_channel_t *ch, const char *fmt, ...);
  l2_result_t   l2_channel_open       (l2_channel_t *ch);
  l2_result_t   l2_channel_write      (l2_channel_t *ch, const char *buf, size_t bufsize);
  l2_result_t   l2_channel_flush      (l2_channel_t *ch);
  l2_result_t   l2_channel_close      (l2_channel_t *ch);
  l2_result_t   l2_channel_destroy    (l2_channel_t *ch);
  l2_result_t   l2_channel_stack      (l2_channel_t *ch, l2_channel_t *chTop);
  l2_channel_t *l2_channel_downstream (l2_channel_t *ch);
  l2_chtype_t   l2_channel_type       (l2_channel_t *ch);
  
  /* stream operations */
  l2_stream_t  *l2_stream_create     (void);
  l2_result_t   l2_stream_channel    (l2_stream_t *st, l2_channel_t *ch, unsigned int levelmask);
  l2_result_t   l2_stream_formatter  (l2_stream_t *st, char id, l2_formatter_t cb, l2_context_t *ctx);
  l2_result_t   l2_stream_levels     (l2_stream_t *st, unsigned int levelmask);
  l2_result_t   l2_stream_log        (l2_stream_t *st, unsigned int level, const char *fmt, ...);
  l2_result_t   l2_stream_vlog       (l2_stream_t *st, unsigned int level, const char *fmt, va_list ap);
  l2_result_t   l2_stream_destroy    (l2_stream_t *st);
  
  /* utility operations */
  l2_result_t   l2_util_setparams    (l2_param_t p[], const char *fmt, va_list ap);
  l2_result_t   l2_util_l2s          (char *string,       size_t maxlen, int sep, unsigned int  levelmask);
  l2_result_t   l2_util_s2l          (const char *string, size_t maxlen, int sep, unsigned int *levelmask);
  l2_result_t   l2_util_fmt_string   (l2_context_t *, const char, const char *, char *, size_t, size_t *, va_list *);
  l2_result_t   l2_util_fmt_dump     (l2_context_t *, const char, const char *, char *, size_t, size_t *, va_list *);
  
  #endif /* __L2_H__ */
  

From ossp-cvs-owner@ossp.org  Wed Sep 12 10:13:14 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8C8DDL69333; Wed, 12 Sep 2001 10:13:13 +0200 (CEST)
Date: Wed, 12 Sep 2001 10:13:13 +0200 (CEST)
Message-Id: <200109120813.f8C8DDL69333@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   12-Sep-2001 10:13:13
  Branch: HEAD                             Handle: 2001091209131200

  Modified files:
    ossp-pkg/l2             l2.h

  Log:
    added L2_LEVEL_NONE - 2nd attempt

  Summary:
    Revision    Changes     Path
    1.24        +1  -0      ossp-pkg/l2/l2.h
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2.h
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 l2.h
  --- ossp-pkg/l2/l2.h	2001/09/12 08:08:46	1.23
  +++ ossp-pkg/l2/l2.h	2001/09/12 08:13:12	1.24
  @@ -80,6 +80,7 @@
   
   /* list of logging levels (high to low priority; low to high amount of logging) */
   typedef enum {
  +    L2_LEVEL_NONE     =  0,
       L2_LEVEL_PANIC    = (1 << 0),
       L2_LEVEL_CRITICAL = (1 << 1),
       L2_LEVEL_ERROR    = (1 << 2),

From ossp-cvs-owner@ossp.org  Wed Sep 12 10:16:37 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8C8GbT69852; Wed, 12 Sep 2001 10:16:37 +0200 (CEST)
Date: Wed, 12 Sep 2001 10:16:37 +0200 (CEST)
Message-Id: <200109120816.f8C8GbT69852@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp Makefile.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   12-Sep-2001 10:16:37
  Branch: HEAD                             Handle: 2001091209163600

  Modified files:
    ossp-pkg/lmtp2nntp      Makefile.in

  Log:
    make depend

  Summary:
    Revision    Changes     Path
    1.17        +13 -0      ossp-pkg/lmtp2nntp/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	2001/09/12 06:50:52	1.16
  +++ ossp-pkg/lmtp2nntp/Makefile.in	2001/09/12 08:16:36	1.17
  @@ -130,3 +130,16 @@
   ##  ____ DEPENDENCY AREA ____________________________________________
   ##  (AUTOMATICALLY UPDATED - DO NOT EDIT)
   ##
  +argz.o: argz.c argz.h config.h /cw/include/dmalloc.h
  +lmtp.o: lmtp.c lmtp.h config.h /cw/include/dmalloc.h
  +lmtp2nntp.o: lmtp2nntp.c str/str.h argz.h shpat_match.h l2/l2.h \
  + lmtp2nntp.h config.h /cw/include/dmalloc.h lmtp.h nntp.h msg.h sa.h \
  + version.c
  +msg.o: msg.c msg.h l2/l2.h lmtp2nntp.h config.h /cw/include/dmalloc.h \
  + str/str.h argz.h
  +nntp.o: nntp.c nntp.h msg.h l2/l2.h lmtp2nntp.h config.h \
  + /cw/include/dmalloc.h
  +sa.o: sa.c config.h /cw/include/dmalloc.h sa.h
  +shpat_match.o: shpat_match.c config.h /cw/include/dmalloc.h \
  + shpat_match.h
  +version.o: version.c version.c

From ossp-cvs-owner@ossp.org  Wed Sep 12 10:18:21 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8C8IJe70013; Wed, 12 Sep 2001 10:18:19 +0200 (CEST)
Date: Wed, 12 Sep 2001 10:18:19 +0200 (CEST)
Message-Id: <200109120818.f8C8IJe70013@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   12-Sep-2001 10:18:19
  Branch: HEAD                             Handle: 2001091209181900

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c

  Log:
    added ability to log nothing by creating/ configuring/ stacking zero channels

  Summary:
    Revision    Changes     Path
    1.54        +47 -46     ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.53 -r1.54 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/12 07:29:23	1.53
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/12 08:18:19	1.54
  @@ -298,7 +298,7 @@
       ctx->option_maxmessagesize = 8 * 1024 * 1024;
       ctx->option_waittime = -1;
       ctx->option_mailfrom = NULL;
  -    ctx->option_levelmask = L2_LEVEL_UPTO(L2_LEVEL_WARNING);
  +    ctx->option_levelmask = L2_LEVEL_NONE;
       ctx->l2 = NULL;
       ctx->cpBindh = NULL;
       ctx->cpBindp = NULL;
  @@ -537,6 +537,10 @@
           fprintf(stderr, "%s:Error: logging failed to create stream\n", ctx->progname);
           exit(ERR_EXECUTION);
       }
  +    if (l2_stream_levels(ctx->l2, L2_LEVEL_UPTO(L2_LEVEL_DEBUG)) != L2_OK) {
  +        fprintf(stderr, "%s:Error: logging failed to set global logging level\n", ctx->progname);
  +        exit(ERR_EXECUTION);
  +    }
   
       if (l2_stream_formatter(ctx->l2, 'P', formatter_prefix, (l2_context_t *)&ctx) != L2_OK) {
           fprintf(stderr, "%s:Error: logging failed to register formatter\n", ctx->progname);
  @@ -551,59 +555,56 @@
           exit(ERR_EXECUTION);
       }
       if (l2_stream_formatter(ctx->l2, 'm', formatter_errno, NULL) != L2_OK) {
  -        fprintf(stderr, "%s:Error: logging failed to register dump formatter\n", ctx->progname);
  -        exit(ERR_EXECUTION);
  -    }
  -
  -    if ((chPrefix  = l2_channel_create(&l2_handler_prefix)) == NULL) {
  -        fprintf(stderr, "%s:Error: logging failed to create prefix channel\n", ctx->progname);
  +        fprintf(stderr, "%s:Error: logging failed to register errno formatter\n", ctx->progname);
           exit(ERR_EXECUTION);
       }
  -    if (l2_channel_configure(chPrefix, "timefmt,timezone", "[%d-%m-%Y/%H:%M:%S] ", "local") != L2_OK) {
  -        fprintf(stderr, "%s:Error: logging failed to configure prefix channel\n", ctx->progname);
  -        exit(ERR_EXECUTION);
  -    }
   
  -    if ((chBuf  = l2_channel_create(&l2_handler_buffer)) == NULL) {
  -        fprintf(stderr, "%s:Error: logging failed to create buffer channel\n", ctx->progname);
  -        exit(ERR_EXECUTION);
  -    }
  -    if (l2_channel_configure(chBuf, "size", 4) != L2_OK) { //FIXME 4096
  -        fprintf(stderr, "%s:Error: logging failed to configure buffer channel\n", ctx->progname);
  -        exit(ERR_EXECUTION);
  -    }
  +    if((ctx->option_levelmask != L2_LEVEL_NONE) && (ctx->option_logfile != NULL)) {
  +        if ((chPrefix  = l2_channel_create(&l2_handler_prefix)) == NULL) {
  +            fprintf(stderr, "%s:Error: logging failed to create prefix channel\n", ctx->progname);
  +            exit(ERR_EXECUTION);
  +        }
  +        if (l2_channel_configure(chPrefix, "timefmt,timezone", "%b %d %H:%M:%S ", "local") != L2_OK) {
  +            fprintf(stderr, "%s:Error: logging failed to configure prefix channel\n", ctx->progname);
  +            exit(ERR_EXECUTION);
  +        }
   
  -    if ((chFile = l2_channel_create(&l2_handler_file)) == NULL) {
  -        fprintf(stderr, "%s:Error: logging failed to create file channel\n", ctx->progname);
  -        exit(ERR_EXECUTION);
  -    }
  -    if (l2_channel_configure(chFile, "path,append,perm", ctx->option_logfile, TRUE, 0644) != L2_OK) {
  -        fprintf(stderr, "%s:Error: logging failed to configure file channel\n", ctx->progname);
  -        exit(ERR_EXECUTION);
  -    }
  +        if ((chBuf  = l2_channel_create(&l2_handler_buffer)) == NULL) {
  +            fprintf(stderr, "%s:Error: logging failed to create buffer channel\n", ctx->progname);
  +            exit(ERR_EXECUTION);
  +        }
  +        if (l2_channel_configure(chBuf, "size", 65536) != L2_OK) { //FIXME
  +            fprintf(stderr, "%s:Error: logging failed to configure buffer channel\n", ctx->progname);
  +            exit(ERR_EXECUTION);
  +        }
   
  -    if (l2_channel_stack(chFile, chBuf) != L2_OK) {
  -        fprintf(stderr, "%s:Error: logging failed to stack buffer channel on top of file channel\n", ctx->progname);
  -        exit(ERR_EXECUTION);
  -    }
  -    if (l2_channel_stack(chBuf, chPrefix) != L2_OK) {
  -        fprintf(stderr, "%s:Error: logging failed to stack prefix channel on top of buffer channel\n", ctx->progname);
  -        exit(ERR_EXECUTION);
  -    }
  +        if ((chFile = l2_channel_create(&l2_handler_file)) == NULL) {
  +            fprintf(stderr, "%s:Error: logging failed to create file channel\n", ctx->progname);
  +            exit(ERR_EXECUTION);
  +        }
  +        if (l2_channel_configure(chFile, "path,append,perm", ctx->option_logfile, TRUE, 0644) != L2_OK) {
  +            fprintf(stderr, "%s:Error: logging failed to configure file channel\n", ctx->progname);
  +            exit(ERR_EXECUTION);
  +        }
   
  -    if (l2_channel_open(chPrefix) != L2_OK) {
  -        fprintf(stderr, "%s:Error: logging failed to open buffer channel\n", ctx->progname);
  -        exit(ERR_EXECUTION);
  -    }
  +        if (l2_channel_stack(chFile, chBuf) != L2_OK) {
  +            fprintf(stderr, "%s:Error: logging failed to stack buffer channel on top of file channel\n", ctx->progname);
  +            exit(ERR_EXECUTION);
  +        }
  +        if (l2_channel_stack(chBuf, chPrefix) != L2_OK) {
  +            fprintf(stderr, "%s:Error: logging failed to stack prefix channel on top of buffer channel\n", ctx->progname);
  +            exit(ERR_EXECUTION);
  +        }
   
  -    if (l2_stream_channel(ctx->l2, chPrefix, L2_LEVEL_UPTO(L2_LEVEL_DEBUG)) != L2_OK) {
  -        fprintf(stderr, "%s:Error: logging failed to attach channel into stream\n", ctx->progname);
  -        exit(ERR_EXECUTION);
  -    }
  +        if (l2_channel_open(chPrefix) != L2_OK) {
  +            fprintf(stderr, "%s:Error: logging failed to open buffer channel\n", ctx->progname);
  +            exit(ERR_EXECUTION);
  +        }
   
  -    if (l2_stream_levels(ctx->l2, ctx->option_levelmask) != L2_OK) {
  -        fprintf(stderr, "%s:Error: logging failed to set global logging level\n", ctx->progname);
  -        exit(ERR_EXECUTION);
  +        if (l2_stream_channel(ctx->l2, chPrefix, ctx->option_levelmask) != L2_OK) {
  +            fprintf(stderr, "%s:Error: logging failed to attach channel into stream\n", ctx->progname);
  +            exit(ERR_EXECUTION);
  +        }
       }
   
       if (log1(ctx, NOTICE, "startup, version %s", lmtp2nntp_version.v_gnu) != L2_OK) {

From ossp-cvs-owner@ossp.org  Wed Sep 12 10:18:59 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8C8IwJ70089; Wed, 12 Sep 2001 10:18:58 +0200 (CEST)
Date: Wed, 12 Sep 2001 10:18:58 +0200 (CEST)
Message-Id: <200109120818.f8C8IwJ70089@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   12-Sep-2001 10:18:58
  Branch: HEAD                             Handle: 2001091209185800

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO

  Log:
    added ability to log nothing by creating/ configuring/ stacking zero channels

  Summary:
    Revision    Changes     Path
    1.35        +4  -6      ossp-pkg/lmtp2nntp/00TODO
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.34 -r1.35 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	2001/09/11 13:41:22	1.34
  +++ ossp-pkg/lmtp2nntp/00TODO	2001/09/12 08:18:58	1.35
  @@ -1,17 +1,15 @@
   
   - FIXME
   - signal handler to catch EINTR and segfaults
  -- check gcc3 compatiblity
  -- how to log nothing
   - improve sendmail.m4 templates
  -- l2 date format should be same as syslog
   
  +    **** DEVELOPMENT INFORMATION ****
  +
  +  Proposal for future URL-style logging option syntax
  +  -L streamlog
     -l syslog:[mask]//[localhost[:port]][/tag=value ...] with /tag=value i.e. facility=local0
     -l   smtp:[mask]//[localhost[:port]][/tag=value ...] with /tag=value i.e. to=foo@example.com
     -l   file:[mask]//path/file
  -  -L streamlog
  -
  -    **** DEVELOPMENT INFORMATION ****
   
     Debugging:
     $ ./.configure [wegen --with-dmalloc!]

From ossp-cvs-owner@ossp.org  Wed Sep 12 11:35:58 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8C9Zvc78950; Wed, 12 Sep 2001 11:35:57 +0200 (CEST)
Date: Wed, 12 Sep 2001 11:35:57 +0200 (CEST)
Message-Id: <200109120935.f8C9Zvc78950@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_fd.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   12-Sep-2001 11:35:57
  Branch: HEAD                             Handle: 2001091210355700

  Modified files:
    ossp-pkg/l2             l2_ch_fd.c

  Log:
    Bug fixes and upgraded file descriptor handler to new L2_LEVEL pass-through
    design.

  Summary:
    Revision    Changes     Path
    1.10        +15 -15     ossp-pkg/l2/l2_ch_fd.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_fd.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 l2_ch_fd.c
  --- ossp-pkg/l2/l2_ch_fd.c	2001/09/08 11:07:51	1.9
  +++ ossp-pkg/l2/l2_ch_fd.c	2001/09/12 09:35:57	1.10
  @@ -33,15 +33,15 @@
   /* declare private channel configuration */
   typedef struct {
       int fd;
  -} l2_ch_file_t;
  +} l2_ch_fd_t;
   
   /* create channel */
   static l2_result_t hook_create(l2_context_t *ctx, l2_channel_t *ch)
   {
  -    l2_ch_file_t *cfg;
  +    l2_ch_fd_t *cfg;
   
       /* allocate private channel configuration */
  -    if ((cfg = (l2_ch_file_t *)malloc(sizeof(l2_ch_file_t))) == NULL)
  +    if ((cfg = (l2_ch_fd_t *)malloc(sizeof(l2_ch_fd_t))) == NULL)
           return L2_ERR_MEM;
   
       /* initialize configuration with reasonable defaults */
  @@ -56,12 +56,12 @@
   /* configure channel */
   static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
  -    l2_ch_file_t *cfg;
  +    l2_ch_fd_t *cfg;
       l2_param_t pa[1]; 
       l2_result_t rv;
   
       /* parameter checks */
  -    if ((cfg = (l2_ch_file_t *)ctx->vp) == NULL)
  +    if ((cfg = (l2_ch_fd_t *)ctx->vp) == NULL)
           return L2_ERR_ARG;
   
       /* feed and call generic parameter parsing engine */
  @@ -75,10 +75,10 @@
   /* open channel */
   static l2_result_t hook_open(l2_context_t *ctx, l2_channel_t *ch)
   {
  -    l2_ch_file_t *cfg;
  +    l2_ch_fd_t *cfg;
   
       /* parameter checks */
  -    if ((cfg = (l2_ch_file_t *)ctx->vp) == NULL)
  +    if ((cfg = (l2_ch_fd_t *)ctx->vp) == NULL)
           return L2_ERR_ARG;
       if ((cfg->fd == -1))
           return L2_ERR_ARG;
  @@ -87,18 +87,18 @@
   }
   
   /* write to channel */
  -static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch, 
  -                      const char *buf, size_t buf_size)
  +static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch,
  +                              l2_level_t level, const char *buf, size_t buf_size)
   {
  -    l2_ch_file_t *cfg;
  +    l2_ch_fd_t *cfg;
   
       /* parameter checks */
  -    if ((cfg = (l2_ch_file_t *)ctx->vp) == NULL)
  +    if ((cfg = (l2_ch_fd_t *)ctx->vp) == NULL)
           return L2_ERR_ARG;
       if (cfg->fd == -1)
           return L2_ERR_ARG;
   
  -    /* write message to channel file */
  +    /* write message to channel fd */
       if (write(cfg->fd, buf, buf_size) == -1)
           return L2_ERR_SYS;
   
  @@ -116,15 +116,15 @@
   /* close channel */
   static l2_result_t hook_close(l2_context_t *ctx, l2_channel_t *ch)
   {
  -    l2_ch_file_t *cfg;
  +    l2_ch_fd_t *cfg;
   
       /* parameter checks */
  -    if ((cfg = (l2_ch_file_t *)ctx->vp) == NULL)
  +    if ((cfg = (l2_ch_fd_t *)ctx->vp) == NULL)
           return L2_ERR_ARG;
       if (cfg->fd == -1)
           return L2_ERR_ARG;
   
  -    /* close channel file */
  +    /* close channel fd   */
       /* nothing to close   */
   
       return L2_OK;

From ossp-cvs-owner@ossp.org  Wed Sep 12 11:39:18 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8C9dGd79496; Wed, 12 Sep 2001 11:39:16 +0200 (CEST)
Date: Wed, 12 Sep 2001 11:39:16 +0200 (CEST)
Message-Id: <200109120939.f8C9dGd79496@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_buffer.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   12-Sep-2001 11:39:16
  Branch: HEAD                             Handle: 2001091210391600

  Modified files:
    ossp-pkg/l2             l2_ch_buffer.c

  Log:
    Corrected bufsize variable inconsistency and upgraded file descriptor handler
    to new L2_LEVEL parameter design.

  Summary:
    Revision    Changes     Path
    1.19        +16 -16     ossp-pkg/l2/l2_ch_buffer.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_buffer.c
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 l2_ch_buffer.c
  --- ossp-pkg/l2/l2_ch_buffer.c	2001/09/11 11:59:59	1.18
  +++ ossp-pkg/l2/l2_ch_buffer.c	2001/09/12 09:39:16	1.19
  @@ -97,28 +97,28 @@
   }
   
   /* write to channel */
  -static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch, 
  -                      const char *buf, size_t bufsize)
  +static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch,
  +                              l2_level_t level, const char *buf, size_t buf_size)
   {
       l2_ch_buffer_t *cfg = (l2_ch_buffer_t *)ctx->vp;
       l2_channel_t *downstream = l2_channel_downstream(ch);
       l2_result_t rv;
   
  -    if (bufsize > (cfg->bufsize - cfg->bufpos)) {
  +    if (buf_size > (cfg->bufsize - cfg->bufpos)) {
           /* flush buffer if necessary */
           if (cfg->bufpos > 0) {
  -            if ((rv = l2_channel_write(downstream, cfg->buf, cfg->bufpos)) != L2_OK)
  +            if ((rv = l2_channel_write(downstream, level, cfg->buf, cfg->bufpos)) != L2_OK)
                   return rv;
               cfg->bufpos = 0;
           }
           /* pass through immediately to downstream if still too large */
  -        if (bufsize > cfg->bufsize)
  -            return l2_channel_write(downstream, buf, bufsize);
  +        if (buf_size > cfg->bufsize)
  +            return l2_channel_write(downstream, level, buf, buf_size);
       }
   
       /* write message to channel buffer */
  -    memcpy(cfg->buf+cfg->bufpos, buf, bufsize);
  -    cfg->bufpos += bufsize;
  +    memcpy(cfg->buf+cfg->bufpos, buf, buf_size);
  +    cfg->bufpos += buf_size;
   
       return L2_OK;
   }
  @@ -131,10 +131,10 @@
       l2_result_t rv;
   
       /* write the buffer contents downstream */
  -    if (cfg->bufpos > 0) {
  -        if ((rv = l2_channel_write(downstream, cfg->buf, cfg->bufpos)) != L2_OK)
  -            return rv;
  -        cfg->bufpos = 0;
  +    if (cfg->bufpos > 0) {                    /* !---------! */
  +        if ((rv = l2_channel_write(downstream, L2_LEVEL_PANIC, cfg->buf, cfg->bufpos)) != L2_OK)
  +            return rv;                        /* !! FIXME !! */
  +        cfg->bufpos = 0;                      /* !---------! */
       }
   
       /* optionally flush downstream channel, too */
  @@ -152,10 +152,10 @@
       l2_result_t rv;
   
       /* write pending data before closing down */
  -    if (cfg->bufpos > 0) {
  -        if ((rv = l2_channel_write(downstream, cfg->buf, cfg->bufpos)) != L2_OK)
  -            return rv;
  -        cfg->bufpos = 0;
  +    if (cfg->bufpos > 0) {                    /* !---------! */
  +        if ((rv = l2_channel_write(downstream, L2_LEVEL_PANIC, cfg->buf, cfg->bufpos)) != L2_OK)
  +            return rv;                        /* !! FIXME !! */
  +        cfg->bufpos = 0;                      /* !---------! */
       }
   
       /* optionally close downstream channel, too */

From ossp-cvs-owner@ossp.org  Wed Sep 12 11:42:37 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8C9gZm79825; Wed, 12 Sep 2001 11:42:35 +0200 (CEST)
Date: Wed, 12 Sep 2001 11:42:35 +0200 (CEST)
Message-Id: <200109120942.f8C9gZm79825@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.h.in l2_ch_file.c l2_ch_filter.c l2_ch_null...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   12-Sep-2001 11:42:35
  Branch: HEAD                             Handle: 2001091210423400

  Modified files:
    ossp-pkg/l2             l2.h.in l2_ch_file.c l2_ch_filter.c l2_ch_null.c
                            l2_ch_pipe.c l2_ch_prefix.c l2_ch_smtp.c
                            l2_ch_socket.c l2_ch_syslog.c l2_channel.c
                            l2_stream.c

  Log:
    Upgraded both stream and channel-level APIs to include new L2_LEVEL parameter design.

  Summary:
    Revision    Changes     Path
    1.4         +4  -4      ossp-pkg/l2/l2.h.in
    1.17        +2  -2      ossp-pkg/l2/l2_ch_file.c
    1.8         +2  -2      ossp-pkg/l2/l2_ch_filter.c
    1.8         +1  -1      ossp-pkg/l2/l2_ch_null.c
    1.8         +1  -2      ossp-pkg/l2/l2_ch_pipe.c
    1.12        +4  -4      ossp-pkg/l2/l2_ch_prefix.c
    1.2         +2  -2      ossp-pkg/l2/l2_ch_smtp.c
    1.25        +2  -2      ossp-pkg/l2/l2_ch_socket.c
    1.20        +2  -2      ossp-pkg/l2/l2_ch_syslog.c
    1.17        +2  -2      ossp-pkg/l2/l2_channel.c
    1.15        +3  -3      ossp-pkg/l2/l2_stream.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2.h.in
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 l2.h.in
  --- ossp-pkg/l2/l2.h.in	2001/09/10 10:15:11	1.3
  +++ ossp-pkg/l2/l2.h.in	2001/09/12 09:42:34	1.4
  @@ -157,7 +157,7 @@
       l2_result_t (*create)   (l2_context_t *ctx, l2_channel_t *ch);
       l2_result_t (*configure)(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap);
       l2_result_t (*open)     (l2_context_t *ctx, l2_channel_t *ch);
  -    l2_result_t (*write)    (l2_context_t *ctx, l2_channel_t *ch, const char *buf, size_t bufsize);
  +    l2_result_t (*write)    (l2_context_t *ctx, l2_channel_t *ch, l2_level_t level, const char *buf, size_t bufsize);
       l2_result_t (*flush)    (l2_context_t *ctx, l2_channel_t *ch);
       l2_result_t (*close)    (l2_context_t *ctx, l2_channel_t *ch);
       l2_result_t (*destroy)  (l2_context_t *ctx, l2_channel_t *ch);
  @@ -192,7 +192,7 @@
   l2_channel_t *l2_channel_create     (l2_handler_t *h);
   l2_result_t   l2_channel_configure  (l2_channel_t *ch, const char *fmt, ...);
   l2_result_t   l2_channel_open       (l2_channel_t *ch);
  -l2_result_t   l2_channel_write      (l2_channel_t *ch, const char *buf, size_t bufsize);
  +l2_result_t   l2_channel_write      (l2_channel_t *ch, l2_level_t level, const char *buf, size_t bufsize);
   l2_result_t   l2_channel_flush      (l2_channel_t *ch);
   l2_result_t   l2_channel_close      (l2_channel_t *ch);
   l2_result_t   l2_channel_destroy    (l2_channel_t *ch);
  @@ -205,8 +205,8 @@
   l2_result_t   l2_stream_channel    (l2_stream_t *st, l2_channel_t *ch, unsigned int levelmask);
   l2_result_t   l2_stream_formatter  (l2_stream_t *st, char id, l2_formatter_t cb, l2_context_t *ctx);
   l2_result_t   l2_stream_levels     (l2_stream_t *st, unsigned int levelmask);
  -l2_result_t   l2_stream_log        (l2_stream_t *st, unsigned int level, const char *fmt, ...);
  -l2_result_t   l2_stream_vlog       (l2_stream_t *st, unsigned int level, const char *fmt, va_list ap);
  +l2_result_t   l2_stream_log        (l2_stream_t *st, l2_level_t level, const char *fmt, ...);
  +l2_result_t   l2_stream_vlog       (l2_stream_t *st, l2_level_t level, const char *fmt, va_list ap);
   l2_result_t   l2_stream_destroy    (l2_stream_t *st);
   
   /* utility operations */
  Index: ossp-pkg/l2/l2_ch_file.c
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 l2_ch_file.c
  --- ossp-pkg/l2/l2_ch_file.c	2001/09/06 16:10:05	1.16
  +++ ossp-pkg/l2/l2_ch_file.c	2001/09/12 09:42:34	1.17
  @@ -100,8 +100,8 @@
   }
   
   /* write to channel */
  -static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch, 
  -                      const char *buf, size_t buf_size)
  +static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch,
  +                              l2_level_t level, const char *buf, size_t buf_size)
   {
       l2_ch_file_t *cfg = (l2_ch_file_t *)ctx->vp;
       
  Index: ossp-pkg/l2/l2_ch_filter.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 l2_ch_filter.c
  --- ossp-pkg/l2/l2_ch_filter.c	2001/09/05 07:47:12	1.7
  +++ ossp-pkg/l2/l2_ch_filter.c	2001/09/12 09:42:34	1.8
  @@ -44,8 +44,8 @@
       return L2_OK;
   }
   
  -static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch, 
  -                      const char *buf, size_t buf_size)
  +static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch,
  +                              l2_level_t level, const char *buf, size_t buf_size)
   {
       return L2_OK;
   }
  Index: ossp-pkg/l2/l2_ch_null.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 l2_ch_null.c
  --- ossp-pkg/l2/l2_ch_null.c	2001/09/05 07:47:12	1.7
  +++ ossp-pkg/l2/l2_ch_null.c	2001/09/12 09:42:34	1.8
  @@ -44,7 +44,7 @@
       return L2_OK;
   }
   
  -static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch, const char *buf, size_t buf_size)
  +static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch, l2_level_t level, const char *buf, size_t buf_size)
   {
       return L2_OK;
   }
  Index: ossp-pkg/l2/l2_ch_pipe.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 l2_ch_pipe.c
  --- ossp-pkg/l2/l2_ch_pipe.c	2001/09/05 07:47:12	1.7
  +++ ossp-pkg/l2/l2_ch_pipe.c	2001/09/12 09:42:34	1.8
  @@ -44,8 +44,7 @@
       return L2_OK;
   }
   
  -static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch, 
  -                      const char *buf, size_t buf_size)
  +static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch, l2_level_t level, const char *buf, size_t buf_size)
   {
       return L2_OK;
   }
  Index: ossp-pkg/l2/l2_ch_prefix.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 l2_ch_prefix.c
  --- ossp-pkg/l2/l2_ch_prefix.c	2001/09/11 11:59:59	1.11
  +++ ossp-pkg/l2/l2_ch_prefix.c	2001/09/12 09:42:34	1.12
  @@ -83,8 +83,8 @@
   }
   
   /* write to channel */
  -static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch, 
  -                              const char *buf, size_t buf_size)
  +static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch,
  +                              l2_level_t level, const char *buf, size_t buf_size)
   {
       l2_ch_prefix_t *cfg = (l2_ch_prefix_t *)ctx->vp;
       l2_channel_t *downstream = l2_channel_downstream(ch);
  @@ -104,12 +104,12 @@
               return L2_ERR_ARG;
           if ((n = strftime(cfg->timebuf, sizeof(cfg->timebuf), cfg->timefmt, tm)) == 0)
               return L2_ERR_SYS;
  -        if ((rv = l2_channel_write(downstream, cfg->timebuf, n)) != L2_OK)
  +        if ((rv = l2_channel_write(downstream, level, cfg->timebuf, n)) != L2_OK)
               return rv;
       }
   
       /* write to downstream channel */
  -    if ((rv = l2_channel_write(downstream, buf, buf_size)) != L2_OK)
  +    if ((rv = l2_channel_write(downstream, level, buf, buf_size)) != L2_OK)
           return rv;
   
       return L2_OK;
  Index: ossp-pkg/l2/l2_ch_smtp.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 l2_ch_smtp.c
  --- ossp-pkg/l2/l2_ch_smtp.c	2001/09/09 15:57:10	1.1
  +++ ossp-pkg/l2/l2_ch_smtp.c	2001/09/12 09:42:34	1.2
  @@ -135,8 +135,8 @@
   }
   
   /* write to channel */
  -static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch, 
  -                              const char *buf, size_t buf_size)
  +static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch,
  +                              l2_level_t level, const char *buf, size_t buf_size)
   {
       l2_ch_smtp_t *cfg = (l2_ch_smtp_t *)ctx->vp;
       char caLine[1024];
  Index: ossp-pkg/l2/l2_ch_socket.c
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 l2_ch_socket.c
  --- ossp-pkg/l2/l2_ch_socket.c	2001/09/11 10:37:04	1.24
  +++ ossp-pkg/l2/l2_ch_socket.c	2001/09/12 09:42:34	1.25
  @@ -273,8 +273,8 @@
   }
   
   /* write to channel */
  -static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch, 
  -                      const char *buf, size_t buf_size)
  +static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch,
  +                              l2_level_t level, const char *buf, size_t buf_size)
   {
       struct sockaddr_in IP4Sockaddr, IP6Sockaddr;
       l2_ch_socket_t    *cfg = (l2_ch_socket_t *)ctx->vp;
  Index: ossp-pkg/l2/l2_ch_syslog.c
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 l2_ch_syslog.c
  --- ossp-pkg/l2/l2_ch_syslog.c	2001/09/10 14:33:24	1.19
  +++ ossp-pkg/l2/l2_ch_syslog.c	2001/09/12 09:42:34	1.20
  @@ -94,8 +94,8 @@
   }
   
   /* write to channel */
  -static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch, 
  -                      const char *buf, size_t buf_size)
  +static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch,
  +                              l2_level_t level, const char *buf, size_t buf_size)
   {
       l2_ch_syslog_t *cfg = (l2_ch_syslog_t *)ctx->vp;
   
  Index: ossp-pkg/l2/l2_channel.c
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 l2_channel.c
  --- ossp-pkg/l2/l2_channel.c	2001/09/06 14:37:53	1.16
  +++ ossp-pkg/l2/l2_channel.c	2001/09/12 09:42:34	1.17
  @@ -117,7 +117,7 @@
   }
   
   /* write to channel (stack) */
  -l2_result_t l2_channel_write(l2_channel_t *ch, const char *buf, size_t bufsize)
  +l2_result_t l2_channel_write(l2_channel_t *ch, l2_level_t level, const char *buf, size_t bufsize)
   {
       l2_result_t rv;
   
  @@ -140,7 +140,7 @@
           return L2_ERR_USE;
   
       /* pass operation to handler */
  -    rv = ch->handler.write(&ch->context, ch, buf, bufsize);
  +    rv = ch->handler.write(&ch->context, ch, level, buf, bufsize);
   
       return rv;
   }
  Index: ossp-pkg/l2/l2_stream.c
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 l2_stream.c
  --- ossp-pkg/l2/l2_stream.c	2001/09/06 14:37:53	1.14
  +++ ossp-pkg/l2/l2_stream.c	2001/09/12 09:42:34	1.15
  @@ -120,7 +120,7 @@
   }
   
   /* log a message to stream */
  -l2_result_t l2_stream_log(l2_stream_t *st, unsigned int level, const char *fmt, ...)
  +l2_result_t l2_stream_log(l2_stream_t *st, l2_level_t level, const char *fmt, ...)
   {
       va_list ap;
       l2_result_t rv;
  @@ -176,7 +176,7 @@
   }
   
   /* log a message to stream (va_list-variant) */
  -l2_result_t l2_stream_vlog(l2_stream_t *st, unsigned int level, const char *fmt, va_list ap)
  +l2_result_t l2_stream_vlog(l2_stream_t *st, l2_level_t level, const char *fmt, va_list ap)
   {
       int i;
       int l, j;
  @@ -223,7 +223,7 @@
       rv = L2_OK;
       for (i = 0; i < L2_MAX_CHANNELS && st->channels[i].ch != NULL; i++) {
           if (st->channels[i].levelmask & level) {
  -            if ((rv = l2_channel_write(st->channels[i].ch, st->message, len)) != L2_OK)
  +            if ((rv = l2_channel_write(st->channels[i].ch, level, st->message, len)) != L2_OK)
                   break;
           }
       }

From ossp-cvs-owner@ossp.org  Wed Sep 12 11:58:24 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8C9wN181478; Wed, 12 Sep 2001 11:58:23 +0200 (CEST)
Date: Wed, 12 Sep 2001 11:58:23 +0200 (CEST)
Message-Id: <200109120958.f8C9wN181478@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO lmtp2nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   12-Sep-2001 11:58:23
  Branch: HEAD                             Handle: 2001091210582200

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO lmtp2nntp.c

  Log:
    now handling signals

  Summary:
    Revision    Changes     Path
    1.36        +0  -2      ossp-pkg/lmtp2nntp/00TODO
    1.55        +40 -1      ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.35 -r1.36 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	2001/09/12 08:18:58	1.35
  +++ ossp-pkg/lmtp2nntp/00TODO	2001/09/12 09:58:22	1.36
  @@ -1,6 +1,4 @@
   
  -- FIXME
  -- signal handler to catch EINTR and segfaults
   - improve sendmail.m4 templates
   
       **** DEVELOPMENT INFORMATION ****
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.54 -r1.55 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/12 08:18:19	1.54
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/12 09:58:22	1.55
  @@ -32,6 +32,7 @@
   #include <fcntl.h>
   #include <sys/utsname.h>
   #include <sys/time.h>
  +#include <signal.h>
   
   /* third party */
   #include "str.h"
  @@ -104,6 +105,7 @@
       char   *lhlo_domain;
   };
   
  +static void catchsignal(int sig, ...);
   static int connect_nonb(int, const struct sockaddr *, socklen_t, int);
   static void initsession(struct session *session);
   static void resetsession(struct session *session);
  @@ -260,6 +262,30 @@
       return L2_OK;
   }
   
  +static void catchsignal(int sig, ...)
  +{
  +    va_list ap;
  +    static lmtp2nntp_t *ctx = NULL;
  +
  +    va_start(ap, sig);
  +    if(sig == 0) {
  +        if ((ctx = va_arg(ap, lmtp2nntp_t *)) == NULL)
  +            exit(ERR_EXECUTION);
  +        log0(ctx, TRACE, "catching and logging signals now");
  +        va_end(ap);
  +        return;
  +    }
  +    if (ctx != NULL) {
  +        if ((sig == SIGHUP) || (sig == SIGINT) || (sig == SIGQUIT))
  +            log1(ctx, NOTICE, "caught signal %d - exit - no more logging", sig);
  +        else
  +            log1(ctx, PANIC, "CAUGHT SIGNAL %d - EXIT - NO MORE LOGGING", sig);
  +        l2_stream_destroy(ctx->l2);
  +    }
  +    va_end(ap);
  +    exit(ERR_EXECUTION);
  +}
  +
   int main(int argc, char **argv)
   {
       lmtp_t       *lmtp;
  @@ -573,7 +599,7 @@
               fprintf(stderr, "%s:Error: logging failed to create buffer channel\n", ctx->progname);
               exit(ERR_EXECUTION);
           }
  -        if (l2_channel_configure(chBuf, "size", 65536) != L2_OK) { //FIXME
  +        if (l2_channel_configure(chBuf, "size", 65536) != L2_OK) {
               fprintf(stderr, "%s:Error: logging failed to configure buffer channel\n", ctx->progname);
               exit(ERR_EXECUTION);
           }
  @@ -611,6 +637,19 @@
           fprintf(stderr, "%s:Error: logging failed to log startup message to stream\n", ctx->progname);
           exit(ERR_EXECUTION);
       }
  +
  +    catchsignal(0, ctx);
  +    signal(SIGHUP,  (void(*)())catchsignal);
  +    signal(SIGINT,  (void(*)())catchsignal);
  +    signal(SIGQUIT, (void(*)())catchsignal);
  +    signal(SIGILL,  (void(*)())catchsignal);
  +    signal(SIGBUS,  (void(*)())catchsignal);
  +    signal(SIGSEGV, (void(*)())catchsignal);
  +    signal(SIGSYS,  (void(*)())catchsignal);
  +    signal(SIGTERM, (void(*)())catchsignal);
  +    signal(SIGINFO,            SIG_IGN    );
  +    signal(SIGUSR1,            SIG_IGN    );
  +    signal(SIGUSR2,            SIG_IGN    );
   
       /* initialize LMTP context */
       lmtp_io.ctx    = ctx;

From ossp-cvs-owner@ossp.org  Wed Sep 12 12:24:30 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8CAOUj84792; Wed, 12 Sep 2001 12:24:30 +0200 (CEST)
Date: Wed, 12 Sep 2001 12:24:30 +0200 (CEST)
Message-Id: <200109121024.f8CAOUj84792@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.h.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   12-Sep-2001 12:24:30
  Branch: HEAD                             Handle: 2001091211242900

  Modified files:
    ossp-pkg/l2             l2.h.in

  Log:
    Merged new L2_LEVEL_NONE enum value from l2.h source file.

  Summary:
    Revision    Changes     Path
    1.5         +1  -0      ossp-pkg/l2/l2.h.in
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2.h.in
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 l2.h.in
  --- ossp-pkg/l2/l2.h.in	2001/09/12 09:42:34	1.4
  +++ ossp-pkg/l2/l2.h.in	2001/09/12 10:24:29	1.5
  @@ -80,6 +80,7 @@
   
   /* list of logging levels (high to low priority; low to high amount of logging) */
   typedef enum {
  +    L2_LEVEL_NONE     = 0,
       L2_LEVEL_PANIC    = (1 << 0),
       L2_LEVEL_CRITICAL = (1 << 1),
       L2_LEVEL_ERROR    = (1 << 2),

From ossp-cvs-owner@ossp.org  Wed Sep 12 12:32:04 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8CAW3W85860; Wed, 12 Sep 2001 12:32:03 +0200 (CEST)
Date: Wed, 12 Sep 2001 12:32:03 +0200 (CEST)
Message-Id: <200109121032.f8CAW3W85860@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   12-Sep-2001 12:32:03
  Branch: HEAD                             Handle: 1970010101000000

  Removed files:
    ossp-pkg/l2             l2.h

  Log:
    Source l2.h is now automatically generated by autoconf. Rerun ./configure to
    get a fresh l2.h revision, do not checkout from cvs!

  Summary:
    Revision    Changes     Path
    NONE        +0  -221    ossp-pkg/l2/l2.h
  ____________________________________________________________________________

  

From ossp-cvs-owner@ossp.org  Wed Sep 12 15:04:41 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8CD4eJ25838; Wed, 12 Sep 2001 15:04:40 +0200 (CEST)
Date: Wed, 12 Sep 2001 15:04:40 +0200 (CEST)
Message-Id: <200109121304.f8CD4eJ25838@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   12-Sep-2001 15:04:40
  Branch: HEAD                             Handle: 2001091214043900

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c

  Log:
    relocating -l code according to sortspec; added missing break in -s option switch

  Summary:
    Revision    Changes     Path
    1.56        +19 -18     ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.55 -r1.56 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/12 09:58:22	1.55
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/12 13:04:39	1.56
  @@ -489,6 +489,25 @@
                   }
                   free(azHosts);
                   break;
  +            case 'l': /*POD [B<-l> I<level>[:I<logfile>]] */
  +                if ((cp = strrchr(optarg, ':')) != NULL) {
  +                    *cp++ = NUL;
  +                    if (*cp == NUL) {
  +                        fprintf(stderr, "%s:Error: empty logfile to option -l\n", ctx->progname);
  +                        exit(ERR_EXECUTION);
  +                    }
  +                    else
  +                        ctx->option_logfile = strdup(cp);
  +                }
  +                else
  +                    ctx->option_logfile = strdup("logfile");
  +
  +                if (l2_util_s2l(optarg, strlen(optarg), ',', &ctx->option_levelmask) != L2_OK) {
  +                    fprintf(stderr, "%s:Error: invalid level \"%s\" to option -l\n", ctx->progname, optarg);
  +                    exit(ERR_EXECUTION);
  +                }
  +                ctx->option_levelmask = L2_LEVEL_UPTO(ctx->option_levelmask);
  +                break;
               case 'm': /*POD [B<-m> I<mailfrom>] */
                   ctx->option_mailfrom = strdup(optarg);
                   /* protect ourselfs from the substitution of backreferences.
  @@ -518,24 +537,6 @@
                           fprintf(stderr, "%s:Error: maximum message size is unacceptable small.\n", ctx->progname);
                           exit(ERR_EXECUTION);
                       }
  -            case 'l': /*POD [B<-l> I<level>[:I<logfile>]] */
  -                if ((cp = strrchr(optarg, ':')) != NULL) {
  -                    *cp++ = NUL;
  -                    if (*cp == NUL) {
  -                        fprintf(stderr, "%s:Error: empty logfile to option -l\n", ctx->progname);
  -                        exit(ERR_EXECUTION);
  -                    }
  -                    else
  -                        ctx->option_logfile = strdup(cp);
  -                }
  -                else
  -                    ctx->option_logfile = strdup("logfile");
  -
  -                if (l2_util_s2l(optarg, strlen(optarg), ',', &ctx->option_levelmask) != L2_OK) {
  -                    fprintf(stderr, "%s:Error: invalid level \"%s\" to option -l\n", ctx->progname, optarg);
  -                    exit(ERR_EXECUTION);
  -                }
  -                ctx->option_levelmask = L2_LEVEL_UPTO(ctx->option_levelmask);
                   break;
               case 'v': /*POD [B<-v>] (version)*/
                   fprintf(stdout, "%s\n", lmtp2nntp_version.v_gnu);

From ossp-cvs-owner@ossp.org  Wed Sep 12 15:05:40 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8CD5e525945; Wed, 12 Sep 2001 15:05:40 +0200 (CEST)
Date: Wed, 12 Sep 2001 15:05:40 +0200 (CEST)
Message-Id: <200109121305.f8CD5e525945@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_prefix.c l2_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   12-Sep-2001 15:05:40
  Branch: HEAD                             Handle: 2001091214053900

  Modified files:
    ossp-pkg/l2             l2_ch_prefix.c l2_test.c

  Log:
    add support for %L (level) and %P (pid) to prefix channel

  Summary:
    Revision    Changes     Path
    1.13        +63 -9      ossp-pkg/l2/l2_ch_prefix.c
    1.18        +1  -1      ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_prefix.c
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 l2_ch_prefix.c
  --- ossp-pkg/l2/l2_ch_prefix.c	2001/09/12 09:42:34	1.12
  +++ ossp-pkg/l2/l2_ch_prefix.c	2001/09/12 13:05:39	1.13
  @@ -28,14 +28,15 @@
   */
   
   #include <time.h>
  +#include <sys/types.h>
  +#include <unistd.h>
   
   #include "l2.h"
   
   /* declare private channel configuration */
   typedef struct {
  -    char *timefmt;
  +    char *prefix;
       char *timezone;
  -    char  timebuf[1024];
   } l2_ch_prefix_t;
   
   /* create channel */
  @@ -48,7 +49,7 @@
           return L2_ERR_MEM;
   
       /* initialize configuration with reasonable defaults */
  -    cfg->timefmt  = NULL;
  +    cfg->prefix   = NULL;
       cfg->timezone = strdup("local");
   
       /* link private channel configuration into channel context */
  @@ -65,7 +66,7 @@
       l2_result_t rv;
   
       /* feed and call generic parameter parsing engine */
  -    L2_PARAM_SET(pa[0], timefmt,  STRING, &cfg->timefmt);
  +    L2_PARAM_SET(pa[0], prefix,  STRING, &cfg->prefix);
       L2_PARAM_SET(pa[1], timezone, STRING, &cfg->timezone);
       L2_PARAM_END(pa[2]);
       rv = l2_util_setparams(pa, fmt, ap);
  @@ -82,6 +83,52 @@
       return rv;
   }
   
  +static l2_result_t expand_specials(char *buf, size_t bufsize, l2_level_t level)
  +{
  +    char *cpSC;
  +    char *cpSE;
  +    char *cpBE;
  +    char caBuf[128];
  +    size_t nBuf;
  +    l2_level_t rv;
  +    int bSubst;
  +
  +    cpSC = buf;             /* string current pointer */
  +    cpSE = buf+strlen(buf); /* string end pointer     */
  +    cpBE = buf+bufsize;     /* buffer end pointer     */
  +    while (cpSC < cpSE) {
  +        if ((cpSC+1) < cpSE && *cpSC == '%') {
  +            bSubst = FALSE;
  +            switch (*(cpSC+1)) {
  +                case 'L': {
  +                    if ((rv = l2_util_l2s(caBuf, sizeof(caBuf), '\0', level)) != L2_OK)
  +                        return rv;
  +                    bSubst = TRUE;
  +                    break;
  +                }
  +                case 'P': {
  +                    sprintf(caBuf, "%lu", (unsigned long)getpid());
  +                    bSubst = TRUE;
  +                    break;
  +                }
  +            }
  +            if (bSubst) {
  +                nBuf = strlen(caBuf);
  +                if ((cpBE-cpSE)+2 < nBuf)
  +                    return L2_ERR_MEM;
  +                memmove(cpSC+nBuf, cpSC+2, cpSE-(cpSC+2)+1);
  +                memmove(cpSC, caBuf, nBuf);
  +                cpSC += nBuf;
  +                cpSE += (-2+nBuf);
  +                continue;
  +            }
  +        }
  +        cpSC++;
  +    }
  +
  +    return L2_OK;
  +}
  +
   /* write to channel */
   static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch,
                                 l2_level_t level, const char *buf, size_t buf_size)
  @@ -92,9 +139,16 @@
       struct tm *tm;
       size_t n;
       l2_result_t rv;
  +    char buf1[1024];
  +    char buf2[1024];
   
       /* optionally provide prefix */
  -    if (cfg->timefmt != NULL) {
  +    if (cfg->prefix != NULL) {
  +        if (strlen(cfg->prefix) >= sizeof(buf1))
  +            return L2_ERR_MEM;
  +        strcpy(buf1, cfg->prefix);
  +        if ((rv = expand_specials(buf1, sizeof(buf1), level)) != L2_OK)
  +            return rv;
           t = time(NULL);
           if (strcmp(cfg->timezone, "local") == 0)
               tm = localtime(&t);
  @@ -102,9 +156,9 @@
               tm = gmtime(&t);
           else
               return L2_ERR_ARG;
  -        if ((n = strftime(cfg->timebuf, sizeof(cfg->timebuf), cfg->timefmt, tm)) == 0)
  +        if ((n = strftime(buf2, sizeof(buf2), buf1, tm)) == 0)
               return L2_ERR_SYS;
  -        if ((rv = l2_channel_write(downstream, level, cfg->timebuf, n)) != L2_OK)
  +        if ((rv = l2_channel_write(downstream, level, buf2, n)) != L2_OK)
               return rv;
       }
   
  @@ -123,8 +177,8 @@
       l2_result_t rv;
   
       /* free prefix structure */
  -    if (cfg->timefmt != NULL)
  -        free(cfg->timefmt);
  +    if (cfg->prefix != NULL)
  +        free(cfg->prefix);
       if (cfg->timezone != NULL)
           free(cfg->timezone);
       free(cfg);
  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/09/10 14:34:11	1.17
  +++ ossp-pkg/l2/l2_test.c	2001/09/12 13:05:39	1.18
  @@ -107,7 +107,7 @@
       if ((chPrefix  = l2_channel_create(&l2_handler_prefix)) == NULL) /* Prefix */
           die("failed to create prefix channel");
   
  -    if (l2_channel_configure(chPrefix, "timefmt,timezone", "[%d-%m-%Y/%H:%M:%S] ", "local") != L2_OK)
  +    if (l2_channel_configure(chPrefix, "prefix,timezone", "[%d-%m-%Y/%H:%M:%S] %L test[%P]: ", "local") != L2_OK)
           die("failed to configure prefix channel");
   
       if ((chBuf  = l2_channel_create(&l2_handler_buffer)) == NULL) /* Buffer */

From ossp-cvs-owner@ossp.org  Wed Sep 12 15:50:48 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8CDokc31200; Wed, 12 Sep 2001 15:50:46 +0200 (CEST)
Date: Wed, 12 Sep 2001 15:50:46 +0200 (CEST)
Message-Id: <200109121350.f8CDokc31200@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.h.in l2_p.h l2_stream.c l2_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   12-Sep-2001 15:50:46
  Branch: HEAD                             Handle: 2001091214504600

  Modified files:
    ossp-pkg/l2             l2.h.in l2_p.h l2_stream.c l2_test.c

  Log:
    First cut for flush mask support.

  Summary:
    Revision    Changes     Path
    1.6         +2  -2      ossp-pkg/l2/l2.h.in
    1.16        +2  -0      ossp-pkg/l2/l2_p.h
    1.16        +8  -2      ossp-pkg/l2/l2_stream.c
    1.19        +4  -4      ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2.h.in
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 l2.h.in
  --- ossp-pkg/l2/l2.h.in	2001/09/12 10:24:29	1.5
  +++ ossp-pkg/l2/l2.h.in	2001/09/12 13:50:46	1.6
  @@ -203,9 +203,9 @@
   
   /* stream operations */
   l2_stream_t  *l2_stream_create     (void);
  -l2_result_t   l2_stream_channel    (l2_stream_t *st, l2_channel_t *ch, unsigned int levelmask);
  +l2_result_t   l2_stream_channel    (l2_stream_t *st, l2_channel_t *ch, unsigned int levelmask, unsigned int flushmask);
   l2_result_t   l2_stream_formatter  (l2_stream_t *st, char id, l2_formatter_t cb, l2_context_t *ctx);
  -l2_result_t   l2_stream_levels     (l2_stream_t *st, unsigned int levelmask);
  +l2_result_t   l2_stream_levels     (l2_stream_t *st, unsigned int levelmask, unsigned int flushmask);
   l2_result_t   l2_stream_log        (l2_stream_t *st, l2_level_t level, const char *fmt, ...);
   l2_result_t   l2_stream_vlog       (l2_stream_t *st, l2_level_t level, const char *fmt, va_list ap);
   l2_result_t   l2_stream_destroy    (l2_stream_t *st);
  Index: ossp-pkg/l2/l2_p.h
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 l2_p.h
  --- ossp-pkg/l2/l2_p.h	2001/09/11 10:37:04	1.15
  +++ ossp-pkg/l2/l2_p.h	2001/09/12 13:50:46	1.16
  @@ -61,6 +61,7 @@
   typedef struct {
       l2_channel_t *ch;
       unsigned int levelmask;
  +    unsigned int flushmask;
   } l2_channel_entry_t;
   
   typedef struct {
  @@ -71,6 +72,7 @@
   
   struct l2_stream_st {
       unsigned int          levelmask;
  +    unsigned int          flushmask;
       char                  message[L2_MAX_MSGSIZE];
       l2_channel_entry_t    channels[L2_MAX_CHANNELS];
       l2_formatter_entry_t  formatters[L2_MAX_FORMATTERS];
  Index: ossp-pkg/l2/l2_stream.c
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 l2_stream.c
  --- ossp-pkg/l2/l2_stream.c	2001/09/12 09:42:34	1.15
  +++ ossp-pkg/l2/l2_stream.c	2001/09/12 13:50:46	1.16
  @@ -43,6 +43,7 @@
   
       /* initialize stream structure */
       st->levelmask = 0;
  +    st->flushmask = 0;
       for (i = 0; i < L2_MAX_CHANNELS; i++)
           st->channels[i].ch = NULL;
       for (i = 0; i < L2_MAX_FORMATTERS; i++)
  @@ -52,7 +53,7 @@
   }
   
   /* attach channel to stream */
  -l2_result_t l2_stream_channel(l2_stream_t *st, l2_channel_t *ch, unsigned int levelmask)
  +l2_result_t l2_stream_channel(l2_stream_t *st, l2_channel_t *ch, unsigned int levelmask, unsigned int flushmask)
   {
       l2_channel_t *chC;
       l2_channel_t *chN;
  @@ -79,6 +80,7 @@
       /* attach channel to stream */
       st->channels[i].ch = ch;
       st->channels[i].levelmask = levelmask;
  +    st->channels[i].flushmask = flushmask;
   
       return L2_OK;
   }
  @@ -107,7 +109,7 @@
   }
   
   /* set stream level mask */
  -l2_result_t l2_stream_levels(l2_stream_t *st, unsigned int levelmask)
  +l2_result_t l2_stream_levels(l2_stream_t *st, unsigned int levelmask, unsigned int flushmask)
   {
       /* argument sanity check */
       if (st == NULL)
  @@ -115,6 +117,7 @@
   
       /* override global level mask */
       st->levelmask = levelmask;
  +    st->flushmask = flushmask;
   
       return L2_OK;
   }
  @@ -225,6 +228,9 @@
           if (st->channels[i].levelmask & level) {
               if ((rv = l2_channel_write(st->channels[i].ch, level, st->message, len)) != L2_OK)
                   break;
  +            if ((st->flushmask & level) || (st->channels[i].flushmask & level))
  +                if ((rv = l2_channel_flush(st->channels[i].ch)) != L2_OK)
  +                    break;
           }
       }
       return rv;
  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/09/12 13:05:39	1.18
  +++ ossp-pkg/l2/l2_test.c	2001/09/12 13:50:46	1.19
  @@ -131,7 +131,7 @@
       if (l2_channel_open(chPrefix) != L2_OK)
           die("failed to open channel stack");
   
  -    if (l2_stream_channel(st, chPrefix, L2_LEVEL_UPTO(L2_LEVEL_WARNING)) != L2_OK)
  +    if (l2_stream_channel(st, chPrefix, L2_LEVEL_UPTO(L2_LEVEL_WARNING), L2_LEVEL_NONE) != L2_OK)
           die("failed to attach channel stack into stream");
   
       if ((chSyslog = l2_channel_create(&l2_handler_syslog)) == NULL)   /* Syslog */
  @@ -145,7 +145,7 @@
       if (l2_channel_open(chSyslog) != L2_OK)
           die("failed to open channel stack");
   
  -    if (l2_stream_channel(st, chSyslog, L2_LEVEL_UPTO(L2_LEVEL_WARNING)) != L2_OK)
  +    if (l2_stream_channel(st, chSyslog, L2_LEVEL_UPTO(L2_LEVEL_WARNING), L2_LEVEL_NONE) != L2_OK)
           die("failed to attach channel syslog into stream");
   
   #ifdef WITH_SMTP
  @@ -158,11 +158,11 @@
       if (l2_channel_open(chSmtp) != L2_OK)
           die("failed to open smtp channel");
   
  -    if (l2_stream_channel(st, chSmtp, L2_LEVEL_UPTO(L2_LEVEL_ERROR)) != L2_OK)
  +    if (l2_stream_channel(st, chSmtp, L2_LEVEL_UPTO(L2_LEVEL_ERROR), L2_LEVEL_NONE) != L2_OK)
           die("failed to attach smtp channel into stream");
   #endif
   
  -    if (l2_stream_levels(st, L2_LEVEL_UPTO(L2_LEVEL_WARNING)) != L2_OK)
  +    if (l2_stream_levels(st, L2_LEVEL_UPTO(L2_LEVEL_WARNING), L2_LEVEL_NONE) != L2_OK)
           die("failed to set global logging level");
       
       if (l2_stream_formatter(st, 'k', formatter, NULL) != L2_OK)

From ossp-cvs-owner@ossp.org  Wed Sep 12 16:23:08 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8CEN7134945; Wed, 12 Sep 2001 16:23:07 +0200 (CEST)
Date: Wed, 12 Sep 2001 16:23:07 +0200 (CEST)
Message-Id: <200109121423.f8CEN7134945@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/test .cvsignore run.sh testmessage.fold...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   12-Sep-2001 16:23:07
  Branch: HEAD                             Handle: 2001091215230600

  Modified files:
    ossp-pkg/lmtp2nntp/test .cvsignore run.sh testmessage.foldlinesvialmtp
                            testmessage.vialmtp testmessage.viasendmail

  Log:
    first self contained make check for release

  Summary:
    Revision    Changes     Path
    1.3         +4  -0      ossp-pkg/lmtp2nntp/test/.cvsignore
    1.16        +84 -38     ossp-pkg/lmtp2nntp/test/run.sh
    1.2         +2  -2      ossp-pkg/lmtp2nntp/test/testmessage.foldlinesvialmtp
    1.7         +10 -10     ossp-pkg/lmtp2nntp/test/testmessage.vialmtp
    1.3         +1  -1      ossp-pkg/lmtp2nntp/test/testmessage.viasendmail
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/test/.cvsignore
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 .cvsignore
  --- ossp-pkg/lmtp2nntp/test/.cvsignore	2001/09/07 13:53:17	1.2
  +++ ossp-pkg/lmtp2nntp/test/.cvsignore	2001/09/12 14:23:06	1.3
  @@ -1,2 +1,6 @@
   dmalloc.log
   logfile
  +stdin
  +stdout
  +stderr
  +stdlog
  Index: ossp-pkg/lmtp2nntp/test/run.sh
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 run.sh
  --- ossp-pkg/lmtp2nntp/test/run.sh	2001/09/12 06:52:26	1.15
  +++ ossp-pkg/lmtp2nntp/test/run.sh	2001/09/12 14:23:06	1.16
  @@ -16,7 +16,7 @@
               do
                   echo -n $h$z$e
                   newmsg sendmail
  -                cat /tmp/testmessage \
  +                cat $STDIN \
                    | sendmail -i posting+$h$z$e@dev12.dev.de.cw.net
               done
           done
  @@ -26,7 +26,7 @@
   lmtp()
   {
       newmsg lmtp
  -    cat /tmp/testmessage \
  +    cat $STDIN \
         | ../lmtp2nntp -l $1:$FILE -w 1 -d $2 -g $2 -b dev12 -h dev16,141.1.23.116:nntp -h dev16.de.cw.net:119 $3 >/dev/null; echo $?
        #| ../lmtp2nntp -l $1:$FILE -w 1 -d 255/2.5.5 -g $3 -b 127.0.0.1 $4 >/dev/null; echo $?
        #| ../lmtp2nntp -l $1:$FILE -w 1 -d $2 -g $3 -b 127.0.0.1 -h 127.0.0.2 $4 >/dev/null; echo $?
  @@ -35,9 +35,9 @@
   sendmaildup()
   {
       newmsg sendmail
  -    cat /tmp/testmessage \
  +    cat $STDIN \
        | sendmail -i posting+cw.de.sd.apps.dev.test@dev12.dev.de.cw.net
  -    cat /tmp/testmessage \
  +    cat $STDIN \
        | sendmail -i posting+cw.de.sd.apps.dev.test@dev12.dev.de.cw.net
   }
   
  @@ -55,41 +55,30 @@
               /^Message-ID:/ { gotit = 1; print "Message-Id: <" date "-" id "@dev12.dev.de.cw.net>" }
               /^Subject:/    { gotit = 1; print "Subject: [" pid "] " $2 }
                              { if (gotit == 0) { print }; gotit = 0 }
  -         ' | tee /tmp/testmessage
  +         ' | tee 2>&1 >/dev/null $STDIN
       else
           echo "ERROR: file testmessage.via$1 not readable!"
           exit 1
       fi
  -    echo -----------------------------------------------------------
   }
   
  -before ()
  +prolog ()
   {
  -    set -v -x
       h="H"
       z="Z"
       e="E"
   
  -    if [ -e $FILE ]; then
  -        rm -f $FILE
  -    fi
  -    touch $FILE
  -    chmod 666 $FILE
  -
  -    if [ -e /tmp/testmessage ]; then
  -        rm -f /tmp/testmessage
  -    fi
  -    touch /tmp/testmessage
  -    chmod 666 /tmp/testmessage
  -
  -    if [ -e dmalloc.log ]; then
  -        rm -f dmalloc.log
  -    fi
  -    touch dmalloc.log
  -    chmod 666 dmalloc.log
  +    for i in $FILE $STDIN $STDOUT $STDERR dmalloc.log
  +    do
  +        if [ -e $i ]; then
  +            rm -f $i
  +        fi
  +        touch $i
  +        chmod 666 $i
  +    done
   }
   
  -after ()
  +epilog ()
   {
       if [ -r $FILE ]
       then
  @@ -104,8 +93,6 @@
       fi
   }
   
  -#   lmtp notice post arg cw.de.sd.apps.dev.test
  -#   newmsg sendmail; ls -l /tmp/testmessage && cat /tmp/testmessage
   #   lmtp feed arg
   #   lmtp post envelope '*.test.* cw.*.dev.*'
   #   lmtp post header '*.test.* cw.*.dev.* *foo*'
  @@ -113,21 +100,80 @@
   #   lmtp post envelope
   #   sendmaildup
   #   post1000
  +
  +   LOG="trace"
  +  FILE="stdlog"
  + STDIN="stdin"
  +STDOUT="stdout"
  +STDERR="stderr"
  + LOCAL="0.0.0.0"
  +  HOST="0.0.0.0"
  + GROUP="my.test"
  +MFILT=".+@(?:[^.]+\.)*cw\.com"
  + NODE="gateway"
   
  -  LOG="notice"
  - FILE="/tmp/tracing"
  -GROUP="cw.de.sd.apps.dev.test"
  -LOCAL="0.0.0.0"
  -HOST="dev16,141.1.23.116:nntp -h dev16.de.cw.net:119"
  -HOST="0.0.0.0"
  -before
  +# make check with automatic succeed/ fail message.
  +# more samples and testing below.
  +newmsg lmtp
   
  +# check -v option prints out version, typical output: lmtp2nntp 0.9.4
  +# (30-Aug-2001)
  +prolog
  +../lmtp2nntp -v >$STDOUT 2>$STDERR
  +RC=`cat $STDOUT | egrep 'lmtp2nntp[ ]+[0-9]+\.[0-9]\.[0-9][ ]+\([0-9]+-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-[0-9]{4}\)' | wc -l`
  +if [ $RC -ne 1 -o -s $STDERR ]; then
  +    echo "CHECK ERROR: version test failed $RC"
  +    exit 1;
  +fi
  +echo "CHECK version test succeeded"
  +
  +# check -? option prints out usage, typical output: USAGE: ../lmtp2nntp
  +# lmtp2nntp [-b bindaddr[:port]] [-d deliverymode] [-g groupmode] [-h
  +# host[:port][,host[:port], ...]] [-m mailfrom] [-n nodename] [-s size] [-l
  +# level[:logfile]] [-v] [-w waittime] newsgroup [newsgroup ...]
  +prolog
  +../lmtp2nntp -? >$STDOUT 2>$STDERR
  +RC=`cat $STDERR | egrep -- '-b.*-d.*-g.*-h.*-m.*-n.*-s.*-l.*-v.*-w.*newsgroup' | wc -l`
  +if [ $RC -ne 1 -o -s $STDOUT ]; then
  +    echo "CHECK ERROR: usage test failed"
  +    exit 1;
  +fi
  +echo "CHECK usage test succeeded"
  +
  +# check dummy posting
  +#set -v -x
  +prolog
  +newmsg lmtp
  +../lmtp2nntp <$STDIN -b $LOCAL -d 250/2.0.0 -g arg -h $HOST -l $LOG:$FILE -m "$MFILT" -n $NODE -s 1000 -w 1 $GROUP >$STDOUT 2>$STDERR ; RC=$
  +set +v +x
  +RC="";
  +if [ 1 -eq `cat $STDOUT | egrep '^220[ ]+LMTP Service ready'    | wc -l` ]; then RC="${RC}LHLO "; fi
  +if [ 1 -eq `cat $STDOUT | egrep '^250 2.1.0 Sender ok'          | wc -l` ]; then RC="${RC}MAIL "; fi
  +if [ 3 -eq `cat $STDOUT | egrep '^250 2.1.5 Recipient accepted' | wc -l` ]; then RC="${RC}RCPT "; fi
  +if [ 1 -eq `cat $STDOUT | egrep '^354 Enter mail'               | wc -l` ]; then RC="${RC}DATA "; fi
  +if [ 3 -eq `cat $STDOUT | egrep '^250-2.0.0 NNTP noop fake'     | wc -l` ]; then RC="${RC}post "; fi
  +if [ 1 -eq `cat $STDOUT | egrep '^221 2.0.0.+closing.+channel'  | wc -l` ]; then RC="${RC}QUIT "; fi
  +if [ "$RC" != "LHLO MAIL RCPT DATA post QUIT " ]; then
  +    echo "CHECK ERROR: fake post test failed"
  +    exit 1;
  +fi
  +echo "CHECK fake post test succeeded"
  +
  +echo "CHECK COMPLETE AND PASSED"
  +exit 0
  +
  +#
  +#   BELOW ARE INTERAL TESTS. CONSIDER THEM AS EXAMPLE.
  +#
  +  HOST="dev16,141.1.23.116:nntp -h dev16.de.cw.net:119"
  + GROUP="cw.de.sd.apps.dev.test"
   newmsg lmtp
  -#./lmtp2nntp </tmp/testmessage -l $LOG:$FILE -w 1 -d post -g arg -b $LOCAL -h $HOST $GROUP >/dev/null; echo $?
  -../lmtp2nntp </tmp/testmessage -l $LOG:$FILE -w 1 -d 250/2.0.0 -g arg -b $LOCAL -h $HOST $GROUP >/dev/null; echo $?
  +../lmtp2nntp <$STDIN -b $LOCAL -d post      -g arg -h $HOST -l $LOG:$FILE -m "$MFILT" -n $NODE -s 1000 -w 1 $GROUP >$STDOUT 2>$STDERR ; RC=$
  +#./lmtp2nntp <$STDIN -b $LOCAL -d 250/2.0.0 -g arg -h $HOST -l $LOG:$FILE -m "$MFILT" -n $NODE -s 1000 -w 1 $GROUP >$STDOUT 2>$STDERR ; RC=$
  +/dev/null; echo $?
   
   #newmsg sendmail
  -# sendmail -i </tmp/testmessage -V nase123baer posting+$GROUP@$LOCAL
  +# sendmail -i <$STDIN -V nase123baer posting+$GROUP@$LOCAL
   
   after
   exit 0
  Index: ossp-pkg/lmtp2nntp/test/testmessage.foldlinesvialmtp
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 testmessage.foldlinesvialmtp
  --- ossp-pkg/lmtp2nntp/test/testmessage.foldlinesvialmtp	2001/08/28 14:27:35	1.1
  +++ ossp-pkg/lmtp2nntp/test/testmessage.foldlinesvialmtp	2001/09/12 14:23:06	1.2
  @@ -1,12 +1,12 @@
   LHLO dev.de.cw.net
  -MAIL From:<thl@dev.de.cw.net>
  +MAIL From:<thomas.lotterer@cw.com>
   RCPT To:<cw.de.sd.apps.dev.test@news-posting>
   RCPT To:<foo.bar@news-posting>
   RCPT To:<foo.test.bar@news-posting>
   DATA
   Date: Tue, 26 Aug 2001 14:51:48 +0200 (CEST)
   Message-Id: <200108141251.f7ECpmn74812@dev.de.cw.net>
  -From: Thomas Lotterer <Thomas.Lotterer@de.cw.net>
  +From: Thomas Lotterer <Thomas.Lotterer@cw.com>
   X-Wraptest1:      0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
   X-Wraptest2: 01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
   X-Wraptest3:    the quick brown fox jumps over the lazy dog. THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG. the quick brown fox jumps over the lazy dog. THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG. the quick brown fox jumps over the lazy dog. THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG. the quick brown fox jumps over the lazy dog. THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG. the quick brown fox jumps over the lazy dog. THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG. the quick brown fox jumps over the lazy dog. THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG. the quick brown fox jumps over the lazy dog. THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG!
  Index: ossp-pkg/lmtp2nntp/test/testmessage.vialmtp
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 testmessage.vialmtp
  --- ossp-pkg/lmtp2nntp/test/testmessage.vialmtp	2001/09/11 13:41:22	1.6
  +++ ossp-pkg/lmtp2nntp/test/testmessage.vialmtp	2001/09/12 14:23:06	1.7
  @@ -1,20 +1,20 @@
   LHLO dev.de.cw.net
  -MAIL From:<thl@dev.de.cw.net>
  +MAIL From:<thomas.lotterer@cw.com>
   RCPT To:<cw.de.sd.apps.dev.test@news-posting>
   RCPT To:<foo.bar@news-posting>
   RCPT To:<foo.test.bar@news-posting>
   DATA
  -Date: Tue, 6 Sep 2001 14:51:48 +0200 (CEST)
  +Date: Tue, 26 Aug 2001 14:51:48 +0200 (CEST)
   Message-Id: <200108141251.f7ECpmn74812@dev.de.cw.net>
  -From: Thomas Lotterer <Thomas.Lotterer@de.cw.net>
  -Received: from augias.ecrc.de (augias.ecrc.de [141.1.1.32])
  -    by ns1.ecrc.de (8.9.2/8.9.2/$Revision: 1.6 $) with SMTP id NAA08840
  -    for <thomas.lotterer@ns1.ecrc.de>; Mon, 2 Apr 2001 13:20:25 +0200 (MET DST)
  -Received: from clhq029 (clhq029.computerlinks.de [195.143.102.41])
  -    by augias.ecrc.de (8.11.0/8.11.0/$Revision: 1.6 $) with ESMTP id f32BKPb12235
  +From: Thomas Lotterer <Thomas.Lotterer@cw.com>
  +Received: from cw.example.com (cw.example.com [10.1.1.32])
  +    by gateway.example.com (8.9.2/8.9.2/$Revision: 1.7 $) with SMTP id NAA08840
  +    for <thomas.lotterer@gateway.example.com>; Mon, 2 Apr 2001 13:20:25 +0200 (MET DST)
  +Received: from history (history.example.org [195.143.102.41])
  +    by cw.example.com (8.11.0/8.11.0/$Revision: 1.7 $) with ESMTP id f32BKPb12235
       for <thomas.lotterer@de.cw.net>; Mon, 2 Apr 2001 13:20:25 +0200
  -Received: from computerlinks.de (nwrulez.computerlinks.de [195.143.103.160])
  -	by clhq029 (8.8.8/8.8.8) with ESMTP id LAA12678;
  +Received: from example.org (littlemua.example.org [195.143.103.160])
  +	by history (8.8.8/8.8.8) with ESMTP id LAA12678;
   	Mon, 2 Apr 2001 11:23:14 GMT
   Subject: lmtp2nntp testmessage.viasendmail
   
  Index: ossp-pkg/lmtp2nntp/test/testmessage.viasendmail
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 testmessage.viasendmail
  --- ossp-pkg/lmtp2nntp/test/testmessage.viasendmail	2001/08/16 15:00:51	1.2
  +++ ossp-pkg/lmtp2nntp/test/testmessage.viasendmail	2001/09/12 14:23:06	1.3
  @@ -1,4 +1,4 @@
  -From: Thomas Lotterer <Thomas.Lotterer@de.cw.net>
  +From: Thomas Lotterer <thomas.lotterer@de.cw.net>
   Subject: lmtp2nntp testmessage.viasendmail
   Message-ID: <foo@bar>
   Newsgroups: cw.de.sd.apps.dev.test

From ossp-cvs-owner@ossp.org  Wed Sep 12 16:34:47 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8CEYkm36298; Wed, 12 Sep 2001 16:34:46 +0200 (CEST)
Date: Wed, 12 Sep 2001 16:34:46 +0200 (CEST)
Message-Id: <200109121434.f8CEYkm36298@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   12-Sep-2001 16:34:46
  Branch: HEAD                             Handle: 2001091215344500

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c

  Log:
    level is now logged in Vplain text; better -m tracing now showing value and
    pattern to be compared;

  Summary:
    Revision    Changes     Path
    1.57        +14 -12     ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.56 -r1.57 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/12 13:04:39	1.56
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/12 14:34:45	1.57
  @@ -244,12 +244,12 @@
   {
       lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx->vp;
               
  -    if ((ctx->msg != NULL) &&
  -        (ctx->msg->cpFid != NULL))
  -        sprintf(bufptr, "%s[%ld]: %s: ", ctx->progname, (long)getpid(), ctx->msg->cpFid);
  +    if ((ctx->msg != NULL) && (ctx->msg->cpFid != NULL)) {
  +        sprintf(bufptr, "%s: ", ctx->msg->cpFid);
  +        *buflen = strlen(bufptr);
  +    }
       else
  -        sprintf(bufptr, "%s[%ld]: ", ctx->progname, (long)getpid());
  -    *buflen = strlen(bufptr);
  +        *buflen = 0;
       return L2_OK;
   }
   
  @@ -591,7 +591,7 @@
               fprintf(stderr, "%s:Error: logging failed to create prefix channel\n", ctx->progname);
               exit(ERR_EXECUTION);
           }
  -        if (l2_channel_configure(chPrefix, "timefmt,timezone", "%b %d %H:%M:%S ", "local") != L2_OK) {
  +        if (l2_channel_configure(chPrefix, "prefix,timezone", "%b %d %H:%M:%S <%L> lmtp2nntp[%P]: ", "local") != L2_OK) {
               fprintf(stderr, "%s:Error: logging failed to configure prefix channel\n", ctx->progname);
               exit(ERR_EXECUTION);
           }
  @@ -1201,12 +1201,14 @@
        *  RFC1893 3.5 Network and Routing Status          X.7.1   Delivery not authorized, message refused
        */
       log0(ctx, TRACE, "checking if sender is allowed");
  -    if ((ctx->option_mailfrom != NULL) &&
  -        (str_parse(ctx->msg->mail_from, ctx->option_mailfrom) <= 0)) {
  -        res.statuscode = "550";
  -        res.dsncode    = "5.7.1";
  -        res.statusmsg  = "Delivery not authorized, message refused.";
  -        CU(LMTP_OK);
  +    if (ctx->option_mailfrom != NULL) {
  +        log2(ctx, TRACE, "\"%s\" matching against \"%s\"", ctx->msg->mail_from, ctx->option_mailfrom);
  +        if (str_parse(ctx->msg->mail_from, ctx->option_mailfrom) <= 0) {
  +            res.statuscode = "550";
  +            res.dsncode    = "5.7.1";
  +            res.statusmsg  = "Delivery not authorized, message refused.";
  +            CU(LMTP_OK);
  +        }
       }
   
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   250 Requested mail action okay, completed

From ossp-cvs-owner@ossp.org  Wed Sep 12 16:35:16 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8CEZFK36372; Wed, 12 Sep 2001 16:35:15 +0200 (CEST)
Date: Wed, 12 Sep 2001 16:35:15 +0200 (CEST)
Message-Id: <200109121435.f8CEZFK36372@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp msg.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   12-Sep-2001 16:35:15
  Branch: HEAD                             Handle: 2001091215351400

  Modified files:
    ossp-pkg/lmtp2nntp      msg.c

  Log:
    fixed a memory leak

  Summary:
    Revision    Changes     Path
    1.18        +2  -0      ossp-pkg/lmtp2nntp/msg.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/msg.c
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 msg.c
  --- ossp-pkg/lmtp2nntp/msg.c	2001/09/11 13:41:22	1.17
  +++ ossp-pkg/lmtp2nntp/msg.c	2001/09/12 14:35:14	1.18
  @@ -163,6 +163,8 @@
           cpHeaders = cpRem;
           argz_add(&msg->azHeaders, &msg->asHeaders, cpName);
           argz_add(&msg->azHeaders, &msg->asHeaders, cpValue);
  +        free(cpName);
  +        free(cpValue);
       }
   
       log0(msg, DEBUG, "check for headers we care about and do whatever neccessary");

From ossp-cvs-owner@ossp.org  Wed Sep 12 16:35:51 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8CEZpG36442; Wed, 12 Sep 2001 16:35:51 +0200 (CEST)
Date: Wed, 12 Sep 2001 16:35:51 +0200 (CEST)
Message-Id: <200109121435.f8CEZpG36442@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp .configure
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   12-Sep-2001 16:35:51
  Branch: HEAD                             Handle: 2001091215355000

  Modified files:
    ossp-pkg/lmtp2nntp      .configure

  Log:
    return default to work without dmalloc

  Summary:
    Revision    Changes     Path
    1.10        +1  -1      ossp-pkg/lmtp2nntp/.configure
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/.configure
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 .configure
  --- ossp-pkg/lmtp2nntp/.configure	2001/09/11 13:41:22	1.9
  +++ ossp-pkg/lmtp2nntp/.configure	2001/09/12 14:35:50	1.10
  @@ -3,8 +3,8 @@
       ./autogen.sh
   fi
   PATH=/cw/bin:$PATH
  +#  --with-dmalloc=/cw \
   ./configure \
  -   --with-dmalloc=/cw \
      --enable-debug \
      --prefix=/tmp/lmtp2nntp
   

From ossp-cvs-owner@ossp.org  Wed Sep 12 16:43:31 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8CEhUu37308; Wed, 12 Sep 2001 16:43:30 +0200 (CEST)
Date: Wed, 12 Sep 2001 16:43:30 +0200 (CEST)
Message-Id: <200109121443.f8CEhUu37308@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 Makefile.in ossp-pkg/lmtp2nntp lmtp2nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   12-Sep-2001 16:43:30
  Branch: HEAD                             Handle: 2001091215432900

  Modified files:
    ossp-pkg/l2             Makefile.in
    ossp-pkg/lmtp2nntp      lmtp2nntp.c

  Log:
    adapted new L2 flushmask feature

  Summary:
    Revision    Changes     Path
    1.21        +30 -0      ossp-pkg/l2/Makefile.in
    1.58        +2  -2      ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 Makefile.in
  --- ossp-pkg/l2/Makefile.in	2001/09/10 06:43:10	1.20
  +++ ossp-pkg/l2/Makefile.in	2001/09/12 14:43:29	1.21
  @@ -305,3 +305,33 @@
   l2_ut_pcre.lo: l2_ut_pcre.c l2_ut_pcre.h l2_ut_pcre_tab.c
   l2_ut_pcre_tab.lo: l2_ut_pcre_tab.c
   l2_version.lo: l2_version.c l2_version.c
  +l2_ch_buffer.lo: l2_ch_buffer.c l2.h
  +l2_ch_fd.lo: l2_ch_fd.c l2.h
  +l2_ch_file.lo: l2_ch_file.c l2.h
  +l2_ch_filter.lo: l2_ch_filter.c l2.h
  +l2_ch_null.lo: l2_ch_null.c l2.h
  +l2_ch_pipe.lo: l2_ch_pipe.c l2.h
  +l2_ch_prefix.lo: l2_ch_prefix.c l2.h
  +l2_ch_smtp.lo: l2_ch_smtp.c l2.h l2_p.h l2_config.h l2_ut_pcre.h \
  +  l2_ut_sa.h
  +l2_ch_socket.lo: l2_ch_socket.c l2.h l2_p.h l2_config.h l2_ut_pcre.h \
  +  l2_ut_sa.h
  +l2_ch_syslog.lo: l2_ch_syslog.c l2.h
  +l2_channel.lo: l2_channel.c l2.h l2_p.h l2_config.h l2_ut_pcre.h \
  +  l2_ut_sa.h
  +l2_epreuve.lo: l2_epreuve.c l2.h l2_p.h l2_config.h l2_ut_pcre.h \
  +  l2_ut_sa.h
  +l2_sockmon.lo: l2_sockmon.c
  +l2_stream.lo: l2_stream.c l2.h l2_p.h l2_config.h l2_ut_pcre.h l2_ut_sa.h
  +l2_test.lo: l2_test.c l2.h
  +l2_ut_fmtcb.lo: l2_ut_fmtcb.c l2.h
  +l2_ut_format.lo: l2_ut_format.c l2.h l2_p.h l2_config.h l2_ut_pcre.h \
  +  l2_ut_sa.h
  +l2_ut_level.lo: l2_ut_level.c l2.h l2_p.h l2_config.h l2_ut_pcre.h \
  +  l2_ut_sa.h
  +l2_ut_param.lo: l2_ut_param.c l2.h l2_p.h l2_config.h l2_ut_pcre.h \
  +  l2_ut_sa.h
  +l2_ut_pcre.lo: l2_ut_pcre.c l2_ut_pcre.h l2_ut_pcre_tab.c
  +l2_ut_pcre_tab.lo: l2_ut_pcre_tab.c
  +l2_ut_sa.lo: l2_ut_sa.c l2_p.h l2.h l2_config.h l2_ut_pcre.h l2_ut_sa.h
  +l2_version.lo: l2_version.c l2_version.c
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.57 -r1.58 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/12 14:34:45	1.57
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/12 14:43:29	1.58
  @@ -564,7 +564,7 @@
           fprintf(stderr, "%s:Error: logging failed to create stream\n", ctx->progname);
           exit(ERR_EXECUTION);
       }
  -    if (l2_stream_levels(ctx->l2, L2_LEVEL_UPTO(L2_LEVEL_DEBUG)) != L2_OK) {
  +    if (l2_stream_levels(ctx->l2, L2_LEVEL_UPTO(L2_LEVEL_DEBUG), L2_LEVEL_NONE) != L2_OK) {
           fprintf(stderr, "%s:Error: logging failed to set global logging level\n", ctx->progname);
           exit(ERR_EXECUTION);
       }
  @@ -628,7 +628,7 @@
               exit(ERR_EXECUTION);
           }
   
  -        if (l2_stream_channel(ctx->l2, chPrefix, ctx->option_levelmask) != L2_OK) {
  +        if (l2_stream_channel(ctx->l2, chPrefix, ctx->option_levelmask, L2_LEVEL_NONE) != L2_OK) {
               fprintf(stderr, "%s:Error: logging failed to attach channel into stream\n", ctx->progname);
               exit(ERR_EXECUTION);
           }

From ossp-cvs-owner@ossp.org  Wed Sep 12 17:30:26 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8CFUOj42957; Wed, 12 Sep 2001 17:30:24 +0200 (CEST)
Date: Wed, 12 Sep 2001 17:30:24 +0200 (CEST)
Message-Id: <200109121530.f8CFUOj42957@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp version.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   12-Sep-2001 17:30:24
  Branch: HEAD                             Handle: 2001091216302400

  Modified files:
    ossp-pkg/lmtp2nntp      version.c

  Log:
    bump version for release

  Summary:
    Revision    Changes     Path
    1.6         +9  -9      ossp-pkg/lmtp2nntp/version.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/version.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 version.c
  --- ossp-pkg/lmtp2nntp/version.c	2001/08/30 13:58:56	1.5
  +++ ossp-pkg/lmtp2nntp/version.c	2001/09/12 15:30:24	1.6
  @@ -8,7 +8,7 @@
   #ifndef _VERSION_C_
   #define _VERSION_C_
   
  -#define LMTP2NNTP_VERSION 0x009204
  +#define LMTP2NNTP_VERSION 0x009205
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _VERSION_C_AS_HEADER_
   
   lmtp2nntp_version_t lmtp2nntp_version = {
  -    0x009204,
  -    "0.9.4",
  -    "0.9.4 (30-Aug-2001)",
  -    "This is lmtp2nntp, Version 0.9.4 (30-Aug-2001)",
  -    "lmtp2nntp 0.9.4 (30-Aug-2001)",
  -    "lmtp2nntp/0.9.4",
  -    "@(#)lmtp2nntp 0.9.4 (30-Aug-2001)",
  -    "$Id: version.c,v 1.5 2001/08/30 13:58:56 thl Exp $"
  +    0x009205,
  +    "0.9.5",
  +    "0.9.5 (12-Sep-2001)",
  +    "This is lmtp2nntp, Version 0.9.5 (12-Sep-2001)",
  +    "lmtp2nntp 0.9.5 (12-Sep-2001)",
  +    "lmtp2nntp/0.9.5",
  +    "@(#)lmtp2nntp 0.9.5 (12-Sep-2001)",
  +    "$Id: version.c,v 1.6 2001/09/12 15:30:24 thl Exp $"
   };
   
   #endif /* _VERSION_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Wed Sep 12 18:07:25 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8CG7On47011; Wed, 12 Sep 2001 18:07:24 +0200 (CEST)
Date: Wed, 12 Sep 2001 18:07:24 +0200 (CEST)
Message-Id: <200109121607.f8CG7On47011@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_buffer.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   12-Sep-2001 18:07:23
  Branch: HEAD                             Handle: 2001091217072300

  Modified files:
    ossp-pkg/l2             l2_ch_buffer.c

  Log:
    Added new logic to buffer only until incoming message level changes.

  Summary:
    Revision    Changes     Path
    1.20        +27 -13     ossp-pkg/l2/l2_ch_buffer.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_buffer.c
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 l2_ch_buffer.c
  --- ossp-pkg/l2/l2_ch_buffer.c	2001/09/12 09:39:16	1.19
  +++ ossp-pkg/l2/l2_ch_buffer.c	2001/09/12 16:07:23	1.20
  @@ -33,9 +33,10 @@
   
   /* declare private channel configuration */
   typedef struct {
  -    char  *buf;
  -    int    bufpos;
  -    int    bufsize;
  +    char        *buf;
  +    int         bufpos;
  +    int         bufsize;
  +    l2_level_t  level;
   } l2_ch_buffer_t;
   
   /* create channel */
  @@ -51,6 +52,7 @@
       cfg->buf     = NULL;
       cfg->bufpos  = 0;
       cfg->bufsize = 4096;
  +    cfg->level   = L2_LEVEL_NONE;
   
       /* link private channel configuration into channel context */
       ctx->vp = cfg;
  @@ -107,16 +109,26 @@
       if (buf_size > (cfg->bufsize - cfg->bufpos)) {
           /* flush buffer if necessary */
           if (cfg->bufpos > 0) {
  -            if ((rv = l2_channel_write(downstream, level, cfg->buf, cfg->bufpos)) != L2_OK)
  +            if ((rv = l2_channel_write(downstream, cfg->level, cfg->buf, cfg->bufpos)) != L2_OK)
                   return rv;
               cfg->bufpos = 0;
  +            cfg->level  = L2_LEVEL_NONE; /* reset this->context->level */
           }
           /* pass through immediately to downstream if still too large */
           if (buf_size > cfg->bufsize)
               return l2_channel_write(downstream, level, buf, buf_size);
       }
   
  -    /* write message to channel buffer */
  +    /* flush if incoming message level differs from those already in buffer */
  +    if ((level != cfg->level) && (cfg->level == L2_LEVEL_NONE))
  +    {
  +        if ((rv = l2_channel_write(downstream, cfg->level, cfg->buf, cfg->bufpos)) != L2_OK)
  +            return rv;
  +        cfg->bufpos = 0;
  +        cfg->level  = level;
  +    }
  +
  +    /* finally write incoming message to channel buffer */
       memcpy(cfg->buf+cfg->bufpos, buf, buf_size);
       cfg->bufpos += buf_size;
   
  @@ -131,10 +143,11 @@
       l2_result_t rv;
   
       /* write the buffer contents downstream */
  -    if (cfg->bufpos > 0) {                    /* !---------! */
  -        if ((rv = l2_channel_write(downstream, L2_LEVEL_PANIC, cfg->buf, cfg->bufpos)) != L2_OK)
  -            return rv;                        /* !! FIXME !! */
  -        cfg->bufpos = 0;                      /* !---------! */
  +    if (cfg->bufpos > 0) {
  +        if ((rv = l2_channel_write(downstream, cfg->level, cfg->buf, cfg->bufpos)) != L2_OK)
  +            return rv;
  +        cfg->bufpos = 0;
  +        cfg->level  = L2_LEVEL_NONE; /* reset this->context->level */
       }
   
       /* optionally flush downstream channel, too */
  @@ -152,10 +165,11 @@
       l2_result_t rv;
   
       /* write pending data before closing down */
  -    if (cfg->bufpos > 0) {                    /* !---------! */
  -        if ((rv = l2_channel_write(downstream, L2_LEVEL_PANIC, cfg->buf, cfg->bufpos)) != L2_OK)
  -            return rv;                        /* !! FIXME !! */
  -        cfg->bufpos = 0;                      /* !---------! */
  +    if (cfg->bufpos > 0) {
  +        if ((rv = l2_channel_write(downstream, cfg->level, cfg->buf, cfg->bufpos)) != L2_OK)
  +            return rv;
  +        cfg->bufpos = 0;
  +        cfg->level  = L2_LEVEL_NONE; /* reset this->context->level */
       }
   
       /* optionally close downstream channel, too */

From ossp-cvs-owner@ossp.org  Wed Sep 12 20:43:40 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8CIhdR64525; Wed, 12 Sep 2001 20:43:39 +0200 (CEST)
Date: Wed, 12 Sep 2001 20:43:39 +0200 (CEST)
Message-Id: <200109121843.f8CIhdR64525@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   12-Sep-2001 20:43:39
  Branch: HEAD                             Handle: 2001091219433800

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    remember a few things

  Summary:
    Revision    Changes     Path
    1.19        +6  -0      ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 TODO
  --- ossp-pkg/l2/TODO	2001/09/11 12:55:16	1.18
  +++ ossp-pkg/l2/TODO	2001/09/12 18:43:38	1.19
  @@ -15,6 +15,12 @@
   - IRC channel
   - NNTP channel
   - SNMP trap channel
  +- perhaps generalize channels and get rid of stream
  +  by putting formatters into external object referenced
  +  by channels and by providing a T-channel at the top.
  +- l2_stream_flush()
  +- perhaps replace too large PCRE stuff with smaller pattern
  +  matching stuff
   
   ISSUES
   ------

From ossp-cvs-owner@ossp.org  Thu Sep 13 09:35:05 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8D7Z3P55679; Thu, 13 Sep 2001 09:35:03 +0200 (CEST)
Date: Thu, 13 Sep 2001 09:35:03 +0200 (CEST)
Message-Id: <200109130735.f8D7Z3P55679@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   13-Sep-2001 09:35:03
  Branch: HEAD                             Handle: 2001091308350300

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c

  Log:
    implemented CU/CUS cleanup sequence for main(); removed unneccessary command
    line option tracing which was already disabled in preprocessor for some time;
    New lmtp_gfs_ns graceful shutdown for ns structure removes a memory leak;
    removed trailing empty line in LHLO response;

  Summary:
    Revision    Changes     Path
    1.59        +79 -75     ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.58 -r1.59 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/12 14:43:29	1.58
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/13 07:35:03	1.59
  @@ -144,9 +144,10 @@
       struct utsname  uname;
   } lmtp2nntp_t;
   
  -static void lmtp_gfs_lhlo(lmtp2nntp_t *ctx);
  -static void lmtp_gfs_rset(lmtp2nntp_t *ctx);
  -static void lmtp_gfs_quit(lmtp2nntp_t *ctx);
  +static void lmtp_gfs_ns(struct ns *);
  +static void lmtp_gfs_lhlo(lmtp2nntp_t *);
  +static void lmtp_gfs_rset(lmtp2nntp_t *);
  +static void lmtp_gfs_quit(lmtp2nntp_t *);
   
   enum {
       GROUPMODE_ARG,
  @@ -171,7 +172,6 @@
        */
       fprintf(stderr, 
               "USAGE: %s "
  -            "lmtp2nntp "
               "[-b bindaddr[:port]] "
               "[-d deliverymode] "
               "[-g groupmode] "
  @@ -288,9 +288,10 @@
   
   int main(int argc, char **argv)
   {
  -    lmtp_t       *lmtp;
  +    int           rc;
  +    lmtp_t       *lmtp = NULL;
       lmtp_io_t     lmtp_io;
  -    lmtp2nntp_t  *ctx;
  +    lmtp2nntp_t  *ctx = NULL;
       int           i;             /* general purpose scratch int, index ... */
       char         *cp;            /* general purpose character pointer */
       char         *azHosts;
  @@ -305,16 +306,16 @@
       /* library version check (run-time) */
       if (l2_version.v_hex < L2_VERSION_HEX_REQ) {
           fprintf(stderr, "require OSSP L2 >= %s, found %s\n", L2_VERSION_STR_REQ, L2_VERSION_STR);
  -        exit(ERR_EXECUTION);
  +        CU(ERR_EXECUTION);
       }
       if (str_version.v_hex < STR_VERSION_HEX_REQ) {
           fprintf(stderr, "require OSSP Str >= %s, found %s\n", STR_VERSION_STR_REQ, STR_VERSION_STR);
  -        exit(ERR_EXECUTION);
  +        CU(ERR_EXECUTION);
       }
   
       /* create application context */
       if ((ctx = (lmtp2nntp_t *)malloc(sizeof(lmtp2nntp_t))) == NULL)
  -        exit(ERR_EXECUTION);
  +        CU(ERR_EXECUTION);
       ctx->progname = strdup(argv[0]);
       ctx->option_logfile = NULL;
       ctx->option_groupmode = GROUPMODE_ARG;
  @@ -344,24 +345,9 @@
       ctx->msg = NULL;
       if (uname(&ctx->uname) == -1) {
           fprintf(stderr, "%s:Error: uname failed \"%s\"\n", ctx->progname, strerror(errno));
  -        exit(ERR_EXECUTION);
  +        CU(ERR_EXECUTION);
       }
   
  -#if 0
  -    {
  -        char buf[1000];
  -        int bufused = 0;
  -        int tracefile;
  -
  -        for (i=0; i<argc; i++)
  -            bufused+=sprintf(buf+bufused, "[%d]=\"%s\"\n", i, argv[i]);
  -        if ((tracefile = open("/tmp/t", O_CREAT|O_WRONLY|O_APPEND, 0664)) != -1) {
  -            write(tracefile, buf, bufused);
  -            close(tracefile);
  -        }
  -    }
  -#endif
  -
       /*POD B<lmtp2nntp> */
   
       /*  use
  @@ -388,7 +374,7 @@
                               ctx->cpBindh, 
                               ctx->cpBindp, 
                               strerror(errno));
  -                    exit(ERR_EXECUTION);
  +                    CU(ERR_EXECUTION);
                   }
                   break;
               case 'd': /*POD [B<-d> I<deliverymode>] */
  @@ -399,12 +385,12 @@
                   else {
                       if (strlen(optarg) != 9) {
                           fprintf(stderr, "%s:Error: Invalid format or length \"%s\" to option -d\n", ctx->progname, optarg);
  -                        exit(ERR_EXECUTION);
  +                        CU(ERR_EXECUTION);
                       }
   
                       if (optarg[3] != '/') {
                           fprintf(stderr, "%s:Error: Invalid format or missing slash \"%s\" to option -d\n", ctx->progname, optarg);
  -                        exit(ERR_EXECUTION);
  +                        CU(ERR_EXECUTION);
                       }
   
                       optarg[3] = NUL;
  @@ -416,7 +402,7 @@
                           || !isdigit((int)ctx->option_deliverymodefakestatus[1])
                           || !isdigit((int)ctx->option_deliverymodefakestatus[2])) {
                               fprintf(stderr, "%s:Error: Invalid status in format \"%s\" to option -d\n", ctx->progname, optarg);
  -                            exit(ERR_EXECUTION);
  +                            CU(ERR_EXECUTION);
                           }
   
                       if (   (strlen(ctx->option_deliverymodefakedsn) != 5)
  @@ -427,7 +413,7 @@
                           || !isdigit((int)ctx->option_deliverymodefakedsn[4])
                           || (ctx->option_deliverymodefakedsn[0] != ctx->option_deliverymodefakestatus[0])) {
                               fprintf(stderr, "%s:Error: Invalid dsn in format \"%s\" to option -d\n", ctx->progname, optarg);
  -                            exit(ERR_EXECUTION);
  +                            CU(ERR_EXECUTION);
                           }
                       }
                   break;
  @@ -440,17 +426,17 @@
                       ctx->option_groupmode = GROUPMODE_HEADER;
                   else {
                       fprintf(stderr, "%s:Error: Invalid mode \"%s\" to option -g\n", ctx->progname, optarg);
  -                    exit(ERR_EXECUTION);
  +                    CU(ERR_EXECUTION);
                   }
                   break;
               case 'h': /*POD [B<-h> I<host>[I<:port>][,I<host>[I<:port>], ...]] */
                   if (argz_create_sep(optarg, ',', &azHosts, &asHosts) != 0)
  -                    exit(ERR_EXECUTION);
  +                    CU(ERR_EXECUTION);
                   cp = NULL;
                   while ((cp = argz_next(azHosts, asHosts, cp)) != NULL) {
                       if (ctx->nsc >= MAXNEWSSERVICES) {
                           fprintf(stderr, "%s:Error: Too many services (%d) using option -h\n", ctx->progname, ctx->nsc);
  -                        exit(ERR_EXECUTION);
  +                        CU(ERR_EXECUTION);
                       }
   
                       /* parse host[:port] string into host and port */
  @@ -472,7 +458,7 @@
                                   ctx->ns[ctx->nsc].h, 
                                   ctx->ns[ctx->nsc].p, 
                                   strerror(errno));
  -                        exit(ERR_EXECUTION);
  +                        CU(ERR_EXECUTION);
                       }
                       ctx->ns[ctx->nsc].sa = sa;
                       if ((ctx->ns[ctx->nsc].s =
  @@ -482,7 +468,7 @@
                                   ctx->ns[ctx->nsc].h, 
                                   ctx->ns[ctx->nsc].p, 
                                   strerror(errno));
  -                        exit(ERR_EXECUTION);
  +                        CU(ERR_EXECUTION);
                       }
                       ctx->ns[ctx->nsc].nntp = NULL;
                       ctx->nsc++;
  @@ -494,7 +480,7 @@
                       *cp++ = NUL;
                       if (*cp == NUL) {
                           fprintf(stderr, "%s:Error: empty logfile to option -l\n", ctx->progname);
  -                        exit(ERR_EXECUTION);
  +                        CU(ERR_EXECUTION);
                       }
                       else
                           ctx->option_logfile = strdup(cp);
  @@ -504,7 +490,7 @@
   
                   if (l2_util_s2l(optarg, strlen(optarg), ',', &ctx->option_levelmask) != L2_OK) {
                       fprintf(stderr, "%s:Error: invalid level \"%s\" to option -l\n", ctx->progname, optarg);
  -                    exit(ERR_EXECUTION);
  +                    CU(ERR_EXECUTION);
                   }
                   ctx->option_levelmask = L2_LEVEL_UPTO(ctx->option_levelmask);
                   break;
  @@ -521,13 +507,13 @@
                   }
                   if (str_parse("<>", ctx->option_mailfrom) == -1) {
                       fprintf(stderr, "%s:Error: illegal regex \"%s\" to option -m.\n", ctx->progname, ctx->option_mailfrom);
  -                    exit(ERR_EXECUTION);
  +                    CU(ERR_EXECUTION);
                   }
                   break;
               case 'n': /*POD [B<-n> I<nodename>] */
                   if (strlen(optarg) > sizeof(ctx->uname.nodename)-1) {
                           fprintf(stderr, "%s:Error: nodename \"%s\" to long to option -n.\n", ctx->progname, optarg);
  -                        exit(ERR_EXECUTION);
  +                        CU(ERR_EXECUTION);
                   }
                   strcpy(ctx->uname.nodename, optarg);
                   break;
  @@ -535,24 +521,24 @@
                       ctx->option_maxmessagesize = atoi(optarg);
                       if(ctx->option_maxmessagesize < 64) {
                           fprintf(stderr, "%s:Error: maximum message size is unacceptable small.\n", ctx->progname);
  -                        exit(ERR_EXECUTION);
  +                        CU(ERR_EXECUTION);
                       }
                   break;
               case 'v': /*POD [B<-v>] (version)*/
                   fprintf(stdout, "%s\n", lmtp2nntp_version.v_gnu);
  -                exit(0);
  +                CU(0);
                   break;
               case 'w': /*POD [B<-w> I<waittime>] */
                       ctx->option_waittime = atoi(optarg);
                       if(ctx->option_waittime < 1) {
                           fprintf(stderr, "%s:Error: waittime %d to option -w must be greater 1 second.\n", ctx->progname, ctx->option_waittime);
  -                        exit(ERR_EXECUTION);
  +                        CU(ERR_EXECUTION);
                       }
                   break;
               case '?':
               default:
                   usage(ctx->progname);
  -                exit(ERR_EXECUTION);
  +                CU(ERR_EXECUTION);
           }
       }
       /*POD I<newsgroup> [I<newsgroup> ...] */
  @@ -562,81 +548,81 @@
   
       if ((ctx->l2 = l2_stream_create()) == NULL) {
           fprintf(stderr, "%s:Error: logging failed to create stream\n", ctx->progname);
  -        exit(ERR_EXECUTION);
  +        CU(ERR_EXECUTION);
       }
       if (l2_stream_levels(ctx->l2, L2_LEVEL_UPTO(L2_LEVEL_DEBUG), L2_LEVEL_NONE) != L2_OK) {
           fprintf(stderr, "%s:Error: logging failed to set global logging level\n", ctx->progname);
  -        exit(ERR_EXECUTION);
  +        CU(ERR_EXECUTION);
       }
   
       if (l2_stream_formatter(ctx->l2, 'P', formatter_prefix, (l2_context_t *)&ctx) != L2_OK) {
           fprintf(stderr, "%s:Error: logging failed to register formatter\n", ctx->progname);
  -        exit(ERR_EXECUTION);
  +        CU(ERR_EXECUTION);
       }
       if (l2_stream_formatter(ctx->l2, 'D', l2_util_fmt_dump, NULL) != L2_OK) {
           fprintf(stderr, "%s:Error: logging failed to register dump formatter\n", ctx->progname);
  -        exit(ERR_EXECUTION);
  +        CU(ERR_EXECUTION);
       }
       if (l2_stream_formatter(ctx->l2, 'S', l2_util_fmt_string, NULL) != L2_OK) {
           fprintf(stderr, "%s:Error: logging failed to register string formatter\n", ctx->progname);
  -        exit(ERR_EXECUTION);
  +        CU(ERR_EXECUTION);
       }
       if (l2_stream_formatter(ctx->l2, 'm', formatter_errno, NULL) != L2_OK) {
           fprintf(stderr, "%s:Error: logging failed to register errno formatter\n", ctx->progname);
  -        exit(ERR_EXECUTION);
  +        CU(ERR_EXECUTION);
       }
   
       if((ctx->option_levelmask != L2_LEVEL_NONE) && (ctx->option_logfile != NULL)) {
           if ((chPrefix  = l2_channel_create(&l2_handler_prefix)) == NULL) {
               fprintf(stderr, "%s:Error: logging failed to create prefix channel\n", ctx->progname);
  -            exit(ERR_EXECUTION);
  +            CU(ERR_EXECUTION);
           }
           if (l2_channel_configure(chPrefix, "prefix,timezone", "%b %d %H:%M:%S <%L> lmtp2nntp[%P]: ", "local") != L2_OK) {
               fprintf(stderr, "%s:Error: logging failed to configure prefix channel\n", ctx->progname);
  -            exit(ERR_EXECUTION);
  +            CU(ERR_EXECUTION);
           }
   
           if ((chBuf  = l2_channel_create(&l2_handler_buffer)) == NULL) {
               fprintf(stderr, "%s:Error: logging failed to create buffer channel\n", ctx->progname);
  -            exit(ERR_EXECUTION);
  +            CU(ERR_EXECUTION);
           }
           if (l2_channel_configure(chBuf, "size", 65536) != L2_OK) {
               fprintf(stderr, "%s:Error: logging failed to configure buffer channel\n", ctx->progname);
  -            exit(ERR_EXECUTION);
  +            CU(ERR_EXECUTION);
           }
   
           if ((chFile = l2_channel_create(&l2_handler_file)) == NULL) {
               fprintf(stderr, "%s:Error: logging failed to create file channel\n", ctx->progname);
  -            exit(ERR_EXECUTION);
  +            CU(ERR_EXECUTION);
           }
           if (l2_channel_configure(chFile, "path,append,perm", ctx->option_logfile, TRUE, 0644) != L2_OK) {
               fprintf(stderr, "%s:Error: logging failed to configure file channel\n", ctx->progname);
  -            exit(ERR_EXECUTION);
  +            CU(ERR_EXECUTION);
           }
   
           if (l2_channel_stack(chFile, chBuf) != L2_OK) {
               fprintf(stderr, "%s:Error: logging failed to stack buffer channel on top of file channel\n", ctx->progname);
  -            exit(ERR_EXECUTION);
  +            CU(ERR_EXECUTION);
           }
           if (l2_channel_stack(chBuf, chPrefix) != L2_OK) {
               fprintf(stderr, "%s:Error: logging failed to stack prefix channel on top of buffer channel\n", ctx->progname);
  -            exit(ERR_EXECUTION);
  +            CU(ERR_EXECUTION);
           }
   
           if (l2_channel_open(chPrefix) != L2_OK) {
               fprintf(stderr, "%s:Error: logging failed to open buffer channel\n", ctx->progname);
  -            exit(ERR_EXECUTION);
  +            CU(ERR_EXECUTION);
           }
   
           if (l2_stream_channel(ctx->l2, chPrefix, ctx->option_levelmask, L2_LEVEL_NONE) != L2_OK) {
               fprintf(stderr, "%s:Error: logging failed to attach channel into stream\n", ctx->progname);
  -            exit(ERR_EXECUTION);
  +            CU(ERR_EXECUTION);
           }
       }
   
       if (log1(ctx, NOTICE, "startup, version %s", lmtp2nntp_version.v_gnu) != L2_OK) {
           fprintf(stderr, "%s:Error: logging failed to log startup message to stream\n", ctx->progname);
  -        exit(ERR_EXECUTION);
  +        CU(ERR_EXECUTION);
       }
   
       catchsignal(0, ctx);
  @@ -661,7 +647,7 @@
                               (ctx->option_logfile && (ctx->option_levelmask >= L2_LEVEL_TRACE)) ?
                                &lmtp_io : NULL )) == NULL) {
           fprintf(stderr, "%s:Error: Unable to initialize LMTP library\n", ctx->progname);
  -        exit(ERR_EXECUTION);
  +        CU(ERR_EXECUTION);
       }
       /*  RFC0821, 4.5.1. MINIMUM IMPLEMENTATION
        *  In order to make SMTP workable, the following minimum implementation
  @@ -688,8 +674,10 @@
       
       /* loop for LMTP protocol */
       lmtp_loop(lmtp);
  +    CU(0);
   
       /* graceful shutdown */
  +    CUS:
       lmtp_gfs_quit(ctx);
       lmtp_gfs_lhlo(ctx);
       log0(ctx, NOTICE, "graceful shutdown shortly before exit - no more logging");
  @@ -705,7 +693,7 @@
           free(ctx);
       str_parse(NULL, NULL);
   
  -    return 0;
  +    return rc;
   }
   
   /* taken from "UNIX Network Programming", Volume 1, second edition W. Richard
  @@ -921,6 +909,7 @@
           else {
               log2(ctx, WARNING, "NNTP session establishment to %s:%s failed", ctx->ns[i].h, ctx->ns[i].p);
               log1(ctx, DEBUG, "removing ns[%d] from list", i);
  +            lmtp_gfs_ns(&ctx->ns[i]);
               if (i < --ctx->nsc) {
                   memcpy(&ctx->ns[i], &ctx->ns[i+1], (ctx->nsc - i ) * sizeof(struct ns));
               }
  @@ -954,7 +943,7 @@
                  "ENHANCEDSTATUSCODES\n"               /* RFC2034 */
                  "DSN\n"                               /* RFC1894 */
                  "PIPELINING\n"                        /* RFC1854 */
  -               "8BITMIME\n",                         /* RFC1652 */
  +               "8BITMIME",                           /* RFC1652 */
                  ctx->uname.nodename,
                  ctx->session.lhlo_domain);
       res.statuscode = "250";
  @@ -967,24 +956,39 @@
       return rc;
   }
   
  +static void lmtp_gfs_ns(struct ns *ns)
  +{
  +    if (ns->nntp != NULL) {
  +        nntp_destroy(ns->nntp);
  +        ns->nntp = NULL;
  +    }
  +    if (ns->s != -1) {
  +        close(ns->s);
  +        ns->s = -1;
  +    }
  +    if (ns->sa != NULL) {
  +        sa_destroy(ns->sa);
  +        ns->sa = NULL;
  +    }
  +    if (ns->p != NULL) {
  +        free(ns->p);
  +        ns->p = NULL;
  +    }
  +    if (ns->h != NULL) {
  +        free(ns->h);
  +        ns->h = NULL;
  +    }
  +}
  +
   static void lmtp_gfs_lhlo(lmtp2nntp_t *ctx)
   {
       int i;
   
       log0(ctx, TRACE, "LMTP service LHLO command - graceful shutdown");
   
  -    for (i = 0; i < ctx->nsc; i++) {
  -        if (ctx->ns[i].nntp != NULL)
  -            nntp_destroy(ctx->ns[i].nntp);
  -        if (ctx->ns[i].s != -1)
  -            close(ctx->ns[i].s);
  -        if (ctx->ns[i].sa != NULL)
  -            sa_destroy(ctx->ns[i].sa);
  -        if (ctx->ns[i].p != NULL)
  -            free(ctx->ns[i].p);
  -        if (ctx->ns[i].h != NULL)
  -            free(ctx->ns[i].h);
  -    }
  +    for (i = 0; i < ctx->nsc; i++)
  +            lmtp_gfs_ns(&ctx->ns[i]);
  +
       if (ctx->option_mailfrom != NULL)
           free(ctx->option_mailfrom);
       if (ctx->cpBindh != NULL)

From ossp-cvs-owner@ossp.org  Thu Sep 13 09:37:42 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8D7bgR55924; Thu, 13 Sep 2001 09:37:42 +0200 (CEST)
Date: Thu, 13 Sep 2001 09:37:42 +0200 (CEST)
Message-Id: <200109130737.f8D7bgR55924@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp Makefile.in ossp-pkg/lmtp2nntp/test .cv...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   13-Sep-2001 09:37:41
  Branch: HEAD                             Handle: 197001010100001000363061

  Modified files:
    ossp-pkg/lmtp2nntp      Makefile.in
    ossp-pkg/lmtp2nntp/test .cvsignore run.sh
  Removed files:
    ossp-pkg/lmtp2nntp/test testmessage.foldlinesvialmtp
                            testmessage.viasendmail triplecheck.sh

  Log:
    revamped test suite for public release

  Summary:
    Revision    Changes     Path
    1.18        +4  -1      ossp-pkg/lmtp2nntp/Makefile.in
    1.4         +1  -1      ossp-pkg/lmtp2nntp/test/.cvsignore
    1.17        +135 -113   ossp-pkg/lmtp2nntp/test/run.sh
    NONE        +0  -24     ossp-pkg/lmtp2nntp/test/testmessage.foldlinesvialmtp
    NONE        +0  -10     ossp-pkg/lmtp2nntp/test/testmessage.viasendmail
    NONE        +0  -2      ossp-pkg/lmtp2nntp/test/triplecheck.sh
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	2001/09/12 08:16:36	1.17
  +++ ossp-pkg/lmtp2nntp/Makefile.in	2001/09/13 07:37:40	1.18
  @@ -89,7 +89,10 @@
   clean:
   	@$(MAKE) $(MFLAGS) _SUBDIRS_clean
   	-rm -f *.core
  -	-rm -f dmalloc.log test/dmalloc.log
  +	-rm -f dmalloc.log
  +	-rm -f test/*.core
  +	-rm -f test/dmalloc.log test/sum.dmalloc.log
  +	-rm -f test/stdin test/stdout test/stderr test/stdlog
   	-rm -f $(PROG)
   	-rm -f $(OBJS)
   
  Index: ossp-pkg/lmtp2nntp/test/.cvsignore
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 .cvsignore
  --- ossp-pkg/lmtp2nntp/test/.cvsignore	2001/09/12 14:23:06	1.3
  +++ ossp-pkg/lmtp2nntp/test/.cvsignore	2001/09/13 07:37:41	1.4
  @@ -1,5 +1,5 @@
   dmalloc.log
  -logfile
  +sum.dmalloc.log
   stdin
   stdout
   stderr
  Index: ossp-pkg/lmtp2nntp/test/run.sh
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 run.sh
  --- ossp-pkg/lmtp2nntp/test/run.sh	2001/09/12 14:23:06	1.16
  +++ ossp-pkg/lmtp2nntp/test/run.sh	2001/09/13 07:37:41	1.17
  @@ -1,53 +1,12 @@
   #/bin/sh
   
  -# -h news-muc1.de.cw.net
  -# -h news-ffm2.de.cw.net
  -# -h news-dus2.de.cw.net
  -# -h news.ecrc.de
  -# -h dev16
  -
  -post1000 ()
  -{
  -    for h in 0 1 2 3 4 5 6 7 8 9
  -    do
  -       for z in 0 1 2 3 4 5 6 7 8 9
  -        do
  -            for e in 0 1 2 3 4 5 6 7 8 9
  -            do
  -                echo -n $h$z$e
  -                newmsg sendmail
  -                cat $STDIN \
  -                 | sendmail -i posting+$h$z$e@dev12.dev.de.cw.net
  -            done
  -        done
  -    done
  -}
  -
  -lmtp()
  -{
  -    newmsg lmtp
  -    cat $STDIN \
  -      | ../lmtp2nntp -l $1:$FILE -w 1 -d $2 -g $2 -b dev12 -h dev16,141.1.23.116:nntp -h dev16.de.cw.net:119 $3 >/dev/null; echo $?
  -     #| ../lmtp2nntp -l $1:$FILE -w 1 -d 255/2.5.5 -g $3 -b 127.0.0.1 $4 >/dev/null; echo $?
  -     #| ../lmtp2nntp -l $1:$FILE -w 1 -d $2 -g $3 -b 127.0.0.1 -h 127.0.0.2 $4 >/dev/null; echo $?
  -}
  -
  -sendmaildup()
  -{
  -    newmsg sendmail
  -    cat $STDIN \
  -     | sendmail -i posting+cw.de.sd.apps.dev.test@dev12.dev.de.cw.net
  -    cat $STDIN \
  -     | sendmail -i posting+cw.de.sd.apps.dev.test@dev12.dev.de.cw.net
  -}
  -
   newmsg()
   {
  -    if [ -r testmessage.via$1 ]
  +    if [ -r testmessage.via${1} ]
       then
  -        awk <testmessage.via$1 \
  +        awk <testmessage.via${1} \
            -v pid=$$ \
  -         -v id=I${h}${z}${e}D \
  +         -v id=I${H}${Z}${E}D \
            -v date=`date +%Y%m%d%H%M%S` \
            '
               BEGIN          { gotit = 0; IGNORECASE = 1 }
  @@ -55,53 +14,42 @@
               /^Message-ID:/ { gotit = 1; print "Message-Id: <" date "-" id "@dev12.dev.de.cw.net>" }
               /^Subject:/    { gotit = 1; print "Subject: [" pid "] " $2 }
                              { if (gotit == 0) { print }; gotit = 0 }
  -         ' | tee 2>&1 >/dev/null $STDIN
  +         ' | tee 2>&1 >/dev/null ${STDIN}
       else
  -        echo "ERROR: file testmessage.via$1 not readable!"
  +        echo "ERROR: file testmessage.via${1} not readable!"
           exit 1
       fi
   }
   
   prolog ()
   {
  -    h="H"
  -    z="Z"
  -    e="E"
  +    H="0"; Z="0"; E="0"; #HZE used for mass-tests with uniq IDs
   
  -    for i in $FILE $STDIN $STDOUT $STDERR dmalloc.log
  +    for i in ${FILE} ${STDIN} ${STDOUT} ${STDERR} dmalloc.log
       do
  -        if [ -e $i ]; then
  -            rm -f $i
  +        if [ -e ${i} ]; then
  +            rm -f ${i}
           fi
  -        touch $i
  -        chmod 666 $i
  +        touch ${i}
  +        chmod 666 ${i}
       done
   }
   
   epilog ()
   {
  -    if [ -r $FILE ]
  -    then
  -        read DUMMY
  -        less -S $FILE
  -    fi
  -
  -    if [ -r dmalloc.log ]
  -    then
  +    for i in ${FILE} ${STDIN} ${STDOUT} ${STDERR} dmalloc.log
  +    do
  +    if [ -r ${i} ]; then
  +        echo -n "press RETURN to see the contents of ${i}"
           read DUMMY
  -        less -S dmalloc.log
  +        less -S ${i}
       fi
  +    done
   }
   
  -#   lmtp feed arg
  -#   lmtp post envelope '*.test.* cw.*.dev.*'
  -#   lmtp post header '*.test.* cw.*.dev.* *foo*'
  -#   lmtp feed envelope
  -#   lmtp post envelope
  -#   sendmaildup
  -#   post1000
  +#main ()
   
  -   LOG="trace"
  +   LOG="notice"
     FILE="stdlog"
    STDIN="stdin"
   STDOUT="stdout"
  @@ -114,67 +62,141 @@
   
   # make check with automatic succeed/ fail message.
   # more samples and testing below.
  -newmsg lmtp
   
  -# check -v option prints out version, typical output: lmtp2nntp 0.9.4
  -# (30-Aug-2001)
  +echo -n "check: -v verbose "
  +# expected sample output: lmtp2nntp 0.9.4 (30-Aug-2001)
   prolog
  -../lmtp2nntp -v >$STDOUT 2>$STDERR
  -RC=`cat $STDOUT | egrep 'lmtp2nntp[ ]+[0-9]+\.[0-9]\.[0-9][ ]+\([0-9]+-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-[0-9]{4}\)' | wc -l`
  -if [ $RC -ne 1 -o -s $STDERR ]; then
  -    echo "CHECK ERROR: version test failed $RC"
  +newmsg lmtp
  +../lmtp2nntp -v >${STDOUT} 2>${STDERR}
  +RC=`cat ${STDOUT} | egrep 'lmtp2nntp[ ]+[0-9]+\.[0-9]\.[0-9][ ]+\([0-9]+-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-[0-9]{4}\)' | wc -l`
  +if [ ${RC} -ne 1 -o -s ${STDERR} ]; then
  +    echo "ERROR (got ${RC})"
       exit 1;
   fi
  -echo "CHECK version test succeeded"
  +echo "succeeded"
  +egrep <dmalloc.log -C 'not freed' >>sum.dmalloc.log
   
  -# check -? option prints out usage, typical output: USAGE: ../lmtp2nntp
  +echo -n "check: -? usage "
  +# expected typical output: USAGE: ../lmtp2nntp
   # lmtp2nntp [-b bindaddr[:port]] [-d deliverymode] [-g groupmode] [-h
   # host[:port][,host[:port], ...]] [-m mailfrom] [-n nodename] [-s size] [-l
   # level[:logfile]] [-v] [-w waittime] newsgroup [newsgroup ...]
   prolog
  -../lmtp2nntp -? >$STDOUT 2>$STDERR
  -RC=`cat $STDERR | egrep -- '-b.*-d.*-g.*-h.*-m.*-n.*-s.*-l.*-v.*-w.*newsgroup' | wc -l`
  -if [ $RC -ne 1 -o -s $STDOUT ]; then
  -    echo "CHECK ERROR: usage test failed"
  +newmsg lmtp
  +../lmtp2nntp -? >${STDOUT} 2>${STDERR}
  +RC=`cat ${STDERR} | egrep -- '-b.*-d.*-g.*-h.*-m.*-n.*-s.*-l.*-v.*-w.*newsgroup' | wc -l`
  +if [ ${RC} -ne 1 -o -s ${STDOUT} ]; then
  +    echo "ERROR (got ${RC})"
       exit 1;
   fi
  -echo "CHECK usage test succeeded"
  +echo "succeeded"
  +egrep <dmalloc.log -C 'not freed' >>sum.dmalloc.log
   
  -# check dummy posting
  -#set -v -x
  +echo -n "check: -- valid fake posting "
   prolog
   newmsg lmtp
  -../lmtp2nntp <$STDIN -b $LOCAL -d 250/2.0.0 -g arg -h $HOST -l $LOG:$FILE -m "$MFILT" -n $NODE -s 1000 -w 1 $GROUP >$STDOUT 2>$STDERR ; RC=$
  -set +v +x
  +../lmtp2nntp <${STDIN} -b ${LOCAL} -d 250/2.0.0 -g arg -h ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 1000 -w 1 ${GROUP} >${STDOUT} 2>${STDERR} ; RC=$
   RC="";
  -if [ 1 -eq `cat $STDOUT | egrep '^220[ ]+LMTP Service ready'    | wc -l` ]; then RC="${RC}LHLO "; fi
  -if [ 1 -eq `cat $STDOUT | egrep '^250 2.1.0 Sender ok'          | wc -l` ]; then RC="${RC}MAIL "; fi
  -if [ 3 -eq `cat $STDOUT | egrep '^250 2.1.5 Recipient accepted' | wc -l` ]; then RC="${RC}RCPT "; fi
  -if [ 1 -eq `cat $STDOUT | egrep '^354 Enter mail'               | wc -l` ]; then RC="${RC}DATA "; fi
  -if [ 3 -eq `cat $STDOUT | egrep '^250-2.0.0 NNTP noop fake'     | wc -l` ]; then RC="${RC}post "; fi
  -if [ 1 -eq `cat $STDOUT | egrep '^221 2.0.0.+closing.+channel'  | wc -l` ]; then RC="${RC}QUIT "; fi
  -if [ "$RC" != "LHLO MAIL RCPT DATA post QUIT " ]; then
  -    echo "CHECK ERROR: fake post test failed"
  +if [ 1 -eq `egrep <${STDOUT} '^220[ -]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
  +if [ 1 -eq `egrep <${STDOUT} '^250[ -].*pleased to meet you'    | wc -l` ]; then RC="${RC}LHLO "; fi
  +if [ 1 -eq `egrep <${STDOUT} '^250[ -]2.1.0 Sender ok'          | wc -l` ]; then RC="${RC}MAIL "; fi
  +if [ 3 -eq `egrep <${STDOUT} '^250[ -]2.1.5 Recipient accepted' | wc -l` ]; then RC="${RC}RCPT "; fi
  +if [ 1 -eq `egrep <${STDOUT} '^354[ -]Enter mail'               | wc -l` ]; then RC="${RC}DATA "; fi
  +if [ 3 -eq `egrep <${STDOUT} '^250[ -]2.0.0 NNTP noop fake'     | wc -l` ]; then RC="${RC}post "; fi
  +if [ 1 -eq `egrep <${STDOUT} '^221[ -]2.0.0.+closing.+channel'  | wc -l` ]; then RC="${RC}QUIT "; fi
  +if [ "${RC}" != "init LHLO MAIL RCPT DATA post QUIT " ]; then
  +    echo "ERROR (got ${RC})"
       exit 1;
   fi
  -echo "CHECK fake post test succeeded"
  +echo "succeeded"
  +egrep <dmalloc.log -C 'not freed' >>sum.dmalloc.log
   
  -echo "CHECK COMPLETE AND PASSED"
  -exit 0
  +echo -n "check: -m fake posting invalid sender "
  +prolog
  +newmsg lmtp
  +( MFILT=".*@is.invalid" ; ../lmtp2nntp <${STDIN} -b ${LOCAL} -d 250/2.0.0 -g arg -h ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 1000 -w 1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
  +RC="";
  +if [ 1 -eq `egrep <${STDOUT} '^220[ -]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
  +if [ 1 -eq `egrep <${STDOUT} '^250[ -].+pleased to meet you'    | wc -l` ]; then RC="${RC}LHLO "; fi
  +if [ 1 -eq `egrep <${STDOUT} '^550[ -]5.7.1.+not authorized'    | wc -l` ]; then RC="${RC}MAIL "; fi
  +if [ 3 -eq `egrep <${STDOUT} '^503[ -]5.5.0.+MAIL first'        | wc -l` ]; then RC="${RC}RCPT "; fi
  +if [ 1 -eq `egrep <${STDOUT} '^503[ -]5.5.0.+RCPT first'        | wc -l` ]; then RC="${RC}DATA "; fi
  +if [ 0 -lt `egrep <${STDOUT} '^500[ -]5.5.1.+unrecognized'      | wc -l` ]; then RC="${RC}post "; fi
  +if [ 1 -eq `egrep <${STDOUT} '^221[ -]2.0.0.+closing.+channel'  | wc -l` ]; then RC="${RC}QUIT "; fi
  +if [ "${RC}" != "init LHLO MAIL RCPT DATA post QUIT " ]; then
  +    echo "ERROR (got ${RC})"
  +    exit 1;
  +fi
  +echo "succeeded"
  +egrep <dmalloc.log -C 'not freed' >>sum.dmalloc.log
   
  -#
  -#   BELOW ARE INTERAL TESTS. CONSIDER THEM AS EXAMPLE.
  -#
  -  HOST="dev16,141.1.23.116:nntp -h dev16.de.cw.net:119"
  - GROUP="cw.de.sd.apps.dev.test"
  -newmsg lmtp
  -../lmtp2nntp <$STDIN -b $LOCAL -d post      -g arg -h $HOST -l $LOG:$FILE -m "$MFILT" -n $NODE -s 1000 -w 1 $GROUP >$STDOUT 2>$STDERR ; RC=$
  -#./lmtp2nntp <$STDIN -b $LOCAL -d 250/2.0.0 -g arg -h $HOST -l $LOG:$FILE -m "$MFILT" -n $NODE -s 1000 -w 1 $GROUP >$STDOUT 2>$STDERR ; RC=$
  -/dev/null; echo $?
  +echo -n "check: -s fake posting invalid size "
  +prolog
  +newmsg lmtp
  +../lmtp2nntp <${STDIN} -b ${LOCAL} -d 250/2.0.0 -g arg -h ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 100  -w 1 ${GROUP} >${STDOUT} 2>${STDERR} ; RC=$?
  +RC="";
  +if [ 1 -eq `egrep <${STDOUT} '^220[ -]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
  +if [ 1 -eq `egrep <${STDOUT} '^250[ -].*pleased to meet you'    | wc -l` ]; then RC="${RC}LHLO "; fi
  +if [ 1 -eq `egrep <${STDOUT} '^250[ -]2.1.0 Sender ok'          | wc -l` ]; then RC="${RC}MAIL "; fi
  +if [ 3 -eq `egrep <${STDOUT} '^250[ -]2.1.5 Recipient accepted' | wc -l` ]; then RC="${RC}RCPT "; fi
  +if [ 1 -eq `egrep <${STDOUT} '^354[ -]Enter mail'               | wc -l` ]; then RC="${RC}DATA "; fi
  +if [ 3 -eq `egrep <${STDOUT} '^552[ -]5.2.3.+exceeds.+limit'    | wc -l` ]; then RC="${RC}post "; fi
  +if [ 1 -eq `egrep <${STDOUT} '^221[ -]2.0.0.+closing.+channel'  | wc -l` ]; then RC="${RC}QUIT "; fi
  +if [ "${RC}" != "init LHLO MAIL RCPT DATA post QUIT " ]; then
  +    echo "ERROR (got ${RC})"
  +    exit 1;
  +fi
  +echo "succeeded"
  +egrep <dmalloc.log -C 'not freed' >>sum.dmalloc.log
   
  -#newmsg sendmail
  -# sendmail -i <$STDIN -V nase123baer posting+$GROUP@$LOCAL
  +echo -n "check: -b with invalid address "
  +prolog
  +newmsg lmtp
  +( LOCAL="127.0.0.255" ; ../lmtp2nntp <${STDIN} -b ${LOCAL} -d 250/2.0.0 -g arg -h ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 1000 -w 1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
  +RC="";
  +if [ 1 -eq `egrep <${STDOUT} '^220[ -]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
  +if [ 1 -eq `egrep <${FILE}   'error.+binding.+49'               | wc -l` ]; then RC="${RC}bind "; fi
  +if [ "${RC}" != "init bind " ]; then
  +    echo "ERROR (got ${RC})"
  +    exit 1;
  +fi
  +echo "succeeded"
  +egrep <dmalloc.log -C 'not freed' >>sum.dmalloc.log
   
  -after
  -exit 0
  +echo -n "check: -g envelope with invalid group "
  +prolog
  +newmsg lmtp
  +( GROUP="foo.*" ; ../lmtp2nntp <${STDIN} -b ${LOCAL} -d 250/2.0.0 -g envelope -h ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 1000 -w 1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
  +RC="";
  +if [ 1 -eq `egrep <${STDOUT} '^220[ -]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
  +if [ 1 -eq `egrep <${STDOUT} '^250[ -].*pleased to meet you'    | wc -l` ]; then RC="${RC}LHLO "; fi
  +if [ 1 -eq `egrep <${STDOUT} '^250[ -]2.1.0 Sender ok'          | wc -l` ]; then RC="${RC}MAIL "; fi
  +if [ 1 -eq `egrep <${STDOUT} '^550[ -]5.7.2 unmatched Group'    | wc -l` ]; then RC="${RC}RCPT "; fi
  +if [ 2 -eq `egrep <${STDOUT} '^250[ -]2.1.5 Group accepted'     | wc -l` ]; then RC="${RC}RCPT "; fi
  +if [ 1 -eq `egrep <${STDOUT} '^354[ -]Enter mail'               | wc -l` ]; then RC="${RC}DATA "; fi
  +if [ 2 -eq `egrep <${STDOUT} '^250[ -]2.0.0 NNTP noop fake'     | wc -l` ]; then RC="${RC}post "; fi
  +if [ 1 -eq `egrep <${STDOUT} '^221[ -]2.0.0.+closing.+channel'  | wc -l` ]; then RC="${RC}QUIT "; fi
  +if [ "${RC}" != "init LHLO MAIL RCPT RCPT DATA post QUIT " ]; then
  +    echo "ERROR (got ${RC})"
  +    exit 1;
  +fi
  +echo "succeeded"
  +egrep <dmalloc.log -C 'not freed' >>sum.dmalloc.log
   
  +echo -n "check: -h fake posting to invalid host "
  +prolog
  +newmsg lmtp
  +( HOST="127.0.0.255" ; ../lmtp2nntp <${STDIN} -b ${LOCAL} -d 250/2.0.0 -g arg -h ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 1000 -w 1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
  +RC="";
  +if [ 1 -eq `egrep <${STDOUT} '^220[ -]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
  +if [ 1 -eq `egrep <${FILE}   'warning.+connect.+failed'         | wc -l` ]; then RC="${RC}conn "; fi
  +if [ "${RC}" != "init conn " ]; then
  +    echo "ERROR (got ${RC})"
  +    exit 1;
  +fi
  +echo "succeeded"
  +egrep <dmalloc.log -C 'not freed' >>sum.dmalloc.log
  +
  +echo "CHECK COMPLETE AND PASSED"
  +#epilog
  +exit 0
      

From ossp-cvs-owner@ossp.org  Thu Sep 13 09:39:44 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8D7dgs56130; Thu, 13 Sep 2001 09:39:42 +0200 (CEST)
Date: Thu, 13 Sep 2001 09:39:42 +0200 (CEST)
Message-Id: <200109130739.f8D7dgs56130@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp Makefile.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   13-Sep-2001 09:39:42
  Branch: HEAD                             Handle: 2001091308394200

  Modified files:
    ossp-pkg/lmtp2nntp      Makefile.in

  Log:
    distribution now includes test suite

  Summary:
    Revision    Changes     Path
    1.19        +1  -1      ossp-pkg/lmtp2nntp/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	2001/09/13 07:37:40	1.18
  +++ ossp-pkg/lmtp2nntp/Makefile.in	2001/09/13 07:39:42	1.19
  @@ -115,7 +115,7 @@
   	@$(SHTOOL) fixperm -v .; \
   	V=`$(SHTOOL) version -lc -dshort version.c`; \
   	$(SHTOOL) tarball -o lmtp2nntp-$${V}.tar.gz -d lmtp2nntp-$${V} -u ossp -g ossp \
  -	                  -e 'CVS,\.cvsignore,\.[ao],^\.,/\.,autogen.sh,test,*.tar.gz' -c 'gzip --best' .
  +	                  -e 'CVS,\.cvsignore,\.[ao],^\.,/\.,autogen.sh,*.tar.gz' -c 'gzip --best' .
   
   check: lmtp2nntp
   	@cd test && ./run.sh

From ossp-cvs-owner@ossp.org  Thu Sep 13 09:40:21 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8D7eKj56220; Thu, 13 Sep 2001 09:40:20 +0200 (CEST)
Date: Thu, 13 Sep 2001 09:40:20 +0200 (CEST)
Message-Id: <200109130740.f8D7eKj56220@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp .cvsignore
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   13-Sep-2001 09:40:19
  Branch: HEAD                             Handle: 2001091308401900

  Modified files:
    ossp-pkg/lmtp2nntp      .cvsignore

  Log:
    ignore ChangeLog

  Summary:
    Revision    Changes     Path
    1.12        +1  -0      ossp-pkg/lmtp2nntp/.cvsignore
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/.cvsignore
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 .cvsignore
  --- ossp-pkg/lmtp2nntp/.cvsignore	2001/09/07 13:53:16	1.11
  +++ ossp-pkg/lmtp2nntp/.cvsignore	2001/09/13 07:40:19	1.12
  @@ -11,3 +11,4 @@
   lmtp2nntp-*.tar.gz
   dmalloc.log
   logfile
  +ChangeLog

From ossp-cvs-owner@ossp.org  Thu Sep 13 09:49:47 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8D7njY57401; Thu, 13 Sep 2001 09:49:45 +0200 (CEST)
Date: Thu, 13 Sep 2001 09:49:45 +0200 (CEST)
Message-Id: <200109130749.f8D7njY57401@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp version.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   13-Sep-2001 09:49:45
  Branch: HEAD                             Handle: 2001091308494500

  Modified files:
    ossp-pkg/lmtp2nntp      version.c

  Log:
    bump version for release

  Summary:
    Revision    Changes     Path
    1.7         +9  -9      ossp-pkg/lmtp2nntp/version.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/version.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 version.c
  --- ossp-pkg/lmtp2nntp/version.c	2001/09/12 15:30:24	1.6
  +++ ossp-pkg/lmtp2nntp/version.c	2001/09/13 07:49:45	1.7
  @@ -8,7 +8,7 @@
   #ifndef _VERSION_C_
   #define _VERSION_C_
   
  -#define LMTP2NNTP_VERSION 0x009205
  +#define LMTP2NNTP_VERSION 0x009206
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _VERSION_C_AS_HEADER_
   
   lmtp2nntp_version_t lmtp2nntp_version = {
  -    0x009205,
  -    "0.9.5",
  -    "0.9.5 (12-Sep-2001)",
  -    "This is lmtp2nntp, Version 0.9.5 (12-Sep-2001)",
  -    "lmtp2nntp 0.9.5 (12-Sep-2001)",
  -    "lmtp2nntp/0.9.5",
  -    "@(#)lmtp2nntp 0.9.5 (12-Sep-2001)",
  -    "$Id: version.c,v 1.6 2001/09/12 15:30:24 thl Exp $"
  +    0x009206,
  +    "0.9.6",
  +    "0.9.6 (13-Sep-2001)",
  +    "This is lmtp2nntp, Version 0.9.6 (13-Sep-2001)",
  +    "lmtp2nntp 0.9.6 (13-Sep-2001)",
  +    "lmtp2nntp/0.9.6",
  +    "@(#)lmtp2nntp 0.9.6 (13-Sep-2001)",
  +    "$Id: version.c,v 1.7 2001/09/13 07:49:45 thl Exp $"
   };
   
   #endif /* _VERSION_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Thu Sep 13 10:47:20 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8D8lIv64224; Thu, 13 Sep 2001 10:47:18 +0200 (CEST)
Date: Thu, 13 Sep 2001 10:47:18 +0200 (CEST)
Message-Id: <200109130847.f8D8lIv64224@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 Makefile.in ossp-pkg/lmtp2nntp Makefile.in oss...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   13-Sep-2001 10:47:18
  Branch: HEAD                             Handle: 2001091309471701

  Modified files:
    ossp-pkg/l2             Makefile.in
    ossp-pkg/lmtp2nntp      Makefile.in
    ossp-pkg/str            Makefile.in

  Log:
    Fix dependency generation

  Summary:
    Revision    Changes     Path
    1.22        +47 -69     ossp-pkg/l2/Makefile.in
    1.20        +17 -20     ossp-pkg/lmtp2nntp/Makefile.in
    1.37        +15 -19     ossp-pkg/str/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 Makefile.in
  --- ossp-pkg/l2/Makefile.in	2001/09/12 14:43:29	1.21
  +++ ossp-pkg/l2/Makefile.in	2001/09/13 08:47:17	1.22
  @@ -83,6 +83,28 @@
       l2_ut_sa.lo \
       l2_version.lo
   
  +#   list of source files
  +SRCS = \
  +    l2_stream.c \
  +    l2_channel.c \
  +    l2_ch_fd.c \
  +    l2_ch_file.c \
  +    l2_ch_pipe.c \
  +    l2_ch_syslog.c \
  +    l2_ch_socket.c \
  +    l2_ch_smtp.c \
  +    l2_ch_null.c \
  +    l2_ch_filter.c \
  +    l2_ch_prefix.c \
  +    l2_ch_buffer.c \
  +    l2_ut_format.c \
  +    l2_ut_param.c \
  +    l2_ut_pcre.c \
  +    l2_ut_level.c \
  +    l2_ut_fmtcb.c \
  +    l2_ut_sa.c \
  +    l2_version.c
  +
   #   file containing the official version information
   _VERSION_FILE = \
       l2_version.c
  @@ -259,79 +281,35 @@
   	@OPT="-s`$(SHTOOL) version -lc -dshort $(_VERSION_FILE)`" && $(_VERSION)
   
   #   create dependencies
  -depend:
  +depend: all
   	cp Makefile.in Makefile.in.bak \
  -	&& sed -ne '1,/^# DO NOT REMOVE/p' Makefile.in > Makefile.new \
  -	&& $(CC) -MM $(CPPFLAGS) $(CFLAGS) *.c |\
  -	   sed -e 's/^\(l2_.*\)\.o:/\1.lo:/' >> Makefile.new \
  +	&& sed -ne '1,/^#   AUTOMATICALLY GENERATED DEPENDENCY LIST/p' Makefile.in > Makefile.new \
  +	&& $(CC) -MM $(CPPFLAGS) $(CFLAGS) $(SRCS) |\
  +	   perl -e 'my $$d = ""; $$d .= $$_ while (<STDIN>); $$_ = $$d; \
  +	            s|\\\n\s*| |sg; s|\b?\S*/\S*\b?||g; s|\s{2,}| |g; \
  +	            print $$_;' >> Makefile.new \
   	&& cp Makefile.new Makefile.in
   	&& rm -f Makefile.new
   
  -##
  -##  ____ DEPENDENCY AREA ____________________________________________
  -##  (AUTOMATICALLY UPDATED - DO NOT EDIT)
  -##
  -
   $(OBJS): Makefile
   
  -l2_ch_buffer.o: l2_ch_buffer.c l2.h l2_p.h
  -l2_ch_fd.o: l2_ch_fd.c l2.h l2_p.h
  -l2_ch_file.o: l2_ch_file.c l2.h l2_p.h
  -l2_ch_filter.o: l2_ch_filter.c l2.h l2_p.h
  -l2_ch_null.o: l2_ch_null.c l2.h l2_p.h
  -l2_ch_pipe.o: l2_ch_pipe.c l2.h l2_p.h
  -l2_ch_prefix.o: l2_ch_prefix.c l2.h l2_p.h
  -l2_ch_socket.o: l2_ch_socket.c l2.h l2_p.h
  -l2_ch_syslog.o: l2_ch_syslog.c l2.h l2_p.h
  -l2_channel.o: l2_channel.c l2.h l2_p.h
  -l2_stream.o: l2_stream.c l2.h l2_p.h
  -l2_test.o: l2_test.c l2.h
  -l2_sockmon.o: l2_sockmon.c
  +#   AUTOMATICALLY GENERATED DEPENDENCY LIST - DO NOT EDIT
  +l2_stream.o: l2_stream.c l2.h l2_p.h l2_config.h l2_ut_pcre.h l2_ut_sa.h
  +l2_channel.o: l2_channel.c l2.h l2_p.h l2_config.h l2_ut_pcre.h l2_ut_sa.h
  +l2_ch_fd.o: l2_ch_fd.c l2.h
  +l2_ch_file.o: l2_ch_file.c l2.h
  +l2_ch_pipe.o: l2_ch_pipe.c l2.h
  +l2_ch_syslog.o: l2_ch_syslog.c l2.h
  +l2_ch_socket.o: l2_ch_socket.c l2.h l2_p.h l2_config.h l2_ut_pcre.h l2_ut_sa.h
  +l2_ch_smtp.o: l2_ch_smtp.c l2.h l2_p.h l2_config.h l2_ut_pcre.h l2_ut_sa.h
  +l2_ch_null.o: l2_ch_null.c l2.h
  +l2_ch_filter.o: l2_ch_filter.c l2.h
  +l2_ch_prefix.o: l2_ch_prefix.c l2.h
  +l2_ch_buffer.o: l2_ch_buffer.c l2.h
  +l2_ut_format.o: l2_ut_format.c l2.h l2_p.h l2_config.h l2_ut_pcre.h l2_ut_sa.h
  +l2_ut_param.o: l2_ut_param.c l2.h l2_p.h l2_config.h l2_ut_pcre.h l2_ut_sa.h
  +l2_ut_pcre.o: l2_ut_pcre.c l2_ut_pcre.h l2_ut_pcre_tab.c
  +l2_ut_level.o: l2_ut_level.c l2.h l2_p.h l2_config.h l2_ut_pcre.h l2_ut_sa.h
  +l2_ut_fmtcb.o: l2_ut_fmtcb.c l2.h
  +l2_ut_sa.o: l2_ut_sa.c l2_p.h l2.h l2_config.h l2_ut_pcre.h l2_ut_sa.h
   l2_version.o: l2_version.c l2_version.c
  -
  -l2_ch_buffer.lo: l2_ch_buffer.c l2.h l2_p.h l2_ut_pcre.h
  -l2_ch_fd.lo: l2_ch_fd.c l2.h l2_p.h l2_ut_pcre.h
  -l2_ch_file.lo: l2_ch_file.c l2.h l2_p.h l2_ut_pcre.h
  -l2_ch_filter.lo: l2_ch_filter.c l2.h l2_p.h l2_ut_pcre.h
  -l2_ch_null.lo: l2_ch_null.c l2.h l2_p.h l2_ut_pcre.h
  -l2_ch_pipe.lo: l2_ch_pipe.c l2.h l2_p.h l2_ut_pcre.h
  -l2_ch_prefix.lo: l2_ch_prefix.c l2.h l2_p.h l2_ut_pcre.h
  -l2_ch_socket.lo: l2_ch_socket.c l2.h l2_p.h l2_ut_pcre.h
  -l2_ch_syslog.lo: l2_ch_syslog.c l2.h l2_p.h l2_ut_pcre.h
  -l2_channel.lo: l2_channel.c l2.h l2_p.h l2_ut_pcre.h
  -l2_stream.lo: l2_stream.c l2.h l2_p.h l2_ut_pcre.h
  -l2_ut_format.lo: l2_ut_format.c l2.h l2_p.h l2_ut_pcre.h
  -l2_ut_param.lo: l2_ut_param.c l2.h l2_p.h l2_ut_pcre.h
  -l2_ut_pcre.lo: l2_ut_pcre.c l2_ut_pcre.h l2_ut_pcre_tab.c
  -l2_ut_pcre_tab.lo: l2_ut_pcre_tab.c
  -l2_version.lo: l2_version.c l2_version.c
  -l2_ch_buffer.lo: l2_ch_buffer.c l2.h
  -l2_ch_fd.lo: l2_ch_fd.c l2.h
  -l2_ch_file.lo: l2_ch_file.c l2.h
  -l2_ch_filter.lo: l2_ch_filter.c l2.h
  -l2_ch_null.lo: l2_ch_null.c l2.h
  -l2_ch_pipe.lo: l2_ch_pipe.c l2.h
  -l2_ch_prefix.lo: l2_ch_prefix.c l2.h
  -l2_ch_smtp.lo: l2_ch_smtp.c l2.h l2_p.h l2_config.h l2_ut_pcre.h \
  -  l2_ut_sa.h
  -l2_ch_socket.lo: l2_ch_socket.c l2.h l2_p.h l2_config.h l2_ut_pcre.h \
  -  l2_ut_sa.h
  -l2_ch_syslog.lo: l2_ch_syslog.c l2.h
  -l2_channel.lo: l2_channel.c l2.h l2_p.h l2_config.h l2_ut_pcre.h \
  -  l2_ut_sa.h
  -l2_epreuve.lo: l2_epreuve.c l2.h l2_p.h l2_config.h l2_ut_pcre.h \
  -  l2_ut_sa.h
  -l2_sockmon.lo: l2_sockmon.c
  -l2_stream.lo: l2_stream.c l2.h l2_p.h l2_config.h l2_ut_pcre.h l2_ut_sa.h
  -l2_test.lo: l2_test.c l2.h
  -l2_ut_fmtcb.lo: l2_ut_fmtcb.c l2.h
  -l2_ut_format.lo: l2_ut_format.c l2.h l2_p.h l2_config.h l2_ut_pcre.h \
  -  l2_ut_sa.h
  -l2_ut_level.lo: l2_ut_level.c l2.h l2_p.h l2_config.h l2_ut_pcre.h \
  -  l2_ut_sa.h
  -l2_ut_param.lo: l2_ut_param.c l2.h l2_p.h l2_config.h l2_ut_pcre.h \
  -  l2_ut_sa.h
  -l2_ut_pcre.lo: l2_ut_pcre.c l2_ut_pcre.h l2_ut_pcre_tab.c
  -l2_ut_pcre_tab.lo: l2_ut_pcre_tab.c
  -l2_ut_sa.lo: l2_ut_sa.c l2_p.h l2.h l2_config.h l2_ut_pcre.h l2_ut_sa.h
  -l2_version.lo: l2_version.c l2_version.c
  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	2001/09/13 07:39:42	1.19
  +++ ossp-pkg/lmtp2nntp/Makefile.in	2001/09/13 08:47:17	1.20
  @@ -44,6 +44,7 @@
   
   PROG = lmtp2nntp
   HDRS = lmtp2nntp.h lmtp.h nntp.h sa.h argz.h shpat_match.h msg.h 
  +SRCS = lmtp2nntp.c lmtp.c nntp.c sa.c argz.c shpat_match.c msg.c version.c
   OBJS = lmtp2nntp.o lmtp.o nntp.o sa.o argz.o shpat_match.o msg.o version.o
   
   SUBDIRS = @SUBDIR_STR@ @SUBDIR_L2@ 
  @@ -121,28 +122,24 @@
   	@cd test && ./run.sh
   
   #   create dependencies
  -depend:
  +depend: all
   	cp Makefile.in Makefile.in.bak \
  -	&& sed -ne '1,/^# DO NOT REMOVE/p' Makefile.in > Makefile.new \
  -	&& $(CC) -MM $(CPPFLAGS) $(CFLAGS) *.c |\
  -	   sed -e 's/^\(l2_.*\)\.o:/\1.lo:/' >> Makefile.new \
  +	&& sed -ne '1,/^#   AUTOMATICALLY GENERATED DEPENDENCY LIST/p' Makefile.in > Makefile.new \
  +	&& $(CC) -MM $(CPPFLAGS) $(CFLAGS) $(SRCS) |\
  +	   perl -e 'my $$d = ""; $$d .= $$_ while (<STDIN>); $$_ = $$d; \
  +	            s|\\\n\s*| |sg; s|\b?\S*/\S*\b?||g; s|\s{2,}| |g; \
  +	            print $$_;' >> Makefile.new \
   	&& cp Makefile.new Makefile.in
   	&& rm -f Makefile.new
   
  -##
  -##  ____ DEPENDENCY AREA ____________________________________________
  -##  (AUTOMATICALLY UPDATED - DO NOT EDIT)
  -##
  -argz.o: argz.c argz.h config.h /cw/include/dmalloc.h
  -lmtp.o: lmtp.c lmtp.h config.h /cw/include/dmalloc.h
  -lmtp2nntp.o: lmtp2nntp.c str/str.h argz.h shpat_match.h l2/l2.h \
  - lmtp2nntp.h config.h /cw/include/dmalloc.h lmtp.h nntp.h msg.h sa.h \
  - version.c
  -msg.o: msg.c msg.h l2/l2.h lmtp2nntp.h config.h /cw/include/dmalloc.h \
  - str/str.h argz.h
  -nntp.o: nntp.c nntp.h msg.h l2/l2.h lmtp2nntp.h config.h \
  - /cw/include/dmalloc.h
  -sa.o: sa.c config.h /cw/include/dmalloc.h sa.h
  -shpat_match.o: shpat_match.c config.h /cw/include/dmalloc.h \
  - shpat_match.h
  +$(OBJS): Makefile
  +
  +#   AUTOMATICALLY GENERATED DEPENDENCY LIST - DO NOT EDIT
  +lmtp2nntp.o: lmtp2nntp.c argz.h shpat_match.h lmtp2nntp.h config.h lmtp.h nntp.h msg.h sa.h version.c
  +lmtp.o: lmtp.c lmtp.h config.h
  +nntp.o: nntp.c nntp.h msg.h lmtp2nntp.h config.h
  +sa.o: sa.c config.h sa.h
  +argz.o: argz.c argz.h config.h
  +shpat_match.o: shpat_match.c config.h shpat_match.h
  +msg.o: msg.c msg.h lmtp2nntp.h config.h argz.h
   version.o: version.c version.c
  Index: ossp-pkg/str/Makefile.in
  ============================================================
  $ cvs diff -u -r1.36 -r1.37 Makefile.in
  --- ossp-pkg/str/Makefile.in	2001/09/10 10:14:38	1.36
  +++ ossp-pkg/str/Makefile.in	2001/09/13 08:47:18	1.37
  @@ -176,30 +176,26 @@
   	@OPT="-s`$(SHTOOL) version -lc -dshort $(_VERSION_FILE)`" && $(_VERSION)
   
   #   create dependencies
  -depend:
  +depend: all
   	cp Makefile.in Makefile.in.bak \
  -	&& sed -ne '1,/^# DO NOT REMOVE/p' Makefile.in > Makefile.new \
  -	&& $(CC) -MM $(CPPFLAGS) $(CFLAGS) *.c |\
  -	   sed -e 's/^\(pth_.*\)\.o:/\1.lo:/' >> Makefile.new \
  +	&& sed -ne '1,/^#   AUTOMATICALLY GENERATED DEPENDENCY LIST/p' Makefile.in > Makefile.new \
  +	&& $(CC) -MM $(CPPFLAGS) $(CFLAGS) $(SRCS) |\
  +	   perl -e 'my $$d = ""; $$d .= $$_ while (<STDIN>); $$_ = $$d; \
  +	            s|\\\n\s*| |sg; s|\b?\S*/\S*\b?||g; s|\s{2,}| |g; \
  +	            print $$_;' >> Makefile.new \
   	&& cp Makefile.new Makefile.in
   	&& rm -f Makefile.new
   
  -##
  -##  ____ DEPENDENCY AREA ____________________________________________
  -##  (AUTOMATICALLY UPDATED - DO NOT EDIT)
  -##
  +$(OBJS): Makefile
   
  -$(LOBJS): Makefile
  -
  -str_basic.o: str_basic.c str_p.h str.h str_config.h str_pcre.h
  -str_format.o: str_format.c str_p.h str.h str_config.h str_pcre.h
  +#   AUTOMATICALLY GENERATED DEPENDENCY LIST - DO NOT EDIT
  +str_pcre.o: str_pcre.c str_pcre.h str_pcre_tab.c
   str_memory.o: str_memory.c str_p.h str.h str_config.h str_pcre.h
  -str_parse.o: str_parse.c str_p.h str.h str_config.h str_pcre.h
  -str_pcre.o: str_pcre.c str_pcre_p.h str_config.h str_pcre.h \
  - str_pcre_tab.c
  -str_pcre_mk.o: str_pcre_mk.c str_pcre_p.h str_config.h str_pcre.h
  -str_pcre_tab.o: str_pcre_tab.c
  +str_basic.o: str_basic.c str_p.h str.h str_config.h str_pcre.h
   str_search.o: str_search.c str_p.h str.h str_config.h str_pcre.h
  -str_test.o: str_test.c str.h str_config.h
   str_token.o: str_token.c str_p.h str.h str_config.h str_pcre.h
  -str_version.o: str_version.c
  +str_parse.o: str_parse.c str_p.h str.h str_config.h str_pcre.h
  +str_format.o: str_format.c str_p.h str.h str_config.h str_pcre.h
  +str_hash.o: str_hash.c str_p.h str.h str_config.h str_pcre.h
  +str_base64.o: str_base64.c str_p.h str.h str_config.h str_pcre.h
  +str_version.o: str_version.c str_version.c

From ossp-cvs-owner@ossp.org  Thu Sep 13 10:51:14 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8D8pDY64814; Thu, 13 Sep 2001 10:51:13 +0200 (CEST)
Date: Thu, 13 Sep 2001 10:51:13 +0200 (CEST)
Message-Id: <200109130851.f8D8pDY64814@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp Makefile.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   13-Sep-2001 10:51:13
  Branch: HEAD                             Handle: 2001091309511300

  Modified files:
    ossp-pkg/lmtp2nntp      Makefile.in

  Log:
    ignore backup files

  Summary:
    Revision    Changes     Path
    1.21        +1  -1      ossp-pkg/lmtp2nntp/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	2001/09/13 08:47:17	1.20
  +++ ossp-pkg/lmtp2nntp/Makefile.in	2001/09/13 08:51:13	1.21
  @@ -116,7 +116,7 @@
   	@$(SHTOOL) fixperm -v .; \
   	V=`$(SHTOOL) version -lc -dshort version.c`; \
   	$(SHTOOL) tarball -o lmtp2nntp-$${V}.tar.gz -d lmtp2nntp-$${V} -u ossp -g ossp \
  -	                  -e 'CVS,\.cvsignore,\.[ao],^\.,/\.,autogen.sh,*.tar.gz' -c 'gzip --best' .
  +	                  -e 'CVS,\.cvsignore,\.[ao],^\.,/\.,autogen.sh,*.tar.gz,*.bak' -c 'gzip --best' .
   
   check: lmtp2nntp
   	@cd test && ./run.sh

From ossp-cvs-owner@ossp.org  Thu Sep 13 10:54:27 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8D8sQR65070; Thu, 13 Sep 2001 10:54:26 +0200 (CEST)
Date: Thu, 13 Sep 2001 10:54:26 +0200 (CEST)
Message-Id: <200109130854.f8D8sQR65070@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp version.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   13-Sep-2001 10:54:26
  Branch: HEAD                             Handle: 2001091309542600

  Modified files:
    ossp-pkg/lmtp2nntp      version.c

  Log:
    bump version for release

  Summary:
    Revision    Changes     Path
    1.8         +9  -9      ossp-pkg/lmtp2nntp/version.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/version.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 version.c
  --- ossp-pkg/lmtp2nntp/version.c	2001/09/13 07:49:45	1.7
  +++ ossp-pkg/lmtp2nntp/version.c	2001/09/13 08:54:26	1.8
  @@ -8,7 +8,7 @@
   #ifndef _VERSION_C_
   #define _VERSION_C_
   
  -#define LMTP2NNTP_VERSION 0x009206
  +#define LMTP2NNTP_VERSION 0x009207
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _VERSION_C_AS_HEADER_
   
   lmtp2nntp_version_t lmtp2nntp_version = {
  -    0x009206,
  -    "0.9.6",
  -    "0.9.6 (13-Sep-2001)",
  -    "This is lmtp2nntp, Version 0.9.6 (13-Sep-2001)",
  -    "lmtp2nntp 0.9.6 (13-Sep-2001)",
  -    "lmtp2nntp/0.9.6",
  -    "@(#)lmtp2nntp 0.9.6 (13-Sep-2001)",
  -    "$Id: version.c,v 1.7 2001/09/13 07:49:45 thl Exp $"
  +    0x009207,
  +    "0.9.7",
  +    "0.9.7 (13-Sep-2001)",
  +    "This is lmtp2nntp, Version 0.9.7 (13-Sep-2001)",
  +    "lmtp2nntp 0.9.7 (13-Sep-2001)",
  +    "lmtp2nntp/0.9.7",
  +    "@(#)lmtp2nntp 0.9.7 (13-Sep-2001)",
  +    "$Id: version.c,v 1.8 2001/09/13 08:54:26 thl Exp $"
   };
   
   #endif /* _VERSION_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Thu Sep 13 13:58:07 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8DBw6h85992; Thu, 13 Sep 2001 13:58:06 +0200 (CEST)
Date: Thu, 13 Sep 2001 13:58:06 +0200 (CEST)
Message-Id: <200109131158.f8DBw6h85992@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_stream.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   13-Sep-2001 13:58:06
  Branch: HEAD                             Handle: 2001091312580500

  Modified files:
    ossp-pkg/l2             l2_stream.c

  Log:
    Check that an incoming level argument is given, but only check arguments once
    - in l2_stream_vlog where it counts.

  Summary:
    Revision    Changes     Path
    1.17        +1  -5      ossp-pkg/l2/l2_stream.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_stream.c
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 l2_stream.c
  --- ossp-pkg/l2/l2_stream.c	2001/09/12 13:50:46	1.16
  +++ ossp-pkg/l2/l2_stream.c	2001/09/13 11:58:05	1.17
  @@ -128,10 +128,6 @@
       va_list ap;
       l2_result_t rv;
   
  -    /* argument sanity check */
  -    if (st == NULL || level == 0 || fmt == NULL)
  -        return L2_ERR_ARG;
  -
       /* pass-through to va_list-based variant */
       va_start(ap, fmt);
       rv = l2_stream_vlog(st, level, fmt, ap);
  @@ -188,7 +184,7 @@
       l2_util_format_t vfmt;
   
       /* argument sanity check */
  -    if (st == NULL || fmt == NULL || ap == NULL)
  +    if (st == NULL || level == 0 || fmt == NULL || ap == NULL)
           return L2_ERR_ARG;
   
       /* make sure only a single level is specified */

From ossp-cvs-owner@ossp.org  Thu Sep 13 14:18:22 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8DCILo88626; Thu, 13 Sep 2001 14:18:21 +0200 (CEST)
Date: Thu, 13 Sep 2001 14:18:21 +0200 (CEST)
Message-Id: <200109131218.f8DCILo88626@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp test.sh ossp-pkg/lmtp2nntp/test .cvsign...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   13-Sep-2001 14:18:21
  Branch: HEAD                             Handle: 197001010100001000379900

  Added files:
    ossp-pkg/lmtp2nntp      test.sh
  Removed files:
    ossp-pkg/lmtp2nntp/test .cvsignore run.sh testmessage.vialmtp

  Log:
    revamped test/run.sh into test.sh

  Summary:
    Revision    Changes     Path
    1.1         +0  -0      ossp-pkg/lmtp2nntp/test.sh
    NONE        +0  -6      ossp-pkg/lmtp2nntp/test/.cvsignore
    NONE        +0  -202    ossp-pkg/lmtp2nntp/test/run.sh
    NONE        +0  -27     ossp-pkg/lmtp2nntp/test/testmessage.vialmtp
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/test.sh
  ============================================================
  $ cvs update -p -r1.1 test.sh
  #/bin/sh
  
  echon () {
      echo "$*" | awk '{ printf("%s", $0); }'
  }
  
  newmsg () {
      cat >${TMPFILE} <<EOT
  LHLO dev.de.cw.net
  MAIL From:<thomas.lotterer@example.com>
  RCPT To:<quux.test@news-posting>
  RCPT To:<foo.bar@news-posting>
  RCPT To:<foo.test.bar@news-posting>
  DATA
  Date: Tue, 26 Aug 2001 14:51:48 +0200 (CEST)
  Message-Id: <200108141251.f7ECpmn74812@dev.de.cw.net>
  From: Thomas Lotterer <Thomas.Lotterer@example.com>
  Received: from cw.example.com (cw.example.com [10.1.1.32])
      by gateway.example.com (8.9.2/8.9.2/$Revision: 1.1 $) with SMTP id NAA08840
      for <thomas.lotterer@gateway.example.com>; Mon, 2 Apr 2001 13:20:25 +0200 (MET DST)
  Received: from history (history.example.org [195.143.102.41])
      by cw.example.com (8.11.0/8.11.0/$Revision: 1.1 $) with ESMTP id f32BKPb12235
      for <thomas.lotterer@example.com>; Mon, 2 Apr 2001 13:20:25 +0200
  Received: from example.org (littlemua.example.org [195.143.103.160])
  	by history (8.8.8/8.8.8) with ESMTP id LAA12678;
  	Mon, 2 Apr 2001 11:23:14 GMT
  Subject: lmtp2nntp testmessage.viasendmail
  
  ..
  a dot above
  #
  a dot below
  ..
  .
  QUIT
  EOT
      awk <${TMPFILE} \
       '  BEGIN          { gotit = 0; IGNORECASE = 1; }
          /^#$/          { gotit = 1; print "#" date " [" pid "] " id; }
          /^Message-ID:/ { gotit = 1; print "Message-Id: <" date "-" id "@example.com>"; }
          /^Subject:/    { gotit = 1; print "Subject: [" pid "] " $2; }
                         { if (gotit == 0) { print; }; gotit = 0; }
       ' pid="$$" id="I${H}${Z}${E}D" date="`date +%Y%m%d%H%M%S`" \
       | tee 2>&1 >/dev/null ${STDIN}
  }
  
  prolog () {
      H="0"; Z="0"; E="0"; #HZE used for mass-tests with uniq IDs
  
      for i in ${FILE} ${STDIN} ${STDOUT} ${STDERR} ${DMALLOC}; do
          if [ -f ${i} ]; then
              rm -f ${i}
          fi
          touch ${i}
          chmod 666 ${i}
      done
  }
  
  epilog () {
      for i in ${FILE} ${STDIN} ${STDOUT} ${STDERR} ${DMALLOC}; do
          if [ -r ${i} ]; then
              echon "press RETURN to see the contents of ${i}"
              read DUMMY
              less -S ${i}
          fi
      done
  }
  
  #main ()
  
   TMPDIR="${TMPDIR:-/tmp}"
   PREFIX="${TMPDIR}/lmtp2nntp.test."
  TMPFILE="${PREFIX}tmp"
  DMALLOC="${PREFIX}dmalloc.log"
  
      LOG="notice"
     FILE="${PREFIX}stdlog"
    STDIN="${PREFIX}stdin"
   STDOUT="${PREFIX}stdout"
   STDERR="${PREFIX}stderr"
    LOCAL="0.0.0.0"
     HOST="0.0.0.0"
    GROUP="my.test"
    MFILT=".+@(?:[^.]+\.)*example\.com"
     NODE="gateway"
  
  # make check with automatic succeed/ fail message.
  # more samples and testing below.
  
  echon "checking whether -v verbose option works ... "
  # expected sample output: lmtp2nntp 0.9.4 (30-Aug-2001)
  prolog
  newmsg
  ./lmtp2nntp -v >${STDOUT} 2>${STDERR}
  RC=`cat ${STDOUT} | egrep 'lmtp2nntp[ ]+[0-9]+\.[0-9]+\.[0-9]+[ ]+\([0-9]+-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-[0-9]+\)' | wc -l`
  if [ ${RC} -ne 1 -o ".`cat ${STDERR}`" != . ]; then
      echo "NO (got ${RC})"
      exit 1;
  fi
  echo "yes"
  
  echon "checking whether -? usage option works ... "
  # expected typical output: USAGE: ./lmtp2nntp
  # lmtp2nntp [-b bindaddr[:port]] [-d deliverymode] [-g groupmode] [-h
  # host[:port][,host[:port], ...]] [-m mailfrom] [-n nodename] [-s size] [-l
  # level[:logfile]] [-v] [-w waittime] newsgroup [newsgroup ...]
  prolog
  newmsg
  ./lmtp2nntp -? >${STDOUT} 2>${STDERR}
  RC=`cat ${STDERR} | egrep -- '-b.*-d.*-g.*-h.*-m.*-n.*-s.*-l.*-v.*-w.*newsgroup' | wc -l`
  if [ ${RC} -ne 1 -o -s ${STDOUT} ]; then
      echo "NO (got ${RC})"
      exit 1;
  fi
  echo "yes"
  
  echon "checking whether a valid fake posting succeeds ... "
  prolog
  newmsg
  ./lmtp2nntp <${STDIN} -b ${LOCAL} -d 250/2.0.0 -g arg -h ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 1000 -w 1 ${GROUP} >${STDOUT} 2>${STDERR} ; RC=$
  RC="";
  if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
  if [ 1 -eq `egrep <${STDOUT} '^250[- ].*pleased to meet you'    | wc -l` ]; then RC="${RC}LHLO "; fi
  if [ 1 -eq `egrep <${STDOUT} '^250[- ]2.1.0 Sender ok'          | wc -l` ]; then RC="${RC}MAIL "; fi
  if [ 3 -eq `egrep <${STDOUT} '^250[- ]2.1.5 Recipient accepted' | wc -l` ]; then RC="${RC}RCPT "; fi
  if [ 1 -eq `egrep <${STDOUT} '^354[- ]Enter mail'               | wc -l` ]; then RC="${RC}DATA "; fi
  if [ 3 -eq `egrep <${STDOUT} '^250[- ]2.0.0 NNTP noop fake'     | wc -l` ]; then RC="${RC}post "; fi
  if [ 1 -eq `egrep <${STDOUT} '^221[- ]2.0.0.+closing.+channel'  | wc -l` ]; then RC="${RC}QUIT "; fi
  if [ "${RC}" != "init LHLO MAIL RCPT DATA post QUIT " ]; then
      echo "NO (got ${RC})"
      exit 1;
  fi
  echo "yes"
  
  echon "checking whether -m option blocks invalid sender ... "
  prolog
  newmsg
  ( MFILT=".*@is.invalid" ; ./lmtp2nntp <${STDIN} -b ${LOCAL} -d 250/2.0.0 -g arg -h ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 1000 -w 1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
  RC="";
  if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
  if [ 1 -eq `egrep <${STDOUT} '^250[- ].+pleased to meet you'    | wc -l` ]; then RC="${RC}LHLO "; fi
  if [ 1 -eq `egrep <${STDOUT} '^550[- ]5.7.1.+not authorized'    | wc -l` ]; then RC="${RC}MAIL "; fi
  if [ 3 -eq `egrep <${STDOUT} '^503[- ]5.5.0.+MAIL first'        | wc -l` ]; then RC="${RC}RCPT "; fi
  if [ 1 -eq `egrep <${STDOUT} '^503[- ]5.5.0.+RCPT first'        | wc -l` ]; then RC="${RC}DATA "; fi
  if [ 0 -lt `egrep <${STDOUT} '^500[- ]5.5.1.+unrecognized'      | wc -l` ]; then RC="${RC}post "; fi
  if [ 1 -eq `egrep <${STDOUT} '^221[- ]2.0.0.+closing.+channel'  | wc -l` ]; then RC="${RC}QUIT "; fi
  if [ "${RC}" != "init LHLO MAIL RCPT DATA post QUIT " ]; then
      echo "NO (got ${RC})"
      exit 1;
  fi
  echo "yes"
  
  echon "checking whether -s option rejects article with invalid size ... "
  prolog
  newmsg
  ./lmtp2nntp <${STDIN} -b ${LOCAL} -d 250/2.0.0 -g arg -h ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 100  -w 1 ${GROUP} >${STDOUT} 2>${STDERR} ; RC=$?
  RC="";
  if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
  if [ 1 -eq `egrep <${STDOUT} '^250[- ].*pleased to meet you'    | wc -l` ]; then RC="${RC}LHLO "; fi
  if [ 1 -eq `egrep <${STDOUT} '^250[- ]2.1.0 Sender ok'          | wc -l` ]; then RC="${RC}MAIL "; fi
  if [ 3 -eq `egrep <${STDOUT} '^250[- ]2.1.5 Recipient accepted' | wc -l` ]; then RC="${RC}RCPT "; fi
  if [ 1 -eq `egrep <${STDOUT} '^354[- ]Enter mail'               | wc -l` ]; then RC="${RC}DATA "; fi
  if [ 3 -eq `egrep <${STDOUT} '^552[- ]5.2.3.+exceeds.+limit'    | wc -l` ]; then RC="${RC}post "; fi
  if [ 1 -eq `egrep <${STDOUT} '^221[- ]2.0.0.+closing.+channel'  | wc -l` ]; then RC="${RC}QUIT "; fi
  if [ "${RC}" != "init LHLO MAIL RCPT DATA post QUIT " ]; then
      echo "NO (got ${RC})"
      exit 1;
  fi
  echo "yes"
  
  echon "checking whether -b option fails on invalid local host address ... "
  prolog
  newmsg
  ( LOCAL="127.0.0.255" ; ./lmtp2nntp <${STDIN} -b ${LOCAL} -d 250/2.0.0 -g arg -h ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 1000 -w 1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
  RC="";
  if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
  if [ 1 -eq `egrep <${FILE}   'error.+binding'                   | wc -l` ]; then RC="${RC}bind "; fi
  if [ "${RC}" != "init bind " ]; then
      echo "NO (got ${RC})"
      exit 1;
  fi
  echo "yes"
  
  echon "checking whether -g envelope option blocks invalid group ... "
  prolog
  newmsg
  ( GROUP="foo.*" ; ./lmtp2nntp <${STDIN} -b ${LOCAL} -d 250/2.0.0 -g envelope -h ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 1000 -w 1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
  RC="";
  if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
  if [ 1 -eq `egrep <${STDOUT} '^250[- ].*pleased to meet you'    | wc -l` ]; then RC="${RC}LHLO "; fi
  if [ 1 -eq `egrep <${STDOUT} '^250[- ]2.1.0 Sender ok'          | wc -l` ]; then RC="${RC}MAIL "; fi
  if [ 1 -eq `egrep <${STDOUT} '^550[- ]5.7.2 unmatched Group'    | wc -l` ]; then RC="${RC}RCPT "; fi
  if [ 2 -eq `egrep <${STDOUT} '^250[- ]2.1.5 Group accepted'     | wc -l` ]; then RC="${RC}RCPT "; fi
  if [ 1 -eq `egrep <${STDOUT} '^354[- ]Enter mail'               | wc -l` ]; then RC="${RC}DATA "; fi
  if [ 2 -eq `egrep <${STDOUT} '^250[- ]2.0.0 NNTP noop fake'     | wc -l` ]; then RC="${RC}post "; fi
  if [ 1 -eq `egrep <${STDOUT} '^221[- ]2.0.0.+closing.+channel'  | wc -l` ]; then RC="${RC}QUIT "; fi
  if [ "${RC}" != "init LHLO MAIL RCPT RCPT DATA post QUIT " ]; then
      echo "NO (got ${RC})"
      exit 1;
  fi
  echo "yes"
  
  echon "checking whether -h option times out for invalid host ... "
  prolog
  newmsg
  ( HOST="127.0.0.255" ; ./lmtp2nntp <${STDIN} -b ${LOCAL} -d 250/2.0.0 -g arg -h ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 1000 -w 1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
  RC="";
  if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
  if [ 1 -eq `egrep <${FILE}   'warning.+connect.+failed'         | wc -l` ]; then RC="${RC}conn "; fi
  if [ "${RC}" != "init conn " ]; then
      echo "NO (got ${RC})"
      exit 1;
  fi
  echo "yes"
  
  echo "CHECK COMPLETE AND PASSED"
  #epilog
  exit 0
      

From ossp-cvs-owner@ossp.org  Thu Sep 13 14:19:46 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8DCJjE88781; Thu, 13 Sep 2001 14:19:45 +0200 (CEST)
Date: Thu, 13 Sep 2001 14:19:45 +0200 (CEST)
Message-Id: <200109131219.f8DCJjE88781@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 configure.ac l2_ch_socket.c l2_ut_level.c l2_u...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   13-Sep-2001 14:19:45
  Branch: HEAD                             Handle: 2001091313194500

  Modified files:
    ossp-pkg/l2             configure.ac l2_ch_socket.c l2_ut_level.c
                            l2_ut_sa.c

  Log:
    portability fixes for solaris

  Summary:
    Revision    Changes     Path
    1.7         +7  -0      ossp-pkg/l2/configure.ac
    1.26        +2  -2      ossp-pkg/l2/l2_ch_socket.c
    1.3         +8  -1      ossp-pkg/l2/l2_ut_level.c
    1.7         +4  -4      ossp-pkg/l2/l2_ut_sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/configure.ac
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 configure.ac
  --- ossp-pkg/l2/configure.ac	2001/09/11 10:37:04	1.6
  +++ ossp-pkg/l2/configure.ac	2001/09/13 12:19:45	1.7
  @@ -75,6 +75,13 @@
   AC_PROG_CPP
   AC_CHECK_DEBUGGING
   AC_CONFIGURE_LIBTOOL
  +
  +AC_CHECK_LIB(nsl, gethostname)
  +if test ".`echo $LIBS | grep nsl`" = . ;then
  +    AC_CHECK_LIB(nsl, gethostbyname)
  +fi  
  +AC_CHECK_LIB(socket, accept)
  +
   AC_CHECK_FUNCS(inet_aton inet_pton inet_ntoa inet_ntop snprintf vsnprintf)
   
   AC_CHECK_EXTLIB([Dmalloc], dmalloc, dmalloc_debug, dmalloc.h, AC_DEFINE(WITH_DMALLOC))
  Index: ossp-pkg/l2/l2_ch_socket.c
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 l2_ch_socket.c
  --- ossp-pkg/l2/l2_ch_socket.c	2001/09/12 09:42:34	1.25
  +++ ossp-pkg/l2/l2_ch_socket.c	2001/09/13 12:19:45	1.26
  @@ -222,8 +222,8 @@
               if (pHostentry->h_addrtype == AF_INET6) {
                   IP6Sockaddr.sin6_family = AF_INET6;
                   IP6Sockaddr.sin6_port   = htons(cfg->iPort);
  -                memcpy(&IP6Sockaddr.sin6_addr.__u6_addr, pHostentry->h_addr_list[0],\
  -                    sizeof(IP6Sockaddr.sin6_addr.__u6_addr));
  +                memcpy(&IP6Sockaddr.sin6_addr.s6_addr, pHostentry->h_addr_list[0],\
  +                    sizeof(IP6Sockaddr.sin6_addr.s6_addr));
               }
               else
                   return L2_ERR_USE; /* what?? we specify IPv6 when it is not?  */
  Index: ossp-pkg/l2/l2_ut_level.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2_ut_level.c
  --- ossp-pkg/l2/l2_ut_level.c	2001/09/06 14:37:53	1.2
  +++ ossp-pkg/l2/l2_ut_level.c	2001/09/13 12:19:45	1.3
  @@ -99,6 +99,13 @@
       return hv;
   }
   
  +static int myishexnumber(int c)
  +{
  +    if (isdigit(c) || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'))
  +        return 1;
  +    return 0;
  +}
  +
   l2_result_t l2_util_s2l(const char *string, size_t maxlen, int sep, unsigned int *levelmask)
   {
       const char *cpB;
  @@ -127,7 +134,7 @@
               }
           }
           if (!bFound) {
  -            if ((cpE > cpB+2) && strncasecmp(cpB, "0x", 2) == 0 && ishexnumber((int)(*(cpB+2)))) {
  +            if ((cpE > cpB+2) && strncasecmp(cpB, "0x", 2) == 0 && myishexnumber((int)(*(cpB+2)))) {
                   *levelmask |= hexval(cpB+2, cpE);
               }
               else
  Index: ossp-pkg/l2/l2_ut_sa.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 l2_ut_sa.c
  --- ossp-pkg/l2/l2_ut_sa.c	2001/09/11 10:37:04	1.6
  +++ ossp-pkg/l2/l2_ut_sa.c	2001/09/13 12:19:45	1.7
  @@ -295,13 +295,13 @@
       /* fill in family */
       sf = 0;
       if (sizeof(struct sockaddr_in) == salen) {
  -        sa4 = (struct sockaddr_in *)sabuf;
  +        sa4 = (struct sockaddr_in *)((void *)sabuf);
           if (sa4->sin_family == AF_INET)
               sf = AF_INET;
       }
   #ifdef AF_INET6
       else if (sizeof(struct sockaddr_in6) == salen) {
  -        sa6 = (struct sockaddr_in6 *)sabuf;
  +        sa6 = (struct sockaddr_in6 *)((void *)sabuf);
           if (sa6->sin6_family == AF_INET6)
               sf = AF_INET6;
       }
  @@ -332,13 +332,13 @@
       if ((pe = getprotobynumber(saa->saa_proto)) == NULL)
           return SA_ERR_SYS;
       if (saa->saa_family == AF_INET) {
  -        sa4 = (struct sockaddr_in *)saa->saa_buf;
  +        sa4 = (struct sockaddr_in *)((void *)saa->saa_buf);
           inet_ntop(AF_INET, &sa4->sin_addr.s_addr, caHost, sizeof(caHost));
           nPort = ntohs(sa4->sin_port);
       }
   #ifdef AF_INET6
       else if (saa->saa_family == AF_INET6) {
  -        sa6 = (struct sockaddr_in6 *)saa->saa_buf;
  +        sa6 = (struct sockaddr_in6 *)((void *)saa->saa_buf);
           inet_ntop(AF_INET6, &sa6->sin6_addr.s6_addr, caHost, sizeof(caHost));
           nPort = ntohs(sa6->sin6_port);
       }

From ossp-cvs-owner@ossp.org  Thu Sep 13 14:20:37 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8DCKZd88885; Thu, 13 Sep 2001 14:20:35 +0200 (CEST)
Date: Thu, 13 Sep 2001 14:20:35 +0200 (CEST)
Message-Id: <200109131220.f8DCKZd88885@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   13-Sep-2001 14:20:35
  Branch: HEAD                             Handle: 2001091313203500

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c

  Log:
    portability bugfix for 64bit platforms

  Summary:
    Revision    Changes     Path
    1.60        +3  -2      ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.59 -r1.60 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/13 07:35:03	1.59
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/13 12:20:35	1.60
  @@ -121,6 +121,7 @@
   };
   
   typedef struct {
  +    l2_context_t    ctx;
       char           *progname;
       char           *option_logfile;
       int             option_groupmode;
  @@ -316,6 +317,7 @@
       /* create application context */
       if ((ctx = (lmtp2nntp_t *)malloc(sizeof(lmtp2nntp_t))) == NULL)
           CU(ERR_EXECUTION);
  +    ctx->ctx.vp = ctx;
       ctx->progname = strdup(argv[0]);
       ctx->option_logfile = NULL;
       ctx->option_groupmode = GROUPMODE_ARG;
  @@ -555,7 +557,7 @@
           CU(ERR_EXECUTION);
       }
   
  -    if (l2_stream_formatter(ctx->l2, 'P', formatter_prefix, (l2_context_t *)&ctx) != L2_OK) {
  +    if (l2_stream_formatter(ctx->l2, 'P', formatter_prefix, &ctx->ctx) != L2_OK) {
           fprintf(stderr, "%s:Error: logging failed to register formatter\n", ctx->progname);
           CU(ERR_EXECUTION);
       }
  @@ -634,7 +636,6 @@
       signal(SIGSEGV, (void(*)())catchsignal);
       signal(SIGSYS,  (void(*)())catchsignal);
       signal(SIGTERM, (void(*)())catchsignal);
  -    signal(SIGINFO,            SIG_IGN    );
       signal(SIGUSR1,            SIG_IGN    );
       signal(SIGUSR2,            SIG_IGN    );
   

From ossp-cvs-owner@ossp.org  Thu Sep 13 14:21:35 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8DCLZ889256; Thu, 13 Sep 2001 14:21:35 +0200 (CEST)
Date: Thu, 13 Sep 2001 14:21:35 +0200 (CEST)
Message-Id: <200109131221.f8DCLZ889256@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp Makefile.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   13-Sep-2001 14:21:34
  Branch: HEAD                             Handle: 2001091313213400

  Modified files:
    ossp-pkg/lmtp2nntp      Makefile.in

  Log:
    revamped test/run.sh into test.sh

  Summary:
    Revision    Changes     Path
    1.22        +1  -1      ossp-pkg/lmtp2nntp/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	2001/09/13 08:51:13	1.21
  +++ ossp-pkg/lmtp2nntp/Makefile.in	2001/09/13 12:21:34	1.22
  @@ -119,7 +119,7 @@
   	                  -e 'CVS,\.cvsignore,\.[ao],^\.,/\.,autogen.sh,*.tar.gz,*.bak' -c 'gzip --best' .
   
   check: lmtp2nntp
  -	@cd test && ./run.sh
  +	@./test.sh
   
   #   create dependencies
   depend: all

From ossp-cvs-owner@ossp.org  Thu Sep 13 14:35:53 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8DCZqW90795; Thu, 13 Sep 2001 14:35:52 +0200 (CEST)
Date: Thu, 13 Sep 2001 14:35:52 +0200 (CEST)
Message-Id: <200109131235.f8DCZqW90795@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_stream.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   13-Sep-2001 14:35:52
  Branch: HEAD                             Handle: 2001091313355200

  Modified files:
    ossp-pkg/l2             l2_stream.c

  Log:
    Backed out changes for lmtp2nntp release testing.

  Summary:
    Revision    Changes     Path
    1.18        +5  -1      ossp-pkg/l2/l2_stream.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_stream.c
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 l2_stream.c
  --- ossp-pkg/l2/l2_stream.c	2001/09/13 11:58:05	1.17
  +++ ossp-pkg/l2/l2_stream.c	2001/09/13 12:35:52	1.18
  @@ -128,6 +128,10 @@
       va_list ap;
       l2_result_t rv;
   
  +    /* argument sanity check */
  +    if (st == NULL || level == 0 || fmt == NULL)
  +        return L2_ERR_ARG;
  +
       /* pass-through to va_list-based variant */
       va_start(ap, fmt);
       rv = l2_stream_vlog(st, level, fmt, ap);
  @@ -184,7 +188,7 @@
       l2_util_format_t vfmt;
   
       /* argument sanity check */
  -    if (st == NULL || level == 0 || fmt == NULL || ap == NULL)
  +    if (st == NULL || fmt == NULL || ap == NULL)
           return L2_ERR_ARG;
   
       /* make sure only a single level is specified */

From ossp-cvs-owner@ossp.org  Thu Sep 13 14:50:28 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8DCoRR92360; Thu, 13 Sep 2001 14:50:27 +0200 (CEST)
Date: Thu, 13 Sep 2001 14:50:27 +0200 (CEST)
Message-Id: <200109131250.f8DCoRR92360@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_channel.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   13-Sep-2001 14:50:27
  Branch: HEAD                             Handle: 2001091313502600

  Modified files:
    ossp-pkg/l2             l2_channel.c

  Log:
    temporary bugfix

  Summary:
    Revision    Changes     Path
    1.18        +1  -1      ossp-pkg/l2/l2_channel.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_channel.c
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 l2_channel.c
  --- ossp-pkg/l2/l2_channel.c	2001/09/12 09:42:34	1.17
  +++ ossp-pkg/l2/l2_channel.c	2001/09/13 12:50:26	1.18
  @@ -266,7 +266,7 @@
   {
       /* argument sanity check */
       if (ch == NULL)
  -        return NULL;
  +        return L2_CHANNEL_FILTER; /* FIXME */
   
       return ch->handler.type;
   }

From ossp-cvs-owner@ossp.org  Thu Sep 13 14:50:48 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8DColP92410; Thu, 13 Sep 2001 14:50:47 +0200 (CEST)
Date: Thu, 13 Sep 2001 14:50:47 +0200 (CEST)
Message-Id: <200109131250.f8DColP92410@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp test.sh
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   13-Sep-2001 14:50:47
  Branch: HEAD                             Handle: 2001091313504600

  Modified files:
    ossp-pkg/lmtp2nntp      test.sh

  Log:
    use a more unusual address

  Summary:
    Revision    Changes     Path
    1.2         +5  -5      ossp-pkg/lmtp2nntp/test.sh
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/test.sh
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 test.sh
  --- ossp-pkg/lmtp2nntp/test.sh	2001/09/13 12:18:20	1.1
  +++ ossp-pkg/lmtp2nntp/test.sh	2001/09/13 12:50:46	1.2
  @@ -16,10 +16,10 @@
   Message-Id: <200108141251.f7ECpmn74812@dev.de.cw.net>
   From: Thomas Lotterer <Thomas.Lotterer@example.com>
   Received: from cw.example.com (cw.example.com [10.1.1.32])
  -    by gateway.example.com (8.9.2/8.9.2/$Revision: 1.1 $) with SMTP id NAA08840
  +    by gateway.example.com (8.9.2/8.9.2/$Revision: 1.2 $) with SMTP id NAA08840
       for <thomas.lotterer@gateway.example.com>; Mon, 2 Apr 2001 13:20:25 +0200 (MET DST)
   Received: from history (history.example.org [195.143.102.41])
  -    by cw.example.com (8.11.0/8.11.0/$Revision: 1.1 $) with ESMTP id f32BKPb12235
  +    by cw.example.com (8.11.0/8.11.0/$Revision: 1.2 $) with ESMTP id f32BKPb12235
       for <thomas.lotterer@example.com>; Mon, 2 Apr 2001 13:20:25 +0200
   Received: from example.org (littlemua.example.org [195.143.103.160])
   	by history (8.8.8/8.8.8) with ESMTP id LAA12678;
  @@ -73,7 +73,7 @@
   TMPFILE="${PREFIX}tmp"
   DMALLOC="${PREFIX}dmalloc.log"
   
  -    LOG="notice"
  +    LOG="debug"
      FILE="${PREFIX}stdlog"
     STDIN="${PREFIX}stdin"
    STDOUT="${PREFIX}stdout"
  @@ -171,7 +171,7 @@
   echon "checking whether -b option fails on invalid local host address ... "
   prolog
   newmsg
  -( LOCAL="127.0.0.255" ; ./lmtp2nntp <${STDIN} -b ${LOCAL} -d 250/2.0.0 -g arg -h ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 1000 -w 1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
  +( LOCAL="10.255.255.255" ; ./lmtp2nntp <${STDIN} -b ${LOCAL} -d 250/2.0.0 -g arg -h ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 1000 -w 1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
   RC="";
   if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
   if [ 1 -eq `egrep <${FILE}   'error.+binding'                   | wc -l` ]; then RC="${RC}bind "; fi
  @@ -203,7 +203,7 @@
   echon "checking whether -h option times out for invalid host ... "
   prolog
   newmsg
  -( HOST="127.0.0.255" ; ./lmtp2nntp <${STDIN} -b ${LOCAL} -d 250/2.0.0 -g arg -h ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 1000 -w 1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
  +( HOST="10.255.255.255" ; ./lmtp2nntp <${STDIN} -b ${LOCAL} -d 250/2.0.0 -g arg -h ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 1000 -w 1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
   RC="";
   if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
   if [ 1 -eq `egrep <${FILE}   'warning.+connect.+failed'         | wc -l` ]; then RC="${RC}conn "; fi

From ossp-cvs-owner@ossp.org  Thu Sep 13 14:57:51 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8DCvn093229; Thu, 13 Sep 2001 14:57:49 +0200 (CEST)
Date: Thu, 13 Sep 2001 14:57:49 +0200 (CEST)
Message-Id: <200109131257.f8DCvn093229@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp INSTALL
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   13-Sep-2001 14:57:49
  Branch: HEAD                             Handle: 2001091313574900

  Modified files:
    ossp-pkg/lmtp2nntp      INSTALL

  Log:
    updated sendmail macros

  Summary:
    Revision    Changes     Path
    1.5         +20 -12     ossp-pkg/lmtp2nntp/INSTALL
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/INSTALL
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 INSTALL
  --- ossp-pkg/lmtp2nntp/INSTALL	2001/08/20 14:36:29	1.4
  +++ ossp-pkg/lmtp2nntp/INSTALL	2001/09/13 12:57:49	1.5
  @@ -6,15 +6,18 @@
   ______________________________________________________________________
   
   PUSHDIVERT(-1)
  -
   _DEFIFNOT(`LMTP2NNTP_MAILER_PATH',         `/usr/local/bin/lmtp2nntp')
   _DEFIFNOT(`LMTP2NNTP_MAILER_FLAGS',        `mDFMuXz')
  -_DEFIFNOT(`LMTP2NNTP_MAILER_MAX',          `800000')
  +_DEFIFNOT(`LMTP2NNTP_MAILER_ARGS',         `')
  +_DEFIFNOT(`LMTP2NNTP_MAILER_BINDADDR',     '0.0.0.0')
   _DEFIFNOT(`LMTP2NNTP_MAILER_DELIVERYMODE', `post')
   _DEFIFNOT(`LMTP2NNTP_MAILER_GROUPMODE',    `envelope')
  -_DEFIFNOT(`LMTP2NNTP_MAILER_ARGS',         `')
  -_DEFIFNOT(`LMTP2NNTP_MAILER_GROUPS',       `\*')
  -
  +_DEFIFNOT(`LMTP2NNTP_MAILER_MAILFROM',     `.+@(?:[^.]+\.)+\.[^.]+')
  +_DEFIFNOT(`LMTP2NNTP_MAILER_NODENAME',     `confDOMAIN_NAME')
  +_DEFIFNOT(`LMTP2NNTP_MAILER_SIZE',         `800000')
  +_DEFIFNOT(`LMTP2NNTP_MAILER_LOGLEVEL',     `notice:/var/log/lmtp2nntp')
  +_DEFIFNOT(`LMTP2NNTP_MAILER_WAITTIME',     `60')
  +_DEFIFNOT(`LMTP2NNTP_MAILER_NEWSGROUP',    `\*')
   POPDIVERT
   
   #########################################
  @@ -25,11 +28,16 @@
               S=EnvFromSMTP/HdrFromSMTP, R=MasqSMTP, E=\r\n,
               L=990, T=DNS/RFC822/SMTP, M=LMTP2NNTP_MAILER_MAX,
               A=lmtp2nntp LMTP2NNTP_MAILER_ARGS dnl
  +                        -b LMTP2NNTP_MAILER_BINDADDR dnl
                           -d LMTP2NNTP_MAILER_DELIVERYMODE dnl
  -                        -h $h dnl
                           -g LMTP2NNTP_MAILER_GROUPMODE dnl
  -                        LMTP2NNTP_MAILER_GROUPS
  -
  +                        -h $h dnl
  +                        -m LMTP2NNTP_MAILER_MAILFROM dnl
  +                        -n LMTP2NNTP_MAILER_NODENAME dnl
  +                        -s LMTP2NNTP_MAILER_SIZE dnl
  +                        -l LMTP2NNTP_MAILER_LOGLEVEL dnl
  +                        -w LMTP2NNTP_MAILER_WAITTIME dnl
  +                        LMTP2NNTP_MAILER_NEWSGROUP
   ______________________________________________________________________
   
   Add to your sendmail.m4 (or sendmail.mc) the following entry:
  @@ -45,15 +53,15 @@
   Add to your virtualusertable:
   ______________________________________________________________________
   
  -posting@dev12.dev.de.cw.net    posting@news-posting
  -posting+*@dev12.dev.de.cw.net  %2@news-posting
  -@news.dev.de.cw.net            %1@news-posting
  +posting@gateway.example.com    posting@lmtp2nntp.invalid
  +posting+*@gateway.example.com  %2@lmtp2nntp.invalid
  +@news.example.com              %1@lmtp2nntp.invalid
   ______________________________________________________________________
   
   
   Add to your mailertable:
   ______________________________________________________________________
   
  -news-posting    lmtp2nntp:news.de.cw.net
  +lmtp2nntp.invalid    lmtp2nntp:news.example.com
   ______________________________________________________________________
   

From ossp-cvs-owner@ossp.org  Thu Sep 13 15:45:14 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8DDjDA98929; Thu, 13 Sep 2001 15:45:13 +0200 (CEST)
Date: Thu, 13 Sep 2001 15:45:13 +0200 (CEST)
Message-Id: <200109131345.f8DDjDA98929@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp AUTHORS INSTALL Makefile.in NEWS README...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   13-Sep-2001 15:45:13
  Branch: HEAD                             Handle: 197001010100001000385112

  Modified files:
    ossp-pkg/lmtp2nntp      AUTHORS INSTALL Makefile.in NEWS README THANKS
                            lmtp2nntp.c lmtp2nntp.pod
  Removed files:
    ossp-pkg/lmtp2nntp      argz.html lmtp.pod shpat_match.3

  Log:
    revamping and polishing documentation files for release

  Summary:
    Revision    Changes     Path
    1.3         +9  -2      ossp-pkg/lmtp2nntp/AUTHORS
    1.6         +116 -63    ossp-pkg/lmtp2nntp/INSTALL
    1.23        +1  -1      ossp-pkg/lmtp2nntp/Makefile.in
    1.2         +9  -3      ossp-pkg/lmtp2nntp/NEWS
    1.6         +51 -11     ossp-pkg/lmtp2nntp/README
    1.2         +10 -3      ossp-pkg/lmtp2nntp/THANKS
    NONE        +0  -238    ossp-pkg/lmtp2nntp/argz.html
    NONE        +0  -200    ossp-pkg/lmtp2nntp/lmtp.pod
    1.61        +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp.c
    1.21        +15 -46     ossp-pkg/lmtp2nntp/lmtp2nntp.pod
    NONE        +0  -296    ossp-pkg/lmtp2nntp/shpat_match.3
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/AUTHORS
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 AUTHORS
  --- ossp-pkg/lmtp2nntp/AUTHORS	2001/09/11 06:43:13	1.2
  +++ ossp-pkg/lmtp2nntp/AUTHORS	2001/09/13 13:45:12	1.3
  @@ -1,11 +1,18 @@
   
  +   _           _        ____              _         
  +  | |_ __ ___ | |_ _ __|___ \ _ __  _ __ | |_ _ __  
  +  | | '_ ` _ \| __| '_ \ __) | '_ \| '_ \| __| '_ \ 
  +  | | | | | | | |_| |_) / __/| | | | | | | |_| |_) |
  +  |_|_| |_| |_|\__| .__/_____|_| |_|_| |_|\__| .__/ 
  +                  |_|                        |_|    
  +
  +  OSSP lmtp2nntp - Mail to News Gateway
  +  
     AUTHORS
  -  =======
   
     This is a list of authors who have written or 
     edited major parts of the OSSP lmtp2nntp sources.
   
     Ralf S. Engelschall   <ralf.engelschall@cw.com>
     Thomas Lotterer       <thomas.lotterer@cw.com>
  -  Michael Schloh        <michael.schloh@cw.com>
   
  Index: ossp-pkg/lmtp2nntp/INSTALL
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 INSTALL
  --- ossp-pkg/lmtp2nntp/INSTALL	2001/09/13 12:57:49	1.5
  +++ ossp-pkg/lmtp2nntp/INSTALL	2001/09/13 13:45:12	1.6
  @@ -1,67 +1,120 @@
  -   
  -Sendmail Integration
  -====================
  -
  -Create an cf/mailer/lmtp2nntp.m4 files with the following contents:
  -______________________________________________________________________
  -
  -PUSHDIVERT(-1)
  -_DEFIFNOT(`LMTP2NNTP_MAILER_PATH',         `/usr/local/bin/lmtp2nntp')
  -_DEFIFNOT(`LMTP2NNTP_MAILER_FLAGS',        `mDFMuXz')
  -_DEFIFNOT(`LMTP2NNTP_MAILER_ARGS',         `')
  -_DEFIFNOT(`LMTP2NNTP_MAILER_BINDADDR',     '0.0.0.0')
  -_DEFIFNOT(`LMTP2NNTP_MAILER_DELIVERYMODE', `post')
  -_DEFIFNOT(`LMTP2NNTP_MAILER_GROUPMODE',    `envelope')
  -_DEFIFNOT(`LMTP2NNTP_MAILER_MAILFROM',     `.+@(?:[^.]+\.)+\.[^.]+')
  -_DEFIFNOT(`LMTP2NNTP_MAILER_NODENAME',     `confDOMAIN_NAME')
  -_DEFIFNOT(`LMTP2NNTP_MAILER_SIZE',         `800000')
  -_DEFIFNOT(`LMTP2NNTP_MAILER_LOGLEVEL',     `notice:/var/log/lmtp2nntp')
  -_DEFIFNOT(`LMTP2NNTP_MAILER_WAITTIME',     `60')
  -_DEFIFNOT(`LMTP2NNTP_MAILER_NEWSGROUP',    `\*')
  -POPDIVERT
  -
  -#########################################
  -###   LMTP2NNTP Mailer specification  ###
  -#########################################
  -
  -Mlmtp2nntp, P=LMTP2NNTP_MAILER_PATH, F=LMTP2NNTP_MAILER_FLAGS,
  -            S=EnvFromSMTP/HdrFromSMTP, R=MasqSMTP, E=\r\n,
  -            L=990, T=DNS/RFC822/SMTP, M=LMTP2NNTP_MAILER_MAX,
  -            A=lmtp2nntp LMTP2NNTP_MAILER_ARGS dnl
  -                        -b LMTP2NNTP_MAILER_BINDADDR dnl
  -                        -d LMTP2NNTP_MAILER_DELIVERYMODE dnl
  -                        -g LMTP2NNTP_MAILER_GROUPMODE dnl
  -                        -h $h dnl
  -                        -m LMTP2NNTP_MAILER_MAILFROM dnl
  -                        -n LMTP2NNTP_MAILER_NODENAME dnl
  -                        -s LMTP2NNTP_MAILER_SIZE dnl
  -                        -l LMTP2NNTP_MAILER_LOGLEVEL dnl
  -                        -w LMTP2NNTP_MAILER_WAITTIME dnl
  -                        LMTP2NNTP_MAILER_NEWSGROUP
  -______________________________________________________________________
  -
  -Add to your sendmail.m4 (or sendmail.mc) the following entry:
  -
  -______________________________________________________________________
  -
  -dnl #  Mailer: LMTP2NNTP (mail to news gateway)
  -dnl define(`LMTP2NNTP_MAILER_PATH', `/path/to/your/lmtp2nntp')
  -dnl MAILER(lmtp2nntp)
  -______________________________________________________________________
  -
  -
  -Add to your virtualusertable:
  -______________________________________________________________________
  -
  -posting@gateway.example.com    posting@lmtp2nntp.invalid
  -posting+*@gateway.example.com  %2@lmtp2nntp.invalid
  -@news.example.com              %1@lmtp2nntp.invalid
  -______________________________________________________________________
   
  +   _           _        ____              _         
  +  | |_ __ ___ | |_ _ __|___ \ _ __  _ __ | |_ _ __  
  +  | | '_ ` _ \| __| '_ \ __) | '_ \| '_ \| __| '_ \ 
  +  | | | | | | | |_| |_) / __/| | | | | | | |_| |_) |
  +  |_|_| |_| |_|\__| .__/_____|_| |_|_| |_|\__| .__/ 
  +                  |_|                        |_|    
  +
  +  OSSP lmtp2nntp - Mail to News Gateway
  +
  +  INSTALLATION
  +
  +  To install OSSP lmtp2nntp into /path/to/lmtp2nntp/{bin,man}/ perform
  +  the following steps in your shell:
  +      
  +    $ ./configure --prefix=/path/to/lmtp2nntp
  +    $ make
  +    $ make check
  +    $ make install
  +
  +  CONFIGURATION
  +
  +  In order to use OSSP lmtp2nntp, the program has to be integrated into
  +  a Mail Transfer Agent (MTA) which speaks Local Mail Transfer Protocol
  +  (LMTP). OSSP lmtp2nntp was developed with Sendmail 8.11, but should
  +  also work with other MTAs who provide an LMTP interface. The detailed
  +  integration into Sendmail 8.11 is shown below.
  +
  +  Sendmail Integration
  +
  +  1. Create a "cf/mailer/lmtp2nntp.m4" macro file with the following contents:
  +
  +     | PUSHDIVERT(-1)
  +     | _DEFIFNOT(`LMTP2NNTP_MAILER_PATH',         `/usr/local/bin/lmtp2nntp')
  +     | _DEFIFNOT(`LMTP2NNTP_MAILER_FLAGS',        `mDFMuXz')
  +     | _DEFIFNOT(`LMTP2NNTP_MAILER_ARGS',         `')
  +     | _DEFIFNOT(`LMTP2NNTP_MAILER_BINDADDR',     '0.0.0.0')
  +     | _DEFIFNOT(`LMTP2NNTP_MAILER_DELIVERYMODE', `post')
  +     | _DEFIFNOT(`LMTP2NNTP_MAILER_GROUPMODE',    `envelope')
  +     | _DEFIFNOT(`LMTP2NNTP_MAILER_MAILFROM',     `.+@(?:[^.]+\.)+\.[^.]+')
  +     | _DEFIFNOT(`LMTP2NNTP_MAILER_NODENAME',     `confDOMAIN_NAME')
  +     | _DEFIFNOT(`LMTP2NNTP_MAILER_SIZE',         `800000')
  +     | _DEFIFNOT(`LMTP2NNTP_MAILER_LOGLEVEL',     `notice:/var/log/lmtp2nntp')
  +     | _DEFIFNOT(`LMTP2NNTP_MAILER_WAITTIME',     `60')
  +     | _DEFIFNOT(`LMTP2NNTP_MAILER_NEWSGROUP',    `\*')
  +     | POPDIVERT
  +     |   
  +     | #########################################
  +     | ###   LMTP2NNTP Mailer specification  ###
  +     | #########################################
  +     | 
  +     | Mlmtp2nntp, P=LMTP2NNTP_MAILER_PATH, F=LMTP2NNTP_MAILER_FLAGS,
  +     |             S=EnvFromSMTP/HdrFromSMTP, R=MasqSMTP, E=\r\n,
  +     |             L=990, T=DNS/RFC822/SMTP, M=LMTP2NNTP_MAILER_MAX,
  +     |             A=lmtp2nntp LMTP2NNTP_MAILER_ARGS dnl
  +     |                         -b LMTP2NNTP_MAILER_BINDADDR dnl
  +     |                         -d LMTP2NNTP_MAILER_DELIVERYMODE dnl
  +     |                         -g LMTP2NNTP_MAILER_GROUPMODE dnl
  +     |                         -h $h dnl
  +     |                         -m LMTP2NNTP_MAILER_MAILFROM dnl
  +     |                         -n LMTP2NNTP_MAILER_NODENAME dnl
  +     |                         -s LMTP2NNTP_MAILER_SIZE dnl
  +     |                         -l LMTP2NNTP_MAILER_LOGLEVEL dnl
  +     |                         -w LMTP2NNTP_MAILER_WAITTIME dnl
  +     |                         LMTP2NNTP_MAILER_NEWSGROUP
  +
  +     This changes nothing in your Sendmail configuration, but just adds
  +     a new mailer named "lmtp2nntp" to Sendmail.
  +
  +  2. Add to your Sendmail M4 configuration (file "sendmail.m4" or
  +     "sendmail.mc" according to your installation) the following entry:
  +
  +     | dnl #  Mailer: LMTP2NNTP (mail to news gateway)
  +     | define(`LMTP2NNTP_MAILER_PATH', `/path/to/lmtp2nntp/bin/lmtp2nntp')
  +     | MAILER(lmtp2nntp)
  +
  +     This defines the new "lmtp2nntp" mailer in your Sendmail
  +     configuration, but still does not activate it. Additionally feel
  +     free to overwrite more LMTP2NNTP_MAILER_XXXX variables in order
  +     to adjust the run-time behaviour of OSSP lmtp2nntp. See the
  +     lmtp2nntp(1) manual page for more details about the commmand line
  +     parameters.
  +
  +  3. Add the following entries to both your virtual user table (file
  +     "virtusertable") and your mailer table (file "mailertable") in order
  +     to finally activate the mail to news gateway:
  +
  +     virtusertable:
  +
  +     | posting+*@gateway.example.com  %2@lmtp2nntp.invalid
  +
  +     mailertable:
  +
  +     | lmtp2nntp.invalid              lmtp2nntp:news.example.com
  +
  +     Notice that we use the RFC2606 top-level domain name ".invalid"
  +     for the internal mapping between virtual user table and the
  +     mailer table. This is neccessary because Sendmail cannot directly
  +     map individual recipient mailbox addresses to outgoing mailers.
  +
  +     In this example configrution we assumed that the machine
  +     "gateway.example.com" is the FQDN of machine running Sendmail
  +     and OSSP lmtp2nntp and "news.example.com" is the remote Usenet
  +     News server speaking NNTP. This means that mails addressed to
  +     "posting+foo.bar@gateway.example.com" are posted via NNTP as news
  +     articles into the newsgroup foo.bar on "news.example.com".
  +
  +     Additionally, if just the MX DNS record for "news.example.com"
  +     points to the address of "gateway.example.com" you can add the
  +     following additional entry to your virtual user table in order
  +     to let "news.example.com" virtually provide mail to news gateway
  +     functionality:
   
  -Add to your mailertable:
  -______________________________________________________________________
  +     virtusertable:
   
  -lmtp2nntp.invalid    lmtp2nntp:news.example.com
  -______________________________________________________________________
  +     | @news.example.com              %1@lmtp2nntp.invalid
  +
  +     Notice that there are more delivery modes supported by OSSP
  +     lmtp2nntp. Refer to the lmtp2nntp(1) manual page for more details.
   
  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	2001/09/13 12:21:34	1.22
  +++ ossp-pkg/lmtp2nntp/Makefile.in	2001/09/13 13:45:12	1.23
  @@ -116,7 +116,7 @@
   	@$(SHTOOL) fixperm -v .; \
   	V=`$(SHTOOL) version -lc -dshort version.c`; \
   	$(SHTOOL) tarball -o lmtp2nntp-$${V}.tar.gz -d lmtp2nntp-$${V} -u ossp -g ossp \
  -	                  -e 'CVS,\.cvsignore,\.[ao],^\.,/\.,autogen.sh,*.tar.gz,*.bak' -c 'gzip --best' .
  +	                  -e 'CVS,\.cvsignore,\.[ao],^\.,/\.,autogen.sh,*.tar.gz,*.bak,TODO' -c 'gzip --best' .
   
   check: lmtp2nntp
   	@./test.sh
  Index: ossp-pkg/lmtp2nntp/NEWS
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 NEWS
  --- ossp-pkg/lmtp2nntp/NEWS	2001/09/11 06:43:13	1.1
  +++ ossp-pkg/lmtp2nntp/NEWS	2001/09/13 13:45:12	1.2
  @@ -1,8 +1,14 @@
   
  -  NEWS
  -  ====
  +   _           _        ____              _         
  +  | |_ __ ___ | |_ _ __|___ \ _ __  _ __ | |_ _ __  
  +  | | '_ ` _ \| __| '_ \ __) | '_ \| '_ \| __| '_ \ 
  +  | | | | | | | |_| |_) / __/| | | | | | | |_| |_) |
  +  |_|_| |_| |_|\__| .__/_____|_| |_|_| |_|\__| .__/ 
  +                  |_|                        |_|    
  +
  +  OSSP lmtp2nntp - Mail to News Gateway
   
  -  OSSP lmtp2nntp - mail to news gateway
  +  NEWS
   
     This is the initial public release. Thanks to Cable & Wireless Deutschland
     GmbH for supporting open source software. Those folks who tested and
  Index: ossp-pkg/lmtp2nntp/README
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 README
  --- ossp-pkg/lmtp2nntp/README	2001/09/11 06:43:13	1.5
  +++ ossp-pkg/lmtp2nntp/README	2001/09/13 13:45:12	1.6
  @@ -1,15 +1,55 @@
   
  -  README
  -  ======
  +   _           _        ____              _         
  +  | |_ __ ___ | |_ _ __|___ \ _ __  _ __ | |_ _ __  
  +  | | '_ ` _ \| __| '_ \ __) | '_ \| '_ \| __| '_ \ 
  +  | | | | | | | |_| |_) / __/| | | | | | | |_| |_) |
  +  |_|_| |_| |_|\__| .__/_____|_| |_|_| |_|\__| .__/ 
  +                  |_|                        |_|    
   
  -  OSSP lmtp2nntp - mail to news gateway
  +  OSSP lmtp2nntp - Mail to News Gateway
  +  Version 0.1.0 (08-Sep-2001)
   
  -  The lmtp2nntp program is a LMTP service which is usually invoked by a MTA.
  -  Input messages get their headers slightly reformatted to match network news
  -  article format. The article is then posted or fed into a NNTP service.
  -  Delivery must take place immediately or the transaction fails.  A LMTP
  -  service relies on the queuing capabilities of its MTA. To support this, the
  -  program returns proper delivery status notification which indicates
  -  successful completed action, persistent transient failure or permanent
  -  failure.
  +  ABSTRACT
  +
  +  The OSSP lmtp2nntp program is an LMTP service for use in conjunction
  +  with an MTA (like Sendmail), providing a reliable real-time mail to news
  +  gateway. Input messages get their headers slightly reformatted to match
  +  Usenet news article format. The article is then posted or feeded into
  +  a remote NNTP service (like INN). Delivery must take place immediately
  +  or the transaction fails. OSSP lmtp2nntp relies on the queuing
  +  capabilities of the MTA in order to provide a fully reliable service.
  +  For this the program returns proper delivery status notification which
  +  indicates successful completed action, persistent transient failure or
  +  permanent failure.
  +
  +  COPYRIGHT AND LICENSE
  +
  +  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +
  +  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  +  mailer which forwards mails as Usenet news articles via NNTP.
  +  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +
  +  This program is free software; you can redistribute it and/or
  +  modify it under the terms of the GNU General Public  License
  +  as published by the Free Software Foundation; either version
  +  2.0 of the License, or (at your option) any later version.
  +
  +  This program is distributed in the hope that it will be useful,
  +  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +  General Public License for more details.
  +
  +  You should have received a copy of the GNU General Public License
  +  along with this file; if not, write to the Free Software
  +  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +  USA, or contact the OSSP project <ossp@ossp.org>.
  +
  +  HOME AND DOCUMENTATION
  +
  +  The documentation and latest release can be found on
  +
  +  o http://www.ossp.org/pkg/lmtp2nntp/ [STILL NOT AVAILABLE]
  +  o  ftp://ftp.ossp.org/pkg/lmtp2nntp/
   
  Index: ossp-pkg/lmtp2nntp/THANKS
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 THANKS
  --- ossp-pkg/lmtp2nntp/THANKS	2001/09/11 06:43:13	1.1
  +++ ossp-pkg/lmtp2nntp/THANKS	2001/09/13 13:45:12	1.2
  @@ -1,10 +1,17 @@
   
  +   _           _        ____              _         
  +  | |_ __ ___ | |_ _ __|___ \ _ __  _ __ | |_ _ __  
  +  | | '_ ` _ \| __| '_ \ __) | '_ \| '_ \| __| '_ \ 
  +  | | | | | | | |_| |_) / __/| | | | | | | |_| |_) |
  +  |_|_| |_| |_|\__| .__/_____|_| |_|_| |_|\__| .__/ 
  +                  |_|                        |_|    
  +
  +  OSSP lmtp2nntp - Mail to News Gateway
  +
     THANKS
  -  ======
   
     This is a list of contributors who have written or edited
     parts of the OSSP lmtp2nntp sources or inspired the AUTHORS.
   
  -  Christoph Schug <christoph.schug@cw.com>
  -  - LMTP idea as an alternative to piping into a script
  +  Christoph Schug    <christoph.schug@cw.com>
   
      Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.60 -r1.61 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/13 12:20:35	1.60
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/13 13:45:12	1.61
  @@ -83,7 +83,7 @@
   #define NUL '\0'
   #endif
   
  -#define ERR_EXECUTION -1
  +#define ERR_EXECUTION 1
   #define ERR_DELIVERY -2
   
   #define STDSTRLEN 128
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 lmtp2nntp.pod
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/09/12 07:29:23	1.20
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/09/13 13:45:12	1.21
  @@ -28,7 +28,7 @@
   
   =head1 NAME
   
  -B<lmtp2nntp> - mail to news gateway
  +B<OSSP lmtp2nntp> - mail to news gateway
   
   =head1 SYNOPSIS
   
  @@ -47,15 +47,18 @@
   
   =head1 DESCRIPTION
   
  -The B<lmtp2nntp> program is a LMTP service which is usually invoked by a MTA.
  -Input messages get their headers slightly reformatted to match network news
  -article format. The article is then posted or fed into a NNTP service.
  -Delivery must take place immediately or the transaction fails.  A LMTP service
  -relies on the queuing capabilities of its MTA. To support this, the program
  -returns proper delivery status notification which indicates successful
  -completed action, persistent transient failure or permanent failure.
  +The B<OSSP lmtp2nntp> program is an LMTP service for use in conjunction
  +with an MTA (like Sendmail), providing a reliable real-time mail to news
  +gateway. Input messages get their headers slightly reformatted to match
  +Usenet news article format. The article is then posted or feeded into
  +a remote NNTP service (like INN). Delivery must take place immediately
  +or the transaction fails. B<OSSP lmtp2nntp> relies on the queuing
  +capabilities of the MTA in order to provide a fully reliable service.
  +For this the program returns proper delivery status notification which
  +indicates successful completed action, persistent transient failure or
  +permanent failure.
   
  -The following options are available:
  +The following command line options and arguments are available:
   
   =over 4
   
  @@ -157,37 +160,11 @@
   
   =back
   
  -=head1 SENDMAIL INTEGRATION
  -
  -t.virtusertable
  -
  -    # mail to news gateway
  -    posting+*@first.gateway.example %2@lmtp2nntp
  -
  -t.mailertable
  -
  -    # mail to news gateway
  -    lmtp2nntp       lmtp2nntp:second.gateway.example
  -
  -sendmail.m4
  -
  -    dnl #  Mailer: LMTP2NNTP (mail to news gateway)
  -    define(`LMTP2NNTP_MAILER_PATH',         `confMYBINDIR/lmtp2nntp')
  -    define(`LMTP2NNTP_MAILER_MAX',          `100000')
  -    define(`LMTP2NNTP_MAILER_DELIVERYMODE', `post')
  -    define(`LMTP2NNTP_MAILER_GROUPMODE',    `envelope')
  -    define(`LMTP2NNTP_MAILER_ARGS',         `-t confMYVARDIR/lmtp2nntp.log')
  -    define(`LMTP2NNTP_MAILER_GROUPS',       `alt.test.\* alt.binaries.test')
  -    MAILER(lmtp2nntp)
  -
   =head1 DIAGNOSTICS
  -
  -when invoked as LMTP server
  -
  - 0 = successful execution
  - 1 = execution failed
   
  -Returning proper delivery status notification is part of the LMTP protocol.
  +If invoked it returns 0 on successful execution (not neccessarily
  +meaning successful delivery!) or 1 on failed execution. Returning proper
  +delivery status notification is part of the LMTP protocol.
   
   =head1 STANDARDS
   
  @@ -264,13 +241,5 @@
   
   =back
   
  -=head1 AUTHOR
  -
  - The OSSP Project
  - Cable & Wireless Deutschland GmbH
  - Thomas Lotterer
  - <thomas.lotterer@cw.com>
  -
   =cut
  -
   
  

From ossp-cvs-owner@ossp.org  Thu Sep 13 15:57:39 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8DDvcH00303; Thu, 13 Sep 2001 15:57:38 +0200 (CEST)
Date: Thu, 13 Sep 2001 15:57:38 +0200 (CEST)
Message-Id: <200109131357.f8DDvcH00303@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 aclocal.m4 configure.ac ossp-pkg/lmtp2nntp con...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   13-Sep-2001 15:57:38
  Branch: HEAD                             Handle: 2001091314573701

  Modified files:
    ossp-pkg/l2             aclocal.m4 configure.ac
    ossp-pkg/lmtp2nntp      configure.ac
    ossp-pkg/str            aclocal.m4 configure.ac

  Log:
    headline polishing

  Summary:
    Revision    Changes     Path
    1.5         +7  -3      ossp-pkg/l2/aclocal.m4
    1.8         +0  -1      ossp-pkg/l2/configure.ac
    1.11        +4  -1      ossp-pkg/lmtp2nntp/configure.ac
    1.4         +7  -3      ossp-pkg/str/aclocal.m4
    1.6         +0  -1      ossp-pkg/str/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/l2/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 aclocal.m4
  --- ossp-pkg/l2/aclocal.m4	2001/09/11 10:37:04	1.4
  +++ ossp-pkg/l2/aclocal.m4	2001/09/13 13:57:37	1.5
  @@ -43,7 +43,9 @@
   $1=`${CONFIG_SHELL-/bin/sh} $srcdir/config.sub $$1` || exit 1
   AC_SUBST($1)
   if test ".$enable_subdir" != .yes; then
  -    echo "Platform: ${TB}${$1}${TN}"
  +    if test ".$enable_headline" != .no; then
  +        echo "Platform: ${TB}${$1}${TN}"
  +    fi
   fi
   ])dnl
   
  @@ -77,8 +79,10 @@
       AC_SUBST($3_STR)
    
       #   friendly header ;)
  -    echo "Configuring ${TB}$1${TN} ($2), Version ${TB}${$3_STR}${TN}"
  -    echo "$5"
  +    if test ".$enable_headline" != .no; then
  +        echo "Configuring ${TB}$1${TN} ($2), Version ${TB}${$3_STR}${TN}"
  +        echo "$5"
  +    fi
   
       #   additionally find out hex version
       $3_HEX="`$ac_shtool version -l c -d hex $ac_srcdir/$4`"
  Index: ossp-pkg/l2/configure.ac
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 configure.ac
  --- ossp-pkg/l2/configure.ac	2001/09/13 12:19:45	1.7
  +++ ossp-pkg/l2/configure.ac	2001/09/13 13:57:37	1.8
  @@ -39,7 +39,6 @@
   AC_CONFIG_HEADER(l2_config.h)
   AC_PREFIX_DEFAULT(/usr/local)
   AC_PLATFORM(PLATFORM)
  -echo ""
   
   AC_MSG_CHECKING(whether to build C++ library)
   LIBL2XX_LA=""
  Index: ossp-pkg/lmtp2nntp/configure.ac
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 configure.ac
  --- ossp-pkg/lmtp2nntp/configure.ac	2001/09/11 10:24:54	1.10
  +++ ossp-pkg/lmtp2nntp/configure.ac	2001/09/13 13:57:37	1.11
  @@ -33,6 +33,8 @@
   AC_DIVERT_PUSH(NOTICE)
   V=`./shtool version -lc -dlong version.c`
   ./shtool echo -e "Configuring %BOSSP lmtp2nntp%b, Version %B${V}%b"
  +echo "Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>"
  +echo "Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>"
   AC_DIVERT_POP()
   
   dnl #   perform feature tests
  @@ -73,7 +75,8 @@
   LIBS="$LIBS $LIBS_EXTRA"
   
   enable_shared=no
  -export enable_shared
  +export enable_shared=yes
  +export enable_headline=no
   AC_CONFIG_SUBDIRS([$SUBDIR_STR $SUBDIR_L2])
   
   dnl #   standard output generation
  Index: ossp-pkg/str/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 aclocal.m4
  --- ossp-pkg/str/aclocal.m4	2001/08/16 12:16:51	1.3
  +++ ossp-pkg/str/aclocal.m4	2001/09/13 13:57:38	1.4
  @@ -15,7 +15,9 @@
   $1=`${CONFIG_SHELL-/bin/sh} $srcdir/config.sub $$1` || exit 1
   AC_SUBST($1)
   if test ".$enable_subdir" != .yes; then
  -    echo "Platform: ${TB}${$1}${TN}"
  +    if test ".$enable_headline" != .no; then
  +        echo "Platform: ${TB}${$1}${TN}"
  +    fi
   fi
   ])dnl
   
  @@ -49,8 +51,10 @@
       AC_SUBST($3_STR)
    
       #   friendly header ;)
  -    echo "Configuring ${TB}$1${TN} ($2), Version ${TB}${$3_STR}${TN}"
  -    echo "$5"
  +    if test ".$enable_headline" != .no; then
  +        echo "Configuring ${TB}$1${TN} ($2), Version ${TB}${$3_STR}${TN}"
  +        echo "$5"
  +    fi
   
       #   additionally find out hex version
       $3_HEX="`$ac_shtool version -l c -d hex $ac_srcdir/$4`"
  Index: ossp-pkg/str/configure.ac
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 configure.ac
  --- ossp-pkg/str/configure.ac	2001/09/11 10:40:56	1.5
  +++ ossp-pkg/str/configure.ac	2001/09/13 13:57:38	1.6
  @@ -13,7 +13,6 @@
   AC_CONFIG_HEADER(str_config.h)
   AC_PREFIX_DEFAULT(/usr/local)
   AC_PLATFORM(PLATFORM)
  -echo ""
   
   AC_SET_MAKE
   AC_PROG_CC

From ossp-cvs-owner@ossp.org  Thu Sep 13 15:59:53 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8DDxpx00501; Thu, 13 Sep 2001 15:59:51 +0200 (CEST)
Date: Thu, 13 Sep 2001 15:59:51 +0200 (CEST)
Message-Id: <200109131359.f8DDxpx00501@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp Makefile.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   13-Sep-2001 15:59:51
  Branch: HEAD                             Handle: 2001091314595100

  Modified files:
    ossp-pkg/lmtp2nntp      Makefile.in

  Log:
    update also README on 'make new-version'

  Summary:
    Revision    Changes     Path
    1.24        +3  -1      ossp-pkg/lmtp2nntp/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	2001/09/13 13:45:12	1.23
  +++ ossp-pkg/lmtp2nntp/Makefile.in	2001/09/13 13:59:51	1.24
  @@ -110,7 +110,9 @@
   	-rm -f shtool
   
   new-version:
  -	$(SHTOOL) version -lc -n lmtp2nntp -p lmtp2nntp_ -e version.c
  +	@$(SHTOOL) version -lc -n lmtp2nntp -p lmtp2nntp_ -e version.c; \
  +	V=`$(SHTOOL) version -lc -dlong version.c`; \
  +	sed -e "s/Version .*(.*)/Version $$V/g" <README >README.n && mv README.n README
   
   dist: distclean
   	@$(SHTOOL) fixperm -v .; \

From ossp-cvs-owner@ossp.org  Thu Sep 13 16:07:05 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8DE74K01748; Thu, 13 Sep 2001 16:07:04 +0200 (CEST)
Date: Thu, 13 Sep 2001 16:07:04 +0200 (CEST)
Message-Id: <200109131407.f8DE74K01748@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str ChangeLog
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   13-Sep-2001 16:07:04
  Branch: HEAD                             Handle: 2001091315070300

  Modified files:
    ossp-pkg/str            ChangeLog

  Log:
    update for release

  Summary:
    Revision    Changes     Path
    1.35        +11 -0      ossp-pkg/str/ChangeLog
  ____________________________________________________________________________

  Index: ossp-pkg/str/ChangeLog
  ============================================================
  $ cvs diff -u -r1.34 -r1.35 ChangeLog
  --- ossp-pkg/str/ChangeLog	2001/08/16 13:19:12	1.34
  +++ ossp-pkg/str/ChangeLog	2001/09/13 14:07:03	1.35
  @@ -9,6 +9,17 @@
   
    ChangeLog
   
  + Changes between 0.9.5 and 0.9.6 (16-Aug-2001 to 13-Sep-2001):
  +
  +   *) Fixed "str-config --version"
  +      [Ralf S. Engelschall]
  +
  +   *) Fixed various memory leaks.
  +      [Ralf S. Engelschall]
  +
  +   *) Add support for Dmalloc memory debugging library.
  +      [Ralf S. Engelschall]
  +
    Changes between 0.9.4 and 0.9.5 (14-Jul-2000 to 16-Aug-2001):
      
      *) Fix return code documentation of str_parse(): it -1 (error), 0 

From ossp-cvs-owner@ossp.org  Thu Sep 13 16:12:31 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8DECUK02440; Thu, 13 Sep 2001 16:12:30 +0200 (CEST)
Date: Thu, 13 Sep 2001 16:12:30 +0200 (CEST)
Message-Id: <200109131412.f8DECUK02440@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str configure.ac
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   13-Sep-2001 16:12:30
  Branch: HEAD                             Handle: 2001091315123000

  Modified files:
    ossp-pkg/str            configure.ac

  Log:
    update for release

  Summary:
    Revision    Changes     Path
    1.7         +3  -2      ossp-pkg/str/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/str/configure.ac
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 configure.ac
  --- ossp-pkg/str/configure.ac	2001/09/13 13:57:38	1.6
  +++ ossp-pkg/str/configure.ac	2001/09/13 14:12:30	1.7
  @@ -7,9 +7,10 @@
   
   AC_INIT(README)
   AC_HEADLINE(dnl
  -Str, String Library, dnl
  +OSSP Str, String Library, dnl
   STR_VERSION, str_version.c, dnl
  -[Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>])
  +[Copyright (c) 1999-2001 The OSSP Project <http://www.ossp.org>
  +Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>])
   AC_CONFIG_HEADER(str_config.h)
   AC_PREFIX_DEFAULT(/usr/local)
   AC_PLATFORM(PLATFORM)

From ossp-cvs-owner@ossp.org  Thu Sep 13 16:12:59 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8DECxs02510; Thu, 13 Sep 2001 16:12:59 +0200 (CEST)
Date: Thu, 13 Sep 2001 16:12:59 +0200 (CEST)
Message-Id: <200109131412.f8DECxs02510@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str README str_version.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   13-Sep-2001 16:12:59
  Branch: HEAD                             Handle: 2001091315125800

  Modified files:
    ossp-pkg/str            README str_version.c

  Log:
    bump version for release

  Summary:
    Revision    Changes     Path
    1.16        +1  -1      ossp-pkg/str/README
    1.13        +9  -9      ossp-pkg/str/str_version.c
  ____________________________________________________________________________

  Index: ossp-pkg/str/README
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 README
  --- ossp-pkg/str/README	2001/08/16 13:22:21	1.15
  +++ ossp-pkg/str/README	2001/09/13 14:12:58	1.16
  @@ -5,7 +5,7 @@
     |____/ \__|_|   
                   
     Str - String Library                 
  -  Version 0.9.5 (16-Aug-2001)
  +  Version 0.9.6 (13-Sep-2001)
   
     ABSTRACT
   
  Index: ossp-pkg/str/str_version.c
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 str_version.c
  --- ossp-pkg/str/str_version.c	2001/08/16 13:22:21	1.12
  +++ ossp-pkg/str/str_version.c	2001/09/13 14:12:58	1.13
  @@ -8,7 +8,7 @@
   #ifndef _STR_VERSION_C_
   #define _STR_VERSION_C_
   
  -#define STR_VERSION 0x009205
  +#define STR_VERSION 0x009206
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _STR_VERSION_C_AS_HEADER_
   
   str_version_t str_version = {
  -    0x009205,
  -    "0.9.5",
  -    "0.9.5 (16-Aug-2001)",
  -    "This is Str, Version 0.9.5 (16-Aug-2001)",
  -    "Str 0.9.5 (16-Aug-2001)",
  -    "Str/0.9.5",
  -    "@(#)Str 0.9.5 (16-Aug-2001)",
  -    "$Id: str_version.c,v 1.12 2001/08/16 13:22:21 rse Exp $"
  +    0x009206,
  +    "0.9.6",
  +    "0.9.6 (13-Sep-2001)",
  +    "This is Str, Version 0.9.6 (13-Sep-2001)",
  +    "Str 0.9.6 (13-Sep-2001)",
  +    "Str/0.9.6",
  +    "@(#)Str 0.9.6 (13-Sep-2001)",
  +    "$Id: str_version.c,v 1.13 2001/09/13 14:12:58 rse Exp $"
   };
   
   #endif /* _STR_VERSION_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Thu Sep 13 16:22:04 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8DEM3E03750; Thu, 13 Sep 2001 16:22:03 +0200 (CEST)
Date: Thu, 13 Sep 2001 16:22:03 +0200 (CEST)
Message-Id: <200109131422.f8DEM3E03750@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 README l2_version.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   13-Sep-2001 16:22:03
  Branch: HEAD                             Handle: 2001091315220200

  Modified files:
    ossp-pkg/l2             README l2_version.c

  Log:
    bump for release

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/l2/README
    1.3         +5  -5      ossp-pkg/l2/l2_version.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/README
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 README
  --- ossp-pkg/l2/README	2001/09/08 21:04:58	1.3
  +++ ossp-pkg/l2/README	2001/09/13 14:22:02	1.4
  @@ -5,7 +5,7 @@
     |_____|_____|
                  
     L2 - Logging Library
  -  Version 0.1.0 (08-Sep-2001)
  +  Version 0.1.0 (13-Sep-2001)
   
     ABSTRACT
   
  Index: ossp-pkg/l2/l2_version.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2_version.c
  --- ossp-pkg/l2/l2_version.c	2001/09/08 21:04:58	1.2
  +++ ossp-pkg/l2/l2_version.c	2001/09/13 14:22:02	1.3
  @@ -34,12 +34,12 @@
   l2_version_t l2_version = {
       0x001200,
       "0.1.0",
  -    "0.1.0 (08-Sep-2001)",
  -    "This is L2, Version 0.1.0 (08-Sep-2001)",
  -    "L2 0.1.0 (08-Sep-2001)",
  +    "0.1.0 (13-Sep-2001)",
  +    "This is L2, Version 0.1.0 (13-Sep-2001)",
  +    "L2 0.1.0 (13-Sep-2001)",
       "L2/0.1.0",
  -    "@(#)L2 0.1.0 (08-Sep-2001)",
  -    "$Id: l2_version.c,v 1.2 2001/09/08 21:04:58 rse Exp $"
  +    "@(#)L2 0.1.0 (13-Sep-2001)",
  +    "$Id: l2_version.c,v 1.3 2001/09/13 14:22:02 rse Exp $"
   };
   
   #endif /* _L2_VERSION_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Thu Sep 13 16:24:51 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8DEOo204038; Thu, 13 Sep 2001 16:24:50 +0200 (CEST)
Date: Thu, 13 Sep 2001 16:24:50 +0200 (CEST)
Message-Id: <200109131424.f8DEOo204038@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO README configure.ac lmtp2nntp.c ...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   13-Sep-2001 16:24:50
  Branch: HEAD                             Handle: 2001091315244901

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO README configure.ac lmtp2nntp.c version.c

  Log:
    even more polishing for release

  Summary:
    Revision    Changes     Path
    1.37        +1  -3      ossp-pkg/lmtp2nntp/00TODO
    1.7         +1  -1      ossp-pkg/lmtp2nntp/README
    1.12        +3  -2      ossp-pkg/lmtp2nntp/configure.ac
    1.62        +2  -2      ossp-pkg/lmtp2nntp/lmtp2nntp.c
    1.9         +9  -9      ossp-pkg/lmtp2nntp/version.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.36 -r1.37 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	2001/09/12 09:58:22	1.36
  +++ ossp-pkg/lmtp2nntp/00TODO	2001/09/13 14:24:49	1.37
  @@ -1,7 +1,5 @@
   
  -- improve sendmail.m4 templates
  -
  -    **** DEVELOPMENT INFORMATION ****
  +  **** DEVELOPMENT INFORMATION ****
   
     Proposal for future URL-style logging option syntax
     -L streamlog
  Index: ossp-pkg/lmtp2nntp/README
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 README
  --- ossp-pkg/lmtp2nntp/README	2001/09/13 13:45:12	1.6
  +++ ossp-pkg/lmtp2nntp/README	2001/09/13 14:24:49	1.7
  @@ -7,7 +7,7 @@
                     |_|                        |_|    
   
     OSSP lmtp2nntp - Mail to News Gateway
  -  Version 0.1.0 (08-Sep-2001)
  +  Version 1.0.0 (13-Sep-2001)
   
     ABSTRACT
   
  Index: ossp-pkg/lmtp2nntp/configure.ac
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 configure.ac
  --- ossp-pkg/lmtp2nntp/configure.ac	2001/09/13 13:57:37	1.11
  +++ ossp-pkg/lmtp2nntp/configure.ac	2001/09/13 14:24:49	1.12
  @@ -75,8 +75,9 @@
   LIBS="$LIBS $LIBS_EXTRA"
   
   enable_shared=no
  -export enable_shared=yes
  -export enable_headline=no
  +export enable_shared
  +enable_headline=no
  +export enable_headline
   AC_CONFIG_SUBDIRS([$SUBDIR_STR $SUBDIR_L2])
   
   dnl #   standard output generation
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.61 -r1.62 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/13 13:45:12	1.61
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/13 14:24:49	1.62
  @@ -43,8 +43,8 @@
   /* library version check (compile-time) */
   #define  L2_VERSION_HEX_REQ 0x001200
   #define  L2_VERSION_STR_REQ "0.1.0"
  -#define STR_VERSION_HEX_REQ 0x009205
  -#define STR_VERSION_STR_REQ "0.9.5"
  +#define STR_VERSION_HEX_REQ 0x009206
  +#define STR_VERSION_STR_REQ "0.9.6"
   #ifdef L2_VERSION_HEX
   #if L2_VERSION_HEX < L2_VERSION_HEX_REQ
   #error "require a newer version of OSSP L2"
  Index: ossp-pkg/lmtp2nntp/version.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 version.c
  --- ossp-pkg/lmtp2nntp/version.c	2001/09/13 08:54:26	1.8
  +++ ossp-pkg/lmtp2nntp/version.c	2001/09/13 14:24:50	1.9
  @@ -8,7 +8,7 @@
   #ifndef _VERSION_C_
   #define _VERSION_C_
   
  -#define LMTP2NNTP_VERSION 0x009207
  +#define LMTP2NNTP_VERSION 0x100200
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _VERSION_C_AS_HEADER_
   
   lmtp2nntp_version_t lmtp2nntp_version = {
  -    0x009207,
  -    "0.9.7",
  -    "0.9.7 (13-Sep-2001)",
  -    "This is lmtp2nntp, Version 0.9.7 (13-Sep-2001)",
  -    "lmtp2nntp 0.9.7 (13-Sep-2001)",
  -    "lmtp2nntp/0.9.7",
  -    "@(#)lmtp2nntp 0.9.7 (13-Sep-2001)",
  -    "$Id: version.c,v 1.8 2001/09/13 08:54:26 thl Exp $"
  +    0x100200,
  +    "1.0.0",
  +    "1.0.0 (13-Sep-2001)",
  +    "This is lmtp2nntp, Version 1.0.0 (13-Sep-2001)",
  +    "lmtp2nntp 1.0.0 (13-Sep-2001)",
  +    "lmtp2nntp/1.0.0",
  +    "@(#)lmtp2nntp 1.0.0 (13-Sep-2001)",
  +    "$Id: version.c,v 1.9 2001/09/13 14:24:50 thl Exp $"
   };
   
   #endif /* _VERSION_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Thu Sep 13 16:44:41 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8DEieZ06595; Thu, 13 Sep 2001 16:44:40 +0200 (CEST)
Date: Thu, 13 Sep 2001 16:44:40 +0200 (CEST)
Message-Id: <200109131444.f8DEieZ06595@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 Makefile.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   13-Sep-2001 16:44:40
  Branch: HEAD                             Handle: 2001091315444000

  Modified files:
    ossp-pkg/l2             Makefile.in

  Log:
    remove l2.h on 'make distclean'

  Summary:
    Revision    Changes     Path
    1.23        +1  -0      ossp-pkg/l2/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 Makefile.in
  --- ossp-pkg/l2/Makefile.in	2001/09/13 08:47:17	1.22
  +++ ossp-pkg/l2/Makefile.in	2001/09/13 14:44:40	1.23
  @@ -248,6 +248,7 @@
   	$(RM) Makefile
   	$(RM) l2_test.log
   	$(RM) l2_ut_pcre_gen l2_ut_pcre_tab.c
  +	$(RM) l2.h
   
   #   remove everything which can be regenerated
   #   by "autoconf && autoheader && ./configure && make all"

From ossp-cvs-owner@ossp.org  Thu Sep 13 18:18:44 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8DGIh417377; Thu, 13 Sep 2001 18:18:43 +0200 (CEST)
Date: Thu, 13 Sep 2001 18:18:43 +0200 (CEST)
Message-Id: <200109131618.f8DGIh417377@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_stream.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   13-Sep-2001 18:18:43
  Branch: HEAD                             Handle: 2001091317184200

  Modified files:
    ossp-pkg/l2             l2_stream.c

  Log:
    Remove redundant runtime variable checks, added level variable check where it
    is needed most.

  Summary:
    Revision    Changes     Path
    1.19        +1  -5      ossp-pkg/l2/l2_stream.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_stream.c
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 l2_stream.c
  --- ossp-pkg/l2/l2_stream.c	2001/09/13 12:35:52	1.18
  +++ ossp-pkg/l2/l2_stream.c	2001/09/13 16:18:42	1.19
  @@ -128,10 +128,6 @@
       va_list ap;
       l2_result_t rv;
   
  -    /* argument sanity check */
  -    if (st == NULL || level == 0 || fmt == NULL)
  -        return L2_ERR_ARG;
  -
       /* pass-through to va_list-based variant */
       va_start(ap, fmt);
       rv = l2_stream_vlog(st, level, fmt, ap);
  @@ -188,7 +184,7 @@
       l2_util_format_t vfmt;
   
       /* argument sanity check */
  -    if (st == NULL || fmt == NULL || ap == NULL)
  +    if (st == NULL || level == 0 || fmt == NULL || ap == NULL)
           return L2_ERR_ARG;
   
       /* make sure only a single level is specified */

From ossp-cvs-owner@ossp.org  Thu Sep 13 18:19:08 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8DGJ7f17448; Thu, 13 Sep 2001 18:19:07 +0200 (CEST)
Date: Thu, 13 Sep 2001 18:19:07 +0200 (CEST)
Message-Id: <200109131619.f8DGJ7f17448@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 aclocal.m4 l2_ch_socket.c l2_sockmon.c l2_test...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   13-Sep-2001 18:19:07
  Branch: HEAD                             Handle: 2001091317190600

  Modified files:
    ossp-pkg/l2             aclocal.m4 l2_ch_socket.c l2_sockmon.c l2_test.c

  Log:
    Added debug infrastructure, assertions, fixed one bug.

  Summary:
    Revision    Changes     Path
    1.6         +1  -0      ossp-pkg/l2/aclocal.m4
    1.27        +1  -0      ossp-pkg/l2/l2_ch_socket.c
    1.7         +3  -5      ossp-pkg/l2/l2_sockmon.c
    1.20        +1  -1      ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 aclocal.m4
  --- ossp-pkg/l2/aclocal.m4	2001/09/13 13:57:37	1.5
  +++ ossp-pkg/l2/aclocal.m4	2001/09/13 16:19:06	1.6
  @@ -139,6 +139,7 @@
           *-pipe* ) ;;
                 * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
       esac
  +    AC_COMPILER_OPTION(defdbg, -DDEBUG, -DDEBUG, CFLAGS="$CFLAGS -DDEBUG")
       AC_COMPILER_OPTION(ggdb3, -ggdb3, -ggdb3, CFLAGS="$CFLAGS -ggdb3")
       CFLAGS="$CFLAGS -pedantic"
       CFLAGS="$CFLAGS -Wall"
  Index: ossp-pkg/l2/l2_ch_socket.c
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 l2_ch_socket.c
  --- ossp-pkg/l2/l2_ch_socket.c	2001/09/13 12:19:45	1.26
  +++ ossp-pkg/l2/l2_ch_socket.c	2001/09/13 16:19:06	1.27
  @@ -53,6 +53,7 @@
       const char      *pszIndex     = NULL;    /* To index IPv6 validity */
       char            *pszNextfield = "";      /* For IPv6 address trans */
   
  +    ASSERT(pvMemref);
       if (iFamily == AF_INET) {
           if (inet_aton(pszAddress, &IP4Addr)) {
               memcpy(pvMemref, &IP4Addr, sizeof(struct in_addr));
  Index: ossp-pkg/l2/l2_sockmon.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 l2_sockmon.c
  --- ossp-pkg/l2/l2_sockmon.c	2001/09/10 06:43:10	1.6
  +++ ossp-pkg/l2/l2_sockmon.c	2001/09/13 16:19:06	1.7
  @@ -33,6 +33,8 @@
   #include <stdio.h>
   #include <errno.h>
   
  +#include "l2.h"
  +
   #define BACKLOG 1024    /* max # pending connections */
   #define BUFFSIZ 256     /* max string size           */
   
  @@ -41,8 +43,7 @@
       int  i        = 0;
       char *pszTemp = NULL;
   
  -/*    ASSERT(pszIn);*/
  -/*    ASSERT(*pszIn);*/
  +    ASSERT(pszIn);
   
       if ((pszTemp = (char *)strdup(pszIn)) == NULL)
           return NULL;
  @@ -60,8 +61,6 @@
       char pszBuf[BUFFSIZ];
       int  cc;
   
  -/*    ASSERT(iSock);*/
  -
       while (1) { /* Exits when read finishes */
           cc = read(iSock, pszBuf, sizeof (pszBuf));
           if (cc == -1) {
  @@ -96,7 +95,6 @@
       int                 iTrans,   cc;
       socklen_t           faddrlen;
   
  -/*    ASSERT(iPort);*/
       /* Set up an IPv4 TCP socket to listen on for connections. */
       if (iFamily == AF_INET6)
       {
  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/09/12 13:50:46	1.19
  +++ ossp-pkg/l2/l2_test.c	2001/09/13 16:19:06	1.20
  @@ -100,7 +100,7 @@
       if (l2_channel_open(chSock) != L2_OK)
           die("failed to open socket channel");
   
  -    if (l2_stream_channel(st, chSock, L2_LEVEL_UPTO(L2_LEVEL_WARNING)) != L2_OK)
  +    if (l2_stream_channel(st, chSock, L2_LEVEL_UPTO(L2_LEVEL_WARNING), L2_LEVEL_NONE) != L2_OK)
           die("failed to attach first channel into stream");
   #endif
   

From ossp-cvs-owner@ossp.org  Thu Sep 13 18:32:13 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8DGWDb19065; Thu, 13 Sep 2001 18:32:13 +0200 (CEST)
Date: Thu, 13 Sep 2001 18:32:13 +0200 (CEST)
Message-Id: <200109131632.f8DGWDb19065@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.h.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   13-Sep-2001 18:32:13
  Branch: HEAD                             Handle: 2001091317321200

  Modified files:
    ossp-pkg/l2             l2.h.in

  Log:
    Added assertion macro for debugging purposes.

  Summary:
    Revision    Changes     Path
    1.7         +13 -0      ossp-pkg/l2/l2.h.in
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2.h.in
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 l2.h.in
  --- ossp-pkg/l2/l2.h.in	2001/09/12 13:50:46	1.6
  +++ ossp-pkg/l2/l2.h.in	2001/09/13 16:32:12	1.7
  @@ -64,6 +64,19 @@
   #define TRUE (!FALSE)
   #endif
   
  +#ifndef DEBUG
  +#define ASSERT(expr) ((voir)0)
  +#else
  +#define ASSERT(expr)\
  +        do {\
  +            if (!(expr)) {\
  +                fprintf(stderr, "Assertion failed in %s line %d! ", __FILE__, __LINE__);\
  +                exit(1);\
  +            }\
  +        }\
  +        while (0)
  +#endif
  +
   /* forward declarations for opaque data structures */
   union  l2_context_un;
   struct l2_param_st;

From ossp-cvs-owner@ossp.org  Thu Sep 13 20:40:21 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8DIeKL33348; Thu, 13 Sep 2001 20:40:20 +0200 (CEST)
Date: Thu, 13 Sep 2001 20:40:20 +0200 (CEST)
Message-Id: <200109131840.f8DIeKL33348@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp INSTALL
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   13-Sep-2001 20:40:20
  Branch: HEAD                             Handle: 2001091319401900

  Modified files:
    ossp-pkg/lmtp2nntp      INSTALL

  Log:
    fix email address regex

  Summary:
    Revision    Changes     Path
    1.7         +1  -1      ossp-pkg/lmtp2nntp/INSTALL
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/INSTALL
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 INSTALL
  --- ossp-pkg/lmtp2nntp/INSTALL	2001/09/13 13:45:12	1.6
  +++ ossp-pkg/lmtp2nntp/INSTALL	2001/09/13 18:40:19	1.7
  @@ -37,7 +37,7 @@
        | _DEFIFNOT(`LMTP2NNTP_MAILER_BINDADDR',     '0.0.0.0')
        | _DEFIFNOT(`LMTP2NNTP_MAILER_DELIVERYMODE', `post')
        | _DEFIFNOT(`LMTP2NNTP_MAILER_GROUPMODE',    `envelope')
  -     | _DEFIFNOT(`LMTP2NNTP_MAILER_MAILFROM',     `.+@(?:[^.]+\.)+\.[^.]+')
  +     | _DEFIFNOT(`LMTP2NNTP_MAILER_MAILFROM',     `^.+@(?:[^.]+\.)+[^.]+$')
        | _DEFIFNOT(`LMTP2NNTP_MAILER_NODENAME',     `confDOMAIN_NAME')
        | _DEFIFNOT(`LMTP2NNTP_MAILER_SIZE',         `800000')
        | _DEFIFNOT(`LMTP2NNTP_MAILER_LOGLEVEL',     `notice:/var/log/lmtp2nntp')

From ossp-cvs-owner@ossp.org  Thu Sep 13 20:51:42 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8DIpe034919; Thu, 13 Sep 2001 20:51:40 +0200 (CEST)
Date: Thu, 13 Sep 2001 20:51:40 +0200 (CEST)
Message-Id: <200109131851.f8DIpe034919@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp .cvsignore Makefile.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   13-Sep-2001 20:51:40
  Branch: HEAD                             Handle: 2001091319514000

  Modified files:
    ossp-pkg/lmtp2nntp      .cvsignore Makefile.in

  Log:
    Ops, lmtp2nntp's manual page should be in the Unix manual page section
    8 (where system tools are located) instead of 1 (where user tools are
    located).

  Summary:
    Revision    Changes     Path
    1.13        +1  -1      ossp-pkg/lmtp2nntp/.cvsignore
    1.25        +7  -7      ossp-pkg/lmtp2nntp/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/.cvsignore
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 .cvsignore
  --- ossp-pkg/lmtp2nntp/.cvsignore	2001/09/13 07:40:19	1.12
  +++ ossp-pkg/lmtp2nntp/.cvsignore	2001/09/13 18:51:40	1.13
  @@ -7,7 +7,7 @@
   config.h
   config.h.in
   lmtp2nntp
  -lmtp2nntp.1
  +lmtp2nntp.8
   lmtp2nntp-*.tar.gz
   dmalloc.log
   logfile
  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	2001/09/13 13:59:51	1.24
  +++ ossp-pkg/lmtp2nntp/Makefile.in	2001/09/13 18:51:40	1.25
  @@ -49,7 +49,7 @@
   
   SUBDIRS = @SUBDIR_STR@ @SUBDIR_L2@ 
   
  -all: _SUBDIRS_all lmtp2nntp lmtp2nntp.1
  +all: _SUBDIRS_all lmtp2nntp lmtp2nntp.8
   
   .c.o:
   	$(CC) $(CFLAGS) -c $<
  @@ -75,17 +75,17 @@
   $(PROG): Makefile $(OBJS) $(HDRS)
   	$(CC) $(LDFLAGS) -o $(PROG) $(OBJS) $(LIBS)
   
  -lmtp2nntp.1: lmtp2nntp.pod
  +lmtp2nntp.8: lmtp2nntp.pod
   	VS=`$(SHTOOL) version -lc -dshort version.c`; \
   	VL=`$(SHTOOL) version -lc -dlong version.c`; \
  -	$(POD2MAN) --section=1 --center="mail to news gateway" \
  +	$(POD2MAN) --section=8 --center="mail to news gateway" \
                  --release="$$VS" --date="$$VL" \
  -               lmtp2nntp.pod >lmtp2nntp.1 
  +               lmtp2nntp.pod >lmtp2nntp.8
   
   install: all
  -	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir) $(DESTDIR)$(mandir)/man1
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir) $(DESTDIR)$(mandir)/man8
   	$(SHTOOL) install -c -s -m 755 lmtp2nntp $(DESTDIR)$(bindir)/
  -	$(SHTOOL) install -c -m 644 lmtp2nntp.1 $(DESTDIR)$(mandir)/man1/
  +	$(SHTOOL) install -c -m 644 lmtp2nntp.8 $(DESTDIR)$(mandir)/man8/
   
   clean:
   	@$(MAKE) $(MFLAGS) _SUBDIRS_clean
  @@ -104,7 +104,7 @@
   
   realclean: distclean
   	@$(MAKE) $(MFLAGS) _SUBDIRS_realclean
  -	-rm -f lmtp2nntp.1
  +	-rm -f lmtp2nntp.8
   	-rm -f config.h.in
   	-rm -f configure
   	-rm -f shtool

From ossp-cvs-owner@ossp.org  Thu Sep 13 21:14:54 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8DJEr937518; Thu, 13 Sep 2001 21:14:53 +0200 (CEST)
Date: Thu, 13 Sep 2001 21:14:53 +0200 (CEST)
Message-Id: <200109131914.f8DJEr937518@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 autogen.sh
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   13-Sep-2001 21:14:53
  Branch: HEAD                             Handle: 2001091320145200

  Modified files:
    ossp-pkg/l2             autogen.sh

  Log:
    libtool 1.4.2 is the current version

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/l2/autogen.sh
  ____________________________________________________________________________

  Index: ossp-pkg/l2/autogen.sh
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 autogen.sh
  --- ossp-pkg/l2/autogen.sh	2001/09/04 09:14:12	1.3
  +++ ossp-pkg/l2/autogen.sh	2001/09/13 19:14:52	1.4
  @@ -31,7 +31,7 @@
   #   generator tools version sanity check
   for spec in \
       "autoconf   --version 4 2.52  2.5*" \
  -    "libtoolize --version 4 1.4   1.4*" \
  +    "libtoolize --version 4 1.4.2 1.4*" \
       "shtoolize  -v        3 1.5.4 1.5.*"
   do
       set -- $spec

From ossp-cvs-owner@ossp.org  Thu Sep 13 21:18:36 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8DJIZY38034; Thu, 13 Sep 2001 21:18:35 +0200 (CEST)
Date: Thu, 13 Sep 2001 21:18:35 +0200 (CEST)
Message-Id: <200109131918.f8DJIZY38034@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.h.in l2_ch_socket.c l2_p.h l2_sockmon.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   13-Sep-2001 21:18:35
  Branch: HEAD                             Handle: 2001091320183400

  Modified files:
    ossp-pkg/l2             l2.h.in l2_ch_socket.c l2_p.h l2_sockmon.c

  Log:
    use assert(3) instead of home-brewn stuff

  Summary:
    Revision    Changes     Path
    1.8         +0  -13     ossp-pkg/l2/l2.h.in
    1.28        +1  -1      ossp-pkg/l2/l2_ch_socket.c
    1.17        +5  -0      ossp-pkg/l2/l2_p.h
    1.8         +2  -1      ossp-pkg/l2/l2_sockmon.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2.h.in
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 l2.h.in
  --- ossp-pkg/l2/l2.h.in	2001/09/13 16:32:12	1.7
  +++ ossp-pkg/l2/l2.h.in	2001/09/13 19:18:34	1.8
  @@ -64,19 +64,6 @@
   #define TRUE (!FALSE)
   #endif
   
  -#ifndef DEBUG
  -#define ASSERT(expr) ((voir)0)
  -#else
  -#define ASSERT(expr)\
  -        do {\
  -            if (!(expr)) {\
  -                fprintf(stderr, "Assertion failed in %s line %d! ", __FILE__, __LINE__);\
  -                exit(1);\
  -            }\
  -        }\
  -        while (0)
  -#endif
  -
   /* forward declarations for opaque data structures */
   union  l2_context_un;
   struct l2_param_st;
  Index: ossp-pkg/l2/l2_ch_socket.c
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 l2_ch_socket.c
  --- ossp-pkg/l2/l2_ch_socket.c	2001/09/13 16:19:06	1.27
  +++ ossp-pkg/l2/l2_ch_socket.c	2001/09/13 19:18:34	1.28
  @@ -53,7 +53,7 @@
       const char      *pszIndex     = NULL;    /* To index IPv6 validity */
       char            *pszNextfield = "";      /* For IPv6 address trans */
   
  -    ASSERT(pvMemref);
  +    assert(pvMemref != NULL);
       if (iFamily == AF_INET) {
           if (inet_aton(pszAddress, &IP4Addr)) {
               memcpy(pvMemref, &IP4Addr, sizeof(struct in_addr));
  Index: ossp-pkg/l2/l2_p.h
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 l2_p.h
  --- ossp-pkg/l2/l2_p.h	2001/09/12 13:50:46	1.16
  +++ ossp-pkg/l2/l2_p.h	2001/09/13 19:18:34	1.17
  @@ -33,6 +33,11 @@
   #include <stdlib.h>
   #include <errno.h>
   
  +#ifndef DEBUG
  +#define NDEBUG
  +#endif
  +#include <assert.h>
  +
   #include "l2.h"
   #include "l2_config.h"
   #include "l2_ut_pcre.h"
  Index: ossp-pkg/l2/l2_sockmon.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 l2_sockmon.c
  --- ossp-pkg/l2/l2_sockmon.c	2001/09/13 16:19:06	1.7
  +++ ossp-pkg/l2/l2_sockmon.c	2001/09/13 19:18:34	1.8
  @@ -32,6 +32,7 @@
   #include <netinet/in.h>
   #include <stdio.h>
   #include <errno.h>
  +#include <assert.h>
   
   #include "l2.h"
   
  @@ -43,7 +44,7 @@
       int  i        = 0;
       char *pszTemp = NULL;
   
  -    ASSERT(pszIn);
  +    assert(pszIn != NULL);
   
       if ((pszTemp = (char *)strdup(pszIn)) == NULL)
           return NULL;

From ossp-cvs-owner@ossp.org  Thu Sep 13 21:20:49 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8DJKmm38228; Thu, 13 Sep 2001 21:20:48 +0200 (CEST)
Date: Thu, 13 Sep 2001 21:20:48 +0200 (CEST)
Message-Id: <200109131920.f8DJKmm38228@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.h.in l2_stream.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   13-Sep-2001 21:20:48
  Branch: HEAD                             Handle: 2001091320204800

  Modified files:
    ossp-pkg/l2             l2.h.in l2_stream.c

  Log:
    For consistency reasons provide a l2_stream_flush() function
    which allows one to flush all channel (stacks) in one action.

  Summary:
    Revision    Changes     Path
    1.9         +1  -0      ossp-pkg/l2/l2.h.in
    1.20        +18 -0      ossp-pkg/l2/l2_stream.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2.h.in
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 l2.h.in
  --- ossp-pkg/l2/l2.h.in	2001/09/13 19:18:34	1.8
  +++ ossp-pkg/l2/l2.h.in	2001/09/13 19:20:48	1.9
  @@ -208,6 +208,7 @@
   l2_result_t   l2_stream_levels     (l2_stream_t *st, unsigned int levelmask, unsigned int flushmask);
   l2_result_t   l2_stream_log        (l2_stream_t *st, l2_level_t level, const char *fmt, ...);
   l2_result_t   l2_stream_vlog       (l2_stream_t *st, l2_level_t level, const char *fmt, va_list ap);
  +l2_result_t   l2_stream_flush      (l2_stream_t *st);
   l2_result_t   l2_stream_destroy    (l2_stream_t *st);
   
   /* utility operations */
  Index: ossp-pkg/l2/l2_stream.c
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 l2_stream.c
  --- ossp-pkg/l2/l2_stream.c	2001/09/13 16:18:42	1.19
  +++ ossp-pkg/l2/l2_stream.c	2001/09/13 19:20:48	1.20
  @@ -232,6 +232,24 @@
       return rv;
   }
   
  +/* flush stream */
  +l2_result_t l2_stream_flush(l2_stream_t *st)
  +{
  +    int i;
  +    l2_result_t rv;
  +
  +    /* argument sanity check */
  +    if (st == NULL)
  +        return L2_ERR_ARG;
  +
  +    /* flush all attached channels */
  +    for (i = 0; i < L2_MAX_CHANNELS && st->channels[i].ch != NULL; i++)
  +        if ((rv = l2_channel_flush(st->channels[i].ch)) != L2_OK)
  +            return rv;
  +
  +    return L2_OK;
  +}
  +
   /* destroy stream */
   l2_result_t l2_stream_destroy(l2_stream_t *st)
   {

From ossp-cvs-owner@ossp.org  Thu Sep 13 21:21:23 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8DJLMC38299; Thu, 13 Sep 2001 21:21:22 +0200 (CEST)
Date: Thu, 13 Sep 2001 21:21:22 +0200 (CEST)
Message-Id: <200109131921.f8DJLMC38299@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   13-Sep-2001 21:21:22
  Branch: HEAD                             Handle: 2001091320212100

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    update TODO

  Summary:
    Revision    Changes     Path
    1.20        +0  -2      ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 TODO
  --- ossp-pkg/l2/TODO	2001/09/12 18:43:38	1.19
  +++ ossp-pkg/l2/TODO	2001/09/13 19:21:21	1.20
  @@ -5,7 +5,6 @@
   RSE:
   - channel API cleanup: open semantics
   - bind and udp parameters in socket channel
  -- "subdir config then quiet" feature
   - smtp channel: MIME quoted printable?
   - prefix channels:
     - printf style without strftime;
  @@ -18,7 +17,6 @@
   - perhaps generalize channels and get rid of stream
     by putting formatters into external object referenced
     by channels and by providing a T-channel at the top.
  -- l2_stream_flush()
   - perhaps replace too large PCRE stuff with smaller pattern
     matching stuff
   

From ossp-cvs-owner@ossp.org  Thu Sep 13 22:07:19 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8DK7Ic43482; Thu, 13 Sep 2001 22:07:18 +0200 (CEST)
Date: Thu, 13 Sep 2001 22:07:18 +0200 (CEST)
Message-Id: <200109132007.f8DK7Ic43482@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ut_sa.c l2_ut_sa.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   13-Sep-2001 22:07:18
  Branch: HEAD                             Handle: 2001091321071700

  Modified files:
    ossp-pkg/l2             l2_ut_sa.c l2_ut_sa.h

  Log:
    Implement sa_{bind,listen,accept}() to make
    the SA library also useful for server applications.

  Summary:
    Revision    Changes     Path
    1.8         +66 -20     ossp-pkg/l2/l2_ut_sa.c
    1.4         +2  -2      ossp-pkg/l2/l2_ut_sa.h
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ut_sa.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 l2_ut_sa.c
  --- ossp-pkg/l2/l2_ut_sa.c	2001/09/13 12:19:45	1.7
  +++ ossp-pkg/l2/l2_ut_sa.c	2001/09/13 20:07:17	1.8
  @@ -56,6 +56,18 @@
       int              saa_proto;
   };
   
  +struct sa_st {
  +    int              sSocket;
  +    int              bTimeout;
  +    struct timeval   tvTimeout;
  +    int              nReadLen;
  +    int              nReadSize;
  +    char            *cpReadBuf;
  +    int              nWriteLen;
  +    int              nWriteSize;
  +    char            *cpWriteBuf;
  +};
  +
   #if !defined(AF_LOCAL) && defined(AF_UNIX)
   #define AF_LOCAL AF_UNIX
   #endif
  @@ -362,18 +374,6 @@
       return SA_OK;
   }
   
  -struct sa_st {
  -    int   sSocket;
  -    int   bTimeout;
  -    struct timeval tvTimeout;
  -    int   nReadLen;
  -    int   nReadSize;
  -    char *cpReadBuf;
  -    int   nWriteLen;
  -    int   nWriteSize;
  -    char *cpWriteBuf;
  -};
  -
   static sa_rc_t sa_socket_init(sa_t *sa, int family, int proto)
   {
       if (sa == NULL)
  @@ -474,11 +474,14 @@
   {
       sa_rc_t rv;
   
  +    if (sa == NULL || laddr == NULL)
  +        return SA_ERR_ARG;
       if (sa->sSocket == -1)
           if ((rv = sa_socket_init(sa, laddr->saa_family, laddr->saa_proto)) != SA_OK)
               return rv;
  -    /* NOT YET IMPLEMENTED */
  -    return SA_ERR_INT;
  +    if (bind(sa->sSocket, laddr->saa_buf, laddr->saa_len) == -1)
  +        return SA_ERR_SYS;
  +    return SA_OK;
   }
   
   sa_rc_t sa_connect(sa_t *sa, sa_addr_t *raddr)
  @@ -557,16 +560,59 @@
       return rv;
   }
   
  -sa_rc_t sa_listen(sa_t *sa)
  +sa_rc_t sa_listen(sa_t *sa, int backlog)
   {
  -    /* FIXME: NOT YET IMPLEMENTED */
  -    return SA_ERR_INT;
  +    if (sa == NULL)
  +        return SA_ERR_ARG;
  +    if (sa->sSocket == -1)
  +        /* at least sa_bind() has to be already performed */
  +        return SA_ERR_USE;
  +    if (listen(sa->sSocket, backlog) == -1)
  +        return SA_ERR_SYS;
  +    return SA_OK;
   }
   
  -sa_rc_t sa_accept(sa_t *sa, sa_t **sa_new)
  +sa_rc_t sa_accept(sa_t *sa, sa_addr_t **caddr, sa_t **csa)
   {
  -    /* FIXME: NOT YET IMPLEMENTED */
  -    return SA_ERR_INT;
  +    sa_rc_t rv;
  +    int n;
  +    fd_set fds;
  +    union {
  +        struct sockaddr_in sa4;
  +#ifdef AF_INET6
  +        struct sockaddr_in6 sa6;
  +#endif
  +    } sa4a6;
  +    socklen_t sa_len;
  +    int s;
  +
  +    if (sa == NULL)
  +        return SA_ERR_ARG;
  +    if (sa->sSocket == -1)
  +        /* at least sa_listen() has to be already performed */
  +        return SA_ERR_USE;
  +    if (sa->bTimeout) {
  +        FD_ZERO(&fds);
  +        FD_SET(sa->sSocket, &fds);
  +        do {
  +            n = select(sa->sSocket+1, &fds, NULL, NULL, &sa->tvTimeout);
  +        } while (n == -1 && errno == EINTR);
  +        if (n == 0) 
  +            errno = ETIMEDOUT;
  +        if (n <= 0)
  +            return SA_ERR_SYS;
  +    }
  +    sa_len = sizeof(sa4a6);
  +    if ((s = accept(sa->sSocket, (struct sockaddr *)&sa4a6, &sa_len)) == -1)
  +        return SA_ERR_SYS;
  +    if ((rv = sa_s2a(caddr, (struct sockaddr *)&sa4a6, sa_len)) != SA_OK)
  +        return rv;
  +    if ((rv = sa_create(csa)) != SA_OK) {
  +        free(*caddr);
  +        return rv;
  +    }
  +    (*csa)->sSocket = s;
  +    return SA_OK;
   }
   
   static int sa_read_raw(sa_t *sa, char *cpBuf, int nBufLen)
  Index: ossp-pkg/l2/l2_ut_sa.h
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 l2_ut_sa.h
  --- ossp-pkg/l2/l2_ut_sa.h	2001/09/09 15:54:31	1.3
  +++ ossp-pkg/l2/l2_ut_sa.h	2001/09/13 20:07:17	1.4
  @@ -62,8 +62,8 @@
   
   sa_rc_t sa_bind     (sa_t *sa, sa_addr_t *laddr);
   sa_rc_t sa_connect  (sa_t *sa, sa_addr_t *raddr);
  -sa_rc_t sa_listen   (sa_t *sa);
  -sa_rc_t sa_accept   (sa_t *sa, sa_t **sa_new);
  +sa_rc_t sa_listen   (sa_t *sa, int backlog);
  +sa_rc_t sa_accept   (sa_t *sa, sa_addr_t **caddr, sa_t **csa);
   
   sa_rc_t sa_getremote(sa_t *sa, sa_addr_t *raddr);
   sa_rc_t sa_getlocal (sa_t *sa, sa_addr_t *laddr);

From ossp-cvs-owner@ossp.org  Thu Sep 13 22:13:10 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8DKD9r44170; Thu, 13 Sep 2001 22:13:09 +0200 (CEST)
Date: Thu, 13 Sep 2001 22:13:09 +0200 (CEST)
Message-Id: <200109132013.f8DKD9r44170@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ut_sa.c l2_ut_sa.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   13-Sep-2001 22:13:09
  Branch: HEAD                             Handle: 2001091321130800

  Modified files:
    ossp-pkg/l2             l2_ut_sa.c l2_ut_sa.h

  Log:
    Implement sa_getremote() and sa_getlocal()

  Summary:
    Revision    Changes     Path
    1.9         +42 -4      ossp-pkg/l2/l2_ut_sa.c
    1.5         +2  -2      ossp-pkg/l2/l2_ut_sa.h
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ut_sa.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 l2_ut_sa.c
  --- ossp-pkg/l2/l2_ut_sa.c	2001/09/13 20:07:17	1.8
  +++ ossp-pkg/l2/l2_ut_sa.c	2001/09/13 20:13:08	1.9
  @@ -582,7 +582,7 @@
   #ifdef AF_INET6
           struct sockaddr_in6 sa6;
   #endif
  -    } sa4a6;
  +    } sa_buf;
       socklen_t sa_len;
       int s;
   
  @@ -602,16 +602,54 @@
           if (n <= 0)
               return SA_ERR_SYS;
       }
  -    sa_len = sizeof(sa4a6);
  -    if ((s = accept(sa->sSocket, (struct sockaddr *)&sa4a6, &sa_len)) == -1)
  +    sa_len = sizeof(sa_buf);
  +    if ((s = accept(sa->sSocket, (struct sockaddr *)&sa_buf, &sa_len)) == -1)
           return SA_ERR_SYS;
  -    if ((rv = sa_s2a(caddr, (struct sockaddr *)&sa4a6, sa_len)) != SA_OK)
  +    if ((rv = sa_s2a(caddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK)
           return rv;
       if ((rv = sa_create(csa)) != SA_OK) {
           free(*caddr);
           return rv;
       }
       (*csa)->sSocket = s;
  +    return SA_OK;
  +}
  +
  +sa_rc_t sa_getremote(sa_t *sa, sa_addr_t **raddr)
  +{
  +    sa_rc_t rv;
  +    union {
  +        struct sockaddr_in sa4;
  +#ifdef AF_INET6
  +        struct sockaddr_in6 sa6;
  +#endif
  +    } sa_buf;
  +    socklen_t sa_len;
  +
  +    sa_len = sizeof(sa_buf);
  +    if (getpeername(sa->sSocket, (struct sockaddr *)&sa_buf, &sa_len) < 0)
  +        return SA_ERR_SYS;
  +    if ((rv = sa_s2a(raddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK)
  +        return rv;
  +    return SA_OK;
  +}
  +
  +sa_rc_t sa_getlocal(sa_t *sa, sa_addr_t **laddr)
  +{
  +    sa_rc_t rv;
  +    union {
  +        struct sockaddr_in sa4;
  +#ifdef AF_INET6
  +        struct sockaddr_in6 sa6;
  +#endif
  +    } sa_buf;
  +    socklen_t sa_len;
  +
  +    sa_len = sizeof(sa_buf);
  +    if (getsockname(sa->sSocket, (struct sockaddr *)&sa_buf, &sa_len) < 0)
  +        return SA_ERR_SYS;
  +    if ((rv = sa_s2a(laddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK)
  +        return rv;
       return SA_OK;
   }
   
  Index: ossp-pkg/l2/l2_ut_sa.h
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 l2_ut_sa.h
  --- ossp-pkg/l2/l2_ut_sa.h	2001/09/13 20:07:17	1.4
  +++ ossp-pkg/l2/l2_ut_sa.h	2001/09/13 20:13:08	1.5
  @@ -65,8 +65,8 @@
   sa_rc_t sa_listen   (sa_t *sa, int backlog);
   sa_rc_t sa_accept   (sa_t *sa, sa_addr_t **caddr, sa_t **csa);
   
  -sa_rc_t sa_getremote(sa_t *sa, sa_addr_t *raddr);
  -sa_rc_t sa_getlocal (sa_t *sa, sa_addr_t *laddr);
  +sa_rc_t sa_getremote(sa_t *sa, sa_addr_t **raddr);
  +sa_rc_t sa_getlocal (sa_t *sa, sa_addr_t **laddr);
   
   sa_rc_t sa_read     (sa_t *sa, char *buf, size_t buflen, size_t *bufdone);
   sa_rc_t sa_readfrom (sa_t *sa, char *buf, size_t buflen, size_t *bufdone, sa_addr_t *addr);

From ossp-cvs-owner@ossp.org  Thu Sep 13 22:27:57 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8DKRvO45637; Thu, 13 Sep 2001 22:27:57 +0200 (CEST)
Date: Thu, 13 Sep 2001 22:27:57 +0200 (CEST)
Message-Id: <200109132027.f8DKRvO45637@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ut_sa.c l2_ut_sa.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   13-Sep-2001 22:27:56
  Branch: HEAD                             Handle: 2001091321275600

  Modified files:
    ossp-pkg/l2             l2_ut_sa.c l2_ut_sa.h

  Log:
    implement sa_readfrom() and sa_writeto() functions

  Summary:
    Revision    Changes     Path
    1.10        +50 -13     ossp-pkg/l2/l2_ut_sa.c
    1.6         +2  -2      ossp-pkg/l2/l2_ut_sa.h
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ut_sa.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 l2_ut_sa.c
  --- ossp-pkg/l2/l2_ut_sa.c	2001/09/13 20:13:08	1.9
  +++ ossp-pkg/l2/l2_ut_sa.c	2001/09/13 20:27:56	1.10
  @@ -729,15 +729,39 @@
       return rv;
   }
   
  -sa_rc_t sa_readfrom(sa_t *sa, char *buf, size_t buflen, size_t *bufdone, sa_addr_t *addr)
  +sa_rc_t sa_readfrom(sa_t *sa, char *buf, size_t buflen, size_t *bufdone, sa_addr_t **raddr)
   {
       sa_rc_t rv;
  +    union {
  +        struct sockaddr_in sa4;
  +#ifdef AF_INET6
  +        struct sockaddr_in6 sa6;
  +#endif
  +    } sa_buf;
  +    socklen_t sa_len;
  +    size_t n;
  +    fd_set fds;
   
  -    if (sa->sSocket == -1)
  -        if ((rv = sa_socket_init(sa, addr->saa_family, addr->saa_proto)) != SA_OK)
  -            return rv;
  -    /* FIXME: NOT YET IMPLEMENTED */
  -    return SA_ERR_INT;
  +    if (sa == NULL || buf == NULL || buflen == 0 || bufdone == NULL || raddr == NULL)
  +        return SA_ERR_ARG;
  +    if (sa->bTimeout) {
  +        FD_ZERO(&fds);
  +        FD_SET(sa->sSocket, &fds);
  +        do {
  +            n = select(sa->sSocket+1, &fds, NULL, NULL, &sa->tvTimeout);
  +        } while (n == -1 && errno == EINTR);
  +        if (n == 0) 
  +            errno = ETIMEDOUT;
  +        if (n <= 0)
  +            return SA_ERR_SYS;
  +    }
  +    sa_len = sizeof(sa_buf);
  +    if ((n = recvfrom(sa->sSocket, buf, buflen, 0, (struct sockaddr *)&sa_buf, &sa_len)) == -1)
  +        return SA_ERR_SYS;
  +    if ((rv = sa_s2a(raddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK)
  +        return rv;
  +    *bufdone = n;
  +    return SA_OK;
   }
   
   sa_rc_t sa_readline(sa_t *sa, char *cpBuf, size_t nBufReq, size_t *nBufRes)
  @@ -814,15 +838,28 @@
       return SA_OK;
   }
   
  -sa_rc_t sa_writeto(sa_t *sa, const char *buf, size_t buflen, size_t *bufdone, sa_addr_t *addr)
  +sa_rc_t sa_writeto(sa_t *sa, const char *buf, size_t buflen, size_t *bufdone, sa_addr_t *raddr)
   {
  -    sa_rc_t rv;
  +    size_t n;
  +    fd_set fds;
   
  -    if (sa->sSocket == -1)
  -        if ((rv = sa_socket_init(sa, addr->saa_family, addr->saa_proto)) != SA_OK)
  -            return rv;
  -    /* FIXME: NOT YET IMPLEMENTED */
  -    return SA_ERR_INT;
  +    if (sa == NULL || buf == NULL || buflen == 0 || bufdone == NULL || raddr == NULL)
  +        return SA_ERR_ARG;
  +    if (sa->bTimeout) {
  +        FD_ZERO(&fds);
  +        FD_SET(sa->sSocket, &fds);
  +        do {
  +            n = select(sa->sSocket+1, NULL, &fds, NULL, &sa->tvTimeout);
  +        } while (n == -1 && errno == EINTR);
  +        if (n == 0) 
  +            errno = ETIMEDOUT;
  +        if (n <= 0)
  +            return SA_ERR_SYS;
  +    }
  +    if ((n = sendto(sa->sSocket, buf, buflen, 0, raddr->saa_buf, raddr->saa_len)) == -1)
  +        return SA_ERR_SYS;
  +    *bufdone = n;
  +    return SA_OK;
   }
   
   sa_rc_t sa_printf(sa_t *sa, const char *cpFmt, ...)
  Index: ossp-pkg/l2/l2_ut_sa.h
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 l2_ut_sa.h
  --- ossp-pkg/l2/l2_ut_sa.h	2001/09/13 20:13:08	1.5
  +++ ossp-pkg/l2/l2_ut_sa.h	2001/09/13 20:27:56	1.6
  @@ -69,10 +69,10 @@
   sa_rc_t sa_getlocal (sa_t *sa, sa_addr_t **laddr);
   
   sa_rc_t sa_read     (sa_t *sa, char *buf, size_t buflen, size_t *bufdone);
  -sa_rc_t sa_readfrom (sa_t *sa, char *buf, size_t buflen, size_t *bufdone, sa_addr_t *addr);
  +sa_rc_t sa_readfrom (sa_t *sa, char *buf, size_t buflen, size_t *bufdone, sa_addr_t **raddr);
   sa_rc_t sa_readline (sa_t *sa, char *buf, size_t buflen, size_t *bufdone);
   sa_rc_t sa_write    (sa_t *sa, const char *buf, size_t buflen, size_t *bufdone);
  -sa_rc_t sa_writeto  (sa_t *sa, const char *buf, size_t buflen, size_t *bufdone, sa_addr_t *addr);
  +sa_rc_t sa_writeto  (sa_t *sa, const char *buf, size_t buflen, size_t *bufdone, sa_addr_t *raddr);
   sa_rc_t sa_printf   (sa_t *sa, const char *fmt, ...);
   sa_rc_t sa_flush    (sa_t *sa);
   sa_rc_t sa_shutdown (sa_t *sa, char *flags);

From ossp-cvs-owner@ossp.org  Fri Sep 14 09:41:51 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8E7foK23967; Fri, 14 Sep 2001 09:41:50 +0200 (CEST)
Date: Fri, 14 Sep 2001 09:41:50 +0200 (CEST)
Message-Id: <200109140741.f8E7foK23967@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_buffer.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   14-Sep-2001 09:41:50
  Branch: HEAD                             Handle: 2001091408414900

  Modified files:
    ossp-pkg/l2             l2_ch_buffer.c

  Log:
    1. make level flushing optional by introducing a "levelflush" parameter
       which by default is off to make sure maximum throughput is achieved.
    2. bugfix the write operation.

  Summary:
    Revision    Changes     Path
    1.21        +19 -13     ossp-pkg/l2/l2_ch_buffer.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_buffer.c
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 l2_ch_buffer.c
  --- ossp-pkg/l2/l2_ch_buffer.c	2001/09/12 16:07:23	1.20
  +++ ossp-pkg/l2/l2_ch_buffer.c	2001/09/14 07:41:49	1.21
  @@ -33,9 +33,10 @@
   
   /* declare private channel configuration */
   typedef struct {
  -    char        *buf;
  +    char       *buf;
       int         bufpos;
       int         bufsize;
  +    int         levelflush;
       l2_level_t  level;
   } l2_ch_buffer_t;
   
  @@ -49,10 +50,11 @@
           return L2_ERR_MEM;
   
       /* initialize configuration with reasonable defaults */
  -    cfg->buf     = NULL;
  -    cfg->bufpos  = 0;
  -    cfg->bufsize = 4096;
  -    cfg->level   = L2_LEVEL_NONE;
  +    cfg->buf        = NULL;
  +    cfg->bufpos     = 0;
  +    cfg->bufsize    = 4096;
  +    cfg->levelflush = 0;
  +    cfg->level      = L2_LEVEL_NONE;
   
       /* link private channel configuration into channel context */
       ctx->vp = cfg;
  @@ -64,12 +66,13 @@
   static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
       l2_ch_buffer_t *cfg = (l2_ch_buffer_t *)ctx->vp;
  -    l2_param_t pa[2];
  +    l2_param_t pa[3];
       l2_result_t rv;
   
       /* feed and call generic parameter parsing engine */
  -    L2_PARAM_SET(pa[0], size, INT, &cfg->bufsize);
  -    L2_PARAM_END(pa[1]);
  +    L2_PARAM_SET(pa[0], size,       INT, &cfg->bufsize);
  +    L2_PARAM_SET(pa[1], levelflush, INT, &cfg->levelflush);
  +    L2_PARAM_END(pa[2]);
       rv = l2_util_setparams(pa, fmt, ap);
       if (cfg->bufsize < 0) 
           return L2_ERR_ARG;
  @@ -112,25 +115,28 @@
               if ((rv = l2_channel_write(downstream, cfg->level, cfg->buf, cfg->bufpos)) != L2_OK)
                   return rv;
               cfg->bufpos = 0;
  -            cfg->level  = L2_LEVEL_NONE; /* reset this->context->level */
  +            cfg->level  = L2_LEVEL_NONE;
           }
           /* pass through immediately to downstream if still too large */
           if (buf_size > cfg->bufsize)
               return l2_channel_write(downstream, level, buf, buf_size);
       }
   
  -    /* flush if incoming message level differs from those already in buffer */
  -    if ((level != cfg->level) && (cfg->level == L2_LEVEL_NONE))
  -    {
  +    /* flush if level of incoming message differs from those already in buffer */
  +    if (   (cfg->levelflush)             /* if different levels force a flush    */
  +        && (cfg->bufpos > 0)             /* and there is something in the buffer */
  +        && (cfg->level != L2_LEVEL_NONE) /* and a remembered level is known      */
  +        && (level != cfg->level)         /* and the levels really differ         */) {
           if ((rv = l2_channel_write(downstream, cfg->level, cfg->buf, cfg->bufpos)) != L2_OK)
               return rv;
           cfg->bufpos = 0;
  -        cfg->level  = level;
  +        cfg->level  = L2_LEVEL_NONE;
       }
   
       /* finally write incoming message to channel buffer */
       memcpy(cfg->buf+cfg->bufpos, buf, buf_size);
       cfg->bufpos += buf_size;
  +    cfg->level = level;
   
       return L2_OK;
   }

From ossp-cvs-owner@ossp.org  Fri Sep 14 09:44:20 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8E7iKW24445; Fri, 14 Sep 2001 09:44:20 +0200 (CEST)
Date: Fri, 14 Sep 2001 09:44:20 +0200 (CEST)
Message-Id: <200109140744.f8E7iKW24445@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 configure.ac
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   14-Sep-2001 09:44:20
  Branch: HEAD                             Handle: 2001091408441900

  Modified files:
    ossp-pkg/l2             configure.ac

  Log:
    we require Autoconf 2.52

  Summary:
    Revision    Changes     Path
    1.9         +1  -1      ossp-pkg/l2/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/l2/configure.ac
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 configure.ac
  --- ossp-pkg/l2/configure.ac	2001/09/13 13:57:37	1.8
  +++ ossp-pkg/l2/configure.ac	2001/09/14 07:44:19	1.9
  @@ -27,7 +27,7 @@
   dnl ##  configure.in: Autoconf specification
   dnl ##
   
  -AC_PREREQ(2.13)dnl
  +AC_PREREQ(2.52)dnl
   AC_REVISION(1.0)
   
   AC_INIT(README)

From ossp-cvs-owner@ossp.org  Fri Sep 14 09:44:35 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8E7iYX24493; Fri, 14 Sep 2001 09:44:34 +0200 (CEST)
Date: Fri, 14 Sep 2001 09:44:34 +0200 (CEST)
Message-Id: <200109140744.f8E7iYX24493@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   14-Sep-2001 09:44:34
  Branch: HEAD                             Handle: 2001091408443400

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    update TODO

  Summary:
    Revision    Changes     Path
    1.21        +8  -1      ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 TODO
  --- ossp-pkg/l2/TODO	2001/09/13 19:21:21	1.20
  +++ ossp-pkg/l2/TODO	2001/09/14 07:44:34	1.21
  @@ -5,10 +5,10 @@
   RSE:
   - channel API cleanup: open semantics
   - bind and udp parameters in socket channel
  +- socket channel convert to use SA library
   - smtp channel: MIME quoted printable?
   - prefix channels:
     - printf style without strftime;
  -  - levels logged with l2_util_l2s()
   - l2tool [addr:]port
   - autoflush via shared memory and sub-process?
   - IRC channel
  @@ -19,6 +19,13 @@
     by channels and by providing a T-channel at the top.
   - perhaps replace too large PCRE stuff with smaller pattern
     matching stuff
  +- file channel should optionally support file locking 
  +  via fcntl(3).
  +- syslog channel should support direct remote logging
  +- implement "filter" channel
  +
  +MS:
  +- implement pipe channel
   
   ISSUES
   ------

From ossp-cvs-owner@ossp.org  Fri Sep 14 12:12:50 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8EACmN41206; Fri, 14 Sep 2001 12:12:48 +0200 (CEST)
Date: Fri, 14 Sep 2001 12:12:48 +0200 (CEST)
Message-Id: <200109141012.f8EACmN41206@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_p.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   14-Sep-2001 12:12:48
  Branch: HEAD                             Handle: 2001091411124800

  Modified files:
    ossp-pkg/l2             l2_p.h

  Log:
    provide cleanup macros

  Summary:
    Revision    Changes     Path
    1.18        +7  -0      ossp-pkg/l2/l2_p.h
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_p.h
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 l2_p.h
  --- ossp-pkg/l2/l2_p.h	2001/09/13 19:18:34	1.17
  +++ ossp-pkg/l2/l2_p.h	2001/09/14 10:12:48	1.18
  @@ -47,6 +47,13 @@
   #include "dmalloc.h"
   #endif
   
  +#define cu(value) \
  +    do { rv = value; \
  +         goto cus; } while (0)
  +#define cu_on(expr,value) \
  +    if (expr) \
  +        cu(value)
  +
   #define L2_MAX_MSGSIZE    4096
   #define L2_MAX_CHANNELS    128
   #define L2_MAX_FORMATTERS  128

From ossp-cvs-owner@ossp.org  Fri Sep 14 12:22:39 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8EAMc742136; Fri, 14 Sep 2001 12:22:38 +0200 (CEST)
Date: Fri, 14 Sep 2001 12:22:38 +0200 (CEST)
Message-Id: <200109141022.f8EAMc742136@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ut_sa.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   14-Sep-2001 12:22:38
  Branch: HEAD                             Handle: 2001091411223700

  Modified files:
    ossp-pkg/l2             l2_ut_sa.c

  Log:
    Allow the result parameter to be NULL if the caller wants to ignore the
    number written/read bytes.

  Summary:
    Revision    Changes     Path
    1.11        +27 -16     ossp-pkg/l2/l2_ut_sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ut_sa.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 l2_ut_sa.c
  --- ossp-pkg/l2/l2_ut_sa.c	2001/09/13 20:27:56	1.10
  +++ ossp-pkg/l2/l2_ut_sa.c	2001/09/14 10:22:37	1.11
  @@ -679,22 +679,23 @@
   {
       int n;
       int rv;
  +    size_t res;
   
  -    if (sa == NULL)
  +    if (sa == NULL || cpBuf == NULL || nBufReq == 0)
           return 0;
       
       /* flush write buffer */
       if (sa->nWriteLen > 0)
           sa_flush(sa);
       rv = SA_OK;
  -    *nBufRes = 0;
  +    res = 0;
       while (1) {
           if (nBufReq <= sa->nReadLen) {
               /* buffer holds enough data, so use this */
               memmove(cpBuf, sa->cpReadBuf, nBufReq);
               memmove(sa->cpReadBuf, sa->cpReadBuf+nBufReq, sa->nReadLen-nBufReq);
               sa->nReadLen -= nBufReq;
  -            *nBufRes += nBufReq;
  +            res += nBufReq;
           }
           else {
               if (sa->nReadLen > 0) {
  @@ -702,14 +703,14 @@
                   memmove(cpBuf, sa->cpReadBuf, sa->nReadLen);
                   nBufReq -= sa->nReadLen;
                   cpBuf   += sa->nReadLen;
  -                *nBufRes += sa->nReadLen;
  +                res     += sa->nReadLen;
                   sa->nReadLen = 0;
               }
               if (nBufReq >= sa->nReadSize) {
                   /* buffer is too small at all, so read directly */
                   n = sa_read_raw(sa, cpBuf, nBufReq);
                   if (n > 0)
  -                    *nBufRes += n;
  +                    res += n;
                   else if (n <= 0)
                       rv = SA_ERR_SYS;
               }
  @@ -726,6 +727,8 @@
           }
           break;
       }
  +    if (nBufRes != NULL)
  +        *nBufRes = res;
       return rv;
   }
   
  @@ -742,7 +745,7 @@
       size_t n;
       fd_set fds;
   
  -    if (sa == NULL || buf == NULL || buflen == 0 || bufdone == NULL || raddr == NULL)
  +    if (sa == NULL || buf == NULL || buflen == 0 || raddr == NULL)
           return SA_ERR_ARG;
       if (sa->bTimeout) {
           FD_ZERO(&fds);
  @@ -760,7 +763,8 @@
           return SA_ERR_SYS;
       if ((rv = sa_s2a(raddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK)
           return rv;
  -    *bufdone = n;
  +    if (bufdone != NULL)
  +        *bufdone = n;
       return SA_OK;
   }
   
  @@ -768,19 +772,22 @@
   {
       char c;
       size_t n;
  +    size_t res;
   
       if (sa == NULL)
           return SA_ERR_ARG;
  -    *nBufRes = 0;
  -    while ((*nBufRes) < (nBufReq-1)) {
  +    res = 0;
  +    while (res < (nBufReq-1)) {
           sa_read(sa, &c, 1, &n);
           if (n <= 0)
               break;
  -        cpBuf[(*nBufRes)++] = c;
  +        cpBuf[res++] = c;
           if (c == '\n')
               break;
       }
  -    cpBuf[(*nBufRes)] = '\0';
  +    cpBuf[res] = '\0';
  +    if (nBufRes != NULL)
  +        *nBufRes = res;
       return SA_OK;
   }
   
  @@ -809,6 +816,7 @@
   sa_rc_t sa_write(sa_t *sa, const char *cpBuf, size_t nBufReq, size_t *nBufRes)
   {
       size_t n;
  +    size_t res;
   
       if (sa == NULL)
           return SA_ERR_ARG;
  @@ -817,24 +825,26 @@
           /* not enough space in buffer, so flush buffer */
           sa_flush(sa);
       }
  +    res = 0;
       if (nBufReq >= sa->nWriteSize) {
           /* buffer too small at all, so write immediately */
  -        *nBufRes = 0;
           while (nBufReq > 0) {
               n = sa_write_raw(sa, cpBuf, nBufReq);
               if (n <= 0)
                   break;
               nBufReq  -= n;
               cpBuf    += n;
  -            *nBufRes += n;
  +            res      += n;
           }
       }
       else {
           /* (again) enough sprace in buffer, so store data */
           memmove(sa->cpWriteBuf+sa->nWriteLen, cpBuf, nBufReq);
           sa->nWriteLen += nBufReq;
  -        *nBufRes = nBufReq;
  +        res = nBufReq;
       }
  +    if (nBufRes != NULL)
  +        *nBufRes = res;
       return SA_OK;
   }
   
  @@ -843,7 +853,7 @@
       size_t n;
       fd_set fds;
   
  -    if (sa == NULL || buf == NULL || buflen == 0 || bufdone == NULL || raddr == NULL)
  +    if (sa == NULL || buf == NULL || buflen == 0 || raddr == NULL)
           return SA_ERR_ARG;
       if (sa->bTimeout) {
           FD_ZERO(&fds);
  @@ -858,7 +868,8 @@
       }
       if ((n = sendto(sa->sSocket, buf, buflen, 0, raddr->saa_buf, raddr->saa_len)) == -1)
           return SA_ERR_SYS;
  -    *bufdone = n;
  +    if (bufdone != NULL)
  +        *bufdone = n;
       return SA_OK;
   }
   

From ossp-cvs-owner@ossp.org  Fri Sep 14 13:13:34 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8EBDWs48561; Fri, 14 Sep 2001 13:13:32 +0200 (CEST)
Date: Fri, 14 Sep 2001 13:13:32 +0200 (CEST)
Message-Id: <200109141113.f8EBDWs48561@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_pipe.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   14-Sep-2001 13:13:32
  Branch: HEAD                             Handle: 2001091412133200

  Modified files:
    ossp-pkg/l2             l2_ch_pipe.c

  Log:
    First cut at pipe channel handler. Lacks logic to guarantee reliability.

  Summary:
    Revision    Changes     Path
    1.9         +59 -13     ossp-pkg/l2/l2_ch_pipe.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_pipe.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 l2_ch_pipe.c
  --- ossp-pkg/l2/l2_ch_pipe.c	2001/09/12 09:42:34	1.8
  +++ ossp-pkg/l2/l2_ch_pipe.c	2001/09/14 11:13:32	1.9
  @@ -24,53 +24,99 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  l2_ch_pipe.c: program pipe channel implementation
  +**  l2_ch_pipe.c: pipe channel implementation
   */
   
   #include "l2.h"
   
  +#include <unistd.h>
  +
  +/* declare private channel configuration */
  +typedef struct {
  +    int iPipe; /* pipe filedescriptor used for writing only */
  +} l2_ch_pipe_t;
  +
  +/* create channel */
   static l2_result_t hook_create(l2_context_t *ctx, l2_channel_t *ch)
   {
  +    l2_ch_pipe_t *cfg;
  +
  +    /* allocate private channel configuration */
  +    if ((cfg = (l2_ch_pipe_t *)malloc(sizeof(l2_ch_pipe_t))) == NULL)
  +        return L2_ERR_ARG;
  +
  +    /* initialize configuration with reasonable defaults */
  +    cfg->iPipe = -1; 
  +
  +    /* link private channel configuration into channel context */
  +    ctx->vp = cfg;
  +
       return L2_OK;
   }
   
  +/* configure channel */
   static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
  -    return L2_OK;
  -}
  +    l2_ch_pipe_t *cfg = (l2_ch_pipe_t *)ctx->vp;
  +    l2_param_t pa[2]; 
  +    l2_result_t rv;
   
  -static l2_result_t hook_open(l2_context_t *ctx, l2_channel_t *ch)
  -{
  -    return L2_OK;
  -}
  +    /* feed and call generic parameter parsing engine */
  +    L2_PARAM_SET(pa[0], pipe, INT, &cfg->iPipe);
  +    L2_PARAM_END(pa[1]);
  +    rv = l2_util_setparams(pa, fmt, ap);
   
  -static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch, l2_level_t level, const char *buf, size_t buf_size)
  -{
  -    return L2_OK;
  +    /* validate the pipe fd */
  +    if (cfg->iPipe == -1)
  +        return L2_ERR_ARG;
  +
  +    return rv;
   }
   
  -static l2_result_t hook_flush(l2_context_t *ctx, l2_channel_t *ch)
  +/* write to channel */
  +static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch,
  +                              l2_level_t level, const char *buf, size_t buf_size)
   {
  +    l2_ch_pipe_t *cfg = (l2_ch_pipe_t *)ctx->vp;
  +    
  +    /* write message to channel pipe */
  +    if (write(cfg->iPipe, buf, buf_size) == -1)
  +        return L2_ERR_SYS;
  +
       return L2_OK;
   }
   
  +/* close channel */
   static l2_result_t hook_close(l2_context_t *ctx, l2_channel_t *ch)
   {
  +    l2_ch_pipe_t *cfg = (l2_ch_pipe_t *)ctx->vp;
  +
  +    /* close channel pipe */
  +    close(cfg->iPipe);
  +    cfg->iPipe = -1;
  +
       return L2_OK;
   }
   
  +/* destroy channel */
   static l2_result_t hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
   {
  +    l2_ch_pipe_t *cfg = (l2_ch_pipe_t *)ctx->vp;
  +
  +    /* destroy channel configuration */
  +    free(cfg);
  +
       return L2_OK;
   }
   
  +/* exported channel handler structure */
   l2_handler_t l2_handler_pipe = {
       L2_CHANNEL_OUTPUT,
       hook_create,
       hook_configure,
  -    hook_open,
  +    NULL,
       hook_write,
  -    hook_flush,
  +    NULL,
       hook_close,
       hook_destroy
   };

From ossp-cvs-owner@ossp.org  Fri Sep 14 14:55:22 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8ECtL559975; Fri, 14 Sep 2001 14:55:21 +0200 (CEST)
Date: Fri, 14 Sep 2001 14:55:21 +0200 (CEST)
Message-Id: <200109141255.f8ECtL559975@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_smtp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   14-Sep-2001 14:55:21
  Branch: HEAD                             Handle: 2001091413552000

  Modified files:
    ossp-pkg/l2             l2_ch_smtp.c

  Log:
    Finish and enhance the SMTP channel implementation.
    - use 4KB buffers, because a single SMTP line is
      already allowed to be up to 1KB in size.
    - use the cleanup macros to get rid of the deep if-cascade.
    - add support for correct RFC2821/RFC2822 dot escaping
    - add RFC2822-compliant Date header
    - reduce User-Agent header to just "L2/V.R.L"

  Summary:
    Revision    Changes     Path
    1.3         +108 -59    ossp-pkg/l2/l2_ch_smtp.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_smtp.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2_ch_smtp.c
  --- ossp-pkg/l2/l2_ch_smtp.c	2001/09/12 09:42:34	1.2
  +++ ossp-pkg/l2/l2_ch_smtp.c	2001/09/14 12:55:20	1.3
  @@ -34,6 +34,7 @@
   #include <sys/utsname.h>
   #include <sys/types.h>
   #include <pwd.h>
  +#include <time.h>
   
   /* declare private channel configuration */
   typedef struct {
  @@ -129,7 +130,7 @@
   
       /* configure socket parameters */
       sa_timeout(cfg->saServer, cfg->nTimeout, 0);
  -    sa_buffers(cfg->saServer, 1024, 1024);
  +    sa_buffers(cfg->saServer, 4096, 4096);
   
       return L2_OK;
   }
  @@ -140,18 +141,18 @@
   {
       l2_ch_smtp_t *cfg = (l2_ch_smtp_t *)ctx->vp;
       char caLine[1024];
  -    int bSent;
       sa_t *sa;
       sa_addr_t *saa;
  -    sa_rc_t rc;
  +    l2_result_t rv = L2_OK;
  +    sa_rc_t sa_rv;
       size_t n;
  +    const char *cpB;
  +    const char *cpE;
  +    const char *cpL;
  +    struct tm *tm;
  +    time_t t;
  +    char caDate[80];
       
  -    /* establish connection to server */
  -    saa = cfg->saaServer;
  -    sa  = cfg->saServer;
  -    if ((rc = sa_connect(sa, saa)) != SA_OK)
  -        return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
  -
       /* 
        * Sample SMTP transaction for reference:
        *
  @@ -164,70 +165,118 @@
        * | 250 2.1.5 <rse@engelschall.com>... Recipient ok
        * | DATA
        * | 354 Enter mail, end with "." on a line by itself
  -     * | From: l2@localhost
  +     * | Date: Fri, 14 Sep 2001 14:50:51 CEST
  +     * | From: rse@en1.engelschall.com
        * | To: rse@engelschall.com
  -     * | Subject: [L2] SMTP channel output
  +     * | Subject: [L2] log channel output on en1.engelschall.com
  +     * | User-Agent: L2/0.1.0                                                                              
        * |
  -     * | test log entry
  +     * | A program of user rse on host en1.engelschall.com logged:
  +     * | [2001-09-10/01:02:03] <notice> sample logging message
        * | .
        * | 250 2.0.0 f88Aev847031 Message accepted for delivery
        * | QUIT
        * | 221 2.0.0 en1.engelschall.com closing connection
        *
  -     * For more details about SMTP, see RFC 2821: 
  -     * Simple Mail Transfer Protocol; J. Klensin; April 2001.
  +     * For more details read:
  +     * RFC 2821: Simple Mail Transfer Protocol; J. Klensin; April 2001.
  +     * RFC 2822: Internet Message Format; P. Resnick; April 2001.
        */
  +
  +    /* establish connection to server */
  +    saa = cfg->saaServer;
  +    sa  = cfg->saServer;
  +    if ((sa_rv = sa_connect(sa, saa)) != SA_OK)
  +        cu(sa_rv == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
   
  -    bSent = FALSE;
  -    if (sa_readline(sa, caLine, sizeof(caLine), &n) == SA_OK
  -        && n > 3 && atoi(caLine) == 220) {
  -        sa_printf(sa, "HELO %s\r\n", cfg->cpLocalHost);
  -        if (sa_readline(sa, caLine, sizeof(caLine), &n) == SA_OK
  -            && n > 3 && atoi(caLine) == 250) {
  -            sa_printf(sa, "MAIL FROM:<%s>\r\n", cfg->cpFrom);
  -            if (sa_readline(sa, caLine, sizeof(caLine), &n) == SA_OK
  -                && n > 3 && atoi(caLine) == 250) {
  -                sa_printf(sa, "RCPT TO:<%s>\r\n", cfg->cpRcpt);
  -                if (sa_readline(sa, caLine, sizeof(caLine), &n) == SA_OK
  -                    && n > 3 && atoi(caLine) == 250) {
  -                    sa_printf(sa, "DATA\r\n");
  -                    if (sa_readline(sa, caLine, sizeof(caLine), &n) == SA_OK
  -                        && n > 3 && atoi(caLine) == 354) {
  -                        sa_printf(sa, "From: %s\r\n", cfg->cpFrom);
  -                        sa_printf(sa, "To: %s\r\n", cfg->cpRcpt);
  -                        sa_printf(sa, "Subject: %s\r\n", cfg->cpSubject);
  -                        if (cfg->cpLocalProg != NULL)
  -                            sa_printf(sa, "User-Agent: %s, %s\r\n", 
  -                                       cfg->cpLocalProg, l2_version.v_gnu);
  -                        else
  -                            sa_printf(sa, "User-Agent: %s\r\n", l2_version.v_gnu);
  -                        sa_printf(sa, "\r\n");
  -                        if (cfg->cpLocalProg != NULL)
  -                            sa_printf(sa, "Program %s of user %s on host %s logged:\r\n", 
  -                                       cfg->cpLocalProg, cfg->cpLocalUser, cfg->cpLocalHost);
  -                        else
  -                            sa_printf(sa, "A program of user %s on host %s logged:\r\n", 
  -                                       cfg->cpLocalUser, cfg->cpLocalHost);
  -                        /* FIXME: dot-escaping and remove doubled newline */
  -                        sa_write(sa, buf, buf_size, &n);
  -                        sa_printf(sa, "\r\n");
  -                        sa_printf(sa, ".\r\n");
  -                        if (sa_readline(sa, caLine, sizeof(caLine), &n) == SA_OK
  -                            && n > 3 && atoi(caLine) == 250) {
  -                            sa_printf(sa, "QUIT\r\n");
  -                            sa_readline(sa, caLine, sizeof(caLine), &n);
  -                            bSent = TRUE;
  -                        }
  -                    }
  -                }
  -            }
  -        }
  +    /* | 220 en1.engelschall.com ESMTP SMTP Sendmail 8.11.0+ ready */
  +    sa_rv = sa_readline(sa, caLine, sizeof(caLine), &n);
  +    cu_on(!(sa_rv == SA_OK && n > 3 && atoi(caLine) == 220), L2_ERR_IO);
  +    
  +    /* | HELO l2
  +     * | 250 en1.engelschall.com Hello en1.engelschall.com [141.1.129.1], pleased to meet you */
  +    sa_printf(sa, "HELO %s\r\n", cfg->cpLocalHost);
  +    sa_rv = sa_readline(sa, caLine, sizeof(caLine), &n);
  +    cu_on(!(sa_rv == SA_OK && n > 3 && atoi(caLine) == 250), L2_ERR_IO);
  +
  +    /* | MAIL From: <l2@localhost>
  +     * | 250 2.1.0 <l2@localhost>... Sender ok */
  +    sa_printf(sa, "MAIL FROM:<%s>\r\n", cfg->cpFrom);
  +    sa_rv = sa_readline(sa, caLine, sizeof(caLine), &n);
  +    cu_on(!(sa_rv == SA_OK && n > 3 && atoi(caLine) == 250), L2_ERR_IO);
  +
  +    /* | RCPT To: <rse@engelschall.com>
  +     * | 250 2.1.5 <rse@engelschall.com>... Recipient ok */
  +    sa_printf(sa, "RCPT TO:<%s>\r\n", cfg->cpRcpt);
  +    sa_rv = sa_readline(sa, caLine, sizeof(caLine), &n);
  +    cu_on(!(sa_rv == SA_OK && n > 3 && atoi(caLine) == 250), L2_ERR_IO);
  +
  +    /* | DATA
  +     * | 354 Enter mail, end with "." on a line by itself */
  +    sa_printf(sa, "DATA\r\n");
  +    sa_rv = sa_readline(sa, caLine, sizeof(caLine), &n);
  +    cu_on(!(sa_rv == SA_OK && n > 3 && atoi(caLine) == 354), L2_ERR_IO);
  +
  +    /* | Date: Fri, 14 Sep 2001 14:50:51 CEST
  +     * | From: rse@en1.engelschall.com
  +     * | To: rse@engelschall.com
  +     * | Subject: [L2] log channel output on en1.engelschall.com
  +     * | User-Agent: L2/0.1.0                                                                              
  +     * |                                                             */
  +    t = time(NULL);
  +    tm = localtime(&t);
  +    strftime(caDate, sizeof(caDate), "%a, %d %b %Y %H:%M:%S %Z", tm);
  +    sa_printf(sa, "Date: %s\r\n", caDate);
  +    sa_printf(sa, "From: %s\r\n", cfg->cpFrom);
  +    sa_printf(sa, "To: %s\r\n", cfg->cpRcpt);
  +    sa_printf(sa, "Subject: %s\r\n", cfg->cpSubject);
  +    if (cfg->cpLocalProg != NULL)
  +        sa_printf(sa, "User-Agent: %s (%s)\r\n", 
  +                  l2_version.v_web, cfg->cpLocalProg);
  +    else
  +        sa_printf(sa, "User-Agent: %s\r\n", l2_version.v_web);
  +    sa_write(sa, "\r\n", 2, NULL);
  +
  +    /* | A program of user rse on host en1.engelschall.com logged:
  +     * | [2001-09-10/01:02:03] <notice> sample logging message      */
  +    if (cfg->cpLocalProg != NULL)
  +        sa_printf(sa, "Program %s of user %s on host %s logged:\r\n", 
  +                   cfg->cpLocalProg, cfg->cpLocalUser, cfg->cpLocalHost);
  +    else
  +        sa_printf(sa, "A program of user %s on host %s logged:\r\n", 
  +                   cfg->cpLocalUser, cfg->cpLocalHost);
  +    cpB = buf;
  +    cpE = buf;
  +    cpL = buf+buf_size;
  +    while (cpB < cpL) {
  +        for (cpE = cpB; cpE < cpL && (*cpE != '\r' && *cpE != '\n'); cpE++)
  +            ;
  +        if (*cpB == '.')
  +            sa_write(sa, ".", 1, NULL);
  +        sa_write(sa, cpB, cpE-cpB, NULL);
  +        sa_write(sa, "\r\n", 2, NULL);
  +        for (; cpE < cpL && (*cpE == '\r' || *cpE == '\n'); cpE++)
  +            ;
  +        cpB = cpE;
       }
   
  +    /* | .
  +     * | 250 2.0.0 f88Aev847031 Message accepted for delivery */
  +    sa_write(sa, ".\r\n", 3, NULL);
  +    sa_readline(sa, caLine, sizeof(caLine), &n);
  +    cu_on(!(sa_rv == SA_OK && n > 3 && atoi(caLine) == 250), L2_ERR_IO);
  +
  +    /* | QUIT
  +     * | 221 2.0.0 en1.engelschall.com closing connection */
  +    sa_printf(sa, "QUIT\r\n");
  +    sa_readline(sa, caLine, sizeof(caLine), &n);
  +
  +    cus:
  +
       /* shutdown connection to server */
       sa_shutdown(sa, "rw");
   
  -    return (bSent ? L2_OK : L2_ERR_IO);
  +    return rv;
   }
   
   /* close channel */

From ossp-cvs-owner@ossp.org  Fri Sep 14 15:26:18 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8EDQGh63562; Fri, 14 Sep 2001 15:26:16 +0200 (CEST)
Date: Fri, 14 Sep 2001 15:26:16 +0200 (CEST)
Message-Id: <200109141326.f8EDQGh63562@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   14-Sep-2001 15:26:16
  Branch: HEAD                             Handle: 2001091414261600

  Modified files:
    ossp-pkg/l2             l2.pod

  Log:
    provide documentation for SMTP channel

  Summary:
    Revision    Changes     Path
    1.5         +61 -0      ossp-pkg/l2/l2.pod
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2.pod
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 l2.pod
  --- ossp-pkg/l2/l2.pod	2001/08/15 10:36:03	1.4
  +++ ossp-pkg/l2/l2.pod	2001/09/14 13:26:16	1.5
  @@ -49,5 +49,66 @@
   
   The following functions are provided by the B<L2> API:
   
  +=head1 AVAILABLE CHANNEL HANDLERS
  +
  +=head2 SMTP Output Channel Handler (l2_handler_smtp)
  +
  +The SMTP output channel handler C<l2_channel_smtp> sends the incoming
  +message via Simple Mail Transfer Protocol (SMTP) as an Email to a remote
  +mail service. It conforms to RFC 2821 (Simple Mail Transfer Protocol; J.
  +Klensin; April 2001) and RFC 2822 (Internet Message Format; P. Resnick;
  +April 2001).
  +
  +It provides the following channel parameters:
  +
  +=over 4
  +
  +=item B<progname> (optional, C<char *>)
  +
  +Arbitrary string identifying the program using B<OSSP L2>.
  +Default is C<NULL> which means no program identification.
  +
  +=item B<localhost> (optional, C<char *>)
  +
  +Hostname of the underlying machine.
  +Default is set through uname(3) or C<localhost>.
  +
  +=item B<localuser> (optional, C<char *>)
  +
  +Username corresponding to the UID of the underlying process.
  +Default is set through resolving getuid(2) or C<uid#N>.
  +
  +=item B<from> (optional, C<char *>)
  +
  +Sender Email address for outgoing mails.
  +Default is set through B<localuser> and B<localhost>.
  +
  +=item B<rcpt> (I<mandatory>, C<char *>)
  +
  +Recipient Email address for outgoing mails.
  +No default exists, user has to provide value.
  +
  +=item B<subject> (optional, C<char *>)
  +
  +Arbitrary string identifying the generated Email message.
  +Default is C<[L2] log channel output on {localhost}>.
  +
  +=item B<host> (I<mandatory>, C<char *>)
  +
  +Host name or IP address of the remote SMTP service.
  +No default exists, user has to provide value.
  +
  +=item B<port> (optional, C<char *>)     
  +
  +Port name or number of the remote SMTP service.
  +Default is C<smtp> (25).
  +
  +=item B<timeout> (optional, C<int>)
  +
  +Timeout in seconds for all I/O operations.
  +Default is C<30>.
  +
  +=back
  +
   =cut
   

From ossp-cvs-owner@ossp.org  Fri Sep 14 15:27:18 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8EDRHb63655; Fri, 14 Sep 2001 15:27:17 +0200 (CEST)
Date: Fri, 14 Sep 2001 15:27:17 +0200 (CEST)
Message-Id: <200109141327.f8EDRHb63655@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   14-Sep-2001 15:27:17
  Branch: HEAD                             Handle: 2001091414271700

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    SMTP channel is now complete

  Summary:
    Revision    Changes     Path
    1.22        +0  -1      ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 TODO
  --- ossp-pkg/l2/TODO	2001/09/14 07:44:34	1.21
  +++ ossp-pkg/l2/TODO	2001/09/14 13:27:17	1.22
  @@ -6,7 +6,6 @@
   - channel API cleanup: open semantics
   - bind and udp parameters in socket channel
   - socket channel convert to use SA library
  -- smtp channel: MIME quoted printable?
   - prefix channels:
     - printf style without strftime;
   - l2tool [addr:]port

From ossp-cvs-owner@ossp.org  Fri Sep 14 17:40:06 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8EFe4I78144; Fri, 14 Sep 2001 17:40:04 +0200 (CEST)
Date: Fri, 14 Sep 2001 17:40:04 +0200 (CEST)
Message-Id: <200109141540.f8EFe4I78144@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_pipe.c l2_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   14-Sep-2001 17:40:04
  Branch: HEAD                             Handle: 2001091416400400

  Modified files:
    ossp-pkg/l2             l2_ch_pipe.c l2_test.c

  Log:
    Added the Thomas signal handler to catch SIGCHLD and SIGPIPE, pipe handler is
    now a filter not an output, new logic to test code, bugfixes.

  Summary:
    Revision    Changes     Path
    1.10        +45 -2      ossp-pkg/l2/l2_ch_pipe.c
    1.21        +18 -0      ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_pipe.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 l2_ch_pipe.c
  --- ossp-pkg/l2/l2_ch_pipe.c	2001/09/14 11:13:32	1.9
  +++ ossp-pkg/l2/l2_ch_pipe.c	2001/09/14 15:40:04	1.10
  @@ -30,12 +30,29 @@
   #include "l2.h"
   
   #include <unistd.h>
  +#include <signal.h>
   
   /* declare private channel configuration */
   typedef struct {
       int iPipe; /* pipe filedescriptor used for writing only */
   } l2_ch_pipe_t;
   
  +static void catchsignal(int sig, ...)
  +{
  +    va_list ap;
  +    static l2_context_t *ctx = NULL;
  +
  +    va_start(ap, sig);
  +    if (sig == 0)
  +        ctx = va_arg(ap, l2_context_t *);
  +    else if (sig == SIGCHLD) {
  +        ((l2_ch_pipe_t *)(int *)ctx->vp)->iPipe = -1; /* TODO: Fill in with new pipe fd */
  +    }
  +    else if (sig == SIGPIPE)
  +        ((l2_ch_pipe_t *)(int *)ctx->vp)->iPipe = -1;
  +    va_end(ap);
  +}
  +
   /* create channel */
   static l2_result_t hook_create(l2_context_t *ctx, l2_channel_t *ch)
   {
  @@ -70,6 +87,10 @@
       if (cfg->iPipe == -1)
           return L2_ERR_ARG;
   
  +    catchsignal(0, ctx); /* initialize signal handler with incoming context */
  +    signal(SIGCHLD, (void(*)())catchsignal); /* pipe changes descriptor     */
  +    signal(SIGPIPE, (void(*)())catchsignal); /* pipe closes reading fd      */
  +
       return rv;
   }
   
  @@ -78,11 +99,21 @@
                                 l2_level_t level, const char *buf, size_t buf_size)
   {
       l2_ch_pipe_t *cfg = (l2_ch_pipe_t *)ctx->vp;
  +    l2_channel_t *downstream = l2_channel_downstream(ch);
  +    l2_result_t rv;
       
  +    /* validate the pipe fd */
  +    if (cfg->iPipe == -1)
  +        return L2_ERR_ARG;
  +
       /* write message to channel pipe */
       if (write(cfg->iPipe, buf, buf_size) == -1)
           return L2_ERR_SYS;
   
  +    /* write to downstream channel */
  +    if ((rv = l2_channel_write(downstream, level, buf, buf_size)) != L2_OK)
  +        return rv;
  +
       return L2_OK;
   }
   
  @@ -90,11 +121,17 @@
   static l2_result_t hook_close(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_pipe_t *cfg = (l2_ch_pipe_t *)ctx->vp;
  -
  +    l2_channel_t *downstream = l2_channel_downstream(ch);
  +    l2_result_t rv;
  +    
       /* close channel pipe */
       close(cfg->iPipe);
       cfg->iPipe = -1;
   
  +    /* close downstream channel, too */
  +    if ((rv = l2_channel_close(downstream)) != L2_OK)
  +        return rv;
  +
       return L2_OK;
   }
   
  @@ -102,16 +139,22 @@
   static l2_result_t hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_pipe_t *cfg = (l2_ch_pipe_t *)ctx->vp;
  +    l2_channel_t *downstream = l2_channel_downstream(ch);
  +    l2_result_t rv;
   
       /* destroy channel configuration */
       free(cfg);
   
  +    /* destroy downstream channel, too */
  +    if ((rv = l2_channel_destroy(downstream)) != L2_OK)
  +        return rv;
  +
       return L2_OK;
   }
   
   /* exported channel handler structure */
   l2_handler_t l2_handler_pipe = {
  -    L2_CHANNEL_OUTPUT,
  +    L2_CHANNEL_FILTER,
       hook_create,
       hook_configure,
       NULL,
  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/09/13 16:19:06	1.20
  +++ ossp-pkg/l2/l2_test.c	2001/09/14 15:40:04	1.21
  @@ -34,6 +34,8 @@
   #include <netinet/in.h>
   #include <netdb.h>
   #include <syslog.h>
  +#include <unistd.h>
  +#include <fcntl.h>
   
   #include "l2.h"
   
  @@ -67,6 +69,7 @@
       l2_channel_t *chBuf;
       l2_channel_t *chFile;
       l2_channel_t *chSyslog;
  +    l2_channel_t *chPipe;
   #ifdef WITH_SOCKET
       l2_channel_t *chSock;
   #endif
  @@ -75,6 +78,7 @@
   #endif
       l2_stream_t *st;
   
  +    int pipdesc[2]; /* For use with our pipe channel test */
       /*
        * Typical steps to use a buffered file logging stream
        */
  @@ -122,12 +126,24 @@
       if (l2_channel_configure(chFile, "path,append,perm", "l2_test.log", TRUE, 0644) != L2_OK)
           die("failed to configure file channel");
   
  +    if (pipe(pipdesc))
  +        die("pipe() call failed");
  +
  +    if ((chPipe = l2_channel_create(&l2_handler_pipe)) == NULL)   /* Pipe */
  +        die("failed to create pipe channel");
  +
  +    if (l2_channel_configure(chPipe, "pipe", pipdesc[1]) != L2_OK)
  +        die("failed to configure pipe channel");
  +
       if (l2_channel_stack(chFile, chBuf) != L2_OK)
           die("failed to stack buffer channel on top of file channel");
       
       if (l2_channel_stack(chBuf, chPrefix) != L2_OK)
           die("failed to stack prefix channel on top of buffer channel");
   
  +    if (l2_channel_stack(chPrefix, chPipe) != L2_OK)
  +        die("failed to stack pipe channel on top of prefix channel");
  +    
       if (l2_channel_open(chPrefix) != L2_OK)
           die("failed to open channel stack");
   
  @@ -177,6 +193,8 @@
       if (l2_stream_destroy(st) != L2_OK)
           die("failed to destroy stream");
   
  +    close(pipdesc[1]); /* Close the locally made pipe file descriptor */
  +    close(pipdesc[0]); /* Close the locally made pipe file descriptor */
       return 0;
   }
   

From ossp-cvs-owner@ossp.org  Fri Sep 14 20:49:38 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8EInbg99151; Fri, 14 Sep 2001 20:49:37 +0200 (CEST)
Date: Fri, 14 Sep 2001 20:49:37 +0200 (CEST)
Message-Id: <200109141849.f8EInbg99151@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   14-Sep-2001 20:49:37
  Branch: HEAD                             Handle: 2001091419493600

  Modified files:
    ossp-pkg/l2             l2_test.c

  Log:
    wrap things with WITH_XXX

  Summary:
    Revision    Changes     Path
    1.22        +13 -4      ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/09/14 15:40:04	1.21
  +++ ossp-pkg/l2/l2_test.c	2001/09/14 18:49:36	1.22
  @@ -68,8 +68,12 @@
       l2_channel_t *chPrefix;
       l2_channel_t *chBuf;
       l2_channel_t *chFile;
  +#ifdef WITH_SYSLOG
       l2_channel_t *chSyslog;
  +#endif
  +#ifdef WITH_PIPE
       l2_channel_t *chPipe;
  +#endif
   #ifdef WITH_SOCKET
       l2_channel_t *chSock;
   #endif
  @@ -126,6 +130,7 @@
       if (l2_channel_configure(chFile, "path,append,perm", "l2_test.log", TRUE, 0644) != L2_OK)
           die("failed to configure file channel");
   
  +#ifdef WITH_PIPE
       if (pipe(pipdesc))
           die("pipe() call failed");
   
  @@ -134,6 +139,7 @@
   
       if (l2_channel_configure(chPipe, "pipe", pipdesc[1]) != L2_OK)
           die("failed to configure pipe channel");
  +#endif
   
       if (l2_channel_stack(chFile, chBuf) != L2_OK)
           die("failed to stack buffer channel on top of file channel");
  @@ -141,8 +147,10 @@
       if (l2_channel_stack(chBuf, chPrefix) != L2_OK)
           die("failed to stack prefix channel on top of buffer channel");
   
  +#ifdef WITH_PIPE
       if (l2_channel_stack(chPrefix, chPipe) != L2_OK)
           die("failed to stack pipe channel on top of prefix channel");
  +#endif
       
       if (l2_channel_open(chPrefix) != L2_OK)
           die("failed to open channel stack");
  @@ -150,19 +158,20 @@
       if (l2_stream_channel(st, chPrefix, L2_LEVEL_UPTO(L2_LEVEL_WARNING), L2_LEVEL_NONE) != L2_OK)
           die("failed to attach channel stack into stream");
   
  +#ifdef WITH_SYSLOG
       if ((chSyslog = l2_channel_create(&l2_handler_syslog)) == NULL)   /* Syslog */
           die("failed to create syslog channel");
   
  -    if (l2_channel_configure(chSyslog, "ident,logopts,facility,priority,maskpriority",\
  -        "Test", (LOG_PID | LOG_CONS), LOG_USER, (LOG_CRIT|LOG_ALERT|LOG_NOTICE),\
  -        0xFFFFFFFF) != L2_OK)
  -        die("failed to configure file channel");
  +    if (l2_channel_configure(chSyslog, "ident,facility,target",
  +        "L2-Test", "user", "local") != L2_OK)
  +        die("failed to configure syslog channel");
   
       if (l2_channel_open(chSyslog) != L2_OK)
           die("failed to open channel stack");
   
       if (l2_stream_channel(st, chSyslog, L2_LEVEL_UPTO(L2_LEVEL_WARNING), L2_LEVEL_NONE) != L2_OK)
           die("failed to attach channel syslog into stream");
  +#endif
   
   #ifdef WITH_SMTP
       if ((chSmtp = l2_channel_create(&l2_handler_smtp)) == NULL)   /* SMTP */

From ossp-cvs-owner@ossp.org  Fri Sep 14 21:06:42 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8EJ6f901362; Fri, 14 Sep 2001 21:06:41 +0200 (CEST)
Date: Fri, 14 Sep 2001 21:06:41 +0200 (CEST)
Message-Id: <200109141906.f8EJ6f901362@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 configure.ac l2_ut_sa.ac l2_ut_sa.c l2_ut_sa.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   14-Sep-2001 21:06:41
  Branch: HEAD                             Handle: 2001091420064000

  Added files:
    ossp-pkg/l2             l2_ut_sa.ac
  Modified files:
    ossp-pkg/l2             configure.ac l2_ut_sa.c l2_ut_sa.h

  Log:
    Upgrade to the latest version of the Socket Abstraction (SA) library
    which is now maintained externally and will be comitted into its own
    module soon. This upgrade fixes the UDP protocol handling.

  Summary:
    Revision    Changes     Path
    1.10        +2  -0      ossp-pkg/l2/configure.ac
    1.1         +41 -0      ossp-pkg/l2/l2_ut_sa.ac
    1.12        +14 -6      ossp-pkg/l2/l2_ut_sa.c
    1.7         +14 -10     ossp-pkg/l2/l2_ut_sa.h
  ____________________________________________________________________________

  Index: ossp-pkg/l2/configure.ac
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 configure.ac
  --- ossp-pkg/l2/configure.ac	2001/09/14 07:44:19	1.9
  +++ ossp-pkg/l2/configure.ac	2001/09/14 19:06:40	1.10
  @@ -83,6 +83,8 @@
   
   AC_CHECK_FUNCS(inet_aton inet_pton inet_ntoa inet_ntop snprintf vsnprintf)
   
  +sinclude(l2_ut_sa.ac)
  +
   AC_CHECK_EXTLIB([Dmalloc], dmalloc, dmalloc_debug, dmalloc.h, AC_DEFINE(WITH_DMALLOC))
   
   AC_OUTPUT(dnl
  Index: ossp-pkg/l2/l2_ut_sa.ac
  ============================================================
  $ cvs update -p -r1.1 l2_ut_sa.ac
  ##
  ##  SA - OSSP Socket Abstraction Library
  ##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  ##
  ##  This file is part of OSSP SA, a socket abstraction library which
  ##  can be found at http://www.ossp.org/pkg/sa/.
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  sa.ac: socket abstraction Autoconf checks
  ##
  
  AC_CHECK_HEADERS(sys/types.h sys/socket.h netdb.h netinet/in.h)
  
  AC_CHECK_LIB(nsl, gethostname)
  if test ".`echo $LIBS | grep nsl`" = .; then
      AC_CHECK_LIB(nsl, gethostbyname)
  fi  
  AC_CHECK_LIB(socket, accept)
  
  AC_CHECK_FUNCS(inet_aton inet_pton)
  AC_CHECK_FUNCS(inet_ntoa inet_ntop)
  AC_CHECK_FUNCS(snprintf vsnprintf)
  
  Index: ossp-pkg/l2/l2_ut_sa.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 l2_ut_sa.c
  --- ossp-pkg/l2/l2_ut_sa.c	2001/09/14 10:22:37	1.11
  +++ ossp-pkg/l2/l2_ut_sa.c	2001/09/14 19:06:40	1.12
  @@ -1,10 +1,10 @@
   /*
  -**  L2 - OSSP Logging Library
  +**  SA - OSSP Socket Abstraction Library
   **  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
   **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
  -**  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.org/pkg/l2/.
  +**  This file is part of OSSP SA, a socket abstraction library which
  +**  can be found at http://www.ossp.org/pkg/sa/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  @@ -24,7 +24,7 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  l2_ut_sa.c: socket abstraction library
  +**  sa.c: socket abstraction library
   */
   
   /* system headers */
  @@ -46,7 +46,7 @@
   #include <arpa/inet.h>
   
   /* own headers */
  -#include "l2_p.h"
  +#include "l2_config.h"
   #include "l2_ut_sa.h"
   
   struct sa_addr_st {
  @@ -376,11 +376,19 @@
   
   static sa_rc_t sa_socket_init(sa_t *sa, int family, int proto)
   {
  +    int type;
  +
       if (sa == NULL)
           return SA_ERR_ARG;
  +    if (proto == IPPROTO_TCP)
  +        type = SOCK_STREAM;
  +    else if (proto == IPPROTO_UDP)
  +        type = SOCK_DGRAM;
  +    else
  +        return SA_ERR_ARG;
       if (sa->sSocket != -1)
           return SA_ERR_USE;
  -    if ((sa->sSocket = socket(family, SOCK_STREAM, proto)) == -1)
  +    if ((sa->sSocket = socket(family, type, proto)) == -1)
           return SA_ERR_SYS;
       return SA_OK;
   }
  Index: ossp-pkg/l2/l2_ut_sa.h
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 l2_ut_sa.h
  --- ossp-pkg/l2/l2_ut_sa.h	2001/09/13 20:27:56	1.6
  +++ ossp-pkg/l2/l2_ut_sa.h	2001/09/14 19:06:40	1.7
  @@ -1,10 +1,10 @@
   /*
  -**  L2 - OSSP Logging Library
  +**  SA - OSSP Socket Abstraction Library
   **  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
   **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
  -**  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.org/pkg/l2/.
  +**  This file is part of OSSP SA, a socket abstraction library which
  +**  can be found at http://www.ossp.org/pkg/sa/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  @@ -24,11 +24,11 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  l2_ut_sa.h: socket abstraction library
  +**  sa.h: socket abstraction API
   */
   
  -#ifndef __L2_UT_SA_H__
  -#define __L2_UT_SA_H__
  +#ifndef __SA_H__
  +#define __SA_H__
   
   #include <string.h>
   #include <sys/types.h>
  @@ -49,25 +49,30 @@
       SA_ERR_INT
   } sa_rc_t;
   
  -sa_rc_t sa_u2a      (sa_addr_t **asaa, const char *uri, ...);
  +/* address operations */
  +sa_rc_t sa_u2a      (sa_addr_t **saa, const char *uri, ...);
   sa_rc_t sa_s2a      (sa_addr_t **saa, const struct sockaddr *sabuf, socklen_t salen);
   sa_rc_t sa_a2u      (const sa_addr_t *saa, char **uri);
   sa_rc_t sa_a2s      (const sa_addr_t *saa, struct sockaddr **sabuf, socklen_t *salen);
   
  +/* object operations */
   sa_rc_t sa_create   (sa_t **sa);
   sa_rc_t sa_destroy  (sa_t *sa);
   
  +/* parameter operations */
   sa_rc_t sa_timeout  (sa_t *sa, long sec, long usec);
   sa_rc_t sa_buffers  (sa_t *sa, size_t rsize, size_t wsize);
   
  +/* connection operations */
   sa_rc_t sa_bind     (sa_t *sa, sa_addr_t *laddr);
   sa_rc_t sa_connect  (sa_t *sa, sa_addr_t *raddr);
   sa_rc_t sa_listen   (sa_t *sa, int backlog);
   sa_rc_t sa_accept   (sa_t *sa, sa_addr_t **caddr, sa_t **csa);
  -
   sa_rc_t sa_getremote(sa_t *sa, sa_addr_t **raddr);
   sa_rc_t sa_getlocal (sa_t *sa, sa_addr_t **laddr);
  +sa_rc_t sa_shutdown (sa_t *sa, char *flags);
   
  +/* input/output operations */
   sa_rc_t sa_read     (sa_t *sa, char *buf, size_t buflen, size_t *bufdone);
   sa_rc_t sa_readfrom (sa_t *sa, char *buf, size_t buflen, size_t *bufdone, sa_addr_t **raddr);
   sa_rc_t sa_readline (sa_t *sa, char *buf, size_t buflen, size_t *bufdone);
  @@ -75,7 +80,6 @@
   sa_rc_t sa_writeto  (sa_t *sa, const char *buf, size_t buflen, size_t *bufdone, sa_addr_t *raddr);
   sa_rc_t sa_printf   (sa_t *sa, const char *fmt, ...);
   sa_rc_t sa_flush    (sa_t *sa);
  -sa_rc_t sa_shutdown (sa_t *sa, char *flags);
   
  -#endif /* __L2_UT_SA_H__ */
  +#endif /* __SA_H__ */
   

From ossp-cvs-owner@ossp.org  Fri Sep 14 21:11:01 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8EJB0601680; Fri, 14 Sep 2001 21:11:00 +0200 (CEST)
Date: Fri, 14 Sep 2001 21:11:00 +0200 (CEST)
Message-Id: <200109141911.f8EJB0601680@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_syslog.c l2_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   14-Sep-2001 21:11:00
  Branch: HEAD                             Handle: 2001091420110000

  Modified files:
    ossp-pkg/l2             l2_ch_syslog.c l2_test.c

  Log:
    Revamp Syslog output channel. It now fully supports local _AND_ remote
    logging. The local variant is still based on syslog(3), the remote
    variant is based on manual network connections with the syslog protocol
    as defined in RFC3164.

  Summary:
    Revision    Changes     Path
    1.21        +243 -28    ossp-pkg/l2/l2_ch_syslog.c
    1.23        +2  -2      ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_syslog.c
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 l2_ch_syslog.c
  --- ossp-pkg/l2/l2_ch_syslog.c	2001/09/12 09:42:34	1.20
  +++ ossp-pkg/l2/l2_ch_syslog.c	2001/09/14 19:11:00	1.21
  @@ -28,33 +28,123 @@
   */
   
   #include "l2.h"
  +#include "l2_p.h"
   
   #include <syslog.h>
  +#include <time.h>
  +#include <sys/types.h>
  +#include <sys/utsname.h>
  +#include <unistd.h>
   
   /* declare private channel configuration */
   typedef struct {
  -    char *pszIdent; /* String to prepend to each syslog message */
  -    int iLogopt;    /* Manipulates how kernel interacts with syslogd */
  -    int iFacility;  /* Which part of the system generates this message */
  -    int iPriority;  /* EMERG, ALERT, CRIT, ERR, WARNING, NOTICE, INFO... */
  -    int iMaskpri;   /* Controls which priorities are or are not logged */
  +    char      *szTarget;
  +    char      *szRemoteHost;
  +    int        nRemotePort;
  +    char      *szLocalHost;
  +    char      *szFacility;
  +    int        nFacility;
  +    char      *szIdent;
  +    int        bLogPid;
  +    sa_t      *saRemoteSock;
  +    sa_addr_t *saaRemoteAddr;
   } l2_ch_syslog_t;
   
  +/* mapping from L2 log levels to syslog(3) log levels */
  +static struct {
  +    int levelL2;
  +    int levelSL;
  +} l2_ch_syslog_L2toSL[] = {
  +    { L2_LEVEL_PANIC,    LOG_EMERG   },
  +    { L2_LEVEL_CRITICAL, LOG_CRIT    },
  +    { L2_LEVEL_ERROR,    LOG_ERR	 },
  +    { L2_LEVEL_WARNING,  LOG_WARNING },
  +    { L2_LEVEL_NOTICE,   LOG_NOTICE  },
  +    { L2_LEVEL_INFO,     LOG_INFO	 },
  +    { L2_LEVEL_TRACE,    LOG_INFO    },
  +    { L2_LEVEL_DEBUG,    LOG_DEBUG   },
  +    { -1,                -1          }
  +};
  +
  +/* Syslog Facility Table */
  +static struct {
  +    char *name;      /* the common name */
  +    int   numREMOTE; /* number according to RFC3164 */
  +    int   numLOCAL;  /* local encoding */
  +} l2_ch_syslog_SLfac[] = {
  +    { "kern",      0,      LOG_KERN     },
  +    { "user",      1,      LOG_USER     },
  +    { "mail",      2,      LOG_MAIL     },
  +    { "daemon",    3,      LOG_DAEMON   },
  +    { "auth",      4,      LOG_AUTH     },
  +#ifndef LOG_SYSLOG
  +#define LOG_SYSLOG   (5 << 3)
  +#endif
  +    { "syslog",    5,      LOG_SYSLOG   },
  +    { "lpr",       6,      LOG_LPR      },
  +    { "news",      7,      LOG_NEWS     },
  +    { "uucp",      8,      LOG_UUCP     },
  +    { "cron",      9,      LOG_CRON     },
  +#ifndef LOG_AUTHPRIV
  +#define LOG_AUTHPRIV (10 << 3)
  +#endif
  +    { "authpriv", 10,      LOG_AUTHPRIV },
  +    { "ftp",      11,      LOG_FTP      },
  +#ifndef LOG_NTP
  +#define LOG_NTP      (12 << 3)
  +#endif
  +    { "ntp",      12,      LOG_NTP      },
  +#ifndef LOG_SECURITY
  +#define LOG_SECURITY (13 << 3)
  +#endif
  +    { "security", 13,      LOG_SECURITY },
  +#ifndef LOG_CONSOLE
  +#define LOG_CONSOLE  (14 << 3)
  +#endif
  +    { "console",  14,      LOG_CONSOLE  },
  +#ifndef LOG_CLOCK
  +#define LOG_CLOCK    (15 << 3)
  +#endif
  +    { "clock",    15,      LOG_CLOCK    },
  +    { "local0",   16,      LOG_LOCAL0   },
  +    { "local1",   17,      LOG_LOCAL1   },
  +    { "local2",   18,      LOG_LOCAL2   },
  +    { "local3",   19,      LOG_LOCAL3   },
  +    { "local4",   20,      LOG_LOCAL4   },
  +    { "local5",   21,      LOG_LOCAL5   },
  +    { "local6",   22,      LOG_LOCAL6   },
  +    { "local7",   23,      LOG_LOCAL7   },
  +    { NULL,       0,       0            }
  +};
  +
   /* create channel */
   static l2_result_t hook_create(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_syslog_t *cfg;
  +    struct utsname uts;
  +    char *cp;
   
       /* allocate private channel configuration */
       if ((cfg = (l2_ch_syslog_t *)malloc(sizeof(l2_ch_syslog_t))) == NULL)
           return L2_ERR_MEM;
   
       /* initialize configuration with reasonable defaults */
  -    cfg->pszIdent  = NULL;
  -    cfg->iLogopt   = 0;
  -    cfg->iFacility = LOG_USER;
  -    cfg->iPriority = (LOG_DEBUG|LOG_ERR);
  -    cfg->iMaskpri  = (0xFFFFFFFF); /* Allow all priorities to pass through */
  +    cfg->szTarget      = strdup("local");
  +    cfg->szRemoteHost  = NULL;
  +    cfg->nRemotePort   = 514;
  +    if (uname(&uts) == 0) {
  +        cfg->szLocalHost = strdup(uts.nodename);
  +        if ((cp = strchr(cfg->szLocalHost, '.')) != NULL)
  +            *cp = '\0';
  +    }
  +    else
  +        cfg->szLocalHost = strdup("localhost");
  +    cfg->szFacility    = strdup("user");
  +    cfg->nFacility     = LOG_USER;
  +    cfg->szIdent       = NULL;
  +    cfg->bLogPid       = FALSE;
  +    cfg->saRemoteSock  = NULL;
  +    cfg->saaRemoteAddr = NULL;
   
       /* link private channel configuration into channel context */
       ctx->vp = cfg;
  @@ -66,18 +156,45 @@
   static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
       l2_ch_syslog_t *cfg = (l2_ch_syslog_t *)ctx->vp;
  -    l2_param_t pa[6];
  +    l2_param_t pa[8];
       l2_result_t rv;
  +    int i;
   
       /* feed and call generic parameter parsing engine */
  -    L2_PARAM_SET(pa[0], ident,   CHARPTR,  &cfg->pszIdent);
  -    L2_PARAM_SET(pa[1], logopts, INT,      &cfg->iLogopt);
  -    L2_PARAM_SET(pa[2], facility, INT,     &cfg->iFacility);
  -    L2_PARAM_SET(pa[3], priority, INT,     &cfg->iPriority);
  -    L2_PARAM_SET(pa[4], maskpriority, INT, &cfg->iMaskpri);
  -    L2_PARAM_END(pa[5]);
  -    rv = l2_util_setparams(pa, fmt, ap);
  +    L2_PARAM_SET(pa[0], target,     STRING, &cfg->szTarget);
  +    L2_PARAM_SET(pa[1], remotehost, STRING, &cfg->szRemoteHost);
  +    L2_PARAM_SET(pa[2], remoteport, INT,    &cfg->nRemotePort);
  +    L2_PARAM_SET(pa[3], localhost,  STRING, &cfg->szLocalHost);
  +    L2_PARAM_SET(pa[4], facility,   STRING, &cfg->szFacility);
  +    L2_PARAM_SET(pa[5], ident,      STRING, &cfg->szIdent);
  +    L2_PARAM_SET(pa[6], logpid,     INT,    &cfg->bLogPid);
  +    L2_PARAM_END(pa[7]);
   
  +    /* sanity checking & post-processing */
  +    rv = l2_util_setparams(pa, fmt, ap);
  +    if (cfg->szTarget == NULL || cfg->szFacility == NULL)
  +        return L2_ERR_USE;
  +    if (!(   strcmp(cfg->szTarget, "local") == 0
  +          || strcmp(cfg->szTarget, "remote") == 0))
  +        return L2_ERR_USE;
  +    for (i = 0; l2_ch_syslog_SLfac[i].name != NULL; i++)
  +        if (strcmp(l2_ch_syslog_SLfac[i].name, cfg->szFacility) == 0)
  +            break;
  +    if (l2_ch_syslog_SLfac[i].name == NULL)
  +        return L2_ERR_USE;
  +    if (strcmp(cfg->szTarget, "local") == 0)
  +        cfg->nFacility = l2_ch_syslog_SLfac[i].numLOCAL;
  +    else
  +        cfg->nFacility = (l2_ch_syslog_SLfac[i].numREMOTE << 3);
  +    if (   strcmp(cfg->szTarget, "remote") == 0 
  +        && (cfg->szRemoteHost == NULL
  +            || (cfg->nRemotePort <= 0 || cfg->nRemotePort >= 65536)))
  +        return L2_ERR_USE;
  +    if (   cfg->szLocalHost == NULL
  +        || strchr(cfg->szLocalHost, '.') != NULL)
  +        return L2_ERR_USE;
  +    if (cfg->szIdent != NULL && strlen(cfg->szIdent) > (32-(1+5+1)))
  +        return L2_ERR_USE;
       return rv;
   }
   
  @@ -85,11 +202,36 @@
   static l2_result_t hook_open(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_syslog_t *cfg = (l2_ch_syslog_t *)ctx->vp;
  -
  -    /* open channel syslog */
  -    openlog(cfg->pszIdent, cfg->iLogopt, cfg->iFacility);
  -    setlogmask(cfg->iMaskpri);
  -
  +    int opt;
  +    sa_rc_t rc;
  +    sa_addr_t *la;
  +
  +    if (cfg->szIdent == NULL)
  +        return L2_ERR_USE;
  +    if (strcmp(cfg->szTarget, "local") == 0) {
  +        /* open local syslog connection via syslog(3) */
  +        opt = 0;
  +        if (cfg->bLogPid)
  +            opt |= LOG_PID;
  +        openlog(cfg->szIdent, opt, cfg->nFacility);
  +        /* setlogmask(0); */
  +    }
  +    else {
  +        /* open remote syslog connection via UDP socket */
  +        if (cfg->szRemoteHost == NULL)
  +            return L2_ERR_USE;
  +        if ((rc = sa_u2a(&cfg->saaRemoteAddr, "udp://%s:%d", 
  +                         cfg->szRemoteHost, cfg->nRemotePort)) != SA_OK)
  +            return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
  +        if ((rc = sa_create(&cfg->saRemoteSock)) != SA_OK)
  +            return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
  +        sa_timeout(cfg->saRemoteSock, 10, 0);
  +        /* FIXME: if uid == 0 -> use port 514 */
  +        if ((rc = sa_u2a(&la, "udp://0.0.0.0:0")) != SA_OK)
  +            return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
  +        if ((rc = sa_bind(cfg->saRemoteSock, la)) != SA_OK)
  +            return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
  +    }
       return L2_OK;
   }
   
  @@ -98,9 +240,56 @@
                                 l2_level_t level, const char *buf, size_t buf_size)
   {
       l2_ch_syslog_t *cfg = (l2_ch_syslog_t *)ctx->vp;
  -
  -    /* write message to channel syslog */
  -    syslog(cfg->iPriority, buf);
  +    int prio;
  +    int i;
  +    char caTime[15+1];
  +    char caBuf[2048];
  +    time_t t;
  +    struct tm *tm;
  +    size_t n;
  +    sa_rc_t rc;
  +
  +    /* determine syslog priority */
  +    prio = 0;
  +    for (i = 0; l2_ch_syslog_L2toSL[i].levelL2 != -1; i++) {
  +        if (l2_ch_syslog_L2toSL[i].levelL2 == level) {
  +            prio = l2_ch_syslog_L2toSL[i].levelSL;
  +            break;
  +        }
  +    }
  +    if (l2_ch_syslog_L2toSL[i].levelL2 == -1)
  +        return L2_ERR_USE;
  +
  +    /* FIXME: nul-terminate buf? */
  +
  +    if (strcmp(cfg->szTarget, "local") == 0) {
  +        /* send to local syslogd via syslog(3) */
  +        syslog(prio, buf);
  +    }
  +    else {
  +        /* send to remote syslogd via UDP */
  +        if (strlen(buf) > 1024)
  +            return L2_ERR_MEM;
  +        prio += cfg->nFacility;
  +        t = time(NULL);
  +        tm = localtime(&t);
  +        strftime(caTime, sizeof(caTime), "%b %d %H:%M:%S", tm);
  +        if (caTime[4] == '0')
  +            caTime[4] = ' ';
  +        if (cfg->bLogPid) 
  +            sprintf(caBuf, "<%d>%s %s %s[%lu]: %s", 
  +                    prio, caTime, cfg->szLocalHost, 
  +                    cfg->szIdent, (unsigned long)getpid(), buf);
  +        else
  +            sprintf(caBuf, "<%d>%s %s %s: %s", 
  +                    prio, caTime, cfg->szLocalHost, 
  +                    cfg->szIdent, buf);
  +        if ((n = strlen(caBuf)) > 1024)
  +            return L2_ERR_IO;
  +        if ((rc = sa_writeto(cfg->saRemoteSock, caBuf, n, 
  +                             NULL, cfg->saaRemoteAddr)) != SA_OK)
  +            return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_IO);
  +    }
   
       return L2_OK;
   }
  @@ -108,9 +297,21 @@
   /* close channel */
   static l2_result_t hook_close(l2_context_t *ctx, l2_channel_t *ch)
   {
  -    /* close channel syslog */
  -    closelog();
  +    l2_ch_syslog_t *cfg = (l2_ch_syslog_t *)ctx->vp;
   
  +    if (strcmp(cfg->szTarget, "local") == 0) {
  +        closelog();
  +    }
  +    else {
  +        if (cfg->saRemoteSock != NULL) {
  +            sa_destroy(cfg->saRemoteSock);
  +            cfg->saRemoteSock = NULL;
  +        }
  +        if (cfg->saaRemoteAddr != NULL) {
  +            free(cfg->saaRemoteAddr);
  +            cfg->saaRemoteAddr = NULL;
  +        }
  +    }
       return L2_OK;
   }
   
  @@ -120,6 +321,20 @@
       l2_ch_syslog_t *cfg = (l2_ch_syslog_t *)ctx->vp;
   
       /* destroy channel configuration */
  +    if (cfg->szTarget != NULL)
  +        free(cfg->szTarget);
  +    if (cfg->szRemoteHost != NULL)
  +        free(cfg->szRemoteHost);
  +    if (cfg->szLocalHost != NULL)
  +        free(cfg->szLocalHost);
  +    if (cfg->szFacility != NULL)
  +        free(cfg->szFacility);
  +    if (cfg->szIdent != NULL)
  +        free(cfg->szIdent);
  +    if (cfg->saRemoteSock != NULL)
  +        sa_destroy(cfg->saRemoteSock);
  +    if (cfg->saaRemoteAddr != NULL)
  +        free(cfg->saaRemoteAddr);
       free(cfg);
   
       return L2_OK;
  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/09/14 18:49:36	1.22
  +++ ossp-pkg/l2/l2_test.c	2001/09/14 19:11:00	1.23
  @@ -162,8 +162,8 @@
       if ((chSyslog = l2_channel_create(&l2_handler_syslog)) == NULL)   /* Syslog */
           die("failed to create syslog channel");
   
  -    if (l2_channel_configure(chSyslog, "ident,facility,target",
  -        "L2-Test", "user", "local") != L2_OK)
  +    if (l2_channel_configure(chSyslog, "ident,facility,target,remotehost,logpid",
  +        "L2-Test", "user", "remote", "en1", 1) != L2_OK)
           die("failed to configure syslog channel");
   
       if (l2_channel_open(chSyslog) != L2_OK)

From ossp-cvs-owner@ossp.org  Fri Sep 14 21:22:39 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8EJMcb02925; Fri, 14 Sep 2001 21:22:38 +0200 (CEST)
Date: Fri, 14 Sep 2001 21:22:38 +0200 (CEST)
Message-Id: <200109141922.f8EJMcb02925@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   14-Sep-2001 21:22:38
  Branch: HEAD                             Handle: 2001091420223800

  Modified files:
    ossp-pkg/l2             l2.pod

  Log:
    document syslog channel

  Summary:
    Revision    Changes     Path
    1.6         +52 -1      ossp-pkg/l2/l2.pod
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2.pod
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 l2.pod
  --- ossp-pkg/l2/l2.pod	2001/09/14 13:26:16	1.5
  +++ ossp-pkg/l2/l2.pod	2001/09/14 19:22:38	1.6
  @@ -51,9 +51,60 @@
   
   =head1 AVAILABLE CHANNEL HANDLERS
   
  +=head2 Syslog Output Channel Handler (l2_handler_syslog)
  +
  +The Syslog output channel handler C<l2_handler_syslog> sends the
  +incoming message either via syslog(3) to a local syslogd(8) or via BSD
  +Syslog protocol to a remote Syslog service. It conforms to RFC 3164 (The
  +BSD syslog Protocol; C. Lonvick; August 2001).
  +
  +It provides the following channel parameters:
  +
  +=over 4
  +
  +=item B<target> (optional, C<char *>)
  +
  +Sets the location of the target Syslog service. Possible values
  +are C<local> (the default) or C<remote>. If C<remote> is used, the
  +parameters C<remotehost> has to be set, too.
  +
  +=item B<remotehost> (optional, C<char *>)
  +
  +Host name or IP address of the remote Syslog service.
  +No default exists, user has to provide value.
  +
  +=item B<remoteport> (optional, C<int>)     
  +
  +Port number of the remote SMTP service.
  +Default is C<514>.
  +
  +=item B<localhost> (optional, C<char *>)     
  +
  +The name of the local host, I<without> any domain appended.
  +
  +=item B<facility> (optional, C<char *>)     
  +
  +The Syslog facility used for all messages. It has to be one of the
  +following: C<kern>, C<user>, C<mail>, C<daemon>, C<auth>, C<syslog>,
  +C<lpr>, C<news>, C<uucp>, C<cron>, C<authpriv>, C<ftp>, C<ntp>,
  +C<security>, C<console>, C<clock>, C<local0>, C<local1>, C<local2>,
  +C<local3>, C<local4>, C<local5>, C<local6>, C<local7>.
  +
  +=item B<ident> (I<mandatory>, C<char *>)     
  +
  +Arbitrary string identifying the program.
  +There is no default, user has to provide value.
  +
  +=item B<logpid> (optional, C<int>)     
  +
  +Boolean flag whether to add the Process ID (pid)
  +to the B<ident> tag in messages. Default is C<0>.
  +
  +=back
  +
   =head2 SMTP Output Channel Handler (l2_handler_smtp)
   
  -The SMTP output channel handler C<l2_channel_smtp> sends the incoming
  +The SMTP output channel handler C<l2_handler_smtp> sends the incoming
   message via Simple Mail Transfer Protocol (SMTP) as an Email to a remote
   mail service. It conforms to RFC 2821 (Simple Mail Transfer Protocol; J.
   Klensin; April 2001) and RFC 2822 (Internet Message Format; P. Resnick;

From ossp-cvs-owner@ossp.org  Sat Sep 15 18:03:41 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8FG3cB69430; Sat, 15 Sep 2001 18:03:38 +0200 (CEST)
Date: Sat, 15 Sep 2001 18:03:38 +0200 (CEST)
Message-Id: <200109151603.f8FG3cB69430@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 .cvsignore Makefile.in l2_ut_pcre.c l2_ut_pcre...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   15-Sep-2001 18:03:38
  Branch: HEAD                             Handle: 2001091517033700

  Modified files:
    ossp-pkg/l2             .cvsignore Makefile.in l2_ut_pcre.c l2_ut_pcre.h

  Log:
    Reduce to the new generated version of PCRE 3.5. This version is just
    half the size, because all comments and unneccessary whitespaces were
    stripped.

  Summary:
    Revision    Changes     Path
    1.10        +2  -2      ossp-pkg/l2/.cvsignore
    1.24        +6  -7      ossp-pkg/l2/Makefile.in
    1.2         +3861 -5435 ossp-pkg/l2/l2_ut_pcre.c
    1.2         +17 -29     ossp-pkg/l2/l2_ut_pcre.h
  ____________________________________________________________________________

  Index: ossp-pkg/l2/.cvsignore
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 .cvsignore
  --- ossp-pkg/l2/.cvsignore	2001/09/10 11:20:58	1.9
  +++ ossp-pkg/l2/.cvsignore	2001/09/15 16:03:37	1.10
  @@ -17,6 +17,6 @@
   shtool
   l2-config.1
   l2.3
  -l2_ut_pcre_gen
  -l2_ut_pcre_tab.c
  +l2_ut_pcre.gen
  +l2_ut_pcre.tab
   l2.h
  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 Makefile.in
  --- ossp-pkg/l2/Makefile.in	2001/09/13 14:44:40	1.23
  +++ ossp-pkg/l2/Makefile.in	2001/09/15 16:03:37	1.24
  @@ -149,12 +149,11 @@
   	    -version-info `$(SHTOOL) version -l c -d libtool l2_version.c`
   
   #   build regex library
  -l2_ut_pcre.lo: l2_ut_pcre.c
  -l2_ut_pcre.c: l2_ut_pcre_tab.c
  -l2_ut_pcre_tab.c: l2_ut_pcre_gen
  -	./l2_ut_pcre_gen >l2_ut_pcre_tab.c
  -l2_ut_pcre_gen:
  -	$(CC) $(CFLAGS) -DL2_UT_PCRE_GENTAB $(LDFLAGS) -o l2_ut_pcre_gen l2_ut_pcre.c $(LIBS)
  +l2_ut_pcre.lo: l2_ut_pcre.tab l2_ut_pcre.c
  +l2_ut_pcre.tab: l2_ut_pcre.c
  +	$(CC) $(CFLAGS) -DL2_UT_PCRE_TAB $(LDFLAGS) -o l2_ut_pcre.gen l2_ut_pcre.c $(LIBS)
  +	./l2_ut_pcre.gen >l2_ut_pcre.tab
  +	-$(RM) l2_ut_pcre.gen
   
   #   build test suite programs
   l2_test: l2_test.o libl2.la
  @@ -247,7 +246,7 @@
   	$(RM) libtool
   	$(RM) Makefile
   	$(RM) l2_test.log
  -	$(RM) l2_ut_pcre_gen l2_ut_pcre_tab.c
  +	$(RM) l2_ut_pcre.tab
   	$(RM) l2.h
   
   #   remove everything which can be regenerated
  Index: ossp-pkg/l2/l2_ut_pcre.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 l2_ut_pcre.c
  --- ossp-pkg/l2/l2_ut_pcre.c	2001/09/04 14:52:28	1.1
  +++ ossp-pkg/l2/l2_ut_pcre.c	2001/09/15 16:03:37	1.2
  @@ -1,50 +1,50 @@
  -/*************************************************
  -*      Perl-Compatible Regular Expressions       *
  -*************************************************/
  +/* 
  + *  Perl Compatible Regular Expression (PCRE) Library
  + *  Copyright (c) 1997-2001 Philip Hazel <ph10@cam.ac.uk>
  + *  Copyright (c) 1997-2001 University of Cambridge
  + *
  + *  DO NOT EDIT THIS FILE, IT WAS AUTOMATICALLY GENERATED!
  + *
  + *  This is an automatically generated, extremely stripped down
  + *  version of the PCRE 3.5 library from the Philip Hazel.
  + *  This version is still distributed under the same original PCRE
  + *  Open Source license, but Philip Hazel is no longer responsible
  + *  for this version.
  + */
  +
  +/* 
  +   This is a library of functions to support regular expressions whose syntax
  +   and semantics are as close as possible to those of the Perl 5 language. See
  +   the file Tech.Notes for some information on the internals.
  +
  +   Written by: Philip Hazel <ph10@cam.ac.uk>
  +
  +   Copyright (c) 1997-2001 University of Cambridge
  +
  +   -----------------------------------------------------------------------------
  +   Permission is granted to anyone to use this software for any purpose on any
  +   computer system, and to redistribute it freely, subject to the following
  +   restrictions:
  +
  +   1. This software is distributed in the hope that it will be useful, but
  +   WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  +   FITNESS FOR A PARTICULAR PURPOSE.
   
  -/*
  -This is a library of functions to support regular expressions whose syntax
  -and semantics are as close as possible to those of the Perl 5 language. See
  -the file Tech.Notes for some information on the internals.
  +   2. The origin of this software must not be misrepresented, either by explicit
  +   claim or by omission.
   
  -Written by: Philip Hazel <ph10@cam.ac.uk>
  -
  -           Copyright (c) 1997-2001 University of Cambridge
  -
  ------------------------------------------------------------------------------
  -Permission is granted to anyone to use this software for any purpose on any
  -computer system, and to redistribute it freely, subject to the following
  -restrictions:
  -
  -1. This software is distributed in the hope that it will be useful,
  -   but WITHOUT ANY WARRANTY; without even the implied warranty of
  -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  -
  -2. The origin of this software must not be misrepresented, either by
  -   explicit claim or by omission.
  -
  -3. Altered versions must be plainly marked as such, and must not be
  +   3. Altered versions must be plainly marked as such, and must not be
      misrepresented as being the original software.
  -
  -4. If PCRE is embedded in any software that is released under the GNU
  -   General Purpose Licence (GPL), then the terms of that licence shall
  -   supersede any condition above with which it is incompatible.
  ------------------------------------------------------------------------------
  -*/
  -
  -/* ____ BEGIN internal.h ____ */
  -
  -/* This header contains definitions that are shared between the different
  -modules, but which are not relevant to the outside. */
   
  -/* Get the definitions provided by running "configure" */
  +   4. If PCRE is embedded in any software that is released under the GNU General
  +   Purpose Licence (GPL), then the terms of that licence shall supersede any
  +   condition above with which it is incompatible.
  +   ----------------------------------------------------------------------------- */
   
   #ifdef HAVE_CONFIG_H
   #include "config.h"
   #endif
   
  -/* Standard C headers plus the external interface definition */
  -
   #include <ctype.h>
   #include <limits.h>
   #include <stddef.h>
  @@ -53,51 +53,31 @@
   #include <string.h>
   #include "l2_ut_pcre.h"
   
  -/* In case there is no definition of offsetof() provided - though any proper
  -Standard C system should have one. */
  -
   #ifndef offsetof
   #define offsetof(p_type,field) ((size_t)&(((p_type *)0)->field))
   #endif
   
  -/* These are the public options that can change during matching. */
  -
   #define PCRE_IMS (PCRE_CASELESS|PCRE_MULTILINE|PCRE_DOTALL)
  -
  -/* Private options flags start at the most significant end of the four bytes,
  -but skip the top bit so we can use ints for convenience without getting tangled
  -with negative values. The public options defined in pcre.h start at the least
  -significant end. Make sure they don't overlap, though now that we have expanded
  -to four bytes there is plenty of space. */
  -
  -#define PCRE_FIRSTSET      0x40000000  /* first_char is set */
  -#define PCRE_REQCHSET      0x20000000  /* req_char is set */
  -#define PCRE_STARTLINE     0x10000000  /* start after \n for multiline */
  -#define PCRE_INGROUP       0x08000000  /* compiling inside a group */
  -#define PCRE_ICHANGED      0x04000000  /* i option changes within regex */
   
  -/* Options for the "extra" block produced by pcre_study(). */
  +#define PCRE_FIRSTSET      0x40000000
  +#define PCRE_REQCHSET      0x20000000
  +#define PCRE_STARTLINE     0x10000000
  +#define PCRE_INGROUP       0x08000000
  +#define PCRE_ICHANGED      0x04000000
   
  -#define PCRE_STUDY_MAPPED   0x01     /* a map of starting chars exists */
  +#define PCRE_STUDY_MAPPED   0x01
   
  -/* Masks for identifying the public options which are permitted at compile
  -time, run time or study time, respectively. */
  -
   #define PUBLIC_OPTIONS \
     (PCRE_CASELESS|PCRE_EXTENDED|PCRE_ANCHORED|PCRE_MULTILINE| \
      PCRE_DOTALL|PCRE_DOLLAR_ENDONLY|PCRE_EXTRA|PCRE_UNGREEDY|PCRE_UTF8)
   
   #define PUBLIC_EXEC_OPTIONS \
     (PCRE_ANCHORED|PCRE_NOTBOL|PCRE_NOTEOL|PCRE_NOTEMPTY)
  -
  -#define PUBLIC_STUDY_OPTIONS 0   /* None defined */
   
  -/* Magic number to provide a small check against being handed junk. */
  +#define PUBLIC_STUDY_OPTIONS 0
   
  -#define MAGIC_NUMBER  0x50435245UL   /* 'PCRE' */
  +#define MAGIC_NUMBER  0x50435245UL
   
  -/* Miscellaneous definitions */
  -
   typedef int BOOL;
   
   #ifndef FALSE
  @@ -107,10 +87,6 @@
   #define TRUE    1
   #endif
   
  -/* Escape items that are just an encoding of a particular data value. Note that
  -ESC_N is defined as yet another macro, which is set in config.h to either \n
  -(the default) or \r (which some people want). */
  -
   #ifndef ESC_E
   #define ESC_E 27
   #endif
  @@ -131,132 +107,99 @@
   #define ESC_T '\t'
   #endif
   
  -/* These are escaped items that aren't just an encoding of a particular data
  -value such as \n. They must have non-zero values, as check_escape() returns
  -their negation. Also, they must appear in the same order as in the opcode
  -definitions below, up to ESC_z. The final one must be ESC_REF as subsequent
  -values are used for \1, \2, \3, etc. There is a test in the code for an escape
  -greater than ESC_b and less than ESC_Z to detect the types that may be
  -repeated. If any new escapes are put in-between that don't consume a character,
  -that code will have to change. */
  -
   enum { ESC_A = 1, ESC_B, ESC_b, ESC_D, ESC_d, ESC_S, ESC_s, ESC_W, ESC_w,
  -       ESC_Z, ESC_z, ESC_REF };
  -
  -/* Opcode table: OP_BRA must be last, as all values >= it are used for brackets
  -that extract substrings. Starting from 1 (i.e. after OP_END), the values up to
  -OP_EOD must correspond in order to the list of escapes immediately above. */
  +	ESC_Z, ESC_z, ESC_REF
  +};
   
   enum {
  -  OP_END,
  +	OP_END,
   
  -  /* Values corresponding to backslashed metacharacters */
  +	OP_SOD,
  +	OP_NOT_WORD_BOUNDARY,
  +	OP_WORD_BOUNDARY,
  +	OP_NOT_DIGIT,
  +	OP_DIGIT,
  +	OP_NOT_WHITESPACE,
  +	OP_WHITESPACE,
  +	OP_NOT_WORDCHAR,
  +	OP_WORDCHAR,
  +	OP_EODN,
  +	OP_EOD,
  +
  +	OP_OPT,
  +	OP_CIRC,
  +	OP_DOLL,
  +	OP_ANY,
  +	OP_CHARS,
  +	OP_NOT,
  +
  +	OP_STAR,
  +	OP_MINSTAR,
  +	OP_PLUS,
  +	OP_MINPLUS,
  +	OP_QUERY,
  +	OP_MINQUERY,
  +	OP_UPTO,
  +	OP_MINUPTO,
  +	OP_EXACT,
  +
  +	OP_NOTSTAR,
  +	OP_NOTMINSTAR,
  +	OP_NOTPLUS,
  +	OP_NOTMINPLUS,
  +	OP_NOTQUERY,
  +	OP_NOTMINQUERY,
  +	OP_NOTUPTO,
  +	OP_NOTMINUPTO,
  +	OP_NOTEXACT,
  +
  +	OP_TYPESTAR,
  +	OP_TYPEMINSTAR,
  +	OP_TYPEPLUS,
  +	OP_TYPEMINPLUS,
  +	OP_TYPEQUERY,
  +	OP_TYPEMINQUERY,
  +	OP_TYPEUPTO,
  +	OP_TYPEMINUPTO,
  +	OP_TYPEEXACT,
  +
  +	OP_CRSTAR,
  +	OP_CRMINSTAR,
  +	OP_CRPLUS,
  +	OP_CRMINPLUS,
  +	OP_CRQUERY,
  +	OP_CRMINQUERY,
  +	OP_CRRANGE,
  +	OP_CRMINRANGE,
  +
  +	OP_CLASS,
  +	OP_REF,
  +	OP_RECURSE,
  +
  +	OP_ALT,
  +	OP_KET,
  +	OP_KETRMAX,
  +	OP_KETRMIN,
  +
  +	OP_ASSERT,
  +	OP_ASSERT_NOT,
  +	OP_ASSERTBACK,
  +	OP_ASSERTBACK_NOT,
  +	OP_REVERSE,
  +
  +	OP_ONCE,
  +	OP_COND,
  +	OP_CREF,
   
  -  OP_SOD,            /* Start of data: \A */
  -  OP_NOT_WORD_BOUNDARY,  /* \B */
  -  OP_WORD_BOUNDARY,      /* \b */
  -  OP_NOT_DIGIT,          /* \D */
  -  OP_DIGIT,              /* \d */
  -  OP_NOT_WHITESPACE,     /* \S */
  -  OP_WHITESPACE,         /* \s */
  -  OP_NOT_WORDCHAR,       /* \W */
  -  OP_WORDCHAR,           /* \w */
  -  OP_EODN,
  -  OP_EOD,
  -
  -  OP_OPT,            /* Set runtime options */
  -  OP_CIRC,           /* Start of line - varies with multiline switch */
  -  OP_DOLL,
  -  OP_ANY,            /* Match any character */
  -  OP_CHARS,          /* Match string of characters */
  -  OP_NOT,            /* Match anything but the following char */
  -
  -  OP_STAR,           /* The maximizing and minimizing versions of */
  -  OP_MINSTAR,        /* all these opcodes must come in pairs, with */
  -  OP_PLUS,           /* the minimizing one second. */
  -  OP_MINPLUS,        /* This first set applies to single characters */
  -  OP_QUERY,
  -  OP_MINQUERY,
  -  OP_UPTO,           /* From 0 to n matches */
  -  OP_MINUPTO,
  -  OP_EXACT,          /* Exactly n matches */
  -
  -  OP_NOTSTAR,        /* The maximizing and minimizing versions of */
  -  OP_NOTMINSTAR,     /* all these opcodes must come in pairs, with */
  -  OP_NOTPLUS,        /* the minimizing one second. */
  -  OP_NOTMINPLUS,     /* This first set applies to "not" single characters */
  -  OP_NOTQUERY,
  -  OP_NOTMINQUERY,
  -  OP_NOTUPTO,        /* From 0 to n matches */
  -  OP_NOTMINUPTO,
  -  OP_NOTEXACT,       /* Exactly n matches */
  -
  -  OP_TYPESTAR,       /* The maximizing and minimizing versions of */
  -  OP_TYPEMINSTAR,    /* all these opcodes must come in pairs, with */
  -  OP_TYPEPLUS,       /* the minimizing one second. These codes must */
  -  OP_TYPEMINPLUS,    /* be in exactly the same order as those above. */
  -  OP_TYPEQUERY,      /* This set applies to character types such as \d */
  -  OP_TYPEMINQUERY,
  -  OP_TYPEUPTO,       /* From 0 to n matches */
  -  OP_TYPEMINUPTO,
  -  OP_TYPEEXACT,      /* Exactly n matches */
  -
  -  OP_CRSTAR,         /* The maximizing and minimizing versions of */
  -  OP_CRMINSTAR,      /* all these opcodes must come in pairs, with */
  -  OP_CRPLUS,         /* the minimizing one second. These codes must */
  -  OP_CRMINPLUS,      /* be in exactly the same order as those above. */
  -  OP_CRQUERY,        /* These are for character classes and back refs */
  -  OP_CRMINQUERY,
  -  OP_CRRANGE,        /* These are different to the three seta above. */
  -  OP_CRMINRANGE,
  -
  -  OP_CLASS,          /* Match a character class */
  -  OP_REF,            /* Match a back reference */
  -  OP_RECURSE,        /* Match this pattern recursively */
  -
  -  OP_ALT,            /* Start of alternation */
  -  OP_KET,
  -  OP_KETRMAX,        /* These two must remain together and in this */
  -  OP_KETRMIN,        /* order. They are for groups the repeat for ever. */
  -
  -  /* The assertions must come before ONCE and COND */
  -
  -  OP_ASSERT,         /* Positive lookahead */
  -  OP_ASSERT_NOT,     /* Negative lookahead */
  -  OP_ASSERTBACK,     /* Positive lookbehind */
  -  OP_ASSERTBACK_NOT, /* Negative lookbehind */
  -  OP_REVERSE,        /* Move pointer back - used in lookbehind assertions */
  -
  -  /* ONCE and COND must come after the assertions, with ONCE first, as there's
  -  a test for >= ONCE for a subpattern that isn't an assertion. */
  -
  -  OP_ONCE,           /* Once matched, don't back up into the subpattern */
  -  OP_COND,           /* Conditional group */
  -  OP_CREF,           /* Used to hold an extraction string number (cond ref) */
  -
  -  OP_BRAZERO,        /* These two must remain together and in this */
  -  OP_BRAMINZERO,     /* order. */
  -
  -  OP_BRANUMBER,      /* Used for extracting brackets whose number is greater
  -                        than can fit into an opcode. */
  -
  -  OP_BRA             /* This and greater values are used for brackets that
  -                        extract substrings up to a basic limit. After that,
  -                        use is made of OP_BRANUMBER. */
  -};
  +	OP_BRAZERO,
  +	OP_BRAMINZERO,
   
  -/* The highest extraction number before we have to start using additional
  -bytes. (Originally PCRE didn't have support for extraction counts highter than
  -this number.) The value is limited by the number of opcodes left after OP_BRA,
  -i.e. 255 - OP_BRA. We actually set it a bit lower to leave room for additional
  -opcodes. */
  +	OP_BRANUMBER,
   
  -#define EXTRACT_BASIC_MAX  150
  +	OP_BRA
  +};
   
  -/* The texts of compile-time error messages are defined as macros here so that
  -they can be accessed by the POSIX wrapper and converted into error codes.  Yes,
  -I could have used error codes in the first place, but didn't feel like changing
  -just to accommodate the POSIX wrapper. */
  +#define EXTRACT_BASIC_MAX  150
   
   #define ERR1  "\\ at end of pattern"
   #define ERR2  "\\c at end of pattern"
  @@ -294,97 +237,71 @@
   #define ERR34 "character value in \\x{...} sequence is too large"
   #define ERR35 "invalid condition (?(0)"
   
  -/* All character handling must be done as unsigned characters. Otherwise there
  -are problems with top-bit-set characters and functions such as isspace().
  -However, we leave the interface to the outside world as char *, because that
  -should make things easier for callers. We define a short type for unsigned char
  -to save lots of typing. I tried "uchar", but it causes problems on Digital
  -Unix, where it is defined in sys/types, so use "uschar" instead. */
  -
   typedef unsigned char uschar;
   
  -/* The real format of the start of the pcre block; the actual code vector
  -runs on as long as necessary after the end. */
  -
   typedef struct real_pcre {
  -  unsigned long int magic_number;
  -  size_t size;
  -  const unsigned char *tables;
  -  unsigned long int options;
  -  unsigned short int top_bracket;
  -  unsigned short int top_backref;
  -  uschar first_char;
  -  uschar req_char;
  -  uschar code[1];
  +	unsigned long int magic_number;
  +	size_t size;
  +	const unsigned char *tables;
  +	unsigned long int options;
  +	unsigned short int top_bracket;
  +	unsigned short int top_backref;
  +	uschar first_char;
  +	uschar req_char;
  +	uschar code[1];
   } real_pcre;
   
  -/* The real format of the extra block returned by pcre_study(). */
  -
   typedef struct real_pcre_extra {
  -  uschar options;
  -  uschar start_bits[32];
  +	uschar options;
  +	uschar start_bits[32];
   } real_pcre_extra;
   
  -/* Structure for passing "static" information around between the functions
  -doing the compiling, so that they are thread-safe. */
  -
   typedef struct compile_data {
  -  const uschar *lcc;            /* Points to lower casing table */
  -  const uschar *fcc;            /* Points to case-flipping table */
  -  const uschar *cbits;          /* Points to character type table */
  -  const uschar *ctypes;         /* Points to table of type maps */
  +	const uschar *lcc;
  +	const uschar *fcc;
  +	const uschar *cbits;
  +	const uschar *ctypes;
   } compile_data;
   
  -/* Structure for passing "static" information around between the functions
  -doing the matching, so that they are thread-safe. */
  -
   typedef struct match_data {
  -  int    errorcode;             /* As it says */
  -  int   *offset_vector;         /* Offset vector */
  -  int    offset_end;            /* One past the end */
  -  int    offset_max;            /* The maximum usable for return data */
  -  const uschar *lcc;            /* Points to lower casing table */
  -  const uschar *ctypes;         /* Points to table of type maps */
  -  BOOL   offset_overflow;       /* Set if too many extractions */
  -  BOOL   notbol;                /* NOTBOL flag */
  -  BOOL   noteol;                /* NOTEOL flag */
  -  BOOL   utf8;                  /* UTF8 flag */
  -  BOOL   endonly;               /* Dollar not before final \n */
  -  BOOL   notempty;              /* Empty string match not wanted */
  -  const uschar *start_pattern;  /* For use when recursing */
  -  const uschar *start_subject;  /* Start of the subject string */
  -  const uschar *end_subject;
  -  const uschar *start_match;    /* Start of this match attempt */
  -  const uschar *end_match_ptr;  /* Subject position at end match */
  -  int    end_offset_top;        /* Highwater mark at end of match */
  +	int errorcode;
  +	int *offset_vector;
  +	int offset_end;
  +	int offset_max;
  +	const uschar *lcc;
  +	const uschar *ctypes;
  +	BOOL offset_overflow;
  +	BOOL notbol;
  +	BOOL noteol;
  +	BOOL utf8;
  +	BOOL endonly;
  +	BOOL notempty;
  +	const uschar *start_pattern;
  +	const uschar *start_subject;
  +	const uschar *end_subject;
  +	const uschar *start_match;
  +	const uschar *end_match_ptr;
  +	int end_offset_top;
   } match_data;
   
  -/* Bit definitions for entries in the pcre_ctypes table. */
  -
   #define ctype_space   0x01
   #define ctype_letter  0x02
   #define ctype_digit   0x04
   #define ctype_xdigit  0x08
  -#define ctype_word    0x10   /* alphameric or '_' */
  -#define ctype_meta    0x80   /* regexp meta char or zero (end pattern) */
  -
  -/* Offsets for the bitmap tables in pcre_cbits. Each table contains a set
  -of bits for a class map. Some classes are built by combining these tables. */
  -
  -#define cbit_space     0      /* [:space:] or \s */
  -#define cbit_xdigit   32      /* [:xdigit:] */
  -#define cbit_digit    64      /* [:digit:] or \d */
  -#define cbit_upper    96      /* [:upper:] */
  -#define cbit_lower   128      /* [:lower:] */
  -#define cbit_word    160      /* [:word:] or \w */
  -#define cbit_graph   192      /* [:graph:] */
  -#define cbit_print   224      /* [:print:] */
  -#define cbit_punct   256      /* [:punct:] */
  -#define cbit_cntrl   288      /* [:cntrl:] */
  -#define cbit_length  320      /* Length of the cbits table */
  +#define ctype_word    0x10
  +#define ctype_meta    0x80
   
  -/* Offsets of the various tables from the base tables pointer, and
  -total length. */
  +#define cbit_space     0
  +#define cbit_xdigit   32
  +#define cbit_digit    64
  +#define cbit_upper    96
  +#define cbit_lower   128
  +#define cbit_word    160
  +#define cbit_graph   192
  +#define cbit_print   224
  +#define cbit_punct   256
  +#define cbit_cntrl   288
  +#define cbit_length  320
   
   #define lcc_offset      0
   #define fcc_offset    256
  @@ -392,155 +309,91 @@
   #define ctypes_offset (cbits_offset + cbit_length)
   #define tables_length (ctypes_offset + 256)
   
  -/* ____ END internal.h ____ */
  +#ifndef L2_UT_PCRE_TAB
   
  -#ifndef L2_UT_PCRE_GENTAB
  -
  -/* ____ BEGIN pcre.c ____ */
  -
  -/* Use a macro for debugging printing, 'cause that eliminates the use of #ifdef
  -inline, and there are *still* stupid compilers about that don't like indented
  -pre-processor statements. I suppose it's only been 10 years... */
  -
  -/* Include the internals header, which itself includes Standard C headers plus
  -the external pcre header. */
  -
  -/* Allow compilation as C++ source code, should anybody want to do that. */
  -
   #ifdef __cplusplus
   #define class pcre_class
   #endif
   
  -/* Maximum number of items on the nested bracket stacks at compile time. This
  -applies to the nesting of all kinds of parentheses. It does not limit
  -un-nested, non-capturing parentheses. This number can be made bigger if
  -necessary - it is used to dimension one int and one unsigned char vector at
  -compile time. */
  -
   #define BRASTACK_SIZE 200
   
  -/* The number of bytes in a literal character string above which we can't add
  -any more is different when UTF-8 characters may be encountered. */
  -
   #ifdef L2_UT_PCRE_SUPPORT_UTF8
   #define MAXLIT 250
   #else
   #define MAXLIT 255
   #endif
   
  -/* Min and max values for the common repeats; for the maxima, 0 => infinity */
  -
   static const char rep_min[] = { 0, 0, 1, 1, 0, 0 };
   static const char rep_max[] = { 0, 0, 0, 0, 1, 1 };
   
  -/* Text forms of OP_ values and things, for debugging (not all used) */
  -
  -/* Table for handling escaped characters in the range '0'-'z'. Positive returns
  -are simple data values; negative values are for special things like \d and so
  -on. Zero means further processing is needed (for things like \x), or the escape
  -is invalid. */
  -
   static const short int escapes[] = {
  -    0,      0,      0,      0,      0,      0,      0,      0,   /* 0 - 7 */
  -    0,      0,    ':',    ';',    '<',    '=',    '>',    '?',   /* 8 - ? */
  -  '@', -ESC_A, -ESC_B,      0, -ESC_D,      0,      0,      0,   /* @ - G */
  -    0,      0,      0,      0,      0,      0,      0,      0,   /* H - O */
  -    0,      0,      0, -ESC_S,      0,      0,      0, -ESC_W,   /* P - W */
  -    0,      0, -ESC_Z,    '[',   '\\',    ']',    '^',    '_',   /* X - _ */
  -  '`',      7, -ESC_b,      0, -ESC_d,  ESC_E,  ESC_F,      0,   /* ` - g */
  -    0,      0,      0,      0,      0,      0,  ESC_N,      0,   /* h - o */
  -    0,      0,  ESC_R, -ESC_s,  ESC_T,      0,      0, -ESC_w,   /* p - w */
  -    0,      0, -ESC_z                                            /* x - z */
  +	0, 0, 0, 0, 0, 0, 0, 0,
  +	0, 0, ':', ';', '<', '=', '>', '?',
  +	'@', -ESC_A, -ESC_B, 0, -ESC_D, 0, 0, 0,
  +	0, 0, 0, 0, 0, 0, 0, 0,
  +	0, 0, 0, -ESC_S, 0, 0, 0, -ESC_W,
  +	0, 0, -ESC_Z, '[', '\\', ']', '^', '_',
  +	'`', 7, -ESC_b, 0, -ESC_d, ESC_E, ESC_F, 0,
  +	0, 0, 0, 0, 0, 0, ESC_N, 0,
  +	0, 0, ESC_R, -ESC_s, ESC_T, 0, 0, -ESC_w,
  +	0, 0, -ESC_z
   };
   
  -/* Tables of names of POSIX character classes and their lengths. The list is
  -terminated by a zero length entry. The first three must be alpha, upper, lower,
  -as this is assumed for handling case independence. */
  -
   static const char *posix_names[] = {
  -  "alpha", "lower", "upper",
  -  "alnum", "ascii", "cntrl", "digit", "graph",
  -  "print", "punct", "space", "word",  "xdigit" };
  +	"alpha", "lower", "upper",
  +	"alnum", "ascii", "cntrl", "digit", "graph",
  +	"print", "punct", "space", "word", "xdigit"
  +};
   
   static const uschar posix_name_lengths[] = {
  -  5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 6, 0 };
  -
  -/* Table of class bit maps for each POSIX class; up to three may be combined
  -to form the class. */
  +	5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 6, 0
  +};
   
   static const int posix_class_maps[] = {
  -  cbit_lower, cbit_upper, -1,             /* alpha */
  -  cbit_lower, -1,         -1,             /* lower */
  -  cbit_upper, -1,         -1,             /* upper */
  -  cbit_digit, cbit_lower, cbit_upper,     /* alnum */
  -  cbit_print, cbit_cntrl, -1,             /* ascii */
  -  cbit_cntrl, -1,         -1,             /* cntrl */
  -  cbit_digit, -1,         -1,             /* digit */
  -  cbit_graph, -1,         -1,             /* graph */
  -  cbit_print, -1,         -1,             /* print */
  -  cbit_punct, -1,         -1,             /* punct */
  -  cbit_space, -1,         -1,             /* space */
  -  cbit_word,  -1,         -1,             /* word */
  -  cbit_xdigit,-1,         -1              /* xdigit */
  +	cbit_lower, cbit_upper, -1,
  +	cbit_lower, -1, -1,
  +	cbit_upper, -1, -1,
  +	cbit_digit, cbit_lower, cbit_upper,
  +	cbit_print, cbit_cntrl, -1,
  +	cbit_cntrl, -1, -1,
  +	cbit_digit, -1, -1,
  +	cbit_graph, -1, -1,
  +	cbit_print, -1, -1,
  +	cbit_punct, -1, -1,
  +	cbit_space, -1, -1,
  +	cbit_word, -1, -1,
  +	cbit_xdigit, -1, -1
   };
   
  -/* Definition to allow mutual recursion */
  -
   static BOOL
  -  compile_regex(int, int, int *, uschar **, const uschar **, const char **,
  -    BOOL, int, int *, int *, compile_data *);
  -
  -/* Structure for building a chain of data that actually lives on the
  -stack, for holding the values of the subject pointer at the start of each
  -subpattern, so as to detect when an empty string has been matched by a
  -subpattern - to break infinite loops. */
  +compile_regex(int, int, int *, uschar **, const uschar **, const char **,
  +			  BOOL, int, int *, int *, compile_data *);
   
   typedef struct eptrblock {
  -  struct eptrblock *prev;
  -  const uschar *saved_eptr;
  +	struct eptrblock *prev;
  +	const uschar *saved_eptr;
   } eptrblock;
   
  -/* Flag bits for the match() function */
  +#define match_condassert   0x01
  +#define match_isgroup      0x02
   
  -#define match_condassert   0x01    /* Called to check a condition assertion */
  -#define match_isgroup      0x02    /* Set if start of bracketed group */
  +void *(*pcre_malloc) (size_t) = malloc;
  +void (*pcre_free) (void *) = free;
   
  -/*************************************************
  -*               Global variables                 *
  -*************************************************/
  -
  -/* PCRE is thread-clean and doesn't use any global variables in the normal
  -sense. However, it calls memory allocation and free functions via the two
  -indirections below, which are can be changed by the caller, but are shared
  -between all threads. */
  -
  -void *(*pcre_malloc)(size_t) = malloc;
  -void  (*pcre_free)(void *) = free;
  -
  -/*************************************************
  -*    Macros and tables for character handling    *
  -*************************************************/
  -
  -/* When UTF-8 encoding is being used, a character is no longer just a single
  -byte. The macros for character handling generate simple sequences when used in
  -byte-mode, and more complicated ones for UTF-8 characters. */
  -
   #ifndef L2_UT_PCRE_SUPPORT_UTF8
   #define GETCHARINC(c, eptr) c = *eptr++;
   #define GETCHARLEN(c, eptr, len) c = *eptr;
   #define BACKCHAR(eptr)
  -
  -#else   /* L2_UT_PCRE_SUPPORT_UTF8 */
   
  -/* Get the next UTF-8 character, advancing the pointer */
  +#else
   
   #define GETCHARINC(c, eptr) \
     c = *eptr++; \
     if (md->utf8 && (c & 0xc0) == 0xc0) \
       { \
  -    int a = utf8_table4[c & 0x3f];  /* Number of additional bytes */ \
  -    int s = 6 - a;                  /* Amount to shift next byte */  \
  -    c &= utf8_table3[a];            /* Low order bits from first byte */ \
  +    int a = utf8_table4[c & 0x3f];   \
  +    int s = 6 - a;                    \
  +    c &= utf8_table3[a];             \
       while (a-- > 0) \
         { \
         c |= (*eptr++ & 0x3f) << s; \
  @@ -548,17 +401,15 @@
         } \
       }
   
  -/* Get the next UTF-8 character, not advancing the pointer, setting length */
  -
   #define GETCHARLEN(c, eptr, len) \
     c = *eptr; \
     len = 1; \
     if (md->utf8 && (c & 0xc0) == 0xc0) \
       { \
       int i; \
  -    int a = utf8_table4[c & 0x3f];  /* Number of additional bytes */ \
  -    int s = 6 - a;                  /* Amount to shift next byte */  \
  -    c &= utf8_table3[a];            /* Low order bits from first byte */ \
  +    int a = utf8_table4[c & 0x3f];   \
  +    int s = 6 - a;                    \
  +    c &= utf8_table3[a];             \
       for (i = 1; i <= a; i++) \
         { \
         c |= (eptr[i] & 0x3f) << s; \
  @@ -567,5284 +418,3859 @@
       len += a; \
       }
   
  -/* If the pointer is not at the start of a character, move it back until
  -it is. */
  -
   #define BACKCHAR(eptr) while((*eptr & 0xc0) == 0x80) eptr--;
   
   #endif
  -
  -/*************************************************
  -*             Default character tables           *
  -*************************************************/
  -
  -/* A default set of character tables is included in the PCRE binary. Its source
  -is built by the maketables auxiliary program, which uses the default C ctypes
  -functions, and put in the file chartables.c. These tables are used by PCRE
  -whenever the caller of pcre_compile() does not provide an alternate set of
  -tables. */
   
  -#include "l2_ut_pcre_tab.c"
  +#include "l2_ut_pcre.tab"
   
   #ifdef L2_UT_PCRE_SUPPORT_UTF8
  -/*************************************************
  -*           Tables for UTF-8 support             *
  -*************************************************/
  -
  -/* These are the breakpoints for different numbers of bytes in a UTF-8
  -character. */
  -
  -static int utf8_table1[] = { 0x7f, 0x7ff, 0xffff, 0x1fffff, 0x3ffffff, 0x7fffffff};
   
  -/* These are the indicator bits and the mask for the data bits to set in the
  -first byte of a character, indexed by the number of additional bytes. */
  +static int utf8_table1[] =
  +	{ 0x7f, 0x7ff, 0xffff, 0x1fffff, 0x3ffffff, 0x7fffffff };
   
  -static int utf8_table2[] = { 0,    0xc0, 0xe0, 0xf0, 0xf8, 0xfc};
  -static int utf8_table3[] = { 0xff, 0x1f, 0x0f, 0x07, 0x03, 0x01};
  +static int utf8_table2[] = { 0, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc };
  +static int utf8_table3[] = { 0xff, 0x1f, 0x0f, 0x07, 0x03, 0x01 };
   
  -/* Table of the number of extra characters, indexed by the first character
  -masked with 0x3f. The highest number for a valid UTF-8 character is in fact
  -0x3d. */
  -
   static uschar utf8_table4[] = {
  -  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  -  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  -  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
  -  3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5 };
  -
  -/*************************************************
  -*       Convert character value to UTF-8         *
  -*************************************************/
  -
  -/* This function takes an integer value in the range 0 - 0x7fffffff
  -and encodes it as a UTF-8 character in 0 to 6 bytes.
  -
  -Arguments:
  -  cvalue     the character value
  -  buffer     pointer to buffer for result - at least 6 bytes long
  -
  -Returns:     number of characters placed in the buffer
  -*/
  +	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  +	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  +	2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
  +	3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5
  +};
   
  -static int
  -ord2utf8(int cvalue, uschar *buffer)
  +static int ord2utf8(int cvalue, uschar * buffer)
   {
  -register int i, j;
  -for (i = 0; i < sizeof(utf8_table1)/sizeof(int); i++)
  -  if (cvalue <= utf8_table1[i]) break;
  -*buffer++ = utf8_table2[i] | (cvalue & utf8_table3[i]);
  -cvalue >>= 6 - i;
  -for (j = 0; j < i; j++)
  -  {
  -  *buffer++ = 0x80 | (cvalue & 0x3f);
  -  cvalue >>= 6;
  -  }
  -return i + 1;
  +	register int i, j;
  +	for (i = 0; i < sizeof (utf8_table1) / sizeof (int); i++)
  +		if (cvalue <= utf8_table1[i])
  +			break;
  +	*buffer++ = utf8_table2[i] | (cvalue & utf8_table3[i]);
  +	cvalue >>= 6 - i;
  +	for (j = 0; j < i; j++) {
  +		*buffer++ = 0x80 | (cvalue & 0x3f);
  +		cvalue >>= 6;
  +	}
  +	return i + 1;
   }
   #endif
   
  -/*************************************************
  -*          Return version string                 *
  -*************************************************/
  -
   #define STRING(a)  # a
   #define XSTRING(s) STRING(s)
   
  -const char *
  -pcre_version(void)
  +const char *pcre_version(void)
   {
  -return XSTRING(PCRE_MAJOR) "." XSTRING(PCRE_MINOR) " " XSTRING(PCRE_DATE);
  +	return XSTRING(PCRE_MAJOR) "." XSTRING(PCRE_MINOR) " " XSTRING(PCRE_DATE);
   }
  -
  -/*************************************************
  -* (Obsolete) Return info about compiled pattern  *
  -*************************************************/
  -
  -/* This is the original "info" function. It picks potentially useful data out
  -of the private structure, but its interface was too rigid. It remains for
  -backwards compatibility. The public options are passed back in an int - though
  -the re->options field has been expanded to a long int, all the public options
  -at the low end of it, and so even on 16-bit systems this will still be OK.
  -Therefore, I haven't changed the API for pcre_info().
  -
  -Arguments:
  -  external_re   points to compiled code
  -  optptr        where to pass back the options
  -  first_char    where to pass back the first character,
  -                or -1 if multiline and all branches start ^,
  -                or -2 otherwise
  -
  -Returns:        number of capturing subpatterns
  -                or negative values on error
  -*/
   
  -int
  -pcre_info(const pcre *external_re, int *optptr, int *first_char)
  +int pcre_info(const pcre * external_re, int *optptr, int *first_char)
   {
  -const real_pcre *re = (const real_pcre *)external_re;
  -if (re == NULL) return PCRE_ERROR_NULL;
  -if (re->magic_number != MAGIC_NUMBER) return PCRE_ERROR_BADMAGIC;
  -if (optptr != NULL) *optptr = (int)(re->options & PUBLIC_OPTIONS);
  -if (first_char != NULL)
  -  *first_char = ((re->options & PCRE_FIRSTSET) != 0)? re->first_char :
  -     ((re->options & PCRE_STARTLINE) != 0)? -1 : -2;
  -return re->top_bracket;
  +	const real_pcre *re = (const real_pcre *)external_re;
  +	if (re == NULL)
  +		return PCRE_ERROR_NULL;
  +	if (re->magic_number != MAGIC_NUMBER)
  +		return PCRE_ERROR_BADMAGIC;
  +	if (optptr != NULL)
  +		*optptr = (int)(re->options & PUBLIC_OPTIONS);
  +	if (first_char != NULL)
  +		*first_char = ((re->options & PCRE_FIRSTSET) != 0) ? re->first_char :
  +			((re->options & PCRE_STARTLINE) != 0) ? -1 : -2;
  +	return re->top_bracket;
   }
   
  -/*************************************************
  -*        Return info about compiled pattern      *
  -*************************************************/
  -
  -/* This is a newer "info" function which has an extensible interface so
  -that additional items can be added compatibly.
  -
  -Arguments:
  -  external_re      points to compiled code
  -  external_study   points to study data, or NULL
  -  what             what information is required
  -  where            where to put the information
  -
  -Returns:           0 if data returned, negative on error
  -*/
  -
   int
  -pcre_fullinfo(const pcre *external_re, const pcre_extra *study_data, int what,
  -  void *where)
  +pcre_fullinfo(const pcre * external_re, const pcre_extra * study_data,
  +			  int what, void *where)
   {
  -const real_pcre *re = (const real_pcre *)external_re;
  -const real_pcre_extra *study = (const real_pcre_extra *)study_data;
  -
  -if (re == NULL || where == NULL) return PCRE_ERROR_NULL;
  -if (re->magic_number != MAGIC_NUMBER) return PCRE_ERROR_BADMAGIC;
  -
  -switch (what)
  -  {
  -  case PCRE_INFO_OPTIONS:
  -  *((unsigned long int *)where) = re->options & PUBLIC_OPTIONS;
  -  break;
  -
  -  case PCRE_INFO_SIZE:
  -  *((size_t *)where) = re->size;
  -  break;
  -
  -  case PCRE_INFO_CAPTURECOUNT:
  -  *((int *)where) = re->top_bracket;
  -  break;
  -
  -  case PCRE_INFO_BACKREFMAX:
  -  *((int *)where) = re->top_backref;
  -  break;
  -
  -  case PCRE_INFO_FIRSTCHAR:
  -  *((int *)where) =
  -    ((re->options & PCRE_FIRSTSET) != 0)? re->first_char :
  -    ((re->options & PCRE_STARTLINE) != 0)? -1 : -2;
  -  break;
  -
  -  case PCRE_INFO_FIRSTTABLE:
  -  *((const uschar **)where) =
  -    (study != NULL && (study->options & PCRE_STUDY_MAPPED) != 0)?
  -      study->start_bits : NULL;
  -  break;
  -
  -  case PCRE_INFO_LASTLITERAL:
  -  *((int *)where) =
  -    ((re->options & PCRE_REQCHSET) != 0)? re->req_char : -1;
  -  break;
  +	const real_pcre *re = (const real_pcre *)external_re;
  +	const real_pcre_extra *study = (const real_pcre_extra *)study_data;
   
  -  default: return PCRE_ERROR_BADOPTION;
  -  }
  +	if (re == NULL || where == NULL)
  +		return PCRE_ERROR_NULL;
  +	if (re->magic_number != MAGIC_NUMBER)
  +		return PCRE_ERROR_BADMAGIC;
  +
  +	switch (what) {
  +		case PCRE_INFO_OPTIONS:
  +			*((unsigned long int *)where) = re->options & PUBLIC_OPTIONS;
  +			break;
  +
  +		case PCRE_INFO_SIZE:
  +			*((size_t *) where) = re->size;
  +			break;
  +
  +		case PCRE_INFO_CAPTURECOUNT:
  +			*((int *)where) = re->top_bracket;
  +			break;
  +
  +		case PCRE_INFO_BACKREFMAX:
  +			*((int *)where) = re->top_backref;
  +			break;
  +
  +		case PCRE_INFO_FIRSTCHAR:
  +			*((int *)where) =
  +				((re->options & PCRE_FIRSTSET) != 0) ? re->first_char :
  +				((re->options & PCRE_STARTLINE) != 0) ? -1 : -2;
  +			break;
  +
  +		case PCRE_INFO_FIRSTTABLE:
  +			*((const uschar **)where) =
  +				(study != NULL && (study->options & PCRE_STUDY_MAPPED) != 0) ?
  +				study->start_bits : NULL;
  +			break;
  +
  +		case PCRE_INFO_LASTLITERAL:
  +			*((int *)where) =
  +				((re->options & PCRE_REQCHSET) != 0) ? re->req_char : -1;
  +			break;
  +
  +		default:
  +			return PCRE_ERROR_BADOPTION;
  +	}
   
  -return 0;
  +	return 0;
   }
   
  -/*************************************************
  -*            Handle escapes                      *
  -*************************************************/
  -
  -/* This function is called when a \ has been encountered. It either returns a
  -positive value for a simple escape such as \n, or a negative value which
  -encodes one of the more complicated things such as \d. When UTF-8 is enabled,
  -a positive value greater than 255 may be returned. On entry, ptr is pointing at
  -the \. On exit, it is on the final character of the escape sequence.
  -
  -Arguments:
  -  ptrptr     points to the pattern position pointer
  -  errorptr   points to the pointer to the error message
  -  bracount   number of previous extracting brackets
  -  options    the options bits
  -  isclass    TRUE if inside a character class
  -  cd         pointer to char tables block
  -
  -Returns:     zero or positive => a data character
  -             negative => a special escape sequence
  -             on error, errorptr is set
  -*/
  -
   static int
  -check_escape(const uschar **ptrptr, const char **errorptr, int bracount,
  -  int options, BOOL isclass, compile_data *cd)
  +check_escape(const uschar ** ptrptr, const char **errorptr, int bracount,
  +			 int options, BOOL isclass, compile_data * cd)
   {
  -const uschar *ptr = *ptrptr;
  -int c, i;
  -
  -/* If backslash is at the end of the pattern, it's an error. */
  -
  -c = *(++ptr);
  -if (c == 0) *errorptr = ERR1;
  -
  -/* Digits or letters may have special meaning; all others are literals. */
  -
  -else if (c < '0' || c > 'z') {}
  -
  -/* Do an initial lookup in a table. A non-zero result is something that can be
  -returned immediately. Otherwise further processing may be required. */
  -
  -else if ((i = escapes[c - '0']) != 0) c = i;
  -
  -/* Escapes that need further processing, or are illegal. */
  -
  -else
  -  {
  -  const uschar *oldptr;
  -  switch (c)
  -    {
  -    /* The handling of escape sequences consisting of a string of digits
  -    starting with one that is not zero is not straightforward. By experiment,
  -    the way Perl works seems to be as follows:
  -
  -    Outside a character class, the digits are read as a decimal number. If the
  -    number is less than 10, or if there are that many previous extracting
  -    left brackets, then it is a back reference. Otherwise, up to three octal
  -    digits are read to form an escaped byte. Thus \123 is likely to be octal
  -    123 (cf \0123, which is octal 012 followed by the literal 3). If the octal
  -    value is greater than 377, the least significant 8 bits are taken. Inside a
  -    character class, \ followed by a digit is always an octal number. */
  -
  -    case '1': case '2': case '3': case '4': case '5':
  -    case '6': case '7': case '8': case '9':
  -
  -    if (!isclass)
  -      {
  -      oldptr = ptr;
  -      c -= '0';
  -      while ((cd->ctypes[ptr[1]] & ctype_digit) != 0)
  -        c = c * 10 + *(++ptr) - '0';
  -      if (c < 10 || c <= bracount)
  -        {
  -        c = -(ESC_REF + c);
  -        break;
  -        }
  -      ptr = oldptr;      /* Put the pointer back and fall through */
  -      }
  -
  -    /* Handle an octal number following \. If the first digit is 8 or 9, Perl
  -    generates a binary zero byte and treats the digit as a following literal.
  -    Thus we have to pull back the pointer by one. */
  -
  -    if ((c = *ptr) >= '8')
  -      {
  -      ptr--;
  -      c = 0;
  -      break;
  -      }
  -
  -    /* \0 always starts an octal number, but we may drop through to here with a
  -    larger first octal digit. */
  -
  -    case '0':
  -    c -= '0';
  -    while(i++ < 2 && (cd->ctypes[ptr[1]] & ctype_digit) != 0 &&
  -      ptr[1] != '8' && ptr[1] != '9')
  -        c = c * 8 + *(++ptr) - '0';
  -    c &= 255;     /* Take least significant 8 bits */
  -    break;
  +	const uschar *ptr = *ptrptr;
  +	int c, i;
   
  -    /* \x is complicated when UTF-8 is enabled. \x{ddd} is a character number
  -    which can be greater than 0xff, but only if the ddd are hex digits. */
  +	c = *(++ptr);
  +	if (c == 0)
  +		*errorptr = ERR1;
  +
  +	else if (c < '0' || c > 'z') {
  +	}
  +
  +	else if ((i = escapes[c - '0']) != 0)
  +		c = i;
  +
  +	else {
  +		const uschar *oldptr;
  +		switch (c) {
  +			case '1':
  +			case '2':
  +			case '3':
  +			case '4':
  +			case '5':
  +			case '6':
  +			case '7':
  +			case '8':
  +			case '9':
  +
  +				if (!isclass) {
  +					oldptr = ptr;
  +					c -= '0';
  +					while ((cd->ctypes[ptr[1]] & ctype_digit) != 0)
  +						c = c * 10 + *(++ptr) - '0';
  +					if (c < 10 || c <= bracount) {
  +						c = -(ESC_REF + c);
  +						break;
  +					}
  +					ptr = oldptr;
  +				}
  +
  +				if ((c = *ptr) >= '8') {
  +					ptr--;
  +					c = 0;
  +					break;
  +				}
  +
  +			case '0':
  +				c -= '0';
  +				while (i++ < 2 && (cd->ctypes[ptr[1]] & ctype_digit) != 0 &&
  +					   ptr[1] != '8' && ptr[1] != '9')
  +					c = c * 8 + *(++ptr) - '0';
  +				c &= 255;
  +				break;
   
  -    case 'x':
  +			case 'x':
   #ifdef L2_UT_PCRE_SUPPORT_UTF8
  -    if (ptr[1] == '{' && (options & PCRE_UTF8) != 0)
  -      {
  -      const uschar *pt = ptr + 2;
  -      register int count = 0;
  -      c = 0;
  -      while ((cd->ctypes[*pt] & ctype_xdigit) != 0)
  -        {
  -        count++;
  -        c = c * 16 + cd->lcc[*pt] -
  -          (((cd->ctypes[*pt] & ctype_digit) != 0)? '0' : 'W');
  -        pt++;
  -        }
  -      if (*pt == '}')
  -        {
  -        if (c < 0 || count > 8) *errorptr = ERR34;
  -        ptr = pt;
  -        break;
  -        }
  -      /* If the sequence of hex digits does not end with '}', then we don't
  -      recognize this construct; fall through to the normal \x handling. */
  -      }
  +				if (ptr[1] == '{' && (options & PCRE_UTF8) != 0) {
  +					const uschar *pt = ptr + 2;
  +					register int count = 0;
  +					c = 0;
  +					while ((cd->ctypes[*pt] & ctype_xdigit) != 0) {
  +						count++;
  +						c = c * 16 + cd->lcc[*pt] -
  +							(((cd->
  +							   ctypes[*pt] & ctype_digit) != 0) ? '0' : 'W');
  +						pt++;
  +					}
  +					if (*pt == '}') {
  +						if (c < 0 || count > 8)
  +							*errorptr = ERR34;
  +						ptr = pt;
  +						break;
  +					}
  +				}
   #endif
   
  -    /* Read just a single hex char */
  +				c = 0;
  +				while (i++ < 2 && (cd->ctypes[ptr[1]] & ctype_xdigit) != 0) {
  +					ptr++;
  +					c = c * 16 + cd->lcc[*ptr] -
  +						(((cd->ctypes[*ptr] & ctype_digit) != 0) ? '0' : 'W');
  +				}
  +				break;
  +
  +			case 'c':
  +				c = *(++ptr);
  +				if (c == 0) {
  +					*errorptr = ERR2;
  +					return 0;
  +				}
  +
  +				if (c >= 'a' && c <= 'z')
  +					c = cd->fcc[c];
  +				c ^= 0x40;
  +				break;
  +
  +			default:
  +				if ((options & PCRE_EXTRA) != 0)
  +					switch (c) {
  +						default:
  +							*errorptr = ERR3;
  +							break;
  +					}
  +				break;
  +		}
  +	}
   
  -    c = 0;
  -    while (i++ < 2 && (cd->ctypes[ptr[1]] & ctype_xdigit) != 0)
  -      {
  -      ptr++;
  -      c = c * 16 + cd->lcc[*ptr] -
  -        (((cd->ctypes[*ptr] & ctype_digit) != 0)? '0' : 'W');
  -      }
  -    break;
  -
  -    /* Other special escapes not starting with a digit are straightforward */
  -
  -    case 'c':
  -    c = *(++ptr);
  -    if (c == 0)
  -      {
  -      *errorptr = ERR2;
  -      return 0;
  -      }
  -
  -    /* A letter is upper-cased; then the 0x40 bit is flipped */
  -
  -    if (c >= 'a' && c <= 'z') c = cd->fcc[c];
  -    c ^= 0x40;
  -    break;
  -
  -    /* PCRE_EXTRA enables extensions to Perl in the matter of escapes. Any
  -    other alphameric following \ is an error if PCRE_EXTRA was set; otherwise,
  -    for Perl compatibility, it is a literal. This code looks a bit odd, but
  -    there used to be some cases other than the default, and there may be again
  -    in future, so I haven't "optimized" it. */
  -
  -    default:
  -    if ((options & PCRE_EXTRA) != 0) switch(c)
  -      {
  -      default:
  -      *errorptr = ERR3;
  -      break;
  -      }
  -    break;
  -    }
  -  }
  -
  -*ptrptr = ptr;
  -return c;
  +	*ptrptr = ptr;
  +	return c;
   }
  -
  -/*************************************************
  -*            Check for counted repeat            *
  -*************************************************/
  -
  -/* This function is called when a '{' is encountered in a place where it might
  -start a quantifier. It looks ahead to see if it really is a quantifier or not.
  -It is only a quantifier if it is one of the forms {ddd} {ddd,} or {ddd,ddd}
  -where the ddds are digits.
  -
  -Arguments:
  -  p         pointer to the first char after '{'
  -  cd        pointer to char tables block
  -
  -Returns:    TRUE or FALSE
  -*/
   
  -static BOOL
  -is_counted_repeat(const uschar *p, compile_data *cd)
  +static BOOL is_counted_repeat(const uschar * p, compile_data * cd)
   {
  -if ((cd->ctypes[*p++] & ctype_digit) == 0) return FALSE;
  -while ((cd->ctypes[*p] & ctype_digit) != 0) p++;
  -if (*p == '}') return TRUE;
  -
  -if (*p++ != ',') return FALSE;
  -if (*p == '}') return TRUE;
  -
  -if ((cd->ctypes[*p++] & ctype_digit) == 0) return FALSE;
  -while ((cd->ctypes[*p] & ctype_digit) != 0) p++;
  -return (*p == '}');
  +	if ((cd->ctypes[*p++] & ctype_digit) == 0)
  +		return FALSE;
  +	while ((cd->ctypes[*p] & ctype_digit) != 0)
  +		p++;
  +	if (*p == '}')
  +		return TRUE;
  +
  +	if (*p++ != ',')
  +		return FALSE;
  +	if (*p == '}')
  +		return TRUE;
  +
  +	if ((cd->ctypes[*p++] & ctype_digit) == 0)
  +		return FALSE;
  +	while ((cd->ctypes[*p] & ctype_digit) != 0)
  +		p++;
  +	return (*p == '}');
   }
   
  -/*************************************************
  -*         Read repeat counts                     *
  -*************************************************/
  -
  -/* Read an item of the form {n,m} and return the values. This is called only
  -after is_counted_repeat() has confirmed that a repeat-count quantifier exists,
  -so the syntax is guaranteed to be correct, but we need to check the values.
  -
  -Arguments:
  -  p          pointer to first char after '{'
  -  minp       pointer to int for min
  -  maxp       pointer to int for max
  -             returned as -1 if no max
  -  errorptr   points to pointer to error message
  -  cd         pointer to character tables clock
  -
  -Returns:     pointer to '}' on success;
  -             current ptr on error, with errorptr set
  -*/
  -
  -static const uschar *
  -read_repeat_counts(const uschar *p, int *minp, int *maxp,
  -  const char **errorptr, compile_data *cd)
  +static const uschar *read_repeat_counts(const uschar * p, int *minp,
  +										int *maxp, const char **errorptr,
  +										compile_data * cd)
   {
  -int min = 0;
  -int max = -1;
  -
  -while ((cd->ctypes[*p] & ctype_digit) != 0) min = min * 10 + *p++ - '0';
  -
  -if (*p == '}') max = min; else
  -  {
  -  if (*(++p) != '}')
  -    {
  -    max = 0;
  -    while((cd->ctypes[*p] & ctype_digit) != 0) max = max * 10 + *p++ - '0';
  -    if (max < min)
  -      {
  -      *errorptr = ERR4;
  -      return p;
  -      }
  -    }
  -  }
  +	int min = 0;
  +	int max = -1;
   
  -/* Do paranoid checks, then fill in the required variables, and pass back the
  -pointer to the terminating '}'. */
  +	while ((cd->ctypes[*p] & ctype_digit) != 0)
  +		min = min * 10 + *p++ - '0';
   
  -if (min > 65535 || max > 65535)
  -  *errorptr = ERR5;
  -else
  -  {
  -  *minp = min;
  -  *maxp = max;
  -  }
  -return p;
  +	if (*p == '}')
  +		max = min;
  +	else {
  +		if (*(++p) != '}') {
  +			max = 0;
  +			while ((cd->ctypes[*p] & ctype_digit) != 0)
  +				max = max * 10 + *p++ - '0';
  +			if (max < min) {
  +				*errorptr = ERR4;
  +				return p;
  +			}
  +		}
  +	}
  +
  +	if (min > 65535 || max > 65535)
  +		*errorptr = ERR5;
  +	else {
  +		*minp = min;
  +		*maxp = max;
  +	}
  +	return p;
   }
   
  -/*************************************************
  -*        Find the fixed length of a pattern      *
  -*************************************************/
  -
  -/* Scan a pattern and compute the fixed length of subject that will match it,
  -if the length is fixed. This is needed for dealing with backward assertions.
  -
  -Arguments:
  -  code     points to the start of the pattern (the bracket)
  -  options  the compiling options
  -
  -Returns:   the fixed length, or -1 if there is no fixed length
  -*/
  -
  -static int
  -find_fixedlength(uschar *code, int options)
  +static int find_fixedlength(uschar * code, int options)
   {
  -int length = -1;
  -
  -register int branchlength = 0;
  -register uschar *cc = code + 3;
  +	int length = -1;
   
  -/* Scan along the opcodes for this branch. If we get to the end of the
  -branch, check the length against that of the other branches. */
  +	register int branchlength = 0;
  +	register uschar *cc = code + 3;
   
  -for (;;)
  -  {
  -  int d;
  -  register int op = *cc;
  -  if (op >= OP_BRA) op = OP_BRA;
  -
  -  switch (op)
  -    {
  -    case OP_BRA:
  -    case OP_ONCE:
  -    case OP_COND:
  -    d = find_fixedlength(cc, options);
  -    if (d < 0) return -1;
  -    branchlength += d;
  -    do cc += (cc[1] << 8) + cc[2]; while (*cc == OP_ALT);
  -    cc += 3;
  -    break;
  -
  -    /* Reached end of a branch; if it's a ket it is the end of a nested
  -    call. If it's ALT it is an alternation in a nested call. If it is
  -    END it's the end of the outer call. All can be handled by the same code. */
  -
  -    case OP_ALT:
  -    case OP_KET:
  -    case OP_KETRMAX:
  -    case OP_KETRMIN:
  -    case OP_END:
  -    if (length < 0) length = branchlength;
  -      else if (length != branchlength) return -1;
  -    if (*cc != OP_ALT) return length;
  -    cc += 3;
  -    branchlength = 0;
  -    break;
  -
  -    /* Skip over assertive subpatterns */
  -
  -    case OP_ASSERT:
  -    case OP_ASSERT_NOT:
  -    case OP_ASSERTBACK:
  -    case OP_ASSERTBACK_NOT:
  -    do cc += (cc[1] << 8) + cc[2]; while (*cc == OP_ALT);
  -    cc += 3;
  -    break;
  -
  -    /* Skip over things that don't match chars */
  -
  -    case OP_REVERSE:
  -    case OP_BRANUMBER:
  -    case OP_CREF:
  -    cc++;
  -    /* Fall through */
  -
  -    case OP_OPT:
  -    cc++;
  -    /* Fall through */
  -
  -    case OP_SOD:
  -    case OP_EOD:
  -    case OP_EODN:
  -    case OP_CIRC:
  -    case OP_DOLL:
  -    case OP_NOT_WORD_BOUNDARY:
  -    case OP_WORD_BOUNDARY:
  -    cc++;
  -    break;
  -
  -    /* Handle char strings. In UTF-8 mode we must count characters, not bytes.
  -    This requires a scan of the string, unfortunately. We assume valid UTF-8
  -    strings, so all we do is reduce the length by one for byte whose bits are
  -    10xxxxxx. */
  +	for (;;) {
  +		int d;
  +		register int op = *cc;
  +		if (op >= OP_BRA)
  +			op = OP_BRA;
  +
  +		switch (op) {
  +			case OP_BRA:
  +			case OP_ONCE:
  +			case OP_COND:
  +				d = find_fixedlength(cc, options);
  +				if (d < 0)
  +					return -1;
  +				branchlength += d;
  +				do
  +					cc += (cc[1] << 8) + cc[2];
  +				while (*cc == OP_ALT);
  +				cc += 3;
  +				break;
  +
  +			case OP_ALT:
  +			case OP_KET:
  +			case OP_KETRMAX:
  +			case OP_KETRMIN:
  +			case OP_END:
  +				if (length < 0)
  +					length = branchlength;
  +				else if (length != branchlength)
  +					return -1;
  +				if (*cc != OP_ALT)
  +					return length;
  +				cc += 3;
  +				branchlength = 0;
  +				break;
  +
  +			case OP_ASSERT:
  +			case OP_ASSERT_NOT:
  +			case OP_ASSERTBACK:
  +			case OP_ASSERTBACK_NOT:
  +				do
  +					cc += (cc[1] << 8) + cc[2];
  +				while (*cc == OP_ALT);
  +				cc += 3;
  +				break;
  +
  +			case OP_REVERSE:
  +			case OP_BRANUMBER:
  +			case OP_CREF:
  +				cc++;
  +			case OP_OPT:
  +				cc++;
  +			case OP_SOD:
  +			case OP_EOD:
  +			case OP_EODN:
  +			case OP_CIRC:
  +			case OP_DOLL:
  +			case OP_NOT_WORD_BOUNDARY:
  +			case OP_WORD_BOUNDARY:
  +				cc++;
  +				break;
   
  -    case OP_CHARS:
  -    branchlength += *(++cc);
  +			case OP_CHARS:
  +				branchlength += *(++cc);
   #ifdef L2_UT_PCRE_SUPPORT_UTF8
  -    for (d = 1; d <= *cc; d++)
  -      if ((cc[d] & 0xc0) == 0x80) branchlength--;
  +				for (d = 1; d <= *cc; d++)
  +					if ((cc[d] & 0xc0) == 0x80)
  +						branchlength--;
   #endif
  -    cc += *cc + 1;
  -    break;
  +				cc += *cc + 1;
  +				break;
   
  -    /* Handle exact repetitions */
  -
  -    case OP_EXACT:
  -    case OP_TYPEEXACT:
  -    branchlength += (cc[1] << 8) + cc[2];
  -    cc += 4;
  -    break;
  -
  -    /* Handle single-char matchers */
  -
  -    case OP_NOT_DIGIT:
  -    case OP_DIGIT:
  -    case OP_NOT_WHITESPACE:
  -    case OP_WHITESPACE:
  -    case OP_NOT_WORDCHAR:
  -    case OP_WORDCHAR:
  -    case OP_ANY:
  -    branchlength++;
  -    cc++;
  -    break;
  -
  -    /* Check a class for variable quantification */
  -
  -    case OP_CLASS:
  -    cc += 33;
  -
  -    switch (*cc)
  -      {
  -      case OP_CRSTAR:
  -      case OP_CRMINSTAR:
  -      case OP_CRQUERY:
  -      case OP_CRMINQUERY:
  -      return -1;
  -
  -      case OP_CRRANGE:
  -      case OP_CRMINRANGE:
  -      if ((cc[1] << 8) + cc[2] != (cc[3] << 8) + cc[4]) return -1;
  -      branchlength += (cc[1] << 8) + cc[2];
  -      cc += 5;
  -      break;
  -
  -      default:
  -      branchlength++;
  -      }
  -    break;
  -
  -    /* Anything else is variable length */
  -
  -    default:
  -    return -1;
  -    }
  -  }
  -/* Control never gets here */
  +			case OP_EXACT:
  +			case OP_TYPEEXACT:
  +				branchlength += (cc[1] << 8) + cc[2];
  +				cc += 4;
  +				break;
  +
  +			case OP_NOT_DIGIT:
  +			case OP_DIGIT:
  +			case OP_NOT_WHITESPACE:
  +			case OP_WHITESPACE:
  +			case OP_NOT_WORDCHAR:
  +			case OP_WORDCHAR:
  +			case OP_ANY:
  +				branchlength++;
  +				cc++;
  +				break;
  +
  +			case OP_CLASS:
  +				cc += 33;
  +
  +				switch (*cc) {
  +					case OP_CRSTAR:
  +					case OP_CRMINSTAR:
  +					case OP_CRQUERY:
  +					case OP_CRMINQUERY:
  +						return -1;
  +
  +					case OP_CRRANGE:
  +					case OP_CRMINRANGE:
  +						if ((cc[1] << 8) + cc[2] != (cc[3] << 8) + cc[4])
  +							return -1;
  +						branchlength += (cc[1] << 8) + cc[2];
  +						cc += 5;
  +						break;
  +
  +					default:
  +						branchlength++;
  +				}
  +				break;
  +
  +			default:
  +				return -1;
  +		}
  +	}
   }
   
  -/*************************************************
  -*           Check for POSIX class syntax         *
  -*************************************************/
  -
  -/* This function is called when the sequence "[:" or "[." or "[=" is
  -encountered in a character class. It checks whether this is followed by an
  -optional ^ and then a sequence of letters, terminated by a matching ":]" or
  -".]" or "=]".
  -
  -Argument:
  -  ptr      pointer to the initial [
  -  endptr   where to return the end pointer
  -  cd       pointer to compile data
  -
  -Returns:   TRUE or FALSE
  -*/
  -
   static BOOL
  -check_posix_syntax(const uschar *ptr, const uschar **endptr, compile_data *cd)
  +check_posix_syntax(const uschar * ptr, const uschar ** endptr,
  +				   compile_data * cd)
   {
  -int terminator;          /* Don't combine these lines; the Solaris cc */
  -terminator = *(++ptr);   /* compiler warns about "non-constant" initializer. */
  -if (*(++ptr) == '^') ptr++;
  -while ((cd->ctypes[*ptr] & ctype_letter) != 0) ptr++;
  -if (*ptr == terminator && ptr[1] == ']')
  -  {
  -  *endptr = ptr;
  -  return TRUE;
  -  }
  -return FALSE;
  +	int terminator;
  +	terminator = *(++ptr);
  +	if (*(++ptr) == '^')
  +		ptr++;
  +	while ((cd->ctypes[*ptr] & ctype_letter) != 0)
  +		ptr++;
  +	if (*ptr == terminator && ptr[1] == ']') {
  +		*endptr = ptr;
  +		return TRUE;
  +	}
  +	return FALSE;
   }
  -
  -/*************************************************
  -*          Check POSIX class name                *
  -*************************************************/
  -
  -/* This function is called to check the name given in a POSIX-style class entry
  -such as [:alnum:].
  -
  -Arguments:
  -  ptr        points to the first letter
  -  len        the length of the name
  -
  -Returns:     a value representing the name, or -1 if unknown
  -*/
   
  -static int
  -check_posix_name(const uschar *ptr, int len)
  +static int check_posix_name(const uschar * ptr, int len)
   {
  -register int yield = 0;
  -while (posix_name_lengths[yield] != 0)
  -  {
  -  if (len == posix_name_lengths[yield] &&
  -    strncmp((const char *)ptr, posix_names[yield], len) == 0) return yield;
  -  yield++;
  -  }
  -return -1;
  +	register int yield = 0;
  +	while (posix_name_lengths[yield] != 0) {
  +		if (len == posix_name_lengths[yield] &&
  +			strncmp((const char *)ptr, posix_names[yield], len) == 0)
  +			return yield;
  +		yield++;
  +	}
  +	return -1;
   }
   
  -/*************************************************
  -*           Compile one branch                   *
  -*************************************************/
  -
  -/* Scan the pattern, compiling it into the code vector.
  -
  -Arguments:
  -  options      the option bits
  -  brackets     points to number of extracting brackets used
  -  code         points to the pointer to the current code point
  -  ptrptr       points to the current pattern pointer
  -  errorptr     points to pointer to error message
  -  optchanged   set to the value of the last OP_OPT item compiled
  -  reqchar      set to the last literal character required, else -1
  -  countlits    set to count of mandatory literal characters
  -  cd           contains pointers to tables
  -
  -Returns:       TRUE on success
  -               FALSE, with *errorptr set on error
  -*/
  -
   static BOOL
  -compile_branch(int options, int *brackets, uschar **codeptr,
  -  const uschar **ptrptr, const char **errorptr, int *optchanged,
  -  int *reqchar, int *countlits, compile_data *cd)
  +compile_branch(int options, int *brackets, uschar ** codeptr,
  +			   const uschar ** ptrptr, const char **errorptr, int *optchanged,
  +			   int *reqchar, int *countlits, compile_data * cd)
   {
  -int repeat_type, op_type;
  -int repeat_min, repeat_max;
  -int bravalue, length;
  -int greedy_default, greedy_non_default;
  -int prevreqchar;
  -int condcount = 0;
  -int subcountlits = 0;
  -register int c;
  -register uschar *code = *codeptr;
  -uschar *tempcode;
  -const uschar *ptr = *ptrptr;
  -const uschar *tempptr;
  -uschar *previous = NULL;
  -uschar class[32];
  -
  -/* Set up the default and non-default settings for greediness */
  -
  -greedy_default = ((options & PCRE_UNGREEDY) != 0);
  -greedy_non_default = greedy_default ^ 1;
  -
  -/* Initialize no required char, and count of literals */
  -
  -*reqchar = prevreqchar = -1;
  -*countlits = 0;
  -
  -/* Switch on next character until the end of the branch */
  -
  -for (;; ptr++)
  -  {
  -  BOOL negate_class;
  -  int class_charcount;
  -  int class_lastchar;
  -  int newoptions;
  -  int skipbytes;
  -  int subreqchar;
  -
  -  c = *ptr;
  -  if ((options & PCRE_EXTENDED) != 0)
  -    {
  -    if ((cd->ctypes[c] & ctype_space) != 0) continue;
  -    if (c == '#')
  -      {
  -      /* The space before the ; is to avoid a warning on a silly compiler
  -      on the Macintosh. */
  -      while ((c = *(++ptr)) != 0 && c != '\n') ;
  -      continue;
  -      }
  -    }
  +	int repeat_type, op_type;
  +	int repeat_min, repeat_max;
  +	int bravalue, length;
  +	int greedy_default, greedy_non_default;
  +	int prevreqchar;
  +	int condcount = 0;
  +	int subcountlits = 0;
  +	register int c;
  +	register uschar *code = *codeptr;
  +	uschar *tempcode;
  +	const uschar *ptr = *ptrptr;
  +	const uschar *tempptr;
  +	uschar *previous = NULL;
  +	uschar class[32];
  +
  +	greedy_default = ((options & PCRE_UNGREEDY) != 0);
  +	greedy_non_default = greedy_default ^ 1;
  +
  +	*reqchar = prevreqchar = -1;
  +	*countlits = 0;
  +
  +	for (;; ptr++) {
  +		BOOL negate_class;
  +		int class_charcount;
  +		int class_lastchar;
  +		int newoptions;
  +		int skipbytes;
  +		int subreqchar;
  +
  +		c = *ptr;
  +		if ((options & PCRE_EXTENDED) != 0) {
  +			if ((cd->ctypes[c] & ctype_space) != 0)
  +				continue;
  +			if (c == '#') {
  +				while ((c = *(++ptr)) != 0 && c != '\n') ;
  +				continue;
  +			}
  +		}
  +
  +		switch (c) {
  +			case 0:
  +			case '|':
  +			case ')':
  +				*codeptr = code;
  +				*ptrptr = ptr;
  +				return TRUE;
  +
  +			case '^':
  +				previous = NULL;
  +				*code++ = OP_CIRC;
  +				break;
  +
  +			case '$':
  +				previous = NULL;
  +				*code++ = OP_DOLL;
  +				break;
  +
  +			case '.':
  +				previous = code;
  +				*code++ = OP_ANY;
  +				break;
  +
  +			case '[':
  +				previous = code;
  +				*code++ = OP_CLASS;
  +
  +				if ((c = *(++ptr)) == '^') {
  +					negate_class = TRUE;
  +					c = *(++ptr);
  +				}
  +				else
  +					negate_class = FALSE;
  +
  +				class_charcount = 0;
  +				class_lastchar = -1;
  +
  +				memset(class, 0, 32 * sizeof (uschar));
  +
  +				do {
  +					if (c == 0) {
  +						*errorptr = ERR6;
  +						goto FAILED;
  +					}
  +
  +					if (c == '[' &&
  +						(ptr[1] == ':' || ptr[1] == '.' || ptr[1] == '=') &&
  +						check_posix_syntax(ptr, &tempptr, cd)) {
  +						BOOL local_negate = FALSE;
  +						int posix_class, i;
  +						register const uschar *cbits = cd->cbits;
  +
  +						if (ptr[1] != ':') {
  +							*errorptr = ERR31;
  +							goto FAILED;
  +						}
  +
  +						ptr += 2;
  +						if (*ptr == '^') {
  +							local_negate = TRUE;
  +							ptr++;
  +						}
  +
  +						posix_class = check_posix_name(ptr, tempptr - ptr);
  +						if (posix_class < 0) {
  +							*errorptr = ERR30;
  +							goto FAILED;
  +						}
  +
  +						if ((options & PCRE_CASELESS) != 0
  +							&& posix_class <= 2) posix_class = 0;
  +
  +						posix_class *= 3;
  +						for (i = 0; i < 3; i++) {
  +							int taboffset = posix_class_maps[posix_class + i];
  +							if (taboffset < 0)
  +								break;
  +							if (local_negate)
  +								for (c = 0; c < 32; c++)
  +									class[c] |= ~cbits[c + taboffset];
  +							else
  +								for (c = 0; c < 32; c++)
  +									class[c] |= cbits[c + taboffset];
  +						}
  +
  +						ptr = tempptr + 1;
  +						class_charcount = 10;
  +						continue;
  +					}
  +
  +					if (c == '\\') {
  +						c =
  +							check_escape(&ptr, errorptr, *brackets, options,
  +										 TRUE, cd);
  +						if (-c == ESC_b)
  +							c = '\b';
  +						else if (c < 0) {
  +							register const uschar *cbits = cd->cbits;
  +							class_charcount = 10;
  +							switch (-c) {
  +								case ESC_d:
  +									for (c = 0; c < 32; c++)
  +										class[c] |= cbits[c + cbit_digit];
  +									continue;
  +
  +								case ESC_D:
  +									for (c = 0; c < 32; c++)
  +										class[c] |= ~cbits[c + cbit_digit];
  +									continue;
  +
  +								case ESC_w:
  +									for (c = 0; c < 32; c++)
  +										class[c] |= cbits[c + cbit_word];
  +									continue;
  +
  +								case ESC_W:
  +									for (c = 0; c < 32; c++)
  +										class[c] |= ~cbits[c + cbit_word];
  +									continue;
  +
  +								case ESC_s:
  +									for (c = 0; c < 32; c++)
  +										class[c] |= cbits[c + cbit_space];
  +									continue;
  +
  +								case ESC_S:
  +									for (c = 0; c < 32; c++)
  +										class[c] |= ~cbits[c + cbit_space];
  +									continue;
  +
  +								default:
  +									*errorptr = ERR7;
  +									goto FAILED;
  +							}
  +						}
   
  -  switch(c)
  -    {
  -    /* The branch terminates at end of string, |, or ). */
  -
  -    case 0:
  -    case '|':
  -    case ')':
  -    *codeptr = code;
  -    *ptrptr = ptr;
  -    return TRUE;
  -
  -    /* Handle single-character metacharacters */
  -
  -    case '^':
  -    previous = NULL;
  -    *code++ = OP_CIRC;
  -    break;
  -
  -    case '$':
  -    previous = NULL;
  -    *code++ = OP_DOLL;
  -    break;
  -
  -    case '.':
  -    previous = code;
  -    *code++ = OP_ANY;
  -    break;
  -
  -    /* Character classes. These always build a 32-byte bitmap of the permitted
  -    characters, except in the special case where there is only one character.
  -    For negated classes, we build the map as usual, then invert it at the end.
  -    */
  -
  -    case '[':
  -    previous = code;
  -    *code++ = OP_CLASS;
  -
  -    /* If the first character is '^', set the negation flag and skip it. */
  -
  -    if ((c = *(++ptr)) == '^')
  -      {
  -      negate_class = TRUE;
  -      c = *(++ptr);
  -      }
  -    else negate_class = FALSE;
  -
  -    /* Keep a count of chars so that we can optimize the case of just a single
  -    character. */
  -
  -    class_charcount = 0;
  -    class_lastchar = -1;
  -
  -    /* Initialize the 32-char bit map to all zeros. We have to build the
  -    map in a temporary bit of store, in case the class contains only 1
  -    character, because in that case the compiled code doesn't use the
  -    bit map. */
  -
  -    memset(class, 0, 32 * sizeof(uschar));
  -
  -    /* Process characters until ] is reached. By writing this as a "do" it
  -    means that an initial ] is taken as a data character. */
  -
  -    do
  -      {
  -      if (c == 0)
  -        {
  -        *errorptr = ERR6;
  -        goto FAILED;
  -        }
  -
  -      /* Handle POSIX class names. Perl allows a negation extension of the
  -      form [:^name]. A square bracket that doesn't match the syntax is
  -      treated as a literal. We also recognize the POSIX constructions
  -      [.ch.] and [=ch=] ("collating elements") and fault them, as Perl
  -      5.6 does. */
  -
  -      if (c == '[' &&
  -          (ptr[1] == ':' || ptr[1] == '.' || ptr[1] == '=') &&
  -          check_posix_syntax(ptr, &tempptr, cd))
  -        {
  -        BOOL local_negate = FALSE;
  -        int posix_class, i;
  -        register const uschar *cbits = cd->cbits;
  -
  -        if (ptr[1] != ':')
  -          {
  -          *errorptr = ERR31;
  -          goto FAILED;
  -          }
  -
  -        ptr += 2;
  -        if (*ptr == '^')
  -          {
  -          local_negate = TRUE;
  -          ptr++;
  -          }
  -
  -        posix_class = check_posix_name(ptr, tempptr - ptr);
  -        if (posix_class < 0)
  -          {
  -          *errorptr = ERR30;
  -          goto FAILED;
  -          }
  -
  -        /* If matching is caseless, upper and lower are converted to
  -        alpha. This relies on the fact that the class table starts with
  -        alpha, lower, upper as the first 3 entries. */
  -
  -        if ((options & PCRE_CASELESS) != 0 && posix_class <= 2)
  -          posix_class = 0;
  -
  -        /* Or into the map we are building up to 3 of the static class
  -        tables, or their negations. */
  -
  -        posix_class *= 3;
  -        for (i = 0; i < 3; i++)
  -          {
  -          int taboffset = posix_class_maps[posix_class + i];
  -          if (taboffset < 0) break;
  -          if (local_negate)
  -            for (c = 0; c < 32; c++) class[c] |= ~cbits[c+taboffset];
  -          else
  -            for (c = 0; c < 32; c++) class[c] |= cbits[c+taboffset];
  -          }
  -
  -        ptr = tempptr + 1;
  -        class_charcount = 10;  /* Set > 1; assumes more than 1 per class */
  -        continue;
  -        }
  -
  -      /* Backslash may introduce a single character, or it may introduce one
  -      of the specials, which just set a flag. Escaped items are checked for
  -      validity in the pre-compiling pass. The sequence \b is a special case.
  -      Inside a class (and only there) it is treated as backspace. Elsewhere
  -      it marks a word boundary. Other escapes have preset maps ready to
  -      or into the one we are building. We assume they have more than one
  -      character in them, so set class_count bigger than one. */
  -
  -      if (c == '\\')
  -        {
  -        c = check_escape(&ptr, errorptr, *brackets, options, TRUE, cd);
  -        if (-c == ESC_b) c = '\b';
  -        else if (c < 0)
  -          {
  -          register const uschar *cbits = cd->cbits;
  -          class_charcount = 10;
  -          switch (-c)
  -            {
  -            case ESC_d:
  -            for (c = 0; c < 32; c++) class[c] |= cbits[c+cbit_digit];
  -            continue;
  -
  -            case ESC_D:
  -            for (c = 0; c < 32; c++) class[c] |= ~cbits[c+cbit_digit];
  -            continue;
  -
  -            case ESC_w:
  -            for (c = 0; c < 32; c++) class[c] |= cbits[c+cbit_word];
  -            continue;
  -
  -            case ESC_W:
  -            for (c = 0; c < 32; c++) class[c] |= ~cbits[c+cbit_word];
  -            continue;
  -
  -            case ESC_s:
  -            for (c = 0; c < 32; c++) class[c] |= cbits[c+cbit_space];
  -            continue;
  -
  -            case ESC_S:
  -            for (c = 0; c < 32; c++) class[c] |= ~cbits[c+cbit_space];
  -            continue;
  -
  -            default:
  -            *errorptr = ERR7;
  -            goto FAILED;
  -            }
  -          }
  -
  -        /* Fall through if single character, but don't at present allow
  -        chars > 255 in UTF-8 mode. */
  -
   #ifdef L2_UT_PCRE_SUPPORT_UTF8
  -        if (c > 255)
  -          {
  -          *errorptr = ERR33;
  -          goto FAILED;
  -          }
  +						if (c > 255) {
  +							*errorptr = ERR33;
  +							goto FAILED;
  +						}
   #endif
  -        }
  +					}
   
  -      /* A single character may be followed by '-' to form a range. However,
  -      Perl does not permit ']' to be the end of the range. A '-' character
  -      here is treated as a literal. */
  -
  -      if (ptr[1] == '-' && ptr[2] != ']')
  -        {
  -        int d;
  -        ptr += 2;
  -        d = *ptr;
  -
  -        if (d == 0)
  -          {
  -          *errorptr = ERR6;
  -          goto FAILED;
  -          }
  -
  -        /* The second part of a range can be a single-character escape, but
  -        not any of the other escapes. Perl 5.6 treats a hyphen as a literal
  -        in such circumstances. */
  -
  -        if (d == '\\')
  -          {
  -          const uschar *oldptr = ptr;
  -          d = check_escape(&ptr, errorptr, *brackets, options, TRUE, cd);
  +					if (ptr[1] == '-' && ptr[2] != ']') {
  +						int d;
  +						ptr += 2;
  +						d = *ptr;
  +
  +						if (d == 0) {
  +							*errorptr = ERR6;
  +							goto FAILED;
  +						}
  +
  +						if (d == '\\') {
  +							const uschar *oldptr = ptr;
  +							d =
  +								check_escape(&ptr, errorptr, *brackets,
  +											 options, TRUE, cd);
   
   #ifdef L2_UT_PCRE_SUPPORT_UTF8
  -          if (d > 255)
  -            {
  -            *errorptr = ERR33;
  -            goto FAILED;
  -            }
  +							if (d > 255) {
  +								*errorptr = ERR33;
  +								goto FAILED;
  +							}
   #endif
  -          /* \b is backslash; any other special means the '-' was literal */
  -
  -          if (d < 0)
  -            {
  -            if (d == -ESC_b) d = '\b'; else
  -              {
  -              ptr = oldptr - 2;
  -              goto SINGLE_CHARACTER;  /* A few lines below */
  -              }
  -            }
  -          }
  -
  -        if (d < c)
  -          {
  -          *errorptr = ERR8;
  -          goto FAILED;
  -          }
  -
  -        for (; c <= d; c++)
  -          {
  -          class[c/8] |= (1 << (c&7));
  -          if ((options & PCRE_CASELESS) != 0)
  -            {
  -            int uc = cd->fcc[c];           /* flip case */
  -            class[uc/8] |= (1 << (uc&7));
  -            }
  -          class_charcount++;                /* in case a one-char range */
  -          class_lastchar = c;
  -          }
  -        continue;   /* Go get the next char in the class */
  -        }
  -
  -      /* Handle a lone single character - we can get here for a normal
  -      non-escape char, or after \ that introduces a single character. */
  -
  -      SINGLE_CHARACTER:
  -
  -      class [c/8] |= (1 << (c&7));
  -      if ((options & PCRE_CASELESS) != 0)
  -        {
  -        c = cd->fcc[c];   /* flip case */
  -        class[c/8] |= (1 << (c&7));
  -        }
  -      class_charcount++;
  -      class_lastchar = c;
  -      }
  -
  -    /* Loop until ']' reached; the check for end of string happens inside the
  -    loop. This "while" is the end of the "do" above. */
  -
  -    while ((c = *(++ptr)) != ']');
  -
  -    /* If class_charcount is 1 and class_lastchar is not negative, we saw
  -    precisely one character. This doesn't need the whole 32-byte bit map.
  -    We turn it into a 1-character OP_CHAR if it's positive, or OP_NOT if
  -    it's negative. */
  -
  -    if (class_charcount == 1 && class_lastchar >= 0)
  -      {
  -      if (negate_class)
  -        {
  -        code[-1] = OP_NOT;
  -        }
  -      else
  -        {
  -        code[-1] = OP_CHARS;
  -        *code++ = 1;
  -        }
  -      *code++ = class_lastchar;
  -      }
  -
  -    /* Otherwise, negate the 32-byte map if necessary, and copy it into
  -    the code vector. */
  -
  -    else
  -      {
  -      if (negate_class)
  -        for (c = 0; c < 32; c++) code[c] = ~class[c];
  -      else
  -        memcpy(code, class, 32);
  -      code += 32;
  -      }
  -    break;
  -
  -    /* Various kinds of repeat */
  -
  -    case '{':
  -    if (!is_counted_repeat(ptr+1, cd)) goto NORMAL_CHAR;
  -    ptr = read_repeat_counts(ptr+1, &repeat_min, &repeat_max, errorptr, cd);
  -    if (*errorptr != NULL) goto FAILED;
  -    goto REPEAT;
  -
  -    case '*':
  -    repeat_min = 0;
  -    repeat_max = -1;
  -    goto REPEAT;
  -
  -    case '+':
  -    repeat_min = 1;
  -    repeat_max = -1;
  -    goto REPEAT;
  -
  -    case '?':
  -    repeat_min = 0;
  -    repeat_max = 1;
  -
  -    REPEAT:
  -    if (previous == NULL)
  -      {
  -      *errorptr = ERR9;
  -      goto FAILED;
  -      }
  -
  -    /* If the next character is '?' this is a minimizing repeat, by default,
  -    but if PCRE_UNGREEDY is set, it works the other way round. Advance to the
  -    next character. */
  -
  -    if (ptr[1] == '?')
  -      { repeat_type = greedy_non_default; ptr++; }
  -    else repeat_type = greedy_default;
  -
  -    /* If previous was a string of characters, chop off the last one and use it
  -    as the subject of the repeat. If there was only one character, we can
  -    abolish the previous item altogether. A repeat with a zero minimum wipes
  -    out any reqchar setting, backing up to the previous value. We must also
  -    adjust the countlits value. */
  -
  -    if (*previous == OP_CHARS)
  -      {
  -      int len = previous[1];
  -
  -      if (repeat_min == 0) *reqchar = prevreqchar;
  -      *countlits += repeat_min - 1;
  -
  -      if (len == 1)
  -        {
  -        c = previous[2];
  -        code = previous;
  -        }
  -      else
  -        {
  -        c = previous[len+1];
  -        previous[1]--;
  -        code--;
  -        }
  -      op_type = 0;                 /* Use single-char op codes */
  -      goto OUTPUT_SINGLE_REPEAT;   /* Code shared with single character types */
  -      }
  -
  -    /* If previous was a single negated character ([^a] or similar), we use
  -    one of the special opcodes, replacing it. The code is shared with single-
  -    character repeats by adding a suitable offset into repeat_type. */
  -
  -    else if ((int)*previous == OP_NOT)
  -      {
  -      op_type = OP_NOTSTAR - OP_STAR;  /* Use "not" opcodes */
  -      c = previous[1];
  -      code = previous;
  -      goto OUTPUT_SINGLE_REPEAT;
  -      }
  -
  -    /* If previous was a character type match (\d or similar), abolish it and
  -    create a suitable repeat item. The code is shared with single-character
  -    repeats by adding a suitable offset into repeat_type. */
  -
  -    else if ((int)*previous < OP_EODN || *previous == OP_ANY)
  -      {
  -      op_type = OP_TYPESTAR - OP_STAR;  /* Use type opcodes */
  -      c = *previous;
  -      code = previous;
  -
  -      OUTPUT_SINGLE_REPEAT:
  -
  -      /* If the maximum is zero then the minimum must also be zero; Perl allows
  -      this case, so we do too - by simply omitting the item altogether. */
  -
  -      if (repeat_max == 0) goto END_REPEAT;
  -
  -      /* Combine the op_type with the repeat_type */
  -
  -      repeat_type += op_type;
  -
  -      /* A minimum of zero is handled either as the special case * or ?, or as
  -      an UPTO, with the maximum given. */
  -
  -      if (repeat_min == 0)
  -        {
  -        if (repeat_max == -1) *code++ = OP_STAR + repeat_type;
  -          else if (repeat_max == 1) *code++ = OP_QUERY + repeat_type;
  -        else
  -          {
  -          *code++ = OP_UPTO + repeat_type;
  -          *code++ = repeat_max >> 8;
  -          *code++ = (repeat_max & 255);
  -          }
  -        }
  -
  -      /* The case {1,} is handled as the special case + */
  -
  -      else if (repeat_min == 1 && repeat_max == -1)
  -        *code++ = OP_PLUS + repeat_type;
  -
  -      /* The case {n,n} is just an EXACT, while the general case {n,m} is
  -      handled as an EXACT followed by an UPTO. An EXACT of 1 is optimized. */
  -
  -      else
  -        {
  -        if (repeat_min != 1)
  -          {
  -          *code++ = OP_EXACT + op_type;  /* NB EXACT doesn't have repeat_type */
  -          *code++ = repeat_min >> 8;
  -          *code++ = (repeat_min & 255);
  -          }
  -
  -        /* If the mininum is 1 and the previous item was a character string,
  -        we either have to put back the item that got cancelled if the string
  -        length was 1, or add the character back onto the end of a longer
  -        string. For a character type nothing need be done; it will just get
  -        put back naturally. Note that the final character is always going to
  -        get added below. */
  -
  -        else if (*previous == OP_CHARS)
  -          {
  -          if (code == previous) code += 2; else previous[1]++;
  -          }
  -
  -        /*  For a single negated character we also have to put back the
  -        item that got cancelled. */
  -
  -        else if (*previous == OP_NOT) code++;
  -
  -        /* If the maximum is unlimited, insert an OP_STAR. */
  -
  -        if (repeat_max < 0)
  -          {
  -          *code++ = c;
  -          *code++ = OP_STAR + repeat_type;
  -          }
  -
  -        /* Else insert an UPTO if the max is greater than the min. */
  -
  -        else if (repeat_max != repeat_min)
  -          {
  -          *code++ = c;
  -          repeat_max -= repeat_min;
  -          *code++ = OP_UPTO + repeat_type;
  -          *code++ = repeat_max >> 8;
  -          *code++ = (repeat_max & 255);
  -          }
  -        }
  -
  -      /* The character or character type itself comes last in all cases. */
  -
  -      *code++ = c;
  -      }
  -
  -    /* If previous was a character class or a back reference, we put the repeat
  -    stuff after it, but just skip the item if the repeat was {0,0}. */
  -
  -    else if (*previous == OP_CLASS || *previous == OP_REF)
  -      {
  -      if (repeat_max == 0)
  -        {
  -        code = previous;
  -        goto END_REPEAT;
  -        }
  -      if (repeat_min == 0 && repeat_max == -1)
  -        *code++ = OP_CRSTAR + repeat_type;
  -      else if (repeat_min == 1 && repeat_max == -1)
  -        *code++ = OP_CRPLUS + repeat_type;
  -      else if (repeat_min == 0 && repeat_max == 1)
  -        *code++ = OP_CRQUERY + repeat_type;
  -      else
  -        {
  -        *code++ = OP_CRRANGE + repeat_type;
  -        *code++ = repeat_min >> 8;
  -        *code++ = repeat_min & 255;
  -        if (repeat_max == -1) repeat_max = 0;  /* 2-byte encoding for max */
  -        *code++ = repeat_max >> 8;
  -        *code++ = repeat_max & 255;
  -        }
  -      }
  -
  -    /* If previous was a bracket group, we may have to replicate it in certain
  -    cases. */
  -
  -    else if ((int)*previous >= OP_BRA || (int)*previous == OP_ONCE ||
  -             (int)*previous == OP_COND)
  -      {
  -      register int i;
  -      int ketoffset = 0;
  -      int len = code - previous;
  -      uschar *bralink = NULL;
  -
  -      /* If the maximum repeat count is unlimited, find the end of the bracket
  -      by scanning through from the start, and compute the offset back to it
  -      from the current code pointer. There may be an OP_OPT setting following
  -      the final KET, so we can't find the end just by going back from the code
  -      pointer. */
  -
  -      if (repeat_max == -1)
  -        {
  -        register uschar *ket = previous;
  -        do ket += (ket[1] << 8) + ket[2]; while (*ket != OP_KET);
  -        ketoffset = code - ket;
  -        }
  -
  -      /* The case of a zero minimum is special because of the need to stick
  -      OP_BRAZERO in front of it, and because the group appears once in the
  -      data, whereas in other cases it appears the minimum number of times. For
  -      this reason, it is simplest to treat this case separately, as otherwise
  -      the code gets far too messy. There are several special subcases when the
  -      minimum is zero. */
  -
  -      if (repeat_min == 0)
  -        {
  -        /* If we set up a required char from the bracket, we must back off
  -        to the previous value and reset the countlits value too. */
  -
  -        if (subcountlits > 0)
  -          {
  -          *reqchar = prevreqchar;
  -          *countlits -= subcountlits;
  -          }
  -
  -        /* If the maximum is also zero, we just omit the group from the output
  -        altogether. */
  -
  -        if (repeat_max == 0)
  -          {
  -          code = previous;
  -          goto END_REPEAT;
  -          }
  -
  -        /* If the maximum is 1 or unlimited, we just have to stick in the
  -        BRAZERO and do no more at this point. */
  -
  -        if (repeat_max <= 1)
  -          {
  -          memmove(previous+1, previous, len);
  -          code++;
  -          *previous++ = OP_BRAZERO + repeat_type;
  -          }
  -
  -        /* If the maximum is greater than 1 and limited, we have to replicate
  -        in a nested fashion, sticking OP_BRAZERO before each set of brackets.
  -        The first one has to be handled carefully because it's the original
  -        copy, which has to be moved up. The remainder can be handled by code
  -        that is common with the non-zero minimum case below. We just have to
  -        adjust the value or repeat_max, since one less copy is required. */
  -
  -        else
  -          {
  -          int offset;
  -          memmove(previous+4, previous, len);
  -          code += 4;
  -          *previous++ = OP_BRAZERO + repeat_type;
  -          *previous++ = OP_BRA;
  -
  -          /* We chain together the bracket offset fields that have to be
  -          filled in later when the ends of the brackets are reached. */
  -
  -          offset = (bralink == NULL)? 0 : previous - bralink;
  -          bralink = previous;
  -          *previous++ = offset >> 8;
  -          *previous++ = offset & 255;
  -          }
  -
  -        repeat_max--;
  -        }
  -
  -      /* If the minimum is greater than zero, replicate the group as many
  -      times as necessary, and adjust the maximum to the number of subsequent
  -      copies that we need. */
  -
  -      else
  -        {
  -        for (i = 1; i < repeat_min; i++)
  -          {
  -          memcpy(code, previous, len);
  -          code += len;
  -          }
  -        if (repeat_max > 0) repeat_max -= repeat_min;
  -        }
  -
  -      /* This code is common to both the zero and non-zero minimum cases. If
  -      the maximum is limited, it replicates the group in a nested fashion,
  -      remembering the bracket starts on a stack. In the case of a zero minimum,
  -      the first one was set up above. In all cases the repeat_max now specifies
  -      the number of additional copies needed. */
  -
  -      if (repeat_max >= 0)
  -        {
  -        for (i = repeat_max - 1; i >= 0; i--)
  -          {
  -          *code++ = OP_BRAZERO + repeat_type;
  -
  -          /* All but the final copy start a new nesting, maintaining the
  -          chain of brackets outstanding. */
  -
  -          if (i != 0)
  -            {
  -            int offset;
  -            *code++ = OP_BRA;
  -            offset = (bralink == NULL)? 0 : code - bralink;
  -            bralink = code;
  -            *code++ = offset >> 8;
  -            *code++ = offset & 255;
  -            }
  -
  -          memcpy(code, previous, len);
  -          code += len;
  -          }
  -
  -        /* Now chain through the pending brackets, and fill in their length
  -        fields (which are holding the chain links pro tem). */
  -
  -        while (bralink != NULL)
  -          {
  -          int oldlinkoffset;
  -          int offset = code - bralink + 1;
  -          uschar *bra = code - offset;
  -          oldlinkoffset = (bra[1] << 8) + bra[2];
  -          bralink = (oldlinkoffset == 0)? NULL : bralink - oldlinkoffset;
  -          *code++ = OP_KET;
  -          *code++ = bra[1] = offset >> 8;
  -          *code++ = bra[2] = (offset & 255);
  -          }
  -        }
  -
  -      /* If the maximum is unlimited, set a repeater in the final copy. We
  -      can't just offset backwards from the current code point, because we
  -      don't know if there's been an options resetting after the ket. The
  -      correct offset was computed above. */
  -
  -      else code[-ketoffset] = OP_KETRMAX + repeat_type;
  -      }
  -
  -    /* Else there's some kind of shambles */
  -
  -    else
  -      {
  -      *errorptr = ERR11;
  -      goto FAILED;
  -      }
  -
  -    /* In all case we no longer have a previous item. */
  -
  -    END_REPEAT:
  -    previous = NULL;
  -    break;
  -
  -    /* Start of nested bracket sub-expression, or comment or lookahead or
  -    lookbehind or option setting or condition. First deal with special things
  -    that can come after a bracket; all are introduced by ?, and the appearance
  -    of any of them means that this is not a referencing group. They were
  -    checked for validity in the first pass over the string, so we don't have to
  -    check for syntax errors here.  */
  -
  -    case '(':
  -    newoptions = options;
  -    skipbytes = 0;
  -
  -    if (*(++ptr) == '?')
  -      {
  -      int set, unset;
  -      int *optset;
  -
  -      switch (*(++ptr))
  -        {
  -        case '#':                 /* Comment; skip to ket */
  -        ptr++;
  -        while (*ptr != ')') ptr++;
  -        continue;
  -
  -        case ':':                 /* Non-extracting bracket */
  -        bravalue = OP_BRA;
  -        ptr++;
  -        break;
  -
  -        case '(':
  -        bravalue = OP_COND;       /* Conditional group */
  -        if ((cd->ctypes[*(++ptr)] & ctype_digit) != 0)
  -          {
  -          int condref = *ptr - '0';
  -          while (*(++ptr) != ')') condref = condref*10 + *ptr - '0';
  -          if (condref == 0)
  -            {
  -            *errorptr = ERR35;
  -            goto FAILED;
  -            }
  -          ptr++;
  -          code[3] = OP_CREF;
  -          code[4] = condref >> 8;
  -          code[5] = condref & 255;
  -          skipbytes = 3;
  -          }
  -        else ptr--;
  -        break;
  -
  -        case '=':                 /* Positive lookahead */
  -        bravalue = OP_ASSERT;
  -        ptr++;
  -        break;
  -
  -        case '!':                 /* Negative lookahead */
  -        bravalue = OP_ASSERT_NOT;
  -        ptr++;
  -        break;
  -
  -        case '<':                 /* Lookbehinds */
  -        switch (*(++ptr))
  -          {
  -          case '=':               /* Positive lookbehind */
  -          bravalue = OP_ASSERTBACK;
  -          ptr++;
  -          break;
  -
  -          case '!':               /* Negative lookbehind */
  -          bravalue = OP_ASSERTBACK_NOT;
  -          ptr++;
  -          break;
  -
  -          default:                /* Syntax error */
  -          *errorptr = ERR24;
  -          goto FAILED;
  -          }
  -        break;
  -
  -        case '>':                 /* One-time brackets */
  -        bravalue = OP_ONCE;
  -        ptr++;
  -        break;
  -
  -        case 'R':                 /* Pattern recursion */
  -        *code++ = OP_RECURSE;
  -        ptr++;
  -        continue;
  -
  -        default:                  /* Option setting */
  -        set = unset = 0;
  -        optset = &set;
  -
  -        while (*ptr != ')' && *ptr != ':')
  -          {
  -          switch (*ptr++)
  -            {
  -            case '-': optset = &unset; break;
  -
  -            case 'i': *optset |= PCRE_CASELESS; break;
  -            case 'm': *optset |= PCRE_MULTILINE; break;
  -            case 's': *optset |= PCRE_DOTALL; break;
  -            case 'x': *optset |= PCRE_EXTENDED; break;
  -            case 'U': *optset |= PCRE_UNGREEDY; break;
  -            case 'X': *optset |= PCRE_EXTRA; break;
  -
  -            default:
  -            *errorptr = ERR12;
  -            goto FAILED;
  -            }
  -          }
  -
  -        /* Set up the changed option bits, but don't change anything yet. */
  -
  -        newoptions = (options | set) & (~unset);
  -
  -        /* If the options ended with ')' this is not the start of a nested
  -        group with option changes, so the options change at this level. At top
  -        level there is nothing else to be done (the options will in fact have
  -        been set from the start of compiling as a result of the first pass) but
  -        at an inner level we must compile code to change the ims options if
  -        necessary, and pass the new setting back so that it can be put at the
  -        start of any following branches, and when this group ends, a resetting
  -        item can be compiled. */
  -
  -        if (*ptr == ')')
  -          {
  -          if ((options & PCRE_INGROUP) != 0 &&
  -              (options & PCRE_IMS) != (newoptions & PCRE_IMS))
  -            {
  -            *code++ = OP_OPT;
  -            *code++ = *optchanged = newoptions & PCRE_IMS;
  -            }
  -          options = newoptions;  /* Change options at this level */
  -          previous = NULL;       /* This item can't be repeated */
  -          continue;              /* It is complete */
  -          }
  -
  -        /* If the options ended with ':' we are heading into a nested group
  -        with possible change of options. Such groups are non-capturing and are
  -        not assertions of any kind. All we need to do is skip over the ':';
  -        the newoptions value is handled below. */
  -
  -        bravalue = OP_BRA;
  -        ptr++;
  -        }
  -      }
  -
  -    /* Else we have a referencing group; adjust the opcode. If the bracket
  -    number is greater than EXTRACT_BASIC_MAX, we set the opcode one higher, and
  -    arrange for the true number to follow later, in an OP_BRANUMBER item. */
  -
  -    else
  -      {
  -      if (++(*brackets) > EXTRACT_BASIC_MAX)
  -        {
  -        bravalue = OP_BRA + EXTRACT_BASIC_MAX + 1;
  -        code[3] = OP_BRANUMBER;
  -        code[4] = *brackets >> 8;
  -        code[5] = *brackets & 255;
  -        skipbytes = 3;
  -        }
  -      else bravalue = OP_BRA + *brackets;
  -      }
  -
  -    /* Process nested bracketed re. Assertions may not be repeated, but other
  -    kinds can be. We copy code into a non-register variable in order to be able
  -    to pass its address because some compilers complain otherwise. Pass in a
  -    new setting for the ims options if they have changed. */
  -
  -    previous = (bravalue >= OP_ONCE)? code : NULL;
  -    *code = bravalue;
  -    tempcode = code;
  -
  -    if (!compile_regex(
  -         options | PCRE_INGROUP,       /* Set for all nested groups */
  -         ((options & PCRE_IMS) != (newoptions & PCRE_IMS))?
  -           newoptions & PCRE_IMS : -1, /* Pass ims options if changed */
  -         brackets,                     /* Extracting bracket count */
  -         &tempcode,                    /* Where to put code (updated) */
  -         &ptr,                         /* Input pointer (updated) */
  -         errorptr,                     /* Where to put an error message */
  -         (bravalue == OP_ASSERTBACK ||
  -          bravalue == OP_ASSERTBACK_NOT), /* TRUE if back assert */
  -         skipbytes,                    /* Skip over OP_COND/OP_BRANUMBER */
  -         &subreqchar,                  /* For possible last char */
  -         &subcountlits,                /* For literal count */
  -         cd))                          /* Tables block */
  -      goto FAILED;
  -
  -    /* At the end of compiling, code is still pointing to the start of the
  -    group, while tempcode has been updated to point past the end of the group
  -    and any option resetting that may follow it. The pattern pointer (ptr)
  -    is on the bracket. */
  -
  -    /* If this is a conditional bracket, check that there are no more than
  -    two branches in the group. */
  -
  -    else if (bravalue == OP_COND)
  -      {
  -      uschar *tc = code;
  -      condcount = 0;
  -
  -      do {
  -         condcount++;
  -         tc += (tc[1] << 8) | tc[2];
  -         }
  -      while (*tc != OP_KET);
  -
  -      if (condcount > 2)
  -        {
  -        *errorptr = ERR27;
  -        goto FAILED;
  -        }
  -      }
  -
  -    /* Handle updating of the required character. If the subpattern didn't
  -    set one, leave it as it was. Otherwise, update it for normal brackets of
  -    all kinds, forward assertions, and conditions with two branches. Don't
  -    update the literal count for forward assertions, however. If the bracket
  -    is followed by a quantifier with zero repeat, we have to back off. Hence
  -    the definition of prevreqchar and subcountlits outside the main loop so
  -    that they can be accessed for the back off. */
  -
  -    if (subreqchar > 0 &&
  -         (bravalue >= OP_BRA || bravalue == OP_ONCE || bravalue == OP_ASSERT ||
  -         (bravalue == OP_COND && condcount == 2)))
  -      {
  -      prevreqchar = *reqchar;
  -      *reqchar = subreqchar;
  -      if (bravalue != OP_ASSERT) *countlits += subcountlits;
  -      }
  -
  -    /* Now update the main code pointer to the end of the group. */
  -
  -    code = tempcode;
  -
  -    /* Error if hit end of pattern */
  -
  -    if (*ptr != ')')
  -      {
  -      *errorptr = ERR14;
  -      goto FAILED;
  -      }
  -    break;
  -
  -    /* Check \ for being a real metacharacter; if not, fall through and handle
  -    it as a data character at the start of a string. Escape items are checked
  -    for validity in the pre-compiling pass. */
  -
  -    case '\\':
  -    tempptr = ptr;
  -    c = check_escape(&ptr, errorptr, *brackets, options, FALSE, cd);
  -
  -    /* Handle metacharacters introduced by \. For ones like \d, the ESC_ values
  -    are arranged to be the negation of the corresponding OP_values. For the
  -    back references, the values are ESC_REF plus the reference number. Only
  -    back references and those types that consume a character may be repeated.
  -    We can test for values between ESC_b and ESC_Z for the latter; this may
  -    have to change if any new ones are ever created. */
  -
  -    if (c < 0)
  -      {
  -      if (-c >= ESC_REF)
  -        {
  -        int number = -c - ESC_REF;
  -        previous = code;
  -        *code++ = OP_REF;
  -        *code++ = number >> 8;
  -        *code++ = number & 255;
  -        }
  -      else
  -        {
  -        previous = (-c > ESC_b && -c < ESC_Z)? code : NULL;
  -        *code++ = -c;
  -        }
  -      continue;
  -      }
  -
  -    /* Data character: reset and fall through */
  -
  -    ptr = tempptr;
  -    c = '\\';
  -
  -    /* Handle a run of data characters until a metacharacter is encountered.
  -    The first character is guaranteed not to be whitespace or # when the
  -    extended flag is set. */
  -
  -    NORMAL_CHAR:
  -    default:
  -    previous = code;
  -    *code = OP_CHARS;
  -    code += 2;
  -    length = 0;
  -
  -    do
  -      {
  -      if ((options & PCRE_EXTENDED) != 0)
  -        {
  -        if ((cd->ctypes[c] & ctype_space) != 0) continue;
  -        if (c == '#')
  -          {
  -          /* The space before the ; is to avoid a warning on a silly compiler
  -          on the Macintosh. */
  -          while ((c = *(++ptr)) != 0 && c != '\n') ;
  -          if (c == 0) break;
  -          continue;
  -          }
  -        }
  -
  -      /* Backslash may introduce a data char or a metacharacter. Escaped items
  -      are checked for validity in the pre-compiling pass. Stop the string
  -      before a metaitem. */
  -
  -      if (c == '\\')
  -        {
  -        tempptr = ptr;
  -        c = check_escape(&ptr, errorptr, *brackets, options, FALSE, cd);
  -        if (c < 0) { ptr = tempptr; break; }
  -
  -        /* If a character is > 127 in UTF-8 mode, we have to turn it into
  -        two or more characters in the UTF-8 encoding. */
  +							if (d < 0) {
  +								if (d == -ESC_b)
  +									d = '\b';
  +								else {
  +									ptr = oldptr - 2;
  +									goto SINGLE_CHARACTER;
  +								}
  +							}
  +						}
  +
  +						if (d < c) {
  +							*errorptr = ERR8;
  +							goto FAILED;
  +						}
  +
  +						for (; c <= d; c++) {
  +							class[c / 8] |= (1 << (c & 7));
  +							if ((options & PCRE_CASELESS) != 0) {
  +								int uc = cd->fcc[c];
  +								class[uc / 8] |= (1 << (uc & 7));
  +							}
  +							class_charcount++;
  +							class_lastchar = c;
  +						}
  +						continue;
  +					}
  +
  +				  SINGLE_CHARACTER:
  +
  +					class[c / 8] |= (1 << (c & 7));
  +					if ((options & PCRE_CASELESS) != 0) {
  +						c = cd->fcc[c];
  +						class[c / 8] |= (1 << (c & 7));
  +					}
  +					class_charcount++;
  +					class_lastchar = c;
  +				}
  +
  +				while ((c = *(++ptr)) != ']');
  +
  +				if (class_charcount == 1 && class_lastchar >= 0) {
  +					if (negate_class) {
  +						code[-1] = OP_NOT;
  +					}
  +					else {
  +						code[-1] = OP_CHARS;
  +						*code++ = 1;
  +					}
  +					*code++ = class_lastchar;
  +				}
  +
  +				else {
  +					if (negate_class)
  +						for (c = 0; c < 32; c++)
  +							code[c] = ~class[c];
  +					else
  +						memcpy(code, class, 32);
  +					code += 32;
  +				}
  +				break;
  +
  +			case '{':
  +				if (!is_counted_repeat(ptr + 1, cd))
  +					goto NORMAL_CHAR;
  +				ptr =
  +					read_repeat_counts(ptr + 1, &repeat_min, &repeat_max,
  +									   errorptr, cd);
  +				if (*errorptr != NULL)
  +					goto FAILED;
  +				goto REPEAT;
  +
  +			case '*':
  +				repeat_min = 0;
  +				repeat_max = -1;
  +				goto REPEAT;
  +
  +			case '+':
  +				repeat_min = 1;
  +				repeat_max = -1;
  +				goto REPEAT;
  +
  +			case '?':
  +				repeat_min = 0;
  +				repeat_max = 1;
  +
  +			  REPEAT:
  +				if (previous == NULL) {
  +					*errorptr = ERR9;
  +					goto FAILED;
  +				}
  +
  +				if (ptr[1] == '?') {
  +					repeat_type = greedy_non_default;
  +					ptr++;
  +				}
  +				else
  +					repeat_type = greedy_default;
  +
  +				if (*previous == OP_CHARS) {
  +					int len = previous[1];
  +
  +					if (repeat_min == 0)
  +						*reqchar = prevreqchar;
  +					*countlits += repeat_min - 1;
  +
  +					if (len == 1) {
  +						c = previous[2];
  +						code = previous;
  +					}
  +					else {
  +						c = previous[len + 1];
  +						previous[1]--;
  +						code--;
  +					}
  +					op_type = 0;
  +					goto OUTPUT_SINGLE_REPEAT;
  +				}
  +
  +				else if ((int)*previous == OP_NOT) {
  +					op_type = OP_NOTSTAR - OP_STAR;
  +					c = previous[1];
  +					code = previous;
  +					goto OUTPUT_SINGLE_REPEAT;
  +				}
  +
  +				else if ((int)*previous < OP_EODN || *previous == OP_ANY) {
  +					op_type = OP_TYPESTAR - OP_STAR;
  +					c = *previous;
  +					code = previous;
  +
  +				  OUTPUT_SINGLE_REPEAT:
  +
  +					if (repeat_max == 0)
  +						goto END_REPEAT;
  +
  +					repeat_type += op_type;
  +
  +					if (repeat_min == 0) {
  +						if (repeat_max == -1)
  +							*code++ = OP_STAR + repeat_type;
  +						else if (repeat_max == 1)
  +							*code++ = OP_QUERY + repeat_type;
  +						else {
  +							*code++ = OP_UPTO + repeat_type;
  +							*code++ = repeat_max >> 8;
  +							*code++ = (repeat_max & 255);
  +						}
  +					}
  +
  +					else if (repeat_min == 1 && repeat_max == -1)
  +						*code++ = OP_PLUS + repeat_type;
  +
  +					else {
  +						if (repeat_min != 1) {
  +							*code++ = OP_EXACT + op_type;
  +							*code++ = repeat_min >> 8;
  +							*code++ = (repeat_min & 255);
  +						}
  +
  +						else if (*previous == OP_CHARS) {
  +							if (code == previous)
  +								code += 2;
  +							else
  +								previous[1]++;
  +						}
  +
  +						else if (*previous == OP_NOT)
  +							code++;
  +
  +						if (repeat_max < 0) {
  +							*code++ = c;
  +							*code++ = OP_STAR + repeat_type;
  +						}
  +
  +						else if (repeat_max != repeat_min) {
  +							*code++ = c;
  +							repeat_max -= repeat_min;
  +							*code++ = OP_UPTO + repeat_type;
  +							*code++ = repeat_max >> 8;
  +							*code++ = (repeat_max & 255);
  +						}
  +					}
  +
  +					*code++ = c;
  +				}
  +
  +				else if (*previous == OP_CLASS || *previous == OP_REF) {
  +					if (repeat_max == 0) {
  +						code = previous;
  +						goto END_REPEAT;
  +					}
  +					if (repeat_min == 0 && repeat_max == -1)
  +						*code++ = OP_CRSTAR + repeat_type;
  +					else if (repeat_min == 1 && repeat_max == -1)
  +						*code++ = OP_CRPLUS + repeat_type;
  +					else if (repeat_min == 0 && repeat_max == 1)
  +						*code++ = OP_CRQUERY + repeat_type;
  +					else {
  +						*code++ = OP_CRRANGE + repeat_type;
  +						*code++ = repeat_min >> 8;
  +						*code++ = repeat_min & 255;
  +						if (repeat_max == -1)
  +							repeat_max = 0;
  +						*code++ = repeat_max >> 8;
  +						*code++ = repeat_max & 255;
  +					}
  +				}
  +
  +				else if ((int)*previous >= OP_BRA || (int)*previous == OP_ONCE
  +						 || (int)*previous == OP_COND) {
  +					register int i;
  +					int ketoffset = 0;
  +					int len = code - previous;
  +					uschar *bralink = NULL;
  +
  +					if (repeat_max == -1) {
  +						register uschar *ket = previous;
  +						do
  +							ket += (ket[1] << 8) + ket[2];
  +						while (*ket != OP_KET);
  +						ketoffset = code - ket;
  +					}
  +
  +					if (repeat_min == 0) {
  +						if (subcountlits > 0) {
  +							*reqchar = prevreqchar;
  +							*countlits -= subcountlits;
  +						}
  +
  +						if (repeat_max == 0) {
  +							code = previous;
  +							goto END_REPEAT;
  +						}
  +
  +						if (repeat_max <= 1) {
  +							memmove(previous + 1, previous, len);
  +							code++;
  +							*previous++ = OP_BRAZERO + repeat_type;
  +						}
  +
  +						else {
  +							int offset;
  +							memmove(previous + 4, previous, len);
  +							code += 4;
  +							*previous++ = OP_BRAZERO + repeat_type;
  +							*previous++ = OP_BRA;
  +
  +							offset =
  +								(bralink == NULL) ? 0 : previous - bralink;
  +							bralink = previous;
  +							*previous++ = offset >> 8;
  +							*previous++ = offset & 255;
  +						}
  +
  +						repeat_max--;
  +					}
  +
  +					else {
  +						for (i = 1; i < repeat_min; i++) {
  +							memcpy(code, previous, len);
  +							code += len;
  +						}
  +						if (repeat_max > 0)
  +							repeat_max -= repeat_min;
  +					}
  +
  +					if (repeat_max >= 0) {
  +						for (i = repeat_max - 1; i >= 0; i--) {
  +							*code++ = OP_BRAZERO + repeat_type;
  +
  +							if (i != 0) {
  +								int offset;
  +								*code++ = OP_BRA;
  +								offset =
  +									(bralink == NULL) ? 0 : code - bralink;
  +								bralink = code;
  +								*code++ = offset >> 8;
  +								*code++ = offset & 255;
  +							}
  +
  +							memcpy(code, previous, len);
  +							code += len;
  +						}
  +
  +						while (bralink != NULL) {
  +							int oldlinkoffset;
  +							int offset = code - bralink + 1;
  +							uschar *bra = code - offset;
  +							oldlinkoffset = (bra[1] << 8) + bra[2];
  +							bralink =
  +								(oldlinkoffset ==
  +								 0) ? NULL : bralink - oldlinkoffset;
  +							*code++ = OP_KET;
  +							*code++ = bra[1] = offset >> 8;
  +							*code++ = bra[2] = (offset & 255);
  +						}
  +					}
  +
  +					else
  +						code[-ketoffset] = OP_KETRMAX + repeat_type;
  +				}
  +
  +				else {
  +					*errorptr = ERR11;
  +					goto FAILED;
  +				}
  +
  +			  END_REPEAT:
  +				previous = NULL;
  +				break;
  +
  +			case '(':
  +				newoptions = options;
  +				skipbytes = 0;
  +
  +				if (*(++ptr) == '?') {
  +					int set, unset;
  +					int *optset;
  +
  +					switch (*(++ptr)) {
  +						case '#':
  +							ptr++;
  +							while (*ptr != ')')
  +								ptr++;
  +							continue;
  +
  +						case ':':
  +							bravalue = OP_BRA;
  +							ptr++;
  +							break;
  +
  +						case '(':
  +							bravalue = OP_COND;
  +							if ((cd->ctypes[*(++ptr)] & ctype_digit) != 0) {
  +								int condref = *ptr - '0';
  +								while (*(++ptr) != ')')
  +									condref = condref * 10 + *ptr - '0';
  +								if (condref == 0) {
  +									*errorptr = ERR35;
  +									goto FAILED;
  +								}
  +								ptr++;
  +								code[3] = OP_CREF;
  +								code[4] = condref >> 8;
  +								code[5] = condref & 255;
  +								skipbytes = 3;
  +							}
  +							else
  +								ptr--;
  +							break;
  +
  +						case '=':
  +							bravalue = OP_ASSERT;
  +							ptr++;
  +							break;
  +
  +						case '!':
  +							bravalue = OP_ASSERT_NOT;
  +							ptr++;
  +							break;
  +
  +						case '<':
  +							switch (*(++ptr)) {
  +								case '=':
  +									bravalue = OP_ASSERTBACK;
  +									ptr++;
  +									break;
  +
  +								case '!':
  +									bravalue = OP_ASSERTBACK_NOT;
  +									ptr++;
  +									break;
  +
  +								default:
  +									*errorptr = ERR24;
  +									goto FAILED;
  +							}
  +							break;
  +
  +						case '>':
  +							bravalue = OP_ONCE;
  +							ptr++;
  +							break;
  +
  +						case 'R':
  +							*code++ = OP_RECURSE;
  +							ptr++;
  +							continue;
  +
  +						default:
  +							set = unset = 0;
  +							optset = &set;
  +
  +							while (*ptr != ')' && *ptr != ':') {
  +								switch (*ptr++) {
  +									case '-':
  +										optset = &unset;
  +										break;
  +
  +									case 'i':
  +										*optset |= PCRE_CASELESS;
  +										break;
  +									case 'm':
  +										*optset |= PCRE_MULTILINE;
  +										break;
  +									case 's':
  +										*optset |= PCRE_DOTALL;
  +										break;
  +									case 'x':
  +										*optset |= PCRE_EXTENDED;
  +										break;
  +									case 'U':
  +										*optset |= PCRE_UNGREEDY;
  +										break;
  +									case 'X':
  +										*optset |= PCRE_EXTRA;
  +										break;
  +
  +									default:
  +										*errorptr = ERR12;
  +										goto FAILED;
  +								}
  +							}
  +
  +							newoptions = (options | set) & (~unset);
  +
  +							if (*ptr == ')') {
  +								if ((options & PCRE_INGROUP) != 0 &&
  +									(options & PCRE_IMS) !=
  +									(newoptions & PCRE_IMS)) {
  +									*code++ = OP_OPT;
  +									*code++ = *optchanged =
  +										newoptions & PCRE_IMS;
  +								}
  +								options = newoptions;
  +								previous = NULL;
  +								continue;
  +							}
  +
  +							bravalue = OP_BRA;
  +							ptr++;
  +					}
  +				}
  +
  +				else {
  +					if (++(*brackets) > EXTRACT_BASIC_MAX) {
  +						bravalue = OP_BRA + EXTRACT_BASIC_MAX + 1;
  +						code[3] = OP_BRANUMBER;
  +						code[4] = *brackets >> 8;
  +						code[5] = *brackets & 255;
  +						skipbytes = 3;
  +					}
  +					else
  +						bravalue = OP_BRA + *brackets;
  +				}
  +
  +				previous = (bravalue >= OP_ONCE) ? code : NULL;
  +				*code = bravalue;
  +				tempcode = code;
  +
  +				if (!compile_regex(options | PCRE_INGROUP,
  +								   ((options & PCRE_IMS) !=
  +									(newoptions & PCRE_IMS)) ? newoptions &
  +								   PCRE_IMS : -1, brackets, &tempcode, &ptr,
  +								   errorptr, (bravalue == OP_ASSERTBACK
  +											  || bravalue ==
  +											  OP_ASSERTBACK_NOT), skipbytes,
  +								   &subreqchar, &subcountlits,
  +								   cd)) goto FAILED;
  +
  +				else if (bravalue == OP_COND) {
  +					uschar *tc = code;
  +					condcount = 0;
  +
  +					do {
  +						condcount++;
  +						tc += (tc[1] << 8) | tc[2];
  +					}
  +					while (*tc != OP_KET);
  +
  +					if (condcount > 2) {
  +						*errorptr = ERR27;
  +						goto FAILED;
  +					}
  +				}
  +
  +				if (subreqchar > 0 &&
  +					(bravalue >= OP_BRA || bravalue == OP_ONCE
  +					 || bravalue == OP_ASSERT || (bravalue == OP_COND
  +												  && condcount == 2))) {
  +					prevreqchar = *reqchar;
  +					*reqchar = subreqchar;
  +					if (bravalue != OP_ASSERT)
  +						*countlits += subcountlits;
  +				}
  +
  +				code = tempcode;
  +
  +				if (*ptr != ')') {
  +					*errorptr = ERR14;
  +					goto FAILED;
  +				}
  +				break;
  +
  +			case '\\':
  +				tempptr = ptr;
  +				c =
  +					check_escape(&ptr, errorptr, *brackets, options, FALSE,
  +								 cd);
  +
  +				if (c < 0) {
  +					if (-c >= ESC_REF) {
  +						int number = -c - ESC_REF;
  +						previous = code;
  +						*code++ = OP_REF;
  +						*code++ = number >> 8;
  +						*code++ = number & 255;
  +					}
  +					else {
  +						previous = (-c > ESC_b && -c < ESC_Z) ? code : NULL;
  +						*code++ = -c;
  +					}
  +					continue;
  +				}
  +
  +				ptr = tempptr;
  +				c = '\\';
  +
  +			  NORMAL_CHAR:
  +			default:
  +				previous = code;
  +				*code = OP_CHARS;
  +				code += 2;
  +				length = 0;
  +
  +				do {
  +					if ((options & PCRE_EXTENDED) != 0) {
  +						if ((cd->ctypes[c] & ctype_space) != 0)
  +							continue;
  +						if (c == '#') {
  +							while ((c = *(++ptr)) != 0 && c != '\n') ;
  +							if (c == 0)
  +								break;
  +							continue;
  +						}
  +					}
  +
  +					if (c == '\\') {
  +						tempptr = ptr;
  +						c =
  +							check_escape(&ptr, errorptr, *brackets, options,
  +										 FALSE, cd);
  +						if (c < 0) {
  +							ptr = tempptr;
  +							break;
  +						}
   
   #ifdef L2_UT_PCRE_SUPPORT_UTF8
  -        if (c > 127 && (options & PCRE_UTF8) != 0)
  -          {
  -          uschar buffer[8];
  -          int len = ord2utf8(c, buffer);
  -          for (c = 0; c < len; c++) *code++ = buffer[c];
  -          length += len;
  -          continue;
  -          }
  +						if (c > 127 && (options & PCRE_UTF8) != 0) {
  +							uschar buffer[8];
  +							int len = ord2utf8(c, buffer);
  +							for (c = 0; c < len; c++)
  +								*code++ = buffer[c];
  +							length += len;
  +							continue;
  +						}
   #endif
  -        }
  -
  -      /* Ordinary character or single-char escape */
  -
  -      *code++ = c;
  -      length++;
  -      }
  -
  -    /* This "while" is the end of the "do" above. */
  -
  -    while (length < MAXLIT && (cd->ctypes[c = *(++ptr)] & ctype_meta) == 0);
  +					}
   
  -    /* Update the last character and the count of literals */
  -
  -    prevreqchar = (length > 1)? code[-2] : *reqchar;
  -    *reqchar = code[-1];
  -    *countlits += length;
  -
  -    /* Compute the length and set it in the data vector, and advance to
  -    the next state. */
  -
  -    previous[1] = length;
  -    if (length < MAXLIT) ptr--;
  -    break;
  -    }
  -  }                   /* end of big loop */
  -
  -/* Control never reaches here by falling through, only by a goto for all the
  -error states. Pass back the position in the pattern so that it can be displayed
  -to the user for diagnosing the error. */
  -
  -FAILED:
  -*ptrptr = ptr;
  -return FALSE;
  +					*code++ = c;
  +					length++;
  +				}
  +
  +				while (length < MAXLIT
  +					   && (cd->ctypes[c = *(++ptr)] & ctype_meta) == 0);
  +
  +				prevreqchar = (length > 1) ? code[-2] : *reqchar;
  +				*reqchar = code[-1];
  +				*countlits += length;
  +
  +				previous[1] = length;
  +				if (length < MAXLIT)
  +					ptr--;
  +				break;
  +		}
  +	}
  +
  +  FAILED:
  +	*ptrptr = ptr;
  +	return FALSE;
   }
   
  -/*************************************************
  -*     Compile sequence of alternatives           *
  -*************************************************/
  -
  -/* On entry, ptr is pointing past the bracket character, but on return
  -it points to the closing bracket, or vertical bar, or end of string.
  -The code variable is pointing at the byte into which the BRA operator has been
  -stored. If the ims options are changed at the start (for a (?ims: group) or
  -during any branch, we need to insert an OP_OPT item at the start of every
  -following branch to ensure they get set correctly at run time, and also pass
  -the new options into every subsequent branch compile.
  -
  -Argument:
  -  options     the option bits
  -  optchanged  new ims options to set as if (?ims) were at the start, or -1
  -               for no change
  -  brackets    -> int containing the number of extracting brackets used
  -  codeptr     -> the address of the current code pointer
  -  ptrptr      -> the address of the current pattern pointer
  -  errorptr    -> pointer to error message
  -  lookbehind  TRUE if this is a lookbehind assertion
  -  skipbytes   skip this many bytes at start (for OP_COND, OP_BRANUMBER)
  -  reqchar     -> place to put the last required character, or a negative number
  -  countlits   -> place to put the shortest literal count of any branch
  -  cd          points to the data block with tables pointers
  -
  -Returns:      TRUE on success
  -*/
  -
   static BOOL
  -compile_regex(int options, int optchanged, int *brackets, uschar **codeptr,
  -  const uschar **ptrptr, const char **errorptr, BOOL lookbehind, int skipbytes,
  -  int *reqchar, int *countlits, compile_data *cd)
  +compile_regex(int options, int optchanged, int *brackets, uschar ** codeptr,
  +			  const uschar ** ptrptr, const char **errorptr, BOOL lookbehind,
  +			  int skipbytes, int *reqchar, int *countlits, compile_data * cd)
   {
  -const uschar *ptr = *ptrptr;
  -uschar *code = *codeptr;
  -uschar *last_branch = code;
  -uschar *start_bracket = code;
  -uschar *reverse_count = NULL;
  -int oldoptions = options & PCRE_IMS;
  -int branchreqchar, branchcountlits;
  -
  -*reqchar = -1;
  -*countlits = INT_MAX;
  -code += 3 + skipbytes;
  -
  -/* Loop for each alternative branch */
  -
  -for (;;)
  -  {
  -  int length;
  -
  -  /* Handle change of options */
  -
  -  if (optchanged >= 0)
  -    {
  -    *code++ = OP_OPT;
  -    *code++ = optchanged;
  -    options = (options & ~PCRE_IMS) | optchanged;
  -    }
  -
  -  /* Set up dummy OP_REVERSE if lookbehind assertion */
  -
  -  if (lookbehind)
  -    {
  -    *code++ = OP_REVERSE;
  -    reverse_count = code;
  -    *code++ = 0;
  -    *code++ = 0;
  -    }
  -
  -  /* Now compile the branch */
  -
  -  if (!compile_branch(options, brackets, &code, &ptr, errorptr, &optchanged,
  -      &branchreqchar, &branchcountlits, cd))
  -    {
  -    *ptrptr = ptr;
  -    return FALSE;
  -    }
  -
  -  /* Fill in the length of the last branch */
  -
  -  length = code - last_branch;
  -  last_branch[1] = length >> 8;
  -  last_branch[2] = length & 255;
  -
  -  /* Save the last required character if all branches have the same; a current
  -  value of -1 means unset, while -2 means "previous branch had no last required
  -  char".  */
  -
  -  if (*reqchar != -2)
  -    {
  -    if (branchreqchar >= 0)
  -      {
  -      if (*reqchar == -1) *reqchar = branchreqchar;
  -      else if (*reqchar != branchreqchar) *reqchar = -2;
  -      }
  -    else *reqchar = -2;
  -    }
  -
  -  /* Keep the shortest literal count */
  -
  -  if (branchcountlits < *countlits) *countlits = branchcountlits;
  -
  -  /* If lookbehind, check that this branch matches a fixed-length string,
  -  and put the length into the OP_REVERSE item. Temporarily mark the end of
  -  the branch with OP_END. */
  -
  -  if (lookbehind)
  -    {
  -    *code = OP_END;
  -    length = find_fixedlength(last_branch, options);
  -
  -    if (length < 0)
  -      {
  -      *errorptr = ERR25;
  -      *ptrptr = ptr;
  -      return FALSE;
  -      }
  -    reverse_count[0] = (length >> 8);
  -    reverse_count[1] = length & 255;
  -    }
  -
  -  /* Reached end of expression, either ')' or end of pattern. Insert a
  -  terminating ket and the length of the whole bracketed item, and return,
  -  leaving the pointer at the terminating char. If any of the ims options
  -  were changed inside the group, compile a resetting op-code following. */
  -
  -  if (*ptr != '|')
  -    {
  -    length = code - start_bracket;
  -    *code++ = OP_KET;
  -    *code++ = length >> 8;
  -    *code++ = length & 255;
  -    if (optchanged >= 0)
  -      {
  -      *code++ = OP_OPT;
  -      *code++ = oldoptions;
  -      }
  -    *codeptr = code;
  -    *ptrptr = ptr;
  -    return TRUE;
  -    }
  -
  -  /* Another branch follows; insert an "or" node and advance the pointer. */
  -
  -  *code = OP_ALT;
  -  last_branch = code;
  -  code += 3;
  -  ptr++;
  -  }
  -/* Control never reaches here */
  +	const uschar *ptr = *ptrptr;
  +	uschar *code = *codeptr;
  +	uschar *last_branch = code;
  +	uschar *start_bracket = code;
  +	uschar *reverse_count = NULL;
  +	int oldoptions = options & PCRE_IMS;
  +	int branchreqchar, branchcountlits;
  +
  +	*reqchar = -1;
  +	*countlits = INT_MAX;
  +	code += 3 + skipbytes;
  +
  +	for (;;) {
  +		int length;
  +
  +		if (optchanged >= 0) {
  +			*code++ = OP_OPT;
  +			*code++ = optchanged;
  +			options = (options & ~PCRE_IMS) | optchanged;
  +		}
  +
  +		if (lookbehind) {
  +			*code++ = OP_REVERSE;
  +			reverse_count = code;
  +			*code++ = 0;
  +			*code++ = 0;
  +		}
  +
  +		if (!compile_branch
  +			(options, brackets, &code, &ptr, errorptr, &optchanged,
  +			 &branchreqchar, &branchcountlits, cd)) {
  +			*ptrptr = ptr;
  +			return FALSE;
  +		}
  +
  +		length = code - last_branch;
  +		last_branch[1] = length >> 8;
  +		last_branch[2] = length & 255;
  +
  +		if (*reqchar != -2) {
  +			if (branchreqchar >= 0) {
  +				if (*reqchar == -1)
  +					*reqchar = branchreqchar;
  +				else if (*reqchar != branchreqchar)
  +					*reqchar = -2;
  +			}
  +			else
  +				*reqchar = -2;
  +		}
  +
  +		if (branchcountlits < *countlits)
  +			*countlits = branchcountlits;
  +
  +		if (lookbehind) {
  +			*code = OP_END;
  +			length = find_fixedlength(last_branch, options);
  +
  +			if (length < 0) {
  +				*errorptr = ERR25;
  +				*ptrptr = ptr;
  +				return FALSE;
  +			}
  +			reverse_count[0] = (length >> 8);
  +			reverse_count[1] = length & 255;
  +		}
  +
  +		if (*ptr != '|') {
  +			length = code - start_bracket;
  +			*code++ = OP_KET;
  +			*code++ = length >> 8;
  +			*code++ = length & 255;
  +			if (optchanged >= 0) {
  +				*code++ = OP_OPT;
  +				*code++ = oldoptions;
  +			}
  +			*codeptr = code;
  +			*ptrptr = ptr;
  +			return TRUE;
  +		}
  +
  +		*code = OP_ALT;
  +		last_branch = code;
  +		code += 3;
  +		ptr++;
  +	}
   }
   
  -/*************************************************
  -*      Find first significant op code            *
  -*************************************************/
  -
  -/* This is called by several functions that scan a compiled expression looking
  -for a fixed first character, or an anchoring op code etc. It skips over things
  -that do not influence this. For one application, a change of caseless option is
  -important.
  -
  -Arguments:
  -  code       pointer to the start of the group
  -  options    pointer to external options
  -  optbit     the option bit whose changing is significant, or
  -             zero if none are
  -  optstop    TRUE to return on option change, otherwise change the options
  -               value and continue
  -
  -Returns:     pointer to the first significant opcode
  -*/
  -
  -static const uschar*
  -first_significant_code(const uschar *code, int *options, int optbit,
  -  BOOL optstop)
  +static const uschar *first_significant_code(const uschar * code, int *options,
  +											int optbit, BOOL optstop)
   {
  -for (;;)
  -  {
  -  switch ((int)*code)
  -    {
  -    case OP_OPT:
  -    if (optbit > 0 && ((int)code[1] & optbit) != (*options & optbit))
  -      {
  -      if (optstop) return code;
  -      *options = (int)code[1];
  -      }
  -    code += 2;
  -    break;
  -
  -    case OP_CREF:
  -    case OP_BRANUMBER:
  -    code += 3;
  -    break;
  -
  -    case OP_WORD_BOUNDARY:
  -    case OP_NOT_WORD_BOUNDARY:
  -    code++;
  -    break;
  -
  -    case OP_ASSERT_NOT:
  -    case OP_ASSERTBACK:
  -    case OP_ASSERTBACK_NOT:
  -    do code += (code[1] << 8) + code[2]; while (*code == OP_ALT);
  -    code += 3;
  -    break;
  -
  -    default:
  -    return code;
  -    }
  -  }
  -/* Control never reaches here */
  +	for (;;) {
  +		switch ((int)*code) {
  +			case OP_OPT:
  +				if (optbit > 0
  +					&& ((int)code[1] & optbit) != (*options & optbit)) {
  +					if (optstop)
  +						return code;
  +					*options = (int)code[1];
  +				}
  +				code += 2;
  +				break;
  +
  +			case OP_CREF:
  +			case OP_BRANUMBER:
  +				code += 3;
  +				break;
  +
  +			case OP_WORD_BOUNDARY:
  +			case OP_NOT_WORD_BOUNDARY:
  +				code++;
  +				break;
  +
  +			case OP_ASSERT_NOT:
  +			case OP_ASSERTBACK:
  +			case OP_ASSERTBACK_NOT:
  +				do
  +					code += (code[1] << 8) + code[2];
  +				while (*code == OP_ALT);
  +				code += 3;
  +				break;
  +
  +			default:
  +				return code;
  +		}
  +	}
   }
  -
  -/*************************************************
  -*          Check for anchored expression         *
  -*************************************************/
  -
  -/* Try to find out if this is an anchored regular expression. Consider each
  -alternative branch. If they all start with OP_SOD or OP_CIRC, or with a bracket
  -all of whose alternatives start with OP_SOD or OP_CIRC (recurse ad lib), then
  -it's anchored. However, if this is a multiline pattern, then only OP_SOD
  -counts, since OP_CIRC can match in the middle.
  -
  -A branch is also implicitly anchored if it starts with .* and DOTALL is set,
  -because that will try the rest of the pattern at all possible matching points,
  -so there is no point trying them again.
  -
  -Arguments:
  -  code       points to start of expression (the bracket)
  -  options    points to the options setting
   
  -Returns:     TRUE or FALSE
  -*/
  -
  -static BOOL
  -is_anchored(register const uschar *code, int *options)
  +static BOOL is_anchored(register const uschar * code, int *options)
   {
  -do {
  -   const uschar *scode = first_significant_code(code + 3, options,
  -     PCRE_MULTILINE, FALSE);
  -   register int op = *scode;
  -   if (op >= OP_BRA || op == OP_ASSERT || op == OP_ONCE || op == OP_COND)
  -     { if (!is_anchored(scode, options)) return FALSE; }
  -   else if ((op == OP_TYPESTAR || op == OP_TYPEMINSTAR) &&
  -            (*options & PCRE_DOTALL) != 0)
  -     { if (scode[1] != OP_ANY) return FALSE; }
  -   else if (op != OP_SOD &&
  -           ((*options & PCRE_MULTILINE) != 0 || op != OP_CIRC))
  -     return FALSE;
  -   code += (code[1] << 8) + code[2];
  -   }
  -while (*code == OP_ALT);
  -return TRUE;
  +	do {
  +		const uschar *scode = first_significant_code(code + 3, options,
  +													 PCRE_MULTILINE, FALSE);
  +		register int op = *scode;
  +		if (op >= OP_BRA || op == OP_ASSERT || op == OP_ONCE || op == OP_COND) {
  +			if (!is_anchored(scode, options))
  +				return FALSE;
  +		}
  +		else if ((op == OP_TYPESTAR || op == OP_TYPEMINSTAR) &&
  +				 (*options & PCRE_DOTALL) != 0) {
  +			if (scode[1] != OP_ANY)
  +				return FALSE;
  +		}
  +		else if (op != OP_SOD &&
  +				 ((*options & PCRE_MULTILINE) != 0 || op != OP_CIRC))
  +				return FALSE;
  +		code += (code[1] << 8) + code[2];
  +	}
  +	while (*code == OP_ALT);
  +	return TRUE;
   }
   
  -/*************************************************
  -*         Check for starting with ^ or .*        *
  -*************************************************/
  -
  -/* This is called to find out if every branch starts with ^ or .* so that
  -"first char" processing can be done to speed things up in multiline
  -matching and for non-DOTALL patterns that start with .* (which must start at
  -the beginning or after \n).
  -
  -Argument:  points to start of expression (the bracket)
  -Returns:   TRUE or FALSE
  -*/
  -
  -static BOOL
  -is_startline(const uschar *code)
  +static BOOL is_startline(const uschar * code)
   {
  -do {
  -   const uschar *scode = first_significant_code(code + 3, NULL, 0, FALSE);
  -   register int op = *scode;
  -   if (op >= OP_BRA || op == OP_ASSERT || op == OP_ONCE || op == OP_COND)
  -     { if (!is_startline(scode)) return FALSE; }
  -   else if (op == OP_TYPESTAR || op == OP_TYPEMINSTAR)
  -     { if (scode[1] != OP_ANY) return FALSE; }
  -   else if (op != OP_CIRC) return FALSE;
  -   code += (code[1] << 8) + code[2];
  -   }
  -while (*code == OP_ALT);
  -return TRUE;
  +	do {
  +		const uschar *scode =
  +			first_significant_code(code + 3, NULL, 0, FALSE);
  +		register int op = *scode;
  +		if (op >= OP_BRA || op == OP_ASSERT || op == OP_ONCE || op == OP_COND) {
  +			if (!is_startline(scode))
  +				return FALSE;
  +		}
  +		else if (op == OP_TYPESTAR || op == OP_TYPEMINSTAR) {
  +			if (scode[1] != OP_ANY)
  +				return FALSE;
  +		}
  +		else if (op != OP_CIRC)
  +			return FALSE;
  +		code += (code[1] << 8) + code[2];
  +	}
  +	while (*code == OP_ALT);
  +	return TRUE;
   }
  -
  -/*************************************************
  -*          Check for fixed first char            *
  -*************************************************/
  -
  -/* Try to find out if there is a fixed first character. This is called for
  -unanchored expressions, as it speeds up their processing quite considerably.
  -Consider each alternative branch. If they all start with the same char, or with
  -a bracket all of whose alternatives start with the same char (recurse ad lib),
  -then we return that char, otherwise -1.
  -
  -Arguments:
  -  code       points to start of expression (the bracket)
  -  options    pointer to the options (used to check casing changes)
  -
  -Returns:     -1 or the fixed first char
  -*/
   
  -static int
  -find_firstchar(const uschar *code, int *options)
  +static int find_firstchar(const uschar * code, int *options)
   {
  -register int c = -1;
  -do {
  -   int d;
  -   const uschar *scode = first_significant_code(code + 3, options,
  -     PCRE_CASELESS, TRUE);
  -   register int op = *scode;
  -
  -   if (op >= OP_BRA) op = OP_BRA;
  -
  -   switch(op)
  -     {
  -     default:
  -     return -1;
  -
  -     case OP_BRA:
  -     case OP_ASSERT:
  -     case OP_ONCE:
  -     case OP_COND:
  -     if ((d = find_firstchar(scode, options)) < 0) return -1;
  -     if (c < 0) c = d; else if (c != d) return -1;
  -     break;
  -
  -     case OP_EXACT:       /* Fall through */
  -     scode++;
  -
  -     case OP_CHARS:       /* Fall through */
  -     scode++;
  -
  -     case OP_PLUS:
  -     case OP_MINPLUS:
  -     if (c < 0) c = scode[1]; else if (c != scode[1]) return -1;
  -     break;
  -     }
  -
  -   code += (code[1] << 8) + code[2];
  -   }
  -while (*code == OP_ALT);
  -return c;
  +	register int c = -1;
  +	do {
  +		int d;
  +		const uschar *scode = first_significant_code(code + 3, options,
  +													 PCRE_CASELESS, TRUE);
  +		register int op = *scode;
  +
  +		if (op >= OP_BRA)
  +			op = OP_BRA;
  +
  +		switch (op) {
  +			default:
  +				return -1;
  +
  +			case OP_BRA:
  +			case OP_ASSERT:
  +			case OP_ONCE:
  +			case OP_COND:
  +				if ((d = find_firstchar(scode, options)) < 0)
  +					return -1;
  +				if (c < 0)
  +					c = d;
  +				else if (c != d)
  +					return -1;
  +				break;
  +
  +			case OP_EXACT:
  +				scode++;
  +
  +			case OP_CHARS:
  +				scode++;
  +
  +			case OP_PLUS:
  +			case OP_MINPLUS:
  +				if (c < 0)
  +					c = scode[1];
  +				else if (c != scode[1])
  +					return -1;
  +				break;
  +		}
  +
  +		code += (code[1] << 8) + code[2];
  +	}
  +	while (*code == OP_ALT);
  +	return c;
   }
   
  -/*************************************************
  -*        Compile a Regular Expression            *
  -*************************************************/
  -
  -/* This function takes a string and returns a pointer to a block of store
  -holding a compiled version of the expression.
  -
  -Arguments:
  -  pattern      the regular expression
  -  options      various option bits
  -  errorptr     pointer to pointer to error text
  -  erroroffset  ptr offset in pattern where error was detected
  -  tables       pointer to character tables or NULL
  -
  -Returns:       pointer to compiled data block, or NULL on error,
  -               with errorptr and erroroffset set
  -*/
  -
  -pcre *
  -pcre_compile(const char *pattern, int options, const char **errorptr,
  -  int *erroroffset, const unsigned char *tables)
  +pcre *pcre_compile(const char *pattern, int options, const char **errorptr,
  +				   int *erroroffset, const unsigned char *tables)
   {
  -real_pcre *re;
  -int length = 3;      /* For initial BRA plus length */
  -int runlength;
  -int c, reqchar, countlits;
  -int bracount = 0;
  -int top_backref = 0;
  -int branch_extra = 0;
  -int branch_newextra;
  -unsigned int brastackptr = 0;
  -size_t size;
  -uschar *code;
  -const uschar *ptr;
  -compile_data compile_block;
  -int brastack[BRASTACK_SIZE];
  -uschar bralenstack[BRASTACK_SIZE];
  -
  -/* Can't support UTF8 unless PCRE has been compiled to include the code. */
  +	real_pcre *re;
  +	int length = 3;
  +	int runlength;
  +	int c, reqchar, countlits;
  +	int bracount = 0;
  +	int top_backref = 0;
  +	int branch_extra = 0;
  +	int branch_newextra;
  +	unsigned int brastackptr = 0;
  +	size_t size;
  +	uschar *code;
  +	const uschar *ptr;
  +	compile_data compile_block;
  +	int brastack[BRASTACK_SIZE];
  +	uschar bralenstack[BRASTACK_SIZE];
   
   #ifndef L2_UT_PCRE_SUPPORT_UTF8
  -if ((options & PCRE_UTF8) != 0)
  -  {
  -  *errorptr = ERR32;
  -  return NULL;
  -  }
  +	if ((options & PCRE_UTF8) != 0) {
  +		*errorptr = ERR32;
  +		return NULL;
  +	}
   #endif
  -
  -/* We can't pass back an error message if errorptr is NULL; I guess the best we
  -can do is just return NULL. */
  -
  -if (errorptr == NULL) return NULL;
  -*errorptr = NULL;
   
  -/* However, we can give a message for this error */
  +	if (errorptr == NULL)
  +		return NULL;
  +	*errorptr = NULL;
  +
  +	if (erroroffset == NULL) {
  +		*errorptr = ERR16;
  +		return NULL;
  +	}
  +	*erroroffset = 0;
  +
  +	if ((options & ~PUBLIC_OPTIONS) != 0) {
  +		*errorptr = ERR17;
  +		return NULL;
  +	}
  +
  +	if (tables == NULL)
  +		tables = pcre_default_tables;
  +	compile_block.lcc = tables + lcc_offset;
  +	compile_block.fcc = tables + fcc_offset;
  +	compile_block.cbits = tables + cbits_offset;
  +	compile_block.ctypes = tables + ctypes_offset;
  +
  +	ptr = (const uschar *)(pattern - 1);
  +	while ((c = *(++ptr)) != 0) {
  +		int min, max;
  +		int class_charcount;
  +		int bracket_length;
  +
  +		if ((options & PCRE_EXTENDED) != 0) {
  +			if ((compile_block.ctypes[c] & ctype_space) != 0)
  +				continue;
  +			if (c == '#') {
  +				while ((c = *(++ptr)) != 0 && c != '\n') ;
  +				continue;
  +			}
  +		}
  +
  +		switch (c) {
  +			case '\\':
  +				{
  +					const uschar *save_ptr = ptr;
  +					c =
  +						check_escape(&ptr, errorptr, bracount, options, FALSE,
  +									 &compile_block);
  +					if (*errorptr != NULL)
  +						goto PCRE_ERROR_RETURN;
  +					if (c >= 0) {
  +						ptr = save_ptr;
  +						c = '\\';
  +						goto NORMAL_CHAR;
  +					}
  +				}
  +				length++;
  +
  +				if (c <= -ESC_REF) {
  +					int refnum = -c - ESC_REF;
  +					if (refnum > top_backref)
  +						top_backref = refnum;
  +					length += 2;
  +					if (ptr[1] == '{'
  +						&& is_counted_repeat(ptr + 2, &compile_block)) {
  +						ptr =
  +							read_repeat_counts(ptr + 2, &min, &max, errorptr,
  +											   &compile_block);
  +						if (*errorptr != NULL)
  +							goto PCRE_ERROR_RETURN;
  +						if ((min == 0 && (max == 1 || max == -1)) ||
  +							(min == 1 && max == -1))
  +							length++;
  +						else
  +							length += 5;
  +						if (ptr[1] == '?')
  +							ptr++;
  +					}
  +				}
  +				continue;
  +
  +			case '^':
  +			case '.':
  +			case '$':
  +			case '*':
  +			case '+':
  +			case '?':
  +				length++;
  +				continue;
  +
  +			case '{':
  +				if (!is_counted_repeat(ptr + 1, &compile_block))
  +					goto NORMAL_CHAR;
  +				ptr =
  +					read_repeat_counts(ptr + 1, &min, &max, errorptr,
  +									   &compile_block);
  +				if (*errorptr != NULL)
  +					goto PCRE_ERROR_RETURN;
  +				if ((min == 0 && (max == 1 || max == -1)) ||
  +					(min == 1 && max == -1))
  +					length++;
  +				else {
  +					length--;
  +					if (min == 1)
  +						length++;
  +					else if (min > 0)
  +						length += 4;
  +					if (max > 0)
  +						length += 4;
  +					else
  +						length += 2;
  +				}
  +				if (ptr[1] == '?')
  +					ptr++;
  +				continue;
  +
  +			case '|':
  +				length += 3 + branch_extra;
  +				continue;
  +
  +			case '[':
  +				class_charcount = 0;
  +				if (*(++ptr) == '^')
  +					ptr++;
  +				do {
  +					if (*ptr == '\\') {
  +						int ch =
  +							check_escape(&ptr, errorptr, bracount, options,
  +										 TRUE,
  +										 &compile_block);
  +						if (*errorptr != NULL)
  +							goto PCRE_ERROR_RETURN;
  +						if (-ch == ESC_b)
  +							class_charcount++;
  +						else
  +							class_charcount = 10;
  +					}
  +					else
  +						class_charcount++;
  +					ptr++;
  +				}
  +				while (*ptr != 0 && *ptr != ']');
  +
  +				if (class_charcount == 1)
  +					length += 3;
  +				else {
  +					length += 33;
  +
  +					if (*ptr != 0 && ptr[1] == '{'
  +						&& is_counted_repeat(ptr + 2, &compile_block)) {
  +						ptr =
  +							read_repeat_counts(ptr + 2, &min, &max, errorptr,
  +											   &compile_block);
  +						if (*errorptr != NULL)
  +							goto PCRE_ERROR_RETURN;
  +						if ((min == 0 && (max == 1 || max == -1)) ||
  +							(min == 1 && max == -1))
  +							length++;
  +						else
  +							length += 5;
  +						if (ptr[1] == '?')
  +							ptr++;
  +					}
  +				}
  +				continue;
  +
  +			case '(':
  +				branch_newextra = 0;
  +				bracket_length = 3;
  +
  +				if (ptr[1] == '?') {
  +					int set, unset;
  +					int *optset;
  +
  +					switch (c = ptr[2]) {
  +						case '#':
  +							ptr += 3;
  +							while (*ptr != 0 && *ptr != ')')
  +								ptr++;
  +							if (*ptr == 0) {
  +								*errorptr = ERR18;
  +								goto PCRE_ERROR_RETURN;
  +							}
  +							continue;
  +
  +						case ':':
  +						case '=':
  +						case '!':
  +						case '>':
  +							ptr += 2;
  +							break;
  +
  +						case 'R':
  +							if (ptr[3] != ')') {
  +								*errorptr = ERR29;
  +								goto PCRE_ERROR_RETURN;
  +							}
  +							ptr += 3;
  +							length += 1;
  +							break;
  +
  +						case '<':
  +							if (ptr[3] == '=' || ptr[3] == '!') {
  +								ptr += 3;
  +								branch_newextra = 3;
  +								length += 3;
  +								break;
  +							}
  +							*errorptr = ERR24;
  +							goto PCRE_ERROR_RETURN;
  +
  +						case '(':
  +							if ((compile_block.ctypes[ptr[3]] & ctype_digit)
  +								!= 0) {
  +								ptr += 4;
  +								length += 3;
  +								while (
  +									   (compile_block.
  +										ctypes[*ptr] & ctype_digit) != 0)
  +									ptr++;
  +								if (*ptr != ')') {
  +									*errorptr = ERR26;
  +									goto PCRE_ERROR_RETURN;
  +								}
  +							}
  +							else {
  +								ptr++;
  +								if (ptr[2] != '?' ||
  +									(ptr[3] != '=' && ptr[3] != '!'
  +									 && ptr[3] != '<')) {
  +									ptr += 2;
  +									*errorptr = ERR28;
  +									goto PCRE_ERROR_RETURN;
  +								}
  +							}
  +							break;
  +
  +						default:
  +							set = unset = 0;
  +							optset = &set;
  +							ptr += 2;
  +
  +							for (;; ptr++) {
  +								c = *ptr;
  +								switch (c) {
  +									case 'i':
  +										*optset |= PCRE_CASELESS;
  +										continue;
  +
  +									case 'm':
  +										*optset |= PCRE_MULTILINE;
  +										continue;
  +
  +									case 's':
  +										*optset |= PCRE_DOTALL;
  +										continue;
  +
  +									case 'x':
  +										*optset |= PCRE_EXTENDED;
  +										continue;
  +
  +									case 'X':
  +										*optset |= PCRE_EXTRA;
  +										continue;
  +
  +									case 'U':
  +										*optset |= PCRE_UNGREEDY;
  +										continue;
  +
  +									case '-':
  +										optset = &unset;
  +										continue;
  +
  +									case ')':
  +										if (brastackptr == 0) {
  +											options =
  +												(options | set) & (~unset);
  +											set = unset = 0;
  +										}
  +
  +									case ':':
  +										if (((set | unset) & PCRE_IMS) != 0) {
  +											length += 4;
  +											branch_newextra = 2;
  +											if (
  +												((set | unset) &
  +												 PCRE_CASELESS) != 0)
  +												options |= PCRE_ICHANGED;
  +										}
  +										goto END_OPTIONS;
  +
  +									default:
  +										*errorptr = ERR12;
  +										goto PCRE_ERROR_RETURN;
  +								}
  +							}
  +
  +						  END_OPTIONS:
  +							if (c == ')') {
  +								if (branch_newextra == 2
  +									&& (branch_extra == 0
  +										|| branch_extra == 3)) branch_extra +=
  +										branch_newextra;
  +								continue;
  +							}
  +
  +					}
  +				}
  +
  +				else {
  +					bracount++;
  +					if (bracount > EXTRACT_BASIC_MAX)
  +						bracket_length += 3;
  +				}
  +
  +				if (brastackptr >= sizeof (brastack) / sizeof (int)) {
  +					*errorptr = ERR19;
  +					goto PCRE_ERROR_RETURN;
  +				}
  +
  +				bralenstack[brastackptr] = branch_extra;
  +				branch_extra = branch_newextra;
  +
  +				brastack[brastackptr++] = length;
  +				length += bracket_length;
  +				continue;
  +
  +			case ')':
  +				length += 3;
  +				{
  +					int minval = 1;
  +					int maxval = 1;
  +					int duplength;
  +
  +					if (brastackptr > 0) {
  +						duplength = length - brastack[--brastackptr];
  +						branch_extra = bralenstack[brastackptr];
  +					}
  +					else
  +						duplength = 0;
  +
  +					if ((c = ptr[1]) == '{'
  +						&& is_counted_repeat(ptr + 2, &compile_block)) {
  +						ptr =
  +							read_repeat_counts(ptr + 2, &minval, &maxval,
  +											   errorptr, &compile_block);
  +						if (*errorptr != NULL)
  +							goto PCRE_ERROR_RETURN;
  +					}
  +					else if (c == '*') {
  +						minval = 0;
  +						maxval = -1;
  +						ptr++;
  +					}
  +					else if (c == '+') {
  +						maxval = -1;
  +						ptr++;
  +					}
  +					else if (c == '?') {
  +						minval = 0;
  +						ptr++;
  +					}
  +
  +					if (minval == 0) {
  +						length++;
  +						if (maxval > 0)
  +							length += (maxval - 1) * (duplength + 7);
  +					}
  +
  +					else {
  +						length += (minval - 1) * duplength;
  +						if (maxval > minval)
  +							length += (maxval - minval) * (duplength + 7) - 6;
  +					}
  +				}
  +				continue;
  +
  +			  NORMAL_CHAR:
  +			default:
  +				length += 2;
  +				runlength = 0;
  +				do {
  +					if ((options & PCRE_EXTENDED) != 0) {
  +						if ((compile_block.ctypes[c] & ctype_space) != 0)
  +							continue;
  +						if (c == '#') {
  +							while ((c = *(++ptr)) != 0 && c != '\n') ;
  +							continue;
  +						}
  +					}
  +
  +					if (c == '\\') {
  +						const uschar *saveptr = ptr;
  +						c =
  +							check_escape(&ptr, errorptr, bracount, options,
  +										 FALSE, &compile_block);
  +						if (*errorptr != NULL)
  +							goto PCRE_ERROR_RETURN;
  +						if (c < 0) {
  +							ptr = saveptr;
  +							break;
  +						}
   
  -if (erroroffset == NULL)
  -  {
  -  *errorptr = ERR16;
  -  return NULL;
  -  }
  -*erroroffset = 0;
  -
  -if ((options & ~PUBLIC_OPTIONS) != 0)
  -  {
  -  *errorptr = ERR17;
  -  return NULL;
  -  }
  -
  -/* Set up pointers to the individual character tables */
  -
  -if (tables == NULL) tables = pcre_default_tables;
  -compile_block.lcc = tables + lcc_offset;
  -compile_block.fcc = tables + fcc_offset;
  -compile_block.cbits = tables + cbits_offset;
  -compile_block.ctypes = tables + ctypes_offset;
  -
  -/* Reflect pattern for debugging output */
  -
  -/* The first thing to do is to make a pass over the pattern to compute the
  -amount of store required to hold the compiled code. This does not have to be
  -perfect as long as errors are overestimates. At the same time we can detect any
  -internal flag settings. Make an attempt to correct for any counted white space
  -if an "extended" flag setting appears late in the pattern. We can't be so
  -clever for #-comments. */
  -
  -ptr = (const uschar *)(pattern - 1);
  -while ((c = *(++ptr)) != 0)
  -  {
  -  int min, max;
  -  int class_charcount;
  -  int bracket_length;
  -
  -  if ((options & PCRE_EXTENDED) != 0)
  -    {
  -    if ((compile_block.ctypes[c] & ctype_space) != 0) continue;
  -    if (c == '#')
  -      {
  -      /* The space before the ; is to avoid a warning on a silly compiler
  -      on the Macintosh. */
  -      while ((c = *(++ptr)) != 0 && c != '\n') ;
  -      continue;
  -      }
  -    }
  -
  -  switch(c)
  -    {
  -    /* A backslashed item may be an escaped "normal" character or a
  -    character type. For a "normal" character, put the pointers and
  -    character back so that tests for whitespace etc. in the input
  -    are done correctly. */
  -
  -    case '\\':
  -      {
  -      const uschar *save_ptr = ptr;
  -      c = check_escape(&ptr, errorptr, bracount, options, FALSE, &compile_block);
  -      if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
  -      if (c >= 0)
  -        {
  -        ptr = save_ptr;
  -        c = '\\';
  -        goto NORMAL_CHAR;
  -        }
  -      }
  -    length++;
  -
  -    /* A back reference needs an additional 2 bytes, plus either one or 5
  -    bytes for a repeat. We also need to keep the value of the highest
  -    back reference. */
  -
  -    if (c <= -ESC_REF)
  -      {
  -      int refnum = -c - ESC_REF;
  -      if (refnum > top_backref) top_backref = refnum;
  -      length += 2;   /* For single back reference */
  -      if (ptr[1] == '{' && is_counted_repeat(ptr+2, &compile_block))
  -        {
  -        ptr = read_repeat_counts(ptr+2, &min, &max, errorptr, &compile_block);
  -        if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
  -        if ((min == 0 && (max == 1 || max == -1)) ||
  -          (min == 1 && max == -1))
  -            length++;
  -        else length += 5;
  -        if (ptr[1] == '?') ptr++;
  -        }
  -      }
  -    continue;
  -
  -    case '^':
  -    case '.':
  -    case '$':
  -    case '*':     /* These repeats won't be after brackets; */
  -    case '+':     /* those are handled separately */
  -    case '?':
  -    length++;
  -    continue;
  -
  -    /* This covers the cases of repeats after a single char, metachar, class,
  -    or back reference. */
  -
  -    case '{':
  -    if (!is_counted_repeat(ptr+1, &compile_block)) goto NORMAL_CHAR;
  -    ptr = read_repeat_counts(ptr+1, &min, &max, errorptr, &compile_block);
  -    if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
  -    if ((min == 0 && (max == 1 || max == -1)) ||
  -      (min == 1 && max == -1))
  -        length++;
  -    else
  -      {
  -      length--;   /* Uncount the original char or metachar */
  -      if (min == 1) length++; else if (min > 0) length += 4;
  -      if (max > 0) length += 4; else length += 2;
  -      }
  -    if (ptr[1] == '?') ptr++;
  -    continue;
  -
  -    /* An alternation contains an offset to the next branch or ket. If any ims
  -    options changed in the previous branch(es), and/or if we are in a
  -    lookbehind assertion, extra space will be needed at the start of the
  -    branch. This is handled by branch_extra. */
  -
  -    case '|':
  -    length += 3 + branch_extra;
  -    continue;
  -
  -    /* A character class uses 33 characters. Don't worry about character types
  -    that aren't allowed in classes - they'll get picked up during the compile.
  -    A character class that contains only one character uses 2 or 3 bytes,
  -    depending on whether it is negated or not. Notice this where we can. */
  -
  -    case '[':
  -    class_charcount = 0;
  -    if (*(++ptr) == '^') ptr++;
  -    do
  -      {
  -      if (*ptr == '\\')
  -        {
  -        int ch = check_escape(&ptr, errorptr, bracount, options, TRUE,
  -          &compile_block);
  -        if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
  -        if (-ch == ESC_b) class_charcount++; else class_charcount = 10;
  -        }
  -      else class_charcount++;
  -      ptr++;
  -      }
  -    while (*ptr != 0 && *ptr != ']');
  -
  -    /* Repeats for negated single chars are handled by the general code */
  -
  -    if (class_charcount == 1) length += 3; else
  -      {
  -      length += 33;
  -
  -      /* A repeat needs either 1 or 5 bytes. */
  -
  -      if (*ptr != 0 && ptr[1] == '{' && is_counted_repeat(ptr+2, &compile_block))
  -        {
  -        ptr = read_repeat_counts(ptr+2, &min, &max, errorptr, &compile_block);
  -        if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
  -        if ((min == 0 && (max == 1 || max == -1)) ||
  -          (min == 1 && max == -1))
  -            length++;
  -        else length += 5;
  -        if (ptr[1] == '?') ptr++;
  -        }
  -      }
  -    continue;
  -
  -    /* Brackets may be genuine groups or special things */
  -
  -    case '(':
  -    branch_newextra = 0;
  -    bracket_length = 3;
  -
  -    /* Handle special forms of bracket, which all start (? */
  -
  -    if (ptr[1] == '?')
  -      {
  -      int set, unset;
  -      int *optset;
  -
  -      switch (c = ptr[2])
  -        {
  -        /* Skip over comments entirely */
  -        case '#':
  -        ptr += 3;
  -        while (*ptr != 0 && *ptr != ')') ptr++;
  -        if (*ptr == 0)
  -          {
  -          *errorptr = ERR18;
  -          goto PCRE_ERROR_RETURN;
  -          }
  -        continue;
  -
  -        /* Non-referencing groups and lookaheads just move the pointer on, and
  -        then behave like a non-special bracket, except that they don't increment
  -        the count of extracting brackets. Ditto for the "once only" bracket,
  -        which is in Perl from version 5.005. */
  -
  -        case ':':
  -        case '=':
  -        case '!':
  -        case '>':
  -        ptr += 2;
  -        break;
  -
  -        /* A recursive call to the regex is an extension, to provide the
  -        facility which can be obtained by $(?p{perl-code}) in Perl 5.6. */
  -
  -        case 'R':
  -        if (ptr[3] != ')')
  -          {
  -          *errorptr = ERR29;
  -          goto PCRE_ERROR_RETURN;
  -          }
  -        ptr += 3;
  -        length += 1;
  -        break;
  -
  -        /* Lookbehinds are in Perl from version 5.005 */
  -
  -        case '<':
  -        if (ptr[3] == '=' || ptr[3] == '!')
  -          {
  -          ptr += 3;
  -          branch_newextra = 3;
  -          length += 3;         /* For the first branch */
  -          break;
  -          }
  -        *errorptr = ERR24;
  -        goto PCRE_ERROR_RETURN;
  -
  -        /* Conditionals are in Perl from version 5.005. The bracket must either
  -        be followed by a number (for bracket reference) or by an assertion
  -        group. */
  -
  -        case '(':
  -        if ((compile_block.ctypes[ptr[3]] & ctype_digit) != 0)
  -          {
  -          ptr += 4;
  -          length += 3;
  -          while ((compile_block.ctypes[*ptr] & ctype_digit) != 0) ptr++;
  -          if (*ptr != ')')
  -            {
  -            *errorptr = ERR26;
  -            goto PCRE_ERROR_RETURN;
  -            }
  -          }
  -        else   /* An assertion must follow */
  -          {
  -          ptr++;   /* Can treat like ':' as far as spacing is concerned */
  -          if (ptr[2] != '?' ||
  -             (ptr[3] != '=' && ptr[3] != '!' && ptr[3] != '<') )
  -            {
  -            ptr += 2;    /* To get right offset in message */
  -            *errorptr = ERR28;
  -            goto PCRE_ERROR_RETURN;
  -            }
  -          }
  -        break;
  -
  -        /* Else loop checking valid options until ) is met. Anything else is an
  -        error. If we are without any brackets, i.e. at top level, the settings
  -        act as if specified in the options, so massage the options immediately.
  -        This is for backward compatibility with Perl 5.004. */
  -
  -        default:
  -        set = unset = 0;
  -        optset = &set;
  -        ptr += 2;
  -
  -        for (;; ptr++)
  -          {
  -          c = *ptr;
  -          switch (c)
  -            {
  -            case 'i':
  -            *optset |= PCRE_CASELESS;
  -            continue;
  -
  -            case 'm':
  -            *optset |= PCRE_MULTILINE;
  -            continue;
  -
  -            case 's':
  -            *optset |= PCRE_DOTALL;
  -            continue;
  -
  -            case 'x':
  -            *optset |= PCRE_EXTENDED;
  -            continue;
  -
  -            case 'X':
  -            *optset |= PCRE_EXTRA;
  -            continue;
  -
  -            case 'U':
  -            *optset |= PCRE_UNGREEDY;
  -            continue;
  -
  -            case '-':
  -            optset = &unset;
  -            continue;
  -
  -            /* A termination by ')' indicates an options-setting-only item;
  -            this is global at top level; otherwise nothing is done here and
  -            it is handled during the compiling process on a per-bracket-group
  -            basis. */
  -
  -            case ')':
  -            if (brastackptr == 0)
  -              {
  -              options = (options | set) & (~unset);
  -              set = unset = 0;     /* To save length */
  -              }
  -            /* Fall through */
  -
  -            /* A termination by ':' indicates the start of a nested group with
  -            the given options set. This is again handled at compile time, but
  -            we must allow for compiled space if any of the ims options are
  -            set. We also have to allow for resetting space at the end of
  -            the group, which is why 4 is added to the length and not just 2.
  -            If there are several changes of options within the same group, this
  -            will lead to an over-estimate on the length, but this shouldn't
  -            matter very much. We also have to allow for resetting options at
  -            the start of any alternations, which we do by setting
  -            branch_newextra to 2. Finally, we record whether the case-dependent
  -            flag ever changes within the regex. This is used by the "required
  -            character" code. */
  -
  -            case ':':
  -            if (((set|unset) & PCRE_IMS) != 0)
  -              {
  -              length += 4;
  -              branch_newextra = 2;
  -              if (((set|unset) & PCRE_CASELESS) != 0) options |= PCRE_ICHANGED;
  -              }
  -            goto END_OPTIONS;
  -
  -            /* Unrecognized option character */
  -
  -            default:
  -            *errorptr = ERR12;
  -            goto PCRE_ERROR_RETURN;
  -            }
  -          }
  -
  -        /* If we hit a closing bracket, that's it - this is a freestanding
  -        option-setting. We need to ensure that branch_extra is updated if
  -        necessary. The only values branch_newextra can have here are 0 or 2.
  -        If the value is 2, then branch_extra must either be 2 or 5, depending
  -        on whether this is a lookbehind group or not. */
  -
  -        END_OPTIONS:
  -        if (c == ')')
  -          {
  -          if (branch_newextra == 2 && (branch_extra == 0 || branch_extra == 3))
  -            branch_extra += branch_newextra;
  -          continue;
  -          }
  -
  -        /* If options were terminated by ':' control comes here. Fall through
  -        to handle the group below. */
  -        }
  -      }
  -
  -    /* Extracting brackets must be counted so we can process escapes in a
  -    Perlish way. If the number exceeds EXTRACT_BASIC_MAX we are going to
  -    need an additional 3 bytes of store per extracting bracket. */
  -
  -    else
  -      {
  -      bracount++;
  -      if (bracount > EXTRACT_BASIC_MAX) bracket_length += 3;
  -      }
  -
  -    /* Save length for computing whole length at end if there's a repeat that
  -    requires duplication of the group. Also save the current value of
  -    branch_extra, and start the new group with the new value. If non-zero, this
  -    will either be 2 for a (?imsx: group, or 3 for a lookbehind assertion. */
  -
  -    if (brastackptr >= sizeof(brastack)/sizeof(int))
  -      {
  -      *errorptr = ERR19;
  -      goto PCRE_ERROR_RETURN;
  -      }
  -
  -    bralenstack[brastackptr] = branch_extra;
  -    branch_extra = branch_newextra;
  -
  -    brastack[brastackptr++] = length;
  -    length += bracket_length;
  -    continue;
  -
  -    /* Handle ket. Look for subsequent max/min; for certain sets of values we
  -    have to replicate this bracket up to that many times. If brastackptr is
  -    0 this is an unmatched bracket which will generate an error, but take care
  -    not to try to access brastack[-1] when computing the length and restoring
  -    the branch_extra value. */
  -
  -    case ')':
  -    length += 3;
  -      {
  -      int minval = 1;
  -      int maxval = 1;
  -      int duplength;
  -
  -      if (brastackptr > 0)
  -        {
  -        duplength = length - brastack[--brastackptr];
  -        branch_extra = bralenstack[brastackptr];
  -        }
  -      else duplength = 0;
  -
  -      /* Leave ptr at the final char; for read_repeat_counts this happens
  -      automatically; for the others we need an increment. */
  -
  -      if ((c = ptr[1]) == '{' && is_counted_repeat(ptr+2, &compile_block))
  -        {
  -        ptr = read_repeat_counts(ptr+2, &minval, &maxval, errorptr,
  -          &compile_block);
  -        if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
  -        }
  -      else if (c == '*') { minval = 0; maxval = -1; ptr++; }
  -      else if (c == '+') { maxval = -1; ptr++; }
  -      else if (c == '?') { minval = 0; ptr++; }
  -
  -      /* If the minimum is zero, we have to allow for an OP_BRAZERO before the
  -      group, and if the maximum is greater than zero, we have to replicate
  -      maxval-1 times; each replication acquires an OP_BRAZERO plus a nesting
  -      bracket set - hence the 7. */
  -
  -      if (minval == 0)
  -        {
  -        length++;
  -        if (maxval > 0) length += (maxval - 1) * (duplength + 7);
  -        }
  -
  -      /* When the minimum is greater than zero, 1 we have to replicate up to
  -      minval-1 times, with no additions required in the copies. Then, if
  -      there is a limited maximum we have to replicate up to maxval-1 times
  -      allowing for a BRAZERO item before each optional copy and nesting
  -      brackets for all but one of the optional copies. */
  -
  -      else
  -        {
  -        length += (minval - 1) * duplength;
  -        if (maxval > minval)   /* Need this test as maxval=-1 means no limit */
  -          length += (maxval - minval) * (duplength + 7) - 6;
  -        }
  -      }
  -    continue;
  -
  -    /* Non-special character. For a run of such characters the length required
  -    is the number of characters + 2, except that the maximum run length is 255.
  -    We won't get a skipped space or a non-data escape or the start of a #
  -    comment as the first character, so the length can't be zero. */
  -
  -    NORMAL_CHAR:
  -    default:
  -    length += 2;
  -    runlength = 0;
  -    do
  -      {
  -      if ((options & PCRE_EXTENDED) != 0)
  -        {
  -        if ((compile_block.ctypes[c] & ctype_space) != 0) continue;
  -        if (c == '#')
  -          {
  -          /* The space before the ; is to avoid a warning on a silly compiler
  -          on the Macintosh. */
  -          while ((c = *(++ptr)) != 0 && c != '\n') ;
  -          continue;
  -          }
  -        }
  -
  -      /* Backslash may introduce a data char or a metacharacter; stop the
  -      string before the latter. */
  -
  -      if (c == '\\')
  -        {
  -        const uschar *saveptr = ptr;
  -        c = check_escape(&ptr, errorptr, bracount, options, FALSE,
  -          &compile_block);
  -        if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
  -        if (c < 0) { ptr = saveptr; break; }
  -
   #ifdef L2_UT_PCRE_SUPPORT_UTF8
  -        if (c > 127 && (options & PCRE_UTF8) != 0)
  -          {
  -          int i;
  -          for (i = 0; i < sizeof(utf8_table1)/sizeof(int); i++)
  -            if (c <= utf8_table1[i]) break;
  -          runlength += i;
  -          }
  +						if (c > 127 && (options & PCRE_UTF8) != 0) {
  +							int i;
  +							for (i = 0;
  +								 i < sizeof (utf8_table1) / sizeof (int); i++)
  +								if (c <= utf8_table1[i])
  +									break;
  +							runlength += i;
  +						}
   #endif
  -        }
  -
  -      /* Ordinary character or single-char escape */
  +					}
   
  -      runlength++;
  -      }
  -
  -    /* This "while" is the end of the "do" above. */
  -
  -    while (runlength < MAXLIT &&
  -      (compile_block.ctypes[c = *(++ptr)] & ctype_meta) == 0);
  -
  -    ptr--;
  -    length += runlength;
  -    continue;
  -    }
  -  }
  +					runlength++;
  +				}
   
  -length += 4;    /* For final KET and END */
  +				while (runlength < MAXLIT &&
  +					   (compile_block.ctypes[c = *(++ptr)] & ctype_meta) ==
  +					   0);
  +
  +				ptr--;
  +				length += runlength;
  +				continue;
  +		}
  +	}
  +
  +	length += 4;
  +
  +	if (length > 65539) {
  +		*errorptr = ERR20;
  +		return NULL;
  +	}
  +
  +	size = length + offsetof(real_pcre, code[0]);
  +	re = (real_pcre *) (pcre_malloc) (size);
  +
  +	if (re == NULL) {
  +		*errorptr = ERR21;
  +		return NULL;
  +	}
  +
  +	re->magic_number = MAGIC_NUMBER;
  +	re->size = size;
  +	re->options = options;
  +	re->tables = tables;
  +
  +	ptr = (const uschar *)pattern;
  +	code = re->code;
  +	*code = OP_BRA;
  +	bracount = 0;
  +	(void)compile_regex(options, -1, &bracount, &code, &ptr, errorptr, FALSE, 0,
  +						&reqchar, &countlits, &compile_block);
  +	re->top_bracket = bracount;
  +	re->top_backref = top_backref;
  +
  +	if (*errorptr == NULL && *ptr != 0)
  +		*errorptr = ERR22;
  +
  +	*code++ = OP_END;
  +	if (code - re->code > length)
  +		*errorptr = ERR23;
  +
  +	if (top_backref > re->top_bracket)
  +		*errorptr = ERR15;
  +
  +	if (*errorptr != NULL) {
  +		(pcre_free) (re);
  +	  PCRE_ERROR_RETURN:
  +		*erroroffset = ptr - (const uschar *)pattern;
  +		return NULL;
  +	}
  +
  +	if ((options & PCRE_ANCHORED) == 0) {
  +		int temp_options = options;
  +		if (is_anchored(re->code, &temp_options))
  +			re->options |= PCRE_ANCHORED;
  +		else {
  +			int ch = find_firstchar(re->code, &temp_options);
  +			if (ch >= 0) {
  +				re->first_char = ch;
  +				re->options |= PCRE_FIRSTSET;
  +			}
  +			else if (is_startline(re->code))
  +				re->options |= PCRE_STARTLINE;
  +		}
  +	}
  +
  +	if (reqchar >= 0 && (countlits > 1 || (re->options & PCRE_FIRSTSET) == 0)) {
  +		re->req_char = reqchar;
  +		re->options |= PCRE_REQCHSET;
  +	}
   
  -if (length > 65539)
  -  {
  -  *errorptr = ERR20;
  -  return NULL;
  -  }
  -
  -/* Compute the size of data block needed and get it, either from malloc or
  -externally provided function. We specify "code[0]" in the offsetof() expression
  -rather than just "code", because it has been reported that one broken compiler
  -fails on "code" because it is also an independent variable. It should make no
  -difference to the value of the offsetof(). */
  -
  -size = length + offsetof(real_pcre, code[0]);
  -re = (real_pcre *)(pcre_malloc)(size);
  -
  -if (re == NULL)
  -  {
  -  *errorptr = ERR21;
  -  return NULL;
  -  }
  -
  -/* Put in the magic number, and save the size, options, and table pointer */
  -
  -re->magic_number = MAGIC_NUMBER;
  -re->size = size;
  -re->options = options;
  -re->tables = tables;
  -
  -/* Set up a starting, non-extracting bracket, then compile the expression. On
  -error, *errorptr will be set non-NULL, so we don't need to look at the result
  -of the function here. */
  -
  -ptr = (const uschar *)pattern;
  -code = re->code;
  -*code = OP_BRA;
  -bracount = 0;
  -(void)compile_regex(options, -1, &bracount, &code, &ptr, errorptr, FALSE, 0,
  -  &reqchar, &countlits, &compile_block);
  -re->top_bracket = bracount;
  -re->top_backref = top_backref;
  -
  -/* If not reached end of pattern on success, there's an excess bracket. */
  -
  -if (*errorptr == NULL && *ptr != 0) *errorptr = ERR22;
  -
  -/* Fill in the terminating state and check for disastrous overflow, but
  -if debugging, leave the test till after things are printed out. */
  -
  -*code++ = OP_END;
  -if (code - re->code > length) *errorptr = ERR23;
  -
  -/* Give an error if there's back reference to a non-existent capturing
  -subpattern. */
  -
  -if (top_backref > re->top_bracket) *errorptr = ERR15;
  -
  -/* Failed to compile */
  -
  -if (*errorptr != NULL)
  -  {
  -  (pcre_free)(re);
  -  PCRE_ERROR_RETURN:
  -  *erroroffset = ptr - (const uschar *)pattern;
  -  return NULL;
  -  }
  -
  -/* If the anchored option was not passed, set flag if we can determine that the
  -pattern is anchored by virtue of ^ characters or \A or anything else (such as
  -starting with .* when DOTALL is set).
  -
  -Otherwise, see if we can determine what the first character has to be, because
  -that speeds up unanchored matches no end. If not, see if we can set the
  -PCRE_STARTLINE flag. This is helpful for multiline matches when all branches
  -start with ^. and also when all branches start with .* for non-DOTALL matches.
  -*/
  -
  -if ((options & PCRE_ANCHORED) == 0)
  -  {
  -  int temp_options = options;
  -  if (is_anchored(re->code, &temp_options))
  -    re->options |= PCRE_ANCHORED;
  -  else
  -    {
  -    int ch = find_firstchar(re->code, &temp_options);
  -    if (ch >= 0)
  -      {
  -      re->first_char = ch;
  -      re->options |= PCRE_FIRSTSET;
  -      }
  -    else if (is_startline(re->code))
  -      re->options |= PCRE_STARTLINE;
  -    }
  -  }
  -
  -/* Save the last required character if there are at least two literal
  -characters on all paths, or if there is no first character setting. */
  -
  -if (reqchar >= 0 && (countlits > 1 || (re->options & PCRE_FIRSTSET) == 0))
  -  {
  -  re->req_char = reqchar;
  -  re->options |= PCRE_REQCHSET;
  -  }
  -
  -/* Print out the compiled data for debugging */
  -
  -return (pcre *)re;
  +	return (pcre *) re;
   }
   
  -/*************************************************
  -*          Match a back-reference                *
  -*************************************************/
  -
  -/* If a back reference hasn't been set, the length that is passed is greater
  -than the number of characters left in the string, so the match fails.
  -
  -Arguments:
  -  offset      index into the offset vector
  -  eptr        points into the subject
  -  length      length to be matched
  -  md          points to match data block
  -  ims         the ims flags
  -
  -Returns:      TRUE if matched
  -*/
  -
   static BOOL
  -match_ref(int offset, register const uschar *eptr, int length, match_data *md,
  -  unsigned long int ims)
  +match_ref(int offset, register const uschar * eptr, int length,
  +		  match_data * md, unsigned long int ims)
   {
  -const uschar *p = md->start_subject + md->offset_vector[offset];
  +	const uschar *p = md->start_subject + md->offset_vector[offset];
   
  -/* Always fail if not enough characters left */
  +	if (length > md->end_subject - eptr)
  +		return FALSE;
   
  -if (length > md->end_subject - eptr) return FALSE;
  +	if ((ims & PCRE_CASELESS) != 0) {
  +		while (length-- > 0)
  +			if (md->lcc[*p++] != md->lcc[*eptr++])
  +				return FALSE;
  +	}
  +	else {
  +		while (length-- > 0)
  +			if (*p++ != *eptr++)
  +				return FALSE;
  +	}
   
  -/* Separate the caselesss case for speed */
  -
  -if ((ims & PCRE_CASELESS) != 0)
  -  {
  -  while (length-- > 0)
  -    if (md->lcc[*p++] != md->lcc[*eptr++]) return FALSE;
  -  }
  -else
  -  { while (length-- > 0) if (*p++ != *eptr++) return FALSE; }
  -
  -return TRUE;
  +	return TRUE;
   }
   
  -/*************************************************
  -*         Match from current position            *
  -*************************************************/
  -
  -/* On entry ecode points to the first opcode, and eptr to the first character
  -in the subject string, while eptrb holds the value of eptr at the start of the
  -last bracketed group - used for breaking infinite loops matching zero-length
  -strings.
  -
  -Arguments:
  -   eptr        pointer in subject
  -   ecode       position in code
  -   offset_top  current top pointer
  -   md          pointer to "static" info for the match
  -   ims         current /i, /m, and /s options
  -   eptrb       pointer to chain of blocks containing eptr at start of
  -                 brackets - for testing for empty matches
  -   flags       can contain
  -                 match_condassert - this is an assertion condition
  -                 match_isgroup - this is the start of a bracketed group
  -
  -Returns:       TRUE if matched
  -*/
  -
   static BOOL
  -match(register const uschar *eptr, register const uschar *ecode,
  -  int offset_top, match_data *md, unsigned long int ims, eptrblock *eptrb,
  -  int flags)
  +match(register const uschar * eptr, register const uschar * ecode,
  +	  int offset_top, match_data * md, unsigned long int ims,
  +	  eptrblock * eptrb, int flags)
   {
  -unsigned long int original_ims = ims;   /* Save for resetting on ')' */
  -eptrblock newptrb;
  +	unsigned long int original_ims = ims;
  +	eptrblock newptrb;
   
  -/* At the start of a bracketed group, add the current subject pointer to the
  -stack of such pointers, to be re-instated at the end of the group when we hit
  -the closing ket. When match() is called in other circumstances, we don't add to
  -the stack. */
  -
  -if ((flags & match_isgroup) != 0)
  -  {
  -  newptrb.prev = eptrb;
  -  newptrb.saved_eptr = eptr;
  -  eptrb = &newptrb;
  -  }
  -
  -/* Now start processing the operations. */
  -
  -for (;;)
  -  {
  -  int op = (int)*ecode;
  -  int min, max, ctype;
  -  register int i;
  -  register int c;
  -  BOOL minimize = FALSE;
  -
  -  /* Opening capturing bracket. If there is space in the offset vector, save
  -  the current subject position in the working slot at the top of the vector. We
  -  mustn't change the current values of the data slot, because they may be set
  -  from a previous iteration of this group, and be referred to by a reference
  -  inside the group.
  -
  -  If the bracket fails to match, we need to restore this value and also the
  -  values of the final offsets, in case they were set by a previous iteration of
  -  the same bracket.
  -
  -  If there isn't enough space in the offset vector, treat this as if it were a
  -  non-capturing bracket. Don't worry about setting the flag for the error case
  -  here; that is handled in the code for KET. */
  -
  -  if (op > OP_BRA)
  -    {
  -    int offset;
  -    int number = op - OP_BRA;
  -
  -    /* For extended extraction brackets (large number), we have to fish out the
  -    number from a dummy opcode at the start. */
  -
  -    if (number > EXTRACT_BASIC_MAX) number = (ecode[4] << 8) | ecode[5];
  -    offset = number << 1;
  -
  -    if (offset < md->offset_max)
  -      {
  -      int save_offset1 = md->offset_vector[offset];
  -      int save_offset2 = md->offset_vector[offset+1];
  -      int save_offset3 = md->offset_vector[md->offset_end - number];
  -
  -      md->offset_vector[md->offset_end - number] = eptr - md->start_subject;
  -
  -      do
  -        {
  -        if (match(eptr, ecode+3, offset_top, md, ims, eptrb, match_isgroup))
  -          return TRUE;
  -        ecode += (ecode[1] << 8) + ecode[2];
  -        }
  -      while (*ecode == OP_ALT);
  -
  -      md->offset_vector[offset] = save_offset1;
  -      md->offset_vector[offset+1] = save_offset2;
  -      md->offset_vector[md->offset_end - number] = save_offset3;
  -
  -      return FALSE;
  -      }
  -
  -    /* Insufficient room for saving captured contents */
  -
  -    else op = OP_BRA;
  -    }
  +	if ((flags & match_isgroup) != 0) {
  +		newptrb.prev = eptrb;
  +		newptrb.saved_eptr = eptr;
  +		eptrb = &newptrb;
  +	}
  +
  +	for (;;) {
  +		int op = (int)*ecode;
  +		int min, max, ctype;
  +		register int i;
  +		register int c;
  +		BOOL minimize = FALSE;
  +
  +		if (op > OP_BRA) {
  +			int offset;
  +			int number = op - OP_BRA;
  +
  +			if (number > EXTRACT_BASIC_MAX)
  +				number = (ecode[4] << 8) | ecode[5];
  +			offset = number << 1;
  +
  +			if (offset < md->offset_max) {
  +				int save_offset1 = md->offset_vector[offset];
  +				int save_offset2 = md->offset_vector[offset + 1];
  +				int save_offset3 = md->offset_vector[md->offset_end - number];
  +
  +				md->offset_vector[md->offset_end - number] =
  +					eptr - md->start_subject;
  +
  +				do {
  +					if (match
  +						(eptr, ecode + 3, offset_top, md, ims, eptrb,
  +						 match_isgroup)) return TRUE;
  +					ecode += (ecode[1] << 8) + ecode[2];
  +				}
  +				while (*ecode == OP_ALT);
  +
  +				md->offset_vector[offset] = save_offset1;
  +				md->offset_vector[offset + 1] = save_offset2;
  +				md->offset_vector[md->offset_end - number] = save_offset3;
  +
  +				return FALSE;
  +			}
  +
  +			else
  +				op = OP_BRA;
  +		}
  +
  +		switch (op) {
  +			case OP_BRA:
  +
  +				do {
  +					if (match
  +						(eptr, ecode + 3, offset_top, md, ims, eptrb,
  +						 match_isgroup)) return TRUE;
  +					ecode += (ecode[1] << 8) + ecode[2];
  +				}
  +				while (*ecode == OP_ALT);
  +
  +				return FALSE;
  +
  +			case OP_COND:
  +				if (ecode[3] == OP_CREF) {
  +					int offset = (ecode[4] << 9) | (ecode[5] << 1);
  +					return match(eptr,
  +								 ecode +
  +								 ((offset
  +								   < offset_top
  +								   && md->offset_vector[offset] >=
  +								   0) ? 6 : 3 + (ecode[1] << 8) + ecode[2]),
  +								 offset_top, md, ims, eptrb, match_isgroup);
  +				}
  +
  +				else {
  +					if (match(eptr, ecode + 3, offset_top, md, ims, NULL,
  +							  match_condassert | match_isgroup)) {
  +						ecode += 3 + (ecode[4] << 8) + ecode[5];
  +						while (*ecode == OP_ALT)
  +							ecode += (ecode[1] << 8) + ecode[2];
  +					}
  +					else
  +						ecode += (ecode[1] << 8) + ecode[2];
  +					return match(eptr, ecode + 3, offset_top, md, ims, eptrb,
  +								 match_isgroup);
  +				}
  +
  +			case OP_CREF:
  +			case OP_BRANUMBER:
  +				ecode += 3;
  +				break;
  +
  +			case OP_END:
  +				if (md->notempty && eptr == md->start_match)
  +					return FALSE;
  +				md->end_match_ptr = eptr;
  +				md->end_offset_top = offset_top;
  +				return TRUE;
  +
  +			case OP_OPT:
  +				ims = ecode[1];
  +				ecode += 2;
  +
  +				break;
  +
  +			case OP_ASSERT:
  +			case OP_ASSERTBACK:
  +				do {
  +					if (match
  +						(eptr, ecode + 3, offset_top, md, ims, NULL,
  +						 match_isgroup)) break;
  +					ecode += (ecode[1] << 8) + ecode[2];
  +				}
  +				while (*ecode == OP_ALT);
  +				if (*ecode == OP_KET)
  +					return FALSE;
  +
  +				if ((flags & match_condassert) != 0)
  +					return TRUE;
  +
  +				do
  +					ecode += (ecode[1] << 8) + ecode[2];
  +				while (*ecode == OP_ALT);
  +				ecode += 3;
  +				offset_top = md->end_offset_top;
  +				continue;
  +
  +			case OP_ASSERT_NOT:
  +			case OP_ASSERTBACK_NOT:
  +				do {
  +					if (match
  +						(eptr, ecode + 3, offset_top, md, ims, NULL,
  +						 match_isgroup)) return FALSE;
  +					ecode += (ecode[1] << 8) + ecode[2];
  +				}
  +				while (*ecode == OP_ALT);
   
  -  /* Other types of node can be handled by a switch */
  +				if ((flags & match_condassert) != 0)
  +					return TRUE;
   
  -  switch(op)
  -    {
  -    case OP_BRA:     /* Non-capturing bracket: optimized */
  -
  -    do
  -      {
  -      if (match(eptr, ecode+3, offset_top, md, ims, eptrb, match_isgroup))
  -        return TRUE;
  -      ecode += (ecode[1] << 8) + ecode[2];
  -      }
  -    while (*ecode == OP_ALT);
  -
  -    return FALSE;
  -
  -    /* Conditional group: compilation checked that there are no more than
  -    two branches. If the condition is false, skipping the first branch takes us
  -    past the end if there is only one branch, but that's OK because that is
  -    exactly what going to the ket would do. */
  -
  -    case OP_COND:
  -    if (ecode[3] == OP_CREF)         /* Condition is extraction test */
  -      {
  -      int offset = (ecode[4] << 9) | (ecode[5] << 1); /* Doubled ref number */
  -      return match(eptr,
  -        ecode + ((offset < offset_top && md->offset_vector[offset] >= 0)?
  -          6 : 3 + (ecode[1] << 8) + ecode[2]),
  -        offset_top, md, ims, eptrb, match_isgroup);
  -      }
  -
  -    /* The condition is an assertion. Call match() to evaluate it - setting
  -    the final argument TRUE causes it to stop at the end of an assertion. */
  -
  -    else
  -      {
  -      if (match(eptr, ecode+3, offset_top, md, ims, NULL,
  -          match_condassert | match_isgroup))
  -        {
  -        ecode += 3 + (ecode[4] << 8) + ecode[5];
  -        while (*ecode == OP_ALT) ecode += (ecode[1] << 8) + ecode[2];
  -        }
  -      else ecode += (ecode[1] << 8) + ecode[2];
  -      return match(eptr, ecode+3, offset_top, md, ims, eptrb, match_isgroup);
  -      }
  -    /* Control never reaches here */
  -
  -    /* Skip over conditional reference or large extraction number data if
  -    encountered. */
  -
  -    case OP_CREF:
  -    case OP_BRANUMBER:
  -    ecode += 3;
  -    break;
  -
  -    case OP_END:
  -    if (md->notempty && eptr == md->start_match) return FALSE;
  -    md->end_match_ptr = eptr;          /* Record where we ended */
  -    md->end_offset_top = offset_top;   /* and how many extracts were taken */
  -    return TRUE;
  -
  -    /* Change option settings */
  -
  -    case OP_OPT:
  -    ims = ecode[1];
  -    ecode += 2;
  -
  -    break;
  -
  -    /* Assertion brackets. Check the alternative branches in turn - the
  -    matching won't pass the KET for an assertion. If any one branch matches,
  -    the assertion is true. Lookbehind assertions have an OP_REVERSE item at the
  -    start of each branch to move the current point backwards, so the code at
  -    this level is identical to the lookahead case. */
  -
  -    case OP_ASSERT:
  -    case OP_ASSERTBACK:
  -    do
  -      {
  -      if (match(eptr, ecode+3, offset_top, md, ims, NULL, match_isgroup)) break;
  -      ecode += (ecode[1] << 8) + ecode[2];
  -      }
  -    while (*ecode == OP_ALT);
  -    if (*ecode == OP_KET) return FALSE;
  -
  -    /* If checking an assertion for a condition, return TRUE. */
  -
  -    if ((flags & match_condassert) != 0) return TRUE;
  -
  -    /* Continue from after the assertion, updating the offsets high water
  -    mark, since extracts may have been taken during the assertion. */
  -
  -    do ecode += (ecode[1] << 8) + ecode[2]; while (*ecode == OP_ALT);
  -    ecode += 3;
  -    offset_top = md->end_offset_top;
  -    continue;
  -
  -    /* Negative assertion: all branches must fail to match */
  -
  -    case OP_ASSERT_NOT:
  -    case OP_ASSERTBACK_NOT:
  -    do
  -      {
  -      if (match(eptr, ecode+3, offset_top, md, ims, NULL, match_isgroup))
  -        return FALSE;
  -      ecode += (ecode[1] << 8) + ecode[2];
  -      }
  -    while (*ecode == OP_ALT);
  -
  -    if ((flags & match_condassert) != 0) return TRUE;
  -
  -    ecode += 3;
  -    continue;
  -
  -    /* Move the subject pointer back. This occurs only at the start of
  -    each branch of a lookbehind assertion. If we are too close to the start to
  -    move back, this match function fails. When working with UTF-8 we move
  -    back a number of characters, not bytes. */
  +				ecode += 3;
  +				continue;
   
  -    case OP_REVERSE:
  +			case OP_REVERSE:
   #ifdef L2_UT_PCRE_SUPPORT_UTF8
  -    c = (ecode[1] << 8) + ecode[2];
  -    for (i = 0; i < c; i++)
  -      {
  -      eptr--;
  -      BACKCHAR(eptr)
  -      }
  +				c = (ecode[1] << 8) + ecode[2];
  +				for (i = 0; i < c; i++) {
  +					eptr--;
  +					BACKCHAR(eptr)
  +				}
   #else
  -    eptr -= (ecode[1] << 8) + ecode[2];
  +				eptr -= (ecode[1] << 8) + ecode[2];
   #endif
   
  -    if (eptr < md->start_subject) return FALSE;
  -    ecode += 3;
  -    break;
  -
  -    /* Recursion matches the current regex, nested. If there are any capturing
  -    brackets started but not finished, we have to save their starting points
  -    and reinstate them after the recursion. However, we don't know how many
  -    such there are (offset_top records the completed total) so we just have
  -    to save all the potential data. There may be up to 99 such values, which
  -    is a bit large to put on the stack, but using malloc for small numbers
  -    seems expensive. As a compromise, the stack is used when there are fewer
  -    than 16 values to store; otherwise malloc is used. A problem is what to do
  -    if the malloc fails ... there is no way of returning to the top level with
  -    an error. Save the top 15 values on the stack, and accept that the rest
  -    may be wrong. */
  -
  -    case OP_RECURSE:
  -      {
  -      BOOL rc;
  -      int *save;
  -      int stacksave[15];
  -
  -      c = md->offset_max;
  -
  -      if (c < 16) save = stacksave; else
  -        {
  -        save = (int *)(pcre_malloc)((c+1) * sizeof(int));
  -        if (save == NULL)
  -          {
  -          save = stacksave;
  -          c = 15;
  -          }
  -        }
  -
  -      for (i = 1; i <= c; i++)
  -        save[i] = md->offset_vector[md->offset_end - i];
  -      rc = match(eptr, md->start_pattern, offset_top, md, ims, eptrb,
  -        match_isgroup);
  -      for (i = 1; i <= c; i++)
  -        md->offset_vector[md->offset_end - i] = save[i];
  -      if (save != stacksave) (pcre_free)(save);
  -      if (!rc) return FALSE;
  -
  -      /* In case the recursion has set more capturing values, save the final
  -      number, then move along the subject till after the recursive match,
  -      and advance one byte in the pattern code. */
  -
  -      offset_top = md->end_offset_top;
  -      eptr = md->end_match_ptr;
  -      ecode++;
  -      }
  -    break;
  -
  -    /* "Once" brackets are like assertion brackets except that after a match,
  -    the point in the subject string is not moved back. Thus there can never be
  -    a move back into the brackets. Check the alternative branches in turn - the
  -    matching won't pass the KET for this kind of subpattern. If any one branch
  -    matches, we carry on as at the end of a normal bracket, leaving the subject
  -    pointer. */
  -
  -    case OP_ONCE:
  -      {
  -      const uschar *prev = ecode;
  -      const uschar *saved_eptr = eptr;
  -
  -      do
  -        {
  -        if (match(eptr, ecode+3, offset_top, md, ims, eptrb, match_isgroup))
  -          break;
  -        ecode += (ecode[1] << 8) + ecode[2];
  -        }
  -      while (*ecode == OP_ALT);
  -
  -      /* If hit the end of the group (which could be repeated), fail */
  -
  -      if (*ecode != OP_ONCE && *ecode != OP_ALT) return FALSE;
  -
  -      /* Continue as from after the assertion, updating the offsets high water
  -      mark, since extracts may have been taken. */
  -
  -      do ecode += (ecode[1] << 8) + ecode[2]; while (*ecode == OP_ALT);
  -
  -      offset_top = md->end_offset_top;
  -      eptr = md->end_match_ptr;
  -
  -      /* For a non-repeating ket, just continue at this level. This also
  -      happens for a repeating ket if no characters were matched in the group.
  -      This is the forcible breaking of infinite loops as implemented in Perl
  -      5.005. If there is an options reset, it will get obeyed in the normal
  -      course of events. */
  -
  -      if (*ecode == OP_KET || eptr == saved_eptr)
  -        {
  -        ecode += 3;
  -        break;
  -        }
  -
  -      /* The repeating kets try the rest of the pattern or restart from the
  -      preceding bracket, in the appropriate order. We need to reset any options
  -      that changed within the bracket before re-running it, so check the next
  -      opcode. */
  -
  -      if (ecode[3] == OP_OPT)
  -        {
  -        ims = (ims & ~PCRE_IMS) | ecode[4];
  -
  -        }
  -
  -      if (*ecode == OP_KETRMIN)
  -        {
  -        if (match(eptr, ecode+3, offset_top, md, ims, eptrb, 0) ||
  -            match(eptr, prev, offset_top, md, ims, eptrb, match_isgroup))
  -              return TRUE;
  -        }
  -      else  /* OP_KETRMAX */
  -        {
  -        if (match(eptr, prev, offset_top, md, ims, eptrb, match_isgroup) ||
  -            match(eptr, ecode+3, offset_top, md, ims, eptrb, 0)) return TRUE;
  -        }
  -      }
  -    return FALSE;
  -
  -    /* An alternation is the end of a branch; scan along to find the end of the
  -    bracketed group and go to there. */
  -
  -    case OP_ALT:
  -    do ecode += (ecode[1] << 8) + ecode[2]; while (*ecode == OP_ALT);
  -    break;
  -
  -    /* BRAZERO and BRAMINZERO occur just before a bracket group, indicating
  -    that it may occur zero times. It may repeat infinitely, or not at all -
  -    i.e. it could be ()* or ()? in the pattern. Brackets with fixed upper
  -    repeat limits are compiled as a number of copies, with the optional ones
  -    preceded by BRAZERO or BRAMINZERO. */
  -
  -    case OP_BRAZERO:
  -      {
  -      const uschar *next = ecode+1;
  -      if (match(eptr, next, offset_top, md, ims, eptrb, match_isgroup))
  -        return TRUE;
  -      do next += (next[1] << 8) + next[2]; while (*next == OP_ALT);
  -      ecode = next + 3;
  -      }
  -    break;
  -
  -    case OP_BRAMINZERO:
  -      {
  -      const uschar *next = ecode+1;
  -      do next += (next[1] << 8) + next[2]; while (*next == OP_ALT);
  -      if (match(eptr, next+3, offset_top, md, ims, eptrb, match_isgroup))
  -        return TRUE;
  -      ecode++;
  -      }
  -    break;
  -
  -    case OP_KET:
  -    case OP_KETRMIN:
  -    case OP_KETRMAX:
  -      {
  -      const uschar *prev = ecode - (ecode[1] << 8) - ecode[2];
  -      const uschar *saved_eptr = eptrb->saved_eptr;
  -
  -      eptrb = eptrb->prev;    /* Back up the stack of bracket start pointers */
  -
  -      if (*prev == OP_ASSERT || *prev == OP_ASSERT_NOT ||
  -          *prev == OP_ASSERTBACK || *prev == OP_ASSERTBACK_NOT ||
  -          *prev == OP_ONCE)
  -        {
  -        md->end_match_ptr = eptr;      /* For ONCE */
  -        md->end_offset_top = offset_top;
  -        return TRUE;
  -        }
  -
  -      /* In all other cases except a conditional group we have to check the
  -      group number back at the start and if necessary complete handling an
  -      extraction by setting the offsets and bumping the high water mark. */
  -
  -      if (*prev != OP_COND)
  -        {
  -        int offset;
  -        int number = *prev - OP_BRA;
  -
  -        /* For extended extraction brackets (large number), we have to fish out
  -        the number from a dummy opcode at the start. */
  -
  -        if (number > EXTRACT_BASIC_MAX) number = (prev[4] << 8) | prev[5];
  -        offset = number << 1;
  -
  -        if (number > 0)
  -          {
  -          if (offset >= md->offset_max) md->offset_overflow = TRUE; else
  -            {
  -            md->offset_vector[offset] =
  -              md->offset_vector[md->offset_end - number];
  -            md->offset_vector[offset+1] = eptr - md->start_subject;
  -            if (offset_top <= offset) offset_top = offset + 2;
  -            }
  -          }
  -        }
  -
  -      /* Reset the value of the ims flags, in case they got changed during
  -      the group. */
  -
  -      ims = original_ims;
  -
  -      /* For a non-repeating ket, just continue at this level. This also
  -      happens for a repeating ket if no characters were matched in the group.
  -      This is the forcible breaking of infinite loops as implemented in Perl
  -      5.005. If there is an options reset, it will get obeyed in the normal
  -      course of events. */
  -
  -      if (*ecode == OP_KET || eptr == saved_eptr)
  -        {
  -        ecode += 3;
  -        break;
  -        }
  -
  -      /* The repeating kets try the rest of the pattern or restart from the
  -      preceding bracket, in the appropriate order. */
  -
  -      if (*ecode == OP_KETRMIN)
  -        {
  -        if (match(eptr, ecode+3, offset_top, md, ims, eptrb, 0) ||
  -            match(eptr, prev, offset_top, md, ims, eptrb, match_isgroup))
  -              return TRUE;
  -        }
  -      else  /* OP_KETRMAX */
  -        {
  -        if (match(eptr, prev, offset_top, md, ims, eptrb, match_isgroup) ||
  -            match(eptr, ecode+3, offset_top, md, ims, eptrb, 0)) return TRUE;
  -        }
  -      }
  -    return FALSE;
  -
  -    /* Start of subject unless notbol, or after internal newline if multiline */
  -
  -    case OP_CIRC:
  -    if (md->notbol && eptr == md->start_subject) return FALSE;
  -    if ((ims & PCRE_MULTILINE) != 0)
  -      {
  -      if (eptr != md->start_subject && eptr[-1] != '\n') return FALSE;
  -      ecode++;
  -      break;
  -      }
  -    /* ... else fall through */
  -
  -    /* Start of subject assertion */
  -
  -    case OP_SOD:
  -    if (eptr != md->start_subject) return FALSE;
  -    ecode++;
  -    break;
  -
  -    /* Assert before internal newline if multiline, or before a terminating
  -    newline unless endonly is set, else end of subject unless noteol is set. */
  -
  -    case OP_DOLL:
  -    if ((ims & PCRE_MULTILINE) != 0)
  -      {
  -      if (eptr < md->end_subject) { if (*eptr != '\n') return FALSE; }
  -        else { if (md->noteol) return FALSE; }
  -      ecode++;
  -      break;
  -      }
  -    else
  -      {
  -      if (md->noteol) return FALSE;
  -      if (!md->endonly)
  -        {
  -        if (eptr < md->end_subject - 1 ||
  -           (eptr == md->end_subject - 1 && *eptr != '\n')) return FALSE;
  -
  -        ecode++;
  -        break;
  -        }
  -      }
  -    /* ... else fall through */
  -
  -    case OP_EOD:
  -    if (eptr < md->end_subject) return FALSE;
  -    ecode++;
  -    break;
  -
  -    case OP_EODN:
  -    if (eptr < md->end_subject - 1 ||
  -       (eptr == md->end_subject - 1 && *eptr != '\n')) return FALSE;
  -    ecode++;
  -    break;
  -
  -    /* Word boundary assertions */
  -
  -    case OP_NOT_WORD_BOUNDARY:
  -    case OP_WORD_BOUNDARY:
  -      {
  -      BOOL prev_is_word = (eptr != md->start_subject) &&
  -        ((md->ctypes[eptr[-1]] & ctype_word) != 0);
  -      BOOL cur_is_word = (eptr < md->end_subject) &&
  -        ((md->ctypes[*eptr] & ctype_word) != 0);
  -      if ((*ecode++ == OP_WORD_BOUNDARY)?
  -           cur_is_word == prev_is_word : cur_is_word != prev_is_word)
  -        return FALSE;
  -      }
  -    break;
  -
  -    /* Match a single character type; inline for speed */
  -
  -    case OP_ANY:
  -    if ((ims & PCRE_DOTALL) == 0 && eptr < md->end_subject && *eptr == '\n')
  -      return FALSE;
  -    if (eptr++ >= md->end_subject) return FALSE;
  +				if (eptr < md->start_subject)
  +					return FALSE;
  +				ecode += 3;
  +				break;
  +
  +			case OP_RECURSE:
  +				{
  +					BOOL rc;
  +					int *save;
  +					int stacksave[15];
  +
  +					c = md->offset_max;
  +
  +					if (c < 16)
  +						save = stacksave;
  +					else {
  +						save = (int *)(pcre_malloc) ((c + 1) * sizeof (int));
  +						if (save == NULL) {
  +							save = stacksave;
  +							c = 15;
  +						}
  +					}
  +
  +					for (i = 1; i <= c; i++)
  +						save[i] = md->offset_vector[md->offset_end - i];
  +					rc =
  +						match(eptr, md->start_pattern, offset_top, md, ims,
  +							  eptrb, match_isgroup);
  +					for (i = 1; i <= c; i++)
  +						md->offset_vector[md->offset_end - i] = save[i];
  +					if (save != stacksave)
  +						(pcre_free) (save);
  +					if (!rc)
  +						return FALSE;
  +
  +					offset_top = md->end_offset_top;
  +					eptr = md->end_match_ptr;
  +					ecode++;
  +				}
  +				break;
  +
  +			case OP_ONCE:
  +				{
  +					const uschar *prev = ecode;
  +					const uschar *saved_eptr = eptr;
  +
  +					do {
  +						if (match
  +							(eptr, ecode + 3, offset_top, md, ims, eptrb,
  +							 match_isgroup)) break;
  +						ecode += (ecode[1] << 8) + ecode[2];
  +					}
  +					while (*ecode == OP_ALT);
  +
  +					if (*ecode != OP_ONCE && *ecode != OP_ALT)
  +						return FALSE;
  +
  +					do
  +						ecode += (ecode[1] << 8) + ecode[2];
  +					while (*ecode == OP_ALT);
  +
  +					offset_top = md->end_offset_top;
  +					eptr = md->end_match_ptr;
  +
  +					if (*ecode == OP_KET || eptr == saved_eptr) {
  +						ecode += 3;
  +						break;
  +					}
  +
  +					if (ecode[3] == OP_OPT) {
  +						ims = (ims & ~PCRE_IMS) | ecode[4];
  +
  +					}
  +
  +					if (*ecode == OP_KETRMIN) {
  +						if (match
  +							(eptr, ecode + 3, offset_top, md, ims, eptrb, 0)
  +							|| match(eptr, prev, offset_top, md, ims, eptrb,
  +									 match_isgroup)) return TRUE;
  +					}
  +					else {
  +						if (match
  +							(eptr, prev, offset_top, md, ims, eptrb,
  +							 match_isgroup)
  +							|| match(eptr, ecode + 3, offset_top, md, ims,
  +									 eptrb, 0))
  +							return TRUE;
  +					}
  +				}
  +				return FALSE;
  +
  +			case OP_ALT:
  +				do
  +					ecode += (ecode[1] << 8) + ecode[2];
  +				while (*ecode == OP_ALT);
  +				break;
  +
  +			case OP_BRAZERO:
  +				{
  +					const uschar *next = ecode + 1;
  +					if (match
  +						(eptr, next, offset_top, md, ims, eptrb,
  +						 match_isgroup)) return TRUE;
  +					do
  +						next += (next[1] << 8) + next[2];
  +					while (*next == OP_ALT);
  +					ecode = next + 3;
  +				}
  +				break;
  +
  +			case OP_BRAMINZERO:
  +				{
  +					const uschar *next = ecode + 1;
  +					do
  +						next += (next[1] << 8) + next[2];
  +					while (*next == OP_ALT);
  +					if (match
  +						(eptr, next + 3, offset_top, md, ims, eptrb,
  +						 match_isgroup)) return TRUE;
  +					ecode++;
  +				}
  +				break;
  +
  +			case OP_KET:
  +			case OP_KETRMIN:
  +			case OP_KETRMAX:
  +				{
  +					const uschar *prev = ecode - (ecode[1] << 8) - ecode[2];
  +					const uschar *saved_eptr = eptrb->saved_eptr;
  +
  +					eptrb = eptrb->prev;
  +
  +					if (*prev == OP_ASSERT || *prev == OP_ASSERT_NOT ||
  +						*prev == OP_ASSERTBACK || *prev == OP_ASSERTBACK_NOT
  +						|| *prev == OP_ONCE) {
  +						md->end_match_ptr = eptr;
  +						md->end_offset_top = offset_top;
  +						return TRUE;
  +					}
  +
  +					if (*prev != OP_COND) {
  +						int offset;
  +						int number = *prev - OP_BRA;
  +
  +						if (number > EXTRACT_BASIC_MAX)
  +							number = (prev[4] << 8) | prev[5];
  +						offset = number << 1;
  +
  +						if (number > 0) {
  +							if (offset >= md->offset_max)
  +								md->offset_overflow = TRUE;
  +							else {
  +								md->offset_vector[offset] =
  +									md->offset_vector[md->offset_end -
  +													  number];
  +								md->offset_vector[offset + 1] =
  +									eptr - md->start_subject;
  +								if (offset_top <= offset)
  +									offset_top = offset + 2;
  +							}
  +						}
  +					}
  +
  +					ims = original_ims;
  +
  +					if (*ecode == OP_KET || eptr == saved_eptr) {
  +						ecode += 3;
  +						break;
  +					}
  +
  +					if (*ecode == OP_KETRMIN) {
  +						if (match
  +							(eptr, ecode + 3, offset_top, md, ims, eptrb, 0)
  +							|| match(eptr, prev, offset_top, md, ims, eptrb,
  +									 match_isgroup)) return TRUE;
  +					}
  +					else {
  +						if (match
  +							(eptr, prev, offset_top, md, ims, eptrb,
  +							 match_isgroup)
  +							|| match(eptr, ecode + 3, offset_top, md, ims,
  +									 eptrb, 0))
  +							return TRUE;
  +					}
  +				}
  +				return FALSE;
  +
  +			case OP_CIRC:
  +				if (md->notbol && eptr == md->start_subject)
  +					return FALSE;
  +				if ((ims & PCRE_MULTILINE) != 0) {
  +					if (eptr != md->start_subject && eptr[-1] != '\n')
  +						return FALSE;
  +					ecode++;
  +					break;
  +				}
  +
  +			case OP_SOD:
  +				if (eptr != md->start_subject)
  +					return FALSE;
  +				ecode++;
  +				break;
  +
  +			case OP_DOLL:
  +				if ((ims & PCRE_MULTILINE) != 0) {
  +					if (eptr < md->end_subject) {
  +						if (*eptr != '\n')
  +							return FALSE;
  +					}
  +					else {
  +						if (md->noteol)
  +							return FALSE;
  +					}
  +					ecode++;
  +					break;
  +				}
  +				else {
  +					if (md->noteol)
  +						return FALSE;
  +					if (!md->endonly) {
  +						if (eptr < md->end_subject - 1 ||
  +							(eptr == md->end_subject - 1 && *eptr != '\n'))
  +							return FALSE;
  +
  +						ecode++;
  +						break;
  +					}
  +				}
  +			case OP_EOD:
  +				if (eptr < md->end_subject)
  +					return FALSE;
  +				ecode++;
  +				break;
  +
  +			case OP_EODN:
  +				if (eptr < md->end_subject - 1 ||
  +					(eptr == md->end_subject - 1 && *eptr != '\n'))
  +					return FALSE;
  +				ecode++;
  +				break;
  +
  +			case OP_NOT_WORD_BOUNDARY:
  +			case OP_WORD_BOUNDARY:
  +				{
  +					BOOL prev_is_word = (eptr != md->start_subject) &&
  +						((md->ctypes[eptr[-1]] & ctype_word) != 0);
  +					BOOL cur_is_word = (eptr < md->end_subject) &&
  +						((md->ctypes[*eptr] & ctype_word) != 0);
  +					if ((*ecode++ == OP_WORD_BOUNDARY) ?
  +						cur_is_word == prev_is_word : cur_is_word !=
  +						prev_is_word) return FALSE;
  +				}
  +				break;
  +
  +			case OP_ANY:
  +				if ((ims & PCRE_DOTALL) == 0 && eptr < md->end_subject
  +					&& *eptr == '\n')
  +					return FALSE;
  +				if (eptr++ >= md->end_subject)
  +					return FALSE;
   #ifdef L2_UT_PCRE_SUPPORT_UTF8
  -    if (md->utf8)
  -      while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
  +				if (md->utf8)
  +					while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80)
  +						eptr++;
   #endif
  -    ecode++;
  -    break;
  +				ecode++;
  +				break;
   
  -    case OP_NOT_DIGIT:
  -    if (eptr >= md->end_subject ||
  -       (md->ctypes[*eptr++] & ctype_digit) != 0)
  -      return FALSE;
  -    ecode++;
  -    break;
  -
  -    case OP_DIGIT:
  -    if (eptr >= md->end_subject ||
  -       (md->ctypes[*eptr++] & ctype_digit) == 0)
  -      return FALSE;
  -    ecode++;
  -    break;
  -
  -    case OP_NOT_WHITESPACE:
  -    if (eptr >= md->end_subject ||
  -       (md->ctypes[*eptr++] & ctype_space) != 0)
  -      return FALSE;
  -    ecode++;
  -    break;
  -
  -    case OP_WHITESPACE:
  -    if (eptr >= md->end_subject ||
  -       (md->ctypes[*eptr++] & ctype_space) == 0)
  -      return FALSE;
  -    ecode++;
  -    break;
  -
  -    case OP_NOT_WORDCHAR:
  -    if (eptr >= md->end_subject ||
  -       (md->ctypes[*eptr++] & ctype_word) != 0)
  -      return FALSE;
  -    ecode++;
  -    break;
  -
  -    case OP_WORDCHAR:
  -    if (eptr >= md->end_subject ||
  -       (md->ctypes[*eptr++] & ctype_word) == 0)
  -      return FALSE;
  -    ecode++;
  -    break;
  -
  -    /* Match a back reference, possibly repeatedly. Look past the end of the
  -    item to see if there is repeat information following. The code is similar
  -    to that for character classes, but repeated for efficiency. Then obey
  -    similar code to character type repeats - written out again for speed.
  -    However, if the referenced string is the empty string, always treat
  -    it as matched, any number of times (otherwise there could be infinite
  -    loops). */
  -
  -    case OP_REF:
  -      {
  -      int length;
  -      int offset = (ecode[1] << 9) | (ecode[2] << 1); /* Doubled ref number */
  -      ecode += 3;                                     /* Advance past item */
  -
  -      /* If the reference is unset, set the length to be longer than the amount
  -      of subject left; this ensures that every attempt at a match fails. We
  -      can't just fail here, because of the possibility of quantifiers with zero
  -      minima. */
  -
  -      length = (offset >= offset_top || md->offset_vector[offset] < 0)?
  -        md->end_subject - eptr + 1 :
  -        md->offset_vector[offset+1] - md->offset_vector[offset];
  -
  -      /* Set up for repetition, or handle the non-repeated case */
  -
  -      switch (*ecode)
  -        {
  -        case OP_CRSTAR:
  -        case OP_CRMINSTAR:
  -        case OP_CRPLUS:
  -        case OP_CRMINPLUS:
  -        case OP_CRQUERY:
  -        case OP_CRMINQUERY:
  -        c = *ecode++ - OP_CRSTAR;
  -        minimize = (c & 1) != 0;
  -        min = rep_min[c];                 /* Pick up values from tables; */
  -        max = rep_max[c];                 /* zero for max => infinity */
  -        if (max == 0) max = INT_MAX;
  -        break;
  -
  -        case OP_CRRANGE:
  -        case OP_CRMINRANGE:
  -        minimize = (*ecode == OP_CRMINRANGE);
  -        min = (ecode[1] << 8) + ecode[2];
  -        max = (ecode[3] << 8) + ecode[4];
  -        if (max == 0) max = INT_MAX;
  -        ecode += 5;
  -        break;
  -
  -        default:               /* No repeat follows */
  -        if (!match_ref(offset, eptr, length, md, ims)) return FALSE;
  -        eptr += length;
  -        continue;              /* With the main loop */
  -        }
  -
  -      /* If the length of the reference is zero, just continue with the
  -      main loop. */
  -
  -      if (length == 0) continue;
  -
  -      /* First, ensure the minimum number of matches are present. We get back
  -      the length of the reference string explicitly rather than passing the
  -      address of eptr, so that eptr can be a register variable. */
  -
  -      for (i = 1; i <= min; i++)
  -        {
  -        if (!match_ref(offset, eptr, length, md, ims)) return FALSE;
  -        eptr += length;
  -        }
  -
  -      /* If min = max, continue at the same level without recursion.
  -      They are not both allowed to be zero. */
  -
  -      if (min == max) continue;
  -
  -      /* If minimizing, keep trying and advancing the pointer */
  -
  -      if (minimize)
  -        {
  -        for (i = min;; i++)
  -          {
  -          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
  -            return TRUE;
  -          if (i >= max || !match_ref(offset, eptr, length, md, ims))
  -            return FALSE;
  -          eptr += length;
  -          }
  -        /* Control never gets here */
  -        }
  -
  -      /* If maximizing, find the longest string and work backwards */
  -
  -      else
  -        {
  -        const uschar *pp = eptr;
  -        for (i = min; i < max; i++)
  -          {
  -          if (!match_ref(offset, eptr, length, md, ims)) break;
  -          eptr += length;
  -          }
  -        while (eptr >= pp)
  -          {
  -          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
  -            return TRUE;
  -          eptr -= length;
  -          }
  -        return FALSE;
  -        }
  -      }
  -    /* Control never gets here */
  -
  -    /* Match a character class, possibly repeatedly. Look past the end of the
  -    item to see if there is repeat information following. Then obey similar
  -    code to character type repeats - written out again for speed. */
  -
  -    case OP_CLASS:
  -      {
  -      const uschar *data = ecode + 1;  /* Save for matching */
  -      ecode += 33;                     /* Advance past the item */
  -
  -      switch (*ecode)
  -        {
  -        case OP_CRSTAR:
  -        case OP_CRMINSTAR:
  -        case OP_CRPLUS:
  -        case OP_CRMINPLUS:
  -        case OP_CRQUERY:
  -        case OP_CRMINQUERY:
  -        c = *ecode++ - OP_CRSTAR;
  -        minimize = (c & 1) != 0;
  -        min = rep_min[c];                 /* Pick up values from tables; */
  -        max = rep_max[c];                 /* zero for max => infinity */
  -        if (max == 0) max = INT_MAX;
  -        break;
  -
  -        case OP_CRRANGE:
  -        case OP_CRMINRANGE:
  -        minimize = (*ecode == OP_CRMINRANGE);
  -        min = (ecode[1] << 8) + ecode[2];
  -        max = (ecode[3] << 8) + ecode[4];
  -        if (max == 0) max = INT_MAX;
  -        ecode += 5;
  -        break;
  -
  -        default:               /* No repeat follows */
  -        min = max = 1;
  -        break;
  -        }
  -
  -      /* First, ensure the minimum number of matches are present. */
  -
  -      for (i = 1; i <= min; i++)
  -        {
  -        if (eptr >= md->end_subject) return FALSE;
  -        GETCHARINC(c, eptr)         /* Get character; increment eptr */
  -
  +			case OP_NOT_DIGIT:
  +				if (eptr >= md->end_subject ||
  +					(md->ctypes[*eptr++] & ctype_digit) != 0)
  +					return FALSE;
  +				ecode++;
  +				break;
  +
  +			case OP_DIGIT:
  +				if (eptr >= md->end_subject ||
  +					(md->ctypes[*eptr++] & ctype_digit) == 0)
  +					return FALSE;
  +				ecode++;
  +				break;
  +
  +			case OP_NOT_WHITESPACE:
  +				if (eptr >= md->end_subject ||
  +					(md->ctypes[*eptr++] & ctype_space) != 0)
  +					return FALSE;
  +				ecode++;
  +				break;
  +
  +			case OP_WHITESPACE:
  +				if (eptr >= md->end_subject ||
  +					(md->ctypes[*eptr++] & ctype_space) == 0)
  +					return FALSE;
  +				ecode++;
  +				break;
  +
  +			case OP_NOT_WORDCHAR:
  +				if (eptr >= md->end_subject ||
  +					(md->ctypes[*eptr++] & ctype_word) != 0)
  +					return FALSE;
  +				ecode++;
  +				break;
  +
  +			case OP_WORDCHAR:
  +				if (eptr >= md->end_subject ||
  +					(md->ctypes[*eptr++] & ctype_word) == 0)
  +					return FALSE;
  +				ecode++;
  +				break;
  +
  +			case OP_REF:
  +				{
  +					int length;
  +					int offset = (ecode[1] << 9) | (ecode[2] << 1);
  +					ecode += 3;
  +
  +					length = (offset >= offset_top
  +							  || md->offset_vector[offset] <
  +							  0) ? md->end_subject - eptr +
  +						1 : md->offset_vector[offset + 1] -
  +						md->offset_vector[offset];
  +
  +					switch (*ecode) {
  +						case OP_CRSTAR:
  +						case OP_CRMINSTAR:
  +						case OP_CRPLUS:
  +						case OP_CRMINPLUS:
  +						case OP_CRQUERY:
  +						case OP_CRMINQUERY:
  +							c = *ecode++ - OP_CRSTAR;
  +							minimize = (c & 1) != 0;
  +							min = rep_min[c];
  +							max = rep_max[c];
  +							if (max == 0)
  +								max = INT_MAX;
  +							break;
  +
  +						case OP_CRRANGE:
  +						case OP_CRMINRANGE:
  +							minimize = (*ecode == OP_CRMINRANGE);
  +							min = (ecode[1] << 8) + ecode[2];
  +							max = (ecode[3] << 8) + ecode[4];
  +							if (max == 0)
  +								max = INT_MAX;
  +							ecode += 5;
  +							break;
  +
  +						default:
  +							if (!match_ref(offset, eptr, length, md, ims))
  +								return FALSE;
  +							eptr += length;
  +							continue;
  +					}
  +
  +					if (length == 0)
  +						continue;
  +
  +					for (i = 1; i <= min; i++) {
  +						if (!match_ref(offset, eptr, length, md, ims))
  +							return FALSE;
  +						eptr += length;
  +					}
  +
  +					if (min == max)
  +						continue;
  +
  +					if (minimize) {
  +						for (i = min;; i++) {
  +							if (match
  +								(eptr, ecode, offset_top, md, ims, eptrb,
  +								 0)) return TRUE;
  +							if (i >= max
  +								|| !match_ref(offset, eptr, length, md, ims))
  +								return FALSE;
  +							eptr += length;
  +						}
  +					}
  +
  +					else {
  +						const uschar *pp = eptr;
  +						for (i = min; i < max; i++) {
  +							if (!match_ref(offset, eptr, length, md, ims))
  +								break;
  +							eptr += length;
  +						}
  +						while (eptr >= pp) {
  +							if (match
  +								(eptr, ecode, offset_top, md, ims, eptrb,
  +								 0)) return TRUE;
  +							eptr -= length;
  +						}
  +						return FALSE;
  +					}
  +				}
  +
  +			case OP_CLASS:
  +				{
  +					const uschar *data = ecode + 1;
  +					ecode += 33;
  +
  +					switch (*ecode) {
  +						case OP_CRSTAR:
  +						case OP_CRMINSTAR:
  +						case OP_CRPLUS:
  +						case OP_CRMINPLUS:
  +						case OP_CRQUERY:
  +						case OP_CRMINQUERY:
  +							c = *ecode++ - OP_CRSTAR;
  +							minimize = (c & 1) != 0;
  +							min = rep_min[c];
  +							max = rep_max[c];
  +							if (max == 0)
  +								max = INT_MAX;
  +							break;
  +
  +						case OP_CRRANGE:
  +						case OP_CRMINRANGE:
  +							minimize = (*ecode == OP_CRMINRANGE);
  +							min = (ecode[1] << 8) + ecode[2];
  +							max = (ecode[3] << 8) + ecode[4];
  +							if (max == 0)
  +								max = INT_MAX;
  +							ecode += 5;
  +							break;
  +
  +						default:
  +							min = max = 1;
  +							break;
  +					}
  +
  +					for (i = 1; i <= min; i++) {
  +						if (eptr >= md->end_subject)
  +							return FALSE;
  +						GETCHARINC(c, eptr)
   #ifdef L2_UT_PCRE_SUPPORT_UTF8
  -        /* We do not yet support class members > 255 */
  -        if (c > 255) return FALSE;
  +							if (c > 255)
  +							return FALSE;
   #endif
  -
  -        if ((data[c/8] & (1 << (c&7))) != 0) continue;
  -        return FALSE;
  -        }
  -
  -      /* If max == min we can continue with the main loop without the
  -      need to recurse. */
  -
  -      if (min == max) continue;
  -
  -      /* If minimizing, keep testing the rest of the expression and advancing
  -      the pointer while it matches the class. */
  -
  -      if (minimize)
  -        {
  -        for (i = min;; i++)
  -          {
  -          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
  -            return TRUE;
  -          if (i >= max || eptr >= md->end_subject) return FALSE;
  -          GETCHARINC(c, eptr)       /* Get character; increment eptr */
   
  +						if ((data[c / 8] & (1 << (c & 7))) != 0)
  +							continue;
  +						return FALSE;
  +					}
  +
  +					if (min == max)
  +						continue;
  +
  +					if (minimize) {
  +						for (i = min;; i++) {
  +							if (match
  +								(eptr, ecode, offset_top, md, ims, eptrb,
  +								 0)) return TRUE;
  +							if (i >= max || eptr >= md->end_subject)
  +								return FALSE;
  +							GETCHARINC(c, eptr)
   #ifdef L2_UT_PCRE_SUPPORT_UTF8
  -          /* We do not yet support class members > 255 */
  -          if (c > 255) return FALSE;
  +								if (c > 255)
  +								return FALSE;
   #endif
  -          if ((data[c/8] & (1 << (c&7))) != 0) continue;
  -          return FALSE;
  -          }
  -        /* Control never gets here */
  -        }
  -
  -      /* If maximizing, find the longest possible run, then work backwards. */
  -
  -      else
  -        {
  -        const uschar *pp = eptr;
  -        int len = 1;
  -        for (i = min; i < max; i++)
  -          {
  -          if (eptr >= md->end_subject) break;
  -          GETCHARLEN(c, eptr, len)  /* Get character, set length if UTF-8 */
  -
  +							if ((data[c / 8] & (1 << (c & 7))) != 0)
  +								continue;
  +							return FALSE;
  +						}
  +					}
  +
  +					else {
  +						const uschar *pp = eptr;
  +						int len = 1;
  +						for (i = min; i < max; i++) {
  +							if (eptr >= md->end_subject)
  +								break;
  +							GETCHARLEN(c, eptr, len)
   #ifdef L2_UT_PCRE_SUPPORT_UTF8
  -          /* We do not yet support class members > 255 */
  -          if (c > 255) break;
  +								if (c > 255)
  +								break;
   #endif
  -          if ((data[c/8] & (1 << (c&7))) == 0) break;
  -          eptr += len;
  -          }
  -
  -        while (eptr >= pp)
  -          {
  -          if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
  -            return TRUE;
  +							if ((data[c / 8] & (1 << (c & 7))) == 0)
  +								break;
  +							eptr += len;
  +						}
  +
  +						while (eptr >= pp) {
  +							if (match
  +								(eptr--, ecode, offset_top, md, ims, eptrb,
  +								 0)) return TRUE;
   
   #ifdef L2_UT_PCRE_SUPPORT_UTF8
  -          BACKCHAR(eptr)
  +							BACKCHAR(eptr)
   #endif
  -          }
  -        return FALSE;
  -        }
  -      }
  -    /* Control never gets here */
  -
  -    /* Match a run of characters */
  -
  -    case OP_CHARS:
  -      {
  -      register int length = ecode[1];
  -      ecode += 2;
  -
  -      if (length > md->end_subject - eptr) return FALSE;
  -      if ((ims & PCRE_CASELESS) != 0)
  -        {
  -        while (length-- > 0)
  -          if (md->lcc[*ecode++] != md->lcc[*eptr++])
  -            return FALSE;
  -        }
  -      else
  -        {
  -        while (length-- > 0) if (*ecode++ != *eptr++) return FALSE;
  -        }
  -      }
  -    break;
  -
  -    /* Match a single character repeatedly; different opcodes share code. */
  -
  -    case OP_EXACT:
  -    min = max = (ecode[1] << 8) + ecode[2];
  -    ecode += 3;
  -    goto REPEATCHAR;
  -
  -    case OP_UPTO:
  -    case OP_MINUPTO:
  -    min = 0;
  -    max = (ecode[1] << 8) + ecode[2];
  -    minimize = *ecode == OP_MINUPTO;
  -    ecode += 3;
  -    goto REPEATCHAR;
  -
  -    case OP_STAR:
  -    case OP_MINSTAR:
  -    case OP_PLUS:
  -    case OP_MINPLUS:
  -    case OP_QUERY:
  -    case OP_MINQUERY:
  -    c = *ecode++ - OP_STAR;
  -    minimize = (c & 1) != 0;
  -    min = rep_min[c];                 /* Pick up values from tables; */
  -    max = rep_max[c];                 /* zero for max => infinity */
  -    if (max == 0) max = INT_MAX;
  -
  -    /* Common code for all repeated single-character matches. We can give
  -    up quickly if there are fewer than the minimum number of characters left in
  -    the subject. */
  -
  -    REPEATCHAR:
  -    if (min > md->end_subject - eptr) return FALSE;
  -    c = *ecode++;
  -
  -    /* The code is duplicated for the caseless and caseful cases, for speed,
  -    since matching characters is likely to be quite common. First, ensure the
  -    minimum number of matches are present. If min = max, continue at the same
  -    level without recursing. Otherwise, if minimizing, keep trying the rest of
  -    the expression and advancing one matching character if failing, up to the
  -    maximum. Alternatively, if maximizing, find the maximum number of
  -    characters and work backwards. */
  -
  -    if ((ims & PCRE_CASELESS) != 0)
  -      {
  -      c = md->lcc[c];
  -      for (i = 1; i <= min; i++)
  -        if (c != md->lcc[*eptr++]) return FALSE;
  -      if (min == max) continue;
  -      if (minimize)
  -        {
  -        for (i = min;; i++)
  -          {
  -          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
  -            return TRUE;
  -          if (i >= max || eptr >= md->end_subject ||
  -              c != md->lcc[*eptr++])
  -            return FALSE;
  -          }
  -        /* Control never gets here */
  -        }
  -      else
  -        {
  -        const uschar *pp = eptr;
  -        for (i = min; i < max; i++)
  -          {
  -          if (eptr >= md->end_subject || c != md->lcc[*eptr]) break;
  -          eptr++;
  -          }
  -        while (eptr >= pp)
  -          if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
  -            return TRUE;
  -        return FALSE;
  -        }
  -      /* Control never gets here */
  -      }
  -
  -    /* Caseful comparisons */
  -
  -    else
  -      {
  -      for (i = 1; i <= min; i++) if (c != *eptr++) return FALSE;
  -      if (min == max) continue;
  -      if (minimize)
  -        {
  -        for (i = min;; i++)
  -          {
  -          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
  -            return TRUE;
  -          if (i >= max || eptr >= md->end_subject || c != *eptr++) return FALSE;
  -          }
  -        /* Control never gets here */
  -        }
  -      else
  -        {
  -        const uschar *pp = eptr;
  -        for (i = min; i < max; i++)
  -          {
  -          if (eptr >= md->end_subject || c != *eptr) break;
  -          eptr++;
  -          }
  -        while (eptr >= pp)
  -         if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
  -           return TRUE;
  -        return FALSE;
  -        }
  -      }
  -    /* Control never gets here */
  -
  -    /* Match a negated single character */
  -
  -    case OP_NOT:
  -    if (eptr >= md->end_subject) return FALSE;
  -    ecode++;
  -    if ((ims & PCRE_CASELESS) != 0)
  -      {
  -      if (md->lcc[*ecode++] == md->lcc[*eptr++]) return FALSE;
  -      }
  -    else
  -      {
  -      if (*ecode++ == *eptr++) return FALSE;
  -      }
  -    break;
  -
  -    /* Match a negated single character repeatedly. This is almost a repeat of
  -    the code for a repeated single character, but I haven't found a nice way of
  -    commoning these up that doesn't require a test of the positive/negative
  -    option for each character match. Maybe that wouldn't add very much to the
  -    time taken, but character matching *is* what this is all about... */
  -
  -    case OP_NOTEXACT:
  -    min = max = (ecode[1] << 8) + ecode[2];
  -    ecode += 3;
  -    goto REPEATNOTCHAR;
  -
  -    case OP_NOTUPTO:
  -    case OP_NOTMINUPTO:
  -    min = 0;
  -    max = (ecode[1] << 8) + ecode[2];
  -    minimize = *ecode == OP_NOTMINUPTO;
  -    ecode += 3;
  -    goto REPEATNOTCHAR;
  -
  -    case OP_NOTSTAR:
  -    case OP_NOTMINSTAR:
  -    case OP_NOTPLUS:
  -    case OP_NOTMINPLUS:
  -    case OP_NOTQUERY:
  -    case OP_NOTMINQUERY:
  -    c = *ecode++ - OP_NOTSTAR;
  -    minimize = (c & 1) != 0;
  -    min = rep_min[c];                 /* Pick up values from tables; */
  -    max = rep_max[c];                 /* zero for max => infinity */
  -    if (max == 0) max = INT_MAX;
  -
  -    /* Common code for all repeated single-character matches. We can give
  -    up quickly if there are fewer than the minimum number of characters left in
  -    the subject. */
  -
  -    REPEATNOTCHAR:
  -    if (min > md->end_subject - eptr) return FALSE;
  -    c = *ecode++;
  -
  -    /* The code is duplicated for the caseless and caseful cases, for speed,
  -    since matching characters is likely to be quite common. First, ensure the
  -    minimum number of matches are present. If min = max, continue at the same
  -    level without recursing. Otherwise, if minimizing, keep trying the rest of
  -    the expression and advancing one matching character if failing, up to the
  -    maximum. Alternatively, if maximizing, find the maximum number of
  -    characters and work backwards. */
  -
  -    if ((ims & PCRE_CASELESS) != 0)
  -      {
  -      c = md->lcc[c];
  -      for (i = 1; i <= min; i++)
  -        if (c == md->lcc[*eptr++]) return FALSE;
  -      if (min == max) continue;
  -      if (minimize)
  -        {
  -        for (i = min;; i++)
  -          {
  -          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
  -            return TRUE;
  -          if (i >= max || eptr >= md->end_subject ||
  -              c == md->lcc[*eptr++])
  -            return FALSE;
  -          }
  -        /* Control never gets here */
  -        }
  -      else
  -        {
  -        const uschar *pp = eptr;
  -        for (i = min; i < max; i++)
  -          {
  -          if (eptr >= md->end_subject || c == md->lcc[*eptr]) break;
  -          eptr++;
  -          }
  -        while (eptr >= pp)
  -          if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
  -            return TRUE;
  -        return FALSE;
  -        }
  -      /* Control never gets here */
  -      }
  -
  -    /* Caseful comparisons */
  -
  -    else
  -      {
  -      for (i = 1; i <= min; i++) if (c == *eptr++) return FALSE;
  -      if (min == max) continue;
  -      if (minimize)
  -        {
  -        for (i = min;; i++)
  -          {
  -          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
  -            return TRUE;
  -          if (i >= max || eptr >= md->end_subject || c == *eptr++) return FALSE;
  -          }
  -        /* Control never gets here */
  -        }
  -      else
  -        {
  -        const uschar *pp = eptr;
  -        for (i = min; i < max; i++)
  -          {
  -          if (eptr >= md->end_subject || c == *eptr) break;
  -          eptr++;
  -          }
  -        while (eptr >= pp)
  -         if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
  -           return TRUE;
  -        return FALSE;
  -        }
  -      }
  -    /* Control never gets here */
  -
  -    /* Match a single character type repeatedly; several different opcodes
  -    share code. This is very similar to the code for single characters, but we
  -    repeat it in the interests of efficiency. */
  -
  -    case OP_TYPEEXACT:
  -    min = max = (ecode[1] << 8) + ecode[2];
  -    minimize = TRUE;
  -    ecode += 3;
  -    goto REPEATTYPE;
  -
  -    case OP_TYPEUPTO:
  -    case OP_TYPEMINUPTO:
  -    min = 0;
  -    max = (ecode[1] << 8) + ecode[2];
  -    minimize = *ecode == OP_TYPEMINUPTO;
  -    ecode += 3;
  -    goto REPEATTYPE;
  -
  -    case OP_TYPESTAR:
  -    case OP_TYPEMINSTAR:
  -    case OP_TYPEPLUS:
  -    case OP_TYPEMINPLUS:
  -    case OP_TYPEQUERY:
  -    case OP_TYPEMINQUERY:
  -    c = *ecode++ - OP_TYPESTAR;
  -    minimize = (c & 1) != 0;
  -    min = rep_min[c];                 /* Pick up values from tables; */
  -    max = rep_max[c];                 /* zero for max => infinity */
  -    if (max == 0) max = INT_MAX;
  -
  -    /* Common code for all repeated single character type matches */
  -
  -    REPEATTYPE:
  -    ctype = *ecode++;      /* Code for the character type */
  -
  -    /* First, ensure the minimum number of matches are present. Use inline
  -    code for maximizing the speed, and do the type test once at the start
  -    (i.e. keep it out of the loop). Also we can test that there are at least
  -    the minimum number of bytes before we start, except when doing '.' in
  -    UTF8 mode. Leave the test in in all cases; in the special case we have
  -    to test after each character. */
  -
  -    if (min > md->end_subject - eptr) return FALSE;
  -    if (min > 0) switch(ctype)
  -      {
  -      case OP_ANY:
  +						}
  +						return FALSE;
  +					}
  +				}
  +
  +			case OP_CHARS:
  +				{
  +					register int length = ecode[1];
  +					ecode += 2;
  +
  +					if (length > md->end_subject - eptr)
  +						return FALSE;
  +					if ((ims & PCRE_CASELESS) != 0) {
  +						while (length-- > 0)
  +							if (md->lcc[*ecode++] != md->lcc[*eptr++])
  +								return FALSE;
  +					}
  +					else {
  +						while (length-- > 0)
  +							if (*ecode++ != *eptr++)
  +								return FALSE;
  +					}
  +				}
  +				break;
  +
  +			case OP_EXACT:
  +				min = max = (ecode[1] << 8) + ecode[2];
  +				ecode += 3;
  +				goto REPEATCHAR;
  +
  +			case OP_UPTO:
  +			case OP_MINUPTO:
  +				min = 0;
  +				max = (ecode[1] << 8) + ecode[2];
  +				minimize = *ecode == OP_MINUPTO;
  +				ecode += 3;
  +				goto REPEATCHAR;
  +
  +			case OP_STAR:
  +			case OP_MINSTAR:
  +			case OP_PLUS:
  +			case OP_MINPLUS:
  +			case OP_QUERY:
  +			case OP_MINQUERY:
  +				c = *ecode++ - OP_STAR;
  +				minimize = (c & 1) != 0;
  +				min = rep_min[c];
  +				max = rep_max[c];
  +				if (max == 0)
  +					max = INT_MAX;
  +
  +			  REPEATCHAR:
  +				if (min > md->end_subject - eptr)
  +					return FALSE;
  +				c = *ecode++;
  +
  +				if ((ims & PCRE_CASELESS) != 0) {
  +					c = md->lcc[c];
  +					for (i = 1; i <= min; i++)
  +						if (c != md->lcc[*eptr++])
  +							return FALSE;
  +					if (min == max)
  +						continue;
  +					if (minimize) {
  +						for (i = min;; i++) {
  +							if (match
  +								(eptr, ecode, offset_top, md, ims, eptrb,
  +								 0)) return TRUE;
  +							if (i >= max || eptr >= md->end_subject
  +								|| c != md->lcc[*eptr++])
  +								return FALSE;
  +						}
  +					}
  +					else {
  +						const uschar *pp = eptr;
  +						for (i = min; i < max; i++) {
  +							if (eptr >= md->end_subject
  +								|| c != md->lcc[*eptr]) break;
  +							eptr++;
  +						}
  +						while (eptr >= pp)
  +							if (match
  +								(eptr--, ecode, offset_top, md, ims, eptrb,
  +								 0)) return TRUE;
  +						return FALSE;
  +					}
  +				}
  +
  +				else {
  +					for (i = 1; i <= min; i++)
  +						if (c != *eptr++)
  +							return FALSE;
  +					if (min == max)
  +						continue;
  +					if (minimize) {
  +						for (i = min;; i++) {
  +							if (match
  +								(eptr, ecode, offset_top, md, ims, eptrb,
  +								 0)) return TRUE;
  +							if (i >= max || eptr >= md->end_subject
  +								|| c != *eptr++)
  +								return FALSE;
  +						}
  +					}
  +					else {
  +						const uschar *pp = eptr;
  +						for (i = min; i < max; i++) {
  +							if (eptr >= md->end_subject || c != *eptr)
  +								break;
  +							eptr++;
  +						}
  +						while (eptr >= pp)
  +							if (match
  +								(eptr--, ecode, offset_top, md, ims, eptrb,
  +								 0)) return TRUE;
  +						return FALSE;
  +					}
  +				}
  +
  +			case OP_NOT:
  +				if (eptr >= md->end_subject)
  +					return FALSE;
  +				ecode++;
  +				if ((ims & PCRE_CASELESS) != 0) {
  +					if (md->lcc[*ecode++] == md->lcc[*eptr++])
  +						return FALSE;
  +				}
  +				else {
  +					if (*ecode++ == *eptr++)
  +						return FALSE;
  +				}
  +				break;
  +
  +			case OP_NOTEXACT:
  +				min = max = (ecode[1] << 8) + ecode[2];
  +				ecode += 3;
  +				goto REPEATNOTCHAR;
  +
  +			case OP_NOTUPTO:
  +			case OP_NOTMINUPTO:
  +				min = 0;
  +				max = (ecode[1] << 8) + ecode[2];
  +				minimize = *ecode == OP_NOTMINUPTO;
  +				ecode += 3;
  +				goto REPEATNOTCHAR;
  +
  +			case OP_NOTSTAR:
  +			case OP_NOTMINSTAR:
  +			case OP_NOTPLUS:
  +			case OP_NOTMINPLUS:
  +			case OP_NOTQUERY:
  +			case OP_NOTMINQUERY:
  +				c = *ecode++ - OP_NOTSTAR;
  +				minimize = (c & 1) != 0;
  +				min = rep_min[c];
  +				max = rep_max[c];
  +				if (max == 0)
  +					max = INT_MAX;
  +
  +			  REPEATNOTCHAR:
  +				if (min > md->end_subject - eptr)
  +					return FALSE;
  +				c = *ecode++;
  +
  +				if ((ims & PCRE_CASELESS) != 0) {
  +					c = md->lcc[c];
  +					for (i = 1; i <= min; i++)
  +						if (c == md->lcc[*eptr++])
  +							return FALSE;
  +					if (min == max)
  +						continue;
  +					if (minimize) {
  +						for (i = min;; i++) {
  +							if (match
  +								(eptr, ecode, offset_top, md, ims, eptrb,
  +								 0)) return TRUE;
  +							if (i >= max || eptr >= md->end_subject
  +								|| c == md->lcc[*eptr++])
  +								return FALSE;
  +						}
  +					}
  +					else {
  +						const uschar *pp = eptr;
  +						for (i = min; i < max; i++) {
  +							if (eptr >= md->end_subject
  +								|| c == md->lcc[*eptr]) break;
  +							eptr++;
  +						}
  +						while (eptr >= pp)
  +							if (match
  +								(eptr--, ecode, offset_top, md, ims, eptrb,
  +								 0)) return TRUE;
  +						return FALSE;
  +					}
  +				}
  +
  +				else {
  +					for (i = 1; i <= min; i++)
  +						if (c == *eptr++)
  +							return FALSE;
  +					if (min == max)
  +						continue;
  +					if (minimize) {
  +						for (i = min;; i++) {
  +							if (match
  +								(eptr, ecode, offset_top, md, ims, eptrb,
  +								 0)) return TRUE;
  +							if (i >= max || eptr >= md->end_subject
  +								|| c == *eptr++)
  +								return FALSE;
  +						}
  +					}
  +					else {
  +						const uschar *pp = eptr;
  +						for (i = min; i < max; i++) {
  +							if (eptr >= md->end_subject || c == *eptr)
  +								break;
  +							eptr++;
  +						}
  +						while (eptr >= pp)
  +							if (match
  +								(eptr--, ecode, offset_top, md, ims, eptrb,
  +								 0)) return TRUE;
  +						return FALSE;
  +					}
  +				}
  +
  +			case OP_TYPEEXACT:
  +				min = max = (ecode[1] << 8) + ecode[2];
  +				minimize = TRUE;
  +				ecode += 3;
  +				goto REPEATTYPE;
  +
  +			case OP_TYPEUPTO:
  +			case OP_TYPEMINUPTO:
  +				min = 0;
  +				max = (ecode[1] << 8) + ecode[2];
  +				minimize = *ecode == OP_TYPEMINUPTO;
  +				ecode += 3;
  +				goto REPEATTYPE;
  +
  +			case OP_TYPESTAR:
  +			case OP_TYPEMINSTAR:
  +			case OP_TYPEPLUS:
  +			case OP_TYPEMINPLUS:
  +			case OP_TYPEQUERY:
  +			case OP_TYPEMINQUERY:
  +				c = *ecode++ - OP_TYPESTAR;
  +				minimize = (c & 1) != 0;
  +				min = rep_min[c];
  +				max = rep_max[c];
  +				if (max == 0)
  +					max = INT_MAX;
  +
  +			  REPEATTYPE:
  +				ctype = *ecode++;
  +
  +				if (min > md->end_subject - eptr)
  +					return FALSE;
  +				if (min > 0)
  +					switch (ctype) {
  +						case OP_ANY:
   #ifdef L2_UT_PCRE_SUPPORT_UTF8
  -      if (md->utf8)
  -        {
  -        for (i = 1; i <= min; i++)
  -          {
  -          if (eptr >= md->end_subject ||
  -             (*eptr++ == '\n' && (ims & PCRE_DOTALL) == 0))
  -            return FALSE;
  -          while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
  -          }
  -        break;
  -        }
  +							if (md->utf8) {
  +								for (i = 1; i <= min; i++) {
  +									if (eptr >= md->end_subject ||
  +										(*eptr++ == '\n'
  +										 && (ims & PCRE_DOTALL) == 0))
  +										return FALSE;
  +									while (eptr < md->end_subject
  +										   && (*eptr & 0xc0) == 0x80)
  +										eptr++;
  +								}
  +								break;
  +							}
   #endif
  -      /* Non-UTF8 can be faster */
  -      if ((ims & PCRE_DOTALL) == 0)
  -        { for (i = 1; i <= min; i++) if (*eptr++ == '\n') return FALSE; }
  -      else eptr += min;
  -      break;
  -
  -      case OP_NOT_DIGIT:
  -      for (i = 1; i <= min; i++)
  -        if ((md->ctypes[*eptr++] & ctype_digit) != 0) return FALSE;
  -      break;
  -
  -      case OP_DIGIT:
  -      for (i = 1; i <= min; i++)
  -        if ((md->ctypes[*eptr++] & ctype_digit) == 0) return FALSE;
  -      break;
  -
  -      case OP_NOT_WHITESPACE:
  -      for (i = 1; i <= min; i++)
  -        if ((md->ctypes[*eptr++] & ctype_space) != 0) return FALSE;
  -      break;
  -
  -      case OP_WHITESPACE:
  -      for (i = 1; i <= min; i++)
  -        if ((md->ctypes[*eptr++] & ctype_space) == 0) return FALSE;
  -      break;
  -
  -      case OP_NOT_WORDCHAR:
  -      for (i = 1; i <= min; i++)
  -        if ((md->ctypes[*eptr++] & ctype_word) != 0)
  -          return FALSE;
  -      break;
  -
  -      case OP_WORDCHAR:
  -      for (i = 1; i <= min; i++)
  -        if ((md->ctypes[*eptr++] & ctype_word) == 0)
  -          return FALSE;
  -      break;
  -      }
  -
  -    /* If min = max, continue at the same level without recursing */
  -
  -    if (min == max) continue;
  -
  -    /* If minimizing, we have to test the rest of the pattern before each
  -    subsequent match. */
  -
  -    if (minimize)
  -      {
  -      for (i = min;; i++)
  -        {
  -        if (match(eptr, ecode, offset_top, md, ims, eptrb, 0)) return TRUE;
  -        if (i >= max || eptr >= md->end_subject) return FALSE;
  -
  -        c = *eptr++;
  -        switch(ctype)
  -          {
  -          case OP_ANY:
  -          if ((ims & PCRE_DOTALL) == 0 && c == '\n') return FALSE;
  +							if ((ims & PCRE_DOTALL) == 0) {
  +								for (i = 1; i <= min; i++)
  +									if (*eptr++ == '\n')
  +										return FALSE;
  +							}
  +							else
  +								eptr += min;
  +							break;
  +
  +						case OP_NOT_DIGIT:
  +							for (i = 1; i <= min; i++)
  +								if ((md->ctypes[*eptr++] & ctype_digit) != 0)
  +									return FALSE;
  +							break;
  +
  +						case OP_DIGIT:
  +							for (i = 1; i <= min; i++)
  +								if ((md->ctypes[*eptr++] & ctype_digit) == 0)
  +									return FALSE;
  +							break;
  +
  +						case OP_NOT_WHITESPACE:
  +							for (i = 1; i <= min; i++)
  +								if ((md->ctypes[*eptr++] & ctype_space) != 0)
  +									return FALSE;
  +							break;
  +
  +						case OP_WHITESPACE:
  +							for (i = 1; i <= min; i++)
  +								if ((md->ctypes[*eptr++] & ctype_space) == 0)
  +									return FALSE;
  +							break;
  +
  +						case OP_NOT_WORDCHAR:
  +							for (i = 1; i <= min; i++)
  +								if ((md->ctypes[*eptr++] & ctype_word) != 0)
  +									return FALSE;
  +							break;
  +
  +						case OP_WORDCHAR:
  +							for (i = 1; i <= min; i++)
  +								if ((md->ctypes[*eptr++] & ctype_word) == 0)
  +									return FALSE;
  +							break;
  +					}
  +
  +				if (min == max)
  +					continue;
  +
  +				if (minimize) {
  +					for (i = min;; i++) {
  +						if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
  +							return TRUE;
  +						if (i >= max || eptr >= md->end_subject)
  +							return FALSE;
  +
  +						c = *eptr++;
  +						switch (ctype) {
  +							case OP_ANY:
  +								if ((ims & PCRE_DOTALL) == 0 && c == '\n')
  +									return FALSE;
   #ifdef L2_UT_PCRE_SUPPORT_UTF8
  -          if (md->utf8)
  -            while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
  +								if (md->utf8)
  +									while (eptr < md->end_subject
  +										   && (*eptr & 0xc0) == 0x80)
  +										eptr++;
   #endif
  -          break;
  -
  -          case OP_NOT_DIGIT:
  -          if ((md->ctypes[c] & ctype_digit) != 0) return FALSE;
  -          break;
  -
  -          case OP_DIGIT:
  -          if ((md->ctypes[c] & ctype_digit) == 0) return FALSE;
  -          break;
  -
  -          case OP_NOT_WHITESPACE:
  -          if ((md->ctypes[c] & ctype_space) != 0) return FALSE;
  -          break;
  -
  -          case OP_WHITESPACE:
  -          if  ((md->ctypes[c] & ctype_space) == 0) return FALSE;
  -          break;
  -
  -          case OP_NOT_WORDCHAR:
  -          if ((md->ctypes[c] & ctype_word) != 0) return FALSE;
  -          break;
  -
  -          case OP_WORDCHAR:
  -          if ((md->ctypes[c] & ctype_word) == 0) return FALSE;
  -          break;
  -          }
  -        }
  -      /* Control never gets here */
  -      }
  -
  -    /* If maximizing it is worth using inline code for speed, doing the type
  -    test once at the start (i.e. keep it out of the loop). */
  -
  -    else
  -      {
  -      const uschar *pp = eptr;
  -      switch(ctype)
  -        {
  -        case OP_ANY:
  +								break;
   
  -        /* Special code is required for UTF8, but when the maximum is unlimited
  -        we don't need it. */
  +							case OP_NOT_DIGIT:
  +								if ((md->ctypes[c] & ctype_digit) != 0)
  +									return FALSE;
  +								break;
  +
  +							case OP_DIGIT:
  +								if ((md->ctypes[c] & ctype_digit) == 0)
  +									return FALSE;
  +								break;
  +
  +							case OP_NOT_WHITESPACE:
  +								if ((md->ctypes[c] & ctype_space) != 0)
  +									return FALSE;
  +								break;
  +
  +							case OP_WHITESPACE:
  +								if ((md->ctypes[c] & ctype_space) == 0)
  +									return FALSE;
  +								break;
  +
  +							case OP_NOT_WORDCHAR:
  +								if ((md->ctypes[c] & ctype_word) != 0)
  +									return FALSE;
  +								break;
  +
  +							case OP_WORDCHAR:
  +								if ((md->ctypes[c] & ctype_word) == 0)
  +									return FALSE;
  +								break;
  +						}
  +					}
  +				}
  +
  +				else {
  +					const uschar *pp = eptr;
  +					switch (ctype) {
  +						case OP_ANY:
   
   #ifdef L2_UT_PCRE_SUPPORT_UTF8
  -        if (md->utf8 && max < INT_MAX)
  -          {
  -          if ((ims & PCRE_DOTALL) == 0)
  -            {
  -            for (i = min; i < max; i++)
  -              {
  -              if (eptr >= md->end_subject || *eptr++ == '\n') break;
  -              while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
  -              }
  -            }
  -          else
  -            {
  -            for (i = min; i < max; i++)
  -              {
  -              eptr++;
  -              while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
  -              }
  -            }
  -          break;
  -          }
  +							if (md->utf8 && max < INT_MAX) {
  +								if ((ims & PCRE_DOTALL) == 0) {
  +									for (i = min; i < max; i++) {
  +										if (eptr >= md->end_subject
  +											|| *eptr++ == '\n')
  +											break;
  +										while (eptr < md->end_subject
  +											   && (*eptr & 0xc0) == 0x80)
  +											eptr++;
  +									}
  +								}
  +								else {
  +									for (i = min; i < max; i++) {
  +										eptr++;
  +										while (eptr < md->end_subject
  +											   && (*eptr & 0xc0) == 0x80)
  +											eptr++;
  +									}
  +								}
  +								break;
  +							}
   #endif
  -        /* Non-UTF8 can be faster */
  -        if ((ims & PCRE_DOTALL) == 0)
  -          {
  -          for (i = min; i < max; i++)
  -            {
  -            if (eptr >= md->end_subject || *eptr == '\n') break;
  -            eptr++;
  -            }
  -          }
  -        else
  -          {
  -          c = max - min;
  -          if (c > md->end_subject - eptr) c = md->end_subject - eptr;
  -          eptr += c;
  -          }
  -        break;
  -
  -        case OP_NOT_DIGIT:
  -        for (i = min; i < max; i++)
  -          {
  -          if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_digit) != 0)
  -            break;
  -          eptr++;
  -          }
  -        break;
  -
  -        case OP_DIGIT:
  -        for (i = min; i < max; i++)
  -          {
  -          if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_digit) == 0)
  -            break;
  -          eptr++;
  -          }
  -        break;
  -
  -        case OP_NOT_WHITESPACE:
  -        for (i = min; i < max; i++)
  -          {
  -          if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_space) != 0)
  -            break;
  -          eptr++;
  -          }
  -        break;
  -
  -        case OP_WHITESPACE:
  -        for (i = min; i < max; i++)
  -          {
  -          if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_space) == 0)
  -            break;
  -          eptr++;
  -          }
  -        break;
  -
  -        case OP_NOT_WORDCHAR:
  -        for (i = min; i < max; i++)
  -          {
  -          if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_word) != 0)
  -            break;
  -          eptr++;
  -          }
  -        break;
  -
  -        case OP_WORDCHAR:
  -        for (i = min; i < max; i++)
  -          {
  -          if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_word) == 0)
  -            break;
  -          eptr++;
  -          }
  -        break;
  -        }
  -
  -      while (eptr >= pp)
  -        {
  -        if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
  -          return TRUE;
  +							if ((ims & PCRE_DOTALL) == 0) {
  +								for (i = min; i < max; i++) {
  +									if (eptr >= md->end_subject
  +										|| *eptr == '\n') break;
  +									eptr++;
  +								}
  +							}
  +							else {
  +								c = max - min;
  +								if (c > md->end_subject - eptr)
  +									c = md->end_subject - eptr;
  +								eptr += c;
  +							}
  +							break;
  +
  +						case OP_NOT_DIGIT:
  +							for (i = min; i < max; i++) {
  +								if (eptr >= md->end_subject
  +									|| (md->ctypes[*eptr] & ctype_digit) != 0)
  +									break;
  +								eptr++;
  +							}
  +							break;
  +
  +						case OP_DIGIT:
  +							for (i = min; i < max; i++) {
  +								if (eptr >= md->end_subject
  +									|| (md->ctypes[*eptr] & ctype_digit) == 0)
  +									break;
  +								eptr++;
  +							}
  +							break;
  +
  +						case OP_NOT_WHITESPACE:
  +							for (i = min; i < max; i++) {
  +								if (eptr >= md->end_subject
  +									|| (md->ctypes[*eptr] & ctype_space) != 0)
  +									break;
  +								eptr++;
  +							}
  +							break;
  +
  +						case OP_WHITESPACE:
  +							for (i = min; i < max; i++) {
  +								if (eptr >= md->end_subject
  +									|| (md->ctypes[*eptr] & ctype_space) == 0)
  +									break;
  +								eptr++;
  +							}
  +							break;
  +
  +						case OP_NOT_WORDCHAR:
  +							for (i = min; i < max; i++) {
  +								if (eptr >= md->end_subject
  +									|| (md->ctypes[*eptr] & ctype_word) != 0)
  +									break;
  +								eptr++;
  +							}
  +							break;
  +
  +						case OP_WORDCHAR:
  +							for (i = min; i < max; i++) {
  +								if (eptr >= md->end_subject
  +									|| (md->ctypes[*eptr] & ctype_word) == 0)
  +									break;
  +								eptr++;
  +							}
  +							break;
  +					}
  +
  +					while (eptr >= pp) {
  +						if (match
  +							(eptr--, ecode, offset_top, md, ims, eptrb,
  +							 0)) return TRUE;
   #ifdef L2_UT_PCRE_SUPPORT_UTF8
  -        if (md->utf8)
  -          while (eptr > pp && (*eptr & 0xc0) == 0x80) eptr--;
  +						if (md->utf8)
  +							while (eptr > pp && (*eptr & 0xc0) == 0x80)
  +								eptr--;
   #endif
  -        }
  -      return FALSE;
  -      }
  -    /* Control never gets here */
  +					}
  +					return FALSE;
  +				}
   
  -    /* There's been some horrible disaster. */
  +			default:
   
  -    default:
  +				md->errorcode = PCRE_ERROR_UNKNOWN_NODE;
  +				return FALSE;
  +		}
   
  -    md->errorcode = PCRE_ERROR_UNKNOWN_NODE;
  -    return FALSE;
  -    }
  -
  -  /* Do not stick any code in here without much thought; it is assumed
  -  that "continue" in the code above comes out to here to repeat the main
  -  loop. */
  -
  -  }
  -/* Control never reaches here */
  +	}
   }
   
  -/*************************************************
  -*         Execute a Regular Expression           *
  -*************************************************/
  -
  -/* This function applies a compiled re to a subject string and picks out
  -portions of the string if it matches. Two elements in the vector are set for
  -each substring: the offsets to the start and end of the substring.
  -
  -Arguments:
  -  external_re     points to the compiled expression
  -  external_extra  points to "hints" from pcre_study() or is NULL
  -  subject         points to the subject string
  -  length          length of subject string (may contain binary zeros)
  -  start_offset    where to start in the subject string
  -  options         option bits
  -  offsets         points to a vector of ints to be filled in with offsets
  -  offsetcount     the number of elements in the vector
  -
  -Returns:          > 0 => success; value is the number of elements filled in
  -                  = 0 => success, but offsets is not big enough
  -                   -1 => failed to match
  -                 < -1 => some kind of unexpected problem
  -*/
  -
   int
  -pcre_exec(const pcre *external_re, const pcre_extra *external_extra,
  -  const char *subject, int length, int start_offset, int options, int *offsets,
  -  int offsetcount)
  +pcre_exec(const pcre * external_re, const pcre_extra * external_extra,
  +		  const char *subject, int length, int start_offset, int options,
  +		  int *offsets, int offsetcount)
   {
  -int resetcount, ocount;
  -int first_char = -1;
  -int req_char = -1;
  -int req_char2 = -1;
  -unsigned long int ims = 0;
  -match_data match_block;
  -const uschar *start_bits = NULL;
  -const uschar *start_match = (const uschar *)subject + start_offset;
  -const uschar *end_subject;
  -const uschar *req_char_ptr = start_match - 1;
  -const real_pcre *re = (const real_pcre *)external_re;
  -const real_pcre_extra *extra = (const real_pcre_extra *)external_extra;
  -BOOL using_temporary_offsets = FALSE;
  -BOOL anchored;
  -BOOL startline;
  -
  -if ((options & ~PUBLIC_EXEC_OPTIONS) != 0) return PCRE_ERROR_BADOPTION;
  -
  -if (re == NULL || subject == NULL ||
  -   (offsets == NULL && offsetcount > 0)) return PCRE_ERROR_NULL;
  -if (re->magic_number != MAGIC_NUMBER) return PCRE_ERROR_BADMAGIC;
  -
  -anchored = ((re->options | options) & PCRE_ANCHORED) != 0;
  -startline = (re->options & PCRE_STARTLINE) != 0;
  -
  -match_block.start_pattern = re->code;
  -match_block.start_subject = (const uschar *)subject;
  -match_block.end_subject = match_block.start_subject + length;
  -end_subject = match_block.end_subject;
  -
  -match_block.endonly = (re->options & PCRE_DOLLAR_ENDONLY) != 0;
  -match_block.utf8 = (re->options & PCRE_UTF8) != 0;
  -
  -match_block.notbol = (options & PCRE_NOTBOL) != 0;
  -match_block.noteol = (options & PCRE_NOTEOL) != 0;
  -match_block.notempty = (options & PCRE_NOTEMPTY) != 0;
  -
  -match_block.errorcode = PCRE_ERROR_NOMATCH;     /* Default error */
  -
  -match_block.lcc = re->tables + lcc_offset;
  -match_block.ctypes = re->tables + ctypes_offset;
  -
  -/* The ims options can vary during the matching as a result of the presence
  -of (?ims) items in the pattern. They are kept in a local variable so that
  -restoring at the exit of a group is easy. */
  -
  -ims = re->options & (PCRE_CASELESS|PCRE_MULTILINE|PCRE_DOTALL);
  -
  -/* If the expression has got more back references than the offsets supplied can
  -hold, we get a temporary bit of working store to use during the matching.
  -Otherwise, we can use the vector supplied, rounding down its size to a multiple
  -of 3. */
  -
  -ocount = offsetcount - (offsetcount % 3);
  -
  -if (re->top_backref > 0 && re->top_backref >= ocount/3)
  -  {
  -  ocount = re->top_backref * 3 + 3;
  -  match_block.offset_vector = (int *)(pcre_malloc)(ocount * sizeof(int));
  -  if (match_block.offset_vector == NULL) return PCRE_ERROR_NOMEMORY;
  -  using_temporary_offsets = TRUE;
  -
  -  }
  -else match_block.offset_vector = offsets;
  -
  -match_block.offset_end = ocount;
  -match_block.offset_max = (2*ocount)/3;
  -match_block.offset_overflow = FALSE;
  -
  -/* Compute the minimum number of offsets that we need to reset each time. Doing
  -this makes a huge difference to execution time when there aren't many brackets
  -in the pattern. */
  -
  -resetcount = 2 + re->top_bracket * 2;
  -if (resetcount > offsetcount) resetcount = ocount;
  -
  -/* Reset the working variable associated with each extraction. These should
  -never be used unless previously set, but they get saved and restored, and so we
  -initialize them to avoid reading uninitialized locations. */
  -
  -if (match_block.offset_vector != NULL)
  -  {
  -  register int *iptr = match_block.offset_vector + ocount;
  -  register int *iend = iptr - resetcount/2 + 1;
  -  while (--iptr >= iend) *iptr = -1;
  -  }
  -
  -/* Set up the first character to match, if available. The first_char value is
  -never set for an anchored regular expression, but the anchoring may be forced
  -at run time, so we have to test for anchoring. The first char may be unset for
  -an unanchored pattern, of course. If there's no first char and the pattern was
  -studied, there may be a bitmap of possible first characters. */
  -
  -if (!anchored)
  -  {
  -  if ((re->options & PCRE_FIRSTSET) != 0)
  -    {
  -    first_char = re->first_char;
  -    if ((ims & PCRE_CASELESS) != 0) first_char = match_block.lcc[first_char];
  -    }
  -  else
  -    if (!startline && extra != NULL &&
  -      (extra->options & PCRE_STUDY_MAPPED) != 0)
  -        start_bits = extra->start_bits;
  -  }
  -
  -/* For anchored or unanchored matches, there may be a "last known required
  -character" set. If the PCRE_CASELESS is set, implying that the match starts
  -caselessly, or if there are any changes of this flag within the regex, set up
  -both cases of the character. Otherwise set the two values the same, which will
  -avoid duplicate testing (which takes significant time). This covers the vast
  -majority of cases. It will be suboptimal when the case flag changes in a regex
  -and the required character in fact is caseful. */
  -
  -if ((re->options & PCRE_REQCHSET) != 0)
  -  {
  -  req_char = re->req_char;
  -  req_char2 = ((re->options & (PCRE_CASELESS | PCRE_ICHANGED)) != 0)?
  -    (re->tables + fcc_offset)[req_char] : req_char;
  -  }
  -
  -/* Loop for handling unanchored repeated matching attempts; for anchored regexs
  -the loop runs just once. */
  -
  -do
  -  {
  -  int rc;
  -  register int *iptr = match_block.offset_vector;
  -  register int *iend = iptr + resetcount;
  -
  -  /* Reset the maximum number of extractions we might see. */
  -
  -  while (iptr < iend) *iptr++ = -1;
  -
  -  /* Advance to a unique first char if possible */
  -
  -  if (first_char >= 0)
  -    {
  -    if ((ims & PCRE_CASELESS) != 0)
  -      while (start_match < end_subject &&
  -             match_block.lcc[*start_match] != first_char)
  -        start_match++;
  -    else
  -      while (start_match < end_subject && *start_match != first_char)
  -        start_match++;
  -    }
  -
  -  /* Or to just after \n for a multiline match if possible */
  -
  -  else if (startline)
  -    {
  -    if (start_match > match_block.start_subject + start_offset)
  -      {
  -      while (start_match < end_subject && start_match[-1] != '\n')
  -        start_match++;
  -      }
  -    }
  -
  -  /* Or to a non-unique first char after study */
  -
  -  else if (start_bits != NULL)
  -    {
  -    while (start_match < end_subject)
  -      {
  -      register int c = *start_match;
  -      if ((start_bits[c/8] & (1 << (c&7))) == 0) start_match++; else break;
  -      }
  -    }
  +	int resetcount, ocount;
  +	int first_char = -1;
  +	int req_char = -1;
  +	int req_char2 = -1;
  +	unsigned long int ims = 0;
  +	match_data match_block;
  +	const uschar *start_bits = NULL;
  +	const uschar *start_match = (const uschar *)subject + start_offset;
  +	const uschar *end_subject;
  +	const uschar *req_char_ptr = start_match - 1;
  +	const real_pcre *re = (const real_pcre *)external_re;
  +	const real_pcre_extra *extra = (const real_pcre_extra *)external_extra;
  +	BOOL using_temporary_offsets = FALSE;
  +	BOOL anchored;
  +	BOOL startline;
  +
  +	if ((options & ~PUBLIC_EXEC_OPTIONS) != 0)
  +		return PCRE_ERROR_BADOPTION;
  +
  +	if (re == NULL || subject == NULL || (offsets == NULL && offsetcount > 0))
  +		return PCRE_ERROR_NULL;
  +	if (re->magic_number != MAGIC_NUMBER)
  +		return PCRE_ERROR_BADMAGIC;
  +
  +	anchored = ((re->options | options) & PCRE_ANCHORED) != 0;
  +	startline = (re->options & PCRE_STARTLINE) != 0;
  +
  +	match_block.start_pattern = re->code;
  +	match_block.start_subject = (const uschar *)subject;
  +	match_block.end_subject = match_block.start_subject + length;
  +	end_subject = match_block.end_subject;
  +
  +	match_block.endonly = (re->options & PCRE_DOLLAR_ENDONLY) != 0;
  +	match_block.utf8 = (re->options & PCRE_UTF8) != 0;
  +
  +	match_block.notbol = (options & PCRE_NOTBOL) != 0;
  +	match_block.noteol = (options & PCRE_NOTEOL) != 0;
  +	match_block.notempty = (options & PCRE_NOTEMPTY) != 0;
  +
  +	match_block.errorcode = PCRE_ERROR_NOMATCH;
  +
  +	match_block.lcc = re->tables + lcc_offset;
  +	match_block.ctypes = re->tables + ctypes_offset;
  +
  +	ims = re->options & (PCRE_CASELESS | PCRE_MULTILINE | PCRE_DOTALL);
  +
  +	ocount = offsetcount - (offsetcount % 3);
  +
  +	if (re->top_backref > 0 && re->top_backref >= ocount / 3) {
  +		ocount = re->top_backref * 3 + 3;
  +		match_block.offset_vector =
  +			(int *)(pcre_malloc) (ocount * sizeof (int));
  +		if (match_block.offset_vector == NULL)
  +			return PCRE_ERROR_NOMEMORY;
  +		using_temporary_offsets = TRUE;
  +
  +	}
  +	else
  +		match_block.offset_vector = offsets;
  +
  +	match_block.offset_end = ocount;
  +	match_block.offset_max = (2 * ocount) / 3;
  +	match_block.offset_overflow = FALSE;
  +
  +	resetcount = 2 + re->top_bracket * 2;
  +	if (resetcount > offsetcount)
  +		resetcount = ocount;
  +
  +	if (match_block.offset_vector != NULL) {
  +		register int *iptr = match_block.offset_vector + ocount;
  +		register int *iend = iptr - resetcount / 2 + 1;
  +		while (--iptr >= iend)
  +			*iptr = -1;
  +	}
  +
  +	if (!anchored) {
  +		if ((re->options & PCRE_FIRSTSET) != 0) {
  +			first_char = re->first_char;
  +			if ((ims & PCRE_CASELESS) != 0)
  +				first_char = match_block.lcc[first_char];
  +		}
  +		else
  +			if (!startline && extra != NULL &&
  +				(extra->options & PCRE_STUDY_MAPPED) != 0)
  +			start_bits = extra->start_bits;
  +	}
  +
  +	if ((re->options & PCRE_REQCHSET) != 0) {
  +		req_char = re->req_char;
  +		req_char2 = ((re->options & (PCRE_CASELESS | PCRE_ICHANGED)) != 0) ?
  +			(re->tables + fcc_offset)[req_char] : req_char;
  +	}
  +
  +	do {
  +		int rc;
  +		register int *iptr = match_block.offset_vector;
  +		register int *iend = iptr + resetcount;
  +
  +		while (iptr < iend)
  +			*iptr++ = -1;
  +
  +		if (first_char >= 0) {
  +			if ((ims & PCRE_CASELESS) != 0)
  +				while (start_match < end_subject &&
  +					   match_block.lcc[*start_match] != first_char)
  +					start_match++;
  +			else
  +				while (start_match < end_subject
  +					   && *start_match != first_char) start_match++;
  +		}
  +
  +		else if (startline) {
  +			if (start_match > match_block.start_subject + start_offset) {
  +				while (start_match < end_subject && start_match[-1] != '\n')
  +					start_match++;
  +			}
  +		}
  +
  +		else if (start_bits != NULL) {
  +			while (start_match < end_subject) {
  +				register int c = *start_match;
  +				if ((start_bits[c / 8] & (1 << (c & 7))) == 0)
  +					start_match++;
  +				else
  +					break;
  +			}
  +		}
  +
  +		if (req_char >= 0) {
  +			register const uschar *p =
  +				start_match + ((first_char >= 0) ? 1 : 0);
  +
  +			if (p > req_char_ptr) {
  +				if (req_char == req_char2) {
  +					while (p < end_subject) {
  +						if (*p++ == req_char) {
  +							p--;
  +							break;
  +						}
  +					}
  +				}
  +
  +				else {
  +					while (p < end_subject) {
  +						register int pp = *p++;
  +						if (pp == req_char || pp == req_char2) {
  +							p--;
  +							break;
  +						}
  +					}
  +				}
  +
  +				if (p >= end_subject)
  +					break;
  +
  +				req_char_ptr = p;
  +			}
  +		}
  +
  +		match_block.start_match = start_match;
  +		if (!match
  +			(start_match, re->code, 2, &match_block, ims, NULL,
  +			 match_isgroup)) continue;
  +
  +		if (using_temporary_offsets) {
  +			if (offsetcount >= 4) {
  +				memcpy(offsets + 2, match_block.offset_vector + 2,
  +					   (offsetcount - 2) * sizeof (int));
  +
  +			}
  +			if (match_block.end_offset_top > offsetcount)
  +				match_block.offset_overflow = TRUE;
  +
  +			(pcre_free) (match_block.offset_vector);
  +		}
  +
  +		rc = match_block.offset_overflow ? 0 : match_block.end_offset_top / 2;
  +
  +		if (match_block.offset_end < 2)
  +			rc = 0;
  +		else {
  +			offsets[0] = start_match - match_block.start_subject;
  +			offsets[1] =
  +				match_block.end_match_ptr - match_block.start_subject;
  +		}
  +
  +		return rc;
  +	}
  +
  +	while (!anchored &&
  +		   match_block.errorcode == PCRE_ERROR_NOMATCH &&
  +		   start_match++ < end_subject);
   
  -  /* If req_char is set, we know that that character must appear in the subject
  -  for the match to succeed. If the first character is set, req_char must be
  -  later in the subject; otherwise the test starts at the match point. This
  -  optimization can save a huge amount of backtracking in patterns with nested
  -  unlimited repeats that aren't going to match. We don't know what the state of
  -  case matching may be when this character is hit, so test for it in both its
  -  cases if necessary. However, the different cased versions will not be set up
  -  unless PCRE_CASELESS was given or the casing state changes within the regex.
  -  Writing separate code makes it go faster, as does using an autoincrement and
  -  backing off on a match. */
  -
  -  if (req_char >= 0)
  -    {
  -    register const uschar *p = start_match + ((first_char >= 0)? 1 : 0);
  -
  -    /* We don't need to repeat the search if we haven't yet reached the
  -    place we found it at last time. */
  -
  -    if (p > req_char_ptr)
  -      {
  -      /* Do a single test if no case difference is set up */
  -
  -      if (req_char == req_char2)
  -        {
  -        while (p < end_subject)
  -          {
  -          if (*p++ == req_char) { p--; break; }
  -          }
  -        }
  -
  -      /* Otherwise test for either case */
  -
  -      else
  -        {
  -        while (p < end_subject)
  -          {
  -          register int pp = *p++;
  -          if (pp == req_char || pp == req_char2) { p--; break; }
  -          }
  -        }
  -
  -      /* If we can't find the required character, break the matching loop */
  -
  -      if (p >= end_subject) break;
  -
  -      /* If we have found the required character, save the point where we
  -      found it, so that we don't search again next time round the loop if
  -      the start hasn't passed this character yet. */
  +	if (using_temporary_offsets) {
   
  -      req_char_ptr = p;
  -      }
  -    }
  -
  -  /* When a match occurs, substrings will be set for all internal extractions;
  -  we just need to set up the whole thing as substring 0 before returning. If
  -  there were too many extractions, set the return code to zero. In the case
  -  where we had to get some local store to hold offsets for backreferences, copy
  -  those back references that we can. In this case there need not be overflow
  -  if certain parts of the pattern were not used. */
  -
  -  match_block.start_match = start_match;
  -  if (!match(start_match, re->code, 2, &match_block, ims, NULL, match_isgroup))
  -    continue;
  -
  -  /* Copy the offset information from temporary store if necessary */
  -
  -  if (using_temporary_offsets)
  -    {
  -    if (offsetcount >= 4)
  -      {
  -      memcpy(offsets + 2, match_block.offset_vector + 2,
  -        (offsetcount - 2) * sizeof(int));
  -
  -      }
  -    if (match_block.end_offset_top > offsetcount)
  -      match_block.offset_overflow = TRUE;
  -
  -    (pcre_free)(match_block.offset_vector);
  -    }
  -
  -  rc = match_block.offset_overflow? 0 : match_block.end_offset_top/2;
  -
  -  if (match_block.offset_end < 2) rc = 0; else
  -    {
  -    offsets[0] = start_match - match_block.start_subject;
  -    offsets[1] = match_block.end_match_ptr - match_block.start_subject;
  -    }
  +		(pcre_free) (match_block.offset_vector);
  +	}
   
  -  return rc;
  -  }
  -
  -/* This "while" is the end of the "do" above */
  -
  -while (!anchored &&
  -       match_block.errorcode == PCRE_ERROR_NOMATCH &&
  -       start_match++ < end_subject);
  -
  -if (using_temporary_offsets)
  -  {
  -
  -  (pcre_free)(match_block.offset_vector);
  -  }
  -
  -return match_block.errorcode;
  +	return match_block.errorcode;
   }
   
  -/* ____ END pcre.c ____ */
  -
  -/* ____ BEGIN study.c ____ */
  -
  -/* Include the internals header, which itself includes Standard C headers plus
  -the external pcre header. */
  -
  -/*************************************************
  -*      Set a bit and maybe its alternate case    *
  -*************************************************/
  -
  -/* Given a character, set its bit in the table, and also the bit for the other
  -version of a letter if we are caseless.
  -
  -Arguments:
  -  start_bits    points to the bit map
  -  c             is the character
  -  caseless      the caseless flag
  -  cd            the block with char table pointers
  -
  -Returns:        nothing
  -*/
  -
   static void
  -set_bit(uschar *start_bits, int c, BOOL caseless, compile_data *cd)
  +set_bit(uschar * start_bits, int c, BOOL caseless, compile_data * cd)
   {
  -start_bits[c/8] |= (1 << (c&7));
  -if (caseless && (cd->ctypes[c] & ctype_letter) != 0)
  -  start_bits[cd->fcc[c]/8] |= (1 << (cd->fcc[c]&7));
  +	start_bits[c / 8] |= (1 << (c & 7));
  +	if (caseless && (cd->ctypes[c] & ctype_letter) != 0)
  +		start_bits[cd->fcc[c] / 8] |= (1 << (cd->fcc[c] & 7));
   }
   
  -/*************************************************
  -*          Create bitmap of starting chars       *
  -*************************************************/
  -
  -/* This function scans a compiled unanchored expression and attempts to build a
  -bitmap of the set of initial characters. If it can't, it returns FALSE. As time
  -goes by, we may be able to get more clever at doing this.
  -
  -Arguments:
  -  code         points to an expression
  -  start_bits   points to a 32-byte table, initialized to 0
  -  caseless     the current state of the caseless flag
  -  cd           the block with char table pointers
  -
  -Returns:       TRUE if table built, FALSE otherwise
  -*/
  -
   static BOOL
  -set_start_bits(const uschar *code, uschar *start_bits, BOOL caseless,
  -  compile_data *cd)
  +set_start_bits(const uschar * code, uschar * start_bits, BOOL caseless,
  +			   compile_data * cd)
   {
  -register int c;
  +	register int c;
   
  -/* This next statement and the later reference to dummy are here in order to
  -trick the optimizer of the IBM C compiler for OS/2 into generating correct
  -code. Apparently IBM isn't going to fix the problem, and we would rather not
  -disable optimization (in this module it actually makes a big difference, and
  -the pcre module can use all the optimization it can get). */
  -
  -volatile int dummy;
  -
  -do
  -  {
  -  const uschar *tcode = code + 3;
  -  BOOL try_next = TRUE;
  -
  -  while (try_next)
  -    {
  -    /* If a branch starts with a bracket or a positive lookahead assertion,
  -    recurse to set bits from within them. That's all for this branch. */
  -
  -    if ((int)*tcode >= OP_BRA || *tcode == OP_ASSERT)
  -      {
  -      if (!set_start_bits(tcode, start_bits, caseless, cd))
  -        return FALSE;
  -      try_next = FALSE;
  -      }
  -
  -    else switch(*tcode)
  -      {
  -      default:
  -      return FALSE;
  -
  -      /* Skip over extended extraction bracket number */
  -
  -      case OP_BRANUMBER:
  -      tcode += 3;
  -      break;
  -
  -      /* Skip over lookbehind and negative lookahead assertions */
  -
  -      case OP_ASSERT_NOT:
  -      case OP_ASSERTBACK:
  -      case OP_ASSERTBACK_NOT:
  -      do tcode += (tcode[1] << 8) + tcode[2]; while (*tcode == OP_ALT);
  -      tcode += 3;
  -      break;
  -
  -      /* Skip over an option setting, changing the caseless flag */
  -
  -      case OP_OPT:
  -      caseless = (tcode[1] & PCRE_CASELESS) != 0;
  -      tcode += 2;
  -      break;
  -
  -      /* BRAZERO does the bracket, but carries on. */
  -
  -      case OP_BRAZERO:
  -      case OP_BRAMINZERO:
  -      if (!set_start_bits(++tcode, start_bits, caseless, cd))
  -        return FALSE;
  -      dummy = 1;
  -      do tcode += (tcode[1] << 8) + tcode[2]; while (*tcode == OP_ALT);
  -      tcode += 3;
  -      break;
  -
  -      /* Single-char * or ? sets the bit and tries the next item */
  -
  -      case OP_STAR:
  -      case OP_MINSTAR:
  -      case OP_QUERY:
  -      case OP_MINQUERY:
  -      set_bit(start_bits, tcode[1], caseless, cd);
  -      tcode += 2;
  -      break;
  -
  -      /* Single-char upto sets the bit and tries the next */
  -
  -      case OP_UPTO:
  -      case OP_MINUPTO:
  -      set_bit(start_bits, tcode[3], caseless, cd);
  -      tcode += 4;
  -      break;
  -
  -      /* At least one single char sets the bit and stops */
  -
  -      case OP_EXACT:       /* Fall through */
  -      tcode++;
  -
  -      case OP_CHARS:       /* Fall through */
  -      tcode++;
  -
  -      case OP_PLUS:
  -      case OP_MINPLUS:
  -      set_bit(start_bits, tcode[1], caseless, cd);
  -      try_next = FALSE;
  -      break;
  -
  -      /* Single character type sets the bits and stops */
  -
  -      case OP_NOT_DIGIT:
  -      for (c = 0; c < 32; c++)
  -        start_bits[c] |= ~cd->cbits[c+cbit_digit];
  -      try_next = FALSE;
  -      break;
  -
  -      case OP_DIGIT:
  -      for (c = 0; c < 32; c++)
  -        start_bits[c] |= cd->cbits[c+cbit_digit];
  -      try_next = FALSE;
  -      break;
  -
  -      case OP_NOT_WHITESPACE:
  -      for (c = 0; c < 32; c++)
  -        start_bits[c] |= ~cd->cbits[c+cbit_space];
  -      try_next = FALSE;
  -      break;
  -
  -      case OP_WHITESPACE:
  -      for (c = 0; c < 32; c++)
  -        start_bits[c] |= cd->cbits[c+cbit_space];
  -      try_next = FALSE;
  -      break;
  -
  -      case OP_NOT_WORDCHAR:
  -      for (c = 0; c < 32; c++)
  -        start_bits[c] |= ~cd->cbits[c+cbit_word];
  -      try_next = FALSE;
  -      break;
  -
  -      case OP_WORDCHAR:
  -      for (c = 0; c < 32; c++)
  -        start_bits[c] |= cd->cbits[c+cbit_word];
  -      try_next = FALSE;
  -      break;
  -
  -      /* One or more character type fudges the pointer and restarts, knowing
  -      it will hit a single character type and stop there. */
  -
  -      case OP_TYPEPLUS:
  -      case OP_TYPEMINPLUS:
  -      tcode++;
  -      break;
  -
  -      case OP_TYPEEXACT:
  -      tcode += 3;
  -      break;
  -
  -      /* Zero or more repeats of character types set the bits and then
  -      try again. */
  -
  -      case OP_TYPEUPTO:
  -      case OP_TYPEMINUPTO:
  -      tcode += 2;               /* Fall through */
  -
  -      case OP_TYPESTAR:
  -      case OP_TYPEMINSTAR:
  -      case OP_TYPEQUERY:
  -      case OP_TYPEMINQUERY:
  -      switch(tcode[1])
  -        {
  -        case OP_NOT_DIGIT:
  -        for (c = 0; c < 32; c++)
  -          start_bits[c] |= ~cd->cbits[c+cbit_digit];
  -        break;
  -
  -        case OP_DIGIT:
  -        for (c = 0; c < 32; c++)
  -          start_bits[c] |= cd->cbits[c+cbit_digit];
  -        break;
  -
  -        case OP_NOT_WHITESPACE:
  -        for (c = 0; c < 32; c++)
  -          start_bits[c] |= ~cd->cbits[c+cbit_space];
  -        break;
  -
  -        case OP_WHITESPACE:
  -        for (c = 0; c < 32; c++)
  -          start_bits[c] |= cd->cbits[c+cbit_space];
  -        break;
  -
  -        case OP_NOT_WORDCHAR:
  -        for (c = 0; c < 32; c++)
  -          start_bits[c] |= ~cd->cbits[c+cbit_word];
  -        break;
  -
  -        case OP_WORDCHAR:
  -        for (c = 0; c < 32; c++)
  -          start_bits[c] |= cd->cbits[c+cbit_word];
  -        break;
  -        }
  -
  -      tcode += 2;
  -      break;
  -
  -      /* Character class: set the bits and either carry on or not,
  -      according to the repeat count. */
  -
  -      case OP_CLASS:
  -        {
  -        tcode++;
  -        for (c = 0; c < 32; c++) start_bits[c] |= tcode[c];
  -        tcode += 32;
  -        switch (*tcode)
  -          {
  -          case OP_CRSTAR:
  -          case OP_CRMINSTAR:
  -          case OP_CRQUERY:
  -          case OP_CRMINQUERY:
  -          tcode++;
  -          break;
  -
  -          case OP_CRRANGE:
  -          case OP_CRMINRANGE:
  -          if (((tcode[1] << 8) + tcode[2]) == 0) tcode += 5;
  -            else try_next = FALSE;
  -          break;
  -
  -          default:
  -          try_next = FALSE;
  -          break;
  -          }
  -        }
  -      break;
  -
  -      }
  -    }
  +	volatile int dummy;
   
  -  code += (code[1] << 8) + code[2];   /* Advance to next branch */
  -  }
  -while (*code == OP_ALT);
  -return TRUE;
  +	do {
  +		const uschar *tcode = code + 3;
  +		BOOL try_next = TRUE;
  +
  +		while (try_next) {
  +			if ((int)*tcode >= OP_BRA || *tcode == OP_ASSERT) {
  +				if (!set_start_bits(tcode, start_bits, caseless, cd))
  +					return FALSE;
  +				try_next = FALSE;
  +			}
  +
  +			else
  +				switch (*tcode) {
  +					default:
  +						return FALSE;
  +
  +					case OP_BRANUMBER:
  +						tcode += 3;
  +						break;
  +
  +					case OP_ASSERT_NOT:
  +					case OP_ASSERTBACK:
  +					case OP_ASSERTBACK_NOT:
  +						do
  +							tcode += (tcode[1] << 8) + tcode[2];
  +						while (*tcode == OP_ALT);
  +						tcode += 3;
  +						break;
  +
  +					case OP_OPT:
  +						caseless = (tcode[1] & PCRE_CASELESS) != 0;
  +						tcode += 2;
  +						break;
  +
  +					case OP_BRAZERO:
  +					case OP_BRAMINZERO:
  +						if (!set_start_bits
  +							(++tcode, start_bits, caseless, cd)) return FALSE;
  +						dummy = 1;
  +						do
  +							tcode += (tcode[1] << 8) + tcode[2];
  +						while (*tcode == OP_ALT);
  +						tcode += 3;
  +						break;
  +
  +					case OP_STAR:
  +					case OP_MINSTAR:
  +					case OP_QUERY:
  +					case OP_MINQUERY:
  +						set_bit(start_bits, tcode[1], caseless, cd);
  +						tcode += 2;
  +						break;
  +
  +					case OP_UPTO:
  +					case OP_MINUPTO:
  +						set_bit(start_bits, tcode[3], caseless, cd);
  +						tcode += 4;
  +						break;
  +
  +					case OP_EXACT:
  +						tcode++;
  +
  +					case OP_CHARS:
  +						tcode++;
  +
  +					case OP_PLUS:
  +					case OP_MINPLUS:
  +						set_bit(start_bits, tcode[1], caseless, cd);
  +						try_next = FALSE;
  +						break;
  +
  +					case OP_NOT_DIGIT:
  +						for (c = 0; c < 32; c++)
  +							start_bits[c] |= ~cd->cbits[c + cbit_digit];
  +						try_next = FALSE;
  +						break;
  +
  +					case OP_DIGIT:
  +						for (c = 0; c < 32; c++)
  +							start_bits[c] |= cd->cbits[c + cbit_digit];
  +						try_next = FALSE;
  +						break;
  +
  +					case OP_NOT_WHITESPACE:
  +						for (c = 0; c < 32; c++)
  +							start_bits[c] |= ~cd->cbits[c + cbit_space];
  +						try_next = FALSE;
  +						break;
  +
  +					case OP_WHITESPACE:
  +						for (c = 0; c < 32; c++)
  +							start_bits[c] |= cd->cbits[c + cbit_space];
  +						try_next = FALSE;
  +						break;
  +
  +					case OP_NOT_WORDCHAR:
  +						for (c = 0; c < 32; c++)
  +							start_bits[c] |= ~cd->cbits[c + cbit_word];
  +						try_next = FALSE;
  +						break;
  +
  +					case OP_WORDCHAR:
  +						for (c = 0; c < 32; c++)
  +							start_bits[c] |= cd->cbits[c + cbit_word];
  +						try_next = FALSE;
  +						break;
  +
  +					case OP_TYPEPLUS:
  +					case OP_TYPEMINPLUS:
  +						tcode++;
  +						break;
  +
  +					case OP_TYPEEXACT:
  +						tcode += 3;
  +						break;
  +
  +					case OP_TYPEUPTO:
  +					case OP_TYPEMINUPTO:
  +						tcode += 2;
  +
  +					case OP_TYPESTAR:
  +					case OP_TYPEMINSTAR:
  +					case OP_TYPEQUERY:
  +					case OP_TYPEMINQUERY:
  +						switch (tcode[1]) {
  +							case OP_NOT_DIGIT:
  +								for (c = 0; c < 32; c++)
  +									start_bits[c] |=
  +										~cd->cbits[c + cbit_digit];
  +								break;
  +
  +							case OP_DIGIT:
  +								for (c = 0; c < 32; c++)
  +									start_bits[c] |=
  +										cd->cbits[c + cbit_digit];
  +								break;
  +
  +							case OP_NOT_WHITESPACE:
  +								for (c = 0; c < 32; c++)
  +									start_bits[c] |=
  +										~cd->cbits[c + cbit_space];
  +								break;
  +
  +							case OP_WHITESPACE:
  +								for (c = 0; c < 32; c++)
  +									start_bits[c] |=
  +										cd->cbits[c + cbit_space];
  +								break;
  +
  +							case OP_NOT_WORDCHAR:
  +								for (c = 0; c < 32; c++)
  +									start_bits[c] |=
  +										~cd->cbits[c + cbit_word];
  +								break;
  +
  +							case OP_WORDCHAR:
  +								for (c = 0; c < 32; c++)
  +									start_bits[c] |= cd->cbits[c + cbit_word];
  +								break;
  +						}
  +
  +						tcode += 2;
  +						break;
  +
  +					case OP_CLASS:
  +						{
  +							tcode++;
  +							for (c = 0; c < 32; c++)
  +								start_bits[c] |= tcode[c];
  +							tcode += 32;
  +							switch (*tcode) {
  +								case OP_CRSTAR:
  +								case OP_CRMINSTAR:
  +								case OP_CRQUERY:
  +								case OP_CRMINQUERY:
  +									tcode++;
  +									break;
  +
  +								case OP_CRRANGE:
  +								case OP_CRMINRANGE:
  +									if (((tcode[1] << 8) + tcode[2]) == 0)
  +										tcode += 5;
  +									else
  +										try_next = FALSE;
  +									break;
  +
  +								default:
  +									try_next = FALSE;
  +									break;
  +							}
  +						}
  +						break;
  +
  +				}
  +		}
  +
  +		code += (code[1] << 8) + code[2];
  +	}
  +	while (*code == OP_ALT);
  +	return TRUE;
   }
   
  -/*************************************************
  -*          Study a compiled expression           *
  -*************************************************/
  -
  -/* This function is handed a compiled expression that it must study to produce
  -information that will speed up the matching. It returns a pcre_extra block
  -which then gets handed back to pcre_exec().
  -
  -Arguments:
  -  re        points to the compiled expression
  -  options   contains option bits
  -  errorptr  points to where to place error messages;
  -            set NULL unless error
  -
  -Returns:    pointer to a pcre_extra block,
  -            NULL on error or if no optimization possible
  -*/
  -
  -pcre_extra *
  -pcre_study(const pcre *external_re, int options, const char **errorptr)
  +pcre_extra *pcre_study(const pcre * external_re, int options,
  +					   const char **errorptr)
   {
  -uschar start_bits[32];
  -real_pcre_extra *extra;
  -const real_pcre *re = (const real_pcre *)external_re;
  -compile_data compile_block;
  -
  -*errorptr = NULL;
  -
  -if (re == NULL || re->magic_number != MAGIC_NUMBER)
  -  {
  -  *errorptr = "argument is not a compiled regular expression";
  -  return NULL;
  -  }
  -
  -if ((options & ~PUBLIC_STUDY_OPTIONS) != 0)
  -  {
  -  *errorptr = "unknown or incorrect option bit(s) set";
  -  return NULL;
  -  }
  -
  -/* For an anchored pattern, or an unchored pattern that has a first char, or a
  -multiline pattern that matches only at "line starts", no further processing at
  -present. */
  -
  -if ((re->options & (PCRE_ANCHORED|PCRE_FIRSTSET|PCRE_STARTLINE)) != 0)
  -  return NULL;
  -
  -/* Set the character tables in the block which is passed around */
  -
  -compile_block.lcc = re->tables + lcc_offset;
  -compile_block.fcc = re->tables + fcc_offset;
  -compile_block.cbits = re->tables + cbits_offset;
  -compile_block.ctypes = re->tables + ctypes_offset;
  +	uschar start_bits[32];
  +	real_pcre_extra *extra;
  +	const real_pcre *re = (const real_pcre *)external_re;
  +	compile_data compile_block;
  +
  +	*errorptr = NULL;
  +
  +	if (re == NULL || re->magic_number != MAGIC_NUMBER) {
  +		*errorptr = "argument is not a compiled regular expression";
  +		return NULL;
  +	}
  +
  +	if ((options & ~PUBLIC_STUDY_OPTIONS) != 0) {
  +		*errorptr = "unknown or incorrect option bit(s) set";
  +		return NULL;
  +	}
  +
  +	if ((re->options & (PCRE_ANCHORED | PCRE_FIRSTSET | PCRE_STARTLINE)) != 0)
  +		return NULL;
  +
  +	compile_block.lcc = re->tables + lcc_offset;
  +	compile_block.fcc = re->tables + fcc_offset;
  +	compile_block.cbits = re->tables + cbits_offset;
  +	compile_block.ctypes = re->tables + ctypes_offset;
  +
  +	memset(start_bits, 0, 32 * sizeof (uschar));
  +	if (!set_start_bits
  +		(re->code, start_bits, (re->options & PCRE_CASELESS) != 0,
  +		 &compile_block)) return NULL;
  +
  +	extra = (real_pcre_extra *) (pcre_malloc) (sizeof (real_pcre_extra));
  +
  +	if (extra == NULL) {
  +		*errorptr = "failed to get memory";
  +		return NULL;
  +	}
   
  -/* See if we can find a fixed set of initial characters for the pattern. */
  +	extra->options = PCRE_STUDY_MAPPED;
  +	memcpy(extra->start_bits, start_bits, sizeof (start_bits));
   
  -memset(start_bits, 0, 32 * sizeof(uschar));
  -if (!set_start_bits(re->code, start_bits, (re->options & PCRE_CASELESS) != 0,
  -  &compile_block)) return NULL;
  -
  -/* Get an "extra" block and put the information therein. */
  -
  -extra = (real_pcre_extra *)(pcre_malloc)(sizeof(real_pcre_extra));
  -
  -if (extra == NULL)
  -  {
  -  *errorptr = "failed to get memory";
  -  return NULL;
  -  }
  -
  -extra->options = PCRE_STUDY_MAPPED;
  -memcpy(extra->start_bits, start_bits, sizeof(start_bits));
  -
  -return (pcre_extra *)extra;
  +	return (pcre_extra *) extra;
   }
   
  -/* ____ END study.c ____ */
  -
  -/* ____ BEGIN get.c ____ */
  -
  -/* This module contains some convenience functions for extracting substrings
  -from the subject string after a regex match has succeeded. The original idea
  -for these functions came from Scott Wimer <scottw@cgibuilder.com>. */
  -
  -/* Include the internals header, which itself includes Standard C headers plus
  -the external pcre header. */
  -
  -/*************************************************
  -*      Copy captured string to given buffer      *
  -*************************************************/
  -
  -/* This function copies a single captured substring into a given buffer.
  -Note that we use memcpy() rather than strncpy() in case there are binary zeros
  -in the string.
  -
  -Arguments:
  -  subject        the subject string that was matched
  -  ovector        pointer to the offsets table
  -  stringcount    the number of substrings that were captured
  -                   (i.e. the yield of the pcre_exec call, unless
  -                   that was zero, in which case it should be 1/3
  -                   of the offset table size)
  -  stringnumber   the number of the required substring
  -  buffer         where to put the substring
  -  size           the size of the buffer
  -
  -Returns:         if successful:
  -                   the length of the copied string, not including the zero
  -                   that is put on the end; can be zero
  -                 if not successful:
  -                   PCRE_ERROR_NOMEMORY (-6) buffer too small
  -                   PCRE_ERROR_NOSUBSTRING (-7) no such captured substring
  -*/
  -
   int
   pcre_copy_substring(const char *subject, int *ovector, int stringcount,
  -  int stringnumber, char *buffer, int size)
  +					int stringnumber, char *buffer, int size)
   {
  -int yield;
  -if (stringnumber < 0 || stringnumber >= stringcount)
  -  return PCRE_ERROR_NOSUBSTRING;
  -stringnumber *= 2;
  -yield = ovector[stringnumber+1] - ovector[stringnumber];
  -if (size < yield + 1) return PCRE_ERROR_NOMEMORY;
  -memcpy(buffer, subject + ovector[stringnumber], yield);
  -buffer[yield] = 0;
  -return yield;
  +	int yield;
  +	if (stringnumber < 0 || stringnumber >= stringcount)
  +		return PCRE_ERROR_NOSUBSTRING;
  +	stringnumber *= 2;
  +	yield = ovector[stringnumber + 1] - ovector[stringnumber];
  +	if (size < yield + 1)
  +		return PCRE_ERROR_NOMEMORY;
  +	memcpy(buffer, subject + ovector[stringnumber], yield);
  +	buffer[yield] = 0;
  +	return yield;
   }
   
  -/*************************************************
  -*      Copy all captured strings to new store    *
  -*************************************************/
  -
  -/* This function gets one chunk of store and builds a list of pointers and all
  -of the captured substrings in it. A NULL pointer is put on the end of the list.
  -
  -Arguments:
  -  subject        the subject string that was matched
  -  ovector        pointer to the offsets table
  -  stringcount    the number of substrings that were captured
  -                   (i.e. the yield of the pcre_exec call, unless
  -                   that was zero, in which case it should be 1/3
  -                   of the offset table size)
  -  listptr        set to point to the list of pointers
  -
  -Returns:         if successful: 0
  -                 if not successful:
  -                   PCRE_ERROR_NOMEMORY (-6) failed to get store
  -*/
  -
   int
   pcre_get_substring_list(const char *subject, int *ovector, int stringcount,
  -  const char ***listptr)
  +						const char ***listptr)
   {
  -int i;
  -int size = sizeof(char *);
  -int double_count = stringcount * 2;
  -char **stringlist;
  -char *p;
  -
  -for (i = 0; i < double_count; i += 2)
  -  size += sizeof(char *) + ovector[i+1] - ovector[i] + 1;
  -
  -stringlist = (char **)(pcre_malloc)(size);
  -if (stringlist == NULL) return PCRE_ERROR_NOMEMORY;
  -
  -*listptr = (const char **)stringlist;
  -p = (char *)(stringlist + stringcount + 1);
  -
  -for (i = 0; i < double_count; i += 2)
  -  {
  -  int len = ovector[i+1] - ovector[i];
  -  memcpy(p, subject + ovector[i], len);
  -  *stringlist++ = p;
  -  p += len;
  -  *p++ = 0;
  -  }
  +	int i;
  +	int size = sizeof (char *);
  +	int double_count = stringcount * 2;
  +	char **stringlist;
  +	char *p;
  +
  +	for (i = 0; i < double_count; i += 2)
  +		size += sizeof (char *) + ovector[i + 1] - ovector[i] + 1;
  +
  +	stringlist = (char **)(pcre_malloc) (size);
  +	if (stringlist == NULL)
  +		return PCRE_ERROR_NOMEMORY;
  +
  +	*listptr = (const char **)stringlist;
  +	p = (char *)(stringlist + stringcount + 1);
  +
  +	for (i = 0; i < double_count; i += 2) {
  +		int len = ovector[i + 1] - ovector[i];
  +		memcpy(p, subject + ovector[i], len);
  +		*stringlist++ = p;
  +		p += len;
  +		*p++ = 0;
  +	}
   
  -*stringlist = NULL;
  -return 0;
  +	*stringlist = NULL;
  +	return 0;
   }
   
  -/*************************************************
  -*   Free store obtained by get_substring_list    *
  -*************************************************/
  -
  -/* This function exists for the benefit of people calling PCRE from non-C
  -programs that can call its functions, but not free() or (pcre_free)() directly.
  -
  -Argument:   the result of a previous pcre_get_substring_list()
  -Returns:    nothing
  -*/
  -
  -void
  -pcre_free_substring_list(const char **pointer)
  +void pcre_free_substring_list(const char **pointer)
   {
  -(pcre_free)((void *)pointer);
  +	(pcre_free) ((void *)pointer);
   }
   
  -/*************************************************
  -*      Copy captured string to new store         *
  -*************************************************/
  -
  -/* This function copies a single captured substring into a piece of new
  -store
  -
  -Arguments:
  -  subject        the subject string that was matched
  -  ovector        pointer to the offsets table
  -  stringcount    the number of substrings that were captured
  -                   (i.e. the yield of the pcre_exec call, unless
  -                   that was zero, in which case it should be 1/3
  -                   of the offset table size)
  -  stringnumber   the number of the required substring
  -  stringptr      where to put a pointer to the substring
  -
  -Returns:         if successful:
  -                   the length of the string, not including the zero that
  -                   is put on the end; can be zero
  -                 if not successful:
  -                   PCRE_ERROR_NOMEMORY (-6) failed to get store
  -                   PCRE_ERROR_NOSUBSTRING (-7) substring not present
  -*/
  -
   int
   pcre_get_substring(const char *subject, int *ovector, int stringcount,
  -  int stringnumber, const char **stringptr)
  +				   int stringnumber, const char **stringptr)
   {
  -int yield;
  -char *substring;
  -if (stringnumber < 0 || stringnumber >= stringcount)
  -  return PCRE_ERROR_NOSUBSTRING;
  -stringnumber *= 2;
  -yield = ovector[stringnumber+1] - ovector[stringnumber];
  -substring = (char *)(pcre_malloc)(yield + 1);
  -if (substring == NULL) return PCRE_ERROR_NOMEMORY;
  -memcpy(substring, subject + ovector[stringnumber], yield);
  -substring[yield] = 0;
  -*stringptr = substring;
  -return yield;
  +	int yield;
  +	char *substring;
  +	if (stringnumber < 0 || stringnumber >= stringcount)
  +		return PCRE_ERROR_NOSUBSTRING;
  +	stringnumber *= 2;
  +	yield = ovector[stringnumber + 1] - ovector[stringnumber];
  +	substring = (char *)(pcre_malloc) (yield + 1);
  +	if (substring == NULL)
  +		return PCRE_ERROR_NOMEMORY;
  +	memcpy(substring, subject + ovector[stringnumber], yield);
  +	substring[yield] = 0;
  +	*stringptr = substring;
  +	return yield;
   }
   
  -/*************************************************
  -*       Free store obtained by get_substring     *
  -*************************************************/
  -
  -/* This function exists for the benefit of people calling PCRE from non-C
  -programs that can call its functions, but not free() or (pcre_free)() directly.
  -
  -Argument:   the result of a previous pcre_get_substring()
  -Returns:    nothing
  -*/
  -
  -void
  -pcre_free_substring(const char *pointer)
  +void pcre_free_substring(const char *pointer)
   {
  -(pcre_free)((void *)pointer);
  +	(pcre_free) ((void *)pointer);
   }
  -
  -/* ____ END get.c ____ */
  -
  -#endif /* !L2_UT_PCRE_GENTAB */
  -
  -/* ____ BEGIN maketables.c ____ */
   
  -/* This file is compiled on its own as part of the PCRE library. However,
  -it is also included in the compilation of dftables.c, in which case the macro
  -DFTABLES is defined. */
  -
  -/*************************************************
  -*           Create PCRE character tables         *
  -*************************************************/
  -
  -/* This function builds a set of character tables for use by PCRE and returns
  -a pointer to them. They are build using the ctype functions, and consequently
  -their contents will depend upon the current locale setting. When compiled as
  -part of the library, the store is obtained via pcre_malloc(), but when compiled
  -inside dftables, use malloc().
  -
  -Arguments:   none
  -Returns:     pointer to the contiguous block of data
  -*/
  +#endif
   
  -const unsigned char *
  -pcre_maketables(void)
  +const unsigned char *pcre_maketables(void)
   {
  -unsigned char *yield, *p;
  -int i;
  +	unsigned char *yield, *p;
  +	int i;
   
  -#ifndef L2_UT_PCRE_GENTAB
  -yield = (unsigned char*)(pcre_malloc)(tables_length);
  +#ifndef L2_UT_PCRE_TAB
  +	yield = (unsigned char *)(pcre_malloc) (tables_length);
   #else
  -yield = (unsigned char*)malloc(tables_length);
  +	yield = (unsigned char *)malloc(tables_length);
   #endif
  -
  -if (yield == NULL) return NULL;
  -p = yield;
  -
  -/* First comes the lower casing table */
  -
  -for (i = 0; i < 256; i++) *p++ = tolower(i);
   
  -/* Next the case-flipping table */
  +	if (yield == NULL)
  +		return NULL;
  +	p = yield;
  +
  +	for (i = 0; i < 256; i++)
  +		*p++ = tolower(i);
  +
  +	for (i = 0; i < 256; i++)
  +		*p++ = islower(i) ? toupper(i) : tolower(i);
  +
  +	memset(p, 0, cbit_length);
  +	for (i = 0; i < 256; i++) {
  +		if (isdigit(i)) {
  +			p[cbit_digit + i / 8] |= 1 << (i & 7);
  +			p[cbit_word + i / 8] |= 1 << (i & 7);
  +		}
  +		if (isupper(i)) {
  +			p[cbit_upper + i / 8] |= 1 << (i & 7);
  +			p[cbit_word + i / 8] |= 1 << (i & 7);
  +		}
  +		if (islower(i)) {
  +			p[cbit_lower + i / 8] |= 1 << (i & 7);
  +			p[cbit_word + i / 8] |= 1 << (i & 7);
  +		}
  +		if (i == '_')
  +			p[cbit_word + i / 8] |= 1 << (i & 7);
  +		if (isspace(i))
  +			p[cbit_space + i / 8] |= 1 << (i & 7);
  +		if (isxdigit(i))
  +			p[cbit_xdigit + i / 8] |= 1 << (i & 7);
  +		if (isgraph(i))
  +			p[cbit_graph + i / 8] |= 1 << (i & 7);
  +		if (isprint(i))
  +			p[cbit_print + i / 8] |= 1 << (i & 7);
  +		if (ispunct(i))
  +			p[cbit_punct + i / 8] |= 1 << (i & 7);
  +		if (iscntrl(i))
  +			p[cbit_cntrl + i / 8] |= 1 << (i & 7);
  +	}
  +	p += cbit_length;
  +
  +	for (i = 0; i < 256; i++) {
  +		int x = 0;
  +		if (isspace(i))
  +			x += ctype_space;
  +		if (isalpha(i))
  +			x += ctype_letter;
  +		if (isdigit(i))
  +			x += ctype_digit;
  +		if (isxdigit(i))
  +			x += ctype_xdigit;
  +		if (isalnum(i) || i == '_')
  +			x += ctype_word;
  +		if (strchr("*+?{^.$|()[", i) != 0)
  +			x += ctype_meta;
  +		*p++ = x;
  +	}
   
  -for (i = 0; i < 256; i++) *p++ = islower(i)? toupper(i) : tolower(i);
  -
  -/* Then the character class tables. Don't try to be clever and save effort
  -on exclusive ones - in some locales things may be different. */
  -
  -memset(p, 0, cbit_length);
  -for (i = 0; i < 256; i++)
  -  {
  -  if (isdigit(i))
  -    {
  -    p[cbit_digit  + i/8] |= 1 << (i&7);
  -    p[cbit_word   + i/8] |= 1 << (i&7);
  -    }
  -  if (isupper(i))
  -    {
  -    p[cbit_upper  + i/8] |= 1 << (i&7);
  -    p[cbit_word   + i/8] |= 1 << (i&7);
  -    }
  -  if (islower(i))
  -    {
  -    p[cbit_lower  + i/8] |= 1 << (i&7);
  -    p[cbit_word   + i/8] |= 1 << (i&7);
  -    }
  -  if (i == '_')   p[cbit_word   + i/8] |= 1 << (i&7);
  -  if (isspace(i)) p[cbit_space  + i/8] |= 1 << (i&7);
  -  if (isxdigit(i))p[cbit_xdigit + i/8] |= 1 << (i&7);
  -  if (isgraph(i)) p[cbit_graph  + i/8] |= 1 << (i&7);
  -  if (isprint(i)) p[cbit_print  + i/8] |= 1 << (i&7);
  -  if (ispunct(i)) p[cbit_punct  + i/8] |= 1 << (i&7);
  -  if (iscntrl(i)) p[cbit_cntrl  + i/8] |= 1 << (i&7);
  -  }
  -p += cbit_length;
  -
  -/* Finally, the character type table */
  -
  -for (i = 0; i < 256; i++)
  -  {
  -  int x = 0;
  -  if (isspace(i)) x += ctype_space;
  -  if (isalpha(i)) x += ctype_letter;
  -  if (isdigit(i)) x += ctype_digit;
  -  if (isxdigit(i)) x += ctype_xdigit;
  -  if (isalnum(i) || i == '_') x += ctype_word;
  -  if (strchr("*+?{^.$|()[", i) != 0) x += ctype_meta;
  -  *p++ = x;
  -  }
  -
  -return yield;
  +	return yield;
   }
  -
  -/* ____ END maketables.c ____ */
  -
  -#ifdef L2_UT_PCRE_GENTAB
   
  -/* ____ BEGIN dftables.c ____ */
  +#ifdef L2_UT_PCRE_TAB
   
  -/* This is a support program to generate the file chartables.c, containing
  -character tables of various kinds. They are built according to the default C
  -locale and used as the default tables by PCRE. Now that pcre_maketables is
  -a function visible to the outside world, we make use of its code from here in
  -order to be consistent. */
  -
   #include <ctype.h>
   #include <stdio.h>
   #include <string.h>
   
   int main(void)
   {
  -int i;
  -const unsigned char *tables = pcre_maketables();
  +	int i;
  +	const unsigned char *tables = pcre_maketables();
   
  -printf(
  -  "/*************************************************\n"
  -  "*      Perl-Compatible Regular Expressions       *\n"
  -  "*************************************************/\n\n"
  -  "static unsigned char pcre_default_tables[] = {\n\n"
  -  "/* This table is a lower casing table. */\n\n");
  -
  -printf("  ");
  -for (i = 0; i < 256; i++)
  -  {
  -  if ((i & 7) == 0 && i != 0) printf("\n  ");
  -  printf("%3d", *tables++);
  -  if (i != 255) printf(",");
  -  }
  -printf(",\n\n");
  -
  -printf("/* This table is a case flipping table. */\n\n");
  -
  -printf("  ");
  -for (i = 0; i < 256; i++)
  -  {
  -  if ((i & 7) == 0 && i != 0) printf("\n  ");
  -  printf("%3d", *tables++);
  -  if (i != 255) printf(",");
  -  }
  -printf(",\n\n");
  -
  -printf(
  -  "/* This table contains bit maps for various character classes.\n"
  -  "Each map is 32 bytes long and the bits run from the least\n"
  -  "significant end of each byte. The classes that have their own\n"
  -  "maps are: space, xdigit, digit, upper, lower, word, graph\n"
  -  "print, punct, and cntrl. Other classes are built from combinations. */\n\n");
  -
  -printf("  ");
  -for (i = 0; i < cbit_length; i++)
  -  {
  -  if ((i & 7) == 0 && i != 0)
  -    {
  -    if ((i & 31) == 0) printf("\n");
  -    printf("\n  ");
  -    }
  -  printf("0x%02x", *tables++);
  -  if (i != cbit_length - 1) printf(",");
  -  }
  -printf(",\n\n");
  -
  -printf(
  -  "/* This table identifies various classes of character by individual bits:\n"
  -  "  0x%02x   white space character\n"
  -  "  0x%02x   letter\n"
  -  "  0x%02x   decimal digit\n"
  -  "  0x%02x   hexadecimal digit\n"
  -  "  0x%02x   alphanumeric or '_'\n"
  -  "  0x%02x   regular expression metacharacter or binary zero\n*/\n\n",
  -  ctype_space, ctype_letter, ctype_digit, ctype_xdigit, ctype_word,
  -  ctype_meta);
  -
  -printf("  ");
  -for (i = 0; i < 256; i++)
  -  {
  -  if ((i & 7) == 0 && i != 0)
  -    {
  -    printf(" /* ");
  -    if (isprint(i-8)) printf(" %c -", i-8);
  -      else printf("%3d-", i-8);
  -    if (isprint(i-1)) printf(" %c ", i-1);
  -      else printf("%3d", i-1);
  -    printf(" */\n  ");
  -    }
  -  printf("0x%02x", *tables++);
  -  if (i != 255) printf(",");
  -  }
  -
  -printf("};/* ");
  -if (isprint(i-8)) printf(" %c -", i-8);
  -  else printf("%3d-", i-8);
  -if (isprint(i-1)) printf(" %c ", i-1);
  -  else printf("%3d", i-1);
  -printf(" */\n\n\n");
  +	printf("/*************************************************\n"
  +		   "*      Perl-Compatible Regular Expressions       *\n"
  +		   "*************************************************/\n\n"
  +		   "static unsigned char pcre_default_tables[] = {\n\n"
  +		   "/* This table is a lower casing table. */\n\n");
  +
  +	printf("  ");
  +	for (i = 0; i < 256; i++) {
  +		if ((i & 7) == 0 && i != 0)
  +			printf("\n  ");
  +		printf("%3d", *tables++);
  +		if (i != 255)
  +			printf(",");
  +	}
  +	printf(",\n\n");
  +
  +	printf("/* This table is a case flipping table. */\n\n");
  +
  +	printf("  ");
  +	for (i = 0; i < 256; i++) {
  +		if ((i & 7) == 0 && i != 0)
  +			printf("\n  ");
  +		printf("%3d", *tables++);
  +		if (i != 255)
  +			printf(",");
  +	}
  +	printf(",\n\n");
  +
  +	printf("/* This table contains bit maps for various character classes.\n"
  +		   "Each map is 32 bytes long and the bits run from the least\n"
  +		   "significant end of each byte. The classes that have their own\n"
  +		   "maps are: space, xdigit, digit, upper, lower, word, graph\n"
  +		   "print, punct, and cntrl. Other classes are built from combinations. */\n\n");
  +
  +	printf("  ");
  +	for (i = 0; i < cbit_length; i++) {
  +		if ((i & 7) == 0 && i != 0) {
  +			if ((i & 31) == 0)
  +				printf("\n");
  +			printf("\n  ");
  +		}
  +		printf("0x%02x", *tables++);
  +		if (i != cbit_length - 1)
  +			printf(",");
  +	}
  +	printf(",\n\n");
  +
  +	printf
  +		("/* This table identifies various classes of character by individual bits:\n"
  +		 "  0x%02x   white space character\n" "  0x%02x   letter\n"
  +		 "  0x%02x   decimal digit\n" "  0x%02x   hexadecimal digit\n"
  +		 "  0x%02x   alphanumeric or '_'\n"
  +		 "  0x%02x   regular expression metacharacter or binary zero\n*/\n\n",
  +		 ctype_space, ctype_letter, ctype_digit, ctype_xdigit, ctype_word,
  +		 ctype_meta);
  +
  +	printf("  ");
  +	for (i = 0; i < 256; i++) {
  +		if ((i & 7) == 0 && i != 0) {
  +			printf(" \n  ");
  +		}
  +		printf("0x%02x", *tables++);
  +		if (i != 255)
  +			printf(",");
  +	}
   
  -return 0;
  -}
  +	printf("};\n\n\n");
   
  -/* ____ END dftables.c ____ */
  -
  -#endif /* L2_UT_PCRE_GENTAB */
  +	return 0;
  +}
   
  +#endif
  Index: ossp-pkg/l2/l2_ut_pcre.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 l2_ut_pcre.h
  --- ossp-pkg/l2/l2_ut_pcre.h	2001/09/04 14:52:28	1.1
  +++ ossp-pkg/l2/l2_ut_pcre.h	2001/09/15 16:03:37	1.2
  @@ -1,6 +1,16 @@
  -/*************************************************
  -*      Perl-Compatible Regular Expressions       *
  -*************************************************/
  +/*
  + *  Perl Compatible Regular Expression (PCRE) Library
  + *  Copyright (c) 1997-2001 Philip Hazel <ph10@cam.ac.uk>
  + *  Copyright (c) 1997-2001 University of Cambridge
  + *
  + *  DO NOT EDIT THIS FILE, IT WAS AUTOMATICALLY GENERATED!
  + *
  + *  This is an automatically generated, extremely stripped down
  + *  version of the PCRE 3.5 library from the Philip Hazel.
  + *  This version is still distributed under the same original PCRE
  + *  Open Source license, but Philip Hazel is no longer responsible
  + *  for this version.
  + */
   
   /*
   This is a library of functions to support regular expressions whose syntax
  @@ -35,26 +45,16 @@
   #ifndef __L2_UT_PCRE_H__
   #define __L2_UT_PCRE_H__
   
  -/* The file pcre.h is build by "configure". Do not edit it; instead
  -make changes to pcre.in. */
  -
   #define PCRE_MAJOR          3
   #define PCRE_MINOR          5
   #define PCRE_DATE           15-Aug-2001
   
  -/* Have to include stdlib.h in order to ensure that size_t is defined;
  -it is needed here for malloc. */
  -
   #include <stdlib.h>
   
  -/* Allow for C++ users */
  -
   #ifdef __cplusplus
   extern "C" {
   #endif
   
  -/* Options */
  -
   #define PCRE_CASELESS        0x0001
   #define PCRE_MULTILINE       0x0002
   #define PCRE_DOTALL          0x0004
  @@ -68,8 +68,6 @@
   #define PCRE_NOTEMPTY        0x0400
   #define PCRE_UTF8            0x0800
   
  -/* Exec-time and get-time error codes */
  -
   #define PCRE_ERROR_NOMATCH        (-1)
   #define PCRE_ERROR_NULL           (-2)
   #define PCRE_ERROR_BADOPTION      (-3)
  @@ -78,8 +76,6 @@
   #define PCRE_ERROR_NOMEMORY       (-6)
   #define PCRE_ERROR_NOSUBSTRING    (-7)
   
  -/* Request types for pcre_fullinfo() */
  -
   #define PCRE_INFO_OPTIONS         0
   #define PCRE_INFO_SIZE            1
   #define PCRE_INFO_CAPTURECOUNT    2
  @@ -87,24 +83,16 @@
   #define PCRE_INFO_FIRSTCHAR       4
   #define PCRE_INFO_FIRSTTABLE      5
   #define PCRE_INFO_LASTLITERAL     6
  -
  -/* Types */
   
  -struct real_pcre;        /* declaration; the definition is private  */
  -struct real_pcre_extra;  /* declaration; the definition is private */
  +struct real_pcre;
  +struct real_pcre_extra;
   
   typedef struct real_pcre pcre;
   typedef struct real_pcre_extra pcre_extra;
   
  -/* Store get and free functions. These can be set to alternative malloc/free
  -functions if required. Some magic is required for Win32 DLL; it is null on
  -other OS. */
  -
   extern void *(*pcre_malloc)(size_t);
   extern void  (*pcre_free)(void *);
   
  -/* Functions */
  -
   extern pcre *pcre_compile(const char *, int, const char **, int *,
                 const unsigned char *);
   extern int  pcre_copy_substring(const char *, int *, int, int, char *, int);
  @@ -121,7 +109,7 @@
   extern const char *pcre_version(void);
   
   #ifdef __cplusplus
  -}  /* extern "C" */
  +}
   #endif
   
  -#endif /* __L2_UT_PCRE_H__ */
  +#endif

From ossp-cvs-owner@ossp.org  Tue Sep 18 16:38:53 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8IEcp253502; Tue, 18 Sep 2001 16:38:51 +0200 (CEST)
Date: Tue, 18 Sep 2001 16:38:51 +0200 (CEST)
Message-Id: <200109181438.f8IEcp253502@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO l2_ch_pipe.c l2_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   18-Sep-2001 16:38:51
  Branch: HEAD                             Handle: 2001091815385100

  Modified files:
    ossp-pkg/l2             TODO l2_ch_pipe.c l2_test.c

  Log:
    Pipe channel handler redesign, bugfixes, and cleanup.

  Summary:
    Revision    Changes     Path
    1.23        +1  -0      ossp-pkg/l2/TODO
    1.11        +116 -40    ossp-pkg/l2/l2_ch_pipe.c
    1.24        +41 -49     ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 TODO
  --- ossp-pkg/l2/TODO	2001/09/14 13:27:17	1.22
  +++ ossp-pkg/l2/TODO	2001/09/18 14:38:51	1.23
  @@ -25,6 +25,7 @@
   
   MS:
   - implement pipe channel
  +- review pipe handler for dangling descriptors
   
   ISSUES
   ------
  Index: ossp-pkg/l2/l2_ch_pipe.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 l2_ch_pipe.c
  --- ossp-pkg/l2/l2_ch_pipe.c	2001/09/14 15:40:04	1.10
  +++ ossp-pkg/l2/l2_ch_pipe.c	2001/09/18 14:38:51	1.11
  @@ -32,24 +32,37 @@
   #include <unistd.h>
   #include <signal.h>
   
  +#define L2_PIPE_MODEDIRECT   1 /* direct command execution */
  +#define L2_PIPE_MODESHELL    2 /* shell  command execution */
  +#define L2_PIPE_MAXARGS    256 /* shell  command execution */
  +
   /* declare private channel configuration */
   typedef struct {
  -    int iPipe; /* pipe filedescriptor used for writing only */
  +    int piFd[2];               /* pipe file descriptor           */
  +    int iMode;                 /* execution mode direct or shell */
  +    char *szCmdpath;          /* path to command and arguments  */
  +    char *pVec[L2_PIPE_MAXARGS]; /* vector of command and params */
   } l2_ch_pipe_t;
   
   static void catchsignal(int sig, ...)
   {
       va_list ap;
  -    static l2_context_t *ctx = NULL;
  +    static l2_ch_pipe_t *cfg = NULL;
   
       va_start(ap, sig);
       if (sig == 0)
  -        ctx = va_arg(ap, l2_context_t *);
  +        cfg = va_arg(ap, l2_ch_pipe_t *);
       else if (sig == SIGCHLD) {
  -        ((l2_ch_pipe_t *)(int *)ctx->vp)->iPipe = -1; /* TODO: Fill in with new pipe fd */
  +        fprintf(stderr, "Pipe: SIGCHLD caught\n");
  +        close(cfg->piFd[1]);
  +        cfg->piFd[1] = -1; /* TODO: Fill in with new pipe fd */
  +    }
  +    else if (sig == SIGPIPE) {
  +        fprintf(stderr, "Pipe: SIGPIPE caught\n");
  +        close(cfg->piFd[1]);
  +        cfg->piFd[1] = -1; /* TODO: Fill in with new pipe fd */
  +        /* ((l2_ch_pipe_t *)(int *)ctx->vp)->piFd[1] = -1; */
       }
  -    else if (sig == SIGPIPE)
  -        ((l2_ch_pipe_t *)(int *)ctx->vp)->iPipe = -1;
       va_end(ap);
   }
   
  @@ -63,7 +76,11 @@
           return L2_ERR_ARG;
   
       /* initialize configuration with reasonable defaults */
  -    cfg->iPipe = -1; 
  +    cfg->piFd[0]    = -1; 
  +    cfg->piFd[1]    = -1; 
  +    cfg->iMode      = -1; 
  +    cfg->szCmdpath = NULL;
  +    memset(cfg->pVec, 0, sizeof(cfg->pVec));
   
       /* link private channel configuration into channel context */
       ctx->vp = cfg;
  @@ -75,45 +92,114 @@
   static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
       l2_ch_pipe_t *cfg = (l2_ch_pipe_t *)ctx->vp;
  -    l2_param_t pa[2]; 
  +    l2_param_t pa[3]; 
       l2_result_t rv;
  +    char szMode[16]; /* just eneough for double-byte "direct" and NULL */
   
       /* feed and call generic parameter parsing engine */
  -    L2_PARAM_SET(pa[0], pipe, INT, &cfg->iPipe);
  -    L2_PARAM_END(pa[1]);
  +    L2_PARAM_SET(pa[0], mode, CHARPTR, szMode);
  +    L2_PARAM_SET(pa[1], path, STRING, &cfg->szCmdpath);
  +    L2_PARAM_END(pa[2]);
       rv = l2_util_setparams(pa, fmt, ap);
   
  -    /* validate the pipe fd */
  -    if (cfg->iPipe == -1)
  +    if (strcmp(szMode, "direct") == NULL)
  +        cfg->iMode = L2_PIPE_MODEDIRECT;
  +    else if (strcmp(szMode, "shell") == NULL)
  +        cfg->iMode = L2_PIPE_MODESHELL;
  +    else
           return L2_ERR_ARG;
   
  -    catchsignal(0, ctx); /* initialize signal handler with incoming context */
  +    catchsignal(0, cfg); /* initialize signal handler with incoming context */
       signal(SIGCHLD, (void(*)())catchsignal); /* pipe changes descriptor     */
       signal(SIGPIPE, (void(*)())catchsignal); /* pipe closes reading fd      */
   
       return rv;
   }
   
  +/**********************************************************
  + * parse_cmdpath: Helper method to hook_open              *
  + *   Parses szBuf into an argv-style string vector szArgs *
  + **********************************************************/
  +static l2_result_t parse_cmdpath (char *szBuf, char *szArgs[]) {
  +    int iCnt = 0;
  +    while ((iCnt++ < L2_PIPE_MAXARGS) && (*szBuf != NULL)) {
  +        while ((*szBuf == ' ') || (*szBuf == '\t'))
  +            *szBuf++ = '\0';
  +        *szArgs++ = szBuf;
  +        while ((*szBuf != '\0') && (*szBuf != ' ') && (*szBuf != '\t'))
  +            szBuf++;
  +    }
  +    *szArgs = NULL;
  +
  +    if (iCnt <= L2_PIPE_MAXARGS)
  +        return L2_OK;
  +    else
  +        return L2_ERR_ARG;
  +}
  +
  +/**********************************************************
  + * child_exec: Helper method to hook_open                 *
  + *   Redirect stdin to read from cfg->piFd. Exec a given  *
  + *   command or passes it to the sh shell for execution.  *
  + **********************************************************/
  +static l2_result_t child_exec(l2_ch_pipe_t *cfg)
  +{
  +    /* make sure a command path was set */
  +    if (cfg->szCmdpath == NULL)
  +        return L2_ERR_USE;
  +
  +        close(cfg->piFd[1]);                  /* close the writing end,  */
  +        cfg->piFd[1] = -1;                    /* because we don't use it */
  +        dup2(cfg->piFd[0], fileno(stdin));    /* copy the reading end    */
  +
  +        return execvp(*cfg->pVec, cfg->pVec); /* launch                  */
  +}
  +
  +/* open channel */
  +static l2_result_t hook_open(l2_context_t *ctx, l2_channel_t *ch)
  +{
  +    l2_ch_pipe_t *cfg = (l2_ch_pipe_t *)ctx->vp;
  +    l2_result_t rv;
  +    pid_t Pid;
  +
  +    if ((rv = parse_cmdpath(cfg->szCmdpath, cfg->pVec)) != L2_OK)
  +        return rv;
  +
  +    if (pipe(cfg->piFd) == -1)      /* open the pipe  */
  +        return L2_ERR_SYS;
  +
  +    if ((Pid = fork()) > 0) {       /* parent process */
  +        close(cfg->piFd[0]);
  +        cfg->piFd[0] = -1;
  +    }
  +    else if ((Pid = fork()) == 0) { /* child process  */
  +        /* if child returns, there was an error       */
  +        if (child_exec(cfg) == -1) {
  +            close(cfg->piFd[0]);
  +            cfg->piFd[0] = -1;
  +            return L2_ERR_SYS;
  +        }
  +    }
  +    else /* fork failed  */
  +        return L2_ERR_SYS;
  +
  +    return L2_OK;
  +}
  +
   /* write to channel */
   static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch,
                                 l2_level_t level, const char *buf, size_t buf_size)
   {
       l2_ch_pipe_t *cfg = (l2_ch_pipe_t *)ctx->vp;
  -    l2_channel_t *downstream = l2_channel_downstream(ch);
  -    l2_result_t rv;
  -    
  +
       /* validate the pipe fd */
  -    if (cfg->iPipe == -1)
  -        return L2_ERR_ARG;
  +    if (cfg->piFd[1] == -1)  /* TODO: possibly remove this validation in */
  +        return L2_ERR_ARG;   /*       lieu of incoming SIGPIPE signal    */
   
       /* write message to channel pipe */
  -    if (write(cfg->iPipe, buf, buf_size) == -1)
  +    if (write(cfg->piFd[1], buf, buf_size) == -1)
           return L2_ERR_SYS;
   
  -    /* write to downstream channel */
  -    if ((rv = l2_channel_write(downstream, level, buf, buf_size)) != L2_OK)
  -        return rv;
  -
       return L2_OK;
   }
   
  @@ -121,16 +207,10 @@
   static l2_result_t hook_close(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_pipe_t *cfg = (l2_ch_pipe_t *)ctx->vp;
  -    l2_channel_t *downstream = l2_channel_downstream(ch);
  -    l2_result_t rv;
  -    
  -    /* close channel pipe */
  -    close(cfg->iPipe);
  -    cfg->iPipe = -1;
   
  -    /* close downstream channel, too */
  -    if ((rv = l2_channel_close(downstream)) != L2_OK)
  -        return rv;
  +    /* close channel pipe for parent process created in hook_open() */
  +    close(cfg->piFd[1]);
  +    cfg->piFd[1] = -1;
   
       return L2_OK;
   }
  @@ -139,25 +219,21 @@
   static l2_result_t hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_pipe_t *cfg = (l2_ch_pipe_t *)ctx->vp;
  -    l2_channel_t *downstream = l2_channel_downstream(ch);
  -    l2_result_t rv;
   
       /* destroy channel configuration */
  +    free(&cfg->szCmdpath);
  +    cfg->szCmdpath = NULL;
       free(cfg);
   
  -    /* destroy downstream channel, too */
  -    if ((rv = l2_channel_destroy(downstream)) != L2_OK)
  -        return rv;
  -
       return L2_OK;
   }
   
   /* exported channel handler structure */
   l2_handler_t l2_handler_pipe = {
  -    L2_CHANNEL_FILTER,
  +    L2_CHANNEL_OUTPUT,
       hook_create,
       hook_configure,
  -    NULL,
  +    hook_open,
       hook_write,
       NULL,
       hook_close,
  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/09/14 19:11:00	1.23
  +++ ossp-pkg/l2/l2_test.c	2001/09/18 14:38:51	1.24
  @@ -34,7 +34,7 @@
   #include <netinet/in.h>
   #include <netdb.h>
   #include <syslog.h>
  -#include <unistd.h>
  +#include <unistd.h>      /* unistd and fcntl included for pipes */
   #include <fcntl.h>
   
   #include "l2.h"
  @@ -74,84 +74,42 @@
   #ifdef WITH_PIPE
       l2_channel_t *chPipe;
   #endif
  -#ifdef WITH_SOCKET
       l2_channel_t *chSock;
  -#endif
   #ifdef WITH_SMTP
       l2_channel_t *chSmtp;
   #endif
       l2_stream_t *st;
   
  -    int pipdesc[2]; /* For use with our pipe channel test */
       /*
        * Typical steps to use a buffered file logging stream
        */
  -
       if ((st = l2_stream_create()) == NULL)
           die("failed to create stream");
   
  -#ifdef WITH_SOCKET
  -    /* Atenzione! Before doing any socket testing, make sure you have a valid */
  -    /* end point listening, or else you will only get an error message when   */
  -    /* the thing tries to connect.                                            */
  -    if ((chSock = l2_channel_create(&l2_handler_socket)) == NULL)
  -        die("failed to create socket channel");
  -
  -    if (l2_channel_configure(chSock, "protocol,ipversion,host,port",\
  -        IPPROTO_TCP, AF_INET, "localhost", 2002) != L2_OK)
  -        die("failed to configure socket ipv4 channel");
  -#if 0
  -    if (l2_channel_configure(chSock, "protocol,ipversion,host,port",\
  -          IPPROTO_TCP, AF_INET6, "0:0:0:0:0:0:0:1", 2002) != L2_OK)
  -          die("failed to configure socket ipv6 channel");
  -#endif
  -    if (l2_channel_open(chSock) != L2_OK)
  -        die("failed to open socket channel");
  -
  -    if (l2_stream_channel(st, chSock, L2_LEVEL_UPTO(L2_LEVEL_WARNING), L2_LEVEL_NONE) != L2_OK)
  -        die("failed to attach first channel into stream");
  -#endif
  -
       if ((chPrefix  = l2_channel_create(&l2_handler_prefix)) == NULL) /* Prefix */
           die("failed to create prefix channel");
   
       if (l2_channel_configure(chPrefix, "prefix,timezone", "[%d-%m-%Y/%H:%M:%S] %L test[%P]: ", "local") != L2_OK)
           die("failed to configure prefix channel");
   
  -    if ((chBuf  = l2_channel_create(&l2_handler_buffer)) == NULL) /* Buffer */
  +    if ((chBuf  = l2_channel_create(&l2_handler_buffer)) == NULL)    /* Buffer */
           die("failed to create buffer channel");
   
       if (l2_channel_configure(chBuf, "size", 100) != L2_OK)
           die("failed to configure buffer channel");
   
  -    if ((chFile = l2_channel_create(&l2_handler_file)) == NULL)   /* File   */
  +    if ((chFile = l2_channel_create(&l2_handler_file)) == NULL)      /* File   */
           die("failed to create file channel");
   
       if (l2_channel_configure(chFile, "path,append,perm", "l2_test.log", TRUE, 0644) != L2_OK)
           die("failed to configure file channel");
   
  -#ifdef WITH_PIPE
  -    if (pipe(pipdesc))
  -        die("pipe() call failed");
  -
  -    if ((chPipe = l2_channel_create(&l2_handler_pipe)) == NULL)   /* Pipe */
  -        die("failed to create pipe channel");
  -
  -    if (l2_channel_configure(chPipe, "pipe", pipdesc[1]) != L2_OK)
  -        die("failed to configure pipe channel");
  -#endif
  -
       if (l2_channel_stack(chFile, chBuf) != L2_OK)
           die("failed to stack buffer channel on top of file channel");
       
       if (l2_channel_stack(chBuf, chPrefix) != L2_OK)
           die("failed to stack prefix channel on top of buffer channel");
   
  -#ifdef WITH_PIPE
  -    if (l2_channel_stack(chPrefix, chPipe) != L2_OK)
  -        die("failed to stack pipe channel on top of prefix channel");
  -#endif
  -    
       if (l2_channel_open(chPrefix) != L2_OK)
           die("failed to open channel stack");
   
  @@ -159,7 +117,7 @@
           die("failed to attach channel stack into stream");
   
   #ifdef WITH_SYSLOG
  -    if ((chSyslog = l2_channel_create(&l2_handler_syslog)) == NULL)   /* Syslog */
  +    if ((chSyslog = l2_channel_create(&l2_handler_syslog)) == NULL)  /* Syslog */
           die("failed to create syslog channel");
   
       if (l2_channel_configure(chSyslog, "ident,facility,target,remotehost,logpid",
  @@ -173,8 +131,44 @@
           die("failed to attach channel syslog into stream");
   #endif
   
  +#ifdef WITH_PIPE
  +    if ((chPipe = l2_channel_create(&l2_handler_pipe)) == NULL)      /* Pipe */
  +        die("failed to create pipe channel");
  +
  +    if (l2_channel_configure(chPipe, "pipe", pipdesc[1]) != L2_OK)
  +        die("failed to configure pipe channel");
  +
  +    if (l2_channel_open(chPipe) != L2_OK)
  +        die("failed to open pipe channel");
  +
  +    if (l2_stream_channel(st, chPipe, L2_LEVEL_UPTO(L2_LEVEL_WARNING), L2_LEVEL_NONE) != L2_OK)
  +        die("failed to attach channel pipe into stream");
  +#endif
  +
  +#ifdef WITH_SOCKET
  +    /* Atenzione! Before doing any socket testing, make sure you have a valid */
  +    /* end point listening, or else you will only get an error message when   */
  +    /* the thing tries to connect.                                            */
  +    if ((chSock = l2_channel_create(&l2_handler_socket)) == NULL)   /* Socket */
  +        die("failed to create socket channel");
  +
  +    if (l2_channel_configure(chSock, "protocol,ipversion,host,port",\
  +        IPPROTO_TCP, AF_INET, "localhost", 2002) != L2_OK)
  +        die("failed to configure socket ipv4 channel");
  +#if 0
  +    if (l2_channel_configure(chSock, "protocol,ipversion,host,port",\
  +          IPPROTO_TCP, AF_INET6, "0:0:0:0:0:0:0:1", 2002) != L2_OK)
  +          die("failed to configure socket ipv6 channel");
  +#endif
  +    if (l2_channel_open(chSock) != L2_OK)
  +        die("failed to open socket channel");
  +
  +    if (l2_stream_channel(st, chSock, L2_LEVEL_UPTO(L2_LEVEL_WARNING), L2_LEVEL_NONE) != L2_OK)
  +        die("failed to attach channel socket into stream");
  +#endif
  +
   #ifdef WITH_SMTP
  -    if ((chSmtp = l2_channel_create(&l2_handler_smtp)) == NULL)   /* SMTP */
  +    if ((chSmtp = l2_channel_create(&l2_handler_smtp)) == NULL)      /* SMTP */
           die("failed to create smtp channel");
   
       if (l2_channel_configure(chSmtp, "rcpt,host,port", "rse@engelschall.com", "en1", "25") != L2_OK)
  @@ -202,8 +196,6 @@
       if (l2_stream_destroy(st) != L2_OK)
           die("failed to destroy stream");
   
  -    close(pipdesc[1]); /* Close the locally made pipe file descriptor */
  -    close(pipdesc[0]); /* Close the locally made pipe file descriptor */
       return 0;
   }
   

From ossp-cvs-owner@ossp.org  Tue Sep 18 16:41:30 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8IEfSv53722; Tue, 18 Sep 2001 16:41:28 +0200 (CEST)
Date: Tue, 18 Sep 2001 16:41:28 +0200 (CEST)
Message-Id: <200109181441.f8IEfSv53722@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   18-Sep-2001 16:41:28
  Branch: HEAD                             Handle: 2001091815412800

  Modified files:
    ossp-pkg/l2             l2_test.c

  Log:
    Fixed missing ifdef WITH_SOCKET.

  Summary:
    Revision    Changes     Path
    1.25        +2  -0      ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/09/18 14:38:51	1.24
  +++ ossp-pkg/l2/l2_test.c	2001/09/18 14:41:28	1.25
  @@ -74,7 +74,9 @@
   #ifdef WITH_PIPE
       l2_channel_t *chPipe;
   #endif
  +#ifdef WITH_SOCKET
       l2_channel_t *chSock;
  +#endif
   #ifdef WITH_SMTP
       l2_channel_t *chSmtp;
   #endif

From ossp-cvs-owner@ossp.org  Wed Sep 19 18:39:46 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8JGdiF37965; Wed, 19 Sep 2001 18:39:44 +0200 (CEST)
Date: Wed, 19 Sep 2001 18:39:44 +0200 (CEST)
Message-Id: <200109191639.f8JGdiF37965@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_pipe.c l2_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   19-Sep-2001 18:39:44
  Branch: HEAD                             Handle: 2001091917394400

  Modified files:
    ossp-pkg/l2             l2_ch_pipe.c l2_test.c

  Log:
    New implementation of signal handler and process control logic, improved
    reliability, some redesign, and test logic.

  Summary:
    Revision    Changes     Path
    1.12        +91 -62     ossp-pkg/l2/l2_ch_pipe.c
    1.26        +10 -5      ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_pipe.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 l2_ch_pipe.c
  --- ossp-pkg/l2/l2_ch_pipe.c	2001/09/18 14:38:51	1.11
  +++ ossp-pkg/l2/l2_ch_pipe.c	2001/09/19 16:39:44	1.12
  @@ -31,39 +31,51 @@
   
   #include <unistd.h>
   #include <signal.h>
  +#include <sys/wait.h>
   
   #define L2_PIPE_MODEDIRECT   1 /* direct command execution */
   #define L2_PIPE_MODESHELL    2 /* shell  command execution */
   #define L2_PIPE_MAXARGS    256 /* shell  command execution */
   
  +static l2_result_t hook_open(l2_context_t *, l2_channel_t *); /* prototypes */
  +
  +
   /* declare private channel configuration */
   typedef struct {
  -    int piFd[2];               /* pipe file descriptor           */
  -    int iMode;                 /* execution mode direct or shell */
  -    char *szCmdpath;          /* path to command and arguments  */
  -    char *pVec[L2_PIPE_MAXARGS]; /* vector of command and params */
  +    int piFd[2];                 /* pipe file descriptor               */
  +    int iMode;                   /* execution mode direct or shell     */
  +    pid_t Pid;                   /* pid set during fork in hook_open() */
  +    char *szCmdpath;             /* path to command and arguments      */
   } l2_ch_pipe_t;
   
   static void catchsignal(int sig, ...)
   {
  -    va_list ap;
  -    static l2_ch_pipe_t *cfg = NULL;
  -
  -    va_start(ap, sig);
  -    if (sig == 0)
  -        cfg = va_arg(ap, l2_ch_pipe_t *);
  +    int                  iStatus = 0;
  +    va_list              ap      = NULL;
  +    static l2_context_t *ctx     = NULL;
  +    static l2_channel_t *chan    = NULL;
  +
  +    if (sig == 0) {
  +        va_start(ap, sig);
  +        ctx  = va_arg(ap, l2_context_t *);
  +        chan = va_arg(ap, l2_channel_t *);
  +        va_end(ap);
  +    }
       else if (sig == SIGCHLD) {
  -        fprintf(stderr, "Pipe: SIGCHLD caught\n");
  -        close(cfg->piFd[1]);
  -        cfg->piFd[1] = -1; /* TODO: Fill in with new pipe fd */
  +/*        TRACE("SIGCHLD caught\n");*/
  +        waitpid(((l2_ch_pipe_t *)ctx->vp)->Pid, &iStatus, 0);
  +        close(((l2_ch_pipe_t *)ctx->vp)->piFd[1]);
  +        ((l2_ch_pipe_t *)ctx->vp)->piFd[1] = -1;
  +        if (hook_open(ctx, chan) != L2_OK) { /* TODO: Fix infinit loop! */
  +            close(((l2_ch_pipe_t *)ctx->vp)->piFd[1]);
  +            ((l2_ch_pipe_t *)ctx->vp)->piFd[1] = -1;
  +        }
       }
       else if (sig == SIGPIPE) {
  -        fprintf(stderr, "Pipe: SIGPIPE caught\n");
  -        close(cfg->piFd[1]);
  -        cfg->piFd[1] = -1; /* TODO: Fill in with new pipe fd */
  -        /* ((l2_ch_pipe_t *)(int *)ctx->vp)->piFd[1] = -1; */
  +/*        TRACE("SIGPIPE caught\n");*/
  +        close(((l2_ch_pipe_t *)ctx->vp)->piFd[1]);
  +        ((l2_ch_pipe_t *)ctx->vp)->piFd[1] = -1;
       }
  -    va_end(ap);
   }
   
   /* create channel */
  @@ -80,7 +92,6 @@
       cfg->piFd[1]    = -1; 
       cfg->iMode      = -1; 
       cfg->szCmdpath = NULL;
  -    memset(cfg->pVec, 0, sizeof(cfg->pVec));
   
       /* link private channel configuration into channel context */
       ctx->vp = cfg;
  @@ -94,26 +105,43 @@
       l2_ch_pipe_t *cfg = (l2_ch_pipe_t *)ctx->vp;
       l2_param_t pa[3]; 
       l2_result_t rv;
  -    char szMode[16]; /* just eneough for double-byte "direct" and NULL */
  +    FILE *File;
  +    char *szTemp;
  +    char *pbIndex;
   
       /* feed and call generic parameter parsing engine */
  -    L2_PARAM_SET(pa[0], mode, CHARPTR, szMode);
  +    L2_PARAM_SET(pa[0], mode, CHARPTR, &szTemp);
       L2_PARAM_SET(pa[1], path, STRING, &cfg->szCmdpath);
       L2_PARAM_END(pa[2]);
  -    rv = l2_util_setparams(pa, fmt, ap);
  +    if ((rv = l2_util_setparams(pa, fmt, ap)) != L2_OK)
  +        return rv;
   
  -    if (strcmp(szMode, "direct") == NULL)
  +    if (strcmp(szTemp, "direct") == NULL)
           cfg->iMode = L2_PIPE_MODEDIRECT;
  -    else if (strcmp(szMode, "shell") == NULL)
  +    else if (strcmp(szTemp, "shell") == NULL)
           cfg->iMode = L2_PIPE_MODESHELL;
       else
           return L2_ERR_ARG;
   
  -    catchsignal(0, cfg); /* initialize signal handler with incoming context */
  +    /* check to see if a file exists at the user specified path             */
  +    if(cfg->iMode != L2_PIPE_MODESHELL) {
  +        szTemp = strdup(cfg->szCmdpath);
  +        for (pbIndex = szTemp; *pbIndex != NULL; pbIndex++);
  +        *pbIndex = NULL;
  +        if (!(File = fopen(szTemp, "r")))
  +            return L2_ERR_ARG; /* the command does not exist at the given path  */
  +        else
  +            fclose(File);
  +        free(szTemp);
  +        szTemp = NULL;
  +        pbIndex = NULL;
  +    }
  +
  +    catchsignal(0, ctx, ch); /* initialize signal handler with context & ch */
       signal(SIGCHLD, (void(*)())catchsignal); /* pipe changes descriptor     */
       signal(SIGPIPE, (void(*)())catchsignal); /* pipe closes reading fd      */
   
  -    return rv;
  +    return rv; /* all okay */
   }
   
   /**********************************************************
  @@ -122,14 +150,15 @@
    **********************************************************/
   static l2_result_t parse_cmdpath (char *szBuf, char *szArgs[]) {
       int iCnt = 0;
  +
       while ((iCnt++ < L2_PIPE_MAXARGS) && (*szBuf != NULL)) {
           while ((*szBuf == ' ') || (*szBuf == '\t'))
  -            *szBuf++ = '\0';
  -        *szArgs++ = szBuf;
  +            *szBuf++ = '\0'; /* overwrite whitespace with EOL  */
  +        *szArgs++ = szBuf;   /* found the start of a new token */
           while ((*szBuf != '\0') && (*szBuf != ' ') && (*szBuf != '\t'))
               szBuf++;
       }
  -    *szArgs = NULL;
  +    *szArgs = NULL; /* add a NULL to mark the end of the chain */
   
       if (iCnt <= L2_PIPE_MAXARGS)
           return L2_OK;
  @@ -137,47 +166,48 @@
           return L2_ERR_ARG;
   }
   
  -/**********************************************************
  - * child_exec: Helper method to hook_open                 *
  - *   Redirect stdin to read from cfg->piFd. Exec a given  *
  - *   command or passes it to the sh shell for execution.  *
  - **********************************************************/
  -static l2_result_t child_exec(l2_ch_pipe_t *cfg)
  +/* open channel */
  +static l2_result_t hook_open(l2_context_t *ctx, l2_channel_t *ch)
   {
  +    l2_ch_pipe_t *cfg = (l2_ch_pipe_t *)ctx->vp;
  +    char *pVec[L2_PIPE_MAXARGS];
  +    l2_result_t rv;
  +
       /* make sure a command path was set */
       if (cfg->szCmdpath == NULL)
           return L2_ERR_USE;
   
  -        close(cfg->piFd[1]);                  /* close the writing end,  */
  -        cfg->piFd[1] = -1;                    /* because we don't use it */
  -        dup2(cfg->piFd[0], fileno(stdin));    /* copy the reading end    */
  +    memset(pVec, 0, sizeof(pVec));
   
  -        return execvp(*cfg->pVec, cfg->pVec); /* launch                  */
  -}
  -
  -/* open channel */
  -static l2_result_t hook_open(l2_context_t *ctx, l2_channel_t *ch)
  -{
  -    l2_ch_pipe_t *cfg = (l2_ch_pipe_t *)ctx->vp;
  -    l2_result_t rv;
  -    pid_t Pid;
  +    /* the distinction between modes is necessary, because only executing */
  +    /* commands in a shell environment allows usage of variables and such */
  +    if (cfg->iMode == L2_PIPE_MODESHELL) {
  +        pVec[0] = "/bin/sh";
  +        pVec[1] = "-c";
  +        pVec[2] = cfg->szCmdpath;
  +        pVec[3] = NULL; /* add a NULL to mark the end of the chain   */
  +    }
   
  -    if ((rv = parse_cmdpath(cfg->szCmdpath, cfg->pVec)) != L2_OK)
  -        return rv;
  +    else /* plain command execution */
  +        if ((rv = parse_cmdpath(cfg->szCmdpath, pVec)) != L2_OK)
  +            return rv;
   
  -    if (pipe(cfg->piFd) == -1)      /* open the pipe  */
  +    if (pipe(cfg->piFd) == -1)                /* open the pipe            */
           return L2_ERR_SYS;
   
  -    if ((Pid = fork()) > 0) {       /* parent process */
  -        close(cfg->piFd[0]);
  +    if ((cfg->Pid = fork()) > 0) {            /* parent process           */
  +        close(cfg->piFd[0]);                  /* half-duplex (no reading) */
           cfg->piFd[0] = -1;
       }
  -    else if ((Pid = fork()) == 0) { /* child process  */
  -        /* if child returns, there was an error       */
  -        if (child_exec(cfg) == -1) {
  -            close(cfg->piFd[0]);
  +    else if (cfg->Pid == 0) {                 /* child process            */
  +        close(cfg->piFd[1]);                  /* close the writing end,   */
  +        cfg->piFd[1] = -1;                    /* because we don't use it  */
  +        dup2(cfg->piFd[0], fileno(stdin));    /* copy the reading end     */
  +
  +        if (execvp(*pVec, pVec) == -1) {      /* launch                   */
  +            close(cfg->piFd[0]);              /* cleanup                  */
               cfg->piFd[0] = -1;
  -            return L2_ERR_SYS;
  +            return L2_ERR_SYS; /* if child returns, we have an error      */
           }
       }
       else /* fork failed  */
  @@ -192,12 +222,11 @@
   {
       l2_ch_pipe_t *cfg = (l2_ch_pipe_t *)ctx->vp;
   
  -    /* validate the pipe fd */
  -    if (cfg->piFd[1] == -1)  /* TODO: possibly remove this validation in */
  -        return L2_ERR_ARG;   /*       lieu of incoming SIGPIPE signal    */
  +    if (cfg->piFd[1] == -1)
  +        return L2_ERR_IO;
   
       /* write message to channel pipe */
  -    if (write(cfg->piFd[1], buf, buf_size) == -1)
  +    else if (write(cfg->piFd[1], buf, buf_size) == -1)
           return L2_ERR_SYS;
   
       return L2_OK;
  @@ -221,7 +250,7 @@
       l2_ch_pipe_t *cfg = (l2_ch_pipe_t *)ctx->vp;
   
       /* destroy channel configuration */
  -    free(&cfg->szCmdpath);
  +    free(cfg->szCmdpath);
       cfg->szCmdpath = NULL;
       free(cfg);
   
  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/09/18 14:41:28	1.25
  +++ ossp-pkg/l2/l2_test.c	2001/09/19 16:39:44	1.26
  @@ -131,13 +131,18 @@
   
       if (l2_stream_channel(st, chSyslog, L2_LEVEL_UPTO(L2_LEVEL_WARNING), L2_LEVEL_NONE) != L2_OK)
           die("failed to attach channel syslog into stream");
  -#endif
  +#endif /* Syslog */
   
   #ifdef WITH_PIPE
       if ((chPipe = l2_channel_create(&l2_handler_pipe)) == NULL)      /* Pipe */
           die("failed to create pipe channel");
  +
  +#if 0
  +    if (l2_channel_configure(chPipe, "mode,path", "direct", "/u/ms/travail/cronolinux/sbin/cronolog -o /u/ms/tmp/crono.log") != L2_OK)
  +        die("failed to configure pipe channel");
  +#endif
   
  -    if (l2_channel_configure(chPipe, "pipe", pipdesc[1]) != L2_OK)
  +    if (l2_channel_configure(chPipe, "mode,path", "shell", "$CRONOLOGDIR/cronolog -o $HOME/tmp/crono.log") != L2_OK)
           die("failed to configure pipe channel");
   
       if (l2_channel_open(chPipe) != L2_OK)
  @@ -145,7 +150,7 @@
   
       if (l2_stream_channel(st, chPipe, L2_LEVEL_UPTO(L2_LEVEL_WARNING), L2_LEVEL_NONE) != L2_OK)
           die("failed to attach channel pipe into stream");
  -#endif
  +#endif /* Pipe */
   
   #ifdef WITH_SOCKET
       /* Atenzione! Before doing any socket testing, make sure you have a valid */
  @@ -167,7 +172,7 @@
   
       if (l2_stream_channel(st, chSock, L2_LEVEL_UPTO(L2_LEVEL_WARNING), L2_LEVEL_NONE) != L2_OK)
           die("failed to attach channel socket into stream");
  -#endif
  +#endif /* Socket */
   
   #ifdef WITH_SMTP
       if ((chSmtp = l2_channel_create(&l2_handler_smtp)) == NULL)      /* SMTP */
  @@ -181,7 +186,7 @@
   
       if (l2_stream_channel(st, chSmtp, L2_LEVEL_UPTO(L2_LEVEL_ERROR), L2_LEVEL_NONE) != L2_OK)
           die("failed to attach smtp channel into stream");
  -#endif
  +#endif /* SMTP */
   
       if (l2_stream_levels(st, L2_LEVEL_UPTO(L2_LEVEL_WARNING), L2_LEVEL_NONE) != L2_OK)
           die("failed to set global logging level");

From ossp-cvs-owner@ossp.org  Thu Sep 20 18:26:58 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8KGQux25704; Thu, 20 Sep 2001 18:26:56 +0200 (CEST)
Date: Thu, 20 Sep 2001 18:26:56 +0200 (CEST)
Message-Id: <200109201626.f8KGQux25704@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO l2.pod l2_ch_pipe.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   20-Sep-2001 18:26:56
  Branch: HEAD                             Handle: 2001092017265600

  Modified files:
    ossp-pkg/l2             TODO l2.pod l2_ch_pipe.c

  Log:
    Debugging of channel's behavior logic when facing problematic children.

  Summary:
    Revision    Changes     Path
    1.24        +2  -0      ossp-pkg/l2/TODO
    1.7         +52 -0      ossp-pkg/l2/l2.pod
    1.13        +38 -16     ossp-pkg/l2/l2_ch_pipe.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 TODO
  --- ossp-pkg/l2/TODO	2001/09/18 14:38:51	1.23
  +++ ossp-pkg/l2/TODO	2001/09/20 16:26:56	1.24
  @@ -26,6 +26,8 @@
   MS:
   - implement pipe channel
   - review pipe handler for dangling descriptors
  +- configure only checks existance of command in non-shell mode
  +- find alternative to exec arguments which is hard coded to 256
   
   ISSUES
   ------
  Index: ossp-pkg/l2/l2.pod
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 l2.pod
  --- ossp-pkg/l2/l2.pod	2001/09/14 19:22:38	1.6
  +++ ossp-pkg/l2/l2.pod	2001/09/20 16:26:56	1.7
  @@ -102,6 +102,58 @@
   
   =back
   
  +=head2 Pipe Output Channel Handler (l2_handler_pipe)
  +
  +The Pipe output channel handler C<l2_handler_pipe> sends the incoming
  +message to the standard input of a chosen command, passed to the l2
  +library as a parameter when calling l2_configure.
  +
  +Any command that operates on the standard input (c language descriptor
  +stdin) can be used, but attention is advised due to the wide
  +variety of commands and their particular exit behaviours.
  +
  +Attention! Commands that exit on their own and with a success return value will
  +not be restarted, however those returning with non-zero exit codes will be
  +restarted. L2 reopens closed pipe channels due to faulted command processes in
  +this way. Should such a reconnection be required after a command's successful
  +self-termination, l2_channel_open() may be called again on the same pipe channel
  +pointer previously used. Stream logging will then write to the pipe channel
  +handler, which will forward the log messages to the given command as always. To
  +find out if a pipe channel has closed due to the behaviour of its command
  +process, the l2_channel_write() operation may be called on it with a non-NULL
  +message parameter, and 0 as the buffsize parameter. The return result will be
  +L2_OK if the channel is open. Using the C language, such a check might look
  +like:
  +
  +TODO NOTE FROM MICHAEL: This info will change once the pipe channel handler is
  +redesigned to allow for proper process termination, signal handling of such
  +processes, and subsequent channel closing!!!!!!!!!!!
  +
  +    if (l2_channel_write(pPipechannel, L2_LEVEL_NOTICE, "", 0) != L2_OK)
  +        if (l2_channel_open(pPipechannel) != L2_OK)
  +            exit(1); /* failure */
  +
  +The command passed to the pipe channel handler may also be stopped while still
  +using a L2 stream log. If a command process is stopped no action is taken
  +until further logging occurs. As soon as the pipe channel handler receives a
  +message due to a l2_stream_log operation, it will attempt to restart the
  +stopped command process and write to its standard input. If the effort to
  +restart the command process fails then the command process is considered
  +dead, and L2 will terminate the process and close the channel. A
  +l2_channel_open() will then reopen the pipe channel using configuration
  +information previously entered with l2_channel_configure().
  +
  +It provides the following channel parameters:
  +
  +=over 4
  +
  +=item B<command> (optional, C<char *>)
  +
  +L2 will execute the command at this user-provided path, and pipe messages to
  +its standard input when l2_stream_log operations are called.
  +
  +=back
  +
   =head2 SMTP Output Channel Handler (l2_handler_smtp)
   
   The SMTP output channel handler C<l2_handler_smtp> sends the incoming
  Index: ossp-pkg/l2/l2_ch_pipe.c
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 l2_ch_pipe.c
  --- ossp-pkg/l2/l2_ch_pipe.c	2001/09/19 16:39:44	1.12
  +++ ossp-pkg/l2/l2_ch_pipe.c	2001/09/20 16:26:56	1.13
  @@ -38,22 +38,23 @@
   #define L2_PIPE_MAXARGS    256 /* shell  command execution */
   
   static l2_result_t hook_open(l2_context_t *, l2_channel_t *); /* prototypes */
  +static l2_result_t hook_close(l2_context_t *, l2_channel_t *);
   
   
   /* declare private channel configuration */
   typedef struct {
  -    int piFd[2];                 /* pipe file descriptor               */
  -    int iMode;                   /* execution mode direct or shell     */
  -    pid_t Pid;                   /* pid set during fork in hook_open() */
  -    char *szCmdpath;             /* path to command and arguments      */
  +    int piFd[2];           /* pipe file descriptor                   */
  +    int iChild;            /* exception status of child pipe process */
  +    int iMode;             /* execution mode direct or shell         */
  +    pid_t Pid;             /* pid set during fork in hook_open()     */
  +    char *szCmdpath;       /* path to command and arguments          */
   } l2_ch_pipe_t;
   
   static void catchsignal(int sig, ...)
   {
  -    int                  iStatus = 0;
  -    va_list              ap      = NULL;
  -    static l2_context_t *ctx     = NULL;
  -    static l2_channel_t *chan    = NULL;
  +    va_list              ap     = NULL;
  +    static l2_context_t *ctx    = NULL;
  +    static l2_channel_t *chan   = NULL;
   
       if (sig == 0) {
           va_start(ap, sig);
  @@ -63,15 +64,24 @@
       }
       else if (sig == SIGCHLD) {
   /*        TRACE("SIGCHLD caught\n");*/
  -        waitpid(((l2_ch_pipe_t *)ctx->vp)->Pid, &iStatus, 0);
  -        close(((l2_ch_pipe_t *)ctx->vp)->piFd[1]);
  -        ((l2_ch_pipe_t *)ctx->vp)->piFd[1] = -1;
  -        if (hook_open(ctx, chan) != L2_OK) { /* TODO: Fix infinit loop! */
  +        waitpid(((l2_ch_pipe_t *)ctx->vp)->Pid, &((l2_ch_pipe_t *)ctx->vp)->iChild, WUNTRACED);
  +        if (WIFEXITED(((l2_ch_pipe_t *)ctx->vp)->iChild)) {
               close(((l2_ch_pipe_t *)ctx->vp)->piFd[1]);
               ((l2_ch_pipe_t *)ctx->vp)->piFd[1] = -1;
  +            ((l2_ch_pipe_t *)ctx->vp)->Pid = -1;
  +            /* check if process called exit() abnormally, then if so restarts */
  +            if (WEXITSTATUS(((l2_ch_pipe_t *)ctx->vp)->iChild)) {
  +                fprintf(stderr, "exit status is %d\n", WEXITSTATUS(((l2_ch_pipe_t *)ctx->vp)->iChild));
  +                if (hook_open(ctx, chan) != L2_OK) { /* TODO: Fix infinit loop! */
  +                    close(((l2_ch_pipe_t *)ctx->vp)->piFd[1]);
  +                    ((l2_ch_pipe_t *)ctx->vp)->piFd[1] = -1;
  +                }
  +            }
  +        }
  +        else if (WIFSTOPPED(((l2_ch_pipe_t *)ctx->vp)->iChild)) {
           }
       }
  -    else if (sig == SIGPIPE) {
  +    else if (sig == SIGPIPE) { /* thrown when we write to child's closed pipe */
   /*        TRACE("SIGPIPE caught\n");*/
           close(((l2_ch_pipe_t *)ctx->vp)->piFd[1]);
           ((l2_ch_pipe_t *)ctx->vp)->piFd[1] = -1;
  @@ -88,9 +98,11 @@
           return L2_ERR_ARG;
   
       /* initialize configuration with reasonable defaults */
  -    cfg->piFd[0]    = -1; 
  -    cfg->piFd[1]    = -1; 
  -    cfg->iMode      = -1; 
  +    cfg->piFd[0]   = -1; 
  +    cfg->piFd[1]   = -1; 
  +    cfg->iChild    =  0; 
  +    cfg->iMode     = -1; 
  +    cfg->Pid       = -1; 
       cfg->szCmdpath = NULL;
   
       /* link private channel configuration into channel context */
  @@ -225,6 +237,13 @@
       if (cfg->piFd[1] == -1)
           return L2_ERR_IO;
   
  +    if (WIFSTOPPED(cfg->iChild)) {
  +        if (kill(cfg->Pid, SIGCONT)) {
  +            hook_close(ctx, ch);
  +            cfg->iChild = 0;
  +            return L2_ERR_SYS;
  +        }
  +    }
       /* write message to channel pipe */
       else if (write(cfg->piFd[1], buf, buf_size) == -1)
           return L2_ERR_SYS;
  @@ -240,6 +259,9 @@
       /* close channel pipe for parent process created in hook_open() */
       close(cfg->piFd[1]);
       cfg->piFd[1] = -1;
  +    if (kill(cfg->Pid, SIGTERM))
  +        return L2_ERR_SYS;
  +    cfg->Pid = -1;
   
       return L2_OK;
   }

From ossp-cvs-owner@ossp.org  Fri Sep 21 19:29:48 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8LHTlB00288; Fri, 21 Sep 2001 19:29:47 +0200 (CEST)
Date: Fri, 21 Sep 2001 19:29:47 +0200 (CEST)
Message-Id: <200109211729.f8LHTlB00288@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   21-Sep-2001 19:29:47
  Branch: HEAD                             Handle: 2001092118294700

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    Remember chaining the signals if we get that far.

  Summary:
    Revision    Changes     Path
    1.25        +1  -0      ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 TODO
  --- ossp-pkg/l2/TODO	2001/09/20 16:26:56	1.24
  +++ ossp-pkg/l2/TODO	2001/09/21 17:29:47	1.25
  @@ -28,6 +28,7 @@
   - review pipe handler for dangling descriptors
   - configure only checks existance of command in non-shell mode
   - find alternative to exec arguments which is hard coded to 256
  +- signal handler chaining, save old signal handler and call it after our own
   
   ISSUES
   ------

From ossp-cvs-owner@ossp.org  Fri Sep 21 19:30:27 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8LHUQb00615; Fri, 21 Sep 2001 19:30:26 +0200 (CEST)
Date: Fri, 21 Sep 2001 19:30:26 +0200 (CEST)
Message-Id: <200109211730.f8LHUQb00615@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   21-Sep-2001 19:30:26
  Branch: HEAD                             Handle: 2001092118302600

  Modified files:
    ossp-pkg/l2             l2_test.c

  Log:
    Followup this suspicion later to remove unnecessary junk.

  Summary:
    Revision    Changes     Path
    1.27        +2  -4      ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/09/19 16:39:44	1.26
  +++ ossp-pkg/l2/l2_test.c	2001/09/21 17:30:26	1.27
  @@ -32,10 +32,8 @@
   #include <sys/types.h>   /* following group of includes are for */
   #include <sys/socket.h>  /* socket testing only                 */
   #include <netinet/in.h>
  -#include <netdb.h>
  -#include <syslog.h>
  -#include <unistd.h>      /* unistd and fcntl included for pipes */
  -#include <fcntl.h>
  +#include <netdb.h>       /* TODO: probably can be removed */
  +#include <syslog.h>      /* TODO: probably can be removed */
   
   #include "l2.h"
   

From ossp-cvs-owner@ossp.org  Fri Sep 21 19:31:00 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8LHUwi00681; Fri, 21 Sep 2001 19:30:58 +0200 (CEST)
Date: Fri, 21 Sep 2001 19:30:58 +0200 (CEST)
Message-Id: <200109211730.f8LHUwi00681@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_p.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   21-Sep-2001 19:30:58
  Branch: HEAD                             Handle: 2001092118305800

  Modified files:
    ossp-pkg/l2             l2_p.h

  Log:
    Added more homebrewed TRACE elements.

  Summary:
    Revision    Changes     Path
    1.19        +11 -0      ossp-pkg/l2/l2_p.h
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_p.h
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 l2_p.h
  --- ossp-pkg/l2/l2_p.h	2001/09/14 10:12:48	1.18
  +++ ossp-pkg/l2/l2_p.h	2001/09/21 17:30:58	1.19
  @@ -54,6 +54,17 @@
       if (expr) \
           cu(value)
   
  +#ifndef NDEBUG
  +#define TRACE(str)\
  +        do {\
  +            fprintf(stderr, "%s:%d: %s\n", __FILE__, __LINE__, str);\
  +            exit(1);\
  +        }\
  +        while (0)
  +#else
  +#define TRACE(expr) ((void)0)
  +#endif
  +
   #define L2_MAX_MSGSIZE    4096
   #define L2_MAX_CHANNELS    128
   #define L2_MAX_FORMATTERS  128

From ossp-cvs-owner@ossp.org  Fri Sep 21 19:32:09 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8LHW8w00786; Fri, 21 Sep 2001 19:32:08 +0200 (CEST)
Date: Fri, 21 Sep 2001 19:32:08 +0200 (CEST)
Message-Id: <200109211732.f8LHW8w00786@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_pipe.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   21-Sep-2001 19:32:08
  Branch: HEAD                             Handle: 2001092118320800

  Modified files:
    ossp-pkg/l2             l2_ch_pipe.c

  Log:
    Yet another signal handler redesign and more reliability.

  Summary:
    Revision    Changes     Path
    1.14        +74 -75     ossp-pkg/l2/l2_ch_pipe.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_pipe.c
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 l2_ch_pipe.c
  --- ossp-pkg/l2/l2_ch_pipe.c	2001/09/20 16:26:56	1.13
  +++ ossp-pkg/l2/l2_ch_pipe.c	2001/09/21 17:32:08	1.14
  @@ -28,6 +28,7 @@
   */
   
   #include "l2.h"
  +#include "l2_p.h"              /* for TRACE() */
   
   #include <unistd.h>
   #include <signal.h>
  @@ -37,55 +38,36 @@
   #define L2_PIPE_MODESHELL    2 /* shell  command execution */
   #define L2_PIPE_MAXARGS    256 /* shell  command execution */
   
  -static l2_result_t hook_open(l2_context_t *, l2_channel_t *); /* prototypes */
  -static l2_result_t hook_close(l2_context_t *, l2_channel_t *);
  +static l2_result_t hook_close(l2_context_t *, l2_channel_t *); /* prototypes */
   
   
   /* declare private channel configuration */
   typedef struct {
  -    int piFd[2];           /* pipe file descriptor                   */
  -    int iChild;            /* exception status of child pipe process */
  -    int iMode;             /* execution mode direct or shell         */
  -    pid_t Pid;             /* pid set during fork in hook_open()     */
  -    char *szCmdpath;       /* path to command and arguments          */
  +    pid_t            Pid;        /* process id of child command          */
  +    int              iWritefail; /* counter to failed write() operations */
  +    int              piFd[2];    /* pipe file descriptor                 */
  +    int              iMode;      /* execution mode direct or shell       */
  +    char            *szCmdpath;  /* path to command and arguments        */
  +    struct sigaction sigchld;    /* initial state of chld signal handler */
  +    struct sigaction sigpipe;    /* initial state of pipe signal handler */
   } l2_ch_pipe_t;
   
   static void catchsignal(int sig, ...)
   {
  -    va_list              ap     = NULL;
  -    static l2_context_t *ctx    = NULL;
  -    static l2_channel_t *chan   = NULL;
  -
  -    if (sig == 0) {
  -        va_start(ap, sig);
  -        ctx  = va_arg(ap, l2_context_t *);
  -        chan = va_arg(ap, l2_channel_t *);
  -        va_end(ap);
  -    }
  -    else if (sig == SIGCHLD) {
  -/*        TRACE("SIGCHLD caught\n");*/
  -        waitpid(((l2_ch_pipe_t *)ctx->vp)->Pid, &((l2_ch_pipe_t *)ctx->vp)->iChild, WUNTRACED);
  -        if (WIFEXITED(((l2_ch_pipe_t *)ctx->vp)->iChild)) {
  -            close(((l2_ch_pipe_t *)ctx->vp)->piFd[1]);
  -            ((l2_ch_pipe_t *)ctx->vp)->piFd[1] = -1;
  -            ((l2_ch_pipe_t *)ctx->vp)->Pid = -1;
  -            /* check if process called exit() abnormally, then if so restarts */
  -            if (WEXITSTATUS(((l2_ch_pipe_t *)ctx->vp)->iChild)) {
  -                fprintf(stderr, "exit status is %d\n", WEXITSTATUS(((l2_ch_pipe_t *)ctx->vp)->iChild));
  -                if (hook_open(ctx, chan) != L2_OK) { /* TODO: Fix infinit loop! */
  -                    close(((l2_ch_pipe_t *)ctx->vp)->piFd[1]);
  -                    ((l2_ch_pipe_t *)ctx->vp)->piFd[1] = -1;
  -                }
  -            }
  -        }
  -        else if (WIFSTOPPED(((l2_ch_pipe_t *)ctx->vp)->iChild)) {
  -        }
  -    }
  -    else if (sig == SIGPIPE) { /* thrown when we write to child's closed pipe */
  -/*        TRACE("SIGPIPE caught\n");*/
  -        close(((l2_ch_pipe_t *)ctx->vp)->piFd[1]);
  -        ((l2_ch_pipe_t *)ctx->vp)->piFd[1] = -1;
  +    pid_t Pid;         /* for wait() */
  +    int   iStatus = 0; /* for wait() */
  +
  +    if (sig == SIGCHLD) {
  +        TRACE("SIGCHLD caught\n");
  +        Pid = waitpid(-1, &iStatus, WUNTRACED);
  +        if (WIFEXITED(iStatus))
  +            TRACE("EXITED child\n");   /* child finished and returned       */
  +        else if (WIFSIGNALED(iStatus))
  +            TRACE("SIGNALED child\n"); /* child finished due to a signal    */
  +        else if (WIFSTOPPED(iStatus))
  +            TRACE("STOPPED child\n");  /* child stopped due to a signal     */
       }
  +    else if (sig == SIGPIPE);          /* noop for now                      */
   }
   
   /* create channel */
  @@ -98,12 +80,14 @@
           return L2_ERR_ARG;
   
       /* initialize configuration with reasonable defaults */
  -    cfg->piFd[0]   = -1; 
  -    cfg->piFd[1]   = -1; 
  -    cfg->iChild    =  0; 
  -    cfg->iMode     = -1; 
  -    cfg->Pid       = -1; 
  -    cfg->szCmdpath = NULL;
  +    cfg->Pid        = -1;
  +    cfg->iWritefail =  0; 
  +    cfg->piFd[0]    = -1; 
  +    cfg->piFd[1]    = -1; 
  +    cfg->iMode      = -1; 
  +    cfg->szCmdpath  = NULL;
  +    memset(&cfg->sigchld, 0, sizeof(cfg->sigchld));
  +    memset(&cfg->sigpipe, 0, sizeof(cfg->sigpipe));
   
       /* link private channel configuration into channel context */
       ctx->vp = cfg;
  @@ -135,10 +119,10 @@
       else
           return L2_ERR_ARG;
   
  -    /* check to see if a file exists at the user specified path             */
  -    if(cfg->iMode != L2_PIPE_MODESHELL) {
  +    /* check to see if a file exists at the user specified path */
  +    if (cfg->iMode != L2_PIPE_MODESHELL) {
           szTemp = strdup(cfg->szCmdpath);
  -        for (pbIndex = szTemp; *pbIndex != NULL; pbIndex++);
  +        for (pbIndex = szTemp; (*pbIndex != ' ') && (*pbIndex != NULL); pbIndex++);
           *pbIndex = NULL;
           if (!(File = fopen(szTemp, "r")))
               return L2_ERR_ARG; /* the command does not exist at the given path  */
  @@ -149,11 +133,7 @@
           pbIndex = NULL;
       }
   
  -    catchsignal(0, ctx, ch); /* initialize signal handler with context & ch */
  -    signal(SIGCHLD, (void(*)())catchsignal); /* pipe changes descriptor     */
  -    signal(SIGPIPE, (void(*)())catchsignal); /* pipe closes reading fd      */
  -
  -    return rv; /* all okay */
  +    return rv;
   }
   
   /**********************************************************
  @@ -163,6 +143,9 @@
   static l2_result_t parse_cmdpath (char *szBuf, char *szArgs[]) {
       int iCnt = 0;
   
  +    if (szBuf == NULL)     /* check for bad input before we  */
  +        return L2_ERR_ARG; /* dereference and throw a SIGSEV */
  +
       while ((iCnt++ < L2_PIPE_MAXARGS) && (*szBuf != NULL)) {
           while ((*szBuf == ' ') || (*szBuf == '\t'))
               *szBuf++ = '\0'; /* overwrite whitespace with EOL  */
  @@ -183,14 +166,23 @@
   {
       l2_ch_pipe_t *cfg = (l2_ch_pipe_t *)ctx->vp;
       char *pVec[L2_PIPE_MAXARGS];
  +    struct sigaction locact;
       l2_result_t rv;
  -
  -    /* make sure a command path was set */
  -    if (cfg->szCmdpath == NULL)
  -        return L2_ERR_USE;
   
  +    /* initialize auto vars before using them */
       memset(pVec, 0, sizeof(pVec));
  +    memset(&locact, 0, sizeof(locact));
   
  +    locact.sa_handler = (void(*)())catchsignal;
  +    sigemptyset(&locact.sa_mask);
  +    locact.sa_flags = 0;
  +
  +    /* save old signal context before replacing with our own */
  +    if (sigaction(SIGCHLD, &locact, &cfg->sigchld) < 0)
  +        return L2_ERR_SYS;
  +    if (sigaction(SIGPIPE, &locact, &cfg->sigpipe) < 0)
  +        return L2_ERR_SYS;
  +
       /* the distinction between modes is necessary, because only executing */
       /* commands in a shell environment allows usage of variables and such */
       if (cfg->iMode == L2_PIPE_MODESHELL) {
  @@ -200,7 +192,7 @@
           pVec[3] = NULL; /* add a NULL to mark the end of the chain   */
       }
   
  -    else /* plain command execution */
  +    else /* plain direct command execution */
           if ((rv = parse_cmdpath(cfg->szCmdpath, pVec)) != L2_OK)
               return rv;
   
  @@ -217,8 +209,8 @@
           dup2(cfg->piFd[0], fileno(stdin));    /* copy the reading end     */
   
           if (execvp(*pVec, pVec) == -1) {      /* launch                   */
  -            close(cfg->piFd[0]);              /* cleanup                  */
  -            cfg->piFd[0] = -1;
  +            close(cfg->piFd[0]);              /* cleanup in case we fail  */
  +            cfg->piFd[0] = -1; /* if execvp() doesn't swap our context or */
               return L2_ERR_SYS; /* if child returns, we have an error      */
           }
       }
  @@ -228,27 +220,28 @@
       return L2_OK;
   }
   
  -/* write to channel */
  +/* write to channel, possibly recursively */
   static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch,
                                 l2_level_t level, const char *buf, size_t buf_size)
   {
       l2_ch_pipe_t *cfg = (l2_ch_pipe_t *)ctx->vp;
  -
  -    if (cfg->piFd[1] == -1)
  -        return L2_ERR_IO;
   
  -    if (WIFSTOPPED(cfg->iChild)) {
  -        if (kill(cfg->Pid, SIGCONT)) {
  +    /* write message to channel pipe */
  +    if (write(cfg->piFd[1], buf, buf_size) == -1) {
  +        if ((errno == EPIPE) && (cfg->iWritefail++ < 6)) {
               hook_close(ctx, ch);
  -            cfg->iChild = 0;
  +            hook_open(ctx, ch);
  +            return hook_write(ctx, ch, level, buf, buf_size);
  +        }
  +        else { /* not broken pipe problem or over the fail limit */
  +            cfg->iWritefail = 0; /* reset pipe failure counter   */
               return L2_ERR_SYS;
           }
       }
  -    /* write message to channel pipe */
  -    else if (write(cfg->piFd[1], buf, buf_size) == -1)
  -        return L2_ERR_SYS;
  -
  -    return L2_OK;
  +    else {                   /* write() to pipe succeeded  */
  +        cfg->iWritefail = 0; /* reset pipe failure counter */
  +        return L2_OK;
  +    }
   }
   
   /* close channel */
  @@ -256,13 +249,19 @@
   {
       l2_ch_pipe_t *cfg = (l2_ch_pipe_t *)ctx->vp;
   
  +    /* restore previous signal context */
  +    if (sigaction(SIGCHLD, &cfg->sigchld, NULL) < 0)
  +        return L2_ERR_SYS;
  +    if (sigaction(SIGPIPE, &cfg->sigpipe, NULL) < 0)
  +        return L2_ERR_SYS;
  +
       /* close channel pipe for parent process created in hook_open() */
       close(cfg->piFd[1]);
       cfg->piFd[1] = -1;
  -    if (kill(cfg->Pid, SIGTERM))
  +    if ((kill (cfg->Pid, SIGTERM)) && (errno != ESRCH))
           return L2_ERR_SYS;
  -    cfg->Pid = -1;
   
  +    cfg->Pid = -1;
       return L2_OK;
   }
   

From ossp-cvs-owner@ossp.org  Mon Sep 24 16:36:36 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8OEaZ189771; Mon, 24 Sep 2001 16:36:35 +0200 (CEST)
Date: Mon, 24 Sep 2001 16:36:35 +0200 (CEST)
Message-Id: <200109241436.f8OEaZ189771@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_pipe.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   24-Sep-2001 16:36:35
  Branch: HEAD                             Handle: 2001092415363400

  Modified files:
    ossp-pkg/l2             l2_ch_pipe.c

  Log:
    Debugged TRACE and added debug test code.

  Summary:
    Revision    Changes     Path
    1.15        +2  -0      ossp-pkg/l2/l2_ch_pipe.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_pipe.c
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 l2_ch_pipe.c
  --- ossp-pkg/l2/l2_ch_pipe.c	2001/09/21 17:32:08	1.14
  +++ ossp-pkg/l2/l2_ch_pipe.c	2001/09/24 14:36:34	1.15
  @@ -66,6 +66,8 @@
               TRACE("SIGNALED child\n"); /* child finished due to a signal    */
           else if (WIFSTOPPED(iStatus))
               TRACE("STOPPED child\n");  /* child stopped due to a signal     */
  +        else
  +            TRACE("Unknown SIGNAL\n"); /* child stopped due to a signal     */
       }
       else if (sig == SIGPIPE);          /* noop for now                      */
   }

From ossp-cvs-owner@ossp.org  Mon Sep 24 16:37:38 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8OEbbR89876; Mon, 24 Sep 2001 16:37:37 +0200 (CEST)
Date: Mon, 24 Sep 2001 16:37:37 +0200 (CEST)
Message-Id: <200109241437.f8OEbbR89876@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_p.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   24-Sep-2001 16:37:37
  Branch: HEAD                             Handle: 2001092415373600

  Modified files:
    ossp-pkg/l2             l2_p.h

  Log:
    Debugged TRACE.

  Summary:
    Revision    Changes     Path
    1.20        +1  -3      ossp-pkg/l2/l2_p.h
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_p.h
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 l2_p.h
  --- ossp-pkg/l2/l2_p.h	2001/09/21 17:30:58	1.19
  +++ ossp-pkg/l2/l2_p.h	2001/09/24 14:37:36	1.20
  @@ -56,10 +56,8 @@
   
   #ifndef NDEBUG
   #define TRACE(str)\
  -        do {\
  +        do\
               fprintf(stderr, "%s:%d: %s\n", __FILE__, __LINE__, str);\
  -            exit(1);\
  -        }\
           while (0)
   #else
   #define TRACE(expr) ((void)0)

From ossp-cvs-owner@ossp.org  Mon Sep 24 17:36:24 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8OFaO396652; Mon, 24 Sep 2001 17:36:24 +0200 (CEST)
Date: Mon, 24 Sep 2001 17:36:24 +0200 (CEST)
Message-Id: <200109241536.f8OFaO396652@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_channel.c l2_p.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   24-Sep-2001 17:36:24
  Branch: HEAD                             Handle: 2001092416362300

  Modified files:
    ossp-pkg/l2             l2_channel.c l2_p.h

  Log:
    Provide convinient channel error handling functions.

  Summary:
    Revision    Changes     Path
    1.19        +67 -0      ossp-pkg/l2/l2_channel.c
    1.21        +3  -0      ossp-pkg/l2/l2_p.h
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_channel.c
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 l2_channel.c
  --- ossp-pkg/l2/l2_channel.c	2001/09/13 12:50:26	1.18
  +++ ossp-pkg/l2/l2_channel.c	2001/09/24 15:36:23	1.19
  @@ -51,6 +51,9 @@
       ch->downstream = NULL;
       memset(&ch->context, 0, sizeof(l2_context_t));
       memcpy(&ch->handler, h, sizeof(l2_handler_t));
  +    ch->rvErrorInfo = L2_OK;
  +    ch->szErrorInfo[0] = '\0';
  +    ch->szError[0] = '\0';
   
       /* (optionally) perform create operation in handler */
       if (ch->handler.create != NULL) {
  @@ -227,6 +230,70 @@
       free(ch);
   
       return rv;
  +}
  +
  +l2_result_t l2_channel_errorinfo(l2_channel_t *ch, l2_result_t rv, const char *fmt, ...)
  +{
  +    va_list ap;
  +
  +    /* argument sanity check */
  +    if (ch == NULL || rv == L2_OK || fmt == NULL)
  +        return L2_ERR_ARG;
  +
  +    /* remember error information */
  +    va_start(ap, fmt);
  +    l2_util_vsprintf(ch->szErrorInfo, sizeof(ch->szErrorInfo), fmt, ap);
  +    ch->rvErrorInfo = rv;
  +    va_end(ap);
  +
  +    return L2_OK;
  +}
  +
  +char *l2_channel_strerror(l2_channel_t *ch, l2_result_t rv)
  +{
  +    char *sz;
  +    char *cpBuf;
  +    int nBuf;
  +    int n;
  +
  +    /* argument sanity check */
  +    if (ch == NULL)
  +        return NULL;
  +
  +    /* start at begin of buffer */
  +    cpBuf = ch->szError;
  +    nBuf  = sizeof(ch->szError);
  +
  +    /* translate result value into corresponding string */
  +    if      (rv == L2_OK)      sz = "everything ok";
  +    else if (rv == L2_ERR_ARG) sz = "invalid argument";
  +    else if (rv == L2_ERR_USE) sz = "invalid use";
  +    else if (rv == L2_ERR_MEM) sz = "no more memory available";
  +    else if (rv == L2_ERR_SYS) sz = "operating system error";
  +    else if (rv == L2_ERR_IO)  sz = "input/output error";
  +    else if (rv == L2_ERR_FMT) sz = "formatting error";
  +    else if (rv == L2_ERR_INT) sz = "internal error";
  +    else                       sz = "unknown error";
  +    n = l2_util_sprintf(cpBuf, nBuf, "%s", sz);
  +    cpBuf += n;
  +    nBuf  -= n;
  +
  +    /* optionally annotate with error information */
  +    if (rv == ch->rvErrorInfo && ch->szErrorInfo[0] != '\0') {
  +        n = l2_util_sprintf(cpBuf, nBuf, "; %s", ch->szErrorInfo);
  +        cpBuf += n;
  +        nBuf  -= n;
  +    }
  +
  +    /* optionally annotate with operating system error information */
  +    if (rv == L2_ERR_SYS) {
  +        n = l2_util_sprintf(cpBuf, nBuf, "; %s (%d)", strerror(errno), errno);
  +        cpBuf += n;
  +        nBuf  -= n;
  +    }
  +
  +    /* return pointer to internal buffer */
  +    return ch->szError;
   }
   
   /* stack channel on top of another channel */
  Index: ossp-pkg/l2/l2_p.h
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 l2_p.h
  --- ossp-pkg/l2/l2_p.h	2001/09/24 14:37:36	1.20
  +++ ossp-pkg/l2/l2_p.h	2001/09/24 15:36:23	1.21
  @@ -77,6 +77,9 @@
       l2_channel_t *downstream;
       l2_context_t  context;
       l2_handler_t  handler;
  +    char          szError[1024];
  +    char          szErrorInfo[512];
  +    l2_result_t   rvErrorInfo;
   };
   
   typedef struct {

From ossp-cvs-owner@ossp.org  Tue Sep 25 11:35:19 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8P9ZIY20207; Tue, 25 Sep 2001 11:35:18 +0200 (CEST)
Date: Tue, 25 Sep 2001 11:35:18 +0200 (CEST)
Message-Id: <200109250935.f8P9ZIY20207@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_filter.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   25-Sep-2001 11:35:18
  Branch: HEAD                             Handle: 2001092510351700

  Modified files:
    ossp-pkg/l2             l2_ch_filter.c

  Log:
    Blindly implement the regex-based filter channel.
    This is still not tested.

  Summary:
    Revision    Changes     Path
    1.9         +95 -16     ossp-pkg/l2/l2_ch_filter.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_filter.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 l2_ch_filter.c
  --- ossp-pkg/l2/l2_ch_filter.c	2001/09/12 09:42:34	1.8
  +++ ossp-pkg/l2/l2_ch_filter.c	2001/09/25 09:35:17	1.9
  @@ -28,40 +28,119 @@
   */
   
   #include "l2.h"
  +#include "l2_ut_pcre.h"
   
  +/* declare private channel configuration */
  +typedef struct {
  +    char *szRegex;
  +    int   bNegate;
  +    pcre *pcreRegex;
  +    pcre_extra *pcreExtra;
  +} l2_ch_filter_t;
  +
  +/* create channel */
   static l2_result_t hook_create(l2_context_t *ctx, l2_channel_t *ch)
   {
  +    l2_ch_filter_t *cfg;
  +
  +    /* allocate private channel configuration */
  +    if ((cfg = (l2_ch_filter_t *)malloc(sizeof(l2_ch_filter_t))) == NULL)
  +        return L2_ERR_MEM;
  +
  +    /* initialize configuration with reasonable defaults */
  +    cfg->szRegex   = NULL;
  +    cfg->bNegate   = 0;
  +    cfg->pcreRegex = NULL;
  +    cfg->pcreExtra = NULL;
  +
  +    /* link private channel configuration into channel context */
  +    ctx->vp = cfg;
  +
       return L2_OK;
   }
   
  +/* configure channel */
   static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
  -    return L2_OK;
  -}
  +    l2_ch_filter_t *cfg = (l2_ch_filter_t *)ctx->vp;
  +    l2_param_t pa[3]; 
  +    l2_result_t rv;
  +    const char *szError;
  +    int nErrorOffset;
  +
  +    /* feed and call generic parameter parsing engine */
  +    L2_PARAM_SET(pa[0], regex,  STRING, &cfg->szRegex);
  +    L2_PARAM_SET(pa[1], negate, INT,    &cfg->bNegate);
  +    L2_PARAM_END(pa[2]);
  +    if ((rv = l2_util_setparams(pa, fmt, ap)) != L2_OK)
  +        return rv;
  +
  +    /* translate regular expression into finite state machine */ 
  +    if (cfg->szRegex != NULL) {
  +        /* compile regular expression into FSM */
  +        if ((cfg->pcreRegex = pcre_compile(cfg->szRegex, 0, &szError, &nErrorOffset, NULL)) == NULL) {
  +            l2_channel_errorinfo(ch, L2_ERR_ARG, "%s ('%c')", szError, cfg->szRegex[nErrorOffset]);
  +            return L2_ERR_ARG;
  +        }
  +        /* study FSM for more performance */
  +        if ((cfg->pcreExtra = pcre_study(cfg->pcreRegex, 0, &szError)) == NULL) {
  +            free(cfg->pcreRegex);
  +            cfg->pcreRegex = NULL;
  +            l2_channel_errorinfo(ch, L2_ERR_ARG, "%s", szError);
  +            return L2_ERR_ARG;
  +        }
  +    }
   
  -static l2_result_t hook_open(l2_context_t *ctx, l2_channel_t *ch)
  -{
       return L2_OK;
   }
   
  +/* write to channel */
   static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch,
                                 l2_level_t level, const char *buf, size_t buf_size)
   {
  -    return L2_OK;
  -}
  -
  -static l2_result_t hook_flush(l2_context_t *ctx, l2_channel_t *ch)
  -{
  -    return L2_OK;
  -}
  +    l2_ch_filter_t *cfg = (l2_ch_filter_t *)ctx->vp;
  +    l2_channel_t *downstream = l2_channel_downstream(ch);
  +    l2_result_t rv;
  +    int bPass;
  +
  +    bPass = TRUE;
  +
  +    /* apply filter */
  +    if (cfg->pcreRegex != NULL && cfg->pcreExtra != NULL) {
  +       if (pcre_exec(cfg->pcreRegex, cfg->pcreExtra, buf, buf_size, 0, 0, NULL, 0) > 0)
  +           bPass = TRUE;
  +       else
  +           bPass = FALSE;
  +       if (cfg->bNegate)
  +           bPass = !bPass;
  +    }
  +
  +    /* write to downstream channel */
  +    if (bPass)
  +        if ((rv = l2_channel_write(downstream, level, buf, buf_size)) != L2_OK)
  +            return rv;
   
  -static l2_result_t hook_close(l2_context_t *ctx, l2_channel_t *ch)
  -{
       return L2_OK;
   }
   
   static l2_result_t hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
   {
  +    l2_ch_filter_t *cfg = (l2_ch_filter_t *)ctx->vp;
  +    l2_channel_t *downstream = l2_channel_downstream(ch);
  +    l2_result_t rv;
  +
  +    /* destroy downstream channel */
  +    if ((rv = l2_channel_destroy(downstream)) != L2_OK)
  +        return rv;
  +
  +    /* destroy channel configuration */
  +    if (cfg->szRegex != NULL)
  +        free(cfg->szRegex);
  +    if (cfg->pcreRegex != NULL)
  +        free(cfg->pcreRegex);
  +    if (cfg->pcreExtra != NULL)
  +        free(cfg->pcreExtra);
  +
       return L2_OK;
   }
   
  @@ -69,10 +148,10 @@
       L2_CHANNEL_FILTER,
       hook_create,
       hook_configure,
  -    hook_open,
  +    NULL,
       hook_write,
  -    hook_flush,
  -    hook_close,
  +    NULL,
  +    NULL,
       hook_destroy
   };
   

From ossp-cvs-owner@ossp.org  Tue Sep 25 17:22:23 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8PFMMD58806; Tue, 25 Sep 2001 17:22:22 +0200 (CEST)
Date: Tue, 25 Sep 2001 17:22:22 +0200 (CEST)
Message-Id: <200109251522.f8PFMMD58806@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.h.in l2_ch_pipe.c l2_p.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   25-Sep-2001 17:22:22
  Branch: HEAD                             Handle: 2001092516222100

  Modified files:
    ossp-pkg/l2             l2.h.in l2_ch_pipe.c l2_p.h

  Log:
    Got rid of compile warnings and made minor TRACE modifications. Sorry, but
    there is no way to use a va_list in a TRACE call. TRACE is a macro that
    expands anywhere in source, so a va_list declaraction will sometimes violate
    ANSI c decl specs.

  Summary:
    Revision    Changes     Path
    1.10        +2  -0      ossp-pkg/l2/l2.h.in
    1.16        +5  -5      ossp-pkg/l2/l2_ch_pipe.c
    1.22        +5  -2      ossp-pkg/l2/l2_p.h
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2.h.in
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 l2.h.in
  --- ossp-pkg/l2/l2.h.in	2001/09/13 19:20:48	1.9
  +++ ossp-pkg/l2/l2.h.in	2001/09/25 15:22:21	1.10
  @@ -200,6 +200,8 @@
   l2_result_t   l2_channel_stack      (l2_channel_t *ch, l2_channel_t *chTop);
   l2_channel_t *l2_channel_downstream (l2_channel_t *ch);
   l2_chtype_t   l2_channel_type       (l2_channel_t *ch);
  +l2_result_t   l2_channel_errorinfo  (l2_channel_t *ch, l2_result_t rv, const char *fmt, ...);
  +char         *l2_channel_strerror   (l2_channel_t *ch, l2_result_t rv);
   
   /* stream operations */
   l2_stream_t  *l2_stream_create     (void);
  Index: ossp-pkg/l2/l2_ch_pipe.c
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 l2_ch_pipe.c
  --- ossp-pkg/l2/l2_ch_pipe.c	2001/09/24 14:36:34	1.15
  +++ ossp-pkg/l2/l2_ch_pipe.c	2001/09/25 15:22:21	1.16
  @@ -58,16 +58,16 @@
       int   iStatus = 0; /* for wait() */
   
       if (sig == SIGCHLD) {
  -        TRACE("SIGCHLD caught\n");
  +        TRACE("SIGCHLD caught");
           Pid = waitpid(-1, &iStatus, WUNTRACED);
           if (WIFEXITED(iStatus))
  -            TRACE("EXITED child\n");   /* child finished and returned       */
  +            TRACE("EXITED child");     /* child finished and returned       */
           else if (WIFSIGNALED(iStatus))
  -            TRACE("SIGNALED child\n"); /* child finished due to a signal    */
  +            TRACE("SIGNALED child");   /* child finished due to a signal    */
           else if (WIFSTOPPED(iStatus))
  -            TRACE("STOPPED child\n");  /* child stopped due to a signal     */
  +            TRACE("STOPPED child");    /* child stopped due to a signal     */
           else
  -            TRACE("Unknown SIGNAL\n"); /* child stopped due to a signal     */
  +            TRACE("Unknown SIGNAL");   /* child stopped due to a signal     */
       }
       else if (sig == SIGPIPE);          /* noop for now                      */
   }
  Index: ossp-pkg/l2/l2_p.h
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 l2_p.h
  --- ossp-pkg/l2/l2_p.h	2001/09/24 15:36:23	1.21
  +++ ossp-pkg/l2/l2_p.h	2001/09/25 15:22:21	1.22
  @@ -56,8 +56,11 @@
   
   #ifndef NDEBUG
   #define TRACE(str)\
  -        do\
  -            fprintf(stderr, "%s:%d: %s\n", __FILE__, __LINE__, str);\
  +        do {\
  +            fprintf(stderr, "%s:%d: ", __FILE__, __LINE__);\
  +            fprintf(stderr, str);\
  +            fputc('\n', stderr);\
  +        }\
           while (0)
   #else
   #define TRACE(expr) ((void)0)

From ossp-cvs-owner@ossp.org  Wed Sep 26 10:55:21 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8Q8tKS78485; Wed, 26 Sep 2001 10:55:20 +0200 (CEST)
Date: Wed, 26 Sep 2001 10:55:20 +0200 (CEST)
Message-Id: <200109260855.f8Q8tKS78485@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_socket.c l2_sockmon.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   26-Sep-2001 10:55:20
  Branch: HEAD                             Handle: 2001092609551900

  Modified files:
    ossp-pkg/l2             l2_ch_socket.c l2_sockmon.c

  Log:
    Cleanup before conversion to use sa_family socket calls.

  Summary:
    Revision    Changes     Path
    1.29        +18 -18     ossp-pkg/l2/l2_ch_socket.c
    1.9         +93 -93     ossp-pkg/l2/l2_sockmon.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_socket.c
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 l2_ch_socket.c
  --- ossp-pkg/l2/l2_ch_socket.c	2001/09/13 19:18:34	1.28
  +++ ossp-pkg/l2/l2_ch_socket.c	2001/09/26 08:55:19	1.29
  @@ -45,31 +45,31 @@
   /******************************************************************
   IPv4 source used from Unix Network Programming by Richard STEVENS
    ******************************************************************/
  -static int l2_inet_pton(int iFamily, const char *pszAddress, void *pvMemref)
  +static int l2_inet_pton(int iFamily, const char *szAddress, void *pvMemref)
   {
  -    int             i             = 0;
  +    int             i            = 0;
       struct in_addr  IP4Addr;
       struct in6_addr IP6Addr;
  -    const char      *pszIndex     = NULL;    /* To index IPv6 validity */
  -    char            *pszNextfield = "";      /* For IPv6 address trans */
  +    const char      *szIndex     = NULL;    /* To index IPv6 validity */
  +    char            *szNextfield = "";      /* For IPv6 address trans */
   
       assert(pvMemref != NULL);
       if (iFamily == AF_INET) {
  -        if (inet_aton(pszAddress, &IP4Addr)) {
  +        if (inet_aton(szAddress, &IP4Addr)) {
               memcpy(pvMemref, &IP4Addr, sizeof(struct in_addr));
               return 1; /* Success */
           }
           return 0;
       }
       else if (iFamily == AF_INET6) { /* Translate IPv6 addresses               */
  -        pszIndex = pszAddress;      /* Initialize, verify in loop             */
  -        for (i = 0; (i < 8) && pszNextfield; i++) { /* Iterate through fields */
  +        szIndex = szAddress;        /* Initialize, verify in loop             */
  +        for (i = 0; (i < 8) && szNextfield; i++) { /* Iterate through fields  */
               IP6Addr.__u6_addr.__u6_addr16[i] =\
  -                ntohs((u_int16_t)strtol(pszIndex, &pszNextfield, 16));
  -            pszIndex = pszNextfield + 1;
  +                ntohs((u_int16_t)strtol(szIndex, &szNextfield, 16));
  +            szIndex = szNextfield + 1;
           }
   
  -        if ((i != 8) || (*pszNextfield))
  +        if ((i != 8) || (*szNextfield))
               return 0;
           else { /* Success */
               memcpy(pvMemref, &IP6Addr, sizeof(struct in6_addr));
  @@ -87,7 +87,7 @@
   
   /* declare private channel configuration */
   typedef struct {
  -    char *pszHost;           /* IP Address or name of host to connect to    */
  +    char *szHost;            /* IP Address or name of host to connect to    */
       int  iFamily;            /* IP version to use, AF_INET4 or AF_INET6     */
       int  iProto;             /* Protocol to use, IPPROTO_TCP or IPPROTO_UDP */
       int  iPort;              /* TCP Port to connect to                      */
  @@ -104,7 +104,7 @@
           return L2_ERR_MEM;
   
       /* initialize configuration with reasonable defaults */
  -    cfg->pszHost   = NULL;
  +    cfg->szHost   = NULL;
       cfg->iFamily   = -1;
       cfg->iProto    = -1;
       cfg->iPort     = 0;
  @@ -126,7 +126,7 @@
       /* feed and call generic parameter parsing engine */
       L2_PARAM_SET(pa[0], ipversion, INT,     &cfg->iFamily);
       L2_PARAM_SET(pa[1], protocol,  INT,     &cfg->iProto );
  -    L2_PARAM_SET(pa[2], host,      CHARPTR, &cfg->pszHost);
  +    L2_PARAM_SET(pa[2], host,      CHARPTR, &cfg->szHost);
       L2_PARAM_SET(pa[3], port,      INT,     &cfg->iPort  );
       L2_PARAM_END(pa[4]);
       rv = l2_util_setparams(pa, fmt, ap);
  @@ -143,7 +143,7 @@
       struct sockaddr_in6 IP6Localsock, IP6Sockaddr;
   
       /* make sure a target is configured */
  -    if (cfg->pszHost == NULL)
  +    if (cfg->szHost == NULL)
           return L2_ERR_USE;
   
       /* open channel socket */
  @@ -153,12 +153,12 @@
           memset(&IP4Sockaddr,  0, sizeof(IP4Sockaddr));
   
           /* resolve host numerically */
  -        if (l2_inet_pton(AF_INET, cfg->pszHost, &IP4Sockaddr.sin_addr.s_addr) == 1) {
  +        if (l2_inet_pton(AF_INET, cfg->szHost, &IP4Sockaddr.sin_addr.s_addr) == 1) {
               IP4Sockaddr.sin_family = AF_INET;
               IP4Sockaddr.sin_port   = htons(cfg->iPort);
           }
           /* resolve host nominally */
  -        else if ((pHostentry = gethostbyname(cfg->pszHost)) != NULL) {
  +        else if ((pHostentry = gethostbyname(cfg->szHost)) != NULL) {
               if (pHostentry->h_addrtype == AF_INET) {
                   IP4Sockaddr.sin_family = AF_INET;
                   IP4Sockaddr.sin_port   = htons(cfg->iPort);
  @@ -214,12 +214,12 @@
           memset(&IP6Sockaddr,  0, sizeof(IP6Sockaddr));
   
           /* resolve host numerically */
  -        if (l2_inet_pton(AF_INET6, cfg->pszHost, &IP6Sockaddr.sin6_addr.s6_addr) == 1) {
  +        if (l2_inet_pton(AF_INET6, cfg->szHost, &IP6Sockaddr.sin6_addr.s6_addr) == 1) {
               IP6Sockaddr.sin6_family = AF_INET6;
               IP6Sockaddr.sin6_port   = htons(cfg->iPort);
           }
           /* resolve host nominally */
  -        else if ((pHostentry = gethostbyname(cfg->pszHost)) != NULL) {
  +        else if ((pHostentry = gethostbyname(cfg->szHost)) != NULL) {
               if (pHostentry->h_addrtype == AF_INET6) {
                   IP6Sockaddr.sin6_family = AF_INET6;
                   IP6Sockaddr.sin6_port   = htons(cfg->iPort);
  Index: ossp-pkg/l2/l2_sockmon.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 l2_sockmon.c
  --- ossp-pkg/l2/l2_sockmon.c	2001/09/13 19:18:34	1.8
  +++ ossp-pkg/l2/l2_sockmon.c	2001/09/26 08:55:19	1.9
  @@ -27,10 +27,13 @@
   **  l2_sockmon.c: Socket monitor for use with l2_test.c
   */
   
  +#include <ctype.h>
   #include <sys/types.h>
   #include <sys/socket.h>
   #include <netinet/in.h>
  +#include <arpa/inet.h>
   #include <stdio.h>
  +#include <unistd.h>
   #include <errno.h>
   #include <assert.h>
   
  @@ -39,56 +42,73 @@
   #define BACKLOG 1024    /* max # pending connections */
   #define BUFFSIZ 256     /* max string size           */
   
  -char *strlowerdup(const char *pszIn)
  +char *strlowerdup(const char *);       /* prototypes */
  +void dowork(int);
  +int  myserver(int, int, int);
  +void die(const char *);
  +void closedie(int, const char *);
  +
  +void die(const char *szMsg)
  +{
  +    perror(szMsg);
  +    exit(1);
  +}
  +
  +void closedie(int iSock, const char *szMsg)
  +{
  +    perror(szMsg);
  +    close(iSock);
  +    exit(1);
  +}
  +
  +char *strlowerdup(const char *szIn)
   {
  -    int  i        = 0;
  -    char *pszTemp = NULL;
  +    int  i       = 0;
  +    char *szTemp = NULL;
   
  -    assert(pszIn != NULL);
  +    assert(szIn != NULL);
   
  -    if ((pszTemp = (char *)strdup(pszIn)) == NULL)
  +    if ((szTemp = (char *)strdup(szIn)) == NULL)
           return NULL;
       else
       {
  -        for (i = 0; *(pszTemp + i); i++)
  -            if (isupper(*(pszTemp + i)))
  -                *(pszTemp + i) = (char)tolower(*(pszTemp + i));
  -        return pszTemp;
  +        for (i = 0; *(szTemp + i); i++)
  +            if (isupper(*(szTemp + i)))
  +                *(szTemp + i) = (char)tolower(*(szTemp + i));
  +        return szTemp;
       }
   }
   
   void dowork(int iSock)
   {
  -    char pszBuf[BUFFSIZ];
  +    char szBuf[BUFFSIZ];
       int  cc;
   
       while (1) { /* Exits when read finishes */
  -        cc = read(iSock, pszBuf, sizeof (pszBuf));
  -        if (cc == -1) {
  -            perror("read");
  -            exit(1);
  -        }
  +        cc = read(iSock, szBuf, sizeof (szBuf));
  +        if (cc == -1)
  +            die("read()");
   
           if (cc == 0) {
               /* EOF */
  -            (void) close(iSock);
  -            (void) printf("Connection closed\n");
  +            close(iSock);
  +            fprintf(stderr, "Connection closed\n");
               return;
           }
   
  -        pszBuf[cc + 1] = '\0';
  -        (void) printf("Read: %s", pszBuf);
  +        szBuf[cc + 1] = '\0';
  +        fprintf(stderr, "Read: %s", szBuf);
   
  -        if (write(iSock, pszBuf, cc) == -1) {
  -            perror("write");
  -            exit(1);
  -        }
  +        if (write(iSock, szBuf, cc) == -1)
  +            die("write()");
       }
   }
   
   int myserver(int iFamily, int iProtocol, int iPort)
   {
  -    char pszBuf[BUFFSIZ];
  +    char                szBuf[BUFFSIZ];
  +    char                szAddrin4[INET_ADDRSTRLEN];
  +    char                szAddrin6[INET6_ADDRSTRLEN];
       struct sockaddr_in  laddr4,   faddr4,    caddr4;
       struct sockaddr_in6 laddr6,   faddr6,    caddr6;
       int                 iSock,    iNewsock;
  @@ -128,28 +148,19 @@
           return -1;
       }
   
  -    /* Tell the system to allow local addresses to be reused. */
  +    /* Allow local addresses to be reused. */
       iSockopt = 1;
  -    if (setsockopt(iSock, SOL_SOCKET, SO_REUSEADDR, (void *)&iSockopt,\
  -        sizeof (iSockopt)) == -1) {
  -        perror("setsockopt(SO_REUSEADDR)");
  -        (void) close(iSock);
  -        return -1;
  -    }
  +    if (setsockopt(iSock, SOL_SOCKET, SO_REUSEADDR, (void *)&iSockopt, sizeof (iSockopt)) == -1)
  +        closedie(iSock, "setsockopt(SO_REUSEADDR)");
   
       if (iFamily == AF_INET6) {
  -        if (bind(iSock, (struct sockaddr *)&laddr6, sizeof (laddr6)) == -1) {
  -            perror("bind"); /* Bad bind */
  -            (void) close(iSock);
  -            return -1;
  -            }
  +        if (bind(iSock, (struct sockaddr *)&laddr6, sizeof (laddr6)) == -1)
  +            closedie(iSock, "bind()");
       }
  +
       else if (iFamily == AF_INET) {
  -        if (bind(iSock, (struct sockaddr *)&laddr4, sizeof (laddr4)) == -1) {
  -            perror("bind"); /* Bad bind */
  -            (void) close(iSock);
  -            return -1;
  -            }
  +        if (bind(iSock, (struct sockaddr *)&laddr4, sizeof (laddr4)) == -1)
  +            closedie(iSock, "bind()");
       }
   
       if (iProtocol == IPPROTO_UDP) {
  @@ -159,30 +170,25 @@
   
               for (;;) { /* Receive messages */
                   faddrlen = sizeof(caddr6);
  -                memset(pszBuf, 0x0, BUFFSIZ); /* Init the buffer */
  -                cc = recvfrom(iSock, pszBuf, BUFFSIZ, 0, (struct sockaddr *)\
  +                memset(szBuf, 0x0, BUFFSIZ); /* Init the buffer */
  +                cc = recvfrom(iSock, szBuf, BUFFSIZ, 0, (struct sockaddr *)\
                       &caddr6, &faddrlen);
   
  -                if (cc == -1) {
  -                    perror("recvfrom");
  -                    exit(1);
  -                }
  +                if (cc == -1)
  +                    die("recvfrom()");
   
  -                if (cc == 0) {
  -                    /* EOF */
  -                    (void) close(iSock);
  -                    (void) printf("Connection closed\n");
  -                    return;
  +                if (cc == 0) { /* EOF */
  +                    close(iSock);
  +                    fprintf(stderr, "Connection closed\n");
  +                    return 0;
                   }
   
                   if (cc != BUFFSIZ) {
  -                    pszBuf[cc + 1] = '\0';
  -                    (void) printf("Read: %s", pszBuf);
  +                    szBuf[cc + 1] = '\0';
  +                    fprintf(stderr, "Read: %s", szBuf);
   
  -                    if (write(iSock, pszBuf, cc) == -1) {
  -                        perror("write");
  -                        exit(1);
  -                    }
  +                    if (write(iSock, szBuf, cc) == -1)
  +                        die("write()");
                   }
                   else
                       return -1;
  @@ -190,34 +196,29 @@
           }
           else if (iFamily == AF_INET) {
               /* initialize address structure */
  -            memset(&caddr4,  0, sizeof(caddr4));
  +            memset(&caddr4, 0, sizeof(caddr4));
   
               for (;;) { /* Receive messages */
                   faddrlen = sizeof(caddr4);
  -                memset(pszBuf, 0x0, BUFFSIZ); /* Init the buffer */
  -                cc = recvfrom(iSock, pszBuf, BUFFSIZ, 0, (struct sockaddr *)\
  +                memset(szBuf, 0x0, BUFFSIZ); /* Init the buffer */
  +                cc = recvfrom(iSock, szBuf, BUFFSIZ, 0, (struct sockaddr *)\
                       &caddr4, &faddrlen);
   
  -                if (cc == -1) {
  -                    perror("recvfrom");
  -                    exit(1);
  -                }
  +                if (cc == -1)
  +                    die("recvfrom()");
   
  -                if (cc == 0) {
  -                    /* EOF */
  -                    (void) close(iSock);
  -                    (void) printf("Connection closed\n");
  -                    return;
  +                if (cc == 0) { /* EOF */
  +                    close(iSock);
  +                    fprintf(stderr, "Connection closed\n");
  +                    return 0;
                   }
   
                   if (cc != BUFFSIZ) {
  -                    pszBuf[cc + 1] = '\0';
  -                    (void) printf("Read: %s", pszBuf);
  +                    szBuf[cc + 1] = '\0';
  +                    fprintf(stderr, "Read: %s", szBuf);
   
  -                    if (write(iSock, pszBuf, cc) == -1) {
  -                        perror("write");
  -                        exit(1);
  -                    }
  +                    if (write(iSock, szBuf, cc) == -1)
  +                        die("write()");
                   }
                   else
                       return -1;
  @@ -225,11 +226,8 @@
           }
       }
       else if (iProtocol == IPPROTO_TCP) { /* Only try to listen if we have TCP */
  -        if (listen(iSock, BACKLOG) == -1) {
  -            perror("listen"); /* Listen just blew up */
  -            (void) close(iSock);
  -            return -1;
  -        }
  +        if (listen(iSock, BACKLOG) == -1)
  +            closedie(iSock, "listen()");
   
           /* Wait for a connection request */
           if (iFamily == AF_INET6) {
  @@ -241,13 +239,17 @@
                   iNewsock = accept(iSock, (struct sockaddr *)&faddr6, &faddrlen);
                   if (iNewsock == -1) {
                       if (errno != EINTR && errno != ECONNABORTED) {
  -                        perror("accept");
  +                        perror("accept()");
                       }
                       continue;
                   }
  -                (void) printf("Connection from %s/%d\n",\
  -                    inet_ntop(faddr6.sin6_addr), ntohs(faddr6.sin6_port));
  -                dowork(iNewsock); /* do some sockwork */
  +
  +                if (inet_ntop(AF_INET6, &faddr6.sin6_addr, szAddrin6, sizeof(szAddrin6)) != NULL) {
  +                    fprintf(stderr, "Connection from %s/%d\n", szAddrin6, ntohs(faddr6.sin6_port));
  +                    dowork(iNewsock); /* do some sockwork */
  +                }
  +                else
  +                    die("inet_ntop()");
               }
           }
           else if (iFamily == AF_INET) {
  @@ -259,19 +261,17 @@
                   iNewsock = accept(iSock, (struct sockaddr *)&faddr4, &faddrlen);
                   if (iNewsock == -1) {
                       if (errno != EINTR && errno != ECONNABORTED) {
  -                        perror("accept");
  +                        perror("accept()");
                       }
                       continue;
                   }
  -                (void) printf("Connection from %s/%d\n",\
  -                    inet_ntop(faddr4.sin_addr), ntohs(faddr4.sin_port));
  +                inet_ntop(AF_INET6, &faddr4.sin_addr, szAddrin4, sizeof(szAddrin4));
  +                fprintf(stderr, "Connection from %s/%d\n", szAddrin4, ntohs(faddr6.sin6_port));
                   dowork(iNewsock); /* do some sockwork */
               }
           }
  -        /* NOTREACHED */
  -    }
  -    else
  -        return -1; /* We are being asked to serve other than TCP or UDP */
  +    } /* NOTREACHED */
  +    return -1; /* Failure due to non UDP/TCP request, or execution flow */
   }
   
   int main(int argc, char *argv[])
  @@ -281,7 +281,7 @@
       int iPort  = 0;
   
       if (argc != 4) {
  -        (void) fprintf(stderr, "Usage: %s <IPv4-or-IPv6> <TCP-or-UDP> <Port>\n", argv[0]);
  +        fprintf(stderr, "Usage: %s <IPv4-or-IPv6> <TCP-or-UDP> <Port>\n", argv[0]);
           exit(1); /* Dink donk if the user doesn't know how to use this */
       }
   

From ossp-cvs-owner@ossp.org  Wed Sep 26 11:00:23 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8Q90Mo79268; Wed, 26 Sep 2001 11:00:22 +0200 (CEST)
Date: Wed, 26 Sep 2001 11:00:22 +0200 (CEST)
Message-Id: <200109260900.f8Q90Mo79268@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_sockmon.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   26-Sep-2001 11:00:22
  Branch: HEAD                             Handle: 2001092610002100

  Modified files:
    ossp-pkg/l2             l2_sockmon.c

  Log:
    More cleanup.

  Summary:
    Revision    Changes     Path
    1.10        +6  -8      ossp-pkg/l2/l2_sockmon.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_sockmon.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 l2_sockmon.c
  --- ossp-pkg/l2/l2_sockmon.c	2001/09/26 08:55:19	1.9
  +++ ossp-pkg/l2/l2_sockmon.c	2001/09/26 09:00:21	1.10
  @@ -51,14 +51,14 @@
   void die(const char *szMsg)
   {
       perror(szMsg);
  -    exit(1);
  +    exit(EXIT_FAILURE);
   }
   
   void closedie(int iSock, const char *szMsg)
   {
       perror(szMsg);
       close(iSock);
  -    exit(1);
  +    exit(EXIT_FAILURE);
   }
   
   char *strlowerdup(const char *szIn)
  @@ -93,7 +93,7 @@
               /* EOF */
               close(iSock);
               fprintf(stderr, "Connection closed\n");
  -            return;
  +            exit(EXIT_SUCCESS);
           }
   
           szBuf[cc + 1] = '\0';
  @@ -143,10 +143,8 @@
       iTrans    = (iProtocol == IPPROTO_UDP) ? SOCK_DGRAM : SOCK_STREAM;
       iSock     = socket(iProtofam, iTrans, iProtocol);
   
  -    if (iSock == -1) {
  -        perror("socket");
  -        return -1;
  -    }
  +    if (iSock == -1)
  +        die("socket()");
   
       /* Allow local addresses to be reused. */
       iSockopt = 1;
  @@ -282,7 +280,7 @@
   
       if (argc != 4) {
           fprintf(stderr, "Usage: %s <IPv4-or-IPv6> <TCP-or-UDP> <Port>\n", argv[0]);
  -        exit(1); /* Dink donk if the user doesn't know how to use this */
  +        exit(EXIT_FAILURE); /* The user doesn't know how to use this */
       }
   
       iFam    = (!strcmp(argv[1], "IPv6")) ? AF_INET6    : AF_INET;

From ossp-cvs-owner@ossp.org  Wed Sep 26 11:13:29 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8Q9DRv80782; Wed, 26 Sep 2001 11:13:27 +0200 (CEST)
Date: Wed, 26 Sep 2001 11:13:27 +0200 (CEST)
Message-Id: <200109260913.f8Q9DRv80782@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_pipe.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   26-Sep-2001 11:13:27
  Branch: HEAD                             Handle: 2001092610132700

  Modified files:
    ossp-pkg/l2             l2_ch_pipe.c

  Log:
    Removed magic number, corrected comment.

  Summary:
    Revision    Changes     Path
    1.17        +5  -4      ossp-pkg/l2/l2_ch_pipe.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_pipe.c
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 l2_ch_pipe.c
  --- ossp-pkg/l2/l2_ch_pipe.c	2001/09/25 15:22:21	1.16
  +++ ossp-pkg/l2/l2_ch_pipe.c	2001/09/26 09:13:27	1.17
  @@ -34,9 +34,10 @@
   #include <signal.h>
   #include <sys/wait.h>
   
  -#define L2_PIPE_MODEDIRECT   1 /* direct command execution */
  -#define L2_PIPE_MODESHELL    2 /* shell  command execution */
  -#define L2_PIPE_MAXARGS    256 /* shell  command execution */
  +#define L2_PIPE_MODEDIRECT   1 /* direct command execution                  */
  +#define L2_PIPE_MODESHELL    2 /* shell  command execution                  */
  +#define L2_PIPE_WRITEFAIL    6 /* how long before real failure is indicated */
  +#define L2_PIPE_MAXARGS    256 /* how many args can our piped command have  */
   
   static l2_result_t hook_close(l2_context_t *, l2_channel_t *); /* prototypes */
   
  @@ -230,7 +231,7 @@
   
       /* write message to channel pipe */
       if (write(cfg->piFd[1], buf, buf_size) == -1) {
  -        if ((errno == EPIPE) && (cfg->iWritefail++ < 6)) {
  +        if ((errno == EPIPE) && (cfg->iWritefail++ < L2_PIPE_WRITEFAIL)) {
               hook_close(ctx, ch);
               hook_open(ctx, ch);
               return hook_write(ctx, ch, level, buf, buf_size);

From ossp-cvs-owner@ossp.org  Wed Sep 26 14:10:33 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8QCAW901619; Wed, 26 Sep 2001 14:10:32 +0200 (CEST)
Date: Wed, 26 Sep 2001 14:10:32 +0200 (CEST)
Message-Id: <200109261210.f8QCAW901619@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_pipe.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   26-Sep-2001 14:10:32
  Branch: HEAD                             Handle: 2001092613103100

  Modified files:
    ossp-pkg/l2             l2_ch_pipe.c

  Log:
    Fixed bugs, adjusted scope of command parse, corrected NULL assignments and
    comparisons, removed inconsistent command check, added fail-safe exit code.

  Summary:
    Revision    Changes     Path
    1.18        +35 -41     ossp-pkg/l2/l2_ch_pipe.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_pipe.c
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 l2_ch_pipe.c
  --- ossp-pkg/l2/l2_ch_pipe.c	2001/09/26 09:13:27	1.17
  +++ ossp-pkg/l2/l2_ch_pipe.c	2001/09/26 12:10:31	1.18
  @@ -68,7 +68,7 @@
           else if (WIFSTOPPED(iStatus))
               TRACE("STOPPED child");    /* child stopped due to a signal     */
           else
  -            TRACE("Unknown SIGNAL");   /* child stopped due to a signal     */
  +            TRACE("SIGNAL Unknown");   /* child stopped due to a signal     */
       }
       else if (sig == SIGPIPE);          /* noop for now                      */
   }
  @@ -104,38 +104,22 @@
       l2_ch_pipe_t *cfg = (l2_ch_pipe_t *)ctx->vp;
       l2_param_t pa[3]; 
       l2_result_t rv;
  -    FILE *File;
  -    char *szTemp;
  -    char *pbIndex;
  +    char *sz;
   
       /* feed and call generic parameter parsing engine */
  -    L2_PARAM_SET(pa[0], mode, CHARPTR, &szTemp);
  +    L2_PARAM_SET(pa[0], mode, CHARPTR, &sz);
       L2_PARAM_SET(pa[1], path, STRING, &cfg->szCmdpath);
       L2_PARAM_END(pa[2]);
       if ((rv = l2_util_setparams(pa, fmt, ap)) != L2_OK)
           return rv;
   
  -    if (strcmp(szTemp, "direct") == NULL)
  +    if (strcmp(sz, "direct") == 0)
           cfg->iMode = L2_PIPE_MODEDIRECT;
  -    else if (strcmp(szTemp, "shell") == NULL)
  +    else if (strcmp(sz, "shell") == 0)
           cfg->iMode = L2_PIPE_MODESHELL;
       else
           return L2_ERR_ARG;
   
  -    /* check to see if a file exists at the user specified path */
  -    if (cfg->iMode != L2_PIPE_MODESHELL) {
  -        szTemp = strdup(cfg->szCmdpath);
  -        for (pbIndex = szTemp; (*pbIndex != ' ') && (*pbIndex != NULL); pbIndex++);
  -        *pbIndex = NULL;
  -        if (!(File = fopen(szTemp, "r")))
  -            return L2_ERR_ARG; /* the command does not exist at the given path  */
  -        else
  -            fclose(File);
  -        free(szTemp);
  -        szTemp = NULL;
  -        pbIndex = NULL;
  -    }
  -
       return rv;
   }
   
  @@ -149,14 +133,14 @@
       if (szBuf == NULL)     /* check for bad input before we  */
           return L2_ERR_ARG; /* dereference and throw a SIGSEV */
   
  -    while ((iCnt++ < L2_PIPE_MAXARGS) && (*szBuf != NULL)) {
  +    while ((iCnt++ < L2_PIPE_MAXARGS) && (*szBuf != '\0')) {
           while ((*szBuf == ' ') || (*szBuf == '\t'))
               *szBuf++ = '\0'; /* overwrite whitespace with EOL  */
           *szArgs++ = szBuf;   /* found the start of a new token */
           while ((*szBuf != '\0') && (*szBuf != ' ') && (*szBuf != '\t'))
               szBuf++;
       }
  -    *szArgs = NULL; /* add a NULL to mark the end of the chain */
  +    *szArgs = '\0'; /* add a NULL to mark the end of the chain */
   
       if (iCnt <= L2_PIPE_MAXARGS)
           return L2_OK;
  @@ -171,6 +155,7 @@
       char *pVec[L2_PIPE_MAXARGS];
       struct sigaction locact;
       l2_result_t rv;
  +    char *sz = NULL;
   
       /* initialize auto vars before using them */
       memset(pVec, 0, sizeof(pVec));
  @@ -186,23 +171,11 @@
       if (sigaction(SIGPIPE, &locact, &cfg->sigpipe) < 0)
           return L2_ERR_SYS;
   
  -    /* the distinction between modes is necessary, because only executing */
  -    /* commands in a shell environment allows usage of variables and such */
  -    if (cfg->iMode == L2_PIPE_MODESHELL) {
  -        pVec[0] = "/bin/sh";
  -        pVec[1] = "-c";
  -        pVec[2] = cfg->szCmdpath;
  -        pVec[3] = NULL; /* add a NULL to mark the end of the chain   */
  -    }
  -
  -    else /* plain direct command execution */
  -        if ((rv = parse_cmdpath(cfg->szCmdpath, pVec)) != L2_OK)
  -            return rv;
  -
       if (pipe(cfg->piFd) == -1)                /* open the pipe            */
           return L2_ERR_SYS;
   
       if ((cfg->Pid = fork()) > 0) {            /* parent process           */
  +        free(sz);                             /* no exec() in parent      */
           close(cfg->piFd[0]);                  /* half-duplex (no reading) */
           cfg->piFd[0] = -1;
       }
  @@ -211,8 +184,27 @@
           cfg->piFd[1] = -1;                    /* because we don't use it  */
           dup2(cfg->piFd[0], fileno(stdin));    /* copy the reading end     */
   
  +        /* the distinction between modes is necessary, because only executing */
  +        /* commands in a shell environment allows usage of variables and such */
  +        if (cfg->iMode == L2_PIPE_MODESHELL) {
  +            pVec[0] = "/bin/sh";
  +            pVec[1] = "-c";
  +            pVec[2] = cfg->szCmdpath;
  +            pVec[3] = NULL;        /* add a NULL to mark the end of the chain */
  +        }
  +
  +        else { /* plain direct command execution */
  +            sz = strdup(cfg->szCmdpath);
  +            if ((rv = parse_cmdpath(sz, pVec)) != L2_OK) {
  +                free(sz);
  +                return rv;
  +            }
  +        }
  +
           if (execvp(*pVec, pVec) == -1) {      /* launch                   */
  -            close(cfg->piFd[0]);              /* cleanup in case we fail  */
  +            TRACE("execvp in child returned -1");
  +            free(sz);                         /* cleanup in case we fail  */
  +            close(cfg->piFd[0]);
               cfg->piFd[0] = -1; /* if execvp() doesn't swap our context or */
               return L2_ERR_SYS; /* if child returns, we have an error      */
           }
  @@ -232,8 +224,10 @@
       /* write message to channel pipe */
       if (write(cfg->piFd[1], buf, buf_size) == -1) {
           if ((errno == EPIPE) && (cfg->iWritefail++ < L2_PIPE_WRITEFAIL)) {
  -            hook_close(ctx, ch);
  -            hook_open(ctx, ch);
  +            if (hook_close(ctx, ch) != L2_OK)
  +                return L2_ERR_SYS;
  +            if (hook_open(ctx, ch) != L2_OK)
  +                return L2_ERR_SYS;
               return hook_write(ctx, ch, level, buf, buf_size);
           }
           else { /* not broken pipe problem or over the fail limit */
  @@ -253,9 +247,9 @@
       l2_ch_pipe_t *cfg = (l2_ch_pipe_t *)ctx->vp;
   
       /* restore previous signal context */
  -    if (sigaction(SIGCHLD, &cfg->sigchld, NULL) < 0)
  +    if (sigaction(SIGCHLD, &cfg->sigchld, 0) < 0)
           return L2_ERR_SYS;
  -    if (sigaction(SIGPIPE, &cfg->sigpipe, NULL) < 0)
  +    if (sigaction(SIGPIPE, &cfg->sigpipe, 0) < 0)
           return L2_ERR_SYS;
   
       /* close channel pipe for parent process created in hook_open() */

From ossp-cvs-owner@ossp.org  Wed Sep 26 16:29:05 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8QET4G17602; Wed, 26 Sep 2001 16:29:04 +0200 (CEST)
Date: Wed, 26 Sep 2001 16:29:04 +0200 (CEST)
Message-Id: <200109261429.f8QET4G17602@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_pipe.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   26-Sep-2001 16:29:04
  Branch: HEAD                             Handle: 2001092615290300

  Modified files:
    ossp-pkg/l2             l2_ch_pipe.c

  Log:
    bugfix pipe channel

  Summary:
    Revision    Changes     Path
    1.19        +14 -8      ossp-pkg/l2/l2_ch_pipe.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_pipe.c
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 l2_ch_pipe.c
  --- ossp-pkg/l2/l2_ch_pipe.c	2001/09/26 12:10:31	1.18
  +++ ossp-pkg/l2/l2_ch_pipe.c	2001/09/26 14:29:03	1.19
  @@ -104,7 +104,7 @@
       l2_ch_pipe_t *cfg = (l2_ch_pipe_t *)ctx->vp;
       l2_param_t pa[3]; 
       l2_result_t rv;
  -    char *sz;
  +    char *sz = NULL;
   
       /* feed and call generic parameter parsing engine */
       L2_PARAM_SET(pa[0], mode, CHARPTR, &sz);
  @@ -113,14 +113,16 @@
       if ((rv = l2_util_setparams(pa, fmt, ap)) != L2_OK)
           return rv;
   
  -    if (strcmp(sz, "direct") == 0)
  -        cfg->iMode = L2_PIPE_MODEDIRECT;
  -    else if (strcmp(sz, "shell") == 0)
  -        cfg->iMode = L2_PIPE_MODESHELL;
  -    else
  -        return L2_ERR_ARG;
  +    if (sz != NULL) {
  +        if (strcmp(sz, "direct") == 0)
  +            cfg->iMode = L2_PIPE_MODEDIRECT;
  +        else if (strcmp(sz, "shell") == 0)
  +            cfg->iMode = L2_PIPE_MODESHELL;
  +        else
  +            return L2_ERR_ARG;
  +    }
   
  -    return rv;
  +    return L2_OK;
   }
   
   /**********************************************************
  @@ -156,6 +158,10 @@
       struct sigaction locact;
       l2_result_t rv;
       char *sz = NULL;
  +
  +    /* consistency check */
  +    if (cfg->szCmdpath == NULL)
  +        return L2_ERR_USE;
   
       /* initialize auto vars before using them */
       memset(pVec, 0, sizeof(pVec));

From ossp-cvs-owner@ossp.org  Wed Sep 26 16:31:24 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8QEVNZ18026; Wed, 26 Sep 2001 16:31:23 +0200 (CEST)
Date: Wed, 26 Sep 2001 16:31:23 +0200 (CEST)
Message-Id: <200109261431.f8QEVNZ18026@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_pipe.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   26-Sep-2001 16:31:23
  Branch: HEAD                             Handle: 2001092615312200

  Modified files:
    ossp-pkg/l2             l2_ch_pipe.c

  Log:
    Cleanup: always use the channel API and 1:1 pass through errors.

  Summary:
    Revision    Changes     Path
    1.20        +5  -7      ossp-pkg/l2/l2_ch_pipe.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_pipe.c
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 l2_ch_pipe.c
  --- ossp-pkg/l2/l2_ch_pipe.c	2001/09/26 14:29:03	1.19
  +++ ossp-pkg/l2/l2_ch_pipe.c	2001/09/26 14:31:22	1.20
  @@ -39,9 +39,6 @@
   #define L2_PIPE_WRITEFAIL    6 /* how long before real failure is indicated */
   #define L2_PIPE_MAXARGS    256 /* how many args can our piped command have  */
   
  -static l2_result_t hook_close(l2_context_t *, l2_channel_t *); /* prototypes */
  -
  -
   /* declare private channel configuration */
   typedef struct {
       pid_t            Pid;        /* process id of child command          */
  @@ -226,14 +223,15 @@
                                 l2_level_t level, const char *buf, size_t buf_size)
   {
       l2_ch_pipe_t *cfg = (l2_ch_pipe_t *)ctx->vp;
  +    l2_result_t rv;
   
       /* write message to channel pipe */
       if (write(cfg->piFd[1], buf, buf_size) == -1) {
           if ((errno == EPIPE) && (cfg->iWritefail++ < L2_PIPE_WRITEFAIL)) {
  -            if (hook_close(ctx, ch) != L2_OK)
  -                return L2_ERR_SYS;
  -            if (hook_open(ctx, ch) != L2_OK)
  -                return L2_ERR_SYS;
  +            if ((rv = l2_channel_close(ch)) != L2_OK)
  +                return rv;
  +            if ((rv = l2_channel_open(ch)) != L2_OK)
  +                return rv;
               return hook_write(ctx, ch, level, buf, buf_size);
           }
           else { /* not broken pipe problem or over the fail limit */

From ossp-cvs-owner@ossp.org  Wed Sep 26 20:16:15 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8QIGDP43898; Wed, 26 Sep 2001 20:16:13 +0200 (CEST)
Date: Wed, 26 Sep 2001 20:16:13 +0200 (CEST)
Message-Id: <200109261816.f8QIGDP43898@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   26-Sep-2001 20:16:13
  Branch: HEAD                             Handle: 2001092619161300

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    brain dump to remember my L2 thoughts of today

  Summary:
    Revision    Changes     Path
    1.26        +89 -0      ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 TODO
  --- ossp-pkg/l2/TODO	2001/09/21 17:29:47	1.25
  +++ ossp-pkg/l2/TODO	2001/09/26 18:16:13	1.26
  @@ -241,3 +241,92 @@
     compiliert wird. Explizit anschalten läßt sich die standard-konforme
     Erweiterung über "-std=c9x", bzw. "-std=c99" bei neueren gccs.
   
  +High-Level Configuration Interface
  +==================================
  +
  +Config-File (OSSP):
  +
  +logging {
  +    channel 0 null ALL; 
  +
  +    channel 1 prefix CUSTOM1 { prefix="%Y-%m-%d/%H:%M:%S" };
  +    channel 2 buffer { size=8k };
  +    channel 3 file { path=/path/to/ossp.stat.log; mode=0644 };
  +
  +    channel 4 prefix wmask=DEBUG { prefix="%Y-%m-%d/%H:%M:%S %L" };
  +
  +    channel 5 buffer { size=4k };
  +    channel 6 file { path=/path/to/ossp.error.log; mode=0644 };
  +
  +    channel 7 syslog wmask=ERROR { peer=remote; host=loghost };
  +
  +    channel 8 filter { regex="(memory|foo)" };
  +    channel 9 smtp { host=loghost; rcpt="rse@engelschall.com" };
  +
  +    stream { 0->(4,7); 4->(5,7); 5->6; 8->9; 1->2->3 };
  +
  +    log access 0;
  +    log stat 1;
  +
  +};
  +
  +Alternative: 
  +
  +log access {
  +    error: syslog;
  +    prefix -> { 
  +        buffer(size=4k) -> 
  +            file(path=/path/to/log, mode=0644);
  +        panic: smtp(host=en1, rcpt=rse@engelschall.com);
  +    }
  +}
  +
  +Command-Line (lmtp2nntp):
  +
  +$ lmtp2nntp -l 'INFO:'
  +  { prefix(prefix="%Y-%m-%d/%H:%M:%S %L")
  +    ->{ buffer(size=4k)
  +        ->file(path=/path/to/log,mode=0644);
  +        smtp(host=en1,rcpt=rse@engelschall.com)
  +      };
  +    error:syslog
  +  }
  +
  +Grammar
  +=======
  +
  +hierarchy      : stream 
  +               | '{' stream_list '}'
  +               ; 
  +
  +stream_list    : hierarchy 
  +               | hierarchy ';' stream_list
  +               ;
  +
  +stream         : channel
  +               | channel "->" hierarchy
  +               ;
  +
  +channel        : channel_mask ':' channel_spec
  +               | channel_spec
  +               ;
  +
  +channel_mask   : T_ID_LEVEL
  +               | '(' channel_levels ')'
  +               ;
  +
  +channel_levels : T_ID_LEVEL 
  +               | T_ID_LEVEL '|' channel_mask_list
  +               ;
  +
  +channel_spec   : T_ID_CHANNEL
  +               | T_ID_CHANNEL '(' channel_params ')'
  +               ;
  +
  +channel_params : channel_param
  +               | channel_param ',' channel_params
  +               ;
  +        
  +channel_param  : T_ID_PARAM '=' T_STRING
  +               ;
  + 

From ossp-cvs-owner@ossp.org  Thu Sep 27 09:16:28 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8R7GQ635046; Thu, 27 Sep 2001 09:16:26 +0200 (CEST)
Date: Thu, 27 Sep 2001 09:16:26 +0200 (CEST)
Message-Id: <200109270716.f8R7GQ635046@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.h.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   27-Sep-2001 09:16:26
  Branch: HEAD                             Handle: 2001092708162500

  Modified files:
    ossp-pkg/l2             l2.h.in

  Log:
    add a convinient level mask which includes all levels

  Summary:
    Revision    Changes     Path
    1.11        +1  -0      ossp-pkg/l2/l2.h.in
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2.h.in
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 l2.h.in
  --- ossp-pkg/l2/l2.h.in	2001/09/25 15:22:21	1.10
  +++ ossp-pkg/l2/l2.h.in	2001/09/27 07:16:25	1.11
  @@ -91,6 +91,7 @@
       L2_LEVEL_DEBUG    = (1 << 7)
   } l2_level_t;
   #define L2_LEVEL_CUSTOM(n) (1 << (8+(n))
  +#define L2_LEVEL_ALL       ((1 << (8+9+1))-1)
   
   /* all levels from highest (PANIC) to and including a particular low level */
   #define L2_LEVEL_UPTO(level) \

From ossp-cvs-owner@ossp.org  Thu Sep 27 15:56:37 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8RDuaO81000; Thu, 27 Sep 2001 15:56:36 +0200 (CEST)
Date: Thu, 27 Sep 2001 15:56:36 +0200 (CEST)
Message-Id: <200109271356.f8RDuaO81000@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_channel.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   27-Sep-2001 15:56:36
  Branch: HEAD                             Handle: 2001092714563500

  Modified files:
    ossp-pkg/l2             l2_channel.c

  Log:
    document channel lifecycle

  Summary:
    Revision    Changes     Path
    1.20        +36 -0      ossp-pkg/l2/l2_channel.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_channel.c
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 l2_channel.c
  --- ossp-pkg/l2/l2_channel.c	2001/09/24 15:36:23	1.19
  +++ ossp-pkg/l2/l2_channel.c	2001/09/27 13:56:35	1.20
  @@ -33,6 +33,42 @@
   
   #include <string.h>
   
  +/* 
  + * A channel is the central object for a logging stream. It is
  + * implemented by a framework (the code implemented here) which provides
  + * the channel API and which is equal for all channels and a particular
  + * handler which implements the characteristics specific to a particular
  + * channel class. The lifecycle of a channel is illustrated in the
  + * following figure:
  + *
  + * -----BEGIN EMBEDDED OBJECT-----
  + * Content-editor: xfig %s
  + * Content-encoding: gzip:9 base64
  + * Content-type: application/fig
  + * Content-viewer: xfig %s
  + * Description: L2 Channel Lifecycle
  + * Filename: l2_ch_lifecycle.fig
  + * Last-modified: 2000-09-28/14:40
  + * Name: l2_ch_lifecycle
  + * Version: eo/1.0
  + * H4sIAIsvszsCA62WTW/bMAyGz/WvENBzM5KyPnwusGFAdtp1l8BVWgOZUyTuhv77
  + * kfKHnC4t5CZJ7JAO3kcUKUq5/fr9m9IrKtab9uFYb55DcR/aLhyKH6E7NHWxDh17
  + * ShUIsAIofjbt4y4Ud1QgASgqQGlSt3V8Fai0AoV8gTJyI76xLD6Tb35iPSpybNlS
  + * PsknV5po5WC0BZZRWSlL8km+tlYsa3MwJfAP6Kdokl8iltHKwjiwJ5jJL52DbIxB
  + * Z+aY5BvSVT7GEieSzISZfGN9Fa0cjAVj55iZz7XPxxg6mdTMNz5/Ug55ncwwyXdU
  + * mnyMPS148p1bUHCPAPPcJN+jLOrM3GjUOMckX2PV16ygiJDL9Zi7Qa4GR36i4kYM
  + * XMW6yZ1LJP160y+iofqUy4SeKW01zCtaMT2XBjSRUrdFJr1h0rmAZg3qhnV0cUAT
  + * KTVcfoYsjOmN1jLxbPWJdZV6T2GkTstPb2pOh3ilek+kNN3LmWO6UuflZB0/YvYk
  + * B+eYXpi4PM4YYs80g3XK/Gh1JHG0UC/p3OFIhRkhiuXNJ3aaDr0/tKExbraWqtFX
  + * g1qsiyue8qDxWq0ykdI+l5/g2eE87rCX79XGj8cK6CGgMh0gyH8qYPrPoTCeGzx0
  + * Jft6yUHU+3bbPL4cwi8AzFAazU+XKXlJlHL6O64uec3KQ9h0OQPK1uJRZNob9RCO
  + * 3WH/mjGc5kC1HXX759Bmiixas0jkZHIgBy9wrH8PTRe+bHcvx6dMrTUOPqOVYA1x
  + * sFhJQnf7Y8hUOVfCOZV/v3h+3N88W7tmG7rm9ztCXPGE/Gw4IuAgLUd67M4V3f8/
  + * nPS/M9IprN/UXfMnR2b8MA4Rl6Np3wh9EtJM6OWRlkGrfrtUa1L3T5u2DTu15qnW
  + * r/Wup/wDvlAM/PkMAAA=
  + * -----END EMBEDDED OBJECT-----
  + */
  +
   /* create channel */
   l2_channel_t *l2_channel_create(l2_handler_t *h)
   {

From ossp-cvs-owner@ossp.org  Fri Sep 28 16:28:43 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8SESfo48936; Fri, 28 Sep 2001 16:28:41 +0200 (CEST)
Date: Fri, 28 Sep 2001 16:28:41 +0200 (CEST)
Message-Id: <200109281428.f8SESfo48936@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_filter.c l2_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   28-Sep-2001 16:28:41
  Branch: HEAD                             Handle: 2001092815284100

  Modified files:
    ossp-pkg/l2             l2_ch_filter.c l2_test.c

  Log:
    Fixed bug of incorrectly checking the result of a call to pcre_study(), and
    later testing the return of pcre_exec(). Added code to test the filter
    channel.

  Summary:
    Revision    Changes     Path
    1.10        +6  -4      ossp-pkg/l2/l2_ch_filter.c
    1.28        +12 -2      ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_filter.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 l2_ch_filter.c
  --- ossp-pkg/l2/l2_ch_filter.c	2001/09/25 09:35:17	1.9
  +++ ossp-pkg/l2/l2_ch_filter.c	2001/09/28 14:28:41	1.10
  @@ -83,7 +83,8 @@
               return L2_ERR_ARG;
           }
           /* study FSM for more performance */
  -        if ((cfg->pcreExtra = pcre_study(cfg->pcreRegex, 0, &szError)) == NULL) {
  +        cfg->pcreExtra = pcre_study(cfg->pcreRegex, 0, &szError);
  +        if (szError != NULL) {
               free(cfg->pcreRegex);
               cfg->pcreRegex = NULL;
               l2_channel_errorinfo(ch, L2_ERR_ARG, "%s", szError);
  @@ -101,13 +102,14 @@
       l2_ch_filter_t *cfg = (l2_ch_filter_t *)ctx->vp;
       l2_channel_t *downstream = l2_channel_downstream(ch);
       l2_result_t rv;
  -    int bPass;
  +    int bPass, iCheck;
   
       bPass = TRUE;
   
       /* apply filter */
  -    if (cfg->pcreRegex != NULL && cfg->pcreExtra != NULL) {
  -       if (pcre_exec(cfg->pcreRegex, cfg->pcreExtra, buf, buf_size, 0, 0, NULL, 0) > 0)
  +    if (cfg->pcreRegex != NULL) {
  +       iCheck = pcre_exec(cfg->pcreRegex, cfg->pcreExtra, buf, buf_size, 0, 0, NULL, 0);
  +       if (iCheck >= 0)
              bPass = TRUE;
          else
              bPass = FALSE;
  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/09/21 17:30:26	1.27
  +++ ossp-pkg/l2/l2_test.c	2001/09/28 14:28:41	1.28
  @@ -63,6 +63,7 @@
   
   int main(int argc, char *argv[])
   {
  +    l2_channel_t *chFilt;
       l2_channel_t *chPrefix;
       l2_channel_t *chBuf;
       l2_channel_t *chFile;
  @@ -92,6 +93,12 @@
       if (l2_channel_configure(chPrefix, "prefix,timezone", "[%d-%m-%Y/%H:%M:%S] %L test[%P]: ", "local") != L2_OK)
           die("failed to configure prefix channel");
   
  +    if ((chFilt = l2_channel_create(&l2_handler_filter)) == NULL)    /* Filter */
  +        die("failed to create filter channel");
  +
  +    if (l2_channel_configure(chFilt, "regex,negate", "hecking", 0) != L2_OK)
  +        die("failed to configure filter channel");
  +
       if ((chBuf  = l2_channel_create(&l2_handler_buffer)) == NULL)    /* Buffer */
           die("failed to create buffer channel");
   
  @@ -110,10 +117,13 @@
       if (l2_channel_stack(chBuf, chPrefix) != L2_OK)
           die("failed to stack prefix channel on top of buffer channel");
   
  -    if (l2_channel_open(chPrefix) != L2_OK)
  +    if (l2_channel_stack(chPrefix, chFilt) != L2_OK)
  +        die("failed to stack filter channel on top of prefix channel");
  +    
  +    if (l2_channel_open(chFilt) != L2_OK)
           die("failed to open channel stack");
   
  -    if (l2_stream_channel(st, chPrefix, L2_LEVEL_UPTO(L2_LEVEL_WARNING), L2_LEVEL_NONE) != L2_OK)
  +    if (l2_stream_channel(st, chFilt, L2_LEVEL_UPTO(L2_LEVEL_WARNING), L2_LEVEL_NONE) != L2_OK)
           die("failed to attach channel stack into stream");
   
   #ifdef WITH_SYSLOG

From ossp-cvs-owner@ossp.org  Fri Sep 28 16:30:50 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f8SEUn649335; Fri, 28 Sep 2001 16:30:49 +0200 (CEST)
Date: Fri, 28 Sep 2001 16:30:49 +0200 (CEST)
Message-Id: <200109281430.f8SEUn649335@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   28-Sep-2001 16:30:49
  Branch: HEAD                             Handle: 2001092815304900

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    Remember adding options to the filter channel.

  Summary:
    Revision    Changes     Path
    1.27        +1  -0      ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 TODO
  --- ossp-pkg/l2/TODO	2001/09/26 18:16:13	1.26
  +++ ossp-pkg/l2/TODO	2001/09/28 14:30:49	1.27
  @@ -29,6 +29,7 @@
   - configure only checks existance of command in non-shell mode
   - find alternative to exec arguments which is hard coded to 256
   - signal handler chaining, save old signal handler and call it after our own
  +- consider adding options such as PCRE_CASELESS to filter channel
   
   ISSUES
   ------

From ossp-cvs-owner@ossp.org  Mon Oct  1 18:14:12 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f91GEAx61820; Mon, 1 Oct 2001 18:14:10 +0200 (CEST)
Date: Mon, 1 Oct 2001 18:14:10 +0200 (CEST)
Message-Id: <200110011614.f91GEAx61820@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_pipe.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   01-Oct-2001 18:14:10
  Branch: HEAD                             Handle: 2001100117141000

  Modified files:
    ossp-pkg/l2             l2_ch_pipe.c

  Log:
    Added graphical commentary describing new runtime reliability options.

  Summary:
    Revision    Changes     Path
    1.21        +56 -0      ossp-pkg/l2/l2_ch_pipe.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_pipe.c
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 l2_ch_pipe.c
  --- ossp-pkg/l2/l2_ch_pipe.c	2001/09/26 14:31:22	1.20
  +++ ossp-pkg/l2/l2_ch_pipe.c	2001/10/01 16:14:10	1.21
  @@ -70,6 +70,62 @@
       else if (sig == SIGPIPE);          /* noop for now                      */
   }
   
  +/* 
  + * A channel is the central object for a logging stream. It is
  + * implemented by a framework (the code implemented here) which provides
  + * the channel API and which is equal for all channels and a particular
  + * handler which implements the characteristics specific to a particular
  + * channel class. The lifecycle of a channel is illustrated in the
  + * following figure:
  + *
  + * -----BEGIN EMBEDDED OBJECT-----
  + * Content-editor: xfig %s
  + * Content-encoding: gzip:9 base64
  + * Content-type: application/fig
  + * Content-viewer: xfig %s
  + * Description: L2 Pipe Channel Command Lifecycle
  + * Filename: l2_ch_pipe.fig
  + * Last-modified: 2000-09-28/14:40
  + * Name: l2_ch_pipe
  + * Version: eo/1.0
  + * H4sIALKVuDsCA61Z32/cNgx+3v0VAvqwDWgO+mnLz8U2FMiwYW3f9uL4lJ43n+9m
  + * +5rlvx9J2Sc5bRrp1qZxRdvfJ9KkSEp99fPbX5jays1t3e/Gpj65zRvXT27Y/Oqm
  + * oW02t24CibGN4HzL+eZd23/s3OZGboTknMkNZ0qyVw392RRM6tIwWcIjIQQOK2k2
  + * mnH4MXgRBRPwL1DBK5oBCdPwKw1erOWsGVw9uT85F1+Dwc1CG6YUTkGwY3/ffjwP
  + * LyJhHgVIrYoZeTy5PhFklJi1fBjaKXWqQi6opjuOqaYV1bWmldUVptnqGtOqcpkq
  + * 1TQjDdwrFm/v3DgNx0cC3hQYPwUghCzgwm0Fb5UV3wimkC0Qy5kV73l2Cjm6FBL/
  + * BlmWBV5EmUIDk3L/9swT3YAhMSmdwqTNWqEga5OhUKFQUmahiWSFH0kVSTRWrLUJ
  + * shUZ2sCUK5ogqyKDxui1UUE2OsOoUq61CXIpM7Sp+FqbIFc8Q5uqekJzkatqoZFE
  + * gSuk9DQ3M5wtAs4iNt9F8Ru+cRxCIQpWI3wK6Ni9QYvVyOfoOboBFFaf5mZZfcbY
  + * 9NVndLVafSTT6jOGZ6w+fHu1+uiGX33GSJ0cqJFCQaZATVWIAjOiCTIFaioNuSui
  + * CTLlglQaiu+IJsgU76k0FBIRTZApF6TS0DLRQq+WDcm0bLQw6csmprnItGxSaSj6
  + * I5pIVgtN0uqTcll9c7gEV61GxK0rE4/wKaDjKLloUZp4NHuNxyN8CmgoqfObNJod
  + * w+MRPbXGXL53QFf6cjf6kAt6Xk+oJq13IFNQj7XGmquU78PiCs7XBRxftrRQCWeg
  + * RfnQ76A/7I/Doe5Y0w7N+TBOdd+48fXTduBzMikCGfLW7Fay39uTY2/2dd+7jj20
  + * 054Nrmvru7Zrp8cUTrVwSg7dxnQeerdjxx64ug40nVjv4MZ0ZFP9t2N1/xIpByZZ
  + * mYVUGuzJhsE1U/sJ8PAPkAPdoW77CX5ZO42s2bfdLkXb8kKMrXNzPBygFWen4Qif
  + * cNyyn/6tD6fOsXF/fOi3oVHyGC0RLgtqTo15wXVluXwZreGhd914ck37/3ynC7h8
  + * E99xu3wNjen+ie8GB+1ifde1456+8QlmSyCFDzOTGuTfnQfYxIC+9139AOzU8GKv
  + * PNTkyd3ZgTcTeKE4Lry4Mah9E7zzrmdtfzpPpOLzTqR6W1gyGuutVWV6vbXSruot
  + * yVRvrawy6i2+vaq3dMPXW6tEer2NFAoy1dtUhSizRjRBpkKZSkNpN6IJMpXtVBqq
  + * IRFNJKsMGkruEU2QqWyn0lDmj2iCTGU7lYaKRUQTZCrbyTTVE5qLTGWbaNK6XbXU
  + * 2zlcgseD01ajooIEb6zxI6y3OJ6/RDBmNSIM1cYwwqeAXmLermpiYakm4tmEFdq8
  + * lAqLJRPQtv393rHzCLn1UD9C0vrn3A6QYHp3A+t/Ss1aMOvMSQFz5/b1p/Y4bNlb
  + * KDb7FipMPbrXMHSQcCjhfj8m0Ep+odVQHetxPEL6nzBtzaXnUibHU/3Qp+TXS1mh
  + * juXcT21HWRXT7J372PZQx96TnpgY59KWVWHIsfdtD5nfjQv3F/PqC9ari/UWHEWm
  + * Tm44tD18AvbXeZxYfY8HXtFnjdI1ln4MHSH89gwCwwe5YBaDXDzXVGKMI9hv62aa
  + * l7HCY3EgthjG+BRPX7a0zQuUi0Lck+KPkhGrfFYj2hF6OA4jQ5XUyxMDzUWmpX73
  + * t/B8G1N9DyuW5jzXVGqGPZy65WBqwdXyxCqZa6ovvAvPtzGVOGeNMDVlmuqzXDVn
  + * PrQ08QzWFOU1Z7Aeds0ZLCFzz2AJlHNQSceb2Sg63vSmZR9vEiw+3kw8KM5WkipO
  + * NooOibNQlxCx2EPlh4iHXRMihMwNEQJlH9N7JXOP6a8yjTyQaxrFcbZpFMdZpoU4
  + * JtjTOLYxUGxNyW00HfUYBY5gtxYp+TyKDo95iQP6ktSIfBm3Ms7gzk7gdKTmcIbW
  + * qD18bqD93EBEkn2Q7xHYQ0PxEg5XAJYQwgmoRdAl5cxFwfJ0LhtwMsJhScEDAVPR
  + * GRZMtmyvf4NG8h02krftvWsem87l+EWhNtl+Uba8zi+UYq7xC7Yc1/iFtgiZftHC
  + * 5vhFcT37hXYri1/+oJMO6EYvfmE/DA67/R9zHIRrNds/uIm5yj/0v3DX+Aeb32v8
  + * Q0cemf4RqsryD57YkX9g2/BV9/hjS++e/wBMybpdCx8AAA==
  + * -----END EMBEDDED OBJECT-----
  + */
  +
   /* create channel */
   static l2_result_t hook_create(l2_context_t *ctx, l2_channel_t *ch)
   {

From ossp-cvs-owner@ossp.org  Mon Oct  1 18:26:15 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f91GQEu63177; Mon, 1 Oct 2001 18:26:14 +0200 (CEST)
Date: Mon, 1 Oct 2001 18:26:14 +0200 (CEST)
Message-Id: <200110011626.f91GQEu63177@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_pipe.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   01-Oct-2001 18:26:14
  Branch: HEAD                             Handle: 2001100117261400

  Modified files:
    ossp-pkg/l2             l2_ch_pipe.c

  Log:
    Fixed incorrect comments.

  Summary:
    Revision    Changes     Path
    1.22        +15 -5      ossp-pkg/l2/l2_ch_pipe.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_pipe.c
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 l2_ch_pipe.c
  --- ossp-pkg/l2/l2_ch_pipe.c	2001/10/01 16:14:10	1.21
  +++ ossp-pkg/l2/l2_ch_pipe.c	2001/10/01 16:26:14	1.22
  @@ -71,11 +71,21 @@
   }
   
   /* 
  - * A channel is the central object for a logging stream. It is
  - * implemented by a framework (the code implemented here) which provides
  - * the channel API and which is equal for all channels and a particular
  - * handler which implements the characteristics specific to a particular
  - * channel class. The lifecycle of a channel is illustrated in the
  + * The lifecycle of the command executed by the pipe channel handler
  + * depends on the runtime option selected during configuration. The
  + * option 'reliable' describes subsequent behavior which rebuilds an
  + * (un)intentionally severed child-controlled pipe. In this case, when
  + * the pipe handler encounters a failed write operation, it will attempt
  + * the reconnection a user-defined number of times until failure is assumed.
  + *
  + * The option 'oneshot' describes subsequent behavior which also rebuilds
  + * such a severed pipe. The difference is that the pipe handler will not
  + * spawn the child process until writing actually occurs. It will also
  + * terminate the child process after writing is finished, independant of
  + * whether the write operation succeeded or failed after the user-specified
  + * number of retries.
  + *
  + * The lifecycle of a pipe command process is illustrated in the
    * following figure:
    *
    * -----BEGIN EMBEDDED OBJECT-----

From ossp-cvs-owner@ossp.org  Tue Oct  2 15:27:48 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f92DRl207973; Tue, 2 Oct 2001 15:27:47 +0200 (CEST)
Date: Tue, 2 Oct 2001 15:27:47 +0200 (CEST)
Message-Id: <200110021327.f92DRl207973@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa README TODO aclocal.m4 autogen.sh configure.ac...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   02-Oct-2001 15:27:47
  Branch: VENDOR                           Handle: 2001100214274401

  Added files:              (Branch: VENDOR)
    ossp-pkg/sa             README TODO aclocal.m4 autogen.sh configure.ac
                            sa.ac sa.c sa.h sa.pod test.c

  Log:
    Import first cut of OSSP SA
    
    [Release Tag: SA_0_0_0]

  Summary:
    Revision    Changes     Path
    1.1.1.1     BLOB        ossp-pkg/sa/README
    1.1.1.1     +17 -0      ossp-pkg/sa/TODO
    1.1.1.1     +88 -0      ossp-pkg/sa/aclocal.m4
    1.1.1.1     +47 -0      ossp-pkg/sa/autogen.sh
    1.1.1.1     +26 -0      ossp-pkg/sa/configure.ac
    1.1.1.1     +44 -0      ossp-pkg/sa/sa.ac
    1.1.1.1     +957 -0     ossp-pkg/sa/sa.c
    1.1.1.1     +90 -0      ossp-pkg/sa/sa.h
    1.1.1.1     +219 -0     ossp-pkg/sa/sa.pod
    1.1.1.1     +79 -0      ossp-pkg/sa/test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/README
  ============================================================
  $ cvs update -p -r1.1.1.1 README | uuencode README
  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs update -p -r1.1.1.1 TODO
  
  Goals:
  1. struct sockaddr * abstraction
  2. ssize_t abstraction
  3. cache socket descriptors weil kein close existiert
  4. jede funktion hat timeout-possibility (connect_smart!)
  5. optional readline and buffering functionality
  
  TODO:
  buffer == 0 -> fully unbuffered
  timeout == 0 -> fully blocking
  
  - Unix domain sockets support
  - aufpassen dasz fuer read/write STREAM socket ist
  - aufpassen dasz fuer readfrom/writeto DGRAM socket ist
  - destructor fuer sa_addr_t?
  
  Index: ossp-pkg/sa/aclocal.m4
  ============================================================
  $ cvs update -p -r1.1.1.1 aclocal.m4
  
  dnl ##
  dnl ##  Check whether compiler option works
  dnl ##
  dnl ##  configure.in:
  dnl ##    AC_COMPILER_OPTION(<name>, <display>, <option>,
  dnl ##                       <action-success>, <action-failure>)
  dnl ##
  
  AC_DEFUN(AC_COMPILER_OPTION,[dnl
  AC_MSG_CHECKING(whether compiler option(s) $2 work)
  AC_CACHE_VAL(ac_cv_compiler_option_$1,[
  SAVE_CFLAGS="$CFLAGS"
  CFLAGS="$CFLAGS $3"
  AC_TRY_COMPILE([],[], ac_cv_compiler_option_$1=yes, ac_cv_compiler_option_$1=no)
  CFLAGS="$SAVE_CFLAGS"
  ])dnl
  if test ".$ac_cv_compiler_option_$1" = .yes; then
      ifelse([$4], , :, [$4])
  else
      ifelse([$5], , :, [$5])
  fi
  AC_MSG_RESULT([$ac_cv_compiler_option_$1])
  ])dnl
  
  dnl ##
  dnl ##  Debugging Support
  dnl ##
  dnl ##  configure.in:
  dnl ##    AC_CHECK_DEBUGGING
  dnl ##
  
  AC_DEFUN(AC_CHECK_DEBUGGING,[dnl
  AC_ARG_ENABLE(debug,dnl
  [  --enable-debug          build for debugging (default=no)],
  [dnl
  if test ".$ac_cv_prog_gcc" = ".yes"; then
      case "$CFLAGS" in
          *-O* ) ;;
             * ) CFLAGS="$CFLAGS -O2" ;;
      esac
      case "$CFLAGS" in
          *-g* ) ;;
             * ) CFLAGS="$CFLAGS -g" ;;
      esac
      case "$CFLAGS" in
          *-pipe* ) ;;
                * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
      esac
      AC_COMPILER_OPTION(defdbg, -DDEBUG, -DDEBUG, CFLAGS="$CFLAGS -DDEBUG")
      AC_COMPILER_OPTION(ggdb3, -ggdb3, -ggdb3, CFLAGS="$CFLAGS -ggdb3")
      CFLAGS="$CFLAGS -pedantic"
      CFLAGS="$CFLAGS -Wall"
      WMORE="-Wshadow -Wpointer-arith -Wcast-align -Winline"
      WMORE="$WMORE -Wmissing-prototypes -Wmissing-declarations -Wnested-externs"
      AC_COMPILER_OPTION(wmore, -W<xxx>, $WMORE, CFLAGS="$CFLAGS $WMORE")
      AC_COMPILER_OPTION(wnolonglong, -Wno-long-long, -Wno-long-long, CFLAGS="$CFLAGS -Wno-long-long")
  else
      case "$CFLAGS" in
          *-g* ) ;;
             * ) CFLAGS="$CFLAGS -g" ;;
      esac
  fi
  msg="enabled"
  ],[
  if test ".$ac_cv_prog_gcc" = ".yes"; then
  case "$CFLAGS" in
      *-pipe* ) ;;
            * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
  esac
  fi
  case "$CFLAGS" in
      *-g* ) CFLAGS=`echo "$CFLAGS" |\
                     sed -e 's/ -g / /g' -e 's/ -g$//' -e 's/^-g //g' -e 's/^-g$//'` ;;
  esac
  case "$CXXFLAGS" in
      *-g* ) CXXFLAGS=`echo "$CXXFLAGS" |\
                       sed -e 's/ -g / /g' -e 's/ -g$//' -e 's/^-g //g' -e 's/^-g$//'` ;;
  esac
  msg=disabled
  ])dnl
  AC_MSG_CHECKING(for compilation debug mode)
  AC_MSG_RESULT([$msg])
  if test ".$msg" = .enabled; then
      enable_shared=no
  fi
  ])
  
  Index: ossp-pkg/sa/autogen.sh
  ============================================================
  $ cvs update -p -r1.1.1.1 autogen.sh
  #!/bin/sh
  
  #   generator tools version sanity check
  #    "libtoolize --version 4 1.4.2 1.4*"
  #    "shtoolize  -v        3 1.5.4 1.5.*"
  for spec in \
      "autoconf   --version 4 2.52  2.5*"
  do
      set -- $spec
      t="$1"
      o="$2"
      p="$3"
      e="$4"
      a="$5"
      v=`($t $o | head -1 | awk "{ print \\\$$p; }") 2>/dev/null`
      if [ ".$v" = . ]; then
          echo "$0:ERROR: unable to determine version of $t" 1>&2
          exit 1
      fi
      eval "${t}_version=\"$v\""
      case "$v" in
          $e )
              ;;
          $a )
              echo "$0:WARNING: $t version $v still accepted, although expected $e." 1>&2
              ;;
          * )
              echo "$0:ERROR: $t version $e expected, but found $v." 1>&2
              ;;
      esac
  done
  
  #   GNU Libtool generation
  # echo "GNU Libtool $libtoolize_version -> ltmain.sh, libtool.m4, config.guess, config.sub"
  # libtoolize --force --copy >/dev/null 2>&1
  # cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
  #     sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` libtool.m4
  
  #   GNU Autoconf generation
  echo "GNU Autoconf $autoconf_version -> configure, config.h.in"
  autoconf
  autoheader
  
  #   GNU Shtool generation
  # echo "GNU Shtool $shtoolize_version -> shtool"
  # shtoolize -q all
  
  Index: ossp-pkg/sa/configure.ac
  ============================================================
  $ cvs update -p -r1.1.1.1 configure.ac
  dnl ##
  dnl ##  Autoconf specification for SA library
  dnl ##
  
  AC_PREREQ(2.52)dnl
  AC_REVISION(1.0)
  
  AC_INIT(README)
  AC_PREFIX_DEFAULT(/usr/local)
  AC_CONFIG_HEADER(config.h)
  
  AC_SET_MAKE
  AC_PROG_CC
  AC_PROG_CPP
  AC_CHECK_PROG(AR, ar, ar)
  AC_PROG_RANLIB
  
  AC_CHECK_DEBUGGING
  
  sinclude(sa.ac)
  AC_CHECK_SA
  
  AC_OUTPUT(dnl
  Makefile dnl
  )dnl
  
  Index: ossp-pkg/sa/sa.ac
  ============================================================
  $ cvs update -p -r1.1.1.1 sa.ac
  ##
  ##  SA - OSSP Socket Abstraction Library
  ##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  ##
  ##  This file is part of OSSP SA, a socket abstraction library which
  ##  can be found at http://www.ossp.org/pkg/sa/.
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  sa.ac: socket abstraction Autoconf checks
  ##
  
  AC_DEFUN(AC_CHECK_SA,[
      #   make sure libnsl and libsocket are linked in if they exist
      AC_CHECK_LIB(nsl, gethostname)
      if test ".`echo $LIBS | grep nsl`" = .; then
          AC_CHECK_LIB(nsl, gethostbyname)
      fi  
      AC_CHECK_LIB(socket, accept)
      
      #   check for system headers
      AC_CHECK_HEADERS(string.h sys/types.h sys/socket.h netdb.h netinet/in.h)
  
      #   check for system functions
      AC_CHECK_FUNCS(inet_aton inet_pton inet_ntoa inet_ntop snprintf vsnprintf)
  ])
  
  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs update -p -r1.1.1.1 sa.c
  /*
  **  SA - OSSP Socket Abstraction Library
  **  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP SA, a socket abstraction library which
  **  can be found at http://www.ossp.org/pkg/sa/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  sa.c: socket abstraction library
  */
  
  /* include optional Autoconf header */
  #ifdef HAVE_CONFIG_H
  #include "config.h"
  #endif
  
  /* include system API headers */
  #include <stdio.h>
  #include <stdlib.h>
  #include <stdarg.h>
  #include <string.h>
  #include <unistd.h>
  #include <ctype.h>
  #include <errno.h>
  #include <fcntl.h>
  #include <time.h>
  #include <sys/time.h>
  #include <netdb.h>
  #include <sys/types.h>
  #include <sys/un.h>
  #include <netinet/in.h>
  #include <sys/socket.h>
  #include <arpa/inet.h>
  
  /* include own API header */
  #include "sa.h"
  
  /* socket address abstraction object */
  struct sa_addr_st {
      struct sockaddr *saBuf;
      socklen_t        slBuf;
      int              nFamily;
      int              nProto;
  };
  
  /* socket abstraction object */
  struct sa_st {
      int              sSocket;
      int              bTimeout;
      struct timeval   tvTimeout;
      int              nReadLen;
      int              nReadSize;
      char            *cpReadBuf;
      int              nWriteLen;
      int              nWriteSize;
      char            *cpWriteBuf;
  };
  
  /* make sure AF_LOCAL define exists */
  #if !defined(AF_LOCAL) && defined(AF_UNIX)
  #define AF_LOCAL AF_UNIX
  #endif
  
  /* make sure inet_pton() exists */
  #if defined(HAVE_INET_PTON)
  #define sa_inet_pton inet_pton
  #elif defined(HAVE_INET_ATON)
  static int inet_pton(int family, const char *strptr, void *addrptr)
  {
      struct in_addr in_val;
  
      if (family == AF_INET) {
          if (inet_aton(strptr, &in_val)) {
              memcpy(addrptr, &in_val, sizeof(struct in_addr));
              return 1;
          }
          return 0;
      }
      errno = EAFNOSUPPORT;
      return -1;
  }
  #else
  #error "neither inet_pton nor inet_aton available"
  #endif
  
  /* make sure inet_ntop() exists */
  #if defined(HAVE_INET_NTOP)
  #define sa_inet_ntop inet_ntop
  #elif defined(HAVE_INET_NTOA)
  static char *inet_ntop(int family, const void *src, char *dst, size_t size)
  {
      struct in_addr in_val;
      char *cp;
      int n;
  
      if (family == AF_INET) {
          if ((cp = inet_ntoa(src)) != NULL) {
              n = strlen(cp);
              if (n > size-1)
                  n = size-1;
              memcpy(dst, cp, n);
              dst[n] = '\0';
              return 1;
          }
          return 0;
      }
      errno = EAFNOSUPPORT;
      return -1;
  }
  #else
  #error "neither inet_ntop nor inet_ntoa available"
  #endif
  
  /* make sure vsnprintf() exists */
  #if defined(HAVE_VSNPRINTF)
  #define sa_vsnprintf vsnprintf
  #elif defined(HAVE_VSPRINTF)
  static int sa_vsnprintf(char *str, size_t size, const char *fmt, va_list ap)
  {
      int rv;
      
      rv = vsprintf(str, fmt, ap);
      if (rv > size) {
          fprintf(stderr, "ERROR: vsprintf(3) buffer overflow!\n");
          abort();
      }
  }
  #else
  #error "neither vsnprintf nor vsprintf available"
  #endif
  
  /* make sure snprintf() exists */
  #if defined(HAVE_SNPRINTF)
  #define sa_snprintf snprintf
  #else
  static int sa_snprintf(char *str, size_t size, const char *fmt, ...)
  {
      va_list ap;
      int rv;
  
      va_start(ap, fmt);
      rv = sa_vsnprintf(str, size, fmt, ap);
      va_end(ap);
      return rv;
  }
  #endif
  
  sa_rc_t sa_u2a(sa_addr_t **saa, const char *uri, ...)
  {
      va_list ap;
      int nPort;
      socklen_t sl;
      struct sockaddr *sa;
      struct sockaddr_in sa4;
  #ifdef AF_INET6
      struct sockaddr_in6 sa6;
  #endif
      struct hostent *he;
      struct servent *se;
      struct protoent *pe;
      int bNumeric;
      int i;
      char *cpProto;
      int   nProto;
      char *cpHost;
      char *cpPort;
      char uribuf[1024];
      char *cp;
      int sf;
  
      /* argument sanity check */
      if (saa == NULL || uri == NULL)
          return SA_ERR_ARG;
  
      /* on-the-fly create or just take over URI */
      va_start(ap, uri);
      sa_vsnprintf(uribuf, sizeof(uribuf), uri, ap);
      va_end(ap);
  
      /* parse URI into protocol, host and port parts */
      uri = uribuf;
      cpProto = "tcp";
      if ((cp = strstr(uri, "://")) != NULL) {
          cpProto = (char *)uri;
          *cp = '\0';
          uri = cp+3;
      }
      cpHost = (char *)uri;
      if ((cp = strchr(uri, ':')) == NULL)
          return SA_ERR_ARG;
      *cp++ = '\0';
      cpPort = cp;
  
      /* resolve protocol */
      if ((pe = getprotobyname(cpProto)) == NULL)
          return SA_ERR_SYS;
      nProto = pe->p_proto;
  
      /* resolve port */
      bNumeric = 1;
      for (i = 0; cpPort[i] != '\0'; i++) {
          if (!isdigit((int)cpPort[i])) {
              bNumeric = 0;
              break;
          }
      }
      if (bNumeric)
          nPort = atoi(cpPort);
      else {
          if ((se = getservbyname(cpPort, cpProto)) == NULL)
              return SA_ERR_SYS;
          nPort = ntohs(se->s_port);
      }
  
      /* mandatory(!) socket address structure initialization */
      memset(&sa4, 0, sizeof(sa4));
  #ifdef AF_INET6
      memset(&sa6, 0, sizeof(sa6));
  #endif
  
      /* resolve host by trying to parse it as either directly a IPv4 or
         IPv6 address or by resolving it to either a IPv4 or IPv6 address */
      sa = NULL;
      sl = 0;
      sf = 0;
      if (inet_pton(AF_INET, cpHost, &sa4.sin_addr.s_addr) == 1) {
          sa4.sin_family = AF_INET;
          sa4.sin_port = htons(nPort);
          sa = (struct sockaddr *)&sa4;
          sl = sizeof(sa4);
          sf = AF_INET;
      }
  #ifdef AF_INET6
      else if (inet_pton(AF_INET6, cpHost, &sa6.sin6_addr.s6_addr) == 1) {
          sa6.sin6_family = AF_INET6;
          sa6.sin6_port = htons(nPort);
          sa = (struct sockaddr *)&sa6;
          sl = sizeof(sa6);
          sf = AF_INET6;
      }
  #endif
      else if ((he = gethostbyname(cpHost)) != NULL) {
          if (he->h_addrtype == AF_INET) {
              sa4.sin_family = AF_INET;
              sa4.sin_port = htons(nPort);
              memcpy(&sa4.sin_addr.s_addr, he->h_addr_list[0], sizeof(sa4.sin_addr.s_addr));
              sa = (struct sockaddr *)&sa4;
              sl = sizeof(sa4);
              sf = AF_INET;
          }
  #ifdef AF_INET6
          else if (he->h_addrtype == AF_INET6) {
              sa6.sin6_family = AF_INET6;
              sa6.sin6_port = htons(nPort);
              memcpy(&sa6.sin6_addr.s6_addr, he->h_addr_list[0], sizeof(sa6.sin6_addr.s6_addr));
              sa = (struct sockaddr *)&sa6;
              sl = sizeof(sa6);
              sf = AF_INET6;
          }
  #endif
      }
      if (sa == NULL)
          return SA_ERR_ARG;
          
      /* create result address structure */
      if ((*saa = (sa_addr_t *)malloc(sizeof(sa_addr_t))) == NULL)
          return SA_ERR_MEM;
      if (((*saa)->saBuf = (struct sockaddr *)malloc(sl)) == NULL) {
          free(*saa);
          return SA_ERR_MEM;
      }
      memcpy((*saa)->saBuf, sa, sl);
      (*saa)->slBuf = sl;
      (*saa)->nFamily = sf;
      (*saa)->nProto = nProto;
      return SA_OK;
  }
  
  sa_rc_t sa_s2a(sa_addr_t **saa, const struct sockaddr *sabuf, socklen_t salen)
  {
      struct sockaddr_in *sa4;
  #ifdef AF_INET6
      struct sockaddr_in6 *sa6;
  #endif
      struct protoent *pe;
      int sf;
  
      if (saa == NULL || sabuf == NULL || salen == 0)
          return SA_ERR_ARG;
  
      /* create result address structure */
      if ((*saa = (sa_addr_t *)malloc(sizeof(sa_addr_t))) == NULL)
          return SA_ERR_MEM;
      if (((*saa)->saBuf = (struct sockaddr *)malloc(salen)) == NULL) {
          free(*saa);
          return SA_ERR_MEM;
      }
      memcpy((*saa)->saBuf, sabuf, salen);
      (*saa)->slBuf = salen;
  
      /* fill in family */
      sf = 0;
      if (sizeof(struct sockaddr_in) == salen) {
          sa4 = (struct sockaddr_in *)((void *)sabuf);
          if (sa4->sin_family == AF_INET)
              sf = AF_INET;
      }
  #ifdef AF_INET6
      else if (sizeof(struct sockaddr_in6) == salen) {
          sa6 = (struct sockaddr_in6 *)((void *)sabuf);
          if (sa6->sin6_family == AF_INET6)
              sf = AF_INET6;
      }
  #endif
      (*saa)->nFamily = sf;
  
      /* fill in protocol */
      if ((pe = getprotobyname("tcp")) != NULL)
          (*saa)->nProto = pe->p_proto;
      else
          (*saa)->nProto = 0;
      return SA_OK;
  }
  
  sa_rc_t sa_a2u(const sa_addr_t *saa, char **uri)
  {
      char uribuf[1024];
      struct protoent *pe;
      struct sockaddr_in *sa4;
  #ifdef AF_INET6
      struct sockaddr_in6 *sa6;
  #endif
      char caHost[512];
      int nPort;
  
      if (saa == NULL || uri == NULL)
          return SA_ERR_ARG;
      if ((pe = getprotobynumber(saa->nProto)) == NULL)
          return SA_ERR_SYS;
      if (saa->nFamily == AF_INET) {
          sa4 = (struct sockaddr_in *)((void *)saa->saBuf);
          inet_ntop(AF_INET, &sa4->sin_addr.s_addr, caHost, sizeof(caHost));
          nPort = ntohs(sa4->sin_port);
      }
  #ifdef AF_INET6
      else if (saa->nFamily == AF_INET6) {
          sa6 = (struct sockaddr_in6 *)((void *)saa->saBuf);
          inet_ntop(AF_INET6, &sa6->sin6_addr.s6_addr, caHost, sizeof(caHost));
          nPort = ntohs(sa6->sin6_port);
      }
  #endif
      else
          return SA_ERR_ARG;
      sa_snprintf(uribuf, sizeof(uribuf), "%s://%s:%d", pe->p_name, caHost, nPort);
      *uri = strdup(uribuf);
      return SA_OK;
  }
  
  sa_rc_t sa_a2s(const sa_addr_t *saa, struct sockaddr **sabuf, socklen_t *salen)
  {
      if (saa == NULL || sabuf == NULL || salen == 0)
          return SA_ERR_ARG;
  
      if ((*sabuf = (struct sockaddr *)malloc(saa->slBuf)) == NULL)
          return SA_ERR_MEM;
      memmove(*sabuf, saa->saBuf, saa->slBuf);
      *salen = saa->slBuf;
      return SA_OK;
  }
  
  static sa_rc_t sa_socket_init(sa_t *sa, int family, int proto)
  {
      int type;
  
      if (sa == NULL)
          return SA_ERR_ARG;
      if (proto == IPPROTO_TCP)
          type = SOCK_STREAM;
      else if (proto == IPPROTO_UDP)
          type = SOCK_DGRAM;
      else
          return SA_ERR_ARG;
      if (sa->sSocket != -1)
          return SA_ERR_USE;
      if ((sa->sSocket = socket(family, type, proto)) == -1)
          return SA_ERR_SYS;
      return SA_OK;
  }
  
  static sa_rc_t sa_socket_kill(sa_t *sa)
  {
      if (sa == NULL)
          return SA_ERR_ARG;
      if (sa->sSocket != -1) {
          close(sa->sSocket);
          sa->sSocket = -1;
      }
      return SA_OK;
  }
  
  sa_rc_t sa_create(sa_t **sap)
  {
      sa_t *sa;
  
      if ((sa = (sa_t *)malloc(sizeof(sa_t))) == NULL)
          return SA_ERR_MEM;
      sa->sSocket    = -1;
      sa->bTimeout   = 0;
      sa->nReadLen   = 0;
      sa->nReadSize  = 1024;
      if ((sa->cpReadBuf = (char *)malloc(sa->nReadSize)) == NULL) {
          free(sa);
          return SA_ERR_MEM;
      }
      sa->nWriteLen  = 0;
      sa->nWriteSize = 1024;
      if ((sa->cpWriteBuf = (char *)malloc(sa->nWriteSize)) == NULL) {
          free(sa->cpReadBuf);
          free(sa);
          return SA_ERR_MEM;
      }
      *sap = sa;
      return SA_OK;
  }
  
  sa_rc_t sa_destroy(sa_t *sa)
  {
      if (sa == NULL)
          return SA_ERR_ARG;
      sa_socket_kill(sa);
      if (sa->cpReadBuf != NULL)
          free(sa->cpReadBuf);
      if (sa->cpWriteBuf != NULL)
          free(sa->cpWriteBuf);
      free(sa);
      return SA_OK;
  }
  
  sa_rc_t sa_timeout(sa_t *sa, long sec, long usec)
  {
      if (sa == NULL)
          return SA_ERR_ARG;
      if (sec == 0 && usec == 0) {
          sa->bTimeout = 0;
          sa->tvTimeout.tv_sec  = 0;
          sa->tvTimeout.tv_usec = 0;
      }
      else {
          sa->bTimeout = 1;
          sa->tvTimeout.tv_sec  = sec;
          sa->tvTimeout.tv_usec = usec;
      }
      return SA_OK;
  }
  
  sa_rc_t sa_buffers(sa_t *sa, size_t rsize, size_t wsize)
  {
      char *cp;
  
      if (sa == NULL)
          return SA_ERR_ARG;
      if (sa->nReadLen > rsize || sa->nWriteLen > wsize)
          return SA_ERR_ARG;
      if ((cp = (char *)realloc(sa->cpReadBuf, rsize)) == NULL)
          return SA_ERR_SYS;
      sa->cpReadBuf = cp;
      sa->nReadSize  = rsize;
      if ((cp = (char *)realloc(sa->cpWriteBuf, wsize)) == NULL)
          return SA_ERR_SYS;
      sa->cpWriteBuf = cp;
      sa->nWriteSize = wsize;
      return SA_OK;
  }
  
  sa_rc_t sa_bind(sa_t *sa, sa_addr_t *laddr)
  {
      sa_rc_t rv;
  
      if (sa == NULL || laddr == NULL)
          return SA_ERR_ARG;
      if (sa->sSocket == -1)
          if ((rv = sa_socket_init(sa, laddr->nFamily, laddr->nProto)) != SA_OK)
              return rv;
      if (bind(sa->sSocket, laddr->saBuf, laddr->slBuf) == -1)
          return SA_ERR_SYS;
      return SA_OK;
  }
  
  sa_rc_t sa_connect(sa_t *sa, sa_addr_t *raddr)
  {
      int flags, n, error;
      fd_set rset, wset;
      socklen_t len;
      sa_rc_t rv;
  
      if (sa == NULL)
          return SA_ERR_ARG;
  
      if (sa->sSocket == -1)
          if ((rv = sa_socket_init(sa, raddr->nFamily, raddr->nProto)) != SA_OK)
              return rv;
  
      if (!sa->bTimeout)
          return connect(sa->sSocket, raddr->saBuf, raddr->slBuf);
  
      error = 0;
      rv = SA_OK;
  
      /* remember socket flags */
      flags = fcntl(sa->sSocket, F_GETFL, 0);
  
      /* switch to non-blocking mode */
      fcntl(sa->sSocket, F_SETFL, flags|O_NONBLOCK);
  
      /* perform the connect */
      if ((n = connect(sa->sSocket, raddr->saBuf, raddr->slBuf)) < 0) {
          if (errno != EINPROGRESS) {
              error = errno;
              goto done;
          }
      }
  
      /* if connect completed immediately */
      if (n == 0)
          goto done; 
  
      /* wait for read or write possibility */
      FD_ZERO(&rset);
      FD_ZERO(&wset);
      FD_SET(sa->sSocket, &rset);
      FD_SET(sa->sSocket, &wset);
      do {
          n = select(sa->sSocket+1, &rset, &wset, NULL, &sa->tvTimeout);
      } while (n == -1 && errno == EINTR);
  
      /* decide on return semantic */
      if (n < 0) {
          error = errno;
          goto done;
      }
      else if (n == 0) {
          error = ETIMEDOUT;
          goto done;
      }
  
      /* fetch pending error */
      len = sizeof(error);
      if (getsockopt(sa->sSocket, SOL_SOCKET, SO_ERROR, &error, &len) < 0)
          error = errno;
  
      done:
  
      /* reset socket flags */
      fcntl(sa->sSocket, F_SETFL, flags);
  
      /* optionally set errno */
      if (error != 0) {
          errno = error;
          rv = SA_ERR_SYS;
      }
  
      return rv;
  }
  
  sa_rc_t sa_listen(sa_t *sa, int backlog)
  {
      if (sa == NULL)
          return SA_ERR_ARG;
      if (sa->sSocket == -1)
          /* at least sa_bind() has to be already performed */
          return SA_ERR_USE;
      if (listen(sa->sSocket, backlog) == -1)
          return SA_ERR_SYS;
      return SA_OK;
  }
  
  sa_rc_t sa_accept(sa_t *sa, sa_addr_t **caddr, sa_t **csa)
  {
      sa_rc_t rv;
      int n;
      fd_set fds;
      union {
          struct sockaddr_in sa4;
  #ifdef AF_INET6
          struct sockaddr_in6 sa6;
  #endif
      } sa_buf;
      socklen_t sa_len;
      int s;
  
      if (sa == NULL)
          return SA_ERR_ARG;
      if (sa->sSocket == -1)
          /* at least sa_listen() has to be already performed */
          return SA_ERR_USE;
      if (sa->bTimeout) {
          FD_ZERO(&fds);
          FD_SET(sa->sSocket, &fds);
          do {
              n = select(sa->sSocket+1, &fds, NULL, NULL, &sa->tvTimeout);
          } while (n == -1 && errno == EINTR);
          if (n == 0) 
              errno = ETIMEDOUT;
          if (n <= 0)
              return SA_ERR_SYS;
      }
      sa_len = sizeof(sa_buf);
      if ((s = accept(sa->sSocket, (struct sockaddr *)&sa_buf, &sa_len)) == -1)
          return SA_ERR_SYS;
      if ((rv = sa_s2a(caddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK)
          return rv;
      if ((rv = sa_create(csa)) != SA_OK) {
          free(*caddr);
          return rv;
      }
      (*csa)->sSocket = s;
      return SA_OK;
  }
  
  sa_rc_t sa_getremote(sa_t *sa, sa_addr_t **raddr)
  {
      sa_rc_t rv;
      union {
          struct sockaddr_in sa4;
  #ifdef AF_INET6
          struct sockaddr_in6 sa6;
  #endif
      } sa_buf;
      socklen_t sa_len;
  
      if (sa == NULL)
          return SA_ERR_ARG;
      sa_len = sizeof(sa_buf);
      if (getpeername(sa->sSocket, (struct sockaddr *)&sa_buf, &sa_len) < 0)
          return SA_ERR_SYS;
      if ((rv = sa_s2a(raddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK)
          return rv;
      return SA_OK;
  }
  
  sa_rc_t sa_getlocal(sa_t *sa, sa_addr_t **laddr)
  {
      sa_rc_t rv;
      union {
          struct sockaddr_in sa4;
  #ifdef AF_INET6
          struct sockaddr_in6 sa6;
  #endif
      } sa_buf;
      socklen_t sa_len;
  
      if (sa == NULL)
          return SA_ERR_ARG;
      sa_len = sizeof(sa_buf);
      if (getsockname(sa->sSocket, (struct sockaddr *)&sa_buf, &sa_len) < 0)
          return SA_ERR_SYS;
      if ((rv = sa_s2a(laddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK)
          return rv;
      return SA_OK;
  }
  
  sa_rc_t sa_getfd(sa_t *sa, int *fd)
  {
      if (sa == NULL || fd == NULL)
          return SA_ERR_ARG;
      *fd = sa->sSocket;
      return SA_OK;
  }
  
  static int sa_read_raw(sa_t *sa, char *cpBuf, int nBufLen)
  {
      int rv;
      fd_set fds;
  
      if (sa->bTimeout) {
          FD_ZERO(&fds);
          FD_SET(sa->sSocket, &fds);
          do {
              rv = select(sa->sSocket+1, &fds, NULL, NULL, &sa->tvTimeout);
          } while (rv == -1 && errno == EINTR);
          if (rv == 0) {
              errno = ETIMEDOUT;
              return -1;
          }
      }
      do {
          rv = read(sa->sSocket, cpBuf, nBufLen);
      } while (rv == -1 && errno == EINTR);
      return rv;
  }
  
  sa_rc_t sa_read(sa_t *sa, char *cpBuf, size_t nBufReq, size_t *nBufRes)
  {
      int n;
      int rv;
      size_t res;
  
      if (sa == NULL || cpBuf == NULL || nBufReq == 0)
          return 0;
      
      /* flush write buffer */
      if (sa->nWriteLen > 0)
          sa_flush(sa);
      rv = SA_OK;
      res = 0;
      while (1) {
          if (nBufReq <= sa->nReadLen) {
              /* buffer holds enough data, so use this */
              memmove(cpBuf, sa->cpReadBuf, nBufReq);
              memmove(sa->cpReadBuf, sa->cpReadBuf+nBufReq, sa->nReadLen-nBufReq);
              sa->nReadLen -= nBufReq;
              res += nBufReq;
          }
          else {
              if (sa->nReadLen > 0) {
                  /* fetch already existing buffer contents as a start */
                  memmove(cpBuf, sa->cpReadBuf, sa->nReadLen);
                  nBufReq -= sa->nReadLen;
                  cpBuf   += sa->nReadLen;
                  res     += sa->nReadLen;
                  sa->nReadLen = 0;
              }
              if (nBufReq >= sa->nReadSize) {
                  /* buffer is too small at all, so read directly */
                  n = sa_read_raw(sa, cpBuf, nBufReq);
                  if (n > 0)
                      res += n;
                  else if (n <= 0)
                      rv = SA_ERR_SYS;
              }
              else {
                  /* fill buffer with new data */
                  n = sa_read_raw(sa, sa->cpReadBuf, sa->nReadSize);
                  if (n <= 0)
                      rv = SA_ERR_SYS;
                  else {
                      sa->nReadLen = n;
                      continue;
                  }
              }
          }
          break;
      }
      if (nBufRes != NULL)
          *nBufRes = res;
      return rv;
  }
  
  sa_rc_t sa_readfrom(sa_t *sa, char *buf, size_t buflen, size_t *bufdone, sa_addr_t **raddr)
  {
      sa_rc_t rv;
      union {
          struct sockaddr_in sa4;
  #ifdef AF_INET6
          struct sockaddr_in6 sa6;
  #endif
      } sa_buf;
      socklen_t sa_len;
      size_t n;
      fd_set fds;
  
      if (sa == NULL || buf == NULL || buflen == 0 || raddr == NULL)
          return SA_ERR_ARG;
      if (sa->bTimeout) {
          FD_ZERO(&fds);
          FD_SET(sa->sSocket, &fds);
          do {
              n = select(sa->sSocket+1, &fds, NULL, NULL, &sa->tvTimeout);
          } while (n == -1 && errno == EINTR);
          if (n == 0) 
              errno = ETIMEDOUT;
          if (n <= 0)
              return SA_ERR_SYS;
      }
      sa_len = sizeof(sa_buf);
      if ((n = recvfrom(sa->sSocket, buf, buflen, 0, (struct sockaddr *)&sa_buf, &sa_len)) == -1)
          return SA_ERR_SYS;
      if ((rv = sa_s2a(raddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK)
          return rv;
      if (bufdone != NULL)
          *bufdone = n;
      return SA_OK;
  }
  
  sa_rc_t sa_readline(sa_t *sa, char *cpBuf, size_t nBufReq, size_t *nBufRes)
  {
      char c;
      size_t n;
      size_t res;
  
      if (sa == NULL)
          return SA_ERR_ARG;
      res = 0;
      while (res < (nBufReq-1)) {
          sa_read(sa, &c, 1, &n);
          if (n <= 0)
              break;
          cpBuf[res++] = c;
          if (c == '\n')
              break;
      }
      cpBuf[res] = '\0';
      if (nBufRes != NULL)
          *nBufRes = res;
      return SA_OK;
  }
  
  static int sa_write_raw(sa_t *sa, const char *cpBuf, int nBufLen)
  {
      int rv;
      fd_set fds;
  
      if (sa->bTimeout) {
          FD_ZERO(&fds);
          FD_SET(sa->sSocket, &fds);
          do {
              rv = select(sa->sSocket+1, NULL, &fds, NULL, &sa->tvTimeout);
          } while (rv == -1 && errno == EINTR);
          if (rv == 0) {
              errno = ETIMEDOUT;
              return -1;
          }
      }
      do {
          rv = write(sa->sSocket, cpBuf, nBufLen);
      } while (rv == -1 && errno == EINTR);
      return rv;
  }
  
  sa_rc_t sa_write(sa_t *sa, const char *cpBuf, size_t nBufReq, size_t *nBufRes)
  {
      size_t n;
      size_t res;
  
      if (sa == NULL)
          return SA_ERR_ARG;
  
      if (nBufReq > (sa->nWriteSize - sa->nWriteLen)) {
          /* not enough space in buffer, so flush buffer */
          sa_flush(sa);
      }
      res = 0;
      if (nBufReq >= sa->nWriteSize) {
          /* buffer too small at all, so write immediately */
          while (nBufReq > 0) {
              n = sa_write_raw(sa, cpBuf, nBufReq);
              if (n <= 0)
                  break;
              nBufReq  -= n;
              cpBuf    += n;
              res      += n;
          }
      }
      else {
          /* (again) enough sprace in buffer, so store data */
          memmove(sa->cpWriteBuf+sa->nWriteLen, cpBuf, nBufReq);
          sa->nWriteLen += nBufReq;
          res = nBufReq;
      }
      if (nBufRes != NULL)
          *nBufRes = res;
      return SA_OK;
  }
  
  sa_rc_t sa_writeto(sa_t *sa, const char *buf, size_t buflen, size_t *bufdone, sa_addr_t *raddr)
  {
      size_t n;
      fd_set fds;
  
      if (sa == NULL || buf == NULL || buflen == 0 || raddr == NULL)
          return SA_ERR_ARG;
      if (sa->bTimeout) {
          FD_ZERO(&fds);
          FD_SET(sa->sSocket, &fds);
          do {
              n = select(sa->sSocket+1, NULL, &fds, NULL, &sa->tvTimeout);
          } while (n == -1 && errno == EINTR);
          if (n == 0) 
              errno = ETIMEDOUT;
          if (n <= 0)
              return SA_ERR_SYS;
      }
      if ((n = sendto(sa->sSocket, buf, buflen, 0, raddr->saBuf, raddr->slBuf)) == -1)
          return SA_ERR_SYS;
      if (bufdone != NULL)
          *bufdone = n;
      return SA_OK;
  }
  
  sa_rc_t sa_printf(sa_t *sa, const char *cpFmt, ...)
  {
      va_list ap;
      size_t n;
      char caBuf[1024];
  
      if (sa == NULL)
          return SA_ERR_ARG;
      va_start(ap, cpFmt);
      n = sa_vsnprintf(caBuf, sizeof(caBuf), cpFmt, ap);
      sa_write(sa, caBuf, n, &n);
      va_end(ap);
      return SA_OK;
  }
  
  sa_rc_t sa_flush(sa_t *sa)
  {
      size_t n;
  
      if (sa == NULL)
          return SA_ERR_ARG;
      while (sa->nWriteLen > 0) {
          n = sa_write_raw(sa, sa->cpWriteBuf, sa->nWriteLen);
          if (n <= 0)
              break;
          memmove(sa->cpWriteBuf, sa->cpWriteBuf+n, sa->nWriteLen-n);
          sa->nWriteLen -= n;
      }
      sa->nWriteLen = 0;
      return SA_OK;
  }
  
  sa_rc_t sa_shutdown(sa_t *sa, char *flags)
  {
      int how;
  
      if (sa == NULL || flags == NULL)
          return SA_ERR_ARG;
      how = 0;
      if (strcmp(flags, "r") == 0)
          how = SHUT_RD;
      else if (strcmp(flags, "w") == 0)
          how = SHUT_WR;
      else if (strcmp(flags, "rw") == 0)
          how = SHUT_RDWR;
      if (shutdown(sa->sSocket, how) == -1)
          return SA_ERR_SYS;
      return SA_OK;
  }
  
  Index: ossp-pkg/sa/sa.h
  ============================================================
  $ cvs update -p -r1.1.1.1 sa.h
  /*
  **  SA - OSSP Socket Abstraction Library
  **  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP SA, a socket abstraction library which
  **  can be found at http://www.ossp.org/pkg/sa/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  sa.h: socket abstraction API
  */
  
  #ifndef __SA_H__
  #define __SA_H__
  
  /* system definitions of "size_t", "socklen_t", "struct sockaddr" */
  #include <string.h>
  #include <sys/types.h>
  #include <sys/socket.h>
  
  /* socket address abstraction object type */
  struct sa_addr_st;
  typedef struct sa_addr_st sa_addr_t;
  
  /* socket abstraction object type */
  struct sa_st;
  typedef struct sa_st sa_t;
  
  /* return codes */
  typedef enum {
      SA_OK,
      SA_ERR_ARG,
      SA_ERR_USE,
      SA_ERR_MEM,
      SA_ERR_SYS,
      SA_ERR_INT
  } sa_rc_t;
  
  /* address operations */
  sa_rc_t sa_u2a      (sa_addr_t **saa, const char *uri, ...);
  sa_rc_t sa_s2a      (sa_addr_t **saa, const struct sockaddr *sabuf, socklen_t salen);
  sa_rc_t sa_a2u      (const sa_addr_t *saa, char **uri);
  sa_rc_t sa_a2s      (const sa_addr_t *saa, struct sockaddr **sabuf, socklen_t *salen);
  
  /* object operations */
  sa_rc_t sa_create   (sa_t **sa);
  sa_rc_t sa_destroy  (sa_t *sa);
  
  /* parameter operations */
  sa_rc_t sa_timeout  (sa_t *sa, long sec, long usec);
  sa_rc_t sa_buffers  (sa_t *sa, size_t rsize, size_t wsize);
  
  /* connection operations */
  sa_rc_t sa_bind     (sa_t *sa, sa_addr_t *laddr);
  sa_rc_t sa_connect  (sa_t *sa, sa_addr_t *raddr);
  sa_rc_t sa_listen   (sa_t *sa, int backlog);
  sa_rc_t sa_accept   (sa_t *sa, sa_addr_t **caddr, sa_t **csa);
  sa_rc_t sa_getremote(sa_t *sa, sa_addr_t **raddr);
  sa_rc_t sa_getlocal (sa_t *sa, sa_addr_t **laddr);
  sa_rc_t sa_getfd    (sa_t *sa, int *fd);
  sa_rc_t sa_shutdown (sa_t *sa, char *flags);
  
  /* input/output operations */
  sa_rc_t sa_read     (sa_t *sa, char *buf, size_t buflen, size_t *bufdone);
  sa_rc_t sa_readfrom (sa_t *sa, char *buf, size_t buflen, size_t *bufdone, sa_addr_t **raddr);
  sa_rc_t sa_readline (sa_t *sa, char *buf, size_t buflen, size_t *bufdone);
  sa_rc_t sa_write    (sa_t *sa, const char *buf, size_t buflen, size_t *bufdone);
  sa_rc_t sa_writeto  (sa_t *sa, const char *buf, size_t buflen, size_t *bufdone, sa_addr_t *raddr);
  sa_rc_t sa_printf   (sa_t *sa, const char *fmt, ...);
  sa_rc_t sa_flush    (sa_t *sa);
  
  #endif /* __SA_H__ */
  
  Index: ossp-pkg/sa/sa.pod
  ============================================================
  $ cvs update -p -r1.1.1.1 sa.pod
  ##
  ##  SA - OSSP Socket Abstraction Library
  ##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  ##
  ##  This file is part of OSSP SA, a socket abstraction library which
  ##  can be found at http://www.ossp.org/pkg/sa/.
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  sa.pod: socket abstraction library manual page
  ##
  
  =pod
  
  =head1 NAME
  
  B<OSSP sa> - Socket Abstraction Library
  
  =head1 SYNOPSIS
  
  =over 4
  
  =item B<Abstract Data Types>:
  
  sa_addr_t,
  sa_t.
  
  =item B<Address Operations>:
  
  sa_u2a,
  sa_s2a,
  sa_a2u,
  sa_a2s.
              
  =item B<Object Operations>:
  
  sa_create,
  sa_destroy. 
              
  =item B<Parameter Operations>:
  
  sa_timeout,
  sa_buffers. 
              
  =item B<Connection Operations>:
  
  sa_bind,
  sa_connect,
  sa_listen,
  sa_accept,  
  sa_getremote,
  sa_getlocal,
  sa_shutdown.
  
  =item B<Input/Output Operations>:
              
  sa_read,
  sa_readfrom,
  sa_readline,
  sa_write,
  sa_writeto,
  sa_printf,
  sa_flush.   
  
  =back
  
  =head1 DESCRIPTION
  
  B<OSSP sa> is a thin abstraction library for the BSD socket interface
  for use in conjunction with TCP and UDP protocols. It provides the
  following key features:
  
  =over 4
  
  =item B<Address Abstraction>
  
  Most of the uglyness in the BSD socket API is the necessarity to have to
  deal with the various address structures (C<struct sockaddr_xx>) which
  exist because of both the different network protocols and addressing
  schemes. B<OSSP sa> fully hides this by providing an abstract and
  opaque address type (C<sa_addr_t>) together with four utility functions
  which allow one to convert from the old C<struct sockaddr> and an URL
  specification (C<{tcp,udp}://<host>[:<port>]>) to the C<sa_addr_t> and
  vice versa.
  
  =item B<I/O Timeouts>
  
  Each function of B<OSSP sa> is aware of a central timeout (set by
  sa_timeout(3)), i.e., all I/O operations return C<SA_ERR_SYS> and
  C<errno> set to C<ETIMEDOUT> if this timeout expired before the
  operation was able to succeed. This allows one to easily program
  less-blocking network services.
  
  =item B<Buffered I/O>
  
  If B<OSSP sa> is used for TCP-based stream I/O, internally all I/O
  operations can be performed through input and output buffers (set
  by sa_buffers(3)) for achieving higher I/O performance by doing I/O
  operations on larger messages.
  
  =item B<Convinience I/O Functions>
  
  If B<OSSP sa> is used for TCP-based stream I/O, for convinience reasons
  line reading (sa_readline(3)) and output formatting (sa_printf(3))
  functions are provided, modelled after STDIO's fgets(3) and fprintf(3).
  
  =back
  
  =head1 DATA TYPES
  
  =over 4
  
  =item B<sa_addr_t>
  
  =item B<sa_t>
  
  =back
  
  =head1 FUNCTIONS
  
  =head2 Address Operations
  
  =over 4
  
  =item sa_rc_t B<sa_u2a>(sa_addr_t **I<saa>, const char *I<uri>, ...);
  
  =item sa_rc_t B<sa_s2a>(sa_addr_t **I<saa>, const struct sockaddr *I<sabuf>, socklen_t I<salen>);
  
  =item sa_rc_t B<sa_a2u>(const sa_addr_t *I<saa>, char **I<uri>);
  
  =item sa_rc_t B<sa_a2s>(const sa_addr_t *I<saa>, struct sockaddr **I<sabuf>, socklen_t *I<salen>);
  
  =back
              
  =head2 Object Operations
  
  =over 4
  
  =item sa_rc_t B<sa_create>(sa_t **I<sa>);
  
  =item sa_rc_t B<sa_destroy>(sa_t *I<sa>);
  
  =back
              
  =head2 Parameter Operations
  
  =over 4
  
  =item sa_rc_t B<sa_timeout>(sa_t *I<sa>, long I<sec>, long I<usec>);
  
  =item sa_rc_t B<sa_buffers>(sa_t *I<sa>, size_t I<rsize>, size_t I<wsize>);
  
  =back
              
  =head2 Connection Operations
  
  =over 4
  
  =item sa_rc_t B<sa_bind>(sa_t *I<sa>, sa_addr_t *I<laddr>);
  
  =item sa_rc_t B<sa_connect>(sa_t *I<sa>, sa_addr_t *I<raddr>);
  
  =item sa_rc_t B<sa_listen>(sa_t *I<sa>, int I<backlog>);
  
  =item sa_rc_t B<sa_accept>(sa_t *I<sa>, sa_addr_t **I<caddr>, sa_t **I<csa>);
  
  =item sa_rc_t B<sa_getremote>(sa_t *I<sa>, sa_addr_t **I<raddr>);
  
  =item sa_rc_t B<sa_getlocal>(sa_t *I<sa>, sa_addr_t **I<laddr>);
  
  =item sa_rc_t B<sa_shutdown>(sa_t *I<sa>, char *I<flags>);
  
  =back
  
  =head2 Input/Output Operations
  
  =over 4
  
  =item sa_rc_t B<sa_read>(sa_t *I<sa>, char *I<buf>, size_t I<buflen>, size_t *I<bufdone>);
  
  =item sa_rc_t B<sa_readfrom>(sa_t *I<sa>, char *I<buf>, size_t I<buflen>, size_t *I<bufdone>, sa_addr_t **I<raddr>);
  
  =item sa_rc_t B<sa_readline>(sa_t *I<sa>, char *I<buf>, size_t I<buflen>, size_t *I<bufdone>);
  
  =item sa_rc_t B<sa_write>(sa_t *I<sa>, const char *I<buf>, size_t I<buflen>, size_t *I<bufdone>);
  
  =item sa_rc_t B<sa_writeto>(sa_t *I<sa>, const char *I<buf>, size_t I<buflen>, size_t *I<bufdone>, sa_addr_t *I<raddr>);
  
  =item sa_rc_t B<sa_printf>(sa_t *I<sa>, const char *I<fmt>, ...);
  
  =item sa_rc_t B<sa_flush>(sa_t *I<sa>);
  
  =back
  
  =head1 AUTHORS
  
   Ralf S. Engelschall
   rse@engelschall.com
   www.engelschall.com
  
  =cut
  
  Index: ossp-pkg/sa/test.c
  ============================================================
  $ cvs update -p -r1.1.1.1 test.c
  
  #include <stdio.h>
  #include <stdarg.h>
  #include <time.h>
  #include <syslog.h>
  #include <sys/utsname.h>
  
  #include "sa.h"
  
  /* see RFC3164 */
  
  static void die(char *fmt, ...)
  {
      va_list ap;
  
      va_start(ap, fmt);
      fprintf(stderr, "test:ERROR: ");
      vfprintf(stderr, fmt, ap);
      fprintf(stderr, "\n");
      va_end(ap);
      exit(1);
  }
  
  int main(int argc, char *argv[]) 
  {
      sa_addr_t *ra;
      sa_addr_t *la;
      sa_t *sa;
      char caBuf[1024];
      int nBuf;
      char caTime[15+1];
      time_t now;
      struct tm *tm;
      char caHost;
      struct utsname uts;
      char *cp;
      char caTag[32+1];
      char *cpHost;
      int n;
  
      if (sa_u2a(&ra, "udp://%s:514", argv[1]) != SA_OK)
          die("sa_u2a ra");
      if (sa_u2a(&la, "udp://0.0.0.0:0") != SA_OK)
          die("sa_u2a la");
      if (sa_create(&sa) != SA_OK)
          die("sa_create");
      if (sa_bind(sa, la) != SA_OK)
          die("sa_bind");
  
      /* RFC3164: The BSD syslog Protocol; C. Lonvick; August 2001. */
  
      now = time(NULL);
      tm = localtime(&now);
      strftime(caTime, sizeof(caTime), "%b %e %H:%M:%S", tm);
  
      if (uname(&uts) == 0) {
          cpHost = strdup(uts.nodename);
          if ((cp = strchr(cpHost, '.')) != NULL)
              *cp = '\0';
      }
      else
          cpHost = strdup("0.0.0.0"); /* FIXME */
  
      strcpy(caTag, "progname[12]: ");
      if (strlen(caTag) > 32)
          caTag[32] = '\0';
  
      sprintf(caBuf, "<%d>%s %s %s%s", LOG_MAIL|LOG_EMERG, caTime, cpHost, caTag, argv[2]);
      fprintf(stderr, "%s\n", caBuf);
      nBuf = strlen(caBuf);
      if (sa_writeto(sa, caBuf, nBuf, &n, ra) != SA_OK)
          die("sa_writeto");
      if (sa_destroy(sa) != SA_OK)
          die("sa_destroy");
      free(ra);
      free(la);
      return 0;
  }
  

From ossp-cvs-owner@ossp.org  Tue Oct  2 15:27:48 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f92DRlv07974; Tue, 2 Oct 2001 15:27:47 +0200 (CEST)
Date: Tue, 2 Oct 2001 15:27:47 +0200 (CEST)
Message-Id: <200110021327.f92DRlv07974@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa README TODO aclocal.m4 autogen.sh configure.ac...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   02-Oct-2001 15:27:47
  Branch: VENDOR                           Handle: 2001100214274401

  Added files:              (Branch: VENDOR)
    ossp-pkg/sa             README TODO aclocal.m4 autogen.sh configure.ac
                            sa.ac sa.c sa.h sa.pod test.c

  Log:
    Import first cut of OSSP SA
    
    [Release Tag: SA_0_0_0]

  Summary:
    Revision    Changes     Path
    1.1.1.1     BLOB        ossp-pkg/sa/README
    1.1.1.1     +17 -0      ossp-pkg/sa/TODO
    1.1.1.1     +88 -0      ossp-pkg/sa/aclocal.m4
    1.1.1.1     +47 -0      ossp-pkg/sa/autogen.sh
    1.1.1.1     +26 -0      ossp-pkg/sa/configure.ac
    1.1.1.1     +44 -0      ossp-pkg/sa/sa.ac
    1.1.1.1     +957 -0     ossp-pkg/sa/sa.c
    1.1.1.1     +90 -0      ossp-pkg/sa/sa.h
    1.1.1.1     +219 -0     ossp-pkg/sa/sa.pod
    1.1.1.1     +79 -0      ossp-pkg/sa/test.c
  ____________________________________________________________________________

  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/sa/README?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/sa/TODO?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/sa/aclocal.m4?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/sa/autogen.sh?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/sa/configure.ac?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/sa/sa.ac?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/sa/sa.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/sa/sa.h?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/sa/sa.pod?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/sa/test.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1

From ossp-cvs-owner@ossp.org  Tue Oct  2 15:28:22 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f92DSL408173; Tue, 2 Oct 2001 15:28:21 +0200 (CEST)
Date: Tue, 2 Oct 2001 15:28:21 +0200 (CEST)
Message-Id: <200110021328.f92DSL408173@ossp.org>
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   OSSP Project Master
  Root:   /e/ossp/cvs                      Email:  ossp@ossp.org
  Module: CVSROOT                          Date:   02-Oct-2001 15:28:21
  Branch: HEAD                             Handle: 2001100214282000

  Modified files:
    CVSROOT                 modules

  Log:
    add SA

  Summary:
    Revision    Changes     Path
    1.29        +2  -1      CVSROOT/modules
  ____________________________________________________________________________

  Index: CVSROOT/modules
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 modules
  --- CVSROOT/modules	2001/09/05 08:20:04	1.28
  +++ CVSROOT/modules	2001/10/02 13:28:20	1.29
  @@ -75,5 +75,6 @@
   l2              ossp-pkg/l2
   srpc            ossp-pkg/srpc
   xds             ossp-pkg/srpc/libxds
  -lmtp2nntp       ossp-pkg/lmtp2nntp &str &l2
  +sa              ossp-pkg/sa
  +lmtp2nntp       ossp-pkg/lmtp2nntp &str &l2 &sa
   

From ossp-cvs-owner@ossp.org  Tue Oct  2 15:36:10 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f92Da9K09248; Tue, 2 Oct 2001 15:36:09 +0200 (CEST)
Date: Tue, 2 Oct 2001 15:36:09 +0200 (CEST)
Message-Id: <200110021336.f92Da9K09248@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa .cvsignore
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   02-Oct-2001 15:36:09
  Branch: HEAD                             Handle: 2001100214360800

  Added files:
    ossp-pkg/sa             .cvsignore

  Log:
    ignore files

  Summary:
    Revision    Changes     Path
    1.1         +4  -0      ossp-pkg/sa/.cvsignore
  ____________________________________________________________________________

  Index: ossp-pkg/sa/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  configure
  config.h.in
  Makefile
  config.h

From ossp-cvs-owner@ossp.org  Tue Oct  2 15:36:35 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f92DaYr09328; Tue, 2 Oct 2001 15:36:34 +0200 (CEST)
Date: Tue, 2 Oct 2001 15:36:34 +0200 (CEST)
Message-Id: <200110021336.f92DaYr09328@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp Makefile.in autogen.sh configure.ac sa....
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   02-Oct-2001 15:36:34
  Branch: HEAD                             Handle: 197001010100001002026193

  Modified files:
    ossp-pkg/lmtp2nntp      Makefile.in autogen.sh configure.ac
  Removed files:
    ossp-pkg/lmtp2nntp      sa.c sa.h

  Log:
    use the brand-new OSSP SA library (first cut)

  Summary:
    Revision    Changes     Path
    1.26        +5  -6      ossp-pkg/lmtp2nntp/Makefile.in
    1.6         +3  -0      ossp-pkg/lmtp2nntp/autogen.sh
    1.13        +12 -1      ossp-pkg/lmtp2nntp/configure.ac
    NONE        +0  -221    ossp-pkg/lmtp2nntp/sa.c
    NONE        +0  -51     ossp-pkg/lmtp2nntp/sa.h
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	2001/09/13 18:51:40	1.25
  +++ ossp-pkg/lmtp2nntp/Makefile.in	2001/10/02 13:36:33	1.26
  @@ -43,11 +43,11 @@
   POD2MAN     = pod2man
   
   PROG = lmtp2nntp
  -HDRS = lmtp2nntp.h lmtp.h nntp.h sa.h argz.h shpat_match.h msg.h 
  -SRCS = lmtp2nntp.c lmtp.c nntp.c sa.c argz.c shpat_match.c msg.c version.c
  -OBJS = lmtp2nntp.o lmtp.o nntp.o sa.o argz.o shpat_match.o msg.o version.o
  +HDRS = lmtp2nntp.h lmtp.h nntp.h argz.h shpat_match.h msg.h 
  +SRCS = lmtp2nntp.c lmtp.c nntp.c argz.c shpat_match.c msg.c version.c
  +OBJS = lmtp2nntp.o lmtp.o nntp.o argz.o shpat_match.o msg.o version.o
   
  -SUBDIRS = @SUBDIR_STR@ @SUBDIR_L2@ 
  +SUBDIRS = @SUBDIR_STR@ @SUBDIR_L2@ @SUBDIR_SA@
   
   all: _SUBDIRS_all lmtp2nntp lmtp2nntp.8
   
  @@ -137,10 +137,9 @@
   $(OBJS): Makefile
   
   #   AUTOMATICALLY GENERATED DEPENDENCY LIST - DO NOT EDIT
  -lmtp2nntp.o: lmtp2nntp.c argz.h shpat_match.h lmtp2nntp.h config.h lmtp.h nntp.h msg.h sa.h version.c
  +lmtp2nntp.o: lmtp2nntp.c argz.h shpat_match.h lmtp2nntp.h config.h lmtp.h nntp.h msg.h version.c
   lmtp.o: lmtp.c lmtp.h config.h
   nntp.o: nntp.c nntp.h msg.h lmtp2nntp.h config.h
  -sa.o: sa.c config.h sa.h
   argz.o: argz.c argz.h config.h
   shpat_match.o: shpat_match.c config.h shpat_match.h
   msg.o: msg.c msg.h lmtp2nntp.h config.h argz.h
  Index: ossp-pkg/lmtp2nntp/autogen.sh
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 autogen.sh
  --- ossp-pkg/lmtp2nntp/autogen.sh	2001/09/05 09:10:28	1.5
  +++ ossp-pkg/lmtp2nntp/autogen.sh	2001/10/02 13:36:33	1.6
  @@ -70,4 +70,7 @@
   echo "===> l2 (autogen.sh)"
   (cd l2  && ./autogen.sh)
   echo "<=== l2"
  +echo "===> sa (autogen.sh)"
  +(cd sa  && ./autogen.sh)
  +echo "<=== sa"
   
  Index: ossp-pkg/lmtp2nntp/configure.ac
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 configure.ac
  --- ossp-pkg/lmtp2nntp/configure.ac	2001/09/13 14:24:49	1.12
  +++ ossp-pkg/lmtp2nntp/configure.ac	2001/10/02 13:36:33	1.13
  @@ -68,6 +68,17 @@
                    LIBS_EXTRA="$LIBS_EXTRA -ll2"])
   AC_SUBST(SUBDIR_L2)
   
  +dnl #   check for SA library
  +AC_CHECK_EXTLIB([OSSP SA], 
  +                sa, sa_create, sa.h, 
  +                [SUBDIR_SA=""], 
  +                [SUBDIR_SA="sa"
  +                 CPPFLAGS="$CPPFLAGS -Isa"
  +                 CFLAGS="$CFLAGS -Isa"
  +                 LDFLAGS="$LDFLAGS -Lsa"
  +                 LIBS_EXTRA="$LIBS_EXTRA -lsa"])
  +AC_SUBST(SUBDIR_SA)
  +
   dnl #   check for external Dmalloc library
   AC_CHECK_EXTLIB([Dmalloc], dmalloc, dmalloc_debug, dmalloc.h, AC_DEFINE(DMALLOC))
   
  @@ -78,7 +89,7 @@
   export enable_shared
   enable_headline=no
   export enable_headline
  -AC_CONFIG_SUBDIRS([$SUBDIR_STR $SUBDIR_L2])
  +AC_CONFIG_SUBDIRS([$SUBDIR_STR $SUBDIR_L2 $SUBDIR_SA])
   
   dnl #   standard output generation
   AC_CONFIG_HEADERS(config.h)
    

From ossp-cvs-owner@ossp.org  Tue Oct  2 16:11:53 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f92EBqO13581; Tue, 2 Oct 2001 16:11:52 +0200 (CEST)
Date: Tue, 2 Oct 2001 16:11:52 +0200 (CEST)
Message-Id: <200110021411.f92EBqO13581@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_p.h l2_ut_sa.c l2_ut_sa.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   02-Oct-2001 16:11:52
  Branch: HEAD                             Handle: 2001100215115100

  Modified files:
    ossp-pkg/l2             l2_p.h l2_ut_sa.c l2_ut_sa.h

  Log:
    - upgrade to latest SA
    - use SA_PREFIX feature for library embedding without conflicts

  Summary:
    Revision    Changes     Path
    1.23        +1  -0      ossp-pkg/l2/l2_p.h
    1.13        +57 -34     ossp-pkg/l2/l2_ut_sa.c
    1.8         +46 -2      ossp-pkg/l2/l2_ut_sa.h
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_p.h
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 l2_p.h
  --- ossp-pkg/l2/l2_p.h	2001/09/25 15:22:21	1.22
  +++ ossp-pkg/l2/l2_p.h	2001/10/02 14:11:51	1.23
  @@ -41,6 +41,7 @@
   #include "l2.h"
   #include "l2_config.h"
   #include "l2_ut_pcre.h"
  +#define SA_PREFIX l2_ut_
   #include "l2_ut_sa.h"
   
   #if defined(HAVE_DMALLOC_H) && defined(WITH_DMALLOC)
  Index: ossp-pkg/l2/l2_ut_sa.c
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 l2_ut_sa.c
  --- ossp-pkg/l2/l2_ut_sa.c	2001/09/14 19:06:40	1.12
  +++ ossp-pkg/l2/l2_ut_sa.c	2001/10/02 14:11:51	1.13
  @@ -27,7 +27,10 @@
   **  sa.c: socket abstraction library
   */
   
  -/* system headers */
  +/* include optional Autoconf header */
  +#include "l2_config.h"
  +
  +/* include system API headers */
   #include <stdio.h>
   #include <stdlib.h>
   #include <stdarg.h>
  @@ -45,17 +48,19 @@
   #include <sys/socket.h>
   #include <arpa/inet.h>
   
  -/* own headers */
  -#include "l2_config.h"
  +/* include own API header */
  +#define SA_PREFIX l2_ut_
   #include "l2_ut_sa.h"
   
  +/* socket address abstraction object */
   struct sa_addr_st {
  -    struct sockaddr *saa_buf;
  -    socklen_t        saa_len;
  -    int              saa_family;
  -    int              saa_proto;
  +    struct sockaddr *saBuf;
  +    socklen_t        slBuf;
  +    int              nFamily;
  +    int              nProto;
   };
   
  +/* socket abstraction object */
   struct sa_st {
       int              sSocket;
       int              bTimeout;
  @@ -68,10 +73,12 @@
       char            *cpWriteBuf;
   };
   
  +/* make sure AF_LOCAL define exists */
   #if !defined(AF_LOCAL) && defined(AF_UNIX)
   #define AF_LOCAL AF_UNIX
   #endif
   
  +/* make sure inet_pton() exists */
   #if defined(HAVE_INET_PTON)
   #define sa_inet_pton inet_pton
   #elif defined(HAVE_INET_ATON)
  @@ -93,6 +100,7 @@
   #error "neither inet_pton nor inet_aton available"
   #endif
   
  +/* make sure inet_ntop() exists */
   #if defined(HAVE_INET_NTOP)
   #define sa_inet_ntop inet_ntop
   #elif defined(HAVE_INET_NTOA)
  @@ -120,6 +128,7 @@
   #error "neither inet_ntop nor inet_ntoa available"
   #endif
   
  +/* make sure vsnprintf() exists */
   #if defined(HAVE_VSNPRINTF)
   #define sa_vsnprintf vsnprintf
   #elif defined(HAVE_VSPRINTF)
  @@ -137,6 +146,7 @@
   #error "neither vsnprintf nor vsprintf available"
   #endif
   
  +/* make sure snprintf() exists */
   #if defined(HAVE_SNPRINTF)
   #define sa_snprintf snprintf
   #else
  @@ -175,10 +185,11 @@
       char *cp;
       int sf;
   
  +    /* argument sanity check */
       if (saa == NULL || uri == NULL)
           return SA_ERR_ARG;
   
  -    /* create or just take over URI */
  +    /* on-the-fly create or just take over URI */
       va_start(ap, uri);
       sa_vsnprintf(uribuf, sizeof(uribuf), uri, ap);
       va_end(ap);
  @@ -271,14 +282,14 @@
       /* create result address structure */
       if ((*saa = (sa_addr_t *)malloc(sizeof(sa_addr_t))) == NULL)
           return SA_ERR_MEM;
  -    if (((*saa)->saa_buf = (struct sockaddr *)malloc(sl)) == NULL) {
  +    if (((*saa)->saBuf = (struct sockaddr *)malloc(sl)) == NULL) {
           free(*saa);
           return SA_ERR_MEM;
       }
  -    memcpy((*saa)->saa_buf, sa, sl);
  -    (*saa)->saa_len = sl;
  -    (*saa)->saa_family = sf;
  -    (*saa)->saa_proto = nProto;
  +    memcpy((*saa)->saBuf, sa, sl);
  +    (*saa)->slBuf = sl;
  +    (*saa)->nFamily = sf;
  +    (*saa)->nProto = nProto;
       return SA_OK;
   }
   
  @@ -297,12 +308,12 @@
       /* create result address structure */
       if ((*saa = (sa_addr_t *)malloc(sizeof(sa_addr_t))) == NULL)
           return SA_ERR_MEM;
  -    if (((*saa)->saa_buf = (struct sockaddr *)malloc(salen)) == NULL) {
  +    if (((*saa)->saBuf = (struct sockaddr *)malloc(salen)) == NULL) {
           free(*saa);
           return SA_ERR_MEM;
       }
  -    memcpy((*saa)->saa_buf, sabuf, salen);
  -    (*saa)->saa_len = salen;
  +    memcpy((*saa)->saBuf, sabuf, salen);
  +    (*saa)->slBuf = salen;
   
       /* fill in family */
       sf = 0;
  @@ -318,13 +329,13 @@
               sf = AF_INET6;
       }
   #endif
  -    (*saa)->saa_family = sf;
  +    (*saa)->nFamily = sf;
   
       /* fill in protocol */
       if ((pe = getprotobyname("tcp")) != NULL)
  -        (*saa)->saa_proto = pe->p_proto;
  +        (*saa)->nProto = pe->p_proto;
       else
  -        (*saa)->saa_proto = 0;
  +        (*saa)->nProto = 0;
       return SA_OK;
   }
   
  @@ -341,16 +352,16 @@
   
       if (saa == NULL || uri == NULL)
           return SA_ERR_ARG;
  -    if ((pe = getprotobynumber(saa->saa_proto)) == NULL)
  +    if ((pe = getprotobynumber(saa->nProto)) == NULL)
           return SA_ERR_SYS;
  -    if (saa->saa_family == AF_INET) {
  -        sa4 = (struct sockaddr_in *)((void *)saa->saa_buf);
  +    if (saa->nFamily == AF_INET) {
  +        sa4 = (struct sockaddr_in *)((void *)saa->saBuf);
           inet_ntop(AF_INET, &sa4->sin_addr.s_addr, caHost, sizeof(caHost));
           nPort = ntohs(sa4->sin_port);
       }
   #ifdef AF_INET6
  -    else if (saa->saa_family == AF_INET6) {
  -        sa6 = (struct sockaddr_in6 *)((void *)saa->saa_buf);
  +    else if (saa->nFamily == AF_INET6) {
  +        sa6 = (struct sockaddr_in6 *)((void *)saa->saBuf);
           inet_ntop(AF_INET6, &sa6->sin6_addr.s6_addr, caHost, sizeof(caHost));
           nPort = ntohs(sa6->sin6_port);
       }
  @@ -367,10 +378,10 @@
       if (saa == NULL || sabuf == NULL || salen == 0)
           return SA_ERR_ARG;
   
  -    if ((*sabuf = (struct sockaddr *)malloc(saa->saa_len)) == NULL)
  +    if ((*sabuf = (struct sockaddr *)malloc(saa->slBuf)) == NULL)
           return SA_ERR_MEM;
  -    memmove(*sabuf, saa->saa_buf, saa->saa_len);
  -    *salen = saa->saa_len;
  +    memmove(*sabuf, saa->saBuf, saa->slBuf);
  +    *salen = saa->slBuf;
       return SA_OK;
   }
   
  @@ -397,7 +408,7 @@
   {
       if (sa == NULL)
           return SA_ERR_ARG;
  -    if (sa->sSocket == -1) {
  +    if (sa->sSocket != -1) {
           close(sa->sSocket);
           sa->sSocket = -1;
       }
  @@ -485,9 +496,9 @@
       if (sa == NULL || laddr == NULL)
           return SA_ERR_ARG;
       if (sa->sSocket == -1)
  -        if ((rv = sa_socket_init(sa, laddr->saa_family, laddr->saa_proto)) != SA_OK)
  +        if ((rv = sa_socket_init(sa, laddr->nFamily, laddr->nProto)) != SA_OK)
               return rv;
  -    if (bind(sa->sSocket, laddr->saa_buf, laddr->saa_len) == -1)
  +    if (bind(sa->sSocket, laddr->saBuf, laddr->slBuf) == -1)
           return SA_ERR_SYS;
       return SA_OK;
   }
  @@ -503,11 +514,11 @@
           return SA_ERR_ARG;
   
       if (sa->sSocket == -1)
  -        if ((rv = sa_socket_init(sa, raddr->saa_family, raddr->saa_proto)) != SA_OK)
  +        if ((rv = sa_socket_init(sa, raddr->nFamily, raddr->nProto)) != SA_OK)
               return rv;
   
       if (!sa->bTimeout)
  -        return connect(sa->sSocket, raddr->saa_buf, raddr->saa_len);
  +        return connect(sa->sSocket, raddr->saBuf, raddr->slBuf);
   
       error = 0;
       rv = SA_OK;
  @@ -519,7 +530,7 @@
       fcntl(sa->sSocket, F_SETFL, flags|O_NONBLOCK);
   
       /* perform the connect */
  -    if ((n = connect(sa->sSocket, raddr->saa_buf, raddr->saa_len)) < 0) {
  +    if ((n = connect(sa->sSocket, raddr->saBuf, raddr->slBuf)) < 0) {
           if (errno != EINPROGRESS) {
               error = errno;
               goto done;
  @@ -634,6 +645,8 @@
       } sa_buf;
       socklen_t sa_len;
   
  +    if (sa == NULL)
  +        return SA_ERR_ARG;
       sa_len = sizeof(sa_buf);
       if (getpeername(sa->sSocket, (struct sockaddr *)&sa_buf, &sa_len) < 0)
           return SA_ERR_SYS;
  @@ -653,6 +666,8 @@
       } sa_buf;
       socklen_t sa_len;
   
  +    if (sa == NULL)
  +        return SA_ERR_ARG;
       sa_len = sizeof(sa_buf);
       if (getsockname(sa->sSocket, (struct sockaddr *)&sa_buf, &sa_len) < 0)
           return SA_ERR_SYS;
  @@ -661,6 +676,14 @@
       return SA_OK;
   }
   
  +sa_rc_t sa_getfd(sa_t *sa, int *fd)
  +{
  +    if (sa == NULL || fd == NULL)
  +        return SA_ERR_ARG;
  +    *fd = sa->sSocket;
  +    return SA_OK;
  +}
  +
   static int sa_read_raw(sa_t *sa, char *cpBuf, int nBufLen)
   {
       int rv;
  @@ -874,7 +897,7 @@
           if (n <= 0)
               return SA_ERR_SYS;
       }
  -    if ((n = sendto(sa->sSocket, buf, buflen, 0, raddr->saa_buf, raddr->saa_len)) == -1)
  +    if ((n = sendto(sa->sSocket, buf, buflen, 0, raddr->saBuf, raddr->slBuf)) == -1)
           return SA_ERR_SYS;
       if (bufdone != NULL)
           *bufdone = n;
  Index: ossp-pkg/l2/l2_ut_sa.h
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 l2_ut_sa.h
  --- ossp-pkg/l2/l2_ut_sa.h	2001/09/14 19:06:40	1.7
  +++ ossp-pkg/l2/l2_ut_sa.h	2001/10/02 14:11:51	1.8
  @@ -30,16 +30,59 @@
   #ifndef __SA_H__
   #define __SA_H__
   
  +/* system definitions of "size_t", "socklen_t", "struct sockaddr" */
   #include <string.h>
   #include <sys/types.h>
   #include <sys/socket.h>
   
  -struct sa_st;
  -typedef struct sa_st sa_t;
  +/* embedding support */
  +#ifdef SA_PREFIX
  +#if defined(__STDC__) || defined(__cplusplus)
  +#define __SA_CONCAT(x,y) x ## y
  +#define SA_CONCAT(x,y) __SA_CONCAT(x,y)
  +#else
  +#define __SA_CONCAT(x) x
  +#define SA_CONCAT(x,y) __SA_CONCAT(x)y
  +#endif
  +#define sa_addr_st   SA_CONCAT(SA_PREFIX,sa_addr_st)
  +#define sa_addr_t    SA_CONCAT(SA_PREFIX,sa_addr_t)
  +#define sa_rc_t      SA_CONCAT(SA_PREFIX,sa_rc_t)
  +#define sa_st        SA_CONCAT(SA_PREFIX,sa_st)
  +#define sa_t         SA_CONCAT(SA_PREFIX,sa_t)
  +#define sa_u2a       SA_CONCAT(SA_PREFIX,sa_u2a)
  +#define sa_s2a       SA_CONCAT(SA_PREFIX,sa_s2a)
  +#define sa_a2u       SA_CONCAT(SA_PREFIX,sa_a2u)
  +#define sa_a2s       SA_CONCAT(SA_PREFIX,sa_a2s)
  +#define sa_create    SA_CONCAT(SA_PREFIX,sa_create)
  +#define sa_destroy   SA_CONCAT(SA_PREFIX,sa_destroy)
  +#define sa_timeout   SA_CONCAT(SA_PREFIX,sa_timeout)
  +#define sa_buffers   SA_CONCAT(SA_PREFIX,sa_buffers)
  +#define sa_bind      SA_CONCAT(SA_PREFIX,sa_bind)
  +#define sa_connect   SA_CONCAT(SA_PREFIX,sa_connect)
  +#define sa_listen    SA_CONCAT(SA_PREFIX,sa_listen)
  +#define sa_accept    SA_CONCAT(SA_PREFIX,sa_accept)
  +#define sa_getremote SA_CONCAT(SA_PREFIX,sa_getremote)
  +#define sa_getlocal  SA_CONCAT(SA_PREFIX,sa_getlocal)
  +#define sa_getfd     SA_CONCAT(SA_PREFIX,sa_getfd)
  +#define sa_shutdown  SA_CONCAT(SA_PREFIX,sa_shutdown)
  +#define sa_read      SA_CONCAT(SA_PREFIX,sa_read)
  +#define sa_readfrom  SA_CONCAT(SA_PREFIX,sa_readfrom)
  +#define sa_readline  SA_CONCAT(SA_PREFIX,sa_readline)
  +#define sa_write     SA_CONCAT(SA_PREFIX,sa_write)
  +#define sa_writeto   SA_CONCAT(SA_PREFIX,sa_writeto)
  +#define sa_printf    SA_CONCAT(SA_PREFIX,sa_printf)
  +#define sa_flush     SA_CONCAT(SA_PREFIX,sa_flush)
  +#endif
   
  +/* socket address abstraction object type */
   struct sa_addr_st;
   typedef struct sa_addr_st sa_addr_t;
   
  +/* socket abstraction object type */
  +struct sa_st;
  +typedef struct sa_st sa_t;
  +
  +/* return codes */
   typedef enum {
       SA_OK,
       SA_ERR_ARG,
  @@ -70,6 +113,7 @@
   sa_rc_t sa_accept   (sa_t *sa, sa_addr_t **caddr, sa_t **csa);
   sa_rc_t sa_getremote(sa_t *sa, sa_addr_t **raddr);
   sa_rc_t sa_getlocal (sa_t *sa, sa_addr_t **laddr);
  +sa_rc_t sa_getfd    (sa_t *sa, int *fd);
   sa_rc_t sa_shutdown (sa_t *sa, char *flags);
   
   /* input/output operations */

From ossp-cvs-owner@ossp.org  Tue Oct  2 16:12:29 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f92ECSe13658; Tue, 2 Oct 2001 16:12:28 +0200 (CEST)
Date: Tue, 2 Oct 2001 16:12:28 +0200 (CEST)
Message-Id: <200110021412.f92ECSe13658@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   02-Oct-2001 16:12:28
  Branch: HEAD                             Handle: 2001100215122700

  Modified files:
    ossp-pkg/sa             sa.h

  Log:
    provide embedding support

  Summary:
    Revision    Changes     Path
    1.2         +39 -0      ossp-pkg/sa/sa.h
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.h
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 sa.h
  --- ossp-pkg/sa/sa.h	2001/10/02 13:27:45	1.1.1.1
  +++ ossp-pkg/sa/sa.h	2001/10/02 14:12:27	1.2
  @@ -35,6 +35,45 @@
   #include <sys/types.h>
   #include <sys/socket.h>
   
  +/* embedding support */
  +#ifdef SA_PREFIX
  +#if defined(__STDC__) || defined(__cplusplus)
  +#define __SA_CONCAT(x,y) x ## y
  +#define SA_CONCAT(x,y) __SA_CONCAT(x,y)
  +#else
  +#define __SA_CONCAT(x) x
  +#define SA_CONCAT(x,y) __SA_CONCAT(x)y
  +#endif
  +#define sa_addr_st   SA_CONCAT(SA_PREFIX,sa_addr_st)
  +#define sa_addr_t    SA_CONCAT(SA_PREFIX,sa_addr_t)
  +#define sa_rc_t      SA_CONCAT(SA_PREFIX,sa_rc_t)
  +#define sa_st        SA_CONCAT(SA_PREFIX,sa_st)
  +#define sa_t         SA_CONCAT(SA_PREFIX,sa_t)
  +#define sa_u2a       SA_CONCAT(SA_PREFIX,sa_u2a)
  +#define sa_s2a       SA_CONCAT(SA_PREFIX,sa_s2a)
  +#define sa_a2u       SA_CONCAT(SA_PREFIX,sa_a2u)
  +#define sa_a2s       SA_CONCAT(SA_PREFIX,sa_a2s)
  +#define sa_create    SA_CONCAT(SA_PREFIX,sa_create)
  +#define sa_destroy   SA_CONCAT(SA_PREFIX,sa_destroy)
  +#define sa_timeout   SA_CONCAT(SA_PREFIX,sa_timeout)
  +#define sa_buffers   SA_CONCAT(SA_PREFIX,sa_buffers)
  +#define sa_bind      SA_CONCAT(SA_PREFIX,sa_bind)
  +#define sa_connect   SA_CONCAT(SA_PREFIX,sa_connect)
  +#define sa_listen    SA_CONCAT(SA_PREFIX,sa_listen)
  +#define sa_accept    SA_CONCAT(SA_PREFIX,sa_accept)
  +#define sa_getremote SA_CONCAT(SA_PREFIX,sa_getremote)
  +#define sa_getlocal  SA_CONCAT(SA_PREFIX,sa_getlocal)
  +#define sa_getfd     SA_CONCAT(SA_PREFIX,sa_getfd)
  +#define sa_shutdown  SA_CONCAT(SA_PREFIX,sa_shutdown)
  +#define sa_read      SA_CONCAT(SA_PREFIX,sa_read)
  +#define sa_readfrom  SA_CONCAT(SA_PREFIX,sa_readfrom)
  +#define sa_readline  SA_CONCAT(SA_PREFIX,sa_readline)
  +#define sa_write     SA_CONCAT(SA_PREFIX,sa_write)
  +#define sa_writeto   SA_CONCAT(SA_PREFIX,sa_writeto)
  +#define sa_printf    SA_CONCAT(SA_PREFIX,sa_printf)
  +#define sa_flush     SA_CONCAT(SA_PREFIX,sa_flush)
  +#endif
  +
   /* socket address abstraction object type */
   struct sa_addr_st;
   typedef struct sa_addr_st sa_addr_t;

From ossp-cvs-owner@ossp.org  Tue Oct  2 16:34:53 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f92EYpN16250; Tue, 2 Oct 2001 16:34:51 +0200 (CEST)
Date: Tue, 2 Oct 2001 16:34:51 +0200 (CEST)
Message-Id: <200110021434.f92EYpN16250@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   02-Oct-2001 16:34:51
  Branch: HEAD                             Handle: 2001100215345100

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c

  Log:
    introduced new OSSP SA library; removed connect_nonb obsoleted by sa library;

  Summary:
    Revision    Changes     Path
    1.63        +41 -104    ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.62 -r1.63 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/09/13 14:24:49	1.62
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/02 14:34:51	1.63
  @@ -106,18 +106,17 @@
   };
   
   static void catchsignal(int sig, ...);
  -static int connect_nonb(int, const struct sockaddr *, socklen_t, int);
   static void initsession(struct session *session);
   static void resetsession(struct session *session);
   int groupmatch(char *, size_t, char *);
   
   struct ns {
  -    char *h;        /* host */
  -    char *p;        /* port */
  -    sa_t *sa;
  -    int s;          /* socket */
  -    nntp_t *nntp;
  -    nntp_rc_t rc;
  +    char           *h;    /* host */
  +    char           *p;    /* port */
  +    sa_addr_t      *saa;  /* socket address abstraction */
  +    sa_t           *sa;   /* socket abstraction */
  +    nntp_t         *nntp;
  +    nntp_rc_t       rc;
   };
   
   typedef struct {
  @@ -135,6 +134,7 @@
       l2_stream_t    *l2;
       char           *cpBindh;
       char           *cpBindp;
  +    sa_addr_t      *saaBind;
       sa_t           *saBind;
       int             nsc;
       struct ns       ns[MAXNEWSSERVICES];
  @@ -299,7 +299,6 @@
       size_t        asHosts;
       char         *cpHost;
       char         *cpPort;
  -    sa_t         *sa;
       l2_channel_t *chPrefix;
       l2_channel_t *chBuf;
       l2_channel_t *chFile;
  @@ -331,13 +330,14 @@
       ctx->l2 = NULL;
       ctx->cpBindh = NULL;
       ctx->cpBindp = NULL;
  +    ctx->saaBind = NULL;
       ctx->saBind = NULL;
       ctx->nsc = 0;
       for (i=0; i < MAXNEWSSERVICES; i++) {
           ctx->ns[i].h = NULL;
           ctx->ns[i].p = NULL;
  +        ctx->ns[i].saa = NULL;
           ctx->ns[i].sa = NULL;
  -        ctx->ns[i].s = -1;
           ctx->ns[i].nntp = NULL;
           ctx->ns[i].rc = LMTP_ERR_UNKNOWN;
       }
  @@ -369,13 +369,10 @@
                   }
                   else 
                       ctx->cpBindp = strdup("0");
  -
  -                if ((ctx->saBind = sa_create(SA_IP, "tcp", ctx->cpBindh, ctx->cpBindp)) == NULL) {
  -                    fprintf(stderr, "%s:Error: creating TCP socket address failed for \"%s:%s\": %s\n", 
  -                            ctx->progname, 
  -                            ctx->cpBindh, 
  -                            ctx->cpBindp, 
  -                            strerror(errno));
  +                //FIXME
  +                if ((rc = sa_u2a(&ctx->saaBind, "tcp://%s:%s", ctx->cpBindh, ctx->cpBindp)) != SA_OK) {
  +                    fprintf(stderr, "%s:Error: Parsing bind address failed for \"%s:%s\" (%d)\n", 
  +                            ctx->progname, ctx->cpBindh, ctx->cpBindp, rc);
                       CU(ERR_EXECUTION);
                   }
                   break;
  @@ -452,19 +449,17 @@
                       ctx->ns[ctx->nsc].h = cpHost;
                       ctx->ns[ctx->nsc].p = cpPort;
   
  -                    if ((sa = sa_create(SA_IP, "tcp",
  -                                        ctx->ns[ctx->nsc].h,
  -                                        ctx->ns[ctx->nsc].p)) == NULL) {
  -                        fprintf(stderr, "%s:Error: creating TCP socket address failed for \"%s:%s\": %s\n", 
  +                    if ((rc = sa_u2a(&ctx->ns[ctx->nsc].saa, "tcp://%s:%s", 
  +                                     ctx->ns[ctx->nsc].h, ctx->ns[ctx->nsc].p)) != SA_OK) {
  +                        fprintf(stderr, "%s:Error: Parsing host address failed for \"%s:%s\" (%d)\n", 
                                   ctx->progname, 
  -                                ctx->ns[ctx->nsc].h, 
  -                                ctx->ns[ctx->nsc].p, 
  -                                strerror(errno));
  +                                ctx->ns[ctx->nsc].h,
  +                                ctx->ns[ctx->nsc].p,
  +                                rc);
                           CU(ERR_EXECUTION);
                       }
  -                    ctx->ns[ctx->nsc].sa = sa;
  -                    if ((ctx->ns[ctx->nsc].s =
  -                         socket(sa->sa_buf->sa_family, SOCK_STREAM, sa->sa_proto)) == -1) {
  +
  +                    if ((rc = sa_create(&ctx->ns[ctx->nsc].sa)) != SA_OK) {
                           fprintf(stderr, "%s:Error: Creating TCP socket failed for \"%s:%s\": %s\n", 
                                   ctx->progname, 
                                   ctx->ns[ctx->nsc].h, 
  @@ -697,61 +692,6 @@
       return rc;
   }
   
  -/* taken from "UNIX Network Programming", Volume 1, second edition W. Richard
  - * Stevens, connect_nonb.c from section 15.4 "Nonblocking connect", page 411,
  - * http://www.kohala.com/start/
  - */
  -int connect_nonb(int sockfd, const struct sockaddr *saptr, socklen_t salen, int nsec)
  -{
  -	int				flags, n, error;
  -	socklen_t		len;
  -	fd_set			rset, wset;
  -	struct timeval	tval;
  -
  -	flags = fcntl(sockfd, F_GETFL, 0);
  -	fcntl(sockfd, F_SETFL, flags | O_NONBLOCK);
  -
  -	error = 0;
  -	if ( (n = connect(sockfd, (struct sockaddr *) saptr, salen)) < 0)
  -		if (errno != EINPROGRESS)
  -			return(-1);
  -
  -	/* Do whatever we want while the connect is taking place. */
  -
  -	if (n == 0)
  -		goto done;	/* connect completed immediately */
  -
  -	FD_ZERO(&rset);
  -	FD_SET(sockfd, &rset);
  -	wset = rset;
  -	tval.tv_sec = nsec;
  -	tval.tv_usec = 0;
  -
  -	if ( (n = select(sockfd+1, &rset, &wset, NULL,
  -					 nsec ? &tval : NULL)) == 0) {
  -		close(sockfd);		/* timeout */
  -		errno = ETIMEDOUT;
  -		return(-1);
  -	}
  -
  -	if (FD_ISSET(sockfd, &rset) || FD_ISSET(sockfd, &wset)) {
  -		len = sizeof(error);
  -		if (getsockopt(sockfd, SOL_SOCKET, SO_ERROR, &error, &len) < 0)
  -			return(-1);			/* Solaris pending error */
  -	} else
  -		return(-1); /* err_quit("select error: sockfd not set"); */
  -
  -done:
  -	fcntl(sockfd, F_SETFL, flags);	/* restore file status flags */
  -
  -	if (error) {
  -		close(sockfd);		/* just in case */
  -		errno = error;
  -		return(-1);
  -	}
  -	return(0);
  -}
  -
   static void resetsession(struct session *session)
   {
       if (session->lhlo_domain != NULL)
  @@ -796,6 +736,7 @@
       int          bOk;
       int          i;
       nntp_io_t    nntp_io;
  +    int          s; //FIXME
   
       log1(ctx, INFO, "LMTP service executing LHLO command < %s", req->msg);
   
  @@ -852,37 +793,33 @@
           bOk = TRUE;
           log2(ctx, TRACE, "try %s:%s", ctx->ns[i].h, ctx->ns[i].p);
   
  -        if (bOk && (ctx->saBind != NULL)) {
  +        if (bOk && (ctx->saaBind != NULL)) {
               log2(ctx, DEBUG, "bind local socket to %s:%s", ctx->cpBindh, ctx->cpBindp);
  -            if (bind(ctx->ns[i].s, ctx->saBind->sa_buf, ctx->saBind->sa_len) < 0) {
  +            if (sa_bind(ctx->ns[i].sa, ctx->saaBind) != SA_OK) {
                   bOk = FALSE;
                   log2(ctx, ERROR, "binding NNTP client to local address %s:%s failed, %m", ctx->cpBindh, ctx->cpBindp);
               }
           }
   
  -        if (bOk) {
  -            if(ctx->option_waittime > 0) {
  -                log1(ctx, DEBUG, "connect_nonb with waittime=%d", ctx->option_waittime);
  -                if (connect_nonb(ctx->ns[i].s, ctx->ns[i].sa->sa_buf, ctx->ns[i].sa->sa_len, 
  -                             ctx->option_waittime) < 0) {
  -                    bOk = FALSE;
  -                    log3(ctx, WARNING, "nonblocking connect to %s:%s with waittime=%d failed, %m",
  -                         ctx->ns[i].h, ctx->ns[i].p, ctx->option_waittime);
  -                }
  +        if (bOk && (ctx->option_waittime > 0)) {
  +            log1(ctx, DEBUG, "timeout configured through waittime=%d", ctx->option_waittime);
  +            sa_timeout(ctx->ns[i].sa, ctx->option_waittime, 0);
               }
  -            else {
  -                log0(ctx, DEBUG, "connect");
  -                if (connect(ctx->ns[i].s, ctx->ns[i].sa->sa_buf, ctx->ns[i].sa->sa_len) < 0) {
  -                    bOk = FALSE;
  -                    log2(ctx, WARNING, "connect to %s:%s failed, %m",
  -                         ctx->ns[i].h, ctx->ns[i].p);
  -                }
  +
  +        if (bOk) {
  +            log0(ctx, DEBUG, "connect");
  +            if (sa_connect(ctx->ns[i].sa, ctx->ns[i].saa) != SA_OK) {
  +                bOk = FALSE;
  +                log2(ctx, WARNING, "connect to %s:%s failed, %m",
  +                     ctx->ns[i].h, ctx->ns[i].p);
               }
           }
   
           if (bOk) {
               log0(ctx, DEBUG, "nntp_create");
  -            if ((ctx->ns[i].nntp = nntp_create(ctx->ns[i].s, ctx->ns[i].s, 
  +            //FIXME
  +            sa_getfd(ctx->ns[i].sa, &s);
  +            if ((ctx->ns[i].nntp = nntp_create(s, s, 
                                                  (ctx->option_logfile && (ctx->option_levelmask >= L2_LEVEL_TRACE)) ?
                                                   &nntp_io : NULL)) == NULL) {
                   bOk = FALSE;
  @@ -963,13 +900,13 @@
           nntp_destroy(ns->nntp);
           ns->nntp = NULL;
       }
  -    if (ns->s != -1) {
  -        close(ns->s);
  -        ns->s = -1;
  -    }
       if (ns->sa != NULL) {
           sa_destroy(ns->sa);
           ns->sa = NULL;
  +    }
  +    if (ns->saa != NULL) {
  +        free(ns->saa);
  +        ns->saa = NULL;
       }
       if (ns->p != NULL) {
           free(ns->p);

From ossp-cvs-owner@ossp.org  Tue Oct  2 17:51:33 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f92FpWW25096; Tue, 2 Oct 2001 17:51:32 +0200 (CEST)
Date: Tue, 2 Oct 2001 17:51:32 +0200 (CEST)
Message-Id: <200110021551.f92FpWW25096@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_pipe.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   02-Oct-2001 17:51:32
  Branch: HEAD                             Handle: 2001100216513200

  Modified files:
    ossp-pkg/l2             l2_ch_pipe.c

  Log:
    Added new logic to accommodate one-shot behavior, and some changes to handle
    a child process that writes when it should only read.

  Summary:
    Revision    Changes     Path
    1.23        +151 -91    ossp-pkg/l2/l2_ch_pipe.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_pipe.c
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 l2_ch_pipe.c
  --- ossp-pkg/l2/l2_ch_pipe.c	2001/10/01 16:26:14	1.22
  +++ ossp-pkg/l2/l2_ch_pipe.c	2001/10/02 15:51:32	1.23
  @@ -33,18 +33,23 @@
   #include <unistd.h>
   #include <signal.h>
   #include <sys/wait.h>
  +#include <fcntl.h>
   
  -#define L2_PIPE_MODEDIRECT   1 /* direct command execution                  */
  -#define L2_PIPE_MODESHELL    2 /* shell  command execution                  */
  -#define L2_PIPE_WRITEFAIL    6 /* how long before real failure is indicated */
  -#define L2_PIPE_MAXARGS    256 /* how many args can our piped command have  */
  +#define L2_PIPE_EXECMODE_DIRECT    1 /* direct command execution             */
  +#define L2_PIPE_EXECMODE_SHELL     2 /* shell  command execution             */
  +#define L2_PIPE_RUNTIME_RELIABLE   3 /* reliable pipe command processing     */
  +#define L2_PIPE_RUNTIME_ONESHOT    4 /* oneshot  pipe command processing     */
  +#define L2_PIPE_WRITEFAIL          6 /* how long before failure occurs       */
  +#define L2_PIPE_MAXARGS          256 /* how many args can piped command have */
   
   /* declare private channel configuration */
   typedef struct {
       pid_t            Pid;        /* process id of child command          */
       int              iWritefail; /* counter to failed write() operations */
       int              piFd[2];    /* pipe file descriptor                 */
  +    int              iNulldev;   /* null device file descriptor          */
       int              iMode;      /* execution mode direct or shell       */
  +    int              iRtme;      /* runtime mode reliable or oneshot     */
       char            *szCmdpath;  /* path to command and arguments        */
       struct sigaction sigchld;    /* initial state of chld signal handler */
       struct sigaction sigpipe;    /* initial state of pipe signal handler */
  @@ -80,10 +85,8 @@
    *
    * The option 'oneshot' describes subsequent behavior which also rebuilds
    * such a severed pipe. The difference is that the pipe handler will not
  - * spawn the child process until writing actually occurs. It will also
  - * terminate the child process after writing is finished, independant of
  - * whether the write operation succeeded or failed after the user-specified
  - * number of retries.
  + * spawn the child process until writing actually occurs. The channel will
  + * also block until the child process finishes and terminates on its own.
    *
    * The lifecycle of a pipe command process is illustrated in the
    * following figure:
  @@ -98,41 +101,43 @@
    * Last-modified: 2000-09-28/14:40
    * Name: l2_ch_pipe
    * Version: eo/1.0
  - * H4sIALKVuDsCA61Z32/cNgx+3v0VAvqwDWgO+mnLz8U2FMiwYW3f9uL4lJ43n+9m
  - * +5rlvx9J2Sc5bRrp1qZxRdvfJ9KkSEp99fPbX5jays1t3e/Gpj65zRvXT27Y/Oqm
  - * oW02t24CibGN4HzL+eZd23/s3OZGboTknMkNZ0qyVw392RRM6tIwWcIjIQQOK2k2
  - * mnH4MXgRBRPwL1DBK5oBCdPwKw1erOWsGVw9uT85F1+Dwc1CG6YUTkGwY3/ffjwP
  - * LyJhHgVIrYoZeTy5PhFklJi1fBjaKXWqQi6opjuOqaYV1bWmldUVptnqGtOqcpkq
  - * 1TQjDdwrFm/v3DgNx0cC3hQYPwUghCzgwm0Fb5UV3wimkC0Qy5kV73l2Cjm6FBL/
  - * BlmWBV5EmUIDk3L/9swT3YAhMSmdwqTNWqEga5OhUKFQUmahiWSFH0kVSTRWrLUJ
  - * shUZ2sCUK5ogqyKDxui1UUE2OsOoUq61CXIpM7Sp+FqbIFc8Q5uqekJzkatqoZFE
  - * gSuk9DQ3M5wtAs4iNt9F8Ru+cRxCIQpWI3wK6Ni9QYvVyOfoOboBFFaf5mZZfcbY
  - * 9NVndLVafSTT6jOGZ6w+fHu1+uiGX33GSJ0cqJFCQaZATVWIAjOiCTIFaioNuSui
  - * CTLlglQaiu+IJsgU76k0FBIRTZApF6TS0DLRQq+WDcm0bLQw6csmprnItGxSaSj6
  - * I5pIVgtN0uqTcll9c7gEV61GxK0rE4/wKaDjKLloUZp4NHuNxyN8CmgoqfObNJod
  - * w+MRPbXGXL53QFf6cjf6kAt6Xk+oJq13IFNQj7XGmquU78PiCs7XBRxftrRQCWeg
  - * RfnQ76A/7I/Doe5Y0w7N+TBOdd+48fXTduBzMikCGfLW7Fay39uTY2/2dd+7jj20
  - * 054Nrmvru7Zrp8cUTrVwSg7dxnQeerdjxx64ug40nVjv4MZ0ZFP9t2N1/xIpByZZ
  - * mYVUGuzJhsE1U/sJ8PAPkAPdoW77CX5ZO42s2bfdLkXb8kKMrXNzPBygFWen4Qif
  - * cNyyn/6tD6fOsXF/fOi3oVHyGC0RLgtqTo15wXVluXwZreGhd914ck37/3ynC7h8
  - * E99xu3wNjen+ie8GB+1ifde1456+8QlmSyCFDzOTGuTfnQfYxIC+9139AOzU8GKv
  - * PNTkyd3ZgTcTeKE4Lry4Mah9E7zzrmdtfzpPpOLzTqR6W1gyGuutVWV6vbXSruot
  - * yVRvrawy6i2+vaq3dMPXW6tEer2NFAoy1dtUhSizRjRBpkKZSkNpN6IJMpXtVBqq
  - * IRFNJKsMGkruEU2QqWyn0lDmj2iCTGU7lYaKRUQTZCrbyTTVE5qLTGWbaNK6XbXU
  - * 2zlcgseD01ajooIEb6zxI6y3OJ6/RDBmNSIM1cYwwqeAXmLermpiYakm4tmEFdq8
  - * lAqLJRPQtv393rHzCLn1UD9C0vrn3A6QYHp3A+t/Ss1aMOvMSQFz5/b1p/Y4bNlb
  - * KDb7FipMPbrXMHSQcCjhfj8m0Ep+odVQHetxPEL6nzBtzaXnUibHU/3Qp+TXS1mh
  - * juXcT21HWRXT7J372PZQx96TnpgY59KWVWHIsfdtD5nfjQv3F/PqC9ari/UWHEWm
  - * Tm44tD18AvbXeZxYfY8HXtFnjdI1ln4MHSH89gwCwwe5YBaDXDzXVGKMI9hv62aa
  - * l7HCY3EgthjG+BRPX7a0zQuUi0Lck+KPkhGrfFYj2hF6OA4jQ5XUyxMDzUWmpX73
  - * t/B8G1N9DyuW5jzXVGqGPZy65WBqwdXyxCqZa6ovvAvPtzGVOGeNMDVlmuqzXDVn
  - * PrQ08QzWFOU1Z7Aeds0ZLCFzz2AJlHNQSceb2Sg63vSmZR9vEiw+3kw8KM5WkipO
  - * NooOibNQlxCx2EPlh4iHXRMihMwNEQJlH9N7JXOP6a8yjTyQaxrFcbZpFMdZpoU4
  - * JtjTOLYxUGxNyW00HfUYBY5gtxYp+TyKDo95iQP6ktSIfBm3Ms7gzk7gdKTmcIbW
  - * qD18bqD93EBEkn2Q7xHYQ0PxEg5XAJYQwgmoRdAl5cxFwfJ0LhtwMsJhScEDAVPR
  - * GRZMtmyvf4NG8h02krftvWsem87l+EWhNtl+Uba8zi+UYq7xC7Yc1/iFtgiZftHC
  - * 5vhFcT37hXYri1/+oJMO6EYvfmE/DA67/R9zHIRrNds/uIm5yj/0v3DX+Aeb32v8
  - * Q0cemf4RqsryD57YkX9g2/BV9/hjS++e/wBMybpdCx8AAA==
  + * H4sIAIW5uTsCA61ZUW/cNgx+3v0KAX3YCjSBJEuy/VxsQ4EMG9bubS+Oo+SM+uyb
  + * 7WuWfz+Ssi352iTSrW3jir7jJ0qk+FHMm18+/Mqya7m7qbq7sa6OdvfedpMddr/Z
  + * aWjq3Y2dQGJsJzi/5nz3sekeWru7kjshOWdyx1km2Zua/uwMk0ZqprjmTPAi10yD
  + * vBMsY/ACfjjT+JDwADR6h//DmxweWpWcGYn/vCxzAyPN8xgYmJS7b884wQsYEpJU
  + * MUiZ2Rrk5cwkGKTVFsbLWiXAKL2F8bLSCTC53MJ4OZcJMIXYwni5EAkwJa1MqAXG
  + * yyU3ONJxMOUZzCqXZQKMybYwgZwtMJIgFPzkDuZqVmeLgNBy90MQvz5wQqct2KrU
  + * 4Qg/Be0wSlYrch2OZq/xcISfgnZulm/SaHYMD0f0aaH1ut9eu1Tr22AjF+35PKGZ
  + * VwbOe1nCIRcKDr2QGQwlYO6U32fUWIOYiQy+V9A55TjUoPFXdwcJpuuHQ9Wyuhnq
  + * 02Gcqq6247u/ORcvg0nhwRC3YjeS/dEcLXu/r7rOtuyxmfZssG1T3TZtMz3FYGYL
  + * puSwsOk0dPaO9R1gtS1YOrHOwoupZ1P12bKqew2UA5Is9QIq4Tt1Pwy2npovoA//
  + * ATjAHaqmm+CHNdPI6n3T3sVYm6/ACoZ1fzhALmfHoYctHK/Zz/9Wh2Nr2bjvH7tr
  + * AvSeUxK1pcFMDZH2iufyfNkYpeBD57nxaOvm/7lOGXh8F9fxYtkMhcn+zHWDtWDf
  + * bduMe9riI8wWAZrpBVQj/t1pABIEe+/b6hHQH4dmsqw/2qEiR96dLDgzAlcXywbo
  + * TGDs1m0/AiB5njXd8TSRic/7kEIpk3j6BCUcPH0uSQlWYJISzyUpzFFyyQ4zjopQ
  + * Fk4ZB+Ia0yZ+CiFE1UGIOVuEmQJB8S9UCh5VPmsSpRynTjnJLdVQjqFgx8JCFrDU
  + * 2MKCHkFhMT8MPkRCYYHf3hQW9MIVFjLPVDSVBwZ5mag81iCiJwijDV05GelKZCae
  + * ygNrvExUHmsNkVwA42WqlmJhiO2CRXmZqqXYRREZBtZ4mcqcWGuIFQNrvEz1Saw1
  + * RJ4hzCpTfUIwUYWFEEthMe+sD5zNaI6CzQg/Be3Qvd6KzYg+XaKbz6fPpSlT4MEE
  + * itegrvRr+d0s6c0g1XzaW3YagTAO1RNk4n9OzQBZs7NXkNSm2FQMs86Y5NNbu6++
  + * NP1wzT4Age4bYM1qtO9gaCGLEov8OEbASr7CYilTjWMPnDZhLp7pdKX+8Vg9dhGQ
  + * rlgiSExXt21ffx7ZqZuadjYPk/zM0gzuWIemgxmjrDWLteTE+6E/EJ0BN7C2f2jq
  + * bxLGKxynVnOxZnR2IrMh1d3ah6aDUuKT31ZcQ3dGRFg4urQt81wn8pCL6xnm+9CQ
  + * i2SxHJhUGqIj4dRxOC8Ua6wZGCsvWcrNORBmu7eQDhT8SI2PAgi/Hiy4+dwj52p4
  + * bCHUMyqpSa3v7puH0/CqJsyTgabKzKwJhUkXqURlCClRTROpZeSiRfVL5NIoJ1y0
  + * tLy8YGlFecnSynyZKnZpGqsUbhZv30HBOfRPwUHBQNAaq2lBd+VcRMePNvkl8ePU
  + * Lokf0kyNH1JK2WRyTbIWucYtLdk1pBa6JjLIk42kIE/WogA/03IsTMaXBZX7eJWH
  + * oojwihBPXOucFwEe0ZvBEdx+Aiue16Kajec4MHzhwG/rbazHykAInA5NY8MJWLk5
  + * fL3u4mvnoCYur8jATaDYAfG8pocHA3mL9ARsCBB0ylzknvO5Cq8nA72Cu9yvS+oI
  + * wWTLdfV3qGE+Yg1z09zb+qluzz2m+OIwzAmvTJJht4AmAXJf5/iTbsFA6Osc7CfX
  + * Mnkb4c41CPDMvBADz/iSMtklvpS5usiX0ohkX4qsfN6XL0Q4VrqbCPd+y0S5OA5P
  + * Y6z1dGkJrY9wTIbrSD6dWZFfdjopuVziUSWKlBOTcTUHM11WXormweIV4G2KMUSj
  + * oTGeYSmLOIYtNI9mWMpa6Qzr1C5hWNJMZVhSSq7QnJGpFdpFSyMCS10alQHJS6My
  + * IGlpvgwgta8rNKz9DV+vDhhKiXeZQhZ8wcm+02WGMGeLYJh6mTFlNt/vcbS01GBv
  + * 3J2eF1hOZHl8S43sCVpqbs3YUitkmdBSw29vWmr0wrXUikzE/64uMMjL1H2KNYia
  + * JwGMl6kzFwtD+T+A8TI1sWJhqMERwHiZmlixMNS0CmC8TE2saJjyDGaVqYkVC0MN
  + * iwDGy9RujIWhlhaFdND8dDI2P02pYltq6+/q5nDxHvdO24zcLPl8pECbxvOG8nDk
  + * jpzS4cid4jnOCzqH/wEp6AKCgx8AAA==
    * -----END EMBEDDED OBJECT-----
    */
   
  @@ -150,7 +155,9 @@
       cfg->iWritefail =  0; 
       cfg->piFd[0]    = -1; 
       cfg->piFd[1]    = -1; 
  +    cfg->iNulldev   = -1; 
       cfg->iMode      = -1; 
  +    cfg->iRtme      = -1; 
       cfg->szCmdpath  = NULL;
       memset(&cfg->sigchld, 0, sizeof(cfg->sigchld));
       memset(&cfg->sigpipe, 0, sizeof(cfg->sigpipe));
  @@ -165,22 +172,33 @@
   static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
       l2_ch_pipe_t *cfg = (l2_ch_pipe_t *)ctx->vp;
  -    l2_param_t pa[3]; 
  +    l2_param_t pa[4]; 
       l2_result_t rv;
  -    char *sz = NULL;
  +    char *szMode = NULL;
  +    char *szRel  = NULL;
   
       /* feed and call generic parameter parsing engine */
  -    L2_PARAM_SET(pa[0], mode, CHARPTR, &sz);
  -    L2_PARAM_SET(pa[1], path, STRING, &cfg->szCmdpath);
  -    L2_PARAM_END(pa[2]);
  +    L2_PARAM_SET(pa[0], execmode, CHARPTR, &szMode); /* mode direct or shell */
  +    L2_PARAM_SET(pa[1], runtime,  CHARPTR, &szRel);  /* reliable or oneshot  */
  +    L2_PARAM_SET(pa[2], path,     STRING,  &cfg->szCmdpath); /* path of cmd  */
  +    L2_PARAM_END(pa[3]);
       if ((rv = l2_util_setparams(pa, fmt, ap)) != L2_OK)
           return rv;
  +
  +    if (szMode != NULL) {
  +        if (strcmp(szMode, "direct") == 0)
  +            cfg->iMode = L2_PIPE_EXECMODE_DIRECT;
  +        else if (strcmp(szMode, "shell") == 0)
  +            cfg->iMode = L2_PIPE_EXECMODE_SHELL;
  +        else
  +            return L2_ERR_ARG;
  +    }
   
  -    if (sz != NULL) {
  -        if (strcmp(sz, "direct") == 0)
  -            cfg->iMode = L2_PIPE_MODEDIRECT;
  -        else if (strcmp(sz, "shell") == 0)
  -            cfg->iMode = L2_PIPE_MODESHELL;
  +    if (szRel != NULL) {
  +        if (strcmp(szRel, "reliable") == 0)
  +            cfg->iRtme = L2_PIPE_RUNTIME_RELIABLE;
  +        else if (strcmp(szMode, "oneshot") == 0)
  +            cfg->iRtme = L2_PIPE_RUNTIME_ONESHOT;
           else
               return L2_ERR_ARG;
       }
  @@ -189,10 +207,10 @@
   }
   
   /**********************************************************
  - * parse_cmdpath: Helper method to hook_open              *
  + * parse_cmdpath: Helper method to spawn_command          *
    *   Parses szBuf into an argv-style string vector szArgs *
    **********************************************************/
  -static l2_result_t parse_cmdpath (char *szBuf, char *szArgs[]) {
  +static l2_result_t parse_cmdpath(char *szBuf, char *szArgs[]) {
       int iCnt = 0;
   
       if (szBuf == NULL)     /* check for bad input before we  */
  @@ -213,55 +231,44 @@
           return L2_ERR_ARG;
   }
   
  -/* open channel */
  -static l2_result_t hook_open(l2_context_t *ctx, l2_channel_t *ch)
  +/************************************************************
  + * spawn_command: Helper method to hook_open and hook_write *
  + *   Forks a new process, and copies the command executable *
  + ************************************************************/
  +static l2_result_t spawn_command(l2_ch_pipe_t *cfg)
   {
  -    l2_ch_pipe_t *cfg = (l2_ch_pipe_t *)ctx->vp;
       char *pVec[L2_PIPE_MAXARGS];
  -    struct sigaction locact;
  -    l2_result_t rv;
       char *sz = NULL;
  -
  -    /* consistency check */
  -    if (cfg->szCmdpath == NULL)
  -        return L2_ERR_USE;
  +    l2_result_t rv;
   
       /* initialize auto vars before using them */
       memset(pVec, 0, sizeof(pVec));
  -    memset(&locact, 0, sizeof(locact));
  -
  -    locact.sa_handler = (void(*)())catchsignal;
  -    sigemptyset(&locact.sa_mask);
  -    locact.sa_flags = 0;
  -
  -    /* save old signal context before replacing with our own */
  -    if (sigaction(SIGCHLD, &locact, &cfg->sigchld) < 0)
  -        return L2_ERR_SYS;
  -    if (sigaction(SIGPIPE, &locact, &cfg->sigpipe) < 0)
  -        return L2_ERR_SYS;
  -
  -    if (pipe(cfg->piFd) == -1)                /* open the pipe            */
  -        return L2_ERR_SYS;
   
  +    /* spawn a child process to be later overwritten by the user command  */
       if ((cfg->Pid = fork()) > 0) {            /* parent process           */
           free(sz);                             /* no exec() in parent      */
           close(cfg->piFd[0]);                  /* half-duplex (no reading) */
           cfg->piFd[0] = -1;
  +        return L2_OK;
       }
       else if (cfg->Pid == 0) {                 /* child process            */
           close(cfg->piFd[1]);                  /* close the writing end,   */
           cfg->piFd[1] = -1;                    /* because we don't use it  */
           dup2(cfg->piFd[0], fileno(stdin));    /* copy the reading end     */
   
  +        /* redirection of child's stdout and stdin */
  +        cfg->iNulldev = open("/dev/null", O_RDWR);
  +        dup2(cfg->iNulldev, fileno(stdout));      /* redirect stdout to null  */
  +        dup2(cfg->iNulldev, fileno(stderr));      /* redirect stderr to null  */
  +
           /* the distinction between modes is necessary, because only executing */
           /* commands in a shell environment allows usage of variables and such */
  -        if (cfg->iMode == L2_PIPE_MODESHELL) {
  +        if (cfg->iMode == L2_PIPE_EXECMODE_SHELL) {
               pVec[0] = "/bin/sh";
               pVec[1] = "-c";
               pVec[2] = cfg->szCmdpath;
               pVec[3] = NULL;        /* add a NULL to mark the end of the chain */
           }
  -
           else { /* plain direct command execution */
               sz = strdup(cfg->szCmdpath);
               if ((rv = parse_cmdpath(sz, pVec)) != L2_OK) {
  @@ -277,10 +284,45 @@
               cfg->piFd[0] = -1; /* if execvp() doesn't swap our context or */
               return L2_ERR_SYS; /* if child returns, we have an error      */
           }
  +        else
  +            return L2_OK; /* NOTREACHED */
       }
       else /* fork failed  */
           return L2_ERR_SYS;
  +}
  +
  +/* open channel */
  +static l2_result_t hook_open(l2_context_t *ctx, l2_channel_t *ch)
  +{
  +    l2_ch_pipe_t *cfg = (l2_ch_pipe_t *)ctx->vp;
  +    struct sigaction locact;
  +
  +    /* consistency check */
  +    if (cfg->szCmdpath == NULL)
  +        return L2_ERR_USE;
  +
  +    /* initialize auto vars before using them */
  +    memset(&locact, 0, sizeof(locact));
  +
  +    locact.sa_handler = (void(*)())catchsignal;
  +    sigemptyset(&locact.sa_mask);
  +    locact.sa_flags = 0;
  +
  +    /* save old signal context before replacing with our own */
  +    if (sigaction(SIGCHLD, &locact, &cfg->sigchld) < 0)
  +        return L2_ERR_SYS;
  +    if (sigaction(SIGPIPE, &locact, &cfg->sigpipe) < 0)
  +        return L2_ERR_SYS;
   
  +    if (pipe(cfg->piFd) == -1)                /* open the pipe            */
  +        return L2_ERR_SYS;
  +
  +    /* short circuit hack, if in oneshot mode and not yet opened then return */
  +    if ((cfg->iRtme == L2_PIPE_RUNTIME_ONESHOT) && (ch->state != L2_CHSTATE_OPENED))
  +        return L2_OK;
  +    else
  +        spawn_command(cfg); /* spawn the command process */
  +
       return L2_OK;
   }
   
  @@ -291,6 +333,10 @@
       l2_ch_pipe_t *cfg = (l2_ch_pipe_t *)ctx->vp;
       l2_result_t rv;
   
  +    /* we must still spawn the child command process if we are in oneshot mode */
  +    if ((cfg->iRtme == L2_PIPE_RUNTIME_ONESHOT) && (cfg->Pid != -1))
  +        spawn_command(cfg);
  +
       /* write message to channel pipe */
       if (write(cfg->piFd[1], buf, buf_size) == -1) {
           if ((errno == EPIPE) && (cfg->iWritefail++ < L2_PIPE_WRITEFAIL)) {
  @@ -316,19 +362,33 @@
   {
       l2_ch_pipe_t *cfg = (l2_ch_pipe_t *)ctx->vp;
   
  -    /* restore previous signal context */
  -    if (sigaction(SIGCHLD, &cfg->sigchld, 0) < 0)
  -        return L2_ERR_SYS;
  -    if (sigaction(SIGPIPE, &cfg->sigpipe, 0) < 0)
  -        return L2_ERR_SYS;
  +    /* restore previous signal context, but only if it was saved and replaced */
  +    if (&cfg->sigchld.sa_handler) {
  +        if (sigaction(SIGCHLD, &cfg->sigchld, 0) < 0)
  +            return L2_ERR_SYS;
  +        if (sigaction(SIGPIPE, &cfg->sigpipe, 0) < 0)
  +            return L2_ERR_SYS;
  +    }
   
  -    /* close channel pipe for parent process created in hook_open() */
  -    close(cfg->piFd[1]);
  -    cfg->piFd[1] = -1;
  -    if ((kill (cfg->Pid, SIGTERM)) && (errno != ESRCH))
  -        return L2_ERR_SYS;
  +    /* close null device */
  +    if (cfg->iNulldev != -1) {
  +        close(cfg->iNulldev);
  +        cfg->iNulldev = -1;
  +    }
  +
  +    /* close output pipe for parent */
  +    if (cfg->piFd[1] != -1) {
  +        close(cfg->piFd[1]);
  +        cfg->piFd[1] = -1;
  +    }
  +
  +    /* kill child process if already started */
  +    if (cfg->Pid != -1) {
  +        if ((kill (cfg->Pid, SIGTERM)) && (errno != ESRCH))
  +            return L2_ERR_SYS;
  +        cfg->Pid = -1;
  +    }
   
  -    cfg->Pid = -1;
       return L2_OK;
   }
   

From ossp-cvs-owner@ossp.org  Tue Oct  2 20:37:21 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f92IbKL43523; Tue, 2 Oct 2001 20:37:20 +0200 (CEST)
Date: Tue, 2 Oct 2001 20:37:20 +0200 (CEST)
Message-Id: <200110021837.f92IbKL43523@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa .cvsignore Makefile.in autogen.sh configure.ac...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   02-Oct-2001 20:37:20
  Branch: HEAD                             Handle: 197001010100001002044239

  Added files:
    ossp-pkg/sa             sa_test.c
  Modified files:
    ossp-pkg/sa             .cvsignore Makefile.in autogen.sh configure.ac
  Removed files:
    ossp-pkg/sa             test.c

  Log:
    Upgrade ad-hoc build environment to standard OSSP build environment.

  Summary:
    Revision    Changes     Path
    1.2         +6  -0      ossp-pkg/sa/.cvsignore
    1.2         +91 -29     ossp-pkg/sa/Makefile.in
    1.2         +9  -9      ossp-pkg/sa/autogen.sh
    1.2         +38 -12     ossp-pkg/sa/configure.ac
    1.1         +80 -0      ossp-pkg/sa/sa_test.c
    NONE        +0  -79     ossp-pkg/sa/test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/.cvsignore
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 .cvsignore
  --- ossp-pkg/sa/.cvsignore	2001/10/02 13:36:08	1.1
  +++ ossp-pkg/sa/.cvsignore	2001/10/02 18:37:19	1.2
  @@ -1,4 +1,10 @@
  +config.guess
  +config.sub
  +ltmain.sh
  +libtool.m4
  +shtool
   configure
   config.h.in
   Makefile
   config.h
  +sa_test
  Index: ossp-pkg/sa/Makefile.in
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 Makefile.in
  --- ossp-pkg/sa/Makefile.in	2001/10/02 13:27:44	1.1.1.1
  +++ ossp-pkg/sa/Makefile.in	2001/10/02 18:37:19	1.2
  @@ -1,44 +1,106 @@
  +##
  +##  SA - OSSP Socket Abstraction Library
  +##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##
  +##  This file is part of OSSP SA, a socket abstraction library which
  +##  can be found at http://www.ossp.org/pkg/sa/.
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  Makefile.in: make(1) build procedure
  +##
  +
  +@SET_MAKE@
  +
  +DESTDIR     =
  +prefix      = @prefix@
  +exec_prefix = @exec_prefix@
  +bindir      = @bindir@
  +libdir      = @libdir@
  +includedir  = @includedir@
  +mandir      = @mandir@
  +
  +CC          = @CC@
  +CPPFLAGS    = @CPPFLAGS@
  +CFLAGS      = @DEFS@ @CFLAGS@
  +LDFLAGS     = @LDFLAGS@
  +LIBS        = @LIBS@
  +RM          = rm -f
  +SHTOOL      = ./shtool
  +LIBTOOL     = ./libtool
  +
  +LIB_NAME    = libsa.la
  +LIB_OBJS    = sa.lo
   
  -CC      = @CC@
  -CFLAGS  = @CFLAGS@ @DEFS@
  -LDFLAGS = @LDFLAGS@
  -LIBS    = @LIBS@
  -AR      = @AR@
  -RANLIB  = @RANLIB@
  -RM      = rm -f
  +TST_NAME    = sa_test
  +TST_OBJS    = sa_test.o
   
  -PRG_NAME = test
  -PRG_OBJS = test.o
  +.SUFFIXES:
  +.SUFFIXES: .c .o .lo
   
  -LIB_NAME = libsa.a
  -LIB_OBJS = sa.o
  +all: $(LIB_NAME) $(TST_NAME)
   
  -all: $(LIB_NAME)
  -
   .c.o:
  -	$(CC) $(CFLAGS) -c $<
  +	@$(CC) $(CPPFLAGS) $(CFLAGS) -c $<
  +
  +.c.lo:
  +	@$(LIBTOOL) --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS) -c $<
   
   $(LIB_NAME): $(LIB_OBJS)
  -	$(AR) rc $(LIB_NAME) $(LIB_OBJS)
  -	$(RANLIB) $(LIB_NAME)
  +	@$(LIBTOOL) --mode=link $(CC) -o $(LIB_NAME) $(LIB_OBJS) -rpath $(libdir) \
  +	    -version-info `$(SHTOOL) version -l txt -d libtool VERSION`
   
  -$(PRG_NAME): $(PRG_OBJS) $(LIB_NAME)
  -	$(CC) $(LDFLAGS) -o $(PRG_NAME) $(PRG_OBJS) $(LIB_NAME) $(LIBS)
  +$(TST_NAME): $(TST_OBJS)
  +	@$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $(TST_NAME) $(TST_OBJS) $(LIB_NAME) $(LIBS)
   
  -check: $(PRG_NAME)
  -	./$(PRG_NAME)
  +check: $(TST_NAME)
  +	@$(LIBTOOL) --mode=execute ./$(TST_NAME)
   
  -clean: 
  -	$(RM) $(LIB_NAME) $(LIB_OBJS)
  -	$(RM) $(PRG_NAME) $(PRG_OBJS)
  +install:
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libdir)
  +	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libsa.la $(DESTDIR)$(libdir)/
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(includedir)
  +	$(SHTOOL) install -c -m 644 sa.h $(DESTDIR)$(includedir)/
  +
  +clean:
  +	-$(RM) $(LIB_NAME) $(LIB_OBJS)
  +	-$(RM) $(TST_NAME) $(TST_OBJS)
  +	-$(RM) -r .libs >/dev/null 2>&1
  +	-$(RM) *.o *.lo
   
   distclean: clean
  -	$(RM) config.cache config.log config.status
  -	$(RM) config.h
  -	$(RM) Makefile
  +	-$(RM) config.log config.status config.cache
  +	-$(RM) Makefile config.h
  +	-$(RM) libtool
   
   realclean: distclean
  -	$(RM) config.h.in configure
  -
  -install:
  +	-$(RM) configure config.h.in
  +	-$(RM) shtool
  +	-$(RM) ltmain.sh libtool.m4 config.guess config.sub
  +
  +version:
  +	$(SHTOOL) version -l txt -e VERSION
  +
  +dist: distclean
  +	@$(SHTOOL) fixperm -v .; \
  +	V=`$(SHTOOL) version -l txt -d short VERSION`; \
  +	$(SHTOOL) tarball -o sa-$${V}.tar.gz -d sa-$${V} -u ossp -g ossp \
  +	                  -e 'CVS,\.cvsignore,\.[ao],^\.,autogen.sh' -c 'gzip --best' .
   
  Index: ossp-pkg/sa/autogen.sh
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 autogen.sh
  --- ossp-pkg/sa/autogen.sh	2001/10/02 13:27:44	1.1.1.1
  +++ ossp-pkg/sa/autogen.sh	2001/10/02 18:37:19	1.2
  @@ -1,10 +1,10 @@
   #!/bin/sh
   
   #   generator tools version sanity check
  -#    "libtoolize --version 4 1.4.2 1.4*"
  -#    "shtoolize  -v        3 1.5.4 1.5.*"
   for spec in \
  -    "autoconf   --version 4 2.52  2.5*"
  +    "autoconf   --version 4 2.52  2.5*" \
  +    "libtoolize --version 4 1.4.2 1.4*" \
  +    "shtoolize  -v        3 1.5.4 1.5.*"
   do
       set -- $spec
       t="$1"
  @@ -31,10 +31,10 @@
   done
   
   #   GNU Libtool generation
  -# echo "GNU Libtool $libtoolize_version -> ltmain.sh, libtool.m4, config.guess, config.sub"
  -# libtoolize --force --copy >/dev/null 2>&1
  -# cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
  -#     sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` libtool.m4
  +echo "GNU Libtool $libtoolize_version -> ltmain.sh, libtool.m4, config.guess, config.sub"
  +libtoolize --force --copy >/dev/null 2>&1
  +cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
  +    sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` libtool.m4
   
   #   GNU Autoconf generation
   echo "GNU Autoconf $autoconf_version -> configure, config.h.in"
  @@ -42,6 +42,6 @@
   autoheader
   
   #   GNU Shtool generation
  -# echo "GNU Shtool $shtoolize_version -> shtool"
  -# shtoolize -q all
  +echo "GNU Shtool $shtoolize_version -> shtool"
  +shtoolize -q all
   
  Index: ossp-pkg/sa/configure.ac
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 configure.ac
  --- ossp-pkg/sa/configure.ac	2001/10/02 13:27:44	1.1.1.1
  +++ ossp-pkg/sa/configure.ac	2001/10/02 18:37:19	1.2
  @@ -1,26 +1,52 @@
   dnl ##
  -dnl ##  Autoconf specification for SA library
  +dnl ##  SA - OSSP Socket Abstraction Library
  +dnl ##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  +dnl ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   dnl ##
  +dnl ##  This file is part of OSSP SA, a socket abstraction library which
  +dnl ##  can be found at http://www.ossp.org/pkg/sa/.
  +dnl ##
  +dnl ##  Permission to use, copy, modify, and distribute this software for
  +dnl ##  any purpose with or without fee is hereby granted, provided that
  +dnl ##  the above copyright notice and this permission notice appear in all
  +dnl ##  copies.
  +dnl ##
  +dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +dnl ##  SUCH DAMAGE.
  +dnl ##
  +dnl ##  configure.ac: GNU Autoconf source script
  +dnl ##
   
  -AC_PREREQ(2.52)dnl
  +AC_PREREQ(2.52)
   AC_REVISION(1.0)
  +AC_INIT(sa.h)
   
  -AC_INIT(README)
  -AC_PREFIX_DEFAULT(/usr/local)
  -AC_CONFIG_HEADER(config.h)
  +AC_DIVERT_PUSH(NOTICE)
  +V=`./shtool version -l txt -d long VERSION`
  +./shtool echo -e "Configuring %BOSSP SA%b, Version %B${V}%b"
  +AC_DIVERT_POP()
   
   AC_SET_MAKE
   AC_PROG_CC
  -AC_PROG_CPP
  -AC_CHECK_PROG(AR, ar, ar)
  -AC_PROG_RANLIB
  -
   AC_CHECK_DEBUGGING
   
  +sinclude(libtool.m4)
  +AC_PROG_LIBTOOL
  +
   sinclude(sa.ac)
   AC_CHECK_SA
   
  -AC_OUTPUT(dnl
  -Makefile dnl
  -)dnl
  +AC_CONFIG_HEADERS(config.h)
  +AC_CONFIG_FILES(Makefile)
  +AC_OUTPUT
   
  Index: ossp-pkg/sa/sa_test.c
  ============================================================
  $ cvs update -p -r1.1 sa_test.c
  
  #include <stdio.h>
  #include <stdlib.h>
  #include <stdarg.h>
  #include <time.h>
  #include <syslog.h>
  #include <sys/utsname.h>
  
  #include "sa.h"
  
  /* see RFC3164 */
  
  static void die(char *fmt, ...)
  {
      va_list ap;
  
      va_start(ap, fmt);
      fprintf(stderr, "test:ERROR: ");
      vfprintf(stderr, fmt, ap);
      fprintf(stderr, "\n");
      va_end(ap);
      exit(1);
  }
  
  int main(int argc, char *argv[]) 
  {
      sa_addr_t *ra;
      sa_addr_t *la;
      sa_t *sa;
      char caBuf[1024];
      int nBuf;
      char caTime[15+1];
      time_t now;
      struct tm *tm;
      char caHost;
      struct utsname uts;
      char *cp;
      char caTag[32+1];
      char *cpHost;
      int n;
  
      if (sa_u2a(&ra, "udp://%s:514", argv[1]) != SA_OK)
          die("sa_u2a ra");
      if (sa_u2a(&la, "udp://0.0.0.0:0") != SA_OK)
          die("sa_u2a la");
      if (sa_create(&sa) != SA_OK)
          die("sa_create");
      if (sa_bind(sa, la) != SA_OK)
          die("sa_bind");
  
      /* RFC3164: The BSD syslog Protocol; C. Lonvick; August 2001. */
  
      now = time(NULL);
      tm = localtime(&now);
      strftime(caTime, sizeof(caTime), "%b %e %H:%M:%S", tm);
  
      if (uname(&uts) == 0) {
          cpHost = strdup(uts.nodename);
          if ((cp = strchr(cpHost, '.')) != NULL)
              *cp = '\0';
      }
      else
          cpHost = strdup("0.0.0.0"); /* FIXME */
  
      strcpy(caTag, "progname[12]: ");
      if (strlen(caTag) > 32)
          caTag[32] = '\0';
  
      sprintf(caBuf, "<%d>%s %s %s%s", LOG_MAIL|LOG_EMERG, caTime, cpHost, caTag, argv[2]);
      fprintf(stderr, "%s\n", caBuf);
      nBuf = strlen(caBuf);
      if (sa_writeto(sa, caBuf, nBuf, &n, ra) != SA_OK)
          die("sa_writeto");
      if (sa_destroy(sa) != SA_OK)
          die("sa_destroy");
      free(ra);
      free(la);
      return 0;
  }
  
  

From ossp-cvs-owner@ossp.org  Tue Oct  2 20:41:56 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f92Iftr44167; Tue, 2 Oct 2001 20:41:55 +0200 (CEST)
Date: Tue, 2 Oct 2001 20:41:55 +0200 (CEST)
Message-Id: <200110021841.f92Iftr44167@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   02-Oct-2001 20:41:55
  Branch: HEAD                             Handle: 2001100219415400

  Modified files:
    ossp-pkg/sa             sa.pod

  Log:
    do not forget sa_rc_t and sa_getfd()

  Summary:
    Revision    Changes     Path
    1.2         +5  -1      ossp-pkg/sa/sa.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.pod
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 sa.pod
  --- ossp-pkg/sa/sa.pod	2001/10/02 13:27:45	1.1.1.1
  +++ ossp-pkg/sa/sa.pod	2001/10/02 18:41:54	1.2
  @@ -40,7 +40,8 @@
   =item B<Abstract Data Types>:
   
   sa_addr_t,
  -sa_t.
  +sa_t,
  +sa_rc_t.
   
   =item B<Address Operations>:
   
  @@ -67,6 +68,7 @@
   sa_accept,  
   sa_getremote,
   sa_getlocal,
  +sa_getfd,
   sa_shutdown.
   
   =item B<Input/Output Operations>:
  @@ -184,6 +186,8 @@
   =item sa_rc_t B<sa_getremote>(sa_t *I<sa>, sa_addr_t **I<raddr>);
   
   =item sa_rc_t B<sa_getlocal>(sa_t *I<sa>, sa_addr_t **I<laddr>);
  +
  +=item sa_rc_t B<sa_getfd>(sa_t *I<sa>, int *I<fd>);
   
   =item sa_rc_t B<sa_shutdown>(sa_t *I<sa>, char *I<flags>);
   

From ossp-cvs-owner@ossp.org  Tue Oct  2 20:47:49 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f92Illi44801; Tue, 2 Oct 2001 20:47:47 +0200 (CEST)
Date: Tue, 2 Oct 2001 20:47:47 +0200 (CEST)
Message-Id: <200110021847.f92Illi44801@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   02-Oct-2001 20:47:47
  Branch: HEAD                             Handle: 2001100219474700

  Modified files:
    ossp-pkg/sa             sa.pod

  Log:
    remember SA history

  Summary:
    Revision    Changes     Path
    1.3         +8  -0      ossp-pkg/sa/sa.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.pod
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 sa.pod
  --- ossp-pkg/sa/sa.pod	2001/10/02 18:41:54	1.2
  +++ ossp-pkg/sa/sa.pod	2001/10/02 18:47:47	1.3
  @@ -213,6 +213,14 @@
   
   =back
   
  +=head1 HISTORY
  +
  +B<OSSP sa> was invented in August 2001 by Ralf S. Engelschall for use
  +inside the OSSP project. Its creation was prompted by the requirement
  +to implement an SMTP logging channel for B<OSSP l2> (logging library).
  +Its initial code was derived from a predecessor sub-library originally
  +written for socket address abstraction inside B<OSSP lmtp2nntp>.
  +
   =head1 AUTHORS
   
    Ralf S. Engelschall

From ossp-cvs-owner@ossp.org  Wed Oct  3 21:40:33 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f93JeWc13473; Wed, 3 Oct 2001 21:40:32 +0200 (CEST)
Date: Wed, 3 Oct 2001 21:40:32 +0200 (CEST)
Message-Id: <200110031940.f93JeWc13473@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c sa.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   03-Oct-2001 21:40:32
  Branch: HEAD                             Handle: 2001100320403100

  Modified files:
    ossp-pkg/sa             sa.c sa.h

  Log:
    - Use an own minimal snprintf(3)
    - Rename sa_printf to sa_writef

  Summary:
    Revision    Changes     Path
    1.2         +77 -28     ossp-pkg/sa/sa.c
    1.3         +3  -1      ossp-pkg/sa/sa.h
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 sa.c
  --- ossp-pkg/sa/sa.c	2001/10/02 13:27:44	1.1.1.1
  +++ ossp-pkg/sa/sa.c	2001/10/03 19:40:31	1.2
  @@ -129,39 +129,66 @@
   #error "neither inet_ntop nor inet_ntoa available"
   #endif
   
  -/* make sure vsnprintf() exists */
  -#if defined(HAVE_VSNPRINTF)
  -#define sa_vsnprintf vsnprintf
  -#elif defined(HAVE_VSPRINTF)
  -static int sa_vsnprintf(char *str, size_t size, const char *fmt, va_list ap)
  +/* minimal vsnprintf(3) */
  +static int sa_mvsnprintf(char *buffer, size_t bufsize, const char *format, va_list ap)
   {
  -    int rv;
  -    
  -    rv = vsprintf(str, fmt, ap);
  -    if (rv > size) {
  -        fprintf(stderr, "ERROR: vsprintf(3) buffer overflow!\n");
  -        abort();
  +    char *bufptr;
  +    char *bufend;
  +    char ibuf[((sizeof(int)*8)/3)+10]; /* (available bits) x log_10(2) + safety */
  +    char *cp;
  +    char c;
  +    int d;
  +    int n;
  +
  +    bufptr = buffer;
  +    bufend = buffer + bufsize - 1;
  +    while ((c = *format++) != '\0' && bufptr < bufend) {
  +        if (c == '%') {
  +            c = *format++;
  +            if (c == '%')
  +                *bufptr++ = c;
  +            else if (c == 'c')
  +                *bufptr++ = (char)va_arg(ap, int);
  +            else if (c == 's') {
  +                if ((cp = (char *)va_arg(ap, char *)) == NULL)
  +                    cp = "(null)";
  +                n = strlen(cp);
  +                if ((bufptr + n) > bufend)
  +                    n = bufend - bufptr;
  +                memcpy(bufptr, cp, n);
  +                bufptr += n;
  +            }
  +            else if (c == 'd') {
  +                d = (int)va_arg(ap, int);
  +                sprintf(ibuf, "%d", d);
  +                n = strlen(ibuf);
  +                memcpy(bufptr, ibuf, n);
  +                bufptr += n;
  +            }
  +            else {
  +                *bufptr++ = '%';
  +                if (bufptr < bufend)
  +                    *bufptr++ = c;
  +            }
  +        }
  +        else
  +            *bufptr++ = c;
       }
  +    *bufptr = '\0';
  +    return (bufptr - buffer);
   }
  -#else
  -#error "neither vsnprintf nor vsprintf available"
  -#endif
   
  -/* make sure snprintf() exists */
  -#if defined(HAVE_SNPRINTF)
  -#define sa_snprintf snprintf
  -#else
  -static int sa_snprintf(char *str, size_t size, const char *fmt, ...)
  +/* minimal snprintf(3) */
  +static int sa_msnprintf(char *buffer, size_t bufsize, const char *format, ...)
   {
  +    int chars;
       va_list ap;
  -    int rv;
   
  -    va_start(ap, fmt);
  -    rv = sa_vsnprintf(str, size, fmt, ap);
  +    va_start(ap, format);
  +    chars = sa_mvsnprintf(buffer, bufsize, format, ap);
       va_end(ap);
  -    return rv;
  +    return chars;
   }
  -#endif
   
   sa_rc_t sa_u2a(sa_addr_t **saa, const char *uri, ...)
   {
  @@ -192,7 +219,7 @@
   
       /* on-the-fly create or just take over URI */
       va_start(ap, uri);
  -    sa_vsnprintf(uribuf, sizeof(uribuf), uri, ap);
  +    sa_mvsnprintf(uribuf, sizeof(uribuf), uri, ap);
       va_end(ap);
   
       /* parse URI into protocol, host and port parts */
  @@ -369,7 +396,7 @@
   #endif
       else
           return SA_ERR_ARG;
  -    sa_snprintf(uribuf, sizeof(uribuf), "%s://%s:%d", pe->p_name, caHost, nPort);
  +    sa_msnprintf(uribuf, sizeof(uribuf), "%s://%s:%d", pe->p_name, caHost, nPort);
       *uri = strdup(uribuf);
       return SA_OK;
   }
  @@ -490,6 +517,28 @@
       return SA_OK;
   }
   
  +sa_rc_t sa_getoption(sa_t *sa, int optname, void *optval, socklen_t *optlen)
  +{
  +    if (sa == NULL)
  +        return SA_ERR_ARG;
  +    if (sa->sSocket == -1)
  +        return SA_ERR_USE;
  +    if (getsockopt(sa->sSocket, SOL_SOCKET, optname, optval, optlen) == -1)
  +        return SA_ERR_SYS;
  +    return SA_OK;
  +}
  +
  +sa_rc_t sa_setoption(sa_t *sa, int optname, const void *optval, socklen_t optlen)
  +{
  +    if (sa == NULL)
  +        return SA_ERR_ARG;
  +    if (sa->sSocket == -1)
  +        return SA_ERR_USE;
  +    if (setsockopt(sa->sSocket, SOL_SOCKET, optname, optval, optlen) == -1)
  +        return SA_ERR_SYS;
  +    return SA_OK;
  +}
  +
   sa_rc_t sa_bind(sa_t *sa, sa_addr_t *laddr)
   {
       sa_rc_t rv;
  @@ -905,7 +954,7 @@
       return SA_OK;
   }
   
  -sa_rc_t sa_printf(sa_t *sa, const char *cpFmt, ...)
  +sa_rc_t sa_writef(sa_t *sa, const char *cpFmt, ...)
   {
       va_list ap;
       size_t n;
  @@ -914,7 +963,7 @@
       if (sa == NULL)
           return SA_ERR_ARG;
       va_start(ap, cpFmt);
  -    n = sa_vsnprintf(caBuf, sizeof(caBuf), cpFmt, ap);
  +    n = sa_mvsnprintf(caBuf, sizeof(caBuf), cpFmt, ap);
       sa_write(sa, caBuf, n, &n);
       va_end(ap);
       return SA_OK;
  Index: ossp-pkg/sa/sa.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 sa.h
  --- ossp-pkg/sa/sa.h	2001/10/02 14:12:27	1.2
  +++ ossp-pkg/sa/sa.h	2001/10/03 19:40:31	1.3
  @@ -105,6 +105,8 @@
   /* parameter operations */
   sa_rc_t sa_timeout  (sa_t *sa, long sec, long usec);
   sa_rc_t sa_buffers  (sa_t *sa, size_t rsize, size_t wsize);
  +sa_rc_t sa_getoption(sa_t *sa, int optname, void *optval, socklen_t *optlen);
  +sa_rc_t sa_setoption(sa_t *sa, int optname, const void *optval, socklen_t optlen);
   
   /* connection operations */
   sa_rc_t sa_bind     (sa_t *sa, sa_addr_t *laddr);
  @@ -122,7 +124,7 @@
   sa_rc_t sa_readline (sa_t *sa, char *buf, size_t buflen, size_t *bufdone);
   sa_rc_t sa_write    (sa_t *sa, const char *buf, size_t buflen, size_t *bufdone);
   sa_rc_t sa_writeto  (sa_t *sa, const char *buf, size_t buflen, size_t *bufdone, sa_addr_t *raddr);
  -sa_rc_t sa_printf   (sa_t *sa, const char *fmt, ...);
  +sa_rc_t sa_writef   (sa_t *sa, const char *fmt, ...);
   sa_rc_t sa_flush    (sa_t *sa);
   
   #endif /* __SA_H__ */

From ossp-cvs-owner@ossp.org  Thu Oct  4 11:51:09 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f949p8510509; Thu, 4 Oct 2001 11:51:08 +0200 (CEST)
Date: Thu, 4 Oct 2001 11:51:08 +0200 (CEST)
Message-Id: <200110040951.f949p8510509@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp configure.ac
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   04-Oct-2001 11:51:08
  Branch: HEAD                             Handle: 2001100410510700

  Modified files:
    ossp-pkg/lmtp2nntp      configure.ac

  Log:
    SA now using libtool

  Summary:
    Revision    Changes     Path
    1.14        +1  -1      ossp-pkg/lmtp2nntp/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/configure.ac
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 configure.ac
  --- ossp-pkg/lmtp2nntp/configure.ac	2001/10/02 13:36:33	1.13
  +++ ossp-pkg/lmtp2nntp/configure.ac	2001/10/04 09:51:07	1.14
  @@ -75,7 +75,7 @@
                   [SUBDIR_SA="sa"
                    CPPFLAGS="$CPPFLAGS -Isa"
                    CFLAGS="$CFLAGS -Isa"
  -                 LDFLAGS="$LDFLAGS -Lsa"
  +                 LDFLAGS="$LDFLAGS -Lsa/.libs"
                    LIBS_EXTRA="$LIBS_EXTRA -lsa"])
   AC_SUBST(SUBDIR_SA)
   

From ossp-cvs-owner@ossp.org  Thu Oct  4 12:57:24 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f94AvMr18041; Thu, 4 Oct 2001 12:57:22 +0200 (CEST)
Date: Thu, 4 Oct 2001 12:57:22 +0200 (CEST)
Message-Id: <200110041057.f94AvMr18041@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp daemon.c daemon.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-Oct-2001 12:57:22
  Branch: HEAD                             Handle: 2001100411572200

  Added files:
    ossp-pkg/lmtp2nntp      daemon.c daemon.h

  Log:
    add daemon support code

  Summary:
    Revision    Changes     Path
    1.1         +120 -0     ossp-pkg/lmtp2nntp/daemon.c
    1.1         +6  -0      ossp-pkg/lmtp2nntp/daemon.h
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/daemon.c
  ============================================================
  $ cvs update -p -r1.1 daemon.c
  /*
  **  daemon.c -- daemonize current process 
  **  Copyright (c) 1999-2000 Ralf S. Engelschall, All Rights Reserved. 
  **
  **  See "Unix Programming Frequently Asked Questions":
  **  http://www.erlenstar.demon.co.uk/unix/faq_2.html#SEC10
  */
  
  #include <fcntl.h>
  #include <unistd.h>
  #include <signal.h>
  #include <sys/stat.h>
  #include <sys/ioctl.h>
  
  #include "daemon.h"
  
  int daemonize(int nochdir, int noclose)
  {
      int fd;
      int rc;
  
      /* 
       * if we are started from init, 
       * no need to become daemon.
       */
  #if 0
      if (getppid() == 1)
          return;
  #endif
  
      /*
       * Ignore tty related signals
       */
  #ifdef  SIGTTOU
      signal(SIGTTOU, SIG_IGN);
  #endif
  #ifdef  SIGTTIN
      signal(SIGTTIN, SIG_IGN);
  #endif
  #ifdef  SIGTSTP
      signal(SIGTSTP, SIG_IGN);
  #endif
  
      /*
       * fork so the parent can exit, this returns control to the command line
       * or shell invoking your program. This step is required so that the new
       * process is guaranteed not to be a process group leader (The next step,
       * setsid, would fail if you're a process group leader). 
       */
      rc = fork();
      switch (rc) {
          case -1: return -1;
          case 0:  break;
          default: _exit(0); /* exit original process */
      }
  
      /*
       * setsid to become a process group and session group leader. Since a
       * controlling terminal is associated with a session, and this new session
       * has not yet acquired a controlling terminal our process now has no
       * controlling terminal, which is a Good Thing for daemons. 
       */
  #ifdef HAVE_SETSID
      if (setsid() == -1)
          return -1;
  #else
      if (setpgid(0, getpid()) == -1)
          return -1;
  #ifndef _PATH_TTY
  #define _PATH_TTY "/dev/tty"
  #endif
      if ((fd = open(_PATH_TTY, O_RDWR)) == -1) 
          return -1;
      ioctl(fd, TIOCNOTTY, NULL);
      close(fd);
  #endif
  
      /*
       * fork again so the parent, (the session group leader), can exit. This
       * means that we, as a non-session group leader, can never regain a
       * controlling terminal. 
       */
      rc = fork();
      switch (rc) {
          case -1: return -1;
          case 0:  break;
          default: _exit(0); /* exit original process */
      }
  
      /*
       * chdir("/") to ensure that our process doesn't keep any directory in
       * use. Failure to do this could make it so that an administrator couldn't
       * unmount a filesystem, because it was our current directory.
       * [Equivalently, we could change to any directory containing files
       * important to the daemon's operation.] 
       */
      if (!nochdir)
          chdir("/");
  
      /*
       * give us complete control over the permissions of anything we write. We
       * don't know what umask we may have inherited.  [This step is optional] 
       */
      umask(0);
  
      /*
       * close fds 0, 1, and 2. This releases the standard in, out, and error we
       * inherited from our parent process. We have no way of knowing where
       * these fds might have been redirected to. 
       */
      if (!noclose && (fd = open("/dev/null", O_RDWR, 0)) != -1) {
          dup2(fd, STDIN_FILENO);
          dup2(fd, STDOUT_FILENO);
          dup2(fd, STDERR_FILENO);
          if (fd > 2)
              close(fd);
      }
      return 0;
  }
  
  Index: ossp-pkg/lmtp2nntp/daemon.h
  ============================================================
  $ cvs update -p -r1.1 daemon.h
  #ifndef _DAEMON_H_
  #define _DAEMON_H_
  
  int daemonize(int, int);
  
  #endif /* _DAEMON_H_ */

From ossp-cvs-owner@ossp.org  Thu Oct  4 13:00:40 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f94B0d318624; Thu, 4 Oct 2001 13:00:39 +0200 (CEST)
Date: Thu, 4 Oct 2001 13:00:39 +0200 (CEST)
Message-Id: <200110041100.f94B0d318624@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp daemon.c daemon.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-Oct-2001 13:00:39
  Branch: HEAD                             Handle: 2001100412003800

  Modified files:
    ossp-pkg/lmtp2nntp      daemon.c daemon.h

  Log:
    make it easier for our situation

  Summary:
    Revision    Changes     Path
    1.2         +3  -6      ossp-pkg/lmtp2nntp/daemon.c
    1.2         +1  -1      ossp-pkg/lmtp2nntp/daemon.h
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/daemon.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 daemon.c
  --- ossp-pkg/lmtp2nntp/daemon.c	2001/10/04 10:57:22	1.1
  +++ ossp-pkg/lmtp2nntp/daemon.c	2001/10/04 11:00:38	1.2
  @@ -14,7 +14,7 @@
   
   #include "daemon.h"
   
  -int daemonize(int nochdir, int noclose)
  +int daemonize(void)
   {
       int fd;
       int rc;
  @@ -23,10 +23,8 @@
        * if we are started from init, 
        * no need to become daemon.
        */
  -#if 0
       if (getppid() == 1)
           return;
  -#endif
   
       /*
        * Ignore tty related signals
  @@ -94,8 +92,7 @@
        * [Equivalently, we could change to any directory containing files
        * important to the daemon's operation.] 
        */
  -    if (!nochdir)
  -        chdir("/");
  +    chdir("/");
   
       /*
        * give us complete control over the permissions of anything we write. We
  @@ -108,7 +105,7 @@
        * inherited from our parent process. We have no way of knowing where
        * these fds might have been redirected to. 
        */
  -    if (!noclose && (fd = open("/dev/null", O_RDWR, 0)) != -1) {
  +    if ((fd = open("/dev/null", O_RDWR, 0)) != -1) {
           dup2(fd, STDIN_FILENO);
           dup2(fd, STDOUT_FILENO);
           dup2(fd, STDERR_FILENO);
  Index: ossp-pkg/lmtp2nntp/daemon.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 daemon.h
  --- ossp-pkg/lmtp2nntp/daemon.h	2001/10/04 10:57:22	1.1
  +++ ossp-pkg/lmtp2nntp/daemon.h	2001/10/04 11:00:38	1.2
  @@ -1,6 +1,6 @@
   #ifndef _DAEMON_H_
   #define _DAEMON_H_
   
  -int daemonize(int, int);
  +int daemonize(void);
   
   #endif /* _DAEMON_H_ */

From ossp-cvs-owner@ossp.org  Thu Oct  4 13:05:00 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f94B50519202; Thu, 4 Oct 2001 13:05:00 +0200 (CEST)
Date: Thu, 4 Oct 2001 13:05:00 +0200 (CEST)
Message-Id: <200110041105.f94B50519202@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-Oct-2001 13:05:00
  Branch: HEAD                             Handle: 2001100412045900

  Modified files:
    ossp-pkg/sa             sa_test.c

  Log:
    reduce warnings

  Summary:
    Revision    Changes     Path
    1.2         +1  -2      ossp-pkg/sa/sa_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa_test.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 sa_test.c
  --- ossp-pkg/sa/sa_test.c	2001/10/02 18:37:19	1.1
  +++ ossp-pkg/sa/sa_test.c	2001/10/04 11:04:59	1.2
  @@ -32,7 +32,6 @@
       char caTime[15+1];
       time_t now;
       struct tm *tm;
  -    char caHost;
       struct utsname uts;
       char *cp;
       char caTag[32+1];
  @@ -69,7 +68,7 @@
       sprintf(caBuf, "<%d>%s %s %s%s", LOG_MAIL|LOG_EMERG, caTime, cpHost, caTag, argv[2]);
       fprintf(stderr, "%s\n", caBuf);
       nBuf = strlen(caBuf);
  -    if (sa_writeto(sa, caBuf, nBuf, &n, ra) != SA_OK)
  +    if (sa_writeto(sa, caBuf, nBuf, (size_t *)&n, ra) != SA_OK)
           die("sa_writeto");
       if (sa_destroy(sa) != SA_OK)
           die("sa_destroy");

From ossp-cvs-owner@ossp.org  Thu Oct  4 13:25:46 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f94BPiO21311; Thu, 4 Oct 2001 13:25:44 +0200 (CEST)
Date: Thu, 4 Oct 2001 13:25:44 +0200 (CEST)
Message-Id: <200110041125.f94BPiO21311@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa TODO sa.c sa.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-Oct-2001 13:25:44
  Branch: HEAD                             Handle: 2001100412254400

  Modified files:
    ossp-pkg/sa             TODO sa.c sa.h

  Log:
    Change sa_addr_t API:
    - there is now a constructor and destructor
    - renamed sa_x2x functions to sa_addr_x2x

  Summary:
    Revision    Changes     Path
    1.2         +0  -1      ossp-pkg/sa/TODO
    1.3         +59 -28     ossp-pkg/sa/sa.c
    1.4         +33 -29     ossp-pkg/sa/sa.h
  ____________________________________________________________________________

  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 TODO
  --- ossp-pkg/sa/TODO	2001/10/02 13:27:45	1.1.1.1
  +++ ossp-pkg/sa/TODO	2001/10/04 11:25:44	1.2
  @@ -13,5 +13,4 @@
   - Unix domain sockets support
   - aufpassen dasz fuer read/write STREAM socket ist
   - aufpassen dasz fuer readfrom/writeto DGRAM socket ist
  -- destructor fuer sa_addr_t?
   
  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 sa.c
  --- ossp-pkg/sa/sa.c	2001/10/03 19:40:31	1.2
  +++ ossp-pkg/sa/sa.c	2001/10/04 11:25:44	1.3
  @@ -190,8 +190,31 @@
       return chars;
   }
   
  -sa_rc_t sa_u2a(sa_addr_t **saa, const char *uri, ...)
  +sa_rc_t sa_addr_create(sa_addr_t **saa)
   {
  +    if (saa == NULL)
  +        return SA_ERR_ARG;
  +    if ((*saa = (sa_addr_t *)malloc(sizeof(sa_addr_t))) == NULL)
  +        return SA_ERR_MEM;
  +    (*saa)->saBuf   = NULL;
  +    (*saa)->slBuf   = 0;
  +    (*saa)->nFamily = 0;
  +    (*saa)->nProto   = 0;
  +    return SA_OK;
  +}
  +
  +sa_rc_t sa_addr_destroy(sa_addr_t *saa)
  +{
  +    if (saa == NULL)
  +        return SA_ERR_ARG;
  +    if (saa->saBuf != NULL)
  +        free(saa->saBuf);
  +    free(saa);
  +    return SA_OK;
  +}
  +
  +sa_rc_t sa_addr_u2a(sa_addr_t *saa, const char *uri, ...)
  +{
       va_list ap;
       int nPort;
       socklen_t sl;
  @@ -308,20 +331,16 @@
           return SA_ERR_ARG;
           
       /* create result address structure */
  -    if ((*saa = (sa_addr_t *)malloc(sizeof(sa_addr_t))) == NULL)
  +    if ((saa->saBuf = (struct sockaddr *)malloc(sl)) == NULL)
           return SA_ERR_MEM;
  -    if (((*saa)->saBuf = (struct sockaddr *)malloc(sl)) == NULL) {
  -        free(*saa);
  -        return SA_ERR_MEM;
  -    }
  -    memcpy((*saa)->saBuf, sa, sl);
  -    (*saa)->slBuf = sl;
  -    (*saa)->nFamily = sf;
  -    (*saa)->nProto = nProto;
  +    memcpy(saa->saBuf, sa, sl);
  +    saa->slBuf = sl;
  +    saa->nFamily = sf;
  +    saa->nProto = nProto;
       return SA_OK;
   }
   
  -sa_rc_t sa_s2a(sa_addr_t **saa, const struct sockaddr *sabuf, socklen_t salen)
  +sa_rc_t sa_addr_s2a(sa_addr_t *saa, const struct sockaddr *sabuf, socklen_t salen)
   {
       struct sockaddr_in *sa4;
   #ifdef AF_INET6
  @@ -334,14 +353,10 @@
           return SA_ERR_ARG;
   
       /* create result address structure */
  -    if ((*saa = (sa_addr_t *)malloc(sizeof(sa_addr_t))) == NULL)
  -        return SA_ERR_MEM;
  -    if (((*saa)->saBuf = (struct sockaddr *)malloc(salen)) == NULL) {
  -        free(*saa);
  +    if ((saa->saBuf = (struct sockaddr *)malloc(salen)) == NULL)
           return SA_ERR_MEM;
  -    }
  -    memcpy((*saa)->saBuf, sabuf, salen);
  -    (*saa)->slBuf = salen;
  +    memcpy(saa->saBuf, sabuf, salen);
  +    saa->slBuf = salen;
   
       /* fill in family */
       sf = 0;
  @@ -357,17 +372,17 @@
               sf = AF_INET6;
       }
   #endif
  -    (*saa)->nFamily = sf;
  +    saa->nFamily = sf;
   
       /* fill in protocol */
       if ((pe = getprotobyname("tcp")) != NULL)
  -        (*saa)->nProto = pe->p_proto;
  +        saa->nProto = pe->p_proto;
       else
  -        (*saa)->nProto = 0;
  +        saa->nProto = 0;
       return SA_OK;
   }
   
  -sa_rc_t sa_a2u(const sa_addr_t *saa, char **uri)
  +sa_rc_t sa_addr_a2u(sa_addr_t *saa, char **uri)
   {
       char uribuf[1024];
       struct protoent *pe;
  @@ -401,7 +416,7 @@
       return SA_OK;
   }
   
  -sa_rc_t sa_a2s(const sa_addr_t *saa, struct sockaddr **sabuf, socklen_t *salen)
  +sa_rc_t sa_addr_a2s(sa_addr_t *saa, struct sockaddr **sabuf, socklen_t *salen)
   {
       if (saa == NULL || sabuf == NULL || salen == 0)
           return SA_ERR_ARG;
  @@ -674,10 +689,14 @@
       sa_len = sizeof(sa_buf);
       if ((s = accept(sa->sSocket, (struct sockaddr *)&sa_buf, &sa_len)) == -1)
           return SA_ERR_SYS;
  -    if ((rv = sa_s2a(caddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK)
  +    if ((rv = sa_addr_create(caddr)) != SA_OK)
  +        return rv;
  +    if ((rv = sa_addr_s2a(*caddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK) {
  +        sa_addr_destroy(*caddr);
           return rv;
  +    }
       if ((rv = sa_create(csa)) != SA_OK) {
  -        free(*caddr);
  +        sa_addr_destroy(*caddr);
           return rv;
       }
       (*csa)->sSocket = s;
  @@ -700,8 +719,12 @@
       sa_len = sizeof(sa_buf);
       if (getpeername(sa->sSocket, (struct sockaddr *)&sa_buf, &sa_len) < 0)
           return SA_ERR_SYS;
  -    if ((rv = sa_s2a(raddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK)
  +    if ((rv = sa_addr_create(raddr)) != SA_OK)
           return rv;
  +    if ((rv = sa_addr_s2a(*raddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK) {
  +        sa_addr_destroy(*raddr);
  +        return rv;
  +    }
       return SA_OK;
   }
   
  @@ -721,8 +744,12 @@
       sa_len = sizeof(sa_buf);
       if (getsockname(sa->sSocket, (struct sockaddr *)&sa_buf, &sa_len) < 0)
           return SA_ERR_SYS;
  -    if ((rv = sa_s2a(laddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK)
  +    if ((rv = sa_addr_create(laddr)) != SA_OK)
  +        return rv;
  +    if ((rv = sa_addr_s2a(*laddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK) {
  +        sa_addr_destroy(*laddr);
           return rv;
  +    }
       return SA_OK;
   }
   
  @@ -842,8 +869,12 @@
       sa_len = sizeof(sa_buf);
       if ((n = recvfrom(sa->sSocket, buf, buflen, 0, (struct sockaddr *)&sa_buf, &sa_len)) == -1)
           return SA_ERR_SYS;
  -    if ((rv = sa_s2a(raddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK)
  +    if ((rv = sa_addr_create(raddr)) != SA_OK)
  +        return rv;
  +    if ((rv = sa_addr_s2a(*raddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK) {
  +        sa_addr_destroy(*raddr);
           return rv;
  +    }
       if (bufdone != NULL)
           *bufdone = n;
       return SA_OK;
  Index: ossp-pkg/sa/sa.h
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 sa.h
  --- ossp-pkg/sa/sa.h	2001/10/03 19:40:31	1.3
  +++ ossp-pkg/sa/sa.h	2001/10/04 11:25:44	1.4
  @@ -92,40 +92,44 @@
       SA_ERR_INT
   } sa_rc_t;
   
  +/* address object operations */
  +sa_rc_t sa_addr_create  (sa_addr_t **saa);
  +sa_rc_t sa_addr_destroy (sa_addr_t *saa);
  +
   /* address operations */
  -sa_rc_t sa_u2a      (sa_addr_t **saa, const char *uri, ...);
  -sa_rc_t sa_s2a      (sa_addr_t **saa, const struct sockaddr *sabuf, socklen_t salen);
  -sa_rc_t sa_a2u      (const sa_addr_t *saa, char **uri);
  -sa_rc_t sa_a2s      (const sa_addr_t *saa, struct sockaddr **sabuf, socklen_t *salen);
  +sa_rc_t sa_addr_u2a     (sa_addr_t *saa, const char *uri, ...);
  +sa_rc_t sa_addr_s2a     (sa_addr_t *saa, const struct sockaddr *sabuf, socklen_t salen);
  +sa_rc_t sa_addr_a2u     (sa_addr_t *saa, char **uri);
  +sa_rc_t sa_addr_a2s     (sa_addr_t *saa, struct sockaddr **sabuf, socklen_t *salen);
   
  -/* object operations */
  -sa_rc_t sa_create   (sa_t **sa);
  -sa_rc_t sa_destroy  (sa_t *sa);
  +/* socket object operations */
  +sa_rc_t sa_create       (sa_t **sa);
  +sa_rc_t sa_destroy      (sa_t *sa);
   
  -/* parameter operations */
  -sa_rc_t sa_timeout  (sa_t *sa, long sec, long usec);
  -sa_rc_t sa_buffers  (sa_t *sa, size_t rsize, size_t wsize);
  -sa_rc_t sa_getoption(sa_t *sa, int optname, void *optval, socklen_t *optlen);
  -sa_rc_t sa_setoption(sa_t *sa, int optname, const void *optval, socklen_t optlen);
  +/* socket parameter operations */
  +sa_rc_t sa_timeout      (sa_t *sa, long sec, long usec);
  +sa_rc_t sa_buffers      (sa_t *sa, size_t rsize, size_t wsize);
  +sa_rc_t sa_getoption    (sa_t *sa, int optname, void *optval, socklen_t *optlen);
  +sa_rc_t sa_setoption    (sa_t *sa, int optname, const void *optval, socklen_t optlen);
   
  -/* connection operations */
  -sa_rc_t sa_bind     (sa_t *sa, sa_addr_t *laddr);
  -sa_rc_t sa_connect  (sa_t *sa, sa_addr_t *raddr);
  -sa_rc_t sa_listen   (sa_t *sa, int backlog);
  -sa_rc_t sa_accept   (sa_t *sa, sa_addr_t **caddr, sa_t **csa);
  -sa_rc_t sa_getremote(sa_t *sa, sa_addr_t **raddr);
  -sa_rc_t sa_getlocal (sa_t *sa, sa_addr_t **laddr);
  -sa_rc_t sa_getfd    (sa_t *sa, int *fd);
  -sa_rc_t sa_shutdown (sa_t *sa, char *flags);
  +/* socket connection operations */
  +sa_rc_t sa_bind         (sa_t *sa, sa_addr_t *laddr);
  +sa_rc_t sa_connect      (sa_t *sa, sa_addr_t *raddr);
  +sa_rc_t sa_listen       (sa_t *sa, int backlog);
  +sa_rc_t sa_accept       (sa_t *sa, sa_addr_t **caddr, sa_t **csa);
  +sa_rc_t sa_getremote    (sa_t *sa, sa_addr_t **raddr);
  +sa_rc_t sa_getlocal     (sa_t *sa, sa_addr_t **laddr);
  +sa_rc_t sa_getfd        (sa_t *sa, int *fd);
  +sa_rc_t sa_shutdown     (sa_t *sa, char *flags);
   
  -/* input/output operations */
  -sa_rc_t sa_read     (sa_t *sa, char *buf, size_t buflen, size_t *bufdone);
  -sa_rc_t sa_readfrom (sa_t *sa, char *buf, size_t buflen, size_t *bufdone, sa_addr_t **raddr);
  -sa_rc_t sa_readline (sa_t *sa, char *buf, size_t buflen, size_t *bufdone);
  -sa_rc_t sa_write    (sa_t *sa, const char *buf, size_t buflen, size_t *bufdone);
  -sa_rc_t sa_writeto  (sa_t *sa, const char *buf, size_t buflen, size_t *bufdone, sa_addr_t *raddr);
  -sa_rc_t sa_writef   (sa_t *sa, const char *fmt, ...);
  -sa_rc_t sa_flush    (sa_t *sa);
  +/* socket input/output operations */
  +sa_rc_t sa_read         (sa_t *sa, char *buf, size_t buflen, size_t *bufdone);
  +sa_rc_t sa_readfrom     (sa_t *sa, char *buf, size_t buflen, size_t *bufdone, sa_addr_t **raddr);
  +sa_rc_t sa_readline     (sa_t *sa, char *buf, size_t buflen, size_t *bufdone);
  +sa_rc_t sa_write        (sa_t *sa, const char *buf, size_t buflen, size_t *bufdone);
  +sa_rc_t sa_writeto      (sa_t *sa, const char *buf, size_t buflen, size_t *bufdone, sa_addr_t *raddr);
  +sa_rc_t sa_writef       (sa_t *sa, const char *fmt, ...);
  +sa_rc_t sa_flush        (sa_t *sa);
   
   #endif /* __SA_H__ */
   

From ossp-cvs-owner@ossp.org  Thu Oct  4 14:34:43 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f94CYgh29286; Thu, 4 Oct 2001 14:34:42 +0200 (CEST)
Date: Thu, 4 Oct 2001 14:34:42 +0200 (CEST)
Message-Id: <200110041234.f94CYgh29286@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_pipe.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   04-Oct-2001 14:34:42
  Branch: HEAD                             Handle: 2001100413344100

  Modified files:
    ossp-pkg/l2             l2_ch_pipe.c

  Log:
    Bug fixes and new child process blocking with oneshot mode.

  Summary:
    Revision    Changes     Path
    1.24        +33 -29     ossp-pkg/l2/l2_ch_pipe.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_pipe.c
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 l2_ch_pipe.c
  --- ossp-pkg/l2/l2_ch_pipe.c	2001/10/02 15:51:32	1.23
  +++ ossp-pkg/l2/l2_ch_pipe.c	2001/10/04 12:34:41	1.24
  @@ -62,7 +62,7 @@
   
       if (sig == SIGCHLD) {
           TRACE("SIGCHLD caught");
  -        Pid = waitpid(-1, &iStatus, WUNTRACED);
  +        Pid = waitpid(-1, &iStatus, WUNTRACED | WNOHANG);
           if (WIFEXITED(iStatus))
               TRACE("EXITED child");     /* child finished and returned       */
           else if (WIFSIGNALED(iStatus))
  @@ -314,28 +314,27 @@
       if (sigaction(SIGPIPE, &locact, &cfg->sigpipe) < 0)
           return L2_ERR_SYS;
   
  -    if (pipe(cfg->piFd) == -1)                /* open the pipe            */
  +    if (pipe(cfg->piFd) == -1) /* open the pipe */
           return L2_ERR_SYS;
   
       /* short circuit hack, if in oneshot mode and not yet opened then return */
       if ((cfg->iRtme == L2_PIPE_RUNTIME_ONESHOT) && (ch->state != L2_CHSTATE_OPENED))
           return L2_OK;
       else
  -        spawn_command(cfg); /* spawn the command process */
  -
  -    return L2_OK;
  +        return spawn_command(cfg); /* spawn the command process */
   }
   
   /* write to channel, possibly recursively */
   static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch,
                                 l2_level_t level, const char *buf, size_t buf_size)
   {
  -    l2_ch_pipe_t *cfg = (l2_ch_pipe_t *)ctx->vp;
  -    l2_result_t rv;
  +    l2_result_t   rv      = L2_OK;
  +    l2_ch_pipe_t *cfg     = (l2_ch_pipe_t *)ctx->vp;
   
  -    /* we must still spawn the child command process if we are in oneshot mode */
  -    if ((cfg->iRtme == L2_PIPE_RUNTIME_ONESHOT) && (cfg->Pid != -1))
  -        spawn_command(cfg);
  +    /* spawn the child command process if we are in oneshot mode */
  +    if ((cfg->iRtme == L2_PIPE_RUNTIME_ONESHOT) && (cfg->Pid == -1))
  +        if (spawn_command(cfg) != L2_OK)
  +            return L2_ERR_SYS; /* immediate return if we can't spawn command */
   
       /* write message to channel pipe */
       if (write(cfg->piFd[1], buf, buf_size) == -1) {
  @@ -346,29 +345,26 @@
                   return rv;
               return hook_write(ctx, ch, level, buf, buf_size);
           }
  -        else { /* not broken pipe problem or over the fail limit */
  -            cfg->iWritefail = 0; /* reset pipe failure counter   */
  -            return L2_ERR_SYS;
  +        else { /* not broken pipe problem or over the fail limit, so panic */
  +            cfg->iWritefail = 0;             /* reset pipe failure counter */
  +            rv = L2_ERR_SYS;
           }
       }
  -    else {                   /* write() to pipe succeeded  */
  +    else                     /* write() to pipe succeeded  */
           cfg->iWritefail = 0; /* reset pipe failure counter */
  -        return L2_OK;
  -    }
  +
  +    /* block until child terminates if in oneshot execmode */
  +    if ((cfg->iRtme == L2_PIPE_RUNTIME_ONESHOT) && (cfg->Pid != -1))
  +        cfg->Pid = waitpid(cfg->Pid, NULL, WUNTRACED | WNOHANG);
  +
  +    return rv;
   }
   
   /* close channel */
   static l2_result_t hook_close(l2_context_t *ctx, l2_channel_t *ch)
   {
  -    l2_ch_pipe_t *cfg = (l2_ch_pipe_t *)ctx->vp;
  -
  -    /* restore previous signal context, but only if it was saved and replaced */
  -    if (&cfg->sigchld.sa_handler) {
  -        if (sigaction(SIGCHLD, &cfg->sigchld, 0) < 0)
  -            return L2_ERR_SYS;
  -        if (sigaction(SIGPIPE, &cfg->sigpipe, 0) < 0)
  -            return L2_ERR_SYS;
  -    }
  +    l2_result_t   rv      = L2_OK;
  +    l2_ch_pipe_t *cfg     = (l2_ch_pipe_t *)ctx->vp;
   
       /* close null device */
       if (cfg->iNulldev != -1) {
  @@ -381,15 +377,23 @@
           close(cfg->piFd[1]);
           cfg->piFd[1] = -1;
       }
  +
  +    /* restore previous signal context, but only if it was saved and replaced */
  +    if (&cfg->sigchld.sa_handler) {
  +        if (sigaction(SIGCHLD, &cfg->sigchld, 0) < 0)
  +            rv = L2_ERR_SYS;
  +        if (sigaction(SIGPIPE, &cfg->sigpipe, 0) < 0)
  +            rv = L2_ERR_SYS;
  +    }
   
  -    /* kill child process if already started */
  +    /* kill child process if still running */
       if (cfg->Pid != -1) {
  -        if ((kill (cfg->Pid, SIGTERM)) && (errno != ESRCH))
  -            return L2_ERR_SYS;
  +        kill(cfg->Pid, SIGTERM);
  +        cfg->Pid = waitpid(cfg->Pid, NULL, WUNTRACED | WNOHANG);
           cfg->Pid = -1;
       }
   
  -    return L2_OK;
  +    return rv;
   }
   
   /* destroy channel */

From ossp-cvs-owner@ossp.org  Thu Oct  4 14:53:56 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f94Crtc31444; Thu, 4 Oct 2001 14:53:55 +0200 (CEST)
Date: Thu, 4 Oct 2001 14:53:55 +0200 (CEST)
Message-Id: <200110041253.f94Crtc31444@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_pipe.c l2_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   04-Oct-2001 14:53:55
  Branch: HEAD                             Handle: 2001100413535400

  Modified files:
    ossp-pkg/l2             l2_ch_pipe.c l2_test.c

  Log:
    Pipe and socket channel configuration-time parameter improvements.

  Summary:
    Revision    Changes     Path
    1.25        +9  -9      ossp-pkg/l2/l2_ch_pipe.c
    1.29        +9  -12     ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_pipe.c
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 l2_ch_pipe.c
  --- ossp-pkg/l2/l2_ch_pipe.c	2001/10/04 12:34:41	1.24
  +++ ossp-pkg/l2/l2_ch_pipe.c	2001/10/04 12:53:54	1.25
  @@ -37,7 +37,7 @@
   
   #define L2_PIPE_EXECMODE_DIRECT    1 /* direct command execution             */
   #define L2_PIPE_EXECMODE_SHELL     2 /* shell  command execution             */
  -#define L2_PIPE_RUNTIME_RELIABLE   3 /* reliable pipe command processing     */
  +#define L2_PIPE_RUNTIME_CONTINU    3 /* continuous pipe command processing   */
   #define L2_PIPE_RUNTIME_ONESHOT    4 /* oneshot  pipe command processing     */
   #define L2_PIPE_WRITEFAIL          6 /* how long before failure occurs       */
   #define L2_PIPE_MAXARGS          256 /* how many args can piped command have */
  @@ -49,7 +49,7 @@
       int              piFd[2];    /* pipe file descriptor                 */
       int              iNulldev;   /* null device file descriptor          */
       int              iMode;      /* execution mode direct or shell       */
  -    int              iRtme;      /* runtime mode reliable or oneshot     */
  +    int              iRtme;      /* runtime mode continuous or oneshot   */
       char            *szCmdpath;  /* path to command and arguments        */
       struct sigaction sigchld;    /* initial state of chld signal handler */
       struct sigaction sigpipe;    /* initial state of pipe signal handler */
  @@ -78,7 +78,7 @@
   /* 
    * The lifecycle of the command executed by the pipe channel handler
    * depends on the runtime option selected during configuration. The
  - * option 'reliable' describes subsequent behavior which rebuilds an
  + * option 'continuous' describes subsequent behavior which rebuilds an
    * (un)intentionally severed child-controlled pipe. In this case, when
    * the pipe handler encounters a failed write operation, it will attempt
    * the reconnection a user-defined number of times until failure is assumed.
  @@ -178,9 +178,9 @@
       char *szRel  = NULL;
   
       /* feed and call generic parameter parsing engine */
  -    L2_PARAM_SET(pa[0], execmode, CHARPTR, &szMode); /* mode direct or shell */
  -    L2_PARAM_SET(pa[1], runtime,  CHARPTR, &szRel);  /* reliable or oneshot  */
  -    L2_PARAM_SET(pa[2], path,     STRING,  &cfg->szCmdpath); /* path of cmd  */
  +    L2_PARAM_SET(pa[0], execmode, CHARPTR, &szMode); /* mode direct or shell  */
  +    L2_PARAM_SET(pa[1], runtime,  CHARPTR, &szRel);  /* continuous or oneshot */
  +    L2_PARAM_SET(pa[2], path,     STRING,  &cfg->szCmdpath); /* path of cmd   */
       L2_PARAM_END(pa[3]);
       if ((rv = l2_util_setparams(pa, fmt, ap)) != L2_OK)
           return rv;
  @@ -195,9 +195,9 @@
       }
   
       if (szRel != NULL) {
  -        if (strcmp(szRel, "reliable") == 0)
  -            cfg->iRtme = L2_PIPE_RUNTIME_RELIABLE;
  -        else if (strcmp(szMode, "oneshot") == 0)
  +        if (strncmp(szRel, "continuous", strlen("cont")) == 0)
  +            cfg->iRtme = L2_PIPE_RUNTIME_CONTINU;
  +        else if (strncmp(szMode, "oneshot", strlen("one")) == 0)
               cfg->iRtme = L2_PIPE_RUNTIME_ONESHOT;
           else
               return L2_ERR_ARG;
  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/09/28 14:28:41	1.28
  +++ ossp-pkg/l2/l2_test.c	2001/10/04 12:53:54	1.29
  @@ -29,12 +29,6 @@
   
   #include <stdio.h>
   
  -#include <sys/types.h>   /* following group of includes are for */
  -#include <sys/socket.h>  /* socket testing only                 */
  -#include <netinet/in.h>
  -#include <netdb.h>       /* TODO: probably can be removed */
  -#include <syslog.h>      /* TODO: probably can be removed */
  -
   #include "l2.h"
   
   static void die(char *fmt, ...)
  @@ -150,8 +144,11 @@
           die("failed to configure pipe channel");
   #endif
   
  -    if (l2_channel_configure(chPipe, "mode,path", "shell", "$CRONOLOGDIR/cronolog -o $HOME/tmp/crono.log") != L2_OK)
  -        die("failed to configure pipe channel");
  +    if (l2_channel_configure(chPipe, "execmode,path", "shell", "$CRONOLOGDIR/cronolog -o $HOME/tmp/crono.log") != L2_OK)
  +        die("failed to configure pipe channel due to mode and path parameters");
  +
  +    if (l2_channel_configure(chPipe, "runtime", "continuous") != L2_OK)
  +        die("failed to configure pipe channel due to continuous parameter");
   
       if (l2_channel_open(chPipe) != L2_OK)
           die("failed to open pipe channel");
  @@ -168,12 +165,12 @@
           die("failed to create socket channel");
   
       if (l2_channel_configure(chSock, "protocol,ipversion,host,port",\
  -        IPPROTO_TCP, AF_INET, "localhost", 2002) != L2_OK)
  -        die("failed to configure socket ipv4 channel");
  +        "tcp", "ipv4", "localhost", 2002) != L2_OK)
  +        die("failed to configure socket tcp/ipv4 channel");
   #if 0
       if (l2_channel_configure(chSock, "protocol,ipversion,host,port",\
  -          IPPROTO_TCP, AF_INET6, "0:0:0:0:0:0:0:1", 2002) != L2_OK)
  -          die("failed to configure socket ipv6 channel");
  +          "tcp", "ipv6", "0:0:0:0:0:0:0:1", 2002) != L2_OK)
  +          die("failed to configure socket tcp/ipv6 channel");
   #endif
       if (l2_channel_open(chSock) != L2_OK)
           die("failed to open socket channel");

From ossp-cvs-owner@ossp.org  Thu Oct  4 15:35:49 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f94DZmq36286; Thu, 4 Oct 2001 15:35:48 +0200 (CEST)
Date: Thu, 4 Oct 2001 15:35:48 +0200 (CEST)
Message-Id: <200110041335.f94DZmq36286@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_socket.c l2_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   04-Oct-2001 15:35:48
  Branch: HEAD                             Handle: 2001100414354700

  Modified files:
    ossp-pkg/l2             l2_ch_socket.c l2_test.c

  Log:
    More socket channel configuration parameter adjustments.

  Summary:
    Revision    Changes     Path
    1.30        +26 -3      ossp-pkg/l2/l2_ch_socket.c
    1.30        +2  -2      ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_socket.c
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 l2_ch_socket.c
  --- ossp-pkg/l2/l2_ch_socket.c	2001/09/26 08:55:19	1.29
  +++ ossp-pkg/l2/l2_ch_socket.c	2001/10/04 13:35:47	1.30
  @@ -120,17 +120,40 @@
   static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
       l2_ch_socket_t *cfg = (l2_ch_socket_t *)ctx->vp;
  +    char *szProtocol = NULL;
  +    char *szFamily = NULL;
       l2_param_t pa[5];
       l2_result_t rv;
   
       /* feed and call generic parameter parsing engine */
  -    L2_PARAM_SET(pa[0], ipversion, INT,     &cfg->iFamily);
  -    L2_PARAM_SET(pa[1], protocol,  INT,     &cfg->iProto );
  +    L2_PARAM_SET(pa[0], ipversion, STRING,  szFamily);
  +    L2_PARAM_SET(pa[1], protocol,  STRING,  szProtocol);
       L2_PARAM_SET(pa[2], host,      CHARPTR, &cfg->szHost);
  -    L2_PARAM_SET(pa[3], port,      INT,     &cfg->iPort  );
  +    L2_PARAM_SET(pa[3], port,      INT,     &cfg->iPort);
       L2_PARAM_END(pa[4]);
       rv = l2_util_setparams(pa, fmt, ap);
   
  +    /* translate incoming configuration parameters */
  +    if (szFamily != NULL) {
  +        if (strcmp(szFamily, "AF_INET6") == 0)
  +            cfg->iFamily = AF_INET6;
  +        else if (strcmp(szFamily, "AF_INET") == 0)
  +            cfg->iFamily = AF_INET;
  +        else
  +            return L2_ERR_ARG;
  +    }
  +
  +    if (szProtocol != NULL) {
  +        if (strcmp(szProtocol, "IPPROTO_UDP") == 0)
  +            cfg->iProto = IPPROTO_UDP;
  +        else if (strcmp(szProtocol, "IPPROTO_TCP") == 0)
  +            cfg->iProto = IPPROTO_TCP;
  +        else
  +            return L2_ERR_ARG;
  +    }
  +
  +    free(szFamily);
  +    free(szProtocol);
       return rv;
   }
   
  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/10/04 12:53:54	1.29
  +++ ossp-pkg/l2/l2_test.c	2001/10/04 13:35:47	1.30
  @@ -165,11 +165,11 @@
           die("failed to create socket channel");
   
       if (l2_channel_configure(chSock, "protocol,ipversion,host,port",\
  -        "tcp", "ipv4", "localhost", 2002) != L2_OK)
  +        "IPPROTO_TCP", "AF_INET", "localhost", 2002) != L2_OK)
           die("failed to configure socket tcp/ipv4 channel");
   #if 0
       if (l2_channel_configure(chSock, "protocol,ipversion,host,port",\
  -          "tcp", "ipv6", "0:0:0:0:0:0:0:1", 2002) != L2_OK)
  +          "IPPROTO_TCP", "AF_INET6", "0:0:0:0:0:0:0:1", 2002) != L2_OK)
             die("failed to configure socket tcp/ipv6 channel");
   #endif
       if (l2_channel_open(chSock) != L2_OK)

From ossp-cvs-owner@ossp.org  Thu Oct  4 16:58:32 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f94EwU145141; Thu, 4 Oct 2001 16:58:30 +0200 (CEST)
Date: Thu, 4 Oct 2001 16:58:30 +0200 (CEST)
Message-Id: <200110041458.f94EwU145141@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 Makefile.in l2_ch_irc.c l2_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   04-Oct-2001 16:58:30
  Branch: HEAD                             Handle: 2001100415582900

  Added files:
    ossp-pkg/l2             l2_ch_irc.c
  Modified files:
    ossp-pkg/l2             Makefile.in l2_test.c

  Log:
    Birth of IRC channel.

  Summary:
    Revision    Changes     Path
    1.25        +2  -0      ossp-pkg/l2/Makefile.in
    1.1         +71 -0      ossp-pkg/l2/l2_ch_irc.c
    1.31        +18 -0      ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 Makefile.in
  --- ossp-pkg/l2/Makefile.in	2001/09/15 16:03:37	1.24
  +++ ossp-pkg/l2/Makefile.in	2001/10/04 14:58:29	1.25
  @@ -70,6 +70,7 @@
       l2_ch_pipe.lo \
       l2_ch_syslog.lo \
       l2_ch_socket.lo \
  +    l2_ch_irc.lo \
       l2_ch_smtp.lo \
       l2_ch_null.lo \
       l2_ch_filter.lo \
  @@ -92,6 +93,7 @@
       l2_ch_pipe.c \
       l2_ch_syslog.c \
       l2_ch_socket.c \
  +    l2_ch_irc.c \
       l2_ch_smtp.c \
       l2_ch_null.c \
       l2_ch_filter.c \
  Index: ossp-pkg/l2/l2_ch_irc.c
  ============================================================
  $ cvs update -p -r1.1 l2_ch_irc.c
  /*
  **  L2 - OSSP Logging Library
  **  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP L2, a flexible logging library which
  **  can be found at http://www.ossp.org/pkg/l2/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  l2_ch_irc.c: internet relay chat channel implementation
  */
  
  #include "l2.h"
  
  static l2_result_t hook_create(l2_context_t *ctx, l2_channel_t *ch)
  {
      return L2_OK;
  }
  
  static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
  {
      return L2_OK;
  }
  
  static l2_result_t hook_open(l2_context_t *ctx, l2_channel_t *ch)
  {
      return L2_OK;
  }
  
  static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch, l2_level_t level, const char *buf, size_t buf_size)
  {
      return L2_OK;
  }
  
  static l2_result_t hook_close(l2_context_t *ctx, l2_channel_t *ch)
  {
      return L2_OK;
  }
  
  static l2_result_t hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
  {
      return L2_OK;
  }
  
  l2_handler_t l2_handler_irc = {
      L2_CHANNEL_OUTPUT,
      hook_create,
      hook_configure,
      hook_open,
      hook_write,
      hook_close,
      hook_destroy
  };
  
  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/10/04 13:35:47	1.30
  +++ ossp-pkg/l2/l2_test.c	2001/10/04 14:58:29	1.31
  @@ -70,6 +70,9 @@
   #ifdef WITH_SOCKET
       l2_channel_t *chSock;
   #endif
  +#ifdef WITH_IRC
  +    l2_channel_t *chIrc;
  +#endif
   #ifdef WITH_SMTP
       l2_channel_t *chSmtp;
   #endif
  @@ -156,6 +159,21 @@
       if (l2_stream_channel(st, chPipe, L2_LEVEL_UPTO(L2_LEVEL_WARNING), L2_LEVEL_NONE) != L2_OK)
           die("failed to attach channel pipe into stream");
   #endif /* Pipe */
  +
  +#ifdef WITH_IRC
  +    /* Atenzione! Before testing IRC start the IRC server. */
  +    if ((chIrc = l2_channel_create(&l2_handler_irc)) == NULL)   /* IRC */
  +        die("failed to create IRC channel");
  +
  +    if (l2_channel_configure(chIrc) != L2_OK)
  +        die("failed to configure IRC channel");
  +
  +    if (l2_channel_open(chIrc) != L2_OK)
  +        die("failed to open IRC channel");
  +
  +    if (l2_stream_channel(st, chIrc, L2_LEVEL_UPTO(L2_LEVEL_WARNING), L2_LEVEL_NONE) != L2_OK)
  +        die("failed to attach channel IRC into stream");
  +#endif /* IRC */
   
   #ifdef WITH_SOCKET
       /* Atenzione! Before doing any socket testing, make sure you have a valid */

From ossp-cvs-owner@ossp.org  Thu Oct  4 18:07:18 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f94G7Gm53169; Thu, 4 Oct 2001 18:07:16 +0200 (CEST)
Date: Thu, 4 Oct 2001 18:07:16 +0200 (CEST)
Message-Id: <200110041607.f94G7Gm53169@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp Makefile.in daemon.c lmtp2nntp.c lmtp2n...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   04-Oct-2001 18:07:16
  Branch: HEAD                             Handle: 2001100417071600

  Modified files:
    ossp-pkg/lmtp2nntp      Makefile.in daemon.c lmtp2nntp.c lmtp2nntp.pod

  Log:
    flush daily work. First working daemon. Awful cleanup.

  Summary:
    Revision    Changes     Path
    1.27        +5  -4      ossp-pkg/lmtp2nntp/Makefile.in
    1.3         +1  -1      ossp-pkg/lmtp2nntp/daemon.c
    1.64        +152 -56    ossp-pkg/lmtp2nntp/lmtp2nntp.c
    1.22        +7  -0      ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	2001/10/02 13:36:33	1.26
  +++ ossp-pkg/lmtp2nntp/Makefile.in	2001/10/04 16:07:16	1.27
  @@ -43,9 +43,9 @@
   POD2MAN     = pod2man
   
   PROG = lmtp2nntp
  -HDRS = lmtp2nntp.h lmtp.h nntp.h argz.h shpat_match.h msg.h 
  -SRCS = lmtp2nntp.c lmtp.c nntp.c argz.c shpat_match.c msg.c version.c
  -OBJS = lmtp2nntp.o lmtp.o nntp.o argz.o shpat_match.o msg.o version.o
  +HDRS = lmtp2nntp.h daemon.h lmtp.h nntp.h argz.h shpat_match.h msg.h 
  +SRCS = lmtp2nntp.c daemon.c lmtp.c nntp.c argz.c shpat_match.c msg.c version.c
  +OBJS = lmtp2nntp.o daemon.o lmtp.o nntp.o argz.o shpat_match.o msg.o version.o
   
   SUBDIRS = @SUBDIR_STR@ @SUBDIR_L2@ @SUBDIR_SA@
   
  @@ -137,7 +137,8 @@
   $(OBJS): Makefile
   
   #   AUTOMATICALLY GENERATED DEPENDENCY LIST - DO NOT EDIT
  -lmtp2nntp.o: lmtp2nntp.c argz.h shpat_match.h lmtp2nntp.h config.h lmtp.h nntp.h msg.h version.c
  +lmtp2nntp.o: lmtp2nntp.c argz.h shpat_match.h daemon.h lmtp2nntp.h config.h lmtp.h nntp.h msg.h version.c
  +daemon.o: daemon.c daemon.h
   lmtp.o: lmtp.c lmtp.h config.h
   nntp.o: nntp.c nntp.h msg.h lmtp2nntp.h config.h
   argz.o: argz.c argz.h config.h
  Index: ossp-pkg/lmtp2nntp/daemon.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 daemon.c
  --- ossp-pkg/lmtp2nntp/daemon.c	2001/10/04 11:00:38	1.2
  +++ ossp-pkg/lmtp2nntp/daemon.c	2001/10/04 16:07:16	1.3
  @@ -24,7 +24,7 @@
        * no need to become daemon.
        */
       if (getppid() == 1)
  -        return;
  +        return 0;
   
       /*
        * Ignore tty related signals
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.63 -r1.64 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/02 14:34:51	1.63
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/04 16:07:16	1.64
  @@ -39,6 +39,7 @@
   #include "argz.h"
   #include "shpat_match.h"
   #include "l2.h"
  +#include "daemon.h"
   
   /* library version check (compile-time) */
   #define  L2_VERSION_HEX_REQ 0x001200
  @@ -132,6 +133,8 @@
       char           *option_mailfrom;
       unsigned int    option_levelmask;
       l2_stream_t    *l2;
  +    sa_addr_t      *saaAltio;
  +    sa_t           *saAltio;
       char           *cpBindh;
       char           *cpBindp;
       sa_addr_t      *saaBind;
  @@ -177,10 +180,11 @@
               "[-d deliverymode] "
               "[-g groupmode] "
               "[-h host[:port][,host[:port], ...]] "
  +            "[-i inputbind] "
  +            "[-l level[:logfile]] "
               "[-m mailfrom] "
               "[-n nodename] "
               "[-s size] "
  -            "[-l level[:logfile]] "
               "[-v] "
               "[-w waittime] "
               "newsgroup [newsgroup ...] "
  @@ -302,6 +306,10 @@
       l2_channel_t *chPrefix;
       l2_channel_t *chBuf;
       l2_channel_t *chFile;
  +    sa_addr_t    *caddr;
  +    sa_t         *csa;
  +    int           fd;
  +    pid_t         pid;
   
       /* library version check (run-time) */
       if (l2_version.v_hex < L2_VERSION_HEX_REQ) {
  @@ -328,6 +336,8 @@
       ctx->option_mailfrom = NULL;
       ctx->option_levelmask = L2_LEVEL_NONE;
       ctx->l2 = NULL;
  +    ctx->saaAltio = NULL;
  +    ctx->saAltio = NULL;
       ctx->cpBindh = NULL;
       ctx->cpBindp = NULL;
       ctx->saaBind = NULL;
  @@ -358,10 +368,35 @@
        */
   
       /* read in the arguments */
  -    while ((i = getopt(argc, argv, "b:d:g:h:l:m:n:s:vw:")) != -1) {
  +    while ((i = getopt(argc, argv, "a:b:d:g:h:l:m:n:s:vw:")) != -1) {
           switch (i) {
  +            case 'a': /*POD [B<-a> I<altio>] */
  +                if ((rc = sa_addr_create(&ctx->saaAltio)) != SA_OK) {
  +                    fprintf(stderr, "%s:Error: Creating address failed for -i option (%d)\n", 
  +                            ctx->progname, rc);
  +                }
  +                if ((rc = sa_addr_u2a(ctx->saaAltio, "%s", optarg)) != SA_OK) {
  +                    fprintf(stderr, "%s:Error: Parsing inputbind address failed for \"%s\" (%d)\n", 
  +                            ctx->progname, optarg, rc);
  +                    CU(ERR_EXECUTION);
  +                }
  +                if ((rc = sa_create(&ctx->saAltio)) != SA_OK) {
  +                    fprintf(stderr, "%s:Error: Creating TCP socket failed for \"%s\": %s\n", 
  +                            ctx->progname, optarg, strerror(errno));
  +                    CU(ERR_EXECUTION);
  +                }
  +                if ((rc = sa_bind(ctx->saAltio, ctx->saaAltio)) != SA_OK) {
  +                    fprintf(stderr, "%s:Error: Bind failed for \"%s\": %s\n", 
  +                            ctx->progname, optarg, strerror(errno));
  +                    CU(ERR_EXECUTION);
  +                }
  +                if ((rc = sa_listen(ctx->saAltio, -1)) != SA_OK) {
  +                    fprintf(stderr, "%s:Error: Listen to failed for \"%s\": %s\n", 
  +                            ctx->progname, optarg, strerror(errno));
  +                    CU(ERR_EXECUTION);
  +                }
  +                break;
               case 'b': /*POD [B<-b> I<bindaddr>[I<:port>]] */
  -                /* parse host[:port] string into host and port */
                   ctx->cpBindh = strdup(optarg);
                   if ((ctx->cpBindp = strrchr(ctx->cpBindh, ':')) != NULL) {
                       *ctx->cpBindp++ = NUL;
  @@ -370,7 +405,11 @@
                   else 
                       ctx->cpBindp = strdup("0");
                   //FIXME
  -                if ((rc = sa_u2a(&ctx->saaBind, "tcp://%s:%s", ctx->cpBindh, ctx->cpBindp)) != SA_OK) {
  +                if ((rc = sa_addr_create(&ctx->saaBind)) != SA_OK) {
  +                    fprintf(stderr, "%s:Error: Creating address failed for -b option (%d)\n", 
  +                            ctx->progname, rc);
  +                }
  +                if ((rc = sa_addr_u2a(ctx->saaBind, "tcp://%s:%s", ctx->cpBindh, ctx->cpBindp)) != SA_OK) {
                       fprintf(stderr, "%s:Error: Parsing bind address failed for \"%s:%s\" (%d)\n", 
                               ctx->progname, ctx->cpBindh, ctx->cpBindp, rc);
                       CU(ERR_EXECUTION);
  @@ -437,8 +476,6 @@
                           fprintf(stderr, "%s:Error: Too many services (%d) using option -h\n", ctx->progname, ctx->nsc);
                           CU(ERR_EXECUTION);
                       }
  -
  -                    /* parse host[:port] string into host and port */
                       cpHost = strdup(cp);
                       if ((cpPort = strrchr(cpHost, ':')) != NULL) {
                           *cpPort++ = NUL;
  @@ -448,23 +485,19 @@
                           cpPort = strdup("nntp");
                       ctx->ns[ctx->nsc].h = cpHost;
                       ctx->ns[ctx->nsc].p = cpPort;
  -
  -                    if ((rc = sa_u2a(&ctx->ns[ctx->nsc].saa, "tcp://%s:%s", 
  +                    if ((rc = sa_addr_create(&ctx->ns[ctx->nsc].saa)) != SA_OK) {
  +                        fprintf(stderr, "%s:Error: Creating address failed for -h option (%d)\n", 
  +                            ctx->progname, rc);
  +                    }
  +                    if ((rc = sa_addr_u2a(ctx->ns[ctx->nsc].saa, "tcp://%s:%s", 
                                        ctx->ns[ctx->nsc].h, ctx->ns[ctx->nsc].p)) != SA_OK) {
                           fprintf(stderr, "%s:Error: Parsing host address failed for \"%s:%s\" (%d)\n", 
  -                                ctx->progname, 
  -                                ctx->ns[ctx->nsc].h,
  -                                ctx->ns[ctx->nsc].p,
  -                                rc);
  +                                ctx->progname, ctx->ns[ctx->nsc].h, ctx->ns[ctx->nsc].p, rc);
                           CU(ERR_EXECUTION);
                       }
  -
                       if ((rc = sa_create(&ctx->ns[ctx->nsc].sa)) != SA_OK) {
                           fprintf(stderr, "%s:Error: Creating TCP socket failed for \"%s:%s\": %s\n", 
  -                                ctx->progname, 
  -                                ctx->ns[ctx->nsc].h, 
  -                                ctx->ns[ctx->nsc].p, 
  -                                strerror(errno));
  +                                ctx->progname, ctx->ns[ctx->nsc].h, ctx->ns[ctx->nsc].p, strerror(errno));
                           CU(ERR_EXECUTION);
                       }
                       ctx->ns[ctx->nsc].nntp = NULL;
  @@ -634,51 +667,113 @@
       signal(SIGUSR1,            SIG_IGN    );
       signal(SIGUSR2,            SIG_IGN    );
   
  -    /* initialize LMTP context */
  -    lmtp_io.ctx    = ctx;
  -    lmtp_io.select = NULL;
  -    lmtp_io.read   = trace_lmtp_read;
  -    lmtp_io.write  = trace_lmtp_write;
  -    if ((lmtp = lmtp_create(STDIN_FILENO, STDOUT_FILENO,
  -                            (ctx->option_logfile && (ctx->option_levelmask >= L2_LEVEL_TRACE)) ?
  -                             &lmtp_io : NULL )) == NULL) {
  -        fprintf(stderr, "%s:Error: Unable to initialize LMTP library\n", ctx->progname);
  -        CU(ERR_EXECUTION);
  -    }
  -    /*  RFC0821, 4.5.1. MINIMUM IMPLEMENTATION
  -     *  In order to make SMTP workable, the following minimum implementation
  -     *  is required for all receivers: [...]
  -     *  RFC0821, 4.1.2. COMMAND SYNTAX
  -     *  
  -     *  Verb Parameter
  -     *  ----+-------------------------------
  -     *  HELO <SP> <domain> <CRLF>
  -     *  MAIL <SP> FROM:<reverse-path> <CRLF>
  -     *  RCPT <SP> TO:<forward-path> <CRLF>
  -     *  DATA <CRLF>
  -     *  RSET <CRLF>
  -     *  NOOP <CRLF>
  -     *  QUIT <CRLF>
  -     */
  -    lmtp_register(lmtp, "LHLO", lmtp_cb_lhlo, ctx, NULL, NULL); 
  -    lmtp_register(lmtp, "MAIL", lmtp_cb_mail, ctx, NULL, NULL);
  -    lmtp_register(lmtp, "RCPT", lmtp_cb_rcpt, ctx, NULL, NULL);
  -    lmtp_register(lmtp, "DATA", lmtp_cb_data, ctx, NULL, NULL);
  -    lmtp_register(lmtp, "RSET", lmtp_cb_rset, ctx, NULL, NULL);
  -    lmtp_register(lmtp, "NOOP", lmtp_cb_noop, ctx, NULL, NULL);
  -    lmtp_register(lmtp, "QUIT", lmtp_cb_quit, ctx, NULL, NULL);
  -    
  -    /* loop for LMTP protocol */
  -    lmtp_loop(lmtp);
  +        
  +    /* loop for LMTP protocol with support for alternate io through daemon */
  +    if (ctx->saAltio == NULL) {
  +        /* initialize LMTP context */
  +        lmtp_io.ctx    = ctx;
  +        lmtp_io.select = NULL;
  +        lmtp_io.read   = trace_lmtp_read;
  +        lmtp_io.write  = trace_lmtp_write;
  +        if ((lmtp = lmtp_create(STDIN_FILENO, STDOUT_FILENO,
  +                                (ctx->option_logfile && (ctx->option_levelmask >= L2_LEVEL_TRACE)) ?
  +                                 &lmtp_io : NULL )) == NULL) {
  +            fprintf(stderr, "%s:Error: Unable to initialize LMTP library\n", ctx->progname);
  +            CU(ERR_EXECUTION);
  +        }
  +        /*  RFC0821, 4.5.1. MINIMUM IMPLEMENTATION
  +         *  In order to make SMTP workable, the following minimum implementation
  +         *  is required for all receivers: [...]
  +         *  RFC0821, 4.1.2. COMMAND SYNTAX
  +         *  
  +         *  Verb Parameter
  +         *  ----+-------------------------------
  +         *  HELO <SP> <domain> <CRLF>
  +         *  MAIL <SP> FROM:<reverse-path> <CRLF>
  +         *  RCPT <SP> TO:<forward-path> <CRLF>
  +         *  DATA <CRLF>
  +         *  RSET <CRLF>
  +         *  NOOP <CRLF>
  +         *  QUIT <CRLF>
  +         */
  +        lmtp_register(lmtp, "LHLO", lmtp_cb_lhlo, ctx, NULL, NULL); 
  +        lmtp_register(lmtp, "MAIL", lmtp_cb_mail, ctx, NULL, NULL);
  +        lmtp_register(lmtp, "RCPT", lmtp_cb_rcpt, ctx, NULL, NULL);
  +        lmtp_register(lmtp, "DATA", lmtp_cb_data, ctx, NULL, NULL);
  +        lmtp_register(lmtp, "RSET", lmtp_cb_rset, ctx, NULL, NULL);
  +        lmtp_register(lmtp, "NOOP", lmtp_cb_noop, ctx, NULL, NULL);
  +        lmtp_register(lmtp, "QUIT", lmtp_cb_quit, ctx, NULL, NULL);
  +        lmtp_loop(lmtp);
  +        lmtp_gfs_quit(ctx);
  +        lmtp_gfs_lhlo(ctx);
  +        lmtp_destroy(lmtp);
  +    } else {
  +        pid = getpid();
  +        daemonize();
  +        log1(ctx, NOTICE, "startup daemonized, previous pid[%d]", pid); l2_stream_flush(ctx->l2);
  +        while ((rc = sa_accept(ctx->saAltio, &caddr, &csa)) == SA_OK) {
  +            sa_getfd(csa, &fd);
  +            l2_stream_flush(ctx->l2); /* must flush before fork() */
  +            pid = fork();
  +            if (pid == -1) {
  +                log0(ctx, ERROR, "daemon cannot spawn child %m"); l2_stream_flush(ctx->l2);
  +                continue;
  +            }
  +            if (pid != 0) {
  +                log1(ctx, INFO, "daemon forked process, new child pid[%d]", pid); l2_stream_flush(ctx->l2);
  +                close(fd);
  +                continue;
  +            }
  +            log1(ctx, NOTICE, "startup new child process, parent pid[%d]", getppid());
  +            
  +            fprintf(stderr, "DEBUG: fd=%d\n", fd);
  +            /* initialize LMTP context */
  +            lmtp_io.ctx    = ctx;
  +            lmtp_io.select = NULL;
  +            lmtp_io.read   = trace_lmtp_read;
  +            lmtp_io.write  = trace_lmtp_write;
  +            if ((lmtp = lmtp_create(fd, fd,
  +                                    (ctx->option_logfile && (ctx->option_levelmask >= L2_LEVEL_TRACE)) ?
  +                                     &lmtp_io : NULL )) == NULL) {
  +                fprintf(stderr, "%s:Error: Unable to initialize LMTP library\n", ctx->progname);
  +                CU(ERR_EXECUTION);
  +            }
  +            /*  RFC0821, 4.5.1. MINIMUM IMPLEMENTATION
  +             *  In order to make SMTP workable, the following minimum implementation
  +             *  is required for all receivers: [...]
  +             *  RFC0821, 4.1.2. COMMAND SYNTAX
  +             *  
  +             *  Verb Parameter
  +             *  ----+-------------------------------
  +             *  HELO <SP> <domain> <CRLF>
  +             *  MAIL <SP> FROM:<reverse-path> <CRLF>
  +             *  RCPT <SP> TO:<forward-path> <CRLF>
  +             *  DATA <CRLF>
  +             *  RSET <CRLF>
  +             *  NOOP <CRLF>
  +             *  QUIT <CRLF>
  +             */
  +            lmtp_register(lmtp, "LHLO", lmtp_cb_lhlo, ctx, NULL, NULL); 
  +            lmtp_register(lmtp, "MAIL", lmtp_cb_mail, ctx, NULL, NULL);
  +            lmtp_register(lmtp, "RCPT", lmtp_cb_rcpt, ctx, NULL, NULL);
  +            lmtp_register(lmtp, "DATA", lmtp_cb_data, ctx, NULL, NULL);
  +            lmtp_register(lmtp, "RSET", lmtp_cb_rset, ctx, NULL, NULL);
  +            lmtp_register(lmtp, "NOOP", lmtp_cb_noop, ctx, NULL, NULL);
  +            lmtp_register(lmtp, "QUIT", lmtp_cb_quit, ctx, NULL, NULL);
  +            lmtp_loop(lmtp);
  +            lmtp_gfs_quit(ctx);
  +            lmtp_gfs_lhlo(ctx);
  +            lmtp_destroy(lmtp);
  +            close(fd);
  +            CU(0);
  +        }
  +    }
       CU(0);
   
       /* graceful shutdown */
       CUS:
  -    lmtp_gfs_quit(ctx);
  -    lmtp_gfs_lhlo(ctx);
       log0(ctx, NOTICE, "graceful shutdown shortly before exit - no more logging");
       l2_stream_destroy(ctx->l2);
  -    lmtp_destroy(lmtp);
       if (ctx->option_logfile != NULL)
           free(ctx->option_logfile);
       if (ctx->progname != NULL)
  @@ -688,6 +783,7 @@
       if (ctx != NULL)
           free(ctx);
       str_parse(NULL, NULL);
  +    //FIXME 2 * sa_addr_destroy()
   
       return rc;
   }
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 lmtp2nntp.pod
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/09/13 13:45:12	1.21
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/10/04 16:07:16	1.22
  @@ -33,6 +33,7 @@
   =head1 SYNOPSIS
   
   B<lmtp2nntp>
  +[B<-a> I<altio>]
   [B<-b> I<bindaddr>[I<:port>]]
   [B<-d> I<deliverymode>]
   [B<-g> I<groupmode>]
  @@ -111,6 +112,12 @@
   to speed up distribution by posting the same article to more than one server.
   In regard to this program they must provide the same groups and talk to each
   other. 
  +
  +=item B<-a> I<altio>
  +
  +Alternate IO allows reading and writing from/to a UNIX domain or TCP sockets
  +instead stdin/stdout. This places the program in daemon mode. The syntax for
  +altio is either "UNIX://path/to/socket" or "TCP://address:port".
   
   =item B<-m> I<mailfrom>
   

From ossp-cvs-owner@ossp.org  Fri Oct  5 12:40:19 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f95AeI778849; Fri, 5 Oct 2001 12:40:18 +0200 (CEST)
Date: Fri, 5 Oct 2001 12:40:18 +0200 (CEST)
Message-Id: <200110051040.f95AeI778849@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO l2_ch_buffer.c l2_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   05-Oct-2001 12:40:18
  Branch: HEAD                             Handle: 2001100511401700

  Modified files:
    ossp-pkg/l2             TODO l2_ch_buffer.c l2_test.c

  Log:
    Added untested code to implement alarm exceptions in the buffer channel. The
    buffer will auto-flush after a user specified timeout if it is even possible
    to do this with a c-style exception handler.

  Summary:
    Revision    Changes     Path
    1.28        +9  -0      ossp-pkg/l2/TODO
    1.22        +90 -8      ossp-pkg/l2/l2_ch_buffer.c
    1.32        +1  -1      ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 TODO
  --- ossp-pkg/l2/TODO	2001/09/28 14:30:49	1.27
  +++ ossp-pkg/l2/TODO	2001/10/05 10:40:17	1.28
  @@ -48,6 +48,15 @@
     erase, what happens to its data when it is over
     written or flushed...
   
  +o buffer timer
  +  How on earth to use a C-style exception handler to flush
  +  our buffer? We can't directly call ANY function from an
  +  exception state, so this might not work at all.
  +
  +  Depends on SIGALARM, only one handler of which may exist.
  +  A more robust implementation would not use such a precious
  +  resource, and guard against signal collision with other channels.
  +
   o syslog
     many options need docu, and we should mention to
     the user that more info is found in the man page
  Index: ossp-pkg/l2/l2_ch_buffer.c
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 l2_ch_buffer.c
  --- ossp-pkg/l2/l2_ch_buffer.c	2001/09/14 07:41:49	1.21
  +++ ossp-pkg/l2/l2_ch_buffer.c	2001/10/05 10:40:17	1.22
  @@ -28,18 +28,30 @@
   */
   
   #include "l2.h"
  +#include "l2_p.h"   /* for TRACE() */
   
   #include <string.h>
  +#include <unistd.h> /* has setitime() in standard unix functions */
  +#include <signal.h> /* for use of sigaction() and SIGALRM        */
   
   /* declare private channel configuration */
   typedef struct {
       char       *buf;
       int         bufpos;
       int         bufsize;
  +    int         bufinterval;
  +    struct      sigaction sigalrm;
  +    struct      itimerval valprev;
       int         levelflush;
       l2_level_t  level;
   } l2_ch_buffer_t;
   
  +static void catchsignal(int sig, ...)
  +{
  +    if (sig == SIGALRM)
  +        TRACE("SIGALRM caught");
  +}
  +
   /* create channel */
   static l2_result_t hook_create(l2_context_t *ctx, l2_channel_t *ch)
   {
  @@ -50,11 +62,14 @@
           return L2_ERR_MEM;
   
       /* initialize configuration with reasonable defaults */
  -    cfg->buf        = NULL;
  -    cfg->bufpos     = 0;
  -    cfg->bufsize    = 4096;
  -    cfg->levelflush = 0;
  -    cfg->level      = L2_LEVEL_NONE;
  +    cfg->buf         = NULL;
  +    cfg->bufpos      = 0;
  +    cfg->bufsize     = 4096;
  +    cfg->bufinterval = 0;
  +    cfg->levelflush  = 0;
  +    cfg->level       = L2_LEVEL_NONE;
  +    memset(&cfg->sigalrm, 0, sizeof(cfg->sigalrm));
  +    memset(&cfg->valprev, 0, sizeof(cfg->valprev));
   
       /* link private channel configuration into channel context */
       ctx->vp = cfg;
  @@ -66,13 +81,14 @@
   static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
       l2_ch_buffer_t *cfg = (l2_ch_buffer_t *)ctx->vp;
  -    l2_param_t pa[3];
  +    l2_param_t pa[4];
       l2_result_t rv;
   
       /* feed and call generic parameter parsing engine */
       L2_PARAM_SET(pa[0], size,       INT, &cfg->bufsize);
  -    L2_PARAM_SET(pa[1], levelflush, INT, &cfg->levelflush);
  -    L2_PARAM_END(pa[2]);
  +    L2_PARAM_SET(pa[1], interval,   INT, &cfg->bufinterval);
  +    L2_PARAM_SET(pa[2], levelflush, INT, &cfg->levelflush);
  +    L2_PARAM_END(pa[3]);
       rv = l2_util_setparams(pa, fmt, ap);
       if (cfg->bufsize < 0) 
           return L2_ERR_ARG;
  @@ -80,13 +96,66 @@
       return rv;
   }
   
  +/************************************************************
  + * set_alarm: Helper method to hook_open                    *
  + *   Sets the VIRTUAL timer to preconfigured value in cfg   *
  + ************************************************************/
  +static int set_alarm(l2_ch_buffer_t *cfg)
  +{
  +    struct itimerval valnew;
  +
  +    /* initialize auto vars before using them */
  +    memset(&valnew, 0, sizeof(valnew));
  +
  +    valnew.it_interval.tv_sec = cfg->bufinterval;
  +    valnew.it_interval.tv_usec = 0;
  +    valnew.it_value.tv_sec = cfg->bufinterval;
  +    valnew.it_value.tv_usec = 0;
  +    return setitimer(ITIMER_VIRTUAL, &valnew, &cfg->valprev); /* set flush timer */
  +}
  +
  +/************************************************************
  + * reset_alarm: Helper method to hook_flush                 *
  + *   Resets the VIRTUAL timer to preconfigured value in cfg *
  + ************************************************************/
  +static int reset_alarm(l2_ch_buffer_t *cfg)
  +{
  +    struct itimerval valnew;
  +
  +    /* initialize auto vars before using them */
  +    memset(&valnew, 0, sizeof(valnew));
  +
  +    valnew.it_interval.tv_sec = cfg->bufinterval;
  +    valnew.it_interval.tv_usec = 0;
  +    valnew.it_value.tv_sec = cfg->bufinterval;
  +    valnew.it_value.tv_usec = 0;
  +    return setitimer(ITIMER_VIRTUAL, &valnew, 0); /* reset flush timer */
  +}
  +
   /* open channel */
   static l2_result_t hook_open(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_buffer_t *cfg = (l2_ch_buffer_t *)ctx->vp;
       l2_channel_t *downstream = l2_channel_downstream(ch);
  +    struct sigaction locact;
       l2_result_t rv;
   
  +    if (cfg->bufinterval != 0) {
  +        /* initialize auto vars before using them */
  +        memset(&locact, 0, sizeof(locact));
  +
  +        locact.sa_handler = (void(*)())catchsignal;
  +        sigemptyset(&locact.sa_mask);
  +        locact.sa_flags = 0;
  +
  +        /* save old signal context before replacing with our own */
  +        if (sigaction(SIGALRM, &locact, &cfg->sigalrm) < 0)
  +            return L2_ERR_SYS;
  +
  +        if (set_alarm(cfg))
  +            return L2_ERR_SYS;
  +    }
  +
       /* open channel buffer */
       if (cfg->bufsize > 0) {
           if ((cfg->buf = malloc(cfg->bufsize)) == NULL)
  @@ -156,6 +225,11 @@
           cfg->level  = L2_LEVEL_NONE; /* reset this->context->level */
       }
   
  +    /* reset the flush alarm timer to synchronize the buffer */
  +    if (cfg->bufinterval != 0)
  +        if (reset_alarm(cfg))
  +            return L2_ERR_SYS;
  +
       /* optionally flush downstream channel, too */
       if ((rv = l2_channel_flush(downstream)) != L2_OK)
           return rv;
  @@ -169,6 +243,14 @@
       l2_ch_buffer_t *cfg = (l2_ch_buffer_t *)ctx->vp;
       l2_channel_t *downstream = l2_channel_downstream(ch);
       l2_result_t rv;
  +
  +    if (cfg->bufinterval != 0) {
  +        setitimer(ITIMER_VIRTUAL, &cfg->valprev, 0); /* restore timer values */
  +        /* restore previous signal context if previously saved & replaced    */
  +        if (&cfg->sigalrm.sa_handler)
  +            if (sigaction(SIGALRM, &cfg->sigalrm, 0) < 0)
  +                rv = L2_ERR_SYS;
  +    }
   
       /* write pending data before closing down */
       if (cfg->bufpos > 0) {
  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/10/04 14:58:29	1.31
  +++ ossp-pkg/l2/l2_test.c	2001/10/05 10:40:17	1.32
  @@ -99,7 +99,7 @@
       if ((chBuf  = l2_channel_create(&l2_handler_buffer)) == NULL)    /* Buffer */
           die("failed to create buffer channel");
   
  -    if (l2_channel_configure(chBuf, "size", 100) != L2_OK)
  +    if (l2_channel_configure(chBuf, "size,interval", 100, 20) != L2_OK)
           die("failed to configure buffer channel");
   
       if ((chFile = l2_channel_create(&l2_handler_file)) == NULL)      /* File   */

From ossp-cvs-owner@ossp.org  Fri Oct  5 13:40:24 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f95BeNl85548; Fri, 5 Oct 2001 13:40:23 +0200 (CEST)
Date: Fri, 5 Oct 2001 13:40:23 +0200 (CEST)
Message-Id: <200110051140.f95BeNl85548@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa Makefile.in TODO sa.c sa.h sa_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   05-Oct-2001 13:40:23
  Branch: HEAD                             Handle: 2001100512402200

  Modified files:
    ossp-pkg/sa             Makefile.in TODO sa.c sa.h sa_test.c

  Log:
    Major revamp of SA library in order to support Unix Domain sockets.
    - "{tcp,udp}://host:port" addresses are now "inet://host:port" addresses
    - "unix:/path/to/socket" is the address for Unix Domain sockets
    - sa_type() was introduced which sets socket type to stream or datagram

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/sa/Makefile.in
    1.3         +0  -4      ossp-pkg/sa/TODO
    1.4         +208 -89    ossp-pkg/sa/sa.c
    1.5         +7  -0      ossp-pkg/sa/sa.h
    1.3         +25 -13     ossp-pkg/sa/sa_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/Makefile.in
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 Makefile.in
  --- ossp-pkg/sa/Makefile.in	2001/10/02 18:37:19	1.2
  +++ ossp-pkg/sa/Makefile.in	2001/10/05 11:40:22	1.3
  @@ -67,7 +67,7 @@
   	@$(LIBTOOL) --mode=link $(CC) -o $(LIB_NAME) $(LIB_OBJS) -rpath $(libdir) \
   	    -version-info `$(SHTOOL) version -l txt -d libtool VERSION`
   
  -$(TST_NAME): $(TST_OBJS)
  +$(TST_NAME): $(TST_OBJS) $(LIB_NAME)
   	@$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $(TST_NAME) $(TST_OBJS) $(LIB_NAME) $(LIBS)
   
   check: $(TST_NAME)
  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 TODO
  --- ossp-pkg/sa/TODO	2001/10/04 11:25:44	1.2
  +++ ossp-pkg/sa/TODO	2001/10/05 11:40:22	1.3
  @@ -10,7 +10,3 @@
   buffer == 0 -> fully unbuffered
   timeout == 0 -> fully blocking
   
  -- Unix domain sockets support
  -- aufpassen dasz fuer read/write STREAM socket ist
  -- aufpassen dasz fuer readfrom/writeto DGRAM socket ist
  -
  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 sa.c
  --- ossp-pkg/sa/sa.c	2001/10/04 11:25:44	1.3
  +++ ossp-pkg/sa/sa.c	2001/10/05 11:40:22	1.4
  @@ -55,14 +55,14 @@
   
   /* socket address abstraction object */
   struct sa_addr_st {
  +    int              nFamily;
       struct sockaddr *saBuf;
       socklen_t        slBuf;
  -    int              nFamily;
  -    int              nProto;
   };
   
   /* socket abstraction object */
   struct sa_st {
  +    sa_type_t        eType;
       int              sSocket;
       int              bTimeout;
       struct timeval   tvTimeout;
  @@ -199,7 +199,6 @@
       (*saa)->saBuf   = NULL;
       (*saa)->slBuf   = 0;
       (*saa)->nFamily = 0;
  -    (*saa)->nProto   = 0;
       return SA_OK;
   }
   
  @@ -219,19 +218,20 @@
       int nPort;
       socklen_t sl;
       struct sockaddr *sa;
  +    struct sockaddr_un un;
       struct sockaddr_in sa4;
   #ifdef AF_INET6
       struct sockaddr_in6 sa6;
   #endif
       struct hostent *he;
       struct servent *se;
  -    struct protoent *pe;
       int bNumeric;
       int i;
  +    int n;
       char *cpProto;
  -    int   nProto;
       char *cpHost;
       char *cpPort;
  +    char *cpPath;
       char uribuf[1024];
       char *cp;
       int sf;
  @@ -245,42 +245,52 @@
       sa_mvsnprintf(uribuf, sizeof(uribuf), uri, ap);
       va_end(ap);
   
  -    /* parse URI into protocol, host and port parts */
  +    /* parse URI into parts */
       uri = uribuf;
  -    cpProto = "tcp";
  -    if ((cp = strstr(uri, "://")) != NULL) {
  +    cpProto = "unix";
  +    if ((cp = strchr(uri, ':')) != NULL) {
           cpProto = (char *)uri;
           *cp = '\0';
  -        uri = cp+3;
  +        uri = cp+1;
       }
  -    cpHost = (char *)uri;
  -    if ((cp = strchr(uri, ':')) == NULL)
  -        return SA_ERR_ARG;
  -    *cp++ = '\0';
  -    cpPort = cp;
  -
  -    /* resolve protocol */
  -    if ((pe = getprotobyname(cpProto)) == NULL)
  -        return SA_ERR_SYS;
  -    nProto = pe->p_proto;
  +    cpHost = "";
  +    cpPort = "";
  +    if (strncmp(uri, "//", 2) == 0) {
  +        uri += 2;
  +        cpHost = (char *)uri;
  +        if ((cp = strchr(uri, ':')) == NULL)
  +            return SA_ERR_ARG;
  +        *cp++ = '\0';
  +        cpPort = cp;
  +        uri = cp;
  +        if ((cp = strchr(uri, '/')) != NULL)
  +            uri = cp;
  +        else
  +            uri = strchr(uri, '\0');
  +    }
  +    cpPath = (char *)uri;
   
       /* resolve port */
  -    bNumeric = 1;
  -    for (i = 0; cpPort[i] != '\0'; i++) {
  -        if (!isdigit((int)cpPort[i])) {
  -            bNumeric = 0;
  -            break;
  +    nPort = 0;
  +    if (strcmp(cpProto, "inet") == 0) {
  +        bNumeric = 1;
  +        for (i = 0; cpPort[i] != '\0'; i++) {
  +            if (!isdigit((int)cpPort[i])) {
  +                bNumeric = 0;
  +                break;
  +            }
           }
  -    }
  -    if (bNumeric)
  -        nPort = atoi(cpPort);
  -    else {
  -        if ((se = getservbyname(cpPort, cpProto)) == NULL)
  -            return SA_ERR_SYS;
  -        nPort = ntohs(se->s_port);
  +        if (bNumeric)
  +            nPort = atoi(cpPort);
  +        else {
  +            if ((se = getservbyname(cpPort, cpProto)) == NULL)
  +                return SA_ERR_SYS;
  +            nPort = ntohs(se->s_port);
  +        }
       }
   
       /* mandatory(!) socket address structure initialization */
  +    memset(&un,  0, sizeof(un));
       memset(&sa4, 0, sizeof(sa4));
   #ifdef AF_INET6
       memset(&sa6, 0, sizeof(sa6));
  @@ -291,41 +301,55 @@
       sa = NULL;
       sl = 0;
       sf = 0;
  -    if (inet_pton(AF_INET, cpHost, &sa4.sin_addr.s_addr) == 1) {
  -        sa4.sin_family = AF_INET;
  -        sa4.sin_port = htons(nPort);
  -        sa = (struct sockaddr *)&sa4;
  -        sl = sizeof(sa4);
  -        sf = AF_INET;
  -    }
  -#ifdef AF_INET6
  -    else if (inet_pton(AF_INET6, cpHost, &sa6.sin6_addr.s6_addr) == 1) {
  -        sa6.sin6_family = AF_INET6;
  -        sa6.sin6_port = htons(nPort);
  -        sa = (struct sockaddr *)&sa6;
  -        sl = sizeof(sa6);
  -        sf = AF_INET6;
  +    if (strcmp(cpProto, "unix") == 0) {
  +        if (cpProto[0] != '/')
  +            return SA_ERR_ARG;
  +        n = strlen(cpProto);
  +        if ((n+1) > sizeof(un.sun_path))
  +            return SA_ERR_MEM;
  +        memcpy(un.sun_path, cpPath, n+1);
  +        un.sun_family = AF_LOCAL;
  +        sa = (struct sockaddr *)&un;
  +        sl = sizeof(un);
  +        sf = AF_LOCAL;
       }
  -#endif
  -    else if ((he = gethostbyname(cpHost)) != NULL) {
  -        if (he->h_addrtype == AF_INET) {
  +    else if (strcmp(cpProto, "inet") == 0) {
  +        if (inet_pton(AF_INET, cpHost, &sa4.sin_addr.s_addr) == 1) {
               sa4.sin_family = AF_INET;
               sa4.sin_port = htons(nPort);
  -            memcpy(&sa4.sin_addr.s_addr, he->h_addr_list[0], sizeof(sa4.sin_addr.s_addr));
               sa = (struct sockaddr *)&sa4;
               sl = sizeof(sa4);
               sf = AF_INET;
           }
   #ifdef AF_INET6
  -        else if (he->h_addrtype == AF_INET6) {
  +        else if (inet_pton(AF_INET6, cpHost, &sa6.sin6_addr.s6_addr) == 1) {
               sa6.sin6_family = AF_INET6;
               sa6.sin6_port = htons(nPort);
  -            memcpy(&sa6.sin6_addr.s6_addr, he->h_addr_list[0], sizeof(sa6.sin6_addr.s6_addr));
               sa = (struct sockaddr *)&sa6;
               sl = sizeof(sa6);
               sf = AF_INET6;
           }
   #endif
  +        else if ((he = gethostbyname(cpHost)) != NULL) {
  +            if (he->h_addrtype == AF_INET) {
  +                sa4.sin_family = AF_INET;
  +                sa4.sin_port = htons(nPort);
  +                memcpy(&sa4.sin_addr.s_addr, he->h_addr_list[0], sizeof(sa4.sin_addr.s_addr));
  +                sa = (struct sockaddr *)&sa4;
  +                sl = sizeof(sa4);
  +                sf = AF_INET;
  +            }
  +#ifdef AF_INET6
  +            else if (he->h_addrtype == AF_INET6) {
  +                sa6.sin6_family = AF_INET6;
  +                sa6.sin6_port = htons(nPort);
  +                memcpy(&sa6.sin6_addr.s6_addr, he->h_addr_list[0], sizeof(sa6.sin6_addr.s6_addr));
  +                sa = (struct sockaddr *)&sa6;
  +                sl = sizeof(sa6);
  +                sf = AF_INET6;
  +            }
  +#endif
  +        }
       }
       if (sa == NULL)
           return SA_ERR_ARG;
  @@ -336,17 +360,16 @@
       memcpy(saa->saBuf, sa, sl);
       saa->slBuf = sl;
       saa->nFamily = sf;
  -    saa->nProto = nProto;
       return SA_OK;
   }
   
   sa_rc_t sa_addr_s2a(sa_addr_t *saa, const struct sockaddr *sabuf, socklen_t salen)
   {
  +    struct sockaddr_un *un;
       struct sockaddr_in *sa4;
   #ifdef AF_INET6
       struct sockaddr_in6 *sa6;
   #endif
  -    struct protoent *pe;
       int sf;
   
       if (saa == NULL || sabuf == NULL || salen == 0)
  @@ -360,32 +383,34 @@
   
       /* fill in family */
       sf = 0;
  -    if (sizeof(struct sockaddr_in) == salen) {
  +    if (sizeof(struct sockaddr_un) == salen) {
  +        un = (struct sockaddr_un *)((void *)sabuf);
  +        if (un->sun_family == AF_LOCAL)
  +            sf = AF_LOCAL;
  +    }
  +    if (sf == 0 && sizeof(struct sockaddr_in) == salen) {
           sa4 = (struct sockaddr_in *)((void *)sabuf);
           if (sa4->sin_family == AF_INET)
               sf = AF_INET;
       }
   #ifdef AF_INET6
  -    else if (sizeof(struct sockaddr_in6) == salen) {
  +    if (sf == 0 && sizeof(struct sockaddr_in6) == salen) {
           sa6 = (struct sockaddr_in6 *)((void *)sabuf);
           if (sa6->sin6_family == AF_INET6)
               sf = AF_INET6;
       }
   #endif
  +    if (sf == 0)
  +        return SA_ERR_ARG;
       saa->nFamily = sf;
   
  -    /* fill in protocol */
  -    if ((pe = getprotobyname("tcp")) != NULL)
  -        saa->nProto = pe->p_proto;
  -    else
  -        saa->nProto = 0;
       return SA_OK;
   }
   
   sa_rc_t sa_addr_a2u(sa_addr_t *saa, char **uri)
   {
       char uribuf[1024];
  -    struct protoent *pe;
  +    struct sockaddr_un *un;
       struct sockaddr_in *sa4;
   #ifdef AF_INET6
       struct sockaddr_in6 *sa6;
  @@ -395,23 +420,27 @@
   
       if (saa == NULL || uri == NULL)
           return SA_ERR_ARG;
  -    if ((pe = getprotobynumber(saa->nProto)) == NULL)
  -        return SA_ERR_SYS;
  -    if (saa->nFamily == AF_INET) {
  -        sa4 = (struct sockaddr_in *)((void *)saa->saBuf);
  -        inet_ntop(AF_INET, &sa4->sin_addr.s_addr, caHost, sizeof(caHost));
  -        nPort = ntohs(sa4->sin_port);
  +    if (saa->nFamily == AF_LOCAL) {
  +        un = (struct sockaddr_un *)((void *)saa->saBuf);
  +        sa_msnprintf(uribuf, sizeof(uribuf), "unix:%s", un->sun_path);
       }
  +    else {
  +        if (saa->nFamily == AF_INET) {
  +            sa4 = (struct sockaddr_in *)((void *)saa->saBuf);
  +            inet_ntop(AF_INET, &sa4->sin_addr.s_addr, caHost, sizeof(caHost));
  +            nPort = ntohs(sa4->sin_port);
  +        }
   #ifdef AF_INET6
  -    else if (saa->nFamily == AF_INET6) {
  -        sa6 = (struct sockaddr_in6 *)((void *)saa->saBuf);
  -        inet_ntop(AF_INET6, &sa6->sin6_addr.s6_addr, caHost, sizeof(caHost));
  -        nPort = ntohs(sa6->sin6_port);
  -    }
  +        else if (saa->nFamily == AF_INET6) {
  +            sa6 = (struct sockaddr_in6 *)((void *)saa->saBuf);
  +            inet_ntop(AF_INET6, &sa6->sin6_addr.s6_addr, caHost, sizeof(caHost));
  +            nPort = ntohs(sa6->sin6_port);
  +        }
   #endif
  -    else
  -        return SA_ERR_ARG;
  -    sa_msnprintf(uribuf, sizeof(uribuf), "%s://%s:%d", pe->p_name, caHost, nPort);
  +        else
  +            return SA_ERR_ARG;
  +        sa_msnprintf(uribuf, sizeof(uribuf), "inet://%s:%d", caHost, nPort);
  +    }
       *uri = strdup(uribuf);
       return SA_OK;
   }
  @@ -428,22 +457,53 @@
       return SA_OK;
   }
   
  -static sa_rc_t sa_socket_init(sa_t *sa, int family, int proto)
  +static sa_rc_t sa_socket_init(sa_t *sa, int nFamily)
   {
  -    int type;
  +    int nType;
  +    int nProto;
  +    struct protoent *pe;
  +    char *cpProto;
   
       if (sa == NULL)
           return SA_ERR_ARG;
  -    if (proto == IPPROTO_TCP)
  -        type = SOCK_STREAM;
  -    else if (proto == IPPROTO_UDP)
  -        type = SOCK_DGRAM;
  -    else
  -        return SA_ERR_ARG;
  +
  +    /* only perform operation if socket still do not exists */
       if (sa->sSocket != -1)
           return SA_ERR_USE;
  -    if ((sa->sSocket = socket(family, type, proto)) == -1)
  +
  +    /* determine socket type */
  +    if (sa->eType == SA_TYPE_STREAM)
  +        nType = SOCK_STREAM;
  +    else if (sa->eType == SA_TYPE_DATAGRAM)
  +        nType = SOCK_DGRAM;
  +    else
  +        return SA_ERR_ARG;
  +
  +    /* determine socket protocol */
  +    if (nFamily == AF_LOCAL) 
  +        nProto = 0;
  +#ifdef AF_INET6
  +    else if (nFamily == AF_INET || nFamily == AF_INET6) {
  +#else
  +    else if (nFamily == AF_INET) {
  +#endif
  +        if (nType == SOCK_STREAM)
  +            cpProto = "tcp";
  +        else if (nType == SOCK_DGRAM)
  +            cpProto = "udp";
  +        else
  +            return SA_ERR_INT;
  +        if ((pe = getprotobyname(cpProto)) == NULL)
  +            return SA_ERR_SYS;
  +        nProto = pe->p_proto;
  +    }
  +    else
  +        return SA_ERR_ARG;
  +
  +    /* create the socket */
  +    if ((sa->sSocket = socket(nFamily, nType, nProto)) == -1)
           return SA_ERR_SYS;
  +
       return SA_OK;
   }
   
  @@ -464,6 +524,7 @@
   
       if ((sa = (sa_t *)malloc(sizeof(sa_t))) == NULL)
           return SA_ERR_MEM;
  +    sa->eType      = SA_TYPE_STREAM;
       sa->sSocket    = -1;
       sa->bTimeout   = 0;
       sa->nReadLen   = 0;
  @@ -496,6 +557,16 @@
       return SA_OK;
   }
   
  +sa_rc_t sa_type(sa_t *sa, sa_type_t type)
  +{
  +    if (sa == NULL)
  +        return SA_ERR_ARG;
  +    if (type != SA_TYPE_STREAM && type != SA_TYPE_DATAGRAM)
  +        return SA_ERR_ARG;
  +    sa->eType = type;
  +    return SA_OK;
  +}
  +
   sa_rc_t sa_timeout(sa_t *sa, long sec, long usec)
   {
       if (sa == NULL)
  @@ -557,12 +628,17 @@
   sa_rc_t sa_bind(sa_t *sa, sa_addr_t *laddr)
   {
       sa_rc_t rv;
  +    struct sockaddr_un *un;
   
       if (sa == NULL || laddr == NULL)
           return SA_ERR_ARG;
       if (sa->sSocket == -1)
  -        if ((rv = sa_socket_init(sa, laddr->nFamily, laddr->nProto)) != SA_OK)
  +        if ((rv = sa_socket_init(sa, laddr->nFamily)) != SA_OK)
               return rv;
  +    if (laddr->nFamily == AF_LOCAL) {
  +        un = (struct sockaddr_un *)((void *)laddr->saBuf);
  +        unlink(un->sun_path);
  +    }
       if (bind(sa->sSocket, laddr->saBuf, laddr->slBuf) == -1)
           return SA_ERR_SYS;
       return SA_OK;
  @@ -577,9 +653,10 @@
   
       if (sa == NULL)
           return SA_ERR_ARG;
  -
  +    if (sa->eType != SA_TYPE_STREAM)
  +        return SA_ERR_USE;
       if (sa->sSocket == -1)
  -        if ((rv = sa_socket_init(sa, raddr->nFamily, raddr->nProto)) != SA_OK)
  +        if ((rv = sa_socket_init(sa, raddr->nFamily)) != SA_OK)
               return rv;
   
       if (!sa->bTimeout)
  @@ -648,6 +725,8 @@
   {
       if (sa == NULL)
           return SA_ERR_ARG;
  +    if (sa->eType != SA_TYPE_STREAM)
  +        return SA_ERR_USE;
       if (sa->sSocket == -1)
           /* at least sa_bind() has to be already performed */
           return SA_ERR_USE;
  @@ -672,6 +751,8 @@
   
       if (sa == NULL)
           return SA_ERR_ARG;
  +    if (sa->eType != SA_TYPE_STREAM)
  +        return SA_ERR_USE;
       if (sa->sSocket == -1)
           /* at least sa_listen() has to be already performed */
           return SA_ERR_USE;
  @@ -717,6 +798,8 @@
       if (sa == NULL)
           return SA_ERR_ARG;
       sa_len = sizeof(sa_buf);
  +    if (sa->sSocket == -1)
  +        return SA_ERR_USE;
       if (getpeername(sa->sSocket, (struct sockaddr *)&sa_buf, &sa_len) < 0)
           return SA_ERR_SYS;
       if ((rv = sa_addr_create(raddr)) != SA_OK)
  @@ -741,6 +824,8 @@
   
       if (sa == NULL)
           return SA_ERR_ARG;
  +    if (sa->sSocket == -1)
  +        return SA_ERR_USE;
       sa_len = sizeof(sa_buf);
       if (getsockname(sa->sSocket, (struct sockaddr *)&sa_buf, &sa_len) < 0)
           return SA_ERR_SYS;
  @@ -757,6 +842,8 @@
   {
       if (sa == NULL || fd == NULL)
           return SA_ERR_ARG;
  +    if (sa->sSocket == -1)
  +        return SA_ERR_USE;
       *fd = sa->sSocket;
       return SA_OK;
   }
  @@ -790,8 +877,12 @@
       size_t res;
   
       if (sa == NULL || cpBuf == NULL || nBufReq == 0)
  -        return 0;
  -    
  +        return SA_ERR_ARG;
  +    if (sa->eType != SA_TYPE_STREAM)
  +        return SA_ERR_USE;
  +    if (sa->sSocket == -1)
  +        return SA_ERR_USE;
  +
       /* flush write buffer */
       if (sa->nWriteLen > 0)
           sa_flush(sa);
  @@ -855,6 +946,10 @@
   
       if (sa == NULL || buf == NULL || buflen == 0 || raddr == NULL)
           return SA_ERR_ARG;
  +    if (sa->eType != SA_TYPE_DATAGRAM)
  +        return SA_ERR_USE;
  +    if (sa->sSocket == -1)
  +        return SA_ERR_USE;
       if (sa->bTimeout) {
           FD_ZERO(&fds);
           FD_SET(sa->sSocket, &fds);
  @@ -888,6 +983,10 @@
   
       if (sa == NULL)
           return SA_ERR_ARG;
  +    if (sa->eType != SA_TYPE_STREAM)
  +        return SA_ERR_USE;
  +    if (sa->sSocket == -1)
  +        return SA_ERR_USE;
       res = 0;
       while (res < (nBufReq-1)) {
           sa_read(sa, &c, 1, &n);
  @@ -932,6 +1031,10 @@
   
       if (sa == NULL)
           return SA_ERR_ARG;
  +    if (sa->eType != SA_TYPE_STREAM)
  +        return SA_ERR_USE;
  +    if (sa->sSocket == -1)
  +        return SA_ERR_USE;
   
       if (nBufReq > (sa->nWriteSize - sa->nWriteLen)) {
           /* not enough space in buffer, so flush buffer */
  @@ -964,9 +1067,17 @@
   {
       size_t n;
       fd_set fds;
  +    sa_rc_t rv;
   
       if (sa == NULL || buf == NULL || buflen == 0 || raddr == NULL)
           return SA_ERR_ARG;
  +    if (sa->eType != SA_TYPE_DATAGRAM)
  +        return SA_ERR_USE;
  +    if (sa->sSocket == -1)
  +        if ((rv = sa_socket_init(sa, raddr->nFamily)) != SA_OK)
  +            return rv;
  +    if (sa->sSocket == -1)
  +        return SA_ERR_USE;
       if (sa->bTimeout) {
           FD_ZERO(&fds);
           FD_SET(sa->sSocket, &fds);
  @@ -1006,6 +1117,10 @@
   
       if (sa == NULL)
           return SA_ERR_ARG;
  +    if (sa->eType != SA_TYPE_STREAM)
  +        return SA_ERR_USE;
  +    if (sa->sSocket == -1)
  +        return SA_ERR_USE;
       while (sa->nWriteLen > 0) {
           n = sa_write_raw(sa, sa->cpWriteBuf, sa->nWriteLen);
           if (n <= 0)
  @@ -1023,6 +1138,10 @@
   
       if (sa == NULL || flags == NULL)
           return SA_ERR_ARG;
  +    if (sa->eType != SA_TYPE_STREAM)
  +        return SA_ERR_USE;
  +    if (sa->sSocket == -1)
  +        return SA_ERR_USE;
       how = 0;
       if (strcmp(flags, "r") == 0)
           how = SHUT_RD;
  Index: ossp-pkg/sa/sa.h
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 sa.h
  --- ossp-pkg/sa/sa.h	2001/10/04 11:25:44	1.4
  +++ ossp-pkg/sa/sa.h	2001/10/05 11:40:22	1.5
  @@ -82,6 +82,12 @@
   struct sa_st;
   typedef struct sa_st sa_t;
   
  +/* socket connection types */
  +typedef enum {
  +    SA_TYPE_STREAM,
  +    SA_TYPE_DATAGRAM
  +} sa_type_t;
  +
   /* return codes */
   typedef enum {
       SA_OK,
  @@ -107,6 +113,7 @@
   sa_rc_t sa_destroy      (sa_t *sa);
   
   /* socket parameter operations */
  +sa_rc_t sa_type         (sa_t *sa, sa_type_t type);
   sa_rc_t sa_timeout      (sa_t *sa, long sec, long usec);
   sa_rc_t sa_buffers      (sa_t *sa, size_t rsize, size_t wsize);
   sa_rc_t sa_getoption    (sa_t *sa, int optname, void *optval, socklen_t *optlen);
  Index: ossp-pkg/sa/sa_test.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 sa_test.c
  --- ossp-pkg/sa/sa_test.c	2001/10/04 11:04:59	1.2
  +++ ossp-pkg/sa/sa_test.c	2001/10/05 11:40:22	1.3
  @@ -8,8 +8,6 @@
   
   #include "sa.h"
   
  -/* see RFC3164 */
  -
   static void die(char *fmt, ...)
   {
       va_list ap;
  @@ -37,22 +35,33 @@
       char caTag[32+1];
       char *cpHost;
       int n;
  +
  +    /* create remote address */
  +    if (sa_addr_create(&ra) != SA_OK)
  +        die("sa_addr_create (ra)");
  +    if (sa_addr_u2a(ra, "inet://141.1.129.1:514") != SA_OK)
  +        die("sa_addr_u2a (ra)");
  +
  +    /* create local address */
  +    if (sa_addr_create(&la) != SA_OK)
  +        die("sa_addr_create (la)");
  +    if (sa_addr_u2a(la, "inet://0.0.0.0:0") != SA_OK)
  +        die("sa_addr_u2a (la)");
   
  -    if (sa_u2a(&ra, "udp://%s:514", argv[1]) != SA_OK)
  -        die("sa_u2a ra");
  -    if (sa_u2a(&la, "udp://0.0.0.0:0") != SA_OK)
  -        die("sa_u2a la");
  +    /* create datagram socket */
       if (sa_create(&sa) != SA_OK)
           die("sa_create");
  +    if (sa_type(sa, SA_TYPE_DATAGRAM) != SA_OK)
  +        die("sa_type");
  +
  +    /* bind socket to local address */
       if (sa_bind(sa, la) != SA_OK)
           die("sa_bind");
   
       /* RFC3164: The BSD syslog Protocol; C. Lonvick; August 2001. */
  -
       now = time(NULL);
       tm = localtime(&now);
       strftime(caTime, sizeof(caTime), "%b %e %H:%M:%S", tm);
  -
       if (uname(&uts) == 0) {
           cpHost = strdup(uts.nodename);
           if ((cp = strchr(cpHost, '.')) != NULL)
  @@ -60,20 +69,23 @@
       }
       else
           cpHost = strdup("0.0.0.0"); /* FIXME */
  -
       strcpy(caTag, "progname[12]: ");
       if (strlen(caTag) > 32)
           caTag[32] = '\0';
  -
  -    sprintf(caBuf, "<%d>%s %s %s%s", LOG_MAIL|LOG_EMERG, caTime, cpHost, caTag, argv[2]);
  +    sprintf(caBuf, "<%d>%s %s %s%s", LOG_MAIL|LOG_EMERG, caTime, cpHost, caTag, "test");
       fprintf(stderr, "%s\n", caBuf);
       nBuf = strlen(caBuf);
       if (sa_writeto(sa, caBuf, nBuf, (size_t *)&n, ra) != SA_OK)
           die("sa_writeto");
  +
  +    /* destroy socket and address objects */
       if (sa_destroy(sa) != SA_OK)
           die("sa_destroy");
  -    free(ra);
  -    free(la);
  +    if (sa_addr_destroy(la) != SA_OK)
  +        die("sa_addr_destroy (la)");
  +    if (sa_addr_destroy(ra) != SA_OK)
  +        die("sa_addr_destroy (ra)");
  +
       return 0;
   }
   

From ossp-cvs-owner@ossp.org  Fri Oct  5 13:48:50 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f95BmnV86637; Fri, 5 Oct 2001 13:48:49 +0200 (CEST)
Date: Fri, 5 Oct 2001 13:48:49 +0200 (CEST)
Message-Id: <200110051148.f95BmnV86637@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.ac sa.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   05-Oct-2001 13:48:49
  Branch: HEAD                             Handle: 2001100512484900

  Modified files:
    ossp-pkg/sa             sa.ac sa.c

  Log:
    use snprintf(3) if exists

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/sa/sa.ac
    1.5         +5  -1      ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.ac
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 sa.ac
  --- ossp-pkg/sa/sa.ac	2001/10/02 13:27:44	1.1.1.1
  +++ ossp-pkg/sa/sa.ac	2001/10/05 11:48:49	1.2
  @@ -39,6 +39,6 @@
       AC_CHECK_HEADERS(string.h sys/types.h sys/socket.h netdb.h netinet/in.h)
   
       #   check for system functions
  -    AC_CHECK_FUNCS(inet_aton inet_pton inet_ntoa inet_ntop snprintf vsnprintf)
  +    AC_CHECK_FUNCS(inet_aton inet_pton inet_ntoa inet_ntop snprintf)
   ])
   
  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 sa.c
  --- ossp-pkg/sa/sa.c	2001/10/05 11:40:22	1.4
  +++ ossp-pkg/sa/sa.c	2001/10/05 11:48:49	1.5
  @@ -160,7 +160,11 @@
               }
               else if (c == 'd') {
                   d = (int)va_arg(ap, int);
  -                sprintf(ibuf, "%d", d);
  +#ifdef HAVE_SNPRINTF
  +                snprintf(ibuf, sizeof(ibuf), "%d", d); /* inherently secure */
  +#else
  +                sprintf(ibuf, "%d", d); /* nevertheless secure; see ibuf above */
  +#endif
                   n = strlen(ibuf);
                   memcpy(bufptr, ibuf, n);
                   bufptr += n;

From ossp-cvs-owner@ossp.org  Fri Oct  5 13:49:12 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f95BnBb86702; Fri, 5 Oct 2001 13:49:11 +0200 (CEST)
Date: Fri, 5 Oct 2001 13:49:11 +0200 (CEST)
Message-Id: <200110051149.f95BnBb86702@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.h sa.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   05-Oct-2001 13:49:11
  Branch: HEAD                             Handle: 2001100512491000

  Modified files:
    ossp-pkg/sa             sa.h sa.pod

  Log:
    update to reflect latest changes

  Summary:
    Revision    Changes     Path
    1.6         +33 -28     ossp-pkg/sa/sa.h
    1.4         +43 -20     ossp-pkg/sa/sa.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.h
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 sa.h
  --- ossp-pkg/sa/sa.h	2001/10/05 11:40:22	1.5
  +++ ossp-pkg/sa/sa.h	2001/10/05 11:49:10	1.6
  @@ -44,34 +44,39 @@
   #define __SA_CONCAT(x) x
   #define SA_CONCAT(x,y) __SA_CONCAT(x)y
   #endif
  -#define sa_addr_st   SA_CONCAT(SA_PREFIX,sa_addr_st)
  -#define sa_addr_t    SA_CONCAT(SA_PREFIX,sa_addr_t)
  -#define sa_rc_t      SA_CONCAT(SA_PREFIX,sa_rc_t)
  -#define sa_st        SA_CONCAT(SA_PREFIX,sa_st)
  -#define sa_t         SA_CONCAT(SA_PREFIX,sa_t)
  -#define sa_u2a       SA_CONCAT(SA_PREFIX,sa_u2a)
  -#define sa_s2a       SA_CONCAT(SA_PREFIX,sa_s2a)
  -#define sa_a2u       SA_CONCAT(SA_PREFIX,sa_a2u)
  -#define sa_a2s       SA_CONCAT(SA_PREFIX,sa_a2s)
  -#define sa_create    SA_CONCAT(SA_PREFIX,sa_create)
  -#define sa_destroy   SA_CONCAT(SA_PREFIX,sa_destroy)
  -#define sa_timeout   SA_CONCAT(SA_PREFIX,sa_timeout)
  -#define sa_buffers   SA_CONCAT(SA_PREFIX,sa_buffers)
  -#define sa_bind      SA_CONCAT(SA_PREFIX,sa_bind)
  -#define sa_connect   SA_CONCAT(SA_PREFIX,sa_connect)
  -#define sa_listen    SA_CONCAT(SA_PREFIX,sa_listen)
  -#define sa_accept    SA_CONCAT(SA_PREFIX,sa_accept)
  -#define sa_getremote SA_CONCAT(SA_PREFIX,sa_getremote)
  -#define sa_getlocal  SA_CONCAT(SA_PREFIX,sa_getlocal)
  -#define sa_getfd     SA_CONCAT(SA_PREFIX,sa_getfd)
  -#define sa_shutdown  SA_CONCAT(SA_PREFIX,sa_shutdown)
  -#define sa_read      SA_CONCAT(SA_PREFIX,sa_read)
  -#define sa_readfrom  SA_CONCAT(SA_PREFIX,sa_readfrom)
  -#define sa_readline  SA_CONCAT(SA_PREFIX,sa_readline)
  -#define sa_write     SA_CONCAT(SA_PREFIX,sa_write)
  -#define sa_writeto   SA_CONCAT(SA_PREFIX,sa_writeto)
  -#define sa_printf    SA_CONCAT(SA_PREFIX,sa_printf)
  -#define sa_flush     SA_CONCAT(SA_PREFIX,sa_flush)
  +#define sa_addr_st      SA_CONCAT(SA_PREFIX,sa_addr_st)
  +#define sa_addr_t       SA_CONCAT(SA_PREFIX,sa_addr_t)
  +#define sa_rc_t         SA_CONCAT(SA_PREFIX,sa_rc_t)
  +#define sa_st           SA_CONCAT(SA_PREFIX,sa_st)
  +#define sa_t            SA_CONCAT(SA_PREFIX,sa_t)
  +#define sa_addr_create  SA_CONCAT(SA_PREFIX,sa_addr_create)
  +#define sa_addr_destroy SA_CONCAT(SA_PREFIX,sa_addr_destroy)
  +#define sa_addr_u2a     SA_CONCAT(SA_PREFIX,sa_addr_u2a)
  +#define sa_addr_s2a     SA_CONCAT(SA_PREFIX,sa_addr_s2a)
  +#define sa_addr_a2u     SA_CONCAT(SA_PREFIX,sa_addr_a2u)
  +#define sa_addr_a2s     SA_CONCAT(SA_PREFIX,sa_addr_a2s)
  +#define sa_create       SA_CONCAT(SA_PREFIX,sa_create)
  +#define sa_destroy      SA_CONCAT(SA_PREFIX,sa_destroy)
  +#define sa_type         SA_CONCAT(SA_PREFIX,sa_type)
  +#define sa_timeout      SA_CONCAT(SA_PREFIX,sa_timeout)
  +#define sa_buffers      SA_CONCAT(SA_PREFIX,sa_buffers)
  +#define sa_getoption    SA_CONCAT(SA_PREFIX,sa_getoption)
  +#define sa_setoption    SA_CONCAT(SA_PREFIX,sa_setoption)
  +#define sa_bind         SA_CONCAT(SA_PREFIX,sa_bind)
  +#define sa_connect      SA_CONCAT(SA_PREFIX,sa_connect)
  +#define sa_listen       SA_CONCAT(SA_PREFIX,sa_listen)
  +#define sa_accept       SA_CONCAT(SA_PREFIX,sa_accept)
  +#define sa_getremote    SA_CONCAT(SA_PREFIX,sa_getremote)
  +#define sa_getlocal     SA_CONCAT(SA_PREFIX,sa_getlocal)
  +#define sa_getfd        SA_CONCAT(SA_PREFIX,sa_getfd)
  +#define sa_shutdown     SA_CONCAT(SA_PREFIX,sa_shutdown)
  +#define sa_read         SA_CONCAT(SA_PREFIX,sa_read)
  +#define sa_readfrom     SA_CONCAT(SA_PREFIX,sa_readfrom)
  +#define sa_readline     SA_CONCAT(SA_PREFIX,sa_readline)
  +#define sa_write        SA_CONCAT(SA_PREFIX,sa_write)
  +#define sa_writeto      SA_CONCAT(SA_PREFIX,sa_writeto)
  +#define sa_printf       SA_CONCAT(SA_PREFIX,sa_printf)
  +#define sa_flush        SA_CONCAT(SA_PREFIX,sa_flush)
   #endif
   
   /* socket address abstraction object type */
  Index: ossp-pkg/sa/sa.pod
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 sa.pod
  --- ossp-pkg/sa/sa.pod	2001/10/02 18:47:47	1.3
  +++ ossp-pkg/sa/sa.pod	2001/10/05 11:49:10	1.4
  @@ -43,24 +43,29 @@
   sa_t,
   sa_rc_t.
   
  +=item B<Address Object Operations>:
  +
  +sa_addr_create,
  +sa_addr_destroy.
  +
   =item B<Address Operations>:
   
  -sa_u2a,
  -sa_s2a,
  -sa_a2u,
  -sa_a2s.
  +sa_addr_u2a,
  +sa_addr_s2a,
  +sa_addr_a2u,
  +sa_addr_a2s.
               
  -=item B<Object Operations>:
  +=item B<Socket Object Operations>:
   
   sa_create,
   sa_destroy. 
               
  -=item B<Parameter Operations>:
  +=item B<Socket Parameter Operations>:
   
   sa_timeout,
   sa_buffers. 
               
  -=item B<Connection Operations>:
  +=item B<Socket Connection Operations>:
   
   sa_bind,
   sa_connect,
  @@ -71,14 +76,14 @@
   sa_getfd,
   sa_shutdown.
   
  -=item B<Input/Output Operations>:
  +=item B<Socket Input/Output Operations>:
               
   sa_read,
   sa_readfrom,
   sa_readline,
   sa_write,
   sa_writeto,
  -sa_printf,
  +sa_writef,
   sa_flush.   
   
   =back
  @@ -120,7 +125,7 @@
   =item B<Convinience I/O Functions>
   
   If B<OSSP sa> is used for TCP-based stream I/O, for convinience reasons
  -line reading (sa_readline(3)) and output formatting (sa_printf(3))
  +line reading (sa_readline(3)) and output formatting (sa_writef(3))
   functions are provided, modelled after STDIO's fgets(3) and fprintf(3).
   
   =back
  @@ -133,25 +138,37 @@
   
   =item B<sa_t>
   
  +=item B<sa_rc_tt>
  +
   =back
   
   =head1 FUNCTIONS
   
  +=head2 Address Object Operations
  +
  +=over 4
  +
  +=item sa_rc_t B<sa_addr_create>(sa_addr_t **I<saa>);
  +
  +=item sa_rc_t B<sa_addr_destroy>(sa_addr_t *I<saa>);
  +
  +=back
  +
   =head2 Address Operations
   
   =over 4
   
  -=item sa_rc_t B<sa_u2a>(sa_addr_t **I<saa>, const char *I<uri>, ...);
  +=item sa_rc_t B<sa_addr_u2a>(sa_addr_t *I<saa>, const char *I<uri>, ...);
   
  -=item sa_rc_t B<sa_s2a>(sa_addr_t **I<saa>, const struct sockaddr *I<sabuf>, socklen_t I<salen>);
  +=item sa_rc_t B<sa_addr_s2a>(sa_addr_t *I<saa>, const struct sockaddr *I<sabuf>, socklen_t I<salen>);
   
  -=item sa_rc_t B<sa_a2u>(const sa_addr_t *I<saa>, char **I<uri>);
  +=item sa_rc_t B<sa_addr_a2u>(sa_addr_t *I<saa>, char **I<uri>);
   
  -=item sa_rc_t B<sa_a2s>(const sa_addr_t *I<saa>, struct sockaddr **I<sabuf>, socklen_t *I<salen>);
  +=item sa_rc_t B<sa_addr_a2s>(sa_addr_t *I<saa>, struct sockaddr **I<sabuf>, socklen_t *I<salen>);
   
   =back
               
  -=head2 Object Operations
  +=head2 Socket Object Operations
   
   =over 4
   
  @@ -161,17 +178,23 @@
   
   =back
               
  -=head2 Parameter Operations
  +=head2 Socket Parameter Operations
   
   =over 4
   
  +=item sa_rc_t B<sa_type>(sa_t *I<sa>, sa_type_t I<type>);
  +
   =item sa_rc_t B<sa_timeout>(sa_t *I<sa>, long I<sec>, long I<usec>);
   
   =item sa_rc_t B<sa_buffers>(sa_t *I<sa>, size_t I<rsize>, size_t I<wsize>);
   
  +=item sa_rc_t B<sa_getoption>(sa_t *I<sa>, int I<optname>, void *I<optval>, socklen_t *I<optlen>);
  +
  +=item sa_rc_t B<sa_setoption>(sa_t *I<sa>, int I<optname>, const void *I<optval>, socklen_t I<optlen>);
  +
   =back
  -            
  -=head2 Connection Operations
  +
  +=head2 Socket Connection Operations
   
   =over 4
   
  @@ -193,7 +216,7 @@
   
   =back
   
  -=head2 Input/Output Operations
  +=head2 Socket Input/Output Operations
   
   =over 4
   
  @@ -207,7 +230,7 @@
   
   =item sa_rc_t B<sa_writeto>(sa_t *I<sa>, const char *I<buf>, size_t I<buflen>, size_t *I<bufdone>, sa_addr_t *I<raddr>);
   
  -=item sa_rc_t B<sa_printf>(sa_t *I<sa>, const char *I<fmt>, ...);
  +=item sa_rc_t B<sa_writef>(sa_t *I<sa>, const char *I<fmt>, ...);
   
   =item sa_rc_t B<sa_flush>(sa_t *I<sa>);
   

From ossp-cvs-owner@ossp.org  Fri Oct  5 13:55:53 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f95BtqM87492; Fri, 5 Oct 2001 13:55:52 +0200 (CEST)
Date: Fri, 5 Oct 2001 13:55:52 +0200 (CEST)
Message-Id: <200110051155.f95BtqM87492@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa TODO sa.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   05-Oct-2001 13:55:52
  Branch: HEAD                             Handle: 2001100512555100

  Modified files:
    ossp-pkg/sa             TODO sa.pod

  Log:
    remember one more thing

  Summary:
    Revision    Changes     Path
    1.4         +0  -7      ossp-pkg/sa/TODO
    1.5         +11 -0      ossp-pkg/sa/sa.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 TODO
  --- ossp-pkg/sa/TODO	2001/10/05 11:40:22	1.3
  +++ ossp-pkg/sa/TODO	2001/10/05 11:55:51	1.4
  @@ -1,11 +1,4 @@
   
  -Goals:
  -1. struct sockaddr * abstraction
  -2. ssize_t abstraction
  -3. cache socket descriptors weil kein close existiert
  -4. jede funktion hat timeout-possibility (connect_smart!)
  -5. optional readline and buffering functionality
  -
   TODO:
   buffer == 0 -> fully unbuffered
   timeout == 0 -> fully blocking
  Index: ossp-pkg/sa/sa.pod
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 sa.pod
  --- ossp-pkg/sa/sa.pod	2001/10/05 11:49:10	1.4
  +++ ossp-pkg/sa/sa.pod	2001/10/05 11:55:51	1.5
  @@ -107,6 +107,17 @@
   specification (C<{tcp,udp}://<host>[:<port>]>) to the C<sa_addr_t> and
   vice versa.
   
  +=item B<Type Abstraction>
  +
  +Some other subtle details in the socket API make the life hard in
  +practice: C<socklen_t> and C<ssize_t>. These two types originally were
  +(and on some platforms still are) plain integers or unsigned integers
  +while POSIX later introduced own types for them. This is nasty, because
  +for full backward compatibility and type-correct API usage, every
  +application has to check whether the newer types exists and if not
  +provide own definitions which map to the still actually used integer
  +type on the underlying platform. B<OSSP sa> hides all this in its API.
  +
   =item B<I/O Timeouts>
   
   Each function of B<OSSP sa> is aware of a central timeout (set by

From ossp-cvs-owner@ossp.org  Fri Oct  5 14:56:07 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f95Cu6H94344; Fri, 5 Oct 2001 14:56:06 +0200 (CEST)
Date: Fri, 5 Oct 2001 14:56:06 +0200 (CEST)
Message-Id: <200110051256.f95Cu6H94344@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   05-Oct-2001 14:56:06
  Branch: HEAD                             Handle: 2001100513560600

  Modified files:
    ossp-pkg/sa             sa_test.c

  Log:
    simplify test

  Summary:
    Revision    Changes     Path
    1.4         +11 -10     ossp-pkg/sa/sa_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa_test.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 sa_test.c
  --- ossp-pkg/sa/sa_test.c	2001/10/05 11:40:22	1.3
  +++ ossp-pkg/sa/sa_test.c	2001/10/05 12:56:06	1.4
  @@ -3,8 +3,8 @@
   #include <stdlib.h>
   #include <stdarg.h>
   #include <time.h>
  -#include <syslog.h>
   #include <sys/utsname.h>
  +#include <unistd.h>
   
   #include "sa.h"
   
  @@ -62,18 +62,19 @@
       now = time(NULL);
       tm = localtime(&now);
       strftime(caTime, sizeof(caTime), "%b %e %H:%M:%S", tm);
  -    if (uname(&uts) == 0) {
  -        cpHost = strdup(uts.nodename);
  -        if ((cp = strchr(cpHost, '.')) != NULL)
  -            *cp = '\0';
  -    }
  -    else
  -        cpHost = strdup("0.0.0.0"); /* FIXME */
  +    if (uname(&uts) == -1)
  +        die("uname");
  +    cpHost = strdup(uts.nodename);
  +    if ((cp = strchr(cpHost, '.')) != NULL)
  +        *cp = '\0';
       strcpy(caTag, "progname[12]: ");
       if (strlen(caTag) > 32)
           caTag[32] = '\0';
  -    sprintf(caBuf, "<%d>%s %s %s%s", LOG_MAIL|LOG_EMERG, caTime, cpHost, caTag, "test");
  -    fprintf(stderr, "%s\n", caBuf);
  +    sprintf(caBuf, "<16>%s %s %s[%ld]: %s", caTime, cpHost, 
  +            argv[0], (long)getpid(), "test for Internet Datagram socket");
  +    fprintf(stderr, "Send to syslog: \"%s\"\n", caBuf);
  +
  +    /* send message to syslogd(8) */
       nBuf = strlen(caBuf);
       if (sa_writeto(sa, caBuf, nBuf, (size_t *)&n, ra) != SA_OK)
           die("sa_writeto");

From ossp-cvs-owner@ossp.org  Fri Oct  5 15:17:38 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f95DHb296980; Fri, 5 Oct 2001 15:17:37 +0200 (CEST)
Date: Fri, 5 Oct 2001 15:17:37 +0200 (CEST)
Message-Id: <200110051317.f95DHb296980@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa TODO sa.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   05-Oct-2001 15:17:37
  Branch: HEAD                             Handle: 2001100514173600

  Modified files:
    ossp-pkg/sa             TODO sa.c

  Log:
    Support fully unbuffered I/O and make this the default.

  Summary:
    Revision    Changes     Path
    1.5         +0  -1      ossp-pkg/sa/TODO
    1.6         +125 -78    ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 TODO
  --- ossp-pkg/sa/TODO	2001/10/05 11:55:51	1.4
  +++ ossp-pkg/sa/TODO	2001/10/05 13:17:36	1.5
  @@ -1,5 +1,4 @@
   
   TODO:
  -buffer == 0 -> fully unbuffered
   timeout == 0 -> fully blocking
   
  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 sa.c
  --- ossp-pkg/sa/sa.c	2001/10/05 11:48:49	1.5
  +++ ossp-pkg/sa/sa.c	2001/10/05 13:17:36	1.6
  @@ -531,19 +531,14 @@
       sa->eType      = SA_TYPE_STREAM;
       sa->sSocket    = -1;
       sa->bTimeout   = 0;
  +    sa->tvTimeout.tv_sec  = 0;
  +    sa->tvTimeout.tv_usec = 0;
       sa->nReadLen   = 0;
  -    sa->nReadSize  = 1024;
  -    if ((sa->cpReadBuf = (char *)malloc(sa->nReadSize)) == NULL) {
  -        free(sa);
  -        return SA_ERR_MEM;
  -    }
  +    sa->nReadSize  = 0;
  +    sa->cpReadBuf  = NULL;
       sa->nWriteLen  = 0;
  -    sa->nWriteSize = 1024;
  -    if ((sa->cpWriteBuf = (char *)malloc(sa->nWriteSize)) == NULL) {
  -        free(sa->cpReadBuf);
  -        free(sa);
  -        return SA_ERR_MEM;
  -    }
  +    sa->nWriteSize = 0;
  +    sa->cpWriteBuf = NULL;
       *sap = sa;
       return SA_OK;
   }
  @@ -596,14 +591,38 @@
           return SA_ERR_ARG;
       if (sa->nReadLen > rsize || sa->nWriteLen > wsize)
           return SA_ERR_ARG;
  -    if ((cp = (char *)realloc(sa->cpReadBuf, rsize)) == NULL)
  -        return SA_ERR_SYS;
  -    sa->cpReadBuf = cp;
  -    sa->nReadSize  = rsize;
  -    if ((cp = (char *)realloc(sa->cpWriteBuf, wsize)) == NULL)
  -        return SA_ERR_SYS;
  -    sa->cpWriteBuf = cp;
  -    sa->nWriteSize = wsize;
  +    if (rsize > 0) {
  +        if (sa->cpReadBuf == NULL)
  +            cp = (char *)malloc(rsize);
  +        else
  +            cp = (char *)realloc(sa->cpReadBuf, rsize);
  +        if (cp == NULL)
  +            return SA_ERR_SYS;
  +        sa->cpReadBuf = cp;
  +        sa->nReadSize = rsize;
  +    }
  +    else {
  +        if (sa->cpReadBuf != NULL)
  +            free(sa->cpReadBuf);
  +        sa->cpReadBuf = NULL;
  +        sa->nReadSize = 0;
  +    }
  +    if (wsize > 0) {
  +        if (sa->cpWriteBuf == NULL)
  +            cp = (char *)malloc(wsize);
  +        else
  +            cp = (char *)realloc(sa->cpWriteBuf, wsize);
  +        if (cp == NULL)
  +            return SA_ERR_SYS;
  +        sa->cpWriteBuf = cp;
  +        sa->nWriteSize = wsize;
  +    }
  +    else {
  +        if (sa->cpWriteBuf != NULL)
  +            free(sa->cpWriteBuf);
  +        sa->cpWriteBuf = NULL;
  +        sa->nWriteSize = 0;
  +    }
       return SA_OK;
   }
   
  @@ -877,7 +896,7 @@
   sa_rc_t sa_read(sa_t *sa, char *cpBuf, size_t nBufReq, size_t *nBufRes)
   {
       int n;
  -    int rv;
  +    sa_rc_t rv;
       size_t res;
   
       if (sa == NULL || cpBuf == NULL || nBufReq == 0)
  @@ -890,45 +909,56 @@
       /* flush write buffer */
       if (sa->nWriteLen > 0)
           sa_flush(sa);
  +
  +    /* perform read operation */
       rv = SA_OK;
  -    res = 0;
  -    while (1) {
  -        if (nBufReq <= sa->nReadLen) {
  -            /* buffer holds enough data, so use this */
  -            memmove(cpBuf, sa->cpReadBuf, nBufReq);
  -            memmove(sa->cpReadBuf, sa->cpReadBuf+nBufReq, sa->nReadLen-nBufReq);
  -            sa->nReadLen -= nBufReq;
  -            res += nBufReq;
  -        }
  -        else {
  -            if (sa->nReadLen > 0) {
  -                /* fetch already existing buffer contents as a start */
  -                memmove(cpBuf, sa->cpReadBuf, sa->nReadLen);
  -                nBufReq -= sa->nReadLen;
  -                cpBuf   += sa->nReadLen;
  -                res     += sa->nReadLen;
  -                sa->nReadLen = 0;
  -            }
  -            if (nBufReq >= sa->nReadSize) {
  -                /* buffer is too small at all, so read directly */
  -                n = sa_read_raw(sa, cpBuf, nBufReq);
  -                if (n > 0)
  -                    res += n;
  -                else if (n <= 0)
  -                    rv = SA_ERR_SYS;
  +    if (sa->nReadSize == 0) {
  +        /* unbuffered I/O */
  +        res = sa_read_raw(sa, cpBuf, nBufReq);
  +        if (res <= 0)
  +            rv = SA_ERR_SYS;
  +    }
  +    else {
  +        /* buffered I/O */
  +        res = 0;
  +        while (1) {
  +            if (nBufReq <= sa->nReadLen) {
  +                /* buffer holds enough data, so use this */
  +                memmove(cpBuf, sa->cpReadBuf, nBufReq);
  +                memmove(sa->cpReadBuf, sa->cpReadBuf+nBufReq, sa->nReadLen-nBufReq);
  +                sa->nReadLen -= nBufReq;
  +                res += nBufReq;
               }
               else {
  -                /* fill buffer with new data */
  -                n = sa_read_raw(sa, sa->cpReadBuf, sa->nReadSize);
  -                if (n <= 0)
  -                    rv = SA_ERR_SYS;
  +                if (sa->nReadLen > 0) {
  +                    /* fetch already existing buffer contents as a start */
  +                    memmove(cpBuf, sa->cpReadBuf, sa->nReadLen);
  +                    nBufReq -= sa->nReadLen;
  +                    cpBuf   += sa->nReadLen;
  +                    res     += sa->nReadLen;
  +                    sa->nReadLen = 0;
  +                }
  +                if (nBufReq >= sa->nReadSize) {
  +                    /* buffer is too small at all, so read directly */
  +                    n = sa_read_raw(sa, cpBuf, nBufReq);
  +                    if (n > 0)
  +                        res += n;
  +                    else if (n <= 0)
  +                        rv = SA_ERR_SYS;
  +                }
                   else {
  -                    sa->nReadLen = n;
  -                    continue;
  +                    /* fill buffer with new data */
  +                    n = sa_read_raw(sa, sa->cpReadBuf, sa->nReadSize);
  +                    if (n <= 0)
  +                        rv = SA_ERR_SYS;
  +                    else {
  +                        sa->nReadLen = n;
  +                        continue;
  +                    }
                   }
               }
  +            break;
           }
  -        break;
       }
       if (nBufRes != NULL)
           *nBufRes = res;
  @@ -1032,6 +1062,7 @@
   {
       size_t n;
       size_t res;
  +    sa_rc_t rv;
   
       if (sa == NULL)
           return SA_ERR_ARG;
  @@ -1040,31 +1071,45 @@
       if (sa->sSocket == -1)
           return SA_ERR_USE;
   
  -    if (nBufReq > (sa->nWriteSize - sa->nWriteLen)) {
  -        /* not enough space in buffer, so flush buffer */
  -        sa_flush(sa);
  -    }
  -    res = 0;
  -    if (nBufReq >= sa->nWriteSize) {
  -        /* buffer too small at all, so write immediately */
  -        while (nBufReq > 0) {
  -            n = sa_write_raw(sa, cpBuf, nBufReq);
  -            if (n <= 0)
  -                break;
  -            nBufReq  -= n;
  -            cpBuf    += n;
  -            res      += n;
  +    rv = SA_OK;
  +    if (sa->nWriteSize == 0) {
  +        /* unbuffered I/O */
  +        res = sa_write_raw(sa, cpBuf, nBufReq);
  +        if (res < 0) {
  +            res = 0;
  +            rv = SA_ERR_SYS;
           }
       }
       else {
  -        /* (again) enough sprace in buffer, so store data */
  -        memmove(sa->cpWriteBuf+sa->nWriteLen, cpBuf, nBufReq);
  -        sa->nWriteLen += nBufReq;
  -        res = nBufReq;
  +        /* buffered I/O */
  +        if (nBufReq > (sa->nWriteSize - sa->nWriteLen)) {
  +            /* not enough space in buffer, so flush buffer */
  +            sa_flush(sa);
  +        }
  +        res = 0;
  +        if (nBufReq >= sa->nWriteSize) {
  +            /* buffer too small at all, so write immediately */
  +            while (nBufReq > 0) {
  +                n = sa_write_raw(sa, cpBuf, nBufReq);
  +                if (n < 0)
  +                    rv = SA_ERR_SYS;
  +                if (n <= 0)
  +                    break;
  +                nBufReq  -= n;
  +                cpBuf    += n;
  +                res      += n;
  +            }
  +        }
  +        else {
  +            /* (again) enough sprace in buffer, so store data */
  +            memmove(sa->cpWriteBuf+sa->nWriteLen, cpBuf, nBufReq);
  +            sa->nWriteLen += nBufReq;
  +            res = nBufReq;
  +        }
       }
       if (nBufRes != NULL)
           *nBufRes = res;
  -    return SA_OK;
  +    return rv;
   }
   
   sa_rc_t sa_writeto(sa_t *sa, const char *buf, size_t buflen, size_t *bufdone, sa_addr_t *raddr)
  @@ -1125,14 +1170,16 @@
           return SA_ERR_USE;
       if (sa->sSocket == -1)
           return SA_ERR_USE;
  -    while (sa->nWriteLen > 0) {
  -        n = sa_write_raw(sa, sa->cpWriteBuf, sa->nWriteLen);
  -        if (n <= 0)
  -            break;
  -        memmove(sa->cpWriteBuf, sa->cpWriteBuf+n, sa->nWriteLen-n);
  -        sa->nWriteLen -= n;
  +    if (sa->nWriteSize > 0) {
  +        while (sa->nWriteLen > 0) {
  +            n = sa_write_raw(sa, sa->cpWriteBuf, sa->nWriteLen);
  +            if (n <= 0)
  +                break;
  +            memmove(sa->cpWriteBuf, sa->cpWriteBuf+n, sa->nWriteLen-n);
  +            sa->nWriteLen -= n;
  +        }
  +        sa->nWriteLen = 0;
       }
  -    sa->nWriteLen = 0;
       return SA_OK;
   }
   

From ossp-cvs-owner@ossp.org  Fri Oct  5 15:18:20 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f95DIJN97063; Fri, 5 Oct 2001 15:18:19 +0200 (CEST)
Date: Fri, 5 Oct 2001 15:18:19 +0200 (CEST)
Message-Id: <200110051318.f95DIJN97063@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   05-Oct-2001 15:18:19
  Branch: HEAD                             Handle: 2001100514181800

  Modified files:
    ossp-pkg/sa             TODO

  Log:
    no timeout is already implemented

  Summary:
    Revision    Changes     Path
    1.6         BLOB        ossp-pkg/sa/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs update -p -r1.5 TODO >TODO.old
  $ cvs update -p -r1.6 TODO >TODO.new
  $ diff -u TODO.old TODO.new
  --- TODO.old	Fri Oct  5 15:18:19 2001
  +++ TODO.new	Fri Oct  5 15:18:19 2001
  @@ -1,4 +0,0 @@
  -
  -TODO:
  -timeout == 0 -> fully blocking
  -

From ossp-cvs-owner@ossp.org  Fri Oct  5 15:19:31 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f95DJUL97176; Fri, 5 Oct 2001 15:19:30 +0200 (CEST)
Date: Fri, 5 Oct 2001 15:19:30 +0200 (CEST)
Message-Id: <200110051319.f95DJUL97176@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   05-Oct-2001 15:19:30
  Branch: HEAD                             Handle: 2001100514193000

  Modified files:
    ossp-pkg/sa             sa.c

  Log:
    fix sa_connect() if no timeout is set

  Summary:
    Revision    Changes     Path
    1.7         +6  -2      ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 sa.c
  --- ossp-pkg/sa/sa.c	2001/10/05 13:17:36	1.6
  +++ ossp-pkg/sa/sa.c	2001/10/05 13:19:30	1.7
  @@ -682,8 +682,12 @@
           if ((rv = sa_socket_init(sa, raddr->nFamily)) != SA_OK)
               return rv;
   
  -    if (!sa->bTimeout)
  -        return connect(sa->sSocket, raddr->saBuf, raddr->slBuf);
  +    if (!sa->bTimeout) {
  +        if (connect(sa->sSocket, raddr->saBuf, raddr->slBuf) < 0)
  +            return SA_ERR_SYS;
  +        else
  +            return SA_OK;
  +    }
   
       error = 0;
       rv = SA_OK;

From ossp-cvs-owner@ossp.org  Fri Oct  5 16:25:59 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f95EPvZ04692; Fri, 5 Oct 2001 16:25:57 +0200 (CEST)
Date: Fri, 5 Oct 2001 16:25:57 +0200 (CEST)
Message-Id: <200110051425.f95EPvZ04692@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_buffer.c l2_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   05-Oct-2001 16:25:57
  Branch: HEAD                             Handle: 2001100515255700

  Modified files:
    ossp-pkg/l2             l2_ch_buffer.c l2_test.c

  Log:
    Changed timer from VIRTUAL to REAL. Completed flush alarm mechanism which
    seems to work, probably because we are not forking.

  Summary:
    Revision    Changes     Path
    1.23        +15 -4      ossp-pkg/l2/l2_ch_buffer.c
    1.33        +11 -2      ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_buffer.c
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 l2_ch_buffer.c
  --- ossp-pkg/l2/l2_ch_buffer.c	2001/10/05 10:40:17	1.22
  +++ ossp-pkg/l2/l2_ch_buffer.c	2001/10/05 14:25:57	1.23
  @@ -48,8 +48,18 @@
   
   static void catchsignal(int sig, ...)
   {
  -    if (sig == SIGALRM)
  +    va_list ap;
  +    static  l2_channel_t *ch = NULL;
  +
  +    if (sig == 0) {
  +        va_start(ap, sig);
  +        ch = va_arg(ap, l2_channel_t *);
  +        va_end(ap);
  +    }
  +    else if (sig == SIGALRM) {
           TRACE("SIGALRM caught");
  +        l2_channel_flush(ch);
  +    }
   }
   
   /* create channel */
  @@ -111,7 +121,7 @@
       valnew.it_interval.tv_usec = 0;
       valnew.it_value.tv_sec = cfg->bufinterval;
       valnew.it_value.tv_usec = 0;
  -    return setitimer(ITIMER_VIRTUAL, &valnew, &cfg->valprev); /* set flush timer */
  +    return setitimer(ITIMER_REAL, &valnew, &cfg->valprev); /* set flush timer */
   }
   
   /************************************************************
  @@ -129,7 +139,7 @@
       valnew.it_interval.tv_usec = 0;
       valnew.it_value.tv_sec = cfg->bufinterval;
       valnew.it_value.tv_usec = 0;
  -    return setitimer(ITIMER_VIRTUAL, &valnew, 0); /* reset flush timer */
  +    return setitimer(ITIMER_REAL, &valnew, 0); /* reset flush timer */
   }
   
   /* open channel */
  @@ -148,6 +158,7 @@
           sigemptyset(&locact.sa_mask);
           locact.sa_flags = 0;
   
  +        catchsignal(0, ch);
           /* save old signal context before replacing with our own */
           if (sigaction(SIGALRM, &locact, &cfg->sigalrm) < 0)
               return L2_ERR_SYS;
  @@ -245,7 +256,7 @@
       l2_result_t rv;
   
       if (cfg->bufinterval != 0) {
  -        setitimer(ITIMER_VIRTUAL, &cfg->valprev, 0); /* restore timer values */
  +        setitimer(ITIMER_REAL, &cfg->valprev, 0); /* restore timer values */
           /* restore previous signal context if previously saved & replaced    */
           if (&cfg->sigalrm.sa_handler)
               if (sigaction(SIGALRM, &cfg->sigalrm, 0) < 0)
  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.32 -r1.33 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/10/05 10:40:17	1.32
  +++ ossp-pkg/l2/l2_test.c	2001/10/05 14:25:57	1.33
  @@ -99,7 +99,7 @@
       if ((chBuf  = l2_channel_create(&l2_handler_buffer)) == NULL)    /* Buffer */
           die("failed to create buffer channel");
   
  -    if (l2_channel_configure(chBuf, "size,interval", 100, 20) != L2_OK)
  +    if (l2_channel_configure(chBuf, "size,interval", 800, 12) != L2_OK)
           die("failed to configure buffer channel");
   
       if ((chFile = l2_channel_create(&l2_handler_file)) == NULL)      /* File   */
  @@ -220,7 +220,16 @@
       if (l2_stream_formatter(st, 'S', l2_util_fmt_dump, NULL) != L2_OK)
           die("failed to configure formatter for %%S");
   
  -    if (l2_stream_log(st, L2_LEVEL_PANIC, "Checking localhost %s %{myparm}k <%{text}S><%{hex}S><%{base64}S>\n", "foo", 12345, "foo\1bar", 7, "foo\1bar", 7, "foo\1bar", 7) != L2_OK)
  +    if (l2_stream_log(st, L2_LEVEL_PANIC, "0Checking localhost %s %{myparm}k <%{text}S><%{hex}S><%{base64}S>\n", "foo", 12345, "foo\1bar", 7, "foo\1bar", 7, "foo\1bar", 7) != L2_OK)
  +        die("failed to log message to stream");
  +
  +    if (l2_stream_log(st, L2_LEVEL_PANIC, "1Shecking\n") != L2_OK)
  +        die("failed to log message to stream");
  +
  +    if (l2_stream_log(st, L2_LEVEL_PANIC, "2Checking localhost %s %{myparm}k <%{text}S><%{hex}S><%{base64}S>\n", "foo", 12345, "foo\1bar", 7, "foo\1bar", 7, "foo\1bar", 7) != L2_OK)
  +        die("failed to log message to stream");
  +
  +    if (l2_stream_log(st, L2_LEVEL_PANIC, "3Shecking\n") != L2_OK)
           die("failed to log message to stream");
   
       if (l2_stream_destroy(st) != L2_OK)

From ossp-cvs-owner@ossp.org  Fri Oct  5 22:52:17 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f95KqG147309; Fri, 5 Oct 2001 22:52:16 +0200 (CEST)
Date: Fri, 5 Oct 2001 22:52:16 +0200 (CEST)
Message-Id: <200110052052.f95KqG147309@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa TODO sa.c sa.h sa.pod sa_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   05-Oct-2001 22:52:16
  Branch: HEAD                             Handle: 2001100521521500

  Modified files:
    ossp-pkg/sa             TODO sa.c sa.h sa.pod sa_test.c

  Log:
    Woohhhooo: Second major revamp of Socket Abstraction (SA) library.
    This time is gets really close to a 100% clean and polished library.

  Summary:
    Revision    Changes     Path
    1.7         +4  -0      ossp-pkg/sa/TODO
    1.8         +642 -378   ossp-pkg/sa/sa.c
    1.7         +13 -12     ossp-pkg/sa/sa.h
    1.6         +19 -10     ossp-pkg/sa/sa.pod
    1.5         +1  -1      ossp-pkg/sa/sa_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 TODO
  --- ossp-pkg/sa/TODO	2001/10/05 13:18:18	1.6
  +++ ossp-pkg/sa/TODO	2001/10/05 20:52:15	1.7
  @@ -0,0 +1,4 @@
  +
  +ETIMEDOUT -> SA_ERR_TIM;
  +1025 buffer von writef in sa_t aufnehmen und variablen machen!
  +
  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 sa.c
  --- ossp-pkg/sa/sa.c	2001/10/05 13:19:30	1.7
  +++ ossp-pkg/sa/sa.c	2001/10/05 20:52:15	1.8
  @@ -33,108 +33,114 @@
   #endif
   
   /* include system API headers */
  -#include <stdio.h>
  -#include <stdlib.h>
  -#include <stdarg.h>
  -#include <string.h>
  -#include <unistd.h>
  -#include <ctype.h>
  -#include <errno.h>
  -#include <fcntl.h>
  -#include <time.h>
  -#include <sys/time.h>
  -#include <netdb.h>
  -#include <sys/types.h>
  -#include <sys/un.h>
  -#include <netinet/in.h>
  -#include <sys/socket.h>
  -#include <arpa/inet.h>
  +#include <stdio.h>       /* for "s[n]printf()" */
  +#include <stdlib.h>      /* for "malloc()" & friends */
  +#include <stdarg.h>      /* for "va_xxx()" and "va_list" */
  +#include <string.h>      /* for "strxxx()" and "size_t" */
  +#include <sys/types.h>   /* for general prerequisites */
  +#include <ctype.h>       /* for isxxx() */
  +#include <errno.h>       /* for "EXXX" */
  +#include <fcntl.h>       /* for "F_XXX" and "O_XXX" */
  +#include <unistd.h>      /* for standard Unix stuff */
  +#include <netdb.h>       /* for "struct prototent" */
  +#include <sys/time.h>    /* for "struct timeval" */
  +#include <sys/un.h>      /* for "struct sockaddr_un" */
  +#include <netinet/in.h>  /* for "struct sockaddr_in[6]" */
  +#include <sys/socket.h>  /* for "AF_XXX" and "SOCK_XXX" */
  +#include <arpa/inet.h>   /* for "inet_xtoy" */
   
   /* include own API header */
   #include "sa.h"
   
   /* socket address abstraction object */
   struct sa_addr_st {
  -    int              nFamily;
  -    struct sockaddr *saBuf;
  -    socklen_t        slBuf;
  +    int              nFamily;     /* the socket family (AF_XXX) */
  +    struct sockaddr *saBuf;       /* the "struct sockaddr_xx" actually */
  +    socklen_t        slBuf;       /* the length of "struct sockaddr_xx" */
   };
   
   /* socket abstraction object */
   struct sa_st {
  -    sa_type_t        eType;
  -    int              sSocket;
  -    int              bTimeout;
  -    struct timeval   tvTimeout;
  -    int              nReadLen;
  -    int              nReadSize;
  -    char            *cpReadBuf;
  -    int              nWriteLen;
  -    int              nWriteSize;
  -    char            *cpWriteBuf;
  +    sa_type_t        eType;       /* socket type (stream or datagram) */
  +    int              fdSocket;    /* socket file descriptor */
  +    int              bTimeout;    /* timeout enabling flag */
  +    struct timeval   tvTimeout;   /* timeout value (sec, usec) */
  +    int              nReadLen;    /* read  buffer current length */
  +    int              nReadSize;   /* read  buffer current size */
  +    char            *cpReadBuf;   /* read  buffer memory chunk */
  +    int              nWriteLen;   /* write buffer current length */
  +    int              nWriteSize;  /* write buffer current size */
  +    char            *cpWriteBuf;  /* write buffer memory chunk */
   };
   
  -/* make sure AF_LOCAL define exists */
  +/* boolean values */
  +#ifndef FALSE
  +#define FALSE (0)
  +#endif
  +#ifndef TRUE
  +#define TRUE  (!FALSE)
  +#endif
  +
  +/* backward compatibility for AF_LOCAL */
   #if !defined(AF_LOCAL) && defined(AF_UNIX)
   #define AF_LOCAL AF_UNIX
   #endif
   
  -/* make sure inet_pton() exists */
  -#if defined(HAVE_INET_PTON)
  -#define sa_inet_pton inet_pton
  -#elif defined(HAVE_INET_ATON)
  -static int inet_pton(int family, const char *strptr, void *addrptr)
  +/* convert Internet address from presentation to network format */
  +static int sa_inet_pton(int family, const char *strptr, void *addrptr)
   {
  +#ifdef HAVE_INET_PTON
  +    return inet_pton(family, strptr, addrptr);
  +#else
       struct in_addr in_val;
   
       if (family == AF_INET) {
  -        if (inet_aton(strptr, &in_val)) {
  -            memcpy(addrptr, &in_val, sizeof(struct in_addr));
  -            return 1;
  -        }
  -        return 0;
  +        /* at least for IPv4 we can rely on the old inet_aton(3)
  +           and for IPv6 inet_pton(3) would exist anyway */
  +        if (inet_aton(strptr, &in_val) == 0)
  +            return 0;
  +        memcpy(addrptr, &in_val, sizeof(struct in_addr));
  +        return 1;
       }
       errno = EAFNOSUPPORT;
  -    return -1;
  -}
  -#else
  -#error "neither inet_pton nor inet_aton available"
  +    return 0;
   #endif
  +}
   
  -/* make sure inet_ntop() exists */
  -#if defined(HAVE_INET_NTOP)
  -#define sa_inet_ntop inet_ntop
  -#elif defined(HAVE_INET_NTOA)
  -static char *inet_ntop(int family, const void *src, char *dst, size_t size)
  +/* convert Internet address from network to presentation format */
  +static const char *sa_inet_ntop(int family, const void *src, char *dst, size_t size)
   {
  +#ifdef HAVE_INET_NTOP
  +    return inet_ntop(family, src, dst, size);
  +#else
       struct in_addr in_val;
       char *cp;
       int n;
   
       if (family == AF_INET) {
  -        if ((cp = inet_ntoa(src)) != NULL) {
  -            n = strlen(cp);
  -            if (n > size-1)
  -                n = size-1;
  -            memcpy(dst, cp, n);
  -            dst[n] = '\0';
  -            return 1;
  -        }
  -        return 0;
  +        /* at least for IPv4 we can rely on the old inet_ntoa(3)
  +           and for IPv6 inet_ntop(3) would exist anyway */
  +        if ((cp = inet_ntoa(src)) == NULL) 
  +            return NULL;
  +        n = strlen(cp);
  +        if (n > size-1)
  +            n = size-1;
  +        memcpy(dst, cp, n);
  +        dst[n] = '\0';
  +        return dst;
       }
       errno = EAFNOSUPPORT;
  -    return -1;
  -}
  -#else
  -#error "neither inet_ntop nor inet_ntoa available"
  +    return NULL;
   #endif
  +}
   
  -/* minimal vsnprintf(3) */
  +/* minimal vsnprintf(3) variant which supports %{c,s,d} only */
   static int sa_mvsnprintf(char *buffer, size_t bufsize, const char *format, va_list ap)
   {
       char *bufptr;
       char *bufend;
  -    char ibuf[((sizeof(int)*8)/3)+10]; /* (available bits) x log_10(2) + safety */
  +    /* sufficient integer buffer: <available-bits> x log_10(2) + safety */
  +    char ibuf[((sizeof(int)*8)/3)+10]; 
       char *cp;
       char c;
       int d;
  @@ -146,10 +152,13 @@
           if (c == '%') {
               c = *format++;
               if (c == '%')
  +                /* implement "%%" */
                   *bufptr++ = c;
               else if (c == 'c')
  +                /* implement "%c" */
                   *bufptr++ = (char)va_arg(ap, int);
               else if (c == 's') {
  +                /* implement "%s" */
                   if ((cp = (char *)va_arg(ap, char *)) == NULL)
                       cp = "(null)";
                   n = strlen(cp);
  @@ -159,11 +168,12 @@
                   bufptr += n;
               }
               else if (c == 'd') {
  +                /* implement "%d" */
                   d = (int)va_arg(ap, int);
   #ifdef HAVE_SNPRINTF
  -                snprintf(ibuf, sizeof(ibuf), "%d", d); /* inherently secure */
  +                snprintf(ibuf, sizeof(ibuf), "%d", d); /* explicitly secure */
   #else
  -                sprintf(ibuf, "%d", d); /* nevertheless secure; see ibuf above */
  +                sprintf(ibuf, "%d", d);                /* implicitly secure */
   #endif
                   n = strlen(ibuf);
                   memcpy(bufptr, ibuf, n);
  @@ -182,44 +192,66 @@
       return (bufptr - buffer);
   }
   
  -/* minimal snprintf(3) */
  +/* minimal snprintf(3) variant which supports %{c,s,d} only */
   static int sa_msnprintf(char *buffer, size_t bufsize, const char *format, ...)
   {
       int chars;
       va_list ap;
   
  +    /* argument sanity check(s) */
  +    if (buffer == NULL || bufsize == 0 || format == NULL)
  +        return 0;
  +
  +    /* pass through to va_list based variant */
       va_start(ap, format);
       chars = sa_mvsnprintf(buffer, bufsize, format, ap);
       va_end(ap);
  +
       return chars;
   }
   
  -sa_rc_t sa_addr_create(sa_addr_t **saa)
  +/* create address object */
  +sa_rc_t sa_addr_create(sa_addr_t **saap)
   {
  -    if (saa == NULL)
  +    sa_addr_t *saa;
  +
  +    /* argument sanity check(s) */
  +    if (saap == NULL)
           return SA_ERR_ARG;
  -    if ((*saa = (sa_addr_t *)malloc(sizeof(sa_addr_t))) == NULL)
  +
  +    /* allocate and initialize new address object */
  +    if ((saa = (sa_addr_t *)malloc(sizeof(sa_addr_t))) == NULL)
           return SA_ERR_MEM;
  -    (*saa)->saBuf   = NULL;
  -    (*saa)->slBuf   = 0;
  -    (*saa)->nFamily = 0;
  +    saa->nFamily = 0;
  +    saa->saBuf   = NULL;
  +    saa->slBuf   = 0;
  +
  +    /* pass object to caller */
  +    *saap = saa;
  +
       return SA_OK;
   }
   
  +/* destroy address object */
   sa_rc_t sa_addr_destroy(sa_addr_t *saa)
   {
  +    /* argument sanity check(s) */
       if (saa == NULL)
           return SA_ERR_ARG;
  +
  +    /* free address objects and sub-object(s) */
       if (saa->saBuf != NULL)
           free(saa->saBuf);
       free(saa);
  +
       return SA_OK;
   }
   
  +/* import URI into address object */
   sa_rc_t sa_addr_u2a(sa_addr_t *saa, const char *uri, ...)
   {
       va_list ap;
  -    int nPort;
  +    int sf;
       socklen_t sl;
       struct sockaddr *sa;
       struct sockaddr_un un;
  @@ -230,17 +262,17 @@
       struct hostent *he;
       struct servent *se;
       int bNumeric;
  -    int i;
  -    int n;
  -    char *cpProto;
       char *cpHost;
       char *cpPort;
  -    char *cpPath;
  +    char *cpProto;
  +    int nPort;
  +    const char *cpPath;
       char uribuf[1024];
       char *cp;
  -    int sf;
  +    int i;
  +    int n;
   
  -    /* argument sanity check */
  +    /* argument sanity check(s) */
       if (saa == NULL || uri == NULL)
           return SA_ERR_ARG;
   
  @@ -248,35 +280,48 @@
       va_start(ap, uri);
       sa_mvsnprintf(uribuf, sizeof(uribuf), uri, ap);
       va_end(ap);
  +
  +    /* initialize result variables */
  +    sa = NULL;
  +    sl = 0;
  +    sf = 0;
   
  -    /* parse URI into parts */
  +    /* parse URI and resolve contents. 
  +       The following syntax is recognized:
  +       - unix:<path>
  +       - inet://<host>:<port>[#(tcp|udp)] */
       uri = uribuf;
  -    cpProto = "unix";
  -    if ((cp = strchr(uri, ':')) != NULL) {
  -        cpProto = (char *)uri;
  -        *cp = '\0';
  -        uri = cp+1;
  -    }
  -    cpHost = "";
  -    cpPort = "";
  -    if (strncmp(uri, "//", 2) == 0) {
  -        uri += 2;
  -        cpHost = (char *)uri;
  -        if ((cp = strchr(uri, ':')) == NULL)
  +    if (strncmp(uri, "unix:", 5) == 0) {
  +        /* parse URI */
  +        cpPath = uri+5;
  +        if (cpPath[0] != '/')
  +            return SA_ERR_ARG;
  +
  +        /* mandatory(!) socket address structure initialization */
  +        memset(&un, 0, sizeof(un));
  +
  +        /* fill-in socket address structure */
  +        n = strlen(cpPath);
  +        if ((n+1) > sizeof(un.sun_path))
  +            return SA_ERR_MEM;
  +        memcpy(un.sun_path, cpPath, n+1);
  +        un.sun_family = AF_LOCAL;
  +
  +        /* provide results */
  +        sa = (struct sockaddr *)&un;
  +        sl = sizeof(un);
  +        sf = AF_LOCAL;
  +    }
  +    else if (strncmp(uri, "inet://", 7) == 0) {
  +        /* parse URI */
  +        cpHost = (char *)(uri+7);
  +        if ((cp = strchr(cpHost, ':')) == NULL)
               return SA_ERR_ARG;
           *cp++ = '\0';
           cpPort = cp;
  -        uri = cp;
  -        if ((cp = strchr(uri, '/')) != NULL)
  -            uri = cp;
  -        else
  -            uri = strchr(uri, '\0');
  -    }
  -    cpPath = (char *)uri;
   
  -    /* resolve port */
  -    nPort = 0;
  -    if (strcmp(cpProto, "inet") == 0) {
  +        /* resolve port */
  +        nPort = 0;
           bNumeric = 1;
           for (i = 0; cpPort[i] != '\0'; i++) {
               if (!isdigit((int)cpPort[i])) {
  @@ -287,38 +332,25 @@
           if (bNumeric)
               nPort = atoi(cpPort);
           else {
  +            cpProto = "tcp";
  +            if ((cp = strchr(cpPort, '#')) != NULL) {
  +                *cp++ = '\0';
  +                cpProto = cp;
  +            }
               if ((se = getservbyname(cpPort, cpProto)) == NULL)
                   return SA_ERR_SYS;
               nPort = ntohs(se->s_port);
           }
  -    }
   
  -    /* mandatory(!) socket address structure initialization */
  -    memset(&un,  0, sizeof(un));
  -    memset(&sa4, 0, sizeof(sa4));
  +        /* mandatory(!) socket address structure initialization */
  +        memset(&sa4, 0, sizeof(sa4));
   #ifdef AF_INET6
  -    memset(&sa6, 0, sizeof(sa6));
  +        memset(&sa6, 0, sizeof(sa6));
   #endif
   
  -    /* resolve host by trying to parse it as either directly a IPv4 or
  -       IPv6 address or by resolving it to either a IPv4 or IPv6 address */
  -    sa = NULL;
  -    sl = 0;
  -    sf = 0;
  -    if (strcmp(cpProto, "unix") == 0) {
  -        if (cpProto[0] != '/')
  -            return SA_ERR_ARG;
  -        n = strlen(cpProto);
  -        if ((n+1) > sizeof(un.sun_path))
  -            return SA_ERR_MEM;
  -        memcpy(un.sun_path, cpPath, n+1);
  -        un.sun_family = AF_LOCAL;
  -        sa = (struct sockaddr *)&un;
  -        sl = sizeof(un);
  -        sf = AF_LOCAL;
  -    }
  -    else if (strcmp(cpProto, "inet") == 0) {
  -        if (inet_pton(AF_INET, cpHost, &sa4.sin_addr.s_addr) == 1) {
  +        /* resolve host by trying to parse it as either directly a IPv4 or
  +           IPv6 address or by resolving it to either a IPv4 or IPv6 address */
  +        if (sa_inet_pton(AF_INET, cpHost, &sa4.sin_addr.s_addr) == 1) {
               sa4.sin_family = AF_INET;
               sa4.sin_port = htons(nPort);
               sa = (struct sockaddr *)&sa4;
  @@ -326,7 +358,7 @@
               sf = AF_INET;
           }
   #ifdef AF_INET6
  -        else if (inet_pton(AF_INET6, cpHost, &sa6.sin6_addr.s6_addr) == 1) {
  +        else if (sa_inet_pton(AF_INET6, cpHost, &sa6.sin6_addr.s6_addr) == 1) {
               sa6.sin6_family = AF_INET6;
               sa6.sin6_port = htons(nPort);
               sa = (struct sockaddr *)&sa6;
  @@ -338,7 +370,8 @@
               if (he->h_addrtype == AF_INET) {
                   sa4.sin_family = AF_INET;
                   sa4.sin_port = htons(nPort);
  -                memcpy(&sa4.sin_addr.s_addr, he->h_addr_list[0], sizeof(sa4.sin_addr.s_addr));
  +                memcpy(&sa4.sin_addr.s_addr, he->h_addr_list[0],
  +                       sizeof(sa4.sin_addr.s_addr));
                   sa = (struct sockaddr *)&sa4;
                   sl = sizeof(sa4);
                   sf = AF_INET;
  @@ -347,7 +380,8 @@
               else if (he->h_addrtype == AF_INET6) {
                   sa6.sin6_family = AF_INET6;
                   sa6.sin6_port = htons(nPort);
  -                memcpy(&sa6.sin6_addr.s6_addr, he->h_addr_list[0], sizeof(sa6.sin6_addr.s6_addr));
  +                memcpy(&sa6.sin6_addr.s6_addr, he->h_addr_list[0], 
  +                       sizeof(sa6.sin6_addr.s6_addr));
                   sa = (struct sockaddr *)&sa6;
                   sl = sizeof(sa6);
                   sf = AF_INET6;
  @@ -355,18 +389,24 @@
   #endif
           }
       }
  -    if (sa == NULL)
  -        return SA_ERR_ARG;
  -        
  -    /* create result address structure */
  +
  +    /* make sure result variables are set */
  +    if (sa == NULL || sl == 0 || sf == 0)
  +        return SA_ERR_INT;
  +
  +    /* fill-in result address structure */
  +    if (saa->saBuf != NULL)
  +        free(saa->saBuf);
       if ((saa->saBuf = (struct sockaddr *)malloc(sl)) == NULL)
           return SA_ERR_MEM;
       memcpy(saa->saBuf, sa, sl);
       saa->slBuf = sl;
       saa->nFamily = sf;
  +
       return SA_OK;
   }
   
  +/* import "struct sockaddr" into address object */
   sa_rc_t sa_addr_s2a(sa_addr_t *saa, const struct sockaddr *sabuf, socklen_t salen)
   {
       struct sockaddr_un *un;
  @@ -376,16 +416,19 @@
   #endif
       int sf;
   
  +    /* argument sanity check(s) */
       if (saa == NULL || sabuf == NULL || salen == 0)
           return SA_ERR_ARG;
   
       /* create result address structure */
  +    if (saa->saBuf != NULL)
  +        free(saa->saBuf);
       if ((saa->saBuf = (struct sockaddr *)malloc(salen)) == NULL)
           return SA_ERR_MEM;
       memcpy(saa->saBuf, sabuf, salen);
       saa->slBuf = salen;
   
  -    /* fill in family */
  +    /* resolve family */
       sf = 0;
       if (sizeof(struct sockaddr_un) == salen) {
           un = (struct sockaddr_un *)((void *)sabuf);
  @@ -411,6 +454,7 @@
       return SA_OK;
   }
   
  +/* export address object into URI */
   sa_rc_t sa_addr_a2u(sa_addr_t *saa, char **uri)
   {
       char uribuf[1024];
  @@ -422,45 +466,60 @@
       char caHost[512];
       int nPort;
   
  +    /* argument sanity check(s) */
       if (saa == NULL || uri == NULL)
           return SA_ERR_ARG;
  +
  +    /* export object contents */
       if (saa->nFamily == AF_LOCAL) {
           un = (struct sockaddr_un *)((void *)saa->saBuf);
           sa_msnprintf(uribuf, sizeof(uribuf), "unix:%s", un->sun_path);
       }
  -    else {
  +#ifdef AF_INET6
  +    else if (saa->nFamily == AF_INET || saa->nFamily == AF_INET6) {
  +#else
  +    else if (saa->nFamily == AF_INET) {
  +#endif
           if (saa->nFamily == AF_INET) {
               sa4 = (struct sockaddr_in *)((void *)saa->saBuf);
  -            inet_ntop(AF_INET, &sa4->sin_addr.s_addr, caHost, sizeof(caHost));
  +            sa_inet_ntop(AF_INET, &sa4->sin_addr.s_addr, caHost, sizeof(caHost));
               nPort = ntohs(sa4->sin_port);
           }
   #ifdef AF_INET6
  -        else if (saa->nFamily == AF_INET6) {
  +        else {
               sa6 = (struct sockaddr_in6 *)((void *)saa->saBuf);
  -            inet_ntop(AF_INET6, &sa6->sin6_addr.s6_addr, caHost, sizeof(caHost));
  +            sa_inet_ntop(AF_INET6, &sa6->sin6_addr.s6_addr, caHost, sizeof(caHost));
               nPort = ntohs(sa6->sin6_port);
           }
   #endif
  -        else
  -            return SA_ERR_ARG;
           sa_msnprintf(uribuf, sizeof(uribuf), "inet://%s:%d", caHost, nPort);
       }
  +    else
  +        return SA_ERR_INT;
  +
  +    /* pass result to caller */
       *uri = strdup(uribuf);
  +
       return SA_OK;
   }
   
  +/* export address object into "struct sockaddr" */
   sa_rc_t sa_addr_a2s(sa_addr_t *saa, struct sockaddr **sabuf, socklen_t *salen)
   {
  +    /* argument sanity check(s) */
       if (saa == NULL || sabuf == NULL || salen == 0)
           return SA_ERR_ARG;
   
  +    /* export underlying address structure */
       if ((*sabuf = (struct sockaddr *)malloc(saa->slBuf)) == NULL)
           return SA_ERR_MEM;
       memmove(*sabuf, saa->saBuf, saa->slBuf);
       *salen = saa->slBuf;
  +
       return SA_OK;
   }
   
  +/* internal lazy/delayed initialization of underlying socket */
   static sa_rc_t sa_socket_init(sa_t *sa, int nFamily)
   {
       int nType;
  @@ -468,11 +527,12 @@
       struct protoent *pe;
       char *cpProto;
   
  +    /* argument sanity check(s) */
       if (sa == NULL)
           return SA_ERR_ARG;
   
  -    /* only perform operation if socket still do not exists */
  -    if (sa->sSocket != -1)
  +    /* only perform operation if socket still does not exist */
  +    if (sa->fdSocket != -1)
           return SA_ERR_USE;
   
       /* determine socket type */
  @@ -481,7 +541,7 @@
       else if (sa->eType == SA_TYPE_DATAGRAM)
           nType = SOCK_DGRAM;
       else
  -        return SA_ERR_ARG;
  +        return SA_ERR_INT;
   
       /* determine socket protocol */
       if (nFamily == AF_LOCAL) 
  @@ -502,95 +562,134 @@
           nProto = pe->p_proto;
       }
       else
  -        return SA_ERR_ARG;
  +        return SA_ERR_INT;
   
  -    /* create the socket */
  -    if ((sa->sSocket = socket(nFamily, nType, nProto)) == -1)
  +    /* create the underlying socket */
  +    if ((sa->fdSocket = socket(nFamily, nType, nProto)) == -1)
           return SA_ERR_SYS;
   
       return SA_OK;
   }
   
  +/* internal destruction of underlying socket */
   static sa_rc_t sa_socket_kill(sa_t *sa)
   {
  +    /* argument sanity check(s) */
       if (sa == NULL)
           return SA_ERR_ARG;
  -    if (sa->sSocket != -1) {
  -        close(sa->sSocket);
  -        sa->sSocket = -1;
  -    }
  +
  +    /* check context */
  +    if (sa->fdSocket == -1)
  +        return SA_ERR_USE;
  +
  +    /* close socket */
  +    close(sa->fdSocket);
  +    sa->fdSocket = -1;
  +
       return SA_OK;
   }
   
  +/* create abstract socket object */
   sa_rc_t sa_create(sa_t **sap)
   {
       sa_t *sa;
   
  +    /* argument sanity check(s) */
  +    if (sap == NULL)
  +        return SA_ERR_ARG;
  +
  +    /* allocate and initialize socket object */
       if ((sa = (sa_t *)malloc(sizeof(sa_t))) == NULL)
           return SA_ERR_MEM;
  -    sa->eType      = SA_TYPE_STREAM;
  -    sa->sSocket    = -1;
  -    sa->bTimeout   = 0;
  +    sa->eType             = SA_TYPE_STREAM;
  +    sa->fdSocket          = -1;
  +    sa->bTimeout          = FALSE;
       sa->tvTimeout.tv_sec  = 0;
       sa->tvTimeout.tv_usec = 0;
  -    sa->nReadLen   = 0;
  -    sa->nReadSize  = 0;
  -    sa->cpReadBuf  = NULL;
  -    sa->nWriteLen  = 0;
  -    sa->nWriteSize = 0;
  -    sa->cpWriteBuf = NULL;
  +    sa->nReadLen          = 0;
  +    sa->nReadSize         = 0;
  +    sa->cpReadBuf         = NULL;
  +    sa->nWriteLen         = 0;
  +    sa->nWriteSize        = 0;
  +    sa->cpWriteBuf        = NULL;
  +
  +    /* pass object to caller */
       *sap = sa;
  +
       return SA_OK;
   }
   
  +/* destroy abstract socket object */
   sa_rc_t sa_destroy(sa_t *sa)
   {
  +    /* argument sanity check(s) */
       if (sa == NULL)
           return SA_ERR_ARG;
  +
  +    /* kill underlying socket */
       sa_socket_kill(sa);
  +
  +    /* free object and sub-objects */
       if (sa->cpReadBuf != NULL)
           free(sa->cpReadBuf);
       if (sa->cpWriteBuf != NULL)
           free(sa->cpWriteBuf);
       free(sa);
  +
       return SA_OK;
   }
   
  +/* switch communication type of socket */
   sa_rc_t sa_type(sa_t *sa, sa_type_t type)
   {
  +    /* argument sanity check(s) */
       if (sa == NULL)
           return SA_ERR_ARG;
  -    if (type != SA_TYPE_STREAM && type != SA_TYPE_DATAGRAM)
  +    if (!(type == SA_TYPE_STREAM || type == SA_TYPE_DATAGRAM))
           return SA_ERR_ARG;
  +
  +    /* kill underlying socket if type changes */
  +    if (sa->eType != type)
  +        sa_socket_kill(sa);
  +
  +    /* set new type */
       sa->eType = type;
  +
       return SA_OK;
   }
   
  +/* configure I/O timeout */
   sa_rc_t sa_timeout(sa_t *sa, long sec, long usec)
   {
  +    /* argument sanity check(s) */
       if (sa == NULL)
           return SA_ERR_ARG;
  -    if (sec == 0 && usec == 0) {
  -        sa->bTimeout = 0;
  -        sa->tvTimeout.tv_sec  = 0;
  -        sa->tvTimeout.tv_usec = 0;
  -    }
  -    else {
  -        sa->bTimeout = 1;
  -        sa->tvTimeout.tv_sec  = sec;
  -        sa->tvTimeout.tv_usec = usec;
  -    }
  +
  +    /* configure timeout */
  +    if (sec == 0 && usec == 0)
  +        sa->bTimeout = FALSE; /* deactivate timeout */
  +    else
  +        sa->bTimeout = TRUE;  /* activate timeout */
  +    sa->tvTimeout.tv_sec  = sec;
  +    sa->tvTimeout.tv_usec = usec;
  +
       return SA_OK;
   }
   
  +/* configure I/O buffers */
   sa_rc_t sa_buffers(sa_t *sa, size_t rsize, size_t wsize)
   {
       char *cp;
   
  +    /* argument sanity check(s) */
       if (sa == NULL)
           return SA_ERR_ARG;
  +
  +    /* make sure buffered were already flushed sufficiently */
       if (sa->nReadLen > rsize || sa->nWriteLen > wsize)
  -        return SA_ERR_ARG;
  +        return SA_ERR_USE;
  +
  +    /* configure read/incoming buffer */
       if (rsize > 0) {
           if (sa->cpReadBuf == NULL)
               cp = (char *)malloc(rsize);
  @@ -607,6 +706,8 @@
           sa->cpReadBuf = NULL;
           sa->nReadSize = 0;
       }
  +
  +    /* configure write/outgoing buffer */
       if (wsize > 0) {
           if (sa->cpWriteBuf == NULL)
               cp = (char *)malloc(wsize);
  @@ -623,50 +724,39 @@
           sa->cpWriteBuf = NULL;
           sa->nWriteSize = 0;
       }
  -    return SA_OK;
  -}
   
  -sa_rc_t sa_getoption(sa_t *sa, int optname, void *optval, socklen_t *optlen)
  -{
  -    if (sa == NULL)
  -        return SA_ERR_ARG;
  -    if (sa->sSocket == -1)
  -        return SA_ERR_USE;
  -    if (getsockopt(sa->sSocket, SOL_SOCKET, optname, optval, optlen) == -1)
  -        return SA_ERR_SYS;
  -    return SA_OK;
  -}
  -
  -sa_rc_t sa_setoption(sa_t *sa, int optname, const void *optval, socklen_t optlen)
  -{
  -    if (sa == NULL)
  -        return SA_ERR_ARG;
  -    if (sa->sSocket == -1)
  -        return SA_ERR_USE;
  -    if (setsockopt(sa->sSocket, SOL_SOCKET, optname, optval, optlen) == -1)
  -        return SA_ERR_SYS;
       return SA_OK;
   }
   
  +/* bind socket to a local address */
   sa_rc_t sa_bind(sa_t *sa, sa_addr_t *laddr)
   {
       sa_rc_t rv;
       struct sockaddr_un *un;
   
  +    /* argument sanity check(s) */
       if (sa == NULL || laddr == NULL)
           return SA_ERR_ARG;
  -    if (sa->sSocket == -1)
  +
  +    /* lazy creation of underlying socket */
  +    if (sa->fdSocket == -1)
           if ((rv = sa_socket_init(sa, laddr->nFamily)) != SA_OK)
               return rv;
  +
  +    /* remove a possibly existing old Unix Domain socket on filesystem */
       if (laddr->nFamily == AF_LOCAL) {
           un = (struct sockaddr_un *)((void *)laddr->saBuf);
           unlink(un->sun_path);
       }
  -    if (bind(sa->sSocket, laddr->saBuf, laddr->slBuf) == -1)
  +
  +    /* perform bind operation on underlying socket */
  +    if (bind(sa->fdSocket, laddr->saBuf, laddr->slBuf) == -1)
           return SA_ERR_SYS;
  +
       return SA_OK;
   }
   
  +/* connect socket to a remote address */
   sa_rc_t sa_connect(sa_t *sa, sa_addr_t *raddr)
   {
       int flags, n, error;
  @@ -674,94 +764,106 @@
       socklen_t len;
       sa_rc_t rv;
   
  -    if (sa == NULL)
  +    /* argument sanity check(s) */
  +    if (sa == NULL || raddr == NULL)
           return SA_ERR_ARG;
  +
  +    /* connecting is only possible for stream communication */ 
       if (sa->eType != SA_TYPE_STREAM)
           return SA_ERR_USE;
  -    if (sa->sSocket == -1)
  +
  +    /* lazy creation of underlying socket */
  +    if (sa->fdSocket == -1)
           if ((rv = sa_socket_init(sa, raddr->nFamily)) != SA_OK)
               return rv;
   
  +    rv = SA_OK;
       if (!sa->bTimeout) {
  -        if (connect(sa->sSocket, raddr->saBuf, raddr->slBuf) < 0)
  -            return SA_ERR_SYS;
  -        else
  -            return SA_OK;
  +        /* standard/non-timeout-aware connect operation */
  +        if (connect(sa->fdSocket, raddr->saBuf, raddr->slBuf) < 0)
  +            rv = SA_ERR_SYS;
       }
  -
  -    error = 0;
  -    rv = SA_OK;
  +    else {
  +        /* emulated/timeout-aware connect operation */
  +        error = 0;
   
  -    /* remember socket flags */
  -    flags = fcntl(sa->sSocket, F_GETFL, 0);
  +        /* temporarily switch underlying socket to non-blocking mode */
  +        flags = fcntl(sa->fdSocket, F_GETFL, 0);
  +        fcntl(sa->fdSocket, F_SETFL, flags|O_NONBLOCK);
  +
  +        /* perform the connect operation */
  +        if ((n = connect(sa->fdSocket, raddr->saBuf, raddr->slBuf)) < 0) {
  +            if (errno != EINPROGRESS) {
  +                error = errno;
  +                goto done;
  +            }
  +        }
   
  -    /* switch to non-blocking mode */
  -    fcntl(sa->sSocket, F_SETFL, flags|O_NONBLOCK);
  +        /* ok if connect completed immediately */
  +        if (n == 0)
  +            goto done; 
  +
  +        /* wait for read or write possibility */
  +        FD_ZERO(&rset);
  +        FD_ZERO(&wset);
  +        FD_SET(sa->fdSocket, &rset);
  +        FD_SET(sa->fdSocket, &wset);
  +        do {
  +            n = select(sa->fdSocket+1, &rset, &wset, NULL, &sa->tvTimeout);
  +        } while (n == -1 && errno == EINTR);
   
  -    /* perform the connect */
  -    if ((n = connect(sa->sSocket, raddr->saBuf, raddr->slBuf)) < 0) {
  -        if (errno != EINPROGRESS) {
  +        /* decide on return semantic */
  +        if (n < 0) {
               error = errno;
               goto done;
           }
  -    }
  -
  -    /* if connect completed immediately */
  -    if (n == 0)
  -        goto done; 
  -
  -    /* wait for read or write possibility */
  -    FD_ZERO(&rset);
  -    FD_ZERO(&wset);
  -    FD_SET(sa->sSocket, &rset);
  -    FD_SET(sa->sSocket, &wset);
  -    do {
  -        n = select(sa->sSocket+1, &rset, &wset, NULL, &sa->tvTimeout);
  -    } while (n == -1 && errno == EINTR);
  -
  -    /* decide on return semantic */
  -    if (n < 0) {
  -        error = errno;
  -        goto done;
  -    }
  -    else if (n == 0) {
  -        error = ETIMEDOUT;
  -        goto done;
  -    }
  +        else if (n == 0) {
  +            error = ETIMEDOUT;
  +            goto done;
  +        }
   
  -    /* fetch pending error */
  -    len = sizeof(error);
  -    if (getsockopt(sa->sSocket, SOL_SOCKET, SO_ERROR, &error, &len) < 0)
  -        error = errno;
  +        /* fetch pending error */
  +        len = sizeof(error);
  +        if (getsockopt(sa->fdSocket, SOL_SOCKET, SO_ERROR, &error, &len) < 0)
  +            error = errno;
   
  -    done:
  +        done:
   
  -    /* reset socket flags */
  -    fcntl(sa->sSocket, F_SETFL, flags);
  +        /* reset socket flags */
  +        fcntl(sa->fdSocket, F_SETFL, flags);
   
  -    /* optionally set errno */
  -    if (error != 0) {
  -        errno = error;
  -        rv = SA_ERR_SYS;
  +        /* optionally set errno */
  +        if (error != 0) {
  +            errno = error;
  +            rv = SA_ERR_SYS;
  +        }
       }
  -
       return rv;
   }
   
  +/* listen on socket for connections */
   sa_rc_t sa_listen(sa_t *sa, int backlog)
   {
  +    /* argument sanity check(s) */
       if (sa == NULL)
           return SA_ERR_ARG;
  +
  +    /* listening is only possible for stream communication */ 
       if (sa->eType != SA_TYPE_STREAM)
           return SA_ERR_USE;
  -    if (sa->sSocket == -1)
  -        /* at least sa_bind() has to be already performed */
  +
  +    /* at least sa_bind() has to be already performed */
  +    if (sa->fdSocket == -1)
           return SA_ERR_USE;
  -    if (listen(sa->sSocket, backlog) == -1)
  +
  +    /* perform listen operation on underlying socket */
  +    if (listen(sa->fdSocket, backlog) == -1)
           return SA_ERR_SYS;
  +
       return SA_OK;
   }
   
  +/* accept a connection on socket */
   sa_rc_t sa_accept(sa_t *sa, sa_addr_t **caddr, sa_t **csa)
   {
       sa_rc_t rv;
  @@ -776,41 +878,55 @@
       socklen_t sa_len;
       int s;
   
  -    if (sa == NULL)
  +    /* argument sanity check(s) */
  +    if (sa == NULL || caddr == NULL || csa == NULL)
           return SA_ERR_ARG;
  +
  +    /* accepting connections is only possible for stream communication */ 
       if (sa->eType != SA_TYPE_STREAM)
           return SA_ERR_USE;
  -    if (sa->sSocket == -1)
  -        /* at least sa_listen() has to be already performed */
  +
  +    /* at least sa_listen() has to be already performed */
  +    if (sa->fdSocket == -1)
           return SA_ERR_USE;
  +
  +    /* if timeout is enabled, perform a smart-blocking wait */
       if (sa->bTimeout) {
           FD_ZERO(&fds);
  -        FD_SET(sa->sSocket, &fds);
  +        FD_SET(sa->fdSocket, &fds);
           do {
  -            n = select(sa->sSocket+1, &fds, NULL, NULL, &sa->tvTimeout);
  +            n = select(sa->fdSocket+1, &fds, NULL, NULL, &sa->tvTimeout);
           } while (n == -1 && errno == EINTR);
           if (n == 0) 
               errno = ETIMEDOUT;
           if (n <= 0)
               return SA_ERR_SYS;
       }
  +
  +    /* perform accept operation on underlying socket */
       sa_len = sizeof(sa_buf);
  -    if ((s = accept(sa->sSocket, (struct sockaddr *)&sa_buf, &sa_len)) == -1)
  +    if ((s = accept(sa->fdSocket, (struct sockaddr *)&sa_buf, &sa_len)) == -1)
           return SA_ERR_SYS;
  +
  +    /* create result address object */
       if ((rv = sa_addr_create(caddr)) != SA_OK)
           return rv;
       if ((rv = sa_addr_s2a(*caddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK) {
           sa_addr_destroy(*caddr);
           return rv;
       }
  +
  +    /* create result socket object */
       if ((rv = sa_create(csa)) != SA_OK) {
           sa_addr_destroy(*caddr);
           return rv;
       }
  -    (*csa)->sSocket = s;
  +    (*csa)->fdSocket = s;
  +
       return SA_OK;
   }
   
  +/* determine remote address */
   sa_rc_t sa_getremote(sa_t *sa, sa_addr_t **raddr)
   {
       sa_rc_t rv;
  @@ -822,22 +938,35 @@
       } sa_buf;
       socklen_t sa_len;
   
  -    if (sa == NULL)
  +    /* argument sanity check(s) */
  +    if (sa == NULL || raddr == NULL)
           return SA_ERR_ARG;
  -    sa_len = sizeof(sa_buf);
  -    if (sa->sSocket == -1)
  +
  +    /* peers exist only for stream communication */ 
  +    if (sa->eType != SA_TYPE_STREAM)
  +        return SA_ERR_USE;
  +
  +    /* at least sa_connect() or sa_accept() has to be already performed */
  +    if (sa->fdSocket == -1)
           return SA_ERR_USE;
  -    if (getpeername(sa->sSocket, (struct sockaddr *)&sa_buf, &sa_len) < 0)
  +
  +    /* determine remote address of underlying socket */
  +    sa_len = sizeof(sa_buf);
  +    if (getpeername(sa->fdSocket, (struct sockaddr *)&sa_buf, &sa_len) < 0)
           return SA_ERR_SYS;
  +
  +    /* create result address object */
       if ((rv = sa_addr_create(raddr)) != SA_OK)
           return rv;
       if ((rv = sa_addr_s2a(*raddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK) {
           sa_addr_destroy(*raddr);
           return rv;
       }
  +
       return SA_OK;
   }
   
  +/* determine local address */
   sa_rc_t sa_getlocal(sa_t *sa, sa_addr_t **laddr)
   {
       sa_rc_t rv;
  @@ -849,85 +978,114 @@
       } sa_buf;
       socklen_t sa_len;
   
  -    if (sa == NULL)
  +    /* argument sanity check(s) */
  +    if (sa == NULL || laddr == NULL)
           return SA_ERR_ARG;
  -    if (sa->sSocket == -1)
  +
  +    /* at least sa_bind() has to be already performed */
  +    if (sa->fdSocket == -1)
           return SA_ERR_USE;
  +
  +    /* determine local address of underlying socket */
       sa_len = sizeof(sa_buf);
  -    if (getsockname(sa->sSocket, (struct sockaddr *)&sa_buf, &sa_len) < 0)
  +    if (getsockname(sa->fdSocket, (struct sockaddr *)&sa_buf, &sa_len) < 0)
           return SA_ERR_SYS;
  +
  +    /* create result address object */
       if ((rv = sa_addr_create(laddr)) != SA_OK)
           return rv;
       if ((rv = sa_addr_s2a(*laddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK) {
           sa_addr_destroy(*laddr);
           return rv;
       }
  +
       return SA_OK;
   }
   
  +/* peek at underlying socket */
   sa_rc_t sa_getfd(sa_t *sa, int *fd)
   {
  +    /* argument sanity check(s) */
       if (sa == NULL || fd == NULL)
           return SA_ERR_ARG;
  -    if (sa->sSocket == -1)
  +
  +    /* if still no socket exists, say this explicitly */
  +    if (sa->fdSocket == -1)
           return SA_ERR_USE;
  -    *fd = sa->sSocket;
  +
  +    /* pass socket to caller */
  +    *fd = sa->fdSocket;
  +
       return SA_OK;
   }
   
  +/* internal raw read operation */
   static int sa_read_raw(sa_t *sa, char *cpBuf, int nBufLen)
   {
       int rv;
       fd_set fds;
   
  +    /* if timeout is enabled, perform explicit/smart blocking instead 
  +       of implicitly/hard blocking in the read(2) system call */
       if (sa->bTimeout) {
           FD_ZERO(&fds);
  -        FD_SET(sa->sSocket, &fds);
  +        FD_SET(sa->fdSocket, &fds);
           do {
  -            rv = select(sa->sSocket+1, &fds, NULL, NULL, &sa->tvTimeout);
  +            rv = select(sa->fdSocket+1, &fds, NULL, NULL, &sa->tvTimeout);
           } while (rv == -1 && errno == EINTR);
           if (rv == 0) {
               errno = ETIMEDOUT;
               return -1;
           }
       }
  +
  +    /* perform read operation on underlying socket */
       do {
  -        rv = read(sa->sSocket, cpBuf, nBufLen);
  +        rv = read(sa->fdSocket, cpBuf, nBufLen);
       } while (rv == -1 && errno == EINTR);
  +
       return rv;
   }
   
  +/* read data from socket */
   sa_rc_t sa_read(sa_t *sa, char *cpBuf, size_t nBufReq, size_t *nBufRes)
   {
       int n;
       sa_rc_t rv;
       size_t res;
   
  +    /* argument sanity check(s) */
       if (sa == NULL || cpBuf == NULL || nBufReq == 0)
           return SA_ERR_ARG;
  +
  +    /* reading is only possible for stream communication */ 
       if (sa->eType != SA_TYPE_STREAM)
           return SA_ERR_USE;
  -    if (sa->sSocket == -1)
  +
  +    /* at least a connection has to exist */
  +    if (sa->fdSocket == -1)
           return SA_ERR_USE;
   
  -    /* flush write buffer */
  +    /* trigger a write buffer flush */
       if (sa->nWriteLen > 0)
           sa_flush(sa);
   
       /* perform read operation */
       rv = SA_OK;
       if (sa->nReadSize == 0) {
  -        /* unbuffered I/O */
  +        /* user-space unbuffered I/O */
           res = sa_read_raw(sa, cpBuf, nBufReq);
  -        if (res <= 0)
  +        if (res == 0)
  +            rv = SA_ERR_EOF;
  +        else if (res < 0)
               rv = SA_ERR_SYS;
       }
       else {
  -        /* buffered I/O */
  +        /* user-space buffered I/O */
           res = 0;
           while (1) {
               if (nBufReq <= sa->nReadLen) {
  -                /* buffer holds enough data, so use this */
  +                /* buffer holds enough data, so just use this */
                   memmove(cpBuf, sa->cpReadBuf, nBufReq);
                   memmove(sa->cpReadBuf, sa->cpReadBuf+nBufReq, sa->nReadLen-nBufReq);
                   sa->nReadLen -= nBufReq;
  @@ -947,84 +1105,60 @@
                       n = sa_read_raw(sa, cpBuf, nBufReq);
                       if (n > 0)
                           res += n;
  -                    else if (n <= 0)
  -                        rv = SA_ERR_SYS;
  +                    else if (n == 0)
  +                        rv = (res == 0 ? SA_ERR_EOF : SA_OK);
  +                    else if (n < 0)
  +                        rv = (res == 0 ? SA_ERR_SYS : SA_OK);
                   }
                   else {
                       /* fill buffer with new data */
                       n = sa_read_raw(sa, sa->cpReadBuf, sa->nReadSize);
  -                    if (n <= 0)
  -                        rv = SA_ERR_SYS;
  +                    if (n < 0)
  +                        /* error on this read, but perhaps ok as a whole */
  +                        rv = (res == 0 ? SA_ERR_SYS : SA_OK);
  +                    if (n == 0)
  +                        /* EOF on this read, but perhaps ok as a whole */
  +                        rv = (res == 0 ? SA_ERR_EOF : SA_OK);
                       else {
                           sa->nReadLen = n;
  -                        continue;
  +                        continue; /* REPEAT OPERATION! */
                       }
                   }
               }
               break;
           }
       }
  +
  +    /* pass number of actually read bytes to caller */ 
       if (nBufRes != NULL)
           *nBufRes = res;
  -    return rv;
  -}
  -
  -sa_rc_t sa_readfrom(sa_t *sa, char *buf, size_t buflen, size_t *bufdone, sa_addr_t **raddr)
  -{
  -    sa_rc_t rv;
  -    union {
  -        struct sockaddr_in sa4;
  -#ifdef AF_INET6
  -        struct sockaddr_in6 sa6;
  -#endif
  -    } sa_buf;
  -    socklen_t sa_len;
  -    size_t n;
  -    fd_set fds;
   
  -    if (sa == NULL || buf == NULL || buflen == 0 || raddr == NULL)
  -        return SA_ERR_ARG;
  -    if (sa->eType != SA_TYPE_DATAGRAM)
  -        return SA_ERR_USE;
  -    if (sa->sSocket == -1)
  -        return SA_ERR_USE;
  -    if (sa->bTimeout) {
  -        FD_ZERO(&fds);
  -        FD_SET(sa->sSocket, &fds);
  -        do {
  -            n = select(sa->sSocket+1, &fds, NULL, NULL, &sa->tvTimeout);
  -        } while (n == -1 && errno == EINTR);
  -        if (n == 0) 
  -            errno = ETIMEDOUT;
  -        if (n <= 0)
  -            return SA_ERR_SYS;
  -    }
  -    sa_len = sizeof(sa_buf);
  -    if ((n = recvfrom(sa->sSocket, buf, buflen, 0, (struct sockaddr *)&sa_buf, &sa_len)) == -1)
  -        return SA_ERR_SYS;
  -    if ((rv = sa_addr_create(raddr)) != SA_OK)
  -        return rv;
  -    if ((rv = sa_addr_s2a(*raddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK) {
  -        sa_addr_destroy(*raddr);
  -        return rv;
  -    }
  -    if (bufdone != NULL)
  -        *bufdone = n;
  -    return SA_OK;
  +    return rv;
   }
   
  -sa_rc_t sa_readline(sa_t *sa, char *cpBuf, size_t nBufReq, size_t *nBufRes)
  +/* read data from socket until [CR]LF (convinience function) */
  +sa_rc_t sa_readln(sa_t *sa, char *cpBuf, size_t nBufReq, size_t *nBufRes)
   {
       char c;
       size_t n;
       size_t res;
   
  -    if (sa == NULL)
  +    /* argument sanity check(s) */
  +    if (sa == NULL || cpBuf == NULL || nBufReq == 0)
           return SA_ERR_ARG;
  +
  +    /* reading is only possible for stream communication */ 
       if (sa->eType != SA_TYPE_STREAM)
           return SA_ERR_USE;
  -    if (sa->sSocket == -1)
  +
  +    /* at least a connection has to exist */
  +    if (sa->fdSocket == -1)
           return SA_ERR_USE;
  +
  +    /* we just perform a plain sa_read() per character, because if
  +       buffers are enabled, this is not as stupid as it looks at the first
  +       hand and if buffers are disabled, there is no better solution
  +       anyway. */
       res = 0;
       while (res < (nBufReq-1)) {
           sa_read(sa, &c, 1, &n);
  @@ -1035,59 +1169,72 @@
               break;
       }
       cpBuf[res] = '\0';
  +
  +    /* pass number of actually read characters to caller */
       if (nBufRes != NULL)
           *nBufRes = res;
  +
       return SA_OK;
   }
   
  +/* internal raw write operation */
   static int sa_write_raw(sa_t *sa, const char *cpBuf, int nBufLen)
   {
       int rv;
       fd_set fds;
   
  +    /* if timeout is enabled, perform explicit/smart blocking instead 
  +       of implicitly/hard blocking in the write(2) system call */
       if (sa->bTimeout) {
           FD_ZERO(&fds);
  -        FD_SET(sa->sSocket, &fds);
  +        FD_SET(sa->fdSocket, &fds);
           do {
  -            rv = select(sa->sSocket+1, NULL, &fds, NULL, &sa->tvTimeout);
  +            rv = select(sa->fdSocket+1, NULL, &fds, NULL, &sa->tvTimeout);
           } while (rv == -1 && errno == EINTR);
           if (rv == 0) {
               errno = ETIMEDOUT;
               return -1;
           }
       }
  +
  +    /* perform write operation on underlying socket */
       do {
  -        rv = write(sa->sSocket, cpBuf, nBufLen);
  +        rv = write(sa->fdSocket, cpBuf, nBufLen);
       } while (rv == -1 && errno == EINTR);
  +
       return rv;
   }
   
  +/* write data to socket */
   sa_rc_t sa_write(sa_t *sa, const char *cpBuf, size_t nBufReq, size_t *nBufRes)
   {
       size_t n;
       size_t res;
       sa_rc_t rv;
   
  -    if (sa == NULL)
  +    /* argument sanity check(s) */
  +    if (sa == NULL || cpBuf == NULL || nBufReq == 0)
           return SA_ERR_ARG;
  +
  +    /* writing is only possible for stream communication */ 
       if (sa->eType != SA_TYPE_STREAM)
           return SA_ERR_USE;
  -    if (sa->sSocket == -1)
  +
  +    /* at least a connection has to exist */
  +    if (sa->fdSocket == -1)
           return SA_ERR_USE;
   
       rv = SA_OK;
       if (sa->nWriteSize == 0) {
  -        /* unbuffered I/O */
  +        /* user-space unbuffered I/O */
           res = sa_write_raw(sa, cpBuf, nBufReq);
  -        if (res < 0) {
  -            res = 0;
  +        if (res < 0)
               rv = SA_ERR_SYS;
  -        }
       }
       else {
  -        /* buffered I/O */
  +        /* user-space buffered I/O */
           if (nBufReq > (sa->nWriteSize - sa->nWriteLen)) {
  -            /* not enough space in buffer, so flush buffer */
  +            /* not enough space in buffer, so flush buffer first */
               sa_flush(sa);
           }
           res = 0;
  @@ -1096,7 +1243,7 @@
               while (nBufReq > 0) {
                   n = sa_write_raw(sa, cpBuf, nBufReq);
                   if (n < 0)
  -                    rv = SA_ERR_SYS;
  +                    rv = (res == 0 ? SA_ERR_SYS : SA_OK);
                   if (n <= 0)
                       break;
                   nBufReq  -= n;
  @@ -1111,72 +1258,70 @@
               res = nBufReq;
           }
       }
  +
  +    /* pass number of actually written bytes to caller */
       if (nBufRes != NULL)
           *nBufRes = res;
  +
       return rv;
   }
   
  -sa_rc_t sa_writeto(sa_t *sa, const char *buf, size_t buflen, size_t *bufdone, sa_addr_t *raddr)
  +/* write formatted string to socket (convinience function) */
  +sa_rc_t sa_writef(sa_t *sa, const char *cpFmt, ...)
   {
  +    va_list ap;
       size_t n;
  -    fd_set fds;
  +    char caBuf[1024];
       sa_rc_t rv;
   
  -    if (sa == NULL || buf == NULL || buflen == 0 || raddr == NULL)
  +    /* argument sanity check(s) */
  +    if (sa == NULL || cpFmt == NULL)
           return SA_ERR_ARG;
  -    if (sa->eType != SA_TYPE_DATAGRAM)
  -        return SA_ERR_USE;
  -    if (sa->sSocket == -1)
  -        if ((rv = sa_socket_init(sa, raddr->nFamily)) != SA_OK)
  -            return rv;
  -    if (sa->sSocket == -1)
  +
  +    /* writing is only possible for stream communication */ 
  +    if (sa->eType != SA_TYPE_STREAM)
           return SA_ERR_USE;
  -    if (sa->bTimeout) {
  -        FD_ZERO(&fds);
  -        FD_SET(sa->sSocket, &fds);
  -        do {
  -            n = select(sa->sSocket+1, NULL, &fds, NULL, &sa->tvTimeout);
  -        } while (n == -1 && errno == EINTR);
  -        if (n == 0) 
  -            errno = ETIMEDOUT;
  -        if (n <= 0)
  -            return SA_ERR_SYS;
  -    }
  -    if ((n = sendto(sa->sSocket, buf, buflen, 0, raddr->saBuf, raddr->slBuf)) == -1)
  -        return SA_ERR_SYS;
  -    if (bufdone != NULL)
  -        *bufdone = n;
  -    return SA_OK;
  -}
   
  -sa_rc_t sa_writef(sa_t *sa, const char *cpFmt, ...)
  -{
  -    va_list ap;
  -    size_t n;
  -    char caBuf[1024];
  +    /* at least a connection has to exist */
  +    if (sa->fdSocket == -1)
  +        return SA_ERR_USE;
   
  -    if (sa == NULL)
  -        return SA_ERR_ARG;
  +    /* format string into temporary buffer */
       va_start(ap, cpFmt);
       n = sa_mvsnprintf(caBuf, sizeof(caBuf), cpFmt, ap);
  -    sa_write(sa, caBuf, n, &n);
       va_end(ap);
  -    return SA_OK;
  +
  +    /* write result buffer to socket */
  +    rv = sa_write(sa, caBuf, n, &n);
  +
  +    return rv;
   }
   
  +/* flush write/outgoing I/O buffer */
   sa_rc_t sa_flush(sa_t *sa)
   {
       size_t n;
  +    sa_rc_t rv;
   
  +    /* argument sanity check(s) */
       if (sa == NULL)
           return SA_ERR_ARG;
  +
  +    /* flushing is only possible for stream communication */ 
       if (sa->eType != SA_TYPE_STREAM)
           return SA_ERR_USE;
  -    if (sa->sSocket == -1)
  +
  +    /* at least a connection has to exist */
  +    if (sa->fdSocket == -1)
           return SA_ERR_USE;
  +
  +    /* try to flush buffer */
  +    rv = SA_OK;
       if (sa->nWriteSize > 0) {
           while (sa->nWriteLen > 0) {
               n = sa_write_raw(sa, sa->cpWriteBuf, sa->nWriteLen);
  +            if (n < 0)
  +                rv = SA_ERR_SYS;
               if (n <= 0)
                   break;
               memmove(sa->cpWriteBuf, sa->cpWriteBuf+n, sa->nWriteLen-n);
  @@ -1184,19 +1329,27 @@
           }
           sa->nWriteLen = 0;
       }
  -    return SA_OK;
  +    return rv;
   }
   
  +/* shutdown a socket connection */
   sa_rc_t sa_shutdown(sa_t *sa, char *flags)
   {
       int how;
   
  +    /* argument sanity check(s) */
       if (sa == NULL || flags == NULL)
           return SA_ERR_ARG;
  +
  +    /* shutdown is only possible for stream communication */ 
       if (sa->eType != SA_TYPE_STREAM)
           return SA_ERR_USE;
  -    if (sa->sSocket == -1)
  +
  +    /* at least a connection has to exist */
  +    if (sa->fdSocket == -1)
           return SA_ERR_USE;
  +
  +    /* determine flags for shutdown(2) */
       how = 0;
       if (strcmp(flags, "r") == 0)
           how = SHUT_RD;
  @@ -1204,8 +1357,119 @@
           how = SHUT_WR;
       else if (strcmp(flags, "rw") == 0)
           how = SHUT_RDWR;
  -    if (shutdown(sa->sSocket, how) == -1)
  +    else
  +        return SA_ERR_ARG;
  +
  +    /* perform shutdown operation on underlying socket */
  +    if (shutdown(sa->fdSocket, how) == -1)
  +        return SA_ERR_SYS;
  +
  +    return SA_OK;
  +}
  +
  +/* receive data via socket */
  +sa_rc_t sa_recv(sa_t *sa, char *buf, size_t buflen, size_t *bufdone, sa_addr_t **raddr)
  +{
  +    sa_rc_t rv;
  +    union {
  +        struct sockaddr_in sa4;
  +#ifdef AF_INET6
  +        struct sockaddr_in6 sa6;
  +#endif
  +    } sa_buf;
  +    socklen_t sa_len;
  +    size_t n;
  +    fd_set fds;
  +
  +    /* argument sanity check(s) */
  +    if (sa == NULL || buf == NULL || buflen == 0 || raddr == NULL)
  +        return SA_ERR_ARG;
  +
  +    /* receiving is only possible for datagram communication */ 
  +    if (sa->eType != SA_TYPE_DATAGRAM)
  +        return SA_ERR_USE;
  +
  +    /* at least a sa_bind() has to be performed */
  +    if (sa->fdSocket == -1)
  +        return SA_ERR_USE;
  +
  +    /* if timeout is enabled, perform explicit/smart blocking instead 
  +       of implicitly/hard blocking in the recvfrom(2) system call */
  +    if (sa->bTimeout) {
  +        FD_ZERO(&fds);
  +        FD_SET(sa->fdSocket, &fds);
  +        do {
  +            n = select(sa->fdSocket+1, &fds, NULL, NULL, &sa->tvTimeout);
  +        } while (n == -1 && errno == EINTR);
  +        if (n == 0) 
  +            errno = ETIMEDOUT;
  +        if (n <= 0)
  +            return SA_ERR_SYS;
  +    }
  +
  +    /* perform receive operation on underlying socket */
  +    sa_len = sizeof(sa_buf);
  +    if ((n = recvfrom(sa->fdSocket, buf, buflen, 0, 
  +                      (struct sockaddr *)&sa_buf, &sa_len)) == -1)
  +        return SA_ERR_SYS;
  +
  +    /* create result address object */
  +    if ((rv = sa_addr_create(raddr)) != SA_OK)
  +        return rv;
  +    if ((rv = sa_addr_s2a(*raddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK) {
  +        sa_addr_destroy(*raddr);
  +        return rv;
  +    }
  +
  +    /* pass actual number of received bytes to caller */
  +    if (bufdone != NULL)
  +        *bufdone = n;
  +
  +    return SA_OK;
  +}
  +
  +/* send data via socket */
  +sa_rc_t sa_send(sa_t *sa, const char *buf, size_t buflen, size_t *bufdone, sa_addr_t *raddr)
  +{
  +    size_t n;
  +    fd_set fds;
  +    sa_rc_t rv;
  +
  +    /* argument sanity check(s) */
  +    if (sa == NULL || buf == NULL || buflen == 0 || raddr == NULL)
  +        return SA_ERR_ARG;
  +
  +    /* sending is only possible for datagram communication */ 
  +    if (sa->eType != SA_TYPE_DATAGRAM)
  +        return SA_ERR_USE;
  +
  +    /* lazy creation of underlying socket */
  +    if (sa->fdSocket == -1)
  +        if ((rv = sa_socket_init(sa, raddr->nFamily)) != SA_OK)
  +            return rv;
  +
  +    /* if timeout is enabled, perform explicit/smart blocking instead 
  +       of implicitly/hard blocking in the sendto(2) system call */
  +    if (sa->bTimeout) {
  +        FD_ZERO(&fds);
  +        FD_SET(sa->fdSocket, &fds);
  +        do {
  +            n = select(sa->fdSocket+1, NULL, &fds, NULL, &sa->tvTimeout);
  +        } while (n == -1 && errno == EINTR);
  +        if (n == 0) 
  +            errno = ETIMEDOUT;
  +        if (n <= 0)
  +            return SA_ERR_SYS;
  +    }
  +
  +    /* perform send operation on underlying socket */
  +    if ((n = sendto(sa->fdSocket, buf, buflen, 0, raddr->saBuf, raddr->slBuf)) == -1)
           return SA_ERR_SYS;
  +
  +    /* pass actual number of sent bytes to caller */
  +    if (bufdone != NULL)
  +        *bufdone = n;
  +
       return SA_OK;
   }
   
  Index: ossp-pkg/sa/sa.h
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 sa.h
  --- ossp-pkg/sa/sa.h	2001/10/05 11:49:10	1.6
  +++ ossp-pkg/sa/sa.h	2001/10/05 20:52:15	1.7
  @@ -30,7 +30,7 @@
   #ifndef __SA_H__
   #define __SA_H__
   
  -/* system definitions of "size_t", "socklen_t", "struct sockaddr" */
  +/* system definitions of "size_t", "socklen_t", "struct sockaddr *" */
   #include <string.h>
   #include <sys/types.h>
   #include <sys/socket.h>
  @@ -96,11 +96,12 @@
   /* return codes */
   typedef enum {
       SA_OK,
  -    SA_ERR_ARG,
  -    SA_ERR_USE,
  -    SA_ERR_MEM,
  -    SA_ERR_SYS,
  -    SA_ERR_INT
  +    SA_ERR_ARG, /* invalid argument (wrong parameter) */
  +    SA_ERR_USE, /* invalid use (wrong context) */
  +    SA_ERR_MEM, /* out of memory */
  +    SA_ERR_SYS, /* system error (see errno) */
  +    SA_ERR_EOF, /* end of file/socket communication */
  +    SA_ERR_INT  /* internal error */
   } sa_rc_t;
   
   /* address object operations */
  @@ -121,8 +122,6 @@
   sa_rc_t sa_type         (sa_t *sa, sa_type_t type);
   sa_rc_t sa_timeout      (sa_t *sa, long sec, long usec);
   sa_rc_t sa_buffers      (sa_t *sa, size_t rsize, size_t wsize);
  -sa_rc_t sa_getoption    (sa_t *sa, int optname, void *optval, socklen_t *optlen);
  -sa_rc_t sa_setoption    (sa_t *sa, int optname, const void *optval, socklen_t optlen);
   
   /* socket connection operations */
   sa_rc_t sa_bind         (sa_t *sa, sa_addr_t *laddr);
  @@ -134,14 +133,16 @@
   sa_rc_t sa_getfd        (sa_t *sa, int *fd);
   sa_rc_t sa_shutdown     (sa_t *sa, char *flags);
   
  -/* socket input/output operations */
  +/* socket input/output operations (stream communication) */
   sa_rc_t sa_read         (sa_t *sa, char *buf, size_t buflen, size_t *bufdone);
  -sa_rc_t sa_readfrom     (sa_t *sa, char *buf, size_t buflen, size_t *bufdone, sa_addr_t **raddr);
  -sa_rc_t sa_readline     (sa_t *sa, char *buf, size_t buflen, size_t *bufdone);
  +sa_rc_t sa_readln       (sa_t *sa, char *buf, size_t buflen, size_t *bufdone);
   sa_rc_t sa_write        (sa_t *sa, const char *buf, size_t buflen, size_t *bufdone);
  -sa_rc_t sa_writeto      (sa_t *sa, const char *buf, size_t buflen, size_t *bufdone, sa_addr_t *raddr);
   sa_rc_t sa_writef       (sa_t *sa, const char *fmt, ...);
   sa_rc_t sa_flush        (sa_t *sa);
  +
  +/* socket input/output operations (datagram communication) */
  +sa_rc_t sa_recv         (sa_t *sa, char *buf, size_t buflen, size_t *bufdone, sa_addr_t **raddr);
  +sa_rc_t sa_send         (sa_t *sa, const char *buf, size_t buflen, size_t *bufdone, sa_addr_t *raddr);
   
   #endif /* __SA_H__ */
   
  Index: ossp-pkg/sa/sa.pod
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 sa.pod
  --- ossp-pkg/sa/sa.pod	2001/10/05 11:55:51	1.5
  +++ ossp-pkg/sa/sa.pod	2001/10/05 20:52:15	1.6
  @@ -76,16 +76,19 @@
   sa_getfd,
   sa_shutdown.
   
  -=item B<Socket Input/Output Operations>:
  +=item B<Socket Input/Output Operations (Stream Communication)>:
               
   sa_read,
  -sa_readfrom,
  -sa_readline,
  +sa_readln,
   sa_write,
  -sa_writeto,
   sa_writef,
   sa_flush.   
   
  +=item B<Socket Input/Output Operations (Datagram Communication)>:
  +
  +sa_recv,
  +sa_send.
  +
   =back
   
   =head1 DESCRIPTION
  @@ -227,23 +230,29 @@
   
   =back
   
  -=head2 Socket Input/Output Operations
  +=head2 Socket Input/Output Operations (Stream Communication)
   
   =over 4
   
   =item sa_rc_t B<sa_read>(sa_t *I<sa>, char *I<buf>, size_t I<buflen>, size_t *I<bufdone>);
  -
  -=item sa_rc_t B<sa_readfrom>(sa_t *I<sa>, char *I<buf>, size_t I<buflen>, size_t *I<bufdone>, sa_addr_t **I<raddr>);
   
  -=item sa_rc_t B<sa_readline>(sa_t *I<sa>, char *I<buf>, size_t I<buflen>, size_t *I<bufdone>);
  +=item sa_rc_t B<sa_readln>(sa_t *I<sa>, char *I<buf>, size_t I<buflen>, size_t *I<bufdone>);
   
   =item sa_rc_t B<sa_write>(sa_t *I<sa>, const char *I<buf>, size_t I<buflen>, size_t *I<bufdone>);
   
  -=item sa_rc_t B<sa_writeto>(sa_t *I<sa>, const char *I<buf>, size_t I<buflen>, size_t *I<bufdone>, sa_addr_t *I<raddr>);
  -
   =item sa_rc_t B<sa_writef>(sa_t *I<sa>, const char *I<fmt>, ...);
   
   =item sa_rc_t B<sa_flush>(sa_t *I<sa>);
  +
  +=back
  +
  +=head2 Socket Input/Output Operations (Stream Communication)
  +
  +=over 4
  +
  +=item sa_rc_t B<sa_recv>(sa_t *I<sa>, char *I<buf>, size_t I<buflen>, size_t *I<bufdone>, sa_addr_t **I<raddr>);
  +
  +=item sa_rc_t B<sa_send>(sa_t *I<sa>, const char *I<buf>, size_t I<buflen>, size_t *I<bufdone>, sa_addr_t *I<raddr>);
   
   =back
   
  Index: ossp-pkg/sa/sa_test.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 sa_test.c
  --- ossp-pkg/sa/sa_test.c	2001/10/05 12:56:06	1.4
  +++ ossp-pkg/sa/sa_test.c	2001/10/05 20:52:15	1.5
  @@ -76,7 +76,7 @@
   
       /* send message to syslogd(8) */
       nBuf = strlen(caBuf);
  -    if (sa_writeto(sa, caBuf, nBuf, (size_t *)&n, ra) != SA_OK)
  +    if (sa_send(sa, caBuf, nBuf, (size_t *)&n, ra) != SA_OK)
           die("sa_writeto");
   
       /* destroy socket and address objects */

From ossp-cvs-owner@ossp.org  Fri Oct  5 23:11:24 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f95LBN249510; Fri, 5 Oct 2001 23:11:23 +0200 (CEST)
Date: Fri, 5 Oct 2001 23:11:23 +0200 (CEST)
Message-Id: <200110052111.f95LBN249510@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.h sa.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   05-Oct-2001 23:11:23
  Branch: HEAD                             Handle: 2001100522112200

  Modified files:
    ossp-pkg/sa             sa.h sa.pod

  Log:
    more documentation

  Summary:
    Revision    Changes     Path
    1.8         +1  -1      ossp-pkg/sa/sa.h
    1.7         +41 -25     ossp-pkg/sa/sa.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.h
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 sa.h
  --- ossp-pkg/sa/sa.h	2001/10/05 20:52:15	1.7
  +++ ossp-pkg/sa/sa.h	2001/10/05 21:11:22	1.8
  @@ -95,7 +95,7 @@
   
   /* return codes */
   typedef enum {
  -    SA_OK,
  +    SA_OK,      /* everything ok */
       SA_ERR_ARG, /* invalid argument (wrong parameter) */
       SA_ERR_USE, /* invalid use (wrong context) */
       SA_ERR_MEM, /* out of memory */
  Index: ossp-pkg/sa/sa.pod
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 sa.pod
  --- ossp-pkg/sa/sa.pod	2001/10/05 20:52:15	1.6
  +++ ossp-pkg/sa/sa.pod	2001/10/05 21:11:22	1.7
  @@ -39,9 +39,9 @@
   
   =item B<Abstract Data Types>:
   
  +sa_rc_t,
   sa_addr_t,
  -sa_t,
  -sa_rc_t.
  +sa_t.
   
   =item B<Address Object Operations>:
   
  @@ -93,22 +93,23 @@
   
   =head1 DESCRIPTION
   
  -B<OSSP sa> is a thin abstraction library for the BSD socket interface
  -for use in conjunction with TCP and UDP protocols. It provides the
  -following key features:
  +B<OSSP sa> is an abstraction library for the Unix socket interface
  +featuring stream and datagram oriented communication over Unix Domain
  +and Internet Domain sockets.
   
  +It provides the following key features:
  +
   =over 4
   
   =item B<Address Abstraction>
   
  -Most of the uglyness in the BSD socket API is the necessarity to have to
  -deal with the various address structures (C<struct sockaddr_xx>) which
  -exist because of both the different network protocols and addressing
  -schemes. B<OSSP sa> fully hides this by providing an abstract and
  -opaque address type (C<sa_addr_t>) together with four utility functions
  -which allow one to convert from the old C<struct sockaddr> and an URL
  -specification (C<{tcp,udp}://<host>[:<port>]>) to the C<sa_addr_t> and
  -vice versa.
  +Most of the uglyness in the Unix socket API is the necessarity to have
  +to deal with the various address structures (C<struct sockaddr_xx>)
  +which exist because of both the different communication types and
  +addressing schemes. B<OSSP sa> fully hides this by providing an abstract
  +and opaque address type (C<sa_addr_t>) together with four utility
  +functions which allow one to convert from the traditional C<struct
  +sockaddr> or URI specification to the C<sa_addr_t> and vice versa.
   
   =item B<Type Abstraction>
   
  @@ -123,36 +124,51 @@
   
   =item B<I/O Timeouts>
   
  -Each function of B<OSSP sa> is aware of a central timeout (set by
  -sa_timeout(3)), i.e., all I/O operations return C<SA_ERR_SYS> and
  -C<errno> set to C<ETIMEDOUT> if this timeout expired before the
  +Each I/O function in B<OSSP sa> is aware of a central timeout (set
  +by sa_timeout(3)), i.e., all I/O operations return C<SA_ERR_SYS>
  +and C<errno> set to C<ETIMEDOUT> if this timeout expired before the
   operation was able to succeed. This allows one to easily program
   less-blocking network services.
   
   =item B<Buffered I/O>
   
  -If B<OSSP sa> is used for TCP-based stream I/O, internally all I/O
  -operations can be performed through input and output buffers (set
  +If B<OSSP sa> is used for stream communication, internally all I/O
  +operations can be performed through input and/or output buffers (set
   by sa_buffers(3)) for achieving higher I/O performance by doing I/O
  -operations on larger messages.
  +operations on larger aggregated messages.
   
   =item B<Convinience I/O Functions>
   
  -If B<OSSP sa> is used for TCP-based stream I/O, for convinience reasons
  -line reading (sa_readline(3)) and output formatting (sa_writef(3))
  -functions are provided, modelled after STDIO's fgets(3) and fprintf(3).
  +If B<OSSP sa> is used for stream communication, for convinience reasons
  +line-oriented reading (sa_readln(3)) and formated writing (sa_writef(3))
  +is provided, modelled after STDIO's fgets(3) and fprintf(3).
   
   =back
   
   =head1 DATA TYPES
   
  +B<OSSP sa> uses three data types in its API:
  +
   =over 4
  +
  +=item B<sa_rc_t> (Return Code Type)
  +
  +This is an exported enumerated integer type with the following possible
  +values: C<SA_OK> (everything ok, operation succeeded); C<SA_ERR_ARG>
  +(invalid argument(s) passed to function); C<SA_ERR_USE> (function used
  +in wrong context); C<SA_ERR_MEM> (out of memory); C<SA_ERR_EOF> (end of
  +file/socket in communication); C<SA_ERR_SYS> (operating system error;
  +errno contains details); C<SA_ERR_INT> (any other internal error).
  +
  +=item B<sa_addr_t> (Socket Address Abstraction Type)
   
  -=item B<sa_addr_t>
  +This is an opaque type representing a socket address. 
  +Only pointers to this abstract type are used in the API.
   
  -=item B<sa_t>
  +=item B<sa_t> (Socket Abstraction Type)
   
  -=item B<sa_rc_tt>
  +This is an opaque type representing a socket.
  +Only pointers to this abstract type are used in the API.
   
   =back
   

From ossp-cvs-owner@ossp.org  Fri Oct  5 23:37:07 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f95Lb5752562; Fri, 5 Oct 2001 23:37:05 +0200 (CEST)
Date: Fri, 5 Oct 2001 23:37:05 +0200 (CEST)
Message-Id: <200110052137.f95Lb5752562@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   05-Oct-2001 23:37:05
  Branch: HEAD                             Handle: 2001100522370500

  Modified files:
    ossp-pkg/sa             TODO

  Log:
    update TODO

  Summary:
    Revision    Changes     Path
    1.8         +3  -2      ossp-pkg/sa/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 TODO
  --- ossp-pkg/sa/TODO	2001/10/05 20:52:15	1.7
  +++ ossp-pkg/sa/TODO	2001/10/05 21:37:05	1.8
  @@ -1,4 +1,5 @@
   
  -ETIMEDOUT -> SA_ERR_TIM;
  -1025 buffer von writef in sa_t aufnehmen und variablen machen!
  +- perhaps change rv=SA_ERR_SYS+errno=ETIMEDOUT to rv=SA_ERR_TIMEOUT;
  +- perhaps move 1024-buffer of writef into sa_t and make adjustable
  +- support registry sub-library for system call override
   

From ossp-cvs-owner@ossp.org  Fri Oct  5 23:37:31 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f95LbUd52624; Fri, 5 Oct 2001 23:37:30 +0200 (CEST)
Date: Fri, 5 Oct 2001 23:37:30 +0200 (CEST)
Message-Id: <200110052137.f95LbUd52624@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   05-Oct-2001 23:37:30
  Branch: HEAD                             Handle: 2001100522373000

  Modified files:
    ossp-pkg/sa             TODO

  Log:
    remember test suite issue

  Summary:
    Revision    Changes     Path
    1.9         +1  -0      ossp-pkg/sa/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 TODO
  --- ossp-pkg/sa/TODO	2001/10/05 21:37:05	1.8
  +++ ossp-pkg/sa/TODO	2001/10/05 21:37:30	1.9
  @@ -2,4 +2,5 @@
   - perhaps change rv=SA_ERR_SYS+errno=ETIMEDOUT to rv=SA_ERR_TIMEOUT;
   - perhaps move 1024-buffer of writef into sa_t and make adjustable
   - support registry sub-library for system call override
  +- full test suite for whole API
   

From ossp-cvs-owner@ossp.org  Sat Oct  6 13:02:11 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f96B2AA49085; Sat, 6 Oct 2001 13:02:10 +0200 (CEST)
Date: Sat, 6 Oct 2001 13:02:10 +0200 (CEST)
Message-Id: <200110061102.f96B2AA49085@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   06-Oct-2001 13:02:10
  Branch: HEAD                             Handle: 2001100612020900

  Modified files:
    ossp-pkg/sa             TODO

  Log:
    remember timeout issue

  Summary:
    Revision    Changes     Path
    1.10        +2  -0      ossp-pkg/sa/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 TODO
  --- ossp-pkg/sa/TODO	2001/10/05 21:37:30	1.9
  +++ ossp-pkg/sa/TODO	2001/10/06 11:02:09	1.10
  @@ -3,4 +3,6 @@
   - perhaps move 1024-buffer of writef into sa_t and make adjustable
   - support registry sub-library for system call override
   - full test suite for whole API
  +- attention: timeout on accept() can be not what is wishes, i.e.,
  +  we need specific timeouts
   

From ossp-cvs-owner@ossp.org  Sat Oct  6 13:05:45 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f96B5iT49366; Sat, 6 Oct 2001 13:05:44 +0200 (CEST)
Date: Sat, 6 Oct 2001 13:05:44 +0200 (CEST)
Message-Id: <200110061105.f96B5iT49366@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   06-Oct-2001 13:05:44
  Branch: HEAD                             Handle: 2001100612054300

  Modified files:
    ossp-pkg/sa             sa.h

  Log:
    reflect recent changes

  Summary:
    Revision    Changes     Path
    1.9         +4  -6      ossp-pkg/sa/sa.h
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.h
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 sa.h
  --- ossp-pkg/sa/sa.h	2001/10/05 21:11:22	1.8
  +++ ossp-pkg/sa/sa.h	2001/10/06 11:05:43	1.9
  @@ -60,8 +60,6 @@
   #define sa_type         SA_CONCAT(SA_PREFIX,sa_type)
   #define sa_timeout      SA_CONCAT(SA_PREFIX,sa_timeout)
   #define sa_buffers      SA_CONCAT(SA_PREFIX,sa_buffers)
  -#define sa_getoption    SA_CONCAT(SA_PREFIX,sa_getoption)
  -#define sa_setoption    SA_CONCAT(SA_PREFIX,sa_setoption)
   #define sa_bind         SA_CONCAT(SA_PREFIX,sa_bind)
   #define sa_connect      SA_CONCAT(SA_PREFIX,sa_connect)
   #define sa_listen       SA_CONCAT(SA_PREFIX,sa_listen)
  @@ -71,12 +69,12 @@
   #define sa_getfd        SA_CONCAT(SA_PREFIX,sa_getfd)
   #define sa_shutdown     SA_CONCAT(SA_PREFIX,sa_shutdown)
   #define sa_read         SA_CONCAT(SA_PREFIX,sa_read)
  -#define sa_readfrom     SA_CONCAT(SA_PREFIX,sa_readfrom)
  -#define sa_readline     SA_CONCAT(SA_PREFIX,sa_readline)
  +#define sa_readln       SA_CONCAT(SA_PREFIX,sa_readln)
   #define sa_write        SA_CONCAT(SA_PREFIX,sa_write)
  -#define sa_writeto      SA_CONCAT(SA_PREFIX,sa_writeto)
  -#define sa_printf       SA_CONCAT(SA_PREFIX,sa_printf)
  +#define sa_writef       SA_CONCAT(SA_PREFIX,sa_writef)
   #define sa_flush        SA_CONCAT(SA_PREFIX,sa_flush)
  +#define sa_recv         SA_CONCAT(SA_PREFIX,sa_recv)
  +#define sa_send         SA_CONCAT(SA_PREFIX,sa_send)
   #endif
   
   /* socket address abstraction object type */

From ossp-cvs-owner@ossp.org  Sat Oct  6 13:05:53 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f96B5qU49557; Sat, 6 Oct 2001 13:05:52 +0200 (CEST)
Date: Sat, 6 Oct 2001 13:05:52 +0200 (CEST)
Message-Id: <200110061105.f96B5qU49557@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   06-Oct-2001 13:05:52
  Branch: HEAD                             Handle: 2001100612055100

  Modified files:
    ossp-pkg/sa             TODO

  Log:
    remember writev issue

  Summary:
    Revision    Changes     Path
    1.11        +1  -0      ossp-pkg/sa/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 TODO
  --- ossp-pkg/sa/TODO	2001/10/06 11:02:09	1.10
  +++ ossp-pkg/sa/TODO	2001/10/06 11:05:51	1.11
  @@ -5,4 +5,5 @@
   - full test suite for whole API
   - attention: timeout on accept() can be not what is wishes, i.e.,
     we need specific timeouts
  +- support for writev(2)
   

From ossp-cvs-owner@ossp.org  Sat Oct  6 16:30:44 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f96EUhb73117; Sat, 6 Oct 2001 16:30:43 +0200 (CEST)
Date: Sat, 6 Oct 2001 16:30:43 +0200 (CEST)
Message-Id: <200110061430.f96EUhb73117@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ut_pcre.c l2_ut_pcre.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   06-Oct-2001 16:30:43
  Branch: HEAD                             Handle: 2001100615304200

  Modified files:
    ossp-pkg/l2             l2_ut_pcre.c l2_ut_pcre.h

  Log:
    Upgrade to latest sripped down version of PCRE 3.5.
    This time we use the new PCRE_PREFIX feature to hide
    PCRE inside the l2_util_ namespace prefix.

  Summary:
    Revision    Changes     Path
    1.3         +15 -15     ossp-pkg/l2/l2_ut_pcre.c
    1.3         +30 -4      ossp-pkg/l2/l2_ut_pcre.h
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ut_pcre.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2_ut_pcre.c
  --- ossp-pkg/l2/l2_ut_pcre.c	2001/09/15 16:03:37	1.2
  +++ ossp-pkg/l2/l2_ut_pcre.c	2001/10/06 14:30:42	1.3
  @@ -239,7 +239,7 @@
   
   typedef unsigned char uschar;
   
  -typedef struct real_pcre {
  +typedef struct pcre_st {
   	unsigned long int magic_number;
   	size_t size;
   	const unsigned char *tables;
  @@ -249,12 +249,12 @@
   	uschar first_char;
   	uschar req_char;
   	uschar code[1];
  -} real_pcre;
  +} pcre_st;
   
  -typedef struct real_pcre_extra {
  +typedef struct pcre_extra_st {
   	uschar options;
   	uschar start_bits[32];
  -} real_pcre_extra;
  +} pcre_extra_st;
   
   typedef struct compile_data {
   	const uschar *lcc;
  @@ -465,7 +465,7 @@
   
   int pcre_info(const pcre * external_re, int *optptr, int *first_char)
   {
  -	const real_pcre *re = (const real_pcre *)external_re;
  +	const pcre_st *re = (const pcre_st *)external_re;
   	if (re == NULL)
   		return PCRE_ERROR_NULL;
   	if (re->magic_number != MAGIC_NUMBER)
  @@ -482,8 +482,8 @@
   pcre_fullinfo(const pcre * external_re, const pcre_extra * study_data,
   			  int what, void *where)
   {
  -	const real_pcre *re = (const real_pcre *)external_re;
  -	const real_pcre_extra *study = (const real_pcre_extra *)study_data;
  +	const pcre_st *re = (const pcre_st *)external_re;
  +	const pcre_extra_st *study = (const pcre_extra_st *)study_data;
   
   	if (re == NULL || where == NULL)
   		return PCRE_ERROR_NULL;
  @@ -1883,7 +1883,7 @@
   pcre *pcre_compile(const char *pattern, int options, const char **errorptr,
   				   int *erroroffset, const unsigned char *tables)
   {
  -	real_pcre *re;
  +	pcre_st *re;
   	int length = 3;
   	int runlength;
   	int c, reqchar, countlits;
  @@ -2337,8 +2337,8 @@
   		return NULL;
   	}
   
  -	size = length + offsetof(real_pcre, code[0]);
  -	re = (real_pcre *) (pcre_malloc) (size);
  +	size = length + offsetof(pcre_st, code[0]);
  +	re = (pcre_st *) (pcre_malloc) (size);
   
   	if (re == NULL) {
   		*errorptr = ERR21;
  @@ -3585,8 +3585,8 @@
   	const uschar *start_match = (const uschar *)subject + start_offset;
   	const uschar *end_subject;
   	const uschar *req_char_ptr = start_match - 1;
  -	const real_pcre *re = (const real_pcre *)external_re;
  -	const real_pcre_extra *extra = (const real_pcre_extra *)external_extra;
  +	const pcre_st *re = (const pcre_st *)external_re;
  +	const pcre_extra_st *extra = (const pcre_extra_st *)external_extra;
   	BOOL using_temporary_offsets = FALSE;
   	BOOL anchored;
   	BOOL startline;
  @@ -3998,8 +3998,8 @@
   					   const char **errorptr)
   {
   	uschar start_bits[32];
  -	real_pcre_extra *extra;
  -	const real_pcre *re = (const real_pcre *)external_re;
  +	pcre_extra_st *extra;
  +	const pcre_st *re = (const pcre_st *)external_re;
   	compile_data compile_block;
   
   	*errorptr = NULL;
  @@ -4027,7 +4027,7 @@
   		(re->code, start_bits, (re->options & PCRE_CASELESS) != 0,
   		 &compile_block)) return NULL;
   
  -	extra = (real_pcre_extra *) (pcre_malloc) (sizeof (real_pcre_extra));
  +	extra = (pcre_extra_st *) (pcre_malloc) (sizeof (pcre_extra_st));
   
   	if (extra == NULL) {
   		*errorptr = "failed to get memory";
  Index: ossp-pkg/l2/l2_ut_pcre.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2_ut_pcre.h
  --- ossp-pkg/l2/l2_ut_pcre.h	2001/09/15 16:03:37	1.2
  +++ ossp-pkg/l2/l2_ut_pcre.h	2001/10/06 14:30:42	1.3
  @@ -45,10 +45,36 @@
   #ifndef __L2_UT_PCRE_H__
   #define __L2_UT_PCRE_H__
   
  +#define PCRE_PREFIX l2_util_
  +
   #define PCRE_MAJOR          3
   #define PCRE_MINOR          5
   #define PCRE_DATE           15-Aug-2001
   
  +#ifdef PCRE_PREFIX
  +#if defined(__STDC__) || defined(__cplusplus)
  +#define __PCRE_CONCAT(x,y) x ## y
  +#define PCRE_CONCAT(x,y) __PCRE_CONCAT(x,y)
  +#else
  +#define __PCRE_CONCAT(x) x
  +#define PCRE_CONCAT(x,y) __PCRE_CONCAT(x)y
  +#endif
  +#define pcre_malloc PCRE_CONCAT(PCRE_PREFIX,pcre_malloc)
  +#define pcre_free PCRE_CONCAT(PCRE_PREFIX,pcre_free)
  +#define pcre_compile PCRE_CONCAT(PCRE_PREFIX,pcre_compile)
  +#define pcre_copy_substring PCRE_CONCAT(PCRE_PREFIX,pcre_copy_substring)
  +#define pcre_exec PCRE_CONCAT(PCRE_PREFIX,pcre_exec)
  +#define pcre_free_substring PCRE_CONCAT(PCRE_PREFIX,pcre_free_substring)
  +#define pcre_free_substring_list PCRE_CONCAT(PCRE_PREFIX,pcre_free_substring_list)
  +#define pcre_get_substring PCRE_CONCAT(PCRE_PREFIX,pcre_get_substring)
  +#define pcre_get_substring_list PCRE_CONCAT(PCRE_PREFIX,pcre_get_substring_list)
  +#define pcre_info PCRE_CONCAT(PCRE_PREFIX,pcre_info)
  +#define pcre_fullinfo PCRE_CONCAT(PCRE_PREFIX,pcre_fullinfo)
  +#define pcre_maketables PCRE_CONCAT(PCRE_PREFIX,pcre_maketables)
  +#define pcre_study PCRE_CONCAT(PCRE_PREFIX,pcre_study)
  +#define pcre_version PCRE_CONCAT(PCRE_PREFIX,pcre_version)
  +#endif
  +
   #include <stdlib.h>
   
   #ifdef __cplusplus
  @@ -84,11 +110,11 @@
   #define PCRE_INFO_FIRSTTABLE      5
   #define PCRE_INFO_LASTLITERAL     6
   
  -struct real_pcre;
  -struct real_pcre_extra;
  +struct pcre_st;
  +struct pcre_extra_st;
   
  -typedef struct real_pcre pcre;
  -typedef struct real_pcre_extra pcre_extra;
  +typedef struct pcre_st pcre;
  +typedef struct pcre_extra_st pcre_extra;
   
   extern void *(*pcre_malloc)(size_t);
   extern void  (*pcre_free)(void *);

From ossp-cvs-owner@ossp.org  Sat Oct  6 16:33:11 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f96EXA573353; Sat, 6 Oct 2001 16:33:10 +0200 (CEST)
Date: Sat, 6 Oct 2001 16:33:10 +0200 (CEST)
Message-Id: <200110061433.f96EXA573353@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 configure.ac l2_ch_smtp.c l2_ch_syslog.c l2_p....
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   06-Oct-2001 16:33:10
  Branch: HEAD                             Handle: 2001100615330900

  Modified files:
    ossp-pkg/l2             configure.ac l2_ch_smtp.c l2_ch_syslog.c l2_p.h
                            l2_ut_sa.ac l2_ut_sa.c l2_ut_sa.h

  Log:
    Upgrade to latest OSSP SA snapshot.
    This time by using SA_PREFIX to hide SA inside the l2_util_ namespace prefix.

  Summary:
    Revision    Changes     Path
    1.11        +1  -0      ossp-pkg/l2/configure.ac
    1.4         +25 -22     ossp-pkg/l2/l2_ch_smtp.c
    1.22        +13 -7      ossp-pkg/l2/l2_ch_syslog.c
    1.24        +0  -1      ossp-pkg/l2/l2_p.h
    1.2         +13 -10     ossp-pkg/l2/l2_ut_sa.ac
    1.14        +980 -463   ossp-pkg/l2/l2_ut_sa.c
    1.9         +85 -66     ossp-pkg/l2/l2_ut_sa.h
  ____________________________________________________________________________

  Index: ossp-pkg/l2/configure.ac
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 configure.ac
  --- ossp-pkg/l2/configure.ac	2001/09/14 19:06:40	1.10
  +++ ossp-pkg/l2/configure.ac	2001/10/06 14:33:09	1.11
  @@ -84,6 +84,7 @@
   AC_CHECK_FUNCS(inet_aton inet_pton inet_ntoa inet_ntop snprintf vsnprintf)
   
   sinclude(l2_ut_sa.ac)
  +AC_CHECK_SA
   
   AC_CHECK_EXTLIB([Dmalloc], dmalloc, dmalloc_debug, dmalloc.h, AC_DEFINE(WITH_DMALLOC))
   
  Index: ossp-pkg/l2/l2_ch_smtp.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 l2_ch_smtp.c
  --- ossp-pkg/l2/l2_ch_smtp.c	2001/09/14 12:55:20	1.3
  +++ ossp-pkg/l2/l2_ch_smtp.c	2001/10/06 14:33:09	1.4
  @@ -121,8 +121,11 @@
           return L2_ERR_USE;
   
       /* create socket address */
  -    if ((rc = sa_u2a(&cfg->saaServer, "tcp://%s:%s", cfg->cpHost, cfg->cpPort)) != SA_OK)
  +    if ((rc = sa_addr_create(&cfg->saaServer)) != SA_OK)
           return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
  +    if ((rc = sa_addr_u2a(cfg->saaServer, "inet://%s:%s", 
  +                          cfg->cpHost, cfg->cpPort)) != SA_OK)
  +        return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
   
       /* create socket */
       if ((rc = sa_create(&cfg->saServer)) != SA_OK)
  @@ -190,31 +193,31 @@
           cu(sa_rv == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
   
       /* | 220 en1.engelschall.com ESMTP SMTP Sendmail 8.11.0+ ready */
  -    sa_rv = sa_readline(sa, caLine, sizeof(caLine), &n);
  +    sa_rv = sa_readln(sa, caLine, sizeof(caLine), &n);
       cu_on(!(sa_rv == SA_OK && n > 3 && atoi(caLine) == 220), L2_ERR_IO);
       
       /* | HELO l2
        * | 250 en1.engelschall.com Hello en1.engelschall.com [141.1.129.1], pleased to meet you */
  -    sa_printf(sa, "HELO %s\r\n", cfg->cpLocalHost);
  -    sa_rv = sa_readline(sa, caLine, sizeof(caLine), &n);
  +    sa_writef(sa, "HELO %s\r\n", cfg->cpLocalHost);
  +    sa_rv = sa_readln(sa, caLine, sizeof(caLine), &n);
       cu_on(!(sa_rv == SA_OK && n > 3 && atoi(caLine) == 250), L2_ERR_IO);
   
       /* | MAIL From: <l2@localhost>
        * | 250 2.1.0 <l2@localhost>... Sender ok */
  -    sa_printf(sa, "MAIL FROM:<%s>\r\n", cfg->cpFrom);
  -    sa_rv = sa_readline(sa, caLine, sizeof(caLine), &n);
  +    sa_writef(sa, "MAIL FROM:<%s>\r\n", cfg->cpFrom);
  +    sa_rv = sa_readln(sa, caLine, sizeof(caLine), &n);
       cu_on(!(sa_rv == SA_OK && n > 3 && atoi(caLine) == 250), L2_ERR_IO);
   
       /* | RCPT To: <rse@engelschall.com>
        * | 250 2.1.5 <rse@engelschall.com>... Recipient ok */
  -    sa_printf(sa, "RCPT TO:<%s>\r\n", cfg->cpRcpt);
  -    sa_rv = sa_readline(sa, caLine, sizeof(caLine), &n);
  +    sa_writef(sa, "RCPT TO:<%s>\r\n", cfg->cpRcpt);
  +    sa_rv = sa_readln(sa, caLine, sizeof(caLine), &n);
       cu_on(!(sa_rv == SA_OK && n > 3 && atoi(caLine) == 250), L2_ERR_IO);
   
       /* | DATA
        * | 354 Enter mail, end with "." on a line by itself */
  -    sa_printf(sa, "DATA\r\n");
  -    sa_rv = sa_readline(sa, caLine, sizeof(caLine), &n);
  +    sa_writef(sa, "DATA\r\n");
  +    sa_rv = sa_readln(sa, caLine, sizeof(caLine), &n);
       cu_on(!(sa_rv == SA_OK && n > 3 && atoi(caLine) == 354), L2_ERR_IO);
   
       /* | Date: Fri, 14 Sep 2001 14:50:51 CEST
  @@ -226,24 +229,24 @@
       t = time(NULL);
       tm = localtime(&t);
       strftime(caDate, sizeof(caDate), "%a, %d %b %Y %H:%M:%S %Z", tm);
  -    sa_printf(sa, "Date: %s\r\n", caDate);
  -    sa_printf(sa, "From: %s\r\n", cfg->cpFrom);
  -    sa_printf(sa, "To: %s\r\n", cfg->cpRcpt);
  -    sa_printf(sa, "Subject: %s\r\n", cfg->cpSubject);
  +    sa_writef(sa, "Date: %s\r\n", caDate);
  +    sa_writef(sa, "From: %s\r\n", cfg->cpFrom);
  +    sa_writef(sa, "To: %s\r\n", cfg->cpRcpt);
  +    sa_writef(sa, "Subject: %s\r\n", cfg->cpSubject);
       if (cfg->cpLocalProg != NULL)
  -        sa_printf(sa, "User-Agent: %s (%s)\r\n", 
  +        sa_writef(sa, "User-Agent: %s (%s)\r\n", 
                     l2_version.v_web, cfg->cpLocalProg);
       else
  -        sa_printf(sa, "User-Agent: %s\r\n", l2_version.v_web);
  +        sa_writef(sa, "User-Agent: %s\r\n", l2_version.v_web);
       sa_write(sa, "\r\n", 2, NULL);
   
       /* | A program of user rse on host en1.engelschall.com logged:
        * | [2001-09-10/01:02:03] <notice> sample logging message      */
       if (cfg->cpLocalProg != NULL)
  -        sa_printf(sa, "Program %s of user %s on host %s logged:\r\n", 
  +        sa_writef(sa, "Program %s of user %s on host %s logged:\r\n", 
                      cfg->cpLocalProg, cfg->cpLocalUser, cfg->cpLocalHost);
       else
  -        sa_printf(sa, "A program of user %s on host %s logged:\r\n", 
  +        sa_writef(sa, "A program of user %s on host %s logged:\r\n", 
                      cfg->cpLocalUser, cfg->cpLocalHost);
       cpB = buf;
       cpE = buf;
  @@ -263,13 +266,13 @@
       /* | .
        * | 250 2.0.0 f88Aev847031 Message accepted for delivery */
       sa_write(sa, ".\r\n", 3, NULL);
  -    sa_readline(sa, caLine, sizeof(caLine), &n);
  +    sa_readln(sa, caLine, sizeof(caLine), &n);
       cu_on(!(sa_rv == SA_OK && n > 3 && atoi(caLine) == 250), L2_ERR_IO);
   
       /* | QUIT
        * | 221 2.0.0 en1.engelschall.com closing connection */
  -    sa_printf(sa, "QUIT\r\n");
  -    sa_readline(sa, caLine, sizeof(caLine), &n);
  +    sa_writef(sa, "QUIT\r\n");
  +    sa_readln(sa, caLine, sizeof(caLine), &n);
   
       cus:
   
  @@ -290,7 +293,7 @@
           cfg->saServer = NULL;
       }
       if (cfg->saaServer != NULL) {
  -        free(cfg->saaServer);
  +        sa_addr_destroy(cfg->saaServer);
           cfg->saaServer = NULL;
       }
   
  Index: ossp-pkg/l2/l2_ch_syslog.c
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 l2_ch_syslog.c
  --- ossp-pkg/l2/l2_ch_syslog.c	2001/09/14 19:11:00	1.21
  +++ ossp-pkg/l2/l2_ch_syslog.c	2001/10/06 14:33:09	1.22
  @@ -220,17 +220,23 @@
           /* open remote syslog connection via UDP socket */
           if (cfg->szRemoteHost == NULL)
               return L2_ERR_USE;
  -        if ((rc = sa_u2a(&cfg->saaRemoteAddr, "udp://%s:%d", 
  -                         cfg->szRemoteHost, cfg->nRemotePort)) != SA_OK)
  +        if ((rc = sa_addr_create(&cfg->saaRemoteAddr)) != SA_OK)
               return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
  +        if ((rc = sa_addr_u2a(cfg->saaRemoteAddr, "inet://%s:%d", 
  +                              cfg->szRemoteHost, cfg->nRemotePort)) != SA_OK)
  +            return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
           if ((rc = sa_create(&cfg->saRemoteSock)) != SA_OK)
               return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
  +        sa_type(cfg->saRemoteSock, SA_TYPE_DATAGRAM);
           sa_timeout(cfg->saRemoteSock, 10, 0);
  +        if ((rc = sa_addr_create(&la)) != SA_OK)
  +            return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
           /* FIXME: if uid == 0 -> use port 514 */
  -        if ((rc = sa_u2a(&la, "udp://0.0.0.0:0")) != SA_OK)
  +        if ((rc = sa_addr_u2a(la, "inet://0.0.0.0:0")) != SA_OK)
               return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
           if ((rc = sa_bind(cfg->saRemoteSock, la)) != SA_OK)
               return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
  +        sa_addr_destroy(la);
       }
       return L2_OK;
   }
  @@ -286,8 +292,8 @@
                       cfg->szIdent, buf);
           if ((n = strlen(caBuf)) > 1024)
               return L2_ERR_IO;
  -        if ((rc = sa_writeto(cfg->saRemoteSock, caBuf, n, 
  -                             NULL, cfg->saaRemoteAddr)) != SA_OK)
  +        if ((rc = sa_send(cfg->saRemoteSock, caBuf, n, 
  +                          NULL, cfg->saaRemoteAddr)) != SA_OK)
               return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_IO);
       }
   
  @@ -308,7 +314,7 @@
               cfg->saRemoteSock = NULL;
           }
           if (cfg->saaRemoteAddr != NULL) {
  -            free(cfg->saaRemoteAddr);
  +            sa_addr_destroy(cfg->saaRemoteAddr);
               cfg->saaRemoteAddr = NULL;
           }
       }
  @@ -334,7 +340,7 @@
       if (cfg->saRemoteSock != NULL)
           sa_destroy(cfg->saRemoteSock);
       if (cfg->saaRemoteAddr != NULL)
  -        free(cfg->saaRemoteAddr);
  +        sa_addr_destroy(cfg->saaRemoteAddr);
       free(cfg);
   
       return L2_OK;
  Index: ossp-pkg/l2/l2_p.h
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 l2_p.h
  --- ossp-pkg/l2/l2_p.h	2001/10/02 14:11:51	1.23
  +++ ossp-pkg/l2/l2_p.h	2001/10/06 14:33:09	1.24
  @@ -41,7 +41,6 @@
   #include "l2.h"
   #include "l2_config.h"
   #include "l2_ut_pcre.h"
  -#define SA_PREFIX l2_ut_
   #include "l2_ut_sa.h"
   
   #if defined(HAVE_DMALLOC_H) && defined(WITH_DMALLOC)
  Index: ossp-pkg/l2/l2_ut_sa.ac
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 l2_ut_sa.ac
  --- ossp-pkg/l2/l2_ut_sa.ac	2001/09/14 19:06:40	1.1
  +++ ossp-pkg/l2/l2_ut_sa.ac	2001/10/06 14:33:09	1.2
  @@ -27,15 +27,18 @@
   ##  sa.ac: socket abstraction Autoconf checks
   ##
   
  -AC_CHECK_HEADERS(sys/types.h sys/socket.h netdb.h netinet/in.h)
  +AC_DEFUN(AC_CHECK_SA,[
  +    #   make sure libnsl and libsocket are linked in if they exist
  +    AC_CHECK_LIB(nsl, gethostname)
  +    if test ".`echo $LIBS | grep nsl`" = .; then
  +        AC_CHECK_LIB(nsl, gethostbyname)
  +    fi  
  +    AC_CHECK_LIB(socket, accept)
  +    
  +    #   check for system headers
  +    AC_CHECK_HEADERS(string.h sys/types.h sys/socket.h netdb.h netinet/in.h)
   
  -AC_CHECK_LIB(nsl, gethostname)
  -if test ".`echo $LIBS | grep nsl`" = .; then
  -    AC_CHECK_LIB(nsl, gethostbyname)
  -fi  
  -AC_CHECK_LIB(socket, accept)
  -
  -AC_CHECK_FUNCS(inet_aton inet_pton)
  -AC_CHECK_FUNCS(inet_ntoa inet_ntop)
  -AC_CHECK_FUNCS(snprintf vsnprintf)
  +    #   check for system functions
  +    AC_CHECK_FUNCS(inet_aton inet_pton inet_ntoa inet_ntop snprintf)
  +])
   
  Index: ossp-pkg/l2/l2_ut_sa.c
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 l2_ut_sa.c
  --- ossp-pkg/l2/l2_ut_sa.c	2001/10/02 14:11:51	1.13
  +++ ossp-pkg/l2/l2_ut_sa.c	2001/10/06 14:33:09	1.14
  @@ -31,318 +31,432 @@
   #include "l2_config.h"
   
   /* include system API headers */
  -#include <stdio.h>
  -#include <stdlib.h>
  -#include <stdarg.h>
  -#include <string.h>
  -#include <unistd.h>
  -#include <ctype.h>
  -#include <errno.h>
  -#include <fcntl.h>
  -#include <time.h>
  -#include <sys/time.h>
  -#include <netdb.h>
  -#include <sys/types.h>
  -#include <sys/un.h>
  -#include <netinet/in.h>
  -#include <sys/socket.h>
  -#include <arpa/inet.h>
  +#include <stdio.h>       /* for "s[n]printf()" */
  +#include <stdlib.h>      /* for "malloc()" & friends */
  +#include <stdarg.h>      /* for "va_xxx()" and "va_list" */
  +#include <string.h>      /* for "strxxx()" and "size_t" */
  +#include <sys/types.h>   /* for general prerequisites */
  +#include <ctype.h>       /* for isxxx() */
  +#include <errno.h>       /* for "EXXX" */
  +#include <fcntl.h>       /* for "F_XXX" and "O_XXX" */
  +#include <unistd.h>      /* for standard Unix stuff */
  +#include <netdb.h>       /* for "struct prototent" */
  +#include <sys/time.h>    /* for "struct timeval" */
  +#include <sys/un.h>      /* for "struct sockaddr_un" */
  +#include <netinet/in.h>  /* for "struct sockaddr_in[6]" */
  +#include <sys/socket.h>  /* for "AF_XXX" and "SOCK_XXX" */
  +#include <arpa/inet.h>   /* for "inet_xtoy" */
   
   /* include own API header */
  -#define SA_PREFIX l2_ut_
   #include "l2_ut_sa.h"
   
   /* socket address abstraction object */
   struct sa_addr_st {
  -    struct sockaddr *saBuf;
  -    socklen_t        slBuf;
  -    int              nFamily;
  -    int              nProto;
  +    int              nFamily;     /* the socket family (AF_XXX) */
  +    struct sockaddr *saBuf;       /* the "struct sockaddr_xx" actually */
  +    socklen_t        slBuf;       /* the length of "struct sockaddr_xx" */
   };
   
   /* socket abstraction object */
   struct sa_st {
  -    int              sSocket;
  -    int              bTimeout;
  -    struct timeval   tvTimeout;
  -    int              nReadLen;
  -    int              nReadSize;
  -    char            *cpReadBuf;
  -    int              nWriteLen;
  -    int              nWriteSize;
  -    char            *cpWriteBuf;
  +    sa_type_t        eType;       /* socket type (stream or datagram) */
  +    int              fdSocket;    /* socket file descriptor */
  +    int              bTimeout;    /* timeout enabling flag */
  +    struct timeval   tvTimeout;   /* timeout value (sec, usec) */
  +    int              nReadLen;    /* read  buffer current length */
  +    int              nReadSize;   /* read  buffer current size */
  +    char            *cpReadBuf;   /* read  buffer memory chunk */
  +    int              nWriteLen;   /* write buffer current length */
  +    int              nWriteSize;  /* write buffer current size */
  +    char            *cpWriteBuf;  /* write buffer memory chunk */
   };
   
  -/* make sure AF_LOCAL define exists */
  +/* boolean values */
  +#ifndef FALSE
  +#define FALSE (0)
  +#endif
  +#ifndef TRUE
  +#define TRUE  (!FALSE)
  +#endif
  +
  +/* backward compatibility for AF_LOCAL */
   #if !defined(AF_LOCAL) && defined(AF_UNIX)
   #define AF_LOCAL AF_UNIX
   #endif
   
  -/* make sure inet_pton() exists */
  -#if defined(HAVE_INET_PTON)
  -#define sa_inet_pton inet_pton
  -#elif defined(HAVE_INET_ATON)
  -static int inet_pton(int family, const char *strptr, void *addrptr)
  +/* convert Internet address from presentation to network format */
  +static int sa_inet_pton(int family, const char *strptr, void *addrptr)
   {
  +#ifdef HAVE_INET_PTON
  +    return inet_pton(family, strptr, addrptr);
  +#else
       struct in_addr in_val;
   
       if (family == AF_INET) {
  -        if (inet_aton(strptr, &in_val)) {
  -            memcpy(addrptr, &in_val, sizeof(struct in_addr));
  -            return 1;
  -        }
  -        return 0;
  +        /* at least for IPv4 we can rely on the old inet_aton(3)
  +           and for IPv6 inet_pton(3) would exist anyway */
  +        if (inet_aton(strptr, &in_val) == 0)
  +            return 0;
  +        memcpy(addrptr, &in_val, sizeof(struct in_addr));
  +        return 1;
       }
       errno = EAFNOSUPPORT;
  -    return -1;
  -}
  -#else
  -#error "neither inet_pton nor inet_aton available"
  +    return 0;
   #endif
  +}
   
  -/* make sure inet_ntop() exists */
  -#if defined(HAVE_INET_NTOP)
  -#define sa_inet_ntop inet_ntop
  -#elif defined(HAVE_INET_NTOA)
  -static char *inet_ntop(int family, const void *src, char *dst, size_t size)
  +/* convert Internet address from network to presentation format */
  +static const char *sa_inet_ntop(int family, const void *src, char *dst, size_t size)
   {
  +#ifdef HAVE_INET_NTOP
  +    return inet_ntop(family, src, dst, size);
  +#else
       struct in_addr in_val;
       char *cp;
       int n;
   
       if (family == AF_INET) {
  -        if ((cp = inet_ntoa(src)) != NULL) {
  -            n = strlen(cp);
  -            if (n > size-1)
  -                n = size-1;
  -            memcpy(dst, cp, n);
  -            dst[n] = '\0';
  -            return 1;
  -        }
  -        return 0;
  +        /* at least for IPv4 we can rely on the old inet_ntoa(3)
  +           and for IPv6 inet_ntop(3) would exist anyway */
  +        if ((cp = inet_ntoa(src)) == NULL) 
  +            return NULL;
  +        n = strlen(cp);
  +        if (n > size-1)
  +            n = size-1;
  +        memcpy(dst, cp, n);
  +        dst[n] = '\0';
  +        return dst;
       }
       errno = EAFNOSUPPORT;
  -    return -1;
  -}
  -#else
  -#error "neither inet_ntop nor inet_ntoa available"
  +    return NULL;
   #endif
  +}
   
  -/* make sure vsnprintf() exists */
  -#if defined(HAVE_VSNPRINTF)
  -#define sa_vsnprintf vsnprintf
  -#elif defined(HAVE_VSPRINTF)
  -static int sa_vsnprintf(char *str, size_t size, const char *fmt, va_list ap)
  +/* minimal vsnprintf(3) variant which supports %{c,s,d} only */
  +static int sa_mvsnprintf(char *buffer, size_t bufsize, const char *format, va_list ap)
   {
  -    int rv;
  -    
  -    rv = vsprintf(str, fmt, ap);
  -    if (rv > size) {
  -        fprintf(stderr, "ERROR: vsprintf(3) buffer overflow!\n");
  -        abort();
  -    }
  -}
  +    char *bufptr;
  +    char *bufend;
  +    /* sufficient integer buffer: <available-bits> x log_10(2) + safety */
  +    char ibuf[((sizeof(int)*8)/3)+10]; 
  +    char *cp;
  +    char c;
  +    int d;
  +    int n;
  +
  +    bufptr = buffer;
  +    bufend = buffer + bufsize - 1;
  +    while ((c = *format++) != '\0' && bufptr < bufend) {
  +        if (c == '%') {
  +            c = *format++;
  +            if (c == '%')
  +                /* implement "%%" */
  +                *bufptr++ = c;
  +            else if (c == 'c')
  +                /* implement "%c" */
  +                *bufptr++ = (char)va_arg(ap, int);
  +            else if (c == 's') {
  +                /* implement "%s" */
  +                if ((cp = (char *)va_arg(ap, char *)) == NULL)
  +                    cp = "(null)";
  +                n = strlen(cp);
  +                if ((bufptr + n) > bufend)
  +                    n = bufend - bufptr;
  +                memcpy(bufptr, cp, n);
  +                bufptr += n;
  +            }
  +            else if (c == 'd') {
  +                /* implement "%d" */
  +                d = (int)va_arg(ap, int);
  +#ifdef HAVE_SNPRINTF
  +                snprintf(ibuf, sizeof(ibuf), "%d", d); /* explicitly secure */
   #else
  -#error "neither vsnprintf nor vsprintf available"
  +                sprintf(ibuf, "%d", d);                /* implicitly secure */
   #endif
  +                n = strlen(ibuf);
  +                memcpy(bufptr, ibuf, n);
  +                bufptr += n;
  +            }
  +            else {
  +                *bufptr++ = '%';
  +                if (bufptr < bufend)
  +                    *bufptr++ = c;
  +            }
  +        }
  +        else
  +            *bufptr++ = c;
  +    }
  +    *bufptr = '\0';
  +    return (bufptr - buffer);
  +}
   
  -/* make sure snprintf() exists */
  -#if defined(HAVE_SNPRINTF)
  -#define sa_snprintf snprintf
  -#else
  -static int sa_snprintf(char *str, size_t size, const char *fmt, ...)
  +/* minimal snprintf(3) variant which supports %{c,s,d} only */
  +static int sa_msnprintf(char *buffer, size_t bufsize, const char *format, ...)
   {
  +    int chars;
       va_list ap;
  -    int rv;
  +
  +    /* argument sanity check(s) */
  +    if (buffer == NULL || bufsize == 0 || format == NULL)
  +        return 0;
   
  -    va_start(ap, fmt);
  -    rv = sa_vsnprintf(str, size, fmt, ap);
  +    /* pass through to va_list based variant */
  +    va_start(ap, format);
  +    chars = sa_mvsnprintf(buffer, bufsize, format, ap);
       va_end(ap);
  -    return rv;
  +
  +    return chars;
   }
  -#endif
   
  -sa_rc_t sa_u2a(sa_addr_t **saa, const char *uri, ...)
  +/* create address object */
  +sa_rc_t sa_addr_create(sa_addr_t **saap)
   {
  +    sa_addr_t *saa;
  +
  +    /* argument sanity check(s) */
  +    if (saap == NULL)
  +        return SA_ERR_ARG;
  +
  +    /* allocate and initialize new address object */
  +    if ((saa = (sa_addr_t *)malloc(sizeof(sa_addr_t))) == NULL)
  +        return SA_ERR_MEM;
  +    saa->nFamily = 0;
  +    saa->saBuf   = NULL;
  +    saa->slBuf   = 0;
  +
  +    /* pass object to caller */
  +    *saap = saa;
  +
  +    return SA_OK;
  +}
  +
  +/* destroy address object */
  +sa_rc_t sa_addr_destroy(sa_addr_t *saa)
  +{
  +    /* argument sanity check(s) */
  +    if (saa == NULL)
  +        return SA_ERR_ARG;
  +
  +    /* free address objects and sub-object(s) */
  +    if (saa->saBuf != NULL)
  +        free(saa->saBuf);
  +    free(saa);
  +
  +    return SA_OK;
  +}
  +
  +/* import URI into address object */
  +sa_rc_t sa_addr_u2a(sa_addr_t *saa, const char *uri, ...)
  +{
       va_list ap;
  -    int nPort;
  +    int sf;
       socklen_t sl;
       struct sockaddr *sa;
  +    struct sockaddr_un un;
       struct sockaddr_in sa4;
   #ifdef AF_INET6
       struct sockaddr_in6 sa6;
   #endif
       struct hostent *he;
       struct servent *se;
  -    struct protoent *pe;
       int bNumeric;
  -    int i;
  -    char *cpProto;
  -    int   nProto;
       char *cpHost;
       char *cpPort;
  +    char *cpProto;
  +    int nPort;
  +    const char *cpPath;
       char uribuf[1024];
       char *cp;
  -    int sf;
  +    int i;
  +    int n;
   
  -    /* argument sanity check */
  +    /* argument sanity check(s) */
       if (saa == NULL || uri == NULL)
           return SA_ERR_ARG;
   
       /* on-the-fly create or just take over URI */
       va_start(ap, uri);
  -    sa_vsnprintf(uribuf, sizeof(uribuf), uri, ap);
  +    sa_mvsnprintf(uribuf, sizeof(uribuf), uri, ap);
       va_end(ap);
   
  -    /* parse URI into protocol, host and port parts */
  -    uri = uribuf;
  -    cpProto = "tcp";
  -    if ((cp = strstr(uri, "://")) != NULL) {
  -        cpProto = (char *)uri;
  -        *cp = '\0';
  -        uri = cp+3;
  -    }
  -    cpHost = (char *)uri;
  -    if ((cp = strchr(uri, ':')) == NULL)
  -        return SA_ERR_ARG;
  -    *cp++ = '\0';
  -    cpPort = cp;
  -
  -    /* resolve protocol */
  -    if ((pe = getprotobyname(cpProto)) == NULL)
  -        return SA_ERR_SYS;
  -    nProto = pe->p_proto;
  +    /* initialize result variables */
  +    sa = NULL;
  +    sl = 0;
  +    sf = 0;
   
  -    /* resolve port */
  -    bNumeric = 1;
  -    for (i = 0; cpPort[i] != '\0'; i++) {
  -        if (!isdigit((int)cpPort[i])) {
  -            bNumeric = 0;
  -            break;
  +    /* parse URI and resolve contents. 
  +       The following syntax is recognized:
  +       - unix:<path>
  +       - inet://<host>:<port>[#(tcp|udp)] */
  +    uri = uribuf;
  +    if (strncmp(uri, "unix:", 5) == 0) {
  +        /* parse URI */
  +        cpPath = uri+5;
  +        if (cpPath[0] != '/')
  +            return SA_ERR_ARG;
  +
  +        /* mandatory(!) socket address structure initialization */
  +        memset(&un, 0, sizeof(un));
  +
  +        /* fill-in socket address structure */
  +        n = strlen(cpPath);
  +        if ((n+1) > sizeof(un.sun_path))
  +            return SA_ERR_MEM;
  +        memcpy(un.sun_path, cpPath, n+1);
  +        un.sun_family = AF_LOCAL;
  +
  +        /* provide results */
  +        sa = (struct sockaddr *)&un;
  +        sl = sizeof(un);
  +        sf = AF_LOCAL;
  +    }
  +    else if (strncmp(uri, "inet://", 7) == 0) {
  +        /* parse URI */
  +        cpHost = (char *)(uri+7);
  +        if ((cp = strchr(cpHost, ':')) == NULL)
  +            return SA_ERR_ARG;
  +        *cp++ = '\0';
  +        cpPort = cp;
  +
  +        /* resolve port */
  +        nPort = 0;
  +        bNumeric = 1;
  +        for (i = 0; cpPort[i] != '\0'; i++) {
  +            if (!isdigit((int)cpPort[i])) {
  +                bNumeric = 0;
  +                break;
  +            }
           }
  -    }
  -    if (bNumeric)
  -        nPort = atoi(cpPort);
  -    else {
  -        if ((se = getservbyname(cpPort, cpProto)) == NULL)
  -            return SA_ERR_SYS;
  -        nPort = ntohs(se->s_port);
  -    }
  +        if (bNumeric)
  +            nPort = atoi(cpPort);
  +        else {
  +            cpProto = "tcp";
  +            if ((cp = strchr(cpPort, '#')) != NULL) {
  +                *cp++ = '\0';
  +                cpProto = cp;
  +            }
  +            if ((se = getservbyname(cpPort, cpProto)) == NULL)
  +                return SA_ERR_SYS;
  +            nPort = ntohs(se->s_port);
  +        }
   
  -    /* mandatory(!) socket address structure initialization */
  -    memset(&sa4, 0, sizeof(sa4));
  +        /* mandatory(!) socket address structure initialization */
  +        memset(&sa4, 0, sizeof(sa4));
   #ifdef AF_INET6
  -    memset(&sa6, 0, sizeof(sa6));
  +        memset(&sa6, 0, sizeof(sa6));
   #endif
   
  -    /* resolve host by trying to parse it as either directly a IPv4 or
  -       IPv6 address or by resolving it to either a IPv4 or IPv6 address */
  -    sa = NULL;
  -    sl = 0;
  -    sf = 0;
  -    if (inet_pton(AF_INET, cpHost, &sa4.sin_addr.s_addr) == 1) {
  -        sa4.sin_family = AF_INET;
  -        sa4.sin_port = htons(nPort);
  -        sa = (struct sockaddr *)&sa4;
  -        sl = sizeof(sa4);
  -        sf = AF_INET;
  -    }
  -#ifdef AF_INET6
  -    else if (inet_pton(AF_INET6, cpHost, &sa6.sin6_addr.s6_addr) == 1) {
  -        sa6.sin6_family = AF_INET6;
  -        sa6.sin6_port = htons(nPort);
  -        sa = (struct sockaddr *)&sa6;
  -        sl = sizeof(sa6);
  -        sf = AF_INET6;
  -    }
  -#endif
  -    else if ((he = gethostbyname(cpHost)) != NULL) {
  -        if (he->h_addrtype == AF_INET) {
  +        /* resolve host by trying to parse it as either directly a IPv4 or
  +           IPv6 address or by resolving it to either a IPv4 or IPv6 address */
  +        if (sa_inet_pton(AF_INET, cpHost, &sa4.sin_addr.s_addr) == 1) {
               sa4.sin_family = AF_INET;
               sa4.sin_port = htons(nPort);
  -            memcpy(&sa4.sin_addr.s_addr, he->h_addr_list[0], sizeof(sa4.sin_addr.s_addr));
               sa = (struct sockaddr *)&sa4;
               sl = sizeof(sa4);
               sf = AF_INET;
           }
   #ifdef AF_INET6
  -        else if (he->h_addrtype == AF_INET6) {
  +        else if (sa_inet_pton(AF_INET6, cpHost, &sa6.sin6_addr.s6_addr) == 1) {
               sa6.sin6_family = AF_INET6;
               sa6.sin6_port = htons(nPort);
  -            memcpy(&sa6.sin6_addr.s6_addr, he->h_addr_list[0], sizeof(sa6.sin6_addr.s6_addr));
               sa = (struct sockaddr *)&sa6;
               sl = sizeof(sa6);
               sf = AF_INET6;
           }
   #endif
  +        else if ((he = gethostbyname(cpHost)) != NULL) {
  +            if (he->h_addrtype == AF_INET) {
  +                sa4.sin_family = AF_INET;
  +                sa4.sin_port = htons(nPort);
  +                memcpy(&sa4.sin_addr.s_addr, he->h_addr_list[0],
  +                       sizeof(sa4.sin_addr.s_addr));
  +                sa = (struct sockaddr *)&sa4;
  +                sl = sizeof(sa4);
  +                sf = AF_INET;
  +            }
  +#ifdef AF_INET6
  +            else if (he->h_addrtype == AF_INET6) {
  +                sa6.sin6_family = AF_INET6;
  +                sa6.sin6_port = htons(nPort);
  +                memcpy(&sa6.sin6_addr.s6_addr, he->h_addr_list[0], 
  +                       sizeof(sa6.sin6_addr.s6_addr));
  +                sa = (struct sockaddr *)&sa6;
  +                sl = sizeof(sa6);
  +                sf = AF_INET6;
  +            }
  +#endif
  +        }
       }
  -    if (sa == NULL)
  -        return SA_ERR_ARG;
  -        
  -    /* create result address structure */
  -    if ((*saa = (sa_addr_t *)malloc(sizeof(sa_addr_t))) == NULL)
  -        return SA_ERR_MEM;
  -    if (((*saa)->saBuf = (struct sockaddr *)malloc(sl)) == NULL) {
  -        free(*saa);
  +
  +    /* make sure result variables are set */
  +    if (sa == NULL || sl == 0 || sf == 0)
  +        return SA_ERR_INT;
  +
  +    /* fill-in result address structure */
  +    if (saa->saBuf != NULL)
  +        free(saa->saBuf);
  +    if ((saa->saBuf = (struct sockaddr *)malloc(sl)) == NULL)
           return SA_ERR_MEM;
  -    }
  -    memcpy((*saa)->saBuf, sa, sl);
  -    (*saa)->slBuf = sl;
  -    (*saa)->nFamily = sf;
  -    (*saa)->nProto = nProto;
  +    memcpy(saa->saBuf, sa, sl);
  +    saa->slBuf = sl;
  +    saa->nFamily = sf;
  +
       return SA_OK;
   }
   
  -sa_rc_t sa_s2a(sa_addr_t **saa, const struct sockaddr *sabuf, socklen_t salen)
  +/* import "struct sockaddr" into address object */
  +sa_rc_t sa_addr_s2a(sa_addr_t *saa, const struct sockaddr *sabuf, socklen_t salen)
   {
  +    struct sockaddr_un *un;
       struct sockaddr_in *sa4;
   #ifdef AF_INET6
       struct sockaddr_in6 *sa6;
   #endif
  -    struct protoent *pe;
       int sf;
   
  +    /* argument sanity check(s) */
       if (saa == NULL || sabuf == NULL || salen == 0)
           return SA_ERR_ARG;
   
       /* create result address structure */
  -    if ((*saa = (sa_addr_t *)malloc(sizeof(sa_addr_t))) == NULL)
  -        return SA_ERR_MEM;
  -    if (((*saa)->saBuf = (struct sockaddr *)malloc(salen)) == NULL) {
  -        free(*saa);
  +    if (saa->saBuf != NULL)
  +        free(saa->saBuf);
  +    if ((saa->saBuf = (struct sockaddr *)malloc(salen)) == NULL)
           return SA_ERR_MEM;
  -    }
  -    memcpy((*saa)->saBuf, sabuf, salen);
  -    (*saa)->slBuf = salen;
  +    memcpy(saa->saBuf, sabuf, salen);
  +    saa->slBuf = salen;
   
  -    /* fill in family */
  +    /* resolve family */
       sf = 0;
  -    if (sizeof(struct sockaddr_in) == salen) {
  +    if (sizeof(struct sockaddr_un) == salen) {
  +        un = (struct sockaddr_un *)((void *)sabuf);
  +        if (un->sun_family == AF_LOCAL)
  +            sf = AF_LOCAL;
  +    }
  +    if (sf == 0 && sizeof(struct sockaddr_in) == salen) {
           sa4 = (struct sockaddr_in *)((void *)sabuf);
           if (sa4->sin_family == AF_INET)
               sf = AF_INET;
       }
   #ifdef AF_INET6
  -    else if (sizeof(struct sockaddr_in6) == salen) {
  +    if (sf == 0 && sizeof(struct sockaddr_in6) == salen) {
           sa6 = (struct sockaddr_in6 *)((void *)sabuf);
           if (sa6->sin6_family == AF_INET6)
               sf = AF_INET6;
       }
   #endif
  -    (*saa)->nFamily = sf;
  +    if (sf == 0)
  +        return SA_ERR_ARG;
  +    saa->nFamily = sf;
   
  -    /* fill in protocol */
  -    if ((pe = getprotobyname("tcp")) != NULL)
  -        (*saa)->nProto = pe->p_proto;
  -    else
  -        (*saa)->nProto = 0;
       return SA_OK;
   }
   
  -sa_rc_t sa_a2u(const sa_addr_t *saa, char **uri)
  +/* export address object into URI */
  +sa_rc_t sa_addr_a2u(sa_addr_t *saa, char **uri)
   {
       char uribuf[1024];
  -    struct protoent *pe;
  +    struct sockaddr_un *un;
       struct sockaddr_in *sa4;
   #ifdef AF_INET6
       struct sockaddr_in6 *sa6;
  @@ -350,159 +464,297 @@
       char caHost[512];
       int nPort;
   
  +    /* argument sanity check(s) */
       if (saa == NULL || uri == NULL)
           return SA_ERR_ARG;
  -    if ((pe = getprotobynumber(saa->nProto)) == NULL)
  -        return SA_ERR_SYS;
  -    if (saa->nFamily == AF_INET) {
  -        sa4 = (struct sockaddr_in *)((void *)saa->saBuf);
  -        inet_ntop(AF_INET, &sa4->sin_addr.s_addr, caHost, sizeof(caHost));
  -        nPort = ntohs(sa4->sin_port);
  +
  +    /* export object contents */
  +    if (saa->nFamily == AF_LOCAL) {
  +        un = (struct sockaddr_un *)((void *)saa->saBuf);
  +        sa_msnprintf(uribuf, sizeof(uribuf), "unix:%s", un->sun_path);
       }
   #ifdef AF_INET6
  -    else if (saa->nFamily == AF_INET6) {
  -        sa6 = (struct sockaddr_in6 *)((void *)saa->saBuf);
  -        inet_ntop(AF_INET6, &sa6->sin6_addr.s6_addr, caHost, sizeof(caHost));
  -        nPort = ntohs(sa6->sin6_port);
  -    }
  +    else if (saa->nFamily == AF_INET || saa->nFamily == AF_INET6) {
  +#else
  +    else if (saa->nFamily == AF_INET) {
   #endif
  +        if (saa->nFamily == AF_INET) {
  +            sa4 = (struct sockaddr_in *)((void *)saa->saBuf);
  +            sa_inet_ntop(AF_INET, &sa4->sin_addr.s_addr, caHost, sizeof(caHost));
  +            nPort = ntohs(sa4->sin_port);
  +        }
  +#ifdef AF_INET6
  +        else {
  +            sa6 = (struct sockaddr_in6 *)((void *)saa->saBuf);
  +            sa_inet_ntop(AF_INET6, &sa6->sin6_addr.s6_addr, caHost, sizeof(caHost));
  +            nPort = ntohs(sa6->sin6_port);
  +        }
  +#endif
  +        sa_msnprintf(uribuf, sizeof(uribuf), "inet://%s:%d", caHost, nPort);
  +    }
       else
  -        return SA_ERR_ARG;
  -    sa_snprintf(uribuf, sizeof(uribuf), "%s://%s:%d", pe->p_name, caHost, nPort);
  +        return SA_ERR_INT;
  +
  +    /* pass result to caller */
       *uri = strdup(uribuf);
  +
       return SA_OK;
   }
   
  -sa_rc_t sa_a2s(const sa_addr_t *saa, struct sockaddr **sabuf, socklen_t *salen)
  +/* export address object into "struct sockaddr" */
  +sa_rc_t sa_addr_a2s(sa_addr_t *saa, struct sockaddr **sabuf, socklen_t *salen)
   {
  +    /* argument sanity check(s) */
       if (saa == NULL || sabuf == NULL || salen == 0)
           return SA_ERR_ARG;
   
  +    /* export underlying address structure */
       if ((*sabuf = (struct sockaddr *)malloc(saa->slBuf)) == NULL)
           return SA_ERR_MEM;
       memmove(*sabuf, saa->saBuf, saa->slBuf);
       *salen = saa->slBuf;
  +
       return SA_OK;
   }
   
  -static sa_rc_t sa_socket_init(sa_t *sa, int family, int proto)
  +/* internal lazy/delayed initialization of underlying socket */
  +static sa_rc_t sa_socket_init(sa_t *sa, int nFamily)
   {
  -    int type;
  +    int nType;
  +    int nProto;
  +    struct protoent *pe;
  +    char *cpProto;
   
  +    /* argument sanity check(s) */
       if (sa == NULL)
  -        return SA_ERR_ARG;
  -    if (proto == IPPROTO_TCP)
  -        type = SOCK_STREAM;
  -    else if (proto == IPPROTO_UDP)
  -        type = SOCK_DGRAM;
  -    else
           return SA_ERR_ARG;
  -    if (sa->sSocket != -1)
  +
  +    /* only perform operation if socket still does not exist */
  +    if (sa->fdSocket != -1)
           return SA_ERR_USE;
  -    if ((sa->sSocket = socket(family, type, proto)) == -1)
  +
  +    /* determine socket type */
  +    if (sa->eType == SA_TYPE_STREAM)
  +        nType = SOCK_STREAM;
  +    else if (sa->eType == SA_TYPE_DATAGRAM)
  +        nType = SOCK_DGRAM;
  +    else
  +        return SA_ERR_INT;
  +
  +    /* determine socket protocol */
  +    if (nFamily == AF_LOCAL) 
  +        nProto = 0;
  +#ifdef AF_INET6
  +    else if (nFamily == AF_INET || nFamily == AF_INET6) {
  +#else
  +    else if (nFamily == AF_INET) {
  +#endif
  +        if (nType == SOCK_STREAM)
  +            cpProto = "tcp";
  +        else if (nType == SOCK_DGRAM)
  +            cpProto = "udp";
  +        else
  +            return SA_ERR_INT;
  +        if ((pe = getprotobyname(cpProto)) == NULL)
  +            return SA_ERR_SYS;
  +        nProto = pe->p_proto;
  +    }
  +    else
  +        return SA_ERR_INT;
  +
  +    /* create the underlying socket */
  +    if ((sa->fdSocket = socket(nFamily, nType, nProto)) == -1)
           return SA_ERR_SYS;
  +
       return SA_OK;
   }
   
  +/* internal destruction of underlying socket */
   static sa_rc_t sa_socket_kill(sa_t *sa)
   {
  +    /* argument sanity check(s) */
       if (sa == NULL)
           return SA_ERR_ARG;
  -    if (sa->sSocket != -1) {
  -        close(sa->sSocket);
  -        sa->sSocket = -1;
  -    }
  +
  +    /* check context */
  +    if (sa->fdSocket == -1)
  +        return SA_ERR_USE;
  +
  +    /* close socket */
  +    close(sa->fdSocket);
  +    sa->fdSocket = -1;
  +
       return SA_OK;
   }
   
  +/* create abstract socket object */
   sa_rc_t sa_create(sa_t **sap)
   {
       sa_t *sa;
   
  +    /* argument sanity check(s) */
  +    if (sap == NULL)
  +        return SA_ERR_ARG;
  +
  +    /* allocate and initialize socket object */
       if ((sa = (sa_t *)malloc(sizeof(sa_t))) == NULL)
  -        return SA_ERR_MEM;
  -    sa->sSocket    = -1;
  -    sa->bTimeout   = 0;
  -    sa->nReadLen   = 0;
  -    sa->nReadSize  = 1024;
  -    if ((sa->cpReadBuf = (char *)malloc(sa->nReadSize)) == NULL) {
  -        free(sa);
  -        return SA_ERR_MEM;
  -    }
  -    sa->nWriteLen  = 0;
  -    sa->nWriteSize = 1024;
  -    if ((sa->cpWriteBuf = (char *)malloc(sa->nWriteSize)) == NULL) {
  -        free(sa->cpReadBuf);
  -        free(sa);
           return SA_ERR_MEM;
  -    }
  +    sa->eType             = SA_TYPE_STREAM;
  +    sa->fdSocket          = -1;
  +    sa->bTimeout          = FALSE;
  +    sa->tvTimeout.tv_sec  = 0;
  +    sa->tvTimeout.tv_usec = 0;
  +    sa->nReadLen          = 0;
  +    sa->nReadSize         = 0;
  +    sa->cpReadBuf         = NULL;
  +    sa->nWriteLen         = 0;
  +    sa->nWriteSize        = 0;
  +    sa->cpWriteBuf        = NULL;
  +
  +    /* pass object to caller */
       *sap = sa;
  +
       return SA_OK;
   }
   
  +/* destroy abstract socket object */
   sa_rc_t sa_destroy(sa_t *sa)
   {
  +    /* argument sanity check(s) */
       if (sa == NULL)
           return SA_ERR_ARG;
  +
  +    /* kill underlying socket */
       sa_socket_kill(sa);
  +
  +    /* free object and sub-objects */
       if (sa->cpReadBuf != NULL)
           free(sa->cpReadBuf);
       if (sa->cpWriteBuf != NULL)
           free(sa->cpWriteBuf);
       free(sa);
  +
       return SA_OK;
   }
   
  +/* switch communication type of socket */
  +sa_rc_t sa_type(sa_t *sa, sa_type_t type)
  +{
  +    /* argument sanity check(s) */
  +    if (sa == NULL)
  +        return SA_ERR_ARG;
  +    if (!(type == SA_TYPE_STREAM || type == SA_TYPE_DATAGRAM))
  +        return SA_ERR_ARG;
  +
  +    /* kill underlying socket if type changes */
  +    if (sa->eType != type)
  +        sa_socket_kill(sa);
  +
  +    /* set new type */
  +    sa->eType = type;
  +
  +    return SA_OK;
  +}
  +
  +/* configure I/O timeout */
   sa_rc_t sa_timeout(sa_t *sa, long sec, long usec)
   {
  +    /* argument sanity check(s) */
       if (sa == NULL)
           return SA_ERR_ARG;
  -    if (sec == 0 && usec == 0) {
  -        sa->bTimeout = 0;
  -        sa->tvTimeout.tv_sec  = 0;
  -        sa->tvTimeout.tv_usec = 0;
  -    }
  -    else {
  -        sa->bTimeout = 1;
  -        sa->tvTimeout.tv_sec  = sec;
  -        sa->tvTimeout.tv_usec = usec;
  -    }
  +
  +    /* configure timeout */
  +    if (sec == 0 && usec == 0)
  +        sa->bTimeout = FALSE; /* deactivate timeout */
  +    else
  +        sa->bTimeout = TRUE;  /* activate timeout */
  +    sa->tvTimeout.tv_sec  = sec;
  +    sa->tvTimeout.tv_usec = usec;
  +
       return SA_OK;
   }
   
  +/* configure I/O buffers */
   sa_rc_t sa_buffers(sa_t *sa, size_t rsize, size_t wsize)
   {
       char *cp;
   
  +    /* argument sanity check(s) */
       if (sa == NULL)
           return SA_ERR_ARG;
  +
  +    /* make sure buffered were already flushed sufficiently */
       if (sa->nReadLen > rsize || sa->nWriteLen > wsize)
  -        return SA_ERR_ARG;
  -    if ((cp = (char *)realloc(sa->cpReadBuf, rsize)) == NULL)
  -        return SA_ERR_SYS;
  -    sa->cpReadBuf = cp;
  -    sa->nReadSize  = rsize;
  -    if ((cp = (char *)realloc(sa->cpWriteBuf, wsize)) == NULL)
  -        return SA_ERR_SYS;
  -    sa->cpWriteBuf = cp;
  -    sa->nWriteSize = wsize;
  +        return SA_ERR_USE;
  +
  +    /* configure read/incoming buffer */
  +    if (rsize > 0) {
  +        if (sa->cpReadBuf == NULL)
  +            cp = (char *)malloc(rsize);
  +        else
  +            cp = (char *)realloc(sa->cpReadBuf, rsize);
  +        if (cp == NULL)
  +            return SA_ERR_SYS;
  +        sa->cpReadBuf = cp;
  +        sa->nReadSize = rsize;
  +    }
  +    else {
  +        if (sa->cpReadBuf != NULL)
  +            free(sa->cpReadBuf);
  +        sa->cpReadBuf = NULL;
  +        sa->nReadSize = 0;
  +    }
  +
  +    /* configure write/outgoing buffer */
  +    if (wsize > 0) {
  +        if (sa->cpWriteBuf == NULL)
  +            cp = (char *)malloc(wsize);
  +        else
  +            cp = (char *)realloc(sa->cpWriteBuf, wsize);
  +        if (cp == NULL)
  +            return SA_ERR_SYS;
  +        sa->cpWriteBuf = cp;
  +        sa->nWriteSize = wsize;
  +    }
  +    else {
  +        if (sa->cpWriteBuf != NULL)
  +            free(sa->cpWriteBuf);
  +        sa->cpWriteBuf = NULL;
  +        sa->nWriteSize = 0;
  +    }
  +
       return SA_OK;
   }
   
  +/* bind socket to a local address */
   sa_rc_t sa_bind(sa_t *sa, sa_addr_t *laddr)
   {
       sa_rc_t rv;
  +    struct sockaddr_un *un;
   
  +    /* argument sanity check(s) */
       if (sa == NULL || laddr == NULL)
           return SA_ERR_ARG;
  -    if (sa->sSocket == -1)
  -        if ((rv = sa_socket_init(sa, laddr->nFamily, laddr->nProto)) != SA_OK)
  +
  +    /* lazy creation of underlying socket */
  +    if (sa->fdSocket == -1)
  +        if ((rv = sa_socket_init(sa, laddr->nFamily)) != SA_OK)
               return rv;
  -    if (bind(sa->sSocket, laddr->saBuf, laddr->slBuf) == -1)
  +
  +    /* remove a possibly existing old Unix Domain socket on filesystem */
  +    if (laddr->nFamily == AF_LOCAL) {
  +        un = (struct sockaddr_un *)((void *)laddr->saBuf);
  +        unlink(un->sun_path);
  +    }
  +
  +    /* perform bind operation on underlying socket */
  +    if (bind(sa->fdSocket, laddr->saBuf, laddr->slBuf) == -1)
           return SA_ERR_SYS;
  +
       return SA_OK;
   }
   
  +/* connect socket to a remote address */
   sa_rc_t sa_connect(sa_t *sa, sa_addr_t *raddr)
   {
       int flags, n, error;
  @@ -510,87 +762,106 @@
       socklen_t len;
       sa_rc_t rv;
   
  -    if (sa == NULL)
  +    /* argument sanity check(s) */
  +    if (sa == NULL || raddr == NULL)
           return SA_ERR_ARG;
   
  -    if (sa->sSocket == -1)
  -        if ((rv = sa_socket_init(sa, raddr->nFamily, raddr->nProto)) != SA_OK)
  -            return rv;
  +    /* connecting is only possible for stream communication */ 
  +    if (sa->eType != SA_TYPE_STREAM)
  +        return SA_ERR_USE;
   
  -    if (!sa->bTimeout)
  -        return connect(sa->sSocket, raddr->saBuf, raddr->slBuf);
  +    /* lazy creation of underlying socket */
  +    if (sa->fdSocket == -1)
  +        if ((rv = sa_socket_init(sa, raddr->nFamily)) != SA_OK)
  +            return rv;
   
  -    error = 0;
       rv = SA_OK;
  +    if (!sa->bTimeout) {
  +        /* standard/non-timeout-aware connect operation */
  +        if (connect(sa->fdSocket, raddr->saBuf, raddr->slBuf) < 0)
  +            rv = SA_ERR_SYS;
  +    }
  +    else {
  +        /* emulated/timeout-aware connect operation */
  +        error = 0;
   
  -    /* remember socket flags */
  -    flags = fcntl(sa->sSocket, F_GETFL, 0);
  +        /* temporarily switch underlying socket to non-blocking mode */
  +        flags = fcntl(sa->fdSocket, F_GETFL, 0);
  +        fcntl(sa->fdSocket, F_SETFL, flags|O_NONBLOCK);
  +
  +        /* perform the connect operation */
  +        if ((n = connect(sa->fdSocket, raddr->saBuf, raddr->slBuf)) < 0) {
  +            if (errno != EINPROGRESS) {
  +                error = errno;
  +                goto done;
  +            }
  +        }
   
  -    /* switch to non-blocking mode */
  -    fcntl(sa->sSocket, F_SETFL, flags|O_NONBLOCK);
  +        /* ok if connect completed immediately */
  +        if (n == 0)
  +            goto done; 
  +
  +        /* wait for read or write possibility */
  +        FD_ZERO(&rset);
  +        FD_ZERO(&wset);
  +        FD_SET(sa->fdSocket, &rset);
  +        FD_SET(sa->fdSocket, &wset);
  +        do {
  +            n = select(sa->fdSocket+1, &rset, &wset, NULL, &sa->tvTimeout);
  +        } while (n == -1 && errno == EINTR);
   
  -    /* perform the connect */
  -    if ((n = connect(sa->sSocket, raddr->saBuf, raddr->slBuf)) < 0) {
  -        if (errno != EINPROGRESS) {
  +        /* decide on return semantic */
  +        if (n < 0) {
               error = errno;
               goto done;
           }
  -    }
  -
  -    /* if connect completed immediately */
  -    if (n == 0)
  -        goto done; 
  -
  -    /* wait for read or write possibility */
  -    FD_ZERO(&rset);
  -    FD_ZERO(&wset);
  -    FD_SET(sa->sSocket, &rset);
  -    FD_SET(sa->sSocket, &wset);
  -    do {
  -        n = select(sa->sSocket+1, &rset, &wset, NULL, &sa->tvTimeout);
  -    } while (n == -1 && errno == EINTR);
  -
  -    /* decide on return semantic */
  -    if (n < 0) {
  -        error = errno;
  -        goto done;
  -    }
  -    else if (n == 0) {
  -        error = ETIMEDOUT;
  -        goto done;
  -    }
  +        else if (n == 0) {
  +            error = ETIMEDOUT;
  +            goto done;
  +        }
   
  -    /* fetch pending error */
  -    len = sizeof(error);
  -    if (getsockopt(sa->sSocket, SOL_SOCKET, SO_ERROR, &error, &len) < 0)
  -        error = errno;
  +        /* fetch pending error */
  +        len = sizeof(error);
  +        if (getsockopt(sa->fdSocket, SOL_SOCKET, SO_ERROR, &error, &len) < 0)
  +            error = errno;
   
  -    done:
  +        done:
   
  -    /* reset socket flags */
  -    fcntl(sa->sSocket, F_SETFL, flags);
  +        /* reset socket flags */
  +        fcntl(sa->fdSocket, F_SETFL, flags);
   
  -    /* optionally set errno */
  -    if (error != 0) {
  -        errno = error;
  -        rv = SA_ERR_SYS;
  +        /* optionally set errno */
  +        if (error != 0) {
  +            errno = error;
  +            rv = SA_ERR_SYS;
  +        }
       }
  -
       return rv;
   }
   
  +/* listen on socket for connections */
   sa_rc_t sa_listen(sa_t *sa, int backlog)
   {
  +    /* argument sanity check(s) */
       if (sa == NULL)
           return SA_ERR_ARG;
  -    if (sa->sSocket == -1)
  -        /* at least sa_bind() has to be already performed */
  +
  +    /* listening is only possible for stream communication */ 
  +    if (sa->eType != SA_TYPE_STREAM)
  +        return SA_ERR_USE;
  +
  +    /* at least sa_bind() has to be already performed */
  +    if (sa->fdSocket == -1)
           return SA_ERR_USE;
  -    if (listen(sa->sSocket, backlog) == -1)
  +
  +    /* perform listen operation on underlying socket */
  +    if (listen(sa->fdSocket, backlog) == -1)
           return SA_ERR_SYS;
  +
       return SA_OK;
   }
   
  +/* accept a connection on socket */
   sa_rc_t sa_accept(sa_t *sa, sa_addr_t **caddr, sa_t **csa)
   {
       sa_rc_t rv;
  @@ -605,35 +876,55 @@
       socklen_t sa_len;
       int s;
   
  -    if (sa == NULL)
  +    /* argument sanity check(s) */
  +    if (sa == NULL || caddr == NULL || csa == NULL)
           return SA_ERR_ARG;
  -    if (sa->sSocket == -1)
  -        /* at least sa_listen() has to be already performed */
  +
  +    /* accepting connections is only possible for stream communication */ 
  +    if (sa->eType != SA_TYPE_STREAM)
           return SA_ERR_USE;
  +
  +    /* at least sa_listen() has to be already performed */
  +    if (sa->fdSocket == -1)
  +        return SA_ERR_USE;
  +
  +    /* if timeout is enabled, perform a smart-blocking wait */
       if (sa->bTimeout) {
           FD_ZERO(&fds);
  -        FD_SET(sa->sSocket, &fds);
  +        FD_SET(sa->fdSocket, &fds);
           do {
  -            n = select(sa->sSocket+1, &fds, NULL, NULL, &sa->tvTimeout);
  +            n = select(sa->fdSocket+1, &fds, NULL, NULL, &sa->tvTimeout);
           } while (n == -1 && errno == EINTR);
           if (n == 0) 
               errno = ETIMEDOUT;
           if (n <= 0)
               return SA_ERR_SYS;
       }
  +
  +    /* perform accept operation on underlying socket */
       sa_len = sizeof(sa_buf);
  -    if ((s = accept(sa->sSocket, (struct sockaddr *)&sa_buf, &sa_len)) == -1)
  +    if ((s = accept(sa->fdSocket, (struct sockaddr *)&sa_buf, &sa_len)) == -1)
           return SA_ERR_SYS;
  -    if ((rv = sa_s2a(caddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK)
  +
  +    /* create result address object */
  +    if ((rv = sa_addr_create(caddr)) != SA_OK)
  +        return rv;
  +    if ((rv = sa_addr_s2a(*caddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK) {
  +        sa_addr_destroy(*caddr);
           return rv;
  +    }
  +
  +    /* create result socket object */
       if ((rv = sa_create(csa)) != SA_OK) {
  -        free(*caddr);
  +        sa_addr_destroy(*caddr);
           return rv;
       }
  -    (*csa)->sSocket = s;
  +    (*csa)->fdSocket = s;
  +
       return SA_OK;
   }
   
  +/* determine remote address */
   sa_rc_t sa_getremote(sa_t *sa, sa_addr_t **raddr)
   {
       sa_rc_t rv;
  @@ -645,16 +936,35 @@
       } sa_buf;
       socklen_t sa_len;
   
  -    if (sa == NULL)
  +    /* argument sanity check(s) */
  +    if (sa == NULL || raddr == NULL)
           return SA_ERR_ARG;
  +
  +    /* peers exist only for stream communication */ 
  +    if (sa->eType != SA_TYPE_STREAM)
  +        return SA_ERR_USE;
  +
  +    /* at least sa_connect() or sa_accept() has to be already performed */
  +    if (sa->fdSocket == -1)
  +        return SA_ERR_USE;
  +
  +    /* determine remote address of underlying socket */
       sa_len = sizeof(sa_buf);
  -    if (getpeername(sa->sSocket, (struct sockaddr *)&sa_buf, &sa_len) < 0)
  +    if (getpeername(sa->fdSocket, (struct sockaddr *)&sa_buf, &sa_len) < 0)
           return SA_ERR_SYS;
  -    if ((rv = sa_s2a(raddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK)
  +
  +    /* create result address object */
  +    if ((rv = sa_addr_create(raddr)) != SA_OK)
           return rv;
  +    if ((rv = sa_addr_s2a(*raddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK) {
  +        sa_addr_destroy(*raddr);
  +        return rv;
  +    }
  +
       return SA_OK;
   }
   
  +/* determine local address */
   sa_rc_t sa_getlocal(sa_t *sa, sa_addr_t **laddr)
   {
       sa_rc_t rv;
  @@ -666,147 +976,187 @@
       } sa_buf;
       socklen_t sa_len;
   
  -    if (sa == NULL)
  +    /* argument sanity check(s) */
  +    if (sa == NULL || laddr == NULL)
           return SA_ERR_ARG;
  +
  +    /* at least sa_bind() has to be already performed */
  +    if (sa->fdSocket == -1)
  +        return SA_ERR_USE;
  +
  +    /* determine local address of underlying socket */
       sa_len = sizeof(sa_buf);
  -    if (getsockname(sa->sSocket, (struct sockaddr *)&sa_buf, &sa_len) < 0)
  +    if (getsockname(sa->fdSocket, (struct sockaddr *)&sa_buf, &sa_len) < 0)
           return SA_ERR_SYS;
  -    if ((rv = sa_s2a(laddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK)
  +
  +    /* create result address object */
  +    if ((rv = sa_addr_create(laddr)) != SA_OK)
  +        return rv;
  +    if ((rv = sa_addr_s2a(*laddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK) {
  +        sa_addr_destroy(*laddr);
           return rv;
  +    }
  +
       return SA_OK;
   }
   
  +/* peek at underlying socket */
   sa_rc_t sa_getfd(sa_t *sa, int *fd)
   {
  +    /* argument sanity check(s) */
       if (sa == NULL || fd == NULL)
           return SA_ERR_ARG;
  -    *fd = sa->sSocket;
  +
  +    /* if still no socket exists, say this explicitly */
  +    if (sa->fdSocket == -1)
  +        return SA_ERR_USE;
  +
  +    /* pass socket to caller */
  +    *fd = sa->fdSocket;
  +
       return SA_OK;
   }
   
  +/* internal raw read operation */
   static int sa_read_raw(sa_t *sa, char *cpBuf, int nBufLen)
   {
       int rv;
       fd_set fds;
   
  +    /* if timeout is enabled, perform explicit/smart blocking instead 
  +       of implicitly/hard blocking in the read(2) system call */
       if (sa->bTimeout) {
           FD_ZERO(&fds);
  -        FD_SET(sa->sSocket, &fds);
  +        FD_SET(sa->fdSocket, &fds);
           do {
  -            rv = select(sa->sSocket+1, &fds, NULL, NULL, &sa->tvTimeout);
  +            rv = select(sa->fdSocket+1, &fds, NULL, NULL, &sa->tvTimeout);
           } while (rv == -1 && errno == EINTR);
           if (rv == 0) {
               errno = ETIMEDOUT;
               return -1;
           }
       }
  +
  +    /* perform read operation on underlying socket */
       do {
  -        rv = read(sa->sSocket, cpBuf, nBufLen);
  +        rv = read(sa->fdSocket, cpBuf, nBufLen);
       } while (rv == -1 && errno == EINTR);
  +
       return rv;
   }
   
  +/* read data from socket */
   sa_rc_t sa_read(sa_t *sa, char *cpBuf, size_t nBufReq, size_t *nBufRes)
   {
       int n;
  -    int rv;
  +    sa_rc_t rv;
       size_t res;
   
  +    /* argument sanity check(s) */
       if (sa == NULL || cpBuf == NULL || nBufReq == 0)
  -        return 0;
  -    
  -    /* flush write buffer */
  +        return SA_ERR_ARG;
  +
  +    /* reading is only possible for stream communication */ 
  +    if (sa->eType != SA_TYPE_STREAM)
  +        return SA_ERR_USE;
  +
  +    /* at least a connection has to exist */
  +    if (sa->fdSocket == -1)
  +        return SA_ERR_USE;
  +
  +    /* trigger a write buffer flush */
       if (sa->nWriteLen > 0)
           sa_flush(sa);
  +
  +    /* perform read operation */
       rv = SA_OK;
  -    res = 0;
  -    while (1) {
  -        if (nBufReq <= sa->nReadLen) {
  -            /* buffer holds enough data, so use this */
  -            memmove(cpBuf, sa->cpReadBuf, nBufReq);
  -            memmove(sa->cpReadBuf, sa->cpReadBuf+nBufReq, sa->nReadLen-nBufReq);
  -            sa->nReadLen -= nBufReq;
  -            res += nBufReq;
  -        }
  -        else {
  -            if (sa->nReadLen > 0) {
  -                /* fetch already existing buffer contents as a start */
  -                memmove(cpBuf, sa->cpReadBuf, sa->nReadLen);
  -                nBufReq -= sa->nReadLen;
  -                cpBuf   += sa->nReadLen;
  -                res     += sa->nReadLen;
  -                sa->nReadLen = 0;
  -            }
  -            if (nBufReq >= sa->nReadSize) {
  -                /* buffer is too small at all, so read directly */
  -                n = sa_read_raw(sa, cpBuf, nBufReq);
  -                if (n > 0)
  -                    res += n;
  -                else if (n <= 0)
  -                    rv = SA_ERR_SYS;
  +    if (sa->nReadSize == 0) {
  +        /* user-space unbuffered I/O */
  +        res = sa_read_raw(sa, cpBuf, nBufReq);
  +        if (res == 0)
  +            rv = SA_ERR_EOF;
  +        else if (res < 0)
  +            rv = SA_ERR_SYS;
  +    }
  +    else {
  +        /* user-space buffered I/O */
  +        res = 0;
  +        while (1) {
  +            if (nBufReq <= sa->nReadLen) {
  +                /* buffer holds enough data, so just use this */
  +                memmove(cpBuf, sa->cpReadBuf, nBufReq);
  +                memmove(sa->cpReadBuf, sa->cpReadBuf+nBufReq, sa->nReadLen-nBufReq);
  +                sa->nReadLen -= nBufReq;
  +                res += nBufReq;
               }
               else {
  -                /* fill buffer with new data */
  -                n = sa_read_raw(sa, sa->cpReadBuf, sa->nReadSize);
  -                if (n <= 0)
  -                    rv = SA_ERR_SYS;
  +                if (sa->nReadLen > 0) {
  +                    /* fetch already existing buffer contents as a start */
  +                    memmove(cpBuf, sa->cpReadBuf, sa->nReadLen);
  +                    nBufReq -= sa->nReadLen;
  +                    cpBuf   += sa->nReadLen;
  +                    res     += sa->nReadLen;
  +                    sa->nReadLen = 0;
  +                }
  +                if (nBufReq >= sa->nReadSize) {
  +                    /* buffer is too small at all, so read directly */
  +                    n = sa_read_raw(sa, cpBuf, nBufReq);
  +                    if (n > 0)
  +                        res += n;
  +                    else if (n == 0)
  +                        rv = (res == 0 ? SA_ERR_EOF : SA_OK);
  +                    else if (n < 0)
  +                        rv = (res == 0 ? SA_ERR_SYS : SA_OK);
  +                }
                   else {
  -                    sa->nReadLen = n;
  -                    continue;
  +                    /* fill buffer with new data */
  +                    n = sa_read_raw(sa, sa->cpReadBuf, sa->nReadSize);
  +                    if (n < 0)
  +                        /* error on this read, but perhaps ok as a whole */
  +                        rv = (res == 0 ? SA_ERR_SYS : SA_OK);
  +                    if (n == 0)
  +                        /* EOF on this read, but perhaps ok as a whole */
  +                        rv = (res == 0 ? SA_ERR_EOF : SA_OK);
  +                    else {
  +                        sa->nReadLen = n;
  +                        continue; /* REPEAT OPERATION! */
  +                    }
                   }
               }
  +            break;
           }
  -        break;
       }
  +
  +    /* pass number of actually read bytes to caller */ 
       if (nBufRes != NULL)
           *nBufRes = res;
  -    return rv;
  -}
   
  -sa_rc_t sa_readfrom(sa_t *sa, char *buf, size_t buflen, size_t *bufdone, sa_addr_t **raddr)
  -{
  -    sa_rc_t rv;
  -    union {
  -        struct sockaddr_in sa4;
  -#ifdef AF_INET6
  -        struct sockaddr_in6 sa6;
  -#endif
  -    } sa_buf;
  -    socklen_t sa_len;
  -    size_t n;
  -    fd_set fds;
  -
  -    if (sa == NULL || buf == NULL || buflen == 0 || raddr == NULL)
  -        return SA_ERR_ARG;
  -    if (sa->bTimeout) {
  -        FD_ZERO(&fds);
  -        FD_SET(sa->sSocket, &fds);
  -        do {
  -            n = select(sa->sSocket+1, &fds, NULL, NULL, &sa->tvTimeout);
  -        } while (n == -1 && errno == EINTR);
  -        if (n == 0) 
  -            errno = ETIMEDOUT;
  -        if (n <= 0)
  -            return SA_ERR_SYS;
  -    }
  -    sa_len = sizeof(sa_buf);
  -    if ((n = recvfrom(sa->sSocket, buf, buflen, 0, (struct sockaddr *)&sa_buf, &sa_len)) == -1)
  -        return SA_ERR_SYS;
  -    if ((rv = sa_s2a(raddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK)
  -        return rv;
  -    if (bufdone != NULL)
  -        *bufdone = n;
  -    return SA_OK;
  +    return rv;
   }
   
  -sa_rc_t sa_readline(sa_t *sa, char *cpBuf, size_t nBufReq, size_t *nBufRes)
  +/* read data from socket until [CR]LF (convinience function) */
  +sa_rc_t sa_readln(sa_t *sa, char *cpBuf, size_t nBufReq, size_t *nBufRes)
   {
       char c;
       size_t n;
       size_t res;
   
  -    if (sa == NULL)
  +    /* argument sanity check(s) */
  +    if (sa == NULL || cpBuf == NULL || nBufReq == 0)
           return SA_ERR_ARG;
  +
  +    /* reading is only possible for stream communication */ 
  +    if (sa->eType != SA_TYPE_STREAM)
  +        return SA_ERR_USE;
  +
  +    /* at least a connection has to exist */
  +    if (sa->fdSocket == -1)
  +        return SA_ERR_USE;
  +
  +    /* we just perform a plain sa_read() per character, because if
  +       buffers are enabled, this is not as stupid as it looks at the first
  +       hand and if buffers are disabled, there is no better solution
  +       anyway. */
       res = 0;
       while (res < (nBufReq-1)) {
           sa_read(sa, &c, 1, &n);
  @@ -817,131 +1167,187 @@
               break;
       }
       cpBuf[res] = '\0';
  +
  +    /* pass number of actually read characters to caller */
       if (nBufRes != NULL)
           *nBufRes = res;
  +
       return SA_OK;
   }
   
  +/* internal raw write operation */
   static int sa_write_raw(sa_t *sa, const char *cpBuf, int nBufLen)
   {
       int rv;
       fd_set fds;
   
  +    /* if timeout is enabled, perform explicit/smart blocking instead 
  +       of implicitly/hard blocking in the write(2) system call */
       if (sa->bTimeout) {
           FD_ZERO(&fds);
  -        FD_SET(sa->sSocket, &fds);
  +        FD_SET(sa->fdSocket, &fds);
           do {
  -            rv = select(sa->sSocket+1, NULL, &fds, NULL, &sa->tvTimeout);
  +            rv = select(sa->fdSocket+1, NULL, &fds, NULL, &sa->tvTimeout);
           } while (rv == -1 && errno == EINTR);
           if (rv == 0) {
               errno = ETIMEDOUT;
               return -1;
           }
       }
  +
  +    /* perform write operation on underlying socket */
       do {
  -        rv = write(sa->sSocket, cpBuf, nBufLen);
  +        rv = write(sa->fdSocket, cpBuf, nBufLen);
       } while (rv == -1 && errno == EINTR);
  +
       return rv;
   }
   
  +/* write data to socket */
   sa_rc_t sa_write(sa_t *sa, const char *cpBuf, size_t nBufReq, size_t *nBufRes)
   {
       size_t n;
       size_t res;
  +    sa_rc_t rv;
   
  -    if (sa == NULL)
  +    /* argument sanity check(s) */
  +    if (sa == NULL || cpBuf == NULL || nBufReq == 0)
           return SA_ERR_ARG;
   
  -    if (nBufReq > (sa->nWriteSize - sa->nWriteLen)) {
  -        /* not enough space in buffer, so flush buffer */
  -        sa_flush(sa);
  -    }
  -    res = 0;
  -    if (nBufReq >= sa->nWriteSize) {
  -        /* buffer too small at all, so write immediately */
  -        while (nBufReq > 0) {
  -            n = sa_write_raw(sa, cpBuf, nBufReq);
  -            if (n <= 0)
  -                break;
  -            nBufReq  -= n;
  -            cpBuf    += n;
  -            res      += n;
  -        }
  +    /* writing is only possible for stream communication */ 
  +    if (sa->eType != SA_TYPE_STREAM)
  +        return SA_ERR_USE;
  +
  +    /* at least a connection has to exist */
  +    if (sa->fdSocket == -1)
  +        return SA_ERR_USE;
  +
  +    rv = SA_OK;
  +    if (sa->nWriteSize == 0) {
  +        /* user-space unbuffered I/O */
  +        res = sa_write_raw(sa, cpBuf, nBufReq);
  +        if (res < 0)
  +            rv = SA_ERR_SYS;
       }
       else {
  -        /* (again) enough sprace in buffer, so store data */
  -        memmove(sa->cpWriteBuf+sa->nWriteLen, cpBuf, nBufReq);
  -        sa->nWriteLen += nBufReq;
  -        res = nBufReq;
  +        /* user-space buffered I/O */
  +        if (nBufReq > (sa->nWriteSize - sa->nWriteLen)) {
  +            /* not enough space in buffer, so flush buffer first */
  +            sa_flush(sa);
  +        }
  +        res = 0;
  +        if (nBufReq >= sa->nWriteSize) {
  +            /* buffer too small at all, so write immediately */
  +            while (nBufReq > 0) {
  +                n = sa_write_raw(sa, cpBuf, nBufReq);
  +                if (n < 0)
  +                    rv = (res == 0 ? SA_ERR_SYS : SA_OK);
  +                if (n <= 0)
  +                    break;
  +                nBufReq  -= n;
  +                cpBuf    += n;
  +                res      += n;
  +            }
  +        }
  +        else {
  +            /* (again) enough sprace in buffer, so store data */
  +            memmove(sa->cpWriteBuf+sa->nWriteLen, cpBuf, nBufReq);
  +            sa->nWriteLen += nBufReq;
  +            res = nBufReq;
  +        }
       }
  +
  +    /* pass number of actually written bytes to caller */
       if (nBufRes != NULL)
           *nBufRes = res;
  -    return SA_OK;
  -}
  -
  -sa_rc_t sa_writeto(sa_t *sa, const char *buf, size_t buflen, size_t *bufdone, sa_addr_t *raddr)
  -{
  -    size_t n;
  -    fd_set fds;
   
  -    if (sa == NULL || buf == NULL || buflen == 0 || raddr == NULL)
  -        return SA_ERR_ARG;
  -    if (sa->bTimeout) {
  -        FD_ZERO(&fds);
  -        FD_SET(sa->sSocket, &fds);
  -        do {
  -            n = select(sa->sSocket+1, NULL, &fds, NULL, &sa->tvTimeout);
  -        } while (n == -1 && errno == EINTR);
  -        if (n == 0) 
  -            errno = ETIMEDOUT;
  -        if (n <= 0)
  -            return SA_ERR_SYS;
  -    }
  -    if ((n = sendto(sa->sSocket, buf, buflen, 0, raddr->saBuf, raddr->slBuf)) == -1)
  -        return SA_ERR_SYS;
  -    if (bufdone != NULL)
  -        *bufdone = n;
  -    return SA_OK;
  +    return rv;
   }
   
  -sa_rc_t sa_printf(sa_t *sa, const char *cpFmt, ...)
  +/* write formatted string to socket (convinience function) */
  +sa_rc_t sa_writef(sa_t *sa, const char *cpFmt, ...)
   {
       va_list ap;
       size_t n;
       char caBuf[1024];
  +    sa_rc_t rv;
   
  -    if (sa == NULL)
  +    /* argument sanity check(s) */
  +    if (sa == NULL || cpFmt == NULL)
           return SA_ERR_ARG;
  +
  +    /* writing is only possible for stream communication */ 
  +    if (sa->eType != SA_TYPE_STREAM)
  +        return SA_ERR_USE;
  +
  +    /* at least a connection has to exist */
  +    if (sa->fdSocket == -1)
  +        return SA_ERR_USE;
  +
  +    /* format string into temporary buffer */
       va_start(ap, cpFmt);
  -    n = sa_vsnprintf(caBuf, sizeof(caBuf), cpFmt, ap);
  -    sa_write(sa, caBuf, n, &n);
  +    n = sa_mvsnprintf(caBuf, sizeof(caBuf), cpFmt, ap);
       va_end(ap);
  -    return SA_OK;
  +
  +    /* write result buffer to socket */
  +    rv = sa_write(sa, caBuf, n, &n);
  +
  +    return rv;
   }
   
  +/* flush write/outgoing I/O buffer */
   sa_rc_t sa_flush(sa_t *sa)
   {
       size_t n;
  +    sa_rc_t rv;
   
  +    /* argument sanity check(s) */
       if (sa == NULL)
           return SA_ERR_ARG;
  -    while (sa->nWriteLen > 0) {
  -        n = sa_write_raw(sa, sa->cpWriteBuf, sa->nWriteLen);
  -        if (n <= 0)
  -            break;
  -        memmove(sa->cpWriteBuf, sa->cpWriteBuf+n, sa->nWriteLen-n);
  -        sa->nWriteLen -= n;
  +
  +    /* flushing is only possible for stream communication */ 
  +    if (sa->eType != SA_TYPE_STREAM)
  +        return SA_ERR_USE;
  +
  +    /* at least a connection has to exist */
  +    if (sa->fdSocket == -1)
  +        return SA_ERR_USE;
  +
  +    /* try to flush buffer */
  +    rv = SA_OK;
  +    if (sa->nWriteSize > 0) {
  +        while (sa->nWriteLen > 0) {
  +            n = sa_write_raw(sa, sa->cpWriteBuf, sa->nWriteLen);
  +            if (n < 0)
  +                rv = SA_ERR_SYS;
  +            if (n <= 0)
  +                break;
  +            memmove(sa->cpWriteBuf, sa->cpWriteBuf+n, sa->nWriteLen-n);
  +            sa->nWriteLen -= n;
  +        }
  +        sa->nWriteLen = 0;
       }
  -    sa->nWriteLen = 0;
  -    return SA_OK;
  +    return rv;
   }
   
  +/* shutdown a socket connection */
   sa_rc_t sa_shutdown(sa_t *sa, char *flags)
   {
       int how;
   
  +    /* argument sanity check(s) */
       if (sa == NULL || flags == NULL)
           return SA_ERR_ARG;
  +
  +    /* shutdown is only possible for stream communication */ 
  +    if (sa->eType != SA_TYPE_STREAM)
  +        return SA_ERR_USE;
  +
  +    /* at least a connection has to exist */
  +    if (sa->fdSocket == -1)
  +        return SA_ERR_USE;
  +
  +    /* determine flags for shutdown(2) */
       how = 0;
       if (strcmp(flags, "r") == 0)
           how = SHUT_RD;
  @@ -949,8 +1355,119 @@
           how = SHUT_WR;
       else if (strcmp(flags, "rw") == 0)
           how = SHUT_RDWR;
  -    if (shutdown(sa->sSocket, how) == -1)
  +    else
  +        return SA_ERR_ARG;
  +
  +    /* perform shutdown operation on underlying socket */
  +    if (shutdown(sa->fdSocket, how) == -1)
  +        return SA_ERR_SYS;
  +
  +    return SA_OK;
  +}
  +
  +/* receive data via socket */
  +sa_rc_t sa_recv(sa_t *sa, char *buf, size_t buflen, size_t *bufdone, sa_addr_t **raddr)
  +{
  +    sa_rc_t rv;
  +    union {
  +        struct sockaddr_in sa4;
  +#ifdef AF_INET6
  +        struct sockaddr_in6 sa6;
  +#endif
  +    } sa_buf;
  +    socklen_t sa_len;
  +    size_t n;
  +    fd_set fds;
  +
  +    /* argument sanity check(s) */
  +    if (sa == NULL || buf == NULL || buflen == 0 || raddr == NULL)
  +        return SA_ERR_ARG;
  +
  +    /* receiving is only possible for datagram communication */ 
  +    if (sa->eType != SA_TYPE_DATAGRAM)
  +        return SA_ERR_USE;
  +
  +    /* at least a sa_bind() has to be performed */
  +    if (sa->fdSocket == -1)
  +        return SA_ERR_USE;
  +
  +    /* if timeout is enabled, perform explicit/smart blocking instead 
  +       of implicitly/hard blocking in the recvfrom(2) system call */
  +    if (sa->bTimeout) {
  +        FD_ZERO(&fds);
  +        FD_SET(sa->fdSocket, &fds);
  +        do {
  +            n = select(sa->fdSocket+1, &fds, NULL, NULL, &sa->tvTimeout);
  +        } while (n == -1 && errno == EINTR);
  +        if (n == 0) 
  +            errno = ETIMEDOUT;
  +        if (n <= 0)
  +            return SA_ERR_SYS;
  +    }
  +
  +    /* perform receive operation on underlying socket */
  +    sa_len = sizeof(sa_buf);
  +    if ((n = recvfrom(sa->fdSocket, buf, buflen, 0, 
  +                      (struct sockaddr *)&sa_buf, &sa_len)) == -1)
  +        return SA_ERR_SYS;
  +
  +    /* create result address object */
  +    if ((rv = sa_addr_create(raddr)) != SA_OK)
  +        return rv;
  +    if ((rv = sa_addr_s2a(*raddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK) {
  +        sa_addr_destroy(*raddr);
  +        return rv;
  +    }
  +
  +    /* pass actual number of received bytes to caller */
  +    if (bufdone != NULL)
  +        *bufdone = n;
  +
  +    return SA_OK;
  +}
  +
  +/* send data via socket */
  +sa_rc_t sa_send(sa_t *sa, const char *buf, size_t buflen, size_t *bufdone, sa_addr_t *raddr)
  +{
  +    size_t n;
  +    fd_set fds;
  +    sa_rc_t rv;
  +
  +    /* argument sanity check(s) */
  +    if (sa == NULL || buf == NULL || buflen == 0 || raddr == NULL)
  +        return SA_ERR_ARG;
  +
  +    /* sending is only possible for datagram communication */ 
  +    if (sa->eType != SA_TYPE_DATAGRAM)
  +        return SA_ERR_USE;
  +
  +    /* lazy creation of underlying socket */
  +    if (sa->fdSocket == -1)
  +        if ((rv = sa_socket_init(sa, raddr->nFamily)) != SA_OK)
  +            return rv;
  +
  +    /* if timeout is enabled, perform explicit/smart blocking instead 
  +       of implicitly/hard blocking in the sendto(2) system call */
  +    if (sa->bTimeout) {
  +        FD_ZERO(&fds);
  +        FD_SET(sa->fdSocket, &fds);
  +        do {
  +            n = select(sa->fdSocket+1, NULL, &fds, NULL, &sa->tvTimeout);
  +        } while (n == -1 && errno == EINTR);
  +        if (n == 0) 
  +            errno = ETIMEDOUT;
  +        if (n <= 0)
  +            return SA_ERR_SYS;
  +    }
  +
  +    /* perform send operation on underlying socket */
  +    if ((n = sendto(sa->fdSocket, buf, buflen, 0, raddr->saBuf, raddr->slBuf)) == -1)
           return SA_ERR_SYS;
  +
  +    /* pass actual number of sent bytes to caller */
  +    if (bufdone != NULL)
  +        *bufdone = n;
  +
       return SA_OK;
   }
   
  Index: ossp-pkg/l2/l2_ut_sa.h
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 l2_ut_sa.h
  --- ossp-pkg/l2/l2_ut_sa.h	2001/10/02 14:11:51	1.8
  +++ ossp-pkg/l2/l2_ut_sa.h	2001/10/06 14:33:09	1.9
  @@ -30,7 +30,9 @@
   #ifndef __SA_H__
   #define __SA_H__
   
  -/* system definitions of "size_t", "socklen_t", "struct sockaddr" */
  +#define SA_PREFIX l2_util_
  +
  +/* system definitions of "size_t", "socklen_t", "struct sockaddr *" */
   #include <string.h>
   #include <sys/types.h>
   #include <sys/socket.h>
  @@ -44,34 +46,37 @@
   #define __SA_CONCAT(x) x
   #define SA_CONCAT(x,y) __SA_CONCAT(x)y
   #endif
  -#define sa_addr_st   SA_CONCAT(SA_PREFIX,sa_addr_st)
  -#define sa_addr_t    SA_CONCAT(SA_PREFIX,sa_addr_t)
  -#define sa_rc_t      SA_CONCAT(SA_PREFIX,sa_rc_t)
  -#define sa_st        SA_CONCAT(SA_PREFIX,sa_st)
  -#define sa_t         SA_CONCAT(SA_PREFIX,sa_t)
  -#define sa_u2a       SA_CONCAT(SA_PREFIX,sa_u2a)
  -#define sa_s2a       SA_CONCAT(SA_PREFIX,sa_s2a)
  -#define sa_a2u       SA_CONCAT(SA_PREFIX,sa_a2u)
  -#define sa_a2s       SA_CONCAT(SA_PREFIX,sa_a2s)
  -#define sa_create    SA_CONCAT(SA_PREFIX,sa_create)
  -#define sa_destroy   SA_CONCAT(SA_PREFIX,sa_destroy)
  -#define sa_timeout   SA_CONCAT(SA_PREFIX,sa_timeout)
  -#define sa_buffers   SA_CONCAT(SA_PREFIX,sa_buffers)
  -#define sa_bind      SA_CONCAT(SA_PREFIX,sa_bind)
  -#define sa_connect   SA_CONCAT(SA_PREFIX,sa_connect)
  -#define sa_listen    SA_CONCAT(SA_PREFIX,sa_listen)
  -#define sa_accept    SA_CONCAT(SA_PREFIX,sa_accept)
  -#define sa_getremote SA_CONCAT(SA_PREFIX,sa_getremote)
  -#define sa_getlocal  SA_CONCAT(SA_PREFIX,sa_getlocal)
  -#define sa_getfd     SA_CONCAT(SA_PREFIX,sa_getfd)
  -#define sa_shutdown  SA_CONCAT(SA_PREFIX,sa_shutdown)
  -#define sa_read      SA_CONCAT(SA_PREFIX,sa_read)
  -#define sa_readfrom  SA_CONCAT(SA_PREFIX,sa_readfrom)
  -#define sa_readline  SA_CONCAT(SA_PREFIX,sa_readline)
  -#define sa_write     SA_CONCAT(SA_PREFIX,sa_write)
  -#define sa_writeto   SA_CONCAT(SA_PREFIX,sa_writeto)
  -#define sa_printf    SA_CONCAT(SA_PREFIX,sa_printf)
  -#define sa_flush     SA_CONCAT(SA_PREFIX,sa_flush)
  +#define sa_addr_st      SA_CONCAT(SA_PREFIX,sa_addr_st)
  +#define sa_addr_t       SA_CONCAT(SA_PREFIX,sa_addr_t)
  +#define sa_rc_t         SA_CONCAT(SA_PREFIX,sa_rc_t)
  +#define sa_st           SA_CONCAT(SA_PREFIX,sa_st)
  +#define sa_t            SA_CONCAT(SA_PREFIX,sa_t)
  +#define sa_addr_create  SA_CONCAT(SA_PREFIX,sa_addr_create)
  +#define sa_addr_destroy SA_CONCAT(SA_PREFIX,sa_addr_destroy)
  +#define sa_addr_u2a     SA_CONCAT(SA_PREFIX,sa_addr_u2a)
  +#define sa_addr_s2a     SA_CONCAT(SA_PREFIX,sa_addr_s2a)
  +#define sa_addr_a2u     SA_CONCAT(SA_PREFIX,sa_addr_a2u)
  +#define sa_addr_a2s     SA_CONCAT(SA_PREFIX,sa_addr_a2s)
  +#define sa_create       SA_CONCAT(SA_PREFIX,sa_create)
  +#define sa_destroy      SA_CONCAT(SA_PREFIX,sa_destroy)
  +#define sa_type         SA_CONCAT(SA_PREFIX,sa_type)
  +#define sa_timeout      SA_CONCAT(SA_PREFIX,sa_timeout)
  +#define sa_buffers      SA_CONCAT(SA_PREFIX,sa_buffers)
  +#define sa_bind         SA_CONCAT(SA_PREFIX,sa_bind)
  +#define sa_connect      SA_CONCAT(SA_PREFIX,sa_connect)
  +#define sa_listen       SA_CONCAT(SA_PREFIX,sa_listen)
  +#define sa_accept       SA_CONCAT(SA_PREFIX,sa_accept)
  +#define sa_getremote    SA_CONCAT(SA_PREFIX,sa_getremote)
  +#define sa_getlocal     SA_CONCAT(SA_PREFIX,sa_getlocal)
  +#define sa_getfd        SA_CONCAT(SA_PREFIX,sa_getfd)
  +#define sa_shutdown     SA_CONCAT(SA_PREFIX,sa_shutdown)
  +#define sa_read         SA_CONCAT(SA_PREFIX,sa_read)
  +#define sa_readln       SA_CONCAT(SA_PREFIX,sa_readln)
  +#define sa_write        SA_CONCAT(SA_PREFIX,sa_write)
  +#define sa_writef       SA_CONCAT(SA_PREFIX,sa_writef)
  +#define sa_flush        SA_CONCAT(SA_PREFIX,sa_flush)
  +#define sa_recv         SA_CONCAT(SA_PREFIX,sa_recv)
  +#define sa_send         SA_CONCAT(SA_PREFIX,sa_send)
   #endif
   
   /* socket address abstraction object type */
  @@ -82,48 +87,62 @@
   struct sa_st;
   typedef struct sa_st sa_t;
   
  +/* socket connection types */
  +typedef enum {
  +    SA_TYPE_STREAM,
  +    SA_TYPE_DATAGRAM
  +} sa_type_t;
  +
   /* return codes */
   typedef enum {
  -    SA_OK,
  -    SA_ERR_ARG,
  -    SA_ERR_USE,
  -    SA_ERR_MEM,
  -    SA_ERR_SYS,
  -    SA_ERR_INT
  +    SA_OK,      /* everything ok */
  +    SA_ERR_ARG, /* invalid argument (wrong parameter) */
  +    SA_ERR_USE, /* invalid use (wrong context) */
  +    SA_ERR_MEM, /* out of memory */
  +    SA_ERR_SYS, /* system error (see errno) */
  +    SA_ERR_EOF, /* end of file/socket communication */
  +    SA_ERR_INT  /* internal error */
   } sa_rc_t;
   
  +/* address object operations */
  +sa_rc_t sa_addr_create  (sa_addr_t **saa);
  +sa_rc_t sa_addr_destroy (sa_addr_t *saa);
  +
   /* address operations */
  -sa_rc_t sa_u2a      (sa_addr_t **saa, const char *uri, ...);
  -sa_rc_t sa_s2a      (sa_addr_t **saa, const struct sockaddr *sabuf, socklen_t salen);
  -sa_rc_t sa_a2u      (const sa_addr_t *saa, char **uri);
  -sa_rc_t sa_a2s      (const sa_addr_t *saa, struct sockaddr **sabuf, socklen_t *salen);
  -
  -/* object operations */
  -sa_rc_t sa_create   (sa_t **sa);
  -sa_rc_t sa_destroy  (sa_t *sa);
  -
  -/* parameter operations */
  -sa_rc_t sa_timeout  (sa_t *sa, long sec, long usec);
  -sa_rc_t sa_buffers  (sa_t *sa, size_t rsize, size_t wsize);
  -
  -/* connection operations */
  -sa_rc_t sa_bind     (sa_t *sa, sa_addr_t *laddr);
  -sa_rc_t sa_connect  (sa_t *sa, sa_addr_t *raddr);
  -sa_rc_t sa_listen   (sa_t *sa, int backlog);
  -sa_rc_t sa_accept   (sa_t *sa, sa_addr_t **caddr, sa_t **csa);
  -sa_rc_t sa_getremote(sa_t *sa, sa_addr_t **raddr);
  -sa_rc_t sa_getlocal (sa_t *sa, sa_addr_t **laddr);
  -sa_rc_t sa_getfd    (sa_t *sa, int *fd);
  -sa_rc_t sa_shutdown (sa_t *sa, char *flags);
  -
  -/* input/output operations */
  -sa_rc_t sa_read     (sa_t *sa, char *buf, size_t buflen, size_t *bufdone);
  -sa_rc_t sa_readfrom (sa_t *sa, char *buf, size_t buflen, size_t *bufdone, sa_addr_t **raddr);
  -sa_rc_t sa_readline (sa_t *sa, char *buf, size_t buflen, size_t *bufdone);
  -sa_rc_t sa_write    (sa_t *sa, const char *buf, size_t buflen, size_t *bufdone);
  -sa_rc_t sa_writeto  (sa_t *sa, const char *buf, size_t buflen, size_t *bufdone, sa_addr_t *raddr);
  -sa_rc_t sa_printf   (sa_t *sa, const char *fmt, ...);
  -sa_rc_t sa_flush    (sa_t *sa);
  +sa_rc_t sa_addr_u2a     (sa_addr_t *saa, const char *uri, ...);
  +sa_rc_t sa_addr_s2a     (sa_addr_t *saa, const struct sockaddr *sabuf, socklen_t salen);
  +sa_rc_t sa_addr_a2u     (sa_addr_t *saa, char **uri);
  +sa_rc_t sa_addr_a2s     (sa_addr_t *saa, struct sockaddr **sabuf, socklen_t *salen);
  +
  +/* socket object operations */
  +sa_rc_t sa_create       (sa_t **sa);
  +sa_rc_t sa_destroy      (sa_t *sa);
  +
  +/* socket parameter operations */
  +sa_rc_t sa_type         (sa_t *sa, sa_type_t type);
  +sa_rc_t sa_timeout      (sa_t *sa, long sec, long usec);
  +sa_rc_t sa_buffers      (sa_t *sa, size_t rsize, size_t wsize);
  +
  +/* socket connection operations */
  +sa_rc_t sa_bind         (sa_t *sa, sa_addr_t *laddr);
  +sa_rc_t sa_connect      (sa_t *sa, sa_addr_t *raddr);
  +sa_rc_t sa_listen       (sa_t *sa, int backlog);
  +sa_rc_t sa_accept       (sa_t *sa, sa_addr_t **caddr, sa_t **csa);
  +sa_rc_t sa_getremote    (sa_t *sa, sa_addr_t **raddr);
  +sa_rc_t sa_getlocal     (sa_t *sa, sa_addr_t **laddr);
  +sa_rc_t sa_getfd        (sa_t *sa, int *fd);
  +sa_rc_t sa_shutdown     (sa_t *sa, char *flags);
  +
  +/* socket input/output operations (stream communication) */
  +sa_rc_t sa_read         (sa_t *sa, char *buf, size_t buflen, size_t *bufdone);
  +sa_rc_t sa_readln       (sa_t *sa, char *buf, size_t buflen, size_t *bufdone);
  +sa_rc_t sa_write        (sa_t *sa, const char *buf, size_t buflen, size_t *bufdone);
  +sa_rc_t sa_writef       (sa_t *sa, const char *fmt, ...);
  +sa_rc_t sa_flush        (sa_t *sa);
  +
  +/* socket input/output operations (datagram communication) */
  +sa_rc_t sa_recv         (sa_t *sa, char *buf, size_t buflen, size_t *bufdone, sa_addr_t **raddr);
  +sa_rc_t sa_send         (sa_t *sa, const char *buf, size_t buflen, size_t *bufdone, sa_addr_t *raddr);
   
   #endif /* __SA_H__ */
   

From ossp-cvs-owner@ossp.org  Sat Oct  6 16:35:59 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f96EZw873587; Sat, 6 Oct 2001 16:35:58 +0200 (CEST)
Date: Sat, 6 Oct 2001 16:35:58 +0200 (CEST)
Message-Id: <200110061435.f96EZw873587@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_syslog.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   06-Oct-2001 16:35:58
  Branch: HEAD                             Handle: 2001100615355700

  Modified files:
    ossp-pkg/l2             l2_ch_syslog.c

  Log:
    Use save l2_util_sprintf instead of unsafe sprintf
    and correctly set variable "n" (number of characters).

  Summary:
    Revision    Changes     Path
    1.23        +6  -6      ossp-pkg/l2/l2_ch_syslog.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_syslog.c
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 l2_ch_syslog.c
  --- ossp-pkg/l2/l2_ch_syslog.c	2001/10/06 14:33:09	1.22
  +++ ossp-pkg/l2/l2_ch_syslog.c	2001/10/06 14:35:57	1.23
  @@ -283,13 +283,13 @@
           if (caTime[4] == '0')
               caTime[4] = ' ';
           if (cfg->bLogPid) 
  -            sprintf(caBuf, "<%d>%s %s %s[%lu]: %s", 
  -                    prio, caTime, cfg->szLocalHost, 
  -                    cfg->szIdent, (unsigned long)getpid(), buf);
  +            n = l2_util_sprintf(caBuf, sizeof(caBuf), "<%d>%s %s %s[%lu]: %s", 
  +                                prio, caTime, cfg->szLocalHost, 
  +                                cfg->szIdent, (unsigned long)getpid(), buf);
           else
  -            sprintf(caBuf, "<%d>%s %s %s: %s", 
  -                    prio, caTime, cfg->szLocalHost, 
  -                    cfg->szIdent, buf);
  +            n = l2_util_sprintf(caBuf, sizeof(caBuf), "<%d>%s %s %s: %s", 
  +                                prio, caTime, cfg->szLocalHost, 
  +                                cfg->szIdent, buf);
           if ((n = strlen(caBuf)) > 1024)
               return L2_ERR_IO;
           if ((rc = sa_send(cfg->saRemoteSock, caBuf, n, 

From ossp-cvs-owner@ossp.org  Sat Oct  6 18:01:50 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f96G1nq83597; Sat, 6 Oct 2001 18:01:49 +0200 (CEST)
Date: Sat, 6 Oct 2001 18:01:49 +0200 (CEST)
Message-Id: <200110061601.f96G1nq83597@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c sa.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   06-Oct-2001 18:01:49
  Branch: HEAD                             Handle: 2001100617014800

  Modified files:
    ossp-pkg/sa             sa.c sa.h

  Log:
    Add sa_error() function.

  Summary:
    Revision    Changes     Path
    1.9         +79 -0      ossp-pkg/sa/sa.c
    1.10        +3  -0      ossp-pkg/sa/sa.h
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 sa.c
  --- ossp-pkg/sa/sa.c	2001/10/05 20:52:15	1.8
  +++ ossp-pkg/sa/sa.c	2001/10/06 16:01:48	1.9
  @@ -71,6 +71,9 @@
       int              nWriteLen;   /* write buffer current length */
       int              nWriteSize;  /* write buffer current size */
       char            *cpWriteBuf;  /* write buffer memory chunk */
  +    char             szError[256];
  +    char             szErrorInfo[128];
  +    sa_rc_t          rvErrorInfo;
   };
   
   /* boolean values */
  @@ -210,6 +213,79 @@
       return chars;
   }
   
  +/* remember extra error information */
  +static sa_rc_t sa_errorinfo(sa_t *sa, sa_rc_t rv, const char *fmt, ...)
  +{
  +    va_list ap;
  +
  +    /* argument sanity check */
  +    if (sa == NULL)
  +        return SA_ERR_ARG;
  +
  +    if (rv == SA_OK && fmt == NULL) {
  +        /* reset error information */
  +        sa->szErrorInfo[0] = '\0';
  +        sa->rvErrorInfo = SA_OK;
  +    }
  +    else {
  +        /* remember error information */
  +        va_start(ap, fmt);
  +        sa_mvsnprintf(sa->szErrorInfo, sizeof(sa->szErrorInfo), fmt, ap);
  +        sa->rvErrorInfo = rv;
  +        va_end(ap);
  +    }
  +    return SA_OK;
  +}
  +
  +/* return error string */
  +sa_rc_t sa_error(sa_t *sa, sa_rc_t rv, char **str)
  +{
  +    char *sz;
  +    char *cpBuf;
  +    int nBuf;
  +    int n;
  +
  +    /* argument sanity check */
  +    if (sa == NULL || str == NULL)
  +        return SA_ERR_ARG;
  +
  +    /* start at begin of buffer */
  +    cpBuf = sa->szError;
  +    nBuf  = sizeof(sa->szError);
  +
  +    /* translate result value into corresponding string */
  +    if      (rv == SA_OK)      sz = "everything ok";
  +    else if (rv == SA_ERR_ARG) sz = "invalid argument";
  +    else if (rv == SA_ERR_USE) sz = "invalid use";
  +    else if (rv == SA_ERR_MEM) sz = "no more memory available";
  +    else if (rv == SA_ERR_SYS) sz = "operating system error";
  +    else if (rv == SA_ERR_EOF) sz = "end of file in socket communication";
  +    else if (rv == SA_ERR_INT) sz = "internal error";
  +    else                       sz = "unknown error";
  +    n = sa_msnprintf(cpBuf, nBuf, "%s", sz);
  +    cpBuf += n;
  +    nBuf  -= n;
  +
  +    /* optionally annotate with error information */
  +    if (rv == sa->rvErrorInfo && sa->szErrorInfo[0] != '\0') {
  +        n = sa_msnprintf(cpBuf, nBuf, "; %s", sa->szErrorInfo);
  +        cpBuf += n;
  +        nBuf  -= n;
  +        sa_errorinfo(sa, SA_OK, NULL);
  +    }
  +
  +    /* optionally annotate with operating system error information */
  +    if (rv == SA_ERR_SYS) {
  +        n = sa_msnprintf(cpBuf, nBuf, "; %s (%d)", strerror(errno), errno);
  +        cpBuf += n;
  +        nBuf  -= n;
  +    }
  +
  +    /* return pointer to internal buffer */
  +    *str = sa->szError;
  +    return SA_OK;
  +}
  +
   /* create address object */
   sa_rc_t sa_addr_create(sa_addr_t **saap)
   {
  @@ -612,6 +688,9 @@
       sa->nWriteLen         = 0;
       sa->nWriteSize        = 0;
       sa->cpWriteBuf        = NULL;
  +    sa->szError[0]        = '\0';
  +    sa->szErrorInfo[0]    = '\0';
  +    sa->rvErrorInfo       = SA_OK;
   
       /* pass object to caller */
       *sap = sa;
  Index: ossp-pkg/sa/sa.h
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 sa.h
  --- ossp-pkg/sa/sa.h	2001/10/06 11:05:43	1.9
  +++ ossp-pkg/sa/sa.h	2001/10/06 16:01:48	1.10
  @@ -102,6 +102,9 @@
       SA_ERR_INT  /* internal error */
   } sa_rc_t;
   
  +/* error handling operations */
  +sa_rc_t sa_error        (sa_t *sa, sa_rc_t rv, char **str);
  +
   /* address object operations */
   sa_rc_t sa_addr_create  (sa_addr_t **saa);
   sa_rc_t sa_addr_destroy (sa_addr_t *saa);

From ossp-cvs-owner@ossp.org  Sun Oct  7 16:16:49 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f97EGm937986; Sun, 7 Oct 2001 16:16:48 +0200 (CEST)
Date: Sun, 7 Oct 2001 16:16:48 +0200 (CEST)
Message-Id: <200110071416.f97EGm937986@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c sa.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   07-Oct-2001 16:16:48
  Branch: HEAD                             Handle: 2001100715164700

  Modified files:
    ossp-pkg/sa             sa.c sa.h

  Log:
    Provide distinct timeouts, i.e., an own timeout for each individual I/O
    function. This is especially useful because an accept(2) timeout is
    usually something totally different than a connect(2) timeout.

  Summary:
    Revision    Changes     Path
    1.10        +41 -25     ossp-pkg/sa/sa.c
    1.11        +12 -1      ossp-pkg/sa/sa.h
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 sa.c
  --- ossp-pkg/sa/sa.c	2001/10/06 16:01:48	1.9
  +++ ossp-pkg/sa/sa.c	2001/10/07 14:16:47	1.10
  @@ -63,8 +63,7 @@
   struct sa_st {
       sa_type_t        eType;       /* socket type (stream or datagram) */
       int              fdSocket;    /* socket file descriptor */
  -    int              bTimeout;    /* timeout enabling flag */
  -    struct timeval   tvTimeout;   /* timeout value (sec, usec) */
  +    struct timeval   tvTimeout[6];/* timeout values (sec, usec) */
       int              nReadLen;    /* read  buffer current length */
       int              nReadSize;   /* read  buffer current size */
       char            *cpReadBuf;   /* read  buffer memory chunk */
  @@ -84,6 +83,10 @@
   #define TRUE  (!FALSE)
   #endif
   
  +/* handy struct timeval check */
  +#define SA_TVISZERO(tv) \
  +    ((tv).tv_sec == 0 && (tv).tv_usec == 0)
  +
   /* backward compatibility for AF_LOCAL */
   #if !defined(AF_LOCAL) && defined(AF_UNIX)
   #define AF_LOCAL AF_UNIX
  @@ -669,6 +672,7 @@
   sa_rc_t sa_create(sa_t **sap)
   {
       sa_t *sa;
  +    int i;
   
       /* argument sanity check(s) */
       if (sap == NULL)
  @@ -679,9 +683,10 @@
           return SA_ERR_MEM;
       sa->eType             = SA_TYPE_STREAM;
       sa->fdSocket          = -1;
  -    sa->bTimeout          = FALSE;
  -    sa->tvTimeout.tv_sec  = 0;
  -    sa->tvTimeout.tv_usec = 0;
  +    for (i = 0; i < (sizeof(sa->tvTimeout)/sizeof(sa->tvTimeout[0])); i++) {
  +        sa->tvTimeout[i].tv_sec  = 0;
  +        sa->tvTimeout[i].tv_usec = 0;
  +    }
       sa->nReadLen          = 0;
       sa->nReadSize         = 0;
       sa->cpReadBuf         = NULL;
  @@ -738,19 +743,24 @@
   }
   
   /* configure I/O timeout */
  -sa_rc_t sa_timeout(sa_t *sa, long sec, long usec)
  +sa_rc_t sa_timeout(sa_t *sa, sa_timeout_t id, long sec, long usec)
   {
  +    int i;
  +
       /* argument sanity check(s) */
       if (sa == NULL)
           return SA_ERR_ARG;
   
  -    /* configure timeout */
  -    if (sec == 0 && usec == 0)
  -        sa->bTimeout = FALSE; /* deactivate timeout */
  -    else
  -        sa->bTimeout = TRUE;  /* activate timeout */
  -    sa->tvTimeout.tv_sec  = sec;
  -    sa->tvTimeout.tv_usec = usec;
  +    if (id == SA_TIMEOUT_ALL) {
  +        for (i = 0; i < (sizeof(sa->tvTimeout)/sizeof(sa->tvTimeout[0])); i++) {
  +            sa->tvTimeout[i].tv_sec  = sec;
  +            sa->tvTimeout[i].tv_usec = usec;
  +        }
  +    }
  +    else {
  +        sa->tvTimeout[id].tv_sec  = sec;
  +        sa->tvTimeout[id].tv_usec = usec;
  +    }
   
       return SA_OK;
   }
  @@ -857,7 +867,7 @@
               return rv;
   
       rv = SA_OK;
  -    if (!sa->bTimeout) {
  +    if (SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_CONNECT])) {
           /* standard/non-timeout-aware connect operation */
           if (connect(sa->fdSocket, raddr->saBuf, raddr->slBuf) < 0)
               rv = SA_ERR_SYS;
  @@ -888,7 +898,8 @@
           FD_SET(sa->fdSocket, &rset);
           FD_SET(sa->fdSocket, &wset);
           do {
  -            n = select(sa->fdSocket+1, &rset, &wset, NULL, &sa->tvTimeout);
  +            n = select(sa->fdSocket+1, &rset, &wset, NULL,
  +                       &sa->tvTimeout[SA_TIMEOUT_CONNECT]);
           } while (n == -1 && errno == EINTR);
   
           /* decide on return semantic */
  @@ -970,11 +981,12 @@
           return SA_ERR_USE;
   
       /* if timeout is enabled, perform a smart-blocking wait */
  -    if (sa->bTimeout) {
  +    if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_ACCEPT])) {
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
           do {
  -            n = select(sa->fdSocket+1, &fds, NULL, NULL, &sa->tvTimeout);
  +            n = select(sa->fdSocket+1, &fds, NULL, NULL,
  +                       &sa->tvTimeout[SA_TIMEOUT_ACCEPT]);
           } while (n == -1 && errno == EINTR);
           if (n == 0) 
               errno = ETIMEDOUT;
  @@ -1106,11 +1118,12 @@
   
       /* if timeout is enabled, perform explicit/smart blocking instead 
          of implicitly/hard blocking in the read(2) system call */
  -    if (sa->bTimeout) {
  +    if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_READ])) {
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
           do {
  -            rv = select(sa->fdSocket+1, &fds, NULL, NULL, &sa->tvTimeout);
  +            rv = select(sa->fdSocket+1, &fds, NULL, NULL, 
  +                        &sa->tvTimeout[SA_TIMEOUT_READ]);
           } while (rv == -1 && errno == EINTR);
           if (rv == 0) {
               errno = ETIMEDOUT;
  @@ -1264,11 +1277,12 @@
   
       /* if timeout is enabled, perform explicit/smart blocking instead 
          of implicitly/hard blocking in the write(2) system call */
  -    if (sa->bTimeout) {
  +    if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_WRITE])) {
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
           do {
  -            rv = select(sa->fdSocket+1, NULL, &fds, NULL, &sa->tvTimeout);
  +            rv = select(sa->fdSocket+1, NULL, &fds, NULL, 
  +                        &sa->tvTimeout[SA_TIMEOUT_WRITE]);
           } while (rv == -1 && errno == EINTR);
           if (rv == 0) {
               errno = ETIMEDOUT;
  @@ -1474,11 +1488,12 @@
   
       /* if timeout is enabled, perform explicit/smart blocking instead 
          of implicitly/hard blocking in the recvfrom(2) system call */
  -    if (sa->bTimeout) {
  +    if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_RECV])) {
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
           do {
  -            n = select(sa->fdSocket+1, &fds, NULL, NULL, &sa->tvTimeout);
  +            n = select(sa->fdSocket+1, &fds, NULL, NULL, 
  +                       &sa->tvTimeout[SA_TIMEOUT_RECV]);
           } while (n == -1 && errno == EINTR);
           if (n == 0) 
               errno = ETIMEDOUT;
  @@ -1529,11 +1544,12 @@
   
       /* if timeout is enabled, perform explicit/smart blocking instead 
          of implicitly/hard blocking in the sendto(2) system call */
  -    if (sa->bTimeout) {
  +    if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_SEND])) {
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
           do {
  -            n = select(sa->fdSocket+1, NULL, &fds, NULL, &sa->tvTimeout);
  +            n = select(sa->fdSocket+1, NULL, &fds, NULL, 
  +                       &sa->tvTimeout[SA_TIMEOUT_SEND]);
           } while (n == -1 && errno == EINTR);
           if (n == 0) 
               errno = ETIMEDOUT;
  Index: ossp-pkg/sa/sa.h
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 sa.h
  --- ossp-pkg/sa/sa.h	2001/10/06 16:01:48	1.10
  +++ ossp-pkg/sa/sa.h	2001/10/07 14:16:47	1.11
  @@ -102,6 +102,17 @@
       SA_ERR_INT  /* internal error */
   } sa_rc_t;
   
  +/* list of timeouts */
  +typedef enum {
  +    SA_TIMEOUT_ALL      = -1,
  +    SA_TIMEOUT_ACCEPT   = 0,
  +    SA_TIMEOUT_CONNECT  = 1,
  +    SA_TIMEOUT_READ     = 2,
  +    SA_TIMEOUT_WRITE    = 3,
  +    SA_TIMEOUT_RECV     = 4,
  +    SA_TIMEOUT_SEND     = 5
  +} sa_timeout_t;
  +
   /* error handling operations */
   sa_rc_t sa_error        (sa_t *sa, sa_rc_t rv, char **str);
   
  @@ -121,7 +132,7 @@
   
   /* socket parameter operations */
   sa_rc_t sa_type         (sa_t *sa, sa_type_t type);
  -sa_rc_t sa_timeout      (sa_t *sa, long sec, long usec);
  +sa_rc_t sa_timeout      (sa_t *sa, sa_timeout_t id, long sec, long usec);
   sa_rc_t sa_buffers      (sa_t *sa, size_t rsize, size_t wsize);
   
   /* socket connection operations */

From ossp-cvs-owner@ossp.org  Sun Oct  7 16:17:15 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f97EHEm38048; Sun, 7 Oct 2001 16:17:14 +0200 (CEST)
Date: Sun, 7 Oct 2001 16:17:14 +0200 (CEST)
Message-Id: <200110071417.f97EHEm38048@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   07-Oct-2001 16:17:14
  Branch: HEAD                             Handle: 2001100715171300

  Modified files:
    ossp-pkg/sa             TODO

  Log:
    update TODO

  Summary:
    Revision    Changes     Path
    1.12        +20 -2      ossp-pkg/sa/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 TODO
  --- ossp-pkg/sa/TODO	2001/10/06 11:05:51	1.11
  +++ ossp-pkg/sa/TODO	2001/10/07 14:17:13	1.12
  @@ -3,7 +3,25 @@
   - perhaps move 1024-buffer of writef into sa_t and make adjustable
   - support registry sub-library for system call override
   - full test suite for whole API
  -- attention: timeout on accept() can be not what is wishes, i.e.,
  -  we need specific timeouts
   - support for writev(2)
  +- sa_buffer(sa, <which>, size)
  +  SA_BUFFER_UREAD
  +  SA_BUFFER_UWRITE
  +  SA_BUFFER_KREAD
  +  SA_BUFFER_KWRITE
  +  SA_BUFFER_WRITEF
  +- sa_syscall(sa, <which>|<ctx>, func, ctx);
  +  SA_SYSCALL_CTX
  +  SA_SYSCALL_SOCKET
  +  SA_SYSCALL_BIND
  +  SA_SYSCALL_CONNECT
  +  SA_SYSCALL_LISTEN
  +  SA_SYSCALL_ACCEPT
  +  SA_SYSCALL_READ
  +  SA_SYSCALL_WRITE
  +  SA_SYSCALL_RECVFROM
  +  SA_SYSCALL_SENDTO
  +  SA_SYSCALL_SHUTDOWN
  +  SA_SYSCALL_CLOSE
  +      :
   

From ossp-cvs-owner@ossp.org  Sun Oct  7 17:21:19 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f97FLIr45467; Sun, 7 Oct 2001 17:21:18 +0200 (CEST)
Date: Sun, 7 Oct 2001 17:21:18 +0200 (CEST)
Message-Id: <200110071521.f97FLIr45467@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa TODO sa.c sa.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   07-Oct-2001 17:21:18
  Branch: HEAD                             Handle: 2001100716211700

  Modified files:
    ossp-pkg/sa             TODO sa.c sa.h

  Log:
    Implement (still fully untested!) system call overriding support through
    a new function sa_syscall(). Anybody here who finds predestinated to
    test this out in depth?

  Summary:
    Revision    Changes     Path
    1.13        +0  -15     ossp-pkg/sa/TODO
    1.11        +168 -31    ossp-pkg/sa/sa.c
    1.12        +12 -0      ossp-pkg/sa/sa.h
  ____________________________________________________________________________

  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 TODO
  --- ossp-pkg/sa/TODO	2001/10/07 14:17:13	1.12
  +++ ossp-pkg/sa/TODO	2001/10/07 15:21:17	1.13
  @@ -10,18 +10,3 @@
     SA_BUFFER_KREAD
     SA_BUFFER_KWRITE
     SA_BUFFER_WRITEF
  -- sa_syscall(sa, <which>|<ctx>, func, ctx);
  -  SA_SYSCALL_CTX
  -  SA_SYSCALL_SOCKET
  -  SA_SYSCALL_BIND
  -  SA_SYSCALL_CONNECT
  -  SA_SYSCALL_LISTEN
  -  SA_SYSCALL_ACCEPT
  -  SA_SYSCALL_READ
  -  SA_SYSCALL_WRITE
  -  SA_SYSCALL_RECVFROM
  -  SA_SYSCALL_SENDTO
  -  SA_SYSCALL_SHUTDOWN
  -  SA_SYSCALL_CLOSE
  -      :
  -
  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 sa.c
  --- ossp-pkg/sa/sa.c	2001/10/07 14:16:47	1.10
  +++ ossp-pkg/sa/sa.c	2001/10/07 15:21:17	1.11
  @@ -59,6 +59,105 @@
       socklen_t        slBuf;       /* the length of "struct sockaddr_xx" */
   };
   
  +/* system call structure declaration macros */
  +#define SA_SC_DECLARE_0(rc_t, fn) \
  +    struct { \
  +        union { void (*any)(); \
  +                rc_t (*std)(void); \
  +                rc_t (*ctx)(void *); } fptr; \
  +        void *fctx; \
  +    } sc_##fn;
  +#define SA_SC_DECLARE_1(rc_t, fn, a1_t) \
  +    struct { \
  +        union { void (*any)(); \
  +                rc_t (*std)(a1_t); \
  +                rc_t (*ctx)(void *, a1_t); } fptr; \
  +        void *fctx; \
  +    } sc_##fn;
  +#define SA_SC_DECLARE_2(rc_t, fn, a1_t, a2_t) \
  +    struct { \
  +        union { void (*any)(); \
  +                rc_t (*std)(a1_t, a2_t); \
  +                rc_t (*ctx)(void *, a1_t, a2_t); } fptr; \
  +        void *fctx; \
  +    } sc_##fn;
  +#define SA_SC_DECLARE_3(rc_t, fn, a1_t, a2_t, a3_t) \
  +    struct { \
  +        union { void (*any)(); \
  +                rc_t (*std)(a1_t, a2_t, a3_t); \
  +                rc_t (*ctx)(void *, a1_t, a2_t, a3_t); } fptr; \
  +        void *fctx; \
  +    } sc_##fn;
  +#define SA_SC_DECLARE_4(rc_t, fn, a1_t, a2_t, a3_t, a4_t) \
  +    struct { \
  +        union { void (*any)(); \
  +                rc_t (*std)(a1_t, a2_t, a3_t, a4_t); \
  +                rc_t (*ctx)(void *, a1_t, a2_t, a3_t, a4_t); } fptr; \
  +        void *fctx; \
  +    } sc_##fn;
  +#define SA_SC_DECLARE_5(rc_t, fn, a1_t, a2_t, a3_t, a4_t, a5_t) \
  +    struct { \
  +        union { void (*any)(); \
  +                rc_t (*std)(a1_t, a2_t, a3_t, a4_t, a5_t); \
  +                rc_t (*ctx)(void *, a1_t, a2_t, a3_t, a4_t, a5_t); } fptr; \
  +        void *fctx; \
  +    } sc_##fn;
  +#define SA_SC_DECLARE_6(rc_t, fn, a1_t, a2_t, a3_t, a4_t, a5_t, a6_t) \
  +    struct { \
  +        union { void (*any)(); \
  +                rc_t (*std)(a1_t, a2_t, a3_t, a4_t, a5_t, a6_t); \
  +                rc_t (*ctx)(void *, a1_t, a2_t, a3_t, a4_t, a5_t, a6_t); } fptr; \
  +        void *fctx; \
  +    } sc_##fn;
  +
  +/* system call structure assignment macro */
  +#define SA_SC_ASSIGN(sa, fn, ptr, ctx) \
  +    do { \
  +        (sa)->scSysCall.sc_##fn.fptr.any = (void (*)())(ptr); \
  +        (sa)->scSysCall.sc_##fn.fctx = (ctx); \
  +    } while(0)
  +
  +/* system call function call macros */
  +#define SA_SC_CALL_0(sa, fn) \
  +    (   (sa)->scSysCall.sc_##fn.fctx != NULL \
  +     ? ((sa)->scSysCall.sc_##fn.fptr.ctx)((sa)->scSysCall.sc_##fn.fctx) \
  +     : ((sa)->scSysCall.sc_##fn.fptr.std)() )
  +#define SA_SC_CALL_1(sa, fn, a1) \
  +    (   (sa)->scSysCall.sc_##fn.fctx != NULL \
  +     ? ((sa)->scSysCall.sc_##fn.fptr.ctx)((sa)->scSysCall.sc_##fn.fctx, a1) \
  +     : ((sa)->scSysCall.sc_##fn.fptr.std)(a1) )
  +#define SA_SC_CALL_2(sa, fn, a1, a2) \
  +    (   (sa)->scSysCall.sc_##fn.fctx != NULL \
  +     ? ((sa)->scSysCall.sc_##fn.fptr.ctx)((sa)->scSysCall.sc_##fn.fctx, a1, a2) \
  +     : ((sa)->scSysCall.sc_##fn.fptr.std)(a1, a2) )
  +#define SA_SC_CALL_3(sa, fn, a1, a2, a3) \
  +    (   (sa)->scSysCall.sc_##fn.fctx != NULL \
  +     ? ((sa)->scSysCall.sc_##fn.fptr.ctx)((sa)->scSysCall.sc_##fn.fctx, a1, a2, a3) \
  +     : ((sa)->scSysCall.sc_##fn.fptr.std)(a1, a2, a3) )
  +#define SA_SC_CALL_4(sa, fn, a1, a2, a3, a4) \
  +    (   (sa)->scSysCall.sc_##fn.fctx != NULL \
  +     ? ((sa)->scSysCall.sc_##fn.fptr.ctx)((sa)->scSysCall.sc_##fn.fctx, a1, a2, a3, a4) \
  +     : ((sa)->scSysCall.sc_##fn.fptr.std)(a1, a2, a3, a4) )
  +#define SA_SC_CALL_5(sa, fn, a1, a2, a3, a4, a5) \
  +    (   (sa)->scSysCall.sc_##fn.fctx != NULL \
  +     ? ((sa)->scSysCall.sc_##fn.fptr.ctx)((sa)->scSysCall.sc_##fn.fctx, a1, a2, a3, a4, a5) \
  +     : ((sa)->scSysCall.sc_##fn.fptr.std)(a1, a2, a3, a4, a5) )
  +#define SA_SC_CALL_6(sa, fn, a1, a2, a3, a4, a5, a6) \
  +    (   (sa)->scSysCall.sc_##fn.fctx != NULL \
  +     ? ((sa)->scSysCall.sc_##fn.fptr.ctx)((sa)->scSysCall.sc_##fn.fctx, a1, a2, a3, a4, a5, a6) \
  +     : ((sa)->scSysCall.sc_##fn.fptr.std)(a1, a2, a3, a4, a5, a6) )
  +
  +/* system call table */
  +typedef struct {
  +    SA_SC_DECLARE_3(int, connect, int, const struct sockaddr *, socklen_t)
  +    SA_SC_DECLARE_3(int, accept, int, struct sockaddr *, socklen_t *)
  +    SA_SC_DECLARE_5(int, select, int, fd_set *, fd_set *, fd_set *, struct timeval *)
  +    SA_SC_DECLARE_3(ssize_t, read, int, void *, size_t)
  +    SA_SC_DECLARE_3(ssize_t, write, int, const void *, size_t)
  +    SA_SC_DECLARE_6(ssize_t, recvfrom, int, void *, size_t, int, struct sockaddr *, socklen_t *)
  +    SA_SC_DECLARE_6(ssize_t, sendto, int, const void *, size_t, int, const struct sockaddr *, socklen_t)
  +} sa_syscall_tab_t;
  + 
   /* socket abstraction object */
   struct sa_st {
       sa_type_t        eType;       /* socket type (stream or datagram) */
  @@ -73,6 +172,7 @@
       char             szError[256];
       char             szErrorInfo[128];
       sa_rc_t          rvErrorInfo;
  +    sa_syscall_tab_t scSysCall;
   };
   
   /* boolean values */
  @@ -681,21 +781,34 @@
       /* allocate and initialize socket object */
       if ((sa = (sa_t *)malloc(sizeof(sa_t))) == NULL)
           return SA_ERR_MEM;
  -    sa->eType             = SA_TYPE_STREAM;
  -    sa->fdSocket          = -1;
  +
  +    /* init object attributes */
  +    sa->eType          = SA_TYPE_STREAM;
  +    sa->fdSocket       = -1;
  +    sa->nReadLen       = 0;
  +    sa->nReadSize      = 0;
  +    sa->cpReadBuf      = NULL;
  +    sa->nWriteLen      = 0;
  +    sa->nWriteSize     = 0;
  +    sa->cpWriteBuf     = NULL;
  +    sa->szError[0]     = '\0';
  +    sa->szErrorInfo[0] = '\0';
  +    sa->rvErrorInfo    = SA_OK;
  +
  +    /* init timeval object attributes */
       for (i = 0; i < (sizeof(sa->tvTimeout)/sizeof(sa->tvTimeout[0])); i++) {
           sa->tvTimeout[i].tv_sec  = 0;
           sa->tvTimeout[i].tv_usec = 0;
       }
  -    sa->nReadLen          = 0;
  -    sa->nReadSize         = 0;
  -    sa->cpReadBuf         = NULL;
  -    sa->nWriteLen         = 0;
  -    sa->nWriteSize        = 0;
  -    sa->cpWriteBuf        = NULL;
  -    sa->szError[0]        = '\0';
  -    sa->szErrorInfo[0]    = '\0';
  -    sa->rvErrorInfo       = SA_OK;
  +
  +    /* init syscall object attributes */
  +    SA_SC_ASSIGN(sa, connect,  connect,  NULL);
  +    SA_SC_ASSIGN(sa, accept,   accept,   NULL);
  +    SA_SC_ASSIGN(sa, select,   select,   NULL);
  +    SA_SC_ASSIGN(sa, read,     read,     NULL);
  +    SA_SC_ASSIGN(sa, write,    write,    NULL);
  +    SA_SC_ASSIGN(sa, recvfrom, recvfrom, NULL);
  +    SA_SC_ASSIGN(sa, sendto,   sendto,   NULL);
   
       /* pass object to caller */
       *sap = sa;
  @@ -817,6 +930,30 @@
       return SA_OK;
   }
   
  +/* override system call */
  +sa_rc_t sa_syscall(sa_t *sa, sa_syscall_t id, void (*fptr)(), void *fctx)
  +{
  +    if (sa == NULL || fptr == NULL)
  +        return SA_ERR_ARG;
  +    if (id == SA_SYSCALL_CONNECT)
  +        SA_SC_ASSIGN(sa, connect, fptr, fctx); 
  +    else if (id == SA_SYSCALL_ACCEPT)
  +        SA_SC_ASSIGN(sa, accept, fptr, fctx); 
  +    else if (id == SA_SYSCALL_SELECT)
  +        SA_SC_ASSIGN(sa, select, fptr, fctx); 
  +    else if (id == SA_SYSCALL_READ)
  +        SA_SC_ASSIGN(sa, read, fptr, fctx); 
  +    else if (id == SA_SYSCALL_WRITE)
  +        SA_SC_ASSIGN(sa, write, fptr, fctx); 
  +    else if (id == SA_SYSCALL_RECVFROM)
  +        SA_SC_ASSIGN(sa, recvfrom, fptr, fctx); 
  +    else if (id == SA_SYSCALL_SENDTO)
  +        SA_SC_ASSIGN(sa, sendto, fptr, fctx); 
  +    else
  +        return SA_ERR_ARG;
  +    return SA_OK;
  +}
  +
   /* bind socket to a local address */
   sa_rc_t sa_bind(sa_t *sa, sa_addr_t *laddr)
   {
  @@ -869,7 +1006,7 @@
       rv = SA_OK;
       if (SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_CONNECT])) {
           /* standard/non-timeout-aware connect operation */
  -        if (connect(sa->fdSocket, raddr->saBuf, raddr->slBuf) < 0)
  +        if (SA_SC_CALL_3(sa, connect, sa->fdSocket, raddr->saBuf, raddr->slBuf) < 0)
               rv = SA_ERR_SYS;
       }
       else {
  @@ -881,7 +1018,7 @@
           fcntl(sa->fdSocket, F_SETFL, flags|O_NONBLOCK);
   
           /* perform the connect operation */
  -        if ((n = connect(sa->fdSocket, raddr->saBuf, raddr->slBuf)) < 0) {
  +        if ((n = SA_SC_CALL_3(sa, connect, sa->fdSocket, raddr->saBuf, raddr->slBuf)) < 0) {
               if (errno != EINPROGRESS) {
                   error = errno;
                   goto done;
  @@ -898,8 +1035,8 @@
           FD_SET(sa->fdSocket, &rset);
           FD_SET(sa->fdSocket, &wset);
           do {
  -            n = select(sa->fdSocket+1, &rset, &wset, NULL,
  -                       &sa->tvTimeout[SA_TIMEOUT_CONNECT]);
  +            n = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &rset, &wset, NULL,
  +                             &sa->tvTimeout[SA_TIMEOUT_CONNECT]);
           } while (n == -1 && errno == EINTR);
   
           /* decide on return semantic */
  @@ -985,8 +1122,8 @@
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
           do {
  -            n = select(sa->fdSocket+1, &fds, NULL, NULL,
  -                       &sa->tvTimeout[SA_TIMEOUT_ACCEPT]);
  +            n = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &fds, NULL, NULL,
  +                             &sa->tvTimeout[SA_TIMEOUT_ACCEPT]);
           } while (n == -1 && errno == EINTR);
           if (n == 0) 
               errno = ETIMEDOUT;
  @@ -996,7 +1133,7 @@
   
       /* perform accept operation on underlying socket */
       sa_len = sizeof(sa_buf);
  -    if ((s = accept(sa->fdSocket, (struct sockaddr *)&sa_buf, &sa_len)) == -1)
  +    if ((s = SA_SC_CALL_3(sa, accept, sa->fdSocket, (struct sockaddr *)&sa_buf, &sa_len)) == -1)
           return SA_ERR_SYS;
   
       /* create result address object */
  @@ -1122,8 +1259,8 @@
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
           do {
  -            rv = select(sa->fdSocket+1, &fds, NULL, NULL, 
  -                        &sa->tvTimeout[SA_TIMEOUT_READ]);
  +            rv = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &fds, NULL, NULL, 
  +                              &sa->tvTimeout[SA_TIMEOUT_READ]);
           } while (rv == -1 && errno == EINTR);
           if (rv == 0) {
               errno = ETIMEDOUT;
  @@ -1133,7 +1270,7 @@
   
       /* perform read operation on underlying socket */
       do {
  -        rv = read(sa->fdSocket, cpBuf, nBufLen);
  +        rv = SA_SC_CALL_3(sa, read, sa->fdSocket, cpBuf, nBufLen);
       } while (rv == -1 && errno == EINTR);
   
       return rv;
  @@ -1281,8 +1418,8 @@
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
           do {
  -            rv = select(sa->fdSocket+1, NULL, &fds, NULL, 
  -                        &sa->tvTimeout[SA_TIMEOUT_WRITE]);
  +            rv = SA_SC_CALL_5(sa, select, sa->fdSocket+1, NULL, &fds, NULL, 
  +                              &sa->tvTimeout[SA_TIMEOUT_WRITE]);
           } while (rv == -1 && errno == EINTR);
           if (rv == 0) {
               errno = ETIMEDOUT;
  @@ -1292,7 +1429,7 @@
   
       /* perform write operation on underlying socket */
       do {
  -        rv = write(sa->fdSocket, cpBuf, nBufLen);
  +        rv = SA_SC_CALL_3(sa, write, sa->fdSocket, cpBuf, nBufLen);
       } while (rv == -1 && errno == EINTR);
   
       return rv;
  @@ -1492,8 +1629,8 @@
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
           do {
  -            n = select(sa->fdSocket+1, &fds, NULL, NULL, 
  -                       &sa->tvTimeout[SA_TIMEOUT_RECV]);
  +            n = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &fds, NULL, NULL, 
  +                             &sa->tvTimeout[SA_TIMEOUT_RECV]);
           } while (n == -1 && errno == EINTR);
           if (n == 0) 
               errno = ETIMEDOUT;
  @@ -1503,8 +1640,8 @@
   
       /* perform receive operation on underlying socket */
       sa_len = sizeof(sa_buf);
  -    if ((n = recvfrom(sa->fdSocket, buf, buflen, 0, 
  -                      (struct sockaddr *)&sa_buf, &sa_len)) == -1)
  +    if ((n = SA_SC_CALL_6(sa, recvfrom, sa->fdSocket, buf, buflen, 0, 
  +                          (struct sockaddr *)&sa_buf, &sa_len)) == -1)
           return SA_ERR_SYS;
   
       /* create result address object */
  @@ -1548,8 +1685,8 @@
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
           do {
  -            n = select(sa->fdSocket+1, NULL, &fds, NULL, 
  -                       &sa->tvTimeout[SA_TIMEOUT_SEND]);
  +            n = SA_SC_CALL_5(sa, select, sa->fdSocket+1, NULL, &fds, NULL, 
  +                             &sa->tvTimeout[SA_TIMEOUT_SEND]);
           } while (n == -1 && errno == EINTR);
           if (n == 0) 
               errno = ETIMEDOUT;
  @@ -1558,7 +1695,7 @@
       }
   
       /* perform send operation on underlying socket */
  -    if ((n = sendto(sa->fdSocket, buf, buflen, 0, raddr->saBuf, raddr->slBuf)) == -1)
  +    if ((n = SA_SC_CALL_6(sa, sendto, sa->fdSocket, buf, buflen, 0, raddr->saBuf, raddr->slBuf)) == -1)
           return SA_ERR_SYS;
   
       /* pass actual number of sent bytes to caller */
  Index: ossp-pkg/sa/sa.h
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 sa.h
  --- ossp-pkg/sa/sa.h	2001/10/07 14:16:47	1.11
  +++ ossp-pkg/sa/sa.h	2001/10/07 15:21:17	1.12
  @@ -113,6 +113,17 @@
       SA_TIMEOUT_SEND     = 5
   } sa_timeout_t;
   
  +/* list of system calls */
  +typedef enum {
  +    SA_SYSCALL_CONNECT,
  +    SA_SYSCALL_ACCEPT,
  +    SA_SYSCALL_SELECT,
  +    SA_SYSCALL_READ,
  +    SA_SYSCALL_WRITE,
  +    SA_SYSCALL_RECVFROM,
  +    SA_SYSCALL_SENDTO
  +} sa_syscall_t;
  +
   /* error handling operations */
   sa_rc_t sa_error        (sa_t *sa, sa_rc_t rv, char **str);
   
  @@ -134,6 +145,7 @@
   sa_rc_t sa_type         (sa_t *sa, sa_type_t type);
   sa_rc_t sa_timeout      (sa_t *sa, sa_timeout_t id, long sec, long usec);
   sa_rc_t sa_buffers      (sa_t *sa, size_t rsize, size_t wsize);
  +sa_rc_t sa_syscall      (sa_t *sa, sa_syscall_t id, void (*fptr)(), void *fctx);
   
   /* socket connection operations */
   sa_rc_t sa_bind         (sa_t *sa, sa_addr_t *laddr);

From ossp-cvs-owner@ossp.org  Mon Oct  8 12:03:56 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f98A3tS75373; Mon, 8 Oct 2001 12:03:55 +0200 (CEST)
Date: Mon, 8 Oct 2001 12:03:55 +0200 (CEST)
Message-Id: <200110081003.f98A3tS75373@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa Makefile.in README aclocal.m4 configure.ac sa-...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   08-Oct-2001 12:03:55
  Branch: HEAD                             Handle: 2001100811035400

  Added files:
    ossp-pkg/sa             sa-config.in
  Modified files:
    ossp-pkg/sa             Makefile.in README aclocal.m4 configure.ac sa.ac
                            sa.c sa.h sa.pod sa_test.c

  Log:
    Various cleanups

  Summary:
    Revision    Changes     Path
    1.4         +3  -2      ossp-pkg/sa/Makefile.in
    1.2         +50 -0      ossp-pkg/sa/README
    1.2         +29 -0      ossp-pkg/sa/aclocal.m4
    1.3         +3  -2      ossp-pkg/sa/configure.ac
    1.1         +145 -0     ossp-pkg/sa/sa-config.in
    1.3         +3  -2      ossp-pkg/sa/sa.ac
    1.12        +3  -2      ossp-pkg/sa/sa.c
    1.13        +3  -2      ossp-pkg/sa/sa.h
    1.8         +4  -3      ossp-pkg/sa/sa.pod
    1.6         +29 -0      ossp-pkg/sa/sa_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/Makefile.in
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 Makefile.in
  --- ossp-pkg/sa/Makefile.in	2001/10/05 11:40:22	1.3
  +++ ossp-pkg/sa/Makefile.in	2001/10/08 10:03:54	1.4
  @@ -1,7 +1,8 @@
   ##
   ##  SA - OSSP Socket Abstraction Library
  -##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP SA, a socket abstraction library which
   ##  can be found at http://www.ossp.org/pkg/sa/.
  Index: ossp-pkg/sa/README
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 README
  --- ossp-pkg/sa/README	2001/10/02 13:27:44	1.1.1.1
  +++ ossp-pkg/sa/README	2001/10/08 10:03:54	1.2
  @@ -0,0 +1,50 @@
  +   ___  __ _ 
  +  / __|/ _` |
  +  \__ \ (_| |
  +  |___/\__,_|
  +
  +  SA - Socket Abstraction Library
  +  Version 0.1.0 (13-Sep-2001)
  +
  +  ABSTRACT
  +
  +  The OSSP SA library is an abstraction library for the Unix socket
  +  interface featuring stream and datagram oriented communication over
  +  Unix Domain and Internet Domain sockets. It provides the following key
  +  features: address abstraction, type abstraction, I/O timeouts, I/O
  +  stream buffering and convinience I/O functions.
  +
  +  COPYRIGHT AND LICENSE
  +
  +  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +
  +  This file is part of OSSP SA, a socket abstraction library which
  +  can be found at http://www.ossp.org/pkg/sa/.
  +
  +  Permission to use, copy, modify, and distribute this software for
  +  any purpose with or without fee is hereby granted, provided that
  +  the above copyright notice and this permission notice appear in all
  +  copies.
  +
  +  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +  SUCH DAMAGE.
  +
  +  HOME AND DOCUMENTATION
  +
  +  The documentation and latest release can be found on
  +
  +  o http://www.ossp.org/pkg/sa/
  +  o  ftp://ftp.ossp.org/pkg/sa/
  +
  Index: ossp-pkg/sa/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 aclocal.m4
  --- ossp-pkg/sa/aclocal.m4	2001/10/02 13:27:44	1.1.1.1
  +++ ossp-pkg/sa/aclocal.m4	2001/10/08 10:03:54	1.2
  @@ -1,3 +1,32 @@
  +dnl ##
  +dnl ##  SA - OSSP Socket Abstraction Library
  +dnl ##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##
  +dnl ##  This file is part of OSSP SA, a socket abstraction library which
  +dnl ##  can be found at http://www.ossp.org/pkg/sa/.
  +dnl ##
  +dnl ##  Permission to use, copy, modify, and distribute this software for
  +dnl ##  any purpose with or without fee is hereby granted, provided that
  +dnl ##  the above copyright notice and this permission notice appear in all
  +dnl ##  copies.
  +dnl ##
  +dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +dnl ##  SUCH DAMAGE.
  +dnl ##
  +dnl ##  aclocal.m4: GNU Autoconf local macro definitions
  +dnl ##
   
   dnl ##
   dnl ##  Check whether compiler option works
  Index: ossp-pkg/sa/configure.ac
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 configure.ac
  --- ossp-pkg/sa/configure.ac	2001/10/02 18:37:19	1.2
  +++ ossp-pkg/sa/configure.ac	2001/10/08 10:03:54	1.3
  @@ -1,7 +1,8 @@
   dnl ##
   dnl ##  SA - OSSP Socket Abstraction Library
  -dnl ##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -dnl ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +dnl ##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP SA, a socket abstraction library which
   dnl ##  can be found at http://www.ossp.org/pkg/sa/.
  Index: ossp-pkg/sa/sa-config.in
  ============================================================
  $ cvs update -p -r1.1 sa-config.in
  #!/bin/sh
  ##
  ##  SA - OSSP Logging Library
  ##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
  ##  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  ##  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  ##
  ##  This file is part of OSSP SA, a socket abstraction library which
  ##  can be found at http://www.ossp.org/pkg/sa/.
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  sa-config.in: SA library build utility
  ##
  
  DIFS=' 	
  '
  
  prefix="@prefix@"
  exec_prefix="@exec_prefix@"
  
  sa_prefix="$prefix"
  sa_exec_prefix="$exec_prefix"
  sa_bindir="@bindir@"
  sa_libdir="@libdir@"
  sa_includedir="@includedir@"
  sa_mandir="@mandir@"
  sa_datadir="@datadir@"
  sa_acdir="@datadir@/aclocal"
  sa_cflags="@CFLAGS@"
  sa_ldflags="@LDFLAGS@"
  sa_libs="@LIBS@"
  sa_version="@SA_VERSION_STR@"
  
  help=no
  version=no
  
  usage="sa-config"
  usage="$usage [--help] [--version] [--all]"
  usage="$usage [--prefix] [--exec-prefix] [--bindir] [--libdir] [--includedir] [--mandir] [--datadir] [--acdir]"
  usage="$usage [--cflags] [--ldflags] [--libs]"
  if [ $# -eq 0 ]; then
      echo "sa-config:Error: Invalid option" 1>&2
      echo "sa-config:Usage: $usage" 1>&2
      exit 1
  fi
  output=''
  output_extra=''
  all=no
  prev=''
  OIFS="$IFS" IFS="$DIFS"
  for option
  do
      if [ ".$prev" != . ]; then
          eval "$prev=\$option"
          prev=''
          continue
      fi
      case "$option" in
          -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
             *) optarg='' ;;
      esac
      case "$option" in
          --help|-h)
              echo "Usage: $usage"
              exit 0
              ;;
          --version|-v)
              echo "OSSP SA $sa_version"
              exit 0
              ;;
          --all)
              all=yes
              ;;
          --prefix)
              output="$output $sa_prefix"
              ;;
          --exec-prefix)
              output="$output $sa_exec_prefix"
              ;;
          --bindir)
              output="$output $sa_bindir"
              ;;
          --libdir)
              output="$output $sa_libdir"
              ;;
          --includedir)
              output="$output $sa_includedir"
              ;;
          --mandir)
              output="$output $sa_mandir"
              ;;
          --datadir)
              output="$output $sa_datadir"
              ;;
          --acdir)
              output="$output $sa_acdir"
              ;;
          --cflags)
              output="$output -I$sa_includedir"
              output_extra="$output_extra $sa_cflags"
              ;;
          --ldflags)
              output="$output -L$sa_libdir"
              output_extra="$output_extra $sa_ldflags"
              ;;
          --libs)
              output="$output -lsa"
              output_extra="$output_extra $sa_libs"
              ;;
          * )
              echo "sa-config:Error: Invalid option" 1>&2
              echo "sa-config:Usage: $usage" 1>&2
              exit 1;
              ;;
      esac
  done
  IFS="$OIFS"
  if [ ".$prev" != . ]; then
      echo "sa-config:Error: missing argument to --`echo $prev | sed 's/_/-/g'`" 1>&2
      exit 1
  fi
  if [ ".$output" != . ]; then
      if [ ".$all" = .yes ]; then
          output="$output $output_extra"
      fi
      echo $output
  fi
  
  Index: ossp-pkg/sa/sa.ac
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 sa.ac
  --- ossp-pkg/sa/sa.ac	2001/10/05 11:48:49	1.2
  +++ ossp-pkg/sa/sa.ac	2001/10/08 10:03:54	1.3
  @@ -1,7 +1,8 @@
   ##
   ##  SA - OSSP Socket Abstraction Library
  -##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP SA, a socket abstraction library which
   ##  can be found at http://www.ossp.org/pkg/sa/.
  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 sa.c
  --- ossp-pkg/sa/sa.c	2001/10/07 15:21:17	1.11
  +++ ossp-pkg/sa/sa.c	2001/10/08 10:03:54	1.12
  @@ -1,7 +1,8 @@
   /*
   **  SA - OSSP Socket Abstraction Library
  -**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP SA, a socket abstraction library which
   **  can be found at http://www.ossp.org/pkg/sa/.
  Index: ossp-pkg/sa/sa.h
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 sa.h
  --- ossp-pkg/sa/sa.h	2001/10/07 15:21:17	1.12
  +++ ossp-pkg/sa/sa.h	2001/10/08 10:03:54	1.13
  @@ -1,7 +1,8 @@
   /*
   **  SA - OSSP Socket Abstraction Library
  -**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP SA, a socket abstraction library which
   **  can be found at http://www.ossp.org/pkg/sa/.
  Index: ossp-pkg/sa/sa.pod
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 sa.pod
  --- ossp-pkg/sa/sa.pod	2001/10/05 21:11:22	1.7
  +++ ossp-pkg/sa/sa.pod	2001/10/08 10:03:54	1.8
  @@ -1,7 +1,8 @@
   ##
   ##  SA - OSSP Socket Abstraction Library
  -##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP SA, a socket abstraction library which
   ##  can be found at http://www.ossp.org/pkg/sa/.
  @@ -130,7 +131,7 @@
   operation was able to succeed. This allows one to easily program
   less-blocking network services.
   
  -=item B<Buffered I/O>
  +=item B<I/O Stream Buffering>
   
   If B<OSSP sa> is used for stream communication, internally all I/O
   operations can be performed through input and/or output buffers (set
  Index: ossp-pkg/sa/sa_test.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 sa_test.c
  --- ossp-pkg/sa/sa_test.c	2001/10/05 20:52:15	1.5
  +++ ossp-pkg/sa/sa_test.c	2001/10/08 10:03:54	1.6
  @@ -1,3 +1,32 @@
  +/*
  +**  SA - OSSP Socket Abstraction Library
  +**  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**
  +**  This file is part of OSSP SA, a socket abstraction library which
  +**  can be found at http://www.ossp.org/pkg/sa/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  sa_test.c: socket abstraction library test suite
  +*/
   
   #include <stdio.h>
   #include <stdlib.h>

From ossp-cvs-owner@ossp.org  Mon Oct  8 12:28:43 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f98AShV77908; Mon, 8 Oct 2001 12:28:43 +0200 (CEST)
Date: Mon, 8 Oct 2001 12:28:43 +0200 (CEST)
Message-Id: <200110081028.f98AShV77908@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c test.sh
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   08-Oct-2001 12:28:43
  Branch: HEAD                             Handle: 2001100811284200

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c test.sh

  Log:
    defeated zombies

  Summary:
    Revision    Changes     Path
    1.65        +13 -4      ossp-pkg/lmtp2nntp/lmtp2nntp.c
    1.3         +3  -3      ossp-pkg/lmtp2nntp/test.sh
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.64 -r1.65 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/04 16:07:16	1.64
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/08 10:28:42	1.65
  @@ -32,6 +32,8 @@
   #include <fcntl.h>
   #include <sys/utsname.h>
   #include <sys/time.h>
  +#include <sys/types.h>
  +#include <sys/wait.h>
   #include <signal.h>
   
   /* third party */
  @@ -176,11 +178,11 @@
        */
       fprintf(stderr, 
               "USAGE: %s "
  +            "[-a altio] "
               "[-b bindaddr[:port]] "
               "[-d deliverymode] "
               "[-g groupmode] "
               "[-h host[:port][,host[:port], ...]] "
  -            "[-i inputbind] "
               "[-l level[:logfile]] "
               "[-m mailfrom] "
               "[-n nodename] "
  @@ -271,9 +273,10 @@
   {
       va_list ap;
       static lmtp2nntp_t *ctx = NULL;
  +    pid_t pid;
   
  -    va_start(ap, sig);
       if(sig == 0) {
  +        va_start(ap, sig);
           if ((ctx = va_arg(ap, lmtp2nntp_t *)) == NULL)
               exit(ERR_EXECUTION);
           log0(ctx, TRACE, "catching and logging signals now");
  @@ -283,14 +286,19 @@
       if (ctx != NULL) {
           if ((sig == SIGHUP) || (sig == SIGINT) || (sig == SIGQUIT))
               log1(ctx, NOTICE, "caught signal %d - exit - no more logging", sig);
  -        else
  +        else if (sig == SIGCHLD) {
  +            log1(ctx, NOTICE, "caught signal %d - wait for child", sig);
  +            pid = wait(NULL);
  +            log2(ctx, NOTICE, "caught signal %d - child [%ld] terminated", sig, (long)pid);
  +            return;
  +        } else
               log1(ctx, PANIC, "CAUGHT SIGNAL %d - EXIT - NO MORE LOGGING", sig);
           l2_stream_destroy(ctx->l2);
       }
  -    va_end(ap);
       exit(ERR_EXECUTION);
   }
   
  +
   int main(int argc, char **argv)
   {
       int           rc;
  @@ -656,6 +664,7 @@
       }
   
       catchsignal(0, ctx);
  +    signal(SIGCHLD, (void(*)())catchsignal);
       signal(SIGHUP,  (void(*)())catchsignal);
       signal(SIGINT,  (void(*)())catchsignal);
       signal(SIGQUIT, (void(*)())catchsignal);
  Index: ossp-pkg/lmtp2nntp/test.sh
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 test.sh
  --- ossp-pkg/lmtp2nntp/test.sh	2001/09/13 12:50:46	1.2
  +++ ossp-pkg/lmtp2nntp/test.sh	2001/10/08 10:28:42	1.3
  @@ -16,10 +16,10 @@
   Message-Id: <200108141251.f7ECpmn74812@dev.de.cw.net>
   From: Thomas Lotterer <Thomas.Lotterer@example.com>
   Received: from cw.example.com (cw.example.com [10.1.1.32])
  -    by gateway.example.com (8.9.2/8.9.2/$Revision: 1.2 $) with SMTP id NAA08840
  +    by gateway.example.com (8.9.2/8.9.2/$Revision: 1.3 $) with SMTP id NAA08840
       for <thomas.lotterer@gateway.example.com>; Mon, 2 Apr 2001 13:20:25 +0200 (MET DST)
   Received: from history (history.example.org [195.143.102.41])
  -    by cw.example.com (8.11.0/8.11.0/$Revision: 1.2 $) with ESMTP id f32BKPb12235
  +    by cw.example.com (8.11.0/8.11.0/$Revision: 1.3 $) with ESMTP id f32BKPb12235
       for <thomas.lotterer@example.com>; Mon, 2 Apr 2001 13:20:25 +0200
   Received: from example.org (littlemua.example.org [195.143.103.160])
   	by history (8.8.8/8.8.8) with ESMTP id LAA12678;
  @@ -107,7 +107,7 @@
   prolog
   newmsg
   ./lmtp2nntp -? >${STDOUT} 2>${STDERR}
  -RC=`cat ${STDERR} | egrep -- '-b.*-d.*-g.*-h.*-m.*-n.*-s.*-l.*-v.*-w.*newsgroup' | wc -l`
  +RC=`cat ${STDERR} | egrep -- '-a.*-b.*-d.*-g.*-h.*-l.*-m.*-n.*-s.*-v.*-w.*newsgroup' | wc -l`
   if [ ${RC} -ne 1 -o -s ${STDOUT} ]; then
       echo "NO (got ${RC})"
       exit 1;

From ossp-cvs-owner@ossp.org  Mon Oct  8 13:38:40 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f98BccS85930; Mon, 8 Oct 2001 13:38:38 +0200 (CEST)
Date: Mon, 8 Oct 2001 13:38:38 +0200 (CEST)
Message-Id: <200110081138.f98BccS85930@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa .cvsignore configure.ac
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   08-Oct-2001 13:38:38
  Branch: HEAD                             Handle: 2001100812383800

  Modified files:
    ossp-pkg/sa             .cvsignore configure.ac

  Log:
    activate sa-config

  Summary:
    Revision    Changes     Path
    1.3         +1  -0      ossp-pkg/sa/.cvsignore
    1.4         +3  -1      ossp-pkg/sa/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/sa/.cvsignore
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 .cvsignore
  --- ossp-pkg/sa/.cvsignore	2001/10/02 18:37:19	1.2
  +++ ossp-pkg/sa/.cvsignore	2001/10/08 11:38:38	1.3
  @@ -8,3 +8,4 @@
   Makefile
   config.h
   sa_test
  +sa-config
  Index: ossp-pkg/sa/configure.ac
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 configure.ac
  --- ossp-pkg/sa/configure.ac	2001/10/08 10:03:54	1.3
  +++ ossp-pkg/sa/configure.ac	2001/10/08 11:38:38	1.4
  @@ -48,6 +48,8 @@
   AC_CHECK_SA
   
   AC_CONFIG_HEADERS(config.h)
  -AC_CONFIG_FILES(Makefile)
  +AC_CONFIG_FILES(Makefile sa-config)
   AC_OUTPUT
  +
  +chmod a+x sa-config
   

From ossp-cvs-owner@ossp.org  Mon Oct  8 13:43:27 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f98BhQ086555; Mon, 8 Oct 2001 13:43:26 +0200 (CEST)
Date: Mon, 8 Oct 2001 13:43:26 +0200 (CEST)
Message-Id: <200110081143.f98BhQ086555@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa Makefile.in VERSION
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   08-Oct-2001 13:43:26
  Branch: HEAD                             Handle: 2001100812432500

  Added files:
    ossp-pkg/sa             VERSION
  Modified files:
    ossp-pkg/sa             Makefile.in

  Log:
    add VERSION file

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-pkg/sa/Makefile.in
    1.1         +6  -0      ossp-pkg/sa/VERSION
  ____________________________________________________________________________

  Index: ossp-pkg/sa/Makefile.in
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 Makefile.in
  --- ossp-pkg/sa/Makefile.in	2001/10/08 10:03:54	1.4
  +++ ossp-pkg/sa/Makefile.in	2001/10/08 11:43:25	1.5
  @@ -97,7 +97,7 @@
   	-$(RM) ltmain.sh libtool.m4 config.guess config.sub
   
   version:
  -	$(SHTOOL) version -l txt -e VERSION
  +	$(SHTOOL) version -l txt -n "OSSP SA" -e VERSION
   
   dist: distclean
   	@$(SHTOOL) fixperm -v .; \
  Index: ossp-pkg/sa/VERSION
  ============================================================
  $ cvs update -p -r1.1 VERSION
  
    VERSION -- Version Information for OSSP SA (syntax: Text)
    [automatically generated and maintained by GNU shtool]
  
    This is OSSP SA, Version 0.1.0 (08-Oct-2001)
  

From ossp-cvs-owner@ossp.org  Mon Oct  8 15:22:00 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f98DLxc97875; Mon, 8 Oct 2001 15:21:59 +0200 (CEST)
Date: Mon, 8 Oct 2001 15:21:59 +0200 (CEST)
Message-Id: <200110081321.f98DLxc97875@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   08-Oct-2001 15:21:59
  Branch: HEAD                             Handle: 2001100814215800

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c

  Log:
    commit for getting rid of fd merger

  Summary:
    Revision    Changes     Path
    1.66        +25 -6      ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.65 -r1.66 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/08 10:28:42	1.65
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/08 13:21:58	1.66
  @@ -199,12 +199,29 @@
   {
       lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx;
       ssize_t rc;
  +    sa_rc_t saRc;
  +    size_t bufdone;
   
  -    rc = read(d, buf, nbytes);
  +    log0(ctx, DEBUG, "trace_lmtp_read() begin");
  +    if (ctx->saAltio == NULL) {
  +        log0(ctx, DEBUG, "read()");
  +        rc = read(d, buf, nbytes);
  +    }
  +    else {
  +        log0(ctx, DEBUG, "saread()");
  +        saRc = sa_read(ctx->saAltio, buf, nbytes, &bufdone);
  +        if (saRc != SA_OK) {
  +            log1(ctx, DEBUG, "LMTP saread error: %d", saRc);
  +            rc = -1;
  +        }
  +        else
  +            rc = (ssize_t)bufdone;
  +    }
       if (rc == -1)
           log0(ctx, TRACE, "LMTP read error: %m");
       else
           log3(ctx, TRACE, "LMTP %5d << \"%{text}D\"", rc, buf, rc);
  +    log1(ctx, DEBUG, "trace_lmtp_read() return, rc=%d", rc);
       return rc;
   }
   
  @@ -290,6 +307,7 @@
               log1(ctx, NOTICE, "caught signal %d - wait for child", sig);
               pid = wait(NULL);
               log2(ctx, NOTICE, "caught signal %d - child [%ld] terminated", sig, (long)pid);
  +            l2_stream_flush(ctx->l2);
               return;
           } else
               log1(ctx, PANIC, "CAUGHT SIGNAL %d - EXIT - NO MORE LOGGING", sig);
  @@ -383,7 +401,7 @@
                       fprintf(stderr, "%s:Error: Creating address failed for -i option (%d)\n", 
                               ctx->progname, rc);
                   }
  -                if ((rc = sa_addr_u2a(ctx->saaAltio, "%s", optarg)) != SA_OK) {
  +                if ((rc = sa_addr_u2a(ctx->saaAltio, "inet://%s", optarg)) != SA_OK) {
                       fprintf(stderr, "%s:Error: Parsing inputbind address failed for \"%s\" (%d)\n", 
                               ctx->progname, optarg, rc);
                       CU(ERR_EXECUTION);
  @@ -417,7 +435,7 @@
                       fprintf(stderr, "%s:Error: Creating address failed for -b option (%d)\n", 
                               ctx->progname, rc);
                   }
  -                if ((rc = sa_addr_u2a(ctx->saaBind, "tcp://%s:%s", ctx->cpBindh, ctx->cpBindp)) != SA_OK) {
  +                if ((rc = sa_addr_u2a(ctx->saaBind, "inet://%s:%s", ctx->cpBindh, ctx->cpBindp)) != SA_OK) {
                       fprintf(stderr, "%s:Error: Parsing bind address failed for \"%s:%s\" (%d)\n", 
                               ctx->progname, ctx->cpBindh, ctx->cpBindp, rc);
                       CU(ERR_EXECUTION);
  @@ -497,7 +515,7 @@
                           fprintf(stderr, "%s:Error: Creating address failed for -h option (%d)\n", 
                               ctx->progname, rc);
                       }
  -                    if ((rc = sa_addr_u2a(ctx->ns[ctx->nsc].saa, "tcp://%s:%s", 
  +                    if ((rc = sa_addr_u2a(ctx->ns[ctx->nsc].saa, "inet://%s:%s", 
                                        ctx->ns[ctx->nsc].h, ctx->ns[ctx->nsc].p)) != SA_OK) {
                           fprintf(stderr, "%s:Error: Parsing host address failed for \"%s:%s\" (%d)\n", 
                                   ctx->progname, ctx->ns[ctx->nsc].h, ctx->ns[ctx->nsc].p, rc);
  @@ -720,6 +738,8 @@
           pid = getpid();
           daemonize();
           log1(ctx, NOTICE, "startup daemonized, previous pid[%d]", pid); l2_stream_flush(ctx->l2);
  +        //FIXME sa_timeout(ctx->saAltio, SA_TIMEOUT_ALL,    3, 0);
  +        sa_timeout(ctx->saAltio, SA_TIMEOUT_ACCEPT, 0, 0);
           while ((rc = sa_accept(ctx->saAltio, &caddr, &csa)) == SA_OK) {
               sa_getfd(csa, &fd);
               l2_stream_flush(ctx->l2); /* must flush before fork() */
  @@ -735,7 +755,6 @@
               }
               log1(ctx, NOTICE, "startup new child process, parent pid[%d]", getppid());
               
  -            fprintf(stderr, "DEBUG: fd=%d\n", fd);
               /* initialize LMTP context */
               lmtp_io.ctx    = ctx;
               lmtp_io.select = NULL;
  @@ -908,7 +927,7 @@
   
           if (bOk && (ctx->option_waittime > 0)) {
               log1(ctx, DEBUG, "timeout configured through waittime=%d", ctx->option_waittime);
  -            sa_timeout(ctx->ns[i].sa, ctx->option_waittime, 0);
  +            sa_timeout(ctx->ns[i].sa, SA_TIMEOUT_ALL, ctx->option_waittime, 0);
               }
   
           if (bOk) {

From ossp-cvs-owner@ossp.org  Mon Oct  8 15:37:09 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f98Db8299438; Mon, 8 Oct 2001 15:37:08 +0200 (CEST)
Date: Mon, 8 Oct 2001 15:37:08 +0200 (CEST)
Message-Id: <200110081337.f98Db8299438@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   08-Oct-2001 15:37:08
  Branch: HEAD                             Handle: 2001100814370800

  Modified files:
    ossp-pkg/sa             sa.c

  Log:
    clone parameters on sa_accept()

  Summary:
    Revision    Changes     Path
    1.13        +25 -0      ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 sa.c
  --- ossp-pkg/sa/sa.c	2001/10/08 10:03:54	1.12
  +++ ossp-pkg/sa/sa.c	2001/10/08 13:37:08	1.13
  @@ -118,6 +118,13 @@
           (sa)->scSysCall.sc_##fn.fctx = (ctx); \
       } while(0)
   
  +/* system call structure assignment macro */
  +#define SA_SC_COPY(sa1, sa2, fn) \
  +    do { \
  +        (sa1)->scSysCall.sc_##fn.fptr.any = (sa2)->scSysCall.sc_##fn.fptr.any; \
  +        (sa1)->scSysCall.sc_##fn.fctx     = (sa2)->scSysCall.sc_##fn.fctx; \
  +    } while(0)
  +
   /* system call function call macros */
   #define SA_SC_CALL_0(sa, fn) \
       (   (sa)->scSysCall.sc_##fn.fctx != NULL \
  @@ -1105,6 +1112,7 @@
       } sa_buf;
       socklen_t sa_len;
       int s;
  +    int i;
   
       /* argument sanity check(s) */
       if (sa == NULL || caddr == NULL || csa == NULL)
  @@ -1150,7 +1158,24 @@
           sa_addr_destroy(*caddr);
           return rv;
       }
  +
  +    /* fill-in child socket */
       (*csa)->fdSocket = s;
  +
  +    /* copy-over original system calls */
  +    SA_SC_COPY((*csa), sa, connect);
  +    SA_SC_COPY((*csa), sa, accept);
  +    SA_SC_COPY((*csa), sa, select);
  +    SA_SC_COPY((*csa), sa, read);
  +    SA_SC_COPY((*csa), sa, write);
  +    SA_SC_COPY((*csa), sa, recvfrom);
  +    SA_SC_COPY((*csa), sa, sendto);
  +
  +    /* copy-over original timeout values */
  +    for (i = 0; i < (sizeof(sa->tvTimeout)/sizeof(sa->tvTimeout[0])); i++) {
  +        (*csa)->tvTimeout[i].tv_sec  = sa->tvTimeout[i].tv_sec;
  +        (*csa)->tvTimeout[i].tv_usec = sa->tvTimeout[i].tv_usec;
  +    }
   
       return SA_OK;
   }

From ossp-cvs-owner@ossp.org  Mon Oct  8 15:40:24 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f98DeN299994; Mon, 8 Oct 2001 15:40:23 +0200 (CEST)
Date: Mon, 8 Oct 2001 15:40:23 +0200 (CEST)
Message-Id: <200110081340.f98DeN299994@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp.c lmtp.h lmtp2nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   08-Oct-2001 15:40:23
  Branch: HEAD                             Handle: 2001100814402200

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp.c lmtp.h lmtp2nntp.c

  Log:
    Change LMTP library from using a file-descriptor (int) to using a opaque
    handle (void *) and use this new feature to support STDIN/STDOUT and SA.

  Summary:
    Revision    Changes     Path
    1.23        +16 -27     ossp-pkg/lmtp2nntp/lmtp.c
    1.11        +10 -4      ossp-pkg/lmtp2nntp/lmtp.h
    1.67        +35 -37     ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp.c
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 lmtp.c
  --- ossp-pkg/lmtp2nntp/lmtp.c	2001/09/07 15:02:08	1.22
  +++ ossp-pkg/lmtp2nntp/lmtp.c	2001/10/08 13:40:22	1.23
  @@ -66,25 +66,20 @@
       lmtp_io_t         io;       /* select, read, write functions */
       lmtp_readline_t   rl;       /* a function to read in a single line */
       lmtp_dispatch_t **dispatch; /* LMTP commands to be dispatched */
  -    int               rfd;      /* file descriptor for reading */
  -    int               wfd;      /* file descriptor for writing */
   };
   
  -static int lmtp_select(void *ctx, int nfds, fd_set *rfds, fd_set *wfds, fd_set *efds, struct timeval *tv)
  +ssize_t lmtp_fd_read(void *_ctx, void *buf, size_t buflen)
   {
  -    return select(nfds, rfds, wfds, efds, tv);
  +    lmtp_fd_t *ctx = (lmtp_fd_t *)_ctx;
  +    return read(ctx->fd, buf, buflen);
   }
   
  -static ssize_t lmtp_read(void *ctx, int fd, void *buf, size_t buflen)
  +ssize_t lmtp_fd_write(void *_ctx, const void *buf, size_t buflen)
   {
  -    return read(fd, buf, buflen);
  +    lmtp_fd_t *ctx = (lmtp_fd_t *)_ctx;
  +    return write(ctx->fd, buf, buflen);
   }
   
  -static ssize_t lmtp_write(void *ctx, int fd, const void *buf, size_t buflen)
  -{
  -    return write(fd, buf, buflen);
  -}
  -
   static int verbindex(lmtp_t *lmtp, char *verb)
   {
       /* returns the index of the verb or -1 if verb not registered */
  @@ -108,7 +103,7 @@
       return rc;
   }
   
  -lmtp_t *lmtp_create(int rfd, int wfd, lmtp_io_t *io)
  +lmtp_t *lmtp_create(lmtp_io_t *io)
   {
       /*  create a lmtp structure allocating memory for it and initializing it.
        *  A lmtp_cb_default() callback is registered for the default "" verb.
  @@ -124,23 +119,17 @@
       if ((lmtp = (lmtp_t *)malloc(sizeof(lmtp_t))) == NULL) 
           return NULL;
   
  -    if (io == NULL) {
  -        lmtp->io.ctx    = NULL;
  -        lmtp->io.select = lmtp_select;
  -        lmtp->io.read   = lmtp_read;
  -        lmtp->io.write  = lmtp_write;
  -    } else {
  -        lmtp->io.ctx    = io->ctx;
  -        lmtp->io.select = io->select ? io->select : lmtp_select;
  -        lmtp->io.read   = io->read   ? io->read   : lmtp_read;
  -        lmtp->io.write  = io->write  ? io->write  : lmtp_write;
  -    }
  +    if (io == NULL) 
  +        return NULL;
  +
  +    lmtp->io.ctx    = io->ctx;
  +    lmtp->io.select = io->select;
  +    lmtp->io.read   = io->read;
  +    lmtp->io.write  = io->write;
   
       lmtp->rl.rl_cnt = 0;
       lmtp->rl.rl_bufptr = NULL;
       lmtp->rl.rl_buf[0] = NUL;
  -    lmtp->rfd = rfd;
  -    lmtp->wfd = wfd;
       
       if ((lmtp->dispatch = (lmtp_dispatch_t **)malloc(sizeof(void *)*LMTP_MAXVERBS)) == NULL)
           return NULL;
  @@ -181,7 +170,7 @@
           /* fetch one character (but read more) */
           if (rl->rl_cnt <= 0) {
               do {
  -                rl->rl_cnt = lmtp->io.read(lmtp->io.ctx, lmtp->rfd, rl->rl_buf, LMTP_LINE_MAXLEN);
  +                rl->rl_cnt = lmtp->io.read(lmtp->io.ctx, rl->rl_buf, LMTP_LINE_MAXLEN);
               } while (rl->rl_cnt == -1 && errno == EINTR);
               if (rl->rl_cnt == -1)
                   return LMTP_ERR_SYSTEM;
  @@ -370,7 +359,7 @@
           formatbuf[len++] = '\r';
           formatbuf[len++] = '\n';
           do {
  -            rv = lmtp->io.write(lmtp->io.ctx, lmtp->wfd, formatbuf, len);
  +            rv = lmtp->io.write(lmtp->io.ctx, formatbuf, len);
           } while (rv == -1 && errno == EINTR);
           if (rv == -1)
               return LMTP_ERR_SYSTEM;
  Index: ossp-pkg/lmtp2nntp/lmtp.h
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 lmtp.h
  --- ossp-pkg/lmtp2nntp/lmtp.h	2001/09/07 15:02:08	1.10
  +++ ossp-pkg/lmtp2nntp/lmtp.h	2001/10/08 13:40:22	1.11
  @@ -37,9 +37,9 @@
   
   typedef struct {
       void    *ctx;
  -    int     (*select)(void *, int, fd_set *, fd_set *, fd_set *, struct timeval *);
  -    ssize_t (*read)(void *, int, void *, size_t);
  -    ssize_t (*write)(void *, int, const void *, size_t);
  +    int     (*select)(void *, fd_set *, fd_set *, fd_set *, struct timeval *);
  +    ssize_t (*read)(void *, void *, size_t);
  +    ssize_t (*write)(void *, const void *, size_t);
   } lmtp_io_t;
   
   typedef struct {
  @@ -63,9 +63,13 @@
       LMTP_ERR_UNKNOWN
   } lmtp_rc_t;
   
  +typedef struct {
  +    int fd;
  +} lmtp_fd_t;
  +
   typedef lmtp_rc_t (*lmtp_cb_t)(lmtp_t *, lmtp_io_t *, lmtp_req_t *, void *);
   
  -lmtp_t     *lmtp_create  (int, int, lmtp_io_t *);
  +lmtp_t     *lmtp_create  (lmtp_io_t *);
   void        lmtp_destroy (lmtp_t *);
   lmtp_rc_t   lmtp_readline(lmtp_t *, char *, size_t);
   lmtp_rc_t   lmtp_readmsg (lmtp_t *, char **, size_t);
  @@ -74,6 +78,8 @@
   char       *lmtp_error   (lmtp_rc_t);
   lmtp_rc_t   lmtp_register(lmtp_t *, char *, lmtp_cb_t, void *, lmtp_cb_t *, void **);
   lmtp_rc_t   lmtp_loop    (lmtp_t *);
  +ssize_t     lmtp_fd_read (void *, void *, size_t);
  +ssize_t     lmtp_fd_write(void *, const void *, size_t);
   
   #endif /* __LMTP_H__ */
   
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.66 -r1.67 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/08 13:21:58	1.66
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/08 13:40:22	1.67
  @@ -141,6 +141,10 @@
       char           *cpBindp;
       sa_addr_t      *saaBind;
       sa_t           *saBind;
  +    sa_addr_t      *saaIO;
  +    sa_t           *saIO;
  +    int             fdIOi;
  +    int             fdIOo;
       int             nsc;
       struct ns       ns[MAXNEWSSERVICES];
       char           *azGroupargs;
  @@ -195,28 +199,21 @@
       return;
   }
   
  -static ssize_t trace_lmtp_read(void *_ctx, int d, void *buf, size_t nbytes)
  +static ssize_t hook_lmtp_read(void *_ctx, void *buf, size_t nbytes)
   {
       lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx;
       ssize_t rc;
  -    sa_rc_t saRc;
  -    size_t bufdone;
  +    size_t n;
  +    sa_rc_t rv;
   
  -    log0(ctx, DEBUG, "trace_lmtp_read() begin");
  -    if (ctx->saAltio == NULL) {
  -        log0(ctx, DEBUG, "read()");
  -        rc = read(d, buf, nbytes);
  -    }
  -    else {
  -        log0(ctx, DEBUG, "saread()");
  -        saRc = sa_read(ctx->saAltio, buf, nbytes, &bufdone);
  -        if (saRc != SA_OK) {
  -            log1(ctx, DEBUG, "LMTP saread error: %d", saRc);
  +    if (ctx->saIO != NULL) {
  +        if ((rv = sa_read(ctx->saIO, buf, nbytes, &n)) != SA_OK)
               rc = -1;
  -        }
           else
  -            rc = (ssize_t)bufdone;
  +            rc = (ssize_t)n;
       }
  +    else
  +        rc = read(ctx->fdIOi, buf, nbytes);
       if (rc == -1)
           log0(ctx, TRACE, "LMTP read error: %m");
       else
  @@ -225,13 +222,22 @@
       return rc;
   }
   
  -static ssize_t trace_lmtp_write(void *_ctx, int d, const void *buf, size_t nbytes)
  +static ssize_t hook_lmtp_write(void *_ctx, const void *buf, size_t nbytes)
   {
       lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx;
       ssize_t rc;
  +    size_t n;
  +    sa_rc_t rv;
   
       log3(ctx, TRACE, "LMTP %5d >> \"%{text}D\"", nbytes, buf, nbytes);
  -    rc = write(d, buf, nbytes);
  +    if (ctx->saIO != NULL) {
  +        if ((rv = sa_write(ctx->saIO, buf, nbytes, &n)) != SA_OK)
  +            rc = -1;
  +        else
  +            rc = (ssize_t)n;
  +    }
  +    else
  +        rc = write(ctx->fdIOo, buf, nbytes);
       if (rc == -1)
           log0(ctx, TRACE, "LMTP write error: %m");
       return rc;
  @@ -332,9 +338,6 @@
       l2_channel_t *chPrefix;
       l2_channel_t *chBuf;
       l2_channel_t *chFile;
  -    sa_addr_t    *caddr;
  -    sa_t         *csa;
  -    int           fd;
       pid_t         pid;
   
       /* library version check (run-time) */
  @@ -698,13 +701,12 @@
       /* loop for LMTP protocol with support for alternate io through daemon */
       if (ctx->saAltio == NULL) {
           /* initialize LMTP context */
  +        ctx->fdIOi = STDIN_FILENO;
  +        ctx->fdIOo = STDOUT_FILENO;
           lmtp_io.ctx    = ctx;
  -        lmtp_io.select = NULL;
  -        lmtp_io.read   = trace_lmtp_read;
  -        lmtp_io.write  = trace_lmtp_write;
  -        if ((lmtp = lmtp_create(STDIN_FILENO, STDOUT_FILENO,
  -                                (ctx->option_logfile && (ctx->option_levelmask >= L2_LEVEL_TRACE)) ?
  -                                 &lmtp_io : NULL )) == NULL) {
  +        lmtp_io.read   = hook_lmtp_read;
  +        lmtp_io.write  = hook_lmtp_write;
  +        if ((lmtp = lmtp_create(&lmtp_io)) == NULL) {
               fprintf(stderr, "%s:Error: Unable to initialize LMTP library\n", ctx->progname);
               CU(ERR_EXECUTION);
           }
  @@ -738,10 +740,9 @@
           pid = getpid();
           daemonize();
           log1(ctx, NOTICE, "startup daemonized, previous pid[%d]", pid); l2_stream_flush(ctx->l2);
  -        //FIXME sa_timeout(ctx->saAltio, SA_TIMEOUT_ALL,    3, 0);
  +        sa_timeout(ctx->saAltio, SA_TIMEOUT_ALL,    9, 0);
           sa_timeout(ctx->saAltio, SA_TIMEOUT_ACCEPT, 0, 0);
  -        while ((rc = sa_accept(ctx->saAltio, &caddr, &csa)) == SA_OK) {
  -            sa_getfd(csa, &fd);
  +        while ((rc = sa_accept(ctx->saAltio, &ctx->saaIO, &ctx->saIO)) == SA_OK) {
               l2_stream_flush(ctx->l2); /* must flush before fork() */
               pid = fork();
               if (pid == -1) {
  @@ -750,19 +751,17 @@
               }
               if (pid != 0) {
                   log1(ctx, INFO, "daemon forked process, new child pid[%d]", pid); l2_stream_flush(ctx->l2);
  -                close(fd);
  +                sa_destroy(ctx->saIO);
  +                sa_addr_destroy(ctx->saaIO);
                   continue;
               }
               log1(ctx, NOTICE, "startup new child process, parent pid[%d]", getppid());
               
               /* initialize LMTP context */
               lmtp_io.ctx    = ctx;
  -            lmtp_io.select = NULL;
  -            lmtp_io.read   = trace_lmtp_read;
  -            lmtp_io.write  = trace_lmtp_write;
  -            if ((lmtp = lmtp_create(fd, fd,
  -                                    (ctx->option_logfile && (ctx->option_levelmask >= L2_LEVEL_TRACE)) ?
  -                                     &lmtp_io : NULL )) == NULL) {
  +            lmtp_io.read   = hook_lmtp_read;
  +            lmtp_io.write  = hook_lmtp_write;
  +            if ((lmtp = lmtp_create(&lmtp_io)) == NULL) {
                   fprintf(stderr, "%s:Error: Unable to initialize LMTP library\n", ctx->progname);
                   CU(ERR_EXECUTION);
               }
  @@ -792,7 +791,6 @@
               lmtp_gfs_quit(ctx);
               lmtp_gfs_lhlo(ctx);
               lmtp_destroy(lmtp);
  -            close(fd);
               CU(0);
           }
       }

From ossp-cvs-owner@ossp.org  Mon Oct  8 15:50:02 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f98Do1e01349; Mon, 8 Oct 2001 15:50:01 +0200 (CEST)
Date: Mon, 8 Oct 2001 15:50:01 +0200 (CEST)
Message-Id: <200110081350.f98Do1e01349@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   08-Oct-2001 15:50:01
  Branch: HEAD                             Handle: 2001100814500100

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.pod

  Log:
    fix manpage

  Summary:
    Revision    Changes     Path
    1.23        +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 lmtp2nntp.pod
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/10/04 16:07:16	1.22
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/10/08 13:50:01	1.23
  @@ -117,7 +117,7 @@
   
   Alternate IO allows reading and writing from/to a UNIX domain or TCP sockets
   instead stdin/stdout. This places the program in daemon mode. The syntax for
  -altio is either "UNIX://path/to/socket" or "TCP://address:port".
  +altio is either "unix:/path/to/socket" or "inet://address:port".
   
   =item B<-m> I<mailfrom>
   

From ossp-cvs-owner@ossp.org  Mon Oct  8 16:30:13 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f98EUCl06026; Mon, 8 Oct 2001 16:30:12 +0200 (CEST)
Date: Mon, 8 Oct 2001 16:30:12 +0200 (CEST)
Message-Id: <200110081430.f98EUCl06026@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c lmtp2nntp.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   08-Oct-2001 16:30:12
  Branch: HEAD                             Handle: 2001100815301100

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c lmtp2nntp.pod

  Log:
    -a option now supports both unix:/ and inet:// URLs. It tries to guess missing
    prefixes.

  Summary:
    Revision    Changes     Path
    1.68        +23 -5      ossp-pkg/lmtp2nntp/lmtp2nntp.c
    1.24        +3  -1      ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.67 -r1.68 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/08 13:40:22	1.67
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/08 14:30:11	1.68
  @@ -401,13 +401,31 @@
           switch (i) {
               case 'a': /*POD [B<-a> I<altio>] */
                   if ((rc = sa_addr_create(&ctx->saaAltio)) != SA_OK) {
  -                    fprintf(stderr, "%s:Error: Creating address failed for -i option (%d)\n", 
  +                    fprintf(stderr, "%s:Error: Creating address failed for -a option (%d)\n", 
                               ctx->progname, rc);
                   }
  -                if ((rc = sa_addr_u2a(ctx->saaAltio, "inet://%s", optarg)) != SA_OK) {
  -                    fprintf(stderr, "%s:Error: Parsing inputbind address failed for \"%s\" (%d)\n", 
  -                            ctx->progname, optarg, rc);
  -                    CU(ERR_EXECUTION);
  +                if ((strncasecmp(optarg, "inet://", 7) == 0) ||
  +                    (strncasecmp(optarg, "unix:/" , 6) == 0)   ) {
  +                    if ((rc = sa_addr_u2a(ctx->saaAltio, "%s", optarg)) != SA_OK) {
  +                        fprintf(stderr, "%s:Error: Parsing alternate IO URL failed for \"%s\" (%d)\n", 
  +                                ctx->progname, optarg, rc);
  +                        CU(ERR_EXECUTION);
  +                    }
  +                } else {
  +                    if (optarg[0] == '/') {
  +                        if ((rc = sa_addr_u2a(ctx->saaAltio, "unix:%s", optarg)) != SA_OK) {
  +                            fprintf(stderr, "%s:Error: Parsing alternate IO guessing UNIX domain socket failed for \"%s\" (%d)\n", 
  +                                    ctx->progname, optarg, rc);
  +                            CU(ERR_EXECUTION);
  +                        }
  +                    }
  +                    else {
  +                        if ((rc = sa_addr_u2a(ctx->saaAltio, "inet://%s", optarg)) != SA_OK) {
  +                            fprintf(stderr, "%s:Error: Parsing alternate IO guessing INET socket failed for \"%s\" (%d)\n", 
  +                                    ctx->progname, optarg, rc);
  +                            CU(ERR_EXECUTION);
  +                        }
  +                    }
                   }
                   if ((rc = sa_create(&ctx->saAltio)) != SA_OK) {
                       fprintf(stderr, "%s:Error: Creating TCP socket failed for \"%s\": %s\n", 
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 lmtp2nntp.pod
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/10/08 13:50:01	1.23
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/10/08 14:30:11	1.24
  @@ -117,7 +117,9 @@
   
   Alternate IO allows reading and writing from/to a UNIX domain or TCP sockets
   instead stdin/stdout. This places the program in daemon mode. The syntax for
  -altio is either "unix:/path/to/socket" or "inet://address:port".
  +altio is either "unix:/path/to/socket" or "inet://address:port". If "unix:/"
  +and "inet://" prefixes are ommited the program tries to guess the desired mode
  +based on the existing of a leading slash.
   
   =item B<-m> I<mailfrom>
   

From ossp-cvs-owner@ossp.org  Mon Oct  8 16:47:32 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f98ElVM07692; Mon, 8 Oct 2001 16:47:31 +0200 (CEST)
Date: Mon, 8 Oct 2001 16:47:31 +0200 (CEST)
Message-Id: <200110081447.f98ElVM07692@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa .cvsignore acconfig.h configure.ac sa.ac sa.h ...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   08-Oct-2001 16:47:31
  Branch: HEAD                             Handle: 197001010100001002548850

  Added files:
    ossp-pkg/sa             acconfig.h sa.h.in
  Modified files:
    ossp-pkg/sa             .cvsignore configure.ac sa.ac
  Removed files:
    ossp-pkg/sa             sa.h

  Log:
    make SA more portable (now also works under Tru64 5.0)

  Summary:
    Revision    Changes     Path
    1.4         +1  -0      ossp-pkg/sa/.cvsignore
    1.1         +4  -0      ossp-pkg/sa/acconfig.h
    1.5         +3  -3      ossp-pkg/sa/configure.ac
    1.4         +84 -30     ossp-pkg/sa/sa.ac
    NONE        +0  -173    ossp-pkg/sa/sa.h
    1.1         +176 -0     ossp-pkg/sa/sa.h.in
  ____________________________________________________________________________

  Index: ossp-pkg/sa/.cvsignore
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 .cvsignore
  --- ossp-pkg/sa/.cvsignore	2001/10/08 11:38:38	1.3
  +++ ossp-pkg/sa/.cvsignore	2001/10/08 14:47:30	1.4
  @@ -9,3 +9,4 @@
   config.h
   sa_test
   sa-config
  +sa.h
  Index: ossp-pkg/sa/acconfig.h
  ============================================================
  $ cvs update -p -r1.1 acconfig.h
  
  /* whether socklen_t exists */
  #undef HAVE_SOCKLEN_T
  
  Index: ossp-pkg/sa/configure.ac
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 configure.ac
  --- ossp-pkg/sa/configure.ac	2001/10/08 11:38:38	1.4
  +++ ossp-pkg/sa/configure.ac	2001/10/08 14:47:30	1.5
  @@ -30,7 +30,7 @@
   
   AC_PREREQ(2.52)
   AC_REVISION(1.0)
  -AC_INIT(sa.h)
  +AC_INIT(README)
   
   AC_DIVERT_PUSH(NOTICE)
   V=`./shtool version -l txt -d long VERSION`
  @@ -45,10 +45,10 @@
   AC_PROG_LIBTOOL
   
   sinclude(sa.ac)
  -AC_CHECK_SA
  +SA_CHECK_ALL
   
   AC_CONFIG_HEADERS(config.h)
  -AC_CONFIG_FILES(Makefile sa-config)
  +AC_CONFIG_FILES(sa.h Makefile sa-config)
   AC_OUTPUT
   
   chmod a+x sa-config
  Index: ossp-pkg/sa/sa.ac
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 sa.ac
  --- ossp-pkg/sa/sa.ac	2001/10/08 10:03:54	1.3
  +++ ossp-pkg/sa/sa.ac	2001/10/08 14:47:30	1.4
  @@ -1,34 +1,85 @@
  -##
  -##  SA - OSSP Socket Abstraction Library
  -##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -##
  -##  This file is part of OSSP SA, a socket abstraction library which
  -##  can be found at http://www.ossp.org/pkg/sa/.
  -##
  -##  Permission to use, copy, modify, and distribute this software for
  -##  any purpose with or without fee is hereby granted, provided that
  -##  the above copyright notice and this permission notice appear in all
  -##  copies.
  -##
  -##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  -##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  -##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  -##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  -##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  -##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  -##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  -##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  -##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  -##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  -##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  -##  SUCH DAMAGE.
  -##
  -##  sa.ac: socket abstraction Autoconf checks
  -##
  +dnl ##
  +dnl ##  SA - OSSP Socket Abstraction Library
  +dnl ##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##
  +dnl ##  This file is part of OSSP SA, a socket abstraction library which
  +dnl ##  can be found at http://www.ossp.org/pkg/sa/.
  +dnl ##
  +dnl ##  Permission to use, copy, modify, and distribute this software for
  +dnl ##  any purpose with or without fee is hereby granted, provided that
  +dnl ##  the above copyright notice and this permission notice appear in all
  +dnl ##  copies.
  +dnl ##
  +dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +dnl ##  SUCH DAMAGE.
  +dnl ##
  +dnl ##  sa.ac: socket abstraction Autoconf checks
  +dnl ##
   
  -AC_DEFUN(AC_CHECK_SA,[
  +dnl #   Check for an ANSI C typedef in a header
  +dnl #   configure.in:
  +dnl #     SA_CHECK_TYPEDEF(<typedef>, <header>)
  +dnl #   acconfig.h:
  +dnl #     #undef HAVE_<typedef>
  +
  +AC_DEFUN(SA_CHECK_TYPEDEF,[dnl
  +    AC_REQUIRE([AC_HEADER_STDC])dnl
  +    AC_MSG_CHECKING(for typedef $1)
  +    AC_CACHE_VAL(ac_cv_typedef_$1,[
  +        AC_EGREP_CPP(dnl
  +changequote(<<,>>)dnl
  +<<(^|[^a-zA-Z_0-9])$1[^a-zA-Z_0-9]>>dnl
  +changequote([,]), [
  +#include <$2>], 
  +            ac_cv_typedef_$1=yes, 
  +            ac_cv_typedef_$1=no
  +        )
  +    ])dnl
  +    AC_MSG_RESULT($ac_cv_typedef_$1)
  +    if test $ac_cv_typedef_$1 = yes; then
  +        AC_DEFINE(HAVE_[]translit($1, [a-z], [A-Z]))
  +    fi
  +])
  +
  +dnl #   Check for socklen_t
  +dnl #   configure.in:
  +dnl #     SA_CHECK_SOCKLENTYPE
  +
  +AC_DEFUN(SA_CHECK_SOCKLENTYPE,[dnl
  +    SA_CHECK_TYPEDEF(socklen_t, sys/socket.h)
  +    AC_MSG_CHECKING(for fallback socklen_t)
  +    AC_CACHE_VAL(ac_cv_check_socklentype, [
  +        if test ".$ac_cv_typedef_socklen_t" = .yes; then
  +            ac_cv_check_socklentype='socklen_t'
  +        else
  +            ac_cv_check_socklentype='int'
  +        fi
  +    ])
  +    AC_MSG_RESULT([$ac_cv_check_socklentype])
  +    SA_FALLBACK_SOCKLEN_T="typedef ${ac_cv_check_socklentype} socklen_t;"
  +    if test ".$ac_cv_check_socklentype" = ".socklen_t"; then
  +        SA_FALLBACK_SOCKLEN_T="/* $SA_FALLBACK_SOCKLEN_T */"
  +    fi
  +    AC_SUBST(SA_FALLBACK_SOCKLEN_T)
  +])
  +
  +dnl #   Check for anything OSSP SA wants to know
  +dnl #   configure.in:
  +dnl #     SA_CHECK_ALL
  +
  +AC_DEFUN(SA_CHECK_ALL,[
       #   make sure libnsl and libsocket are linked in if they exist
       AC_CHECK_LIB(nsl, gethostname)
       if test ".`echo $LIBS | grep nsl`" = .; then
  @@ -41,5 +92,8 @@
   
       #   check for system functions
       AC_CHECK_FUNCS(inet_aton inet_pton inet_ntoa inet_ntop snprintf)
  +
  +    dnl # check for network/socket size type
  +    SA_CHECK_SOCKLENTYPE
   ])
   
    Index: ossp-pkg/sa/sa.h.in
  ============================================================
  $ cvs update -p -r1.1 sa.h.in
  /*
  **  SA - OSSP Socket Abstraction Library
  **  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP SA, a socket abstraction library which
  **  can be found at http://www.ossp.org/pkg/sa/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  sa.h: socket abstraction API
  */
  
  #ifndef __SA_H__
  #define __SA_H__
  
  /* system definitions of "size_t", "socklen_t", "struct sockaddr *" */
  #include <string.h>
  #include <sys/types.h>
  #include <sys/socket.h>
  
  /* embedding support */
  #ifdef SA_PREFIX
  #if defined(__STDC__) || defined(__cplusplus)
  #define __SA_CONCAT(x,y) x ## y
  #define SA_CONCAT(x,y) __SA_CONCAT(x,y)
  #else
  #define __SA_CONCAT(x) x
  #define SA_CONCAT(x,y) __SA_CONCAT(x)y
  #endif
  #define sa_addr_st      SA_CONCAT(SA_PREFIX,sa_addr_st)
  #define sa_addr_t       SA_CONCAT(SA_PREFIX,sa_addr_t)
  #define sa_rc_t         SA_CONCAT(SA_PREFIX,sa_rc_t)
  #define sa_st           SA_CONCAT(SA_PREFIX,sa_st)
  #define sa_t            SA_CONCAT(SA_PREFIX,sa_t)
  #define sa_addr_create  SA_CONCAT(SA_PREFIX,sa_addr_create)
  #define sa_addr_destroy SA_CONCAT(SA_PREFIX,sa_addr_destroy)
  #define sa_addr_u2a     SA_CONCAT(SA_PREFIX,sa_addr_u2a)
  #define sa_addr_s2a     SA_CONCAT(SA_PREFIX,sa_addr_s2a)
  #define sa_addr_a2u     SA_CONCAT(SA_PREFIX,sa_addr_a2u)
  #define sa_addr_a2s     SA_CONCAT(SA_PREFIX,sa_addr_a2s)
  #define sa_create       SA_CONCAT(SA_PREFIX,sa_create)
  #define sa_destroy      SA_CONCAT(SA_PREFIX,sa_destroy)
  #define sa_type         SA_CONCAT(SA_PREFIX,sa_type)
  #define sa_timeout      SA_CONCAT(SA_PREFIX,sa_timeout)
  #define sa_buffers      SA_CONCAT(SA_PREFIX,sa_buffers)
  #define sa_bind         SA_CONCAT(SA_PREFIX,sa_bind)
  #define sa_connect      SA_CONCAT(SA_PREFIX,sa_connect)
  #define sa_listen       SA_CONCAT(SA_PREFIX,sa_listen)
  #define sa_accept       SA_CONCAT(SA_PREFIX,sa_accept)
  #define sa_getremote    SA_CONCAT(SA_PREFIX,sa_getremote)
  #define sa_getlocal     SA_CONCAT(SA_PREFIX,sa_getlocal)
  #define sa_getfd        SA_CONCAT(SA_PREFIX,sa_getfd)
  #define sa_shutdown     SA_CONCAT(SA_PREFIX,sa_shutdown)
  #define sa_read         SA_CONCAT(SA_PREFIX,sa_read)
  #define sa_readln       SA_CONCAT(SA_PREFIX,sa_readln)
  #define sa_write        SA_CONCAT(SA_PREFIX,sa_write)
  #define sa_writef       SA_CONCAT(SA_PREFIX,sa_writef)
  #define sa_flush        SA_CONCAT(SA_PREFIX,sa_flush)
  #define sa_recv         SA_CONCAT(SA_PREFIX,sa_recv)
  #define sa_send         SA_CONCAT(SA_PREFIX,sa_send)
  #endif
  
  /* fallback for POSIX socklen_t */
  @SA_FALLBACK_SOCKLEN_T@
  
  /* socket address abstraction object type */
  struct sa_addr_st;
  typedef struct sa_addr_st sa_addr_t;
  
  /* socket abstraction object type */
  struct sa_st;
  typedef struct sa_st sa_t;
  
  /* socket connection types */
  typedef enum {
      SA_TYPE_STREAM,
      SA_TYPE_DATAGRAM
  } sa_type_t;
  
  /* return codes */
  typedef enum {
      SA_OK,      /* everything ok */
      SA_ERR_ARG, /* invalid argument (wrong parameter) */
      SA_ERR_USE, /* invalid use (wrong context) */
      SA_ERR_MEM, /* out of memory */
      SA_ERR_SYS, /* system error (see errno) */
      SA_ERR_EOF, /* end of file/socket communication */
      SA_ERR_INT  /* internal error */
  } sa_rc_t;
  
  /* list of timeouts */
  typedef enum {
      SA_TIMEOUT_ALL      = -1,
      SA_TIMEOUT_ACCEPT   = 0,
      SA_TIMEOUT_CONNECT  = 1,
      SA_TIMEOUT_READ     = 2,
      SA_TIMEOUT_WRITE    = 3,
      SA_TIMEOUT_RECV     = 4,
      SA_TIMEOUT_SEND     = 5
  } sa_timeout_t;
  
  /* list of system calls */
  typedef enum {
      SA_SYSCALL_CONNECT,
      SA_SYSCALL_ACCEPT,
      SA_SYSCALL_SELECT,
      SA_SYSCALL_READ,
      SA_SYSCALL_WRITE,
      SA_SYSCALL_RECVFROM,
      SA_SYSCALL_SENDTO
  } sa_syscall_t;
  
  /* error handling operations */
  sa_rc_t sa_error        (sa_t *sa, sa_rc_t rv, char **str);
  
  /* address object operations */
  sa_rc_t sa_addr_create  (sa_addr_t **saa);
  sa_rc_t sa_addr_destroy (sa_addr_t *saa);
  
  /* address operations */
  sa_rc_t sa_addr_u2a     (sa_addr_t *saa, const char *uri, ...);
  sa_rc_t sa_addr_s2a     (sa_addr_t *saa, const struct sockaddr *sabuf, socklen_t salen);
  sa_rc_t sa_addr_a2u     (sa_addr_t *saa, char **uri);
  sa_rc_t sa_addr_a2s     (sa_addr_t *saa, struct sockaddr **sabuf, socklen_t *salen);
  
  /* socket object operations */
  sa_rc_t sa_create       (sa_t **sa);
  sa_rc_t sa_destroy      (sa_t *sa);
  
  /* socket parameter operations */
  sa_rc_t sa_type         (sa_t *sa, sa_type_t type);
  sa_rc_t sa_timeout      (sa_t *sa, sa_timeout_t id, long sec, long usec);
  sa_rc_t sa_buffers      (sa_t *sa, size_t rsize, size_t wsize);
  sa_rc_t sa_syscall      (sa_t *sa, sa_syscall_t id, void (*fptr)(), void *fctx);
  
  /* socket connection operations */
  sa_rc_t sa_bind         (sa_t *sa, sa_addr_t *laddr);
  sa_rc_t sa_connect      (sa_t *sa, sa_addr_t *raddr);
  sa_rc_t sa_listen       (sa_t *sa, int backlog);
  sa_rc_t sa_accept       (sa_t *sa, sa_addr_t **caddr, sa_t **csa);
  sa_rc_t sa_getremote    (sa_t *sa, sa_addr_t **raddr);
  sa_rc_t sa_getlocal     (sa_t *sa, sa_addr_t **laddr);
  sa_rc_t sa_getfd        (sa_t *sa, int *fd);
  sa_rc_t sa_shutdown     (sa_t *sa, char *flags);
  
  /* socket input/output operations (stream communication) */
  sa_rc_t sa_read         (sa_t *sa, char *buf, size_t buflen, size_t *bufdone);
  sa_rc_t sa_readln       (sa_t *sa, char *buf, size_t buflen, size_t *bufdone);
  sa_rc_t sa_write        (sa_t *sa, const char *buf, size_t buflen, size_t *bufdone);
  sa_rc_t sa_writef       (sa_t *sa, const char *fmt, ...);
  sa_rc_t sa_flush        (sa_t *sa);
  
  /* socket input/output operations (datagram communication) */
  sa_rc_t sa_recv         (sa_t *sa, char *buf, size_t buflen, size_t *bufdone, sa_addr_t **raddr);
  sa_rc_t sa_send         (sa_t *sa, const char *buf, size_t buflen, size_t *bufdone, sa_addr_t *raddr);
  
  #endif /* __SA_H__ */
  

From ossp-cvs-owner@ossp.org  Mon Oct  8 16:50:58 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f98Eov108238; Mon, 8 Oct 2001 16:50:57 +0200 (CEST)
Date: Mon, 8 Oct 2001 16:50:57 +0200 (CEST)
Message-Id: <200110081450.f98Eov108238@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa Makefile.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   08-Oct-2001 16:50:57
  Branch: HEAD                             Handle: 2001100815505600

  Modified files:
    ossp-pkg/sa             Makefile.in

  Log:
    fix Makefile

  Summary:
    Revision    Changes     Path
    1.6         +3  -1      ossp-pkg/sa/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/sa/Makefile.in
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 Makefile.in
  --- ossp-pkg/sa/Makefile.in	2001/10/08 11:43:25	1.5
  +++ ossp-pkg/sa/Makefile.in	2001/10/08 14:50:56	1.6
  @@ -79,6 +79,8 @@
   	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libsa.la $(DESTDIR)$(libdir)/
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(includedir)
   	$(SHTOOL) install -c -m 644 sa.h $(DESTDIR)$(includedir)/
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
  +	$(SHTOOL) install -c -m 755 sa-config $(DESTDIR)$(bindir)/
   
   clean:
   	-$(RM) $(LIB_NAME) $(LIB_OBJS)
  @@ -88,7 +90,7 @@
   
   distclean: clean
   	-$(RM) config.log config.status config.cache
  -	-$(RM) Makefile config.h
  +	-$(RM) Makefile config.h sa.h sa-config
   	-$(RM) libtool
   
   realclean: distclean

From ossp-cvs-owner@ossp.org  Mon Oct  8 16:51:20 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f98EpJg08290; Mon, 8 Oct 2001 16:51:19 +0200 (CEST)
Date: Mon, 8 Oct 2001 16:51:19 +0200 (CEST)
Message-Id: <200110081451.f98EpJg08290@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa .configure
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   08-Oct-2001 16:51:19
  Branch: HEAD                             Handle: 2001100815511800

  Added files:
    ossp-pkg/sa             .configure

  Log:
    add convinience .configure script

  Summary:
    Revision    Changes     Path
    1.1         +6  -0      ossp-pkg/sa/.configure
  ____________________________________________________________________________

  Index: ossp-pkg/sa/.configure
  ============================================================
  $ cvs update -p -r1.1 .configure
  #!/bin/sh
  ./configure \
      --prefix=/tmp/sa \
      --disable-shared \
      --enable-debug \
      "$@"

From ossp-cvs-owner@ossp.org  Mon Oct  8 17:01:28 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f98F1Ro09639; Mon, 8 Oct 2001 17:01:27 +0200 (CEST)
Date: Mon, 8 Oct 2001 17:01:27 +0200 (CEST)
Message-Id: <200110081501.f98F1Ro09639@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa Makefile.in configure.ac sa.ac sa.h sa.h.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   08-Oct-2001 17:01:27
  Branch: HEAD                             Handle: 197001010100001002549686

  Added files:
    ossp-pkg/sa             sa.h
  Modified files:
    ossp-pkg/sa             Makefile.in configure.ac sa.ac
  Removed files:
    ossp-pkg/sa             sa.h.in

  Log:
    Revert my idea of fixing the socklen_t stuff with a fallback
    substitution in sa.h, because this is nasty for the inclusion
    in L2. Do it with a less-heavy #define on-the-fly in sa.h

  Summary:
    Revision    Changes     Path
    1.7         +1  -1      ossp-pkg/sa/Makefile.in
    1.6         +1  -1      ossp-pkg/sa/configure.ac
    1.5         +1  -23     ossp-pkg/sa/sa.ac
    1.15        +188 -0     ossp-pkg/sa/sa.h
    NONE        +0  -176    ossp-pkg/sa/sa.h.in
  ____________________________________________________________________________

  Index: ossp-pkg/sa/Makefile.in
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 Makefile.in
  --- ossp-pkg/sa/Makefile.in	2001/10/08 14:50:56	1.6
  +++ ossp-pkg/sa/Makefile.in	2001/10/08 15:01:26	1.7
  @@ -90,7 +90,7 @@
   
   distclean: clean
   	-$(RM) config.log config.status config.cache
  -	-$(RM) Makefile config.h sa.h sa-config
  +	-$(RM) Makefile config.h sa-config
   	-$(RM) libtool
   
   realclean: distclean
  Index: ossp-pkg/sa/configure.ac
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 configure.ac
  --- ossp-pkg/sa/configure.ac	2001/10/08 14:47:30	1.5
  +++ ossp-pkg/sa/configure.ac	2001/10/08 15:01:26	1.6
  @@ -48,7 +48,7 @@
   SA_CHECK_ALL
   
   AC_CONFIG_HEADERS(config.h)
  -AC_CONFIG_FILES(sa.h Makefile sa-config)
  +AC_CONFIG_FILES(Makefile sa-config)
   AC_OUTPUT
   
   chmod a+x sa-config
  Index: ossp-pkg/sa/sa.ac
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 sa.ac
  --- ossp-pkg/sa/sa.ac	2001/10/08 14:47:30	1.4
  +++ ossp-pkg/sa/sa.ac	2001/10/08 15:01:26	1.5
  @@ -53,28 +53,6 @@
       fi
   ])
   
  -dnl #   Check for socklen_t
  -dnl #   configure.in:
  -dnl #     SA_CHECK_SOCKLENTYPE
  -
  -AC_DEFUN(SA_CHECK_SOCKLENTYPE,[dnl
  -    SA_CHECK_TYPEDEF(socklen_t, sys/socket.h)
  -    AC_MSG_CHECKING(for fallback socklen_t)
  -    AC_CACHE_VAL(ac_cv_check_socklentype, [
  -        if test ".$ac_cv_typedef_socklen_t" = .yes; then
  -            ac_cv_check_socklentype='socklen_t'
  -        else
  -            ac_cv_check_socklentype='int'
  -        fi
  -    ])
  -    AC_MSG_RESULT([$ac_cv_check_socklentype])
  -    SA_FALLBACK_SOCKLEN_T="typedef ${ac_cv_check_socklentype} socklen_t;"
  -    if test ".$ac_cv_check_socklentype" = ".socklen_t"; then
  -        SA_FALLBACK_SOCKLEN_T="/* $SA_FALLBACK_SOCKLEN_T */"
  -    fi
  -    AC_SUBST(SA_FALLBACK_SOCKLEN_T)
  -])
  -
   dnl #   Check for anything OSSP SA wants to know
   dnl #   configure.in:
   dnl #     SA_CHECK_ALL
  @@ -94,6 +72,6 @@
       AC_CHECK_FUNCS(inet_aton inet_pton inet_ntoa inet_ntop snprintf)
   
       dnl # check for network/socket size type
  -    SA_CHECK_SOCKLENTYPE
  +    SA_CHECK_TYPEDEF(socklen_t, sys/socket.h)
   ])
   
  Index: ossp-pkg/sa/sa.h
  ============================================================
  $ cvs update -p -r1.15 sa.h
  /*
  **  SA - OSSP Socket Abstraction Library
  **  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP SA, a socket abstraction library which
  **  can be found at http://www.ossp.org/pkg/sa/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  sa.h: socket abstraction API
  */
  
  #ifndef __SA_H__
  #define __SA_H__
  
  /* system definitions of "size_t", "socklen_t", "struct sockaddr *" */
  #include <string.h>
  #include <sys/types.h>
  #include <sys/socket.h>
  
  /* include optional Autoconf header */
  #ifdef HAVE_CONFIG_H
  #include "config.h"
  #endif
  
  /* fallback for POSIX socklen_t */
  #if defined(HAVE_CONFIG_H) && !defined(HAVE_SOCKLEN_T)
  #define socklen_t int
  #endif
  
  /* embedding support */
  #ifdef SA_PREFIX
  #if defined(__STDC__) || defined(__cplusplus)
  #define __SA_CONCAT(x,y) x ## y
  #define SA_CONCAT(x,y) __SA_CONCAT(x,y)
  #else
  #define __SA_CONCAT(x) x
  #define SA_CONCAT(x,y) __SA_CONCAT(x)y
  #endif
  #define sa_addr_st      SA_CONCAT(SA_PREFIX,sa_addr_st)
  #define sa_addr_t       SA_CONCAT(SA_PREFIX,sa_addr_t)
  #define sa_rc_t         SA_CONCAT(SA_PREFIX,sa_rc_t)
  #define sa_st           SA_CONCAT(SA_PREFIX,sa_st)
  #define sa_t            SA_CONCAT(SA_PREFIX,sa_t)
  #define sa_addr_create  SA_CONCAT(SA_PREFIX,sa_addr_create)
  #define sa_addr_destroy SA_CONCAT(SA_PREFIX,sa_addr_destroy)
  #define sa_addr_u2a     SA_CONCAT(SA_PREFIX,sa_addr_u2a)
  #define sa_addr_s2a     SA_CONCAT(SA_PREFIX,sa_addr_s2a)
  #define sa_addr_a2u     SA_CONCAT(SA_PREFIX,sa_addr_a2u)
  #define sa_addr_a2s     SA_CONCAT(SA_PREFIX,sa_addr_a2s)
  #define sa_create       SA_CONCAT(SA_PREFIX,sa_create)
  #define sa_destroy      SA_CONCAT(SA_PREFIX,sa_destroy)
  #define sa_type         SA_CONCAT(SA_PREFIX,sa_type)
  #define sa_timeout      SA_CONCAT(SA_PREFIX,sa_timeout)
  #define sa_buffers      SA_CONCAT(SA_PREFIX,sa_buffers)
  #define sa_bind         SA_CONCAT(SA_PREFIX,sa_bind)
  #define sa_connect      SA_CONCAT(SA_PREFIX,sa_connect)
  #define sa_listen       SA_CONCAT(SA_PREFIX,sa_listen)
  #define sa_accept       SA_CONCAT(SA_PREFIX,sa_accept)
  #define sa_getremote    SA_CONCAT(SA_PREFIX,sa_getremote)
  #define sa_getlocal     SA_CONCAT(SA_PREFIX,sa_getlocal)
  #define sa_getfd        SA_CONCAT(SA_PREFIX,sa_getfd)
  #define sa_shutdown     SA_CONCAT(SA_PREFIX,sa_shutdown)
  #define sa_read         SA_CONCAT(SA_PREFIX,sa_read)
  #define sa_readln       SA_CONCAT(SA_PREFIX,sa_readln)
  #define sa_write        SA_CONCAT(SA_PREFIX,sa_write)
  #define sa_writef       SA_CONCAT(SA_PREFIX,sa_writef)
  #define sa_flush        SA_CONCAT(SA_PREFIX,sa_flush)
  #define sa_recv         SA_CONCAT(SA_PREFIX,sa_recv)
  #define sa_send         SA_CONCAT(SA_PREFIX,sa_send)
  #endif
  
  /* socket address abstraction object type */
  struct sa_addr_st;
  typedef struct sa_addr_st sa_addr_t;
  
  /* socket abstraction object type */
  struct sa_st;
  typedef struct sa_st sa_t;
  
  /* socket connection types */
  typedef enum {
      SA_TYPE_STREAM,
      SA_TYPE_DATAGRAM
  } sa_type_t;
  
  /* return codes */
  typedef enum {
      SA_OK,      /* everything ok */
      SA_ERR_ARG, /* invalid argument (wrong parameter) */
      SA_ERR_USE, /* invalid use (wrong context) */
      SA_ERR_MEM, /* out of memory */
      SA_ERR_SYS, /* system error (see errno) */
      SA_ERR_EOF, /* end of file/socket communication */
      SA_ERR_INT  /* internal error */
  } sa_rc_t;
  
  /* list of timeouts */
  typedef enum {
      SA_TIMEOUT_ALL      = -1,
      SA_TIMEOUT_ACCEPT   = 0,
      SA_TIMEOUT_CONNECT  = 1,
      SA_TIMEOUT_READ     = 2,
      SA_TIMEOUT_WRITE    = 3,
      SA_TIMEOUT_RECV     = 4,
      SA_TIMEOUT_SEND     = 5
  } sa_timeout_t;
  
  /* list of system calls */
  typedef enum {
      SA_SYSCALL_CONNECT,
      SA_SYSCALL_ACCEPT,
      SA_SYSCALL_SELECT,
      SA_SYSCALL_READ,
      SA_SYSCALL_WRITE,
      SA_SYSCALL_RECVFROM,
      SA_SYSCALL_SENDTO
  } sa_syscall_t;
  
  /* error handling operations */
  sa_rc_t sa_error        (sa_t *sa, sa_rc_t rv, char **str);
  
  /* address object operations */
  sa_rc_t sa_addr_create  (sa_addr_t **saa);
  sa_rc_t sa_addr_destroy (sa_addr_t *saa);
  
  /* address operations */
  sa_rc_t sa_addr_u2a     (sa_addr_t *saa, const char *uri, ...);
  sa_rc_t sa_addr_s2a     (sa_addr_t *saa, const struct sockaddr *sabuf, socklen_t salen);
  sa_rc_t sa_addr_a2u     (sa_addr_t *saa, char **uri);
  sa_rc_t sa_addr_a2s     (sa_addr_t *saa, struct sockaddr **sabuf, socklen_t *salen);
  
  /* socket object operations */
  sa_rc_t sa_create       (sa_t **sa);
  sa_rc_t sa_destroy      (sa_t *sa);
  
  /* socket parameter operations */
  sa_rc_t sa_type         (sa_t *sa, sa_type_t type);
  sa_rc_t sa_timeout      (sa_t *sa, sa_timeout_t id, long sec, long usec);
  sa_rc_t sa_buffers      (sa_t *sa, size_t rsize, size_t wsize);
  sa_rc_t sa_syscall      (sa_t *sa, sa_syscall_t id, void (*fptr)(), void *fctx);
  
  /* socket connection operations */
  sa_rc_t sa_bind         (sa_t *sa, sa_addr_t *laddr);
  sa_rc_t sa_connect      (sa_t *sa, sa_addr_t *raddr);
  sa_rc_t sa_listen       (sa_t *sa, int backlog);
  sa_rc_t sa_accept       (sa_t *sa, sa_addr_t **caddr, sa_t **csa);
  sa_rc_t sa_getremote    (sa_t *sa, sa_addr_t **raddr);
  sa_rc_t sa_getlocal     (sa_t *sa, sa_addr_t **laddr);
  sa_rc_t sa_getfd        (sa_t *sa, int *fd);
  sa_rc_t sa_shutdown     (sa_t *sa, char *flags);
  
  /* socket input/output operations (stream communication) */
  sa_rc_t sa_read         (sa_t *sa, char *buf, size_t buflen, size_t *bufdone);
  sa_rc_t sa_readln       (sa_t *sa, char *buf, size_t buflen, size_t *bufdone);
  sa_rc_t sa_write        (sa_t *sa, const char *buf, size_t buflen, size_t *bufdone);
  sa_rc_t sa_writef       (sa_t *sa, const char *fmt, ...);
  sa_rc_t sa_flush        (sa_t *sa);
  
  /* socket input/output operations (datagram communication) */
  sa_rc_t sa_recv         (sa_t *sa, char *buf, size_t buflen, size_t *bufdone, sa_addr_t **raddr);
  sa_rc_t sa_send         (sa_t *sa, const char *buf, size_t buflen, size_t *bufdone, sa_addr_t *raddr);
  
  /* cleanup */
  #if defined(HAVE_CONFIG_H) && !defined(HAVE_SOCKLEN_T)
  #undef socklen_t
  #endif
  
  #endif /* __SA_H__ */
  
  

From ossp-cvs-owner@ossp.org  Mon Oct  8 17:08:48 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f98F8lU10183; Mon, 8 Oct 2001 17:08:47 +0200 (CEST)
Date: Mon, 8 Oct 2001 17:08:47 +0200 (CEST)
Message-Id: <200110081508.f98F8lU10183@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   08-Oct-2001 17:08:47
  Branch: HEAD                             Handle: 2001100816084600

  Modified files:
    ossp-pkg/sa             sa_test.c

  Log:
    log line number

  Summary:
    Revision    Changes     Path
    1.7         +17 -14     ossp-pkg/sa/sa_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa_test.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 sa_test.c
  --- ossp-pkg/sa/sa_test.c	2001/10/08 10:03:54	1.6
  +++ ossp-pkg/sa/sa_test.c	2001/10/08 15:08:46	1.7
  @@ -37,12 +37,15 @@
   
   #include "sa.h"
   
  -static void die(char *fmt, ...)
  +#define DIE_MARK \
  +    __FILE__, __LINE__
  +
  +static void die(const char *file, int line, char *fmt, ...)
   {
       va_list ap;
   
       va_start(ap, fmt);
  -    fprintf(stderr, "test:ERROR: ");
  +    fprintf(stderr, "%s:%d:ERROR: ", file, line);
       vfprintf(stderr, fmt, ap);
       fprintf(stderr, "\n");
       va_end(ap);
  @@ -67,32 +70,32 @@
   
       /* create remote address */
       if (sa_addr_create(&ra) != SA_OK)
  -        die("sa_addr_create (ra)");
  +        die(DIE_MARK, "sa_addr_create (ra)");
       if (sa_addr_u2a(ra, "inet://141.1.129.1:514") != SA_OK)
  -        die("sa_addr_u2a (ra)");
  +        die(DIE_MARK, "sa_addr_u2a (ra)");
   
       /* create local address */
       if (sa_addr_create(&la) != SA_OK)
  -        die("sa_addr_create (la)");
  +        die(DIE_MARK, "sa_addr_create (la)");
       if (sa_addr_u2a(la, "inet://0.0.0.0:0") != SA_OK)
  -        die("sa_addr_u2a (la)");
  +        die(DIE_MARK, "sa_addr_u2a (la)");
   
       /* create datagram socket */
       if (sa_create(&sa) != SA_OK)
  -        die("sa_create");
  +        die(DIE_MARK, "sa_create");
       if (sa_type(sa, SA_TYPE_DATAGRAM) != SA_OK)
  -        die("sa_type");
  +        die(DIE_MARK, "sa_type");
   
       /* bind socket to local address */
       if (sa_bind(sa, la) != SA_OK)
  -        die("sa_bind");
  +        die(DIE_MARK, "sa_bind");
   
       /* RFC3164: The BSD syslog Protocol; C. Lonvick; August 2001. */
       now = time(NULL);
       tm = localtime(&now);
       strftime(caTime, sizeof(caTime), "%b %e %H:%M:%S", tm);
       if (uname(&uts) == -1)
  -        die("uname");
  +        die(DIE_MARK, "uname");
       cpHost = strdup(uts.nodename);
       if ((cp = strchr(cpHost, '.')) != NULL)
           *cp = '\0';
  @@ -106,15 +109,15 @@
       /* send message to syslogd(8) */
       nBuf = strlen(caBuf);
       if (sa_send(sa, caBuf, nBuf, (size_t *)&n, ra) != SA_OK)
  -        die("sa_writeto");
  +        die(DIE_MARK, "sa_writeto");
   
       /* destroy socket and address objects */
       if (sa_destroy(sa) != SA_OK)
  -        die("sa_destroy");
  +        die(DIE_MARK, "sa_destroy");
       if (sa_addr_destroy(la) != SA_OK)
  -        die("sa_addr_destroy (la)");
  +        die(DIE_MARK, "sa_addr_destroy (la)");
       if (sa_addr_destroy(ra) != SA_OK)
  -        die("sa_addr_destroy (ra)");
  +        die(DIE_MARK, "sa_addr_destroy (ra)");
   
       return 0;
   }

From ossp-cvs-owner@ossp.org  Mon Oct  8 17:15:27 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f98FFQJ11154; Mon, 8 Oct 2001 17:15:26 +0200 (CEST)
Date: Mon, 8 Oct 2001 17:15:26 +0200 (CEST)
Message-Id: <200110081515.f98FFQJ11154@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   08-Oct-2001 17:15:26
  Branch: HEAD                             Handle: 2001100816152500

  Modified files:
    ossp-pkg/sa             sa.c

  Log:
    support IPv6 addresses

  Summary:
    Revision    Changes     Path
    1.14        +1  -1      ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 sa.c
  --- ossp-pkg/sa/sa.c	2001/10/08 13:37:08	1.13
  +++ ossp-pkg/sa/sa.c	2001/10/08 15:15:25	1.14
  @@ -502,7 +502,7 @@
       else if (strncmp(uri, "inet://", 7) == 0) {
           /* parse URI */
           cpHost = (char *)(uri+7);
  -        if ((cp = strchr(cpHost, ':')) == NULL)
  +        if ((cp = strrchr(cpHost, ':')) == NULL)
               return SA_ERR_ARG;
           *cp++ = '\0';
           cpPort = cp;

From ossp-cvs-owner@ossp.org  Mon Oct  8 17:17:48 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f98FHlk11351; Mon, 8 Oct 2001 17:17:47 +0200 (CEST)
Date: Mon, 8 Oct 2001 17:17:47 +0200 (CEST)
Message-Id: <200110081517.f98FHlk11351@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   08-Oct-2001 17:17:47
  Branch: HEAD                             Handle: 2001100816174700

  Modified files:
    ossp-pkg/sa             TODO

  Log:
    remember TODOs

  Summary:
    Revision    Changes     Path
    1.14        +9  -0      ossp-pkg/sa/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 TODO
  --- ossp-pkg/sa/TODO	2001/10/07 15:21:17	1.13
  +++ ossp-pkg/sa/TODO	2001/10/08 15:17:47	1.14
  @@ -10,3 +10,12 @@
     SA_BUFFER_KREAD
     SA_BUFFER_KWRITE
     SA_BUFFER_WRITEF
  +- support for relative pathnames in unix:path
  +
  +- test suite:
  +  - inet://0.0.0.0:0 -> inet://0.0.0.0:514
  +  - inet://127.0.0.1:514 -> inet://127.0.0.1:514
  +  - inet://localhost:syslog#udp -> inet://127.0.0.1:514
  +  - inet://localhost:smtp -> inet://127.0.0.1:25
  +  - unix:/tmp/socket -> unix:/tmp/socket
  +

From ossp-cvs-owner@ossp.org  Tue Oct  9 10:22:31 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f998MT829807; Tue, 9 Oct 2001 10:22:29 +0200 (CEST)
Date: Tue, 9 Oct 2001 10:22:29 +0200 (CEST)
Message-Id: <200110090822.f998MT829807@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c lmtp2nntp.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   09-Oct-2001 10:22:29
  Branch: HEAD                             Handle: 2001100909222900

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c lmtp2nntp.pod

  Log:
    added -a altio, -p pidfile and -k kill options

  Summary:
    Revision    Changes     Path
    1.69        +57 -4      ossp-pkg/lmtp2nntp/lmtp2nntp.c
    1.25        +28 -8      ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.68 -r1.69 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/08 14:30:11	1.68
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/09 08:22:29	1.69
  @@ -132,8 +132,11 @@
       char           *option_deliverymodefakedsn;
       int             option_maxmessagesize;
       int             option_waittime;
  +    int             option_timeout;
       char           *option_mailfrom;
       unsigned int    option_levelmask;
  +    char           *option_pidfile;
  +    int             option_killflag;
       l2_stream_t    *l2;
       sa_addr_t      *saaAltio;
       sa_t           *saAltio;
  @@ -187,10 +190,13 @@
               "[-d deliverymode] "
               "[-g groupmode] "
               "[-h host[:port][,host[:port], ...]] "
  +            "[-k] "
               "[-l level[:logfile]] "
               "[-m mailfrom] "
               "[-n nodename] "
  +            "[-p pidfile] "
               "[-s size] "
  +            "[-t timeout] "
               "[-v] "
               "[-w waittime] "
               "newsgroup [newsgroup ...] "
  @@ -339,6 +345,7 @@
       l2_channel_t *chBuf;
       l2_channel_t *chFile;
       pid_t         pid;
  +    FILE         *fd;
   
       /* library version check (run-time) */
       if (l2_version.v_hex < L2_VERSION_HEX_REQ) {
  @@ -362,8 +369,11 @@
       ctx->option_deliverymodefakedsn    = "5.7.1"; /* Delivery not authorized, message refused */
       ctx->option_maxmessagesize = 8 * 1024 * 1024;
       ctx->option_waittime = -1;
  +    ctx->option_timeout = 3;
       ctx->option_mailfrom = NULL;
       ctx->option_levelmask = L2_LEVEL_NONE;
  +    ctx->option_pidfile = NULL;
  +    ctx->option_killflag = FALSE;
       ctx->l2 = NULL;
       ctx->saaAltio = NULL;
       ctx->saAltio = NULL;
  @@ -397,7 +407,7 @@
        */
   
       /* read in the arguments */
  -    while ((i = getopt(argc, argv, "a:b:d:g:h:l:m:n:s:vw:")) != -1) {
  +    while ((i = getopt(argc, argv, "a:b:d:g:h:kl:m:n:p:s:t:vw:")) != -1) {
           switch (i) {
               case 'a': /*POD [B<-a> I<altio>] */
                   if ((rc = sa_addr_create(&ctx->saaAltio)) != SA_OK) {
  @@ -552,6 +562,9 @@
                   }
                   free(azHosts);
                   break;
  +            case 'k': /*POD [B<-k>] */
  +                ctx->option_killflag = TRUE;
  +                break;
               case 'l': /*POD [B<-l> I<level>[:I<logfile>]] */
                   if ((cp = strrchr(optarg, ':')) != NULL) {
                       *cp++ = NUL;
  @@ -594,6 +607,9 @@
                   }
                   strcpy(ctx->uname.nodename, optarg);
                   break;
  +            case 'p': /*POD [B<-p> I<pidfile>] */
  +                ctx->option_pidfile = strdup(optarg);
  +                break;
               case 's': /*POD [B<-s> I<size>] */
                       ctx->option_maxmessagesize = atoi(optarg);
                       if(ctx->option_maxmessagesize < 64) {
  @@ -601,6 +617,13 @@
                           CU(ERR_EXECUTION);
                       }
                   break;
  +            case 't': /*POD [B<-t> I<timeout>] */
  +                    ctx->option_timeout = atoi(optarg);
  +                    if(ctx->option_timeout < 0) {
  +                        fprintf(stderr, "%s:Error: timeout %d to option -t must be a positive integer.\n", ctx->progname, ctx->option_waittime);
  +                        CU(ERR_EXECUTION);
  +                    }
  +                break;
               case 'v': /*POD [B<-v>] (version)*/
                   fprintf(stdout, "%s\n", lmtp2nntp_version.v_gnu);
                   CU(0);
  @@ -633,7 +656,7 @@
       }
   
       if (l2_stream_formatter(ctx->l2, 'P', formatter_prefix, &ctx->ctx) != L2_OK) {
  -        fprintf(stderr, "%s:Error: logging failed to register formatter\n", ctx->progname);
  +        fprintf(stderr, "%s:Error: logging failed to register prefix formatter\n", ctx->progname);
           CU(ERR_EXECUTION);
       }
       if (l2_stream_formatter(ctx->l2, 'D', l2_util_fmt_dump, NULL) != L2_OK) {
  @@ -702,6 +725,26 @@
           CU(ERR_EXECUTION);
       }
   
  +    if ((ctx->option_pidfile != NULL) && ctx->option_killflag) {
  +        if ((fd = fopen(ctx->option_pidfile, "r")) == NULL)
  +            log1(ctx, ERROR, "cannot open pidfile \"%s\" for reading %m", ctx->option_pidfile);
  +        else {
  +            if (fscanf(fd, "%d\n", &pid) != 1) {
  +                fclose(fd);
  +                log1(ctx, ERROR, "cannot extract pid from pidfile \"%s\"", ctx->option_pidfile);
  +            }
  +            else {
  +                fclose(fd);
  +                log1(ctx, TRACE, "going to kill pid[%d]", pid);
  +                if (kill(pid, SIGHUP) == -1)
  +                    log1(ctx, ERROR, "killing pid[%d] failed %m", pid);
  +                if (unlink(ctx->option_pidfile) == -1)
  +                    log1(ctx, ERROR, "unlinking pidfile \"%s\" failed %m", ctx->option_pidfile);
  +            }
  +        }
  +        CU(0);
  +    }
  +
       catchsignal(0, ctx);
       signal(SIGCHLD, (void(*)())catchsignal);
       signal(SIGHUP,  (void(*)())catchsignal);
  @@ -715,7 +758,6 @@
       signal(SIGUSR1,            SIG_IGN    );
       signal(SIGUSR2,            SIG_IGN    );
   
  -        
       /* loop for LMTP protocol with support for alternate io through daemon */
       if (ctx->saAltio == NULL) {
           /* initialize LMTP context */
  @@ -757,8 +799,17 @@
       } else {
           pid = getpid();
           daemonize();
  +        if (ctx->option_pidfile != NULL) {
  +            if ((fd = fopen(ctx->option_pidfile, "w+")) == NULL)
  +                log1(ctx, ERROR, "cannot open pidfile \"%s\" for writing %m", ctx->option_pidfile);
  +            else {
  +                fprintf(fd, "%d\n", getpid());
  +                fclose(fd);
  +            }
  +        }
           log1(ctx, NOTICE, "startup daemonized, previous pid[%d]", pid); l2_stream_flush(ctx->l2);
  -        sa_timeout(ctx->saAltio, SA_TIMEOUT_ALL,    9, 0);
  +
  +        sa_timeout(ctx->saAltio, SA_TIMEOUT_ALL, ctx->option_timeout, 0);
           sa_timeout(ctx->saAltio, SA_TIMEOUT_ACCEPT, 0, 0);
           while ((rc = sa_accept(ctx->saAltio, &ctx->saaIO, &ctx->saIO)) == SA_OK) {
               l2_stream_flush(ctx->l2); /* must flush before fork() */
  @@ -818,6 +869,8 @@
       CUS:
       log0(ctx, NOTICE, "graceful shutdown shortly before exit - no more logging");
       l2_stream_destroy(ctx->l2);
  +    if (ctx->option_pidfile != NULL)
  +        free(ctx->option_pidfile);
       if (ctx->option_logfile != NULL)
           free(ctx->option_logfile);
       if (ctx->progname != NULL)
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 lmtp2nntp.pod
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/10/08 14:30:11	1.24
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/10/09 08:22:29	1.25
  @@ -38,9 +38,12 @@
   [B<-d> I<deliverymode>]
   [B<-g> I<groupmode>]
   [B<-h> I<host>[I<:port>][,I<host>[I<:port>], ...]]
  +[B<-k>]
   [B<-m> I<mailfrom>]
   [B<-n> I<nodename>]
  +[B<-p> I<pidfile>]
   [B<-s> I<size>]
  +[B<-t> I<timeout>]
   [B<-l> I<level>[:I<logfile>]]
   [B<-v>]
   [B<-w> I<waittime>]
  @@ -63,6 +66,14 @@
   
   =over 4
   
  +=item B<-a> I<altio>
  +
  +Alternate IO allows reading and writing from/to a UNIX domain or TCP sockets
  +instead stdin/stdout. This places the program in daemon mode. The syntax for
  +altio is either "unix:/path/to/socket" or "inet://address:port". If "unix:/"
  +and "inet://" prefixes are ommited the program tries to guess the desired mode
  +based on the existing of a leading slash.
  +
   =item B<-b> I<bindaddr>[I<:port>]
   
   Bind address and/or port to be used by the LMTP client.  If an address is
  @@ -113,13 +124,11 @@
   In regard to this program they must provide the same groups and talk to each
   other. 
   
  -=item B<-a> I<altio>
  +=item B<-k>
   
  -Alternate IO allows reading and writing from/to a UNIX domain or TCP sockets
  -instead stdin/stdout. This places the program in daemon mode. The syntax for
  -altio is either "unix:/path/to/socket" or "inet://address:port". If "unix:/"
  -and "inet://" prefixes are ommited the program tries to guess the desired mode
  -based on the existing of a leading slash.
  +Kill the daemon. After processing the -k option the program is terminated so
  +it renders most other options invalid not including -p and -l. The pid must be
  +listed in pidfile using -p option.
   
   =item B<-m> I<mailfrom>
   
  @@ -132,11 +141,22 @@
   Own FQDN used in LMTP and NNTP protocols. This overrides the nodename returned
   by uname(3).
   
  +=item B<-p> I<pidfile>
  +
  +Pidfile to remember the process ID when -a option forces us to run as a
  +daemon. Also to be used with -k.
  +
   =item B<-s> I<size>
   
   Size limitation on message in bytes. Default is 8388608 (8M). Values below 64
   are considered unacceptable small.
   
  +=item B<-t> I<timeout>
  +
  +Timeout for the LMTP daemon managing alternate IO (see -a) to wait for input
  +after having accepted a connection.  Value is given in seconds, the default is
  +three.  Zero means to wait infinite.  Use low numbers to prevend DoS attacks.
  +
   =item B<-l> I<level>[:I<logfile>]
   
   The level measures the degree and importance of output and can be any of
  @@ -158,8 +178,8 @@
   
   Specify the time the NNTP client waits for the initial connect to complete and
   the time to wait for every server's response. Value is given in seconds and
  -must be greater than or equal to 1 second. The default is OS dependent for the
  -connect and a 3 second timeout waiting for a server's response.
  +must be greater than or equal to one second. The default is OS dependent for
  +the connect and a three second timeout waiting for a server's response.
   
   =item I<newsgroup> [I<newsgroup> ...]
   

From ossp-cvs-owner@ossp.org  Tue Oct  9 10:25:00 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f998OxB30007; Tue, 9 Oct 2001 10:24:59 +0200 (CEST)
Date: Tue, 9 Oct 2001 10:24:59 +0200 (CEST)
Message-Id: <200110090824.f998OxB30007@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   09-Oct-2001 10:24:59
  Branch: HEAD                             Handle: 2001100909245800

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c

  Log:
    fixed whitespaces/ indents

  Summary:
    Revision    Changes     Path
    1.70        +15 -15     ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.69 -r1.70 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/09 08:22:29	1.69
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/09 08:24:58	1.70
  @@ -611,29 +611,29 @@
                   ctx->option_pidfile = strdup(optarg);
                   break;
               case 's': /*POD [B<-s> I<size>] */
  -                    ctx->option_maxmessagesize = atoi(optarg);
  -                    if(ctx->option_maxmessagesize < 64) {
  -                        fprintf(stderr, "%s:Error: maximum message size is unacceptable small.\n", ctx->progname);
  -                        CU(ERR_EXECUTION);
  -                    }
  +                ctx->option_maxmessagesize = atoi(optarg);
  +                if(ctx->option_maxmessagesize < 64) {
  +                    fprintf(stderr, "%s:Error: maximum message size is unacceptable small.\n", ctx->progname);
  +                    CU(ERR_EXECUTION);
  +                }
                   break;
               case 't': /*POD [B<-t> I<timeout>] */
  -                    ctx->option_timeout = atoi(optarg);
  -                    if(ctx->option_timeout < 0) {
  -                        fprintf(stderr, "%s:Error: timeout %d to option -t must be a positive integer.\n", ctx->progname, ctx->option_waittime);
  -                        CU(ERR_EXECUTION);
  -                    }
  +                ctx->option_timeout = atoi(optarg);
  +                if(ctx->option_timeout < 0) {
  +                    fprintf(stderr, "%s:Error: timeout %d to option -t must be a positive integer.\n", ctx->progname, ctx->option_waittime);
  +                    CU(ERR_EXECUTION);
  +                }
                   break;
               case 'v': /*POD [B<-v>] (version)*/
                   fprintf(stdout, "%s\n", lmtp2nntp_version.v_gnu);
                   CU(0);
                   break;
               case 'w': /*POD [B<-w> I<waittime>] */
  -                    ctx->option_waittime = atoi(optarg);
  -                    if(ctx->option_waittime < 1) {
  -                        fprintf(stderr, "%s:Error: waittime %d to option -w must be greater 1 second.\n", ctx->progname, ctx->option_waittime);
  -                        CU(ERR_EXECUTION);
  -                    }
  +                ctx->option_waittime = atoi(optarg);
  +                if(ctx->option_waittime < 1) {
  +                    fprintf(stderr, "%s:Error: waittime %d to option -w must be greater 1 second.\n", ctx->progname, ctx->option_waittime);
  +                    CU(ERR_EXECUTION);
  +                }
                   break;
               case '?':
               default:

From ossp-cvs-owner@ossp.org  Tue Oct  9 11:08:04 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f99983T34942; Tue, 9 Oct 2001 11:08:03 +0200 (CEST)
Date: Tue, 9 Oct 2001 11:08:03 +0200 (CEST)
Message-Id: <200110090908.f99983T34942@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   09-Oct-2001 11:08:03
  Branch: HEAD                             Handle: 2001100910080200

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c

  Log:
    worked out FIXMEs, all were related to free/ destroy memory leaks

  Summary:
    Revision    Changes     Path
    1.71        +8  -5      ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.70 -r1.71 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/09 08:24:58	1.70
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/09 09:08:02	1.71
  @@ -461,7 +461,6 @@
                   }
                   else 
                       ctx->cpBindp = strdup("0");
  -                //FIXME
                   if ((rc = sa_addr_create(&ctx->saaBind)) != SA_OK) {
                       fprintf(stderr, "%s:Error: Creating address failed for -b option (%d)\n", 
                               ctx->progname, rc);
  @@ -869,6 +868,10 @@
       CUS:
       log0(ctx, NOTICE, "graceful shutdown shortly before exit - no more logging");
       l2_stream_destroy(ctx->l2);
  +    if (ctx->saAltio)
  +        sa_destroy(ctx->saAltio);
  +    if (ctx->saaAltio)
  +        sa_addr_destroy(ctx->saaAltio);
       if (ctx->option_pidfile != NULL)
           free(ctx->option_pidfile);
       if (ctx->option_logfile != NULL)
  @@ -880,7 +883,6 @@
       if (ctx != NULL)
           free(ctx);
       str_parse(NULL, NULL);
  -    //FIXME 2 * sa_addr_destroy()
   
       return rc;
   }
  @@ -929,7 +931,7 @@
       int          bOk;
       int          i;
       nntp_io_t    nntp_io;
  -    int          s; //FIXME
  +    int          s;
   
       log1(ctx, INFO, "LMTP service executing LHLO command < %s", req->msg);
   
  @@ -1010,7 +1012,6 @@
   
           if (bOk) {
               log0(ctx, DEBUG, "nntp_create");
  -            //FIXME
               sa_getfd(ctx->ns[i].sa, &s);
               if ((ctx->ns[i].nntp = nntp_create(s, s, 
                                                  (ctx->option_logfile && (ctx->option_levelmask >= L2_LEVEL_TRACE)) ?
  @@ -1098,7 +1099,7 @@
           ns->sa = NULL;
       }
       if (ns->saa != NULL) {
  -        free(ns->saa);
  +        sa_addr_destroy(ns->saa);
           ns->saa = NULL;
       }
       if (ns->p != NULL) {
  @@ -1128,6 +1129,8 @@
           free(ctx->cpBindp);
       if (ctx->saBind != NULL)
           sa_destroy(ctx->saBind);
  +    if (ctx->saaBind != NULL)
  +        sa_addr_destroy(ctx->saaBind);
   }
   
   static int helo_rfc0821domain(char *msg, char **domain)

From ossp-cvs-owner@ossp.org  Tue Oct  9 12:19:14 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f99AJCG43080; Tue, 9 Oct 2001 12:19:12 +0200 (CEST)
Date: Tue, 9 Oct 2001 12:19:12 +0200 (CEST)
Message-Id: <200110091019.f99AJCG43080@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp INSTALL NEWS lmtp2nntp.c lmtp2nntp.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Oct-2001 12:19:12
  Branch: HEAD                             Handle: 2001100911191200

  Modified files:
    ossp-pkg/lmtp2nntp      INSTALL NEWS lmtp2nntp.c lmtp2nntp.pod

  Log:
    Revamp command line options and their semantics (all daemons uppercase
    now, all address options [a-d], etc):
    
    o -D new option
    o -k -> -K
    o -p -> -P
    o -b -> -c
    o -a -> -b plus -
    o -a new option
    o -d -> -o
    o -h -> -d
    o -t name=value,...
    o -w removed

  Summary:
    Revision    Changes     Path
    1.8         +4  -2      ossp-pkg/lmtp2nntp/INSTALL
    1.3         +13 -0      ossp-pkg/lmtp2nntp/NEWS
    1.72        +181 -133   ossp-pkg/lmtp2nntp/lmtp2nntp.c
    1.26        +16 -17     ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/INSTALL
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 INSTALL
  --- ossp-pkg/lmtp2nntp/INSTALL	2001/09/13 18:40:19	1.7
  +++ ossp-pkg/lmtp2nntp/INSTALL	2001/10/09 10:19:12	1.8
  @@ -35,7 +35,7 @@
        | _DEFIFNOT(`LMTP2NNTP_MAILER_FLAGS',        `mDFMuXz')
        | _DEFIFNOT(`LMTP2NNTP_MAILER_ARGS',         `')
        | _DEFIFNOT(`LMTP2NNTP_MAILER_BINDADDR',     '0.0.0.0')
  -     | _DEFIFNOT(`LMTP2NNTP_MAILER_DELIVERYMODE', `post')
  +     | _DEFIFNOT(`LMTP2NNTP_MAILER_OPERATIONMODE',`post')
        | _DEFIFNOT(`LMTP2NNTP_MAILER_GROUPMODE',    `envelope')
        | _DEFIFNOT(`LMTP2NNTP_MAILER_MAILFROM',     `^.+@(?:[^.]+\.)+[^.]+$')
        | _DEFIFNOT(`LMTP2NNTP_MAILER_NODENAME',     `confDOMAIN_NAME')
  @@ -54,7 +54,7 @@
        |             L=990, T=DNS/RFC822/SMTP, M=LMTP2NNTP_MAILER_MAX,
        |             A=lmtp2nntp LMTP2NNTP_MAILER_ARGS dnl
        |                         -b LMTP2NNTP_MAILER_BINDADDR dnl
  -     |                         -d LMTP2NNTP_MAILER_DELIVERYMODE dnl
  +     |                         -o LMTP2NNTP_MAILER_OPERATIONMODE dnl
        |                         -g LMTP2NNTP_MAILER_GROUPMODE dnl
        |                         -h $h dnl
        |                         -m LMTP2NNTP_MAILER_MAILFROM dnl
  @@ -63,6 +63,8 @@
        |                         -l LMTP2NNTP_MAILER_LOGLEVEL dnl
        |                         -w LMTP2NNTP_MAILER_WAITTIME dnl
        |                         LMTP2NNTP_MAILER_NEWSGROUP
  +
  +     FIXME
   
        This changes nothing in your Sendmail configuration, but just adds
        a new mailer named "lmtp2nntp" to Sendmail.
  Index: ossp-pkg/lmtp2nntp/NEWS
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 NEWS
  --- ossp-pkg/lmtp2nntp/NEWS	2001/09/13 13:45:12	1.2
  +++ ossp-pkg/lmtp2nntp/NEWS	2001/10/09 10:19:12	1.3
  @@ -15,3 +15,16 @@
     implemented the internal 0.9.x releases please review the options. Both
     names and functionality has been changed!
   
  +* -D neu
  +* -k -> -K
  +* -p -> -P
  +* -b -> -c
  +* -a -> -b plus -
  ++ -a neu
  +* -d -> -o
  +* -h -> -d
  ++ -t name=value,...
  +* -w weg
  +
  +FIXME
  +
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.71 -r1.72 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/09 09:08:02	1.71
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/09 10:19:12	1.72
  @@ -127,16 +127,22 @@
       char           *progname;
       char           *option_logfile;
       int             option_groupmode;
  -    int             option_deliverymode;
  -    char           *option_deliverymodefakestatus;
  -    char           *option_deliverymodefakedsn;
  +    int             option_operationmode;
  +    char           *option_operationmodefakestatus;
  +    char           *option_operationmodefakedsn;
       int             option_maxmessagesize;
       int             option_waittime;
  -    int             option_timeout;
  +    int             option_timeout_lmtp_accept;
  +    int             option_timeout_lmtp_read;
  +    int             option_timeout_lmtp_write;
  +    int             option_timeout_nntp_connect;
  +    int             option_timeout_nntp_read;
  +    int             option_timeout_nntp_write;
       char           *option_mailfrom;
       unsigned int    option_levelmask;
       char           *option_pidfile;
       int             option_killflag;
  +    int             option_daemon;
       l2_stream_t    *l2;
       sa_addr_t      *saaAltio;
       sa_t           *saAltio;
  @@ -169,9 +175,9 @@
   };
   
   enum {
  -    DELIVERYMODE_FAKE,
  -    DELIVERYMODE_POST,
  -    DELIVERYMODE_FEED
  +    OPERATIONMODE_FAKE,
  +    OPERATIONMODE_POST,
  +    OPERATIONMODE_FEED
   };
   
   /*
  @@ -185,20 +191,21 @@
        */
       fprintf(stderr, 
               "USAGE: %s "
  -            "[-a altio] "
  -            "[-b bindaddr[:port]] "
  -            "[-d deliverymode] "
  +            "[-D] "
  +            "[-K] "
  +            "[-P pidfile] "
  +            "[-a addr/mask[,addr/mask[,...]] "
  +            "[-b -|path|addr[:port]] "
  +            "[-c addr[:port]] "
  +            "[-d addr[:port][,addr[:port], ...]] "
               "[-g groupmode] "
  -            "[-h host[:port][,host[:port], ...]] "
  -            "[-k] "
               "[-l level[:logfile]] "
               "[-m mailfrom] "
               "[-n nodename] "
  -            "[-p pidfile] "
  +            "[-o operationmode] "
               "[-s size] "
  -            "[-t timeout] "
  +            "[-t name=sec[,name=sec[,...]] "
               "[-v] "
  -            "[-w waittime] "
               "newsgroup [newsgroup ...] "
               "\n",
               command);
  @@ -339,6 +346,8 @@
       char         *cp;            /* general purpose character pointer */
       char         *azHosts;
       size_t        asHosts;
  +    char         *azTimeout;
  +    size_t        asTimeout;
       char         *cpHost;
       char         *cpPort;
       l2_channel_t *chPrefix;
  @@ -364,16 +373,22 @@
       ctx->progname = strdup(argv[0]);
       ctx->option_logfile = NULL;
       ctx->option_groupmode = GROUPMODE_ARG;
  -    ctx->option_deliverymode = DELIVERYMODE_FAKE;
  -    ctx->option_deliverymodefakestatus = "553";   /* Requested action not taken: mailbox name not allowed */
  -    ctx->option_deliverymodefakedsn    = "5.7.1"; /* Delivery not authorized, message refused */
  +    ctx->option_operationmode = OPERATIONMODE_FAKE;
  +    ctx->option_operationmodefakestatus = "553";   /* Requested action not taken: mailbox name not allowed */
  +    ctx->option_operationmodefakedsn    = "5.7.1"; /* Delivery not authorized, message refused */
       ctx->option_maxmessagesize = 8 * 1024 * 1024;
       ctx->option_waittime = -1;
  -    ctx->option_timeout = 3;
  +    ctx->option_timeout_lmtp_accept = 0;
  +    ctx->option_timeout_lmtp_read = 10;
  +    ctx->option_timeout_lmtp_write = 10;
  +    ctx->option_timeout_nntp_connect = 360;
  +    ctx->option_timeout_nntp_read = 60;
  +    ctx->option_timeout_nntp_write = 60;
       ctx->option_mailfrom = NULL;
       ctx->option_levelmask = L2_LEVEL_NONE;
       ctx->option_pidfile = NULL;
       ctx->option_killflag = FALSE;
  +    ctx->option_daemon = FALSE;
       ctx->l2 = NULL;
       ctx->saaAltio = NULL;
       ctx->saAltio = NULL;
  @@ -407,21 +422,26 @@
        */
   
       /* read in the arguments */
  -    while ((i = getopt(argc, argv, "a:b:d:g:h:kl:m:n:p:s:t:vw:")) != -1) {
  +    while ((i = getopt(argc, argv, "D:KP:a:b:c:d:g:l:m:n:o:s:t:v")) != -1) {
           switch (i) {
  -            case 'a': /*POD [B<-a> I<altio>] */
  -                if ((rc = sa_addr_create(&ctx->saaAltio)) != SA_OK) {
  -                    fprintf(stderr, "%s:Error: Creating address failed for -a option (%d)\n", 
  -                            ctx->progname, rc);
  -                }
  -                if ((strncasecmp(optarg, "inet://", 7) == 0) ||
  -                    (strncasecmp(optarg, "unix:/" , 6) == 0)   ) {
  -                    if ((rc = sa_addr_u2a(ctx->saaAltio, "%s", optarg)) != SA_OK) {
  -                        fprintf(stderr, "%s:Error: Parsing alternate IO URL failed for \"%s\" (%d)\n", 
  -                                ctx->progname, optarg, rc);
  -                        CU(ERR_EXECUTION);
  +            case 'D': /*POD [B<-D>] */
  +                ctx->option_daemon = TRUE;
  +                break;
  +            case 'K': /*POD [B<-K>] */
  +                ctx->option_killflag = TRUE;
  +                break;
  +            case 'P': /*POD [B<-P> I<pidfile>] */
  +                ctx->option_pidfile = strdup(optarg);
  +                break;
  +            case 'a': /*POD [B<-a> I<addr>/I<mask>[,I<addr>/I<mask>[,...]] */
  +                /* FIXME */
  +                break;
  +            case 'b': /*POD [B<-b> C<->|I<path>|I<addr>[I<:port>]] */
  +                if (strcmp(optarg, "-") != 0) {
  +                    if ((rc = sa_addr_create(&ctx->saaAltio)) != SA_OK) {
  +                        fprintf(stderr, "%s:Error: Creating address failed for -a option (%d)\n", 
  +                                ctx->progname, rc);
                       }
  -                } else {
                       if (optarg[0] == '/') {
                           if ((rc = sa_addr_u2a(ctx->saaAltio, "unix:%s", optarg)) != SA_OK) {
                               fprintf(stderr, "%s:Error: Parsing alternate IO guessing UNIX domain socket failed for \"%s\" (%d)\n", 
  @@ -436,24 +456,24 @@
                               CU(ERR_EXECUTION);
                           }
                       }
  -                }
  -                if ((rc = sa_create(&ctx->saAltio)) != SA_OK) {
  -                    fprintf(stderr, "%s:Error: Creating TCP socket failed for \"%s\": %s\n", 
  -                            ctx->progname, optarg, strerror(errno));
  -                    CU(ERR_EXECUTION);
  -                }
  -                if ((rc = sa_bind(ctx->saAltio, ctx->saaAltio)) != SA_OK) {
  -                    fprintf(stderr, "%s:Error: Bind failed for \"%s\": %s\n", 
  -                            ctx->progname, optarg, strerror(errno));
  -                    CU(ERR_EXECUTION);
  -                }
  -                if ((rc = sa_listen(ctx->saAltio, -1)) != SA_OK) {
  -                    fprintf(stderr, "%s:Error: Listen to failed for \"%s\": %s\n", 
  -                            ctx->progname, optarg, strerror(errno));
  -                    CU(ERR_EXECUTION);
  +                    if ((rc = sa_create(&ctx->saAltio)) != SA_OK) {
  +                        fprintf(stderr, "%s:Error: Creating TCP socket failed for \"%s\": %s\n", 
  +                                ctx->progname, optarg, strerror(errno));
  +                        CU(ERR_EXECUTION);
  +                    }
  +                    if ((rc = sa_bind(ctx->saAltio, ctx->saaAltio)) != SA_OK) {
  +                        fprintf(stderr, "%s:Error: Bind failed for \"%s\": %s\n", 
  +                                ctx->progname, optarg, strerror(errno));
  +                        CU(ERR_EXECUTION);
  +                    }
  +                    if ((rc = sa_listen(ctx->saAltio, -1)) != SA_OK) {
  +                        fprintf(stderr, "%s:Error: Listen to failed for \"%s\": %s\n", 
  +                                ctx->progname, optarg, strerror(errno));
  +                        CU(ERR_EXECUTION);
  +                    }
                   }
                   break;
  -            case 'b': /*POD [B<-b> I<bindaddr>[I<:port>]] */
  +            case 'c': /*POD [B<-c> I<addr>[I<:port>]] */
                   ctx->cpBindh = strdup(optarg);
                   if ((ctx->cpBindp = strrchr(ctx->cpBindh, ':')) != NULL) {
                       *ctx->cpBindp++ = NUL;
  @@ -470,60 +490,8 @@
                               ctx->progname, ctx->cpBindh, ctx->cpBindp, rc);
                       CU(ERR_EXECUTION);
                   }
  -                break;
  -            case 'd': /*POD [B<-d> I<deliverymode>] */
  -                if      (strcasecmp(optarg, "post") == 0)
  -                    ctx->option_deliverymode = DELIVERYMODE_POST;
  -                else if (strcasecmp(optarg, "feed") == 0)
  -                    ctx->option_deliverymode = DELIVERYMODE_FEED;
  -                else {
  -                    if (strlen(optarg) != 9) {
  -                        fprintf(stderr, "%s:Error: Invalid format or length \"%s\" to option -d\n", ctx->progname, optarg);
  -                        CU(ERR_EXECUTION);
  -                    }
  -
  -                    if (optarg[3] != '/') {
  -                        fprintf(stderr, "%s:Error: Invalid format or missing slash \"%s\" to option -d\n", ctx->progname, optarg);
  -                        CU(ERR_EXECUTION);
  -                    }
  -
  -                    optarg[3] = NUL;
  -                    ctx->option_deliverymodefakestatus = &optarg[0];
  -                    ctx->option_deliverymodefakedsn    = &optarg[4];
  -
  -                    if (   strlen(ctx->option_deliverymodefakestatus) != 3
  -                        || !isdigit((int)ctx->option_deliverymodefakestatus[0])
  -                        || !isdigit((int)ctx->option_deliverymodefakestatus[1])
  -                        || !isdigit((int)ctx->option_deliverymodefakestatus[2])) {
  -                            fprintf(stderr, "%s:Error: Invalid status in format \"%s\" to option -d\n", ctx->progname, optarg);
  -                            CU(ERR_EXECUTION);
  -                        }
  -
  -                    if (   (strlen(ctx->option_deliverymodefakedsn) != 5)
  -                        || !isdigit((int)ctx->option_deliverymodefakedsn[0])
  -                        || (ctx->option_deliverymodefakedsn[1] != '.')
  -                        || !isdigit((int)ctx->option_deliverymodefakedsn[2])
  -                        || (ctx->option_deliverymodefakedsn[3] != '.')
  -                        || !isdigit((int)ctx->option_deliverymodefakedsn[4])
  -                        || (ctx->option_deliverymodefakedsn[0] != ctx->option_deliverymodefakestatus[0])) {
  -                            fprintf(stderr, "%s:Error: Invalid dsn in format \"%s\" to option -d\n", ctx->progname, optarg);
  -                            CU(ERR_EXECUTION);
  -                        }
  -                    }
  -                break;
  -            case 'g': /*POD [B<-g> I<groupmode>] */
  -                if      (strcasecmp(optarg, "arg") == 0)
  -                    ctx->option_groupmode = GROUPMODE_ARG;
  -                else if (strcasecmp(optarg, "envelope") == 0)
  -                    ctx->option_groupmode = GROUPMODE_ENVELOPE;
  -                else if (strcasecmp(optarg, "header") == 0)
  -                    ctx->option_groupmode = GROUPMODE_HEADER;
  -                else {
  -                    fprintf(stderr, "%s:Error: Invalid mode \"%s\" to option -g\n", ctx->progname, optarg);
  -                    CU(ERR_EXECUTION);
  -                }
                   break;
  -            case 'h': /*POD [B<-h> I<host>[I<:port>][,I<host>[I<:port>], ...]] */
  +            case 'd': /*POD [B<-d> I<addr>[I<:port>][,I<addr>[I<:port>], ...]] */
                   if (argz_create_sep(optarg, ',', &azHosts, &asHosts) != 0)
                       CU(ERR_EXECUTION);
                   cp = NULL;
  @@ -561,8 +529,17 @@
                   }
                   free(azHosts);
                   break;
  -            case 'k': /*POD [B<-k>] */
  -                ctx->option_killflag = TRUE;
  +            case 'g': /*POD [B<-g> I<groupmode>] */
  +                if      (strcasecmp(optarg, "arg") == 0)
  +                    ctx->option_groupmode = GROUPMODE_ARG;
  +                else if (strcasecmp(optarg, "envelope") == 0)
  +                    ctx->option_groupmode = GROUPMODE_ENVELOPE;
  +                else if (strcasecmp(optarg, "header") == 0)
  +                    ctx->option_groupmode = GROUPMODE_HEADER;
  +                else {
  +                    fprintf(stderr, "%s:Error: Invalid mode \"%s\" to option -g\n", ctx->progname, optarg);
  +                    CU(ERR_EXECUTION);
  +                }
                   break;
               case 'l': /*POD [B<-l> I<level>[:I<logfile>]] */
                   if ((cp = strrchr(optarg, ':')) != NULL) {
  @@ -606,8 +583,45 @@
                   }
                   strcpy(ctx->uname.nodename, optarg);
                   break;
  -            case 'p': /*POD [B<-p> I<pidfile>] */
  -                ctx->option_pidfile = strdup(optarg);
  +            case 'o': /*POD [B<-o> I<operationmode>] */
  +                if      (strcasecmp(optarg, "post") == 0)
  +                    ctx->option_operationmode = OPERATIONMODE_POST;
  +                else if (strcasecmp(optarg, "feed") == 0)
  +                    ctx->option_operationmode = OPERATIONMODE_FEED;
  +                else {
  +                    if (strlen(optarg) != 9) {
  +                        fprintf(stderr, "%s:Error: Invalid format or length \"%s\" to option -d\n", ctx->progname, optarg);
  +                        CU(ERR_EXECUTION);
  +                    }
  +
  +                    if (optarg[3] != '/') {
  +                        fprintf(stderr, "%s:Error: Invalid format or missing slash \"%s\" to option -d\n", ctx->progname, optarg);
  +                        CU(ERR_EXECUTION);
  +                    }
  +
  +                    optarg[3] = NUL;
  +                    ctx->option_operationmodefakestatus = &optarg[0];
  +                    ctx->option_operationmodefakedsn    = &optarg[4];
  +
  +                    if (   strlen(ctx->option_operationmodefakestatus) != 3
  +                        || !isdigit((int)ctx->option_operationmodefakestatus[0])
  +                        || !isdigit((int)ctx->option_operationmodefakestatus[1])
  +                        || !isdigit((int)ctx->option_operationmodefakestatus[2])) {
  +                            fprintf(stderr, "%s:Error: Invalid status in format \"%s\" to option -d\n", ctx->progname, optarg);
  +                            CU(ERR_EXECUTION);
  +                        }
  +
  +                    if (   (strlen(ctx->option_operationmodefakedsn) != 5)
  +                        || !isdigit((int)ctx->option_operationmodefakedsn[0])
  +                        || (ctx->option_operationmodefakedsn[1] != '.')
  +                        || !isdigit((int)ctx->option_operationmodefakedsn[2])
  +                        || (ctx->option_operationmodefakedsn[3] != '.')
  +                        || !isdigit((int)ctx->option_operationmodefakedsn[4])
  +                        || (ctx->option_operationmodefakedsn[0] != ctx->option_operationmodefakestatus[0])) {
  +                            fprintf(stderr, "%s:Error: Invalid dsn in format \"%s\" to option -d\n", ctx->progname, optarg);
  +                            CU(ERR_EXECUTION);
  +                        }
  +                    }
                   break;
               case 's': /*POD [B<-s> I<size>] */
                   ctx->option_maxmessagesize = atoi(optarg);
  @@ -616,24 +630,55 @@
                       CU(ERR_EXECUTION);
                   }
                   break;
  -            case 't': /*POD [B<-t> I<timeout>] */
  -                ctx->option_timeout = atoi(optarg);
  -                if(ctx->option_timeout < 0) {
  -                    fprintf(stderr, "%s:Error: timeout %d to option -t must be a positive integer.\n", ctx->progname, ctx->option_waittime);
  +            case 't': /*POD [B<-t> I<name>=I<sec>[,I<name>=I<sec>[,...]] */
  +                if (argz_create_sep(optarg, ',', &azTimeout, &asTimeout) != 0)
                       CU(ERR_EXECUTION);
  +                cp = NULL;
  +                while ((cp = argz_next(azTimeout, asTimeout, cp)) != NULL) {
  +                    cpName = strdup(cp);
  +                    if ((cpValue = strrchr(cpName, '=')) == NULL) {
  +                        fprintf(stderr, "%s:Error: comma-seperated argument %s to option -t have to be name=value.\n", ctx->progname, cp);
  +                        CU(ERR_EXECUTION);
  +                    }
  +                    *cpValue++ = NUL;
  +                    nValue = atoi(cpValue);
  +                    if (nValue < 0) {
  +                        fprintf(stderr, "%s:Error: timeout %s=%d to option -t must be a positive integer.\n", ctx->progname, cpName, nValue)
  +                        CU(ERR_EXECUTION);
  +                    }
  +                    if (strcmp(cpName, "lmtp") == 0) {
  +                        ctx->option_timeout_lmtp_accept = nValue;
  +                        ctx->option_timeout_lmtp_read = nValue;
  +                        ctx->option_timeout_lmtp_write = nValue;
  +                    }
  +                    else if (strcmp(cpName, "lmtp:accept") == 0)
  +                        ctx->option_timeout_lmtp_accept = nValue;
  +                    else if (strcmp(cpName, "lmtp:read") == 0)
  +                        ctx->option_timeout_lmtp_read = nValue;
  +                    else if (strcmp(cpName, "lmtp:write") == 0)
  +                        ctx->option_timeout_lmtp_write = nValue;
  +                    else if (strcmp(cpName, "nntp") == 0) {
  +                        ctx->option_timeout_nntp_connect = nValue;
  +                        ctx->option_timeout_nntp_read = nValue;
  +                        ctx->option_timeout_nntp_write = nValue;
  +                    }
  +                    else if (strcmp(cpName, "nntp:connect") == 0)
  +                        ctx->option_timeout_nntp_connect = nValue;
  +                    else if (strcmp(cpName, "nntp:read") == 0)
  +                        ctx->option_timeout_nntp_read = nValue;
  +                    else if (strcmp(cpName, "nntp:write") == 0)
  +                        ctx->option_timeout_nntp_write = nValue;
  +                    else {
  +                        fprintf(stderr, "%s:Error: unknown timeout %s to option -t.\n", ctx->progname, cpName);
  +                        CU(ERR_EXECUTION);
  +                    }
                   }
  +                free(azTimeout);
                   break;
               case 'v': /*POD [B<-v>] (version)*/
                   fprintf(stdout, "%s\n", lmtp2nntp_version.v_gnu);
                   CU(0);
                   break;
  -            case 'w': /*POD [B<-w> I<waittime>] */
  -                ctx->option_waittime = atoi(optarg);
  -                if(ctx->option_waittime < 1) {
  -                    fprintf(stderr, "%s:Error: waittime %d to option -w must be greater 1 second.\n", ctx->progname, ctx->option_waittime);
  -                    CU(ERR_EXECUTION);
  -                }
  -                break;
               case '?':
               default:
                   usage(ctx->progname);
  @@ -797,7 +842,8 @@
           lmtp_destroy(lmtp);
       } else {
           pid = getpid();
  -        daemonize();
  +        if (ctx->option_daemon)
  +            daemonize();
           if (ctx->option_pidfile != NULL) {
               if ((fd = fopen(ctx->option_pidfile, "w+")) == NULL)
                   log1(ctx, ERROR, "cannot open pidfile \"%s\" for writing %m", ctx->option_pidfile);
  @@ -808,8 +854,10 @@
           }
           log1(ctx, NOTICE, "startup daemonized, previous pid[%d]", pid); l2_stream_flush(ctx->l2);
   
  -        sa_timeout(ctx->saAltio, SA_TIMEOUT_ALL, ctx->option_timeout, 0);
  -        sa_timeout(ctx->saAltio, SA_TIMEOUT_ACCEPT, 0, 0);
  +        sa_timeout(ctx->saAltio, SA_TIMEOUT_ALL,    0, 0);
  +        sa_timeout(ctx->saAltio, SA_TIMEOUT_ACCEPT, ctx->option_timeout_lmtp_accept, 0);
  +        sa_timeout(ctx->saAltio, SA_TIMEOUT_READ,   ctx->option_timeout_lmtp_read,   0);
  +        sa_timeout(ctx->saAltio, SA_TIMEOUT_WRITE,  ctx->option_timeout_lmtp_write,  0);
           while ((rc = sa_accept(ctx->saAltio, &ctx->saaIO, &ctx->saIO)) == SA_OK) {
               l2_stream_flush(ctx->l2); /* must flush before fork() */
               pid = fork();
  @@ -969,7 +1017,7 @@
        *  RFC1893 2. Status Codes                         4.X.X   Persistent Transient Failure
        *  RFC1893 3.5 Network and Routing Status          X.3.5   System incorrectly configured
        */
  -    if (ctx->option_deliverymode != DELIVERYMODE_FAKE) {
  +    if (ctx->option_operationmode != OPERATIONMODE_FAKE) {
           log0(ctx, TRACE, "check if at least one NNTP service was successfully configured");
           if (ctx->nsc == 0) {
               res.statuscode = "451";
  @@ -980,7 +1028,7 @@
       }
   
       log0(ctx, TRACE, "try to establish a session to any configured NNTP services");
  -    if (ctx->option_deliverymode == DELIVERYMODE_FAKE)
  +    if (ctx->option_operationmode == OPERATIONMODE_FAKE)
           log0(ctx, NOTICE, "NNTP running in fake mode, network connections will be executed but result is ignored");
       i = 0;
       do {
  @@ -1048,7 +1096,7 @@
           }
       } while (i < ctx->nsc);
   
  -    if (ctx->option_deliverymode == DELIVERYMODE_FAKE)
  +    if (ctx->option_operationmode == OPERATIONMODE_FAKE)
           log1(ctx, NOTICE, "NNTP running in fake mode, network connections successfully established=%d but ignored", ctx->nsc);
       else
       {
  @@ -1665,14 +1713,14 @@
       log0(ctx, TRACE, "deliver message");
       bSuccess = NNTP_ERR_DELIVERY; /* assume a hard error for the worst case */
       for (i = 0; i < ctx->nsc; i++) {
  -        switch (ctx->option_deliverymode) {
  -            case DELIVERYMODE_FAKE:
  +        switch (ctx->option_operationmode) {
  +            case OPERATIONMODE_FAKE:
                   ctx->ns[i].rc = NNTP_FAKE;
                   break;
  -            case DELIVERYMODE_POST:
  +            case OPERATIONMODE_POST:
                   ctx->ns[i].rc = nntp_post(ctx->ns[i].nntp, ctx->msg);
                   break;
  -            case DELIVERYMODE_FEED:
  +            case OPERATIONMODE_FEED:
                   ctx->ns[i].rc = nntp_feed(ctx->ns[i].nntp, ctx->msg);
                   break;
           }
  @@ -1688,14 +1736,14 @@
               bSuccess = NNTP_DEFER;
       }
   
  -    if (ctx->option_deliverymode == DELIVERYMODE_FAKE) {
  +    if (ctx->option_operationmode == OPERATIONMODE_FAKE) {
           str_format(errorstring, sizeof(errorstring),
                      "NNTP running in fake mode, delivery of %s [%d bytes] %s but delivery status forced to",
                      ctx->msg->cpMsgid,
                      strlen(ctx->msg->cpMsg),
                      ((bSuccess == NNTP_OK)    ? "succeeded" :
                       (bSuccess == NNTP_DEFER) ? "deferred"  : "failed"));
  -        switch (ctx->option_deliverymodefakestatus[0]) {
  +        switch (ctx->option_operationmodefakestatus[0]) {
               case '5':
                   bSuccess = NNTP_ERR_UNKNOWN;
                   log2(ctx, NOTICE, "%s %s", errorstring, "failed");
  @@ -1711,8 +1759,8 @@
           }
       } else {
           str_format(errorstring, sizeof(errorstring), "%sdelivery of %s [%d bytes]", 
  -                   ((ctx->option_deliverymode == DELIVERYMODE_POST) ? "post " :
  -                   (ctx->option_deliverymode == DELIVERYMODE_FEED) ? "feed " : ""),
  +                   ((ctx->option_operationmode == OPERATIONMODE_POST) ? "post " :
  +                   (ctx->option_operationmode == OPERATIONMODE_FEED) ? "feed " : ""),
                      ctx->msg->cpMsgid,
                      strlen(ctx->msg->cpMsg));
           if (bSuccess == NNTP_OK)
  @@ -1735,9 +1783,9 @@
        */
       rcpt = NULL;
       while ((rcpt = argz_next(ctx->msg->azRcpt, ctx->msg->asRcpt, rcpt)) != NULL) {
  -        if (ctx->option_deliverymode == DELIVERYMODE_FAKE) {
  -                    res.statuscode = ctx->option_deliverymodefakestatus;
  -                    res.dsncode    = ctx->option_deliverymodefakedsn;
  +        if (ctx->option_operationmode == OPERATIONMODE_FAKE) {
  +                    res.statuscode = ctx->option_operationmodefakestatus;
  +                    res.dsncode    = ctx->option_operationmodefakedsn;
                       str_format(errorstring, sizeof(errorstring),
                                  "NNTP noop fake return for %s", rcpt);
           } else {
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 lmtp2nntp.pod
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/10/09 08:22:29	1.25
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/10/09 10:19:12	1.26
  @@ -33,20 +33,21 @@
   =head1 SYNOPSIS
   
   B<lmtp2nntp>
  -[B<-a> I<altio>]
  -[B<-b> I<bindaddr>[I<:port>]]
  -[B<-d> I<deliverymode>]
  +[B<-D>]
  +[B<-K>]
  +[B<-P> I<pidfile>]
  +[B<-a> I<addr>/I<mask>[,I<addr>/I<mask>[,...]]
  +[B<-b> C<->|I<path>|I<addr>[I<:port>]]
  +[B<-c> I<addr>[I<:port>]]
  +[B<-d> I<addr>[I<:port>][,I<addr>[I<:port>], ...]]
   [B<-g> I<groupmode>]
  -[B<-h> I<host>[I<:port>][,I<host>[I<:port>], ...]]
  -[B<-k>]
  +[B<-l> I<level>[:I<logfile>]]
   [B<-m> I<mailfrom>]
   [B<-n> I<nodename>]
  -[B<-p> I<pidfile>]
  +[B<-o> I<operationmode>]
   [B<-s> I<size>]
  -[B<-t> I<timeout>]
  -[B<-l> I<level>[:I<logfile>]]
  +[B<-t> I<name>=I<sec>[,I<name>=I<sec>[,...]]
   [B<-v>]
  -[B<-w> I<waittime>]
   I<newsgroup> [I<newsgroup> ...]
   
   =head1 DESCRIPTION
  @@ -66,17 +67,15 @@
   
   =over 4
   
  -=item B<-a> I<altio>
  +=item B<-b> C<->|I<path>|I<addr>[I<:port>] (LMTP bind)
   
  -Alternate IO allows reading and writing from/to a UNIX domain or TCP sockets
  -instead stdin/stdout. This places the program in daemon mode. The syntax for
  -altio is either "unix:/path/to/socket" or "inet://address:port". If "unix:/"
  -and "inet://" prefixes are ommited the program tries to guess the desired mode
  -based on the existing of a leading slash.
  +Where to bind for incoming LMTP connections. Supported are "C<->"
  +(stdin/stdout), I<path> (for Unix Domain socket) and I<addr>[I<:port>]
  +(for TCP Internet Domain socket).
   
  -=item B<-b> I<bindaddr>[I<:port>]
  +=item B<-c> I<addr>[I<:port>] 
   
  -Bind address and/or port to be used by the LMTP client.  If an address is
  +Where to bind for outgoing NNTP connections. If an address is
   specified but port is omitted the kernel chooses an ephemeral port. If you
   want to specify a port but no address replace address with 0.0.0.0.  If
   completely omitted, 0.0.0.0:0 is assumed which causes the kernel to choose an

From ossp-cvs-owner@ossp.org  Tue Oct  9 12:24:42 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f99AOfw43781; Tue, 9 Oct 2001 12:24:41 +0200 (CEST)
Date: Tue, 9 Oct 2001 12:24:41 +0200 (CEST)
Message-Id: <200110091024.f99AOfw43781@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Oct-2001 12:24:41
  Branch: HEAD                             Handle: 2001100911244100

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c

  Log:
    bugfix syntax

  Summary:
    Revision    Changes     Path
    1.73        +5  -1      ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.72 -r1.73 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/09 10:19:12	1.72
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/09 10:24:41	1.73
  @@ -355,6 +355,9 @@
       l2_channel_t *chFile;
       pid_t         pid;
       FILE         *fd;
  +    char         *cpName;
  +    char         *cpValue;
  +    int           nValue;
   
       /* library version check (run-time) */
       if (l2_version.v_hex < L2_VERSION_HEX_REQ) {
  @@ -643,7 +646,7 @@
                       *cpValue++ = NUL;
                       nValue = atoi(cpValue);
                       if (nValue < 0) {
  -                        fprintf(stderr, "%s:Error: timeout %s=%d to option -t must be a positive integer.\n", ctx->progname, cpName, nValue)
  +                        fprintf(stderr, "%s:Error: timeout %s=%d to option -t must be a positive integer.\n", ctx->progname, cpName, nValue);
                           CU(ERR_EXECUTION);
                       }
                       if (strcmp(cpName, "lmtp") == 0) {
  @@ -672,6 +675,7 @@
                           fprintf(stderr, "%s:Error: unknown timeout %s to option -t.\n", ctx->progname, cpName);
                           CU(ERR_EXECUTION);
                       }
  +                    free(cpName);
                   }
                   free(azTimeout);
                   break;

From ossp-cvs-owner@ossp.org  Tue Oct  9 12:34:12 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f99AYBe44958; Tue, 9 Oct 2001 12:34:11 +0200 (CEST)
Date: Tue, 9 Oct 2001 12:34:11 +0200 (CEST)
Message-Id: <200110091034.f99AYBe44958@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c test.sh
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Oct-2001 12:34:11
  Branch: HEAD                             Handle: 2001100911341000

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c test.sh

  Log:
    post-bugfixes to reflect recent changes

  Summary:
    Revision    Changes     Path
    1.74        +7  -9      ossp-pkg/lmtp2nntp/lmtp2nntp.c
    1.4         +15 -14     ossp-pkg/lmtp2nntp/test.sh
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.73 -r1.74 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/09 10:24:41	1.73
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/09 10:34:10	1.74
  @@ -131,7 +131,6 @@
       char           *option_operationmodefakestatus;
       char           *option_operationmodefakedsn;
       int             option_maxmessagesize;
  -    int             option_waittime;
       int             option_timeout_lmtp_accept;
       int             option_timeout_lmtp_read;
       int             option_timeout_lmtp_write;
  @@ -380,7 +379,6 @@
       ctx->option_operationmodefakestatus = "553";   /* Requested action not taken: mailbox name not allowed */
       ctx->option_operationmodefakedsn    = "5.7.1"; /* Delivery not authorized, message refused */
       ctx->option_maxmessagesize = 8 * 1024 * 1024;
  -    ctx->option_waittime = -1;
       ctx->option_timeout_lmtp_accept = 0;
       ctx->option_timeout_lmtp_read = 10;
       ctx->option_timeout_lmtp_write = 10;
  @@ -1048,10 +1046,10 @@
               }
           }
   
  -        if (bOk && (ctx->option_waittime > 0)) {
  -            log1(ctx, DEBUG, "timeout configured through waittime=%d", ctx->option_waittime);
  -            sa_timeout(ctx->ns[i].sa, SA_TIMEOUT_ALL, ctx->option_waittime, 0);
  -            }
  +        sa_timeout(ctx->ns[i].sa, SA_TIMEOUT_ALL, 0, 0);
  +        sa_timeout(ctx->ns[i].sa, SA_TIMEOUT_CONNECT, ctx->option_timeout_nntp_connect, 0);
  +        sa_timeout(ctx->ns[i].sa, SA_TIMEOUT_READ,    ctx->option_timeout_nntp_read,    0);
  +        sa_timeout(ctx->ns[i].sa, SA_TIMEOUT_WRITE,   ctx->option_timeout_nntp_read,    0);
   
           if (bOk) {
               log0(ctx, DEBUG, "connect");
  @@ -1073,9 +1071,9 @@
               }
           }
   
  -        if (bOk && ctx->option_waittime >= 0) {
  -            log1(ctx, DEBUG, "nntp_timeout with %d", ctx->option_waittime);
  -            nntp_timeout(ctx->ns[i].nntp, ctx->option_waittime);
  +        if (bOk && ctx->option_timeout_nntp_connect >= 0) {
  +            log1(ctx, DEBUG, "nntp_timeout with %d", ctx->option_timeout_nntp_connect);
  +            nntp_timeout(ctx->ns[i].nntp, ctx->option_timeout_nntp_connect);
           }
   
           if (bOk) {
  Index: ossp-pkg/lmtp2nntp/test.sh
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 test.sh
  --- ossp-pkg/lmtp2nntp/test.sh	2001/10/08 10:28:42	1.3
  +++ ossp-pkg/lmtp2nntp/test.sh	2001/10/09 10:34:10	1.4
  @@ -16,10 +16,10 @@
   Message-Id: <200108141251.f7ECpmn74812@dev.de.cw.net>
   From: Thomas Lotterer <Thomas.Lotterer@example.com>
   Received: from cw.example.com (cw.example.com [10.1.1.32])
  -    by gateway.example.com (8.9.2/8.9.2/$Revision: 1.3 $) with SMTP id NAA08840
  +    by gateway.example.com (8.9.2/8.9.2/$Revision: 1.4 $) with SMTP id NAA08840
       for <thomas.lotterer@gateway.example.com>; Mon, 2 Apr 2001 13:20:25 +0200 (MET DST)
   Received: from history (history.example.org [195.143.102.41])
  -    by cw.example.com (8.11.0/8.11.0/$Revision: 1.3 $) with ESMTP id f32BKPb12235
  +    by cw.example.com (8.11.0/8.11.0/$Revision: 1.4 $) with ESMTP id f32BKPb12235
       for <thomas.lotterer@example.com>; Mon, 2 Apr 2001 13:20:25 +0200
   Received: from example.org (littlemua.example.org [195.143.103.160])
   	by history (8.8.8/8.8.8) with ESMTP id LAA12678;
  @@ -101,13 +101,14 @@
   
   echon "checking whether -? usage option works ... "
   # expected typical output: USAGE: ./lmtp2nntp
  -# lmtp2nntp [-b bindaddr[:port]] [-d deliverymode] [-g groupmode] [-h
  -# host[:port][,host[:port], ...]] [-m mailfrom] [-n nodename] [-s size] [-l
  -# level[:logfile]] [-v] [-w waittime] newsgroup [newsgroup ...]
  +# [-D] [-K] [-P pidfile] [-a addr/mask[,addr/mask[,...]] [-b
  +# -|path|addr[:port]] [-c addr[:port]] [-d addr[:port][,addr[:port], ...]] [-g
  +# groupmode] [-l level[:logfile]] [-m mailfrom] [-n nodename] [-o operationmode]
  +# [-s size] [-t name=sec[,name=sec[,...]] [-v] newsgroup [newsgroup ...] 
   prolog
   newmsg
   ./lmtp2nntp -? >${STDOUT} 2>${STDERR}
  -RC=`cat ${STDERR} | egrep -- '-a.*-b.*-d.*-g.*-h.*-l.*-m.*-n.*-s.*-v.*-w.*newsgroup' | wc -l`
  +RC=`cat ${STDERR} | egrep -- '-D.*-K.*-P.*-a.*-b.*-d.*-g.*-l.*-m.*-n.*-o.*-s.*-t.*-v.*newsgroup' | wc -l`
   if [ ${RC} -ne 1 -o -s ${STDOUT} ]; then
       echo "NO (got ${RC})"
       exit 1;
  @@ -117,7 +118,7 @@
   echon "checking whether a valid fake posting succeeds ... "
   prolog
   newmsg
  -./lmtp2nntp <${STDIN} -b ${LOCAL} -d 250/2.0.0 -g arg -h ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 1000 -w 1 ${GROUP} >${STDOUT} 2>${STDERR} ; RC=$
  +./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 1000 -t nntp:connect=1 ${GROUP} >${STDOUT} 2>${STDERR} ; RC=$
   RC="";
   if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
   if [ 1 -eq `egrep <${STDOUT} '^250[- ].*pleased to meet you'    | wc -l` ]; then RC="${RC}LHLO "; fi
  @@ -135,7 +136,7 @@
   echon "checking whether -m option blocks invalid sender ... "
   prolog
   newmsg
  -( MFILT=".*@is.invalid" ; ./lmtp2nntp <${STDIN} -b ${LOCAL} -d 250/2.0.0 -g arg -h ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 1000 -w 1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
  +( MFILT=".*@is.invalid" ; ./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 1000 -t nntp:connect=1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
   RC="";
   if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
   if [ 1 -eq `egrep <${STDOUT} '^250[- ].+pleased to meet you'    | wc -l` ]; then RC="${RC}LHLO "; fi
  @@ -153,7 +154,7 @@
   echon "checking whether -s option rejects article with invalid size ... "
   prolog
   newmsg
  -./lmtp2nntp <${STDIN} -b ${LOCAL} -d 250/2.0.0 -g arg -h ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 100  -w 1 ${GROUP} >${STDOUT} 2>${STDERR} ; RC=$?
  +./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 100 -t nntp:connect=1 ${GROUP} >${STDOUT} 2>${STDERR} ; RC=$?
   RC="";
   if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
   if [ 1 -eq `egrep <${STDOUT} '^250[- ].*pleased to meet you'    | wc -l` ]; then RC="${RC}LHLO "; fi
  @@ -168,10 +169,10 @@
   fi
   echo "yes"
   
  -echon "checking whether -b option fails on invalid local host address ... "
  +echon "checking whether -c option fails on invalid local host address ... "
   prolog
   newmsg
  -( LOCAL="10.255.255.255" ; ./lmtp2nntp <${STDIN} -b ${LOCAL} -d 250/2.0.0 -g arg -h ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 1000 -w 1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
  +( LOCAL="10.255.255.255" ; ./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 1000 -t nntp:connect=1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
   RC="";
   if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
   if [ 1 -eq `egrep <${FILE}   'error.+binding'                   | wc -l` ]; then RC="${RC}bind "; fi
  @@ -184,7 +185,7 @@
   echon "checking whether -g envelope option blocks invalid group ... "
   prolog
   newmsg
  -( GROUP="foo.*" ; ./lmtp2nntp <${STDIN} -b ${LOCAL} -d 250/2.0.0 -g envelope -h ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 1000 -w 1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
  +( GROUP="foo.*" ; ./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g envelope -d ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 1000 -t nntp:connect=1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
   RC="";
   if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
   if [ 1 -eq `egrep <${STDOUT} '^250[- ].*pleased to meet you'    | wc -l` ]; then RC="${RC}LHLO "; fi
  @@ -200,10 +201,10 @@
   fi
   echo "yes"
   
  -echon "checking whether -h option times out for invalid host ... "
  +echon "checking whether -d option times out for invalid host ... "
   prolog
   newmsg
  -( HOST="10.255.255.255" ; ./lmtp2nntp <${STDIN} -b ${LOCAL} -d 250/2.0.0 -g arg -h ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 1000 -w 1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
  +( HOST="10.255.255.255" ; ./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 1000 -t nntp:connect=1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
   RC="";
   if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
   if [ 1 -eq `egrep <${FILE}   'warning.+connect.+failed'         | wc -l` ]; then RC="${RC}conn "; fi

From ossp-cvs-owner@ossp.org  Tue Oct  9 14:09:00 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f99C8xh55599; Tue, 9 Oct 2001 14:08:59 +0200 (CEST)
Date: Tue, 9 Oct 2001 14:08:59 +0200 (CEST)
Message-Id: <200110091208.f99C8xh55599@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c nntp.c nntp.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Oct-2001 14:08:59
  Branch: HEAD                             Handle: 2001100913085801

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c nntp.c nntp.h

  Log:
    - Change NNTP library to fully use OSSP SA.
    - Removed timeout handling from NNTP library and use SA timeouts instead.

  Summary:
    Revision    Changes     Path
    1.75        +26 -24     ossp-pkg/lmtp2nntp/lmtp2nntp.c
    1.26        +16 -51     ossp-pkg/lmtp2nntp/nntp.c
    1.12        +9  -6      ossp-pkg/lmtp2nntp/nntp.h
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.74 -r1.75 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/09 10:34:10	1.74
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/09 12:08:58	1.75
  @@ -120,6 +120,7 @@
       sa_t           *sa;   /* socket abstraction */
       nntp_t         *nntp;
       nntp_rc_t       rc;
  +    l2_stream_t    *l2;
   };
   
   typedef struct {
  @@ -230,7 +231,7 @@
           log0(ctx, TRACE, "LMTP read error: %m");
       else
           log3(ctx, TRACE, "LMTP %5d << \"%{text}D\"", rc, buf, rc);
  -    log1(ctx, DEBUG, "trace_lmtp_read() return, rc=%d", rc);
  +    log1(ctx, DEBUG, "hook_lmtp_read() return, rc=%d", rc);
       return rc;
   }
   
  @@ -255,12 +256,17 @@
       return rc;
   }
   
  -static ssize_t trace_nntp_read(void *_ctx, int d, void *buf, size_t nbytes)
  +static ssize_t hook_nntp_read(void *_ctx, void *buf, size_t nbytes)
   {
  -    lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx;
  +    struct ns *ctx = (struct ns *)_ctx;
       ssize_t rc;
  +    size_t n;
  +    sa_rc_t rv;
   
  -    rc = read(d, buf, nbytes);
  +    if ((rv = sa_read(ctx->sa, buf, nbytes, &n)) != SA_OK)
  +        rc = -1;
  +    else
  +        rc = (ssize_t)n;
       if (rc == -1)
           log0(ctx, TRACE, "NNTP read error: %m");
       else
  @@ -268,13 +274,18 @@
       return rc;
   }
   
  -static ssize_t trace_nntp_write(void *_ctx, int d, const void *buf, size_t nbytes)
  +static ssize_t hook_nntp_write(void *_ctx, const void *buf, size_t nbytes)
   {
  -    lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx;
  +    struct ns *ctx = (struct ns *)_ctx;
       ssize_t rc;
  +    size_t n;
  +    sa_rc_t rv;
   
       log3(ctx, TRACE, "NNTP %5d >> \"%{text}D\"", nbytes, buf, nbytes);
  -    rc = write(d, buf, nbytes);
  +    if ((rv = sa_write(ctx->sa, buf, nbytes, &n)) != SA_OK)
  +        rc = -1;
  +    else
  +        rc = (ssize_t)n;
       if (rc == -1)
           log0(ctx, TRACE, "NNTP write error: %m");
       return rc;
  @@ -405,6 +416,7 @@
           ctx->ns[i].sa = NULL;
           ctx->ns[i].nntp = NULL;
           ctx->ns[i].rc = LMTP_ERR_UNKNOWN;
  +        ctx->ns[i].l2 = NULL;
       }
       ctx->azGroupargs = NULL;
       ctx->asGroupargs = 0;
  @@ -981,15 +993,9 @@
       int          bOk;
       int          i;
       nntp_io_t    nntp_io;
  -    int          s;
   
       log1(ctx, INFO, "LMTP service executing LHLO command < %s", req->msg);
   
  -    nntp_io.ctx    = ctx;
  -    nntp_io.select = NULL;
  -    nntp_io.read   = trace_nntp_read;
  -    nntp_io.write  = trace_nntp_write;
  -
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   503 Bad sequence of commands
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.0.0   Other undefined Status
  @@ -1038,6 +1044,8 @@
           bOk = TRUE;
           log2(ctx, TRACE, "try %s:%s", ctx->ns[i].h, ctx->ns[i].p);
   
  +        ctx->ns[i].l2 = ctx->l2;
  +
           if (bOk && (ctx->saaBind != NULL)) {
               log2(ctx, DEBUG, "bind local socket to %s:%s", ctx->cpBindh, ctx->cpBindp);
               if (sa_bind(ctx->ns[i].sa, ctx->saaBind) != SA_OK) {
  @@ -1062,20 +1070,15 @@
   
           if (bOk) {
               log0(ctx, DEBUG, "nntp_create");
  -            sa_getfd(ctx->ns[i].sa, &s);
  -            if ((ctx->ns[i].nntp = nntp_create(s, s, 
  -                                               (ctx->option_logfile && (ctx->option_levelmask >= L2_LEVEL_TRACE)) ?
  -                                                &nntp_io : NULL)) == NULL) {
  +            nntp_io.ctx    = &ctx->ns[i];
  +            nntp_io.read   = hook_nntp_read;
  +            nntp_io.write  = hook_nntp_write;
  +            if ((ctx->ns[i].nntp = nntp_create(&nntp_io)) == NULL) {
                   bOk = FALSE;
                   log0(ctx, ERROR, "creation of NNTP context failed");
               }
           }
   
  -        if (bOk && ctx->option_timeout_nntp_connect >= 0) {
  -            log1(ctx, DEBUG, "nntp_timeout with %d", ctx->option_timeout_nntp_connect);
  -            nntp_timeout(ctx->ns[i].nntp, ctx->option_timeout_nntp_connect);
  -        }
  -
           if (bOk) {
               log0(ctx, DEBUG, "nntp_init");
               if ((rc = nntp_init(ctx->ns[i].nntp)) != NNTP_OK) {
  @@ -1730,8 +1733,7 @@
               bSuccess = NNTP_OK;
           if (   bSuccess != NNTP_OK
               && (
  -                   (ctx->ns[i].rc == NNTP_TIMEOUT)
  -                || (ctx->ns[i].rc == NNTP_ERR_SYSTEM)
  +                   (ctx->ns[i].rc == NNTP_ERR_SYSTEM)
                   || (ctx->ns[i].rc == NNTP_DEFER)
                     )
                 )
  Index: ossp-pkg/lmtp2nntp/nntp.c
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 nntp.c
  --- ossp-pkg/lmtp2nntp/nntp.c	2001/09/11 13:38:07	1.25
  +++ ossp-pkg/lmtp2nntp/nntp.c	2001/10/09 12:08:59	1.26
  @@ -63,66 +63,44 @@
   } nntp_readline_t;
   
   struct nntp_st {
  -    int             rfd;
  -    int             wfd;
       nntp_io_t       io;
       nntp_readline_t rl; 
       struct timeval  tv;
       int             kludgeinn441dup;
   };
   
  -static int nntp_select(void *ctx, int nfds, fd_set *rfds, fd_set *wfds, fd_set *efds, struct timeval *tv)
  +ssize_t nntp_fd_read(void *_ctx, void *buf, size_t buflen)
   {
  -    return select(nfds, rfds, wfds, efds, tv);
  +    nntp_fd_t *ctx = (nntp_fd_t *)_ctx;
  +    return read(ctx->fd, buf, buflen);
   }
   
  -static ssize_t nntp_read(void *ctx, int fd, void *buf, size_t buflen)
  +ssize_t nntp_fd_write(void *_ctx, const void *buf, size_t buflen)
   {
  -    return read(fd, buf, buflen);
  +    nntp_fd_t *ctx = (nntp_fd_t *)_ctx;
  +    return write(ctx->fd, buf, buflen);
   }
   
  -static ssize_t nntp_write(void *ctx, int fd, const void *buf, size_t buflen)
  +nntp_t *nntp_create(nntp_io_t *io)
   {
  -    return write(fd, buf, buflen);
  -}
  -
  -nntp_t *nntp_create(int rfd, int wfd, nntp_io_t *io)
  -{
       nntp_t *nntp;
   
       if ((nntp = (nntp_t *)malloc(sizeof(nntp_t))) == NULL) 
           return NULL;
   
  -    if (io == NULL) {
  -        nntp->io.ctx    = NULL;
  -        nntp->io.select = nntp_select;
  -        nntp->io.read   = nntp_read;
  -        nntp->io.write  = nntp_write;
  -    } else {
  -        nntp->io.ctx    = io->ctx;
  -        nntp->io.select = io->select ? io->select : nntp_select;
  -        nntp->io.read   = io->read   ? io->read   : nntp_read;
  -        nntp->io.write  = io->write  ? io->write  : nntp_write;
  -    }
  -
  -    nntp->rfd = rfd;
  -    nntp->wfd = wfd;
  +    if (io == NULL) 
  +        return NULL;
  +    nntp->io.ctx    = io->ctx;
  +    nntp->io.read   = io->read;
  +    nntp->io.write  = io->write;
       nntp->rl.rl_cnt = 0;
       nntp->rl.rl_bufptr = NULL;
       nntp->rl.rl_buf[0] = NUL;
  -    nntp_timeout(nntp, 3);
       nntp->kludgeinn441dup = FALSE;
   
       return nntp;
   }
   
  -nntp_rc_t nntp_timeout(nntp_t *nntp, long timeout)
  -{
  -    nntp->tv.tv_sec = timeout;
  -    nntp->tv.tv_usec = 0;
  -    return NNTP_OK;
  -}
  -
   nntp_rc_t nntp_init(nntp_t *nntp)
   {
       nntp_rc_t rc;
  @@ -182,9 +160,6 @@
       size_t n;
       char c;
       nntp_readline_t *rl = &nntp->rl;
  -    struct timeval tv;
  -    fd_set fds;
  -    int rc;
   
       if (nntp == NULL)
           return NNTP_ERR_ARG;
  @@ -192,17 +167,8 @@
   
           /* fetch one character (but read more) */
           if (rl->rl_cnt <= 0) {
  -            FD_ZERO(&fds);
  -            FD_SET(nntp->rfd, &fds);
  -            tv.tv_sec  = nntp->tv.tv_sec;
  -            tv.tv_usec = nntp->tv.tv_usec;
  -            rc = nntp->io.select(nntp->io.ctx, nntp->rfd + 1, &fds, NULL, NULL, &tv);
  -            if (rc == 0)
  -                return NNTP_TIMEOUT;
  -            else if (rc == -1)
  -                return NNTP_ERR_SYSTEM;
               do {
  -                rl->rl_cnt = nntp->io.read(nntp->io.ctx, nntp->rfd, rl->rl_buf, NNTP_LINE_MAXLEN);
  +                rl->rl_cnt = nntp->io.read(nntp->io.ctx, rl->rl_buf, NNTP_LINE_MAXLEN);
               } while (rl->rl_cnt == -1 && errno == EINTR);
               if (rl->rl_cnt == -1)
                   return NNTP_ERR_SYSTEM;
  @@ -235,7 +201,7 @@
           return NNTP_ERR_ARG;
       strncpy(tmp, buf, NNTP_LINE_MAXLEN-3);
       strcat(tmp, "\r\n");
  -    if (nntp->io.write(nntp->io.ctx, nntp->wfd, tmp, strlen(tmp)) < 0)
  +    if (nntp->io.write(nntp->io.ctx, tmp, strlen(tmp)) < 0)
           return NNTP_ERR_SYSTEM;
       return NNTP_OK;
   }
  @@ -350,7 +316,7 @@
           return NNTP_ERR_DELIVERY;
   
       do {
  -        rc = nntp->io.write(nntp->io.ctx, nntp->wfd, msg->cpMsg, strlen(msg->cpMsg));
  +        rc = nntp->io.write(nntp->io.ctx, msg->cpMsg, strlen(msg->cpMsg));
       } while (rc == -1 && errno == EINTR);
       if (rc == -1)
           return NNTP_ERR_SYSTEM;
  @@ -417,7 +383,7 @@
           return NNTP_ERR_DELIVERY;
   
       do {
  -        rc = nntp->io.write(nntp->io.ctx, nntp->wfd, msg->cpMsg, strlen(msg->cpMsg));
  +        rc = nntp->io.write(nntp->io.ctx, msg->cpMsg, strlen(msg->cpMsg));
       } while (rc == -1 && errno == EINTR);
       if (rc == -1)
           return NNTP_ERR_SYSTEM;
  @@ -440,7 +406,6 @@
                                         str = "NNTP: errorcode has no description";
       if      (rc == NNTP_OK          ) str = "NNTP: no error";
       else if (rc == NNTP_EOF         ) str = "NNTP: end of file";
  -    else if (rc == NNTP_TIMEOUT     ) str = "NNTP: timeout";
       else if (rc == NNTP_DEFER       ) str = "NNTP: transmission deferred";
       else if (rc == NNTP_FAKE        ) str = "NNTP: fake status not real";
       else if (rc == NNTP_ERR_SYSTEM  ) str = "NNTP: see errno";
  Index: ossp-pkg/lmtp2nntp/nntp.h
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 nntp.h
  --- ossp-pkg/lmtp2nntp/nntp.h	2001/09/10 14:11:33	1.11
  +++ ossp-pkg/lmtp2nntp/nntp.h	2001/10/09 12:08:59	1.12
  @@ -38,15 +38,13 @@
   
   typedef struct {
       void    *ctx;
  -    int     (*select)(void *, int, fd_set *, fd_set *, fd_set *, struct timeval *);
  -    ssize_t (*read)(void *, int, void *, size_t);
  -    ssize_t (*write)(void *, int, const void *, size_t);
  +    ssize_t (*read)(void *, void *, size_t);
  +    ssize_t (*write)(void *, const void *, size_t);
   } nntp_io_t;
   
   typedef enum {
       NNTP_OK,
       NNTP_EOF,
  -    NNTP_TIMEOUT,
       NNTP_DEFER,
       NNTP_FAKE,
       NNTP_ERR_SYSTEM,
  @@ -57,8 +55,11 @@
       NNTP_ERR_UNKNOWN
   } nntp_rc_t;
   
  -nntp_t     *nntp_create   (int, int, nntp_io_t *);
  -nntp_rc_t   nntp_timeout  (nntp_t *nntp, long);
  +typedef struct {
  +    int fd;
  +} nntp_fd_t;
  +
  +nntp_t     *nntp_create   (nntp_io_t *);
   nntp_rc_t   nntp_init     (nntp_t *);
   void        nntp_destroy  (nntp_t *);
   nntp_rc_t   nntp_readline (nntp_t *, char *, size_t);
  @@ -66,6 +67,8 @@
   nntp_rc_t   nntp_post     (nntp_t *, msg_t *msg);
   nntp_rc_t   nntp_feed     (nntp_t *, msg_t *msg);
   char       *nntp_error    (nntp_rc_t);
  +ssize_t     nntp_fd_read  (void *, void *, size_t);
  +ssize_t     nntp_fd_write (void *, const void *, size_t);
   
   #endif /* __NNTP_H__ */
   

From ossp-cvs-owner@ossp.org  Tue Oct  9 15:19:26 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f99DJP763590; Tue, 9 Oct 2001 15:19:25 +0200 (CEST)
Date: Tue, 9 Oct 2001 15:19:25 +0200 (CEST)
Message-Id: <200110091319.f99DJP763590@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c sa.h sa.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Oct-2001 15:19:25
  Branch: HEAD                             Handle: 2001100914192500

  Modified files:
    ossp-pkg/sa             sa.c sa.h sa.pod

  Log:
    Implement new sa_addr_match() function which can be used for Access
    Control List (ACL) implementations. It is capable of matching Unix
    Domain and Internet Addresses (both IPv4 and IPv6) with prefix lengths.

  Summary:
    Revision    Changes     Path
    1.15        +76 -0      ossp-pkg/sa/sa.c
    1.16        +2  -0      ossp-pkg/sa/sa.h
    1.9         +4  -1      ossp-pkg/sa/sa.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 sa.c
  --- ossp-pkg/sa/sa.c	2001/10/08 15:15:25	1.14
  +++ ossp-pkg/sa/sa.c	2001/10/09 13:19:25	1.15
  @@ -706,6 +706,82 @@
       return SA_OK;
   }
   
  +sa_rc_t sa_addr_match(sa_addr_t *saa1, sa_addr_t *saa2, size_t prefixlen)
  +{
  +    const unsigned char *ucp1, *ucp2;
  +    unsigned int uc1, uc2, mask;
  +    size_t l1, l2;
  +    int nFamily;
  +    int nBytes;
  +    int nBits;
  +
  +    /* argument sanity check(s) */
  +    if (saa1 == NULL || saa2 == NULL)
  +        return SA_ERR_ARG;
  +
  +    /* match short circuiting */
  +    if (saa1->nFamily != saa2->nFamily)
  +        return SA_ERR_MTC;
  +
  +    /* determine address representation pointer and size */
  +    nFamily = saa1->nFamily;
  +    if (nFamily == AF_LOCAL) {
  +        ucp1 = (const unsigned char *)(((struct sockaddr_un *)saa1->saBuf)->sun_path);
  +        ucp2 = (const unsigned char *)(((struct sockaddr_un *)saa2->saBuf)->sun_path);
  +        l1 = strlen(((struct sockaddr_un *)saa1->saBuf)->sun_path) * 8;
  +        l2 = strlen(((struct sockaddr_un *)saa2->saBuf)->sun_path) * 8;
  +        if (prefixlen == 0) {
  +            if (l1 != l2)
  +                return SA_ERR_MTC;
  +            nBits = l1;
  +        }
  +        else {
  +            if (l1 < prefixlen || l2 < prefixlen)
  +                return SA_ERR_MTC;
  +            nBits = prefixlen;
  +        }
  +    }
  +    else if (nFamily == AF_INET) {
  +        ucp1 = (const unsigned char *)&(((struct sockaddr_in *)saa1->saBuf)->sin_addr);
  +        ucp2 = (const unsigned char *)&(((struct sockaddr_in *)saa2->saBuf)->sin_addr);
  +        nBits = 32;
  +    }
  +#ifdef AF_INET6
  +    else if (nFamily == AF_INET6) {
  +        ucp1 = (const unsigned char *)&(((struct sockaddr_in6 *)saa1->saBuf)->sin6_addr);
  +        ucp2 = (const unsigned char *)&(((struct sockaddr_in6 *)saa2->saBuf)->sin6_addr);
  +        nBits = 128;
  +#endif
  +    }
  +    else
  +        return SA_ERR_INT;
  +
  +    /* make sure we do not compare than possible */
  +    if (prefixlen > nBits)
  +        return SA_ERR_ARG;
  +
  +    /* support equal matching (= all bits) */
  +    if (prefixlen == 0)
  +        prefixlen = nBits;
  +
  +    /* perform address representation comparison 
  +       (assumption guaranteed by API: network byte order is used) */
  +    nBytes = (prefixlen / 8);
  +    nBits  = (prefixlen % 8);
  +    if (nBytes > 0) {
  +        if (memcmp(ucp1, ucp1, nBytes) != 0)
  +            return SA_ERR_MTC;
  +    }
  +    if (nBits > 0) {
  +        uc1 = ucp1[nBytes];
  +        uc2 = ucp2[nBytes];
  +        mask = (0xFF << (8-nBits)) & 0xFF;
  +        if ((uc1 & mask) != (uc2 & mask))
  +            return SA_ERR_MTC;
  +    }
  +    return SA_OK;
  +}
  +
   /* internal lazy/delayed initialization of underlying socket */
   static sa_rc_t sa_socket_init(sa_t *sa, int nFamily)
   {
  Index: ossp-pkg/sa/sa.h
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 sa.h
  --- ossp-pkg/sa/sa.h	2001/10/08 15:01:26	1.15
  +++ ossp-pkg/sa/sa.h	2001/10/09 13:19:25	1.16
  @@ -110,6 +110,7 @@
       SA_ERR_MEM, /* out of memory */
       SA_ERR_SYS, /* system error (see errno) */
       SA_ERR_EOF, /* end of file/socket communication */
  +    SA_ERR_MTC, /* error in match */
       SA_ERR_INT  /* internal error */
   } sa_rc_t;
   
  @@ -147,6 +148,7 @@
   sa_rc_t sa_addr_s2a     (sa_addr_t *saa, const struct sockaddr *sabuf, socklen_t salen);
   sa_rc_t sa_addr_a2u     (sa_addr_t *saa, char **uri);
   sa_rc_t sa_addr_a2s     (sa_addr_t *saa, struct sockaddr **sabuf, socklen_t *salen);
  +sa_rc_t sa_addr_match   (sa_addr_t *saa1, sa_addr_t *saa2, size_t prefixlen);
   
   /* socket object operations */
   sa_rc_t sa_create       (sa_t **sa);
  Index: ossp-pkg/sa/sa.pod
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 sa.pod
  --- ossp-pkg/sa/sa.pod	2001/10/08 10:03:54	1.8
  +++ ossp-pkg/sa/sa.pod	2001/10/09 13:19:25	1.9
  @@ -54,7 +54,8 @@
   sa_addr_u2a,
   sa_addr_s2a,
   sa_addr_a2u,
  -sa_addr_a2s.
  +sa_addr_a2s,
  +sa_addr_match.
               
   =item B<Socket Object Operations>:
   
  @@ -196,6 +197,8 @@
   =item sa_rc_t B<sa_addr_a2u>(sa_addr_t *I<saa>, char **I<uri>);
   
   =item sa_rc_t B<sa_addr_a2s>(sa_addr_t *I<saa>, struct sockaddr **I<sabuf>, socklen_t *I<salen>);
  +
  +=item sa_rc_t B<sa_addr_match>(sa_addr_t *I<saa1>, sa_addr_t *I<saa2>, size_t I<prefixlen>);
   
   =back
               

From ossp-cvs-owner@ossp.org  Tue Oct  9 16:03:06 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f99E35D68896; Tue, 9 Oct 2001 16:03:05 +0200 (CEST)
Date: Tue, 9 Oct 2001 16:03:05 +0200 (CEST)
Message-Id: <200110091403.f99E35D68896@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.h.in l2_ch_prefix.c l2_ut_level.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   09-Oct-2001 16:03:05
  Branch: HEAD                             Handle: 2001100915030400

  Modified files:
    ossp-pkg/l2             l2.h.in l2_ch_prefix.c l2_ut_level.c

  Log:
    Corrected prefix functionality, because channel write operations do not take
    level masks as input.

  Summary:
    Revision    Changes     Path
    1.12        +2  -2      ossp-pkg/l2/l2.h.in
    1.14        +1  -1      ossp-pkg/l2/l2_ch_prefix.c
    1.4         +37 -52     ossp-pkg/l2/l2_ut_level.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2.h.in
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 l2.h.in
  --- ossp-pkg/l2/l2.h.in	2001/09/27 07:16:25	1.11
  +++ ossp-pkg/l2/l2.h.in	2001/10/09 14:03:04	1.12
  @@ -216,8 +216,8 @@
   
   /* utility operations */
   l2_result_t   l2_util_setparams    (l2_param_t p[], const char *fmt, va_list ap);
  -l2_result_t   l2_util_l2s          (char *string,       size_t maxlen, int sep, unsigned int  levelmask);
  -l2_result_t   l2_util_s2l          (const char *string, size_t maxlen, int sep, unsigned int *levelmask);
  +l2_result_t   l2_util_l2s          (char *string,       size_t maxlen, l2_level_t  level);
  +l2_result_t   l2_util_s2l          (const char *string, size_t maxlen, l2_level_t *level);
   l2_result_t   l2_util_fmt_string   (l2_context_t *, const char, const char *, char *, size_t, size_t *, va_list *);
   l2_result_t   l2_util_fmt_dump     (l2_context_t *, const char, const char *, char *, size_t, size_t *, va_list *);
   
  Index: ossp-pkg/l2/l2_ch_prefix.c
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 l2_ch_prefix.c
  --- ossp-pkg/l2/l2_ch_prefix.c	2001/09/12 13:05:39	1.13
  +++ ossp-pkg/l2/l2_ch_prefix.c	2001/10/09 14:03:04	1.14
  @@ -101,7 +101,7 @@
               bSubst = FALSE;
               switch (*(cpSC+1)) {
                   case 'L': {
  -                    if ((rv = l2_util_l2s(caBuf, sizeof(caBuf), '\0', level)) != L2_OK)
  +                    if ((rv = l2_util_l2s(caBuf, sizeof(caBuf), level)) != L2_OK)
                           return rv;
                       bSubst = TRUE;
                       break;
  Index: ossp-pkg/l2/l2_ut_level.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 l2_ut_level.c
  --- ossp-pkg/l2/l2_ut_level.c	2001/09/13 12:19:45	1.3
  +++ ossp-pkg/l2/l2_ut_level.c	2001/10/09 14:03:04	1.4
  @@ -48,37 +48,36 @@
       { 0,                 NULL       }
   };
   
  -l2_result_t l2_util_l2s(char *string, size_t maxlen, int sep, unsigned int levelmask)
  +l2_result_t l2_util_l2s(char *string, size_t maxlen, l2_level_t level)
   {
  -    char hexbuf[2+(sizeof(unsigned int)*2)+1];
  -    int len;
  -    int i;
  -    int l;
  +    int len, i, j, l;
   
  -    len = maxlen;
       string[0] = '\0';
  -    for (i = 0; l2s_table[i].level != NULL; i++) {
  -        if (levelmask & l2s_table[i].level) {
  -            levelmask &= ~(l2s_table[i].level);
  -            l = strlen(l2s_table[i].string) + 1;
  -            if (len < l)
  -                return L2_ERR_MEM;
  -            sprintf(string+(maxlen-len), "%s%c", l2s_table[i].string, sep);
  -            len -= l;
  +    len = i = j = l = 0;
  +    for (i = 0; l2s_table[i].level != NULL; i++) { /* loop through levels    */
  +        if (level & l2s_table[i].level) {
  +            if (j != 0)
  +                return L2_ERR_ARG; /* level has matched more than one string */
  +            else
  +                j = i; /* index the given level to its corresponding string  */
           }
  +
  +        l = strlen(l2s_table[i].string);
  +        if (l > len) 
  +            len = l; /* len is the size of the largest level string          */
       }
  -    if (levelmask != 0) {
  -        sprintf(hexbuf, "0x%x", levelmask);
  -        l = strlen(hexbuf) + 1;
  -        if (len < l)
  -            return L2_ERR_MEM;
  -        sprintf(string+(maxlen-len), "%s%c", hexbuf, sep);
  -        len -= l;
  -    }
  -    /* remove trailing comma */
  -    if ((maxlen-len) > 0)
  -        string[(maxlen-len)-1] = '\0'; 
   
  +    if (len + 1 > maxlen)
  +        return L2_ERR_MEM;
  +    else
  +        sprintf(string, "%s", l2s_table[j].string);
  +
  +    for (i = 0; string[i] != '\0'; i++) /* process string to dynamically pad */
  +    ;                                   /* with spaces in order to line up   */
  +    while (i < len){                    /* small level string text with the  */
  +        string[i++] = ' ';              /* larger ones                       */
  +    }
  +    string[i] = '\0';                   /* don't forget to put back the EOL  */
       return L2_OK;
   }
   
  @@ -106,40 +105,26 @@
       return 0;
   }
   
  -l2_result_t l2_util_s2l(const char *string, size_t maxlen, int sep, unsigned int *levelmask)
  +l2_result_t l2_util_s2l(const char *string, size_t maxlen, l2_level_t *level)
   {
  -    const char *cpB;
  -    const char *cpE;
       int bFound;
       int i;
   
  -    *levelmask = 0;
  -    cpE = string;
  -    while (1) {
  -        cpB = cpE;
  -        if (cpB >= (string+maxlen))
  -            break;
  -        if ((int)(*cpB) == sep)
  -            cpB++;
  -        for (cpE = cpB; cpE < (string+maxlen) && (int)(*cpE) != sep; cpE++)
  -            ;
  -        if (cpE > (string+maxlen))
  +    *level = 0;
  +    bFound = 0;
  +    for (i = 0; l2s_table[i].level != NULL; i++) {
  +        if (strcasecmp(string, l2s_table[i].string) == 0) {
  +            *level = l2s_table[i].level;
  +            bFound = 1;
               break;
  -        bFound = 0;
  -        for (i = 0; l2s_table[i].level != NULL; i++) {
  -            if (strncasecmp(cpB, l2s_table[i].string, cpE-cpB) == 0) {
  -                *levelmask |= l2s_table[i].level;
  -                bFound = 1;
  -                break;
  -            }
           }
  -        if (!bFound) {
  -            if ((cpE > cpB+2) && strncasecmp(cpB, "0x", 2) == 0 && myishexnumber((int)(*(cpB+2)))) {
  -                *levelmask |= hexval(cpB+2, cpE);
  -            }
  -            else
  -                return L2_ERR_ARG;
  +    }
  +    if (!bFound) {
  +        if (strncasecmp(string, "0x", 2) == 0 && myishexnumber((int)(*(string+2)))) {
  +            *level = hexval(string+2, string + strlen(string));
           }
  +        else
  +            return L2_ERR_ARG;
       }
       return L2_OK;
   }

From ossp-cvs-owner@ossp.org  Tue Oct  9 16:05:57 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f99E5ui69131; Tue, 9 Oct 2001 16:05:56 +0200 (CEST)
Date: Tue, 9 Oct 2001 16:05:56 +0200 (CEST)
Message-Id: <200110091405.f99E5ui69131@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c sa.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Oct-2001 16:05:56
  Branch: HEAD                             Handle: 2001100915055500

  Modified files:
    ossp-pkg/sa             sa.c sa.h

  Log:
    Support prefixlen == 0 for an "always matches" and instead
    use prefixlen == -1 for "full match". Credits to Thomas ;)

  Summary:
    Revision    Changes     Path
    1.16        +4  -4      ossp-pkg/sa/sa.c
    1.17        +1  -1      ossp-pkg/sa/sa.h
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 sa.c
  --- ossp-pkg/sa/sa.c	2001/10/09 13:19:25	1.15
  +++ ossp-pkg/sa/sa.c	2001/10/09 14:05:55	1.16
  @@ -706,7 +706,7 @@
       return SA_OK;
   }
   
  -sa_rc_t sa_addr_match(sa_addr_t *saa1, sa_addr_t *saa2, size_t prefixlen)
  +sa_rc_t sa_addr_match(sa_addr_t *saa1, sa_addr_t *saa2, int prefixlen)
   {
       const unsigned char *ucp1, *ucp2;
       unsigned int uc1, uc2, mask;
  @@ -716,7 +716,7 @@
       int nBits;
   
       /* argument sanity check(s) */
  -    if (saa1 == NULL || saa2 == NULL)
  +    if (saa1 == NULL || saa2 == NULL || prefixlen < -1)
           return SA_ERR_ARG;
   
       /* match short circuiting */
  @@ -730,7 +730,7 @@
           ucp2 = (const unsigned char *)(((struct sockaddr_un *)saa2->saBuf)->sun_path);
           l1 = strlen(((struct sockaddr_un *)saa1->saBuf)->sun_path) * 8;
           l2 = strlen(((struct sockaddr_un *)saa2->saBuf)->sun_path) * 8;
  -        if (prefixlen == 0) {
  +        if (prefixlen == -1) {
               if (l1 != l2)
                   return SA_ERR_MTC;
               nBits = l1;
  @@ -761,7 +761,7 @@
           return SA_ERR_ARG;
   
       /* support equal matching (= all bits) */
  -    if (prefixlen == 0)
  +    if (prefixlen == -1)
           prefixlen = nBits;
   
       /* perform address representation comparison 
  Index: ossp-pkg/sa/sa.h
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 sa.h
  --- ossp-pkg/sa/sa.h	2001/10/09 13:19:25	1.16
  +++ ossp-pkg/sa/sa.h	2001/10/09 14:05:55	1.17
  @@ -148,7 +148,7 @@
   sa_rc_t sa_addr_s2a     (sa_addr_t *saa, const struct sockaddr *sabuf, socklen_t salen);
   sa_rc_t sa_addr_a2u     (sa_addr_t *saa, char **uri);
   sa_rc_t sa_addr_a2s     (sa_addr_t *saa, struct sockaddr **sabuf, socklen_t *salen);
  -sa_rc_t sa_addr_match   (sa_addr_t *saa1, sa_addr_t *saa2, size_t prefixlen);
  +sa_rc_t sa_addr_match   (sa_addr_t *saa1, sa_addr_t *saa2, int prefixlen);
   
   /* socket object operations */
   sa_rc_t sa_create       (sa_t **sa);

From ossp-cvs-owner@ossp.org  Tue Oct  9 16:58:24 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f99EwM575070; Tue, 9 Oct 2001 16:58:22 +0200 (CEST)
Date: Tue, 9 Oct 2001 16:58:22 +0200 (CEST)
Message-Id: <200110091458.f99EwM575070@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Oct-2001 16:58:22
  Branch: HEAD                             Handle: 2001100915582200

  Modified files:
    ossp-pkg/sa             sa.c

  Log:
    bugfix sa_addr_match()

  Summary:
    Revision    Changes     Path
    1.17        +1  -1      ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 sa.c
  --- ossp-pkg/sa/sa.c	2001/10/09 14:05:55	1.16
  +++ ossp-pkg/sa/sa.c	2001/10/09 14:58:22	1.17
  @@ -769,7 +769,7 @@
       nBytes = (prefixlen / 8);
       nBits  = (prefixlen % 8);
       if (nBytes > 0) {
  -        if (memcmp(ucp1, ucp1, nBytes) != 0)
  +        if (memcmp(ucp1, ucp2, nBytes) != 0)
               return SA_ERR_MTC;
       }
       if (nBits > 0) {

From ossp-cvs-owner@ossp.org  Tue Oct  9 17:22:12 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f99FMAa78092; Tue, 9 Oct 2001 17:22:10 +0200 (CEST)
Date: Tue, 9 Oct 2001 17:22:10 +0200 (CEST)
Message-Id: <200110091522.f99FMAa78092@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Oct-2001 17:22:10
  Branch: HEAD                             Handle: 2001100916221000

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c

  Log:
    Implement option -a: Access Control List.

  Summary:
    Revision    Changes     Path
    1.76        +143 -3     ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.75 -r1.76 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/09 12:08:58	1.75
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/09 15:22:10	1.76
  @@ -123,6 +123,15 @@
       l2_stream_t    *l2;
   };
   
  +#define MAXACLS 32
  +
  +struct acl {
  +    char      *acl;
  +    int        not;
  +    sa_addr_t *saa;
  +    size_t     prefixlen;
  +};
  +
   typedef struct {
       l2_context_t    ctx;
       char           *progname;
  @@ -143,6 +152,8 @@
       char           *option_pidfile;
       int             option_killflag;
       int             option_daemon;
  +    int             option_aclc;
  +    struct acl      option_acl[MAXACLS];
       l2_stream_t    *l2;
       sa_addr_t      *saaAltio;
       sa_t           *saAltio;
  @@ -352,12 +363,15 @@
       lmtp_t       *lmtp = NULL;
       lmtp_io_t     lmtp_io;
       lmtp2nntp_t  *ctx = NULL;
  +    int           bOk;
       int           i;             /* general purpose scratch int, index ... */
       char         *cp;            /* general purpose character pointer */
       char         *azHosts;
       size_t        asHosts;
       char         *azTimeout;
       size_t        asTimeout;
  +    char         *azACL;
  +    size_t        asACL;
       char         *cpHost;
       char         *cpPort;
       l2_channel_t *chPrefix;
  @@ -368,6 +382,8 @@
       char         *cpName;
       char         *cpValue;
       int           nValue;
  +    char         *cpAddr;
  +    char         *cpPrefixLen;
   
       /* library version check (run-time) */
       if (l2_version.v_hex < L2_VERSION_HEX_REQ) {
  @@ -418,6 +434,13 @@
           ctx->ns[i].rc = LMTP_ERR_UNKNOWN;
           ctx->ns[i].l2 = NULL;
       }
  +    ctx->option_aclc = 0;
  +    for (i = 0; i < MAXACLS; i++) {
  +        ctx->option_acl[i].acl = NULL;
  +        ctx->option_acl[i].not = FALSE;
  +        ctx->option_acl[i].saa = NULL;
  +        ctx->option_acl[i].prefixlen = 0;
  +    }
       ctx->azGroupargs = NULL;
       ctx->asGroupargs = 0;
       initsession(&ctx->session);
  @@ -435,7 +458,7 @@
        */
   
       /* read in the arguments */
  -    while ((i = getopt(argc, argv, "D:KP:a:b:c:d:g:l:m:n:o:s:t:v")) != -1) {
  +    while ((i = getopt(argc, argv, "DKP:a:b:c:d:g:l:m:n:o:s:t:v")) != -1) {
           switch (i) {
               case 'D': /*POD [B<-D>] */
                   ctx->option_daemon = TRUE;
  @@ -447,7 +470,40 @@
                   ctx->option_pidfile = strdup(optarg);
                   break;
               case 'a': /*POD [B<-a> I<addr>/I<mask>[,I<addr>/I<mask>[,...]] */
  -                /* FIXME */
  +                if (argz_create_sep(optarg, ',', &azACL, &asACL) != 0)
  +                    CU(ERR_EXECUTION);
  +                cp = NULL;
  +                while ((cp = argz_next(azACL, asACL, cp)) != NULL) {
  +                    if (ctx->option_aclc >= MAXACLS) {
  +                        fprintf(stderr, "%s:Error: Too many ACL (%d) using option -a\n", ctx->progname, ctx->option_aclc);
  +                        CU(ERR_EXECUTION);
  +                    }
  +                    ctx->option_acl[ctx->option_aclc].acl = strdup(cp);
  +                    if (cp[0] == '!') {
  +                        ctx->option_acl[ctx->option_aclc].not = TRUE;
  +                        cpAddr = strdup(cp+1);
  +                    }
  +                    else {
  +                        cpAddr = strdup(cp);
  +                    }
  +                    if ((cpPrefixLen = strrchr(cpAddr, '/')) != NULL)
  +                        *cpPrefixLen++ = NUL;
  +                    else
  +                        cpPrefixLen = "-1";
  +                    ctx->option_acl[ctx->option_aclc].prefixlen = atoi(cpPrefixLen);
  +                    if ((rc = sa_addr_create(&ctx->option_acl[ctx->option_aclc].saa)) != SA_OK) {
  +                        fprintf(stderr, "%s:Error: Creating address failed for -a option (%d)\n", 
  +                                ctx->progname, rc);
  +                    }
  +                    if ((rc = sa_addr_u2a(ctx->option_acl[ctx->option_aclc].saa, "inet://%s:0", cpAddr)) != SA_OK) {
  +                        fprintf(stderr, "%s:Error: Parsing host address failed for \"%s:0\" (%d)\n", 
  +                                ctx->progname, cpAddr, rc);
  +                        CU(ERR_EXECUTION);
  +                    }
  +                    ctx->option_aclc++;
  +                    free(cpAddr);
  +                }
  +                free(azACL);
                   break;
               case 'b': /*POD [B<-b> C<->|I<path>|I<addr>[I<:port>]] */
                   if (strcmp(optarg, "-") != 0) {
  @@ -567,7 +623,7 @@
                   else
                       ctx->option_logfile = strdup("logfile");
   
  -                if (l2_util_s2l(optarg, strlen(optarg), ',', &ctx->option_levelmask) != L2_OK) {
  +                if (l2_util_s2l(optarg, strlen(optarg), &ctx->option_levelmask) != L2_OK) {
                       fprintf(stderr, "%s:Error: invalid level \"%s\" to option -l\n", ctx->progname, optarg);
                       CU(ERR_EXECUTION);
                   }
  @@ -803,6 +859,34 @@
           CU(0);
       }
   
  +    /* if no positive ACL exists (option -a) add a wildcard match-all */
  +    bOk = FALSE;
  +    for (i = 0; i < ctx->option_aclc; i++) {
  +        if (!ctx->option_acl[i].not) {
  +            bOk = TRUE;
  +            break;
  +        }
  +    }
  +    if (!bOk) {
  +        if (ctx->option_aclc >= MAXACLS) {
  +            fprintf(stderr, "%s:Error: Too many ACL (%d) using option -a (no space for additional fake ACL)\n", ctx->progname, ctx->option_aclc);
  +            CU(ERR_EXECUTION);
  +        }
  +        ctx->option_acl[ctx->option_aclc].acl = "0.0.0.0/0[FAKE]";
  +        ctx->option_acl[ctx->option_aclc].not = FALSE;
  +        ctx->option_acl[ctx->option_aclc].prefixlen = 0;
  +        if ((rc = sa_addr_create(&ctx->option_acl[ctx->option_aclc].saa)) != SA_OK) {
  +            fprintf(stderr, "%s:Error: Creating fake address failed for -a option (%d)\n", 
  +                    ctx->progname, rc);
  +        }
  +        if ((rc = sa_addr_u2a(ctx->option_acl[ctx->option_aclc].saa, "inet://0.0.0.0:0")) != SA_OK) {
  +            fprintf(stderr, "%s:Error: Parsing host address failed for \"0.0.0.0:0\" (%d)\n", 
  +                    ctx->progname, rc);
  +            CU(ERR_EXECUTION);
  +        }
  +        ctx->option_aclc++;
  +    }
  +
       catchsignal(0, ctx);
       signal(SIGCHLD, (void(*)())catchsignal);
       signal(SIGHUP,  (void(*)())catchsignal);
  @@ -873,6 +957,62 @@
           sa_timeout(ctx->saAltio, SA_TIMEOUT_READ,   ctx->option_timeout_lmtp_read,   0);
           sa_timeout(ctx->saAltio, SA_TIMEOUT_WRITE,  ctx->option_timeout_lmtp_write,  0);
           while ((rc = sa_accept(ctx->saAltio, &ctx->saaIO, &ctx->saIO)) == SA_OK) {
  +
  +            /* Access Control List */
  +            bOk = FALSE;
  +            /* check positive matches */
  +            for (i = 0; i < ctx->option_aclc; i++) {
  +                char *cpA1;
  +                char *cpA2;
  +                if (ctx->option_acl[i].not)
  +                    continue;
  +                sa_addr_a2u(ctx->option_acl[i].saa, &cpA1);
  +                sa_addr_a2u(ctx->saaIO, &cpA2);
  +                if (sa_addr_match(ctx->saaIO, ctx->option_acl[i].saa, ctx->option_acl[i].prefixlen) == SA_OK) {
  +                    log4(ctx, TRACE, "positive/inclusive ACL \"%s\" (%s/%d) matching %s: OK", ctx->option_acl[i].acl, cpA1, ctx->option_acl[i].prefixlen, cpA2);
  +                    bOk = TRUE;
  +                    break;
  +                }
  +                else
  +                    log4(ctx, TRACE, "positive/inclusive ACL \"%s\" (%s/%d) matching %s: FAILED", ctx->option_acl[i].acl, cpA1, ctx->option_acl[i].prefixlen, cpA2);
  +                free(cpA1);
  +                free(cpA2);
  +            }
  +            /* check negative matches */
  +            for (i = 0; i < ctx->option_aclc; i++) {
  +                char *cpA1;
  +                char *cpA2;
  +                if (!ctx->option_acl[i].not)
  +                    continue;
  +                sa_addr_a2u(ctx->option_acl[i].saa, &cpA1);
  +                sa_addr_a2u(ctx->saaIO, &cpA2);
  +                if (sa_addr_match(ctx->saaIO, ctx->option_acl[i].saa, ctx->option_acl[i].prefixlen) == SA_OK) {
  +                    log4(ctx, TRACE, "negative/exclusive ACL \"%s\" (not %s/%d) matching %s: OK (stop)", ctx->option_acl[i].acl, cpA1, ctx->option_acl[i].prefixlen, cpA2);
  +                    bOk = FALSE;
  +                    break;
  +                }
  +                else {
  +                    log4(ctx, TRACE, "negative/exclusive ACL \"%s\" (not %s/%d) matching %s: FAILED", ctx->option_acl[i].acl, cpA1, ctx->option_acl[i].prefixlen, cpA2);
  +                }
  +            }
  +            if (bOk) {
  +                char *cpA;
  +                sa_addr_a2u(ctx->saaIO, &cpA);
  +                log1(ctx, TRACE, "connection from %s accepted due to ACL", cpA); 
  +                free(cpA);
  +                l2_stream_flush(ctx->l2);
  +            }
  +            else {
  +                char *cpA;
  +                sa_addr_a2u(ctx->saaIO, &cpA);
  +                log1(ctx, ERROR, "connection from %s refused due to ACL", cpA); 
  +                free(cpA);
  +                l2_stream_flush(ctx->l2);
  +                sa_destroy(ctx->saIO);
  +                sa_addr_destroy(ctx->saaIO);
  +                continue;
  +            }
  +
               l2_stream_flush(ctx->l2); /* must flush before fork() */
               pid = fork();
               if (pid == -1) {

From ossp-cvs-owner@ossp.org  Tue Oct  9 17:34:57 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f99FYuX79426; Tue, 9 Oct 2001 17:34:56 +0200 (CEST)
Date: Tue, 9 Oct 2001 17:34:56 +0200 (CEST)
Message-Id: <200110091534.f99FYuX79426@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.h.in l2_ch_prefix.c l2_ut_level.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Oct-2001 17:34:56
  Branch: HEAD                             Handle: 2001100916345500

  Modified files:
    ossp-pkg/l2             l2.h.in l2_ch_prefix.c l2_ut_level.c

  Log:
    Veto: back-out latest level-related changes.
    Sorry, Michael, the padding has to be done in l2_ch_prefix.c only.

  Summary:
    Revision    Changes     Path
    1.13        +2  -2      ossp-pkg/l2/l2.h.in
    1.15        +1  -1      ossp-pkg/l2/l2_ch_prefix.c
    1.5         +52 -37     ossp-pkg/l2/l2_ut_level.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2.h.in
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 l2.h.in
  --- ossp-pkg/l2/l2.h.in	2001/10/09 14:03:04	1.12
  +++ ossp-pkg/l2/l2.h.in	2001/10/09 15:34:55	1.13
  @@ -216,8 +216,8 @@
   
   /* utility operations */
   l2_result_t   l2_util_setparams    (l2_param_t p[], const char *fmt, va_list ap);
  -l2_result_t   l2_util_l2s          (char *string,       size_t maxlen, l2_level_t  level);
  -l2_result_t   l2_util_s2l          (const char *string, size_t maxlen, l2_level_t *level);
  +l2_result_t   l2_util_l2s          (char *string,       size_t maxlen, int sep, unsigned int  levelmask);
  +l2_result_t   l2_util_s2l          (const char *string, size_t maxlen, int sep, unsigned int *levelmask);
   l2_result_t   l2_util_fmt_string   (l2_context_t *, const char, const char *, char *, size_t, size_t *, va_list *);
   l2_result_t   l2_util_fmt_dump     (l2_context_t *, const char, const char *, char *, size_t, size_t *, va_list *);
   
  Index: ossp-pkg/l2/l2_ch_prefix.c
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 l2_ch_prefix.c
  --- ossp-pkg/l2/l2_ch_prefix.c	2001/10/09 14:03:04	1.14
  +++ ossp-pkg/l2/l2_ch_prefix.c	2001/10/09 15:34:55	1.15
  @@ -101,7 +101,7 @@
               bSubst = FALSE;
               switch (*(cpSC+1)) {
                   case 'L': {
  -                    if ((rv = l2_util_l2s(caBuf, sizeof(caBuf), level)) != L2_OK)
  +                    if ((rv = l2_util_l2s(caBuf, sizeof(caBuf), '\0', level)) != L2_OK)
                           return rv;
                       bSubst = TRUE;
                       break;
  Index: ossp-pkg/l2/l2_ut_level.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 l2_ut_level.c
  --- ossp-pkg/l2/l2_ut_level.c	2001/10/09 14:03:04	1.4
  +++ ossp-pkg/l2/l2_ut_level.c	2001/10/09 15:34:55	1.5
  @@ -48,36 +48,37 @@
       { 0,                 NULL       }
   };
   
  -l2_result_t l2_util_l2s(char *string, size_t maxlen, l2_level_t level)
  +l2_result_t l2_util_l2s(char *string, size_t maxlen, int sep, unsigned int levelmask)
   {
  -    int len, i, j, l;
  +    char hexbuf[2+(sizeof(unsigned int)*2)+1];
  +    int len;
  +    int i;
  +    int l;
   
  +    len = maxlen;
       string[0] = '\0';
  -    len = i = j = l = 0;
  -    for (i = 0; l2s_table[i].level != NULL; i++) { /* loop through levels    */
  -        if (level & l2s_table[i].level) {
  -            if (j != 0)
  -                return L2_ERR_ARG; /* level has matched more than one string */
  -            else
  -                j = i; /* index the given level to its corresponding string  */
  +    for (i = 0; l2s_table[i].level != NULL; i++) {
  +        if (levelmask & l2s_table[i].level) {
  +            levelmask &= ~(l2s_table[i].level);
  +            l = strlen(l2s_table[i].string) + 1;
  +            if (len < l)
  +                return L2_ERR_MEM;
  +            sprintf(string+(maxlen-len), "%s%c", l2s_table[i].string, sep);
  +            len -= l;
           }
  -
  -        l = strlen(l2s_table[i].string);
  -        if (l > len) 
  -            len = l; /* len is the size of the largest level string          */
       }
  -
  -    if (len + 1 > maxlen)
  -        return L2_ERR_MEM;
  -    else
  -        sprintf(string, "%s", l2s_table[j].string);
  -
  -    for (i = 0; string[i] != '\0'; i++) /* process string to dynamically pad */
  -    ;                                   /* with spaces in order to line up   */
  -    while (i < len){                    /* small level string text with the  */
  -        string[i++] = ' ';              /* larger ones                       */
  +    if (levelmask != 0) {
  +        sprintf(hexbuf, "0x%x", levelmask);
  +        l = strlen(hexbuf) + 1;
  +        if (len < l)
  +            return L2_ERR_MEM;
  +        sprintf(string+(maxlen-len), "%s%c", hexbuf, sep);
  +        len -= l;
       }
  -    string[i] = '\0';                   /* don't forget to put back the EOL  */
  +    /* remove trailing comma */
  +    if ((maxlen-len) > 0)
  +        string[(maxlen-len)-1] = '\0'; 
  +
       return L2_OK;
   }
   
  @@ -105,26 +106,40 @@
       return 0;
   }
   
  -l2_result_t l2_util_s2l(const char *string, size_t maxlen, l2_level_t *level)
  +l2_result_t l2_util_s2l(const char *string, size_t maxlen, int sep, unsigned int *levelmask)
   {
  +    const char *cpB;
  +    const char *cpE;
       int bFound;
       int i;
   
  -    *level = 0;
  -    bFound = 0;
  -    for (i = 0; l2s_table[i].level != NULL; i++) {
  -        if (strcasecmp(string, l2s_table[i].string) == 0) {
  -            *level = l2s_table[i].level;
  -            bFound = 1;
  +    *levelmask = 0;
  +    cpE = string;
  +    while (1) {
  +        cpB = cpE;
  +        if (cpB >= (string+maxlen))
  +            break;
  +        if ((int)(*cpB) == sep)
  +            cpB++;
  +        for (cpE = cpB; cpE < (string+maxlen) && (int)(*cpE) != sep; cpE++)
  +            ;
  +        if (cpE > (string+maxlen))
               break;
  +        bFound = 0;
  +        for (i = 0; l2s_table[i].level != NULL; i++) {
  +            if (strncasecmp(cpB, l2s_table[i].string, cpE-cpB) == 0) {
  +                *levelmask |= l2s_table[i].level;
  +                bFound = 1;
  +                break;
  +            }
           }
  -    }
  -    if (!bFound) {
  -        if (strncasecmp(string, "0x", 2) == 0 && myishexnumber((int)(*(string+2)))) {
  -            *level = hexval(string+2, string + strlen(string));
  +        if (!bFound) {
  +            if ((cpE > cpB+2) && strncasecmp(cpB, "0x", 2) == 0 && myishexnumber((int)(*(cpB+2)))) {
  +                *levelmask |= hexval(cpB+2, cpE);
  +            }
  +            else
  +                return L2_ERR_ARG;
           }
  -        else
  -            return L2_ERR_ARG;
       }
       return L2_OK;
   }

From ossp-cvs-owner@ossp.org  Tue Oct  9 20:26:14 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f99IQCS98774; Tue, 9 Oct 2001 20:26:12 +0200 (CEST)
Date: Tue, 9 Oct 2001 20:26:12 +0200 (CEST)
Message-Id: <200110091826.f99IQCS98774@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa TODO sa.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Oct-2001 20:26:12
  Branch: HEAD                             Handle: 2001100919261200

  Modified files:
    ossp-pkg/sa             TODO sa.c

  Log:
    support relative paths for 'unix:path'

  Summary:
    Revision    Changes     Path
    1.15        +0  -1      ossp-pkg/sa/TODO
    1.18        +7  -2      ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 TODO
  --- ossp-pkg/sa/TODO	2001/10/08 15:17:47	1.14
  +++ ossp-pkg/sa/TODO	2001/10/09 18:26:12	1.15
  @@ -10,7 +10,6 @@
     SA_BUFFER_KREAD
     SA_BUFFER_KWRITE
     SA_BUFFER_WRITEF
  -- support for relative pathnames in unix:path
   
   - test suite:
     - inet://0.0.0.0:0 -> inet://0.0.0.0:514
  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 sa.c
  --- ossp-pkg/sa/sa.c	2001/10/09 14:58:22	1.17
  +++ ossp-pkg/sa/sa.c	2001/10/09 18:26:12	1.18
  @@ -481,8 +481,6 @@
       if (strncmp(uri, "unix:", 5) == 0) {
           /* parse URI */
           cpPath = uri+5;
  -        if (cpPath[0] != '/')
  -            return SA_ERR_ARG;
   
           /* mandatory(!) socket address structure initialization */
           memset(&un, 0, sizeof(un));
  @@ -491,6 +489,13 @@
           n = strlen(cpPath);
           if ((n+1) > sizeof(un.sun_path))
               return SA_ERR_MEM;
  +        if (cpPath[0] != '/') {
  +            if (getcwd(un.sun_path, sizeof(un.sun_path)-(n+1)) == NULL)
  +                return SA_ERR_MEM;
  +            cp = un.sun_path + strlen(un.sun_path);
  +        }
  +        else
  +            cp = un.sun_path;
           memcpy(un.sun_path, cpPath, n+1);
           un.sun_family = AF_LOCAL;
   

From ossp-cvs-owner@ossp.org  Tue Oct  9 20:27:14 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f99IRDl98877; Tue, 9 Oct 2001 20:27:13 +0200 (CEST)
Date: Tue, 9 Oct 2001 20:27:13 +0200 (CEST)
Message-Id: <200110091827.f99IRDl98877@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Oct-2001 20:27:13
  Branch: HEAD                             Handle: 2001100919271300

  Modified files:
    ossp-pkg/sa             TODO

  Log:
    update TODO

  Summary:
    Revision    Changes     Path
    1.16        +2  -5      ossp-pkg/sa/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 TODO
  --- ossp-pkg/sa/TODO	2001/10/09 18:26:12	1.15
  +++ ossp-pkg/sa/TODO	2001/10/09 18:27:13	1.16
  @@ -1,17 +1,14 @@
   
   - perhaps change rv=SA_ERR_SYS+errno=ETIMEDOUT to rv=SA_ERR_TIMEOUT;
  -- perhaps move 1024-buffer of writef into sa_t and make adjustable
  -- support registry sub-library for system call override
  -- full test suite for whole API
   - support for writev(2)
  +- perhaps move 1024-buffer of writef into sa_t and make adjustable
   - sa_buffer(sa, <which>, size)
     SA_BUFFER_UREAD
     SA_BUFFER_UWRITE
     SA_BUFFER_KREAD
     SA_BUFFER_KWRITE
     SA_BUFFER_WRITEF
  -
  -- test suite:
  +- full test suite for whole API
     - inet://0.0.0.0:0 -> inet://0.0.0.0:514
     - inet://127.0.0.1:514 -> inet://127.0.0.1:514
     - inet://localhost:syslog#udp -> inet://127.0.0.1:514

From ossp-cvs-owner@ossp.org  Tue Oct  9 20:34:13 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f99IYCR99880; Tue, 9 Oct 2001 20:34:12 +0200 (CEST)
Date: Tue, 9 Oct 2001 20:34:12 +0200 (CEST)
Message-Id: <200110091834.f99IYCR99880@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa TODO sa.c sa.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Oct-2001 20:34:12
  Branch: HEAD                             Handle: 2001100919341200

  Modified files:
    ossp-pkg/sa             TODO sa.c sa.h

  Log:
    Change return code semantic for timeouts from "rv == SA_ERR_SYS && errno
    == ETIMEDOUT" to a dedicated timeout return value "rv == SA_ERR_TMT".

  Summary:
    Revision    Changes     Path
    1.17        +0  -1      ossp-pkg/sa/TODO
    1.19        +19 -6      ossp-pkg/sa/sa.c
    1.18        +1  -0      ossp-pkg/sa/sa.h
  ____________________________________________________________________________

  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 TODO
  --- ossp-pkg/sa/TODO	2001/10/09 18:27:13	1.16
  +++ ossp-pkg/sa/TODO	2001/10/09 18:34:12	1.17
  @@ -1,5 +1,4 @@
   
  -- perhaps change rv=SA_ERR_SYS+errno=ETIMEDOUT to rv=SA_ERR_TIMEOUT;
   - support for writev(2)
   - perhaps move 1024-buffer of writef into sa_t and make adjustable
   - sa_buffer(sa, <which>, size)
  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 sa.c
  --- ossp-pkg/sa/sa.c	2001/10/09 18:26:12	1.18
  +++ ossp-pkg/sa/sa.c	2001/10/09 18:34:12	1.19
  @@ -1134,7 +1134,7 @@
               goto done;
           }
           else if (n == 0) {
  -            error = ETIMEDOUT;
  +            rv = SA_ERR_TMT;
               goto done;
           }
   
  @@ -1216,7 +1216,7 @@
                                &sa->tvTimeout[SA_TIMEOUT_ACCEPT]);
           } while (n == -1 && errno == EINTR);
           if (n == 0) 
  -            errno = ETIMEDOUT;
  +            return SA_ERR_TMT;
           if (n <= 0)
               return SA_ERR_SYS;
       }
  @@ -1413,6 +1413,8 @@
           res = sa_read_raw(sa, cpBuf, nBufReq);
           if (res == 0)
               rv = SA_ERR_EOF;
  +        else if (res < 0 && errno == ETIMEDOUT)
  +            rv = SA_ERR_TMT;
           else if (res < 0)
               rv = SA_ERR_SYS;
       }
  @@ -1443,13 +1445,18 @@
                           res += n;
                       else if (n == 0)
                           rv = (res == 0 ? SA_ERR_EOF : SA_OK);
  +                    else if (n < 0 && errno == ETIMEDOUT)
  +                        rv = (res == 0 ? SA_ERR_TMT : SA_OK);
                       else if (n < 0)
                           rv = (res == 0 ? SA_ERR_SYS : SA_OK);
                   }
                   else {
                       /* fill buffer with new data */
                       n = sa_read_raw(sa, sa->cpReadBuf, sa->nReadSize);
  -                    if (n < 0)
  +                    if (n < 0 && errno == ETIMEDOUT)
  +                        /* timeout on this read, but perhaps ok as a whole */
  +                        rv = (res == 0 ? SA_ERR_TMT : SA_OK);
  +                    else if (n < 0)
                           /* error on this read, but perhaps ok as a whole */
                           rv = (res == 0 ? SA_ERR_SYS : SA_OK);
                       if (n == 0)
  @@ -1565,7 +1572,9 @@
       if (sa->nWriteSize == 0) {
           /* user-space unbuffered I/O */
           res = sa_write_raw(sa, cpBuf, nBufReq);
  -        if (res < 0)
  +        if (res < 0 && errno == ETIMEDOUT)
  +            rv = SA_ERR_TMT;
  +        else if (res < 0)
               rv = SA_ERR_SYS;
       }
       else {
  @@ -1579,7 +1588,9 @@
               /* buffer too small at all, so write immediately */
               while (nBufReq > 0) {
                   n = sa_write_raw(sa, cpBuf, nBufReq);
  -                if (n < 0)
  +                if (n < 0 && errno == ETIMEDOUT)
  +                    rv = (res == 0 ? SA_ERR_TMT : SA_OK);
  +                else if (n < 0)
                       rv = (res == 0 ? SA_ERR_SYS : SA_OK);
                   if (n <= 0)
                       break;
  @@ -1657,7 +1668,9 @@
       if (sa->nWriteSize > 0) {
           while (sa->nWriteLen > 0) {
               n = sa_write_raw(sa, sa->cpWriteBuf, sa->nWriteLen);
  -            if (n < 0)
  +            if (n < 0 && errno == ETIMEDOUT)
  +                rv = SA_ERR_TMT;
  +            else if (n < 0)
                   rv = SA_ERR_SYS;
               if (n <= 0)
                   break;
  Index: ossp-pkg/sa/sa.h
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 sa.h
  --- ossp-pkg/sa/sa.h	2001/10/09 14:05:55	1.17
  +++ ossp-pkg/sa/sa.h	2001/10/09 18:34:12	1.18
  @@ -111,6 +111,7 @@
       SA_ERR_SYS, /* system error (see errno) */
       SA_ERR_EOF, /* end of file/socket communication */
       SA_ERR_MTC, /* error in match */
  +    SA_ERR_TMT, /* operation timeout */
       SA_ERR_INT  /* internal error */
   } sa_rc_t;
   

From ossp-cvs-owner@ossp.org  Tue Oct  9 20:36:18 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f99IaHK00159; Tue, 9 Oct 2001 20:36:17 +0200 (CEST)
Date: Tue, 9 Oct 2001 20:36:17 +0200 (CEST)
Message-Id: <200110091836.f99IaHK00159@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Oct-2001 20:36:17
  Branch: HEAD                             Handle: 2001100919361700

  Modified files:
    ossp-pkg/sa             sa.c

  Log:
    cosmetics only.

  Summary:
    Revision    Changes     Path
    1.20        +20 -20     ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 sa.c
  --- ossp-pkg/sa/sa.c	2001/10/09 18:34:12	1.19
  +++ ossp-pkg/sa/sa.c	2001/10/09 18:36:17	1.20
  @@ -53,13 +53,6 @@
   /* include own API header */
   #include "sa.h"
   
  -/* socket address abstraction object */
  -struct sa_addr_st {
  -    int              nFamily;     /* the socket family (AF_XXX) */
  -    struct sockaddr *saBuf;       /* the "struct sockaddr_xx" actually */
  -    socklen_t        slBuf;       /* the length of "struct sockaddr_xx" */
  -};
  -
   /* system call structure declaration macros */
   #define SA_SC_DECLARE_0(rc_t, fn) \
       struct { \
  @@ -168,19 +161,26 @@
    
   /* socket abstraction object */
   struct sa_st {
  -    sa_type_t        eType;       /* socket type (stream or datagram) */
  -    int              fdSocket;    /* socket file descriptor */
  -    struct timeval   tvTimeout[6];/* timeout values (sec, usec) */
  -    int              nReadLen;    /* read  buffer current length */
  -    int              nReadSize;   /* read  buffer current size */
  -    char            *cpReadBuf;   /* read  buffer memory chunk */
  -    int              nWriteLen;   /* write buffer current length */
  -    int              nWriteSize;  /* write buffer current size */
  -    char            *cpWriteBuf;  /* write buffer memory chunk */
  -    char             szError[256];
  -    char             szErrorInfo[128];
  -    sa_rc_t          rvErrorInfo;
  -    sa_syscall_tab_t scSysCall;
  +    sa_type_t        eType;            /* socket type (stream or datagram) */
  +    int              fdSocket;         /* socket file descriptor */
  +    struct timeval   tvTimeout[6];     /* timeout values (sec, usec) */
  +    int              nReadLen;         /* read  buffer current length */
  +    int              nReadSize;        /* read  buffer current size */
  +    char            *cpReadBuf;        /* read  buffer memory chunk */
  +    int              nWriteLen;        /* write buffer current length */
  +    int              nWriteSize;       /* write buffer current size */
  +    char            *cpWriteBuf;       /* write buffer memory chunk */
  +    char             szError[256];     /* error temporary buffer */
  +    char             szErrorInfo[128]; /* error additional information text */
  +    sa_rc_t          rvErrorInfo;      /* error additional information code */
  +    sa_syscall_tab_t scSysCall;        /* table of system calls */
  +};
  +
  +/* socket address abstraction object */
  +struct sa_addr_st {
  +    int              nFamily;          /* the socket family (AF_XXX) */
  +    struct sockaddr *saBuf;            /* the "struct sockaddr_xx" actually */
  +    socklen_t        slBuf;            /* the length of "struct sockaddr_xx" */
   };
   
   /* boolean values */

From ossp-cvs-owner@ossp.org  Tue Oct  9 20:37:19 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f99IbI100278; Tue, 9 Oct 2001 20:37:18 +0200 (CEST)
Date: Tue, 9 Oct 2001 20:37:18 +0200 (CEST)
Message-Id: <200110091837.f99IbI100278@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Oct-2001 20:37:18
  Branch: HEAD                             Handle: 2001100919371800

  Modified files:
    ossp-pkg/sa             sa.c

  Log:
    cosmetics only.

  Summary:
    Revision    Changes     Path
    1.21        +4  -4      ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 sa.c
  --- ossp-pkg/sa/sa.c	2001/10/09 18:36:17	1.20
  +++ ossp-pkg/sa/sa.c	2001/10/09 18:37:18	1.21
  @@ -36,10 +36,10 @@
   /* include system API headers */
   #include <stdio.h>       /* for "s[n]printf()" */
   #include <stdlib.h>      /* for "malloc()" & friends */
  -#include <stdarg.h>      /* for "va_xxx()" and "va_list" */
  -#include <string.h>      /* for "strxxx()" and "size_t" */
  +#include <stdarg.h>      /* for "va_XXX()" and "va_list" */
  +#include <string.h>      /* for "strXXX()" and "size_t" */
   #include <sys/types.h>   /* for general prerequisites */
  -#include <ctype.h>       /* for isxxx() */
  +#include <ctype.h>       /* for isXXX() */
   #include <errno.h>       /* for "EXXX" */
   #include <fcntl.h>       /* for "F_XXX" and "O_XXX" */
   #include <unistd.h>      /* for standard Unix stuff */
  @@ -48,7 +48,7 @@
   #include <sys/un.h>      /* for "struct sockaddr_un" */
   #include <netinet/in.h>  /* for "struct sockaddr_in[6]" */
   #include <sys/socket.h>  /* for "AF_XXX" and "SOCK_XXX" */
  -#include <arpa/inet.h>   /* for "inet_xtoy" */
  +#include <arpa/inet.h>   /* for "inet_XtoX" */
   
   /* include own API header */
   #include "sa.h"

From ossp-cvs-owner@ossp.org  Tue Oct  9 20:38:31 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f99IcTU00403; Tue, 9 Oct 2001 20:38:29 +0200 (CEST)
Date: Tue, 9 Oct 2001 20:38:29 +0200 (CEST)
Message-Id: <200110091838.f99IcTU00403@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Oct-2001 20:38:29
  Branch: HEAD                             Handle: 2001100919382900

  Modified files:
    ossp-pkg/sa             sa.c

  Log:
    cosmetics only.

  Summary:
    Revision    Changes     Path
    1.22        +6  -6      ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 sa.c
  --- ossp-pkg/sa/sa.c	2001/10/09 18:37:18	1.21
  +++ ossp-pkg/sa/sa.c	2001/10/09 18:38:29	1.22
  @@ -150,13 +150,13 @@
   
   /* system call table */
   typedef struct {
  -    SA_SC_DECLARE_3(int, connect, int, const struct sockaddr *, socklen_t)
  -    SA_SC_DECLARE_3(int, accept, int, struct sockaddr *, socklen_t *)
  -    SA_SC_DECLARE_5(int, select, int, fd_set *, fd_set *, fd_set *, struct timeval *)
  -    SA_SC_DECLARE_3(ssize_t, read, int, void *, size_t)
  -    SA_SC_DECLARE_3(ssize_t, write, int, const void *, size_t)
  +    SA_SC_DECLARE_3(int,     connect,  int, const struct sockaddr *, socklen_t)
  +    SA_SC_DECLARE_3(int,     accept,   int, struct sockaddr *, socklen_t *)
  +    SA_SC_DECLARE_5(int,     select,   int, fd_set *, fd_set *, fd_set *, struct timeval *)
  +    SA_SC_DECLARE_3(ssize_t, read,     int, void *, size_t)
  +    SA_SC_DECLARE_3(ssize_t, write,    int, const void *, size_t)
       SA_SC_DECLARE_6(ssize_t, recvfrom, int, void *, size_t, int, struct sockaddr *, socklen_t *)
  -    SA_SC_DECLARE_6(ssize_t, sendto, int, const void *, size_t, int, const struct sockaddr *, socklen_t)
  +    SA_SC_DECLARE_6(ssize_t, sendto,   int, const void *, size_t, int, const struct sockaddr *, socklen_t)
   } sa_syscall_tab_t;
    
   /* socket abstraction object */

From ossp-cvs-owner@ossp.org  Tue Oct  9 20:55:24 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f99ItNb02426; Tue, 9 Oct 2001 20:55:23 +0200 (CEST)
Date: Tue, 9 Oct 2001 20:55:23 +0200 (CEST)
Message-Id: <200110091855.f99ItNb02426@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c sa.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Oct-2001 20:55:23
  Branch: HEAD                             Handle: 2001100919552200

  Modified files:
    ossp-pkg/sa             sa.c sa.h

  Log:
    - error text cleanup
    - allow "sa_t *" to be NULL

  Summary:
    Revision    Changes     Path
    1.23        +18 -9      ossp-pkg/sa/sa.c
    1.19        +12 -12     ossp-pkg/sa/sa.h
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 sa.c
  --- ossp-pkg/sa/sa.c	2001/10/09 18:38:29	1.22
  +++ ossp-pkg/sa/sa.c	2001/10/09 18:55:22	1.23
  @@ -357,22 +357,31 @@
       int n;
   
       /* argument sanity check */
  -    if (sa == NULL || str == NULL)
  +    if (str == NULL)
           return SA_ERR_ARG;
   
  -    /* start at begin of buffer */
  -    cpBuf = sa->szError;
  -    nBuf  = sizeof(sa->szError);
  -
       /* translate result value into corresponding string */
       if      (rv == SA_OK)      sz = "everything ok";
       else if (rv == SA_ERR_ARG) sz = "invalid argument";
  -    else if (rv == SA_ERR_USE) sz = "invalid use";
  -    else if (rv == SA_ERR_MEM) sz = "no more memory available";
  +    else if (rv == SA_ERR_USE) sz = "invalid use or context";
  +    else if (rv == SA_ERR_MEM) sz = "not enough memory available";
  +    else if (rv == SA_ERR_MTC) sz = "matching operation failed";
  +    else if (rv == SA_ERR_EOF) sz = "communication end";
  +    else if (rv == SA_ERR_TMT) sz = "communication timeout";
       else if (rv == SA_ERR_SYS) sz = "operating system error";
  -    else if (rv == SA_ERR_EOF) sz = "end of file in socket communication";
       else if (rv == SA_ERR_INT) sz = "internal error";
  -    else                       sz = "unknown error";
  +    else
  +        return SA_ERR_ARG;
  +
  +    /* if no context is available we have to stop */
  +    if (sa == NULL) {
  +        *str = sz;
  +        return SA_OK;
  +    }
  +
  +    /* start at begin of buffer */
  +    cpBuf = sa->szError;
  +    nBuf  = sizeof(sa->szError);
       n = sa_msnprintf(cpBuf, nBuf, "%s", sz);
       cpBuf += n;
       nBuf  -= n;
  Index: ossp-pkg/sa/sa.h
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 sa.h
  --- ossp-pkg/sa/sa.h	2001/10/09 18:34:12	1.18
  +++ ossp-pkg/sa/sa.h	2001/10/09 18:55:22	1.19
  @@ -104,15 +104,15 @@
   
   /* return codes */
   typedef enum {
  -    SA_OK,      /* everything ok */
  -    SA_ERR_ARG, /* invalid argument (wrong parameter) */
  -    SA_ERR_USE, /* invalid use (wrong context) */
  -    SA_ERR_MEM, /* out of memory */
  -    SA_ERR_SYS, /* system error (see errno) */
  -    SA_ERR_EOF, /* end of file/socket communication */
  -    SA_ERR_MTC, /* error in match */
  -    SA_ERR_TMT, /* operation timeout */
  -    SA_ERR_INT  /* internal error */
  +    SA_OK,      /* everything ok               */
  +    SA_ERR_ARG, /* invalid argument            */
  +    SA_ERR_USE, /* invalid use or context      */
  +    SA_ERR_MEM, /* not enough memory available */
  +    SA_ERR_MTC, /* matching operation failed   */
  +    SA_ERR_EOF, /* communication end           */
  +    SA_ERR_TMT, /* communication timeout       */
  +    SA_ERR_SYS, /* operating system error      */
  +    SA_ERR_INT  /* internal error              */
   } sa_rc_t;
   
   /* list of timeouts */
  @@ -137,9 +137,6 @@
       SA_SYSCALL_SENDTO
   } sa_syscall_t;
   
  -/* error handling operations */
  -sa_rc_t sa_error        (sa_t *sa, sa_rc_t rv, char **str);
  -
   /* address object operations */
   sa_rc_t sa_addr_create  (sa_addr_t **saa);
   sa_rc_t sa_addr_destroy (sa_addr_t *saa);
  @@ -181,6 +178,9 @@
   /* socket input/output operations (datagram communication) */
   sa_rc_t sa_recv         (sa_t *sa, char *buf, size_t buflen, size_t *bufdone, sa_addr_t **raddr);
   sa_rc_t sa_send         (sa_t *sa, const char *buf, size_t buflen, size_t *bufdone, sa_addr_t *raddr);
  +
  +/* error handling operations */
  +sa_rc_t sa_error        (sa_t *sa, sa_rc_t rv, char **str);
   
   /* cleanup */
   #if defined(HAVE_CONFIG_H) && !defined(HAVE_SOCKLEN_T)

From ossp-cvs-owner@ossp.org  Tue Oct  9 20:55:48 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f99Itl202486; Tue, 9 Oct 2001 20:55:47 +0200 (CEST)
Date: Tue, 9 Oct 2001 20:55:47 +0200 (CEST)
Message-Id: <200110091855.f99Itl202486@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Oct-2001 20:55:47
  Branch: HEAD                             Handle: 2001100919554700

  Modified files:
    ossp-pkg/sa             TODO

  Log:
    remember error issue

  Summary:
    Revision    Changes     Path
    1.18        +1  -0      ossp-pkg/sa/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 TODO
  --- ossp-pkg/sa/TODO	2001/10/09 18:34:12	1.17
  +++ ossp-pkg/sa/TODO	2001/10/09 18:55:47	1.18
  @@ -13,4 +13,5 @@
     - inet://localhost:syslog#udp -> inet://127.0.0.1:514
     - inet://localhost:smtp -> inet://127.0.0.1:25
     - unix:/tmp/socket -> unix:/tmp/socket
  +- use sa_errorinfo() internally
   

From ossp-cvs-owner@ossp.org  Tue Oct  9 21:58:48 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f99Jwle49053; Tue, 9 Oct 2001 21:58:47 +0200 (CEST)
Date: Tue, 9 Oct 2001 21:58:47 +0200 (CEST)
Message-Id: <200110091958.f99Jwle49053@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Oct-2001 21:58:47
  Branch: HEAD                             Handle: 2001100920584600

  Modified files:
    ossp-pkg/sa             sa.c

  Log:
    According to STEVENS' "Unix Network Programming, Vol.1" (p.412) we have
    to close the socket if a connection timeout occured to make sure that
    the TCP three-way handshake does not proceed further.

  Summary:
    Revision    Changes     Path
    1.24        +2  -0      ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 sa.c
  --- ossp-pkg/sa/sa.c	2001/10/09 18:55:22	1.23
  +++ ossp-pkg/sa/sa.c	2001/10/09 19:58:46	1.24
  @@ -1143,6 +1143,7 @@
               goto done;
           }
           else if (n == 0) {
  +            close(sa->fdSocket); /* stop TCP three-way handshake */
               rv = SA_ERR_TMT;
               goto done;
           }
  @@ -1159,6 +1160,7 @@
   
           /* optionally set errno */
           if (error != 0) {
  +            close(sa->fdSocket); /* just in case */
               errno = error;
               rv = SA_ERR_SYS;
           }

From ossp-cvs-owner@ossp.org  Tue Oct  9 22:11:07 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f99KB6o53257; Tue, 9 Oct 2001 22:11:06 +0200 (CEST)
Date: Tue, 9 Oct 2001 22:11:06 +0200 (CEST)
Message-Id: <200110092011.f99KB6o53257@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   09-Oct-2001 22:11:06
  Branch: HEAD                             Handle: 2001100921110500

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c

  Log:
    cosmetics

  Summary:
    Revision    Changes     Path
    1.77        +2  -2      ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.76 -r1.77 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/09 15:22:10	1.76
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/09 20:11:05	1.77
  @@ -206,7 +206,7 @@
               "[-K] "
               "[-P pidfile] "
               "[-a addr/mask[,addr/mask[,...]] "
  -            "[-b -|path|addr[:port]] "
  +            "[-b addr[:port]|-|path]
               "[-c addr[:port]] "
               "[-d addr[:port][,addr[:port], ...]] "
               "[-g groupmode] "
  @@ -505,7 +505,7 @@
                   }
                   free(azACL);
                   break;
  -            case 'b': /*POD [B<-b> C<->|I<path>|I<addr>[I<:port>]] */
  +            case 'b': /*POD [B<-b> I<addr>[I<:port>]|C<->|I<path>] */
                   if (strcmp(optarg, "-") != 0) {
                       if ((rc = sa_addr_create(&ctx->saaAltio)) != SA_OK) {
                           fprintf(stderr, "%s:Error: Creating address failed for -a option (%d)\n", 

From ossp-cvs-owner@ossp.org  Tue Oct  9 22:12:32 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f99KCV753668; Tue, 9 Oct 2001 22:12:31 +0200 (CEST)
Date: Tue, 9 Oct 2001 22:12:31 +0200 (CEST)
Message-Id: <200110092012.f99KCV753668@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   09-Oct-2001 22:12:31
  Branch: HEAD                             Handle: 2001100921123000

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.pod

  Log:
    document todays changes including option revamping

  Summary:
    Revision    Changes     Path
    1.27        +94 -72     ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 lmtp2nntp.pod
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/10/09 10:19:12	1.26
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/10/09 20:12:30	1.27
  @@ -37,7 +37,7 @@
   [B<-K>]
   [B<-P> I<pidfile>]
   [B<-a> I<addr>/I<mask>[,I<addr>/I<mask>[,...]]
  -[B<-b> C<->|I<path>|I<addr>[I<:port>]]
  +[B<-b> I<addr>[I<:port>]|C<->|I<path>]
   [B<-c> I<addr>[I<:port>]]
   [B<-d> I<addr>[I<:port>][,I<addr>[I<:port>], ...]]
   [B<-g> I<groupmode>]
  @@ -67,35 +67,66 @@
   
   =over 4
   
  -=item B<-b> C<->|I<path>|I<addr>[I<:port>] (LMTP bind)
  +=item B<-D>
   
  -Where to bind for incoming LMTP connections. Supported are "C<->"
  -(stdin/stdout), I<path> (for Unix Domain socket) and I<addr>[I<:port>]
  -(for TCP Internet Domain socket).
  +Daemonize program and detach from current terminal.
   
  -=item B<-c> I<addr>[I<:port>] 
  +=item B<-K>
   
  -Where to bind for outgoing NNTP connections. If an address is
  -specified but port is omitted the kernel chooses an ephemeral port. If you
  -want to specify a port but no address replace address with 0.0.0.0.  If
  -completely omitted, 0.0.0.0:0 is assumed which causes the kernel to choose an
  -address based on routing information and an ephemeral port.
  +Kill the daemon. After processing this option the program is terminated so
  +this option effectivly renders most other options invalid not including
  +specification of a pidfile and logging. The pid must be listed in pidfile.
  +
  +=item B<-P> I<pidfile>
  +
  +Pidfile to remember the process ID when running as or killing the daemon. Care
  +must be taken when using relative path names as daemonizing changes the
  +current working directory to '/'.
  +
  +=item B<-a> I<addr>/I<mask>[,I<addr>/I<mask>[,...]] (LMTP daemon ACL)
  +
  +Access control list specifying TCP INET addresses and masks where incoming
  +LMTP connections are accepted from. This option can be specified more than
  +once and it is possible to specify more than one addr/ mask per option as a
  +comma-separated list. Omitting a mask defaults to a host comparison. The mask
  +is a CIDR style bitmask where /0 means no comparison and enforces a match.
  +Omitting the wholly option defaults to 0.0.0.0/0 which allows access from
  +everywhere.  It is possible to specify both inclusive and exclusive addresses,
  +the latter have to prefixed with an exclamation mark. In order to pass the ACL
  +a client must match any inclusion and not match any exclusion. If you do not
  +specify any inclusions a fake inclusion of 0.0.0.0/0 is appended internally.
  +Any addr can be a name to be resolved first.
  +
  +=item B<-b> I<addr>[I<:port>]|C<->|I<path> (LMTP daemon bind)
  +
  +Bind address accepting incoming LMTP connections. Supported are "C<->" for
  +stdio, I<path> for Unix Domain socket and I<addr>[I<:port>] for TCP INET
  +socket. Omitting this option defaults to stdio. The path for a UNIX domain
  +socket must start with a slash. The addr can be a name to be resolved first.
  +
  +=item B<-c> I<addr>[I<:port>] (NNTP client bind)
  +
  +Client connections for outgoing NNTP communication bind to this address. If an
  +address is specified but port is omitted the kernel chooses an ephemeral port.
  +If you want to specify a port but no address replace address with all zeroes.
  +If completely omitted, 0.0.0.0:0 is assumed which causes the kernel to choose
  +an address based on routing information and an ephemeral port.  The addr can
  +be a name to be resolved first.
  +
  +=item B<-d> I<addr>[I<:port>][,I<addr>[I<:port>], ...] (NNTP client peer)
  +
  +Destination hostname or address and optional TCP port of a NNTP service.
  +Unless a port is specified, getserbyname(nntp) is queried with fallback to
  +119/tcp. If C<-d> option is ommited, the environment variable C<NNTPSERVER> is
  +read, if this is undefined or empty C<news> is used and if this doesn't
  +resolve, C<localhost> is assumed.  This option can be specified more than once
  +and it is possible to specify more than one host/ port per option as a
  +comma-separated list.  Any addr can be a name to be resolved first.  It is
  +assumed that multiple servers are used to increase the reliability of the news
  +system and to speed up distribution by posting the same article to more than
  +one server.  In regard to this program they must provide the same groups and
  +talk to each other. 
   
  -=item B<-d> I<deliverymode>
  -
  -Possible values for I<deliverymode> are C<post>, C<feed> or a string in
  -"LLL/D.D.D" format used to fake a LMTP return code.  In C<post> mode articles
  -are sent to the NNTP server(s) using POST command. Before posting, a duplicate
  -check using STAT command is issued. In C<feed> mode articles are sent to the
  -NNTP server(s) using IHAVE command.  Specifying a return code and DSN replaces
  -the post/ feed logic by a noop and assumes the given string must be returned
  -to the LMTP side.  The slash is replaced by a space internally. The default is
  -"553/5.7.1" meaning "Requested action not taken: mailbox name not allowed/
  -Delivery not authorized, message refused".  This is useful for debugging LMTP
  -setups without engaging NNTP.  Fake mode makes it possible to run without any
  -B<-h> option. However, if B<-h> option is given the NNTP client tries to
  -connect but it's return codes are ignored.
  -
   =item B<-g> I<groupmode>
   
   Possible values for I<groupmode> are C<arg> (default), C<envelope> and
  @@ -108,26 +139,18 @@
   arguments. However, in these modes the command line arguments are filters
   representing allowed groups. Filters can be specified as wildmat's.
   
  -=item B<-h> I<host>[I<:port>][,I<host>[I<:port>], ...]
  +=item B<-l> I<level>[:I<logfile>]
   
  -Hostname or address and optional TCP port of a NNTP service. Unless a port is
  -specified, getserbyname(nntp) is queried with fallback to 119/tcp. If C<-h>
  -option is ommited, the environment variable C<NNTPSERVER> is read, if this is
  -undefined or empty C<news> is used and if this doesn't resolve, C<localhost>
  -is assumed.
  -
  -This option can be specified more than once and it is possible to specify more
  -than one host/ port per option as a comma-separated list. It is assumed that
  -multiple servers are used to increase the reliability of the news system and
  -to speed up distribution by posting the same article to more than one server.
  -In regard to this program they must provide the same groups and talk to each
  -other. 
  -
  -=item B<-k>
  -
  -Kill the daemon. After processing the -k option the program is terminated so
  -it renders most other options invalid not including -p and -l. The pid must be
  -listed in pidfile using -p option.
  +The level measures the degree and importance of output and can be any of
  +PANIC, CRITICAL, ERROR, WARNING, NOTICE, INFO, TRACE or DEBUG. The recommended
  +level for daily operations is NOTICE. The default name for logfile is
  +"logfile".  This program is using the logging library (l2) which is currently
  +under development. An early access snapshot with limited functionality has
  +been included.  Currently the common denominator of usage between lmtp2nntp
  +and l2 is to use logging into a file only. Note that this will change soon as
  +during integration of l2 into lmtp2nntp logging channels for local syslog and
  +a SMTP client were already finished and IRC and NNTP clients are under
  +development.
   
   =item B<-m> I<mailfrom>
   
  @@ -140,45 +163,44 @@
   Own FQDN used in LMTP and NNTP protocols. This overrides the nodename returned
   by uname(3).
   
  -=item B<-p> I<pidfile>
  +=item B<-o> I<operationmode>
   
  -Pidfile to remember the process ID when -a option forces us to run as a
  -daemon. Also to be used with -k.
  +Possible values for I<operationmode> are C<post>, C<feed> or a string in
  +"LLL/D.D.D" format used to fake a LMTP return code.  In C<post> mode articles
  +are sent to the NNTP server(s) using POST command. Before posting, a duplicate
  +check using STAT command is issued. In C<feed> mode articles are sent to the
  +NNTP server(s) using IHAVE command.  Specifying a return code and DSN replaces
  +the post/ feed logic by a noop and assumes the given string must be returned
  +to the LMTP side.  The slash is replaced by a space internally. The default is
  +"553/5.7.1" meaning "Requested action not taken: mailbox name not allowed/
  +Delivery not authorized, message refused".  This is useful for debugging LMTP
  +setups without engaging NNTP.  Fake mode makes it possible to run without any
  +B<-d> option. However, if B<-d> option is given the NNTP client tries to
  +connect but it's return codes are ignored.
   
   =item B<-s> I<size>
   
   Size limitation on message in bytes. Default is 8388608 (8M). Values below 64
   are considered unacceptable small.
   
  -=item B<-t> I<timeout>
  -
  -Timeout for the LMTP daemon managing alternate IO (see -a) to wait for input
  -after having accepted a connection.  Value is given in seconds, the default is
  -three.  Zero means to wait infinite.  Use low numbers to prevend DoS attacks.
  -
  -=item B<-l> I<level>[:I<logfile>]
  +=item B<-t> I<name>=I<sec>[,I<name>=I<sec>[,...]
   
  -The level measures the degree and importance of output and can be any of
  -PANIC, CRITICAL, ERROR, WARNING, NOTICE, INFO, TRACE or DEBUG. The recommended
  -level for daily operations is NOTICE. The default name for logfile is
  -"logfile".  This program is using the logging library (l2) which is currently
  -under development. An early access snapshot with limited functionality has
  -been included.  Currently the common denominator of usage between lmtp2nntp
  -and l2 is to use logging into a file only. Note that this will change soon as
  -during integration of l2 into lmtp2nntp logging channels for local syslog and
  -a SMTP client were already finished and IRC and NNTP clients are under
  -development.
  +Timeout for various actions. Possible names are C<lmtp> for any LMTP and
  +C<nntp> for any NNTP actions. More granular actions can be specified according
  +to the following table, which also lists the system defaults.  Setting sec to
  +zero means to wait infinite. Note that LMTP timeouts only apply to socket
  +operations, stdio always waits infinite.
  +
  +    lmtp:accept  = 0
  +    lmtp:read    = 10
  +    lmtp:write   = 10
  +    nntp:connect = 360
  +    nntp:read    = 60
  +    nntp:write   = 60
   
   =item B<-v>
   
   Print version information.
  -
  -=item B<-w> I<waittime>
  -
  -Specify the time the NNTP client waits for the initial connect to complete and
  -the time to wait for every server's response. Value is given in seconds and
  -must be greater than or equal to one second. The default is OS dependent for
  -the connect and a three second timeout waiting for a server's response.
   
   =item I<newsgroup> [I<newsgroup> ...]
   

From ossp-cvs-owner@ossp.org  Tue Oct  9 22:19:59 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f99KJwQ54545; Tue, 9 Oct 2001 22:19:58 +0200 (CEST)
Date: Tue, 9 Oct 2001 22:19:58 +0200 (CEST)
Message-Id: <200110092019.f99KJwQ54545@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c sa.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Oct-2001 22:19:58
  Branch: HEAD                             Handle: 2001100921195800

  Modified files:
    ossp-pkg/sa             sa.c sa.h

  Log:
    [still untested stuff]
    
    - Remove SA_TIMEOUT_RECV and SA_TIMEOUT_SEND, because
      SA_TIMEOUT_READ and SA_TIMEOUT_WRITE are sufficient because you cannot
      use datagram and stream communication at the same time anyway. So
      there is no need to distinguish between the two communications in
      timeouts. Additionally this enables the next point from being able to
      be implemented at all.
    
    - Implement the read/write timeouts alternatively in kernel-space
      through the newer SO_RCVTIMEO and SO_SNDTIMEO socket options. This
      means a select(2) system call less for each read/write operation.

  Summary:
    Revision    Changes     Path
    1.25        +51 -5      ossp-pkg/sa/sa.c
    1.20        +1  -3      ossp-pkg/sa/sa.h
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 sa.c
  --- ossp-pkg/sa/sa.c	2001/10/09 19:58:46	1.24
  +++ ossp-pkg/sa/sa.c	2001/10/09 20:19:58	1.25
  @@ -163,7 +163,7 @@
   struct sa_st {
       sa_type_t        eType;            /* socket type (stream or datagram) */
       int              fdSocket;         /* socket file descriptor */
  -    struct timeval   tvTimeout[6];     /* timeout values (sec, usec) */
  +    struct timeval   tvTimeout[4];     /* timeout values (sec, usec) */
       int              nReadLen;         /* read  buffer current length */
       int              nReadSize;        /* read  buffer current size */
       char            *cpReadBuf;        /* read  buffer memory chunk */
  @@ -796,6 +796,28 @@
       return SA_OK;
   }
   
  +/* set timeouts if timeouts or done in kernel */
  +static sa_rc_t sa_socket_settimeouts(sa_t *sa)
  +{
  +#if defined(SO_RCVTIMEO) && defined(SO_SNDTIMEO)
  +    if (sa->fdSocket != -1) {
  +        if (SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_READ])) {
  +            if (setsockopt(sa->fdSocket, SOL_SOCKET, SO_RCVTIMEO,
  +                           &sa->tvTimeout[SA_TIMEOUT_READ],
  +                           sizeof(sa->tvTimeout[SA_TIMEOUT_READ])) < 0)
  +                return SA_ERR_SYS;
  +        }
  +        if (SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_WRITE])) {
  +            if (setsockopt(sa->fdSocket, SOL_SOCKET, SO_SNDTIMEO,
  +                           &sa->tvTimeout[SA_TIMEOUT_WRITE],
  +                           sizeof(sa->tvTimeout[SA_TIMEOUT_WRITE])) < 0)
  +                return SA_ERR_SYS;
  +        }
  +    }
  +#endif
  +    return SA_OK;
  +}
  +
   /* internal lazy/delayed initialization of underlying socket */
   static sa_rc_t sa_socket_init(sa_t *sa, int nFamily)
   {
  @@ -845,6 +867,9 @@
       if ((sa->fdSocket = socket(nFamily, nType, nProto)) == -1)
           return SA_ERR_SYS;
   
  +    /* optionally set kernel timeouts */
  +    sa_socket_settimeouts(sa);
  +
       return SA_OK;
   }
   
  @@ -973,6 +998,9 @@
           sa->tvTimeout[id].tv_usec = usec;
       }
   
  +    /* optionally set kernel timeouts */
  +    sa_socket_settimeouts(sa);
  +
       return SA_OK;
   }
   
  @@ -1369,10 +1397,13 @@
   static int sa_read_raw(sa_t *sa, char *cpBuf, int nBufLen)
   {
       int rv;
  +#if !(defined(SO_RCVTIMEO) && defined(SO_SNDTIMEO))
       fd_set fds;
  +#endif
   
       /* if timeout is enabled, perform explicit/smart blocking instead 
          of implicitly/hard blocking in the read(2) system call */
  +#if !(defined(SO_RCVTIMEO) && defined(SO_SNDTIMEO))
       if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_READ])) {
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
  @@ -1385,12 +1416,18 @@
               return -1;
           }
       }
  +#endif
   
       /* perform read operation on underlying socket */
       do {
           rv = SA_SC_CALL_3(sa, read, sa->fdSocket, cpBuf, nBufLen);
       } while (rv == -1 && errno == EINTR);
   
  +#if defined(SO_RCVTIMEO) && defined(SO_SNDTIMEO)
  +    if (rv == -1 && errno == EWOULDBLOCK)
  +        errno = ETIMEDOUT;
  +#endif
  +
       return rv;
   }
   
  @@ -1535,10 +1572,13 @@
   static int sa_write_raw(sa_t *sa, const char *cpBuf, int nBufLen)
   {
       int rv;
  +#if !(defined(SO_RCVTIMEO) && defined(SO_SNDTIMEO))
       fd_set fds;
  +#endif
   
       /* if timeout is enabled, perform explicit/smart blocking instead 
          of implicitly/hard blocking in the write(2) system call */
  +#if !(defined(SO_RCVTIMEO) && defined(SO_SNDTIMEO))
       if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_WRITE])) {
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
  @@ -1551,12 +1591,18 @@
               return -1;
           }
       }
  +#endif
   
       /* perform write operation on underlying socket */
       do {
           rv = SA_SC_CALL_3(sa, write, sa->fdSocket, cpBuf, nBufLen);
       } while (rv == -1 && errno == EINTR);
   
  +#if defined(SO_RCVTIMEO) && defined(SO_SNDTIMEO)
  +    if (rv == -1 && errno == EWOULDBLOCK)
  +        errno = ETIMEDOUT;
  +#endif
  +
       return rv;
   }
   
  @@ -1756,12 +1802,12 @@
   
       /* if timeout is enabled, perform explicit/smart blocking instead 
          of implicitly/hard blocking in the recvfrom(2) system call */
  -    if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_RECV])) {
  +    if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_READ])) {
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
           do {
               n = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &fds, NULL, NULL, 
  -                             &sa->tvTimeout[SA_TIMEOUT_RECV]);
  +                             &sa->tvTimeout[SA_TIMEOUT_READ]);
           } while (n == -1 && errno == EINTR);
           if (n == 0) 
               errno = ETIMEDOUT;
  @@ -1812,12 +1858,12 @@
   
       /* if timeout is enabled, perform explicit/smart blocking instead 
          of implicitly/hard blocking in the sendto(2) system call */
  -    if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_SEND])) {
  +    if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_WRITE])) {
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
           do {
               n = SA_SC_CALL_5(sa, select, sa->fdSocket+1, NULL, &fds, NULL, 
  -                             &sa->tvTimeout[SA_TIMEOUT_SEND]);
  +                             &sa->tvTimeout[SA_TIMEOUT_WRITE]);
           } while (n == -1 && errno == EINTR);
           if (n == 0) 
               errno = ETIMEDOUT;
  Index: ossp-pkg/sa/sa.h
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 sa.h
  --- ossp-pkg/sa/sa.h	2001/10/09 18:55:22	1.19
  +++ ossp-pkg/sa/sa.h	2001/10/09 20:19:58	1.20
  @@ -121,9 +121,7 @@
       SA_TIMEOUT_ACCEPT   = 0,
       SA_TIMEOUT_CONNECT  = 1,
       SA_TIMEOUT_READ     = 2,
  -    SA_TIMEOUT_WRITE    = 3,
  -    SA_TIMEOUT_RECV     = 4,
  -    SA_TIMEOUT_SEND     = 5
  +    SA_TIMEOUT_WRITE    = 3
   } sa_timeout_t;
   
   /* list of system calls */

From ossp-cvs-owner@ossp.org  Wed Oct 10 09:42:28 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9A7gRw36284; Wed, 10 Oct 2001 09:42:27 +0200 (CEST)
Date: Wed, 10 Oct 2001 09:42:27 +0200 (CEST)
Message-Id: <200110100742.f9A7gRw36284@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa TODO sa.c sa.h sa.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   10-Oct-2001 09:42:27
  Branch: HEAD                             Handle: 2001101008422600

  Modified files:
    ossp-pkg/sa             TODO sa.c sa.h sa.pod

  Log:
    Change
    
       sa_rc_t sa_buffers      (sa_t *sa, size_t rsize, size_t wsize);
    
    to
       sa_rc_t sa_buffer       (sa_t *sa, sa_buffer_t  id, size_t size);
    
    in order to make this API function more flexible.

  Summary:
    Revision    Changes     Path
    1.19        +1  -5      ossp-pkg/sa/TODO
    1.26        +42 -38     ossp-pkg/sa/sa.c
    1.21        +7  -1      ossp-pkg/sa/sa.h
    1.10        +2  -2      ossp-pkg/sa/sa.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 TODO
  --- ossp-pkg/sa/TODO	2001/10/09 18:55:47	1.18
  +++ ossp-pkg/sa/TODO	2001/10/10 07:42:26	1.19
  @@ -1,12 +1,8 @@
   
   - support for writev(2)
   - perhaps move 1024-buffer of writef into sa_t and make adjustable
  -- sa_buffer(sa, <which>, size)
  -  SA_BUFFER_UREAD
  -  SA_BUFFER_UWRITE
  -  SA_BUFFER_KREAD
  +- SA_BUFFER_KREAD
     SA_BUFFER_KWRITE
  -  SA_BUFFER_WRITEF
   - full test suite for whole API
     - inet://0.0.0.0:0 -> inet://0.0.0.0:514
     - inet://127.0.0.1:514 -> inet://127.0.0.1:514
  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 sa.c
  --- ossp-pkg/sa/sa.c	2001/10/09 20:19:58	1.25
  +++ ossp-pkg/sa/sa.c	2001/10/10 07:42:26	1.26
  @@ -1005,7 +1005,7 @@
   }
   
   /* configure I/O buffers */
  -sa_rc_t sa_buffers(sa_t *sa, size_t rsize, size_t wsize)
  +sa_rc_t sa_buffer(sa_t *sa, sa_buffer_t id, size_t size)
   {
       char *cp;
   
  @@ -1013,45 +1013,49 @@
       if (sa == NULL)
           return SA_ERR_ARG;
   
  -    /* make sure buffered were already flushed sufficiently */
  -    if (sa->nReadLen > rsize || sa->nWriteLen > wsize)
  -        return SA_ERR_USE;
  -
  -    /* configure read/incoming buffer */
  -    if (rsize > 0) {
  -        if (sa->cpReadBuf == NULL)
  -            cp = (char *)malloc(rsize);
  -        else
  -            cp = (char *)realloc(sa->cpReadBuf, rsize);
  -        if (cp == NULL)
  -            return SA_ERR_SYS;
  -        sa->cpReadBuf = cp;
  -        sa->nReadSize = rsize;
  -    }
  -    else {
  -        if (sa->cpReadBuf != NULL)
  -            free(sa->cpReadBuf);
  -        sa->cpReadBuf = NULL;
  -        sa->nReadSize = 0;
  +    if (id == SA_BUFFER_READ) {
  +        /* configure read/incoming buffer */
  +        if (sa->nReadLen > size)
  +            return SA_ERR_USE;
  +        if (size > 0) {
  +            if (sa->cpReadBuf == NULL)
  +                cp = (char *)malloc(size);
  +            else
  +                cp = (char *)realloc(sa->cpReadBuf, size);
  +            if (cp == NULL)
  +                return SA_ERR_SYS;
  +            sa->cpReadBuf = cp;
  +            sa->nReadSize = size;
  +        }
  +        else {
  +            if (sa->cpReadBuf != NULL)
  +                free(sa->cpReadBuf);
  +            sa->cpReadBuf = NULL;
  +            sa->nReadSize = 0;
  +        }
       }
  -
  -    /* configure write/outgoing buffer */
  -    if (wsize > 0) {
  -        if (sa->cpWriteBuf == NULL)
  -            cp = (char *)malloc(wsize);
  -        else
  -            cp = (char *)realloc(sa->cpWriteBuf, wsize);
  -        if (cp == NULL)
  -            return SA_ERR_SYS;
  -        sa->cpWriteBuf = cp;
  -        sa->nWriteSize = wsize;
  +    else if (id == SA_BUFFER_WRITE) {
  +        /* configure write/outgoing buffer */
  +        if (sa->nWriteLen > size)
  +            return SA_ERR_USE;
  +        if (size > 0) {
  +            if (sa->cpWriteBuf == NULL)
  +                cp = (char *)malloc(size);
  +            else
  +                cp = (char *)realloc(sa->cpWriteBuf, size);
  +            if (cp == NULL)
  +                return SA_ERR_SYS;
  +            sa->cpWriteBuf = cp;
  +            sa->nWriteSize = size;
  +        }
  +        else {
  +            if (sa->cpWriteBuf != NULL)
  +                free(sa->cpWriteBuf);
  +            sa->cpWriteBuf = NULL;
  +            sa->nWriteSize = 0;
  +        }
       }
  -    else {
  -        if (sa->cpWriteBuf != NULL)
  -            free(sa->cpWriteBuf);
  -        sa->cpWriteBuf = NULL;
  -        sa->nWriteSize = 0;
  -    }
  +        return SA_ERR_ARG;
   
       return SA_OK;
   }
  Index: ossp-pkg/sa/sa.h
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 sa.h
  --- ossp-pkg/sa/sa.h	2001/10/09 20:19:58	1.20
  +++ ossp-pkg/sa/sa.h	2001/10/10 07:42:26	1.21
  @@ -124,6 +124,12 @@
       SA_TIMEOUT_WRITE    = 3
   } sa_timeout_t;
   
  +/* list of buffers */
  +typedef enum {
  +    SA_BUFFER_READ,
  +    SA_BUFFER_WRITE
  +} sa_buffer_t;
  +
   /* list of system calls */
   typedef enum {
       SA_SYSCALL_CONNECT,
  @@ -153,7 +159,7 @@
   /* socket parameter operations */
   sa_rc_t sa_type         (sa_t *sa, sa_type_t type);
   sa_rc_t sa_timeout      (sa_t *sa, sa_timeout_t id, long sec, long usec);
  -sa_rc_t sa_buffers      (sa_t *sa, size_t rsize, size_t wsize);
  +sa_rc_t sa_buffer       (sa_t *sa, sa_buffer_t  id, size_t size);
   sa_rc_t sa_syscall      (sa_t *sa, sa_syscall_t id, void (*fptr)(), void *fctx);
   
   /* socket connection operations */
  Index: ossp-pkg/sa/sa.pod
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 sa.pod
  --- ossp-pkg/sa/sa.pod	2001/10/09 13:19:25	1.9
  +++ ossp-pkg/sa/sa.pod	2001/10/10 07:42:26	1.10
  @@ -65,7 +65,7 @@
   =item B<Socket Parameter Operations>:
   
   sa_timeout,
  -sa_buffers. 
  +sa_buffer. 
               
   =item B<Socket Connection Operations>:
   
  @@ -220,7 +220,7 @@
   
   =item sa_rc_t B<sa_timeout>(sa_t *I<sa>, long I<sec>, long I<usec>);
   
  -=item sa_rc_t B<sa_buffers>(sa_t *I<sa>, size_t I<rsize>, size_t I<wsize>);
  +=item sa_rc_t B<sa_buffer>(sa_t *I<sa>, sa_buffer_t id, size_t I<size>);
   
   =item sa_rc_t B<sa_getoption>(sa_t *I<sa>, int I<optname>, void *I<optval>, socklen_t *I<optlen>);
   

From ossp-cvs-owner@ossp.org  Wed Oct 10 09:45:38 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9A7jbC36728; Wed, 10 Oct 2001 09:45:37 +0200 (CEST)
Date: Wed, 10 Oct 2001 09:45:37 +0200 (CEST)
Message-Id: <200110100745.f9A7jbC36728@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   10-Oct-2001 09:45:37
  Branch: HEAD                             Handle: 2001101008453700

  Modified files:
    ossp-pkg/sa             sa.pod

  Log:
    reflect recent changes

  Summary:
    Revision    Changes     Path
    1.11        +18 -6      ossp-pkg/sa/sa.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.pod
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 sa.pod
  --- ossp-pkg/sa/sa.pod	2001/10/10 07:42:26	1.10
  +++ ossp-pkg/sa/sa.pod	2001/10/10 07:45:37	1.11
  @@ -64,8 +64,10 @@
               
   =item B<Socket Parameter Operations>:
   
  +sa_type,
   sa_timeout,
  -sa_buffer. 
  +sa_buffer, 
  +sa_syscall. 
               
   =item B<Socket Connection Operations>:
   
  @@ -91,6 +93,10 @@
   sa_recv,
   sa_send.
   
  +=item B<Socket Error Handling>:
  +
  +sa_error.
  +
   =back
   
   =head1 DESCRIPTION
  @@ -217,14 +223,12 @@
   =over 4
   
   =item sa_rc_t B<sa_type>(sa_t *I<sa>, sa_type_t I<type>);
  -
  -=item sa_rc_t B<sa_timeout>(sa_t *I<sa>, long I<sec>, long I<usec>);
   
  -=item sa_rc_t B<sa_buffer>(sa_t *I<sa>, sa_buffer_t id, size_t I<size>);
  +=item sa_rc_t B<sa_timeout>(sa_t *I<sa>, sa_timeout_t I<id>, long I<sec>, long I<usec>);
   
  -=item sa_rc_t B<sa_getoption>(sa_t *I<sa>, int I<optname>, void *I<optval>, socklen_t *I<optlen>);
  +=item sa_rc_t B<sa_buffer>(sa_t *I<sa>, sa_buffer_t I<id>, size_t I<size>);
   
  -=item sa_rc_t B<sa_setoption>(sa_t *I<sa>, int I<optname>, const void *I<optval>, socklen_t I<optlen>);
  +=item sa_rc_t B<sa_syscall>(sa_t *I<sa>, sa_syscall_t I<id>, void (*I<fptr>)(), void *I<fctx>);
   
   =back
   
  @@ -273,6 +277,14 @@
   =item sa_rc_t B<sa_recv>(sa_t *I<sa>, char *I<buf>, size_t I<buflen>, size_t *I<bufdone>, sa_addr_t **I<raddr>);
   
   =item sa_rc_t B<sa_send>(sa_t *I<sa>, const char *I<buf>, size_t I<buflen>, size_t *I<bufdone>, sa_addr_t *I<raddr>);
  +
  +=back
  +
  +=head2 Socket Error Handling
  +
  +=over 4
  +
  +=item sa_rc_t B<sa_error>(sa_t *I<sa>, sa_rc_t I<rv>, char **I<str>);
   
   =back
   

From ossp-cvs-owner@ossp.org  Wed Oct 10 09:57:30 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9A7vT637872; Wed, 10 Oct 2001 09:57:29 +0200 (CEST)
Date: Wed, 10 Oct 2001 09:57:29 +0200 (CEST)
Message-Id: <200110100757.f9A7vT637872@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   10-Oct-2001 09:57:29
  Branch: HEAD                             Handle: 2001101008572900

  Modified files:
    ossp-pkg/sa             TODO

  Log:
    cleanup

  Summary:
    Revision    Changes     Path
    1.20        +42 -6      ossp-pkg/sa/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 TODO
  --- ossp-pkg/sa/TODO	2001/10/10 07:42:26	1.19
  +++ ossp-pkg/sa/TODO	2001/10/10 07:57:29	1.20
  @@ -1,13 +1,49 @@
   
  -- support for writev(2)
  -- perhaps move 1024-buffer of writef into sa_t and make adjustable
  -- SA_BUFFER_KREAD
  -  SA_BUFFER_KWRITE
  -- full test suite for whole API
  +TODO
  +----
  +
  +o Perhaps move 1024-buffer of writef into sa_t and make adjustable or
  +  even better: provide a sa_mvsnprintf() variant which directly does the
  +  sa_write calls and this way the whole buffering is the SA_BUFFER_WRITE.
  +  This would be exactly what the user would expect.
  +
  +o Provide a full test suite for the whole API.
  +
     - inet://0.0.0.0:0 -> inet://0.0.0.0:514
     - inet://127.0.0.1:514 -> inet://127.0.0.1:514
     - inet://localhost:syslog#udp -> inet://127.0.0.1:514
     - inet://localhost:smtp -> inet://127.0.0.1:25
     - unix:/tmp/socket -> unix:/tmp/socket
  -- use sa_errorinfo() internally
  +
  +o Use sa_errorinfo() internally everywhere where it is reasonable.
  +
  +CANDO
  +-----
  +
  +o Support for writev(2).
  +
  +  This can be done by internally switching to always use writev(2),
  +  providing an emulation for writev(2) ala Pth and by basing the write
  +  calls always on writev.
  +  
  +o Kernel Read/Write Buffer Adjustments.
  +
  +  BSD Sockets usually provide (see setsockopt(2)):
  +
  +      SO_SNDBUF          set buffer size for output
  +      SO_RCVBUF          set buffer size for input
  +      SO_SNDLOWAT        set minimum count for output
  +      SO_RCVLOWAT        set minimum count for input
  +
  +  This would mean that we could also allow the control
  +  of the kernel buffers via
  +
  +      SA_BUFFER_KREAD
  +      SA_BUFFER_KWRITE
  +
  +  Unfortunately the whole kernel buffer issue is very complex, because
  +  according to STEVENS there are both minimum and maximum sizes and both
  +  borders heavily depend on the currently used protocol (TCP or UDP) and
  +  the MTU of the underlying network, etc. This all together seems like
  +  opening a can of worms if we provide SA_BUFFER_K{READ,WRITE}.
   

From ossp-cvs-owner@ossp.org  Wed Oct 10 11:05:21 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9A95J745946; Wed, 10 Oct 2001 11:05:19 +0200 (CEST)
Date: Wed, 10 Oct 2001 11:05:19 +0200 (CEST)
Message-Id: <200110100905.f9A95J745946@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa TODO sa.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   10-Oct-2001 11:05:19
  Branch: HEAD                             Handle: 2001101010051800

  Modified files:
    ossp-pkg/sa             TODO sa.c

  Log:
    Woohoooo, fully revamp formatting stuff:
    
    - evolve sa_mvsnprintf() into an sa_mvxprintf() which
      1. is output independent
      2. support especially no-output mode (length determination only)
      3. performs better by output plain text in largest possible chunks
      4. does output operation only once in the loop (smaller code-size)
    
    - write a new sa_mvsnprintf() for buffer output based on sa_mvxprintf()
    
    - change sa_writef() from brain-dead and problematic "first format
      anything into temporary buffer following by a single write" to the
      expected "format on-the-fly into the SA_BUFFER_WRITE and if not enough
      space exists, write directly to the socket".

  Summary:
    Revision    Changes     Path
    1.21        +0  -5      ossp-pkg/sa/TODO
    1.27        +108 -42    ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 TODO
  --- ossp-pkg/sa/TODO	2001/10/10 07:57:29	1.20
  +++ ossp-pkg/sa/TODO	2001/10/10 09:05:18	1.21
  @@ -2,11 +2,6 @@
   TODO
   ----
   
  -o Perhaps move 1024-buffer of writef into sa_t and make adjustable or
  -  even better: provide a sa_mvsnprintf() variant which directly does the
  -  sa_write calls and this way the whole buffering is the SA_BUFFER_WRITE.
  -  This would be exactly what the user would expect.
  -
   o Provide a full test suite for the whole API.
   
     - inet://0.0.0.0:0 -> inet://0.0.0.0:514
  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 sa.c
  --- ossp-pkg/sa/sa.c	2001/10/10 07:42:26	1.26
  +++ ossp-pkg/sa/sa.c	2001/10/10 09:05:18	1.27
  @@ -248,62 +248,117 @@
   #endif
   }
   
  -/* minimal vsnprintf(3) variant which supports %{c,s,d} only */
  -static int sa_mvsnprintf(char *buffer, size_t bufsize, const char *format, va_list ap)
  +/* minimal output-independent vprintf(3) variant which supports %{c,s,d,%} only */
  +static int sa_mvxprintf(int (*output)(void *ctx, const char *buffer, size_t bufsize), void *ctx, const char *format, va_list ap)
   {
  -    char *bufptr;
  -    char *bufend;
       /* sufficient integer buffer: <available-bits> x log_10(2) + safety */
       char ibuf[((sizeof(int)*8)/3)+10]; 
       char *cp;
       char c;
       int d;
       int n;
  +    int bytes;
   
  -    bufptr = buffer;
  -    bufend = buffer + bufsize - 1;
  -    while ((c = *format++) != '\0' && bufptr < bufend) {
  -        if (c == '%') {
  -            c = *format++;
  -            if (c == '%')
  -                /* implement "%%" */
  -                *bufptr++ = c;
  -            else if (c == 'c')
  -                /* implement "%c" */
  -                *bufptr++ = (char)va_arg(ap, int);
  +    if (format == NULL || ap == NULL)
  +        return -1;
  +    bytes = 0;
  +    while (*format != '\0') {
  +        if (*format == '%') {
  +            c = *(format+1);
  +            if (c == '%') {
  +                /* expand "%%" */
  +                cp = &c;
  +                n = sizeof(char);
  +            }
  +            else if (c == 'c') {
  +                /* expand "%c" */
  +                c = (char)va_arg(ap, int);
  +                cp = &c;
  +                n = sizeof(char);
  +            }
               else if (c == 's') {
  -                /* implement "%s" */
  +                /* expand "%s" */
                   if ((cp = (char *)va_arg(ap, char *)) == NULL)
                       cp = "(null)";
                   n = strlen(cp);
  -                if ((bufptr + n) > bufend)
  -                    n = bufend - bufptr;
  -                memcpy(bufptr, cp, n);
  -                bufptr += n;
               }
               else if (c == 'd') {
  -                /* implement "%d" */
  +                /* expand "%d" */
                   d = (int)va_arg(ap, int);
   #ifdef HAVE_SNPRINTF
                   snprintf(ibuf, sizeof(ibuf), "%d", d); /* explicitly secure */
   #else
                   sprintf(ibuf, "%d", d);                /* implicitly secure */
   #endif
  -                n = strlen(ibuf);
  -                memcpy(bufptr, ibuf, n);
  -                bufptr += n;
  +                cp = ibuf;
  +                n = strlen(cp);
               }
               else {
  -                *bufptr++ = '%';
  -                if (bufptr < bufend)
  -                    *bufptr++ = c;
  +                /* any other "%X" */
  +                cp = (char *)format;
  +                n  = 2;
               }
  +            format += 2;
           }
  -        else
  -            *bufptr++ = c;
  +        else {
  +            /* plain text */
  +            cp = (char *)format;
  +            if ((format = strchr(cp, '%')) == NULL)
  +                format = strchr(cp, '\0');
  +            n = format - cp;
  +        }
  +        /* perform output operation */
  +        if (output != NULL)
  +            if ((n = output(ctx, cp, n)) == -1)
  +                break;
  +        bytes += n;
       }
  -    *bufptr = '\0';
  -    return (bufptr - buffer);
  +    return bytes;
  +}
  +
  +/* output callback function context for sa_mvsnprintf() */
  +typedef struct {
  +    char *bufptr;
  +    size_t buflen;
  +} sa_mvsnprintf_cb_t;
  +
  +/* output callback function for sa_mvsnprintf() */
  +static int sa_mvsnprintf_cb(void *_ctx, const char *buffer, size_t bufsize)
  +{
  +    sa_mvsnprintf_cb_t *ctx = (sa_mvsnprintf_cb_t *)_ctx;
  +
  +    if (bufsize > ctx->buflen)
  +        return -1;
  +    memcpy(ctx->bufptr, buffer, bufsize);
  +    ctx->bufptr += bufsize;
  +    ctx->buflen -= bufsize;
  +    return bufsize;
  +}
  +
  +/* minimal vsnprintf(3) variant which supports %{c,s,d} only */
  +static int sa_mvsnprintf(char *buffer, size_t bufsize, const char *format, va_list ap)
  +{
  +    int n;
  +    sa_mvsnprintf_cb_t ctx;
  +
  +    if (format == NULL || ap == NULL)
  +        return -1;
  +    if (buffer != NULL && bufsize == 0)
  +        return -1;
  +    if (buffer == NULL) 
  +        /* just determine output length */
  +        n = sa_mvxprintf(NULL, NULL, format, ap);
  +    else {
  +        /* perform real output */
  +        ctx.bufptr = buffer;
  +        ctx.buflen = bufsize - 1;
  +        n = sa_mvxprintf(sa_mvsnprintf_cb, &ctx, format, ap);
  +    }
  +    if (n != -1 && ctx.buflen == 0)
  +        n = -1;
  +    if (n != -1)
  +        *(ctx.bufptr) = '\0';
  +    return n;
   }
   
   /* minimal snprintf(3) variant which supports %{c,s,d} only */
  @@ -312,10 +367,6 @@
       int chars;
       va_list ap;
   
  -    /* argument sanity check(s) */
  -    if (buffer == NULL || bufsize == 0 || format == NULL)
  -        return 0;
  -
       /* pass through to va_list based variant */
       va_start(ap, format);
       chars = sa_mvsnprintf(buffer, bufsize, format, ap);
  @@ -1675,13 +1726,29 @@
       return rv;
   }
   
  +/* output callback function context for sa_writef() */
  +typedef struct {
  +    sa_t *sa;
  +    sa_rc_t rv;
  +} sa_writef_cb_t;
  +
  +/* output callback function for sa_writef() */
  +static int sa_writef_cb(void *_ctx, const char *buffer, size_t bufsize)
  +{
  +    size_t n;
  +    sa_writef_cb_t *ctx = (sa_writef_cb_t *)_ctx;
  +
  +    if ((ctx->rv = sa_write(ctx->sa, buffer, bufsize, &n)) != SA_OK)
  +        n = -1;
  +    return n;
  +}
  +
   /* write formatted string to socket (convinience function) */
   sa_rc_t sa_writef(sa_t *sa, const char *cpFmt, ...)
   {
       va_list ap;
       size_t n;
  -    char caBuf[1024];
  -    sa_rc_t rv;
  +    sa_writef_cb_t ctx;
   
       /* argument sanity check(s) */
       if (sa == NULL || cpFmt == NULL)
  @@ -1697,13 +1764,12 @@
   
       /* format string into temporary buffer */
       va_start(ap, cpFmt);
  -    n = sa_mvsnprintf(caBuf, sizeof(caBuf), cpFmt, ap);
  +    ctx.sa = sa;
  +    ctx.rv = SA_OK;
  +    n = sa_mvxprintf(sa_writef_cb, &ctx, cpFmt, ap);
       va_end(ap);
   
  -    /* write result buffer to socket */
  -    rv = sa_write(sa, caBuf, n, &n);
  -
  -    return rv;
  +    return ctx.rv;
   }
   
   /* flush write/outgoing I/O buffer */

From ossp-cvs-owner@ossp.org  Wed Oct 10 11:21:29 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9A9LSe47572; Wed, 10 Oct 2001 11:21:28 +0200 (CEST)
Date: Wed, 10 Oct 2001 11:21:28 +0200 (CEST)
Message-Id: <200110100921.f9A9LSe47572@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa TODO sa.c sa.h sa.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   10-Oct-2001 11:21:28
  Branch: HEAD                             Handle: 2001101010212700

  Modified files:
    ossp-pkg/sa             TODO sa.c sa.h sa.pod

  Log:
    Revert my idea of using an L2-style error handling also in SA, because
    this is not possible in a consistent way due to the multiple objects
    and the fact that we cannot remember anything without an object (in
    L2 an environment object will be introduced soon, so there is it is a
    different game). So we use a plain sa_error() which is now similar to
    strerror(3).

  Summary:
    Revision    Changes     Path
    1.22        +0  -2      ossp-pkg/sa/TODO
    1.28        +25 -92     ossp-pkg/sa/sa.c
    1.22        +10 -10     ossp-pkg/sa/sa.h
    1.12        +1  -1      ossp-pkg/sa/sa.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 TODO
  --- ossp-pkg/sa/TODO	2001/10/10 09:05:18	1.21
  +++ ossp-pkg/sa/TODO	2001/10/10 09:21:27	1.22
  @@ -10,8 +10,6 @@
     - inet://localhost:smtp -> inet://127.0.0.1:25
     - unix:/tmp/socket -> unix:/tmp/socket
   
  -o Use sa_errorinfo() internally everywhere where it is reasonable.
  -
   CANDO
   -----
   
  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 sa.c
  --- ossp-pkg/sa/sa.c	2001/10/10 09:05:18	1.27
  +++ ossp-pkg/sa/sa.c	2001/10/10 09:21:27	1.28
  @@ -170,9 +170,6 @@
       int              nWriteLen;        /* write buffer current length */
       int              nWriteSize;       /* write buffer current size */
       char            *cpWriteBuf;       /* write buffer memory chunk */
  -    char             szError[256];     /* error temporary buffer */
  -    char             szErrorInfo[128]; /* error additional information text */
  -    sa_rc_t          rvErrorInfo;      /* error additional information code */
       sa_syscall_tab_t scSysCall;        /* table of system calls */
   };
   
  @@ -375,88 +372,6 @@
       return chars;
   }
   
  -/* remember extra error information */
  -static sa_rc_t sa_errorinfo(sa_t *sa, sa_rc_t rv, const char *fmt, ...)
  -{
  -    va_list ap;
  -
  -    /* argument sanity check */
  -    if (sa == NULL)
  -        return SA_ERR_ARG;
  -
  -    if (rv == SA_OK && fmt == NULL) {
  -        /* reset error information */
  -        sa->szErrorInfo[0] = '\0';
  -        sa->rvErrorInfo = SA_OK;
  -    }
  -    else {
  -        /* remember error information */
  -        va_start(ap, fmt);
  -        sa_mvsnprintf(sa->szErrorInfo, sizeof(sa->szErrorInfo), fmt, ap);
  -        sa->rvErrorInfo = rv;
  -        va_end(ap);
  -    }
  -    return SA_OK;
  -}
  -
  -/* return error string */
  -sa_rc_t sa_error(sa_t *sa, sa_rc_t rv, char **str)
  -{
  -    char *sz;
  -    char *cpBuf;
  -    int nBuf;
  -    int n;
  -
  -    /* argument sanity check */
  -    if (str == NULL)
  -        return SA_ERR_ARG;
  -
  -    /* translate result value into corresponding string */
  -    if      (rv == SA_OK)      sz = "everything ok";
  -    else if (rv == SA_ERR_ARG) sz = "invalid argument";
  -    else if (rv == SA_ERR_USE) sz = "invalid use or context";
  -    else if (rv == SA_ERR_MEM) sz = "not enough memory available";
  -    else if (rv == SA_ERR_MTC) sz = "matching operation failed";
  -    else if (rv == SA_ERR_EOF) sz = "communication end";
  -    else if (rv == SA_ERR_TMT) sz = "communication timeout";
  -    else if (rv == SA_ERR_SYS) sz = "operating system error";
  -    else if (rv == SA_ERR_INT) sz = "internal error";
  -    else
  -        return SA_ERR_ARG;
  -
  -    /* if no context is available we have to stop */
  -    if (sa == NULL) {
  -        *str = sz;
  -        return SA_OK;
  -    }
  -
  -    /* start at begin of buffer */
  -    cpBuf = sa->szError;
  -    nBuf  = sizeof(sa->szError);
  -    n = sa_msnprintf(cpBuf, nBuf, "%s", sz);
  -    cpBuf += n;
  -    nBuf  -= n;
  -
  -    /* optionally annotate with error information */
  -    if (rv == sa->rvErrorInfo && sa->szErrorInfo[0] != '\0') {
  -        n = sa_msnprintf(cpBuf, nBuf, "; %s", sa->szErrorInfo);
  -        cpBuf += n;
  -        nBuf  -= n;
  -        sa_errorinfo(sa, SA_OK, NULL);
  -    }
  -
  -    /* optionally annotate with operating system error information */
  -    if (rv == SA_ERR_SYS) {
  -        n = sa_msnprintf(cpBuf, nBuf, "; %s (%d)", strerror(errno), errno);
  -        cpBuf += n;
  -        nBuf  -= n;
  -    }
  -
  -    /* return pointer to internal buffer */
  -    *str = sa->szError;
  -    return SA_OK;
  -}
  -
   /* create address object */
   sa_rc_t sa_addr_create(sa_addr_t **saap)
   {
  @@ -639,12 +554,14 @@
                   sf = AF_INET6;
               }
   #endif
  +            else
  +                return SA_ERR_ARG;
           }
  +        else
  +            return SA_ERR_ARG;
       }
  -
  -    /* make sure result variables are set */
  -    if (sa == NULL || sl == 0 || sf == 0)
  -        return SA_ERR_INT;
  +    else
  +        return SA_ERR_ARG;
   
       /* fill-in result address structure */
       if (saa->saBuf != NULL)
  @@ -965,9 +882,6 @@
       sa->nWriteLen      = 0;
       sa->nWriteSize     = 0;
       sa->cpWriteBuf     = NULL;
  -    sa->szError[0]     = '\0';
  -    sa->szErrorInfo[0] = '\0';
  -    sa->rvErrorInfo    = SA_OK;
   
       /* init timeval object attributes */
       for (i = 0; i < (sizeof(sa->tvTimeout)/sizeof(sa->tvTimeout[0])); i++) {
  @@ -1950,5 +1864,24 @@
           *bufdone = n;
   
       return SA_OK;
  +}
  +
  +/* return error string */
  +char *sa_error(sa_rc_t rv)
  +{
  +    char *sz;
  +
  +    /* translate result value into corresponding string */
  +    if      (rv == SA_OK)      sz = "Everything Ok";
  +    else if (rv == SA_ERR_ARG) sz = "Invalid Argument";
  +    else if (rv == SA_ERR_USE) sz = "Invalid Use Or Context";
  +    else if (rv == SA_ERR_MEM) sz = "Not Enough Memory";
  +    else if (rv == SA_ERR_MTC) sz = "Matching Failed";
  +    else if (rv == SA_ERR_EOF) sz = "End Of Communication";
  +    else if (rv == SA_ERR_TMT) sz = "Communication Timeout";
  +    else if (rv == SA_ERR_SYS) sz = "Operating System Error";
  +    else if (rv == SA_ERR_INT) sz = "Internal Error";
  +    else                       sz = "Invalid Result Code";
  +    return sz;
   }
   
  Index: ossp-pkg/sa/sa.h
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 sa.h
  --- ossp-pkg/sa/sa.h	2001/10/10 07:42:26	1.21
  +++ ossp-pkg/sa/sa.h	2001/10/10 09:21:27	1.22
  @@ -104,15 +104,15 @@
   
   /* return codes */
   typedef enum {
  -    SA_OK,      /* everything ok               */
  -    SA_ERR_ARG, /* invalid argument            */
  -    SA_ERR_USE, /* invalid use or context      */
  -    SA_ERR_MEM, /* not enough memory available */
  -    SA_ERR_MTC, /* matching operation failed   */
  -    SA_ERR_EOF, /* communication end           */
  -    SA_ERR_TMT, /* communication timeout       */
  -    SA_ERR_SYS, /* operating system error      */
  -    SA_ERR_INT  /* internal error              */
  +    SA_OK,      /* Everything Ok          */
  +    SA_ERR_ARG, /* Invalid Argument       */
  +    SA_ERR_USE, /* Invalid Use Or Context */
  +    SA_ERR_MEM, /* Not Enough Memory      */
  +    SA_ERR_MTC, /* Matching Failed        */
  +    SA_ERR_EOF, /* End Of Communication   */
  +    SA_ERR_TMT, /* Communication Timeout  */
  +    SA_ERR_SYS, /* Operating System Error */
  +    SA_ERR_INT  /* Internal Error         */
   } sa_rc_t;
   
   /* list of timeouts */
  @@ -184,7 +184,7 @@
   sa_rc_t sa_send         (sa_t *sa, const char *buf, size_t buflen, size_t *bufdone, sa_addr_t *raddr);
   
   /* error handling operations */
  -sa_rc_t sa_error        (sa_t *sa, sa_rc_t rv, char **str);
  +char   *sa_error        (sa_rc_t rv);
   
   /* cleanup */
   #if defined(HAVE_CONFIG_H) && !defined(HAVE_SOCKLEN_T)
  Index: ossp-pkg/sa/sa.pod
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 sa.pod
  --- ossp-pkg/sa/sa.pod	2001/10/10 07:45:37	1.11
  +++ ossp-pkg/sa/sa.pod	2001/10/10 09:21:27	1.12
  @@ -284,7 +284,7 @@
   
   =over 4
   
  -=item sa_rc_t B<sa_error>(sa_t *I<sa>, sa_rc_t I<rv>, char **I<str>);
  +=item char *B<sa_error>(sa_rc_t I<rv>);
   
   =back
   

From ossp-cvs-owner@ossp.org  Wed Oct 10 17:01:58 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9AF1vg90496; Wed, 10 Oct 2001 17:01:57 +0200 (CEST)
Date: Wed, 10 Oct 2001 17:01:57 +0200 (CEST)
Message-Id: <200110101501.f9AF1vg90496@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa Makefile.in sa_test.c ts.c ts.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   10-Oct-2001 17:01:57
  Branch: HEAD                             Handle: 2001101016015600

  Added files:
    ossp-pkg/sa             ts.c ts.h
  Modified files:
    ossp-pkg/sa             Makefile.in sa_test.c

  Log:
    Implemented a new sub-library OSSP TS (Test Suite) and use this new
    beast for the first cut of an OSSP SA test suite. The TS library
    produces nice test suite reports like this one (for a failed test
    suite):
    
    |  Test Suite: OSSP SA (Socket Abstraction Library)
    |  __________________________________________________________________
    |
    |  Test: socket address abstraction .............................. OK
    |  Test: socket abstraction .................................. FAILED
    |        Ops, 1/1 checks failed! Detailed report follows:
    |        Check: testerliX [sa_test.c:43]
    |               Log: sorry [sa_test.c:44]
    |  __________________________________________________________________
    |
    |  Test Summary: 2 tests (1 ok, 1 failed), 5 checks (4 ok, 1 failed)
    |  Test Suite: FAILED (Test Suite Failed)
    
    Or this one (for a successfull test suite):
    
    |  Test Suite: OSSP SA (Socket Abstraction Library)
    |  __________________________________________________________________
    |
    |  Test: socket address abstraction .............................. OK
    |  Test: socket abstraction ...................................... OK
    |  __________________________________________________________________
    |
    |  Test Summary: 2 tests (2 ok, 0 failed), 5 checks (5 ok, 0 failed)
    |  Test Suite: OK (Test Suite Successfully)

  Summary:
    Revision    Changes     Path
    1.8         +2  -2      ossp-pkg/sa/Makefile.in
    1.8         +36 -76     ossp-pkg/sa/sa_test.c
    1.1         +463 -0     ossp-pkg/sa/ts.c
    1.1         +62 -0      ossp-pkg/sa/ts.h
  ____________________________________________________________________________

  Index: ossp-pkg/sa/Makefile.in
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 Makefile.in
  --- ossp-pkg/sa/Makefile.in	2001/10/08 15:01:26	1.7
  +++ ossp-pkg/sa/Makefile.in	2001/10/10 15:01:56	1.8
  @@ -51,7 +51,7 @@
   LIB_OBJS    = sa.lo
   
   TST_NAME    = sa_test
  -TST_OBJS    = sa_test.o
  +TST_OBJS    = sa_test.o ts.o
   
   .SUFFIXES:
   .SUFFIXES: .c .o .lo
  @@ -59,7 +59,7 @@
   all: $(LIB_NAME) $(TST_NAME)
   
   .c.o:
  -	@$(CC) $(CPPFLAGS) $(CFLAGS) -c $<
  +	$(CC) $(CPPFLAGS) $(CFLAGS) -c $<
   
   .c.lo:
   	@$(LIBTOOL) --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS) -c $<
  Index: ossp-pkg/sa/sa_test.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 sa_test.c
  --- ossp-pkg/sa/sa_test.c	2001/10/08 15:08:46	1.7
  +++ ossp-pkg/sa/sa_test.c	2001/10/10 15:01:56	1.8
  @@ -35,90 +35,50 @@
   #include <sys/utsname.h>
   #include <unistd.h>
   
  +#include "ts.h"
   #include "sa.h"
   
  -#define DIE_MARK \
  -    __FILE__, __LINE__
  -
  -static void die(const char *file, int line, char *fmt, ...)
  +TST_FUNC(test_sa)
   {
  -    va_list ap;
  +}
   
  -    va_start(ap, fmt);
  -    fprintf(stderr, "%s:%d:ERROR: ", file, line);
  -    vfprintf(stderr, fmt, ap);
  -    fprintf(stderr, "\n");
  -    va_end(ap);
  -    exit(1);
  +TST_FUNC(test_saa)
  +{
  +    sa_addr_t *saa;
  +    sa_rc_t rv;
  +    char *cp1;
  +    char *cp2;
  +
  +    tst_check(TST, "sa_addr_create");
  +    if ((rv = sa_addr_create(&saa)) != SA_OK)
  +        tst_fail(tst, "rv=%d (%s)", rv, sa_error(rv));
  +    
  +    tst_check(TST, "sa_addr_u2a");
  +    cp1 = "inet://127.0.0.1:12345";
  +    if ((rv = sa_addr_u2a(saa, cp1)) != SA_OK)
  +        tst_fail(TST, "rv=%d (%s)", rv, sa_error(rv));
  +
  +    tst_check(TST, "sa_addr_a2u");
  +    if ((rv = sa_addr_a2u(saa, &cp2)) != SA_OK)
  +        tst_fail(TST, "rv=%d (%s)", rv, sa_error(rv));
  +    if (strcmp(cp1, cp2) != 0)
  +        tst_fail(TST, "import \"%s\" <-> export \"%s\"", cp1, cp2);
  +
  +    tst_check(tst, "sa_addr_destroy");
  +    if ((rv = sa_addr_destroy(saa)) != SA_OK)
  +        tst_fail(TST, "rv=%d (%s)", rv, sa_error(rv));
   }
   
  -int main(int argc, char *argv[]) 
  +int main(int argc, char *argv[])
   {
  -    sa_addr_t *ra;
  -    sa_addr_t *la;
  -    sa_t *sa;
  -    char caBuf[1024];
  -    int nBuf;
  -    char caTime[15+1];
  -    time_t now;
  -    struct tm *tm;
  -    struct utsname uts;
  -    char *cp;
  -    char caTag[32+1];
  -    char *cpHost;
  +    ts_t *ts;
       int n;
  -
  -    /* create remote address */
  -    if (sa_addr_create(&ra) != SA_OK)
  -        die(DIE_MARK, "sa_addr_create (ra)");
  -    if (sa_addr_u2a(ra, "inet://141.1.129.1:514") != SA_OK)
  -        die(DIE_MARK, "sa_addr_u2a (ra)");
  -
  -    /* create local address */
  -    if (sa_addr_create(&la) != SA_OK)
  -        die(DIE_MARK, "sa_addr_create (la)");
  -    if (sa_addr_u2a(la, "inet://0.0.0.0:0") != SA_OK)
  -        die(DIE_MARK, "sa_addr_u2a (la)");
  -
  -    /* create datagram socket */
  -    if (sa_create(&sa) != SA_OK)
  -        die(DIE_MARK, "sa_create");
  -    if (sa_type(sa, SA_TYPE_DATAGRAM) != SA_OK)
  -        die(DIE_MARK, "sa_type");
  -
  -    /* bind socket to local address */
  -    if (sa_bind(sa, la) != SA_OK)
  -        die(DIE_MARK, "sa_bind");
  -
  -    /* RFC3164: The BSD syslog Protocol; C. Lonvick; August 2001. */
  -    now = time(NULL);
  -    tm = localtime(&now);
  -    strftime(caTime, sizeof(caTime), "%b %e %H:%M:%S", tm);
  -    if (uname(&uts) == -1)
  -        die(DIE_MARK, "uname");
  -    cpHost = strdup(uts.nodename);
  -    if ((cp = strchr(cpHost, '.')) != NULL)
  -        *cp = '\0';
  -    strcpy(caTag, "progname[12]: ");
  -    if (strlen(caTag) > 32)
  -        caTag[32] = '\0';
  -    sprintf(caBuf, "<16>%s %s %s[%ld]: %s", caTime, cpHost, 
  -            argv[0], (long)getpid(), "test for Internet Datagram socket");
  -    fprintf(stderr, "Send to syslog: \"%s\"\n", caBuf);
  -
  -    /* send message to syslogd(8) */
  -    nBuf = strlen(caBuf);
  -    if (sa_send(sa, caBuf, nBuf, (size_t *)&n, ra) != SA_OK)
  -        die(DIE_MARK, "sa_writeto");
  -
  -    /* destroy socket and address objects */
  -    if (sa_destroy(sa) != SA_OK)
  -        die(DIE_MARK, "sa_destroy");
  -    if (sa_addr_destroy(la) != SA_OK)
  -        die(DIE_MARK, "sa_addr_destroy (la)");
  -    if (sa_addr_destroy(ra) != SA_OK)
  -        die(DIE_MARK, "sa_addr_destroy (ra)");
   
  -    return 0;
  +    ts = ts_new("OSSP SA (Socket Abstraction Library)");
  +    ts_test(ts, test_saa, "socket address abstraction");
  +    ts_test(ts, test_sa, "socket abstraction");
  +    n = ts_run(ts);
  +    ts_free(ts);
  +    return n;
   }
   
  Index: ossp-pkg/sa/ts.c
  ============================================================
  $ cvs update -p -r1.1 ts.c
  /*
  **  TS - OSSP Test Suite Library
  **  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP TS, a test suite library which
  **  can be found at http://www.ossp.org/pkg/ts/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  ts.c: test suite library
  */
  
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  #include <stdarg.h>
  
  #include "ts.h"
  
  /* embedded ring data structure library */
  #define RING_ENTRY(elem) \
      struct { elem *next; elem *prev; }
  #define RING_HEAD(elem) \
      struct { elem *next; elem *prev; }
  #define RING_SENTINEL(hp, elem, link) \
      (elem *)((char *)(hp) - ((size_t)(&((elem *)0)->link)))
  #define RING_FIRST(hp) \
      (hp)->next
  #define RING_LAST(hp) \
      (hp)->prev
  #define RING_NEXT(ep, link) \
      (ep)->link.next
  #define RING_PREV(ep, link) \
      (ep)->link.prev
  #define RING_INIT(hp, elem, link) \
      do { RING_FIRST((hp)) = RING_SENTINEL((hp), elem, link); \
           RING_LAST((hp))  = RING_SENTINEL((hp), elem, link); } while (0)
  #define RING_EMPTY(hp, elem, link) \
      (RING_FIRST((hp)) == RING_SENTINEL((hp), elem, link))
  #define RING_ELEM_INIT(ep, link) \
      do { RING_NEXT((ep), link) = (ep); \
           RING_PREV((ep), link) = (ep); } while (0)
  #define RING_SPLICE_BEFORE(lep, ep1, epN, link) \
      do { RING_NEXT((epN), link) = (lep); \
           RING_PREV((ep1), link) = RING_PREV((lep), link); \
           RING_NEXT(RING_PREV((lep), link), link) = (ep1); \
           RING_PREV((lep), link) = (epN); } while (0)
  #define RING_SPLICE_TAIL(hp, ep1, epN, elem, link) \
      RING_SPLICE_BEFORE(RING_SENTINEL((hp), elem, link), (ep1), (epN), link)
  #define RING_INSERT_TAIL(hp, nep, elem, link) \
      RING_SPLICE_TAIL((hp), (nep), (nep), elem, link)
  #define RING_FOREACH(ep, hp, elem, link) \
      for ((ep)  = RING_FIRST((hp)); \
           (ep) != RING_SENTINEL((hp), elem, link); \
           (ep)  = RING_NEXT((ep), link))
  
  /* test suite test log */
  struct tstl_st;
  typedef struct tstl_st tstl_t;
  struct tstl_st {
      RING_ENTRY(tstl_t) next;
      char              *text;
      const char        *file;
      int                line;
  };
  
  /* test suite test check */
  struct tstc_st;
  typedef struct tstc_st tstc_t;
  struct tstc_st {
      RING_ENTRY(tstc_t) next;
      char              *title;
      int                failed;
      const char        *file;
      int                line;
      RING_HEAD(tstl_t)  logs;
  };
  
  /* test suite test */
  struct tst_st {
      RING_ENTRY(tst_t)  next;
      char              *title;
      tst_func_t         func;
      const char        *file;
      int                line;
      RING_HEAD(tstc_t)  checks;
  };
  
  /* test suite */
  struct ts_st {
      char              *title;
      RING_HEAD(tst_t)   tests;
  };
  
  /* minimal output-independent vprintf(3) variant which supports %{c,s,d,%} only */
  static int ts_mvxprintf(char *buffer, size_t bufsize, const char *format, va_list ap)
  {
      /* sufficient integer buffer: <available-bits> x log_10(2) + safety */
      char ibuf[((sizeof(int)*8)/3)+10]; 
      char *cp;
      char c;
      int d;
      int n;
      int bytes;
  
      if (format == NULL || ap == NULL)
          return -1;
      bytes = 0;
      while (*format != '\0') {
          if (*format == '%') {
              c = *(format+1);
              if (c == '%') {
                  /* expand "%%" */
                  cp = &c;
                  n = sizeof(char);
              }
              else if (c == 'c') {
                  /* expand "%c" */
                  c = (char)va_arg(ap, int);
                  cp = &c;
                  n = sizeof(char);
              }
              else if (c == 's') {
                  /* expand "%s" */
                  if ((cp = (char *)va_arg(ap, char *)) == NULL)
                      cp = "(null)";
                  n = strlen(cp);
              }
              else if (c == 'd') {
                  /* expand "%d" */
                  d = (int)va_arg(ap, int);
  #ifdef HAVE_SNPRINTF
                  snprintf(ibuf, sizeof(ibuf), "%d", d); /* explicitly secure */
  #else
                  sprintf(ibuf, "%d", d);                /* implicitly secure */
  #endif
                  cp = ibuf;
                  n = strlen(cp);
              }
              else {
                  /* any other "%X" */
                  cp = (char *)format;
                  n  = 2;
              }
              format += 2;
          }
          else {
              /* plain text */
              cp = (char *)format;
              if ((format = strchr(cp, '%')) == NULL)
                  format = strchr(cp, '\0');
              n = format - cp;
          }
          /* perform output operation */
          if (buffer != NULL) {
              if (n > bufsize)
                  return -1;
              memcpy(buffer, cp, n);
              buffer  += n;
              bufsize -= n;
          }
          bytes += n;
      }
      /* nul-terminate output */
      if (buffer != NULL) {
          if (bufsize == 0)
              return -1;
          *buffer = '\0';
      }
      return bytes;
  }
  
  /* minimal vasprintf(3) variant which supports %{c,s,d} only */
  static char *ts_mvasprintf(const char *format, va_list ap)
  {
      char *buffer;
      int n;
      va_list ap2;
  
      if (format == NULL || ap == NULL)
          return NULL;
      ap2 = ap;
      if ((n = ts_mvxprintf(NULL, 0, format, ap)) == -1)
          return NULL;
      if ((buffer = (char *)malloc(n+1)) == NULL)
          return NULL;
      ts_mvxprintf(buffer, n+1, format, ap2);
      return buffer;
  }
  
  /* minimal asprintf(3) variant which supports %{c,s,d} only */
  static char *ts_masprintf(const char *format, ...)
  {
      va_list ap;
      char *cp;
  
      va_start(ap, format);
      cp = ts_mvasprintf(format, ap);
      va_end(ap);
      return cp;
  }
  
  /* create test suite */
  ts_t *ts_new(const char *fmt, ...)
  {
      ts_t *ts;
      va_list ap;
  
      if ((ts = (ts_t *)malloc(sizeof(ts_t))) == NULL)
          return NULL;
      va_start(ap, fmt);
      ts->title = ts_mvasprintf(fmt, ap);
      RING_INIT(&ts->tests, tst_t, next);
      va_end(ap);
      return ts;
  }
  
  /* add test case to test suite */
  void ts_test(ts_t *ts, tst_func_t func, const char *fmt, ...)
  {
      tst_t *tst;
      va_list ap;
  
      if (ts == NULL || func == NULL || fmt == NULL)
          return;
      if ((tst = (tst_t *)malloc(sizeof(tst_t))) == NULL)
          return;
      RING_ELEM_INIT(tst, next);
      va_start(ap, fmt);
      tst->title = ts_mvasprintf(fmt, ap);
      va_end(ap);
      tst->func = func;
      tst->file = NULL;
      tst->line = 0;
      RING_INIT(&tst->checks, tstc_t, next);
      RING_INSERT_TAIL(&ts->tests, tst, tst_t, next);
      return;
  }
  
  /* run test suite */
  int ts_run(ts_t *ts)
  {
      tst_t *tst;
      tstc_t *tstc;
      tstl_t *tstl;
      int total_tests, total_tests_failed;
      int total_checks, total_checks_failed;
      int test_checks, test_checks_failed;
      const char *file;
      int line;
      char *cp;
  
      if (ts == NULL)
          return 0;
  
      /* init total counters */
      total_tests         = 0;
      total_tests_failed  = 0;
      total_checks        = 0;
      total_checks_failed = 0;
  
      fprintf(stdout, "\n");
      fprintf(stdout, " Test Suite: %s\n", ts->title);
      fprintf(stdout, " __________________________________________________________________\n");
      fprintf(stdout, "\n");
      fflush(stdout);
  
      /* iterate through all test cases */
      RING_FOREACH(tst, &ts->tests, tst_t, next) {
          cp = ts_masprintf(" Test: %s ........................................"
                                      "........................................", tst->title);
          cp[60] = '\0';
          fprintf(stdout, "%s", cp);
          free(cp);
          fflush(stdout);
  
          /* init test case counters */
          test_checks        = 0;
          test_checks_failed = 0;
  
          /* run the test case function */
          tst->func(tst);
  
          /* iterate through all performed checks to determine status */
          RING_FOREACH(tstc, &tst->checks, tstc_t, next) {
              test_checks++;
              if (tstc->failed)
                  test_checks_failed++;
          }
  
          if (test_checks_failed > 0) {
              /* some checks failed, so do detailed reporting of test case */
              fprintf(stdout, " FAILED\n");
              fprintf(stdout, "       Ops, %d/%d checks failed! Detailed report follows:\n",
                      test_checks_failed, test_checks);
              RING_FOREACH(tstc, &tst->checks, tstc_t, next) {
                  file = (tstc->file != NULL ? tstc->file : tst->file);
                  line = (tstc->line != 0    ? tstc->line : tst->line);
                  if (file != NULL)
                      fprintf(stdout, "       Check: %sX [%s:%d]\n", tstc->title, file, line);
                  else
                      fprintf(stdout, "       Check: %s\n", tstc->title);
                  RING_FOREACH(tstl, &tstc->logs, tstl_t, next) {
                      file = (tstl->file != NULL ? tstl->file : file);
                      line = (tstl->line != 0    ? tstl->line : line);
                      if (file != NULL)
                          fprintf(stdout, "              Log: %s [%s:%d]\n", tstl->text, file, line);
                      else
                          fprintf(stdout, "              Log: %s\n", tstl->text);
                  }
              }
          }
          else {
              /* test case ran successfully */
              fprintf(stdout, ".... OK\n");
          }
          fflush(stdout);
  
          /* accumulate counters */
          total_checks += test_checks;
          total_tests++;
          if (test_checks_failed > 0) {
              total_checks_failed += test_checks_failed;
              total_tests_failed++;
          }
      }
  
      /* print test suite summary */
      fprintf(stdout, " __________________________________________________________________\n");
      fprintf(stdout, "\n");
      fprintf(stdout, " Test Summary: %d tests (%d ok, %d failed), %d checks (%d ok, %d failed)\n", 
              total_tests, (total_tests - total_tests_failed), total_tests_failed, 
              total_checks, (total_checks - total_checks_failed), total_checks_failed); 
      if (total_tests_failed > 0)
          fprintf(stdout, " Test Suite: FAILED (Test Suite Failed)\n");
      else
          fprintf(stdout, " Test Suite: OK (Test Suite Passed Successfully)\n");
      fprintf(stdout, "\n");
      fflush(stdout);
  
      return total_checks_failed;
  }
  
  /* destroy test suite */
  void ts_free(ts_t *ts)
  {
      tst_t *tst;
      tstc_t *tstc;
      tstl_t *tstl;
  
      if (ts == NULL)
          return;
      RING_FOREACH(tst, &ts->tests, tst_t, next) {
          RING_FOREACH(tstc, &tst->checks, tstc_t, next) {
              RING_FOREACH(tstl, &tstc->logs, tstl_t, next) {
                  free(tstl->text);
              }
              free(tstc->title);
              free(tstc);
          }
          free(tst->title);
          free(tst);
      }
      free(tst->title);
      free(ts);
      return;
  }
  
  /* annotate test case with file name and line number */
  tst_t *tst_ctx(tst_t *tst, const char *file, int line)
  {
      if (tst != NULL && file != NULL) {
          tst->file = file;
          tst->line = line;
      }
      return tst;
  }
  
  /* annotate test case with check */
  void tst_check(tst_t *tst, const char *fmt, ...)
  {
      tstc_t *tstc;
      va_list ap;
  
      if (tst == NULL || fmt == NULL)
          return;
      if ((tstc = (tstc_t *)malloc(sizeof(tstc_t))) == NULL)
          return;
      va_start(ap, fmt);
      RING_ELEM_INIT(tstc, next);
      tstc->title = ts_mvasprintf(fmt, ap);
      tstc->failed = 0;
      tstc->file = tst->file;
      tstc->line = tst->line;
      RING_INIT(&tstc->logs, tstl_t, next);
      RING_INSERT_TAIL(&tst->checks, tstc, tstc_t, next);
      va_end(ap);
      return;
  }
  
  /* annotate test case with log message and failure */
  void tst_fail(tst_t *tst, const char *fmt, ...)
  {
      tstc_t *tstc;
      tstl_t *tstl;
      va_list ap;
  
      if (tst == NULL || fmt == NULL)
          return;
      if ((tstl = (tstl_t *)malloc(sizeof(tstl_t))) == NULL)
          return;
      va_start(ap, fmt);
      tstl->text = ts_mvasprintf(fmt, ap);
      tstl->file = tst->file;
      tstl->line = tst->line;
      RING_ELEM_INIT(tstl, next);
      tstc = RING_LAST(&tst->checks);
      RING_INSERT_TAIL(&tstc->logs, tstl, tstl_t, next);
      tstc->failed = 1;
      va_end(ap);
      return;
  }
  
  /* annotate test case with log message only */
  void tst_log(tst_t *tst, const char *fmt, ...)
  {
      tstc_t *tstc;
      tstl_t *tstl;
      va_list ap;
  
      if (tst == NULL || fmt == NULL)
          return;
      if ((tstl = (tstl_t *)malloc(sizeof(tstl_t))) == NULL)
          return;
      va_start(ap, fmt);
      tstl->text = ts_mvasprintf(fmt, ap);
      tstl->file = tst->file;
      tstl->line = tst->line;
      RING_ELEM_INIT(tstl, next);
      tstc = RING_LAST(&tst->checks);
      RING_INSERT_TAIL(&tstc->logs, tstl, tstl_t, next);
      va_end(ap);
      return;
  }
  
  Index: ossp-pkg/sa/ts.h
  ============================================================
  $ cvs update -p -r1.1 ts.h
  /*
  **  TS - OSSP Test Suite Library
  **  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP TS, a test suite library which
  **  can be found at http://www.ossp.org/pkg/ts/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  ts.h: test suite library API
  */
  
  #ifndef _TS_H_
  #define _TS_H_
  
  struct ts_st;
  typedef struct ts_st ts_t;
  
  struct tst_st;
  typedef struct tst_st tst_t;
  
  typedef void (*tst_func_t)(tst_t *);
  
  #define TST_FUNC(name) \
      static void name(tst_t *tst)
  
  #define TST_CTX(tst) \
      tst_ctx(tst, __FILE__, __LINE__)
  
  #define TST \
      TST_CTX(tst)
  
  ts_t   *ts_new    (const char *fmt, ...);
  void    ts_test   (ts_t *ts, tst_func_t func, const char *fmt, ...);
  int     ts_run    (ts_t *ts);
  void    ts_free   (ts_t *ts);
  
  tst_t  *tst_ctx   (tst_t *tst, const char *file, int line);
  void    tst_check (tst_t *tst, const char *fmt, ...);
  void    tst_fail  (tst_t *tst, const char *fmt, ...);
  void    tst_log   (tst_t *tst, const char *fmt, ...);
  
  #endif /* _TS_H_ */
  

From ossp-cvs-owner@ossp.org  Wed Oct 10 17:11:43 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9AFBgr91432; Wed, 10 Oct 2001 17:11:42 +0200 (CEST)
Date: Wed, 10 Oct 2001 17:11:42 +0200 (CEST)
Message-Id: <200110101511.f9AFBgr91432@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa ts.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   10-Oct-2001 17:11:42
  Branch: HEAD                             Handle: 2001101016114200

  Modified files:
    ossp-pkg/sa             ts.c

  Log:
    fix texts

  Summary:
    Revision    Changes     Path
    1.2         +3  -3      ossp-pkg/sa/ts.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/ts.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 ts.c
  --- ossp-pkg/sa/ts.c	2001/10/10 15:01:56	1.1
  +++ ossp-pkg/sa/ts.c	2001/10/10 15:11:42	1.2
  @@ -315,7 +315,7 @@
                   file = (tstc->file != NULL ? tstc->file : tst->file);
                   line = (tstc->line != 0    ? tstc->line : tst->line);
                   if (file != NULL)
  -                    fprintf(stdout, "       Check: %sX [%s:%d]\n", tstc->title, file, line);
  +                    fprintf(stdout, "       Check: %s [%s:%d]\n", tstc->title, file, line);
                   else
                       fprintf(stdout, "       Check: %s\n", tstc->title);
                   RING_FOREACH(tstl, &tstc->logs, tstl_t, next) {
  @@ -350,9 +350,9 @@
               total_tests, (total_tests - total_tests_failed), total_tests_failed, 
               total_checks, (total_checks - total_checks_failed), total_checks_failed); 
       if (total_tests_failed > 0)
  -        fprintf(stdout, " Test Suite: FAILED (Test Suite Failed)\n");
  +        fprintf(stdout, " Test Suite: FAILED\n");
       else
  -        fprintf(stdout, " Test Suite: OK (Test Suite Passed Successfully)\n");
  +        fprintf(stdout, " Test Suite: OK\n");
       fprintf(stdout, "\n");
       fflush(stdout);
   

From ossp-cvs-owner@ossp.org  Wed Oct 10 17:40:02 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9AFe1494467; Wed, 10 Oct 2001 17:40:01 +0200 (CEST)
Date: Wed, 10 Oct 2001 17:40:01 +0200 (CEST)
Message-Id: <200110101540.f9AFe1494467@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   10-Oct-2001 17:40:01
  Branch: HEAD                             Handle: 2001101016400000

  Modified files:
    ossp-pkg/sa             sa.c

  Log:
    complain on 'unix:' (no path)

  Summary:
    Revision    Changes     Path
    1.29        +2  -0      ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 sa.c
  --- ossp-pkg/sa/sa.c	2001/10/10 09:21:27	1.28
  +++ ossp-pkg/sa/sa.c	2001/10/10 15:40:00	1.29
  @@ -462,6 +462,8 @@
   
           /* fill-in socket address structure */
           n = strlen(cpPath);
  +        if (n == 0)
  +            return SA_ERR_ARG;
           if ((n+1) > sizeof(un.sun_path))
               return SA_ERR_MEM;
           if (cpPath[0] != '/') {

From ossp-cvs-owner@ossp.org  Wed Oct 10 17:50:32 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9AFoVY95624; Wed, 10 Oct 2001 17:50:31 +0200 (CEST)
Date: Wed, 10 Oct 2001 17:50:31 +0200 (CEST)
Message-Id: <200110101550.f9AFoVY95624@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   10-Oct-2001 17:50:31
  Branch: HEAD                             Handle: 2001101016503100

  Modified files:
    ossp-pkg/sa             sa_test.c

  Log:
    Create a real-life test suite for the socket address abstraction part.

  Summary:
    Revision    Changes     Path
    1.9         +84 -23     ossp-pkg/sa/sa_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa_test.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 sa_test.c
  --- ossp-pkg/sa/sa_test.c	2001/10/10 15:01:56	1.8
  +++ ossp-pkg/sa/sa_test.c	2001/10/10 15:50:31	1.9
  @@ -38,35 +38,96 @@
   #include "ts.h"
   #include "sa.h"
   
  -TST_FUNC(test_sa)
  +TST_FUNC(test_saa_impexp)
   {
  -}
  -
  -TST_FUNC(test_saa)
  -{
       sa_addr_t *saa;
       sa_rc_t rv;
  -    char *cp1;
  -    char *cp2;
  +    char *cp;
  +    int i;
  +    struct {
  +        char *in;
  +        sa_rc_t rv;
  +        char *out;
  +    } table[] = {
  +        /* positive tests */
  +        { "inet://0.0.0.0:0", SA_OK, "inet://0.0.0.0:0" }, 
  +        { "inet://127.0.0.1:514", SA_OK, "inet://127.0.0.1:514" },
  +        { "inet://localhost:syslog#udp", SA_OK, "inet://127.0.0.1:514" }, 
  +        { "inet://localhost:smtp", SA_OK, "inet://127.0.0.1:25" },
  +        { "unix:/tmp/socket", SA_OK, "unix:/tmp/socket" },
  +        /* negative tests */
  +        { "inet:", SA_ERR_ARG, NULL },
  +        { "inet://1.2.3.4.5:0", SA_ERR_ARG, NULL },
  +        { "inet://just-hostname", SA_ERR_ARG, NULL },
  +        { "unix:", SA_ERR_ARG, NULL }
  +    };
   
       tst_check(TST, "sa_addr_create");
       if ((rv = sa_addr_create(&saa)) != SA_OK)
  -        tst_fail(tst, "rv=%d (%s)", rv, sa_error(rv));
  -    
  -    tst_check(TST, "sa_addr_u2a");
  -    cp1 = "inet://127.0.0.1:12345";
  -    if ((rv = sa_addr_u2a(saa, cp1)) != SA_OK)
  -        tst_fail(TST, "rv=%d (%s)", rv, sa_error(rv));
  -
  -    tst_check(TST, "sa_addr_a2u");
  -    if ((rv = sa_addr_a2u(saa, &cp2)) != SA_OK)
  -        tst_fail(TST, "rv=%d (%s)", rv, sa_error(rv));
  -    if (strcmp(cp1, cp2) != 0)
  -        tst_fail(TST, "import \"%s\" <-> export \"%s\"", cp1, cp2);
  -
  +        tst_fail(TST, "sa_addr_create -> %d[%s] (expected %d[%s])", 
  +                 rv, sa_error(rv), SA_OK, sa_error(SA_OK));
  +    for (i = 0; i < sizeof(table)/sizeof(table[0]); i++) {
  +        tst_check(TST, "sa_addr_u2a(\"%s\")", table[i].in);
  +        if ((rv = sa_addr_u2a(saa, table[i].in)) != table[i].rv)
  +            tst_fail(TST, "sa_addr_a2u -> %d[%s] (expected %d[%s])",
  +                     rv, sa_error(rv), table[i].rv, sa_error(table[i].rv));
  +        tst_check(TST, "sa_addr_a2u");
  +        if ((rv = sa_addr_a2u(saa, &cp)) != SA_OK)
  +            tst_fail(TST, "sa_addr_u2a -> %d[%s] (expected %d[%s])",
  +                     rv, sa_error(rv), SA_OK, sa_error(SA_OK));
  +        if (table[i].rv == SA_OK)
  +            if (strcmp(cp, table[i].out) != 0)
  +                tst_fail(TST, "sa_addr_a2u -> \"%s\" (expected \"%s\")", cp, table[i].out);
  +    }
       tst_check(tst, "sa_addr_destroy");
       if ((rv = sa_addr_destroy(saa)) != SA_OK)
  -        tst_fail(TST, "rv=%d (%s)", rv, sa_error(rv));
  +        tst_fail(TST, "sa_addr_destroy -> %d[%s] (expected %d[%s])", 
  +                 rv, sa_error(rv), SA_OK, sa_error(SA_OK));
  +}
  +
  +TST_FUNC(test_saa_match)
  +{
  +    sa_addr_t *saa1;
  +    sa_addr_t *saa2;
  +    sa_rc_t rv;
  +    int i;
  +    struct {
  +        char *in;
  +        char *acl;
  +        int prefixlen;
  +        sa_rc_t rv;
  +    } table[] = {
  +        { "unix:/foo/bar", "unix:/foo/bar", -1, SA_OK },
  +        { "unix:/foo/bar", "unix:/foo/bar", 0, SA_OK },
  +        { "unix:/foo/bar", "unix:/foo", 4, SA_OK },
  +        { "unix:/foo/bar", "unix:/foo/quux", 4, SA_OK },
  +        { "unix:/foo/bar", "unix:/baz/quux", -1, SA_ERR_MTC },
  +        { "inet://0.0.0.0:0", "inet://0.0.0.0:0", 0, SA_OK },
  +        { "inet://127.0.0.1:514", "inet://127.0.0.1:514", -1, SA_OK },
  +        { "inet://127.0.0.1:514", "inet://0.0.0.0:0", 0, SA_OK },
  +        { "inet://127.0.0.1:514", "inet://12.34.56.78:9", 0, SA_OK },
  +        { "inet://127.0.0.1:514", "inet://12.34.56.78:9", -1, SA_ERR_MTC },
  +        { "inet://127.0.0.1:514", "inet://127.0.0.0:0", 24, SA_OK },
  +        { "inet://127.0.0.1:514", "inet://127.0.0.0:0", 32, SA_ERR_MTC },
  +        { "inet://141.1.23.20:25", "inet://141.1.23.40:25", 32, SA_ERR_MTC },
  +        { "inet://141.1.23.20:25", "inet://141.1.23.40:25", 24, SA_OK }
  +    };
  +
  +    sa_addr_create(&saa1);
  +    sa_addr_create(&saa2);
  +    for (i = 0; i < sizeof(table)/sizeof(table[0]); i++) {
  +        if ((rv = sa_addr_u2a(saa1, table[i].in)) != SA_OK)
  +            continue;
  +        if ((rv = sa_addr_u2a(saa2, table[i].acl)) != SA_OK)
  +            continue;
  +        tst_check(TST, "sa_addr_match(\"%s\", \"%s\", %d)", 
  +                  table[i].in, table[i].acl, table[i].prefixlen);
  +        if ((rv = sa_addr_match(saa1, saa2, table[i].prefixlen)) != table[i].rv)
  +            tst_fail(TST, "sa_addr_match -> %d[%s] (expected %d[%s])",
  +                     rv, sa_error(rv), table[i].rv, sa_error(table[i].rv));
  +    }
  +    sa_addr_destroy(saa1);
  +    sa_addr_destroy(saa2);
   }
   
   int main(int argc, char *argv[])
  @@ -75,8 +136,8 @@
       int n;
   
       ts = ts_new("OSSP SA (Socket Abstraction Library)");
  -    ts_test(ts, test_saa, "socket address abstraction");
  -    ts_test(ts, test_sa, "socket abstraction");
  +    ts_test(ts, test_saa_impexp, "socket address abstraction (import/export)");
  +    ts_test(ts, test_saa_match,  "socket address abstraction (matching)");
       n = ts_run(ts);
       ts_free(ts);
       return n;

From ossp-cvs-owner@ossp.org  Wed Oct 10 17:51:40 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9AFpdW95724; Wed, 10 Oct 2001 17:51:39 +0200 (CEST)
Date: Wed, 10 Oct 2001 17:51:39 +0200 (CEST)
Message-Id: <200110101551.f9AFpdW95724@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   10-Oct-2001 17:51:39
  Branch: HEAD                             Handle: 2001101016513800

  Modified files:
    ossp-pkg/sa             TODO

  Log:
    update TODO

  Summary:
    Revision    Changes     Path
    1.23        +0  -8      ossp-pkg/sa/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 TODO
  --- ossp-pkg/sa/TODO	2001/10/10 09:21:27	1.22
  +++ ossp-pkg/sa/TODO	2001/10/10 15:51:38	1.23
  @@ -2,14 +2,6 @@
   TODO
   ----
   
  -o Provide a full test suite for the whole API.
  -
  -  - inet://0.0.0.0:0 -> inet://0.0.0.0:514
  -  - inet://127.0.0.1:514 -> inet://127.0.0.1:514
  -  - inet://localhost:syslog#udp -> inet://127.0.0.1:514
  -  - inet://localhost:smtp -> inet://127.0.0.1:25
  -  - unix:/tmp/socket -> unix:/tmp/socket
  -
   CANDO
   -----
   

From ossp-cvs-owner@ossp.org  Wed Oct 10 17:54:07 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9AFs5c96181; Wed, 10 Oct 2001 17:54:05 +0200 (CEST)
Date: Wed, 10 Oct 2001 17:54:05 +0200 (CEST)
Message-Id: <200110101554.f9AFs5c96181@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   10-Oct-2001 17:54:05
  Branch: HEAD                             Handle: 2001101016540500

  Modified files:
    ossp-pkg/sa             TODO

  Log:
    update TODO

  Summary:
    Revision    Changes     Path
    1.24        +3  -0      ossp-pkg/sa/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 TODO
  --- ossp-pkg/sa/TODO	2001/10/10 15:51:38	1.23
  +++ ossp-pkg/sa/TODO	2001/10/10 15:54:05	1.24
  @@ -2,6 +2,9 @@
   TODO
   ----
   
  +- more test cases to cover full API
  +- more documentation to fully describe API
  +
   CANDO
   -----
   

From ossp-cvs-owner@ossp.org  Wed Oct 10 17:58:28 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9AFwRH96506; Wed, 10 Oct 2001 17:58:27 +0200 (CEST)
Date: Wed, 10 Oct 2001 17:58:27 +0200 (CEST)
Message-Id: <200110101558.f9AFwRH96506@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_smtp.c l2_ch_syslog.c l2_ut_sa.c l2_ut_s...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   10-Oct-2001 17:58:27
  Branch: HEAD                             Handle: 2001101016582700

  Modified files:
    ossp-pkg/l2             l2_ch_smtp.c l2_ch_syslog.c l2_ut_sa.c l2_ut_sa.h

  Log:
    Upgrade to the latest and greatest OSSP SA.

  Summary:
    Revision    Changes     Path
    1.5         +3  -2      ossp-pkg/l2/l2_ch_smtp.c
    1.24        +1  -1      ossp-pkg/l2/l2_ch_syslog.c
    1.15        +568 -154   ossp-pkg/l2/l2_ut_sa.c
    1.10        +58 -11     ossp-pkg/l2/l2_ut_sa.h
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_smtp.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 l2_ch_smtp.c
  --- ossp-pkg/l2/l2_ch_smtp.c	2001/10/06 14:33:09	1.4
  +++ ossp-pkg/l2/l2_ch_smtp.c	2001/10/10 15:58:27	1.5
  @@ -132,8 +132,9 @@
           return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
   
       /* configure socket parameters */
  -    sa_timeout(cfg->saServer, cfg->nTimeout, 0);
  -    sa_buffers(cfg->saServer, 4096, 4096);
  +    sa_timeout(cfg->saServer, SA_TIMEOUT_ALL, cfg->nTimeout, 0);
  +    sa_buffer(cfg->saServer, SA_BUFFER_READ, 4096);
  +    sa_buffer(cfg->saServer, SA_BUFFER_WRITE, 4096);
   
       return L2_OK;
   }
  Index: ossp-pkg/l2/l2_ch_syslog.c
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 l2_ch_syslog.c
  --- ossp-pkg/l2/l2_ch_syslog.c	2001/10/06 14:35:57	1.23
  +++ ossp-pkg/l2/l2_ch_syslog.c	2001/10/10 15:58:27	1.24
  @@ -228,7 +228,7 @@
           if ((rc = sa_create(&cfg->saRemoteSock)) != SA_OK)
               return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
           sa_type(cfg->saRemoteSock, SA_TYPE_DATAGRAM);
  -        sa_timeout(cfg->saRemoteSock, 10, 0);
  +        sa_timeout(cfg->saRemoteSock, SA_TIMEOUT_ALL, 10, 0);
           if ((rc = sa_addr_create(&la)) != SA_OK)
               return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
           /* FIXME: if uid == 0 -> use port 514 */
  Index: ossp-pkg/l2/l2_ut_sa.c
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 l2_ut_sa.c
  --- ossp-pkg/l2/l2_ut_sa.c	2001/10/06 14:33:09	1.14
  +++ ossp-pkg/l2/l2_ut_sa.c	2001/10/10 15:58:27	1.15
  @@ -1,7 +1,8 @@
   /*
   **  SA - OSSP Socket Abstraction Library
  -**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP SA, a socket abstraction library which
   **  can be found at http://www.ossp.org/pkg/sa/.
  @@ -33,10 +34,10 @@
   /* include system API headers */
   #include <stdio.h>       /* for "s[n]printf()" */
   #include <stdlib.h>      /* for "malloc()" & friends */
  -#include <stdarg.h>      /* for "va_xxx()" and "va_list" */
  -#include <string.h>      /* for "strxxx()" and "size_t" */
  +#include <stdarg.h>      /* for "va_XXX()" and "va_list" */
  +#include <string.h>      /* for "strXXX()" and "size_t" */
   #include <sys/types.h>   /* for general prerequisites */
  -#include <ctype.h>       /* for isxxx() */
  +#include <ctype.h>       /* for isXXX() */
   #include <errno.h>       /* for "EXXX" */
   #include <fcntl.h>       /* for "F_XXX" and "O_XXX" */
   #include <unistd.h>      /* for standard Unix stuff */
  @@ -45,32 +46,138 @@
   #include <sys/un.h>      /* for "struct sockaddr_un" */
   #include <netinet/in.h>  /* for "struct sockaddr_in[6]" */
   #include <sys/socket.h>  /* for "AF_XXX" and "SOCK_XXX" */
  -#include <arpa/inet.h>   /* for "inet_xtoy" */
  +#include <arpa/inet.h>   /* for "inet_XtoX" */
   
   /* include own API header */
   #include "l2_ut_sa.h"
   
  -/* socket address abstraction object */
  -struct sa_addr_st {
  -    int              nFamily;     /* the socket family (AF_XXX) */
  -    struct sockaddr *saBuf;       /* the "struct sockaddr_xx" actually */
  -    socklen_t        slBuf;       /* the length of "struct sockaddr_xx" */
  -};
  -
  +/* system call structure declaration macros */
  +#define SA_SC_DECLARE_0(rc_t, fn) \
  +    struct { \
  +        union { void (*any)(); \
  +                rc_t (*std)(void); \
  +                rc_t (*ctx)(void *); } fptr; \
  +        void *fctx; \
  +    } sc_##fn;
  +#define SA_SC_DECLARE_1(rc_t, fn, a1_t) \
  +    struct { \
  +        union { void (*any)(); \
  +                rc_t (*std)(a1_t); \
  +                rc_t (*ctx)(void *, a1_t); } fptr; \
  +        void *fctx; \
  +    } sc_##fn;
  +#define SA_SC_DECLARE_2(rc_t, fn, a1_t, a2_t) \
  +    struct { \
  +        union { void (*any)(); \
  +                rc_t (*std)(a1_t, a2_t); \
  +                rc_t (*ctx)(void *, a1_t, a2_t); } fptr; \
  +        void *fctx; \
  +    } sc_##fn;
  +#define SA_SC_DECLARE_3(rc_t, fn, a1_t, a2_t, a3_t) \
  +    struct { \
  +        union { void (*any)(); \
  +                rc_t (*std)(a1_t, a2_t, a3_t); \
  +                rc_t (*ctx)(void *, a1_t, a2_t, a3_t); } fptr; \
  +        void *fctx; \
  +    } sc_##fn;
  +#define SA_SC_DECLARE_4(rc_t, fn, a1_t, a2_t, a3_t, a4_t) \
  +    struct { \
  +        union { void (*any)(); \
  +                rc_t (*std)(a1_t, a2_t, a3_t, a4_t); \
  +                rc_t (*ctx)(void *, a1_t, a2_t, a3_t, a4_t); } fptr; \
  +        void *fctx; \
  +    } sc_##fn;
  +#define SA_SC_DECLARE_5(rc_t, fn, a1_t, a2_t, a3_t, a4_t, a5_t) \
  +    struct { \
  +        union { void (*any)(); \
  +                rc_t (*std)(a1_t, a2_t, a3_t, a4_t, a5_t); \
  +                rc_t (*ctx)(void *, a1_t, a2_t, a3_t, a4_t, a5_t); } fptr; \
  +        void *fctx; \
  +    } sc_##fn;
  +#define SA_SC_DECLARE_6(rc_t, fn, a1_t, a2_t, a3_t, a4_t, a5_t, a6_t) \
  +    struct { \
  +        union { void (*any)(); \
  +                rc_t (*std)(a1_t, a2_t, a3_t, a4_t, a5_t, a6_t); \
  +                rc_t (*ctx)(void *, a1_t, a2_t, a3_t, a4_t, a5_t, a6_t); } fptr; \
  +        void *fctx; \
  +    } sc_##fn;
  +
  +/* system call structure assignment macro */
  +#define SA_SC_ASSIGN(sa, fn, ptr, ctx) \
  +    do { \
  +        (sa)->scSysCall.sc_##fn.fptr.any = (void (*)())(ptr); \
  +        (sa)->scSysCall.sc_##fn.fctx = (ctx); \
  +    } while(0)
  +
  +/* system call structure assignment macro */
  +#define SA_SC_COPY(sa1, sa2, fn) \
  +    do { \
  +        (sa1)->scSysCall.sc_##fn.fptr.any = (sa2)->scSysCall.sc_##fn.fptr.any; \
  +        (sa1)->scSysCall.sc_##fn.fctx     = (sa2)->scSysCall.sc_##fn.fctx; \
  +    } while(0)
  +
  +/* system call function call macros */
  +#define SA_SC_CALL_0(sa, fn) \
  +    (   (sa)->scSysCall.sc_##fn.fctx != NULL \
  +     ? ((sa)->scSysCall.sc_##fn.fptr.ctx)((sa)->scSysCall.sc_##fn.fctx) \
  +     : ((sa)->scSysCall.sc_##fn.fptr.std)() )
  +#define SA_SC_CALL_1(sa, fn, a1) \
  +    (   (sa)->scSysCall.sc_##fn.fctx != NULL \
  +     ? ((sa)->scSysCall.sc_##fn.fptr.ctx)((sa)->scSysCall.sc_##fn.fctx, a1) \
  +     : ((sa)->scSysCall.sc_##fn.fptr.std)(a1) )
  +#define SA_SC_CALL_2(sa, fn, a1, a2) \
  +    (   (sa)->scSysCall.sc_##fn.fctx != NULL \
  +     ? ((sa)->scSysCall.sc_##fn.fptr.ctx)((sa)->scSysCall.sc_##fn.fctx, a1, a2) \
  +     : ((sa)->scSysCall.sc_##fn.fptr.std)(a1, a2) )
  +#define SA_SC_CALL_3(sa, fn, a1, a2, a3) \
  +    (   (sa)->scSysCall.sc_##fn.fctx != NULL \
  +     ? ((sa)->scSysCall.sc_##fn.fptr.ctx)((sa)->scSysCall.sc_##fn.fctx, a1, a2, a3) \
  +     : ((sa)->scSysCall.sc_##fn.fptr.std)(a1, a2, a3) )
  +#define SA_SC_CALL_4(sa, fn, a1, a2, a3, a4) \
  +    (   (sa)->scSysCall.sc_##fn.fctx != NULL \
  +     ? ((sa)->scSysCall.sc_##fn.fptr.ctx)((sa)->scSysCall.sc_##fn.fctx, a1, a2, a3, a4) \
  +     : ((sa)->scSysCall.sc_##fn.fptr.std)(a1, a2, a3, a4) )
  +#define SA_SC_CALL_5(sa, fn, a1, a2, a3, a4, a5) \
  +    (   (sa)->scSysCall.sc_##fn.fctx != NULL \
  +     ? ((sa)->scSysCall.sc_##fn.fptr.ctx)((sa)->scSysCall.sc_##fn.fctx, a1, a2, a3, a4, a5) \
  +     : ((sa)->scSysCall.sc_##fn.fptr.std)(a1, a2, a3, a4, a5) )
  +#define SA_SC_CALL_6(sa, fn, a1, a2, a3, a4, a5, a6) \
  +    (   (sa)->scSysCall.sc_##fn.fctx != NULL \
  +     ? ((sa)->scSysCall.sc_##fn.fptr.ctx)((sa)->scSysCall.sc_##fn.fctx, a1, a2, a3, a4, a5, a6) \
  +     : ((sa)->scSysCall.sc_##fn.fptr.std)(a1, a2, a3, a4, a5, a6) )
  +
  +/* system call table */
  +typedef struct {
  +    SA_SC_DECLARE_3(int,     connect,  int, const struct sockaddr *, socklen_t)
  +    SA_SC_DECLARE_3(int,     accept,   int, struct sockaddr *, socklen_t *)
  +    SA_SC_DECLARE_5(int,     select,   int, fd_set *, fd_set *, fd_set *, struct timeval *)
  +    SA_SC_DECLARE_3(ssize_t, read,     int, void *, size_t)
  +    SA_SC_DECLARE_3(ssize_t, write,    int, const void *, size_t)
  +    SA_SC_DECLARE_6(ssize_t, recvfrom, int, void *, size_t, int, struct sockaddr *, socklen_t *)
  +    SA_SC_DECLARE_6(ssize_t, sendto,   int, const void *, size_t, int, const struct sockaddr *, socklen_t)
  +} sa_syscall_tab_t;
  + 
   /* socket abstraction object */
   struct sa_st {
  -    sa_type_t        eType;       /* socket type (stream or datagram) */
  -    int              fdSocket;    /* socket file descriptor */
  -    int              bTimeout;    /* timeout enabling flag */
  -    struct timeval   tvTimeout;   /* timeout value (sec, usec) */
  -    int              nReadLen;    /* read  buffer current length */
  -    int              nReadSize;   /* read  buffer current size */
  -    char            *cpReadBuf;   /* read  buffer memory chunk */
  -    int              nWriteLen;   /* write buffer current length */
  -    int              nWriteSize;  /* write buffer current size */
  -    char            *cpWriteBuf;  /* write buffer memory chunk */
  +    sa_type_t        eType;            /* socket type (stream or datagram) */
  +    int              fdSocket;         /* socket file descriptor */
  +    struct timeval   tvTimeout[4];     /* timeout values (sec, usec) */
  +    int              nReadLen;         /* read  buffer current length */
  +    int              nReadSize;        /* read  buffer current size */
  +    char            *cpReadBuf;        /* read  buffer memory chunk */
  +    int              nWriteLen;        /* write buffer current length */
  +    int              nWriteSize;       /* write buffer current size */
  +    char            *cpWriteBuf;       /* write buffer memory chunk */
  +    sa_syscall_tab_t scSysCall;        /* table of system calls */
   };
   
  +/* socket address abstraction object */
  +struct sa_addr_st {
  +    int              nFamily;          /* the socket family (AF_XXX) */
  +    struct sockaddr *saBuf;            /* the "struct sockaddr_xx" actually */
  +    socklen_t        slBuf;            /* the length of "struct sockaddr_xx" */
  +};
  +
   /* boolean values */
   #ifndef FALSE
   #define FALSE (0)
  @@ -79,6 +186,10 @@
   #define TRUE  (!FALSE)
   #endif
   
  +/* handy struct timeval check */
  +#define SA_TVISZERO(tv) \
  +    ((tv).tv_sec == 0 && (tv).tv_usec == 0)
  +
   /* backward compatibility for AF_LOCAL */
   #if !defined(AF_LOCAL) && defined(AF_UNIX)
   #define AF_LOCAL AF_UNIX
  @@ -132,62 +243,117 @@
   #endif
   }
   
  -/* minimal vsnprintf(3) variant which supports %{c,s,d} only */
  -static int sa_mvsnprintf(char *buffer, size_t bufsize, const char *format, va_list ap)
  +/* minimal output-independent vprintf(3) variant which supports %{c,s,d,%} only */
  +static int sa_mvxprintf(int (*output)(void *ctx, const char *buffer, size_t bufsize), void *ctx, const char *format, va_list ap)
   {
  -    char *bufptr;
  -    char *bufend;
       /* sufficient integer buffer: <available-bits> x log_10(2) + safety */
       char ibuf[((sizeof(int)*8)/3)+10]; 
       char *cp;
       char c;
       int d;
       int n;
  +    int bytes;
   
  -    bufptr = buffer;
  -    bufend = buffer + bufsize - 1;
  -    while ((c = *format++) != '\0' && bufptr < bufend) {
  -        if (c == '%') {
  -            c = *format++;
  -            if (c == '%')
  -                /* implement "%%" */
  -                *bufptr++ = c;
  -            else if (c == 'c')
  -                /* implement "%c" */
  -                *bufptr++ = (char)va_arg(ap, int);
  +    if (format == NULL || ap == NULL)
  +        return -1;
  +    bytes = 0;
  +    while (*format != '\0') {
  +        if (*format == '%') {
  +            c = *(format+1);
  +            if (c == '%') {
  +                /* expand "%%" */
  +                cp = &c;
  +                n = sizeof(char);
  +            }
  +            else if (c == 'c') {
  +                /* expand "%c" */
  +                c = (char)va_arg(ap, int);
  +                cp = &c;
  +                n = sizeof(char);
  +            }
               else if (c == 's') {
  -                /* implement "%s" */
  +                /* expand "%s" */
                   if ((cp = (char *)va_arg(ap, char *)) == NULL)
                       cp = "(null)";
                   n = strlen(cp);
  -                if ((bufptr + n) > bufend)
  -                    n = bufend - bufptr;
  -                memcpy(bufptr, cp, n);
  -                bufptr += n;
               }
               else if (c == 'd') {
  -                /* implement "%d" */
  +                /* expand "%d" */
                   d = (int)va_arg(ap, int);
   #ifdef HAVE_SNPRINTF
                   snprintf(ibuf, sizeof(ibuf), "%d", d); /* explicitly secure */
   #else
                   sprintf(ibuf, "%d", d);                /* implicitly secure */
   #endif
  -                n = strlen(ibuf);
  -                memcpy(bufptr, ibuf, n);
  -                bufptr += n;
  +                cp = ibuf;
  +                n = strlen(cp);
               }
               else {
  -                *bufptr++ = '%';
  -                if (bufptr < bufend)
  -                    *bufptr++ = c;
  +                /* any other "%X" */
  +                cp = (char *)format;
  +                n  = 2;
               }
  +            format += 2;
           }
  -        else
  -            *bufptr++ = c;
  +        else {
  +            /* plain text */
  +            cp = (char *)format;
  +            if ((format = strchr(cp, '%')) == NULL)
  +                format = strchr(cp, '\0');
  +            n = format - cp;
  +        }
  +        /* perform output operation */
  +        if (output != NULL)
  +            if ((n = output(ctx, cp, n)) == -1)
  +                break;
  +        bytes += n;
       }
  -    *bufptr = '\0';
  -    return (bufptr - buffer);
  +    return bytes;
  +}
  +
  +/* output callback function context for sa_mvsnprintf() */
  +typedef struct {
  +    char *bufptr;
  +    size_t buflen;
  +} sa_mvsnprintf_cb_t;
  +
  +/* output callback function for sa_mvsnprintf() */
  +static int sa_mvsnprintf_cb(void *_ctx, const char *buffer, size_t bufsize)
  +{
  +    sa_mvsnprintf_cb_t *ctx = (sa_mvsnprintf_cb_t *)_ctx;
  +
  +    if (bufsize > ctx->buflen)
  +        return -1;
  +    memcpy(ctx->bufptr, buffer, bufsize);
  +    ctx->bufptr += bufsize;
  +    ctx->buflen -= bufsize;
  +    return bufsize;
  +}
  +
  +/* minimal vsnprintf(3) variant which supports %{c,s,d} only */
  +static int sa_mvsnprintf(char *buffer, size_t bufsize, const char *format, va_list ap)
  +{
  +    int n;
  +    sa_mvsnprintf_cb_t ctx;
  +
  +    if (format == NULL || ap == NULL)
  +        return -1;
  +    if (buffer != NULL && bufsize == 0)
  +        return -1;
  +    if (buffer == NULL) 
  +        /* just determine output length */
  +        n = sa_mvxprintf(NULL, NULL, format, ap);
  +    else {
  +        /* perform real output */
  +        ctx.bufptr = buffer;
  +        ctx.buflen = bufsize - 1;
  +        n = sa_mvxprintf(sa_mvsnprintf_cb, &ctx, format, ap);
  +    }
  +    if (n != -1 && ctx.buflen == 0)
  +        n = -1;
  +    if (n != -1)
  +        *(ctx.bufptr) = '\0';
  +    return n;
   }
   
   /* minimal snprintf(3) variant which supports %{c,s,d} only */
  @@ -196,10 +362,6 @@
       int chars;
       va_list ap;
   
  -    /* argument sanity check(s) */
  -    if (buffer == NULL || bufsize == 0 || format == NULL)
  -        return 0;
  -
       /* pass through to va_list based variant */
       va_start(ap, format);
       chars = sa_mvsnprintf(buffer, bufsize, format, ap);
  @@ -292,16 +454,23 @@
       if (strncmp(uri, "unix:", 5) == 0) {
           /* parse URI */
           cpPath = uri+5;
  -        if (cpPath[0] != '/')
  -            return SA_ERR_ARG;
   
           /* mandatory(!) socket address structure initialization */
           memset(&un, 0, sizeof(un));
   
           /* fill-in socket address structure */
           n = strlen(cpPath);
  +        if (n == 0)
  +            return SA_ERR_ARG;
           if ((n+1) > sizeof(un.sun_path))
               return SA_ERR_MEM;
  +        if (cpPath[0] != '/') {
  +            if (getcwd(un.sun_path, sizeof(un.sun_path)-(n+1)) == NULL)
  +                return SA_ERR_MEM;
  +            cp = un.sun_path + strlen(un.sun_path);
  +        }
  +        else
  +            cp = un.sun_path;
           memcpy(un.sun_path, cpPath, n+1);
           un.sun_family = AF_LOCAL;
   
  @@ -313,7 +482,7 @@
       else if (strncmp(uri, "inet://", 7) == 0) {
           /* parse URI */
           cpHost = (char *)(uri+7);
  -        if ((cp = strchr(cpHost, ':')) == NULL)
  +        if ((cp = strrchr(cpHost, ':')) == NULL)
               return SA_ERR_ARG;
           *cp++ = '\0';
           cpPort = cp;
  @@ -385,12 +554,14 @@
                   sf = AF_INET6;
               }
   #endif
  +            else
  +                return SA_ERR_ARG;
           }
  +        else
  +            return SA_ERR_ARG;
       }
  -
  -    /* make sure result variables are set */
  -    if (sa == NULL || sl == 0 || sf == 0)
  -        return SA_ERR_INT;
  +    else
  +        return SA_ERR_ARG;
   
       /* fill-in result address structure */
       if (saa->saBuf != NULL)
  @@ -517,6 +688,104 @@
       return SA_OK;
   }
   
  +sa_rc_t sa_addr_match(sa_addr_t *saa1, sa_addr_t *saa2, int prefixlen)
  +{
  +    const unsigned char *ucp1, *ucp2;
  +    unsigned int uc1, uc2, mask;
  +    size_t l1, l2;
  +    int nFamily;
  +    int nBytes;
  +    int nBits;
  +
  +    /* argument sanity check(s) */
  +    if (saa1 == NULL || saa2 == NULL || prefixlen < -1)
  +        return SA_ERR_ARG;
  +
  +    /* match short circuiting */
  +    if (saa1->nFamily != saa2->nFamily)
  +        return SA_ERR_MTC;
  +
  +    /* determine address representation pointer and size */
  +    nFamily = saa1->nFamily;
  +    if (nFamily == AF_LOCAL) {
  +        ucp1 = (const unsigned char *)(((struct sockaddr_un *)saa1->saBuf)->sun_path);
  +        ucp2 = (const unsigned char *)(((struct sockaddr_un *)saa2->saBuf)->sun_path);
  +        l1 = strlen(((struct sockaddr_un *)saa1->saBuf)->sun_path) * 8;
  +        l2 = strlen(((struct sockaddr_un *)saa2->saBuf)->sun_path) * 8;
  +        if (prefixlen == -1) {
  +            if (l1 != l2)
  +                return SA_ERR_MTC;
  +            nBits = l1;
  +        }
  +        else {
  +            if (l1 < prefixlen || l2 < prefixlen)
  +                return SA_ERR_MTC;
  +            nBits = prefixlen;
  +        }
  +    }
  +    else if (nFamily == AF_INET) {
  +        ucp1 = (const unsigned char *)&(((struct sockaddr_in *)saa1->saBuf)->sin_addr);
  +        ucp2 = (const unsigned char *)&(((struct sockaddr_in *)saa2->saBuf)->sin_addr);
  +        nBits = 32;
  +    }
  +#ifdef AF_INET6
  +    else if (nFamily == AF_INET6) {
  +        ucp1 = (const unsigned char *)&(((struct sockaddr_in6 *)saa1->saBuf)->sin6_addr);
  +        ucp2 = (const unsigned char *)&(((struct sockaddr_in6 *)saa2->saBuf)->sin6_addr);
  +        nBits = 128;
  +#endif
  +    }
  +    else
  +        return SA_ERR_INT;
  +
  +    /* make sure we do not compare than possible */
  +    if (prefixlen > nBits)
  +        return SA_ERR_ARG;
  +
  +    /* support equal matching (= all bits) */
  +    if (prefixlen == -1)
  +        prefixlen = nBits;
  +
  +    /* perform address representation comparison 
  +       (assumption guaranteed by API: network byte order is used) */
  +    nBytes = (prefixlen / 8);
  +    nBits  = (prefixlen % 8);
  +    if (nBytes > 0) {
  +        if (memcmp(ucp1, ucp2, nBytes) != 0)
  +            return SA_ERR_MTC;
  +    }
  +    if (nBits > 0) {
  +        uc1 = ucp1[nBytes];
  +        uc2 = ucp2[nBytes];
  +        mask = (0xFF << (8-nBits)) & 0xFF;
  +        if ((uc1 & mask) != (uc2 & mask))
  +            return SA_ERR_MTC;
  +    }
  +    return SA_OK;
  +}
  +
  +/* set timeouts if timeouts or done in kernel */
  +static sa_rc_t sa_socket_settimeouts(sa_t *sa)
  +{
  +#if defined(SO_RCVTIMEO) && defined(SO_SNDTIMEO)
  +    if (sa->fdSocket != -1) {
  +        if (SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_READ])) {
  +            if (setsockopt(sa->fdSocket, SOL_SOCKET, SO_RCVTIMEO,
  +                           &sa->tvTimeout[SA_TIMEOUT_READ],
  +                           sizeof(sa->tvTimeout[SA_TIMEOUT_READ])) < 0)
  +                return SA_ERR_SYS;
  +        }
  +        if (SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_WRITE])) {
  +            if (setsockopt(sa->fdSocket, SOL_SOCKET, SO_SNDTIMEO,
  +                           &sa->tvTimeout[SA_TIMEOUT_WRITE],
  +                           sizeof(sa->tvTimeout[SA_TIMEOUT_WRITE])) < 0)
  +                return SA_ERR_SYS;
  +        }
  +    }
  +#endif
  +    return SA_OK;
  +}
  +
   /* internal lazy/delayed initialization of underlying socket */
   static sa_rc_t sa_socket_init(sa_t *sa, int nFamily)
   {
  @@ -566,6 +835,9 @@
       if ((sa->fdSocket = socket(nFamily, nType, nProto)) == -1)
           return SA_ERR_SYS;
   
  +    /* optionally set kernel timeouts */
  +    sa_socket_settimeouts(sa);
  +
       return SA_OK;
   }
   
  @@ -591,6 +863,7 @@
   sa_rc_t sa_create(sa_t **sap)
   {
       sa_t *sa;
  +    int i;
   
       /* argument sanity check(s) */
       if (sap == NULL)
  @@ -599,18 +872,32 @@
       /* allocate and initialize socket object */
       if ((sa = (sa_t *)malloc(sizeof(sa_t))) == NULL)
           return SA_ERR_MEM;
  -    sa->eType             = SA_TYPE_STREAM;
  -    sa->fdSocket          = -1;
  -    sa->bTimeout          = FALSE;
  -    sa->tvTimeout.tv_sec  = 0;
  -    sa->tvTimeout.tv_usec = 0;
  -    sa->nReadLen          = 0;
  -    sa->nReadSize         = 0;
  -    sa->cpReadBuf         = NULL;
  -    sa->nWriteLen         = 0;
  -    sa->nWriteSize        = 0;
  -    sa->cpWriteBuf        = NULL;
   
  +    /* init object attributes */
  +    sa->eType          = SA_TYPE_STREAM;
  +    sa->fdSocket       = -1;
  +    sa->nReadLen       = 0;
  +    sa->nReadSize      = 0;
  +    sa->cpReadBuf      = NULL;
  +    sa->nWriteLen      = 0;
  +    sa->nWriteSize     = 0;
  +    sa->cpWriteBuf     = NULL;
  +
  +    /* init timeval object attributes */
  +    for (i = 0; i < (sizeof(sa->tvTimeout)/sizeof(sa->tvTimeout[0])); i++) {
  +        sa->tvTimeout[i].tv_sec  = 0;
  +        sa->tvTimeout[i].tv_usec = 0;
  +    }
  +
  +    /* init syscall object attributes */
  +    SA_SC_ASSIGN(sa, connect,  connect,  NULL);
  +    SA_SC_ASSIGN(sa, accept,   accept,   NULL);
  +    SA_SC_ASSIGN(sa, select,   select,   NULL);
  +    SA_SC_ASSIGN(sa, read,     read,     NULL);
  +    SA_SC_ASSIGN(sa, write,    write,    NULL);
  +    SA_SC_ASSIGN(sa, recvfrom, recvfrom, NULL);
  +    SA_SC_ASSIGN(sa, sendto,   sendto,   NULL);
  +
       /* pass object to caller */
       *sap = sa;
   
  @@ -657,72 +944,108 @@
   }
   
   /* configure I/O timeout */
  -sa_rc_t sa_timeout(sa_t *sa, long sec, long usec)
  +sa_rc_t sa_timeout(sa_t *sa, sa_timeout_t id, long sec, long usec)
   {
  +    int i;
  +
       /* argument sanity check(s) */
       if (sa == NULL)
           return SA_ERR_ARG;
   
  -    /* configure timeout */
  -    if (sec == 0 && usec == 0)
  -        sa->bTimeout = FALSE; /* deactivate timeout */
  -    else
  -        sa->bTimeout = TRUE;  /* activate timeout */
  -    sa->tvTimeout.tv_sec  = sec;
  -    sa->tvTimeout.tv_usec = usec;
  +    if (id == SA_TIMEOUT_ALL) {
  +        for (i = 0; i < (sizeof(sa->tvTimeout)/sizeof(sa->tvTimeout[0])); i++) {
  +            sa->tvTimeout[i].tv_sec  = sec;
  +            sa->tvTimeout[i].tv_usec = usec;
  +        }
  +    }
  +    else {
  +        sa->tvTimeout[id].tv_sec  = sec;
  +        sa->tvTimeout[id].tv_usec = usec;
  +    }
  +
  +    /* optionally set kernel timeouts */
  +    sa_socket_settimeouts(sa);
   
       return SA_OK;
   }
   
   /* configure I/O buffers */
  -sa_rc_t sa_buffers(sa_t *sa, size_t rsize, size_t wsize)
  +sa_rc_t sa_buffer(sa_t *sa, sa_buffer_t id, size_t size)
   {
       char *cp;
   
       /* argument sanity check(s) */
       if (sa == NULL)
           return SA_ERR_ARG;
  -
  -    /* make sure buffered were already flushed sufficiently */
  -    if (sa->nReadLen > rsize || sa->nWriteLen > wsize)
  -        return SA_ERR_USE;
   
  -    /* configure read/incoming buffer */
  -    if (rsize > 0) {
  -        if (sa->cpReadBuf == NULL)
  -            cp = (char *)malloc(rsize);
  -        else
  -            cp = (char *)realloc(sa->cpReadBuf, rsize);
  -        if (cp == NULL)
  -            return SA_ERR_SYS;
  -        sa->cpReadBuf = cp;
  -        sa->nReadSize = rsize;
  +    if (id == SA_BUFFER_READ) {
  +        /* configure read/incoming buffer */
  +        if (sa->nReadLen > size)
  +            return SA_ERR_USE;
  +        if (size > 0) {
  +            if (sa->cpReadBuf == NULL)
  +                cp = (char *)malloc(size);
  +            else
  +                cp = (char *)realloc(sa->cpReadBuf, size);
  +            if (cp == NULL)
  +                return SA_ERR_SYS;
  +            sa->cpReadBuf = cp;
  +            sa->nReadSize = size;
  +        }
  +        else {
  +            if (sa->cpReadBuf != NULL)
  +                free(sa->cpReadBuf);
  +            sa->cpReadBuf = NULL;
  +            sa->nReadSize = 0;
  +        }
       }
  -    else {
  -        if (sa->cpReadBuf != NULL)
  -            free(sa->cpReadBuf);
  -        sa->cpReadBuf = NULL;
  -        sa->nReadSize = 0;
  +    else if (id == SA_BUFFER_WRITE) {
  +        /* configure write/outgoing buffer */
  +        if (sa->nWriteLen > size)
  +            return SA_ERR_USE;
  +        if (size > 0) {
  +            if (sa->cpWriteBuf == NULL)
  +                cp = (char *)malloc(size);
  +            else
  +                cp = (char *)realloc(sa->cpWriteBuf, size);
  +            if (cp == NULL)
  +                return SA_ERR_SYS;
  +            sa->cpWriteBuf = cp;
  +            sa->nWriteSize = size;
  +        }
  +        else {
  +            if (sa->cpWriteBuf != NULL)
  +                free(sa->cpWriteBuf);
  +            sa->cpWriteBuf = NULL;
  +            sa->nWriteSize = 0;
  +        }
       }
  +        return SA_ERR_ARG;
   
  -    /* configure write/outgoing buffer */
  -    if (wsize > 0) {
  -        if (sa->cpWriteBuf == NULL)
  -            cp = (char *)malloc(wsize);
  -        else
  -            cp = (char *)realloc(sa->cpWriteBuf, wsize);
  -        if (cp == NULL)
  -            return SA_ERR_SYS;
  -        sa->cpWriteBuf = cp;
  -        sa->nWriteSize = wsize;
  -    }
  -    else {
  -        if (sa->cpWriteBuf != NULL)
  -            free(sa->cpWriteBuf);
  -        sa->cpWriteBuf = NULL;
  -        sa->nWriteSize = 0;
  -    }
  +    return SA_OK;
  +}
   
  +/* override system call */
  +sa_rc_t sa_syscall(sa_t *sa, sa_syscall_t id, void (*fptr)(), void *fctx)
  +{
  +    if (sa == NULL || fptr == NULL)
  +        return SA_ERR_ARG;
  +    if (id == SA_SYSCALL_CONNECT)
  +        SA_SC_ASSIGN(sa, connect, fptr, fctx); 
  +    else if (id == SA_SYSCALL_ACCEPT)
  +        SA_SC_ASSIGN(sa, accept, fptr, fctx); 
  +    else if (id == SA_SYSCALL_SELECT)
  +        SA_SC_ASSIGN(sa, select, fptr, fctx); 
  +    else if (id == SA_SYSCALL_READ)
  +        SA_SC_ASSIGN(sa, read, fptr, fctx); 
  +    else if (id == SA_SYSCALL_WRITE)
  +        SA_SC_ASSIGN(sa, write, fptr, fctx); 
  +    else if (id == SA_SYSCALL_RECVFROM)
  +        SA_SC_ASSIGN(sa, recvfrom, fptr, fctx); 
  +    else if (id == SA_SYSCALL_SENDTO)
  +        SA_SC_ASSIGN(sa, sendto, fptr, fctx); 
  +    else
  +        return SA_ERR_ARG;
       return SA_OK;
   }
   
  @@ -776,9 +1099,9 @@
               return rv;
   
       rv = SA_OK;
  -    if (!sa->bTimeout) {
  +    if (SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_CONNECT])) {
           /* standard/non-timeout-aware connect operation */
  -        if (connect(sa->fdSocket, raddr->saBuf, raddr->slBuf) < 0)
  +        if (SA_SC_CALL_3(sa, connect, sa->fdSocket, raddr->saBuf, raddr->slBuf) < 0)
               rv = SA_ERR_SYS;
       }
       else {
  @@ -790,7 +1113,7 @@
           fcntl(sa->fdSocket, F_SETFL, flags|O_NONBLOCK);
   
           /* perform the connect operation */
  -        if ((n = connect(sa->fdSocket, raddr->saBuf, raddr->slBuf)) < 0) {
  +        if ((n = SA_SC_CALL_3(sa, connect, sa->fdSocket, raddr->saBuf, raddr->slBuf)) < 0) {
               if (errno != EINPROGRESS) {
                   error = errno;
                   goto done;
  @@ -807,7 +1130,8 @@
           FD_SET(sa->fdSocket, &rset);
           FD_SET(sa->fdSocket, &wset);
           do {
  -            n = select(sa->fdSocket+1, &rset, &wset, NULL, &sa->tvTimeout);
  +            n = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &rset, &wset, NULL,
  +                             &sa->tvTimeout[SA_TIMEOUT_CONNECT]);
           } while (n == -1 && errno == EINTR);
   
           /* decide on return semantic */
  @@ -816,7 +1140,8 @@
               goto done;
           }
           else if (n == 0) {
  -            error = ETIMEDOUT;
  +            close(sa->fdSocket); /* stop TCP three-way handshake */
  +            rv = SA_ERR_TMT;
               goto done;
           }
   
  @@ -832,6 +1157,7 @@
   
           /* optionally set errno */
           if (error != 0) {
  +            close(sa->fdSocket); /* just in case */
               errno = error;
               rv = SA_ERR_SYS;
           }
  @@ -875,6 +1201,7 @@
       } sa_buf;
       socklen_t sa_len;
       int s;
  +    int i;
   
       /* argument sanity check(s) */
       if (sa == NULL || caddr == NULL || csa == NULL)
  @@ -889,21 +1216,22 @@
           return SA_ERR_USE;
   
       /* if timeout is enabled, perform a smart-blocking wait */
  -    if (sa->bTimeout) {
  +    if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_ACCEPT])) {
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
           do {
  -            n = select(sa->fdSocket+1, &fds, NULL, NULL, &sa->tvTimeout);
  +            n = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &fds, NULL, NULL,
  +                             &sa->tvTimeout[SA_TIMEOUT_ACCEPT]);
           } while (n == -1 && errno == EINTR);
           if (n == 0) 
  -            errno = ETIMEDOUT;
  +            return SA_ERR_TMT;
           if (n <= 0)
               return SA_ERR_SYS;
       }
   
       /* perform accept operation on underlying socket */
       sa_len = sizeof(sa_buf);
  -    if ((s = accept(sa->fdSocket, (struct sockaddr *)&sa_buf, &sa_len)) == -1)
  +    if ((s = SA_SC_CALL_3(sa, accept, sa->fdSocket, (struct sockaddr *)&sa_buf, &sa_len)) == -1)
           return SA_ERR_SYS;
   
       /* create result address object */
  @@ -919,8 +1247,25 @@
           sa_addr_destroy(*caddr);
           return rv;
       }
  +
  +    /* fill-in child socket */
       (*csa)->fdSocket = s;
   
  +    /* copy-over original system calls */
  +    SA_SC_COPY((*csa), sa, connect);
  +    SA_SC_COPY((*csa), sa, accept);
  +    SA_SC_COPY((*csa), sa, select);
  +    SA_SC_COPY((*csa), sa, read);
  +    SA_SC_COPY((*csa), sa, write);
  +    SA_SC_COPY((*csa), sa, recvfrom);
  +    SA_SC_COPY((*csa), sa, sendto);
  +
  +    /* copy-over original timeout values */
  +    for (i = 0; i < (sizeof(sa->tvTimeout)/sizeof(sa->tvTimeout[0])); i++) {
  +        (*csa)->tvTimeout[i].tv_sec  = sa->tvTimeout[i].tv_sec;
  +        (*csa)->tvTimeout[i].tv_usec = sa->tvTimeout[i].tv_usec;
  +    }
  +
       return SA_OK;
   }
   
  @@ -1021,27 +1366,37 @@
   static int sa_read_raw(sa_t *sa, char *cpBuf, int nBufLen)
   {
       int rv;
  +#if !(defined(SO_RCVTIMEO) && defined(SO_SNDTIMEO))
       fd_set fds;
  +#endif
   
       /* if timeout is enabled, perform explicit/smart blocking instead 
          of implicitly/hard blocking in the read(2) system call */
  -    if (sa->bTimeout) {
  +#if !(defined(SO_RCVTIMEO) && defined(SO_SNDTIMEO))
  +    if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_READ])) {
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
           do {
  -            rv = select(sa->fdSocket+1, &fds, NULL, NULL, &sa->tvTimeout);
  +            rv = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &fds, NULL, NULL, 
  +                              &sa->tvTimeout[SA_TIMEOUT_READ]);
           } while (rv == -1 && errno == EINTR);
           if (rv == 0) {
               errno = ETIMEDOUT;
               return -1;
           }
       }
  +#endif
   
       /* perform read operation on underlying socket */
       do {
  -        rv = read(sa->fdSocket, cpBuf, nBufLen);
  +        rv = SA_SC_CALL_3(sa, read, sa->fdSocket, cpBuf, nBufLen);
       } while (rv == -1 && errno == EINTR);
   
  +#if defined(SO_RCVTIMEO) && defined(SO_SNDTIMEO)
  +    if (rv == -1 && errno == EWOULDBLOCK)
  +        errno = ETIMEDOUT;
  +#endif
  +
       return rv;
   }
   
  @@ -1075,6 +1430,8 @@
           res = sa_read_raw(sa, cpBuf, nBufReq);
           if (res == 0)
               rv = SA_ERR_EOF;
  +        else if (res < 0 && errno == ETIMEDOUT)
  +            rv = SA_ERR_TMT;
           else if (res < 0)
               rv = SA_ERR_SYS;
       }
  @@ -1105,13 +1462,18 @@
                           res += n;
                       else if (n == 0)
                           rv = (res == 0 ? SA_ERR_EOF : SA_OK);
  +                    else if (n < 0 && errno == ETIMEDOUT)
  +                        rv = (res == 0 ? SA_ERR_TMT : SA_OK);
                       else if (n < 0)
                           rv = (res == 0 ? SA_ERR_SYS : SA_OK);
                   }
                   else {
                       /* fill buffer with new data */
                       n = sa_read_raw(sa, sa->cpReadBuf, sa->nReadSize);
  -                    if (n < 0)
  +                    if (n < 0 && errno == ETIMEDOUT)
  +                        /* timeout on this read, but perhaps ok as a whole */
  +                        rv = (res == 0 ? SA_ERR_TMT : SA_OK);
  +                    else if (n < 0)
                           /* error on this read, but perhaps ok as a whole */
                           rv = (res == 0 ? SA_ERR_SYS : SA_OK);
                       if (n == 0)
  @@ -1179,27 +1541,37 @@
   static int sa_write_raw(sa_t *sa, const char *cpBuf, int nBufLen)
   {
       int rv;
  +#if !(defined(SO_RCVTIMEO) && defined(SO_SNDTIMEO))
       fd_set fds;
  +#endif
   
       /* if timeout is enabled, perform explicit/smart blocking instead 
          of implicitly/hard blocking in the write(2) system call */
  -    if (sa->bTimeout) {
  +#if !(defined(SO_RCVTIMEO) && defined(SO_SNDTIMEO))
  +    if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_WRITE])) {
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
           do {
  -            rv = select(sa->fdSocket+1, NULL, &fds, NULL, &sa->tvTimeout);
  +            rv = SA_SC_CALL_5(sa, select, sa->fdSocket+1, NULL, &fds, NULL, 
  +                              &sa->tvTimeout[SA_TIMEOUT_WRITE]);
           } while (rv == -1 && errno == EINTR);
           if (rv == 0) {
               errno = ETIMEDOUT;
               return -1;
           }
       }
  +#endif
   
       /* perform write operation on underlying socket */
       do {
  -        rv = write(sa->fdSocket, cpBuf, nBufLen);
  +        rv = SA_SC_CALL_3(sa, write, sa->fdSocket, cpBuf, nBufLen);
       } while (rv == -1 && errno == EINTR);
   
  +#if defined(SO_RCVTIMEO) && defined(SO_SNDTIMEO)
  +    if (rv == -1 && errno == EWOULDBLOCK)
  +        errno = ETIMEDOUT;
  +#endif
  +
       return rv;
   }
   
  @@ -1226,7 +1598,9 @@
       if (sa->nWriteSize == 0) {
           /* user-space unbuffered I/O */
           res = sa_write_raw(sa, cpBuf, nBufReq);
  -        if (res < 0)
  +        if (res < 0 && errno == ETIMEDOUT)
  +            rv = SA_ERR_TMT;
  +        else if (res < 0)
               rv = SA_ERR_SYS;
       }
       else {
  @@ -1240,7 +1614,9 @@
               /* buffer too small at all, so write immediately */
               while (nBufReq > 0) {
                   n = sa_write_raw(sa, cpBuf, nBufReq);
  -                if (n < 0)
  +                if (n < 0 && errno == ETIMEDOUT)
  +                    rv = (res == 0 ? SA_ERR_TMT : SA_OK);
  +                else if (n < 0)
                       rv = (res == 0 ? SA_ERR_SYS : SA_OK);
                   if (n <= 0)
                       break;
  @@ -1264,13 +1640,29 @@
       return rv;
   }
   
  +/* output callback function context for sa_writef() */
  +typedef struct {
  +    sa_t *sa;
  +    sa_rc_t rv;
  +} sa_writef_cb_t;
  +
  +/* output callback function for sa_writef() */
  +static int sa_writef_cb(void *_ctx, const char *buffer, size_t bufsize)
  +{
  +    size_t n;
  +    sa_writef_cb_t *ctx = (sa_writef_cb_t *)_ctx;
  +
  +    if ((ctx->rv = sa_write(ctx->sa, buffer, bufsize, &n)) != SA_OK)
  +        n = -1;
  +    return n;
  +}
  +
   /* write formatted string to socket (convinience function) */
   sa_rc_t sa_writef(sa_t *sa, const char *cpFmt, ...)
   {
       va_list ap;
       size_t n;
  -    char caBuf[1024];
  -    sa_rc_t rv;
  +    sa_writef_cb_t ctx;
   
       /* argument sanity check(s) */
       if (sa == NULL || cpFmt == NULL)
  @@ -1286,13 +1678,12 @@
   
       /* format string into temporary buffer */
       va_start(ap, cpFmt);
  -    n = sa_mvsnprintf(caBuf, sizeof(caBuf), cpFmt, ap);
  +    ctx.sa = sa;
  +    ctx.rv = SA_OK;
  +    n = sa_mvxprintf(sa_writef_cb, &ctx, cpFmt, ap);
       va_end(ap);
   
  -    /* write result buffer to socket */
  -    rv = sa_write(sa, caBuf, n, &n);
  -
  -    return rv;
  +    return ctx.rv;
   }
   
   /* flush write/outgoing I/O buffer */
  @@ -1318,7 +1709,9 @@
       if (sa->nWriteSize > 0) {
           while (sa->nWriteLen > 0) {
               n = sa_write_raw(sa, sa->cpWriteBuf, sa->nWriteLen);
  -            if (n < 0)
  +            if (n < 0 && errno == ETIMEDOUT)
  +                rv = SA_ERR_TMT;
  +            else if (n < 0)
                   rv = SA_ERR_SYS;
               if (n <= 0)
                   break;
  @@ -1393,11 +1786,12 @@
   
       /* if timeout is enabled, perform explicit/smart blocking instead 
          of implicitly/hard blocking in the recvfrom(2) system call */
  -    if (sa->bTimeout) {
  +    if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_READ])) {
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
           do {
  -            n = select(sa->fdSocket+1, &fds, NULL, NULL, &sa->tvTimeout);
  +            n = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &fds, NULL, NULL, 
  +                             &sa->tvTimeout[SA_TIMEOUT_READ]);
           } while (n == -1 && errno == EINTR);
           if (n == 0) 
               errno = ETIMEDOUT;
  @@ -1407,8 +1801,8 @@
   
       /* perform receive operation on underlying socket */
       sa_len = sizeof(sa_buf);
  -    if ((n = recvfrom(sa->fdSocket, buf, buflen, 0, 
  -                      (struct sockaddr *)&sa_buf, &sa_len)) == -1)
  +    if ((n = SA_SC_CALL_6(sa, recvfrom, sa->fdSocket, buf, buflen, 0, 
  +                          (struct sockaddr *)&sa_buf, &sa_len)) == -1)
           return SA_ERR_SYS;
   
       /* create result address object */
  @@ -1448,11 +1842,12 @@
   
       /* if timeout is enabled, perform explicit/smart blocking instead 
          of implicitly/hard blocking in the sendto(2) system call */
  -    if (sa->bTimeout) {
  +    if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_WRITE])) {
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
           do {
  -            n = select(sa->fdSocket+1, NULL, &fds, NULL, &sa->tvTimeout);
  +            n = SA_SC_CALL_5(sa, select, sa->fdSocket+1, NULL, &fds, NULL, 
  +                             &sa->tvTimeout[SA_TIMEOUT_WRITE]);
           } while (n == -1 && errno == EINTR);
           if (n == 0) 
               errno = ETIMEDOUT;
  @@ -1461,7 +1856,7 @@
       }
   
       /* perform send operation on underlying socket */
  -    if ((n = sendto(sa->fdSocket, buf, buflen, 0, raddr->saBuf, raddr->slBuf)) == -1)
  +    if ((n = SA_SC_CALL_6(sa, sendto, sa->fdSocket, buf, buflen, 0, raddr->saBuf, raddr->slBuf)) == -1)
           return SA_ERR_SYS;
   
       /* pass actual number of sent bytes to caller */
  @@ -1469,5 +1864,24 @@
           *bufdone = n;
   
       return SA_OK;
  +}
  +
  +/* return error string */
  +char *sa_error(sa_rc_t rv)
  +{
  +    char *sz;
  +
  +    /* translate result value into corresponding string */
  +    if      (rv == SA_OK)      sz = "Everything Ok";
  +    else if (rv == SA_ERR_ARG) sz = "Invalid Argument";
  +    else if (rv == SA_ERR_USE) sz = "Invalid Use Or Context";
  +    else if (rv == SA_ERR_MEM) sz = "Not Enough Memory";
  +    else if (rv == SA_ERR_MTC) sz = "Matching Failed";
  +    else if (rv == SA_ERR_EOF) sz = "End Of Communication";
  +    else if (rv == SA_ERR_TMT) sz = "Communication Timeout";
  +    else if (rv == SA_ERR_SYS) sz = "Operating System Error";
  +    else if (rv == SA_ERR_INT) sz = "Internal Error";
  +    else                       sz = "Invalid Result Code";
  +    return sz;
   }
   
  Index: ossp-pkg/l2/l2_ut_sa.h
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 l2_ut_sa.h
  --- ossp-pkg/l2/l2_ut_sa.h	2001/10/06 14:33:09	1.9
  +++ ossp-pkg/l2/l2_ut_sa.h	2001/10/10 15:58:27	1.10
  @@ -1,7 +1,8 @@
   /*
   **  SA - OSSP Socket Abstraction Library
  -**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP SA, a socket abstraction library which
   **  can be found at http://www.ossp.org/pkg/sa/.
  @@ -37,6 +38,14 @@
   #include <sys/types.h>
   #include <sys/socket.h>
   
  +/* include optional Autoconf header */
  +#include "l2_config.h"
  +
  +/* fallback for POSIX socklen_t */
  +#if defined(HAVE_CONFIG_H) && !defined(HAVE_SOCKLEN_T)
  +#define socklen_t int
  +#endif
  +
   /* embedding support */
   #ifdef SA_PREFIX
   #if defined(__STDC__) || defined(__cplusplus)
  @@ -95,15 +104,43 @@
   
   /* return codes */
   typedef enum {
  -    SA_OK,      /* everything ok */
  -    SA_ERR_ARG, /* invalid argument (wrong parameter) */
  -    SA_ERR_USE, /* invalid use (wrong context) */
  -    SA_ERR_MEM, /* out of memory */
  -    SA_ERR_SYS, /* system error (see errno) */
  -    SA_ERR_EOF, /* end of file/socket communication */
  -    SA_ERR_INT  /* internal error */
  +    SA_OK,      /* Everything Ok          */
  +    SA_ERR_ARG, /* Invalid Argument       */
  +    SA_ERR_USE, /* Invalid Use Or Context */
  +    SA_ERR_MEM, /* Not Enough Memory      */
  +    SA_ERR_MTC, /* Matching Failed        */
  +    SA_ERR_EOF, /* End Of Communication   */
  +    SA_ERR_TMT, /* Communication Timeout  */
  +    SA_ERR_SYS, /* Operating System Error */
  +    SA_ERR_INT  /* Internal Error         */
   } sa_rc_t;
   
  +/* list of timeouts */
  +typedef enum {
  +    SA_TIMEOUT_ALL      = -1,
  +    SA_TIMEOUT_ACCEPT   = 0,
  +    SA_TIMEOUT_CONNECT  = 1,
  +    SA_TIMEOUT_READ     = 2,
  +    SA_TIMEOUT_WRITE    = 3
  +} sa_timeout_t;
  +
  +/* list of buffers */
  +typedef enum {
  +    SA_BUFFER_READ,
  +    SA_BUFFER_WRITE
  +} sa_buffer_t;
  +
  +/* list of system calls */
  +typedef enum {
  +    SA_SYSCALL_CONNECT,
  +    SA_SYSCALL_ACCEPT,
  +    SA_SYSCALL_SELECT,
  +    SA_SYSCALL_READ,
  +    SA_SYSCALL_WRITE,
  +    SA_SYSCALL_RECVFROM,
  +    SA_SYSCALL_SENDTO
  +} sa_syscall_t;
  +
   /* address object operations */
   sa_rc_t sa_addr_create  (sa_addr_t **saa);
   sa_rc_t sa_addr_destroy (sa_addr_t *saa);
  @@ -113,6 +150,7 @@
   sa_rc_t sa_addr_s2a     (sa_addr_t *saa, const struct sockaddr *sabuf, socklen_t salen);
   sa_rc_t sa_addr_a2u     (sa_addr_t *saa, char **uri);
   sa_rc_t sa_addr_a2s     (sa_addr_t *saa, struct sockaddr **sabuf, socklen_t *salen);
  +sa_rc_t sa_addr_match   (sa_addr_t *saa1, sa_addr_t *saa2, int prefixlen);
   
   /* socket object operations */
   sa_rc_t sa_create       (sa_t **sa);
  @@ -120,8 +158,9 @@
   
   /* socket parameter operations */
   sa_rc_t sa_type         (sa_t *sa, sa_type_t type);
  -sa_rc_t sa_timeout      (sa_t *sa, long sec, long usec);
  -sa_rc_t sa_buffers      (sa_t *sa, size_t rsize, size_t wsize);
  +sa_rc_t sa_timeout      (sa_t *sa, sa_timeout_t id, long sec, long usec);
  +sa_rc_t sa_buffer       (sa_t *sa, sa_buffer_t  id, size_t size);
  +sa_rc_t sa_syscall      (sa_t *sa, sa_syscall_t id, void (*fptr)(), void *fctx);
   
   /* socket connection operations */
   sa_rc_t sa_bind         (sa_t *sa, sa_addr_t *laddr);
  @@ -143,6 +182,14 @@
   /* socket input/output operations (datagram communication) */
   sa_rc_t sa_recv         (sa_t *sa, char *buf, size_t buflen, size_t *bufdone, sa_addr_t **raddr);
   sa_rc_t sa_send         (sa_t *sa, const char *buf, size_t buflen, size_t *bufdone, sa_addr_t *raddr);
  +
  +/* error handling operations */
  +char   *sa_error        (sa_rc_t rv);
  +
  +/* cleanup */
  +#if defined(HAVE_CONFIG_H) && !defined(HAVE_SOCKLEN_T)
  +#undef socklen_t
  +#endif
   
   #endif /* __SA_H__ */
   

From ossp-cvs-owner@ossp.org  Wed Oct 10 21:32:31 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9AJWUV19949; Wed, 10 Oct 2001 21:32:30 +0200 (CEST)
Date: Wed, 10 Oct 2001 21:32:30 +0200 (CEST)
Message-Id: <200110101932.f9AJWUV19949@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa acconfig.h sa.ac sa.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   10-Oct-2001 21:32:30
  Branch: HEAD                             Handle: 2001101020322900

  Modified files:
    ossp-pkg/sa             acconfig.h sa.ac sa.c

  Log:
    support for ssize_t fallback

  Summary:
    Revision    Changes     Path
    1.2         +2  -0      ossp-pkg/sa/acconfig.h
    1.6         +1  -0      ossp-pkg/sa/sa.ac
    1.30        +18 -13     ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/acconfig.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 acconfig.h
  --- ossp-pkg/sa/acconfig.h	2001/10/08 14:47:30	1.1
  +++ ossp-pkg/sa/acconfig.h	2001/10/10 19:32:29	1.2
  @@ -2,3 +2,5 @@
   /* whether socklen_t exists */
   #undef HAVE_SOCKLEN_T
   
  +/* whether ssize_t exists */
  +#undef HAVE_SSSIZE_T
  Index: ossp-pkg/sa/sa.ac
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 sa.ac
  --- ossp-pkg/sa/sa.ac	2001/10/08 15:01:26	1.5
  +++ ossp-pkg/sa/sa.ac	2001/10/10 19:32:29	1.6
  @@ -73,5 +73,6 @@
   
       dnl # check for network/socket size type
       SA_CHECK_TYPEDEF(socklen_t, sys/socket.h)
  +    SA_CHECK_TYPEDEF(ssize_t, sys/types.h)
   ])
   
  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 sa.c
  --- ossp-pkg/sa/sa.c	2001/10/10 15:40:00	1.29
  +++ ossp-pkg/sa/sa.c	2001/10/10 19:32:29	1.30
  @@ -53,6 +53,24 @@
   /* include own API header */
   #include "sa.h"
   
  +/* boolean values */
  +#ifndef FALSE
  +#define FALSE (0)
  +#endif
  +#ifndef TRUE
  +#define TRUE  (!FALSE)
  +#endif
  +
  +/* backward compatibility for AF_LOCAL */
  +#if !defined(AF_LOCAL) && defined(AF_UNIX)
  +#define AF_LOCAL AF_UNIX
  +#endif
  +
  +/* backward compatibility for ssize_t */
  +#if defined(HAVE_CONFIG_H) && !defined(HAVE_SSIZE_T)
  +#define ssize_t long
  +#endif
  +
   /* system call structure declaration macros */
   #define SA_SC_DECLARE_0(rc_t, fn) \
       struct { \
  @@ -180,22 +198,9 @@
       socklen_t        slBuf;            /* the length of "struct sockaddr_xx" */
   };
   
  -/* boolean values */
  -#ifndef FALSE
  -#define FALSE (0)
  -#endif
  -#ifndef TRUE
  -#define TRUE  (!FALSE)
  -#endif
  -
   /* handy struct timeval check */
   #define SA_TVISZERO(tv) \
       ((tv).tv_sec == 0 && (tv).tv_usec == 0)
  -
  -/* backward compatibility for AF_LOCAL */
  -#if !defined(AF_LOCAL) && defined(AF_UNIX)
  -#define AF_LOCAL AF_UNIX
  -#endif
   
   /* convert Internet address from presentation to network format */
   static int sa_inet_pton(int family, const char *strptr, void *addrptr)

From ossp-cvs-owner@ossp.org  Wed Oct 10 21:32:59 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9AJWvl20284; Wed, 10 Oct 2001 21:32:57 +0200 (CEST)
Date: Wed, 10 Oct 2001 21:32:57 +0200 (CEST)
Message-Id: <200110101932.f9AJWvl20284@ossp.org>
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   10-Oct-2001 21:32:57
  Branch: HEAD                             Handle: 2001101020325700

  Modified files:
    ossp-pkg/sa             sa.pod

  Log:
    more documemtation

  Summary:
    Revision    Changes     Path
    1.13        +74 -27     ossp-pkg/sa/sa.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.pod
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 sa.pod
  --- ossp-pkg/sa/sa.pod	2001/10/10 09:21:27	1.12
  +++ ossp-pkg/sa/sa.pod	2001/10/10 19:32:57	1.13
  @@ -101,56 +101,77 @@
   
   =head1 DESCRIPTION
   
  -B<OSSP sa> is an abstraction library for the Unix socket interface
  -featuring stream and datagram oriented communication over Unix Domain
  -and Internet Domain sockets.
  +B<OSSP sa> is an abstraction library for the Unix I<Socket> networking
  +interface featuring stream and datagram oriented communication over
  +I<Unix Domain> and I<Internet Domain> (TCP and UDP) sockets.
   
   It provides the following key features:
   
   =over 4
   
  +=item B<Stand-Alone, Self-Contained, Embeddable>
  +
  +Although there are various Open Source libraries available which provide
  +a similar abstraction approach, they all either lack important features
  +or unfortunately depend on other companion libraries. B<OSSP sa> fills
  +this gap by providing all important features (see following points) as a
  +stand-alone and fully self-contained library. This way B<OSSP sa> can be
  +trivially embedded as a sub-library into other libraries. It especially
  +provides additional support for namespace-safe embedding of its API in
  +order to avoid symbol conflicts (see C<SA_PREFIX> in F<sa.h>).
  +
   =item B<Address Abstraction>
   
  -Most of the uglyness in the Unix socket API is the necessarity to have
  -to deal with the various address structures (C<struct sockaddr_xx>)
  +Most of the uglyness in the Unix I<Socket> API is the necessarity to
  +have to deal with the various address structures (C<struct sockaddr_xx>)
   which exist because of both the different communication types and
   addressing schemes. B<OSSP sa> fully hides this by providing an abstract
  -and opaque address type (C<sa_addr_t>) together with four utility
  -functions which allow one to convert from the traditional C<struct
  -sockaddr> or URI specification to the C<sa_addr_t> and vice versa.
  +and opaque address type (C<sa_addr_t>) together with utility functions
  +which allow one to convert from the traditional C<struct sockaddr> or
  +URI specification to the C<sa_addr_t> and vice versa without having to
  +deal with special cases related to the underlying particular C<struct
  +sockaddr_xx>. B<OSSP sa> support I<Unix Domain> and both IPv4 and IPv6
  +I<Internet Domain> addressing.
   
   =item B<Type Abstraction>
   
  -Some other subtle details in the socket API make the life hard in
  -practice: C<socklen_t> and C<ssize_t>. These two types originally were
  -(and on some platforms still are) plain integers or unsigned integers
  -while POSIX later introduced own types for them. This is nasty, because
  -for full backward compatibility and type-correct API usage, every
  +Some other subtle details in the Unix I<Socket> API make the life hard
  +in practice: C<socklen_t> and C<ssize_t>. These two types originally
  +were (and on some platforms still are) plain integers or unsigned
  +integers while POSIX later introduced own types for them (and even
  +revised these types after some time again). This is nasty, because
  +for 100% type-correct API usage (especially important on 64-bit
  +machines where pointers to different integer types make trouble), every
   application has to check whether the newer types exists and if not
   provide own definitions which map to the still actually used integer
  -type on the underlying platform. B<OSSP sa> hides all this in its API.
  +type on the underlying platform. B<OSSP sa> hides most of this in its
  +API and for C<socklen_t> provides a backward-compatibility definition.
  +Instead of C<ssize_t> it uses C<size_t> because B<OSSP sa> does not use
  +traditional Unix return code semantics.
   
   =item B<I/O Timeouts>
   
  -Each I/O function in B<OSSP sa> is aware of a central timeout (set
  -by sa_timeout(3)), i.e., all I/O operations return C<SA_ERR_SYS>
  -and C<errno> set to C<ETIMEDOUT> if this timeout expired before the
  -operation was able to succeed. This allows one to easily program
  -less-blocking network services.
  +Each I/O function in B<OSSP sa> is aware of timeouts (set by
  +sa_timeout()), i.e., all I/O operations return C<SA_ERR_TMT> if the
  +timeout expired before the I/O operation was able to succeed. This
  +allows one to easily program less-blocking network services. B<OSSP
  +sa> internally implements these timeouts either through the
  +C<SO_{SND,RCV}TIMEO> feature on more modern I<Socket> implementations
  +or through traditional select(2). This way high performance is achieved
  +on modern platforms while the full functionality still is available on
  +older platforms.
   
   =item B<I/O Stream Buffering>
   
   If B<OSSP sa> is used for stream communication, internally all I/O
   operations can be performed through input and/or output buffers (set
  -by sa_buffers(3)) for achieving higher I/O performance by doing I/O
  -operations on larger aggregated messages.
  -
  -=item B<Convinience I/O Functions>
  +by sa_buffer()) for achieving higher I/O performance by doing I/O
  +operations on larger aggregated messages and with less system calls.
  +Additionally if B<OSSP sa> is used for stream communication, for
  +convinience reasons line-oriented reading (sa_readln()) and formatted
  +writing (sa_writef()) is provided, modelled after STDIO's fgets(3) and
  +fprintf(3). Both features fully leverage from the I/O buffering.
   
  -If B<OSSP sa> is used for stream communication, for convinience reasons
  -line-oriented reading (sa_readln(3)) and formated writing (sa_writef(3))
  -is provided, modelled after STDIO's fgets(3) and fprintf(3).
  -
   =back
   
   =head1 DATA TYPES
  @@ -188,8 +209,12 @@
   
   =item sa_rc_t B<sa_addr_create>(sa_addr_t **I<saa>);
   
  +Create a socket address abstraction object.
  +
   =item sa_rc_t B<sa_addr_destroy>(sa_addr_t *I<saa>);
   
  +Destroy a socket address abstraction object.
  +
   =back
   
   =head2 Address Operations
  @@ -198,13 +223,35 @@
   
   =item sa_rc_t B<sa_addr_u2a>(sa_addr_t *I<saa>, const char *I<uri>, ...);
   
  +Import an address by converting from an URI specification
  +to the corresponding address abstraction. The supported URI
  +syntax is: "C<unix:>I<path>" for I<Unix Domain> addresses and
  +"C<inet://>I<addr>C<:>I<port>" for I<Internet Domain> addresses.
  +I<path> can be an absolute or relative file path to an existing or
  +not-existing file. I<addr> can be an IPv4 address in dotted decimal
  +notation (C<127.0.0.1>), an IPv6 address in colon-seperated (optionally
  +shortended) hexadecimal notation (C<::1>) or a to-be-resolved hostname
  +(C<localhost.example.com>). I<port> has to be a decimal port in the
  +range C<1>...C<65535>.
  +
   =item sa_rc_t B<sa_addr_s2a>(sa_addr_t *I<saa>, const struct sockaddr *I<sabuf>, socklen_t I<salen>);
   
  +Import an address by converting from a tranditional C<struct sockaddr> object to the
  +corresponding address abstraction.
  +
   =item sa_rc_t B<sa_addr_a2u>(sa_addr_t *I<saa>, char **I<uri>);
   
  +Export an address by converting from the
  +address abstraction to the corresponding URI specification.
  +
   =item sa_rc_t B<sa_addr_a2s>(sa_addr_t *I<saa>, struct sockaddr **I<sabuf>, socklen_t *I<salen>);
   
  +Export an address by converting from the
  +address abstraction to the corresponding traditional C<struct sockaddr> object.
  +
   =item sa_rc_t B<sa_addr_match>(sa_addr_t *I<saa1>, sa_addr_t *I<saa2>, size_t I<prefixlen>);
  +
  +Match two address abstractions 
   
   =back
               

From ossp-cvs-owner@ossp.org  Thu Oct 11 10:00:40 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9B80cM05112; Thu, 11 Oct 2001 10:00:38 +0200 (CEST)
Date: Thu, 11 Oct 2001 10:00:38 +0200 (CEST)
Message-Id: <200110110800.f9B80cM05112@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ut_sa.h ossp-pkg/sa sa.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   11-Oct-2001 10:00:38
  Branch: HEAD                             Handle: 2001101109003700

  Modified files:
    ossp-pkg/l2             l2_ut_sa.h
    ossp-pkg/sa             sa.h

  Log:
    updated embedding support for new and renamed functions

  Summary:
    Revision    Changes     Path
    1.11        +4  -1      ossp-pkg/l2/l2_ut_sa.h
    1.23        +4  -1      ossp-pkg/sa/sa.h
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ut_sa.h
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 l2_ut_sa.h
  --- ossp-pkg/l2/l2_ut_sa.h	2001/10/10 15:58:27	1.10
  +++ ossp-pkg/l2/l2_ut_sa.h	2001/10/11 08:00:37	1.11
  @@ -66,11 +66,13 @@
   #define sa_addr_s2a     SA_CONCAT(SA_PREFIX,sa_addr_s2a)
   #define sa_addr_a2u     SA_CONCAT(SA_PREFIX,sa_addr_a2u)
   #define sa_addr_a2s     SA_CONCAT(SA_PREFIX,sa_addr_a2s)
  +#define sa_addr_match   SA_CONCAT(SA_PREFIX,sa_addr_match)
   #define sa_create       SA_CONCAT(SA_PREFIX,sa_create)
   #define sa_destroy      SA_CONCAT(SA_PREFIX,sa_destroy)
   #define sa_type         SA_CONCAT(SA_PREFIX,sa_type)
   #define sa_timeout      SA_CONCAT(SA_PREFIX,sa_timeout)
  -#define sa_buffers      SA_CONCAT(SA_PREFIX,sa_buffers)
  +#define sa_buffer       SA_CONCAT(SA_PREFIX,sa_buffer)
  +#define sa_syscall      SA_CONCAT(SA_PREFIX,sa_syscall)
   #define sa_bind         SA_CONCAT(SA_PREFIX,sa_bind)
   #define sa_connect      SA_CONCAT(SA_PREFIX,sa_connect)
   #define sa_listen       SA_CONCAT(SA_PREFIX,sa_listen)
  @@ -86,6 +88,7 @@
   #define sa_flush        SA_CONCAT(SA_PREFIX,sa_flush)
   #define sa_recv         SA_CONCAT(SA_PREFIX,sa_recv)
   #define sa_send         SA_CONCAT(SA_PREFIX,sa_send)
  +#define sa_error        SA_CONCAT(SA_PREFIX,sa_error)
   #endif
   
   /* socket address abstraction object type */
  Index: ossp-pkg/sa/sa.h
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 sa.h
  --- ossp-pkg/sa/sa.h	2001/10/10 09:21:27	1.22
  +++ ossp-pkg/sa/sa.h	2001/10/11 08:00:37	1.23
  @@ -66,11 +66,13 @@
   #define sa_addr_s2a     SA_CONCAT(SA_PREFIX,sa_addr_s2a)
   #define sa_addr_a2u     SA_CONCAT(SA_PREFIX,sa_addr_a2u)
   #define sa_addr_a2s     SA_CONCAT(SA_PREFIX,sa_addr_a2s)
  +#define sa_addr_match   SA_CONCAT(SA_PREFIX,sa_addr_match)
   #define sa_create       SA_CONCAT(SA_PREFIX,sa_create)
   #define sa_destroy      SA_CONCAT(SA_PREFIX,sa_destroy)
   #define sa_type         SA_CONCAT(SA_PREFIX,sa_type)
   #define sa_timeout      SA_CONCAT(SA_PREFIX,sa_timeout)
  -#define sa_buffers      SA_CONCAT(SA_PREFIX,sa_buffers)
  +#define sa_buffer       SA_CONCAT(SA_PREFIX,sa_buffer)
  +#define sa_syscall      SA_CONCAT(SA_PREFIX,sa_syscall)
   #define sa_bind         SA_CONCAT(SA_PREFIX,sa_bind)
   #define sa_connect      SA_CONCAT(SA_PREFIX,sa_connect)
   #define sa_listen       SA_CONCAT(SA_PREFIX,sa_listen)
  @@ -86,6 +88,7 @@
   #define sa_flush        SA_CONCAT(SA_PREFIX,sa_flush)
   #define sa_recv         SA_CONCAT(SA_PREFIX,sa_recv)
   #define sa_send         SA_CONCAT(SA_PREFIX,sa_send)
  +#define sa_error        SA_CONCAT(SA_PREFIX,sa_error)
   #endif
   
   /* socket address abstraction object type */

From ossp-cvs-owner@ossp.org  Thu Oct 11 10:01:39 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9B81b405218; Thu, 11 Oct 2001 10:01:37 +0200 (CEST)
Date: Thu, 11 Oct 2001 10:01:37 +0200 (CEST)
Message-Id: <200110110801.f9B81b405218@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   11-Oct-2001 10:01:37
  Branch: HEAD                             Handle: 2001101109013700

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c

  Log:
    fixed typo in usage. undo separator for undo-ed l2

  Summary:
    Revision    Changes     Path
    1.78        +2  -2      ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.77 -r1.78 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/09 20:11:05	1.77
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/11 08:01:37	1.78
  @@ -206,7 +206,7 @@
               "[-K] "
               "[-P pidfile] "
               "[-a addr/mask[,addr/mask[,...]] "
  -            "[-b addr[:port]|-|path]
  +            "[-b addr[:port]|-|path] "
               "[-c addr[:port]] "
               "[-d addr[:port][,addr[:port], ...]] "
               "[-g groupmode] "
  @@ -623,7 +623,7 @@
                   else
                       ctx->option_logfile = strdup("logfile");
   
  -                if (l2_util_s2l(optarg, strlen(optarg), &ctx->option_levelmask) != L2_OK) {
  +                if (l2_util_s2l(optarg, strlen(optarg), ',', &ctx->option_levelmask) != L2_OK) {
                       fprintf(stderr, "%s:Error: invalid level \"%s\" to option -l\n", ctx->progname, optarg);
                       CU(ERR_EXECUTION);
                   }

From ossp-cvs-owner@ossp.org  Thu Oct 11 10:02:17 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9B82GR05299; Thu, 11 Oct 2001 10:02:16 +0200 (CEST)
Date: Thu, 11 Oct 2001 10:02:16 +0200 (CEST)
Message-Id: <200110110802.f9B82GR05299@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 Makefile.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   11-Oct-2001 10:02:16
  Branch: HEAD                             Handle: 2001101109021600

  Modified files:
    ossp-pkg/l2             Makefile.in

  Log:
    make depend

  Summary:
    Revision    Changes     Path
    1.26        +6  -6      ossp-pkg/l2/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 Makefile.in
  --- ossp-pkg/l2/Makefile.in	2001/10/04 14:58:29	1.25
  +++ ossp-pkg/l2/Makefile.in	2001/10/11 08:02:16	1.26
  @@ -300,18 +300,18 @@
   l2_channel.o: l2_channel.c l2.h l2_p.h l2_config.h l2_ut_pcre.h l2_ut_sa.h
   l2_ch_fd.o: l2_ch_fd.c l2.h
   l2_ch_file.o: l2_ch_file.c l2.h
  -l2_ch_pipe.o: l2_ch_pipe.c l2.h
  -l2_ch_syslog.o: l2_ch_syslog.c l2.h
  +l2_ch_pipe.o: l2_ch_pipe.c l2.h l2_p.h l2_config.h l2_ut_pcre.h l2_ut_sa.h
  +l2_ch_syslog.o: l2_ch_syslog.c l2.h l2_p.h l2_config.h l2_ut_pcre.h l2_ut_sa.h
   l2_ch_socket.o: l2_ch_socket.c l2.h l2_p.h l2_config.h l2_ut_pcre.h l2_ut_sa.h
   l2_ch_smtp.o: l2_ch_smtp.c l2.h l2_p.h l2_config.h l2_ut_pcre.h l2_ut_sa.h
   l2_ch_null.o: l2_ch_null.c l2.h
  -l2_ch_filter.o: l2_ch_filter.c l2.h
  +l2_ch_filter.o: l2_ch_filter.c l2.h l2_ut_pcre.h
   l2_ch_prefix.o: l2_ch_prefix.c l2.h
  -l2_ch_buffer.o: l2_ch_buffer.c l2.h
  +l2_ch_buffer.o: l2_ch_buffer.c l2.h l2_p.h l2_config.h l2_ut_pcre.h l2_ut_sa.h
   l2_ut_format.o: l2_ut_format.c l2.h l2_p.h l2_config.h l2_ut_pcre.h l2_ut_sa.h
   l2_ut_param.o: l2_ut_param.c l2.h l2_p.h l2_config.h l2_ut_pcre.h l2_ut_sa.h
  -l2_ut_pcre.o: l2_ut_pcre.c l2_ut_pcre.h l2_ut_pcre_tab.c
  +l2_ut_pcre.o: l2_ut_pcre.c l2_ut_pcre.h l2_ut_pcre.tab
   l2_ut_level.o: l2_ut_level.c l2.h l2_p.h l2_config.h l2_ut_pcre.h l2_ut_sa.h
   l2_ut_fmtcb.o: l2_ut_fmtcb.c l2.h
  -l2_ut_sa.o: l2_ut_sa.c l2_p.h l2.h l2_config.h l2_ut_pcre.h l2_ut_sa.h
  +l2_ut_sa.o: l2_ut_sa.c l2_config.h l2_ut_sa.h
   l2_version.o: l2_version.c l2_version.c

From ossp-cvs-owner@ossp.org  Thu Oct 11 11:28:54 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9B9Sr115054; Thu, 11 Oct 2001 11:28:53 +0200 (CEST)
Date: Thu, 11 Oct 2001 11:28:53 +0200 (CEST)
Message-Id: <200110110928.f9B9Sr115054@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp NEWS
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   11-Oct-2001 11:28:53
  Branch: HEAD                             Handle: 2001101110285200

  Modified files:
    ossp-pkg/lmtp2nntp      NEWS

  Log:
    prepare NEWS for release (assume version will be v1.1.0)

  Summary:
    Revision    Changes     Path
    1.4         +15 -15     ossp-pkg/lmtp2nntp/NEWS
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/NEWS
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 NEWS
  --- ossp-pkg/lmtp2nntp/NEWS	2001/10/09 10:19:12	1.3
  +++ ossp-pkg/lmtp2nntp/NEWS	2001/10/11 09:28:52	1.4
  @@ -10,21 +10,21 @@
   
     NEWS
   
  -  This is the initial public release. Thanks to Cable & Wireless Deutschland
  -  GmbH for supporting open source software. Those folks who tested and
  -  implemented the internal 0.9.x releases please review the options. Both
  -  names and functionality has been changed!
  +  This is the first update to the initial public release. Thanks to Cable &
  +  Wireless Deutschland GmbH for supporting open source software. Those folks
  +  who used previous versions please review the options. Not only was
  +  functionality added but some options were renamed and one was removed!
   
  -* -D neu
  -* -k -> -K
  -* -p -> -P
  -* -b -> -c
  -* -a -> -b plus -
  -+ -a neu
  -* -d -> -o
  -* -h -> -d
  -+ -t name=value,...
  -* -w weg
  +    v1.0.0                  v1.1.0
   
  -FIXME
  +    n/a                     -D (daemonize)
  +    n/a                     -K (kill daemon)
  +    n/a                     -P (pidfile for daemon)
  +    n/a                     -a (LMTP daemon ACL)
  +    n/a                     -b (LMTP daemon bind)
  +    -b (bind)           ->  -c (NNTP client bind)
  +    -h (host)           ->  -d (NNTP client destination)
  +    -d (deliverymode)   ->  -o (operationmode)
  +    n/a                     -t (timeouts)
  +    -w (waittime)       ->  n/a, replace with -t nntp:connect=
   

From ossp-cvs-owner@ossp.org  Thu Oct 11 11:35:40 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9B9ZdB16039; Thu, 11 Oct 2001 11:35:39 +0200 (CEST)
Date: Thu, 11 Oct 2001 11:35:39 +0200 (CEST)
Message-Id: <200110110935.f9B9ZdB16039@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp INSTALL
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   11-Oct-2001 11:35:39
  Branch: HEAD                             Handle: 2001101110353900

  Modified files:
    ossp-pkg/lmtp2nntp      INSTALL

  Log:
    prepare INSTALL for release

  Summary:
    Revision    Changes     Path
    1.9         +17 -19     ossp-pkg/lmtp2nntp/INSTALL
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/INSTALL
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 INSTALL
  --- ossp-pkg/lmtp2nntp/INSTALL	2001/10/09 10:19:12	1.8
  +++ ossp-pkg/lmtp2nntp/INSTALL	2001/10/11 09:35:39	1.9
  @@ -31,18 +31,18 @@
     1. Create a "cf/mailer/lmtp2nntp.m4" macro file with the following contents:
   
        | PUSHDIVERT(-1)
  -     | _DEFIFNOT(`LMTP2NNTP_MAILER_PATH',         `/usr/local/bin/lmtp2nntp')
  -     | _DEFIFNOT(`LMTP2NNTP_MAILER_FLAGS',        `mDFMuXz')
  -     | _DEFIFNOT(`LMTP2NNTP_MAILER_ARGS',         `')
  -     | _DEFIFNOT(`LMTP2NNTP_MAILER_BINDADDR',     '0.0.0.0')
  -     | _DEFIFNOT(`LMTP2NNTP_MAILER_OPERATIONMODE',`post')
  -     | _DEFIFNOT(`LMTP2NNTP_MAILER_GROUPMODE',    `envelope')
  -     | _DEFIFNOT(`LMTP2NNTP_MAILER_MAILFROM',     `^.+@(?:[^.]+\.)+[^.]+$')
  -     | _DEFIFNOT(`LMTP2NNTP_MAILER_NODENAME',     `confDOMAIN_NAME')
  -     | _DEFIFNOT(`LMTP2NNTP_MAILER_SIZE',         `800000')
  -     | _DEFIFNOT(`LMTP2NNTP_MAILER_LOGLEVEL',     `notice:/var/log/lmtp2nntp')
  -     | _DEFIFNOT(`LMTP2NNTP_MAILER_WAITTIME',     `60')
  -     | _DEFIFNOT(`LMTP2NNTP_MAILER_NEWSGROUP',    `\*')
  +     | _DEFIFNOT(`LMTP2NNTP_MAILER_PATH',          `/usr/local/bin/lmtp2nntp')
  +     | _DEFIFNOT(`LMTP2NNTP_MAILER_FLAGS',         `mDFMuXz')
  +     | _DEFIFNOT(`LMTP2NNTP_MAILER_ARGS',          `')
  +     | _DEFIFNOT(`LMTP2NNTP_MAILER_CLIENTBIND',    `0.0.0.0')
  +     | _DEFIFNOT(`LMTP2NNTP_MAILER_GROUPMODE',     `envelope')
  +     | _DEFIFNOT(`LMTP2NNTP_MAILER_LOGLEVEL',      `notice:/var/log/lmtp2nntp')
  +     | _DEFIFNOT(`LMTP2NNTP_MAILER_MAILFROM',      `^.+@(?:[^.]+\.)+[^.]+$')
  +     | _DEFIFNOT(`LMTP2NNTP_MAILER_NODENAME',      `confDOMAIN_NAME')
  +     | _DEFIFNOT(`LMTP2NNTP_MAILER_OPERATIONMODE', `post')
  +     | _DEFIFNOT(`LMTP2NNTP_MAILER_SIZE',          `800000')
  +     | _DEFIFNOT(`LMTP2NNTP_MAILER_TIMEOUT',       `nntp:connect=60')
  +     | _DEFIFNOT(`LMTP2NNTP_MAILER_NEWSGROUP',     `\*')
        | POPDIVERT
        |   
        | #########################################
  @@ -53,18 +53,16 @@
        |             S=EnvFromSMTP/HdrFromSMTP, R=MasqSMTP, E=\r\n,
        |             L=990, T=DNS/RFC822/SMTP, M=LMTP2NNTP_MAILER_MAX,
        |             A=lmtp2nntp LMTP2NNTP_MAILER_ARGS dnl
  -     |                         -b LMTP2NNTP_MAILER_BINDADDR dnl
  -     |                         -o LMTP2NNTP_MAILER_OPERATIONMODE dnl
  +     |                         -c LMTP2NNTP_MAILER_CLIENTBIND dnl
  +     |                         -d $h dnl
        |                         -g LMTP2NNTP_MAILER_GROUPMODE dnl
  -     |                         -h $h dnl
  +     |                         -l LMTP2NNTP_MAILER_LOGLEVEL dnl
        |                         -m LMTP2NNTP_MAILER_MAILFROM dnl
        |                         -n LMTP2NNTP_MAILER_NODENAME dnl
  +     |                         -o LMTP2NNTP_MAILER_OPERATIONMODE dnl
        |                         -s LMTP2NNTP_MAILER_SIZE dnl
  -     |                         -l LMTP2NNTP_MAILER_LOGLEVEL dnl
  -     |                         -w LMTP2NNTP_MAILER_WAITTIME dnl
  +     |                         -t LMTP2NNTP_MAILER_TIMEOUT dnl
        |                         LMTP2NNTP_MAILER_NEWSGROUP
  -
  -     FIXME
   
        This changes nothing in your Sendmail configuration, but just adds
        a new mailer named "lmtp2nntp" to Sendmail.

From ossp-cvs-owner@ossp.org  Thu Oct 11 16:36:31 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9BEaUU47281; Thu, 11 Oct 2001 16:36:30 +0200 (CEST)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 3CF874CE5A5; Thu, 11 Oct 2001 16:36:30 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c
Message-Id: <20011011143630.3CF874CE5A5@visp.engelschall.com>
Date: Thu, 11 Oct 2001 16:36:30 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   11-Oct-2001 16:36:30
  Branch: HEAD                             Handle: 2001101115362900

  Modified files:
    ossp-pkg/sa             sa.c

  Log:
    fix two nasty bugs

  Summary:
    Revision    Changes     Path
    1.31        +2  -1      ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 sa.c
  --- ossp-pkg/sa/sa.c	2001/10/10 19:32:29	1.30
  +++ ossp-pkg/sa/sa.c	2001/10/11 14:36:29	1.31
  @@ -478,7 +478,7 @@
           }
           else
               cp = un.sun_path;
  -        memcpy(un.sun_path, cpPath, n+1);
  +        memcpy(cp, cpPath, n+1);
           un.sun_family = AF_LOCAL;
   
           /* provide results */
  @@ -1201,6 +1201,7 @@
       int n;
       fd_set fds;
       union {
  +        struct sockaddr_un un;
           struct sockaddr_in sa4;
   #ifdef AF_INET6
           struct sockaddr_in6 sa6;

From ossp-cvs-owner@ossp.org  Thu Oct 11 17:12:20 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9BFCJU51678; Thu, 11 Oct 2001 17:12:19 +0200 (CEST)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 9CFE24CE5AF; Thu, 11 Oct 2001 17:12:19 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c
Message-Id: <20011011151219.9CFE24CE5AF@visp.engelschall.com>
Date: Thu, 11 Oct 2001 17:12:19 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   11-Oct-2001 17:12:19
  Branch: HEAD                             Handle: 2001101116121900

  Modified files:
    ossp-pkg/sa             sa.c

  Log:
    - Fix Unix Domain socket handling in case of unbound remote side.
    
    - Simplified family detection in sa_addr_s2a() in order to correctly
      support again the situation of unbound remote Unix Domain sockets.
    
    - Fixed sa_readln() return code semantics by passing through
      sa_read() return value.

  Summary:
    Revision    Changes     Path
    1.32        +18 -32     ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 sa.c
  --- ossp-pkg/sa/sa.c	2001/10/11 14:36:29	1.31
  +++ ossp-pkg/sa/sa.c	2001/10/11 15:12:19	1.32
  @@ -585,13 +585,6 @@
   /* import "struct sockaddr" into address object */
   sa_rc_t sa_addr_s2a(sa_addr_t *saa, const struct sockaddr *sabuf, socklen_t salen)
   {
  -    struct sockaddr_un *un;
  -    struct sockaddr_in *sa4;
  -#ifdef AF_INET6
  -    struct sockaddr_in6 *sa6;
  -#endif
  -    int sf;
  -
       /* argument sanity check(s) */
       if (saa == NULL || sabuf == NULL || salen == 0)
           return SA_ERR_ARG;
  @@ -604,28 +597,8 @@
       memcpy(saa->saBuf, sabuf, salen);
       saa->slBuf = salen;
   
  -    /* resolve family */
  -    sf = 0;
  -    if (sizeof(struct sockaddr_un) == salen) {
  -        un = (struct sockaddr_un *)((void *)sabuf);
  -        if (un->sun_family == AF_LOCAL)
  -            sf = AF_LOCAL;
  -    }
  -    if (sf == 0 && sizeof(struct sockaddr_in) == salen) {
  -        sa4 = (struct sockaddr_in *)((void *)sabuf);
  -        if (sa4->sin_family == AF_INET)
  -            sf = AF_INET;
  -    }
  -#ifdef AF_INET6
  -    if (sf == 0 && sizeof(struct sockaddr_in6) == salen) {
  -        sa6 = (struct sockaddr_in6 *)((void *)sabuf);
  -        if (sa6->sin6_family == AF_INET6)
  -            sf = AF_INET6;
  -    }
  -#endif
  -    if (sf == 0)
  -        return SA_ERR_ARG;
  -    saa->nFamily = sf;
  +    /* remember family */
  +    saa->nFamily = sabuf->sa_family;
   
       return SA_OK;
   }
  @@ -649,7 +622,16 @@
       /* export object contents */
       if (saa->nFamily == AF_LOCAL) {
           un = (struct sockaddr_un *)((void *)saa->saBuf);
  -        sa_msnprintf(uribuf, sizeof(uribuf), "unix:%s", un->sun_path);
  +        if (   (   saa->slBuf >= (socklen_t)(&(((struct sockaddr_un *)0)->sun_path[0]))
  +                && un->sun_path[0] == '\0')
  +            || saa->slBuf < sizeof(struct sockaddr_un))
  +            /* in case the remote side of a Unix Domain socket was not
  +               bound, a "struct sockaddr_un" can occur with a length less
  +               than the expected one. Then there is actually no path at all. 
  +               This has been verified under FreeBSD, Linux and Solaris. */
  +            sa_msnprintf(uribuf, sizeof(uribuf), "unix:/NOT-BOUND");
  +        else
  +            sa_msnprintf(uribuf, sizeof(uribuf), "unix:%s", un->sun_path);
       }
   #ifdef AF_INET6
       else if (saa->nFamily == AF_INET || saa->nFamily == AF_INET6) {
  @@ -1510,6 +1492,7 @@
       char c;
       size_t n;
       size_t res;
  +    sa_rc_t rv;
   
       /* argument sanity check(s) */
       if (sa == NULL || cpBuf == NULL || nBufReq == 0)
  @@ -1527,9 +1510,12 @@
          buffers are enabled, this is not as stupid as it looks at the first
          hand and if buffers are disabled, there is no better solution
          anyway. */
  +    rv = SA_OK;
       res = 0;
       while (res < (nBufReq-1)) {
  -        sa_read(sa, &c, 1, &n);
  +        rv = sa_read(sa, &c, 1, &n);
  +        if (rv != SA_OK)
  +            break;
           if (n <= 0)
               break;
           cpBuf[res++] = c;
  @@ -1542,7 +1528,7 @@
       if (nBufRes != NULL)
           *nBufRes = res;
   
  -    return SA_OK;
  +    return rv;
   }
   
   /* internal raw write operation */

From ossp-cvs-owner@ossp.org  Thu Oct 11 17:20:31 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9BFKUU52974; Thu, 11 Oct 2001 17:20:30 +0200 (CEST)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id A2FFD4CE5B4; Thu, 11 Oct 2001 17:20:30 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c
Message-Id: <20011011152030.A2FFD4CE5B4@visp.engelschall.com>
Date: Thu, 11 Oct 2001 17:20:30 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   11-Oct-2001 17:20:30
  Branch: HEAD                             Handle: 2001101116203000

  Modified files:
    ossp-pkg/sa             sa.c

  Log:
    make prefixlen=0 a real wildcard

  Summary:
    Revision    Changes     Path
    1.33        +5  -1      ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.32 -r1.33 sa.c
  --- ossp-pkg/sa/sa.c	2001/10/11 15:12:19	1.32
  +++ ossp-pkg/sa/sa.c	2001/10/11 15:20:30	1.33
  @@ -690,7 +690,11 @@
       if (saa1 == NULL || saa2 == NULL || prefixlen < -1)
           return SA_ERR_ARG;
   
  -    /* match short circuiting */
  +    /* short circuiting for wildcard matching */
  +    if (prefixlen == 0)
  +        return SA_OK;
  +
  +    /* short circuiting handling different families */
       if (saa1->nFamily != saa2->nFamily)
           return SA_ERR_MTC;
   

From ossp-cvs-owner@ossp.org  Thu Oct 11 17:46:51 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9BFknU56060; Thu, 11 Oct 2001 17:46:49 +0200 (CEST)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 48C824CE5BF; Thu, 11 Oct 2001 17:46:49 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c
Message-Id: <20011011154649.48C824CE5BF@visp.engelschall.com>
Date: Thu, 11 Oct 2001 17:46:49 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   11-Oct-2001 17:46:49
  Branch: HEAD                             Handle: 2001101116464800

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c

  Log:
    flush our work

  Summary:
    Revision    Changes     Path
    1.79        +7  -2      ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.78 -r1.79 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/11 08:01:37	1.78
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/11 15:46:48	1.79
  @@ -940,8 +940,10 @@
           lmtp_destroy(lmtp);
       } else {
           pid = getpid();
  -        if (ctx->option_daemon)
  +        if (ctx->option_daemon) {
               daemonize();
  +            log1(ctx, NOTICE, "daemonized, previous pid[%d]", pid); l2_stream_flush(ctx->l2);
  +        }
           if (ctx->option_pidfile != NULL) {
               if ((fd = fopen(ctx->option_pidfile, "w+")) == NULL)
                   log1(ctx, ERROR, "cannot open pidfile \"%s\" for writing %m", ctx->option_pidfile);
  @@ -950,7 +952,6 @@
                   fclose(fd);
               }
           }
  -        log1(ctx, NOTICE, "startup daemonized, previous pid[%d]", pid); l2_stream_flush(ctx->l2);
   
           sa_timeout(ctx->saAltio, SA_TIMEOUT_ALL,    0, 0);
           sa_timeout(ctx->saAltio, SA_TIMEOUT_ACCEPT, ctx->option_timeout_lmtp_accept, 0);
  @@ -1063,6 +1064,10 @@
               lmtp_destroy(lmtp);
               CU(0);
           }
  +        if (rc == SA_ERR_SYS)
  +            log3(ctx, ERROR, "accept failed: %s: (%d) %s", sa_error(rc), errno, strerror(errno));
  +        else
  +            log1(ctx, ERROR, "accept failed: %s", sa_error(rc));
       }
       CU(0);
   

From ossp-cvs-owner@ossp.org  Fri Oct 12 08:58:56 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9C6wsr60910; Fri, 12 Oct 2001 08:58:54 +0200 (CEST)
Date: Fri, 12 Oct 2001 08:58:54 +0200 (CEST)
Message-Id: <200110120658.f9C6wsr60910@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   12-Oct-2001 08:58:54
  Branch: HEAD                             Handle: 2001101207585400

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c

  Log:
    cleaned ACL logging, moved ACL fake initialization using fprintf before l2
    initalization, changed "any-IP" to IPv4 ACL insertion, prepared for IPv6 fake
    ACL insertion (not working due to IPv6 syntax, possibly in sa)

  Summary:
    Revision    Changes     Path
    1.80        +55 -32     ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.79 -r1.80 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/11 15:46:48	1.79
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/12 06:58:54	1.80
  @@ -760,6 +760,57 @@
           argz_add(&ctx->azGroupargs, &ctx->asGroupargs, argv[i]);
       }
   
  +    /* if no positive ACL exists (option -a) add a wildcard match-all for IPv4 and IPv6 */
  +    bOk = FALSE;
  +    for (i = 0; i < ctx->option_aclc; i++) {
  +        if (!ctx->option_acl[i].not) {
  +            bOk = TRUE;
  +            break;
  +        }
  +    }
  +    if (!bOk) {
  +        if (ctx->option_aclc >= MAXACLS) {
  +            fprintf(stderr, "%s:Error: Too many ACL (%d) using option -a (no space for additional fake IPv4 ACL)\n", ctx->progname, ctx->option_aclc);
  +            CU(ERR_EXECUTION);
  +        }
  +        ctx->option_acl[ctx->option_aclc].acl = "0.0.0.0";
  +        ctx->option_acl[ctx->option_aclc].not = FALSE;
  +        ctx->option_acl[ctx->option_aclc].prefixlen = 0;
  +        if ((rc = sa_addr_create(&ctx->option_acl[ctx->option_aclc].saa)) != SA_OK) {
  +            fprintf(stderr, "%s:Error: Creating fake address failed for -a option (%d)\n", 
  +                    ctx->progname, rc);
  +        }
  +        if ((rc = sa_addr_u2a(ctx->option_acl[ctx->option_aclc].saa, "inet://%s:0", ctx->option_acl[ctx->option_aclc].acl)) != SA_OK) {
  +            fprintf(stderr, "%s:Error: Parsing host address failed for \"%s:0\" (%s)\n", 
  +                    ctx->progname, ctx->option_acl[ctx->option_aclc].acl,
  +                    sa_error(rc));
  +            CU(ERR_EXECUTION);
  +        }
  +        ctx->option_aclc++;
  +    }
  +#if 0 //FIXME IPv6 addr not working
  +    if (!bOk) {
  +        if (ctx->option_aclc >= MAXACLS) {
  +            fprintf(stderr, "%s:Error: Too many ACL (%d) using option -a (no space for additional fake IPv6 ACL)\n", ctx->progname, ctx->option_aclc);
  +            CU(ERR_EXECUTION);
  +        }
  +        ctx->option_acl[ctx->option_aclc].acl = "00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00";
  +        ctx->option_acl[ctx->option_aclc].not = FALSE;
  +        ctx->option_acl[ctx->option_aclc].prefixlen = 0;
  +        if ((rc = sa_addr_create(&ctx->option_acl[ctx->option_aclc].saa)) != SA_OK) {
  +            fprintf(stderr, "%s:Error: Creating fake address failed for -a option (%d)\n", 
  +                    ctx->progname, rc);
  +        }
  +        if ((rc = sa_addr_u2a(ctx->option_acl[ctx->option_aclc].saa, "inet://%s:0", ctx->option_acl[ctx->option_aclc].acl)) != SA_OK) {
  +            fprintf(stderr, "%s:Error: Parsing host address failed for \"%s:0\" (%s)\n", 
  +                    ctx->progname, ctx->option_acl[ctx->option_aclc].acl,
  +                    sa_error(rc));
  +            CU(ERR_EXECUTION);
  +        }
  +        ctx->option_aclc++;
  +    }
  +#endif
  +
       if ((ctx->l2 = l2_stream_create()) == NULL) {
           fprintf(stderr, "%s:Error: logging failed to create stream\n", ctx->progname);
           CU(ERR_EXECUTION);
  @@ -859,34 +910,6 @@
           CU(0);
       }
   
  -    /* if no positive ACL exists (option -a) add a wildcard match-all */
  -    bOk = FALSE;
  -    for (i = 0; i < ctx->option_aclc; i++) {
  -        if (!ctx->option_acl[i].not) {
  -            bOk = TRUE;
  -            break;
  -        }
  -    }
  -    if (!bOk) {
  -        if (ctx->option_aclc >= MAXACLS) {
  -            fprintf(stderr, "%s:Error: Too many ACL (%d) using option -a (no space for additional fake ACL)\n", ctx->progname, ctx->option_aclc);
  -            CU(ERR_EXECUTION);
  -        }
  -        ctx->option_acl[ctx->option_aclc].acl = "0.0.0.0/0[FAKE]";
  -        ctx->option_acl[ctx->option_aclc].not = FALSE;
  -        ctx->option_acl[ctx->option_aclc].prefixlen = 0;
  -        if ((rc = sa_addr_create(&ctx->option_acl[ctx->option_aclc].saa)) != SA_OK) {
  -            fprintf(stderr, "%s:Error: Creating fake address failed for -a option (%d)\n", 
  -                    ctx->progname, rc);
  -        }
  -        if ((rc = sa_addr_u2a(ctx->option_acl[ctx->option_aclc].saa, "inet://0.0.0.0:0")) != SA_OK) {
  -            fprintf(stderr, "%s:Error: Parsing host address failed for \"0.0.0.0:0\" (%d)\n", 
  -                    ctx->progname, rc);
  -            CU(ERR_EXECUTION);
  -        }
  -        ctx->option_aclc++;
  -    }
  -
       catchsignal(0, ctx);
       signal(SIGCHLD, (void(*)())catchsignal);
       signal(SIGHUP,  (void(*)())catchsignal);
  @@ -970,12 +993,12 @@
                   sa_addr_a2u(ctx->option_acl[i].saa, &cpA1);
                   sa_addr_a2u(ctx->saaIO, &cpA2);
                   if (sa_addr_match(ctx->saaIO, ctx->option_acl[i].saa, ctx->option_acl[i].prefixlen) == SA_OK) {
  -                    log4(ctx, TRACE, "positive/inclusive ACL \"%s\" (%s/%d) matching %s: OK", ctx->option_acl[i].acl, cpA1, ctx->option_acl[i].prefixlen, cpA2);
  +                    log4(ctx, TRACE, "positive/inclusive ACL \"%s\" (%s/%d) matches %s: YES (stop comparison)", ctx->option_acl[i].acl, cpA1, ctx->option_acl[i].prefixlen, cpA2);
                       bOk = TRUE;
                       break;
                   }
                   else
  -                    log4(ctx, TRACE, "positive/inclusive ACL \"%s\" (%s/%d) matching %s: FAILED", ctx->option_acl[i].acl, cpA1, ctx->option_acl[i].prefixlen, cpA2);
  +                    log4(ctx, TRACE, "positive/inclusive ACL \"%s\" (%s/%d) matches %s: NO", ctx->option_acl[i].acl, cpA1, ctx->option_acl[i].prefixlen, cpA2);
                   free(cpA1);
                   free(cpA2);
               }
  @@ -988,12 +1011,12 @@
                   sa_addr_a2u(ctx->option_acl[i].saa, &cpA1);
                   sa_addr_a2u(ctx->saaIO, &cpA2);
                   if (sa_addr_match(ctx->saaIO, ctx->option_acl[i].saa, ctx->option_acl[i].prefixlen) == SA_OK) {
  -                    log4(ctx, TRACE, "negative/exclusive ACL \"%s\" (not %s/%d) matching %s: OK (stop)", ctx->option_acl[i].acl, cpA1, ctx->option_acl[i].prefixlen, cpA2);
  +                    log4(ctx, TRACE, "negative/exclusive ACL \"%s\" (not %s/%d) matches %s: YES (stop comparison)", ctx->option_acl[i].acl, cpA1, ctx->option_acl[i].prefixlen, cpA2);
                       bOk = FALSE;
                       break;
                   }
                   else {
  -                    log4(ctx, TRACE, "negative/exclusive ACL \"%s\" (not %s/%d) matching %s: FAILED", ctx->option_acl[i].acl, cpA1, ctx->option_acl[i].prefixlen, cpA2);
  +                    log4(ctx, TRACE, "negative/exclusive ACL \"%s\" (not %s/%d) matches %s: NO", ctx->option_acl[i].acl, cpA1, ctx->option_acl[i].prefixlen, cpA2);
                   }
               }
               if (bOk) {

From ossp-cvs-owner@ossp.org  Fri Oct 12 09:03:47 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9C73kL62217; Fri, 12 Oct 2001 09:03:46 +0200 (CEST)
Date: Fri, 12 Oct 2001 09:03:46 +0200 (CEST)
Message-Id: <200110120703.f9C73kL62217@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   12-Oct-2001 09:03:46
  Branch: HEAD                             Handle: 2001101208034500

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c

  Log:
    removed fprintf(stderr, ...) past l2 initialization

  Summary:
    Revision    Changes     Path
    1.81        +5  -2      ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.80 -r1.81 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/12 06:58:54	1.80
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/12 07:03:45	1.81
  @@ -889,6 +889,9 @@
           fprintf(stderr, "%s:Error: logging failed to log startup message to stream\n", ctx->progname);
           CU(ERR_EXECUTION);
       }
  +    /* from this point on logging is up and running and fprintf(stderr, ...)
  +     * should not be used in the remainder of the code
  +     */
   
       if ((ctx->option_pidfile != NULL) && ctx->option_killflag) {
           if ((fd = fopen(ctx->option_pidfile, "r")) == NULL)
  @@ -932,7 +935,7 @@
           lmtp_io.read   = hook_lmtp_read;
           lmtp_io.write  = hook_lmtp_write;
           if ((lmtp = lmtp_create(&lmtp_io)) == NULL) {
  -            fprintf(stderr, "%s:Error: Unable to initialize LMTP library\n", ctx->progname);
  +            log0(ctx, ERROR, "Unable to initialize LMTP library\n");
               CU(ERR_EXECUTION);
           }
           /*  RFC0821, 4.5.1. MINIMUM IMPLEMENTATION
  @@ -1056,7 +1059,7 @@
               lmtp_io.read   = hook_lmtp_read;
               lmtp_io.write  = hook_lmtp_write;
               if ((lmtp = lmtp_create(&lmtp_io)) == NULL) {
  -                fprintf(stderr, "%s:Error: Unable to initialize LMTP library\n", ctx->progname);
  +                log0(ctx, ERROR, "Unable to initialize LMTP library\n");
                   CU(ERR_EXECUTION);
               }
               /*  RFC0821, 4.5.1. MINIMUM IMPLEMENTATION

From ossp-cvs-owner@ossp.org  Fri Oct 12 09:14:30 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9C7ETH63602; Fri, 12 Oct 2001 09:14:29 +0200 (CEST)
Date: Fri, 12 Oct 2001 09:14:29 +0200 (CEST)
Message-Id: <200110120714.f9C7ETH63602@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   12-Oct-2001 09:14:29
  Branch: HEAD                             Handle: 2001101208142800

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c

  Log:
    child must close listening socket

  Summary:
    Revision    Changes     Path
    1.82        +3  -0      ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.81 -r1.82 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/12 07:03:45	1.81
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/12 07:14:28	1.82
  @@ -1053,6 +1053,9 @@
                   continue;
               }
               log1(ctx, NOTICE, "startup new child process, parent pid[%d]", getppid());
  +
  +            /* child must close listening socket */
  +            sa_destroy(ctx->saAltio); 
               
               /* initialize LMTP context */
               lmtp_io.ctx    = ctx;

From ossp-cvs-owner@ossp.org  Fri Oct 12 09:43:33 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9C7hWn66859; Fri, 12 Oct 2001 09:43:32 +0200 (CEST)
Date: Fri, 12 Oct 2001 09:43:32 +0200 (CEST)
Message-Id: <200110120743.f9C7hWn66859@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c lmtp2nntp.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   12-Oct-2001 09:43:32
  Branch: HEAD                             Handle: 2001101208433100

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c lmtp2nntp.pod

  Log:
    Sending a USR1 signal to the program will flush the logging buffer

  Summary:
    Revision    Changes     Path
    1.83        +25 -17     ossp-pkg/lmtp2nntp/lmtp2nntp.c
    1.28        +4  -0      ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.82 -r1.83 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/12 07:14:28	1.82
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/12 07:43:31	1.83
  @@ -341,16 +341,24 @@
           return;
       }
       if (ctx != NULL) {
  -        if ((sig == SIGHUP) || (sig == SIGINT) || (sig == SIGQUIT))
  -            log1(ctx, NOTICE, "caught signal %d - exit - no more logging", sig);
  -        else if (sig == SIGCHLD) {
  -            log1(ctx, NOTICE, "caught signal %d - wait for child", sig);
  -            pid = wait(NULL);
  -            log2(ctx, NOTICE, "caught signal %d - child [%ld] terminated", sig, (long)pid);
  -            l2_stream_flush(ctx->l2);
  -            return;
  -        } else
  -            log1(ctx, PANIC, "CAUGHT SIGNAL %d - EXIT - NO MORE LOGGING", sig);
  +        switch (sig) {
  +            case SIGCHLD:
  +                log1(ctx, NOTICE, "caught signal %d - wait for child", sig);
  +                pid = wait(NULL);
  +                log2(ctx, NOTICE, "caught signal %d - child [%ld] terminated", sig, (long)pid);
  +                return;
  +            case SIGUSR1:
  +                log1(ctx, NOTICE, "caught signal %d - flush logging buffer", sig);
  +                l2_stream_flush(ctx->l2);
  +                return;
  +            case SIGHUP:
  +            case SIGINT:
  +            case SIGQUIT:
  +                log1(ctx, NOTICE, "caught signal %d - exit - no more logging", sig);
  +                break;
  +            default:
  +                log1(ctx, PANIC, "CAUGHT SIGNAL %d - EXIT - NO MORE LOGGING", sig);
  +        }
           l2_stream_destroy(ctx->l2);
       }
       exit(ERR_EXECUTION);
  @@ -923,7 +931,7 @@
       signal(SIGSEGV, (void(*)())catchsignal);
       signal(SIGSYS,  (void(*)())catchsignal);
       signal(SIGTERM, (void(*)())catchsignal);
  -    signal(SIGUSR1,            SIG_IGN    );
  +    signal(SIGUSR1, (void(*)())catchsignal);
       signal(SIGUSR2,            SIG_IGN    );
   
       /* loop for LMTP protocol with support for alternate io through daemon */
  @@ -968,7 +976,7 @@
           pid = getpid();
           if (ctx->option_daemon) {
               daemonize();
  -            log1(ctx, NOTICE, "daemonized, previous pid[%d]", pid); l2_stream_flush(ctx->l2);
  +            log1(ctx, NOTICE, "daemonized, previous pid[%d]", pid);
           }
           if (ctx->option_pidfile != NULL) {
               if ((fd = fopen(ctx->option_pidfile, "w+")) == NULL)
  @@ -1027,27 +1035,27 @@
                   sa_addr_a2u(ctx->saaIO, &cpA);
                   log1(ctx, TRACE, "connection from %s accepted due to ACL", cpA); 
                   free(cpA);
  -                l2_stream_flush(ctx->l2);
               }
               else {
                   char *cpA;
                   sa_addr_a2u(ctx->saaIO, &cpA);
                   log1(ctx, ERROR, "connection from %s refused due to ACL", cpA); 
                   free(cpA);
  -                l2_stream_flush(ctx->l2);
                   sa_destroy(ctx->saIO);
                   sa_addr_destroy(ctx->saaIO);
                   continue;
               }
   
  -            l2_stream_flush(ctx->l2); /* must flush before fork() */
  +            /* logging buffer must be empty before fork otherwise content is
  +             * duplicated and written twice on next flush */
  +            l2_stream_flush(ctx->l2);
               pid = fork();
               if (pid == -1) {
  -                log0(ctx, ERROR, "daemon cannot spawn child %m"); l2_stream_flush(ctx->l2);
  +                log0(ctx, ERROR, "daemon cannot spawn child %m");
                   continue;
               }
               if (pid != 0) {
  -                log1(ctx, INFO, "daemon forked process, new child pid[%d]", pid); l2_stream_flush(ctx->l2);
  +                log1(ctx, INFO, "daemon forked process, new child pid[%d]", pid);
                   sa_destroy(ctx->saIO);
                   sa_addr_destroy(ctx->saaIO);
                   continue;
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 lmtp2nntp.pod
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/10/09 20:12:30	1.27
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/10/12 07:43:31	1.28
  @@ -210,6 +210,10 @@
   
   =back
   
  +=head1 SIGNALS
  +
  +Sending a USR1 signal to the program will flush the logging buffer.
  +
   =head1 DIAGNOSTICS
   
   If invoked it returns 0 on successful execution (not neccessarily

From ossp-cvs-owner@ossp.org  Fri Oct 12 10:57:53 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9C8vpo76577; Fri, 12 Oct 2001 10:57:51 +0200 (CEST)
Date: Fri, 12 Oct 2001 10:57:51 +0200 (CEST)
Message-Id: <200110120857.f9C8vpo76577@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c lmtp2nntp.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   12-Oct-2001 10:57:51
  Branch: HEAD                             Handle: 2001101209575001

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c lmtp2nntp.pod

  Log:
    added -u uid option

  Summary:
    Revision    Changes     Path
    1.84        +28 -1      ossp-pkg/lmtp2nntp/lmtp2nntp.c
    1.29        +5  -0      ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.83 -r1.84 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/12 07:43:31	1.83
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/12 08:57:50	1.84
  @@ -35,6 +35,7 @@
   #include <sys/types.h>
   #include <sys/wait.h>
   #include <signal.h>
  +#include <pwd.h>
   
   /* third party */
   #include "str.h"
  @@ -151,6 +152,7 @@
       unsigned int    option_levelmask;
       char           *option_pidfile;
       int             option_killflag;
  +    uid_t           option_uid;
       int             option_daemon;
       int             option_aclc;
       struct acl      option_acl[MAXACLS];
  @@ -216,6 +218,7 @@
               "[-o operationmode] "
               "[-s size] "
               "[-t name=sec[,name=sec[,...]] "
  +            "[-u uid] "
               "[-v] "
               "newsgroup [newsgroup ...] "
               "\n",
  @@ -392,6 +395,7 @@
       int           nValue;
       char         *cpAddr;
       char         *cpPrefixLen;
  +    struct passwd *sPasswd;
   
       /* library version check (run-time) */
       if (l2_version.v_hex < L2_VERSION_HEX_REQ) {
  @@ -424,6 +428,7 @@
       ctx->option_levelmask = L2_LEVEL_NONE;
       ctx->option_pidfile = NULL;
       ctx->option_killflag = FALSE;
  +    ctx->option_uid = geteuid();
       ctx->option_daemon = FALSE;
       ctx->l2 = NULL;
       ctx->saaAltio = NULL;
  @@ -466,7 +471,7 @@
        */
   
       /* read in the arguments */
  -    while ((i = getopt(argc, argv, "DKP:a:b:c:d:g:l:m:n:o:s:t:v")) != -1) {
  +    while ((i = getopt(argc, argv, "DKP:a:b:c:d:g:l:m:n:o:s:t:u:v")) != -1) {
           switch (i) {
               case 'D': /*POD [B<-D>] */
                   ctx->option_daemon = TRUE;
  @@ -753,6 +758,22 @@
                   }
                   free(azTimeout);
                   break;
  +            case 'u': /*POD [B<-u> I<uid>] */
  +                if (isdigit((int)optarg[0])) {
  +                    if ((sPasswd = getpwuid((uid_t)atoi(optarg))) == NULL) {
  +                        fprintf(stderr, "%s:Error: uid \"%s\" not found for -u option.\n", ctx->progname, optarg);
  +                        CU(ERR_EXECUTION);
  +                    }
  +                }
  +                else {
  +
  +                    if ((sPasswd = getpwnam(optarg)) == NULL) {
  +                        fprintf(stderr, "%s:Error: loginname \"%s\" not found for -u option.\n", ctx->progname, optarg);
  +                        CU(ERR_EXECUTION);
  +                    }
  +                }
  +                ctx->option_uid = sPasswd->pw_uid;
  +                break;
               case 'v': /*POD [B<-v>] (version)*/
                   fprintf(stdout, "%s\n", lmtp2nntp_version.v_gnu);
                   CU(0);
  @@ -818,6 +839,12 @@
           ctx->option_aclc++;
       }
   #endif
  +
  +    if (setuid(ctx->option_uid) == -1) {
  +        fprintf(stderr, "%s:Error: Setting UID to %d failed: %s\n", 
  +                ctx->progname, ctx->option_uid, strerror(errno));
  +        CU(ERR_EXECUTION);
  +    }
   
       if ((ctx->l2 = l2_stream_create()) == NULL) {
           fprintf(stderr, "%s:Error: logging failed to create stream\n", ctx->progname);
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 lmtp2nntp.pod
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/10/12 07:43:31	1.28
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/10/12 08:57:51	1.29
  @@ -47,6 +47,7 @@
   [B<-o> I<operationmode>]
   [B<-s> I<size>]
   [B<-t> I<name>=I<sec>[,I<name>=I<sec>[,...]]
  +[B<-u> I<uid>]
   [B<-v>]
   I<newsgroup> [I<newsgroup> ...]
   
  @@ -197,6 +198,10 @@
       nntp:connect = 360
       nntp:read    = 60
       nntp:write   = 60
  +
  +=item B<-u> I<uid>
  +
  +UID or login name to resolve to a UID to be set for program execution.
   
   =item B<-v>
   

From ossp-cvs-owner@ossp.org  Fri Oct 12 12:08:59 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9CA8wU84873; Fri, 12 Oct 2001 12:08:58 +0200 (CEST)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id E6BE84CE5F4; Fri, 12 Oct 2001 12:08:57 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO lmtp2nntp.c
Message-Id: <20011012100857.E6BE84CE5F4@visp.engelschall.com>
Date: Fri, 12 Oct 2001 12:08:57 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   12-Oct-2001 12:08:57
  Branch: HEAD                             Handle: 2001101211085700

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO lmtp2nntp.c

  Log:
    Improve -u option and -b (uid/mode on Unix Domain sockets).

  Summary:
    Revision    Changes     Path
    1.38        +3  -0      ossp-pkg/lmtp2nntp/00TODO
    1.85        +70 -18     ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.37 -r1.38 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	2001/09/13 14:24:49	1.37
  +++ ossp-pkg/lmtp2nntp/00TODO	2001/10/12 10:08:57	1.38
  @@ -1,6 +1,9 @@
   
     **** DEVELOPMENT INFORMATION ****
   
  +  option -U currently has to be specified before option -b in order to
  +  set the owner/modes of Unix Domains sockets correctly.
  +
     Proposal for future URL-style logging option syntax
     -L streamlog
     -l syslog:[mask]//[localhost[:port]][/tag=value ...] with /tag=value i.e. facility=local0
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.84 -r1.85 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/12 08:57:50	1.84
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/12 10:08:57	1.85
  @@ -34,6 +34,7 @@
   #include <sys/time.h>
   #include <sys/types.h>
   #include <sys/wait.h>
  +#include <sys/stat.h>
   #include <signal.h>
   #include <pwd.h>
   
  @@ -397,6 +398,10 @@
       char         *cpPrefixLen;
       struct passwd *sPasswd;
   
  +    /* drop effective uid/gid priviledges */
  +    seteuid(getuid());
  +    setegid(getgid());
  +
       /* library version check (run-time) */
       if (l2_version.v_hex < L2_VERSION_HEX_REQ) {
           fprintf(stderr, "require OSSP L2 >= %s, found %s\n", L2_VERSION_STR_REQ, L2_VERSION_STR);
  @@ -428,7 +433,7 @@
       ctx->option_levelmask = L2_LEVEL_NONE;
       ctx->option_pidfile = NULL;
       ctx->option_killflag = FALSE;
  -    ctx->option_uid = geteuid();
  +    ctx->option_uid = getuid();
       ctx->option_daemon = FALSE;
       ctx->l2 = NULL;
       ctx->saaAltio = NULL;
  @@ -520,16 +525,67 @@
                   break;
               case 'b': /*POD [B<-b> I<addr>[I<:port>]|C<->|I<path>] */
                   if (strcmp(optarg, "-") != 0) {
  +                    if ((rc = sa_create(&ctx->saAltio)) != SA_OK) {
  +                        fprintf(stderr, "%s:Error: Creating TCP socket failed for \"%s\": %s\n", 
  +                                ctx->progname, optarg, strerror(errno));
  +                        CU(ERR_EXECUTION);
  +                    }
                       if ((rc = sa_addr_create(&ctx->saaAltio)) != SA_OK) {
                           fprintf(stderr, "%s:Error: Creating address failed for -a option (%d)\n", 
                                   ctx->progname, rc);
                       }
                       if (optarg[0] == '/') {
  -                        if ((rc = sa_addr_u2a(ctx->saaAltio, "unix:%s", optarg)) != SA_OK) {
  +                        char *cpPath;
  +                        char *cpPerm;
  +                        int nPerm;
  +                        int n;
  +
  +                        cpPath = strdup(optarg);
  +                        cpPerm = NULL;
  +                        nPerm  = -1;
  +                        if ((cpPerm = strrchr(cpPath, ':')) != NULL) {
  +                            *cpPerm++ = '\0';
  +                            nPerm = 0;
  +                            for (i = 0; i < 4 && cpPerm[i] != '\0'; i++) {
  +                                if (!isdigit((int)cpPerm[i])) {
  +                                    nPerm = -1;
  +                                    break;
  +                                }
  +                                n = cpPerm[i] - '0';
  +                                if (n > 7) {
  +                                    nPerm = -1;
  +                                    break;
  +                                }
  +                                nPerm = ((nPerm << 3) | n);
  +                            }
  +                            if (nPerm == -1 || cpPerm[i] != '\0') {
  +                                fprintf(stderr, "%s:Error: Invalid permissions \"%s\"\n", ctx->progname, cpPerm);
  +                                CU(ERR_EXECUTION);
  +                            }
  +                        }
  +                        if ((rc = sa_addr_u2a(ctx->saaAltio, "unix:%s", cpPath)) != SA_OK) {
                               fprintf(stderr, "%s:Error: Parsing alternate IO guessing UNIX domain socket failed for \"%s\" (%d)\n", 
  -                                    ctx->progname, optarg, rc);
  +                                    ctx->progname, cpPath, rc);
  +                            CU(ERR_EXECUTION);
  +                        }
  +                        if ((rc = sa_bind(ctx->saAltio, ctx->saaAltio)) != SA_OK) {
  +                            fprintf(stderr, "%s:Error: Bind failed for \"%s\": %s\n", 
  +                                    ctx->progname, cpPath, strerror(errno));
                               CU(ERR_EXECUTION);
                           }
  +                        if (nPerm != -1) {
  +                            if (chmod(cpPath, nPerm) == -1) {
  +                                fprintf(stderr, "%s:Error: chmod failed for \"%s\": %s\n", ctx->progname, cpPath, strerror(errno));
  +                                CU(ERR_EXECUTION);
  +                            }
  +                        }
  +                        if (getuid() == 0 && getuid() != ctx->option_uid) {
  +                            if (chown(cpPath, ctx->option_uid, -1) == -1) {
  +                                fprintf(stderr, "%s:Error: chown failed for \"%s\": %s\n", ctx->progname, cpPath, strerror(errno));
  +                                CU(ERR_EXECUTION);
  +                            }
  +                        }
  +                        free(cpPath);
                       }
                       else {
                           if ((rc = sa_addr_u2a(ctx->saaAltio, "inet://%s", optarg)) != SA_OK) {
  @@ -537,16 +593,11 @@
                                       ctx->progname, optarg, rc);
                               CU(ERR_EXECUTION);
                           }
  -                    }
  -                    if ((rc = sa_create(&ctx->saAltio)) != SA_OK) {
  -                        fprintf(stderr, "%s:Error: Creating TCP socket failed for \"%s\": %s\n", 
  -                                ctx->progname, optarg, strerror(errno));
  -                        CU(ERR_EXECUTION);
  -                    }
  -                    if ((rc = sa_bind(ctx->saAltio, ctx->saaAltio)) != SA_OK) {
  -                        fprintf(stderr, "%s:Error: Bind failed for \"%s\": %s\n", 
  -                                ctx->progname, optarg, strerror(errno));
  -                        CU(ERR_EXECUTION);
  +                        if ((rc = sa_bind(ctx->saAltio, ctx->saaAltio)) != SA_OK) {
  +                            fprintf(stderr, "%s:Error: Bind failed for \"%s\": %s\n", 
  +                                    ctx->progname, optarg, strerror(errno));
  +                            CU(ERR_EXECUTION);
  +                        }
                       }
                       if ((rc = sa_listen(ctx->saAltio, -1)) != SA_OK) {
                           fprintf(stderr, "%s:Error: Listen to failed for \"%s\": %s\n", 
  @@ -766,7 +817,6 @@
                       }
                   }
                   else {
  -
                       if ((sPasswd = getpwnam(optarg)) == NULL) {
                           fprintf(stderr, "%s:Error: loginname \"%s\" not found for -u option.\n", ctx->progname, optarg);
                           CU(ERR_EXECUTION);
  @@ -840,10 +890,12 @@
       }
   #endif
   
  -    if (setuid(ctx->option_uid) == -1) {
  -        fprintf(stderr, "%s:Error: Setting UID to %d failed: %s\n", 
  -                ctx->progname, ctx->option_uid, strerror(errno));
  -        CU(ERR_EXECUTION);
  +    if (getuid() != ctx->option_uid) {
  +        if (setuid(ctx->option_uid) == -1) {
  +            fprintf(stderr, "%s:Error: Setting UID to %d failed: %s\n", 
  +                    ctx->progname, ctx->option_uid, strerror(errno));
  +            CU(ERR_EXECUTION);
  +        }
       }
   
       if ((ctx->l2 = l2_stream_create()) == NULL) {

From ossp-cvs-owner@ossp.org  Fri Oct 12 12:25:37 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9CAPZU87003; Fri, 12 Oct 2001 12:25:35 +0200 (CEST)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 94A164CE5F8; Fri, 12 Oct 2001 12:25:35 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO lmtp2nntp.c
Message-Id: <20011012102535.94A164CE5F8@visp.engelschall.com>
Date: Fri, 12 Oct 2001 12:25:35 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   12-Oct-2001 12:25:35
  Branch: HEAD                             Handle: 2001101211253500

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO lmtp2nntp.c

  Log:
    Implement -C option (maximum number of childs).

  Summary:
    Revision    Changes     Path
    1.39        +3  -0      ossp-pkg/lmtp2nntp/00TODO
    1.86        +28 -6      ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.38 -r1.39 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	2001/10/12 10:08:57	1.38
  +++ ossp-pkg/lmtp2nntp/00TODO	2001/10/12 10:25:35	1.39
  @@ -4,6 +4,9 @@
     option -U currently has to be specified before option -b in order to
     set the owner/modes of Unix Domains sockets correctly.
   
  +  on waiting for childs to finish: maximum number of seconds to wait at all
  +  and if childs still are running, kill them (-> we have to remember pid_t's)
  +
     Proposal for future URL-style logging option syntax
     -L streamlog
     -l syslog:[mask]//[localhost[:port]][/tag=value ...] with /tag=value i.e. facility=local0
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.85 -r1.86 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/12 10:08:57	1.85
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/12 10:25:35	1.86
  @@ -157,6 +157,8 @@
       int             option_daemon;
       int             option_aclc;
       struct acl      option_acl[MAXACLS];
  +    int             option_maxchilds;
  +    int             active_childs;
       l2_stream_t    *l2;
       sa_addr_t      *saaAltio;
       sa_t           *saAltio;
  @@ -349,6 +351,7 @@
               case SIGCHLD:
                   log1(ctx, NOTICE, "caught signal %d - wait for child", sig);
                   pid = wait(NULL);
  +                ctx->active_childs--;
                   log2(ctx, NOTICE, "caught signal %d - child [%ld] terminated", sig, (long)pid);
                   return;
               case SIGUSR1:
  @@ -435,6 +438,8 @@
       ctx->option_killflag = FALSE;
       ctx->option_uid = getuid();
       ctx->option_daemon = FALSE;
  +    ctx->option_maxchilds = 10;
  +    ctx->active_childs = 0;
       ctx->l2 = NULL;
       ctx->saaAltio = NULL;
       ctx->saAltio = NULL;
  @@ -476,8 +481,15 @@
        */
   
       /* read in the arguments */
  -    while ((i = getopt(argc, argv, "DKP:a:b:c:d:g:l:m:n:o:s:t:u:v")) != -1) {
  +    while ((i = getopt(argc, argv, "C:DKP:a:b:c:d:g:l:m:n:o:s:t:u:v")) != -1) {
           switch (i) {
  +            case 'C': /*POD [B<-C> I<numchilds>] */
  +                ctx->option_maxchilds = atoi(optarg);
  +                if (ctx->option_maxchilds <= 0) {
  +                    fprintf(stderr, "%s:Error: Invalid number of maximum children (%d) to option -C\n", ctx->progname, ctx->option_maxchilds);
  +                    CU(ERR_EXECUTION);
  +                }
  +                break;
               case 'D': /*POD [B<-D>] */
                   ctx->option_daemon = TRUE;
                   break;
  @@ -1070,8 +1082,21 @@
           sa_timeout(ctx->saAltio, SA_TIMEOUT_ACCEPT, ctx->option_timeout_lmtp_accept, 0);
           sa_timeout(ctx->saAltio, SA_TIMEOUT_READ,   ctx->option_timeout_lmtp_read,   0);
           sa_timeout(ctx->saAltio, SA_TIMEOUT_WRITE,  ctx->option_timeout_lmtp_write,  0);
  -        while ((rc = sa_accept(ctx->saAltio, &ctx->saaIO, &ctx->saIO)) == SA_OK) {
  +        while (1) {
  +            while (ctx->active_childs >= ctx->option_maxchilds) {
  +                log1(ctx, ERROR, "maximum number of childs (%d) reached - waiting (1s)", ctx->option_maxchilds);
  +                sleep(1);
  +            }
   
  +            if ((rc = sa_accept(ctx->saAltio, &ctx->saaIO, &ctx->saIO)) != SA_OK) {
  +                if (rc == SA_ERR_SYS)
  +                    log3(ctx, ERROR, "accept failed: %s: (%d) %s", sa_error(rc), errno, strerror(errno));
  +                else
  +                    log1(ctx, ERROR, "accept failed: %s", sa_error(rc));
  +                sleep(10);
  +                continue;
  +            }
  +
               /* Access Control List */
               bOk = FALSE;
               /* check positive matches */
  @@ -1135,6 +1160,7 @@
               }
               if (pid != 0) {
                   log1(ctx, INFO, "daemon forked process, new child pid[%d]", pid);
  +                ctx->active_childs++;
                   sa_destroy(ctx->saIO);
                   sa_addr_destroy(ctx->saaIO);
                   continue;
  @@ -1180,10 +1206,6 @@
               lmtp_destroy(lmtp);
               CU(0);
           }
  -        if (rc == SA_ERR_SYS)
  -            log3(ctx, ERROR, "accept failed: %s: (%d) %s", sa_error(rc), errno, strerror(errno));
  -        else
  -            log1(ctx, ERROR, "accept failed: %s", sa_error(rc));
       }
       CU(0);
   

From ossp-cvs-owner@ossp.org  Fri Oct 12 14:03:21 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9CC3JU98310; Fri, 12 Oct 2001 14:03:19 +0200 (CEST)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 808674CE5FD; Fri, 12 Oct 2001 14:03:19 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c
Message-Id: <20011012120319.808674CE5FD@visp.engelschall.com>
Date: Fri, 12 Oct 2001 14:03:19 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   12-Oct-2001 14:03:19
  Branch: HEAD                             Handle: 2001101213031900

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c

  Log:
    IPv6 now works

  Summary:
    Revision    Changes     Path
    1.87        +1  -3      ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.86 -r1.87 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/12 10:25:35	1.86
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/12 12:03:19	1.87
  @@ -879,13 +879,12 @@
           }
           ctx->option_aclc++;
       }
  -#if 0 //FIXME IPv6 addr not working
       if (!bOk) {
           if (ctx->option_aclc >= MAXACLS) {
               fprintf(stderr, "%s:Error: Too many ACL (%d) using option -a (no space for additional fake IPv6 ACL)\n", ctx->progname, ctx->option_aclc);
               CU(ERR_EXECUTION);
           }
  -        ctx->option_acl[ctx->option_aclc].acl = "00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00";
  +        ctx->option_acl[ctx->option_aclc].acl = "0000:0000:0000:0000:0000:0000:0000:0000";
           ctx->option_acl[ctx->option_aclc].not = FALSE;
           ctx->option_acl[ctx->option_aclc].prefixlen = 0;
           if ((rc = sa_addr_create(&ctx->option_acl[ctx->option_aclc].saa)) != SA_OK) {
  @@ -900,7 +899,6 @@
           }
           ctx->option_aclc++;
       }
  -#endif
   
       if (getuid() != ctx->option_uid) {
           if (setuid(ctx->option_uid) == -1) {

From ossp-cvs-owner@ossp.org  Fri Oct 12 14:13:28 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9CCDRU99606; Fri, 12 Oct 2001 14:13:27 +0200 (CEST)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 344EB4CE601; Fri, 12 Oct 2001 14:13:27 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp Makefile.in
Message-Id: <20011012121327.344EB4CE601@visp.engelschall.com>
Date: Fri, 12 Oct 2001 14:13:27 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   12-Oct-2001 14:13:27
  Branch: HEAD                             Handle: 2001101213132600

  Modified files:
    ossp-pkg/lmtp2nntp      Makefile.in

  Log:
    Install into sbindir

  Summary:
    Revision    Changes     Path
    1.28        +3  -2      ossp-pkg/lmtp2nntp/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	2001/10/04 16:07:16	1.27
  +++ ossp-pkg/lmtp2nntp/Makefile.in	2001/10/12 12:13:26	1.28
  @@ -30,6 +30,7 @@
   prefix      = @prefix@
   exec_prefix = @exec_prefix@
   bindir      = @bindir@
  +sbindir     = @sbindir@
   libdir      = @libdir@
   includedir  = @includedir@
   mandir      = @mandir@
  @@ -83,8 +84,8 @@
                  lmtp2nntp.pod >lmtp2nntp.8
   
   install: all
  -	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir) $(DESTDIR)$(mandir)/man8
  -	$(SHTOOL) install -c -s -m 755 lmtp2nntp $(DESTDIR)$(bindir)/
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(sbindir) $(DESTDIR)$(mandir)/man8
  +	$(SHTOOL) install -c -s -m 755 lmtp2nntp $(DESTDIR)$(sbindir)/
   	$(SHTOOL) install -c -m 644 lmtp2nntp.8 $(DESTDIR)$(mandir)/man8/
   
   clean:

From ossp-cvs-owner@ossp.org  Fri Oct 12 14:17:52 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9CCHpU00463; Fri, 12 Oct 2001 14:17:51 +0200 (CEST)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 55FD14CE601; Fri, 12 Oct 2001 14:17:51 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Message-Id: <20011012121751.55FD14CE601@visp.engelschall.com>
Date: Fri, 12 Oct 2001 14:17:51 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   12-Oct-2001 14:17:51
  Branch: HEAD                             Handle: 2001101213175000

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    remember Thomas' issues

  Summary:
    Revision    Changes     Path
    1.29        +26 -0      ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 TODO
  --- ossp-pkg/l2/TODO	2001/10/05 10:40:17	1.28
  +++ ossp-pkg/l2/TODO	2001/10/12 12:17:50	1.29
  @@ -2,6 +2,32 @@
   OSSP L2
   =======
   
  +- thl: log facility
  +  To debug an application, sometimes it's overkill to log everything at
  +  DEBUG level. I see an improvement when an additional facility can be
  +  specified. Example: DEBUG/LMTP but don't care about NNTP in the
  +  lmtp2nntp program. Possibly could be implemented as a second mask.
  +  -> needs more consideration before implementation should start (rse)
  +
  +- thl: buffer fork() awareness
  +  When the process forks, the buffer is duplicated. Currently this means
  +  the buffer has to be flushed in advance or the content is dumped twice.
  +  If the buffer would remember the pid of the last writer, it could
  +  discard the contents of the buffer when the pid changes. This is because
  +  the parent retains the pid and the buffer content while the child
  +  changes the pid and discards the content. Should be an optionial feature.
  +  -> can be immediately implemented (rse)
  +
  +- thl: prelog
  +  I want to log everything even things that happen before L2 is
  +  initialized. Complicated, i know. Maybe the log function should buffer
  +  everything as long as a NULL l2-context is passed and if ever a non-NULL
  +  context is passed every remembered message should be logged afterwards
  +  or if destroy/ flush is executed with a NULL-context it should print the
  +  buffered stuff to stderr.
  +  -> can be immediately implemented, but one has to be carefully here.
  +     Seems like I want to think about this a little bit more in-depth. (rse)
  +
   RSE:
   - channel API cleanup: open semantics
   - bind and udp parameters in socket channel

From ossp-cvs-owner@ossp.org  Fri Oct 12 14:26:28 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9CCQRK01507; Fri, 12 Oct 2001 14:26:27 +0200 (CEST)
Date: Fri, 12 Oct 2001 14:26:27 +0200 (CEST)
Message-Id: <200110121226.f9CCQRK01507@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c lmtp2nntp.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   12-Oct-2001 14:26:27
  Branch: HEAD                             Handle: 2001101213262600

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c lmtp2nntp.pod

  Log:
    documented -C childsmax option and -b path[:perms]

  Summary:
    Revision    Changes     Path
    1.88        +11 -10     ossp-pkg/lmtp2nntp/lmtp2nntp.c
    1.30        +11 -5      ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.87 -r1.88 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/12 12:03:19	1.87
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/12 12:26:26	1.88
  @@ -157,7 +157,7 @@
       int             option_daemon;
       int             option_aclc;
       struct acl      option_acl[MAXACLS];
  -    int             option_maxchilds;
  +    int             option_childsmax;
       int             active_childs;
       l2_stream_t    *l2;
       sa_addr_t      *saaAltio;
  @@ -207,11 +207,12 @@
        */
       fprintf(stderr, 
               "USAGE: %s "
  +            "[-C childsmax] "
               "[-D] "
               "[-K] "
               "[-P pidfile] "
               "[-a addr/mask[,addr/mask[,...]] "
  -            "[-b addr[:port]|-|path] "
  +            "[-b addr[:port]|-|path[:perms]] "
               "[-c addr[:port]] "
               "[-d addr[:port][,addr[:port], ...]] "
               "[-g groupmode] "
  @@ -438,7 +439,7 @@
       ctx->option_killflag = FALSE;
       ctx->option_uid = getuid();
       ctx->option_daemon = FALSE;
  -    ctx->option_maxchilds = 10;
  +    ctx->option_childsmax = 10;
       ctx->active_childs = 0;
       ctx->l2 = NULL;
       ctx->saaAltio = NULL;
  @@ -483,10 +484,10 @@
       /* read in the arguments */
       while ((i = getopt(argc, argv, "C:DKP:a:b:c:d:g:l:m:n:o:s:t:u:v")) != -1) {
           switch (i) {
  -            case 'C': /*POD [B<-C> I<numchilds>] */
  -                ctx->option_maxchilds = atoi(optarg);
  -                if (ctx->option_maxchilds <= 0) {
  -                    fprintf(stderr, "%s:Error: Invalid number of maximum children (%d) to option -C\n", ctx->progname, ctx->option_maxchilds);
  +            case 'C': /*POD [B<-C> I<childsmax>] */
  +                ctx->option_childsmax = atoi(optarg);
  +                if (ctx->option_childsmax <= 0) {
  +                    fprintf(stderr, "%s:Error: Invalid number (%d) to option -C\n", ctx->progname, ctx->option_childsmax);
                       CU(ERR_EXECUTION);
                   }
                   break;
  @@ -535,7 +536,7 @@
                   }
                   free(azACL);
                   break;
  -            case 'b': /*POD [B<-b> I<addr>[I<:port>]|C<->|I<path>] */
  +            case 'b': /*POD [B<-b> I<addr>[I<:port>]|C<->|I<path>[:perms]] */
                   if (strcmp(optarg, "-") != 0) {
                       if ((rc = sa_create(&ctx->saAltio)) != SA_OK) {
                           fprintf(stderr, "%s:Error: Creating TCP socket failed for \"%s\": %s\n", 
  @@ -1081,8 +1082,8 @@
           sa_timeout(ctx->saAltio, SA_TIMEOUT_READ,   ctx->option_timeout_lmtp_read,   0);
           sa_timeout(ctx->saAltio, SA_TIMEOUT_WRITE,  ctx->option_timeout_lmtp_write,  0);
           while (1) {
  -            while (ctx->active_childs >= ctx->option_maxchilds) {
  -                log1(ctx, ERROR, "maximum number of childs (%d) reached - waiting (1s)", ctx->option_maxchilds);
  +            while (ctx->active_childs >= ctx->option_childsmax) {
  +                log1(ctx, ERROR, "maximum number of childs (%d) reached - waiting (1s)", ctx->option_childsmax);
                   sleep(1);
               }
   
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 lmtp2nntp.pod
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/10/12 08:57:51	1.29
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/10/12 12:26:26	1.30
  @@ -33,11 +33,12 @@
   =head1 SYNOPSIS
   
   B<lmtp2nntp>
  +[B<-C> I<childsmax>]
   [B<-D>]
   [B<-K>]
   [B<-P> I<pidfile>]
   [B<-a> I<addr>/I<mask>[,I<addr>/I<mask>[,...]]
  -[B<-b> I<addr>[I<:port>]|C<->|I<path>]
  +[B<-b> I<addr>[I<:port>]|C<->|I<path>[:perms]]
   [B<-c> I<addr>[I<:port>]]
   [B<-d> I<addr>[I<:port>][,I<addr>[I<:port>], ...]]
   [B<-g> I<groupmode>]
  @@ -68,6 +69,10 @@
   
   =over 4
   
  +=item B<-C> I<childsmax>
  +
  +Childs the daemon spawns at maximum. Default is 10.
  +
   =item B<-D>
   
   Daemonize program and detach from current terminal.
  @@ -98,12 +103,13 @@
   specify any inclusions a fake inclusion of 0.0.0.0/0 is appended internally.
   Any addr can be a name to be resolved first.
   
  -=item B<-b> I<addr>[I<:port>]|C<->|I<path> (LMTP daemon bind)
  +=item B<-b> I<addr>[I<:port>]|C<->|I<path[:perms]> (LMTP daemon bind)
   
   Bind address accepting incoming LMTP connections. Supported are "C<->" for
  -stdio, I<path> for Unix Domain socket and I<addr>[I<:port>] for TCP INET
  -socket. Omitting this option defaults to stdio. The path for a UNIX domain
  -socket must start with a slash. The addr can be a name to be resolved first.
  +stdio, I<path>[:perms] for Unix Domain socket with optional chmod-like
  +permissions and I<addr>[I<:port>] for TCP INET socket. Omitting this option
  +defaults to stdio. The path for a UNIX domain socket must start with a slash.
  +The addr can be a name to be resolved first.
   
   =item B<-c> I<addr>[I<:port>] (NNTP client bind)
   

From ossp-cvs-owner@ossp.org  Fri Oct 12 14:34:15 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9CCYEh02553; Fri, 12 Oct 2001 14:34:14 +0200 (CEST)
Date: Fri, 12 Oct 2001 14:34:14 +0200 (CEST)
Message-Id: <200110121234.f9CCYEh02553@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   12-Oct-2001 14:34:14
  Branch: HEAD                             Handle: 2001101213341400

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO

  Log:
    remember some things in TODO

  Summary:
    Revision    Changes     Path
    1.40        +13 -5      ossp-pkg/lmtp2nntp/00TODO
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.39 -r1.40 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	2001/10/12 10:25:35	1.39
  +++ ossp-pkg/lmtp2nntp/00TODO	2001/10/12 12:34:14	1.40
  @@ -1,11 +1,19 @@
   
  -  **** DEVELOPMENT INFORMATION ****
  -
  -  option -U currently has to be specified before option -b in order to
  -  set the owner/modes of Unix Domains sockets correctly.
  +  option -U currently has to be specified before option -b in order to set the
  +  owner/modes of Unix Domains sockets correctly. To fix this, the wholly
  +  option handling has to be revamped.
   
     on waiting for childs to finish: maximum number of seconds to wait at all
  -  and if childs still are running, kill them (-> we have to remember pid_t's)
  +  and if childs still are running, kill them. This means we have to remember
  +  pid_t's.
  +
  +  LMTP and NNTP logging by passing the l2 context into their structures.
  +
  +  Proper cleanup when exiting through signals.
  +
  +  Remember text from last NNTP error message and pass it back to LMTP.
  +
  +  **** DEVELOPMENT INFORMATION ****
   
     Proposal for future URL-style logging option syntax
     -L streamlog

From ossp-cvs-owner@ossp.org  Fri Oct 12 14:52:37 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9CCqaU04782; Fri, 12 Oct 2001 14:52:36 +0200 (CEST)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 5DEBA4CE607; Fri, 12 Oct 2001 14:52:36 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO
Message-Id: <20011012125236.5DEBA4CE607@visp.engelschall.com>
Date: Fri, 12 Oct 2001 14:52:36 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   12-Oct-2001 14:52:36
  Branch: HEAD                             Handle: 2001101213523500

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO

  Log:
    remember issues

  Summary:
    Revision    Changes     Path
    1.41        +4  -0      ossp-pkg/lmtp2nntp/00TODO
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.40 -r1.41 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	2001/10/12 12:34:14	1.40
  +++ ossp-pkg/lmtp2nntp/00TODO	2001/10/12 12:52:35	1.41
  @@ -13,6 +13,10 @@
   
     Remember text from last NNTP error message and pass it back to LMTP.
   
  +  move code out of getopt()-loop
  +  
  +  split already too large lmtp2nntp.c source into smaller pieces (~ 10-30KB each only)
  +
     **** DEVELOPMENT INFORMATION ****
   
     Proposal for future URL-style logging option syntax

From ossp-cvs-owner@ossp.org  Fri Oct 12 15:23:54 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9CDNrI16533; Fri, 12 Oct 2001 15:23:53 +0200 (CEST)
Date: Fri, 12 Oct 2001 15:23:53 +0200 (CEST)
Message-Id: <200110121323.f9CDNrI16533@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c lmtp2nntp.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   12-Oct-2001 15:23:53
  Branch: HEAD                             Handle: 2001101214235200

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c lmtp2nntp.pod

  Log:
    added -V veryverbose (unbuffered logging) option

  Summary:
    Revision    Changes     Path
    1.89        +37 -16     ossp-pkg/lmtp2nntp/lmtp2nntp.c
    1.31        +6  -1      ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.88 -r1.89 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/12 12:26:26	1.88
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/12 13:23:52	1.89
  @@ -157,6 +157,7 @@
       int             option_daemon;
       int             option_aclc;
       struct acl      option_acl[MAXACLS];
  +    int             option_veryverbose;
       int             option_childsmax;
       int             active_childs;
       l2_stream_t    *l2;
  @@ -211,6 +212,7 @@
               "[-D] "
               "[-K] "
               "[-P pidfile] "
  +            "[-V] "
               "[-a addr/mask[,addr/mask[,...]] "
               "[-b addr[:port]|-|path[:perms]] "
               "[-c addr[:port]] "
  @@ -356,7 +358,7 @@
                   log2(ctx, NOTICE, "caught signal %d - child [%ld] terminated", sig, (long)pid);
                   return;
               case SIGUSR1:
  -                log1(ctx, NOTICE, "caught signal %d - flush logging buffer", sig);
  +                log1(ctx, NOTICE, "caught signal %d - flush logging stream", sig);
                   l2_stream_flush(ctx->l2);
                   return;
               case SIGHUP:
  @@ -439,6 +441,7 @@
       ctx->option_killflag = FALSE;
       ctx->option_uid = getuid();
       ctx->option_daemon = FALSE;
  +    ctx->option_veryverbose = FALSE;
       ctx->option_childsmax = 10;
       ctx->active_childs = 0;
       ctx->l2 = NULL;
  @@ -482,7 +485,7 @@
        */
   
       /* read in the arguments */
  -    while ((i = getopt(argc, argv, "C:DKP:a:b:c:d:g:l:m:n:o:s:t:u:v")) != -1) {
  +    while ((i = getopt(argc, argv, "C:DKP:Va:b:c:d:g:l:m:n:o:s:t:u:v")) != -1) {
           switch (i) {
               case 'C': /*POD [B<-C> I<childsmax>] */
                   ctx->option_childsmax = atoi(optarg);
  @@ -500,6 +503,9 @@
               case 'P': /*POD [B<-P> I<pidfile>] */
                   ctx->option_pidfile = strdup(optarg);
                   break;
  +            case 'V': /*POD [B<-V>] */
  +                ctx->option_veryverbose = TRUE;
  +                break;
               case 'a': /*POD [B<-a> I<addr>/I<mask>[,I<addr>/I<mask>[,...]] */
                   if (argz_create_sep(optarg, ',', &azACL, &asACL) != 0)
                       CU(ERR_EXECUTION);
  @@ -945,14 +951,18 @@
               CU(ERR_EXECUTION);
           }
   
  -        if ((chBuf  = l2_channel_create(&l2_handler_buffer)) == NULL) {
  -            fprintf(stderr, "%s:Error: logging failed to create buffer channel\n", ctx->progname);
  -            CU(ERR_EXECUTION);
  -        }
  -        if (l2_channel_configure(chBuf, "size", 65536) != L2_OK) {
  -            fprintf(stderr, "%s:Error: logging failed to configure buffer channel\n", ctx->progname);
  -            CU(ERR_EXECUTION);
  +        if (!ctx->option_veryverbose) {
  +            if ((chBuf  = l2_channel_create(&l2_handler_buffer)) == NULL) {
  +                fprintf(stderr, "%s:Error: logging failed to create buffer channel\n", ctx->progname);
  +                CU(ERR_EXECUTION);
  +            }
  +            if (l2_channel_configure(chBuf, "size", 65536) != L2_OK) {
  +                fprintf(stderr, "%s:Error: logging failed to configure buffer channel\n", ctx->progname);
  +                CU(ERR_EXECUTION);
  +            }
           }
  +        else
  +            chBuf = NULL;
   
           if ((chFile = l2_channel_create(&l2_handler_file)) == NULL) {
               fprintf(stderr, "%s:Error: logging failed to create file channel\n", ctx->progname);
  @@ -963,13 +973,21 @@
               CU(ERR_EXECUTION);
           }
   
  -        if (l2_channel_stack(chFile, chBuf) != L2_OK) {
  -            fprintf(stderr, "%s:Error: logging failed to stack buffer channel on top of file channel\n", ctx->progname);
  -            CU(ERR_EXECUTION);
  +        if (!ctx->option_veryverbose) {
  +            if (l2_channel_stack(chFile, chBuf) != L2_OK) {
  +                fprintf(stderr, "%s:Error: logging failed to stack buffer channel on top of file channel\n", ctx->progname);
  +                CU(ERR_EXECUTION);
  +            }
  +            if (l2_channel_stack(chBuf, chPrefix) != L2_OK) {
  +                fprintf(stderr, "%s:Error: logging failed to stack prefix channel on top of buffer channel\n", ctx->progname);
  +                CU(ERR_EXECUTION);
  +            }
           }
  -        if (l2_channel_stack(chBuf, chPrefix) != L2_OK) {
  -            fprintf(stderr, "%s:Error: logging failed to stack prefix channel on top of buffer channel\n", ctx->progname);
  -            CU(ERR_EXECUTION);
  +        else {
  +            if (l2_channel_stack(chFile, chPrefix) != L2_OK) {
  +                fprintf(stderr, "%s:Error: logging failed to stack prefix channel on top of buffer channel\n", ctx->progname);
  +                CU(ERR_EXECUTION);
  +            }
           }
   
           if (l2_channel_open(chPrefix) != L2_OK) {
  @@ -991,6 +1009,9 @@
        * should not be used in the remainder of the code
        */
   
  +    if (ctx->option_veryverbose)
  +        log0(ctx, NOTICE, "logging very verbose (unbuffered)");
  +
       if ((ctx->option_pidfile != NULL) && ctx->option_killflag) {
           if ((fd = fopen(ctx->option_pidfile, "r")) == NULL)
               log1(ctx, ERROR, "cannot open pidfile \"%s\" for reading %m", ctx->option_pidfile);
  @@ -1167,7 +1188,7 @@
               log1(ctx, NOTICE, "startup new child process, parent pid[%d]", getppid());
   
               /* child must close listening socket */
  -            sa_destroy(ctx->saAltio); 
  +            sa_destroy(ctx->saAltio);
               
               /* initialize LMTP context */
               lmtp_io.ctx    = ctx;
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 lmtp2nntp.pod
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/10/12 12:26:26	1.30
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/10/12 13:23:52	1.31
  @@ -37,6 +37,7 @@
   [B<-D>]
   [B<-K>]
   [B<-P> I<pidfile>]
  +[B<-V>]
   [B<-a> I<addr>/I<mask>[,I<addr>/I<mask>[,...]]
   [B<-b> I<addr>[I<:port>]|C<->|I<path>[:perms]]
   [B<-c> I<addr>[I<:port>]]
  @@ -89,6 +90,10 @@
   must be taken when using relative path names as daemonizing changes the
   current working directory to '/'.
   
  +=item B<-V>
  +
  +Very verbose logging. This means logging is unbuffered.
  +
   =item B<-a> I<addr>/I<mask>[,I<addr>/I<mask>[,...]] (LMTP daemon ACL)
   
   Access control list specifying TCP INET addresses and masks where incoming
  @@ -223,7 +228,7 @@
   
   =head1 SIGNALS
   
  -Sending a USR1 signal to the program will flush the logging buffer.
  +Sending a USR1 signal to the program will flush the logging stream.
   
   =head1 DIAGNOSTICS
   

From ossp-cvs-owner@ossp.org  Fri Oct 12 15:24:45 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9CDOiq16619; Fri, 12 Oct 2001 15:24:44 +0200 (CEST)
Date: Fri, 12 Oct 2001 15:24:44 +0200 (CEST)
Message-Id: <200110121324.f9CDOiq16619@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   12-Oct-2001 15:24:44
  Branch: HEAD                             Handle: 2001101214244400

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c

  Log:
    prevent cleanup from cleaning up clean things

  Summary:
    Revision    Changes     Path
    1.90        +1  -0      ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.89 -r1.90 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/12 13:23:52	1.89
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/12 13:24:44	1.90
  @@ -1189,6 +1189,7 @@
   
               /* child must close listening socket */
               sa_destroy(ctx->saAltio);
  +            ctx->saAltio = NULL; /* prevent cleanup from free'ing this again */
               
               /* initialize LMTP context */
               lmtp_io.ctx    = ctx;

From ossp-cvs-owner@ossp.org  Fri Oct 12 15:51:43 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9CDpgU28881; Fri, 12 Oct 2001 15:51:42 +0200 (CEST)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 27BC24CE618; Fri, 12 Oct 2001 15:51:42 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_syslog.c
Message-Id: <20011012135142.27BC24CE618@visp.engelschall.com>
Date: Fri, 12 Oct 2001 15:51:42 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   12-Oct-2001 15:51:42
  Branch: HEAD                             Handle: 2001101214514100

  Modified files:
    ossp-pkg/l2             l2_ch_syslog.c

  Log:
    portability fix for Solaris 2.8

  Summary:
    Revision    Changes     Path
    1.25        +3  -0      ossp-pkg/l2/l2_ch_syslog.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_syslog.c
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 l2_ch_syslog.c
  --- ossp-pkg/l2/l2_ch_syslog.c	2001/10/10 15:58:27	1.24
  +++ ossp-pkg/l2/l2_ch_syslog.c	2001/10/12 13:51:41	1.25
  @@ -89,6 +89,9 @@
   #define LOG_AUTHPRIV (10 << 3)
   #endif
       { "authpriv", 10,      LOG_AUTHPRIV },
  +#ifndef LOG_FTP
  +#define LOG_FTP      (11 << 3)
  +#endif
       { "ftp",      11,      LOG_FTP      },
   #ifndef LOG_NTP
   #define LOG_NTP      (12 << 3)

From ossp-cvs-owner@ossp.org  Fri Oct 12 15:52:01 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9CDpxU29123; Fri, 12 Oct 2001 15:51:59 +0200 (CEST)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 8DA7C4CE620; Fri, 12 Oct 2001 15:51:59 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp configure.ac daemon.c
Message-Id: <20011012135159.8DA7C4CE620@visp.engelschall.com>
Date: Fri, 12 Oct 2001 15:51:59 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   12-Oct-2001 15:51:59
  Branch: HEAD                             Handle: 2001101214515900

  Modified files:
    ossp-pkg/lmtp2nntp      configure.ac daemon.c

  Log:
    portability fixes for Solaris 2.8

  Summary:
    Revision    Changes     Path
    1.15        +2  -0      ossp-pkg/lmtp2nntp/configure.ac
    1.4         +5  -0      ossp-pkg/lmtp2nntp/daemon.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/configure.ac
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 configure.ac
  --- ossp-pkg/lmtp2nntp/configure.ac	2001/10/04 09:51:07	1.14
  +++ ossp-pkg/lmtp2nntp/configure.ac	2001/10/12 13:51:59	1.15
  @@ -45,6 +45,8 @@
   AC_CHECK_LIB(socket, getprotobyname)
   AC_CHECK_LIB(nsl, gethostbyname)
   AC_CHECK_FUNCS(inet_pton inet_aton)
  +AC_CHECK_FUNCS(setsid)
  +AC_CHECK_HEADERS(sys/termios.h)
   
   dnl #   check for Str library
   AC_CHECK_EXTLIB([OSSP Str], 
  Index: ossp-pkg/lmtp2nntp/daemon.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 daemon.c
  --- ossp-pkg/lmtp2nntp/daemon.c	2001/10/04 16:07:16	1.3
  +++ ossp-pkg/lmtp2nntp/daemon.c	2001/10/12 13:51:59	1.4
  @@ -6,11 +6,16 @@
   **  http://www.erlenstar.demon.co.uk/unix/faq_2.html#SEC10
   */
   
  +#include "config.h"
  +
   #include <fcntl.h>
   #include <unistd.h>
   #include <signal.h>
   #include <sys/stat.h>
   #include <sys/ioctl.h>
  +#ifdef HAVE_TERMIOS_H
  +#include <sys/termios.h>
  +#endif
   
   #include "daemon.h"
   

From ossp-cvs-owner@ossp.org  Fri Oct 12 16:02:59 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9CE2wT30592; Fri, 12 Oct 2001 16:02:58 +0200 (CEST)
Date: Fri, 12 Oct 2001 16:02:58 +0200 (CEST)
Message-Id: <200110121402.f9CE2wT30592@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp test.sh
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   12-Oct-2001 16:02:58
  Branch: HEAD                             Handle: 2001101215025700

  Modified files:
    ossp-pkg/lmtp2nntp      test.sh

  Log:
    bugfix test suite

  Summary:
    Revision    Changes     Path
    1.5         +4  -4      ossp-pkg/lmtp2nntp/test.sh
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/test.sh
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 test.sh
  --- ossp-pkg/lmtp2nntp/test.sh	2001/10/09 10:34:10	1.4
  +++ ossp-pkg/lmtp2nntp/test.sh	2001/10/12 14:02:57	1.5
  @@ -16,10 +16,10 @@
   Message-Id: <200108141251.f7ECpmn74812@dev.de.cw.net>
   From: Thomas Lotterer <Thomas.Lotterer@example.com>
   Received: from cw.example.com (cw.example.com [10.1.1.32])
  -    by gateway.example.com (8.9.2/8.9.2/$Revision: 1.4 $) with SMTP id NAA08840
  +    by gateway.example.com (8.9.2/8.9.2/$Revision: 1.5 $) with SMTP id NAA08840
       for <thomas.lotterer@gateway.example.com>; Mon, 2 Apr 2001 13:20:25 +0200 (MET DST)
   Received: from history (history.example.org [195.143.102.41])
  -    by cw.example.com (8.11.0/8.11.0/$Revision: 1.4 $) with ESMTP id f32BKPb12235
  +    by cw.example.com (8.11.0/8.11.0/$Revision: 1.5 $) with ESMTP id f32BKPb12235
       for <thomas.lotterer@example.com>; Mon, 2 Apr 2001 13:20:25 +0200
   Received: from example.org (littlemua.example.org [195.143.103.160])
   	by history (8.8.8/8.8.8) with ESMTP id LAA12678;
  @@ -92,7 +92,7 @@
   prolog
   newmsg
   ./lmtp2nntp -v >${STDOUT} 2>${STDERR}
  -RC=`cat ${STDOUT} | egrep 'lmtp2nntp[ ]+[0-9]+\.[0-9]+\.[0-9]+[ ]+\([0-9]+-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-[0-9]+\)' | wc -l`
  +RC=`cat ${STDOUT} | egrep 'lmtp2nntp[ ]+[0-9]+\.[0-9]+[ab\.][0-9]+[ ]+\([0-9]+-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-[0-9]+\)' | wc -l`
   if [ ${RC} -ne 1 -o ".`cat ${STDERR}`" != . ]; then
       echo "NO (got ${RC})"
       exit 1;
  @@ -108,7 +108,7 @@
   prolog
   newmsg
   ./lmtp2nntp -? >${STDOUT} 2>${STDERR}
  -RC=`cat ${STDERR} | egrep -- '-D.*-K.*-P.*-a.*-b.*-d.*-g.*-l.*-m.*-n.*-o.*-s.*-t.*-v.*newsgroup' | wc -l`
  +RC=`cat ${STDERR} | egrep -- '-C.*-D.*-K.*-P.*-V.*-a.*-b.*-d.*-g.*-l.*-m.*-n.*-o.*-s.*-t.*-v.*newsgroup' | wc -l`
   if [ ${RC} -ne 1 -o -s ${STDOUT} ]; then
       echo "NO (got ${RC})"
       exit 1;

From ossp-cvs-owner@ossp.org  Fri Oct 12 16:04:18 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9CE4HQ30739; Fri, 12 Oct 2001 16:04:17 +0200 (CEST)
Date: Fri, 12 Oct 2001 16:04:17 +0200 (CEST)
Message-Id: <200110121404.f9CE4HQ30739@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp README version.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   12-Oct-2001 16:04:17
  Branch: HEAD                             Handle: 2001101215041700

  Modified files:
    ossp-pkg/lmtp2nntp      README version.c

  Log:
    bump version for release

  Summary:
    Revision    Changes     Path
    1.8         +1  -1      ossp-pkg/lmtp2nntp/README
    1.10        +9  -9      ossp-pkg/lmtp2nntp/version.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/README
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 README
  --- ossp-pkg/lmtp2nntp/README	2001/09/13 14:24:49	1.7
  +++ ossp-pkg/lmtp2nntp/README	2001/10/12 14:04:17	1.8
  @@ -7,7 +7,7 @@
                     |_|                        |_|    
   
     OSSP lmtp2nntp - Mail to News Gateway
  -  Version 1.0.0 (13-Sep-2001)
  +  Version 1.1b1 (12-Oct-2001)
   
     ABSTRACT
   
  Index: ossp-pkg/lmtp2nntp/version.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 version.c
  --- ossp-pkg/lmtp2nntp/version.c	2001/09/13 14:24:50	1.9
  +++ ossp-pkg/lmtp2nntp/version.c	2001/10/12 14:04:17	1.10
  @@ -8,7 +8,7 @@
   #ifndef _VERSION_C_
   #define _VERSION_C_
   
  -#define LMTP2NNTP_VERSION 0x100200
  +#define LMTP2NNTP_VERSION 0x101101
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _VERSION_C_AS_HEADER_
   
   lmtp2nntp_version_t lmtp2nntp_version = {
  -    0x100200,
  -    "1.0.0",
  -    "1.0.0 (13-Sep-2001)",
  -    "This is lmtp2nntp, Version 1.0.0 (13-Sep-2001)",
  -    "lmtp2nntp 1.0.0 (13-Sep-2001)",
  -    "lmtp2nntp/1.0.0",
  -    "@(#)lmtp2nntp 1.0.0 (13-Sep-2001)",
  -    "$Id: lmtp2nntp 1.0.0 (13-Sep-2001) $"
  +    0x101101,
  +    "1.1b1",
  +    "1.1b1 (12-Oct-2001)",
  +    "This is lmtp2nntp, Version 1.1b1 (12-Oct-2001)",
  +    "lmtp2nntp 1.1b1 (12-Oct-2001)",
  +    "lmtp2nntp/1.1b1",
  +    "@(#)lmtp2nntp 1.1b1 (12-Oct-2001)",
  +    "$Id: lmtp2nntp 1.1b1 (12-Oct-2001) $"
   };
   
   #endif /* _VERSION_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Fri Oct 12 16:04:39 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9CE4c230792; Fri, 12 Oct 2001 16:04:38 +0200 (CEST)
Date: Fri, 12 Oct 2001 16:04:38 +0200 (CEST)
Message-Id: <200110121404.f9CE4c230792@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp Makefile.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   12-Oct-2001 16:04:38
  Branch: HEAD                             Handle: 2001101215043700

  Modified files:
    ossp-pkg/lmtp2nntp      Makefile.in

  Log:
    fix dependencies

  Summary:
    Revision    Changes     Path
    1.29        +1  -1      ossp-pkg/lmtp2nntp/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	2001/10/12 12:13:26	1.28
  +++ ossp-pkg/lmtp2nntp/Makefile.in	2001/10/12 14:04:37	1.29
  @@ -139,7 +139,7 @@
   
   #   AUTOMATICALLY GENERATED DEPENDENCY LIST - DO NOT EDIT
   lmtp2nntp.o: lmtp2nntp.c argz.h shpat_match.h daemon.h lmtp2nntp.h config.h lmtp.h nntp.h msg.h version.c
  -daemon.o: daemon.c daemon.h
  +daemon.o: daemon.c config.h daemon.h
   lmtp.o: lmtp.c lmtp.h config.h
   nntp.o: nntp.c nntp.h msg.h lmtp2nntp.h config.h
   argz.o: argz.c argz.h config.h

From ossp-cvs-owner@ossp.org  Fri Oct 12 16:46:18 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9CEkHe84373; Fri, 12 Oct 2001 16:46:17 +0200 (CEST)
Date: Fri, 12 Oct 2001 16:46:17 +0200 (CEST)
Message-Id: <200110121446.f9CEkHe84373@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 configure.ac l2_ch_buffer.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   12-Oct-2001 16:46:17
  Branch: HEAD                             Handle: 2001101215461601

  Modified files:
    ossp-pkg/l2             configure.ac l2_ch_buffer.c

  Log:
    Make usage of setitimer(2) dependent on if it exists on the target system.
    Quick hack, future fix will replace lost functionality by issuing a call to
    alarm(3) instead.

  Summary:
    Revision    Changes     Path
    1.12        +1  -1      ossp-pkg/l2/configure.ac
    1.24        +26 -7      ossp-pkg/l2/l2_ch_buffer.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/configure.ac
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 configure.ac
  --- ossp-pkg/l2/configure.ac	2001/10/06 14:33:09	1.11
  +++ ossp-pkg/l2/configure.ac	2001/10/12 14:46:16	1.12
  @@ -81,7 +81,7 @@
   fi  
   AC_CHECK_LIB(socket, accept)
   
  -AC_CHECK_FUNCS(inet_aton inet_pton inet_ntoa inet_ntop snprintf vsnprintf)
  +AC_CHECK_FUNCS(inet_aton inet_pton inet_ntoa inet_ntop snprintf vsnprintf setitimer)
   
   sinclude(l2_ut_sa.ac)
   AC_CHECK_SA
  Index: ossp-pkg/l2/l2_ch_buffer.c
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 l2_ch_buffer.c
  --- ossp-pkg/l2/l2_ch_buffer.c	2001/10/05 14:25:57	1.23
  +++ ossp-pkg/l2/l2_ch_buffer.c	2001/10/12 14:46:17	1.24
  @@ -28,12 +28,14 @@
   */
   
   #include "l2.h"
  -#include "l2_p.h"   /* for TRACE() */
  +#include "l2_p.h"   /* for TRACE()                        */
   
   #include <string.h>
  -#include <unistd.h> /* has setitime() in standard unix functions */
  -#include <signal.h> /* for use of sigaction() and SIGALRM        */
  +#include <unistd.h> /* for alarm() and setitime()         */
  +#include <signal.h> /* for use of sigaction() and SIGALRM */
   
  +#define L2_BUFFER_TIMER ITIMER_REAL /* calls to [s|g]etitimer() and alarm() */
  +
   /* declare private channel configuration */
   typedef struct {
       char       *buf;
  @@ -41,7 +43,9 @@
       int         bufsize;
       int         bufinterval;
       struct      sigaction sigalrm;
  +#ifdef HAVE_SETITIMER
       struct      itimerval valprev;
  +#endif
       int         levelflush;
       l2_level_t  level;
   } l2_ch_buffer_t;
  @@ -79,7 +83,9 @@
       cfg->levelflush  = 0;
       cfg->level       = L2_LEVEL_NONE;
       memset(&cfg->sigalrm, 0, sizeof(cfg->sigalrm));
  +#ifdef HAVE_SETITIMER
       memset(&cfg->valprev, 0, sizeof(cfg->valprev));
  +#endif
   
       /* link private channel configuration into channel context */
       ctx->vp = cfg;
  @@ -112,6 +118,7 @@
    ************************************************************/
   static int set_alarm(l2_ch_buffer_t *cfg)
   {
  +#ifdef HAVE_INET_SETITIMER
       struct itimerval valnew;
   
       /* initialize auto vars before using them */
  @@ -121,7 +128,10 @@
       valnew.it_interval.tv_usec = 0;
       valnew.it_value.tv_sec = cfg->bufinterval;
       valnew.it_value.tv_usec = 0;
  -    return setitimer(ITIMER_REAL, &valnew, &cfg->valprev); /* set flush timer */
  +    return setitimer(L2_BUFFER_TIMER, &valnew, &cfg->valprev);
  +#else
  +    return 0;
  +#endif
   }
   
   /************************************************************
  @@ -130,6 +140,7 @@
    ************************************************************/
   static int reset_alarm(l2_ch_buffer_t *cfg)
   {
  +#ifdef HAVE_INET_SETITIMER
       struct itimerval valnew;
   
       /* initialize auto vars before using them */
  @@ -139,7 +150,10 @@
       valnew.it_interval.tv_usec = 0;
       valnew.it_value.tv_sec = cfg->bufinterval;
       valnew.it_value.tv_usec = 0;
  -    return setitimer(ITIMER_REAL, &valnew, 0); /* reset flush timer */
  +    return setitimer(L2_BUFFER_TIMER, &valnew, 0);
  +#else
  +    return 0;
  +#endif
   }
   
   /* open channel */
  @@ -256,8 +270,13 @@
       l2_result_t rv;
   
       if (cfg->bufinterval != 0) {
  -        setitimer(ITIMER_REAL, &cfg->valprev, 0); /* restore timer values */
  -        /* restore previous signal context if previously saved & replaced    */
  +#ifdef HAVE_INET_SETITIMER
  +        if (setitimer(L2_BUFFER_TIMER, &cfg->valprev, 0)) /* restore timer */
  +            return L2_ERR_SYS;
  +#else
  +        alarm(0);
  +#endif
  +        /* restore previous signal context if previously saved & replaced  */
           if (&cfg->sigalrm.sa_handler)
               if (sigaction(SIGALRM, &cfg->sigalrm, 0) < 0)
                   rv = L2_ERR_SYS;

From ossp-cvs-owner@ossp.org  Fri Oct 12 16:48:02 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9CEm1q84829; Fri, 12 Oct 2001 16:48:01 +0200 (CEST)
Date: Fri, 12 Oct 2001 16:48:01 +0200 (CEST)
Message-Id: <200110121448.f9CEm1q84829@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_sockmon.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   12-Oct-2001 16:48:00
  Branch: HEAD                             Handle: 2001101215480000

  Modified files:
    ossp-pkg/l2             l2_sockmon.c

  Log:
    Intermediate committal of local socket code translation to libsa-type calls.

  Summary:
    Revision    Changes     Path
    1.11        +70 -66     ossp-pkg/l2/l2_sockmon.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_sockmon.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 l2_sockmon.c
  --- ossp-pkg/l2/l2_sockmon.c	2001/09/26 09:00:21	1.10
  +++ ossp-pkg/l2/l2_sockmon.c	2001/10/12 14:48:00	1.11
  @@ -38,15 +38,19 @@
   #include <assert.h>
   
   #include "l2.h"
  +#include "l2_ut_sa.h"
   
  -#define BACKLOG 1024    /* max # pending connections */
  -#define BUFFSIZ 256     /* max string size           */
  +#define BACKLOG              1024      /* max # pending connections */
  +#define BUFFSIZ               256      /* max string size           */
  +#define L2_SA_SOCKET_TIMEOUT   64
  +#define L2_SA_SOCKET_BUFSIZE 4096
   
   char *strlowerdup(const char *);       /* prototypes */
   void dowork(int);
   int  myserver(int, int, int);
   void die(const char *);
  -void closedie(int, const char *);
  +void closedie(sa_t *, const char *);
  +void usage(char *);
   
   void die(const char *szMsg)
   {
  @@ -54,10 +58,10 @@
       exit(EXIT_FAILURE);
   }
   
  -void closedie(int iSock, const char *szMsg)
  +void closedie(sa_t *saSock, const char *szMsg)
   {
       perror(szMsg);
  -    close(iSock);
  +    sa_destroy(saSock); /* saSock->destroy would really be nice here */
       exit(EXIT_FAILURE);
   }
   
  @@ -106,60 +110,47 @@
   
   int myserver(int iFamily, int iProtocol, int iPort)
   {
  +    sa_type_t  saType;
  +    sa_addr_t *saAddr;
  +    sa_t      *saListen, saAccept;
  +    int        iSock,    iSockopt;
  +
       char                szBuf[BUFFSIZ];
       char                szAddrin4[INET_ADDRSTRLEN];
       char                szAddrin6[INET6_ADDRSTRLEN];
  -    struct sockaddr_in  laddr4,   faddr4,    caddr4;
  -    struct sockaddr_in6 laddr6,   faddr6,    caddr6;
  -    int                 iSock,    iNewsock;
  -    int                 iSockopt, iProtofam;
  -    int                 iTrans,   cc;
  +    struct sockaddr_in  faddr4,    caddr4;
  +    struct sockaddr_in6 faddr6,    caddr6;
  +    int                 iNewsock;
  +    int                 cc;
       socklen_t           faddrlen;
  -
  -    /* Set up an IPv4 TCP socket to listen on for connections. */
  -    if (iFamily == AF_INET6)
  -    {
  -        /* initialize address structure */
  -        memset(&laddr6,  0, sizeof(laddr6));
   
  -        laddr6.sin6_family      = AF_INET6;
  -        laddr6.sin6_flowinfo    = 0;
  -        laddr6.sin6_port        = iPort;
  -        laddr6.sin6_addr        = in6addr_any; /* Structure assignment */
  -    }
  -    else if (iFamily == AF_INET)
  -    {
  -        /* initialize address structure */
  -        memset(&laddr4,  0, sizeof(laddr4));
  -
  -        laddr4.sin_family       = AF_INET;
  -        laddr4.sin_port         = iPort;
  -        laddr4.sin_addr.s_addr  = INADDR_ANY;
  -    }
  -    else
  -        return -1; /* Not IPv4 or IPv6 */
  -
  -    iProtofam = (iFamily   == AF_INET)     ? PF_INET    : PF_INET6;
  -    iTrans    = (iProtocol == IPPROTO_UDP) ? SOCK_DGRAM : SOCK_STREAM;
  -    iSock     = socket(iProtofam, iTrans, iProtocol);
  -
  -    if (iSock == -1)
  -        die("socket()");
  -
  -    /* Allow local addresses to be reused. */
  +    /* Create socket address, the sa_addr object */
  +    /* starts in a state similar to INADDR_ANY   */
  +    if (sa_addr_create(&saAddr) != SA_OK)
  +        die("sa_addr_create()");
  +
  +    /* Create socket */
  +    if (sa_create(&saListen) != SA_OK)
  +        closedie(saListen, "sa_create()");
  +
  +    if (!(iProtocol == IPPROTO_UDP || iProtocol == IPPROTO_TCP))
  +        closedie(saListen, "unknown protocol");
  +    saType = (iProtocol == IPPROTO_UDP) ? SA_TYPE_DATAGRAM : SA_TYPE_STREAM;
  +
  +    /* Configure socket parameters */
  +    sa_timeout(saListen, L2_SA_SOCKET_TIMEOUT, 0);
  +    sa_buffers(saListen, L2_SA_SOCKET_BUFSIZE, L2_SA_SOCKET_BUFSIZE);
  +    sa_type   (saListen, saType);
  +
  +    /* Allow local addresses to be reused */
  +    if (sa_getfd(saListen, &iSock) != SA_OK)
  +        closedie(saListen, "sa_getfd()");
       iSockopt = 1;
       if (setsockopt(iSock, SOL_SOCKET, SO_REUSEADDR, (void *)&iSockopt, sizeof (iSockopt)) == -1)
  -        closedie(iSock, "setsockopt(SO_REUSEADDR)");
  -
  -    if (iFamily == AF_INET6) {
  -        if (bind(iSock, (struct sockaddr *)&laddr6, sizeof (laddr6)) == -1)
  -            closedie(iSock, "bind()");
  -    }
  +        closedie(saListen, "setsockopt()");
   
  -    else if (iFamily == AF_INET) {
  -        if (bind(iSock, (struct sockaddr *)&laddr4, sizeof (laddr4)) == -1)
  -            closedie(iSock, "bind()");
  -    }
  +    if (sa_bind(saListen, saAddr) != SA_OK)
  +        closedie(saListen, "sa_bind()");
   
       if (iProtocol == IPPROTO_UDP) {
           if (iFamily == AF_INET6) {
  @@ -224,8 +215,8 @@
           }
       }
       else if (iProtocol == IPPROTO_TCP) { /* Only try to listen if we have TCP */
  -        if (listen(iSock, BACKLOG) == -1)
  -            closedie(iSock, "listen()");
  +        if (sa_listen(saListen, BACKLOG) != SA_OK)
  +            closedie(saListen, "sa_listen()");
   
           /* Wait for a connection request */
           if (iFamily == AF_INET6) {
  @@ -234,14 +225,12 @@
   
               for (;;) {
                   faddrlen = sizeof (faddr6);
  -                iNewsock = accept(iSock, (struct sockaddr *)&faddr6, &faddrlen);
  -                if (iNewsock == -1) {
  -                    if (errno != EINTR && errno != ECONNABORTED) {
  -                        perror("accept()");
  -                    }
  -                    continue;
  +                if (sa_accept(saListen, &saAddr, &saAccept) != SA_OK) {
  +                    sa_destroy(saAccept);
  +                    closedie(saListen, "sa_accept()");
                   }
   
  +                if (sa_addr_a2u(saAddr, char **uri))
                   if (inet_ntop(AF_INET6, &faddr6.sin6_addr, szAddrin6, sizeof(szAddrin6)) != NULL) {
                       fprintf(stderr, "Connection from %s/%d\n", szAddrin6, ntohs(faddr6.sin6_port));
                       dowork(iNewsock); /* do some sockwork */
  @@ -272,20 +261,35 @@
       return -1; /* Failure due to non UDP/TCP request, or execution flow */
   }
   
  +void usage(char *szApp)
  +{
  +    fprintf(stderr, "Usage: %s <IPv4-or-IPv6> <TCP-or-UDP> <Port>\n", szApp);
  +    exit(EXIT_FAILURE); /* The user doesn't know how to use this */
  +}
  +
   int main(int argc, char *argv[])
   {
       int iFam      = -1;
       int iProto = -1;
       int iPort  = 0;
   
  -    if (argc != 4) {
  -        fprintf(stderr, "Usage: %s <IPv4-or-IPv6> <TCP-or-UDP> <Port>\n", argv[0]);
  -        exit(EXIT_FAILURE); /* The user doesn't know how to use this */
  -    }
  +    if (argc != 4)
  +        usage(argv[0]);
   
  -    iFam    = (!strcmp(argv[1], "IPv6")) ? AF_INET6    : AF_INET;
  -    iProto  = (!strcmp(argv[2], "UDP"))  ? IPPROTO_UDP : IPPROTO_TCP;
  -    iPort   = htons(atoi(argv[3]));
  +    if (!strcmp(argv[1], "IPv6"))
  +        iFam = AF_INET6;
  +    else if (!strcmp(argv[1], "IPv4"))
  +        iFam = AF_INET;
  +    else
  +        usage(argv[0]);
  +
  +    if (!strcmp(argv[2], "UDP"))
  +        iProto = IPPROTO_UDP;
  +    else if (!strcmp(argv[2], "TCP"))
  +        iProto = IPPROTO_TCP;
  +    else
  +        usage(argv[0]);
   
  +    iPort = htons(atoi(argv[3]));
       return myserver(iFam, iProto, iPort);
   }

From ossp-cvs-owner@ossp.org  Sat Oct 13 15:45:13 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9DDjCU46766; Sat, 13 Oct 2001 15:45:12 +0200 (CEST)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 5B60F4CE575; Sat, 13 Oct 2001 15:45:12 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp INSTALL
Message-Id: <20011013134512.5B60F4CE575@visp.engelschall.com>
Date: Sat, 13 Oct 2001 15:45:12 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   13-Oct-2001 15:45:12
  Branch: HEAD                             Handle: 2001101314451100

  Modified files:
    ossp-pkg/lmtp2nntp      INSTALL

  Log:
    Enhance installation instructions by adding Postix details.

  Summary:
    Revision    Changes     Path
    1.10        +101 -4     ossp-pkg/lmtp2nntp/INSTALL
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/INSTALL
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 INSTALL
  --- ossp-pkg/lmtp2nntp/INSTALL	2001/10/11 09:35:39	1.9
  +++ ossp-pkg/lmtp2nntp/INSTALL	2001/10/13 13:45:11	1.10
  @@ -9,6 +9,7 @@
     OSSP lmtp2nntp - Mail to News Gateway
   
     INSTALLATION
  +  ============
   
     To install OSSP lmtp2nntp into /path/to/lmtp2nntp/{bin,man}/ perform
     the following steps in your shell:
  @@ -19,14 +20,17 @@
       $ make install
   
     CONFIGURATION
  +  =============
   
     In order to use OSSP lmtp2nntp, the program has to be integrated into
     a Mail Transfer Agent (MTA) which speaks Local Mail Transfer Protocol
  -  (LMTP). OSSP lmtp2nntp was developed with Sendmail 8.11, but should
  -  also work with other MTAs who provide an LMTP interface. The detailed
  -  integration into Sendmail 8.11 is shown below.
  +  (LMTP). OSSP lmtp2nntp was developed with Sendmail 8.11 and tested
  +  with Sendmail 8.11 and Postfix 20010228, but should also work with
  +  other MTAs who provide an LMTP interface. The detailed integration
  +  into Sendmail 8.11 and Postfix 20010228 is shown below.
   
     Sendmail Integration
  +  --------------------
   
     1. Create a "cf/mailer/lmtp2nntp.m4" macro file with the following contents:
   
  @@ -70,6 +74,8 @@
     2. Add to your Sendmail M4 configuration (file "sendmail.m4" or
        "sendmail.mc" according to your installation) the following entry:
   
  +     sendmail.m4:
  +
        | dnl #  Mailer: LMTP2NNTP (mail to news gateway)
        | define(`LMTP2NNTP_MAILER_PATH', `/path/to/lmtp2nntp/bin/lmtp2nntp')
        | MAILER(lmtp2nntp)
  @@ -80,8 +86,17 @@
        to adjust the run-time behaviour of OSSP lmtp2nntp. See the
        lmtp2nntp(1) manual page for more details about the commmand line
        parameters.
  +
  +  3. Activate in your Sendmail M4 configuration (file "sendmail.m4" or
  +     "sendmail.mc" according to your installation) the virtual user
  +     and mailer table:
  +
  +     sendmail.m4:
  +
  +     | FEATURE(mailertable,   `hash -o /path/to/mailertable')
  +     | FEATURE(virtusertable, `hash -o /path/to/virtusertable')
   
  -  3. Add the following entries to both your virtual user table (file
  +  4. Add the following entries to both your virtual user table (file
        "virtusertable") and your mailer table (file "mailertable") in order
        to finally activate the mail to news gateway:
   
  @@ -117,4 +132,86 @@
   
        Notice that there are more delivery modes supported by OSSP
        lmtp2nntp. Refer to the lmtp2nntp(1) manual page for more details.
  +
  +  Postfix Integration
  +  -------------------
  +
  +  1. Make sure that Postfix was built with PCRE map support
  +     (see README.PCRE in the original Postfix source distribution).
  +     It basically means building and installing PCRE from
  +     ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/ and
  +     configuring Postfix with at least:
  +
  +     | make makefiles \
  +     |     CCARGS="-I/path/to/pcre/include -DHAS_PCRE"
  +     |     AUXLIBS="-L/path/to/pcre/lib -lpcre"
  +
  +  2. In the Postfix main configuration file (main.cf) you have
  +     enable the virtual user and transport mapping tables:
  +
  +     main.cf:
  +
  +     | virtual_maps   = pcre:/path/to/virtual
  +     | transport_maps = hash:/path/to/transport
  +
  +  3. Add the following entry to the Postfix virtual user mapping table:
  +
  +     /path/to/virtual:
  +
  +     | /^posting\+(.*)@gateway\.example\.com$/ $1@lmtp2nntp.invalid
  +
  +  4. Add the following entry to the Postfix transport mapping table:
  +
  +     /path/to/transport:
  +
  +     | lmtp2nntp.invalid  lmtp:unix:/path/to/lmtp2nntp.news.example.com
  +
  +     Additionally convert the transport mapping table into the hash
  +     table format Postfix reads (not required for the virtual user
  +     mapping table above, because it is PCRE based).
  +
  +     $ postmap /path/to/transport
  +
  +  5. Start lmtp2nntp as a stand-alone daemon for delivering to
  +     news.example.com. This is required because in contrast to Sendmail,
  +     Postfix can speak LMTP only via Unix Domain and Internet Domain
  +     sockets (but not via a Unix pipe). Use the following script:
  +
  +     lmtp2nntpd:
  +
  +     | #!/bin/sh
  +     | LMTP2NNTP_PATH='/usr/local/bin/lmtp2nntp'
  +     | LMTP2NNTP_ARGS=''
  +     | LMTP2NNTP_CLIENTBIND='/path/to/lmtp2nntp.news.example.com'
  +     | LMTP2NNTP_GROUPMODE='envelope'
  +     | LMTP2NNTP_LOGLEVEL='notice:/var/log/lmtp2nntp'
  +     | LMTP2NNTP_MAILFROM='^.+@(?:[^.]+\.)+[^.]+$'
  +     | LMTP2NNTP_NODENAME=`hostname`
  +     | LMTP2NNTP_OPERATIONMODE='post'
  +     | LMTP2NNTP_SIZE='800000'
  +     | LMTP2NNTP_TIMEOUT='nntp:connect=60'
  +     | LMTP2NNTP_NEWSGROUP='*'
  +     | case $1 in
  +     |     start )
  +     |         $LMTP2NNTP_PATH -D -P "/path/to/lmtp2nntp.pid" \
  +     |             -c "$LMTP2NNTP_CLIENTBIND" \
  +     |             -d "news.example.com" \
  +     |             -g "$LMTP2NNTP_GROUPMODE" \
  +     |             -l "$LMTP2NNTP_LOGLEVEL" \
  +     |             -m "$LMTP2NNTP_MAILFROM" \
  +     |             -n "$LMTP2NNTP_NODENAME" \
  +     |             -o "$LMTP2NNTP_OPERATIONMODE" \
  +     |             -s "$LMTP2NNTP_SIZE" \
  +     |             -t "$LMTP2NNTP_TIMEOUT" \
  +     |             "$LMTP2NNTP_NEWSGROUP"
  +     |         ;;
  +     |     stop )
  +     |         $LMTP2NNTP_PATH -K -P "/path/to/lmtp2nntp.pid"
  +     |         ;;
  +     | esac
  +
  +  5. start lmtp2nntp daemon and reload Postfix to activate the new setup:
  +
  +     $ lmtp2nntpd start
  +     $ postfix reload
   

From ossp-cvs-owner@ossp.org  Sun Oct 14 08:21:54 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9E6LqP72773; Sun, 14 Oct 2001 08:21:52 +0200 (CEST)
Date: Sun, 14 Oct 2001 08:21:52 +0200 (CEST)
Message-Id: <200110140621.f9E6LqP72773@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   14-Oct-2001 08:21:52
  Branch: HEAD                             Handle: 2001101407215100

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    Idea of action channel to conditionally run user code depending on L2 message
    stream content.

  Summary:
    Revision    Changes     Path
    1.30        +11 -0      ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 TODO
  --- ossp-pkg/l2/TODO	2001/10/12 12:17:50	1.29
  +++ ossp-pkg/l2/TODO	2001/10/14 06:21:51	1.30
  @@ -56,6 +56,7 @@
   - find alternative to exec arguments which is hard coded to 256
   - signal handler chaining, save old signal handler and call it after our own
   - consider adding options such as PCRE_CASELESS to filter channel
  +- implement "action" channel
   
   ISSUES
   ------
  @@ -147,6 +148,16 @@
   o l2_ch_buffer
     - write() must implicitly flush() when incoming
       data is larger than remaining buffer capacity
  +o l2_ch_action
  +  - new action channnel could accept a regexp or L2_LEVEL as configuration,
  +    and then run a callback function or exec a binary depending on incoming
  +    l2 stream messages. For example, lmtp2nntp could conditionally run code
  +    via the new action channel to monitor spam or alert an admin about a
  +    flawed OR CURIOUs LMTP header. However, the action channel is also
  +    appealling to other applications that don't run as daemons or at the
  +    system level.
  +  - l2_channel_config(l2Act, "regexp,run", "(nobody|cz)", "callback");
  +  - l2_channel_config(l2Act, "funcptr", pfnAddtcpwrap);
   
   License:
   - ISC/MIT/BSD

From ossp-cvs-owner@ossp.org  Mon Oct 15 12:13:52 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9FADpj78042; Mon, 15 Oct 2001 12:13:51 +0200 (CEST)
Date: Mon, 15 Oct 2001 12:13:51 +0200 (CEST)
Message-Id: <200110151013.f9FADpj78042@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c lmtp2nntp.pod test.sh
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   15-Oct-2001 12:13:51
  Branch: HEAD                             Handle: 2001101511135000

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c lmtp2nntp.pod test.sh

  Log:
    Applied Ralf's "Approved:" header patch but in a more general form which
    allows any kind and any number of headers to be inserted.

  Summary:
    Revision    Changes     Path
    1.91        +41 -1      ossp-pkg/lmtp2nntp/lmtp2nntp.c
    1.32        +7  -0      ossp-pkg/lmtp2nntp/lmtp2nntp.pod
    1.6         +4  -8      ossp-pkg/lmtp2nntp/test.sh
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.90 -r1.91 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/12 13:24:44	1.90
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/15 10:13:50	1.91
  @@ -143,6 +143,8 @@
       char           *option_operationmodefakestatus;
       char           *option_operationmodefakedsn;
       int             option_maxmessagesize;
  +    char           *azHeaderValuePairs;
  +    size_t          asHeaderValuePairs;
       int             option_timeout_lmtp_accept;
       int             option_timeout_lmtp_read;
       int             option_timeout_lmtp_write;
  @@ -218,6 +220,7 @@
               "[-c addr[:port]] "
               "[-d addr[:port][,addr[:port], ...]] "
               "[-g groupmode] "
  +            "[-h header:value] "
               "[-l level[:logfile]] "
               "[-m mailfrom] "
               "[-n nodename] "
  @@ -403,6 +406,8 @@
       char         *cpAddr;
       char         *cpPrefixLen;
       struct passwd *sPasswd;
  +    char         *cpHeadername;
  +    char         *cpHeadervalue;
   
       /* drop effective uid/gid priviledges */
       seteuid(getuid());
  @@ -429,6 +434,8 @@
       ctx->option_operationmodefakestatus = "553";   /* Requested action not taken: mailbox name not allowed */
       ctx->option_operationmodefakedsn    = "5.7.1"; /* Delivery not authorized, message refused */
       ctx->option_maxmessagesize = 8 * 1024 * 1024;
  +    ctx->azHeaderValuePairs = NULL;
  +    ctx->asHeaderValuePairs = 0;
       ctx->option_timeout_lmtp_accept = 0;
       ctx->option_timeout_lmtp_read = 10;
       ctx->option_timeout_lmtp_write = 10;
  @@ -485,7 +492,7 @@
        */
   
       /* read in the arguments */
  -    while ((i = getopt(argc, argv, "C:DKP:Va:b:c:d:g:l:m:n:o:s:t:u:v")) != -1) {
  +    while ((i = getopt(argc, argv, "C:DKP:Va:b:c:d:g:h:l:m:n:o:s:t:u:v")) != -1) {
           switch (i) {
               case 'C': /*POD [B<-C> I<childsmax>] */
                   ctx->option_childsmax = atoi(optarg);
  @@ -693,6 +700,28 @@
                       CU(ERR_EXECUTION);
                   }
                   break;
  +            case 'h': /*POD [B<-h> I<header>:<value>] */
  +                cpHeadername = strdup(optarg);
  +                if ((cp = strrchr(cpHeadername, ':')) == NULL) {
  +                    free(cpHeadername);
  +                    fprintf(stderr, "%s:Error: header \"%s\" for -h option not terminated with colon\n", 
  +                            ctx->progname, cpHeadername);
  +                    CU(ERR_EXECUTION);
  +                }
  +                cp++;
  +                if (*cp == NUL) {
  +                    free(cpHeadername);
  +                    fprintf(stderr, "%s:Error: header \"%s\" for -h option has no value\n", 
  +                            ctx->progname, cpHeadername);
  +                    CU(ERR_EXECUTION);
  +                }
  +                cpHeadervalue = strdup(cp);
  +                *cp = NUL;
  +                argz_add(&ctx->azHeaderValuePairs, &ctx->asHeaderValuePairs, cpHeadername);
  +                argz_add(&ctx->azHeaderValuePairs, &ctx->asHeaderValuePairs, cpHeadervalue);
  +                free(cpHeadervalue);
  +                free(cpHeadername);
  +                break;
               case 'l': /*POD [B<-l> I<level>[:I<logfile>]] */
                   if ((cp = strrchr(optarg, ':')) != NULL) {
                       *cp++ = NUL;
  @@ -1238,6 +1267,8 @@
           sa_destroy(ctx->saAltio);
       if (ctx->saaAltio)
           sa_addr_destroy(ctx->saaAltio);
  +    if (ctx->azHeaderValuePairs != NULL)
  +        free(ctx->azHeaderValuePairs);
       if (ctx->option_pidfile != NULL)
           free(ctx->option_pidfile);
       if (ctx->option_logfile != NULL)
  @@ -1999,6 +2030,15 @@
                   lmtp_response(lmtp, &res);
               }
               return LMTP_OK;
  +        }
  +    }
  +
  +    /* Optionally add command line specified Header/Value Pairs
  +     */
  +    if ((ctx->asHeaderValuePairs >= 1) && ((ctx->asHeaderValuePairs & 1) == 0)) {
  +        cp = NULL;
  +        while ((cp = argz_next(ctx->azHeaderValuePairs, ctx->asHeaderValuePairs, cp)) != NULL) {
  +            argz_add(&ctx->msg->azHeaders, &ctx->msg->asHeaders, cp);
           }
       }
   
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 lmtp2nntp.pod
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/10/12 13:23:52	1.31
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/10/15 10:13:50	1.32
  @@ -43,6 +43,7 @@
   [B<-c> I<addr>[I<:port>]]
   [B<-d> I<addr>[I<:port>][,I<addr>[I<:port>], ...]]
   [B<-g> I<groupmode>]
  +[B<-h> I<header>:<value>]
   [B<-l> I<level>[:I<logfile>]]
   [B<-m> I<mailfrom>]
   [B<-n> I<nodename>]
  @@ -69,6 +70,12 @@
   The following command line options and arguments are available:
   
   =over 4
  +
  +=item B<-h> I<header>:<value>
  +
  +Header with value to to be inserted into message before delivery.  This option
  +can be specified more than once.  Useful for specifiying an moderator Email
  +address to all outgoing news messages by applying an "Approved:" header.
   
   =item B<-C> I<childsmax>
   
  Index: ossp-pkg/lmtp2nntp/test.sh
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 test.sh
  --- ossp-pkg/lmtp2nntp/test.sh	2001/10/12 14:02:57	1.5
  +++ ossp-pkg/lmtp2nntp/test.sh	2001/10/15 10:13:50	1.6
  @@ -16,10 +16,10 @@
   Message-Id: <200108141251.f7ECpmn74812@dev.de.cw.net>
   From: Thomas Lotterer <Thomas.Lotterer@example.com>
   Received: from cw.example.com (cw.example.com [10.1.1.32])
  -    by gateway.example.com (8.9.2/8.9.2/$Revision: 1.5 $) with SMTP id NAA08840
  +    by gateway.example.com (8.9.2/8.9.2/$Revision: 1.6 $) with SMTP id NAA08840
       for <thomas.lotterer@gateway.example.com>; Mon, 2 Apr 2001 13:20:25 +0200 (MET DST)
   Received: from history (history.example.org [195.143.102.41])
  -    by cw.example.com (8.11.0/8.11.0/$Revision: 1.5 $) with ESMTP id f32BKPb12235
  +    by cw.example.com (8.11.0/8.11.0/$Revision: 1.6 $) with ESMTP id f32BKPb12235
       for <thomas.lotterer@example.com>; Mon, 2 Apr 2001 13:20:25 +0200
   Received: from example.org (littlemua.example.org [195.143.103.160])
   	by history (8.8.8/8.8.8) with ESMTP id LAA12678;
  @@ -100,15 +100,11 @@
   echo "yes"
   
   echon "checking whether -? usage option works ... "
  -# expected typical output: USAGE: ./lmtp2nntp
  -# [-D] [-K] [-P pidfile] [-a addr/mask[,addr/mask[,...]] [-b
  -# -|path|addr[:port]] [-c addr[:port]] [-d addr[:port][,addr[:port], ...]] [-g
  -# groupmode] [-l level[:logfile]] [-m mailfrom] [-n nodename] [-o operationmode]
  -# [-s size] [-t name=sec[,name=sec[,...]] [-v] newsgroup [newsgroup ...] 
  +# expected typical output see ./lmtp2nntp -?
   prolog
   newmsg
   ./lmtp2nntp -? >${STDOUT} 2>${STDERR}
  -RC=`cat ${STDERR} | egrep -- '-C.*-D.*-K.*-P.*-V.*-a.*-b.*-d.*-g.*-l.*-m.*-n.*-o.*-s.*-t.*-v.*newsgroup' | wc -l`
  +RC=`cat ${STDERR} | egrep -- '-C.*-D.*-K.*-P.*-V.*-a.*-b.*-d.*-g.*-h.*-l.*-m.*-n.*-o.*-s.*-t.*-v.*newsgroup' | wc -l`
   if [ ${RC} -ne 1 -o -s ${STDOUT} ]; then
       echo "NO (got ${RC})"
       exit 1;

From ossp-cvs-owner@ossp.org  Mon Oct 15 12:14:32 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9FAEWN78131; Mon, 15 Oct 2001 12:14:32 +0200 (CEST)
Date: Mon, 15 Oct 2001 12:14:32 +0200 (CEST)
Message-Id: <200110151014.f9FAEWN78131@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp NEWS
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   15-Oct-2001 12:14:32
  Branch: HEAD                             Handle: 2001101511143100

  Modified files:
    ossp-pkg/lmtp2nntp      NEWS

  Log:
    tell NEWS about -h option

  Summary:
    Revision    Changes     Path
    1.5         +1  -0      ossp-pkg/lmtp2nntp/NEWS
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/NEWS
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 NEWS
  --- ossp-pkg/lmtp2nntp/NEWS	2001/10/11 09:28:52	1.4
  +++ ossp-pkg/lmtp2nntp/NEWS	2001/10/15 10:14:31	1.5
  @@ -24,6 +24,7 @@
       n/a                     -b (LMTP daemon bind)
       -b (bind)           ->  -c (NNTP client bind)
       -h (host)           ->  -d (NNTP client destination)
  +    n/a                     -h (header/value)
       -d (deliverymode)   ->  -o (operationmode)
       n/a                     -t (timeouts)
       -w (waittime)       ->  n/a, replace with -t nntp:connect=

From ossp-cvs-owner@ossp.org  Mon Oct 15 13:26:17 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9FBQGH86577; Mon, 15 Oct 2001 13:26:16 +0200 (CEST)
Date: Mon, 15 Oct 2001 13:26:16 +0200 (CEST)
Message-Id: <200110151126.f9FBQGH86577@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   15-Oct-2001 13:26:16
  Branch: HEAD                             Handle: 2001101512261500

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c

  Log:
    need to check the leftmost colon to support colons in Headervalue

  Summary:
    Revision    Changes     Path
    1.92        +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.91 -r1.92 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/15 10:13:50	1.91
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/15 11:26:15	1.92
  @@ -702,7 +702,7 @@
                   break;
               case 'h': /*POD [B<-h> I<header>:<value>] */
                   cpHeadername = strdup(optarg);
  -                if ((cp = strrchr(cpHeadername, ':')) == NULL) {
  +                if ((cp = strchr(cpHeadername, ':')) == NULL) {
                       free(cpHeadername);
                       fprintf(stderr, "%s:Error: header \"%s\" for -h option not terminated with colon\n", 
                               ctx->progname, cpHeadername);

From ossp-cvs-owner@ossp.org  Mon Oct 15 13:32:08 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9FBW7J87508; Mon, 15 Oct 2001 13:32:07 +0200 (CEST)
Date: Mon, 15 Oct 2001 13:32:07 +0200 (CEST)
Message-Id: <200110151132.f9FBW7J87508@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   15-Oct-2001 13:32:07
  Branch: HEAD                             Handle: 2001101512320700

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO

  Log:
    make sure almshouse does not get boring

  Summary:
    Revision    Changes     Path
    1.42        +4  -0      ossp-pkg/lmtp2nntp/00TODO
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.41 -r1.42 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	2001/10/12 12:52:35	1.41
  +++ ossp-pkg/lmtp2nntp/00TODO	2001/10/15 11:32:07	1.42
  @@ -17,6 +17,10 @@
     
     split already too large lmtp2nntp.c source into smaller pieces (~ 10-30KB each only)
   
  +  make msg.c a library with functions to add/ remove headers.
  +
  +  add artifical delay for error respones to defeat DoS attacks.
  +
     **** DEVELOPMENT INFORMATION ****
   
     Proposal for future URL-style logging option syntax

From ossp-cvs-owner@ossp.org  Mon Oct 15 14:48:59 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9FCmw096618; Mon, 15 Oct 2001 14:48:58 +0200 (CEST)
Date: Mon, 15 Oct 2001 14:48:58 +0200 (CEST)
Message-Id: <200110151248.f9FCmw096618@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO lmtp2nntp.c nntp.c nntp.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   15-Oct-2001 14:48:58
  Branch: HEAD                             Handle: 2001101513485700

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO lmtp2nntp.c nntp.c nntp.h

  Log:
    Remember text from last NNTP error message and pass it back to LMTP

  Summary:
    Revision    Changes     Path
    1.43        +0  -2      ossp-pkg/lmtp2nntp/00TODO
    1.93        +3  -1      ossp-pkg/lmtp2nntp/lmtp2nntp.c
    1.27        +31 -9      ossp-pkg/lmtp2nntp/nntp.c
    1.13        +1  -0      ossp-pkg/lmtp2nntp/nntp.h
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.42 -r1.43 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	2001/10/15 11:32:07	1.42
  +++ ossp-pkg/lmtp2nntp/00TODO	2001/10/15 12:48:57	1.43
  @@ -11,8 +11,6 @@
   
     Proper cleanup when exiting through signals.
   
  -  Remember text from last NNTP error message and pass it back to LMTP.
  -
     move code out of getopt()-loop
     
     split already too large lmtp2nntp.c source into smaller pieces (~ 10-30KB each only)
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.92 -r1.93 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/15 11:26:15	1.92
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/15 12:48:57	1.93
  @@ -2163,7 +2163,9 @@
           argz_add(&azErr, &asErr, errorstring);
           for (i = 0; i < ctx->nsc; i++) {
               if (ctx->ns[i].rc != NNTP_OK) {
  -                str_format(errorstring, sizeof(errorstring), "%s:%s returned %s", ctx->ns[i].h, ctx->ns[i].p, nntp_error(ctx->ns[i].rc));
  +                str_format(errorstring, sizeof(errorstring), 
  +                "%s:%s returned %s\nwith last response \"%s\"", 
  +                ctx->ns[i].h, ctx->ns[i].p, nntp_error(ctx->ns[i].rc), nntp_lastresp(ctx->ns[i].nntp));
                   argz_add(&azErr, &asErr, errorstring);
               }
           }
  Index: ossp-pkg/lmtp2nntp/nntp.c
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 nntp.c
  --- ossp-pkg/lmtp2nntp/nntp.c	2001/10/09 12:08:59	1.26
  +++ ossp-pkg/lmtp2nntp/nntp.c	2001/10/15 12:48:57	1.27
  @@ -67,6 +67,7 @@
       nntp_readline_t rl; 
       struct timeval  tv;
       int             kludgeinn441dup;
  +    char           *lastresp;
   };
   
   ssize_t nntp_fd_read(void *_ctx, void *buf, size_t buflen)
  @@ -97,6 +98,7 @@
       nntp->rl.rl_bufptr = NULL;
       nntp->rl.rl_buf[0] = NUL;
       nntp->kludgeinn441dup = FALSE;
  +    nntp->lastresp = NULL;
   
       return nntp;
   }
  @@ -149,11 +151,23 @@
   
   void nntp_destroy(nntp_t *nntp)
   {
  -    if (nntp != NULL)
  +    if (nntp != NULL) {
  +        if (nntp->lastresp != NULL)
  +            free(nntp->lastresp);
           free(nntp);
  +    }
       return;
   }
   
  +char *nntp_lastresp(nntp_t *nntp)
  +{
  +    if (nntp == NULL)
  +        return "";
  +    if(nntp->lastresp == NULL)
  +        return "";
  +    return nntp->lastresp;
  +}
  +
   nntp_rc_t nntp_readline(nntp_t *nntp, char *buf, size_t buflen)
   {
       /* read a line (characters until NL) from input stream */
  @@ -254,11 +268,11 @@
        *  expected and we treat this as an error.
        */
       if (strncmp(line, "201", 3) == 0)
  -        return NNTP_ERR_DELIVERY;
  +        CU(NNTP_ERR_DELIVERY);
       if (   strncmp(line, "200", 3) != 0
           && strncmp(line, "5"  , 1) != 0
             )
  -        return NNTP_ERR_DELIVERY;
  +        CU(NNTP_ERR_DELIVERY);
   
       /*  check if this server already knows that artice
        *  > STAT <message-id>
  @@ -275,7 +289,7 @@
       if (strncmp(line, "223", 3) == 0)
           return NNTP_OK;
       if (strncmp(line, "430", 3) != 0)
  -        return NNTP_ERR_DELIVERY;
  +        CU(NNTP_ERR_DELIVERY);
   
       /*  post the article
        *  > POST
  @@ -313,7 +327,7 @@
       if ((rc = nntp_readline(nntp, line, sizeof(line))) != NNTP_OK)
           return rc;
       if (strncmp(line, "340", 3) != 0)
  -        return NNTP_ERR_DELIVERY;
  +        CU(NNTP_ERR_DELIVERY);
   
       do {
           rc = nntp->io.write(nntp->io.ctx, msg->cpMsg, strlen(msg->cpMsg));
  @@ -335,8 +349,12 @@
           if (strncmp(line, "441", 3) == 0)
               return NNTP_OK;
       }
  +
  +    CU(NNTP_ERR_DELIVERY);
   
  -    return NNTP_ERR_DELIVERY;
  +    CUS:
  +    nntp->lastresp = strdup(line);
  +    return rc;
   }
   
   nntp_rc_t nntp_feed(nntp_t *nntp, msg_t *msg)
  @@ -377,10 +395,10 @@
   
       if (   (strncmp(line, "437", 3) == 0)
           || (strncmp(line, "480", 3) == 0))
  -        return NNTP_ERR_DELIVERY;
  +        CU(NNTP_ERR_DELIVERY);
   
       if (strncmp(line, "335", 3) != 0)
  -        return NNTP_ERR_DELIVERY;
  +        CU(NNTP_ERR_DELIVERY);
   
       do {
           rc = nntp->io.write(nntp->io.ctx, msg->cpMsg, strlen(msg->cpMsg));
  @@ -396,8 +414,12 @@
   
       if (strncmp(line, "436", 3) == 0)
           return NNTP_DEFER;
  +
  +    CU(NNTP_ERR_DELIVERY);
   
  -    return NNTP_ERR_DELIVERY;
  +    CUS:
  +    nntp->lastresp = strdup(line);
  +    return rc;
   }
   
   char *nntp_error(nntp_rc_t rc)
  Index: ossp-pkg/lmtp2nntp/nntp.h
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 nntp.h
  --- ossp-pkg/lmtp2nntp/nntp.h	2001/10/09 12:08:59	1.12
  +++ ossp-pkg/lmtp2nntp/nntp.h	2001/10/15 12:48:57	1.13
  @@ -66,6 +66,7 @@
   nntp_rc_t   nntp_writeline(nntp_t *, char *);
   nntp_rc_t   nntp_post     (nntp_t *, msg_t *msg);
   nntp_rc_t   nntp_feed     (nntp_t *, msg_t *msg);
  +char       *nntp_lastresp (nntp_t *nntp);
   char       *nntp_error    (nntp_rc_t);
   ssize_t     nntp_fd_read  (void *, void *, size_t);
   ssize_t     nntp_fd_write (void *, const void *, size_t);

From ossp-cvs-owner@ossp.org  Mon Oct 15 15:05:24 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9FD5Nn98366; Mon, 15 Oct 2001 15:05:23 +0200 (CEST)
Date: Mon, 15 Oct 2001 15:05:23 +0200 (CEST)
Message-Id: <200110151305.f9FD5Nn98366@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   15-Oct-2001 15:05:23
  Branch: HEAD                             Handle: 2001101514052200

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c

  Log:
    some errors in option parsing reported obsolete option names

  Summary:
    Revision    Changes     Path
    1.94        +8  -8      ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.93 -r1.94 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/15 12:48:57	1.93
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/15 13:05:22	1.94
  @@ -557,7 +557,7 @@
                           CU(ERR_EXECUTION);
                       }
                       if ((rc = sa_addr_create(&ctx->saaAltio)) != SA_OK) {
  -                        fprintf(stderr, "%s:Error: Creating address failed for -a option (%d)\n", 
  +                        fprintf(stderr, "%s:Error: Creating address failed for -b option (%d)\n", 
                                   ctx->progname, rc);
                       }
                       if (optarg[0] == '/') {
  @@ -641,7 +641,7 @@
                   else 
                       ctx->cpBindp = strdup("0");
                   if ((rc = sa_addr_create(&ctx->saaBind)) != SA_OK) {
  -                    fprintf(stderr, "%s:Error: Creating address failed for -b option (%d)\n", 
  +                    fprintf(stderr, "%s:Error: Creating address failed for -c option (%d)\n", 
                               ctx->progname, rc);
                   }
                   if ((rc = sa_addr_u2a(ctx->saaBind, "inet://%s:%s", ctx->cpBindh, ctx->cpBindp)) != SA_OK) {
  @@ -656,7 +656,7 @@
                   cp = NULL;
                   while ((cp = argz_next(azHosts, asHosts, cp)) != NULL) {
                       if (ctx->nsc >= MAXNEWSSERVICES) {
  -                        fprintf(stderr, "%s:Error: Too many services (%d) using option -h\n", ctx->progname, ctx->nsc);
  +                        fprintf(stderr, "%s:Error: Too many services (%d) using option -d\n", ctx->progname, ctx->nsc);
                           CU(ERR_EXECUTION);
                       }
                       cpHost = strdup(cp);
  @@ -669,7 +669,7 @@
                       ctx->ns[ctx->nsc].h = cpHost;
                       ctx->ns[ctx->nsc].p = cpPort;
                       if ((rc = sa_addr_create(&ctx->ns[ctx->nsc].saa)) != SA_OK) {
  -                        fprintf(stderr, "%s:Error: Creating address failed for -h option (%d)\n", 
  +                        fprintf(stderr, "%s:Error: Creating address failed for -d option (%d)\n", 
                               ctx->progname, rc);
                       }
                       if ((rc = sa_addr_u2a(ctx->ns[ctx->nsc].saa, "inet://%s:%s", 
  @@ -771,12 +771,12 @@
                       ctx->option_operationmode = OPERATIONMODE_FEED;
                   else {
                       if (strlen(optarg) != 9) {
  -                        fprintf(stderr, "%s:Error: Invalid format or length \"%s\" to option -d\n", ctx->progname, optarg);
  +                        fprintf(stderr, "%s:Error: Invalid format or length \"%s\" to option -o\n", ctx->progname, optarg);
                           CU(ERR_EXECUTION);
                       }
   
                       if (optarg[3] != '/') {
  -                        fprintf(stderr, "%s:Error: Invalid format or missing slash \"%s\" to option -d\n", ctx->progname, optarg);
  +                        fprintf(stderr, "%s:Error: Invalid format or missing slash \"%s\" to option -o\n", ctx->progname, optarg);
                           CU(ERR_EXECUTION);
                       }
   
  @@ -788,7 +788,7 @@
                           || !isdigit((int)ctx->option_operationmodefakestatus[0])
                           || !isdigit((int)ctx->option_operationmodefakestatus[1])
                           || !isdigit((int)ctx->option_operationmodefakestatus[2])) {
  -                            fprintf(stderr, "%s:Error: Invalid status in format \"%s\" to option -d\n", ctx->progname, optarg);
  +                            fprintf(stderr, "%s:Error: Invalid status in format \"%s\" to option -o\n", ctx->progname, optarg);
                               CU(ERR_EXECUTION);
                           }
   
  @@ -799,7 +799,7 @@
                           || (ctx->option_operationmodefakedsn[3] != '.')
                           || !isdigit((int)ctx->option_operationmodefakedsn[4])
                           || (ctx->option_operationmodefakedsn[0] != ctx->option_operationmodefakestatus[0])) {
  -                            fprintf(stderr, "%s:Error: Invalid dsn in format \"%s\" to option -d\n", ctx->progname, optarg);
  +                            fprintf(stderr, "%s:Error: Invalid dsn in format \"%s\" to option -o\n", ctx->progname, optarg);
                               CU(ERR_EXECUTION);
                           }
                       }

From ossp-cvs-owner@ossp.org  Mon Oct 15 15:14:44 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9FDEht99328; Mon, 15 Oct 2001 15:14:43 +0200 (CEST)
Date: Mon, 15 Oct 2001 15:14:43 +0200 (CEST)
Message-Id: <200110151314.f9FDEht99328@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   15-Oct-2001 15:14:43
  Branch: HEAD                             Handle: 2001101514144300

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c

  Log:
    trimmed STDSTRLEN. made nntp_(error|lastresp) output nicer

  Summary:
    Revision    Changes     Path
    1.95        +6  -5      ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.94 -r1.95 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/15 13:05:22	1.94
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/15 13:14:43	1.95
  @@ -91,8 +91,9 @@
   #define ERR_EXECUTION 1
   #define ERR_DELIVERY -2
   
  -#define STDSTRLEN 128
  +#define STDSTRLEN 512
   #define MAXNEWSSERVICES 16
  +#define MAXACLS 32
   
   static lmtp_rc_t lmtp_cb_lhlo(lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *ctx);
   static lmtp_rc_t lmtp_cb_mail(lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *ctx);
  @@ -125,8 +126,6 @@
       l2_stream_t    *l2;
   };
   
  -#define MAXACLS 32
  -
   struct acl {
       char      *acl;
       int        not;
  @@ -2164,8 +2163,10 @@
           for (i = 0; i < ctx->nsc; i++) {
               if (ctx->ns[i].rc != NNTP_OK) {
                   str_format(errorstring, sizeof(errorstring), 
  -                "%s:%s returned %s\nwith last response \"%s\"", 
  -                ctx->ns[i].h, ctx->ns[i].p, nntp_error(ctx->ns[i].rc), nntp_lastresp(ctx->ns[i].nntp));
  +                "%s:%s returned %s\n"
  +                "%s:%s lastresp \"%s\"", 
  +                ctx->ns[i].h, ctx->ns[i].p, nntp_error(ctx->ns[i].rc), 
  +                ctx->ns[i].h, ctx->ns[i].p, nntp_lastresp(ctx->ns[i].nntp));
                   argz_add(&azErr, &asErr, errorstring);
               }
           }

From ossp-cvs-owner@ossp.org  Mon Oct 15 16:22:15 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9FEMDk08623; Mon, 15 Oct 2001 16:22:13 +0200 (CEST)
Date: Mon, 15 Oct 2001 16:22:13 +0200 (CEST)
Message-Id: <200110151422.f9FEMDk08623@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c lmtp2nntp.pod test.sh
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   15-Oct-2001 16:22:13
  Branch: HEAD                             Handle: 2001101515221200

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c lmtp2nntp.pod test.sh

  Log:
    added -r restrictheaders option

  Summary:
    Revision    Changes     Path
    1.96        +62 -1      ossp-pkg/lmtp2nntp/lmtp2nntp.c
    1.33        +8  -0      ossp-pkg/lmtp2nntp/lmtp2nntp.pod
    1.7         +3  -3      ossp-pkg/lmtp2nntp/test.sh
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.95 -r1.96 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/15 13:14:43	1.95
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/15 14:22:12	1.96
  @@ -151,6 +151,7 @@
       int             option_timeout_nntp_read;
       int             option_timeout_nntp_write;
       char           *option_mailfrom;
  +    char           *option_restrictheader;
       unsigned int    option_levelmask;
       char           *option_pidfile;
       int             option_killflag;
  @@ -224,6 +225,7 @@
               "[-m mailfrom] "
               "[-n nodename] "
               "[-o operationmode] "
  +            "[-r restrictheader] "
               "[-s size] "
               "[-t name=sec[,name=sec[,...]] "
               "[-u uid] "
  @@ -442,6 +444,7 @@
       ctx->option_timeout_nntp_read = 60;
       ctx->option_timeout_nntp_write = 60;
       ctx->option_mailfrom = NULL;
  +    ctx->option_restrictheader = NULL;
       ctx->option_levelmask = L2_LEVEL_NONE;
       ctx->option_pidfile = NULL;
       ctx->option_killflag = FALSE;
  @@ -491,7 +494,7 @@
        */
   
       /* read in the arguments */
  -    while ((i = getopt(argc, argv, "C:DKP:Va:b:c:d:g:h:l:m:n:o:s:t:u:v")) != -1) {
  +    while ((i = getopt(argc, argv, "C:DKP:Va:b:c:d:g:h:l:m:n:o:r:s:t:u:v")) != -1) {
           switch (i) {
               case 'C': /*POD [B<-C> I<childsmax>] */
                   ctx->option_childsmax = atoi(optarg);
  @@ -803,6 +806,22 @@
                           }
                       }
                   break;
  +            case 'r': /*POD [B<-r> I<restrictheader>] */
  +                ctx->option_restrictheader = strdup(optarg);
  +                /* protect ourselfs from the substitution of backreferences.
  +                 * Missing varargs would cause segfaults.  Rewrite capturing
  +                 * brackets to clustering syntax. Use poor man's s///g
  +                 * simulator as current str library doesn't support global
  +                 * substitution */
  +                while (str_parse(ctx->option_restrictheader, "s/(.*?)\\((?!\\?:)(.*)/$1(?:$2/", &cp) > 0) {
  +                    free(ctx->option_restrictheader);
  +                    ctx->option_restrictheader = cp;
  +                }
  +                if (str_parse("<>", ctx->option_restrictheader) == -1) {
  +                    fprintf(stderr, "%s:Error: illegal regex \"%s\" to option -r.\n", ctx->progname, ctx->option_restrictheader);
  +                    CU(ERR_EXECUTION);
  +                }
  +                break;
               case 's': /*POD [B<-s> I<size>] */
                   ctx->option_maxmessagesize = atoi(optarg);
                   if(ctx->option_maxmessagesize < 64) {
  @@ -1266,6 +1285,8 @@
           sa_destroy(ctx->saAltio);
       if (ctx->saaAltio)
           sa_addr_destroy(ctx->saaAltio);
  +    if (ctx->option_restrictheader != NULL)
  +        free(ctx->option_restrictheader);
       if (ctx->azHeaderValuePairs != NULL)
           free(ctx->azHeaderValuePairs);
       if (ctx->option_pidfile != NULL)
  @@ -1873,6 +1894,9 @@
       int          i;
       int          bSuccess;
       char        *cp;
  +    int          bOk;
  +    char        *cpRestrictheader;
  +    char        *cpRestrictvalue;
   
       log1(ctx, INFO, "LMTP service executing DATA command < %s", req->msg);
   
  @@ -2032,8 +2056,45 @@
           }
       }
   
  +    /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   550 Requested action not taken: mailbox unavailable
  +     *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
  +     *  RFC1893 3.5 Network and Routing Status          X.7.1   Delivery not authorized, message refused
  +     */
  +    log0(ctx, TRACE, "checking if restricted header causes reject");
  +    if (ctx->option_restrictheader != NULL) {
  +        bOk = FALSE;
  +        cp = NULL;
  +        while ((cp = argz_next(ctx->msg->azHeaders, ctx->msg->asHeaders, cp)) != NULL) {
  +            cpRestrictheader = cp;
  +            if ((cp = argz_next(ctx->msg->azHeaders, ctx->msg->asHeaders, cp)) == NULL)
  +                break;
  +            cpRestrictvalue = cp;
  +            str_format(errorstring, sizeof(errorstring), "%s %s", cpRestrictheader, cpRestrictvalue);
  +            if (str_parse(errorstring, ctx->option_restrictheader) <= 0) {
  +                log2(ctx, TRACE, "\"%s\" matching against \"%s\" NO", errorstring, ctx->option_restrictheader);
  +            }
  +            else {
  +                log2(ctx, TRACE, "\"%s\" matching against \"%s\": YES", errorstring, ctx->option_restrictheader);
  +                bOk = TRUE;
  +                break;
  +            }
  +        }
  +        if (bOk) {
  +            log0(ctx, TRACE, "restricted header found");
  +            rcpt = NULL;
  +            while ((rcpt = argz_next(ctx->msg->azRcpt, ctx->msg->asRcpt, rcpt)) != NULL) {
  +                res.statuscode = "550";
  +                res.dsncode    = "5.7.1";
  +                res.statusmsg  = "Restricted header matched, message rejected.";
  +                lmtp_response(lmtp, &res);
  +            }
  +            return LMTP_OK;
  +        }
  +    }
  +
       /* Optionally add command line specified Header/Value Pairs
        */
  +    log0(ctx, TRACE, "adding header/value pairs");
       if ((ctx->asHeaderValuePairs >= 1) && ((ctx->asHeaderValuePairs & 1) == 0)) {
           cp = NULL;
           while ((cp = argz_next(ctx->azHeaderValuePairs, ctx->asHeaderValuePairs, cp)) != NULL) {
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ============================================================
  $ cvs diff -u -r1.32 -r1.33 lmtp2nntp.pod
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/10/15 10:13:50	1.32
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.pod	2001/10/15 14:22:12	1.33
  @@ -48,6 +48,7 @@
   [B<-m> I<mailfrom>]
   [B<-n> I<nodename>]
   [B<-o> I<operationmode>]
  +[B<-r> I<restrictheader>]
   [B<-s> I<size>]
   [B<-t> I<name>=I<sec>[,I<name>=I<sec>[,...]]
   [B<-u> I<uid>]
  @@ -196,6 +197,13 @@
   setups without engaging NNTP.  Fake mode makes it possible to run without any
   B<-d> option. However, if B<-d> option is given the NNTP client tries to
   connect but it's return codes are ignored.
  +
  +=item B<-r> I<restrictheader>
  +
  +Restricted headers. Messages with a matching restrictheader are rejected.  If
  +ommitted no restrictions apply. Matching is done before -h headers are
  +appended. Use a PCRE (Perl compatible reguar expression) for
  +I<restrictheader>.
   
   =item B<-s> I<size>
   
  Index: ossp-pkg/lmtp2nntp/test.sh
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 test.sh
  --- ossp-pkg/lmtp2nntp/test.sh	2001/10/15 10:13:50	1.6
  +++ ossp-pkg/lmtp2nntp/test.sh	2001/10/15 14:22:12	1.7
  @@ -16,10 +16,10 @@
   Message-Id: <200108141251.f7ECpmn74812@dev.de.cw.net>
   From: Thomas Lotterer <Thomas.Lotterer@example.com>
   Received: from cw.example.com (cw.example.com [10.1.1.32])
  -    by gateway.example.com (8.9.2/8.9.2/$Revision: 1.6 $) with SMTP id NAA08840
  +    by gateway.example.com (8.9.2/8.9.2/$Revision: 1.7 $) with SMTP id NAA08840
       for <thomas.lotterer@gateway.example.com>; Mon, 2 Apr 2001 13:20:25 +0200 (MET DST)
   Received: from history (history.example.org [195.143.102.41])
  -    by cw.example.com (8.11.0/8.11.0/$Revision: 1.6 $) with ESMTP id f32BKPb12235
  +    by cw.example.com (8.11.0/8.11.0/$Revision: 1.7 $) with ESMTP id f32BKPb12235
       for <thomas.lotterer@example.com>; Mon, 2 Apr 2001 13:20:25 +0200
   Received: from example.org (littlemua.example.org [195.143.103.160])
   	by history (8.8.8/8.8.8) with ESMTP id LAA12678;
  @@ -104,7 +104,7 @@
   prolog
   newmsg
   ./lmtp2nntp -? >${STDOUT} 2>${STDERR}
  -RC=`cat ${STDERR} | egrep -- '-C.*-D.*-K.*-P.*-V.*-a.*-b.*-d.*-g.*-h.*-l.*-m.*-n.*-o.*-s.*-t.*-v.*newsgroup' | wc -l`
  +RC=`cat ${STDERR} | egrep -- '-C.*-D.*-K.*-P.*-V.*-a.*-b.*-d.*-g.*-h.*-l.*-m.*-n.*-o.*-r.*-s.*-t.*-v.*newsgroup' | wc -l`
   if [ ${RC} -ne 1 -o -s ${STDOUT} ]; then
       echo "NO (got ${RC})"
       exit 1;

From ossp-cvs-owner@ossp.org  Mon Oct 15 16:32:34 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9FEWX909882; Mon, 15 Oct 2001 16:32:33 +0200 (CEST)
Date: Mon, 15 Oct 2001 16:32:33 +0200 (CEST)
Message-Id: <200110151432.f9FEWX909882@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   15-Oct-2001 16:32:33
  Branch: HEAD                             Handle: 2001101515323200

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO

  Log:
    remember fine tuning

  Summary:
    Revision    Changes     Path
    1.44        +3  -0      ossp-pkg/lmtp2nntp/00TODO
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.43 -r1.44 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	2001/10/15 12:48:57	1.43
  +++ ossp-pkg/lmtp2nntp/00TODO	2001/10/15 14:32:32	1.44
  @@ -19,6 +19,9 @@
   
     add artifical delay for error respones to defeat DoS attacks.
   
  +  the name of the variable "errorstring" is confusing since it is used for
  +  other strings as well, see processing of -r option
  +
     **** DEVELOPMENT INFORMATION ****
   
     Proposal for future URL-style logging option syntax

From ossp-cvs-owner@ossp.org  Mon Oct 15 16:38:49 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9FEcm210659; Mon, 15 Oct 2001 16:38:48 +0200 (CEST)
Date: Mon, 15 Oct 2001 16:38:48 +0200 (CEST)
Message-Id: <200110151438.f9FEcm210659@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp NEWS
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   15-Oct-2001 16:38:48
  Branch: HEAD                             Handle: 2001101515384800

  Modified files:
    ossp-pkg/lmtp2nntp      NEWS

  Log:
    tell NEWS about -r option

  Summary:
    Revision    Changes     Path
    1.6         +1  -0      ossp-pkg/lmtp2nntp/NEWS
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/NEWS
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 NEWS
  --- ossp-pkg/lmtp2nntp/NEWS	2001/10/15 10:14:31	1.5
  +++ ossp-pkg/lmtp2nntp/NEWS	2001/10/15 14:38:48	1.6
  @@ -26,6 +26,7 @@
       -h (host)           ->  -d (NNTP client destination)
       n/a                     -h (header/value)
       -d (deliverymode)   ->  -o (operationmode)
  +    n/a                     -r (restrictheader)
       n/a                     -t (timeouts)
       -w (waittime)       ->  n/a, replace with -t nntp:connect=
   

From ossp-cvs-owner@ossp.org  Mon Oct 15 16:55:47 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9FEtkr12354; Mon, 15 Oct 2001 16:55:46 +0200 (CEST)
Date: Mon, 15 Oct 2001 16:55:46 +0200 (CEST)
Message-Id: <200110151455.f9FEtkr12354@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp README version.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   15-Oct-2001 16:55:46
  Branch: HEAD                             Handle: 2001101515554500

  Modified files:
    ossp-pkg/lmtp2nntp      README version.c

  Log:
    bump version for release

  Summary:
    Revision    Changes     Path
    1.9         +1  -1      ossp-pkg/lmtp2nntp/README
    1.11        +9  -9      ossp-pkg/lmtp2nntp/version.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/README
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 README
  --- ossp-pkg/lmtp2nntp/README	2001/10/12 14:04:17	1.8
  +++ ossp-pkg/lmtp2nntp/README	2001/10/15 14:55:45	1.9
  @@ -7,7 +7,7 @@
                     |_|                        |_|    
   
     OSSP lmtp2nntp - Mail to News Gateway
  -  Version 1.1b1 (12-Oct-2001)
  +  Version 1.1b2 (15-Oct-2001)
   
     ABSTRACT
   
  Index: ossp-pkg/lmtp2nntp/version.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 version.c
  --- ossp-pkg/lmtp2nntp/version.c	2001/10/12 14:04:17	1.10
  +++ ossp-pkg/lmtp2nntp/version.c	2001/10/15 14:55:45	1.11
  @@ -8,7 +8,7 @@
   #ifndef _VERSION_C_
   #define _VERSION_C_
   
  -#define LMTP2NNTP_VERSION 0x101101
  +#define LMTP2NNTP_VERSION 0x101102
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _VERSION_C_AS_HEADER_
   
   lmtp2nntp_version_t lmtp2nntp_version = {
  -    0x101101,
  -    "1.1b1",
  -    "1.1b1 (12-Oct-2001)",
  -    "This is lmtp2nntp, Version 1.1b1 (12-Oct-2001)",
  -    "lmtp2nntp 1.1b1 (12-Oct-2001)",
  -    "lmtp2nntp/1.1b1",
  -    "@(#)lmtp2nntp 1.1b1 (12-Oct-2001)",
  -    "$Id: lmtp2nntp 1.1b1 (12-Oct-2001) $"
  +    0x101102,
  +    "1.1b2",
  +    "1.1b2 (15-Oct-2001)",
  +    "This is lmtp2nntp, Version 1.1b2 (15-Oct-2001)",
  +    "lmtp2nntp 1.1b2 (15-Oct-2001)",
  +    "lmtp2nntp/1.1b2",
  +    "@(#)lmtp2nntp 1.1b2 (15-Oct-2001)",
  +    "$Id: lmtp2nntp 1.1b2 (15-Oct-2001) $"
   };
   
   #endif /* _VERSION_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Fri Oct 19 13:55:02 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9JBt1U75640; Fri, 19 Oct 2001 13:55:01 +0200 (CEST)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 3EC864CE61C; Fri, 19 Oct 2001 13:55:01 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_smtp.c
Message-Id: <20011019115501.3EC864CE61C@visp.engelschall.com>
Date: Fri, 19 Oct 2001 13:55:01 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   19-Oct-2001 13:55:01
  Branch: HEAD                             Handle: 2001101912550000

  Modified files:
    ossp-pkg/l2             l2_ch_smtp.c

  Log:
    fix memory leak

  Summary:
    Revision    Changes     Path
    1.6         +2  -0      ossp-pkg/l2/l2_ch_smtp.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_smtp.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 l2_ch_smtp.c
  --- ossp-pkg/l2/l2_ch_smtp.c	2001/10/10 15:58:27	1.5
  +++ ossp-pkg/l2/l2_ch_smtp.c	2001/10/19 11:55:00	1.6
  @@ -321,6 +321,8 @@
           free(cfg->cpLocalHost);
       if (cfg->cpLocalUser != NULL)
           free(cfg->cpLocalUser);
  +    if (cfg->cpLocalProg != NULL)
  +        free(cfg->cpLocalProg);
       free(cfg);
   
       return L2_OK;

From ossp-cvs-owner@ossp.org  Fri Oct 19 15:06:36 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9JD6ZU85266; Fri, 19 Oct 2001 15:06:35 +0200 (CEST)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id B10EE4CE694; Fri, 19 Oct 2001 15:06:35 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_irc.c
Message-Id: <20011019130635.B10EE4CE694@visp.engelschall.com>
Date: Fri, 19 Oct 2001 15:06:35 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   19-Oct-2001 15:06:35
  Branch: HEAD                             Handle: 2001101914063500

  Modified files:
    ossp-pkg/l2             l2_ch_irc.c

  Log:
    First cut for an IRC output channel. This beast is able to send the
    message to the IRC channel, but the whole client/server communication is
    not quite correct because I don't know how to correctly deal with the
    server responses due to the fact that the IRC protocol (according to the
    RFC) is asynchronous and there can be replies but there have no to be
    replies. The effect is that currently we see:
    
    | *** l2_test (~rse@dev10.dev.de.cw.net) has joined channel #l2
    | <l2_test> A program of user rse on host dev10.dev.de.cw.net logged at Fri, 19
    | Oct 2001 15:01:27 CEST:
    | <l2_test> 0Checking localhost foo [12345/myparm]
    | <foo\x01bar><66:6f:6f:01:62:61:72><Zm9vAWJhcg==>
    | *** Signoff: l2_test (EOF From client)
    
    As you can see, the "EOF from client" is the problem. Currently it is
    caused by a sa_shutdown(), but I don't know how to program it. So, feel
    free to jump in and fix the communication of this channel.

  Summary:
    Revision    Changes     Path
    1.2         +233 -3     ossp-pkg/l2/l2_ch_irc.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_irc.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 l2_ch_irc.c
  --- ossp-pkg/l2/l2_ch_irc.c	2001/10/04 14:58:29	1.1
  +++ ossp-pkg/l2/l2_ch_irc.c	2001/10/19 13:06:35	1.2
  @@ -24,47 +24,277 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  l2_ch_irc.c: internet relay chat channel implementation
  +**  l2_ch_irc.c: Internet Relay Chat (IRC) channel implementation
   */
   
   #include "l2.h"
  +#include "l2_p.h"
   
  +#include <unistd.h>
  +#include <sys/utsname.h>
  +#include <sys/types.h>
  +#include <pwd.h>
  +#include <time.h>
  +
  +/* declare private channel configuration */
  +typedef struct {
  +    char *cpLocalProg;
  +    char *cpLocalHost;
  +    char *cpLocalUser;
  +    char *cpPassword;
  +    char *cpNickname;
  +    char *cpUsername;
  +    char *cpRealname;
  +    char *cpChannel;
  +    int   bJoin;
  +    char *cpHost;
  +    char *cpPort;
  +    long nTimeout; 
  +    sa_addr_t *saaServer;
  +    sa_t *saServer;
  +} l2_ch_irc_t;
  +
  +/* create channel */
   static l2_result_t hook_create(l2_context_t *ctx, l2_channel_t *ch)
   {
  +    l2_ch_irc_t *cfg;
  +    struct utsname uts;
  +    struct passwd *pw;
  +
  +    /* allocate private channel configuration */
  +    if ((cfg = (l2_ch_irc_t *)malloc(sizeof(l2_ch_irc_t))) == NULL)
  +        return L2_ERR_ARG;
  +
  +    /* initialize configuration with reasonable defaults */
  +    cfg->cpLocalProg = NULL;
  +    if ((pw = getpwuid(getuid())) != NULL)
  +        cfg->cpLocalUser = strdup(pw->pw_name);
  +    else
  +        cfg->cpLocalUser = l2_util_asprintf("uid#%d", getuid());
  +    if (uname(&uts) == 0)
  +        cfg->cpLocalHost = strdup(uts.nodename);
  +    else
  +        cfg->cpLocalHost = strdup("localhost");
  +    cfg->cpPassword = strdup("*");
  +    cfg->cpNickname = strdup(cfg->cpLocalUser);
  +    cfg->cpUsername = l2_util_asprintf("%s@%s", cfg->cpLocalUser, cfg->cpLocalHost);
  +    cfg->cpRealname = strdup(cfg->cpUsername);
  +    cfg->cpChannel  = strdup("#l2");
  +    cfg->bJoin      = 1;
  +    cfg->cpHost     = NULL;
  +    cfg->cpPort     = strdup("6667");
  +    cfg->nTimeout   = 30;
  +    cfg->saaServer  = NULL;
  +    cfg->saServer   = NULL;
  +
  +    /* link private channel configuration into channel context */
  +    ctx->vp = cfg;
  +
       return L2_OK;
   }
   
  +/* configure channel */
   static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
  -    return L2_OK;
  +    l2_ch_irc_t *cfg = (l2_ch_irc_t *)ctx->vp;
  +    l2_param_t pa[12]; 
  +    l2_result_t rv;
  +
  +    /* feed and call generic parameter parsing engine */
  +    L2_PARAM_SET(pa[0],  progname,  STRING, &cfg->cpLocalProg);
  +    L2_PARAM_SET(pa[1],  localhost, STRING, &cfg->cpLocalHost);
  +    L2_PARAM_SET(pa[2],  localuser, STRING, &cfg->cpLocalUser);
  +    L2_PARAM_SET(pa[3],  nickname,  STRING, &cfg->cpNickname);
  +    L2_PARAM_SET(pa[4],  username,  STRING, &cfg->cpUsername);
  +    L2_PARAM_SET(pa[5],  realname,  STRING, &cfg->cpRealname);
  +    L2_PARAM_SET(pa[6],  channel,   STRING, &cfg->cpChannel);
  +    L2_PARAM_SET(pa[7],  join,      INT,    &cfg->bJoin);
  +    L2_PARAM_SET(pa[8],  host,      STRING, &cfg->cpHost);
  +    L2_PARAM_SET(pa[9],  port,      STRING, &cfg->cpPort);
  +    L2_PARAM_SET(pa[10], timeout,   INT,    &cfg->nTimeout);
  +    L2_PARAM_END(pa[11]);
  +    rv = l2_util_setparams(pa, fmt, ap);
  +
  +    return rv;
   }
   
  +/* open channel */
   static l2_result_t hook_open(l2_context_t *ctx, l2_channel_t *ch)
   {
  +    l2_ch_irc_t *cfg = (l2_ch_irc_t *)ctx->vp;
  +    sa_rc_t rc;
  +
  +    /* make sure a path was set */
  +    if (cfg->cpHost == NULL)
  +        return L2_ERR_USE;
  +
  +    /* create socket address */
  +    if ((rc = sa_addr_create(&cfg->saaServer)) != SA_OK)
  +        return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
  +    if ((rc = sa_addr_u2a(cfg->saaServer, "inet://%s:%s", 
  +                          cfg->cpHost, cfg->cpPort)) != SA_OK)
  +        return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
  +
  +    /* create socket */
  +    if ((rc = sa_create(&cfg->saServer)) != SA_OK)
  +        return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
  +
  +    /* configure socket parameters */
  +    sa_timeout(cfg->saServer, SA_TIMEOUT_ALL, cfg->nTimeout, 0);
  +    sa_timeout(cfg->saServer, SA_TIMEOUT_READ, 2, 0);
  +    sa_buffer(cfg->saServer, SA_BUFFER_READ, 4096);
  +    sa_buffer(cfg->saServer, SA_BUFFER_WRITE, 4096);
  +
       return L2_OK;
   }
   
  -static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch, l2_level_t level, const char *buf, size_t buf_size)
  +/* write to channel */
  +static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch,
  +                              l2_level_t level, const char *buf, size_t buf_size)
   {
  +    l2_ch_irc_t *cfg = (l2_ch_irc_t *)ctx->vp;
  +    char caLine[1024];
  +    sa_t *sa;
  +    sa_addr_t *saa;
  +    sa_rc_t sa_rv;
  +    size_t n;
  +    struct tm *tm;
  +    time_t t;
  +    char caDate[80];
  +    
  +    /* 
  +     * Sample IRC client transaction for reference:
  +     * | PASS secret
  +     * | NICK rse
  +     * | USER rse@engelschall.com 0 * :Ralf S. Engelschall
  +     * | :irc.engelschall.com 001 rse :Welcome to the Internet Relay Network rse!~rse@dev10.dev.de.cw.net
  +     * | :irc.engelschall.com 002 rse :Your host is irc.engelschall.com, running version 2.10.3p2
  +     * | :irc.engelschall.com 003 rse :This server was created Wed Oct 17 2001 at 18:06:57 CEST
  +     * | :irc.engelschall.com 004 rse irc.engelschall.com 2.10.3p2 aoOirwabeiIklmnoOpqrstv
  +     * | :irc.engelschall.com 251 rse :There are 1 users and 0 services on 1 servers
  +     * | :irc.engelschall.com 254 rse 11 :channels formed
  +     * | :irc.engelschall.com 255 rse :I have 1 users, 0 services and 0 servers
  +     * | :irc.engelschall.com 375 rse :- irc.engelschall.com Message of the Day - 
  +     * | :irc.engelschall.com 372 rse :- 17/10/2001 19:32
  +     * | :irc.engelschall.com 372 rse :- Welcome to the Engelschall VISP IRC Service.
  +     * | :irc.engelschall.com 376 rse :End of MOTD command.
  +     * | :rse MODE rse :+i
  +     * | JOIN #dev
  +     * | :rse!~rse@dev10.dev.de.cw.net JOIN :#dev
  +     * | :irc.engelschall.com 353 rse = #dev :@rse 
  +     * | :irc.engelschall.com 366 rse #dev :End of NAMES list.
  +     * | PRIVMSG #dev :Sample log message line 1
  +     * | PRIVMSG #dev :Sample log message line 2 
  +     * | PRIVMSG #dev :Sample log message line 3
  +     * | QUIT
  +     * | ERROR :Closing Link: rse[~rse@dev10.dev.de.cw.net] (I Quit)
  +     *
  +     * For more details read:
  +     * RFC 2812: Internet Relay Chat: Client Protocol; C. Kalt; April 2000.
  +     */
  +
  +    /* establish connection to server */
  +    saa = cfg->saaServer;
  +    sa  = cfg->saServer;
  +    if ((sa_rv = sa_connect(sa, saa)) != SA_OK)
  +        return (sa_rv == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
  +
  +    /* determine current time */
  +    t = time(NULL);
  +    tm = localtime(&t);
  +    strftime(caDate, sizeof(caDate), "%a, %d %b %Y %H:%M:%S %Z", tm);
  +
  +    /* write transaction to IRC server */
  +    sa_writef(sa, "PASS %s\r\n", cfg->cpPassword);
  +    sa_writef(sa, "NICK %s\r\n", cfg->cpNickname);
  +    sa_writef(sa, "USER %s 0 * :%s\r\n", cfg->cpUsername, cfg->cpRealname);
  +    if (cfg->bJoin)
  +        sa_writef(sa, "JOIN %s\r\n", cfg->cpChannel);
  +    sa_writef(sa, "PRIVMSG %s :", cfg->cpChannel);
  +    if (cfg->cpLocalProg != NULL)
  +        sa_writef(sa, "Program %s of user %s on host %s logged at %s:\r\n", 
  +                   cfg->cpLocalProg, cfg->cpLocalUser, cfg->cpLocalHost, caDate);
  +    else
  +        sa_writef(sa, "A program of user %s on host %s logged at %s:\r\n", 
  +                   cfg->cpLocalUser, cfg->cpLocalHost, caDate);
  +    sa_writef(sa, "PRIVMSG %s :", cfg->cpChannel);
  +    sa_write(sa, buf, buf_size-1, NULL);
  +    sa_writef(sa, "\r\n");
  +    if (cfg->bJoin)
  +        sa_writef(sa, "PART %s\r\n", cfg->cpChannel);
  +    sa_writef(sa, "QUIT\r\n");
  +    sa_flush(sa);
  +
  +    /* shutdown write side of connection to server */
  +    sa_shutdown(sa, "w");
  +
  +    /* still read server responses */
  +    while (sa_readln(sa, caLine, sizeof(caLine), &n) == SA_OK)
  +        ;
  +
  +    /* shutdown read side of connection to server */
  +    sa_shutdown(sa, "r");
  +
       return L2_OK;
   }
   
  +/* close channel */
   static l2_result_t hook_close(l2_context_t *ctx, l2_channel_t *ch)
   {
  +    l2_ch_irc_t *cfg = (l2_ch_irc_t *)ctx->vp;
  +
  +    /* destroy remote address */
  +    if (cfg->saServer != NULL) {
  +        sa_destroy(cfg->saServer);
  +        cfg->saServer = NULL;
  +    }
  +    if (cfg->saaServer != NULL) {
  +        sa_addr_destroy(cfg->saaServer);
  +        cfg->saaServer = NULL;
  +    }
  +
       return L2_OK;
   }
   
  +/* destroy channel */
   static l2_result_t hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
   {
  +    l2_ch_irc_t *cfg = (l2_ch_irc_t *)ctx->vp;
  +
  +    /* destroy channel configuration */
  +    if (cfg->cpLocalProg != NULL)
  +        free(cfg->cpLocalProg);
  +    if (cfg->cpLocalHost != NULL)
  +        free(cfg->cpLocalHost);
  +    if (cfg->cpLocalUser != NULL)
  +        free(cfg->cpLocalUser);
  +    if (cfg->cpPassword != NULL)
  +        free(cfg->cpPassword);
  +    if (cfg->cpNickname != NULL)
  +        free(cfg->cpNickname);
  +    if (cfg->cpUsername != NULL)
  +        free(cfg->cpUsername);
  +    if (cfg->cpRealname != NULL)
  +        free(cfg->cpRealname);
  +    if (cfg->cpChannel != NULL)
  +        free(cfg->cpChannel);
  +    if (cfg->cpHost != NULL)
  +        free(cfg->cpHost);
  +    if (cfg->cpPort != NULL)
  +        free(cfg->cpPort);
  +    free(cfg);
  +
       return L2_OK;
   }
   
  +/* exported channel handler structure */
   l2_handler_t l2_handler_irc = {
       L2_CHANNEL_OUTPUT,
       hook_create,
       hook_configure,
       hook_open,
       hook_write,
  +    NULL,
       hook_close,
       hook_destroy
   };

From ossp-cvs-owner@ossp.org  Fri Oct 19 18:32:08 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9JGW6p27555; Fri, 19 Oct 2001 18:32:06 +0200 (CEST)
Date: Fri, 19 Oct 2001 18:32:06 +0200 (CEST)
Message-Id: <200110191632.f9JGW6p27555@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   19-Oct-2001 18:32:06
  Branch: HEAD                             Handle: 2001101917320500

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    Added Ralf's idea of l2_ch_proxy.

  Summary:
    Revision    Changes     Path
    1.31        +4  -0      ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 TODO
  --- ossp-pkg/l2/TODO	2001/10/14 06:21:51	1.30
  +++ ossp-pkg/l2/TODO	2001/10/19 16:32:05	1.31
  @@ -28,6 +28,10 @@
     -> can be immediately implemented, but one has to be carefully here.
        Seems like I want to think about this a little bit more in-depth. (rse)
   
  +o Another great rse idea, make a proxy server channel that sniffs a tcp
  +  connection and dumps its traffic to standard out. Optionally, it could dump
  +  this to the next channel, allowing for parsing through an unknown protocol.
  +
   RSE:
   - channel API cleanup: open semantics
   - bind and udp parameters in socket channel

From ossp-cvs-owner@ossp.org  Mon Oct 22 17:25:38 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9MFPbU40984; Mon, 22 Oct 2001 17:25:37 +0200 (CEST)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id C89564CE696; Mon, 22 Oct 2001 17:25:37 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Message-Id: <20011022152537.C89564CE696@visp.engelschall.com>
Date: Mon, 22 Oct 2001 17:25:37 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   22-Oct-2001 17:25:37
  Branch: HEAD                             Handle: 2001102216253700

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    remember a view ideas

  Summary:
    Revision    Changes     Path
    1.32        +17 -0      ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 TODO
  --- ossp-pkg/l2/TODO	2001/10/19 16:32:05	1.31
  +++ ossp-pkg/l2/TODO	2001/10/22 15:25:37	1.32
  @@ -2,6 +2,23 @@
   OSSP L2
   =======
   
  +- Problem: OpenPKG fakesyslog ist nasty, because it doesn't provide
  +  logging to multiple files or filter out some messages. Additionally
  +  the app has to be restarted in order to reopen the logfile which
  +  is nasty for MTAs like Postfix in case of very high loads (because
  +  they start again processign the queue from scratch). What we need
  +  is a new L2-based libsyslog.a which sends the stuff via Unix Domain
  +  socket to an L2 daemon which in turn logs to targets via L2.
  +
  +- "smart debug buffer channel": 
  +   extra debug buffer, flush only if error occurs
  +
  +- "repeat channel": "last message repeated 100 times"
  +
  +- "\r\n" Problematik: Vorschlag: Bei Input \r und \n wegstrippen,
  +  und von jedem Output Channel entweder \r\n (smtp) oder nur \n
  +  wieder anhaengen lassen.
  +
   - thl: log facility
     To debug an application, sometimes it's overkill to log everything at
     DEBUG level. I see an improvement when an additional facility can be

From ossp-cvs-owner@ossp.org  Mon Oct 22 18:32:32 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9MGWUn49422; Mon, 22 Oct 2001 18:32:30 +0200 (CEST)
Date: Mon, 22 Oct 2001 18:32:30 +0200 (CEST)
Message-Id: <200110221632.f9MGWUn49422@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_buffer.c l2_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   22-Oct-2001 18:32:30
  Branch: HEAD                             Handle: 2001102217322900

  Modified files:
    ossp-pkg/l2             l2_ch_buffer.c l2_test.c

  Log:
    Completed implementation of timer. Beware of scope problem - I have only
    tested it, but not proven it correct.

  Summary:
    Revision    Changes     Path
    1.25        +11 -3      ossp-pkg/l2/l2_ch_buffer.c
    1.34        +15 -11     ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_buffer.c
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 l2_ch_buffer.c
  --- ossp-pkg/l2/l2_ch_buffer.c	2001/10/12 14:46:17	1.24
  +++ ossp-pkg/l2/l2_ch_buffer.c	2001/10/22 16:32:29	1.25
  @@ -53,16 +53,21 @@
   static void catchsignal(int sig, ...)
   {
       va_list ap;
  -    static  l2_channel_t *ch = NULL;
  +    static  l2_channel_t   *ch  = NULL;
  +    static  l2_ch_buffer_t *cfg = NULL;
   
       if (sig == 0) {
           va_start(ap, sig);
  -        ch = va_arg(ap, l2_channel_t *);
  +        ch  = va_arg(ap, l2_channel_t   *); /* init the handler just like */
  +        cfg = va_arg(ap, l2_ch_buffer_t *); /* Thomas Lotterer does       */
           va_end(ap);
       }
       else if (sig == SIGALRM) {
           TRACE("SIGALRM caught");
           l2_channel_flush(ch);
  +#ifndef HAVE_SETITIMER
  +        reset_alarm(cfg); /* alarm(3) doesn't auto-reset like setitime(2) */
  +#endif
       }
   }
   
  @@ -130,6 +135,7 @@
       valnew.it_value.tv_usec = 0;
       return setitimer(L2_BUFFER_TIMER, &valnew, &cfg->valprev);
   #else
  +    alarm(cfg->bufinterval);
       return 0;
   #endif
   }
  @@ -152,6 +158,7 @@
       valnew.it_value.tv_usec = 0;
       return setitimer(L2_BUFFER_TIMER, &valnew, 0);
   #else
  +    alarm(cfg->bufinterval);
       return 0;
   #endif
   }
  @@ -172,7 +179,7 @@
           sigemptyset(&locact.sa_mask);
           locact.sa_flags = 0;
   
  -        catchsignal(0, ch);
  +        catchsignal(0, ch, (l2_ch_buffer_t *)ctx->vp);
           /* save old signal context before replacing with our own */
           if (sigaction(SIGALRM, &locact, &cfg->sigalrm) < 0)
               return L2_ERR_SYS;
  @@ -243,6 +250,7 @@
       l2_result_t rv;
   
       /* write the buffer contents downstream */
  +TRACE("l2_ch_buffer hook_flush called\n");
       if (cfg->bufpos > 0) {
           if ((rv = l2_channel_write(downstream, cfg->level, cfg->buf, cfg->bufpos)) != L2_OK)
               return rv;
  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.33 -r1.34 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/10/05 14:25:57	1.33
  +++ ossp-pkg/l2/l2_test.c	2001/10/22 16:32:29	1.34
  @@ -57,6 +57,7 @@
   
   int main(int argc, char *argv[])
   {
  +    int i;                  /* For testing l2_stream_log() */
       l2_channel_t *chFilt;
       l2_channel_t *chPrefix;
       l2_channel_t *chBuf;
  @@ -220,17 +221,20 @@
       if (l2_stream_formatter(st, 'S', l2_util_fmt_dump, NULL) != L2_OK)
           die("failed to configure formatter for %%S");
   
  -    if (l2_stream_log(st, L2_LEVEL_PANIC, "0Checking localhost %s %{myparm}k <%{text}S><%{hex}S><%{base64}S>\n", "foo", 12345, "foo\1bar", 7, "foo\1bar", 7, "foo\1bar", 7) != L2_OK)
  -        die("failed to log message to stream");
  -
  -    if (l2_stream_log(st, L2_LEVEL_PANIC, "1Shecking\n") != L2_OK)
  -        die("failed to log message to stream");
  -
  -    if (l2_stream_log(st, L2_LEVEL_PANIC, "2Checking localhost %s %{myparm}k <%{text}S><%{hex}S><%{base64}S>\n", "foo", 12345, "foo\1bar", 7, "foo\1bar", 7, "foo\1bar", 7) != L2_OK)
  -        die("failed to log message to stream");
  -
  -    if (l2_stream_log(st, L2_LEVEL_PANIC, "3Shecking\n") != L2_OK)
  -        die("failed to log message to stream");
  +    while (1) {
  +        for (i = 1; i != 0; i++);
  +        if (l2_stream_log(st, L2_LEVEL_PANIC, "0Checking localhost %s %{myparm}k <%{text}S><%{hex}S><%{base64}S>\n", "foo", 12345, "foo\1bar", 7, "foo\1bar", 7, "foo\1bar", 7) != L2_OK)
  +            die("failed to log message to stream");
  +
  +        if (l2_stream_log(st, L2_LEVEL_PANIC, "1Shecking\n") != L2_OK)
  +            die("failed to log message to stream");
  +
  +        if (l2_stream_log(st, L2_LEVEL_PANIC, "2Checking localhost %s %{myparm}k <%{text}S><%{hex}S><%{base64}S>\n", "foo", 12345, "foo\1bar", 7, "foo\1bar", 7, "foo\1bar", 7) != L2_OK)
  +            die("failed to log message to stream");
  +
  +        if (l2_stream_log(st, L2_LEVEL_PANIC, "3Shecking\n") != L2_OK)
  +            die("failed to log message to stream");
  +    }
   
       if (l2_stream_destroy(st) != L2_OK)
           die("failed to destroy stream");

From ossp-cvs-owner@ossp.org  Tue Oct 23 12:05:58 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9NA5uD74232; Tue, 23 Oct 2001 12:05:56 +0200 (CEST)
Date: Tue, 23 Oct 2001 12:05:56 +0200 (CEST)
Message-Id: <200110231005.f9NA5uD74232@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO l2_ch_buffer.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   23-Oct-2001 12:05:56
  Branch: HEAD                             Handle: 2001102311055300

  Modified files:
    ossp-pkg/l2             TODO l2_ch_buffer.c

  Log:
    Implemented half-solution to occupied timer problem.

  Summary:
    Revision    Changes     Path
    1.33        +1  -0      ossp-pkg/l2/TODO
    1.26        +25 -8      ossp-pkg/l2/l2_ch_buffer.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.32 -r1.33 TODO
  --- ossp-pkg/l2/TODO	2001/10/22 15:25:37	1.32
  +++ ossp-pkg/l2/TODO	2001/10/23 10:05:53	1.33
  @@ -78,6 +78,7 @@
   - signal handler chaining, save old signal handler and call it after our own
   - consider adding options such as PCRE_CASELESS to filter channel
   - implement "action" channel
  +- correct problem with multiple buffer channels using the timer
   
   ISSUES
   ------
  Index: ossp-pkg/l2/l2_ch_buffer.c
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 l2_ch_buffer.c
  --- ossp-pkg/l2/l2_ch_buffer.c	2001/10/22 16:32:29	1.25
  +++ ossp-pkg/l2/l2_ch_buffer.c	2001/10/23 10:05:53	1.26
  @@ -41,7 +41,7 @@
       char       *buf;
       int         bufpos;
       int         bufsize;
  -    int         bufinterval;
  +    long        bufinterval;
       struct      sigaction sigalrm;
   #ifdef HAVE_SETITIMER
       struct      itimerval valprev;
  @@ -111,6 +111,9 @@
       L2_PARAM_SET(pa[2], levelflush, INT, &cfg->levelflush);
       L2_PARAM_END(pa[3]);
       rv = l2_util_setparams(pa, fmt, ap);
  +    if (cfg->bufinterval == -1L) /* -1 is reserved by L2 */
  +        return L2_ERR_ARG;       /* set_alarm() uses it  */
  +
       if (cfg->bufsize < 0) 
           return L2_ERR_ARG;
   
  @@ -124,7 +127,7 @@
   static int set_alarm(l2_ch_buffer_t *cfg)
   {
   #ifdef HAVE_INET_SETITIMER
  -    struct itimerval valnew;
  +    struct itimerval valtest, valnew;
   
       /* initialize auto vars before using them */
       memset(&valnew, 0, sizeof(valnew));
  @@ -133,9 +136,23 @@
       valnew.it_interval.tv_usec = 0;
       valnew.it_value.tv_sec = cfg->bufinterval;
       valnew.it_value.tv_usec = 0;
  -    return setitimer(L2_BUFFER_TIMER, &valnew, &cfg->valprev);
  +    if  ((getitimer(L2_BUFFER_TIMER, &testval) == 0) &&
  +        ((testval.it_value.tv_sec | testval.it_value.tv_usec |
  +        testval.it_interval.tv_sec | testval.it_interval.tv_usec) == 0))
  +        return setitimer(L2_BUFFER_TIMER, &valnew, &cfg->valprev);
  +    else {
  +        cfg->bufinterval = -1L; /* mark this timer as broken */
  +        assert(FALSE);
  +    }
   #else
  -    alarm(cfg->bufinterval);
  +    unsigned int uiAlarmed = 0;
  +
  +    uiAlarmed = alarm(cfg->bufinterval);
  +    if (uiAlarmed) {            /* check if SIGALRM is occupied          */
  +        alarm(uiAlarmed);       /* ...if so, then hack in the old value  */
  +        cfg->bufinterval = -1L; /* ...mark this timer as broken          */
  +        assert(FALSE);          /* ...and warn the user about problems   */
  +    }
       return 0;
   #endif
   }
  @@ -171,7 +188,7 @@
       struct sigaction locact;
       l2_result_t rv;
   
  -    if (cfg->bufinterval != 0) {
  +    if ((cfg->bufinterval != 0) && (cfg->bufinterval != -1L)) {
           /* initialize auto vars before using them */
           memset(&locact, 0, sizeof(locact));
   
  @@ -184,7 +201,7 @@
           if (sigaction(SIGALRM, &locact, &cfg->sigalrm) < 0)
               return L2_ERR_SYS;
   
  -        if (set_alarm(cfg))
  +        if (set_alarm(cfg))      /* this is our own L2 set_alarm */
               return L2_ERR_SYS;
       }
   
  @@ -259,7 +276,7 @@
       }
   
       /* reset the flush alarm timer to synchronize the buffer */
  -    if (cfg->bufinterval != 0)
  +    if ((cfg->bufinterval != 0) && (cfg->bufinterval != -1L))
           if (reset_alarm(cfg))
               return L2_ERR_SYS;
   
  @@ -277,7 +294,7 @@
       l2_channel_t *downstream = l2_channel_downstream(ch);
       l2_result_t rv;
   
  -    if (cfg->bufinterval != 0) {
  +    if ((cfg->bufinterval != 0) && (cfg->bufinterval != -1L)) {
   #ifdef HAVE_INET_SETITIMER
           if (setitimer(L2_BUFFER_TIMER, &cfg->valprev, 0)) /* restore timer */
               return L2_ERR_SYS;

From ossp-cvs-owner@ossp.org  Tue Oct 23 14:02:32 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9NC2VU89730; Tue, 23 Oct 2001 14:02:31 +0200 (CEST)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id BAD904CE694; Tue, 23 Oct 2001 14:02:31 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa TODO
Message-Id: <20011023120231.BAD904CE694@visp.engelschall.com>
Date: Tue, 23 Oct 2001 14:02:31 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   23-Oct-2001 14:02:31
  Branch: HEAD                             Handle: 2001102313023100

  Modified files:
    ossp-pkg/sa             TODO

  Log:
    remember issue

  Summary:
    Revision    Changes     Path
    1.25        +1  -0      ossp-pkg/sa/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 TODO
  --- ossp-pkg/sa/TODO	2001/10/10 15:54:05	1.24
  +++ ossp-pkg/sa/TODO	2001/10/23 12:02:31	1.25
  @@ -2,6 +2,7 @@
   TODO
   ----
   
  +- API function for unbuffered/buffered I/O mode
   - more test cases to cover full API
   - more documentation to fully describe API
   

From ossp-cvs-owner@ossp.org  Tue Oct 23 14:33:30 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9NCXTO93317; Tue, 23 Oct 2001 14:33:29 +0200 (CEST)
Date: Tue, 23 Oct 2001 14:33:29 +0200 (CEST)
Message-Id: <200110231233.f9NCXTO93317@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   23-Oct-2001 14:33:29
  Branch: HEAD                             Handle: 2001102313332800

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    New ideas and dreams about asynch, pipe, shared memory, and multithreading.

  Summary:
    Revision    Changes     Path
    1.34        +11 -2      ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.33 -r1.34 TODO
  --- ossp-pkg/l2/TODO	2001/10/23 10:05:53	1.33
  +++ ossp-pkg/l2/TODO	2001/10/23 12:33:28	1.34
  @@ -69,16 +69,25 @@
     via fcntl(3).
   - syslog channel should support direct remote logging
   - implement "filter" channel
  +- idea of an asynch channel, that spawns a new process and
  +  communicates with the stemming channels via shared memory
   
   MS:
  -- implement pipe channel
  +- pipe channel may need a big overhaul if we redesign
  +  it around the asynch channel principle
   - review pipe handler for dangling descriptors
   - configure only checks existance of command in non-shell mode
   - find alternative to exec arguments which is hard coded to 256
   - signal handler chaining, save old signal handler and call it after our own
   - consider adding options such as PCRE_CASELESS to filter channel
  -- implement "action" channel
  +- implement "action" channel, can be based on pipe channel
   - correct problem with multiple buffer channels using the timer
  +- solve problem with buffer (timer), irc (ping), and buffer (autoflush), by
  +  creating sleep/ping threads. The disadvantage is that we must depend on a
  +  pth installation, and force the parent app to be multithreaded.
  +  Alternatively, we can spawn a management process in l2_stream_create(), who
  +  owns management resources globally available to all channels. Or write the
  +  l2 mini-protocol :-(
   
   ISSUES
   ------

From ossp-cvs-owner@ossp.org  Wed Oct 24 13:23:19 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9OBNIU52852; Wed, 24 Oct 2001 13:23:18 +0200 (CEST)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 27B6C4CE696; Wed, 24 Oct 2001 13:23:18 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c
Message-Id: <20011024112318.27B6C4CE696@visp.engelschall.com>
Date: Wed, 24 Oct 2001 13:23:18 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   24-Oct-2001 13:23:18
  Branch: HEAD                             Handle: 2001102412231700

  Modified files:
    ossp-pkg/sa             sa.c

  Log:
    Enhance/Bugfix IPv6 address handling.

  Summary:
    Revision    Changes     Path
    1.34        +43 -28     ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.33 -r1.34 sa.c
  --- ossp-pkg/sa/sa.c	2001/10/11 15:20:30	1.33
  +++ ossp-pkg/sa/sa.c	2001/10/24 11:23:17	1.34
  @@ -426,6 +426,7 @@
   #ifdef AF_INET6
       struct sockaddr_in6 sa6;
   #endif
  +    int bIPv6;
       struct hostent *he;
       struct servent *se;
       int bNumeric;
  @@ -487,12 +488,36 @@
           sf = AF_LOCAL;
       }
       else if (strncmp(uri, "inet://", 7) == 0) {
  -        /* parse URI */
  +        /* parse URI into host, port and protocol parts */
           cpHost = (char *)(uri+7);
  -        if ((cp = strrchr(cpHost, ':')) == NULL)
  +        bIPv6 = FALSE;
  +        if (cpHost[0] == '[') {
  +            /* IPv6 address (see RFC2732) */
  +#ifndef AF_INET6
               return SA_ERR_ARG;
  -        *cp++ = '\0';
  +#else
  +            bIPv6 = TRUE;
  +            cpHost++;
  +            if ((cp = strchr(cpHost, ']')) == NULL)
  +                return SA_ERR_ARG;
  +            *cp++ = '\0';
  +            if (*cp != ':')
  +                return SA_ERR_ARG;
  +            cp++;
  +#endif
  +        }
  +        else {
  +            /* IPv4 address or hostname */
  +            if ((cp = strrchr(cpHost, ':')) == NULL)
  +                return SA_ERR_ARG;
  +            *cp++ = '\0';
  +        }
           cpPort = cp;
  +        cpProto = "tcp";
  +        if ((cp = strchr(cpPort, '#')) != NULL) {
  +            *cp++ = '\0';
  +            cpProto = cp;
  +        }
   
           /* resolve port */
           nPort = 0;
  @@ -506,11 +531,6 @@
           if (bNumeric)
               nPort = atoi(cpPort);
           else {
  -            cpProto = "tcp";
  -            if ((cp = strchr(cpPort, '#')) != NULL) {
  -                *cp++ = '\0';
  -                cpProto = cp;
  -            }
               if ((se = getservbyname(cpPort, cpProto)) == NULL)
                   return SA_ERR_SYS;
               nPort = ntohs(se->s_port);
  @@ -522,9 +542,9 @@
           memset(&sa6, 0, sizeof(sa6));
   #endif
   
  -        /* resolve host by trying to parse it as either directly a IPv4 or
  -           IPv6 address or by resolving it to either a IPv4 or IPv6 address */
  -        if (sa_inet_pton(AF_INET, cpHost, &sa4.sin_addr.s_addr) == 1) {
  +        /* resolve host by trying to parse it as either directly an IPv4 or
  +           IPv6 address or by resolving it to either an IPv4 or IPv6 address */
  +        if (!bIPv6 && sa_inet_pton(AF_INET, cpHost, &sa4.sin_addr.s_addr) == 1) {
               sa4.sin_family = AF_INET;
               sa4.sin_port = htons(nPort);
               sa = (struct sockaddr *)&sa4;
  @@ -532,7 +552,7 @@
               sf = AF_INET;
           }
   #ifdef AF_INET6
  -        else if (sa_inet_pton(AF_INET6, cpHost, &sa6.sin6_addr.s6_addr) == 1) {
  +        else if (bIPv6 && sa_inet_pton(AF_INET6, cpHost, &sa6.sin6_addr.s6_addr) == 1) {
               sa6.sin6_family = AF_INET6;
               sa6.sin6_port = htons(nPort);
               sa = (struct sockaddr *)&sa6;
  @@ -633,25 +653,20 @@
           else
               sa_msnprintf(uribuf, sizeof(uribuf), "unix:%s", un->sun_path);
       }
  -#ifdef AF_INET6
  -    else if (saa->nFamily == AF_INET || saa->nFamily == AF_INET6) {
  -#else
       else if (saa->nFamily == AF_INET) {
  -#endif
  -        if (saa->nFamily == AF_INET) {
  -            sa4 = (struct sockaddr_in *)((void *)saa->saBuf);
  -            sa_inet_ntop(AF_INET, &sa4->sin_addr.s_addr, caHost, sizeof(caHost));
  -            nPort = ntohs(sa4->sin_port);
  -        }
  -#ifdef AF_INET6
  -        else {
  -            sa6 = (struct sockaddr_in6 *)((void *)saa->saBuf);
  -            sa_inet_ntop(AF_INET6, &sa6->sin6_addr.s6_addr, caHost, sizeof(caHost));
  -            nPort = ntohs(sa6->sin6_port);
  -        }
  -#endif
  +        sa4 = (struct sockaddr_in *)((void *)saa->saBuf);
  +        sa_inet_ntop(AF_INET, &sa4->sin_addr.s_addr, caHost, sizeof(caHost));
  +        nPort = ntohs(sa4->sin_port);
           sa_msnprintf(uribuf, sizeof(uribuf), "inet://%s:%d", caHost, nPort);
       }
  +#ifdef AF_INET6
  +    else if (saa->nFamily == AF_INET6) {
  +        sa6 = (struct sockaddr_in6 *)((void *)saa->saBuf);
  +        sa_inet_ntop(AF_INET6, &sa6->sin6_addr.s6_addr, caHost, sizeof(caHost));
  +        nPort = ntohs(sa6->sin6_port);
  +        sa_msnprintf(uribuf, sizeof(uribuf), "inet://[%s]:%d", caHost, nPort);
  +    }
  +#endif
       else
           return SA_ERR_INT;
   

From ossp-cvs-owner@ossp.org  Wed Oct 24 13:43:30 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9OBhTU55267; Wed, 24 Oct 2001 13:43:29 +0200 (CEST)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 62C654CE696; Wed, 24 Oct 2001 13:43:29 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c
Message-Id: <20011024114329.62C654CE696@visp.engelschall.com>
Date: Wed, 24 Oct 2001 13:43:29 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   24-Oct-2001 13:43:29
  Branch: HEAD                             Handle: 2001102412432800

  Modified files:
    ossp-pkg/sa             sa.c

  Log:
    fix socket descriptor handling in case of connect errors

  Summary:
    Revision    Changes     Path
    1.35        +2  -0      ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.34 -r1.35 sa.c
  --- ossp-pkg/sa/sa.c	2001/10/24 11:23:17	1.34
  +++ ossp-pkg/sa/sa.c	2001/10/24 11:43:28	1.35
  @@ -1149,6 +1149,7 @@
           }
           else if (n == 0) {
               close(sa->fdSocket); /* stop TCP three-way handshake */
  +            sa->fdSocket = -1;
               rv = SA_ERR_TMT;
               goto done;
           }
  @@ -1166,6 +1167,7 @@
           /* optionally set errno */
           if (error != 0) {
               close(sa->fdSocket); /* just in case */
  +            sa->fdSocket = -1;
               errno = error;
               rv = SA_ERR_SYS;
           }

From ossp-cvs-owner@ossp.org  Wed Oct 24 14:11:33 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9OCBWU58639; Wed, 24 Oct 2001 14:11:32 +0200 (CEST)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 42B064CE695; Wed, 24 Oct 2001 14:11:32 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c
Message-Id: <20011024121132.42B064CE695@visp.engelschall.com>
Date: Wed, 24 Oct 2001 14:11:32 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   24-Oct-2001 14:11:32
  Branch: HEAD                             Handle: 2001102413113100

  Modified files:
    ossp-pkg/sa             sa.c

  Log:
    Add support for ACLs with "IPv4-mapped IPv6 addresses" (e.g.
    "::ffff:1.2.3.4") as defined by RFC 2373. This is important for security
    reasons because these are IPv6 addresses but which have to match
    incoming IPv4 addresses in ACLs.

  Summary:
    Revision    Changes     Path
    1.36        +32 -9      ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.35 -r1.36 sa.c
  --- ossp-pkg/sa/sa.c	2001/10/24 11:43:28	1.35
  +++ ossp-pkg/sa/sa.c	2001/10/24 12:11:31	1.36
  @@ -697,9 +697,12 @@
       const unsigned char *ucp1, *ucp2;
       unsigned int uc1, uc2, mask;
       size_t l1, l2;
  -    int nFamily;
       int nBytes;
       int nBits;
  +#ifdef AF_INET6
  +    int i;
  +    const unsigned char *ucp0;
  +#endif
   
       /* argument sanity check(s) */
       if (saa1 == NULL || saa2 == NULL || prefixlen < -1)
  @@ -709,13 +712,8 @@
       if (prefixlen == 0)
           return SA_OK;
   
  -    /* short circuiting handling different families */
  -    if (saa1->nFamily != saa2->nFamily)
  -        return SA_ERR_MTC;
  -
       /* determine address representation pointer and size */
  -    nFamily = saa1->nFamily;
  -    if (nFamily == AF_LOCAL) {
  +    if (saa1->nFamily == AF_LOCAL) {
           ucp1 = (const unsigned char *)(((struct sockaddr_un *)saa1->saBuf)->sun_path);
           ucp2 = (const unsigned char *)(((struct sockaddr_un *)saa2->saBuf)->sun_path);
           l1 = strlen(((struct sockaddr_un *)saa1->saBuf)->sun_path) * 8;
  @@ -730,14 +728,39 @@
                   return SA_ERR_MTC;
               nBits = prefixlen;
           }
  +    }
  +#ifdef AF_INET6
  +    else if (   (saa1->nFamily == AF_INET  && saa2->nFamily == AF_INET6)
  +             || (saa1->nFamily == AF_INET6 && saa2->nFamily == AF_INET )) {
  +        /* special case of comparing a regular IPv4 address (1.2.3.4) with an 
  +           "IPv4-mapped IPv6 address" (::ffff:1.2.3.4). For details see RFC 2373. */
  +        if (saa1->nFamily == AF_INET6) {
  +            ucp1 = (const unsigned char *)&(((struct sockaddr_in6 *)saa1->saBuf)->sin6_addr);
  +            ucp2 = (const unsigned char *)&(((struct sockaddr_in  *)saa2->saBuf)->sin_addr);
  +            ucp0 = ucp1;
  +            ucp1 += 12;
  +        }
  +        else {
  +            ucp1 = (const unsigned char *)&(((struct sockaddr_in  *)saa1->saBuf)->sin_addr);
  +            ucp2 = (const unsigned char *)&(((struct sockaddr_in6 *)saa2->saBuf)->sin6_addr);
  +            ucp0 = ucp2;
  +            ucp2 += 12;
  +        }
  +        for (i = 0; i < 10; i++)
  +            if (ucp0[i] != 0x00)
  +                return SA_ERR_MTC;
  +        if (!(ucp0[10] == 0xFF && ucp0[11] == 0xFF))
  +            return SA_ERR_MTC;
  +        nBits = 32;
       }
  -    else if (nFamily == AF_INET) {
  +#endif
  +    else if (saa1->nFamily == AF_INET) {
           ucp1 = (const unsigned char *)&(((struct sockaddr_in *)saa1->saBuf)->sin_addr);
           ucp2 = (const unsigned char *)&(((struct sockaddr_in *)saa2->saBuf)->sin_addr);
           nBits = 32;
       }
   #ifdef AF_INET6
  -    else if (nFamily == AF_INET6) {
  +    else if (saa1->nFamily == AF_INET6) {
           ucp1 = (const unsigned char *)&(((struct sockaddr_in6 *)saa1->saBuf)->sin6_addr);
           ucp2 = (const unsigned char *)&(((struct sockaddr_in6 *)saa2->saBuf)->sin6_addr);
           nBits = 128;

From ossp-cvs-owner@ossp.org  Wed Oct 24 14:17:53 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9OCHpU59772; Wed, 24 Oct 2001 14:17:51 +0200 (CEST)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id D19824CE695; Wed, 24 Oct 2001 14:17:51 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.ac
Message-Id: <20011024121751.D19824CE695@visp.engelschall.com>
Date: Wed, 24 Oct 2001 14:17:51 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   24-Oct-2001 14:17:51
  Branch: HEAD                             Handle: 2001102413175100

  Modified files:
    ossp-pkg/sa             sa.ac

  Log:
    make sure some platforms find their IPv6 library

  Summary:
    Revision    Changes     Path
    1.7         +3  -0      ossp-pkg/sa/sa.ac
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.ac
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 sa.ac
  --- ossp-pkg/sa/sa.ac	2001/10/10 19:32:29	1.6
  +++ ossp-pkg/sa/sa.ac	2001/10/24 12:17:51	1.7
  @@ -64,6 +64,9 @@
           AC_CHECK_LIB(nsl, gethostbyname)
       fi  
       AC_CHECK_LIB(socket, accept)
  +
  +    #   make sure some platforms find their IPv6 library
  +    AC_CHECK_LIB(inet6, getaddrinfo)
       
       #   check for system headers
       AC_CHECK_HEADERS(string.h sys/types.h sys/socket.h netdb.h netinet/in.h)

From ossp-cvs-owner@ossp.org  Wed Oct 24 14:24:29 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9OCORU60708; Wed, 24 Oct 2001 14:24:27 +0200 (CEST)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id A65564CE698; Wed, 24 Oct 2001 14:24:27 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.pod
Message-Id: <20011024122427.A65564CE698@visp.engelschall.com>
Date: Wed, 24 Oct 2001 14:24:27 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   24-Oct-2001 14:24:27
  Branch: HEAD                             Handle: 2001102413242700

  Modified files:
    ossp-pkg/sa             sa.pod

  Log:
    remember RFCs

  Summary:
    Revision    Changes     Path
    1.14        +22 -0      ossp-pkg/sa/sa.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.pod
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 sa.pod
  --- ossp-pkg/sa/sa.pod	2001/10/10 19:32:57	1.13
  +++ ossp-pkg/sa/sa.pod	2001/10/24 12:24:27	1.14
  @@ -335,6 +335,28 @@
   
   =back
   
  +=head1 STANDARDS
  +
  +R. Gilligan, S. Thomson, J. Bound, W. Stevens,
  +"Basic Socket Interface Extensions for IPv6", 
  +RFC 2553, March 1999.
  +
  +W. Stevens, 
  +"Advanced Sockets API for IPv6",
  +B<RFC 2292>, February 1998.
  +
  +R. Fielding, L. Masinter, T. Berners-Lee, 
  +"Uniform Resource Identifiers: Generic Syntax", 
  +B<RFC 2396>, August 1998.
  +
  +R. Hinden, S. Deering,
  +"IP Version 6 Addressing Architecture",
  +B<RFC 2373>, July 1998.
  +
  +R. Hinden, B. Carpenter, L. Masinter, 
  +"Format for Literal IPv6 Addresses in URL's", 
  +B<RFC 2732>, December 1999.
  +
   =head1 HISTORY
   
   B<OSSP sa> was invented in August 2001 by Ralf S. Engelschall for use

From ossp-cvs-owner@ossp.org  Wed Oct 24 14:24:57 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9OCOuU60971; Wed, 24 Oct 2001 14:24:56 +0200 (CEST)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 14FAB4CE69A; Wed, 24 Oct 2001 14:24:56 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa TODO
Message-Id: <20011024122456.14FAB4CE69A@visp.engelschall.com>
Date: Wed, 24 Oct 2001 14:24:56 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   24-Oct-2001 14:24:56
  Branch: HEAD                             Handle: 2001102413245500

  Modified files:
    ossp-pkg/sa             TODO

  Log:
    remember multiple return issue on resolving

  Summary:
    Revision    Changes     Path
    1.26        +5  -0      ossp-pkg/sa/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 TODO
  --- ossp-pkg/sa/TODO	2001/10/23 12:02:31	1.25
  +++ ossp-pkg/sa/TODO	2001/10/24 12:24:55	1.26
  @@ -2,6 +2,11 @@
   TODO
   ----
   
  +- on resolving multiple addresses can be returned (especially
  +  one IPv4 and one IPv6!) and each one has to be tried on
  +  socket+connect for instance. What to do? See also
  +  http://www.v6.wide.ad.jp/Presentations/ai3-penang0010-v6programming/mgp00015.html
  +- support for new getaddrinfo and getnameinfo (IPv6!)
   - API function for unbuffered/buffered I/O mode
   - more test cases to cover full API
   - more documentation to fully describe API

From ossp-cvs-owner@ossp.org  Wed Oct 24 15:04:13 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9OD4CR65801; Wed, 24 Oct 2001 15:04:12 +0200 (CEST)
Date: Wed, 24 Oct 2001 15:04:12 +0200 (CEST)
Message-Id: <200110241304.f9OD4CR65801@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ut_sa.ac
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   24-Oct-2001 15:04:12
  Branch: HEAD                             Handle: 2001102414041100

  Modified files:
    ossp-pkg/l2             l2_ut_sa.ac

  Log:
    Mirror improvement to external sa library source sa.ac.

  Summary:
    Revision    Changes     Path
    1.3         +2  -0      ossp-pkg/l2/l2_ut_sa.ac
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ut_sa.ac
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2_ut_sa.ac
  --- ossp-pkg/l2/l2_ut_sa.ac	2001/10/06 14:33:09	1.2
  +++ ossp-pkg/l2/l2_ut_sa.ac	2001/10/24 13:04:11	1.3
  @@ -34,6 +34,8 @@
           AC_CHECK_LIB(nsl, gethostbyname)
       fi  
       AC_CHECK_LIB(socket, accept)
  +    #   make sure some platforms find their IPv6 library
  +    AC_CHECK_LIB(inet6, getaddrinfo)
       
       #   check for system headers
       AC_CHECK_HEADERS(string.h sys/types.h sys/socket.h netdb.h netinet/in.h)

From ossp-cvs-owner@ossp.org  Wed Oct 24 15:34:29 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9ODYSU69516; Wed, 24 Oct 2001 15:34:28 +0200 (CEST)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 4AA224CE696; Wed, 24 Oct 2001 15:34:28 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa acconfig.h
Message-Id: <20011024133428.4AA224CE696@visp.engelschall.com>
Date: Wed, 24 Oct 2001 15:34:28 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   24-Oct-2001 15:34:28
  Branch: HEAD                             Handle: 2001102414342700

  Modified files:
    ossp-pkg/sa             acconfig.h

  Log:
    fix define

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/sa/acconfig.h
  ____________________________________________________________________________

  Index: ossp-pkg/sa/acconfig.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 acconfig.h
  --- ossp-pkg/sa/acconfig.h	2001/10/10 19:32:29	1.2
  +++ ossp-pkg/sa/acconfig.h	2001/10/24 13:34:27	1.3
  @@ -3,4 +3,4 @@
   #undef HAVE_SOCKLEN_T
   
   /* whether ssize_t exists */
  -#undef HAVE_SSSIZE_T
  +#undef HAVE_SSIZE_T

From ossp-cvs-owner@ossp.org  Wed Oct 24 15:36:13 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9ODaCU70312; Wed, 24 Oct 2001 15:36:12 +0200 (CEST)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 56AF44CE695; Wed, 24 Oct 2001 15:36:12 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa autogen.sh devtool devtool.conf devtool.func
Message-Id: <20011024133612.56AF44CE695@visp.engelschall.com>
Date: Wed, 24 Oct 2001 15:36:12 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   24-Oct-2001 15:36:12
  Branch: HEAD                             Handle: 197001010100001003926971

  Added files:
    ossp-pkg/sa             devtool devtool.conf devtool.func
  Removed files:
    ossp-pkg/sa             autogen.sh

  Log:
    Replace old autogen.sh with first cut for a "devtool" based approach
    where we don't have to repeat code in such a redundant way. The
    "devtool" and "devtool.func" files will be moved to their own project
    soon and only "devtool.conf" will remain inside each package.

  Summary:
    Revision    Changes     Path
    NONE        +0  -47     ossp-pkg/sa/autogen.sh
    1.1         +47 -0      ossp-pkg/sa/devtool
    1.1         +24 -0      ossp-pkg/sa/devtool.conf
    1.1         +72 -0      ossp-pkg/sa/devtool.func
  ____________________________________________________________________________

    Index: ossp-pkg/sa/devtool
  ============================================================
  $ cvs update -p -r1.1 devtool
  #!/bin/sh
  ##
  ##  devtool -- Development Tool
  ##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  if [ $# -eq 0 ]; then
      echo "devtool:USAGE: devtool <command> [<arg> ...]" 1>&2
      exit 1
  fi
  
  cmd="$1"
  shift
  
  devtoolfunc="./devtool.func"
  
  if [ ! -f devtool.conf ]; then
      echo "devtool:ERROR: no devtool.conf in current directory" 1>&2
      exit 1
  fi
  
  cmdline=`grep "^%$cmd" devtool.conf`
  if [ ".$cmdline" = . ]; then
      echo "devtool:ERROR: command $cmd not found in devtool.conf" 1>&2
      exit 1
  fi
  
  if [ ".$TMPDIR" != . ]; then
      tmpdir="$TMPDIR"
  elif [ ".$TEMPDIR" != . ]; then
      tmpdir="$TEMPDIR"
  else
      tmpdir="/tmp"
  fi
  tmpfile="$tmpdir/rc.$$.tmp"
  
  rm -f $tmpfile
  touch $tmpfile
  echo ". $devtoolfunc" >>$tmpfile
  ( sed <devtool.conf -e "1,/^%common/d" -e '/^%.*/,$d'
    sed <devtool.conf -e "1,/^%$cmd/d" -e '/^%.*/,$d' ) |\
  sed -e 's;\([ 	]\)@\([a-zA-Z_][a-zA-Z0-9_]*\);\1devtool_\2;' >>$tmpfile
  
  sh $tmpfile
  
  rm -f $tmpfile >/dev/null 2>&1 || true
  
  Index: ossp-pkg/sa/devtool.conf
  ============================================================
  $ cvs update -p -r1.1 devtool.conf
  ##
  ##  devtool.conf -- Development Tool Configuration
  ##
  
  %autogen
      @autogen autoconf 2.52  "2.5.*"
      @autogen libtool  1.4.2 "1.4*"
      @autogen shtool   1.5.4 "1.5.*" all
  
  %autoclean
      @autoclean autoconf
      @autoclean libtool
      @autoclean shtool
  
  %version
      ./shtool version -l txt -n "OSSP SA" -e VERSION
  
  %dist
      make distclean >/dev/null 2>&1
      ./shtool fixperm -v .
      V=`./shtool version -l txt -d short VERSION`
      ./shtool tarball -o sa-$${V}.tar.gz -d sa-$${V} -u ossp -g ossp \
                       -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf' -c 'gzip --best' .
  
  Index: ossp-pkg/sa/devtool.func
  ============================================================
  $ cvs update -p -r1.1 devtool.func
  ##
  ##  devtool.func -- Development Tool Functions
  ##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  devtool_require () {
      t="$1"; o="$2"; p="$3"; e="$4"; a="$5"
      v=`($t $o | head -1 | awk "{ print \\\$$p; }") 2>/dev/null`
      if [ ".$v" = . ]; then
          echo "devtool:ERROR: unable to determine version of $t" 1>&2
          exit 1
      fi
      case "$v" in
          $e )
              ;;
          $a )
              echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
              ;;
          * )
              echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
              exit 1
              ;;
      esac
      echo "$v"
  }
  
  devtool_autogen () {
      tool=$1
      shift
      case $tool in
          autoconf )
              autoconf_version=`devtool_require autoconf --version 4 "$1" "$2"`
              echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
              autoconf
              autoheader
              ;;
          libtool )
              libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
              echo "generating (GNU Libtool $libtoolize_version): ltmain.sh, libtool.m4, config.guess, config.sub"
              libtoolize --force --copy >/dev/null 2>&1
              cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
                  sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` libtool.m4
              ;;
          shtool )
              shtoolize_version=`devtool_require shtoolize -v 3 "$1" "$2"`
              echo "generating (GNU Shtool $shtoolize_version): shtool"
              shift
              shift
              shtoolize -q "$@"
              ;;
      esac
  }
  
  devtool_autoclean () {
      tool=$1
      shift
      case $tool in
          autoconf )
              echo "removing: configure config.h.in"
              rm -f configure config.h.in
              ;;
          libtool )
              echo "removing: ltmain.sh libtool.m4 config.guess config.sub"
              rm -f ltmain.sh libtool.m4 config.guess config.sub
              ;;
          shtool )
              echo "removing: shtool"
              rm -f shtool
              ;;
      esac
  }
  

From ossp-cvs-owner@ossp.org  Wed Oct 24 15:37:37 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9ODbaU70864; Wed, 24 Oct 2001 15:37:36 +0200 (CEST)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id D4C1C4CE695; Wed, 24 Oct 2001 15:37:36 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa devtool
Message-Id: <20011024133736.D4C1C4CE695@visp.engelschall.com>
Date: Wed, 24 Oct 2001 15:37:36 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   24-Oct-2001 15:37:36
  Branch: HEAD                             Handle: 2001102414373600

  Modified files:
    ossp-pkg/sa             devtool

  Log:
    pass parameters

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/sa/devtool
  ____________________________________________________________________________

  Index: ossp-pkg/sa/devtool
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 devtool
  --- ossp-pkg/sa/devtool	2001/10/24 13:36:11	1.1
  +++ ossp-pkg/sa/devtool	2001/10/24 13:37:36	1.2
  @@ -41,7 +41,7 @@
     sed <devtool.conf -e "1,/^%$cmd/d" -e '/^%.*/,$d' ) |\
   sed -e 's;\([ 	]\)@\([a-zA-Z_][a-zA-Z0-9_]*\);\1devtool_\2;' >>$tmpfile
   
  -sh $tmpfile
  +sh $tmpfile "$@"
   
   rm -f $tmpfile >/dev/null 2>&1 || true
   

From ossp-cvs-owner@ossp.org  Wed Oct 24 15:38:03 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9ODc2U71137; Wed, 24 Oct 2001 15:38:02 +0200 (CEST)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id AFA724CE699; Wed, 24 Oct 2001 15:38:02 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa .configure devtool.conf
Message-Id: <20011024133802.AFA724CE699@visp.engelschall.com>
Date: Wed, 24 Oct 2001 15:38:02 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   24-Oct-2001 15:38:02
  Branch: HEAD                             Handle: 197001010100001003927082

  Modified files:
    ossp-pkg/sa             devtool.conf
  Removed files:
    ossp-pkg/sa             .configure

  Log:
    move also .configure stuff to new devtool.conf

  Summary:
    Revision    Changes     Path
    NONE        +0  -6      ossp-pkg/sa/.configure
    1.2         +10 -0      ossp-pkg/sa/devtool.conf
  ____________________________________________________________________________

    Index: ossp-pkg/sa/devtool.conf
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.conf
  --- ossp-pkg/sa/devtool.conf	2001/10/24 13:36:11	1.1
  +++ ossp-pkg/sa/devtool.conf	2001/10/24 13:38:02	1.2
  @@ -12,6 +12,16 @@
       @autoclean libtool
       @autoclean shtool
   
  +%foo
  +    echo "$@"
  +
  +%configure
  +    ./configure \
  +        --prefix=/tmp/sa \
  +        --disable-shared \
  +        --enable-debug \
  +        "$@"
  +
   %version
       ./shtool version -l txt -n "OSSP SA" -e VERSION
   

From ossp-cvs-owner@ossp.org  Wed Oct 24 15:40:09 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9ODe8U71539; Wed, 24 Oct 2001 15:40:08 +0200 (CEST)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 0295F4CE695; Wed, 24 Oct 2001 15:40:07 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa Makefile.in devtool.conf
Message-Id: <20011024134007.0295F4CE695@visp.engelschall.com>
Date: Wed, 24 Oct 2001 15:40:07 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   24-Oct-2001 15:40:07
  Branch: HEAD                             Handle: 2001102414400700

  Modified files:
    ossp-pkg/sa             Makefile.in devtool.conf

  Log:
    move stuff from Makefile.in to devtool.conf, too.

  Summary:
    Revision    Changes     Path
    1.9         +0  -9      ossp-pkg/sa/Makefile.in
    1.3         +1  -1      ossp-pkg/sa/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/sa/Makefile.in
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 Makefile.in
  --- ossp-pkg/sa/Makefile.in	2001/10/10 15:01:56	1.8
  +++ ossp-pkg/sa/Makefile.in	2001/10/24 13:40:07	1.9
  @@ -98,12 +98,3 @@
   	-$(RM) shtool
   	-$(RM) ltmain.sh libtool.m4 config.guess config.sub
   
  -version:
  -	$(SHTOOL) version -l txt -n "OSSP SA" -e VERSION
  -
  -dist: distclean
  -	@$(SHTOOL) fixperm -v .; \
  -	V=`$(SHTOOL) version -l txt -d short VERSION`; \
  -	$(SHTOOL) tarball -o sa-$${V}.tar.gz -d sa-$${V} -u ossp -g ossp \
  -	                  -e 'CVS,\.cvsignore,\.[ao],^\.,autogen.sh' -c 'gzip --best' .
  -
  Index: ossp-pkg/sa/devtool.conf
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.conf
  --- ossp-pkg/sa/devtool.conf	2001/10/24 13:38:02	1.2
  +++ ossp-pkg/sa/devtool.conf	2001/10/24 13:40:07	1.3
  @@ -29,6 +29,6 @@
       make distclean >/dev/null 2>&1
       ./shtool fixperm -v .
       V=`./shtool version -l txt -d short VERSION`
  -    ./shtool tarball -o sa-$${V}.tar.gz -d sa-$${V} -u ossp -g ossp \
  +    ./shtool tarball -o sa-${V}.tar.gz -d sa-${V} -u ossp -g ossp \
                        -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf' -c 'gzip --best' .
   

From ossp-cvs-owner@ossp.org  Wed Oct 24 15:40:29 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9ODeSU71803; Wed, 24 Oct 2001 15:40:28 +0200 (CEST)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 95B9E4CE69A; Wed, 24 Oct 2001 15:40:28 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa devtool.conf
Message-Id: <20011024134028.95B9E4CE69A@visp.engelschall.com>
Date: Wed, 24 Oct 2001 15:40:28 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   24-Oct-2001 15:40:28
  Branch: HEAD                             Handle: 2001102414402800

  Modified files:
    ossp-pkg/sa             devtool.conf

  Log:
    Ops, this was just for debugging

  Summary:
    Revision    Changes     Path
    1.4         +0  -3      ossp-pkg/sa/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/sa/devtool.conf
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.conf
  --- ossp-pkg/sa/devtool.conf	2001/10/24 13:40:07	1.3
  +++ ossp-pkg/sa/devtool.conf	2001/10/24 13:40:28	1.4
  @@ -12,9 +12,6 @@
       @autoclean libtool
       @autoclean shtool
   
  -%foo
  -    echo "$@"
  -
   %configure
       ./configure \
           --prefix=/tmp/sa \

From ossp-cvs-owner@ossp.org  Wed Oct 24 15:42:36 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9ODgZU72189; Wed, 24 Oct 2001 15:42:35 +0200 (CEST)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 2A4794CE695; Wed, 24 Oct 2001 15:42:35 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa devtool.func
Message-Id: <20011024134235.2A4794CE695@visp.engelschall.com>
Date: Wed, 24 Oct 2001 15:42:35 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   24-Oct-2001 15:42:35
  Branch: HEAD                             Handle: 2001102414423400

  Modified files:
    ossp-pkg/sa             devtool.func

  Log:
    get rid of (in this context) useless information

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/sa/devtool.func
  ____________________________________________________________________________

  Index: ossp-pkg/sa/devtool.func
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.func
  --- ossp-pkg/sa/devtool.func	2001/10/24 13:36:11	1.1
  +++ ossp-pkg/sa/devtool.func	2001/10/24 13:42:34	1.2
  @@ -32,7 +32,7 @@
               autoconf_version=`devtool_require autoconf --version 4 "$1" "$2"`
               echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
               autoconf
  -            autoheader
  +            autoheader 2>&1 | grep -v "is unchanged"
               ;;
           libtool )
               libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`

From ossp-cvs-owner@ossp.org  Fri Oct 26 12:54:28 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9QAsQU90980; Fri, 26 Oct 2001 12:54:26 +0200 (CEST)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id CE26E4CE726; Fri, 26 Oct 2001 12:54:26 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Message-Id: <20011026105426.CE26E4CE726@visp.engelschall.com>
Date: Fri, 26 Oct 2001 12:54:26 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   26-Oct-2001 12:54:26
  Branch: HEAD                             Handle: 2001102611542600

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    remember ideas

  Summary:
    Revision    Changes     Path
    1.35        +4  -0      ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.34 -r1.35 TODO
  --- ossp-pkg/l2/TODO	2001/10/23 12:33:28	1.34
  +++ ossp-pkg/l2/TODO	2001/10/26 10:54:26	1.35
  @@ -2,6 +2,10 @@
   OSSP L2
   =======
   
  +- Perhaps we should later also write an l2_ch_bofh.c which
  +  something very cool but is undocumented and has its source
  +  mangled/scrambled ;)
  +
   - Problem: OpenPKG fakesyslog ist nasty, because it doesn't provide
     logging to multiple files or filter out some messages. Additionally
     the app has to be restarted in order to reopen the logfile which

From ossp-cvs-owner@ossp.org  Fri Oct 26 12:57:30 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9QAvSU91716; Fri, 26 Oct 2001 12:57:28 +0200 (CEST)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id CB72C4CE726; Fri, 26 Oct 2001 12:57:28 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa TODO
Message-Id: <20011026105728.CB72C4CE726@visp.engelschall.com>
Date: Fri, 26 Oct 2001 12:57:28 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   26-Oct-2001 12:57:28
  Branch: HEAD                             Handle: 2001102611572800

  Modified files:
    ossp-pkg/sa             TODO

  Log:
    errr.. I meant blocking, not buffering

  Summary:
    Revision    Changes     Path
    1.27        +1  -1      ossp-pkg/sa/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 TODO
  --- ossp-pkg/sa/TODO	2001/10/24 12:24:55	1.26
  +++ ossp-pkg/sa/TODO	2001/10/26 10:57:28	1.27
  @@ -7,7 +7,7 @@
     socket+connect for instance. What to do? See also
     http://www.v6.wide.ad.jp/Presentations/ai3-penang0010-v6programming/mgp00015.html
   - support for new getaddrinfo and getnameinfo (IPv6!)
  -- API function for unbuffered/buffered I/O mode
  +- API function for blocking/non-blocking I/O mode
   - more test cases to cover full API
   - more documentation to fully describe API
   

From ossp-cvs-owner@ossp.org  Fri Oct 26 12:59:49 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9QAxmU92132; Fri, 26 Oct 2001 12:59:48 +0200 (CEST)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 430294CE740; Fri, 26 Oct 2001 12:59:48 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ut_sa.ac l2_ut_sa.c
Message-Id: <20011026105948.430294CE740@visp.engelschall.com>
Date: Fri, 26 Oct 2001 12:59:48 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   26-Oct-2001 12:59:48
  Branch: HEAD                             Handle: 2001102611594700

  Modified files:
    ossp-pkg/l2             l2_ut_sa.ac l2_ut_sa.c

  Log:
    upgrade to latest and greatest OSSP SA

  Summary:
    Revision    Changes     Path
    1.4         +64 -29     ossp-pkg/l2/l2_ut_sa.ac
    1.16        +118 -82    ossp-pkg/l2/l2_ut_sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ut_sa.ac
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 l2_ut_sa.ac
  --- ossp-pkg/l2/l2_ut_sa.ac	2001/10/24 13:04:11	1.3
  +++ ossp-pkg/l2/l2_ut_sa.ac	2001/10/26 10:59:47	1.4
  @@ -1,39 +1,70 @@
  -##
  -##  SA - OSSP Socket Abstraction Library
  -##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  -##
  -##  This file is part of OSSP SA, a socket abstraction library which
  -##  can be found at http://www.ossp.org/pkg/sa/.
  -##
  -##  Permission to use, copy, modify, and distribute this software for
  -##  any purpose with or without fee is hereby granted, provided that
  -##  the above copyright notice and this permission notice appear in all
  -##  copies.
  -##
  -##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  -##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  -##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  -##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  -##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  -##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  -##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  -##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  -##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  -##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  -##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  -##  SUCH DAMAGE.
  -##
  -##  sa.ac: socket abstraction Autoconf checks
  -##
  +dnl ##
  +dnl ##  SA - OSSP Socket Abstraction Library
  +dnl ##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##
  +dnl ##  This file is part of OSSP SA, a socket abstraction library which
  +dnl ##  can be found at http://www.ossp.org/pkg/sa/.
  +dnl ##
  +dnl ##  Permission to use, copy, modify, and distribute this software for
  +dnl ##  any purpose with or without fee is hereby granted, provided that
  +dnl ##  the above copyright notice and this permission notice appear in all
  +dnl ##  copies.
  +dnl ##
  +dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +dnl ##  SUCH DAMAGE.
  +dnl ##
  +dnl ##  sa.ac: socket abstraction Autoconf checks
  +dnl ##
   
  -AC_DEFUN(AC_CHECK_SA,[
  +dnl #   Check for an ANSI C typedef in a header
  +dnl #   configure.in:
  +dnl #     SA_CHECK_TYPEDEF(<typedef>, <header>)
  +dnl #   acconfig.h:
  +dnl #     #undef HAVE_<typedef>
  +
  +AC_DEFUN(SA_CHECK_TYPEDEF,[dnl
  +    AC_REQUIRE([AC_HEADER_STDC])dnl
  +    AC_MSG_CHECKING(for typedef $1)
  +    AC_CACHE_VAL(ac_cv_typedef_$1,[
  +        AC_EGREP_CPP(dnl
  +changequote(<<,>>)dnl
  +<<(^|[^a-zA-Z_0-9])$1[^a-zA-Z_0-9]>>dnl
  +changequote([,]), [
  +#include <$2>], 
  +            ac_cv_typedef_$1=yes, 
  +            ac_cv_typedef_$1=no
  +        )
  +    ])dnl
  +    AC_MSG_RESULT($ac_cv_typedef_$1)
  +    if test $ac_cv_typedef_$1 = yes; then
  +        AC_DEFINE(HAVE_[]translit($1, [a-z], [A-Z]))
  +    fi
  +])
  +
  +dnl #   Check for anything OSSP SA wants to know
  +dnl #   configure.in:
  +dnl #     SA_CHECK_ALL
  +
  +AC_DEFUN(SA_CHECK_ALL,[
       #   make sure libnsl and libsocket are linked in if they exist
       AC_CHECK_LIB(nsl, gethostname)
       if test ".`echo $LIBS | grep nsl`" = .; then
           AC_CHECK_LIB(nsl, gethostbyname)
       fi  
       AC_CHECK_LIB(socket, accept)
  +
       #   make sure some platforms find their IPv6 library
       AC_CHECK_LIB(inet6, getaddrinfo)
       
  @@ -42,5 +73,9 @@
   
       #   check for system functions
       AC_CHECK_FUNCS(inet_aton inet_pton inet_ntoa inet_ntop snprintf)
  +
  +    dnl # check for network/socket size type
  +    SA_CHECK_TYPEDEF(socklen_t, sys/socket.h)
  +    SA_CHECK_TYPEDEF(ssize_t, sys/types.h)
   ])
   
  Index: ossp-pkg/l2/l2_ut_sa.c
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 l2_ut_sa.c
  --- ossp-pkg/l2/l2_ut_sa.c	2001/10/10 15:58:27	1.15
  +++ ossp-pkg/l2/l2_ut_sa.c	2001/10/26 10:59:47	1.16
  @@ -51,6 +51,24 @@
   /* include own API header */
   #include "l2_ut_sa.h"
   
  +/* boolean values */
  +#ifndef FALSE
  +#define FALSE (0)
  +#endif
  +#ifndef TRUE
  +#define TRUE  (!FALSE)
  +#endif
  +
  +/* backward compatibility for AF_LOCAL */
  +#if !defined(AF_LOCAL) && defined(AF_UNIX)
  +#define AF_LOCAL AF_UNIX
  +#endif
  +
  +/* backward compatibility for ssize_t */
  +#if defined(HAVE_CONFIG_H) && !defined(HAVE_SSIZE_T)
  +#define ssize_t long
  +#endif
  +
   /* system call structure declaration macros */
   #define SA_SC_DECLARE_0(rc_t, fn) \
       struct { \
  @@ -178,23 +196,10 @@
       socklen_t        slBuf;            /* the length of "struct sockaddr_xx" */
   };
   
  -/* boolean values */
  -#ifndef FALSE
  -#define FALSE (0)
  -#endif
  -#ifndef TRUE
  -#define TRUE  (!FALSE)
  -#endif
  -
   /* handy struct timeval check */
   #define SA_TVISZERO(tv) \
       ((tv).tv_sec == 0 && (tv).tv_usec == 0)
   
  -/* backward compatibility for AF_LOCAL */
  -#if !defined(AF_LOCAL) && defined(AF_UNIX)
  -#define AF_LOCAL AF_UNIX
  -#endif
  -
   /* convert Internet address from presentation to network format */
   static int sa_inet_pton(int family, const char *strptr, void *addrptr)
   {
  @@ -419,6 +424,7 @@
   #ifdef AF_INET6
       struct sockaddr_in6 sa6;
   #endif
  +    int bIPv6;
       struct hostent *he;
       struct servent *se;
       int bNumeric;
  @@ -471,7 +477,7 @@
           }
           else
               cp = un.sun_path;
  -        memcpy(un.sun_path, cpPath, n+1);
  +        memcpy(cp, cpPath, n+1);
           un.sun_family = AF_LOCAL;
   
           /* provide results */
  @@ -480,12 +486,36 @@
           sf = AF_LOCAL;
       }
       else if (strncmp(uri, "inet://", 7) == 0) {
  -        /* parse URI */
  +        /* parse URI into host, port and protocol parts */
           cpHost = (char *)(uri+7);
  -        if ((cp = strrchr(cpHost, ':')) == NULL)
  +        bIPv6 = FALSE;
  +        if (cpHost[0] == '[') {
  +            /* IPv6 address (see RFC2732) */
  +#ifndef AF_INET6
               return SA_ERR_ARG;
  -        *cp++ = '\0';
  +#else
  +            bIPv6 = TRUE;
  +            cpHost++;
  +            if ((cp = strchr(cpHost, ']')) == NULL)
  +                return SA_ERR_ARG;
  +            *cp++ = '\0';
  +            if (*cp != ':')
  +                return SA_ERR_ARG;
  +            cp++;
  +#endif
  +        }
  +        else {
  +            /* IPv4 address or hostname */
  +            if ((cp = strrchr(cpHost, ':')) == NULL)
  +                return SA_ERR_ARG;
  +            *cp++ = '\0';
  +        }
           cpPort = cp;
  +        cpProto = "tcp";
  +        if ((cp = strchr(cpPort, '#')) != NULL) {
  +            *cp++ = '\0';
  +            cpProto = cp;
  +        }
   
           /* resolve port */
           nPort = 0;
  @@ -499,11 +529,6 @@
           if (bNumeric)
               nPort = atoi(cpPort);
           else {
  -            cpProto = "tcp";
  -            if ((cp = strchr(cpPort, '#')) != NULL) {
  -                *cp++ = '\0';
  -                cpProto = cp;
  -            }
               if ((se = getservbyname(cpPort, cpProto)) == NULL)
                   return SA_ERR_SYS;
               nPort = ntohs(se->s_port);
  @@ -515,9 +540,9 @@
           memset(&sa6, 0, sizeof(sa6));
   #endif
   
  -        /* resolve host by trying to parse it as either directly a IPv4 or
  -           IPv6 address or by resolving it to either a IPv4 or IPv6 address */
  -        if (sa_inet_pton(AF_INET, cpHost, &sa4.sin_addr.s_addr) == 1) {
  +        /* resolve host by trying to parse it as either directly an IPv4 or
  +           IPv6 address or by resolving it to either an IPv4 or IPv6 address */
  +        if (!bIPv6 && sa_inet_pton(AF_INET, cpHost, &sa4.sin_addr.s_addr) == 1) {
               sa4.sin_family = AF_INET;
               sa4.sin_port = htons(nPort);
               sa = (struct sockaddr *)&sa4;
  @@ -525,7 +550,7 @@
               sf = AF_INET;
           }
   #ifdef AF_INET6
  -        else if (sa_inet_pton(AF_INET6, cpHost, &sa6.sin6_addr.s6_addr) == 1) {
  +        else if (bIPv6 && sa_inet_pton(AF_INET6, cpHost, &sa6.sin6_addr.s6_addr) == 1) {
               sa6.sin6_family = AF_INET6;
               sa6.sin6_port = htons(nPort);
               sa = (struct sockaddr *)&sa6;
  @@ -578,13 +603,6 @@
   /* import "struct sockaddr" into address object */
   sa_rc_t sa_addr_s2a(sa_addr_t *saa, const struct sockaddr *sabuf, socklen_t salen)
   {
  -    struct sockaddr_un *un;
  -    struct sockaddr_in *sa4;
  -#ifdef AF_INET6
  -    struct sockaddr_in6 *sa6;
  -#endif
  -    int sf;
  -
       /* argument sanity check(s) */
       if (saa == NULL || sabuf == NULL || salen == 0)
           return SA_ERR_ARG;
  @@ -597,28 +615,8 @@
       memcpy(saa->saBuf, sabuf, salen);
       saa->slBuf = salen;
   
  -    /* resolve family */
  -    sf = 0;
  -    if (sizeof(struct sockaddr_un) == salen) {
  -        un = (struct sockaddr_un *)((void *)sabuf);
  -        if (un->sun_family == AF_LOCAL)
  -            sf = AF_LOCAL;
  -    }
  -    if (sf == 0 && sizeof(struct sockaddr_in) == salen) {
  -        sa4 = (struct sockaddr_in *)((void *)sabuf);
  -        if (sa4->sin_family == AF_INET)
  -            sf = AF_INET;
  -    }
  -#ifdef AF_INET6
  -    if (sf == 0 && sizeof(struct sockaddr_in6) == salen) {
  -        sa6 = (struct sockaddr_in6 *)((void *)sabuf);
  -        if (sa6->sin6_family == AF_INET6)
  -            sf = AF_INET6;
  -    }
  -#endif
  -    if (sf == 0)
  -        return SA_ERR_ARG;
  -    saa->nFamily = sf;
  +    /* remember family */
  +    saa->nFamily = sabuf->sa_family;
   
       return SA_OK;
   }
  @@ -642,27 +640,31 @@
       /* export object contents */
       if (saa->nFamily == AF_LOCAL) {
           un = (struct sockaddr_un *)((void *)saa->saBuf);
  -        sa_msnprintf(uribuf, sizeof(uribuf), "unix:%s", un->sun_path);
  +        if (   (   saa->slBuf >= (socklen_t)(&(((struct sockaddr_un *)0)->sun_path[0]))
  +                && un->sun_path[0] == '\0')
  +            || saa->slBuf < sizeof(struct sockaddr_un))
  +            /* in case the remote side of a Unix Domain socket was not
  +               bound, a "struct sockaddr_un" can occur with a length less
  +               than the expected one. Then there is actually no path at all. 
  +               This has been verified under FreeBSD, Linux and Solaris. */
  +            sa_msnprintf(uribuf, sizeof(uribuf), "unix:/NOT-BOUND");
  +        else
  +            sa_msnprintf(uribuf, sizeof(uribuf), "unix:%s", un->sun_path);
       }
  -#ifdef AF_INET6
  -    else if (saa->nFamily == AF_INET || saa->nFamily == AF_INET6) {
  -#else
       else if (saa->nFamily == AF_INET) {
  -#endif
  -        if (saa->nFamily == AF_INET) {
  -            sa4 = (struct sockaddr_in *)((void *)saa->saBuf);
  -            sa_inet_ntop(AF_INET, &sa4->sin_addr.s_addr, caHost, sizeof(caHost));
  -            nPort = ntohs(sa4->sin_port);
  -        }
  -#ifdef AF_INET6
  -        else {
  -            sa6 = (struct sockaddr_in6 *)((void *)saa->saBuf);
  -            sa_inet_ntop(AF_INET6, &sa6->sin6_addr.s6_addr, caHost, sizeof(caHost));
  -            nPort = ntohs(sa6->sin6_port);
  -        }
  -#endif
  +        sa4 = (struct sockaddr_in *)((void *)saa->saBuf);
  +        sa_inet_ntop(AF_INET, &sa4->sin_addr.s_addr, caHost, sizeof(caHost));
  +        nPort = ntohs(sa4->sin_port);
           sa_msnprintf(uribuf, sizeof(uribuf), "inet://%s:%d", caHost, nPort);
       }
  +#ifdef AF_INET6
  +    else if (saa->nFamily == AF_INET6) {
  +        sa6 = (struct sockaddr_in6 *)((void *)saa->saBuf);
  +        sa_inet_ntop(AF_INET6, &sa6->sin6_addr.s6_addr, caHost, sizeof(caHost));
  +        nPort = ntohs(sa6->sin6_port);
  +        sa_msnprintf(uribuf, sizeof(uribuf), "inet://[%s]:%d", caHost, nPort);
  +    }
  +#endif
       else
           return SA_ERR_INT;
   
  @@ -693,21 +695,23 @@
       const unsigned char *ucp1, *ucp2;
       unsigned int uc1, uc2, mask;
       size_t l1, l2;
  -    int nFamily;
       int nBytes;
       int nBits;
  +#ifdef AF_INET6
  +    int i;
  +    const unsigned char *ucp0;
  +#endif
   
       /* argument sanity check(s) */
       if (saa1 == NULL || saa2 == NULL || prefixlen < -1)
           return SA_ERR_ARG;
   
  -    /* match short circuiting */
  -    if (saa1->nFamily != saa2->nFamily)
  -        return SA_ERR_MTC;
  +    /* short circuiting for wildcard matching */
  +    if (prefixlen == 0)
  +        return SA_OK;
   
       /* determine address representation pointer and size */
  -    nFamily = saa1->nFamily;
  -    if (nFamily == AF_LOCAL) {
  +    if (saa1->nFamily == AF_LOCAL) {
           ucp1 = (const unsigned char *)(((struct sockaddr_un *)saa1->saBuf)->sun_path);
           ucp2 = (const unsigned char *)(((struct sockaddr_un *)saa2->saBuf)->sun_path);
           l1 = strlen(((struct sockaddr_un *)saa1->saBuf)->sun_path) * 8;
  @@ -723,13 +727,38 @@
               nBits = prefixlen;
           }
       }
  -    else if (nFamily == AF_INET) {
  +#ifdef AF_INET6
  +    else if (   (saa1->nFamily == AF_INET  && saa2->nFamily == AF_INET6)
  +             || (saa1->nFamily == AF_INET6 && saa2->nFamily == AF_INET )) {
  +        /* special case of comparing a regular IPv4 address (1.2.3.4) with an 
  +           "IPv4-mapped IPv6 address" (::ffff:1.2.3.4). For details see RFC 2373. */
  +        if (saa1->nFamily == AF_INET6) {
  +            ucp1 = (const unsigned char *)&(((struct sockaddr_in6 *)saa1->saBuf)->sin6_addr);
  +            ucp2 = (const unsigned char *)&(((struct sockaddr_in  *)saa2->saBuf)->sin_addr);
  +            ucp0 = ucp1;
  +            ucp1 += 12;
  +        }
  +        else {
  +            ucp1 = (const unsigned char *)&(((struct sockaddr_in  *)saa1->saBuf)->sin_addr);
  +            ucp2 = (const unsigned char *)&(((struct sockaddr_in6 *)saa2->saBuf)->sin6_addr);
  +            ucp0 = ucp2;
  +            ucp2 += 12;
  +        }
  +        for (i = 0; i < 10; i++)
  +            if (ucp0[i] != 0x00)
  +                return SA_ERR_MTC;
  +        if (!(ucp0[10] == 0xFF && ucp0[11] == 0xFF))
  +            return SA_ERR_MTC;
  +        nBits = 32;
  +    }
  +#endif
  +    else if (saa1->nFamily == AF_INET) {
           ucp1 = (const unsigned char *)&(((struct sockaddr_in *)saa1->saBuf)->sin_addr);
           ucp2 = (const unsigned char *)&(((struct sockaddr_in *)saa2->saBuf)->sin_addr);
           nBits = 32;
       }
   #ifdef AF_INET6
  -    else if (nFamily == AF_INET6) {
  +    else if (saa1->nFamily == AF_INET6) {
           ucp1 = (const unsigned char *)&(((struct sockaddr_in6 *)saa1->saBuf)->sin6_addr);
           ucp2 = (const unsigned char *)&(((struct sockaddr_in6 *)saa2->saBuf)->sin6_addr);
           nBits = 128;
  @@ -1141,6 +1170,7 @@
           }
           else if (n == 0) {
               close(sa->fdSocket); /* stop TCP three-way handshake */
  +            sa->fdSocket = -1;
               rv = SA_ERR_TMT;
               goto done;
           }
  @@ -1158,6 +1188,7 @@
           /* optionally set errno */
           if (error != 0) {
               close(sa->fdSocket); /* just in case */
  +            sa->fdSocket = -1;
               errno = error;
               rv = SA_ERR_SYS;
           }
  @@ -1194,6 +1225,7 @@
       int n;
       fd_set fds;
       union {
  +        struct sockaddr_un un;
           struct sockaddr_in sa4;
   #ifdef AF_INET6
           struct sockaddr_in6 sa6;
  @@ -1502,6 +1534,7 @@
       char c;
       size_t n;
       size_t res;
  +    sa_rc_t rv;
   
       /* argument sanity check(s) */
       if (sa == NULL || cpBuf == NULL || nBufReq == 0)
  @@ -1519,9 +1552,12 @@
          buffers are enabled, this is not as stupid as it looks at the first
          hand and if buffers are disabled, there is no better solution
          anyway. */
  +    rv = SA_OK;
       res = 0;
       while (res < (nBufReq-1)) {
  -        sa_read(sa, &c, 1, &n);
  +        rv = sa_read(sa, &c, 1, &n);
  +        if (rv != SA_OK)
  +            break;
           if (n <= 0)
               break;
           cpBuf[res++] = c;
  @@ -1534,7 +1570,7 @@
       if (nBufRes != NULL)
           *nBufRes = res;
   
  -    return SA_OK;
  +    return rv;
   }
   
   /* internal raw write operation */

From ossp-cvs-owner@ossp.org  Fri Oct 26 13:02:03 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9QB22U92892; Fri, 26 Oct 2001 13:02:02 +0200 (CEST)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 369AC4CE740; Fri, 26 Oct 2001 13:02:02 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_buffer.c
Message-Id: <20011026110202.369AC4CE740@visp.engelschall.com>
Date: Fri, 26 Oct 2001 13:02:02 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   26-Oct-2001 13:02:02
  Branch: HEAD                             Handle: 2001102612020100

  Modified files:
    ossp-pkg/l2             l2_ch_buffer.c

  Log:
    get rid of compile warnings by moving code

  Summary:
    Revision    Changes     Path
    1.27        +54 -60     ossp-pkg/l2/l2_ch_buffer.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_buffer.c
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 l2_ch_buffer.c
  --- ossp-pkg/l2/l2_ch_buffer.c	2001/10/23 10:05:53	1.26
  +++ ossp-pkg/l2/l2_ch_buffer.c	2001/10/26 11:02:01	1.27
  @@ -50,6 +50,60 @@
       l2_level_t  level;
   } l2_ch_buffer_t;
   
  +/* Sets the VIRTUAL timer to preconfigured value in cfg */
  +static int set_alarm(l2_ch_buffer_t *cfg)
  +{
  +#ifdef HAVE_INET_SETITIMER
  +    struct itimerval valtest, valnew;
  +
  +    /* initialize auto vars before using them */
  +    memset(&valnew, 0, sizeof(valnew));
  +
  +    valnew.it_interval.tv_sec = cfg->bufinterval;
  +    valnew.it_interval.tv_usec = 0;
  +    valnew.it_value.tv_sec = cfg->bufinterval;
  +    valnew.it_value.tv_usec = 0;
  +    if  ((getitimer(L2_BUFFER_TIMER, &testval) == 0) &&
  +        ((testval.it_value.tv_sec | testval.it_value.tv_usec |
  +        testval.it_interval.tv_sec | testval.it_interval.tv_usec) == 0))
  +        return setitimer(L2_BUFFER_TIMER, &valnew, &cfg->valprev);
  +    else {
  +        cfg->bufinterval = -1L; /* mark this timer as broken */
  +        assert(FALSE);
  +    }
  +#else
  +    unsigned int uiAlarmed = 0;
  +
  +    uiAlarmed = alarm(cfg->bufinterval);
  +    if (uiAlarmed) {            /* check if SIGALRM is occupied          */
  +        alarm(uiAlarmed);       /* ...if so, then hack in the old value  */
  +        cfg->bufinterval = -1L; /* ...mark this timer as broken          */
  +        assert(FALSE);          /* ...and warn the user about problems   */
  +    }
  +    return 0;
  +#endif
  +}
  +
  +/* Resets the VIRTUAL timer to preconfigured value in cfg */
  +static int reset_alarm(l2_ch_buffer_t *cfg)
  +{
  +#ifdef HAVE_INET_SETITIMER
  +    struct itimerval valnew;
  +
  +    /* initialize auto vars before using them */
  +    memset(&valnew, 0, sizeof(valnew));
  +
  +    valnew.it_interval.tv_sec = cfg->bufinterval;
  +    valnew.it_interval.tv_usec = 0;
  +    valnew.it_value.tv_sec = cfg->bufinterval;
  +    valnew.it_value.tv_usec = 0;
  +    return setitimer(L2_BUFFER_TIMER, &valnew, 0);
  +#else
  +    alarm(cfg->bufinterval);
  +    return 0;
  +#endif
  +}
  +
   static void catchsignal(int sig, ...)
   {
       va_list ap;
  @@ -118,66 +172,6 @@
           return L2_ERR_ARG;
   
       return rv;
  -}
  -
  -/************************************************************
  - * set_alarm: Helper method to hook_open                    *
  - *   Sets the VIRTUAL timer to preconfigured value in cfg   *
  - ************************************************************/
  -static int set_alarm(l2_ch_buffer_t *cfg)
  -{
  -#ifdef HAVE_INET_SETITIMER
  -    struct itimerval valtest, valnew;
  -
  -    /* initialize auto vars before using them */
  -    memset(&valnew, 0, sizeof(valnew));
  -
  -    valnew.it_interval.tv_sec = cfg->bufinterval;
  -    valnew.it_interval.tv_usec = 0;
  -    valnew.it_value.tv_sec = cfg->bufinterval;
  -    valnew.it_value.tv_usec = 0;
  -    if  ((getitimer(L2_BUFFER_TIMER, &testval) == 0) &&
  -        ((testval.it_value.tv_sec | testval.it_value.tv_usec |
  -        testval.it_interval.tv_sec | testval.it_interval.tv_usec) == 0))
  -        return setitimer(L2_BUFFER_TIMER, &valnew, &cfg->valprev);
  -    else {
  -        cfg->bufinterval = -1L; /* mark this timer as broken */
  -        assert(FALSE);
  -    }
  -#else
  -    unsigned int uiAlarmed = 0;
  -
  -    uiAlarmed = alarm(cfg->bufinterval);
  -    if (uiAlarmed) {            /* check if SIGALRM is occupied          */
  -        alarm(uiAlarmed);       /* ...if so, then hack in the old value  */
  -        cfg->bufinterval = -1L; /* ...mark this timer as broken          */
  -        assert(FALSE);          /* ...and warn the user about problems   */
  -    }
  -    return 0;
  -#endif
  -}
  -
  -/************************************************************
  - * reset_alarm: Helper method to hook_flush                 *
  - *   Resets the VIRTUAL timer to preconfigured value in cfg *
  - ************************************************************/
  -static int reset_alarm(l2_ch_buffer_t *cfg)
  -{
  -#ifdef HAVE_INET_SETITIMER
  -    struct itimerval valnew;
  -
  -    /* initialize auto vars before using them */
  -    memset(&valnew, 0, sizeof(valnew));
  -
  -    valnew.it_interval.tv_sec = cfg->bufinterval;
  -    valnew.it_interval.tv_usec = 0;
  -    valnew.it_value.tv_sec = cfg->bufinterval;
  -    valnew.it_value.tv_usec = 0;
  -    return setitimer(L2_BUFFER_TIMER, &valnew, 0);
  -#else
  -    alarm(cfg->bufinterval);
  -    return 0;
  -#endif
   }
   
   /* open channel */

From ossp-cvs-owner@ossp.org  Tue Oct 30 09:12:29 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9U8CSv98825; Tue, 30 Oct 2001 09:12:28 +0100 (CET)
Date: Tue, 30 Oct 2001 09:12:28 +0100 (CET)
Message-Id: <200110300812.f9U8CSv98825@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_buffer.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   30-Oct-2001 09:12:28
  Branch: HEAD                             Handle: 2001103008122800

  Modified files:
    ossp-pkg/l2             l2_ch_buffer.c

  Log:
    external feedback. I don't think hardcoding the include would be correct solution

  Summary:
    Revision    Changes     Path
    1.28        +1  -0      ossp-pkg/l2/l2_ch_buffer.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_buffer.c
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 l2_ch_buffer.c
  --- ossp-pkg/l2/l2_ch_buffer.c	2001/10/26 11:02:01	1.27
  +++ ossp-pkg/l2/l2_ch_buffer.c	2001/10/30 08:12:28	1.28
  @@ -33,6 +33,7 @@
   #include <string.h>
   #include <unistd.h> /* for alarm() and setitime()         */
   #include <signal.h> /* for use of sigaction() and SIGALRM */
  +//FIXME feedback from lmtp2nntp 1.1b2 tester Lawrence "Larry" Greenfield //<leg+@andrew.cmu.edu> "[...] on Linux, l2_ch_buffer.c needed a #include //<sys/time.h> [...]"
   
   #define L2_BUFFER_TIMER ITIMER_REAL /* calls to [s|g]etitimer() and alarm() */
   

From ossp-cvs-owner@ossp.org  Tue Oct 30 19:55:29 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9UItRf75588; Tue, 30 Oct 2001 19:55:27 +0100 (CET)
Date: Tue, 30 Oct 2001 19:55:27 +0100 (CET)
Message-Id: <200110301855.f9UItRf75588@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_buffer.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   30-Oct-2001 19:55:27
  Branch: HEAD                             Handle: 2001103018552700

  Modified files:
    ossp-pkg/l2             l2_ch_buffer.c

  Log:
    Fixed implicit inclusion of sys/time.h. Now it is included explicitly, and
    solves a linux OS preprocessor problem found by Lawrence "Larry" Greenfield
    <leg+@andrew.cmu.edu>.

  Summary:
    Revision    Changes     Path
    1.29        +7  -4      ossp-pkg/l2/l2_ch_buffer.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_buffer.c
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 l2_ch_buffer.c
  --- ossp-pkg/l2/l2_ch_buffer.c	2001/10/30 08:12:28	1.28
  +++ ossp-pkg/l2/l2_ch_buffer.c	2001/10/30 18:55:27	1.29
  @@ -28,12 +28,15 @@
   */
   
   #include "l2.h"
  -#include "l2_p.h"   /* for TRACE()                        */
  +#include "l2_p.h"     /* for TRACE macro              */
   
   #include <string.h>
  -#include <unistd.h> /* for alarm() and setitime()         */
  -#include <signal.h> /* for use of sigaction() and SIGALRM */
  -//FIXME feedback from lmtp2nntp 1.1b2 tester Lawrence "Larry" Greenfield //<leg+@andrew.cmu.edu> "[...] on Linux, l2_ch_buffer.c needed a #include //<sys/time.h> [...]"
  +#include <unistd.h>   /* for alarm(3)                 */
  +#include <signal.h>   /* for sigaction(2) and SIGALRM */
  +
  +#ifdef HAVE_SETITIMER
  +#include <sys/time.h> /* for setitimer(2)             */
  +#endif
   
   #define L2_BUFFER_TIMER ITIMER_REAL /* calls to [s|g]etitimer() and alarm() */
   

From ossp-cvs-owner@ossp.org  Tue Oct 30 19:56:15 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9UIuEn75666; Tue, 30 Oct 2001 19:56:14 +0100 (CET)
Date: Tue, 30 Oct 2001 19:56:14 +0100 (CET)
Message-Id: <200110301856.f9UIuEn75666@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_pipe.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   30-Oct-2001 19:56:14
  Branch: HEAD                             Handle: 2001103018561300

  Modified files:
    ossp-pkg/l2             l2_ch_pipe.c

  Log:
    Cleanup the signal handler to avoid compiler warnings on some platforms.

  Summary:
    Revision    Changes     Path
    1.26        +1  -1      ossp-pkg/l2/l2_ch_pipe.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_pipe.c
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 l2_ch_pipe.c
  --- ossp-pkg/l2/l2_ch_pipe.c	2001/10/04 12:53:54	1.25
  +++ ossp-pkg/l2/l2_ch_pipe.c	2001/10/30 18:56:13	1.26
  @@ -62,7 +62,7 @@
   
       if (sig == SIGCHLD) {
           TRACE("SIGCHLD caught");
  -        Pid = waitpid(-1, &iStatus, WUNTRACED | WNOHANG);
  +        Pid = waitpid((pid_t)-1, &iStatus, WUNTRACED | WNOHANG);
           if (WIFEXITED(iStatus))
               TRACE("EXITED child");     /* child finished and returned       */
           else if (WIFSIGNALED(iStatus))

From ossp-cvs-owner@ossp.org  Wed Oct 31 09:08:30 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9V88TV24686; Wed, 31 Oct 2001 09:08:29 +0100 (CET)
Date: Wed, 31 Oct 2001 09:08:29 +0100 (CET)
Message-Id: <200110310808.f9V88TV24686@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   31-Oct-2001 09:08:29
  Branch: HEAD                             Handle: 2001103108082800

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO

  Log:
    need a plain english description

  Summary:
    Revision    Changes     Path
    1.45        +2  -0      ossp-pkg/lmtp2nntp/00TODO
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.44 -r1.45 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	2001/10/15 14:32:32	1.44
  +++ ossp-pkg/lmtp2nntp/00TODO	2001/10/31 08:08:28	1.45
  @@ -1,4 +1,6 @@
   
  +  use sa_buffer (where sa_timeout is called)
  +
     option -U currently has to be specified before option -b in order to set the
     owner/modes of Unix Domains sockets correctly. To fix this, the wholly
     option handling has to be revamped.

From ossp-cvs-owner@ossp.org  Wed Oct 31 09:24:11 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9V8OBQ26644; Wed, 31 Oct 2001 09:24:11 +0100 (CET)
Date: Wed, 31 Oct 2001 09:24:11 +0100 (CET)
Message-Id: <200110310824.f9V8OBQ26644@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   31-Oct-2001 09:24:11
  Branch: HEAD                             Handle: 2001103108241000

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO

  Log:
    feature request: post w/o stat

  Summary:
    Revision    Changes     Path
    1.46        +4  -0      ossp-pkg/lmtp2nntp/00TODO
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.45 -r1.46 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	2001/10/31 08:08:28	1.45
  +++ ossp-pkg/lmtp2nntp/00TODO	2001/10/31 08:24:10	1.46
  @@ -24,6 +24,10 @@
     the name of the variable "errorstring" is confusing since it is used for
     other strings as well, see processing of -r option
   
  +  Lawrence Greenfield <leg+@andrew.cmu.edu>
  +  inn permissions require "read" for a STAT, so a "post w/o stat" delivery
  +  mode should be implemented.
  +
     **** DEVELOPMENT INFORMATION ****
   
     Proposal for future URL-style logging option syntax

From ossp-cvs-owner@ossp.org  Wed Oct 31 10:46:08 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9V9k7U36587; Wed, 31 Oct 2001 10:46:07 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id E3DB34CE729; Wed, 31 Oct 2001 10:46:06 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa TODO
Message-Id: <20011031094606.E3DB34CE729@visp.engelschall.com>
Date: Wed, 31 Oct 2001 10:46:06 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Oct-2001 10:46:06
  Branch: HEAD                             Handle: 2001103109460600

  Modified files:
    ossp-pkg/sa             TODO

  Log:
    remember issue here, too.

  Summary:
    Revision    Changes     Path
    1.28        +12 -0      ossp-pkg/sa/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 TODO
  --- ossp-pkg/sa/TODO	2001/10/26 10:57:28	1.27
  +++ ossp-pkg/sa/TODO	2001/10/31 09:46:06	1.28
  @@ -2,6 +2,18 @@
   TODO
   ----
   
  +Oh, finally, a performance issue (that probably doesn't matter for
  +lmtp2nntp):
  +sa_rc_t sa_read(sa_t *sa, char *cpBuf, size_t nBufReq, size_t *nBufRes)
  +always flushes the write portion of the outgoing stream, even if the
  +read is going to be entirely from the local buffer.  This is generally
  +undesirably behavior, since you can trigger nagle's algorithm if
  +you're a command/response server with pipelining like LMTP.
  +Generally, you want to flush the write portion whenever you're about
  +to block on a read, but not necessarily before.
  +(Of course, the client-side of a pipelining client is considerably
  +more complex.)
  +
   - on resolving multiple addresses can be returned (especially
     one IPv4 and one IPv6!) and each one has to be tried on
     socket+connect for instance. What to do? See also

From ossp-cvs-owner@ossp.org  Wed Oct 31 12:45:36 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9VBjZU51739; Wed, 31 Oct 2001 12:45:35 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id AC7584CE733; Wed, 31 Oct 2001 12:45:35 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c
Message-Id: <20011031114535.AC7584CE733@visp.engelschall.com>
Date: Wed, 31 Oct 2001 12:45:35 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Oct-2001 12:45:35
  Branch: HEAD                             Handle: 2001103111453500

  Modified files:
    ossp-pkg/sa             sa.c

  Log:
    Improve performance by only flushing the output buffer of we really read from
    the socket. If we fulfill the request with data from the user-space buffer we
    now no longer force a flush of the output buffer.

  Summary:
    Revision    Changes     Path
    1.37        +4  -4      ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.36 -r1.37 sa.c
  --- ossp-pkg/sa/sa.c	2001/10/24 12:11:31	1.36
  +++ ossp-pkg/sa/sa.c	2001/10/31 11:45:35	1.37
  @@ -1453,14 +1453,12 @@
       if (sa->fdSocket == -1)
           return SA_ERR_USE;
   
  -    /* trigger a write buffer flush */
  -    if (sa->nWriteLen > 0)
  -        sa_flush(sa);
  -
       /* perform read operation */
       rv = SA_OK;
       if (sa->nReadSize == 0) {
           /* user-space unbuffered I/O */
  +        if (sa->nWriteLen > 0)
  +            sa_flush(sa);
           res = sa_read_raw(sa, cpBuf, nBufReq);
           if (res == 0)
               rv = SA_ERR_EOF;
  @@ -1489,6 +1487,8 @@
                       res     += sa->nReadLen;
                       sa->nReadLen = 0;
                   }
  +                if (sa->nWriteLen > 0)
  +                    sa_flush(sa);
                   if (nBufReq >= sa->nReadSize) {
                       /* buffer is too small at all, so read directly */
                       n = sa_read_raw(sa, cpBuf, nBufReq);

From ossp-cvs-owner@ossp.org  Wed Oct 31 13:41:55 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9VCfsU58532; Wed, 31 Oct 2001 13:41:54 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 47FEF4CE716; Wed, 31 Oct 2001 13:41:54 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c sa.h sa.pod
Message-Id: <20011031124154.47FEF4CE716@visp.engelschall.com>
Date: Wed, 31 Oct 2001 13:41:54 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Oct-2001 13:41:54
  Branch: HEAD                             Handle: 2001103112415300

  Modified files:
    ossp-pkg/sa             sa.c sa.h sa.pod

  Log:
    - provide additional SA_ERR_IMP result code for indicating that
      an implementation part is not available on the current platform.
    
    - provide new sa_option() function for setting various
      socket options.
    
    - implement SA_OPTION_NAGLE (for enabling/disabling Nagle's Algorithm)
      and SA_OPTION_NONBLOCK (for enabling/disabling non-blocking I/O mode).

  Summary:
    Revision    Changes     Path
    1.38        +62 -1      ossp-pkg/sa/sa.c
    1.24        +17 -9      ossp-pkg/sa/sa.h
    1.15        +3  -0      ossp-pkg/sa/sa.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.37 -r1.38 sa.c
  --- ossp-pkg/sa/sa.c	2001/10/31 11:45:35	1.37
  +++ ossp-pkg/sa/sa.c	2001/10/31 12:41:53	1.38
  @@ -71,6 +71,11 @@
   #define ssize_t long
   #endif
   
  +/* backward compatibility for O_NONBLOCK */
  +#if !defined(O_NONBLOCK) && defined(O_NDELAY)
  +#define O_NONBLOCK O_NDELAY
  +#endif
  +
   /* system call structure declaration macros */
   #define SA_SC_DECLARE_0(rc_t, fn) \
       struct { \
  @@ -494,7 +499,7 @@
           if (cpHost[0] == '[') {
               /* IPv6 address (see RFC2732) */
   #ifndef AF_INET6
  -            return SA_ERR_ARG;
  +            return SA_ERR_IMP;
   #else
               bIPv6 = TRUE;
               cpHost++;
  @@ -1056,6 +1061,61 @@
       return SA_OK;
   }
   
  +/* configure socket option */
  +sa_rc_t sa_option(sa_t *sa, sa_option_t id, ...)
  +{
  +    sa_rc_t rv;
  +    va_list ap;
  +
  +    /* argument sanity check(s) */
  +    if (sa == NULL)
  +        return SA_ERR_ARG;
  +
  +    /* process option */
  +    rv = SA_OK;
  +    va_start(ap, id);
  +    switch (id) {
  +        case SA_OPTION_NAGLE: {
  +            /* enable/disable Nagle's Algorithm (see RFC898) */
  +#if defined(IPPROTO_TCP) && defined(TCP_NODELAY)
  +            int mode = ((int)va_arg(ap, int) ? 1 : 0);
  +            if (sa->fdSocket == -1) {
  +                rv = SA_ERR_USE;
  +                break;
  +            }
  +            if (setsockopt(sa->fdSocket, IPPROTO_TCP, TCP_NODELAY, 
  +                           (void *)&mode, sizeof(mode)) < 0)
  +                rv = SA_ERR_SYS;
  +#else
  +            rv = SA_ERR_IMP;
  +#endif
  +            break;
  +        }
  +        case SA_OPTION_NONBLOCK: {
  +            /* enable/disable non-blocking I/O mode */
  +            int flags;
  +            int mode = (int)va_arg(ap, int);
  +            if ((flags = fcntl(sa->fdSocket, F_GETFL, 0)) < 0) {
  +                rv = SA_ERR_SYS;
  +                break;
  +            }
  +            if (mode == 0)
  +                flags &= ~(O_NONBLOCK);
  +            else
  +                flags |= O_NONBLOCK;
  +            if (fcntl(sa->fdSocket, F_SETFL, flags) < 0)
  +                rv = SA_ERR_SYS;
  +            break;
  +        }
  +        default: {
  +            rv = SA_ERR_ARG;
  +        }
  +    }
  +    va_end(ap);
  +
  +    return rv;
  +}
  +
   /* override system call */
   sa_rc_t sa_syscall(sa_t *sa, sa_syscall_t id, void (*fptr)(), void *fctx)
   {
  @@ -1918,6 +1978,7 @@
       else if (rv == SA_ERR_EOF) sz = "End Of Communication";
       else if (rv == SA_ERR_TMT) sz = "Communication Timeout";
       else if (rv == SA_ERR_SYS) sz = "Operating System Error";
  +    else if (rv == SA_ERR_IMP) sz = "Implementation Not Available";
       else if (rv == SA_ERR_INT) sz = "Internal Error";
       else                       sz = "Invalid Result Code";
       return sz;
  Index: ossp-pkg/sa/sa.h
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 sa.h
  --- ossp-pkg/sa/sa.h	2001/10/11 08:00:37	1.23
  +++ ossp-pkg/sa/sa.h	2001/10/31 12:41:53	1.24
  @@ -107,15 +107,16 @@
   
   /* return codes */
   typedef enum {
  -    SA_OK,      /* Everything Ok          */
  -    SA_ERR_ARG, /* Invalid Argument       */
  -    SA_ERR_USE, /* Invalid Use Or Context */
  -    SA_ERR_MEM, /* Not Enough Memory      */
  -    SA_ERR_MTC, /* Matching Failed        */
  -    SA_ERR_EOF, /* End Of Communication   */
  -    SA_ERR_TMT, /* Communication Timeout  */
  -    SA_ERR_SYS, /* Operating System Error */
  -    SA_ERR_INT  /* Internal Error         */
  +    SA_OK,      /* Everything Ok                */
  +    SA_ERR_ARG, /* Invalid Argument             */
  +    SA_ERR_USE, /* Invalid Use Or Context       */
  +    SA_ERR_MEM, /* Not Enough Memory            */
  +    SA_ERR_MTC, /* Matching Failed              */
  +    SA_ERR_EOF, /* End Of Communication         */
  +    SA_ERR_TMT, /* Communication Timeout        */
  +    SA_ERR_SYS, /* Operating System Error       */
  +    SA_ERR_IMP, /* Implementation Not Available */
  +    SA_ERR_INT  /* Internal Error               */
   } sa_rc_t;
   
   /* list of timeouts */
  @@ -133,6 +134,12 @@
       SA_BUFFER_WRITE
   } sa_buffer_t;
   
  +/* list of options */
  +typedef enum {
  +    SA_OPTION_NAGLE,
  +    SA_OPTION_NONBLOCK
  +} sa_option_t;
  +
   /* list of system calls */
   typedef enum {
       SA_SYSCALL_CONNECT,
  @@ -163,6 +170,7 @@
   sa_rc_t sa_type         (sa_t *sa, sa_type_t type);
   sa_rc_t sa_timeout      (sa_t *sa, sa_timeout_t id, long sec, long usec);
   sa_rc_t sa_buffer       (sa_t *sa, sa_buffer_t  id, size_t size);
  +sa_rc_t sa_option       (sa_t *sa, sa_option_t  id, ...);
   sa_rc_t sa_syscall      (sa_t *sa, sa_syscall_t id, void (*fptr)(), void *fctx);
   
   /* socket connection operations */
  Index: ossp-pkg/sa/sa.pod
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 sa.pod
  --- ossp-pkg/sa/sa.pod	2001/10/24 12:24:27	1.14
  +++ ossp-pkg/sa/sa.pod	2001/10/31 12:41:53	1.15
  @@ -67,6 +67,7 @@
   sa_type,
   sa_timeout,
   sa_buffer, 
  +sa_option, 
   sa_syscall. 
               
   =item B<Socket Connection Operations>:
  @@ -274,6 +275,8 @@
   =item sa_rc_t B<sa_timeout>(sa_t *I<sa>, sa_timeout_t I<id>, long I<sec>, long I<usec>);
   
   =item sa_rc_t B<sa_buffer>(sa_t *I<sa>, sa_buffer_t I<id>, size_t I<size>);
  +
  +=item sa_rc_t B<sa_option>(sa_t *I<sa>, sa_option_t I<id>, ...);
   
   =item sa_rc_t B<sa_syscall>(sa_t *I<sa>, sa_syscall_t I<id>, void (*I<fptr>)(), void *I<fctx>);
   

From ossp-cvs-owner@ossp.org  Wed Oct 31 14:11:26 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9VDBPU62120; Wed, 31 Oct 2001 14:11:25 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id A0F534CE716; Wed, 31 Oct 2001 14:11:25 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa TODO
Message-Id: <20011031131125.A0F534CE716@visp.engelschall.com>
Date: Wed, 31 Oct 2001 14:11:25 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Oct-2001 14:11:25
  Branch: HEAD                             Handle: 2001103113112500

  Modified files:
    ossp-pkg/sa             TODO

  Log:
    remember the issue now that we did our best

  Summary:
    Revision    Changes     Path
    1.29        +18 -12     ossp-pkg/sa/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 TODO
  --- ossp-pkg/sa/TODO	2001/10/31 09:46:06	1.28
  +++ ossp-pkg/sa/TODO	2001/10/31 13:11:25	1.29
  @@ -2,18 +2,6 @@
   TODO
   ----
   
  -Oh, finally, a performance issue (that probably doesn't matter for
  -lmtp2nntp):
  -sa_rc_t sa_read(sa_t *sa, char *cpBuf, size_t nBufReq, size_t *nBufRes)
  -always flushes the write portion of the outgoing stream, even if the
  -read is going to be entirely from the local buffer.  This is generally
  -undesirably behavior, since you can trigger nagle's algorithm if
  -you're a command/response server with pipelining like LMTP.
  -Generally, you want to flush the write portion whenever you're about
  -to block on a read, but not necessarily before.
  -(Of course, the client-side of a pipelining client is considerably
  -more complex.)
  -
   - on resolving multiple addresses can be returned (especially
     one IPv4 and one IPv6!) and each one has to be tried on
     socket+connect for instance. What to do? See also
  @@ -25,6 +13,24 @@
   
   CANDO
   -----
  +
  +o Nagle's Algorithm and Flushing of Output Buffers.
  +   
  +  The kernel performs Nagle's Algorithm (see RFC 896 and search for "nagle
  +  algorithm" on www.whatis.com [currently
  +  http://searchnetworking.techtarget.com/sDefinition/0,,sid7_gci754347,00.html]
  +  on his internal output buffers. Although we flush our user-space output
  +  buffers only if we really perform a read(2) (and not if the read is going to
  +  be served entirely from the local buffer) this does not mean that really
  +  every character the remote has already sent is also already read by us.
  +  Because the kernel also has a read buffer. Optimal behaviour would be that
  +  we flush out output buffer only if the read(2) would block. OTOH flushing
  +  out buffers means performing a write(2) and this again is buffered in the
  +  kernel, too. So performing an optimal read->write->read->write->... sequence
  +  is very complex and non-trivial to implement. Especially because even using
  +  Nagle's Algorithm always is not the right choice (see
  +  http://www.w3.org/Protocols/HTTP/Performance/Nagle/ for details), especially
  +  when it comes to pipelining protocols.
   
   o Support for writev(2).
   

From ossp-cvs-owner@ossp.org  Wed Oct 31 17:47:07 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id f9VGl6u91205; Wed, 31 Oct 2001 17:47:06 +0100 (CET)
Date: Wed, 31 Oct 2001 17:47:06 +0100 (CET)
Message-Id: <200110311647.f9VGl6u91205@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 configure.ac l2_ch_buffer.c l2_ut_level.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   31-Oct-2001 17:47:06
  Branch: HEAD                             Handle: 2001103116470500

  Modified files:
    ossp-pkg/l2             configure.ac l2_ch_buffer.c l2_ut_level.c

  Log:
    Bug fixes, correction of sys/type.h inclusion, rid of warning errors.

  Summary:
    Revision    Changes     Path
    1.13        +2  -0      ossp-pkg/l2/configure.ac
    1.30        +11 -13     ossp-pkg/l2/l2_ch_buffer.c
    1.6         +2  -2      ossp-pkg/l2/l2_ut_level.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/configure.ac
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 configure.ac
  --- ossp-pkg/l2/configure.ac	2001/10/12 14:46:16	1.12
  +++ ossp-pkg/l2/configure.ac	2001/10/31 16:47:05	1.13
  @@ -81,6 +81,8 @@
   fi  
   AC_CHECK_LIB(socket, accept)
   
  +AC_CHECK_HEADERS(sys/time.h)
  +
   AC_CHECK_FUNCS(inet_aton inet_pton inet_ntoa inet_ntop snprintf vsnprintf setitimer)
   
   sinclude(l2_ut_sa.ac)
  Index: ossp-pkg/l2/l2_ch_buffer.c
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 l2_ch_buffer.c
  --- ossp-pkg/l2/l2_ch_buffer.c	2001/10/30 18:55:27	1.29
  +++ ossp-pkg/l2/l2_ch_buffer.c	2001/10/31 16:47:05	1.30
  @@ -34,7 +34,7 @@
   #include <unistd.h>   /* for alarm(3)                 */
   #include <signal.h>   /* for sigaction(2) and SIGALRM */
   
  -#ifdef HAVE_SETITIMER
  +#ifdef HAVE_SYS_TIME_H
   #include <sys/time.h> /* for setitimer(2)             */
   #endif
   
  @@ -47,7 +47,7 @@
       int         bufsize;
       long        bufinterval;
       struct      sigaction sigalrm;
  -#ifdef HAVE_SETITIMER
  +#if defined HAVE_SETITIMER && defined HAVE_SYS_TIME_H
       struct      itimerval valprev;
   #endif
       int         levelflush;
  @@ -57,7 +57,7 @@
   /* Sets the VIRTUAL timer to preconfigured value in cfg */
   static int set_alarm(l2_ch_buffer_t *cfg)
   {
  -#ifdef HAVE_INET_SETITIMER
  +#if defined HAVE_SETITIMER && defined HAVE_SYS_TIME_H
       struct itimerval valtest, valnew;
   
       /* initialize auto vars before using them */
  @@ -67,22 +67,22 @@
       valnew.it_interval.tv_usec = 0;
       valnew.it_value.tv_sec = cfg->bufinterval;
       valnew.it_value.tv_usec = 0;
  -    if  ((getitimer(L2_BUFFER_TIMER, &testval) == 0) &&
  -        ((testval.it_value.tv_sec | testval.it_value.tv_usec |
  -        testval.it_interval.tv_sec | testval.it_interval.tv_usec) == 0))
  +    if  ((getitimer(L2_BUFFER_TIMER, &valtest) == 0) &&
  +        ((valtest.it_value.tv_sec | valtest.it_value.tv_usec |
  +        valtest.it_interval.tv_sec | valtest.it_interval.tv_usec) == 0))
           return setitimer(L2_BUFFER_TIMER, &valnew, &cfg->valprev);
       else {
           cfg->bufinterval = -1L; /* mark this timer as broken */
           assert(FALSE);
  +        return 1; /* to make the compiler happy */
       }
   #else
       unsigned int uiAlarmed = 0;
   
  -    uiAlarmed = alarm(cfg->bufinterval);
  +    assert(uiAlarmed = alarm(cfg->bufinterval));
       if (uiAlarmed) {            /* check if SIGALRM is occupied          */
           alarm(uiAlarmed);       /* ...if so, then hack in the old value  */
           cfg->bufinterval = -1L; /* ...mark this timer as broken          */
  -        assert(FALSE);          /* ...and warn the user about problems   */
       }
       return 0;
   #endif
  @@ -91,7 +91,7 @@
   /* Resets the VIRTUAL timer to preconfigured value in cfg */
   static int reset_alarm(l2_ch_buffer_t *cfg)
   {
  -#ifdef HAVE_INET_SETITIMER
  +#if defined HAVE_SETITIMER && defined HAVE_SYS_TIME_H
       struct itimerval valnew;
   
       /* initialize auto vars before using them */
  @@ -123,9 +123,7 @@
       else if (sig == SIGALRM) {
           TRACE("SIGALRM caught");
           l2_channel_flush(ch);
  -#ifndef HAVE_SETITIMER
           reset_alarm(cfg); /* alarm(3) doesn't auto-reset like setitime(2) */
  -#endif
       }
   }
   
  @@ -146,7 +144,7 @@
       cfg->levelflush  = 0;
       cfg->level       = L2_LEVEL_NONE;
       memset(&cfg->sigalrm, 0, sizeof(cfg->sigalrm));
  -#ifdef HAVE_SETITIMER
  +#if defined HAVE_SETITIMER && defined HAVE_SYS_TIME_H
       memset(&cfg->valprev, 0, sizeof(cfg->valprev));
   #endif
   
  @@ -293,7 +291,7 @@
       l2_result_t rv;
   
       if ((cfg->bufinterval != 0) && (cfg->bufinterval != -1L)) {
  -#ifdef HAVE_INET_SETITIMER
  +#if defined HAVE_SETITIMER && defined HAVE_SYS_TIME_H
           if (setitimer(L2_BUFFER_TIMER, &cfg->valprev, 0)) /* restore timer */
               return L2_ERR_SYS;
   #else
  Index: ossp-pkg/l2/l2_ut_level.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 l2_ut_level.c
  --- ossp-pkg/l2/l2_ut_level.c	2001/10/09 15:34:55	1.5
  +++ ossp-pkg/l2/l2_ut_level.c	2001/10/31 16:47:05	1.6
  @@ -57,7 +57,7 @@
   
       len = maxlen;
       string[0] = '\0';
  -    for (i = 0; l2s_table[i].level != NULL; i++) {
  +    for (i = 0; l2s_table[i].level != 0; i++) {
           if (levelmask & l2s_table[i].level) {
               levelmask &= ~(l2s_table[i].level);
               l = strlen(l2s_table[i].string) + 1;
  @@ -126,7 +126,7 @@
           if (cpE > (string+maxlen))
               break;
           bFound = 0;
  -        for (i = 0; l2s_table[i].level != NULL; i++) {
  +        for (i = 0; l2s_table[i].level != 0; i++) {
               if (strncasecmp(cpB, l2s_table[i].string, cpE-cpB) == 0) {
                   *levelmask |= l2s_table[i].level;
                   bFound = 1;

From ossp-cvs-owner@ossp.org  Wed Oct 31 20:28:51 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9VJSnU09732; Wed, 31 Oct 2001 20:28:49 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id BE7904CE716; Wed, 31 Oct 2001 20:28:49 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa_test.c ts.c ts.h
Message-Id: <20011031192849.BE7904CE716@visp.engelschall.com>
Date: Wed, 31 Oct 2001 20:28:49 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Oct-2001 20:28:49
  Branch: HEAD                             Handle: 2001103119284900

  Modified files:
    ossp-pkg/sa             sa_test.c ts.c ts.h

  Log:
    Rename test suite library name spaces in order
    to get rid of problems under Sun Solaris 2.x.

  Summary:
    Revision    Changes     Path
    1.10        +19 -19     ossp-pkg/sa/sa_test.c
    1.3         +41 -41     ossp-pkg/sa/ts.c
    1.2         +29 -27     ossp-pkg/sa/ts.h
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa_test.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 sa_test.c
  --- ossp-pkg/sa/sa_test.c	2001/10/10 15:50:31	1.9
  +++ ossp-pkg/sa/sa_test.c	2001/10/31 19:28:49	1.10
  @@ -38,7 +38,7 @@
   #include "ts.h"
   #include "sa.h"
   
  -TST_FUNC(test_saa_impexp)
  +TS_TEST(test_saa_impexp)
   {
       sa_addr_t *saa;
       sa_rc_t rv;
  @@ -62,30 +62,30 @@
           { "unix:", SA_ERR_ARG, NULL }
       };
   
  -    tst_check(TST, "sa_addr_create");
  +    ts_test_check(TS_CTX, "sa_addr_create");
       if ((rv = sa_addr_create(&saa)) != SA_OK)
  -        tst_fail(TST, "sa_addr_create -> %d[%s] (expected %d[%s])", 
  +        ts_test_fail(TS_CTX, "sa_addr_create -> %d[%s] (expected %d[%s])", 
                    rv, sa_error(rv), SA_OK, sa_error(SA_OK));
       for (i = 0; i < sizeof(table)/sizeof(table[0]); i++) {
  -        tst_check(TST, "sa_addr_u2a(\"%s\")", table[i].in);
  +        ts_test_check(TS_CTX, "sa_addr_u2a(\"%s\")", table[i].in);
           if ((rv = sa_addr_u2a(saa, table[i].in)) != table[i].rv)
  -            tst_fail(TST, "sa_addr_a2u -> %d[%s] (expected %d[%s])",
  +            ts_test_fail(TS_CTX, "sa_addr_a2u -> %d[%s] (expected %d[%s])",
                        rv, sa_error(rv), table[i].rv, sa_error(table[i].rv));
  -        tst_check(TST, "sa_addr_a2u");
  +        ts_test_check(TS_CTX, "sa_addr_a2u");
           if ((rv = sa_addr_a2u(saa, &cp)) != SA_OK)
  -            tst_fail(TST, "sa_addr_u2a -> %d[%s] (expected %d[%s])",
  +            ts_test_fail(TS_CTX, "sa_addr_u2a -> %d[%s] (expected %d[%s])",
                        rv, sa_error(rv), SA_OK, sa_error(SA_OK));
           if (table[i].rv == SA_OK)
               if (strcmp(cp, table[i].out) != 0)
  -                tst_fail(TST, "sa_addr_a2u -> \"%s\" (expected \"%s\")", cp, table[i].out);
  +                ts_test_fail(TS_CTX, "sa_addr_a2u -> \"%s\" (expected \"%s\")", cp, table[i].out);
       }
  -    tst_check(tst, "sa_addr_destroy");
  +    ts_test_check(TS_CTX, "sa_addr_destroy");
       if ((rv = sa_addr_destroy(saa)) != SA_OK)
  -        tst_fail(TST, "sa_addr_destroy -> %d[%s] (expected %d[%s])", 
  +        ts_test_fail(TS_CTX, "sa_addr_destroy -> %d[%s] (expected %d[%s])", 
                    rv, sa_error(rv), SA_OK, sa_error(SA_OK));
   }
   
  -TST_FUNC(test_saa_match)
  +TS_TEST(test_saa_match)
   {
       sa_addr_t *saa1;
       sa_addr_t *saa2;
  @@ -120,10 +120,10 @@
               continue;
           if ((rv = sa_addr_u2a(saa2, table[i].acl)) != SA_OK)
               continue;
  -        tst_check(TST, "sa_addr_match(\"%s\", \"%s\", %d)", 
  +        ts_test_check(TS_CTX, "sa_addr_match(\"%s\", \"%s\", %d)", 
                     table[i].in, table[i].acl, table[i].prefixlen);
           if ((rv = sa_addr_match(saa1, saa2, table[i].prefixlen)) != table[i].rv)
  -            tst_fail(TST, "sa_addr_match -> %d[%s] (expected %d[%s])",
  +            ts_test_fail(TS_CTX, "sa_addr_match -> %d[%s] (expected %d[%s])",
                        rv, sa_error(rv), table[i].rv, sa_error(table[i].rv));
       }
       sa_addr_destroy(saa1);
  @@ -132,14 +132,14 @@
   
   int main(int argc, char *argv[])
   {
  -    ts_t *ts;
  +    ts_suite_t *ts;
       int n;
   
  -    ts = ts_new("OSSP SA (Socket Abstraction Library)");
  -    ts_test(ts, test_saa_impexp, "socket address abstraction (import/export)");
  -    ts_test(ts, test_saa_match,  "socket address abstraction (matching)");
  -    n = ts_run(ts);
  -    ts_free(ts);
  +    ts = ts_suite_new("OSSP SA (Socket Abstraction Library)");
  +    ts_suite_test(ts, test_saa_impexp, "socket address abstraction (import/export)");
  +    ts_suite_test(ts, test_saa_match,  "socket address abstraction (matching)");
  +    n = ts_suite_run(ts);
  +    ts_suite_free(ts);
       return n;
   }
   
  Index: ossp-pkg/sa/ts.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 ts.c
  --- ossp-pkg/sa/ts.c	2001/10/10 15:11:42	1.2
  +++ ossp-pkg/sa/ts.c	2001/10/31 19:28:49	1.3
  @@ -4,7 +4,7 @@
   **  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
   **  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
  -**  This file is part of OSSP TS, a test suite library which
  +**  This file is part of OSSP TS, a small test suite library which
   **  can be found at http://www.ossp.org/pkg/ts/.
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -95,23 +95,23 @@
   };
   
   /* test suite test */
  -struct tst_st {
  -    RING_ENTRY(tst_t)  next;
  +struct ts_test_st {
  +    RING_ENTRY(ts_test_t)  next;
       char              *title;
  -    tst_func_t         func;
  +    ts_test_cb_t         func;
       const char        *file;
       int                line;
       RING_HEAD(tstc_t)  checks;
   };
   
   /* test suite */
  -struct ts_st {
  +struct ts_suite_st {
       char              *title;
  -    RING_HEAD(tst_t)   tests;
  +    RING_HEAD(ts_test_t)   tests;
   };
   
   /* minimal output-independent vprintf(3) variant which supports %{c,s,d,%} only */
  -static int ts_mvxprintf(char *buffer, size_t bufsize, const char *format, va_list ap)
  +static int ts_suite_mvxprintf(char *buffer, size_t bufsize, const char *format, va_list ap)
   {
       /* sufficient integer buffer: <available-bits> x log_10(2) + safety */
       char ibuf[((sizeof(int)*8)/3)+10]; 
  @@ -189,7 +189,7 @@
   }
   
   /* minimal vasprintf(3) variant which supports %{c,s,d} only */
  -static char *ts_mvasprintf(const char *format, va_list ap)
  +static char *ts_suite_mvasprintf(const char *format, va_list ap)
   {
       char *buffer;
       int n;
  @@ -198,70 +198,70 @@
       if (format == NULL || ap == NULL)
           return NULL;
       ap2 = ap;
  -    if ((n = ts_mvxprintf(NULL, 0, format, ap)) == -1)
  +    if ((n = ts_suite_mvxprintf(NULL, 0, format, ap)) == -1)
           return NULL;
       if ((buffer = (char *)malloc(n+1)) == NULL)
           return NULL;
  -    ts_mvxprintf(buffer, n+1, format, ap2);
  +    ts_suite_mvxprintf(buffer, n+1, format, ap2);
       return buffer;
   }
   
   /* minimal asprintf(3) variant which supports %{c,s,d} only */
  -static char *ts_masprintf(const char *format, ...)
  +static char *ts_suite_masprintf(const char *format, ...)
   {
       va_list ap;
       char *cp;
   
       va_start(ap, format);
  -    cp = ts_mvasprintf(format, ap);
  +    cp = ts_suite_mvasprintf(format, ap);
       va_end(ap);
       return cp;
   }
   
   /* create test suite */
  -ts_t *ts_new(const char *fmt, ...)
  +ts_suite_t *ts_suite_new(const char *fmt, ...)
   {
  -    ts_t *ts;
  +    ts_suite_t *ts;
       va_list ap;
   
  -    if ((ts = (ts_t *)malloc(sizeof(ts_t))) == NULL)
  +    if ((ts = (ts_suite_t *)malloc(sizeof(ts_suite_t))) == NULL)
           return NULL;
       va_start(ap, fmt);
  -    ts->title = ts_mvasprintf(fmt, ap);
  -    RING_INIT(&ts->tests, tst_t, next);
  +    ts->title = ts_suite_mvasprintf(fmt, ap);
  +    RING_INIT(&ts->tests, ts_test_t, next);
       va_end(ap);
       return ts;
   }
   
   /* add test case to test suite */
  -void ts_test(ts_t *ts, tst_func_t func, const char *fmt, ...)
  +void ts_suite_test(ts_suite_t *ts, ts_test_cb_t func, const char *fmt, ...)
   {
  -    tst_t *tst;
  +    ts_test_t *tst;
       va_list ap;
   
       if (ts == NULL || func == NULL || fmt == NULL)
           return;
  -    if ((tst = (tst_t *)malloc(sizeof(tst_t))) == NULL)
  +    if ((tst = (ts_test_t *)malloc(sizeof(ts_test_t))) == NULL)
           return;
       RING_ELEM_INIT(tst, next);
       va_start(ap, fmt);
  -    tst->title = ts_mvasprintf(fmt, ap);
  +    tst->title = ts_suite_mvasprintf(fmt, ap);
       va_end(ap);
       tst->func = func;
       tst->file = NULL;
       tst->line = 0;
       RING_INIT(&tst->checks, tstc_t, next);
  -    RING_INSERT_TAIL(&ts->tests, tst, tst_t, next);
  +    RING_INSERT_TAIL(&ts->tests, tst, ts_test_t, next);
       return;
   }
   
   /* run test suite */
  -int ts_run(ts_t *ts)
  +int ts_suite_run(ts_suite_t *ts)
   {
  -    tst_t *tst;
  +    ts_test_t *tst;
       tstc_t *tstc;
       tstl_t *tstl;
  -    int total_tests, total_tests_failed;
  +    int total_tests, total_tests_suite_failed;
       int total_checks, total_checks_failed;
       int test_checks, test_checks_failed;
       const char *file;
  @@ -273,7 +273,7 @@
   
       /* init total counters */
       total_tests         = 0;
  -    total_tests_failed  = 0;
  +    total_tests_suite_failed  = 0;
       total_checks        = 0;
       total_checks_failed = 0;
   
  @@ -284,8 +284,8 @@
       fflush(stdout);
   
       /* iterate through all test cases */
  -    RING_FOREACH(tst, &ts->tests, tst_t, next) {
  -        cp = ts_masprintf(" Test: %s ........................................"
  +    RING_FOREACH(tst, &ts->tests, ts_test_t, next) {
  +        cp = ts_suite_masprintf(" Test: %s ........................................"
                                       "........................................", tst->title);
           cp[60] = '\0';
           fprintf(stdout, "%s", cp);
  @@ -339,7 +339,7 @@
           total_tests++;
           if (test_checks_failed > 0) {
               total_checks_failed += test_checks_failed;
  -            total_tests_failed++;
  +            total_tests_suite_failed++;
           }
       }
   
  @@ -347,9 +347,9 @@
       fprintf(stdout, " __________________________________________________________________\n");
       fprintf(stdout, "\n");
       fprintf(stdout, " Test Summary: %d tests (%d ok, %d failed), %d checks (%d ok, %d failed)\n", 
  -            total_tests, (total_tests - total_tests_failed), total_tests_failed, 
  +            total_tests, (total_tests - total_tests_suite_failed), total_tests_suite_failed, 
               total_checks, (total_checks - total_checks_failed), total_checks_failed); 
  -    if (total_tests_failed > 0)
  +    if (total_tests_suite_failed > 0)
           fprintf(stdout, " Test Suite: FAILED\n");
       else
           fprintf(stdout, " Test Suite: OK\n");
  @@ -360,15 +360,15 @@
   }
   
   /* destroy test suite */
  -void ts_free(ts_t *ts)
  +void ts_suite_free(ts_suite_t *ts)
   {
  -    tst_t *tst;
  +    ts_test_t *tst;
       tstc_t *tstc;
       tstl_t *tstl;
   
       if (ts == NULL)
           return;
  -    RING_FOREACH(tst, &ts->tests, tst_t, next) {
  +    RING_FOREACH(tst, &ts->tests, ts_test_t, next) {
           RING_FOREACH(tstc, &tst->checks, tstc_t, next) {
               RING_FOREACH(tstl, &tstc->logs, tstl_t, next) {
                   free(tstl->text);
  @@ -385,7 +385,7 @@
   }
   
   /* annotate test case with file name and line number */
  -tst_t *tst_ctx(tst_t *tst, const char *file, int line)
  +ts_test_t *ts_test_ctx(ts_test_t *tst, const char *file, int line)
   {
       if (tst != NULL && file != NULL) {
           tst->file = file;
  @@ -395,7 +395,7 @@
   }
   
   /* annotate test case with check */
  -void tst_check(tst_t *tst, const char *fmt, ...)
  +void ts_test_check(ts_test_t *tst, const char *fmt, ...)
   {
       tstc_t *tstc;
       va_list ap;
  @@ -406,7 +406,7 @@
           return;
       va_start(ap, fmt);
       RING_ELEM_INIT(tstc, next);
  -    tstc->title = ts_mvasprintf(fmt, ap);
  +    tstc->title = ts_suite_mvasprintf(fmt, ap);
       tstc->failed = 0;
       tstc->file = tst->file;
       tstc->line = tst->line;
  @@ -417,7 +417,7 @@
   }
   
   /* annotate test case with log message and failure */
  -void tst_fail(tst_t *tst, const char *fmt, ...)
  +void ts_test_fail(ts_test_t *tst, const char *fmt, ...)
   {
       tstc_t *tstc;
       tstl_t *tstl;
  @@ -428,7 +428,7 @@
       if ((tstl = (tstl_t *)malloc(sizeof(tstl_t))) == NULL)
           return;
       va_start(ap, fmt);
  -    tstl->text = ts_mvasprintf(fmt, ap);
  +    tstl->text = ts_suite_mvasprintf(fmt, ap);
       tstl->file = tst->file;
       tstl->line = tst->line;
       RING_ELEM_INIT(tstl, next);
  @@ -440,7 +440,7 @@
   }
   
   /* annotate test case with log message only */
  -void tst_log(tst_t *tst, const char *fmt, ...)
  +void ts_test_log(ts_test_t *tst, const char *fmt, ...)
   {
       tstc_t *tstc;
       tstl_t *tstl;
  @@ -451,7 +451,7 @@
       if ((tstl = (tstl_t *)malloc(sizeof(tstl_t))) == NULL)
           return;
       va_start(ap, fmt);
  -    tstl->text = ts_mvasprintf(fmt, ap);
  +    tstl->text = ts_suite_mvasprintf(fmt, ap);
       tstl->file = tst->file;
       tstl->line = tst->line;
       RING_ELEM_INIT(tstl, next);
  Index: ossp-pkg/sa/ts.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 ts.h
  --- ossp-pkg/sa/ts.h	2001/10/10 15:01:56	1.1
  +++ ossp-pkg/sa/ts.h	2001/10/31 19:28:49	1.2
  @@ -4,7 +4,7 @@
   **  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
   **  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
  -**  This file is part of OSSP TS, a test suite library which
  +**  This file is part of OSSP TS, a small test suite library which
   **  can be found at http://www.ossp.org/pkg/ts/.
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -31,32 +31,34 @@
   #ifndef _TS_H_
   #define _TS_H_
   
  -struct ts_st;
  -typedef struct ts_st ts_t;
  -
  -struct tst_st;
  -typedef struct tst_st tst_t;
  -
  -typedef void (*tst_func_t)(tst_t *);
  -
  -#define TST_FUNC(name) \
  -    static void name(tst_t *tst)
  -
  -#define TST_CTX(tst) \
  -    tst_ctx(tst, __FILE__, __LINE__)
  -
  -#define TST \
  -    TST_CTX(tst)
  -
  -ts_t   *ts_new    (const char *fmt, ...);
  -void    ts_test   (ts_t *ts, tst_func_t func, const char *fmt, ...);
  -int     ts_run    (ts_t *ts);
  -void    ts_free   (ts_t *ts);
  -
  -tst_t  *tst_ctx   (tst_t *tst, const char *file, int line);
  -void    tst_check (tst_t *tst, const char *fmt, ...);
  -void    tst_fail  (tst_t *tst, const char *fmt, ...);
  -void    tst_log   (tst_t *tst, const char *fmt, ...);
  +/* test suite object type */
  +struct ts_suite_st;
  +typedef struct ts_suite_st ts_suite_t;
  +
  +/* test object type */
  +struct ts_test_st;
  +typedef struct ts_test_st ts_test_t;
  +
  +/* test callback function type */
  +typedef void (*ts_test_cb_t)(ts_test_t *);
  +
  +/* test suite operations */
  +ts_suite_t *ts_suite_new  (const char *fmt, ...);
  +void        ts_suite_test (ts_suite_t *s, ts_test_cb_t func, const char *fmt, ...);
  +int         ts_suite_run  (ts_suite_t *s);
  +void        ts_suite_free (ts_suite_t *s);
  +
  +/* test operations */
  +ts_test_t  *ts_test_ctx   (ts_test_t *t, const char *file, int line);
  +void        ts_test_check (ts_test_t *t, const char *fmt, ...);
  +void        ts_test_fail  (ts_test_t *t, const char *fmt, ...);
  +void        ts_test_log   (ts_test_t *t, const char *fmt, ...);
  +
  +/* test suite short-cut macros */
  +#define TS_TEST(name) \
  +    static void name(ts_test_t *_t)
  +#define TS_CTX \
  +    ts_test_ctx(_t, __FILE__, __LINE__)
   
   #endif /* _TS_H_ */
   

From ossp-cvs-owner@ossp.org  Wed Oct 31 20:52:22 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9VJqLU12843; Wed, 31 Oct 2001 20:52:21 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id C0BB34CE716; Wed, 31 Oct 2001 20:52:21 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa Makefile.in
Message-Id: <20011031195221.C0BB34CE716@visp.engelschall.com>
Date: Wed, 31 Oct 2001 20:52:21 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Oct-2001 20:52:21
  Branch: HEAD                             Handle: 2001103119522100

  Modified files:
    ossp-pkg/sa             Makefile.in

  Log:
    provide uninstall target

  Summary:
    Revision    Changes     Path
    1.10        +17 -5      ossp-pkg/sa/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/sa/Makefile.in
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 Makefile.in
  --- ossp-pkg/sa/Makefile.in	2001/10/24 13:40:07	1.9
  +++ ossp-pkg/sa/Makefile.in	2001/10/31 19:52:21	1.10
  @@ -44,8 +44,10 @@
   LDFLAGS     = @LDFLAGS@
   LIBS        = @LIBS@
   RM          = rm -f
  +RMDIR       = rmdir
   SHTOOL      = ./shtool
   LIBTOOL     = ./libtool
  +TRUE        = true
   
   LIB_NAME    = libsa.la
   LIB_OBJS    = sa.lo
  @@ -75,17 +77,27 @@
   	@$(LIBTOOL) --mode=execute ./$(TST_NAME)
   
   install:
  -	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libdir)
  -	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libsa.la $(DESTDIR)$(libdir)/
  -	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(includedir)
  -	$(SHTOOL) install -c -m 644 sa.h $(DESTDIR)$(includedir)/
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(includedir)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libdir)
   	$(SHTOOL) install -c -m 755 sa-config $(DESTDIR)$(bindir)/
  +	$(SHTOOL) install -c -m 644 sa.h $(DESTDIR)$(includedir)/
  +	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libsa.la $(DESTDIR)$(libdir)/
  +
  +uninstall:
  +	@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libsa.la
  +	-$(RM) $(DESTDIR)$(includedir)/sa.h
  +	-$(RM) $(DESTDIR)$(bindir)/sa-config
  +	-$(RMDIR) $(DESTDIR)$(libdir) >/dev/null 2>&1 || $(TRUE)
  +	-$(RMDIR) $(DESTDIR)$(includedir) >/dev/null 2>&1 || $(TRUE)
  +	-$(RMDIR) $(DESTDIR)$(bindir) >/dev/null 2>&1 || $(TRUE)
  +	-$(RMDIR) $(DESTDIR)$(prefix) >/dev/null 2>&1 || $(TRUE)
   
   clean:
   	-$(RM) $(LIB_NAME) $(LIB_OBJS)
   	-$(RM) $(TST_NAME) $(TST_OBJS)
  -	-$(RM) -r .libs >/dev/null 2>&1
  +	-$(RM) -r .libs >/dev/null 2>&1 || $(TRUE)
   	-$(RM) *.o *.lo
   
   distclean: clean

From ossp-cvs-owner@ossp.org  Wed Oct 31 20:52:54 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9VJqqU13125; Wed, 31 Oct 2001 20:52:53 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id E06BA4CE74A; Wed, 31 Oct 2001 20:52:52 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa TODO
Message-Id: <20011031195252.E06BA4CE74A@visp.engelschall.com>
Date: Wed, 31 Oct 2001 20:52:52 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Oct-2001 20:52:52
  Branch: HEAD                             Handle: 2001103119525200

  Modified files:
    ossp-pkg/sa             TODO

  Log:
    now provided by sa_option()

  Summary:
    Revision    Changes     Path
    1.30        +0  -1      ossp-pkg/sa/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 TODO
  --- ossp-pkg/sa/TODO	2001/10/31 13:11:25	1.29
  +++ ossp-pkg/sa/TODO	2001/10/31 19:52:52	1.30
  @@ -7,7 +7,6 @@
     socket+connect for instance. What to do? See also
     http://www.v6.wide.ad.jp/Presentations/ai3-penang0010-v6programming/mgp00015.html
   - support for new getaddrinfo and getnameinfo (IPv6!)
  -- API function for blocking/non-blocking I/O mode
   - more test cases to cover full API
   - more documentation to fully describe API
   

From ossp-cvs-owner@ossp.org  Wed Oct 31 20:58:02 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9VJw1U13722; Wed, 31 Oct 2001 20:58:01 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 6A5F14CE738; Wed, 31 Oct 2001 20:58:01 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa configure.ac
Message-Id: <20011031195801.6A5F14CE738@visp.engelschall.com>
Date: Wed, 31 Oct 2001 20:58:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Oct-2001 20:58:01
  Branch: HEAD                             Handle: 2001103119580000

  Modified files:
    ossp-pkg/sa             configure.ac

  Log:
    add expanded name

  Summary:
    Revision    Changes     Path
    1.7         +1  -1      ossp-pkg/sa/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/sa/configure.ac
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 configure.ac
  --- ossp-pkg/sa/configure.ac	2001/10/08 15:01:26	1.6
  +++ ossp-pkg/sa/configure.ac	2001/10/31 19:58:00	1.7
  @@ -34,7 +34,7 @@
   
   AC_DIVERT_PUSH(NOTICE)
   V=`./shtool version -l txt -d long VERSION`
  -./shtool echo -e "Configuring %BOSSP SA%b, Version %B${V}%b"
  +./shtool echo -e "Configuring %BOSSP SA%b (Socket Abstraction), Version %B${V}%b"
   AC_DIVERT_POP()
   
   AC_SET_MAKE

From ossp-cvs-owner@ossp.org  Wed Oct 31 20:58:24 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9VJwNU13993; Wed, 31 Oct 2001 20:58:23 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 2C1AC4CE757; Wed, 31 Oct 2001 20:58:23 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa devtool.conf
Message-Id: <20011031195823.2C1AC4CE757@visp.engelschall.com>
Date: Wed, 31 Oct 2001 20:58:23 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Oct-2001 20:58:23
  Branch: HEAD                             Handle: 2001103119582200

  Modified files:
    ossp-pkg/sa             devtool.conf

  Log:
    reverse order because Autoconf already needs libtool.m4

  Summary:
    Revision    Changes     Path
    1.5         +4  -4      ossp-pkg/sa/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/sa/devtool.conf
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 devtool.conf
  --- ossp-pkg/sa/devtool.conf	2001/10/24 13:40:28	1.4
  +++ ossp-pkg/sa/devtool.conf	2001/10/31 19:58:22	1.5
  @@ -3,14 +3,14 @@
   ##
   
   %autogen
  -    @autogen autoconf 2.52  "2.5.*"
  -    @autogen libtool  1.4.2 "1.4*"
       @autogen shtool   1.5.4 "1.5.*" all
  +    @autogen libtool  1.4.2 "1.4*"
  +    @autogen autoconf 2.52  "2.5.*"
   
   %autoclean
  -    @autoclean autoconf
  -    @autoclean libtool
       @autoclean shtool
  +    @autoclean libtool
  +    @autoclean autoconf
   
   %configure
       ./configure \

From ossp-cvs-owner@ossp.org  Wed Oct 31 21:07:23 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9VK7NU15528; Wed, 31 Oct 2001 21:07:23 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id F1CA24CE716; Wed, 31 Oct 2001 21:07:22 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa TODO
Message-Id: <20011031200722.F1CA24CE716@visp.engelschall.com>
Date: Wed, 31 Oct 2001 21:07:22 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Oct-2001 21:07:22
  Branch: HEAD                             Handle: 2001103120072200

  Modified files:
    ossp-pkg/sa             TODO

  Log:
    move two things from TODO to CANDO and describe in detail

  Summary:
    Revision    Changes     Path
    1.31        +15 -5      ossp-pkg/sa/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 TODO
  --- ossp-pkg/sa/TODO	2001/10/31 19:52:52	1.30
  +++ ossp-pkg/sa/TODO	2001/10/31 20:07:22	1.31
  @@ -2,16 +2,26 @@
   TODO
   ----
   
  -- on resolving multiple addresses can be returned (especially
  -  one IPv4 and one IPv6!) and each one has to be tried on
  -  socket+connect for instance. What to do? See also
  -  http://www.v6.wide.ad.jp/Presentations/ai3-penang0010-v6programming/mgp00015.html
  -- support for new getaddrinfo and getnameinfo (IPv6!)
   - more test cases to cover full API
   - more documentation to fully describe API
   
   CANDO
   -----
  +
  +o Support for newer DNS Resolving Functions.
  +
  +  In IPv6 land there are usually the newer DNS resolving functions
  +  getaddrinfo(3) and getnameinfo(3). Perhaps we should support these in
  +  favor of gethostbyname(3) and gethostbyaddr(3) because the chance is
  +  higher that they support IPv6 in case we are in IPv6 land.
  +
  +o DNS Resolving and multiple results.
  +
  +  On DNS resolving name, multiple result addresses can be returned.  Either
  +  because of Round-Robin entries, multi-homed hosts or because of hosts
  +  talking both IPv4 and IPv6, etc. Each address has to be tried on
  +  socket+connect. What to do? For some hints see:
  +  http://www.v6.wide.ad.jp/Presentations/ai3-penang0010-v6programming/mgp00015.html
   
   o Nagle's Algorithm and Flushing of Output Buffers.
      

From ossp-cvs-owner@ossp.org  Wed Oct 31 21:09:01 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9VK90U15893; Wed, 31 Oct 2001 21:09:00 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 7E8364CE716; Wed, 31 Oct 2001 21:09:00 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa_test.c
Message-Id: <20011031200900.7E8364CE716@visp.engelschall.com>
Date: Wed, 31 Oct 2001 21:09:00 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Oct-2001 21:09:00
  Branch: HEAD                             Handle: 2001103120090000

  Modified files:
    ossp-pkg/sa             sa_test.c

  Log:
    cleanup formatting

  Summary:
    Revision    Changes     Path
    1.11        +8  -7      ossp-pkg/sa/sa_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa_test.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 sa_test.c
  --- ossp-pkg/sa/sa_test.c	2001/10/31 19:28:49	1.10
  +++ ossp-pkg/sa/sa_test.c	2001/10/31 20:09:00	1.11
  @@ -65,24 +65,25 @@
       ts_test_check(TS_CTX, "sa_addr_create");
       if ((rv = sa_addr_create(&saa)) != SA_OK)
           ts_test_fail(TS_CTX, "sa_addr_create -> %d[%s] (expected %d[%s])", 
  -                 rv, sa_error(rv), SA_OK, sa_error(SA_OK));
  +                     rv, sa_error(rv), SA_OK, sa_error(SA_OK));
       for (i = 0; i < sizeof(table)/sizeof(table[0]); i++) {
           ts_test_check(TS_CTX, "sa_addr_u2a(\"%s\")", table[i].in);
           if ((rv = sa_addr_u2a(saa, table[i].in)) != table[i].rv)
               ts_test_fail(TS_CTX, "sa_addr_a2u -> %d[%s] (expected %d[%s])",
  -                     rv, sa_error(rv), table[i].rv, sa_error(table[i].rv));
  +                         rv, sa_error(rv), table[i].rv, sa_error(table[i].rv));
           ts_test_check(TS_CTX, "sa_addr_a2u");
           if ((rv = sa_addr_a2u(saa, &cp)) != SA_OK)
               ts_test_fail(TS_CTX, "sa_addr_u2a -> %d[%s] (expected %d[%s])",
  -                     rv, sa_error(rv), SA_OK, sa_error(SA_OK));
  +                         rv, sa_error(rv), SA_OK, sa_error(SA_OK));
           if (table[i].rv == SA_OK)
               if (strcmp(cp, table[i].out) != 0)
  -                ts_test_fail(TS_CTX, "sa_addr_a2u -> \"%s\" (expected \"%s\")", cp, table[i].out);
  +                ts_test_fail(TS_CTX, "sa_addr_a2u -> \"%s\" (expected \"%s\")", 
  +                             cp, table[i].out);
       }
       ts_test_check(TS_CTX, "sa_addr_destroy");
       if ((rv = sa_addr_destroy(saa)) != SA_OK)
           ts_test_fail(TS_CTX, "sa_addr_destroy -> %d[%s] (expected %d[%s])", 
  -                 rv, sa_error(rv), SA_OK, sa_error(SA_OK));
  +                     rv, sa_error(rv), SA_OK, sa_error(SA_OK));
   }
   
   TS_TEST(test_saa_match)
  @@ -121,10 +122,10 @@
           if ((rv = sa_addr_u2a(saa2, table[i].acl)) != SA_OK)
               continue;
           ts_test_check(TS_CTX, "sa_addr_match(\"%s\", \"%s\", %d)", 
  -                  table[i].in, table[i].acl, table[i].prefixlen);
  +                      table[i].in, table[i].acl, table[i].prefixlen);
           if ((rv = sa_addr_match(saa1, saa2, table[i].prefixlen)) != table[i].rv)
               ts_test_fail(TS_CTX, "sa_addr_match -> %d[%s] (expected %d[%s])",
  -                     rv, sa_error(rv), table[i].rv, sa_error(table[i].rv));
  +                         rv, sa_error(rv), table[i].rv, sa_error(table[i].rv));
       }
       sa_addr_destroy(saa1);
       sa_addr_destroy(saa2);

From ossp-cvs-owner@ossp.org  Wed Oct 31 21:16:12 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9VKGAU17156; Wed, 31 Oct 2001 21:16:10 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id A1EEC4CE726; Wed, 31 Oct 2001 21:16:10 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa_test.c
Message-Id: <20011031201610.A1EEC4CE726@visp.engelschall.com>
Date: Wed, 31 Oct 2001 21:16:10 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Oct-2001 21:16:10
  Branch: HEAD                             Handle: 2001103120161000

  Modified files:
    ossp-pkg/sa             sa_test.c

  Log:
    remember what we want to test

  Summary:
    Revision    Changes     Path
    1.12        +18 -2      ossp-pkg/sa/sa_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa_test.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 sa_test.c
  --- ossp-pkg/sa/sa_test.c	2001/10/31 20:09:00	1.11
  +++ ossp-pkg/sa/sa_test.c	2001/10/31 20:16:10	1.12
  @@ -38,6 +38,7 @@
   #include "ts.h"
   #include "sa.h"
   
  +/* test: address import/export */
   TS_TEST(test_saa_impexp)
   {
       sa_addr_t *saa;
  @@ -86,6 +87,7 @@
                        rv, sa_error(rv), SA_OK, sa_error(SA_OK));
   }
   
  +/* test: address matching */
   TS_TEST(test_saa_match)
   {
       sa_addr_t *saa1;
  @@ -131,14 +133,28 @@
       sa_addr_destroy(saa2);
   }
   
  +/* test: client/server stream communication */
  +TS_TEST(test_sa_stream)
  +{
  +    /* FIXME */
  +}
  +
  +/* test: client/server datagram communication */
  +TS_TEST(test_sa_datagram)
  +{
  +    /* FIXME */
  +}
  +
   int main(int argc, char *argv[])
   {
       ts_suite_t *ts;
       int n;
   
       ts = ts_suite_new("OSSP SA (Socket Abstraction Library)");
  -    ts_suite_test(ts, test_saa_impexp, "socket address abstraction (import/export)");
  -    ts_suite_test(ts, test_saa_match,  "socket address abstraction (matching)");
  +    ts_suite_test(ts, test_saa_impexp,  "socket address abstraction import/export");
  +    ts_suite_test(ts, test_saa_match,   "socket address abstraction matching");
  +    ts_suite_test(ts, test_sa_stream,   "socket abstraction stream communication");
  +    ts_suite_test(ts, test_sa_datagram, "socket abstraction datagram communication");
       n = ts_suite_run(ts);
       ts_suite_free(ts);
       return n;

From ossp-cvs-owner@ossp.org  Wed Oct 31 21:27:28 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9VKRRU18434; Wed, 31 Oct 2001 21:27:27 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id D39254CE726; Wed, 31 Oct 2001 21:27:27 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.pod
Message-Id: <20011031202727.D39254CE726@visp.engelschall.com>
Date: Wed, 31 Oct 2001 21:27:27 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Oct-2001 21:27:27
  Branch: HEAD                             Handle: 2001103120272700

  Modified files:
    ossp-pkg/sa             sa.pod

  Log:
    fix result code list to reflect recend changes

  Summary:
    Revision    Changes     Path
    1.16        +11 -5      ossp-pkg/sa/sa.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.pod
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 sa.pod
  --- ossp-pkg/sa/sa.pod	2001/10/31 12:41:53	1.15
  +++ ossp-pkg/sa/sa.pod	2001/10/31 20:27:27	1.16
  @@ -184,11 +184,17 @@
   =item B<sa_rc_t> (Return Code Type)
   
   This is an exported enumerated integer type with the following possible
  -values: C<SA_OK> (everything ok, operation succeeded); C<SA_ERR_ARG>
  -(invalid argument(s) passed to function); C<SA_ERR_USE> (function used
  -in wrong context); C<SA_ERR_MEM> (out of memory); C<SA_ERR_EOF> (end of
  -file/socket in communication); C<SA_ERR_SYS> (operating system error;
  -errno contains details); C<SA_ERR_INT> (any other internal error).
  +values:
  +
  + SA_OK       Everything Ok
  + SA_ERR_ARG  Invalid Argument
  + SA_ERR_USE  Invalid Use Or Context
  + SA_ERR_MEM  Not Enough Memory
  + SA_ERR_MTC  Matching Failed
  + SA_ERR_EOF  End Of Communication
  + SA_ERR_TMT  Communication Timeout
  + SA_ERR_SYS  Operating System Error (see errno)
  + SA_ERR_INT  Internal Error
   
   =item B<sa_addr_t> (Socket Address Abstraction Type)
   

From ossp-cvs-owner@ossp.org  Wed Oct 31 21:42:43 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9VKggU20456; Wed, 31 Oct 2001 21:42:42 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 844154CE726; Wed, 31 Oct 2001 21:42:42 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c
Message-Id: <20011031204242.844154CE726@visp.engelschall.com>
Date: Wed, 31 Oct 2001 21:42:42 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Oct-2001 21:42:42
  Branch: HEAD                             Handle: 2001103120424200

  Modified files:
    ossp-pkg/sa             sa.c

  Log:
    Make sure we import only supported addresses on sa_addr_s2a().

  Summary:
    Revision    Changes     Path
    1.39        +9  -0      ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.38 -r1.39 sa.c
  --- ossp-pkg/sa/sa.c	2001/10/31 12:41:53	1.38
  +++ ossp-pkg/sa/sa.c	2001/10/31 20:42:42	1.39
  @@ -614,6 +614,15 @@
       if (saa == NULL || sabuf == NULL || salen == 0)
           return SA_ERR_ARG;
   
  +    /* make sure we import only supported addresses */
  +    if (!(   sabuf->sa_family == AF_LOCAL
  +          || sabuf->sa_family == AF_INET
  +#ifdef AF_INET6
  +          || sabuf->sa_family == AF_INET6
  +#endif
  +         ))
  +        return SA_ERR_USE;
  +
       /* create result address structure */
       if (saa->saBuf != NULL)
           free(saa->saBuf);

From ossp-cvs-owner@ossp.org  Wed Oct 31 21:51:02 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9VKp1U21479; Wed, 31 Oct 2001 21:51:02 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id DE9754CE737; Wed, 31 Oct 2001 21:51:01 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.pod
Message-Id: <20011031205101.DE9754CE737@visp.engelschall.com>
Date: Wed, 31 Oct 2001 21:51:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Oct-2001 21:51:01
  Branch: HEAD                             Handle: 2001103120510100

  Modified files:
    ossp-pkg/sa             sa.pod

  Log:
    a little bit of more documemtation

  Summary:
    Revision    Changes     Path
    1.17        +34 -13     ossp-pkg/sa/sa.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.pod
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 sa.pod
  --- ossp-pkg/sa/sa.pod	2001/10/31 20:27:27	1.16
  +++ ossp-pkg/sa/sa.pod	2001/10/31 20:51:01	1.17
  @@ -232,33 +232,50 @@
   
   Import an address by converting from an URI specification
   to the corresponding address abstraction. The supported URI
  -syntax is: "C<unix:>I<path>" for I<Unix Domain> addresses and
  -"C<inet://>I<addr>C<:>I<port>" for I<Internet Domain> addresses.
  +syntax is: C<unix:>I<path> for I<Unix Domain> addresses and
  +C<inet://>I<addr>C<:>I<port>[C<#>I<protocol>] for I<Internet Domain>
  +addresses.
  +
   I<path> can be an absolute or relative file path to an existing or
   not-existing file. I<addr> can be an IPv4 address in dotted decimal
  -notation (C<127.0.0.1>), an IPv6 address in colon-seperated (optionally
  -shortended) hexadecimal notation (C<::1>) or a to-be-resolved hostname
  -(C<localhost.example.com>). I<port> has to be a decimal port in the
  -range C<1>...C<65535>.
  +notation (C<127.0.0.1>), an IPv6 address in colon-separated (optionally
  +abbreviated) hexadecimal notation (C<::1>) or a to-be-resolved hostname
  +(C<localhost.example.com>). I<port> has to be either a decimal port in
  +the range C<1>...C<65535> or a port name. If I<port> is specified as a
  +name, it is resolved as a TCP port by default. To force resolving via a
  +particular protocol, I<protocol> can be specified as either C<tcp> or
  +C<udp>.
   
   =item sa_rc_t B<sa_addr_s2a>(sa_addr_t *I<saa>, const struct sockaddr *I<sabuf>, socklen_t I<salen>);
   
  -Import an address by converting from a tranditional C<struct sockaddr> object to the
  -corresponding address abstraction.
  +Import an address by converting from a tranditional C<struct sockaddr> object
  +to the corresponding address abstraction. The accepted addresses are: C<struct
  +sockaddr_un> (C<AF_LOCAL>), C<struct sockaddr_in> (C<AF_INET>) and C<struct
  +sockaddr_in6> (C<AF_INET6>).
   
   =item sa_rc_t B<sa_addr_a2u>(sa_addr_t *I<saa>, char **I<uri>);
   
  -Export an address by converting from the
  -address abstraction to the corresponding URI specification.
  +Export an address by converting from the address abstraction to the
  +corresponding URI specification. The result is a string of the form
  +C<unix:>I<path> for I<Unix Domain> addresses and (unresolved/numerical)
  +C<inet://>I<addr>C<:>I<port> for I<Internet Domain> addresses. The
  +caller has to free(3) the I<uri> later.
   
   =item sa_rc_t B<sa_addr_a2s>(sa_addr_t *I<saa>, struct sockaddr **I<sabuf>, socklen_t *I<salen>);
   
  -Export an address by converting from the
  -address abstraction to the corresponding traditional C<struct sockaddr> object.
  +Export an address by converting from the address abstraction to the
  +corresponding traditional C<struct sockaddr> object. The result
  +is one of the following underlying address structures: C<struct
  +sockaddr_un> (C<AF_LOCAL>), C<struct sockaddr_in> (C<AF_INET>) and
  +C<struct sockaddr_in6> (C<AF_INET6>). The caller has to free(3) the
  +I<sabuf> later.
   
   =item sa_rc_t B<sa_addr_match>(sa_addr_t *I<saa1>, sa_addr_t *I<saa2>, size_t I<prefixlen>);
   
  -Match two address abstractions 
  +Match two address abstractions by only taking the prefix part of length
  +I<prefixlen> into account. I<prefixlen> is number of path characters
  +for I<Unix Domain> addresses and number of bits for I<Internet Domain>
  +addresses.
   
   =back
               
  @@ -268,7 +285,11 @@
   
   =item sa_rc_t B<sa_create>(sa_t **I<sa>);
   
  +Create a socket abstraction object.
  +
   =item sa_rc_t B<sa_destroy>(sa_t *I<sa>);
  +
  +Destroy a socket abstraction object.
   
   =back
               

From ossp-cvs-owner@ossp.org  Wed Oct 31 22:26:12 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9VLQCU26216; Wed, 31 Oct 2001 22:26:12 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id E88494CE734; Wed, 31 Oct 2001 22:26:11 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ut_sa.c l2_ut_sa.h
Message-Id: <20011031212611.E88494CE734@visp.engelschall.com>
Date: Wed, 31 Oct 2001 22:26:11 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Oct-2001 22:26:11
  Branch: HEAD                             Handle: 2001103121261100

  Modified files:
    ossp-pkg/l2             l2_ut_sa.c l2_ut_sa.h

  Log:
    update to latest OSSP SA

  Summary:
    Revision    Changes     Path
    1.17        +75 -5      ossp-pkg/l2/l2_ut_sa.c
    1.12        +17 -9      ossp-pkg/l2/l2_ut_sa.h
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ut_sa.c
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 l2_ut_sa.c
  --- ossp-pkg/l2/l2_ut_sa.c	2001/10/26 10:59:47	1.16
  +++ ossp-pkg/l2/l2_ut_sa.c	2001/10/31 21:26:11	1.17
  @@ -69,6 +69,11 @@
   #define ssize_t long
   #endif
   
  +/* backward compatibility for O_NONBLOCK */
  +#if !defined(O_NONBLOCK) && defined(O_NDELAY)
  +#define O_NONBLOCK O_NDELAY
  +#endif
  +
   /* system call structure declaration macros */
   #define SA_SC_DECLARE_0(rc_t, fn) \
       struct { \
  @@ -492,7 +497,7 @@
           if (cpHost[0] == '[') {
               /* IPv6 address (see RFC2732) */
   #ifndef AF_INET6
  -            return SA_ERR_ARG;
  +            return SA_ERR_IMP;
   #else
               bIPv6 = TRUE;
               cpHost++;
  @@ -607,6 +612,15 @@
       if (saa == NULL || sabuf == NULL || salen == 0)
           return SA_ERR_ARG;
   
  +    /* make sure we import only supported addresses */
  +    if (!(   sabuf->sa_family == AF_LOCAL
  +          || sabuf->sa_family == AF_INET
  +#ifdef AF_INET6
  +          || sabuf->sa_family == AF_INET6
  +#endif
  +         ))
  +        return SA_ERR_USE;
  +
       /* create result address structure */
       if (saa->saBuf != NULL)
           free(saa->saBuf);
  @@ -1054,6 +1068,61 @@
       return SA_OK;
   }
   
  +/* configure socket option */
  +sa_rc_t sa_option(sa_t *sa, sa_option_t id, ...)
  +{
  +    sa_rc_t rv;
  +    va_list ap;
  +
  +    /* argument sanity check(s) */
  +    if (sa == NULL)
  +        return SA_ERR_ARG;
  +
  +    /* process option */
  +    rv = SA_OK;
  +    va_start(ap, id);
  +    switch (id) {
  +        case SA_OPTION_NAGLE: {
  +            /* enable/disable Nagle's Algorithm (see RFC898) */
  +#if defined(IPPROTO_TCP) && defined(TCP_NODELAY)
  +            int mode = ((int)va_arg(ap, int) ? 1 : 0);
  +            if (sa->fdSocket == -1) {
  +                rv = SA_ERR_USE;
  +                break;
  +            }
  +            if (setsockopt(sa->fdSocket, IPPROTO_TCP, TCP_NODELAY, 
  +                           (void *)&mode, sizeof(mode)) < 0)
  +                rv = SA_ERR_SYS;
  +#else
  +            rv = SA_ERR_IMP;
  +#endif
  +            break;
  +        }
  +        case SA_OPTION_NONBLOCK: {
  +            /* enable/disable non-blocking I/O mode */
  +            int flags;
  +            int mode = (int)va_arg(ap, int);
  +            if ((flags = fcntl(sa->fdSocket, F_GETFL, 0)) < 0) {
  +                rv = SA_ERR_SYS;
  +                break;
  +            }
  +            if (mode == 0)
  +                flags &= ~(O_NONBLOCK);
  +            else
  +                flags |= O_NONBLOCK;
  +            if (fcntl(sa->fdSocket, F_SETFL, flags) < 0)
  +                rv = SA_ERR_SYS;
  +            break;
  +        }
  +        default: {
  +            rv = SA_ERR_ARG;
  +        }
  +    }
  +    va_end(ap);
  +
  +    return rv;
  +}
  +
   /* override system call */
   sa_rc_t sa_syscall(sa_t *sa, sa_syscall_t id, void (*fptr)(), void *fctx)
   {
  @@ -1451,14 +1520,12 @@
       if (sa->fdSocket == -1)
           return SA_ERR_USE;
   
  -    /* trigger a write buffer flush */
  -    if (sa->nWriteLen > 0)
  -        sa_flush(sa);
  -
       /* perform read operation */
       rv = SA_OK;
       if (sa->nReadSize == 0) {
           /* user-space unbuffered I/O */
  +        if (sa->nWriteLen > 0)
  +            sa_flush(sa);
           res = sa_read_raw(sa, cpBuf, nBufReq);
           if (res == 0)
               rv = SA_ERR_EOF;
  @@ -1487,6 +1554,8 @@
                       res     += sa->nReadLen;
                       sa->nReadLen = 0;
                   }
  +                if (sa->nWriteLen > 0)
  +                    sa_flush(sa);
                   if (nBufReq >= sa->nReadSize) {
                       /* buffer is too small at all, so read directly */
                       n = sa_read_raw(sa, cpBuf, nBufReq);
  @@ -1916,6 +1985,7 @@
       else if (rv == SA_ERR_EOF) sz = "End Of Communication";
       else if (rv == SA_ERR_TMT) sz = "Communication Timeout";
       else if (rv == SA_ERR_SYS) sz = "Operating System Error";
  +    else if (rv == SA_ERR_IMP) sz = "Implementation Not Available";
       else if (rv == SA_ERR_INT) sz = "Internal Error";
       else                       sz = "Invalid Result Code";
       return sz;
  Index: ossp-pkg/l2/l2_ut_sa.h
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 l2_ut_sa.h
  --- ossp-pkg/l2/l2_ut_sa.h	2001/10/11 08:00:37	1.11
  +++ ossp-pkg/l2/l2_ut_sa.h	2001/10/31 21:26:11	1.12
  @@ -107,15 +107,16 @@
   
   /* return codes */
   typedef enum {
  -    SA_OK,      /* Everything Ok          */
  -    SA_ERR_ARG, /* Invalid Argument       */
  -    SA_ERR_USE, /* Invalid Use Or Context */
  -    SA_ERR_MEM, /* Not Enough Memory      */
  -    SA_ERR_MTC, /* Matching Failed        */
  -    SA_ERR_EOF, /* End Of Communication   */
  -    SA_ERR_TMT, /* Communication Timeout  */
  -    SA_ERR_SYS, /* Operating System Error */
  -    SA_ERR_INT  /* Internal Error         */
  +    SA_OK,      /* Everything Ok                */
  +    SA_ERR_ARG, /* Invalid Argument             */
  +    SA_ERR_USE, /* Invalid Use Or Context       */
  +    SA_ERR_MEM, /* Not Enough Memory            */
  +    SA_ERR_MTC, /* Matching Failed              */
  +    SA_ERR_EOF, /* End Of Communication         */
  +    SA_ERR_TMT, /* Communication Timeout        */
  +    SA_ERR_SYS, /* Operating System Error       */
  +    SA_ERR_IMP, /* Implementation Not Available */
  +    SA_ERR_INT  /* Internal Error               */
   } sa_rc_t;
   
   /* list of timeouts */
  @@ -133,6 +134,12 @@
       SA_BUFFER_WRITE
   } sa_buffer_t;
   
  +/* list of options */
  +typedef enum {
  +    SA_OPTION_NAGLE,
  +    SA_OPTION_NONBLOCK
  +} sa_option_t;
  +
   /* list of system calls */
   typedef enum {
       SA_SYSCALL_CONNECT,
  @@ -163,6 +170,7 @@
   sa_rc_t sa_type         (sa_t *sa, sa_type_t type);
   sa_rc_t sa_timeout      (sa_t *sa, sa_timeout_t id, long sec, long usec);
   sa_rc_t sa_buffer       (sa_t *sa, sa_buffer_t  id, size_t size);
  +sa_rc_t sa_option       (sa_t *sa, sa_option_t  id, ...);
   sa_rc_t sa_syscall      (sa_t *sa, sa_syscall_t id, void (*fptr)(), void *fctx);
   
   /* socket connection operations */

From ossp-cvs-owner@ossp.org  Wed Oct 31 22:27:58 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id f9VLRwU26782; Wed, 31 Oct 2001 22:27:58 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 16FA84CE734; Wed, 31 Oct 2001 22:27:58 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_epreuve.c
Message-Id: <20011031212758.16FA84CE734@visp.engelschall.com>
Date: Wed, 31 Oct 2001 22:27:58 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Oct-2001 22:27:58
  Branch: HEAD                             Handle: 1970010101000000

  Removed files:
    ossp-pkg/l2             l2_epreuve.c

  Log:
    remove code obsoleted by l2_test.c

  Summary:
    Revision    Changes     Path
    NONE        +0  -261    ossp-pkg/l2/l2_epreuve.c
  ____________________________________________________________________________

  

From ossp-cvs-owner@ossp.org  Fri Nov  2 19:42:53 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fA2Igq127631; Fri, 2 Nov 2001 19:42:52 +0100 (CET)
Date: Fri, 2 Nov 2001 19:42:52 +0100 (CET)
Message-Id: <200111021842.fA2Igq127631@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_socket.c l2_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   02-Nov-2001 19:42:52
  Branch: HEAD                             Handle: 2001110218425100

  Modified files:
    ossp-pkg/l2             l2_ch_socket.c l2_test.c

  Log:
    Partially rewrote the socket channel to use the OSSP socket abstraction
    library. Channel still needs UDP configuration and writing logic.

  Summary:
    Revision    Changes     Path
    1.31        +58 -233    ossp-pkg/l2/l2_ch_socket.c
    1.35        +4  -4      ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_socket.c
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 l2_ch_socket.c
  --- ossp-pkg/l2/l2_ch_socket.c	2001/10/04 13:35:47	1.30
  +++ ossp-pkg/l2/l2_ch_socket.c	2001/11/02 18:42:51	1.31
  @@ -38,57 +38,16 @@
   #include "l2.h"
   #include "l2_p.h"
   
  -#if defined(HAVE_INET_PTON)
  -#define l2_inet_pton inet_pton
  -#elif defined(HAVE_INET_ATON)
  -
  -/******************************************************************
  -IPv4 source used from Unix Network Programming by Richard STEVENS
  - ******************************************************************/
  -static int l2_inet_pton(int iFamily, const char *szAddress, void *pvMemref)
  -{
  -    int             i            = 0;
  -    struct in_addr  IP4Addr;
  -    struct in6_addr IP6Addr;
  -    const char      *szIndex     = NULL;    /* To index IPv6 validity */
  -    char            *szNextfield = "";      /* For IPv6 address trans */
  -
  -    assert(pvMemref != NULL);
  -    if (iFamily == AF_INET) {
  -        if (inet_aton(szAddress, &IP4Addr)) {
  -            memcpy(pvMemref, &IP4Addr, sizeof(struct in_addr));
  -            return 1; /* Success */
  -        }
  -        return 0;
  -    }
  -    else if (iFamily == AF_INET6) { /* Translate IPv6 addresses               */
  -        szIndex = szAddress;        /* Initialize, verify in loop             */
  -        for (i = 0; (i < 8) && szNextfield; i++) { /* Iterate through fields  */
  -            IP6Addr.__u6_addr.__u6_addr16[i] =\
  -                ntohs((u_int16_t)strtol(szIndex, &szNextfield, 16));
  -            szIndex = szNextfield + 1;
  -        }
  +#define  L2_SOCKET_SABUFREAD  4096
  +#define  L2_SOCKET_SABUFWRITE 4096
   
  -        if ((i != 8) || (*szNextfield))
  -            return 0;
  -        else { /* Success */
  -            memcpy(pvMemref, &IP6Addr, sizeof(struct in6_addr));
  -            return 1;
  -        }
  -    }
  -    else {    /* User converting from an address family that we don't support */
  -        errno = EAFNOSUPPORT;
  -        return -1;
  -    }
  -}
  -#else
  -#error "neither inet_pton nor inet_aton available"
  -#endif
  -
   /* declare private channel configuration */
   typedef struct {
  +    sa_addr_t *saaServer;
  +    sa_t *saServer;
  +    long lTimeout; 
  +
       char *szHost;            /* IP Address or name of host to connect to    */
  -    int  iFamily;            /* IP version to use, AF_INET4 or AF_INET6     */
       int  iProto;             /* Protocol to use, IPPROTO_TCP or IPPROTO_UDP */
       int  iPort;              /* TCP Port to connect to                      */
       int  iSocket;            /* Socket descriptor used during writing       */
  @@ -104,8 +63,11 @@
           return L2_ERR_MEM;
   
       /* initialize configuration with reasonable defaults */
  +    cfg->saaServer = NULL;
  +    cfg->saServer  = NULL;
  +    cfg->lTimeout  = 30;
  +
       cfg->szHost   = NULL;
  -    cfg->iFamily   = -1;
       cfg->iProto    = -1;
       cfg->iPort     = 0;
       cfg->iSocket   = -1;
  @@ -121,28 +83,18 @@
   {
       l2_ch_socket_t *cfg = (l2_ch_socket_t *)ctx->vp;
       char *szProtocol = NULL;
  -    char *szFamily = NULL;
       l2_param_t pa[5];
       l2_result_t rv;
   
       /* feed and call generic parameter parsing engine */
  -    L2_PARAM_SET(pa[0], ipversion, STRING,  szFamily);
  -    L2_PARAM_SET(pa[1], protocol,  STRING,  szProtocol);
  +    L2_PARAM_SET(pa[0], protocol,  STRING,  &szProtocol);
  +    L2_PARAM_SET(pa[1], timeout,   INT,     &cfg->lTimeout);
       L2_PARAM_SET(pa[2], host,      CHARPTR, &cfg->szHost);
       L2_PARAM_SET(pa[3], port,      INT,     &cfg->iPort);
       L2_PARAM_END(pa[4]);
       rv = l2_util_setparams(pa, fmt, ap);
   
       /* translate incoming configuration parameters */
  -    if (szFamily != NULL) {
  -        if (strcmp(szFamily, "AF_INET6") == 0)
  -            cfg->iFamily = AF_INET6;
  -        else if (strcmp(szFamily, "AF_INET") == 0)
  -            cfg->iFamily = AF_INET;
  -        else
  -            return L2_ERR_ARG;
  -    }
  -
       if (szProtocol != NULL) {
           if (strcmp(szProtocol, "IPPROTO_UDP") == 0)
               cfg->iProto = IPPROTO_UDP;
  @@ -152,7 +104,6 @@
               return L2_ERR_ARG;
       }
   
  -    free(szFamily);
       free(szProtocol);
       return rv;
   }
  @@ -160,194 +111,63 @@
   /* open channel */
   static l2_result_t hook_open(l2_context_t *ctx, l2_channel_t *ch)
   {
  -    l2_ch_socket_t      *cfg = (l2_ch_socket_t *)ctx->vp;
  -    struct hostent      *pHostentry;
  -    struct sockaddr_in  IP4Localsock, IP4Sockaddr;
  -    struct sockaddr_in6 IP6Localsock, IP6Sockaddr;
  +    sa_rc_t rc;
  +    l2_ch_socket_t *cfg = (l2_ch_socket_t *)ctx->vp;
   
  -    /* make sure a target is configured */
  +    /* make sure a path was set */
       if (cfg->szHost == NULL)
           return L2_ERR_USE;
   
  -    /* open channel socket */
  -    if (cfg->iFamily == AF_INET) { /* IPv4 */
  -        /* initialize address structures */
  -        memset(&IP4Localsock, 0, sizeof(IP4Localsock));
  -        memset(&IP4Sockaddr,  0, sizeof(IP4Sockaddr));
  -
  -        /* resolve host numerically */
  -        if (l2_inet_pton(AF_INET, cfg->szHost, &IP4Sockaddr.sin_addr.s_addr) == 1) {
  -            IP4Sockaddr.sin_family = AF_INET;
  -            IP4Sockaddr.sin_port   = htons(cfg->iPort);
  -        }
  -        /* resolve host nominally */
  -        else if ((pHostentry = gethostbyname(cfg->szHost)) != NULL) {
  -            if (pHostentry->h_addrtype == AF_INET) {
  -                IP4Sockaddr.sin_family = AF_INET;
  -                IP4Sockaddr.sin_port   = htons(cfg->iPort);
  -                memcpy(&IP4Sockaddr.sin_addr.s_addr, pHostentry->h_addr_list[0],
  -                       sizeof(IP4Sockaddr.sin_addr.s_addr));
  -            }
  -            else
  -                return L2_ERR_USE; /* what?? we specify IPv4 when it is not? */
  -        }
  -        else /* host string was not parsable for some reason */
  -            return L2_ERR_SYS;
  +    /* create socket address */
  +    if ((rc = sa_addr_create(&cfg->saaServer)) != SA_OK)
  +        return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
  +    if ((rc = sa_addr_u2a(cfg->saaServer, "inet://%s:%d",
  +                          cfg->szHost, cfg->iPort)) != SA_OK)
  +        return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
  +
  +    /* create socket */
  +    if ((rc = sa_create(&cfg->saServer)) != SA_OK)
  +        return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
  +
  +    /* configure socket parameters */
  +    sa_timeout(cfg->saServer, SA_TIMEOUT_ALL,  cfg->lTimeout, 0);
  +    sa_buffer (cfg->saServer, SA_BUFFER_READ,  L2_SOCKET_SABUFREAD);
  +    sa_buffer (cfg->saServer, SA_BUFFER_WRITE, L2_SOCKET_SABUFWRITE);
   
  -        if (cfg->iProto == IPPROTO_TCP) {        /* with TCP we must connect */
  -            if ((cfg->iSocket = socket(PF_INET, SOCK_STREAM, cfg->iProto)) == -1)
  -                return L2_ERR_SYS;
  -
  -            /* if we have a socket, then bind ourselves to any port number   */
  -            IP4Localsock.sin_family      = AF_INET;
  -            IP4Localsock.sin_addr.s_addr = htonl(INADDR_ANY);
  -            IP4Localsock.sin_port        = htons(0);
  -
  -            if (bind(cfg->iSocket, (struct sockaddr *)&IP4Localsock,\
  -                sizeof(IP4Localsock))) {
  -                return L2_ERR_SYS;
  -            }
  -
  -            if (connect(cfg->iSocket, (struct sockaddr *)&IP4Sockaddr,
  -                sizeof(IP4Sockaddr))) {
  -                close(cfg->iSocket);
  -                return L2_ERR_SYS;
  -            }
  -        }
  -        else if (cfg->iProto == IPPROTO_UDP) { /* with UDP we do not connect  */
  -            if ((cfg->iSocket = socket(PF_INET, SOCK_DGRAM, cfg->iProto)) == -1)
  -                return L2_ERR_SYS;
  -
  -            /* if we have a socket, then bind ourselves to any port number   */
  -            IP4Localsock.sin_family      = AF_INET;
  -            IP4Localsock.sin_addr.s_addr = htonl(INADDR_ANY);
  -            IP4Localsock.sin_port        = htons(0);
  -
  -            if (bind(cfg->iSocket, (struct sockaddr *)&IP4Localsock,\
  -                sizeof(IP4Localsock))) {
  -                return L2_ERR_SYS;
  -            }
  -        }
  -
  -        return L2_OK;
  -    }
  -    else if (cfg->iFamily == AF_INET6) { /* IPv6 */
  -        /* initialize address structures */
  -        memset(&IP6Localsock, 0, sizeof(IP6Localsock));
  -        memset(&IP6Sockaddr,  0, sizeof(IP6Sockaddr));
  -
  -        /* resolve host numerically */
  -        if (l2_inet_pton(AF_INET6, cfg->szHost, &IP6Sockaddr.sin6_addr.s6_addr) == 1) {
  -            IP6Sockaddr.sin6_family = AF_INET6;
  -            IP6Sockaddr.sin6_port   = htons(cfg->iPort);
  -        }
  -        /* resolve host nominally */
  -        else if ((pHostentry = gethostbyname(cfg->szHost)) != NULL) {
  -            if (pHostentry->h_addrtype == AF_INET6) {
  -                IP6Sockaddr.sin6_family = AF_INET6;
  -                IP6Sockaddr.sin6_port   = htons(cfg->iPort);
  -                memcpy(&IP6Sockaddr.sin6_addr.s6_addr, pHostentry->h_addr_list[0],\
  -                    sizeof(IP6Sockaddr.sin6_addr.s6_addr));
  -            }
  -            else
  -                return L2_ERR_USE; /* what?? we specify IPv6 when it is not?  */
  -        }
  -        else                  /* host string was not parsable for some reason */
  -            return L2_ERR_SYS;
  -
  -        if (cfg->iProto == IPPROTO_TCP) {         /* with TCP we must connect */
  -            if ((cfg->iSocket = socket(PF_INET6, SOCK_STREAM, cfg->iProto)) == -1)
  -                return L2_ERR_SYS;
  -
  -            /* if we have a socket, then bind ourselves to any port number    */
  -            IP6Localsock.sin6_family = AF_INET6;
  -            IP6Localsock.sin6_addr   = in6addr_any;
  -            IP6Localsock.sin6_port   = htons(0);
  -
  -            if (bind(cfg->iSocket, (struct sockaddr *)&IP6Localsock,\
  -                sizeof(IP6Localsock))) {
  -                return L2_ERR_SYS;
  -            }
  -
  -            if (connect(cfg->iSocket, (struct sockaddr *)&IP6Sockaddr,\
  -                sizeof(IP6Sockaddr))) {
  -                close(cfg->iSocket);
  -                return L2_ERR_SYS;
  -            }
  -        }
  -        else if (cfg->iProto == IPPROTO_UDP) {  /* with UDP we do not connect */
  -            if ((cfg->iSocket = socket(PF_INET, SOCK_DGRAM, cfg->iProto)) == -1)
  -                return L2_ERR_SYS;
  -
  -            /* if we have a socket, then bind ourselves to any port number    */
  -            IP6Localsock.sin6_family = AF_INET6;
  -            IP6Localsock.sin6_addr   = in6addr_any;
  -            IP6Localsock.sin6_port   = htons(0);
  -
  -            if (bind(cfg->iSocket, (struct sockaddr *)&IP6Localsock,\
  -                sizeof(IP6Localsock))) {
  -                return L2_ERR_SYS;
  -            }
  -        }
  -
  -        return L2_OK;
  -    }
  -
  -    return L2_ERR_USE;
  +    return L2_OK;
   }
   
   /* write to channel */
   static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch,
                                 l2_level_t level, const char *buf, size_t buf_size)
   {
  -    struct sockaddr_in IP4Sockaddr, IP6Sockaddr;
  -    l2_ch_socket_t    *cfg = (l2_ch_socket_t *)ctx->vp;
  -    size_t             sizeWrite;
  -    size_t             sizeRemain;
  +    l2_ch_socket_t *cfg = (l2_ch_socket_t *)ctx->vp;
  +    size_t          sizeWrite;
  +    size_t          sizeRemain;
  +    sa_t           *sa;
  +    sa_rc_t         rc;
  +    sa_addr_t      *saa;
   
       /* parameter checks */
  -    if (cfg->iSocket == -1)
  -        return L2_ERR_ARG;
  +    assert(cfg->saServer != NULL);
   
  +    /* establish connection to server */
  +    saa = cfg->saaServer;
  +    sa  = cfg->saServer;
  +    if ((rc = sa_connect(sa, saa)) != SA_OK) {
  +        sa_shutdown(sa, "rw"); /* shutdown connection to server */
  +        return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
  +    }
  +
       if (cfg->iProto == IPPROTO_TCP) {
           /* write message to channel socket, but check to make   */
           /* sure that the whole message was successfully written */
           sizeWrite  = 0;
           sizeRemain = buf_size;
           while(sizeRemain) {
  -            sizeWrite  = send(cfg->iSocket, buf + sizeWrite, sizeRemain, 0);
  +            if ((rc = sa_write(sa, buf, sizeRemain, &sizeWrite)) != SA_OK)
  +                return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
               sizeRemain = sizeRemain - sizeWrite; /* how much is left? */
  -
  -            if (sizeWrite == -1)
  -                return L2_ERR_SYS;
  -        }
  -    }
  -    else if (cfg->iProto == IPPROTO_UDP) {
  -        /* write message to the host target, but check to make  */
  -        /* sure that the whole message was successfully written */
  -        sizeWrite  = 0;
  -        sizeRemain = buf_size;
  -        while(sizeRemain) {
  -            if (cfg->iFamily == AF_INET) { /* IPv4 */
  -/* TODO !!! */  sizeWrite  = sendto(cfg->iSocket, buf + sizeWrite, sizeRemain, 0,\
  -/* Fill in  */      (struct sockaddr *)&IP4Sockaddr, sizeof(IP4Sockaddr));
  -/* the host */
  -/* address  */  sizeRemain = sizeRemain - sizeWrite; /* how much is left? */
  -/* structs  */
  -                if (sizeWrite == -1)
  -                    return L2_ERR_SYS;
  -            }
  -            else if (cfg->iFamily == AF_INET6) { /* IPv6 */
  - /* TODO !!! */     sizeWrite  = sendto(cfg->iSocket, buf + sizeWrite, sizeRemain, 0,\
  - /* Fill in  */         (struct sockaddr *)&IP6Sockaddr, sizeof(IP6Sockaddr));
  - /* the host */
  - /* address  */     sizeRemain = sizeRemain - sizeWrite; /* how much is left? */
  - /* structs  */
  -                if (sizeWrite == -1)
  -                    return L2_ERR_USE;
  -            }
  -            else /* Neither IPv4 nor IPv6 */
  -                return L2_ERR_USE;
           }
       }
   
  @@ -360,12 +180,17 @@
       l2_ch_socket_t *cfg = (l2_ch_socket_t *)ctx->vp;
   
       /* parameter checks */
  -    if (cfg->iSocket == -1)
  -        return L2_ERR_USE;
  +/* FIXME!    assert(cfg->saServer->fdSocket != -1); */
   
  -    /* close channel socket */
  -    if ((shutdown(cfg->iSocket, SHUT_RDWR)) || (close(cfg->iSocket)))
  -        return L2_ERR_SYS;
  +    /* destroy remote address */
  +    if (cfg->saServer != NULL) {
  +        sa_destroy(cfg->saServer);
  +        cfg->saServer = NULL;
  +    }
  +    if (cfg->saaServer != NULL) {
  +        sa_addr_destroy(cfg->saaServer);
  +        cfg->saaServer = NULL;
  +    }
   
       return L2_OK;
   }
  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.34 -r1.35 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/10/22 16:32:29	1.34
  +++ ossp-pkg/l2/l2_test.c	2001/11/02 18:42:51	1.35
  @@ -183,12 +183,12 @@
       if ((chSock = l2_channel_create(&l2_handler_socket)) == NULL)   /* Socket */
           die("failed to create socket channel");
   
  -    if (l2_channel_configure(chSock, "protocol,ipversion,host,port",\
  -        "IPPROTO_TCP", "AF_INET", "localhost", 2002) != L2_OK)
  +    if (l2_channel_configure(chSock, "protocol,host,port",\
  +        "IPPROTO_TCP", "localhost", 2002) != L2_OK)
           die("failed to configure socket tcp/ipv4 channel");
   #if 0
  -    if (l2_channel_configure(chSock, "protocol,ipversion,host,port",\
  -          "IPPROTO_TCP", "AF_INET6", "0:0:0:0:0:0:0:1", 2002) != L2_OK)
  +    if (l2_channel_configure(chSock, "protocol,host,port",\
  +          "IPPROTO_TCP", "0:0:0:0:0:0:0:1", 2002) != L2_OK)
             die("failed to configure socket tcp/ipv6 channel");
   #endif
       if (l2_channel_open(chSock) != L2_OK)

From ossp-cvs-owner@ossp.org  Sat Nov  3 21:49:28 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fA3KnQB32978; Sat, 3 Nov 2001 21:49:26 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 6EC4D4CE749; Sat,  3 Nov 2001 21:49:26 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_socket.c l2_test.c
Message-Id: <20011103204926.6EC4D4CE749@visp.engelschall.com>
Date: Sat,  3 Nov 2001 21:49:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   03-Nov-2001 21:49:26
  Branch: HEAD                             Handle: 2001110320492500

  Modified files:
    ossp-pkg/l2             l2_ch_socket.c l2_test.c

  Log:
    - change protocol parameter from "IPPROTO_XXX" to just "xxx"
    - add support for numerical and textual ports
    - add UDP support
    - remove unused iSocket variable
    - fix massive memory leaks on channel destruction
    - generally simplify implementation
    - cleanup coding style

  Summary:
    Revision    Changes     Path
    1.32        +71 -78     ossp-pkg/l2/l2_ch_socket.c
    1.36        +4  -4      ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_socket.c
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 l2_ch_socket.c
  --- ossp-pkg/l2/l2_ch_socket.c	2001/11/02 18:42:51	1.31
  +++ ossp-pkg/l2/l2_ch_socket.c	2001/11/03 20:49:25	1.32
  @@ -38,19 +38,14 @@
   #include "l2.h"
   #include "l2_p.h"
   
  -#define  L2_SOCKET_SABUFREAD  4096
  -#define  L2_SOCKET_SABUFWRITE 4096
  -
   /* declare private channel configuration */
   typedef struct {
  -    sa_addr_t *saaServer;
  -    sa_t *saServer;
  -    long lTimeout; 
  -
  -    char *szHost;            /* IP Address or name of host to connect to    */
  -    int  iProto;             /* Protocol to use, IPPROTO_TCP or IPPROTO_UDP */
  -    int  iPort;              /* TCP Port to connect to                      */
  -    int  iSocket;            /* Socket descriptor used during writing       */
  +    char      *szProto;
  +    char      *szHost;
  +    char      *szPort;
  +    long       nTimeout; 
  +    sa_addr_t *saaRemote;
  +    sa_t      *saRemote;
   } l2_ch_socket_t;
   
   /* create channel */
  @@ -63,14 +58,12 @@
           return L2_ERR_MEM;
   
       /* initialize configuration with reasonable defaults */
  -    cfg->saaServer = NULL;
  -    cfg->saServer  = NULL;
  -    cfg->lTimeout  = 30;
  -
  -    cfg->szHost   = NULL;
  -    cfg->iProto    = -1;
  -    cfg->iPort     = 0;
  -    cfg->iSocket   = -1;
  +    cfg->szProto   = strdup("tcp");
  +    cfg->szHost    = NULL;
  +    cfg->szPort    = NULL;
  +    cfg->nTimeout  = 30;
  +    cfg->saaRemote = NULL;
  +    cfg->saRemote  = NULL;
   
       /* link private channel configuration into channel context */
       ctx->vp = cfg;
  @@ -82,57 +75,53 @@
   static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
       l2_ch_socket_t *cfg = (l2_ch_socket_t *)ctx->vp;
  -    char *szProtocol = NULL;
       l2_param_t pa[5];
       l2_result_t rv;
   
       /* feed and call generic parameter parsing engine */
  -    L2_PARAM_SET(pa[0], protocol,  STRING,  &szProtocol);
  -    L2_PARAM_SET(pa[1], timeout,   INT,     &cfg->lTimeout);
  -    L2_PARAM_SET(pa[2], host,      CHARPTR, &cfg->szHost);
  -    L2_PARAM_SET(pa[3], port,      INT,     &cfg->iPort);
  +    L2_PARAM_SET(pa[0], proto,     STRING,  &cfg->szProto);
  +    L2_PARAM_SET(pa[1], host,      STRING,  &cfg->szHost);
  +    L2_PARAM_SET(pa[2], port,      STRING,  &cfg->szPort);
  +    L2_PARAM_SET(pa[3], timeout,   INT,     &cfg->nTimeout);
       L2_PARAM_END(pa[4]);
       rv = l2_util_setparams(pa, fmt, ap);
   
  -    /* translate incoming configuration parameters */
  -    if (szProtocol != NULL) {
  -        if (strcmp(szProtocol, "IPPROTO_UDP") == 0)
  -            cfg->iProto = IPPROTO_UDP;
  -        else if (strcmp(szProtocol, "IPPROTO_TCP") == 0)
  -            cfg->iProto = IPPROTO_TCP;
  -        else
  -            return L2_ERR_ARG;
  -    }
  +    /* sanity check configuration parameters */
  +    if (   cfg->szProto != NULL
  +        && !(   strcmp(cfg->szProto, "udp") == 0
  +             || strcmp(cfg->szProto, "tcp") == 0))
  +        return L2_ERR_ARG;
   
  -    free(szProtocol);
       return rv;
   }
   
   /* open channel */
   static l2_result_t hook_open(l2_context_t *ctx, l2_channel_t *ch)
   {
  -    sa_rc_t rc;
       l2_ch_socket_t *cfg = (l2_ch_socket_t *)ctx->vp;
  +    sa_rc_t rc;
   
       /* make sure a path was set */
  -    if (cfg->szHost == NULL)
  +    if (cfg->szHost == NULL || cfg->szPort == NULL)
           return L2_ERR_USE;
   
       /* create socket address */
  -    if ((rc = sa_addr_create(&cfg->saaServer)) != SA_OK)
  +    if ((rc = sa_addr_create(&cfg->saaRemote)) != SA_OK)
           return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
  -    if ((rc = sa_addr_u2a(cfg->saaServer, "inet://%s:%d",
  -                          cfg->szHost, cfg->iPort)) != SA_OK)
  +    if ((rc = sa_addr_u2a(cfg->saaRemote, "inet://%s:%s",
  +                          cfg->szHost, cfg->szPort)) != SA_OK)
           return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
   
       /* create socket */
  -    if ((rc = sa_create(&cfg->saServer)) != SA_OK)
  +    if ((rc = sa_create(&cfg->saRemote)) != SA_OK)
           return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
   
       /* configure socket parameters */
  -    sa_timeout(cfg->saServer, SA_TIMEOUT_ALL,  cfg->lTimeout, 0);
  -    sa_buffer (cfg->saServer, SA_BUFFER_READ,  L2_SOCKET_SABUFREAD);
  -    sa_buffer (cfg->saServer, SA_BUFFER_WRITE, L2_SOCKET_SABUFWRITE);
  +    sa_timeout(cfg->saRemote, SA_TIMEOUT_ALL, cfg->nTimeout, 0);
  +    if (strcmp(cfg->szProto, "tcp") == 0) {
  +        sa_buffer(cfg->saRemote, SA_BUFFER_READ,  4096);
  +        sa_buffer(cfg->saRemote, SA_BUFFER_WRITE, 4096);
  +    }
   
       return L2_OK;
   }
  @@ -142,35 +131,36 @@
                                 l2_level_t level, const char *buf, size_t buf_size)
   {
       l2_ch_socket_t *cfg = (l2_ch_socket_t *)ctx->vp;
  -    size_t          sizeWrite;
  -    size_t          sizeRemain;
  -    sa_t           *sa;
  -    sa_rc_t         rc;
  -    sa_addr_t      *saa;
  -
  -    /* parameter checks */
  -    assert(cfg->saServer != NULL);
  -
  -    /* establish connection to server */
  -    saa = cfg->saaServer;
  -    sa  = cfg->saServer;
  -    if ((rc = sa_connect(sa, saa)) != SA_OK) {
  -        sa_shutdown(sa, "rw"); /* shutdown connection to server */
  -        return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
  +    size_t sizeWrite;
  +    size_t sizeRemain;
  +    sa_rc_t rc;
  +
  +    /* establish connection to server (TCP only) */
  +    if (strcmp(cfg->szProto, "tcp") == 0) {
  +        if ((rc = sa_connect(cfg->saRemote, cfg->saaRemote)) != SA_OK)
  +            return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
       }
   
  -    if (cfg->iProto == IPPROTO_TCP) {
  -        /* write message to channel socket, but check to make   */
  -        /* sure that the whole message was successfully written */
  -        sizeWrite  = 0;
  -        sizeRemain = buf_size;
  -        while(sizeRemain) {
  -            if ((rc = sa_write(sa, buf, sizeRemain, &sizeWrite)) != SA_OK)
  -                return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
  -            sizeRemain = sizeRemain - sizeWrite; /* how much is left? */
  -        }
  +    /* write message to channel socket, but check to make  
  +       sure that the whole message was successfully written */
  +    sizeWrite  = 0;
  +    sizeRemain = buf_size;
  +    while (sizeRemain > 0) {
  +        if (strcmp(cfg->szProto, "tcp") == 0)
  +            rc = sa_write(cfg->saRemote, buf, sizeRemain, &sizeWrite);
  +        else
  +            rc = sa_send(cfg->saRemote, buf, sizeRemain, &sizeWrite, cfg->saaRemote);
  +        if (rc != SA_OK)
  +            return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
  +        sizeRemain = sizeRemain - sizeWrite; /* how much is left? */
       }
   
  +    /* shutdown connection to server (TCP only) */
  +    if (strcmp(cfg->szProto, "tcp") == 0) {
  +        if ((rc = sa_shutdown(cfg->saRemote, "rw")) != SA_OK)
  +            return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
  +    }
  +
       return L2_OK;
   }
   
  @@ -179,17 +169,14 @@
   {
       l2_ch_socket_t *cfg = (l2_ch_socket_t *)ctx->vp;
   
  -    /* parameter checks */
  -/* FIXME!    assert(cfg->saServer->fdSocket != -1); */
  -
       /* destroy remote address */
  -    if (cfg->saServer != NULL) {
  -        sa_destroy(cfg->saServer);
  -        cfg->saServer = NULL;
  -    }
  -    if (cfg->saaServer != NULL) {
  -        sa_addr_destroy(cfg->saaServer);
  -        cfg->saaServer = NULL;
  +    if (cfg->saRemote != NULL) {
  +        sa_destroy(cfg->saRemote);
  +        cfg->saRemote = NULL;
  +    }
  +    if (cfg->saaRemote != NULL) {
  +        sa_addr_destroy(cfg->saaRemote);
  +        cfg->saaRemote = NULL;
       }
   
       return L2_OK;
  @@ -201,6 +188,12 @@
       l2_ch_socket_t *cfg = (l2_ch_socket_t *)ctx->vp;
   
       /* destroy channel configuration */
  +    if (cfg->szProto != NULL)
  +        free(cfg->szProto);
  +    if (cfg->szHost != NULL)
  +        free(cfg->szHost);
  +    if (cfg->szPort != NULL)
  +        free(cfg->szPort);
       free(cfg);
   
       return L2_OK;
  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.35 -r1.36 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/11/02 18:42:51	1.35
  +++ ossp-pkg/l2/l2_test.c	2001/11/03 20:49:25	1.36
  @@ -183,12 +183,12 @@
       if ((chSock = l2_channel_create(&l2_handler_socket)) == NULL)   /* Socket */
           die("failed to create socket channel");
   
  -    if (l2_channel_configure(chSock, "protocol,host,port",\
  -        "IPPROTO_TCP", "localhost", 2002) != L2_OK)
  +    if (l2_channel_configure(chSock, "proto,host,port",\
  +        "tcp", "localhost", 2002) != L2_OK)
           die("failed to configure socket tcp/ipv4 channel");
   #if 0
  -    if (l2_channel_configure(chSock, "protocol,host,port",\
  -          "IPPROTO_TCP", "0:0:0:0:0:0:0:1", 2002) != L2_OK)
  +    if (l2_channel_configure(chSock, "proto,host,port",\
  +          "tcp", "0:0:0:0:0:0:0:1", 2002) != L2_OK)
             die("failed to configure socket tcp/ipv6 channel");
   #endif
       if (l2_channel_open(chSock) != L2_OK)

From ossp-cvs-owner@ossp.org  Sat Nov  3 23:51:38 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fA3MpbB48632; Sat, 3 Nov 2001 23:51:37 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 92B3D4CE730; Sat,  3 Nov 2001 23:51:37 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.h.in l2_ch_buffer.c l2_ch_filter.c l2_ch_pr...
Message-Id: <20011103225137.92B3D4CE730@visp.engelschall.com>
Date: Sat,  3 Nov 2001 23:51:37 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   03-Nov-2001 23:51:37
  Branch: HEAD                             Handle: 2001110322513600

  Modified files:
    ossp-pkg/l2             l2.h.in l2_ch_buffer.c l2_ch_filter.c
                            l2_ch_prefix.c l2_channel.c l2_p.h l2_stream.c
                            l2_test.c

  Log:
    Channel-Only Revamping Step 1:
    allow multiple downstream channels in order to
    approach the later tree-like channel-only structure.

  Summary:
    Revision    Changes     Path
    1.14        +7  -4      ossp-pkg/l2/l2.h.in
    1.31        +32 -43     ossp-pkg/l2/l2_ch_buffer.c
    1.11        +2  -15     ossp-pkg/l2/l2_ch_filter.c
    1.16        +7  -15     ossp-pkg/l2/l2_ch_prefix.c
    1.21        +171 -86    ossp-pkg/l2/l2_channel.c
    1.25        +5  -1      ossp-pkg/l2/l2_p.h
    1.21        +7  -2      ossp-pkg/l2/l2_stream.c
    1.37        +12 -16     ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2.h.in
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 l2.h.in
  --- ossp-pkg/l2/l2.h.in	2001/10/09 15:34:55	1.13
  +++ ossp-pkg/l2/l2.h.in	2001/11/03 22:51:36	1.14
  @@ -99,14 +99,16 @@
   
   /* list of return values */
   typedef enum {
  -    L2_OK,
  +    L2_OK,         /* everything ok */
  +    L2_OK_PASS,    /* everything ok - pass downstream */
       L2_ERR_ARG,    /* invalid argument */
       L2_ERR_USE,    /* invalid usage */
       L2_ERR_MEM,    /* no more memory available */
       L2_ERR_SYS,    /* system error (see errno) */
       L2_ERR_IO,     /* input/output error */
       L2_ERR_FMT,    /* message formating error */
  -    L2_ERR_INT     /* internal error */
  +    L2_ERR_INT,    /* internal error */
  +    L2_ERR_CH      /* no (more) channel found */
   } l2_result_t;
   
   /* context union for storing data */
  @@ -199,8 +201,9 @@
   l2_result_t   l2_channel_close      (l2_channel_t *ch);
   l2_result_t   l2_channel_destroy    (l2_channel_t *ch);
   l2_result_t   l2_channel_stack      (l2_channel_t *ch, l2_channel_t *chTop);
  -l2_channel_t *l2_channel_downstream (l2_channel_t *ch);
  -l2_chtype_t   l2_channel_type       (l2_channel_t *ch);
  +l2_result_t   l2_channel_upstream   (l2_channel_t *ch, l2_channel_t **chU);
  +l2_result_t   l2_channel_downstream (l2_channel_t *ch, l2_channel_t **chD);
  +l2_result_t   l2_channel_type       (l2_channel_t *ch, l2_chtype_t *type);
   l2_result_t   l2_channel_errorinfo  (l2_channel_t *ch, l2_result_t rv, const char *fmt, ...);
   char         *l2_channel_strerror   (l2_channel_t *ch, l2_result_t rv);
   
  Index: ossp-pkg/l2/l2_ch_buffer.c
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 l2_ch_buffer.c
  --- ossp-pkg/l2/l2_ch_buffer.c	2001/10/31 16:47:05	1.30
  +++ ossp-pkg/l2/l2_ch_buffer.c	2001/11/03 22:51:36	1.31
  @@ -180,9 +180,7 @@
   static l2_result_t hook_open(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_buffer_t *cfg = (l2_ch_buffer_t *)ctx->vp;
  -    l2_channel_t *downstream = l2_channel_downstream(ch);
       struct sigaction locact;
  -    l2_result_t rv;
   
       if ((cfg->bufinterval != 0) && (cfg->bufinterval != -1L)) {
           /* initialize auto vars before using them */
  @@ -207,12 +205,8 @@
               return L2_ERR_MEM;
           cfg->bufpos = 0;
       }
  -
  -    /* optionally open downstream channel, too */
  -    if ((rv = l2_channel_open(downstream)) != L2_OK)
  -        return rv;
   
  -    return L2_OK;
  +    return L2_OK_PASS;
   }
   
   /* write to channel */
  @@ -220,20 +214,27 @@
                                 l2_level_t level, const char *buf, size_t buf_size)
   {
       l2_ch_buffer_t *cfg = (l2_ch_buffer_t *)ctx->vp;
  -    l2_channel_t *downstream = l2_channel_downstream(ch);
  +    l2_channel_t *downstream;
       l2_result_t rv;
   
       if (buf_size > (cfg->bufsize - cfg->bufpos)) {
           /* flush buffer if necessary */
           if (cfg->bufpos > 0) {
  -            if ((rv = l2_channel_write(downstream, cfg->level, cfg->buf, cfg->bufpos)) != L2_OK)
  -                return rv;
  +            downstream = NULL;
  +            while ((rv = l2_channel_downstream(ch, &downstream)) == L2_OK)
  +                if ((rv = l2_channel_write(downstream, cfg->level, cfg->buf, cfg->bufpos)) != L2_OK)
  +                    return rv;
               cfg->bufpos = 0;
               cfg->level  = L2_LEVEL_NONE;
           }
           /* pass through immediately to downstream if still too large */
  -        if (buf_size > cfg->bufsize)
  -            return l2_channel_write(downstream, level, buf, buf_size);
  +        if (buf_size > cfg->bufsize) {
  +            downstream = NULL;
  +            while ((rv = l2_channel_downstream(ch, &downstream)) == L2_OK)
  +                if ((rv = l2_channel_write(downstream, level, buf, buf_size)) != L2_OK)
  +                    return rv;
  +            return L2_OK;
  +        }
       }
   
       /* flush if level of incoming message differs from those already in buffer */
  @@ -241,8 +242,10 @@
           && (cfg->bufpos > 0)             /* and there is something in the buffer */
           && (cfg->level != L2_LEVEL_NONE) /* and a remembered level is known      */
           && (level != cfg->level)         /* and the levels really differ         */) {
  -        if ((rv = l2_channel_write(downstream, cfg->level, cfg->buf, cfg->bufpos)) != L2_OK)
  -            return rv;
  +        downstream = NULL;
  +        while (l2_channel_downstream(ch, &downstream) == L2_OK)
  +            if ((rv = l2_channel_write(downstream, cfg->level, cfg->buf, cfg->bufpos)) != L2_OK)
  +                return rv;
           cfg->bufpos = 0;
           cfg->level  = L2_LEVEL_NONE;
       }
  @@ -259,14 +262,16 @@
   static l2_result_t hook_flush(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_buffer_t *cfg = (l2_ch_buffer_t *)ctx->vp;
  -    l2_channel_t *downstream = l2_channel_downstream(ch);
  +    l2_channel_t *downstream;
       l2_result_t rv;
   
       /* write the buffer contents downstream */
   TRACE("l2_ch_buffer hook_flush called\n");
       if (cfg->bufpos > 0) {
  -        if ((rv = l2_channel_write(downstream, cfg->level, cfg->buf, cfg->bufpos)) != L2_OK)
  -            return rv;
  +        downstream = NULL;
  +        while (l2_channel_downstream(ch, &downstream) == L2_OK)
  +            if ((rv = l2_channel_write(downstream, cfg->level, cfg->buf, cfg->bufpos)) != L2_OK)
  +                return rv;
           cfg->bufpos = 0;
           cfg->level  = L2_LEVEL_NONE; /* reset this->context->level */
       }
  @@ -276,18 +281,14 @@
           if (reset_alarm(cfg))
               return L2_ERR_SYS;
   
  -    /* optionally flush downstream channel, too */
  -    if ((rv = l2_channel_flush(downstream)) != L2_OK)
  -        return rv;
  -
  -    return L2_OK;
  +    return L2_OK_PASS;
   }
   
   /* close channel */
   static l2_result_t hook_close(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_buffer_t *cfg = (l2_ch_buffer_t *)ctx->vp;
  -    l2_channel_t *downstream = l2_channel_downstream(ch);
  +    l2_channel_t *downstream;
       l2_result_t rv;
   
       if ((cfg->bufinterval != 0) && (cfg->bufinterval != -1L)) {
  @@ -305,46 +306,34 @@
   
       /* write pending data before closing down */
       if (cfg->bufpos > 0) {
  -        if ((rv = l2_channel_write(downstream, cfg->level, cfg->buf, cfg->bufpos)) != L2_OK)
  -            return rv;
  +        downstream = NULL;
  +        while (l2_channel_downstream(ch, &downstream) == L2_OK)
  +            if ((rv = l2_channel_write(downstream, cfg->level, cfg->buf, cfg->bufpos)) != L2_OK)
  +                return rv;
           cfg->bufpos = 0;
           cfg->level  = L2_LEVEL_NONE; /* reset this->context->level */
       }
   
  -    /* optionally close downstream channel, too */
  -    if ((rv = l2_channel_close(downstream)) != L2_OK)
  -        return rv;
  -
       /* close channel buffer */
       if (cfg->buf != NULL) {
           free(cfg->buf);
           cfg->buf = NULL;
       }
   
  -    return L2_OK;
  +    return L2_OK_PASS;
   }
   
   /* destroy channel */
   static l2_result_t hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_buffer_t *cfg = (l2_ch_buffer_t *)ctx->vp;
  -    l2_channel_t *downstream = l2_channel_downstream(ch);
  -    l2_result_t rv;
  -
  -    /* if not already closed, close channel buffer now */
  -    if (cfg->buf != NULL) {
  -        free(cfg->buf);
  -        cfg->buf = NULL;
  -    }
   
       /* destroy channel configuration */
  +    if (cfg->buf != NULL)
  +        free(cfg->buf);
       free(cfg);
  -
  -    /* optionally destroy downstream channel, too */
  -    if ((rv = l2_channel_destroy(downstream)) != L2_OK)
  -        return rv;
   
  -    return L2_OK;
  +    return L2_OK_PASS;
   }
   
   /* exported channel handler structure */
  Index: ossp-pkg/l2/l2_ch_filter.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 l2_ch_filter.c
  --- ossp-pkg/l2/l2_ch_filter.c	2001/09/28 14:28:41	1.10
  +++ ossp-pkg/l2/l2_ch_filter.c	2001/11/03 22:51:36	1.11
  @@ -100,8 +100,6 @@
                                 l2_level_t level, const char *buf, size_t buf_size)
   {
       l2_ch_filter_t *cfg = (l2_ch_filter_t *)ctx->vp;
  -    l2_channel_t *downstream = l2_channel_downstream(ch);
  -    l2_result_t rv;
       int bPass, iCheck;
   
       bPass = TRUE;
  @@ -117,23 +115,12 @@
              bPass = !bPass;
       }
   
  -    /* write to downstream channel */
  -    if (bPass)
  -        if ((rv = l2_channel_write(downstream, level, buf, buf_size)) != L2_OK)
  -            return rv;
  -
  -    return L2_OK;
  +    return (bPass ? L2_OK_PASS : L2_OK);
   }
   
   static l2_result_t hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_filter_t *cfg = (l2_ch_filter_t *)ctx->vp;
  -    l2_channel_t *downstream = l2_channel_downstream(ch);
  -    l2_result_t rv;
  -
  -    /* destroy downstream channel */
  -    if ((rv = l2_channel_destroy(downstream)) != L2_OK)
  -        return rv;
   
       /* destroy channel configuration */
       if (cfg->szRegex != NULL)
  @@ -143,7 +130,7 @@
       if (cfg->pcreExtra != NULL)
           free(cfg->pcreExtra);
   
  -    return L2_OK;
  +    return L2_OK_PASS;
   }
   
   l2_handler_t l2_handler_filter = {
  Index: ossp-pkg/l2/l2_ch_prefix.c
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 l2_ch_prefix.c
  --- ossp-pkg/l2/l2_ch_prefix.c	2001/10/09 15:34:55	1.15
  +++ ossp-pkg/l2/l2_ch_prefix.c	2001/11/03 22:51:36	1.16
  @@ -134,7 +134,7 @@
                                 l2_level_t level, const char *buf, size_t buf_size)
   {
       l2_ch_prefix_t *cfg = (l2_ch_prefix_t *)ctx->vp;
  -    l2_channel_t *downstream = l2_channel_downstream(ch);
  +    l2_channel_t *downstream;
       time_t t;
       struct tm *tm;
       size_t n;
  @@ -158,23 +158,19 @@
               return L2_ERR_ARG;
           if ((n = strftime(buf2, sizeof(buf2), buf1, tm)) == 0)
               return L2_ERR_SYS;
  -        if ((rv = l2_channel_write(downstream, level, buf2, n)) != L2_OK)
  -            return rv;
  +        downstream = NULL;
  +        while ((rv = l2_channel_downstream(ch, &downstream)) == L2_OK)
  +            if ((rv = l2_channel_write(downstream, level, buf2, n)) != L2_OK)
  +                return rv;
       }
  -
  -    /* write to downstream channel */
  -    if ((rv = l2_channel_write(downstream, level, buf, buf_size)) != L2_OK)
  -        return rv;
   
  -    return L2_OK;
  +    return L2_OK_PASS;
   }
   
   /* destroy channel */
   static l2_result_t hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_prefix_t *cfg = (l2_ch_prefix_t *)ctx->vp;
  -    l2_channel_t *downstream = l2_channel_downstream(ch);
  -    l2_result_t rv;
   
       /* free prefix structure */
       if (cfg->prefix != NULL)
  @@ -182,12 +178,8 @@
       if (cfg->timezone != NULL)
           free(cfg->timezone);
       free(cfg);
  -
  -    /* optionally destroy downstream channel, too */
  -    if ((rv = l2_channel_destroy(downstream)) != L2_OK)
  -        return rv;
   
  -    return L2_OK;
  +    return L2_OK_PASS;
   }
   
   /* exported channel handler structure */
  Index: ossp-pkg/l2/l2_channel.c
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 l2_channel.c
  --- ossp-pkg/l2/l2_channel.c	2001/09/27 13:56:35	1.20
  +++ ossp-pkg/l2/l2_channel.c	2001/11/03 22:51:36	1.21
  @@ -51,7 +51,7 @@
    * Last-modified: 2000-09-28/14:40
    * Name: l2_ch_lifecycle
    * Version: eo/1.0
  - * H4sIAIsvszsCA62WTW/bMAyGz/WvENBzM5KyPnwusGFAdtp1l8BVWgOZUyTuhv77
  + * H4sIAGdztDsCA62WTW/bMAyGz/WvENBzM5KyPnwusGFAdtp1l8BVWgOZUyTuhv77
    * kfKHnC4t5CZJ7JAO3kcUKUq5/fr9m9IrKtab9uFYb55DcR/aLhyKH6E7NHWxDh17
    * ShUIsAIofjbt4y4Ud1QgASgqQGlSt3V8Fai0AoV8gTJyI76xLD6Tb35iPSpybNlS
    * PsknV5po5WC0BZZRWSlL8km+tlYsa3MwJfAP6Kdokl8iltHKwjiwJ5jJL52DbIxB
  @@ -84,12 +84,16 @@
   
       /* initialize channel structure */
       ch->state = L2_CHSTATE_CREATED;
  -    ch->downstream = NULL;
  +    ch->parent = NULL;
  +    ch->sibling = NULL;
  +    ch->child = NULL;
       memset(&ch->context, 0, sizeof(l2_context_t));
       memcpy(&ch->handler, h, sizeof(l2_handler_t));
       ch->rvErrorInfo = L2_OK;
       ch->szErrorInfo[0] = '\0';
       ch->szError[0] = '\0';
  +    ch->levelmask = L2_LEVEL_ALL;
  +    ch->flushmask = L2_LEVEL_NONE;
   
       /* (optionally) perform create operation in handler */
       if (ch->handler.create != NULL) {
  @@ -102,6 +106,84 @@
       return ch;
   }
   
  +/* stack channel on top of another channel */
  +l2_result_t l2_channel_stack(l2_channel_t *ch, l2_channel_t *chP)
  +{
  +    l2_channel_t *chT;
  +
  +    /* argument sanity check */
  +    if (ch == NULL || chP == NULL)
  +        return L2_ERR_ARG;
  +
  +    /* make sure both channels are in state "created" */
  +    if (   ch->state  != L2_CHSTATE_CREATED
  +        || chP->state != L2_CHSTATE_CREATED)
  +        return L2_ERR_USE;
  +
  +    /* make sure parent channel is a filter channel */
  +    if (chP->handler.type != L2_CHANNEL_FILTER)
  +        return L2_ERR_USE;
  +
  +    /* make sure child still has no parent */
  +    if (ch->parent != NULL)
  +        return L2_ERR_USE;
  +
  +    /* stack the two channels */
  +    ch->parent = chP;
  +    if (chP->child == NULL)
  +        chP->child = ch;
  +    else {
  +        chT = chP->child;
  +        while (chT->sibling != NULL)
  +            chT = chT->sibling;
  +        chT->sibling = ch;
  +    }
  +
  +    return L2_OK;
  +}
  +
  +/* return upstream channel */
  +l2_result_t l2_channel_upstream(l2_channel_t *ch, l2_channel_t **chU)
  +{
  +    /* argument sanity check */
  +    if (ch == NULL || chU == NULL)
  +        return L2_ERR_ARG;
  +
  +    /* determine parent/upstream channel */
  +    *chU = ch->parent;
  +
  +    return (*chU != NULL ? L2_OK : L2_ERR_CH);
  +}
  +
  +/* return (subsequent) downstream channel(s) */
  +l2_result_t l2_channel_downstream(l2_channel_t *ch, l2_channel_t **chD)
  +{
  +    /* argument sanity check */
  +    if (ch == NULL || chD == NULL)
  +        return L2_ERR_ARG;
  +
  +    /* determine (next) downstream/child channel */
  +    if (*chD == NULL)
  +        *chD = ch->child;
  +    else
  +        *chD = (*chD)->sibling;
  +
  +    return (*chD != NULL ? L2_OK : L2_ERR_CH);
  +}
  +
  +/* return channel type */
  +l2_result_t l2_channel_type(l2_channel_t *ch, l2_chtype_t *type)
  +{
  +    /* argument sanity check */
  +    if (ch == NULL || type == NULL)
  +        return L2_ERR_ARG;
  +
  +    /* return type */
  +    (*type) = ch->handler.type;
  +
  +    return L2_OK;
  +}
  +
   /* configure channel */
   l2_result_t l2_channel_configure(l2_channel_t *ch, const char *fmt, ...)
   {
  @@ -126,10 +208,12 @@
       return rv;
   }
   
  -/* open channel (stack) */
  +/* open channel */
   l2_result_t l2_channel_open(l2_channel_t *ch)
   {
       l2_result_t rv;
  +    l2_result_t rvD;
  +    l2_channel_t *chD;
   
       /* argument sanity check */
       if (ch == NULL)
  @@ -139,29 +223,42 @@
       if (ch->state != L2_CHSTATE_CREATED)
           return L2_ERR_USE;
   
  -    /* skip empty open handlers on channel stack */
  -    while (ch != NULL && ch->handler.open == NULL) {
  -        ch->state = L2_CHSTATE_OPENED;
  -        ch = ch->downstream;
  +    /* perform operation */
  +    if (ch->handler.open != NULL)
  +        rv = ch->handler.open(&ch->context, ch);
  +    else
  +        rv = L2_OK_PASS;
  +   
  +    /* optionally pass operation downstream */ 
  +    if (rv == L2_OK_PASS) {
  +        rv = L2_OK;
  +        chD = NULL;
  +        while (l2_channel_downstream(ch, &chD) == L2_OK)
  +            if ((rvD = l2_channel_open(chD)) != L2_OK)
  +                rv = rvD;
  +        if (rv != L2_OK) {
  +            chD = NULL;
  +            while (l2_channel_downstream(ch, &chD) == L2_OK)
  +                l2_channel_close(chD);
  +        }
       }
  -    if (ch == NULL)
  -        return L2_ERR_USE;
   
  -    /* pass operation to handler */
  -    rv = ch->handler.open(&ch->context, ch);
  +    /* mark channel as opened */
       if (rv == L2_OK)
           ch->state = L2_CHSTATE_OPENED;
   
       return rv;
   }
   
  -/* write to channel (stack) */
  +/* write to channel */
   l2_result_t l2_channel_write(l2_channel_t *ch, l2_level_t level, const char *buf, size_t bufsize)
   {
       l2_result_t rv;
  +    l2_result_t rvD;
  +    l2_channel_t *chD;
   
       /* argument sanity check */
  -    if (ch == NULL || buf == NULL)
  +    if (ch == NULL || level == 0 || buf == NULL)
           return L2_ERR_ARG;
   
       /* make sure channel is in state "opened" */
  @@ -172,14 +269,20 @@
       if (bufsize == 0)
           return L2_OK;
   
  -    /* walk to next available write handler */
  -    while (ch != NULL && ch->handler.write == NULL)
  -        ch = ch->downstream;
  -    if (ch == NULL)
  -        return L2_ERR_USE;
  -
  -    /* pass operation to handler */
  -    rv = ch->handler.write(&ch->context, ch, level, buf, bufsize);
  +    /* perform operation */
  +    if (ch->handler.write != NULL)
  +        rv = ch->handler.write(&ch->context, ch, level, buf, bufsize);
  +    else
  +        rv = L2_OK_PASS;
  +   
  +    /* optionally pass operation downstream */ 
  +    if (rv == L2_OK_PASS) {
  +        rv = L2_OK;
  +        chD = NULL;
  +        while (l2_channel_downstream(ch, &chD) == L2_OK)
  +            if ((rvD = l2_channel_write(chD, level, buf, bufsize)) != L2_OK)
  +                rv = rvD;
  +    }
   
       return rv;
   }
  @@ -188,6 +291,8 @@
   l2_result_t l2_channel_flush(l2_channel_t *ch)
   {
       l2_result_t rv;
  +    l2_result_t rvD;
  +    l2_channel_t *chD;
   
       /* argument sanity check */
       if (ch == NULL)
  @@ -197,14 +302,20 @@
       if (ch->state != L2_CHSTATE_OPENED)
           return L2_ERR_USE;
   
  -    /* walk to next available flush handler */
  -    while (ch != NULL && ch->handler.flush == NULL)
  -        ch = ch->downstream;
  -    if (ch == NULL)
  -        return L2_ERR_USE;
  -
  -    /* pass operation to handler */
  -    rv = ch->handler.flush(&ch->context, ch);
  +    /* perform operation */
  +    if (ch->handler.flush != NULL)
  +        rv = ch->handler.flush(&ch->context, ch);
  +    else
  +        rv = L2_OK_PASS;
  +   
  +    /* optionally pass operation downstream */ 
  +    if (rv == L2_OK_PASS) {
  +        rv = L2_OK;
  +        chD = NULL;
  +        while (l2_channel_downstream(ch, &chD) == L2_OK)
  +            if ((rvD = l2_channel_flush(chD)) != L2_OK)
  +                rv = rvD;
  +    }
   
       return rv;
   }
  @@ -213,6 +324,8 @@
   l2_result_t l2_channel_close(l2_channel_t *ch)
   {
       l2_result_t rv;
  +    l2_result_t rvD;
  +    l2_channel_t *chD;
   
       /* argument sanity check */
       if (ch == NULL)
  @@ -222,16 +335,22 @@
       if (ch->state != L2_CHSTATE_OPENED)
           return L2_ERR_USE;
   
  -    /* walk to next available close handler */
  -    while (ch != NULL && ch->handler.close == NULL) {
  -        ch->state = L2_CHSTATE_CREATED;
  -        ch = ch->downstream;
  +    /* perform operation */
  +    if (ch->handler.close != NULL)
  +        rv = ch->handler.close(&ch->context, ch);
  +    else
  +        rv = L2_OK_PASS;
  +   
  +    /* optionally pass operation downstream */ 
  +    if (rv == L2_OK_PASS) {
  +        rv = L2_OK;
  +        chD = NULL;
  +        while (l2_channel_downstream(ch, &chD) == L2_OK)
  +            if ((rvD = l2_channel_close(chD)) != L2_OK)
  +                rv = rvD;
       }
  -    if (ch == NULL)
  -        return L2_ERR_USE;
   
  -    /* pass operation to handler */
  -    rv = ch->handler.close(&ch->context, ch);
  +    /* mark channel as closed */
       if (rv == L2_OK)
           ch->state = L2_CHSTATE_CREATED;
   
  @@ -242,6 +361,8 @@
   l2_result_t l2_channel_destroy(l2_channel_t *ch)
   {
       l2_result_t rv;
  +    l2_result_t rvD;
  +    l2_channel_t *chD;
   
       /* argument sanity check */
       if (ch == NULL)
  @@ -252,18 +373,24 @@
           if ((rv = l2_channel_close(ch)) != L2_OK)
               return rv;
   
  -    /* walk to next available destroy handler */
  -    while (ch != NULL && ch->handler.destroy == NULL)
  -        ch = ch->downstream;
  -    
  -    /* pass operation to handler */
  -    if (ch != NULL)
  +    /* perform operation */
  +    if (ch->handler.destroy != NULL)
           rv = ch->handler.destroy(&ch->context, ch);
       else
  +        rv = L2_OK_PASS;
  +   
  +    /* optionally pass operation downstream */ 
  +    if (rv == L2_OK_PASS) {
           rv = L2_OK;
  +        chD = NULL;
  +        while (l2_channel_downstream(ch, &chD) == L2_OK)
  +            if ((rvD = l2_channel_destroy(chD)) != L2_OK)
  +                rv = rvD;
  +    }
   
       /* free channel structure */
  -    free(ch);
  +    if (rv == L2_OK)
  +        free(ch);
   
       return rv;
   }
  @@ -330,47 +457,5 @@
   
       /* return pointer to internal buffer */
       return ch->szError;
  -}
  -
  -/* stack channel on top of another channel */
  -l2_result_t l2_channel_stack(l2_channel_t *ch, l2_channel_t *chTop)
  -{
  -    /* argument sanity check */
  -    if (ch == NULL || chTop == NULL)
  -        return L2_ERR_ARG;
  -
  -    /* make sure both channels are in state "created" */
  -    if (   ch->state    != L2_CHSTATE_CREATED
  -        || chTop->state != L2_CHSTATE_CREATED)
  -        return L2_ERR_USE;
  -
  -    /* make sure top channel is a filter channel */
  -    if (chTop->handler.type != L2_CHANNEL_FILTER)
  -        return L2_ERR_USE;
  -
  -    /* stack the channels */
  -    chTop->downstream = ch;
  -
  -    return L2_OK;
  -}
  -
  -/* return downstream channel */
  -l2_channel_t *l2_channel_downstream(l2_channel_t *ch)
  -{
  -    /* argument sanity check */
  -    if (ch == NULL)
  -        return NULL;
  -
  -    return ch->downstream;
  -}
  -
  -/* return channel type */
  -l2_chtype_t l2_channel_type(l2_channel_t *ch)
  -{
  -    /* argument sanity check */
  -    if (ch == NULL)
  -        return L2_CHANNEL_FILTER; /* FIXME */
  -
  -    return ch->handler.type;
   }
   
  Index: ossp-pkg/l2/l2_p.h
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 l2_p.h
  --- ossp-pkg/l2/l2_p.h	2001/10/06 14:33:09	1.24
  +++ ossp-pkg/l2/l2_p.h	2001/11/03 22:51:36	1.25
  @@ -77,12 +77,16 @@
   
   struct l2_channel_st {
       l2_chstate_t  state;
  -    l2_channel_t *downstream;
  +    l2_channel_t *parent;
  +    l2_channel_t *sibling;
  +    l2_channel_t *child;
       l2_context_t  context;
       l2_handler_t  handler;
       char          szError[1024];
       char          szErrorInfo[512];
       l2_result_t   rvErrorInfo;
  +    unsigned int  levelmask;
  +    unsigned int  flushmask;
   };
   
   typedef struct {
  Index: ossp-pkg/l2/l2_stream.c
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 l2_stream.c
  --- ossp-pkg/l2/l2_stream.c	2001/09/13 19:20:48	1.20
  +++ ossp-pkg/l2/l2_stream.c	2001/11/03 22:51:36	1.21
  @@ -55,8 +55,11 @@
   /* attach channel to stream */
   l2_result_t l2_stream_channel(l2_stream_t *st, l2_channel_t *ch, unsigned int levelmask, unsigned int flushmask)
   {
  +#if 0
       l2_channel_t *chC;
       l2_channel_t *chN;
  +    l2_chtype_t t;
  +#endif
       int i;
   
       /* argument sanity check */
  @@ -65,11 +68,13 @@
   
       /* make sure the stack of channels consists of zero or more
          filter channels followed by exactly one output channel */
  +#if 0
       for (chC = ch; (chN = l2_channel_downstream(chC)) != NULL; chC = chN)
  -        if (l2_channel_type(chC) != L2_CHANNEL_FILTER)
  +        if (l2_channel_type(chC, &t) == L2_OK && t != L2_CHANNEL_FILTER)
               return L2_ERR_USE;
  -    if (l2_channel_type(chC) != L2_CHANNEL_OUTPUT)
  +    if (l2_channel_type(chC, &t) == L2_OK && t != L2_CHANNEL_OUTPUT)
           return L2_ERR_USE;
  +#endif
   
       /* find next free channel position in channel array */
       for (i = 0; i < L2_MAX_CHANNELS && st->channels[i].ch != NULL; i++)
  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.36 -r1.37 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/11/03 20:49:25	1.36
  +++ ossp-pkg/l2/l2_test.c	2001/11/03 22:51:36	1.37
  @@ -57,7 +57,6 @@
   
   int main(int argc, char *argv[])
   {
  -    int i;                  /* For testing l2_stream_log() */
       l2_channel_t *chFilt;
       l2_channel_t *chPrefix;
       l2_channel_t *chBuf;
  @@ -100,7 +99,7 @@
       if ((chBuf  = l2_channel_create(&l2_handler_buffer)) == NULL)    /* Buffer */
           die("failed to create buffer channel");
   
  -    if (l2_channel_configure(chBuf, "size,interval", 800, 12) != L2_OK)
  +    if (l2_channel_configure(chBuf, "size", 800) != L2_OK)
           die("failed to configure buffer channel");
   
       if ((chFile = l2_channel_create(&l2_handler_file)) == NULL)      /* File   */
  @@ -221,20 +220,17 @@
       if (l2_stream_formatter(st, 'S', l2_util_fmt_dump, NULL) != L2_OK)
           die("failed to configure formatter for %%S");
   
  -    while (1) {
  -        for (i = 1; i != 0; i++);
  -        if (l2_stream_log(st, L2_LEVEL_PANIC, "0Checking localhost %s %{myparm}k <%{text}S><%{hex}S><%{base64}S>\n", "foo", 12345, "foo\1bar", 7, "foo\1bar", 7, "foo\1bar", 7) != L2_OK)
  -            die("failed to log message to stream");
  -
  -        if (l2_stream_log(st, L2_LEVEL_PANIC, "1Shecking\n") != L2_OK)
  -            die("failed to log message to stream");
  -
  -        if (l2_stream_log(st, L2_LEVEL_PANIC, "2Checking localhost %s %{myparm}k <%{text}S><%{hex}S><%{base64}S>\n", "foo", 12345, "foo\1bar", 7, "foo\1bar", 7, "foo\1bar", 7) != L2_OK)
  -            die("failed to log message to stream");
  -
  -        if (l2_stream_log(st, L2_LEVEL_PANIC, "3Shecking\n") != L2_OK)
  -            die("failed to log message to stream");
  -    }
  +    if (l2_stream_log(st, L2_LEVEL_PANIC, "0Checking localhost %s %{myparm}k <%{text}S><%{hex}S><%{base64}S>\n", "foo", 12345, "foo\1bar", 7, "foo\1bar", 7, "foo\1bar", 7) != L2_OK)
  +        die("failed to log message to stream");
  +
  +    if (l2_stream_log(st, L2_LEVEL_PANIC, "1Shecking\n") != L2_OK)
  +        die("failed to log message to stream");
  +
  +    if (l2_stream_log(st, L2_LEVEL_PANIC, "2Checking localhost %s %{myparm}k <%{text}S><%{hex}S><%{base64}S>\n", "foo", 12345, "foo\1bar", 7, "foo\1bar", 7, "foo\1bar", 7) != L2_OK)
  +        die("failed to log message to stream");
  +
  +    if (l2_stream_log(st, L2_LEVEL_PANIC, "3Shecking\n") != L2_OK)
  +        die("failed to log message to stream");
   
       if (l2_stream_destroy(st) != L2_OK)
           die("failed to destroy stream");

From ossp-cvs-owner@ossp.org  Sun Nov  4 14:21:20 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fA4DLIB62788; Sun, 4 Nov 2001 14:21:18 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id CA97F4CE750; Sun,  4 Nov 2001 14:21:18 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 Makefile.in TODO l2.h.in l2_ch_filter.c l2_cha...
Message-Id: <20011104132118.CA97F4CE750@visp.engelschall.com>
Date: Sun,  4 Nov 2001 14:21:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-Nov-2001 14:21:18
  Branch: HEAD                             Handle: 197001010100001004876477

  Added files:
    ossp-pkg/l2             l2_env.c
  Modified files:
    ossp-pkg/l2             Makefile.in TODO l2.h.in l2_ch_filter.c
                            l2_channel.c l2_p.h l2_test.c
  Removed files:
    ossp-pkg/l2             l2_stream.c

  Log:
    Channel-Only Revamping Step 2:
    - moved code of l2_stream.c into (new) l2_env.c and l2_channel.c
    - created new l2_env_t and l2_env_xxx()
    - changed l2_xx_create() functions to also return l2_result_t
    - moved error handling into l2_env_t
    - replaced l2_channel_stack() with two new and more flexible
      l2_channel_link() and l2_channel_unlink() functions
    - rewritten test stuff in l2_test.c to use new structure
    - added new l2_channel_env() function for retriving l2_env_t
    
    Puhhh....

  Summary:
    Revision    Changes     Path
    1.27        +4  -3      ossp-pkg/l2/Makefile.in
    1.36        +5  -0      ossp-pkg/l2/TODO
    1.15        +37 -24     ossp-pkg/l2/l2.h.in
    1.12        +5  -2      ossp-pkg/l2/l2_ch_filter.c
    1.22        +197 -77    ossp-pkg/l2/l2_channel.c
    1.1         +169 -0     ossp-pkg/l2/l2_env.c
    1.26        +6  -12     ossp-pkg/l2/l2_p.h
    NONE        +0  -278    ossp-pkg/l2/l2_stream.c
    1.38        +53 -147    ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 Makefile.in
  --- ossp-pkg/l2/Makefile.in	2001/10/11 08:02:16	1.26
  +++ ossp-pkg/l2/Makefile.in	2001/11/04 13:21:17	1.27
  @@ -63,7 +63,7 @@
   
   #   list of library object files
   OBJS = \
  -    l2_stream.lo \
  +    l2_env.lo \
       l2_channel.lo \
       l2_ch_fd.lo \
       l2_ch_file.lo \
  @@ -86,7 +86,7 @@
   
   #   list of source files
   SRCS = \
  -    l2_stream.c \
  +    l2_env.c \
       l2_channel.c \
       l2_ch_fd.c \
       l2_ch_file.c \
  @@ -296,13 +296,14 @@
   $(OBJS): Makefile
   
   #   AUTOMATICALLY GENERATED DEPENDENCY LIST - DO NOT EDIT
  -l2_stream.o: l2_stream.c l2.h l2_p.h l2_config.h l2_ut_pcre.h l2_ut_sa.h
  +l2_env.o: l2_env.c l2.h l2_p.h l2_config.h l2_ut_pcre.h l2_ut_sa.h
   l2_channel.o: l2_channel.c l2.h l2_p.h l2_config.h l2_ut_pcre.h l2_ut_sa.h
   l2_ch_fd.o: l2_ch_fd.c l2.h
   l2_ch_file.o: l2_ch_file.c l2.h
   l2_ch_pipe.o: l2_ch_pipe.c l2.h l2_p.h l2_config.h l2_ut_pcre.h l2_ut_sa.h
   l2_ch_syslog.o: l2_ch_syslog.c l2.h l2_p.h l2_config.h l2_ut_pcre.h l2_ut_sa.h
   l2_ch_socket.o: l2_ch_socket.c l2.h l2_p.h l2_config.h l2_ut_pcre.h l2_ut_sa.h
  +l2_ch_irc.o: l2_ch_irc.c l2.h l2_p.h l2_config.h l2_ut_pcre.h l2_ut_sa.h
   l2_ch_smtp.o: l2_ch_smtp.c l2.h l2_p.h l2_config.h l2_ut_pcre.h l2_ut_sa.h
   l2_ch_null.o: l2_ch_null.c l2.h
   l2_ch_filter.o: l2_ch_filter.c l2.h l2_ut_pcre.h
  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.35 -r1.36 TODO
  --- ossp-pkg/l2/TODO	2001/10/26 10:54:26	1.35
  +++ ossp-pkg/l2/TODO	2001/11/04 13:21:17	1.36
  @@ -2,6 +2,11 @@
   OSSP L2
   =======
   
  +Channel-Only Revamping:
  +- syscall override ala OSSP SA in l2_env_t
  +- l2_objects.fig update
  +- perhaps rename l2_env to l2_ctx and l2_channel_ to just l2_
  +
   - Perhaps we should later also write an l2_ch_bofh.c which
     something very cool but is undocumented and has its source
     mangled/scrambled ;)
  Index: ossp-pkg/l2/l2.h.in
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 l2.h.in
  --- ossp-pkg/l2/l2.h.in	2001/11/03 22:51:36	1.14
  +++ ossp-pkg/l2/l2.h.in	2001/11/04 13:21:17	1.15
  @@ -70,6 +70,7 @@
   struct l2_stream_st;
   struct l2_channel_st;
   struct l2_handler_st;
  +struct l2_env_st;
   
   /* corresponding data types for data structures */
   typedef union  l2_context_un l2_context_t;
  @@ -77,6 +78,7 @@
   typedef struct l2_handler_st l2_handler_t;
   typedef struct l2_stream_st  l2_stream_t;
   typedef struct l2_channel_st l2_channel_t;
  +typedef struct l2_env_st     l2_env_t;
   
   /* list of logging levels (high to low priority; low to high amount of logging) */
   typedef enum {
  @@ -90,12 +92,16 @@
       L2_LEVEL_TRACE    = (1 << 6),
       L2_LEVEL_DEBUG    = (1 << 7)
   } l2_level_t;
  +
  +/* macro describing a particular custom level */
   #define L2_LEVEL_CUSTOM(n) (1 << (8+(n))
  -#define L2_LEVEL_ALL       ((1 << (8+9+1))-1)
  +
  +/* macro describing all levels */
  +#define L2_LEVEL_ALL ((1 << (8+9+1))-1)
   
  -/* all levels from highest (PANIC) to and including a particular low level */
  -#define L2_LEVEL_UPTO(level) \
  -    (((level)-1)|(level))
  +/* macr describing all levels from highest (PANIC) 
  +   to and including a particular low level */
  +#define L2_LEVEL_UPTO(level) (((level)-1)|(level))
   
   /* list of return values */
   typedef enum {
  @@ -155,6 +161,12 @@
       L2_CHANNEL_OUTPUT
   } l2_chtype_t;
   
  +/* list of linking modes */
  +typedef enum {
  +    L2_LINK_CHILDS,
  +    L2_LINK_SIBLINGS
  +} l2_link_t;
  +
   /* channel handler specification structure */
   struct l2_handler_st {
       l2_chtype_t type;
  @@ -192,37 +204,38 @@
   extern l2_handler_t l2_handler_prefix;
   extern l2_handler_t l2_handler_buffer;
   
  +/* context operations */
  +l2_result_t   l2_env_create         (l2_env_t **env);
  +l2_result_t   l2_env_destroy        (l2_env_t *env);
  +l2_result_t   l2_env_levels         (l2_env_t *env, unsigned int levelmask, unsigned int flushmask);
  +l2_result_t   l2_env_formatter      (l2_env_t *env, char id, l2_formatter_t cb, l2_context_t *ctx);
  +l2_result_t   l2_env_errorinfo      (l2_env_t *env, l2_result_t rv, const char *fmt, ...);
  +char         *l2_env_strerror       (l2_env_t *env, l2_result_t rv);
  +
   /* channel operations */
  -l2_channel_t *l2_channel_create     (l2_handler_t *h);
  +l2_result_t   l2_channel_create     (l2_channel_t **ch, l2_env_t *env, l2_handler_t *h);
  +l2_result_t   l2_channel_destroy    (l2_channel_t *ch);
  +l2_result_t   l2_channel_levels     (l2_channel_t *ch, unsigned int levelmask, unsigned int flushmask);
   l2_result_t   l2_channel_configure  (l2_channel_t *ch, const char *fmt, ...);
   l2_result_t   l2_channel_open       (l2_channel_t *ch);
   l2_result_t   l2_channel_write      (l2_channel_t *ch, l2_level_t level, const char *buf, size_t bufsize);
   l2_result_t   l2_channel_flush      (l2_channel_t *ch);
   l2_result_t   l2_channel_close      (l2_channel_t *ch);
  -l2_result_t   l2_channel_destroy    (l2_channel_t *ch);
  -l2_result_t   l2_channel_stack      (l2_channel_t *ch, l2_channel_t *chTop);
  +l2_result_t   l2_channel_log        (l2_channel_t *ch, l2_level_t level, const char *fmt, ...);
  +l2_result_t   l2_channel_vlog       (l2_channel_t *ch, l2_level_t level, const char *fmt, va_list ap);
  +l2_result_t   l2_channel_link       (l2_channel_t *ch, l2_link_t id, l2_channel_t *ch2, ...);
  +l2_result_t   l2_channel_unlink     (l2_channel_t *ch);
   l2_result_t   l2_channel_upstream   (l2_channel_t *ch, l2_channel_t **chU);
   l2_result_t   l2_channel_downstream (l2_channel_t *ch, l2_channel_t **chD);
   l2_result_t   l2_channel_type       (l2_channel_t *ch, l2_chtype_t *type);
  -l2_result_t   l2_channel_errorinfo  (l2_channel_t *ch, l2_result_t rv, const char *fmt, ...);
  -char         *l2_channel_strerror   (l2_channel_t *ch, l2_result_t rv);
  -
  -/* stream operations */
  -l2_stream_t  *l2_stream_create     (void);
  -l2_result_t   l2_stream_channel    (l2_stream_t *st, l2_channel_t *ch, unsigned int levelmask, unsigned int flushmask);
  -l2_result_t   l2_stream_formatter  (l2_stream_t *st, char id, l2_formatter_t cb, l2_context_t *ctx);
  -l2_result_t   l2_stream_levels     (l2_stream_t *st, unsigned int levelmask, unsigned int flushmask);
  -l2_result_t   l2_stream_log        (l2_stream_t *st, l2_level_t level, const char *fmt, ...);
  -l2_result_t   l2_stream_vlog       (l2_stream_t *st, l2_level_t level, const char *fmt, va_list ap);
  -l2_result_t   l2_stream_flush      (l2_stream_t *st);
  -l2_result_t   l2_stream_destroy    (l2_stream_t *st);
  +l2_result_t   l2_channel_env        (l2_channel_t *ch, l2_env_t **env);
   
   /* utility operations */
  -l2_result_t   l2_util_setparams    (l2_param_t p[], const char *fmt, va_list ap);
  -l2_result_t   l2_util_l2s          (char *string,       size_t maxlen, int sep, unsigned int  levelmask);
  -l2_result_t   l2_util_s2l          (const char *string, size_t maxlen, int sep, unsigned int *levelmask);
  -l2_result_t   l2_util_fmt_string   (l2_context_t *, const char, const char *, char *, size_t, size_t *, va_list *);
  -l2_result_t   l2_util_fmt_dump     (l2_context_t *, const char, const char *, char *, size_t, size_t *, va_list *);
  +l2_result_t   l2_util_setparams     (l2_param_t p[], const char *fmt, va_list ap);
  +l2_result_t   l2_util_l2s           (char *string,       size_t maxlen, int sep, unsigned int  levelmask);
  +l2_result_t   l2_util_s2l           (const char *string, size_t maxlen, int sep, unsigned int *levelmask);
  +l2_result_t   l2_util_fmt_string    (l2_context_t *, const char, const char *, char *, size_t, size_t *, va_list *);
  +l2_result_t   l2_util_fmt_dump      (l2_context_t *, const char, const char *, char *, size_t, size_t *, va_list *);
   
   #endif /* __L2_H__ */
   
  Index: ossp-pkg/l2/l2_ch_filter.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 l2_ch_filter.c
  --- ossp-pkg/l2/l2_ch_filter.c	2001/11/03 22:51:36	1.11
  +++ ossp-pkg/l2/l2_ch_filter.c	2001/11/04 13:21:17	1.12
  @@ -63,6 +63,7 @@
   static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
       l2_ch_filter_t *cfg = (l2_ch_filter_t *)ctx->vp;
  +    l2_env_t *env;
       l2_param_t pa[3]; 
       l2_result_t rv;
       const char *szError;
  @@ -79,7 +80,8 @@
       if (cfg->szRegex != NULL) {
           /* compile regular expression into FSM */
           if ((cfg->pcreRegex = pcre_compile(cfg->szRegex, 0, &szError, &nErrorOffset, NULL)) == NULL) {
  -            l2_channel_errorinfo(ch, L2_ERR_ARG, "%s ('%c')", szError, cfg->szRegex[nErrorOffset]);
  +            l2_channel_env(ch, &env);
  +            l2_env_errorinfo(env, L2_ERR_ARG, "%s ('%c')", szError, cfg->szRegex[nErrorOffset]);
               return L2_ERR_ARG;
           }
           /* study FSM for more performance */
  @@ -87,7 +89,8 @@
           if (szError != NULL) {
               free(cfg->pcreRegex);
               cfg->pcreRegex = NULL;
  -            l2_channel_errorinfo(ch, L2_ERR_ARG, "%s", szError);
  +            l2_channel_env(ch, &env);
  +            l2_env_errorinfo(env, L2_ERR_ARG, "%s", szError);
               return L2_ERR_ARG;
           }
       }
  Index: ossp-pkg/l2/l2_channel.c
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 l2_channel.c
  --- ossp-pkg/l2/l2_channel.c	2001/11/03 22:51:36	1.21
  +++ ossp-pkg/l2/l2_channel.c	2001/11/04 13:21:17	1.22
  @@ -70,73 +70,127 @@
    */
   
   /* create channel */
  -l2_channel_t *l2_channel_create(l2_handler_t *h)
  +l2_result_t l2_channel_create(l2_channel_t **chp, l2_env_t *env, l2_handler_t *h)
   {
       l2_channel_t *ch;
   
       /* argument sanity check */
  -    if (h == NULL)
  -        return NULL;
  +    if (h == NULL || env == NULL)
  +        return L2_ERR_ARG;
   
       /* allocate channel structure */
       if ((ch = (l2_channel_t *)malloc(sizeof(l2_channel_t))) == NULL)
  -        return NULL;
  +        return L2_ERR_SYS;
   
       /* initialize channel structure */
  +    ch->env = env;
       ch->state = L2_CHSTATE_CREATED;
       ch->parent = NULL;
       ch->sibling = NULL;
       ch->child = NULL;
       memset(&ch->context, 0, sizeof(l2_context_t));
       memcpy(&ch->handler, h, sizeof(l2_handler_t));
  -    ch->rvErrorInfo = L2_OK;
  -    ch->szErrorInfo[0] = '\0';
  -    ch->szError[0] = '\0';
  -    ch->levelmask = L2_LEVEL_ALL;
  -    ch->flushmask = L2_LEVEL_NONE;
  +    ch->levelmask = env->levelmask;
  +    ch->flushmask = env->flushmask;
   
       /* (optionally) perform create operation in handler */
       if (ch->handler.create != NULL) {
           if (ch->handler.create(&ch->context, ch) != L2_OK) {
               free(ch);
  -            return NULL;
  +            return L2_ERR_SYS;
           }
       }
  +
  +    /* pass object to caller */
  +    (*chp) = ch;
   
  -    return ch;
  +    return L2_OK;
   }
   
  -/* stack channel on top of another channel */
  -l2_result_t l2_channel_stack(l2_channel_t *ch, l2_channel_t *chP)
  +/* link channels */
  +l2_result_t l2_channel_link(l2_channel_t *chR, l2_link_t id, l2_channel_t *chC, ...)
   {
       l2_channel_t *chT;
  +    l2_channel_t *chN;
  +    va_list ap;
   
       /* argument sanity check */
  -    if (ch == NULL || chP == NULL)
  +    if (chR == NULL || chC == NULL)
           return L2_ERR_ARG;
   
  -    /* make sure both channels are in state "created" */
  -    if (   ch->state  != L2_CHSTATE_CREATED
  -        || chP->state != L2_CHSTATE_CREATED)
  +    /* make sure root channel is in state "created" */
  +    if (chR->state != L2_CHSTATE_CREATED)
           return L2_ERR_USE;
   
  -    /* make sure parent channel is a filter channel */
  -    if (chP->handler.type != L2_CHANNEL_FILTER)
  +    /* make sure root channel is a filter channel */
  +    if (chR->handler.type != L2_CHANNEL_FILTER)
           return L2_ERR_USE;
   
  -    /* make sure child still has no parent */
  -    if (ch->parent != NULL)
  +    /* check childs */
  +    va_start(ap, chC);
  +    chT = chC;
  +    do {
  +        chN = (l2_channel_t *)va_arg(ap, l2_channel_t *);
  +        if (id == L2_LINK_CHILDS && chN != NULL)
  +            if (chT->handler.type != L2_CHANNEL_FILTER)
  +                return L2_ERR_USE;
  +    } while ((chT = chN) != NULL);
  +    va_end(ap);
  +
  +    /* perform link operation(s) */
  +    va_start(ap, chC);
  +    do {
  +        chC->parent  = chR;
  +        chC->sibling = NULL;
  +        chC->child   = NULL;
  +        if (chR->child == NULL)
  +            chR->child = chC;
  +        else {
  +            chT = chR->child;
  +            while (chT->sibling != NULL)
  +                chT = chT->sibling;
  +            chT->sibling = chC;
  +        }
  +        if (id == L2_LINK_CHILDS)
  +            chR = chC;
  +        chC = (l2_channel_t *)va_arg(ap, l2_channel_t *);
  +    }
  +    while (chC != NULL);
  +    va_end(ap);
  +
  +    return L2_OK;
  +}
  +
  +/* unlink channels */
  +l2_result_t l2_channel_unlink(l2_channel_t *ch)
  +{
  +    l2_channel_t *chS;
  +    l2_channel_t *chP;
  +
  +    /* argument sanity check */
  +    if (ch == NULL)
  +        return L2_ERR_ARG;
  +
  +    /* make sure channel is in state "created" */
  +    if (ch->state != L2_CHSTATE_CREATED)
           return L2_ERR_USE;
   
  -    /* stack the two channels */
  -    ch->parent = chP;
  -    if (chP->child == NULL)
  -        chP->child = ch;
  -    else {
  -        chT = chP->child;
  -        while (chT->sibling != NULL)
  -            chT = chT->sibling;
  -        chT->sibling = ch;
  +    /* make sure channel has no childs */
  +    if (ch->child != NULL)
  +        return L2_ERR_USE;
  +
  +    /* unlink the channel */
  +    chP = ch->parent;
  +    ch->parent = NULL;
  +    if (chP != NULL) {
  +        if (chP->child == ch)
  +            chP->child = ch->sibling;
  +        else {
  +            chS = chP->child;
  +            while (chS->sibling != ch)
  +                chS = chS->sibling;
  +            chS->sibling = ch->sibling;
  +        }
       }
   
       return L2_OK;
  @@ -184,6 +238,20 @@
       return L2_OK;
   }
   
  +/* set channel level masks */
  +l2_result_t l2_channel_levels(l2_channel_t *ch, unsigned int levelmask, unsigned int flushmask)
  +{
  +    /* argument sanity check */
  +    if (ch == NULL)
  +        return L2_ERR_ARG;
  +
  +    /* override global level mask */
  +    ch->levelmask = levelmask;
  +    ch->flushmask = flushmask;
  +
  +    return L2_OK;
  +}
  +
   /* configure channel */
   l2_result_t l2_channel_configure(l2_channel_t *ch, const char *fmt, ...)
   {
  @@ -395,67 +463,119 @@
       return rv;
   }
   
  -l2_result_t l2_channel_errorinfo(l2_channel_t *ch, l2_result_t rv, const char *fmt, ...)
  +/* log a message to channel */
  +l2_result_t l2_channel_log(l2_channel_t *ch, l2_level_t level, const char *fmt, ...)
   {
       va_list ap;
  -
  -    /* argument sanity check */
  -    if (ch == NULL || rv == L2_OK || fmt == NULL)
  -        return L2_ERR_ARG;
  +    l2_result_t rv;
   
  -    /* remember error information */
  +    /* pass-through to va_list-based variant */
       va_start(ap, fmt);
  -    l2_util_vsprintf(ch->szErrorInfo, sizeof(ch->szErrorInfo), fmt, ap);
  -    ch->rvErrorInfo = rv;
  +    rv = l2_channel_vlog(ch, level, fmt, ap);
       va_end(ap);
   
  -    return L2_OK;
  +    return rv;
   }
   
  -char *l2_channel_strerror(l2_channel_t *ch, l2_result_t rv)
  +/* indirect callback function from l2_channel_vlog for flushing */
  +static int l2_channel_vlog_flush(l2_util_format_t *vfmt)
   {
  -    char *sz;
  -    char *cpBuf;
  -    int nBuf;
  -    int n;
  +    /* we do no format buffer flushing */
  +    return -1;
  +}
   
  -    /* argument sanity check */
  -    if (ch == NULL)
  -        return NULL;
  +/* indirect callback function from l2_channel_vlog for formatting */
  +static void l2_channel_vlog_format(
  +    l2_util_format_t *vfmt,
  +    char *cPrefix, char *cPad, char **cppOut, size_t *npOutLen,
  +    char *cpBuf, int nBufLenMax, char *cpParam, char cId, va_list *apArgs)
  +{
  +    l2_env_t *env = (l2_env_t *)(vfmt->data[0].vp);
  +    l2_result_t rv;
  +    int i;
   
  -    /* start at begin of buffer */
  -    cpBuf = ch->szError;
  -    nBuf  = sizeof(ch->szError);
  -
  -    /* translate result value into corresponding string */
  -    if      (rv == L2_OK)      sz = "everything ok";
  -    else if (rv == L2_ERR_ARG) sz = "invalid argument";
  -    else if (rv == L2_ERR_USE) sz = "invalid use";
  -    else if (rv == L2_ERR_MEM) sz = "no more memory available";
  -    else if (rv == L2_ERR_SYS) sz = "operating system error";
  -    else if (rv == L2_ERR_IO)  sz = "input/output error";
  -    else if (rv == L2_ERR_FMT) sz = "formatting error";
  -    else if (rv == L2_ERR_INT) sz = "internal error";
  -    else                       sz = "unknown error";
  -    n = l2_util_sprintf(cpBuf, nBuf, "%s", sz);
  -    cpBuf += n;
  -    nBuf  -= n;
  -
  -    /* optionally annotate with error information */
  -    if (rv == ch->rvErrorInfo && ch->szErrorInfo[0] != '\0') {
  -        n = l2_util_sprintf(cpBuf, nBuf, "; %s", ch->szErrorInfo);
  -        cpBuf += n;
  -        nBuf  -= n;
  +    /* init formatting result */
  +    *cPrefix = '\0';
  +    *cPad = ' ';
  +    *cppOut = NULL;
  +    *npOutLen = 0;
  +
  +    /* iterate over all configured L2 formatters */
  +    for (i = 0; i < L2_MAX_FORMATTERS && env->formatters[i].cb != NULL; i++) {
  +        if (env->formatters[i].id == cId) {
  +            rv = env->formatters[i].cb(env->formatters[i].ctx, cId, cpParam, 
  +                                       cpBuf, nBufLenMax, npOutLen, apArgs);
  +            vfmt->data[1].i = (int)rv;
  +            if (rv == L2_OK) {
  +                *cppOut = cpBuf;
  +                break;
  +            }
  +        }
       }
  +    return;
  +}
  +
  +/* log a message to channel (va_list-variant) */
  +l2_result_t l2_channel_vlog(l2_channel_t *ch, l2_level_t level, const char *fmt, va_list ap)
  +{
  +    int l, j;
  +    size_t len;
  +    l2_result_t rv;
  +    l2_util_format_t vfmt;
  +    l2_env_t *env;
  +
  +    /* argument sanity check */
  +    if (ch == NULL || level == 0 || fmt == NULL || ap == NULL)
  +        return L2_ERR_ARG;
  +
  +    /* make sure only a single level is specified */
  +    for (l = level, j = 0; l != 0; l = (l >> 1))
  +        if (l & 0x1)
  +            j++;
  +    if (j != 1)
  +        return L2_ERR_ARG;
  +
  +    /* check whether level mask already stops processing */
  +    if (!(ch->levelmask & level))
  +        return L2_OK;
   
  -    /* optionally annotate with operating system error information */
  -    if (rv == L2_ERR_SYS) {
  -        n = l2_util_sprintf(cpBuf, nBuf, "; %s (%d)", strerror(errno), errno);
  -        cpBuf += n;
  -        nBuf  -= n;
  +    /* format message */
  +    env = ch->env;
  +    vfmt.curpos = env->message;
  +    vfmt.endpos = env->message + L2_MAX_MSGSIZE;
  +    vfmt.data[0].vp = env;
  +    vfmt.data[1].i  = L2_ERR_FMT;
  +    vfmt.flush  = l2_channel_vlog_flush;
  +    vfmt.format = l2_channel_vlog_format;
  +    if ((len = l2_util_format(&vfmt, fmt, ap)) == -1)
  +        return (l2_result_t)(vfmt.data[1].i);
  +    if (len == 0)
  +        return L2_ERR_FMT;
  +
  +    /* make sure a trailing newline exists */
  +    if (env->message[len-1] != '\n') {
  +        if (len == L2_MAX_MSGSIZE)
  +            return L2_ERR_MEM;
  +        env->message[len++] = '\n';
  +        env->message[len]   = '\0';
       }
   
  -    /* return pointer to internal buffer */
  -    return ch->szError;
  +    /* write message to channel */
  +    rv = L2_OK;
  +    if ((rv = l2_channel_write(ch, level, env->message, len)) != L2_OK)
  +        return rv;
  +    if (ch->flushmask & level)
  +        l2_channel_flush(ch);
  +
  +    return rv;
  +}
  +
  +/* return environment object */
  +l2_result_t l2_channel_env(l2_channel_t *ch, l2_env_t **env)
  +{
  +    if (ch == NULL || env == NULL)
  +        return L2_ERR_ARG;
  +    *env = ch->env;
  +    return L2_OK;
   }
   
  Index: ossp-pkg/l2/l2_env.c
  ============================================================
  $ cvs update -p -r1.1 l2_env.c
  /*
  **  L2 - OSSP Logging Library
  **  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP L2, a flexible logging library which
  **  can be found at http://www.ossp.org/pkg/l2/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  l2_env.c: environment
  **
  */
  
  #include "l2.h"
  #include "l2_p.h"
  
  /* create environment object */
  l2_result_t l2_env_create(l2_env_t **env)
  {
      int i;
      
      /* allocate env structure */ 
      if (((*env) = (l2_env_t *)malloc(sizeof(l2_env_t))) == NULL)
          return L2_ERR_SYS;
  
      /* initialize env structure */
      (*env)->rvErrorInfo = L2_OK;
      (*env)->szErrorInfo[0] = '\0';
      (*env)->szError[0] = '\0';
      (*env)->levelmask = L2_LEVEL_ALL;
      (*env)->flushmask = L2_LEVEL_NONE;
      for (i = 0; i < L2_MAX_FORMATTERS; i++)
          (*env)->formatters[i].cb = NULL;
  
      return L2_OK;
  }
  
  
  /* destroy environment object */
  l2_result_t l2_env_destroy(l2_env_t *env)
  {
      /* argument sanity check */
      if (env == NULL)
          return L2_ERR_ARG;
  
      /* free env structure */
      free(env);
  
      return L2_OK;
  }
  
  /* set environment level masks */
  l2_result_t l2_env_levels(l2_env_t *env, unsigned int levelmask, unsigned int flushmask)
  {
      /* argument sanity check */
      if (env == NULL)
          return L2_ERR_ARG;
  
      /* override global level mask */
      env->levelmask = levelmask;
      env->flushmask = flushmask;
  
      return L2_OK;
  }
  
  /* attach formatter to environment */
  l2_result_t l2_env_formatter(l2_env_t *env, char id, l2_formatter_t cb, l2_context_t *ctx)
  {
      int i;
  
      /* argument sanity check */
      if (env == NULL || id == '\0' || cb == NULL)
          return L2_ERR_ARG;
  
      /* find next free formatter position in formatter array */
      for (i = 0; i < L2_MAX_FORMATTERS && env->formatters[i].cb != NULL; i++)
          ;
      if (i == L2_MAX_FORMATTERS)
          return L2_ERR_MEM;
  
      /* attach formatter to env */
      env->formatters[i].id   = id;
      env->formatters[i].ctx  = ctx;
      env->formatters[i].cb   = cb;
  
      return L2_OK;
  }
  
  l2_result_t l2_env_errorinfo(l2_env_t *env, l2_result_t rv, const char *fmt, ...)
  {
      va_list ap;
  
      /* argument sanity check */
      if (env == NULL || rv == L2_OK || fmt == NULL)
          return L2_ERR_ARG;
  
      /* remember error information */
      va_start(ap, fmt);
      l2_util_vsprintf(env->szErrorInfo, sizeof(env->szErrorInfo), fmt, ap);
      env->rvErrorInfo = rv;
      va_end(ap);
  
      return L2_OK;
  }
  
  char *l2_env_strerror(l2_env_t *env, l2_result_t rv)
  {
      char *sz;
      char *cpBuf;
      int nBuf;
      int n;
  
      /* argument sanity check */
      if (env == NULL)
          return NULL;
  
      /* start at begin of buffer */
      cpBuf = env->szError;
      nBuf  = sizeof(env->szError);
  
      /* translate result value into corresponding string */
      if      (rv == L2_OK)      sz = "everything ok";
      else if (rv == L2_ERR_ARG) sz = "invalid argument";
      else if (rv == L2_ERR_USE) sz = "invalid use";
      else if (rv == L2_ERR_MEM) sz = "no more memory available";
      else if (rv == L2_ERR_SYS) sz = "operating system error";
      else if (rv == L2_ERR_IO)  sz = "input/output error";
      else if (rv == L2_ERR_FMT) sz = "formatting error";
      else if (rv == L2_ERR_INT) sz = "internal error";
      else                       sz = "unknown error";
      n = l2_util_sprintf(cpBuf, nBuf, "%s", sz);
      cpBuf += n;
      nBuf  -= n;
  
      /* optionally annotate with error information */
      if (rv == env->rvErrorInfo && env->szErrorInfo[0] != '\0') {
          n = l2_util_sprintf(cpBuf, nBuf, "; %s", env->szErrorInfo);
          cpBuf += n;
          nBuf  -= n;
      }
  
      /* optionally annotate with operating system error information */
      if (rv == L2_ERR_SYS) {
          n = l2_util_sprintf(cpBuf, nBuf, "; %s (%d)", strerror(errno), errno);
          cpBuf += n;
          nBuf  -= n;
      }
  
      /* return pointer to internal buffer */
      return env->szError;
  }
  
  Index: ossp-pkg/l2/l2_p.h
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 l2_p.h
  --- ossp-pkg/l2/l2_p.h	2001/11/03 22:51:36	1.25
  +++ ossp-pkg/l2/l2_p.h	2001/11/04 13:21:17	1.26
  @@ -76,37 +76,31 @@
   } l2_chstate_t;
   
   struct l2_channel_st {
  +    l2_env_t     *env;
       l2_chstate_t  state;
       l2_channel_t *parent;
       l2_channel_t *sibling;
       l2_channel_t *child;
       l2_context_t  context;
       l2_handler_t  handler;
  -    char          szError[1024];
  -    char          szErrorInfo[512];
  -    l2_result_t   rvErrorInfo;
       unsigned int  levelmask;
       unsigned int  flushmask;
   };
   
   typedef struct {
  -    l2_channel_t *ch;
  -    unsigned int levelmask;
  -    unsigned int flushmask;
  -} l2_channel_entry_t;
  -
  -typedef struct {
       l2_formatter_t cb;
       void *ctx;
       char id;
   } l2_formatter_entry_t;
   
  -struct l2_stream_st {
  +struct l2_env_st {
       unsigned int          levelmask;
       unsigned int          flushmask;
  -    char                  message[L2_MAX_MSGSIZE];
  -    l2_channel_entry_t    channels[L2_MAX_CHANNELS];
       l2_formatter_entry_t  formatters[L2_MAX_FORMATTERS];
  +    char                  message[L2_MAX_MSGSIZE];
  +    char                  szError[1024];
  +    char                  szErrorInfo[512];
  +    l2_result_t           rvErrorInfo;
   };
   
   /* variable argument handling taking care on argument passing conventions */
    Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.37 -r1.38 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/11/03 22:51:36	1.37
  +++ ossp-pkg/l2/l2_test.c	2001/11/04 13:21:17	1.38
  @@ -57,182 +57,88 @@
   
   int main(int argc, char *argv[])
   {
  -    l2_channel_t *chFilt;
  +    l2_channel_t *chFilter;
       l2_channel_t *chPrefix;
  -    l2_channel_t *chBuf;
  +    l2_channel_t *chBuffer;
       l2_channel_t *chFile;
  -#ifdef WITH_SYSLOG
       l2_channel_t *chSyslog;
  -#endif
  -#ifdef WITH_PIPE
  -    l2_channel_t *chPipe;
  -#endif
  -#ifdef WITH_SOCKET
  -    l2_channel_t *chSock;
  -#endif
  -#ifdef WITH_IRC
  -    l2_channel_t *chIrc;
  -#endif
  -#ifdef WITH_SMTP
       l2_channel_t *chSmtp;
  -#endif
  -    l2_stream_t *st;
  +    l2_env_t *env;
   
  -    /*
  -     * Typical steps to use a buffered file logging stream
  -     */
  -    if ((st = l2_stream_create()) == NULL)
  -        die("failed to create stream");
  +    /* create environment */
  +    if ((l2_env_create(&env)) != L2_OK)
  +        die("failed to create environment");
  +    if (l2_env_formatter(env, 'k', formatter, NULL) != L2_OK)
  +        die("failed to configure formatter for %%x");
  +    if (l2_env_formatter(env, 'S', l2_util_fmt_dump, NULL) != L2_OK)
  +        die("failed to configure formatter for %%S");
   
  -    if ((chPrefix  = l2_channel_create(&l2_handler_prefix)) == NULL) /* Prefix */
  +    /* create prefix channel */
  +    if ((l2_channel_create(&chPrefix, env, &l2_handler_prefix)) != L2_OK)
           die("failed to create prefix channel");
  -
  -    if (l2_channel_configure(chPrefix, "prefix,timezone", "[%d-%m-%Y/%H:%M:%S] %L test[%P]: ", "local") != L2_OK)
  +    if (l2_channel_configure(chPrefix, "prefix,timezone", 
  +                             "[%d-%m-%Y/%H:%M:%S] %L test[%P]: ", "local") != L2_OK)
           die("failed to configure prefix channel");
   
  -    if ((chFilt = l2_channel_create(&l2_handler_filter)) == NULL)    /* Filter */
  +    /* create prefix channel */
  +    if ((l2_channel_create(&chFilter, env, &l2_handler_filter)) != L2_OK)
           die("failed to create filter channel");
  -
  -    if (l2_channel_configure(chFilt, "regex,negate", "hecking", 0) != L2_OK)
  +    if (l2_channel_configure(chFilter, "regex,negate", "hecking", 0) != L2_OK)
           die("failed to configure filter channel");
   
  -    if ((chBuf  = l2_channel_create(&l2_handler_buffer)) == NULL)    /* Buffer */
  +    /* create buffer channel */
  +    if ((l2_channel_create(&chBuffer, env, &l2_handler_buffer)) != L2_OK)
           die("failed to create buffer channel");
  -
  -    if (l2_channel_configure(chBuf, "size", 800) != L2_OK)
  +    if (l2_channel_configure(chBuffer, "size", 800) != L2_OK)
           die("failed to configure buffer channel");
   
  -    if ((chFile = l2_channel_create(&l2_handler_file)) == NULL)      /* File   */
  +    /* create file channel */
  +    if ((l2_channel_create(&chFile, env, &l2_handler_file)) != L2_OK)
           die("failed to create file channel");
  -
       if (l2_channel_configure(chFile, "path,append,perm", "l2_test.log", TRUE, 0644) != L2_OK)
           die("failed to configure file channel");
  +    if (l2_channel_levels(chFile, L2_LEVEL_UPTO(L2_LEVEL_INFO), L2_LEVEL_NONE) != L2_OK)
  +        die("failed to level of smtp channel");
   
  -    if (l2_channel_stack(chFile, chBuf) != L2_OK)
  -        die("failed to stack buffer channel on top of file channel");
  -    
  -    if (l2_channel_stack(chBuf, chPrefix) != L2_OK)
  -        die("failed to stack prefix channel on top of buffer channel");
  -
  -    if (l2_channel_stack(chPrefix, chFilt) != L2_OK)
  -        die("failed to stack filter channel on top of prefix channel");
  -    
  -    if (l2_channel_open(chFilt) != L2_OK)
  -        die("failed to open channel stack");
  -
  -    if (l2_stream_channel(st, chFilt, L2_LEVEL_UPTO(L2_LEVEL_WARNING), L2_LEVEL_NONE) != L2_OK)
  -        die("failed to attach channel stack into stream");
  -
  -#ifdef WITH_SYSLOG
  -    if ((chSyslog = l2_channel_create(&l2_handler_syslog)) == NULL)  /* Syslog */
  +    /* create syslog channel */
  +    if ((l2_channel_create(&chSyslog, env, &l2_handler_syslog)) != L2_OK)
           die("failed to create syslog channel");
  -
       if (l2_channel_configure(chSyslog, "ident,facility,target,remotehost,logpid",
  -        "L2-Test", "user", "remote", "en1", 1) != L2_OK)
  +                             "L2-Test", "user", "remote", "en1", 1) != L2_OK)
           die("failed to configure syslog channel");
  +    if (l2_channel_levels(chSyslog, L2_LEVEL_UPTO(L2_LEVEL_ERROR), L2_LEVEL_ALL) != L2_OK)
  +        die("failed to level of syslog channel");
   
  -    if (l2_channel_open(chSyslog) != L2_OK)
  -        die("failed to open channel stack");
  -
  -    if (l2_stream_channel(st, chSyslog, L2_LEVEL_UPTO(L2_LEVEL_WARNING), L2_LEVEL_NONE) != L2_OK)
  -        die("failed to attach channel syslog into stream");
  -#endif /* Syslog */
  -
  -#ifdef WITH_PIPE
  -    if ((chPipe = l2_channel_create(&l2_handler_pipe)) == NULL)      /* Pipe */
  -        die("failed to create pipe channel");
  -
  -#if 0
  -    if (l2_channel_configure(chPipe, "mode,path", "direct", "/u/ms/travail/cronolinux/sbin/cronolog -o /u/ms/tmp/crono.log") != L2_OK)
  -        die("failed to configure pipe channel");
  -#endif
  -
  -    if (l2_channel_configure(chPipe, "execmode,path", "shell", "$CRONOLOGDIR/cronolog -o $HOME/tmp/crono.log") != L2_OK)
  -        die("failed to configure pipe channel due to mode and path parameters");
  -
  -    if (l2_channel_configure(chPipe, "runtime", "continuous") != L2_OK)
  -        die("failed to configure pipe channel due to continuous parameter");
  -
  -    if (l2_channel_open(chPipe) != L2_OK)
  -        die("failed to open pipe channel");
  -
  -    if (l2_stream_channel(st, chPipe, L2_LEVEL_UPTO(L2_LEVEL_WARNING), L2_LEVEL_NONE) != L2_OK)
  -        die("failed to attach channel pipe into stream");
  -#endif /* Pipe */
  -
  -#ifdef WITH_IRC
  -    /* Atenzione! Before testing IRC start the IRC server. */
  -    if ((chIrc = l2_channel_create(&l2_handler_irc)) == NULL)   /* IRC */
  -        die("failed to create IRC channel");
  -
  -    if (l2_channel_configure(chIrc) != L2_OK)
  -        die("failed to configure IRC channel");
  -
  -    if (l2_channel_open(chIrc) != L2_OK)
  -        die("failed to open IRC channel");
  -
  -    if (l2_stream_channel(st, chIrc, L2_LEVEL_UPTO(L2_LEVEL_WARNING), L2_LEVEL_NONE) != L2_OK)
  -        die("failed to attach channel IRC into stream");
  -#endif /* IRC */
  -
  -#ifdef WITH_SOCKET
  -    /* Atenzione! Before doing any socket testing, make sure you have a valid */
  -    /* end point listening, or else you will only get an error message when   */
  -    /* the thing tries to connect.                                            */
  -    if ((chSock = l2_channel_create(&l2_handler_socket)) == NULL)   /* Socket */
  -        die("failed to create socket channel");
  -
  -    if (l2_channel_configure(chSock, "proto,host,port",\
  -        "tcp", "localhost", 2002) != L2_OK)
  -        die("failed to configure socket tcp/ipv4 channel");
  -#if 0
  -    if (l2_channel_configure(chSock, "proto,host,port",\
  -          "tcp", "0:0:0:0:0:0:0:1", 2002) != L2_OK)
  -          die("failed to configure socket tcp/ipv6 channel");
  -#endif
  -    if (l2_channel_open(chSock) != L2_OK)
  -        die("failed to open socket channel");
  -
  -    if (l2_stream_channel(st, chSock, L2_LEVEL_UPTO(L2_LEVEL_WARNING), L2_LEVEL_NONE) != L2_OK)
  -        die("failed to attach channel socket into stream");
  -#endif /* Socket */
  -
  -#ifdef WITH_SMTP
  -    if ((chSmtp = l2_channel_create(&l2_handler_smtp)) == NULL)      /* SMTP */
  +    /* create smtp channel */
  +    if ((l2_channel_create(&chSmtp, env, &l2_handler_smtp)) != L2_OK)
           die("failed to create smtp channel");
  -
       if (l2_channel_configure(chSmtp, "rcpt,host,port", "rse@engelschall.com", "en1", "25") != L2_OK)
           die("failed to configure smtp channel");
  +    if (l2_channel_levels(chSmtp, L2_LEVEL_UPTO(L2_LEVEL_PANIC), L2_LEVEL_ALL) != L2_OK)
  +        die("failed to level of smtp channel");
   
  -    if (l2_channel_open(chSmtp) != L2_OK)
  -        die("failed to open smtp channel");
  -
  -    if (l2_stream_channel(st, chSmtp, L2_LEVEL_UPTO(L2_LEVEL_ERROR), L2_LEVEL_NONE) != L2_OK)
  -        die("failed to attach smtp channel into stream");
  -#endif /* SMTP */
  -
  -    if (l2_stream_levels(st, L2_LEVEL_UPTO(L2_LEVEL_WARNING), L2_LEVEL_NONE) != L2_OK)
  -        die("failed to set global logging level");
  +    /* build channel tree */
  +    if (l2_channel_link(chFilter, L2_LINK_CHILDS, chPrefix, chBuffer, chFile, NULL) != L2_OK)
  +        die("failed to link channels together as a child sequence");
  +    if (l2_channel_link(chFilter, L2_LINK_SIBLINGS, chSyslog, NULL) != L2_OK)
  +        die("failed to link filter channel on top of syslog channel");
  +
  +    /* open channel tree */
  +    if (l2_channel_open(chFilter) != L2_OK)
  +        die("failed to open channel tree");
       
  -    if (l2_stream_formatter(st, 'k', formatter, NULL) != L2_OK)
  -        die("failed to configure formatter for %%x");
  -
  -    if (l2_stream_formatter(st, 'S', l2_util_fmt_dump, NULL) != L2_OK)
  -        die("failed to configure formatter for %%S");
  -
  -    if (l2_stream_log(st, L2_LEVEL_PANIC, "0Checking localhost %s %{myparm}k <%{text}S><%{hex}S><%{base64}S>\n", "foo", 12345, "foo\1bar", 7, "foo\1bar", 7, "foo\1bar", 7) != L2_OK)
  -        die("failed to log message to stream");
  -
  -    if (l2_stream_log(st, L2_LEVEL_PANIC, "1Shecking\n") != L2_OK)
  -        die("failed to log message to stream");
  -
  -    if (l2_stream_log(st, L2_LEVEL_PANIC, "2Checking localhost %s %{myparm}k <%{text}S><%{hex}S><%{base64}S>\n", "foo", 12345, "foo\1bar", 7, "foo\1bar", 7, "foo\1bar", 7) != L2_OK)
  -        die("failed to log message to stream");
  -
  -    if (l2_stream_log(st, L2_LEVEL_PANIC, "3Shecking\n") != L2_OK)
  -        die("failed to log message to stream");
  +    /* perform a few log operations */
  +    if (l2_channel_log(chFilter, L2_LEVEL_PANIC, "1: Checking localhost %s %{myparm}k <%{text}S><%{hex}S><%{base64}S>\n", "foo", 12345, "foo\1bar", 7, "foo\1bar", 7, "foo\1bar", 7) != L2_OK)
  +        die("failed to log message #1 to channel");
  +    if (l2_channel_log(chFilter, L2_LEVEL_PANIC, "2: Shecking\n") != L2_OK)
  +        die("failed to log message #2 to channel");
  +    if (l2_channel_log(chFilter, L2_LEVEL_PANIC, "3: Checking localhost %s %{myparm}k <%{text}S><%{hex}S><%{base64}S>\n", "foo", 12345, "foo\1bar", 7, "foo\1bar", 7, "foo\1bar", 7) != L2_OK)
  +        die("failed to log message #3 to channel");
  +    if (l2_channel_log(chFilter, L2_LEVEL_PANIC, "4: Shecking\n") != L2_OK)
  +        die("failed to log message #4 to channel");
   
  -    if (l2_stream_destroy(st) != L2_OK)
  +    /* destroy channel tree */
  +    if (l2_channel_destroy(chFilter) != L2_OK)
           die("failed to destroy stream");
   
       return 0;

From ossp-cvs-owner@ossp.org  Sun Nov  4 14:45:04 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fA4Dj3B66447; Sun, 4 Nov 2001 14:45:03 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 98CD24CE755; Sun,  4 Nov 2001 14:45:03 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_p.h l2_ut_format.c l2_ut_format.h
Message-Id: <20011104134503.98CD24CE755@visp.engelschall.com>
Date: Sun,  4 Nov 2001 14:45:03 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-Nov-2001 14:45:03
  Branch: HEAD                             Handle: 2001110413450300

  Added files:
    ossp-pkg/l2             l2_ut_format.h
  Modified files:
    ossp-pkg/l2             l2_p.h l2_ut_format.c

  Log:
    Cleanup formatting stuff by making stand-alone.

  Summary:
    Revision    Changes     Path
    1.27        +16 -58     ossp-pkg/l2/l2_p.h
    1.4         +1  -2      ossp-pkg/l2/l2_ut_format.c
    1.1         +74 -0      ossp-pkg/l2/l2_ut_format.h
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_p.h
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 l2_p.h
  --- ossp-pkg/l2/l2_p.h	2001/11/04 13:21:17	1.26
  +++ ossp-pkg/l2/l2_p.h	2001/11/04 13:45:03	1.27
  @@ -29,24 +29,35 @@
   #ifndef __L2_P_H__
   #define __L2_P_H__
   
  +/* include standard headers */
   #include <stdio.h>
   #include <stdlib.h>
   #include <errno.h>
   
  -#ifndef DEBUG
  -#define NDEBUG
  -#endif
  -#include <assert.h>
  -
  +/* include private headers */
   #include "l2.h"
   #include "l2_config.h"
  +#include "l2_ut_format.h"
   #include "l2_ut_pcre.h"
   #include "l2_ut_sa.h"
   
  +/* assertion and tracing support */
  +#ifndef DEBUG
  +#define NDEBUG
  +#endif
  +#include <assert.h>
  +#ifndef NDEBUG
  +#define TRACE(str)  fprintf(stderr, "%s:%d: %s\n", __FILE__, __LINE__, str)
  +#else
  +#define TRACE(expr) ((void)0)
  +#endif
  +
  +/* memory debugging support */
   #if defined(HAVE_DMALLOC_H) && defined(WITH_DMALLOC)
   #include "dmalloc.h"
   #endif
   
  +/* handy cleanup macros */
   #define cu(value) \
       do { rv = value; \
            goto cus; } while (0)
  @@ -54,18 +65,6 @@
       if (expr) \
           cu(value)
   
  -#ifndef NDEBUG
  -#define TRACE(str)\
  -        do {\
  -            fprintf(stderr, "%s:%d: ", __FILE__, __LINE__);\
  -            fprintf(stderr, str);\
  -            fputc('\n', stderr);\
  -        }\
  -        while (0)
  -#else
  -#define TRACE(expr) ((void)0)
  -#endif
  -
   #define L2_MAX_MSGSIZE    4096
   #define L2_MAX_CHANNELS    128
   #define L2_MAX_FORMATTERS  128
  @@ -121,47 +120,6 @@
   #define _va_type_recv_voidptr void *
   #define _va_type_cast_voidptr void *
   #define va_get(ap,type) (_va_type_cast_##type)va_arg((ap),_va_type_recv_##type)
  -
  -struct l2_util_format_st {
  -
  -    /* the output buffer */
  -    char *curpos;                        /* start of output buffer (first pos) */
  -    char *endpos;                        /* end   of output buffer (last pos)  */
  -
  -    /* callback for flushing the output buffer */
  -    int (*flush)(
  -        struct l2_util_format_st *spec   /* this l2_util_format_t specification */
  -    );
  -
  -    /* callback for formatting unknown %-constructs */
  -    void (*format)(
  -        struct l2_util_format_st *spec,  /* this l2_util_format_t specification */
  -        char *prefix_char,               /* output arg: prefix character */
  -        char *pad_char,                  /* output arg: padding character */
  -        char **s_buf,                    /* output arg: string buffer */
  -        size_t *s_len,                   /* output arg: string len */
  -        char *num_buf,                   /* input  arg: temporary buffer */
  -        int num_buf_size,                /* input  arg: temporary buffer len */
  -        char *extinfo,                   /* input  arg: extension information */
  -        char fmt_char,                   /* input  arg: current formatting character */ 
  -        va_list *ap                      /* in/out arg: variable argument pointer */
  -    );
  -
  -    /* arbitrary passed-through application data */
  -    union { 
  -        int i;                        
  -        long l; 
  -        double d; 
  -        void *vp; 
  -    } data[6];                           
  -};
  -typedef struct l2_util_format_st l2_util_format_t;
  -
  -int   l2_util_format     (l2_util_format_t *vbuff, const char *fmt, va_list ap);
  -int   l2_util_vsprintf   (char *s, size_t n, const char *fmt, va_list ap);
  -char *l2_util_vasprintf  (const char *fmt, va_list ap);
  -int   l2_util_sprintf    (char *s, size_t n, const char *fmt, ...);
  -char *l2_util_asprintf   (const char *fmt, ...);
   
   #endif /* __L2_P_H__ */
   
  Index: ossp-pkg/l2/l2_ut_format.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 l2_ut_format.c
  --- ossp-pkg/l2/l2_ut_format.c	2001/09/08 22:06:54	1.3
  +++ ossp-pkg/l2/l2_ut_format.c	2001/11/04 13:45:03	1.4
  @@ -97,8 +97,7 @@
   #include <ctype.h>
   #include <math.h>
   
  -#include "l2.h"
  -#include "l2_p.h"
  +#include "l2_ut_format.h"
   
   /* types which are locally use */
   typedef long                 long_int;
  Index: ossp-pkg/l2/l2_ut_format.h
  ============================================================
  $ cvs update -p -r1.1 l2_ut_format.h
  /*
  **  L2 - OSSP Logging Library
  **  Copyright (c) 2001 Cable & Wireless Deutschland GmbH
  **
  **  This file is part of OSSP L2, a flexible logging library which
  **  can be found at http://www.ossp.org/pkg/l2/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  l2_ut_format.h: printf(3)-style formatting API
  */
  
  #ifndef __L2_UT_FORMAT_H__
  #define __L2_UT_FORMAT_H__
  
  struct l2_util_format_st {
      /* the output buffer */
      char *curpos;                        /* start of output buffer (first pos) */
      char *endpos;                        /* end   of output buffer (last pos)  */
  
      /* callback for flushing the output buffer */
      int (*flush)(
          struct l2_util_format_st *spec   /* this l2_util_format_t specification */
      );
  
      /* callback for formatting unknown %-constructs */
      void (*format)(
          struct l2_util_format_st *spec,  /* this l2_util_format_t specification */
          char *prefix_char,               /* output arg: prefix character */
          char *pad_char,                  /* output arg: padding character */
          char **s_buf,                    /* output arg: string buffer */
          size_t *s_len,                   /* output arg: string len */
          char *num_buf,                   /* input  arg: temporary buffer */
          int num_buf_size,                /* input  arg: temporary buffer len */
          char *extinfo,                   /* input  arg: extension information */
          char fmt_char,                   /* input  arg: current formatting character */ 
          va_list *ap                      /* in/out arg: variable argument pointer */
      );
  
      /* arbitrary passed-through application data */
      union { 
          int i;                        
          long l; 
          double d; 
          void *vp; 
      } data[6];                           
  };
  
  typedef struct l2_util_format_st l2_util_format_t;
  
  int   l2_util_format    (l2_util_format_t *vbuff, const char *fmt, va_list ap);
  int   l2_util_vsprintf  (char *s, size_t n, const char *fmt, va_list ap);
  char *l2_util_vasprintf (const char *fmt, va_list ap);
  int   l2_util_sprintf   (char *s, size_t n, const char *fmt, ...);
  char *l2_util_asprintf  (const char *fmt, ...);
  
  #endif /* __L2_UT_FORMAT_H__ */
  

From ossp-cvs-owner@ossp.org  Sun Nov  4 14:46:26 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fA4DkPB66790; Sun, 4 Nov 2001 14:46:25 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id B54EB4CE750; Sun,  4 Nov 2001 14:46:25 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_p.h
Message-Id: <20011104134625.B54EB4CE750@visp.engelschall.com>
Date: Sun,  4 Nov 2001 14:46:25 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-Nov-2001 14:46:25
  Branch: HEAD                             Handle: 2001110413462500

  Modified files:
    ossp-pkg/l2             l2_p.h

  Log:
    remove no longer used definition

  Summary:
    Revision    Changes     Path
    1.28        +0  -1      ossp-pkg/l2/l2_p.h
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_p.h
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 l2_p.h
  --- ossp-pkg/l2/l2_p.h	2001/11/04 13:45:03	1.27
  +++ ossp-pkg/l2/l2_p.h	2001/11/04 13:46:25	1.28
  @@ -66,7 +66,6 @@
           cu(value)
   
   #define L2_MAX_MSGSIZE    4096
  -#define L2_MAX_CHANNELS    128
   #define L2_MAX_FORMATTERS  128
   
   typedef enum {

From ossp-cvs-owner@ossp.org  Sun Nov  4 14:55:09 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fA4Dt7B67949; Sun, 4 Nov 2001 14:55:07 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 6F8ED4CE750; Sun,  4 Nov 2001 14:55:07 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_channel.c l2_env.c l2_p.h
Message-Id: <20011104135507.6F8ED4CE750@visp.engelschall.com>
Date: Sun,  4 Nov 2001 14:55:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-Nov-2001 14:55:07
  Branch: HEAD                             Handle: 2001110413550600

  Modified files:
    ossp-pkg/l2             l2_channel.c l2_env.c l2_p.h

  Log:
    code cleanups

  Summary:
    Revision    Changes     Path
    1.23        +1  -4      ossp-pkg/l2/l2_channel.c
    1.2         +24 -16     ossp-pkg/l2/l2_env.c
    1.29        +6  -0      ossp-pkg/l2/l2_p.h
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_channel.c
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 l2_channel.c
  --- ossp-pkg/l2/l2_channel.c	2001/11/04 13:21:17	1.22
  +++ ossp-pkg/l2/l2_channel.c	2001/11/04 13:55:06	1.23
  @@ -24,14 +24,11 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  l2_channel.c: channel handling
  +**  l2_channel.c: channel object
   **
   */
   
  -#include "l2.h"
   #include "l2_p.h"
  -
  -#include <string.h>
   
   /* 
    * A channel is the central object for a logging stream. It is
  Index: ossp-pkg/l2/l2_env.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 l2_env.c
  --- ossp-pkg/l2/l2_env.c	2001/11/04 13:21:17	1.1
  +++ ossp-pkg/l2/l2_env.c	2001/11/04 13:55:06	1.2
  @@ -24,30 +24,36 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  l2_env.c: environment
  -**
  +**  l2_env.c: environment object
   */
   
  -#include "l2.h"
   #include "l2_p.h"
   
   /* create environment object */
  -l2_result_t l2_env_create(l2_env_t **env)
  +l2_result_t l2_env_create(l2_env_t **envp)
   {
  +    l2_env_t *env;
       int i;
  +
  +    /* argument sanity check */
  +    if (envp == NULL)
  +        return L2_ERR_ARG;
       
  -    /* allocate env structure */ 
  -    if (((*env) = (l2_env_t *)malloc(sizeof(l2_env_t))) == NULL)
  +    /* allocate environment structure */ 
  +    if ((env = (l2_env_t *)malloc(sizeof(l2_env_t))) == NULL)
           return L2_ERR_SYS;
   
  -    /* initialize env structure */
  -    (*env)->rvErrorInfo = L2_OK;
  -    (*env)->szErrorInfo[0] = '\0';
  -    (*env)->szError[0] = '\0';
  -    (*env)->levelmask = L2_LEVEL_ALL;
  -    (*env)->flushmask = L2_LEVEL_NONE;
  +    /* initialize environment structure */
  +    env->rvErrorInfo = L2_OK;
  +    env->szErrorInfo[0] = '\0';
  +    env->szError[0] = '\0';
  +    env->levelmask = L2_LEVEL_ALL;
  +    env->flushmask = L2_LEVEL_NONE;
       for (i = 0; i < L2_MAX_FORMATTERS; i++)
  -        (*env)->formatters[i].cb = NULL;
  +        env->formatters[i].cb = NULL;
  +
  +    /* pass new object to caller */
  +    (*envp) = env;
   
       return L2_OK;
   }
  @@ -96,13 +102,14 @@
           return L2_ERR_MEM;
   
       /* attach formatter to env */
  -    env->formatters[i].id   = id;
  -    env->formatters[i].ctx  = ctx;
  -    env->formatters[i].cb   = cb;
  +    env->formatters[i].id  = id;
  +    env->formatters[i].ctx = ctx;
  +    env->formatters[i].cb  = cb;
   
       return L2_OK;
   }
   
  +/* remember additional error information */
   l2_result_t l2_env_errorinfo(l2_env_t *env, l2_result_t rv, const char *fmt, ...)
   {
       va_list ap;
  @@ -120,6 +127,7 @@
       return L2_OK;
   }
   
  +/* retrieve string description of error result code */
   char *l2_env_strerror(l2_env_t *env, l2_result_t rv)
   {
       char *sz;
  Index: ossp-pkg/l2/l2_p.h
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 l2_p.h
  --- ossp-pkg/l2/l2_p.h	2001/11/04 13:46:25	1.28
  +++ ossp-pkg/l2/l2_p.h	2001/11/04 13:55:06	1.29
  @@ -32,6 +32,7 @@
   /* include standard headers */
   #include <stdio.h>
   #include <stdlib.h>
  +#include <string.h>
   #include <errno.h>
   
   /* include private headers */
  @@ -65,14 +66,17 @@
       if (expr) \
           cu(value)
   
  +/* some hard-coded sizes :-( */
   #define L2_MAX_MSGSIZE    4096
   #define L2_MAX_FORMATTERS  128
   
  +/* internal channel state */
   typedef enum {
       L2_CHSTATE_CREATED,
       L2_CHSTATE_OPENED
   } l2_chstate_t;
   
  +/* channel object structure */
   struct l2_channel_st {
       l2_env_t     *env;
       l2_chstate_t  state;
  @@ -85,12 +89,14 @@
       unsigned int  flushmask;
   };
   
  +/* formatter entry structure */
   typedef struct {
       l2_formatter_t cb;
       void *ctx;
       char id;
   } l2_formatter_entry_t;
   
  +/* environment object structure */
   struct l2_env_st {
       unsigned int          levelmask;
       unsigned int          flushmask;

From ossp-cvs-owner@ossp.org  Sun Nov  4 14:58:58 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fA4DwvB68465; Sun, 4 Nov 2001 14:58:57 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 5631A4CE750; Sun,  4 Nov 2001 14:58:57 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Message-Id: <20011104135857.5631A4CE750@visp.engelschall.com>
Date: Sun,  4 Nov 2001 14:58:57 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-Nov-2001 14:58:57
  Branch: HEAD                             Handle: 2001110413585600

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    remove now solved issues

  Summary:
    Revision    Changes     Path
    1.37        +0  -7      ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.36 -r1.37 TODO
  --- ossp-pkg/l2/TODO	2001/11/04 13:21:17	1.36
  +++ ossp-pkg/l2/TODO	2001/11/04 13:58:56	1.37
  @@ -61,23 +61,16 @@
   RSE:
   - channel API cleanup: open semantics
   - bind and udp parameters in socket channel
  -- socket channel convert to use SA library
   - prefix channels:
     - printf style without strftime;
   - l2tool [addr:]port
   - autoflush via shared memory and sub-process?
  -- IRC channel
   - NNTP channel
   - SNMP trap channel
  -- perhaps generalize channels and get rid of stream
  -  by putting formatters into external object referenced
  -  by channels and by providing a T-channel at the top.
   - perhaps replace too large PCRE stuff with smaller pattern
     matching stuff
   - file channel should optionally support file locking 
     via fcntl(3).
  -- syslog channel should support direct remote logging
  -- implement "filter" channel
   - idea of an asynch channel, that spawns a new process and
     communicates with the stemming channels via shared memory
   

From ossp-cvs-owner@ossp.org  Sun Nov  4 15:08:26 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fA4E8PB70383; Sun, 4 Nov 2001 15:08:25 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 8BE2B4CE750; Sun,  4 Nov 2001 15:08:25 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 Makefile.in l2.h.in l2_ch_nop.c l2_ch_null.c l...
Message-Id: <20011104140825.8BE2B4CE750@visp.engelschall.com>
Date: Sun,  4 Nov 2001 15:08:25 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-Nov-2001 15:08:25
  Branch: HEAD                             Handle: 2001110414082400

  Added files:
    ossp-pkg/l2             l2_ch_nop.c
  Modified files:
    ossp-pkg/l2             Makefile.in l2.h.in l2_ch_null.c l2_test.c

  Log:
    Simplify "null" (discard) output channel to minimum implementation and
    provide an additional "nop" (no-operation) filter channel for typical
    use as the root channel in a channel tree.

  Summary:
    Revision    Changes     Path
    1.28        +2  -0      ossp-pkg/l2/Makefile.in
    1.16        +1  -0      ossp-pkg/l2/l2.h.in
    1.1         +42 -0      ossp-pkg/l2/l2_ch_nop.c
    1.9         +8  -43     ossp-pkg/l2/l2_ch_null.c
    1.39        +14 -9      ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 Makefile.in
  --- ossp-pkg/l2/Makefile.in	2001/11/04 13:21:17	1.27
  +++ ossp-pkg/l2/Makefile.in	2001/11/04 14:08:24	1.28
  @@ -65,6 +65,7 @@
   OBJS = \
       l2_env.lo \
       l2_channel.lo \
  +    l2_ch_nop.lo \
       l2_ch_fd.lo \
       l2_ch_file.lo \
       l2_ch_pipe.lo \
  @@ -88,6 +89,7 @@
   SRCS = \
       l2_env.c \
       l2_channel.c \
  +    l2_ch_nop.c \
       l2_ch_fd.c \
       l2_ch_file.c \
       l2_ch_pipe.c \
  Index: ossp-pkg/l2/l2.h.in
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 l2.h.in
  --- ossp-pkg/l2/l2.h.in	2001/11/04 13:21:17	1.15
  +++ ossp-pkg/l2/l2.h.in	2001/11/04 14:08:24	1.16
  @@ -200,6 +200,7 @@
   extern l2_handler_t l2_handler_smtp;
   
   /* list of shipped (filter) channel handlers */
  +extern l2_handler_t l2_handler_nop;
   extern l2_handler_t l2_handler_filter;
   extern l2_handler_t l2_handler_prefix;
   extern l2_handler_t l2_handler_buffer;
  Index: ossp-pkg/l2/l2_ch_nop.c
  ============================================================
  $ cvs update -p -r1.1 l2_ch_nop.c
  /*
  **  L2 - OSSP Logging Library
  **  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP L2, a flexible logging library which
  **  can be found at http://www.ossp.org/pkg/l2/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  l2_ch_nop.c: no-operation channel implementation
  */
  
  #include "l2.h"
  
  l2_handler_t l2_handler_nop = {
      L2_CHANNEL_FILTER,
      NULL,
      NULL,
      NULL,
      NULL,
      NULL,
      NULL,
      NULL
  };
  
  Index: ossp-pkg/l2/l2_ch_null.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 l2_ch_null.c
  --- ossp-pkg/l2/l2_ch_null.c	2001/09/12 09:42:34	1.8
  +++ ossp-pkg/l2/l2_ch_null.c	2001/11/04 14:08:24	1.9
  @@ -24,54 +24,19 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  l2_ch_null.c: null channel implementation
  +**  l2_ch_null.c: null/discard channel implementation
   */
   
   #include "l2.h"
   
  -static l2_result_t hook_create(l2_context_t *ctx, l2_channel_t *ch)
  -{
  -    return L2_OK;
  -}
  -
  -static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
  -{
  -    return L2_OK;
  -}
  -
  -static l2_result_t hook_open(l2_context_t *ctx, l2_channel_t *ch)
  -{
  -    return L2_OK;
  -}
  -
  -static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch, l2_level_t level, const char *buf, size_t buf_size)
  -{
  -    return L2_OK;
  -}
  -
  -static l2_result_t hook_flush(l2_context_t *ctx, l2_channel_t *ch)
  -{
  -    return L2_OK;
  -}
  -
  -static l2_result_t hook_close(l2_context_t *ctx, l2_channel_t *ch)
  -{
  -    return L2_OK;
  -}
  -
  -static l2_result_t hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
  -{
  -    return L2_OK;
  -}
  -
   l2_handler_t l2_handler_null = {
       L2_CHANNEL_OUTPUT,
  -    hook_create,
  -    hook_configure,
  -    hook_open,
  -    hook_write,
  -    hook_flush,
  -    hook_close,
  -    hook_destroy
  +    NULL,
  +    NULL,
  +    NULL,
  +    NULL,
  +    NULL,
  +    NULL,
  +    NULL
   };
   
  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.38 -r1.39 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/11/04 13:21:17	1.38
  +++ ossp-pkg/l2/l2_test.c	2001/11/04 14:08:24	1.39
  @@ -57,6 +57,7 @@
   
   int main(int argc, char *argv[])
   {
  +    l2_channel_t *ch;
       l2_channel_t *chFilter;
       l2_channel_t *chPrefix;
       l2_channel_t *chBuffer;
  @@ -73,6 +74,10 @@
       if (l2_env_formatter(env, 'S', l2_util_fmt_dump, NULL) != L2_OK)
           die("failed to configure formatter for %%S");
   
  +    /* create nop channel */
  +    if ((l2_channel_create(&ch, env, &l2_handler_nop)) != L2_OK)
  +        die("failed to create nop channel");
  +
       /* create prefix channel */
       if ((l2_channel_create(&chPrefix, env, &l2_handler_prefix)) != L2_OK)
           die("failed to create prefix channel");
  @@ -118,28 +123,28 @@
           die("failed to level of smtp channel");
   
       /* build channel tree */
  -    if (l2_channel_link(chFilter, L2_LINK_CHILDS, chPrefix, chBuffer, chFile, NULL) != L2_OK)
  +    if (l2_channel_link(ch, L2_LINK_CHILDS, chFilter, chPrefix, chBuffer, chFile, NULL) != L2_OK)
           die("failed to link channels together as a child sequence");
  -    if (l2_channel_link(chFilter, L2_LINK_SIBLINGS, chSyslog, NULL) != L2_OK)
  +    if (l2_channel_link(ch, L2_LINK_SIBLINGS, chSyslog, NULL) != L2_OK)
           die("failed to link filter channel on top of syslog channel");
   
       /* open channel tree */
  -    if (l2_channel_open(chFilter) != L2_OK)
  +    if (l2_channel_open(ch) != L2_OK)
           die("failed to open channel tree");
       
       /* perform a few log operations */
  -    if (l2_channel_log(chFilter, L2_LEVEL_PANIC, "1: Checking localhost %s %{myparm}k <%{text}S><%{hex}S><%{base64}S>\n", "foo", 12345, "foo\1bar", 7, "foo\1bar", 7, "foo\1bar", 7) != L2_OK)
  +    if (l2_channel_log(ch, L2_LEVEL_PANIC, "1: Checking localhost %s %{myparm}k <%{text}S><%{hex}S><%{base64}S>\n", "foo", 12345, "foo\1bar", 7, "foo\1bar", 7, "foo\1bar", 7) != L2_OK)
           die("failed to log message #1 to channel");
  -    if (l2_channel_log(chFilter, L2_LEVEL_PANIC, "2: Shecking\n") != L2_OK)
  +    if (l2_channel_log(ch, L2_LEVEL_PANIC, "2: Shecking\n") != L2_OK)
           die("failed to log message #2 to channel");
  -    if (l2_channel_log(chFilter, L2_LEVEL_PANIC, "3: Checking localhost %s %{myparm}k <%{text}S><%{hex}S><%{base64}S>\n", "foo", 12345, "foo\1bar", 7, "foo\1bar", 7, "foo\1bar", 7) != L2_OK)
  +    if (l2_channel_log(ch, L2_LEVEL_PANIC, "3: Checking localhost %s %{myparm}k <%{text}S><%{hex}S><%{base64}S>\n", "foo", 12345, "foo\1bar", 7, "foo\1bar", 7, "foo\1bar", 7) != L2_OK)
           die("failed to log message #3 to channel");
  -    if (l2_channel_log(chFilter, L2_LEVEL_PANIC, "4: Shecking\n") != L2_OK)
  +    if (l2_channel_log(ch, L2_LEVEL_PANIC, "4: Shecking\n") != L2_OK)
           die("failed to log message #4 to channel");
   
       /* destroy channel tree */
  -    if (l2_channel_destroy(chFilter) != L2_OK)
  -        die("failed to destroy stream");
  +    if (l2_channel_destroy(ch) != L2_OK)
  +        die("failed to destroy channel tree");
   
       return 0;
   }

From ossp-cvs-owner@ossp.org  Sun Nov  4 15:11:06 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fA4EB5B71108; Sun, 4 Nov 2001 15:11:05 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 202BC4CE750; Sun,  4 Nov 2001 15:11:05 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_buffer.c
Message-Id: <20011104141105.202BC4CE750@visp.engelschall.com>
Date: Sun,  4 Nov 2001 15:11:05 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-Nov-2001 15:11:05
  Branch: HEAD                             Handle: 2001110414110400

  Modified files:
    ossp-pkg/l2             l2_ch_buffer.c

  Log:
    be pedantic about syntax in order to be really portable

  Summary:
    Revision    Changes     Path
    1.32        +5  -5      ossp-pkg/l2/l2_ch_buffer.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_buffer.c
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 l2_ch_buffer.c
  --- ossp-pkg/l2/l2_ch_buffer.c	2001/11/03 22:51:36	1.31
  +++ ossp-pkg/l2/l2_ch_buffer.c	2001/11/04 14:11:04	1.32
  @@ -47,7 +47,7 @@
       int         bufsize;
       long        bufinterval;
       struct      sigaction sigalrm;
  -#if defined HAVE_SETITIMER && defined HAVE_SYS_TIME_H
  +#if defined(HAVE_SETITIMER) && defined(HAVE_SYS_TIME_H)
       struct      itimerval valprev;
   #endif
       int         levelflush;
  @@ -57,7 +57,7 @@
   /* Sets the VIRTUAL timer to preconfigured value in cfg */
   static int set_alarm(l2_ch_buffer_t *cfg)
   {
  -#if defined HAVE_SETITIMER && defined HAVE_SYS_TIME_H
  +#if defined(HAVE_SETITIMER) && defined(HAVE_SYS_TIME_H)
       struct itimerval valtest, valnew;
   
       /* initialize auto vars before using them */
  @@ -91,7 +91,7 @@
   /* Resets the VIRTUAL timer to preconfigured value in cfg */
   static int reset_alarm(l2_ch_buffer_t *cfg)
   {
  -#if defined HAVE_SETITIMER && defined HAVE_SYS_TIME_H
  +#if defined(HAVE_SETITIMER) && defined(HAVE_SYS_TIME_H)
       struct itimerval valnew;
   
       /* initialize auto vars before using them */
  @@ -144,7 +144,7 @@
       cfg->levelflush  = 0;
       cfg->level       = L2_LEVEL_NONE;
       memset(&cfg->sigalrm, 0, sizeof(cfg->sigalrm));
  -#if defined HAVE_SETITIMER && defined HAVE_SYS_TIME_H
  +#if defined(HAVE_SETITIMER) && defined(HAVE_SYS_TIME_H)
       memset(&cfg->valprev, 0, sizeof(cfg->valprev));
   #endif
   
  @@ -292,7 +292,7 @@
       l2_result_t rv;
   
       if ((cfg->bufinterval != 0) && (cfg->bufinterval != -1L)) {
  -#if defined HAVE_SETITIMER && defined HAVE_SYS_TIME_H
  +#if defined(HAVE_SETITIMER) && defined(HAVE_SYS_TIME_H)
           if (setitimer(L2_BUFFER_TIMER, &cfg->valprev, 0)) /* restore timer */
               return L2_ERR_SYS;
   #else

From ossp-cvs-owner@ossp.org  Mon Nov  5 12:02:45 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fA5B2iB34878; Mon, 5 Nov 2001 12:02:44 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 36D224CE6E2; Mon,  5 Nov 2001 12:02:44 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 acconfig.h configure.ac
Message-Id: <20011105110244.36D224CE6E2@visp.engelschall.com>
Date: Mon,  5 Nov 2001 12:02:44 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   05-Nov-2001 12:02:44
  Branch: HEAD                             Handle: 2001110511024300

  Modified files:
    ossp-pkg/l2             acconfig.h configure.ac

  Log:
    fix Autoconf stuff after recent SA changes

  Summary:
    Revision    Changes     Path
    1.2         +4  -0      ossp-pkg/l2/acconfig.h
    1.14        +1  -1      ossp-pkg/l2/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/l2/acconfig.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 acconfig.h
  --- ossp-pkg/l2/acconfig.h	2001/09/11 10:37:04	1.1
  +++ ossp-pkg/l2/acconfig.h	2001/11/05 11:02:43	1.2
  @@ -2,3 +2,7 @@
   /* optional Dmalloc support */
   #undef WITH_DMALLOC
   
  +/* SA stuff */
  +#undef HAVE_SOCKLEN_T
  +#undef HAVE_SSIZE_T
  +
  Index: ossp-pkg/l2/configure.ac
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 configure.ac
  --- ossp-pkg/l2/configure.ac	2001/10/31 16:47:05	1.13
  +++ ossp-pkg/l2/configure.ac	2001/11/05 11:02:43	1.14
  @@ -86,7 +86,7 @@
   AC_CHECK_FUNCS(inet_aton inet_pton inet_ntoa inet_ntop snprintf vsnprintf setitimer)
   
   sinclude(l2_ut_sa.ac)
  -AC_CHECK_SA
  +SA_CHECK_ALL
   
   AC_CHECK_EXTLIB([Dmalloc], dmalloc, dmalloc_debug, dmalloc.h, AC_DEFINE(WITH_DMALLOC))
   

From ossp-cvs-owner@ossp.org  Mon Nov  5 21:39:38 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fA5KdaB05196; Mon, 5 Nov 2001 21:39:36 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 984414CE6E2; Mon,  5 Nov 2001 21:39:36 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 Makefile.in l2.h.in l2_ch_noop.c l2_ch_nop.c l...
Message-Id: <20011105203936.984414CE6E2@visp.engelschall.com>
Date: Mon,  5 Nov 2001 21:39:36 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   05-Nov-2001 21:39:36
  Branch: HEAD                             Handle: 197001010100001004989175

  Added files:
    ossp-pkg/l2             l2_ch_noop.c
  Modified files:
    ossp-pkg/l2             Makefile.in l2.h.in l2_test.c
  Removed files:
    ossp-pkg/l2             l2_ch_nop.c

  Log:
    Seems like my long years of programming in assembly language still have
    an impact on my thinking. Change "nop" (assembly mnemonic) to "noop"
    (english abbreviation) in the name of our no-operation channel. Thanks
    to Michael for catching this.

  Summary:
    Revision    Changes     Path
    1.29        +14 -13     ossp-pkg/l2/Makefile.in
    1.17        +1  -1      ossp-pkg/l2/l2.h.in
    1.1         +42 -0      ossp-pkg/l2/l2_ch_noop.c
    NONE        +0  -42     ossp-pkg/l2/l2_ch_nop.c
    1.40        +3  -3      ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 Makefile.in
  --- ossp-pkg/l2/Makefile.in	2001/11/04 14:08:24	1.28
  +++ ossp-pkg/l2/Makefile.in	2001/11/05 20:39:35	1.29
  @@ -65,7 +65,7 @@
   OBJS = \
       l2_env.lo \
       l2_channel.lo \
  -    l2_ch_nop.lo \
  +    l2_ch_noop.lo \
       l2_ch_fd.lo \
       l2_ch_file.lo \
       l2_ch_pipe.lo \
  @@ -89,7 +89,7 @@
   SRCS = \
       l2_env.c \
       l2_channel.c \
  -    l2_ch_nop.c \
  +    l2_ch_noop.c \
       l2_ch_fd.c \
       l2_ch_file.c \
       l2_ch_pipe.c \
  @@ -298,23 +298,24 @@
   $(OBJS): Makefile
   
   #   AUTOMATICALLY GENERATED DEPENDENCY LIST - DO NOT EDIT
  -l2_env.o: l2_env.c l2.h l2_p.h l2_config.h l2_ut_pcre.h l2_ut_sa.h
  -l2_channel.o: l2_channel.c l2.h l2_p.h l2_config.h l2_ut_pcre.h l2_ut_sa.h
  +l2_env.o: l2_env.c l2_p.h l2.h l2_config.h l2_ut_format.h l2_ut_pcre.h l2_ut_sa.h
  +l2_channel.o: l2_channel.c l2_p.h l2.h l2_config.h l2_ut_format.h l2_ut_pcre.h l2_ut_sa.h
  +l2_ch_noop.o: l2_ch_noop.c l2.h
   l2_ch_fd.o: l2_ch_fd.c l2.h
   l2_ch_file.o: l2_ch_file.c l2.h
  -l2_ch_pipe.o: l2_ch_pipe.c l2.h l2_p.h l2_config.h l2_ut_pcre.h l2_ut_sa.h
  -l2_ch_syslog.o: l2_ch_syslog.c l2.h l2_p.h l2_config.h l2_ut_pcre.h l2_ut_sa.h
  -l2_ch_socket.o: l2_ch_socket.c l2.h l2_p.h l2_config.h l2_ut_pcre.h l2_ut_sa.h
  -l2_ch_irc.o: l2_ch_irc.c l2.h l2_p.h l2_config.h l2_ut_pcre.h l2_ut_sa.h
  -l2_ch_smtp.o: l2_ch_smtp.c l2.h l2_p.h l2_config.h l2_ut_pcre.h l2_ut_sa.h
  +l2_ch_pipe.o: l2_ch_pipe.c l2.h l2_p.h l2_config.h l2_ut_format.h l2_ut_pcre.h l2_ut_sa.h
  +l2_ch_syslog.o: l2_ch_syslog.c l2.h l2_p.h l2_config.h l2_ut_format.h l2_ut_pcre.h l2_ut_sa.h
  +l2_ch_socket.o: l2_ch_socket.c l2.h l2_p.h l2_config.h l2_ut_format.h l2_ut_pcre.h l2_ut_sa.h
  +l2_ch_irc.o: l2_ch_irc.c l2.h l2_p.h l2_config.h l2_ut_format.h l2_ut_pcre.h l2_ut_sa.h
  +l2_ch_smtp.o: l2_ch_smtp.c l2.h l2_p.h l2_config.h l2_ut_format.h l2_ut_pcre.h l2_ut_sa.h
   l2_ch_null.o: l2_ch_null.c l2.h
   l2_ch_filter.o: l2_ch_filter.c l2.h l2_ut_pcre.h
   l2_ch_prefix.o: l2_ch_prefix.c l2.h
  -l2_ch_buffer.o: l2_ch_buffer.c l2.h l2_p.h l2_config.h l2_ut_pcre.h l2_ut_sa.h
  -l2_ut_format.o: l2_ut_format.c l2.h l2_p.h l2_config.h l2_ut_pcre.h l2_ut_sa.h
  -l2_ut_param.o: l2_ut_param.c l2.h l2_p.h l2_config.h l2_ut_pcre.h l2_ut_sa.h
  +l2_ch_buffer.o: l2_ch_buffer.c l2.h l2_p.h l2_config.h l2_ut_format.h l2_ut_pcre.h l2_ut_sa.h
  +l2_ut_format.o: l2_ut_format.c l2_ut_format.h
  +l2_ut_param.o: l2_ut_param.c l2.h l2_p.h l2_config.h l2_ut_format.h l2_ut_pcre.h l2_ut_sa.h
   l2_ut_pcre.o: l2_ut_pcre.c l2_ut_pcre.h l2_ut_pcre.tab
  -l2_ut_level.o: l2_ut_level.c l2.h l2_p.h l2_config.h l2_ut_pcre.h l2_ut_sa.h
  +l2_ut_level.o: l2_ut_level.c l2.h l2_p.h l2_config.h l2_ut_format.h l2_ut_pcre.h l2_ut_sa.h
   l2_ut_fmtcb.o: l2_ut_fmtcb.c l2.h
   l2_ut_sa.o: l2_ut_sa.c l2_config.h l2_ut_sa.h
   l2_version.o: l2_version.c l2_version.c
  Index: ossp-pkg/l2/l2.h.in
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 l2.h.in
  --- ossp-pkg/l2/l2.h.in	2001/11/04 14:08:24	1.16
  +++ ossp-pkg/l2/l2.h.in	2001/11/05 20:39:35	1.17
  @@ -200,7 +200,7 @@
   extern l2_handler_t l2_handler_smtp;
   
   /* list of shipped (filter) channel handlers */
  -extern l2_handler_t l2_handler_nop;
  +extern l2_handler_t l2_handler_noop;
   extern l2_handler_t l2_handler_filter;
   extern l2_handler_t l2_handler_prefix;
   extern l2_handler_t l2_handler_buffer;
  Index: ossp-pkg/l2/l2_ch_noop.c
  ============================================================
  $ cvs update -p -r1.1 l2_ch_noop.c
  /*
  **  L2 - OSSP Logging Library
  **  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP L2, a flexible logging library which
  **  can be found at http://www.ossp.org/pkg/l2/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  l2_ch_noop.c: no-operation channel implementation
  */
  
  #include "l2.h"
  
  l2_handler_t l2_handler_noop = {
      L2_CHANNEL_FILTER,
      NULL,
      NULL,
      NULL,
      NULL,
      NULL,
      NULL,
      NULL
  };
  
    Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.39 -r1.40 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/11/04 14:08:24	1.39
  +++ ossp-pkg/l2/l2_test.c	2001/11/05 20:39:35	1.40
  @@ -74,9 +74,9 @@
       if (l2_env_formatter(env, 'S', l2_util_fmt_dump, NULL) != L2_OK)
           die("failed to configure formatter for %%S");
   
  -    /* create nop channel */
  -    if ((l2_channel_create(&ch, env, &l2_handler_nop)) != L2_OK)
  -        die("failed to create nop channel");
  +    /* create noop channel */
  +    if ((l2_channel_create(&ch, env, &l2_handler_noop)) != L2_OK)
  +        die("failed to create noop channel");
   
       /* create prefix channel */
       if ((l2_channel_create(&chPrefix, env, &l2_handler_prefix)) != L2_OK)

From ossp-cvs-owner@ossp.org  Tue Nov  6 16:02:51 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fA6F2nB44274; Tue, 6 Nov 2001 16:02:49 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id AC6474CE770; Tue,  6 Nov 2001 16:02:49 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.h.in l2_channel.c l2_test.c
Message-Id: <20011106150249.AC6474CE770@visp.engelschall.com>
Date: Tue,  6 Nov 2001 16:02:49 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   06-Nov-2001 16:02:49
  Branch: HEAD                             Handle: 2001110615024900

  Modified files:
    ossp-pkg/l2             l2.h.in l2_channel.c l2_test.c

  Log:
    Change semantics of sibling linkage operations in order to fulfill the
    requirements in the forthcoming channel tree specification parser.

  Summary:
    Revision    Changes     Path
    1.18        +2  -2      ossp-pkg/l2/l2.h.in
    1.24        +45 -38     ossp-pkg/l2/l2_channel.c
    1.41        +4  -4      ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2.h.in
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 l2.h.in
  --- ossp-pkg/l2/l2.h.in	2001/11/05 20:39:35	1.17
  +++ ossp-pkg/l2/l2.h.in	2001/11/06 15:02:49	1.18
  @@ -163,8 +163,8 @@
   
   /* list of linking modes */
   typedef enum {
  -    L2_LINK_CHILDS,
  -    L2_LINK_SIBLINGS
  +    L2_LINK_CHILD,
  +    L2_LINK_SIBLING
   } l2_link_t;
   
   /* channel handler specification structure */
  Index: ossp-pkg/l2/l2_channel.c
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 l2_channel.c
  --- ossp-pkg/l2/l2_channel.c	2001/11/04 13:55:06	1.23
  +++ ossp-pkg/l2/l2_channel.c	2001/11/06 15:02:49	1.24
  @@ -105,55 +105,62 @@
   }
   
   /* link channels */
  -l2_result_t l2_channel_link(l2_channel_t *chR, l2_link_t id, l2_channel_t *chC, ...)
  +l2_result_t l2_channel_link(l2_channel_t *ch0, l2_link_t id, l2_channel_t *ch, ...)
   {
       l2_channel_t *chT;
       l2_channel_t *chN;
       va_list ap;
   
       /* argument sanity check */
  -    if (chR == NULL || chC == NULL)
  +    if (ch0 == NULL || ch == NULL)
           return L2_ERR_ARG;
   
  -    /* make sure root channel is in state "created" */
  -    if (chR->state != L2_CHSTATE_CREATED)
  -        return L2_ERR_USE;
  -
  -    /* make sure root channel is a filter channel */
  -    if (chR->handler.type != L2_CHANNEL_FILTER)
  -        return L2_ERR_USE;
  -
  -    /* check childs */
  -    va_start(ap, chC);
  -    chT = chC;
  -    do {
  -        chN = (l2_channel_t *)va_arg(ap, l2_channel_t *);
  -        if (id == L2_LINK_CHILDS && chN != NULL)
  -            if (chT->handler.type != L2_CHANNEL_FILTER)
  +    /* perform either child or sibling linking operation(s) */
  +    if (id == L2_LINK_CHILD) {
  +        /* make sure child parents are filters only */
  +        if (ch0->handler.type != L2_CHANNEL_FILTER)
  +            return L2_ERR_USE;
  +        va_start(ap, ch);
  +        chT = ch;
  +        do {
  +            chN = (l2_channel_t *)va_arg(ap, l2_channel_t *);
  +            if (chN != NULL && chT->handler.type != L2_CHANNEL_FILTER)
                   return L2_ERR_USE;
  -    } while ((chT = chN) != NULL);
  -    va_end(ap);
  +        } while ((chT = chN) != NULL);
  +        va_end(ap);
   
  -    /* perform link operation(s) */
  -    va_start(ap, chC);
  -    do {
  -        chC->parent  = chR;
  -        chC->sibling = NULL;
  -        chC->child   = NULL;
  -        if (chR->child == NULL)
  -            chR->child = chC;
  -        else {
  -            chT = chR->child;
  -            while (chT->sibling != NULL)
  -                chT = chT->sibling;
  -            chT->sibling = chC;
  -        }
  -        if (id == L2_LINK_CHILDS)
  -            chR = chC;
  -        chC = (l2_channel_t *)va_arg(ap, l2_channel_t *);
  +        /* perform link operation(s) */
  +        va_start(ap, ch);
  +        do {
  +            ch->parent  = ch0;
  +            ch->sibling = NULL;
  +            ch->child   = NULL;
  +            if (ch0->child == NULL)
  +                ch0->child = ch;
  +            else {
  +                chT = ch0->child;
  +                while (chT->sibling != NULL)
  +                    chT = chT->sibling;
  +                chT->sibling = ch;
  +            }
  +            ch0 = ch;
  +            ch = (l2_channel_t *)va_arg(ap, l2_channel_t *);
  +        } while (ch != NULL);
  +        va_end(ap);
  +    }
  +    else if (id == L2_LINK_SIBLING) {
  +        /* perform link operation(s) */
  +        va_start(ap, ch);
  +        do {
  +            ch0->sibling = ch;
  +            ch->parent   = ch0->parent;
  +            ch->sibling  = NULL;
  +            ch->child    = NULL;
  +            ch0 = ch;
  +            ch = (l2_channel_t *)va_arg(ap, l2_channel_t *);
  +        } while (ch != NULL);
  +        va_end(ap);
       }
  -    while (chC != NULL);
  -    va_end(ap);
   
       return L2_OK;
   }
  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.40 -r1.41 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/11/05 20:39:35	1.40
  +++ ossp-pkg/l2/l2_test.c	2001/11/06 15:02:49	1.41
  @@ -123,10 +123,10 @@
           die("failed to level of smtp channel");
   
       /* build channel tree */
  -    if (l2_channel_link(ch, L2_LINK_CHILDS, chFilter, chPrefix, chBuffer, chFile, NULL) != L2_OK)
  -        die("failed to link channels together as a child sequence");
  -    if (l2_channel_link(ch, L2_LINK_SIBLINGS, chSyslog, NULL) != L2_OK)
  -        die("failed to link filter channel on top of syslog channel");
  +    if (l2_channel_link(ch, L2_LINK_CHILD, chFilter, chPrefix, chBuffer, chFile, NULL) != L2_OK)
  +        die("failed to link file-related channels together as a child sequence");
  +    if (l2_channel_link(ch, L2_LINK_CHILD, chSyslog, NULL) != L2_OK)
  +        die("failed to link syslog-related channels together as a child sequence");
   
       /* open channel tree */
       if (l2_channel_open(ch) != L2_OK)

From ossp-cvs-owner@ossp.org  Wed Nov  7 10:28:47 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fA79SkT84284; Wed, 7 Nov 2001 10:28:46 +0100 (CET)
Date: Wed, 7 Nov 2001 10:28:46 +0100 (CET)
Message-Id: <200111070928.fA79SkT84284@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   07-Nov-2001 10:28:46
  Branch: HEAD                             Handle: 2001110709284500

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    Good group lunchtime idea.

  Summary:
    Revision    Changes     Path
    1.38        +4  -0      ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.37 -r1.38 TODO
  --- ossp-pkg/l2/TODO	2001/11/04 13:58:56	1.37
  +++ ossp-pkg/l2/TODO	2001/11/07 09:28:45	1.38
  @@ -74,6 +74,10 @@
   - idea of an asynch channel, that spawns a new process and
     communicates with the stemming channels via shared memory
   
  +Lunchtime:
  +- Correct DNS resolve blocking problem by using a funky asynchronous DNS lib.
  +  This leads to easy reimplementation of the prefix channel (asynchronous)
  +
   MS:
   - pipe channel may need a big overhaul if we redesign
     it around the asynch channel principle

From ossp-cvs-owner@ossp.org  Wed Nov  7 12:37:21 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fA7BbJB02257; Wed, 7 Nov 2001 12:37:20 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id D43034CE7FA; Wed,  7 Nov 2001 12:37:19 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.h.in l2_ch_buffer.c l2_ch_fd.c l2_ch_file.c...
Message-Id: <20011107113719.D43034CE7FA@visp.engelschall.com>
Date: Wed,  7 Nov 2001 12:37:19 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   07-Nov-2001 12:37:19
  Branch: HEAD                             Handle: 2001110711371800

  Modified files:
    ossp-pkg/l2             l2.h.in l2_ch_buffer.c l2_ch_fd.c l2_ch_file.c
                            l2_ch_filter.c l2_ch_irc.c l2_ch_noop.c
                            l2_ch_null.c l2_ch_pipe.c l2_ch_prefix.c
                            l2_ch_smtp.c l2_ch_socket.c l2_ch_syslog.c
                            l2_channel.c l2_env.c l2_p.h l2_test.c

  Log:
    More preparations for forthcoming channel tree specification parser
    (especially to allow the parser to determine the handler structure
    from a handler name without introducing another and this way redundant
    sub-API):
    
    - add "char *name" to l2_handler_t in order to tag each
      handler structure with the corresponding channel name
    
    - add l2_env_handler() function to add handler to
      l2_env_t objects. All l2_handler_xxxx are automatically
      pre-configured there after l2_env_create().
    
    - change l2_channel_create() to take a "const char *name"
      (handler name) instead of the "l2_handler_t *h" (handler
      pointer) to make the stuff consistent and more clear.
    
    - adjust l2_test.c to reflect the changes.

  Summary:
    Revision    Changes     Path
    1.19        +5  -3      ossp-pkg/l2/l2.h.in
    1.33        +1  -0      ossp-pkg/l2/l2_ch_buffer.c
    1.11        +1  -0      ossp-pkg/l2/l2_ch_fd.c
    1.18        +1  -0      ossp-pkg/l2/l2_ch_file.c
    1.13        +1  -0      ossp-pkg/l2/l2_ch_filter.c
    1.3         +1  -0      ossp-pkg/l2/l2_ch_irc.c
    1.2         +1  -0      ossp-pkg/l2/l2_ch_noop.c
    1.10        +1  -0      ossp-pkg/l2/l2_ch_null.c
    1.27        +1  -0      ossp-pkg/l2/l2_ch_pipe.c
    1.17        +1  -0      ossp-pkg/l2/l2_ch_prefix.c
    1.7         +1  -0      ossp-pkg/l2/l2_ch_smtp.c
    1.33        +1  -0      ossp-pkg/l2/l2_ch_socket.c
    1.26        +1  -0      ossp-pkg/l2/l2_ch_syslog.c
    1.25        +15 -2      ossp-pkg/l2/l2_channel.c
    1.3         +37 -0      ossp-pkg/l2/l2_env.c
    1.30        +2  -0      ossp-pkg/l2/l2_p.h
    1.42        +7  -7      ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2.h.in
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 l2.h.in
  --- ossp-pkg/l2/l2.h.in	2001/11/06 15:02:49	1.18
  +++ ossp-pkg/l2/l2.h.in	2001/11/07 11:37:18	1.19
  @@ -169,6 +169,7 @@
   
   /* channel handler specification structure */
   struct l2_handler_st {
  +    const char *name;
       l2_chtype_t type;
       l2_result_t (*create)   (l2_context_t *ctx, l2_channel_t *ch);
       l2_result_t (*configure)(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap);
  @@ -190,7 +191,7 @@
       va_list      *ap        /* in/out arg: variable argument pointer */
   );
   
  -/* list of shipped (output) channel handlers */
  +/* list of shipped (output) channel handlers (pre-configured in l2_env_t objects) */
   extern l2_handler_t l2_handler_null;
   extern l2_handler_t l2_handler_fd;
   extern l2_handler_t l2_handler_file;
  @@ -199,7 +200,7 @@
   extern l2_handler_t l2_handler_syslog;
   extern l2_handler_t l2_handler_smtp;
   
  -/* list of shipped (filter) channel handlers */
  +/* list of shipped (filter) channel handlers (pre-configured in l2_env_t objects) */
   extern l2_handler_t l2_handler_noop;
   extern l2_handler_t l2_handler_filter;
   extern l2_handler_t l2_handler_prefix;
  @@ -210,11 +211,12 @@
   l2_result_t   l2_env_destroy        (l2_env_t *env);
   l2_result_t   l2_env_levels         (l2_env_t *env, unsigned int levelmask, unsigned int flushmask);
   l2_result_t   l2_env_formatter      (l2_env_t *env, char id, l2_formatter_t cb, l2_context_t *ctx);
  +l2_result_t   l2_env_handler        (l2_env_t *env, l2_handler_t *h);
   l2_result_t   l2_env_errorinfo      (l2_env_t *env, l2_result_t rv, const char *fmt, ...);
   char         *l2_env_strerror       (l2_env_t *env, l2_result_t rv);
   
   /* channel operations */
  -l2_result_t   l2_channel_create     (l2_channel_t **ch, l2_env_t *env, l2_handler_t *h);
  +l2_result_t   l2_channel_create     (l2_channel_t **ch, l2_env_t *env, const char *name);
   l2_result_t   l2_channel_destroy    (l2_channel_t *ch);
   l2_result_t   l2_channel_levels     (l2_channel_t *ch, unsigned int levelmask, unsigned int flushmask);
   l2_result_t   l2_channel_configure  (l2_channel_t *ch, const char *fmt, ...);
  Index: ossp-pkg/l2/l2_ch_buffer.c
  ============================================================
  $ cvs diff -u -r1.32 -r1.33 l2_ch_buffer.c
  --- ossp-pkg/l2/l2_ch_buffer.c	2001/11/04 14:11:04	1.32
  +++ ossp-pkg/l2/l2_ch_buffer.c	2001/11/07 11:37:18	1.33
  @@ -338,6 +338,7 @@
   
   /* exported channel handler structure */
   l2_handler_t l2_handler_buffer = {
  +    "buffer",
       L2_CHANNEL_FILTER,
       hook_create,
       hook_configure,
  Index: ossp-pkg/l2/l2_ch_fd.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 l2_ch_fd.c
  --- ossp-pkg/l2/l2_ch_fd.c	2001/09/12 09:35:57	1.10
  +++ ossp-pkg/l2/l2_ch_fd.c	2001/11/07 11:37:18	1.11
  @@ -145,6 +145,7 @@
   
   /* exported channel handler structure */
   l2_handler_t l2_handler_fd = {
  +    "fd",
       L2_CHANNEL_OUTPUT,
       hook_create,
       hook_configure,
  Index: ossp-pkg/l2/l2_ch_file.c
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 l2_ch_file.c
  --- ossp-pkg/l2/l2_ch_file.c	2001/09/12 09:42:34	1.17
  +++ ossp-pkg/l2/l2_ch_file.c	2001/11/07 11:37:18	1.18
  @@ -137,6 +137,7 @@
   
   /* exported channel handler structure */
   l2_handler_t l2_handler_file = {
  +    "file",
       L2_CHANNEL_OUTPUT,
       hook_create,
       hook_configure,
  Index: ossp-pkg/l2/l2_ch_filter.c
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 l2_ch_filter.c
  --- ossp-pkg/l2/l2_ch_filter.c	2001/11/04 13:21:17	1.12
  +++ ossp-pkg/l2/l2_ch_filter.c	2001/11/07 11:37:18	1.13
  @@ -137,6 +137,7 @@
   }
   
   l2_handler_t l2_handler_filter = {
  +    "filter",
       L2_CHANNEL_FILTER,
       hook_create,
       hook_configure,
  Index: ossp-pkg/l2/l2_ch_irc.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2_ch_irc.c
  --- ossp-pkg/l2/l2_ch_irc.c	2001/10/19 13:06:35	1.2
  +++ ossp-pkg/l2/l2_ch_irc.c	2001/11/07 11:37:18	1.3
  @@ -289,6 +289,7 @@
   
   /* exported channel handler structure */
   l2_handler_t l2_handler_irc = {
  +    "irc",
       L2_CHANNEL_OUTPUT,
       hook_create,
       hook_configure,
  Index: ossp-pkg/l2/l2_ch_noop.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 l2_ch_noop.c
  --- ossp-pkg/l2/l2_ch_noop.c	2001/11/05 20:39:35	1.1
  +++ ossp-pkg/l2/l2_ch_noop.c	2001/11/07 11:37:18	1.2
  @@ -30,6 +30,7 @@
   #include "l2.h"
   
   l2_handler_t l2_handler_noop = {
  +    "noop",
       L2_CHANNEL_FILTER,
       NULL,
       NULL,
  Index: ossp-pkg/l2/l2_ch_null.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 l2_ch_null.c
  --- ossp-pkg/l2/l2_ch_null.c	2001/11/04 14:08:24	1.9
  +++ ossp-pkg/l2/l2_ch_null.c	2001/11/07 11:37:18	1.10
  @@ -30,6 +30,7 @@
   #include "l2.h"
   
   l2_handler_t l2_handler_null = {
  +    "null",
       L2_CHANNEL_OUTPUT,
       NULL,
       NULL,
  Index: ossp-pkg/l2/l2_ch_pipe.c
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 l2_ch_pipe.c
  --- ossp-pkg/l2/l2_ch_pipe.c	2001/10/30 18:56:13	1.26
  +++ ossp-pkg/l2/l2_ch_pipe.c	2001/11/07 11:37:18	1.27
  @@ -411,6 +411,7 @@
   
   /* exported channel handler structure */
   l2_handler_t l2_handler_pipe = {
  +    "pipe",
       L2_CHANNEL_OUTPUT,
       hook_create,
       hook_configure,
  Index: ossp-pkg/l2/l2_ch_prefix.c
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 l2_ch_prefix.c
  --- ossp-pkg/l2/l2_ch_prefix.c	2001/11/03 22:51:36	1.16
  +++ ossp-pkg/l2/l2_ch_prefix.c	2001/11/07 11:37:18	1.17
  @@ -184,6 +184,7 @@
   
   /* exported channel handler structure */
   l2_handler_t l2_handler_prefix = {
  +    "prefix",
       L2_CHANNEL_FILTER,
       hook_create,
       hook_configure,
  Index: ossp-pkg/l2/l2_ch_smtp.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 l2_ch_smtp.c
  --- ossp-pkg/l2/l2_ch_smtp.c	2001/10/19 11:55:00	1.6
  +++ ossp-pkg/l2/l2_ch_smtp.c	2001/11/07 11:37:18	1.7
  @@ -330,6 +330,7 @@
   
   /* exported channel handler structure */
   l2_handler_t l2_handler_smtp = {
  +    "smtp",
       L2_CHANNEL_OUTPUT,
       hook_create,
       hook_configure,
  Index: ossp-pkg/l2/l2_ch_socket.c
  ============================================================
  $ cvs diff -u -r1.32 -r1.33 l2_ch_socket.c
  --- ossp-pkg/l2/l2_ch_socket.c	2001/11/03 20:49:25	1.32
  +++ ossp-pkg/l2/l2_ch_socket.c	2001/11/07 11:37:18	1.33
  @@ -201,6 +201,7 @@
   
   /* exported channel handler structure */
   l2_handler_t l2_handler_socket = {
  +    "socket",
       L2_CHANNEL_OUTPUT,
       hook_create,
       hook_configure,
  Index: ossp-pkg/l2/l2_ch_syslog.c
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 l2_ch_syslog.c
  --- ossp-pkg/l2/l2_ch_syslog.c	2001/10/12 13:51:41	1.25
  +++ ossp-pkg/l2/l2_ch_syslog.c	2001/11/07 11:37:18	1.26
  @@ -351,6 +351,7 @@
   
   /* exported channel handler structure */
   l2_handler_t l2_handler_syslog = {
  +    "syslog",
       L2_CHANNEL_OUTPUT,
       hook_create,
       hook_configure,
  Index: ossp-pkg/l2/l2_channel.c
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 l2_channel.c
  --- ossp-pkg/l2/l2_channel.c	2001/11/06 15:02:49	1.24
  +++ ossp-pkg/l2/l2_channel.c	2001/11/07 11:37:18	1.25
  @@ -67,13 +67,26 @@
    */
   
   /* create channel */
  -l2_result_t l2_channel_create(l2_channel_t **chp, l2_env_t *env, l2_handler_t *h)
  +l2_result_t l2_channel_create(l2_channel_t **chp, l2_env_t *env, const char *name)
   {
       l2_channel_t *ch;
  +    l2_handler_t *h;
  +    int i;
   
       /* argument sanity check */
  -    if (h == NULL || env == NULL)
  +    if (env == NULL || name == NULL)
           return L2_ERR_ARG;
  +
  +    /* lookup channel handler */
  +    h = NULL;
  +    for (i = 0; i < L2_MAX_HANDLERS && env->handlers[i] != NULL; i++) {
  +        if (strcmp(env->handlers[i]->name, name) == 0) {
  +            h = env->handlers[i];
  +            break;
  +        }
  +    }
  +    if (h == NULL)
  +        return L2_ERR_CH;
   
       /* allocate channel structure */
       if ((ch = (l2_channel_t *)malloc(sizeof(l2_channel_t))) == NULL)
  Index: ossp-pkg/l2/l2_env.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2_env.c
  --- ossp-pkg/l2/l2_env.c	2001/11/04 13:55:06	1.2
  +++ ossp-pkg/l2/l2_env.c	2001/11/07 11:37:18	1.3
  @@ -51,7 +51,22 @@
       env->flushmask = L2_LEVEL_NONE;
       for (i = 0; i < L2_MAX_FORMATTERS; i++)
           env->formatters[i].cb = NULL;
  +    for (i = 0; i < L2_MAX_HANDLERS; i++)
  +        env->handlers[i] = NULL;
   
  +    /* pre-configure all handlers we ship */
  +    l2_env_handler(env, &l2_handler_null);
  +    l2_env_handler(env, &l2_handler_fd);
  +    l2_env_handler(env, &l2_handler_file);
  +    l2_env_handler(env, &l2_handler_pipe);
  +    l2_env_handler(env, &l2_handler_socket);
  +    l2_env_handler(env, &l2_handler_syslog);
  +    l2_env_handler(env, &l2_handler_smtp);
  +    l2_env_handler(env, &l2_handler_noop);
  +    l2_env_handler(env, &l2_handler_filter);
  +    l2_env_handler(env, &l2_handler_prefix);
  +    l2_env_handler(env, &l2_handler_buffer);
  +
       /* pass new object to caller */
       (*envp) = env;
   
  @@ -105,6 +120,28 @@
       env->formatters[i].id  = id;
       env->formatters[i].ctx = ctx;
       env->formatters[i].cb  = cb;
  +
  +    return L2_OK;
  +}
  +
  +/* attach handler to environment */
  +l2_result_t l2_env_handler(l2_env_t *env, l2_handler_t *h)
  +{
  +    int i;
  +
  +    /* argument sanity check */
  +    if (env == NULL || h == NULL)
  +        return L2_ERR_ARG;
  +
  +    /* find next free handler position in handler array */
  +    for (i = 0; i < L2_MAX_HANDLERS && env->handlers[i] != NULL; i++)
  +        ;
  +    if (i == L2_MAX_HANDLERS)
  +        return L2_ERR_MEM;
  +
  +    /* attach handler to env */
  +    env->handlers[i] = h;
  +    env->handlers[i] = h;
   
       return L2_OK;
   }
  Index: ossp-pkg/l2/l2_p.h
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 l2_p.h
  --- ossp-pkg/l2/l2_p.h	2001/11/04 13:55:06	1.29
  +++ ossp-pkg/l2/l2_p.h	2001/11/07 11:37:18	1.30
  @@ -69,6 +69,7 @@
   /* some hard-coded sizes :-( */
   #define L2_MAX_MSGSIZE    4096
   #define L2_MAX_FORMATTERS  128
  +#define L2_MAX_HANDLERS    128
   
   /* internal channel state */
   typedef enum {
  @@ -101,6 +102,7 @@
       unsigned int          levelmask;
       unsigned int          flushmask;
       l2_formatter_entry_t  formatters[L2_MAX_FORMATTERS];
  +    l2_handler_t         *handlers[L2_MAX_HANDLERS];
       char                  message[L2_MAX_MSGSIZE];
       char                  szError[1024];
       char                  szErrorInfo[512];
  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.41 -r1.42 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/11/06 15:02:49	1.41
  +++ ossp-pkg/l2/l2_test.c	2001/11/07 11:37:18	1.42
  @@ -75,30 +75,30 @@
           die("failed to configure formatter for %%S");
   
       /* create noop channel */
  -    if ((l2_channel_create(&ch, env, &l2_handler_noop)) != L2_OK)
  +    if ((l2_channel_create(&ch, env, "noop")) != L2_OK)
           die("failed to create noop channel");
   
       /* create prefix channel */
  -    if ((l2_channel_create(&chPrefix, env, &l2_handler_prefix)) != L2_OK)
  +    if ((l2_channel_create(&chPrefix, env, "prefix")) != L2_OK)
           die("failed to create prefix channel");
       if (l2_channel_configure(chPrefix, "prefix,timezone", 
                                "[%d-%m-%Y/%H:%M:%S] %L test[%P]: ", "local") != L2_OK)
           die("failed to configure prefix channel");
   
       /* create prefix channel */
  -    if ((l2_channel_create(&chFilter, env, &l2_handler_filter)) != L2_OK)
  +    if ((l2_channel_create(&chFilter, env, "filter")) != L2_OK)
           die("failed to create filter channel");
       if (l2_channel_configure(chFilter, "regex,negate", "hecking", 0) != L2_OK)
           die("failed to configure filter channel");
   
       /* create buffer channel */
  -    if ((l2_channel_create(&chBuffer, env, &l2_handler_buffer)) != L2_OK)
  +    if ((l2_channel_create(&chBuffer, env, "buffer")) != L2_OK)
           die("failed to create buffer channel");
       if (l2_channel_configure(chBuffer, "size", 800) != L2_OK)
           die("failed to configure buffer channel");
   
       /* create file channel */
  -    if ((l2_channel_create(&chFile, env, &l2_handler_file)) != L2_OK)
  +    if ((l2_channel_create(&chFile, env, "file")) != L2_OK)
           die("failed to create file channel");
       if (l2_channel_configure(chFile, "path,append,perm", "l2_test.log", TRUE, 0644) != L2_OK)
           die("failed to configure file channel");
  @@ -106,7 +106,7 @@
           die("failed to level of smtp channel");
   
       /* create syslog channel */
  -    if ((l2_channel_create(&chSyslog, env, &l2_handler_syslog)) != L2_OK)
  +    if ((l2_channel_create(&chSyslog, env, "syslog")) != L2_OK)
           die("failed to create syslog channel");
       if (l2_channel_configure(chSyslog, "ident,facility,target,remotehost,logpid",
                                "L2-Test", "user", "remote", "en1", 1) != L2_OK)
  @@ -115,7 +115,7 @@
           die("failed to level of syslog channel");
   
       /* create smtp channel */
  -    if ((l2_channel_create(&chSmtp, env, &l2_handler_smtp)) != L2_OK)
  +    if ((l2_channel_create(&chSmtp, env, "smtp")) != L2_OK)
           die("failed to create smtp channel");
       if (l2_channel_configure(chSmtp, "rcpt,host,port", "rse@engelschall.com", "en1", "25") != L2_OK)
           die("failed to configure smtp channel");

From ossp-cvs-owner@ossp.org  Wed Nov  7 14:05:23 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fA7D5MB13657; Wed, 7 Nov 2001 14:05:22 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 2223E4CE80F; Wed,  7 Nov 2001 14:05:22 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.h.in l2_ch_buffer.c l2_ch_fd.c l2_ch_file.c...
Message-Id: <20011107130522.2223E4CE80F@visp.engelschall.com>
Date: Wed,  7 Nov 2001 14:05:22 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   07-Nov-2001 14:05:22
  Branch: HEAD                             Handle: 2001110713052000

  Modified files:
    ossp-pkg/l2             l2.h.in l2_ch_buffer.c l2_ch_fd.c l2_ch_file.c
                            l2_ch_filter.c l2_ch_irc.c l2_ch_pipe.c
                            l2_ch_prefix.c l2_ch_smtp.c l2_ch_socket.c
                            l2_ch_syslog.c l2_test.c l2_ut_param.c

  Log:
    Hell, I've seldom seen that it is needed to prepare and adjust such a
    lot of subtle details of existing code in order to make a new feature
    implementable in a straight-forward way. Anyway, here comes one more
    preparation change for the forthcoming channel tree specification
    parser:
    
    - change l2_util_setparam() to take an l2_env_t parameter
      which allows the function to report better error messages.
    
    - completely rewrite l2_util_setparam() to support calls
          l2_channel_configure(ch, "n1=v1,n2=v2,n3=v3")
      and/or
          l2_channel_configure(ch, "n1=%x,n2=%x,n3=%x", v1, v2, v3)
      instead of
          l2_channel_configure(ch, "n1,n2,n3", v1, v2, v3)
    
      This is both a step forward to make the interface of
      l2_channel_configure() more flexible (because one now can directly
      inline values instead of having them to be passed explicitly) and
      allows the spec parser not having to know the type (integer, floating
      point or string) of a parameter (which is important if one wants the
      parser to be independent of the implementing channel handlers).

  Summary:
    Revision    Changes     Path
    1.20        +3  -9      ossp-pkg/l2/l2.h.in
    1.34        +3  -1      ossp-pkg/l2/l2_ch_buffer.c
    1.12        +3  -1      ossp-pkg/l2/l2_ch_fd.c
    1.19        +7  -5      ossp-pkg/l2/l2_ch_file.c
    1.14        +4  -5      ossp-pkg/l2/l2_ch_filter.c
    1.4         +14 -12     ossp-pkg/l2/l2_ch_irc.c
    1.28        +8  -4      ossp-pkg/l2/l2_ch_pipe.c
    1.18        +5  -3      ossp-pkg/l2/l2_ch_prefix.c
    1.8         +12 -10     ossp-pkg/l2/l2_ch_smtp.c
    1.34        +7  -5      ossp-pkg/l2/l2_ch_socket.c
    1.27        +10 -8      ossp-pkg/l2/l2_ch_syslog.c
    1.43        +59 -58     ossp-pkg/l2/l2_test.c
    1.6         +126 -51    ossp-pkg/l2/l2_ut_param.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2.h.in
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 l2.h.in
  --- ossp-pkg/l2/l2.h.in	2001/11/07 11:37:18	1.19
  +++ ossp-pkg/l2/l2.h.in	2001/11/07 13:05:20	1.20
  @@ -131,15 +131,9 @@
   
   /* list of types for storing data */
   typedef enum {
  -    L2_TYPE_CHAR,
  -    L2_TYPE_SHORT,
       L2_TYPE_INT,
  -    L2_TYPE_LONG,
  -    L2_TYPE_FLOAT,
  -    L2_TYPE_DOUBLE,
  -    L2_TYPE_STRING,
  -    L2_TYPE_CHARPTR,
  -    L2_TYPE_VOIDPTR
  +    L2_TYPE_FLT,
  +    L2_TYPE_STR
   } l2_type_t;
   
   /* parameter specification */
  @@ -234,7 +228,7 @@
   l2_result_t   l2_channel_env        (l2_channel_t *ch, l2_env_t **env);
   
   /* utility operations */
  -l2_result_t   l2_util_setparams     (l2_param_t p[], const char *fmt, va_list ap);
  +l2_result_t   l2_util_setparams     (l2_env_t *env, l2_param_t p[], const char *fmt, va_list ap);
   l2_result_t   l2_util_l2s           (char *string,       size_t maxlen, int sep, unsigned int  levelmask);
   l2_result_t   l2_util_s2l           (const char *string, size_t maxlen, int sep, unsigned int *levelmask);
   l2_result_t   l2_util_fmt_string    (l2_context_t *, const char, const char *, char *, size_t, size_t *, va_list *);
  Index: ossp-pkg/l2/l2_ch_buffer.c
  ============================================================
  $ cvs diff -u -r1.33 -r1.34 l2_ch_buffer.c
  --- ossp-pkg/l2/l2_ch_buffer.c	2001/11/07 11:37:18	1.33
  +++ ossp-pkg/l2/l2_ch_buffer.c	2001/11/07 13:05:20	1.34
  @@ -160,13 +160,15 @@
       l2_ch_buffer_t *cfg = (l2_ch_buffer_t *)ctx->vp;
       l2_param_t pa[4];
       l2_result_t rv;
  +    l2_env_t *env;
   
       /* feed and call generic parameter parsing engine */
       L2_PARAM_SET(pa[0], size,       INT, &cfg->bufsize);
       L2_PARAM_SET(pa[1], interval,   INT, &cfg->bufinterval);
       L2_PARAM_SET(pa[2], levelflush, INT, &cfg->levelflush);
       L2_PARAM_END(pa[3]);
  -    rv = l2_util_setparams(pa, fmt, ap);
  +    l2_channel_env(ch, &env);
  +    rv = l2_util_setparams(env, pa, fmt, ap);
       if (cfg->bufinterval == -1L) /* -1 is reserved by L2 */
           return L2_ERR_ARG;       /* set_alarm() uses it  */
   
  Index: ossp-pkg/l2/l2_ch_fd.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 l2_ch_fd.c
  --- ossp-pkg/l2/l2_ch_fd.c	2001/11/07 11:37:18	1.11
  +++ ossp-pkg/l2/l2_ch_fd.c	2001/11/07 13:05:20	1.12
  @@ -59,6 +59,7 @@
       l2_ch_fd_t *cfg;
       l2_param_t pa[1]; 
       l2_result_t rv;
  +    l2_env_t *env;
   
       /* parameter checks */
       if ((cfg = (l2_ch_fd_t *)ctx->vp) == NULL)
  @@ -67,7 +68,8 @@
       /* feed and call generic parameter parsing engine */
       L2_PARAM_SET(pa[0], filedescriptor, INT, &cfg->fd);
       L2_PARAM_END(pa[1]);
  -    rv = l2_util_setparams(pa, fmt, ap);
  +    l2_channel_env(ch, &env);
  +    rv = l2_util_setparams(env, pa, fmt, ap);
   
       return rv;
   }
  Index: ossp-pkg/l2/l2_ch_file.c
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 l2_ch_file.c
  --- ossp-pkg/l2/l2_ch_file.c	2001/11/07 11:37:18	1.18
  +++ ossp-pkg/l2/l2_ch_file.c	2001/11/07 13:05:20	1.19
  @@ -38,7 +38,7 @@
       int   fd;
       char *path;
       int   append;
  -    long  perm;
  +    int   perm;
   } l2_ch_file_t;
   
   /* create channel */
  @@ -68,13 +68,15 @@
       l2_ch_file_t *cfg = (l2_ch_file_t *)ctx->vp;
       l2_param_t pa[4]; 
       l2_result_t rv;
  +    l2_env_t *env;
   
       /* feed and call generic parameter parsing engine */
  -    L2_PARAM_SET(pa[0], path,   CHARPTR, &cfg->path);
  -    L2_PARAM_SET(pa[1], append, INT,     &cfg->append);
  -    L2_PARAM_SET(pa[2], perm,   LONG,    &cfg->perm);
  +    L2_PARAM_SET(pa[0], path,   STR, &cfg->path);
  +    L2_PARAM_SET(pa[1], append, INT, &cfg->append);
  +    L2_PARAM_SET(pa[2], perm,   INT, &cfg->perm);
       L2_PARAM_END(pa[3]);
  -    rv = l2_util_setparams(pa, fmt, ap);
  +    l2_channel_env(ch, &env);
  +    rv = l2_util_setparams(env, pa, fmt, ap);
   
       return rv;
   }
  Index: ossp-pkg/l2/l2_ch_filter.c
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 l2_ch_filter.c
  --- ossp-pkg/l2/l2_ch_filter.c	2001/11/07 11:37:18	1.13
  +++ ossp-pkg/l2/l2_ch_filter.c	2001/11/07 13:05:20	1.14
  @@ -70,17 +70,17 @@
       int nErrorOffset;
   
       /* feed and call generic parameter parsing engine */
  -    L2_PARAM_SET(pa[0], regex,  STRING, &cfg->szRegex);
  -    L2_PARAM_SET(pa[1], negate, INT,    &cfg->bNegate);
  +    L2_PARAM_SET(pa[0], regex,  STR, &cfg->szRegex);
  +    L2_PARAM_SET(pa[1], negate, INT, &cfg->bNegate);
       L2_PARAM_END(pa[2]);
  -    if ((rv = l2_util_setparams(pa, fmt, ap)) != L2_OK)
  +    l2_channel_env(ch, &env);
  +    if ((rv = l2_util_setparams(env, pa, fmt, ap)) != L2_OK)
           return rv;
   
       /* translate regular expression into finite state machine */ 
       if (cfg->szRegex != NULL) {
           /* compile regular expression into FSM */
           if ((cfg->pcreRegex = pcre_compile(cfg->szRegex, 0, &szError, &nErrorOffset, NULL)) == NULL) {
  -            l2_channel_env(ch, &env);
               l2_env_errorinfo(env, L2_ERR_ARG, "%s ('%c')", szError, cfg->szRegex[nErrorOffset]);
               return L2_ERR_ARG;
           }
  @@ -89,7 +89,6 @@
           if (szError != NULL) {
               free(cfg->pcreRegex);
               cfg->pcreRegex = NULL;
  -            l2_channel_env(ch, &env);
               l2_env_errorinfo(env, L2_ERR_ARG, "%s", szError);
               return L2_ERR_ARG;
           }
  Index: ossp-pkg/l2/l2_ch_irc.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 l2_ch_irc.c
  --- ossp-pkg/l2/l2_ch_irc.c	2001/11/07 11:37:18	1.3
  +++ ossp-pkg/l2/l2_ch_irc.c	2001/11/07 13:05:20	1.4
  @@ -99,21 +99,23 @@
       l2_ch_irc_t *cfg = (l2_ch_irc_t *)ctx->vp;
       l2_param_t pa[12]; 
       l2_result_t rv;
  +    l2_env_t *env;
   
       /* feed and call generic parameter parsing engine */
  -    L2_PARAM_SET(pa[0],  progname,  STRING, &cfg->cpLocalProg);
  -    L2_PARAM_SET(pa[1],  localhost, STRING, &cfg->cpLocalHost);
  -    L2_PARAM_SET(pa[2],  localuser, STRING, &cfg->cpLocalUser);
  -    L2_PARAM_SET(pa[3],  nickname,  STRING, &cfg->cpNickname);
  -    L2_PARAM_SET(pa[4],  username,  STRING, &cfg->cpUsername);
  -    L2_PARAM_SET(pa[5],  realname,  STRING, &cfg->cpRealname);
  -    L2_PARAM_SET(pa[6],  channel,   STRING, &cfg->cpChannel);
  -    L2_PARAM_SET(pa[7],  join,      INT,    &cfg->bJoin);
  -    L2_PARAM_SET(pa[8],  host,      STRING, &cfg->cpHost);
  -    L2_PARAM_SET(pa[9],  port,      STRING, &cfg->cpPort);
  -    L2_PARAM_SET(pa[10], timeout,   INT,    &cfg->nTimeout);
  +    L2_PARAM_SET(pa[0],  progname,  STR, &cfg->cpLocalProg);
  +    L2_PARAM_SET(pa[1],  localhost, STR, &cfg->cpLocalHost);
  +    L2_PARAM_SET(pa[2],  localuser, STR, &cfg->cpLocalUser);
  +    L2_PARAM_SET(pa[3],  nickname,  STR, &cfg->cpNickname);
  +    L2_PARAM_SET(pa[4],  username,  STR, &cfg->cpUsername);
  +    L2_PARAM_SET(pa[5],  realname,  STR, &cfg->cpRealname);
  +    L2_PARAM_SET(pa[6],  channel,   STR, &cfg->cpChannel);
  +    L2_PARAM_SET(pa[7],  join,      INT, &cfg->bJoin);
  +    L2_PARAM_SET(pa[8],  host,      STR, &cfg->cpHost);
  +    L2_PARAM_SET(pa[9],  port,      STR, &cfg->cpPort);
  +    L2_PARAM_SET(pa[10], timeout,   INT, &cfg->nTimeout);
       L2_PARAM_END(pa[11]);
  -    rv = l2_util_setparams(pa, fmt, ap);
  +    l2_channel_env(ch, &env);
  +    rv = l2_util_setparams(env, pa, fmt, ap);
   
       return rv;
   }
  Index: ossp-pkg/l2/l2_ch_pipe.c
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 l2_ch_pipe.c
  --- ossp-pkg/l2/l2_ch_pipe.c	2001/11/07 11:37:18	1.27
  +++ ossp-pkg/l2/l2_ch_pipe.c	2001/11/07 13:05:20	1.28
  @@ -176,13 +176,15 @@
       l2_result_t rv;
       char *szMode = NULL;
       char *szRel  = NULL;
  +    l2_env_t *env;
   
       /* feed and call generic parameter parsing engine */
  -    L2_PARAM_SET(pa[0], execmode, CHARPTR, &szMode); /* mode direct or shell  */
  -    L2_PARAM_SET(pa[1], runtime,  CHARPTR, &szRel);  /* continuous or oneshot */
  -    L2_PARAM_SET(pa[2], path,     STRING,  &cfg->szCmdpath); /* path of cmd   */
  +    L2_PARAM_SET(pa[0], execmode, STR, &szMode); /* mode direct or shell  */
  +    L2_PARAM_SET(pa[1], runtime,  STR, &szRel);  /* continuous or oneshot */
  +    L2_PARAM_SET(pa[2], path,     STR, &cfg->szCmdpath); /* path of cmd   */
       L2_PARAM_END(pa[3]);
  -    if ((rv = l2_util_setparams(pa, fmt, ap)) != L2_OK)
  +    l2_channel_env(ch, &env);
  +    if ((rv = l2_util_setparams(env, pa, fmt, ap)) != L2_OK)
           return rv;
   
       if (szMode != NULL) {
  @@ -192,6 +194,7 @@
               cfg->iMode = L2_PIPE_EXECMODE_SHELL;
           else
               return L2_ERR_ARG;
  +        free(szMode);
       }
   
       if (szRel != NULL) {
  @@ -201,6 +204,7 @@
               cfg->iRtme = L2_PIPE_RUNTIME_ONESHOT;
           else
               return L2_ERR_ARG;
  +        free(szRel);
       }
   
       return L2_OK;
  Index: ossp-pkg/l2/l2_ch_prefix.c
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 l2_ch_prefix.c
  --- ossp-pkg/l2/l2_ch_prefix.c	2001/11/07 11:37:18	1.17
  +++ ossp-pkg/l2/l2_ch_prefix.c	2001/11/07 13:05:20	1.18
  @@ -64,12 +64,14 @@
       l2_ch_prefix_t *cfg = (l2_ch_prefix_t *)ctx->vp;
       l2_param_t pa[3]; 
       l2_result_t rv;
  +    l2_env_t *env;
   
       /* feed and call generic parameter parsing engine */
  -    L2_PARAM_SET(pa[0], prefix,  STRING, &cfg->prefix);
  -    L2_PARAM_SET(pa[1], timezone, STRING, &cfg->timezone);
  +    L2_PARAM_SET(pa[0], prefix,   STR, &cfg->prefix);
  +    L2_PARAM_SET(pa[1], timezone, STR, &cfg->timezone);
       L2_PARAM_END(pa[2]);
  -    rv = l2_util_setparams(pa, fmt, ap);
  +    l2_channel_env(ch, &env);
  +    rv = l2_util_setparams(env, pa, fmt, ap);
   
       /* argument consistency check */
       if (rv == L2_OK) {
  Index: ossp-pkg/l2/l2_ch_smtp.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 l2_ch_smtp.c
  --- ossp-pkg/l2/l2_ch_smtp.c	2001/11/07 11:37:18	1.7
  +++ ossp-pkg/l2/l2_ch_smtp.c	2001/11/07 13:05:20	1.8
  @@ -93,19 +93,21 @@
       l2_ch_smtp_t *cfg = (l2_ch_smtp_t *)ctx->vp;
       l2_param_t pa[10]; 
       l2_result_t rv;
  +    l2_env_t *env;
   
       /* feed and call generic parameter parsing engine */
  -    L2_PARAM_SET(pa[0], progname,  STRING, &cfg->cpLocalProg);
  -    L2_PARAM_SET(pa[1], localhost, STRING, &cfg->cpLocalHost);
  -    L2_PARAM_SET(pa[2], localuser, STRING, &cfg->cpLocalUser);
  -    L2_PARAM_SET(pa[3], from,      STRING, &cfg->cpFrom);
  -    L2_PARAM_SET(pa[4], rcpt,      STRING, &cfg->cpRcpt);
  -    L2_PARAM_SET(pa[5], subject,   STRING, &cfg->cpSubject);
  -    L2_PARAM_SET(pa[6], host,      STRING, &cfg->cpHost);
  -    L2_PARAM_SET(pa[7], port,      STRING, &cfg->cpPort);
  -    L2_PARAM_SET(pa[8], timeout,   INT,    &cfg->nTimeout);
  +    L2_PARAM_SET(pa[0], progname,  STR, &cfg->cpLocalProg);
  +    L2_PARAM_SET(pa[1], localhost, STR, &cfg->cpLocalHost);
  +    L2_PARAM_SET(pa[2], localuser, STR, &cfg->cpLocalUser);
  +    L2_PARAM_SET(pa[3], from,      STR, &cfg->cpFrom);
  +    L2_PARAM_SET(pa[4], rcpt,      STR, &cfg->cpRcpt);
  +    L2_PARAM_SET(pa[5], subject,   STR, &cfg->cpSubject);
  +    L2_PARAM_SET(pa[6], host,      STR, &cfg->cpHost);
  +    L2_PARAM_SET(pa[7], port,      STR, &cfg->cpPort);
  +    L2_PARAM_SET(pa[8], timeout,   INT, &cfg->nTimeout);
       L2_PARAM_END(pa[9]);
  -    rv = l2_util_setparams(pa, fmt, ap);
  +    l2_channel_env(ch, &env);
  +    rv = l2_util_setparams(env, pa, fmt, ap);
   
       return rv;
   }
  Index: ossp-pkg/l2/l2_ch_socket.c
  ============================================================
  $ cvs diff -u -r1.33 -r1.34 l2_ch_socket.c
  --- ossp-pkg/l2/l2_ch_socket.c	2001/11/07 11:37:18	1.33
  +++ ossp-pkg/l2/l2_ch_socket.c	2001/11/07 13:05:20	1.34
  @@ -77,14 +77,16 @@
       l2_ch_socket_t *cfg = (l2_ch_socket_t *)ctx->vp;
       l2_param_t pa[5];
       l2_result_t rv;
  +    l2_env_t *env;
   
       /* feed and call generic parameter parsing engine */
  -    L2_PARAM_SET(pa[0], proto,     STRING,  &cfg->szProto);
  -    L2_PARAM_SET(pa[1], host,      STRING,  &cfg->szHost);
  -    L2_PARAM_SET(pa[2], port,      STRING,  &cfg->szPort);
  -    L2_PARAM_SET(pa[3], timeout,   INT,     &cfg->nTimeout);
  +    L2_PARAM_SET(pa[0], proto,   STR, &cfg->szProto);
  +    L2_PARAM_SET(pa[1], host,    STR, &cfg->szHost);
  +    L2_PARAM_SET(pa[2], port,    STR, &cfg->szPort);
  +    L2_PARAM_SET(pa[3], timeout, INT, &cfg->nTimeout);
       L2_PARAM_END(pa[4]);
  -    rv = l2_util_setparams(pa, fmt, ap);
  +    l2_channel_env(ch, &env);
  +    rv = l2_util_setparams(env, pa, fmt, ap);
   
       /* sanity check configuration parameters */
       if (   cfg->szProto != NULL
  Index: ossp-pkg/l2/l2_ch_syslog.c
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 l2_ch_syslog.c
  --- ossp-pkg/l2/l2_ch_syslog.c	2001/11/07 11:37:18	1.26
  +++ ossp-pkg/l2/l2_ch_syslog.c	2001/11/07 13:05:20	1.27
  @@ -161,20 +161,22 @@
       l2_ch_syslog_t *cfg = (l2_ch_syslog_t *)ctx->vp;
       l2_param_t pa[8];
       l2_result_t rv;
  +    l2_env_t *env;
       int i;
   
       /* feed and call generic parameter parsing engine */
  -    L2_PARAM_SET(pa[0], target,     STRING, &cfg->szTarget);
  -    L2_PARAM_SET(pa[1], remotehost, STRING, &cfg->szRemoteHost);
  -    L2_PARAM_SET(pa[2], remoteport, INT,    &cfg->nRemotePort);
  -    L2_PARAM_SET(pa[3], localhost,  STRING, &cfg->szLocalHost);
  -    L2_PARAM_SET(pa[4], facility,   STRING, &cfg->szFacility);
  -    L2_PARAM_SET(pa[5], ident,      STRING, &cfg->szIdent);
  -    L2_PARAM_SET(pa[6], logpid,     INT,    &cfg->bLogPid);
  +    L2_PARAM_SET(pa[0], target,     STR, &cfg->szTarget);
  +    L2_PARAM_SET(pa[1], remotehost, STR, &cfg->szRemoteHost);
  +    L2_PARAM_SET(pa[2], remoteport, INT, &cfg->nRemotePort);
  +    L2_PARAM_SET(pa[3], localhost,  STR, &cfg->szLocalHost);
  +    L2_PARAM_SET(pa[4], facility,   STR, &cfg->szFacility);
  +    L2_PARAM_SET(pa[5], ident,      STR, &cfg->szIdent);
  +    L2_PARAM_SET(pa[6], logpid,     INT, &cfg->bLogPid);
       L2_PARAM_END(pa[7]);
   
       /* sanity checking & post-processing */
  -    rv = l2_util_setparams(pa, fmt, ap);
  +    l2_channel_env(ch, &env);
  +    rv = l2_util_setparams(env, pa, fmt, ap);
       if (cfg->szTarget == NULL || cfg->szFacility == NULL)
           return L2_ERR_USE;
       if (!(   strcmp(cfg->szTarget, "local") == 0
  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.42 -r1.43 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/11/07 11:37:18	1.42
  +++ ossp-pkg/l2/l2_test.c	2001/11/07 13:05:20	1.43
  @@ -31,14 +31,16 @@
   
   #include "l2.h"
   
  -static void die(char *fmt, ...)
  +static void die(l2_env_t *env, l2_result_t rv, char *fmt, ...)
   {
       va_list ap;
  +    char *error;
   
       va_start(ap, fmt);
       fprintf(stderr, "l2_test:ERROR: ");
       vfprintf(stderr, fmt, ap);
  -    fprintf(stderr, "\n");
  +    error = l2_env_strerror(env, rv);
  +    fprintf(stderr, " (%s)\n", error);
       va_end(ap);
       exit(1);
   }
  @@ -64,87 +66,86 @@
       l2_channel_t *chFile;
       l2_channel_t *chSyslog;
       l2_channel_t *chSmtp;
  +    l2_result_t rv;
       l2_env_t *env;
   
       /* create environment */
  -    if ((l2_env_create(&env)) != L2_OK)
  -        die("failed to create environment");
  -    if (l2_env_formatter(env, 'k', formatter, NULL) != L2_OK)
  -        die("failed to configure formatter for %%x");
  -    if (l2_env_formatter(env, 'S', l2_util_fmt_dump, NULL) != L2_OK)
  -        die("failed to configure formatter for %%S");
  +    if ((rv = l2_env_create(&env)) != L2_OK)
  +        die(env, rv, "failed to create environment");
  +    if ((rv = l2_env_formatter(env, 'k', formatter, NULL)) != L2_OK)
  +        die(env, rv, "failed to configure formatter for %%x");
  +    if ((rv = l2_env_formatter(env, 'S', l2_util_fmt_dump, NULL)) != L2_OK)
  +        die(env, rv, "failed to configure formatter for %%S");
   
       /* create noop channel */
  -    if ((l2_channel_create(&ch, env, "noop")) != L2_OK)
  -        die("failed to create noop channel");
  +    if ((rv = l2_channel_create(&ch, env, "noop")) != L2_OK)
  +        die(env, rv, "failed to create noop channel");
   
       /* create prefix channel */
  -    if ((l2_channel_create(&chPrefix, env, "prefix")) != L2_OK)
  -        die("failed to create prefix channel");
  -    if (l2_channel_configure(chPrefix, "prefix,timezone", 
  -                             "[%d-%m-%Y/%H:%M:%S] %L test[%P]: ", "local") != L2_OK)
  -        die("failed to configure prefix channel");
  +    if ((rv = l2_channel_create(&chPrefix, env, "prefix")) != L2_OK)
  +        die(env, rv, "failed to create prefix channel");
  +    if ((rv = l2_channel_configure(chPrefix, "prefix=\"%s\", timezone=local", "[%d-%m-%Y/%H:%M:%S] %L test[%P]: ")) != L2_OK)
  +        die(env, rv, "failed to configure prefix channel");
   
       /* create prefix channel */
  -    if ((l2_channel_create(&chFilter, env, "filter")) != L2_OK)
  -        die("failed to create filter channel");
  -    if (l2_channel_configure(chFilter, "regex,negate", "hecking", 0) != L2_OK)
  -        die("failed to configure filter channel");
  +    if ((rv = l2_channel_create(&chFilter, env, "filter")) != L2_OK)
  +        die(env, rv, "failed to create filter channel");
  +    if ((rv = l2_channel_configure(chFilter, "regex=hecking, negate=0")) != L2_OK)
  +        die(env, rv, "failed to configure filter channel");
   
       /* create buffer channel */
  -    if ((l2_channel_create(&chBuffer, env, "buffer")) != L2_OK)
  -        die("failed to create buffer channel");
  -    if (l2_channel_configure(chBuffer, "size", 800) != L2_OK)
  -        die("failed to configure buffer channel");
  +    if ((rv = l2_channel_create(&chBuffer, env, "buffer")) != L2_OK)
  +        die(env, rv, "failed to create buffer channel");
  +    if ((rv = l2_channel_configure(chBuffer, "size=800")) != L2_OK)
  +        die(env, rv, "failed to configure buffer channel");
   
       /* create file channel */
  -    if ((l2_channel_create(&chFile, env, "file")) != L2_OK)
  -        die("failed to create file channel");
  -    if (l2_channel_configure(chFile, "path,append,perm", "l2_test.log", TRUE, 0644) != L2_OK)
  -        die("failed to configure file channel");
  -    if (l2_channel_levels(chFile, L2_LEVEL_UPTO(L2_LEVEL_INFO), L2_LEVEL_NONE) != L2_OK)
  -        die("failed to level of smtp channel");
  +    if ((rv = l2_channel_create(&chFile, env, "file")) != L2_OK)
  +        die(env, rv, "failed to create file channel");
  +    if ((rv = l2_channel_configure(chFile, "path=l2_test.log, append=%d,perm=%d", TRUE, 0644)) != L2_OK)
  +        die(env, rv, "failed to configure file channel");
  +    if ((rv = l2_channel_levels(chFile, L2_LEVEL_UPTO(L2_LEVEL_INFO), L2_LEVEL_NONE)) != L2_OK)
  +        die(env, rv, "failed to level of smtp channel");
   
       /* create syslog channel */
  -    if ((l2_channel_create(&chSyslog, env, "syslog")) != L2_OK)
  -        die("failed to create syslog channel");
  -    if (l2_channel_configure(chSyslog, "ident,facility,target,remotehost,logpid",
  -                             "L2-Test", "user", "remote", "en1", 1) != L2_OK)
  -        die("failed to configure syslog channel");
  -    if (l2_channel_levels(chSyslog, L2_LEVEL_UPTO(L2_LEVEL_ERROR), L2_LEVEL_ALL) != L2_OK)
  -        die("failed to level of syslog channel");
  +    if ((rv = l2_channel_create(&chSyslog, env, "syslog")) != L2_OK)
  +        die(env, rv, "failed to create syslog channel");
  +    if ((rv = l2_channel_configure(chSyslog, "ident=L2-Test, facility=user, target=remote, remotehost=en1, logpid=1")) != L2_OK)
  +        die(env, rv, "failed to configure syslog channel");
  +    if ((rv = l2_channel_levels(chSyslog, L2_LEVEL_UPTO(L2_LEVEL_ERROR), L2_LEVEL_ALL)) != L2_OK)
  +        die(env, rv, "failed to level of syslog channel");
   
       /* create smtp channel */
  -    if ((l2_channel_create(&chSmtp, env, "smtp")) != L2_OK)
  -        die("failed to create smtp channel");
  -    if (l2_channel_configure(chSmtp, "rcpt,host,port", "rse@engelschall.com", "en1", "25") != L2_OK)
  -        die("failed to configure smtp channel");
  -    if (l2_channel_levels(chSmtp, L2_LEVEL_UPTO(L2_LEVEL_PANIC), L2_LEVEL_ALL) != L2_OK)
  -        die("failed to level of smtp channel");
  +    if ((rv = l2_channel_create(&chSmtp, env, "smtp")) != L2_OK)
  +        die(env, rv, "failed to create smtp channel");
  +    if ((rv = l2_channel_configure(chSmtp, "rcpt=rse@engelschall.com, host=en1, port=25")) != L2_OK)
  +        die(env, rv, "failed to configure smtp channel");
  +    if ((rv = l2_channel_levels(chSmtp, L2_LEVEL_UPTO(L2_LEVEL_PANIC), L2_LEVEL_ALL)) != L2_OK)
  +        die(env, rv, "failed to level of smtp channel");
   
       /* build channel tree */
  -    if (l2_channel_link(ch, L2_LINK_CHILD, chFilter, chPrefix, chBuffer, chFile, NULL) != L2_OK)
  -        die("failed to link file-related channels together as a child sequence");
  -    if (l2_channel_link(ch, L2_LINK_CHILD, chSyslog, NULL) != L2_OK)
  -        die("failed to link syslog-related channels together as a child sequence");
  +    if ((rv = l2_channel_link(ch, L2_LINK_CHILD, chFilter, chPrefix, chBuffer, chFile, NULL)) != L2_OK)
  +        die(env, rv, "failed to link file-related channels together as a child sequence");
  +    if ((rv = l2_channel_link(ch, L2_LINK_CHILD, chSyslog, NULL)) != L2_OK)
  +        die(env, rv, "failed to link syslog-related channels together as a child sequence");
   
       /* open channel tree */
  -    if (l2_channel_open(ch) != L2_OK)
  -        die("failed to open channel tree");
  +    if ((rv = l2_channel_open(ch)) != L2_OK)
  +        die(env, rv, "failed to open channel tree");
       
       /* perform a few log operations */
  -    if (l2_channel_log(ch, L2_LEVEL_PANIC, "1: Checking localhost %s %{myparm}k <%{text}S><%{hex}S><%{base64}S>\n", "foo", 12345, "foo\1bar", 7, "foo\1bar", 7, "foo\1bar", 7) != L2_OK)
  -        die("failed to log message #1 to channel");
  -    if (l2_channel_log(ch, L2_LEVEL_PANIC, "2: Shecking\n") != L2_OK)
  -        die("failed to log message #2 to channel");
  -    if (l2_channel_log(ch, L2_LEVEL_PANIC, "3: Checking localhost %s %{myparm}k <%{text}S><%{hex}S><%{base64}S>\n", "foo", 12345, "foo\1bar", 7, "foo\1bar", 7, "foo\1bar", 7) != L2_OK)
  -        die("failed to log message #3 to channel");
  -    if (l2_channel_log(ch, L2_LEVEL_PANIC, "4: Shecking\n") != L2_OK)
  -        die("failed to log message #4 to channel");
  +    if ((rv = l2_channel_log(ch, L2_LEVEL_PANIC, "1: Checking localhost %s %{myparm}k <%{text}S><%{hex}S><%{base64}S>\n", "foo", 12345, "foo\1bar", 7, "foo\1bar", 7, "foo\1bar", 7)) != L2_OK)
  +        die(env, rv, "failed to log message #1 to channel");
  +    if ((rv = l2_channel_log(ch, L2_LEVEL_PANIC, "2: Shecking\n")) != L2_OK)
  +        die(env, rv, "failed to log message #2 to channel");
  +    if ((rv = l2_channel_log(ch, L2_LEVEL_PANIC, "3: Checking localhost %s %{myparm}k <%{text}S><%{hex}S><%{base64}S>\n", "foo", 12345, "foo\1bar", 7, "foo\1bar", 7, "foo\1bar", 7)) != L2_OK)
  +        die(env, rv, "failed to log message #3 to channel");
  +    if ((rv = l2_channel_log(ch, L2_LEVEL_PANIC, "4: Shecking\n")) != L2_OK)
  +        die(env, rv, "failed to log message #4 to channel");
   
       /* destroy channel tree */
  -    if (l2_channel_destroy(ch) != L2_OK)
  -        die("failed to destroy channel tree");
  +    if ((rv = l2_channel_destroy(ch)) != L2_OK)
  +        die(env, rv, "failed to destroy channel tree");
   
       return 0;
   }
  Index: ossp-pkg/l2/l2_ut_param.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 l2_ut_param.c
  --- ossp-pkg/l2/l2_ut_param.c	2001/09/08 22:06:09	1.5
  +++ ossp-pkg/l2/l2_ut_param.c	2001/11/07 13:05:20	1.6
  @@ -30,82 +30,157 @@
   #include "l2.h"
   #include "l2_p.h"
   
  +#include <stdlib.h>
   #include <string.h>
  +#include <limits.h>
  +#include <math.h>
  +#include <ctype.h>
   
  -l2_result_t l2_util_setparams(l2_param_t pa[], const char *fmt, va_list ap)
  +l2_result_t l2_util_setparams(l2_env_t *env, l2_param_t pa[], const char *fmt, va_list ap)
   {
  -    const char *cpB, *cpE;
  -    const char *cpC, *cpG;
  +    char *cpB, *cpE;
  +    char *spec;
       int ok;
       int i; 
  +    int n;
   
  -    if (pa == NULL || fmt == NULL || ap == NULL)
  +    /* argument sanity check */
  +    if (env == NULL || pa == NULL || fmt == NULL || ap == NULL)
           return L2_ERR_ARG;
  -    cpE = fmt;
  +
  +    /* on-the-fly create or just take over parameter specification string */
  +    spec = l2_util_vasprintf(fmt, ap);
  +
  +    /* enter the parsing loop */
  +    cpE = spec;
       while (*cpE != '\0') {
           /* determine begin of parameter name */
           cpB = cpE;
  -        while (*cpB == ',')
  -            cpB++;
  +        if ((n = strspn(cpB, " \t\r\n")) > 0)
  +            cpB += n;
   
           /* determine end of parameter name */
           cpE = cpB;
  -        while (*cpE != ',' && *cpE != '\0')
  +        if (!isalpha((int)*cpE)) {
  +            l2_env_errorinfo(env, L2_ERR_ARG, 
  +                             "expected alpha-numerical parameter "
  +                             "start character, got '%c'", *cpE);
  +            return L2_ERR_ARG;
  +        }
  +        cpE++;
  +        while (isalnum((int)*cpE))
               cpE++;
  +        if (*cpE != '=') {
  +            l2_env_errorinfo(env, L2_ERR_ARG, 
  +                             "expected assignment operator ('='), "
  +                             "got '%c'", *cpE);
  +            return L2_ERR_ARG;
  +        }
  +        *cpE++ = '\0';
   
           /* try to match with configured parameters */
           ok = FALSE;
           for (i = 0; pa[i].name != NULL; i++) {
  -            cpC = pa[i].name;
  -            cpG = cpB;
  -            while (*cpC != '\0' && cpG < cpE) {
  -                if (*cpC != *cpG)
  +            if (strcmp(pa[i].name, cpB) == 0) {
  +                ok = TRUE;
  +                break;
  +            }
  +        }
  +        if (!ok) {
  +            l2_env_errorinfo(env, L2_ERR_ARG, "unknown parameter name '%s'", cpB);
  +            return L2_ERR_ARG;
  +        }
  +
  +        /* determine parameter value */
  +        cpB = cpE;
  +        if ((n = strspn(cpB, " \t\r\n")) > 0)
  +            cpB += n;
  +        if (*cpB == '"') {
  +            cpB++;
  +            while (1) {
  +                cpE = cpB;
  +                if ((cpE = strchr(cpE+1, '"')) == NULL) {
  +                    l2_env_errorinfo(env, L2_ERR_ARG, "closing quote ('\"') not found");
  +                    return L2_ERR_ARG;
  +                }
  +                if (*(cpE-1) != '\\')
                       break;
  -                cpC++;
  -                cpG++;
               }
  -            if (*cpC == '\0' && cpG == cpE) {
  -                /* parameter matched, so store value */
  -                switch (pa[i].type) {
  -                    case L2_TYPE_CHAR:
  -                        *(char *)(pa[i].store) = va_get(ap, char); 
  -                        break;
  -                    case L2_TYPE_SHORT:
  -                        *(short *)(pa[i].store) = va_get(ap, short); 
  -                        break;
  -                    case L2_TYPE_INT:
  -                        *(int *)(pa[i].store) = va_get(ap, int); 
  -                        break;
  -                    case L2_TYPE_LONG:
  -                        *(long *)(pa[i].store) = va_get(ap, long); 
  -                        break;
  -                    case L2_TYPE_FLOAT:
  -                        *(float *)(pa[i].store) = va_get(ap, float); 
  -                        break;
  -                    case L2_TYPE_DOUBLE:
  -                        *(double *)(pa[i].store) = va_get(ap, double); 
  -                        break;
  -                    case L2_TYPE_STRING:
  -                        if (*(char **)(pa[i].store) != NULL) 
  -                            free(*(char **)(pa[i].store));
  -                        *(char **)(pa[i].store) = va_get(ap, charptr);
  -                        if (*(char **)(pa[i].store) != NULL)
  -                            *(char **)(pa[i].store) = strdup(*(char **)(pa[i].store));
  -                        break;
  -                    case L2_TYPE_CHARPTR:
  -                        *(char **)(pa[i].store) = va_get(ap, charptr); 
  -                        break;
  -                    case L2_TYPE_VOIDPTR:
  -                        *(void **)(pa[i].store) = va_get(ap, voidptr); 
  -                        break;
  +        }
  +        else {
  +            cpE = cpB;
  +            while (1) {
  +                if ((n = strcspn(cpE, " \t\r\n,")) > 0) {
  +                    cpE += n;
  +                    if (*(cpE-1) == '\\') {
  +                        cpE++;
  +                        continue;
  +                    }
                   }
  -                ok = TRUE;
                   break;
               }
           }
  -        if (!ok)
  -            return L2_ERR_USE;
  +        *cpE++ = '\0';
  +
  +        /* store parameter value */
  +        switch (pa[i].type) {
  +            case L2_TYPE_INT: {
  +                /* integer parameter */
  +                long val = strtol(cpB, &cpE, 10);
  +                if ((val == LONG_MIN || val == LONG_MAX) && errno == ERANGE) {
  +                    l2_env_errorinfo(env, L2_ERR_ARG, 
  +                                     "numerical parameter value out of range "
  +                                     "('%s')", cpB);
  +                    return L2_ERR_ARG;
  +                }
  +                if (*cpE != '\0') {
  +                    l2_env_errorinfo(env, L2_ERR_ARG, 
  +                                     "expected valid numerical parameter value, "
  +                                     "got '%c' character", *cpE);
  +                    return L2_ERR_ARG;
  +                }
  +                *(int *)(pa[i].store) = (int)val;
  +                break;
  +            }
  +            case L2_TYPE_FLT: {
  +                /* floating point parameter */
  +                double val = strtod(cpB, &cpE);
  +                if (val == HUGE_VAL && errno == ERANGE) {
  +                    l2_env_errorinfo(env, L2_ERR_ARG, 
  +                                     "floating point parameter value too huge "
  +                                     "('%s')", cpB);
  +                    return L2_ERR_ARG;
  +                }
  +                if (val == 0 && cpE == cpB) {
  +                    l2_env_errorinfo(env, L2_ERR_ARG, 
  +                                     "floating point parameter value conversion failed "
  +                                     "('%s')", cpB);
  +                }
  +                if (*cpE != '\0') {
  +                    l2_env_errorinfo(env, L2_ERR_ARG, 
  +                                     "expected valid floating point parameter value, "
  +                                     "got '%c' character", *cpE);
  +                    return L2_ERR_ARG;
  +                }
  +                *(float *)(pa[i].store) = (float)val;
  +                break;
  +            }
  +            case L2_TYPE_STR: {
  +                /* string parameter */
  +                if (*(char **)(pa[i].store) != NULL) 
  +                    free(*(char **)(pa[i].store));
  +                *(char **)(pa[i].store) = strdup(cpB);
  +                break;
  +            }
  +        }
  +
  +        /* skip delimiter */
  +        if ((n = strspn(cpE, " \t\r\n,")) > 0)
  +            cpE += n;
       }
  +
  +    free(spec);
  +
       return L2_OK;
   }
   

From ossp-cvs-owner@ossp.org  Wed Nov  7 14:47:07 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fA7Dl6F18942; Wed, 7 Nov 2001 14:47:06 +0100 (CET)
Date: Wed, 7 Nov 2001 14:47:06 +0100 (CET)
Message-Id: <200111071347.fA7Dl6F18942@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp INSTALL
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   07-Nov-2001 14:47:06
  Branch: HEAD                             Handle: 2001110713470600

  Modified files:
    ossp-pkg/lmtp2nntp      INSTALL

  Log:
    LMTP2NNTP_MAILER_MAX was renamed to LMTP2NNTP_MAILER_SIZE

  Summary:
    Revision    Changes     Path
    1.11        +1  -1      ossp-pkg/lmtp2nntp/INSTALL
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/INSTALL
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 INSTALL
  --- ossp-pkg/lmtp2nntp/INSTALL	2001/10/13 13:45:11	1.10
  +++ ossp-pkg/lmtp2nntp/INSTALL	2001/11/07 13:47:06	1.11
  @@ -55,7 +55,7 @@
        | 
        | Mlmtp2nntp, P=LMTP2NNTP_MAILER_PATH, F=LMTP2NNTP_MAILER_FLAGS,
        |             S=EnvFromSMTP/HdrFromSMTP, R=MasqSMTP, E=\r\n,
  -     |             L=990, T=DNS/RFC822/SMTP, M=LMTP2NNTP_MAILER_MAX,
  +     |             L=990, T=DNS/RFC822/SMTP, M=LMTP2NNTP_MAILER_SIZE,
        |             A=lmtp2nntp LMTP2NNTP_MAILER_ARGS dnl
        |                         -c LMTP2NNTP_MAILER_CLIENTBIND dnl
        |                         -d $h dnl

From ossp-cvs-owner@ossp.org  Wed Nov  7 15:22:28 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fA7EMQB23659; Wed, 7 Nov 2001 15:22:26 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id CA4884CE81C; Wed,  7 Nov 2001 15:22:26 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 aclocal.m4
Message-Id: <20011107142226.CA4884CE81C@visp.engelschall.com>
Date: Wed,  7 Nov 2001 15:22:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   07-Nov-2001 15:22:26
  Branch: HEAD                             Handle: 2001110714222600

  Modified files:
    ossp-pkg/l2             aclocal.m4

  Log:
    remove -ggdb3, because it causes trouble nowadays

  Summary:
    Revision    Changes     Path
    1.7         +0  -1      ossp-pkg/l2/aclocal.m4
  ____________________________________________________________________________

  Index: ossp-pkg/l2/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 aclocal.m4
  --- ossp-pkg/l2/aclocal.m4	2001/09/13 16:19:06	1.6
  +++ ossp-pkg/l2/aclocal.m4	2001/11/07 14:22:26	1.7
  @@ -140,7 +140,6 @@
                 * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
       esac
       AC_COMPILER_OPTION(defdbg, -DDEBUG, -DDEBUG, CFLAGS="$CFLAGS -DDEBUG")
  -    AC_COMPILER_OPTION(ggdb3, -ggdb3, -ggdb3, CFLAGS="$CFLAGS -ggdb3")
       CFLAGS="$CFLAGS -pedantic"
       CFLAGS="$CFLAGS -Wall"
       WMORE="-Wshadow -Wpointer-arith -Wcast-align -Winline"

From ossp-cvs-owner@ossp.org  Wed Nov  7 16:17:14 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fA7FHCg30634; Wed, 7 Nov 2001 16:17:12 +0100 (CET)
Date: Wed, 7 Nov 2001 16:17:12 +0100 (CET)
Message-Id: <200111071517.fA7FHCg30634@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp THANKS
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   07-Nov-2001 16:17:12
  Branch: HEAD                             Handle: 2001110715171200

  Modified files:
    ossp-pkg/lmtp2nntp      THANKS

  Log:
    thank you

  Summary:
    Revision    Changes     Path
    1.3         +6  -3      ossp-pkg/lmtp2nntp/THANKS
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/THANKS
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 THANKS
  --- ossp-pkg/lmtp2nntp/THANKS	2001/09/13 13:45:12	1.2
  +++ ossp-pkg/lmtp2nntp/THANKS	2001/11/07 15:17:12	1.3
  @@ -10,8 +10,11 @@
   
     THANKS
   
  -  This is a list of contributors who have written or edited
  -  parts of the OSSP lmtp2nntp sources or inspired the AUTHORS.
  +  This is a list of contributors who have written or edited parts of the OSSP
  +  lmtp2nntp sources, provided suggestions or inspired the AUTHORS.
   
  -  Christoph Schug    <christoph.schug@cw.com>
  +  Lawrence Greenfield   <leg+@andrew.cmu.edu>
  +  Christos Ricudis      <ricudis@paiko.gr>
  +  Christoph Schug       <christoph.schug@cw.com>
  +  Daniel Tschan         <tschan@devzone.ch>
   

From ossp-cvs-owner@ossp.org  Wed Nov  7 17:04:23 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fA7G4MB36870; Wed, 7 Nov 2001 17:04:22 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 9F3A64CE82C; Wed,  7 Nov 2001 17:04:22 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_channel.c
Message-Id: <20011107160422.9F3A64CE82C@visp.engelschall.com>
Date: Wed,  7 Nov 2001 17:04:22 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   07-Nov-2001 17:04:22
  Branch: HEAD                             Handle: 2001110716042200

  Modified files:
    ossp-pkg/l2             l2_channel.c

  Log:
    do not re-init related links, because the parser else has no chance

  Summary:
    Revision    Changes     Path
    1.26        +0  -4      ossp-pkg/l2/l2_channel.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_channel.c
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 l2_channel.c
  --- ossp-pkg/l2/l2_channel.c	2001/11/07 11:37:18	1.25
  +++ ossp-pkg/l2/l2_channel.c	2001/11/07 16:04:22	1.26
  @@ -146,8 +146,6 @@
           va_start(ap, ch);
           do {
               ch->parent  = ch0;
  -            ch->sibling = NULL;
  -            ch->child   = NULL;
               if (ch0->child == NULL)
                   ch0->child = ch;
               else {
  @@ -167,8 +165,6 @@
           do {
               ch0->sibling = ch;
               ch->parent   = ch0->parent;
  -            ch->sibling  = NULL;
  -            ch->child    = NULL;
               ch0 = ch;
               ch = (l2_channel_t *)va_arg(ap, l2_channel_t *);
           } while (ch != NULL);

From ossp-cvs-owner@ossp.org  Wed Nov  7 17:17:12 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fA7GHBB38644; Wed, 7 Nov 2001 17:17:11 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id E51074CE834; Wed,  7 Nov 2001 17:17:10 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 .cvsignore Makefile.in TODO l2.h.in l2_spec.c ...
Message-Id: <20011107161710.E51074CE834@visp.engelschall.com>
Date: Wed,  7 Nov 2001 17:17:10 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   07-Nov-2001 17:17:10
  Branch: HEAD                             Handle: 2001110716170900

  Added files:
    ossp-pkg/l2             l2_spec.c l2_spec.h l2_spec_parse.y l2_spec_scan.l
  Modified files:
    ossp-pkg/l2             .cvsignore Makefile.in TODO l2.h.in l2_test.c

  Log:
    HEADS UP, guys:
    
    Here comes the first cut for the long-awaited channel tree specification
    parser and channel tree builder. This certainly makes L2 finally _THE_ killer
    library in the logging field. Woohooo... and the crowd goes wild!
    
    It allows one to build an arbitrary complex logging channel tree
    out of a single textual specification. An example follows:
    
        noop -> {
            prefix(prefix="[%d-%m-%Y/%H:%M:%S] %L test[%P]: ", timezone="local")
            -> filter(regex="hecking", negate="0")
               -> buffer(size="800")
                  -> file(path="l2_test.log",append="1",perm="420");
            error: syslog(ident="L2-Test", facility="user",
                          remotehost="en1", logpid="1", target="remote");
            panic: smtp(rcpt="rse@engelschall.com", host="en1", port="25"
        }
    
    This allows one to log nice timestamp-prefixed messages containing the
    word "hecking" to a buffered file. Additionally if the message has a
    level higher or equal to "error" it also logs it remotely via UDP to the
    syslogd on en1. And additionally if the message is a panic message, it
    is also sent out as an Email via SMTP to the MTA on en1.
    
    Ever thought a C library has to be dull and simple? ;)
    
    PS: This stuff certainly needs more polishing and cleanup and also
        a few things I'll enhance in the future (for instance to remove the
        restriction that parameter values have to be in quotation marks, etc.).

  Summary:
    Revision    Changes     Path
    1.11        +3  -0      ossp-pkg/l2/.cvsignore
    1.30        +17 -0      ossp-pkg/l2/Makefile.in
    1.39        +5  -38     ossp-pkg/l2/TODO
    1.21        +3  -0      ossp-pkg/l2/l2.h.in
    1.1         +56 -0      ossp-pkg/l2/l2_spec.c
    1.1         +19 -0      ossp-pkg/l2/l2_spec.h
    1.1         +202 -0     ossp-pkg/l2/l2_spec_parse.y
    1.1         +152 -0     ossp-pkg/l2/l2_spec_scan.l
    1.44        +18 -0      ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/.cvsignore
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 .cvsignore
  --- ossp-pkg/l2/.cvsignore	2001/09/15 16:03:37	1.10
  +++ ossp-pkg/l2/.cvsignore	2001/11/07 16:17:09	1.11
  @@ -20,3 +20,6 @@
   l2_ut_pcre.gen
   l2_ut_pcre.tab
   l2.h
  +l2_spec_parse.c
  +l2_spec_parse.h
  +l2_spec_scan.c
  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 Makefile.in
  --- ossp-pkg/l2/Makefile.in	2001/11/05 20:39:35	1.29
  +++ ossp-pkg/l2/Makefile.in	2001/11/07 16:17:09	1.30
  @@ -53,6 +53,8 @@
   RMDIR       = rmdir
   POD2MAN     = pod2man
   TRUE        = true
  +BISON       = bison
  +FLEX        = flex
   SHTOOL      = ./shtool
   LIBTOOL     = ./libtool
   
  @@ -83,6 +85,9 @@
       l2_ut_level.lo \
       l2_ut_fmtcb.lo \
       l2_ut_sa.lo \
  +    l2_spec.lo \
  +    l2_spec_scan.lo \
  +    l2_spec_parse.lo \
       l2_version.lo
   
   #   list of source files
  @@ -159,6 +164,14 @@
   	./l2_ut_pcre.gen >l2_ut_pcre.tab
   	-$(RM) l2_ut_pcre.gen
   
  +#   build specification parser/scanner
  +l2_spec.c: l2_spec.h l2_spec_parse.h
  +l2_spec_scan.lo: l2_spec_scan.c l2_spec_parse.h
  +l2_spec_scan.c: l2_spec_scan.l
  +	$(FLEX) -f -Pl2_spec_ -s -8 -B -ol2_spec_scan.c l2_spec_scan.l
  +l2_spec_parse.c l2_spec_parse.h: l2_spec_parse.y
  +	$(BISON) -d -k -pl2_spec_ -ol2_spec_parse.c l2_spec_parse.y
  +
   #   build test suite programs
   l2_test: l2_test.o libl2.la
   	$(LIBTOOL) --mode=link --quiet $(CC) $(LDFLAGS) -o l2_test l2_test.o libl2.la $(LIBS)
  @@ -240,6 +253,8 @@
   	-$(RMDIR) .libs >/dev/null 2>&1 || $(TRUE)
   	$(RM) $(TARGET_LIBS)
   	$(RM) $(TARGET_TESTS)
  +	$(RM) l2_spec_scan.c # FIXME: remove later
  +	$(RM) l2_spec_parse.c l2_spec_parse.h # FIXME: remove later
   
   #   remove everything which can be regenerated
   #   by "./configure && make all"
  @@ -264,6 +279,8 @@
   	$(RM) l2_config.h.in
   	$(RM) l2.3
   	$(RM) l2++.3
  +	$(RM) l2_spec_scan.c
  +	$(RM) l2_spec_parse.c l2_spec_parse.h
   
   #   roll a distribution tarball
   dist: distclean
  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.38 -r1.39 TODO
  --- ossp-pkg/l2/TODO	2001/11/07 09:28:45	1.38
  +++ ossp-pkg/l2/TODO	2001/11/07 16:17:09	1.39
  @@ -2,6 +2,11 @@
   OSSP L2
   =======
   
  +Spec-Parsing:
  +- location tracking
  +- target=remote has to be currently after host=xxx because of
  +  single-configuration procedure
  +
   Channel-Only Revamping:
   - syscall override ala OSSP SA in l2_env_t
   - l2_objects.fig update
  @@ -376,41 +381,3 @@
       error:syslog
     }
   
  -Grammar
  -=======
  -
  -hierarchy      : stream 
  -               | '{' stream_list '}'
  -               ; 
  -
  -stream_list    : hierarchy 
  -               | hierarchy ';' stream_list
  -               ;
  -
  -stream         : channel
  -               | channel "->" hierarchy
  -               ;
  -
  -channel        : channel_mask ':' channel_spec
  -               | channel_spec
  -               ;
  -
  -channel_mask   : T_ID_LEVEL
  -               | '(' channel_levels ')'
  -               ;
  -
  -channel_levels : T_ID_LEVEL 
  -               | T_ID_LEVEL '|' channel_mask_list
  -               ;
  -
  -channel_spec   : T_ID_CHANNEL
  -               | T_ID_CHANNEL '(' channel_params ')'
  -               ;
  -
  -channel_params : channel_param
  -               | channel_param ',' channel_params
  -               ;
  -        
  -channel_param  : T_ID_PARAM '=' T_STRING
  -               ;
  - 
  Index: ossp-pkg/l2/l2.h.in
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 l2.h.in
  --- ossp-pkg/l2/l2.h.in	2001/11/07 13:05:20	1.20
  +++ ossp-pkg/l2/l2.h.in	2001/11/07 16:17:09	1.21
  @@ -227,6 +227,9 @@
   l2_result_t   l2_channel_type       (l2_channel_t *ch, l2_chtype_t *type);
   l2_result_t   l2_channel_env        (l2_channel_t *ch, l2_env_t **env);
   
  +/* channel tree specification operations */
  +l2_result_t   l2_spec               (l2_channel_t **ch, l2_env_t *env, const char *spec);
  +
   /* utility operations */
   l2_result_t   l2_util_setparams     (l2_env_t *env, l2_param_t p[], const char *fmt, va_list ap);
   l2_result_t   l2_util_l2s           (char *string,       size_t maxlen, int sep, unsigned int  levelmask);
  Index: ossp-pkg/l2/l2_spec.c
  ============================================================
  $ cvs update -p -r1.1 l2_spec.c
  
  #include <stdio.h>
  
  #include "l2.h"
  #include "l2_p.h"
  #include "l2_spec.h"
  #include "l2_spec_parse.h"
  
  extern int  l2_spec_lex_init(void *);
  extern int  l2_spec_lex_destroy(void *);
  extern void l2_spec_set_extra(void *, void *);
  extern int  l2_spec_debug;
  
  void dump(int level, l2_channel_t *ch)
  {
      l2_channel_t *chD;
  
      fprintf(stderr, "%*s%s (0x%lx)\n", level*4, "", ch->handler.name, ch);
      chD = NULL;
      while ((l2_channel_downstream(ch, &chD)) == L2_OK)
          dump(level+1, chD);
      return;
  }
  
  l2_result_t l2_spec(l2_channel_t **ch, l2_env_t *env, const char *spec)
  {
      l2_spec_ctx_t ctx;
      void *yyscan;
  
      l2_spec_lex_init(&yyscan);
      l2_spec_set_extra(&ctx, yyscan);
  
      ctx.yyscan   = yyscan;
      ctx.inputptr = spec;
      ctx.inputbuf = spec;
      ctx.inputlen = strlen(spec);
      ctx.env      = env;
      ctx.ch       = NULL;
      ctx.chTmp    = NULL;
      ctx.rv       = L2_OK;
  
  #if 0
      l2_spec_debug = 1;
  #endif
      if (l2_spec_parse(&ctx))
          ctx.rv = (ctx.rv == L2_OK ? L2_ERR_INT : ctx.rv);
  
      *ch = ctx.ch;
  
      dump(0, ctx.ch);
  
      l2_spec_lex_destroy(yyscan);
  
      return ctx.rv;
  }
  
  Index: ossp-pkg/l2/l2_spec.h
  ============================================================
  $ cvs update -p -r1.1 l2_spec.h
  #ifndef __L2_SPEC_H__
  #define __L2_SPEC_H__
  
  #include "l2.h"
  
  typedef struct {
      const char   *inputptr;
      const char   *inputbuf;
      size_t        inputlen;
      l2_env_t     *env;
      l2_channel_t *ch;
      l2_channel_t *chTmp;
      l2_result_t   rv;
      void         *yyscan;
  } l2_spec_ctx_t;
  
  extern int  l2_spec_parse(void *);
  
  #endif /* __L2_SPEC_H__ */
  Index: ossp-pkg/l2/l2_spec_parse.y
  ============================================================
  $ cvs update -p -r1.1 l2_spec_parse.y
  %{
  /*
  **  L2 - OSSP Logging Library
  **  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP L2, a flexible logging library which
  **  can be found at http://www.ossp.org/pkg/l2/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  l2_spec_parse.y: GNU Bison (Yacc-style) parser specification
  **
  **  ATTENTION: This requires GNU Bison 1.30 or newer!
  */
  
  #include "l2.h"      /* for l2_xxx() */
  #include "l2_p.h"    /* for l2_channel_t and l2_env_t internals */
  #include "l2_spec.h" /* for l2_spec_ctx_t */
  
  /* make sure yyparse() accepts a context pointer and
     passes through its inlined scanner context to yylex() */
  #define CTX           ((l2_spec_ctx_t *)ctx)
  #define YYPARSE_PARAM ctx
  #define YYLEX_PARAM   CTX->yyscan
  
  /* provide an explicit prototype for the yylex() function */
  extern int yylex(/*YYSTYPE*/ void *lvalp, 
                   /*YYLTYPE*/ void *llocp, l2_spec_ctx_t *ctx);
  
  /* generate verbose error messages and remember them inside the context */
  #undef  yyerror
  #define yyerror(msg) \
      do { \
          l2_env_errorinfo(CTX->env, L2_ERR_ARG, "%s", msg); \
          CTX->rv = L2_ERR_ARG; \
      } while (0)
  #define YYERROR_VERBOSE
  
  #define YYDEBUG 1
  %}
  
  %pure_parser
  %locations
  %defines
  
  %union {
      char         *cpValue;
      l2_channel_t *chChannel;
      unsigned int  nLevels;
  }
  
  %type  <chChannel> stream
  %type  <chChannel> streams
  %type  <chChannel> channel
  %type  <chChannel> channel_spec
  %type  <nLevels>   channel_mask
  %type  <nLevels>   channel_levels
  
  %token <cpValue>   T_ID
  %token <cpValue>   T_STRING
  
  %token             T_OP_ARROW
  %left              T_OP_ARROW
  
  %%
  
  root           : stream
                   { CTX->ch = $1; }
                 ; 
  
  stream         : channel
                   { 
                       $$ = $1; 
                   }
                 | channel T_OP_ARROW stream
                   { 
                       $$ = $1; 
                       if ((CTX->rv = l2_channel_link($1, L2_LINK_CHILD, $3, NULL)) != L2_OK) {
                           l2_env_errorinfo(CTX->env, CTX->rv, 
                                            "unable to link parent '%s' with child '%s'", 
                                            $1->handler.name, $3->handler.name);
                           YYERROR;
                       }
                   }
                 | channel T_OP_ARROW '{' streams '}'
                   { 
                       $$ = $1; 
                       if ((CTX->rv = l2_channel_link($1, L2_LINK_CHILD, $4, NULL)) != L2_OK) {
                           l2_env_errorinfo(CTX->env, CTX->rv, 
                                            "unable to link parent '%s' with child list",
                                            $1->handler.name);
                           YYERROR;
                       }
                   }
                 ;
  
  streams        : stream 
                   { $$ = $1; }
                 | stream ';' streams
                   { $$ = $1; l2_channel_link($1, L2_LINK_SIBLING, $3, NULL); }
                 ;
  
  channel        : channel_mask '/' channel_mask ':' channel_spec
                   { $$ = $5; l2_channel_levels($5, $1, $3); }
                 | channel_mask ':' channel_spec
                   { $$ = $3; l2_channel_levels($3, $1, L2_LEVEL_NONE); }
                 | channel_spec
                   { $$ = $1; }
                 ;
  
  channel_mask   : T_ID
                   { 
                       unsigned int levelmask;
                       if ((CTX->rv = l2_util_s2l($1, strlen($1), ',', &levelmask)) != L2_OK) {
                           l2_env_errorinfo(CTX->env, CTX->rv, "invalid level '%s'", $1);
                           YYERROR;
                       }
                       $$ = L2_LEVEL_UPTO(levelmask);
                   }
                 | '(' channel_levels ')'
                   { $$ = $2; }
                 ;
  
  channel_levels : T_ID
                   { 
                       unsigned int levelmask;
                       if ((CTX->rv = l2_util_s2l($1, strlen($1), ',', &levelmask)) != L2_OK) {
                           l2_env_errorinfo(CTX->env, CTX->rv, "invalid level '%s'", $1);
                           YYERROR;
                       }
                       $$ = levelmask;
                   }
                 | T_ID '|' channel_levels
                   { 
                       unsigned int levelmask;
                       if ((CTX->rv = l2_util_s2l($1, strlen($1), ',', &levelmask)) != L2_OK) {
                           l2_env_errorinfo(CTX->env, CTX->rv, "invalid level '%s'", $1);
                           YYERROR;
                       }
                       $$ = levelmask | $3; 
                   }
                 ;
  
  channel_spec   : T_ID
                   { 
                       l2_channel_t *ch;
                       if ((CTX->rv = l2_channel_create(&ch, CTX->env, $1)) != L2_OK) {
                           l2_env_errorinfo(CTX->env, CTX->rv, "failed to create channel '%s'", $1);
                           YYERROR;
                       }
                       $$ = ch;
                       /* provide channel to channel_param rule below
                          because it does not know where on the token stack
                          our $$ is because it is a sub-rule of the recursive
                          channel_param_list rule and hence cannot use
                          "$<chChannel>-n". */
                       CTX->chTmp = ch; 
                   }
                   channel_params
                   { 
                       $$ = $<chChannel>2;
                       CTX->chTmp = NULL;
                   }
                 ;
  
  channel_params : /* empty */
                 | '(' channel_param_list ')'
                 ;
  
  channel_param_list : /* empty */
                     | channel_param
                     | channel_param ',' channel_param_list
                     ;
          
  channel_param  : T_ID '=' T_STRING
                   { 
                       if ((CTX->rv = l2_channel_configure(CTX->chTmp, "%s=\"%s\"", $1, $3)) != L2_OK) {
                           l2_env_errorinfo(CTX->env, CTX->rv, "failed to configure channel with '%s=\"%s\"'", $1, $3);
                           YYERROR;
                       }
                   }
                 ;
   
  %%
  
  Index: ossp-pkg/l2/l2_spec_scan.l
  ============================================================
  $ cvs update -p -r1.1 l2_spec_scan.l
  %{
  /*
  **  L2 - OSSP Logging Library
  **  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP L2, a flexible logging library which
  **  can be found at http://www.ossp.org/pkg/l2/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  l2_spec_scan.l: GNU Flex (Lex-style) scanner specification
  **
  **  ATTENTION: This requires GNU Flex 2.5.6-dev-2001.11.01 or newer!
  */
  
  #include "l2.h"             /* for l2_xxx() */
  #include "l2_spec.h"        /* for l2_spec_ctx_t */
  #include "l2_spec_parse.h"  /* for T_XXXX */
  
  /* how to find our own context */
  #define CTX ((l2_spec_ctx_t *)yyget_extra(yy_globals))
  
  /* provide own input handling */
  #define YY_NO_UNPUT 1
  #undef  YY_INPUT
  #define YY_INPUT(buf,result,max_size) (result = yyinput(CTX, buf, max_size))
  static int yyinput(l2_spec_ctx_t *ctx, char *buf, int max_size);
  %}
  
  %pointer
  /* %option stack */
  %option reentrant-bison
  %option never-interactive
  %option noyywrap
  
  %x str
  
  %%
  
    char  caStr[2048];
    char *cpStr = NULL;
  
   /*
    * Whitespaces
    */
  [ \t\n]+ {
      /* NOOP */
  }
  
   /*
    * C-style strings ("...")
    */
  \" {
      cpStr = caStr;
      BEGIN(str);
  }   
  <str>\" {
      BEGIN(INITIAL);
      *cpStr = '\0';
      yylval->cpValue = strdup(caStr);
      return T_STRING;
  }   
  <str>\n {
      l2_env_errorinfo(CTX->env, L2_ERR_ARG, "%s", "Unterminated string");
      CTX->rv = L2_ERR_ARG;
  }   
  <str>\\[0-7]{1,3} {
      int result;
      (void)sscanf(yytext+1, "%o", &result);
      if (result > 0xff) {
          l2_env_errorinfo(CTX->env, L2_ERR_ARG, "%s", "Escape sequence out of bound");
          CTX->rv = L2_ERR_ARG;
      }
      else
          *cpStr++ = result;
  }
  <str>\\[0-9]+ {
      l2_env_errorinfo(CTX->env, L2_ERR_ARG, "%s", "Bad escape sequence");
      CTX->rv = L2_ERR_ARG;
  }
  <str>\\n { *cpStr++ = '\n'; }
  <str>\\r { *cpStr++ = '\r'; }
  <str>\\t { *cpStr++ = '\t'; }
  <str>\\b { *cpStr++ = '\b'; }
  <str>\\f { *cpStr++ = '\f'; }
  <str>\\(.|\n) {
      *cpStr++ = yytext[1];
  }
  <str>[^\\\n\"]+ {
      char *cp = yytext;
      while (*cp != '\0')
          *cpStr++ = *cp++;
  }
  <str>. {
      *cpStr++ = yytext[1];
  }
  
   /*
    * Operators
    */
  "->" { 
      return T_OP_ARROW;
  }
  
   /*
    * Identifiers
    */
  [a-zA-Z][a-zA-Z0-9_-]* {
      yylval->cpValue = strdup(yytext);
      return T_ID;
  }
  
   /*
    * Anything else is returned as is...
    */
  .|\n {
      return yytext[0];
  }
  
  %%
  
  static int yyinput(l2_spec_ctx_t *ctx, char *buf, int max_size)
  {
      int n;
  
      n = (ctx->inputbuf + ctx->inputlen - ctx->inputptr);
      if (n > max_size)
          n = max_size;
      if (n <= 0)
          return YY_NULL;
      memcpy(buf, ctx->inputptr, n);
      ctx->inputptr += n;
      return n;
  }
  
  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.43 -r1.44 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/11/07 13:05:20	1.43
  +++ ossp-pkg/l2/l2_test.c	2001/11/07 16:17:09	1.44
  @@ -60,12 +60,16 @@
   int main(int argc, char *argv[])
   {
       l2_channel_t *ch;
  +#if 1
  +    char *spec;
  +#else
       l2_channel_t *chFilter;
       l2_channel_t *chPrefix;
       l2_channel_t *chBuffer;
       l2_channel_t *chFile;
       l2_channel_t *chSyslog;
       l2_channel_t *chSmtp;
  +#endif
       l2_result_t rv;
       l2_env_t *env;
   
  @@ -77,6 +81,19 @@
       if ((rv = l2_env_formatter(env, 'S', l2_util_fmt_dump, NULL)) != L2_OK)
           die(env, rv, "failed to configure formatter for %%S");
   
  +#if 1
  +    spec = "noop -> {"
  +           "  prefix(prefix=\"[%d-%m-%Y/%H:%M:%S] %L test[%P]: \", timezone=\"local\")"
  +           "  -> filter(regex=\"hecking\", negate=\"0\")"
  +           "     -> buffer(size=\"800\")"
  +           "        -> file(path=\"l2_test.log\",append=\"1\",perm=\"420\") ;"
  +           "  syslog(ident=\"L2-Test\", facility=\"user\", "
  +           "         remotehost=\"en1\", logpid=\"1\", target=\"remote\")"
  +           "}";
  +    fprintf(stderr, "configuring: %s\n", spec);
  +    if ((rv = l2_spec(&ch, env, spec)) != L2_OK)
  +        die(env, rv, "failed to parse specification");
  +#else
       /* create noop channel */
       if ((rv = l2_channel_create(&ch, env, "noop")) != L2_OK)
           die(env, rv, "failed to create noop channel");
  @@ -128,6 +145,7 @@
           die(env, rv, "failed to link file-related channels together as a child sequence");
       if ((rv = l2_channel_link(ch, L2_LINK_CHILD, chSyslog, NULL)) != L2_OK)
           die(env, rv, "failed to link syslog-related channels together as a child sequence");
  +#endif
   
       /* open channel tree */
       if ((rv = l2_channel_open(ch)) != L2_OK)

From ossp-cvs-owner@ossp.org  Wed Nov  7 17:18:40 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fA7GIdB38999; Wed, 7 Nov 2001 17:18:39 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 1DCA34CE833; Wed,  7 Nov 2001 17:18:39 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 Makefile.in
Message-Id: <20011107161839.1DCA34CE833@visp.engelschall.com>
Date: Wed,  7 Nov 2001 17:18:39 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   07-Nov-2001 17:18:39
  Branch: HEAD                             Handle: 2001110716183800

  Modified files:
    ossp-pkg/l2             Makefile.in

  Log:
    ok, this was just for easier developing the parser

  Summary:
    Revision    Changes     Path
    1.31        +0  -2      ossp-pkg/l2/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 Makefile.in
  --- ossp-pkg/l2/Makefile.in	2001/11/07 16:17:09	1.30
  +++ ossp-pkg/l2/Makefile.in	2001/11/07 16:18:38	1.31
  @@ -253,8 +253,6 @@
   	-$(RMDIR) .libs >/dev/null 2>&1 || $(TRUE)
   	$(RM) $(TARGET_LIBS)
   	$(RM) $(TARGET_TESTS)
  -	$(RM) l2_spec_scan.c # FIXME: remove later
  -	$(RM) l2_spec_parse.c l2_spec_parse.h # FIXME: remove later
   
   #   remove everything which can be regenerated
   #   by "./configure && make all"

From ossp-cvs-owner@ossp.org  Wed Nov  7 17:21:42 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fA7GLfB39480; Wed, 7 Nov 2001 17:21:41 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 322724CE832; Wed,  7 Nov 2001 17:21:41 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp autogen.sh
Message-Id: <20011107162141.322724CE832@visp.engelschall.com>
Date: Wed,  7 Nov 2001 17:21:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   07-Nov-2001 17:21:41
  Branch: HEAD                             Handle: 2001110716214000

  Modified files:
    ossp-pkg/lmtp2nntp      autogen.sh

  Log:
    fix autogen stuff for SA in lmtp2nntp

  Summary:
    Revision    Changes     Path
    1.7         +1  -1      ossp-pkg/lmtp2nntp/autogen.sh
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/autogen.sh
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 autogen.sh
  --- ossp-pkg/lmtp2nntp/autogen.sh	2001/10/02 13:36:33	1.6
  +++ ossp-pkg/lmtp2nntp/autogen.sh	2001/11/07 16:21:40	1.7
  @@ -71,6 +71,6 @@
   (cd l2  && ./autogen.sh)
   echo "<=== l2"
   echo "===> sa (autogen.sh)"
  -(cd sa  && ./autogen.sh)
  +(cd sa  && ./devtool autogen)
   echo "<=== sa"
   

From ossp-cvs-owner@ossp.org  Wed Nov  7 17:25:58 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fA7GPvB40616; Wed, 7 Nov 2001 17:25:57 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 452084CE83B; Wed,  7 Nov 2001 17:25:57 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Message-Id: <20011107162557.452084CE83B@visp.engelschall.com>
Date: Wed,  7 Nov 2001 17:25:57 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   07-Nov-2001 17:25:57
  Branch: HEAD                             Handle: 2001110716255600

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    remember issue

  Summary:
    Revision    Changes     Path
    1.40        +1  -0      ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.39 -r1.40 TODO
  --- ossp-pkg/l2/TODO	2001/11/07 16:17:09	1.39
  +++ ossp-pkg/l2/TODO	2001/11/07 16:25:56	1.40
  @@ -6,6 +6,7 @@
   - location tracking
   - target=remote has to be currently after host=xxx because of
     single-configuration procedure
  +- prefix channels seems not to do anything?!
   
   Channel-Only Revamping:
   - syscall override ala OSSP SA in l2_env_t

From ossp-cvs-owner@ossp.org  Wed Nov  7 17:29:58 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fA7GTvB41170; Wed, 7 Nov 2001 17:29:57 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 3EBE64CE837; Wed,  7 Nov 2001 17:29:57 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_spec_scan.l
Message-Id: <20011107162957.3EBE64CE837@visp.engelschall.com>
Date: Wed,  7 Nov 2001 17:29:57 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   07-Nov-2001 17:29:57
  Branch: HEAD                             Handle: 2001110716295600

  Modified files:
    ossp-pkg/l2             l2_spec_scan.l

  Log:
    fix warning

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/l2/l2_spec_scan.l
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_spec_scan.l
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 l2_spec_scan.l
  --- ossp-pkg/l2/l2_spec_scan.l	2001/11/07 16:17:09	1.1
  +++ ossp-pkg/l2/l2_spec_scan.l	2001/11/07 16:29:56	1.2
  @@ -82,7 +82,7 @@
       CTX->rv = L2_ERR_ARG;
   }   
   <str>\\[0-7]{1,3} {
  -    int result;
  +    unsigned int result;
       (void)sscanf(yytext+1, "%o", &result);
       if (result > 0xff) {
           l2_env_errorinfo(CTX->env, L2_ERR_ARG, "%s", "Escape sequence out of bound");

From ossp-cvs-owner@ossp.org  Wed Nov  7 17:30:52 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fA7GUpB41761; Wed, 7 Nov 2001 17:30:51 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 72AFE4CE83E; Wed,  7 Nov 2001 17:30:51 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_spec.h
Message-Id: <20011107163051.72AFE4CE83E@visp.engelschall.com>
Date: Wed,  7 Nov 2001 17:30:51 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   07-Nov-2001 17:30:51
  Branch: HEAD                             Handle: 2001110716305100

  Modified files:
    ossp-pkg/l2             l2_spec.h

  Log:
    cleanup and document

  Summary:
    Revision    Changes     Path
    1.2         +8  -10     ossp-pkg/l2/l2_spec.h
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_spec.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 l2_spec.h
  --- ossp-pkg/l2/l2_spec.h	2001/11/07 16:17:09	1.1
  +++ ossp-pkg/l2/l2_spec.h	2001/11/07 16:30:51	1.2
  @@ -4,16 +4,14 @@
   #include "l2.h"
   
   typedef struct {
  -    const char   *inputptr;
  -    const char   *inputbuf;
  -    size_t        inputlen;
  -    l2_env_t     *env;
  -    l2_channel_t *ch;
  -    l2_channel_t *chTmp;
  -    l2_result_t   rv;
  -    void         *yyscan;
  +    const char   *inputptr;  /* input buffer: current reading pointer */
  +    const char   *inputbuf;  /* input buffer: begin of buffer */
  +    size_t        inputlen;  /* input buffer: size  of buffer */
  +    l2_env_t     *env;       /* environment for channel create & error remember */
  +    l2_channel_t *ch;        /* top-level/root/result channel */
  +    l2_channel_t *chTmp;     /* temporary channel needed in the parser */
  +    l2_result_t   rv;        /* return value */
  +    void         *yyscan;    /* Flex scanner context */
   } l2_spec_ctx_t;
  -
  -extern int  l2_spec_parse(void *);
   
   #endif /* __L2_SPEC_H__ */

From ossp-cvs-owner@ossp.org  Wed Nov  7 17:35:20 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fA7GZJB42675; Wed, 7 Nov 2001 17:35:19 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 2F0264CE842; Wed,  7 Nov 2001 17:35:19 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_spec.c
Message-Id: <20011107163519.2F0264CE842@visp.engelschall.com>
Date: Wed,  7 Nov 2001 17:35:19 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   07-Nov-2001 17:35:19
  Branch: HEAD                             Handle: 2001110716351800

  Modified files:
    ossp-pkg/l2             l2_spec.c

  Log:
    cleanup and documentation

  Summary:
    Revision    Changes     Path
    1.2         +40 -20     ossp-pkg/l2/l2_spec.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_spec.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 l2_spec.c
  --- ossp-pkg/l2/l2_spec.c	2001/11/07 16:17:09	1.1
  +++ ossp-pkg/l2/l2_spec.c	2001/11/07 16:35:18	1.2
  @@ -1,35 +1,57 @@
  +/*
  +**  L2 - OSSP Logging Library
  +**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**
  +**  This file is part of OSSP L2, a flexible logging library which
  +**  can be found at http://www.ossp.org/pkg/l2/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  l2_spec.c: channel tree specification support
  +*/
   
  -#include <stdio.h>
  -
   #include "l2.h"
   #include "l2_p.h"
   #include "l2_spec.h"
   #include "l2_spec_parse.h"
   
  +/* prototypes for Flex-generated scanner */
   extern int  l2_spec_lex_init(void *);
   extern int  l2_spec_lex_destroy(void *);
   extern void l2_spec_set_extra(void *, void *);
  -extern int  l2_spec_debug;
  -
  -void dump(int level, l2_channel_t *ch)
  -{
  -    l2_channel_t *chD;
   
  -    fprintf(stderr, "%*s%s (0x%lx)\n", level*4, "", ch->handler.name, ch);
  -    chD = NULL;
  -    while ((l2_channel_downstream(ch, &chD)) == L2_OK)
  -        dump(level+1, chD);
  -    return;
  -}
  +/* prototypes for Bison-generated parser */
  +extern int  l2_spec_parse(void *);
   
  +/* build a channel tree according to a textual specification */
   l2_result_t l2_spec(l2_channel_t **ch, l2_env_t *env, const char *spec)
   {
       l2_spec_ctx_t ctx;
       void *yyscan;
   
  +    /* initialize scanner */
       l2_spec_lex_init(&yyscan);
       l2_spec_set_extra(&ctx, yyscan);
   
  +    /* establish our own context which is passed 
  +       through the parser and scanner */
       ctx.yyscan   = yyscan;
       ctx.inputptr = spec;
       ctx.inputbuf = spec;
  @@ -39,17 +61,15 @@
       ctx.chTmp    = NULL;
       ctx.rv       = L2_OK;
   
  -#if 0
  -    l2_spec_debug = 1;
  -#endif
  +    /* start the parser loop */
       if (l2_spec_parse(&ctx))
           ctx.rv = (ctx.rv == L2_OK ? L2_ERR_INT : ctx.rv);
  -
  -    *ch = ctx.ch;
  -
  -    dump(0, ctx.ch);
   
  +    /* destroy scanner */
       l2_spec_lex_destroy(yyscan);
  +
  +    /* provide root/top-level channel as result */
  +    *ch = ctx.ch;
   
       return ctx.rv;
   }

From ossp-cvs-owner@ossp.org  Wed Nov  7 17:43:08 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fA7Gh7B43802; Wed, 7 Nov 2001 17:43:07 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 8669B4CE83F; Wed,  7 Nov 2001 17:43:07 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_spec.c
Message-Id: <20011107164307.8669B4CE83F@visp.engelschall.com>
Date: Wed,  7 Nov 2001 17:43:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   07-Nov-2001 17:43:07
  Branch: HEAD                             Handle: 2001110716430700

  Modified files:
    ossp-pkg/l2             l2_spec.c

  Log:
    reduce includes

  Summary:
    Revision    Changes     Path
    1.3         +0  -1      ossp-pkg/l2/l2_spec.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_spec.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2_spec.c
  --- ossp-pkg/l2/l2_spec.c	2001/11/07 16:35:18	1.2
  +++ ossp-pkg/l2/l2_spec.c	2001/11/07 16:43:07	1.3
  @@ -30,7 +30,6 @@
   #include "l2.h"
   #include "l2_p.h"
   #include "l2_spec.h"
  -#include "l2_spec_parse.h"
   
   /* prototypes for Flex-generated scanner */
   extern int  l2_spec_lex_init(void *);

From ossp-cvs-owner@ossp.org  Wed Nov  7 18:01:06 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fA7H15B46440; Wed, 7 Nov 2001 18:01:05 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id DA7D14CE83F; Wed,  7 Nov 2001 18:01:05 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_spec_parse.y
Message-Id: <20011107170105.DA7D14CE83F@visp.engelschall.com>
Date: Wed,  7 Nov 2001 18:01:05 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   07-Nov-2001 18:01:05
  Branch: HEAD                             Handle: 2001110717010500

  Modified files:
    ossp-pkg/l2             l2_spec_parse.y

  Log:
    more cleanups

  Summary:
    Revision    Changes     Path
    1.2         +39 -28     ossp-pkg/l2/l2_spec_parse.y
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_spec_parse.y
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 l2_spec_parse.y
  --- ossp-pkg/l2/l2_spec_parse.y	2001/11/07 16:17:09	1.1
  +++ ossp-pkg/l2/l2_spec_parse.y	2001/11/07 17:01:05	1.2
  @@ -30,8 +30,7 @@
   **  ATTENTION: This requires GNU Bison 1.30 or newer!
   */
   
  -#include "l2.h"      /* for l2_xxx() */
  -#include "l2_p.h"    /* for l2_channel_t and l2_env_t internals */
  +#include "l2.h"      /* for l2_xxx() API */
   #include "l2_spec.h" /* for l2_spec_ctx_t */
   
   /* make sure yyparse() accepts a context pointer and
  @@ -40,51 +39,59 @@
   #define YYPARSE_PARAM ctx
   #define YYLEX_PARAM   CTX->yyscan
   
  -/* provide an explicit prototype for the yylex() function */
  +/* provide an explicit prototype for the yylex() function but use 
  +   "void *" instead of correct type because at this point in the 
  +   generation process we have the types still not available */
   extern int yylex(/*YYSTYPE*/ void *lvalp, 
                    /*YYLTYPE*/ void *llocp, l2_spec_ctx_t *ctx);
   
   /* generate verbose error messages and remember them inside the context */
   #undef  yyerror
   #define yyerror(msg) \
  -    do { \
  -        l2_env_errorinfo(CTX->env, L2_ERR_ARG, "%s", msg); \
  -        CTX->rv = L2_ERR_ARG; \
  -    } while (0)
  +    do { l2_env_errorinfo(CTX->env, L2_ERR_ARG, "%s", msg); \
  +         CTX->rv = L2_ERR_ARG; } while (0)
   #define YYERROR_VERBOSE
  -
  -#define YYDEBUG 1
   %}
   
  +    /* parser options */
   %pure_parser
   %locations
   %defines
   
  +    /* the YYSTYPE: parser token value */
   %union {
       char         *cpValue;
       l2_channel_t *chChannel;
       unsigned int  nLevels;
   }
   
  -%type  <chChannel> stream
  -%type  <chChannel> streams
  -%type  <chChannel> channel
  -%type  <chChannel> channel_spec
  -%type  <nLevels>   channel_mask
  -%type  <nLevels>   channel_levels
  +    /* assign YYSTYPE elements to parser rules */
  +%type <chChannel> stream
  +%type <chChannel> streams
  +%type <chChannel> channel
  +%type <chChannel> channel_spec
  +%type <nLevels>   channel_mask
  +%type <nLevels>   channel_levels
  +
  +    /* list of scanner tokens */
  +%token <cpValue>  T_ID
  +%token <cpValue>  T_STRING
  +%token            T_OP_ARROW
   
  -%token <cpValue>   T_ID
  -%token <cpValue>   T_STRING
  +    /* operator association */
  +%right T_OP_ARROW
   
  -%token             T_OP_ARROW
  -%left              T_OP_ARROW
  +    /* grammar start rule */
  +%start tree
   
   %%
   
  -root           : stream
  +               /* channel tree */
  +tree           : stream
                    { CTX->ch = $1; }
                  ; 
   
  +               /* stream of channels */
   stream         : channel
                    { 
                        $$ = $1; 
  @@ -93,9 +100,7 @@
                    { 
                        $$ = $1; 
                        if ((CTX->rv = l2_channel_link($1, L2_LINK_CHILD, $3, NULL)) != L2_OK) {
  -                         l2_env_errorinfo(CTX->env, CTX->rv, 
  -                                          "unable to link parent '%s' with child '%s'", 
  -                                          $1->handler.name, $3->handler.name);
  +                         l2_env_errorinfo(CTX->env, CTX->rv, "unable to link parent with child");
                            YYERROR;
                        }
                    }
  @@ -103,20 +108,20 @@
                    { 
                        $$ = $1; 
                        if ((CTX->rv = l2_channel_link($1, L2_LINK_CHILD, $4, NULL)) != L2_OK) {
  -                         l2_env_errorinfo(CTX->env, CTX->rv, 
  -                                          "unable to link parent '%s' with child list",
  -                                          $1->handler.name);
  +                         l2_env_errorinfo(CTX->env, CTX->rv, "unable to link parent with child list");
                            YYERROR;
                        }
                    }
                  ;
   
  +               /* list of sibling streams */
   streams        : stream 
                    { $$ = $1; }
                  | stream ';' streams
                    { $$ = $1; l2_channel_link($1, L2_LINK_SIBLING, $3, NULL); }
                  ;
   
  +               /* single channel */
   channel        : channel_mask '/' channel_mask ':' channel_spec
                    { $$ = $5; l2_channel_levels($5, $1, $3); }
                  | channel_mask ':' channel_spec
  @@ -125,6 +130,7 @@
                    { $$ = $1; }
                  ;
   
  +               /* channel write or flush mask */
   channel_mask   : T_ID
                    { 
                        unsigned int levelmask;
  @@ -135,9 +141,12 @@
                        $$ = L2_LEVEL_UPTO(levelmask);
                    }
                  | '(' channel_levels ')'
  -                 { $$ = $2; }
  +                 { 
  +                     $$ = $2; 
  +                 }
                  ;
   
  +               /* list of channels in a mask */
   channel_levels : T_ID
                    { 
                        unsigned int levelmask;
  @@ -158,6 +167,7 @@
                    }
                  ;
   
  +               /* specifcation of a single channel */
   channel_spec   : T_ID
                    { 
                        l2_channel_t *ch;
  @@ -175,11 +185,12 @@
                    }
                    channel_params
                    { 
  -                     $$ = $<chChannel>2;
  +                     $$ = $<chChannel>2; /* pass result */
                        CTX->chTmp = NULL;
                    }
                  ;
   
  +               /* channel parameters */
   channel_params : /* empty */
                  | '(' channel_param_list ')'
                  ;

From ossp-cvs-owner@ossp.org  Thu Nov  8 09:32:14 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fA88WDp65969; Thu, 8 Nov 2001 09:32:13 +0100 (CET)
Date: Thu, 8 Nov 2001 09:32:13 +0100 (CET)
Message-Id: <200111080832.fA88WDp65969@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   08-Nov-2001 09:32:13
  Branch: HEAD                             Handle: 2001110808321200

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c

  Log:
    adapt correct IPv6 syntax used by updated sa

  Summary:
    Revision    Changes     Path
    1.97        +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.96 -r1.97 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/10/15 14:22:12	1.96
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/11/08 08:32:12	1.97
  @@ -938,7 +938,7 @@
               fprintf(stderr, "%s:Error: Too many ACL (%d) using option -a (no space for additional fake IPv6 ACL)\n", ctx->progname, ctx->option_aclc);
               CU(ERR_EXECUTION);
           }
  -        ctx->option_acl[ctx->option_aclc].acl = "0000:0000:0000:0000:0000:0000:0000:0000";
  +        ctx->option_acl[ctx->option_aclc].acl = "[0::0]";
           ctx->option_acl[ctx->option_aclc].not = FALSE;
           ctx->option_acl[ctx->option_aclc].prefixlen = 0;
           if ((rc = sa_addr_create(&ctx->option_acl[ctx->option_aclc].saa)) != SA_OK) {

From ossp-cvs-owner@ossp.org  Thu Nov  8 10:02:36 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fA892ZB70041; Thu, 8 Nov 2001 10:02:35 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 8D33D4CE891; Thu,  8 Nov 2001 10:02:35 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_syslog.c
Message-Id: <20011108090235.8D33D4CE891@visp.engelschall.com>
Date: Thu,  8 Nov 2001 10:02:35 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   08-Nov-2001 10:02:35
  Branch: HEAD                             Handle: 2001110809023500

  Modified files:
    ossp-pkg/l2             l2_ch_syslog.c

  Log:
    fix big security hole

  Summary:
    Revision    Changes     Path
    1.28        +1  -1      ossp-pkg/l2/l2_ch_syslog.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_syslog.c
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 l2_ch_syslog.c
  --- ossp-pkg/l2/l2_ch_syslog.c	2001/11/07 13:05:20	1.27
  +++ ossp-pkg/l2/l2_ch_syslog.c	2001/11/08 09:02:35	1.28
  @@ -275,7 +275,7 @@
   
       if (strcmp(cfg->szTarget, "local") == 0) {
           /* send to local syslogd via syslog(3) */
  -        syslog(prio, buf);
  +        syslog(prio, "%s", buf);
       }
       else {
           /* send to remote syslogd via UDP */

From ossp-cvs-owner@ossp.org  Thu Nov  8 10:28:45 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fA89ShB73306; Thu, 8 Nov 2001 10:28:44 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 1C1BF4CE88C; Thu,  8 Nov 2001 10:28:36 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_spec_parse.y l2_spec_scan.l
Message-Id: <20011108092836.1C1BF4CE88C@visp.engelschall.com>
Date: Thu,  8 Nov 2001 10:28:36 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   08-Nov-2001 10:28:36
  Branch: HEAD                             Handle: 2001110809283500

  Modified files:
    ossp-pkg/l2             l2_spec_parse.y l2_spec_scan.l

  Log:
    code cleanups and documentation

  Summary:
    Revision    Changes     Path
    1.3         +150 -130   ossp-pkg/l2/l2_spec_parse.y
    1.3         +4  -1      ossp-pkg/l2/l2_spec_scan.l
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_spec_parse.y
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2_spec_parse.y
  --- ossp-pkg/l2/l2_spec_parse.y	2001/11/07 17:01:05	1.2
  +++ ossp-pkg/l2/l2_spec_parse.y	2001/11/08 09:28:35	1.3
  @@ -53,161 +53,181 @@
   #define YYERROR_VERBOSE
   %}
   
  -    /* parser options */
  +/* parser options */
   %pure_parser
   %locations
   %defines
   
  -    /* the YYSTYPE: parser token value */
  +/* the YYSTYPE: parser token value */
   %union {
       char         *cpValue;
       l2_channel_t *chChannel;
       unsigned int  nLevels;
   }
   
  -    /* assign YYSTYPE elements to parser rules */
  +/* assign YYSTYPE elements to parser rules */
   %type <chChannel> stream
   %type <chChannel> streams
   %type <chChannel> channel
  -%type <chChannel> channel_spec
  -%type <nLevels>   channel_mask
  -%type <nLevels>   channel_levels
  +%type <chChannel> channel_cons
  +%type <nLevels>   channel_level
  +%type <nLevels>   channel_level_mask
   
  -    /* list of scanner tokens */
  +/* list of scanner tokens */
   %token <cpValue>  T_ID
   %token <cpValue>  T_STRING
   %token            T_OP_ARROW
   
  -    /* operator association */
  +/* operator association */
   %right T_OP_ARROW
   
  -    /* grammar start rule */
  +/* grammar start rule 
  +   (technically redundant but explicit to be sure) */
   %start tree
   
   %%
   
  -               /* channel tree */
  -tree           : stream
  -                 { CTX->ch = $1; }
  -               ; 
  -
  -               /* stream of channels */
  -stream         : channel
  -                 { 
  -                     $$ = $1; 
  -                 }
  -               | channel T_OP_ARROW stream
  -                 { 
  -                     $$ = $1; 
  -                     if ((CTX->rv = l2_channel_link($1, L2_LINK_CHILD, $3, NULL)) != L2_OK) {
  -                         l2_env_errorinfo(CTX->env, CTX->rv, "unable to link parent with child");
  -                         YYERROR;
  -                     }
  -                 }
  -               | channel T_OP_ARROW '{' streams '}'
  -                 { 
  -                     $$ = $1; 
  -                     if ((CTX->rv = l2_channel_link($1, L2_LINK_CHILD, $4, NULL)) != L2_OK) {
  -                         l2_env_errorinfo(CTX->env, CTX->rv, "unable to link parent with child list");
  -                         YYERROR;
  -                     }
  -                 }
  -               ;
  -
  -               /* list of sibling streams */
  -streams        : stream 
  -                 { $$ = $1; }
  -               | stream ';' streams
  -                 { $$ = $1; l2_channel_link($1, L2_LINK_SIBLING, $3, NULL); }
  -               ;
  -
  -               /* single channel */
  -channel        : channel_mask '/' channel_mask ':' channel_spec
  -                 { $$ = $5; l2_channel_levels($5, $1, $3); }
  -               | channel_mask ':' channel_spec
  -                 { $$ = $3; l2_channel_levels($3, $1, L2_LEVEL_NONE); }
  -               | channel_spec
  -                 { $$ = $1; }
  -               ;
  -
  -               /* channel write or flush mask */
  -channel_mask   : T_ID
  -                 { 
  -                     unsigned int levelmask;
  -                     if ((CTX->rv = l2_util_s2l($1, strlen($1), ',', &levelmask)) != L2_OK) {
  -                         l2_env_errorinfo(CTX->env, CTX->rv, "invalid level '%s'", $1);
  -                         YYERROR;
  -                     }
  -                     $$ = L2_LEVEL_UPTO(levelmask);
  -                 }
  -               | '(' channel_levels ')'
  -                 { 
  -                     $$ = $2; 
  -                 }
  -               ;
  -
  -               /* list of channels in a mask */
  -channel_levels : T_ID
  -                 { 
  -                     unsigned int levelmask;
  -                     if ((CTX->rv = l2_util_s2l($1, strlen($1), ',', &levelmask)) != L2_OK) {
  -                         l2_env_errorinfo(CTX->env, CTX->rv, "invalid level '%s'", $1);
  -                         YYERROR;
  -                     }
  -                     $$ = levelmask;
  -                 }
  -               | T_ID '|' channel_levels
  -                 { 
  -                     unsigned int levelmask;
  -                     if ((CTX->rv = l2_util_s2l($1, strlen($1), ',', &levelmask)) != L2_OK) {
  -                         l2_env_errorinfo(CTX->env, CTX->rv, "invalid level '%s'", $1);
  -                         YYERROR;
  -                     }
  -                     $$ = levelmask | $3; 
  -                 }
  -               ;
  -
  -               /* specifcation of a single channel */
  -channel_spec   : T_ID
  -                 { 
  -                     l2_channel_t *ch;
  -                     if ((CTX->rv = l2_channel_create(&ch, CTX->env, $1)) != L2_OK) {
  -                         l2_env_errorinfo(CTX->env, CTX->rv, "failed to create channel '%s'", $1);
  -                         YYERROR;
  -                     }
  -                     $$ = ch;
  -                     /* provide channel to channel_param rule below
  -                        because it does not know where on the token stack
  -                        our $$ is because it is a sub-rule of the recursive
  -                        channel_param_list rule and hence cannot use
  -                        "$<chChannel>-n". */
  -                     CTX->chTmp = ch; 
  -                 }
  -                 channel_params
  -                 { 
  -                     $$ = $<chChannel>2; /* pass result */
  -                     CTX->chTmp = NULL;
  -                 }
  -               ;
  -
  -               /* channel parameters */
  -channel_params : /* empty */
  -               | '(' channel_param_list ')'
  -               ;
  -
  -channel_param_list : /* empty */
  -                   | channel_param
  -                   | channel_param ',' channel_param_list
  -                   ;
  +/* channel tree */
  +tree
  +    : stream { 
  +          CTX->ch = $1;
  +      }
  +    ; 
  +
  +/* stream of channels */
  +stream
  +    : channel { 
  +          $$ = $1; 
  +      }
  +    | channel T_OP_ARROW stream { 
  +          $$ = $1; 
  +          if ((CTX->rv = l2_channel_link($1, L2_LINK_CHILD, $3, NULL)) != L2_OK) {
  +              l2_env_errorinfo(CTX->env, CTX->rv, "unable to link parent with child");
  +              YYERROR;
  +          }
  +      }
  +    | channel T_OP_ARROW '{' streams '}' { 
  +          $$ = $1; 
  +          if ((CTX->rv = l2_channel_link($1, L2_LINK_CHILD, $4, NULL)) != L2_OK) {
  +              l2_env_errorinfo(CTX->env, CTX->rv, "unable to link parent with child list");
  +              YYERROR;
  +          }
  +      }
  +    ;
  +
  +/* list of sibling streams */
  +streams
  +    : stream { 
  +          $$ = $1; 
  +      }
  +    | stream ';' streams { 
  +          $$ = $1; 
  +          if ((CTX->rv = l2_channel_link($1, L2_LINK_SIBLING, $3, NULL)) != L2_OK) {
  +              l2_env_errorinfo(CTX->env, CTX->rv, "unable to link childs together");
  +              YYERROR;
  +          }
  +      }
  +    ;
  +
  +/* channel */
  +channel
  +    : channel_level '/' channel_level ':' channel_cons { 
  +          $$ = $5; 
  +          if ((CTX->rv = l2_channel_levels($5, $1, $3)) != L2_OK) {
  +              l2_env_errorinfo(CTX->env, CTX->rv, "failed to set channel write and flush levels");
  +              YYERROR;
  +          }
  +      }
  +    | channel_level ':' channel_cons { 
  +          $$ = $3; 
  +          if ((CTX->rv = l2_channel_levels($3, $1, L2_LEVEL_NONE)) != L2_OK) {
  +              l2_env_errorinfo(CTX->env, CTX->rv, "failed to set channel write levels");
  +              YYERROR;
  +          }
  +      }
  +    | channel_cons { 
  +          $$ = $1;
  +      }
  +    ;
  +
  +/* channel level */
  +channel_level
  +    : T_ID { 
  +          unsigned int levelmask;
  +          if ((CTX->rv = l2_util_s2l($1, strlen($1), ',', &levelmask)) != L2_OK) {
  +              l2_env_errorinfo(CTX->env, CTX->rv, "invalid level '%s'", $1);
  +              YYERROR;
  +          }
  +          $$ = L2_LEVEL_UPTO(levelmask);
  +      }
  +    | '(' channel_level_mask ')' { 
  +          $$ = $2; 
  +      }
  +    ;
  +
  +/* channel level mask */
  +channel_level_mask 
  +    : T_ID { 
  +          unsigned int levelmask;
  +          if ((CTX->rv = l2_util_s2l($1, strlen($1), ',', &levelmask)) != L2_OK) {
  +              l2_env_errorinfo(CTX->env, CTX->rv, "invalid level '%s'", $1);
  +              YYERROR;
  +          }
  +          $$ = levelmask;
  +      }
  +    | T_ID '|' channel_level_mask { 
  +          unsigned int levelmask;
  +          if ((CTX->rv = l2_util_s2l($1, strlen($1), ',', &levelmask)) != L2_OK) {
  +              l2_env_errorinfo(CTX->env, CTX->rv, "invalid level '%s'", $1);
  +              YYERROR;
  +          }
  +          $$ = levelmask | $3; 
  +      }
  +    ;
  +
  +/* channel constructor */
  +channel_cons   
  +    : T_ID { 
  +          l2_channel_t *ch;
  +          if ((CTX->rv = l2_channel_create(&ch, CTX->env, $1)) != L2_OK) {
  +              l2_env_errorinfo(CTX->env, CTX->rv, "failed to create channel '%s'", $1);
  +              YYERROR;
  +          }
  +          $$ = ch;
  +          /* provide channel to channel_param rule below because it does
  +             not know where on the token stack our $$ is because it is a
  +             sub-rule of the recursive channel_param_list rule and hence
  +             cannot use "$<chChannel>-n". */
  +          CTX->chTmp = ch; 
  +      }
  +      channel_params { 
  +          $$ = $<chChannel>2; /* pass-through result */
  +          CTX->chTmp = NULL;
  +      }
  +    ;
  +
  +/* channel parameters */
  +channel_params 
  +    : /* empty */
  +    | '(' channel_param_list ')'
  +    ;
  +
  +/* channel parameter list */
  +channel_param_list 
  +    : /* empty */
  +    | channel_param
  +    | channel_param ',' channel_param_list
  +    ;
           
  -channel_param  : T_ID '=' T_STRING
  -                 { 
  -                     if ((CTX->rv = l2_channel_configure(CTX->chTmp, "%s=\"%s\"", $1, $3)) != L2_OK) {
  -                         l2_env_errorinfo(CTX->env, CTX->rv, "failed to configure channel with '%s=\"%s\"'", $1, $3);
  -                         YYERROR;
  -                     }
  -                 }
  -               ;
  +/* channel parameter */
  +channel_param  
  +    : T_ID '=' T_STRING { 
  +          if ((CTX->rv = l2_channel_configure(CTX->chTmp, "%s=\"%s\"", $1, $3)) != L2_OK) {
  +              l2_env_errorinfo(CTX->env, CTX->rv, "failed to configure channel with '%s=\"%s\"'", $1, $3);
  +              YYERROR;
  +          }
  +      }
  +    ;
    
   %%
   
  Index: ossp-pkg/l2/l2_spec_scan.l
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2_spec_scan.l
  --- ossp-pkg/l2/l2_spec_scan.l	2001/11/07 16:29:56	1.2
  +++ ossp-pkg/l2/l2_spec_scan.l	2001/11/08 09:28:35	1.3
  @@ -44,16 +44,18 @@
   static int yyinput(l2_spec_ctx_t *ctx, char *buf, int max_size);
   %}
   
  +/* scanner options */
   %pointer
  -/* %option stack */
   %option reentrant-bison
   %option never-interactive
   %option noyywrap
   
  +/* scanner states */
   %x str
   
   %%
   
  +  /* local variables */
     char  caStr[2048];
     char *cpStr = NULL;
   
  @@ -136,6 +138,7 @@
   
   %%
   
  +/* buffer-based input routine */
   static int yyinput(l2_spec_ctx_t *ctx, char *buf, int max_size)
   {
       int n;

From ossp-cvs-owner@ossp.org  Thu Nov  8 10:33:39 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fA89XcB74484; Thu, 8 Nov 2001 10:33:38 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 141404CE896; Thu,  8 Nov 2001 10:33:38 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_spec_scan.l
Message-Id: <20011108093338.141404CE896@visp.engelschall.com>
Date: Thu,  8 Nov 2001 10:33:38 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   08-Nov-2001 10:33:38
  Branch: HEAD                             Handle: 2001110809333700

  Modified files:
    ossp-pkg/l2             l2_spec_scan.l

  Log:
    more polishing

  Summary:
    Revision    Changes     Path
    1.4         +8  -18     ossp-pkg/l2/l2_spec_scan.l
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_spec_scan.l
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 l2_spec_scan.l
  --- ossp-pkg/l2/l2_spec_scan.l	2001/11/08 09:28:35	1.3
  +++ ossp-pkg/l2/l2_spec_scan.l	2001/11/08 09:33:37	1.4
  @@ -55,20 +55,16 @@
   
   %%
   
  -  /* local variables */
  -  char  caStr[2048];
  -  char *cpStr = NULL;
  +    /* local variables */
  +    char  caStr[2048];
  +    char *cpStr = NULL;
   
  - /*
  -  * Whitespaces
  -  */
  +    /* whitespaces */
   [ \t\n]+ {
       /* NOOP */
   }
   
  - /*
  -  * C-style strings ("...")
  -  */
  +    /* C-style strings ("...") */
   \" {
       cpStr = caStr;
       BEGIN(str);
  @@ -114,24 +110,18 @@
       *cpStr++ = yytext[1];
   }
   
  - /*
  -  * Operators
  -  */
  +   /* operators */
   "->" { 
       return T_OP_ARROW;
   }
   
  - /*
  -  * Identifiers
  -  */
  +   /* identifiers */
   [a-zA-Z][a-zA-Z0-9_-]* {
       yylval->cpValue = strdup(yytext);
       return T_ID;
   }
   
  - /*
  -  * Anything else is returned as is...
  -  */
  +   /* anything else is returned as is... */
   .|\n {
       return yytext[0];
   }

From ossp-cvs-owner@ossp.org  Thu Nov  8 10:53:36 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fA89rYB77592; Thu, 8 Nov 2001 10:53:34 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id C63854CE898; Thu,  8 Nov 2001 10:53:34 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 .configure Makefile.in autogen.sh devtool devt...
Message-Id: <20011108095334.C63854CE898@visp.engelschall.com>
Date: Thu,  8 Nov 2001 10:53:34 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   08-Nov-2001 10:53:34
  Branch: HEAD                             Handle: 197001010100001005209614

  Added files:
    ossp-pkg/l2             devtool devtool.conf devtool.func
  Modified files:
    ossp-pkg/l2             Makefile.in l2_version.c
  Removed files:
    ossp-pkg/l2             .configure autogen.sh

  Log:
    switch to devtool stuff (taken over from OSSP SA)

  Summary:
    Revision    Changes     Path
    NONE        +0  -6      ossp-pkg/l2/.configure
    1.32        +7  -36     ossp-pkg/l2/Makefile.in
    NONE        +0  -75     ossp-pkg/l2/autogen.sh
    1.1         +47 -0      ossp-pkg/l2/devtool
    1.1         +31 -0      ossp-pkg/l2/devtool.conf
    1.1         +72 -0      ossp-pkg/l2/devtool.func
    1.4         +10 -10     ossp-pkg/l2/l2_version.c
  ____________________________________________________________________________

    Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 Makefile.in
  --- ossp-pkg/l2/Makefile.in	2001/11/07 16:18:38	1.31
  +++ ossp-pkg/l2/Makefile.in	2001/11/08 09:53:33	1.32
  @@ -114,21 +114,11 @@
       l2_ut_sa.c \
       l2_version.c
   
  -#   file containing the official version information
  -_VERSION_FILE = \
  -    l2_version.c
  -
  -#   helper macro for updating version information
  -_VERSION = \
  -    $(SHTOOL) version -lc -nL2 -pl2_ $$OPT $(_VERSION_FILE);\
  -    V=`$(SHTOOL) version -lc -dlong $(_VERSION_FILE)`;\
  -    sed -e "s/Version .*(.*)/Version $$V/g" <README >README.n && mv README.n README
  -
   #   helper macro for generating a Unix manual page
   _MANPAGE = \
  -    V1=`$(SHTOOL) version -lc -dshort $(_VERSION_FILE)`; \
  -    V2=`$(SHTOOL) version -lc -dlong $(_VERSION_FILE)`; \
  -    D=`$(SHTOOL) version -lc -dlong $(_VERSION_FILE) |\
  +    V1=`$(SHTOOL) version -lc -dshort l2_version.c`; \
  +    V2=`$(SHTOOL) version -lc -dlong l2_version.c`; \
  +    D=`$(SHTOOL) version -lc -dlong l2_version.c |\
          sed -e 's;.*(;;' -e 's;).*;;'`; \
       $(POD2MAN) --section=$${SEC} --center="$${ONELINE}" \
                  --release="$$D" --date="$${NAME} $$V1" $(S)$${BASENAME}.pod |\
  @@ -181,15 +171,15 @@
   	$(LIBTOOL) --mode=link --quiet $(CC) $(LDFLAGS) -o l2_sockmon l2_sockmon.o $(LIBS)
   
   #   build Unix manual pages
  -l2-config.1: l2-config.pod $(_VERSION_FILE)
  +l2-config.1: l2-config.pod l2_version.c
   	BASENAME="l2-config"; SEC=1; \
   	NAME="L2"; ONELINE="Logging Library"; \
   	$(_MANPAGE)
  -l2.3: l2.pod $(_VERSION_FILE)
  +l2.3: l2.pod l2_version.c
   	BASENAME="l2"; SEC=3; \
   	NAME="L2"; ONELINE="Logging Library"; \
   	$(_MANPAGE)
  -l2++.3: l2++.pod $(_VERSION_FILE)
  +l2++.3: l2++.pod l2_version.c
   	BASENAME="l2++"; SEC=3; \
   	NAME="L2"; ONELINE="Logging Library (C++)"; \
   	$(_MANPAGE)
  @@ -267,7 +257,7 @@
   	$(RM) l2.h
   
   #   remove everything which can be regenerated
  -#   by "autoconf && autoheader && ./configure && make all"
  +#   by "./devtool autogen"
   realclean: distclean
   	$(RM) configure
   	$(RM) config.guess config.sub
  @@ -279,25 +269,6 @@
   	$(RM) l2++.3
   	$(RM) l2_spec_scan.c
   	$(RM) l2_spec_parse.c l2_spec_parse.h
  -
  -#   roll a distribution tarball
  -dist: distclean
  -	@$(SHTOOL) fixperm -v .; \
  -	V=`$(SHTOOL) version -l c -d short l2_version.c`; \
  -	$(SHTOOL) tarball -o l2-$${V}.tar.gz -d str-$${V} -u ossp -g ossp \
  -	                  -e 'CVS,\.cvsignore,\.[ao],^\.,autogen.sh' -c 'gzip --best' .
  -
  -#   increase or update version information
  -new-version:
  -	@V="$(VERSION)"; \
  -	if [ ".$$V" != . ]; then \
  -		OPT="-s$$V"; \
  -	else \
  -		OPT="-e"; \
  -	fi; \
  -	$(_VERSION)
  -update-version:
  -	@OPT="-s`$(SHTOOL) version -lc -dshort $(_VERSION_FILE)`" && $(_VERSION)
   
   #   create dependencies
   depend: all
    Index: ossp-pkg/l2/devtool
  ============================================================
  $ cvs update -p -r1.1 devtool
  #!/bin/sh
  ##
  ##  devtool -- Development Tool
  ##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  if [ $# -eq 0 ]; then
      echo "devtool:USAGE: devtool <command> [<arg> ...]" 1>&2
      exit 1
  fi
  
  cmd="$1"
  shift
  
  devtoolfunc="./devtool.func"
  
  if [ ! -f devtool.conf ]; then
      echo "devtool:ERROR: no devtool.conf in current directory" 1>&2
      exit 1
  fi
  
  cmdline=`grep "^%$cmd" devtool.conf`
  if [ ".$cmdline" = . ]; then
      echo "devtool:ERROR: command $cmd not found in devtool.conf" 1>&2
      exit 1
  fi
  
  if [ ".$TMPDIR" != . ]; then
      tmpdir="$TMPDIR"
  elif [ ".$TEMPDIR" != . ]; then
      tmpdir="$TEMPDIR"
  else
      tmpdir="/tmp"
  fi
  tmpfile="$tmpdir/rc.$$.tmp"
  
  rm -f $tmpfile
  touch $tmpfile
  echo ". $devtoolfunc" >>$tmpfile
  ( sed <devtool.conf -e "1,/^%common/d" -e '/^%.*/,$d'
    sed <devtool.conf -e "1,/^%$cmd/d" -e '/^%.*/,$d' ) |\
  sed -e 's;\([ 	]\)@\([a-zA-Z_][a-zA-Z0-9_]*\);\1devtool_\2;' >>$tmpfile
  
  sh $tmpfile "$@"
  
  rm -f $tmpfile >/dev/null 2>&1 || true
  
  Index: ossp-pkg/l2/devtool.conf
  ============================================================
  $ cvs update -p -r1.1 devtool.conf
  ##
  ##  devtool.conf -- Development Tool Configuration
  ##
  
  %autogen
      @autogen shtool   1.5.4 "1.5.*" all
      @autogen libtool  1.4.2 "1.4*"
      @autogen autoconf 2.52  "2.5.*"
  
  %autoclean
      @autoclean shtool
      @autoclean libtool
      @autoclean autoconf
  
  %configure
      ./configure \
          --prefix=/tmp/l2 \
          --disable-shared \
          --enable-debug \
          "$@"
  
  %version
      ./shtool version -l c -n "OSSP L2" -p "l2_" -e l2_version.c
  
  %dist
      make distclean >/dev/null 2>&1
      ./shtool fixperm -v .
      V=`./shtool version -l c -d short l2_version.c`
      ./shtool tarball -o l2-${V}.tar.gz -d l2-${V} -u ossp -g ossp \
                       -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf' -c 'gzip --best' .
  
  Index: ossp-pkg/l2/devtool.func
  ============================================================
  $ cvs update -p -r1.1 devtool.func
  ##
  ##  devtool.func -- Development Tool Functions
  ##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  devtool_require () {
      t="$1"; o="$2"; p="$3"; e="$4"; a="$5"
      v=`($t $o | head -1 | awk "{ print \\\$$p; }") 2>/dev/null`
      if [ ".$v" = . ]; then
          echo "devtool:ERROR: unable to determine version of $t" 1>&2
          exit 1
      fi
      case "$v" in
          $e )
              ;;
          $a )
              echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
              ;;
          * )
              echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
              exit 1
              ;;
      esac
      echo "$v"
  }
  
  devtool_autogen () {
      tool=$1
      shift
      case $tool in
          autoconf )
              autoconf_version=`devtool_require autoconf --version 4 "$1" "$2"`
              echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
              autoconf
              autoheader 2>&1 | grep -v "is unchanged"
              ;;
          libtool )
              libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
              echo "generating (GNU Libtool $libtoolize_version): ltmain.sh, libtool.m4, config.guess, config.sub"
              libtoolize --force --copy >/dev/null 2>&1
              cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
                  sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` libtool.m4
              ;;
          shtool )
              shtoolize_version=`devtool_require shtoolize -v 3 "$1" "$2"`
              echo "generating (GNU Shtool $shtoolize_version): shtool"
              shift
              shift
              shtoolize -q "$@"
              ;;
      esac
  }
  
  devtool_autoclean () {
      tool=$1
      shift
      case $tool in
          autoconf )
              echo "removing: configure config.h.in"
              rm -f configure config.h.in
              ;;
          libtool )
              echo "removing: ltmain.sh libtool.m4 config.guess config.sub"
              rm -f ltmain.sh libtool.m4 config.guess config.sub
              ;;
          shtool )
              echo "removing: shtool"
              rm -f shtool
              ;;
      esac
  }
  
  Index: ossp-pkg/l2/l2_version.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 l2_version.c
  --- ossp-pkg/l2/l2_version.c	2001/09/13 14:22:02	1.3
  +++ ossp-pkg/l2/l2_version.c	2001/11/08 09:53:34	1.4
  @@ -1,5 +1,5 @@
   /*
  -**  l2_version.c -- Version Information for L2 (syntax: C/C++)
  +**  l2_version.c -- Version Information for OSSP L2 (syntax: C/C++)
   **  [automatically generated and maintained by GNU shtool]
   */
   
  @@ -8,7 +8,7 @@
   #ifndef _L2_VERSION_C_
   #define _L2_VERSION_C_
   
  -#define L2_VERSION 0x001200
  +#define L2_VERSION 0x002200
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _L2_VERSION_C_AS_HEADER_
   
   l2_version_t l2_version = {
  -    0x001200,
  -    "0.1.0",
  -    "0.1.0 (13-Sep-2001)",
  -    "This is L2, Version 0.1.0 (13-Sep-2001)",
  -    "L2 0.1.0 (13-Sep-2001)",
  -    "L2/0.1.0",
  -    "@(#)L2 0.1.0 (13-Sep-2001)",
  -    "$Id: l2_version.c,v 1.3 2001/09/13 14:22:02 rse Exp $"
  +    0x002200,
  +    "0.2.0",
  +    "0.2.0 (08-Nov-2001)",
  +    "This is OSSP L2, Version 0.2.0 (08-Nov-2001)",
  +    "OSSP L2 0.2.0 (08-Nov-2001)",
  +    "OSSP L2/0.2.0",
  +    "@(#)OSSP L2 0.2.0 (08-Nov-2001)",
  +    "$Id: l2_version.c,v 1.4 2001/11/08 09:53:34 rse Exp $"
   };
   
   #endif /* _L2_VERSION_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Thu Nov  8 11:03:49 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fA8A3lB79393; Thu, 8 Nov 2001 11:03:47 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 834034CE89A; Thu,  8 Nov 2001 11:03:47 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO l2_test.c
Message-Id: <20011108100347.834034CE89A@visp.engelschall.com>
Date: Thu,  8 Nov 2001 11:03:47 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   08-Nov-2001 11:03:47
  Branch: HEAD                             Handle: 2001110810034700

  Modified files:
    ossp-pkg/l2             TODO l2_test.c

  Log:
    fix old prefix problem, but find new one :-(

  Summary:
    Revision    Changes     Path
    1.41        +3  -1      ossp-pkg/l2/TODO
    1.45        +2  -2      ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.40 -r1.41 TODO
  --- ossp-pkg/l2/TODO	2001/11/07 16:25:56	1.40
  +++ ossp-pkg/l2/TODO	2001/11/08 10:03:47	1.41
  @@ -6,7 +6,9 @@
   - location tracking
   - target=remote has to be currently after host=xxx because of
     single-configuration procedure
  -- prefix channels seems not to do anything?!
  +
  +- prefix channel produces implicitly two log messages if
  +  a following buffer channel would not accumulate them. Hmmm..
   
   Channel-Only Revamping:
   - syscall override ala OSSP SA in l2_env_t
  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.44 -r1.45 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/11/07 16:17:09	1.44
  +++ ossp-pkg/l2/l2_test.c	2001/11/08 10:03:47	1.45
  @@ -83,8 +83,8 @@
   
   #if 1
       spec = "noop -> {"
  -           "  prefix(prefix=\"[%d-%m-%Y/%H:%M:%S] %L test[%P]: \", timezone=\"local\")"
  -           "  -> filter(regex=\"hecking\", negate=\"0\")"
  +           "  filter(regex=\"hecking\", negate=\"0\")"
  +           "  -> prefix(prefix=\"[%d-%m-%Y/%H:%M:%S] %L test[%P]: \", timezone=\"local\")"
              "     -> buffer(size=\"800\")"
              "        -> file(path=\"l2_test.log\",append=\"1\",perm=\"420\") ;"
              "  syslog(ident=\"L2-Test\", facility=\"user\", "

From ossp-cvs-owner@ossp.org  Thu Nov  8 11:08:10 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fA8A89p79896; Thu, 8 Nov 2001 11:08:09 +0100 (CET)
Date: Thu, 8 Nov 2001 11:08:09 +0100 (CET)
Message-Id: <200111081008.fA8A89p79896@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   08-Nov-2001 11:08:09
  Branch: HEAD                             Handle: 2001110810080900

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c

  Log:
    even shorter IPv6 syntax

  Summary:
    Revision    Changes     Path
    1.98        +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.97 -r1.98 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/11/08 08:32:12	1.97
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/11/08 10:08:09	1.98
  @@ -938,7 +938,7 @@
               fprintf(stderr, "%s:Error: Too many ACL (%d) using option -a (no space for additional fake IPv6 ACL)\n", ctx->progname, ctx->option_aclc);
               CU(ERR_EXECUTION);
           }
  -        ctx->option_acl[ctx->option_aclc].acl = "[0::0]";
  +        ctx->option_acl[ctx->option_aclc].acl = "[::]";
           ctx->option_acl[ctx->option_aclc].not = FALSE;
           ctx->option_acl[ctx->option_aclc].prefixlen = 0;
           if ((rc = sa_addr_create(&ctx->option_acl[ctx->option_aclc].saa)) != SA_OK) {

From ossp-cvs-owner@ossp.org  Thu Nov  8 11:59:22 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fA8AxLE86046; Thu, 8 Nov 2001 11:59:21 +0100 (CET)
Date: Thu, 8 Nov 2001 11:59:21 +0100 (CET)
Message-Id: <200111081059.fA8AxLE86046@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp README version.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   08-Nov-2001 11:59:21
  Branch: HEAD                             Handle: 2001110810592000

  Modified files:
    ossp-pkg/lmtp2nntp      README version.c

  Log:
    bump version for release

  Summary:
    Revision    Changes     Path
    1.10        +1  -1      ossp-pkg/lmtp2nntp/README
    1.12        +9  -9      ossp-pkg/lmtp2nntp/version.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/README
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 README
  --- ossp-pkg/lmtp2nntp/README	2001/10/15 14:55:45	1.9
  +++ ossp-pkg/lmtp2nntp/README	2001/11/08 10:59:20	1.10
  @@ -7,7 +7,7 @@
                     |_|                        |_|    
   
     OSSP lmtp2nntp - Mail to News Gateway
  -  Version 1.1b2 (15-Oct-2001)
  +  Version 1.1b3 (08-Nov-2001)
   
     ABSTRACT
   
  Index: ossp-pkg/lmtp2nntp/version.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 version.c
  --- ossp-pkg/lmtp2nntp/version.c	2001/10/15 14:55:45	1.11
  +++ ossp-pkg/lmtp2nntp/version.c	2001/11/08 10:59:20	1.12
  @@ -8,7 +8,7 @@
   #ifndef _VERSION_C_
   #define _VERSION_C_
   
  -#define LMTP2NNTP_VERSION 0x101102
  +#define LMTP2NNTP_VERSION 0x101103
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _VERSION_C_AS_HEADER_
   
   lmtp2nntp_version_t lmtp2nntp_version = {
  -    0x101102,
  -    "1.1b2",
  -    "1.1b2 (15-Oct-2001)",
  -    "This is lmtp2nntp, Version 1.1b2 (15-Oct-2001)",
  -    "lmtp2nntp 1.1b2 (15-Oct-2001)",
  -    "lmtp2nntp/1.1b2",
  -    "@(#)lmtp2nntp 1.1b2 (15-Oct-2001)",
  -    "$Id: lmtp2nntp 1.1b2 (15-Oct-2001) $"
  +    0x101103,
  +    "1.1b3",
  +    "1.1b3 (08-Nov-2001)",
  +    "This is lmtp2nntp, Version 1.1b3 (08-Nov-2001)",
  +    "lmtp2nntp 1.1b3 (08-Nov-2001)",
  +    "lmtp2nntp/1.1b3",
  +    "@(#)lmtp2nntp 1.1b3 (08-Nov-2001)",
  +    "$Id: lmtp2nntp 1.1b3 (08-Nov-2001) $"
   };
   
   #endif /* _VERSION_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Thu Nov  8 14:34:47 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fA8DYk729265; Thu, 8 Nov 2001 14:34:46 +0100 (CET)
Date: Thu, 8 Nov 2001 14:34:46 +0100 (CET)
Message-Id: <200111081334.fA8DYk729265@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp README version.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   08-Nov-2001 14:34:46
  Branch: HEAD                             Handle: 2001110813344500

  Modified files:
    ossp-pkg/lmtp2nntp      README version.c

  Log:
    bump version for release

  Summary:
    Revision    Changes     Path
    1.11        +1  -1      ossp-pkg/lmtp2nntp/README
    1.13        +9  -9      ossp-pkg/lmtp2nntp/version.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/README
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 README
  --- ossp-pkg/lmtp2nntp/README	2001/11/08 10:59:20	1.10
  +++ ossp-pkg/lmtp2nntp/README	2001/11/08 13:34:45	1.11
  @@ -7,7 +7,7 @@
                     |_|                        |_|    
   
     OSSP lmtp2nntp - Mail to News Gateway
  -  Version 1.1b3 (08-Nov-2001)
  +  Version 1.1b4 (08-Nov-2001)
   
     ABSTRACT
   
  Index: ossp-pkg/lmtp2nntp/version.c
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 version.c
  --- ossp-pkg/lmtp2nntp/version.c	2001/11/08 10:59:20	1.12
  +++ ossp-pkg/lmtp2nntp/version.c	2001/11/08 13:34:45	1.13
  @@ -8,7 +8,7 @@
   #ifndef _VERSION_C_
   #define _VERSION_C_
   
  -#define LMTP2NNTP_VERSION 0x101103
  +#define LMTP2NNTP_VERSION 0x101104
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _VERSION_C_AS_HEADER_
   
   lmtp2nntp_version_t lmtp2nntp_version = {
  -    0x101103,
  -    "1.1b3",
  -    "1.1b3 (08-Nov-2001)",
  -    "This is lmtp2nntp, Version 1.1b3 (08-Nov-2001)",
  -    "lmtp2nntp 1.1b3 (08-Nov-2001)",
  -    "lmtp2nntp/1.1b3",
  -    "@(#)lmtp2nntp 1.1b3 (08-Nov-2001)",
  -    "$Id: lmtp2nntp 1.1b3 (08-Nov-2001) $"
  +    0x101104,
  +    "1.1b4",
  +    "1.1b4 (08-Nov-2001)",
  +    "This is lmtp2nntp, Version 1.1b4 (08-Nov-2001)",
  +    "lmtp2nntp 1.1b4 (08-Nov-2001)",
  +    "lmtp2nntp/1.1b4",
  +    "@(#)lmtp2nntp 1.1b4 (08-Nov-2001)",
  +    "$Id: lmtp2nntp 1.1b4 (08-Nov-2001) $"
   };
   
   #endif /* _VERSION_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Thu Nov  8 17:54:54 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fA8GsqQ66139; Thu, 8 Nov 2001 17:54:52 +0100 (CET)
Date: Thu, 8 Nov 2001 17:54:52 +0100 (CET)
Message-Id: <200111081654.fA8GsqQ66139@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 Makefile.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   08-Nov-2001 17:54:52
  Branch: HEAD                             Handle: 2001110816545200

  Modified files:
    ossp-pkg/l2             Makefile.in

  Log:
    Remove yacc and lex generated files.

  Summary:
    Revision    Changes     Path
    1.33        +4  -0      ossp-pkg/l2/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.32 -r1.33 Makefile.in
  --- ossp-pkg/l2/Makefile.in	2001/11/08 09:53:33	1.32
  +++ ossp-pkg/l2/Makefile.in	2001/11/08 16:54:52	1.33
  @@ -243,6 +243,10 @@
   	-$(RMDIR) .libs >/dev/null 2>&1 || $(TRUE)
   	$(RM) $(TARGET_LIBS)
   	$(RM) $(TARGET_TESTS)
  +#   remove machine-generated parsers and scanners
  +	$(RM) l2_spec_parse.h
  +	$(RM) l2_spec_parse.c
  +	$(RM) l2_spec_scan.c
   
   #   remove everything which can be regenerated
   #   by "./configure && make all"

From ossp-cvs-owner@ossp.org  Thu Nov  8 19:31:51 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fA8IVoC78322; Thu, 8 Nov 2001 19:31:50 +0100 (CET)
Date: Thu, 8 Nov 2001 19:31:50 +0100 (CET)
Message-Id: <200111081831.fA8IVoC78322@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 Makefile.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   08-Nov-2001 19:31:50
  Branch: HEAD                             Handle: 2001110818315000

  Modified files:
    ossp-pkg/l2             Makefile.in

  Log:
    The parser should be compiled first to later provide the lexer with symbols.

  Summary:
    Revision    Changes     Path
    1.34        +2  -2      ossp-pkg/l2/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.33 -r1.34 Makefile.in
  --- ossp-pkg/l2/Makefile.in	2001/11/08 16:54:52	1.33
  +++ ossp-pkg/l2/Makefile.in	2001/11/08 18:31:50	1.34
  @@ -157,10 +157,10 @@
   #   build specification parser/scanner
   l2_spec.c: l2_spec.h l2_spec_parse.h
   l2_spec_scan.lo: l2_spec_scan.c l2_spec_parse.h
  -l2_spec_scan.c: l2_spec_scan.l
  -	$(FLEX) -f -Pl2_spec_ -s -8 -B -ol2_spec_scan.c l2_spec_scan.l
   l2_spec_parse.c l2_spec_parse.h: l2_spec_parse.y
   	$(BISON) -d -k -pl2_spec_ -ol2_spec_parse.c l2_spec_parse.y
  +l2_spec_scan.c: l2_spec_scan.l
  +	$(FLEX) -f -Pl2_spec_ -s -8 -B -ol2_spec_scan.c l2_spec_scan.l
   
   #   build test suite programs
   l2_test: l2_test.o libl2.la

From ossp-cvs-owner@ossp.org  Thu Nov  8 21:28:23 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fA8KSMB93028; Thu, 8 Nov 2001 21:28:23 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id DD6124CE906; Thu,  8 Nov 2001 21:28:22 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 Makefile.in aclocal.m4 configure.ac devtool.co...
Message-Id: <20011108202822.DD6124CE906@visp.engelschall.com>
Date: Thu,  8 Nov 2001 21:28:22 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   08-Nov-2001 21:28:22
  Branch: HEAD                             Handle: 2001110820282200

  Modified files:
    ossp-pkg/l2             Makefile.in aclocal.m4 configure.ac devtool.conf

  Log:
    Add --enable-maintainer mode and only use Bison and Flex if this mode
    enabled. Else we assume end user mode where the scanner and parser files
    have to be already pre-generated. Additionally check the version of the
    installed GNU Flex to make sure developers to not think the 1997'er Flex
    version 2.5.4 is sufficient.

  Summary:
    Revision    Changes     Path
    1.35        +6  -10     ossp-pkg/l2/Makefile.in
    1.8         +17 -0      ossp-pkg/l2/aclocal.m4
    1.15        +22 -0      ossp-pkg/l2/configure.ac
    1.2         +1  -0      ossp-pkg/l2/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.34 -r1.35 Makefile.in
  --- ossp-pkg/l2/Makefile.in	2001/11/08 18:31:50	1.34
  +++ ossp-pkg/l2/Makefile.in	2001/11/08 20:28:22	1.35
  @@ -53,8 +53,8 @@
   RMDIR       = rmdir
   POD2MAN     = pod2man
   TRUE        = true
  -BISON       = bison
  -FLEX        = flex
  +BISON       = @BISON@
  +FLEX        = @FLEX@
   SHTOOL      = ./shtool
   LIBTOOL     = ./libtool
   
  @@ -157,10 +157,10 @@
   #   build specification parser/scanner
   l2_spec.c: l2_spec.h l2_spec_parse.h
   l2_spec_scan.lo: l2_spec_scan.c l2_spec_parse.h
  -l2_spec_parse.c l2_spec_parse.h: l2_spec_parse.y
  -	$(BISON) -d -k -pl2_spec_ -ol2_spec_parse.c l2_spec_parse.y
  -l2_spec_scan.c: l2_spec_scan.l
  -	$(FLEX) -f -Pl2_spec_ -s -8 -B -ol2_spec_scan.c l2_spec_scan.l
  +@M@l2_spec_scan.c: l2_spec_scan.l
  +@M@	$(FLEX) -f -Pl2_spec_ -s -8 -B -ol2_spec_scan.c l2_spec_scan.l
  +@M@l2_spec_parse.c l2_spec_parse.h: l2_spec_parse.y
  +@M@	$(BISON) -d -k -pl2_spec_ -ol2_spec_parse.c l2_spec_parse.y
   
   #   build test suite programs
   l2_test: l2_test.o libl2.la
  @@ -243,10 +243,6 @@
   	-$(RMDIR) .libs >/dev/null 2>&1 || $(TRUE)
   	$(RM) $(TARGET_LIBS)
   	$(RM) $(TARGET_TESTS)
  -#   remove machine-generated parsers and scanners
  -	$(RM) l2_spec_parse.h
  -	$(RM) l2_spec_parse.c
  -	$(RM) l2_spec_scan.c
   
   #   remove everything which can be regenerated
   #   by "./configure && make all"
  Index: ossp-pkg/l2/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 aclocal.m4
  --- ossp-pkg/l2/aclocal.m4	2001/11/07 14:22:26	1.7
  +++ ossp-pkg/l2/aclocal.m4	2001/11/08 20:28:22	1.8
  @@ -179,6 +179,23 @@
   ])
   
   dnl ##
  +dnl ##  Maintainer Support
  +dnl ##
  +dnl ##  configure.in:
  +dnl ##    AC_CHECK_MAINTAINER
  +dnl ##
  +
  +AC_DEFUN(AC_CHECK_MAINTAINER,[
  +AC_MSG_CHECKING(for maintainer build mode)
  +AC_ARG_ENABLE(maintainer,dnl
  +[  --enable-maintainer     enable maintainer build mode (default=no)],
  +[ enable_maintainer=yes; M=""  ],
  +[ enable_maintainer=no;  M="#" ])dnl
  +AC_SUBST(M)
  +AC_MSG_RESULT([$enable_maintainer])
  +])
  +
  +dnl ##
   dnl ##  Libtool Glue Code
   dnl ##
   dnl ##  configure.in:
  Index: ossp-pkg/l2/configure.ac
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 configure.ac
  --- ossp-pkg/l2/configure.ac	2001/11/05 11:02:43	1.14
  +++ ossp-pkg/l2/configure.ac	2001/11/08 20:28:22	1.15
  @@ -73,7 +73,29 @@
   fi
   AC_PROG_CPP
   AC_CHECK_DEBUGGING
  +AC_CHECK_MAINTAINER
   AC_CONFIGURE_LIBTOOL
  +
  +dnl # check for developer tools:
  +dnl # GNU Bison and GNU Flex
  +if test ".$enable_maintainer" = .yes; then
  +    AC_PATH_PROG(BISON, bison, NA)
  +    if test ".$BISON" = .NA; then
  +        AC_ERROR([require GNU Bison])
  +    fi
  +    AC_PATH_PROG(FLEX,  flex,  NA) 
  +    if test ".$FLEX" = .NA; then
  +        AC_ERROR([require GNU Flex])
  +    fi
  +    flex_version=`(flex --version 2>/dev/null | awk '{ print $3; }')`
  +    case "$flex_version" in
  +        2.[[5-6]].[[6-9]] ) ;;
  +        * ) AC_ERROR([found GNU Flex version $flex_version; require version >= 2.5.6 (DEVELOPER VERSION!)]) ;;
  +    esac
  +else
  +    AC_PATH_PROG(BISON, bison, true)
  +    AC_PATH_PROG(FLEX,  flex,  true) 
  +fi
   
   AC_CHECK_LIB(nsl, gethostname)
   if test ".`echo $LIBS | grep nsl`" = . ;then
  Index: ossp-pkg/l2/devtool.conf
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.conf
  --- ossp-pkg/l2/devtool.conf	2001/11/08 09:53:34	1.1
  +++ ossp-pkg/l2/devtool.conf	2001/11/08 20:28:22	1.2
  @@ -16,6 +16,7 @@
       ./configure \
           --prefix=/tmp/l2 \
           --disable-shared \
  +        --enable-maintainer \
           --enable-debug \
           "$@"
   

From ossp-cvs-owner@ossp.org  Thu Nov  8 22:58:03 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fA8Lw1B04635; Thu, 8 Nov 2001 22:58:01 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 83F434CE8E3; Thu,  8 Nov 2001 22:58:01 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 Makefile.in l2_spec_parse.y l2_spec_scan.l l2_...
Message-Id: <20011108215801.83F434CE8E3@visp.engelschall.com>
Date: Thu,  8 Nov 2001 22:58:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   08-Nov-2001 22:58:01
  Branch: HEAD                             Handle: 2001110821580000

  Modified files:
    ossp-pkg/l2             Makefile.in l2_spec_parse.y l2_spec_scan.l
                            l2_test.c

  Log:
    Enhance the specification parser to be more smart in parsing parameter
    values in order to remove the burden on the user to provide massive
    syntactic sugar.
    
    One now can name=value or name="value" or even name=va"lu"e, i.e., do
    not require quotation marks. But if they are present they can be used to
    introduce spaces or special characters with \xXX notation.

  Summary:
    Revision    Changes     Path
    1.36        +1  -1      ossp-pkg/l2/Makefile.in
    1.4         +8  -3      ossp-pkg/l2/l2_spec_parse.y
    1.5         +78 -35     ossp-pkg/l2/l2_spec_scan.l
    1.46        +6  -6      ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.35 -r1.36 Makefile.in
  --- ossp-pkg/l2/Makefile.in	2001/11/08 20:28:22	1.35
  +++ ossp-pkg/l2/Makefile.in	2001/11/08 21:58:00	1.36
  @@ -158,7 +158,7 @@
   l2_spec.c: l2_spec.h l2_spec_parse.h
   l2_spec_scan.lo: l2_spec_scan.c l2_spec_parse.h
   @M@l2_spec_scan.c: l2_spec_scan.l
  -@M@	$(FLEX) -f -Pl2_spec_ -s -8 -B -ol2_spec_scan.c l2_spec_scan.l
  +@M@	$(FLEX) -Pl2_spec_ -s -8 -B -ol2_spec_scan.c l2_spec_scan.l
   @M@l2_spec_parse.c l2_spec_parse.h: l2_spec_parse.y
   @M@	$(BISON) -d -k -pl2_spec_ -ol2_spec_parse.c l2_spec_parse.y
   
  Index: ossp-pkg/l2/l2_spec_parse.y
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 l2_spec_parse.y
  --- ossp-pkg/l2/l2_spec_parse.y	2001/11/08 09:28:35	1.3
  +++ ossp-pkg/l2/l2_spec_parse.y	2001/11/08 21:58:00	1.4
  @@ -51,6 +51,10 @@
       do { l2_env_errorinfo(CTX->env, L2_ERR_ARG, "%s", msg); \
            CTX->rv = L2_ERR_ARG; } while (0)
   #define YYERROR_VERBOSE
  +
  +/* scanner state transition */
  +extern void l2_spec_scan_push(l2_spec_ctx_t *, const char *state);
  +extern void l2_spec_scan_pop(l2_spec_ctx_t *);
   %}
   
   /* parser options */
  @@ -75,6 +79,7 @@
   
   /* list of scanner tokens */
   %token <cpValue>  T_ID
  +%token <cpValue>  T_PARAM
   %token <cpValue>  T_STRING
   %token            T_OP_ARROW
   
  @@ -221,9 +226,9 @@
           
   /* channel parameter */
   channel_param  
  -    : T_ID '=' T_STRING { 
  -          if ((CTX->rv = l2_channel_configure(CTX->chTmp, "%s=\"%s\"", $1, $3)) != L2_OK) {
  -              l2_env_errorinfo(CTX->env, CTX->rv, "failed to configure channel with '%s=\"%s\"'", $1, $3);
  +    : T_ID '=' { l2_spec_scan_push(CTX, "SS_PARAM"); } T_PARAM { l2_spec_scan_pop(CTX); } { 
  +          if ((CTX->rv = l2_channel_configure(CTX->chTmp, "%s=\"%s\"", $1, $4)) != L2_OK) {
  +              l2_env_errorinfo(CTX->env, CTX->rv, "failed to configure channel with '%s=\"%s\"'", $1, $4);
                 YYERROR;
             }
         }
  Index: ossp-pkg/l2/l2_spec_scan.l
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 l2_spec_scan.l
  --- ossp-pkg/l2/l2_spec_scan.l	2001/11/08 09:33:37	1.4
  +++ ossp-pkg/l2/l2_spec_scan.l	2001/11/08 21:58:00	1.5
  @@ -46,68 +46,98 @@
   
   /* scanner options */
   %pointer
  +%option stack
   %option reentrant-bison
   %option never-interactive
   %option noyywrap
   
   /* scanner states */
  -%x str
  +%x SS_PARAM
  +%x SS_PARAM_Q
   
   %%
   
       /* local variables */
  -    char  caStr[2048];
  -    char *cpStr = NULL;
  +    char  caParam[2048];
  +    char *cpParam = NULL;
   
  -    /* whitespaces */
  -[ \t\n]+ {
  -    /* NOOP */
  +    /* parameter value */
  +<SS_PARAM>\" {
  +    if (cpParam == NULL)
  +        cpParam = caParam;
  +    BEGIN(SS_PARAM_Q);
  +}
  +<SS_PARAM>\\. {
  +    if (cpParam == NULL)
  +        cpParam = caParam;
  +    *cpParam++ = yytext[1];
   }
  -
  -    /* C-style strings ("...") */
  -\" {
  -    cpStr = caStr;
  -    BEGIN(str);
  -}   
  -<str>\" {
  -    BEGIN(INITIAL);
  -    *cpStr = '\0';
  -    yylval->cpValue = strdup(caStr);
  -    return T_STRING;
  -}   
  -<str>\n {
  +<SS_PARAM>[^ \t\r\n\\,)"]+ {
  +    char *cp = yytext;
  +    if (cpParam == NULL)
  +        cpParam = caParam;
  +    while (*cp != '\0')
  +        *cpParam++ = *cp++;
  +}
  +<SS_PARAM>(.|\n) {
  +    if (cpParam == NULL)
  +        cpParam = caParam;
  +    *cpParam = '\0';
  +    yylval->cpValue = strdup(caParam);
  +    cpParam = NULL;
  +    yyless(0);
  +    return T_PARAM;
  +}
  +<SS_PARAM_Q>\" {
  +    BEGIN(SS_PARAM);
  +}
  +<SS_PARAM_Q>\n {
       l2_env_errorinfo(CTX->env, L2_ERR_ARG, "%s", "Unterminated string");
       CTX->rv = L2_ERR_ARG;
  +    return 0;
   }   
  -<str>\\[0-7]{1,3} {
  +<SS_PARAM_Q>\\[0-7]{1,3} {
       unsigned int result;
       (void)sscanf(yytext+1, "%o", &result);
       if (result > 0xff) {
           l2_env_errorinfo(CTX->env, L2_ERR_ARG, "%s", "Escape sequence out of bound");
           CTX->rv = L2_ERR_ARG;
  +        return 0;
       }
       else
  -        *cpStr++ = result;
  +        *cpParam++ = result;
   }
  -<str>\\[0-9]+ {
  -    l2_env_errorinfo(CTX->env, L2_ERR_ARG, "%s", "Bad escape sequence");
  -    CTX->rv = L2_ERR_ARG;
  +<SS_PARAM_Q>\\x[0-9a-fA-F]{2} {
  +    unsigned int result;
  +    (void)sscanf(yytext+1, "%x", &result);
  +    if (result > 0xff) {
  +        l2_env_errorinfo(CTX->env, L2_ERR_ARG, "%s", "Escape sequence out of bound");
  +        CTX->rv = L2_ERR_ARG;
  +        return 0;
  +    }
  +    else
  +        *cpParam++ = result;
   }
  -<str>\\n { *cpStr++ = '\n'; }
  -<str>\\r { *cpStr++ = '\r'; }
  -<str>\\t { *cpStr++ = '\t'; }
  -<str>\\b { *cpStr++ = '\b'; }
  -<str>\\f { *cpStr++ = '\f'; }
  -<str>\\(.|\n) {
  -    *cpStr++ = yytext[1];
  +<SS_PARAM_Q>\\n { *cpParam++ = '\n'; }
  +<SS_PARAM_Q>\\r { *cpParam++ = '\r'; }
  +<SS_PARAM_Q>\\t { *cpParam++ = '\t'; }
  +<SS_PARAM_Q>\\b { *cpParam++ = '\b'; }
  +<SS_PARAM_Q>\\f { *cpParam++ = '\f'; }
  +<SS_PARAM_Q>\\(.|\n) {
  +    *cpParam++ = yytext[1];
   }
  -<str>[^\\\n\"]+ {
  +<SS_PARAM_Q>[^\\\"]+ {
       char *cp = yytext;
       while (*cp != '\0')
  -        *cpStr++ = *cp++;
  +        *cpParam++ = *cp++;
  +}
  +<SS_PARAM_Q>(.|\n) {
  +    *cpParam++ = yytext[0];
   }
  -<str>. {
  -    *cpStr++ = yytext[1];
  +
  +    /* whitespaces */
  +[ \t\n]+ {
  +    /* NOOP */
   }
   
      /* operators */
  @@ -127,6 +157,19 @@
   }
   
   %%
  +
  +/* external scanner state transitions */
  +void l2_spec_scan_push(l2_spec_ctx_t *ctx, const char *state);
  +void l2_spec_scan_push(l2_spec_ctx_t *ctx, const char *state)
  +{
  +    if (strcmp(state, "SS_PARAM") == 0)
  +        yy_push_state(SS_PARAM, ctx->yyscan);
  +}
  +void l2_spec_scan_pop(l2_spec_ctx_t *ctx);
  +void l2_spec_scan_pop(l2_spec_ctx_t *ctx)
  +{
  +    yy_pop_state(ctx->yyscan);
  +}
   
   /* buffer-based input routine */
   static int yyinput(l2_spec_ctx_t *ctx, char *buf, int max_size)
  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.45 -r1.46 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/11/08 10:03:47	1.45
  +++ ossp-pkg/l2/l2_test.c	2001/11/08 21:58:00	1.46
  @@ -83,12 +83,12 @@
   
   #if 1
       spec = "noop -> {"
  -           "  filter(regex=\"hecking\", negate=\"0\")"
  -           "  -> prefix(prefix=\"[%d-%m-%Y/%H:%M:%S] %L test[%P]: \", timezone=\"local\")"
  -           "     -> buffer(size=\"800\")"
  -           "        -> file(path=\"l2_test.log\",append=\"1\",perm=\"420\") ;"
  -           "  syslog(ident=\"L2-Test\", facility=\"user\", "
  -           "         remotehost=\"en1\", logpid=\"1\", target=\"remote\")"
  +           "  filter(regex=hecking, negate=0)"
  +           "  -> prefix(prefix=\"[%d-%m-%Y/%H:%M:%S] %L test[%P]: \", timezone=local)"
  +           "     -> buffer(size=800)"
  +           "        -> file(path=l2_test.log, append=1, perm=420) ;"
  +           "  syslog(ident=L2-Test, facility=user, "
  +           "         remotehost=en1, logpid=1, target=remote)"
              "}";
       fprintf(stderr, "configuring: %s\n", spec);
       if ((rv = l2_spec(&ch, env, spec)) != L2_OK)

From ossp-cvs-owner@ossp.org  Fri Nov  9 13:45:39 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fA9CjbB19133; Fri, 9 Nov 2001 13:45:37 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 8961A4CE945; Fri,  9 Nov 2001 13:45:37 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 README l2.pod
Message-Id: <20011109124537.8961A4CE945@visp.engelschall.com>
Date: Fri,  9 Nov 2001 13:45:37 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Nov-2001 13:45:37
  Branch: HEAD                             Handle: 2001110912453700

  Modified files:
    ossp-pkg/l2             README l2.pod

  Log:
    first cut for an L2 summary

  Summary:
    Revision    Changes     Path
    1.5         +20 -1      ossp-pkg/l2/README
    1.8         +20 -1      ossp-pkg/l2/l2.pod
  ____________________________________________________________________________

  Index: ossp-pkg/l2/README
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 README
  --- ossp-pkg/l2/README	2001/09/13 14:22:02	1.4
  +++ ossp-pkg/l2/README	2001/11/09 12:45:37	1.5
  @@ -9,7 +9,26 @@
   
     ABSTRACT
   
  -  The L2 library is [...]
  +  OSSP L2 is a C library providing a very flexible and sophisticated
  +  Unix logging facility. It is based on the model of arbitrary number
  +  of channels, stacked together in a top-down data flow tree structure
  +  with filtering channels in internal nodes and output channels on the
  +  leave nodes. 
  +  
  +  Channel trees can be either constructed manually through lower-level
  +  API functions or all at once with a single API function controlled by
  +  a compact syntactical description of the channel tree. For generating
  +  log messages a printf-style formatting engine is provided which can be
  +  extended through callback functions. The data flow inside the channel
  +  tree is controlled by (eight fixed and nine custom) logging message
  +  severity levels which are assigned to each individual channel.
  +  
  +  Channels are implemented by channel handlers which can be even
  +  customer supplied for creating own channels which seamlessly integrate
  +  into the framework. For convinience reasons, L2 already ships with
  +  pre-implemented filtering (noop, filter, prefix, buffer) and output
  +  (null, fd, file, pipe, socket, syslog, smtp) channels which already
  +  cover mostly all use cases of logging.
   
     COPYRIGHT AND LICENSE
   
  Index: ossp-pkg/l2/l2.pod
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 l2.pod
  --- ossp-pkg/l2/l2.pod	2001/09/20 16:26:56	1.7
  +++ ossp-pkg/l2/l2.pod	2001/11/09 12:45:37	1.8
  @@ -43,7 +43,26 @@
   
   =head1 DESCRIPTION
   
  -The B<L2> library is...
  +OSSP L2 is a C library providing a very flexible and sophisticated
  +Unix logging facility. It is based on the model of arbitrary number of
  +channels, stacked together in a top-down data flow tree structure with
  +filtering channels in internal nodes and output channels on the leave
  +nodes.
  +
  +Channel trees can be either constructed manually through lower-level
  +API functions or all at once with a single API function controlled by
  +a compact syntactical description of the channel tree. For generating
  +log messages a printf-style formatting engine is provided which can be
  +extended through callback functions. The data flow inside the channel
  +tree is controlled by (eight fixed and nine custom) logging message
  +severity levels which are assigned to each individual channel.
  +
  +Channels are implemented by channel handlers which can be even
  +customer supplied for creating own channels which seamlessly integrate
  +into the framework. For convinience reasons, L2 already ships with
  +pre-implemented filtering (noop, filter, prefix, buffer) and output
  +(null, fd, file, pipe, socket, syslog, smtp) channels which already
  +cover mostly all use cases of logging.
   
   =head1 FUNCTIONS
   

From ossp-cvs-owner@ossp.org  Fri Nov  9 18:01:42 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fA9H1fB52660; Fri, 9 Nov 2001 18:01:41 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id C1F1F4CE966; Fri,  9 Nov 2001 18:01:41 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var Makefile TODO command.c cut-out-offset.c expa...
Message-Id: <20011109170141.C1F1F4CE966@visp.engelschall.com>
Date: Fri,  9 Nov 2001 18:01:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Nov-2001 18:01:41
  Branch: VENDOR                           Handle: 197001010100001005321697

  Added files:              (Branch: VENDOR)
    ossp-pkg/var            Makefile TODO command.c cut-out-offset.c
                            expand-character-class.c expand-named-characters.c
                            expand.c expression.c input.c internal.h padding.c
                            search-and-replace.c text.c tokenbuf.c transpose.c
                            varexp.h variable.c
    ossp-pkg/var/regression-tests
                            .run-tests Makefile Odinfile
                            empty-search-pattern.c expand-character-class.c
                            expand-named-characters.c expand1.c expand2.c
                            expand3.c expand4.c expand5.c expand6.c
                            force-expand.c offset-failure.c

  Log:
    import first cut of OSSP var
    
    [Release Tag: VAR_0_0_0]

  Summary:
    Revision    Changes     Path
    1.1.1.1     +50 -0      ossp-pkg/var/Makefile
    1.1.1.1     +175 -0     ossp-pkg/var/TODO
    1.1.1.1     +385 -0     ossp-pkg/var/command.c
    1.1.1.1     +58 -0      ossp-pkg/var/cut-out-offset.c
    1.1.1.1     +48 -0      ossp-pkg/var/expand-character-class.c
    1.1.1.1     +177 -0     ossp-pkg/var/expand-named-characters.c
    1.1.1.1     +60 -0      ossp-pkg/var/expand.c
    1.1.1.1     +163 -0     ossp-pkg/var/expression.c
    1.1.1.1     +54 -0      ossp-pkg/var/input.c
    1.1.1.1     +86 -0      ossp-pkg/var/internal.h
    1.1.1.1     +139 -0     ossp-pkg/var/padding.c
    1.1.1.1     +44 -0      ossp-pkg/var/regression-tests/.run-tests
    1.1.1.1     +44 -0      ossp-pkg/var/regression-tests/Makefile
    1.1.1.1     +81 -0      ossp-pkg/var/regression-tests/Odinfile
    1.1.1.1     +48 -0      ossp-pkg/var/regression-tests/empty-search-pattern.c
    1.1.1.1     +56 -0      ossp-pkg/var/regression-tests/expand-character-class.c
    1.1.1.1     +49 -0      ossp-pkg/var/regression-tests/expand-named-characters.c
    1.1.1.1     +45 -0      ossp-pkg/var/regression-tests/expand1.c
    1.1.1.1     +56 -0      ossp-pkg/var/regression-tests/expand2.c
    1.1.1.1     +81 -0      ossp-pkg/var/regression-tests/expand3.c
    1.1.1.1     +81 -0      ossp-pkg/var/regression-tests/expand4.c
    1.1.1.1     +85 -0      ossp-pkg/var/regression-tests/expand5.c
    1.1.1.1     +121 -0     ossp-pkg/var/regression-tests/expand6.c
    1.1.1.1     +65 -0      ossp-pkg/var/regression-tests/force-expand.c
    1.1.1.1     +68 -0      ossp-pkg/var/regression-tests/offset-failure.c
    1.1.1.1     +158 -0     ossp-pkg/var/search-and-replace.c
    1.1.1.1     +173 -0     ossp-pkg/var/text.c
    1.1.1.1     +115 -0     ossp-pkg/var/tokenbuf.c
    1.1.1.1     +97 -0      ossp-pkg/var/transpose.c
    1.1.1.1     +127 -0     ossp-pkg/var/varexp.h
    1.1.1.1     +63 -0      ossp-pkg/var/variable.c
  ____________________________________________________________________________

  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/var/Makefile?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/var/TODO?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/var/command.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/var/cut-out-offset.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/var/expand-character-class.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/var/expand-named-characters.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/var/expand.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/var/expression.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/var/input.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/var/internal.h?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/var/padding.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/var/regression-tests/.run-tests?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/var/regression-tests/Makefile?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/var/regression-tests/Odinfile?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/var/regression-tests/empty-search-pattern.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/var/regression-tests/expand-character-class.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/var/regression-tests/expand-named-characters.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/var/regression-tests/expand1.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/var/regression-tests/expand2.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/var/regression-tests/expand3.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/var/regression-tests/expand4.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/var/regression-tests/expand5.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/var/regression-tests/expand6.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/var/regression-tests/force-expand.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/var/regression-tests/offset-failure.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/var/search-and-replace.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/var/text.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/var/tokenbuf.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/var/transpose.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/var/varexp.h?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/var/variable.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1

From ossp-cvs-owner@ossp.org  Fri Nov  9 18:01:43 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fA9H1fB52658; Fri, 9 Nov 2001 18:01:41 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id A925A4CE964; Fri,  9 Nov 2001 18:01:41 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var Makefile TODO command.c cut-out-offset.c expa...
Message-Id: <20011109170141.A925A4CE964@visp.engelschall.com>
Date: Fri,  9 Nov 2001 18:01:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Nov-2001 18:01:41
  Branch: VENDOR                           Handle: 197001010100001005321697

  Added files:              (Branch: VENDOR)
    ossp-pkg/var            Makefile TODO command.c cut-out-offset.c
                            expand-character-class.c expand-named-characters.c
                            expand.c expression.c input.c internal.h padding.c
                            search-and-replace.c text.c tokenbuf.c transpose.c
                            varexp.h variable.c
    ossp-pkg/var/regression-tests
                            .run-tests Makefile Odinfile
                            empty-search-pattern.c expand-character-class.c
                            expand-named-characters.c expand1.c expand2.c
                            expand3.c expand4.c expand5.c expand6.c
                            force-expand.c offset-failure.c

  Log:
    import first cut of OSSP var
    
    [Release Tag: VAR_0_0_0]

  Summary:
    Revision    Changes     Path
    1.1.1.1     +50 -0      ossp-pkg/var/Makefile
    1.1.1.1     +175 -0     ossp-pkg/var/TODO
    1.1.1.1     +385 -0     ossp-pkg/var/command.c
    1.1.1.1     +58 -0      ossp-pkg/var/cut-out-offset.c
    1.1.1.1     +48 -0      ossp-pkg/var/expand-character-class.c
    1.1.1.1     +177 -0     ossp-pkg/var/expand-named-characters.c
    1.1.1.1     +60 -0      ossp-pkg/var/expand.c
    1.1.1.1     +163 -0     ossp-pkg/var/expression.c
    1.1.1.1     +54 -0      ossp-pkg/var/input.c
    1.1.1.1     +86 -0      ossp-pkg/var/internal.h
    1.1.1.1     +139 -0     ossp-pkg/var/padding.c
    1.1.1.1     +44 -0      ossp-pkg/var/regression-tests/.run-tests
    1.1.1.1     +44 -0      ossp-pkg/var/regression-tests/Makefile
    1.1.1.1     +81 -0      ossp-pkg/var/regression-tests/Odinfile
    1.1.1.1     +48 -0      ossp-pkg/var/regression-tests/empty-search-pattern.c
    1.1.1.1     +56 -0      ossp-pkg/var/regression-tests/expand-character-class.c
    1.1.1.1     +49 -0      ossp-pkg/var/regression-tests/expand-named-characters.c
    1.1.1.1     +45 -0      ossp-pkg/var/regression-tests/expand1.c
    1.1.1.1     +56 -0      ossp-pkg/var/regression-tests/expand2.c
    1.1.1.1     +81 -0      ossp-pkg/var/regression-tests/expand3.c
    1.1.1.1     +81 -0      ossp-pkg/var/regression-tests/expand4.c
    1.1.1.1     +85 -0      ossp-pkg/var/regression-tests/expand5.c
    1.1.1.1     +121 -0     ossp-pkg/var/regression-tests/expand6.c
    1.1.1.1     +65 -0      ossp-pkg/var/regression-tests/force-expand.c
    1.1.1.1     +68 -0      ossp-pkg/var/regression-tests/offset-failure.c
    1.1.1.1     +158 -0     ossp-pkg/var/search-and-replace.c
    1.1.1.1     +173 -0     ossp-pkg/var/text.c
    1.1.1.1     +115 -0     ossp-pkg/var/tokenbuf.c
    1.1.1.1     +97 -0      ossp-pkg/var/transpose.c
    1.1.1.1     +127 -0     ossp-pkg/var/varexp.h
    1.1.1.1     +63 -0      ossp-pkg/var/variable.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/Makefile
  ============================================================
  $ cvs update -p -r1.1.1.1 Makefile
  # Build libvarexp.
  
  CC		= gcc
  AR		= ar
  RANLIB 		= ranlib
  
  WARNFLAGS	= -Wall -pedantic
  OPTFLAGS	= -O3 -pipe
  
  CPPFLAGS	=
  CFLAGS		=
  LDFLAGS		=
  
  OBJS		= expand-named-characters.o expand-character-class.o command.o \
  		  expression.o variable.o text.o expand.o input.o tokenbuf.o   \
  		  search-and-replace.o cut-out-offset.o transpose.o padding.o
  
  .c.o:
  	$(CC) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CFLAGS) -c $<
  
  all:	libvarexp.a
  
  libvarexp.a:	$(OBJS)
  	@rm -f $@
  	$(AR) cr $@ $(OBJS)
  	$(RANLIB) $@
  
  clean::
  	@(cd regression-tests && $(MAKE) clean)
  	rm -f $(OBJS)
  	rm -f libvarexp.a
  
  check::
  	(cd regression-tests && $(MAKE) check)
  
  # Dependencies
  
  command.o: internal.h varexp.h
  cut-out-offset.o: internal.h varexp.h
  expand-character-class.o: internal.h varexp.h
  expand-named-characters.o: internal.h varexp.h
  expand.o: internal.h varexp.h
  expression.o: internal.h varexp.h
  input.o: internal.h varexp.h
  padding.o: internal.h varexp.h
  search-and-replace.o: internal.h varexp.h
  text.o: internal.h varexp.h
  tokenbuf.o: internal.h varexp.h
  transpose.o: internal.h varexp.h
  variable.o: internal.h varexp.h
  Index: ossp-pkg/var/TODO
  ============================================================
  $ cvs update -p -r1.1.1.1 TODO
                                libvar.a
  
   - Prefix ist "var_", beziehungsweise "VAR_".
  
   - Eine Variable kann im Text in der Form $name oder ${name} angegeben
     werden, wobei die Wahl der Klammern '{' '}' und des '$'
     parametriesiert werden können.
  
   - Gültige Zeichen für einen Variablennamen sind konfigurierbar.
     Garbage in -- garbage out.
  
   - Ein echtes '$'-Zeichen im Text kann durch Voranstellung eines
     wählbaren Escapezeichen dargestellt werden. Default ist der
     Backslash ('\').
  
   - Der Aufrufer der Funktion soll steuern können, wie sich die Library
     verhält, wenn eine Variable nicht existiert. Denkbar sind:
  
      - Abbruch mit Fehler,
      - die Variable wird zu "", oder
      - der Ausdruck wird unverändert in den Ausgabetext übernommen,
        sodaß eventuell ein zweiter Pass gemacht werden kann.
  
   - ${parameter:-word} wird normal expandiert. Wenn "parameter" leer
     ist, wird stattdessen "word" eingesetzt.
  
   - ${parameter:+word} substituiert "word" wenn "parameter" nicht leer
     ist, sonst wird "" substituiert.
  
   - ${parameter:o<start>-}, ${parameter:o<start>-<end>}
  
   - ${parameter:o<start>,}, ${parameter:o<start>,<length>}
  
   - ${parameter:#} expandiert zur Länge des Inhaltes von "parameter".
  
   - ${parameter:s/pattern/string/[gti]} expandiert "parameter" und
     führt dann eine Ersetzung mittels des regulären Ausdrucks "pattern"
     durch. Wird das 'g'-Flag angegeben, wird nicht nur eine Instanz von
     "pattern" durch "string" ersetzt, sondern alle. Das 't'-Flag
     signalisiert, daß eine reine Text-Ersetzung ohne Unterstützung von
     regulären Ausdrücken gewünscht ist. Das 'i'-Flag besagt, daß die
     Suche nach "pattern" case-insensitiv durchgeführt wird.
  
   - ${parameter:y/ochars/nchars/} expandiert den Inhalt von "parameter"
     und transformiert dabei nach dem Prinzip von tr(1) die "ochars" im
     Text zu "nchars".
  
   - ${parameter:l} wandelt den Inhalt von "parameter" in
     Kleinbuchstaben, bevor es die Variable expandiert. Dies geschieht
     über toupper(3).
  
   - ${parameter:u} wandelt den Inhalt von "parameter" in
     Großbuchstaben, bevor es die Variable expandiert. Dies geschieht
     über tolower(3).
  
   - ${parameter:*word} expandiert zum leeren Wort, wenn "parameter"
     nicht leer ist, sonst zu "word".
  
   - Padding: ${parameter:p/<width>/<string>/<align>} expandiert
     "parameter" in einen String der Mindestbreite <width>, wobei abhaengig
     von <align> ("r" = right, "l" = left, "c" = center) noch fehlende
     Zeichen mit <string> aufgefuellt werden. Diest ist gedacht, um in
     Templates saubere Tabellen erzeugen zu koennen.
     Beispiele (foo="bar"):
         "${foo:p/6/./r}" -> "bar..."
         "${foo:p/6/./l}" -> "...bar"
         "${foo:p/6/./c}" -> ".bar.." (oder "..bar.", egal)
         "${foo:p/20/-=/c}" -> "-=-=-=-=-bar-=-=-=-="
  
   - Jedes Vorkommen eines der folgenden Konstrukte im Text wird durch
     das zugehörige Sonderzeichen ersetzt.
  
         \t          tab
         \n          newline
         \r          return
         \033        octal char
         \x1B        hex char
         \x{263a}    wide hex char
  
   - Syntax:
  
      input           : ( TEXT | variable )*
  
      variable        : '$' ( name | expression )
  
      expression      : START-DELIM ( name | variable )+ ( ':' command )* END-DELIM
  
      name            : ( VARNAME | SPECIAL1 | SPECIAL2 )+
  
      command         : '-' ( EXPTEXT | variable )+
                      | '+' ( EXPTEXT | variable )+
                      | 'o' ( NUMBER ('-' | ',') ( NUMBER )? )
                      | '#'
                      | '*' ( EXPTEXT | variable )+
                      | 's' '/' ( variable | SUBSTTEXT )+ '/' ( variable | SUBSTTEXT )* '/' ( 'g' | 'i' | 't' )*
                      | 'y' '/' ( variable | SUBSTTEXT )+ '/' ( variable | SUBSTTEXT )* '/'
                      | 'p' '/' NUMBER '/' ( variable | SUBSTTEXT )* '/' ( 'r' | 'l' | 'c' )
                      | 'l'
                      | 'u'
  
      START-DELIM     : '{'
  
      END-DELIM       : '}'
  
      VARNAME         : '[a-zA-Z0-9_]+'
  
      SPECIAL1        : '['
  
      SPECIAL2        : ']'
  
      NUMBER          : '[0-9]+'
  
      SUBSTTEXT       : '[^$/]'
  
      EXPTEXT         : '[^$}:]+'
  
      TEXT            : '[^$]+'
  
   - Doku sollte ein Beispiel für Quoting von Shell- und
     Regexp-Ausdrücken enthalten.
  
   - Wir unterstützen PCRE-, POSIX-Regex- oder keine regulären
     Ausdrücke. Dies kann über autoconf zur Compilezeit angegeben
     werden.
  
   - Das Escaping-Problem:
  
  Unsere Library macht zwei Dinge:
  
   (1) Sie expandiert Variablen-Ausdrücke mit Unterstützung von
       Operationen wie Suchen/Ersetzen, und
  
   (2) sie expandiert sogenannte "quoted pairs", wie zum Beispiel \n.
  
  Das Problem ist nun, daß sie dies in zwei Pässen tun will -- und muß.
  Die Frage ist jedoch, in welcher Reihenfolge tut sie es und welche
  Ergebnisse werden in den Ausgabetext ausgegeben? Betrachtet man
  folgendes Beispiel, wird das Problem klarer:
  
      Variablen: TEST = foo
      Eingabe..: Der Betrag auf Konto $TEST ist \$50.
  
  Soll die korrekte Ausgabe an dieser Stelle nun
  
      Der Betrag auf Konto foo ist \$50.
  
  oder
  
      Der Betrag auf Konto foo ist $50.
  
  sein? Die erste Form ist die, die man intuitiv erwartet, die zweite
  Form ist jedoch die, die man braucht, wenn man den Text durch mehrere
  Pässe jagen will -- was wir ausdrücklich vorgesehen haben.
  
  Schlimmer noch: Wie soll die Library die Eingabe
  
      Der Betrag auf Konto ${TEST:s/(.*)/\1bar/} ist \$50.
  
  interpretieren? Würde unser Parser das Token "\1" interpretieren,
  würde nur eine "1" zurückbleiben, der Benutzer müßte also "\\1"
  schreiben, um das Ergebnis zu erhalten, was er erwartet.
  Interpretierte unser Parser die "quoted pairs" nicht, könnte man den
  Ausdruck
  
      ${TEST:s/\n/ /g}
  
  nicht verwenden, weil die Regular-Expression-Funktionen ein '\n' nicht
  kennen.
  
  Nehmen wir also an, wir interpretieren "quoted pairs" und leben damit,
  daß der Benutzer dann doppelt escapen muß ... Wie verhält sich das
  dann mit mehreren Pässen? Läuft die Library zweimal über die Eingabe,
  bräuchte man bereits
  
      Der Betrag auf Konto ${TEST:s/(.*)/\\1bar/} ist \$50.
  Index: ossp-pkg/var/command.c
  ============================================================
  $ cvs update -p -r1.1.1.1 command.c
  #include "internal.h"
  
  int command(const char* begin, const char* end, const var_config_t* config,
              const char nameclass[256], var_cb_t lookup, void* lookup_context,
              int force_expand, tokenbuf* data)
      {
      const char* p = begin;
      tokenbuf tmptokbuf;
      tokenbuf search, replace, flags;
      tokenbuf number1, number2;
      int isrange;
      int rc;
  
      init_tokenbuf(&tmptokbuf);
      init_tokenbuf(&search);
      init_tokenbuf(&replace);
      init_tokenbuf(&flags);
      init_tokenbuf(&number1);
      init_tokenbuf(&number2);
  
      if (begin == end)
          return 0;
  
      switch (tolower(*p))
          {
          case 'l':               /* Turn data to lowercase. */
              if (data->begin)
                  {
                  char* ptr;
                  /* If the buffer does not life in an allocated buffer,
                     we have to copy it before modifying the contents. */
  
                  if (data->buffer_size == 0)
                      {
                      if (!assign_to_tokenbuf(data, data->begin, data->end - data->begin))
                          {
                          rc = VAR_OUT_OF_MEMORY;
                          goto error_return;
                          }
                      }
                  for (ptr = (char*)data->begin; ptr != data->end; ++ptr)
                      *ptr = tolower(*ptr);
                  }
              ++p;
              break;
  
          case 'u':               /* Turn data to uppercase. */
              if (data->begin)
                  {
                  char* ptr;
                  if (data->buffer_size == 0)
                      {
                      if (!assign_to_tokenbuf(data, data->begin, data->end - data->begin))
                          {
                          rc = VAR_OUT_OF_MEMORY;
                          goto error_return;
                          }
                      }
                  for (ptr = (char*)data->begin; ptr != data->end; ++ptr)
                      *ptr = toupper(*ptr);
                  }
              ++p;
              break;
  
          case 'o':               /* Cut out substrings. */
              ++p;
              rc = number(p, end);
              if (rc == 0)
                  {
                  rc = VAR_MISSING_START_OFFSET;
                  goto error_return;
                  }
              else
                  {
                  number1.begin = p;
                  number1.end   = p + rc;
                  number1.buffer_size = 0;
                  p += rc;
                  }
  
              if (*p == ',')
                  {
                  isrange = 0;
                  ++p;
                  }
              else if (*p == '-')
                  {
                  isrange = 1;
                  ++p;
                  }
              else
                  {
                  rc = VAR_INVALID_OFFSET_DELIMITER;
                  goto error_return;
                  }
  
              rc = number(p, end);
              number2.begin = p;
              number2.end   = p + rc;
              number2.buffer_size = 0;
              p += rc;
              if (data->begin)
                  {
                  rc = cut_out_offset(data, &number1, &number2, isrange);
                  if (rc < 0)
                      goto error_return;
                  }
              break;
  
          case '#':               /* Substitute length of the string. */
              if (data->begin)
                  {
                  char buf[1024];
                  sprintf(buf, "%d", data->end - data->begin);
                  free_tokenbuf(data);
                  if (!assign_to_tokenbuf(data, buf, strlen(buf)))
                      {
                      rc = VAR_OUT_OF_MEMORY;
                      goto error_return;
                      }
                  }
              ++p;
              break;
  
          case '-':               /* Substitute parameter if data is empty. */
              ++p;
              rc = exptext_or_variable(p, end, config, nameclass, lookup, lookup_context,
                                       force_expand, &tmptokbuf);
              if (rc < 0)
                  goto error_return;
              else if (rc == 0)
                  {
                  rc = VAR_MISSING_PARAMETER_IN_COMMAND;
                  goto error_return;
                  }
              else
                  p += rc;
              if (data->begin != NULL && data->begin == data->end)
                  {
                  free_tokenbuf(data);
                  move_tokenbuf(&tmptokbuf, data);
                  }
              break;
  
          case '*':               /* Return "" if data is not empty, parameter otherwise. */
              ++p;
              rc = exptext_or_variable(p, end, config, nameclass, lookup, lookup_context,
                                       force_expand, &tmptokbuf);
              if (rc < 0)
                  goto error_return;
              else if (rc == 0)
                  {
                  rc = VAR_MISSING_PARAMETER_IN_COMMAND;
                  goto error_return;
                  }
              else
                  p += rc;
              if (data->begin != NULL)
                  {
                  if (data->begin == data->end)
                      {
                      free_tokenbuf(data);
                      move_tokenbuf(&tmptokbuf, data);
                      }
                  else
                      {
                      free_tokenbuf(data);
                      data->begin = data->end = "";
                      data->buffer_size = 0;
                      }
                  }
              break;
  
          case '+':               /* Substitute parameter if data is not empty. */
              ++p;
              rc = exptext_or_variable(p, end, config, nameclass, lookup, lookup_context,
                                       force_expand, &tmptokbuf);
              if (rc < 0)
                  goto error_return;
              else if (rc == 0)
                  {
                  rc = VAR_MISSING_PARAMETER_IN_COMMAND;
                  goto error_return;
                  }
              else
                  p += rc;
              if (data->begin != NULL)
                  {
                  if (data->begin != data->end)
                      {
                      free_tokenbuf(data);
                      move_tokenbuf(&tmptokbuf, data);
                      }
                  }
              break;
  
          case 's':               /* Search and replace. */
              ++p;
  
              if (*p != '/')
                  return VAR_MALFORMATTED_REPLACE;
              else
                  ++p;
  
              rc = substext_or_variable(p, end, config, nameclass, lookup, lookup_context,
                                        force_expand, &search);
              if (rc < 0)
                  goto error_return;
              else
                  p += rc;
  
              if (*p != '/')
                  {
                  rc = VAR_MALFORMATTED_REPLACE;
                  goto error_return;
                  }
              else
                  ++p;
  
              rc = substext_or_variable(p, end, config, nameclass, lookup, lookup_context,
                                        force_expand, &replace);
              if (rc < 0)
                  goto error_return;
              else
                  p += rc;
  
              if (*p != '/')
                  {
                  rc = VAR_MALFORMATTED_REPLACE;
                  goto error_return;
                  }
              else
                  ++p;
  
              rc = exptext(p, end, config);
              if (rc < 0)
                  goto error_return;
              else
                  {
                  flags.begin = p;
                  flags.end = p + rc;
                  flags.buffer_size = 0;
                  p += rc;
                  }
  
              if (data->begin)
                  {
                  rc = search_and_replace(data, &search, &replace, &flags);
                  if (rc < 0)
                      goto error_return;
                  }
              break;
  
          case 'y':               /* Transpose characters from class A to class B. */
              ++p;
  
              if (*p != '/')
                  return VAR_MALFORMATTED_TRANSPOSE;
              else
                  ++p;
  
              rc = substext_or_variable(p, end, config, nameclass, lookup, lookup_context,
                                        force_expand, &search);
              if (rc < 0)
                  goto error_return;
              else
                  p += rc;
  
              if (*p != '/')
                  {
                  rc = VAR_MALFORMATTED_TRANSPOSE;
                  goto error_return;
                  }
              else
                  ++p;
  
              rc = substext_or_variable(p, end, config, nameclass, lookup, lookup_context,
                                        force_expand, &replace);
              if (rc < 0)
                  goto error_return;
              else
                  p += rc;
  
              if (*p != '/')
                  {
                  rc = VAR_MALFORMATTED_TRANSPOSE;
                  goto error_return;
                  }
              else
                  ++p;
  
              if (data->begin)
                  {
                  rc = transpose(data, &search, &replace);
                  if (rc < 0)
                      goto error_return;
                  }
              break;
  
  
          case 'p':               /* Padding. */
              ++p;
  
              if (*p != '/')
                  return VAR_MALFORMATTED_PADDING;
              else
                  ++p;
  
              rc = number(p, end);
              if (rc == 0)
                  {
                  rc = VAR_MISSING_PADDING_WIDTH;
                  goto error_return;
                  }
              else
                  {
                  number1.begin = p;
                  number1.end   = p + rc;
                  number1.buffer_size = 0;
                  p += rc;
                  }
  
              if (*p != '/')
                  {
                  rc = VAR_MALFORMATTED_PADDING;
                  goto error_return;
                  }
              else
                  ++p;
  
              rc = substext_or_variable(p, end, config, nameclass, lookup, lookup_context,
                                        force_expand, &replace);
              if (rc < 0)
                  goto error_return;
              else
                  p += rc;
  
              if (*p != '/')
                  {
                  rc = VAR_MALFORMATTED_PADDING;
                  goto error_return;
                  }
              else
                  ++p;
  
              if (*p != 'l' && *p != 'c' && *p != 'r')
                  {
                  rc = VAR_MALFORMATTED_PADDING;
                  goto error_return;
                  }
              else
                  ++p;
  
              if (data->begin)
                  {
                  rc = padding(data, &number1, &replace, p[-1]);
                  if (rc < 0)
                      goto error_return;
                  }
              break;
  
          default:
              return VAR_UNKNOWN_COMMAND_CHAR;
          }
  
      /* Exit gracefully. */
  
      free_tokenbuf(&tmptokbuf);
      free_tokenbuf(&search);
      free_tokenbuf(&replace);
      free_tokenbuf(&flags);
      free_tokenbuf(&number1);
      free_tokenbuf(&number2);
      return p - begin;
  
    error_return:
      free_tokenbuf(data);
      free_tokenbuf(&tmptokbuf);
      free_tokenbuf(&search);
      free_tokenbuf(&replace);
      free_tokenbuf(&flags);
      free_tokenbuf(&number1);
      free_tokenbuf(&number2);
      return rc;
      }
  Index: ossp-pkg/var/cut-out-offset.c
  ============================================================
  $ cvs update -p -r1.1.1.1 cut-out-offset.c
  #include "internal.h"
  
  size_t tokenbuf2int(tokenbuf* number)
      {
      const char* p;
      size_t num = 0;
      for (p = number->begin; p != number->end; ++p)
          {
          num *= 10;
          num += *p - '0';
          }
      return num;
      }
  
  int cut_out_offset(tokenbuf* data, tokenbuf* number1, tokenbuf* number2, int isrange)
      {
      tokenbuf res;
      const char* p;
      size_t num1 = tokenbuf2int(number1);
      size_t num2 = tokenbuf2int(number2);
  
      /* Determine begin of result string. */
  
      if ((data->end - data->begin) < num1)
          return VAR_OFFSET_OUT_OF_BOUNDS;
      else
          p = data->begin + num1;
  
      /* If num2 is zero, we copy the rest from there. */
  
      if (num2 == 0)
          {
          if (!assign_to_tokenbuf(&res, p, data->end - p))
              return VAR_OUT_OF_MEMORY;
          }
      else                        /* OK, then use num2. */
          {
          if (isrange)
              {
              if ((p + num2) > data->end)
                  return VAR_RANGE_OUT_OF_BOUNDS;
              if (!assign_to_tokenbuf(&res, p, num2))
                  return VAR_OUT_OF_MEMORY;
              }
          else
              {
              if (num2 < num1)
                  return VAR_OFFSET_LOGIC_ERROR;
              if ((data->begin + num2) > data->end)
                  return VAR_RANGE_OUT_OF_BOUNDS;
              if (!assign_to_tokenbuf(&res, p, (data->begin + num2) - p))
                  return VAR_OUT_OF_MEMORY;
              }
          }
      free_tokenbuf(data);
      move_tokenbuf(&res, data);
      return VAR_OK;
      }
  Index: ossp-pkg/var/expand-character-class.c
  ============================================================
  $ cvs update -p -r1.1.1.1 expand-character-class.c
  #include "internal.h"
  
  static void expand_range(char a, char b, char class[256])
      {
      assert(a <= b);
      assert(class != NULL);
  
      do
          {
          class[(int)a] = 1;
          }
      while (++a <= b);
      }
  
  
  var_rc_t expand_character_class(const char* desc, char class[256])
      {
      size_t i;
  
      assert(desc != NULL);
      assert(class != NULL);
  
      /* Clear the class array. */
  
      for (i = 0; i < 256; ++i)
          class[i] = 0;
  
      /* Walk through the class description and set the appropriate
         entries in the array. */
  
      while(*desc != '\0')
          {
          if (desc[1] == '-' && desc[2] != '\0')
              {
              if (desc[0] > desc[2])
                  return VAR_INCORRECT_CLASS_SPEC;
              expand_range(desc[0], desc[2], class);
              desc += 3;
              }
          else
              {
              class[(int)*desc] = 1;
              ++desc;
              }
          }
  
      return VAR_OK;
      }
  Index: ossp-pkg/var/expand-named-characters.c
  ============================================================
  $ cvs update -p -r1.1.1.1 expand-named-characters.c
  #include "internal.h"
  
  /* Internal parsing code for octal. */
  
  static int isoct(char c)
      {
      if (c >= '0' && c <= '7')
          return 1;
      else
          return 0;
      }
  
  static var_rc_t expand_octal(const char** src, char** dst, const char* end)
      {
      unsigned char c;
  
      if (end - *src < 3)
          return VAR_INCOMPLETE_OCTAL;
      if (!isoct(**src) || !isoct((*src)[1]) || !isoct((*src)[2]))
          return VAR_INVALID_OCTAL;
  
      c = **src - '0';
      if (c > 3)
          return VAR_OCTAL_TOO_LARGE;
      c *= 8;
      ++(*src);
  
      c += **src - '0';
      c *= 8;
      ++(*src);
  
      c += **src - '0';
  
      **dst = (char)c;
      ++(*dst);
      return VAR_OK;
      }
  
  static int ishex(char c)
      {
      if ((c >= '0' && c <= '9') ||
          (c >= 'a' && c <= 'f') ||
          (c >= 'A' && c <= 'F'))
          return 1;
      else
          return 0;
      }
  
  /* Internal parsing code for hex. */
  
  static var_rc_t expand_simple_hex(const char** src, char** dst, const char* end)
      {
      unsigned char c = 0;
  
      if (end - *src < 2)
          return VAR_INCOMPLETE_HEX;
      if (!ishex(**src) || !ishex((*src)[1]))
          return VAR_INVALID_HEX;
  
      if (**src >= '0' && **src <= '9')
          c = **src - '0';
      else if (c >= 'a' && c <= 'f')
          c = **src - 'a' + 10;
      else if (c >= 'A' && c <= 'F')
          c = **src - 'A' + 10;
  
      c = c << 4;
      ++(*src);
  
      if (**src >= '0' && **src <= '9')
          c += **src - '0';
      else if (**src >= 'a' && **src <= 'f')
          c += **src - 'a' + 10;
      else if (**src >= 'A' && **src <= 'F')
          c += **src - 'A' + 10;
  
      **dst = (char)c;
      ++(*dst);
      return VAR_OK;
      }
  
  static var_rc_t expand_grouped_hex(const char** src, char** dst, const char* end)
      {
      var_rc_t rc;
  
      while (*src < end && **src != '}')
          {
          if ((rc = expand_simple_hex(src, dst, end)) != 0)
              return rc;
          ++(*src);
          }
      if (*src == end)
          return VAR_INCOMPLETE_GROUPED_HEX;
  
      return VAR_OK;
      }
  
  static var_rc_t expand_hex(const char** src, char** dst, const char* end)
      {
      if (*src == end)
          return VAR_INCOMPLETE_HEX;
      if (**src == '{')
          {
          ++(*src);
          return expand_grouped_hex(src, dst, end);
          }
      else
          return expand_simple_hex(src, dst, end);
      }
  
  /*
    Expand the following named characters in the buffer:
  
         \t          tab
         \n          newline
         \r          return
         \033        octal char
         \x1B        hex char
         \x{263a}    wide hex char
  
    Any other character quoted by a backslash is copied verbatim.
  */
  
  var_rc_t expand_named_characters(const char* src, size_t len, char* dst)
      {
      const char* end = src + len;
      var_rc_t rc;
  
      assert(src != NULL);
      assert(dst != NULL);
  
      while (src < end)
          {
          if (*src == '\\')
              {
              if (++src == end)
                  return VAR_INCOMPLETE_NAMED_CHARACTER;
              switch (*src)
                  {
                  case 'n':
                      *dst++ = '\n';
                      break;
                  case 't':
                      *dst++ = '\t';
                      break;
                  case 'r':
                      *dst++ = '\r';
                      break;
                  case 'x':
                      ++src;
                      if ((rc = expand_hex(&src, &dst, end)) != 0)
                          return rc;
                      break;
                  case '0':
                  case '1':
                  case '2':
                  case '3':
                  case '4':
                  case '5':
                  case '6':
                  case '7':
                  case '8':
                  case '9':
                      if ((rc = expand_octal(&src, &dst, end)) != 0)
                          return rc;
                      break;
                  default:
                      *dst++ = *src;
                  }
              ++src;
              }
          else
              *dst++ = *src++;
          }
      *dst = '\0';
      return VAR_OK;
      }
  Index: ossp-pkg/var/expand.c
  ============================================================
  $ cvs update -p -r1.1.1.1 expand.c
  #include "internal.h"
  
  const var_config_t var_config_default =
      {
      '$',                        /* varinit */
      '{',                        /* startdelim */
      '}',                        /* enddelim */
      '\\',                       /* escape */
      "a-zA-Z0-9_"                /* namechars */
      };
  
  var_rc_t var_expand(const char* input_buf, size_t input_len,
                      char** result, size_t* result_len,
                      var_cb_t lookup, void* lookup_context,
                      const var_config_t* config, int force_expand)
      {
      char nameclass[256];
      var_rc_t rc;
      tokenbuf output;
  
      /* Assert everything is as we expect it. */
  
      assert(input != NULL);
      assert(result != NULL);
      assert(result_len != NULL);
      assert(lookup != NULL);
  
      /* Expand the class description for valid variable names. */
  
      if (config == NULL)
          config = &var_config_default;
      rc = expand_character_class(config->namechars, nameclass);
      if (rc != VAR_OK)
          return rc;
  
      /* Make sure that the specials defined in the configuration do not
         appear in the character name class. */
  
      if (nameclass[(int)config->varinit] ||
          nameclass[(int)config->startdelim] ||
          nameclass[(int)config->enddelim] ||
          nameclass[(int)config->escape])
          return VAR_INVALID_CONFIGURATION;
  
      /* Call the parser. */
  
      output.begin = output.end = NULL;
      output.buffer_size = 0;
      rc = input(input_buf, input_buf + input_len, config, nameclass,
                 lookup, lookup_context, force_expand, &output);
      if (rc != VAR_OK)
          {
          free_tokenbuf(&output);
          return rc;
          }
      *result     = (char*)output.begin;
      *result_len = output.end - output.begin;
  
      return VAR_OK;
      }
  Index: ossp-pkg/var/expression.c
  ============================================================
  $ cvs update -p -r1.1.1.1 expression.c
  #include "internal.h"
  
  int expression(const char* begin, const char* end, const var_config_t* config,
                 const char nameclass[256], var_cb_t lookup, void* lookup_context,
                 int force_expand, tokenbuf* result)
      {
      const char* p = begin;
      const char* data;
      size_t len, buffer_size;
      int failed = 0;
      int rc;
      tokenbuf name;
      tokenbuf tmp;
  
      /* Clear the tokenbufs to make sure we have a defined state. */
  
      init_tokenbuf(&name);
      init_tokenbuf(&tmp);
      init_tokenbuf(result);
  
      /* Expect STARTDELIM. */
  
      if (p == end || *p != config->startdelim)
          return 0;
  
      if (++p == end)
          return VAR_INCOMPLETE_VARIABLE_SPEC;
  
      /* Get the name of the variable to expand. The name may consist of
         an arbitrary number of VARNAMEs and VARIABLEs. */
  
      do
          {
          rc = varname(p, end, nameclass);
          if (rc < 0)
              goto error_return;
          else if (rc > 0)
              {
              if (!append_to_tokenbuf(&name, p, rc))
                  {
                  rc = VAR_OUT_OF_MEMORY;
                  goto error_return;
                  }
              else
                  p += rc;
              }
  
          rc = variable(p, end, config, nameclass, lookup, lookup_context, force_expand, &tmp);
          if (rc < 0)
              goto error_return;
          else if (rc > 0)
              {
              if (!append_to_tokenbuf(&name, tmp.begin, tmp.end - tmp.begin))
                  {
                  rc = VAR_OUT_OF_MEMORY;
                  goto error_return;
                  }
              else
                  p += rc;
              }
          }
      while (rc > 0);
  
      /* We must have the complete variable name now, so make sure we
         do. */
  
      if (name.begin == name.end)
          {
          rc = VAR_INCOMPLETE_VARIABLE_SPEC;
          goto error_return;
          }
  
      /* Now we have the name of the variable stored in "name". We
         expect an ENDDELIM here. */
  
      if (p == end || (*p != config->enddelim && *p != ':'))
          {
          rc = VAR_INCOMPLETE_VARIABLE_SPEC;
          goto error_return;
          }
      else
          ++p;
  
      /* Use the lookup callback to get the variable's contents. */
  
      rc = (*lookup)(lookup_context, name.begin, name.end - name.begin, &data, &len, &buffer_size);
      if (rc < 0)
          goto error_return;
      else if (rc == 0)
          {
          /* The variable is undefined. What we'll do now depends on the
             force_expand flag. */
  
          if (force_expand)
              {
              rc = VAR_UNDEFINED_VARIABLE;
              goto error_return;
              }
          else
              {
              /* Initialize result to point back to the original text in
                 the buffer. */
  
              result->begin       = begin-1;
              result->end         = p;
              result->buffer_size = 0;
              failed              = 1;
              }
          }
      else
          {
          /* The preliminary result is the contents of the variable.
             This may be modified by the commands that may follow. */
  
          result->begin       = data;
          result->end         = data + len;
          result->buffer_size = buffer_size;
          }
  
      if (p[-1] == ':')
          {
          /* Parse and execute commands. */
  
          free_tokenbuf(&tmp);
          --p;
          while (p != end && *p == ':')
              {
              ++p;
              if (!failed)
                  rc = command(p, end, config, nameclass, lookup, lookup_context, force_expand, result);
              else
                  rc = command(p, end, config, nameclass, lookup, lookup_context, force_expand, &tmp);
              if (rc < 0)
                  goto error_return;
              p += rc;
              if (failed)
                  result->end += rc;
              }
  
          if (p == end || *p != config->enddelim)
              {
              rc = VAR_INCOMPLETE_VARIABLE_SPEC;
              goto error_return;
              }
          ++p;
          if (failed)
              ++result->end;
          }
  
      /* Exit gracefully. */
  
      free_tokenbuf(&name);
      free_tokenbuf(&tmp);
      return p - begin;
  
      /* Exit in case of an error. */
  
    error_return:
      free_tokenbuf(&name);
      free_tokenbuf(&tmp);
      free_tokenbuf(result);
      return rc;
      }
  Index: ossp-pkg/var/input.c
  ============================================================
  $ cvs update -p -r1.1.1.1 input.c
  #include "internal.h"
  
  var_rc_t input(const char* begin, const char* end, const var_config_t* config,
                 const char nameclass[256], var_cb_t lookup, void* lookup_context,
                 int force_expand, tokenbuf* output)
      {
      int rc;
      tokenbuf result;
  
      init_tokenbuf(&result);
  
      do
          {
          rc = text(begin, end, config->varinit, config->escape);
          if (rc > 0)
              {
              if (!append_to_tokenbuf(output, begin, rc))
                  {
                  rc = VAR_OUT_OF_MEMORY;
                  goto error_return;
                  }
              begin += rc;
              }
          else if (rc < 0)
              goto error_return;
  
          rc = variable(begin, end, config, nameclass, lookup, lookup_context, force_expand, &result);
          if (rc > 0)
              {
              if (!append_to_tokenbuf(output, result.begin, result.end - result.begin))
                  {
                  rc = VAR_OUT_OF_MEMORY;
                  goto error_return;
                  }
              else
                  begin += rc;
              }
          else if (rc < 0)
              goto error_return;
          }
      while (rc > 0);
  
      if (begin != end)
          {
          rc = VAR_INPUT_ISNT_TEXT_NOR_VARIABLE;
          goto error_return;
          }
  
      return VAR_OK;
  
    error_return:
      free_tokenbuf(&result);
      return rc;
      }
  Index: ossp-pkg/var/internal.h
  ============================================================
  $ cvs update -p -r1.1.1.1 internal.h
  #ifndef INTERNAL_H
  #define INTERNAL_H
  
  #include <assert.h>
  #include <ctype.h>
  #include <string.h>
  #include <stdio.h>
  #include <errno.h>
  #include "varexp.h"
  
  #ifdef DMALLOC
  #    define DMALLOC_FUNC_CHECK
  #    include <dmalloc.h>
  #endif
  
  /* Turn character class descriptions into a lookup-array. */
  
  var_rc_t expand_character_class(const char* desc, char class[256]);
  
  /*
     The tokenbuf structure is used by the parser routines. If
     buffer_size is >0, it means that the buffer has been allocated by
     malloc(3) and must be free(3)ed when not used anymore.
  */
  
  typedef struct
      {
      const char*  begin;
      const char*  end;
      size_t buffer_size;
      }
  tokenbuf;
  
  int append_to_tokenbuf(tokenbuf* output, const char* begin, size_t rc);
  void free_tokenbuf(tokenbuf* buf);
  void init_tokenbuf(tokenbuf* buf);
  int assign_to_tokenbuf(tokenbuf* buf, const char* data, size_t len);
  void move_tokenbuf(tokenbuf* src, tokenbuf* dst);
  
  var_rc_t input(const char* begin, const char* end, const var_config_t* config,
                 const char nameclass[256], var_cb_t lookup, void* lookup_context,
                 int force_expand, tokenbuf* output);
  
  int variable(const char* begin, const char* end, const var_config_t* config,
               const char nameclass[256], var_cb_t lookup, void* lookup_context,
               int force_expand, tokenbuf* result);
  
  
  int command(const char* begin, const char* end, const var_config_t* config,
              const char nameclass[256], var_cb_t lookup, void* lookup_context,
              int force_expand, tokenbuf* result);
  
  int exptext(const char* begin, const char* end, const var_config_t* config);
  
  int exptext_or_variable(const char* begin, const char* end, const var_config_t* config,
                          const char nameclass[256], var_cb_t lookup, void* lookup_context,
                          int force_expand, tokenbuf* result);
  
  
  int substext_or_variable(const char* begin, const char* end, const var_config_t* config,
                           const char nameclass[256], var_cb_t lookup, void* lookup_context,
                           int force_expand, tokenbuf* result);
  
  int substext(const char* begin, const char* end, const var_config_t* config);
  
  int search_and_replace(tokenbuf* data, tokenbuf* search, tokenbuf* replace, tokenbuf* flags);
  
  int varname(const char* begin, const char* end, const char nameclass[256]);
  
  int expression(const char* begin, const char* end, const var_config_t* config,
                 const char nameclass[256], var_cb_t lookup, void* lookup_context,
                 int force_expand, tokenbuf* result);
  
  int text(const char* begin, const char* end, char varinit, char escape);
  
  int number(const char* begin, const char* end);
  
  int cut_out_offset(tokenbuf* data, tokenbuf* number1, tokenbuf* number2, int isrange);
  
  int transpose(tokenbuf* data, tokenbuf* search, tokenbuf* replace);
  
  int padding(tokenbuf* data, tokenbuf* width, tokenbuf* fill, char position);
  
  size_t tokenbuf2int(tokenbuf* number);
  
  #endif /* !defined(INTERNAL_H) */
  Index: ossp-pkg/var/padding.c
  ============================================================
  $ cvs update -p -r1.1.1.1 padding.c
  #include <sys/types.h>
  #include <regex.h>
  #include "internal.h"
  
  int padding(tokenbuf* data, tokenbuf* widthstr, tokenbuf* fill, char position)
      {
      tokenbuf result;
      size_t width = tokenbuf2int(widthstr);
      int i;
  
      printf("Padding data '%s' to width '%d' by filling in '%s' to position '%c'.\n",
             data->begin, width, fill->begin, position);
  
      if (fill->begin == fill->end)
          return VAR_EMPTY_PADDING_FILL_STRING;
  
      init_tokenbuf(&result);
  
      if (position == 'l')
          {
          i = width - (data->end - data->begin);
          if (i > 0)
              {
              printf("Missing %d characters at the end of the data string.\n", i);
              i = i / (fill->end - fill->begin);
              printf("That's %d times the padding string.\n", i);
              while(i > 0)
                  {
                  if (!append_to_tokenbuf(data, fill->begin, fill->end - fill->begin))
                      return VAR_OUT_OF_MEMORY;
                  --i;
                  }
              i = (width - (data->end - data->begin)) % (fill->end - fill->begin);
              printf("Plus a remainder of %d characters.\n", i);
              if (!append_to_tokenbuf(data, fill->begin, i))
                  return VAR_OUT_OF_MEMORY;
              }
          }
      else if (position == 'r')
          {
          i = width - (data->end - data->begin);
          if (i > 0)
              {
              printf("Missing %d characters at the beginning of the data string.\n", i);
              i = i / (fill->end - fill->begin);
              printf("That's %d times the padding string.\n", i);
              while(i > 0)
                  {
                  if (!append_to_tokenbuf(&result, fill->begin, fill->end - fill->begin))
                      {
                      free_tokenbuf(&result);
                      return VAR_OUT_OF_MEMORY;
                      }
                  --i;
                  }
              i = (width - (data->end - data->begin)) % (fill->end - fill->begin);
              printf("Plus a remainder of %d characters.\n", i);
              if (!append_to_tokenbuf(&result, fill->begin, i))
                  {
                  free_tokenbuf(&result);
                  return VAR_OUT_OF_MEMORY;
                  }
              if (!append_to_tokenbuf(&result, data->begin, data->end - data->begin))
                  {
                  free_tokenbuf(&result);
                  return VAR_OUT_OF_MEMORY;
                  }
  
              free_tokenbuf(data);
              move_tokenbuf(&result, data);
              }
          }
       else if (position == 'c')
          {
          i = (width - (data->end - data->begin)) / 2;
          if (i > 0)
              {
              /* Create the prefix. */
  
              printf("Missing %d characters at the beginning of the data string.\n", i);
              i = i / (fill->end - fill->begin);
              printf("That's %d times the padding string.\n", i);
              while(i > 0)
                  {
                  if (!append_to_tokenbuf(&result, fill->begin, fill->end - fill->begin))
                      {
                      free_tokenbuf(&result);
                      return VAR_OUT_OF_MEMORY;
                      }
                  --i;
                  }
              i = ((width - (data->end - data->begin)) / 2) % (fill->end - fill->begin);
              printf("Plus a remainder of %d characters.\n", i);
              if (!append_to_tokenbuf(&result, fill->begin, i))
                  {
                  free_tokenbuf(&result);
                  return VAR_OUT_OF_MEMORY;
                  }
  
              /* Append the actual data string. */
  
              if (!append_to_tokenbuf(&result, data->begin, data->end - data->begin))
                  {
                  free_tokenbuf(&result);
                  return VAR_OUT_OF_MEMORY;
                  }
  
              /* Append the suffix. */
  
              i = width - (result.end - result.begin);
              printf("Missing %d characters at the end of the data string.\n", i);
              i = i / (fill->end - fill->begin);
              printf("That's %d times the padding string.\n", i);
              while(i > 0)
                  {
                  if (!append_to_tokenbuf(&result, fill->begin, fill->end - fill->begin))
                      {
                      free_tokenbuf(&result);
                      return VAR_OUT_OF_MEMORY;
                      }
                  --i;
                  }
              i = width - (result.end - result.begin);
              printf("Plus a remainder of %d characters.\n", i);
              if (!append_to_tokenbuf(&result, fill->begin, i))
                  {
                  free_tokenbuf(&result);
                  return VAR_OUT_OF_MEMORY;
                  }
  
              /* Move string from temporary buffer to data buffer. */
  
              free_tokenbuf(data);
              move_tokenbuf(&result, data);
              }
          }
  
      return VAR_OK;
      }
  Index: ossp-pkg/var/regression-tests/.run-tests
  ============================================================
  $ cvs update -p -r1.1.1.1 regression-tests/.run-tests
  Index: ossp-pkg/var/regression-tests/Makefile
  ============================================================
  $ cvs update -p -r1.1.1.1 regression-tests/Makefile
  Index: ossp-pkg/var/regression-tests/Odinfile
  ============================================================
  $ cvs update -p -r1.1.1.1 regression-tests/Odinfile
  Index: ossp-pkg/var/regression-tests/empty-search-pattern.c
  ============================================================
  $ cvs update -p -r1.1.1.1 regression-tests/empty-search-pattern.c
  Index: ossp-pkg/var/regression-tests/expand-character-class.c
  ============================================================
  $ cvs update -p -r1.1.1.1 regression-tests/expand-character-class.c
  Index: ossp-pkg/var/regression-tests/expand-named-characters.c
  ============================================================
  $ cvs update -p -r1.1.1.1 regression-tests/expand-named-characters.c
  Index: ossp-pkg/var/regression-tests/expand1.c
  ============================================================
  $ cvs update -p -r1.1.1.1 regression-tests/expand1.c
  Index: ossp-pkg/var/regression-tests/expand2.c
  ============================================================
  $ cvs update -p -r1.1.1.1 regression-tests/expand2.c
  Index: ossp-pkg/var/regression-tests/expand3.c
  ============================================================
  $ cvs update -p -r1.1.1.1 regression-tests/expand3.c
  Index: ossp-pkg/var/regression-tests/expand4.c
  ============================================================
  $ cvs update -p -r1.1.1.1 regression-tests/expand4.c
  Index: ossp-pkg/var/regression-tests/expand5.c
  ============================================================
  $ cvs update -p -r1.1.1.1 regression-tests/expand5.c
  Index: ossp-pkg/var/regression-tests/expand6.c
  ============================================================
  $ cvs update -p -r1.1.1.1 regression-tests/expand6.c
  Index: ossp-pkg/var/regression-tests/force-expand.c
  ============================================================
  $ cvs update -p -r1.1.1.1 regression-tests/force-expand.c
  Index: ossp-pkg/var/regression-tests/offset-failure.c
  ============================================================
  $ cvs update -p -r1.1.1.1 regression-tests/offset-failure.c
  Index: ossp-pkg/var/search-and-replace.c
  ============================================================
  $ cvs update -p -r1.1.1.1 search-and-replace.c
  #include <sys/types.h>
  #include <regex.h>
  #include "internal.h"
  
  int search_and_replace(tokenbuf* data, tokenbuf* search, tokenbuf* replace, tokenbuf* flags)
      {
      const char* p;
      int case_insensitive = 0;
      int global = 0;
      int no_regex = 0;
      int rc;
  
      if (search->begin == search->end)
          return VAR_EMPTY_SEARCH_STRING;
  
      printf("Search '%s' in '%s' and replace it with '%s'.\n",
             search->begin, data->begin, replace->begin);
  
      for (p = flags->begin; p != flags->end; ++p)
          {
          switch (tolower(*p))
              {
              case 'i':
                  case_insensitive = 1;
                  printf("case_insensitive = 1;\n");
                  break;
              case 'g':
                  global = 1;
                  printf("global = 1;\n");
                  break;
              case 't':
                  no_regex = 1;
                  printf("no_regex = 1;\n");
                  break;
              default:
                  return VAR_UNKNOWN_REPLACE_FLAG;
              }
          }
  
      if (no_regex)
          {
          tokenbuf tmp;
          init_tokenbuf(&tmp);
  
          for (p = data->begin; p != data->end; )
              {
              if (case_insensitive)
                  rc = strncasecmp(p, search->begin, search->end - search->begin);
              else
                  rc = strncmp(p, search->begin, search->end - search->begin);
              if (rc != 0)
                  {               /* no match, copy character */
                  if (!append_to_tokenbuf(&tmp, p, 1))
                      {
                      free_tokenbuf(&tmp);
                      return VAR_OUT_OF_MEMORY;
                      }
                  ++p;
                  }
              else
                  {
                  append_to_tokenbuf(&tmp, replace->begin, replace->end - replace->begin);
                  p += search->end - search->begin;
                  if (!global)
                      {
                      if (!append_to_tokenbuf(&tmp, p, data->end - p))
                          {
                          free_tokenbuf(&tmp);
                          return VAR_OUT_OF_MEMORY;
                          }
                      break;
                      }
                  }
              }
  
          free_tokenbuf(data);
          move_tokenbuf(&tmp, data);
          }
      else
          {
          tokenbuf tmp;
          tokenbuf mydata;
          regex_t preg;
          regmatch_t pmatch[33];
          int regexec_flag;
  
          /* Copy the pattern and the data to our own buffer to make
             sure they're terminated with a null byte. */
  
          if (!assign_to_tokenbuf(&tmp, search->begin, search->end - search->begin))
              return VAR_OUT_OF_MEMORY;
          if (!assign_to_tokenbuf(&mydata, data->begin, data->end - data->begin))
              {
              free_tokenbuf(&tmp);
              return VAR_OUT_OF_MEMORY;
              }
  
          /* Compile the pattern. */
  
          printf("data is.................: '%s'\n", mydata.begin);
          printf("regex search pattern is.: '%s'\n", tmp.begin);
          printf("regex replace pattern is: '%s'\n", replace->begin);
          rc = regcomp(&preg, tmp.begin, REG_EXTENDED | ((case_insensitive) ? REG_ICASE : 0));
          free_tokenbuf(&tmp);
          if (rc != 0)
              {
              free_tokenbuf(&mydata);
              return VAR_INVALID_REGEX_IN_REPLACE;
              }
          printf("Subexpression in pattern: '%d'\n", preg.re_nsub);
  
          /* Match the pattern and create the result string in the tmp
             buffer. */
  
          for (p = mydata.begin; p != mydata.end; )
              {
              if (p == mydata.begin || p[-1] == '\n')
                  regexec_flag = 0;
              else
                  regexec_flag = REG_NOTBOL;
              if (regexec(&preg, p, sizeof(pmatch) / sizeof(regmatch_t), pmatch, regexec_flag) == REG_NOMATCH)
                  {
                  printf("No match; appending remainder ('%s') to output string.\n", p);
                  append_to_tokenbuf(&tmp, p, mydata.end - p);
                  break;
                  }
              else
                  {
  #if 0
                  printf("Match from offset %ld to %ld in string '%s'.\n",
                         pmatch[0].rm_so, pmatch[0].rm_eo, p);
  #endif
                  if (!append_to_tokenbuf(&tmp, p, pmatch[0].rm_so) ||
                      !append_to_tokenbuf(&tmp, replace->begin, replace->end - replace->begin))
                      {
                      regfree(&preg);
                      free_tokenbuf(&tmp);
                      free_tokenbuf(&mydata);
                      return VAR_OUT_OF_MEMORY;
                      }
                  else
                      p += pmatch[0].rm_eo;
                  if (!global)
                      {
                      append_to_tokenbuf(&tmp, p, mydata.end - p);
                      break;
                      }
                  }
              }
  
          regfree(&preg);
          free_tokenbuf(data);
          move_tokenbuf(&tmp, data);
          free_tokenbuf(&mydata);
          }
  
      return VAR_OK;
      }
  Index: ossp-pkg/var/text.c
  ============================================================
  $ cvs update -p -r1.1.1.1 text.c
  #include "internal.h"
  
  int text(const char* begin, const char* end, char varinit, char escape)
      {
      const char* p;
      for (p = begin; p != end && *p != varinit; ++p)
          {
          if (*p == escape)
              {
              if (p+1 == end)
                  return VAR_INCOMPLETE_QUOTED_PAIR;
              else
                  ++p;
              }
          }
      return p - begin;
      }
  
  int varname(const char* begin, const char* end, const char nameclass[256])
      {
      const char* p;
      for (p = begin; p != end && nameclass[(int)*p]; ++p)
          ;
      return p - begin;
      }
  
  int number(const char* begin, const char* end)
      {
      const char* p;
      for (p = begin; p != end && isdigit(*p); ++p)
          ;
      return p - begin;
      }
  
  int substext(const char* begin, const char* end, const var_config_t* config)
      {
      const char* p;
      for (p = begin; p != end && *p != config->varinit && *p != '/'; ++p)
          {
          if (*p == config->escape)
              {
              if (p+1 == end)
                  return VAR_INCOMPLETE_QUOTED_PAIR;
              else
                  ++p;
              }
          }
      return p - begin;
      }
  
  int exptext(const char* begin, const char* end, const var_config_t* config)
      {
      const char* p;
      for (p = begin; p != end && *p != config->varinit && *p != config->enddelim && *p != ':'; ++p)
          {
          if (*p == config->escape)
              {
              if (p+1 == end)
                  return VAR_INCOMPLETE_QUOTED_PAIR;
              else
                  ++p;
              }
          }
      return p - begin;
      }
  
  int exptext_or_variable(const char* begin, const char* end, const var_config_t* config,
                          const char nameclass[256], var_cb_t lookup, void* lookup_context,
                          int force_expand, tokenbuf* result)
      {
      const char* p = begin;
      tokenbuf tmp;
      int rc;
  
      init_tokenbuf(result);
      init_tokenbuf(&tmp);
  
      if (begin == end)
          return 0;
  
      do
          {
          rc = exptext(p, end, config);
          if (rc < 0)
              goto error_return;
          else if (rc > 0)
              {
              if (!append_to_tokenbuf(result, p, rc))
                  {
                  rc = VAR_OUT_OF_MEMORY;
                  goto error_return;
                  }
              else
                  p += rc;
              }
  
          rc = variable(p, end, config, nameclass, lookup, lookup_context, force_expand, &tmp);
          if (rc < 0)
              goto error_return;
          else if (rc > 0)
              {
              p += rc;
              if (!append_to_tokenbuf(result, tmp.begin, tmp.end - tmp.begin))
                  {
                  rc = VAR_OUT_OF_MEMORY;
                  goto error_return;
                  }
              }
          }
      while (rc > 0);
  
      free_tokenbuf(&tmp);
      return p - begin;
  
    error_return:
      free_tokenbuf(&tmp);
      free_tokenbuf(result);
      return rc;
      }
  
  int substext_or_variable(const char* begin, const char* end, const var_config_t* config,
                           const char nameclass[256], var_cb_t lookup, void* lookup_context,
                           int force_expand, tokenbuf* result)
      {
      const char* p = begin;
      tokenbuf tmp;
      int rc;
  
      init_tokenbuf(result);
      init_tokenbuf(&tmp);
  
      if (begin == end)
          return 0;
  
      do
          {
          rc = substext(p, end, config);
          if (rc < 0)
              goto error_return;
          else if (rc > 0)
              {
              if (!append_to_tokenbuf(result, p, rc))
                  {
                  rc = VAR_OUT_OF_MEMORY;
                  goto error_return;
                  }
              else
                  p += rc;
              }
  
          rc = variable(p, end, config, nameclass, lookup, lookup_context, force_expand, &tmp);
          if (rc < 0)
              goto error_return;
          else if (rc > 0)
              {
              p += rc;
              if (!append_to_tokenbuf(result, tmp.begin, tmp.end - tmp.begin))
                  {
                  rc = VAR_OUT_OF_MEMORY;
                  goto error_return;
                  }
              }
          }
      while (rc > 0);
  
      free_tokenbuf(&tmp);
      return p - begin;
  
    error_return:
      free_tokenbuf(&tmp);
      free_tokenbuf(result);
      return rc;
      }
  Index: ossp-pkg/var/tokenbuf.c
  ============================================================
  $ cvs update -p -r1.1.1.1 tokenbuf.c
  #include "internal.h"
  
  #define VAR_INITIAL_BUFFER_SIZE 1
  
  void init_tokenbuf(tokenbuf* buf)
      {
      buf->begin = buf->end = NULL;
      buf->buffer_size = 0;
      }
  
  void move_tokenbuf(tokenbuf* src, tokenbuf* dst)
      {
      dst->begin = src->begin;
      dst->end = src->end;
      dst->buffer_size = src->buffer_size;
      init_tokenbuf(src);
      }
  
  int assign_to_tokenbuf(tokenbuf* buf, const char* data, size_t len)
      {
      char* p = malloc(len+1);
      if (p)
          {
          memcpy(p, data, len);
          buf->begin       = p;
          buf->end         = p + len;
          buf->buffer_size = len + 1;
          *((char*)(buf->end)) = '\0';
          return 1;
          }
      else
          return 0;
      }
  
  int append_to_tokenbuf(tokenbuf* output, const char* data, size_t len)
      {
      char*  new_buffer;
      size_t new_size;
  
      /* Is the tokenbuffer initialized at all? If not, allocate a
         standard-sized buffer to begin with. */
  
      if (output->begin == NULL)
          {
          if ((output->begin = output->end = malloc(VAR_INITIAL_BUFFER_SIZE)) == NULL)
              return 0;
          else
              output->buffer_size = VAR_INITIAL_BUFFER_SIZE;
          }
  
      /* Does the token contain text, but no buffer has been allocated
         yet? */
  
      if (output->buffer_size == 0)
          {
          /* Check whether data borders to output. If, we can append
             simly by increasing the end pointer. */
  
          if (output->end == data)
              {
              output->end += len;
              return 1;
              }
  
          /* OK, so copy the contents of output into an allocated buffer
             so that we can append that way. */
  
          else
              {
              char* tmp = malloc(output->end - output->begin + len + 1);
              if (!tmp)
                  return 0;
              memcpy(tmp, output->begin, output->end - output->begin);
              output->buffer_size = output->end - output->begin;
              output->begin = tmp;
              output->end   = tmp + output->buffer_size;
              output->buffer_size += len + 1;
              }
          }
  
      /* Does the token fit into the current buffer? If not, realloc a
         larger buffer that fits. */
  
      if ((output->buffer_size - (output->end - output->begin)) <= len)
          {
          new_size = output->buffer_size;
          do
              {
              new_size *= 2;
              }
          while ((new_size - (output->end - output->begin)) <= len);
          new_buffer = realloc((char*)output->begin, new_size);
          if (new_buffer == NULL)
              return 0;
          output->end = new_buffer + (output->end - output->begin);
          output->begin = new_buffer;
          output->buffer_size = new_size;
          }
  
      /* Append the data at the end of the current buffer. */
  
      memcpy((char*)output->end, data, len);
      output->end += len;
      *((char*)output->end) = '\0';
      return 1;
      }
  
  
  void free_tokenbuf(tokenbuf* buf)
      {
      if (buf->begin != NULL && buf->buffer_size > 0)
          free((char*)buf->begin);
      buf->begin = buf->end = NULL;
      buf->buffer_size = 0;
      }
  Index: ossp-pkg/var/transpose.c
  ============================================================
  $ cvs update -p -r1.1.1.1 transpose.c
  #include <sys/types.h>
  #include <regex.h>
  #include "internal.h"
  
  static int expand_class_description(tokenbuf* src, tokenbuf* dst)
      {
      unsigned char c, d;
      const char* p = src->begin;
      while(p != src->end)
          {
          if ((src->end - p) >= 3 && p[1] == '-')
              {
              printf("Expand class.\n");
              if (*p > p[2])
                  return VAR_INCORRECT_TRANSPOSE_CLASS_SPEC;
              for (c = *p, d = p[2]; c <= d; ++c)
                  {
                  if (!append_to_tokenbuf(dst, (char*)&c, 1))
                      return VAR_OUT_OF_MEMORY;
                  }
              p += 3;
              }
          else
              {
              printf("Copy verbatim.\n");
              if (!append_to_tokenbuf(dst, p, 1))
                  return VAR_OUT_OF_MEMORY;
              else
                  ++p;
              }
          }
      return VAR_OK;
      }
  
  int transpose(tokenbuf* data, tokenbuf* search, tokenbuf* replace)
      {
      tokenbuf srcclass, dstclass;
      const char* p;
      int rc;
      size_t i;
  
      init_tokenbuf(&srcclass);
      init_tokenbuf(&dstclass);
  
      if ((rc = expand_class_description(search, &srcclass)) != VAR_OK)
          goto error_return;
      if ((rc = expand_class_description(replace, &dstclass)) != VAR_OK)
          goto error_return;
  
      printf("Transpose from '%s' to '%s'.\n",
             srcclass.begin, dstclass.begin);
  
      if (srcclass.begin == srcclass.end)
          {
          rc = VAR_EMPTY_TRANSPOSE_CLASS;
          goto error_return;
          }
      if ((srcclass.end - srcclass.begin) != (dstclass.end - dstclass.begin))
          {
          rc = VAR_TRANSPOSE_CLASSES_MISMATCH;
          goto error_return;
          }
  
      if (data->buffer_size == 0)
          {
          tokenbuf tmp;
          if (!assign_to_tokenbuf(&tmp, data->begin, data->end - data->begin))
              {
              rc = VAR_OUT_OF_MEMORY;
              goto error_return;
              }
          move_tokenbuf(&tmp, data);
          }
  
      for (p = data->begin; p != data->end; ++p)
          {
          for (i = 0; i <= (srcclass.end - srcclass.begin); ++i)
              {
              if (*p == srcclass.begin[i])
                  {
                  *((char*)p) = dstclass.begin[i];
                  break;
                  }
              }
          }
  
      free_tokenbuf(&srcclass);
      free_tokenbuf(&dstclass);
      return VAR_OK;
  
    error_return:
      free_tokenbuf(search);
      free_tokenbuf(replace);
      free_tokenbuf(&srcclass);
      free_tokenbuf(&dstclass);
      return rc;
      }
  Index: ossp-pkg/var/varexp.h
  ============================================================
  $ cvs update -p -r1.1.1.1 varexp.h
  #ifndef LIB_VARIABLE_EXPAND_H
  #define LIB_VARIABLE_EXPAND_H
  
  #include <stdlib.h>
  
  /* Error codes returned by the varexp library. */
  
  typedef enum
      {
      VAR_EMPTY_PADDING_FILL_STRING      = -32,
      VAR_MISSING_PADDING_WIDTH          = -31,
      VAR_MALFORMATTED_PADDING           = -30,
      VAR_INCORRECT_TRANSPOSE_CLASS_SPEC = -29,
      VAR_EMPTY_TRANSPOSE_CLASS          = -28,
      VAR_TRANSPOSE_CLASSES_MISMATCH     = -27,
      VAR_MALFORMATTED_TRANSPOSE         = -26,
      VAR_OFFSET_LOGIC_ERROR             = -25,
      VAR_OFFSET_OUT_OF_BOUNDS           = -24,
      VAR_RANGE_OUT_OF_BOUNDS            = -23,
      VAR_INVALID_OFFSET_DELIMITER       = -22,
      VAR_MISSING_START_OFFSET           = -21,
      VAR_EMPTY_SEARCH_STRING            = -20,
      VAR_MISSING_PARAMETER_IN_COMMAND   = -19,
      VAR_INVALID_REGEX_IN_REPLACE       = -18,
      VAR_UNKNOWN_REPLACE_FLAG           = -17,
      VAR_MALFORMATTED_REPLACE           = -16,
      VAR_UNKNOWN_COMMAND_CHAR           = -14,
      VAR_INPUT_ISNT_TEXT_NOR_VARIABLE   = -13,
      VAR_UNDEFINED_VARIABLE             = -12,
      VAR_INCOMPLETE_VARIABLE_SPEC       = -11,
      VAR_OUT_OF_MEMORY                  = -10,
      VAR_INVALID_CONFIGURATION          = -9,
      VAR_INCORRECT_CLASS_SPEC           = -8,
      VAR_INCOMPLETE_GROUPED_HEX         = -7,
      VAR_INCOMPLETE_OCTAL               = -6,
      VAR_INVALID_OCTAL                  = -5,
      VAR_OCTAL_TOO_LARGE                = -4,
      VAR_INVALID_HEX                    = -3,
      VAR_INCOMPLETE_HEX                 = -2,
      VAR_INCOMPLETE_NAMED_CHARACTER     = -1,
      VAR_INCOMPLETE_QUOTED_PAIR         = -1,
      VAR_OK                             = 0
      }
  var_rc_t;
  
  /*
     Expand the following named characters to their binary
     representation:
  
         \t          tab
         \n          newline
         \r          return
         \033        octal char
         \x1B        hex char
         \x{263a}    wide hex char
  
    Any other character quoted by a backslash is copied verbatim.
  */
  
  var_rc_t expand_named_characters(const char* src, size_t len, char* dst);
  
  /*
     The callback will be called by variable_expand(), providing the
     following parameterns:
  
          context         - passed through from variable_expand()'s
                            parameters
          varname         - pointer to the name of the variable to
                            expand
          name_len        - length of the string starting at varname
          data            - location, where the callback should store
                            the pointer to the contents of the looked-up
                            variable
          data_len        - location, where the callback should store
                            the length of the data
          malloced_buffer - location, where the callback should store
                            either TRUE or FALSE, telling the framework
                            whether the buffer must be free(3)ed.
  
     The return code is interpreted as follows:
         >0               - OK
          0               - undefined variable
         <0 - error
  */
  
  typedef int (*var_cb_t)(void* context,
                          const char* varname, size_t name_len,
                          const char** data, size_t* data_len, size_t* buffer_size);
  
  /*
     This structure configures the parser's specials. I think, the fields
     are pretty self-explanatory. The only one worth mentioning is
     force_expand, which is a boolean. If set to TRUE, variable_expand()
     will fail with an error if the lookup callback returns "undefined
     variable". If set to FALSE, variable_expand() will copy the
     expression that failed verbatimly to the output so that another pass
     may expand it.
  
     The comments after each field show the default configuration.
  */
  
  typedef struct
      {
      char  varinit;               /* '$' */
      char  startdelim;            /* '{' */
      char  enddelim;              /* '}' */
      char  escape;                /* '\' */
      char* namechars;             /* 'a-zA-Z0-9_' */
      }
  var_config_t;
  extern const var_config_t var_config_default;
  
  /*
     variable_expand() will parse the contents of input for variable
     expressions and expand them using the provided lookup callback. The
     pointer to the resulting buffer is stored in result, its length in
     result_len. The buffer is always terminated by a '\0' byte, which is
     not included in the result_len count. The buffer must be free(3)ed
     by the caller.
  */
  
  var_rc_t var_expand(const char* input, size_t input_len,
                      char** result, size_t* result_len,
                      var_cb_t lookup, void* lookup_context,
                      const var_config_t* config, int force_expand);
  
  #endif /* !defined(LIB_VARIABLE_EXPAND_H) */
  Index: ossp-pkg/var/variable.c
  ============================================================
  $ cvs update -p -r1.1.1.1 variable.c
  #include "internal.h"
  
  int variable(const char* begin, const char* end, const var_config_t* config,
               const char nameclass[256], var_cb_t lookup, void* lookup_context,
               int force_expand, tokenbuf* result)
      {
      const char* p = begin;
      const char* data;
      size_t len, buffer_size;
      int rc, rc2;
  
      /* Clear the result tokenbuf to make sure we're in a defined
         state. */
  
      init_tokenbuf(result);
  
      /* Expect VARINIT. */
  
      if (p == end || *p != config->varinit)
          return 0;
  
      if (++p == end)
          return VAR_INCOMPLETE_VARIABLE_SPEC;
  
      /* Try to read the variable name. If that fails, we're parsing a
         complex expression. */
  
      rc = varname(p, end, nameclass);
      if (rc < 0)
          return rc;
      else if (rc > 0)
          {
          rc2 = (*lookup)(lookup_context, p, rc, &data, &len, &buffer_size);
          if (rc2 < 0)
              return rc2;
          else if (rc2 == 0)
              {
              if (force_expand)
                  return VAR_UNDEFINED_VARIABLE;
              else
                  {
                  result->begin       = begin;
                  result->end         = begin + 1 + rc;
                  result->buffer_size = 0;
                  return 1 + rc;
                  }
              }
          else
              {
              result->begin       = data;
              result->end         = data + len;
              result->buffer_size = buffer_size;
              return 1 + rc;
              }
          }
  
      /* OK, we're dealing with a complex expression here. */
  
      rc = expression(p, end, config, nameclass, lookup, lookup_context, force_expand, result);
      if (rc > 0)
          ++rc;
      return rc;
      }

From ossp-cvs-owner@ossp.org  Fri Nov  9 18:02:38 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fA9H2b953141; Fri, 9 Nov 2001 18:02:37 +0100 (CET)
Date: Fri, 9 Nov 2001 18:02:37 +0100 (CET)
Message-Id: <200111091702.fA9H2b953141@ossp.org>
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   OSSP Project Master
  Root:   /e/ossp/cvs                      Email:  ossp@ossp.org
  Module: CVSROOT                          Date:   09-Nov-2001 18:02:37
  Branch: HEAD                             Handle: 2001110917023600

  Modified files:
    CVSROOT                 modules

  Log:
    add OSSP var

  Summary:
    Revision    Changes     Path
    1.30        +1  -0      CVSROOT/modules
  ____________________________________________________________________________

  Index: CVSROOT/modules
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 modules
  --- CVSROOT/modules	2001/10/02 13:28:20	1.29
  +++ CVSROOT/modules	2001/11/09 17:02:36	1.30
  @@ -77,4 +77,5 @@
   xds             ossp-pkg/srpc/libxds
   sa              ossp-pkg/sa
   lmtp2nntp       ossp-pkg/lmtp2nntp &str &l2 &sa
  +var             ossp-pkg/var
   

From ossp-cvs-owner@ossp.org  Fri Nov  9 22:24:26 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fA9LOPM88803; Fri, 9 Nov 2001 22:24:25 +0100 (CET)
Date: Fri, 9 Nov 2001 22:24:25 +0100 (CET)
Message-Id: <200111092124.fA9LOPM88803@ossp.org>
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   OSSP Project Master
  Root:   /e/ossp/cvs                      Email:  ossp@ossp.org
  Module: CVSROOT                          Date:   09-Nov-2001 22:24:25
  Branch: HEAD                             Handle: 2001110921242500

  Modified files:
    CVSROOT                 modules

  Log:
    XDS is now separate

  Summary:
    Revision    Changes     Path
    1.31        +1  -1      CVSROOT/modules
  ____________________________________________________________________________

  Index: CVSROOT/modules
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 modules
  --- CVSROOT/modules	2001/11/09 17:02:36	1.30
  +++ CVSROOT/modules	2001/11/09 21:24:25	1.31
  @@ -74,7 +74,7 @@
   sugar           ossp-pkg/sugar
   l2              ossp-pkg/l2
   srpc            ossp-pkg/srpc
  -xds             ossp-pkg/srpc/libxds
  +xds             ossp-pkg/xds
   sa              ossp-pkg/sa
   lmtp2nntp       ossp-pkg/lmtp2nntp &str &l2 &sa
   var             ossp-pkg/var

From ossp-cvs-owner@ossp.org  Sat Nov 10 15:01:49 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fAAE1m524348; Sat, 10 Nov 2001 15:01:48 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 8A2AD4CE9A1; Sat, 10 Nov 2001 15:01:48 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 .cvsignore Makefile.in l2tool.c l2tool.pod
Message-Id: <20011110140148.8A2AD4CE9A1@visp.engelschall.com>
Date: Sat, 10 Nov 2001 15:01:48 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   10-Nov-2001 15:01:48
  Branch: HEAD                             Handle: 2001111014014700

  Added files:
    ossp-pkg/l2             l2tool.c l2tool.pod
  Modified files:
    ossp-pkg/l2             .cvsignore Makefile.in

  Log:
    First cut for the L2 command line tool which allows us very easy testing
    through the new channel tree specification parser.

  Summary:
    Revision    Changes     Path
    1.12        +2  -0      ossp-pkg/l2/.cvsignore
    1.37        +15 -5      ossp-pkg/l2/Makefile.in
    1.1         +115 -0     ossp-pkg/l2/l2tool.c
    1.1         +82 -0      ossp-pkg/l2/l2tool.pod
  ____________________________________________________________________________

  Index: ossp-pkg/l2/.cvsignore
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 .cvsignore
  --- ossp-pkg/l2/.cvsignore	2001/11/07 16:17:09	1.11
  +++ ossp-pkg/l2/.cvsignore	2001/11/10 14:01:47	1.12
  @@ -23,3 +23,5 @@
   l2_spec_parse.c
   l2_spec_parse.h
   l2_spec_scan.c
  +l2tool
  +l2tool.1
  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.36 -r1.37 Makefile.in
  --- ossp-pkg/l2/Makefile.in	2001/11/08 21:58:00	1.36
  +++ ossp-pkg/l2/Makefile.in	2001/11/10 14:01:47	1.37
  @@ -58,10 +58,10 @@
   SHTOOL      = ./shtool
   LIBTOOL     = ./libtool
   
  -TARGET       = $(TARGET_LIBS) $(TARGET_MANS) $(TARGET_TESTS)
  +TARGET       = $(TARGET_LIBS) $(TARGET_MANS) $(TARGET_PROGS)
   TARGET_LIBS  = libl2.la @LIBL2XX_LA@
  -TARGET_MANS  = l2-config.1 l2.3 @L2XX_3@
  -TARGET_TESTS = l2_test @L2_TESTXX@
  +TARGET_MANS  = l2tool.1 l2-config.1 l2.3 @L2XX_3@
  +TARGET_PROGS = l2tool l2_test @L2_TESTXX@
   
   #   list of library object files
   OBJS = \
  @@ -162,7 +162,9 @@
   @M@l2_spec_parse.c l2_spec_parse.h: l2_spec_parse.y
   @M@	$(BISON) -d -k -pl2_spec_ -ol2_spec_parse.c l2_spec_parse.y
   
  -#   build test suite programs
  +#   build programs
  +l2tool: l2tool.o libl2.la
  +	$(LIBTOOL) --mode=link --quiet $(CC) $(LDFLAGS) -o l2tool l2tool.o libl2.la $(LIBS)
   l2_test: l2_test.o libl2.la
   	$(LIBTOOL) --mode=link --quiet $(CC) $(LDFLAGS) -o l2_test l2_test.o libl2.la $(LIBS)
   l2_test++: l2_test++.o libl2++.la
  @@ -171,6 +173,10 @@
   	$(LIBTOOL) --mode=link --quiet $(CC) $(LDFLAGS) -o l2_sockmon l2_sockmon.o $(LIBS)
   
   #   build Unix manual pages
  +l2tool.1: l2tool.pod l2_version.c
  +	BASENAME="l2tool"; SEC=1; \
  +	NAME="L2"; ONELINE="Logging Tool"; \
  +	$(_MANPAGE)
   l2-config.1: l2-config.pod l2_version.c
   	BASENAME="l2-config"; SEC=1; \
   	NAME="L2"; ONELINE="Logging Library"; \
  @@ -203,6 +209,8 @@
   	$(SHTOOL) mkdir -p -f -m 755 $(DESTDIR)$(mandir)/man3
   	$(SHTOOL) install -c -m 755 l2-config $(DESTDIR)$(bindir)/l2-config
   	$(SHTOOL) install -c -m 644 l2-config.1 $(DESTDIR)$(mandir)/man1/l2-config.1
  +	$(SHTOOL) install -c -m 755 l2tool $(DESTDIR)$(bindir)/l2tool
  +	$(SHTOOL) install -c -m 644 l2tool.1 $(DESTDIR)$(mandir)/man1/l2tool.1
   install-c:
   	$(SHTOOL) install -c -m 644 l2.3 $(DESTDIR)$(mandir)/man3/l2.3
   	$(SHTOOL) install -c -m 644 l2.h $(DESTDIR)$(includedir)/l2.h
  @@ -226,6 +234,8 @@
   	$(RM) $(DESTDIR)$(includedir)/l2.h
   	$(RM) $(DESTDIR)$(mandir)/man3/l2.3
   uninstall-std:
  +	$(RM) $(DESTDIR)$(mandir)/man1/l2tool.1
  +	$(RM) $(DESTDIR)$(bindir)/l2tool
   	$(RM) $(DESTDIR)$(mandir)/man1/l2-config.1
   	$(RM) $(DESTDIR)$(bindir)/l2-config
   	$(RMDIR) $(DESTDIR)$(mandir)/man3
  @@ -242,7 +252,7 @@
   	$(RM) .libs/*
   	-$(RMDIR) .libs >/dev/null 2>&1 || $(TRUE)
   	$(RM) $(TARGET_LIBS)
  -	$(RM) $(TARGET_TESTS)
  +	$(RM) $(TARGET_PROGS)
   
   #   remove everything which can be regenerated
   #   by "./configure && make all"
  Index: ossp-pkg/l2/l2tool.c
  ============================================================
  $ cvs update -p -r1.1 l2tool.c
  /*
  **  L2 - OSSP Logging Library
  **  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP L2, a flexible logging library which
  **  can be found at http://www.ossp.org/pkg/l2/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  l2tool.c: L2 command line tool
  */
  
  #include <stdio.h>
  #include "l2.h"
  
  static void die(l2_env_t *env, l2_result_t rv, char *fmt, ...)
  {
      va_list ap;
      char *error;
  
      va_start(ap, fmt);
      fprintf(stderr, "l2tool:ERROR: ");
      vfprintf(stderr, fmt, ap);
      error = l2_env_strerror(env, rv);
      fprintf(stderr, " (%s)\n", error);
      va_end(ap);
      exit(1);
  }
  
  int main(int argc, char *argv[])
  {
      l2_channel_t *ch;
      char *spec;
      l2_result_t rv;
      l2_env_t *env;
      char *cpLevel;
      char caBuf[2048];
      int nBuf;
      char *cpMsg;
      char *cp;
      unsigned int nLevel;
  
      /* minimal command line parsing */
      if (argc != 2) {
          fprintf(stderr, "l2tool:ERROR: invalid command line\n");
          fprintf(stderr, "l2tool:USAGE: l2tool <specification>\n");
          exit(1);
      }
      spec = argv[1];
  
      /* create environment */
      if ((rv = l2_env_create(&env)) != L2_OK)
          die(env, rv, "failed to create environment");
  
      /* create channel tree */
      if ((rv = l2_spec(&ch, env, spec)) != L2_OK)
          die(env, rv, "failed to parse specification");
  
      /* open channel tree */
      if ((rv = l2_channel_open(ch)) != L2_OK)
          die(env, rv, "failed to open channel tree");
      
      /* loop over stdin */
      while (fgets(caBuf, sizeof(caBuf), stdin) != NULL) {
          /* strip newline */
          nBuf = strlen(caBuf);
          caBuf[nBuf-1] = '\0';
  
          /* parse logging level */
          nLevel  = L2_LEVEL_INFO;
          cpLevel = "info";
          cpMsg   = caBuf;
          if (caBuf[0] == '<') {
              if ((cp = strchr(caBuf+1, '>')) == NULL)
                  die(env, rv, "unterminated level prefix");
              *cp++ = '\0';
              cpLevel = caBuf+1;
              cpMsg   = cp;
          }
          if (l2_util_s2l(cpLevel, strlen(cpLevel), ',', &nLevel) != L2_OK)
              die(env, rv, "invalid level prefix");
  
          /* perform log operation(s) */
          if ((rv = l2_channel_log(ch, nLevel, "%s", cpMsg)) != L2_OK)
              die(env, rv, "failed to log message to channel tree");
      }
  
      /* destroy channel tree */
      if ((rv = l2_channel_destroy(ch)) != L2_OK)
          die(env, rv, "failed to destroy channel tree");
  
      /* destroy environment */
      if ((rv = l2_env_destroy(env)) != L2_OK)
          die(env, rv, "failed to destroy environment");
  
      return 0;
  }
  
  Index: ossp-pkg/l2/l2tool.pod
  ============================================================
  $ cvs update -p -r1.1 l2tool.pod
  ##
  ##  L2 - OSSP Logging Library
  ##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  ##
  ##  This file is part of OSSP L2, a flexible logging library which
  ##  can be found at http://www.ossp.org/pkg/l2/.
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  l2tool.pod: L2 tool manual page
  ##
  
  =pod
  
  =head1 NAME
  
  B<l2tool> - L2 loggin tool
  
  =head1 VERSION
  
  OSSP L2 L2_VERSION_STR
  
  =head1 SYNOPSIS
  
  B<l2tool>
  I<specification>
  
  =head1 DESCRIPTION
  
  The B<l2tool> program is a little helper utility which reads log
  messages from F<stdin> and writes it to a channel tree specified via the
  channel tree I<specification>.
  
  =head1 OPTIONS
  
  B<l2tool> accepts the following options:
  
  =over 4
  
  =item B<--help>
  
  Prints the short usage information.
  
  =item B<--version>
  
  Prints the version number and date of the installed l2(3) library.
  
  ...
  
  =back
  
  =head1 EXAMPLE
  
  =head1 SEE ALSO
  
  l2(3).
  
  =head1 AUTHOR
  
   Ralf S. Engelschall
   rse@engelschall.com
   www.engelschall.com
  
  =cut
  

From ossp-cvs-owner@ossp.org  Sat Nov 10 15:04:06 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fAAE45524769; Sat, 10 Nov 2001 15:04:05 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 7A2B44CE9A1; Sat, 10 Nov 2001 15:04:05 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Message-Id: <20011110140405.7A2B44CE9A1@visp.engelschall.com>
Date: Sat, 10 Nov 2001 15:04:05 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   10-Nov-2001 15:04:05
  Branch: HEAD                             Handle: 2001111014040500

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    remember idea

  Summary:
    Revision    Changes     Path
    1.42        +4  -0      ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.41 -r1.42 TODO
  --- ossp-pkg/l2/TODO	2001/11/08 10:03:47	1.41
  +++ ossp-pkg/l2/TODO	2001/11/10 14:04:05	1.42
  @@ -10,6 +10,10 @@
   - prefix channel produces implicitly two log messages if
     a following buffer channel would not accumulate them. Hmmm..
   
  +- bugfix l2tool and after it works 100% remove l2_test 
  +  in favor of l2tool and add instead a test shell script
  +  which calls l2tool with various input specifications.
  +
   Channel-Only Revamping:
   - syscall override ala OSSP SA in l2_env_t
   - l2_objects.fig update

From ossp-cvs-owner@ossp.org  Sun Nov 11 13:40:44 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fABCeh597615; Sun, 11 Nov 2001 13:40:43 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 4D4C94CE693; Sun, 11 Nov 2001 13:40:43 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var SPEC
Message-Id: <20011111124043.4D4C94CE693@visp.engelschall.com>
Date: Sun, 11 Nov 2001 13:40:43 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   11-Nov-2001 13:40:43
  Branch: HEAD                             Handle: 2001111112404200

  Added files:
    ossp-pkg/var            SPEC

  Log:
    Remember the specification here.

  Summary:
    Revision    Changes     Path
    1.1         +192 -0     ossp-pkg/var/SPEC
  ____________________________________________________________________________

  Index: ossp-pkg/var/SPEC
  ============================================================
  $ cvs update -p -r1.1 SPEC
  
  - Name:
     
    OSSP var (Variable Expansion Library)
  
  - Description:
  
    OSSP var is a library providing an API which allows one to expand
    one or more variables in text templates in a flexible way. The
    generability comes from using a callback function to actually resolve
    the value of a variable. The flexiblity comes from providing various
    manipulation functions which can be applied to the resolved values
    before they are substituted instead of the variable construct in the
    text template.
  
  - Features (german):
  
    - Eine Variable kann im Text in der Form $name oder ${name} angegeben
      werden, wobei die Wahl der Klammern '{' '}' und des '$'
      parametriesiert werden können.
   
    - Gültige Zeichen für einen Variablennamen sind konfigurierbar.
      Garbage in -- garbage out.
   
    - Ein echtes '$'-Zeichen im Text kann durch Voranstellung eines
      wählbaren Escapezeichen dargestellt werden. Default ist der
      Backslash ('\').
   
    - Der Aufrufer der Funktion soll steuern können, wie sich die Library
      verhält, wenn eine Variable nicht existiert. Denkbar sind:
   
       - Abbruch mit Fehler,
       - die Variable wird zu "", oder
       - der Ausdruck wird unverändert in den Ausgabetext übernommen,
         sodaß eventuell ein zweiter Pass gemacht werden kann.
   
    - ${parameter:-word} wird normal expandiert. Wenn "parameter" leer
      ist, wird stattdessen "word" eingesetzt.
   
    - ${parameter:?word} wird normal expandiert. Wenn "parameter" leer
      ist, bricht die Verarbeitung mit Fehler ab und "word" wird als
      Begründung zurückgegeben.
   
    - ${parameter:+word} substituiert die Expansion von "${word}" wenn
      "parameter" nicht leer ist, sonst wird "" substituiert.
   
    - ${parameter:o<start>-}, ${parameter:o<start>-<end>}
   
    - ${parameter:o<start>,}, ${parameter:o<start>,<length>}
   
    - ${parameter:#} expandiert zur Länge des Inhaltes von "parameter".
   
    - ${parameter:s/pattern/string/[gti]} expandiert "parameter" und
      führt dann eine Ersetzung mittels des regulären Ausdrucks "pattern"
      durch. Wird das 'g'-Flag angegeben, wird nicht nur eine Instanz von
      "pattern" durch "string" ersetzt, sondern alle. Das 't'-Flag
      signalisiert, daß eine reine Text-Ersetzung ohne Unterstützung von
     regulären Ausdrücken gewünscht ist. Das 'i'-Flag besagt, daß die
      Suche nach "pattern" case-insensitiv durchgeführt wird.
   
    - ${parameter:y/ochars/nchars/} expandiert den Inhalt von "parameter"
      und transformiert dabei nach dem Prinzip von tr(1) die "ochars" im
      Text zu "nchars".
   
    - ${parameter:l} wandelt den Inhalt von "parameter" in
      Kleinbuchstaben, bevor es die Variable expandiert. Dies geschieht
      über toupper(3).
   
    - ${parameter:u} wandelt den Inhalt von "parameter" in
      Großbuchstaben, bevor es die Variable expandiert. Dies geschieht
      über tolower(3).
   
    - ${parameter:*word} expandiert zum leeren Wort, wenn "parameter"
      nicht leer ist, sonst zu "word".
   
    - Jedes Vorkommen eines der folgenden Konstrukte im Text wird durch
      das zugehörige Sonderzeichen ersetzt.
   
          \t          tab
          \n          newline
          \r          return
          \033        octal char
          \x1B        hex char
          \x{263a}    wide hex char
  
    - Padding: ${parameter:p/<width>/<string>/<align>} expandiert
      "parameter" in einen String der Mindestbreite <width>, wobei abhaengig
      von <align> ("r" = right, "l" = left, "c" = center) noch fehlende
      Zeichen mit <string> aufgefuellt werden. Diest ist gedacht, um in
      Templates saubere Tabellen erzeugen zu koennen.
      Beispiele (foo="bar"): 
          "${foo:p/6/./r}" -> "bar..."
          "${foo:p/6/./l}" -> "...bar"
          "${foo:p/6/./c}" -> ".bar.." (oder "..bar.", egal)
          "${foo:p/20/-=/c}" -> "-=-=-=-=-bar-=-=-=-="
  
  - API (var.h):
  
    | int (*var_cb_t)(void *context,
    |                 const char *varname, 
    |                 size_t name_len,
    |                 char *const *data, 
    |                 size_t *data_len, 
    |                 char *malloced_buffer);
    |                 
    | typdef struct {
    |     char  varinit;
    |     char  startdelim;
    |     char  enddelim;  
    |     char  escape;    
    |     char* namechars; 
    |     char  force_expand;
    | } var_config_t;
    | 
    | extern const var_config_t var_config_default;
    | 
    | int var_expand(const char *input, 
    |                size_t input_len,
    |                char **result, 
    |                size_t *result_len,
    |                const char **error_msg,
    |                varexp_lookup_cb lookup,
    |                void *lookup_context,
    |                struct varexp_configuration *config);
  
  - Results:
  
    Makefile ..... build procedure (minimal only!)
    var.ac ....... Autoconf macro OSSP_VAR
    var.h ........ OSSP var public API 
    var.c ........ OSSP var implementation
    var.pod ...... OSSP var manual page
    var_test.c ... OSSP var test suite
  
  - Implementation Languages/Style:
  
    var.ac ....... lang: Autoconf 2.52, style: any
    var*.{h,c} ... lang: ANSI-C (< C99), style: Classical K&R
    var.pod ...... lang: POD (as of Perl 5.6), style: any
  
  - Implementation Namespaces:
  
    var_ ......... for all global linker symbols
    VAR_ ......... for all pre-processor symbols
  
  - Implementation Points:
  
    o The variable expansion process for "text" has to be O(n) where n
      is the length of "text". The hidden constant before n has to be
      very small, i.e., the text under ideal circumstances should be
      processed/glanced-over just once. Expansion speed is very important,
      but should be achieved by using any unportable things. The speed has
      to come from algorithmic decisions.
  
    o For regular expression based constructs (s///, etc.) the supported
      regex syntax has to be either POSIX or PCRE. Which one is used
      is decided under configure/build time via Autoconf and can be
      overridden with --with-regex-api=posix or --with-regex-api=pcre.
      The libraries are either found in system locations or in locations
      specified with --with-regex-prefix=DIR (or alternatively with more
      granular --with-regex-inc=DIR and --with-regex-lib=DIR) autoconf
      options.
  
    o Care should be taken so that the following things can be achieved
      later without having to fiddle around too much with the code:
      - adding support for Unicode through UTF-8 (means: no assumption
        that a character is represented by exactly one byte), so iterations
        over buffers should be done through iteration macros (e.g.
        ADVANCE(cp,n)).
      - adding support for easy addition of more value manipulation functions,
        i.e. the XXX part of ${var:XXX}. This means the manipulation
        functions should be coded self-contained and mostly independent of
        other code and their linkage into the code should be minimal.
  
    o The code should be carefully and fully documented. Additionally the
      manpage should contain complete description of the whole API plus
      examples which show most of the important or typical use cases plus
      a complete EBNF grammar which describes the supported syntax.
  
    o The implementation should explicitly allow and support the nesting
      of constructs, i.e., (foo=1, bar=2, quux=3, foo2quux=abcdef)
      ${foo${bar}quux} has to expand to "abcdef". Additionally
      the implementation should explicitly allow and support
      the susequent application of manipulation functions. i.e.
      ${foo2quux:s/cd/xy/:o2,4} has to expand to "bxye".
  
  - Timeline:
  
    15-Oct-2001 start of implementation by P.S.
    05-Nov-2001 end of implementation by P.S. & availability for review by C&W
    12-Nov-2001 final acceptance by C&W
  

From ossp-cvs-owner@ossp.org  Mon Nov 12 13:54:11 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fACCsAl15240; Mon, 12 Nov 2001 13:54:10 +0100 (CET)
Date: Mon, 12 Nov 2001 13:54:10 +0100 (CET)
Message-Id: <200111121254.fACCsAl15240@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp README version.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   12-Nov-2001 13:54:10
  Branch: HEAD                             Handle: 2001111212540900

  Modified files:
    ossp-pkg/lmtp2nntp      README version.c

  Log:
    bump version for release

  Summary:
    Revision    Changes     Path
    1.12        +1  -1      ossp-pkg/lmtp2nntp/README
    1.14        +9  -9      ossp-pkg/lmtp2nntp/version.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/README
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 README
  --- ossp-pkg/lmtp2nntp/README	2001/11/08 13:34:45	1.11
  +++ ossp-pkg/lmtp2nntp/README	2001/11/12 12:54:09	1.12
  @@ -7,7 +7,7 @@
                     |_|                        |_|    
   
     OSSP lmtp2nntp - Mail to News Gateway
  -  Version 1.1b4 (08-Nov-2001)
  +  Version 1.1.0 (12-Nov-2001)
   
     ABSTRACT
   
  Index: ossp-pkg/lmtp2nntp/version.c
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 version.c
  --- ossp-pkg/lmtp2nntp/version.c	2001/11/08 13:34:45	1.13
  +++ ossp-pkg/lmtp2nntp/version.c	2001/11/12 12:54:09	1.14
  @@ -8,7 +8,7 @@
   #ifndef _VERSION_C_
   #define _VERSION_C_
   
  -#define LMTP2NNTP_VERSION 0x101104
  +#define LMTP2NNTP_VERSION 0x101200
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _VERSION_C_AS_HEADER_
   
   lmtp2nntp_version_t lmtp2nntp_version = {
  -    0x101104,
  -    "1.1b4",
  -    "1.1b4 (08-Nov-2001)",
  -    "This is lmtp2nntp, Version 1.1b4 (08-Nov-2001)",
  -    "lmtp2nntp 1.1b4 (08-Nov-2001)",
  -    "lmtp2nntp/1.1b4",
  -    "@(#)lmtp2nntp 1.1b4 (08-Nov-2001)",
  -    "$Id: lmtp2nntp 1.1b4 (08-Nov-2001) $"
  +    0x101200,
  +    "1.1.0",
  +    "1.1.0 (12-Nov-2001)",
  +    "This is lmtp2nntp, Version 1.1.0 (12-Nov-2001)",
  +    "lmtp2nntp 1.1.0 (12-Nov-2001)",
  +    "lmtp2nntp/1.1.0",
  +    "@(#)lmtp2nntp 1.1.0 (12-Nov-2001)",
  +    "$Id: lmtp2nntp 1.1.0 (12-Nov-2001) $"
   };
   
   #endif /* _VERSION_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Mon Nov 12 21:18:02 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fACKI1S85190; Mon, 12 Nov 2001 21:18:01 +0100 (CET)
Date: Mon, 12 Nov 2001 21:18:01 +0100 (CET)
Message-Id: <200111122018.fACKI1S85190@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_spec_ebnf
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   12-Nov-2001 21:18:01
  Branch: HEAD                             Handle: 2001111220180100

  Added files:
    ossp-pkg/l2             l2_spec_ebnf

  Log:
    Condensed and clarified EBNF grammar description of the L2 language.

  Summary:
    Revision    Changes     Path
    1.1         +39 -0      ossp-pkg/l2/l2_spec_ebnf
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_spec_ebnf
  ============================================================
  $ cvs update -p -r1.1 l2_spec_ebnf
  tree : stream                                              /* channel tree */
      ;
  
  stream : channel                                     /* stream of channels */
      | channel T_OP_ARROW stream
      | channel T_OP_ARROW '{' streams '}'
      ;
  
  streams : stream                                /* list of sibling streams */
      | stream ';' streams
      ;
  
  channel : channel_level '/' channel_level ':' channel_cons      /* channel */
      | channel_level ':' channel_cons
      | channel_cons
      ;
  
  channel_level : T_ID                                      /* channel level */
      | '(' channel_level_mask ')'
      ;
  
  channel_level_mask : T_ID                            /* channel level mask */
      | T_ID '|' channel_level_mask
      ;
  
  channel_cons : T_ID                                 /* channel constructor */
      ;
  
  channel_params : /* empty */                         /* channel parameters */
      | '(' channel_param_list ')'
      ;
  
  channel_param_list : /* empty */                 /* channel parameter list */
      | channel_param
      | channel_param ',' channel_param_list
      ;
  
  channel_param  : T_ID '='                             /* channel parameter */
      ;

From ossp-cvs-owner@ossp.org  Tue Nov 13 13:08:35 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fADC8X605365; Tue, 13 Nov 2001 13:08:33 +0100 (CET)
Date: Tue, 13 Nov 2001 13:08:33 +0100 (CET)
Message-Id: <200111131208.fADC8X605365@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var Makefile Odinfile command.c cut-out-offset.c ...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   13-Nov-2001 13:08:33
  Branch: HEAD                             Handle: 197001010100001005649710

  Added files:
    ossp-pkg/var            var.c var.h var_test.c
  Modified files:
    ossp-pkg/var            Makefile
  Removed files:
    ossp-pkg/var            Odinfile command.c cut-out-offset.c
                            expand-character-class.c expand-named-characters.c
                            expand.c expression.c input.c internal.h padding.c
                            search-and-replace.c text.c tokenbuf.c transpose.c
                            varexp.h variable.c
    ossp-pkg/var/regression-tests
                            .run-tests Makefile Odinfile
                            empty-search-pattern.c expand-character-class.c
                            expand-named-characters.c expand1.c expand2.c
                            expand3.c expand4.c expand5.c expand6.c
                            force-expand.c offset-failure.c

  Log:
    - Moved all routines into a single source file var.c.
    - Renamed varexp.h to var.h.
    - Removed odin-based build system.
    - Moved test cases into var_test.c.
    - Adapted build system.

  Summary:
    Revision    Changes     Path
    1.2         +5  -23     ossp-pkg/var/Makefile
    NONE        +0  -23     ossp-pkg/var/Odinfile
    NONE        +0  -385    ossp-pkg/var/command.c
    NONE        +0  -58     ossp-pkg/var/cut-out-offset.c
    NONE        +0  -48     ossp-pkg/var/expand-character-class.c
    NONE        +0  -177    ossp-pkg/var/expand-named-characters.c
    NONE        +0  -60     ossp-pkg/var/expand.c
    NONE        +0  -163    ossp-pkg/var/expression.c
    NONE        +0  -54     ossp-pkg/var/input.c
    NONE        +0  -86     ossp-pkg/var/internal.h
    NONE        +0  -139    ossp-pkg/var/padding.c
    NONE        +0  -44     ossp-pkg/var/regression-tests/.run-tests
    NONE        +0  -44     ossp-pkg/var/regression-tests/Makefile
    NONE        +0  -81     ossp-pkg/var/regression-tests/Odinfile
    NONE        +0  -48     ossp-pkg/var/regression-tests/empty-search-pattern.c
    NONE        +0  -56     ossp-pkg/var/regression-tests/expand-character-class.c
    NONE        +0  -49     ossp-pkg/var/regression-tests/expand-named-characters.c
    NONE        +0  -45     ossp-pkg/var/regression-tests/expand1.c
    NONE        +0  -56     ossp-pkg/var/regression-tests/expand2.c
    NONE        +0  -81     ossp-pkg/var/regression-tests/expand3.c
    NONE        +0  -81     ossp-pkg/var/regression-tests/expand4.c
    NONE        +0  -85     ossp-pkg/var/regression-tests/expand5.c
    NONE        +0  -121    ossp-pkg/var/regression-tests/expand6.c
    NONE        +0  -65     ossp-pkg/var/regression-tests/force-expand.c
    NONE        +0  -68     ossp-pkg/var/regression-tests/offset-failure.c
    NONE        +0  -158    ossp-pkg/var/search-and-replace.c
    NONE        +0  -173    ossp-pkg/var/text.c
    NONE        +0  -115    ossp-pkg/var/tokenbuf.c
    NONE        +0  -97     ossp-pkg/var/transpose.c
    1.1         +1708 -0    ossp-pkg/var/var.c
    1.1         +127 -0     ossp-pkg/var/var.h
    1.1         +124 -0     ossp-pkg/var/var_test.c
    NONE        +0  -127    ossp-pkg/var/varexp.h
    NONE        +0  -63     ossp-pkg/var/variable.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/Makefile
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 Makefile
  --- ossp-pkg/var/Makefile	2001/11/09 17:01:37	1.1.1.1
  +++ ossp-pkg/var/Makefile	2001/11/13 12:08:30	1.2
  @@ -11,9 +11,7 @@
   CFLAGS		=
   LDFLAGS		=
   
  -OBJS		= expand-named-characters.o expand-character-class.o command.o \
  -		  expression.o variable.o text.o expand.o input.o tokenbuf.o   \
  -		  search-and-replace.o cut-out-offset.o transpose.o padding.o
  +OBJS		= var.o
   
   .c.o:
   	$(CC) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CFLAGS) -c $<
  @@ -25,26 +23,10 @@
   	$(AR) cr $@ $(OBJS)
   	$(RANLIB) $@
   
  -clean::
  -	@(cd regression-tests && $(MAKE) clean)
  -	rm -f $(OBJS)
  -	rm -f libvarexp.a
  +var_test:	var_test.o libvarexp.a
  +	$(CC) $(LDFLAGS) -o $@ var_test.o libvarexp.a
   
  -check::
  -	(cd regression-tests && $(MAKE) check)
  +clean::
  +	rm -f $(OBJS) libvarexp.a var_test
   
   # Dependencies
  -
  -command.o: internal.h varexp.h
  -cut-out-offset.o: internal.h varexp.h
  -expand-character-class.o: internal.h varexp.h
  -expand-named-characters.o: internal.h varexp.h
  -expand.o: internal.h varexp.h
  -expression.o: internal.h varexp.h
  -input.o: internal.h varexp.h
  -padding.o: internal.h varexp.h
  -search-and-replace.o: internal.h varexp.h
  -text.o: internal.h varexp.h
  -tokenbuf.o: internal.h varexp.h
  -transpose.o: internal.h varexp.h
  -variable.o: internal.h varexp.h
                                                          Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs update -p -r1.1 var.c
  /*
  **  VAR - OSSP variable expression library.
  **  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP VAR, an extensible data serialization
  **  library which can be found at http://www.ossp.org/pkg/var/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  var.h: VAR library API
  */
  
  #include <assert.h>
  #include <ctype.h>
  #include <string.h>
  #include <stdio.h>
  #include <errno.h>
  #include <sys/types.h>
  #include <regex.h>
  #include "var.h"
  
  /* The default configuration for the parser. */
  
  const var_config_t var_config_default =
      {
      '$',                        /* varinit */
      '{',                        /* startdelim */
      '}',                        /* enddelim */
      '\\',                       /* escape */
      "a-zA-Z0-9_"                /* namechars */
      };
  
  /* Routines for manipulation of tokenbufs. */
  
  #define VAR_INITIAL_BUFFER_SIZE 64
  
  typedef struct
      {
      const char*  begin;
      const char*  end;
      size_t buffer_size;
      }
  tokenbuf;
  
  static void init_tokenbuf(tokenbuf* buf)
      {
      buf->begin = buf->end = NULL;
      buf->buffer_size = 0;
      }
  
  static void move_tokenbuf(tokenbuf* src, tokenbuf* dst)
      {
      dst->begin = src->begin;
      dst->end = src->end;
      dst->buffer_size = src->buffer_size;
      init_tokenbuf(src);
      }
  
  static int assign_to_tokenbuf(tokenbuf* buf, const char* data, size_t len)
      {
      char* p = malloc(len+1);
      if (p)
          {
          memcpy(p, data, len);
          buf->begin       = p;
          buf->end         = p + len;
          buf->buffer_size = len + 1;
          *((char*)(buf->end)) = '\0';
          return 1;
          }
      else
          return 0;
      }
  
  static int append_to_tokenbuf(tokenbuf* output, const char* data, size_t len)
      {
      char*  new_buffer;
      size_t new_size;
  
      /* Is the tokenbuffer initialized at all? If not, allocate a
         standard-sized buffer to begin with. */
  
      if (output->begin == NULL)
          {
          if ((output->begin = output->end = malloc(VAR_INITIAL_BUFFER_SIZE)) == NULL)
              return 0;
          else
              output->buffer_size = VAR_INITIAL_BUFFER_SIZE;
          }
  
      /* Does the token contain text, but no buffer has been allocated
         yet? */
  
      if (output->buffer_size == 0)
          {
          /* Check whether data borders to output. If, we can append
             simly by increasing the end pointer. */
  
          if (output->end == data)
              {
              output->end += len;
              return 1;
              }
  
          /* OK, so copy the contents of output into an allocated buffer
             so that we can append that way. */
  
          else
              {
              char* tmp = malloc(output->end - output->begin + len + 1);
              if (!tmp)
                  return 0;
              memcpy(tmp, output->begin, output->end - output->begin);
              output->buffer_size = output->end - output->begin;
              output->begin = tmp;
              output->end   = tmp + output->buffer_size;
              output->buffer_size += len + 1;
              }
          }
  
      /* Does the token fit into the current buffer? If not, realloc a
         larger buffer that fits. */
  
      if ((output->buffer_size - (output->end - output->begin)) <= len)
          {
          new_size = output->buffer_size;
          do
              {
              new_size *= 2;
              }
          while ((new_size - (output->end - output->begin)) <= len);
          new_buffer = realloc((char*)output->begin, new_size);
          if (new_buffer == NULL)
              return 0;
          output->end = new_buffer + (output->end - output->begin);
          output->begin = new_buffer;
          output->buffer_size = new_size;
          }
  
      /* Append the data at the end of the current buffer. */
  
      memcpy((char*)output->end, data, len);
      output->end += len;
      *((char*)output->end) = '\0';
      return 1;
      }
  
  static void free_tokenbuf(tokenbuf* buf)
      {
      if (buf->begin != NULL && buf->buffer_size > 0)
          free((char*)buf->begin);
      buf->begin = buf->end = NULL;
      buf->buffer_size = 0;
      }
  
  static size_t tokenbuf2int(tokenbuf* number)
      {
      const char* p;
      size_t num = 0;
      for (p = number->begin; p != number->end; ++p)
          {
          num *= 10;
          num += *p - '0';
          }
      return num;
      }
  
  /* Routines for the expansion of quoted-pair expressions. */
  
  static void expand_range(char a, char b, char class[256])
      {
      assert(a <= b);
      assert(class != NULL);
  
      do
          {
          class[(int)a] = 1;
          }
      while (++a <= b);
      }
  
  static var_rc_t expand_character_class(const char* desc, char class[256])
      {
      size_t i;
  
      assert(desc != NULL);
      assert(class != NULL);
  
      /* Clear the class array. */
  
      for (i = 0; i < 256; ++i)
          class[i] = 0;
  
      /* Walk through the class description and set the appropriate
         entries in the array. */
  
      while(*desc != '\0')
          {
          if (desc[1] == '-' && desc[2] != '\0')
              {
              if (desc[0] > desc[2])
                  return VAR_INCORRECT_CLASS_SPEC;
              expand_range(desc[0], desc[2], class);
              desc += 3;
              }
          else
              {
              class[(int)*desc] = 1;
              ++desc;
              }
          }
  
      return VAR_OK;
      }
  
  static int isoct(char c)
      {
      if (c >= '0' && c <= '7')
          return 1;
      else
          return 0;
      }
  
  static var_rc_t expand_octal(const char** src, char** dst, const char* end)
      {
      unsigned char c;
  
      if (end - *src < 3)
          return VAR_INCOMPLETE_OCTAL;
      if (!isoct(**src) || !isoct((*src)[1]) || !isoct((*src)[2]))
          return VAR_INVALID_OCTAL;
  
      c = **src - '0';
      if (c > 3)
          return VAR_OCTAL_TOO_LARGE;
      c *= 8;
      ++(*src);
  
      c += **src - '0';
      c *= 8;
      ++(*src);
  
      c += **src - '0';
  
      **dst = (char)c;
      ++(*dst);
      return VAR_OK;
      }
  
  static int ishex(char c)
      {
      if ((c >= '0' && c <= '9') ||
          (c >= 'a' && c <= 'f') ||
          (c >= 'A' && c <= 'F'))
          return 1;
      else
          return 0;
      }
  
  static var_rc_t expand_simple_hex(const char** src, char** dst, const char* end)
      {
      unsigned char c = 0;
  
      if (end - *src < 2)
          return VAR_INCOMPLETE_HEX;
      if (!ishex(**src) || !ishex((*src)[1]))
          return VAR_INVALID_HEX;
  
      if (**src >= '0' && **src <= '9')
          c = **src - '0';
      else if (c >= 'a' && c <= 'f')
          c = **src - 'a' + 10;
      else if (c >= 'A' && c <= 'F')
          c = **src - 'A' + 10;
  
      c = c << 4;
      ++(*src);
  
      if (**src >= '0' && **src <= '9')
          c += **src - '0';
      else if (**src >= 'a' && **src <= 'f')
          c += **src - 'a' + 10;
      else if (**src >= 'A' && **src <= 'F')
          c += **src - 'A' + 10;
  
      **dst = (char)c;
      ++(*dst);
      return VAR_OK;
      }
  
  static var_rc_t expand_grouped_hex(const char** src, char** dst, const char* end)
      {
      var_rc_t rc;
  
      while (*src < end && **src != '}')
          {
          if ((rc = expand_simple_hex(src, dst, end)) != 0)
              return rc;
          ++(*src);
          }
      if (*src == end)
          return VAR_INCOMPLETE_GROUPED_HEX;
  
      return VAR_OK;
      }
  
  static var_rc_t expand_hex(const char** src, char** dst, const char* end)
      {
      if (*src == end)
          return VAR_INCOMPLETE_HEX;
      if (**src == '{')
          {
          ++(*src);
          return expand_grouped_hex(src, dst, end);
          }
      else
          return expand_simple_hex(src, dst, end);
      }
  
  var_rc_t expand_named_characters(const char* src, size_t len, char* dst)
      {
      const char* end = src + len;
      var_rc_t rc;
  
      assert(src != NULL);
      assert(dst != NULL);
  
      while (src < end)
          {
          if (*src == '\\')
              {
              if (++src == end)
                  return VAR_INCOMPLETE_NAMED_CHARACTER;
              switch (*src)
                  {
                  case 'n':
                      *dst++ = '\n';
                      break;
                  case 't':
                      *dst++ = '\t';
                      break;
                  case 'r':
                      *dst++ = '\r';
                      break;
                  case 'x':
                      ++src;
                      if ((rc = expand_hex(&src, &dst, end)) != 0)
                          return rc;
                      break;
                  case '0':
                  case '1':
                  case '2':
                  case '3':
                  case '4':
                  case '5':
                  case '6':
                  case '7':
                  case '8':
                  case '9':
                      if ((rc = expand_octal(&src, &dst, end)) != 0)
                          return rc;
                      break;
                  default:
                      *dst++ = *src;
                  }
              ++src;
              }
          else
              *dst++ = *src++;
          }
      *dst = '\0';
      return VAR_OK;
      }
  
  /* The recursive-descent parser for variable expressions. */
  
  static int variable(const char*, const char*, const var_config_t*,
                      const char[256], var_cb_t, void*, int, tokenbuf*);
  static int command(const char*, const char*, const var_config_t*,
                     const char[256], var_cb_t, void*, int, tokenbuf*);
  
  static int text(const char* begin, const char* end, char varinit, char escape)
      {
      const char* p;
      for (p = begin; p != end && *p != varinit; ++p)
          {
          if (*p == escape)
              {
              if (p+1 == end)
                  return VAR_INCOMPLETE_QUOTED_PAIR;
              else
                  ++p;
              }
          }
      return p - begin;
      }
  
  static int varname(const char* begin, const char* end, const char nameclass[256])
      {
      const char* p;
      for (p = begin; p != end && nameclass[(int)*p]; ++p)
          ;
      return p - begin;
      }
  
  static int number(const char* begin, const char* end)
      {
      const char* p;
      for (p = begin; p != end && isdigit(*p); ++p)
          ;
      return p - begin;
      }
  
  static int substext(const char* begin, const char* end, const var_config_t* config)
      {
      const char* p;
      for (p = begin; p != end && *p != config->varinit && *p != '/'; ++p)
          {
          if (*p == config->escape)
              {
              if (p+1 == end)
                  return VAR_INCOMPLETE_QUOTED_PAIR;
              else
                  ++p;
              }
          }
      return p - begin;
      }
  
  static int exptext(const char* begin, const char* end, const var_config_t* config)
      {
      const char* p;
      for (p = begin; p != end && *p != config->varinit && *p != config->enddelim && *p != ':'; ++p)
          {
          if (*p == config->escape)
              {
              if (p+1 == end)
                  return VAR_INCOMPLETE_QUOTED_PAIR;
              else
                  ++p;
              }
          }
      return p - begin;
      }
  
  
  static int expression(const char* begin, const char* end, const var_config_t* config,
                        const char nameclass[256], var_cb_t lookup, void* lookup_context,
                        int force_expand, tokenbuf* result)
      {
      const char* p = begin;
      const char* data;
      size_t len, buffer_size;
      int failed = 0;
      int rc;
      tokenbuf name;
      tokenbuf tmp;
  
      /* Clear the tokenbufs to make sure we have a defined state. */
  
      init_tokenbuf(&name);
      init_tokenbuf(&tmp);
      init_tokenbuf(result);
  
      /* Expect STARTDELIM. */
  
      if (p == end || *p != config->startdelim)
          return 0;
  
      if (++p == end)
          return VAR_INCOMPLETE_VARIABLE_SPEC;
  
      /* Get the name of the variable to expand. The name may consist of
         an arbitrary number of VARNAMEs and VARIABLEs. */
  
      do
          {
          rc = varname(p, end, nameclass);
          if (rc < 0)
              goto error_return;
          else if (rc > 0)
              {
              if (!append_to_tokenbuf(&name, p, rc))
                  {
                  rc = VAR_OUT_OF_MEMORY;
                  goto error_return;
                  }
              else
                  p += rc;
              }
  
          rc = variable(p, end, config, nameclass, lookup, lookup_context, force_expand, &tmp);
          if (rc < 0)
              goto error_return;
          else if (rc > 0)
              {
              if (!append_to_tokenbuf(&name, tmp.begin, tmp.end - tmp.begin))
                  {
                  rc = VAR_OUT_OF_MEMORY;
                  goto error_return;
                  }
              else
                  p += rc;
              }
          }
      while (rc > 0);
  
      /* We must have the complete variable name now, so make sure we
         do. */
  
      if (name.begin == name.end)
          {
          rc = VAR_INCOMPLETE_VARIABLE_SPEC;
          goto error_return;
          }
  
      /* Now we have the name of the variable stored in "name". We
         expect an ENDDELIM here. */
  
      if (p == end || (*p != config->enddelim && *p != ':'))
          {
          rc = VAR_INCOMPLETE_VARIABLE_SPEC;
          goto error_return;
          }
      else
          ++p;
  
      /* Use the lookup callback to get the variable's contents. */
  
      rc = (*lookup)(lookup_context, name.begin, name.end - name.begin, &data, &len, &buffer_size);
      if (rc < 0)
          goto error_return;
      else if (rc == 0)
          {
          /* The variable is undefined. What we'll do now depends on the
             force_expand flag. */
  
          if (force_expand)
              {
              rc = VAR_UNDEFINED_VARIABLE;
              goto error_return;
              }
          else
              {
              /* Initialize result to point back to the original text in
                 the buffer. */
  
              result->begin       = begin-1;
              result->end         = p;
              result->buffer_size = 0;
              failed              = 1;
              }
          }
      else
          {
          /* The preliminary result is the contents of the variable.
             This may be modified by the commands that may follow. */
  
          result->begin       = data;
          result->end         = data + len;
          result->buffer_size = buffer_size;
          }
  
      if (p[-1] == ':')
          {
          /* Parse and execute commands. */
  
          free_tokenbuf(&tmp);
          --p;
          while (p != end && *p == ':')
              {
              ++p;
              if (!failed)
                  rc = command(p, end, config, nameclass, lookup, lookup_context, force_expand, result);
              else
                  rc = command(p, end, config, nameclass, lookup, lookup_context, force_expand, &tmp);
              if (rc < 0)
                  goto error_return;
              p += rc;
              if (failed)
                  result->end += rc;
              }
  
          if (p == end || *p != config->enddelim)
              {
              rc = VAR_INCOMPLETE_VARIABLE_SPEC;
              goto error_return;
              }
          ++p;
          if (failed)
              ++result->end;
          }
  
      /* Exit gracefully. */
  
      free_tokenbuf(&name);
      free_tokenbuf(&tmp);
      return p - begin;
  
      /* Exit in case of an error. */
  
    error_return:
      free_tokenbuf(&name);
      free_tokenbuf(&tmp);
      free_tokenbuf(result);
      return rc;
      }
  
  static int variable(const char* begin, const char* end, const var_config_t* config,
                      const char nameclass[256], var_cb_t lookup, void* lookup_context,
                      int force_expand, tokenbuf* result)
      {
      const char* p = begin;
      const char* data;
      size_t len, buffer_size;
      int rc, rc2;
  
      /* Clear the result tokenbuf to make sure we're in a defined
         state. */
  
      init_tokenbuf(result);
  
      /* Expect VARINIT. */
  
      if (p == end || *p != config->varinit)
          return 0;
  
      if (++p == end)
          return VAR_INCOMPLETE_VARIABLE_SPEC;
  
      /* Try to read the variable name. If that fails, we're parsing a
         complex expression. */
  
      rc = varname(p, end, nameclass);
      if (rc < 0)
          return rc;
      else if (rc > 0)
          {
          rc2 = (*lookup)(lookup_context, p, rc, &data, &len, &buffer_size);
          if (rc2 < 0)
              return rc2;
          else if (rc2 == 0)
              {
              if (force_expand)
                  return VAR_UNDEFINED_VARIABLE;
              else
                  {
                  result->begin       = begin;
                  result->end         = begin + 1 + rc;
                  result->buffer_size = 0;
                  return 1 + rc;
                  }
              }
          else
              {
              result->begin       = data;
              result->end         = data + len;
              result->buffer_size = buffer_size;
              return 1 + rc;
              }
          }
  
      /* OK, we're dealing with a complex expression here. */
  
      rc = expression(p, end, config, nameclass, lookup, lookup_context, force_expand, result);
      if (rc > 0)
          ++rc;
      return rc;
      }
  
  static int exptext_or_variable(const char* begin, const char* end, const var_config_t* config,
                          const char nameclass[256], var_cb_t lookup, void* lookup_context,
                          int force_expand, tokenbuf* result)
      {
      const char* p = begin;
      tokenbuf tmp;
      int rc;
  
      init_tokenbuf(result);
      init_tokenbuf(&tmp);
  
      if (begin == end)
          return 0;
  
      do
          {
          rc = exptext(p, end, config);
          if (rc < 0)
              goto error_return;
          else if (rc > 0)
              {
              if (!append_to_tokenbuf(result, p, rc))
                  {
                  rc = VAR_OUT_OF_MEMORY;
                  goto error_return;
                  }
              else
                  p += rc;
              }
  
          rc = variable(p, end, config, nameclass, lookup, lookup_context, force_expand, &tmp);
          if (rc < 0)
              goto error_return;
          else if (rc > 0)
              {
              p += rc;
              if (!append_to_tokenbuf(result, tmp.begin, tmp.end - tmp.begin))
                  {
                  rc = VAR_OUT_OF_MEMORY;
                  goto error_return;
                  }
              }
          }
      while (rc > 0);
  
      free_tokenbuf(&tmp);
      return p - begin;
  
    error_return:
      free_tokenbuf(&tmp);
      free_tokenbuf(result);
      return rc;
      }
  
  static int substext_or_variable(const char* begin, const char* end, const var_config_t* config,
                                  const char nameclass[256], var_cb_t lookup, void* lookup_context,
                                  int force_expand, tokenbuf* result)
      {
      const char* p = begin;
      tokenbuf tmp;
      int rc;
  
      init_tokenbuf(result);
      init_tokenbuf(&tmp);
  
      if (begin == end)
          return 0;
  
      do
          {
          rc = substext(p, end, config);
          if (rc < 0)
              goto error_return;
          else if (rc > 0)
              {
              if (!append_to_tokenbuf(result, p, rc))
                  {
                  rc = VAR_OUT_OF_MEMORY;
                  goto error_return;
                  }
              else
                  p += rc;
              }
  
          rc = variable(p, end, config, nameclass, lookup, lookup_context, force_expand, &tmp);
          if (rc < 0)
              goto error_return;
          else if (rc > 0)
              {
              p += rc;
              if (!append_to_tokenbuf(result, tmp.begin, tmp.end - tmp.begin))
                  {
                  rc = VAR_OUT_OF_MEMORY;
                  goto error_return;
                  }
              }
          }
      while (rc > 0);
  
      free_tokenbuf(&tmp);
      return p - begin;
  
    error_return:
      free_tokenbuf(&tmp);
      free_tokenbuf(result);
      return rc;
      }
  
  
  static int expand_class_description(tokenbuf* src, tokenbuf* dst)
      {
      unsigned char c, d;
      const char* p = src->begin;
      while(p != src->end)
          {
          if ((src->end - p) >= 3 && p[1] == '-')
              {
              printf("Expand class.\n");
              if (*p > p[2])
                  return VAR_INCORRECT_TRANSPOSE_CLASS_SPEC;
              for (c = *p, d = p[2]; c <= d; ++c)
                  {
                  if (!append_to_tokenbuf(dst, (char*)&c, 1))
                      return VAR_OUT_OF_MEMORY;
                  }
              p += 3;
              }
          else
              {
              printf("Copy verbatim.\n");
              if (!append_to_tokenbuf(dst, p, 1))
                  return VAR_OUT_OF_MEMORY;
              else
                  ++p;
              }
          }
      return VAR_OK;
      }
  
  static int transpose(tokenbuf* data, tokenbuf* search, tokenbuf* replace)
      {
      tokenbuf srcclass, dstclass;
      const char* p;
      int rc;
      size_t i;
  
      init_tokenbuf(&srcclass);
      init_tokenbuf(&dstclass);
  
      if ((rc = expand_class_description(search, &srcclass)) != VAR_OK)
          goto error_return;
      if ((rc = expand_class_description(replace, &dstclass)) != VAR_OK)
          goto error_return;
  
      printf("Transpose from '%s' to '%s'.\n",
             srcclass.begin, dstclass.begin);
  
      if (srcclass.begin == srcclass.end)
          {
          rc = VAR_EMPTY_TRANSPOSE_CLASS;
          goto error_return;
          }
      if ((srcclass.end - srcclass.begin) != (dstclass.end - dstclass.begin))
          {
          rc = VAR_TRANSPOSE_CLASSES_MISMATCH;
          goto error_return;
          }
  
      if (data->buffer_size == 0)
          {
          tokenbuf tmp;
          if (!assign_to_tokenbuf(&tmp, data->begin, data->end - data->begin))
              {
              rc = VAR_OUT_OF_MEMORY;
              goto error_return;
              }
          move_tokenbuf(&tmp, data);
          }
  
      for (p = data->begin; p != data->end; ++p)
          {
          for (i = 0; i <= (srcclass.end - srcclass.begin); ++i)
              {
              if (*p == srcclass.begin[i])
                  {
                  *((char*)p) = dstclass.begin[i];
                  break;
                  }
              }
          }
  
      free_tokenbuf(&srcclass);
      free_tokenbuf(&dstclass);
      return VAR_OK;
  
    error_return:
      free_tokenbuf(search);
      free_tokenbuf(replace);
      free_tokenbuf(&srcclass);
      free_tokenbuf(&dstclass);
      return rc;
      }
  
  static int cut_out_offset(tokenbuf* data, tokenbuf* number1, tokenbuf* number2, int isrange)
      {
      tokenbuf res;
      const char* p;
      size_t num1 = tokenbuf2int(number1);
      size_t num2 = tokenbuf2int(number2);
  
      /* Determine begin of result string. */
  
      if ((data->end - data->begin) < num1)
          return VAR_OFFSET_OUT_OF_BOUNDS;
      else
          p = data->begin + num1;
  
      /* If num2 is zero, we copy the rest from there. */
  
      if (num2 == 0)
          {
          if (!assign_to_tokenbuf(&res, p, data->end - p))
              return VAR_OUT_OF_MEMORY;
          }
      else                        /* OK, then use num2. */
          {
          if (isrange)
              {
              if ((p + num2) > data->end)
                  return VAR_RANGE_OUT_OF_BOUNDS;
              if (!assign_to_tokenbuf(&res, p, num2))
                  return VAR_OUT_OF_MEMORY;
              }
          else
              {
              if (num2 < num1)
                  return VAR_OFFSET_LOGIC_ERROR;
              if ((data->begin + num2) > data->end)
                  return VAR_RANGE_OUT_OF_BOUNDS;
              if (!assign_to_tokenbuf(&res, p, (data->begin + num2) - p))
                  return VAR_OUT_OF_MEMORY;
              }
          }
      free_tokenbuf(data);
      move_tokenbuf(&res, data);
      return VAR_OK;
      }
  
  static int search_and_replace(tokenbuf* data, tokenbuf* search, tokenbuf* replace, tokenbuf* flags)
      {
      const char* p;
      int case_insensitive = 0;
      int global = 0;
      int no_regex = 0;
      int rc;
  
      if (search->begin == search->end)
          return VAR_EMPTY_SEARCH_STRING;
  
      printf("Search '%s' in '%s' and replace it with '%s'.\n",
             search->begin, data->begin, replace->begin);
  
      for (p = flags->begin; p != flags->end; ++p)
          {
          switch (tolower(*p))
              {
              case 'i':
                  case_insensitive = 1;
                  printf("case_insensitive = 1;\n");
                  break;
              case 'g':
                  global = 1;
                  printf("global = 1;\n");
                  break;
              case 't':
                  no_regex = 1;
                  printf("no_regex = 1;\n");
                  break;
              default:
                  return VAR_UNKNOWN_REPLACE_FLAG;
              }
          }
  
      if (no_regex)
          {
          tokenbuf tmp;
          init_tokenbuf(&tmp);
  
          for (p = data->begin; p != data->end; )
              {
              if (case_insensitive)
                  rc = strncasecmp(p, search->begin, search->end - search->begin);
              else
                  rc = strncmp(p, search->begin, search->end - search->begin);
              if (rc != 0)
                  {               /* no match, copy character */
                  if (!append_to_tokenbuf(&tmp, p, 1))
                      {
                      free_tokenbuf(&tmp);
                      return VAR_OUT_OF_MEMORY;
                      }
                  ++p;
                  }
              else
                  {
                  append_to_tokenbuf(&tmp, replace->begin, replace->end - replace->begin);
                  p += search->end - search->begin;
                  if (!global)
                      {
                      if (!append_to_tokenbuf(&tmp, p, data->end - p))
                          {
                          free_tokenbuf(&tmp);
                          return VAR_OUT_OF_MEMORY;
                          }
                      break;
                      }
                  }
              }
  
          free_tokenbuf(data);
          move_tokenbuf(&tmp, data);
          }
      else
          {
          tokenbuf tmp;
          tokenbuf mydata;
          regex_t preg;
          regmatch_t pmatch[33];
          int regexec_flag;
  
          /* Copy the pattern and the data to our own buffer to make
             sure they're terminated with a null byte. */
  
          if (!assign_to_tokenbuf(&tmp, search->begin, search->end - search->begin))
              return VAR_OUT_OF_MEMORY;
          if (!assign_to_tokenbuf(&mydata, data->begin, data->end - data->begin))
              {
              free_tokenbuf(&tmp);
              return VAR_OUT_OF_MEMORY;
              }
  
          /* Compile the pattern. */
  
          printf("data is.................: '%s'\n", mydata.begin);
          printf("regex search pattern is.: '%s'\n", tmp.begin);
          printf("regex replace pattern is: '%s'\n", replace->begin);
          rc = regcomp(&preg, tmp.begin, REG_EXTENDED | ((case_insensitive) ? REG_ICASE : 0));
          free_tokenbuf(&tmp);
          if (rc != 0)
              {
              free_tokenbuf(&mydata);
              return VAR_INVALID_REGEX_IN_REPLACE;
              }
          printf("Subexpression in pattern: '%d'\n", preg.re_nsub);
  
          /* Match the pattern and create the result string in the tmp
             buffer. */
  
          for (p = mydata.begin; p != mydata.end; )
              {
              if (p == mydata.begin || p[-1] == '\n')
                  regexec_flag = 0;
              else
                  regexec_flag = REG_NOTBOL;
              if (regexec(&preg, p, sizeof(pmatch) / sizeof(regmatch_t), pmatch, regexec_flag) == REG_NOMATCH)
                  {
                  printf("No match; appending remainder ('%s') to output string.\n", p);
                  append_to_tokenbuf(&tmp, p, mydata.end - p);
                  break;
                  }
              else
                  {
                  if (!append_to_tokenbuf(&tmp, p, pmatch[0].rm_so) ||
                      !append_to_tokenbuf(&tmp, replace->begin, replace->end - replace->begin))
                      {
                      regfree(&preg);
                      free_tokenbuf(&tmp);
                      free_tokenbuf(&mydata);
                      return VAR_OUT_OF_MEMORY;
                      }
                  else
                      p += pmatch[0].rm_eo;
                  if (!global)
                      {
                      append_to_tokenbuf(&tmp, p, mydata.end - p);
                      break;
                      }
                  }
              }
  
          regfree(&preg);
          free_tokenbuf(data);
          move_tokenbuf(&tmp, data);
          free_tokenbuf(&mydata);
          }
  
      return VAR_OK;
      }
  
  static int padding(tokenbuf* data, tokenbuf* widthstr, tokenbuf* fill, char position)
      {
      tokenbuf result;
      size_t width = tokenbuf2int(widthstr);
      int i;
  
      printf("Padding data '%s' to width '%d' by filling in '%s' to position '%c'.\n",
             data->begin, width, fill->begin, position);
  
      if (fill->begin == fill->end)
          return VAR_EMPTY_PADDING_FILL_STRING;
  
      init_tokenbuf(&result);
  
      if (position == 'l')
          {
          i = width - (data->end - data->begin);
          if (i > 0)
              {
              printf("Missing %d characters at the end of the data string.\n", i);
              i = i / (fill->end - fill->begin);
              printf("That's %d times the padding string.\n", i);
              while(i > 0)
                  {
                  if (!append_to_tokenbuf(data, fill->begin, fill->end - fill->begin))
                      return VAR_OUT_OF_MEMORY;
                  --i;
                  }
              i = (width - (data->end - data->begin)) % (fill->end - fill->begin);
              printf("Plus a remainder of %d characters.\n", i);
              if (!append_to_tokenbuf(data, fill->begin, i))
                  return VAR_OUT_OF_MEMORY;
              }
          }
      else if (position == 'r')
          {
          i = width - (data->end - data->begin);
          if (i > 0)
              {
              printf("Missing %d characters at the beginning of the data string.\n", i);
              i = i / (fill->end - fill->begin);
              printf("That's %d times the padding string.\n", i);
              while(i > 0)
                  {
                  if (!append_to_tokenbuf(&result, fill->begin, fill->end - fill->begin))
                      {
                      free_tokenbuf(&result);
                      return VAR_OUT_OF_MEMORY;
                      }
                  --i;
                  }
              i = (width - (data->end - data->begin)) % (fill->end - fill->begin);
              printf("Plus a remainder of %d characters.\n", i);
              if (!append_to_tokenbuf(&result, fill->begin, i))
                  {
                  free_tokenbuf(&result);
                  return VAR_OUT_OF_MEMORY;
                  }
              if (!append_to_tokenbuf(&result, data->begin, data->end - data->begin))
                  {
                  free_tokenbuf(&result);
                  return VAR_OUT_OF_MEMORY;
                  }
  
              free_tokenbuf(data);
              move_tokenbuf(&result, data);
              }
          }
       else if (position == 'c')
          {
          i = (width - (data->end - data->begin)) / 2;
          if (i > 0)
              {
              /* Create the prefix. */
  
              printf("Missing %d characters at the beginning of the data string.\n", i);
              i = i / (fill->end - fill->begin);
              printf("That's %d times the padding string.\n", i);
              while(i > 0)
                  {
                  if (!append_to_tokenbuf(&result, fill->begin, fill->end - fill->begin))
                      {
                      free_tokenbuf(&result);
                      return VAR_OUT_OF_MEMORY;
                      }
                  --i;
                  }
              i = ((width - (data->end - data->begin)) / 2) % (fill->end - fill->begin);
              printf("Plus a remainder of %d characters.\n", i);
              if (!append_to_tokenbuf(&result, fill->begin, i))
                  {
                  free_tokenbuf(&result);
                  return VAR_OUT_OF_MEMORY;
                  }
  
              /* Append the actual data string. */
  
              if (!append_to_tokenbuf(&result, data->begin, data->end - data->begin))
                  {
                  free_tokenbuf(&result);
                  return VAR_OUT_OF_MEMORY;
                  }
  
              /* Append the suffix. */
  
              i = width - (result.end - result.begin);
              printf("Missing %d characters at the end of the data string.\n", i);
              i = i / (fill->end - fill->begin);
              printf("That's %d times the padding string.\n", i);
              while(i > 0)
                  {
                  if (!append_to_tokenbuf(&result, fill->begin, fill->end - fill->begin))
                      {
                      free_tokenbuf(&result);
                      return VAR_OUT_OF_MEMORY;
                      }
                  --i;
                  }
              i = width - (result.end - result.begin);
              printf("Plus a remainder of %d characters.\n", i);
              if (!append_to_tokenbuf(&result, fill->begin, i))
                  {
                  free_tokenbuf(&result);
                  return VAR_OUT_OF_MEMORY;
                  }
  
              /* Move string from temporary buffer to data buffer. */
  
              free_tokenbuf(data);
              move_tokenbuf(&result, data);
              }
          }
  
      return VAR_OK;
      }
  
  static int command(const char* begin, const char* end, const var_config_t* config,
                     const char nameclass[256], var_cb_t lookup, void* lookup_context,
                     int force_expand, tokenbuf* data)
      {
      const char* p = begin;
      tokenbuf tmptokbuf;
      tokenbuf search, replace, flags;
      tokenbuf number1, number2;
      int isrange;
      int rc;
  
      init_tokenbuf(&tmptokbuf);
      init_tokenbuf(&search);
      init_tokenbuf(&replace);
      init_tokenbuf(&flags);
      init_tokenbuf(&number1);
      init_tokenbuf(&number2);
  
      if (begin == end)
          return 0;
  
      switch (tolower(*p))
          {
          case 'l':               /* Turn data to lowercase. */
              if (data->begin)
                  {
                  char* ptr;
                  /* If the buffer does not life in an allocated buffer,
                     we have to copy it before modifying the contents. */
  
                  if (data->buffer_size == 0)
                      {
                      if (!assign_to_tokenbuf(data, data->begin, data->end - data->begin))
                          {
                          rc = VAR_OUT_OF_MEMORY;
                          goto error_return;
                          }
                      }
                  for (ptr = (char*)data->begin; ptr != data->end; ++ptr)
                      *ptr = tolower(*ptr);
                  }
              ++p;
              break;
  
          case 'u':               /* Turn data to uppercase. */
              if (data->begin)
                  {
                  char* ptr;
                  if (data->buffer_size == 0)
                      {
                      if (!assign_to_tokenbuf(data, data->begin, data->end - data->begin))
                          {
                          rc = VAR_OUT_OF_MEMORY;
                          goto error_return;
                          }
                      }
                  for (ptr = (char*)data->begin; ptr != data->end; ++ptr)
                      *ptr = toupper(*ptr);
                  }
              ++p;
              break;
  
          case 'o':               /* Cut out substrings. */
              ++p;
              rc = number(p, end);
              if (rc == 0)
                  {
                  rc = VAR_MISSING_START_OFFSET;
                  goto error_return;
                  }
              else
                  {
                  number1.begin = p;
                  number1.end   = p + rc;
                  number1.buffer_size = 0;
                  p += rc;
                  }
  
              if (*p == ',')
                  {
                  isrange = 0;
                  ++p;
                  }
              else if (*p == '-')
                  {
                  isrange = 1;
                  ++p;
                  }
              else
                  {
                  rc = VAR_INVALID_OFFSET_DELIMITER;
                  goto error_return;
                  }
  
              rc = number(p, end);
              number2.begin = p;
              number2.end   = p + rc;
              number2.buffer_size = 0;
              p += rc;
              if (data->begin)
                  {
                  rc = cut_out_offset(data, &number1, &number2, isrange);
                  if (rc < 0)
                      goto error_return;
                  }
              break;
  
          case '#':               /* Substitute length of the string. */
              if (data->begin)
                  {
                  char buf[1024];
                  sprintf(buf, "%d", data->end - data->begin);
                  free_tokenbuf(data);
                  if (!assign_to_tokenbuf(data, buf, strlen(buf)))
                      {
                      rc = VAR_OUT_OF_MEMORY;
                      goto error_return;
                      }
                  }
              ++p;
              break;
  
          case '-':               /* Substitute parameter if data is empty. */
              ++p;
              rc = exptext_or_variable(p, end, config, nameclass, lookup, lookup_context,
                                       force_expand, &tmptokbuf);
              if (rc < 0)
                  goto error_return;
              else if (rc == 0)
                  {
                  rc = VAR_MISSING_PARAMETER_IN_COMMAND;
                  goto error_return;
                  }
              else
                  p += rc;
              if (data->begin != NULL && data->begin == data->end)
                  {
                  free_tokenbuf(data);
                  move_tokenbuf(&tmptokbuf, data);
                  }
              break;
  
          case '*':               /* Return "" if data is not empty, parameter otherwise. */
              ++p;
              rc = exptext_or_variable(p, end, config, nameclass, lookup, lookup_context,
                                       force_expand, &tmptokbuf);
              if (rc < 0)
                  goto error_return;
              else if (rc == 0)
                  {
                  rc = VAR_MISSING_PARAMETER_IN_COMMAND;
                  goto error_return;
                  }
              else
                  p += rc;
              if (data->begin != NULL)
                  {
                  if (data->begin == data->end)
                      {
                      free_tokenbuf(data);
                      move_tokenbuf(&tmptokbuf, data);
                      }
                  else
                      {
                      free_tokenbuf(data);
                      data->begin = data->end = "";
                      data->buffer_size = 0;
                      }
                  }
              break;
  
          case '+':               /* Substitute parameter if data is not empty. */
              ++p;
              rc = exptext_or_variable(p, end, config, nameclass, lookup, lookup_context,
                                       force_expand, &tmptokbuf);
              if (rc < 0)
                  goto error_return;
              else if (rc == 0)
                  {
                  rc = VAR_MISSING_PARAMETER_IN_COMMAND;
                  goto error_return;
                  }
              else
                  p += rc;
              if (data->begin != NULL)
                  {
                  if (data->begin != data->end)
                      {
                      free_tokenbuf(data);
                      move_tokenbuf(&tmptokbuf, data);
                      }
                  }
              break;
  
          case 's':               /* Search and replace. */
              ++p;
  
              if (*p != '/')
                  return VAR_MALFORMATTED_REPLACE;
              else
                  ++p;
  
              rc = substext_or_variable(p, end, config, nameclass, lookup, lookup_context,
                                        force_expand, &search);
              if (rc < 0)
                  goto error_return;
              else
                  p += rc;
  
              if (*p != '/')
                  {
                  rc = VAR_MALFORMATTED_REPLACE;
                  goto error_return;
                  }
              else
                  ++p;
  
              rc = substext_or_variable(p, end, config, nameclass, lookup, lookup_context,
                                        force_expand, &replace);
              if (rc < 0)
                  goto error_return;
              else
                  p += rc;
  
              if (*p != '/')
                  {
                  rc = VAR_MALFORMATTED_REPLACE;
                  goto error_return;
                  }
              else
                  ++p;
  
              rc = exptext(p, end, config);
              if (rc < 0)
                  goto error_return;
              else
                  {
                  flags.begin = p;
                  flags.end = p + rc;
                  flags.buffer_size = 0;
                  p += rc;
                  }
  
              if (data->begin)
                  {
                  rc = search_and_replace(data, &search, &replace, &flags);
                  if (rc < 0)
                      goto error_return;
                  }
              break;
  
          case 'y':               /* Transpose characters from class A to class B. */
              ++p;
  
              if (*p != '/')
                  return VAR_MALFORMATTED_TRANSPOSE;
              else
                  ++p;
  
              rc = substext_or_variable(p, end, config, nameclass, lookup, lookup_context,
                                        force_expand, &search);
              if (rc < 0)
                  goto error_return;
              else
                  p += rc;
  
              if (*p != '/')
                  {
                  rc = VAR_MALFORMATTED_TRANSPOSE;
                  goto error_return;
                  }
              else
                  ++p;
  
              rc = substext_or_variable(p, end, config, nameclass, lookup, lookup_context,
                                        force_expand, &replace);
              if (rc < 0)
                  goto error_return;
              else
                  p += rc;
  
              if (*p != '/')
                  {
                  rc = VAR_MALFORMATTED_TRANSPOSE;
                  goto error_return;
                  }
              else
                  ++p;
  
              if (data->begin)
                  {
                  rc = transpose(data, &search, &replace);
                  if (rc < 0)
                      goto error_return;
                  }
              break;
  
  
          case 'p':               /* Padding. */
              ++p;
  
              if (*p != '/')
                  return VAR_MALFORMATTED_PADDING;
              else
                  ++p;
  
              rc = number(p, end);
              if (rc == 0)
                  {
                  rc = VAR_MISSING_PADDING_WIDTH;
                  goto error_return;
                  }
              else
                  {
                  number1.begin = p;
                  number1.end   = p + rc;
                  number1.buffer_size = 0;
                  p += rc;
                  }
  
              if (*p != '/')
                  {
                  rc = VAR_MALFORMATTED_PADDING;
                  goto error_return;
                  }
              else
                  ++p;
  
              rc = substext_or_variable(p, end, config, nameclass, lookup, lookup_context,
                                        force_expand, &replace);
              if (rc < 0)
                  goto error_return;
              else
                  p += rc;
  
              if (*p != '/')
                  {
                  rc = VAR_MALFORMATTED_PADDING;
                  goto error_return;
                  }
              else
                  ++p;
  
              if (*p != 'l' && *p != 'c' && *p != 'r')
                  {
                  rc = VAR_MALFORMATTED_PADDING;
                  goto error_return;
                  }
              else
                  ++p;
  
              if (data->begin)
                  {
                  rc = padding(data, &number1, &replace, p[-1]);
                  if (rc < 0)
                      goto error_return;
                  }
              break;
  
          default:
              return VAR_UNKNOWN_COMMAND_CHAR;
          }
  
      /* Exit gracefully. */
  
      free_tokenbuf(&tmptokbuf);
      free_tokenbuf(&search);
      free_tokenbuf(&replace);
      free_tokenbuf(&flags);
      free_tokenbuf(&number1);
      free_tokenbuf(&number2);
      return p - begin;
  
    error_return:
      free_tokenbuf(data);
      free_tokenbuf(&tmptokbuf);
      free_tokenbuf(&search);
      free_tokenbuf(&replace);
      free_tokenbuf(&flags);
      free_tokenbuf(&number1);
      free_tokenbuf(&number2);
      return rc;
      }
  
  static var_rc_t input(const char* begin, const char* end, const var_config_t* config,
                        const char nameclass[256], var_cb_t lookup, void* lookup_context,
                        int force_expand, tokenbuf* output)
      {
      int rc;
      tokenbuf result;
  
      init_tokenbuf(&result);
  
      do
          {
          rc = text(begin, end, config->varinit, config->escape);
          if (rc > 0)
              {
              if (!append_to_tokenbuf(output, begin, rc))
                  {
                  rc = VAR_OUT_OF_MEMORY;
                  goto error_return;
                  }
              begin += rc;
              }
          else if (rc < 0)
              goto error_return;
  
          rc = variable(begin, end, config, nameclass, lookup, lookup_context, force_expand, &result);
          if (rc > 0)
              {
              if (!append_to_tokenbuf(output, result.begin, result.end - result.begin))
                  {
                  rc = VAR_OUT_OF_MEMORY;
                  goto error_return;
                  }
              else
                  begin += rc;
              }
          else if (rc < 0)
              goto error_return;
          }
      while (rc > 0);
  
      if (begin != end)
          {
          rc = VAR_INPUT_ISNT_TEXT_NOR_VARIABLE;
          goto error_return;
          }
  
      return VAR_OK;
  
    error_return:
      free_tokenbuf(&result);
      return rc;
      }
  
  var_rc_t var_expand(const char* input_buf, size_t input_len,
                      char** result, size_t* result_len,
                      var_cb_t lookup, void* lookup_context,
                      const var_config_t* config, int force_expand)
      {
      char nameclass[256];
      var_rc_t rc;
      tokenbuf output;
  
      /* Assert everything is as we expect it. */
  
      assert(input_buf != NULL);
      assert(result != NULL);
      assert(result_len != NULL);
      assert(lookup != NULL);
  
      /* Expand the class description for valid variable names. */
  
      if (config == NULL)
          config = &var_config_default;
      rc = expand_character_class(config->namechars, nameclass);
      if (rc != VAR_OK)
          return rc;
  
      /* Make sure that the specials defined in the configuration do not
         appear in the character name class. */
  
      if (nameclass[(int)config->varinit] ||
          nameclass[(int)config->startdelim] ||
          nameclass[(int)config->enddelim] ||
          nameclass[(int)config->escape])
          return VAR_INVALID_CONFIGURATION;
  
      /* Call the parser. */
  
      output.begin = output.end = NULL;
      output.buffer_size = 0;
      rc = input(input_buf, input_buf + input_len, config, nameclass,
                 lookup, lookup_context, force_expand, &output);
      if (rc != VAR_OK)
          {
          free_tokenbuf(&output);
          return rc;
          }
      *result     = (char*)output.begin;
      *result_len = output.end - output.begin;
  
      return VAR_OK;
      }
  Index: ossp-pkg/var/var.h
  ============================================================
  $ cvs update -p -r1.1 var.h
  #ifndef LIB_VARIABLE_EXPAND_H
  #define LIB_VARIABLE_EXPAND_H
  
  #include <stdlib.h>
  
  /* Error codes returned by the varexp library. */
  
  typedef enum
      {
      VAR_EMPTY_PADDING_FILL_STRING      = -32,
      VAR_MISSING_PADDING_WIDTH          = -31,
      VAR_MALFORMATTED_PADDING           = -30,
      VAR_INCORRECT_TRANSPOSE_CLASS_SPEC = -29,
      VAR_EMPTY_TRANSPOSE_CLASS          = -28,
      VAR_TRANSPOSE_CLASSES_MISMATCH     = -27,
      VAR_MALFORMATTED_TRANSPOSE         = -26,
      VAR_OFFSET_LOGIC_ERROR             = -25,
      VAR_OFFSET_OUT_OF_BOUNDS           = -24,
      VAR_RANGE_OUT_OF_BOUNDS            = -23,
      VAR_INVALID_OFFSET_DELIMITER       = -22,
      VAR_MISSING_START_OFFSET           = -21,
      VAR_EMPTY_SEARCH_STRING            = -20,
      VAR_MISSING_PARAMETER_IN_COMMAND   = -19,
      VAR_INVALID_REGEX_IN_REPLACE       = -18,
      VAR_UNKNOWN_REPLACE_FLAG           = -17,
      VAR_MALFORMATTED_REPLACE           = -16,
      VAR_UNKNOWN_COMMAND_CHAR           = -14,
      VAR_INPUT_ISNT_TEXT_NOR_VARIABLE   = -13,
      VAR_UNDEFINED_VARIABLE             = -12,
      VAR_INCOMPLETE_VARIABLE_SPEC       = -11,
      VAR_OUT_OF_MEMORY                  = -10,
      VAR_INVALID_CONFIGURATION          = -9,
      VAR_INCORRECT_CLASS_SPEC           = -8,
      VAR_INCOMPLETE_GROUPED_HEX         = -7,
      VAR_INCOMPLETE_OCTAL               = -6,
      VAR_INVALID_OCTAL                  = -5,
      VAR_OCTAL_TOO_LARGE                = -4,
      VAR_INVALID_HEX                    = -3,
      VAR_INCOMPLETE_HEX                 = -2,
      VAR_INCOMPLETE_NAMED_CHARACTER     = -1,
      VAR_INCOMPLETE_QUOTED_PAIR         = -1,
      VAR_OK                             = 0
      }
  var_rc_t;
  
  /*
     Expand the following named characters to their binary
     representation:
  
         \t          tab
         \n          newline
         \r          return
         \033        octal char
         \x1B        hex char
         \x{263a}    wide hex char
  
    Any other character quoted by a backslash is copied verbatim.
  */
  
  var_rc_t expand_named_characters(const char* src, size_t len, char* dst);
  
  /*
     The callback will be called by variable_expand(), providing the
     following parameterns:
  
          context         - passed through from variable_expand()'s
                            parameters
          varname         - pointer to the name of the variable to
                            expand
          name_len        - length of the string starting at varname
          data            - location, where the callback should store
                            the pointer to the contents of the looked-up
                            variable
          data_len        - location, where the callback should store
                            the length of the data
          malloced_buffer - location, where the callback should store
                            either TRUE or FALSE, telling the framework
                            whether the buffer must be free(3)ed.
  
     The return code is interpreted as follows:
         >0               - OK
          0               - undefined variable
         <0 - error
  */
  
  typedef int (*var_cb_t)(void* context,
                          const char* varname, size_t name_len,
                          const char** data, size_t* data_len, size_t* buffer_size);
  
  /*
     This structure configures the parser's specials. I think, the fields
     are pretty self-explanatory. The only one worth mentioning is
     force_expand, which is a boolean. If set to TRUE, variable_expand()
     will fail with an error if the lookup callback returns "undefined
     variable". If set to FALSE, variable_expand() will copy the
     expression that failed verbatimly to the output so that another pass
     may expand it.
  
     The comments after each field show the default configuration.
  */
  
  typedef struct
      {
      char  varinit;               /* '$' */
      char  startdelim;            /* '{' */
      char  enddelim;              /* '}' */
      char  escape;                /* '\' */
      char* namechars;             /* 'a-zA-Z0-9_' */
      }
  var_config_t;
  extern const var_config_t var_config_default;
  
  /*
     variable_expand() will parse the contents of input for variable
     expressions and expand them using the provided lookup callback. The
     pointer to the resulting buffer is stored in result, its length in
     result_len. The buffer is always terminated by a '\0' byte, which is
     not included in the result_len count. The buffer must be free(3)ed
     by the caller.
  */
  
  var_rc_t var_expand(const char* input, size_t input_len,
                      char** result, size_t* result_len,
                      var_cb_t lookup, void* lookup_context,
                      const var_config_t* config, int force_expand);
  
  #endif /* !defined(LIB_VARIABLE_EXPAND_H) */
  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs update -p -r1.1 var_test.c
  #include <stdio.h>
  #include <string.h>
  #include <errno.h>
  #include "var.h"
  
  int env_lookup(void* context,
            const char* varname, size_t name_len,
            const char** data, size_t* data_len, size_t* buffer_size)
      {
      char tmp[256];
  
      if (name_len > sizeof(tmp)-1)
          {
          printf("Callback can't expand variable names longer than %d characters.\n", sizeof(tmp-1));
          exit(1);
          }
      memcpy(tmp, varname, name_len);
      tmp[name_len] = '\0';
      *data = getenv(tmp);
      if (*data == NULL)
          return 0;
      *data_len = strlen(*data);
      *buffer_size = 0;
      return 1;
      }
  
  struct test_case
      {
      const char* input;
      const char* expected;
      };
  
  int main(int argc, char** argv)
      {
      const struct test_case tests[] =
          {
          { "$HOME",                      "/home/regression-tests"          },
          { "${FOO}",                     "os"                              },
          { "${BAR}",                     "type"                            },
          { "${${FOO:u}${BAR:u}:l:u}",    "REGRESSION-OS"                   },
          { "${UNDEFINED}",               "${UNDEFINED}"                    },
          { "${OSTYPE:#}",                "13"                              },
          { "${EMPTY:-test${FOO}test}",   "testostest"                      },
          { "${EMPTY:-test${FOO:u}test}", "testOStest"                      },
          { "${TERM:-test${FOO}test}",    "regression-term"                 },
          { "${EMPTY:+FOO}",              ""                                },
          { "${HOME:+test${FOO}test}",    "testostest"                      },
          { "${HOME:+${OS${BAR:u}}}",     "regression-os"                   },
          { "${HOME:+OS${UNDEFINED:u}}",  "OS${UNDEFINED:u}"                },
          { "${UNDEFINED:+OS${BAR:u}}",   "${UNDEFINED:+OS${BAR:u}}"        },
          { "${HOME:*heinz}",             ""                                },
          { "${EMPTY:*claus}",            "claus"                           },
          { "${TERM}",                    "regression-term"                 },
          { "${HOME:s/reg/bla/}",         "/home/blaression-tests"          },
          { "${HOME:s/e/bla/}",           "/hombla/regression-tests"        },
          { "${HOME:s/e/bla/g}",          "/hombla/rblagrblassion-tblasts"  },
          { "${HOME:s/\\//_/g}",          "_home_regression-tests"          },
          { "${HOME:s/[eso]/_/g}",        "/h_m_/r_gr___i_n-t__t_"          },
          { "${HOME:s/[esO]/_/g}",        "/hom_/r_gr___ion-t__t_"          },
          { "${HOME:s/[esO]/_/gi}",       "/h_m_/r_gr___i_n-t__t_"          },
          { "${OSTYPE:s/^[re]/_/g}",      "_egression-os"                   },
          { "${EMPTY:s/^[re]/_/g}",       ""                                },
          { "${HOME:s/.*/heinz/}",        "heinz"                           },
          { "${HOME:s/e/bla/t}",          "/hombla/regression-tests"        },
          { "${HOME:s/E/bla/t}",          "/home/regression-tests"          },
          { "${HOME:s/E/bla/ti}",         "/hombla/regression-tests"        },
          { "${HOME:s/E/bla/tig}",        "/hombla/rblagrblassion-tblasts"  },
          { "${HOME:o1-5}",               "home/"                           },
          { "${HOME:o1,5}",               "home"                            },
          { "${HOME:o5,}",                "/regression-tests"               },
          { "${HOME:o5-}",                "/regression-tests"               },
          { "${HOME:o7,13}",              "egress"                          },
          { "${HOME:y/a-z/A-YZ/}",        "/HOME/REGRESSION-TESTS"          },
          { "${HOME:y/e-g/a-c/}",         "/homa/racrassion-tasts"          },
          { "${FOO:p/15/../l}",           "os............."                 },
          { "${FOO:p/15/12345/l}",        "os1234512345123"                 },
          { "${FOO:p/15/../r}",           ".............os"                 },
          { "${FOO:p/15/12345/r}",        "1234512345123os"                 },
          { "${FOO:p/15/../c}",           "......os......."                 },
          { "${FOO:p/15/12345/c}",        "123451os1234512"                 }
          };
      /*
          { "${HOME:s/g(res)s/x\\\\1x/g}","/homE/rEgrEssion-tEsts"          }
          { "${HOME:s/\\x65/\\x45/g}",    "/home/regression-tests"          }
      */
      char*    tmp;
      size_t   tmp_len;
      var_rc_t rc;
      size_t   i;
  
      if (setenv("HOME", "/home/regression-tests", 1) != 0 ||
          setenv("OSTYPE", "regression-os", 1) != 0 ||
          setenv("TERM", "regression-term", 1) != 0 ||
          setenv("FOO", "os", 1) != 0 ||
          setenv("BAR", "type", 1) != 0 ||
          setenv("EMPTY", "", 1) != 0)
          {
          printf("Failed to set the environment: %s.\n", strerror(errno));
          return 1;
          }
      unsetenv("UNDEFINED");
  
      for (i = 0; i < sizeof(tests) / sizeof(struct test_case); ++i)
          {
          rc = var_expand(tests[i].input, strlen(tests[i].input),
                          &tmp, &tmp_len,
                          &env_lookup, NULL,
                          NULL, 0);
          if (rc != VAR_OK)
              {
              printf("Test case #%d: var_expand() failed with return code %d.\n", i, rc);
              return 1;
              }
          if (tmp_len != strlen(tests[i].expected) || tmp == NULL || memcmp(tests[i].expected, tmp, tmp_len) != 0)
              {
              printf("Test case #%d: Expected result '%s' but got '%s'.\n", i, tests[i].expected, tmp);
              return 1;
              }
          printf("Test case #%02d: '%s' --> '%s'.\n", i, tests[i].input, tmp);
          free(tmp);
          }
  
      return 0;
      }
    

From ossp-cvs-owner@ossp.org  Tue Nov 13 13:14:55 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fADCEso06136; Tue, 13 Nov 2001 13:14:54 +0100 (CET)
Date: Tue, 13 Nov 2001 13:14:54 +0100 (CET)
Message-Id: <200111131214.fADCEso06136@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var .cvsignore
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   13-Nov-2001 13:14:54
  Branch: HEAD                             Handle: 2001111312145300

  Added files:
    ossp-pkg/var            .cvsignore

  Log:
    Added var_test.

  Summary:
    Revision    Changes     Path
    1.1         +1  -0      ossp-pkg/var/.cvsignore
  ____________________________________________________________________________

  Index: ossp-pkg/var/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  var_test

From ossp-cvs-owner@ossp.org  Tue Nov 13 13:15:21 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fADCFK506485; Tue, 13 Nov 2001 13:15:20 +0100 (CET)
Date: Tue, 13 Nov 2001 13:15:20 +0100 (CET)
Message-Id: <200111131215.fADCFK506485@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var Makefile
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   13-Nov-2001 13:15:20
  Branch: HEAD                             Handle: 2001111312151900

  Modified files:
    ossp-pkg/var            Makefile

  Log:
    - Updated clean target.
    - Updated dependencies.

  Summary:
    Revision    Changes     Path
    1.3         +5  -2      ossp-pkg/var/Makefile
  ____________________________________________________________________________

  Index: ossp-pkg/var/Makefile
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 Makefile
  --- ossp-pkg/var/Makefile	2001/11/13 12:08:30	1.2
  +++ ossp-pkg/var/Makefile	2001/11/13 12:15:19	1.3
  @@ -1,4 +1,4 @@
  -# Build libvarexp.
  +# Build the OSSP var library.
   
   CC		= gcc
   AR		= ar
  @@ -27,6 +27,9 @@
   	$(CC) $(LDFLAGS) -o $@ var_test.o libvarexp.a
   
   clean::
  -	rm -f $(OBJS) libvarexp.a var_test
  +	rm -f $(OBJS) libvarexp.a var_test.o var_test
   
   # Dependencies
  +
  +var.o: var.h
  +var_test.o: var.h

From ossp-cvs-owner@ossp.org  Tue Nov 13 13:15:44 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fADCFgD06553; Tue, 13 Nov 2001 13:15:42 +0100 (CET)
Date: Tue, 13 Nov 2001 13:15:42 +0100 (CET)
Message-Id: <200111131215.fADCFgD06553@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   13-Nov-2001 13:15:42
  Branch: HEAD                             Handle: 2001111312154200

  Modified files:
    ossp-pkg/var            var.h

  Log:
    Added OSSP copyright header.

  Summary:
    Revision    Changes     Path
    1.2         +32 -3      ossp-pkg/var/var.h
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 var.h
  --- ossp-pkg/var/var.h	2001/11/13 12:08:30	1.1
  +++ ossp-pkg/var/var.h	2001/11/13 12:15:42	1.2
  @@ -1,5 +1,34 @@
  -#ifndef LIB_VARIABLE_EXPAND_H
  -#define LIB_VARIABLE_EXPAND_H
  +/*
  +**  VAR - OSSP variable expression library.
  +**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**
  +**  This file is part of OSSP VAR, an extensible data serialization
  +**  library which can be found at http://www.ossp.org/pkg/var/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  var.h: VAR library API
  +*/
  +
  +#ifndef LIB_OSSP_VAR_H
  +#define LIB_OSSP_VAR_H
   
   #include <stdlib.h>
   
  @@ -124,4 +153,4 @@
                       var_cb_t lookup, void* lookup_context,
                       const var_config_t* config, int force_expand);
   
  -#endif /* !defined(LIB_VARIABLE_EXPAND_H) */
  +#endif /* !defined(LIB_OSSP_VAR_H) */

From ossp-cvs-owner@ossp.org  Tue Nov 13 13:16:17 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fADCGG606634; Tue, 13 Nov 2001 13:16:16 +0100 (CET)
Date: Tue, 13 Nov 2001 13:16:16 +0100 (CET)
Message-Id: <200111131216.fADCGG606634@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   13-Nov-2001 13:16:16
  Branch: HEAD                             Handle: 2001111312161500

  Modified files:
    ossp-pkg/var            var.c

  Log:
    - Fixed copyright header to show the right description.
    - Removed assertions.

  Summary:
    Revision    Changes     Path
    1.2         +1  -18     ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 var.c
  --- ossp-pkg/var/var.c	2001/11/13 12:08:30	1.1
  +++ ossp-pkg/var/var.c	2001/11/13 12:16:15	1.2
  @@ -24,10 +24,9 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  var.h: VAR library API
  +**  var.c: VAR library implementation.
   */
   
  -#include <assert.h>
   #include <ctype.h>
   #include <string.h>
   #include <stdio.h>
  @@ -186,9 +185,6 @@
   
   static void expand_range(char a, char b, char class[256])
       {
  -    assert(a <= b);
  -    assert(class != NULL);
  -
       do
           {
           class[(int)a] = 1;
  @@ -200,9 +196,6 @@
       {
       size_t i;
   
  -    assert(desc != NULL);
  -    assert(class != NULL);
  -
       /* Clear the class array. */
   
       for (i = 0; i < 256; ++i)
  @@ -339,9 +332,6 @@
       const char* end = src + len;
       var_rc_t rc;
   
  -    assert(src != NULL);
  -    assert(dst != NULL);
  -
       while (src < end)
           {
           if (*src == '\\')
  @@ -1665,13 +1655,6 @@
       char nameclass[256];
       var_rc_t rc;
       tokenbuf output;
  -
  -    /* Assert everything is as we expect it. */
  -
  -    assert(input_buf != NULL);
  -    assert(result != NULL);
  -    assert(result_len != NULL);
  -    assert(lookup != NULL);
   
       /* Expand the class description for valid variable names. */
   

From ossp-cvs-owner@ossp.org  Tue Nov 13 13:18:52 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fADCIp306862; Tue, 13 Nov 2001 13:18:51 +0100 (CET)
Date: Tue, 13 Nov 2001 13:18:51 +0100 (CET)
Message-Id: <200111131218.fADCIp306862@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   13-Nov-2001 13:18:51
  Branch: HEAD                             Handle: 2001111312185100

  Modified files:
    ossp-pkg/var            TODO

  Log:
    Removed the items that are fully implemented from the TODO file.

  Summary:
    Revision    Changes     Path
    1.2         +4  -121    ossp-pkg/var/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/var/TODO
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 TODO
  --- ossp-pkg/var/TODO	2001/11/09 17:01:37	1.1.1.1
  +++ ossp-pkg/var/TODO	2001/11/13 12:18:51	1.2
  @@ -1,72 +1,8 @@
  -                              libvar.a
  +                               OSSP var
   
  - - Prefix ist "var_", beziehungsweise "VAR_".
  + - Beim Suchen/Ersetzen mit Regular-Expression-Unterstützung fehlt
  +   noch die Erkennung von \1, \2 etc.
   
  - - Eine Variable kann im Text in der Form $name oder ${name} angegeben
  -   werden, wobei die Wahl der Klammern '{' '}' und des '$'
  -   parametriesiert werden können.
  -
  - - Gültige Zeichen für einen Variablennamen sind konfigurierbar.
  -   Garbage in -- garbage out.
  -
  - - Ein echtes '$'-Zeichen im Text kann durch Voranstellung eines
  -   wählbaren Escapezeichen dargestellt werden. Default ist der
  -   Backslash ('\').
  -
  - - Der Aufrufer der Funktion soll steuern können, wie sich die Library
  -   verhält, wenn eine Variable nicht existiert. Denkbar sind:
  -
  -    - Abbruch mit Fehler,
  -    - die Variable wird zu "", oder
  -    - der Ausdruck wird unverändert in den Ausgabetext übernommen,
  -      sodaß eventuell ein zweiter Pass gemacht werden kann.
  -
  - - ${parameter:-word} wird normal expandiert. Wenn "parameter" leer
  -   ist, wird stattdessen "word" eingesetzt.
  -
  - - ${parameter:+word} substituiert "word" wenn "parameter" nicht leer
  -   ist, sonst wird "" substituiert.
  -
  - - ${parameter:o<start>-}, ${parameter:o<start>-<end>}
  -
  - - ${parameter:o<start>,}, ${parameter:o<start>,<length>}
  -
  - - ${parameter:#} expandiert zur Länge des Inhaltes von "parameter".
  -
  - - ${parameter:s/pattern/string/[gti]} expandiert "parameter" und
  -   führt dann eine Ersetzung mittels des regulären Ausdrucks "pattern"
  -   durch. Wird das 'g'-Flag angegeben, wird nicht nur eine Instanz von
  -   "pattern" durch "string" ersetzt, sondern alle. Das 't'-Flag
  -   signalisiert, daß eine reine Text-Ersetzung ohne Unterstützung von
  -   regulären Ausdrücken gewünscht ist. Das 'i'-Flag besagt, daß die
  -   Suche nach "pattern" case-insensitiv durchgeführt wird.
  -
  - - ${parameter:y/ochars/nchars/} expandiert den Inhalt von "parameter"
  -   und transformiert dabei nach dem Prinzip von tr(1) die "ochars" im
  -   Text zu "nchars".
  -
  - - ${parameter:l} wandelt den Inhalt von "parameter" in
  -   Kleinbuchstaben, bevor es die Variable expandiert. Dies geschieht
  -   über toupper(3).
  -
  - - ${parameter:u} wandelt den Inhalt von "parameter" in
  -   Großbuchstaben, bevor es die Variable expandiert. Dies geschieht
  -   über tolower(3).
  -
  - - ${parameter:*word} expandiert zum leeren Wort, wenn "parameter"
  -   nicht leer ist, sonst zu "word".
  -
  - - Padding: ${parameter:p/<width>/<string>/<align>} expandiert
  -   "parameter" in einen String der Mindestbreite <width>, wobei abhaengig
  -   von <align> ("r" = right, "l" = left, "c" = center) noch fehlende
  -   Zeichen mit <string> aufgefuellt werden. Diest ist gedacht, um in
  -   Templates saubere Tabellen erzeugen zu koennen.
  -   Beispiele (foo="bar"):
  -       "${foo:p/6/./r}" -> "bar..."
  -       "${foo:p/6/./l}" -> "...bar"
  -       "${foo:p/6/./c}" -> ".bar.." (oder "..bar.", egal)
  -       "${foo:p/20/-=/c}" -> "-=-=-=-=-bar-=-=-=-="
  -
    - Jedes Vorkommen eines der folgenden Konstrukte im Text wird durch
      das zugehörige Sonderzeichen ersetzt.
   
  @@ -118,58 +54,5 @@
   
    - Doku sollte ein Beispiel für Quoting von Shell- und
      Regexp-Ausdrücken enthalten.
  -
  - - Wir unterstützen PCRE-, POSIX-Regex- oder keine regulären
  -   Ausdrücke. Dies kann über autoconf zur Compilezeit angegeben
  -   werden.
  -
  - - Das Escaping-Problem:
  -
  -Unsere Library macht zwei Dinge:
  -
  - (1) Sie expandiert Variablen-Ausdrücke mit Unterstützung von
  -     Operationen wie Suchen/Ersetzen, und
  -
  - (2) sie expandiert sogenannte "quoted pairs", wie zum Beispiel \n.
  -
  -Das Problem ist nun, daß sie dies in zwei Pässen tun will -- und muß.
  -Die Frage ist jedoch, in welcher Reihenfolge tut sie es und welche
  -Ergebnisse werden in den Ausgabetext ausgegeben? Betrachtet man
  -folgendes Beispiel, wird das Problem klarer:
  -
  -    Variablen: TEST = foo
  -    Eingabe..: Der Betrag auf Konto $TEST ist \$50.
  -
  -Soll die korrekte Ausgabe an dieser Stelle nun
  -
  -    Der Betrag auf Konto foo ist \$50.
  -
  -oder
  -
  -    Der Betrag auf Konto foo ist $50.
  -
  -sein? Die erste Form ist die, die man intuitiv erwartet, die zweite
  -Form ist jedoch die, die man braucht, wenn man den Text durch mehrere
  -Pässe jagen will -- was wir ausdrücklich vorgesehen haben.
  -
  -Schlimmer noch: Wie soll die Library die Eingabe
  -
  -    Der Betrag auf Konto ${TEST:s/(.*)/\1bar/} ist \$50.
  -
  -interpretieren? Würde unser Parser das Token "\1" interpretieren,
  -würde nur eine "1" zurückbleiben, der Benutzer müßte also "\\1"
  -schreiben, um das Ergebnis zu erhalten, was er erwartet.
  -Interpretierte unser Parser die "quoted pairs" nicht, könnte man den
  -Ausdruck
  -
  -    ${TEST:s/\n/ /g}
  -
  -nicht verwenden, weil die Regular-Expression-Funktionen ein '\n' nicht
  -kennen.
  -
  -Nehmen wir also an, wir interpretieren "quoted pairs" und leben damit,
  -daß der Benutzer dann doppelt escapen muß ... Wie verhält sich das
  -dann mit mehreren Pässen? Läuft die Library zweimal über die Eingabe,
  -bräuchte man bereits
   
  -    Der Betrag auf Konto ${TEST:s/(.*)/\\1bar/} ist \$50.
  + - Unterstützung von PCRE.

From ossp-cvs-owner@ossp.org  Tue Nov 13 13:36:50 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fADCanc09034; Tue, 13 Nov 2001 13:36:49 +0100 (CET)
Date: Tue, 13 Nov 2001 13:36:49 +0100 (CET)
Message-Id: <200111131236.fADCanc09034@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   13-Nov-2001 13:36:49
  Branch: HEAD                             Handle: 2001111312364800

  Added files:
    ossp-pkg/var            var.pod

  Log:
    Added skeleton version of the library's manual page.

  Summary:
    Revision    Changes     Path
    1.1         +188 -0     ossp-pkg/var/var.pod
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.pod
  ============================================================
  $ cvs update -p -r1.1 var.pod
  ##
  **  VAR - OSSP variable expression library.
  ##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  ##
  ##  This file is part of OSSP VAR, an extensible data serialization
  ##  library which can be found at http://www.ossp.org/pkg/var/.
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED `AS IS' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  var.pod: Unix manual page source
  ##
  
  =pod
  
  =head1 NAME
  
  var - OSSP variable expression library.
  
  =head1 SYNOPSIS
  
  =head1 DESCRIPTION
  
  The purpose of VAR is ...
  
  
  =head1 SUPPORTED VARIABLE EXPRESSIONS
  
  =over 4
  
  =item ${name:#}
  
  =item ${name:l}
  
  =item ${name:u}
  
  =item ${name:*<word>}
  
  =item ${name:-<word>}
  
  =item ${name:?<word>}
  
  =item ${name:+<word>}
  
  =item ${name:o<start>-<end>}
  
  =item ${name:o<start>,<length>}
  
  =item ${name:s/<pattern>/<string>/[gti]}
  
  =item ${name:y/<ochars>/<nchars>/}
  
  =item ${name:p/<width>/<string>/<align>}
  
  =back
  
  =head1 EBNF GRAMMAR OF SUPPORTED EXPRESSIONS
  
  input      : (TEXT|variable)*
  
  variable   : '$' (name|expression)
  
  expression : START-DELIM (name|variable)+ (':' command)* END-DELIM
  
  name       : (VARNAME|SPECIAL1|SPECIAL2)+
  
  command    : '-' (EXPTEXT|variable)+
             | '+' (EXPTEXT|variable)+
             | 'o' (NUMBER ('-'|',') (NUMBER)?)
             | '#'
             | '*' (EXPTEXT|variable)+
             | 's' '/' (variable|SUBSTTEXT)+ '/' (variable|SUBSTTEXT)* '/' ('g'|'i'|'t')*
             | 'y' '/' (variable|SUBSTTEXT)+ '/' (variable|SUBSTTEXT)* '/'
             | 'p' '/' NUMBER '/' (variable|SUBSTTEXT)* '/' ('r'|'l'|'c')
             | 'l'
             | 'u'
  
  START-DELIM: '{'
  
  END-DELIM  : '}'
  
  VARNAME    : '[a-zA-Z0-9_]+'
  
  SPECIAL1   : '['
  
  SPECIAL2   : ']'
  
  NUMBER     : '[0-9]+'
  
  SUBSTTEXT  : '[^$/]'
  
  EXPTEXT    : '[^$}:]+'
  
  TEXT       : '[^$]+'
  
  =head1 CODES RETURNED BY THE LIBRARY
  
  =over 4
  
  =item VAR_EMPTY_PADDING_FILL_STRING
  
  =item VAR_MISSING_PADDING_WIDTH
  
  =item VAR_MALFORMATTED_PADDING
  
  =item VAR_INCORRECT_TRANSPOSE_CLASS_SPEC
  
  =item VAR_EMPTY_TRANSPOSE_CLASS
  
  =item VAR_TRANSPOSE_CLASSES_MISMATCH
  
  =item VAR_MALFORMATTED_TRANSPOSE
  
  =item VAR_OFFSET_LOGIC_ERROR
  
  =item VAR_OFFSET_OUT_OF_BOUNDS
  
  =item VAR_RANGE_OUT_OF_BOUNDS
  
  =item VAR_INVALID_OFFSET_DELIMITER
  
  =item VAR_MISSING_START_OFFSET
  
  =item VAR_EMPTY_SEARCH_STRING
  
  =item VAR_MISSING_PARAMETER_IN_COMMAND
  
  =item VAR_INVALID_REGEX_IN_REPLACE
  
  =item VAR_UNKNOWN_REPLACE_FLAG
  
  =item VAR_MALFORMATTED_REPLACE
  
  =item VAR_UNKNOWN_COMMAND_CHAR
  
  =item VAR_INPUT_ISNT_TEXT_NOR_VARIABLE
  
  =item VAR_UNDEFINED_VARIABLE
  
  =item VAR_INCOMPLETE_VARIABLE_SPEC
  
  =item VAR_OUT_OF_MEMORY
  
  =item VAR_INVALID_CONFIGURATION
  
  =item VAR_INCORRECT_CLASS_SPEC
  
  =item VAR_INCOMPLETE_GROUPED_HEX
  
  =item VAR_INCOMPLETE_OCTAL
  
  =item VAR_INVALID_OCTAL
  
  =item VAR_OCTAL_TOO_LARGE
  
  =item VAR_INVALID_HEX
  
  =item VAR_INCOMPLETE_HEX
  
  =item VAR_INCOMPLETE_NAMED_CHARACTER
  
  =item VAR_INCOMPLETE_QUOTED_PAIR
  
  =item VAR_OK
  
  =back
  
  =head1 SO ALSO
  
  regex(7)
  
  =cut

From ossp-cvs-owner@ossp.org  Tue Nov 13 13:37:15 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fADCbEh09110; Tue, 13 Nov 2001 13:37:14 +0100 (CET)
Date: Tue, 13 Nov 2001 13:37:14 +0100 (CET)
Message-Id: <200111131237.fADCbEh09110@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var .cvsignore
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   13-Nov-2001 13:37:14
  Branch: HEAD                             Handle: 2001111312371300

  Modified files:
    ossp-pkg/var            .cvsignore

  Log:
    Added var.3.

  Summary:
    Revision    Changes     Path
    1.2         +1  -0      ossp-pkg/var/.cvsignore
  ____________________________________________________________________________

  Index: ossp-pkg/var/.cvsignore
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 .cvsignore
  --- ossp-pkg/var/.cvsignore	2001/11/13 12:14:53	1.1
  +++ ossp-pkg/var/.cvsignore	2001/11/13 12:37:13	1.2
  @@ -1 +1,2 @@
   var_test
  +var.3

From ossp-cvs-owner@ossp.org  Tue Nov 13 13:45:51 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fADCjom10302; Tue, 13 Nov 2001 13:45:50 +0100 (CET)
Date: Tue, 13 Nov 2001 13:45:50 +0100 (CET)
Message-Id: <200111131245.fADCjom10302@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   13-Nov-2001 13:45:50
  Branch: HEAD                             Handle: 2001111312454900

  Modified files:
    ossp-pkg/var            var.c

  Log:
    Renamed expand_named_characters() to var_unescape while adding the
    flag telling the function whether to expand anything or only
    constructs it knows.

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 var.c
  --- ossp-pkg/var/var.c	2001/11/13 12:16:15	1.2
  +++ ossp-pkg/var/var.c	2001/11/13 12:45:49	1.3
  @@ -327,7 +327,7 @@
           return expand_simple_hex(src, dst, end);
       }
   
  -var_rc_t expand_named_characters(const char* src, size_t len, char* dst)
  +var_rc_t var_unescape(const char* src, size_t len, char* dst, int unescape_all)
       {
       const char* end = src + len;
       var_rc_t rc;

From ossp-cvs-owner@ossp.org  Tue Nov 13 13:46:26 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fADCkPl10391; Tue, 13 Nov 2001 13:46:25 +0100 (CET)
Date: Tue, 13 Nov 2001 13:46:25 +0100 (CET)
Message-Id: <200111131246.fADCkPl10391@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   13-Nov-2001 13:46:25
  Branch: HEAD                             Handle: 2001111312462400

  Modified files:
    ossp-pkg/var            var.h

  Log:
    - Added VAR_CALLBACK_ERROR define.
    
    - Renamed expand_named_characters() to var_unescape while adding the
      flag telling the function whether to expand anything or only
      constructs it knows.

  Summary:
    Revision    Changes     Path
    1.3         +2  -1      ossp-pkg/var/var.h
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 var.h
  --- ossp-pkg/var/var.h	2001/11/13 12:15:42	1.2
  +++ ossp-pkg/var/var.h	2001/11/13 12:46:24	1.3
  @@ -36,6 +36,7 @@
   
   typedef enum
       {
  +    VAR_CALLBACK_ERROR                 = -64,
       VAR_EMPTY_PADDING_FILL_STRING      = -32,
       VAR_MISSING_PADDING_WIDTH          = -31,
       VAR_MALFORMATTED_PADDING           = -30,
  @@ -86,7 +87,7 @@
     Any other character quoted by a backslash is copied verbatim.
   */
   
  -var_rc_t expand_named_characters(const char* src, size_t len, char* dst);
  +var_rc_t var_unescape(const char* src, size_t len, char* dst, int unescape_all);
   
   /*
      The callback will be called by variable_expand(), providing the

From ossp-cvs-owner@ossp.org  Tue Nov 13 13:46:51 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fADCkoT10458; Tue, 13 Nov 2001 13:46:50 +0100 (CET)
Date: Tue, 13 Nov 2001 13:46:50 +0100 (CET)
Message-Id: <200111131246.fADCkoT10458@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   13-Nov-2001 13:46:50
  Branch: HEAD                             Handle: 2001111312465000

  Modified files:
    ossp-pkg/var            var_test.c

  Log:
    The callback will now return a proper error code in case of failure,
    rather than using exit(1).

  Summary:
    Revision    Changes     Path
    1.2         +6  -4      ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 var_test.c
  --- ossp-pkg/var/var_test.c	2001/11/13 12:08:30	1.1
  +++ ossp-pkg/var/var_test.c	2001/11/13 12:46:50	1.2
  @@ -4,15 +4,17 @@
   #include "var.h"
   
   int env_lookup(void* context,
  -          const char* varname, size_t name_len,
  -          const char** data, size_t* data_len, size_t* buffer_size)
  +               const char* varname, size_t name_len,
  +               const char** data, size_t* data_len, size_t* buffer_size)
       {
       char tmp[256];
   
       if (name_len > sizeof(tmp)-1)
           {
  -        printf("Callback can't expand variable names longer than %d characters.\n", sizeof(tmp-1));
  -        exit(1);
  +        /* Callback can't expand variable names longer than
  +           sizeof(tmp) characters. */
  +
  +        return VAR_CALLBACK_ERROR;
           }
       memcpy(tmp, varname, name_len);
       tmp[name_len] = '\0';

From ossp-cvs-owner@ossp.org  Tue Nov 13 13:47:43 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fADClfQ10565; Tue, 13 Nov 2001 13:47:41 +0100 (CET)
Date: Tue, 13 Nov 2001 13:47:41 +0100 (CET)
Message-Id: <200111131247.fADClfQ10565@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var Makefile
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   13-Nov-2001 13:47:41
  Branch: HEAD                             Handle: 2001111312474100

  Modified files:
    ossp-pkg/var            Makefile

  Log:
    Added the man page to the build process.

  Summary:
    Revision    Changes     Path
    1.4         +6  -2      ossp-pkg/var/Makefile
  ____________________________________________________________________________

  Index: ossp-pkg/var/Makefile
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 Makefile
  --- ossp-pkg/var/Makefile	2001/11/13 12:15:19	1.3
  +++ ossp-pkg/var/Makefile	2001/11/13 12:47:41	1.4
  @@ -3,6 +3,7 @@
   CC		= gcc
   AR		= ar
   RANLIB 		= ranlib
  +POD2MAN		= pod2man
   
   WARNFLAGS	= -Wall -pedantic
   OPTFLAGS	= -O3 -pipe
  @@ -16,7 +17,7 @@
   .c.o:
   	$(CC) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CFLAGS) -c $<
   
  -all:	libvarexp.a
  +all:	libvarexp.a var.3
   
   libvarexp.a:	$(OBJS)
   	@rm -f $@
  @@ -26,8 +27,11 @@
   var_test:	var_test.o libvarexp.a
   	$(CC) $(LDFLAGS) -o $@ var_test.o libvarexp.a
   
  +var.3:		var.pod
  +	$(POD2MAN) var.pod >$@
  +
   clean::
  -	rm -f $(OBJS) libvarexp.a var_test.o var_test
  +	rm -f $(OBJS) libvarexp.a var_test.o var_test var.3
   
   # Dependencies
   

From ossp-cvs-owner@ossp.org  Tue Nov 13 13:48:01 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fADCm0U10627; Tue, 13 Nov 2001 13:48:00 +0100 (CET)
Date: Tue, 13 Nov 2001 13:48:00 +0100 (CET)
Message-Id: <200111131248.fADCm0U10627@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   13-Nov-2001 13:48:00
  Branch: HEAD                             Handle: 2001111312475900

  Modified files:
    ossp-pkg/var            var.pod

  Log:
    Added VAR_CALLBACK_ERROR to the list of return codes.

  Summary:
    Revision    Changes     Path
    1.2         +3  -0      ossp-pkg/var/var.pod
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.pod
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 var.pod
  --- ossp-pkg/var/var.pod	2001/11/13 12:36:48	1.1
  +++ ossp-pkg/var/var.pod	2001/11/13 12:47:59	1.2
  @@ -39,6 +39,7 @@
   
   The purpose of VAR is ...
   
  +=head1 THE LOOKUP CALLBACK
   
   =head1 SUPPORTED VARIABLE EXPRESSIONS
   
  @@ -112,6 +113,8 @@
   =head1 CODES RETURNED BY THE LIBRARY
   
   =over 4
  +
  +=item VAR_CALLBACK_ERROR
   
   =item VAR_EMPTY_PADDING_FILL_STRING
   

From ossp-cvs-owner@ossp.org  Tue Nov 13 13:49:31 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fADCnUK10772; Tue, 13 Nov 2001 13:49:30 +0100 (CET)
Date: Tue, 13 Nov 2001 13:49:30 +0100 (CET)
Message-Id: <200111131249.fADCnUK10772@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   13-Nov-2001 13:49:30
  Branch: HEAD                             Handle: 2001111312492900

  Modified files:
    ossp-pkg/var            TODO

  Log:
    Moved the grammar from this file to the man page.

  Summary:
    Revision    Changes     Path
    1.3         +0  -39     ossp-pkg/var/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/var/TODO
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 TODO
  --- ossp-pkg/var/TODO	2001/11/13 12:18:51	1.2
  +++ ossp-pkg/var/TODO	2001/11/13 12:49:29	1.3
  @@ -13,45 +13,6 @@
          \x1B        hex char
          \x{263a}    wide hex char
   
  - - Syntax:
  -
  -    input           : ( TEXT | variable )*
  -
  -    variable        : '$' ( name | expression )
  -
  -    expression      : START-DELIM ( name | variable )+ ( ':' command )* END-DELIM
  -
  -    name            : ( VARNAME | SPECIAL1 | SPECIAL2 )+
  -
  -    command         : '-' ( EXPTEXT | variable )+
  -                    | '+' ( EXPTEXT | variable )+
  -                    | 'o' ( NUMBER ('-' | ',') ( NUMBER )? )
  -                    | '#'
  -                    | '*' ( EXPTEXT | variable )+
  -                    | 's' '/' ( variable | SUBSTTEXT )+ '/' ( variable | SUBSTTEXT )* '/' ( 'g' | 'i' | 't' )*
  -                    | 'y' '/' ( variable | SUBSTTEXT )+ '/' ( variable | SUBSTTEXT )* '/'
  -                    | 'p' '/' NUMBER '/' ( variable | SUBSTTEXT )* '/' ( 'r' | 'l' | 'c' )
  -                    | 'l'
  -                    | 'u'
  -
  -    START-DELIM     : '{'
  -
  -    END-DELIM       : '}'
  -
  -    VARNAME         : '[a-zA-Z0-9_]+'
  -
  -    SPECIAL1        : '['
  -
  -    SPECIAL2        : ']'
  -
  -    NUMBER          : '[0-9]+'
  -
  -    SUBSTTEXT       : '[^$/]'
  -
  -    EXPTEXT         : '[^$}:]+'
  -
  -    TEXT            : '[^$]+'
  -
    - Doku sollte ein Beispiel für Quoting von Shell- und
      Regexp-Ausdrücken enthalten.
   

From ossp-cvs-owner@ossp.org  Tue Nov 13 14:25:20 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fADDPJo15322; Tue, 13 Nov 2001 14:25:19 +0100 (CET)
Date: Tue, 13 Nov 2001 14:25:19 +0100 (CET)
Message-Id: <200111131325.fADDPJo15322@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c var_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   13-Nov-2001 14:25:19
  Branch: HEAD                             Handle: 2001111313251800

  Modified files:
    ossp-pkg/var            var.c var_test.c

  Log:
    Implemented the unescape_all-behavior and added modified the test
    program to make use of var_unescape(). Also added a test case, which
    verifies hex and octal characters are handled correctly.

  Summary:
    Revision    Changes     Path
    1.4         +19 -3      ossp-pkg/var/var.c
    1.3         +20 -4      ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 var.c
  --- ossp-pkg/var/var.c	2001/11/13 12:45:49	1.3
  +++ ossp-pkg/var/var.c	2001/11/13 13:25:18	1.4
  @@ -364,10 +364,26 @@
                   case '7':
                   case '8':
                   case '9':
  -                    if ((rc = expand_octal(&src, &dst, end)) != 0)
  -                        return rc;
  -                    break;
  +                    if (!unescape_all)
  +                        {
  +                        if (end - src >= 3 && isdigit(src[1]) && isdigit(src[2]))
  +                            {
  +                            if ((rc = expand_octal(&src, &dst, end)) != 0)
  +                                return rc;
  +                            break;
  +                            }
  +                        }
  +                    else
  +                        {
  +                        if ((rc = expand_octal(&src, &dst, end)) != 0)
  +                            return rc;
  +                        break;
  +                        }
                   default:
  +                    if (!unescape_all)
  +                        {
  +                        *dst++ = '\\';
  +                        }
                       *dst++ = *src;
                   }
               ++src;
  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 var_test.c
  --- ossp-pkg/var/var_test.c	2001/11/13 12:46:50	1.2
  +++ ossp-pkg/var/var_test.c	2001/11/13 13:25:18	1.3
  @@ -79,7 +79,8 @@
           { "${FOO:p/15/../r}",           ".............os"                 },
           { "${FOO:p/15/12345/r}",        "1234512345123os"                 },
           { "${FOO:p/15/../c}",           "......os......."                 },
  -        { "${FOO:p/15/12345/c}",        "123451os1234512"                 }
  +        { "${FOO:p/15/12345/c}",        "123451os1234512"                 },
  +        { "${FOO:s/os/\\x{4F}\\123/g}", "OS"                              }
           };
       /*
           { "${HOME:s/g(res)s/x\\\\1x/g}","/homE/rEgrEssion-tEsts"          }
  @@ -89,6 +90,7 @@
       size_t   tmp_len;
       var_rc_t rc;
       size_t   i;
  +    char     buffer[1024];
   
       if (setenv("HOME", "/home/regression-tests", 1) != 0 ||
           setenv("OSTYPE", "regression-os", 1) != 0 ||
  @@ -104,8 +106,15 @@
   
       for (i = 0; i < sizeof(tests) / sizeof(struct test_case); ++i)
           {
  -        rc = var_expand(tests[i].input, strlen(tests[i].input),
  -                        &tmp, &tmp_len,
  +        printf("Test case #%02d: Original input is '%s'.\n", i, tests[i].input);
  +        rc = var_unescape(tests[i].input, strlen(tests[i].input), buffer, 0);
  +        if (rc != VAR_OK)
  +            {
  +            printf("Test case #%d: First var_unescape() failed with return code %d.\n", i, rc);
  +            return 1;
  +            }
  +        printf("Test case #%02d: Unescaped input is '%s'.\n", i, buffer);
  +        rc = var_expand(buffer, strlen(buffer), &tmp, &tmp_len,
                           &env_lookup, NULL,
                           NULL, 0);
           if (rc != VAR_OK)
  @@ -113,12 +122,19 @@
               printf("Test case #%d: var_expand() failed with return code %d.\n", i, rc);
               return 1;
               }
  +        printf("Test case #%02d: Expanded output is '%s'.\n", i, tmp);
           if (tmp_len != strlen(tests[i].expected) || tmp == NULL || memcmp(tests[i].expected, tmp, tmp_len) != 0)
               {
               printf("Test case #%d: Expected result '%s' but got '%s'.\n", i, tests[i].expected, tmp);
               return 1;
  +            }
  +        rc = var_unescape(tests[i].input, strlen(tests[i].input), buffer, 1);
  +        if (rc != VAR_OK)
  +            {
  +            printf("Test case #%d: Second var_unescape() failed with return code %d.\n", i, rc);
  +            return 1;
               }
  -        printf("Test case #%02d: '%s' --> '%s'.\n", i, tests[i].input, tmp);
  +        printf("Test case #%02d: Unescaped output is '%s'.\n\n", i, tmp);
           free(tmp);
           }
   

From ossp-cvs-owner@ossp.org  Tue Nov 13 14:29:52 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fADDTp715679; Tue, 13 Nov 2001 14:29:51 +0100 (CET)
Date: Tue, 13 Nov 2001 14:29:51 +0100 (CET)
Message-Id: <200111131329.fADDTp715679@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c var_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   13-Nov-2001 14:29:51
  Branch: HEAD                             Handle: 2001111313295000

  Modified files:
    ossp-pkg/var            var.c var_test.c

  Log:
    Changed the semantics of var_unescape(): It will only recognize a
    named character as being an octal if there are three digits following
    the backslash. Anything else will be interpreted as an ordinary quoted
    character that's copied verbatimly. Added a test case to verify that
    behavior.

  Summary:
    Revision    Changes     Path
    1.5         +1  -10     ossp-pkg/var/var.c
    1.4         +46 -45     ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 var.c
  --- ossp-pkg/var/var.c	2001/11/13 13:25:18	1.4
  +++ ossp-pkg/var/var.c	2001/11/13 13:29:50	1.5
  @@ -364,16 +364,7 @@
                   case '7':
                   case '8':
                   case '9':
  -                    if (!unescape_all)
  -                        {
  -                        if (end - src >= 3 && isdigit(src[1]) && isdigit(src[2]))
  -                            {
  -                            if ((rc = expand_octal(&src, &dst, end)) != 0)
  -                                return rc;
  -                            break;
  -                            }
  -                        }
  -                    else
  +                    if (end - src >= 3 && isdigit(src[1]) && isdigit(src[2]))
                           {
                           if ((rc = expand_octal(&src, &dst, end)) != 0)
                               return rc;
  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 var_test.c
  --- ossp-pkg/var/var_test.c	2001/11/13 13:25:18	1.3
  +++ ossp-pkg/var/var_test.c	2001/11/13 13:29:50	1.4
  @@ -36,51 +36,52 @@
       {
       const struct test_case tests[] =
           {
  -        { "$HOME",                      "/home/regression-tests"          },
  -        { "${FOO}",                     "os"                              },
  -        { "${BAR}",                     "type"                            },
  -        { "${${FOO:u}${BAR:u}:l:u}",    "REGRESSION-OS"                   },
  -        { "${UNDEFINED}",               "${UNDEFINED}"                    },
  -        { "${OSTYPE:#}",                "13"                              },
  -        { "${EMPTY:-test${FOO}test}",   "testostest"                      },
  -        { "${EMPTY:-test${FOO:u}test}", "testOStest"                      },
  -        { "${TERM:-test${FOO}test}",    "regression-term"                 },
  -        { "${EMPTY:+FOO}",              ""                                },
  -        { "${HOME:+test${FOO}test}",    "testostest"                      },
  -        { "${HOME:+${OS${BAR:u}}}",     "regression-os"                   },
  -        { "${HOME:+OS${UNDEFINED:u}}",  "OS${UNDEFINED:u}"                },
  -        { "${UNDEFINED:+OS${BAR:u}}",   "${UNDEFINED:+OS${BAR:u}}"        },
  -        { "${HOME:*heinz}",             ""                                },
  -        { "${EMPTY:*claus}",            "claus"                           },
  -        { "${TERM}",                    "regression-term"                 },
  -        { "${HOME:s/reg/bla/}",         "/home/blaression-tests"          },
  -        { "${HOME:s/e/bla/}",           "/hombla/regression-tests"        },
  -        { "${HOME:s/e/bla/g}",          "/hombla/rblagrblassion-tblasts"  },
  -        { "${HOME:s/\\//_/g}",          "_home_regression-tests"          },
  -        { "${HOME:s/[eso]/_/g}",        "/h_m_/r_gr___i_n-t__t_"          },
  -        { "${HOME:s/[esO]/_/g}",        "/hom_/r_gr___ion-t__t_"          },
  -        { "${HOME:s/[esO]/_/gi}",       "/h_m_/r_gr___i_n-t__t_"          },
  -        { "${OSTYPE:s/^[re]/_/g}",      "_egression-os"                   },
  -        { "${EMPTY:s/^[re]/_/g}",       ""                                },
  -        { "${HOME:s/.*/heinz/}",        "heinz"                           },
  -        { "${HOME:s/e/bla/t}",          "/hombla/regression-tests"        },
  -        { "${HOME:s/E/bla/t}",          "/home/regression-tests"          },
  -        { "${HOME:s/E/bla/ti}",         "/hombla/regression-tests"        },
  -        { "${HOME:s/E/bla/tig}",        "/hombla/rblagrblassion-tblasts"  },
  -        { "${HOME:o1-5}",               "home/"                           },
  -        { "${HOME:o1,5}",               "home"                            },
  -        { "${HOME:o5,}",                "/regression-tests"               },
  -        { "${HOME:o5-}",                "/regression-tests"               },
  -        { "${HOME:o7,13}",              "egress"                          },
  -        { "${HOME:y/a-z/A-YZ/}",        "/HOME/REGRESSION-TESTS"          },
  -        { "${HOME:y/e-g/a-c/}",         "/homa/racrassion-tasts"          },
  -        { "${FOO:p/15/../l}",           "os............."                 },
  -        { "${FOO:p/15/12345/l}",        "os1234512345123"                 },
  -        { "${FOO:p/15/../r}",           ".............os"                 },
  -        { "${FOO:p/15/12345/r}",        "1234512345123os"                 },
  -        { "${FOO:p/15/../c}",           "......os......."                 },
  -        { "${FOO:p/15/12345/c}",        "123451os1234512"                 },
  -        { "${FOO:s/os/\\x{4F}\\123/g}", "OS"                              }
  +        { "$HOME",                       "/home/regression-tests"          },
  +        { "${FOO}",                      "os"                              },
  +        { "${BAR}",                      "type"                            },
  +        { "${${FOO:u}${BAR:u}:l:u}",     "REGRESSION-OS"                   },
  +        { "${UNDEFINED}",                "${UNDEFINED}"                    },
  +        { "${OSTYPE:#}",                 "13"                              },
  +        { "${EMPTY:-test${FOO}test}",    "testostest"                      },
  +        { "${EMPTY:-test${FOO:u}test}",  "testOStest"                      },
  +        { "${TERM:-test${FOO}test}",     "regression-term"                 },
  +        { "${EMPTY:+FOO}",               ""                                },
  +        { "${HOME:+test${FOO}test}",     "testostest"                      },
  +        { "${HOME:+${OS${BAR:u}}}",      "regression-os"                   },
  +        { "${HOME:+OS${UNDEFINED:u}}",   "OS${UNDEFINED:u}"                },
  +        { "${UNDEFINED:+OS${BAR:u}}",    "${UNDEFINED:+OS${BAR:u}}"        },
  +        { "${HOME:*heinz}",              ""                                },
  +        { "${EMPTY:*claus}",             "claus"                           },
  +        { "${TERM}",                     "regression-term"                 },
  +        { "${HOME:s/reg/bla/}",          "/home/blaression-tests"          },
  +        { "${HOME:s/e/bla/}",            "/hombla/regression-tests"        },
  +        { "${HOME:s/e/bla/g}",           "/hombla/rblagrblassion-tblasts"  },
  +        { "${HOME:s/\\//_/g}",           "_home_regression-tests"          },
  +        { "${HOME:s/[eso]/_/g}",         "/h_m_/r_gr___i_n-t__t_"          },
  +        { "${HOME:s/[esO]/_/g}",         "/hom_/r_gr___ion-t__t_"          },
  +        { "${HOME:s/[esO]/_/gi}",        "/h_m_/r_gr___i_n-t__t_"          },
  +        { "${OSTYPE:s/^[re]/_/g}",       "_egression-os"                   },
  +        { "${EMPTY:s/^[re]/_/g}",        ""                                },
  +        { "${HOME:s/.*/heinz/}",         "heinz"                           },
  +        { "${HOME:s/e/bla/t}",           "/hombla/regression-tests"        },
  +        { "${HOME:s/E/bla/t}",           "/home/regression-tests"          },
  +        { "${HOME:s/E/bla/ti}",          "/hombla/regression-tests"        },
  +        { "${HOME:s/E/bla/tig}",         "/hombla/rblagrblassion-tblasts"  },
  +        { "${HOME:o1-5}",                "home/"                           },
  +        { "${HOME:o1,5}",                "home"                            },
  +        { "${HOME:o5,}",                 "/regression-tests"               },
  +        { "${HOME:o5-}",                 "/regression-tests"               },
  +        { "${HOME:o7,13}",               "egress"                          },
  +        { "${HOME:y/a-z/A-YZ/}",         "/HOME/REGRESSION-TESTS"          },
  +        { "${HOME:y/e-g/a-c/}",          "/homa/racrassion-tasts"          },
  +        { "${FOO:p/15/../l}",            "os............."                 },
  +        { "${FOO:p/15/12345/l}",         "os1234512345123"                 },
  +        { "${FOO:p/15/../r}",            ".............os"                 },
  +        { "${FOO:p/15/12345/r}",         "1234512345123os"                 },
  +        { "${FOO:p/15/../c}",            "......os......."                 },
  +        { "${FOO:p/15/12345/c}",         "123451os1234512"                 },
  +        { "${FOO:s/os/\\x{4F}\\123/g}",  "OS"                              },
  +        { "${FOO:s/os/\\1\\x4F\\123/t}", "\\1OS"                           }
           };
       /*
           { "${HOME:s/g(res)s/x\\\\1x/g}","/homE/rEgrEssion-tEsts"          }

From ossp-cvs-owner@ossp.org  Tue Nov 13 14:33:00 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fADDWxl16511; Tue, 13 Nov 2001 14:32:59 +0100 (CET)
Date: Tue, 13 Nov 2001 14:32:59 +0100 (CET)
Message-Id: <200111131332.fADDWxl16511@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   13-Nov-2001 14:32:59
  Branch: HEAD                             Handle: 2001111313325800

  Modified files:
    ossp-pkg/var            var.c

  Log:
    Removed all debug output except for that in search_and_replace().

  Summary:
    Revision    Changes     Path
    1.6         +0  -20     ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 var.c
  --- ossp-pkg/var/var.c	2001/11/13 13:29:50	1.5
  +++ ossp-pkg/var/var.c	2001/11/13 13:32:58	1.6
  @@ -799,7 +799,6 @@
           {
           if ((src->end - p) >= 3 && p[1] == '-')
               {
  -            printf("Expand class.\n");
               if (*p > p[2])
                   return VAR_INCORRECT_TRANSPOSE_CLASS_SPEC;
               for (c = *p, d = p[2]; c <= d; ++c)
  @@ -811,7 +810,6 @@
               }
           else
               {
  -            printf("Copy verbatim.\n");
               if (!append_to_tokenbuf(dst, p, 1))
                   return VAR_OUT_OF_MEMORY;
               else
  @@ -836,9 +834,6 @@
       if ((rc = expand_class_description(replace, &dstclass)) != VAR_OK)
           goto error_return;
   
  -    printf("Transpose from '%s' to '%s'.\n",
  -           srcclass.begin, dstclass.begin);
  -
       if (srcclass.begin == srcclass.end)
           {
           rc = VAR_EMPTY_TRANSPOSE_CLASS;
  @@ -1087,9 +1082,6 @@
       size_t width = tokenbuf2int(widthstr);
       int i;
   
  -    printf("Padding data '%s' to width '%d' by filling in '%s' to position '%c'.\n",
  -           data->begin, width, fill->begin, position);
  -
       if (fill->begin == fill->end)
           return VAR_EMPTY_PADDING_FILL_STRING;
   
  @@ -1100,9 +1092,7 @@
           i = width - (data->end - data->begin);
           if (i > 0)
               {
  -            printf("Missing %d characters at the end of the data string.\n", i);
               i = i / (fill->end - fill->begin);
  -            printf("That's %d times the padding string.\n", i);
               while(i > 0)
                   {
                   if (!append_to_tokenbuf(data, fill->begin, fill->end - fill->begin))
  @@ -1110,7 +1100,6 @@
                   --i;
                   }
               i = (width - (data->end - data->begin)) % (fill->end - fill->begin);
  -            printf("Plus a remainder of %d characters.\n", i);
               if (!append_to_tokenbuf(data, fill->begin, i))
                   return VAR_OUT_OF_MEMORY;
               }
  @@ -1120,9 +1109,7 @@
           i = width - (data->end - data->begin);
           if (i > 0)
               {
  -            printf("Missing %d characters at the beginning of the data string.\n", i);
               i = i / (fill->end - fill->begin);
  -            printf("That's %d times the padding string.\n", i);
               while(i > 0)
                   {
                   if (!append_to_tokenbuf(&result, fill->begin, fill->end - fill->begin))
  @@ -1133,7 +1120,6 @@
                   --i;
                   }
               i = (width - (data->end - data->begin)) % (fill->end - fill->begin);
  -            printf("Plus a remainder of %d characters.\n", i);
               if (!append_to_tokenbuf(&result, fill->begin, i))
                   {
                   free_tokenbuf(&result);
  @@ -1156,9 +1142,7 @@
               {
               /* Create the prefix. */
   
  -            printf("Missing %d characters at the beginning of the data string.\n", i);
               i = i / (fill->end - fill->begin);
  -            printf("That's %d times the padding string.\n", i);
               while(i > 0)
                   {
                   if (!append_to_tokenbuf(&result, fill->begin, fill->end - fill->begin))
  @@ -1169,7 +1153,6 @@
                   --i;
                   }
               i = ((width - (data->end - data->begin)) / 2) % (fill->end - fill->begin);
  -            printf("Plus a remainder of %d characters.\n", i);
               if (!append_to_tokenbuf(&result, fill->begin, i))
                   {
                   free_tokenbuf(&result);
  @@ -1187,9 +1170,7 @@
               /* Append the suffix. */
   
               i = width - (result.end - result.begin);
  -            printf("Missing %d characters at the end of the data string.\n", i);
               i = i / (fill->end - fill->begin);
  -            printf("That's %d times the padding string.\n", i);
               while(i > 0)
                   {
                   if (!append_to_tokenbuf(&result, fill->begin, fill->end - fill->begin))
  @@ -1200,7 +1181,6 @@
                   --i;
                   }
               i = width - (result.end - result.begin);
  -            printf("Plus a remainder of %d characters.\n", i);
               if (!append_to_tokenbuf(&result, fill->begin, i))
                   {
                   free_tokenbuf(&result);

From ossp-cvs-owner@ossp.org  Tue Nov 13 14:33:30 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fADDXT616587; Tue, 13 Nov 2001 14:33:29 +0100 (CET)
Date: Tue, 13 Nov 2001 14:33:29 +0100 (CET)
Message-Id: <200111131333.fADDXT616587@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   13-Nov-2001 14:33:29
  Branch: HEAD                             Handle: 2001111313332800

  Modified files:
    ossp-pkg/var            var_test.c

  Log:
    The test program will print the data in each step to stdout when
    compiled with a DEBUG define.

  Summary:
    Revision    Changes     Path
    1.5         +8  -0      ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 var_test.c
  --- ossp-pkg/var/var_test.c	2001/11/13 13:29:50	1.4
  +++ ossp-pkg/var/var_test.c	2001/11/13 13:33:28	1.5
  @@ -107,14 +107,18 @@
   
       for (i = 0; i < sizeof(tests) / sizeof(struct test_case); ++i)
           {
  +#ifdef DEBUG
           printf("Test case #%02d: Original input is '%s'.\n", i, tests[i].input);
  +#endif
           rc = var_unescape(tests[i].input, strlen(tests[i].input), buffer, 0);
           if (rc != VAR_OK)
               {
               printf("Test case #%d: First var_unescape() failed with return code %d.\n", i, rc);
               return 1;
               }
  +#ifdef DEBUG
           printf("Test case #%02d: Unescaped input is '%s'.\n", i, buffer);
  +#endif
           rc = var_expand(buffer, strlen(buffer), &tmp, &tmp_len,
                           &env_lookup, NULL,
                           NULL, 0);
  @@ -123,7 +127,9 @@
               printf("Test case #%d: var_expand() failed with return code %d.\n", i, rc);
               return 1;
               }
  +#ifdef DEBUG
           printf("Test case #%02d: Expanded output is '%s'.\n", i, tmp);
  +#endif
           if (tmp_len != strlen(tests[i].expected) || tmp == NULL || memcmp(tests[i].expected, tmp, tmp_len) != 0)
               {
               printf("Test case #%d: Expected result '%s' but got '%s'.\n", i, tests[i].expected, tmp);
  @@ -135,7 +141,9 @@
               printf("Test case #%d: Second var_unescape() failed with return code %d.\n", i, rc);
               return 1;
               }
  +#ifdef DEBUG
           printf("Test case #%02d: Unescaped output is '%s'.\n\n", i, tmp);
  +#endif
           free(tmp);
           }
   

From ossp-cvs-owner@ossp.org  Tue Nov 13 14:34:27 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fADDYRD16695; Tue, 13 Nov 2001 14:34:27 +0100 (CET)
Date: Tue, 13 Nov 2001 14:34:27 +0100 (CET)
Message-Id: <200111131334.fADDYRD16695@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var Makefile
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   13-Nov-2001 14:34:27
  Branch: HEAD                             Handle: 2001111313342600

  Modified files:
    ossp-pkg/var            Makefile

  Log:
    Changed compile flags for debugging purposes.

  Summary:
    Revision    Changes     Path
    1.5         +2  -3      ossp-pkg/var/Makefile
  ____________________________________________________________________________

  Index: ossp-pkg/var/Makefile
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 Makefile
  --- ossp-pkg/var/Makefile	2001/11/13 12:47:41	1.4
  +++ ossp-pkg/var/Makefile	2001/11/13 13:34:26	1.5
  @@ -6,9 +6,8 @@
   POD2MAN		= pod2man
   
   WARNFLAGS	= -Wall -pedantic
  -OPTFLAGS	= -O3 -pipe
  -
  -CPPFLAGS	=
  +OPTFLAGS	= -g -pipe
  +CPPFLAGS	= -DDEBUG
   CFLAGS		=
   LDFLAGS		=
   

From ossp-cvs-owner@ossp.org  Tue Nov 13 15:36:32 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fADEaVM24242; Tue, 13 Nov 2001 15:36:31 +0100 (CET)
Date: Tue, 13 Nov 2001 15:36:31 +0100 (CET)
Message-Id: <200111131436.fADEaVM24242@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var Makefile
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   13-Nov-2001 15:36:31
  Branch: HEAD                             Handle: 2001111314363000

  Modified files:
    ossp-pkg/var            Makefile

  Log:
    Edited Makefile for production compilation.

  Summary:
    Revision    Changes     Path
    1.6         +7  -3      ossp-pkg/var/Makefile
  ____________________________________________________________________________

  Index: ossp-pkg/var/Makefile
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 Makefile
  --- ossp-pkg/var/Makefile	2001/11/13 13:34:26	1.5
  +++ ossp-pkg/var/Makefile	2001/11/13 14:36:30	1.6
  @@ -5,9 +5,10 @@
   RANLIB 		= ranlib
   POD2MAN		= pod2man
   
  -WARNFLAGS	= -Wall -pedantic
  -OPTFLAGS	= -g -pipe
  -CPPFLAGS	= -DDEBUG
  +WARNFLAGS	= -Wall -pedantic -Wshadow -Wpointer-arith -Wcast-align -Winline \
  +		  -Wmissing-prototypes -Wmissing-declarations -Wnested-externs
  +OPTFLAGS	= -pipe -O4
  +CPPFLAGS	= #-DDEBUG
   CFLAGS		=
   LDFLAGS		=
   
  @@ -28,6 +29,9 @@
   
   var.3:		var.pod
   	$(POD2MAN) var.pod >$@
  +
  +check:		var_test
  +	./var_test && echo "All tests succeeed."
   
   clean::
   	rm -f $(OBJS) libvarexp.a var_test.o var_test var.3

From ossp-cvs-owner@ossp.org  Tue Nov 13 15:36:57 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fADEauk24318; Tue, 13 Nov 2001 15:36:56 +0100 (CET)
Date: Tue, 13 Nov 2001 15:36:56 +0100 (CET)
Message-Id: <200111131436.fADEauk24318@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c var.h var_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   13-Nov-2001 15:36:55
  Branch: HEAD                             Handle: 2001111314365500

  Modified files:
    ossp-pkg/var            var.c var.h var_test.c

  Log:
    Implemented submatching in regular expressions and added the
    appropriate test cases.

  Summary:
    Revision    Changes     Path
    1.7         +84 -14     ossp-pkg/var/var.c
    1.4         +2  -0      ossp-pkg/var/var.h
    1.6         +7  -15     ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 var.c
  --- ossp-pkg/var/var.c	2001/11/13 13:32:58	1.6
  +++ ossp-pkg/var/var.c	2001/11/13 14:36:55	1.7
  @@ -340,6 +340,13 @@
                   return VAR_INCOMPLETE_NAMED_CHARACTER;
               switch (*src)
                   {
  +                case '\\':
  +                    if (!unescape_all)
  +                        {
  +                        *dst++ = '\\';
  +                        }
  +                    *dst++ = '\\';
  +                    break;
                   case 'n':
                       *dst++ = '\n';
                       break;
  @@ -925,6 +932,67 @@
       return VAR_OK;
       }
   
  +static int expand_regex_replace(const char* data, tokenbuf* orig, regmatch_t* pmatch, tokenbuf* expanded)
  +    {
  +    const char* p = orig->begin;
  +    size_t i;
  +
  +    init_tokenbuf(expanded);
  +
  +    while(p != orig->end)
  +        {
  +        if (*p == '\\')
  +            {
  +            if (orig->end - p <= 1)
  +                {
  +                free_tokenbuf(expanded);
  +                return VAR_INCOMPLETE_QUOTED_PAIR;
  +                }
  +            else
  +                ++p;
  +            if (*p == '\\')
  +                {
  +                if (!append_to_tokenbuf(expanded, p, 1))
  +                    {
  +                    free_tokenbuf(expanded);
  +                    return VAR_OUT_OF_MEMORY;
  +                    }
  +                ++p;
  +                continue;
  +                }
  +            if (!isdigit(*p))
  +                {
  +                free_tokenbuf(expanded);
  +                return VAR_UNKNOWN_QUOTED_PAIR_IN_REPLACE;
  +                }
  +            i = *p - '0';
  +            ++p;
  +            if (pmatch[i].rm_so == -1)
  +                {
  +                free_tokenbuf(expanded);
  +                return VAR_SUBMATCH_OUT_OF_RANGE;
  +                }
  +            if (!append_to_tokenbuf(expanded, data + pmatch[i].rm_so,
  +                                    pmatch[i].rm_eo - pmatch[i].rm_so))
  +                {
  +                free_tokenbuf(expanded);
  +                return VAR_OUT_OF_MEMORY;
  +                }
  +            }
  +        else
  +            {
  +            if (!append_to_tokenbuf(expanded, p, 1))
  +                {
  +                free_tokenbuf(expanded);
  +                return VAR_OUT_OF_MEMORY;
  +                }
  +            ++p;
  +            }
  +        }
  +
  +    return VAR_OK;
  +    }
  +
   static int search_and_replace(tokenbuf* data, tokenbuf* search, tokenbuf* replace, tokenbuf* flags)
       {
       const char* p;
  @@ -936,24 +1004,18 @@
       if (search->begin == search->end)
           return VAR_EMPTY_SEARCH_STRING;
   
  -    printf("Search '%s' in '%s' and replace it with '%s'.\n",
  -           search->begin, data->begin, replace->begin);
  -
       for (p = flags->begin; p != flags->end; ++p)
           {
           switch (tolower(*p))
               {
               case 'i':
                   case_insensitive = 1;
  -                printf("case_insensitive = 1;\n");
                   break;
               case 'g':
                   global = 1;
  -                printf("global = 1;\n");
                   break;
               case 't':
                   no_regex = 1;
  -                printf("no_regex = 1;\n");
                   break;
               default:
                   return VAR_UNKNOWN_REPLACE_FLAG;
  @@ -1003,8 +1065,9 @@
           {
           tokenbuf tmp;
           tokenbuf mydata;
  +        tokenbuf myreplace;
           regex_t preg;
  -        regmatch_t pmatch[33];
  +        regmatch_t pmatch[10];
           int regexec_flag;
   
           /* Copy the pattern and the data to our own buffer to make
  @@ -1020,9 +1083,6 @@
   
           /* Compile the pattern. */
   
  -        printf("data is.................: '%s'\n", mydata.begin);
  -        printf("regex search pattern is.: '%s'\n", tmp.begin);
  -        printf("regex replace pattern is: '%s'\n", replace->begin);
           rc = regcomp(&preg, tmp.begin, REG_EXTENDED | ((case_insensitive) ? REG_ICASE : 0));
           free_tokenbuf(&tmp);
           if (rc != 0)
  @@ -1030,7 +1090,6 @@
               free_tokenbuf(&mydata);
               return VAR_INVALID_REGEX_IN_REPLACE;
               }
  -        printf("Subexpression in pattern: '%d'\n", preg.re_nsub);
   
           /* Match the pattern and create the result string in the tmp
              buffer. */
  @@ -1043,22 +1102,33 @@
                   regexec_flag = REG_NOTBOL;
               if (regexec(&preg, p, sizeof(pmatch) / sizeof(regmatch_t), pmatch, regexec_flag) == REG_NOMATCH)
                   {
  -                printf("No match; appending remainder ('%s') to output string.\n", p);
                   append_to_tokenbuf(&tmp, p, mydata.end - p);
                   break;
                   }
               else
                   {
  +                rc = expand_regex_replace(p, replace, pmatch, &myreplace);
  +                if (rc != VAR_OK)
  +                    {
  +                    regfree(&preg);
  +                    free_tokenbuf(&tmp);
  +                    free_tokenbuf(&mydata);
  +                    return rc;
  +                    }
                   if (!append_to_tokenbuf(&tmp, p, pmatch[0].rm_so) ||
  -                    !append_to_tokenbuf(&tmp, replace->begin, replace->end - replace->begin))
  +                    !append_to_tokenbuf(&tmp, myreplace.begin, myreplace.end - myreplace.begin))
                       {
                       regfree(&preg);
                       free_tokenbuf(&tmp);
                       free_tokenbuf(&mydata);
  +                    free_tokenbuf(&myreplace);
                       return VAR_OUT_OF_MEMORY;
                       }
                   else
  -                    p += pmatch[0].rm_eo;
  +                    {
  +                    p += (pmatch[0].rm_eo > 0) ? pmatch[0].rm_eo : 1;
  +                    free_tokenbuf(&myreplace);
  +                    }
                   if (!global)
                       {
                       append_to_tokenbuf(&tmp, p, mydata.end - p);
  Index: ossp-pkg/var/var.h
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 var.h
  --- ossp-pkg/var/var.h	2001/11/13 12:46:24	1.3
  +++ ossp-pkg/var/var.h	2001/11/13 14:36:55	1.4
  @@ -37,6 +37,8 @@
   typedef enum
       {
       VAR_CALLBACK_ERROR                 = -64,
  +    VAR_SUBMATCH_OUT_OF_RANGE          = -34,
  +    VAR_UNKNOWN_QUOTED_PAIR_IN_REPLACE = -33,
       VAR_EMPTY_PADDING_FILL_STRING      = -32,
       VAR_MISSING_PADDING_WIDTH          = -31,
       VAR_MALFORMATTED_PADDING           = -30,
  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 var_test.c
  --- ossp-pkg/var/var_test.c	2001/11/13 13:33:28	1.5
  +++ ossp-pkg/var/var_test.c	2001/11/13 14:36:55	1.6
  @@ -3,7 +3,7 @@
   #include <errno.h>
   #include "var.h"
   
  -int env_lookup(void* context,
  +static int env_lookup(void* context,
                  const char* varname, size_t name_len,
                  const char** data, size_t* data_len, size_t* buffer_size)
       {
  @@ -81,12 +81,13 @@
           { "${FOO:p/15/../c}",            "......os......."                 },
           { "${FOO:p/15/12345/c}",         "123451os1234512"                 },
           { "${FOO:s/os/\\x{4F}\\123/g}",  "OS"                              },
  -        { "${FOO:s/os/\\1\\x4F\\123/t}", "\\1OS"                           }
  +        { "${FOO:s/os/\\1\\x4F\\123/t}", "\\1OS"                           },
  +        { "${HOME:s/g(res)s/x\\1x/g}",   "/home/rexresxion-tests"          },
  +        { "${HOME:s/(s+)/_\\1_/g}",      "/home/regre_ss_ion-te_s_t_s_"    },
  +        { "${HOME:s/\\x65/\\x45/g}",     "/homE/rEgrEssion-tEsts"          },
  +        { "${HOME:s/(s*)/x\\1X/g}",      "xXxXxXxXxXxXxXxXxXxXxXxssXxXxXxXxXxXxXxsXxXxsX" },
  +        { "${HOME:s/./\\\\/g}",          "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" }
           };
  -    /*
  -        { "${HOME:s/g(res)s/x\\\\1x/g}","/homE/rEgrEssion-tEsts"          }
  -        { "${HOME:s/\\x65/\\x45/g}",    "/home/regression-tests"          }
  -    */
       char*    tmp;
       size_t   tmp_len;
       var_rc_t rc;
  @@ -135,15 +136,6 @@
               printf("Test case #%d: Expected result '%s' but got '%s'.\n", i, tests[i].expected, tmp);
               return 1;
               }
  -        rc = var_unescape(tests[i].input, strlen(tests[i].input), buffer, 1);
  -        if (rc != VAR_OK)
  -            {
  -            printf("Test case #%d: Second var_unescape() failed with return code %d.\n", i, rc);
  -            return 1;
  -            }
  -#ifdef DEBUG
  -        printf("Test case #%02d: Unescaped output is '%s'.\n\n", i, tmp);
  -#endif
           free(tmp);
           }
   

From ossp-cvs-owner@ossp.org  Tue Nov 13 15:43:00 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fADEgwk25092; Tue, 13 Nov 2001 15:42:58 +0100 (CET)
Date: Tue, 13 Nov 2001 15:42:58 +0100 (CET)
Message-Id: <200111131442.fADEgwk25092@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c var.h var_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   13-Nov-2001 15:42:58
  Branch: HEAD                             Handle: 2001111314425700

  Modified files:
    ossp-pkg/var            var.c var.h var_test.c

  Log:
    Reformatted the sources to Kernighan & Ritchie style according to the
    wishes of Ralf.

  Summary:
    Revision    Changes     Path
    1.8         +1181 -1329 ossp-pkg/var/var.c
    1.5         +54 -56     ossp-pkg/var/var.h
    1.7         +114 -113   ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 var.c
  --- ossp-pkg/var/var.c	2001/11/13 14:36:55	1.7
  +++ ossp-pkg/var/var.c	2001/11/13 14:42:57	1.8
  @@ -37,212 +37,197 @@
   
   /* The default configuration for the parser. */
   
  -const var_config_t var_config_default =
  -    {
  -    '$',                        /* varinit */
  -    '{',                        /* startdelim */
  -    '}',                        /* enddelim */
  -    '\\',                       /* escape */
  -    "a-zA-Z0-9_"                /* namechars */
  -    };
  +const var_config_t var_config_default = {
  +    '$',			/* varinit */
  +    '{',			/* startdelim */
  +    '}',			/* enddelim */
  +    '\\',			/* escape */
  +    "a-zA-Z0-9_"		/* namechars */
  +};
   
   /* Routines for manipulation of tokenbufs. */
   
   #define VAR_INITIAL_BUFFER_SIZE 64
   
  -typedef struct
  -    {
  -    const char*  begin;
  -    const char*  end;
  +typedef struct {
  +    const char *begin;
  +    const char *end;
       size_t buffer_size;
  -    }
  -tokenbuf;
  +} tokenbuf;
   
  -static void init_tokenbuf(tokenbuf* buf)
  -    {
  +static void init_tokenbuf(tokenbuf * buf)
  +{
       buf->begin = buf->end = NULL;
       buf->buffer_size = 0;
  -    }
  +}
   
  -static void move_tokenbuf(tokenbuf* src, tokenbuf* dst)
  -    {
  +static void move_tokenbuf(tokenbuf * src, tokenbuf * dst)
  +{
       dst->begin = src->begin;
       dst->end = src->end;
       dst->buffer_size = src->buffer_size;
       init_tokenbuf(src);
  -    }
  +}
   
  -static int assign_to_tokenbuf(tokenbuf* buf, const char* data, size_t len)
  -    {
  -    char* p = malloc(len+1);
  -    if (p)
  -        {
  -        memcpy(p, data, len);
  -        buf->begin       = p;
  -        buf->end         = p + len;
  -        buf->buffer_size = len + 1;
  -        *((char*)(buf->end)) = '\0';
  -        return 1;
  -        }
  -    else
  -        return 0;
  -    }
  -
  -static int append_to_tokenbuf(tokenbuf* output, const char* data, size_t len)
  -    {
  -    char*  new_buffer;
  +static int assign_to_tokenbuf(tokenbuf * buf, const char *data, size_t len)
  +{
  +    char *p = malloc(len + 1);
  +    if (p) {
  +	memcpy(p, data, len);
  +	buf->begin = p;
  +	buf->end = p + len;
  +	buf->buffer_size = len + 1;
  +	*((char *) (buf->end)) = '\0';
  +	return 1;
  +    } else
  +	return 0;
  +}
  +
  +static int append_to_tokenbuf(tokenbuf * output, const char *data,
  +			      size_t len)
  +{
  +    char *new_buffer;
       size_t new_size;
   
       /* Is the tokenbuffer initialized at all? If not, allocate a
          standard-sized buffer to begin with. */
   
  -    if (output->begin == NULL)
  -        {
  -        if ((output->begin = output->end = malloc(VAR_INITIAL_BUFFER_SIZE)) == NULL)
  -            return 0;
  -        else
  -            output->buffer_size = VAR_INITIAL_BUFFER_SIZE;
  -        }
  +    if (output->begin == NULL) {
  +	if ((output->begin = output->end =
  +	     malloc(VAR_INITIAL_BUFFER_SIZE)) == NULL)
  +	    return 0;
  +	else
  +	    output->buffer_size = VAR_INITIAL_BUFFER_SIZE;
  +    }
   
       /* Does the token contain text, but no buffer has been allocated
          yet? */
   
  -    if (output->buffer_size == 0)
  -        {
  -        /* Check whether data borders to output. If, we can append
  -           simly by increasing the end pointer. */
  -
  -        if (output->end == data)
  -            {
  -            output->end += len;
  -            return 1;
  -            }
  -
  -        /* OK, so copy the contents of output into an allocated buffer
  -           so that we can append that way. */
  -
  -        else
  -            {
  -            char* tmp = malloc(output->end - output->begin + len + 1);
  -            if (!tmp)
  -                return 0;
  -            memcpy(tmp, output->begin, output->end - output->begin);
  -            output->buffer_size = output->end - output->begin;
  -            output->begin = tmp;
  -            output->end   = tmp + output->buffer_size;
  -            output->buffer_size += len + 1;
  -            }
  -        }
  +    if (output->buffer_size == 0) {
  +	/* Check whether data borders to output. If, we can append
  +	   simly by increasing the end pointer. */
  +
  +	if (output->end == data) {
  +	    output->end += len;
  +	    return 1;
  +	}
  +
  +	/* OK, so copy the contents of output into an allocated buffer
  +	   so that we can append that way. */
  +
  +	else {
  +	    char *tmp = malloc(output->end - output->begin + len + 1);
  +	    if (!tmp)
  +		return 0;
  +	    memcpy(tmp, output->begin, output->end - output->begin);
  +	    output->buffer_size = output->end - output->begin;
  +	    output->begin = tmp;
  +	    output->end = tmp + output->buffer_size;
  +	    output->buffer_size += len + 1;
  +	}
  +    }
   
       /* Does the token fit into the current buffer? If not, realloc a
          larger buffer that fits. */
   
  -    if ((output->buffer_size - (output->end - output->begin)) <= len)
  -        {
  -        new_size = output->buffer_size;
  -        do
  -            {
  -            new_size *= 2;
  -            }
  -        while ((new_size - (output->end - output->begin)) <= len);
  -        new_buffer = realloc((char*)output->begin, new_size);
  -        if (new_buffer == NULL)
  -            return 0;
  -        output->end = new_buffer + (output->end - output->begin);
  -        output->begin = new_buffer;
  -        output->buffer_size = new_size;
  -        }
  +    if ((output->buffer_size - (output->end - output->begin)) <= len) {
  +	new_size = output->buffer_size;
  +	do {
  +	    new_size *= 2;
  +	}
  +	while ((new_size - (output->end - output->begin)) <= len);
  +	new_buffer = realloc((char *) output->begin, new_size);
  +	if (new_buffer == NULL)
  +	    return 0;
  +	output->end = new_buffer + (output->end - output->begin);
  +	output->begin = new_buffer;
  +	output->buffer_size = new_size;
  +    }
   
       /* Append the data at the end of the current buffer. */
   
  -    memcpy((char*)output->end, data, len);
  +    memcpy((char *) output->end, data, len);
       output->end += len;
  -    *((char*)output->end) = '\0';
  +    *((char *) output->end) = '\0';
       return 1;
  -    }
  +}
   
  -static void free_tokenbuf(tokenbuf* buf)
  -    {
  +static void free_tokenbuf(tokenbuf * buf)
  +{
       if (buf->begin != NULL && buf->buffer_size > 0)
  -        free((char*)buf->begin);
  +	free((char *) buf->begin);
       buf->begin = buf->end = NULL;
       buf->buffer_size = 0;
  -    }
  +}
   
  -static size_t tokenbuf2int(tokenbuf* number)
  -    {
  -    const char* p;
  +static size_t tokenbuf2int(tokenbuf * number)
  +{
  +    const char *p;
       size_t num = 0;
  -    for (p = number->begin; p != number->end; ++p)
  -        {
  -        num *= 10;
  -        num += *p - '0';
  -        }
  -    return num;
  +    for (p = number->begin; p != number->end; ++p) {
  +	num *= 10;
  +	num += *p - '0';
       }
  +    return num;
  +}
   
   /* Routines for the expansion of quoted-pair expressions. */
   
   static void expand_range(char a, char b, char class[256])
  -    {
  -    do
  -        {
  -        class[(int)a] = 1;
  -        }
  -    while (++a <= b);
  +{
  +    do {
  +	class[(int) a] = 1;
       }
  +    while (++a <= b);
  +}
   
  -static var_rc_t expand_character_class(const char* desc, char class[256])
  -    {
  +static var_rc_t expand_character_class(const char *desc, char class[256])
  +{
       size_t i;
   
       /* Clear the class array. */
   
       for (i = 0; i < 256; ++i)
  -        class[i] = 0;
  +	class[i] = 0;
   
       /* Walk through the class description and set the appropriate
          entries in the array. */
   
  -    while(*desc != '\0')
  -        {
  -        if (desc[1] == '-' && desc[2] != '\0')
  -            {
  -            if (desc[0] > desc[2])
  -                return VAR_INCORRECT_CLASS_SPEC;
  -            expand_range(desc[0], desc[2], class);
  -            desc += 3;
  -            }
  -        else
  -            {
  -            class[(int)*desc] = 1;
  -            ++desc;
  -            }
  -        }
  +    while (*desc != '\0') {
  +	if (desc[1] == '-' && desc[2] != '\0') {
  +	    if (desc[0] > desc[2])
  +		return VAR_INCORRECT_CLASS_SPEC;
  +	    expand_range(desc[0], desc[2], class);
  +	    desc += 3;
  +	} else {
  +	    class[(int) *desc] = 1;
  +	    ++desc;
  +	}
  +    }
   
       return VAR_OK;
  -    }
  +}
   
   static int isoct(char c)
  -    {
  +{
       if (c >= '0' && c <= '7')
  -        return 1;
  +	return 1;
       else
  -        return 0;
  -    }
  +	return 0;
  +}
   
  -static var_rc_t expand_octal(const char** src, char** dst, const char* end)
  -    {
  +static var_rc_t expand_octal(const char **src, char **dst, const char *end)
  +{
       unsigned char c;
   
       if (end - *src < 3)
  -        return VAR_INCOMPLETE_OCTAL;
  +	return VAR_INCOMPLETE_OCTAL;
       if (!isoct(**src) || !isoct((*src)[1]) || !isoct((*src)[2]))
  -        return VAR_INVALID_OCTAL;
  +	return VAR_INVALID_OCTAL;
   
       c = **src - '0';
       if (c > 3)
  -        return VAR_OCTAL_TOO_LARGE;
  +	return VAR_OCTAL_TOO_LARGE;
       c *= 8;
       ++(*src);
   
  @@ -252,225 +237,217 @@
   
       c += **src - '0';
   
  -    **dst = (char)c;
  +    **dst = (char) c;
       ++(*dst);
       return VAR_OK;
  -    }
  +}
   
   static int ishex(char c)
  -    {
  +{
       if ((c >= '0' && c <= '9') ||
  -        (c >= 'a' && c <= 'f') ||
  -        (c >= 'A' && c <= 'F'))
  -        return 1;
  +	(c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'))
  +	return 1;
       else
  -        return 0;
  -    }
  +	return 0;
  +}
   
  -static var_rc_t expand_simple_hex(const char** src, char** dst, const char* end)
  -    {
  +static var_rc_t expand_simple_hex(const char **src, char **dst,
  +				  const char *end)
  +{
       unsigned char c = 0;
   
       if (end - *src < 2)
  -        return VAR_INCOMPLETE_HEX;
  +	return VAR_INCOMPLETE_HEX;
       if (!ishex(**src) || !ishex((*src)[1]))
  -        return VAR_INVALID_HEX;
  +	return VAR_INVALID_HEX;
   
       if (**src >= '0' && **src <= '9')
  -        c = **src - '0';
  +	c = **src - '0';
       else if (c >= 'a' && c <= 'f')
  -        c = **src - 'a' + 10;
  +	c = **src - 'a' + 10;
       else if (c >= 'A' && c <= 'F')
  -        c = **src - 'A' + 10;
  +	c = **src - 'A' + 10;
   
       c = c << 4;
       ++(*src);
   
       if (**src >= '0' && **src <= '9')
  -        c += **src - '0';
  +	c += **src - '0';
       else if (**src >= 'a' && **src <= 'f')
  -        c += **src - 'a' + 10;
  +	c += **src - 'a' + 10;
       else if (**src >= 'A' && **src <= 'F')
  -        c += **src - 'A' + 10;
  +	c += **src - 'A' + 10;
   
  -    **dst = (char)c;
  +    **dst = (char) c;
       ++(*dst);
       return VAR_OK;
  -    }
  +}
   
  -static var_rc_t expand_grouped_hex(const char** src, char** dst, const char* end)
  -    {
  +static var_rc_t expand_grouped_hex(const char **src, char **dst,
  +				   const char *end)
  +{
       var_rc_t rc;
   
  -    while (*src < end && **src != '}')
  -        {
  -        if ((rc = expand_simple_hex(src, dst, end)) != 0)
  -            return rc;
  -        ++(*src);
  -        }
  +    while (*src < end && **src != '}') {
  +	if ((rc = expand_simple_hex(src, dst, end)) != 0)
  +	    return rc;
  +	++(*src);
  +    }
       if (*src == end)
  -        return VAR_INCOMPLETE_GROUPED_HEX;
  +	return VAR_INCOMPLETE_GROUPED_HEX;
   
       return VAR_OK;
  -    }
  +}
   
  -static var_rc_t expand_hex(const char** src, char** dst, const char* end)
  -    {
  +static var_rc_t expand_hex(const char **src, char **dst, const char *end)
  +{
       if (*src == end)
  -        return VAR_INCOMPLETE_HEX;
  -    if (**src == '{')
  -        {
  -        ++(*src);
  -        return expand_grouped_hex(src, dst, end);
  -        }
  -    else
  -        return expand_simple_hex(src, dst, end);
  -    }
  -
  -var_rc_t var_unescape(const char* src, size_t len, char* dst, int unescape_all)
  -    {
  -    const char* end = src + len;
  +	return VAR_INCOMPLETE_HEX;
  +    if (**src == '{') {
  +	++(*src);
  +	return expand_grouped_hex(src, dst, end);
  +    } else
  +	return expand_simple_hex(src, dst, end);
  +}
  +
  +var_rc_t var_unescape(const char *src, size_t len, char *dst,
  +		      int unescape_all)
  +{
  +    const char *end = src + len;
       var_rc_t rc;
   
  -    while (src < end)
  -        {
  -        if (*src == '\\')
  -            {
  -            if (++src == end)
  -                return VAR_INCOMPLETE_NAMED_CHARACTER;
  -            switch (*src)
  -                {
  -                case '\\':
  -                    if (!unescape_all)
  -                        {
  -                        *dst++ = '\\';
  -                        }
  -                    *dst++ = '\\';
  -                    break;
  -                case 'n':
  -                    *dst++ = '\n';
  -                    break;
  -                case 't':
  -                    *dst++ = '\t';
  -                    break;
  -                case 'r':
  -                    *dst++ = '\r';
  -                    break;
  -                case 'x':
  -                    ++src;
  -                    if ((rc = expand_hex(&src, &dst, end)) != 0)
  -                        return rc;
  -                    break;
  -                case '0':
  -                case '1':
  -                case '2':
  -                case '3':
  -                case '4':
  -                case '5':
  -                case '6':
  -                case '7':
  -                case '8':
  -                case '9':
  -                    if (end - src >= 3 && isdigit(src[1]) && isdigit(src[2]))
  -                        {
  -                        if ((rc = expand_octal(&src, &dst, end)) != 0)
  -                            return rc;
  -                        break;
  -                        }
  -                default:
  -                    if (!unescape_all)
  -                        {
  -                        *dst++ = '\\';
  -                        }
  -                    *dst++ = *src;
  -                }
  -            ++src;
  -            }
  -        else
  -            *dst++ = *src++;
  -        }
  +    while (src < end) {
  +	if (*src == '\\') {
  +	    if (++src == end)
  +		return VAR_INCOMPLETE_NAMED_CHARACTER;
  +	    switch (*src) {
  +	    case '\\':
  +		if (!unescape_all) {
  +		    *dst++ = '\\';
  +		}
  +		*dst++ = '\\';
  +		break;
  +	    case 'n':
  +		*dst++ = '\n';
  +		break;
  +	    case 't':
  +		*dst++ = '\t';
  +		break;
  +	    case 'r':
  +		*dst++ = '\r';
  +		break;
  +	    case 'x':
  +		++src;
  +		if ((rc = expand_hex(&src, &dst, end)) != 0)
  +		    return rc;
  +		break;
  +	    case '0':
  +	    case '1':
  +	    case '2':
  +	    case '3':
  +	    case '4':
  +	    case '5':
  +	    case '6':
  +	    case '7':
  +	    case '8':
  +	    case '9':
  +		if (end - src >= 3 && isdigit(src[1]) && isdigit(src[2])) {
  +		    if ((rc = expand_octal(&src, &dst, end)) != 0)
  +			return rc;
  +		    break;
  +		}
  +	    default:
  +		if (!unescape_all) {
  +		    *dst++ = '\\';
  +		}
  +		*dst++ = *src;
  +	    }
  +	    ++src;
  +	} else
  +	    *dst++ = *src++;
  +    }
       *dst = '\0';
       return VAR_OK;
  -    }
  +}
   
   /* The recursive-descent parser for variable expressions. */
   
  -static int variable(const char*, const char*, const var_config_t*,
  -                    const char[256], var_cb_t, void*, int, tokenbuf*);
  -static int command(const char*, const char*, const var_config_t*,
  -                   const char[256], var_cb_t, void*, int, tokenbuf*);
  -
  -static int text(const char* begin, const char* end, char varinit, char escape)
  -    {
  -    const char* p;
  -    for (p = begin; p != end && *p != varinit; ++p)
  -        {
  -        if (*p == escape)
  -            {
  -            if (p+1 == end)
  -                return VAR_INCOMPLETE_QUOTED_PAIR;
  -            else
  -                ++p;
  -            }
  -        }
  -    return p - begin;
  +static int variable(const char *, const char *, const var_config_t *,
  +		    const char[256], var_cb_t, void *, int, tokenbuf *);
  +static int command(const char *, const char *, const var_config_t *,
  +		   const char[256], var_cb_t, void *, int, tokenbuf *);
  +
  +static int text(const char *begin, const char *end, char varinit,
  +		char escape)
  +{
  +    const char *p;
  +    for (p = begin; p != end && *p != varinit; ++p) {
  +	if (*p == escape) {
  +	    if (p + 1 == end)
  +		return VAR_INCOMPLETE_QUOTED_PAIR;
  +	    else
  +		++p;
  +	}
       }
  -
  -static int varname(const char* begin, const char* end, const char nameclass[256])
  -    {
  -    const char* p;
  -    for (p = begin; p != end && nameclass[(int)*p]; ++p)
  -        ;
       return p - begin;
  -    }
  +}
   
  -static int number(const char* begin, const char* end)
  -    {
  -    const char* p;
  -    for (p = begin; p != end && isdigit(*p); ++p)
  -        ;
  +static int varname(const char *begin, const char *end,
  +		   const char nameclass[256])
  +{
  +    const char *p;
  +    for (p = begin; p != end && nameclass[(int) *p]; ++p);
       return p - begin;
  -    }
  +}
   
  -static int substext(const char* begin, const char* end, const var_config_t* config)
  -    {
  -    const char* p;
  -    for (p = begin; p != end && *p != config->varinit && *p != '/'; ++p)
  -        {
  -        if (*p == config->escape)
  -            {
  -            if (p+1 == end)
  -                return VAR_INCOMPLETE_QUOTED_PAIR;
  -            else
  -                ++p;
  -            }
  -        }
  +static int number(const char *begin, const char *end)
  +{
  +    const char *p;
  +    for (p = begin; p != end && isdigit(*p); ++p);
       return p - begin;
  -    }
  +}
   
  -static int exptext(const char* begin, const char* end, const var_config_t* config)
  -    {
  -    const char* p;
  -    for (p = begin; p != end && *p != config->varinit && *p != config->enddelim && *p != ':'; ++p)
  -        {
  -        if (*p == config->escape)
  -            {
  -            if (p+1 == end)
  -                return VAR_INCOMPLETE_QUOTED_PAIR;
  -            else
  -                ++p;
  -            }
  -        }
  +static int substext(const char *begin, const char *end,
  +		    const var_config_t * config)
  +{
  +    const char *p;
  +    for (p = begin; p != end && *p != config->varinit && *p != '/'; ++p) {
  +	if (*p == config->escape) {
  +	    if (p + 1 == end)
  +		return VAR_INCOMPLETE_QUOTED_PAIR;
  +	    else
  +		++p;
  +	}
  +    }
       return p - begin;
  +}
  +
  +static int exptext(const char *begin, const char *end,
  +		   const var_config_t * config)
  +{
  +    const char *p;
  +    for (p = begin;
  +	 p != end && *p != config->varinit && *p != config->enddelim
  +	 && *p != ':'; ++p) {
  +	if (*p == config->escape) {
  +	    if (p + 1 == end)
  +		return VAR_INCOMPLETE_QUOTED_PAIR;
  +	    else
  +		++p;
  +	}
       }
  +    return p - begin;
  +}
   
   
  -static int expression(const char* begin, const char* end, const var_config_t* config,
  -                      const char nameclass[256], var_cb_t lookup, void* lookup_context,
  -                      int force_expand, tokenbuf* result)
  -    {
  -    const char* p = begin;
  -    const char* data;
  +static int expression(const char *begin, const char *end,
  +		      const var_config_t * config,
  +		      const char nameclass[256], var_cb_t lookup,
  +		      void *lookup_context, int force_expand,
  +		      tokenbuf * result)
  +{
  +    const char *p = begin;
  +    const char *data;
       size_t len, buffer_size;
       int failed = 0;
       int rc;
  @@ -486,131 +463,116 @@
       /* Expect STARTDELIM. */
   
       if (p == end || *p != config->startdelim)
  -        return 0;
  +	return 0;
   
       if (++p == end)
  -        return VAR_INCOMPLETE_VARIABLE_SPEC;
  +	return VAR_INCOMPLETE_VARIABLE_SPEC;
   
       /* Get the name of the variable to expand. The name may consist of
          an arbitrary number of VARNAMEs and VARIABLEs. */
   
  -    do
  -        {
  -        rc = varname(p, end, nameclass);
  -        if (rc < 0)
  -            goto error_return;
  -        else if (rc > 0)
  -            {
  -            if (!append_to_tokenbuf(&name, p, rc))
  -                {
  -                rc = VAR_OUT_OF_MEMORY;
  -                goto error_return;
  -                }
  -            else
  -                p += rc;
  -            }
  -
  -        rc = variable(p, end, config, nameclass, lookup, lookup_context, force_expand, &tmp);
  -        if (rc < 0)
  -            goto error_return;
  -        else if (rc > 0)
  -            {
  -            if (!append_to_tokenbuf(&name, tmp.begin, tmp.end - tmp.begin))
  -                {
  -                rc = VAR_OUT_OF_MEMORY;
  -                goto error_return;
  -                }
  -            else
  -                p += rc;
  -            }
  -        }
  +    do {
  +	rc = varname(p, end, nameclass);
  +	if (rc < 0)
  +	    goto error_return;
  +	else if (rc > 0) {
  +	    if (!append_to_tokenbuf(&name, p, rc)) {
  +		rc = VAR_OUT_OF_MEMORY;
  +		goto error_return;
  +	    } else
  +		p += rc;
  +	}
  +
  +	rc = variable(p, end, config, nameclass, lookup, lookup_context,
  +		      force_expand, &tmp);
  +	if (rc < 0)
  +	    goto error_return;
  +	else if (rc > 0) {
  +	    if (!append_to_tokenbuf(&name, tmp.begin, tmp.end - tmp.begin)) {
  +		rc = VAR_OUT_OF_MEMORY;
  +		goto error_return;
  +	    } else
  +		p += rc;
  +	}
  +    }
       while (rc > 0);
   
       /* We must have the complete variable name now, so make sure we
          do. */
   
  -    if (name.begin == name.end)
  -        {
  -        rc = VAR_INCOMPLETE_VARIABLE_SPEC;
  -        goto error_return;
  -        }
  +    if (name.begin == name.end) {
  +	rc = VAR_INCOMPLETE_VARIABLE_SPEC;
  +	goto error_return;
  +    }
   
       /* Now we have the name of the variable stored in "name". We
          expect an ENDDELIM here. */
   
  -    if (p == end || (*p != config->enddelim && *p != ':'))
  -        {
  -        rc = VAR_INCOMPLETE_VARIABLE_SPEC;
  -        goto error_return;
  -        }
  -    else
  -        ++p;
  +    if (p == end || (*p != config->enddelim && *p != ':')) {
  +	rc = VAR_INCOMPLETE_VARIABLE_SPEC;
  +	goto error_return;
  +    } else
  +	++p;
   
       /* Use the lookup callback to get the variable's contents. */
   
  -    rc = (*lookup)(lookup_context, name.begin, name.end - name.begin, &data, &len, &buffer_size);
  +    rc = (*lookup) (lookup_context, name.begin, name.end - name.begin,
  +		    &data, &len, &buffer_size);
       if (rc < 0)
  -        goto error_return;
  -    else if (rc == 0)
  -        {
  -        /* The variable is undefined. What we'll do now depends on the
  -           force_expand flag. */
  -
  -        if (force_expand)
  -            {
  -            rc = VAR_UNDEFINED_VARIABLE;
  -            goto error_return;
  -            }
  -        else
  -            {
  -            /* Initialize result to point back to the original text in
  -               the buffer. */
  -
  -            result->begin       = begin-1;
  -            result->end         = p;
  -            result->buffer_size = 0;
  -            failed              = 1;
  -            }
  -        }
  -    else
  -        {
  -        /* The preliminary result is the contents of the variable.
  -           This may be modified by the commands that may follow. */
  -
  -        result->begin       = data;
  -        result->end         = data + len;
  -        result->buffer_size = buffer_size;
  -        }
  -
  -    if (p[-1] == ':')
  -        {
  -        /* Parse and execute commands. */
  -
  -        free_tokenbuf(&tmp);
  -        --p;
  -        while (p != end && *p == ':')
  -            {
  -            ++p;
  -            if (!failed)
  -                rc = command(p, end, config, nameclass, lookup, lookup_context, force_expand, result);
  -            else
  -                rc = command(p, end, config, nameclass, lookup, lookup_context, force_expand, &tmp);
  -            if (rc < 0)
  -                goto error_return;
  -            p += rc;
  -            if (failed)
  -                result->end += rc;
  -            }
  -
  -        if (p == end || *p != config->enddelim)
  -            {
  -            rc = VAR_INCOMPLETE_VARIABLE_SPEC;
  -            goto error_return;
  -            }
  -        ++p;
  -        if (failed)
  -            ++result->end;
  -        }
  +	goto error_return;
  +    else if (rc == 0) {
  +	/* The variable is undefined. What we'll do now depends on the
  +	   force_expand flag. */
  +
  +	if (force_expand) {
  +	    rc = VAR_UNDEFINED_VARIABLE;
  +	    goto error_return;
  +	} else {
  +	    /* Initialize result to point back to the original text in
  +	       the buffer. */
  +
  +	    result->begin = begin - 1;
  +	    result->end = p;
  +	    result->buffer_size = 0;
  +	    failed = 1;
  +	}
  +    } else {
  +	/* The preliminary result is the contents of the variable.
  +	   This may be modified by the commands that may follow. */
  +
  +	result->begin = data;
  +	result->end = data + len;
  +	result->buffer_size = buffer_size;
  +    }
  +
  +    if (p[-1] == ':') {
  +	/* Parse and execute commands. */
  +
  +	free_tokenbuf(&tmp);
  +	--p;
  +	while (p != end && *p == ':') {
  +	    ++p;
  +	    if (!failed)
  +		rc = command(p, end, config, nameclass, lookup,
  +			     lookup_context, force_expand, result);
  +	    else
  +		rc = command(p, end, config, nameclass, lookup,
  +			     lookup_context, force_expand, &tmp);
  +	    if (rc < 0)
  +		goto error_return;
  +	    p += rc;
  +	    if (failed)
  +		result->end += rc;
  +	}
  +
  +	if (p == end || *p != config->enddelim) {
  +	    rc = VAR_INCOMPLETE_VARIABLE_SPEC;
  +	    goto error_return;
  +	}
  +	++p;
  +	if (failed)
  +	    ++result->end;
  +    }
   
       /* Exit gracefully. */
   
  @@ -625,14 +587,15 @@
       free_tokenbuf(&tmp);
       free_tokenbuf(result);
       return rc;
  -    }
  +}
   
  -static int variable(const char* begin, const char* end, const var_config_t* config,
  -                    const char nameclass[256], var_cb_t lookup, void* lookup_context,
  -                    int force_expand, tokenbuf* result)
  -    {
  -    const char* p = begin;
  -    const char* data;
  +static int variable(const char *begin, const char *end,
  +		    const var_config_t * config, const char nameclass[256],
  +		    var_cb_t lookup, void *lookup_context,
  +		    int force_expand, tokenbuf * result)
  +{
  +    const char *p = begin;
  +    const char *data;
       size_t len, buffer_size;
       int rc, rc2;
   
  @@ -644,56 +607,54 @@
       /* Expect VARINIT. */
   
       if (p == end || *p != config->varinit)
  -        return 0;
  +	return 0;
   
       if (++p == end)
  -        return VAR_INCOMPLETE_VARIABLE_SPEC;
  +	return VAR_INCOMPLETE_VARIABLE_SPEC;
   
       /* Try to read the variable name. If that fails, we're parsing a
          complex expression. */
   
       rc = varname(p, end, nameclass);
       if (rc < 0)
  -        return rc;
  -    else if (rc > 0)
  -        {
  -        rc2 = (*lookup)(lookup_context, p, rc, &data, &len, &buffer_size);
  -        if (rc2 < 0)
  -            return rc2;
  -        else if (rc2 == 0)
  -            {
  -            if (force_expand)
  -                return VAR_UNDEFINED_VARIABLE;
  -            else
  -                {
  -                result->begin       = begin;
  -                result->end         = begin + 1 + rc;
  -                result->buffer_size = 0;
  -                return 1 + rc;
  -                }
  -            }
  -        else
  -            {
  -            result->begin       = data;
  -            result->end         = data + len;
  -            result->buffer_size = buffer_size;
  -            return 1 + rc;
  -            }
  -        }
  +	return rc;
  +    else if (rc > 0) {
  +	rc2 = (*lookup) (lookup_context, p, rc, &data, &len, &buffer_size);
  +	if (rc2 < 0)
  +	    return rc2;
  +	else if (rc2 == 0) {
  +	    if (force_expand)
  +		return VAR_UNDEFINED_VARIABLE;
  +	    else {
  +		result->begin = begin;
  +		result->end = begin + 1 + rc;
  +		result->buffer_size = 0;
  +		return 1 + rc;
  +	    }
  +	} else {
  +	    result->begin = data;
  +	    result->end = data + len;
  +	    result->buffer_size = buffer_size;
  +	    return 1 + rc;
  +	}
  +    }
   
       /* OK, we're dealing with a complex expression here. */
   
  -    rc = expression(p, end, config, nameclass, lookup, lookup_context, force_expand, result);
  +    rc = expression(p, end, config, nameclass, lookup, lookup_context,
  +		    force_expand, result);
       if (rc > 0)
  -        ++rc;
  +	++rc;
       return rc;
  -    }
  +}
   
  -static int exptext_or_variable(const char* begin, const char* end, const var_config_t* config,
  -                        const char nameclass[256], var_cb_t lookup, void* lookup_context,
  -                        int force_expand, tokenbuf* result)
  -    {
  -    const char* p = begin;
  +static int exptext_or_variable(const char *begin, const char *end,
  +			       const var_config_t * config,
  +			       const char nameclass[256], var_cb_t lookup,
  +			       void *lookup_context, int force_expand,
  +			       tokenbuf * result)
  +{
  +    const char *p = begin;
       tokenbuf tmp;
       int rc;
   
  @@ -701,37 +662,33 @@
       init_tokenbuf(&tmp);
   
       if (begin == end)
  -        return 0;
  +	return 0;
   
  -    do
  -        {
  -        rc = exptext(p, end, config);
  -        if (rc < 0)
  -            goto error_return;
  -        else if (rc > 0)
  -            {
  -            if (!append_to_tokenbuf(result, p, rc))
  -                {
  -                rc = VAR_OUT_OF_MEMORY;
  -                goto error_return;
  -                }
  -            else
  -                p += rc;
  -            }
  -
  -        rc = variable(p, end, config, nameclass, lookup, lookup_context, force_expand, &tmp);
  -        if (rc < 0)
  -            goto error_return;
  -        else if (rc > 0)
  -            {
  -            p += rc;
  -            if (!append_to_tokenbuf(result, tmp.begin, tmp.end - tmp.begin))
  -                {
  -                rc = VAR_OUT_OF_MEMORY;
  -                goto error_return;
  -                }
  -            }
  -        }
  +    do {
  +	rc = exptext(p, end, config);
  +	if (rc < 0)
  +	    goto error_return;
  +	else if (rc > 0) {
  +	    if (!append_to_tokenbuf(result, p, rc)) {
  +		rc = VAR_OUT_OF_MEMORY;
  +		goto error_return;
  +	    } else
  +		p += rc;
  +	}
  +
  +	rc = variable(p, end, config, nameclass, lookup, lookup_context,
  +		      force_expand, &tmp);
  +	if (rc < 0)
  +	    goto error_return;
  +	else if (rc > 0) {
  +	    p += rc;
  +	    if (!append_to_tokenbuf
  +		(result, tmp.begin, tmp.end - tmp.begin)) {
  +		rc = VAR_OUT_OF_MEMORY;
  +		goto error_return;
  +	    }
  +	}
  +    }
       while (rc > 0);
   
       free_tokenbuf(&tmp);
  @@ -741,13 +698,15 @@
       free_tokenbuf(&tmp);
       free_tokenbuf(result);
       return rc;
  -    }
  +}
   
  -static int substext_or_variable(const char* begin, const char* end, const var_config_t* config,
  -                                const char nameclass[256], var_cb_t lookup, void* lookup_context,
  -                                int force_expand, tokenbuf* result)
  -    {
  -    const char* p = begin;
  +static int substext_or_variable(const char *begin, const char *end,
  +				const var_config_t * config,
  +				const char nameclass[256], var_cb_t lookup,
  +				void *lookup_context, int force_expand,
  +				tokenbuf * result)
  +{
  +    const char *p = begin;
       tokenbuf tmp;
       int rc;
   
  @@ -755,37 +714,33 @@
       init_tokenbuf(&tmp);
   
       if (begin == end)
  -        return 0;
  +	return 0;
   
  -    do
  -        {
  -        rc = substext(p, end, config);
  -        if (rc < 0)
  -            goto error_return;
  -        else if (rc > 0)
  -            {
  -            if (!append_to_tokenbuf(result, p, rc))
  -                {
  -                rc = VAR_OUT_OF_MEMORY;
  -                goto error_return;
  -                }
  -            else
  -                p += rc;
  -            }
  -
  -        rc = variable(p, end, config, nameclass, lookup, lookup_context, force_expand, &tmp);
  -        if (rc < 0)
  -            goto error_return;
  -        else if (rc > 0)
  -            {
  -            p += rc;
  -            if (!append_to_tokenbuf(result, tmp.begin, tmp.end - tmp.begin))
  -                {
  -                rc = VAR_OUT_OF_MEMORY;
  -                goto error_return;
  -                }
  -            }
  -        }
  +    do {
  +	rc = substext(p, end, config);
  +	if (rc < 0)
  +	    goto error_return;
  +	else if (rc > 0) {
  +	    if (!append_to_tokenbuf(result, p, rc)) {
  +		rc = VAR_OUT_OF_MEMORY;
  +		goto error_return;
  +	    } else
  +		p += rc;
  +	}
  +
  +	rc = variable(p, end, config, nameclass, lookup, lookup_context,
  +		      force_expand, &tmp);
  +	if (rc < 0)
  +	    goto error_return;
  +	else if (rc > 0) {
  +	    p += rc;
  +	    if (!append_to_tokenbuf
  +		(result, tmp.begin, tmp.end - tmp.begin)) {
  +		rc = VAR_OUT_OF_MEMORY;
  +		goto error_return;
  +	    }
  +	}
  +    }
       while (rc > 0);
   
       free_tokenbuf(&tmp);
  @@ -795,41 +750,37 @@
       free_tokenbuf(&tmp);
       free_tokenbuf(result);
       return rc;
  -    }
  +}
   
   
  -static int expand_class_description(tokenbuf* src, tokenbuf* dst)
  -    {
  +static int expand_class_description(tokenbuf * src, tokenbuf * dst)
  +{
       unsigned char c, d;
  -    const char* p = src->begin;
  -    while(p != src->end)
  -        {
  -        if ((src->end - p) >= 3 && p[1] == '-')
  -            {
  -            if (*p > p[2])
  -                return VAR_INCORRECT_TRANSPOSE_CLASS_SPEC;
  -            for (c = *p, d = p[2]; c <= d; ++c)
  -                {
  -                if (!append_to_tokenbuf(dst, (char*)&c, 1))
  -                    return VAR_OUT_OF_MEMORY;
  -                }
  -            p += 3;
  -            }
  -        else
  -            {
  -            if (!append_to_tokenbuf(dst, p, 1))
  -                return VAR_OUT_OF_MEMORY;
  -            else
  -                ++p;
  -            }
  -        }
  -    return VAR_OK;
  +    const char *p = src->begin;
  +    while (p != src->end) {
  +	if ((src->end - p) >= 3 && p[1] == '-') {
  +	    if (*p > p[2])
  +		return VAR_INCORRECT_TRANSPOSE_CLASS_SPEC;
  +	    for (c = *p, d = p[2]; c <= d; ++c) {
  +		if (!append_to_tokenbuf(dst, (char *) &c, 1))
  +		    return VAR_OUT_OF_MEMORY;
  +	    }
  +	    p += 3;
  +	} else {
  +	    if (!append_to_tokenbuf(dst, p, 1))
  +		return VAR_OUT_OF_MEMORY;
  +	    else
  +		++p;
  +	}
       }
  +    return VAR_OK;
  +}
   
  -static int transpose(tokenbuf* data, tokenbuf* search, tokenbuf* replace)
  -    {
  +static int transpose(tokenbuf * data, tokenbuf * search,
  +		     tokenbuf * replace)
  +{
       tokenbuf srcclass, dstclass;
  -    const char* p;
  +    const char *p;
       int rc;
       size_t i;
   
  @@ -837,43 +788,37 @@
       init_tokenbuf(&dstclass);
   
       if ((rc = expand_class_description(search, &srcclass)) != VAR_OK)
  -        goto error_return;
  +	goto error_return;
       if ((rc = expand_class_description(replace, &dstclass)) != VAR_OK)
  -        goto error_return;
  +	goto error_return;
   
  -    if (srcclass.begin == srcclass.end)
  -        {
  -        rc = VAR_EMPTY_TRANSPOSE_CLASS;
  -        goto error_return;
  -        }
  -    if ((srcclass.end - srcclass.begin) != (dstclass.end - dstclass.begin))
  -        {
  -        rc = VAR_TRANSPOSE_CLASSES_MISMATCH;
  -        goto error_return;
  -        }
  -
  -    if (data->buffer_size == 0)
  -        {
  -        tokenbuf tmp;
  -        if (!assign_to_tokenbuf(&tmp, data->begin, data->end - data->begin))
  -            {
  -            rc = VAR_OUT_OF_MEMORY;
  -            goto error_return;
  -            }
  -        move_tokenbuf(&tmp, data);
  -        }
  -
  -    for (p = data->begin; p != data->end; ++p)
  -        {
  -        for (i = 0; i <= (srcclass.end - srcclass.begin); ++i)
  -            {
  -            if (*p == srcclass.begin[i])
  -                {
  -                *((char*)p) = dstclass.begin[i];
  -                break;
  -                }
  -            }
  -        }
  +    if (srcclass.begin == srcclass.end) {
  +	rc = VAR_EMPTY_TRANSPOSE_CLASS;
  +	goto error_return;
  +    }
  +    if ((srcclass.end - srcclass.begin) != (dstclass.end - dstclass.begin)) {
  +	rc = VAR_TRANSPOSE_CLASSES_MISMATCH;
  +	goto error_return;
  +    }
  +
  +    if (data->buffer_size == 0) {
  +	tokenbuf tmp;
  +	if (!assign_to_tokenbuf
  +	    (&tmp, data->begin, data->end - data->begin)) {
  +	    rc = VAR_OUT_OF_MEMORY;
  +	    goto error_return;
  +	}
  +	move_tokenbuf(&tmp, data);
  +    }
  +
  +    for (p = data->begin; p != data->end; ++p) {
  +	for (i = 0; i <= (srcclass.end - srcclass.begin); ++i) {
  +	    if (*p == srcclass.begin[i]) {
  +		*((char *) p) = dstclass.begin[i];
  +		break;
  +	    }
  +	}
  +    }
   
       free_tokenbuf(&srcclass);
       free_tokenbuf(&dstclass);
  @@ -885,393 +830,356 @@
       free_tokenbuf(&srcclass);
       free_tokenbuf(&dstclass);
       return rc;
  -    }
  +}
   
  -static int cut_out_offset(tokenbuf* data, tokenbuf* number1, tokenbuf* number2, int isrange)
  -    {
  +static int cut_out_offset(tokenbuf * data, tokenbuf * number1,
  +			  tokenbuf * number2, int isrange)
  +{
       tokenbuf res;
  -    const char* p;
  +    const char *p;
       size_t num1 = tokenbuf2int(number1);
       size_t num2 = tokenbuf2int(number2);
   
       /* Determine begin of result string. */
   
       if ((data->end - data->begin) < num1)
  -        return VAR_OFFSET_OUT_OF_BOUNDS;
  +	return VAR_OFFSET_OUT_OF_BOUNDS;
       else
  -        p = data->begin + num1;
  +	p = data->begin + num1;
   
       /* If num2 is zero, we copy the rest from there. */
   
  -    if (num2 == 0)
  -        {
  -        if (!assign_to_tokenbuf(&res, p, data->end - p))
  -            return VAR_OUT_OF_MEMORY;
  -        }
  -    else                        /* OK, then use num2. */
  -        {
  -        if (isrange)
  -            {
  -            if ((p + num2) > data->end)
  -                return VAR_RANGE_OUT_OF_BOUNDS;
  -            if (!assign_to_tokenbuf(&res, p, num2))
  -                return VAR_OUT_OF_MEMORY;
  -            }
  -        else
  -            {
  -            if (num2 < num1)
  -                return VAR_OFFSET_LOGIC_ERROR;
  -            if ((data->begin + num2) > data->end)
  -                return VAR_RANGE_OUT_OF_BOUNDS;
  -            if (!assign_to_tokenbuf(&res, p, (data->begin + num2) - p))
  -                return VAR_OUT_OF_MEMORY;
  -            }
  -        }
  +    if (num2 == 0) {
  +	if (!assign_to_tokenbuf(&res, p, data->end - p))
  +	    return VAR_OUT_OF_MEMORY;
  +    } else {			/* OK, then use num2. */
  +
  +	if (isrange) {
  +	    if ((p + num2) > data->end)
  +		return VAR_RANGE_OUT_OF_BOUNDS;
  +	    if (!assign_to_tokenbuf(&res, p, num2))
  +		return VAR_OUT_OF_MEMORY;
  +	} else {
  +	    if (num2 < num1)
  +		return VAR_OFFSET_LOGIC_ERROR;
  +	    if ((data->begin + num2) > data->end)
  +		return VAR_RANGE_OUT_OF_BOUNDS;
  +	    if (!assign_to_tokenbuf(&res, p, (data->begin + num2) - p))
  +		return VAR_OUT_OF_MEMORY;
  +	}
  +    }
       free_tokenbuf(data);
       move_tokenbuf(&res, data);
       return VAR_OK;
  -    }
  +}
   
  -static int expand_regex_replace(const char* data, tokenbuf* orig, regmatch_t* pmatch, tokenbuf* expanded)
  -    {
  -    const char* p = orig->begin;
  +static int expand_regex_replace(const char *data, tokenbuf * orig,
  +				regmatch_t * pmatch, tokenbuf * expanded)
  +{
  +    const char *p = orig->begin;
       size_t i;
   
       init_tokenbuf(expanded);
   
  -    while(p != orig->end)
  -        {
  -        if (*p == '\\')
  -            {
  -            if (orig->end - p <= 1)
  -                {
  -                free_tokenbuf(expanded);
  -                return VAR_INCOMPLETE_QUOTED_PAIR;
  -                }
  -            else
  -                ++p;
  -            if (*p == '\\')
  -                {
  -                if (!append_to_tokenbuf(expanded, p, 1))
  -                    {
  -                    free_tokenbuf(expanded);
  -                    return VAR_OUT_OF_MEMORY;
  -                    }
  -                ++p;
  -                continue;
  -                }
  -            if (!isdigit(*p))
  -                {
  -                free_tokenbuf(expanded);
  -                return VAR_UNKNOWN_QUOTED_PAIR_IN_REPLACE;
  -                }
  -            i = *p - '0';
  -            ++p;
  -            if (pmatch[i].rm_so == -1)
  -                {
  -                free_tokenbuf(expanded);
  -                return VAR_SUBMATCH_OUT_OF_RANGE;
  -                }
  -            if (!append_to_tokenbuf(expanded, data + pmatch[i].rm_so,
  -                                    pmatch[i].rm_eo - pmatch[i].rm_so))
  -                {
  -                free_tokenbuf(expanded);
  -                return VAR_OUT_OF_MEMORY;
  -                }
  -            }
  -        else
  -            {
  -            if (!append_to_tokenbuf(expanded, p, 1))
  -                {
  -                free_tokenbuf(expanded);
  -                return VAR_OUT_OF_MEMORY;
  -                }
  -            ++p;
  -            }
  -        }
  +    while (p != orig->end) {
  +	if (*p == '\\') {
  +	    if (orig->end - p <= 1) {
  +		free_tokenbuf(expanded);
  +		return VAR_INCOMPLETE_QUOTED_PAIR;
  +	    } else
  +		++p;
  +	    if (*p == '\\') {
  +		if (!append_to_tokenbuf(expanded, p, 1)) {
  +		    free_tokenbuf(expanded);
  +		    return VAR_OUT_OF_MEMORY;
  +		}
  +		++p;
  +		continue;
  +	    }
  +	    if (!isdigit(*p)) {
  +		free_tokenbuf(expanded);
  +		return VAR_UNKNOWN_QUOTED_PAIR_IN_REPLACE;
  +	    }
  +	    i = *p - '0';
  +	    ++p;
  +	    if (pmatch[i].rm_so == -1) {
  +		free_tokenbuf(expanded);
  +		return VAR_SUBMATCH_OUT_OF_RANGE;
  +	    }
  +	    if (!append_to_tokenbuf(expanded, data + pmatch[i].rm_so,
  +				    pmatch[i].rm_eo - pmatch[i].rm_so)) {
  +		free_tokenbuf(expanded);
  +		return VAR_OUT_OF_MEMORY;
  +	    }
  +	} else {
  +	    if (!append_to_tokenbuf(expanded, p, 1)) {
  +		free_tokenbuf(expanded);
  +		return VAR_OUT_OF_MEMORY;
  +	    }
  +	    ++p;
  +	}
  +    }
   
       return VAR_OK;
  -    }
  +}
   
  -static int search_and_replace(tokenbuf* data, tokenbuf* search, tokenbuf* replace, tokenbuf* flags)
  -    {
  -    const char* p;
  +static int search_and_replace(tokenbuf * data, tokenbuf * search,
  +			      tokenbuf * replace, tokenbuf * flags)
  +{
  +    const char *p;
       int case_insensitive = 0;
       int global = 0;
       int no_regex = 0;
       int rc;
   
       if (search->begin == search->end)
  -        return VAR_EMPTY_SEARCH_STRING;
  +	return VAR_EMPTY_SEARCH_STRING;
   
  -    for (p = flags->begin; p != flags->end; ++p)
  -        {
  -        switch (tolower(*p))
  -            {
  -            case 'i':
  -                case_insensitive = 1;
  -                break;
  -            case 'g':
  -                global = 1;
  -                break;
  -            case 't':
  -                no_regex = 1;
  -                break;
  -            default:
  -                return VAR_UNKNOWN_REPLACE_FLAG;
  -            }
  -        }
  -
  -    if (no_regex)
  -        {
  -        tokenbuf tmp;
  -        init_tokenbuf(&tmp);
  -
  -        for (p = data->begin; p != data->end; )
  -            {
  -            if (case_insensitive)
  -                rc = strncasecmp(p, search->begin, search->end - search->begin);
  -            else
  -                rc = strncmp(p, search->begin, search->end - search->begin);
  -            if (rc != 0)
  -                {               /* no match, copy character */
  -                if (!append_to_tokenbuf(&tmp, p, 1))
  -                    {
  -                    free_tokenbuf(&tmp);
  -                    return VAR_OUT_OF_MEMORY;
  -                    }
  -                ++p;
  -                }
  -            else
  -                {
  -                append_to_tokenbuf(&tmp, replace->begin, replace->end - replace->begin);
  -                p += search->end - search->begin;
  -                if (!global)
  -                    {
  -                    if (!append_to_tokenbuf(&tmp, p, data->end - p))
  -                        {
  -                        free_tokenbuf(&tmp);
  -                        return VAR_OUT_OF_MEMORY;
  -                        }
  -                    break;
  -                    }
  -                }
  -            }
  -
  -        free_tokenbuf(data);
  -        move_tokenbuf(&tmp, data);
  -        }
  -    else
  -        {
  -        tokenbuf tmp;
  -        tokenbuf mydata;
  -        tokenbuf myreplace;
  -        regex_t preg;
  -        regmatch_t pmatch[10];
  -        int regexec_flag;
  -
  -        /* Copy the pattern and the data to our own buffer to make
  -           sure they're terminated with a null byte. */
  -
  -        if (!assign_to_tokenbuf(&tmp, search->begin, search->end - search->begin))
  -            return VAR_OUT_OF_MEMORY;
  -        if (!assign_to_tokenbuf(&mydata, data->begin, data->end - data->begin))
  -            {
  -            free_tokenbuf(&tmp);
  -            return VAR_OUT_OF_MEMORY;
  -            }
  -
  -        /* Compile the pattern. */
  -
  -        rc = regcomp(&preg, tmp.begin, REG_EXTENDED | ((case_insensitive) ? REG_ICASE : 0));
  -        free_tokenbuf(&tmp);
  -        if (rc != 0)
  -            {
  -            free_tokenbuf(&mydata);
  -            return VAR_INVALID_REGEX_IN_REPLACE;
  -            }
  -
  -        /* Match the pattern and create the result string in the tmp
  -           buffer. */
  -
  -        for (p = mydata.begin; p != mydata.end; )
  -            {
  -            if (p == mydata.begin || p[-1] == '\n')
  -                regexec_flag = 0;
  -            else
  -                regexec_flag = REG_NOTBOL;
  -            if (regexec(&preg, p, sizeof(pmatch) / sizeof(regmatch_t), pmatch, regexec_flag) == REG_NOMATCH)
  -                {
  -                append_to_tokenbuf(&tmp, p, mydata.end - p);
  -                break;
  -                }
  -            else
  -                {
  -                rc = expand_regex_replace(p, replace, pmatch, &myreplace);
  -                if (rc != VAR_OK)
  -                    {
  -                    regfree(&preg);
  -                    free_tokenbuf(&tmp);
  -                    free_tokenbuf(&mydata);
  -                    return rc;
  -                    }
  -                if (!append_to_tokenbuf(&tmp, p, pmatch[0].rm_so) ||
  -                    !append_to_tokenbuf(&tmp, myreplace.begin, myreplace.end - myreplace.begin))
  -                    {
  -                    regfree(&preg);
  -                    free_tokenbuf(&tmp);
  -                    free_tokenbuf(&mydata);
  -                    free_tokenbuf(&myreplace);
  -                    return VAR_OUT_OF_MEMORY;
  -                    }
  -                else
  -                    {
  -                    p += (pmatch[0].rm_eo > 0) ? pmatch[0].rm_eo : 1;
  -                    free_tokenbuf(&myreplace);
  -                    }
  -                if (!global)
  -                    {
  -                    append_to_tokenbuf(&tmp, p, mydata.end - p);
  -                    break;
  -                    }
  -                }
  -            }
  -
  -        regfree(&preg);
  -        free_tokenbuf(data);
  -        move_tokenbuf(&tmp, data);
  -        free_tokenbuf(&mydata);
  -        }
  +    for (p = flags->begin; p != flags->end; ++p) {
  +	switch (tolower(*p)) {
  +	case 'i':
  +	    case_insensitive = 1;
  +	    break;
  +	case 'g':
  +	    global = 1;
  +	    break;
  +	case 't':
  +	    no_regex = 1;
  +	    break;
  +	default:
  +	    return VAR_UNKNOWN_REPLACE_FLAG;
  +	}
  +    }
  +
  +    if (no_regex) {
  +	tokenbuf tmp;
  +	init_tokenbuf(&tmp);
  +
  +	for (p = data->begin; p != data->end;) {
  +	    if (case_insensitive)
  +		rc = strncasecmp(p, search->begin,
  +				 search->end - search->begin);
  +	    else
  +		rc = strncmp(p, search->begin,
  +			     search->end - search->begin);
  +	    if (rc != 0) {	/* no match, copy character */
  +		if (!append_to_tokenbuf(&tmp, p, 1)) {
  +		    free_tokenbuf(&tmp);
  +		    return VAR_OUT_OF_MEMORY;
  +		}
  +		++p;
  +	    } else {
  +		append_to_tokenbuf(&tmp, replace->begin,
  +				   replace->end - replace->begin);
  +		p += search->end - search->begin;
  +		if (!global) {
  +		    if (!append_to_tokenbuf(&tmp, p, data->end - p)) {
  +			free_tokenbuf(&tmp);
  +			return VAR_OUT_OF_MEMORY;
  +		    }
  +		    break;
  +		}
  +	    }
  +	}
  +
  +	free_tokenbuf(data);
  +	move_tokenbuf(&tmp, data);
  +    } else {
  +	tokenbuf tmp;
  +	tokenbuf mydata;
  +	tokenbuf myreplace;
  +	regex_t preg;
  +	regmatch_t pmatch[10];
  +	int regexec_flag;
  +
  +	/* Copy the pattern and the data to our own buffer to make
  +	   sure they're terminated with a null byte. */
  +
  +	if (!assign_to_tokenbuf
  +	    (&tmp, search->begin, search->end - search->begin))
  +	    return VAR_OUT_OF_MEMORY;
  +	if (!assign_to_tokenbuf
  +	    (&mydata, data->begin, data->end - data->begin)) {
  +	    free_tokenbuf(&tmp);
  +	    return VAR_OUT_OF_MEMORY;
  +	}
  +
  +	/* Compile the pattern. */
  +
  +	rc = regcomp(&preg, tmp.begin,
  +		     REG_EXTENDED | ((case_insensitive) ? REG_ICASE : 0));
  +	free_tokenbuf(&tmp);
  +	if (rc != 0) {
  +	    free_tokenbuf(&mydata);
  +	    return VAR_INVALID_REGEX_IN_REPLACE;
  +	}
  +
  +	/* Match the pattern and create the result string in the tmp
  +	   buffer. */
  +
  +	for (p = mydata.begin; p != mydata.end;) {
  +	    if (p == mydata.begin || p[-1] == '\n')
  +		regexec_flag = 0;
  +	    else
  +		regexec_flag = REG_NOTBOL;
  +	    if (regexec
  +		(&preg, p, sizeof(pmatch) / sizeof(regmatch_t), pmatch,
  +		 regexec_flag) == REG_NOMATCH) {
  +		append_to_tokenbuf(&tmp, p, mydata.end - p);
  +		break;
  +	    } else {
  +		rc = expand_regex_replace(p, replace, pmatch, &myreplace);
  +		if (rc != VAR_OK) {
  +		    regfree(&preg);
  +		    free_tokenbuf(&tmp);
  +		    free_tokenbuf(&mydata);
  +		    return rc;
  +		}
  +		if (!append_to_tokenbuf(&tmp, p, pmatch[0].rm_so) ||
  +		    !append_to_tokenbuf(&tmp, myreplace.begin,
  +					myreplace.end - myreplace.begin)) {
  +		    regfree(&preg);
  +		    free_tokenbuf(&tmp);
  +		    free_tokenbuf(&mydata);
  +		    free_tokenbuf(&myreplace);
  +		    return VAR_OUT_OF_MEMORY;
  +		} else {
  +		    p += (pmatch[0].rm_eo > 0) ? pmatch[0].rm_eo : 1;
  +		    free_tokenbuf(&myreplace);
  +		}
  +		if (!global) {
  +		    append_to_tokenbuf(&tmp, p, mydata.end - p);
  +		    break;
  +		}
  +	    }
  +	}
  +
  +	regfree(&preg);
  +	free_tokenbuf(data);
  +	move_tokenbuf(&tmp, data);
  +	free_tokenbuf(&mydata);
  +    }
   
       return VAR_OK;
  -    }
  +}
   
  -static int padding(tokenbuf* data, tokenbuf* widthstr, tokenbuf* fill, char position)
  -    {
  +static int padding(tokenbuf * data, tokenbuf * widthstr, tokenbuf * fill,
  +		   char position)
  +{
       tokenbuf result;
       size_t width = tokenbuf2int(widthstr);
       int i;
   
       if (fill->begin == fill->end)
  -        return VAR_EMPTY_PADDING_FILL_STRING;
  +	return VAR_EMPTY_PADDING_FILL_STRING;
   
       init_tokenbuf(&result);
   
  -    if (position == 'l')
  -        {
  -        i = width - (data->end - data->begin);
  -        if (i > 0)
  -            {
  -            i = i / (fill->end - fill->begin);
  -            while(i > 0)
  -                {
  -                if (!append_to_tokenbuf(data, fill->begin, fill->end - fill->begin))
  -                    return VAR_OUT_OF_MEMORY;
  -                --i;
  -                }
  -            i = (width - (data->end - data->begin)) % (fill->end - fill->begin);
  -            if (!append_to_tokenbuf(data, fill->begin, i))
  -                return VAR_OUT_OF_MEMORY;
  -            }
  -        }
  -    else if (position == 'r')
  -        {
  -        i = width - (data->end - data->begin);
  -        if (i > 0)
  -            {
  -            i = i / (fill->end - fill->begin);
  -            while(i > 0)
  -                {
  -                if (!append_to_tokenbuf(&result, fill->begin, fill->end - fill->begin))
  -                    {
  -                    free_tokenbuf(&result);
  -                    return VAR_OUT_OF_MEMORY;
  -                    }
  -                --i;
  -                }
  -            i = (width - (data->end - data->begin)) % (fill->end - fill->begin);
  -            if (!append_to_tokenbuf(&result, fill->begin, i))
  -                {
  -                free_tokenbuf(&result);
  -                return VAR_OUT_OF_MEMORY;
  -                }
  -            if (!append_to_tokenbuf(&result, data->begin, data->end - data->begin))
  -                {
  -                free_tokenbuf(&result);
  -                return VAR_OUT_OF_MEMORY;
  -                }
  -
  -            free_tokenbuf(data);
  -            move_tokenbuf(&result, data);
  -            }
  -        }
  -     else if (position == 'c')
  -        {
  -        i = (width - (data->end - data->begin)) / 2;
  -        if (i > 0)
  -            {
  -            /* Create the prefix. */
  -
  -            i = i / (fill->end - fill->begin);
  -            while(i > 0)
  -                {
  -                if (!append_to_tokenbuf(&result, fill->begin, fill->end - fill->begin))
  -                    {
  -                    free_tokenbuf(&result);
  -                    return VAR_OUT_OF_MEMORY;
  -                    }
  -                --i;
  -                }
  -            i = ((width - (data->end - data->begin)) / 2) % (fill->end - fill->begin);
  -            if (!append_to_tokenbuf(&result, fill->begin, i))
  -                {
  -                free_tokenbuf(&result);
  -                return VAR_OUT_OF_MEMORY;
  -                }
  -
  -            /* Append the actual data string. */
  -
  -            if (!append_to_tokenbuf(&result, data->begin, data->end - data->begin))
  -                {
  -                free_tokenbuf(&result);
  -                return VAR_OUT_OF_MEMORY;
  -                }
  -
  -            /* Append the suffix. */
  -
  -            i = width - (result.end - result.begin);
  -            i = i / (fill->end - fill->begin);
  -            while(i > 0)
  -                {
  -                if (!append_to_tokenbuf(&result, fill->begin, fill->end - fill->begin))
  -                    {
  -                    free_tokenbuf(&result);
  -                    return VAR_OUT_OF_MEMORY;
  -                    }
  -                --i;
  -                }
  -            i = width - (result.end - result.begin);
  -            if (!append_to_tokenbuf(&result, fill->begin, i))
  -                {
  -                free_tokenbuf(&result);
  -                return VAR_OUT_OF_MEMORY;
  -                }
  -
  -            /* Move string from temporary buffer to data buffer. */
  -
  -            free_tokenbuf(data);
  -            move_tokenbuf(&result, data);
  -            }
  -        }
  +    if (position == 'l') {
  +	i = width - (data->end - data->begin);
  +	if (i > 0) {
  +	    i = i / (fill->end - fill->begin);
  +	    while (i > 0) {
  +		if (!append_to_tokenbuf
  +		    (data, fill->begin, fill->end - fill->begin))
  +		    return VAR_OUT_OF_MEMORY;
  +		--i;
  +	    }
  +	    i = (width - (data->end - data->begin)) % (fill->end -
  +						       fill->begin);
  +	    if (!append_to_tokenbuf(data, fill->begin, i))
  +		return VAR_OUT_OF_MEMORY;
  +	}
  +    } else if (position == 'r') {
  +	i = width - (data->end - data->begin);
  +	if (i > 0) {
  +	    i = i / (fill->end - fill->begin);
  +	    while (i > 0) {
  +		if (!append_to_tokenbuf
  +		    (&result, fill->begin, fill->end - fill->begin)) {
  +		    free_tokenbuf(&result);
  +		    return VAR_OUT_OF_MEMORY;
  +		}
  +		--i;
  +	    }
  +	    i = (width - (data->end - data->begin)) % (fill->end -
  +						       fill->begin);
  +	    if (!append_to_tokenbuf(&result, fill->begin, i)) {
  +		free_tokenbuf(&result);
  +		return VAR_OUT_OF_MEMORY;
  +	    }
  +	    if (!append_to_tokenbuf
  +		(&result, data->begin, data->end - data->begin)) {
  +		free_tokenbuf(&result);
  +		return VAR_OUT_OF_MEMORY;
  +	    }
  +
  +	    free_tokenbuf(data);
  +	    move_tokenbuf(&result, data);
  +	}
  +    } else if (position == 'c') {
  +	i = (width - (data->end - data->begin)) / 2;
  +	if (i > 0) {
  +	    /* Create the prefix. */
  +
  +	    i = i / (fill->end - fill->begin);
  +	    while (i > 0) {
  +		if (!append_to_tokenbuf
  +		    (&result, fill->begin, fill->end - fill->begin)) {
  +		    free_tokenbuf(&result);
  +		    return VAR_OUT_OF_MEMORY;
  +		}
  +		--i;
  +	    }
  +	    i = ((width - (data->end - data->begin)) / 2) % (fill->end -
  +							     fill->begin);
  +	    if (!append_to_tokenbuf(&result, fill->begin, i)) {
  +		free_tokenbuf(&result);
  +		return VAR_OUT_OF_MEMORY;
  +	    }
  +
  +	    /* Append the actual data string. */
  +
  +	    if (!append_to_tokenbuf
  +		(&result, data->begin, data->end - data->begin)) {
  +		free_tokenbuf(&result);
  +		return VAR_OUT_OF_MEMORY;
  +	    }
  +
  +	    /* Append the suffix. */
  +
  +	    i = width - (result.end - result.begin);
  +	    i = i / (fill->end - fill->begin);
  +	    while (i > 0) {
  +		if (!append_to_tokenbuf
  +		    (&result, fill->begin, fill->end - fill->begin)) {
  +		    free_tokenbuf(&result);
  +		    return VAR_OUT_OF_MEMORY;
  +		}
  +		--i;
  +	    }
  +	    i = width - (result.end - result.begin);
  +	    if (!append_to_tokenbuf(&result, fill->begin, i)) {
  +		free_tokenbuf(&result);
  +		return VAR_OUT_OF_MEMORY;
  +	    }
  +
  +	    /* Move string from temporary buffer to data buffer. */
  +
  +	    free_tokenbuf(data);
  +	    move_tokenbuf(&result, data);
  +	}
  +    }
   
       return VAR_OK;
  -    }
  +}
   
  -static int command(const char* begin, const char* end, const var_config_t* config,
  -                   const char nameclass[256], var_cb_t lookup, void* lookup_context,
  -                   int force_expand, tokenbuf* data)
  -    {
  -    const char* p = begin;
  +static int command(const char *begin, const char *end,
  +		   const var_config_t * config, const char nameclass[256],
  +		   var_cb_t lookup, void *lookup_context, int force_expand,
  +		   tokenbuf * data)
  +{
  +    const char *p = begin;
       tokenbuf tmptokbuf;
       tokenbuf search, replace, flags;
       tokenbuf number1, number2;
  @@ -1286,350 +1194,300 @@
       init_tokenbuf(&number2);
   
       if (begin == end)
  -        return 0;
  +	return 0;
   
  -    switch (tolower(*p))
  -        {
  -        case 'l':               /* Turn data to lowercase. */
  -            if (data->begin)
  -                {
  -                char* ptr;
  -                /* If the buffer does not life in an allocated buffer,
  -                   we have to copy it before modifying the contents. */
  -
  -                if (data->buffer_size == 0)
  -                    {
  -                    if (!assign_to_tokenbuf(data, data->begin, data->end - data->begin))
  -                        {
  -                        rc = VAR_OUT_OF_MEMORY;
  -                        goto error_return;
  -                        }
  -                    }
  -                for (ptr = (char*)data->begin; ptr != data->end; ++ptr)
  -                    *ptr = tolower(*ptr);
  -                }
  -            ++p;
  -            break;
  -
  -        case 'u':               /* Turn data to uppercase. */
  -            if (data->begin)
  -                {
  -                char* ptr;
  -                if (data->buffer_size == 0)
  -                    {
  -                    if (!assign_to_tokenbuf(data, data->begin, data->end - data->begin))
  -                        {
  -                        rc = VAR_OUT_OF_MEMORY;
  -                        goto error_return;
  -                        }
  -                    }
  -                for (ptr = (char*)data->begin; ptr != data->end; ++ptr)
  -                    *ptr = toupper(*ptr);
  -                }
  -            ++p;
  -            break;
  -
  -        case 'o':               /* Cut out substrings. */
  -            ++p;
  -            rc = number(p, end);
  -            if (rc == 0)
  -                {
  -                rc = VAR_MISSING_START_OFFSET;
  -                goto error_return;
  -                }
  -            else
  -                {
  -                number1.begin = p;
  -                number1.end   = p + rc;
  -                number1.buffer_size = 0;
  -                p += rc;
  -                }
  -
  -            if (*p == ',')
  -                {
  -                isrange = 0;
  -                ++p;
  -                }
  -            else if (*p == '-')
  -                {
  -                isrange = 1;
  -                ++p;
  -                }
  -            else
  -                {
  -                rc = VAR_INVALID_OFFSET_DELIMITER;
  -                goto error_return;
  -                }
  -
  -            rc = number(p, end);
  -            number2.begin = p;
  -            number2.end   = p + rc;
  -            number2.buffer_size = 0;
  -            p += rc;
  -            if (data->begin)
  -                {
  -                rc = cut_out_offset(data, &number1, &number2, isrange);
  -                if (rc < 0)
  -                    goto error_return;
  -                }
  -            break;
  -
  -        case '#':               /* Substitute length of the string. */
  -            if (data->begin)
  -                {
  -                char buf[1024];
  -                sprintf(buf, "%d", data->end - data->begin);
  -                free_tokenbuf(data);
  -                if (!assign_to_tokenbuf(data, buf, strlen(buf)))
  -                    {
  -                    rc = VAR_OUT_OF_MEMORY;
  -                    goto error_return;
  -                    }
  -                }
  -            ++p;
  -            break;
  -
  -        case '-':               /* Substitute parameter if data is empty. */
  -            ++p;
  -            rc = exptext_or_variable(p, end, config, nameclass, lookup, lookup_context,
  -                                     force_expand, &tmptokbuf);
  -            if (rc < 0)
  -                goto error_return;
  -            else if (rc == 0)
  -                {
  -                rc = VAR_MISSING_PARAMETER_IN_COMMAND;
  -                goto error_return;
  -                }
  -            else
  -                p += rc;
  -            if (data->begin != NULL && data->begin == data->end)
  -                {
  -                free_tokenbuf(data);
  -                move_tokenbuf(&tmptokbuf, data);
  -                }
  -            break;
  -
  -        case '*':               /* Return "" if data is not empty, parameter otherwise. */
  -            ++p;
  -            rc = exptext_or_variable(p, end, config, nameclass, lookup, lookup_context,
  -                                     force_expand, &tmptokbuf);
  -            if (rc < 0)
  -                goto error_return;
  -            else if (rc == 0)
  -                {
  -                rc = VAR_MISSING_PARAMETER_IN_COMMAND;
  -                goto error_return;
  -                }
  -            else
  -                p += rc;
  -            if (data->begin != NULL)
  -                {
  -                if (data->begin == data->end)
  -                    {
  -                    free_tokenbuf(data);
  -                    move_tokenbuf(&tmptokbuf, data);
  -                    }
  -                else
  -                    {
  -                    free_tokenbuf(data);
  -                    data->begin = data->end = "";
  -                    data->buffer_size = 0;
  -                    }
  -                }
  -            break;
  -
  -        case '+':               /* Substitute parameter if data is not empty. */
  -            ++p;
  -            rc = exptext_or_variable(p, end, config, nameclass, lookup, lookup_context,
  -                                     force_expand, &tmptokbuf);
  -            if (rc < 0)
  -                goto error_return;
  -            else if (rc == 0)
  -                {
  -                rc = VAR_MISSING_PARAMETER_IN_COMMAND;
  -                goto error_return;
  -                }
  -            else
  -                p += rc;
  -            if (data->begin != NULL)
  -                {
  -                if (data->begin != data->end)
  -                    {
  -                    free_tokenbuf(data);
  -                    move_tokenbuf(&tmptokbuf, data);
  -                    }
  -                }
  -            break;
  -
  -        case 's':               /* Search and replace. */
  -            ++p;
  -
  -            if (*p != '/')
  -                return VAR_MALFORMATTED_REPLACE;
  -            else
  -                ++p;
  -
  -            rc = substext_or_variable(p, end, config, nameclass, lookup, lookup_context,
  -                                      force_expand, &search);
  -            if (rc < 0)
  -                goto error_return;
  -            else
  -                p += rc;
  -
  -            if (*p != '/')
  -                {
  -                rc = VAR_MALFORMATTED_REPLACE;
  -                goto error_return;
  -                }
  -            else
  -                ++p;
  -
  -            rc = substext_or_variable(p, end, config, nameclass, lookup, lookup_context,
  -                                      force_expand, &replace);
  -            if (rc < 0)
  -                goto error_return;
  -            else
  -                p += rc;
  -
  -            if (*p != '/')
  -                {
  -                rc = VAR_MALFORMATTED_REPLACE;
  -                goto error_return;
  -                }
  -            else
  -                ++p;
  -
  -            rc = exptext(p, end, config);
  -            if (rc < 0)
  -                goto error_return;
  -            else
  -                {
  -                flags.begin = p;
  -                flags.end = p + rc;
  -                flags.buffer_size = 0;
  -                p += rc;
  -                }
  -
  -            if (data->begin)
  -                {
  -                rc = search_and_replace(data, &search, &replace, &flags);
  -                if (rc < 0)
  -                    goto error_return;
  -                }
  -            break;
  -
  -        case 'y':               /* Transpose characters from class A to class B. */
  -            ++p;
  -
  -            if (*p != '/')
  -                return VAR_MALFORMATTED_TRANSPOSE;
  -            else
  -                ++p;
  -
  -            rc = substext_or_variable(p, end, config, nameclass, lookup, lookup_context,
  -                                      force_expand, &search);
  -            if (rc < 0)
  -                goto error_return;
  -            else
  -                p += rc;
  -
  -            if (*p != '/')
  -                {
  -                rc = VAR_MALFORMATTED_TRANSPOSE;
  -                goto error_return;
  -                }
  -            else
  -                ++p;
  -
  -            rc = substext_or_variable(p, end, config, nameclass, lookup, lookup_context,
  -                                      force_expand, &replace);
  -            if (rc < 0)
  -                goto error_return;
  -            else
  -                p += rc;
  -
  -            if (*p != '/')
  -                {
  -                rc = VAR_MALFORMATTED_TRANSPOSE;
  -                goto error_return;
  -                }
  -            else
  -                ++p;
  -
  -            if (data->begin)
  -                {
  -                rc = transpose(data, &search, &replace);
  -                if (rc < 0)
  -                    goto error_return;
  -                }
  -            break;
  -
  -
  -        case 'p':               /* Padding. */
  -            ++p;
  -
  -            if (*p != '/')
  -                return VAR_MALFORMATTED_PADDING;
  -            else
  -                ++p;
  -
  -            rc = number(p, end);
  -            if (rc == 0)
  -                {
  -                rc = VAR_MISSING_PADDING_WIDTH;
  -                goto error_return;
  -                }
  -            else
  -                {
  -                number1.begin = p;
  -                number1.end   = p + rc;
  -                number1.buffer_size = 0;
  -                p += rc;
  -                }
  -
  -            if (*p != '/')
  -                {
  -                rc = VAR_MALFORMATTED_PADDING;
  -                goto error_return;
  -                }
  -            else
  -                ++p;
  -
  -            rc = substext_or_variable(p, end, config, nameclass, lookup, lookup_context,
  -                                      force_expand, &replace);
  -            if (rc < 0)
  -                goto error_return;
  -            else
  -                p += rc;
  -
  -            if (*p != '/')
  -                {
  -                rc = VAR_MALFORMATTED_PADDING;
  -                goto error_return;
  -                }
  -            else
  -                ++p;
  -
  -            if (*p != 'l' && *p != 'c' && *p != 'r')
  -                {
  -                rc = VAR_MALFORMATTED_PADDING;
  -                goto error_return;
  -                }
  -            else
  -                ++p;
  -
  -            if (data->begin)
  -                {
  -                rc = padding(data, &number1, &replace, p[-1]);
  -                if (rc < 0)
  -                    goto error_return;
  -                }
  -            break;
  -
  -        default:
  -            return VAR_UNKNOWN_COMMAND_CHAR;
  -        }
  +    switch (tolower(*p)) {
  +    case 'l':			/* Turn data to lowercase. */
  +	if (data->begin) {
  +	    char *ptr;
  +	    /* If the buffer does not life in an allocated buffer,
  +	       we have to copy it before modifying the contents. */
  +
  +	    if (data->buffer_size == 0) {
  +		if (!assign_to_tokenbuf
  +		    (data, data->begin, data->end - data->begin)) {
  +		    rc = VAR_OUT_OF_MEMORY;
  +		    goto error_return;
  +		}
  +	    }
  +	    for (ptr = (char *) data->begin; ptr != data->end; ++ptr)
  +		*ptr = tolower(*ptr);
  +	}
  +	++p;
  +	break;
  +
  +    case 'u':			/* Turn data to uppercase. */
  +	if (data->begin) {
  +	    char *ptr;
  +	    if (data->buffer_size == 0) {
  +		if (!assign_to_tokenbuf
  +		    (data, data->begin, data->end - data->begin)) {
  +		    rc = VAR_OUT_OF_MEMORY;
  +		    goto error_return;
  +		}
  +	    }
  +	    for (ptr = (char *) data->begin; ptr != data->end; ++ptr)
  +		*ptr = toupper(*ptr);
  +	}
  +	++p;
  +	break;
  +
  +    case 'o':			/* Cut out substrings. */
  +	++p;
  +	rc = number(p, end);
  +	if (rc == 0) {
  +	    rc = VAR_MISSING_START_OFFSET;
  +	    goto error_return;
  +	} else {
  +	    number1.begin = p;
  +	    number1.end = p + rc;
  +	    number1.buffer_size = 0;
  +	    p += rc;
  +	}
  +
  +	if (*p == ',') {
  +	    isrange = 0;
  +	    ++p;
  +	} else if (*p == '-') {
  +	    isrange = 1;
  +	    ++p;
  +	} else {
  +	    rc = VAR_INVALID_OFFSET_DELIMITER;
  +	    goto error_return;
  +	}
  +
  +	rc = number(p, end);
  +	number2.begin = p;
  +	number2.end = p + rc;
  +	number2.buffer_size = 0;
  +	p += rc;
  +	if (data->begin) {
  +	    rc = cut_out_offset(data, &number1, &number2, isrange);
  +	    if (rc < 0)
  +		goto error_return;
  +	}
  +	break;
  +
  +    case '#':			/* Substitute length of the string. */
  +	if (data->begin) {
  +	    char buf[1024];
  +	    sprintf(buf, "%d", data->end - data->begin);
  +	    free_tokenbuf(data);
  +	    if (!assign_to_tokenbuf(data, buf, strlen(buf))) {
  +		rc = VAR_OUT_OF_MEMORY;
  +		goto error_return;
  +	    }
  +	}
  +	++p;
  +	break;
  +
  +    case '-':			/* Substitute parameter if data is empty. */
  +	++p;
  +	rc = exptext_or_variable(p, end, config, nameclass, lookup,
  +				 lookup_context, force_expand, &tmptokbuf);
  +	if (rc < 0)
  +	    goto error_return;
  +	else if (rc == 0) {
  +	    rc = VAR_MISSING_PARAMETER_IN_COMMAND;
  +	    goto error_return;
  +	} else
  +	    p += rc;
  +	if (data->begin != NULL && data->begin == data->end) {
  +	    free_tokenbuf(data);
  +	    move_tokenbuf(&tmptokbuf, data);
  +	}
  +	break;
  +
  +    case '*':			/* Return "" if data is not empty, parameter otherwise. */
  +	++p;
  +	rc = exptext_or_variable(p, end, config, nameclass, lookup,
  +				 lookup_context, force_expand, &tmptokbuf);
  +	if (rc < 0)
  +	    goto error_return;
  +	else if (rc == 0) {
  +	    rc = VAR_MISSING_PARAMETER_IN_COMMAND;
  +	    goto error_return;
  +	} else
  +	    p += rc;
  +	if (data->begin != NULL) {
  +	    if (data->begin == data->end) {
  +		free_tokenbuf(data);
  +		move_tokenbuf(&tmptokbuf, data);
  +	    } else {
  +		free_tokenbuf(data);
  +		data->begin = data->end = "";
  +		data->buffer_size = 0;
  +	    }
  +	}
  +	break;
  +
  +    case '+':			/* Substitute parameter if data is not empty. */
  +	++p;
  +	rc = exptext_or_variable(p, end, config, nameclass, lookup,
  +				 lookup_context, force_expand, &tmptokbuf);
  +	if (rc < 0)
  +	    goto error_return;
  +	else if (rc == 0) {
  +	    rc = VAR_MISSING_PARAMETER_IN_COMMAND;
  +	    goto error_return;
  +	} else
  +	    p += rc;
  +	if (data->begin != NULL) {
  +	    if (data->begin != data->end) {
  +		free_tokenbuf(data);
  +		move_tokenbuf(&tmptokbuf, data);
  +	    }
  +	}
  +	break;
  +
  +    case 's':			/* Search and replace. */
  +	++p;
  +
  +	if (*p != '/')
  +	    return VAR_MALFORMATTED_REPLACE;
  +	else
  +	    ++p;
  +
  +	rc = substext_or_variable(p, end, config, nameclass, lookup,
  +				  lookup_context, force_expand, &search);
  +	if (rc < 0)
  +	    goto error_return;
  +	else
  +	    p += rc;
  +
  +	if (*p != '/') {
  +	    rc = VAR_MALFORMATTED_REPLACE;
  +	    goto error_return;
  +	} else
  +	    ++p;
  +
  +	rc = substext_or_variable(p, end, config, nameclass, lookup,
  +				  lookup_context, force_expand, &replace);
  +	if (rc < 0)
  +	    goto error_return;
  +	else
  +	    p += rc;
  +
  +	if (*p != '/') {
  +	    rc = VAR_MALFORMATTED_REPLACE;
  +	    goto error_return;
  +	} else
  +	    ++p;
  +
  +	rc = exptext(p, end, config);
  +	if (rc < 0)
  +	    goto error_return;
  +	else {
  +	    flags.begin = p;
  +	    flags.end = p + rc;
  +	    flags.buffer_size = 0;
  +	    p += rc;
  +	}
  +
  +	if (data->begin) {
  +	    rc = search_and_replace(data, &search, &replace, &flags);
  +	    if (rc < 0)
  +		goto error_return;
  +	}
  +	break;
  +
  +    case 'y':			/* Transpose characters from class A to class B. */
  +	++p;
  +
  +	if (*p != '/')
  +	    return VAR_MALFORMATTED_TRANSPOSE;
  +	else
  +	    ++p;
  +
  +	rc = substext_or_variable(p, end, config, nameclass, lookup,
  +				  lookup_context, force_expand, &search);
  +	if (rc < 0)
  +	    goto error_return;
  +	else
  +	    p += rc;
  +
  +	if (*p != '/') {
  +	    rc = VAR_MALFORMATTED_TRANSPOSE;
  +	    goto error_return;
  +	} else
  +	    ++p;
  +
  +	rc = substext_or_variable(p, end, config, nameclass, lookup,
  +				  lookup_context, force_expand, &replace);
  +	if (rc < 0)
  +	    goto error_return;
  +	else
  +	    p += rc;
  +
  +	if (*p != '/') {
  +	    rc = VAR_MALFORMATTED_TRANSPOSE;
  +	    goto error_return;
  +	} else
  +	    ++p;
  +
  +	if (data->begin) {
  +	    rc = transpose(data, &search, &replace);
  +	    if (rc < 0)
  +		goto error_return;
  +	}
  +	break;
  +
  +
  +    case 'p':			/* Padding. */
  +	++p;
  +
  +	if (*p != '/')
  +	    return VAR_MALFORMATTED_PADDING;
  +	else
  +	    ++p;
  +
  +	rc = number(p, end);
  +	if (rc == 0) {
  +	    rc = VAR_MISSING_PADDING_WIDTH;
  +	    goto error_return;
  +	} else {
  +	    number1.begin = p;
  +	    number1.end = p + rc;
  +	    number1.buffer_size = 0;
  +	    p += rc;
  +	}
  +
  +	if (*p != '/') {
  +	    rc = VAR_MALFORMATTED_PADDING;
  +	    goto error_return;
  +	} else
  +	    ++p;
  +
  +	rc = substext_or_variable(p, end, config, nameclass, lookup,
  +				  lookup_context, force_expand, &replace);
  +	if (rc < 0)
  +	    goto error_return;
  +	else
  +	    p += rc;
  +
  +	if (*p != '/') {
  +	    rc = VAR_MALFORMATTED_PADDING;
  +	    goto error_return;
  +	} else
  +	    ++p;
  +
  +	if (*p != 'l' && *p != 'c' && *p != 'r') {
  +	    rc = VAR_MALFORMATTED_PADDING;
  +	    goto error_return;
  +	} else
  +	    ++p;
  +
  +	if (data->begin) {
  +	    rc = padding(data, &number1, &replace, p[-1]);
  +	    if (rc < 0)
  +		goto error_return;
  +	}
  +	break;
   
  +    default:
  +	return VAR_UNKNOWN_COMMAND_CHAR;
  +    }
  +
       /* Exit gracefully. */
   
       free_tokenbuf(&tmptokbuf);
  @@ -1649,66 +1507,61 @@
       free_tokenbuf(&number1);
       free_tokenbuf(&number2);
       return rc;
  -    }
  +}
   
  -static var_rc_t input(const char* begin, const char* end, const var_config_t* config,
  -                      const char nameclass[256], var_cb_t lookup, void* lookup_context,
  -                      int force_expand, tokenbuf* output)
  -    {
  +static var_rc_t input(const char *begin, const char *end,
  +		      const var_config_t * config,
  +		      const char nameclass[256], var_cb_t lookup,
  +		      void *lookup_context, int force_expand,
  +		      tokenbuf * output)
  +{
       int rc;
       tokenbuf result;
   
       init_tokenbuf(&result);
   
  -    do
  -        {
  -        rc = text(begin, end, config->varinit, config->escape);
  -        if (rc > 0)
  -            {
  -            if (!append_to_tokenbuf(output, begin, rc))
  -                {
  -                rc = VAR_OUT_OF_MEMORY;
  -                goto error_return;
  -                }
  -            begin += rc;
  -            }
  -        else if (rc < 0)
  -            goto error_return;
  -
  -        rc = variable(begin, end, config, nameclass, lookup, lookup_context, force_expand, &result);
  -        if (rc > 0)
  -            {
  -            if (!append_to_tokenbuf(output, result.begin, result.end - result.begin))
  -                {
  -                rc = VAR_OUT_OF_MEMORY;
  -                goto error_return;
  -                }
  -            else
  -                begin += rc;
  -            }
  -        else if (rc < 0)
  -            goto error_return;
  -        }
  +    do {
  +	rc = text(begin, end, config->varinit, config->escape);
  +	if (rc > 0) {
  +	    if (!append_to_tokenbuf(output, begin, rc)) {
  +		rc = VAR_OUT_OF_MEMORY;
  +		goto error_return;
  +	    }
  +	    begin += rc;
  +	} else if (rc < 0)
  +	    goto error_return;
  +
  +	rc = variable(begin, end, config, nameclass, lookup,
  +		      lookup_context, force_expand, &result);
  +	if (rc > 0) {
  +	    if (!append_to_tokenbuf
  +		(output, result.begin, result.end - result.begin)) {
  +		rc = VAR_OUT_OF_MEMORY;
  +		goto error_return;
  +	    } else
  +		begin += rc;
  +	} else if (rc < 0)
  +	    goto error_return;
  +    }
       while (rc > 0);
   
  -    if (begin != end)
  -        {
  -        rc = VAR_INPUT_ISNT_TEXT_NOR_VARIABLE;
  -        goto error_return;
  -        }
  +    if (begin != end) {
  +	rc = VAR_INPUT_ISNT_TEXT_NOR_VARIABLE;
  +	goto error_return;
  +    }
   
       return VAR_OK;
   
     error_return:
       free_tokenbuf(&result);
       return rc;
  -    }
  +}
   
  -var_rc_t var_expand(const char* input_buf, size_t input_len,
  -                    char** result, size_t* result_len,
  -                    var_cb_t lookup, void* lookup_context,
  -                    const var_config_t* config, int force_expand)
  -    {
  +var_rc_t var_expand(const char *input_buf, size_t input_len,
  +		    char **result, size_t * result_len,
  +		    var_cb_t lookup, void *lookup_context,
  +		    const var_config_t * config, int force_expand)
  +{
       char nameclass[256];
       var_rc_t rc;
       tokenbuf output;
  @@ -1716,33 +1569,32 @@
       /* Expand the class description for valid variable names. */
   
       if (config == NULL)
  -        config = &var_config_default;
  +	config = &var_config_default;
       rc = expand_character_class(config->namechars, nameclass);
       if (rc != VAR_OK)
  -        return rc;
  +	return rc;
   
       /* Make sure that the specials defined in the configuration do not
          appear in the character name class. */
   
  -    if (nameclass[(int)config->varinit] ||
  -        nameclass[(int)config->startdelim] ||
  -        nameclass[(int)config->enddelim] ||
  -        nameclass[(int)config->escape])
  -        return VAR_INVALID_CONFIGURATION;
  +    if (nameclass[(int) config->varinit] ||
  +	nameclass[(int) config->startdelim] ||
  +	nameclass[(int) config->enddelim] ||
  +	nameclass[(int) config->escape])
  +	return VAR_INVALID_CONFIGURATION;
   
       /* Call the parser. */
   
       output.begin = output.end = NULL;
       output.buffer_size = 0;
       rc = input(input_buf, input_buf + input_len, config, nameclass,
  -               lookup, lookup_context, force_expand, &output);
  -    if (rc != VAR_OK)
  -        {
  -        free_tokenbuf(&output);
  -        return rc;
  -        }
  -    *result     = (char*)output.begin;
  +	       lookup, lookup_context, force_expand, &output);
  +    if (rc != VAR_OK) {
  +	free_tokenbuf(&output);
  +	return rc;
  +    }
  +    *result = (char *) output.begin;
       *result_len = output.end - output.begin;
   
       return VAR_OK;
  -    }
  +}
  Index: ossp-pkg/var/var.h
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 var.h
  --- ossp-pkg/var/var.h	2001/11/13 14:36:55	1.4
  +++ ossp-pkg/var/var.h	2001/11/13 14:42:57	1.5
  @@ -34,46 +34,44 @@
   
   /* Error codes returned by the varexp library. */
   
  -typedef enum
  -    {
  -    VAR_CALLBACK_ERROR                 = -64,
  -    VAR_SUBMATCH_OUT_OF_RANGE          = -34,
  +typedef enum {
  +    VAR_CALLBACK_ERROR = -64,
  +    VAR_SUBMATCH_OUT_OF_RANGE = -34,
       VAR_UNKNOWN_QUOTED_PAIR_IN_REPLACE = -33,
  -    VAR_EMPTY_PADDING_FILL_STRING      = -32,
  -    VAR_MISSING_PADDING_WIDTH          = -31,
  -    VAR_MALFORMATTED_PADDING           = -30,
  +    VAR_EMPTY_PADDING_FILL_STRING = -32,
  +    VAR_MISSING_PADDING_WIDTH = -31,
  +    VAR_MALFORMATTED_PADDING = -30,
       VAR_INCORRECT_TRANSPOSE_CLASS_SPEC = -29,
  -    VAR_EMPTY_TRANSPOSE_CLASS          = -28,
  -    VAR_TRANSPOSE_CLASSES_MISMATCH     = -27,
  -    VAR_MALFORMATTED_TRANSPOSE         = -26,
  -    VAR_OFFSET_LOGIC_ERROR             = -25,
  -    VAR_OFFSET_OUT_OF_BOUNDS           = -24,
  -    VAR_RANGE_OUT_OF_BOUNDS            = -23,
  -    VAR_INVALID_OFFSET_DELIMITER       = -22,
  -    VAR_MISSING_START_OFFSET           = -21,
  -    VAR_EMPTY_SEARCH_STRING            = -20,
  -    VAR_MISSING_PARAMETER_IN_COMMAND   = -19,
  -    VAR_INVALID_REGEX_IN_REPLACE       = -18,
  -    VAR_UNKNOWN_REPLACE_FLAG           = -17,
  -    VAR_MALFORMATTED_REPLACE           = -16,
  -    VAR_UNKNOWN_COMMAND_CHAR           = -14,
  -    VAR_INPUT_ISNT_TEXT_NOR_VARIABLE   = -13,
  -    VAR_UNDEFINED_VARIABLE             = -12,
  -    VAR_INCOMPLETE_VARIABLE_SPEC       = -11,
  -    VAR_OUT_OF_MEMORY                  = -10,
  -    VAR_INVALID_CONFIGURATION          = -9,
  -    VAR_INCORRECT_CLASS_SPEC           = -8,
  -    VAR_INCOMPLETE_GROUPED_HEX         = -7,
  -    VAR_INCOMPLETE_OCTAL               = -6,
  -    VAR_INVALID_OCTAL                  = -5,
  -    VAR_OCTAL_TOO_LARGE                = -4,
  -    VAR_INVALID_HEX                    = -3,
  -    VAR_INCOMPLETE_HEX                 = -2,
  -    VAR_INCOMPLETE_NAMED_CHARACTER     = -1,
  -    VAR_INCOMPLETE_QUOTED_PAIR         = -1,
  -    VAR_OK                             = 0
  -    }
  -var_rc_t;
  +    VAR_EMPTY_TRANSPOSE_CLASS = -28,
  +    VAR_TRANSPOSE_CLASSES_MISMATCH = -27,
  +    VAR_MALFORMATTED_TRANSPOSE = -26,
  +    VAR_OFFSET_LOGIC_ERROR = -25,
  +    VAR_OFFSET_OUT_OF_BOUNDS = -24,
  +    VAR_RANGE_OUT_OF_BOUNDS = -23,
  +    VAR_INVALID_OFFSET_DELIMITER = -22,
  +    VAR_MISSING_START_OFFSET = -21,
  +    VAR_EMPTY_SEARCH_STRING = -20,
  +    VAR_MISSING_PARAMETER_IN_COMMAND = -19,
  +    VAR_INVALID_REGEX_IN_REPLACE = -18,
  +    VAR_UNKNOWN_REPLACE_FLAG = -17,
  +    VAR_MALFORMATTED_REPLACE = -16,
  +    VAR_UNKNOWN_COMMAND_CHAR = -14,
  +    VAR_INPUT_ISNT_TEXT_NOR_VARIABLE = -13,
  +    VAR_UNDEFINED_VARIABLE = -12,
  +    VAR_INCOMPLETE_VARIABLE_SPEC = -11,
  +    VAR_OUT_OF_MEMORY = -10,
  +    VAR_INVALID_CONFIGURATION = -9,
  +    VAR_INCORRECT_CLASS_SPEC = -8,
  +    VAR_INCOMPLETE_GROUPED_HEX = -7,
  +    VAR_INCOMPLETE_OCTAL = -6,
  +    VAR_INVALID_OCTAL = -5,
  +    VAR_OCTAL_TOO_LARGE = -4,
  +    VAR_INVALID_HEX = -3,
  +    VAR_INCOMPLETE_HEX = -2,
  +    VAR_INCOMPLETE_NAMED_CHARACTER = -1,
  +    VAR_INCOMPLETE_QUOTED_PAIR = -1,
  +    VAR_OK = 0
  +} var_rc_t;
   
   /*
      Expand the following named characters to their binary
  @@ -89,7 +87,8 @@
     Any other character quoted by a backslash is copied verbatim.
   */
   
  -var_rc_t var_unescape(const char* src, size_t len, char* dst, int unescape_all);
  +var_rc_t var_unescape(const char *src, size_t len, char *dst,
  +		      int unescape_all);
   
   /*
      The callback will be called by variable_expand(), providing the
  @@ -115,9 +114,10 @@
          <0 - error
   */
   
  -typedef int (*var_cb_t)(void* context,
  -                        const char* varname, size_t name_len,
  -                        const char** data, size_t* data_len, size_t* buffer_size);
  +typedef int (*var_cb_t) (void *context,
  +			 const char *varname, size_t name_len,
  +			 const char **data, size_t * data_len,
  +			 size_t * buffer_size);
   
   /*
      This structure configures the parser's specials. I think, the fields
  @@ -131,15 +131,13 @@
      The comments after each field show the default configuration.
   */
   
  -typedef struct
  -    {
  -    char  varinit;               /* '$' */
  -    char  startdelim;            /* '{' */
  -    char  enddelim;              /* '}' */
  -    char  escape;                /* '\' */
  -    char* namechars;             /* 'a-zA-Z0-9_' */
  -    }
  -var_config_t;
  +typedef struct {
  +    char varinit;		/* '$' */
  +    char startdelim;		/* '{' */
  +    char enddelim;		/* '}' */
  +    char escape;		/* '\' */
  +    char *namechars;		/* 'a-zA-Z0-9_' */
  +} var_config_t;
   extern const var_config_t var_config_default;
   
   /*
  @@ -151,9 +149,9 @@
      by the caller.
   */
   
  -var_rc_t var_expand(const char* input, size_t input_len,
  -                    char** result, size_t* result_len,
  -                    var_cb_t lookup, void* lookup_context,
  -                    const var_config_t* config, int force_expand);
  +var_rc_t var_expand(const char *input, size_t input_len,
  +		    char **result, size_t * result_len,
  +		    var_cb_t lookup, void *lookup_context,
  +		    const var_config_t * config, int force_expand);
   
  -#endif /* !defined(LIB_OSSP_VAR_H) */
  +#endif				/* !defined(LIB_OSSP_VAR_H) */
  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 var_test.c
  --- ossp-pkg/var/var_test.c	2001/11/13 14:36:55	1.6
  +++ ossp-pkg/var/var_test.c	2001/11/13 14:42:57	1.7
  @@ -3,141 +3,142 @@
   #include <errno.h>
   #include "var.h"
   
  -static int env_lookup(void* context,
  -               const char* varname, size_t name_len,
  -               const char** data, size_t* data_len, size_t* buffer_size)
  -    {
  +static int env_lookup(void *context,
  +		      const char *varname, size_t name_len,
  +		      const char **data, size_t * data_len,
  +		      size_t * buffer_size)
  +{
       char tmp[256];
   
  -    if (name_len > sizeof(tmp)-1)
  -        {
  -        /* Callback can't expand variable names longer than
  -           sizeof(tmp) characters. */
  +    if (name_len > sizeof(tmp) - 1) {
  +	/* Callback can't expand variable names longer than
  +	   sizeof(tmp) characters. */
   
  -        return VAR_CALLBACK_ERROR;
  -        }
  +	return VAR_CALLBACK_ERROR;
  +    }
       memcpy(tmp, varname, name_len);
       tmp[name_len] = '\0';
       *data = getenv(tmp);
       if (*data == NULL)
  -        return 0;
  +	return 0;
       *data_len = strlen(*data);
       *buffer_size = 0;
       return 1;
  -    }
  +}
   
  -struct test_case
  -    {
  -    const char* input;
  -    const char* expected;
  +struct test_case {
  +    const char *input;
  +    const char *expected;
  +};
  +
  +int main(int argc, char **argv)
  +{
  +    const struct test_case tests[] = {
  +	{"$HOME", "/home/regression-tests"},
  +	{"${FOO}", "os"},
  +	{"${BAR}", "type"},
  +	{"${${FOO:u}${BAR:u}:l:u}", "REGRESSION-OS"},
  +	{"${UNDEFINED}", "${UNDEFINED}"},
  +	{"${OSTYPE:#}", "13"},
  +	{"${EMPTY:-test${FOO}test}", "testostest"},
  +	{"${EMPTY:-test${FOO:u}test}", "testOStest"},
  +	{"${TERM:-test${FOO}test}", "regression-term"},
  +	{"${EMPTY:+FOO}", ""},
  +	{"${HOME:+test${FOO}test}", "testostest"},
  +	{"${HOME:+${OS${BAR:u}}}", "regression-os"},
  +	{"${HOME:+OS${UNDEFINED:u}}", "OS${UNDEFINED:u}"},
  +	{"${UNDEFINED:+OS${BAR:u}}", "${UNDEFINED:+OS${BAR:u}}"},
  +	{"${HOME:*heinz}", ""},
  +	{"${EMPTY:*claus}", "claus"},
  +	{"${TERM}", "regression-term"},
  +	{"${HOME:s/reg/bla/}", "/home/blaression-tests"},
  +	{"${HOME:s/e/bla/}", "/hombla/regression-tests"},
  +	{"${HOME:s/e/bla/g}", "/hombla/rblagrblassion-tblasts"},
  +	{"${HOME:s/\\//_/g}", "_home_regression-tests"},
  +	{"${HOME:s/[eso]/_/g}", "/h_m_/r_gr___i_n-t__t_"},
  +	{"${HOME:s/[esO]/_/g}", "/hom_/r_gr___ion-t__t_"},
  +	{"${HOME:s/[esO]/_/gi}", "/h_m_/r_gr___i_n-t__t_"},
  +	{"${OSTYPE:s/^[re]/_/g}", "_egression-os"},
  +	{"${EMPTY:s/^[re]/_/g}", ""},
  +	{"${HOME:s/.*/heinz/}", "heinz"},
  +	{"${HOME:s/e/bla/t}", "/hombla/regression-tests"},
  +	{"${HOME:s/E/bla/t}", "/home/regression-tests"},
  +	{"${HOME:s/E/bla/ti}", "/hombla/regression-tests"},
  +	{"${HOME:s/E/bla/tig}", "/hombla/rblagrblassion-tblasts"},
  +	{"${HOME:o1-5}", "home/"},
  +	{"${HOME:o1,5}", "home"},
  +	{"${HOME:o5,}", "/regression-tests"},
  +	{"${HOME:o5-}", "/regression-tests"},
  +	{"${HOME:o7,13}", "egress"},
  +	{"${HOME:y/a-z/A-YZ/}", "/HOME/REGRESSION-TESTS"},
  +	{"${HOME:y/e-g/a-c/}", "/homa/racrassion-tasts"},
  +	{"${FOO:p/15/../l}", "os............."},
  +	{"${FOO:p/15/12345/l}", "os1234512345123"},
  +	{"${FOO:p/15/../r}", ".............os"},
  +	{"${FOO:p/15/12345/r}", "1234512345123os"},
  +	{"${FOO:p/15/../c}", "......os......."},
  +	{"${FOO:p/15/12345/c}", "123451os1234512"},
  +	{"${FOO:s/os/\\x{4F}\\123/g}", "OS"},
  +	{"${FOO:s/os/\\1\\x4F\\123/t}", "\\1OS"},
  +	{"${HOME:s/g(res)s/x\\1x/g}", "/home/rexresxion-tests"},
  +	{"${HOME:s/(s+)/_\\1_/g}", "/home/regre_ss_ion-te_s_t_s_"},
  +	{"${HOME:s/\\x65/\\x45/g}", "/homE/rEgrEssion-tEsts"},
  +	{"${HOME:s/(s*)/x\\1X/g}",
  +	 "xXxXxXxXxXxXxXxXxXxXxXxssXxXxXxXxXxXxXxsXxXxsX"},
  +	{"${HOME:s/./\\\\/g}",
  +	 "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"}
       };
  -
  -int main(int argc, char** argv)
  -    {
  -    const struct test_case tests[] =
  -        {
  -        { "$HOME",                       "/home/regression-tests"          },
  -        { "${FOO}",                      "os"                              },
  -        { "${BAR}",                      "type"                            },
  -        { "${${FOO:u}${BAR:u}:l:u}",     "REGRESSION-OS"                   },
  -        { "${UNDEFINED}",                "${UNDEFINED}"                    },
  -        { "${OSTYPE:#}",                 "13"                              },
  -        { "${EMPTY:-test${FOO}test}",    "testostest"                      },
  -        { "${EMPTY:-test${FOO:u}test}",  "testOStest"                      },
  -        { "${TERM:-test${FOO}test}",     "regression-term"                 },
  -        { "${EMPTY:+FOO}",               ""                                },
  -        { "${HOME:+test${FOO}test}",     "testostest"                      },
  -        { "${HOME:+${OS${BAR:u}}}",      "regression-os"                   },
  -        { "${HOME:+OS${UNDEFINED:u}}",   "OS${UNDEFINED:u}"                },
  -        { "${UNDEFINED:+OS${BAR:u}}",    "${UNDEFINED:+OS${BAR:u}}"        },
  -        { "${HOME:*heinz}",              ""                                },
  -        { "${EMPTY:*claus}",             "claus"                           },
  -        { "${TERM}",                     "regression-term"                 },
  -        { "${HOME:s/reg/bla/}",          "/home/blaression-tests"          },
  -        { "${HOME:s/e/bla/}",            "/hombla/regression-tests"        },
  -        { "${HOME:s/e/bla/g}",           "/hombla/rblagrblassion-tblasts"  },
  -        { "${HOME:s/\\//_/g}",           "_home_regression-tests"          },
  -        { "${HOME:s/[eso]/_/g}",         "/h_m_/r_gr___i_n-t__t_"          },
  -        { "${HOME:s/[esO]/_/g}",         "/hom_/r_gr___ion-t__t_"          },
  -        { "${HOME:s/[esO]/_/gi}",        "/h_m_/r_gr___i_n-t__t_"          },
  -        { "${OSTYPE:s/^[re]/_/g}",       "_egression-os"                   },
  -        { "${EMPTY:s/^[re]/_/g}",        ""                                },
  -        { "${HOME:s/.*/heinz/}",         "heinz"                           },
  -        { "${HOME:s/e/bla/t}",           "/hombla/regression-tests"        },
  -        { "${HOME:s/E/bla/t}",           "/home/regression-tests"          },
  -        { "${HOME:s/E/bla/ti}",          "/hombla/regression-tests"        },
  -        { "${HOME:s/E/bla/tig}",         "/hombla/rblagrblassion-tblasts"  },
  -        { "${HOME:o1-5}",                "home/"                           },
  -        { "${HOME:o1,5}",                "home"                            },
  -        { "${HOME:o5,}",                 "/regression-tests"               },
  -        { "${HOME:o5-}",                 "/regression-tests"               },
  -        { "${HOME:o7,13}",               "egress"                          },
  -        { "${HOME:y/a-z/A-YZ/}",         "/HOME/REGRESSION-TESTS"          },
  -        { "${HOME:y/e-g/a-c/}",          "/homa/racrassion-tasts"          },
  -        { "${FOO:p/15/../l}",            "os............."                 },
  -        { "${FOO:p/15/12345/l}",         "os1234512345123"                 },
  -        { "${FOO:p/15/../r}",            ".............os"                 },
  -        { "${FOO:p/15/12345/r}",         "1234512345123os"                 },
  -        { "${FOO:p/15/../c}",            "......os......."                 },
  -        { "${FOO:p/15/12345/c}",         "123451os1234512"                 },
  -        { "${FOO:s/os/\\x{4F}\\123/g}",  "OS"                              },
  -        { "${FOO:s/os/\\1\\x4F\\123/t}", "\\1OS"                           },
  -        { "${HOME:s/g(res)s/x\\1x/g}",   "/home/rexresxion-tests"          },
  -        { "${HOME:s/(s+)/_\\1_/g}",      "/home/regre_ss_ion-te_s_t_s_"    },
  -        { "${HOME:s/\\x65/\\x45/g}",     "/homE/rEgrEssion-tEsts"          },
  -        { "${HOME:s/(s*)/x\\1X/g}",      "xXxXxXxXxXxXxXxXxXxXxXxssXxXxXxXxXxXxXxsXxXxsX" },
  -        { "${HOME:s/./\\\\/g}",          "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" }
  -        };
  -    char*    tmp;
  -    size_t   tmp_len;
  +    char *tmp;
  +    size_t tmp_len;
       var_rc_t rc;
  -    size_t   i;
  -    char     buffer[1024];
  +    size_t i;
  +    char buffer[1024];
   
       if (setenv("HOME", "/home/regression-tests", 1) != 0 ||
  -        setenv("OSTYPE", "regression-os", 1) != 0 ||
  -        setenv("TERM", "regression-term", 1) != 0 ||
  -        setenv("FOO", "os", 1) != 0 ||
  -        setenv("BAR", "type", 1) != 0 ||
  -        setenv("EMPTY", "", 1) != 0)
  -        {
  -        printf("Failed to set the environment: %s.\n", strerror(errno));
  -        return 1;
  -        }
  +	setenv("OSTYPE", "regression-os", 1) != 0 ||
  +	setenv("TERM", "regression-term", 1) != 0 ||
  +	setenv("FOO", "os", 1) != 0 ||
  +	setenv("BAR", "type", 1) != 0 || setenv("EMPTY", "", 1) != 0) {
  +	printf("Failed to set the environment: %s.\n", strerror(errno));
  +	return 1;
  +    }
       unsetenv("UNDEFINED");
   
  -    for (i = 0; i < sizeof(tests) / sizeof(struct test_case); ++i)
  -        {
  +    for (i = 0; i < sizeof(tests) / sizeof(struct test_case); ++i) {
   #ifdef DEBUG
  -        printf("Test case #%02d: Original input is '%s'.\n", i, tests[i].input);
  +	printf("Test case #%02d: Original input is '%s'.\n", i,
  +	       tests[i].input);
   #endif
  -        rc = var_unescape(tests[i].input, strlen(tests[i].input), buffer, 0);
  -        if (rc != VAR_OK)
  -            {
  -            printf("Test case #%d: First var_unescape() failed with return code %d.\n", i, rc);
  -            return 1;
  -            }
  +	rc = var_unescape(tests[i].input, strlen(tests[i].input), buffer,
  +			  0);
  +	if (rc != VAR_OK) {
  +	    printf
  +		("Test case #%d: First var_unescape() failed with return code %d.\n",
  +		 i, rc);
  +	    return 1;
  +	}
   #ifdef DEBUG
  -        printf("Test case #%02d: Unescaped input is '%s'.\n", i, buffer);
  +	printf("Test case #%02d: Unescaped input is '%s'.\n", i, buffer);
   #endif
  -        rc = var_expand(buffer, strlen(buffer), &tmp, &tmp_len,
  -                        &env_lookup, NULL,
  -                        NULL, 0);
  -        if (rc != VAR_OK)
  -            {
  -            printf("Test case #%d: var_expand() failed with return code %d.\n", i, rc);
  -            return 1;
  -            }
  +	rc = var_expand(buffer, strlen(buffer), &tmp, &tmp_len,
  +			&env_lookup, NULL, NULL, 0);
  +	if (rc != VAR_OK) {
  +	    printf
  +		("Test case #%d: var_expand() failed with return code %d.\n",
  +		 i, rc);
  +	    return 1;
  +	}
   #ifdef DEBUG
  -        printf("Test case #%02d: Expanded output is '%s'.\n", i, tmp);
  +	printf("Test case #%02d: Expanded output is '%s'.\n", i, tmp);
   #endif
  -        if (tmp_len != strlen(tests[i].expected) || tmp == NULL || memcmp(tests[i].expected, tmp, tmp_len) != 0)
  -            {
  -            printf("Test case #%d: Expected result '%s' but got '%s'.\n", i, tests[i].expected, tmp);
  -            return 1;
  -            }
  -        free(tmp);
  -        }
  +	if (tmp_len != strlen(tests[i].expected) || tmp == NULL
  +	    || memcmp(tests[i].expected, tmp, tmp_len) != 0) {
  +	    printf("Test case #%d: Expected result '%s' but got '%s'.\n",
  +		   i, tests[i].expected, tmp);
  +	    return 1;
  +	}
  +	free(tmp);
  +    }
   
       return 0;
  -    }
  +}

From ossp-cvs-owner@ossp.org  Tue Nov 13 15:43:45 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fADEhiQ25185; Tue, 13 Nov 2001 15:43:44 +0100 (CET)
Date: Tue, 13 Nov 2001 15:43:44 +0100 (CET)
Message-Id: <200111131443.fADEhiQ25185@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   13-Nov-2001 15:43:44
  Branch: HEAD                             Handle: 2001111314434300

  Modified files:
    ossp-pkg/var            TODO

  Log:
    Unescaping and submatching are implemented and hence removed from the
    TODO file.

  Summary:
    Revision    Changes     Path
    1.4         +0  -13     ossp-pkg/var/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/var/TODO
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 TODO
  --- ossp-pkg/var/TODO	2001/11/13 12:49:29	1.3
  +++ ossp-pkg/var/TODO	2001/11/13 14:43:43	1.4
  @@ -1,18 +1,5 @@
                                  OSSP var
   
  - - Beim Suchen/Ersetzen mit Regular-Expression-Unterstützung fehlt
  -   noch die Erkennung von \1, \2 etc.
  -
  - - Jedes Vorkommen eines der folgenden Konstrukte im Text wird durch
  -   das zugehörige Sonderzeichen ersetzt.
  -
  -       \t          tab
  -       \n          newline
  -       \r          return
  -       \033        octal char
  -       \x1B        hex char
  -       \x{263a}    wide hex char
  -
    - Doku sollte ein Beispiel für Quoting von Shell- und
      Regexp-Ausdrücken enthalten.
   

From ossp-cvs-owner@ossp.org  Tue Nov 13 15:46:56 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fADEkuk25710; Tue, 13 Nov 2001 15:46:56 +0100 (CET)
Date: Tue, 13 Nov 2001 15:46:56 +0100 (CET)
Message-Id: <200111131446.fADEkuk25710@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var Makefile
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   13-Nov-2001 15:46:56
  Branch: HEAD                             Handle: 2001111314465500

  Modified files:
    ossp-pkg/var            Makefile

  Log:
    Made the execution of the test program at the 'check' target silent.

  Summary:
    Revision    Changes     Path
    1.7         +1  -1      ossp-pkg/var/Makefile
  ____________________________________________________________________________

  Index: ossp-pkg/var/Makefile
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 Makefile
  --- ossp-pkg/var/Makefile	2001/11/13 14:36:30	1.6
  +++ ossp-pkg/var/Makefile	2001/11/13 14:46:55	1.7
  @@ -31,7 +31,7 @@
   	$(POD2MAN) var.pod >$@
   
   check:		var_test
  -	./var_test && echo "All tests succeeed."
  +	@./var_test && echo "All tests succeeed."
   
   clean::
   	rm -f $(OBJS) libvarexp.a var_test.o var_test var.3

From ossp-cvs-owner@ossp.org  Tue Nov 13 15:56:07 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fADEu6P26648; Tue, 13 Nov 2001 15:56:06 +0100 (CET)
Date: Tue, 13 Nov 2001 15:56:06 +0100 (CET)
Message-Id: <200111131456.fADEu6P26648@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   13-Nov-2001 15:56:06
  Branch: HEAD                             Handle: 2001111314560500

  Modified files:
    ossp-pkg/var            var.c

  Log:
    Added cast to int for isdigit() parameter to avoid compile-time
    warning.

  Summary:
    Revision    Changes     Path
    1.9         +3  -3      ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 var.c
  --- ossp-pkg/var/var.c	2001/11/13 14:42:57	1.8
  +++ ossp-pkg/var/var.c	2001/11/13 14:56:05	1.9
  @@ -351,7 +351,7 @@
   	    case '7':
   	    case '8':
   	    case '9':
  -		if (end - src >= 3 && isdigit(src[1]) && isdigit(src[2])) {
  +		if (end - src >= 3 && isdigit((int)src[1]) && isdigit((int)src[2])) {
   		    if ((rc = expand_octal(&src, &dst, end)) != 0)
   			return rc;
   		    break;
  @@ -403,7 +403,7 @@
   static int number(const char *begin, const char *end)
   {
       const char *p;
  -    for (p = begin; p != end && isdigit(*p); ++p);
  +    for (p = begin; p != end && isdigit((int)*p); ++p);
       return p - begin;
   }
   
  @@ -896,7 +896,7 @@
   		++p;
   		continue;
   	    }
  -	    if (!isdigit(*p)) {
  +	    if (!isdigit((int)*p)) {
   		free_tokenbuf(expanded);
   		return VAR_UNKNOWN_QUOTED_PAIR_IN_REPLACE;
   	    }

From ossp-cvs-owner@ossp.org  Tue Nov 13 20:25:43 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fADJPfB63273; Tue, 13 Nov 2001 20:25:42 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id D0C824CE617; Tue, 13 Nov 2001 20:25:41 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Message-Id: <20011113192541.D0C824CE617@visp.engelschall.com>
Date: Tue, 13 Nov 2001 20:25:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   13-Nov-2001 20:25:41
  Branch: HEAD                             Handle: 2001111319254100

  Modified files:
    ossp-pkg/var            var.c

  Log:
    Quickly get rid of tabs before reviewing and editing starts

  Summary:
    Revision    Changes     Path
    1.10        +957 -957   ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 var.c
  --- ossp-pkg/var/var.c	2001/11/13 14:56:05	1.9
  +++ ossp-pkg/var/var.c	2001/11/13 19:25:41	1.10
  @@ -38,11 +38,11 @@
   /* The default configuration for the parser. */
   
   const var_config_t var_config_default = {
  -    '$',			/* varinit */
  -    '{',			/* startdelim */
  -    '}',			/* enddelim */
  -    '\\',			/* escape */
  -    "a-zA-Z0-9_"		/* namechars */
  +    '$',                        /* varinit */
  +    '{',                        /* startdelim */
  +    '}',                        /* enddelim */
  +    '\\',                       /* escape */
  +    "a-zA-Z0-9_"                /* namechars */
   };
   
   /* Routines for manipulation of tokenbufs. */
  @@ -73,18 +73,18 @@
   {
       char *p = malloc(len + 1);
       if (p) {
  -	memcpy(p, data, len);
  -	buf->begin = p;
  -	buf->end = p + len;
  -	buf->buffer_size = len + 1;
  -	*((char *) (buf->end)) = '\0';
  -	return 1;
  +        memcpy(p, data, len);
  +        buf->begin = p;
  +        buf->end = p + len;
  +        buf->buffer_size = len + 1;
  +        *((char *) (buf->end)) = '\0';
  +        return 1;
       } else
  -	return 0;
  +        return 0;
   }
   
   static int append_to_tokenbuf(tokenbuf * output, const char *data,
  -			      size_t len)
  +                              size_t len)
   {
       char *new_buffer;
       size_t new_size;
  @@ -93,55 +93,55 @@
          standard-sized buffer to begin with. */
   
       if (output->begin == NULL) {
  -	if ((output->begin = output->end =
  -	     malloc(VAR_INITIAL_BUFFER_SIZE)) == NULL)
  -	    return 0;
  -	else
  -	    output->buffer_size = VAR_INITIAL_BUFFER_SIZE;
  +        if ((output->begin = output->end =
  +             malloc(VAR_INITIAL_BUFFER_SIZE)) == NULL)
  +            return 0;
  +        else
  +            output->buffer_size = VAR_INITIAL_BUFFER_SIZE;
       }
   
       /* Does the token contain text, but no buffer has been allocated
          yet? */
   
       if (output->buffer_size == 0) {
  -	/* Check whether data borders to output. If, we can append
  -	   simly by increasing the end pointer. */
  +        /* Check whether data borders to output. If, we can append
  +           simly by increasing the end pointer. */
   
  -	if (output->end == data) {
  -	    output->end += len;
  -	    return 1;
  -	}
  -
  -	/* OK, so copy the contents of output into an allocated buffer
  -	   so that we can append that way. */
  -
  -	else {
  -	    char *tmp = malloc(output->end - output->begin + len + 1);
  -	    if (!tmp)
  -		return 0;
  -	    memcpy(tmp, output->begin, output->end - output->begin);
  -	    output->buffer_size = output->end - output->begin;
  -	    output->begin = tmp;
  -	    output->end = tmp + output->buffer_size;
  -	    output->buffer_size += len + 1;
  -	}
  +        if (output->end == data) {
  +            output->end += len;
  +            return 1;
  +        }
  +
  +        /* OK, so copy the contents of output into an allocated buffer
  +           so that we can append that way. */
  +
  +        else {
  +            char *tmp = malloc(output->end - output->begin + len + 1);
  +            if (!tmp)
  +                return 0;
  +            memcpy(tmp, output->begin, output->end - output->begin);
  +            output->buffer_size = output->end - output->begin;
  +            output->begin = tmp;
  +            output->end = tmp + output->buffer_size;
  +            output->buffer_size += len + 1;
  +        }
       }
   
       /* Does the token fit into the current buffer? If not, realloc a
          larger buffer that fits. */
   
       if ((output->buffer_size - (output->end - output->begin)) <= len) {
  -	new_size = output->buffer_size;
  -	do {
  -	    new_size *= 2;
  -	}
  -	while ((new_size - (output->end - output->begin)) <= len);
  -	new_buffer = realloc((char *) output->begin, new_size);
  -	if (new_buffer == NULL)
  -	    return 0;
  -	output->end = new_buffer + (output->end - output->begin);
  -	output->begin = new_buffer;
  -	output->buffer_size = new_size;
  +        new_size = output->buffer_size;
  +        do {
  +            new_size *= 2;
  +        }
  +        while ((new_size - (output->end - output->begin)) <= len);
  +        new_buffer = realloc((char *) output->begin, new_size);
  +        if (new_buffer == NULL)
  +            return 0;
  +        output->end = new_buffer + (output->end - output->begin);
  +        output->begin = new_buffer;
  +        output->buffer_size = new_size;
       }
   
       /* Append the data at the end of the current buffer. */
  @@ -155,7 +155,7 @@
   static void free_tokenbuf(tokenbuf * buf)
   {
       if (buf->begin != NULL && buf->buffer_size > 0)
  -	free((char *) buf->begin);
  +        free((char *) buf->begin);
       buf->begin = buf->end = NULL;
       buf->buffer_size = 0;
   }
  @@ -165,8 +165,8 @@
       const char *p;
       size_t num = 0;
       for (p = number->begin; p != number->end; ++p) {
  -	num *= 10;
  -	num += *p - '0';
  +        num *= 10;
  +        num += *p - '0';
       }
       return num;
   }
  @@ -176,7 +176,7 @@
   static void expand_range(char a, char b, char class[256])
   {
       do {
  -	class[(int) a] = 1;
  +        class[(int) a] = 1;
       }
       while (++a <= b);
   }
  @@ -188,21 +188,21 @@
       /* Clear the class array. */
   
       for (i = 0; i < 256; ++i)
  -	class[i] = 0;
  +        class[i] = 0;
   
       /* Walk through the class description and set the appropriate
          entries in the array. */
   
       while (*desc != '\0') {
  -	if (desc[1] == '-' && desc[2] != '\0') {
  -	    if (desc[0] > desc[2])
  -		return VAR_INCORRECT_CLASS_SPEC;
  -	    expand_range(desc[0], desc[2], class);
  -	    desc += 3;
  -	} else {
  -	    class[(int) *desc] = 1;
  -	    ++desc;
  -	}
  +        if (desc[1] == '-' && desc[2] != '\0') {
  +            if (desc[0] > desc[2])
  +                return VAR_INCORRECT_CLASS_SPEC;
  +            expand_range(desc[0], desc[2], class);
  +            desc += 3;
  +        } else {
  +            class[(int) *desc] = 1;
  +            ++desc;
  +        }
       }
   
       return VAR_OK;
  @@ -211,9 +211,9 @@
   static int isoct(char c)
   {
       if (c >= '0' && c <= '7')
  -	return 1;
  +        return 1;
       else
  -	return 0;
  +        return 0;
   }
   
   static var_rc_t expand_octal(const char **src, char **dst, const char *end)
  @@ -221,13 +221,13 @@
       unsigned char c;
   
       if (end - *src < 3)
  -	return VAR_INCOMPLETE_OCTAL;
  +        return VAR_INCOMPLETE_OCTAL;
       if (!isoct(**src) || !isoct((*src)[1]) || !isoct((*src)[2]))
  -	return VAR_INVALID_OCTAL;
  +        return VAR_INVALID_OCTAL;
   
       c = **src - '0';
       if (c > 3)
  -	return VAR_OCTAL_TOO_LARGE;
  +        return VAR_OCTAL_TOO_LARGE;
       c *= 8;
       ++(*src);
   
  @@ -245,38 +245,38 @@
   static int ishex(char c)
   {
       if ((c >= '0' && c <= '9') ||
  -	(c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'))
  -	return 1;
  +        (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'))
  +        return 1;
       else
  -	return 0;
  +        return 0;
   }
   
   static var_rc_t expand_simple_hex(const char **src, char **dst,
  -				  const char *end)
  +                                  const char *end)
   {
       unsigned char c = 0;
   
       if (end - *src < 2)
  -	return VAR_INCOMPLETE_HEX;
  +        return VAR_INCOMPLETE_HEX;
       if (!ishex(**src) || !ishex((*src)[1]))
  -	return VAR_INVALID_HEX;
  +        return VAR_INVALID_HEX;
   
       if (**src >= '0' && **src <= '9')
  -	c = **src - '0';
  +        c = **src - '0';
       else if (c >= 'a' && c <= 'f')
  -	c = **src - 'a' + 10;
  +        c = **src - 'a' + 10;
       else if (c >= 'A' && c <= 'F')
  -	c = **src - 'A' + 10;
  +        c = **src - 'A' + 10;
   
       c = c << 4;
       ++(*src);
   
       if (**src >= '0' && **src <= '9')
  -	c += **src - '0';
  +        c += **src - '0';
       else if (**src >= 'a' && **src <= 'f')
  -	c += **src - 'a' + 10;
  +        c += **src - 'a' + 10;
       else if (**src >= 'A' && **src <= 'F')
  -	c += **src - 'A' + 10;
  +        c += **src - 'A' + 10;
   
       **dst = (char) c;
       ++(*dst);
  @@ -284,17 +284,17 @@
   }
   
   static var_rc_t expand_grouped_hex(const char **src, char **dst,
  -				   const char *end)
  +                                   const char *end)
   {
       var_rc_t rc;
   
       while (*src < end && **src != '}') {
  -	if ((rc = expand_simple_hex(src, dst, end)) != 0)
  -	    return rc;
  -	++(*src);
  +        if ((rc = expand_simple_hex(src, dst, end)) != 0)
  +            return rc;
  +        ++(*src);
       }
       if (*src == end)
  -	return VAR_INCOMPLETE_GROUPED_HEX;
  +        return VAR_INCOMPLETE_GROUPED_HEX;
   
       return VAR_OK;
   }
  @@ -302,69 +302,69 @@
   static var_rc_t expand_hex(const char **src, char **dst, const char *end)
   {
       if (*src == end)
  -	return VAR_INCOMPLETE_HEX;
  +        return VAR_INCOMPLETE_HEX;
       if (**src == '{') {
  -	++(*src);
  -	return expand_grouped_hex(src, dst, end);
  +        ++(*src);
  +        return expand_grouped_hex(src, dst, end);
       } else
  -	return expand_simple_hex(src, dst, end);
  +        return expand_simple_hex(src, dst, end);
   }
   
   var_rc_t var_unescape(const char *src, size_t len, char *dst,
  -		      int unescape_all)
  +                      int unescape_all)
   {
       const char *end = src + len;
       var_rc_t rc;
   
       while (src < end) {
  -	if (*src == '\\') {
  -	    if (++src == end)
  -		return VAR_INCOMPLETE_NAMED_CHARACTER;
  -	    switch (*src) {
  -	    case '\\':
  -		if (!unescape_all) {
  -		    *dst++ = '\\';
  -		}
  -		*dst++ = '\\';
  -		break;
  -	    case 'n':
  -		*dst++ = '\n';
  -		break;
  -	    case 't':
  -		*dst++ = '\t';
  -		break;
  -	    case 'r':
  -		*dst++ = '\r';
  -		break;
  -	    case 'x':
  -		++src;
  -		if ((rc = expand_hex(&src, &dst, end)) != 0)
  -		    return rc;
  -		break;
  -	    case '0':
  -	    case '1':
  -	    case '2':
  -	    case '3':
  -	    case '4':
  -	    case '5':
  -	    case '6':
  -	    case '7':
  -	    case '8':
  -	    case '9':
  -		if (end - src >= 3 && isdigit((int)src[1]) && isdigit((int)src[2])) {
  -		    if ((rc = expand_octal(&src, &dst, end)) != 0)
  -			return rc;
  -		    break;
  -		}
  -	    default:
  -		if (!unescape_all) {
  -		    *dst++ = '\\';
  -		}
  -		*dst++ = *src;
  -	    }
  -	    ++src;
  -	} else
  -	    *dst++ = *src++;
  +        if (*src == '\\') {
  +            if (++src == end)
  +                return VAR_INCOMPLETE_NAMED_CHARACTER;
  +            switch (*src) {
  +            case '\\':
  +                if (!unescape_all) {
  +                    *dst++ = '\\';
  +                }
  +                *dst++ = '\\';
  +                break;
  +            case 'n':
  +                *dst++ = '\n';
  +                break;
  +            case 't':
  +                *dst++ = '\t';
  +                break;
  +            case 'r':
  +                *dst++ = '\r';
  +                break;
  +            case 'x':
  +                ++src;
  +                if ((rc = expand_hex(&src, &dst, end)) != 0)
  +                    return rc;
  +                break;
  +            case '0':
  +            case '1':
  +            case '2':
  +            case '3':
  +            case '4':
  +            case '5':
  +            case '6':
  +            case '7':
  +            case '8':
  +            case '9':
  +                if (end - src >= 3 && isdigit((int)src[1]) && isdigit((int)src[2])) {
  +                    if ((rc = expand_octal(&src, &dst, end)) != 0)
  +                        return rc;
  +                    break;
  +                }
  +            default:
  +                if (!unescape_all) {
  +                    *dst++ = '\\';
  +                }
  +                *dst++ = *src;
  +            }
  +            ++src;
  +        } else
  +            *dst++ = *src++;
       }
       *dst = '\0';
       return VAR_OK;
  @@ -373,27 +373,27 @@
   /* The recursive-descent parser for variable expressions. */
   
   static int variable(const char *, const char *, const var_config_t *,
  -		    const char[256], var_cb_t, void *, int, tokenbuf *);
  +                    const char[256], var_cb_t, void *, int, tokenbuf *);
   static int command(const char *, const char *, const var_config_t *,
  -		   const char[256], var_cb_t, void *, int, tokenbuf *);
  +                   const char[256], var_cb_t, void *, int, tokenbuf *);
   
   static int text(const char *begin, const char *end, char varinit,
  -		char escape)
  +                char escape)
   {
       const char *p;
       for (p = begin; p != end && *p != varinit; ++p) {
  -	if (*p == escape) {
  -	    if (p + 1 == end)
  -		return VAR_INCOMPLETE_QUOTED_PAIR;
  -	    else
  -		++p;
  -	}
  +        if (*p == escape) {
  +            if (p + 1 == end)
  +                return VAR_INCOMPLETE_QUOTED_PAIR;
  +            else
  +                ++p;
  +        }
       }
       return p - begin;
   }
   
   static int varname(const char *begin, const char *end,
  -		   const char nameclass[256])
  +                   const char nameclass[256])
   {
       const char *p;
       for (p = begin; p != end && nameclass[(int) *p]; ++p);
  @@ -408,43 +408,43 @@
   }
   
   static int substext(const char *begin, const char *end,
  -		    const var_config_t * config)
  +                    const var_config_t * config)
   {
       const char *p;
       for (p = begin; p != end && *p != config->varinit && *p != '/'; ++p) {
  -	if (*p == config->escape) {
  -	    if (p + 1 == end)
  -		return VAR_INCOMPLETE_QUOTED_PAIR;
  -	    else
  -		++p;
  -	}
  +        if (*p == config->escape) {
  +            if (p + 1 == end)
  +                return VAR_INCOMPLETE_QUOTED_PAIR;
  +            else
  +                ++p;
  +        }
       }
       return p - begin;
   }
   
   static int exptext(const char *begin, const char *end,
  -		   const var_config_t * config)
  +                   const var_config_t * config)
   {
       const char *p;
       for (p = begin;
  -	 p != end && *p != config->varinit && *p != config->enddelim
  -	 && *p != ':'; ++p) {
  -	if (*p == config->escape) {
  -	    if (p + 1 == end)
  -		return VAR_INCOMPLETE_QUOTED_PAIR;
  -	    else
  -		++p;
  -	}
  +         p != end && *p != config->varinit && *p != config->enddelim
  +         && *p != ':'; ++p) {
  +        if (*p == config->escape) {
  +            if (p + 1 == end)
  +                return VAR_INCOMPLETE_QUOTED_PAIR;
  +            else
  +                ++p;
  +        }
       }
       return p - begin;
   }
   
   
   static int expression(const char *begin, const char *end,
  -		      const var_config_t * config,
  -		      const char nameclass[256], var_cb_t lookup,
  -		      void *lookup_context, int force_expand,
  -		      tokenbuf * result)
  +                      const var_config_t * config,
  +                      const char nameclass[256], var_cb_t lookup,
  +                      void *lookup_context, int force_expand,
  +                      tokenbuf * result)
   {
       const char *p = begin;
       const char *data;
  @@ -463,37 +463,37 @@
       /* Expect STARTDELIM. */
   
       if (p == end || *p != config->startdelim)
  -	return 0;
  +        return 0;
   
       if (++p == end)
  -	return VAR_INCOMPLETE_VARIABLE_SPEC;
  +        return VAR_INCOMPLETE_VARIABLE_SPEC;
   
       /* Get the name of the variable to expand. The name may consist of
          an arbitrary number of VARNAMEs and VARIABLEs. */
   
       do {
  -	rc = varname(p, end, nameclass);
  -	if (rc < 0)
  -	    goto error_return;
  -	else if (rc > 0) {
  -	    if (!append_to_tokenbuf(&name, p, rc)) {
  -		rc = VAR_OUT_OF_MEMORY;
  -		goto error_return;
  -	    } else
  -		p += rc;
  -	}
  -
  -	rc = variable(p, end, config, nameclass, lookup, lookup_context,
  -		      force_expand, &tmp);
  -	if (rc < 0)
  -	    goto error_return;
  -	else if (rc > 0) {
  -	    if (!append_to_tokenbuf(&name, tmp.begin, tmp.end - tmp.begin)) {
  -		rc = VAR_OUT_OF_MEMORY;
  -		goto error_return;
  -	    } else
  -		p += rc;
  -	}
  +        rc = varname(p, end, nameclass);
  +        if (rc < 0)
  +            goto error_return;
  +        else if (rc > 0) {
  +            if (!append_to_tokenbuf(&name, p, rc)) {
  +                rc = VAR_OUT_OF_MEMORY;
  +                goto error_return;
  +            } else
  +                p += rc;
  +        }
  +
  +        rc = variable(p, end, config, nameclass, lookup, lookup_context,
  +                      force_expand, &tmp);
  +        if (rc < 0)
  +            goto error_return;
  +        else if (rc > 0) {
  +            if (!append_to_tokenbuf(&name, tmp.begin, tmp.end - tmp.begin)) {
  +                rc = VAR_OUT_OF_MEMORY;
  +                goto error_return;
  +            } else
  +                p += rc;
  +        }
       }
       while (rc > 0);
   
  @@ -501,77 +501,77 @@
          do. */
   
       if (name.begin == name.end) {
  -	rc = VAR_INCOMPLETE_VARIABLE_SPEC;
  -	goto error_return;
  +        rc = VAR_INCOMPLETE_VARIABLE_SPEC;
  +        goto error_return;
       }
   
       /* Now we have the name of the variable stored in "name". We
          expect an ENDDELIM here. */
   
       if (p == end || (*p != config->enddelim && *p != ':')) {
  -	rc = VAR_INCOMPLETE_VARIABLE_SPEC;
  -	goto error_return;
  +        rc = VAR_INCOMPLETE_VARIABLE_SPEC;
  +        goto error_return;
       } else
  -	++p;
  +        ++p;
   
       /* Use the lookup callback to get the variable's contents. */
   
       rc = (*lookup) (lookup_context, name.begin, name.end - name.begin,
  -		    &data, &len, &buffer_size);
  +                    &data, &len, &buffer_size);
       if (rc < 0)
  -	goto error_return;
  +        goto error_return;
       else if (rc == 0) {
  -	/* The variable is undefined. What we'll do now depends on the
  -	   force_expand flag. */
  +        /* The variable is undefined. What we'll do now depends on the
  +           force_expand flag. */
   
  -	if (force_expand) {
  -	    rc = VAR_UNDEFINED_VARIABLE;
  -	    goto error_return;
  -	} else {
  -	    /* Initialize result to point back to the original text in
  -	       the buffer. */
  -
  -	    result->begin = begin - 1;
  -	    result->end = p;
  -	    result->buffer_size = 0;
  -	    failed = 1;
  -	}
  +        if (force_expand) {
  +            rc = VAR_UNDEFINED_VARIABLE;
  +            goto error_return;
  +        } else {
  +            /* Initialize result to point back to the original text in
  +               the buffer. */
  +
  +            result->begin = begin - 1;
  +            result->end = p;
  +            result->buffer_size = 0;
  +            failed = 1;
  +        }
       } else {
  -	/* The preliminary result is the contents of the variable.
  -	   This may be modified by the commands that may follow. */
  +        /* The preliminary result is the contents of the variable.
  +           This may be modified by the commands that may follow. */
   
  -	result->begin = data;
  -	result->end = data + len;
  -	result->buffer_size = buffer_size;
  +        result->begin = data;
  +        result->end = data + len;
  +        result->buffer_size = buffer_size;
       }
   
       if (p[-1] == ':') {
  -	/* Parse and execute commands. */
  +        /* Parse and execute commands. */
   
  -	free_tokenbuf(&tmp);
  -	--p;
  -	while (p != end && *p == ':') {
  -	    ++p;
  -	    if (!failed)
  -		rc = command(p, end, config, nameclass, lookup,
  -			     lookup_context, force_expand, result);
  -	    else
  -		rc = command(p, end, config, nameclass, lookup,
  -			     lookup_context, force_expand, &tmp);
  -	    if (rc < 0)
  -		goto error_return;
  -	    p += rc;
  -	    if (failed)
  -		result->end += rc;
  -	}
  -
  -	if (p == end || *p != config->enddelim) {
  -	    rc = VAR_INCOMPLETE_VARIABLE_SPEC;
  -	    goto error_return;
  -	}
  -	++p;
  -	if (failed)
  -	    ++result->end;
  +        free_tokenbuf(&tmp);
  +        --p;
  +        while (p != end && *p == ':') {
  +            ++p;
  +            if (!failed)
  +                rc = command(p, end, config, nameclass, lookup,
  +                             lookup_context, force_expand, result);
  +            else
  +                rc = command(p, end, config, nameclass, lookup,
  +                             lookup_context, force_expand, &tmp);
  +            if (rc < 0)
  +                goto error_return;
  +            p += rc;
  +            if (failed)
  +                result->end += rc;
  +        }
  +
  +        if (p == end || *p != config->enddelim) {
  +            rc = VAR_INCOMPLETE_VARIABLE_SPEC;
  +            goto error_return;
  +        }
  +        ++p;
  +        if (failed)
  +            ++result->end;
       }
   
       /* Exit gracefully. */
  @@ -590,9 +590,9 @@
   }
   
   static int variable(const char *begin, const char *end,
  -		    const var_config_t * config, const char nameclass[256],
  -		    var_cb_t lookup, void *lookup_context,
  -		    int force_expand, tokenbuf * result)
  +                    const var_config_t * config, const char nameclass[256],
  +                    var_cb_t lookup, void *lookup_context,
  +                    int force_expand, tokenbuf * result)
   {
       const char *p = begin;
       const char *data;
  @@ -607,52 +607,52 @@
       /* Expect VARINIT. */
   
       if (p == end || *p != config->varinit)
  -	return 0;
  +        return 0;
   
       if (++p == end)
  -	return VAR_INCOMPLETE_VARIABLE_SPEC;
  +        return VAR_INCOMPLETE_VARIABLE_SPEC;
   
       /* Try to read the variable name. If that fails, we're parsing a
          complex expression. */
   
       rc = varname(p, end, nameclass);
       if (rc < 0)
  -	return rc;
  +        return rc;
       else if (rc > 0) {
  -	rc2 = (*lookup) (lookup_context, p, rc, &data, &len, &buffer_size);
  -	if (rc2 < 0)
  -	    return rc2;
  -	else if (rc2 == 0) {
  -	    if (force_expand)
  -		return VAR_UNDEFINED_VARIABLE;
  -	    else {
  -		result->begin = begin;
  -		result->end = begin + 1 + rc;
  -		result->buffer_size = 0;
  -		return 1 + rc;
  -	    }
  -	} else {
  -	    result->begin = data;
  -	    result->end = data + len;
  -	    result->buffer_size = buffer_size;
  -	    return 1 + rc;
  -	}
  +        rc2 = (*lookup) (lookup_context, p, rc, &data, &len, &buffer_size);
  +        if (rc2 < 0)
  +            return rc2;
  +        else if (rc2 == 0) {
  +            if (force_expand)
  +                return VAR_UNDEFINED_VARIABLE;
  +            else {
  +                result->begin = begin;
  +                result->end = begin + 1 + rc;
  +                result->buffer_size = 0;
  +                return 1 + rc;
  +            }
  +        } else {
  +            result->begin = data;
  +            result->end = data + len;
  +            result->buffer_size = buffer_size;
  +            return 1 + rc;
  +        }
       }
   
       /* OK, we're dealing with a complex expression here. */
   
       rc = expression(p, end, config, nameclass, lookup, lookup_context,
  -		    force_expand, result);
  +                    force_expand, result);
       if (rc > 0)
  -	++rc;
  +        ++rc;
       return rc;
   }
   
   static int exptext_or_variable(const char *begin, const char *end,
  -			       const var_config_t * config,
  -			       const char nameclass[256], var_cb_t lookup,
  -			       void *lookup_context, int force_expand,
  -			       tokenbuf * result)
  +                               const var_config_t * config,
  +                               const char nameclass[256], var_cb_t lookup,
  +                               void *lookup_context, int force_expand,
  +                               tokenbuf * result)
   {
       const char *p = begin;
       tokenbuf tmp;
  @@ -662,32 +662,32 @@
       init_tokenbuf(&tmp);
   
       if (begin == end)
  -	return 0;
  +        return 0;
   
       do {
  -	rc = exptext(p, end, config);
  -	if (rc < 0)
  -	    goto error_return;
  -	else if (rc > 0) {
  -	    if (!append_to_tokenbuf(result, p, rc)) {
  -		rc = VAR_OUT_OF_MEMORY;
  -		goto error_return;
  -	    } else
  -		p += rc;
  -	}
  -
  -	rc = variable(p, end, config, nameclass, lookup, lookup_context,
  -		      force_expand, &tmp);
  -	if (rc < 0)
  -	    goto error_return;
  -	else if (rc > 0) {
  -	    p += rc;
  -	    if (!append_to_tokenbuf
  -		(result, tmp.begin, tmp.end - tmp.begin)) {
  -		rc = VAR_OUT_OF_MEMORY;
  -		goto error_return;
  -	    }
  -	}
  +        rc = exptext(p, end, config);
  +        if (rc < 0)
  +            goto error_return;
  +        else if (rc > 0) {
  +            if (!append_to_tokenbuf(result, p, rc)) {
  +                rc = VAR_OUT_OF_MEMORY;
  +                goto error_return;
  +            } else
  +                p += rc;
  +        }
  +
  +        rc = variable(p, end, config, nameclass, lookup, lookup_context,
  +                      force_expand, &tmp);
  +        if (rc < 0)
  +            goto error_return;
  +        else if (rc > 0) {
  +            p += rc;
  +            if (!append_to_tokenbuf
  +                (result, tmp.begin, tmp.end - tmp.begin)) {
  +                rc = VAR_OUT_OF_MEMORY;
  +                goto error_return;
  +            }
  +        }
       }
       while (rc > 0);
   
  @@ -701,10 +701,10 @@
   }
   
   static int substext_or_variable(const char *begin, const char *end,
  -				const var_config_t * config,
  -				const char nameclass[256], var_cb_t lookup,
  -				void *lookup_context, int force_expand,
  -				tokenbuf * result)
  +                                const var_config_t * config,
  +                                const char nameclass[256], var_cb_t lookup,
  +                                void *lookup_context, int force_expand,
  +                                tokenbuf * result)
   {
       const char *p = begin;
       tokenbuf tmp;
  @@ -714,32 +714,32 @@
       init_tokenbuf(&tmp);
   
       if (begin == end)
  -	return 0;
  +        return 0;
   
       do {
  -	rc = substext(p, end, config);
  -	if (rc < 0)
  -	    goto error_return;
  -	else if (rc > 0) {
  -	    if (!append_to_tokenbuf(result, p, rc)) {
  -		rc = VAR_OUT_OF_MEMORY;
  -		goto error_return;
  -	    } else
  -		p += rc;
  -	}
  -
  -	rc = variable(p, end, config, nameclass, lookup, lookup_context,
  -		      force_expand, &tmp);
  -	if (rc < 0)
  -	    goto error_return;
  -	else if (rc > 0) {
  -	    p += rc;
  -	    if (!append_to_tokenbuf
  -		(result, tmp.begin, tmp.end - tmp.begin)) {
  -		rc = VAR_OUT_OF_MEMORY;
  -		goto error_return;
  -	    }
  -	}
  +        rc = substext(p, end, config);
  +        if (rc < 0)
  +            goto error_return;
  +        else if (rc > 0) {
  +            if (!append_to_tokenbuf(result, p, rc)) {
  +                rc = VAR_OUT_OF_MEMORY;
  +                goto error_return;
  +            } else
  +                p += rc;
  +        }
  +
  +        rc = variable(p, end, config, nameclass, lookup, lookup_context,
  +                      force_expand, &tmp);
  +        if (rc < 0)
  +            goto error_return;
  +        else if (rc > 0) {
  +            p += rc;
  +            if (!append_to_tokenbuf
  +                (result, tmp.begin, tmp.end - tmp.begin)) {
  +                rc = VAR_OUT_OF_MEMORY;
  +                goto error_return;
  +            }
  +        }
       }
       while (rc > 0);
   
  @@ -758,26 +758,26 @@
       unsigned char c, d;
       const char *p = src->begin;
       while (p != src->end) {
  -	if ((src->end - p) >= 3 && p[1] == '-') {
  -	    if (*p > p[2])
  -		return VAR_INCORRECT_TRANSPOSE_CLASS_SPEC;
  -	    for (c = *p, d = p[2]; c <= d; ++c) {
  -		if (!append_to_tokenbuf(dst, (char *) &c, 1))
  -		    return VAR_OUT_OF_MEMORY;
  -	    }
  -	    p += 3;
  -	} else {
  -	    if (!append_to_tokenbuf(dst, p, 1))
  -		return VAR_OUT_OF_MEMORY;
  -	    else
  -		++p;
  -	}
  +        if ((src->end - p) >= 3 && p[1] == '-') {
  +            if (*p > p[2])
  +                return VAR_INCORRECT_TRANSPOSE_CLASS_SPEC;
  +            for (c = *p, d = p[2]; c <= d; ++c) {
  +                if (!append_to_tokenbuf(dst, (char *) &c, 1))
  +                    return VAR_OUT_OF_MEMORY;
  +            }
  +            p += 3;
  +        } else {
  +            if (!append_to_tokenbuf(dst, p, 1))
  +                return VAR_OUT_OF_MEMORY;
  +            else
  +                ++p;
  +        }
       }
       return VAR_OK;
   }
   
   static int transpose(tokenbuf * data, tokenbuf * search,
  -		     tokenbuf * replace)
  +                     tokenbuf * replace)
   {
       tokenbuf srcclass, dstclass;
       const char *p;
  @@ -788,36 +788,36 @@
       init_tokenbuf(&dstclass);
   
       if ((rc = expand_class_description(search, &srcclass)) != VAR_OK)
  -	goto error_return;
  +        goto error_return;
       if ((rc = expand_class_description(replace, &dstclass)) != VAR_OK)
  -	goto error_return;
  +        goto error_return;
   
       if (srcclass.begin == srcclass.end) {
  -	rc = VAR_EMPTY_TRANSPOSE_CLASS;
  -	goto error_return;
  +        rc = VAR_EMPTY_TRANSPOSE_CLASS;
  +        goto error_return;
       }
       if ((srcclass.end - srcclass.begin) != (dstclass.end - dstclass.begin)) {
  -	rc = VAR_TRANSPOSE_CLASSES_MISMATCH;
  -	goto error_return;
  +        rc = VAR_TRANSPOSE_CLASSES_MISMATCH;
  +        goto error_return;
       }
   
       if (data->buffer_size == 0) {
  -	tokenbuf tmp;
  -	if (!assign_to_tokenbuf
  -	    (&tmp, data->begin, data->end - data->begin)) {
  -	    rc = VAR_OUT_OF_MEMORY;
  -	    goto error_return;
  -	}
  -	move_tokenbuf(&tmp, data);
  +        tokenbuf tmp;
  +        if (!assign_to_tokenbuf
  +            (&tmp, data->begin, data->end - data->begin)) {
  +            rc = VAR_OUT_OF_MEMORY;
  +            goto error_return;
  +        }
  +        move_tokenbuf(&tmp, data);
       }
   
       for (p = data->begin; p != data->end; ++p) {
  -	for (i = 0; i <= (srcclass.end - srcclass.begin); ++i) {
  -	    if (*p == srcclass.begin[i]) {
  -		*((char *) p) = dstclass.begin[i];
  -		break;
  -	    }
  -	}
  +        for (i = 0; i <= (srcclass.end - srcclass.begin); ++i) {
  +            if (*p == srcclass.begin[i]) {
  +                *((char *) p) = dstclass.begin[i];
  +                break;
  +            }
  +        }
       }
   
       free_tokenbuf(&srcclass);
  @@ -833,7 +833,7 @@
   }
   
   static int cut_out_offset(tokenbuf * data, tokenbuf * number1,
  -			  tokenbuf * number2, int isrange)
  +                          tokenbuf * number2, int isrange)
   {
       tokenbuf res;
       const char *p;
  @@ -843,30 +843,30 @@
       /* Determine begin of result string. */
   
       if ((data->end - data->begin) < num1)
  -	return VAR_OFFSET_OUT_OF_BOUNDS;
  +        return VAR_OFFSET_OUT_OF_BOUNDS;
       else
  -	p = data->begin + num1;
  +        p = data->begin + num1;
   
       /* If num2 is zero, we copy the rest from there. */
   
       if (num2 == 0) {
  -	if (!assign_to_tokenbuf(&res, p, data->end - p))
  -	    return VAR_OUT_OF_MEMORY;
  -    } else {			/* OK, then use num2. */
  -
  -	if (isrange) {
  -	    if ((p + num2) > data->end)
  -		return VAR_RANGE_OUT_OF_BOUNDS;
  -	    if (!assign_to_tokenbuf(&res, p, num2))
  -		return VAR_OUT_OF_MEMORY;
  -	} else {
  -	    if (num2 < num1)
  -		return VAR_OFFSET_LOGIC_ERROR;
  -	    if ((data->begin + num2) > data->end)
  -		return VAR_RANGE_OUT_OF_BOUNDS;
  -	    if (!assign_to_tokenbuf(&res, p, (data->begin + num2) - p))
  -		return VAR_OUT_OF_MEMORY;
  -	}
  +        if (!assign_to_tokenbuf(&res, p, data->end - p))
  +            return VAR_OUT_OF_MEMORY;
  +    } else {                    /* OK, then use num2. */
  +
  +        if (isrange) {
  +            if ((p + num2) > data->end)
  +                return VAR_RANGE_OUT_OF_BOUNDS;
  +            if (!assign_to_tokenbuf(&res, p, num2))
  +                return VAR_OUT_OF_MEMORY;
  +        } else {
  +            if (num2 < num1)
  +                return VAR_OFFSET_LOGIC_ERROR;
  +            if ((data->begin + num2) > data->end)
  +                return VAR_RANGE_OUT_OF_BOUNDS;
  +            if (!assign_to_tokenbuf(&res, p, (data->begin + num2) - p))
  +                return VAR_OUT_OF_MEMORY;
  +        }
       }
       free_tokenbuf(data);
       move_tokenbuf(&res, data);
  @@ -874,7 +874,7 @@
   }
   
   static int expand_regex_replace(const char *data, tokenbuf * orig,
  -				regmatch_t * pmatch, tokenbuf * expanded)
  +                                regmatch_t * pmatch, tokenbuf * expanded)
   {
       const char *p = orig->begin;
       size_t i;
  @@ -882,49 +882,49 @@
       init_tokenbuf(expanded);
   
       while (p != orig->end) {
  -	if (*p == '\\') {
  -	    if (orig->end - p <= 1) {
  -		free_tokenbuf(expanded);
  -		return VAR_INCOMPLETE_QUOTED_PAIR;
  -	    } else
  -		++p;
  -	    if (*p == '\\') {
  -		if (!append_to_tokenbuf(expanded, p, 1)) {
  -		    free_tokenbuf(expanded);
  -		    return VAR_OUT_OF_MEMORY;
  -		}
  -		++p;
  -		continue;
  -	    }
  -	    if (!isdigit((int)*p)) {
  -		free_tokenbuf(expanded);
  -		return VAR_UNKNOWN_QUOTED_PAIR_IN_REPLACE;
  -	    }
  -	    i = *p - '0';
  -	    ++p;
  -	    if (pmatch[i].rm_so == -1) {
  -		free_tokenbuf(expanded);
  -		return VAR_SUBMATCH_OUT_OF_RANGE;
  -	    }
  -	    if (!append_to_tokenbuf(expanded, data + pmatch[i].rm_so,
  -				    pmatch[i].rm_eo - pmatch[i].rm_so)) {
  -		free_tokenbuf(expanded);
  -		return VAR_OUT_OF_MEMORY;
  -	    }
  -	} else {
  -	    if (!append_to_tokenbuf(expanded, p, 1)) {
  -		free_tokenbuf(expanded);
  -		return VAR_OUT_OF_MEMORY;
  -	    }
  -	    ++p;
  -	}
  +        if (*p == '\\') {
  +            if (orig->end - p <= 1) {
  +                free_tokenbuf(expanded);
  +                return VAR_INCOMPLETE_QUOTED_PAIR;
  +            } else
  +                ++p;
  +            if (*p == '\\') {
  +                if (!append_to_tokenbuf(expanded, p, 1)) {
  +                    free_tokenbuf(expanded);
  +                    return VAR_OUT_OF_MEMORY;
  +                }
  +                ++p;
  +                continue;
  +            }
  +            if (!isdigit((int)*p)) {
  +                free_tokenbuf(expanded);
  +                return VAR_UNKNOWN_QUOTED_PAIR_IN_REPLACE;
  +            }
  +            i = *p - '0';
  +            ++p;
  +            if (pmatch[i].rm_so == -1) {
  +                free_tokenbuf(expanded);
  +                return VAR_SUBMATCH_OUT_OF_RANGE;
  +            }
  +            if (!append_to_tokenbuf(expanded, data + pmatch[i].rm_so,
  +                                    pmatch[i].rm_eo - pmatch[i].rm_so)) {
  +                free_tokenbuf(expanded);
  +                return VAR_OUT_OF_MEMORY;
  +            }
  +        } else {
  +            if (!append_to_tokenbuf(expanded, p, 1)) {
  +                free_tokenbuf(expanded);
  +                return VAR_OUT_OF_MEMORY;
  +            }
  +            ++p;
  +        }
       }
   
       return VAR_OK;
   }
   
   static int search_and_replace(tokenbuf * data, tokenbuf * search,
  -			      tokenbuf * replace, tokenbuf * flags)
  +                              tokenbuf * replace, tokenbuf * flags)
   {
       const char *p;
       int case_insensitive = 0;
  @@ -933,251 +933,251 @@
       int rc;
   
       if (search->begin == search->end)
  -	return VAR_EMPTY_SEARCH_STRING;
  +        return VAR_EMPTY_SEARCH_STRING;
   
       for (p = flags->begin; p != flags->end; ++p) {
  -	switch (tolower(*p)) {
  -	case 'i':
  -	    case_insensitive = 1;
  -	    break;
  -	case 'g':
  -	    global = 1;
  -	    break;
  -	case 't':
  -	    no_regex = 1;
  -	    break;
  -	default:
  -	    return VAR_UNKNOWN_REPLACE_FLAG;
  -	}
  +        switch (tolower(*p)) {
  +        case 'i':
  +            case_insensitive = 1;
  +            break;
  +        case 'g':
  +            global = 1;
  +            break;
  +        case 't':
  +            no_regex = 1;
  +            break;
  +        default:
  +            return VAR_UNKNOWN_REPLACE_FLAG;
  +        }
       }
   
       if (no_regex) {
  -	tokenbuf tmp;
  -	init_tokenbuf(&tmp);
  +        tokenbuf tmp;
  +        init_tokenbuf(&tmp);
   
  -	for (p = data->begin; p != data->end;) {
  -	    if (case_insensitive)
  -		rc = strncasecmp(p, search->begin,
  -				 search->end - search->begin);
  -	    else
  -		rc = strncmp(p, search->begin,
  -			     search->end - search->begin);
  -	    if (rc != 0) {	/* no match, copy character */
  -		if (!append_to_tokenbuf(&tmp, p, 1)) {
  -		    free_tokenbuf(&tmp);
  -		    return VAR_OUT_OF_MEMORY;
  -		}
  -		++p;
  -	    } else {
  -		append_to_tokenbuf(&tmp, replace->begin,
  -				   replace->end - replace->begin);
  -		p += search->end - search->begin;
  -		if (!global) {
  -		    if (!append_to_tokenbuf(&tmp, p, data->end - p)) {
  -			free_tokenbuf(&tmp);
  -			return VAR_OUT_OF_MEMORY;
  -		    }
  -		    break;
  -		}
  -	    }
  -	}
  +        for (p = data->begin; p != data->end;) {
  +            if (case_insensitive)
  +                rc = strncasecmp(p, search->begin,
  +                                 search->end - search->begin);
  +            else
  +                rc = strncmp(p, search->begin,
  +                             search->end - search->begin);
  +            if (rc != 0) {      /* no match, copy character */
  +                if (!append_to_tokenbuf(&tmp, p, 1)) {
  +                    free_tokenbuf(&tmp);
  +                    return VAR_OUT_OF_MEMORY;
  +                }
  +                ++p;
  +            } else {
  +                append_to_tokenbuf(&tmp, replace->begin,
  +                                   replace->end - replace->begin);
  +                p += search->end - search->begin;
  +                if (!global) {
  +                    if (!append_to_tokenbuf(&tmp, p, data->end - p)) {
  +                        free_tokenbuf(&tmp);
  +                        return VAR_OUT_OF_MEMORY;
  +                    }
  +                    break;
  +                }
  +            }
  +        }
   
  -	free_tokenbuf(data);
  -	move_tokenbuf(&tmp, data);
  +        free_tokenbuf(data);
  +        move_tokenbuf(&tmp, data);
       } else {
  -	tokenbuf tmp;
  -	tokenbuf mydata;
  -	tokenbuf myreplace;
  -	regex_t preg;
  -	regmatch_t pmatch[10];
  -	int regexec_flag;
  -
  -	/* Copy the pattern and the data to our own buffer to make
  -	   sure they're terminated with a null byte. */
  -
  -	if (!assign_to_tokenbuf
  -	    (&tmp, search->begin, search->end - search->begin))
  -	    return VAR_OUT_OF_MEMORY;
  -	if (!assign_to_tokenbuf
  -	    (&mydata, data->begin, data->end - data->begin)) {
  -	    free_tokenbuf(&tmp);
  -	    return VAR_OUT_OF_MEMORY;
  -	}
  -
  -	/* Compile the pattern. */
  -
  -	rc = regcomp(&preg, tmp.begin,
  -		     REG_EXTENDED | ((case_insensitive) ? REG_ICASE : 0));
  -	free_tokenbuf(&tmp);
  -	if (rc != 0) {
  -	    free_tokenbuf(&mydata);
  -	    return VAR_INVALID_REGEX_IN_REPLACE;
  -	}
  -
  -	/* Match the pattern and create the result string in the tmp
  -	   buffer. */
  -
  -	for (p = mydata.begin; p != mydata.end;) {
  -	    if (p == mydata.begin || p[-1] == '\n')
  -		regexec_flag = 0;
  -	    else
  -		regexec_flag = REG_NOTBOL;
  -	    if (regexec
  -		(&preg, p, sizeof(pmatch) / sizeof(regmatch_t), pmatch,
  -		 regexec_flag) == REG_NOMATCH) {
  -		append_to_tokenbuf(&tmp, p, mydata.end - p);
  -		break;
  -	    } else {
  -		rc = expand_regex_replace(p, replace, pmatch, &myreplace);
  -		if (rc != VAR_OK) {
  -		    regfree(&preg);
  -		    free_tokenbuf(&tmp);
  -		    free_tokenbuf(&mydata);
  -		    return rc;
  -		}
  -		if (!append_to_tokenbuf(&tmp, p, pmatch[0].rm_so) ||
  -		    !append_to_tokenbuf(&tmp, myreplace.begin,
  -					myreplace.end - myreplace.begin)) {
  -		    regfree(&preg);
  -		    free_tokenbuf(&tmp);
  -		    free_tokenbuf(&mydata);
  -		    free_tokenbuf(&myreplace);
  -		    return VAR_OUT_OF_MEMORY;
  -		} else {
  -		    p += (pmatch[0].rm_eo > 0) ? pmatch[0].rm_eo : 1;
  -		    free_tokenbuf(&myreplace);
  -		}
  -		if (!global) {
  -		    append_to_tokenbuf(&tmp, p, mydata.end - p);
  -		    break;
  -		}
  -	    }
  -	}
  -
  -	regfree(&preg);
  -	free_tokenbuf(data);
  -	move_tokenbuf(&tmp, data);
  -	free_tokenbuf(&mydata);
  +        tokenbuf tmp;
  +        tokenbuf mydata;
  +        tokenbuf myreplace;
  +        regex_t preg;
  +        regmatch_t pmatch[10];
  +        int regexec_flag;
  +
  +        /* Copy the pattern and the data to our own buffer to make
  +           sure they're terminated with a null byte. */
  +
  +        if (!assign_to_tokenbuf
  +            (&tmp, search->begin, search->end - search->begin))
  +            return VAR_OUT_OF_MEMORY;
  +        if (!assign_to_tokenbuf
  +            (&mydata, data->begin, data->end - data->begin)) {
  +            free_tokenbuf(&tmp);
  +            return VAR_OUT_OF_MEMORY;
  +        }
  +
  +        /* Compile the pattern. */
  +
  +        rc = regcomp(&preg, tmp.begin,
  +                     REG_EXTENDED | ((case_insensitive) ? REG_ICASE : 0));
  +        free_tokenbuf(&tmp);
  +        if (rc != 0) {
  +            free_tokenbuf(&mydata);
  +            return VAR_INVALID_REGEX_IN_REPLACE;
  +        }
  +
  +        /* Match the pattern and create the result string in the tmp
  +           buffer. */
  +
  +        for (p = mydata.begin; p != mydata.end;) {
  +            if (p == mydata.begin || p[-1] == '\n')
  +                regexec_flag = 0;
  +            else
  +                regexec_flag = REG_NOTBOL;
  +            if (regexec
  +                (&preg, p, sizeof(pmatch) / sizeof(regmatch_t), pmatch,
  +                 regexec_flag) == REG_NOMATCH) {
  +                append_to_tokenbuf(&tmp, p, mydata.end - p);
  +                break;
  +            } else {
  +                rc = expand_regex_replace(p, replace, pmatch, &myreplace);
  +                if (rc != VAR_OK) {
  +                    regfree(&preg);
  +                    free_tokenbuf(&tmp);
  +                    free_tokenbuf(&mydata);
  +                    return rc;
  +                }
  +                if (!append_to_tokenbuf(&tmp, p, pmatch[0].rm_so) ||
  +                    !append_to_tokenbuf(&tmp, myreplace.begin,
  +                                        myreplace.end - myreplace.begin)) {
  +                    regfree(&preg);
  +                    free_tokenbuf(&tmp);
  +                    free_tokenbuf(&mydata);
  +                    free_tokenbuf(&myreplace);
  +                    return VAR_OUT_OF_MEMORY;
  +                } else {
  +                    p += (pmatch[0].rm_eo > 0) ? pmatch[0].rm_eo : 1;
  +                    free_tokenbuf(&myreplace);
  +                }
  +                if (!global) {
  +                    append_to_tokenbuf(&tmp, p, mydata.end - p);
  +                    break;
  +                }
  +            }
  +        }
  +
  +        regfree(&preg);
  +        free_tokenbuf(data);
  +        move_tokenbuf(&tmp, data);
  +        free_tokenbuf(&mydata);
       }
   
       return VAR_OK;
   }
   
   static int padding(tokenbuf * data, tokenbuf * widthstr, tokenbuf * fill,
  -		   char position)
  +                   char position)
   {
       tokenbuf result;
       size_t width = tokenbuf2int(widthstr);
       int i;
   
       if (fill->begin == fill->end)
  -	return VAR_EMPTY_PADDING_FILL_STRING;
  +        return VAR_EMPTY_PADDING_FILL_STRING;
   
       init_tokenbuf(&result);
   
       if (position == 'l') {
  -	i = width - (data->end - data->begin);
  -	if (i > 0) {
  -	    i = i / (fill->end - fill->begin);
  -	    while (i > 0) {
  -		if (!append_to_tokenbuf
  -		    (data, fill->begin, fill->end - fill->begin))
  -		    return VAR_OUT_OF_MEMORY;
  -		--i;
  -	    }
  -	    i = (width - (data->end - data->begin)) % (fill->end -
  -						       fill->begin);
  -	    if (!append_to_tokenbuf(data, fill->begin, i))
  -		return VAR_OUT_OF_MEMORY;
  -	}
  +        i = width - (data->end - data->begin);
  +        if (i > 0) {
  +            i = i / (fill->end - fill->begin);
  +            while (i > 0) {
  +                if (!append_to_tokenbuf
  +                    (data, fill->begin, fill->end - fill->begin))
  +                    return VAR_OUT_OF_MEMORY;
  +                --i;
  +            }
  +            i = (width - (data->end - data->begin)) % (fill->end -
  +                                                       fill->begin);
  +            if (!append_to_tokenbuf(data, fill->begin, i))
  +                return VAR_OUT_OF_MEMORY;
  +        }
       } else if (position == 'r') {
  -	i = width - (data->end - data->begin);
  -	if (i > 0) {
  -	    i = i / (fill->end - fill->begin);
  -	    while (i > 0) {
  -		if (!append_to_tokenbuf
  -		    (&result, fill->begin, fill->end - fill->begin)) {
  -		    free_tokenbuf(&result);
  -		    return VAR_OUT_OF_MEMORY;
  -		}
  -		--i;
  -	    }
  -	    i = (width - (data->end - data->begin)) % (fill->end -
  -						       fill->begin);
  -	    if (!append_to_tokenbuf(&result, fill->begin, i)) {
  -		free_tokenbuf(&result);
  -		return VAR_OUT_OF_MEMORY;
  -	    }
  -	    if (!append_to_tokenbuf
  -		(&result, data->begin, data->end - data->begin)) {
  -		free_tokenbuf(&result);
  -		return VAR_OUT_OF_MEMORY;
  -	    }
  -
  -	    free_tokenbuf(data);
  -	    move_tokenbuf(&result, data);
  -	}
  +        i = width - (data->end - data->begin);
  +        if (i > 0) {
  +            i = i / (fill->end - fill->begin);
  +            while (i > 0) {
  +                if (!append_to_tokenbuf
  +                    (&result, fill->begin, fill->end - fill->begin)) {
  +                    free_tokenbuf(&result);
  +                    return VAR_OUT_OF_MEMORY;
  +                }
  +                --i;
  +            }
  +            i = (width - (data->end - data->begin)) % (fill->end -
  +                                                       fill->begin);
  +            if (!append_to_tokenbuf(&result, fill->begin, i)) {
  +                free_tokenbuf(&result);
  +                return VAR_OUT_OF_MEMORY;
  +            }
  +            if (!append_to_tokenbuf
  +                (&result, data->begin, data->end - data->begin)) {
  +                free_tokenbuf(&result);
  +                return VAR_OUT_OF_MEMORY;
  +            }
  +
  +            free_tokenbuf(data);
  +            move_tokenbuf(&result, data);
  +        }
       } else if (position == 'c') {
  -	i = (width - (data->end - data->begin)) / 2;
  -	if (i > 0) {
  -	    /* Create the prefix. */
  -
  -	    i = i / (fill->end - fill->begin);
  -	    while (i > 0) {
  -		if (!append_to_tokenbuf
  -		    (&result, fill->begin, fill->end - fill->begin)) {
  -		    free_tokenbuf(&result);
  -		    return VAR_OUT_OF_MEMORY;
  -		}
  -		--i;
  -	    }
  -	    i = ((width - (data->end - data->begin)) / 2) % (fill->end -
  -							     fill->begin);
  -	    if (!append_to_tokenbuf(&result, fill->begin, i)) {
  -		free_tokenbuf(&result);
  -		return VAR_OUT_OF_MEMORY;
  -	    }
  -
  -	    /* Append the actual data string. */
  -
  -	    if (!append_to_tokenbuf
  -		(&result, data->begin, data->end - data->begin)) {
  -		free_tokenbuf(&result);
  -		return VAR_OUT_OF_MEMORY;
  -	    }
  -
  -	    /* Append the suffix. */
  -
  -	    i = width - (result.end - result.begin);
  -	    i = i / (fill->end - fill->begin);
  -	    while (i > 0) {
  -		if (!append_to_tokenbuf
  -		    (&result, fill->begin, fill->end - fill->begin)) {
  -		    free_tokenbuf(&result);
  -		    return VAR_OUT_OF_MEMORY;
  -		}
  -		--i;
  -	    }
  -	    i = width - (result.end - result.begin);
  -	    if (!append_to_tokenbuf(&result, fill->begin, i)) {
  -		free_tokenbuf(&result);
  -		return VAR_OUT_OF_MEMORY;
  -	    }
  -
  -	    /* Move string from temporary buffer to data buffer. */
  -
  -	    free_tokenbuf(data);
  -	    move_tokenbuf(&result, data);
  -	}
  +        i = (width - (data->end - data->begin)) / 2;
  +        if (i > 0) {
  +            /* Create the prefix. */
  +
  +            i = i / (fill->end - fill->begin);
  +            while (i > 0) {
  +                if (!append_to_tokenbuf
  +                    (&result, fill->begin, fill->end - fill->begin)) {
  +                    free_tokenbuf(&result);
  +                    return VAR_OUT_OF_MEMORY;
  +                }
  +                --i;
  +            }
  +            i = ((width - (data->end - data->begin)) / 2) % (fill->end -
  +                                                             fill->begin);
  +            if (!append_to_tokenbuf(&result, fill->begin, i)) {
  +                free_tokenbuf(&result);
  +                return VAR_OUT_OF_MEMORY;
  +            }
  +
  +            /* Append the actual data string. */
  +
  +            if (!append_to_tokenbuf
  +                (&result, data->begin, data->end - data->begin)) {
  +                free_tokenbuf(&result);
  +                return VAR_OUT_OF_MEMORY;
  +            }
  +
  +            /* Append the suffix. */
  +
  +            i = width - (result.end - result.begin);
  +            i = i / (fill->end - fill->begin);
  +            while (i > 0) {
  +                if (!append_to_tokenbuf
  +                    (&result, fill->begin, fill->end - fill->begin)) {
  +                    free_tokenbuf(&result);
  +                    return VAR_OUT_OF_MEMORY;
  +                }
  +                --i;
  +            }
  +            i = width - (result.end - result.begin);
  +            if (!append_to_tokenbuf(&result, fill->begin, i)) {
  +                free_tokenbuf(&result);
  +                return VAR_OUT_OF_MEMORY;
  +            }
  +
  +            /* Move string from temporary buffer to data buffer. */
  +
  +            free_tokenbuf(data);
  +            move_tokenbuf(&result, data);
  +        }
       }
   
       return VAR_OK;
   }
   
   static int command(const char *begin, const char *end,
  -		   const var_config_t * config, const char nameclass[256],
  -		   var_cb_t lookup, void *lookup_context, int force_expand,
  -		   tokenbuf * data)
  +                   const var_config_t * config, const char nameclass[256],
  +                   var_cb_t lookup, void *lookup_context, int force_expand,
  +                   tokenbuf * data)
   {
       const char *p = begin;
       tokenbuf tmptokbuf;
  @@ -1194,298 +1194,298 @@
       init_tokenbuf(&number2);
   
       if (begin == end)
  -	return 0;
  +        return 0;
   
       switch (tolower(*p)) {
  -    case 'l':			/* Turn data to lowercase. */
  -	if (data->begin) {
  -	    char *ptr;
  -	    /* If the buffer does not life in an allocated buffer,
  -	       we have to copy it before modifying the contents. */
  -
  -	    if (data->buffer_size == 0) {
  -		if (!assign_to_tokenbuf
  -		    (data, data->begin, data->end - data->begin)) {
  -		    rc = VAR_OUT_OF_MEMORY;
  -		    goto error_return;
  -		}
  -	    }
  -	    for (ptr = (char *) data->begin; ptr != data->end; ++ptr)
  -		*ptr = tolower(*ptr);
  -	}
  -	++p;
  -	break;
  -
  -    case 'u':			/* Turn data to uppercase. */
  -	if (data->begin) {
  -	    char *ptr;
  -	    if (data->buffer_size == 0) {
  -		if (!assign_to_tokenbuf
  -		    (data, data->begin, data->end - data->begin)) {
  -		    rc = VAR_OUT_OF_MEMORY;
  -		    goto error_return;
  -		}
  -	    }
  -	    for (ptr = (char *) data->begin; ptr != data->end; ++ptr)
  -		*ptr = toupper(*ptr);
  -	}
  -	++p;
  -	break;
  -
  -    case 'o':			/* Cut out substrings. */
  -	++p;
  -	rc = number(p, end);
  -	if (rc == 0) {
  -	    rc = VAR_MISSING_START_OFFSET;
  -	    goto error_return;
  -	} else {
  -	    number1.begin = p;
  -	    number1.end = p + rc;
  -	    number1.buffer_size = 0;
  -	    p += rc;
  -	}
  -
  -	if (*p == ',') {
  -	    isrange = 0;
  -	    ++p;
  -	} else if (*p == '-') {
  -	    isrange = 1;
  -	    ++p;
  -	} else {
  -	    rc = VAR_INVALID_OFFSET_DELIMITER;
  -	    goto error_return;
  -	}
  -
  -	rc = number(p, end);
  -	number2.begin = p;
  -	number2.end = p + rc;
  -	number2.buffer_size = 0;
  -	p += rc;
  -	if (data->begin) {
  -	    rc = cut_out_offset(data, &number1, &number2, isrange);
  -	    if (rc < 0)
  -		goto error_return;
  -	}
  -	break;
  -
  -    case '#':			/* Substitute length of the string. */
  -	if (data->begin) {
  -	    char buf[1024];
  -	    sprintf(buf, "%d", data->end - data->begin);
  -	    free_tokenbuf(data);
  -	    if (!assign_to_tokenbuf(data, buf, strlen(buf))) {
  -		rc = VAR_OUT_OF_MEMORY;
  -		goto error_return;
  -	    }
  -	}
  -	++p;
  -	break;
  -
  -    case '-':			/* Substitute parameter if data is empty. */
  -	++p;
  -	rc = exptext_or_variable(p, end, config, nameclass, lookup,
  -				 lookup_context, force_expand, &tmptokbuf);
  -	if (rc < 0)
  -	    goto error_return;
  -	else if (rc == 0) {
  -	    rc = VAR_MISSING_PARAMETER_IN_COMMAND;
  -	    goto error_return;
  -	} else
  -	    p += rc;
  -	if (data->begin != NULL && data->begin == data->end) {
  -	    free_tokenbuf(data);
  -	    move_tokenbuf(&tmptokbuf, data);
  -	}
  -	break;
  -
  -    case '*':			/* Return "" if data is not empty, parameter otherwise. */
  -	++p;
  -	rc = exptext_or_variable(p, end, config, nameclass, lookup,
  -				 lookup_context, force_expand, &tmptokbuf);
  -	if (rc < 0)
  -	    goto error_return;
  -	else if (rc == 0) {
  -	    rc = VAR_MISSING_PARAMETER_IN_COMMAND;
  -	    goto error_return;
  -	} else
  -	    p += rc;
  -	if (data->begin != NULL) {
  -	    if (data->begin == data->end) {
  -		free_tokenbuf(data);
  -		move_tokenbuf(&tmptokbuf, data);
  -	    } else {
  -		free_tokenbuf(data);
  -		data->begin = data->end = "";
  -		data->buffer_size = 0;
  -	    }
  -	}
  -	break;
  -
  -    case '+':			/* Substitute parameter if data is not empty. */
  -	++p;
  -	rc = exptext_or_variable(p, end, config, nameclass, lookup,
  -				 lookup_context, force_expand, &tmptokbuf);
  -	if (rc < 0)
  -	    goto error_return;
  -	else if (rc == 0) {
  -	    rc = VAR_MISSING_PARAMETER_IN_COMMAND;
  -	    goto error_return;
  -	} else
  -	    p += rc;
  -	if (data->begin != NULL) {
  -	    if (data->begin != data->end) {
  -		free_tokenbuf(data);
  -		move_tokenbuf(&tmptokbuf, data);
  -	    }
  -	}
  -	break;
  -
  -    case 's':			/* Search and replace. */
  -	++p;
  -
  -	if (*p != '/')
  -	    return VAR_MALFORMATTED_REPLACE;
  -	else
  -	    ++p;
  -
  -	rc = substext_or_variable(p, end, config, nameclass, lookup,
  -				  lookup_context, force_expand, &search);
  -	if (rc < 0)
  -	    goto error_return;
  -	else
  -	    p += rc;
  -
  -	if (*p != '/') {
  -	    rc = VAR_MALFORMATTED_REPLACE;
  -	    goto error_return;
  -	} else
  -	    ++p;
  -
  -	rc = substext_or_variable(p, end, config, nameclass, lookup,
  -				  lookup_context, force_expand, &replace);
  -	if (rc < 0)
  -	    goto error_return;
  -	else
  -	    p += rc;
  -
  -	if (*p != '/') {
  -	    rc = VAR_MALFORMATTED_REPLACE;
  -	    goto error_return;
  -	} else
  -	    ++p;
  -
  -	rc = exptext(p, end, config);
  -	if (rc < 0)
  -	    goto error_return;
  -	else {
  -	    flags.begin = p;
  -	    flags.end = p + rc;
  -	    flags.buffer_size = 0;
  -	    p += rc;
  -	}
  -
  -	if (data->begin) {
  -	    rc = search_and_replace(data, &search, &replace, &flags);
  -	    if (rc < 0)
  -		goto error_return;
  -	}
  -	break;
  -
  -    case 'y':			/* Transpose characters from class A to class B. */
  -	++p;
  -
  -	if (*p != '/')
  -	    return VAR_MALFORMATTED_TRANSPOSE;
  -	else
  -	    ++p;
  -
  -	rc = substext_or_variable(p, end, config, nameclass, lookup,
  -				  lookup_context, force_expand, &search);
  -	if (rc < 0)
  -	    goto error_return;
  -	else
  -	    p += rc;
  -
  -	if (*p != '/') {
  -	    rc = VAR_MALFORMATTED_TRANSPOSE;
  -	    goto error_return;
  -	} else
  -	    ++p;
  -
  -	rc = substext_or_variable(p, end, config, nameclass, lookup,
  -				  lookup_context, force_expand, &replace);
  -	if (rc < 0)
  -	    goto error_return;
  -	else
  -	    p += rc;
  -
  -	if (*p != '/') {
  -	    rc = VAR_MALFORMATTED_TRANSPOSE;
  -	    goto error_return;
  -	} else
  -	    ++p;
  -
  -	if (data->begin) {
  -	    rc = transpose(data, &search, &replace);
  -	    if (rc < 0)
  -		goto error_return;
  -	}
  -	break;
  -
  -
  -    case 'p':			/* Padding. */
  -	++p;
  -
  -	if (*p != '/')
  -	    return VAR_MALFORMATTED_PADDING;
  -	else
  -	    ++p;
  -
  -	rc = number(p, end);
  -	if (rc == 0) {
  -	    rc = VAR_MISSING_PADDING_WIDTH;
  -	    goto error_return;
  -	} else {
  -	    number1.begin = p;
  -	    number1.end = p + rc;
  -	    number1.buffer_size = 0;
  -	    p += rc;
  -	}
  -
  -	if (*p != '/') {
  -	    rc = VAR_MALFORMATTED_PADDING;
  -	    goto error_return;
  -	} else
  -	    ++p;
  -
  -	rc = substext_or_variable(p, end, config, nameclass, lookup,
  -				  lookup_context, force_expand, &replace);
  -	if (rc < 0)
  -	    goto error_return;
  -	else
  -	    p += rc;
  -
  -	if (*p != '/') {
  -	    rc = VAR_MALFORMATTED_PADDING;
  -	    goto error_return;
  -	} else
  -	    ++p;
  -
  -	if (*p != 'l' && *p != 'c' && *p != 'r') {
  -	    rc = VAR_MALFORMATTED_PADDING;
  -	    goto error_return;
  -	} else
  -	    ++p;
  -
  -	if (data->begin) {
  -	    rc = padding(data, &number1, &replace, p[-1]);
  -	    if (rc < 0)
  -		goto error_return;
  -	}
  -	break;
  +    case 'l':                   /* Turn data to lowercase. */
  +        if (data->begin) {
  +            char *ptr;
  +            /* If the buffer does not life in an allocated buffer,
  +               we have to copy it before modifying the contents. */
  +
  +            if (data->buffer_size == 0) {
  +                if (!assign_to_tokenbuf
  +                    (data, data->begin, data->end - data->begin)) {
  +                    rc = VAR_OUT_OF_MEMORY;
  +                    goto error_return;
  +                }
  +            }
  +            for (ptr = (char *) data->begin; ptr != data->end; ++ptr)
  +                *ptr = tolower(*ptr);
  +        }
  +        ++p;
  +        break;
  +
  +    case 'u':                   /* Turn data to uppercase. */
  +        if (data->begin) {
  +            char *ptr;
  +            if (data->buffer_size == 0) {
  +                if (!assign_to_tokenbuf
  +                    (data, data->begin, data->end - data->begin)) {
  +                    rc = VAR_OUT_OF_MEMORY;
  +                    goto error_return;
  +                }
  +            }
  +            for (ptr = (char *) data->begin; ptr != data->end; ++ptr)
  +                *ptr = toupper(*ptr);
  +        }
  +        ++p;
  +        break;
  +
  +    case 'o':                   /* Cut out substrings. */
  +        ++p;
  +        rc = number(p, end);
  +        if (rc == 0) {
  +            rc = VAR_MISSING_START_OFFSET;
  +            goto error_return;
  +        } else {
  +            number1.begin = p;
  +            number1.end = p + rc;
  +            number1.buffer_size = 0;
  +            p += rc;
  +        }
  +
  +        if (*p == ',') {
  +            isrange = 0;
  +            ++p;
  +        } else if (*p == '-') {
  +            isrange = 1;
  +            ++p;
  +        } else {
  +            rc = VAR_INVALID_OFFSET_DELIMITER;
  +            goto error_return;
  +        }
  +
  +        rc = number(p, end);
  +        number2.begin = p;
  +        number2.end = p + rc;
  +        number2.buffer_size = 0;
  +        p += rc;
  +        if (data->begin) {
  +            rc = cut_out_offset(data, &number1, &number2, isrange);
  +            if (rc < 0)
  +                goto error_return;
  +        }
  +        break;
  +
  +    case '#':                   /* Substitute length of the string. */
  +        if (data->begin) {
  +            char buf[1024];
  +            sprintf(buf, "%d", data->end - data->begin);
  +            free_tokenbuf(data);
  +            if (!assign_to_tokenbuf(data, buf, strlen(buf))) {
  +                rc = VAR_OUT_OF_MEMORY;
  +                goto error_return;
  +            }
  +        }
  +        ++p;
  +        break;
  +
  +    case '-':                   /* Substitute parameter if data is empty. */
  +        ++p;
  +        rc = exptext_or_variable(p, end, config, nameclass, lookup,
  +                                 lookup_context, force_expand, &tmptokbuf);
  +        if (rc < 0)
  +            goto error_return;
  +        else if (rc == 0) {
  +            rc = VAR_MISSING_PARAMETER_IN_COMMAND;
  +            goto error_return;
  +        } else
  +            p += rc;
  +        if (data->begin != NULL && data->begin == data->end) {
  +            free_tokenbuf(data);
  +            move_tokenbuf(&tmptokbuf, data);
  +        }
  +        break;
  +
  +    case '*':                   /* Return "" if data is not empty, parameter otherwise. */
  +        ++p;
  +        rc = exptext_or_variable(p, end, config, nameclass, lookup,
  +                                 lookup_context, force_expand, &tmptokbuf);
  +        if (rc < 0)
  +            goto error_return;
  +        else if (rc == 0) {
  +            rc = VAR_MISSING_PARAMETER_IN_COMMAND;
  +            goto error_return;
  +        } else
  +            p += rc;
  +        if (data->begin != NULL) {
  +            if (data->begin == data->end) {
  +                free_tokenbuf(data);
  +                move_tokenbuf(&tmptokbuf, data);
  +            } else {
  +                free_tokenbuf(data);
  +                data->begin = data->end = "";
  +                data->buffer_size = 0;
  +            }
  +        }
  +        break;
  +
  +    case '+':                   /* Substitute parameter if data is not empty. */
  +        ++p;
  +        rc = exptext_or_variable(p, end, config, nameclass, lookup,
  +                                 lookup_context, force_expand, &tmptokbuf);
  +        if (rc < 0)
  +            goto error_return;
  +        else if (rc == 0) {
  +            rc = VAR_MISSING_PARAMETER_IN_COMMAND;
  +            goto error_return;
  +        } else
  +            p += rc;
  +        if (data->begin != NULL) {
  +            if (data->begin != data->end) {
  +                free_tokenbuf(data);
  +                move_tokenbuf(&tmptokbuf, data);
  +            }
  +        }
  +        break;
  +
  +    case 's':                   /* Search and replace. */
  +        ++p;
  +
  +        if (*p != '/')
  +            return VAR_MALFORMATTED_REPLACE;
  +        else
  +            ++p;
  +
  +        rc = substext_or_variable(p, end, config, nameclass, lookup,
  +                                  lookup_context, force_expand, &search);
  +        if (rc < 0)
  +            goto error_return;
  +        else
  +            p += rc;
  +
  +        if (*p != '/') {
  +            rc = VAR_MALFORMATTED_REPLACE;
  +            goto error_return;
  +        } else
  +            ++p;
  +
  +        rc = substext_or_variable(p, end, config, nameclass, lookup,
  +                                  lookup_context, force_expand, &replace);
  +        if (rc < 0)
  +            goto error_return;
  +        else
  +            p += rc;
  +
  +        if (*p != '/') {
  +            rc = VAR_MALFORMATTED_REPLACE;
  +            goto error_return;
  +        } else
  +            ++p;
  +
  +        rc = exptext(p, end, config);
  +        if (rc < 0)
  +            goto error_return;
  +        else {
  +            flags.begin = p;
  +            flags.end = p + rc;
  +            flags.buffer_size = 0;
  +            p += rc;
  +        }
  +
  +        if (data->begin) {
  +            rc = search_and_replace(data, &search, &replace, &flags);
  +            if (rc < 0)
  +                goto error_return;
  +        }
  +        break;
  +
  +    case 'y':                   /* Transpose characters from class A to class B. */
  +        ++p;
  +
  +        if (*p != '/')
  +            return VAR_MALFORMATTED_TRANSPOSE;
  +        else
  +            ++p;
  +
  +        rc = substext_or_variable(p, end, config, nameclass, lookup,
  +                                  lookup_context, force_expand, &search);
  +        if (rc < 0)
  +            goto error_return;
  +        else
  +            p += rc;
  +
  +        if (*p != '/') {
  +            rc = VAR_MALFORMATTED_TRANSPOSE;
  +            goto error_return;
  +        } else
  +            ++p;
  +
  +        rc = substext_or_variable(p, end, config, nameclass, lookup,
  +                                  lookup_context, force_expand, &replace);
  +        if (rc < 0)
  +            goto error_return;
  +        else
  +            p += rc;
  +
  +        if (*p != '/') {
  +            rc = VAR_MALFORMATTED_TRANSPOSE;
  +            goto error_return;
  +        } else
  +            ++p;
  +
  +        if (data->begin) {
  +            rc = transpose(data, &search, &replace);
  +            if (rc < 0)
  +                goto error_return;
  +        }
  +        break;
  +
  +
  +    case 'p':                   /* Padding. */
  +        ++p;
  +
  +        if (*p != '/')
  +            return VAR_MALFORMATTED_PADDING;
  +        else
  +            ++p;
  +
  +        rc = number(p, end);
  +        if (rc == 0) {
  +            rc = VAR_MISSING_PADDING_WIDTH;
  +            goto error_return;
  +        } else {
  +            number1.begin = p;
  +            number1.end = p + rc;
  +            number1.buffer_size = 0;
  +            p += rc;
  +        }
  +
  +        if (*p != '/') {
  +            rc = VAR_MALFORMATTED_PADDING;
  +            goto error_return;
  +        } else
  +            ++p;
  +
  +        rc = substext_or_variable(p, end, config, nameclass, lookup,
  +                                  lookup_context, force_expand, &replace);
  +        if (rc < 0)
  +            goto error_return;
  +        else
  +            p += rc;
  +
  +        if (*p != '/') {
  +            rc = VAR_MALFORMATTED_PADDING;
  +            goto error_return;
  +        } else
  +            ++p;
  +
  +        if (*p != 'l' && *p != 'c' && *p != 'r') {
  +            rc = VAR_MALFORMATTED_PADDING;
  +            goto error_return;
  +        } else
  +            ++p;
  +
  +        if (data->begin) {
  +            rc = padding(data, &number1, &replace, p[-1]);
  +            if (rc < 0)
  +                goto error_return;
  +        }
  +        break;
   
       default:
  -	return VAR_UNKNOWN_COMMAND_CHAR;
  +        return VAR_UNKNOWN_COMMAND_CHAR;
       }
   
       /* Exit gracefully. */
  @@ -1510,10 +1510,10 @@
   }
   
   static var_rc_t input(const char *begin, const char *end,
  -		      const var_config_t * config,
  -		      const char nameclass[256], var_cb_t lookup,
  -		      void *lookup_context, int force_expand,
  -		      tokenbuf * output)
  +                      const var_config_t * config,
  +                      const char nameclass[256], var_cb_t lookup,
  +                      void *lookup_context, int force_expand,
  +                      tokenbuf * output)
   {
       int rc;
       tokenbuf result;
  @@ -1521,33 +1521,33 @@
       init_tokenbuf(&result);
   
       do {
  -	rc = text(begin, end, config->varinit, config->escape);
  -	if (rc > 0) {
  -	    if (!append_to_tokenbuf(output, begin, rc)) {
  -		rc = VAR_OUT_OF_MEMORY;
  -		goto error_return;
  -	    }
  -	    begin += rc;
  -	} else if (rc < 0)
  -	    goto error_return;
  -
  -	rc = variable(begin, end, config, nameclass, lookup,
  -		      lookup_context, force_expand, &result);
  -	if (rc > 0) {
  -	    if (!append_to_tokenbuf
  -		(output, result.begin, result.end - result.begin)) {
  -		rc = VAR_OUT_OF_MEMORY;
  -		goto error_return;
  -	    } else
  -		begin += rc;
  -	} else if (rc < 0)
  -	    goto error_return;
  +        rc = text(begin, end, config->varinit, config->escape);
  +        if (rc > 0) {
  +            if (!append_to_tokenbuf(output, begin, rc)) {
  +                rc = VAR_OUT_OF_MEMORY;
  +                goto error_return;
  +            }
  +            begin += rc;
  +        } else if (rc < 0)
  +            goto error_return;
  +
  +        rc = variable(begin, end, config, nameclass, lookup,
  +                      lookup_context, force_expand, &result);
  +        if (rc > 0) {
  +            if (!append_to_tokenbuf
  +                (output, result.begin, result.end - result.begin)) {
  +                rc = VAR_OUT_OF_MEMORY;
  +                goto error_return;
  +            } else
  +                begin += rc;
  +        } else if (rc < 0)
  +            goto error_return;
       }
       while (rc > 0);
   
       if (begin != end) {
  -	rc = VAR_INPUT_ISNT_TEXT_NOR_VARIABLE;
  -	goto error_return;
  +        rc = VAR_INPUT_ISNT_TEXT_NOR_VARIABLE;
  +        goto error_return;
       }
   
       return VAR_OK;
  @@ -1558,9 +1558,9 @@
   }
   
   var_rc_t var_expand(const char *input_buf, size_t input_len,
  -		    char **result, size_t * result_len,
  -		    var_cb_t lookup, void *lookup_context,
  -		    const var_config_t * config, int force_expand)
  +                    char **result, size_t * result_len,
  +                    var_cb_t lookup, void *lookup_context,
  +                    const var_config_t * config, int force_expand)
   {
       char nameclass[256];
       var_rc_t rc;
  @@ -1569,29 +1569,29 @@
       /* Expand the class description for valid variable names. */
   
       if (config == NULL)
  -	config = &var_config_default;
  +        config = &var_config_default;
       rc = expand_character_class(config->namechars, nameclass);
       if (rc != VAR_OK)
  -	return rc;
  +        return rc;
   
       /* Make sure that the specials defined in the configuration do not
          appear in the character name class. */
   
       if (nameclass[(int) config->varinit] ||
  -	nameclass[(int) config->startdelim] ||
  -	nameclass[(int) config->enddelim] ||
  -	nameclass[(int) config->escape])
  -	return VAR_INVALID_CONFIGURATION;
  +        nameclass[(int) config->startdelim] ||
  +        nameclass[(int) config->enddelim] ||
  +        nameclass[(int) config->escape])
  +        return VAR_INVALID_CONFIGURATION;
   
       /* Call the parser. */
   
       output.begin = output.end = NULL;
       output.buffer_size = 0;
       rc = input(input_buf, input_buf + input_len, config, nameclass,
  -	       lookup, lookup_context, force_expand, &output);
  +               lookup, lookup_context, force_expand, &output);
       if (rc != VAR_OK) {
  -	free_tokenbuf(&output);
  -	return rc;
  +        free_tokenbuf(&output);
  +        return rc;
       }
       *result = (char *) output.begin;
       *result_len = output.end - output.begin;

From ossp-cvs-owner@ossp.org  Tue Nov 13 20:28:57 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fADJSuB63722; Tue, 13 Nov 2001 20:28:56 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id D73514CE617; Tue, 13 Nov 2001 20:28:56 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Message-Id: <20011113192856.D73514CE617@visp.engelschall.com>
Date: Tue, 13 Nov 2001 20:28:56 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   13-Nov-2001 20:28:56
  Branch: HEAD                             Handle: 2001111319285600

  Modified files:
    ossp-pkg/var            var.c

  Log:
    use consistent style for pointers

  Summary:
    Revision    Changes     Path
    1.11        +35 -35     ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 var.c
  --- ossp-pkg/var/var.c	2001/11/13 19:25:41	1.10
  +++ ossp-pkg/var/var.c	2001/11/13 19:28:56	1.11
  @@ -55,13 +55,13 @@
       size_t buffer_size;
   } tokenbuf;
   
  -static void init_tokenbuf(tokenbuf * buf)
  +static void init_tokenbuf(tokenbuf *buf)
   {
       buf->begin = buf->end = NULL;
       buf->buffer_size = 0;
   }
   
  -static void move_tokenbuf(tokenbuf * src, tokenbuf * dst)
  +static void move_tokenbuf(tokenbuf *src, tokenbuf *dst)
   {
       dst->begin = src->begin;
       dst->end = src->end;
  @@ -69,7 +69,7 @@
       init_tokenbuf(src);
   }
   
  -static int assign_to_tokenbuf(tokenbuf * buf, const char *data, size_t len)
  +static int assign_to_tokenbuf(tokenbuf *buf, const char *data, size_t len)
   {
       char *p = malloc(len + 1);
       if (p) {
  @@ -83,7 +83,7 @@
           return 0;
   }
   
  -static int append_to_tokenbuf(tokenbuf * output, const char *data,
  +static int append_to_tokenbuf(tokenbuf *output, const char *data,
                                 size_t len)
   {
       char *new_buffer;
  @@ -146,13 +146,13 @@
   
       /* Append the data at the end of the current buffer. */
   
  -    memcpy((char *) output->end, data, len);
  +    memcpy((char *)output->end, data, len);
       output->end += len;
  -    *((char *) output->end) = '\0';
  +    *((char *)output->end) = '\0';
       return 1;
   }
   
  -static void free_tokenbuf(tokenbuf * buf)
  +static void free_tokenbuf(tokenbuf *buf)
   {
       if (buf->begin != NULL && buf->buffer_size > 0)
           free((char *) buf->begin);
  @@ -160,7 +160,7 @@
       buf->buffer_size = 0;
   }
   
  -static size_t tokenbuf2int(tokenbuf * number)
  +static size_t tokenbuf2int(tokenbuf *number)
   {
       const char *p;
       size_t num = 0;
  @@ -176,7 +176,7 @@
   static void expand_range(char a, char b, char class[256])
   {
       do {
  -        class[(int) a] = 1;
  +        class[(int)a] = 1;
       }
       while (++a <= b);
   }
  @@ -408,7 +408,7 @@
   }
   
   static int substext(const char *begin, const char *end,
  -                    const var_config_t * config)
  +                    const var_config_t *config)
   {
       const char *p;
       for (p = begin; p != end && *p != config->varinit && *p != '/'; ++p) {
  @@ -423,7 +423,7 @@
   }
   
   static int exptext(const char *begin, const char *end,
  -                   const var_config_t * config)
  +                   const var_config_t *config)
   {
       const char *p;
       for (p = begin;
  @@ -441,10 +441,10 @@
   
   
   static int expression(const char *begin, const char *end,
  -                      const var_config_t * config,
  +                      const var_config_t *config,
                         const char nameclass[256], var_cb_t lookup,
                         void *lookup_context, int force_expand,
  -                      tokenbuf * result)
  +                      tokenbuf *result)
   {
       const char *p = begin;
       const char *data;
  @@ -590,9 +590,9 @@
   }
   
   static int variable(const char *begin, const char *end,
  -                    const var_config_t * config, const char nameclass[256],
  +                    const var_config_t *config, const char nameclass[256],
                       var_cb_t lookup, void *lookup_context,
  -                    int force_expand, tokenbuf * result)
  +                    int force_expand, tokenbuf *result)
   {
       const char *p = begin;
       const char *data;
  @@ -649,10 +649,10 @@
   }
   
   static int exptext_or_variable(const char *begin, const char *end,
  -                               const var_config_t * config,
  +                               const var_config_t *config,
                                  const char nameclass[256], var_cb_t lookup,
                                  void *lookup_context, int force_expand,
  -                               tokenbuf * result)
  +                               tokenbuf *result)
   {
       const char *p = begin;
       tokenbuf tmp;
  @@ -701,10 +701,10 @@
   }
   
   static int substext_or_variable(const char *begin, const char *end,
  -                                const var_config_t * config,
  +                                const var_config_t *config,
                                   const char nameclass[256], var_cb_t lookup,
                                   void *lookup_context, int force_expand,
  -                                tokenbuf * result)
  +                                tokenbuf *result)
   {
       const char *p = begin;
       tokenbuf tmp;
  @@ -753,7 +753,7 @@
   }
   
   
  -static int expand_class_description(tokenbuf * src, tokenbuf * dst)
  +static int expand_class_description(tokenbuf *src, tokenbuf *dst)
   {
       unsigned char c, d;
       const char *p = src->begin;
  @@ -776,8 +776,8 @@
       return VAR_OK;
   }
   
  -static int transpose(tokenbuf * data, tokenbuf * search,
  -                     tokenbuf * replace)
  +static int transpose(tokenbuf *data, tokenbuf *search,
  +                     tokenbuf *replace)
   {
       tokenbuf srcclass, dstclass;
       const char *p;
  @@ -832,8 +832,8 @@
       return rc;
   }
   
  -static int cut_out_offset(tokenbuf * data, tokenbuf * number1,
  -                          tokenbuf * number2, int isrange)
  +static int cut_out_offset(tokenbuf *data, tokenbuf *number1,
  +                          tokenbuf *number2, int isrange)
   {
       tokenbuf res;
       const char *p;
  @@ -873,8 +873,8 @@
       return VAR_OK;
   }
   
  -static int expand_regex_replace(const char *data, tokenbuf * orig,
  -                                regmatch_t * pmatch, tokenbuf * expanded)
  +static int expand_regex_replace(const char *data, tokenbuf *orig,
  +                                regmatch_t *pmatch, tokenbuf *expanded)
   {
       const char *p = orig->begin;
       size_t i;
  @@ -923,8 +923,8 @@
       return VAR_OK;
   }
   
  -static int search_and_replace(tokenbuf * data, tokenbuf * search,
  -                              tokenbuf * replace, tokenbuf * flags)
  +static int search_and_replace(tokenbuf *data, tokenbuf *search,
  +                              tokenbuf *replace, tokenbuf *flags)
   {
       const char *p;
       int case_insensitive = 0;
  @@ -1063,7 +1063,7 @@
       return VAR_OK;
   }
   
  -static int padding(tokenbuf * data, tokenbuf * widthstr, tokenbuf * fill,
  +static int padding(tokenbuf *data, tokenbuf *widthstr, tokenbuf *fill,
                      char position)
   {
       tokenbuf result;
  @@ -1175,9 +1175,9 @@
   }
   
   static int command(const char *begin, const char *end,
  -                   const var_config_t * config, const char nameclass[256],
  +                   const var_config_t *config, const char nameclass[256],
                      var_cb_t lookup, void *lookup_context, int force_expand,
  -                   tokenbuf * data)
  +                   tokenbuf *data)
   {
       const char *p = begin;
       tokenbuf tmptokbuf;
  @@ -1510,10 +1510,10 @@
   }
   
   static var_rc_t input(const char *begin, const char *end,
  -                      const var_config_t * config,
  +                      const var_config_t *config,
                         const char nameclass[256], var_cb_t lookup,
                         void *lookup_context, int force_expand,
  -                      tokenbuf * output)
  +                      tokenbuf *output)
   {
       int rc;
       tokenbuf result;
  @@ -1558,9 +1558,9 @@
   }
   
   var_rc_t var_expand(const char *input_buf, size_t input_len,
  -                    char **result, size_t * result_len,
  +                    char **result, size_t *result_len,
                       var_cb_t lookup, void *lookup_context,
  -                    const var_config_t * config, int force_expand)
  +                    const var_config_t *config, int force_expand)
   {
       char nameclass[256];
       var_rc_t rc;

From ossp-cvs-owner@ossp.org  Tue Nov 13 20:32:05 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fADJW4B64711; Tue, 13 Nov 2001 20:32:04 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 1C4194CE617; Tue, 13 Nov 2001 20:32:04 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Message-Id: <20011113193204.1C4194CE617@visp.engelschall.com>
Date: Tue, 13 Nov 2001 20:32:04 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   13-Nov-2001 20:32:04
  Branch: HEAD                             Handle: 2001111319320300

  Modified files:
    ossp-pkg/var            var.c

  Log:
    be consistent: every function has at least one 'return'

  Summary:
    Revision    Changes     Path
    1.12        +3  -0      ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 var.c
  --- ossp-pkg/var/var.c	2001/11/13 19:28:56	1.11
  +++ ossp-pkg/var/var.c	2001/11/13 19:32:03	1.12
  @@ -59,6 +59,7 @@
   {
       buf->begin = buf->end = NULL;
       buf->buffer_size = 0;
  +    return;
   }
   
   static void move_tokenbuf(tokenbuf *src, tokenbuf *dst)
  @@ -67,6 +68,7 @@
       dst->end = src->end;
       dst->buffer_size = src->buffer_size;
       init_tokenbuf(src);
  +    return;
   }
   
   static int assign_to_tokenbuf(tokenbuf *buf, const char *data, size_t len)
  @@ -158,6 +160,7 @@
           free((char *) buf->begin);
       buf->begin = buf->end = NULL;
       buf->buffer_size = 0;
  +    return;
   }
   
   static size_t tokenbuf2int(tokenbuf *number)

From ossp-cvs-owner@ossp.org  Tue Nov 13 20:37:29 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fADJbRB65289; Tue, 13 Nov 2001 20:37:27 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 3F6684CE617; Tue, 13 Nov 2001 20:37:27 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var Makefile
Message-Id: <20011113193727.3F6684CE617@visp.engelschall.com>
Date: Tue, 13 Nov 2001 20:37:27 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   13-Nov-2001 20:37:27
  Branch: HEAD                             Handle: 2001111319372600

  Modified files:
    ossp-pkg/var            Makefile

  Log:
    we decided that the beast is named just 'var'

  Summary:
    Revision    Changes     Path
    1.8         +5  -5      ossp-pkg/var/Makefile
  ____________________________________________________________________________

  Index: ossp-pkg/var/Makefile
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 Makefile
  --- ossp-pkg/var/Makefile	2001/11/13 14:46:55	1.7
  +++ ossp-pkg/var/Makefile	2001/11/13 19:37:26	1.8
  @@ -17,15 +17,15 @@
   .c.o:
   	$(CC) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CFLAGS) -c $<
   
  -all:	libvarexp.a var.3
  +all:	libvar.a var.3
   
  -libvarexp.a:	$(OBJS)
  +libvar.a:	$(OBJS)
   	@rm -f $@
   	$(AR) cr $@ $(OBJS)
   	$(RANLIB) $@
   
  -var_test:	var_test.o libvarexp.a
  -	$(CC) $(LDFLAGS) -o $@ var_test.o libvarexp.a
  +var_test:	var_test.o libvar.a
  +	$(CC) $(LDFLAGS) -o $@ var_test.o libvar.a
   
   var.3:		var.pod
   	$(POD2MAN) var.pod >$@
  @@ -34,7 +34,7 @@
   	@./var_test && echo "All tests succeeed."
   
   clean::
  -	rm -f $(OBJS) libvarexp.a var_test.o var_test var.3
  +	rm -f $(OBJS) libvar.a var_test.o var_test var.3
   
   # Dependencies
   

From ossp-cvs-owner@ossp.org  Wed Nov 14 10:47:05 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fAE9l3B72967; Wed, 14 Nov 2001 10:47:03 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 787FC4CE637; Wed, 14 Nov 2001 10:47:03 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Message-Id: <20011114094703.787FC4CE637@visp.engelschall.com>
Date: Wed, 14 Nov 2001 10:47:03 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   14-Nov-2001 10:47:03
  Branch: HEAD                             Handle: 2001111409470200

  Modified files:
    ossp-pkg/var            var.c

  Log:
    Cleanup code of token buffer stuff to be consistent with our general
    style in our OSSP libraries:
    - rename all xxx_tokenbuf functions to tokenbuf_xxx ("grouping by prefix")
    - rename tokenbuf to tokenbuf_t (POSIX-like type namespace)
    - move variable definitions to top of functions (group them together).
    - glue code comments directly to code (no extra newline)
    - use the combined "assign and check" style ('if ((var = ...) != NULL)..)

  Summary:
    Revision    Changes     Path
    1.13        +213 -225   ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 var.c
  --- ossp-pkg/var/var.c	2001/11/13 19:32:03	1.12
  +++ ossp-pkg/var/var.c	2001/11/14 09:47:02	1.13
  @@ -45,101 +45,88 @@
       "a-zA-Z0-9_"                /* namechars */
   };
   
  -/* Routines for manipulation of tokenbufs. */
  +/* Routines for manipulation of token buffers. */
   
  -#define VAR_INITIAL_BUFFER_SIZE 64
  +#define TOKENBUF_INITIAL_BUFSIZE 64
   
   typedef struct {
       const char *begin;
       const char *end;
       size_t buffer_size;
  -} tokenbuf;
  +} tokenbuf_t;
   
  -static void init_tokenbuf(tokenbuf *buf)
  +static void tokenbuf_init(tokenbuf_t *buf)
   {
  -    buf->begin = buf->end = NULL;
  +    buf->begin = NULL;
  +    buf->end = NULL;
       buf->buffer_size = 0;
       return;
   }
   
  -static void move_tokenbuf(tokenbuf *src, tokenbuf *dst)
  +static void tokenbuf_move(tokenbuf_t *src, tokenbuf_t *dst)
   {
       dst->begin = src->begin;
       dst->end = src->end;
       dst->buffer_size = src->buffer_size;
  -    init_tokenbuf(src);
  +    tokenbuf_init(src);
       return;
   }
   
  -static int assign_to_tokenbuf(tokenbuf *buf, const char *data, size_t len)
  +static int tokenbuf_assign(tokenbuf_t *buf, const char *data, size_t len)
   {
  -    char *p = malloc(len + 1);
  -    if (p) {
  -        memcpy(p, data, len);
  -        buf->begin = p;
  -        buf->end = p + len;
  -        buf->buffer_size = len + 1;
  -        *((char *) (buf->end)) = '\0';
  -        return 1;
  -    } else
  +    char *p;
  +    
  +    if ((p = malloc(len + 1)) == NULL)
           return 0;
  +    memcpy(p, data, len);
  +    buf->begin = p;
  +    buf->end = p + len;
  +    buf->buffer_size = len + 1;
  +    *((char *)(buf->end)) = '\0';
  +    return 1;
   }
   
  -static int append_to_tokenbuf(tokenbuf *output, const char *data,
  -                              size_t len)
  +static int tokenbuf_append(tokenbuf_t *output, const char *data, size_t len)
   {
       char *new_buffer;
       size_t new_size;
  +    char *tmp;
   
       /* Is the tokenbuffer initialized at all? If not, allocate a
          standard-sized buffer to begin with. */
  -
       if (output->begin == NULL) {
  -        if ((output->begin = output->end =
  -             malloc(VAR_INITIAL_BUFFER_SIZE)) == NULL)
  +        if ((output->begin = output->end = malloc(TOKENBUF_INITIAL_BUFSIZE)) == NULL)
               return 0;
  -        else
  -            output->buffer_size = VAR_INITIAL_BUFFER_SIZE;
  +        output->buffer_size = TOKENBUF_INITIAL_BUFSIZE;
       }
   
  -    /* Does the token contain text, but no buffer has been allocated
  -       yet? */
  -
  +    /* Does the token contain text, but no buffer has been allocated yet? */
       if (output->buffer_size == 0) {
           /* Check whether data borders to output. If, we can append
              simly by increasing the end pointer. */
  -
           if (output->end == data) {
               output->end += len;
               return 1;
           }
  -
           /* OK, so copy the contents of output into an allocated buffer
              so that we can append that way. */
  -
  -        else {
  -            char *tmp = malloc(output->end - output->begin + len + 1);
  -            if (!tmp)
  -                return 0;
  -            memcpy(tmp, output->begin, output->end - output->begin);
  -            output->buffer_size = output->end - output->begin;
  -            output->begin = tmp;
  -            output->end = tmp + output->buffer_size;
  -            output->buffer_size += len + 1;
  -        }
  +        if ((tmp = malloc(output->end - output->begin + len + 1)) == NULL)
  +            return 0;
  +        memcpy(tmp, output->begin, output->end - output->begin);
  +        output->buffer_size = output->end - output->begin;
  +        output->begin = tmp;
  +        output->end = tmp + output->buffer_size;
  +        output->buffer_size += len + 1;
       }
   
       /* Does the token fit into the current buffer? If not, realloc a
          larger buffer that fits. */
  -
       if ((output->buffer_size - (output->end - output->begin)) <= len) {
           new_size = output->buffer_size;
           do {
               new_size *= 2;
  -        }
  -        while ((new_size - (output->end - output->begin)) <= len);
  -        new_buffer = realloc((char *) output->begin, new_size);
  -        if (new_buffer == NULL)
  +        } while ((new_size - (output->end - output->begin)) <= len);
  +        if ((new_buffer = realloc((char *)output->begin, new_size)) == NULL)
               return 0;
           output->end = new_buffer + (output->end - output->begin);
           output->begin = new_buffer;
  @@ -147,26 +134,27 @@
       }
   
       /* Append the data at the end of the current buffer. */
  -
       memcpy((char *)output->end, data, len);
       output->end += len;
       *((char *)output->end) = '\0';
       return 1;
   }
   
  -static void free_tokenbuf(tokenbuf *buf)
  +static void tokenbuf_free(tokenbuf_t *buf)
   {
       if (buf->begin != NULL && buf->buffer_size > 0)
  -        free((char *) buf->begin);
  +        free((char *)buf->begin);
       buf->begin = buf->end = NULL;
       buf->buffer_size = 0;
       return;
   }
   
  -static size_t tokenbuf2int(tokenbuf *number)
  +static size_t tokenbuf_toint(tokenbuf_t *number)
   {
       const char *p;
  -    size_t num = 0;
  +    size_t num;
  +    
  +    num = 0;
       for (p = number->begin; p != number->end; ++p) {
           num *= 10;
           num += *p - '0';
  @@ -376,9 +364,9 @@
   /* The recursive-descent parser for variable expressions. */
   
   static int variable(const char *, const char *, const var_config_t *,
  -                    const char[256], var_cb_t, void *, int, tokenbuf *);
  +                    const char[256], var_cb_t, void *, int, tokenbuf_t *);
   static int command(const char *, const char *, const var_config_t *,
  -                   const char[256], var_cb_t, void *, int, tokenbuf *);
  +                   const char[256], var_cb_t, void *, int, tokenbuf_t *);
   
   static int text(const char *begin, const char *end, char varinit,
                   char escape)
  @@ -447,21 +435,21 @@
                         const var_config_t *config,
                         const char nameclass[256], var_cb_t lookup,
                         void *lookup_context, int force_expand,
  -                      tokenbuf *result)
  +                      tokenbuf_t *result)
   {
       const char *p = begin;
       const char *data;
       size_t len, buffer_size;
       int failed = 0;
       int rc;
  -    tokenbuf name;
  -    tokenbuf tmp;
  +    tokenbuf_t name;
  +    tokenbuf_t tmp;
   
       /* Clear the tokenbufs to make sure we have a defined state. */
   
  -    init_tokenbuf(&name);
  -    init_tokenbuf(&tmp);
  -    init_tokenbuf(result);
  +    tokenbuf_init(&name);
  +    tokenbuf_init(&tmp);
  +    tokenbuf_init(result);
   
       /* Expect STARTDELIM. */
   
  @@ -479,7 +467,7 @@
           if (rc < 0)
               goto error_return;
           else if (rc > 0) {
  -            if (!append_to_tokenbuf(&name, p, rc)) {
  +            if (!tokenbuf_append(&name, p, rc)) {
                   rc = VAR_OUT_OF_MEMORY;
                   goto error_return;
               } else
  @@ -491,7 +479,7 @@
           if (rc < 0)
               goto error_return;
           else if (rc > 0) {
  -            if (!append_to_tokenbuf(&name, tmp.begin, tmp.end - tmp.begin)) {
  +            if (!tokenbuf_append(&name, tmp.begin, tmp.end - tmp.begin)) {
                   rc = VAR_OUT_OF_MEMORY;
                   goto error_return;
               } else
  @@ -551,7 +539,7 @@
       if (p[-1] == ':') {
           /* Parse and execute commands. */
   
  -        free_tokenbuf(&tmp);
  +        tokenbuf_free(&tmp);
           --p;
           while (p != end && *p == ':') {
               ++p;
  @@ -579,23 +567,23 @@
   
       /* Exit gracefully. */
   
  -    free_tokenbuf(&name);
  -    free_tokenbuf(&tmp);
  +    tokenbuf_free(&name);
  +    tokenbuf_free(&tmp);
       return p - begin;
   
       /* Exit in case of an error. */
   
     error_return:
  -    free_tokenbuf(&name);
  -    free_tokenbuf(&tmp);
  -    free_tokenbuf(result);
  +    tokenbuf_free(&name);
  +    tokenbuf_free(&tmp);
  +    tokenbuf_free(result);
       return rc;
   }
   
   static int variable(const char *begin, const char *end,
                       const var_config_t *config, const char nameclass[256],
                       var_cb_t lookup, void *lookup_context,
  -                    int force_expand, tokenbuf *result)
  +                    int force_expand, tokenbuf_t *result)
   {
       const char *p = begin;
       const char *data;
  @@ -605,7 +593,7 @@
       /* Clear the result tokenbuf to make sure we're in a defined
          state. */
   
  -    init_tokenbuf(result);
  +    tokenbuf_init(result);
   
       /* Expect VARINIT. */
   
  @@ -655,14 +643,14 @@
                                  const var_config_t *config,
                                  const char nameclass[256], var_cb_t lookup,
                                  void *lookup_context, int force_expand,
  -                               tokenbuf *result)
  +                               tokenbuf_t *result)
   {
       const char *p = begin;
  -    tokenbuf tmp;
  +    tokenbuf_t tmp;
       int rc;
   
  -    init_tokenbuf(result);
  -    init_tokenbuf(&tmp);
  +    tokenbuf_init(result);
  +    tokenbuf_init(&tmp);
   
       if (begin == end)
           return 0;
  @@ -672,7 +660,7 @@
           if (rc < 0)
               goto error_return;
           else if (rc > 0) {
  -            if (!append_to_tokenbuf(result, p, rc)) {
  +            if (!tokenbuf_append(result, p, rc)) {
                   rc = VAR_OUT_OF_MEMORY;
                   goto error_return;
               } else
  @@ -685,7 +673,7 @@
               goto error_return;
           else if (rc > 0) {
               p += rc;
  -            if (!append_to_tokenbuf
  +            if (!tokenbuf_append
                   (result, tmp.begin, tmp.end - tmp.begin)) {
                   rc = VAR_OUT_OF_MEMORY;
                   goto error_return;
  @@ -694,12 +682,12 @@
       }
       while (rc > 0);
   
  -    free_tokenbuf(&tmp);
  +    tokenbuf_free(&tmp);
       return p - begin;
   
     error_return:
  -    free_tokenbuf(&tmp);
  -    free_tokenbuf(result);
  +    tokenbuf_free(&tmp);
  +    tokenbuf_free(result);
       return rc;
   }
   
  @@ -707,14 +695,14 @@
                                   const var_config_t *config,
                                   const char nameclass[256], var_cb_t lookup,
                                   void *lookup_context, int force_expand,
  -                                tokenbuf *result)
  +                                tokenbuf_t *result)
   {
       const char *p = begin;
  -    tokenbuf tmp;
  +    tokenbuf_t tmp;
       int rc;
   
  -    init_tokenbuf(result);
  -    init_tokenbuf(&tmp);
  +    tokenbuf_init(result);
  +    tokenbuf_init(&tmp);
   
       if (begin == end)
           return 0;
  @@ -724,7 +712,7 @@
           if (rc < 0)
               goto error_return;
           else if (rc > 0) {
  -            if (!append_to_tokenbuf(result, p, rc)) {
  +            if (!tokenbuf_append(result, p, rc)) {
                   rc = VAR_OUT_OF_MEMORY;
                   goto error_return;
               } else
  @@ -737,7 +725,7 @@
               goto error_return;
           else if (rc > 0) {
               p += rc;
  -            if (!append_to_tokenbuf
  +            if (!tokenbuf_append
                   (result, tmp.begin, tmp.end - tmp.begin)) {
                   rc = VAR_OUT_OF_MEMORY;
                   goto error_return;
  @@ -746,17 +734,17 @@
       }
       while (rc > 0);
   
  -    free_tokenbuf(&tmp);
  +    tokenbuf_free(&tmp);
       return p - begin;
   
     error_return:
  -    free_tokenbuf(&tmp);
  -    free_tokenbuf(result);
  +    tokenbuf_free(&tmp);
  +    tokenbuf_free(result);
       return rc;
   }
   
   
  -static int expand_class_description(tokenbuf *src, tokenbuf *dst)
  +static int expand_class_description(tokenbuf_t *src, tokenbuf_t *dst)
   {
       unsigned char c, d;
       const char *p = src->begin;
  @@ -765,12 +753,12 @@
               if (*p > p[2])
                   return VAR_INCORRECT_TRANSPOSE_CLASS_SPEC;
               for (c = *p, d = p[2]; c <= d; ++c) {
  -                if (!append_to_tokenbuf(dst, (char *) &c, 1))
  +                if (!tokenbuf_append(dst, (char *) &c, 1))
                       return VAR_OUT_OF_MEMORY;
               }
               p += 3;
           } else {
  -            if (!append_to_tokenbuf(dst, p, 1))
  +            if (!tokenbuf_append(dst, p, 1))
                   return VAR_OUT_OF_MEMORY;
               else
                   ++p;
  @@ -779,16 +767,16 @@
       return VAR_OK;
   }
   
  -static int transpose(tokenbuf *data, tokenbuf *search,
  -                     tokenbuf *replace)
  +static int transpose(tokenbuf_t *data, tokenbuf_t *search,
  +                     tokenbuf_t *replace)
   {
  -    tokenbuf srcclass, dstclass;
  +    tokenbuf_t srcclass, dstclass;
       const char *p;
       int rc;
       size_t i;
   
  -    init_tokenbuf(&srcclass);
  -    init_tokenbuf(&dstclass);
  +    tokenbuf_init(&srcclass);
  +    tokenbuf_init(&dstclass);
   
       if ((rc = expand_class_description(search, &srcclass)) != VAR_OK)
           goto error_return;
  @@ -805,13 +793,13 @@
       }
   
       if (data->buffer_size == 0) {
  -        tokenbuf tmp;
  -        if (!assign_to_tokenbuf
  +        tokenbuf_t tmp;
  +        if (!tokenbuf_assign
               (&tmp, data->begin, data->end - data->begin)) {
               rc = VAR_OUT_OF_MEMORY;
               goto error_return;
           }
  -        move_tokenbuf(&tmp, data);
  +        tokenbuf_move(&tmp, data);
       }
   
       for (p = data->begin; p != data->end; ++p) {
  @@ -823,25 +811,25 @@
           }
       }
   
  -    free_tokenbuf(&srcclass);
  -    free_tokenbuf(&dstclass);
  +    tokenbuf_free(&srcclass);
  +    tokenbuf_free(&dstclass);
       return VAR_OK;
   
     error_return:
  -    free_tokenbuf(search);
  -    free_tokenbuf(replace);
  -    free_tokenbuf(&srcclass);
  -    free_tokenbuf(&dstclass);
  +    tokenbuf_free(search);
  +    tokenbuf_free(replace);
  +    tokenbuf_free(&srcclass);
  +    tokenbuf_free(&dstclass);
       return rc;
   }
   
  -static int cut_out_offset(tokenbuf *data, tokenbuf *number1,
  -                          tokenbuf *number2, int isrange)
  +static int cut_out_offset(tokenbuf_t *data, tokenbuf_t *number1,
  +                          tokenbuf_t *number2, int isrange)
   {
  -    tokenbuf res;
  +    tokenbuf_t res;
       const char *p;
  -    size_t num1 = tokenbuf2int(number1);
  -    size_t num2 = tokenbuf2int(number2);
  +    size_t num1 = tokenbuf_toint(number1);
  +    size_t num2 = tokenbuf_toint(number2);
   
       /* Determine begin of result string. */
   
  @@ -853,70 +841,70 @@
       /* If num2 is zero, we copy the rest from there. */
   
       if (num2 == 0) {
  -        if (!assign_to_tokenbuf(&res, p, data->end - p))
  +        if (!tokenbuf_assign(&res, p, data->end - p))
               return VAR_OUT_OF_MEMORY;
       } else {                    /* OK, then use num2. */
   
           if (isrange) {
               if ((p + num2) > data->end)
                   return VAR_RANGE_OUT_OF_BOUNDS;
  -            if (!assign_to_tokenbuf(&res, p, num2))
  +            if (!tokenbuf_assign(&res, p, num2))
                   return VAR_OUT_OF_MEMORY;
           } else {
               if (num2 < num1)
                   return VAR_OFFSET_LOGIC_ERROR;
               if ((data->begin + num2) > data->end)
                   return VAR_RANGE_OUT_OF_BOUNDS;
  -            if (!assign_to_tokenbuf(&res, p, (data->begin + num2) - p))
  +            if (!tokenbuf_assign(&res, p, (data->begin + num2) - p))
                   return VAR_OUT_OF_MEMORY;
           }
       }
  -    free_tokenbuf(data);
  -    move_tokenbuf(&res, data);
  +    tokenbuf_free(data);
  +    tokenbuf_move(&res, data);
       return VAR_OK;
   }
   
  -static int expand_regex_replace(const char *data, tokenbuf *orig,
  -                                regmatch_t *pmatch, tokenbuf *expanded)
  +static int expand_regex_replace(const char *data, tokenbuf_t *orig,
  +                                regmatch_t *pmatch, tokenbuf_t *expanded)
   {
       const char *p = orig->begin;
       size_t i;
   
  -    init_tokenbuf(expanded);
  +    tokenbuf_init(expanded);
   
       while (p != orig->end) {
           if (*p == '\\') {
               if (orig->end - p <= 1) {
  -                free_tokenbuf(expanded);
  +                tokenbuf_free(expanded);
                   return VAR_INCOMPLETE_QUOTED_PAIR;
               } else
                   ++p;
               if (*p == '\\') {
  -                if (!append_to_tokenbuf(expanded, p, 1)) {
  -                    free_tokenbuf(expanded);
  +                if (!tokenbuf_append(expanded, p, 1)) {
  +                    tokenbuf_free(expanded);
                       return VAR_OUT_OF_MEMORY;
                   }
                   ++p;
                   continue;
               }
               if (!isdigit((int)*p)) {
  -                free_tokenbuf(expanded);
  +                tokenbuf_free(expanded);
                   return VAR_UNKNOWN_QUOTED_PAIR_IN_REPLACE;
               }
               i = *p - '0';
               ++p;
               if (pmatch[i].rm_so == -1) {
  -                free_tokenbuf(expanded);
  +                tokenbuf_free(expanded);
                   return VAR_SUBMATCH_OUT_OF_RANGE;
               }
  -            if (!append_to_tokenbuf(expanded, data + pmatch[i].rm_so,
  +            if (!tokenbuf_append(expanded, data + pmatch[i].rm_so,
                                       pmatch[i].rm_eo - pmatch[i].rm_so)) {
  -                free_tokenbuf(expanded);
  +                tokenbuf_free(expanded);
                   return VAR_OUT_OF_MEMORY;
               }
           } else {
  -            if (!append_to_tokenbuf(expanded, p, 1)) {
  -                free_tokenbuf(expanded);
  +            if (!tokenbuf_append(expanded, p, 1)) {
  +                tokenbuf_free(expanded);
                   return VAR_OUT_OF_MEMORY;
               }
               ++p;
  @@ -926,8 +914,8 @@
       return VAR_OK;
   }
   
  -static int search_and_replace(tokenbuf *data, tokenbuf *search,
  -                              tokenbuf *replace, tokenbuf *flags)
  +static int search_and_replace(tokenbuf_t *data, tokenbuf_t *search,
  +                              tokenbuf_t *replace, tokenbuf_t *flags)
   {
       const char *p;
       int case_insensitive = 0;
  @@ -955,8 +943,8 @@
       }
   
       if (no_regex) {
  -        tokenbuf tmp;
  -        init_tokenbuf(&tmp);
  +        tokenbuf_t tmp;
  +        tokenbuf_init(&tmp);
   
           for (p = data->begin; p != data->end;) {
               if (case_insensitive)
  @@ -966,18 +954,18 @@
                   rc = strncmp(p, search->begin,
                                search->end - search->begin);
               if (rc != 0) {      /* no match, copy character */
  -                if (!append_to_tokenbuf(&tmp, p, 1)) {
  -                    free_tokenbuf(&tmp);
  +                if (!tokenbuf_append(&tmp, p, 1)) {
  +                    tokenbuf_free(&tmp);
                       return VAR_OUT_OF_MEMORY;
                   }
                   ++p;
               } else {
  -                append_to_tokenbuf(&tmp, replace->begin,
  +                tokenbuf_append(&tmp, replace->begin,
                                      replace->end - replace->begin);
                   p += search->end - search->begin;
                   if (!global) {
  -                    if (!append_to_tokenbuf(&tmp, p, data->end - p)) {
  -                        free_tokenbuf(&tmp);
  +                    if (!tokenbuf_append(&tmp, p, data->end - p)) {
  +                        tokenbuf_free(&tmp);
                           return VAR_OUT_OF_MEMORY;
                       }
                       break;
  @@ -985,12 +973,12 @@
               }
           }
   
  -        free_tokenbuf(data);
  -        move_tokenbuf(&tmp, data);
  +        tokenbuf_free(data);
  +        tokenbuf_move(&tmp, data);
       } else {
  -        tokenbuf tmp;
  -        tokenbuf mydata;
  -        tokenbuf myreplace;
  +        tokenbuf_t tmp;
  +        tokenbuf_t mydata;
  +        tokenbuf_t myreplace;
           regex_t preg;
           regmatch_t pmatch[10];
           int regexec_flag;
  @@ -998,12 +986,12 @@
           /* Copy the pattern and the data to our own buffer to make
              sure they're terminated with a null byte. */
   
  -        if (!assign_to_tokenbuf
  +        if (!tokenbuf_assign
               (&tmp, search->begin, search->end - search->begin))
               return VAR_OUT_OF_MEMORY;
  -        if (!assign_to_tokenbuf
  +        if (!tokenbuf_assign
               (&mydata, data->begin, data->end - data->begin)) {
  -            free_tokenbuf(&tmp);
  +            tokenbuf_free(&tmp);
               return VAR_OUT_OF_MEMORY;
           }
   
  @@ -1011,9 +999,9 @@
   
           rc = regcomp(&preg, tmp.begin,
                        REG_EXTENDED | ((case_insensitive) ? REG_ICASE : 0));
  -        free_tokenbuf(&tmp);
  +        tokenbuf_free(&tmp);
           if (rc != 0) {
  -            free_tokenbuf(&mydata);
  +            tokenbuf_free(&mydata);
               return VAR_INVALID_REGEX_IN_REPLACE;
           }
   
  @@ -1028,69 +1016,69 @@
               if (regexec
                   (&preg, p, sizeof(pmatch) / sizeof(regmatch_t), pmatch,
                    regexec_flag) == REG_NOMATCH) {
  -                append_to_tokenbuf(&tmp, p, mydata.end - p);
  +                tokenbuf_append(&tmp, p, mydata.end - p);
                   break;
               } else {
                   rc = expand_regex_replace(p, replace, pmatch, &myreplace);
                   if (rc != VAR_OK) {
                       regfree(&preg);
  -                    free_tokenbuf(&tmp);
  -                    free_tokenbuf(&mydata);
  +                    tokenbuf_free(&tmp);
  +                    tokenbuf_free(&mydata);
                       return rc;
                   }
  -                if (!append_to_tokenbuf(&tmp, p, pmatch[0].rm_so) ||
  -                    !append_to_tokenbuf(&tmp, myreplace.begin,
  +                if (!tokenbuf_append(&tmp, p, pmatch[0].rm_so) ||
  +                    !tokenbuf_append(&tmp, myreplace.begin,
                                           myreplace.end - myreplace.begin)) {
                       regfree(&preg);
  -                    free_tokenbuf(&tmp);
  -                    free_tokenbuf(&mydata);
  -                    free_tokenbuf(&myreplace);
  +                    tokenbuf_free(&tmp);
  +                    tokenbuf_free(&mydata);
  +                    tokenbuf_free(&myreplace);
                       return VAR_OUT_OF_MEMORY;
                   } else {
                       p += (pmatch[0].rm_eo > 0) ? pmatch[0].rm_eo : 1;
  -                    free_tokenbuf(&myreplace);
  +                    tokenbuf_free(&myreplace);
                   }
                   if (!global) {
  -                    append_to_tokenbuf(&tmp, p, mydata.end - p);
  +                    tokenbuf_append(&tmp, p, mydata.end - p);
                       break;
                   }
               }
           }
   
           regfree(&preg);
  -        free_tokenbuf(data);
  -        move_tokenbuf(&tmp, data);
  -        free_tokenbuf(&mydata);
  +        tokenbuf_free(data);
  +        tokenbuf_move(&tmp, data);
  +        tokenbuf_free(&mydata);
       }
   
       return VAR_OK;
   }
   
  -static int padding(tokenbuf *data, tokenbuf *widthstr, tokenbuf *fill,
  +static int padding(tokenbuf_t *data, tokenbuf_t *widthstr, tokenbuf_t *fill,
                      char position)
   {
  -    tokenbuf result;
  -    size_t width = tokenbuf2int(widthstr);
  +    tokenbuf_t result;
  +    size_t width = tokenbuf_toint(widthstr);
       int i;
   
       if (fill->begin == fill->end)
           return VAR_EMPTY_PADDING_FILL_STRING;
   
  -    init_tokenbuf(&result);
  +    tokenbuf_init(&result);
   
       if (position == 'l') {
           i = width - (data->end - data->begin);
           if (i > 0) {
               i = i / (fill->end - fill->begin);
               while (i > 0) {
  -                if (!append_to_tokenbuf
  +                if (!tokenbuf_append
                       (data, fill->begin, fill->end - fill->begin))
                       return VAR_OUT_OF_MEMORY;
                   --i;
               }
               i = (width - (data->end - data->begin)) % (fill->end -
                                                          fill->begin);
  -            if (!append_to_tokenbuf(data, fill->begin, i))
  +            if (!tokenbuf_append(data, fill->begin, i))
                   return VAR_OUT_OF_MEMORY;
           }
       } else if (position == 'r') {
  @@ -1098,27 +1086,27 @@
           if (i > 0) {
               i = i / (fill->end - fill->begin);
               while (i > 0) {
  -                if (!append_to_tokenbuf
  +                if (!tokenbuf_append
                       (&result, fill->begin, fill->end - fill->begin)) {
  -                    free_tokenbuf(&result);
  +                    tokenbuf_free(&result);
                       return VAR_OUT_OF_MEMORY;
                   }
                   --i;
               }
               i = (width - (data->end - data->begin)) % (fill->end -
                                                          fill->begin);
  -            if (!append_to_tokenbuf(&result, fill->begin, i)) {
  -                free_tokenbuf(&result);
  +            if (!tokenbuf_append(&result, fill->begin, i)) {
  +                tokenbuf_free(&result);
                   return VAR_OUT_OF_MEMORY;
               }
  -            if (!append_to_tokenbuf
  +            if (!tokenbuf_append
                   (&result, data->begin, data->end - data->begin)) {
  -                free_tokenbuf(&result);
  +                tokenbuf_free(&result);
                   return VAR_OUT_OF_MEMORY;
               }
   
  -            free_tokenbuf(data);
  -            move_tokenbuf(&result, data);
  +            tokenbuf_free(data);
  +            tokenbuf_move(&result, data);
           }
       } else if (position == 'c') {
           i = (width - (data->end - data->begin)) / 2;
  @@ -1127,25 +1115,25 @@
   
               i = i / (fill->end - fill->begin);
               while (i > 0) {
  -                if (!append_to_tokenbuf
  +                if (!tokenbuf_append
                       (&result, fill->begin, fill->end - fill->begin)) {
  -                    free_tokenbuf(&result);
  +                    tokenbuf_free(&result);
                       return VAR_OUT_OF_MEMORY;
                   }
                   --i;
               }
               i = ((width - (data->end - data->begin)) / 2) % (fill->end -
                                                                fill->begin);
  -            if (!append_to_tokenbuf(&result, fill->begin, i)) {
  -                free_tokenbuf(&result);
  +            if (!tokenbuf_append(&result, fill->begin, i)) {
  +                tokenbuf_free(&result);
                   return VAR_OUT_OF_MEMORY;
               }
   
               /* Append the actual data string. */
   
  -            if (!append_to_tokenbuf
  +            if (!tokenbuf_append
                   (&result, data->begin, data->end - data->begin)) {
  -                free_tokenbuf(&result);
  +                tokenbuf_free(&result);
                   return VAR_OUT_OF_MEMORY;
               }
   
  @@ -1154,23 +1142,23 @@
               i = width - (result.end - result.begin);
               i = i / (fill->end - fill->begin);
               while (i > 0) {
  -                if (!append_to_tokenbuf
  +                if (!tokenbuf_append
                       (&result, fill->begin, fill->end - fill->begin)) {
  -                    free_tokenbuf(&result);
  +                    tokenbuf_free(&result);
                       return VAR_OUT_OF_MEMORY;
                   }
                   --i;
               }
               i = width - (result.end - result.begin);
  -            if (!append_to_tokenbuf(&result, fill->begin, i)) {
  -                free_tokenbuf(&result);
  +            if (!tokenbuf_append(&result, fill->begin, i)) {
  +                tokenbuf_free(&result);
                   return VAR_OUT_OF_MEMORY;
               }
   
               /* Move string from temporary buffer to data buffer. */
   
  -            free_tokenbuf(data);
  -            move_tokenbuf(&result, data);
  +            tokenbuf_free(data);
  +            tokenbuf_move(&result, data);
           }
       }
   
  @@ -1180,21 +1168,21 @@
   static int command(const char *begin, const char *end,
                      const var_config_t *config, const char nameclass[256],
                      var_cb_t lookup, void *lookup_context, int force_expand,
  -                   tokenbuf *data)
  +                   tokenbuf_t *data)
   {
       const char *p = begin;
  -    tokenbuf tmptokbuf;
  -    tokenbuf search, replace, flags;
  -    tokenbuf number1, number2;
  +    tokenbuf_t tmptokbuf;
  +    tokenbuf_t search, replace, flags;
  +    tokenbuf_t number1, number2;
       int isrange;
       int rc;
   
  -    init_tokenbuf(&tmptokbuf);
  -    init_tokenbuf(&search);
  -    init_tokenbuf(&replace);
  -    init_tokenbuf(&flags);
  -    init_tokenbuf(&number1);
  -    init_tokenbuf(&number2);
  +    tokenbuf_init(&tmptokbuf);
  +    tokenbuf_init(&search);
  +    tokenbuf_init(&replace);
  +    tokenbuf_init(&flags);
  +    tokenbuf_init(&number1);
  +    tokenbuf_init(&number2);
   
       if (begin == end)
           return 0;
  @@ -1207,7 +1195,7 @@
                  we have to copy it before modifying the contents. */
   
               if (data->buffer_size == 0) {
  -                if (!assign_to_tokenbuf
  +                if (!tokenbuf_assign
                       (data, data->begin, data->end - data->begin)) {
                       rc = VAR_OUT_OF_MEMORY;
                       goto error_return;
  @@ -1223,7 +1211,7 @@
           if (data->begin) {
               char *ptr;
               if (data->buffer_size == 0) {
  -                if (!assign_to_tokenbuf
  +                if (!tokenbuf_assign
                       (data, data->begin, data->end - data->begin)) {
                       rc = VAR_OUT_OF_MEMORY;
                       goto error_return;
  @@ -1275,8 +1263,8 @@
           if (data->begin) {
               char buf[1024];
               sprintf(buf, "%d", data->end - data->begin);
  -            free_tokenbuf(data);
  -            if (!assign_to_tokenbuf(data, buf, strlen(buf))) {
  +            tokenbuf_free(data);
  +            if (!tokenbuf_assign(data, buf, strlen(buf))) {
                   rc = VAR_OUT_OF_MEMORY;
                   goto error_return;
               }
  @@ -1296,8 +1284,8 @@
           } else
               p += rc;
           if (data->begin != NULL && data->begin == data->end) {
  -            free_tokenbuf(data);
  -            move_tokenbuf(&tmptokbuf, data);
  +            tokenbuf_free(data);
  +            tokenbuf_move(&tmptokbuf, data);
           }
           break;
   
  @@ -1314,10 +1302,10 @@
               p += rc;
           if (data->begin != NULL) {
               if (data->begin == data->end) {
  -                free_tokenbuf(data);
  -                move_tokenbuf(&tmptokbuf, data);
  +                tokenbuf_free(data);
  +                tokenbuf_move(&tmptokbuf, data);
               } else {
  -                free_tokenbuf(data);
  +                tokenbuf_free(data);
                   data->begin = data->end = "";
                   data->buffer_size = 0;
               }
  @@ -1337,8 +1325,8 @@
               p += rc;
           if (data->begin != NULL) {
               if (data->begin != data->end) {
  -                free_tokenbuf(data);
  -                move_tokenbuf(&tmptokbuf, data);
  +                tokenbuf_free(data);
  +                tokenbuf_move(&tmptokbuf, data);
               }
           }
           break;
  @@ -1493,22 +1481,22 @@
   
       /* Exit gracefully. */
   
  -    free_tokenbuf(&tmptokbuf);
  -    free_tokenbuf(&search);
  -    free_tokenbuf(&replace);
  -    free_tokenbuf(&flags);
  -    free_tokenbuf(&number1);
  -    free_tokenbuf(&number2);
  +    tokenbuf_free(&tmptokbuf);
  +    tokenbuf_free(&search);
  +    tokenbuf_free(&replace);
  +    tokenbuf_free(&flags);
  +    tokenbuf_free(&number1);
  +    tokenbuf_free(&number2);
       return p - begin;
   
     error_return:
  -    free_tokenbuf(data);
  -    free_tokenbuf(&tmptokbuf);
  -    free_tokenbuf(&search);
  -    free_tokenbuf(&replace);
  -    free_tokenbuf(&flags);
  -    free_tokenbuf(&number1);
  -    free_tokenbuf(&number2);
  +    tokenbuf_free(data);
  +    tokenbuf_free(&tmptokbuf);
  +    tokenbuf_free(&search);
  +    tokenbuf_free(&replace);
  +    tokenbuf_free(&flags);
  +    tokenbuf_free(&number1);
  +    tokenbuf_free(&number2);
       return rc;
   }
   
  @@ -1516,17 +1504,17 @@
                         const var_config_t *config,
                         const char nameclass[256], var_cb_t lookup,
                         void *lookup_context, int force_expand,
  -                      tokenbuf *output)
  +                      tokenbuf_t *output)
   {
       int rc;
  -    tokenbuf result;
  +    tokenbuf_t result;
   
  -    init_tokenbuf(&result);
  +    tokenbuf_init(&result);
   
       do {
           rc = text(begin, end, config->varinit, config->escape);
           if (rc > 0) {
  -            if (!append_to_tokenbuf(output, begin, rc)) {
  +            if (!tokenbuf_append(output, begin, rc)) {
                   rc = VAR_OUT_OF_MEMORY;
                   goto error_return;
               }
  @@ -1537,7 +1525,7 @@
           rc = variable(begin, end, config, nameclass, lookup,
                         lookup_context, force_expand, &result);
           if (rc > 0) {
  -            if (!append_to_tokenbuf
  +            if (!tokenbuf_append
                   (output, result.begin, result.end - result.begin)) {
                   rc = VAR_OUT_OF_MEMORY;
                   goto error_return;
  @@ -1556,7 +1544,7 @@
       return VAR_OK;
   
     error_return:
  -    free_tokenbuf(&result);
  +    tokenbuf_free(&result);
       return rc;
   }
   
  @@ -1567,7 +1555,7 @@
   {
       char nameclass[256];
       var_rc_t rc;
  -    tokenbuf output;
  +    tokenbuf_t output;
   
       /* Expand the class description for valid variable names. */
   
  @@ -1593,7 +1581,7 @@
       rc = input(input_buf, input_buf + input_len, config, nameclass,
                  lookup, lookup_context, force_expand, &output);
       if (rc != VAR_OK) {
  -        free_tokenbuf(&output);
  +        tokenbuf_free(&output);
           return rc;
       }
       *result = (char *) output.begin;

From ossp-cvs-owner@ossp.org  Wed Nov 14 11:47:19 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAEAlI079993; Wed, 14 Nov 2001 11:47:18 +0100 (CET)
Date: Wed, 14 Nov 2001 11:47:18 +0100 (CET)
Message-Id: <200111141047.fAEAlI079993@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   14-Nov-2001 11:47:18
  Branch: HEAD                             Handle: 2001111410471700

  Modified files:
    ossp-pkg/var            var_test.c

  Log:
    Expanded tabs.

  Summary:
    Revision    Changes     Path
    1.8         +93 -93     ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 var_test.c
  --- ossp-pkg/var/var_test.c	2001/11/13 14:42:57	1.7
  +++ ossp-pkg/var/var_test.c	2001/11/14 10:47:17	1.8
  @@ -4,23 +4,23 @@
   #include "var.h"
   
   static int env_lookup(void *context,
  -		      const char *varname, size_t name_len,
  -		      const char **data, size_t * data_len,
  -		      size_t * buffer_size)
  +              const char *varname, size_t name_len,
  +              const char **data, size_t * data_len,
  +              size_t * buffer_size)
   {
       char tmp[256];
   
       if (name_len > sizeof(tmp) - 1) {
  -	/* Callback can't expand variable names longer than
  -	   sizeof(tmp) characters. */
  +    /* Callback can't expand variable names longer than
  +       sizeof(tmp) characters. */
   
  -	return VAR_CALLBACK_ERROR;
  +    return VAR_CALLBACK_ERROR;
       }
       memcpy(tmp, varname, name_len);
       tmp[name_len] = '\0';
       *data = getenv(tmp);
       if (*data == NULL)
  -	return 0;
  +    return 0;
       *data_len = strlen(*data);
       *buffer_size = 0;
       return 1;
  @@ -34,59 +34,59 @@
   int main(int argc, char **argv)
   {
       const struct test_case tests[] = {
  -	{"$HOME", "/home/regression-tests"},
  -	{"${FOO}", "os"},
  -	{"${BAR}", "type"},
  -	{"${${FOO:u}${BAR:u}:l:u}", "REGRESSION-OS"},
  -	{"${UNDEFINED}", "${UNDEFINED}"},
  -	{"${OSTYPE:#}", "13"},
  -	{"${EMPTY:-test${FOO}test}", "testostest"},
  -	{"${EMPTY:-test${FOO:u}test}", "testOStest"},
  -	{"${TERM:-test${FOO}test}", "regression-term"},
  -	{"${EMPTY:+FOO}", ""},
  -	{"${HOME:+test${FOO}test}", "testostest"},
  -	{"${HOME:+${OS${BAR:u}}}", "regression-os"},
  -	{"${HOME:+OS${UNDEFINED:u}}", "OS${UNDEFINED:u}"},
  -	{"${UNDEFINED:+OS${BAR:u}}", "${UNDEFINED:+OS${BAR:u}}"},
  -	{"${HOME:*heinz}", ""},
  -	{"${EMPTY:*claus}", "claus"},
  -	{"${TERM}", "regression-term"},
  -	{"${HOME:s/reg/bla/}", "/home/blaression-tests"},
  -	{"${HOME:s/e/bla/}", "/hombla/regression-tests"},
  -	{"${HOME:s/e/bla/g}", "/hombla/rblagrblassion-tblasts"},
  -	{"${HOME:s/\\//_/g}", "_home_regression-tests"},
  -	{"${HOME:s/[eso]/_/g}", "/h_m_/r_gr___i_n-t__t_"},
  -	{"${HOME:s/[esO]/_/g}", "/hom_/r_gr___ion-t__t_"},
  -	{"${HOME:s/[esO]/_/gi}", "/h_m_/r_gr___i_n-t__t_"},
  -	{"${OSTYPE:s/^[re]/_/g}", "_egression-os"},
  -	{"${EMPTY:s/^[re]/_/g}", ""},
  -	{"${HOME:s/.*/heinz/}", "heinz"},
  -	{"${HOME:s/e/bla/t}", "/hombla/regression-tests"},
  -	{"${HOME:s/E/bla/t}", "/home/regression-tests"},
  -	{"${HOME:s/E/bla/ti}", "/hombla/regression-tests"},
  -	{"${HOME:s/E/bla/tig}", "/hombla/rblagrblassion-tblasts"},
  -	{"${HOME:o1-5}", "home/"},
  -	{"${HOME:o1,5}", "home"},
  -	{"${HOME:o5,}", "/regression-tests"},
  -	{"${HOME:o5-}", "/regression-tests"},
  -	{"${HOME:o7,13}", "egress"},
  -	{"${HOME:y/a-z/A-YZ/}", "/HOME/REGRESSION-TESTS"},
  -	{"${HOME:y/e-g/a-c/}", "/homa/racrassion-tasts"},
  -	{"${FOO:p/15/../l}", "os............."},
  -	{"${FOO:p/15/12345/l}", "os1234512345123"},
  -	{"${FOO:p/15/../r}", ".............os"},
  -	{"${FOO:p/15/12345/r}", "1234512345123os"},
  -	{"${FOO:p/15/../c}", "......os......."},
  -	{"${FOO:p/15/12345/c}", "123451os1234512"},
  -	{"${FOO:s/os/\\x{4F}\\123/g}", "OS"},
  -	{"${FOO:s/os/\\1\\x4F\\123/t}", "\\1OS"},
  -	{"${HOME:s/g(res)s/x\\1x/g}", "/home/rexresxion-tests"},
  -	{"${HOME:s/(s+)/_\\1_/g}", "/home/regre_ss_ion-te_s_t_s_"},
  -	{"${HOME:s/\\x65/\\x45/g}", "/homE/rEgrEssion-tEsts"},
  -	{"${HOME:s/(s*)/x\\1X/g}",
  -	 "xXxXxXxXxXxXxXxXxXxXxXxssXxXxXxXxXxXxXxsXxXxsX"},
  -	{"${HOME:s/./\\\\/g}",
  -	 "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"}
  +    {"$HOME", "/home/regression-tests"},
  +    {"${FOO}", "os"},
  +    {"${BAR}", "type"},
  +    {"${${FOO:u}${BAR:u}:l:u}", "REGRESSION-OS"},
  +    {"${UNDEFINED}", "${UNDEFINED}"},
  +    {"${OSTYPE:#}", "13"},
  +    {"${EMPTY:-test${FOO}test}", "testostest"},
  +    {"${EMPTY:-test${FOO:u}test}", "testOStest"},
  +    {"${TERM:-test${FOO}test}", "regression-term"},
  +    {"${EMPTY:+FOO}", ""},
  +    {"${HOME:+test${FOO}test}", "testostest"},
  +    {"${HOME:+${OS${BAR:u}}}", "regression-os"},
  +    {"${HOME:+OS${UNDEFINED:u}}", "OS${UNDEFINED:u}"},
  +    {"${UNDEFINED:+OS${BAR:u}}", "${UNDEFINED:+OS${BAR:u}}"},
  +    {"${HOME:*heinz}", ""},
  +    {"${EMPTY:*claus}", "claus"},
  +    {"${TERM}", "regression-term"},
  +    {"${HOME:s/reg/bla/}", "/home/blaression-tests"},
  +    {"${HOME:s/e/bla/}", "/hombla/regression-tests"},
  +    {"${HOME:s/e/bla/g}", "/hombla/rblagrblassion-tblasts"},
  +    {"${HOME:s/\\//_/g}", "_home_regression-tests"},
  +    {"${HOME:s/[eso]/_/g}", "/h_m_/r_gr___i_n-t__t_"},
  +    {"${HOME:s/[esO]/_/g}", "/hom_/r_gr___ion-t__t_"},
  +    {"${HOME:s/[esO]/_/gi}", "/h_m_/r_gr___i_n-t__t_"},
  +    {"${OSTYPE:s/^[re]/_/g}", "_egression-os"},
  +    {"${EMPTY:s/^[re]/_/g}", ""},
  +    {"${HOME:s/.*/heinz/}", "heinz"},
  +    {"${HOME:s/e/bla/t}", "/hombla/regression-tests"},
  +    {"${HOME:s/E/bla/t}", "/home/regression-tests"},
  +    {"${HOME:s/E/bla/ti}", "/hombla/regression-tests"},
  +    {"${HOME:s/E/bla/tig}", "/hombla/rblagrblassion-tblasts"},
  +    {"${HOME:o1-5}", "home/"},
  +    {"${HOME:o1,5}", "home"},
  +    {"${HOME:o5,}", "/regression-tests"},
  +    {"${HOME:o5-}", "/regression-tests"},
  +    {"${HOME:o7,13}", "egress"},
  +    {"${HOME:y/a-z/A-YZ/}", "/HOME/REGRESSION-TESTS"},
  +    {"${HOME:y/e-g/a-c/}", "/homa/racrassion-tasts"},
  +    {"${FOO:p/15/../l}", "os............."},
  +    {"${FOO:p/15/12345/l}", "os1234512345123"},
  +    {"${FOO:p/15/../r}", ".............os"},
  +    {"${FOO:p/15/12345/r}", "1234512345123os"},
  +    {"${FOO:p/15/../c}", "......os......."},
  +    {"${FOO:p/15/12345/c}", "123451os1234512"},
  +    {"${FOO:s/os/\\x{4F}\\123/g}", "OS"},
  +    {"${FOO:s/os/\\1\\x4F\\123/t}", "\\1OS"},
  +    {"${HOME:s/g(res)s/x\\1x/g}", "/home/rexresxion-tests"},
  +    {"${HOME:s/(s+)/_\\1_/g}", "/home/regre_ss_ion-te_s_t_s_"},
  +    {"${HOME:s/\\x65/\\x45/g}", "/homE/rEgrEssion-tEsts"},
  +    {"${HOME:s/(s*)/x\\1X/g}",
  +     "xXxXxXxXxXxXxXxXxXxXxXxssXxXxXxXxXxXxXxsXxXxsX"},
  +    {"${HOME:s/./\\\\/g}",
  +     "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"}
       };
       char *tmp;
       size_t tmp_len;
  @@ -95,49 +95,49 @@
       char buffer[1024];
   
       if (setenv("HOME", "/home/regression-tests", 1) != 0 ||
  -	setenv("OSTYPE", "regression-os", 1) != 0 ||
  -	setenv("TERM", "regression-term", 1) != 0 ||
  -	setenv("FOO", "os", 1) != 0 ||
  -	setenv("BAR", "type", 1) != 0 || setenv("EMPTY", "", 1) != 0) {
  -	printf("Failed to set the environment: %s.\n", strerror(errno));
  -	return 1;
  +    setenv("OSTYPE", "regression-os", 1) != 0 ||
  +    setenv("TERM", "regression-term", 1) != 0 ||
  +    setenv("FOO", "os", 1) != 0 ||
  +    setenv("BAR", "type", 1) != 0 || setenv("EMPTY", "", 1) != 0) {
  +    printf("Failed to set the environment: %s.\n", strerror(errno));
  +    return 1;
       }
       unsetenv("UNDEFINED");
   
       for (i = 0; i < sizeof(tests) / sizeof(struct test_case); ++i) {
   #ifdef DEBUG
  -	printf("Test case #%02d: Original input is '%s'.\n", i,
  -	       tests[i].input);
  +    printf("Test case #%02d: Original input is '%s'.\n", i,
  +           tests[i].input);
   #endif
  -	rc = var_unescape(tests[i].input, strlen(tests[i].input), buffer,
  -			  0);
  -	if (rc != VAR_OK) {
  -	    printf
  -		("Test case #%d: First var_unescape() failed with return code %d.\n",
  -		 i, rc);
  -	    return 1;
  -	}
  +    rc = var_unescape(tests[i].input, strlen(tests[i].input), buffer,
  +              0);
  +    if (rc != VAR_OK) {
  +        printf
  +        ("Test case #%d: First var_unescape() failed with return code %d.\n",
  +         i, rc);
  +        return 1;
  +    }
   #ifdef DEBUG
  -	printf("Test case #%02d: Unescaped input is '%s'.\n", i, buffer);
  +    printf("Test case #%02d: Unescaped input is '%s'.\n", i, buffer);
   #endif
  -	rc = var_expand(buffer, strlen(buffer), &tmp, &tmp_len,
  -			&env_lookup, NULL, NULL, 0);
  -	if (rc != VAR_OK) {
  -	    printf
  -		("Test case #%d: var_expand() failed with return code %d.\n",
  -		 i, rc);
  -	    return 1;
  -	}
  +    rc = var_expand(buffer, strlen(buffer), &tmp, &tmp_len,
  +            &env_lookup, NULL, NULL, 0);
  +    if (rc != VAR_OK) {
  +        printf
  +        ("Test case #%d: var_expand() failed with return code %d.\n",
  +         i, rc);
  +        return 1;
  +    }
   #ifdef DEBUG
  -	printf("Test case #%02d: Expanded output is '%s'.\n", i, tmp);
  +    printf("Test case #%02d: Expanded output is '%s'.\n", i, tmp);
   #endif
  -	if (tmp_len != strlen(tests[i].expected) || tmp == NULL
  -	    || memcmp(tests[i].expected, tmp, tmp_len) != 0) {
  -	    printf("Test case #%d: Expected result '%s' but got '%s'.\n",
  -		   i, tests[i].expected, tmp);
  -	    return 1;
  -	}
  -	free(tmp);
  +    if (tmp_len != strlen(tests[i].expected) || tmp == NULL
  +        || memcmp(tests[i].expected, tmp, tmp_len) != 0) {
  +        printf("Test case #%d: Expected result '%s' but got '%s'.\n",
  +           i, tests[i].expected, tmp);
  +        return 1;
  +    }
  +    free(tmp);
       }
   
       return 0;

From ossp-cvs-owner@ossp.org  Wed Nov 14 12:04:14 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAEB4Cb82113; Wed, 14 Nov 2001 12:04:12 +0100 (CET)
Date: Wed, 14 Nov 2001 12:04:12 +0100 (CET)
Message-Id: <200111141104.fAEB4Cb82113@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   14-Nov-2001 12:04:12
  Branch: HEAD                             Handle: 2001111411041200

  Modified files:
    ossp-pkg/var            var.h

  Log:
    Removed tabs, fixed readability.

  Summary:
    Revision    Changes     Path
    1.6         +13 -13     ossp-pkg/var/var.h
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.h
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 var.h
  --- ossp-pkg/var/var.h	2001/11/13 14:42:57	1.5
  +++ ossp-pkg/var/var.h	2001/11/14 11:04:12	1.6
  @@ -88,7 +88,7 @@
   */
   
   var_rc_t var_unescape(const char *src, size_t len, char *dst,
  -		      int unescape_all);
  +    int unescape_all);
   
   /*
      The callback will be called by variable_expand(), providing the
  @@ -115,9 +115,9 @@
   */
   
   typedef int (*var_cb_t) (void *context,
  -			 const char *varname, size_t name_len,
  -			 const char **data, size_t * data_len,
  -			 size_t * buffer_size);
  +    const char *varname, size_t name_len,
  +    const char **data, size_t * data_len,
  +    size_t * buffer_size);
   
   /*
      This structure configures the parser's specials. I think, the fields
  @@ -132,11 +132,11 @@
   */
   
   typedef struct {
  -    char varinit;		/* '$' */
  -    char startdelim;		/* '{' */
  -    char enddelim;		/* '}' */
  -    char escape;		/* '\' */
  -    char *namechars;		/* 'a-zA-Z0-9_' */
  +    char varinit;        /* '$' */
  +    char startdelim;     /* '{' */
  +    char enddelim;       /* '}' */
  +    char escape;         /* '\' */
  +    char *namechars;     /* 'a-zA-Z0-9_' */
   } var_config_t;
   extern const var_config_t var_config_default;
   
  @@ -150,8 +150,8 @@
   */
   
   var_rc_t var_expand(const char *input, size_t input_len,
  -		    char **result, size_t * result_len,
  -		    var_cb_t lookup, void *lookup_context,
  -		    const var_config_t * config, int force_expand);
  +    char **result, size_t * result_len,
  +    var_cb_t lookup, void *lookup_context,
  +    const var_config_t * config, int force_expand);
   
  -#endif				/* !defined(LIB_OSSP_VAR_H) */
  +#endif                /* !defined(LIB_OSSP_VAR_H) */

From ossp-cvs-owner@ossp.org  Wed Nov 14 12:11:04 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fAEBB2B83140; Wed, 14 Nov 2001 12:11:02 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 5CF7A4CE537; Wed, 14 Nov 2001 12:11:02 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c var.h var_test.c
Message-Id: <20011114111102.5CF7A4CE537@visp.engelschall.com>
Date: Wed, 14 Nov 2001 12:11:02 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   14-Nov-2001 12:11:02
  Branch: HEAD                             Handle: 2001111411110100

  Modified files:
    ossp-pkg/var            var.c var.h var_test.c

  Log:
    Rename the return codes VAR_XXX to VAR_ERR_XXX (except for VAR_OK)
    to be consistent with other OSSP libraries like L2.

  Summary:
    Revision    Changes     Path
    1.14        +87 -87     ossp-pkg/var/var.c
    1.7         +39 -38     ossp-pkg/var/var.h
    1.9         +1  -1      ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 var.c
  --- ossp-pkg/var/var.c	2001/11/14 09:47:02	1.13
  +++ ossp-pkg/var/var.c	2001/11/14 11:11:01	1.14
  @@ -187,7 +187,7 @@
       while (*desc != '\0') {
           if (desc[1] == '-' && desc[2] != '\0') {
               if (desc[0] > desc[2])
  -                return VAR_INCORRECT_CLASS_SPEC;
  +                return VAR_ERR_INCORRECT_CLASS_SPEC;
               expand_range(desc[0], desc[2], class);
               desc += 3;
           } else {
  @@ -212,13 +212,13 @@
       unsigned char c;
   
       if (end - *src < 3)
  -        return VAR_INCOMPLETE_OCTAL;
  +        return VAR_ERR_INCOMPLETE_OCTAL;
       if (!isoct(**src) || !isoct((*src)[1]) || !isoct((*src)[2]))
  -        return VAR_INVALID_OCTAL;
  +        return VAR_ERR_INVALID_OCTAL;
   
       c = **src - '0';
       if (c > 3)
  -        return VAR_OCTAL_TOO_LARGE;
  +        return VAR_ERR_OCTAL_TOO_LARGE;
       c *= 8;
       ++(*src);
   
  @@ -248,9 +248,9 @@
       unsigned char c = 0;
   
       if (end - *src < 2)
  -        return VAR_INCOMPLETE_HEX;
  +        return VAR_ERR_INCOMPLETE_HEX;
       if (!ishex(**src) || !ishex((*src)[1]))
  -        return VAR_INVALID_HEX;
  +        return VAR_ERR_INVALID_HEX;
   
       if (**src >= '0' && **src <= '9')
           c = **src - '0';
  @@ -285,7 +285,7 @@
           ++(*src);
       }
       if (*src == end)
  -        return VAR_INCOMPLETE_GROUPED_HEX;
  +        return VAR_ERR_INCOMPLETE_GROUPED_HEX;
   
       return VAR_OK;
   }
  @@ -293,7 +293,7 @@
   static var_rc_t expand_hex(const char **src, char **dst, const char *end)
   {
       if (*src == end)
  -        return VAR_INCOMPLETE_HEX;
  +        return VAR_ERR_INCOMPLETE_HEX;
       if (**src == '{') {
           ++(*src);
           return expand_grouped_hex(src, dst, end);
  @@ -310,7 +310,7 @@
       while (src < end) {
           if (*src == '\\') {
               if (++src == end)
  -                return VAR_INCOMPLETE_NAMED_CHARACTER;
  +                return VAR_ERR_INCOMPLETE_NAMED_CHARACTER;
               switch (*src) {
               case '\\':
                   if (!unescape_all) {
  @@ -375,7 +375,7 @@
       for (p = begin; p != end && *p != varinit; ++p) {
           if (*p == escape) {
               if (p + 1 == end)
  -                return VAR_INCOMPLETE_QUOTED_PAIR;
  +                return VAR_ERR_INCOMPLETE_QUOTED_PAIR;
               else
                   ++p;
           }
  @@ -405,7 +405,7 @@
       for (p = begin; p != end && *p != config->varinit && *p != '/'; ++p) {
           if (*p == config->escape) {
               if (p + 1 == end)
  -                return VAR_INCOMPLETE_QUOTED_PAIR;
  +                return VAR_ERR_INCOMPLETE_QUOTED_PAIR;
               else
                   ++p;
           }
  @@ -422,7 +422,7 @@
            && *p != ':'; ++p) {
           if (*p == config->escape) {
               if (p + 1 == end)
  -                return VAR_INCOMPLETE_QUOTED_PAIR;
  +                return VAR_ERR_INCOMPLETE_QUOTED_PAIR;
               else
                   ++p;
           }
  @@ -457,7 +457,7 @@
           return 0;
   
       if (++p == end)
  -        return VAR_INCOMPLETE_VARIABLE_SPEC;
  +        return VAR_ERR_INCOMPLETE_VARIABLE_SPEC;
   
       /* Get the name of the variable to expand. The name may consist of
          an arbitrary number of VARNAMEs and VARIABLEs. */
  @@ -468,7 +468,7 @@
               goto error_return;
           else if (rc > 0) {
               if (!tokenbuf_append(&name, p, rc)) {
  -                rc = VAR_OUT_OF_MEMORY;
  +                rc = VAR_ERR_OUT_OF_MEMORY;
                   goto error_return;
               } else
                   p += rc;
  @@ -480,7 +480,7 @@
               goto error_return;
           else if (rc > 0) {
               if (!tokenbuf_append(&name, tmp.begin, tmp.end - tmp.begin)) {
  -                rc = VAR_OUT_OF_MEMORY;
  +                rc = VAR_ERR_OUT_OF_MEMORY;
                   goto error_return;
               } else
                   p += rc;
  @@ -492,7 +492,7 @@
          do. */
   
       if (name.begin == name.end) {
  -        rc = VAR_INCOMPLETE_VARIABLE_SPEC;
  +        rc = VAR_ERR_INCOMPLETE_VARIABLE_SPEC;
           goto error_return;
       }
   
  @@ -500,7 +500,7 @@
          expect an ENDDELIM here. */
   
       if (p == end || (*p != config->enddelim && *p != ':')) {
  -        rc = VAR_INCOMPLETE_VARIABLE_SPEC;
  +        rc = VAR_ERR_INCOMPLETE_VARIABLE_SPEC;
           goto error_return;
       } else
           ++p;
  @@ -516,7 +516,7 @@
              force_expand flag. */
   
           if (force_expand) {
  -            rc = VAR_UNDEFINED_VARIABLE;
  +            rc = VAR_ERR_UNDEFINED_VARIABLE;
               goto error_return;
           } else {
               /* Initialize result to point back to the original text in
  @@ -557,7 +557,7 @@
           }
   
           if (p == end || *p != config->enddelim) {
  -            rc = VAR_INCOMPLETE_VARIABLE_SPEC;
  +            rc = VAR_ERR_INCOMPLETE_VARIABLE_SPEC;
               goto error_return;
           }
           ++p;
  @@ -601,7 +601,7 @@
           return 0;
   
       if (++p == end)
  -        return VAR_INCOMPLETE_VARIABLE_SPEC;
  +        return VAR_ERR_INCOMPLETE_VARIABLE_SPEC;
   
       /* Try to read the variable name. If that fails, we're parsing a
          complex expression. */
  @@ -615,7 +615,7 @@
               return rc2;
           else if (rc2 == 0) {
               if (force_expand)
  -                return VAR_UNDEFINED_VARIABLE;
  +                return VAR_ERR_UNDEFINED_VARIABLE;
               else {
                   result->begin = begin;
                   result->end = begin + 1 + rc;
  @@ -661,7 +661,7 @@
               goto error_return;
           else if (rc > 0) {
               if (!tokenbuf_append(result, p, rc)) {
  -                rc = VAR_OUT_OF_MEMORY;
  +                rc = VAR_ERR_OUT_OF_MEMORY;
                   goto error_return;
               } else
                   p += rc;
  @@ -675,7 +675,7 @@
               p += rc;
               if (!tokenbuf_append
                   (result, tmp.begin, tmp.end - tmp.begin)) {
  -                rc = VAR_OUT_OF_MEMORY;
  +                rc = VAR_ERR_OUT_OF_MEMORY;
                   goto error_return;
               }
           }
  @@ -713,7 +713,7 @@
               goto error_return;
           else if (rc > 0) {
               if (!tokenbuf_append(result, p, rc)) {
  -                rc = VAR_OUT_OF_MEMORY;
  +                rc = VAR_ERR_OUT_OF_MEMORY;
                   goto error_return;
               } else
                   p += rc;
  @@ -727,7 +727,7 @@
               p += rc;
               if (!tokenbuf_append
                   (result, tmp.begin, tmp.end - tmp.begin)) {
  -                rc = VAR_OUT_OF_MEMORY;
  +                rc = VAR_ERR_OUT_OF_MEMORY;
                   goto error_return;
               }
           }
  @@ -751,15 +751,15 @@
       while (p != src->end) {
           if ((src->end - p) >= 3 && p[1] == '-') {
               if (*p > p[2])
  -                return VAR_INCORRECT_TRANSPOSE_CLASS_SPEC;
  +                return VAR_ERR_INCORRECT_TRANSPOSE_CLASS_SPEC;
               for (c = *p, d = p[2]; c <= d; ++c) {
                   if (!tokenbuf_append(dst, (char *) &c, 1))
  -                    return VAR_OUT_OF_MEMORY;
  +                    return VAR_ERR_OUT_OF_MEMORY;
               }
               p += 3;
           } else {
               if (!tokenbuf_append(dst, p, 1))
  -                return VAR_OUT_OF_MEMORY;
  +                return VAR_ERR_OUT_OF_MEMORY;
               else
                   ++p;
           }
  @@ -784,11 +784,11 @@
           goto error_return;
   
       if (srcclass.begin == srcclass.end) {
  -        rc = VAR_EMPTY_TRANSPOSE_CLASS;
  +        rc = VAR_ERR_EMPTY_TRANSPOSE_CLASS;
           goto error_return;
       }
       if ((srcclass.end - srcclass.begin) != (dstclass.end - dstclass.begin)) {
  -        rc = VAR_TRANSPOSE_CLASSES_MISMATCH;
  +        rc = VAR_ERR_TRANSPOSE_CLASSES_MISMATCH;
           goto error_return;
       }
   
  @@ -796,7 +796,7 @@
           tokenbuf_t tmp;
           if (!tokenbuf_assign
               (&tmp, data->begin, data->end - data->begin)) {
  -            rc = VAR_OUT_OF_MEMORY;
  +            rc = VAR_ERR_OUT_OF_MEMORY;
               goto error_return;
           }
           tokenbuf_move(&tmp, data);
  @@ -834,7 +834,7 @@
       /* Determine begin of result string. */
   
       if ((data->end - data->begin) < num1)
  -        return VAR_OFFSET_OUT_OF_BOUNDS;
  +        return VAR_ERR_OFFSET_OUT_OF_BOUNDS;
       else
           p = data->begin + num1;
   
  @@ -842,21 +842,21 @@
   
       if (num2 == 0) {
           if (!tokenbuf_assign(&res, p, data->end - p))
  -            return VAR_OUT_OF_MEMORY;
  +            return VAR_ERR_OUT_OF_MEMORY;
       } else {                    /* OK, then use num2. */
   
           if (isrange) {
               if ((p + num2) > data->end)
  -                return VAR_RANGE_OUT_OF_BOUNDS;
  +                return VAR_ERR_RANGE_OUT_OF_BOUNDS;
               if (!tokenbuf_assign(&res, p, num2))
  -                return VAR_OUT_OF_MEMORY;
  +                return VAR_ERR_OUT_OF_MEMORY;
           } else {
               if (num2 < num1)
  -                return VAR_OFFSET_LOGIC_ERROR;
  +                return VAR_ERR_OFFSET_LOGIC;
               if ((data->begin + num2) > data->end)
  -                return VAR_RANGE_OUT_OF_BOUNDS;
  +                return VAR_ERR_RANGE_OUT_OF_BOUNDS;
               if (!tokenbuf_assign(&res, p, (data->begin + num2) - p))
  -                return VAR_OUT_OF_MEMORY;
  +                return VAR_ERR_OUT_OF_MEMORY;
           }
       }
       tokenbuf_free(data);
  @@ -876,36 +876,36 @@
           if (*p == '\\') {
               if (orig->end - p <= 1) {
                   tokenbuf_free(expanded);
  -                return VAR_INCOMPLETE_QUOTED_PAIR;
  +                return VAR_ERR_INCOMPLETE_QUOTED_PAIR;
               } else
                   ++p;
               if (*p == '\\') {
                   if (!tokenbuf_append(expanded, p, 1)) {
                       tokenbuf_free(expanded);
  -                    return VAR_OUT_OF_MEMORY;
  +                    return VAR_ERR_OUT_OF_MEMORY;
                   }
                   ++p;
                   continue;
               }
               if (!isdigit((int)*p)) {
                   tokenbuf_free(expanded);
  -                return VAR_UNKNOWN_QUOTED_PAIR_IN_REPLACE;
  +                return VAR_ERR_UNKNOWN_QUOTED_PAIR_IN_REPLACE;
               }
               i = *p - '0';
               ++p;
               if (pmatch[i].rm_so == -1) {
                   tokenbuf_free(expanded);
  -                return VAR_SUBMATCH_OUT_OF_RANGE;
  +                return VAR_ERR_SUBMATCH_OUT_OF_RANGE;
               }
               if (!tokenbuf_append(expanded, data + pmatch[i].rm_so,
                                       pmatch[i].rm_eo - pmatch[i].rm_so)) {
                   tokenbuf_free(expanded);
  -                return VAR_OUT_OF_MEMORY;
  +                return VAR_ERR_OUT_OF_MEMORY;
               }
           } else {
               if (!tokenbuf_append(expanded, p, 1)) {
                   tokenbuf_free(expanded);
  -                return VAR_OUT_OF_MEMORY;
  +                return VAR_ERR_OUT_OF_MEMORY;
               }
               ++p;
           }
  @@ -924,7 +924,7 @@
       int rc;
   
       if (search->begin == search->end)
  -        return VAR_EMPTY_SEARCH_STRING;
  +        return VAR_ERR_EMPTY_SEARCH_STRING;
   
       for (p = flags->begin; p != flags->end; ++p) {
           switch (tolower(*p)) {
  @@ -938,7 +938,7 @@
               no_regex = 1;
               break;
           default:
  -            return VAR_UNKNOWN_REPLACE_FLAG;
  +            return VAR_ERR_UNKNOWN_REPLACE_FLAG;
           }
       }
   
  @@ -956,7 +956,7 @@
               if (rc != 0) {      /* no match, copy character */
                   if (!tokenbuf_append(&tmp, p, 1)) {
                       tokenbuf_free(&tmp);
  -                    return VAR_OUT_OF_MEMORY;
  +                    return VAR_ERR_OUT_OF_MEMORY;
                   }
                   ++p;
               } else {
  @@ -966,7 +966,7 @@
                   if (!global) {
                       if (!tokenbuf_append(&tmp, p, data->end - p)) {
                           tokenbuf_free(&tmp);
  -                        return VAR_OUT_OF_MEMORY;
  +                        return VAR_ERR_OUT_OF_MEMORY;
                       }
                       break;
                   }
  @@ -988,11 +988,11 @@
   
           if (!tokenbuf_assign
               (&tmp, search->begin, search->end - search->begin))
  -            return VAR_OUT_OF_MEMORY;
  +            return VAR_ERR_OUT_OF_MEMORY;
           if (!tokenbuf_assign
               (&mydata, data->begin, data->end - data->begin)) {
               tokenbuf_free(&tmp);
  -            return VAR_OUT_OF_MEMORY;
  +            return VAR_ERR_OUT_OF_MEMORY;
           }
   
           /* Compile the pattern. */
  @@ -1002,7 +1002,7 @@
           tokenbuf_free(&tmp);
           if (rc != 0) {
               tokenbuf_free(&mydata);
  -            return VAR_INVALID_REGEX_IN_REPLACE;
  +            return VAR_ERR_INVALID_REGEX_IN_REPLACE;
           }
   
           /* Match the pattern and create the result string in the tmp
  @@ -1033,7 +1033,7 @@
                       tokenbuf_free(&tmp);
                       tokenbuf_free(&mydata);
                       tokenbuf_free(&myreplace);
  -                    return VAR_OUT_OF_MEMORY;
  +                    return VAR_ERR_OUT_OF_MEMORY;
                   } else {
                       p += (pmatch[0].rm_eo > 0) ? pmatch[0].rm_eo : 1;
                       tokenbuf_free(&myreplace);
  @@ -1062,7 +1062,7 @@
       int i;
   
       if (fill->begin == fill->end)
  -        return VAR_EMPTY_PADDING_FILL_STRING;
  +        return VAR_ERR_EMPTY_PADDING_FILL_STRING;
   
       tokenbuf_init(&result);
   
  @@ -1073,13 +1073,13 @@
               while (i > 0) {
                   if (!tokenbuf_append
                       (data, fill->begin, fill->end - fill->begin))
  -                    return VAR_OUT_OF_MEMORY;
  +                    return VAR_ERR_OUT_OF_MEMORY;
                   --i;
               }
               i = (width - (data->end - data->begin)) % (fill->end -
                                                          fill->begin);
               if (!tokenbuf_append(data, fill->begin, i))
  -                return VAR_OUT_OF_MEMORY;
  +                return VAR_ERR_OUT_OF_MEMORY;
           }
       } else if (position == 'r') {
           i = width - (data->end - data->begin);
  @@ -1089,7 +1089,7 @@
                   if (!tokenbuf_append
                       (&result, fill->begin, fill->end - fill->begin)) {
                       tokenbuf_free(&result);
  -                    return VAR_OUT_OF_MEMORY;
  +                    return VAR_ERR_OUT_OF_MEMORY;
                   }
                   --i;
               }
  @@ -1097,12 +1097,12 @@
                                                          fill->begin);
               if (!tokenbuf_append(&result, fill->begin, i)) {
                   tokenbuf_free(&result);
  -                return VAR_OUT_OF_MEMORY;
  +                return VAR_ERR_OUT_OF_MEMORY;
               }
               if (!tokenbuf_append
                   (&result, data->begin, data->end - data->begin)) {
                   tokenbuf_free(&result);
  -                return VAR_OUT_OF_MEMORY;
  +                return VAR_ERR_OUT_OF_MEMORY;
               }
   
               tokenbuf_free(data);
  @@ -1118,7 +1118,7 @@
                   if (!tokenbuf_append
                       (&result, fill->begin, fill->end - fill->begin)) {
                       tokenbuf_free(&result);
  -                    return VAR_OUT_OF_MEMORY;
  +                    return VAR_ERR_OUT_OF_MEMORY;
                   }
                   --i;
               }
  @@ -1126,7 +1126,7 @@
                                                                fill->begin);
               if (!tokenbuf_append(&result, fill->begin, i)) {
                   tokenbuf_free(&result);
  -                return VAR_OUT_OF_MEMORY;
  +                return VAR_ERR_OUT_OF_MEMORY;
               }
   
               /* Append the actual data string. */
  @@ -1134,7 +1134,7 @@
               if (!tokenbuf_append
                   (&result, data->begin, data->end - data->begin)) {
                   tokenbuf_free(&result);
  -                return VAR_OUT_OF_MEMORY;
  +                return VAR_ERR_OUT_OF_MEMORY;
               }
   
               /* Append the suffix. */
  @@ -1145,14 +1145,14 @@
                   if (!tokenbuf_append
                       (&result, fill->begin, fill->end - fill->begin)) {
                       tokenbuf_free(&result);
  -                    return VAR_OUT_OF_MEMORY;
  +                    return VAR_ERR_OUT_OF_MEMORY;
                   }
                   --i;
               }
               i = width - (result.end - result.begin);
               if (!tokenbuf_append(&result, fill->begin, i)) {
                   tokenbuf_free(&result);
  -                return VAR_OUT_OF_MEMORY;
  +                return VAR_ERR_OUT_OF_MEMORY;
               }
   
               /* Move string from temporary buffer to data buffer. */
  @@ -1197,7 +1197,7 @@
               if (data->buffer_size == 0) {
                   if (!tokenbuf_assign
                       (data, data->begin, data->end - data->begin)) {
  -                    rc = VAR_OUT_OF_MEMORY;
  +                    rc = VAR_ERR_OUT_OF_MEMORY;
                       goto error_return;
                   }
               }
  @@ -1213,7 +1213,7 @@
               if (data->buffer_size == 0) {
                   if (!tokenbuf_assign
                       (data, data->begin, data->end - data->begin)) {
  -                    rc = VAR_OUT_OF_MEMORY;
  +                    rc = VAR_ERR_OUT_OF_MEMORY;
                       goto error_return;
                   }
               }
  @@ -1227,7 +1227,7 @@
           ++p;
           rc = number(p, end);
           if (rc == 0) {
  -            rc = VAR_MISSING_START_OFFSET;
  +            rc = VAR_ERR_MISSING_START_OFFSET;
               goto error_return;
           } else {
               number1.begin = p;
  @@ -1243,7 +1243,7 @@
               isrange = 1;
               ++p;
           } else {
  -            rc = VAR_INVALID_OFFSET_DELIMITER;
  +            rc = VAR_ERR_INVALID_OFFSET_DELIMITER;
               goto error_return;
           }
   
  @@ -1265,7 +1265,7 @@
               sprintf(buf, "%d", data->end - data->begin);
               tokenbuf_free(data);
               if (!tokenbuf_assign(data, buf, strlen(buf))) {
  -                rc = VAR_OUT_OF_MEMORY;
  +                rc = VAR_ERR_OUT_OF_MEMORY;
                   goto error_return;
               }
           }
  @@ -1279,7 +1279,7 @@
           if (rc < 0)
               goto error_return;
           else if (rc == 0) {
  -            rc = VAR_MISSING_PARAMETER_IN_COMMAND;
  +            rc = VAR_ERR_MISSING_PARAMETER_IN_COMMAND;
               goto error_return;
           } else
               p += rc;
  @@ -1296,7 +1296,7 @@
           if (rc < 0)
               goto error_return;
           else if (rc == 0) {
  -            rc = VAR_MISSING_PARAMETER_IN_COMMAND;
  +            rc = VAR_ERR_MISSING_PARAMETER_IN_COMMAND;
               goto error_return;
           } else
               p += rc;
  @@ -1319,7 +1319,7 @@
           if (rc < 0)
               goto error_return;
           else if (rc == 0) {
  -            rc = VAR_MISSING_PARAMETER_IN_COMMAND;
  +            rc = VAR_ERR_MISSING_PARAMETER_IN_COMMAND;
               goto error_return;
           } else
               p += rc;
  @@ -1335,7 +1335,7 @@
           ++p;
   
           if (*p != '/')
  -            return VAR_MALFORMATTED_REPLACE;
  +            return VAR_ERR_MALFORMATTED_REPLACE;
           else
               ++p;
   
  @@ -1347,7 +1347,7 @@
               p += rc;
   
           if (*p != '/') {
  -            rc = VAR_MALFORMATTED_REPLACE;
  +            rc = VAR_ERR_MALFORMATTED_REPLACE;
               goto error_return;
           } else
               ++p;
  @@ -1360,7 +1360,7 @@
               p += rc;
   
           if (*p != '/') {
  -            rc = VAR_MALFORMATTED_REPLACE;
  +            rc = VAR_ERR_MALFORMATTED_REPLACE;
               goto error_return;
           } else
               ++p;
  @@ -1386,7 +1386,7 @@
           ++p;
   
           if (*p != '/')
  -            return VAR_MALFORMATTED_TRANSPOSE;
  +            return VAR_ERR_MALFORMATTED_TRANSPOSE;
           else
               ++p;
   
  @@ -1398,7 +1398,7 @@
               p += rc;
   
           if (*p != '/') {
  -            rc = VAR_MALFORMATTED_TRANSPOSE;
  +            rc = VAR_ERR_MALFORMATTED_TRANSPOSE;
               goto error_return;
           } else
               ++p;
  @@ -1411,7 +1411,7 @@
               p += rc;
   
           if (*p != '/') {
  -            rc = VAR_MALFORMATTED_TRANSPOSE;
  +            rc = VAR_ERR_MALFORMATTED_TRANSPOSE;
               goto error_return;
           } else
               ++p;
  @@ -1428,13 +1428,13 @@
           ++p;
   
           if (*p != '/')
  -            return VAR_MALFORMATTED_PADDING;
  +            return VAR_ERR_MALFORMATTED_PADDING;
           else
               ++p;
   
           rc = number(p, end);
           if (rc == 0) {
  -            rc = VAR_MISSING_PADDING_WIDTH;
  +            rc = VAR_ERR_MISSING_PADDING_WIDTH;
               goto error_return;
           } else {
               number1.begin = p;
  @@ -1444,7 +1444,7 @@
           }
   
           if (*p != '/') {
  -            rc = VAR_MALFORMATTED_PADDING;
  +            rc = VAR_ERR_MALFORMATTED_PADDING;
               goto error_return;
           } else
               ++p;
  @@ -1457,13 +1457,13 @@
               p += rc;
   
           if (*p != '/') {
  -            rc = VAR_MALFORMATTED_PADDING;
  +            rc = VAR_ERR_MALFORMATTED_PADDING;
               goto error_return;
           } else
               ++p;
   
           if (*p != 'l' && *p != 'c' && *p != 'r') {
  -            rc = VAR_MALFORMATTED_PADDING;
  +            rc = VAR_ERR_MALFORMATTED_PADDING;
               goto error_return;
           } else
               ++p;
  @@ -1476,7 +1476,7 @@
           break;
   
       default:
  -        return VAR_UNKNOWN_COMMAND_CHAR;
  +        return VAR_ERR_UNKNOWN_COMMAND_CHAR;
       }
   
       /* Exit gracefully. */
  @@ -1515,7 +1515,7 @@
           rc = text(begin, end, config->varinit, config->escape);
           if (rc > 0) {
               if (!tokenbuf_append(output, begin, rc)) {
  -                rc = VAR_OUT_OF_MEMORY;
  +                rc = VAR_ERR_OUT_OF_MEMORY;
                   goto error_return;
               }
               begin += rc;
  @@ -1527,7 +1527,7 @@
           if (rc > 0) {
               if (!tokenbuf_append
                   (output, result.begin, result.end - result.begin)) {
  -                rc = VAR_OUT_OF_MEMORY;
  +                rc = VAR_ERR_OUT_OF_MEMORY;
                   goto error_return;
               } else
                   begin += rc;
  @@ -1537,7 +1537,7 @@
       while (rc > 0);
   
       if (begin != end) {
  -        rc = VAR_INPUT_ISNT_TEXT_NOR_VARIABLE;
  +        rc = VAR_ERR_INPUT_ISNT_TEXT_NOR_VARIABLE;
           goto error_return;
       }
   
  @@ -1572,7 +1572,7 @@
           nameclass[(int) config->startdelim] ||
           nameclass[(int) config->enddelim] ||
           nameclass[(int) config->escape])
  -        return VAR_INVALID_CONFIGURATION;
  +        return VAR_ERR_INVALID_CONFIGURATION;
   
       /* Call the parser. */
   
  Index: ossp-pkg/var/var.h
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 var.h
  --- ossp-pkg/var/var.h	2001/11/14 11:04:12	1.6
  +++ ossp-pkg/var/var.h	2001/11/14 11:11:01	1.7
  @@ -27,49 +27,49 @@
   **  var.h: VAR library API
   */
   
  -#ifndef LIB_OSSP_VAR_H
  -#define LIB_OSSP_VAR_H
  +#ifndef __VAR_H__
  +#define __VAR_H__
   
   #include <stdlib.h>
   
   /* Error codes returned by the varexp library. */
   
   typedef enum {
  -    VAR_CALLBACK_ERROR = -64,
  -    VAR_SUBMATCH_OUT_OF_RANGE = -34,
  -    VAR_UNKNOWN_QUOTED_PAIR_IN_REPLACE = -33,
  -    VAR_EMPTY_PADDING_FILL_STRING = -32,
  -    VAR_MISSING_PADDING_WIDTH = -31,
  -    VAR_MALFORMATTED_PADDING = -30,
  -    VAR_INCORRECT_TRANSPOSE_CLASS_SPEC = -29,
  -    VAR_EMPTY_TRANSPOSE_CLASS = -28,
  -    VAR_TRANSPOSE_CLASSES_MISMATCH = -27,
  -    VAR_MALFORMATTED_TRANSPOSE = -26,
  -    VAR_OFFSET_LOGIC_ERROR = -25,
  -    VAR_OFFSET_OUT_OF_BOUNDS = -24,
  -    VAR_RANGE_OUT_OF_BOUNDS = -23,
  -    VAR_INVALID_OFFSET_DELIMITER = -22,
  -    VAR_MISSING_START_OFFSET = -21,
  -    VAR_EMPTY_SEARCH_STRING = -20,
  -    VAR_MISSING_PARAMETER_IN_COMMAND = -19,
  -    VAR_INVALID_REGEX_IN_REPLACE = -18,
  -    VAR_UNKNOWN_REPLACE_FLAG = -17,
  -    VAR_MALFORMATTED_REPLACE = -16,
  -    VAR_UNKNOWN_COMMAND_CHAR = -14,
  -    VAR_INPUT_ISNT_TEXT_NOR_VARIABLE = -13,
  -    VAR_UNDEFINED_VARIABLE = -12,
  -    VAR_INCOMPLETE_VARIABLE_SPEC = -11,
  -    VAR_OUT_OF_MEMORY = -10,
  -    VAR_INVALID_CONFIGURATION = -9,
  -    VAR_INCORRECT_CLASS_SPEC = -8,
  -    VAR_INCOMPLETE_GROUPED_HEX = -7,
  -    VAR_INCOMPLETE_OCTAL = -6,
  -    VAR_INVALID_OCTAL = -5,
  -    VAR_OCTAL_TOO_LARGE = -4,
  -    VAR_INVALID_HEX = -3,
  -    VAR_INCOMPLETE_HEX = -2,
  -    VAR_INCOMPLETE_NAMED_CHARACTER = -1,
  -    VAR_INCOMPLETE_QUOTED_PAIR = -1,
  +    VAR_ERR_CALLBACK = -64,
  +    VAR_ERR_SUBMATCH_OUT_OF_RANGE = -34,
  +    VAR_ERR_UNKNOWN_QUOTED_PAIR_IN_REPLACE = -33,
  +    VAR_ERR_EMPTY_PADDING_FILL_STRING = -32,
  +    VAR_ERR_MISSING_PADDING_WIDTH = -31,
  +    VAR_ERR_MALFORMATTED_PADDING = -30,
  +    VAR_ERR_INCORRECT_TRANSPOSE_CLASS_SPEC = -29,
  +    VAR_ERR_EMPTY_TRANSPOSE_CLASS = -28,
  +    VAR_ERR_TRANSPOSE_CLASSES_MISMATCH = -27,
  +    VAR_ERR_MALFORMATTED_TRANSPOSE = -26,
  +    VAR_ERR_OFFSET_LOGIC = -25,
  +    VAR_ERR_OFFSET_OUT_OF_BOUNDS = -24,
  +    VAR_ERR_RANGE_OUT_OF_BOUNDS = -23,
  +    VAR_ERR_INVALID_OFFSET_DELIMITER = -22,
  +    VAR_ERR_MISSING_START_OFFSET = -21,
  +    VAR_ERR_EMPTY_SEARCH_STRING = -20,
  +    VAR_ERR_MISSING_PARAMETER_IN_COMMAND = -19,
  +    VAR_ERR_INVALID_REGEX_IN_REPLACE = -18,
  +    VAR_ERR_UNKNOWN_REPLACE_FLAG = -17,
  +    VAR_ERR_MALFORMATTED_REPLACE = -16,
  +    VAR_ERR_UNKNOWN_COMMAND_CHAR = -14,
  +    VAR_ERR_INPUT_ISNT_TEXT_NOR_VARIABLE = -13,
  +    VAR_ERR_UNDEFINED_VARIABLE = -12,
  +    VAR_ERR_INCOMPLETE_VARIABLE_SPEC = -11,
  +    VAR_ERR_OUT_OF_MEMORY = -10,
  +    VAR_ERR_INVALID_CONFIGURATION = -9,
  +    VAR_ERR_INCORRECT_CLASS_SPEC = -8,
  +    VAR_ERR_INCOMPLETE_GROUPED_HEX = -7,
  +    VAR_ERR_INCOMPLETE_OCTAL = -6,
  +    VAR_ERR_INVALID_OCTAL = -5,
  +    VAR_ERR_OCTAL_TOO_LARGE = -4,
  +    VAR_ERR_INVALID_HEX = -3,
  +    VAR_ERR_INCOMPLETE_HEX = -2,
  +    VAR_ERR_INCOMPLETE_NAMED_CHARACTER = -1,
  +    VAR_ERR_INCOMPLETE_QUOTED_PAIR = -1,
       VAR_OK = 0
   } var_rc_t;
   
  @@ -154,4 +154,5 @@
       var_cb_t lookup, void *lookup_context,
       const var_config_t * config, int force_expand);
   
  -#endif                /* !defined(LIB_OSSP_VAR_H) */
  +#endif /* __VAR_H__ */
  +
  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 var_test.c
  --- ossp-pkg/var/var_test.c	2001/11/14 10:47:17	1.8
  +++ ossp-pkg/var/var_test.c	2001/11/14 11:11:01	1.9
  @@ -14,7 +14,7 @@
       /* Callback can't expand variable names longer than
          sizeof(tmp) characters. */
   
  -    return VAR_CALLBACK_ERROR;
  +        return VAR_ERR_CALLBACK;
       }
       memcpy(tmp, varname, name_len);
       tmp[name_len] = '\0';

From ossp-cvs-owner@ossp.org  Wed Nov 14 13:02:41 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fAEC2eB89960; Wed, 14 Nov 2001 13:02:40 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id BB5964CE637; Wed, 14 Nov 2001 13:02:40 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c var.h
Message-Id: <20011114120240.BB5964CE637@visp.engelschall.com>
Date: Wed, 14 Nov 2001 13:02:40 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   14-Nov-2001 13:02:40
  Branch: HEAD                             Handle: 2001111412024000

  Modified files:
    ossp-pkg/var            var.c var.h

  Log:
    Safe time by cleaning up var_expand() myself instead of first writing
    down the wishes and having Peter do it himself afterwards:
    - use tokenbuf_init() instead of doing it manually
    - perform additional argument sanity checks
    - some minor coding style adjustments

  Summary:
    Revision    Changes     Path
    1.15        +17 -15     ossp-pkg/var/var.c
    1.8         +1  -0      ossp-pkg/var/var.h
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 var.c
  --- ossp-pkg/var/var.c	2001/11/14 11:11:01	1.14
  +++ ossp-pkg/var/var.c	2001/11/14 12:02:40	1.15
  @@ -1557,34 +1557,36 @@
       var_rc_t rc;
       tokenbuf_t output;
   
  -    /* Expand the class description for valid variable names. */
  +    /* Argument sanity checks */
  +    if (input_buf == NULL || input_len == 0 || 
  +        result == NULL || result_len == NULL ||
  +        lookup == NULL || lookup_context == NULL)
  +        return VAR_ERR_INVALID_ARGUMENT;
   
  +    /* Optionally use default configuration */
       if (config == NULL)
           config = &var_config_default;
  -    rc = expand_character_class(config->namechars, nameclass);
  -    if (rc != VAR_OK)
  +
  +    /* Expand the class description for valid variable names. */
  +    if ((rc = expand_character_class(config->namechars, nameclass)) != VAR_OK)
           return rc;
   
       /* Make sure that the specials defined in the configuration do not
          appear in the character name class. */
  -
  -    if (nameclass[(int) config->varinit] ||
  -        nameclass[(int) config->startdelim] ||
  -        nameclass[(int) config->enddelim] ||
  -        nameclass[(int) config->escape])
  +    if (nameclass[(int)config->varinit] ||
  +        nameclass[(int)config->startdelim] ||
  +        nameclass[(int)config->enddelim] ||
  +        nameclass[(int)config->escape])
           return VAR_ERR_INVALID_CONFIGURATION;
   
       /* Call the parser. */
  -
  -    output.begin = output.end = NULL;
  -    output.buffer_size = 0;
  -    rc = input(input_buf, input_buf + input_len, config, nameclass,
  -               lookup, lookup_context, force_expand, &output);
  -    if (rc != VAR_OK) {
  +    tokenbuf_init(&output);
  +    if ((rc = input(input_buf, input_buf + input_len, config, nameclass,
  +                    lookup, lookup_context, force_expand, &output)) != VAR_OK) {
           tokenbuf_free(&output);
           return rc;
       }
  -    *result = (char *) output.begin;
  +    *result = (char *)output.begin;
       *result_len = output.end - output.begin;
   
       return VAR_OK;
  Index: ossp-pkg/var/var.h
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 var.h
  --- ossp-pkg/var/var.h	2001/11/14 11:11:01	1.7
  +++ ossp-pkg/var/var.h	2001/11/14 12:02:40	1.8
  @@ -36,6 +36,7 @@
   
   typedef enum {
       VAR_ERR_CALLBACK = -64,
  +    VAR_ERR_INVALID_ARGUMENT = -35,
       VAR_ERR_SUBMATCH_OUT_OF_RANGE = -34,
       VAR_ERR_UNKNOWN_QUOTED_PAIR_IN_REPLACE = -33,
       VAR_ERR_EMPTY_PADDING_FILL_STRING = -32,

From ossp-cvs-owner@ossp.org  Wed Nov 14 13:05:28 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fAEC5QB90382; Wed, 14 Nov 2001 13:05:26 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id AF2D24CE537; Wed, 14 Nov 2001 13:05:26 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.h
Message-Id: <20011114120526.AF2D24CE537@visp.engelschall.com>
Date: Wed, 14 Nov 2001 13:05:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   14-Nov-2001 13:05:26
  Branch: HEAD                             Handle: 2001111412052600

  Modified files:
    ossp-pkg/var            var.h

  Log:
    bugfix: make sure errors use different numbers

  Summary:
    Revision    Changes     Path
    1.9         +1  -1      ossp-pkg/var/var.h
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.h
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 var.h
  --- ossp-pkg/var/var.h	2001/11/14 12:02:40	1.8
  +++ ossp-pkg/var/var.h	2001/11/14 12:05:26	1.9
  @@ -36,6 +36,7 @@
   
   typedef enum {
       VAR_ERR_CALLBACK = -64,
  +    VAR_ERR_INCOMPLETE_QUOTED_PAIR = -36,
       VAR_ERR_INVALID_ARGUMENT = -35,
       VAR_ERR_SUBMATCH_OUT_OF_RANGE = -34,
       VAR_ERR_UNKNOWN_QUOTED_PAIR_IN_REPLACE = -33,
  @@ -70,7 +71,6 @@
       VAR_ERR_INVALID_HEX = -3,
       VAR_ERR_INCOMPLETE_HEX = -2,
       VAR_ERR_INCOMPLETE_NAMED_CHARACTER = -1,
  -    VAR_ERR_INCOMPLETE_QUOTED_PAIR = -1,
       VAR_OK = 0
   } var_rc_t;
   

From ossp-cvs-owner@ossp.org  Wed Nov 14 13:21:06 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fAECL5B92234; Wed, 14 Nov 2001 13:21:05 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 9531C4CE696; Wed, 14 Nov 2001 13:21:05 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Message-Id: <20011114122105.9531C4CE696@visp.engelschall.com>
Date: Wed, 14 Nov 2001 13:21:05 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   14-Nov-2001 13:21:05
  Branch: HEAD                             Handle: 2001111412210500

  Modified files:
    ossp-pkg/var            var.c

  Log:
    be pedantic and use the symbol instead of hard-coded value

  Summary:
    Revision    Changes     Path
    1.16        +1  -1      ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 var.c
  --- ossp-pkg/var/var.c	2001/11/14 12:02:40	1.15
  +++ ossp-pkg/var/var.c	2001/11/14 12:21:05	1.16
  @@ -280,7 +280,7 @@
       var_rc_t rc;
   
       while (*src < end && **src != '}') {
  -        if ((rc = expand_simple_hex(src, dst, end)) != 0)
  +        if ((rc = expand_simple_hex(src, dst, end)) != VAR_OK)
               return rc;
           ++(*src);
       }

From ossp-cvs-owner@ossp.org  Wed Nov 14 13:21:17 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAECLFG92381; Wed, 14 Nov 2001 13:21:15 +0100 (CET)
Date: Wed, 14 Nov 2001 13:21:15 +0100 (CET)
Message-Id: <200111141221.fAECLFG92381@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   14-Nov-2001 13:21:15
  Branch: HEAD                             Handle: 2001111412211500

  Modified files:
    ossp-pkg/var            var_test.c

  Log:
    Fix indentation.

  Summary:
    Revision    Changes     Path
    1.10        +79 -82     ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 var_test.c
  --- ossp-pkg/var/var_test.c	2001/11/14 11:11:01	1.9
  +++ ossp-pkg/var/var_test.c	2001/11/14 12:21:15	1.10
  @@ -4,9 +4,9 @@
   #include "var.h"
   
   static int env_lookup(void *context,
  -              const char *varname, size_t name_len,
  -              const char **data, size_t * data_len,
  -              size_t * buffer_size)
  +    const char *varname, size_t name_len,
  +    const char **data, size_t * data_len,
  +    size_t * buffer_size)
   {
       char tmp[256];
   
  @@ -20,7 +20,7 @@
       tmp[name_len] = '\0';
       *data = getenv(tmp);
       if (*data == NULL)
  -    return 0;
  +        return 0;
       *data_len = strlen(*data);
       *buffer_size = 0;
       return 1;
  @@ -34,59 +34,59 @@
   int main(int argc, char **argv)
   {
       const struct test_case tests[] = {
  -    {"$HOME", "/home/regression-tests"},
  -    {"${FOO}", "os"},
  -    {"${BAR}", "type"},
  -    {"${${FOO:u}${BAR:u}:l:u}", "REGRESSION-OS"},
  -    {"${UNDEFINED}", "${UNDEFINED}"},
  -    {"${OSTYPE:#}", "13"},
  -    {"${EMPTY:-test${FOO}test}", "testostest"},
  -    {"${EMPTY:-test${FOO:u}test}", "testOStest"},
  -    {"${TERM:-test${FOO}test}", "regression-term"},
  -    {"${EMPTY:+FOO}", ""},
  -    {"${HOME:+test${FOO}test}", "testostest"},
  -    {"${HOME:+${OS${BAR:u}}}", "regression-os"},
  -    {"${HOME:+OS${UNDEFINED:u}}", "OS${UNDEFINED:u}"},
  -    {"${UNDEFINED:+OS${BAR:u}}", "${UNDEFINED:+OS${BAR:u}}"},
  -    {"${HOME:*heinz}", ""},
  -    {"${EMPTY:*claus}", "claus"},
  -    {"${TERM}", "regression-term"},
  -    {"${HOME:s/reg/bla/}", "/home/blaression-tests"},
  -    {"${HOME:s/e/bla/}", "/hombla/regression-tests"},
  -    {"${HOME:s/e/bla/g}", "/hombla/rblagrblassion-tblasts"},
  -    {"${HOME:s/\\//_/g}", "_home_regression-tests"},
  -    {"${HOME:s/[eso]/_/g}", "/h_m_/r_gr___i_n-t__t_"},
  -    {"${HOME:s/[esO]/_/g}", "/hom_/r_gr___ion-t__t_"},
  -    {"${HOME:s/[esO]/_/gi}", "/h_m_/r_gr___i_n-t__t_"},
  -    {"${OSTYPE:s/^[re]/_/g}", "_egression-os"},
  -    {"${EMPTY:s/^[re]/_/g}", ""},
  -    {"${HOME:s/.*/heinz/}", "heinz"},
  -    {"${HOME:s/e/bla/t}", "/hombla/regression-tests"},
  -    {"${HOME:s/E/bla/t}", "/home/regression-tests"},
  -    {"${HOME:s/E/bla/ti}", "/hombla/regression-tests"},
  -    {"${HOME:s/E/bla/tig}", "/hombla/rblagrblassion-tblasts"},
  -    {"${HOME:o1-5}", "home/"},
  -    {"${HOME:o1,5}", "home"},
  -    {"${HOME:o5,}", "/regression-tests"},
  -    {"${HOME:o5-}", "/regression-tests"},
  -    {"${HOME:o7,13}", "egress"},
  -    {"${HOME:y/a-z/A-YZ/}", "/HOME/REGRESSION-TESTS"},
  -    {"${HOME:y/e-g/a-c/}", "/homa/racrassion-tasts"},
  -    {"${FOO:p/15/../l}", "os............."},
  -    {"${FOO:p/15/12345/l}", "os1234512345123"},
  -    {"${FOO:p/15/../r}", ".............os"},
  -    {"${FOO:p/15/12345/r}", "1234512345123os"},
  -    {"${FOO:p/15/../c}", "......os......."},
  -    {"${FOO:p/15/12345/c}", "123451os1234512"},
  -    {"${FOO:s/os/\\x{4F}\\123/g}", "OS"},
  -    {"${FOO:s/os/\\1\\x4F\\123/t}", "\\1OS"},
  -    {"${HOME:s/g(res)s/x\\1x/g}", "/home/rexresxion-tests"},
  -    {"${HOME:s/(s+)/_\\1_/g}", "/home/regre_ss_ion-te_s_t_s_"},
  -    {"${HOME:s/\\x65/\\x45/g}", "/homE/rEgrEssion-tEsts"},
  -    {"${HOME:s/(s*)/x\\1X/g}",
  -     "xXxXxXxXxXxXxXxXxXxXxXxssXxXxXxXxXxXxXxsXxXxsX"},
  -    {"${HOME:s/./\\\\/g}",
  -     "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"}
  +        {"$HOME", "/home/regression-tests"},
  +        {"${FOO}", "os"},
  +        {"${BAR}", "type"},
  +        {"${${FOO:u}${BAR:u}:l:u}", "REGRESSION-OS"},
  +        {"${UNDEFINED}", "${UNDEFINED}"},
  +        {"${OSTYPE:#}", "13"},
  +        {"${EMPTY:-test${FOO}test}", "testostest"},
  +        {"${EMPTY:-test${FOO:u}test}", "testOStest"},
  +        {"${TERM:-test${FOO}test}", "regression-term"},
  +        {"${EMPTY:+FOO}", ""},
  +        {"${HOME:+test${FOO}test}", "testostest"},
  +        {"${HOME:+${OS${BAR:u}}}", "regression-os"},
  +        {"${HOME:+OS${UNDEFINED:u}}", "OS${UNDEFINED:u}"},
  +        {"${UNDEFINED:+OS${BAR:u}}", "${UNDEFINED:+OS${BAR:u}}"},
  +        {"${HOME:*heinz}", ""},
  +        {"${EMPTY:*claus}", "claus"},
  +        {"${TERM}", "regression-term"},
  +        {"${HOME:s/reg/bla/}", "/home/blaression-tests"},
  +        {"${HOME:s/e/bla/}", "/hombla/regression-tests"},
  +        {"${HOME:s/e/bla/g}", "/hombla/rblagrblassion-tblasts"},
  +        {"${HOME:s/\\//_/g}", "_home_regression-tests"},
  +        {"${HOME:s/[eso]/_/g}", "/h_m_/r_gr___i_n-t__t_"},
  +        {"${HOME:s/[esO]/_/g}", "/hom_/r_gr___ion-t__t_"},
  +        {"${HOME:s/[esO]/_/gi}", "/h_m_/r_gr___i_n-t__t_"},
  +        {"${OSTYPE:s/^[re]/_/g}", "_egression-os"},
  +        {"${EMPTY:s/^[re]/_/g}", ""},
  +        {"${HOME:s/.*/heinz/}", "heinz"},
  +        {"${HOME:s/e/bla/t}", "/hombla/regression-tests"},
  +        {"${HOME:s/E/bla/t}", "/home/regression-tests"},
  +        {"${HOME:s/E/bla/ti}", "/hombla/regression-tests"},
  +        {"${HOME:s/E/bla/tig}", "/hombla/rblagrblassion-tblasts"},
  +        {"${HOME:o1-5}", "home/"},
  +        {"${HOME:o1,5}", "home"},
  +        {"${HOME:o5,}", "/regression-tests"},
  +        {"${HOME:o5-}", "/regression-tests"},
  +        {"${HOME:o7,13}", "egress"},
  +        {"${HOME:y/a-z/A-YZ/}", "/HOME/REGRESSION-TESTS"},
  +        {"${HOME:y/e-g/a-c/}", "/homa/racrassion-tasts"},
  +        {"${FOO:p/15/../l}", "os............."},
  +        {"${FOO:p/15/12345/l}", "os1234512345123"},
  +        {"${FOO:p/15/../r}", ".............os"},
  +        {"${FOO:p/15/12345/r}", "1234512345123os"},
  +        {"${FOO:p/15/../c}", "......os......."},
  +        {"${FOO:p/15/12345/c}", "123451os1234512"},
  +        {"${FOO:s/os/\\x{4F}\\123/g}", "OS"},
  +        {"${FOO:s/os/\\1\\x4F\\123/t}", "\\1OS"},
  +        {"${HOME:s/g(res)s/x\\1x/g}", "/home/rexresxion-tests"},
  +        {"${HOME:s/(s+)/_\\1_/g}", "/home/regre_ss_ion-te_s_t_s_"},
  +        {"${HOME:s/\\x65/\\x45/g}", "/homE/rEgrEssion-tEsts"},
  +        {"${HOME:s/(s*)/x\\1X/g}",
  +         "xXxXxXxXxXxXxXxXxXxXxXxssXxXxXxXxXxXxXxsXxXxsX"},
  +        {"${HOME:s/./\\\\/g}",
  +         "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"}
       };
       char *tmp;
       size_t tmp_len;
  @@ -99,44 +99,41 @@
       setenv("TERM", "regression-term", 1) != 0 ||
       setenv("FOO", "os", 1) != 0 ||
       setenv("BAR", "type", 1) != 0 || setenv("EMPTY", "", 1) != 0) {
  -    printf("Failed to set the environment: %s.\n", strerror(errno));
  -    return 1;
  +        printf("Failed to set the environment: %s.\n", strerror(errno));
  +        return 1;
       }
       unsetenv("UNDEFINED");
   
       for (i = 0; i < sizeof(tests) / sizeof(struct test_case); ++i) {
   #ifdef DEBUG
  -    printf("Test case #%02d: Original input is '%s'.\n", i,
  +        printf("Test case #%02d: Original input is '%s'.\n", i,
              tests[i].input);
   #endif
  -    rc = var_unescape(tests[i].input, strlen(tests[i].input), buffer,
  -              0);
  -    if (rc != VAR_OK) {
  -        printf
  -        ("Test case #%d: First var_unescape() failed with return code %d.\n",
  -         i, rc);
  -        return 1;
  -    }
  +        rc = var_unescape(tests[i].input, strlen(tests[i].input), buffer, 0);
  +        if (rc != VAR_OK) {
  +            printf ("Test case #%d: First var_unescape() \
  +                failed with return code %d.\n", i, rc);
  +            return 1;
  +        }
   #ifdef DEBUG
  -    printf("Test case #%02d: Unescaped input is '%s'.\n", i, buffer);
  +        printf("Test case #%02d: Unescaped input is '%s'.\n", i, buffer);
   #endif
  -    rc = var_expand(buffer, strlen(buffer), &tmp, &tmp_len,
  +        rc = var_expand(buffer, strlen(buffer), &tmp, &tmp_len,
               &env_lookup, NULL, NULL, 0);
  -    if (rc != VAR_OK) {
  -        printf
  -        ("Test case #%d: var_expand() failed with return code %d.\n",
  -         i, rc);
  -        return 1;
  -    }
  +        if (rc != VAR_OK) {
  +            printf ("Test case #%d: var_expand() \
  +                failed with return code %d.\n", i, rc);
  +            return 1;
  +        }
   #ifdef DEBUG
  -    printf("Test case #%02d: Expanded output is '%s'.\n", i, tmp);
  +        printf("Test case #%02d: Expanded output is '%s'.\n", i, tmp);
   #endif
  -    if (tmp_len != strlen(tests[i].expected) || tmp == NULL
  +        if (tmp_len != strlen(tests[i].expected) || tmp == NULL
           || memcmp(tests[i].expected, tmp, tmp_len) != 0) {
  -        printf("Test case #%d: Expected result '%s' but got '%s'.\n",
  -           i, tests[i].expected, tmp);
  -        return 1;
  -    }
  +            printf("Test case #%d: Expected result '%s' but got '%s'.\n",
  +                i, tests[i].expected, tmp);
  +            return 1;
  +        }
       free(tmp);
       }
   

From ossp-cvs-owner@ossp.org  Wed Nov 14 13:52:59 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fAECqwB96315; Wed, 14 Nov 2001 13:52:58 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id A7C7C4CE683; Wed, 14 Nov 2001 13:52:58 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Message-Id: <20011114125258.A7C7C4CE683@visp.engelschall.com>
Date: Wed, 14 Nov 2001 13:52:58 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   14-Nov-2001 13:52:58
  Branch: HEAD                             Handle: 2001111412525800

  Modified files:
    ossp-pkg/var            var.c

  Log:
    one more hard-coded value vs. symbolic name

  Summary:
    Revision    Changes     Path
    1.17        +1  -1      ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 var.c
  --- ossp-pkg/var/var.c	2001/11/14 12:21:05	1.16
  +++ ossp-pkg/var/var.c	2001/11/14 12:52:58	1.17
  @@ -329,7 +329,7 @@
                   break;
               case 'x':
                   ++src;
  -                if ((rc = expand_hex(&src, &dst, end)) != 0)
  +                if ((rc = expand_hex(&src, &dst, end)) != VAR_OK)
                       return rc;
                   break;
               case '0':

From ossp-cvs-owner@ossp.org  Wed Nov 14 13:57:58 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fAECvvB97261; Wed, 14 Nov 2001 13:57:57 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 11F224CE683; Wed, 14 Nov 2001 13:57:57 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Message-Id: <20011114125757.11F224CE683@visp.engelschall.com>
Date: Wed, 14 Nov 2001 13:57:57 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   14-Nov-2001 13:57:57
  Branch: HEAD                             Handle: 2001111412575600

  Modified files:
    ossp-pkg/var            var.c

  Log:
    ops, lookup_context is allowed to be NULL, of course

  Summary:
    Revision    Changes     Path
    1.18        +1  -1      ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 var.c
  --- ossp-pkg/var/var.c	2001/11/14 12:52:58	1.17
  +++ ossp-pkg/var/var.c	2001/11/14 12:57:56	1.18
  @@ -1560,7 +1560,7 @@
       /* Argument sanity checks */
       if (input_buf == NULL || input_len == 0 || 
           result == NULL || result_len == NULL ||
  -        lookup == NULL || lookup_context == NULL)
  +        lookup == NULL)
           return VAR_ERR_INVALID_ARGUMENT;
   
       /* Optionally use default configuration */

From ossp-cvs-owner@ossp.org  Wed Nov 14 13:59:26 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fAECxOB97588; Wed, 14 Nov 2001 13:59:24 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id BEC624CE683; Wed, 14 Nov 2001 13:59:24 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var TODO
Message-Id: <20011114125924.BEC624CE683@visp.engelschall.com>
Date: Wed, 14 Nov 2001 13:59:24 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   14-Nov-2001 13:59:24
  Branch: HEAD                             Handle: 2001111412592400

  Modified files:
    ossp-pkg/var            TODO

  Log:
    remember my stuff here (added strerror issue, too)

  Summary:
    Revision    Changes     Path
    1.5         +98 -0      ossp-pkg/var/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/var/TODO
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 TODO
  --- ossp-pkg/var/TODO	2001/11/13 14:43:43	1.4
  +++ ossp-pkg/var/TODO	2001/11/14 12:59:24	1.5
  @@ -4,3 +4,101 @@
      Regexp-Ausdrücken enthalten.
   
    - Unterstützung von PCRE.
  +
  +
  +---- RSE: --------------------------------------------------------------------
  +
  +- HAS TO BE: adding a var_error() function which translates var_rc_t
  +  into a text version ala strerror(3).
  +
  +- HAS TO BE: still missing PCRE support plus corresponding Autoconf stuff
  +
  +- CAN BE: as in L2, reduce the large 1024 auto-variable with a a lot
  +  smaller (on 32-bit boxes just 21 bytes) but still fully
  +  sufficiently-sized variable:
  +
  +Index: var.c
  +===================================================================
  +RCS file: /u/rse/arc/cvs/ossp/ossp-pkg/var/var.c,v
  +retrieving revision 1.14
  +diff -u -d -u -d -r1.14 var.c
  +--- var.c	2001/11/14 11:11:01	1.14
  ++++ var.c	2001/11/14 11:37:54
  +@@ -1261,8 +1261,8 @@
  + 
  +     case '#':                   /* Substitute length of the string. */
  +         if (data->begin) {
  +-            char buf[1024];
  +-            sprintf(buf, "%d", data->end - data->begin);
  ++            char buf[((sizeof(int)*8)/3)+10]; /* sufficient size: <#bits> x log_10(2) + safety */
  ++            sprintf(buf, "%d", (int)(data->end - data->begin));
  +             tokenbuf_free(data);
  +             if (!tokenbuf_assign(data, buf, strlen(buf))) {
  +                 rc = VAR_ERR_OUT_OF_MEMORY;
  +
  +- SHOULD BE: the "magic" number 256 in name class definitions would be
  +  nice if replaced by a symbolic name
  +
  +- SHOULD BE: the expand_octal() function checks that in the octal number
  +  NNN (representing a character) the first number is not larger than
  +  3 because the 0xff is (octal) 377. Unfortunately this still allows
  +  things like 399 which is illegal because larger than 0xff (the maximum
  +  fitting into an 8-bit character). My suggestions:
  +
  +Index: var.c
  +===================================================================
  +RCS file: /u/rse/arc/cvs/ossp/ossp-pkg/var/var.c,v
  +retrieving revision 1.15
  +diff -u -d -u -d -r1.15 var.c
  +--- var.c	2001/11/14 12:02:40	1.15
  ++++ var.c	2001/11/14 12:14:49
  +@@ -209,7 +209,7 @@
  + 
  + static var_rc_t expand_octal(const char **src, char **dst, const char *end)
  + {
  +-    unsigned char c;
  ++    unsigned int c;
  + 
  +     if (end - *src < 3)
  +         return VAR_ERR_INCOMPLETE_OCTAL;
  +@@ -217,8 +217,6 @@
  +         return VAR_ERR_INVALID_OCTAL;
  + 
  +     c = **src - '0';
  +-    if (c > 3)
  +-        return VAR_ERR_OCTAL_TOO_LARGE;
  +     c *= 8;
  +     ++(*src);
  + 
  +@@ -227,6 +225,9 @@
  +     ++(*src);
  + 
  +     c += **src - '0';
  ++
  ++    if (c > 0xff)
  ++        return VAR_ERR_OCTAL_TOO_LARGE;
  + 
  +     **dst = (char) c;
  +     ++(*dst);
  +
  +- SHOULD BE: the tokenbuf functions like tokenbuf_append() return
  +  1 or 0 and the other routines convert this into var_rc_t values. I
  +  recommend to change the tokenbuf functions to already return var_rc_t
  +  values and pass this value through in other functions. This way the
  +  different errors in tokenbuf_append() are visible, too.
  +
  +- CAN BE: I IMHO would reduce the code size of the recursive descent parser
  +  by 1. making the prototype and corresponding parameter names of all
  +  functions identical (see for example text() for a current exclusion)
  +  and then use a macro to replace the long prototype description on
  +  every function.
  +
  +- SHOULD BE: the return code semantics are still not clear to me
  +  (perhaps it is solved by documentation). Especially it confuses me a lot
  +  that internally it uses "int" instead of "var_rc_t" and does arithmetics
  +  like "1 + rc" before finanlly it is casted to an var_rc_t. So how should
  +  anyone can do anything reasonable with return codes > 0. He does not
  +  know what they mean, doesn't he?
  +
  +------------------------------------------------------------------------
  +

From ossp-cvs-owner@ossp.org  Wed Nov 14 14:55:47 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAEDtkJ04620; Wed, 14 Nov 2001 14:55:46 +0100 (CET)
Date: Wed, 14 Nov 2001 14:55:46 +0100 (CET)
Message-Id: <200111141355.fAEDtkJ04620@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   14-Nov-2001 14:55:46
  Branch: HEAD                             Handle: 2001111413554500

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO

  Log:
    duplicate header issue repored by rse@de.cw.net and ricudis@paiko.gr

  Summary:
    Revision    Changes     Path
    1.47        +2  -0      ossp-pkg/lmtp2nntp/00TODO
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.46 -r1.47 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	2001/10/31 08:24:10	1.46
  +++ ossp-pkg/lmtp2nntp/00TODO	2001/11/14 13:55:45	1.47
  @@ -28,6 +28,8 @@
     inn permissions require "read" for a STAT, so a "post w/o stat" delivery
     mode should be implemented.
   
  +  handle duplicate headers, i.e. Reply-To:
  +
     **** DEVELOPMENT INFORMATION ****
   
     Proposal for future URL-style logging option syntax

From ossp-cvs-owner@ossp.org  Wed Nov 14 14:57:16 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAEDvFq04766; Wed, 14 Nov 2001 14:57:15 +0100 (CET)
Date: Wed, 14 Nov 2001 14:57:15 +0100 (CET)
Message-Id: <200111141357.fAEDvFq04766@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp INSTALL
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   14-Nov-2001 14:57:15
  Branch: HEAD                             Handle: 2001111413571400

  Modified files:
    ossp-pkg/lmtp2nntp      INSTALL

  Log:
    email address is valid having trailing dot; ricudis@paiko.gr

  Summary:
    Revision    Changes     Path
    1.12        +1  -1      ossp-pkg/lmtp2nntp/INSTALL
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/INSTALL
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 INSTALL
  --- ossp-pkg/lmtp2nntp/INSTALL	2001/11/07 13:47:06	1.11
  +++ ossp-pkg/lmtp2nntp/INSTALL	2001/11/14 13:57:14	1.12
  @@ -41,7 +41,7 @@
        | _DEFIFNOT(`LMTP2NNTP_MAILER_CLIENTBIND',    `0.0.0.0')
        | _DEFIFNOT(`LMTP2NNTP_MAILER_GROUPMODE',     `envelope')
        | _DEFIFNOT(`LMTP2NNTP_MAILER_LOGLEVEL',      `notice:/var/log/lmtp2nntp')
  -     | _DEFIFNOT(`LMTP2NNTP_MAILER_MAILFROM',      `^.+@(?:[^.]+\.)+[^.]+$')
  +     | _DEFIFNOT(`LMTP2NNTP_MAILER_MAILFROM',      `^.+@(?:[^.]+\.)+[^.]+\.?$')
        | _DEFIFNOT(`LMTP2NNTP_MAILER_NODENAME',      `confDOMAIN_NAME')
        | _DEFIFNOT(`LMTP2NNTP_MAILER_OPERATIONMODE', `post')
        | _DEFIFNOT(`LMTP2NNTP_MAILER_SIZE',          `800000')

From ossp-cvs-owner@ossp.org  Wed Nov 14 14:59:23 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAEDxM604934; Wed, 14 Nov 2001 14:59:22 +0100 (CET)
Date: Wed, 14 Nov 2001 14:59:22 +0100 (CET)
Message-Id: <200111141359.fAEDxM604934@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_spec_ebnf
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   14-Nov-2001 14:59:22
  Branch: HEAD                             Handle: 2001111413592100

  Modified files:
    ossp-pkg/l2             l2_spec_ebnf

  Log:
    Corrected grammar typos and indentation.

  Summary:
    Revision    Changes     Path
    1.2         +22 -22     ossp-pkg/l2/l2_spec_ebnf
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_spec_ebnf
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 l2_spec_ebnf
  --- ossp-pkg/l2/l2_spec_ebnf	2001/11/12 20:18:01	1.1
  +++ ossp-pkg/l2/l2_spec_ebnf	2001/11/14 13:59:21	1.2
  @@ -1,39 +1,39 @@
   tree : stream                                              /* channel tree */
  -    ;
  +     ;
   
   stream : channel                                     /* stream of channels */
  -    | channel T_OP_ARROW stream
  -    | channel T_OP_ARROW '{' streams '}'
  -    ;
  +       | channel T_OP_ARROW stream
  +       | channel T_OP_ARROW '{' streams '}'
  +       ;
   
   streams : stream                                /* list of sibling streams */
  -    | stream ';' streams
  -    ;
  +        | stream ';' streams
  +        ;
   
   channel : channel_level '/' channel_level ':' channel_cons      /* channel */
  -    | channel_level ':' channel_cons
  -    | channel_cons
  -    ;
  +        | channel_level ':' channel_cons
  +        | channel_cons
  +        ;
   
   channel_level : T_ID                                      /* channel level */
  -    | '(' channel_level_mask ')'
  -    ;
  +              | '(' channel_level_mask ')'
  +              ;
   
   channel_level_mask : T_ID                            /* channel level mask */
  -    | T_ID '|' channel_level_mask
  -    ;
  +                   | T_ID '|' channel_level_mask
  +                   ;
   
  -channel_cons : T_ID                                 /* channel constructor */
  -    ;
  +channel_cons : T_ID channel_params                  /* channel constructor */
  +             ;
   
   channel_params : /* empty */                         /* channel parameters */
  -    | '(' channel_param_list ')'
  -    ;
  +               | '(' channel_param_list ')'
  +               ;
   
   channel_param_list : /* empty */                 /* channel parameter list */
  -    | channel_param
  -    | channel_param ',' channel_param_list
  -    ;
  +               | channel_param
  +               | channel_param ',' channel_param_list
  +               ;
   
  -channel_param  : T_ID '='                             /* channel parameter */
  -    ;
  +channel_param  : T_ID '=' T_PARAM                     /* channel parameter */
  +               ;

From ossp-cvs-owner@ossp.org  Wed Nov 14 15:22:26 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAEEMPU09804; Wed, 14 Nov 2001 15:22:25 +0100 (CET)
Date: Wed, 14 Nov 2001 15:22:25 +0100 (CET)
Message-Id: <200111141422.fAEEMPU09804@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp msg.c test.sh
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   14-Nov-2001 15:22:25
  Branch: HEAD                             Handle: 2001111414222500

  Modified files:
    ossp-pkg/lmtp2nntp      msg.c test.sh

  Log:
    ALERT! The line folding algorithm in LMTP2NNTP_1_1_0 had a bug when wrapping
    long lines. It used argz_insert() inside an iteration loop while manipulating
    the elements the loop's based on. When the element being inserted did not fit
    into the previously allocated buffer, a realloc() occured. This rendered the
    iteration loop pointer invalid causing the code to write into the wilderness.
    This caused segfaults at the very best but it also happend that the folding
    code hung in an arbitrary loop effectively exhausting all available CPU
    horsepower. This happend on our live machine and was reported by
    ricudis@paiko.gr, too. This fix is the ultimate reason for releasing
    LMTP2NNTP_1_1_1.

  Summary:
    Revision    Changes     Path
    1.19        +13 -2      ossp-pkg/lmtp2nntp/msg.c
    1.8         +11 -7      ossp-pkg/lmtp2nntp/test.sh
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/msg.c
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 msg.c
  --- ossp-pkg/lmtp2nntp/msg.c	2001/09/12 14:35:14	1.18
  +++ ossp-pkg/lmtp2nntp/msg.c	2001/11/14 14:22:25	1.19
  @@ -258,6 +258,8 @@
       char         cOld;
       int          n;
       char        *cpHeaders;
  +    char        *azNewheaders;
  +    size_t       asNewheaders;
   
       log0(msg, DEBUG, "verify Newsgroups");
       if (msg->azNewsgroups == NULL)
  @@ -304,6 +306,8 @@
        * Fragments exceeding WRAPAT characters without having a blank as a
        * splitting point are forcibly cut at a non-blank character.
        */
  +    azNewheaders = NULL;
  +    asNewheaders = 0;
       cp = NULL;
       while ((cp = argz_next(msg->azHeaders, msg->asHeaders, cp)) != NULL) {
           if (strlen(cp) > WRAPAT) {
  @@ -341,11 +345,18 @@
                   strcat(cpWrap, WRAPUSING);
                   strcat(cpWrap, cpRem);
               }
  -            argz_delete(&msg->azHeaders, &msg->asHeaders, cp);
  -            argz_insert(&msg->azHeaders, &msg->asHeaders, cp, cpWrap);
  +            argz_add(&azNewheaders, &asNewheaders, cpWrap);
  +            log2(msg, DEBUG, "a folded header \"%{text}D\"", cpWrap, strlen(cpWrap));
               free(cpWrap);
           }
  +        else {
  +            argz_add(&azNewheaders, &asNewheaders, cp);
  +            log2(msg, DEBUG, "verbatim header \"%{text}D\"", cp, strlen(cp));
  +        }
       }
  +    free(msg->azHeaders);
  +    msg->azHeaders = azNewheaders;
  +    msg->asHeaders = asNewheaders;
   
       log0(msg, DEBUG, "strigify headers");
       argz_stringify(msg->azHeaders, msg->asHeaders, '\n');
  Index: ossp-pkg/lmtp2nntp/test.sh
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 test.sh
  --- ossp-pkg/lmtp2nntp/test.sh	2001/10/15 14:22:12	1.7
  +++ ossp-pkg/lmtp2nntp/test.sh	2001/11/14 14:22:25	1.8
  @@ -16,14 +16,18 @@
   Message-Id: <200108141251.f7ECpmn74812@dev.de.cw.net>
   From: Thomas Lotterer <Thomas.Lotterer@example.com>
   Received: from cw.example.com (cw.example.com [10.1.1.32])
  -    by gateway.example.com (8.9.2/8.9.2/$Revision: 1.7 $) with SMTP id NAA08840
  +    by gateway.example.com (8.9.2/8.9.2/$Revision: 1.8 $) with SMTP id NAA08840
       for <thomas.lotterer@gateway.example.com>; Mon, 2 Apr 2001 13:20:25 +0200 (MET DST)
   Received: from history (history.example.org [195.143.102.41])
  -    by cw.example.com (8.11.0/8.11.0/$Revision: 1.7 $) with ESMTP id f32BKPb12235
  +    by cw.example.com (8.11.0/8.11.0/$Revision: 1.8 $) with ESMTP id f32BKPb12235
       for <thomas.lotterer@example.com>; Mon, 2 Apr 2001 13:20:25 +0200
   Received: from example.org (littlemua.example.org [195.143.103.160])
   	by history (8.8.8/8.8.8) with ESMTP id LAA12678;
   	Mon, 2 Apr 2001 11:23:14 GMT
  +X-Linefoldingtest: This is a very long line. It is assumed this line will be
  +    wrapped in order to fit. Please note: the quick brown fox jumps over the lazy
  +    dog. Did you know that my first computer was a Texas Instruments TI99/4A?
  +    What a device! Had a 16bit CPU before the Commodore C64 area has begun.
   Subject: lmtp2nntp testmessage.viasendmail
   
   ..
  @@ -114,7 +118,7 @@
   echon "checking whether a valid fake posting succeeds ... "
   prolog
   newmsg
  -./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 1000 -t nntp:connect=1 ${GROUP} >${STDOUT} 2>${STDERR} ; RC=$
  +./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 1500 -t nntp:connect=1 ${GROUP} >${STDOUT} 2>${STDERR} ; RC=$
   RC="";
   if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
   if [ 1 -eq `egrep <${STDOUT} '^250[- ].*pleased to meet you'    | wc -l` ]; then RC="${RC}LHLO "; fi
  @@ -132,7 +136,7 @@
   echon "checking whether -m option blocks invalid sender ... "
   prolog
   newmsg
  -( MFILT=".*@is.invalid" ; ./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 1000 -t nntp:connect=1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
  +( MFILT=".*@is.invalid" ; ./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 1500 -t nntp:connect=1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
   RC="";
   if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
   if [ 1 -eq `egrep <${STDOUT} '^250[- ].+pleased to meet you'    | wc -l` ]; then RC="${RC}LHLO "; fi
  @@ -168,7 +172,7 @@
   echon "checking whether -c option fails on invalid local host address ... "
   prolog
   newmsg
  -( LOCAL="10.255.255.255" ; ./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 1000 -t nntp:connect=1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
  +( LOCAL="10.255.255.255" ; ./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 1500 -t nntp:connect=1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
   RC="";
   if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
   if [ 1 -eq `egrep <${FILE}   'error.+binding'                   | wc -l` ]; then RC="${RC}bind "; fi
  @@ -181,7 +185,7 @@
   echon "checking whether -g envelope option blocks invalid group ... "
   prolog
   newmsg
  -( GROUP="foo.*" ; ./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g envelope -d ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 1000 -t nntp:connect=1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
  +( GROUP="foo.*" ; ./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g envelope -d ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 1500 -t nntp:connect=1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
   RC="";
   if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
   if [ 1 -eq `egrep <${STDOUT} '^250[- ].*pleased to meet you'    | wc -l` ]; then RC="${RC}LHLO "; fi
  @@ -200,7 +204,7 @@
   echon "checking whether -d option times out for invalid host ... "
   prolog
   newmsg
  -( HOST="10.255.255.255" ; ./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 1000 -t nntp:connect=1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
  +( HOST="10.255.255.255" ; ./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 1500 -t nntp:connect=1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
   RC="";
   if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
   if [ 1 -eq `egrep <${FILE}   'warning.+connect.+failed'         | wc -l` ]; then RC="${RC}conn "; fi

From ossp-cvs-owner@ossp.org  Wed Nov 14 15:25:57 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAEEPmk10275; Wed, 14 Nov 2001 15:25:48 +0100 (CET)
Date: Wed, 14 Nov 2001 15:25:48 +0100 (CET)
Message-Id: <200111141425.fAEEPmk10275@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp msg.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   14-Nov-2001 15:25:48
  Branch: HEAD                             Handle: 2001111414254700

  Modified files:
    ossp-pkg/lmtp2nntp      msg.c

  Log:
    msg.c

  Summary:
    Revision    Changes     Path
    1.20        +1  -1      ossp-pkg/lmtp2nntp/msg.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/msg.c
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 msg.c
  --- ossp-pkg/lmtp2nntp/msg.c	2001/11/14 14:22:25	1.19
  +++ ossp-pkg/lmtp2nntp/msg.c	2001/11/14 14:25:47	1.20
  @@ -158,7 +158,7 @@
       }
   
       log0(msg, DEBUG, "split header lines into names and values");
  -    while (str_parse(cpHeaders, "m/^([\\w-]+?:)[ \\t]*([^\\n]*?)[ \\t]*\\n(.*)/s", &cpName, &cpValue, &cpRem) > 0) {
  +    while (str_parse(cpHeaders, "m/^[> \\t]*([\\x21-\\x7e]+?:)[ \\t]*([^\\n]*?)[ \\t]*\\n(.*)/s", &cpName, &cpValue, &cpRem) > 0) {
           free(cpHeaders);
           cpHeaders = cpRem;
           argz_add(&msg->azHeaders, &msg->asHeaders, cpName);

From ossp-cvs-owner@ossp.org  Wed Nov 14 15:32:37 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAEEWa711331; Wed, 14 Nov 2001 15:32:36 +0100 (CET)
Date: Wed, 14 Nov 2001 15:32:36 +0100 (CET)
Message-Id: <200111141432.fAEEWa711331@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp msg.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   14-Nov-2001 15:32:36
  Branch: HEAD                             Handle: 2001111414323600

  Modified files:
    ossp-pkg/lmtp2nntp      msg.c

  Log:
    allow indented headers and respect RFC0822 character range - ricudis@paiko.gr

  Summary:
    Revision    Changes     Path
    1.21        +0  -0      ossp-pkg/lmtp2nntp/msg.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/msg.c
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 msg.c

From ossp-cvs-owner@ossp.org  Wed Nov 14 15:37:12 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAEEbAF11756; Wed, 14 Nov 2001 15:37:10 +0100 (CET)
Date: Wed, 14 Nov 2001 15:37:10 +0100 (CET)
Message-Id: <200111141437.fAEEbAF11756@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp msg.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   14-Nov-2001 15:37:10
  Branch: HEAD                             Handle: 2001111414371000

  Modified files:
    ossp-pkg/lmtp2nntp      msg.c

  Log:
    ricudis@paiko.gr - How about adding a custom entry on the Path: header on
    gated messages, so the news system can distinguish messages that should be
    passed back to the mailing list on doubly gated mailing lists?
    
        Path: lmtp2nntp!not-for-mail
    
    and placing in the INN newsfeeds file :
    
        news2mail-feed/lmtp2nntp:*:blah blah blah
    
    would prevent loops caused by messages gated to Usenet by lmtp2nntp then
    forwarded back to their origination message-list by the newsfeed feeding the
    Usenet->mail side of the gateway.

  Summary:
    Revision    Changes     Path
    1.22        +1  -1      ossp-pkg/lmtp2nntp/msg.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/msg.c
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 msg.c
  --- ossp-pkg/lmtp2nntp/msg.c	2001/11/14 14:32:36	1.21
  +++ ossp-pkg/lmtp2nntp/msg.c	2001/11/14 14:37:10	1.22
  @@ -239,7 +239,7 @@
   
       log0(msg, DEBUG, "adding mandatory Path: header");
       argz_add(&msg->azHeaders, &msg->asHeaders, "Path:");
  -    argz_add(&msg->azHeaders, &msg->asHeaders, "not-for-mail");
  +    argz_add(&msg->azHeaders, &msg->asHeaders, "lmtp2nntp!not-for-mail");
   
       log0(msg, DEBUG, "split complete");
       return MSG_OK;

From ossp-cvs-owner@ossp.org  Wed Nov 14 16:05:41 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAEF5eR94241; Wed, 14 Nov 2001 16:05:40 +0100 (CET)
Date: Wed, 14 Nov 2001 16:05:40 +0100 (CET)
Message-Id: <200111141505.fAEF5eR94241@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp README version.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   14-Nov-2001 16:05:40
  Branch: HEAD                             Handle: 2001111415053900

  Modified files:
    ossp-pkg/lmtp2nntp      README version.c

  Log:
    bump version for release

  Summary:
    Revision    Changes     Path
    1.13        +1  -1      ossp-pkg/lmtp2nntp/README
    1.15        +9  -9      ossp-pkg/lmtp2nntp/version.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/README
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 README
  --- ossp-pkg/lmtp2nntp/README	2001/11/12 12:54:09	1.12
  +++ ossp-pkg/lmtp2nntp/README	2001/11/14 15:05:39	1.13
  @@ -7,7 +7,7 @@
                     |_|                        |_|    
   
     OSSP lmtp2nntp - Mail to News Gateway
  -  Version 1.1.0 (12-Nov-2001)
  +  Version 1.1.1 (14-Nov-2001)
   
     ABSTRACT
   
  Index: ossp-pkg/lmtp2nntp/version.c
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 version.c
  --- ossp-pkg/lmtp2nntp/version.c	2001/11/12 12:54:09	1.14
  +++ ossp-pkg/lmtp2nntp/version.c	2001/11/14 15:05:39	1.15
  @@ -8,7 +8,7 @@
   #ifndef _VERSION_C_
   #define _VERSION_C_
   
  -#define LMTP2NNTP_VERSION 0x101200
  +#define LMTP2NNTP_VERSION 0x101201
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _VERSION_C_AS_HEADER_
   
   lmtp2nntp_version_t lmtp2nntp_version = {
  -    0x101200,
  -    "1.1.0",
  -    "1.1.0 (12-Nov-2001)",
  -    "This is lmtp2nntp, Version 1.1.0 (12-Nov-2001)",
  -    "lmtp2nntp 1.1.0 (12-Nov-2001)",
  -    "lmtp2nntp/1.1.0",
  -    "@(#)lmtp2nntp 1.1.0 (12-Nov-2001)",
  -    "$Id: lmtp2nntp 1.1.0 (12-Nov-2001) $"
  +    0x101201,
  +    "1.1.1",
  +    "1.1.1 (14-Nov-2001)",
  +    "This is lmtp2nntp, Version 1.1.1 (14-Nov-2001)",
  +    "lmtp2nntp 1.1.1 (14-Nov-2001)",
  +    "lmtp2nntp/1.1.1",
  +    "@(#)lmtp2nntp 1.1.1 (14-Nov-2001)",
  +    "$Id: lmtp2nntp 1.1.1 (14-Nov-2001) $"
   };
   
   #endif /* _VERSION_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Wed Nov 14 16:55:12 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAEFtAe86844; Wed, 14 Nov 2001 16:55:10 +0100 (CET)
Date: Wed, 14 Nov 2001 16:55:10 +0100 (CET)
Message-Id: <200111141555.fAEFtAe86844@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.h var_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   14-Nov-2001 16:55:10
  Branch: HEAD                             Handle: 2001111415550900

  Modified files:
    ossp-pkg/var            var.h var_test.c

  Log:
    Minor corrections.

  Summary:
    Revision    Changes     Path
    1.10        +5  -5      ossp-pkg/var/var.h
    1.11        +2  -2      ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.h
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 var.h
  --- ossp-pkg/var/var.h	2001/11/14 12:05:26	1.9
  +++ ossp-pkg/var/var.h	2001/11/14 15:55:09	1.10
  @@ -93,7 +93,7 @@
   
   /*
      The callback will be called by variable_expand(), providing the
  -   following parameterns:
  +   following parameters:
   
           context         - passed through from variable_expand()'s
                             parameters
  @@ -117,8 +117,8 @@
   
   typedef int (*var_cb_t) (void *context,
       const char *varname, size_t name_len,
  -    const char **data, size_t * data_len,
  -    size_t * buffer_size);
  +    const char **data, size_t *data_len,
  +    size_t *buffer_size);
   
   /*
      This structure configures the parser's specials. I think, the fields
  @@ -151,9 +151,9 @@
   */
   
   var_rc_t var_expand(const char *input, size_t input_len,
  -    char **result, size_t * result_len,
  +    char **result, size_t *result_len,
       var_cb_t lookup, void *lookup_context,
  -    const var_config_t * config, int force_expand);
  +    const var_config_t *config, int force_expand);
   
   #endif /* __VAR_H__ */
   
  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 var_test.c
  --- ossp-pkg/var/var_test.c	2001/11/14 12:21:15	1.10
  +++ ossp-pkg/var/var_test.c	2001/11/14 15:55:09	1.11
  @@ -5,8 +5,8 @@
   
   static int env_lookup(void *context,
       const char *varname, size_t name_len,
  -    const char **data, size_t * data_len,
  -    size_t * buffer_size)
  +    const char **data, size_t *data_len,
  +    size_t *buffer_size)
   {
       char tmp[256];
   

From ossp-cvs-owner@ossp.org  Thu Nov 15 10:47:34 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAF9lXw19391; Thu, 15 Nov 2001 10:47:33 +0100 (CET)
Date: Thu, 15 Nov 2001 10:47:33 +0100 (CET)
Message-Id: <200111150947.fAF9lXw19391@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   15-Nov-2001 10:47:33
  Branch: HEAD                             Handle: 2001111509473200

  Modified files:
    ossp-pkg/l2             l2.pod

  Log:
    Added L2CDL grammar text (L2 Channel Definition Language.) Looks crappy.

  Summary:
    Revision    Changes     Path
    1.9         +61 -0      ossp-pkg/l2/l2.pod
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2.pod
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 l2.pod
  --- ossp-pkg/l2/l2.pod	2001/11/09 12:45:37	1.8
  +++ ossp-pkg/l2/l2.pod	2001/11/15 09:47:32	1.9
  @@ -64,6 +64,67 @@
   (null, fd, file, pipe, socket, syslog, smtp) channels which already
   cover mostly all use cases of logging.
   
  +A language is provided to allow for channel specification and configuration.
  +Thus, the channel tree can be constructed either by the API and its ANSI C
  +bindings or through the use of this L2 channel definition language. Applying
  +the API allows fine grained control of the channel tree. Additionally, the
  +API allows for a more interactive channel definition. However, using the
  +channel definition language to define the channel tree is more convenient,
  +and takes less coding effort. The channel definition language is almost
  +always sufficient for an application using L2.
  +
  +=head1 L2 CHANNEL DEFINITION EBNF GRAMMAR
  +
  +/* channel tree */
  +tree               : stream
  +                   ;
  +
  +/* stream of channels */
  +stream             : channel
  +                   | channel T_OP_ARROW stream
  +                   | channel T_OP_ARROW '{' streams '}'
  +                   ;
  +
  +/* list of sibling streams */
  +streams            : stream
  +                   | stream ';' streams
  +                   ;
  +
  +/* channel */
  +channel            : channel_level '/' channel_level ':' channel_cons
  +                   | channel_level ':' channel_cons
  +                   | channel_cons
  +                   ;
  +
  +/* channel level */
  +channel_level      : T_ID
  +                   | '(' channel_level_mask ')'
  +                   ;
  +
  +/* channel level mask */
  +channel_level_mask : T_ID
  +                   | T_ID '|' channel_level_mask
  +                   ;
  +
  +/* channel constructor */
  +channel_cons       : T_ID channel_params
  +                   ;
  +
  +/* channel parameters */
  +channel_params     : /* empty */
  +                   | '(' channel_param_list ')'
  +                   ;
  +
  +/* channel parameter list */
  +channel_param_list : /* empty */
  +                   | channel_param
  +                   | channel_param ',' channel_param_list
  +                   ;
  +
  +/* channel parameter */
  +channel_param      : T_ID '=' T_PARAM
  +                   ;
  +
   =head1 FUNCTIONS
   
   The following functions are provided by the B<L2> API:

From ossp-cvs-owner@ossp.org  Thu Nov 15 10:57:42 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAF9vfT21020; Thu, 15 Nov 2001 10:57:41 +0100 (CET)
Date: Thu, 15 Nov 2001 10:57:41 +0100 (CET)
Message-Id: <200111150957.fAF9vfT21020@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   15-Nov-2001 10:57:41
  Branch: HEAD                             Handle: 2001111509574000

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO

  Log:
    OSSP var a little extended can solve issues very elegant

  Summary:
    Revision    Changes     Path
    1.48        +33 -0      ossp-pkg/lmtp2nntp/00TODO
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.47 -r1.48 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	2001/11/14 13:55:45	1.47
  +++ ossp-pkg/lmtp2nntp/00TODO	2001/11/15 09:57:40	1.48
  @@ -42,3 +42,36 @@
     $ ./.configure [wegen --with-dmalloc!]
     $ dmalloc -l dmalloc.log
     $ dmalloc debug3
  +
  +  **** DEVELOPMENT INFORMATION ****
  +
  +  I want to ask how cross posting to multiple lists are handled. For example:
  +  User posts to the following two lists which are both mail to news gateways:
  +  listone@lists.org -> lists.listsone
  +  listtwo@lists.org -> lists.listtwo
  +  Obviously both messages will have an identical Message-ID header of which
  +  nntp will reject one of the two posts. Ideally this would be caught and
  +  the message would be cross posted to both lists.listsone and lists.listtwo
  +  groups.
  +
  +  Proposal for using -h Newsgroups:${To:s/SEARCH/REPLACE/} with SEARCH/REPLACE
  +  being the following regex:
  +      perl -e '$_="foo\@bar\nFoo Bar <foo\@bar>\nfoo\@bar (Foo Bar)\n<foo\@bar> Foo Bar\n(Foo Bar) foo\@bar\n";
  +      foreach $a (split(/\n/, $_)) { $n=$a;
  +      $n=~s/^(?:([^@<>()]+)@[^<>()]+|.*<([^@]+)@[^>]+?>.*|.*?([^@ <>()]+)@[^ <>()]+.*)$/$1$2$3/;
  +      print "$a->$n\n" };'
  +  1.) OSSP var needs autoconf environment
  +  2.) OSSP var needs RPM-style [] multivalue expansion
  +  3.) include OSSP var 
  +  4.) splitting headers needs to extend known headers into multiple instances
  +  5.) joining headers needs to merge known headers into single instances, delete headers w/o value
  +  6.) add -f configfile option in a mini-library #comments, command[\svalue]
  +  Result is:
  +    duplicate Reply-To: headers are eleminated by 5.)
  +    empty Subject: headers can be handled by      -h Subject:${Subject:-empty}
  +    missing Message-Id: headers can be handeld by -h Message-Id:${Message-Id:-$_CreateMessageId}
  +    illegal Message-Id: two or more @ use         -h ${Message-Id:s/^.*@.*@.*$/$_CreateMesssageId/}
  +    illegal Message-Id: no @ use                  -h ${Message-Id:s/^[^@]*$/$_CreateMesssageId/}
  +    crossposting problem                          -h [Newsgroups:see perl example above and use feature 2.)\n]
  +    potential to merge post/header modes          -h [Newsgroups:${_EnvelopeRCPT}\n]
  +

From ossp-cvs-owner@ossp.org  Thu Nov 15 12:03:17 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAFB3GE31930; Thu, 15 Nov 2001 12:03:16 +0100 (CET)
Date: Thu, 15 Nov 2001 12:03:16 +0100 (CET)
Message-Id: <200111151103.fAFB3GE31930@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_file.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   15-Nov-2001 12:03:16
  Branch: HEAD                             Handle: 2001111511031500

  Modified files:
    ossp-pkg/l2             l2_ch_file.c

  Log:
    Close potential memory leak.

  Summary:
    Revision    Changes     Path
    1.20        +2  -0      ossp-pkg/l2/l2_ch_file.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_file.c
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 l2_ch_file.c
  --- ossp-pkg/l2/l2_ch_file.c	2001/11/07 13:05:20	1.19
  +++ ossp-pkg/l2/l2_ch_file.c	2001/11/15 11:03:15	1.20
  @@ -132,6 +132,8 @@
       l2_ch_file_t *cfg = (l2_ch_file_t *)ctx->vp;
   
       /* destroy channel configuration */
  +    if (cfg->path != NULL)
  +        free(cfg->path);
       free(cfg);
   
       return L2_OK;

From ossp-cvs-owner@ossp.org  Thu Nov 15 16:36:07 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAFFa5Z00938; Thu, 15 Nov 2001 16:36:05 +0100 (CET)
Date: Thu, 15 Nov 2001 16:36:05 +0100 (CET)
Message-Id: <200111151536.fAFFa5Z00938@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   15-Nov-2001 16:36:05
  Branch: HEAD                             Handle: 2001111515360500

  Modified files:
    ossp-pkg/var            var.c

  Log:
    Replaced the use of the explicit character class type "char
    class[256]" by an abstract data type "char_class_t".

  Summary:
    Revision    Changes     Path
    1.19        +17 -15     ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 var.c
  --- ossp-pkg/var/var.c	2001/11/14 12:57:56	1.18
  +++ ossp-pkg/var/var.c	2001/11/15 15:36:05	1.19
  @@ -75,7 +75,7 @@
   static int tokenbuf_assign(tokenbuf_t *buf, const char *data, size_t len)
   {
       char *p;
  -    
  +
       if ((p = malloc(len + 1)) == NULL)
           return 0;
       memcpy(p, data, len);
  @@ -153,7 +153,7 @@
   {
       const char *p;
       size_t num;
  -    
  +
       num = 0;
       for (p = number->begin; p != number->end; ++p) {
           num *= 10;
  @@ -163,8 +163,10 @@
   }
   
   /* Routines for the expansion of quoted-pair expressions. */
  +
  +typedef char char_class_t[256]; /* 256 == 2 ^ sizeof(unsigned char)*8 */
   
  -static void expand_range(char a, char b, char class[256])
  +static void expand_range(char a, char b, char_class_t class)
   {
       do {
           class[(int)a] = 1;
  @@ -172,7 +174,7 @@
       while (++a <= b);
   }
   
  -static var_rc_t expand_character_class(const char *desc, char class[256])
  +static var_rc_t expand_character_class(const char *desc, char_class_t class)
   {
       size_t i;
   
  @@ -364,9 +366,9 @@
   /* The recursive-descent parser for variable expressions. */
   
   static int variable(const char *, const char *, const var_config_t *,
  -                    const char[256], var_cb_t, void *, int, tokenbuf_t *);
  +                    const char_class_t, var_cb_t, void *, int, tokenbuf_t *);
   static int command(const char *, const char *, const var_config_t *,
  -                   const char[256], var_cb_t, void *, int, tokenbuf_t *);
  +                   const char_class_t, var_cb_t, void *, int, tokenbuf_t *);
   
   static int text(const char *begin, const char *end, char varinit,
                   char escape)
  @@ -384,7 +386,7 @@
   }
   
   static int varname(const char *begin, const char *end,
  -                   const char nameclass[256])
  +                   const char_class_t nameclass)
   {
       const char *p;
       for (p = begin; p != end && nameclass[(int) *p]; ++p);
  @@ -433,7 +435,7 @@
   
   static int expression(const char *begin, const char *end,
                         const var_config_t *config,
  -                      const char nameclass[256], var_cb_t lookup,
  +                      const char_class_t nameclass, var_cb_t lookup,
                         void *lookup_context, int force_expand,
                         tokenbuf_t *result)
   {
  @@ -581,7 +583,7 @@
   }
   
   static int variable(const char *begin, const char *end,
  -                    const var_config_t *config, const char nameclass[256],
  +                    const var_config_t *config, const char_class_t nameclass,
                       var_cb_t lookup, void *lookup_context,
                       int force_expand, tokenbuf_t *result)
   {
  @@ -641,7 +643,7 @@
   
   static int exptext_or_variable(const char *begin, const char *end,
                                  const var_config_t *config,
  -                               const char nameclass[256], var_cb_t lookup,
  +                               const char_class_t nameclass, var_cb_t lookup,
                                  void *lookup_context, int force_expand,
                                  tokenbuf_t *result)
   {
  @@ -693,7 +695,7 @@
   
   static int substext_or_variable(const char *begin, const char *end,
                                   const var_config_t *config,
  -                                const char nameclass[256], var_cb_t lookup,
  +                                const char_class_t nameclass, var_cb_t lookup,
                                   void *lookup_context, int force_expand,
                                   tokenbuf_t *result)
   {
  @@ -1166,7 +1168,7 @@
   }
   
   static int command(const char *begin, const char *end,
  -                   const var_config_t *config, const char nameclass[256],
  +                   const var_config_t *config, const char_class_t nameclass,
                      var_cb_t lookup, void *lookup_context, int force_expand,
                      tokenbuf_t *data)
   {
  @@ -1502,7 +1504,7 @@
   
   static var_rc_t input(const char *begin, const char *end,
                         const var_config_t *config,
  -                      const char nameclass[256], var_cb_t lookup,
  +                      const char_class_t nameclass, var_cb_t lookup,
                         void *lookup_context, int force_expand,
                         tokenbuf_t *output)
   {
  @@ -1553,12 +1555,12 @@
                       var_cb_t lookup, void *lookup_context,
                       const var_config_t *config, int force_expand)
   {
  -    char nameclass[256];
  +    char_class_t nameclass;
       var_rc_t rc;
       tokenbuf_t output;
   
       /* Argument sanity checks */
  -    if (input_buf == NULL || input_len == 0 || 
  +    if (input_buf == NULL || input_len == 0 ||
           result == NULL || result_len == NULL ||
           lookup == NULL)
           return VAR_ERR_INVALID_ARGUMENT;

From ossp-cvs-owner@ossp.org  Fri Nov 16 16:19:16 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAGFJEA33770; Fri, 16 Nov 2001 16:19:14 +0100 (CET)
Date: Fri, 16 Nov 2001 16:19:14 +0100 (CET)
Message-Id: <200111161519.fAGFJEA33770@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var SPEC
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   16-Nov-2001 16:19:14
  Branch: HEAD                             Handle: 2001111615191400

  Modified files:
    ossp-pkg/var            SPEC

  Log:
    The :? has been removed from the specification.

  Summary:
    Revision    Changes     Path
    1.2         +30 -34     ossp-pkg/var/SPEC
  ____________________________________________________________________________

  Index: ossp-pkg/var/SPEC
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 SPEC
  --- ossp-pkg/var/SPEC	2001/11/11 12:40:42	1.1
  +++ ossp-pkg/var/SPEC	2001/11/16 15:19:14	1.2
  @@ -1,6 +1,6 @@
   
   - Name:
  -   
  +
     OSSP var (Variable Expansion Library)
   
   - Description:
  @@ -18,38 +18,34 @@
     - Eine Variable kann im Text in der Form $name oder ${name} angegeben
       werden, wobei die Wahl der Klammern '{' '}' und des '$'
       parametriesiert werden können.
  - 
  +
     - Gültige Zeichen für einen Variablennamen sind konfigurierbar.
       Garbage in -- garbage out.
  - 
  +
     - Ein echtes '$'-Zeichen im Text kann durch Voranstellung eines
       wählbaren Escapezeichen dargestellt werden. Default ist der
       Backslash ('\').
  - 
  +
     - Der Aufrufer der Funktion soll steuern können, wie sich die Library
       verhält, wenn eine Variable nicht existiert. Denkbar sind:
  - 
  +
        - Abbruch mit Fehler,
        - die Variable wird zu "", oder
        - der Ausdruck wird unverändert in den Ausgabetext übernommen,
          sodaß eventuell ein zweiter Pass gemacht werden kann.
  - 
  +
     - ${parameter:-word} wird normal expandiert. Wenn "parameter" leer
       ist, wird stattdessen "word" eingesetzt.
  - 
  -  - ${parameter:?word} wird normal expandiert. Wenn "parameter" leer
  -    ist, bricht die Verarbeitung mit Fehler ab und "word" wird als
  -    Begründung zurückgegeben.
  - 
  +
     - ${parameter:+word} substituiert die Expansion von "${word}" wenn
       "parameter" nicht leer ist, sonst wird "" substituiert.
  - 
  +
     - ${parameter:o<start>-}, ${parameter:o<start>-<end>}
  - 
  +
     - ${parameter:o<start>,}, ${parameter:o<start>,<length>}
  - 
  +
     - ${parameter:#} expandiert zur Länge des Inhaltes von "parameter".
  - 
  +
     - ${parameter:s/pattern/string/[gti]} expandiert "parameter" und
       führt dann eine Ersetzung mittels des regulären Ausdrucks "pattern"
       durch. Wird das 'g'-Flag angegeben, wird nicht nur eine Instanz von
  @@ -57,25 +53,25 @@
       signalisiert, daß eine reine Text-Ersetzung ohne Unterstützung von
      regulären Ausdrücken gewünscht ist. Das 'i'-Flag besagt, daß die
       Suche nach "pattern" case-insensitiv durchgeführt wird.
  - 
  +
     - ${parameter:y/ochars/nchars/} expandiert den Inhalt von "parameter"
       und transformiert dabei nach dem Prinzip von tr(1) die "ochars" im
       Text zu "nchars".
  - 
  +
     - ${parameter:l} wandelt den Inhalt von "parameter" in
       Kleinbuchstaben, bevor es die Variable expandiert. Dies geschieht
       über toupper(3).
  - 
  +
     - ${parameter:u} wandelt den Inhalt von "parameter" in
       Großbuchstaben, bevor es die Variable expandiert. Dies geschieht
       über tolower(3).
  - 
  +
     - ${parameter:*word} expandiert zum leeren Wort, wenn "parameter"
       nicht leer ist, sonst zu "word".
  - 
  +
     - Jedes Vorkommen eines der folgenden Konstrukte im Text wird durch
       das zugehörige Sonderzeichen ersetzt.
  - 
  +
           \t          tab
           \n          newline
           \r          return
  @@ -88,7 +84,7 @@
       von <align> ("r" = right, "l" = left, "c" = center) noch fehlende
       Zeichen mit <string> aufgefuellt werden. Diest ist gedacht, um in
       Templates saubere Tabellen erzeugen zu koennen.
  -    Beispiele (foo="bar"): 
  +    Beispiele (foo="bar"):
           "${foo:p/6/./r}" -> "bar..."
           "${foo:p/6/./l}" -> "...bar"
           "${foo:p/6/./c}" -> ".bar.." (oder "..bar.", egal)
  @@ -97,26 +93,26 @@
   - API (var.h):
   
     | int (*var_cb_t)(void *context,
  -  |                 const char *varname, 
  +  |                 const char *varname,
     |                 size_t name_len,
  -  |                 char *const *data, 
  -  |                 size_t *data_len, 
  +  |                 char *const *data,
  +  |                 size_t *data_len,
     |                 char *malloced_buffer);
  -  |                 
  +  |
     | typdef struct {
     |     char  varinit;
     |     char  startdelim;
  -  |     char  enddelim;  
  -  |     char  escape;    
  -  |     char* namechars; 
  +  |     char  enddelim;
  +  |     char  escape;
  +  |     char* namechars;
     |     char  force_expand;
     | } var_config_t;
  -  | 
  +  |
     | extern const var_config_t var_config_default;
  -  | 
  -  | int var_expand(const char *input, 
  +  |
  +  | int var_expand(const char *input,
     |                size_t input_len,
  -  |                char **result, 
  +  |                char **result,
     |                size_t *result_len,
     |                const char **error_msg,
     |                varexp_lookup_cb lookup,
  @@ -127,7 +123,7 @@
   
     Makefile ..... build procedure (minimal only!)
     var.ac ....... Autoconf macro OSSP_VAR
  -  var.h ........ OSSP var public API 
  +  var.h ........ OSSP var public API
     var.c ........ OSSP var implementation
     var.pod ...... OSSP var manual page
     var_test.c ... OSSP var test suite

From ossp-cvs-owner@ossp.org  Fri Nov 16 16:44:19 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAGFiIc36938; Fri, 16 Nov 2001 16:44:18 +0100 (CET)
Date: Fri, 16 Nov 2001 16:44:18 +0100 (CET)
Message-Id: <200111161544.fAGFiIc36938@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   16-Nov-2001 16:44:18
  Branch: HEAD                             Handle: 2001111615441700

  Modified files:
    ossp-pkg/var            var.pod

  Log:
    Added all section of the man page, except for the PURPOSE section,
    which is till missing.

  Summary:
    Revision    Changes     Path
    1.3         +462 -59    ossp-pkg/var/var.pod
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.pod
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 var.pod
  --- ossp-pkg/var/var.pod	2001/11/13 12:47:59	1.2
  +++ ossp-pkg/var/var.pod	2001/11/16 15:44:17	1.3
  @@ -41,146 +41,549 @@
   
   =head1 THE LOOKUP CALLBACK
   
  +The function var_expand() does not know how to look the contents of a
  +variable up itself. Instead, it relies on a caller-supplied callback
  +function, which adheres to the var_cb_t function interface:
  +
  +    int lookup(void *context,
  +               const char *varname, size_t name_len,
  +               const char **data, size_t *data_len,
  +               size_t *buffer_size);
  +
  +This function will be called by var_expand() whenever it has to
  +retrieve the contents of, say, the variable $name, using the following
  +parameters:
  +
  +=over 4
  +
  +=item void *context
  +
  +The contents of context is passed through from the var_expand()'s
  +"lookup_context" parameter to the callback. This parameter can be used
  +by the programmer to provide internal data to the callback function
  +through var_expand().
  +
  +=item const char *varname
  +
  +This is a pointer to the name of the variable which's contents
  +var_expand() wishes to retrieve. In our example of looking up $name,
  +varname would point to the string "name". Please note that the string
  +is NOT necessarily terminated by a '\0' character! If the callback
  +function needs to pass the string to the standard C library string
  +manipulation functions during the lookup, it will have to copy the
  +string into a buffer of its own to ensure it is null-terminated.
  +
  +=item size_t name_len
  +
  +The "name_len" parameter contains the length of the variable name
  +"varname" points to.
  +
  +=item const char **data
  +
  +This is a pointer to the location where the callback function should
  +store the pointer to the contents of the variable.
  +
  +=item size_t *data_len
  +
  +This is a pointer to the location where the callback function should
  +store the length of the contents of the variable.
  +
  +=item size_t *buffer_size
  +
  +This is a pointer to the location where the callback function should
  +store the size of the buffer that has been allocated to hold the
  +contents of the looked-up variable. If no buffer has been allocated at
  +all, because the variable uses some other means of storing the
  +contents -- as in the case of getenv(3), where the system provides the
  +buffer for the string --, this should be zero (0).
  +
  +In case a buffer size greater than zero is returned by the callback
  +function, var_expand() will make use of that buffer internally if
  +possible. If will also free(3) the buffer when it is not needed
  +anymore.
  +
  +=back
  +
  +The return code of the lookup function is interpreted by var_expand()
  +accordin to the following convention: Any return code greater than
  +zero means success, that is, the contents of the variable has been
  +looked-up successfully and the "data", "data_len", and "buffer_size"
  +locations have been filled with appropriate values. A return code of
  +zero (0) means that the variable was undefined and its contents
  +therefore could not be looked-up. A return code of less than zero
  +means that the lookup failed for some other reason, such as a system
  +error or lack of resources. In the latter two cases, the contents of
  +"data", "data_len" and "buffer_size" is assumed to be undefined.
  +Hence, var_expand() will not free(3) any possibly allocated buffers,
  +the callback must take care of that itself.
  +
  +If a callback returns zero -- meaning the variable is undefined --,
  +the behavior of var_expand() depends on the setting of the
  +"force_expand" parameter. If force-expand mode  has been set,
  +var_expand() will fail with a VAR_ERR_UNDEFINED_VARIABLE error. If
  +force-expand mode has not been set, var_expand() will copy the
  +expression that caused the lookup to fail verbatimly into the output
  +buffer so that an additional expanding pass may expand it later.
  +
  +If the callback returns an error -- meaning a return code less than
  +zero --, var_expand() will fail with the return code it got from the
  +callback. Callback implementors are encouraged to re-use the error
  +codes defined in var.h whereever possible. An example of an error code
  +a callback might want to reuse is VAR_ERR_OUT_OF_MEMORY. If the cause
  +for the error can not be denoted by an error code defined in var.h,
  +callback implementors should use the error code VAR_ERR_CALLBACK,
  +which is currently defined to -64. It is guaranteed that no error code
  +smaller than VAR_ERR_CALLBACK is ever used by var_expand() or
  +VAR_UNESCAPE(), so if the callback implementor wishes to distinguish
  +between different reasons for failure, he can define his own set of
  +errors
  +
  +    typedef enum {
  +        LOOKUP_ERROR_ONE   = -3,
  +        LOOKUP_ERROR_TWO   = -2,
  +        LOOKUP_ERROR_THREE = -1,
  +    } lookup_error_t;
  +
  +and return, say, "(VAR_ERR_CALLBACK - LOOKUP_ERROR_TWO)".
  +
  +To illustrate the implementation of a proper callback, take a look at
  +the following expamle that accesses the system environment via
  +getenv(3) to lookup variables and to return them to var_expand():
  +
  +    int env_lookup(void *context,
  +        const char *varname, size_t name_len,
  +        const char **data, size_t *data_len,
  +        size_t *buffer_size)
  +    {
  +        char tmp[256];
  +
  +        if (name_len > sizeof(tmp) - 1) {
  +        /* Callback can't expand variable names longer than
  +           sizeof(tmp) characters. */
  +
  +            return VAR_ERR_CALLBACK;
  +        }
  +        memcpy(tmp, varname, name_len);
  +        tmp[name_len] = '\0';
  +        *data = getenv(tmp);
  +        if (*data == NULL)
  +            return 0;
  +        *data_len = strlen(*data);
  +        *buffer_size = 0;
  +        return 1;
  +    }
  +
  +=head1 SUPPORTED NAMED CHARACTERS
  +
  +The var_unescape() function knows the following constructs:
  +
  +=over 4
  +
  +=item \t, \r, \n
  +
  +These expressions are replaced by the appropriate binary
  +representation of a tab, a carrige return and a newline respectively.
  +
  +=item \abc
  +
  +This expression is replaced by the value of the octal number "abc".
  +Valid digits of "a" are in the range of '0' to '3', for digits "b" and
  +"c" in the range of '0' to '7'. Please note that an octal expression
  +is recognized only if the backslash is followed by three digits! The
  +expression "\1a7", for example, is interpreted as the quoted pair "\1"
  +followed by the verbatim text "a7".
  +
  +=item \xAB
  +
  +This expression is replaced by the value of the hexadecimal number
  +$AB. Both characters "A" and "B" must be in the range of '0' to '9',
  +'a' to 'f', or 'A' to 'F'.
  +
  +=item \x{...}
  +
  +This expression denotes a set of grouped hexadecimal numbers. The
  +"..." part may consist of an arbitrary number of hexadecimal pairs,
  +such as in "\x{}", "\x{ff}", or "\x{55ffab04}". The empty expression
  +"\x{}" is a no-op; it will not produce any output.
  +
  +This construct may be useful to specify multi-byte characters (as in
  +Unicode). Even though "\x{0102}" is effectively equivalent to
  +"\x01\x02", the grouping of values may be useful in other contexts,
  +even though var_unescape() or var_expand() make no direct use of it.
  +
  +=back
  +
   =head1 SUPPORTED VARIABLE EXPRESSIONS
   
  +Additionally to the ordinary variable expansion of $name or ${name},
  +var_expand() supports a number of operations that can be performed on
  +the contents of "name" before it is copied to the output buffer. Such
  +operations are always denoted by appending the a colon and a command
  +character to the variable name, for expample: ${name:l} or
  +${name:s/foo/bar/}. You can specify multiple operations, which are
  +executed from the left to the right, for expample:
  +${name:l:s/foo/bar/:u}.
  +
  +Also, you can nest variable expansion and command execution pretty
  +much anywhere in the construct, for example: ${name:s/$foo/$bar/g}. In
  +that context is probably useful to have a look at the formal
  +expression grammar provided in section "EBNF GRAMMAR OF SUPPORTED
  +EXPRESSIONS".
  +
  +Generally, all operations described below do not modify the contents
  +of any variable -- var_expand() generally can't set variables, it will
  +only read them. If the description says that an operation "replaces
  +the contents of variable $foo", it is meant that rather than expanding
  +the expression the the contents of $foo, it will expand to the
  +modified string instead. The contents of $foo is left untouched in any
  +case.
  +
   =over 4
   
   =item ${name:#}
   
  +This operation will expand to the length of the contents of $name. If,
  +for example, "$FOO" is "foobar", then "${FOO:#}" will result in "6".
  +
   =item ${name:l}
   
  +This operation will turn the contents of $name to all lower-case,
  +using the system routine tolower(3), thereby possibly using the
  +system's localization settings.
  +
   =item ${name:u}
   
  +This operation will turn the contents of $name to all upper-case,
  +using the system routine toupper(3), thereby possibly using the
  +system's localization settings.
  +
   =item ${name:*<word>}
   
  +This operation will replace the contents of $name with the empty
  +string ("") if $name is not empty. Otherwise, it will replace it by
  +"word".
  +
   =item ${name:-<word>}
   
  -=item ${name:?<word>}
  +This operation will replace the contents of $name with "word" if $name
  +is empty. Otherwise, it will expand to the contents of $name.
   
   =item ${name:+<word>}
   
  +This operation will replace the contents of $name with "word" if $name
  +is not empty. Otherwise, it will expand to the contents of $name.
  +
   =item ${name:o<start>-<end>}
   
  +This operation will cut the range of "start" to "end" out of the
  +contents of $name and return that. ${name:o3-4} means, for instance,
  +to return the next 4 charaters starting at position 3 in the string.
  +Please note that start positions begin at zero (0)! If the "end" range
  +is left out, as in ${name:o3-}, the operation will return the string
  +starting at position 3 until the end.
  +
   =item ${name:o<start>,<length>}
   
  +This operation will cut the string starting at position "start" to
  +ending position "end" out of the contents of $name and return that.
  +Please note that the character at position "end" is not included in
  +the result, "end - 1" is the last character position returned.
  +${name:o3,4}, for instance, will return the substring from position 3
  +to position 4 -- that is exactly one character. Also, please note that
  +start positions begin at zero (0)! If the "end" parameter is left out,
  +as in ${name:o3,}, the operation will return the string starting at
  +position 3 until the end.
  +
   =item ${name:s/<pattern>/<string>/[gti]}
   
  +This operation will perform a search-and-replace operation on the
  +contents of $name and return the result. The behavior of the
  +search-and-replace is modified by the following flags parameter: If a
  +'t' flag has been provided, a plain text search-and-replace is
  +performed, otherwise, the default is to a regular expression
  +search-and-replace as in the system utility sed(1). If the 'g' flag
  +has been provided, the search-and-replace will replace all instances
  +of "pattern" by "replace", otherwise, the default is to replace only
  +the first instance. If the 't' flag has been provided, the
  +search-and-replace will take place case-insensitively, otherwise, the
  +default is to distinguish character case.
  +
   =item ${name:y/<ochars>/<nchars>/}
   
  +This operation will translate all characters in the contents of $name
  +that are found in the "ochars" class to the corresponding character in
  +the "nchars" class, just like the system utility tr(1) does. Both
  +"ochars" and "nchars" may contain character range specifications, for
  +example "a-z0-9". A hyphon as the first or last character of the class
  +specification is interpreted literally. Both the "ochars" and the
  +"nchars" class must contain the same number of characters after all
  +ranges are expanded, or var_expand() will abort with an error.
  +
  +If, for example, "$FOO" would contain "foobar", then
  +"${FOO:y/a-z/A-Z/} would yield "FOOBAR". Another goodie is to use that
  +operation to ROT13-encrypt or decrypt a string with the expression
  +"${FOO:y/a-z/n-za-m/}".
  +
   =item ${name:p/<width>/<string>/<align>}
   
  +This operation will pad the contents of $name with "string" according
  +to the "align" parameter, so that the result is at least "width"
  +characters long. Valid parameters for align are 'l' (left), 'r'
  +(right), or 'c' (center). The "string" parameter may contain multiple
  +characters, if you see any use for that.
  +
  +If, for example, "$FOO" is "foobar", then "${FOO:p/20/./c}" would
  +yield ".......foobar......."; "${FOO:p/20/./l}" would yield
  +"foobar.............."; and "${FOO:p/20/./r}" would yield
  +"..............foobar";
  +
   =back
   
   =head1 EBNF GRAMMAR OF SUPPORTED EXPRESSIONS
  -
  -input      : (TEXT|variable)*
   
  -variable   : '$' (name|expression)
  + input      : (TEXT|variable)*
   
  -expression : START-DELIM (name|variable)+ (':' command)* END-DELIM
  + variable   : '$' (name|expression)
   
  -name       : (VARNAME|SPECIAL1|SPECIAL2)+
  + expression : START-DELIM (name|variable)+ (':' command)* END-DELIM
   
  -command    : '-' (EXPTEXT|variable)+
  -           | '+' (EXPTEXT|variable)+
  -           | 'o' (NUMBER ('-'|',') (NUMBER)?)
  -           | '#'
  -           | '*' (EXPTEXT|variable)+
  -           | 's' '/' (variable|SUBSTTEXT)+ '/' (variable|SUBSTTEXT)* '/' ('g'|'i'|'t')*
  -           | 'y' '/' (variable|SUBSTTEXT)+ '/' (variable|SUBSTTEXT)* '/'
  -           | 'p' '/' NUMBER '/' (variable|SUBSTTEXT)* '/' ('r'|'l'|'c')
  -           | 'l'
  -           | 'u'
  + name       : (VARNAME)+
   
  -START-DELIM: '{'
  + command    : '-' (EXPTEXT|variable)+
  +            | '+' (EXPTEXT|variable)+
  +            | 'o' (NUMBER ('-'|',') (NUMBER)?)
  +            | '#'
  +            | '*' (EXPTEXT|variable)+
  +            | 's' '/' (variable|SUBSTTEXT)+ '/' (variable|SUBSTTEXT)* '/' ('g'|'i'|'t')*
  +            | 'y' '/' (variable|SUBSTTEXT)+ '/' (variable|SUBSTTEXT)* '/'
  +            | 'p' '/' NUMBER '/' (variable|SUBSTTEXT)* '/' ('r'|'l'|'c')
  +            | 'l'
  +            | 'u'
   
  -END-DELIM  : '}'
  + START-DELIM: '{'
   
  -VARNAME    : '[a-zA-Z0-9_]+'
  + END-DELIM  : '}'
   
  -SPECIAL1   : '['
  + VARNAME    : '[a-zA-Z0-9_]+'
   
  -SPECIAL2   : ']'
  + NUMBER     : '[0-9]+'
   
  -NUMBER     : '[0-9]+'
  + SUBSTTEXT  : '[^$/]'
   
  -SUBSTTEXT  : '[^$/]'
  + EXPTEXT    : '[^$}:]+'
   
  -EXPTEXT    : '[^$}:]+'
  + TEXT       : '[^$]+'
   
  -TEXT       : '[^$]+'
  +Please note that the descriptions of START-DELIM, END-DELIM, VARNAME,
  +SUBSTEXT, and EXPTEXT shown here assume that var_expand() has been
  +called in the default configuration. In thruth, the contents of
  +VARNAME corresponds directly to the setting of "namechars" in the
  +var_config_t structure. Similarly, the dollar ('$') corresponds
  +directly to the setting of "varinit", and the '{' and '}' characters
  +to "startdelim" and "enddelim" respectively.
   
   =head1 CODES RETURNED BY THE LIBRARY
   
  +Generally, all routines part of that library follow the convention
  +that a return code of zero or greater denotes success and a return
  +code of less than zero denotes failure. (This is slightly different
  +for the callbacks, please see section "THE LOOKUP CALLBACK" for
  +further details.) In order to distinguish the various causes of
  +failure, the following set of defines is provided in var.h:
  +
   =over 4
   
  -=item VAR_CALLBACK_ERROR
  +=item VAR_OK
   
  -=item VAR_EMPTY_PADDING_FILL_STRING
  +No errors; everything went fine.
   
  -=item VAR_MISSING_PADDING_WIDTH
  +=item VAR_ERR_INCOMPLETE_QUOTED_PAIR
   
  -=item VAR_MALFORMATTED_PADDING
  +The configured escape character as the last character in the input
  +buffer.
   
  -=item VAR_INCORRECT_TRANSPOSE_CLASS_SPEC
  +=item VAR_ERR_INVALID_ARGUMENT
   
  -=item VAR_EMPTY_TRANSPOSE_CLASS
  +Any of the provided arguments is invalid, for expample: the pointer to
  +the input buffer is NULL.
   
  -=item VAR_TRANSPOSE_CLASSES_MISMATCH
  +=item VAR_ERR_SUBMATCH_OUT_OF_RANGE
   
  -=item VAR_MALFORMATTED_TRANSPOSE
  +During execution of a ${name:s/pattern/replace/flags} operation, a
  +submatch has been referenced in the "replace" part, which's number is
  +greater than the number of submatches encountered in the "pattern"
  +part, for expample: ${name:s/foo(bar)/\2/}.
   
  -=item VAR_OFFSET_LOGIC_ERROR
  +=item VAR_ERR_UNKNOWN_QUOTED_PAIR_IN_REPLACE
   
  -=item VAR_OFFSET_OUT_OF_BOUNDS
  +During execution of a ${name:s/pattern/replace/flags} operation, the
  +parser encountered an unknown quoted pair in the "replace" part. Valid
  +quoted pairs are "\\", "\0", "\1", ... , "\9" only.
   
  -=item VAR_RANGE_OUT_OF_BOUNDS
  +=item VAR_ERR_EMPTY_PADDING_FILL_STRING
   
  -=item VAR_INVALID_OFFSET_DELIMITER
  +The "fill" part in an ${name:p/width/fill/pos/} expression was found
  +to be empty.
   
  -=item VAR_MISSING_START_OFFSET
  +=item VAR_ERR_MISSING_PADDING_WIDTH
   
  -=item VAR_EMPTY_SEARCH_STRING
  +The "width" part in an ${name:p/width/fill/pos/} expression was found
  +to be empty.
   
  -=item VAR_MISSING_PARAMETER_IN_COMMAND
  +=item VAR_ERR_MALFORMATTED_PADDING
   
  -=item VAR_INVALID_REGEX_IN_REPLACE
  +Any of the "/" delimiters was missing while parsing a
  +${name:p/width/fill/pos/} expression.
   
  -=item VAR_UNKNOWN_REPLACE_FLAG
  +=item VAR_ERR_INCORRECT_TRANSPOSE_CLASS_SPEC
   
  -=item VAR_MALFORMATTED_REPLACE
  +While parsing a ${name:y/old-class/new-class/} expression, any of the
  +character class specifications had a start-of-range character that was
  +greater (in terms of ASCII encoding) than the end-of-range character,
  +for expample: "[z-a]".
   
  -=item VAR_UNKNOWN_COMMAND_CHAR
  +=item VAR_ERR_EMPTY_TRANSPOSE_CLASS
   
  -=item VAR_INPUT_ISNT_TEXT_NOR_VARIABLE
  +While parsing a ${name:y/old-class/new-class/} expression, any of the
  +character class specifications was found to be empty.
   
  -=item VAR_UNDEFINED_VARIABLE
  +=item VAR_ERR_TRANSPOSE_CLASSES_MISMATCH
   
  -=item VAR_INCOMPLETE_VARIABLE_SPEC
  +While parsing a ${name:y/old-class/new-class/} expression, the number
  +of characters found in the expanded "old-class" was different than the
  +number of characters in new-class".
   
  -=item VAR_OUT_OF_MEMORY
  +=item VAR_ERR_MALFORMATTED_TRANSPOSE
   
  -=item VAR_INVALID_CONFIGURATION
  +Any of the "/" delimiters was missing while parsing a
  +${name:y/old-class/new-class/} expression.
   
  -=item VAR_INCORRECT_CLASS_SPEC
  +=item VAR_ERR_OFFSET_LOGIC
   
  -=item VAR_INCOMPLETE_GROUPED_HEX
  +The "end" offset in a ${name:o<start>,<end>} expression is smaller
  +than the "start" offset.
   
  -=item VAR_INCOMPLETE_OCTAL
  +=item VAR_ERR_OFFSET_OUT_OF_BOUNDS
   
  -=item VAR_INVALID_OCTAL
  +The "start" offset in a ${name:o<start>,<end>} expression is greater
  +than the number of characters found in $name.
   
  -=item VAR_OCTAL_TOO_LARGE
  +=item VAR_ERR_RANGE_OUT_OF_BOUNDS
   
  -=item VAR_INVALID_HEX
  +The end-of-range in a ${name:o<start>,<end>} or ${name:o<start>-<end>}
  +expression would be greater than the number of characters found in
  +$name.
   
  -=item VAR_INCOMPLETE_HEX
  +=item VAR_ERR_INVALID_OFFSET_DELIMITER
   
  -=item VAR_INCOMPLETE_NAMED_CHARACTER
  +The two numbers in an offset operation are delimited by a character
  +different from "," or "-".
   
  -=item VAR_INCOMPLETE_QUOTED_PAIR
  +=item VAR_ERR_MISSING_START_OFFSET
   
  -=item VAR_OK
  +The "start" offset in a ${name:o<start>,<end>} or
  +${name:o<start>-<end>} expression was found to be empty.
  +
  +=item VAR_ERR_EMPTY_SEARCH_STRING
  +
  +The "pattern" part of a ${name:s/pattern/replace/flags} expression was
  +found to be empty.
  +
  +=item VAR_ERR_MISSING_PARAMETER_IN_COMMAND
  +
  +In a ${name:+word}, ${name:-word}, or ${name:*word} expression, the
  +"word" part was missing -- that means empty.
  +
  +=item VAR_ERR_INVALID_REGEX_IN_REPLACE
  +
  +While compiling the "pattern" part of a
  +${name:s/pattern/replace/flags} expression, regcomp(3) failed with an
  +error.
  +
  +=item VAR_ERR_UNKNOWN_REPLACE_FLAG
  +
  +In a ${name:s/pattern/replace/flags} expression, a flag other that
  +"t", "i", or "g" was found.
  +
  +=item VAR_ERR_MALFORMATTED_REPLACE
  +
  +Any of the "/" delimiters was missing while parsing a
  +${name:s/pattern/replace/flags} expression.
  +
  +=item VAR_ERR_UNKNOWN_COMMAND_CHAR
  +
  +In a ${name:<char>} expression, "char" did not specify any of the
  +supported operations.
  +
  +=item VAR_ERR_INPUT_ISNT_TEXT_NOR_VARIABLE
  +
  +At one point during parsing of the input buffer, an expression was
  +found that was neither verbatim text nor a variable expression. This
  +usually is the result of a inconsistent configuration of var_expand()
  +via the var_config_t paramater.
  +
  +=item VAR_ERR_UNDEFINED_VARIABLE
  +
  +Looking up a variable's contents failed and var_expand() was running
  +in "force expand" mode.
  +
  +=item VAR_ERR_INCOMPLETE_VARIABLE_SPEC
  +
  +The input buffer ended in the middle of a ${name} expression, or the
  +configured variable initializer character was found to be the last
  +character of the input buffer.
  +
  +=item VAR_ERR_OUT_OF_MEMORY
  +
  +var_expand() failed while malloc(3)ing internally needed buffers.
  +
  +=item VAR_ERR_INVALID_CONFIGURATION
  +
  +Any of the characters configured in the var_config_t structure as a
  +special ("varinit", "startdelim", "enddelim", and "escape") was found
  +to be a member of the "namechars" class.
  +
  +=item VAR_ERR_INCORRECT_CLASS_SPEC
  +
  +The character class specification "namechars" of the var_config_t
  +structure provided to var_expand was syntactically incorrect, that is,
  +the start-of-range was greater than end-of-range. (See also
  +VAR_ERR_INCORRECT_TRANSPOSE_CLASS_SPEC.)
  +
  +=item VAR_ERR_INCOMPLETE_GROUPED_HEX
  +
  +var_unescape() encountered the end of the input buffer in the middle
  +of a grouped-hex "\x{...}" expression.
  +
  +=item VAR_ERR_INCOMPLETE_OCTAL
  +
  +var_unescape() encountered the end of the input buffer in the middle
  +of an octal "\000" expression.
  +
  +=item VAR_ERR_INVALID_OCTAL
  +
  +The second of third digit of an octal "\000" expression was found not
  +be in the range of '0' to '7'.
  +
  +=item VAR_ERR_OCTAL_TOO_LARGE
  +
  +The value specified via an octal "\000" expression was larger than
  +0377.
  +
  +=item VAR_ERR_INVALID_HEX
  +
  +Any of the digits of a hex "\x00" expression was found not be in the
  +range of '0' to '9' or 'a' to 'b'.
  +
  +=item VAR_ERR_INCOMPLETE_HEX
  +
  +var_unescape() encountered the end of the input buffer in the middle
  +of a hex "\x00" expression.
  +
  +=item VAR_ERR_INCOMPLETE_NAMED_CHARACTER
  +
  +var_unescape() encountered the backslash ('\') as the last character
  +of the input buffer.
   
   =back
   

From ossp-cvs-owner@ossp.org  Fri Nov 16 17:01:22 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAGG1LR39632; Fri, 16 Nov 2001 17:01:21 +0100 (CET)
Date: Fri, 16 Nov 2001 17:01:21 +0100 (CET)
Message-Id: <200111161601.fAGG1LR39632@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   16-Nov-2001 17:01:21
  Branch: HEAD                             Handle: 2001111616012000

  Modified files:
    ossp-pkg/var            var.c

  Log:
    Added support for the PCRE library: If HAVE_PCREPOSIX is defined at
    compile time, the PCRE POSIX wrapper functions will be used rather
    than the system's regular expression engine.

  Summary:
    Revision    Changes     Path
    1.20        +5  -1      ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 var.c
  --- ossp-pkg/var/var.c	2001/11/15 15:36:05	1.19
  +++ ossp-pkg/var/var.c	2001/11/16 16:01:20	1.20
  @@ -32,7 +32,11 @@
   #include <stdio.h>
   #include <errno.h>
   #include <sys/types.h>
  -#include <regex.h>
  +#if defined(HAVE_PCREPOSIX)
  +#  include <pcreposix.h>
  +#else
  +#  include <regex.h>
  +#endif
   #include "var.h"
   
   /* The default configuration for the parser. */

From ossp-cvs-owner@ossp.org  Fri Nov 16 17:36:00 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fAGGZxB44431; Fri, 16 Nov 2001 17:35:59 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 6F6B24CE726; Fri, 16 Nov 2001 17:35:59 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pcre pcre-config.in
Message-Id: <20011116163559.6F6B24CE726@visp.engelschall.com>
Date: Fri, 16 Nov 2001 17:35:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   16-Nov-2001 17:35:59
  Branch: HEAD                             Handle: 2001111616355900

  Modified files:
    ossp-pkg/pcre           pcre-config.in

  Log:
    Reverse order: pcreposix depends on pcre.
    Found out by Peter Simons <simons@cryp.to>

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/pcre/pcre-config.in
  ____________________________________________________________________________

  Index: ossp-pkg/pcre/pcre-config.in
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 pcre-config.in
  --- ossp-pkg/pcre/pcre-config.in	1999/08/26 08:25:32	1.2
  +++ ossp-pkg/pcre/pcre-config.in	2001/11/16 16:35:59	1.3
  @@ -56,7 +56,7 @@
               echo "-L$pcre_libdir"
               ;;
           --libs)
  -            echo "-lpcre -lpcreposix"
  +            echo "-lpcreposix -lpcre"
               ;;
           * )             
               echo "$0:Error: Invalid option" 1>&2

From ossp-cvs-owner@ossp.org  Fri Nov 16 20:40:57 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAGJeuB97783; Fri, 16 Nov 2001 20:40:56 +0100 (CET)
Date: Fri, 16 Nov 2001 20:40:56 +0100 (CET)
Message-Id: <200111161940.fAGJeuB97783@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO l2.h.in l2_p.h l2_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   16-Nov-2001 20:40:56
  Branch: HEAD                             Handle: 2001111619405500

  Modified files:
    ossp-pkg/l2             TODO l2.h.in l2_p.h l2_test.c

  Log:
    Mostly finished phase in of timer code to l2_env. Buffer needs work.

  Summary:
    Revision    Changes     Path
    1.43        +10 -0      ossp-pkg/l2/TODO
    1.22        +1  -0      ossp-pkg/l2/l2.h.in
    1.31        +10 -3      ossp-pkg/l2/l2_p.h
    1.47        +3  -0      ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.42 -r1.43 TODO
  --- ossp-pkg/l2/TODO	2001/11/10 14:04:05	1.42
  +++ ossp-pkg/l2/TODO	2001/11/16 19:40:55	1.43
  @@ -91,6 +91,7 @@
     This leads to easy reimplementation of the prefix channel (asynchronous)
   
   MS:
  +- netcat can probably replace l2_sockmon, remove from build and add netcat
   - pipe channel may need a big overhaul if we redesign
     it around the asynch channel principle
   - review pipe handler for dangling descriptors
  @@ -100,12 +101,21 @@
   - consider adding options such as PCRE_CASELESS to filter channel
   - implement "action" channel, can be based on pipe channel
   - correct problem with multiple buffer channels using the timer
  +    can be solved by running a signal handler at the environment level, then
  +    approximating the (multiple) user-chosen timer intervals by setting the
  +    environment timer to expire at the time of the least common denominator of
  +    the configured timer intervals
  +      ie: tmr1 9secs; tmr2 6secs; envtmr will expire every lcd(9,6) = 3secs
  +    alarm and setitimer methods are using different param types! Fixit.
  +    review newly introduced timer code for L2_OK and L2_OK_PASS inconsistency
   - solve problem with buffer (timer), irc (ping), and buffer (autoflush), by
     creating sleep/ping threads. The disadvantage is that we must depend on a
     pth installation, and force the parent app to be multithreaded.
     Alternatively, we can spawn a management process in l2_stream_create(), who
     owns management resources globally available to all channels. Or write the
     l2 mini-protocol :-(
  +- split all timer server code out of L2 and into new multiplexed timer object
  +    probably must use callbacks, unless user signal space is occupied
   
   ISSUES
   ------
  Index: ossp-pkg/l2/l2.h.in
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 l2.h.in
  --- ossp-pkg/l2/l2.h.in	2001/11/07 16:17:09	1.21
  +++ ossp-pkg/l2/l2.h.in	2001/11/16 19:40:55	1.22
  @@ -208,6 +208,7 @@
   l2_result_t   l2_env_handler        (l2_env_t *env, l2_handler_t *h);
   l2_result_t   l2_env_errorinfo      (l2_env_t *env, l2_result_t rv, const char *fmt, ...);
   char         *l2_env_strerror       (l2_env_t *env, l2_result_t rv);
  +l2_result_t   l2_env_settimer       (l2_env_t *env, int iInterval)
   
   /* channel operations */
   l2_result_t   l2_channel_create     (l2_channel_t **ch, l2_env_t *env, const char *name);
  Index: ossp-pkg/l2/l2_p.h
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 l2_p.h
  --- ossp-pkg/l2/l2_p.h	2001/11/07 11:37:18	1.30
  +++ ossp-pkg/l2/l2_p.h	2001/11/16 19:40:55	1.31
  @@ -42,6 +42,10 @@
   #include "l2_ut_pcre.h"
   #include "l2_ut_sa.h"
   
  +#ifdef HAVE_SYS_TIME_H /* must come after include l2_config.h */
  +#include <sys/time.h>
  +#endif
  +
   /* assertion and tracing support */
   #ifndef DEBUG
   #define NDEBUG
  @@ -67,9 +71,11 @@
           cu(value)
   
   /* some hard-coded sizes :-( */
  -#define L2_MAX_MSGSIZE    4096
  -#define L2_MAX_FORMATTERS  128
  -#define L2_MAX_HANDLERS    128
  +#define L2_MAX_MSGSIZE         4096
  +#define L2_MAX_FORMATTERS       128
  +#define L2_MAX_HANDLERS         128
  +#define L2_BROKEN_TIMER          -1 
  +#define L2_BUFFER_TIMER ITIMER_REAL /* for [s|g]etitimer() and alarm() */
   
   /* internal channel state */
   typedef enum {
  @@ -101,6 +107,7 @@
   struct l2_env_st {
       unsigned int          levelmask;
       unsigned int          flushmask;
  +    int                   interval;
       l2_formatter_entry_t  formatters[L2_MAX_FORMATTERS];
       l2_handler_t         *handlers[L2_MAX_HANDLERS];
       char                  message[L2_MAX_MSGSIZE];
  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.46 -r1.47 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/11/08 21:58:00	1.46
  +++ ossp-pkg/l2/l2_test.c	2001/11/16 19:40:55	1.47
  @@ -80,12 +80,15 @@
           die(env, rv, "failed to configure formatter for %%x");
       if ((rv = l2_env_formatter(env, 'S', l2_util_fmt_dump, NULL)) != L2_OK)
           die(env, rv, "failed to configure formatter for %%S");
  +    if ((rv = l2_env_settimer(env, 20)) != L2_OK)
  +        die(env, rv, "failed to configure timer");
   
   #if 1
       spec = "noop -> {"
              "  filter(regex=hecking, negate=0)"
              "  -> prefix(prefix=\"[%d-%m-%Y/%H:%M:%S] %L test[%P]: \", timezone=local)"
              "     -> buffer(size=800)"
  +/*           "     -> buffer(size=800, timer=on)"*/
              "        -> file(path=l2_test.log, append=1, perm=420) ;"
              "  syslog(ident=L2-Test, facility=user, "
              "         remotehost=en1, logpid=1, target=remote)"

From ossp-cvs-owner@ossp.org  Fri Nov 16 20:41:52 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAGJfpm97880; Fri, 16 Nov 2001 20:41:51 +0100 (CET)
Date: Fri, 16 Nov 2001 20:41:51 +0100 (CET)
Message-Id: <200111161941.fAGJfpm97880@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_spec_ebnf
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   16-Nov-2001 20:41:51
  Branch: HEAD                             Handle: 2001111619415000

  Modified files:
    ossp-pkg/l2             l2_spec_ebnf

  Log:
    Reflect last state of grammar before killing it (it's in the pod file now.)

  Summary:
    Revision    Changes     Path
    1.3         +40 -29     ossp-pkg/l2/l2_spec_ebnf
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_spec_ebnf
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2_spec_ebnf
  --- ossp-pkg/l2/l2_spec_ebnf	2001/11/14 13:59:21	1.2
  +++ ossp-pkg/l2/l2_spec_ebnf	2001/11/16 19:41:50	1.3
  @@ -1,39 +1,50 @@
  -tree : stream                                              /* channel tree */
  -     ;
  +=pod
   
  -stream : channel                                     /* stream of channels */
  -       | channel T_OP_ARROW stream
  -       | channel T_OP_ARROW '{' streams '}'
  -       ;
  -
  -streams : stream                                /* list of sibling streams */
  -        | stream ';' streams
  -        ;
  -
  -channel : channel_level '/' channel_level ':' channel_cons      /* channel */
  -        | channel_level ':' channel_cons
  -        | channel_cons
  -        ;
  -
  -channel_level : T_ID                                      /* channel level */
  -              | '(' channel_level_mask ')'
  -              ;
  +=head1 NAME
   
  +B<L2CDL> - Logging Library Channel Definition Language
  +
  +=head1 EBNF GRAMMAR
  +
  +B<L2CDL> - Logging Library Channel Definition Language
  +
  +tree               : stream                                /* channel tree */
  +                   ;
  +
  +stream             : channel                         /* stream of channels */
  +                   | channel T_OP_ARROW stream
  +                   | channel T_OP_ARROW '{' streams '}'
  +                   ;
  +
  +streams            : stream                     /* list of sibling streams */
  +                   | stream ';' streams
  +                   ;
  +
  +/* channel */
  +channel            : channel_level '/' channel_level ':' channel_cons
  +                   | channel_level ':' channel_cons
  +                   | channel_cons
  +                   ;
  +
  +channel_level      : T_ID                                 /* channel level */
  +                   | '(' channel_level_mask ')'
  +                   ;
  +
   channel_level_mask : T_ID                            /* channel level mask */
                      | T_ID '|' channel_level_mask
                      ;
   
  -channel_cons : T_ID channel_params                  /* channel constructor */
  -             ;
  +channel_cons       : T_ID channel_params            /* channel constructor */
  +                   ;
   
  -channel_params : /* empty */                         /* channel parameters */
  -               | '(' channel_param_list ')'
  -               ;
  +channel_params     : /* empty */                     /* channel parameters */
  +                   | '(' channel_param_list ')'
  +                   ;
   
   channel_param_list : /* empty */                 /* channel parameter list */
  -               | channel_param
  -               | channel_param ',' channel_param_list
  -               ;
  +                   | channel_param
  +                   | channel_param ',' channel_param_list
  +                   ;
   
  -channel_param  : T_ID '=' T_PARAM                     /* channel parameter */
  -               ;
  +channel_param      : T_ID '=' T_PARAM                 /* channel parameter */
  +                   ;

From ossp-cvs-owner@ossp.org  Fri Nov 16 20:44:07 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAGJi6698083; Fri, 16 Nov 2001 20:44:06 +0100 (CET)
Date: Fri, 16 Nov 2001 20:44:06 +0100 (CET)
Message-Id: <200111161944.fAGJi6698083@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_spec_ebnf
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   16-Nov-2001 20:44:06
  Branch: HEAD                             Handle: 1970010101000000

  Removed files:
    ossp-pkg/l2             l2_spec_ebnf

  Log:
    L2 grammar for the L2CDL (L2 Channel Description Language) removed to l2.pod

  Summary:
    Revision    Changes     Path
    NONE        +0  -50     ossp-pkg/l2/l2_spec_ebnf
  ____________________________________________________________________________

  

From ossp-cvs-owner@ossp.org  Fri Nov 16 20:45:14 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAGJjDx98519; Fri, 16 Nov 2001 20:45:13 +0100 (CET)
Date: Fri, 16 Nov 2001 20:45:13 +0100 (CET)
Message-Id: <200111161945.fAGJjDx98519@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_env.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   16-Nov-2001 20:45:13
  Branch: HEAD                             Handle: 2001111619451200

  Modified files:
    ossp-pkg/l2             l2_env.c

  Log:
    Introduced new tree safe timer logic to the L2 environment.

  Summary:
    Revision    Changes     Path
    1.4         +63 -0      ossp-pkg/l2/l2_env.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_env.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 l2_env.c
  --- ossp-pkg/l2/l2_env.c	2001/11/07 11:37:18	1.3
  +++ ossp-pkg/l2/l2_env.c	2001/11/16 19:45:12	1.4
  @@ -49,6 +49,7 @@
       env->szError[0] = '\0';
       env->levelmask = L2_LEVEL_ALL;
       env->flushmask = L2_LEVEL_NONE;
  +    env->interval  = 0;
       for (i = 0; i < L2_MAX_FORMATTERS; i++)
           env->formatters[i].cb = NULL;
       for (i = 0; i < L2_MAX_HANDLERS; i++)
  @@ -210,5 +211,67 @@
   
       /* return pointer to internal buffer */
       return env->szError;
  +}
  +
  +/* sets the virtual timer to the interval value in env */
  +static int set_alarm(l2_env_t *env)
  +{
  +#if defined(HAVE_SETITIMER) && defined(HAVE_SYS_TIME_H)
  +    struct itimerval valtest, valnew;
  +
  +    /* initialize auto vars before using them */
  +    memset(&valnew, 0, sizeof(valnew));
  +
  +    valnew.it_interval.tv_sec = (long)env->interval;
  +    valnew.it_interval.tv_usec = 0L;       /* no microsecond granularity */
  +    valnew.it_value.tv_sec = (long)env->interval;
  +    valnew.it_value.tv_usec = 0L;          /* no microsecond granularity */
  +    if ((getitimer(L2_BUFFER_TIMER, &valtest) == 0) &&
  +       ((valtest.it_value.tv_sec | valtest.it_value.tv_usec |
  +       valtest.it_interval.tv_sec | valtest.it_interval.tv_usec) == 0L))
  +        return (setitimer(L2_BUFFER_TIMER, &valnew, 0) ? L2_ERR_INT : L2_OK);
  +    else {
  +        env->interval = L2_BROKEN_TIMER;    /* mark this timer as broken */
  +        assert(FALSE);     /* throw the switch right away when debugging */
  +        return L2_ERR_ARG;
  +    }
  +#else
  +    unsigned int uiAlarmed = 0;
  +
  +    assert(env->interval >= 0);          /* guard against a broken timer */
  +    assert(!(uiAlarmed = alarm((unsigned int)iInterval)));
  +    if (uiAlarmed) {             /* check if SIGALRM is occupied         */
  +        alarm(uiAlarmed);        /* ...if so, then hack in the old value */
  +        env->interval = L2_BROKEN_TIMER; /* ...mark this timer as broken */
  +        return L2_ERR_INT;
  +    }
  +    else
  +        return L2_OK;
  +#endif
  +}
  +
  +/* l2_env_settimer will change or disappear with  */
  +/* the arrival of the multiplexed L2 timer object */
  +/* set the L2 timer */
  +l2_result_t l2_env_settimer(l2_env_t *env, int iInterval)
  +{
  +    if ((env == NULL) || (iInterval < 0))  /* argument sanity check */
  +        return L2_ERR_ARG;
  +
  +    /* short circuit if setting again with identical interval value */
  +    if (env->interval == iInterval)
  +        return L2_OK;
  +
  +                    /* one value only, no multiplexed timer support */
  +    if (env->interval != 0)      /* && (env->interval != iInterval) */
  +        return L2_ERR_ARG;
  +
  +    env->interval = iInterval;
  +    if (set_alarm(env) != L2_OK) {
  +        env->interval = L2_BROKEN_TIMER;      /* L2 timer is broken */
  +        return L2_ERR_INT;
  +    }
  +    else
  +        return L2_OK;
   }
   

From ossp-cvs-owner@ossp.org  Fri Nov 16 20:53:07 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAGJr6h99407; Fri, 16 Nov 2001 20:53:06 +0100 (CET)
Date: Fri, 16 Nov 2001 20:53:06 +0100 (CET)
Message-Id: <200111161953.fAGJr6h99407@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.h.in
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   16-Nov-2001 20:53:06
  Branch: HEAD                             Handle: 2001111619530500

  Modified files:
    ossp-pkg/l2             l2.h.in

  Log:
    Whoops, corrected function prototype.

  Summary:
    Revision    Changes     Path
    1.23        +1  -1      ossp-pkg/l2/l2.h.in
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2.h.in
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 l2.h.in
  --- ossp-pkg/l2/l2.h.in	2001/11/16 19:40:55	1.22
  +++ ossp-pkg/l2/l2.h.in	2001/11/16 19:53:05	1.23
  @@ -208,7 +208,7 @@
   l2_result_t   l2_env_handler        (l2_env_t *env, l2_handler_t *h);
   l2_result_t   l2_env_errorinfo      (l2_env_t *env, l2_result_t rv, const char *fmt, ...);
   char         *l2_env_strerror       (l2_env_t *env, l2_result_t rv);
  -l2_result_t   l2_env_settimer       (l2_env_t *env, int iInterval)
  +l2_result_t   l2_env_settimer       (l2_env_t *env, int iInterval);
   
   /* channel operations */
   l2_result_t   l2_channel_create     (l2_channel_t **ch, l2_env_t *env, const char *name);

From ossp-cvs-owner@ossp.org  Fri Nov 16 21:07:56 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAGK7tI07715; Fri, 16 Nov 2001 21:07:55 +0100 (CET)
Date: Fri, 16 Nov 2001 21:07:55 +0100 (CET)
Message-Id: <200111162007.fAGK7tI07715@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_buffer.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   16-Nov-2001 21:07:55
  Branch: HEAD                             Handle: 2001111620075400

  Modified files:
    ossp-pkg/l2             l2_ch_buffer.c

  Log:
    Cleanup before introducing timer changes.

  Summary:
    Revision    Changes     Path
    1.35        +6  -5      ossp-pkg/l2/l2_ch_buffer.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_buffer.c
  ============================================================
  $ cvs diff -u -r1.34 -r1.35 l2_ch_buffer.c
  --- ossp-pkg/l2/l2_ch_buffer.c	2001/11/07 13:05:20	1.34
  +++ ossp-pkg/l2/l2_ch_buffer.c	2001/11/16 20:07:54	1.35
  @@ -239,11 +239,12 @@
           }
       }
   
  -    /* flush if level of incoming message differs from those already in buffer */
  -    if (   (cfg->levelflush)             /* if different levels force a flush    */
  -        && (cfg->bufpos > 0)             /* and there is something in the buffer */
  -        && (cfg->level != L2_LEVEL_NONE) /* and a remembered level is known      */
  -        && (level != cfg->level)         /* and the levels really differ         */) {
  +    /* flush if incoming message level differs from those already in buffer */
  +    if (   (cfg->levelflush)        /* if different levels force a flush    */
  +        && (cfg->bufpos > 0)        /* and there is something in the buffer */
  +        && (cfg->level != L2_LEVEL_NONE) /* and a remembered level is known */
  +        && (level != cfg->level)         /* and the levels really differ    */)
  +    {
           downstream = NULL;
           while (l2_channel_downstream(ch, &downstream) == L2_OK)
               if ((rv = l2_channel_write(downstream, cfg->level, cfg->buf, cfg->bufpos)) != L2_OK)

From ossp-cvs-owner@ossp.org  Sat Nov 17 00:00:50 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fAGN0lB46556; Sat, 17 Nov 2001 00:00:48 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id D9D5D4CE738; Sat, 17 Nov 2001 00:00:47 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.pod
Message-Id: <20011116230047.D9D5D4CE738@visp.engelschall.com>
Date: Sat, 17 Nov 2001 00:00:47 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   17-Nov-2001 00:00:47
  Branch: HEAD                             Handle: 2001111623004700

  Modified files:
    ossp-pkg/l2             l2.pod

  Log:
    Birthday commit:
    Shorten grammar to the usual BNF notation and add an example.

  Summary:
    Revision    Changes     Path
    1.10        +36 -49     ossp-pkg/l2/l2.pod
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2.pod
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 l2.pod
  --- ossp-pkg/l2/l2.pod	2001/11/15 09:47:32	1.9
  +++ ossp-pkg/l2/l2.pod	2001/11/16 23:00:47	1.10
  @@ -73,57 +73,44 @@
   and takes less coding effort. The channel definition language is almost
   always sufficient for an application using L2.
   
  -=head1 L2 CHANNEL DEFINITION EBNF GRAMMAR
  +=head1 CHANNEL TREE SPECIFICATION
   
  -/* channel tree */
  -tree               : stream
  -                   ;
  +An L2 channel tree can be descriped by a textual specification according
  +to the following Backus-Naur-Form (BNF):
   
  -/* stream of channels */
  -stream             : channel
  -                   | channel T_OP_ARROW stream
  -                   | channel T_OP_ARROW '{' streams '}'
  -                   ;
  -
  -/* list of sibling streams */
  -streams            : stream
  -                   | stream ';' streams
  -                   ;
  -
  -/* channel */
  -channel            : channel_level '/' channel_level ':' channel_cons
  -                   | channel_level ':' channel_cons
  -                   | channel_cons
  -                   ;
  -
  -/* channel level */
  -channel_level      : T_ID
  -                   | '(' channel_level_mask ')'
  -                   ;
  -
  -/* channel level mask */
  -channel_level_mask : T_ID
  -                   | T_ID '|' channel_level_mask
  -                   ;
  -
  -/* channel constructor */
  -channel_cons       : T_ID channel_params
  -                   ;
  -
  -/* channel parameters */
  -channel_params     : /* empty */
  -                   | '(' channel_param_list ')'
  -                   ;
  -
  -/* channel parameter list */
  -channel_param_list : /* empty */
  -                   | channel_param
  -                   | channel_param ',' channel_param_list
  -                   ;
  -
  -/* channel parameter */
  -channel_param      : T_ID '=' T_PARAM
  -                   ;
  + tree               ::= stream
  + stream             ::= channel
  +                      | channel "->" stream
  +                      | channel "->" "{" streams "}"
  + streams            ::= stream
  +                      | stream ";" streams
  + channel            ::= channel_level "/" channel_level ":" channel_cons
  +                      | channel_level ":" channel_cons
  +                      | channel_cons
  + channel_level      ::= IDENTIFIER
  +                      | "(" channel_level_mask ")"
  + channel_level_mask ::= IDENTIFIER
  +                      | IDENTIFIER "|" channel_level_mask
  + channel_cons       ::= IDENTIFIER channel_params
  + channel_params     ::= EMPTY
  +                      | "(" channel_param_list ")"
  + channel_param_list ::= EMPTY
  +                      | channel_param
  +                      | channel_param "," channel_param_list
  + channel_param      ::= IDENTIFIER "=" PARAMETER
  +
  +An example of such a channel tree specification is:
  +
  + noop -> {
  +   debug: prefix(prefix="[%d-%m-%Y/%H:%M:%S] ")
  +      -> buffer(size=16384)
  +         -> file(path=foo.log, append=1);
  +   error: syslog(ident=foo, facility=user,
  +                 remotehost=syslog.example.com,
  +                 target=remote);
  +   panic: smtp(host=mail.example.com,
  +               rcpt=foo@example.com);
  + }
   
   =head1 FUNCTIONS
   

From ossp-cvs-owner@ossp.org  Sat Nov 17 16:03:07 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fAHF35B10476; Sat, 17 Nov 2001 16:03:05 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 60E384CE6E2; Sat, 17 Nov 2001 16:03:05 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.pod
Message-Id: <20011117150305.60E384CE6E2@visp.engelschall.com>
Date: Sat, 17 Nov 2001 16:03:05 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   17-Nov-2001 16:03:05
  Branch: HEAD                             Handle: 2001111715030400

  Modified files:
    ossp-pkg/sa             sa.pod

  Log:
    more references

  Summary:
    Revision    Changes     Path
    1.18        +44 -6      ossp-pkg/sa/sa.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.pod
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 sa.pod
  --- ossp-pkg/sa/sa.pod	2001/10/31 20:51:01	1.17
  +++ ossp-pkg/sa/sa.pod	2001/11/17 15:03:04	1.18
  @@ -365,27 +365,65 @@
   
   =back
   
  -=head1 STANDARDS
  +=head1 SEE ALSO
   
  -R. Gilligan, S. Thomson, J. Bound, W. Stevens,
  +=head2 Standards
  +
  +R. Gilligan, S. Thomson, J. Bound, W. Stevens:
   "Basic Socket Interface Extensions for IPv6", 
   RFC 2553, March 1999.
   
  -W. Stevens, 
  +W. Stevens:
   "Advanced Sockets API for IPv6",
   B<RFC 2292>, February 1998.
   
  -R. Fielding, L. Masinter, T. Berners-Lee, 
  +R. Fielding, L. Masinter, T. Berners-Lee:
   "Uniform Resource Identifiers: Generic Syntax", 
   B<RFC 2396>, August 1998.
   
  -R. Hinden, S. Deering,
  +R. Hinden, S. Deering:
   "IP Version 6 Addressing Architecture",
   B<RFC 2373>, July 1998.
   
  -R. Hinden, B. Carpenter, L. Masinter, 
  +R. Hinden, B. Carpenter, L. Masinter: 
   "Format for Literal IPv6 Addresses in URL's", 
   B<RFC 2732>, December 1999.
  +
  +=head2 Papers
  +
  +Stuart Sechrest:
  +"An Introductory 4.4BSD Interprocess Communication Tutorial",
  +FreeBSD 4.4 (/usr/share/doc/psd/20.ipctut/).
  +
  +Samuel J. Leffler, Robert S. Fabry, William N. Joy, Phil Lapsley:
  +"An Advanced 4.4BSD Interprocess Communication Tutorial",
  +FreeBSD 4.4 (/usr/share/doc/psd/21.ipc/).
  +
  +Craig Metz:
  +"Protocol Independence Using the Sockets API"
  +http://www.usenix.org/publications/library/proceedings/usenix2000/freenix/metzprotocol.html,
  +USENIX Annual Technical Conference, June 2000.
  +
  +=head2 Manual Pages
  +
  +socket(2)
  +accept(2), 
  +bind(2), 
  +connect(2), 
  +getpeername(2), 
  +getsockname(2),
  +getsockopt(2), 
  +ioctl(2), 
  +listen(2), 
  +read(2), 
  +recv(2), 
  +select(2),
  +send(2),
  +shutdown(2), 
  +socketpair(2), 
  +write(2), 
  +getprotoent(3),
  +protocols(4)
   
   =head1 HISTORY
   

From ossp-cvs-owner@ossp.org  Mon Nov 19 15:10:50 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAJEAnB93577; Mon, 19 Nov 2001 15:10:49 +0100 (CET)
Date: Mon, 19 Nov 2001 15:10:49 +0100 (CET)
Message-Id: <200111191410.fAJEAnB93577@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   19-Nov-2001 15:10:49
  Branch: HEAD                             Handle: 2001111914104800

  Modified files:
    ossp-pkg/var            var.c

  Log:
    Implemented the error-reporting semantics specified in the man page:
    If var_expand() fails with an error, "result" will contain a pointer
    to the construct in the input buffer, which's expansion caused the
    failure.

  Summary:
    Revision    Changes     Path
    1.21        +8  -7      ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 var.c
  --- ossp-pkg/var/var.c	2001/11/16 16:01:20	1.20
  +++ ossp-pkg/var/var.c	2001/11/19 14:10:48	1.21
  @@ -1512,6 +1512,7 @@
                         void *lookup_context, int force_expand,
                         tokenbuf_t *output)
   {
  +    const char* p = begin;
       int rc;
       tokenbuf_t result;
   
  @@ -1550,7 +1551,11 @@
       return VAR_OK;
   
     error_return:
  +    tokenbuf_free(output);
       tokenbuf_free(&result);
  +    output->begin = p;
  +    output->end = begin;
  +    output->buffer_size = 0;
       return rc;
   }
   
  @@ -1587,13 +1592,9 @@
   
       /* Call the parser. */
       tokenbuf_init(&output);
  -    if ((rc = input(input_buf, input_buf + input_len, config, nameclass,
  -                    lookup, lookup_context, force_expand, &output)) != VAR_OK) {
  -        tokenbuf_free(&output);
  -        return rc;
  -    }
  +    rc = input(input_buf, input_buf + input_len, config, nameclass,
  +               lookup, lookup_context, force_expand, &output);
       *result = (char *)output.begin;
       *result_len = output.end - output.begin;
  -
  -    return VAR_OK;
  +    return rc;
   }

From ossp-cvs-owner@ossp.org  Mon Nov 19 16:15:33 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAJFFWI04523; Mon, 19 Nov 2001 16:15:32 +0100 (CET)
Date: Mon, 19 Nov 2001 16:15:32 +0100 (CET)
Message-Id: <200111191515.fAJFFWI04523@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   19-Nov-2001 16:15:32
  Branch: HEAD                             Handle: 2001111915153100

  Modified files:
    ossp-pkg/var            var.c

  Log:
    Added early initialization of the "result" pointer so that we never
    leave it unitialized when var_expand() failes.

  Summary:
    Revision    Changes     Path
    1.22        +4  -0      ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 var.c
  --- ossp-pkg/var/var.c	2001/11/19 14:10:48	1.21
  +++ ossp-pkg/var/var.c	2001/11/19 15:15:31	1.22
  @@ -1578,6 +1578,10 @@
       if (config == NULL)
           config = &var_config_default;
   
  +    /* Set the result pointer to the begining of the input buffer so
  +       that it is correctly initialized in case we fail with an error. */
  +    *result = (char *)input_buf;
  +
       /* Expand the class description for valid variable names. */
       if ((rc = expand_character_class(config->namechars, nameclass)) != VAR_OK)
           return rc;

From ossp-cvs-owner@ossp.org  Mon Nov 19 16:38:49 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAJFclh07974; Mon, 19 Nov 2001 16:38:47 +0100 (CET)
Date: Mon, 19 Nov 2001 16:38:47 +0100 (CET)
Message-Id: <200111191538.fAJFclh07974@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   19-Nov-2001 16:38:47
  Branch: HEAD                             Handle: 2001111915384700

  Modified files:
    ossp-pkg/var            var.pod

  Log:
    Added the missing part of the documentation. Everything is fully
    documented now.

  Summary:
    Revision    Changes     Path
    1.4         +247 -1     ossp-pkg/var/var.pod
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.pod
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 var.pod
  --- ossp-pkg/var/var.pod	2001/11/16 15:44:17	1.3
  +++ ossp-pkg/var/var.pod	2001/11/19 15:38:47	1.4
  @@ -35,9 +35,255 @@
   
   =head1 SYNOPSIS
   
  +var_rc_t var_unescape(const char *src, size_t len, char *dst, int unescape_all);
  +
  +var_rc_t var_expand(const char *input, size_t input_len, char **result, size_t *result_len, var_cb_t lookup, void *lookup_context, const var_config_t *config, int force_expand);
  +
   =head1 DESCRIPTION
  +
  +The routines included in this library, var_unescape() and
  +var_expand(), enable application developers to make use of variable
  +expansion in an arbitrary text buffer. Assume, for instance, your
  +application provided the data items
  +
  +    HOST   = peti.example.org
  +    OSTYPE = FreeBSD
  +    HOME   = /home/my-application
  +
  +and you had obtained the following message from the user via means of
  +a configuration file, the system environment, or the command line:
  +
  +    My-application starting up with the following configuration:
  +
  +        HOST   = $HOST
  +        OSTYPE = $OSTYPE
  +        HOME   = $HOME
  +
  +Then you could use var_expand() to replace the variables in that
  +message by their actual contents.
  +
  +The good thing about this kind of approach is that you separate the
  +actual information in a message from the message's layout, language,
  +or content encoding. If the user doesn't like messages as long the one
  +above, he'd simply provide the template
  +
  +    my-application: $HOST ($OSTYPE), $HOME
  +
  +to get the result, he's interested in. Maybe all he's interested in
  +is:
  +
  +    my-application's home is $HOME
  +
  +To take things one step further, OSSP var provides the user -- the
  +person providing the template file, that is -- with powerful
  +mechanisms to modify the presentation of the variable's contents. For
  +example, the expression ${HOME:l} would yield the contents of the
  +variable HOME converted to all lower-case. Or, to show on even more
  +powerful construct: The expression ${HOME:y/ \t/__/} would turn all
  +blanks or tabs in the contents of HOME to underscores, before
  +inserting it into the output text.
  +
  +Similarly, the function var_unescape() will expand "quoted pairs",
  +thus allowing the user to speficy non-printable characters is a
  +template, such as the carrige return ('\r'), the newline ('\n'), or --
  +as seen above -- the tab ('\t').
  +
  +Using these two routines in combination, gives the application
  +developer the power to have the user custumize the application's
  +messages as he or she sees fit at virtually no extra cost;
  +incorporating a template mechanism into your own applications with
  +OSSP var is extremely simple.
  +
  +=head1 THE VAR_UNESCAPE FUNCTION
  +
  +The purpose of var_unescape() is to expand any quoted pairs found in
  +the input buffer. Its prototype is:
  +
  +    var_rc_t var_unescape(const char *src, size_t len,
  +                          char *dst, int unescape_all);
  +
  +The first parameter, "src", is a pointer to the input buffer, which
  +should be processed. Unlike most C library functions, var_unescape()
  +does not expect the buffer to be terminated by a null byte ('\0'),
  +instead, it expects the length of the buffer's contents as parameter
  +"len". The third parameter, "dst" is a pointer to a buffer, into which
  +the expanded buffer is copied if processing is successful. The size of
  +this buffer must be at least len+1 characters. The reason the result
  +buffer has to be one byte longer than the input buffer is that
  +var_unescape() always adds a terminating null byte at the end of the
  +output buffer, so that you can use the result comfortably with other C
  +library routines.
  +
  +The last parameter, "unescape_all", is flag that modifies the behavior
  +of var_unescape(). If is set to TRUE (any value except zero, that is),
  +var_unescape() will expand B<any> quoted pair it sees, even those that
  +it does not know about. Hence, a "\1" will become a "1", even though
  +"\1" has no special meaning to var_unescape(). If "unescape_all" is
  +set to FALSE (zero), such quoted pairs will be copied verbatimly to
  +the output buffer.
  +
  +The quoted pairs supported by var_unescape() are '\t', '\r', '\n',
  +'\abc' (octal), '\xAB' (hexadecimal), and '\x{...}' (grouped
  +hexadecimal). Please refer to section "SUPPORTED NAMED CHARACTERS" for
  +a more comprehensive description of these quoted pairs.
  +
  +If var_unescape() encounters any syntax errors, it will return an
  +error code denoting exactly what kind of error occured; please refer
  +to section "CODES RETURNED BY THE LIBRARY" for a complete list of
  +possible return codes. If no error occured, VAR_OK is returned.
  +
  +=head1 THE VAR_EXPAND FUNCTION
  +
  +The second function of OSSP var is var_expand(), the routine that will
  +expand any variables found in a text buffer to their actual contents.
  +Its prototype is:
  +
  +    var_rc_t var_expand(const char *input, size_t input_len,
  +                        char **result, size_t *result_len,
  +                        var_cb_t lookup, void *lookup_context,
  +                        const var_config_t *config,
  +                        int force_expand);
  +
  +Don't be scared, the usage is way simpler than it looks at first
  +glance. The parameters of var_expand() are:
  +
  +=over 4
  +
  +=item const char *input
  +
  +A pointer to the text buffer containing the variable expressions to be
  +expanded. Unlike in most other C library functions, this text buffer
  +need not be terminated by a null byte.
  +
  +=item size_t input_len
  +
  +The length of the text buffer's contents.
  +
  +=item char **result
  +
  +A pointer to a character pointer in which the location of the expanded
  +text buffer will be stored. The result buffer will be allocated by
  +var_expand() using the system call malloc(3), thus it is the caller's
  +responsibility to free(3) that buffer once it is not used anymore.
  +
  +If var_expand() fails with an error, "result" will point to "input".
  +The only exception is the VAR_ERR_INVALID_ARGUMENT error, in which
  +case "result" is not modified.
  +
  +=item size_t *result_len
  +
  +A pointer to the location in which the length of the expanded text
  +buffer will be stored. If var_expand() fails with an error -- with the
  +exception of VAR_ERR_INVALID_ARGUMENT --, "result_len" will contain
  +the number of characters that have been consumed from "input" before
  +the error occured.
  +
  +=item var_cb_t lookup
  +
  +A pointer to the function used to perform the actual variable lookup.
  +Please refer to section "THE LOOKUP CALLBACK" for a comprehensive
  +description.
  +
  +=item void *lookup_context
  +
  +An arbitrary value passed through to "lookup" every time it is called.
  +Please refer to section "THE LOOKUP CALLBACK" for a comprehensive
  +description.
  +
  +=item const var_config_t *config
  +
  +The configuration of var_expand(). The var_config_t structure is
  +defined as follows:
  +
  +    typedef struct {
  +        char varinit;
  +        char startdelim;
  +        char enddelim;
  +        char escape;
  +        char *namechars;
  +    } var_config_t;
  +
  +Using this structure, you can modify the parser to use different
  +tokens to find variable constructs. If "config" is NULL, the default
  +configuration will be used, which you can access through the
  +declaration
  +
  +    extern const var_config_t var_config_default;
  +
  +in var.h. The default configuration for var_init looks like this:
  +
  +    const var_config_t var_config_default = {
  +        '$',              /* varinit */
  +        '{',              /* startdelim */
  +        '}',              /* enddelim */
  +        '\\',             /* escape */
  +        "a-zA-Z0-9_"      /* namechars */
  +    };
  +
  +Please note that the setting of var_config_t.escape is actually a
  +single backslash; the quote above has been taken from the C source
  +code, which is why the backslash had to be escaped with another
  +backslash for the C pre-processor.
  +
  +=item int force_expand
  +
  +This flag determines how var_expand() deals with undefined variables.
  +If it is set to TRUE (any value but zero), var_expand() will fail with
  +error code VAR_ERR_UNDEFINED_VARIABLE whenever an undefined variable
  +is encountered. If set to FALSE (zero), var_expand() will copy the
  +expression it failed to expand verbatimly into the output buffer, in
  +order to enable you to go over the buffer with an additional pass.
  +
  +Generally, if you do not plan to use muli-pass expansion, you should
  +set "force_expand" to TRUE in order to make sure no unexpanded
  +variables are left over in the buffer.
  +
  +=back
  +
  +var_expand() returns VAR_OK if everything went fine, and one of the
  +error codes described in section "CODES RETURNED BY THE LIBRARY" if
  +the function call failed.
  +
  +=head1 COMBINING VAR_UNESCAPE AND VAR_EXPAND
  +
  +For maximum power and flexibility, you will want to use both routines
  +provided by this library in combination. That is, you will want to use
  +var_unescape() to turn all quoted pairs into their real
  +representation, before you call var_expand(), because then the user
  +can safely use specials like "\n" or "\t" throughout the template and
  +achieve the desired effect. These quoted pairs are particularly useful
  +if search-and-replace or transpose actions are performed on variables
  +before they're expanded. Be sure, though, to make the first
  +var_unescape() pass with "expand_all" set to FALSE, or the routine
  +will also expand quoted pairs like "\1", which might have a special
  +meaning in the var_expand() pass to follow.
  +
  +Once, all known quoted pairs are expanded, expand the variables with
  +var_expand(). After that, you will want to have a second pass with
  +var_unescape() and "expand_all" set to TRUE, to make sure all
  +remaining quoted pairs are expanded. Also, the var_expand() pass might
  +have introduced now quoted pairs into the output text, which you need
  +to expand to get the desired effect.
  +
  +Take a look at this code snipped, to see how to combine var_unescape()
  +und var_expand() properly:
  +
  +    var_rc_t rc;
  +    char* result;
  +    size_t result_len;
   
  -The purpose of VAR is ...
  +    if ((rc = var_unescape(input, strlen(input), output, 0)) != VAR_OK ||
  +        (rc = var_expand(output, strlen(output),
  +                         &result, &result_len,
  +                         &lookup, NULL,
  +                         NULL, 1)) != VAR_OK ||
  +        (rc = var_unescape(input, strlen(input), output, 1)) != VAR_OK)
  +    {
  +        printf("Expanding the template failed with error %d.\n", rc);
  +        exit(1);
  +    }
  +    [...]
  +    free(result);
   
   =head1 THE LOOKUP CALLBACK
   

From ossp-cvs-owner@ossp.org  Mon Nov 19 16:56:20 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAJFuIH10620; Mon, 19 Nov 2001 16:56:18 +0100 (CET)
Date: Mon, 19 Nov 2001 16:56:18 +0100 (CET)
Message-Id: <200111191556.fAJFuIH10620@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c var.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   19-Nov-2001 16:56:18
  Branch: HEAD                             Handle: 2001111915561700

  Modified files:
    ossp-pkg/var            var.c var.h

  Log:
    THLs review

  Summary:
    Revision    Changes     Path
    1.23        +16 -15     ossp-pkg/var/var.c
    1.11        +3  -0      ossp-pkg/var/var.h
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 var.c
  --- ossp-pkg/var/var.c	2001/11/19 15:15:31	1.22
  +++ ossp-pkg/var/var.c	2001/11/19 15:56:17	1.23
  @@ -615,25 +615,22 @@
       rc = varname(p, end, nameclass);
       if (rc < 0)
           return rc;
  -    else if (rc > 0) {
  +    if (rc > 0) {
           rc2 = (*lookup) (lookup_context, p, rc, &data, &len, &buffer_size);
           if (rc2 < 0)
               return rc2;
  -        else if (rc2 == 0) {
  +        if (rc2 == 0) {
               if (force_expand)
                   return VAR_ERR_UNDEFINED_VARIABLE;
  -            else {
  -                result->begin = begin;
  -                result->end = begin + 1 + rc;
  -                result->buffer_size = 0;
  -                return 1 + rc;
  -            }
  -        } else {
  -            result->begin = data;
  -            result->end = data + len;
  -            result->buffer_size = buffer_size;
  +            result->begin = begin;
  +            result->end = begin + 1 + rc;
  +            result->buffer_size = 0;
               return 1 + rc;
           }
  +        result->begin = data;
  +        result->end = data + len;
  +        result->buffer_size = buffer_size;
  +        return 1 + rc;
       }
   
       /* OK, we're dealing with a complex expression here. */
  @@ -1536,9 +1533,10 @@
                   (output, result.begin, result.end - result.begin)) {
                   rc = VAR_ERR_OUT_OF_MEMORY;
                   goto error_return;
  -            } else
  -                begin += rc;
  -        } else if (rc < 0)
  +            }
  +            begin += rc;
  +        }
  +        if (rc < 0)
               goto error_return;
       }
       while (rc > 0);
  @@ -1591,8 +1589,11 @@
       if (nameclass[(int)config->varinit] ||
           nameclass[(int)config->startdelim] ||
           nameclass[(int)config->enddelim] ||
  +//FIXME THL: if(config->varinit == ':' ...any must not be colon > ERROR, varname() will fail
           nameclass[(int)config->escape])
           return VAR_ERR_INVALID_CONFIGURATION;
  +
  +//FIXME THL: if(config->varinit == config->startdelimit || ...any with any...
   
       /* Call the parser. */
       tokenbuf_init(&output);
  Index: ossp-pkg/var/var.h
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 var.h
  --- ossp-pkg/var/var.h	2001/11/14 15:55:09	1.10
  +++ ossp-pkg/var/var.h	2001/11/19 15:56:17	1.11
  @@ -118,6 +118,7 @@
   typedef int (*var_cb_t) (void *context,
       const char *varname, size_t name_len,
       const char **data, size_t *data_len,
  +//FIXME THL: description "malloced_buffer" vs. prototype "size_t *buffer_size"
       size_t *buffer_size);
   
   /*
  @@ -138,6 +139,7 @@
       char enddelim;       /* '}' */
       char escape;         /* '\' */
       char *namechars;     /* 'a-zA-Z0-9_' */
  +//FIXME THL: should we support namechars with different first char, i.e. [a-z][a-z0-9]*
   } var_config_t;
   extern const var_config_t var_config_default;
   
  @@ -154,6 +156,7 @@
       char **result, size_t *result_len,
       var_cb_t lookup, void *lookup_context,
       const var_config_t *config, int force_expand);
  +//FIXME THL: "force_expand" used here but described and unused above in "var_config_t"
   
   #endif /* __VAR_H__ */
   

From ossp-cvs-owner@ossp.org  Mon Nov 19 17:05:30 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAJG5To14779; Mon, 19 Nov 2001 17:05:29 +0100 (CET)
Date: Mon, 19 Nov 2001 17:05:29 +0100 (CET)
Message-Id: <200111191605.fAJG5To14779@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   19-Nov-2001 17:05:29
  Branch: HEAD                             Handle: 2001111916052800

  Modified files:
    ossp-pkg/var            var.c

  Log:
    THLs review

  Summary:
    Revision    Changes     Path
    1.24        +1  -0      ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 var.c
  --- ossp-pkg/var/var.c	2001/11/19 15:56:17	1.23
  +++ ossp-pkg/var/var.c	2001/11/19 16:05:28	1.24
  @@ -186,6 +186,7 @@
   
       for (i = 0; i < 256; ++i)
           class[i] = 0;
  +        //FIXME THL: shouldn't we use a "libvar" context and do this and the consistency checks only once? This is like a delay-loop ...
   
       /* Walk through the class description and set the appropriate
          entries in the array. */

From ossp-cvs-owner@ossp.org  Mon Nov 19 17:07:17 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAJG7GH14974; Mon, 19 Nov 2001 17:07:16 +0100 (CET)
Date: Mon, 19 Nov 2001 17:07:16 +0100 (CET)
Message-Id: <200111191607.fAJG7GH14974@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c var.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   19-Nov-2001 17:07:16
  Branch: HEAD                             Handle: 2001111916071500

  Modified files:
    ossp-pkg/var            var.c var.h

  Log:
    Implemented var_strerror().

  Summary:
    Revision    Changes     Path
    1.25        +50 -0      ossp-pkg/var/var.c
    1.12        +2  -0      ossp-pkg/var/var.h
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 var.c
  --- ossp-pkg/var/var.c	2001/11/19 16:05:28	1.24
  +++ ossp-pkg/var/var.c	2001/11/19 16:07:15	1.25
  @@ -49,6 +49,56 @@
       "a-zA-Z0-9_"                /* namechars */
   };
   
  +/* The var_strerror() routine will map a var_rc_t into a text message. */
  +
  +const char* var_strerror(var_rc_t rc)
  +{
  +    static char *var_errors[] = {
  +        "OK",                                                                   /* VAR_OK = 0 */
  +        "incomplete named character",                                           /* VAR_ERR_INCOMPLETE_NAMED_CHARACTER = -1 */
  +        "incomplete hex",                                                       /* VAR_ERR_INCOMPLETE_HEX = -2 */
  +        "invalid hex",                                                          /* VAR_ERR_INVALID_HEX = -3 */
  +        "octal too large",                                                      /* VAR_ERR_OCTAL_TOO_LARGE = -4 */
  +        "invalid octal",                                                        /* VAR_ERR_INVALID_OCTAL = -5 */
  +        "incomplete octal",                                                     /* VAR_ERR_INCOMPLETE_OCTAL = -6 */
  +        "incomplete grouped hex",                                               /* VAR_ERR_INCOMPLETE_GROUPED_HEX = -7 */
  +        "incorrect character class specification",                              /* VAR_ERR_INCORRECT_CLASS_SPEC = -8 */
  +        "var_expand() configuration is inconsistent",                           /* VAR_ERR_INVALID_CONFIGURATION = -9 */
  +        "out of memory",                                                        /* VAR_ERR_OUT_OF_MEMORY = -10 */
  +        "incomplete variable",                                                  /* VAR_ERR_INCOMPLETE_VARIABLE_SPEC = -11 */
  +        "undefined variable",                                                   /* VAR_ERR_UNDEFINED_VARIABLE = -12 */
  +        "input is neither text nor variable",                                   /* VAR_ERR_INPUT_ISNT_TEXT_NOR_VARIABLE = -13 */
  +        "unknown command in variable",                                          /* VAR_ERR_UNKNOWN_COMMAND_CHAR = -14 */
  +        "malformated search and replace operation",                             /* VAR_ERR_MALFORMATTED_REPLACE = -16 */
  +        "unknown flag specified in search and replace operation",               /* VAR_ERR_UNKNOWN_REPLACE_FLAG = -17 */
  +        "invalid regular expression in search and replace operation",           /* VAR_ERR_INVALID_REGEX_IN_REPLACE = -18 */
  +        "missing parameter in command",                                         /* VAR_ERR_MISSING_PARAMETER_IN_COMMAND = -19 */
  +        "empty search string in search and replace operation",                  /* VAR_ERR_EMPTY_SEARCH_STRING = -20 */
  +        "start offset missing in cut operation"                                 /* VAR_ERR_MISSING_START_OFFSET = -21 */
  +        "offsets in cut operation delimited by unknown character",              /* VAR_ERR_INVALID_OFFSET_DELIMITER = -22 */
  +        "range in cut operation is out of bounds",                              /* VAR_ERR_RANGE_OUT_OF_BOUNDS = -23 */
  +        "offset in cut operation is out of bounds",                             /* VAR_ERR_OFFSET_OUT_OF_BOUNDS = -24 */
  +        "logic error in cut operation",                                         /* VAR_ERR_OFFSET_LOGIC = -25 */
  +        "malformatted transpose operation",                                     /* VAR_ERR_MALFORMATTED_TRANSPOSE = -26 */
  +        "source class does not match destination class in transpose operation", /* VAR_ERR_TRANSPOSE_CLASSES_MISMATCH = -27 */
  +        "empty character class in transpose operation",                         /* VAR_ERR_EMPTY_TRANSPOSE_CLASS = -28 */
  +        "incorrect character class in transpose operation",                     /* VAR_ERR_INCORRECT_TRANSPOSE_CLASS_SPEC = -29 */
  +        "malformatted padding operation",                                       /* VAR_ERR_MALFORMATTED_PADDING = -30 */
  +        "width parameter missing in padding operation",                         /* VAR_ERR_MISSING_PADDING_WIDTH = -31 */
  +        "fill string missing in padding operation",                             /* VAR_ERR_EMPTY_PADDING_FILL_STRING = -32 */
  +        "unknown quoted pair in search and replace operation",                  /* VAR_ERR_UNKNOWN_QUOTED_PAIR_IN_REPLACE = -33 */
  +        "submatch referred to in replace string does not exist in search string", /* VAR_ERR_SUBMATCH_OUT_OF_RANGE = -34 */
  +        "invalid argument",                                                     /* VAR_ERR_INVALID_ARGUMENT = -35 */
  +        "incomplete quoted pair"                                                /* VAR_ERR_INCOMPLETE_QUOTED_PAIR = -36 */
  +    };
  +
  +    rc = 0 - rc;
  +    if (rc < 0 || rc >= sizeof(var_errors) / sizeof(char *))
  +        return "unknown error";
  +
  +    return var_errors[rc];
  +}
  +
   /* Routines for manipulation of token buffers. */
   
   #define TOKENBUF_INITIAL_BUFSIZE 64
  Index: ossp-pkg/var/var.h
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 var.h
  --- ossp-pkg/var/var.h	2001/11/19 15:56:17	1.11
  +++ ossp-pkg/var/var.h	2001/11/19 16:07:15	1.12
  @@ -158,5 +158,7 @@
       const var_config_t *config, int force_expand);
   //FIXME THL: "force_expand" used here but described and unused above in "var_config_t"
   
  +const char* var_strerror(var_rc_t rc);
  +
   #endif /* __VAR_H__ */
   

From ossp-cvs-owner@ossp.org  Mon Nov 19 17:09:46 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAJG9j115200; Mon, 19 Nov 2001 17:09:45 +0100 (CET)
Date: Mon, 19 Nov 2001 17:09:45 +0100 (CET)
Message-Id: <200111191609.fAJG9j115200@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   19-Nov-2001 17:09:45
  Branch: HEAD                             Handle: 2001111916094400

  Modified files:
    ossp-pkg/var            var.h

  Log:
    Cleaned the header file up.

  Summary:
    Revision    Changes     Path
    1.13        +6  -58     ossp-pkg/var/var.h
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.h
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 var.h
  --- ossp-pkg/var/var.h	2001/11/19 16:07:15	1.12
  +++ ossp-pkg/var/var.h	2001/11/19 16:09:44	1.13
  @@ -74,64 +74,19 @@
       VAR_OK = 0
   } var_rc_t;
   
  -/*
  -   Expand the following named characters to their binary
  -   representation:
  -
  -       \t          tab
  -       \n          newline
  -       \r          return
  -       \033        octal char
  -       \x1B        hex char
  -       \x{263a}    wide hex char
  +/* Expand quoted pairs to their binary representation. */
   
  -  Any other character quoted by a backslash is copied verbatim.
  -*/
  -
   var_rc_t var_unescape(const char *src, size_t len, char *dst,
       int unescape_all);
   
  -/*
  -   The callback will be called by variable_expand(), providing the
  -   following parameters:
  -
  -        context         - passed through from variable_expand()'s
  -                          parameters
  -        varname         - pointer to the name of the variable to
  -                          expand
  -        name_len        - length of the string starting at varname
  -        data            - location, where the callback should store
  -                          the pointer to the contents of the looked-up
  -                          variable
  -        data_len        - location, where the callback should store
  -                          the length of the data
  -        malloced_buffer - location, where the callback should store
  -                          either TRUE or FALSE, telling the framework
  -                          whether the buffer must be free(3)ed.
  -
  -   The return code is interpreted as follows:
  -       >0               - OK
  -        0               - undefined variable
  -       <0 - error
  -*/
  +/* Prototype for the lookup callback used in var_expand(). */
   
   typedef int (*var_cb_t) (void *context,
       const char *varname, size_t name_len,
       const char **data, size_t *data_len,
  -//FIXME THL: description "malloced_buffer" vs. prototype "size_t *buffer_size"
       size_t *buffer_size);
  -
  -/*
  -   This structure configures the parser's specials. I think, the fields
  -   are pretty self-explanatory. The only one worth mentioning is
  -   force_expand, which is a boolean. If set to TRUE, variable_expand()
  -   will fail with an error if the lookup callback returns "undefined
  -   variable". If set to FALSE, variable_expand() will copy the
  -   expression that failed verbatimly to the output so that another pass
  -   may expand it.
   
  -   The comments after each field show the default configuration.
  -*/
  +/* Configure the var_expand() parser's tokens. */
   
   typedef struct {
       char varinit;        /* '$' */
  @@ -139,24 +94,17 @@
       char enddelim;       /* '}' */
       char escape;         /* '\' */
       char *namechars;     /* 'a-zA-Z0-9_' */
  -//FIXME THL: should we support namechars with different first char, i.e. [a-z][a-z0-9]*
   } var_config_t;
   extern const var_config_t var_config_default;
   
  -/*
  -   variable_expand() will parse the contents of input for variable
  -   expressions and expand them using the provided lookup callback. The
  -   pointer to the resulting buffer is stored in result, its length in
  -   result_len. The buffer is always terminated by a '\0' byte, which is
  -   not included in the result_len count. The buffer must be free(3)ed
  -   by the caller.
  -*/
  +/* Expand variable expressions in a text buffer. */
   
   var_rc_t var_expand(const char *input, size_t input_len,
       char **result, size_t *result_len,
       var_cb_t lookup, void *lookup_context,
       const var_config_t *config, int force_expand);
  -//FIXME THL: "force_expand" used here but described and unused above in "var_config_t"
  +
  +/* Map an error code to a text message. */
   
   const char* var_strerror(var_rc_t rc);
   

From ossp-cvs-owner@ossp.org  Mon Nov 19 17:15:34 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAJGFX916166; Mon, 19 Nov 2001 17:15:33 +0100 (CET)
Date: Mon, 19 Nov 2001 17:15:33 +0100 (CET)
Message-Id: <200111191615.fAJGFX916166@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   19-Nov-2001 17:15:33
  Branch: HEAD                             Handle: 2001111916153200

  Modified files:
    ossp-pkg/var            var.pod

  Log:
    Added documentation for the var_strerror() call.

  Summary:
    Revision    Changes     Path
    1.5         +12 -0      ossp-pkg/var/var.pod
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.pod
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 var.pod
  --- ossp-pkg/var/var.pod	2001/11/19 15:38:47	1.4
  +++ ossp-pkg/var/var.pod	2001/11/19 16:15:32	1.5
  @@ -39,6 +39,8 @@
   
   var_rc_t var_expand(const char *input, size_t input_len, char **result, size_t *result_len, var_cb_t lookup, void *lookup_context, const var_config_t *config, int force_expand);
   
  +const char *var_strerror(var_rc_t rc);
  +
   =head1 DESCRIPTION
   
   The routines included in this library, var_unescape() and
  @@ -243,6 +245,16 @@
   var_expand() returns VAR_OK if everything went fine, and one of the
   error codes described in section "CODES RETURNED BY THE LIBRARY" if
   the function call failed.
  +
  +=head1 THE VAR_STRERROR FUNCTION
  +
  +In order to make life for application developers easier, the helper
  +function var_strerror() has been provided, which can be used to map
  +any of the error codes returned by the OSSP var library into a
  +clear-text message describing the reason for failure. Please note that
  +errors coming from the callback, such as VAR_ERR_CALLBACK and those
  +based on it, cannot be mapped and will yield the message "unknown
  +error".
   
   =head1 COMBINING VAR_UNESCAPE AND VAR_EXPAND
   

From ossp-cvs-owner@ossp.org  Mon Nov 19 17:30:20 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAJGUJ717981; Mon, 19 Nov 2001 17:30:19 +0100 (CET)
Date: Mon, 19 Nov 2001 17:30:19 +0100 (CET)
Message-Id: <200111191630.fAJGUJ717981@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   19-Nov-2001 17:30:19
  Branch: HEAD                             Handle: 2001111916301800

  Modified files:
    ossp-pkg/var            var.c

  Log:
    THLs review

  Summary:
    Revision    Changes     Path
    1.26        +16 -17     ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 var.c
  --- ossp-pkg/var/var.c	2001/11/19 16:07:15	1.25
  +++ ossp-pkg/var/var.c	2001/11/19 16:30:18	1.26
  @@ -523,24 +523,24 @@
           rc = varname(p, end, nameclass);
           if (rc < 0)
               goto error_return;
  -        else if (rc > 0) {
  +        if (rc > 0) {
               if (!tokenbuf_append(&name, p, rc)) {
                   rc = VAR_ERR_OUT_OF_MEMORY;
                   goto error_return;
  -            } else
  -                p += rc;
  +            }
  +            p += rc;
           }
   
           rc = variable(p, end, config, nameclass, lookup, lookup_context,
                         force_expand, &tmp);
           if (rc < 0)
               goto error_return;
  -        else if (rc > 0) {
  +        if (rc > 0) {
               if (!tokenbuf_append(&name, tmp.begin, tmp.end - tmp.begin)) {
                   rc = VAR_ERR_OUT_OF_MEMORY;
                   goto error_return;
  -            } else
  -                p += rc;
  +            }
  +            p += rc;
           }
       }
       while (rc > 0);
  @@ -559,8 +559,8 @@
       if (p == end || (*p != config->enddelim && *p != ':')) {
           rc = VAR_ERR_INCOMPLETE_VARIABLE_SPEC;
           goto error_return;
  -    } else
  -        ++p;
  +    }
  +    ++p;
   
       /* Use the lookup callback to get the variable's contents. */
   
  @@ -568,22 +568,21 @@
                       &data, &len, &buffer_size);
       if (rc < 0)
           goto error_return;
  -    else if (rc == 0) {
  +    if (rc == 0) {
           /* The variable is undefined. What we'll do now depends on the
              force_expand flag. */
   
           if (force_expand) {
               rc = VAR_ERR_UNDEFINED_VARIABLE;
               goto error_return;
  -        } else {
  -            /* Initialize result to point back to the original text in
  -               the buffer. */
  -
  -            result->begin = begin - 1;
  -            result->end = p;
  -            result->buffer_size = 0;
  -            failed = 1;
           }
  +        /* Initialize result to point back to the original text in
  +           the buffer. */
  +
  +        result->begin = begin - 1;
  +        result->end = p;
  +        result->buffer_size = 0;
  +        failed = 1;
       } else {
           /* The preliminary result is the contents of the variable.
              This may be modified by the commands that may follow. */

From ossp-cvs-owner@ossp.org  Tue Nov 20 12:41:56 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAKBftv11781; Tue, 20 Nov 2001 12:41:55 +0100 (CET)
Date: Tue, 20 Nov 2001 12:41:55 +0100 (CET)
Message-Id: <200111201141.fAKBftv11781@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   20-Nov-2001 12:41:55
  Branch: HEAD                             Handle: 2001112011415400

  Modified files:
    ossp-pkg/var            var_test.c

  Log:
    Rewrote env_lookup callback to use an internal array of variables
    rather than the system environment, because setenv() and unsetenv()
    are not really portable. Also, these routines lose memory, which is
    not a good thing for a test program.

  Summary:
    Revision    Changes     Path
    1.12        +26 -25     ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 var_test.c
  --- ossp-pkg/var/var_test.c	2001/11/14 15:55:09	1.11
  +++ ossp-pkg/var/var_test.c	2001/11/20 11:41:54	1.12
  @@ -3,27 +3,28 @@
   #include <errno.h>
   #include "var.h"
   
  +struct variable {
  +    const char *name;
  +    const char *data;
  +};
  +
   static int env_lookup(void *context,
       const char *varname, size_t name_len,
       const char **data, size_t *data_len,
       size_t *buffer_size)
   {
  -    char tmp[256];
  -
  -    if (name_len > sizeof(tmp) - 1) {
  -    /* Callback can't expand variable names longer than
  -       sizeof(tmp) characters. */
  +    const struct variable*  vars = context;
  +    size_t i;
   
  -        return VAR_ERR_CALLBACK;
  +    for (i = 0; vars[i].name; ++i) {
  +        if (strncmp(varname, vars[i].name, name_len) == 0) {
  +            *data = vars[i].data;
  +            *data_len = strlen(*data);
  +            *buffer_size = 0;
  +            return 1;
  +        }
       }
  -    memcpy(tmp, varname, name_len);
  -    tmp[name_len] = '\0';
  -    *data = getenv(tmp);
  -    if (*data == NULL)
  -        return 0;
  -    *data_len = strlen(*data);
  -    *buffer_size = 0;
  -    return 1;
  +    return 0;
   }
   
   struct test_case {
  @@ -33,6 +34,16 @@
   
   int main(int argc, char **argv)
   {
  +    const struct variable vars[] = {
  +        { "HOME",   "/home/regression-tests" },
  +        { "OSTYPE", "regression-os" },
  +        { "TERM",   "regression-term" },
  +        { "FOO",    "os" },
  +        { "BAR",    "type" },
  +        { "EMPTY",  "" },
  +        { NULL,     NULL }
  +        };
  +
       const struct test_case tests[] = {
           {"$HOME", "/home/regression-tests"},
           {"${FOO}", "os"},
  @@ -94,16 +105,6 @@
       size_t i;
       char buffer[1024];
   
  -    if (setenv("HOME", "/home/regression-tests", 1) != 0 ||
  -    setenv("OSTYPE", "regression-os", 1) != 0 ||
  -    setenv("TERM", "regression-term", 1) != 0 ||
  -    setenv("FOO", "os", 1) != 0 ||
  -    setenv("BAR", "type", 1) != 0 || setenv("EMPTY", "", 1) != 0) {
  -        printf("Failed to set the environment: %s.\n", strerror(errno));
  -        return 1;
  -    }
  -    unsetenv("UNDEFINED");
  -
       for (i = 0; i < sizeof(tests) / sizeof(struct test_case); ++i) {
   #ifdef DEBUG
           printf("Test case #%02d: Original input is '%s'.\n", i,
  @@ -119,7 +120,7 @@
           printf("Test case #%02d: Unescaped input is '%s'.\n", i, buffer);
   #endif
           rc = var_expand(buffer, strlen(buffer), &tmp, &tmp_len,
  -            &env_lookup, NULL, NULL, 0);
  +            &env_lookup, (void *)vars, NULL, 0);
           if (rc != VAR_OK) {
               printf ("Test case #%d: var_expand() \
                   failed with return code %d.\n", i, rc);

From ossp-cvs-owner@ossp.org  Tue Nov 20 12:44:14 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAKBiCC11983; Tue, 20 Nov 2001 12:44:12 +0100 (CET)
Date: Tue, 20 Nov 2001 12:44:12 +0100 (CET)
Message-Id: <200111201144.fAKBiCC11983@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   20-Nov-2001 12:44:12
  Branch: HEAD                             Handle: 2001112011441200

  Modified files:
    ossp-pkg/var            var.c

  Log:
    Removed comment from Thomas in accordance with Ralf: We don't want to
    introduce a context for the library at this point, because this would
    complicate the API quite a bit without bringing significant benefits.

  Summary:
    Revision    Changes     Path
    1.27        +0  -1      ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 var.c
  --- ossp-pkg/var/var.c	2001/11/19 16:30:18	1.26
  +++ ossp-pkg/var/var.c	2001/11/20 11:44:12	1.27
  @@ -236,7 +236,6 @@
   
       for (i = 0; i < 256; ++i)
           class[i] = 0;
  -        //FIXME THL: shouldn't we use a "libvar" context and do this and the consistency checks only once? This is like a delay-loop ...
   
       /* Walk through the class description and set the appropriate
          entries in the array. */

From ossp-cvs-owner@ossp.org  Tue Nov 20 12:46:35 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAKBkZK12797; Tue, 20 Nov 2001 12:46:35 +0100 (CET)
Date: Tue, 20 Nov 2001 12:46:35 +0100 (CET)
Message-Id: <200111201146.fAKBkZK12797@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   20-Nov-2001 12:46:34
  Branch: HEAD                             Handle: 2001112011463400

  Modified files:
    ossp-pkg/var            var.c

  Log:
    Removed comment from Thomas in accordance with Ralf: We don't want to
    add further consistency checks, because they're somewhat mood anyway.
    If a user does not understand the implications of his choice of
    tokens, there's no way we can guarantee the parser will still work. On
    the other hand, additional consistency checks might hinder users who
    know what they're doing from doing it.

  Summary:
    Revision    Changes     Path
    1.28        +0  -3      ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 var.c
  --- ossp-pkg/var/var.c	2001/11/20 11:44:12	1.27
  +++ ossp-pkg/var/var.c	2001/11/20 11:46:34	1.28
  @@ -1638,11 +1638,8 @@
       if (nameclass[(int)config->varinit] ||
           nameclass[(int)config->startdelim] ||
           nameclass[(int)config->enddelim] ||
  -//FIXME THL: if(config->varinit == ':' ...any must not be colon > ERROR, varname() will fail
           nameclass[(int)config->escape])
           return VAR_ERR_INVALID_CONFIGURATION;
  -
  -//FIXME THL: if(config->varinit == config->startdelimit || ...any with any...
   
       /* Call the parser. */
       tokenbuf_init(&output);

From ossp-cvs-owner@ossp.org  Tue Nov 20 12:49:25 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAKBnOe13086; Tue, 20 Nov 2001 12:49:24 +0100 (CET)
Date: Tue, 20 Nov 2001 12:49:24 +0100 (CET)
Message-Id: <200111201149.fAKBnOe13086@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   20-Nov-2001 12:49:24
  Branch: HEAD                             Handle: 2001112011492400

  Modified files:
    ossp-pkg/var            var_test.c

  Log:
    Renamed callback from env_lookup to var_lookup().

  Summary:
    Revision    Changes     Path
    1.13        +2  -2      ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 var_test.c
  --- ossp-pkg/var/var_test.c	2001/11/20 11:41:54	1.12
  +++ ossp-pkg/var/var_test.c	2001/11/20 11:49:24	1.13
  @@ -8,7 +8,7 @@
       const char *data;
   };
   
  -static int env_lookup(void *context,
  +static int var_lookup(void *context,
       const char *varname, size_t name_len,
       const char **data, size_t *data_len,
       size_t *buffer_size)
  @@ -120,7 +120,7 @@
           printf("Test case #%02d: Unescaped input is '%s'.\n", i, buffer);
   #endif
           rc = var_expand(buffer, strlen(buffer), &tmp, &tmp_len,
  -            &env_lookup, (void *)vars, NULL, 0);
  +            &var_lookup, (void *)vars, NULL, 0);
           if (rc != VAR_OK) {
               printf ("Test case #%d: var_expand() \
                   failed with return code %d.\n", i, rc);

From ossp-cvs-owner@ossp.org  Tue Nov 20 13:22:44 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAKCMhc19552; Tue, 20 Nov 2001 13:22:43 +0100 (CET)
Date: Tue, 20 Nov 2001 13:22:43 +0100 (CET)
Message-Id: <200111201222.fAKCMhc19552@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c var.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   20-Nov-2001 13:22:43
  Branch: HEAD                             Handle: 2001112012224200

  Modified files:
    ossp-pkg/var            var.c var.pod

  Log:
    THLs review

  Summary:
    Revision    Changes     Path
    1.29        +3  -1      ossp-pkg/var/var.c
    1.6         +12 -9      ossp-pkg/var/var.pod
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 var.c
  --- ossp-pkg/var/var.c	2001/11/20 11:46:34	1.28
  +++ ossp-pkg/var/var.c	2001/11/20 12:22:42	1.29
  @@ -907,7 +907,9 @@
                   return VAR_ERR_OFFSET_LOGIC;
               if ((data->begin + num2) > data->end)
                   return VAR_ERR_RANGE_OUT_OF_BOUNDS;
  -            if (!tokenbuf_assign(&res, p, (data->begin + num2) - p))
  +            if (!tokenbuf_assign(&res, p, num2 - num1))
  +//FIXME THL: I expect start-end *inclusive*
  +//FIXME THL: I expect start,len len characters not len-1
                   return VAR_ERR_OUT_OF_MEMORY;
           }
       }
  Index: ossp-pkg/var/var.pod
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 var.pod
  --- ossp-pkg/var/var.pod	2001/11/19 16:15:32	1.5
  +++ ossp-pkg/var/var.pod	2001/11/20 12:22:42	1.6
  @@ -533,15 +533,6 @@
   
   =item ${name:o<start>-<end>}
   
  -This operation will cut the range of "start" to "end" out of the
  -contents of $name and return that. ${name:o3-4} means, for instance,
  -to return the next 4 charaters starting at position 3 in the string.
  -Please note that start positions begin at zero (0)! If the "end" range
  -is left out, as in ${name:o3-}, the operation will return the string
  -starting at position 3 until the end.
  -
  -=item ${name:o<start>,<length>}
  -
   This operation will cut the string starting at position "start" to
   ending position "end" out of the contents of $name and return that.
   Please note that the character at position "end" is not included in
  @@ -551,6 +542,18 @@
   start positions begin at zero (0)! If the "end" parameter is left out,
   as in ${name:o3,}, the operation will return the string starting at
   position 3 until the end.
  +
  +//FIXME THL: I expect start-end *inclusive*
  +//FIXME THL: I expect start,len len characters not len-1
  +
  +=item ${name:o<start>,<length>}
  +
  +This operation will cut the range of "start" to "end" out of the
  +contents of $name and return that. ${name:o3-4} means, for instance,
  +to return the next 4 charaters starting at position 3 in the string.
  +Please note that start positions begin at zero (0)! If the "end" range
  +is left out, as in ${name:o3-}, the operation will return the string
  +starting at position 3 until the end.
   
   =item ${name:s/<pattern>/<string>/[gti]}
   

From ossp-cvs-owner@ossp.org  Tue Nov 20 13:24:54 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAKCOrn19798; Tue, 20 Nov 2001 13:24:53 +0100 (CET)
Date: Tue, 20 Nov 2001 13:24:53 +0100 (CET)
Message-Id: <200111201224.fAKCOrn19798@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   20-Nov-2001 13:24:53
  Branch: HEAD                             Handle: 2001112012245300

  Modified files:
    ossp-pkg/var            var.c

  Log:
    THLs review

  Summary:
    Revision    Changes     Path
    1.30        +5  -6      ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 var.c
  --- ossp-pkg/var/var.c	2001/11/20 12:22:42	1.29
  +++ ossp-pkg/var/var.c	2001/11/20 12:24:53	1.30
  @@ -1245,7 +1245,7 @@
       case 'l':                   /* Turn data to lowercase. */
           if (data->begin) {
               char *ptr;
  -            /* If the buffer does not life in an allocated buffer,
  +            /* If the buffer does not live in an allocated buffer,
                  we have to copy it before modifying the contents. */
   
               if (data->buffer_size == 0) {
  @@ -1283,12 +1283,11 @@
           if (rc == 0) {
               rc = VAR_ERR_MISSING_START_OFFSET;
               goto error_return;
  -        } else {
  -            number1.begin = p;
  -            number1.end = p + rc;
  -            number1.buffer_size = 0;
  -            p += rc;
           }
  +        number1.begin = p;
  +        number1.end = p + rc;
  +        number1.buffer_size = 0;
  +        p += rc;
   
           if (*p == ',') {
               isrange = 0;

From ossp-cvs-owner@ossp.org  Tue Nov 20 13:45:12 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAKCjBi22484; Tue, 20 Nov 2001 13:45:11 +0100 (CET)
Date: Tue, 20 Nov 2001 13:45:11 +0100 (CET)
Message-Id: <200111201245.fAKCjBi22484@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   20-Nov-2001 13:45:10
  Branch: HEAD                             Handle: 2001112012451000

  Modified files:
    ossp-pkg/var            var.c

  Log:
    THLs review

  Summary:
    Revision    Changes     Path
    1.31        +13 -15     ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 var.c
  --- ossp-pkg/var/var.c	2001/11/20 12:24:53	1.30
  +++ ossp-pkg/var/var.c	2001/11/20 12:45:10	1.31
  @@ -1314,7 +1314,7 @@
   
       case '#':                   /* Substitute length of the string. */
           if (data->begin) {
  -            char buf[1024];
  +            char buf[32];       //FIXME: thl 2^64 would fit into 20chars ...
               sprintf(buf, "%d", data->end - data->begin);
               tokenbuf_free(data);
               if (!tokenbuf_assign(data, buf, strlen(buf))) {
  @@ -1331,11 +1331,11 @@
                                    lookup_context, force_expand, &tmptokbuf);
           if (rc < 0)
               goto error_return;
  -        else if (rc == 0) {
  +        if (rc == 0) {
               rc = VAR_ERR_MISSING_PARAMETER_IN_COMMAND;
               goto error_return;
  -        } else
  -            p += rc;
  +        }
  +        p += rc;
           if (data->begin != NULL && data->begin == data->end) {
               tokenbuf_free(data);
               tokenbuf_move(&tmptokbuf, data);
  @@ -1348,11 +1348,11 @@
                                    lookup_context, force_expand, &tmptokbuf);
           if (rc < 0)
               goto error_return;
  -        else if (rc == 0) {
  +        if (rc == 0) {
               rc = VAR_ERR_MISSING_PARAMETER_IN_COMMAND;
               goto error_return;
  -        } else
  -            p += rc;
  +        }
  +        p += rc;
           if (data->begin != NULL) {
               if (data->begin == data->end) {
                   tokenbuf_free(data);
  @@ -1371,16 +1371,14 @@
                                    lookup_context, force_expand, &tmptokbuf);
           if (rc < 0)
               goto error_return;
  -        else if (rc == 0) {
  +        if (rc == 0) {
               rc = VAR_ERR_MISSING_PARAMETER_IN_COMMAND;
               goto error_return;
  -        } else
  -            p += rc;
  -        if (data->begin != NULL) {
  -            if (data->begin != data->end) {
  -                tokenbuf_free(data);
  -                tokenbuf_move(&tmptokbuf, data);
  -            }
  +        }
  +        p += rc;
  +        if (data->begin != NULL && data->begin != data->end) {
  +            tokenbuf_free(data);
  +            tokenbuf_move(&tmptokbuf, data);
           }
           break;
   

From ossp-cvs-owner@ossp.org  Tue Nov 20 14:08:19 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAKD8It27953; Tue, 20 Nov 2001 14:08:18 +0100 (CET)
Date: Tue, 20 Nov 2001 14:08:18 +0100 (CET)
Message-Id: <200111201308.fAKD8It27953@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   20-Nov-2001 14:08:18
  Branch: HEAD                             Handle: 2001112013081700

  Modified files:
    ossp-pkg/var            var.pod

  Log:
    THLs review

  Summary:
    Revision    Changes     Path
    1.7         +1  -1      ossp-pkg/var/var.pod
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.pod
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 var.pod
  --- ossp-pkg/var/var.pod	2001/11/20 12:22:42	1.6
  +++ ossp-pkg/var/var.pod	2001/11/20 13:08:17	1.7
  @@ -565,7 +565,7 @@
   search-and-replace as in the system utility sed(1). If the 'g' flag
   has been provided, the search-and-replace will replace all instances
   of "pattern" by "replace", otherwise, the default is to replace only
  -the first instance. If the 't' flag has been provided, the
  +the first instance. If the 'i' flag has been provided, the
   search-and-replace will take place case-insensitively, otherwise, the
   default is to distinguish character case.
   

From ossp-cvs-owner@ossp.org  Tue Nov 20 14:33:54 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAKDXr331070; Tue, 20 Nov 2001 14:33:53 +0100 (CET)
Date: Tue, 20 Nov 2001 14:33:53 +0100 (CET)
Message-Id: <200111201333.fAKDXr331070@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   20-Nov-2001 14:33:53
  Branch: HEAD                             Handle: 2001112013335300

  Modified files:
    ossp-pkg/var            var.c

  Log:
    THLs review

  Summary:
    Revision    Changes     Path
    1.32        +23 -30     ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 var.c
  --- ossp-pkg/var/var.c	2001/11/20 12:45:10	1.31
  +++ ossp-pkg/var/var.c	2001/11/20 13:33:53	1.32
  @@ -462,8 +462,7 @@
           if (*p == config->escape) {
               if (p + 1 == end)
                   return VAR_ERR_INCOMPLETE_QUOTED_PAIR;
  -            else
  -                ++p;
  +            ++p;
           }
       }
       return p - begin;
  @@ -479,8 +478,7 @@
           if (*p == config->escape) {
               if (p + 1 == end)
                   return VAR_ERR_INCOMPLETE_QUOTED_PAIR;
  -            else
  -                ++p;
  +            ++p;
           }
       }
       return p - begin;
  @@ -711,19 +709,19 @@
           rc = exptext(p, end, config);
           if (rc < 0)
               goto error_return;
  -        else if (rc > 0) {
  +        if (rc > 0) {
               if (!tokenbuf_append(result, p, rc)) {
                   rc = VAR_ERR_OUT_OF_MEMORY;
                   goto error_return;
  -            } else
  -                p += rc;
  +            }
  +            p += rc;
           }
   
           rc = variable(p, end, config, nameclass, lookup, lookup_context,
                         force_expand, &tmp);
           if (rc < 0)
               goto error_return;
  -        else if (rc > 0) {
  +        if (rc > 0) {
               p += rc;
               if (!tokenbuf_append
                   (result, tmp.begin, tmp.end - tmp.begin)) {
  @@ -763,19 +761,19 @@
           rc = substext(p, end, config);
           if (rc < 0)
               goto error_return;
  -        else if (rc > 0) {
  +        if (rc > 0) {
               if (!tokenbuf_append(result, p, rc)) {
                   rc = VAR_ERR_OUT_OF_MEMORY;
                   goto error_return;
  -            } else
  -                p += rc;
  +            }
  +            p += rc;
           }
   
           rc = variable(p, end, config, nameclass, lookup, lookup_context,
                         force_expand, &tmp);
           if (rc < 0)
               goto error_return;
  -        else if (rc > 0) {
  +        if (rc > 0) {
               p += rc;
               if (!tokenbuf_append
                   (result, tmp.begin, tmp.end - tmp.begin)) {
  @@ -931,8 +929,8 @@
               if (orig->end - p <= 1) {
                   tokenbuf_free(expanded);
                   return VAR_ERR_INCOMPLETE_QUOTED_PAIR;
  -            } else
  -                ++p;
  +            }
  +            ++p;
               if (*p == '\\') {
                   if (!tokenbuf_append(expanded, p, 1)) {
                       tokenbuf_free(expanded);
  @@ -1387,44 +1385,39 @@
   
           if (*p != '/')
               return VAR_ERR_MALFORMATTED_REPLACE;
  -        else
  -            ++p;
  +        ++p;
   
           rc = substext_or_variable(p, end, config, nameclass, lookup,
                                     lookup_context, force_expand, &search);
           if (rc < 0)
               goto error_return;
  -        else
  -            p += rc;
  +        p += rc;
   
           if (*p != '/') {
               rc = VAR_ERR_MALFORMATTED_REPLACE;
               goto error_return;
  -        } else
  -            ++p;
  +        }
  +        ++p;
   
           rc = substext_or_variable(p, end, config, nameclass, lookup,
                                     lookup_context, force_expand, &replace);
           if (rc < 0)
               goto error_return;
  -        else
  -            p += rc;
  +        p += rc;
   
           if (*p != '/') {
               rc = VAR_ERR_MALFORMATTED_REPLACE;
               goto error_return;
  -        } else
  -            ++p;
  +        }
  +        ++p;
   
           rc = exptext(p, end, config);
           if (rc < 0)
               goto error_return;
  -        else {
  -            flags.begin = p;
  -            flags.end = p + rc;
  -            flags.buffer_size = 0;
  -            p += rc;
  -        }
  +        flags.begin = p;
  +        flags.end = p + rc;
  +        flags.buffer_size = 0;
  +        p += rc;
   
           if (data->begin) {
               rc = search_and_replace(data, &search, &replace, &flags);

From ossp-cvs-owner@ossp.org  Tue Nov 20 14:44:03 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAKDi2e32071; Tue, 20 Nov 2001 14:44:02 +0100 (CET)
Date: Tue, 20 Nov 2001 14:44:02 +0100 (CET)
Message-Id: <200111201344.fAKDi2e32071@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   20-Nov-2001 14:44:01
  Branch: HEAD                             Handle: 2001112013440100

  Modified files:
    ossp-pkg/var            var.c

  Log:
    THLs review

  Summary:
    Revision    Changes     Path
    1.33        +6  -10     ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.32 -r1.33 var.c
  --- ossp-pkg/var/var.c	2001/11/20 13:33:53	1.32
  +++ ossp-pkg/var/var.c	2001/11/20 13:44:01	1.33
  @@ -810,8 +810,7 @@
           } else {
               if (!tokenbuf_append(dst, p, 1))
                   return VAR_ERR_OUT_OF_MEMORY;
  -            else
  -                ++p;
  +            ++p;
           }
       }
       return VAR_OK;
  @@ -1431,28 +1430,25 @@
   
           if (*p != '/')
               return VAR_ERR_MALFORMATTED_TRANSPOSE;
  -        else
  -            ++p;
  +        ++p;
   
           rc = substext_or_variable(p, end, config, nameclass, lookup,
                                     lookup_context, force_expand, &search);
           if (rc < 0)
               goto error_return;
  -        else
  -            p += rc;
  +        p += rc;
   
           if (*p != '/') {
               rc = VAR_ERR_MALFORMATTED_TRANSPOSE;
               goto error_return;
  -        } else
  -            ++p;
  +        }
  +        ++p;
   
           rc = substext_or_variable(p, end, config, nameclass, lookup,
                                     lookup_context, force_expand, &replace);
           if (rc < 0)
               goto error_return;
  -        else
  -            p += rc;
  +        p += rc;
   
           if (*p != '/') {
               rc = VAR_ERR_MALFORMATTED_TRANSPOSE;

From ossp-cvs-owner@ossp.org  Tue Nov 20 15:04:08 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAKE46Z37316; Tue, 20 Nov 2001 15:04:06 +0100 (CET)
Date: Tue, 20 Nov 2001 15:04:06 +0100 (CET)
Message-Id: <200111201404.fAKE46Z37316@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   20-Nov-2001 15:04:06
  Branch: HEAD                             Handle: 2001112014040600

  Modified files:
    ossp-pkg/var            var.c

  Log:
    THLs review

  Summary:
    Revision    Changes     Path
    1.34        +12 -15     ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.33 -r1.34 var.c
  --- ossp-pkg/var/var.c	2001/11/20 13:44:01	1.33
  +++ ossp-pkg/var/var.c	2001/11/20 14:04:06	1.34
  @@ -1469,44 +1469,41 @@
   
           if (*p != '/')
               return VAR_ERR_MALFORMATTED_PADDING;
  -        else
  -            ++p;
  +        ++p;
   
           rc = number(p, end);
           if (rc == 0) {
               rc = VAR_ERR_MISSING_PADDING_WIDTH;
               goto error_return;
  -        } else {
  -            number1.begin = p;
  -            number1.end = p + rc;
  -            number1.buffer_size = 0;
  -            p += rc;
           }
  +        number1.begin = p;
  +        number1.end = p + rc;
  +        number1.buffer_size = 0;
  +        p += rc;
   
           if (*p != '/') {
               rc = VAR_ERR_MALFORMATTED_PADDING;
               goto error_return;
  -        } else
  -            ++p;
  +        }
  +        ++p;
   
           rc = substext_or_variable(p, end, config, nameclass, lookup,
                                     lookup_context, force_expand, &replace);
           if (rc < 0)
               goto error_return;
  -        else
  -            p += rc;
  +        p += rc;
   
           if (*p != '/') {
               rc = VAR_ERR_MALFORMATTED_PADDING;
               goto error_return;
  -        } else
  -            ++p;
  +        }
  +        ++p;
   
           if (*p != 'l' && *p != 'c' && *p != 'r') {
               rc = VAR_ERR_MALFORMATTED_PADDING;
               goto error_return;
  -        } else
  -            ++p;
  +        }
  +        ++p;
   
           if (data->begin) {
               rc = padding(data, &number1, &replace, p[-1]);

From ossp-cvs-owner@ossp.org  Tue Nov 20 16:33:09 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAKFX8V50917; Tue, 20 Nov 2001 16:33:08 +0100 (CET)
Date: Tue, 20 Nov 2001 16:33:08 +0100 (CET)
Message-Id: <200111201533.fAKFX8V50917@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   20-Nov-2001 16:33:08
  Branch: HEAD                             Handle: 2001112015330700

  Modified files:
    ossp-pkg/var            TODO

  Log:
    Neues, fettes, geplantes Feature.

  Summary:
    Revision    Changes     Path
    1.6         +56 -96     ossp-pkg/var/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/var/TODO
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 TODO
  --- ossp-pkg/var/TODO	2001/11/14 12:59:24	1.5
  +++ ossp-pkg/var/TODO	2001/11/20 15:33:07	1.6
  @@ -1,104 +1,64 @@
                                  OSSP var
   
  - - Doku sollte ein Beispiel für Quoting von Shell- und
  -   Regexp-Ausdrücken enthalten.
  + - Man braucht ein Schleifenkonstrukt, das über Arrays iteriert:
   
  - - Unterstützung von PCRE.
  +       [${foo}${bar}]
   
  +   Dies wird so interpretiert, daß der Parser an den Variablennamen
  +   den jeweiligen Index anhängt, und die ganze Zeile expandiert,
  +   solange, bis _alle_ in dem Konstrukt verwandten Variablen für den
  +   derzeitigen Index undefiniert sind -- sind nur einzelne Variablen
  +   undefiniert, werden sie durch den Leerstring "" ersetzt. Text
  +   innerhalb des Konstrukten wird "verbatim" in jeder Zeile erhalten,
  +   beispielsweise:
   
  ----- RSE: --------------------------------------------------------------------
  +        [${foo}: ${bar}\n]
   
  -- HAS TO BE: adding a var_error() function which translates var_rc_t
  -  into a text version ala strerror(3).
  -
  -- HAS TO BE: still missing PCRE support plus corresponding Autoconf stuff
  -
  -- CAN BE: as in L2, reduce the large 1024 auto-variable with a a lot
  -  smaller (on 32-bit boxes just 21 bytes) but still fully
  -  sufficiently-sized variable:
  -
  -Index: var.c
  -===================================================================
  -RCS file: /u/rse/arc/cvs/ossp/ossp-pkg/var/var.c,v
  -retrieving revision 1.14
  -diff -u -d -u -d -r1.14 var.c
  ---- var.c	2001/11/14 11:11:01	1.14
  -+++ var.c	2001/11/14 11:37:54
  -@@ -1261,8 +1261,8 @@
  - 
  -     case '#':                   /* Substitute length of the string. */
  -         if (data->begin) {
  --            char buf[1024];
  --            sprintf(buf, "%d", data->end - data->begin);
  -+            char buf[((sizeof(int)*8)/3)+10]; /* sufficient size: <#bits> x log_10(2) + safety */
  -+            sprintf(buf, "%d", (int)(data->end - data->begin));
  -             tokenbuf_free(data);
  -             if (!tokenbuf_assign(data, buf, strlen(buf))) {
  -                 rc = VAR_ERR_OUT_OF_MEMORY;
  -
  -- SHOULD BE: the "magic" number 256 in name class definitions would be
  -  nice if replaced by a symbolic name
  -
  -- SHOULD BE: the expand_octal() function checks that in the octal number
  -  NNN (representing a character) the first number is not larger than
  -  3 because the 0xff is (octal) 377. Unfortunately this still allows
  -  things like 399 which is illegal because larger than 0xff (the maximum
  -  fitting into an 8-bit character). My suggestions:
  -
  -Index: var.c
  -===================================================================
  -RCS file: /u/rse/arc/cvs/ossp/ossp-pkg/var/var.c,v
  -retrieving revision 1.15
  -diff -u -d -u -d -r1.15 var.c
  ---- var.c	2001/11/14 12:02:40	1.15
  -+++ var.c	2001/11/14 12:14:49
  -@@ -209,7 +209,7 @@
  - 
  - static var_rc_t expand_octal(const char **src, char **dst, const char *end)
  - {
  --    unsigned char c;
  -+    unsigned int c;
  - 
  -     if (end - *src < 3)
  -         return VAR_ERR_INCOMPLETE_OCTAL;
  -@@ -217,8 +217,6 @@
  -         return VAR_ERR_INVALID_OCTAL;
  - 
  -     c = **src - '0';
  --    if (c > 3)
  --        return VAR_ERR_OCTAL_TOO_LARGE;
  -     c *= 8;
  -     ++(*src);
  - 
  -@@ -227,6 +225,9 @@
  -     ++(*src);
  - 
  -     c += **src - '0';
  -+
  -+    if (c > 0xff)
  -+        return VAR_ERR_OCTAL_TOO_LARGE;
  - 
  -     **dst = (char) c;
  -     ++(*dst);
  -
  -- SHOULD BE: the tokenbuf functions like tokenbuf_append() return
  -  1 or 0 and the other routines convert this into var_rc_t values. I
  -  recommend to change the tokenbuf functions to already return var_rc_t
  -  values and pass this value through in other functions. This way the
  -  different errors in tokenbuf_append() are visible, too.
  -
  -- CAN BE: I IMHO would reduce the code size of the recursive descent parser
  -  by 1. making the prototype and corresponding parameter names of all
  -  functions identical (see for example text() for a current exclusion)
  -  and then use a macro to replace the long prototype description on
  -  every function.
  -
  -- SHOULD BE: the return code semantics are still not clear to me
  -  (perhaps it is solved by documentation). Especially it confuses me a lot
  -  that internally it uses "int" instead of "var_rc_t" and does arithmetics
  -  like "1 + rc" before finanlly it is casted to an var_rc_t. So how should
  -  anyone can do anything reasonable with return codes > 0. He does not
  -  know what they mean, doesn't he?
  +   Hierzu muß var_expand() wissen, wie sie einen indizierten
  +   Variablenzugriff erzeugen kann. Hierzu wird var_config_t um
  +   "char startindex" und "char endindex" erweitert. Weiterhin wird in
  +   var_config_t "char current_index" ein Zeichen konfiguriert, unter
  +   dem der aktuelle Index der Schleife zu bekommen ist. Defaults
  +   werden sein: "[", "]" und "#" respektive.
   
  -------------------------------------------------------------------------
  +   Wenn Variablen innerhalb des Konstruktes bereits einen Index haben,
  +   wird dieser (unter Beachtung eventuell notwendiger Arithmetik)
  +   berechnet und "fest" verwendet, zum Beispiel:
   
  +       [${foo[1]}]
  +
  +   oder
  +
  +       [${foo[(#+1)/2]}]
  +
  +   Dementsprechend sind die folgenden Ausdrück equivalent:
  +
  +       [${foo[#]}] == [${foo}]
  +
  +   Wir unterstützen die vier Grundrechenarten, Modulo und Klammerung
  +   für arithmetische Operationen.
  +
  +   Weiterhin wird der Callback um einen Parameter "int index"
  +   erweitert, welchen im Falle eines "normalen Variablenzugriffs" auf
  +   Null gesetzt wird. Zugriffe auf Indices, die nicht existieren,
  +   müssen vom Callback mit "UNDEFINED" quittiert werden. Ein Zugriff
  +   auf einen negativen Index liefert die Anzahl der Elemente in dem
  +   Array als String zurück. Ebenso liefert das Konstrukt ${foo:#} die
  +   Anzahl der Elemente zurück, wenn $foo ein Array ist.
  +
  +   [...]-Konstrukte können beliebig tief geschachtelt werden.
  +
  +   Innerhalb von Indixangaben dürfen erneut Variablen verwendet
  +   werden.
  +
  +   Arrays werden nur in "expressions" erkannt, und im Konstrukt werden
  +   auch nur "expressions" gesondert behandelt; normale Variablen
  +   werden in jedem Pass normal expandiert.
  +
  +   Sind "stardindex", "endindex" oder "current_index" leer (gleich
  +   '\0'), wird dieses Konstrukt vom Parser nicht erkannt und als Text
  +   interpretiert -- abgesehen von den Variablen, natürlich, welche
  +   aber nicht in einer Schleife expandiert werden, noch werden beim
  +   Callback Array-Elemente abgefragt.
  +
  + - Abgabe: 6.12.2001 zum Nikolaustag im CVS.

From ossp-cvs-owner@ossp.org  Tue Nov 20 16:34:52 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAKFYph51070; Tue, 20 Nov 2001 16:34:51 +0100 (CET)
Date: Tue, 20 Nov 2001 16:34:51 +0100 (CET)
Message-Id: <200111201534.fAKFYph51070@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var SPEC
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   20-Nov-2001 16:34:51
  Branch: HEAD                             Handle: 1970010101000000

  Removed files:
    ossp-pkg/var            SPEC

  Log:
    File not required anymore.

  Summary:
    Revision    Changes     Path
    NONE        +0  -188    ossp-pkg/var/SPEC
  ____________________________________________________________________________

  

From ossp-cvs-owner@ossp.org  Tue Nov 20 16:36:43 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAKFagc51510; Tue, 20 Nov 2001 16:36:42 +0100 (CET)
Date: Tue, 20 Nov 2001 16:36:42 +0100 (CET)
Message-Id: <200111201536.fAKFagc51510@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   20-Nov-2001 16:36:42
  Branch: HEAD                             Handle: 2001112015364200

  Modified files:
    ossp-pkg/var            var.c

  Log:
    Rather than to hard-code the size of the buffer required for format an
    integer into a string in the ':#' operation, use approximation based
    on 'sizeof(int)'.

  Summary:
    Revision    Changes     Path
    1.35        +3  -3      ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.34 -r1.35 var.c
  --- ossp-pkg/var/var.c	2001/11/20 14:04:06	1.34
  +++ ossp-pkg/var/var.c	2001/11/20 15:36:42	1.35
  @@ -1311,9 +1311,9 @@
   
       case '#':                   /* Substitute length of the string. */
           if (data->begin) {
  -            char buf[32];       //FIXME: thl 2^64 would fit into 20chars ...
  -            sprintf(buf, "%d", data->end - data->begin);
  -            tokenbuf_free(data);
  +	    char buf[((sizeof(int)*8)/3)+10]; /* sufficient size: <#bits> x log_10(2) + safety */
  +	    sprintf(buf, "%d", (int)(data->end - data->begin));
  +	    tokenbuf_free(data);
               if (!tokenbuf_assign(data, buf, strlen(buf))) {
                   rc = VAR_ERR_OUT_OF_MEMORY;
                   goto error_return;

From ossp-cvs-owner@ossp.org  Tue Nov 20 16:46:37 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAKFkaO52811; Tue, 20 Nov 2001 16:46:36 +0100 (CET)
Date: Tue, 20 Nov 2001 16:46:36 +0100 (CET)
Message-Id: <200111201546.fAKFkaO52811@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c var.pod var_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   20-Nov-2001 16:46:36
  Branch: HEAD                             Handle: 2001112015463500

  Modified files:
    ossp-pkg/var            var.c var.pod var_test.c

  Log:
    Changed semantics of the :o operation so that the specified end-offset
    is included in the result. Updated documentation and test cases
    appropriately.

  Summary:
    Revision    Changes     Path
    1.36        +1  -4      ossp-pkg/var/var.c
    1.8         +7  -12     ossp-pkg/var/var.pod
    1.14        +4  -6      ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.35 -r1.36 var.c
  --- ossp-pkg/var/var.c	2001/11/20 15:36:42	1.35
  +++ ossp-pkg/var/var.c	2001/11/20 15:46:35	1.36
  @@ -893,7 +893,6 @@
           if (!tokenbuf_assign(&res, p, data->end - p))
               return VAR_ERR_OUT_OF_MEMORY;
       } else {                    /* OK, then use num2. */
  -
           if (isrange) {
               if ((p + num2) > data->end)
                   return VAR_ERR_RANGE_OUT_OF_BOUNDS;
  @@ -904,9 +903,7 @@
                   return VAR_ERR_OFFSET_LOGIC;
               if ((data->begin + num2) > data->end)
                   return VAR_ERR_RANGE_OUT_OF_BOUNDS;
  -            if (!tokenbuf_assign(&res, p, num2 - num1))
  -//FIXME THL: I expect start-end *inclusive*
  -//FIXME THL: I expect start,len len characters not len-1
  +            if (!tokenbuf_assign(&res, p, num2 - num1 + 1))
                   return VAR_ERR_OUT_OF_MEMORY;
           }
       }
  Index: ossp-pkg/var/var.pod
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 var.pod
  --- ossp-pkg/var/var.pod	2001/11/20 13:08:17	1.7
  +++ ossp-pkg/var/var.pod	2001/11/20 15:46:35	1.8
  @@ -531,22 +531,17 @@
   This operation will replace the contents of $name with "word" if $name
   is not empty. Otherwise, it will expand to the contents of $name.
   
  -=item ${name:o<start>-<end>}
  +=item ${name:o<start>,<end>}
   
   This operation will cut the string starting at position "start" to
   ending position "end" out of the contents of $name and return that.
  -Please note that the character at position "end" is not included in
  -the result, "end - 1" is the last character position returned.
  -${name:o3,4}, for instance, will return the substring from position 3
  -to position 4 -- that is exactly one character. Also, please note that
  -start positions begin at zero (0)! If the "end" parameter is left out,
  -as in ${name:o3,}, the operation will return the string starting at
  -position 3 until the end.
  +Please note that the character at position "end" is included in the
  +result; ${name:o3,4} for instance, will return a two-character string.
  +Also, please note that start positions begin at zero (0)! If the "end"
  +parameter is left out, as in ${name:o3,}, the operation will return
  +the string starting at position 3 until the end.
   
  -//FIXME THL: I expect start-end *inclusive*
  -//FIXME THL: I expect start,len len characters not len-1
  -
  -=item ${name:o<start>,<length>}
  +=item ${name:o<start>-<length>}
   
   This operation will cut the range of "start" to "end" out of the
   contents of $name and return that. ${name:o3-4} means, for instance,
  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 var_test.c
  --- ossp-pkg/var/var_test.c	2001/11/20 11:49:24	1.13
  +++ ossp-pkg/var/var_test.c	2001/11/20 15:46:35	1.14
  @@ -77,10 +77,10 @@
           {"${HOME:s/E/bla/ti}", "/hombla/regression-tests"},
           {"${HOME:s/E/bla/tig}", "/hombla/rblagrblassion-tblasts"},
           {"${HOME:o1-5}", "home/"},
  -        {"${HOME:o1,5}", "home"},
  +        {"${HOME:o1,5}", "home/"},
           {"${HOME:o5,}", "/regression-tests"},
           {"${HOME:o5-}", "/regression-tests"},
  -        {"${HOME:o7,13}", "egress"},
  +        {"${HOME:o7,13}", "egressi"},
           {"${HOME:y/a-z/A-YZ/}", "/HOME/REGRESSION-TESTS"},
           {"${HOME:y/e-g/a-c/}", "/homa/racrassion-tasts"},
           {"${FOO:p/15/../l}", "os............."},
  @@ -94,10 +94,8 @@
           {"${HOME:s/g(res)s/x\\1x/g}", "/home/rexresxion-tests"},
           {"${HOME:s/(s+)/_\\1_/g}", "/home/regre_ss_ion-te_s_t_s_"},
           {"${HOME:s/\\x65/\\x45/g}", "/homE/rEgrEssion-tEsts"},
  -        {"${HOME:s/(s*)/x\\1X/g}",
  -         "xXxXxXxXxXxXxXxXxXxXxXxssXxXxXxXxXxXxXxsXxXxsX"},
  -        {"${HOME:s/./\\\\/g}",
  -         "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"}
  +        {"${HOME:s/(s*)/x\\1X/g}", "xXxXxXxXxXxXxXxXxXxXxXxssXxXxXxXxXxXxXxsXxXxsX"},
  +        {"${HOME:s/./\\\\/g}", "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"}
       };
       char *tmp;
       size_t tmp_len;

From ossp-cvs-owner@ossp.org  Tue Nov 20 21:03:32 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fAKK2MB96507; Tue, 20 Nov 2001 21:02:22 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id B41E64CE638; Tue, 20 Nov 2001 21:02:22 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var .cvsignore Makefile Makefile.in VERSION confi...
Message-Id: <20011120200222.B41E64CE638@visp.engelschall.com>
Date: Tue, 20 Nov 2001 21:02:22 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   20-Nov-2001 21:02:22
  Branch: HEAD                             Handle: 197001010100001006282941

  Added files:
    ossp-pkg/var            Makefile.in VERSION configure.ac devtool
                            devtool.conf devtool.func var-config.in
                            var-config.pod
  Modified files:
    ossp-pkg/var            .cvsignore
  Removed files:
    ossp-pkg/var            Makefile

  Log:
    Apply standard environment for OSSP libraries.

  Summary:
    Revision    Changes     Path
    1.3         +11 -0      ossp-pkg/var/.cvsignore
    NONE        +0  -42     ossp-pkg/var/Makefile
    1.1         +126 -0     ossp-pkg/var/Makefile.in
    1.1         +6  -0      ossp-pkg/var/VERSION
    1.1         +48 -0      ossp-pkg/var/configure.ac
    1.1         +47 -0      ossp-pkg/var/devtool
    1.1         +32 -0      ossp-pkg/var/devtool.conf
    1.1         +72 -0      ossp-pkg/var/devtool.func
    1.1         +130 -0     ossp-pkg/var/var-config.in
    1.1         +167 -0     ossp-pkg/var/var-config.pod
  ____________________________________________________________________________

  Index: ossp-pkg/var/.cvsignore
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 .cvsignore
  --- ossp-pkg/var/.cvsignore	2001/11/13 12:37:13	1.2
  +++ ossp-pkg/var/.cvsignore	2001/11/20 20:02:21	1.3
  @@ -1,2 +1,13 @@
   var_test
   var.3
  +shtool
  +config.guess
  +config.sub
  +ltmain.sh
  +libtool.m4
  +configure
  +config.h.in
  +config.h
  +Makefile
  +var-config
  +var-config.1
    Index: ossp-pkg/var/Makefile.in
  ============================================================
  $ cvs update -p -r1.1 Makefile.in
  ##
  ##  VAR - OSSP variable expression library.
  ##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  ##
  ##  This file is part of OSSP VAR, an extensible data serialization
  ##  library which can be found at http://www.ossp.org/pkg/var/.
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  Makefile.in: make(1) build procedure
  ##
  
  @SET_MAKE@
  
  DESTDIR     =
  prefix      = @prefix@
  exec_prefix = @exec_prefix@
  bindir      = @bindir@
  libdir      = @libdir@
  includedir  = @includedir@
  mandir      = @mandir@
  
  CC          = @CC@
  CPPFLAGS    = @CPPFLAGS@
  CFLAGS      = @DEFS@ @CFLAGS@
  LDFLAGS     = @LDFLAGS@
  LIBS        = @LIBS@
  RM          = rm -f
  SHTOOL      = ./shtool
  LIBTOOL     = ./libtool
  POD2MAN     = pod2man
  
  LIB_NAME    = libvar.la
  LIB_OBJS    = var.lo
  
  TST_NAME    = var_test
  TST_OBJS    = var_test.o
  
  MAN_NAME    = var-config.1 var.3
  
  #   helper macro for generating a Unix manual page
  _MANPAGE = \
      V1=`$(SHTOOL) version -ltxt -dshort VERSION`; \
      V2=`$(SHTOOL) version -ltxt -dlong VERSION`; \
      D=`$(SHTOOL) version -ltxt -dlong VERSION |\
         sed -e 's;.*(;;' -e 's;).*;;'`; \
      $(POD2MAN) --section=$${SEC} --center="$${ONELINE}" \
                 --release="$$D" --date="$${NAME} $$V1" $(S)$${BASENAME}.pod |\
      sed -e "s;VAR_VERSION_STR;$$V2;" >$${BASENAME}.$${SEC}
  
  .SUFFIXES:
  .SUFFIXES: .c .o .lo
  
  all: $(LIB_NAME) $(TST_NAME) $(MAN_NAME)
  
  .c.o:
  	$(CC) $(CPPFLAGS) $(CFLAGS) -c $<
  .c.lo:
  	@$(LIBTOOL) --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS) -c $<
  
  $(LIB_NAME): $(LIB_OBJS)
  	@$(LIBTOOL) --mode=link $(CC) -o $(LIB_NAME) $(LIB_OBJS) -rpath $(libdir) \
  	    -version-info `$(SHTOOL) version -l txt -d libtool VERSION`
  
  $(TST_NAME): $(TST_OBJS) $(LIB_NAME)
  	@$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $(TST_NAME) $(TST_OBJS) $(LIB_NAME) $(LIBS)
  
  var-config.1: var-config.pod VERSION
  	BASENAME="var-config"; SEC=1; \
  	NAME="VAR"; ONELINE="Variable Expansion Library"; \
  	$(_MANPAGE)
  var.3: var.pod VERSION
  	BASENAME="var"; SEC=3; \
  	NAME="VAR"; ONELINE="Variable Expansion Library"; \
  	$(_MANPAGE)
  
  check: $(TST_NAME)
  	@$(LIBTOOL) --mode=execute ./$(TST_NAME) && echo "All tests succeeed."
  
  install:
  	$(SHTOOL) mkdir -p -f -m 755 $(DESTDIR)$(bindir)
  	$(SHTOOL) install -c -m 755 var-config $(DESTDIR)$(bindir)/
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libdir)
  	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libvar.la $(DESTDIR)$(libdir)/
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(includedir)
  	$(SHTOOL) install -c -m 644 var.h $(DESTDIR)$(includedir)/
  	$(SHTOOL) mkdir -p -f -m 755 $(DESTDIR)$(mandir)/man1
  	$(SHTOOL) install -c -m 644 var-config.1 $(DESTDIR)$(mandir)/man1/
  	$(SHTOOL) mkdir -p -f -m 755 $(DESTDIR)$(mandir)/man3
  	$(SHTOOL) install -c -m 644 var.3 $(DESTDIR)$(mandir)/man3/
  
  clean:
  	-$(RM) $(LIB_NAME) $(LIB_OBJS)
  	-$(RM) $(TST_NAME) $(TST_OBJS)
  
  distclean: clean
  	-$(RM) config.log config.status config.cache
  	-$(RM) Makefile config.h
  	-$(RM) libtool
  	-$(RM) -r .libs >/dev/null 2>&1
  	-$(RM) *.o *.lo *.a
  	-$(RM) var-config
  
  realclean: distclean
  	-$(RM) configure config.h.in
  	-$(RM) shtool
  	-$(RM) ltmain.sh libtool.m4 config.guess config.sub
  	-$(RM) var-config.1 var.3
  
  Index: ossp-pkg/var/VERSION
  ============================================================
  $ cvs update -p -r1.1 VERSION
  
    VERSION -- Version Information for OSSP VAR (syntax: Text)
    [automatically generated and maintained by GNU shtool]
  
    This is OSSP VAR, Version 0.1.0 (20-Nov-2001)
  
  Index: ossp-pkg/var/configure.ac
  ============================================================
  $ cvs update -p -r1.1 configure.ac
  dnl ##
  dnl ##  VAR - OSSP variable expression library.
  dnl ##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  dnl ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  dnl ##
  dnl ##  This file is part of OSSP VAR, an extensible data serialization
  dnl ##  library which can be found at http://www.ossp.org/pkg/var/.
  dnl ##
  dnl ##  Permission to use, copy, modify, and distribute this software for
  dnl ##  any purpose with or without fee is hereby granted, provided that
  dnl ##  the above copyright notice and this permission notice appear in all
  dnl ##  copies.
  dnl ##
  dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  dnl ##  SUCH DAMAGE.
  dnl ##
  dnl ##  configure.ac: GNU Autoconf source script
  dnl ##
  
  AC_PREREQ(2.52)
  AC_REVISION(1.0)
  AC_INIT(var.h)
  
  AC_DIVERT_PUSH(NOTICE)
  V=`./shtool version -l txt -d long VERSION`
  ./shtool echo -e "Configuring %BOSSP VAR%b, Version %B${V}%b"
  AC_DIVERT_POP()
  
  AC_SET_MAKE
  AC_PROG_CC
  
  sinclude(libtool.m4)
  AC_PROG_LIBTOOL
  
  AC_CONFIG_HEADERS(config.h)
  AC_CONFIG_FILES(Makefile var-config)
  AC_OUTPUT
  
  Index: ossp-pkg/var/devtool
  ============================================================
  $ cvs update -p -r1.1 devtool
  #!/bin/sh
  ##
  ##  devtool -- Development Tool
  ##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  if [ $# -eq 0 ]; then
      echo "devtool:USAGE: devtool <command> [<arg> ...]" 1>&2
      exit 1
  fi
  
  cmd="$1"
  shift
  
  devtoolfunc="./devtool.func"
  
  if [ ! -f devtool.conf ]; then
      echo "devtool:ERROR: no devtool.conf in current directory" 1>&2
      exit 1
  fi
  
  cmdline=`grep "^%$cmd" devtool.conf`
  if [ ".$cmdline" = . ]; then
      echo "devtool:ERROR: command $cmd not found in devtool.conf" 1>&2
      exit 1
  fi
  
  if [ ".$TMPDIR" != . ]; then
      tmpdir="$TMPDIR"
  elif [ ".$TEMPDIR" != . ]; then
      tmpdir="$TEMPDIR"
  else
      tmpdir="/tmp"
  fi
  tmpfile="$tmpdir/rc.$$.tmp"
  
  rm -f $tmpfile
  touch $tmpfile
  echo ". $devtoolfunc" >>$tmpfile
  ( sed <devtool.conf -e "1,/^%common/d" -e '/^%.*/,$d'
    sed <devtool.conf -e "1,/^%$cmd/d" -e '/^%.*/,$d' ) |\
  sed -e 's;\([ 	]\)@\([a-zA-Z_][a-zA-Z0-9_]*\);\1devtool_\2;' >>$tmpfile
  
  sh $tmpfile "$@"
  
  rm -f $tmpfile >/dev/null 2>&1 || true
  
  Index: ossp-pkg/var/devtool.conf
  ============================================================
  $ cvs update -p -r1.1 devtool.conf
  ##
  ##  devtool.conf -- Development Tool Configuration
  ##
  
  %autogen
      @autogen shtool   1.5.4 "1.5.*" all
      @autogen libtool  1.4.2 "1.4*"
      @autogen autoconf 2.52  "2.5.*"
  
  %autoclean
      @autoclean shtool
      @autoclean libtool
      @autoclean autoconf
  
  %configure
      ./configure \
          --prefix=/tmp/var \
          --disable-shared \
          --enable-maintainer \
          --enable-debug \
          "$@"
  
  %version
      ./shtool version -l txt -n "OSSP VAR" -p "var_" -e VERSION
  
  %dist
      make distclean >/dev/null 2>&1
      ./shtool fixperm -v .
      V=`./shtool version -l txt -d short VERSION`
      ./shtool tarball -o var-${V}.tar.gz -d var-${V} -u ossp -g ossp \
                       -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf' -c 'gzip --best' .
  
  Index: ossp-pkg/var/devtool.func
  ============================================================
  $ cvs update -p -r1.1 devtool.func
  ##
  ##  devtool.func -- Development Tool Functions
  ##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  devtool_require () {
      t="$1"; o="$2"; p="$3"; e="$4"; a="$5"
      v=`($t $o | head -1 | awk "{ print \\\$$p; }") 2>/dev/null`
      if [ ".$v" = . ]; then
          echo "devtool:ERROR: unable to determine version of $t" 1>&2
          exit 1
      fi
      case "$v" in
          $e )
              ;;
          $a )
              echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
              ;;
          * )
              echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
              exit 1
              ;;
      esac
      echo "$v"
  }
  
  devtool_autogen () {
      tool=$1
      shift
      case $tool in
          autoconf )
              autoconf_version=`devtool_require autoconf --version 4 "$1" "$2"`
              echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
              autoconf
              autoheader 2>&1 | grep -v "is unchanged"
              ;;
          libtool )
              libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
              echo "generating (GNU Libtool $libtoolize_version): ltmain.sh, libtool.m4, config.guess, config.sub"
              libtoolize --force --copy >/dev/null 2>&1
              cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
                  sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` libtool.m4
              ;;
          shtool )
              shtoolize_version=`devtool_require shtoolize -v 3 "$1" "$2"`
              echo "generating (GNU Shtool $shtoolize_version): shtool"
              shift
              shift
              shtoolize -q "$@"
              ;;
      esac
  }
  
  devtool_autoclean () {
      tool=$1
      shift
      case $tool in
          autoconf )
              echo "removing: configure config.h.in"
              rm -f configure config.h.in
              ;;
          libtool )
              echo "removing: ltmain.sh libtool.m4 config.guess config.sub"
              rm -f ltmain.sh libtool.m4 config.guess config.sub
              ;;
          shtool )
              echo "removing: shtool"
              rm -f shtool
              ;;
      esac
  }
  
  Index: ossp-pkg/var/var-config.in
  ============================================================
  $ cvs update -p -r1.1 var-config.in
  #!/bin/sh
  ##
  ##  FOO - OSSP Foo Library
  ##  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  ##
  ##  This file is part of OSSP foo, an example library 
  ##  which can be found at http://www.ossp.org/pkg/foo/.
  ##
  ##  ...[whole license (BSD) or license summary and reference (GPL)]...
  ##
  ##  foo-config.in: library build utility
  ##
  
  DIFS=' 
  '
  
  #   tool
  tool_name="foo-config"
  
  #   library version
  lib_name="OSSP FOO"
  lib_version="@FOO_VERSION_STR@"
  
  #   build paths
  prefix="@prefix@"
  exec_prefix="@exec_prefix@"
  bindir="@bindir@"
  libdir="@libdir@"
  includedir="@includedir@"
  mandir="@mandir@"
  datadir="@datadir@"
  
  #   build options
  cflags="@CFLAGS@"
  ldflags="@LDFLAGS@"
  libs="@LIBS@"
  
  #   option defaults
  help=no
  version=no
  
  usage="$tool_name"
  usage="$usage [--help] [--version] [--all]"
  usage="$usage [--prefix] [--exec-prefix] [--bindir] [--libdir] [--includedir] [--mandir] [--datadir]"
  usage="$usage [--cflags] [--ldflags] [--libs]"
  if [ $# -eq 0 ]; then
      echo "$tool_name:Error: Invalid option" 1>&2
      echo "$tool_name:Usage: $usage" 1>&2
      exit 1
  fi
  output=''
  output_extra=''
  all=no
  prev=''
  OIFS="$IFS" IFS="$DIFS"
  for option
  do
      if [ ".$prev" != . ]; then
          eval "$prev=\$option"
          prev=''
          continue
      fi
      case "$option" in
          -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
             *) optarg='' ;;
      esac
      case "$option" in
          --help|-h)
              echo "Usage: $usage"
              exit 0
              ;;
          --version|-v)
              echo "$lib_name $lib_version"
              exit 0
              ;;
          --all)
              all=yes
              ;;
          --prefix)
              output="$output $prefix"
              ;;
          --exec-prefix)
              output="$output $exec_prefix"
              ;;
          --bindir)
              output="$output $bindir"
              ;;
          --libdir)
              output="$output $libdir"
              ;;
          --includedir)
              output="$output $includedir"
              ;;
          --mandir)
              output="$output $mandir"
              ;;
          --datadir)
              output="$output $datadir"
              ;;
          --cflags)
              output="$output -I$includedir"
              output_extra="$output_extra $cflags"
              ;;
          --ldflags)
              output="$output -L$libdir"
              output_extra="$output_extra $ldflags"
              ;;
          --libs)
              output="$output -lxds"
              output_extra="$output_extra $libs"
              ;;
          * )
              echo "$tool_name:Error: Invalid option" 1>&2
              echo "$tool_name:Usage: $usage" 1>&2
              exit 1;
              ;;
      esac
  done
  IFS="$OIFS"
  if [ ".$prev" != . ]; then
      echo "$tool_name:Error: missing argument to --`echo $prev | sed 's/_/-/g'`" 1>&2
      exit 1
  fi
  if [ ".$output" != . ]; then
      if [ ".$all" = .yes ]; then
          output="$output $output_extra"
      fi
      echo $output
  fi
  
  Index: ossp-pkg/var/var-config.pod
  ============================================================
  $ cvs update -p -r1.1 var-config.pod
  ##
  ##  VAR - OSSP variable expression library.
  ##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  ##
  ##  This file is part of OSSP VAR, an extensible data serialization
  ##  library which can be found at http://www.ossp.org/pkg/var/.
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  var-config.pod: VAR library build utility manual page
  ##
  
  =pod
  
  =head1 NAME
  
  B<var-config> - VAR library build utility
  
  =head1 VERSION
  
  OSSP VAR VAR_VERSION_STR
  
  =head1 SYNOPSIS
  
  B<var-config>
  [B<--help>]
  [B<--version>]
  [B<--all>]
  [B<--prefix>]
  [B<--exec-prefix>]
  [B<--bindir>]
  [B<--libdir>]
  [B<--includedir>]
  [B<--mandir>]
  [B<--datadir>]
  [B<--acdir>]
  [B<--cflags>]
  [B<--ldflags>]
  [B<--libs>]
  [B<--libs++>]
  
  =head1 DESCRIPTION
  
  The B<var-config> program is a little helper utility for easy configuring and
  building applications based on the var(3) library.  It can be used to query the
  C compiler and linker flags which are required to correctly compile and link
  the application against the var(3) library.
  
  =head1 OPTIONS
  
  B<var-config> accepts the following options:
  
  =over 4
  
  =item B<--help>
  
  Prints the short usage information.
  
  =item B<--version>
  
  Prints the version number and date of the installed var(3) library.
  
  =item B<--all>
  
  Forces the output of all flags, that is, including extra flags which are not
  B<VAR> specific.
  
  =item B<--prefix>
  
  Prints the installation prefix of architecture independent files
  
  =item B<--exec-prefix>
  
  Prints the installation prefix of architecture dependent files.
  
  =item B<--bindir>
  
  Prints the installation directory of binaries.
  
  =item B<--libdir>
  
  Prints the installation directory of libraries.
  
  =item B<--includedir>
  
  Prints the installation directory of include headers.
  
  =item B<--mandir>
  
  Prints the installation directory of manual pages.
  
  =item B<--datadir>
  
  Prints the installation directory of shared data.
  
  =item B<--acdir>
  
  Prints the installation directory of B<autoconf> data.
  
  =item B<--cflags>
  
  Prints the C compiler flags which are needed to compile the var(3)-based
  application. The output is usually added to the C<CFLAGS> variable of the
  applications C<Makefile>.
  
  =item B<--ldflags>
  
  Prints the linker flags (C<-L>) which are needed to link the application with
  the var(3) library. The output is usually added to the C<LDFLAGS> variable of
  the applications C<Makefile>.
  
  =item B<--libs>
  
  Prints the library flags (C<-l>) which are needed to link the application with
  the C var(3) library. The output is usually added to the C<LIBS> variable of the
  applications C<Makefile>.
  
  =item B<--libs++>
  
  Prints the library flags (C<-l>) which are needed to link the
  application with the C++ var(3) library. The output is usually added to
  the C<LIBS> variable of the applications C<Makefile>.
  
  =back
  
  =head1 EXAMPLE
  
   CC      = cc
   CFLAGS  = -O `var-config --cflags`
   LDFLAGS = `var-config --ldflags`
   LIBS    = -lm `var-config --libs`
  
   all: foo
   foo: foo.o
       $(CC) $(LDFLAGS) -o foo foo.o $(LIBS)
   foo.o: foo.c
       $(CC) $(CFLAGS) -c foo.c
  
  =head1 SEE ALSO
  
  var(3), cc(1).
  
  =head1 AUTHOR
  
   Ralf S. Engelschall
   rse@engelschall.com
   www.engelschall.com
  
  =cut
  

From ossp-cvs-owner@ossp.org  Sat Nov 24 09:13:55 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fAO8DPB11111; Sat, 24 Nov 2001 09:13:25 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id AE3C44CE61C; Sat, 24 Nov 2001 09:13:25 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ut_pcre.c l2_ut_pcre.h
Message-Id: <20011124081325.AE3C44CE61C@visp.engelschall.com>
Date: Sat, 24 Nov 2001 09:13:25 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   24-Nov-2001 09:13:25
  Branch: HEAD                             Handle: 2001112408132500

  Modified files:
    ossp-pkg/l2             l2_ut_pcre.c l2_ut_pcre.h

  Log:
    upgrade to PCRE 3.7

  Summary:
    Revision    Changes     Path
    1.4         +2  -2      ossp-pkg/l2/l2_ut_pcre.c
    1.4         +3  -3      ossp-pkg/l2/l2_ut_pcre.h
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ut_pcre.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 l2_ut_pcre.c
  --- ossp-pkg/l2/l2_ut_pcre.c	2001/10/06 14:30:42	1.3
  +++ ossp-pkg/l2/l2_ut_pcre.c	2001/11/24 08:13:25	1.4
  @@ -6,7 +6,7 @@
    *  DO NOT EDIT THIS FILE, IT WAS AUTOMATICALLY GENERATED!
    *
    *  This is an automatically generated, extremely stripped down
  - *  version of the PCRE 3.5 library from the Philip Hazel.
  + *  version of the PCRE 3.7 library from the Philip Hazel.
    *  This version is still distributed under the same original PCRE
    *  Open Source license, but Philip Hazel is no longer responsible
    *  for this version.
  @@ -3753,7 +3753,7 @@
   
   		rc = match_block.offset_overflow ? 0 : match_block.end_offset_top / 2;
   
  -		if (match_block.offset_end < 2)
  +		if (offsetcount < 2)
   			rc = 0;
   		else {
   			offsets[0] = start_match - match_block.start_subject;
  Index: ossp-pkg/l2/l2_ut_pcre.h
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 l2_ut_pcre.h
  --- ossp-pkg/l2/l2_ut_pcre.h	2001/10/06 14:30:42	1.3
  +++ ossp-pkg/l2/l2_ut_pcre.h	2001/11/24 08:13:25	1.4
  @@ -6,7 +6,7 @@
    *  DO NOT EDIT THIS FILE, IT WAS AUTOMATICALLY GENERATED!
    *
    *  This is an automatically generated, extremely stripped down
  - *  version of the PCRE 3.5 library from the Philip Hazel.
  + *  version of the PCRE 3.7 library from the Philip Hazel.
    *  This version is still distributed under the same original PCRE
    *  Open Source license, but Philip Hazel is no longer responsible
    *  for this version.
  @@ -48,8 +48,8 @@
   #define PCRE_PREFIX l2_util_
   
   #define PCRE_MAJOR          3
  -#define PCRE_MINOR          5
  -#define PCRE_DATE           15-Aug-2001
  +#define PCRE_MINOR          7
  +#define PCRE_DATE           29-Oct-2001
   
   #ifdef PCRE_PREFIX
   #if defined(__STDC__) || defined(__cplusplus)

From ossp-cvs-owner@ossp.org  Fri Nov 30 10:44:49 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fAU9imX43062; Fri, 30 Nov 2001 10:44:48 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 4D7244CE737; Fri, 30 Nov 2001 10:44:48 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.h.in l2_spec.c l2_test.c
Message-Id: <20011130094448.4D7244CE737@visp.engelschall.com>
Date: Fri, 30 Nov 2001 10:44:48 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   30-Nov-2001 10:44:48
  Branch: HEAD                             Handle: 2001113009444700

  Modified files:
    ossp-pkg/l2             l2.h.in l2_spec.c l2_test.c

  Log:
    Allow a channel tree specification to be a printf-style string to make
    the API more powerful and to remove the burden from the application to
    pre-format the specification in an own buffer.

  Summary:
    Revision    Changes     Path
    1.24        +2  -1      ossp-pkg/l2/l2.h.in
    1.4         +26 -4      ossp-pkg/l2/l2_spec.c
    1.48        +1  -1      ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2.h.in
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 l2.h.in
  --- ossp-pkg/l2/l2.h.in	2001/11/16 19:53:05	1.23
  +++ ossp-pkg/l2/l2.h.in	2001/11/30 09:44:47	1.24
  @@ -229,7 +229,8 @@
   l2_result_t   l2_channel_env        (l2_channel_t *ch, l2_env_t **env);
   
   /* channel tree specification operations */
  -l2_result_t   l2_spec               (l2_channel_t **ch, l2_env_t *env, const char *spec);
  +l2_result_t   l2_spec               (l2_channel_t **ch, l2_env_t *env, const char *spec, ...);
  +l2_result_t   l2_vspec              (l2_channel_t **ch, l2_env_t *env, const char *spec, va_list ap);
   
   /* utility operations */
   l2_result_t   l2_util_setparams     (l2_env_t *env, l2_param_t p[], const char *fmt, va_list ap);
  Index: ossp-pkg/l2/l2_spec.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 l2_spec.c
  --- ossp-pkg/l2/l2_spec.c	2001/11/07 16:43:07	1.3
  +++ ossp-pkg/l2/l2_spec.c	2001/11/30 09:44:47	1.4
  @@ -40,10 +40,29 @@
   extern int  l2_spec_parse(void *);
   
   /* build a channel tree according to a textual specification */
  -l2_result_t l2_spec(l2_channel_t **ch, l2_env_t *env, const char *spec)
  +l2_result_t l2_spec(l2_channel_t **ch, l2_env_t *env, const char *spec, ...)
   {
  +    va_list ap;
  +    l2_result_t rv;
  +
  +    /* pass-through to va_list-based variant */
  +    va_start(ap, spec);
  +    rv = l2_vspec(ch, env, spec, ap);
  +    va_end(ap);
  +
  +    return rv;
  +}
  +
  +/* build a channel tree according to a textual specification (va_list variant) */
  +l2_result_t l2_vspec(l2_channel_t **ch, l2_env_t *env, const char *spec, va_list ap)
  +{
       l2_spec_ctx_t ctx;
       void *yyscan;
  +    char *specstr;
  +
  +    /* on-the-fly create or take over specification string */
  +    if ((specstr = l2_util_vasprintf(spec, ap)) == NULL)
  +        return L2_ERR_ARG;
   
       /* initialize scanner */
       l2_spec_lex_init(&yyscan);
  @@ -52,9 +71,9 @@
       /* establish our own context which is passed 
          through the parser and scanner */
       ctx.yyscan   = yyscan;
  -    ctx.inputptr = spec;
  -    ctx.inputbuf = spec;
  -    ctx.inputlen = strlen(spec);
  +    ctx.inputptr = specstr;
  +    ctx.inputbuf = specstr;
  +    ctx.inputlen = strlen(specstr);
       ctx.env      = env;
       ctx.ch       = NULL;
       ctx.chTmp    = NULL;
  @@ -66,6 +85,9 @@
   
       /* destroy scanner */
       l2_spec_lex_destroy(yyscan);
  +
  +    /* destroy specification string */
  +    free(specstr);
   
       /* provide root/top-level channel as result */
       *ch = ctx.ch;
  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.47 -r1.48 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2001/11/16 19:40:55	1.47
  +++ ossp-pkg/l2/l2_test.c	2001/11/30 09:44:47	1.48
  @@ -94,7 +94,7 @@
              "         remotehost=en1, logpid=1, target=remote)"
              "}";
       fprintf(stderr, "configuring: %s\n", spec);
  -    if ((rv = l2_spec(&ch, env, spec)) != L2_OK)
  +    if ((rv = l2_spec(&ch, env, "%s", spec)) != L2_OK)
           die(env, rv, "failed to parse specification");
   #else
       /* create noop channel */

From ossp-cvs-owner@ossp.org  Fri Nov 30 10:50:46 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fAU9ojX44345; Fri, 30 Nov 2001 10:50:45 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 4604D4CE726; Fri, 30 Nov 2001 10:50:45 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.h
Message-Id: <20011130095045.4604D4CE726@visp.engelschall.com>
Date: Fri, 30 Nov 2001 10:50:45 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   30-Nov-2001 10:50:45
  Branch: HEAD                             Handle: 2001113009504400

  Modified files:
    ossp-pkg/sa             sa.h

  Log:
    add missing API function call namespace protector

  Summary:
    Revision    Changes     Path
    1.25        +1  -0      ossp-pkg/sa/sa.h
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.h
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 sa.h
  --- ossp-pkg/sa/sa.h	2001/10/31 12:41:53	1.24
  +++ ossp-pkg/sa/sa.h	2001/11/30 09:50:44	1.25
  @@ -72,6 +72,7 @@
   #define sa_type         SA_CONCAT(SA_PREFIX,sa_type)
   #define sa_timeout      SA_CONCAT(SA_PREFIX,sa_timeout)
   #define sa_buffer       SA_CONCAT(SA_PREFIX,sa_buffer)
  +#define sa_option       SA_CONCAT(SA_PREFIX,sa_option)
   #define sa_syscall      SA_CONCAT(SA_PREFIX,sa_syscall)
   #define sa_bind         SA_CONCAT(SA_PREFIX,sa_bind)
   #define sa_connect      SA_CONCAT(SA_PREFIX,sa_connect)

From ossp-cvs-owner@ossp.org  Fri Nov 30 10:51:10 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fAU9pAX44618; Fri, 30 Nov 2001 10:51:10 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id ED2D74CE73B; Fri, 30 Nov 2001 10:51:09 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ut_sa.h
Message-Id: <20011130095109.ED2D74CE73B@visp.engelschall.com>
Date: Fri, 30 Nov 2001 10:51:09 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   30-Nov-2001 10:51:09
  Branch: HEAD                             Handle: 2001113009510900

  Modified files:
    ossp-pkg/l2             l2_ut_sa.h

  Log:
    add missing API function call namespace protector

  Summary:
    Revision    Changes     Path
    1.13        +1  -0      ossp-pkg/l2/l2_ut_sa.h
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ut_sa.h
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 l2_ut_sa.h
  --- ossp-pkg/l2/l2_ut_sa.h	2001/10/31 21:26:11	1.12
  +++ ossp-pkg/l2/l2_ut_sa.h	2001/11/30 09:51:09	1.13
  @@ -72,6 +72,7 @@
   #define sa_type         SA_CONCAT(SA_PREFIX,sa_type)
   #define sa_timeout      SA_CONCAT(SA_PREFIX,sa_timeout)
   #define sa_buffer       SA_CONCAT(SA_PREFIX,sa_buffer)
  +#define sa_option       SA_CONCAT(SA_PREFIX,sa_option)
   #define sa_syscall      SA_CONCAT(SA_PREFIX,sa_syscall)
   #define sa_bind         SA_CONCAT(SA_PREFIX,sa_bind)
   #define sa_connect      SA_CONCAT(SA_PREFIX,sa_connect)

From ossp-cvs-owner@ossp.org  Fri Nov 30 18:12:56 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fAUHCtQ22174; Fri, 30 Nov 2001 18:12:55 +0100 (CET)
Date: Fri, 30 Nov 2001 18:12:55 +0100 (CET)
Message-Id: <200111301712.fAUHCtQ22174@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   30-Nov-2001 18:12:55
  Branch: HEAD                             Handle: 2001113017125400

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    Reorganization and clarification.

  Summary:
    Revision    Changes     Path
    1.44        +241 -346   ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.43 -r1.44 TODO
  --- ossp-pkg/l2/TODO	2001/11/16 19:40:55	1.43
  +++ ossp-pkg/l2/TODO	2001/11/30 17:12:54	1.44
  @@ -1,357 +1,185 @@
  +OSSP L2 TODO
  +============
   
  -OSSP L2
  -=======
  +New Channels ----------------------------------------------
  +- l2_ch_bofh does something cool but is undocumented and has its
  +    source mangled/scrambled ;)
  +
  +- l2_ch_asynch spawns a new process and communicates with
  +    the stemming channels via shared memory. Might be the
  +    way to implement autoflush as well, or rather with its
  +    own shared memory and sub-process.
  +
  +- l2_ch_smart is a smart debug buffer channel which flushes
  +    only if errors occur.
  +
  +- l2_ch_repeat prints 'last message repeated 100 times.'
  +
  +- l2_ch_action is similar to pipe channel, but executes a given
  +    command conditionally of the incoming priority or a regex.
  +    -> Might be implemented by combining a pcre, filter, and pipe (ms)
  +
  +- l2_ch_proxy sniffs a tcp connection and dumps its traffic to
  +    standard out or to the next channel, allowing for parsing
  +    through an unknown protocol.
  +
  +- l2_ch_nntp for administration through news.
  +
  +- l2_ch_snmp logs a stream to an SNMP listener.
  +
  +Existing Channels -----------------------------------------
  +- l2_ch_socket bind and udp parameters need work.
  +- l2_ch_socket consider taking a fd at configuration.
  +
  +- l2_ch_filter should have a PCRE_CASELESS option.
  +
  +- l2_ch_pcre is too large and might benefit from a
  +    smaller set of pattern matching logic.
  +
  +- l2_ch_syslog should inherit socket logic to directly implement
  +    syslog communication, allowing for remote syslog operations.
  +- l2_ch_syslog should be trimmed to necessary functionality, not
  +    necessarily everything that the system syslog(3) implements.
  +
  +- l2_ch_irc has a problem pinging its host to stay alive.
  +
  +- l2_ch_prefix produces implicitly two log messages if a
  +    following buffer channel would not accumulate them.
  +- l2_ch_prefix should have printf style without strftime.
  +- l2_ch_prefix should apply __FILE__, __LINE__, (__FUNCTION__)
  +    as options in case we are building in custom striptease mode.
  +
  +- l2_ch_file should optionally support file locking via fcntl(3).
  +
  +- l2_ch_pipe needs an overhaul once l2_ch_async is implemented.
  +    Also needs a review for dangling descriptors. During configure
  +    only checks existance of command in non-shell mode. Remove
  +    hard coded 256 in exec arguments.
  +- l2_ch_pipe should use a standardized url like prg:/path/to/program.
  +- l2_ch_pipe might consider taking a fd at configuration.
  +
  +- l2_ch_buffer buffer is duplicated when the process forks. This
  +    means the buffer has to be flushed in advance or the content
  +    is dumped twice. If the buffer would remember the pid of the
  +    last writer, it could discard the contents of the buffer when
  +    the pid changes. This is because the parent retains the pid
  +    and the buffer content while the child changes the pid and
  +    discards the content. Should be an optionial feature.
  +    -> Can be immediately implemented (rse)
  +- l2_ch_buffer needs a L2_OK and L2_OK_PASS consistency check
  +- l2_ch_buffer should not use different param types in alarm and setitimer(2).
  +- l2_ch_buffer should incorporate multiplexer logic to properly flush
  +    when multiple buffers are in use. Can be implemented via a environment
  +    level timer and a lowest common denominator alarm function. For example,
  +        tmr1 9secs; tmr2 6secs; envtmr expires every lcd(9,6) = 3secs
  +- l2_ch_buffer should not implement an autoflush, rather L2 should
  +    have a multiplexed timer object to serve timer requests from
  +    incoming callbacks.
  +
  +Library-wide changes --------------------------------------
  +- Replace l2_sockmon with netcat or peep.
  +- Add nonreentrant log method like mm.
  +- Add striptease target to Makefile.
  +- Provide a C++ implementation also.
  +- l2tool needs an [addr:]port option
  +- Adjust license to ISC/MIT/BSD.
  +- API access through the LogManager logm;
  +- Jump to a callback in case of error, throw/exit.
  +- Offer the option to reopen the logfile on each write.
  +- Optimize log operations from log(..) {}
  +    to log(....);
  +
  +- Implicit level decision should default to >=,
  +    then follow with <=
  +                      =
  +                      ;
  +                      *
  +
  +- '\r\n' Uebersetzung
  +    Bei Input \r und \n wegstrippen, und von jedem Output Channel
  +    entweder \r\n (smtp) oder nur \n wieder anhaengen lassen. Oder
  +    als Kanaloption, wobei \r, \r\n, \n, gleich String, oder gar nix.
  +
  +- Spec-facility
  +    To debug an application, sometimes it's overkill to log everything
  +    at DEBUG level. I see an improvement when an additional facility
  +    can be specified. Example: DEBUG/LMTP but don't care about NNTP in
  +    the lmtp2nntp program. Possibly could be implemented as a second mask.
  +    -> Needs more consideration before implementation should start (rse)
  +
  +- Prelogging
  +    L2 should log even before it is initialized. Maybe the log function
  +    should buffer everything as long as a NULL l2-context is passed and
  +    if ever a non-NULL context is passed every remembered message should
  +    be logged afterwards or if destroy/flush is executed with a NULL-
  +    context it should print the buffered stuff to stderr.
  +    -> Can be immediately implemented, but one has to be carefully here.
  +       I want to think about this a little bit more in-depth. (rse)
  +
  +- Config file
  +    Might be used with the previous prelogging principle in mind.
  +    Namely, a file that describes a set of channel specs for one
  +    or many configurations. Path is searched in the following order:
  +      1. /etc/liblog.conf
  +      2. (in ., .., ../..)
  +      3. $HOME/.liblog.conf
  +
  +- hook_write methods should receive a null-termined string
  +    instead of buf+size, because some channels like syslog
  +    otherwise have to rebuffer the message and append the
  +    null terminator character.
   
  -Spec-Parsing:
  -- location tracking
  -- target=remote has to be currently after host=xxx because of
  -  single-configuration procedure
  +- An optional syslog(3) compatible API for converting syslog-only based
  +  applications (like sendmail) to (restricted) liblog-based applications.
  +  -> Des ist schon implimentiert in fakesyslog oder? (ms)
   
  -- prefix channel produces implicitly two log messages if
  -  a following buffer channel would not accumulate them. Hmmm..
  +Spec-parsing ----------------------------------------------
  +- implement location tracking
   
  -- bugfix l2tool and after it works 100% remove l2_test 
  -  in favor of l2tool and add instead a test shell script
  -  which calls l2tool with various input specifications.
  +- target=remote has to be currently after host=xxx because of
  +    single-configuration procedure
   
  -Channel-Only Revamping:
  +- bugfix l2tool and after it works 100% remove l2_test in
  +    favor of l2tool and add instead a test shell script
  +    which calls l2tool with various input specifications.
  +
  +Channel-Only Revamping ------------------------------------
  +- l2_objects update
   - syscall override ala OSSP SA in l2_env_t
  -- l2_objects.fig update
   - perhaps rename l2_env to l2_ctx and l2_channel_ to just l2_
  -
  -- Perhaps we should later also write an l2_ch_bofh.c which
  -  something very cool but is undocumented and has its source
  -  mangled/scrambled ;)
  -
  -- Problem: OpenPKG fakesyslog ist nasty, because it doesn't provide
  -  logging to multiple files or filter out some messages. Additionally
  -  the app has to be restarted in order to reopen the logfile which
  -  is nasty for MTAs like Postfix in case of very high loads (because
  -  they start again processign the queue from scratch). What we need
  -  is a new L2-based libsyslog.a which sends the stuff via Unix Domain
  -  socket to an L2 daemon which in turn logs to targets via L2.
  -
  -- "smart debug buffer channel": 
  -   extra debug buffer, flush only if error occurs
  -
  -- "repeat channel": "last message repeated 100 times"
  -
  -- "\r\n" Problematik: Vorschlag: Bei Input \r und \n wegstrippen,
  -  und von jedem Output Channel entweder \r\n (smtp) oder nur \n
  -  wieder anhaengen lassen.
  -
  -- thl: log facility
  -  To debug an application, sometimes it's overkill to log everything at
  -  DEBUG level. I see an improvement when an additional facility can be
  -  specified. Example: DEBUG/LMTP but don't care about NNTP in the
  -  lmtp2nntp program. Possibly could be implemented as a second mask.
  -  -> needs more consideration before implementation should start (rse)
  -
  -- thl: buffer fork() awareness
  -  When the process forks, the buffer is duplicated. Currently this means
  -  the buffer has to be flushed in advance or the content is dumped twice.
  -  If the buffer would remember the pid of the last writer, it could
  -  discard the contents of the buffer when the pid changes. This is because
  -  the parent retains the pid and the buffer content while the child
  -  changes the pid and discards the content. Should be an optionial feature.
  -  -> can be immediately implemented (rse)
  -
  -- thl: prelog
  -  I want to log everything even things that happen before L2 is
  -  initialized. Complicated, i know. Maybe the log function should buffer
  -  everything as long as a NULL l2-context is passed and if ever a non-NULL
  -  context is passed every remembered message should be logged afterwards
  -  or if destroy/ flush is executed with a NULL-context it should print the
  -  buffered stuff to stderr.
  -  -> can be immediately implemented, but one has to be carefully here.
  -     Seems like I want to think about this a little bit more in-depth. (rse)
  -
  -o Another great rse idea, make a proxy server channel that sniffs a tcp
  -  connection and dumps its traffic to standard out. Optionally, it could dump
  -  this to the next channel, allowing for parsing through an unknown protocol.
  -
  -RSE:
  -- channel API cleanup: open semantics
  -- bind and udp parameters in socket channel
  -- prefix channels:
  -  - printf style without strftime;
  -- l2tool [addr:]port
  -- autoflush via shared memory and sub-process?
  -- NNTP channel
  -- SNMP trap channel
  -- perhaps replace too large PCRE stuff with smaller pattern
  -  matching stuff
  -- file channel should optionally support file locking 
  -  via fcntl(3).
  -- idea of an asynch channel, that spawns a new process and
  -  communicates with the stemming channels via shared memory
  -
  -Lunchtime:
  -- Correct DNS resolve blocking problem by using a funky asynchronous DNS lib.
  -  This leads to easy reimplementation of the prefix channel (asynchronous)
  -
  -MS:
  -- netcat can probably replace l2_sockmon, remove from build and add netcat
  -- pipe channel may need a big overhaul if we redesign
  -  it around the asynch channel principle
  -- review pipe handler for dangling descriptors
  -- configure only checks existance of command in non-shell mode
  -- find alternative to exec arguments which is hard coded to 256
  -- signal handler chaining, save old signal handler and call it after our own
  -- consider adding options such as PCRE_CASELESS to filter channel
  -- implement "action" channel, can be based on pipe channel
  -- correct problem with multiple buffer channels using the timer
  -    can be solved by running a signal handler at the environment level, then
  -    approximating the (multiple) user-chosen timer intervals by setting the
  -    environment timer to expire at the time of the least common denominator of
  -    the configured timer intervals
  -      ie: tmr1 9secs; tmr2 6secs; envtmr will expire every lcd(9,6) = 3secs
  -    alarm and setitimer methods are using different param types! Fixit.
  -    review newly introduced timer code for L2_OK and L2_OK_PASS inconsistency
  -- solve problem with buffer (timer), irc (ping), and buffer (autoflush), by
  -  creating sleep/ping threads. The disadvantage is that we must depend on a
  -  pth installation, and force the parent app to be multithreaded.
  -  Alternatively, we can spawn a management process in l2_stream_create(), who
  -  owns management resources globally available to all channels. Or write the
  -  l2 mini-protocol :-(
  -- split all timer server code out of L2 and into new multiplexed timer object
  -    probably must use callbacks, unless user signal space is occupied
  -
  -ISSUES
  -------
  -
  -o hook_write's should perhaps receive a nul-termined string
  -  instead of buf+size, because syslog else has to re-buffer it
  -  in order to append the nul terminator character.
  -
  -o Stream Members: channels static array
  -  - consider dynamic
  -
  -o buffer
  -  user needs to know how a buffer object behaves in
  -  relation to up/downstream channels. When does it
  -  pass its data to the next channel, when does it
  -  erase, what happens to its data when it is over
  -  written or flushed...
  -
  -o buffer timer
  -  How on earth to use a C-style exception handler to flush
  -  our buffer? We can't directly call ANY function from an
  -  exception state, so this might not work at all.
  -
  -  Depends on SIGALARM, only one handler of which may exist.
  -  A more robust implementation would not use such a precious
  -  resource, and guard against signal collision with other channels.
  -
  -o syslog
  -  many options need docu, and we should mention to
  -  the user that more info is found in the man page
  -  for syslog(), because after all that is what is
  -  doing all the work in our implementation. Also,
  -  can we really properly document these features
  -  if they change from one system's syslog to the next?
  -
  -o errors
  -  when a channel fails during an operation, how
  -  does it report this? How should a user interpret
  -  the error message or other data? Do we need more
  -  accurate or detailed error messages in the channel
  -  code? When a channel fails, does it continue
  -  passing data on to downstream channels? Is it
  -  corrupt data?
  -
  -o Syslog Kanal
  -  - Trim down to what will be used, right now the
  -    channel supports ALL functionality through syslog(3)
  -
  -BRAINSTORMING
  --------------
  -
  -Braindump:
  -- debugging is special case of logging
  -- tracing is special case of debugging
  -
  -Channel Handler Configuration:
  -o l2_handler_null
  -  - no configuration at all
  -o l2_handler_fd
  -  - mode="unix|stdio"
  -  - fd=int|FILE*
  -o l2_handler_file
  -  - mode="unix|stdio"
  -  - path=char*
  -  - append="yes|no"
  -o l2_handler_pipe
  -  - url="prg:/path/to/program"
  -  - fd=int
  -o l2_handler_socket
  -  - url="tcp://hostname:port"
  -  - fd=int
  -o l2_handler_syslog
  -  - ident=char*
  -  - should have its own logic
  -    and not use unix lib syslog()
  -    thus able to write to a remote
  -    syslog daemon
  -o l2_handler_filter
  -  - pattern=char*
  -o l2_handler_prefix
  -  - prefix=char*
  -o l2_handler_buffer
  -  - size=size_t
  -o all output channels
  -  - should they have downstream, or be true endpoints?
  -o l2_ch_socket
  -  - write should handle partial send()
  -    thus check the return of send
  -o l2_ch_buffer
  -  - write() must implicitly flush() when incoming
  -    data is larger than remaining buffer capacity
  -o l2_ch_action
  -  - new action channnel could accept a regexp or L2_LEVEL as configuration,
  -    and then run a callback function or exec a binary depending on incoming
  -    l2 stream messages. For example, lmtp2nntp could conditionally run code
  -    via the new action channel to monitor spam or alert an admin about a
  -    flawed OR CURIOUs LMTP header. However, the action channel is also
  -    appealling to other applications that don't run as daemons or at the
  -    system level.
  -  - l2_channel_config(l2Act, "regexp,run", "(nobody|cz)", "callback");
  -  - l2_channel_config(l2Act, "funcptr", pfnAddtcpwrap);
  -
  -License:
  -- ISC/MIT/BSD
  -
  -Sprache:
  -- C++
  -- C
  -
  -Aufbau:
  -1. Layer C++ API      log.hpp,  log.cpp
  -2. Layer C   API      log.h     log.c
  -3. Layer C   Backend  backend.h backend.c
  -- "make striptease"
  -
  -- optimierung:
  -log(..)
  -{
  -}
  -:
  -log(....);
  -:
  -
  -API Levels:
  -- PANIC    (-> LOG_EMERG)
  -- CRITICAL (-> LOG_CRIT)
  -- ERROR    (-> LOG_ERR)
  -- WARNING
  -- NOTICE
  -- INFO
  -- TRACE    (-> LOG_DEBUG)
  -- DEBUG    (-> LOG_DEBUG)
  -- ALERT
  -
  -Level Entscheidungen:
  ->= (default)
  -<=
  -=
  -;
  -*
  -
  -Backend Channels:
  -1 Level -> N Channels
  -- file (append)
  -- program (stdin)
  -- syslog
  -- stderr/stdout
  -- null (discard, nicht nur /dev/null)
  -- filedescriptor (escape/ext)
  -- callback function
  -
  -Log Messages:
  -- raw
  -- optional prefixes (inclusive order):
  -  string
  -  facility
  -  level
  -  timestamp
  -  pid
  -  (tid)
  -- errno (like syslog %m)
  -- eigene %{foo}x mit callback function mit context
  -- automatisch: number -> string mapping (fuer error strings)
  -- __FILE__, __LINE__, (__FUNCTION__)
  -
  -Configuration:
  -- ueber C/C++ API
  -- zusaetzlich Config-File
  -  1. /etc/liblog.conf
  -  2. (in ., .., ../..)
  -  3. $HOME/.liblog.conf
  -
  -- !debug -> !code
  -
  -API C (ala MM):
  -- reentrant: log_xxx
  -- non-reentrant: Log_xxx
  -
  -Message Filtering/Masking:
  -- facility und/oder levels und/oder wildcard pattern
  -
  -API Using:
  -- C++:
  -  LogManager logm;
  -  logm.debug1("test");
  -  logm.configure("
  -
  -- C:
  -  log lh;
  -  lh = log_init(LOG_CFGFILE|LOG_CFGPARENT|LOG_XXX|..., "foo" (=facility));
  -  log_configure(lh, "foo", LOG_WARN|LOG_LESSER, null);
  -  log_cb(lh, "x", func, ctx);
  -  int func(void *ctx, char *str, ...);
  -  log_msg(lh, LOG_WARN, "..%{foo}x %s...%E..", cp);
  -  log_dbg(lh, "..%{foo}x %s...%E..", cp);
  -  log_kill(lh);
  -
  -- Buffered I/O:
  -  fuer manche channels non-buffered (debug, errors)
  -  fuer manche andere aber buffered (access log, performance)
  -  loesung: I/O ueber callbacks (3x: open, write, close) z.B. RRDTool
  +- API cleanup for open semantics
   
  -- Varargs:
  -  log ist nur wrapper fuer vlog
  -
  -- Error Handling:
  -  o log kein Return Code
  -  o aber error callback function (dadrin in C++: throw, in C: exit)
  -
  -- Newline Handling:
  -  option fuer channel: \r, \r\n, \n oder gleich string
  -  und moeglichkeit gar nix (string="")
  -
  -- Perhaps:
  -  optionally reopen logfile on each write
  -
  -- An optional syslog(3) compatible API for converting syslog-only based
  -  applications (like sendmail) to (restricted) liblog-based applications.
  -
  -- Ein Wort noch zu variablen Argumentlisten in cpp-Makros: gcc
  -  unterstützt dies in in der GNU- und der C99-Ausführung. Das heißt,
  -  der "..." Parameter kann im Makro respektive über "args" und über
  -  "__VA_ARGS__" angesprochen werden. Wichtig ist dabei, daß "..."
  -  nicht leer sein -- also kein Argument enthalten -- darf, da sonst
  -  der Präprocessor an einem eventuell vorhandenen Komma scheitert.
  -  Dies kann beim gcc durch Voranstellen von "##" vor dem "__VA_ARGS__"
  -  umgangen werden. Ouch.
  -  Beide Erweiterungen sind derzeit nicht aktiv, wenn mit -ansi
  -  compiliert wird. Explizit anschalten läßt sich die standard-konforme
  -  Erweiterung über "-std=c9x", bzw. "-std=c99" bei neueren gccs.
  +Related Projects ------------------------------------------
  +- Custom libsyslog
  +    OpenPKG fakesyslog is nasty, because it doesn't provide logging
  +    to multiple files or filter out some messages. Additionally the
  +    app has to be restarted in order to reopen the logfile which is
  +    nasty for MTAs like Postfix in case of very high loads (because
  +    they start again processign the queue from scratch). What we need
  +    is a new L2-based libsyslog.a which sends the stuff via Unix Domain
  +    socket to an L2 daemon which in turn logs to targets via L2.
  +
  +Documentation ---------------------------------------------
  +- l2_ch_buffer
  +    How the buffer object behaves in relation to up/downstream
  +    channels. When does it pass its data to the next channel,
  +    when does it erase, what happens to its data when it is
  +    over written or flushed.
  +
  +- l2_ch_syslog
  +    Describe the options, and mention that more info is found
  +    in the man page for syslog(3). Identify features that
  +    change from one system to the next.
  +
  +- l2 errors
  +    Describe how an l2 channel reports errors when it fails during
  +    an operation, and how a user should interpret the error message?
  +    Describe whether a channel continues passing data on downstream
  +    if it somehow fails, and if the data will be corrupt.
   
  -High-Level Configuration Interface
  +High-level configuration interface
   ==================================
  -
   Config-File (OSSP):
  -
   logging {
       channel 0 null ALL; 
   
  @@ -373,11 +201,9 @@
   
       log access 0;
       log stat 1;
  -
   };
   
   Alternative: 
  -
   log access {
       error: syslog;
       prefix -> { 
  @@ -388,7 +214,6 @@
   }
   
   Command-Line (lmtp2nntp):
  -
   $ lmtp2nntp -l 'INFO:'
     { prefix(prefix="%Y-%m-%d/%H:%M:%S %L")
       ->{ buffer(size=4k)
  @@ -397,4 +222,74 @@
         };
       error:syslog
     }
  +
  +Brainstorming ---------------------------------------------
  +- Debugging can be implemented as a special case of logging
  +- Tracing can be implemented as a special case of debugging
  +
  +
  +*** *** *** *** *** *** Out of date *** *** *** *** *** ***
  +*** *** *** *** *** *** Out of date *** *** *** *** *** ***
  +*** *** *** *** *** *** Out of date *** *** *** *** *** ***
  +
  +
  +Backend channels ------------------------------------------
  +- Level -> N Channels
  +- file (append)
  +- program (stdin)
  +- syslog
  +- stderr/stdout
  +- null (discard, nicht nur /dev/null)
  +- filedescriptor (escape/ext)
  +- callback function
  +
  +Aufbau ----------------------------------------------------
  +Layer C++ API      log.hpp,  log.cpp
  +Layer C   API      log.h     log.c
  +Layer C   Backend  backend.h backend.c
  +
  +- Ein Wort noch zu variablen Argumentlisten in cpp-Makros: gcc
  +  unterstützt dies in in der GNU- und der C99-Ausführung. Das heißt,
  +  der "..." Parameter kann im Makro respektive über "args" und über
  +  "__VA_ARGS__" angesprochen werden. Wichtig ist dabei, daß "..."
  +  nicht leer sein -- also kein Argument enthalten -- darf, da sonst
  +  der Präprocessor an einem eventuell vorhandenen Komma scheitert.
  +  Dies kann beim gcc durch Voranstellen von "##" vor dem "__VA_ARGS__"
  +  umgangen werden. Ouch. Beide Erweiterungen sind derzeit nicht aktiv,
  +  wenn mit -ansi compiliert wird. Explizit anschalten läßt sich die
  +  standard-konforme Erweiterung über "-std=c9x", bzw. "-std=c99" bei
  +  neueren gccs.
  +
  +Log Messages:
  +- raw
  +- optional prefixes (inclusive of order)
  +    string
  +    facility
  +    level
  +    timestamp
  +    pid
  +    (tid)
  +- errno (like syslog %m)
  +- eigene %{foo}x mit callback function mit context
  +- automatisch number -> string mapping (fuer error strings)
  +- !debug -> !code
  +
  +To be deleted ---------------------------------------------
  +- C:
  +  log lh;
  +  lh = log_init(LOG_CFGFILE|LOG_CFGPARENT|LOG_XXX|..., "foo" (=facility));
  +  log_configure(lh, "foo", LOG_WARN|LOG_LESSER, null);
  +  log_cb(lh, "x", func, ctx);
  +  int func(void *ctx, char *str, ...);
  +  log_msg(lh, LOG_WARN, "..%{foo}x %s...%E..", cp);
  +  log_dbg(lh, "..%{foo}x %s...%E..", cp);
  +  log_kill(lh);
  +
  +- Buffered I/O:
  +  fuer manche channels non-buffered (debug, errors)
  +  fuer manche andere aber buffered (access log, performance)
  +  loesung: I/O ueber callbacks (3x: open, write, close) z.B. RRDTool
  +
  +- Varargs:
  +  log ist nur wrapper fuer vlog
   

From ossp-cvs-owner@ossp.org  Sat Dec  1 13:36:01 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fB1Ca0X20495; Sat, 1 Dec 2001 13:36:00 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 7B1354CE697; Sat,  1 Dec 2001 13:36:00 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str str.pod
Message-Id: <20011201123600.7B1354CE697@visp.engelschall.com>
Date: Sat,  1 Dec 2001 13:36:00 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   01-Dec-2001 13:36:00
  Branch: HEAD                             Handle: 2001120112355900

  Modified files:
    ossp-pkg/str            str.pod

  Log:
    add missing quote

  Summary:
    Revision    Changes     Path
    1.29        +1  -1      ossp-pkg/str/str.pod
  ____________________________________________________________________________

  Index: ossp-pkg/str/str.pod
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 str.pod
  --- ossp-pkg/str/str.pod	2001/08/16 13:21:22	1.28
  +++ ossp-pkg/str/str.pod	2001/12/01 12:35:59	1.29
  @@ -699,7 +699,7 @@
   =item B<Match a String>
   
    char *var = "foo:bar";
  - if (str_parse(var, "^.+?:.+$/) > 0) {
  + if (str_parse(var, "^.+?:.+$/") > 0) {
        /* var matched */
        ...
    }

From ossp-cvs-owner@ossp.org  Mon Dec  3 11:51:29 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fB3ApSM64582; Mon, 3 Dec 2001 11:51:28 +0100 (CET)
Date: Mon, 3 Dec 2001 11:51:28 +0100 (CET)
Message-Id: <200112031051.fB3ApSM64582@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c var.h var.pod var_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   03-Dec-2001 11:51:27
  Branch: HEAD                             Handle: 2001120310512700

  Modified files:
    ossp-pkg/var            var.c var.h var.pod var_test.c

  Log:
    Extended the interface of var_cb_t to support variable arrays. To
    customize your already existing lookup functions quickly to the new
    interface, just add the "int index" parameter to the function's
    prototype and add the lines
    
        if (index != 0)
            return VAR_ERR_ARRAY_LOOKUPS_ARE_UNSUPPORTED;
    
    to the function itself.

  Summary:
    Revision    Changes     Path
    1.37        +6  -2      ossp-pkg/var/var.c
    1.14        +5  -1      ossp-pkg/var/var.h
    1.9         +21 -2      ossp-pkg/var/var.pod
    1.15        +4  -1      ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.36 -r1.37 var.c
  --- ossp-pkg/var/var.c	2001/11/20 15:46:35	1.36
  +++ ossp-pkg/var/var.c	2001/12/03 10:51:27	1.37
  @@ -45,6 +45,9 @@
       '$',                        /* varinit */
       '{',                        /* startdelim */
       '}',                        /* enddelim */
  +    '[',                        /* startindex */
  +    ']',                        /* endindex */
  +    '#',                        /* current_index */
       '\\',                       /* escape */
       "a-zA-Z0-9_"                /* namechars */
   };
  @@ -90,6 +93,7 @@
           "submatch referred to in replace string does not exist in search string", /* VAR_ERR_SUBMATCH_OUT_OF_RANGE = -34 */
           "invalid argument",                                                     /* VAR_ERR_INVALID_ARGUMENT = -35 */
           "incomplete quoted pair"                                                /* VAR_ERR_INCOMPLETE_QUOTED_PAIR = -36 */
  +        "lookup function does not support variable arrays"                      /* VAR_ERR_ARRAY_LOOKUPS_ARE_UNSUPPORTED = -37 */
       };
   
       rc = 0 - rc;
  @@ -561,7 +565,7 @@
   
       /* Use the lookup callback to get the variable's contents. */
   
  -    rc = (*lookup) (lookup_context, name.begin, name.end - name.begin,
  +    rc = (*lookup) (lookup_context, name.begin, name.end - name.begin, 0,
                       &data, &len, &buffer_size);
       if (rc < 0)
           goto error_return;
  @@ -663,7 +667,7 @@
       if (rc < 0)
           return rc;
       if (rc > 0) {
  -        rc2 = (*lookup) (lookup_context, p, rc, &data, &len, &buffer_size);
  +        rc2 = (*lookup) (lookup_context, p, rc, 0, &data, &len, &buffer_size);
           if (rc2 < 0)
               return rc2;
           if (rc2 == 0) {
  Index: ossp-pkg/var/var.h
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 var.h
  --- ossp-pkg/var/var.h	2001/11/19 16:09:44	1.13
  +++ ossp-pkg/var/var.h	2001/12/03 10:51:27	1.14
  @@ -36,6 +36,7 @@
   
   typedef enum {
       VAR_ERR_CALLBACK = -64,
  +    VAR_ERR_ARRAY_LOOKUPS_ARE_UNSUPPORTED  = -37,
       VAR_ERR_INCOMPLETE_QUOTED_PAIR = -36,
       VAR_ERR_INVALID_ARGUMENT = -35,
       VAR_ERR_SUBMATCH_OUT_OF_RANGE = -34,
  @@ -82,7 +83,7 @@
   /* Prototype for the lookup callback used in var_expand(). */
   
   typedef int (*var_cb_t) (void *context,
  -    const char *varname, size_t name_len,
  +    const char *varname, size_t name_len, int index,
       const char **data, size_t *data_len,
       size_t *buffer_size);
   
  @@ -92,6 +93,9 @@
       char varinit;        /* '$' */
       char startdelim;     /* '{' */
       char enddelim;       /* '}' */
  +    char startindex;     /* '[' */
  +    char endindex;       /* ']' */
  +    char current_index;  /* '#' */
       char escape;         /* '\' */
       char *namechars;     /* 'a-zA-Z0-9_' */
   } var_config_t;
  Index: ossp-pkg/var/var.pod
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 var.pod
  --- ossp-pkg/var/var.pod	2001/11/20 15:46:35	1.8
  +++ ossp-pkg/var/var.pod	2001/12/03 10:51:27	1.9
  @@ -201,6 +201,9 @@
           char varinit;
           char startdelim;
           char enddelim;
  +        char startindex;
  +        char endindex;
  +        char current_index;
           char escape;
           char *namechars;
       } var_config_t;
  @@ -218,6 +221,9 @@
           '$',              /* varinit */
           '{',              /* startdelim */
           '}',              /* enddelim */
  +        '[',              /* startindex */
  +        ']',              /* endindex */
  +        '#',              /* current_index */
           '\\',             /* escape */
           "a-zA-Z0-9_"      /* namechars */
       };
  @@ -304,7 +310,7 @@
   function, which adheres to the var_cb_t function interface:
   
       int lookup(void *context,
  -               const char *varname, size_t name_len,
  +               const char *varname, size_t name_len, int index,
                  const char **data, size_t *data_len,
                  size_t *buffer_size);
   
  @@ -336,6 +342,14 @@
   The "name_len" parameter contains the length of the variable name
   "varname" points to.
   
  +=item int index
  +
  +The contents of this interger determines which entry of a variable
  +array to look-up. If the variable specification that led to the
  +execution of the lookup function did not contain an index, zero is
  +provided per default. If "index" is negative, the callback must return
  +the number of entries of the variable array.
  +
   =item const char **data
   
   This is a pointer to the location where the callback function should
  @@ -409,12 +423,15 @@
   getenv(3) to lookup variables and to return them to var_expand():
   
       int env_lookup(void *context,
  -        const char *varname, size_t name_len,
  +        const char *varname, size_t name_len, int index,
           const char **data, size_t *data_len,
           size_t *buffer_size)
       {
           char tmp[256];
   
  +        if (index != 0)
  +            return VAR_ERR_ARRAY_LOOKUPS_ARE_UNSUPPORTED;
  +
           if (name_len > sizeof(tmp) - 1) {
           /* Callback can't expand variable names longer than
              sizeof(tmp) characters. */
  @@ -840,6 +857,8 @@
   
   var_unescape() encountered the backslash ('\') as the last character
   of the input buffer.
  +
  +=item VAR_ERR_ARRAY_LOOKUPS_ARE_UNSUPPORTED
   
   =back
   
  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 var_test.c
  --- ossp-pkg/var/var_test.c	2001/11/20 15:46:35	1.14
  +++ ossp-pkg/var/var_test.c	2001/12/03 10:51:27	1.15
  @@ -9,12 +9,15 @@
   };
   
   static int var_lookup(void *context,
  -    const char *varname, size_t name_len,
  +    const char *varname, size_t name_len, int index,
       const char **data, size_t *data_len,
       size_t *buffer_size)
   {
       const struct variable*  vars = context;
       size_t i;
  +
  +    if (index != 0)
  +        return VAR_ERR_ARRAY_LOOKUPS_ARE_UNSUPPORTED;
   
       for (i = 0; vars[i].name; ++i) {
           if (strncmp(varname, vars[i].name, name_len) == 0) {

From ossp-cvs-owner@ossp.org  Mon Dec  3 11:53:21 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fB3ArJO64749; Mon, 3 Dec 2001 11:53:19 +0100 (CET)
Date: Mon, 3 Dec 2001 11:53:19 +0100 (CET)
Message-Id: <200112031053.fB3ArJO64749@ossp.org>
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   03-Dec-2001 11:53:19
  Branch: HEAD                             Handle: 2001120310531900

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    Deleted items marked 'to be deleted.'

  Summary:
    Revision    Changes     Path
    1.45        +0  -19     ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.44 -r1.45 TODO
  --- ossp-pkg/l2/TODO	2001/11/30 17:12:54	1.44
  +++ ossp-pkg/l2/TODO	2001/12/03 10:53:19	1.45
  @@ -274,22 +274,3 @@
   - automatisch number -> string mapping (fuer error strings)
   - !debug -> !code
   
  -To be deleted ---------------------------------------------
  -- C:
  -  log lh;
  -  lh = log_init(LOG_CFGFILE|LOG_CFGPARENT|LOG_XXX|..., "foo" (=facility));
  -  log_configure(lh, "foo", LOG_WARN|LOG_LESSER, null);
  -  log_cb(lh, "x", func, ctx);
  -  int func(void *ctx, char *str, ...);
  -  log_msg(lh, LOG_WARN, "..%{foo}x %s...%E..", cp);
  -  log_dbg(lh, "..%{foo}x %s...%E..", cp);
  -  log_kill(lh);
  -
  -- Buffered I/O:
  -  fuer manche channels non-buffered (debug, errors)
  -  fuer manche andere aber buffered (access log, performance)
  -  loesung: I/O ueber callbacks (3x: open, write, close) z.B. RRDTool
  -
  -- Varargs:
  -  log ist nur wrapper fuer vlog
  -

From ossp-cvs-owner@ossp.org  Mon Dec  3 12:39:51 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fB3BdoX76377; Mon, 3 Dec 2001 12:39:50 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 3657F4CE637; Mon,  3 Dec 2001 12:39:50 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela shiela.pl
Message-Id: <20011203113950.3657F4CE637@visp.engelschall.com>
Date: Mon,  3 Dec 2001 12:39:50 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   03-Dec-2001 12:39:50
  Branch: HEAD                             Handle: 2001120311394900

  Modified files:
    ossp-pkg/shiela         shiela.pl

  Log:
    fix tag hook

  Summary:
    Revision    Changes     Path
    1.12        +5  -0      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/shiela.pl
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	2001/08/30 07:41:03	1.11
  +++ ossp-pkg/shiela/shiela.pl	2001/12/03 11:39:49	1.12
  @@ -980,7 +980,12 @@
   
       #   take the arguments
       my ($tagname, $tagop, $cvsdir, %cvsfiles) = @{$PA->{ARG}};
  +
  +    #   strip absolute prefix
       $cvsdir =~ s|^$RT->{cvsroot}/?||;
  +    my $cvsdirphysical = `cd $RT->{cvsroot} && pwd`;
  +    $cvsdirphysical =~ s|\n$||s; 
  +    $cvsdir =~ s|^$cvsdirphysical/?||;
   
       #   provide access control 
       my @paths = ();

From ossp-cvs-owner@ossp.org  Tue Dec  4 09:28:06 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fB48S5X84611; Tue, 4 Dec 2001 09:28:05 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 965384CE617; Tue,  4 Dec 2001 09:28:05 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Message-Id: <20011204082805.965384CE617@visp.engelschall.com>
Date: Tue,  4 Dec 2001 09:28:05 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-Dec-2001 09:28:05
  Branch: HEAD                             Handle: 2001120408280500

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    L2 really needs cronolog functionality in order to fulfill user requirements

  Summary:
    Revision    Changes     Path
    1.46        +3  -0      ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.45 -r1.46 TODO
  --- ossp-pkg/l2/TODO	2001/12/03 10:53:19	1.45
  +++ ossp-pkg/l2/TODO	2001/12/04 08:28:05	1.46
  @@ -2,6 +2,9 @@
   ============
   
   New Channels ----------------------------------------------
  +- l2_ch_rotfile for a cronolog-style file writing, i.e., it changes the
  +  file according to a strftime-based filename expansion.
  +
   - l2_ch_bofh does something cool but is undocumented and has its
       source mangled/scrambled ;)
   

From ossp-cvs-owner@ossp.org  Tue Dec  4 14:36:00 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fB4DZwq35126; Tue, 4 Dec 2001 14:35:58 +0100 (CET)
Date: Tue, 4 Dec 2001 14:35:58 +0100 (CET)
Message-Id: <200112041335.fB4DZwq35126@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   04-Dec-2001 14:35:58
  Branch: HEAD                             Handle: 2001120413355800

  Modified files:
    ossp-pkg/var            var_test.c

  Log:
    Added test cases for array lookups.

  Summary:
    Revision    Changes     Path
    1.16        +60 -56     ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 var_test.c
  --- ossp-pkg/var/var_test.c	2001/12/03 10:51:27	1.15
  +++ ossp-pkg/var/var_test.c	2001/12/04 13:35:58	1.16
  @@ -16,7 +16,7 @@
       const struct variable*  vars = context;
       size_t i;
   
  -    if (index != 0)
  +    if (0 && index != 0)
           return VAR_ERR_ARRAY_LOOKUPS_ARE_UNSUPPORTED;
   
       for (i = 0; vars[i].name; ++i) {
  @@ -48,57 +48,61 @@
           };
   
       const struct test_case tests[] = {
  -        {"$HOME", "/home/regression-tests"},
  -        {"${FOO}", "os"},
  -        {"${BAR}", "type"},
  -        {"${${FOO:u}${BAR:u}:l:u}", "REGRESSION-OS"},
  -        {"${UNDEFINED}", "${UNDEFINED}"},
  -        {"${OSTYPE:#}", "13"},
  -        {"${EMPTY:-test${FOO}test}", "testostest"},
  -        {"${EMPTY:-test${FOO:u}test}", "testOStest"},
  -        {"${TERM:-test${FOO}test}", "regression-term"},
  -        {"${EMPTY:+FOO}", ""},
  -        {"${HOME:+test${FOO}test}", "testostest"},
  -        {"${HOME:+${OS${BAR:u}}}", "regression-os"},
  -        {"${HOME:+OS${UNDEFINED:u}}", "OS${UNDEFINED:u}"},
  -        {"${UNDEFINED:+OS${BAR:u}}", "${UNDEFINED:+OS${BAR:u}}"},
  -        {"${HOME:*heinz}", ""},
  -        {"${EMPTY:*claus}", "claus"},
  -        {"${TERM}", "regression-term"},
  -        {"${HOME:s/reg/bla/}", "/home/blaression-tests"},
  -        {"${HOME:s/e/bla/}", "/hombla/regression-tests"},
  -        {"${HOME:s/e/bla/g}", "/hombla/rblagrblassion-tblasts"},
  -        {"${HOME:s/\\//_/g}", "_home_regression-tests"},
  -        {"${HOME:s/[eso]/_/g}", "/h_m_/r_gr___i_n-t__t_"},
  -        {"${HOME:s/[esO]/_/g}", "/hom_/r_gr___ion-t__t_"},
  -        {"${HOME:s/[esO]/_/gi}", "/h_m_/r_gr___i_n-t__t_"},
  -        {"${OSTYPE:s/^[re]/_/g}", "_egression-os"},
  -        {"${EMPTY:s/^[re]/_/g}", ""},
  -        {"${HOME:s/.*/heinz/}", "heinz"},
  -        {"${HOME:s/e/bla/t}", "/hombla/regression-tests"},
  -        {"${HOME:s/E/bla/t}", "/home/regression-tests"},
  -        {"${HOME:s/E/bla/ti}", "/hombla/regression-tests"},
  -        {"${HOME:s/E/bla/tig}", "/hombla/rblagrblassion-tblasts"},
  -        {"${HOME:o1-5}", "home/"},
  -        {"${HOME:o1,5}", "home/"},
  -        {"${HOME:o5,}", "/regression-tests"},
  -        {"${HOME:o5-}", "/regression-tests"},
  -        {"${HOME:o7,13}", "egressi"},
  -        {"${HOME:y/a-z/A-YZ/}", "/HOME/REGRESSION-TESTS"},
  -        {"${HOME:y/e-g/a-c/}", "/homa/racrassion-tasts"},
  -        {"${FOO:p/15/../l}", "os............."},
  -        {"${FOO:p/15/12345/l}", "os1234512345123"},
  -        {"${FOO:p/15/../r}", ".............os"},
  -        {"${FOO:p/15/12345/r}", "1234512345123os"},
  -        {"${FOO:p/15/../c}", "......os......."},
  -        {"${FOO:p/15/12345/c}", "123451os1234512"},
  -        {"${FOO:s/os/\\x{4F}\\123/g}", "OS"},
  -        {"${FOO:s/os/\\1\\x4F\\123/t}", "\\1OS"},
  -        {"${HOME:s/g(res)s/x\\1x/g}", "/home/rexresxion-tests"},
  -        {"${HOME:s/(s+)/_\\1_/g}", "/home/regre_ss_ion-te_s_t_s_"},
  -        {"${HOME:s/\\x65/\\x45/g}", "/homE/rEgrEssion-tEsts"},
  -        {"${HOME:s/(s*)/x\\1X/g}", "xXxXxXxXxXxXxXxXxXxXxXxssXxXxXxXxXxXxXxsXxXxsX"},
  -        {"${HOME:s/./\\\\/g}", "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"}
  +        { "$HOME",                        "/home/regression-tests"                         },
  +        { "${FOO}",                       "os"                                             },
  +        { "${BAR}",                       "type"                                           },
  +        { "${${FOO:u}${BAR:u}:l:u}",      "REGRESSION-OS"                                  },
  +        { "${UNDEFINED}",                 "${UNDEFINED}"                                   },
  +        { "${OSTYPE:#}",                  "13"                                             },
  +        { "${EMPTY:-test${FOO}test}",     "testostest"                                     },
  +        { "${EMPTY:-test${FOO:u}test}",   "testOStest"                                     },
  +        { "${TERM:-test${FOO}test}",      "regression-term"                                },
  +        { "${EMPTY:+FOO}",                ""                                               },
  +        { "${HOME:+test${FOO}test}",      "testostest"                                     },
  +        { "${HOME:+${OS${BAR:u}}}",       "regression-os"                                  },
  +        { "${HOME:+OS${UNDEFINED:u}}",    "OS${UNDEFINED:u}"                               },
  +        { "${UNDEFINED:+OS${BAR:u}}",     "${UNDEFINED:+OS${BAR:u}}"                       },
  +        { "${HOME:*heinz}",               ""                                               },
  +        { "${EMPTY:*claus}",              "claus"                                          },
  +        { "${TERM}",                      "regression-term"                                },
  +        { "${HOME:s/reg/bla/}",           "/home/blaression-tests"                         },
  +        { "${HOME:s/e/bla/}",             "/hombla/regression-tests"                       },
  +        { "${HOME:s/e/bla/g}",            "/hombla/rblagrblassion-tblasts"                 },
  +        { "${HOME:s/\\//_/g}",            "_home_regression-tests"                         },
  +        { "${HOME:s/[eso]/_/g}",          "/h_m_/r_gr___i_n-t__t_"                         },
  +        { "${HOME:s/[esO]/_/g}",          "/hom_/r_gr___ion-t__t_"                         },
  +        { "${HOME:s/[esO]/_/gi}",         "/h_m_/r_gr___i_n-t__t_"                         },
  +        { "${OSTYPE:s/^[re]/_/g}",        "_egression-os"                                  },
  +        { "${EMPTY:s/^[re]/_/g}",         ""                                               },
  +        { "${HOME:s/.*/heinz/}",          "heinz"                                          },
  +        { "${HOME:s/e/bla/t}",            "/hombla/regression-tests"                       },
  +        { "${HOME:s/E/bla/t}",            "/home/regression-tests"                         },
  +        { "${HOME:s/E/bla/ti}",           "/hombla/regression-tests"                       },
  +        { "${HOME:s/E/bla/tig}",          "/hombla/rblagrblassion-tblasts"                 },
  +        { "${HOME:o1-5}",                 "home/"                                          },
  +        { "${HOME:o1,5}",                 "home/"                                          },
  +        { "${HOME:o5,}",                  "/regression-tests"                              },
  +        { "${HOME:o5-}",                  "/regression-tests"                              },
  +        { "${HOME:o7,13}",                "egressi"                                        },
  +        { "${HOME:y/a-z/A-YZ/}",          "/HOME/REGRESSION-TESTS"                         },
  +        { "${HOME:y/e-g/a-c/}",           "/homa/racrassion-tasts"                         },
  +        { "${FOO:p/15/../l}",             "os............."                                },
  +        { "${FOO:p/15/12345/l}",          "os1234512345123"                                },
  +        { "${FOO:p/15/../r}",             ".............os"                                },
  +        { "${FOO:p/15/12345/r}",          "1234512345123os"                                },
  +        { "${FOO:p/15/../c}",             "......os......."                                },
  +        { "${FOO:p/15/12345/c}",          "123451os1234512"                                },
  +        { "${FOO:s/os/\\x{4F}\\123/g}",   "OS"                                             },
  +        { "${FOO:s/os/\\1\\x4F\\123/t}",  "\\1OS"                                          },
  +        { "${HOME:s/g(res)s/x\\1x/g}",    "/home/rexresxion-tests"                         },
  +        { "${HOME:s/(s+)/_\\1_/g}",       "/home/regre_ss_ion-te_s_t_s_"                   },
  +        { "${HOME:s/\\x65/\\x45/g}",      "/homE/rEgrEssion-tEsts"                         },
  +        { "${HOME:s/(s*)/x\\1X/g}",       "xXxXxXxXxXxXxXxXxXxXxXxssXxXxXxXxXxXxXxsXxXxsX" },
  +        { "${HOME:s/./\\\\/g}",           "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"   },
  +        { "${ARRAY[5+4*2-1]}",            "${ARRAY[5+4*2-1]}",                             },
  +        { "${ARRAY[5+(3+4)*2]}",          "${ARRAY[5+(3+4)*2]}"                            },
  +        { "${ARRAY[(5+(3+4)*2)]}",        "${ARRAY[(5+(3+4)*2)]}"                          },
  +        { "${ARRAY[+4--3]}",               "${ARRAY[+4--3]}"                               }
       };
       char *tmp;
       size_t tmp_len;
  @@ -113,8 +117,8 @@
   #endif
           rc = var_unescape(tests[i].input, strlen(tests[i].input), buffer, 0);
           if (rc != VAR_OK) {
  -            printf ("Test case #%d: First var_unescape() \
  -                failed with return code %d.\n", i, rc);
  +            printf ("Test case #%d: First var_unescape() failed with return code %d ('%s').\n",
  +                    i, rc, var_strerror(rc));
               return 1;
           }
   #ifdef DEBUG
  @@ -123,8 +127,8 @@
           rc = var_expand(buffer, strlen(buffer), &tmp, &tmp_len,
               &var_lookup, (void *)vars, NULL, 0);
           if (rc != VAR_OK) {
  -            printf ("Test case #%d: var_expand() \
  -                failed with return code %d.\n", i, rc);
  +            printf ("Test case #%d: var_expand() failed with return code %d ('%s').\n",
  +                    i, rc, var_strerror(rc));
               return 1;
           }
   #ifdef DEBUG

From ossp-cvs-owner@ossp.org  Tue Dec  4 14:36:38 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fB4Dabe35205; Tue, 4 Dec 2001 14:36:37 +0100 (CET)
Date: Tue, 4 Dec 2001 14:36:37 +0100 (CET)
Message-Id: <200112041336.fB4Dabe35205@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   04-Dec-2001 14:36:37
  Branch: HEAD                             Handle: 2001120413363700

  Modified files:
    ossp-pkg/var            var.c

  Log:
    Added support for indexed variables to expression().

  Summary:
    Revision    Changes     Path
    1.38        +225 -35    ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.37 -r1.38 var.c
  --- ossp-pkg/var/var.c	2001/12/03 10:51:27	1.37
  +++ ossp-pkg/var/var.c	2001/12/04 13:36:37	1.38
  @@ -72,12 +72,13 @@
           "undefined variable",                                                   /* VAR_ERR_UNDEFINED_VARIABLE = -12 */
           "input is neither text nor variable",                                   /* VAR_ERR_INPUT_ISNT_TEXT_NOR_VARIABLE = -13 */
           "unknown command in variable",                                          /* VAR_ERR_UNKNOWN_COMMAND_CHAR = -14 */
  +        "unknown error",                                                        /* -15 is not used */
           "malformated search and replace operation",                             /* VAR_ERR_MALFORMATTED_REPLACE = -16 */
           "unknown flag specified in search and replace operation",               /* VAR_ERR_UNKNOWN_REPLACE_FLAG = -17 */
           "invalid regular expression in search and replace operation",           /* VAR_ERR_INVALID_REGEX_IN_REPLACE = -18 */
           "missing parameter in command",                                         /* VAR_ERR_MISSING_PARAMETER_IN_COMMAND = -19 */
           "empty search string in search and replace operation",                  /* VAR_ERR_EMPTY_SEARCH_STRING = -20 */
  -        "start offset missing in cut operation"                                 /* VAR_ERR_MISSING_START_OFFSET = -21 */
  +        "start offset missing in cut operation",                                /* VAR_ERR_MISSING_START_OFFSET = -21 */
           "offsets in cut operation delimited by unknown character",              /* VAR_ERR_INVALID_OFFSET_DELIMITER = -22 */
           "range in cut operation is out of bounds",                              /* VAR_ERR_RANGE_OUT_OF_BOUNDS = -23 */
           "offset in cut operation is out of bounds",                             /* VAR_ERR_OFFSET_OUT_OF_BOUNDS = -24 */
  @@ -92,8 +93,11 @@
           "unknown quoted pair in search and replace operation",                  /* VAR_ERR_UNKNOWN_QUOTED_PAIR_IN_REPLACE = -33 */
           "submatch referred to in replace string does not exist in search string", /* VAR_ERR_SUBMATCH_OUT_OF_RANGE = -34 */
           "invalid argument",                                                     /* VAR_ERR_INVALID_ARGUMENT = -35 */
  -        "incomplete quoted pair"                                                /* VAR_ERR_INCOMPLETE_QUOTED_PAIR = -36 */
  -        "lookup function does not support variable arrays"                      /* VAR_ERR_ARRAY_LOOKUPS_ARE_UNSUPPORTED = -37 */
  +        "incomplete quoted pair",                                               /* VAR_ERR_INCOMPLETE_QUOTED_PAIR = -36 */
  +        "lookup function does not support variable arrays",                     /* VAR_ERR_ARRAY_LOOKUPS_ARE_UNSUPPORTED = -37 */
  +        "index specification of array variable contains an invalid character",  /* VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC = -38 */
  +        "index specification of array variable is incomplete",                  /* VAR_ERR_INCOMPLETE_INDEX_SPEC = -39 */
  +        "bracket expression in array variable's index is not closed"            /* VAR_ERR_UNCLOSED_BRACKET_IN_INDEX = -40 */
       };
   
       rc = 0 - rc;
  @@ -427,6 +431,8 @@
                       const char_class_t, var_cb_t, void *, int, tokenbuf_t *);
   static int command(const char *, const char *, const var_config_t *,
                      const char_class_t, var_cb_t, void *, int, tokenbuf_t *);
  +static int num_exp(const char *begin, const char *end, int current_index,
  +                   int* result, const var_config_t *config);
   
   static int text(const char *begin, const char *end, char varinit,
                   char escape)
  @@ -488,18 +494,153 @@
       return p - begin;
   }
   
  +static int num_exp_read_int(const char** begin, const char* end)
  +    {
  +    int num = 0;
  +    do
  +        {
  +        num *= 10;
  +        num += **begin - '0';
  +        ++(*begin);
  +        }
  +    while (isdigit(**begin) && *begin != end);
  +    return num;
  +    }
  +
  +static int num_exp_read_operand(const char *begin, const char *end, int current_index,
  +                                int* result, const var_config_t *config)
  +    {
  +    const char* p = begin;
  +    int rc;
  +
  +    if (begin == end)
  +        return VAR_ERR_INCOMPLETE_INDEX_SPEC;
  +
  +    printf("Parsing for operand: '%s'\n", p);
  +
  +    if (*p == '(')
  +        {
  +        rc = num_exp(++p, end, current_index, result, config);
  +        if (rc < 0)
  +            return rc;
  +        p += rc;
  +        if (p == end)
  +            return VAR_ERR_INCOMPLETE_INDEX_SPEC;
  +        if (*p != ')')
  +            return VAR_ERR_UNCLOSED_BRACKET_IN_INDEX;
  +        ++p;
  +        }
  +    else if (*p == config->current_index)
  +        {
  +        ++p;
  +        *result = current_index;
  +        }
  +    else if (isdigit(*p))
  +        {
  +        *result = num_exp_read_int(&p, end);
  +        }
  +    else if (*p == '+')
  +        {
  +        if (end - p > 1 && isdigit(p[1]))
  +            {
  +            ++p;
  +            *result = num_exp_read_int(&p, end);
  +            }
  +        else
  +            return VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC;
  +        }
  +    else if (*p == '-')
  +        {
  +        if (end - p > 1 && isdigit(p[1]))
  +            {
  +            ++p;
  +            *result = num_exp_read_int(&p, end);
  +            *result = 0 - *result;
  +            }
  +        else
  +            return VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC;
  +        }
  +    else
  +        return VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC;
   
  +    return p - begin;
  +    }
  +
  +static int num_exp(const char *begin, const char *end, int current_index,
  +                   int* result, const var_config_t *config)
  +    {
  +    const char* p = begin;
  +    char operator;
  +    int right;
  +    int rc;
  +
  +    if (begin == end)
  +        return VAR_ERR_INCOMPLETE_INDEX_SPEC;
  +
  +    rc = num_exp_read_operand(p, end, current_index, result, config);
  +    if (rc < 0)
  +        return rc;
  +    p += rc;
  +    printf("left operand is %d\n", *result);
  +
  +    while (p != end)
  +        {
  +        printf("Parsing for operator: '%s'\n", p);
  +        if (*p == '+' || *p == '-')
  +            {
  +            operator = *p++;
  +            printf("Operator is '%c'\n", operator);
  +            rc = num_exp(p, end, current_index, &right, config);
  +            if (rc < 0)
  +                return rc;
  +            p += rc;
  +            printf("Calculating %d %c %d --> ", *result, operator, right);
  +            if (operator == '+')
  +                *result = *result + right;
  +            else
  +                *result = *result - right;
  +            printf("%d\n", *result);
  +            }
  +        else if (*p == '*' || *p == '/' || *p == '%')
  +            {
  +            operator = *p++;
  +            printf("Operator is '%c'\n", operator);
  +
  +
  +            rc = num_exp_read_operand(p, end, current_index, &right, config);
  +            if (rc < 0)
  +                return rc;
  +            p += rc;
  +            printf("Calculating %d %c %d --> ", *result, operator, right);
  +            if (operator == '*')
  +                *result = *result * right;
  +            else if (operator == '/')
  +                *result = *result / right;
  +            else if (operator == '%')
  +                *result = *result % right;
  +            printf("%d\n", *result);
  +            }
  +        else
  +            break;
  +
  +        printf("Parsing for right: '%s'\n", p);
  +        }
  +
  +    return p - begin;
  +    }
  +
   static int expression(const char *begin, const char *end,
                         const var_config_t *config,
                         const char_class_t nameclass, var_cb_t lookup,
                         void *lookup_context, int force_expand,
                         tokenbuf_t *result)
  -{
  +    {
       const char *p = begin;
       const char *data;
       size_t len, buffer_size;
       int failed = 0;
       int rc;
  +    int index = 0;
       tokenbuf_t name;
       tokenbuf_t tmp;
   
  @@ -520,63 +661,107 @@
       /* Get the name of the variable to expand. The name may consist of
          an arbitrary number of VARNAMEs and VARIABLEs. */
   
  -    do {
  +    do
  +        {
           rc = varname(p, end, nameclass);
           if (rc < 0)
               goto error_return;
  -        if (rc > 0) {
  -            if (!tokenbuf_append(&name, p, rc)) {
  +        if (rc > 0)
  +            {
  +            if (!tokenbuf_append(&name, p, rc))
  +                {
                   rc = VAR_ERR_OUT_OF_MEMORY;
                   goto error_return;
  -            }
  +                }
               p += rc;
  -        }
  +            }
   
           rc = variable(p, end, config, nameclass, lookup, lookup_context,
                         force_expand, &tmp);
           if (rc < 0)
               goto error_return;
  -        if (rc > 0) {
  -            if (!tokenbuf_append(&name, tmp.begin, tmp.end - tmp.begin)) {
  +        if (rc > 0)
  +            {
  +            if (!tokenbuf_append(&name, tmp.begin, tmp.end - tmp.begin))
  +                {
                   rc = VAR_ERR_OUT_OF_MEMORY;
                   goto error_return;
  -            }
  +                }
               p += rc;
  +            }
           }
  -    }
       while (rc > 0);
   
       /* We must have the complete variable name now, so make sure we
          do. */
   
  -    if (name.begin == name.end) {
  +    if (name.begin == name.end)
  +        {
           rc = VAR_ERR_INCOMPLETE_VARIABLE_SPEC;
           goto error_return;
  -    }
  +        }
  +
  +    /* If the next token is START-INDEX, read the index specification. */
  +
  +    if (*p == config->startindex)
  +        {
  +        printf("Found START-INDEX: %s\n", p);
  +        ++p;
  +
  +        rc = num_exp(p, end, 0, &index, config);
  +        if (rc < 0)
  +            goto error_return;
  +        if (rc == 0)
  +            {
  +            rc = VAR_ERR_INCOMPLETE_INDEX_SPEC;
  +            goto error_return;
  +            }
  +        p += rc;
  +
  +        printf("Expecting END-INDEX: %s\n", p);
  +
  +        if (p == end)
  +            {
  +            rc = VAR_ERR_INCOMPLETE_INDEX_SPEC;
  +            goto error_return;
  +            }
  +        if (*p != config->endindex)
  +            {
  +            rc = VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC;
  +            goto error_return;
  +            }
  +        ++p;
  +
  +        printf("Found index %d.\n", index);
  +
  +        }
   
  -    /* Now we have the name of the variable stored in "name". We
  -       expect an ENDDELIM here. */
  +    /* Now we have the name of the variable stored in "name". The next
  +       token here must either be an END-DELIM or a ':'. */
   
  -    if (p == end || (*p != config->enddelim && *p != ':')) {
  +    if (p == end || (*p != config->enddelim && *p != ':'))
  +        {
           rc = VAR_ERR_INCOMPLETE_VARIABLE_SPEC;
           goto error_return;
  -    }
  +        }
       ++p;
   
       /* Use the lookup callback to get the variable's contents. */
   
  -    rc = (*lookup) (lookup_context, name.begin, name.end - name.begin, 0,
  +    rc = (*lookup) (lookup_context, name.begin, name.end - name.begin, index,
                       &data, &len, &buffer_size);
       if (rc < 0)
           goto error_return;
  -    if (rc == 0) {
  +    if (rc == 0)
  +        {
           /* The variable is undefined. What we'll do now depends on the
              force_expand flag. */
   
  -        if (force_expand) {
  +        if (force_expand)
  +            {
               rc = VAR_ERR_UNDEFINED_VARIABLE;
               goto error_return;
  -        }
  +            }
           /* Initialize result to point back to the original text in
              the buffer. */
   
  @@ -584,21 +769,25 @@
           result->end = p;
           result->buffer_size = 0;
           failed = 1;
  -    } else {
  +        }
  +    else
  +        {
           /* The preliminary result is the contents of the variable.
              This may be modified by the commands that may follow. */
   
           result->begin = data;
           result->end = data + len;
           result->buffer_size = buffer_size;
  -    }
  +        }
   
  -    if (p[-1] == ':') {
  +    if (p[-1] == ':')
  +        {
           /* Parse and execute commands. */
   
           tokenbuf_free(&tmp);
           --p;
  -        while (p != end && *p == ':') {
  +        while (p != end && *p == ':')
  +            {
               ++p;
               if (!failed)
                   rc = command(p, end, config, nameclass, lookup,
  @@ -611,16 +800,17 @@
               p += rc;
               if (failed)
                   result->end += rc;
  -        }
  +            }
   
  -        if (p == end || *p != config->enddelim) {
  +        if (p == end || *p != config->enddelim)
  +            {
               rc = VAR_ERR_INCOMPLETE_VARIABLE_SPEC;
               goto error_return;
  -        }
  +            }
           ++p;
           if (failed)
               ++result->end;
  -    }
  +        }
   
       /* Exit gracefully. */
   
  @@ -635,7 +825,7 @@
       tokenbuf_free(&tmp);
       tokenbuf_free(result);
       return rc;
  -}
  +    }
   
   static int variable(const char *begin, const char *end,
                       const var_config_t *config, const char_class_t nameclass,
  @@ -1312,9 +1502,9 @@
   
       case '#':                   /* Substitute length of the string. */
           if (data->begin) {
  -	    char buf[((sizeof(int)*8)/3)+10]; /* sufficient size: <#bits> x log_10(2) + safety */
  -	    sprintf(buf, "%d", (int)(data->end - data->begin));
  -	    tokenbuf_free(data);
  +            char buf[((sizeof(int)*8)/3)+10]; /* sufficient size: <#bits> x log_10(2) + safety */
  +            sprintf(buf, "%d", (int)(data->end - data->begin));
  +            tokenbuf_free(data);
               if (!tokenbuf_assign(data, buf, strlen(buf))) {
                   rc = VAR_ERR_OUT_OF_MEMORY;
                   goto error_return;

From ossp-cvs-owner@ossp.org  Tue Dec  4 14:37:29 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fB4DbRJ35572; Tue, 4 Dec 2001 14:37:27 +0100 (CET)
Date: Tue, 4 Dec 2001 14:37:27 +0100 (CET)
Message-Id: <200112041337.fB4DbRJ35572@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.h
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   04-Dec-2001 14:37:27
  Branch: HEAD                             Handle: 2001120413372700

  Modified files:
    ossp-pkg/var            var.h

  Log:
    Added the return codes VAR_ERR_UNCLOSED_BRACKET_IN_INDEX,
    VAR_ERR_INCOMPLETE_INDEX_SPEC, and VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC,
    which are used by the index parser.

  Summary:
    Revision    Changes     Path
    1.15        +3  -0      ossp-pkg/var/var.h
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.h
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 var.h
  --- ossp-pkg/var/var.h	2001/12/03 10:51:27	1.14
  +++ ossp-pkg/var/var.h	2001/12/04 13:37:27	1.15
  @@ -36,6 +36,9 @@
   
   typedef enum {
       VAR_ERR_CALLBACK = -64,
  +    VAR_ERR_UNCLOSED_BRACKET_IN_INDEX = -40,
  +    VAR_ERR_INCOMPLETE_INDEX_SPEC = -39,
  +    VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC = -38,
       VAR_ERR_ARRAY_LOOKUPS_ARE_UNSUPPORTED  = -37,
       VAR_ERR_INCOMPLETE_QUOTED_PAIR = -36,
       VAR_ERR_INVALID_ARGUMENT = -35,

From ossp-cvs-owner@ossp.org  Tue Dec  4 14:37:57 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fB4Dbuo35642; Tue, 4 Dec 2001 14:37:56 +0100 (CET)
Date: Tue, 4 Dec 2001 14:37:56 +0100 (CET)
Message-Id: <200112041337.fB4Dbuo35642@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.pod
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   04-Dec-2001 14:37:56
  Branch: HEAD                             Handle: 2001120413375500

  Modified files:
    ossp-pkg/var            var.pod

  Log:
    Updated the BNF grammar for the arithmetik parser.

  Summary:
    Revision    Changes     Path
    1.10        +14 -1      ossp-pkg/var/var.pod
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.pod
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 var.pod
  --- ossp-pkg/var/var.pod	2001/12/03 10:51:27	1.9
  +++ ossp-pkg/var/var.pod	2001/12/04 13:37:55	1.10
  @@ -618,7 +618,7 @@
   
    variable   : '$' (name|expression)
   
  - expression : START-DELIM (name|variable)+ (':' command)* END-DELIM
  + expression : START-DELIM (name|variable)+ (START-INDEX num-exp END-INDEX)? (':' command)* END-DELIM
   
    name       : (VARNAME)+
   
  @@ -633,9 +633,22 @@
               | 'l'
               | 'u'
   
  + num-exp    : operand
  +            | operand ('+'|'-'|'*'|'/'|'%') num-exp
  +
  + operand    : ('+'|'-')? NUMBER
  +            | CURR-INDEX
  +            | '(' num-exp ')'
  +
    START-DELIM: '{'
   
    END-DELIM  : '}'
  +
  + START-INDEX: '['
  +
  + END-INDEX  : ']'
  +
  + CURR-INDEX : '#'
   
    VARNAME    : '[a-zA-Z0-9_]+'
   

From ossp-cvs-owner@ossp.org  Tue Dec  4 15:25:08 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fB4EP6B42679; Tue, 4 Dec 2001 15:25:06 +0100 (CET)
Date: Tue, 4 Dec 2001 15:25:06 +0100 (CET)
Message-Id: <200112041425.fB4EP6B42679@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   04-Dec-2001 15:25:06
  Branch: HEAD                             Handle: 2001120414250600

  Modified files:
    ossp-pkg/var            var.c

  Log:
    We support the current_index and startindex tokens only when they're
    not zero.

  Summary:
    Revision    Changes     Path
    1.39        +2  -2      ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.38 -r1.39 var.c
  --- ossp-pkg/var/var.c	2001/12/04 13:36:37	1.38
  +++ ossp-pkg/var/var.c	2001/12/04 14:25:06	1.39
  @@ -530,7 +530,7 @@
               return VAR_ERR_UNCLOSED_BRACKET_IN_INDEX;
           ++p;
           }
  -    else if (*p == config->current_index)
  +    else if (config->current_index && *p == config->current_index)
           {
           ++p;
           *result = current_index;
  @@ -703,7 +703,7 @@
   
       /* If the next token is START-INDEX, read the index specification. */
   
  -    if (*p == config->startindex)
  +    if (config->startindex && *p == config->startindex)
           {
           printf("Found START-INDEX: %s\n", p);
           ++p;

From ossp-cvs-owner@ossp.org  Thu Dec  6 11:14:00 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fB6ADxX73239; Thu, 6 Dec 2001 11:13:59 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 1997F4CE739; Thu,  6 Dec 2001 11:13:59 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela shiela.pl
Message-Id: <20011206101359.1997F4CE739@visp.engelschall.com>
Date: Thu,  6 Dec 2001 11:13:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   06-Dec-2001 11:13:59
  Branch: HEAD                             Handle: 2001120610135800

  Modified files:
    ossp-pkg/shiela         shiela.pl

  Log:
    avoid nasty warning

  Summary:
    Revision    Changes     Path
    1.13        +5  -3      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/shiela.pl
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	2001/12/03 11:39:49	1.12
  +++ ossp-pkg/shiela/shiela.pl	2001/12/06 10:13:58	1.13
  @@ -1837,9 +1837,11 @@
                   print "cvs commit: Mailing commit message to <$logurl>\n";
                   my $sm = new Sendmail ($RT, $logurl);
                   $sm->header('Subject', $subject);
  -                if ($CF->{Logging}->{Report}->{$logtype}->{Details} eq 'diff:mime') {
  -                    $sm->header('Content-Type', 
  -                                "multipart/mixed; boundary=\"".$RT->{mimeboundary}."\"");
  +                if (defined($CF->{Logging}->{Report}->{$logtype}->{Details})) {
  +                    if ($CF->{Logging}->{Report}->{$logtype}->{Details} eq 'diff:mime') {
  +                        $sm->header('Content-Type', 
  +                                    "multipart/mixed; boundary=\"".$RT->{mimeboundary}."\"");
  +                    }
                   }
                   $sm->body($logmsg);
                   $sm->close;

From ossp-cvs-owner@ossp.org  Thu Dec  6 11:14:44 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fB6AEgX73810; Thu, 6 Dec 2001 11:14:42 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id C2C964CE692; Thu,  6 Dec 2001 11:14:42 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela ChangeLog
Message-Id: <20011206101442.C2C964CE692@visp.engelschall.com>
Date: Thu,  6 Dec 2001 11:14:42 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   06-Dec-2001 11:14:42
  Branch: HEAD                             Handle: 2001120610144200

  Modified files:
    ossp-pkg/shiela         ChangeLog

  Log:
    give credit

  Summary:
    Revision    Changes     Path
    1.8         +3  -0      ossp-pkg/shiela/ChangeLog
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/ChangeLog
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	2001/08/30 07:44:01	1.7
  +++ ossp-pkg/shiela/ChangeLog	2001/12/06 10:14:42	1.8
  @@ -11,6 +11,9 @@
   
     Changes between 0.9.1 and 0.9.2 (10-Feb-2001 to 04-May-2001):
   
  +   *) Fixed warning in dereferencing uninitialized variable.
  +      [Ralf S. Engelschall, Markus Sander]
  +
      *) Fixed information gathering for stock CVS version.
         [Ralf S. Engelschall]
     

From ossp-cvs-owner@ossp.org  Sat Dec  8 16:14:34 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fB8FEXY24969; Sat, 8 Dec 2001 16:14:33 +0100 (CET)
Date: Sat, 8 Dec 2001 16:14:33 +0100 (CET)
Message-Id: <200112081514.fB8FEXY24969@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Dec-2001 16:14:33
  Branch: HEAD                             Handle: 2001120815143300

  Modified files:
    ossp-pkg/var            var_test.c

  Log:
    Implemented array-lookups in the callback and customized test cases
    appropriately.

  Summary:
    Revision    Changes     Path
    1.17        +18 -12     ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 var_test.c
  --- ossp-pkg/var/var_test.c	2001/12/04 13:35:58	1.16
  +++ ossp-pkg/var/var_test.c	2001/12/08 15:14:33	1.17
  @@ -5,6 +5,7 @@
   
   struct variable {
       const char *name;
  +    const unsigned int index;
       const char *data;
   };
   
  @@ -16,11 +17,11 @@
       const struct variable*  vars = context;
       size_t i;
   
  -    if (0 && index != 0)
  +    if (index < 0)
           return VAR_ERR_ARRAY_LOOKUPS_ARE_UNSUPPORTED;
   
       for (i = 0; vars[i].name; ++i) {
  -        if (strncmp(varname, vars[i].name, name_len) == 0) {
  +        if (strncmp(varname, vars[i].name, name_len) == 0 && vars[i].index == index) {
               *data = vars[i].data;
               *data_len = strlen(*data);
               *buffer_size = 0;
  @@ -38,13 +39,17 @@
   int main(int argc, char **argv)
   {
       const struct variable vars[] = {
  -        { "HOME",   "/home/regression-tests" },
  -        { "OSTYPE", "regression-os" },
  -        { "TERM",   "regression-term" },
  -        { "FOO",    "os" },
  -        { "BAR",    "type" },
  -        { "EMPTY",  "" },
  -        { NULL,     NULL }
  +        { "HOME",   0, "/home/regression-tests" },
  +        { "OSTYPE", 0, "regression-os" },
  +        { "TERM",   0, "regression-term" },
  +        { "FOO",    0, "os" },
  +        { "BAR",    0, "type" },
  +        { "EMPTY",  0, "" },
  +        { "ARRAY",  0, "entry0" },
  +        { "ARRAY",  1, "entry1" },
  +        { "ARRAY",  2, "entry2" },
  +        { "ARRAY",  3, "entry3" },
  +        { NULL,     0, NULL }
           };
   
       const struct test_case tests[] = {
  @@ -99,10 +104,11 @@
           { "${HOME:s/\\x65/\\x45/g}",      "/homE/rEgrEssion-tEsts"                         },
           { "${HOME:s/(s*)/x\\1X/g}",       "xXxXxXxXxXxXxXxXxXxXxXxssXxXxXxXxXxXxXxsXxXxsX" },
           { "${HOME:s/./\\\\/g}",           "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"   },
  +        { "${ARRAY[1]}",                  "entry1",                                        },
           { "${ARRAY[5+4*2-1]}",            "${ARRAY[5+4*2-1]}",                             },
  -        { "${ARRAY[5+(3+4)*2]}",          "${ARRAY[5+(3+4)*2]}"                            },
  -        { "${ARRAY[(5+(3+4)*2)]}",        "${ARRAY[(5+(3+4)*2)]}"                          },
  -        { "${ARRAY[+4--3]}",               "${ARRAY[+4--3]}"                               }
  +        { "${ARRAY[(5+(3+4)*2)%16]}",     "entry3",                                        },
  +        { "${ARRAY[(5+(3+4)*2)/9]}",      "entry2",                                        },
  +        { "${ARRAY[+1--2]}",              "entry3"                                         }
       };
       char *tmp;
       size_t tmp_len;

From ossp-cvs-owner@ossp.org  Sat Dec  8 16:31:08 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fB8FV7D28542; Sat, 8 Dec 2001 16:31:07 +0100 (CET)
Date: Sat, 8 Dec 2001 16:31:07 +0100 (CET)
Message-Id: <200112081531.fB8FV7D28542@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Dec-2001 16:31:07
  Branch: HEAD                             Handle: 2001120815310600

  Modified files:
    ossp-pkg/var            var_test.c

  Log:
    Implemented the semantic for negative index yielding the length of the
    variable or the length of the array.

  Summary:
    Revision    Changes     Path
    1.18        +39 -12     ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 var_test.c
  --- ossp-pkg/var/var_test.c	2001/12/08 15:14:33	1.17
  +++ ossp-pkg/var/var_test.c	2001/12/08 15:31:06	1.18
  @@ -15,19 +15,44 @@
       size_t *buffer_size)
   {
       const struct variable*  vars = context;
  -    size_t i;
  +    size_t i, counter, length;
  +    static char buf[((sizeof(int)*8)/3)+10]; /* sufficient size: <#bits> x log_10(2) + safety */
   
  -    if (index < 0)
  -        return VAR_ERR_ARRAY_LOOKUPS_ARE_UNSUPPORTED;
  -
  -    for (i = 0; vars[i].name; ++i) {
  -        if (strncmp(varname, vars[i].name, name_len) == 0 && vars[i].index == index) {
  -            *data = vars[i].data;
  -            *data_len = strlen(*data);
  -            *buffer_size = 0;
  -            return 1;
  +    if (index >= 0)
  +        {
  +        for (i = 0; vars[i].name; ++i)
  +            {
  +            if (strncmp(varname, vars[i].name, name_len) == 0 && vars[i].index == index)
  +                {
  +                *data = vars[i].data;
  +                *data_len = strlen(*data);
  +                *buffer_size = 0;
  +                return 1;
  +                }
  +            }
  +        }
  +    else
  +        {
  +        for (i = 0; vars[i].name; ++i)
  +            {
  +            if (strncmp(varname, vars[i].name, name_len) == 0)
  +                {
  +                printf("Found variable at index %d.\n", i);
  +                counter = 1;
  +                length = strlen(vars[i].data);
  +                while (vars[i + counter].data && strncmp(varname, vars[i + counter].name, name_len) == 0)
  +                    ++counter;
  +                if (counter == 1)
  +                    sprintf(buf, "%d", length);
  +                else
  +                    sprintf(buf, "%d", counter);
  +                *data = buf;
  +                *data_len = strlen(buf);
  +                *buffer_size = 0;
  +                return 1;
  +                }
  +            }
           }
  -    }
       return 0;
   }
   
  @@ -108,7 +133,9 @@
           { "${ARRAY[5+4*2-1]}",            "${ARRAY[5+4*2-1]}",                             },
           { "${ARRAY[(5+(3+4)*2)%16]}",     "entry3",                                        },
           { "${ARRAY[(5+(3+4)*2)/9]}",      "entry2",                                        },
  -        { "${ARRAY[+1--2]}",              "entry3"                                         }
  +        { "${ARRAY[+1--2]}",              "entry3"                                         },
  +        { "${ARRAY[-1]}",                 "4"                                              },
  +        { "${HOME[-1]}",                  "22"                                             }
       };
       char *tmp;
       size_t tmp_len;

From ossp-cvs-owner@ossp.org  Sat Dec  8 17:02:17 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fB8G2GB36800; Sat, 8 Dec 2001 17:02:16 +0100 (CET)
Date: Sat, 8 Dec 2001 17:02:16 +0100 (CET)
Message-Id: <200112081602.fB8G2GB36800@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c var.pod var_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Dec-2001 17:02:16
  Branch: HEAD                             Handle: 2001120816021500

  Modified files:
    ossp-pkg/var            var.c var.pod var_test.c

  Log:
    Added support for variables as operands in index specifications.

  Summary:
    Revision    Changes     Path
    1.40        +29 -8      ossp-pkg/var/var.c
    1.11        +1  -0      ossp-pkg/var/var.pod
    1.19        +7  -1      ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.39 -r1.40 var.c
  --- ossp-pkg/var/var.c	2001/12/04 14:25:06	1.39
  +++ ossp-pkg/var/var.c	2001/12/08 16:02:15	1.40
  @@ -432,7 +432,9 @@
   static int command(const char *, const char *, const var_config_t *,
                      const char_class_t, var_cb_t, void *, int, tokenbuf_t *);
   static int num_exp(const char *begin, const char *end, int current_index,
  -                   int* result, const var_config_t *config);
  +                   int* result, const var_config_t *config,
  +                   const char_class_t nameclass,
  +                   var_cb_t lookup, void* lookup_context);
   
   static int text(const char *begin, const char *end, char varinit,
                   char escape)
  @@ -508,11 +510,16 @@
       }
   
   static int num_exp_read_operand(const char *begin, const char *end, int current_index,
  -                                int* result, const var_config_t *config)
  +                                int* result, const var_config_t *config,
  +                                const char_class_t nameclass,
  +                                var_cb_t lookup, void* lookup_context)
       {
       const char* p = begin;
  +    tokenbuf_t tmp;
       int rc;
   
  +    tokenbuf_init(&tmp);
  +
       if (begin == end)
           return VAR_ERR_INCOMPLETE_INDEX_SPEC;
   
  @@ -520,7 +527,7 @@
   
       if (*p == '(')
           {
  -        rc = num_exp(++p, end, current_index, result, config);
  +        rc = num_exp(++p, end, current_index, result, config, nameclass, lookup, lookup_context);
           if (rc < 0)
               return rc;
           p += rc;
  @@ -530,6 +537,18 @@
               return VAR_ERR_UNCLOSED_BRACKET_IN_INDEX;
           ++p;
           }
  +    else if (*p == config->varinit)
  +        {
  +        rc = variable(p, end, config, nameclass, lookup, lookup_context, 1, &tmp);
  +        if (rc < 0)
  +            return rc;
  +        p += rc;
  +
  +        rc = num_exp(tmp.begin, tmp.end, current_index, result, config, nameclass, lookup, lookup_context);
  +        tokenbuf_free(&tmp);
  +        if (rc < 0)
  +            return rc;
  +        }
       else if (config->current_index && *p == config->current_index)
           {
           ++p;
  @@ -567,7 +586,9 @@
       }
   
   static int num_exp(const char *begin, const char *end, int current_index,
  -                   int* result, const var_config_t *config)
  +                   int* result, const var_config_t *config,
  +                   const char_class_t nameclass,
  +                   var_cb_t lookup, void* lookup_context)
       {
       const char* p = begin;
       char operator;
  @@ -577,7 +598,7 @@
       if (begin == end)
           return VAR_ERR_INCOMPLETE_INDEX_SPEC;
   
  -    rc = num_exp_read_operand(p, end, current_index, result, config);
  +    rc = num_exp_read_operand(p, end, current_index, result, config, nameclass, lookup, lookup_context);
       if (rc < 0)
           return rc;
       p += rc;
  @@ -590,7 +611,7 @@
               {
               operator = *p++;
               printf("Operator is '%c'\n", operator);
  -            rc = num_exp(p, end, current_index, &right, config);
  +            rc = num_exp(p, end, current_index, &right, config, nameclass, lookup, lookup_context);
               if (rc < 0)
                   return rc;
               p += rc;
  @@ -607,7 +628,7 @@
               printf("Operator is '%c'\n", operator);
   
   
  -            rc = num_exp_read_operand(p, end, current_index, &right, config);
  +            rc = num_exp_read_operand(p, end, current_index, &right, config, nameclass, lookup, lookup_context);
               if (rc < 0)
                   return rc;
               p += rc;
  @@ -708,7 +729,7 @@
           printf("Found START-INDEX: %s\n", p);
           ++p;
   
  -        rc = num_exp(p, end, 0, &index, config);
  +        rc = num_exp(p, end, 0, &index, config, nameclass, lookup, lookup_context);
           if (rc < 0)
               goto error_return;
           if (rc == 0)
  Index: ossp-pkg/var/var.pod
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 var.pod
  --- ossp-pkg/var/var.pod	2001/12/04 13:37:55	1.10
  +++ ossp-pkg/var/var.pod	2001/12/08 16:02:15	1.11
  @@ -639,6 +639,7 @@
    operand    : ('+'|'-')? NUMBER
               | CURR-INDEX
               | '(' num-exp ')'
  +            | variable
   
    START-DELIM: '{'
   
  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 var_test.c
  --- ossp-pkg/var/var_test.c	2001/12/08 15:31:06	1.18
  +++ ossp-pkg/var/var_test.c	2001/12/08 16:02:15	1.19
  @@ -74,6 +74,8 @@
           { "ARRAY",  1, "entry1" },
           { "ARRAY",  2, "entry2" },
           { "ARRAY",  3, "entry3" },
  +        { "NUMBER", 0, "+2" },
  +        { "NUMEXP", 0, "((16)%5)" },
           { NULL,     0, NULL }
           };
   
  @@ -135,7 +137,11 @@
           { "${ARRAY[(5+(3+4)*2)/9]}",      "entry2",                                        },
           { "${ARRAY[+1--2]}",              "entry3"                                         },
           { "${ARRAY[-1]}",                 "4"                                              },
  -        { "${HOME[-1]}",                  "22"                                             }
  +        { "${HOME[-1]}",                  "22"                                             },
  +        { "${ARRAY[$NUMBER]}",            "entry2"                                         },
  +        { "${ARRAY[$NUMEXP]}",            "entry1"                                         },
  +        { "${ARRAY[$NUMEXP-1]}",          "entry0"                                         },
  +        { "${ARRAY[${ARRAY[-1]}-1]}",     "entry3"                                         }
       };
       char *tmp;
       size_t tmp_len;

From ossp-cvs-owner@ossp.org  Sat Dec  8 17:17:58 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fB8GHuj41269; Sat, 8 Dec 2001 17:17:56 +0100 (CET)
Date: Sat, 8 Dec 2001 17:17:56 +0100 (CET)
Message-Id: <200112081617.fB8GHuj41269@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c var_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Dec-2001 17:17:56
  Branch: HEAD                             Handle: 2001120816175600

  Modified files:
    ossp-pkg/var            var.c var_test.c

  Log:
    Implemented force_expand mode in num_exp().

  Summary:
    Revision    Changes     Path
    1.41        +59 -41     ossp-pkg/var/var.c
    1.20        +1  -1      ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.40 -r1.41 var.c
  --- ossp-pkg/var/var.c	2001/12/08 16:02:15	1.40
  +++ ossp-pkg/var/var.c	2001/12/08 16:17:56	1.41
  @@ -432,7 +432,7 @@
   static int command(const char *, const char *, const var_config_t *,
                      const char_class_t, var_cb_t, void *, int, tokenbuf_t *);
   static int num_exp(const char *begin, const char *end, int current_index,
  -                   int* result, const var_config_t *config,
  +                   int* result, int* failed, const var_config_t *config,
                      const char_class_t nameclass,
                      var_cb_t lookup, void* lookup_context);
   
  @@ -510,7 +510,7 @@
       }
   
   static int num_exp_read_operand(const char *begin, const char *end, int current_index,
  -                                int* result, const var_config_t *config,
  +                                int* result, int* failed, const var_config_t *config,
                                   const char_class_t nameclass,
                                   var_cb_t lookup, void* lookup_context)
       {
  @@ -527,7 +527,7 @@
   
       if (*p == '(')
           {
  -        rc = num_exp(++p, end, current_index, result, config, nameclass, lookup, lookup_context);
  +        rc = num_exp(++p, end, current_index, result, failed, config, nameclass, lookup, lookup_context);
           if (rc < 0)
               return rc;
           p += rc;
  @@ -540,14 +540,26 @@
       else if (*p == config->varinit)
           {
           rc = variable(p, end, config, nameclass, lookup, lookup_context, 1, &tmp);
  -        if (rc < 0)
  -            return rc;
  -        p += rc;
  -
  -        rc = num_exp(tmp.begin, tmp.end, current_index, result, config, nameclass, lookup, lookup_context);
  -        tokenbuf_free(&tmp);
  -        if (rc < 0)
  -            return rc;
  +        if (rc == VAR_ERR_UNDEFINED_VARIABLE)
  +            {
  +            *failed = 1;
  +            rc = variable(p, end, config, nameclass, lookup, lookup_context, 0, &tmp);
  +            if (rc < 0)
  +                return rc;
  +            p += rc;
  +            printf("Expanding variable() failed, eating %d characters and substituting 1.\n", rc);
  +            *result = 1;
  +            }
  +        else
  +            {
  +            if (rc < 0)
  +                return rc;
  +            p += rc;
  +            rc = num_exp(tmp.begin, tmp.end, current_index, result, failed, config, nameclass, lookup, lookup_context);
  +            tokenbuf_free(&tmp);
  +            if (rc < 0)
  +                return rc;
  +            }
           }
       else if (config->current_index && *p == config->current_index)
           {
  @@ -586,7 +598,7 @@
       }
   
   static int num_exp(const char *begin, const char *end, int current_index,
  -                   int* result, const var_config_t *config,
  +                   int* result, int* failed, const var_config_t *config,
                      const char_class_t nameclass,
                      var_cb_t lookup, void* lookup_context)
       {
  @@ -598,7 +610,7 @@
       if (begin == end)
           return VAR_ERR_INCOMPLETE_INDEX_SPEC;
   
  -    rc = num_exp_read_operand(p, end, current_index, result, config, nameclass, lookup, lookup_context);
  +    rc = num_exp_read_operand(p, end, current_index, result, failed, config, nameclass, lookup, lookup_context);
       if (rc < 0)
           return rc;
       p += rc;
  @@ -611,7 +623,7 @@
               {
               operator = *p++;
               printf("Operator is '%c'\n", operator);
  -            rc = num_exp(p, end, current_index, &right, config, nameclass, lookup, lookup_context);
  +            rc = num_exp(p, end, current_index, &right, failed, config, nameclass, lookup, lookup_context);
               if (rc < 0)
                   return rc;
               p += rc;
  @@ -628,7 +640,7 @@
               printf("Operator is '%c'\n", operator);
   
   
  -            rc = num_exp_read_operand(p, end, current_index, &right, config, nameclass, lookup, lookup_context);
  +            rc = num_exp_read_operand(p, end, current_index, &right, failed, config, nameclass, lookup, lookup_context);
               if (rc < 0)
                   return rc;
               p += rc;
  @@ -727,9 +739,7 @@
       if (config->startindex && *p == config->startindex)
           {
           printf("Found START-INDEX: %s\n", p);
  -        ++p;
  -
  -        rc = num_exp(p, end, 0, &index, config, nameclass, lookup, lookup_context);
  +        rc = num_exp(++p, end, 0, &index, &failed, config, nameclass, lookup, lookup_context);
           if (rc < 0)
               goto error_return;
           if (rc == 0)
  @@ -754,7 +764,6 @@
           ++p;
   
           printf("Found index %d.\n", index);
  -
           }
   
       /* Now we have the name of the variable stored in "name". The next
  @@ -769,36 +778,45 @@
   
       /* Use the lookup callback to get the variable's contents. */
   
  -    rc = (*lookup) (lookup_context, name.begin, name.end - name.begin, index,
  -                    &data, &len, &buffer_size);
  -    if (rc < 0)
  -        goto error_return;
  -    if (rc == 0)
  +    if (failed)
           {
  -        /* The variable is undefined. What we'll do now depends on the
  -           force_expand flag. */
  -
  -        if (force_expand)
  -            {
  -            rc = VAR_ERR_UNDEFINED_VARIABLE;
  -            goto error_return;
  -            }
  -        /* Initialize result to point back to the original text in
  -           the buffer. */
  -
           result->begin = begin - 1;
           result->end = p;
           result->buffer_size = 0;
  -        failed = 1;
           }
       else
           {
  -        /* The preliminary result is the contents of the variable.
  -           This may be modified by the commands that may follow. */
  +        rc = (*lookup) (lookup_context, name.begin, name.end - name.begin, index,
  +                        &data, &len, &buffer_size);
  +        if (rc < 0)
  +            goto error_return;
  +        if (rc == 0)
  +            {
  +            /* The variable is undefined. What we'll do now depends on the
  +               force_expand flag. */
  +
  +            if (force_expand)
  +                {
  +                rc = VAR_ERR_UNDEFINED_VARIABLE;
  +                goto error_return;
  +                }
  +            /* Initialize result to point back to the original text in
  +               the buffer. */
   
  -        result->begin = data;
  -        result->end = data + len;
  -        result->buffer_size = buffer_size;
  +            result->begin = begin - 1;
  +            result->end = p;
  +            result->buffer_size = 0;
  +            failed = 1;
  +            }
  +        else
  +            {
  +            /* The preliminary result is the contents of the variable.
  +               This may be modified by the commands that may follow. */
  +
  +            result->begin = data;
  +            result->end = data + len;
  +            result->buffer_size = buffer_size;
  +            }
           }
   
       if (p[-1] == ':')
  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 var_test.c
  --- ossp-pkg/var/var_test.c	2001/12/08 16:02:15	1.19
  +++ ossp-pkg/var/var_test.c	2001/12/08 16:17:56	1.20
  @@ -141,7 +141,7 @@
           { "${ARRAY[$NUMBER]}",            "entry2"                                         },
           { "${ARRAY[$NUMEXP]}",            "entry1"                                         },
           { "${ARRAY[$NUMEXP-1]}",          "entry0"                                         },
  -        { "${ARRAY[${ARRAY[-1]}-1]}",     "entry3"                                         }
  +        { "${ARRAY[${UNDEFINED}-1]}",     "${ARRAY[${UNDEFINED}-1]}"                       }
       };
       char *tmp;
       size_t tmp_len;

From ossp-cvs-owner@ossp.org  Sat Dec  8 17:27:59 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fB8GRw142599; Sat, 8 Dec 2001 17:27:58 +0100 (CET)
Date: Sat, 8 Dec 2001 17:27:58 +0100 (CET)
Message-Id: <200112081627.fB8GRw142599@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c var.h var_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Dec-2001 17:27:58
  Branch: HEAD                             Handle: 2001120816275700

  Modified files:
    ossp-pkg/var            var.c var.h var_test.c

  Log:
    Implemented division-by-zero error.

  Summary:
    Revision    Changes     Path
    1.42        +28 -5      ossp-pkg/var/var.c
    1.16        +1  -0      ossp-pkg/var/var.h
    1.21        +2  -1      ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.41 -r1.42 var.c
  --- ossp-pkg/var/var.c	2001/12/08 16:17:56	1.41
  +++ ossp-pkg/var/var.c	2001/12/08 16:27:57	1.42
  @@ -97,7 +97,8 @@
           "lookup function does not support variable arrays",                     /* VAR_ERR_ARRAY_LOOKUPS_ARE_UNSUPPORTED = -37 */
           "index specification of array variable contains an invalid character",  /* VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC = -38 */
           "index specification of array variable is incomplete",                  /* VAR_ERR_INCOMPLETE_INDEX_SPEC = -39 */
  -        "bracket expression in array variable's index is not closed"            /* VAR_ERR_UNCLOSED_BRACKET_IN_INDEX = -40 */
  +        "bracket expression in array variable's index is not closed",           /* VAR_ERR_UNCLOSED_BRACKET_IN_INDEX = -40 */
  +        "division by zero error in index specification"                         /* VAR_ERR_DIVISION_BY_ZERO_IN_INDEX = -41 */
       };
   
       rc = 0 - rc;
  @@ -547,8 +548,8 @@
               if (rc < 0)
                   return rc;
               p += rc;
  -            printf("Expanding variable() failed, eating %d characters and substituting 1.\n", rc);
  -            *result = 1;
  +            printf("Expanding variable() failed, eating %d characters and substituting 0.\n", rc);
  +            *result = 0;
               }
           else
               {
  @@ -646,11 +647,33 @@
               p += rc;
               printf("Calculating %d %c %d --> ", *result, operator, right);
               if (operator == '*')
  +                {
                   *result = *result * right;
  +                }
               else if (operator == '/')
  -                *result = *result / right;
  +                {
  +                if (right == 0)
  +                    {
  +                    if (*failed)
  +                        *result = 0;
  +                    else
  +                        return VAR_ERR_DIVISION_BY_ZERO_IN_INDEX;
  +                    }
  +                else
  +                    *result = *result / right;
  +                }
               else if (operator == '%')
  -                *result = *result % right;
  +                {
  +                if (right == 0)
  +                    {
  +                    if (*failed)
  +                        *result = 0;
  +                    else
  +                        return VAR_ERR_DIVISION_BY_ZERO_IN_INDEX;
  +                    }
  +                else
  +                    *result = *result % right;
  +                }
               printf("%d\n", *result);
               }
           else
  Index: ossp-pkg/var/var.h
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 var.h
  --- ossp-pkg/var/var.h	2001/12/04 13:37:27	1.15
  +++ ossp-pkg/var/var.h	2001/12/08 16:27:57	1.16
  @@ -36,6 +36,7 @@
   
   typedef enum {
       VAR_ERR_CALLBACK = -64,
  +    VAR_ERR_DIVISION_BY_ZERO_IN_INDEX = -41,
       VAR_ERR_UNCLOSED_BRACKET_IN_INDEX = -40,
       VAR_ERR_INCOMPLETE_INDEX_SPEC = -39,
       VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC = -38,
  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 var_test.c
  --- ossp-pkg/var/var_test.c	2001/12/08 16:17:56	1.20
  +++ ossp-pkg/var/var_test.c	2001/12/08 16:27:57	1.21
  @@ -141,7 +141,8 @@
           { "${ARRAY[$NUMBER]}",            "entry2"                                         },
           { "${ARRAY[$NUMEXP]}",            "entry1"                                         },
           { "${ARRAY[$NUMEXP-1]}",          "entry0"                                         },
  -        { "${ARRAY[${UNDEFINED}-1]}",     "${ARRAY[${UNDEFINED}-1]}"                       }
  +        { "${ARRAY[${UNDEFINED}-1]}",     "${ARRAY[${UNDEFINED}-1]}"                       },
  +        { "${ARRAY[5/(${UNDEFINED}-1)]}", "${ARRAY[5/(${UNDEFINED}-1)]}"                   }
       };
       char *tmp;
       size_t tmp_len;

From ossp-cvs-owner@ossp.org  Sat Dec  8 17:28:43 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fB8GSga42701; Sat, 8 Dec 2001 17:28:42 +0100 (CET)
Date: Sat, 8 Dec 2001 17:28:42 +0100 (CET)
Message-Id: <200112081628.fB8GSga42701@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   08-Dec-2001 17:28:42
  Branch: HEAD                             Handle: 2001120816284100

  Modified files:
    ossp-pkg/var            var_test.c

  Log:
    Fixed test case for division-by-zero error with force_expand mode.

  Summary:
    Revision    Changes     Path
    1.22        +1  -1      ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 var_test.c
  --- ossp-pkg/var/var_test.c	2001/12/08 16:27:57	1.21
  +++ ossp-pkg/var/var_test.c	2001/12/08 16:28:41	1.22
  @@ -142,7 +142,7 @@
           { "${ARRAY[$NUMEXP]}",            "entry1"                                         },
           { "${ARRAY[$NUMEXP-1]}",          "entry0"                                         },
           { "${ARRAY[${UNDEFINED}-1]}",     "${ARRAY[${UNDEFINED}-1]}"                       },
  -        { "${ARRAY[5/(${UNDEFINED}-1)]}", "${ARRAY[5/(${UNDEFINED}-1)]}"                   }
  +        { "${ARRAY[5/(${UNDEFINED})]}",   "${ARRAY[5/(${UNDEFINED})]}"                     }
       };
       char *tmp;
       size_t tmp_len;

From ossp-cvs-owner@ossp.org  Sat Dec  8 21:50:38 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fB8KobC09849; Sat, 8 Dec 2001 21:50:37 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 122424CE63B; Sat,  8 Dec 2001 21:50:37 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Message-Id: <20011208205037.122424CE63B@visp.engelschall.com>
Date: Sat,  8 Dec 2001 21:50:37 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   08-Dec-2001 21:50:37
  Branch: HEAD                             Handle: 2001120820503600

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    remember next steps

  Summary:
    Revision    Changes     Path
    1.47        +6  -0      ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.46 -r1.47 TODO
  --- ossp-pkg/l2/TODO	2001/12/04 08:28:05	1.46
  +++ ossp-pkg/l2/TODO	2001/12/08 20:50:36	1.47
  @@ -1,6 +1,12 @@
   OSSP L2 TODO
   ============
   
  +Next steps:
  +- spec parser location tracking (l2_spec*)
  +- signal and process handling (l2_env*)
  +- asynchronous channel (l2_ch_async.c)
  +- manual page (l2.pod)
  +
   New Channels ----------------------------------------------
   - l2_ch_rotfile for a cronolog-style file writing, i.e., it changes the
     file according to a strftime-based filename expansion.

From ossp-cvs-owner@ossp.org  Sat Dec  8 21:58:15 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fB8KwFC11256; Sat, 8 Dec 2001 21:58:15 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id ED6484CE63B; Sat,  8 Dec 2001 21:58:14 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.pod
Message-Id: <20011208205814.ED6484CE63B@visp.engelschall.com>
Date: Sat,  8 Dec 2001 21:58:14 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   08-Dec-2001 21:58:14
  Branch: HEAD                             Handle: 2001120820581400

  Modified files:
    ossp-pkg/l2             l2.pod

  Log:
    rember a few things from the past team meetings

  Summary:
    Revision    Changes     Path
    1.11        +13 -0      ossp-pkg/l2/l2.pod
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2.pod
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 l2.pod
  --- ossp-pkg/l2/l2.pod	2001/11/16 23:00:47	1.10
  +++ ossp-pkg/l2/l2.pod	2001/12/08 20:58:14	1.11
  @@ -73,6 +73,19 @@
   and takes less coding effort. The channel definition language is almost
   always sufficient for an application using L2.
   
  +=head1 LOGGING LEVELS
  +
  +PANIC    fatal error -> immediate abort (SIGBUS, SIGSEGV)
  +CRITICAL temporary failure -> sleep, retry possible (malloc == NULL)
  +ERROR    functionality error
  +WARNING  functionality successful
  +NOTICE   operation, statistics, start/stop
  +--- border line production/testing ---
  +INFO     step-by-step
  +TRACE    I/O tracing
  +--- border line end-user/developer
  +DEBUG    debugging messages
  +
   =head1 CHANNEL TREE SPECIFICATION
   
   An L2 channel tree can be descriped by a textual specification according

From ossp-cvs-owner@ossp.org  Tue Dec 11 12:45:20 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fBBBjJY95749; Tue, 11 Dec 2001 12:45:19 +0100 (CET)
Date: Tue, 11 Dec 2001 12:45:19 +0100 (CET)
Message-Id: <200112111145.fBBBjJY95749@ossp.org>
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   OSSP Project Master
  Root:   /e/ossp/cvs                      Email:  ossp@ossp.org
  Module: CVSROOT                          Date:   11-Dec-2001 12:45:19
  Branch: HEAD                             Handle: 2001121111451800

  Modified files:
    CVSROOT                 modules

  Log:
    add OSSP var to OSSP lmtp2nntp

  Summary:
    Revision    Changes     Path
    1.32        +1  -1      CVSROOT/modules
  ____________________________________________________________________________

  Index: CVSROOT/modules
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 modules
  --- CVSROOT/modules	2001/11/09 21:24:25	1.31
  +++ CVSROOT/modules	2001/12/11 11:45:18	1.32
  @@ -76,6 +76,6 @@
   srpc            ossp-pkg/srpc
   xds             ossp-pkg/xds
   sa              ossp-pkg/sa
  -lmtp2nntp       ossp-pkg/lmtp2nntp &str &l2 &sa
  +lmtp2nntp       ossp-pkg/lmtp2nntp &str &l2 &sa &var
   var             ossp-pkg/var
   

From ossp-cvs-owner@ossp.org  Tue Dec 11 12:53:14 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fBBBrCj96574; Tue, 11 Dec 2001 12:53:12 +0100 (CET)
Date: Tue, 11 Dec 2001 12:53:12 +0100 (CET)
Message-Id: <200112111153.fBBBrCj96574@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp README autogen.sh lmtp2nntp.c lmtp2nntp...
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   11-Dec-2001 12:53:12
  Branch: HEAD                             Handle: 2001121111531100

  Modified files:
    ossp-pkg/lmtp2nntp      README autogen.sh lmtp2nntp.c lmtp2nntp.h msg.h
                            version.c

  Log:
    switch to latest L2 version

  Summary:
    Revision    Changes     Path
    1.14        +1  -1      ossp-pkg/lmtp2nntp/README
    1.8         +4  -4      ossp-pkg/lmtp2nntp/autogen.sh
    1.99        +37 -74     ossp-pkg/lmtp2nntp/lmtp2nntp.c
    1.6         +5  -5      ossp-pkg/lmtp2nntp/lmtp2nntp.h
    1.7         +1  -1      ossp-pkg/lmtp2nntp/msg.h
    1.16        +9  -9      ossp-pkg/lmtp2nntp/version.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/README
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 README
  --- ossp-pkg/lmtp2nntp/README	2001/11/14 15:05:39	1.13
  +++ ossp-pkg/lmtp2nntp/README	2001/12/11 11:53:11	1.14
  @@ -7,7 +7,7 @@
                     |_|                        |_|    
   
     OSSP lmtp2nntp - Mail to News Gateway
  -  Version 1.1.1 (14-Nov-2001)
  +  Version 1.2a1 (06-Dec-2001)
   
     ABSTRACT
   
  Index: ossp-pkg/lmtp2nntp/autogen.sh
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 autogen.sh
  --- ossp-pkg/lmtp2nntp/autogen.sh	2001/11/07 16:21:40	1.7
  +++ ossp-pkg/lmtp2nntp/autogen.sh	2001/12/11 11:53:11	1.8
  @@ -67,10 +67,10 @@
   echo "===> str (autogen.sh)"
   (cd str && ./autogen.sh)
   echo "<=== str"
  -echo "===> l2 (autogen.sh)"
  -(cd l2  && ./autogen.sh)
  +echo "===> l2 (devtool"
  +(cd l2 && ./devtool autogen)
   echo "<=== l2"
  -echo "===> sa (autogen.sh)"
  -(cd sa  && ./devtool autogen)
  +echo "===> sa (devtool)"
  +(cd sa && ./devtool autogen)
   echo "<=== sa"
   
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.98 -r1.99 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/11/08 10:08:09	1.98
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	2001/12/11 11:53:11	1.99
  @@ -123,7 +123,7 @@
       sa_t           *sa;   /* socket abstraction */
       nntp_t         *nntp;
       nntp_rc_t       rc;
  -    l2_stream_t    *l2;
  +    l2_channel_t   *l2;
   };
   
   struct acl {
  @@ -162,7 +162,8 @@
       int             option_veryverbose;
       int             option_childsmax;
       int             active_childs;
  -    l2_stream_t    *l2;
  +    l2_env_t       *l2_env;
  +    l2_channel_t   *l2;
       sa_addr_t      *saaAltio;
       sa_t           *saAltio;
       char           *cpBindh;
  @@ -363,7 +364,7 @@
                   return;
               case SIGUSR1:
                   log1(ctx, NOTICE, "caught signal %d - flush logging stream", sig);
  -                l2_stream_flush(ctx->l2);
  +                l2_channel_flush(ctx->l2);
                   return;
               case SIGHUP:
               case SIGINT:
  @@ -373,7 +374,8 @@
               default:
                   log1(ctx, PANIC, "CAUGHT SIGNAL %d - EXIT - NO MORE LOGGING", sig);
           }
  -        l2_stream_destroy(ctx->l2);
  +        l2_channel_destroy(ctx->l2);
  +        l2_env_destroy(ctx->l2_env);
       }
       exit(ERR_EXECUTION);
   }
  @@ -396,9 +398,6 @@
       size_t        asACL;
       char         *cpHost;
       char         *cpPort;
  -    l2_channel_t *chPrefix;
  -    l2_channel_t *chBuf;
  -    l2_channel_t *chFile;
       pid_t         pid;
       FILE         *fd;
       char         *cpName;
  @@ -453,6 +452,7 @@
       ctx->option_veryverbose = FALSE;
       ctx->option_childsmax = 10;
       ctx->active_childs = 0;
  +    ctx->l2_env = NULL;
       ctx->l2 = NULL;
       ctx->saaAltio = NULL;
       ctx->saAltio = NULL;
  @@ -962,100 +962,62 @@
           }
       }
   
  -    if ((ctx->l2 = l2_stream_create()) == NULL) {
  -        fprintf(stderr, "%s:Error: logging failed to create stream\n", ctx->progname);
  +    /* create L2 environment */
  +    if (l2_env_create(&ctx->l2_env) != L2_OK) {
  +        fprintf(stderr, "%s:Error: failed to create L2 environment\n", ctx->progname);
           CU(ERR_EXECUTION);
       }
  -    if (l2_stream_levels(ctx->l2, L2_LEVEL_UPTO(L2_LEVEL_DEBUG), L2_LEVEL_NONE) != L2_OK) {
  -        fprintf(stderr, "%s:Error: logging failed to set global logging level\n", ctx->progname);
  -        CU(ERR_EXECUTION);
  -    }
   
  -    if (l2_stream_formatter(ctx->l2, 'P', formatter_prefix, &ctx->ctx) != L2_OK) {
  +    /* register custom L2 formatters */
  +    if (l2_env_formatter(ctx->l2_env, 'P', formatter_prefix, &ctx->ctx) != L2_OK) {
           fprintf(stderr, "%s:Error: logging failed to register prefix formatter\n", ctx->progname);
           CU(ERR_EXECUTION);
       }
  -    if (l2_stream_formatter(ctx->l2, 'D', l2_util_fmt_dump, NULL) != L2_OK) {
  +    if (l2_env_formatter(ctx->l2_env, 'D', l2_util_fmt_dump, NULL) != L2_OK) {
           fprintf(stderr, "%s:Error: logging failed to register dump formatter\n", ctx->progname);
           CU(ERR_EXECUTION);
       }
  -    if (l2_stream_formatter(ctx->l2, 'S', l2_util_fmt_string, NULL) != L2_OK) {
  +    if (l2_env_formatter(ctx->l2_env, 'S', l2_util_fmt_string, NULL) != L2_OK) {
           fprintf(stderr, "%s:Error: logging failed to register string formatter\n", ctx->progname);
           CU(ERR_EXECUTION);
       }
  -    if (l2_stream_formatter(ctx->l2, 'm', formatter_errno, NULL) != L2_OK) {
  +    if (l2_env_formatter(ctx->l2_env, 'm', formatter_errno, NULL) != L2_OK) {
           fprintf(stderr, "%s:Error: logging failed to register errno formatter\n", ctx->progname);
           CU(ERR_EXECUTION);
       }
  -
  -    if((ctx->option_levelmask != L2_LEVEL_NONE) && (ctx->option_logfile != NULL)) {
  -        if ((chPrefix  = l2_channel_create(&l2_handler_prefix)) == NULL) {
  -            fprintf(stderr, "%s:Error: logging failed to create prefix channel\n", ctx->progname);
  -            CU(ERR_EXECUTION);
  -        }
  -        if (l2_channel_configure(chPrefix, "prefix,timezone", "%b %d %H:%M:%S <%L> lmtp2nntp[%P]: ", "local") != L2_OK) {
  -            fprintf(stderr, "%s:Error: logging failed to configure prefix channel\n", ctx->progname);
  -            CU(ERR_EXECUTION);
  -        }
   
  -        if (!ctx->option_veryverbose) {
  -            if ((chBuf  = l2_channel_create(&l2_handler_buffer)) == NULL) {
  -                fprintf(stderr, "%s:Error: logging failed to create buffer channel\n", ctx->progname);
  -                CU(ERR_EXECUTION);
  -            }
  -            if (l2_channel_configure(chBuf, "size", 65536) != L2_OK) {
  -                fprintf(stderr, "%s:Error: logging failed to configure buffer channel\n", ctx->progname);
  -                CU(ERR_EXECUTION);
  -            }
  -        }
  +    /* create channel stream */
  +    if (ctx->option_levelmask != L2_LEVEL_NONE && ctx->option_logfile != NULL) {
  +        if (ctx->option_veryverbose)
  +            rc = l2_spec(&ctx->l2, ctx->l2_env, 
  +                         "prefix(prefix=\"%%b %%d %%H:%%M:%%S <%%L> lmtp2nntp[%%P]: \",timezone=local)"
  +                         "  -> buffer(size=65536)"
  +                         "  -> file(path=%s,append=1,perm=%d)",
  +                         ctx->option_logfile, 0644);
           else
  -            chBuf = NULL;
  -
  -        if ((chFile = l2_channel_create(&l2_handler_file)) == NULL) {
  -            fprintf(stderr, "%s:Error: logging failed to create file channel\n", ctx->progname);
  +            rc = l2_spec(&ctx->l2, ctx->l2_env, 
  +                         "prefix(prefix=\"%%b %%d %%H:%%M:%%S <%%L> lmtp2nntp[%%P]: \",timezone=local)"
  +                         "  -> file(path=%s,append=1,perm=%d)",
  +                         ctx->option_logfile, 0644);
  +        if (rc != L2_OK) {
  +            fprintf(stderr, "%s:Error: logging failed to create stream\n", ctx->progname);
               CU(ERR_EXECUTION);
           }
  -        if (l2_channel_configure(chFile, "path,append,perm", ctx->option_logfile, TRUE, 0644) != L2_OK) {
  -            fprintf(stderr, "%s:Error: logging failed to configure file channel\n", ctx->progname);
  +        if (l2_channel_levels(ctx->l2, ctx->option_levelmask, L2_LEVEL_NONE) != L2_OK) {
  +            fprintf(stderr, "%s:Error: logging failed to set global logging level\n", ctx->progname);
               CU(ERR_EXECUTION);
           }
  -
  -        if (!ctx->option_veryverbose) {
  -            if (l2_channel_stack(chFile, chBuf) != L2_OK) {
  -                fprintf(stderr, "%s:Error: logging failed to stack buffer channel on top of file channel\n", ctx->progname);
  -                CU(ERR_EXECUTION);
  -            }
  -            if (l2_channel_stack(chBuf, chPrefix) != L2_OK) {
  -                fprintf(stderr, "%s:Error: logging failed to stack prefix channel on top of buffer channel\n", ctx->progname);
  -                CU(ERR_EXECUTION);
  -            }
  -        }
  -        else {
  -            if (l2_channel_stack(chFile, chPrefix) != L2_OK) {
  -                fprintf(stderr, "%s:Error: logging failed to stack prefix channel on top of buffer channel\n", ctx->progname);
  -                CU(ERR_EXECUTION);
  -            }
  -        }
  -
  -        if (l2_channel_open(chPrefix) != L2_OK) {
  -            fprintf(stderr, "%s:Error: logging failed to open buffer channel\n", ctx->progname);
  +        if (l2_channel_open(ctx->l2) != L2_OK) {
  +            fprintf(stderr, "%s:Error: logging failed to open channel stream\n", ctx->progname);
               CU(ERR_EXECUTION);
           }
  -
  -        if (l2_stream_channel(ctx->l2, chPrefix, ctx->option_levelmask, L2_LEVEL_NONE) != L2_OK) {
  -            fprintf(stderr, "%s:Error: logging failed to attach channel into stream\n", ctx->progname);
  -            CU(ERR_EXECUTION);
  -        }
       }
   
  -    if (log1(ctx, NOTICE, "startup, version %s", lmtp2nntp_version.v_gnu) != L2_OK) {
  -        fprintf(stderr, "%s:Error: logging failed to log startup message to stream\n", ctx->progname);
  -        CU(ERR_EXECUTION);
  -    }
       /* from this point on logging is up and running and fprintf(stderr, ...)
        * should not be used in the remainder of the code
        */
   
  +    log1(ctx, NOTICE, "startup, version %s", lmtp2nntp_version.v_gnu);
       if (ctx->option_veryverbose)
           log0(ctx, NOTICE, "logging very verbose (unbuffered)");
   
  @@ -1219,7 +1181,7 @@
   
               /* logging buffer must be empty before fork otherwise content is
                * duplicated and written twice on next flush */
  -            l2_stream_flush(ctx->l2);
  +            l2_channel_flush(ctx->l2);
               pid = fork();
               if (pid == -1) {
                   log0(ctx, ERROR, "daemon cannot spawn child %m");
  @@ -1280,7 +1242,8 @@
       /* graceful shutdown */
       CUS:
       log0(ctx, NOTICE, "graceful shutdown shortly before exit - no more logging");
  -    l2_stream_destroy(ctx->l2);
  +    l2_channel_destroy(ctx->l2);
  +    l2_env_destroy(ctx->l2_env);
       if (ctx->saAltio)
           sa_destroy(ctx->saAltio);
       if (ctx->saaAltio)
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.h
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 lmtp2nntp.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.h	2001/09/11 13:41:22	1.5
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.h	2001/12/11 11:53:11	1.6
  @@ -35,15 +35,15 @@
   #endif
   
   #define log0(ctx,level,msg) \
  -    l2_stream_log((ctx)->l2, L2_LEVEL_##level, "%P" msg)
  +    l2_channel_log((ctx)->l2, L2_LEVEL_##level, "%P" msg)
   #define log1(ctx,level,msg,a1) \
  -    l2_stream_log((ctx)->l2, L2_LEVEL_##level, "%P" msg, a1)
  +    l2_channel_log((ctx)->l2, L2_LEVEL_##level, "%P" msg, a1)
   #define log2(ctx,level,msg,a1,a2) \
  -    l2_stream_log((ctx)->l2, L2_LEVEL_##level, "%P" msg, a1, a2)
  +    l2_channel_log((ctx)->l2, L2_LEVEL_##level, "%P" msg, a1, a2)
   #define log3(ctx,level,msg,a1,a2,a3) \
  -    l2_stream_log((ctx)->l2, L2_LEVEL_##level, "%P" msg, a1, a2, a3)
  +    l2_channel_log((ctx)->l2, L2_LEVEL_##level, "%P" msg, a1, a2, a3)
   #define log4(ctx,level,msg,a1,a2,a3,a4) \
  -    l2_stream_log((ctx)->l2, L2_LEVEL_##level, "%P" msg, a1, a2, a3, a4)
  +    l2_channel_log((ctx)->l2, L2_LEVEL_##level, "%P" msg, a1, a2, a3, a4)
   
   #define STMT(stuff) do { stuff } while (0)
   #define CU(returncode) STMT( rc = returncode; goto CUS; )
  Index: ossp-pkg/lmtp2nntp/msg.h
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 msg.h
  --- ossp-pkg/lmtp2nntp/msg.h	2001/09/11 13:41:22	1.6
  +++ ossp-pkg/lmtp2nntp/msg.h	2001/12/11 11:53:11	1.7
  @@ -45,7 +45,7 @@
       size_t  asRcpt;
       char   *azNewsgroups;
       size_t  asNewsgroups;
  -    l2_stream_t *l2;
  +    l2_channel_t *l2;
   } msg_t;
   
   #define WRAPAT 120          /* join wraps header lines when exceeding this value */
  Index: ossp-pkg/lmtp2nntp/version.c
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 version.c
  --- ossp-pkg/lmtp2nntp/version.c	2001/11/14 15:05:39	1.15
  +++ ossp-pkg/lmtp2nntp/version.c	2001/12/11 11:53:11	1.16
  @@ -8,7 +8,7 @@
   #ifndef _VERSION_C_
   #define _VERSION_C_
   
  -#define LMTP2NNTP_VERSION 0x101201
  +#define LMTP2NNTP_VERSION 0x102001
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _VERSION_C_AS_HEADER_
   
   lmtp2nntp_version_t lmtp2nntp_version = {
  -    0x101201,
  -    "1.1.1",
  -    "1.1.1 (14-Nov-2001)",
  -    "This is lmtp2nntp, Version 1.1.1 (14-Nov-2001)",
  -    "lmtp2nntp 1.1.1 (14-Nov-2001)",
  -    "lmtp2nntp/1.1.1",
  -    "@(#)lmtp2nntp 1.1.1 (14-Nov-2001)",
  -    "$Id: lmtp2nntp 1.1.1 (14-Nov-2001) $"
  +    0x102001,
  +    "1.2a1",
  +    "1.2a1 (06-Dec-2001)",
  +    "This is lmtp2nntp, Version 1.2a1 (06-Dec-2001)",
  +    "lmtp2nntp 1.2a1 (06-Dec-2001)",
  +    "lmtp2nntp/1.2a1",
  +    "@(#)lmtp2nntp 1.2a1 (06-Dec-2001)",
  +    "$Id: lmtp2nntp 1.2a1 (06-Dec-2001) $"
   };
   
   #endif /* _VERSION_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Tue Dec 11 13:02:28 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fBBC2RC01690; Tue, 11 Dec 2001 13:02:27 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id A18064CE61C; Tue, 11 Dec 2001 13:02:27 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp .configure Makefile.in autogen.sh confi...
Message-Id: <20011211120227.A18064CE61C@visp.engelschall.com>
Date: Tue, 11 Dec 2001 13:02:27 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   11-Dec-2001 13:02:27
  Branch: HEAD                             Handle: 2001121112022600

  Modified files:
    ossp-pkg/lmtp2nntp      .configure Makefile.in autogen.sh configure.ac

  Log:
    activate OSSP var

  Summary:
    Revision    Changes     Path
    1.11        +1  -0      ossp-pkg/lmtp2nntp/.configure
    1.30        +1  -1      ossp-pkg/lmtp2nntp/Makefile.in
    1.9         +4  -1      ossp-pkg/lmtp2nntp/autogen.sh
    1.16        +12 -1      ossp-pkg/lmtp2nntp/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/.configure
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 .configure
  --- ossp-pkg/lmtp2nntp/.configure	2001/09/12 14:35:50	1.10
  +++ ossp-pkg/lmtp2nntp/.configure	2001/12/11 12:02:26	1.11
  @@ -6,5 +6,6 @@
   #  --with-dmalloc=/cw \
   ./configure \
      --enable-debug \
  +   --enable-maintainer \
      --prefix=/tmp/lmtp2nntp
   
  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	2001/10/12 14:04:37	1.29
  +++ ossp-pkg/lmtp2nntp/Makefile.in	2001/12/11 12:02:26	1.30
  @@ -48,7 +48,7 @@
   SRCS = lmtp2nntp.c daemon.c lmtp.c nntp.c argz.c shpat_match.c msg.c version.c
   OBJS = lmtp2nntp.o daemon.o lmtp.o nntp.o argz.o shpat_match.o msg.o version.o
   
  -SUBDIRS = @SUBDIR_STR@ @SUBDIR_L2@ @SUBDIR_SA@
  +SUBDIRS = @SUBDIR_STR@ @SUBDIR_L2@ @SUBDIR_SA@ @SUBDIR_VAR@
   
   all: _SUBDIRS_all lmtp2nntp lmtp2nntp.8
   
  Index: ossp-pkg/lmtp2nntp/autogen.sh
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 autogen.sh
  --- ossp-pkg/lmtp2nntp/autogen.sh	2001/12/11 11:53:11	1.8
  +++ ossp-pkg/lmtp2nntp/autogen.sh	2001/12/11 12:02:26	1.9
  @@ -67,10 +67,13 @@
   echo "===> str (autogen.sh)"
   (cd str && ./autogen.sh)
   echo "<=== str"
  -echo "===> l2 (devtool"
  +echo "===> l2 (devtool)"
   (cd l2 && ./devtool autogen)
   echo "<=== l2"
   echo "===> sa (devtool)"
   (cd sa && ./devtool autogen)
   echo "<=== sa"
  +echo "===> var (devtool)"
  +(cd var && ./devtool autogen)
  +echo "<=== var"
   
  Index: ossp-pkg/lmtp2nntp/configure.ac
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 configure.ac
  --- ossp-pkg/lmtp2nntp/configure.ac	2001/10/12 13:51:59	1.15
  +++ ossp-pkg/lmtp2nntp/configure.ac	2001/12/11 12:02:26	1.16
  @@ -81,6 +81,17 @@
                    LIBS_EXTRA="$LIBS_EXTRA -lsa"])
   AC_SUBST(SUBDIR_SA)
   
  +dnl #   check for VAR library
  +AC_CHECK_EXTLIB([OSSP VAR], 
  +                var, var_expand, var.h, 
  +                [SUBDIR_VAR=""], 
  +                [SUBDIR_VAR="var"
  +                 CPPFLAGS="$CPPFLAGS -Ivar"
  +                 CFLAGS="$CFLAGS -Ivar"
  +                 LDFLAGS="$LDFLAGS -Lvar/.libs"
  +                 LIBS_EXTRA="$LIBS_EXTRA -lvar"])
  +AC_SUBST(SUBDIR_VAR)
  +
   dnl #   check for external Dmalloc library
   AC_CHECK_EXTLIB([Dmalloc], dmalloc, dmalloc_debug, dmalloc.h, AC_DEFINE(DMALLOC))
   
  @@ -91,7 +102,7 @@
   export enable_shared
   enable_headline=no
   export enable_headline
  -AC_CONFIG_SUBDIRS([$SUBDIR_STR $SUBDIR_L2 $SUBDIR_SA])
  +AC_CONFIG_SUBDIRS([$SUBDIR_STR $SUBDIR_L2 $SUBDIR_SA $SUBDIR_VAR])
   
   dnl #   standard output generation
   AC_CONFIG_HEADERS(config.h)

From ossp-cvs-owner@ossp.org  Wed Dec 12 15:34:20 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fBCEYJC19124; Wed, 12 Dec 2001 15:34:19 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 0FC4C4CE699; Wed, 12 Dec 2001 15:34:19 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.pod
Message-Id: <20011212143419.0FC4C4CE699@visp.engelschall.com>
Date: Wed, 12 Dec 2001 15:34:19 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   12-Dec-2001 15:34:19
  Branch: HEAD                             Handle: 2001121214341800

  Modified files:
    ossp-pkg/var            var.pod

  Log:
    fix comment

  Summary:
    Revision    Changes     Path
    1.12        +1  -1      ossp-pkg/var/var.pod
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.pod
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 var.pod
  --- ossp-pkg/var/var.pod	2001/12/08 16:02:15	1.11
  +++ ossp-pkg/var/var.pod	2001/12/12 14:34:18	1.12
  @@ -1,5 +1,5 @@
   ##
  -**  VAR - OSSP variable expression library.
  +##  VAR - OSSP variable expression library.
   ##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
   ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##

From ossp-cvs-owner@ossp.org  Wed Dec 12 17:51:22 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fBCGpLl57332; Wed, 12 Dec 2001 17:51:21 +0100 (CET)
Date: Wed, 12 Dec 2001 17:51:21 +0100 (CET)
Message-Id: <200112121651.fBCGpLl57332@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c var.h var.pod var_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   12-Dec-2001 17:51:21
  Branch: HEAD                             Handle: 2001121216512000

  Modified files:
    ossp-pkg/var            var.c var.h var.pod var_test.c

  Log:
    Implemented the looping construct. However, there are still some
    semantical issues that need to be clarified before the code is stable.

  Summary:
    Revision    Changes     Path
    1.43        +124 -44    ossp-pkg/var/var.c
    1.17        +1  -0      ossp-pkg/var/var.h
    1.13        +2  -2      ossp-pkg/var/var.pod
    1.23        +2  -1      ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.42 -r1.43 var.c
  --- ossp-pkg/var/var.c	2001/12/08 16:27:57	1.42
  +++ ossp-pkg/var/var.c	2001/12/12 16:51:20	1.43
  @@ -98,7 +98,8 @@
           "index specification of array variable contains an invalid character",  /* VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC = -38 */
           "index specification of array variable is incomplete",                  /* VAR_ERR_INCOMPLETE_INDEX_SPEC = -39 */
           "bracket expression in array variable's index is not closed",           /* VAR_ERR_UNCLOSED_BRACKET_IN_INDEX = -40 */
  -        "division by zero error in index specification"                         /* VAR_ERR_DIVISION_BY_ZERO_IN_INDEX = -41 */
  +        "division by zero error in index specification",                        /* VAR_ERR_DIVISION_BY_ZERO_IN_INDEX = -41 */
  +        "unterterminated loop construct"                                        /* VAR_ERR_UNTERMINATED_LOOP_CONSTRUCT = -42 */
       };
   
       rc = 0 - rc;
  @@ -429,28 +430,36 @@
   /* The recursive-descent parser for variable expressions. */
   
   static int variable(const char *, const char *, const var_config_t *,
  -                    const char_class_t, var_cb_t, void *, int, tokenbuf_t *);
  +                    const char_class_t, var_cb_t, void *, int, tokenbuf_t *, int);
   static int command(const char *, const char *, const var_config_t *,
  -                   const char_class_t, var_cb_t, void *, int, tokenbuf_t *);
  +                   const char_class_t, var_cb_t, void *, int, tokenbuf_t *, int);
   static int num_exp(const char *begin, const char *end, int current_index,
                      int* result, int* failed, const var_config_t *config,
                      const char_class_t nameclass,
                      var_cb_t lookup, void* lookup_context);
   
   static int text(const char *begin, const char *end, char varinit,
  -                char escape)
  -{
  +                char startindex, char endindex, char escape)
  +    {
       const char *p;
  -    for (p = begin; p != end && *p != varinit; ++p) {
  -        if (*p == escape) {
  -            if (p + 1 == end)
  +    for (p = begin; p != end; ++p)
  +        {
  +        if (*p == escape)
  +            {
  +            if (++p == end)
                   return VAR_ERR_INCOMPLETE_QUOTED_PAIR;
  -            else
  -                ++p;
  +            }
  +        else if (*p == varinit)
  +            {
  +            break;
  +            }
  +        else if (startindex && (*p == startindex || *p == endindex))
  +            {
  +            break;
  +            }
           }
  -    }
       return p - begin;
  -}
  +    }
   
   static int varname(const char *begin, const char *end,
                      const char_class_t nameclass)
  @@ -540,11 +549,11 @@
           }
       else if (*p == config->varinit)
           {
  -        rc = variable(p, end, config, nameclass, lookup, lookup_context, 1, &tmp);
  +        rc = variable(p, end, config, nameclass, lookup, lookup_context, 1, &tmp, current_index);
           if (rc == VAR_ERR_UNDEFINED_VARIABLE)
               {
               *failed = 1;
  -            rc = variable(p, end, config, nameclass, lookup, lookup_context, 0, &tmp);
  +            rc = variable(p, end, config, nameclass, lookup, lookup_context, 0, &tmp, current_index);
               if (rc < 0)
                   return rc;
               p += rc;
  @@ -689,14 +698,14 @@
                         const var_config_t *config,
                         const char_class_t nameclass, var_cb_t lookup,
                         void *lookup_context, int force_expand,
  -                      tokenbuf_t *result)
  +                      tokenbuf_t *result, int current_index)
       {
       const char *p = begin;
       const char *data;
       size_t len, buffer_size;
       int failed = 0;
       int rc;
  -    int index = 0;
  +    int index = current_index;
       tokenbuf_t name;
       tokenbuf_t tmp;
   
  @@ -733,7 +742,7 @@
               }
   
           rc = variable(p, end, config, nameclass, lookup, lookup_context,
  -                      force_expand, &tmp);
  +                      force_expand, &tmp, current_index);
           if (rc < 0)
               goto error_return;
           if (rc > 0)
  @@ -762,7 +771,7 @@
       if (config->startindex && *p == config->startindex)
           {
           printf("Found START-INDEX: %s\n", p);
  -        rc = num_exp(++p, end, 0, &index, &failed, config, nameclass, lookup, lookup_context);
  +        rc = num_exp(++p, end, current_index, &index, &failed, config, nameclass, lookup, lookup_context);
           if (rc < 0)
               goto error_return;
           if (rc == 0)
  @@ -853,10 +862,10 @@
               ++p;
               if (!failed)
                   rc = command(p, end, config, nameclass, lookup,
  -                             lookup_context, force_expand, result);
  +                             lookup_context, force_expand, result, current_index);
               else
                   rc = command(p, end, config, nameclass, lookup,
  -                             lookup_context, force_expand, &tmp);
  +                             lookup_context, force_expand, &tmp, current_index);
               if (rc < 0)
                   goto error_return;
               p += rc;
  @@ -892,7 +901,7 @@
   static int variable(const char *begin, const char *end,
                       const var_config_t *config, const char_class_t nameclass,
                       var_cb_t lookup, void *lookup_context,
  -                    int force_expand, tokenbuf_t *result)
  +                    int force_expand, tokenbuf_t *result, int current_index)
   {
       const char *p = begin;
       const char *data;
  @@ -939,7 +948,7 @@
       /* OK, we're dealing with a complex expression here. */
   
       rc = expression(p, end, config, nameclass, lookup, lookup_context,
  -                    force_expand, result);
  +                    force_expand, result, current_index);
       if (rc > 0)
           ++rc;
       return rc;
  @@ -949,7 +958,7 @@
                                  const var_config_t *config,
                                  const char_class_t nameclass, var_cb_t lookup,
                                  void *lookup_context, int force_expand,
  -                               tokenbuf_t *result)
  +                               tokenbuf_t *result, int current_index)
   {
       const char *p = begin;
       tokenbuf_t tmp;
  @@ -974,7 +983,7 @@
           }
   
           rc = variable(p, end, config, nameclass, lookup, lookup_context,
  -                      force_expand, &tmp);
  +                      force_expand, &tmp, current_index);
           if (rc < 0)
               goto error_return;
           if (rc > 0) {
  @@ -1001,7 +1010,7 @@
                                   const var_config_t *config,
                                   const char_class_t nameclass, var_cb_t lookup,
                                   void *lookup_context, int force_expand,
  -                                tokenbuf_t *result)
  +                                tokenbuf_t *result, int current_index)
   {
       const char *p = begin;
       tokenbuf_t tmp;
  @@ -1026,7 +1035,7 @@
           }
   
           rc = variable(p, end, config, nameclass, lookup, lookup_context,
  -                      force_expand, &tmp);
  +                      force_expand, &tmp, current_index);
           if (rc < 0)
               goto error_return;
           if (rc > 0) {
  @@ -1472,7 +1481,7 @@
   static int command(const char *begin, const char *end,
                      const var_config_t *config, const char_class_t nameclass,
                      var_cb_t lookup, void *lookup_context, int force_expand,
  -                   tokenbuf_t *data)
  +                   tokenbuf_t *data, int current_index)
   {
       const char *p = begin;
       tokenbuf_t tmptokbuf;
  @@ -1578,7 +1587,7 @@
       case '-':                   /* Substitute parameter if data is empty. */
           ++p;
           rc = exptext_or_variable(p, end, config, nameclass, lookup,
  -                                 lookup_context, force_expand, &tmptokbuf);
  +                                 lookup_context, force_expand, &tmptokbuf, current_index);
           if (rc < 0)
               goto error_return;
           if (rc == 0) {
  @@ -1595,7 +1604,7 @@
       case '*':                   /* Return "" if data is not empty, parameter otherwise. */
           ++p;
           rc = exptext_or_variable(p, end, config, nameclass, lookup,
  -                                 lookup_context, force_expand, &tmptokbuf);
  +                                 lookup_context, force_expand, &tmptokbuf, current_index);
           if (rc < 0)
               goto error_return;
           if (rc == 0) {
  @@ -1618,7 +1627,7 @@
       case '+':                   /* Substitute parameter if data is not empty. */
           ++p;
           rc = exptext_or_variable(p, end, config, nameclass, lookup,
  -                                 lookup_context, force_expand, &tmptokbuf);
  +                                 lookup_context, force_expand, &tmptokbuf, current_index);
           if (rc < 0)
               goto error_return;
           if (rc == 0) {
  @@ -1640,7 +1649,7 @@
           ++p;
   
           rc = substext_or_variable(p, end, config, nameclass, lookup,
  -                                  lookup_context, force_expand, &search);
  +                                  lookup_context, force_expand, &search, current_index);
           if (rc < 0)
               goto error_return;
           p += rc;
  @@ -1652,7 +1661,7 @@
           ++p;
   
           rc = substext_or_variable(p, end, config, nameclass, lookup,
  -                                  lookup_context, force_expand, &replace);
  +                                  lookup_context, force_expand, &replace, current_index);
           if (rc < 0)
               goto error_return;
           p += rc;
  @@ -1686,7 +1695,7 @@
           ++p;
   
           rc = substext_or_variable(p, end, config, nameclass, lookup,
  -                                  lookup_context, force_expand, &search);
  +                                  lookup_context, force_expand, &search, current_index);
           if (rc < 0)
               goto error_return;
           p += rc;
  @@ -1698,7 +1707,7 @@
           ++p;
   
           rc = substext_or_variable(p, end, config, nameclass, lookup,
  -                                  lookup_context, force_expand, &replace);
  +                                  lookup_context, force_expand, &replace, current_index);
           if (rc < 0)
               goto error_return;
           p += rc;
  @@ -1741,7 +1750,7 @@
           ++p;
   
           rc = substext_or_variable(p, end, config, nameclass, lookup,
  -                                  lookup_context, force_expand, &replace);
  +                                  lookup_context, force_expand, &replace, current_index);
           if (rc < 0)
               goto error_return;
           p += rc;
  @@ -1790,31 +1799,101 @@
       return rc;
   }
   
  +struct wrapper_context
  +    {
  +    var_cb_t lookup;
  +    void*    context;
  +    int*     found_variables;
  +    };
  +
  +static int lookup_wrapper(void *context,
  +                          const char *varname, size_t name_len, int index,
  +                          const char **data, size_t *data_len,
  +                          size_t *buffer_size)
  +    {
  +    static char buf[1];
  +    struct wrapper_context* wcon = context;
  +    int rc;
  +
  +    printf("Looking up '");
  +    fwrite(varname, name_len, 1, stdout);
  +    printf("[%d]' ... rc = ", index);
  +
  +    rc = (*wcon->lookup)(wcon->context, varname, name_len, index, data, data_len, buffer_size);
  +    printf("%d\n", rc);
  +    if (rc == 0)
  +        {
  +        *data = buf;
  +        *data_len = 0;
  +        *buffer_size = 0;
  +        return 1;
  +        }
  +    else
  +        {
  +        *(wcon->found_variables) += 1;
  +        return rc;
  +        }
  +    }
  +
   static var_rc_t input(const char *begin, const char *end,
                         const var_config_t *config,
                         const char_class_t nameclass, var_cb_t lookup,
                         void *lookup_context, int force_expand,
  -                      tokenbuf_t *output)
  +                      tokenbuf_t *output, int current_index, size_t recursion_level)
   {
       const char* p = begin;
       int rc;
       tokenbuf_t result;
  -
  +    int found_variables;
  +    int i;
  +    int output_backup;
  +    struct wrapper_context wcon;
       tokenbuf_init(&result);
   
       do {
  -        rc = text(begin, end, config->varinit, config->escape);
  +        printf("input(): Parsing string '%s'.\n", begin);
  +
  +        if (begin != end && *begin == config->startindex)
  +            {
  +            printf("Found loop construct.\n");
  +            wcon.lookup = lookup;
  +            wcon.context = lookup_context;
  +            wcon.found_variables = &found_variables;
  +            ++begin;
  +            for (i = 0; i == 0 || found_variables; ++i)
  +                {
  +                output_backup = output->end - output->begin;
  +                found_variables = 0;
  +                printf("Recursing with default index %d.\n", i);
  +                rc = input(begin, end, config, nameclass, &lookup_wrapper, &wcon, 1, output, i, recursion_level+1);
  +                printf("input() recursion returned %d.\n", rc);
  +                if (rc < 0)
  +                    goto error_return;
  +                if (begin[rc] != config->endindex)
  +                    {
  +                    rc = VAR_ERR_UNTERMINATED_LOOP_CONSTRUCT;
  +                    goto error_return;
  +                    }
  +                }
  +            output->end = output->begin + output_backup;
  +            begin += rc;
  +            ++begin;
  +            continue;
  +            }
  +
  +        rc = text(begin, end, config->varinit, config->startindex, config->endindex, config->escape);
           if (rc > 0) {
               if (!tokenbuf_append(output, begin, rc)) {
                   rc = VAR_ERR_OUT_OF_MEMORY;
                   goto error_return;
               }
               begin += rc;
  +            continue;
           } else if (rc < 0)
               goto error_return;
   
           rc = variable(begin, end, config, nameclass, lookup,
  -                      lookup_context, force_expand, &result);
  +                      lookup_context, force_expand, &result, current_index);
           if (rc > 0) {
               if (!tokenbuf_append
                   (output, result.begin, result.end - result.begin)) {
  @@ -1822,18 +1901,19 @@
                   goto error_return;
               }
               begin += rc;
  +            continue;
           }
           if (rc < 0)
               goto error_return;
       }
  -    while (rc > 0);
  +    while (begin != end && rc > 0);
   
  -    if (begin != end) {
  +    if (recursion_level == 0 && begin != end) {
           rc = VAR_ERR_INPUT_ISNT_TEXT_NOR_VARIABLE;
           goto error_return;
       }
   
  -    return VAR_OK;
  +    return begin - p;
   
     error_return:
       tokenbuf_free(output);
  @@ -1882,8 +1962,8 @@
       /* Call the parser. */
       tokenbuf_init(&output);
       rc = input(input_buf, input_buf + input_len, config, nameclass,
  -               lookup, lookup_context, force_expand, &output);
  +               lookup, lookup_context, force_expand, &output, 0, 0);
       *result = (char *)output.begin;
       *result_len = output.end - output.begin;
  -    return rc;
  +    return (rc >= 0) ? VAR_OK : rc;
   }
  Index: ossp-pkg/var/var.h
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 var.h
  --- ossp-pkg/var/var.h	2001/12/08 16:27:57	1.16
  +++ ossp-pkg/var/var.h	2001/12/12 16:51:20	1.17
  @@ -36,6 +36,7 @@
   
   typedef enum {
       VAR_ERR_CALLBACK = -64,
  +    VAR_ERR_UNTERMINATED_LOOP_CONSTRUCT = -42,
       VAR_ERR_DIVISION_BY_ZERO_IN_INDEX = -41,
       VAR_ERR_UNCLOSED_BRACKET_IN_INDEX = -40,
       VAR_ERR_INCOMPLETE_INDEX_SPEC = -39,
  Index: ossp-pkg/var/var.pod
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 var.pod
  --- ossp-pkg/var/var.pod	2001/12/12 14:34:18	1.12
  +++ ossp-pkg/var/var.pod	2001/12/12 16:51:20	1.13
  @@ -614,7 +614,7 @@
   
   =head1 EBNF GRAMMAR OF SUPPORTED EXPRESSIONS
   
  - input      : (TEXT|variable)*
  + input      : ( TEXT | variable | START-INDEX input END-INDEX )*
   
    variable   : '$' (name|expression)
   
  @@ -659,7 +659,7 @@
   
    EXPTEXT    : '[^$}:]+'
   
  - TEXT       : '[^$]+'
  + TEXT       : '[^$[\]]+'
   
   Please note that the descriptions of START-DELIM, END-DELIM, VARNAME,
   SUBSTEXT, and EXPTEXT shown here assume that var_expand() has been
  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 var_test.c
  --- ossp-pkg/var/var_test.c	2001/12/08 16:28:41	1.22
  +++ ossp-pkg/var/var_test.c	2001/12/12 16:51:20	1.23
  @@ -142,7 +142,8 @@
           { "${ARRAY[$NUMEXP]}",            "entry1"                                         },
           { "${ARRAY[$NUMEXP-1]}",          "entry0"                                         },
           { "${ARRAY[${UNDEFINED}-1]}",     "${ARRAY[${UNDEFINED}-1]}"                       },
  -        { "${ARRAY[5/(${UNDEFINED})]}",   "${ARRAY[5/(${UNDEFINED})]}"                     }
  +        { "${ARRAY[5/(${UNDEFINED})]}",   "${ARRAY[5/(${UNDEFINED})]}"                     },
  +        { ":[${ARRAY}-]:",                ":entry0-entry1-entry2-entry3-:"                 }
       };
       char *tmp;
       size_t tmp_len;

From ossp-cvs-owner@ossp.org  Wed Dec 12 17:52:58 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fBCGqut57494; Wed, 12 Dec 2001 17:52:56 +0100 (CET)
Date: Wed, 12 Dec 2001 17:52:56 +0100 (CET)
Message-Id: <200112121652.fBCGqut57494@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   12-Dec-2001 17:52:56
  Branch: HEAD                             Handle: 2001121216525600

  Modified files:
    ossp-pkg/var            var.c

  Log:
    Support the loop construct only if startindex has been set.

  Summary:
    Revision    Changes     Path
    1.44        +1  -1      ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.43 -r1.44 var.c
  --- ossp-pkg/var/var.c	2001/12/12 16:51:20	1.43
  +++ ossp-pkg/var/var.c	2001/12/12 16:52:56	1.44
  @@ -1853,7 +1853,7 @@
       do {
           printf("input(): Parsing string '%s'.\n", begin);
   
  -        if (begin != end && *begin == config->startindex)
  +        if (begin != end && config->startindex && *begin == config->startindex)
               {
               printf("Found loop construct.\n");
               wcon.lookup = lookup;

From ossp-cvs-owner@ossp.org  Wed Dec 12 18:18:57 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fBCHIuF66869; Wed, 12 Dec 2001 18:18:56 +0100 (CET)
Date: Wed, 12 Dec 2001 18:18:56 +0100 (CET)
Message-Id: <200112121718.fBCHIuF66869@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c var.pod var_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   12-Dec-2001 18:18:56
  Branch: HEAD                             Handle: 2001121217185500

  Modified files:
    ossp-pkg/var            var.c var.pod var_test.c

  Log:
    Guarantee that the buffer returned by var_expand() is terminated with
    a null byte.

  Summary:
    Revision    Changes     Path
    1.45        +14 -1      ossp-pkg/var/var.c
    1.14        +8  -6      ossp-pkg/var/var.pod
    1.24        +1  -1      ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.44 -r1.45 var.c
  --- ossp-pkg/var/var.c	2001/12/12 16:52:56	1.44
  +++ ossp-pkg/var/var.c	2001/12/12 17:18:55	1.45
  @@ -1965,5 +1965,18 @@
                  lookup, lookup_context, force_expand, &output, 0, 0);
       *result = (char *)output.begin;
       *result_len = output.end - output.begin;
  -    return (rc >= 0) ? VAR_OK : rc;
  +    if (rc >= 0)
  +        {
  +        if (!tokenbuf_append(&output, "\0", 1))
  +            {
  +            tokenbuf_free(&output);
  +            return VAR_ERR_OUT_OF_MEMORY;
  +            }
  +        --output.end;
  +        rc = VAR_OK;
  +        }
  +
  +    *result = (char *)output.begin;
  +    *result_len = output.end - output.begin;
  +    return rc;
   }
  Index: ossp-pkg/var/var.pod
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 var.pod
  --- ossp-pkg/var/var.pod	2001/12/12 16:51:20	1.13
  +++ ossp-pkg/var/var.pod	2001/12/12 17:18:55	1.14
  @@ -166,19 +166,21 @@
   A pointer to a character pointer in which the location of the expanded
   text buffer will be stored. The result buffer will be allocated by
   var_expand() using the system call malloc(3), thus it is the caller's
  -responsibility to free(3) that buffer once it is not used anymore.
  +responsibility to free(3) that buffer once it is not used anymore. The
  +result buffer will be terminated by null byte, which is not included
  +in the "result_len" counter.
   
   If var_expand() fails with an error, "result" will point to "input".
  -The only exception is the VAR_ERR_INVALID_ARGUMENT error, in which
  -case "result" is not modified.
  +The only exceptions are the VAR_ERR_INVALID_ARGUMENT
  +VAR_ERR_OUT_OF_MEMORY errors, in which case "result" is undefined.
   
   =item size_t *result_len
   
   A pointer to the location in which the length of the expanded text
   buffer will be stored. If var_expand() fails with an error -- with the
  -exception of VAR_ERR_INVALID_ARGUMENT --, "result_len" will contain
  -the number of characters that have been consumed from "input" before
  -the error occured.
  +exception of VAR_ERR_INVALID_ARGUMENT and VAR_ERR_OUT_OF_MEMORY --,
  +"result_len" will contain the number of characters that have been
  +consumed from "input" before the error occured.
   
   =item var_cb_t lookup
   
  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 var_test.c
  --- ossp-pkg/var/var_test.c	2001/12/12 16:51:20	1.23
  +++ ossp-pkg/var/var_test.c	2001/12/12 17:18:55	1.24
  @@ -143,7 +143,7 @@
           { "${ARRAY[$NUMEXP-1]}",          "entry0"                                         },
           { "${ARRAY[${UNDEFINED}-1]}",     "${ARRAY[${UNDEFINED}-1]}"                       },
           { "${ARRAY[5/(${UNDEFINED})]}",   "${ARRAY[5/(${UNDEFINED})]}"                     },
  -        { ":[${ARRAY}-]:",                ":entry0-entry1-entry2-entry3-:"                 }
  +        { "[${ARRAY}-]",                  "entry0-entry1-entry2-entry3-"                   }
       };
       char *tmp;
       size_t tmp_len;

From ossp-cvs-owner@ossp.org  Thu Dec 13 10:20:39 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fBD9Kbq16646; Thu, 13 Dec 2001 10:20:37 +0100 (CET)
Date: Thu, 13 Dec 2001 10:20:37 +0100 (CET)
Message-Id: <200112130920.fBD9Kbq16646@ossp.org>
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var TODO
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   13-Dec-2001 10:20:37
  Branch: HEAD                             Handle: 2001121309203700

  Modified files:
    ossp-pkg/var            TODO

  Log:
    clarifications

  Summary:
    Revision    Changes     Path
    1.7         +68 -0      ossp-pkg/var/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/var/TODO
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 TODO
  --- ossp-pkg/var/TODO	2001/11/20 15:33:07	1.6
  +++ ossp-pkg/var/TODO	2001/12/13 09:20:37	1.7
  @@ -62,3 +62,71 @@
      Callback Array-Elemente abgefragt.
   
    - Abgabe: 6.12.2001 zum Nikolaustag im CVS.
  +
  + **** CLARIFICATION ****
  +
  +    <            [ $HOME ${ARRAY} ] 
  +    is same as > [ $HOME ${ARRAY[0]} ] 
  +    must use   > [ $HOME ${ARRAY[#]} ]
  +
  +    Correction to termination condition: we loop unless all ARRAYs containing
  +    '#' somewhere in the index expression return undefined. Any array using an
  +    constant index and scalar variables are ignored when evaluating the
  +    termination condition. Additionally we need support for explicit indexing,
  +    ranges and stepping using the following "regex-style" quantifiers:
  +
  +                 [ ... body ... ]{begin,step,end}
  +                 [ ... body ... ]{begin,end}
  +
  +                 begin, step and end can be digits or arithmetic expressions
  +                 using variables (exactly like the index expressions) or empty
  +                 string with default for the empty string
  +                 - begin = 0
  +                 - step  = 1
  +                 - end   = maximum of all $#{anyvar} where  ${anyvar[...#...]}
  +                           occurs in body.
  +
  +                 {,,} is same as {0,end} and can be omitted.
  +
  +    <            ${ARRAY:s/foo/bar:#}
  +    is same as > ${ARRAY[0]:s/foo/bar/:#}
  +    
  +    This means that operation has nothing to do with arrays but works on
  +    scalars.
  +
  +    Correction to index variable from var_cb_t: this is a signed integer and
  +    allows negative, zero and positive indexes. It's up to the lookup callback
  +    to decide what is undefined. Some callbacks may support negative indices
  +    to support indexing from the end backwards through the array.
  +
  +    This means negative numbers can not be used as the magic identifier for
  +    "gimme the number of elements for this variable".
  +    
  +    The callback needs another input, enum { VAR_LOOKUP_VALUE,
  +    VAR_LOOKUP_ELEMENTS, ... } var_lookup_t which tells the callback what to
  +    look up. Initially, only these modes are supported but we have room for
  +    future expansion here.
  +
  +    The syntax change to adopt these changes is: $#{foo} returns the number of
  +    elements in foo while ${foo:#} returns the number of characters in the
  +    expanded value of foo. This keeps :# an command and makes ${foo} executing
  +    callback with VAR_LOOKUP_VALUE and $#{foo} executing callback with
  +    VAR_LOOKUP_ELEMENTS. Additionally it adopts Perl syntax. Extreme case:
  +    $#{foo:#} tells you how many digits the number of elements of foo has.
  +
  +    Examples now working correctly:
  +
  +    - Creation of a Newsgroups: header from To: headers w/o the last comma
  +
  +        Newsgroup: [${To[#]}${To[#+1]:+${Separator} }]
  +        Newsgroup: [${To[#-1]:+${Separator} }${To[#]}]
  +
  +    - Assume index zero is a header and the last element is a footer. Print a
  +      table with header, ruler, body, ruler and footer.
  +
  +        ${foo[0]}
  +        ${empty:p/-/${foo[0]:#}/}
  +        [$foo{#}\n]{1,$#{foo}-1}
  +        ${empty:p/-/${foo[$#{foo}]:#}/}
  +        ${foo[$#{foo}]}
  +

From ossp-cvs-owner@ossp.org  Thu Dec 13 15:34:20 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fBDEYIg98016; Thu, 13 Dec 2001 15:34:18 +0100 (CET)
Date: Thu, 13 Dec 2001 15:34:18 +0100 (CET)
Message-Id: <200112131434.fBDEYIg98016@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   13-Dec-2001 15:34:18
  Branch: HEAD                             Handle: 2001121314341700

  Modified files:
    ossp-pkg/var            var.c

  Log:
    Variables that have no index specified are always looked up with index
    zero now; the default index does no longer apply.

  Summary:
    Revision    Changes     Path
    1.46        +1  -1      ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.45 -r1.46 var.c
  --- ossp-pkg/var/var.c	2001/12/12 17:18:55	1.45
  +++ ossp-pkg/var/var.c	2001/12/13 14:34:17	1.46
  @@ -705,7 +705,7 @@
       size_t len, buffer_size;
       int failed = 0;
       int rc;
  -    int index = current_index;
  +    int index = 0;
       tokenbuf_t name;
       tokenbuf_t tmp;
   

From ossp-cvs-owner@ossp.org  Thu Dec 13 17:03:44 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fBDG3h724136; Thu, 13 Dec 2001 17:03:43 +0100 (CET)
Date: Thu, 13 Dec 2001 17:03:43 +0100 (CET)
Message-Id: <200112131603.fBDG3h724136@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c var_test.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   13-Dec-2001 17:03:43
  Branch: HEAD                             Handle: 2001121316034200

  Modified files:
    ossp-pkg/var            var.c var_test.c

  Log:
    Implemented correct termination and recursion for loop constructs.

  Summary:
    Revision    Changes     Path
    1.47        +69 -76     ossp-pkg/var/var.c
    1.25        +20 -1      ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.46 -r1.47 var.c
  --- ossp-pkg/var/var.c	2001/12/13 14:34:17	1.46
  +++ ossp-pkg/var/var.c	2001/12/13 16:03:42	1.47
  @@ -429,12 +429,18 @@
   
   /* The recursive-descent parser for variable expressions. */
   
  -static int variable(const char *, const char *, const var_config_t *,
  -                    const char_class_t, var_cb_t, void *, int, tokenbuf_t *, int);
  -static int command(const char *, const char *, const var_config_t *,
  -                   const char_class_t, var_cb_t, void *, int, tokenbuf_t *, int);
  +static int variable(const char *begin, const char *end,
  +                    const var_config_t *config, const char_class_t nameclass,
  +                    var_cb_t lookup, void *lookup_context,
  +                    int force_expand, tokenbuf_t *result, int current_index,
  +                    int* rel_lookup_flag);
  +static int command(const char *begin, const char *end,
  +                   const var_config_t *config, const char_class_t nameclass,
  +                   var_cb_t lookup, void *lookup_context, int force_expand,
  +                   tokenbuf_t *data, int current_index, int* rel_lookup_flag);
   static int num_exp(const char *begin, const char *end, int current_index,
  -                   int* result, int* failed, const var_config_t *config,
  +                   int* result, int* failed, int* rel_lookup_flag,
  +                   const var_config_t *config,
                      const char_class_t nameclass,
                      var_cb_t lookup, void* lookup_context);
   
  @@ -520,7 +526,8 @@
       }
   
   static int num_exp_read_operand(const char *begin, const char *end, int current_index,
  -                                int* result, int* failed, const var_config_t *config,
  +                                int* result, int* failed, int* rel_lookup_flag,
  +                                const var_config_t *config,
                                   const char_class_t nameclass,
                                   var_cb_t lookup, void* lookup_context)
       {
  @@ -533,11 +540,9 @@
       if (begin == end)
           return VAR_ERR_INCOMPLETE_INDEX_SPEC;
   
  -    printf("Parsing for operand: '%s'\n", p);
  -
       if (*p == '(')
           {
  -        rc = num_exp(++p, end, current_index, result, failed, config, nameclass, lookup, lookup_context);
  +        rc = num_exp(++p, end, current_index, result, failed, rel_lookup_flag, config, nameclass, lookup, lookup_context);
           if (rc < 0)
               return rc;
           p += rc;
  @@ -549,15 +554,14 @@
           }
       else if (*p == config->varinit)
           {
  -        rc = variable(p, end, config, nameclass, lookup, lookup_context, 1, &tmp, current_index);
  +        rc = variable(p, end, config, nameclass, lookup, lookup_context, 1, &tmp, current_index, rel_lookup_flag);
           if (rc == VAR_ERR_UNDEFINED_VARIABLE)
               {
               *failed = 1;
  -            rc = variable(p, end, config, nameclass, lookup, lookup_context, 0, &tmp, current_index);
  +            rc = variable(p, end, config, nameclass, lookup, lookup_context, 0, &tmp, current_index, rel_lookup_flag);
               if (rc < 0)
                   return rc;
               p += rc;
  -            printf("Expanding variable() failed, eating %d characters and substituting 0.\n", rc);
               *result = 0;
               }
           else
  @@ -565,7 +569,7 @@
               if (rc < 0)
                   return rc;
               p += rc;
  -            rc = num_exp(tmp.begin, tmp.end, current_index, result, failed, config, nameclass, lookup, lookup_context);
  +            rc = num_exp(tmp.begin, tmp.end, current_index, result, failed, rel_lookup_flag, config, nameclass, lookup, lookup_context);
               tokenbuf_free(&tmp);
               if (rc < 0)
                   return rc;
  @@ -575,6 +579,7 @@
           {
           ++p;
           *result = current_index;
  +        ++(*rel_lookup_flag);
           }
       else if (isdigit(*p))
           {
  @@ -608,7 +613,8 @@
       }
   
   static int num_exp(const char *begin, const char *end, int current_index,
  -                   int* result, int* failed, const var_config_t *config,
  +                   int* result, int* failed, int* rel_lookup_flag,
  +                   const var_config_t *config,
                      const char_class_t nameclass,
                      var_cb_t lookup, void* lookup_context)
       {
  @@ -620,41 +626,32 @@
       if (begin == end)
           return VAR_ERR_INCOMPLETE_INDEX_SPEC;
   
  -    rc = num_exp_read_operand(p, end, current_index, result, failed, config, nameclass, lookup, lookup_context);
  +    rc = num_exp_read_operand(p, end, current_index, result, failed, rel_lookup_flag, config, nameclass, lookup, lookup_context);
       if (rc < 0)
           return rc;
       p += rc;
  -    printf("left operand is %d\n", *result);
   
       while (p != end)
           {
  -        printf("Parsing for operator: '%s'\n", p);
           if (*p == '+' || *p == '-')
               {
               operator = *p++;
  -            printf("Operator is '%c'\n", operator);
  -            rc = num_exp(p, end, current_index, &right, failed, config, nameclass, lookup, lookup_context);
  +            rc = num_exp(p, end, current_index, &right, failed, rel_lookup_flag, config, nameclass, lookup, lookup_context);
               if (rc < 0)
                   return rc;
               p += rc;
  -            printf("Calculating %d %c %d --> ", *result, operator, right);
               if (operator == '+')
                   *result = *result + right;
               else
                   *result = *result - right;
  -            printf("%d\n", *result);
               }
           else if (*p == '*' || *p == '/' || *p == '%')
               {
               operator = *p++;
  -            printf("Operator is '%c'\n", operator);
  -
  -
  -            rc = num_exp_read_operand(p, end, current_index, &right, failed, config, nameclass, lookup, lookup_context);
  +            rc = num_exp_read_operand(p, end, current_index, &right, failed, rel_lookup_flag, config, nameclass, lookup, lookup_context);
               if (rc < 0)
                   return rc;
               p += rc;
  -            printf("Calculating %d %c %d --> ", *result, operator, right);
               if (operator == '*')
                   {
                   *result = *result * right;
  @@ -683,12 +680,9 @@
                   else
                       *result = *result % right;
                   }
  -            printf("%d\n", *result);
               }
           else
               break;
  -
  -        printf("Parsing for right: '%s'\n", p);
           }
   
       return p - begin;
  @@ -698,7 +692,7 @@
                         const var_config_t *config,
                         const char_class_t nameclass, var_cb_t lookup,
                         void *lookup_context, int force_expand,
  -                      tokenbuf_t *result, int current_index)
  +                      tokenbuf_t *result, int current_index, int* rel_lookup_flag)
       {
       const char *p = begin;
       const char *data;
  @@ -742,7 +736,7 @@
               }
   
           rc = variable(p, end, config, nameclass, lookup, lookup_context,
  -                      force_expand, &tmp, current_index);
  +                      force_expand, &tmp, current_index, rel_lookup_flag);
           if (rc < 0)
               goto error_return;
           if (rc > 0)
  @@ -770,8 +764,7 @@
   
       if (config->startindex && *p == config->startindex)
           {
  -        printf("Found START-INDEX: %s\n", p);
  -        rc = num_exp(++p, end, current_index, &index, &failed, config, nameclass, lookup, lookup_context);
  +        rc = num_exp(++p, end, current_index, &index, &failed, rel_lookup_flag, config, nameclass, lookup, lookup_context);
           if (rc < 0)
               goto error_return;
           if (rc == 0)
  @@ -781,8 +774,6 @@
               }
           p += rc;
   
  -        printf("Expecting END-INDEX: %s\n", p);
  -
           if (p == end)
               {
               rc = VAR_ERR_INCOMPLETE_INDEX_SPEC;
  @@ -794,8 +785,6 @@
               goto error_return;
               }
           ++p;
  -
  -        printf("Found index %d.\n", index);
           }
   
       /* Now we have the name of the variable stored in "name". The next
  @@ -862,10 +851,10 @@
               ++p;
               if (!failed)
                   rc = command(p, end, config, nameclass, lookup,
  -                             lookup_context, force_expand, result, current_index);
  +                             lookup_context, force_expand, result, current_index, rel_lookup_flag);
               else
                   rc = command(p, end, config, nameclass, lookup,
  -                             lookup_context, force_expand, &tmp, current_index);
  +                             lookup_context, force_expand, &tmp, current_index, rel_lookup_flag);
               if (rc < 0)
                   goto error_return;
               p += rc;
  @@ -901,7 +890,8 @@
   static int variable(const char *begin, const char *end,
                       const var_config_t *config, const char_class_t nameclass,
                       var_cb_t lookup, void *lookup_context,
  -                    int force_expand, tokenbuf_t *result, int current_index)
  +                    int force_expand, tokenbuf_t *result, int current_index,
  +                    int* rel_lookup_flag)
   {
       const char *p = begin;
       const char *data;
  @@ -948,7 +938,7 @@
       /* OK, we're dealing with a complex expression here. */
   
       rc = expression(p, end, config, nameclass, lookup, lookup_context,
  -                    force_expand, result, current_index);
  +                    force_expand, result, current_index, rel_lookup_flag);
       if (rc > 0)
           ++rc;
       return rc;
  @@ -958,7 +948,8 @@
                                  const var_config_t *config,
                                  const char_class_t nameclass, var_cb_t lookup,
                                  void *lookup_context, int force_expand,
  -                               tokenbuf_t *result, int current_index)
  +                               tokenbuf_t *result, int current_index,
  +                               int* rel_lookup_flag)
   {
       const char *p = begin;
       tokenbuf_t tmp;
  @@ -983,7 +974,7 @@
           }
   
           rc = variable(p, end, config, nameclass, lookup, lookup_context,
  -                      force_expand, &tmp, current_index);
  +                      force_expand, &tmp, current_index, rel_lookup_flag);
           if (rc < 0)
               goto error_return;
           if (rc > 0) {
  @@ -1010,7 +1001,8 @@
                                   const var_config_t *config,
                                   const char_class_t nameclass, var_cb_t lookup,
                                   void *lookup_context, int force_expand,
  -                                tokenbuf_t *result, int current_index)
  +                                tokenbuf_t *result, int current_index,
  +                                int* rel_lookup_flag)
   {
       const char *p = begin;
       tokenbuf_t tmp;
  @@ -1035,7 +1027,7 @@
           }
   
           rc = variable(p, end, config, nameclass, lookup, lookup_context,
  -                      force_expand, &tmp, current_index);
  +                      force_expand, &tmp, current_index, rel_lookup_flag);
           if (rc < 0)
               goto error_return;
           if (rc > 0) {
  @@ -1481,7 +1473,7 @@
   static int command(const char *begin, const char *end,
                      const var_config_t *config, const char_class_t nameclass,
                      var_cb_t lookup, void *lookup_context, int force_expand,
  -                   tokenbuf_t *data, int current_index)
  +                   tokenbuf_t *data, int current_index, int* rel_lookup_flag)
   {
       const char *p = begin;
       tokenbuf_t tmptokbuf;
  @@ -1587,7 +1579,8 @@
       case '-':                   /* Substitute parameter if data is empty. */
           ++p;
           rc = exptext_or_variable(p, end, config, nameclass, lookup,
  -                                 lookup_context, force_expand, &tmptokbuf, current_index);
  +                                 lookup_context, force_expand, &tmptokbuf,
  +                                 current_index, rel_lookup_flag);
           if (rc < 0)
               goto error_return;
           if (rc == 0) {
  @@ -1604,7 +1597,7 @@
       case '*':                   /* Return "" if data is not empty, parameter otherwise. */
           ++p;
           rc = exptext_or_variable(p, end, config, nameclass, lookup,
  -                                 lookup_context, force_expand, &tmptokbuf, current_index);
  +                                 lookup_context, force_expand, &tmptokbuf, current_index, rel_lookup_flag);
           if (rc < 0)
               goto error_return;
           if (rc == 0) {
  @@ -1627,7 +1620,7 @@
       case '+':                   /* Substitute parameter if data is not empty. */
           ++p;
           rc = exptext_or_variable(p, end, config, nameclass, lookup,
  -                                 lookup_context, force_expand, &tmptokbuf, current_index);
  +                                 lookup_context, force_expand, &tmptokbuf, current_index, rel_lookup_flag);
           if (rc < 0)
               goto error_return;
           if (rc == 0) {
  @@ -1649,7 +1642,7 @@
           ++p;
   
           rc = substext_or_variable(p, end, config, nameclass, lookup,
  -                                  lookup_context, force_expand, &search, current_index);
  +                                  lookup_context, force_expand, &search, current_index, rel_lookup_flag);
           if (rc < 0)
               goto error_return;
           p += rc;
  @@ -1661,7 +1654,7 @@
           ++p;
   
           rc = substext_or_variable(p, end, config, nameclass, lookup,
  -                                  lookup_context, force_expand, &replace, current_index);
  +                                  lookup_context, force_expand, &replace, current_index, rel_lookup_flag);
           if (rc < 0)
               goto error_return;
           p += rc;
  @@ -1695,7 +1688,7 @@
           ++p;
   
           rc = substext_or_variable(p, end, config, nameclass, lookup,
  -                                  lookup_context, force_expand, &search, current_index);
  +                                  lookup_context, force_expand, &search, current_index, rel_lookup_flag);
           if (rc < 0)
               goto error_return;
           p += rc;
  @@ -1707,7 +1700,7 @@
           ++p;
   
           rc = substext_or_variable(p, end, config, nameclass, lookup,
  -                                  lookup_context, force_expand, &replace, current_index);
  +                                  lookup_context, force_expand, &replace, current_index, rel_lookup_flag);
           if (rc < 0)
               goto error_return;
           p += rc;
  @@ -1750,7 +1743,7 @@
           ++p;
   
           rc = substext_or_variable(p, end, config, nameclass, lookup,
  -                                  lookup_context, force_expand, &replace, current_index);
  +                                  lookup_context, force_expand, &replace, current_index, rel_lookup_flag);
           if (rc < 0)
               goto error_return;
           p += rc;
  @@ -1803,7 +1796,7 @@
       {
       var_cb_t lookup;
       void*    context;
  -    int*     found_variables;
  +    int*     rel_lookup_flag;
       };
   
   static int lookup_wrapper(void *context,
  @@ -1815,58 +1808,58 @@
       struct wrapper_context* wcon = context;
       int rc;
   
  -    printf("Looking up '");
  -    fwrite(varname, name_len, 1, stdout);
  -    printf("[%d]' ... rc = ", index);
  -
       rc = (*wcon->lookup)(wcon->context, varname, name_len, index, data, data_len, buffer_size);
  -    printf("%d\n", rc);
       if (rc == 0)
           {
  +        --(*wcon->rel_lookup_flag);
           *data = buf;
           *data_len = 0;
           *buffer_size = 0;
           return 1;
           }
       else
  -        {
  -        *(wcon->found_variables) += 1;
           return rc;
  -        }
       }
   
   static var_rc_t input(const char *begin, const char *end,
                         const var_config_t *config,
                         const char_class_t nameclass, var_cb_t lookup,
                         void *lookup_context, int force_expand,
  -                      tokenbuf_t *output, int current_index, size_t recursion_level)
  +                      tokenbuf_t *output, int current_index,
  +                      size_t recursion_level, int* rel_lookup_flag)
   {
       const char* p = begin;
       int rc;
       tokenbuf_t result;
  -    int found_variables;
       int i;
       int output_backup;
       struct wrapper_context wcon;
       tokenbuf_init(&result);
  +    int my_rel_lookup_flag;
  +    int original_rel_lookup_state;
   
  -    do {
  -        printf("input(): Parsing string '%s'.\n", begin);
  +    if (rel_lookup_flag == NULL)
  +        {
  +        rel_lookup_flag  = &my_rel_lookup_flag;
  +        *rel_lookup_flag = 0;
  +        }
   
  +    do {
           if (begin != end && config->startindex && *begin == config->startindex)
               {
  -            printf("Found loop construct.\n");
  +            original_rel_lookup_state = *rel_lookup_flag;
               wcon.lookup = lookup;
               wcon.context = lookup_context;
  -            wcon.found_variables = &found_variables;
  +            wcon.rel_lookup_flag = rel_lookup_flag;
               ++begin;
  -            for (i = 0; i == 0 || found_variables; ++i)
  +            for (i = 0; i == 0 || *rel_lookup_flag > original_rel_lookup_state; ++i)
                   {
  +                *rel_lookup_flag = original_rel_lookup_state;
                   output_backup = output->end - output->begin;
  -                found_variables = 0;
  -                printf("Recursing with default index %d.\n", i);
  -                rc = input(begin, end, config, nameclass, &lookup_wrapper, &wcon, 1, output, i, recursion_level+1);
  -                printf("input() recursion returned %d.\n", rc);
  +                printf("%d: Recursing with default index %d.\n", recursion_level, i);
  +                rc = input(begin, end, config, nameclass, &lookup_wrapper, &wcon, 1, output, i, recursion_level+1, rel_lookup_flag);
  +                printf("%d: input() recursion returned %d.\n", recursion_level, rc);
  +                printf("%d: input(): Had %d relative lookups.\n", recursion_level, *rel_lookup_flag);
                   if (rc < 0)
                       goto error_return;
                   if (begin[rc] != config->endindex)
  @@ -1893,7 +1886,7 @@
               goto error_return;
   
           rc = variable(begin, end, config, nameclass, lookup,
  -                      lookup_context, force_expand, &result, current_index);
  +                      lookup_context, force_expand, &result, current_index, rel_lookup_flag);
           if (rc > 0) {
               if (!tokenbuf_append
                   (output, result.begin, result.end - result.begin)) {
  @@ -1962,7 +1955,7 @@
       /* Call the parser. */
       tokenbuf_init(&output);
       rc = input(input_buf, input_buf + input_len, config, nameclass,
  -               lookup, lookup_context, force_expand, &output, 0, 0);
  +               lookup, lookup_context, force_expand, &output, 0, 0, NULL);
       *result = (char *)output.begin;
       *result_len = output.end - output.begin;
       if (rc >= 0)
  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 var_test.c
  --- ossp-pkg/var/var_test.c	2001/12/12 17:18:55	1.24
  +++ ossp-pkg/var/var_test.c	2001/12/13 16:03:42	1.25
  @@ -74,6 +74,8 @@
           { "ARRAY",  1, "entry1" },
           { "ARRAY",  2, "entry2" },
           { "ARRAY",  3, "entry3" },
  +        { "HEINZ",  0, "heinz0" },
  +        { "HEINZ",  1, "heinz1" },
           { "NUMBER", 0, "+2" },
           { "NUMEXP", 0, "((16)%5)" },
           { NULL,     0, NULL }
  @@ -143,7 +145,24 @@
           { "${ARRAY[$NUMEXP-1]}",          "entry0"                                         },
           { "${ARRAY[${UNDEFINED}-1]}",     "${ARRAY[${UNDEFINED}-1]}"                       },
           { "${ARRAY[5/(${UNDEFINED})]}",   "${ARRAY[5/(${UNDEFINED})]}"                     },
  -        { "[${ARRAY}-]",                  "entry0-entry1-entry2-entry3-"                   }
  +        { "[${ARRAY[#]}-]",               "entry0-entry1-entry2-entry3-"                   },
  +        { "[${ARRAY[#+1]}-]",             "entry1-entry2-entry3-"                          },
  +        {
  +        "[${ARRAY}:${ARRAY[#]}-]",
  +        "entry0:entry0-entry0:entry1-entry0:entry2-entry0:entry3-"
  +        },
  +        {
  +        "[${HEINZ[#]}:${ARRAY[#]}-]",
  +        "heinz0:entry0-heinz1:entry1-:entry2-:entry3-"
  +        },
  +        {
  +        "[${HEINZ[#]}:[${ARRAY[#]}] ]",
  +        "heinz0:entry0entry1entry2entry3 heinz1:entry0entry1entry2entry3 "
  +        },
  +        {
  +        "[${HEINZ[#]}: [${ARRAY[#]}${ARRAY[#+1]:+, }]${HEINZ[#+1]:+; }]",
  +        "heinz0: entry0, entry1, entry2, entry3; heinz1: entry0, entry1, entry2, entry3"
  +        }
       };
       char *tmp;
       size_t tmp_len;

From ossp-cvs-owner@ossp.org  Thu Dec 13 17:26:00 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) for ossp-cvs@ossp.org
	id fBDGPwU28010; Thu, 13 Dec 2001 17:25:58 +0100 (CET)
Date: Thu, 13 Dec 2001 17:25:58 +0100 (CET)
Message-Id: <200112131625.fBDGPwU28010@ossp.org>
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   13-Dec-2001 17:25:58
  Branch: HEAD                             Handle: 2001121316255800

  Modified files:
    ossp-pkg/var            var.c

  Log:
    Fixed syntax error.

  Summary:
    Revision    Changes     Path
    1.48        +1  -1      ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.47 -r1.48 var.c
  --- ossp-pkg/var/var.c	2001/12/13 16:03:42	1.47
  +++ ossp-pkg/var/var.c	2001/12/13 16:25:58	1.48
  @@ -1834,9 +1834,9 @@
       int i;
       int output_backup;
       struct wrapper_context wcon;
  -    tokenbuf_init(&result);
       int my_rel_lookup_flag;
       int original_rel_lookup_state;
  +    tokenbuf_init(&result);
   
       if (rel_lookup_flag == NULL)
           {

From ossp-cvs-owner@ossp.org  Fri Dec 14 13:39:10 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fBECd9C42914; Fri, 14 Dec 2001 13:39:09 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 5E6514CE729; Fri, 14 Dec 2001 13:39:09 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.h.in l2_env.c
Message-Id: <20011214123909.5E6514CE729@visp.engelschall.com>
Date: Fri, 14 Dec 2001 13:39:09 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   14-Dec-2001 13:39:09
  Branch: HEAD                             Handle: 2001121412390800

  Modified files:
    ossp-pkg/l2             l2.h.in l2_env.c

  Log:
    provide l2_env_verrorinfo() and a new L2_ERR_SYN

  Summary:
    Revision    Changes     Path
    1.25        +2  -0      ossp-pkg/l2/l2.h.in
    1.5         +11 -2      ossp-pkg/l2/l2_env.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2.h.in
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 l2.h.in
  --- ossp-pkg/l2/l2.h.in	2001/11/30 09:44:47	1.24
  +++ ossp-pkg/l2/l2.h.in	2001/12/14 12:39:08	1.25
  @@ -114,6 +114,7 @@
       L2_ERR_IO,     /* input/output error */
       L2_ERR_FMT,    /* message formating error */
       L2_ERR_INT,    /* internal error */
  +    L2_ERR_SYN,    /* syntax error */
       L2_ERR_CH      /* no (more) channel found */
   } l2_result_t;
   
  @@ -207,6 +208,7 @@
   l2_result_t   l2_env_formatter      (l2_env_t *env, char id, l2_formatter_t cb, l2_context_t *ctx);
   l2_result_t   l2_env_handler        (l2_env_t *env, l2_handler_t *h);
   l2_result_t   l2_env_errorinfo      (l2_env_t *env, l2_result_t rv, const char *fmt, ...);
  +l2_result_t   l2_env_verrorinfo     (l2_env_t *env, l2_result_t rv, const char *fmt, va_list ap);
   char         *l2_env_strerror       (l2_env_t *env, l2_result_t rv);
   l2_result_t   l2_env_settimer       (l2_env_t *env, int iInterval);
   
  Index: ossp-pkg/l2/l2_env.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 l2_env.c
  --- ossp-pkg/l2/l2_env.c	2001/11/16 19:45:12	1.4
  +++ ossp-pkg/l2/l2_env.c	2001/12/14 12:39:08	1.5
  @@ -152,15 +152,23 @@
   {
       va_list ap;
   
  +    /* remember error information */
  +    va_start(ap, fmt);
  +    l2_env_verrorinfo(env, rv, fmt, ap);
  +    va_end(ap);
  +
  +    return L2_OK;
  +}
  +
  +l2_result_t l2_env_verrorinfo(l2_env_t *env, l2_result_t rv, const char *fmt, va_list ap)
  +{
       /* argument sanity check */
       if (env == NULL || rv == L2_OK || fmt == NULL)
           return L2_ERR_ARG;
   
       /* remember error information */
  -    va_start(ap, fmt);
       l2_util_vsprintf(env->szErrorInfo, sizeof(env->szErrorInfo), fmt, ap);
       env->rvErrorInfo = rv;
  -    va_end(ap);
   
       return L2_OK;
   }
  @@ -190,6 +198,7 @@
       else if (rv == L2_ERR_IO)  sz = "input/output error";
       else if (rv == L2_ERR_FMT) sz = "formatting error";
       else if (rv == L2_ERR_INT) sz = "internal error";
  +    else if (rv == L2_ERR_SYN) sz = "syntax error";
       else                       sz = "unknown error";
       n = l2_util_sprintf(cpBuf, nBuf, "%s", sz);
       cpBuf += n;

From ossp-cvs-owner@ossp.org  Fri Dec 14 13:42:10 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fBECg8C43406; Fri, 14 Dec 2001 13:42:08 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 6CF5A4CE729; Fri, 14 Dec 2001 13:42:08 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_spec.c l2_spec.h l2_spec_parse.y l2_spec_sc...
Message-Id: <20011214124208.6CF5A4CE729@visp.engelschall.com>
Date: Fri, 14 Dec 2001 13:42:08 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   14-Dec-2001 13:42:08
  Branch: HEAD                             Handle: 2001121412420700

  Modified files:
    ossp-pkg/l2             l2_spec.c l2_spec.h l2_spec_parse.y l2_spec_scan.l

  Log:
    Whoohooo! Add support for location tracking. This way the reported
    errors contain line, column, context and found/expected information.
    Now the specification parser is full featured...

  Summary:
    Revision    Changes     Path
    1.5         +58 -0      ossp-pkg/l2/l2_spec.c
    1.3         +17 -0      ossp-pkg/l2/l2_spec.h
    1.5         +13 -14     ossp-pkg/l2/l2_spec_parse.y
    1.6         +14 -6      ossp-pkg/l2/l2_spec_scan.l
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_spec.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 l2_spec.c
  --- ossp-pkg/l2/l2_spec.c	2001/11/30 09:44:47	1.4
  +++ ossp-pkg/l2/l2_spec.c	2001/12/14 12:42:07	1.5
  @@ -95,3 +95,61 @@
       return ctx.rv;
   }
   
  +/* remember a specification parsing error (used internally) */
  +void l2_spec_error(l2_spec_ctx_t *ctx, l2_result_t rv, YYLTYPE *loc, const char *fmt, ...)
  +{
  +    const char *cpF, *cpL;
  +    const char *cpP, *cpE;
  +    int line, column;
  +    char *cpBuf;
  +    char *cp;
  +    int n;
  +
  +    /* determine first and last positions of token */
  +    cpF = ctx->inputbuf+loc->first;
  +    cpL = ctx->inputbuf+loc->last;
  +
  +    /* determine epilog and prolog of token */
  +    cpP = cpF-4;
  +    if (cpP < ctx->inputbuf)
  +        cpP = ctx->inputbuf;
  +    cpE = cpL+4;
  +    if (cpE > ctx->inputbuf+ctx->inputlen)
  +        cpE = ctx->inputbuf+ctx->inputlen;
  +
  +    /* calculate line and column of token */
  +    line   = 1;
  +    column = 1;
  +    for (cp = ctx->inputbuf; cp < (ctx->inputbuf+ctx->inputlen) && cp != cpF; cp++) {
  +        column++;
  +        if (*cp == '\n') {
  +            column = 1;
  +            line++;
  +        }
  +    }
  +
  +    /* extract token context with mark token borders */
  +    if ((cpBuf = malloc((cpE-cpP)+2+1)) == NULL)
  +        return;
  +    cp = cpBuf;
  +    n = cpF-cpP;
  +    memcpy(cp, cpP, n); cp += n;
  +    *cp++ = '<';
  +    n = cpL-cpF;
  +    memcpy(cp, cpF, n); cp += n;
  +    *cp++ = '>';
  +    n = cpE-cpL;
  +    memcpy(cp, cpL, n); cp += n;
  +    *cp++ = '\0';
  +
  +    /* remember error */
  +    l2_env_errorinfo(ctx->env, rv, "line %d, column %d: `%s'; %s",
  +                     line, column, cpBuf, fmt);
  +    ctx->rv = rv;
  +
  +    /* cleanup */
  +    free(cpBuf);
  +
  +    return;
  +}
  +
  Index: ossp-pkg/l2/l2_spec.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2_spec.h
  --- ossp-pkg/l2/l2_spec.h	2001/11/07 16:30:51	1.2
  +++ ossp-pkg/l2/l2_spec.h	2001/12/14 12:42:07	1.3
  @@ -3,6 +3,7 @@
   
   #include "l2.h"
   
  +/* internal specification scanner/parser context */
   typedef struct {
       const char   *inputptr;  /* input buffer: current reading pointer */
       const char   *inputbuf;  /* input buffer: begin of buffer */
  @@ -13,5 +14,21 @@
       l2_result_t   rv;        /* return value */
       void         *yyscan;    /* Flex scanner context */
   } l2_spec_ctx_t;
  +
  +/* internal scanner/parser token location */
  +typedef struct {
  +    int first;
  +    int last;
  +} l2_spec_loc_t;
  +#define YYLTYPE l2_spec_loc_t
  +
  +/* support for automatic location tracking by Bison */
  +#define first_line   first
  +#define first_column first
  +#define last_line    last
  +#define last_column  last
  +
  +/* error reporting function */
  +extern void l2_spec_error(l2_spec_ctx_t *ctx, l2_result_t rv, YYLTYPE *loc, const char *fmt, ...);
   
   #endif /* __L2_SPEC_H__ */
  Index: ossp-pkg/l2/l2_spec_parse.y
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 l2_spec_parse.y
  --- ossp-pkg/l2/l2_spec_parse.y	2001/11/08 21:58:00	1.4
  +++ ossp-pkg/l2/l2_spec_parse.y	2001/12/14 12:42:07	1.5
  @@ -48,8 +48,7 @@
   /* generate verbose error messages and remember them inside the context */
   #undef  yyerror
   #define yyerror(msg) \
  -    do { l2_env_errorinfo(CTX->env, L2_ERR_ARG, "%s", msg); \
  -         CTX->rv = L2_ERR_ARG; } while (0)
  +    l2_spec_error(CTX, L2_ERR_SYN, &yylloc, msg)
   #define YYERROR_VERBOSE
   
   /* scanner state transition */
  @@ -107,14 +106,14 @@
       | channel T_OP_ARROW stream { 
             $$ = $1; 
             if ((CTX->rv = l2_channel_link($1, L2_LINK_CHILD, $3, NULL)) != L2_OK) {
  -              l2_env_errorinfo(CTX->env, CTX->rv, "unable to link parent with child");
  +              l2_spec_error(CTX, CTX->rv, &yylloc, "unable to link parent with child");
                 YYERROR;
             }
         }
       | channel T_OP_ARROW '{' streams '}' { 
             $$ = $1; 
             if ((CTX->rv = l2_channel_link($1, L2_LINK_CHILD, $4, NULL)) != L2_OK) {
  -              l2_env_errorinfo(CTX->env, CTX->rv, "unable to link parent with child list");
  +              l2_spec_error(CTX, CTX->rv, &yylloc, "unable to link parent with child list");
                 YYERROR;
             }
         }
  @@ -128,7 +127,7 @@
       | stream ';' streams { 
             $$ = $1; 
             if ((CTX->rv = l2_channel_link($1, L2_LINK_SIBLING, $3, NULL)) != L2_OK) {
  -              l2_env_errorinfo(CTX->env, CTX->rv, "unable to link childs together");
  +              l2_spec_error(CTX, CTX->rv, &yylloc, "unable to link childs together");
                 YYERROR;
             }
         }
  @@ -139,14 +138,14 @@
       : channel_level '/' channel_level ':' channel_cons { 
             $$ = $5; 
             if ((CTX->rv = l2_channel_levels($5, $1, $3)) != L2_OK) {
  -              l2_env_errorinfo(CTX->env, CTX->rv, "failed to set channel write and flush levels");
  +              l2_spec_error(CTX, CTX->rv, &yylloc, "failed to set channel write and flush levels");
                 YYERROR;
             }
         }
       | channel_level ':' channel_cons { 
             $$ = $3; 
             if ((CTX->rv = l2_channel_levels($3, $1, L2_LEVEL_NONE)) != L2_OK) {
  -              l2_env_errorinfo(CTX->env, CTX->rv, "failed to set channel write levels");
  +              l2_spec_error(CTX, CTX->rv, &yylloc, "failed to set channel write levels");
                 YYERROR;
             }
         }
  @@ -160,7 +159,7 @@
       : T_ID { 
             unsigned int levelmask;
             if ((CTX->rv = l2_util_s2l($1, strlen($1), ',', &levelmask)) != L2_OK) {
  -              l2_env_errorinfo(CTX->env, CTX->rv, "invalid level '%s'", $1);
  +              l2_spec_error(CTX, CTX->rv, &yylloc, "invalid level '%s'", $1);
                 YYERROR;
             }
             $$ = L2_LEVEL_UPTO(levelmask);
  @@ -175,7 +174,7 @@
       : T_ID { 
             unsigned int levelmask;
             if ((CTX->rv = l2_util_s2l($1, strlen($1), ',', &levelmask)) != L2_OK) {
  -              l2_env_errorinfo(CTX->env, CTX->rv, "invalid level '%s'", $1);
  +              l2_spec_error(CTX, CTX->rv, &yylloc, "invalid level '%s'", $1);
                 YYERROR;
             }
             $$ = levelmask;
  @@ -183,7 +182,7 @@
       | T_ID '|' channel_level_mask { 
             unsigned int levelmask;
             if ((CTX->rv = l2_util_s2l($1, strlen($1), ',', &levelmask)) != L2_OK) {
  -              l2_env_errorinfo(CTX->env, CTX->rv, "invalid level '%s'", $1);
  +              l2_spec_error(CTX, CTX->rv, &yylloc, "invalid level '%s'", $1);
                 YYERROR;
             }
             $$ = levelmask | $3; 
  @@ -195,7 +194,7 @@
       : T_ID { 
             l2_channel_t *ch;
             if ((CTX->rv = l2_channel_create(&ch, CTX->env, $1)) != L2_OK) {
  -              l2_env_errorinfo(CTX->env, CTX->rv, "failed to create channel '%s'", $1);
  +              l2_spec_error(CTX, CTX->rv, &yylloc, "failed to create channel '%s'", $1);
                 YYERROR;
             }
             $$ = ch;
  @@ -214,13 +213,13 @@
   /* channel parameters */
   channel_params 
       : /* empty */
  +    | '(' ')'
       | '(' channel_param_list ')'
       ;
   
   /* channel parameter list */
   channel_param_list 
  -    : /* empty */
  -    | channel_param
  +    : channel_param
       | channel_param ',' channel_param_list
       ;
           
  @@ -228,7 +227,7 @@
   channel_param  
       : T_ID '=' { l2_spec_scan_push(CTX, "SS_PARAM"); } T_PARAM { l2_spec_scan_pop(CTX); } { 
             if ((CTX->rv = l2_channel_configure(CTX->chTmp, "%s=\"%s\"", $1, $4)) != L2_OK) {
  -              l2_env_errorinfo(CTX->env, CTX->rv, "failed to configure channel with '%s=\"%s\"'", $1, $4);
  +              l2_spec_error(CTX, CTX->rv, &yylloc, "failed to configure channel with '%s=\"%s\"'", $1, $4);
                 YYERROR;
             }
         }
  Index: ossp-pkg/l2/l2_spec_scan.l
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 l2_spec_scan.l
  --- ossp-pkg/l2/l2_spec_scan.l	2001/11/08 21:58:00	1.5
  +++ ossp-pkg/l2/l2_spec_scan.l	2001/12/14 12:42:07	1.6
  @@ -42,6 +42,16 @@
   #undef  YY_INPUT
   #define YY_INPUT(buf,result,max_size) (result = yyinput(CTX, buf, max_size))
   static int yyinput(l2_spec_ctx_t *ctx, char *buf, int max_size);
  +
  +/* location tracking */
  +#define YY_USER_INIT \
  +    yylloc->first = 0; \
  +    yylloc->last  = 0;
  +#define YY_USER_ACTION \
  +    yylloc->first = yylloc->last; \
  +    yylloc->last += yyleng;
  +#define YY_USER_ACTION_ROLLBACK \
  +    yylloc->last = yylloc->first
   %}
   
   /* scanner options */
  @@ -86,22 +96,21 @@
       yylval->cpValue = strdup(caParam);
       cpParam = NULL;
       yyless(0);
  +    YY_USER_ACTION_ROLLBACK;
       return T_PARAM;
   }
   <SS_PARAM_Q>\" {
       BEGIN(SS_PARAM);
   }
   <SS_PARAM_Q>\n {
  -    l2_env_errorinfo(CTX->env, L2_ERR_ARG, "%s", "Unterminated string");
  -    CTX->rv = L2_ERR_ARG;
  +    l2_spec_error(CTX, L2_ERR_SYN, yylloc, "Unterminated string");
       return 0;
   }   
   <SS_PARAM_Q>\\[0-7]{1,3} {
       unsigned int result;
       (void)sscanf(yytext+1, "%o", &result);
       if (result > 0xff) {
  -        l2_env_errorinfo(CTX->env, L2_ERR_ARG, "%s", "Escape sequence out of bound");
  -        CTX->rv = L2_ERR_ARG;
  +        l2_spec_error(CTX, L2_ERR_SYN, yylloc, "Escape sequence out of bound");
           return 0;
       }
       else
  @@ -111,8 +120,7 @@
       unsigned int result;
       (void)sscanf(yytext+1, "%x", &result);
       if (result > 0xff) {
  -        l2_env_errorinfo(CTX->env, L2_ERR_ARG, "%s", "Escape sequence out of bound");
  -        CTX->rv = L2_ERR_ARG;
  +        l2_spec_error(CTX, L2_ERR_SYN, yylloc, "Escape sequence out of bound");
           return 0;
       }
       else

From ossp-cvs-owner@ossp.org  Fri Dec 14 13:42:43 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fBECggC43696; Fri, 14 Dec 2001 13:42:42 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id EB9214CE731; Fri, 14 Dec 2001 13:42:41 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Message-Id: <20011214124241.EB9214CE731@visp.engelschall.com>
Date: Fri, 14 Dec 2001 13:42:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   14-Dec-2001 13:42:41
  Branch: HEAD                             Handle: 2001121412424100

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    done... puhhh!

  Summary:
    Revision    Changes     Path
    1.48        +0  -1      ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.47 -r1.48 TODO
  --- ossp-pkg/l2/TODO	2001/12/08 20:50:36	1.47
  +++ ossp-pkg/l2/TODO	2001/12/14 12:42:41	1.48
  @@ -2,7 +2,6 @@
   ============
   
   Next steps:
  -- spec parser location tracking (l2_spec*)
   - signal and process handling (l2_env*)
   - asynchronous channel (l2_ch_async.c)
   - manual page (l2.pod)

From ossp-cvs-owner@ossp.org  Fri Dec 14 14:42:59 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fBEDgvC60493; Fri, 14 Dec 2001 14:42:57 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 860A44CE69A; Fri, 14 Dec 2001 14:42:57 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Message-Id: <20011214134257.860A44CE69A@visp.engelschall.com>
Date: Fri, 14 Dec 2001 14:42:57 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   14-Dec-2001 14:42:57
  Branch: HEAD                             Handle: 2001121413425600

  Modified files:
    ossp-pkg/var            var.c

  Log:
    Manual OSSP coding style adjustments.

  Summary:
    Revision    Changes     Path
    1.49        +239 -277   ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.48 -r1.49 var.c
  --- ossp-pkg/var/var.c	2001/12/13 16:25:58	1.48
  +++ ossp-pkg/var/var.c	2001/12/14 13:42:56	1.49
  @@ -446,39 +446,38 @@
   
   static int text(const char *begin, const char *end, char varinit,
                   char startindex, char endindex, char escape)
  -    {
  +{
       const char *p;
  -    for (p = begin; p != end; ++p)
  -        {
  -        if (*p == escape)
  -            {
  +
  +    for (p = begin; p != end; ++p) {
  +        if (*p == escape) {
               if (++p == end)
                   return VAR_ERR_INCOMPLETE_QUOTED_PAIR;
  -            }
  +        }
           else if (*p == varinit)
  -            {
               break;
  -            }
           else if (startindex && (*p == startindex || *p == endindex))
  -            {
               break;
  -            }
  -        }
  -    return p - begin;
       }
  +    return p - begin;
  +}
   
   static int varname(const char *begin, const char *end,
                      const char_class_t nameclass)
   {
       const char *p;
  -    for (p = begin; p != end && nameclass[(int) *p]; ++p);
  +
  +    for (p = begin; p != end && nameclass[(int) *p]; p++)
  +        ;
       return p - begin;
   }
   
   static int number(const char *begin, const char *end)
   {
       const char *p;
  -    for (p = begin; p != end && isdigit((int)*p); ++p);
  +
  +    for (p = begin; p != end && isdigit((int)*p); p++)
  +        ;
       return p - begin;
   }
   
  @@ -486,11 +485,12 @@
                       const var_config_t *config)
   {
       const char *p;
  -    for (p = begin; p != end && *p != config->varinit && *p != '/'; ++p) {
  +
  +    for (p = begin; p != end && *p != config->varinit && *p != '/'; p++) {
           if (*p == config->escape) {
               if (p + 1 == end)
                   return VAR_ERR_INCOMPLETE_QUOTED_PAIR;
  -            ++p;
  +            p++;
           }
       }
       return p - begin;
  @@ -500,37 +500,39 @@
                      const var_config_t *config)
   {
       const char *p;
  +
       for (p = begin;
  -         p != end && *p != config->varinit && *p != config->enddelim
  -         && *p != ':'; ++p) {
  +            p != end 
  +         && *p != config->varinit 
  +         && *p != config->enddelim
  +         && *p != ':'; p++) {
           if (*p == config->escape) {
               if (p + 1 == end)
                   return VAR_ERR_INCOMPLETE_QUOTED_PAIR;
  -            ++p;
  +            p++;
           }
       }
       return p - begin;
   }
   
  -static int num_exp_read_int(const char** begin, const char* end)
  -    {
  +static int num_exp_read_int(const char **begin, const char *end)
  +{
       int num = 0;
  -    do
  -        {
  +
  +    do {
           num *= 10;
           num += **begin - '0';
           ++(*begin);
  -        }
  -    while (isdigit(**begin) && *begin != end);
  +    } while (isdigit(**begin) && *begin != end);
       return num;
  -    }
  +}
   
   static int num_exp_read_operand(const char *begin, const char *end, int current_index,
  -                                int* result, int* failed, int* rel_lookup_flag,
  +                                int *result, int *failed, int *rel_lookup_flag,
                                   const var_config_t *config,
                                   const char_class_t nameclass,
  -                                var_cb_t lookup, void* lookup_context)
  -    {
  +                                var_cb_t lookup, void *lookup_context)
  +{
       const char* p = begin;
       tokenbuf_t tmp;
       int rc;
  @@ -540,9 +542,9 @@
       if (begin == end)
           return VAR_ERR_INCOMPLETE_INDEX_SPEC;
   
  -    if (*p == '(')
  -        {
  -        rc = num_exp(++p, end, current_index, result, failed, rel_lookup_flag, config, nameclass, lookup, lookup_context);
  +    if (*p == '(') {
  +        rc = num_exp(++p, end, current_index, result, failed, 
  +                     rel_lookup_flag, config, nameclass, lookup, lookup_context);
           if (rc < 0)
               return rc;
           p += rc;
  @@ -551,74 +553,68 @@
           if (*p != ')')
               return VAR_ERR_UNCLOSED_BRACKET_IN_INDEX;
           ++p;
  -        }
  -    else if (*p == config->varinit)
  -        {
  -        rc = variable(p, end, config, nameclass, lookup, lookup_context, 1, &tmp, current_index, rel_lookup_flag);
  -        if (rc == VAR_ERR_UNDEFINED_VARIABLE)
  -            {
  +    }
  +    else if (*p == config->varinit) {
  +        rc = variable(p, end, config, nameclass, lookup, 
  +                      lookup_context, 1, &tmp, current_index, rel_lookup_flag);
  +        if (rc == VAR_ERR_UNDEFINED_VARIABLE) {
               *failed = 1;
  -            rc = variable(p, end, config, nameclass, lookup, lookup_context, 0, &tmp, current_index, rel_lookup_flag);
  +            rc = variable(p, end, config, nameclass, lookup, 
  +                          lookup_context, 0, &tmp, current_index, rel_lookup_flag);
               if (rc < 0)
                   return rc;
               p += rc;
               *result = 0;
  -            }
  -        else
  -            {
  +        }
  +        else {
               if (rc < 0)
                   return rc;
               p += rc;
  -            rc = num_exp(tmp.begin, tmp.end, current_index, result, failed, rel_lookup_flag, config, nameclass, lookup, lookup_context);
  +            rc = num_exp(tmp.begin, tmp.end, current_index, result, 
  +                         failed, rel_lookup_flag, config, nameclass, lookup, lookup_context);
               tokenbuf_free(&tmp);
               if (rc < 0)
                   return rc;
  -            }
           }
  -    else if (config->current_index && *p == config->current_index)
  -        {
  -        ++p;
  +    }
  +    else if (config->current_index && *p == config->current_index) {
  +        p++;
           *result = current_index;
  -        ++(*rel_lookup_flag);
  -        }
  -    else if (isdigit(*p))
  -        {
  +        (*rel_lookup_flag)++;
  +    }
  +    else if (isdigit(*p)) {
           *result = num_exp_read_int(&p, end);
  -        }
  -    else if (*p == '+')
  -        {
  -        if (end - p > 1 && isdigit(p[1]))
  -            {
  -            ++p;
  +    }
  +    else if (*p == '+') {
  +        if (end - p > 1 && isdigit(p[1])) {
  +            p++;
               *result = num_exp_read_int(&p, end);
  -            }
  +        }
           else
               return VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC;
  -        }
  -    else if (*p == '-')
  -        {
  -        if (end - p > 1 && isdigit(p[1]))
  -            {
  -            ++p;
  +    }
  +    else if (*p == '-') {
  +        if (end - p > 1 && isdigit(p[1])) {
  +            p++;
               *result = num_exp_read_int(&p, end);
               *result = 0 - *result;
  -            }
  +        }
           else
               return VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC;
  -        }
  +    }
       else
           return VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC;
   
       return p - begin;
  -    }
  +}
   
   static int num_exp(const char *begin, const char *end, int current_index,
  -                   int* result, int* failed, int* rel_lookup_flag,
  +                   int *result, int *failed, int *rel_lookup_flag,
                      const var_config_t *config,
                      const char_class_t nameclass,
  -                   var_cb_t lookup, void* lookup_context)
  -    {
  -    const char* p = begin;
  +                   var_cb_t lookup, void *lookup_context)
  +{
  +    const char *p = begin;
       char operator;
       int right;
       int rc;
  @@ -626,17 +622,18 @@
       if (begin == end)
           return VAR_ERR_INCOMPLETE_INDEX_SPEC;
   
  -    rc = num_exp_read_operand(p, end, current_index, result, failed, rel_lookup_flag, config, nameclass, lookup, lookup_context);
  +    rc = num_exp_read_operand(p, end, current_index, result, 
  +                              failed, rel_lookup_flag, config, nameclass, 
  +                              lookup, lookup_context);
       if (rc < 0)
           return rc;
       p += rc;
   
  -    while (p != end)
  -        {
  -        if (*p == '+' || *p == '-')
  -            {
  +    while (p != end) {
  +        if (*p == '+' || *p == '-') {
               operator = *p++;
  -            rc = num_exp(p, end, current_index, &right, failed, rel_lookup_flag, config, nameclass, lookup, lookup_context);
  +            rc = num_exp(p, end, current_index, &right, failed, 
  +                         rel_lookup_flag, config, nameclass, lookup, lookup_context);
               if (rc < 0)
                   return rc;
               p += rc;
  @@ -644,55 +641,49 @@
                   *result = *result + right;
               else
                   *result = *result - right;
  -            }
  -        else if (*p == '*' || *p == '/' || *p == '%')
  -            {
  +        }
  +        else if (*p == '*' || *p == '/' || *p == '%') {
               operator = *p++;
  -            rc = num_exp_read_operand(p, end, current_index, &right, failed, rel_lookup_flag, config, nameclass, lookup, lookup_context);
  +            rc = num_exp_read_operand(p, end, current_index, &right, failed, 
  +                                      rel_lookup_flag, config, nameclass, lookup, lookup_context);
               if (rc < 0)
                   return rc;
               p += rc;
  -            if (operator == '*')
  -                {
  +            if (operator == '*') {
                   *result = *result * right;
  -                }
  -            else if (operator == '/')
  -                {
  -                if (right == 0)
  -                    {
  +            }
  +            else if (operator == '/') {
  +                if (right == 0) {
                       if (*failed)
                           *result = 0;
                       else
                           return VAR_ERR_DIVISION_BY_ZERO_IN_INDEX;
  -                    }
  +                }
                   else
                       *result = *result / right;
  -                }
  -            else if (operator == '%')
  -                {
  -                if (right == 0)
  -                    {
  +            }
  +            else if (operator == '%') {
  +                if (right == 0) {
                       if (*failed)
                           *result = 0;
                       else
                           return VAR_ERR_DIVISION_BY_ZERO_IN_INDEX;
  -                    }
  +                }
                   else
                       *result = *result % right;
  -                }
               }
  +        }
           else
               break;
  -        }
  -
  -    return p - begin;
       }
  +    return p - begin;
  +}
   
   static int expression(const char *begin, const char *end,
                         const var_config_t *config,
                         const char_class_t nameclass, var_cb_t lookup,
                         void *lookup_context, int force_expand,
  -                      tokenbuf_t *result, int current_index, int* rel_lookup_flag)
  +                      tokenbuf_t *result, int current_index, int *rel_lookup_flag)
       {
       const char *p = begin;
       const char *data;
  @@ -720,157 +711,138 @@
       /* Get the name of the variable to expand. The name may consist of
          an arbitrary number of VARNAMEs and VARIABLEs. */
   
  -    do
  -        {
  +    do {
           rc = varname(p, end, nameclass);
           if (rc < 0)
               goto error_return;
  -        if (rc > 0)
  -            {
  -            if (!tokenbuf_append(&name, p, rc))
  -                {
  +        if (rc > 0) {
  +            if (!tokenbuf_append(&name, p, rc)) {
                   rc = VAR_ERR_OUT_OF_MEMORY;
                   goto error_return;
  -                }
  -            p += rc;
               }
  +            p += rc;
  +        }
   
           rc = variable(p, end, config, nameclass, lookup, lookup_context,
                         force_expand, &tmp, current_index, rel_lookup_flag);
           if (rc < 0)
               goto error_return;
  -        if (rc > 0)
  -            {
  -            if (!tokenbuf_append(&name, tmp.begin, tmp.end - tmp.begin))
  -                {
  +        if (rc > 0) {
  +            if (!tokenbuf_append(&name, tmp.begin, tmp.end - tmp.begin)) {
                   rc = VAR_ERR_OUT_OF_MEMORY;
                   goto error_return;
  -                }
  -            p += rc;
               }
  +            p += rc;
           }
  -    while (rc > 0);
  +    } while (rc > 0);
   
       /* We must have the complete variable name now, so make sure we
          do. */
   
  -    if (name.begin == name.end)
  -        {
  +    if (name.begin == name.end) {
           rc = VAR_ERR_INCOMPLETE_VARIABLE_SPEC;
           goto error_return;
  -        }
  +    }
   
       /* If the next token is START-INDEX, read the index specification. */
   
  -    if (config->startindex && *p == config->startindex)
  -        {
  -        rc = num_exp(++p, end, current_index, &index, &failed, rel_lookup_flag, config, nameclass, lookup, lookup_context);
  +    if (config->startindex && *p == config->startindex) {
  +        rc = num_exp(++p, end, current_index, &index, &failed, 
  +                     rel_lookup_flag, config, nameclass, lookup, lookup_context);
           if (rc < 0)
               goto error_return;
  -        if (rc == 0)
  -            {
  +        if (rc == 0) {
               rc = VAR_ERR_INCOMPLETE_INDEX_SPEC;
               goto error_return;
  -            }
  +        }
           p += rc;
   
  -        if (p == end)
  -            {
  +        if (p == end) {
               rc = VAR_ERR_INCOMPLETE_INDEX_SPEC;
               goto error_return;
  -            }
  -        if (*p != config->endindex)
  -            {
  +        }
  +        if (*p != config->endindex) {
               rc = VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC;
               goto error_return;
  -            }
  -        ++p;
           }
  +        p++;
  +    }
   
       /* Now we have the name of the variable stored in "name". The next
          token here must either be an END-DELIM or a ':'. */
   
  -    if (p == end || (*p != config->enddelim && *p != ':'))
  -        {
  +    if (p == end || (*p != config->enddelim && *p != ':')) {
           rc = VAR_ERR_INCOMPLETE_VARIABLE_SPEC;
           goto error_return;
  -        }
  -    ++p;
  +    }
  +    p++;
   
       /* Use the lookup callback to get the variable's contents. */
   
  -    if (failed)
  -        {
  +    if (failed) {
           result->begin = begin - 1;
           result->end = p;
           result->buffer_size = 0;
  -        }
  -    else
  -        {
  +    }
  +    else {
           rc = (*lookup) (lookup_context, name.begin, name.end - name.begin, index,
                           &data, &len, &buffer_size);
           if (rc < 0)
               goto error_return;
  -        if (rc == 0)
  -            {
  +        if (rc == 0) {
               /* The variable is undefined. What we'll do now depends on the
                  force_expand flag. */
  -
  -            if (force_expand)
  -                {
  +            if (force_expand) {
                   rc = VAR_ERR_UNDEFINED_VARIABLE;
                   goto error_return;
  -                }
  +            }
  +
               /* Initialize result to point back to the original text in
                  the buffer. */
  -
               result->begin = begin - 1;
               result->end = p;
               result->buffer_size = 0;
               failed = 1;
  -            }
  -        else
  -            {
  +        }
  +        else {
               /* The preliminary result is the contents of the variable.
                  This may be modified by the commands that may follow. */
  -
               result->begin = data;
               result->end = data + len;
               result->buffer_size = buffer_size;
  -            }
           }
  +    }
   
  -    if (p[-1] == ':')
  -        {
  +    if (p[-1] == ':') {
           /* Parse and execute commands. */
   
           tokenbuf_free(&tmp);
  -        --p;
  -        while (p != end && *p == ':')
  -            {
  -            ++p;
  +        p--;
  +        while (p != end && *p == ':') {
  +            p++;
               if (!failed)
                   rc = command(p, end, config, nameclass, lookup,
  -                             lookup_context, force_expand, result, current_index, rel_lookup_flag);
  +                             lookup_context, force_expand, result, 
  +                             current_index, rel_lookup_flag);
               else
                   rc = command(p, end, config, nameclass, lookup,
  -                             lookup_context, force_expand, &tmp, current_index, rel_lookup_flag);
  +                             lookup_context, force_expand, &tmp, 
  +                             current_index, rel_lookup_flag);
               if (rc < 0)
                   goto error_return;
               p += rc;
               if (failed)
                   result->end += rc;
  -            }
  +        }
   
  -        if (p == end || *p != config->enddelim)
  -            {
  +        if (p == end || *p != config->enddelim) {
               rc = VAR_ERR_INCOMPLETE_VARIABLE_SPEC;
               goto error_return;
  -            }
  -        ++p;
  -        if (failed)
  -            ++result->end;
           }
  +        p++;
  +        if (failed)
  +            result->end++;
  +    }
   
       /* Exit gracefully. */
   
  @@ -885,13 +857,13 @@
       tokenbuf_free(&tmp);
       tokenbuf_free(result);
       return rc;
  -    }
  +}
   
   static int variable(const char *begin, const char *end,
                       const var_config_t *config, const char_class_t nameclass,
                       var_cb_t lookup, void *lookup_context,
                       int force_expand, tokenbuf_t *result, int current_index,
  -                    int* rel_lookup_flag)
  +                    int *rel_lookup_flag)
   {
       const char *p = begin;
       const char *data;
  @@ -918,7 +890,7 @@
       if (rc < 0)
           return rc;
       if (rc > 0) {
  -        rc2 = (*lookup) (lookup_context, p, rc, 0, &data, &len, &buffer_size);
  +        rc2 = (*lookup)(lookup_context, p, rc, 0, &data, &len, &buffer_size);
           if (rc2 < 0)
               return rc2;
           if (rc2 == 0) {
  @@ -940,7 +912,7 @@
       rc = expression(p, end, config, nameclass, lookup, lookup_context,
                       force_expand, result, current_index, rel_lookup_flag);
       if (rc > 0)
  -        ++rc;
  +        rc++;
       return rc;
   }
   
  @@ -949,7 +921,7 @@
                                  const char_class_t nameclass, var_cb_t lookup,
                                  void *lookup_context, int force_expand,
                                  tokenbuf_t *result, int current_index,
  -                               int* rel_lookup_flag)
  +                               int *rel_lookup_flag)
   {
       const char *p = begin;
       tokenbuf_t tmp;
  @@ -985,8 +957,7 @@
                   goto error_return;
               }
           }
  -    }
  -    while (rc > 0);
  +    } while (rc > 0);
   
       tokenbuf_free(&tmp);
       return p - begin;
  @@ -1002,7 +973,7 @@
                                   const char_class_t nameclass, var_cb_t lookup,
                                   void *lookup_context, int force_expand,
                                   tokenbuf_t *result, int current_index,
  -                                int* rel_lookup_flag)
  +                                int *rel_lookup_flag)
   {
       const char *p = begin;
       tokenbuf_t tmp;
  @@ -1038,8 +1009,7 @@
                   goto error_return;
               }
           }
  -    }
  -    while (rc > 0);
  +    } while (rc > 0);
   
       tokenbuf_free(&tmp);
       return p - begin;
  @@ -1050,24 +1020,24 @@
       return rc;
   }
   
  -
   static int expand_class_description(tokenbuf_t *src, tokenbuf_t *dst)
   {
       unsigned char c, d;
       const char *p = src->begin;
  +
       while (p != src->end) {
           if ((src->end - p) >= 3 && p[1] == '-') {
               if (*p > p[2])
                   return VAR_ERR_INCORRECT_TRANSPOSE_CLASS_SPEC;
               for (c = *p, d = p[2]; c <= d; ++c) {
  -                if (!tokenbuf_append(dst, (char *) &c, 1))
  +                if (!tokenbuf_append(dst, (char *)&c, 1))
                       return VAR_ERR_OUT_OF_MEMORY;
               }
               p += 3;
           } else {
               if (!tokenbuf_append(dst, p, 1))
                   return VAR_ERR_OUT_OF_MEMORY;
  -            ++p;
  +            p++;
           }
       }
       return VAR_OK;
  @@ -1100,8 +1070,7 @@
   
       if (data->buffer_size == 0) {
           tokenbuf_t tmp;
  -        if (!tokenbuf_assign
  -            (&tmp, data->begin, data->end - data->begin)) {
  +        if (!tokenbuf_assign(&tmp, data->begin, data->end - data->begin)) {
               rc = VAR_ERR_OUT_OF_MEMORY;
               goto error_return;
           }
  @@ -1134,8 +1103,11 @@
   {
       tokenbuf_t res;
       const char *p;
  -    size_t num1 = tokenbuf_toint(number1);
  -    size_t num2 = tokenbuf_toint(number2);
  +    size_t num1;
  +    size_t num2;
  +
  +    num1 = tokenbuf_toint(number1);
  +    num2 = tokenbuf_toint(number2);
   
       /* Determine begin of result string. */
   
  @@ -1149,7 +1121,8 @@
       if (num2 == 0) {
           if (!tokenbuf_assign(&res, p, data->end - p))
               return VAR_ERR_OUT_OF_MEMORY;
  -    } else {                    /* OK, then use num2. */
  +    } else {
  +        /* OK, then use num2. */
           if (isrange) {
               if ((p + num2) > data->end)
                   return VAR_ERR_RANGE_OUT_OF_BOUNDS;
  @@ -1183,13 +1156,13 @@
                   tokenbuf_free(expanded);
                   return VAR_ERR_INCOMPLETE_QUOTED_PAIR;
               }
  -            ++p;
  +            p++;
               if (*p == '\\') {
                   if (!tokenbuf_append(expanded, p, 1)) {
                       tokenbuf_free(expanded);
                       return VAR_ERR_OUT_OF_MEMORY;
                   }
  -                ++p;
  +                p++;
                   continue;
               }
               if (!isdigit((int)*p)) {
  @@ -1197,7 +1170,7 @@
                   return VAR_ERR_UNKNOWN_QUOTED_PAIR_IN_REPLACE;
               }
               i = *p - '0';
  -            ++p;
  +            p++;
               if (pmatch[i].rm_so == -1) {
                   tokenbuf_free(expanded);
                   return VAR_ERR_SUBMATCH_OUT_OF_RANGE;
  @@ -1212,7 +1185,7 @@
                   tokenbuf_free(expanded);
                   return VAR_ERR_OUT_OF_MEMORY;
               }
  -            ++p;
  +            p++;
           }
       }
   
  @@ -1258,7 +1231,8 @@
               else
                   rc = strncmp(p, search->begin,
                                search->end - search->begin);
  -            if (rc != 0) {      /* no match, copy character */
  +            if (rc != 0) {      
  +                /* no match, copy character */
                   if (!tokenbuf_append(&tmp, p, 1)) {
                       tokenbuf_free(&tmp);
                       return VAR_ERR_OUT_OF_MEMORY;
  @@ -1266,7 +1240,7 @@
                   ++p;
               } else {
                   tokenbuf_append(&tmp, replace->begin,
  -                                   replace->end - replace->begin);
  +                                replace->end - replace->begin);
                   p += search->end - search->begin;
                   if (!global) {
                       if (!tokenbuf_append(&tmp, p, data->end - p)) {
  @@ -1291,19 +1265,16 @@
           /* Copy the pattern and the data to our own buffer to make
              sure they're terminated with a null byte. */
   
  -        if (!tokenbuf_assign
  -            (&tmp, search->begin, search->end - search->begin))
  +        if (!tokenbuf_assign(&tmp, search->begin, search->end - search->begin))
               return VAR_ERR_OUT_OF_MEMORY;
  -        if (!tokenbuf_assign
  -            (&mydata, data->begin, data->end - data->begin)) {
  +        if (!tokenbuf_assign(&mydata, data->begin, data->end - data->begin)) {
               tokenbuf_free(&tmp);
               return VAR_ERR_OUT_OF_MEMORY;
           }
   
           /* Compile the pattern. */
   
  -        rc = regcomp(&preg, tmp.begin,
  -                     REG_EXTENDED | ((case_insensitive) ? REG_ICASE : 0));
  +        rc = regcomp(&preg, tmp.begin, REG_EXTENDED|((case_insensitive)?REG_ICASE:0));
           tokenbuf_free(&tmp);
           if (rc != 0) {
               tokenbuf_free(&mydata);
  @@ -1313,7 +1284,7 @@
           /* Match the pattern and create the result string in the tmp
              buffer. */
   
  -        for (p = mydata.begin; p != mydata.end;) {
  +        for (p = mydata.begin; p != mydata.end; ) {
               if (p == mydata.begin || p[-1] == '\n')
                   regexec_flag = 0;
               else
  @@ -1379,10 +1350,10 @@
                   if (!tokenbuf_append
                       (data, fill->begin, fill->end - fill->begin))
                       return VAR_ERR_OUT_OF_MEMORY;
  -                --i;
  +                i--;
               }
  -            i = (width - (data->end - data->begin)) % (fill->end -
  -                                                       fill->begin);
  +            i = (width - (data->end - data->begin)) 
  +                % (fill->end - fill->begin);
               if (!tokenbuf_append(data, fill->begin, i))
                   return VAR_ERR_OUT_OF_MEMORY;
           }
  @@ -1396,16 +1367,15 @@
                       tokenbuf_free(&result);
                       return VAR_ERR_OUT_OF_MEMORY;
                   }
  -                --i;
  +                i--;
               }
  -            i = (width - (data->end - data->begin)) % (fill->end -
  -                                                       fill->begin);
  +            i = (width - (data->end - data->begin)) 
  +                % (fill->end - fill->begin);
               if (!tokenbuf_append(&result, fill->begin, i)) {
                   tokenbuf_free(&result);
                   return VAR_ERR_OUT_OF_MEMORY;
               }
  -            if (!tokenbuf_append
  -                (&result, data->begin, data->end - data->begin)) {
  +            if (!tokenbuf_append(&result, data->begin, data->end - data->begin)) {
                   tokenbuf_free(&result);
                   return VAR_ERR_OUT_OF_MEMORY;
               }
  @@ -1420,15 +1390,14 @@
   
               i = i / (fill->end - fill->begin);
               while (i > 0) {
  -                if (!tokenbuf_append
  -                    (&result, fill->begin, fill->end - fill->begin)) {
  +                if (!tokenbuf_append(&result, fill->begin, fill->end - fill->begin)) {
                       tokenbuf_free(&result);
                       return VAR_ERR_OUT_OF_MEMORY;
                   }
  -                --i;
  +                i--;
               }
  -            i = ((width - (data->end - data->begin)) / 2) % (fill->end -
  -                                                             fill->begin);
  +            i = ((width - (data->end - data->begin)) / 2) 
  +                % (fill->end - fill->begin);
               if (!tokenbuf_append(&result, fill->begin, i)) {
                   tokenbuf_free(&result);
                   return VAR_ERR_OUT_OF_MEMORY;
  @@ -1436,8 +1405,7 @@
   
               /* Append the actual data string. */
   
  -            if (!tokenbuf_append
  -                (&result, data->begin, data->end - data->begin)) {
  +            if (!tokenbuf_append(&result, data->begin, data->end - data->begin)) {
                   tokenbuf_free(&result);
                   return VAR_ERR_OUT_OF_MEMORY;
               }
  @@ -1452,7 +1420,7 @@
                       tokenbuf_free(&result);
                       return VAR_ERR_OUT_OF_MEMORY;
                   }
  -                --i;
  +                i--;
               }
               i = width - (result.end - result.begin);
               if (!tokenbuf_append(&result, fill->begin, i)) {
  @@ -1473,7 +1441,7 @@
   static int command(const char *begin, const char *end,
                      const var_config_t *config, const char_class_t nameclass,
                      var_cb_t lookup, void *lookup_context, int force_expand,
  -                   tokenbuf_t *data, int current_index, int* rel_lookup_flag)
  +                   tokenbuf_t *data, int current_index, int *rel_lookup_flag)
   {
       const char *p = begin;
       tokenbuf_t tmptokbuf;
  @@ -1500,16 +1468,15 @@
                  we have to copy it before modifying the contents. */
   
               if (data->buffer_size == 0) {
  -                if (!tokenbuf_assign
  -                    (data, data->begin, data->end - data->begin)) {
  +                if (!tokenbuf_assign(data, data->begin, data->end - data->begin)) {
                       rc = VAR_ERR_OUT_OF_MEMORY;
                       goto error_return;
                   }
               }
  -            for (ptr = (char *) data->begin; ptr != data->end; ++ptr)
  +            for (ptr = (char *)data->begin; ptr != data->end; ++ptr)
                   *ptr = tolower(*ptr);
           }
  -        ++p;
  +        p++;
           break;
   
       case 'u':                   /* Turn data to uppercase. */
  @@ -1577,7 +1544,7 @@
           break;
   
       case '-':                   /* Substitute parameter if data is empty. */
  -        ++p;
  +        p++;
           rc = exptext_or_variable(p, end, config, nameclass, lookup,
                                    lookup_context, force_expand, &tmptokbuf,
                                    current_index, rel_lookup_flag);
  @@ -1595,7 +1562,7 @@
           break;
   
       case '*':                   /* Return "" if data is not empty, parameter otherwise. */
  -        ++p;
  +        p++;
           rc = exptext_or_variable(p, end, config, nameclass, lookup,
                                    lookup_context, force_expand, &tmptokbuf, current_index, rel_lookup_flag);
           if (rc < 0)
  @@ -1618,7 +1585,7 @@
           break;
   
       case '+':                   /* Substitute parameter if data is not empty. */
  -        ++p;
  +        p++;
           rc = exptext_or_variable(p, end, config, nameclass, lookup,
                                    lookup_context, force_expand, &tmptokbuf, current_index, rel_lookup_flag);
           if (rc < 0)
  @@ -1635,11 +1602,11 @@
           break;
   
       case 's':                   /* Search and replace. */
  -        ++p;
  +        p++;
   
           if (*p != '/')
               return VAR_ERR_MALFORMATTED_REPLACE;
  -        ++p;
  +        p++;
   
           rc = substext_or_variable(p, end, config, nameclass, lookup,
                                     lookup_context, force_expand, &search, current_index, rel_lookup_flag);
  @@ -1651,7 +1618,7 @@
               rc = VAR_ERR_MALFORMATTED_REPLACE;
               goto error_return;
           }
  -        ++p;
  +        p++;
   
           rc = substext_or_variable(p, end, config, nameclass, lookup,
                                     lookup_context, force_expand, &replace, current_index, rel_lookup_flag);
  @@ -1663,7 +1630,7 @@
               rc = VAR_ERR_MALFORMATTED_REPLACE;
               goto error_return;
           }
  -        ++p;
  +        p++;
   
           rc = exptext(p, end, config);
           if (rc < 0)
  @@ -1681,11 +1648,11 @@
           break;
   
       case 'y':                   /* Transpose characters from class A to class B. */
  -        ++p;
  +        p++;
   
           if (*p != '/')
               return VAR_ERR_MALFORMATTED_TRANSPOSE;
  -        ++p;
  +        p++;
   
           rc = substext_or_variable(p, end, config, nameclass, lookup,
                                     lookup_context, force_expand, &search, current_index, rel_lookup_flag);
  @@ -1697,7 +1664,7 @@
               rc = VAR_ERR_MALFORMATTED_TRANSPOSE;
               goto error_return;
           }
  -        ++p;
  +        p++;
   
           rc = substext_or_variable(p, end, config, nameclass, lookup,
                                     lookup_context, force_expand, &replace, current_index, rel_lookup_flag);
  @@ -1720,11 +1687,11 @@
   
   
       case 'p':                   /* Padding. */
  -        ++p;
  +        p++;
   
           if (*p != '/')
               return VAR_ERR_MALFORMATTED_PADDING;
  -        ++p;
  +        p++;
   
           rc = number(p, end);
           if (rc == 0) {
  @@ -1740,7 +1707,7 @@
               rc = VAR_ERR_MALFORMATTED_PADDING;
               goto error_return;
           }
  -        ++p;
  +        p++;
   
           rc = substext_or_variable(p, end, config, nameclass, lookup,
                                     lookup_context, force_expand, &replace, current_index, rel_lookup_flag);
  @@ -1752,13 +1719,13 @@
               rc = VAR_ERR_MALFORMATTED_PADDING;
               goto error_return;
           }
  -        ++p;
  +        p++;
   
           if (*p != 'l' && *p != 'c' && *p != 'r') {
               rc = VAR_ERR_MALFORMATTED_PADDING;
               goto error_return;
           }
  -        ++p;
  +        p++;
   
           if (data->begin) {
               rc = padding(data, &number1, &replace, p[-1]);
  @@ -1792,43 +1759,42 @@
       return rc;
   }
   
  -struct wrapper_context
  -    {
  +struct wrapper_context {
       var_cb_t lookup;
  -    void*    context;
  -    int*     rel_lookup_flag;
  -    };
  +    void    *context;
  +    int     *rel_lookup_flag;
  +};
   
   static int lookup_wrapper(void *context,
                             const char *varname, size_t name_len, int index,
                             const char **data, size_t *data_len,
                             size_t *buffer_size)
  -    {
  +{
       static char buf[1];
  -    struct wrapper_context* wcon = context;
  +    struct wrapper_context *wcon = context;
       int rc;
   
  -    rc = (*wcon->lookup)(wcon->context, varname, name_len, index, data, data_len, buffer_size);
  -    if (rc == 0)
  -        {
  -        --(*wcon->rel_lookup_flag);
  +    rc = (*wcon->lookup)(wcon->context, varname, name_len, 
  +                         index, data, data_len, buffer_size);
  +    if (rc == 0) {
  +        (*wcon->rel_lookup_flag)--;
           *data = buf;
           *data_len = 0;
           *buffer_size = 0;
           return 1;
  -        }
  +    }
       else
           return rc;
  -    }
  +}
   
   static var_rc_t input(const char *begin, const char *end,
                         const var_config_t *config,
                         const char_class_t nameclass, var_cb_t lookup,
                         void *lookup_context, int force_expand,
                         tokenbuf_t *output, int current_index,
  -                      size_t recursion_level, int* rel_lookup_flag)
  +                      size_t recursion_level, int *rel_lookup_flag)
   {
  -    const char* p = begin;
  +    const char *p = begin;
       int rc;
       tokenbuf_t result;
       int i;
  @@ -1836,45 +1802,44 @@
       struct wrapper_context wcon;
       int my_rel_lookup_flag;
       int original_rel_lookup_state;
  +
       tokenbuf_init(&result);
   
  -    if (rel_lookup_flag == NULL)
  -        {
  +    if (rel_lookup_flag == NULL) {
           rel_lookup_flag  = &my_rel_lookup_flag;
           *rel_lookup_flag = 0;
  -        }
  +    }
   
       do {
  -        if (begin != end && config->startindex && *begin == config->startindex)
  -            {
  +        if (begin != end && config->startindex && *begin == config->startindex) {
               original_rel_lookup_state = *rel_lookup_flag;
               wcon.lookup = lookup;
               wcon.context = lookup_context;
               wcon.rel_lookup_flag = rel_lookup_flag;
  -            ++begin;
  -            for (i = 0; i == 0 || *rel_lookup_flag > original_rel_lookup_state; ++i)
  -                {
  +            begin++;
  +            for (i = 0; i == 0 || *rel_lookup_flag > original_rel_lookup_state; i++) {
                   *rel_lookup_flag = original_rel_lookup_state;
                   output_backup = output->end - output->begin;
                   printf("%d: Recursing with default index %d.\n", recursion_level, i);
  -                rc = input(begin, end, config, nameclass, &lookup_wrapper, &wcon, 1, output, i, recursion_level+1, rel_lookup_flag);
  +                rc = input(begin, end, config, nameclass, &lookup_wrapper, 
  +                           &wcon, 1, output, i, recursion_level+1, rel_lookup_flag);
                   printf("%d: input() recursion returned %d.\n", recursion_level, rc);
                   printf("%d: input(): Had %d relative lookups.\n", recursion_level, *rel_lookup_flag);
                   if (rc < 0)
                       goto error_return;
  -                if (begin[rc] != config->endindex)
  -                    {
  +                if (begin[rc] != config->endindex) {
                       rc = VAR_ERR_UNTERMINATED_LOOP_CONSTRUCT;
                       goto error_return;
  -                    }
                   }
  +            }
               output->end = output->begin + output_backup;
               begin += rc;
  -            ++begin;
  +            begin++;
               continue;
  -            }
  +        }
   
  -        rc = text(begin, end, config->varinit, config->startindex, config->endindex, config->escape);
  +        rc = text(begin, end, config->varinit, config->startindex, 
  +                  config->endindex, config->escape);
           if (rc > 0) {
               if (!tokenbuf_append(output, begin, rc)) {
                   rc = VAR_ERR_OUT_OF_MEMORY;
  @@ -1886,10 +1851,10 @@
               goto error_return;
   
           rc = variable(begin, end, config, nameclass, lookup,
  -                      lookup_context, force_expand, &result, current_index, rel_lookup_flag);
  +                      lookup_context, force_expand, &result, 
  +                      current_index, rel_lookup_flag);
           if (rc > 0) {
  -            if (!tokenbuf_append
  -                (output, result.begin, result.end - result.begin)) {
  +            if (!tokenbuf_append(output, result.begin, result.end - result.begin)) {
                   rc = VAR_ERR_OUT_OF_MEMORY;
                   goto error_return;
               }
  @@ -1898,8 +1863,7 @@
           }
           if (rc < 0)
               goto error_return;
  -    }
  -    while (begin != end && rc > 0);
  +    } while (begin != end && rc > 0);
   
       if (recursion_level == 0 && begin != end) {
           rc = VAR_ERR_INPUT_ISNT_TEXT_NOR_VARIABLE;
  @@ -1958,18 +1922,16 @@
                  lookup, lookup_context, force_expand, &output, 0, 0, NULL);
       *result = (char *)output.begin;
       *result_len = output.end - output.begin;
  -    if (rc >= 0)
  -        {
  -        if (!tokenbuf_append(&output, "\0", 1))
  -            {
  +    if (rc >= 0) {
  +        if (!tokenbuf_append(&output, "\0", 1)) {
               tokenbuf_free(&output);
               return VAR_ERR_OUT_OF_MEMORY;
  -            }
  -        --output.end;
  -        rc = VAR_OK;
           }
  -
  +        output.end--;
  +        rc = VAR_OK;
  +    }
       *result = (char *)output.begin;
       *result_len = output.end - output.begin;
       return rc;
   }
  +

From ossp-cvs-owner@ossp.org  Fri Dec 14 14:47:03 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fBEDl2C61908; Fri, 14 Dec 2001 14:47:02 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 46E384CE6E2; Fri, 14 Dec 2001 14:47:02 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c var.h var_test.c
Message-Id: <20011214134702.46E384CE6E2@visp.engelschall.com>
Date: Fri, 14 Dec 2001 14:47:02 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   14-Dec-2001 14:47:02
  Branch: HEAD                             Handle: 2001121413470100

  Modified files:
    ossp-pkg/var            var.c var.h var_test.c

  Log:
    Get rid of the following warnings under "gcc -O2 -pedantic -Wall
    -Wshadow -Wpointer-arith -Wcast-align -Winline -Wmissing-prototypes
    -Wmissing-declarations -Wnested-externs -Wno-long-long":
    
    var.h:91: warning: declaration of `index' shadows global declaration
    var.c: In function `expression':
    var.c:693: warning: declaration of `index' shadows global declaration
    var.c: At top level:
    var.c:1769: warning: declaration of `varname' shadows global declaration
    var.c:1769: warning: declaration of `index' shadows global declaration
    var.c: In function `lookup_wrapper':
    var.c:1772: warning: declaration of `index' shadows global declaration
    var.c:1772: warning: declaration of `varname' shadows global declaration
    var_test.c:13: warning: declaration of `index' shadows global declaration
    var_test.c: In function `var_lookup':
    var_test.c:16: warning: declaration of `index' shadows global declaration

  Summary:
    Revision    Changes     Path
    1.50        +6  -6      ossp-pkg/var/var.c
    1.18        +1  -1      ossp-pkg/var/var.h
    1.26        +4  -4      ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.49 -r1.50 var.c
  --- ossp-pkg/var/var.c	2001/12/14 13:42:56	1.49
  +++ ossp-pkg/var/var.c	2001/12/14 13:47:01	1.50
  @@ -690,7 +690,7 @@
       size_t len, buffer_size;
       int failed = 0;
       int rc;
  -    int index = 0;
  +    int idx = 0;
       tokenbuf_t name;
       tokenbuf_t tmp;
   
  @@ -747,7 +747,7 @@
       /* If the next token is START-INDEX, read the index specification. */
   
       if (config->startindex && *p == config->startindex) {
  -        rc = num_exp(++p, end, current_index, &index, &failed, 
  +        rc = num_exp(++p, end, current_index, &idx, &failed, 
                        rel_lookup_flag, config, nameclass, lookup, lookup_context);
           if (rc < 0)
               goto error_return;
  @@ -785,7 +785,7 @@
           result->buffer_size = 0;
       }
       else {
  -        rc = (*lookup) (lookup_context, name.begin, name.end - name.begin, index,
  +        rc = (*lookup) (lookup_context, name.begin, name.end - name.begin, idx,
                           &data, &len, &buffer_size);
           if (rc < 0)
               goto error_return;
  @@ -1766,7 +1766,7 @@
   };
   
   static int lookup_wrapper(void *context,
  -                          const char *varname, size_t name_len, int index,
  +                          const char *name, size_t name_len, int idx,
                             const char **data, size_t *data_len,
                             size_t *buffer_size)
   {
  @@ -1774,8 +1774,8 @@
       struct wrapper_context *wcon = context;
       int rc;
   
  -    rc = (*wcon->lookup)(wcon->context, varname, name_len, 
  -                         index, data, data_len, buffer_size);
  +    rc = (*wcon->lookup)(wcon->context, name, name_len, 
  +                         idx, data, data_len, buffer_size);
       if (rc == 0) {
           (*wcon->rel_lookup_flag)--;
           *data = buf;
  Index: ossp-pkg/var/var.h
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 var.h
  --- ossp-pkg/var/var.h	2001/12/12 16:51:20	1.17
  +++ ossp-pkg/var/var.h	2001/12/14 13:47:01	1.18
  @@ -88,7 +88,7 @@
   /* Prototype for the lookup callback used in var_expand(). */
   
   typedef int (*var_cb_t) (void *context,
  -    const char *varname, size_t name_len, int index,
  +    const char *varname, size_t name_len, int idx,
       const char **data, size_t *data_len,
       size_t *buffer_size);
   
  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 var_test.c
  --- ossp-pkg/var/var_test.c	2001/12/13 16:03:42	1.25
  +++ ossp-pkg/var/var_test.c	2001/12/14 13:47:01	1.26
  @@ -5,12 +5,12 @@
   
   struct variable {
       const char *name;
  -    const unsigned int index;
  +    const unsigned int idx;
       const char *data;
   };
   
   static int var_lookup(void *context,
  -    const char *varname, size_t name_len, int index,
  +    const char *varname, size_t name_len, int idx,
       const char **data, size_t *data_len,
       size_t *buffer_size)
   {
  @@ -18,11 +18,11 @@
       size_t i, counter, length;
       static char buf[((sizeof(int)*8)/3)+10]; /* sufficient size: <#bits> x log_10(2) + safety */
   
  -    if (index >= 0)
  +    if (idx >= 0)
           {
           for (i = 0; vars[i].name; ++i)
               {
  -            if (strncmp(varname, vars[i].name, name_len) == 0 && vars[i].index == index)
  +            if (strncmp(varname, vars[i].name, name_len) == 0 && vars[i].idx == idx)
                   {
                   *data = vars[i].data;
                   *data_len = strlen(*data);

From ossp-cvs-owner@ossp.org  Fri Dec 14 14:49:42 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fBEDneC62876; Fri, 14 Dec 2001 14:49:40 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 6D4894CE716; Fri, 14 Dec 2001 14:49:40 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var_test.c
Message-Id: <20011214134940.6D4894CE716@visp.engelschall.com>
Date: Fri, 14 Dec 2001 14:49:40 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   14-Dec-2001 14:49:40
  Branch: HEAD                             Handle: 2001121413494000

  Modified files:
    ossp-pkg/var            var_test.c

  Log:
    Manual OSSP coding style adjustments.

  Summary:
    Revision    Changes     Path
    1.27        +50 -23     ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 var_test.c
  --- ossp-pkg/var/var_test.c	2001/12/14 13:47:01	1.26
  +++ ossp-pkg/var/var_test.c	2001/12/14 13:49:40	1.27
  @@ -1,6 +1,36 @@
  +/*
  +**  VAR - OSSP variable expression library.
  +**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**
  +**  This file is part of OSSP VAR, an extensible data serialization
  +**  library which can be found at http://www.ossp.org/pkg/var/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  var_test.c: VAR library regression test.
  +*/
  +
   #include <stdio.h>
   #include <string.h>
   #include <errno.h>
  +
   #include "var.h"
   
   struct variable {
  @@ -9,39 +39,35 @@
       const char *data;
   };
   
  -static int var_lookup(void *context,
  +static int var_lookup(
  +    void *context,
       const char *varname, size_t name_len, int idx,
       const char **data, size_t *data_len,
       size_t *buffer_size)
   {
  -    const struct variable*  vars = context;
  +    const struct variable *vars = context;
       size_t i, counter, length;
       static char buf[((sizeof(int)*8)/3)+10]; /* sufficient size: <#bits> x log_10(2) + safety */
   
  -    if (idx >= 0)
  -        {
  -        for (i = 0; vars[i].name; ++i)
  -            {
  -            if (strncmp(varname, vars[i].name, name_len) == 0 && vars[i].idx == idx)
  -                {
  +    if (idx >= 0) {
  +        for (i = 0; vars[i].name; ++i) {
  +            if (strncmp(varname, vars[i].name, name_len) == 0 && vars[i].idx == idx) {
                   *data = vars[i].data;
                   *data_len = strlen(*data);
                   *buffer_size = 0;
                   return 1;
  -                }
               }
           }
  -    else
  -        {
  -        for (i = 0; vars[i].name; ++i)
  -            {
  -            if (strncmp(varname, vars[i].name, name_len) == 0)
  -                {
  +    }
  +    else {
  +        for (i = 0; vars[i].name; ++i) {
  +            if (strncmp(varname, vars[i].name, name_len) == 0) {
                   printf("Found variable at index %d.\n", i);
                   counter = 1;
                   length = strlen(vars[i].data);
  -                while (vars[i + counter].data && strncmp(varname, vars[i + counter].name, name_len) == 0)
  -                    ++counter;
  +                while (   vars[i + counter].data 
  +                       && strncmp(varname, vars[i + counter].name, name_len) == 0)
  +                    counter++;
                   if (counter == 1)
                       sprintf(buf, "%d", length);
                   else
  @@ -50,9 +76,9 @@
                   *data_len = strlen(buf);
                   *buffer_size = 0;
                   return 1;
  -                }
               }
           }
  +    }
       return 0;
   }
   
  @@ -173,7 +199,7 @@
       for (i = 0; i < sizeof(tests) / sizeof(struct test_case); ++i) {
   #ifdef DEBUG
           printf("Test case #%02d: Original input is '%s'.\n", i,
  -           tests[i].input);
  +               tests[i].input);
   #endif
           rc = var_unescape(tests[i].input, strlen(tests[i].input), buffer, 0);
           if (rc != VAR_OK) {
  @@ -194,14 +220,15 @@
   #ifdef DEBUG
           printf("Test case #%02d: Expanded output is '%s'.\n", i, tmp);
   #endif
  -        if (tmp_len != strlen(tests[i].expected) || tmp == NULL
  -        || memcmp(tests[i].expected, tmp, tmp_len) != 0) {
  +        if (   tmp_len != strlen(tests[i].expected) 
  +            || tmp == NULL
  +            || memcmp(tests[i].expected, tmp, tmp_len) != 0) {
               printf("Test case #%d: Expected result '%s' but got '%s'.\n",
                   i, tests[i].expected, tmp);
               return 1;
           }
  -    free(tmp);
  +        free(tmp);
       }
  -
       return 0;
   }
  +

From ossp-cvs-owner@ossp.org  Fri Dec 14 15:06:52 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fBEE6pC69648; Fri, 14 Dec 2001 15:06:51 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 5650F4CE729; Fri, 14 Dec 2001 15:06:51 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Message-Id: <20011214140651.5650F4CE729@visp.engelschall.com>
Date: Fri, 14 Dec 2001 15:06:51 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   14-Dec-2001 15:06:51
  Branch: HEAD                             Handle: 2001121414065000

  Modified files:
    ossp-pkg/var            var.c

  Log:
    Cleanup post-processing code by reducing redundancy.
    Nevertheless the error result_len is still incorrect IMHO!

  Summary:
    Revision    Changes     Path
    1.51        +15 -4      ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.50 -r1.51 var.c
  --- ossp-pkg/var/var.c	2001/12/14 13:47:01	1.50
  +++ ossp-pkg/var/var.c	2001/12/14 14:06:50	1.51
  @@ -1920,18 +1920,29 @@
       tokenbuf_init(&output);
       rc = input(input_buf, input_buf + input_len, config, nameclass,
                  lookup, lookup_context, force_expand, &output, 0, 0, NULL);
  -    *result = (char *)output.begin;
  -    *result_len = output.end - output.begin;
  +
  +    /* Post-process output */
       if (rc >= 0) {
  +        /* always NUL-terminate output for convinience reasons */
           if (!tokenbuf_append(&output, "\0", 1)) {
               tokenbuf_free(&output);
               return VAR_ERR_OUT_OF_MEMORY;
           }
           output.end--;
  +
  +        /* Provide results */
  +        *result = (char *)output.begin;
  +        *result_len = output.end - output.begin;
  +
  +        /* canonify all positive answers */
           rc = VAR_OK;
       }
  -    *result = (char *)output.begin;
  -    *result_len = output.end - output.begin;
  +    else {
  +        /* Provide error results */
  +        *result = (char *)input_buf;
  +        *result_len = output.end - output.begin; /* FIXME */
  +    }
  +
       return rc;
   }
   

From ossp-cvs-owner@ossp.org  Fri Dec 14 15:40:30 2001
Received: by mail.ossp.org (Sendmail 8.11.0+) via ESMTP for <ossp-cvs@ossp.org>
	from visp.engelschall.com id fBEEeTC77177; Fri, 14 Dec 2001 15:40:29 +0100 (CET)
Received: by visp.engelschall.com (Postfix, from userid 6004)
	id 259AE4CE74E; Fri, 14 Dec 2001 15:40:29 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Message-Id: <20011214144029.259AE4CE74E@visp.engelschall.com>
Date: Fri, 14 Dec 2001 15:40:29 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
User-Agent: OSSP Petidomo 4.0

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   14-Dec-2001 15:40:29
  Branch: HEAD                             Handle: 2001121414402800

  Modified files:
    ossp-pkg/var            var.c

  Log:
    remove debugging stuff

  Summary:
    Revision    Changes     Path
    1.52        +0  -3      ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.51 -r1.52 var.c
  --- ossp-pkg/var/var.c	2001/12/14 14:06:50	1.51
  +++ ossp-pkg/var/var.c	2001/12/14 14:40:28	1.52
  @@ -1820,11 +1820,8 @@
               for (i = 0; i == 0 || *rel_lookup_flag > original_rel_lookup_state; i++) {
                   *rel_lookup_flag = original_rel_lookup_state;
                   output_backup = output->end - output->begin;
  -                printf("%d: Recursing with default index %d.\n", recursion_level, i);
                   rc = input(begin, end, config, nameclass, &lookup_wrapper, 
                              &wcon, 1, output, i, recursion_level+1, rel_lookup_flag);
  -                printf("%d: input() recursion returned %d.\n", recursion_level, rc);
  -                printf("%d: input(): Had %d relative lookups.\n", recursion_level, *rel_lookup_flag);
                   if (rc < 0)
                       goto error_return;
                   if (begin[rc] != config->endindex) {

From ossp-cvs-owner@ossp.org  Sun Dec 16 19:13:23 2001
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3518C764B3; Sun, 16 Dec 2001 19:13:23 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var TODO
Message-Id: <20011216181323.3518C764B3@mail.ossp.org>
Date: Sun, 16 Dec 2001 19:13:23 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   16-Dec-2001 19:13:23
  Branch: HEAD                             Handle: 2001121618132200

  Modified files:
    ossp-pkg/var            TODO

  Log:
    test commit for new repository

  Summary:
    Revision    Changes     Path
    1.8         +1  -0      ossp-pkg/var/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/var/TODO
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 TODO
  --- ossp-pkg/var/TODO	13 Dec 2001 09:20:37 -0000	1.7
  +++ ossp-pkg/var/TODO	16 Dec 2001 18:13:22 -0000	1.8
  @@ -130,3 +130,4 @@
           ${empty:p/-/${foo[$#{foo}]:#}/}
           ${foo[$#{foo}]}
   
  +

From ossp-cvs-owner@ossp.org  Sun Dec 16 19:16:00 2001
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8623D764B3; Sun, 16 Dec 2001 19:16:00 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela shiela.pl
Message-Id: <20011216181600.8623D764B3@mail.ossp.org>
Date: Sun, 16 Dec 2001 19:16:00 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   16-Dec-2001 19:16:00
  Branch: HEAD                             Handle: 2001121618160000

  Modified files:
    ossp-pkg/shiela         shiela.pl

  Log:
    allow strings like 1.11.1p1

  Summary:
    Revision    Changes     Path
    1.14        +1  -1      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/shiela.pl
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	6 Dec 2001 10:13:58 -0000	1.13
  +++ ossp-pkg/shiela/shiela.pl	16 Dec 2001 18:16:00 -0000	1.14
  @@ -190,7 +190,7 @@
       #   determine CVS version and capabilities
       my $v = `$RT->{cvs} --version 2>/dev/null`;
       $RT->{cvsvers} = '?';
  -    $RT->{cvsvers} = $1 if ($v =~ m|Concurrent\s+Versions\s+System\s+\(CVS\)\s+([\d.]+)\s+|s);
  +    $RT->{cvsvers} = $1 if ($v =~ m|Concurrent\s+Versions\s+System\s+\(CVS\)\s+([\d.p]+)\s+|s);
       $RT->{cvsossp} = 0;
       $RT->{cvsossp} = 1 if ($v =~ m|OSSP|s);
       die "$RT->{cvs} is not at least CVS 1.10" if ($RT->{cvsvers} !~ m|^1\.1[0-9]|);

From ossp-cvs-owner@ossp.org  Mon Dec 17 00:40:17 2001
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 34F4376448; Mon, 17 Dec 2001 00:40:17 +0100 (CET)
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c var.h var.pod var_test.c
Message-Id: <20011216234017.34F4376448@mail.ossp.org>
Date: Mon, 17 Dec 2001 00:40:17 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   17-Dec-2001 00:40:17
  Branch: HEAD                             Handle: 2001121623401600

  Modified files:
    ossp-pkg/var            var.c var.h var.pod var_test.c

  Log:
    Implemented loops with explicit start, stop, and step values.

  Summary:
    Revision    Changes     Path
    1.53        +163 -26    ossp-pkg/var/var.c
    1.19        +1  -0      ossp-pkg/var/var.h
    1.15        +3  -1      ossp-pkg/var/var.pod
    1.28        +10 -4      ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.52 -r1.53 var.c
  --- ossp-pkg/var/var.c	14 Dec 2001 14:40:28 -0000	1.52
  +++ ossp-pkg/var/var.c	16 Dec 2001 23:40:16 -0000	1.53
  @@ -99,7 +99,8 @@
           "index specification of array variable is incomplete",                  /* VAR_ERR_INCOMPLETE_INDEX_SPEC = -39 */
           "bracket expression in array variable's index is not closed",           /* VAR_ERR_UNCLOSED_BRACKET_IN_INDEX = -40 */
           "division by zero error in index specification",                        /* VAR_ERR_DIVISION_BY_ZERO_IN_INDEX = -41 */
  -        "unterterminated loop construct"                                        /* VAR_ERR_UNTERMINATED_LOOP_CONSTRUCT = -42 */
  +        "unterminated loop construct",                                          /* VAR_ERR_UNTERMINATED_LOOP_CONSTRUCT = -42 */
  +        "invalid character in loop limits"                                      /* VAR_ERR_INVALID_CHAR_IN_LOOP_LIMITS = -43 */
       };
   
       rc = 0 - rc;
  @@ -502,8 +503,8 @@
       const char *p;
   
       for (p = begin;
  -            p != end 
  -         && *p != config->varinit 
  +            p != end
  +         && *p != config->varinit
            && *p != config->enddelim
            && *p != ':'; p++) {
           if (*p == config->escape) {
  @@ -543,7 +544,7 @@
           return VAR_ERR_INCOMPLETE_INDEX_SPEC;
   
       if (*p == '(') {
  -        rc = num_exp(++p, end, current_index, result, failed, 
  +        rc = num_exp(++p, end, current_index, result, failed,
                        rel_lookup_flag, config, nameclass, lookup, lookup_context);
           if (rc < 0)
               return rc;
  @@ -555,11 +556,11 @@
           ++p;
       }
       else if (*p == config->varinit) {
  -        rc = variable(p, end, config, nameclass, lookup, 
  +        rc = variable(p, end, config, nameclass, lookup,
                         lookup_context, 1, &tmp, current_index, rel_lookup_flag);
           if (rc == VAR_ERR_UNDEFINED_VARIABLE) {
               *failed = 1;
  -            rc = variable(p, end, config, nameclass, lookup, 
  +            rc = variable(p, end, config, nameclass, lookup,
                             lookup_context, 0, &tmp, current_index, rel_lookup_flag);
               if (rc < 0)
                   return rc;
  @@ -570,7 +571,7 @@
               if (rc < 0)
                   return rc;
               p += rc;
  -            rc = num_exp(tmp.begin, tmp.end, current_index, result, 
  +            rc = num_exp(tmp.begin, tmp.end, current_index, result,
                            failed, rel_lookup_flag, config, nameclass, lookup, lookup_context);
               tokenbuf_free(&tmp);
               if (rc < 0)
  @@ -622,8 +623,8 @@
       if (begin == end)
           return VAR_ERR_INCOMPLETE_INDEX_SPEC;
   
  -    rc = num_exp_read_operand(p, end, current_index, result, 
  -                              failed, rel_lookup_flag, config, nameclass, 
  +    rc = num_exp_read_operand(p, end, current_index, result,
  +                              failed, rel_lookup_flag, config, nameclass,
                                 lookup, lookup_context);
       if (rc < 0)
           return rc;
  @@ -632,7 +633,7 @@
       while (p != end) {
           if (*p == '+' || *p == '-') {
               operator = *p++;
  -            rc = num_exp(p, end, current_index, &right, failed, 
  +            rc = num_exp(p, end, current_index, &right, failed,
                            rel_lookup_flag, config, nameclass, lookup, lookup_context);
               if (rc < 0)
                   return rc;
  @@ -644,7 +645,7 @@
           }
           else if (*p == '*' || *p == '/' || *p == '%') {
               operator = *p++;
  -            rc = num_exp_read_operand(p, end, current_index, &right, failed, 
  +            rc = num_exp_read_operand(p, end, current_index, &right, failed,
                                         rel_lookup_flag, config, nameclass, lookup, lookup_context);
               if (rc < 0)
                   return rc;
  @@ -747,7 +748,7 @@
       /* If the next token is START-INDEX, read the index specification. */
   
       if (config->startindex && *p == config->startindex) {
  -        rc = num_exp(++p, end, current_index, &idx, &failed, 
  +        rc = num_exp(++p, end, current_index, &idx, &failed,
                        rel_lookup_flag, config, nameclass, lookup, lookup_context);
           if (rc < 0)
               goto error_return;
  @@ -822,11 +823,11 @@
               p++;
               if (!failed)
                   rc = command(p, end, config, nameclass, lookup,
  -                             lookup_context, force_expand, result, 
  +                             lookup_context, force_expand, result,
                                current_index, rel_lookup_flag);
               else
                   rc = command(p, end, config, nameclass, lookup,
  -                             lookup_context, force_expand, &tmp, 
  +                             lookup_context, force_expand, &tmp,
                                current_index, rel_lookup_flag);
               if (rc < 0)
                   goto error_return;
  @@ -1231,7 +1232,7 @@
               else
                   rc = strncmp(p, search->begin,
                                search->end - search->begin);
  -            if (rc != 0) {      
  +            if (rc != 0) {
                   /* no match, copy character */
                   if (!tokenbuf_append(&tmp, p, 1)) {
                       tokenbuf_free(&tmp);
  @@ -1352,7 +1353,7 @@
                       return VAR_ERR_OUT_OF_MEMORY;
                   i--;
               }
  -            i = (width - (data->end - data->begin)) 
  +            i = (width - (data->end - data->begin))
                   % (fill->end - fill->begin);
               if (!tokenbuf_append(data, fill->begin, i))
                   return VAR_ERR_OUT_OF_MEMORY;
  @@ -1369,7 +1370,7 @@
                   }
                   i--;
               }
  -            i = (width - (data->end - data->begin)) 
  +            i = (width - (data->end - data->begin))
                   % (fill->end - fill->begin);
               if (!tokenbuf_append(&result, fill->begin, i)) {
                   tokenbuf_free(&result);
  @@ -1396,7 +1397,7 @@
                   }
                   i--;
               }
  -            i = ((width - (data->end - data->begin)) / 2) 
  +            i = ((width - (data->end - data->begin)) / 2)
                   % (fill->end - fill->begin);
               if (!tokenbuf_append(&result, fill->begin, i)) {
                   tokenbuf_free(&result);
  @@ -1774,7 +1775,7 @@
       struct wrapper_context *wcon = context;
       int rc;
   
  -    rc = (*wcon->lookup)(wcon->context, name, name_len, 
  +    rc = (*wcon->lookup)(wcon->context, name, name_len,
                            idx, data, data_len, buffer_size);
       if (rc == 0) {
           (*wcon->rel_lookup_flag)--;
  @@ -1787,6 +1788,105 @@
           return rc;
   }
   
  +static var_rc_t loop_limits(const char *begin, const char *end,
  +			    const var_config_t *config,
  +                            const char_class_t nameclass,
  +                            var_cb_t lookup, void* lookup_context,
  +                            int* start, int* step, int* stop, int* open_end)
  +    {
  +    const char* p = begin;
  +    int rc;
  +    int failed;
  +    int dummy;
  +
  +    printf("loop_limits() called: '%s'.\n", begin);
  +
  +    if (begin == end)
  +        return 0;
  +
  +    if (*p != config->startdelim)
  +        return 0;
  +    else
  +        ++p;
  +
  +    /* Read start value for the loop. */
  +
  +    failed = 0;
  +    rc = num_exp(p, end, 0, start, &failed, &dummy,
  +                 config, nameclass, lookup, lookup_context);
  +    if (rc == VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC)
  +        *start = 0;          /* use default */
  +    else if (rc < 0)
  +        return rc;
  +    else
  +        p += rc;
  +    if (failed)
  +        return VAR_ERR_UNDEFINED_VARIABLE;
  +
  +    if (*p != ',')
  +        return VAR_ERR_INVALID_CHAR_IN_LOOP_LIMITS;
  +    else
  +        ++p;
  +
  +    /* Read step value for the loop. */
  +
  +    failed = 0;
  +    rc = num_exp(p, end, 0, step, &failed, &dummy,
  +                 config, nameclass, lookup, lookup_context);
  +    if (rc == VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC)
  +        *step = 1;          /* use default */
  +    else if (rc < 0)
  +        return rc;
  +    else
  +        p += rc;
  +    if (failed)
  +        return VAR_ERR_UNDEFINED_VARIABLE;
  +
  +    if (*p != ',')
  +        {
  +        if (*p != config->enddelim)
  +            return VAR_ERR_INVALID_CHAR_IN_LOOP_LIMITS;
  +        else
  +            {
  +            ++p;
  +            *stop = *step;
  +            *step = 1;
  +            if (rc > 0)
  +                *open_end = 0;
  +            else
  +                *open_end = 1;
  +            return p - begin;
  +            }
  +        }
  +    else
  +        ++p;
  +
  +    /* Read stop value for the loop. */
  +
  +    failed = 0;
  +    rc = num_exp(p, end, 0, stop, &failed, &dummy,
  +                 config, nameclass, lookup, lookup_context);
  +    if (rc == VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC)
  +        {
  +        *stop = 0;          /* use default */
  +        *open_end = 1;
  +        }
  +    else if (rc < 0)
  +        return rc;
  +    else
  +        {
  +        *open_end = 0;
  +        p += rc;
  +        }
  +    if (failed)
  +        return VAR_ERR_UNDEFINED_VARIABLE;
  +
  +    if (*p != config->enddelim)
  +        return VAR_ERR_INVALID_CHAR_IN_LOOP_LIMITS;
  +
  +    return ++p - begin;
  +    }
  +
   static var_rc_t input(const char *begin, const char *end,
                         const var_config_t *config,
                         const char_class_t nameclass, var_cb_t lookup,
  @@ -1795,13 +1895,15 @@
                         size_t recursion_level, int *rel_lookup_flag)
   {
       const char *p = begin;
  -    int rc;
  +    int rc, rc2;
       tokenbuf_t result;
  +    int start, step, stop, open_end;
       int i;
       int output_backup;
       struct wrapper_context wcon;
       int my_rel_lookup_flag;
       int original_rel_lookup_state;
  +    int loop_limit_length;
   
       tokenbuf_init(&result);
   
  @@ -1813,14 +1915,23 @@
       do {
           if (begin != end && config->startindex && *begin == config->startindex) {
               original_rel_lookup_state = *rel_lookup_flag;
  +            loop_limit_length = -1;
               wcon.lookup = lookup;
               wcon.context = lookup_context;
               wcon.rel_lookup_flag = rel_lookup_flag;
               begin++;
  -            for (i = 0; i == 0 || *rel_lookup_flag > original_rel_lookup_state; i++) {
  +            start = 0;
  +            step  = 1;
  +            stop  = 0;
  +            open_end = 1;
  +      re_loop:
  +            for (i = start;
  +                 (open_end  && (loop_limit_length < 0 || *rel_lookup_flag > original_rel_lookup_state)) ||
  +                     (!open_end && i <= stop);
  +                 i += step) {
                   *rel_lookup_flag = original_rel_lookup_state;
                   output_backup = output->end - output->begin;
  -                rc = input(begin, end, config, nameclass, &lookup_wrapper, 
  +                rc = input(begin, end, config, nameclass, &lookup_wrapper,
                              &wcon, 1, output, i, recursion_level+1, rel_lookup_flag);
                   if (rc < 0)
                       goto error_return;
  @@ -1828,14 +1939,41 @@
                       rc = VAR_ERR_UNTERMINATED_LOOP_CONSTRUCT;
                       goto error_return;
                   }
  +                if (loop_limit_length < 0)
  +                    {
  +                    rc2 = loop_limits(begin + rc + 1, end, config, nameclass,
  +                                      lookup, lookup_context, &start, &step,
  +                                      &stop, &open_end);
  +                    if (rc2 < 0)
  +                        {
  +                        printf("loop_limits() failed: %d ('%s').\n", rc2, var_strerror(rc2));
  +                        goto error_return;
  +                        }
  +                    else if (rc2 == 0)
  +                        {
  +                        loop_limit_length = 0;
  +                        }
  +                    else if (rc2 > 0)
  +                        {
  +                        printf("Found loop limits: start = %d, step = %d, stop = %d, open_end = %s\n",
  +                               start, step, stop, (open_end) ? "true" : "false");
  +                        loop_limit_length = rc2;
  +                        output->end = output->begin + output_backup;
  +                        goto re_loop;
  +                        }
  +                    }
               }
  -            output->end = output->begin + output_backup;
  +            if (open_end)
  +                output->end = output->begin + output_backup;
  +            else
  +                *rel_lookup_flag = original_rel_lookup_state;
               begin += rc;
               begin++;
  +            begin += loop_limit_length;
               continue;
           }
   
  -        rc = text(begin, end, config->varinit, config->startindex, 
  +        rc = text(begin, end, config->varinit, config->startindex,
                     config->endindex, config->escape);
           if (rc > 0) {
               if (!tokenbuf_append(output, begin, rc)) {
  @@ -1848,7 +1986,7 @@
               goto error_return;
   
           rc = variable(begin, end, config, nameclass, lookup,
  -                      lookup_context, force_expand, &result, 
  +                      lookup_context, force_expand, &result,
                         current_index, rel_lookup_flag);
           if (rc > 0) {
               if (!tokenbuf_append(output, result.begin, result.end - result.begin)) {
  @@ -1942,4 +2080,3 @@
   
       return rc;
   }
  -
  Index: ossp-pkg/var/var.h
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 var.h
  --- ossp-pkg/var/var.h	14 Dec 2001 13:47:01 -0000	1.18
  +++ ossp-pkg/var/var.h	16 Dec 2001 23:40:16 -0000	1.19
  @@ -36,6 +36,7 @@
   
   typedef enum {
       VAR_ERR_CALLBACK = -64,
  +    VAR_ERR_INVALID_CHAR_IN_LOOP_LIMITS = -43,
       VAR_ERR_UNTERMINATED_LOOP_CONSTRUCT = -42,
       VAR_ERR_DIVISION_BY_ZERO_IN_INDEX = -41,
       VAR_ERR_UNCLOSED_BRACKET_IN_INDEX = -40,
  Index: ossp-pkg/var/var.pod
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 var.pod
  --- ossp-pkg/var/var.pod	12 Dec 2001 17:18:55 -0000	1.14
  +++ ossp-pkg/var/var.pod	16 Dec 2001 23:40:16 -0000	1.15
  @@ -616,7 +616,9 @@
   
   =head1 EBNF GRAMMAR OF SUPPORTED EXPRESSIONS
   
  - input      : ( TEXT | variable | START-INDEX input END-INDEX )*
  + input      : ( TEXT | variable | START-INDEX input END-INDEX ( loop-limits )? )*
  +
  + loop-limits: START-DELIM (numexp)? ',' (numexp)? ( ',' (numexp)? )? END-DELIM
   
    variable   : '$' (name|expression)
   
  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 var_test.c
  --- ossp-pkg/var/var_test.c	14 Dec 2001 13:49:40 -0000	1.27
  +++ ossp-pkg/var/var_test.c	16 Dec 2001 23:40:16 -0000	1.28
  @@ -65,7 +65,7 @@
                   printf("Found variable at index %d.\n", i);
                   counter = 1;
                   length = strlen(vars[i].data);
  -                while (   vars[i + counter].data 
  +                while (   vars[i + counter].data
                          && strncmp(varname, vars[i + counter].name, name_len) == 0)
                       counter++;
                   if (counter == 1)
  @@ -134,7 +134,7 @@
           { "${HOME:s/[esO]/_/gi}",         "/h_m_/r_gr___i_n-t__t_"                         },
           { "${OSTYPE:s/^[re]/_/g}",        "_egression-os"                                  },
           { "${EMPTY:s/^[re]/_/g}",         ""                                               },
  -        { "${HOME:s/.*/heinz/}",          "heinz"                                          },
  +        { "${HOME:s/.*\\x{}/heinz/}",     "heinz"                                          },
           { "${HOME:s/e/bla/t}",            "/hombla/regression-tests"                       },
           { "${HOME:s/E/bla/t}",            "/home/regression-tests"                         },
           { "${HOME:s/E/bla/ti}",           "/hombla/regression-tests"                       },
  @@ -173,6 +173,8 @@
           { "${ARRAY[5/(${UNDEFINED})]}",   "${ARRAY[5/(${UNDEFINED})]}"                     },
           { "[${ARRAY[#]}-]",               "entry0-entry1-entry2-entry3-"                   },
           { "[${ARRAY[#+1]}-]",             "entry1-entry2-entry3-"                          },
  +        { "-[${ARRAY[#]}:]{1,$NUMBER}-",  "-entry1:entry2:-"                               },
  +        { "-[${ARRAY[#]}:]{1,3,5}-",      "-entry1::-"                                     },
           {
           "[${ARRAY}:${ARRAY[#]}-]",
           "entry0:entry0-entry0:entry1-entry0:entry2-entry0:entry3-"
  @@ -188,7 +190,11 @@
           {
           "[${HEINZ[#]}: [${ARRAY[#]}${ARRAY[#+1]:+, }]${HEINZ[#+1]:+; }]",
           "heinz0: entry0, entry1, entry2, entry3; heinz1: entry0, entry1, entry2, entry3"
  -        }
  +        },
  +        {
  +        "[${ARRAY[#]}:[${ARRAY[#]},]{1,2,} ]{0,2,}",
  +        "entry0:entry1,entry3, entry2:entry1,entry3, "
  +        },
       };
       char *tmp;
       size_t tmp_len;
  @@ -220,7 +226,7 @@
   #ifdef DEBUG
           printf("Test case #%02d: Expanded output is '%s'.\n", i, tmp);
   #endif
  -        if (   tmp_len != strlen(tests[i].expected) 
  +        if (   tmp_len != strlen(tests[i].expected)
               || tmp == NULL
               || memcmp(tests[i].expected, tmp, tmp_len) != 0) {
               printf("Test case #%d: Expected result '%s' but got '%s'.\n",

From ossp-cvs-owner@ossp.org  Mon Dec 17 10:00:30 2001
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 869C876448; Mon, 17 Dec 2001 10:00:30 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Message-Id: <20011217090030.869C876448@mail.ossp.org>
Date: Mon, 17 Dec 2001 10:00:30 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   17-Dec-2001 10:00:30
  Branch: HEAD                             Handle: 2001121709002900

  Modified files:
    ossp-pkg/var            var.c

  Log:
    remove debugging messages

  Summary:
    Revision    Changes     Path
    1.54        +0  -5      ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.53 -r1.54 var.c
  --- ossp-pkg/var/var.c	16 Dec 2001 23:40:16 -0000	1.53
  +++ ossp-pkg/var/var.c	17 Dec 2001 09:00:29 -0000	1.54
  @@ -1799,8 +1799,6 @@
       int failed;
       int dummy;
   
  -    printf("loop_limits() called: '%s'.\n", begin);
  -
       if (begin == end)
           return 0;
   
  @@ -1946,7 +1944,6 @@
                                         &stop, &open_end);
                       if (rc2 < 0)
                           {
  -                        printf("loop_limits() failed: %d ('%s').\n", rc2, var_strerror(rc2));
                           goto error_return;
                           }
                       else if (rc2 == 0)
  @@ -1955,8 +1952,6 @@
                           }
                       else if (rc2 > 0)
                           {
  -                        printf("Found loop limits: start = %d, step = %d, stop = %d, open_end = %s\n",
  -                               start, step, stop, (open_end) ? "true" : "false");
                           loop_limit_length = rc2;
                           output->end = output->begin + output_backup;
                           goto re_loop;

From ossp-cvs-owner@ossp.org  Mon Dec 17 10:03:58 2001
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C7A4776448; Mon, 17 Dec 2001 10:03:58 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Message-Id: <20011217090358.C7A4776448@mail.ossp.org>
Date: Mon, 17 Dec 2001 10:03:58 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   17-Dec-2001 10:03:58
  Branch: HEAD                             Handle: 2001121709035800

  Modified files:
    ossp-pkg/var            var.c

  Log:
    silence gcc

  Summary:
    Revision    Changes     Path
    1.55        +2  -0      ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.54 -r1.55 var.c
  --- ossp-pkg/var/var.c	17 Dec 2001 09:00:29 -0000	1.54
  +++ ossp-pkg/var/var.c	17 Dec 2001 09:03:58 -0000	1.55
  @@ -1922,6 +1922,8 @@
               step  = 1;
               stop  = 0;
               open_end = 1;
  +            rc = 0;
  +            output_backup = 0;
         re_loop:
               for (i = start;
                    (open_end  && (loop_limit_length < 0 || *rel_lookup_flag > original_rel_lookup_state)) ||

From ossp-cvs-owner@ossp.org  Mon Dec 17 11:29:44 2001
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9331876448; Mon, 17 Dec 2001 11:29:44 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c var.h var.pod var_test.c
Message-Id: <20011217102944.9331876448@mail.ossp.org>
Date: Mon, 17 Dec 2001 11:29:44 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   17-Dec-2001 11:29:44
  Branch: HEAD                             Handle: 2001121710294300

  Modified files:
    ossp-pkg/var            var.c var.h var.pod var_test.c

  Log:
    Finally adjust return code semantics of var_cb_t to use var_rc_t only.

  Summary:
    Revision    Changes     Path
    1.56        +11 -15     ossp-pkg/var/var.c
    1.20        +1  -1      ossp-pkg/var/var.h
    1.16        +36 -49     ossp-pkg/var/var.pod
    1.29        +6  -4      ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.55 -r1.56 var.c
  --- ossp-pkg/var/var.c	17 Dec 2001 09:03:58 -0000	1.55
  +++ ossp-pkg/var/var.c	17 Dec 2001 10:29:43 -0000	1.56
  @@ -788,15 +788,11 @@
       else {
           rc = (*lookup) (lookup_context, name.begin, name.end - name.begin, idx,
                           &data, &len, &buffer_size);
  -        if (rc < 0)
  -            goto error_return;
  -        if (rc == 0) {
  +        if (rc == VAR_ERR_UNDEFINED_VARIABLE) {
               /* The variable is undefined. What we'll do now depends on the
                  force_expand flag. */
  -            if (force_expand) {
  -                rc = VAR_ERR_UNDEFINED_VARIABLE;
  +            if (force_expand)
                   goto error_return;
  -            }
   
               /* Initialize result to point back to the original text in
                  the buffer. */
  @@ -805,6 +801,9 @@
               result->buffer_size = 0;
               failed = 1;
           }
  +        else if (rc < 0 /* != VAR_OK */) {
  +            goto error_return;
  +        }
           else {
               /* The preliminary result is the contents of the variable.
                  This may be modified by the commands that may follow. */
  @@ -892,16 +891,14 @@
           return rc;
       if (rc > 0) {
           rc2 = (*lookup)(lookup_context, p, rc, 0, &data, &len, &buffer_size);
  -        if (rc2 < 0)
  -            return rc2;
  -        if (rc2 == 0) {
  -            if (force_expand)
  -                return VAR_ERR_UNDEFINED_VARIABLE;
  +        if (rc2 == VAR_ERR_UNDEFINED_VARIABLE && !force_expand) {
               result->begin = begin;
               result->end = begin + 1 + rc;
               result->buffer_size = 0;
               return 1 + rc;
           }
  +        if (rc2 < 0 /* != VAR_OK */)
  +            return rc2;
           result->begin = data;
           result->end = data + len;
           result->buffer_size = buffer_size;
  @@ -1777,15 +1774,14 @@
   
       rc = (*wcon->lookup)(wcon->context, name, name_len,
                            idx, data, data_len, buffer_size);
  -    if (rc == 0) {
  +    if (rc == VAR_ERR_UNDEFINED_VARIABLE) {
           (*wcon->rel_lookup_flag)--;
           *data = buf;
           *data_len = 0;
           *buffer_size = 0;
  -        return 1;
  +        return VAR_OK;
       }
  -    else
  -        return rc;
  +    return rc;
   }
   
   static var_rc_t loop_limits(const char *begin, const char *end,
  Index: ossp-pkg/var/var.h
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 var.h
  --- ossp-pkg/var/var.h	16 Dec 2001 23:40:16 -0000	1.19
  +++ ossp-pkg/var/var.h	17 Dec 2001 10:29:43 -0000	1.20
  @@ -88,7 +88,7 @@
   
   /* Prototype for the lookup callback used in var_expand(). */
   
  -typedef int (*var_cb_t) (void *context,
  +typedef var_rc_t (*var_cb_t) (void *context,
       const char *varname, size_t name_len, int idx,
       const char **data, size_t *data_len,
       size_t *buffer_size);
  Index: ossp-pkg/var/var.pod
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 var.pod
  --- ossp-pkg/var/var.pod	16 Dec 2001 23:40:16 -0000	1.15
  +++ ossp-pkg/var/var.pod	17 Dec 2001 10:29:43 -0000	1.16
  @@ -311,10 +311,10 @@
   variable up itself. Instead, it relies on a caller-supplied callback
   function, which adheres to the var_cb_t function interface:
   
  -    int lookup(void *context,
  -               const char *varname, size_t name_len, int index,
  -               const char **data, size_t *data_len,
  -               size_t *buffer_size);
  + var_rc_t lookup(void *context,
  +                 const char *varname, size_t name_len, int index,
  +                 const char **data, size_t *data_len,
  +                 size_t *buffer_size);
   
   This function will be called by var_expand() whenever it has to
   retrieve the contents of, say, the variable $name, using the following
  @@ -379,38 +379,30 @@
   =back
   
   The return code of the lookup function is interpreted by var_expand()
  -accordin to the following convention: Any return code greater than
  -zero means success, that is, the contents of the variable has been
  -looked-up successfully and the "data", "data_len", and "buffer_size"
  -locations have been filled with appropriate values. A return code of
  -zero (0) means that the variable was undefined and its contents
  -therefore could not be looked-up. A return code of less than zero
  -means that the lookup failed for some other reason, such as a system
  -error or lack of resources. In the latter two cases, the contents of
  -"data", "data_len" and "buffer_size" is assumed to be undefined.
  -Hence, var_expand() will not free(3) any possibly allocated buffers,
  -the callback must take care of that itself.
  -
  -If a callback returns zero -- meaning the variable is undefined --,
  -the behavior of var_expand() depends on the setting of the
  -"force_expand" parameter. If force-expand mode  has been set,
  -var_expand() will fail with a VAR_ERR_UNDEFINED_VARIABLE error. If
  -force-expand mode has not been set, var_expand() will copy the
  -expression that caused the lookup to fail verbatimly into the output
  -buffer so that an additional expanding pass may expand it later.
  -
  -If the callback returns an error -- meaning a return code less than
  -zero --, var_expand() will fail with the return code it got from the
  -callback. Callback implementors are encouraged to re-use the error
  -codes defined in var.h whereever possible. An example of an error code
  -a callback might want to reuse is VAR_ERR_OUT_OF_MEMORY. If the cause
  -for the error can not be denoted by an error code defined in var.h,
  -callback implementors should use the error code VAR_ERR_CALLBACK,
  -which is currently defined to -64. It is guaranteed that no error code
  -smaller than VAR_ERR_CALLBACK is ever used by var_expand() or
  -VAR_UNESCAPE(), so if the callback implementor wishes to distinguish
  -between different reasons for failure, he can define his own set of
  -errors
  +according to the following convention: VAR_OK means success, that
  +is, the contents of the variable has been looked-up successfully and
  +the "data", "data_len", and "buffer_size" locations have been filled
  +with appropriate values. A return code VAR_ERR_XXX means that the lookup
  +failed, such as a system error or lack of resources. In the latter two
  +cases, the contents of "data", "data_len" and "buffer_size" is assumed
  +to be undefined. Hence, var_expand() will not free(3) any possibly
  +allocated buffers, the callback must take care of that itself.
  +
  +If a callback returns the special VAR_ERR_UNDEFINED_VARIABLE return
  +code, the behaviour of var_expand() depends on the setting of
  +the "force_expand" parameter. If force-expand mode has been set,
  +var_expand() will fail with this error. If force-expand mode has
  +not been set, var_expand() will copy the expression that caused the
  +lookup to fail verbatimly into the output buffer so that an additional
  +expanding pass may expand it later.
  +
  +If the callback returns an VAR_ERR_XXX, var_expand() will fail with the return
  +code it got from the callback.  If the cause for the error can not be denoted
  +by an error code defined in var.h, callback implementors should use the error
  +code VAR_ERR_CALLBACK, which is currently defined to -64. It is guaranteed
  +that no error code smaller than VAR_ERR_CALLBACK is ever used by var_expand()
  +or VAR_UNESCAPE(), so if the callback implementor wishes to distinguish
  +between different reasons for failure, he can define his own set of errors
   
       typedef enum {
           LOOKUP_ERROR_ONE   = -3,
  @@ -424,30 +416,25 @@
   the following expamle that accesses the system environment via
   getenv(3) to lookup variables and to return them to var_expand():
   
  -    int env_lookup(void *context,
  -        const char *varname, size_t name_len, int index,
  +    var_rc_t env_lookup(
  +        void *context,
  +        const char *varname, size_t name_len, int idx,
           const char **data, size_t *data_len,
           size_t *buffer_size)
       {
           char tmp[256];
   
  -        if (index != 0)
  +        if (idx != 0)
               return VAR_ERR_ARRAY_LOOKUPS_ARE_UNSUPPORTED;
  -
  -        if (name_len > sizeof(tmp) - 1) {
  -        /* Callback can't expand variable names longer than
  -           sizeof(tmp) characters. */
  -
  +        if (name_len > sizeof(tmp) - 1)
               return VAR_ERR_CALLBACK;
  -        }
           memcpy(tmp, varname, name_len);
           tmp[name_len] = '\0';
  -        *data = getenv(tmp);
  -        if (*data == NULL)
  -            return 0;
  +        if ((*data = getenv(tmp)) == NULL)
  +            return VAR_ERR_UNDEFINED_VARIABLE;
           *data_len = strlen(*data);
           *buffer_size = 0;
  -        return 1;
  +        return VAR_OK;
       }
   
   =head1 SUPPORTED NAMED CHARACTERS
  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 var_test.c
  --- ossp-pkg/var/var_test.c	16 Dec 2001 23:40:16 -0000	1.28
  +++ ossp-pkg/var/var_test.c	17 Dec 2001 10:29:43 -0000	1.29
  @@ -39,7 +39,7 @@
       const char *data;
   };
   
  -static int var_lookup(
  +static var_rc_t var_lookup(
       void *context,
       const char *varname, size_t name_len, int idx,
       const char **data, size_t *data_len,
  @@ -55,14 +55,16 @@
                   *data = vars[i].data;
                   *data_len = strlen(*data);
                   *buffer_size = 0;
  -                return 1;
  +                return VAR_OK;
               }
           }
       }
       else {
           for (i = 0; vars[i].name; ++i) {
               if (strncmp(varname, vars[i].name, name_len) == 0) {
  +#ifdef DEBUG
                   printf("Found variable at index %d.\n", i);
  +#endif
                   counter = 1;
                   length = strlen(vars[i].data);
                   while (   vars[i + counter].data
  @@ -75,11 +77,11 @@
                   *data = buf;
                   *data_len = strlen(buf);
                   *buffer_size = 0;
  -                return 1;
  +                return VAR_OK;
               }
           }
       }
  -    return 0;
  +    return VAR_ERR_UNDEFINED_VARIABLE;
   }
   
   struct test_case {

From ossp-cvs-owner@ossp.org  Mon Dec 17 13:57:47 2001
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B968E76448; Mon, 17 Dec 2001 13:57:46 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c var.pod
Message-Id: <20011217125746.B968E76448@mail.ossp.org>
Date: Mon, 17 Dec 2001 13:57:46 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   17-Dec-2001 13:57:46
  Branch: HEAD                             Handle: 2001121712574600

  Modified files:
    ossp-pkg/var            var.c var.pod

  Log:
    allow result_len to be NULL

  Summary:
    Revision    Changes     Path
    1.57        +5  -3      ossp-pkg/var/var.c
    1.17        +2  -1      ossp-pkg/var/var.pod
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.56 -r1.57 var.c
  --- ossp-pkg/var/var.c	17 Dec 2001 10:29:43 -0000	1.56
  +++ ossp-pkg/var/var.c	17 Dec 2001 12:57:46 -0000	1.57
  @@ -2020,7 +2020,7 @@
   
       /* Argument sanity checks */
       if (input_buf == NULL || input_len == 0 ||
  -        result == NULL || result_len == NULL ||
  +        result == NULL ||
           lookup == NULL)
           return VAR_ERR_INVALID_ARGUMENT;
   
  @@ -2060,7 +2060,8 @@
   
           /* Provide results */
           *result = (char *)output.begin;
  -        *result_len = output.end - output.begin;
  +        if (result_len != NULL)
  +            *result_len = output.end - output.begin;
   
           /* canonify all positive answers */
           rc = VAR_OK;
  @@ -2068,7 +2069,8 @@
       else {
           /* Provide error results */
           *result = (char *)input_buf;
  -        *result_len = output.end - output.begin; /* FIXME */
  +        if (result_len != NULL)
  +            *result_len = output.end - output.begin;
       }
   
       return rc;
  Index: ossp-pkg/var/var.pod
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 var.pod
  --- ossp-pkg/var/var.pod	17 Dec 2001 10:29:43 -0000	1.16
  +++ ossp-pkg/var/var.pod	17 Dec 2001 12:57:46 -0000	1.17
  @@ -180,7 +180,8 @@
   buffer will be stored. If var_expand() fails with an error -- with the
   exception of VAR_ERR_INVALID_ARGUMENT and VAR_ERR_OUT_OF_MEMORY --,
   "result_len" will contain the number of characters that have been
  -consumed from "input" before the error occured.
  +consumed from "input" before the error occured. This argument can be
  +NULL if the application is not interested in this information.
   
   =item var_cb_t lookup
   

From ossp-cvs-owner@ossp.org  Mon Dec 17 13:58:19 2001
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1F982764B0; Mon, 17 Dec 2001 13:58:19 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.c
Message-Id: <20011217125819.1F982764B0@mail.ossp.org>
Date: Mon, 17 Dec 2001 13:58:19 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   17-Dec-2001 13:58:19
  Branch: HEAD                             Handle: 2001121712581800

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.c

  Log:
    First cut in integrating OSSP var into OSSP lmtp2nntp.

  Summary:
    Revision    Changes     Path
    1.100       +80 -1      ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.c
  ============================================================
  $ cvs diff -u -r1.99 -r1.100 lmtp2nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.c	11 Dec 2001 11:53:11 -0000	1.99
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.c	17 Dec 2001 12:58:18 -0000	1.100
  @@ -43,6 +43,7 @@
   #include "argz.h"
   #include "shpat_match.h"
   #include "l2.h"
  +#include "var.h"
   #include "daemon.h"
   
   /* library version check (compile-time) */
  @@ -183,6 +184,75 @@
       struct utsname  uname;
   } lmtp2nntp_t;
   
  +static var_config_t ctx_lookup_cfg = {
  +    '$',          /* varinit       */ 
  +    '{',          /* startdelim    */ 
  +    '}',          /* enddelim      */ 
  +    '[',          /* startindex    */ 
  +    ']',          /* endindex      */ 
  +    '#',          /* current_index */ 
  +    '\\',         /* escape        */ 
  +    "a-zA-Z0-9_.-" /* namechars     */ 
  +};
  +
  +static var_rc_t ctx_lookup(
  +    void *_ctx, 
  +    const char *var_ptr, size_t var_len, int var_idx,
  +    const char **val_ptr, size_t *val_len, size_t *val_size)
  +{
  +    lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx;
  +    const char *name;
  +    size_t len;
  +    size_t n;
  +    char *cp;
  +    var_rc_t rc;
  +
  +    log2(ctx, DEBUG, "lookup variable \"%s\" (%d)", 
  +         var_ptr /* FIXME: NUL-termination? */, var_len);
  +    rc = VAR_ERR_UNDEFINED_VARIABLE;
  +    if (strncasecmp(var_ptr, "lmtp2nntp.version", var_len) == 0) {
  +    }
  +    else if (strncasecmp(var_ptr, "os.name", var_len) == 0) {
  +    }
  +    else if (strncasecmp(var_ptr, "os.version", var_len) == 0) {
  +    }
  +    else if (var_len > 8 && strncasecmp(var_ptr, "msg.hdr.", 8) == 0) {
  +        name = var_ptr + 8;
  +        len = strlen(name);
  +        if (ctx == NULL)
  +            return VAR_ERR_UNDEFINED_VARIABLE;
  +        if (ctx->msg == NULL)
  +            return VAR_ERR_UNDEFINED_VARIABLE;
  +        if (ctx->msg->azHeaders == NULL)
  +            return VAR_ERR_UNDEFINED_VARIABLE;
  +        cp = NULL;
  +        while ((cp = argz_next(ctx->msg->azHeaders, ctx->msg->asHeaders, cp)) != NULL) {
  +            char *cpVar, *cpVal;
  +            int nVar, nVal;
  +            cpVar = cp;
  +            nVar = strlen(cpVar);
  +            if ((cp = argz_next(ctx->msg->azHeaders, ctx->msg->asHeaders, cp)) == NULL)
  +                break;
  +            cpVal = cp;
  +            nVal = strlen(cpVal);
  +            if (len == (nVar-1) && strncasecmp(cpVar, name, len) == 0 && cpVar[len] == ':') {
  +                *val_ptr = cpVal;
  +                *val_len = nVal;
  +                *val_size = 0;
  +                rc = VAR_OK;
  +            }
  +        }
  +    }
  +    if (rc == VAR_OK)
  +        log4(ctx, DEBUG, "lookup variable \"%s\" (%d) ok: result is \"%s\" (%d)", 
  +             var_ptr /* FIXME: NUL-termination? */, var_len, *val_ptr, *val_len);
  +    else
  +        log3(ctx, DEBUG, "lookup variable \"%s\" (%d) failed: %s", 
  +             var_ptr /* FIXME: NUL-termination? */, var_len, var_strerror(rc));
  +    return rc;
  +}
  +
  +
   static void lmtp_gfs_ns(struct ns *);
   static void lmtp_gfs_lhlo(lmtp2nntp_t *);
   static void lmtp_gfs_rset(lmtp2nntp_t *);
  @@ -2061,7 +2131,16 @@
       if ((ctx->asHeaderValuePairs >= 1) && ((ctx->asHeaderValuePairs & 1) == 0)) {
           cp = NULL;
           while ((cp = argz_next(ctx->azHeaderValuePairs, ctx->asHeaderValuePairs, cp)) != NULL) {
  -            argz_add(&ctx->msg->azHeaders, &ctx->msg->asHeaders, cp);
  +            var_rc_t var_rc;
  +            char *res_ptr;
  +            if ((var_rc = var_expand(cp, strlen(cp), &res_ptr, NULL,
  +                                     ctx_lookup, ctx, &ctx_lookup_cfg, TRUE)) != VAR_OK) {
  +                log2(ctx, ERROR, "expansion of '%s' failed: %s", cp, var_strerror(var_rc));
  +                continue;
  +            }
  +            log1(ctx, DEBUG, "adding expanded header: \"%s\"", res_ptr);
  +            argz_add(&ctx->msg->azHeaders, &ctx->msg->asHeaders, res_ptr);
  +            free(res_ptr);
           }
       }
   

From ossp-cvs-owner@ossp.org  Fri Dec 21 11:50:02 2001
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2E084764B0; Fri, 21 Dec 2001 11:50:02 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ut_pcre.c l2_ut_pcre.h
Message-Id: <20011221105002.2E084764B0@mail.ossp.org>
Date: Fri, 21 Dec 2001 11:50:02 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   21-Dec-2001 11:50:01
  Branch: HEAD                             Handle: 2001122110500100

  Modified files:
    ossp-pkg/l2             l2_ut_pcre.c l2_ut_pcre.h

  Log:
    upgrade to PCRE 3.8

  Summary:
    Revision    Changes     Path
    1.5         +11 -11     ossp-pkg/l2/l2_ut_pcre.c
    1.5         +3  -3      ossp-pkg/l2/l2_ut_pcre.h
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ut_pcre.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 l2_ut_pcre.c
  --- ossp-pkg/l2/l2_ut_pcre.c	24 Nov 2001 08:13:25 -0000	1.4
  +++ ossp-pkg/l2/l2_ut_pcre.c	21 Dec 2001 10:50:01 -0000	1.5
  @@ -6,7 +6,7 @@
    *  DO NOT EDIT THIS FILE, IT WAS AUTOMATICALLY GENERATED!
    *
    *  This is an automatically generated, extremely stripped down
  - *  version of the PCRE 3.7 library from the Philip Hazel.
  + *  version of the PCRE 3.8 library from the Philip Hazel.
    *  This version is still distributed under the same original PCRE
    *  Open Source license, but Philip Hazel is no longer responsible
    *  for this version.
  @@ -392,12 +392,12 @@
     if (md->utf8 && (c & 0xc0) == 0xc0) \
       { \
       int a = utf8_table4[c & 0x3f];   \
  -    int s = 6 - a;                    \
  -    c &= utf8_table3[a];             \
  +    int s = 6*a; \
  +    c = (c & utf8_table3[a]) << s; \
       while (a-- > 0) \
         { \
  +      s -= 6; \
         c |= (*eptr++ & 0x3f) << s; \
  -      s += 6; \
         } \
       }
   
  @@ -408,12 +408,12 @@
       { \
       int i; \
       int a = utf8_table4[c & 0x3f];   \
  -    int s = 6 - a;                    \
  -    c &= utf8_table3[a];             \
  +    int s = 6*a; \
  +    c = (c & utf8_table3[a]) << s; \
       for (i = 1; i <= a; i++) \
         { \
  +      s -= 6; \
         c |= (eptr[i] & 0x3f) << s; \
  -      s += 6; \
         } \
       len += a; \
       }
  @@ -445,12 +445,12 @@
   	for (i = 0; i < sizeof (utf8_table1) / sizeof (int); i++)
   		if (cvalue <= utf8_table1[i])
   			break;
  -	*buffer++ = utf8_table2[i] | (cvalue & utf8_table3[i]);
  -	cvalue >>= 6 - i;
  -	for (j = 0; j < i; j++) {
  -		*buffer++ = 0x80 | (cvalue & 0x3f);
  +	buffer += i;
  +	for (j = i; j > 0; j--) {
  +		*buffer-- = 0x80 | (cvalue & 0x3f);
   		cvalue >>= 6;
   	}
  +	*buffer = utf8_table2[i] | cvalue;
   	return i + 1;
   }
   #endif
  Index: ossp-pkg/l2/l2_ut_pcre.h
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 l2_ut_pcre.h
  --- ossp-pkg/l2/l2_ut_pcre.h	24 Nov 2001 08:13:25 -0000	1.4
  +++ ossp-pkg/l2/l2_ut_pcre.h	21 Dec 2001 10:50:01 -0000	1.5
  @@ -6,7 +6,7 @@
    *  DO NOT EDIT THIS FILE, IT WAS AUTOMATICALLY GENERATED!
    *
    *  This is an automatically generated, extremely stripped down
  - *  version of the PCRE 3.7 library from the Philip Hazel.
  + *  version of the PCRE 3.8 library from the Philip Hazel.
    *  This version is still distributed under the same original PCRE
    *  Open Source license, but Philip Hazel is no longer responsible
    *  for this version.
  @@ -48,8 +48,8 @@
   #define PCRE_PREFIX l2_util_
   
   #define PCRE_MAJOR          3
  -#define PCRE_MINOR          7
  -#define PCRE_DATE           29-Oct-2001
  +#define PCRE_MINOR          8
  +#define PCRE_DATE           18-Dec-2001
   
   #ifdef PCRE_PREFIX
   #if defined(__STDC__) || defined(__cplusplus)

From ossp-cvs-owner@ossp.org  Sat Dec 22 22:51:57 2001
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3A87E76496; Sat, 22 Dec 2001 22:51:57 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 Makefile.in aclocal.m4 configure.ac l2++.cc l2...
Message-Id: <20011222215157.3A87E76496@mail.ossp.org>
Date: Sat, 22 Dec 2001 22:51:57 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   22-Dec-2001 22:51:57
  Branch: HEAD                             Handle: 197001010100001009054316

  Modified files:
    ossp-pkg/l2             Makefile.in aclocal.m4 configure.ac l2-config.in
                            l2-config.pod
  Removed files:
    ossp-pkg/l2             l2++.cc l2++.h l2++.pod l2_test++.cc

  Log:
    Remove all half-done C++ things. Because in the near future we neither
    will have time to finish this nor do we really want it to be finished.
    So kick out all of this stuff. If we later want to add real C++ support,
    we can easily apply this again.

  Summary:
    Revision    Changes     Path
    1.38        +6  -34     ossp-pkg/l2/Makefile.in
    1.9         +0  -4      ossp-pkg/l2/aclocal.m4
    1.16        +0  -29     ossp-pkg/l2/configure.ac
    NONE        +0  -33     ossp-pkg/l2/l2++.cc
    NONE        +0  -34     ossp-pkg/l2/l2++.h
    NONE        +0  -53     ossp-pkg/l2/l2++.pod
    1.4         +1  -5      ossp-pkg/l2/l2-config.in
    1.4         +0  -7      ossp-pkg/l2/l2-config.pod
    NONE        +0  -36     ossp-pkg/l2/l2_test++.cc
  ____________________________________________________________________________

  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.37 -r1.38 Makefile.in
  --- ossp-pkg/l2/Makefile.in	10 Nov 2001 14:01:47 -0000	1.37
  +++ ossp-pkg/l2/Makefile.in	22 Dec 2001 21:51:56 -0000	1.38
  @@ -42,9 +42,7 @@
   
   #   build tools
   CC          = @CC@
  -CXX         = @CXX@
   CFLAGS      = @CFLAGS@ -I.
  -CXXFLAGS    = @CXXFLAGS@ -I.
   LDFLAGS     = @LDFLAGS@ -L.
   LIBS        = @LIBS@
   AR          = @AR@
  @@ -59,9 +57,9 @@
   LIBTOOL     = ./libtool
   
   TARGET       = $(TARGET_LIBS) $(TARGET_MANS) $(TARGET_PROGS)
  -TARGET_LIBS  = libl2.la @LIBL2XX_LA@
  -TARGET_MANS  = l2tool.1 l2-config.1 l2.3 @L2XX_3@
  -TARGET_PROGS = l2tool l2_test @L2_TESTXX@
  +TARGET_LIBS  = libl2.la
  +TARGET_MANS  = l2tool.1 l2-config.1 l2.3
  +TARGET_PROGS = l2tool l2_test
   
   #   list of library object files
   OBJS = \
  @@ -129,12 +127,8 @@
   .SUFFIXES: .c .cc .o .lo
   .c.o:
   	$(CC) -c $(CPPFLAGS) $(CFLAGS) $<
  -.cc.o:
  -	$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $<
   .c.lo:
   	$(LIBTOOL) --mode=compile --quiet $(CC) -c $(CPPFLAGS) $(CFLAGS) $<
  -.cc.lo:
  -	$(LIBTOOL) --mode=compile --quiet $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $<
   
   #   default target
   all: $(TARGET)
  @@ -143,9 +137,6 @@
   libl2.la: $(OBJS)
   	$(LIBTOOL) --mode=link --quiet $(CC) -o libl2.la $(OBJS) -rpath $(libdir) \
   	    -version-info `$(SHTOOL) version -l c -d libtool l2_version.c`
  -libl2++.la: $(OBJS) l2++.lo
  -	$(LIBTOOL) --mode=link --quiet $(CC) -o libl2++.la $(OBJS) l2++.lo -rpath $(libdir) \
  -	    -version-info `$(SHTOOL) version -l c -d libtool l2_version.c`
   
   #   build regex library
   l2_ut_pcre.lo: l2_ut_pcre.tab l2_ut_pcre.c
  @@ -167,8 +158,6 @@
   	$(LIBTOOL) --mode=link --quiet $(CC) $(LDFLAGS) -o l2tool l2tool.o libl2.la $(LIBS)
   l2_test: l2_test.o libl2.la
   	$(LIBTOOL) --mode=link --quiet $(CC) $(LDFLAGS) -o l2_test l2_test.o libl2.la $(LIBS)
  -l2_test++: l2_test++.o libl2++.la
  -	$(LIBTOOL) --mode=link --quiet $(CC) $(LDFLAGS) -o l2_test++ l2_test++.o libl2++.la $(LIBS)
   l2_sockmon: l2_sockmon.o
   	$(LIBTOOL) --mode=link --quiet $(CC) $(LDFLAGS) -o l2_sockmon l2_sockmon.o $(LIBS)
   
  @@ -185,22 +174,15 @@
   	BASENAME="l2"; SEC=3; \
   	NAME="L2"; ONELINE="Logging Library"; \
   	$(_MANPAGE)
  -l2++.3: l2++.pod l2_version.c
  -	BASENAME="l2++"; SEC=3; \
  -	NAME="L2"; ONELINE="Logging Library (C++)"; \
  -	$(_MANPAGE)
   
   #   (minimalistic) test suite
   check: test
  -test: all test-c @TEST_CXX@
  -test-c:
  +test: all
   	$(LIBTOOL) --mode=execute ./l2_test
  -test-cxx:
  -	$(LIBTOOL) --mode=execute ./l2_test++
   
   #   perform standard installation procedure
   install: all
  -	$(MAKE) $(MFLAGS) install-std install-c @INSTALL_CXX@
  +	$(MAKE) $(MFLAGS) install-std install-c
   install-std:
   	$(SHTOOL) mkdir -p -f -m 755 $(DESTDIR)$(bindir)
   	$(SHTOOL) mkdir -p -f -m 755 $(DESTDIR)$(includedir)
  @@ -216,19 +198,10 @@
   	$(SHTOOL) install -c -m 644 l2.h $(DESTDIR)$(includedir)/l2.h
   	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 \
   	    libl2.la $(DESTDIR)$(libdir)/libl2.la
  -install-cxx:
  -	$(SHTOOL) install -c -m 644 l2++.3 $(DESTDIR)$(mandir)/man3/l2++.3
  -	$(SHTOOL) install -c -m 644 l2++.h $(DESTDIR)$(includedir)/l2++.h
  -	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 \
  -	    libl2++.la $(DESTDIR)$(libdir)/libl2++.la
   
   #   perform standard uninstallation procedure
   uninstall:
  -	$(MAKE) $(MFLAGS) @UNINSTALL_CXX@ uninstall-c uninstall-std
  -uninstall-cxx:
  -	@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libl2++.la
  -	$(RM) $(DESTDIR)$(includedir)/l2++.h
  -	$(RM) $(DESTDIR)$(mandir)/man3/l2++.3
  +	$(MAKE) $(MFLAGS) uninstall-c uninstall-std
   uninstall-c:
   	@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libl2.la
   	$(RM) $(DESTDIR)$(includedir)/l2.h
  @@ -276,7 +249,6 @@
   	$(RM) l2-config.1
   	$(RM) l2_config.h.in
   	$(RM) l2.3
  -	$(RM) l2++.3
   	$(RM) l2_spec_scan.c
   	$(RM) l2_spec_parse.c l2_spec_parse.h
   
  Index: ossp-pkg/l2/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 aclocal.m4
  --- ossp-pkg/l2/aclocal.m4	8 Nov 2001 20:28:22 -0000	1.8
  +++ ossp-pkg/l2/aclocal.m4	22 Dec 2001 21:51:56 -0000	1.9
  @@ -165,10 +165,6 @@
       *-g* ) CFLAGS=`echo "$CFLAGS" |\
                      sed -e 's/ -g / /g' -e 's/ -g$//' -e 's/^-g //g' -e 's/^-g$//'` ;;
   esac
  -case "$CXXFLAGS" in
  -    *-g* ) CXXFLAGS=`echo "$CXXFLAGS" |\
  -                     sed -e 's/ -g / /g' -e 's/ -g$//' -e 's/^-g //g' -e 's/^-g$//'` ;;
  -esac
   msg=disabled
   ])dnl
   AC_MSG_CHECKING(for compilation debug mode)
  Index: ossp-pkg/l2/configure.ac
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 configure.ac
  --- ossp-pkg/l2/configure.ac	8 Nov 2001 20:28:22 -0000	1.15
  +++ ossp-pkg/l2/configure.ac	22 Dec 2001 21:51:56 -0000	1.16
  @@ -40,37 +40,8 @@
   AC_PREFIX_DEFAULT(/usr/local)
   AC_PLATFORM(PLATFORM)
   
  -AC_MSG_CHECKING(whether to build C++ library)
  -LIBL2XX_LA=""
  -L2_TESTXX=""
  -L2XX_3=""
  -TEST_CXX=""
  -INSTALL_CXX=""
  -UNINSTALL_CXX=""
  -AC_ARG_WITH(cxx,dnl
  -[  --with-cxx              build C++ library (default=no)],[
  -    LIBL2XX_LA="libl2++.la"
  -    L2_TESTXX="l2_test++"
  -    L2XX_3="l2++.3"
  -    TEST_CXX=test-cxx
  -    INSTALL_CXX=install-cxx
  -    UNINSTALL_CXX=uninstall-cxx
  -],[
  -    with_cxx=no
  -])dnl
  -AC_MSG_RESULT([$with_cxx])
  -AC_SUBST(LIBL2XX_LA)
  -AC_SUBST(L2_TESTXX)
  -AC_SUBST(L2XX_3)
  -AC_SUBST(TEST_CXX)
  -AC_SUBST(INSTALL_CXX)
  -AC_SUBST(UNINSTALL_CXX)
  -
   AC_SET_MAKE
   AC_PROG_CC
  -if test ".$with_cxx" = .yes; then
  -    AC_PROG_CXX
  -fi
   AC_PROG_CPP
   AC_CHECK_DEBUGGING
   AC_CHECK_MAINTAINER
        Index: ossp-pkg/l2/l2-config.in
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 l2-config.in
  --- ossp-pkg/l2/l2-config.in	15 Aug 2001 10:36:03 -0000	1.3
  +++ ossp-pkg/l2/l2-config.in	22 Dec 2001 21:51:56 -0000	1.4
  @@ -53,7 +53,7 @@
   usage="l2-config"
   usage="$usage [--help] [--version] [--all]"
   usage="$usage [--prefix] [--exec-prefix] [--bindir] [--libdir] [--includedir] [--mandir] [--datadir] [--acdir]"
  -usage="$usage [--cflags] [--ldflags] [--libs] [--libs++]"
  +usage="$usage [--cflags] [--ldflags] [--libs]"
   if [ $# -eq 0 ]; then
       echo "l2-config:Error: Invalid option" 1>&2
       echo "l2-config:Usage: $usage" 1>&2
  @@ -121,10 +121,6 @@
               ;;
           --libs)
               output="$output -ll2"
  -            output_extra="$output_extra $l2_libs"
  -            ;;
  -        --libs++)
  -            output="$output -ll2++"
               output_extra="$output_extra $l2_libs"
               ;;
           * )
  Index: ossp-pkg/l2/l2-config.pod
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 l2-config.pod
  --- ossp-pkg/l2/l2-config.pod	15 Aug 2001 10:36:03 -0000	1.3
  +++ ossp-pkg/l2/l2-config.pod	22 Dec 2001 21:51:56 -0000	1.4
  @@ -54,7 +54,6 @@
   [B<--cflags>]
   [B<--ldflags>]
   [B<--libs>]
  -[B<--libs++>]
   
   =head1 DESCRIPTION
   
  @@ -131,12 +130,6 @@
   Prints the library flags (C<-l>) which are needed to link the application with
   the C l2(3) library. The output is usually added to the C<LIBS> variable of the
   applications C<Makefile>.
  -
  -=item B<--libs++>
  -
  -Prints the library flags (C<-l>) which are needed to link the
  -application with the C++ l2(3) library. The output is usually added to
  -the C<LIBS> variable of the applications C<Makefile>.
   
   =back
   
  

From ossp-cvs-owner@ossp.org  Sat Dec 22 22:54:36 2001
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5B2A976496; Sat, 22 Dec 2001 22:54:36 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_objects.fig
Message-Id: <20011222215436.5B2A976496@mail.ossp.org>
Date: Sat, 22 Dec 2001 22:54:36 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   22-Dec-2001 22:54:36
  Branch: HEAD                             Handle: 1970010101000000

  Removed files:
    ossp-pkg/l2             l2_objects.fig

  Log:
    remove already obsolete illustration

  Summary:
    Revision    Changes     Path
    NONE        +0  -348    ossp-pkg/l2/l2_objects.fig
  ____________________________________________________________________________

  

From ossp-cvs-owner@ossp.org  Sat Dec 22 22:58:52 2001
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 77ED176496; Sat, 22 Dec 2001 22:58:52 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 Makefile.in l2_sockmon.c
Message-Id: <20011222215852.77ED176496@mail.ossp.org>
Date: Sat, 22 Dec 2001 22:58:52 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   22-Dec-2001 22:58:52
  Branch: HEAD                             Handle: 197001010100001009054732

  Modified files:
    ossp-pkg/l2             Makefile.in
  Removed files:
    ossp-pkg/l2             l2_sockmon.c

  Log:
    Remove socket monitor utility, because now we have SA and the
    functionality either has to be applied again as an "satool" to SA or we
    should use one of the existing tools like "netcat", etc.

  Summary:
    Revision    Changes     Path
    1.39        +0  -2      ossp-pkg/l2/Makefile.in
    NONE        +0  -295    ossp-pkg/l2/l2_sockmon.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.38 -r1.39 Makefile.in
  --- ossp-pkg/l2/Makefile.in	22 Dec 2001 21:51:56 -0000	1.38
  +++ ossp-pkg/l2/Makefile.in	22 Dec 2001 21:58:52 -0000	1.39
  @@ -158,8 +158,6 @@
   	$(LIBTOOL) --mode=link --quiet $(CC) $(LDFLAGS) -o l2tool l2tool.o libl2.la $(LIBS)
   l2_test: l2_test.o libl2.la
   	$(LIBTOOL) --mode=link --quiet $(CC) $(LDFLAGS) -o l2_test l2_test.o libl2.la $(LIBS)
  -l2_sockmon: l2_sockmon.o
  -	$(LIBTOOL) --mode=link --quiet $(CC) $(LDFLAGS) -o l2_sockmon l2_sockmon.o $(LIBS)
   
   #   build Unix manual pages
   l2tool.1: l2tool.pod l2_version.c
  

From ossp-cvs-owner@ossp.org  Sat Dec 22 23:04:18 2001
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 68ABF76496; Sat, 22 Dec 2001 23:04:18 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_spec.c
Message-Id: <20011222220418.68ABF76496@mail.ossp.org>
Date: Sat, 22 Dec 2001 23:04:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   22-Dec-2001 23:04:18
  Branch: HEAD                             Handle: 2001122222041800

  Modified files:
    ossp-pkg/l2             l2_spec.c

  Log:
    remove warning

  Summary:
    Revision    Changes     Path
    1.6         +1  -1      ossp-pkg/l2/l2_spec.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_spec.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 l2_spec.c
  --- ossp-pkg/l2/l2_spec.c	14 Dec 2001 12:42:07 -0000	1.5
  +++ ossp-pkg/l2/l2_spec.c	22 Dec 2001 22:04:18 -0000	1.6
  @@ -120,7 +120,7 @@
       /* calculate line and column of token */
       line   = 1;
       column = 1;
  -    for (cp = ctx->inputbuf; cp < (ctx->inputbuf+ctx->inputlen) && cp != cpF; cp++) {
  +    for (cp = (char *)ctx->inputbuf; cp < (ctx->inputbuf+ctx->inputlen) && cp != cpF; cp++) {
           column++;
           if (*cp == '\n') {
               column = 1;

From ossp-cvs-owner@ossp.org  Sat Dec 22 23:04:56 2001
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 417BB764FA; Sat, 22 Dec 2001 23:04:56 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 Makefile.in
Message-Id: <20011222220456.417BB764FA@mail.ossp.org>
Date: Sat, 22 Dec 2001 23:04:56 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   22-Dec-2001 23:04:56
  Branch: HEAD                             Handle: 2001122222045500

  Modified files:
    ossp-pkg/l2             Makefile.in

  Log:
    fix realclean target

  Summary:
    Revision    Changes     Path
    1.40        +1  -2      ossp-pkg/l2/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.39 -r1.40 Makefile.in
  --- ossp-pkg/l2/Makefile.in	22 Dec 2001 21:58:52 -0000	1.39
  +++ ossp-pkg/l2/Makefile.in	22 Dec 2001 22:04:55 -0000	1.40
  @@ -244,11 +244,10 @@
   	$(RM) config.guess config.sub
   	$(RM) ltmain.sh libtool.m4
   	$(RM) shtool
  -	$(RM) l2-config.1
   	$(RM) l2_config.h.in
  -	$(RM) l2.3
   	$(RM) l2_spec_scan.c
   	$(RM) l2_spec_parse.c l2_spec_parse.h
  +	$(RM) $(TARGET_MANS)
   
   #   create dependencies
   depend: all

From ossp-cvs-owner@ossp.org  Sat Dec 22 23:18:35 2001
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 54CA476496; Sat, 22 Dec 2001 23:18:35 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.h.in l2_env.c l2_spec.c
Message-Id: <20011222221835.54CA476496@mail.ossp.org>
Date: Sat, 22 Dec 2001 23:18:35 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   22-Dec-2001 23:18:35
  Branch: HEAD                             Handle: 2001122222183400

  Modified files:
    ossp-pkg/l2             l2.h.in l2_env.c l2_spec.c

  Log:
    Fix l2_spec_error function and remove again the not
    really needed l2_env_verrorinfo function.

  Summary:
    Revision    Changes     Path
    1.26        +0  -1      ossp-pkg/l2/l2.h.in
    1.6         +2  -10     ossp-pkg/l2/l2_env.c
    1.7         +11 -2      ossp-pkg/l2/l2_spec.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2.h.in
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 l2.h.in
  --- ossp-pkg/l2/l2.h.in	14 Dec 2001 12:39:08 -0000	1.25
  +++ ossp-pkg/l2/l2.h.in	22 Dec 2001 22:18:34 -0000	1.26
  @@ -208,7 +208,6 @@
   l2_result_t   l2_env_formatter      (l2_env_t *env, char id, l2_formatter_t cb, l2_context_t *ctx);
   l2_result_t   l2_env_handler        (l2_env_t *env, l2_handler_t *h);
   l2_result_t   l2_env_errorinfo      (l2_env_t *env, l2_result_t rv, const char *fmt, ...);
  -l2_result_t   l2_env_verrorinfo     (l2_env_t *env, l2_result_t rv, const char *fmt, va_list ap);
   char         *l2_env_strerror       (l2_env_t *env, l2_result_t rv);
   l2_result_t   l2_env_settimer       (l2_env_t *env, int iInterval);
   
  Index: ossp-pkg/l2/l2_env.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 l2_env.c
  --- ossp-pkg/l2/l2_env.c	14 Dec 2001 12:39:08 -0000	1.5
  +++ ossp-pkg/l2/l2_env.c	22 Dec 2001 22:18:34 -0000	1.6
  @@ -152,23 +152,15 @@
   {
       va_list ap;
   
  -    /* remember error information */
  -    va_start(ap, fmt);
  -    l2_env_verrorinfo(env, rv, fmt, ap);
  -    va_end(ap);
  -
  -    return L2_OK;
  -}
  -
  -l2_result_t l2_env_verrorinfo(l2_env_t *env, l2_result_t rv, const char *fmt, va_list ap)
  -{
       /* argument sanity check */
       if (env == NULL || rv == L2_OK || fmt == NULL)
           return L2_ERR_ARG;
   
       /* remember error information */
  +    va_start(ap, fmt);
       l2_util_vsprintf(env->szErrorInfo, sizeof(env->szErrorInfo), fmt, ap);
       env->rvErrorInfo = rv;
  +    va_end(ap);
   
       return L2_OK;
   }
  Index: ossp-pkg/l2/l2_spec.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 l2_spec.c
  --- ossp-pkg/l2/l2_spec.c	22 Dec 2001 22:04:18 -0000	1.6
  +++ ossp-pkg/l2/l2_spec.c	22 Dec 2001 22:18:34 -0000	1.7
  @@ -98,6 +98,7 @@
   /* remember a specification parsing error (used internally) */
   void l2_spec_error(l2_spec_ctx_t *ctx, l2_result_t rv, YYLTYPE *loc, const char *fmt, ...)
   {
  +    va_list ap;
       const char *cpF, *cpL;
       const char *cpP, *cpE;
       int line, column;
  @@ -143,8 +144,16 @@
       *cp++ = '\0';
   
       /* remember error */
  -    l2_env_errorinfo(ctx->env, rv, "line %d, column %d: `%s'; %s",
  -                     line, column, cpBuf, fmt);
  +    va_start(ap, fmt);
  +    if ((cp = l2_util_vasprintf(fmt, ap)) != NULL) {
  +        l2_env_errorinfo(ctx->env, rv, "line %d, column %d: `%s'; %s",
  +                         line, column, cpBuf, cp);
  +        free(cp);
  +    }
  +    else
  +        l2_env_errorinfo(ctx->env, rv, "line %d, column %d: `%s'; N.A.",
  +                         line, column, cpBuf);
  +    va_end(ap);
       ctx->rv = rv;
   
       /* cleanup */

From ossp-cvs-owner@ossp.org  Sat Dec 22 23:23:43 2001
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8DA0E76496; Sat, 22 Dec 2001 23:23:43 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Message-Id: <20011222222343.8DA0E76496@mail.ossp.org>
Date: Sat, 22 Dec 2001 23:23:43 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   22-Dec-2001 23:23:43
  Branch: HEAD                             Handle: 2001122222234300

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    remember issue

  Summary:
    Revision    Changes     Path
    1.49        +1  -1      ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.48 -r1.49 TODO
  --- ossp-pkg/l2/TODO	14 Dec 2001 12:42:41 -0000	1.48
  +++ ossp-pkg/l2/TODO	22 Dec 2001 22:23:43 -0000	1.49
  @@ -36,7 +36,7 @@
   - l2_ch_snmp logs a stream to an SNMP listener.
   
   Existing Channels -----------------------------------------
  -- l2_ch_socket bind and udp parameters need work.
  +- l2_ch_socket bind and udp parameters need work. (RSE: why and what?)
   - l2_ch_socket consider taking a fd at configuration.
   
   - l2_ch_filter should have a PCRE_CASELESS option.

From ossp-cvs-owner@ossp.org  Sat Dec 22 23:24:40 2001
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C8FA376496; Sat, 22 Dec 2001 23:24:40 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO l2_ch_filter.c
Message-Id: <20011222222440.C8FA376496@mail.ossp.org>
Date: Sat, 22 Dec 2001 23:24:40 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   22-Dec-2001 23:24:40
  Branch: HEAD                             Handle: 2001122222244000

  Modified files:
    ossp-pkg/l2             TODO l2_ch_filter.c

  Log:
    add no case support

  Summary:
    Revision    Changes     Path
    1.50        +0  -2      ossp-pkg/l2/TODO
    1.15        +11 -4      ossp-pkg/l2/l2_ch_filter.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.49 -r1.50 TODO
  --- ossp-pkg/l2/TODO	22 Dec 2001 22:23:43 -0000	1.49
  +++ ossp-pkg/l2/TODO	22 Dec 2001 22:24:40 -0000	1.50
  @@ -39,8 +39,6 @@
   - l2_ch_socket bind and udp parameters need work. (RSE: why and what?)
   - l2_ch_socket consider taking a fd at configuration.
   
  -- l2_ch_filter should have a PCRE_CASELESS option.
  -
   - l2_ch_pcre is too large and might benefit from a
       smaller set of pattern matching logic.
   
  Index: ossp-pkg/l2/l2_ch_filter.c
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 l2_ch_filter.c
  --- ossp-pkg/l2/l2_ch_filter.c	7 Nov 2001 13:05:20 -0000	1.14
  +++ ossp-pkg/l2/l2_ch_filter.c	22 Dec 2001 22:24:40 -0000	1.15
  @@ -34,6 +34,7 @@
   typedef struct {
       char *szRegex;
       int   bNegate;
  +    int   bNoCase;
       pcre *pcreRegex;
       pcre_extra *pcreExtra;
   } l2_ch_filter_t;
  @@ -49,7 +50,8 @@
   
       /* initialize configuration with reasonable defaults */
       cfg->szRegex   = NULL;
  -    cfg->bNegate   = 0;
  +    cfg->bNegate   = FALSE;
  +    cfg->bNoCase   = FALSE;
       cfg->pcreRegex = NULL;
       cfg->pcreExtra = NULL;
   
  @@ -64,15 +66,17 @@
   {
       l2_ch_filter_t *cfg = (l2_ch_filter_t *)ctx->vp;
       l2_env_t *env;
  -    l2_param_t pa[3]; 
  +    l2_param_t pa[4]; 
       l2_result_t rv;
       const char *szError;
       int nErrorOffset;
  +    int opt;
   
       /* feed and call generic parameter parsing engine */
       L2_PARAM_SET(pa[0], regex,  STR, &cfg->szRegex);
       L2_PARAM_SET(pa[1], negate, INT, &cfg->bNegate);
  -    L2_PARAM_END(pa[2]);
  +    L2_PARAM_SET(pa[2], nocase, INT, &cfg->bNoCase);
  +    L2_PARAM_END(pa[3]);
       l2_channel_env(ch, &env);
       if ((rv = l2_util_setparams(env, pa, fmt, ap)) != L2_OK)
           return rv;
  @@ -80,7 +84,10 @@
       /* translate regular expression into finite state machine */ 
       if (cfg->szRegex != NULL) {
           /* compile regular expression into FSM */
  -        if ((cfg->pcreRegex = pcre_compile(cfg->szRegex, 0, &szError, &nErrorOffset, NULL)) == NULL) {
  +        opt = 0;
  +        if (cfg->bNoCase)
  +            opt |= PCRE_CASELESS;
  +        if ((cfg->pcreRegex = pcre_compile(cfg->szRegex, opt, &szError, &nErrorOffset, NULL)) == NULL) {
               l2_env_errorinfo(env, L2_ERR_ARG, "%s ('%c')", szError, cfg->szRegex[nErrorOffset]);
               return L2_ERR_ARG;
           }

From ossp-cvs-owner@ossp.org  Sat Dec 22 23:25:35 2001
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 484D976496; Sat, 22 Dec 2001 23:25:35 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Message-Id: <20011222222535.484D976496@mail.ossp.org>
Date: Sat, 22 Dec 2001 23:25:35 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   22-Dec-2001 23:25:35
  Branch: HEAD                             Handle: 2001122222253400

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    remember issue

  Summary:
    Revision    Changes     Path
    1.51        +1  -0      ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.50 -r1.51 TODO
  --- ossp-pkg/l2/TODO	22 Dec 2001 22:24:40 -0000	1.50
  +++ ossp-pkg/l2/TODO	22 Dec 2001 22:25:34 -0000	1.51
  @@ -56,6 +56,7 @@
       as options in case we are building in custom striptease mode.
   
   - l2_ch_file should optionally support file locking via fcntl(3).
  +  (RSE: why? Unix guarranties that up to 512 bytes one can write atomically)
   
   - l2_ch_pipe needs an overhaul once l2_ch_async is implemented.
       Also needs a review for dangling descriptors. During configure

From ossp-cvs-owner@ossp.org  Thu Dec 27 13:11:02 2001
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E5726764D1; Thu, 27 Dec 2001 13:11:01 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str .dmallocrc str_test.c
Message-Id: <20011227121101.E5726764D1@mail.ossp.org>
Date: Thu, 27 Dec 2001 13:11:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   27-Dec-2001 13:11:01
  Branch: HEAD                             Handle: 2001122712110100

  Added files:
    ossp-pkg/str            .dmallocrc
  Modified files:
    ossp-pkg/str            str_test.c

  Log:
    more dmalloc support

  Summary:
    Revision    Changes     Path
    1.1         +20 -0      ossp-pkg/str/.dmallocrc
    1.22        +5  -0      ossp-pkg/str/str_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/str/.dmallocrc
  ============================================================
  $ cvs update -p -r1.1 .dmallocrc
  ##
  ##  Dmalloc Init Script
  ##  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
  ##
  
  # no debugging
  none    none
  
  # basic debugging
  debug1  log-stats, log-non-free, check-fence
  
  # more logging and some heap checking
  debug2  log-stats, log-non-free, log-trans, \
          check-fence, check-heap, check-lists, error-abort
  
  # good utilities
  debug3  log-stats, log-non-free, log-trans, \
          log-admin, check-fence, check-heap, check-lists, realloc-copy, \
          free-blank, error-abort, allow-free-null
  
  Index: ossp-pkg/str/str_test.c
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 str_test.c
  --- ossp-pkg/str/str_test.c	16 Aug 2001 13:21:23 -0000	1.21
  +++ ossp-pkg/str/str_test.c	27 Dec 2001 12:11:01 -0000	1.22
  @@ -32,6 +32,10 @@
   #include "str.h"
   #include "str_config.h"
   
  +#if defined(HAVE_DMALLOC_H) && defined(WITH_DMALLOC)
  +#include "dmalloc.h"
  +#endif
  +
   #define LONG_STRING 1024
   
   /*
  @@ -295,6 +299,7 @@
           else
               (*ok)++;
       }
  +    str_parse(NULL, NULL);
       return;
   }
   

From ossp-cvs-owner@ossp.org  Thu Dec 27 13:15:20 2001
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 498F1764D1; Thu, 27 Dec 2001 13:15:20 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str .configure autogen.sh devtool devtool.conf de...
Message-Id: <20011227121520.498F1764D1@mail.ossp.org>
Date: Thu, 27 Dec 2001 13:15:20 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   27-Dec-2001 13:15:20
  Branch: HEAD                             Handle: 197001010100001009451719

  Added files:
    ossp-pkg/str            devtool devtool.conf devtool.func
  Removed files:
    ossp-pkg/str            .configure autogen.sh

  Log:
    switch to devtool

  Summary:
    Revision    Changes     Path
    NONE        +0  -2      ossp-pkg/str/.configure
    NONE        +0  -75     ossp-pkg/str/autogen.sh
    1.1         +47 -0      ossp-pkg/str/devtool
    1.1         +31 -0      ossp-pkg/str/devtool.conf
    1.1         +72 -0      ossp-pkg/str/devtool.func
  ____________________________________________________________________________

      Index: ossp-pkg/str/devtool
  ============================================================
  $ cvs update -p -r1.1 devtool
  #!/bin/sh
  ##
  ##  devtool -- Development Tool
  ##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  if [ $# -eq 0 ]; then
      echo "devtool:USAGE: devtool <command> [<arg> ...]" 1>&2
      exit 1
  fi
  
  cmd="$1"
  shift
  
  devtoolfunc="./devtool.func"
  
  if [ ! -f devtool.conf ]; then
      echo "devtool:ERROR: no devtool.conf in current directory" 1>&2
      exit 1
  fi
  
  cmdline=`grep "^%$cmd" devtool.conf`
  if [ ".$cmdline" = . ]; then
      echo "devtool:ERROR: command $cmd not found in devtool.conf" 1>&2
      exit 1
  fi
  
  if [ ".$TMPDIR" != . ]; then
      tmpdir="$TMPDIR"
  elif [ ".$TEMPDIR" != . ]; then
      tmpdir="$TEMPDIR"
  else
      tmpdir="/tmp"
  fi
  tmpfile="$tmpdir/rc.$$.tmp"
  
  rm -f $tmpfile
  touch $tmpfile
  echo ". $devtoolfunc" >>$tmpfile
  ( sed <devtool.conf -e "1,/^%common/d" -e '/^%.*/,$d'
    sed <devtool.conf -e "1,/^%$cmd/d" -e '/^%.*/,$d' ) |\
  sed -e 's;\([ 	]\)@\([a-zA-Z_][a-zA-Z0-9_]*\);\1devtool_\2;' >>$tmpfile
  
  sh $tmpfile "$@"
  
  rm -f $tmpfile >/dev/null 2>&1 || true
  
  Index: ossp-pkg/str/devtool.conf
  ============================================================
  $ cvs update -p -r1.1 devtool.conf
  ##
  ##  devtool.conf -- Development Tool Configuration
  ##
  
  %autogen
      @autogen shtool   1.5.4 "1.5.*" echo install mkdir fixperm tarball version
      @autogen libtool  1.4.2 "1.4*"
      @autogen autoconf 2.52  "2.5.*"
  
  %autoclean
      @autoclean shtool
      @autoclean libtool
      @autoclean autoconf
  
  %configure
      ./configure \
          --prefix=/tmp/str \
          --disable-shared \
          --enable-debug \
          "$@"
  
  %version
      ./shtool version -l c -n "OSSP Str" -p "str_" -e str_version.c
  
  %dist
      make distclean >/dev/null 2>&1
      ./shtool fixperm -v .
      V=`./shtool version -l c -d short str_version.c`
      ./shtool tarball -o str-${V}.tar.gz -d str-${V} -u ossp -g ossp \
                       -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf' -c 'gzip --best' .
  
  Index: ossp-pkg/str/devtool.func
  ============================================================
  $ cvs update -p -r1.1 devtool.func
  ##
  ##  devtool.func -- Development Tool Functions
  ##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  devtool_require () {
      t="$1"; o="$2"; p="$3"; e="$4"; a="$5"
      v=`($t $o | head -1 | awk "{ print \\\$$p; }") 2>/dev/null`
      if [ ".$v" = . ]; then
          echo "devtool:ERROR: unable to determine version of $t" 1>&2
          exit 1
      fi
      case "$v" in
          $e )
              ;;
          $a )
              echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
              ;;
          * )
              echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
              exit 1
              ;;
      esac
      echo "$v"
  }
  
  devtool_autogen () {
      tool=$1
      shift
      case $tool in
          autoconf )
              autoconf_version=`devtool_require autoconf --version 4 "$1" "$2"`
              echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
              autoconf
              autoheader 2>&1 | grep -v "is unchanged"
              ;;
          libtool )
              libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
              echo "generating (GNU Libtool $libtoolize_version): ltmain.sh, libtool.m4, config.guess, config.sub"
              libtoolize --force --copy >/dev/null 2>&1
              cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
                  sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` libtool.m4
              ;;
          shtool )
              shtoolize_version=`devtool_require shtoolize -v 3 "$1" "$2"`
              echo "generating (GNU Shtool $shtoolize_version): shtool"
              shift
              shift
              shtoolize -q "$@"
              ;;
      esac
  }
  
  devtool_autoclean () {
      tool=$1
      shift
      case $tool in
          autoconf )
              echo "removing: configure config.h.in"
              rm -f configure config.h.in
              ;;
          libtool )
              echo "removing: ltmain.sh libtool.m4 config.guess config.sub"
              rm -f ltmain.sh libtool.m4 config.guess config.sub
              ;;
          shtool )
              echo "removing: shtool"
              rm -f shtool
              ;;
      esac
  }
  

From ossp-cvs-owner@ossp.org  Thu Dec 27 13:16:45 2001
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 210B9764D1; Thu, 27 Dec 2001 13:16:45 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str Makefile.in
Message-Id: <20011227121645.210B9764D1@mail.ossp.org>
Date: Thu, 27 Dec 2001 13:16:45 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   27-Dec-2001 13:16:45
  Branch: HEAD                             Handle: 2001122712164400

  Modified files:
    ossp-pkg/str            Makefile.in

  Log:
    remove str.h on distclean, too

  Summary:
    Revision    Changes     Path
    1.38        +1  -0      ossp-pkg/str/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/str/Makefile.in
  ============================================================
  $ cvs diff -u -r1.37 -r1.38 Makefile.in
  --- ossp-pkg/str/Makefile.in	13 Sep 2001 08:47:18 -0000	1.37
  +++ ossp-pkg/str/Makefile.in	27 Dec 2001 12:16:44 -0000	1.38
  @@ -150,6 +150,7 @@
   	$(RM) config.log config.cache config.status
   	$(RM) libtool
   	$(RM) Makefile
  +	$(RM) str.h
   
   realclean: distclean
   	$(RM) config.guess config.sub ltmain.sh libtool.m4

From ossp-cvs-owner@ossp.org  Thu Dec 27 13:24:23 2001
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 41A6F764D1; Thu, 27 Dec 2001 13:24:22 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str .cvsignore Makefile.in str_pcre.c str_pcre.h
Message-Id: <20011227122422.41A6F764D1@mail.ossp.org>
Date: Thu, 27 Dec 2001 13:24:22 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   27-Dec-2001 13:24:22
  Branch: HEAD                             Handle: 2001122712242000

  Modified files:
    ossp-pkg/str            .cvsignore Makefile.in str_pcre.c str_pcre.h

  Log:
    upgrade from PCRE 3.5 (full) to PCRE 3.8 (stripped-down)

  Summary:
    Revision    Changes     Path
    1.11        +1  -0      ossp-pkg/str/.cvsignore
    1.39        +7  -8      ossp-pkg/str/Makefile.in
    1.6         +3868 -5442 ossp-pkg/str/str_pcre.c
    1.3         +45 -31     ossp-pkg/str/str_pcre.h
  ____________________________________________________________________________

  Index: ossp-pkg/str/.cvsignore
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 .cvsignore
  --- ossp-pkg/str/.cvsignore	10 Sep 2001 09:55:13 -0000	1.10
  +++ ossp-pkg/str/.cvsignore	27 Dec 2001 12:24:20 -0000	1.11
  @@ -22,3 +22,4 @@
   str.3
   str-config.1
   str.h
  +str_pcre.tab
  Index: ossp-pkg/str/Makefile.in
  ============================================================
  $ cvs diff -u -r1.38 -r1.39 Makefile.in
  --- ossp-pkg/str/Makefile.in	27 Dec 2001 12:16:44 -0000	1.38
  +++ ossp-pkg/str/Makefile.in	27 Dec 2001 12:24:20 -0000	1.39
  @@ -113,12 +113,12 @@
   	NAME="Str"; ONELINE="String Library"; \
   	$(_MANPAGE)
   
  -str_pcre.lo: str_pcre.c
  -str_pcre.c: str_pcre_tab.c
  -str_pcre_tab.c: str_pcre_gen
  -	./str_pcre_gen >str_pcre_tab.c
  -str_pcre_gen:
  -	$(CC) $(CFLAGS) -DSTR_PCRE_GENTAB $(LDFLAGS) -o str_pcre_gen str_pcre.c $(LIBS)
  +
  +str_pcre.lo: str_pcre.tab str_pcre.c
  +str_pcre.tab: str_pcre.c
  +	$(CC) $(CFLAGS) -DSTR_PCRE_TAB $(LDFLAGS) -o str_pcre.gen str_pcre.c $(LIBS)
  +	./str_pcre.gen >str_pcre.tab
  +	-rm -f str_pcre.gen
   
   check: test
   test: str_test
  @@ -139,14 +139,13 @@
   clean:
   	$(RM) *.lo *.o
   	$(RM) str_test.o str_test
  -	$(RM) str_pcre_gen str_pcre_tab.c
   	$(RM) libstr.la
   	$(RM) -r .libs
   	
   distclean: clean
   	$(RM) str-config
   	$(RM) str_config.h
  -	$(RM) str_pcre_mk str_pcre_tab.c
  +	$(RM) str_pcre.tab
   	$(RM) config.log config.cache config.status
   	$(RM) libtool
   	$(RM) Makefile
  Index: ossp-pkg/str/str_pcre.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 str_pcre.c
  --- ossp-pkg/str/str_pcre.c	16 Aug 2001 12:04:25 -0000	1.5
  +++ ossp-pkg/str/str_pcre.c	27 Dec 2001 12:24:20 -0000	1.6
  @@ -1,50 +1,50 @@
  -/*************************************************
  -*      Perl-Compatible Regular Expressions       *
  -*************************************************/
  +/* 
  + *  Perl Compatible Regular Expression (PCRE) Library
  + *  Copyright (c) 1997-2001 Philip Hazel <ph10@cam.ac.uk>
  + *  Copyright (c) 1997-2001 University of Cambridge
  + *
  + *  DO NOT EDIT THIS FILE, IT WAS AUTOMATICALLY GENERATED!
  + *
  + *  This is an automatically generated, extremely stripped down
  + *  version of the PCRE 3.8 library from the Philip Hazel.
  + *  This version is still distributed under the same original PCRE
  + *  Open Source license, but Philip Hazel is no longer responsible
  + *  for this version.
  + */
  +
  +/* 
  +   This is a library of functions to support regular expressions whose syntax
  +   and semantics are as close as possible to those of the Perl 5 language. See
  +   the file Tech.Notes for some information on the internals.
  +
  +   Written by: Philip Hazel <ph10@cam.ac.uk>
  +
  +   Copyright (c) 1997-2001 University of Cambridge
  +
  +   -----------------------------------------------------------------------------
  +   Permission is granted to anyone to use this software for any purpose on any
  +   computer system, and to redistribute it freely, subject to the following
  +   restrictions:
  +
  +   1. This software is distributed in the hope that it will be useful, but
  +   WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  +   FITNESS FOR A PARTICULAR PURPOSE.
   
  -/*
  -This is a library of functions to support regular expressions whose syntax
  -and semantics are as close as possible to those of the Perl 5 language. See
  -the file Tech.Notes for some information on the internals.
  +   2. The origin of this software must not be misrepresented, either by explicit
  +   claim or by omission.
   
  -Written by: Philip Hazel <ph10@cam.ac.uk>
  -
  -           Copyright (c) 1997-2001 University of Cambridge
  -
  ------------------------------------------------------------------------------
  -Permission is granted to anyone to use this software for any purpose on any
  -computer system, and to redistribute it freely, subject to the following
  -restrictions:
  -
  -1. This software is distributed in the hope that it will be useful,
  -   but WITHOUT ANY WARRANTY; without even the implied warranty of
  -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  -
  -2. The origin of this software must not be misrepresented, either by
  -   explicit claim or by omission.
  -
  -3. Altered versions must be plainly marked as such, and must not be
  +   3. Altered versions must be plainly marked as such, and must not be
      misrepresented as being the original software.
   
  -4. If PCRE is embedded in any software that is released under the GNU
  -   General Purpose Licence (GPL), then the terms of that licence shall
  -   supersede any condition above with which it is incompatible.
  ------------------------------------------------------------------------------
  -*/
  -
  -/* ____ BEGIN internal.h ____ */
  -
  -/* This header contains definitions that are shared between the different
  -modules, but which are not relevant to the outside. */
  -
  -/* Get the definitions provided by running "configure" */
  +   4. If PCRE is embedded in any software that is released under the GNU General
  +   Purpose Licence (GPL), then the terms of that licence shall supersede any
  +   condition above with which it is incompatible.
  +   ----------------------------------------------------------------------------- */
   
   #ifdef HAVE_CONFIG_H
   #include "config.h"
   #endif
   
  -/* Standard C headers plus the external interface definition */
  -
   #include <ctype.h>
   #include <limits.h>
   #include <stddef.h>
  @@ -53,35 +53,19 @@
   #include <string.h>
   #include "str_pcre.h"
   
  -/* In case there is no definition of offsetof() provided - though any proper
  -Standard C system should have one. */
  -
   #ifndef offsetof
   #define offsetof(p_type,field) ((size_t)&(((p_type *)0)->field))
   #endif
   
  -/* These are the public options that can change during matching. */
  -
   #define PCRE_IMS (PCRE_CASELESS|PCRE_MULTILINE|PCRE_DOTALL)
   
  -/* Private options flags start at the most significant end of the four bytes,
  -but skip the top bit so we can use ints for convenience without getting tangled
  -with negative values. The public options defined in pcre.h start at the least
  -significant end. Make sure they don't overlap, though now that we have expanded
  -to four bytes there is plenty of space. */
  -
  -#define PCRE_FIRSTSET      0x40000000  /* first_char is set */
  -#define PCRE_REQCHSET      0x20000000  /* req_char is set */
  -#define PCRE_STARTLINE     0x10000000  /* start after \n for multiline */
  -#define PCRE_INGROUP       0x08000000  /* compiling inside a group */
  -#define PCRE_ICHANGED      0x04000000  /* i option changes within regex */
  -
  -/* Options for the "extra" block produced by pcre_study(). */
  +#define PCRE_FIRSTSET      0x40000000
  +#define PCRE_REQCHSET      0x20000000
  +#define PCRE_STARTLINE     0x10000000
  +#define PCRE_INGROUP       0x08000000
  +#define PCRE_ICHANGED      0x04000000
   
  -#define PCRE_STUDY_MAPPED   0x01     /* a map of starting chars exists */
  -
  -/* Masks for identifying the public options which are permitted at compile
  -time, run time or study time, respectively. */
  +#define PCRE_STUDY_MAPPED   0x01
   
   #define PUBLIC_OPTIONS \
     (PCRE_CASELESS|PCRE_EXTENDED|PCRE_ANCHORED|PCRE_MULTILINE| \
  @@ -90,13 +74,9 @@
   #define PUBLIC_EXEC_OPTIONS \
     (PCRE_ANCHORED|PCRE_NOTBOL|PCRE_NOTEOL|PCRE_NOTEMPTY)
   
  -#define PUBLIC_STUDY_OPTIONS 0   /* None defined */
  -
  -/* Magic number to provide a small check against being handed junk. */
  +#define PUBLIC_STUDY_OPTIONS 0
   
  -#define MAGIC_NUMBER  0x50435245UL   /* 'PCRE' */
  -
  -/* Miscellaneous definitions */
  +#define MAGIC_NUMBER  0x50435245UL
   
   typedef int BOOL;
   
  @@ -107,10 +87,6 @@
   #define TRUE    1
   #endif
   
  -/* Escape items that are just an encoding of a particular data value. Note that
  -ESC_N is defined as yet another macro, which is set in config.h to either \n
  -(the default) or \r (which some people want). */
  -
   #ifndef ESC_E
   #define ESC_E 27
   #endif
  @@ -131,132 +107,99 @@
   #define ESC_T '\t'
   #endif
   
  -/* These are escaped items that aren't just an encoding of a particular data
  -value such as \n. They must have non-zero values, as check_escape() returns
  -their negation. Also, they must appear in the same order as in the opcode
  -definitions below, up to ESC_z. The final one must be ESC_REF as subsequent
  -values are used for \1, \2, \3, etc. There is a test in the code for an escape
  -greater than ESC_b and less than ESC_Z to detect the types that may be
  -repeated. If any new escapes are put in-between that don't consume a character,
  -that code will have to change. */
  -
   enum { ESC_A = 1, ESC_B, ESC_b, ESC_D, ESC_d, ESC_S, ESC_s, ESC_W, ESC_w,
  -       ESC_Z, ESC_z, ESC_REF };
  -
  -/* Opcode table: OP_BRA must be last, as all values >= it are used for brackets
  -that extract substrings. Starting from 1 (i.e. after OP_END), the values up to
  -OP_EOD must correspond in order to the list of escapes immediately above. */
  +	ESC_Z, ESC_z, ESC_REF
  +};
   
   enum {
  -  OP_END,
  +	OP_END,
   
  -  /* Values corresponding to backslashed metacharacters */
  +	OP_SOD,
  +	OP_NOT_WORD_BOUNDARY,
  +	OP_WORD_BOUNDARY,
  +	OP_NOT_DIGIT,
  +	OP_DIGIT,
  +	OP_NOT_WHITESPACE,
  +	OP_WHITESPACE,
  +	OP_NOT_WORDCHAR,
  +	OP_WORDCHAR,
  +	OP_EODN,
  +	OP_EOD,
  +
  +	OP_OPT,
  +	OP_CIRC,
  +	OP_DOLL,
  +	OP_ANY,
  +	OP_CHARS,
  +	OP_NOT,
  +
  +	OP_STAR,
  +	OP_MINSTAR,
  +	OP_PLUS,
  +	OP_MINPLUS,
  +	OP_QUERY,
  +	OP_MINQUERY,
  +	OP_UPTO,
  +	OP_MINUPTO,
  +	OP_EXACT,
  +
  +	OP_NOTSTAR,
  +	OP_NOTMINSTAR,
  +	OP_NOTPLUS,
  +	OP_NOTMINPLUS,
  +	OP_NOTQUERY,
  +	OP_NOTMINQUERY,
  +	OP_NOTUPTO,
  +	OP_NOTMINUPTO,
  +	OP_NOTEXACT,
  +
  +	OP_TYPESTAR,
  +	OP_TYPEMINSTAR,
  +	OP_TYPEPLUS,
  +	OP_TYPEMINPLUS,
  +	OP_TYPEQUERY,
  +	OP_TYPEMINQUERY,
  +	OP_TYPEUPTO,
  +	OP_TYPEMINUPTO,
  +	OP_TYPEEXACT,
  +
  +	OP_CRSTAR,
  +	OP_CRMINSTAR,
  +	OP_CRPLUS,
  +	OP_CRMINPLUS,
  +	OP_CRQUERY,
  +	OP_CRMINQUERY,
  +	OP_CRRANGE,
  +	OP_CRMINRANGE,
  +
  +	OP_CLASS,
  +	OP_REF,
  +	OP_RECURSE,
  +
  +	OP_ALT,
  +	OP_KET,
  +	OP_KETRMAX,
  +	OP_KETRMIN,
  +
  +	OP_ASSERT,
  +	OP_ASSERT_NOT,
  +	OP_ASSERTBACK,
  +	OP_ASSERTBACK_NOT,
  +	OP_REVERSE,
  +
  +	OP_ONCE,
  +	OP_COND,
  +	OP_CREF,
   
  -  OP_SOD,            /* Start of data: \A */
  -  OP_NOT_WORD_BOUNDARY,  /* \B */
  -  OP_WORD_BOUNDARY,      /* \b */
  -  OP_NOT_DIGIT,          /* \D */
  -  OP_DIGIT,              /* \d */
  -  OP_NOT_WHITESPACE,     /* \S */
  -  OP_WHITESPACE,         /* \s */
  -  OP_NOT_WORDCHAR,       /* \W */
  -  OP_WORDCHAR,           /* \w */
  -  OP_EODN,
  -  OP_EOD,
  -
  -  OP_OPT,            /* Set runtime options */
  -  OP_CIRC,           /* Start of line - varies with multiline switch */
  -  OP_DOLL,
  -  OP_ANY,            /* Match any character */
  -  OP_CHARS,          /* Match string of characters */
  -  OP_NOT,            /* Match anything but the following char */
  -
  -  OP_STAR,           /* The maximizing and minimizing versions of */
  -  OP_MINSTAR,        /* all these opcodes must come in pairs, with */
  -  OP_PLUS,           /* the minimizing one second. */
  -  OP_MINPLUS,        /* This first set applies to single characters */
  -  OP_QUERY,
  -  OP_MINQUERY,
  -  OP_UPTO,           /* From 0 to n matches */
  -  OP_MINUPTO,
  -  OP_EXACT,          /* Exactly n matches */
  -
  -  OP_NOTSTAR,        /* The maximizing and minimizing versions of */
  -  OP_NOTMINSTAR,     /* all these opcodes must come in pairs, with */
  -  OP_NOTPLUS,        /* the minimizing one second. */
  -  OP_NOTMINPLUS,     /* This first set applies to "not" single characters */
  -  OP_NOTQUERY,
  -  OP_NOTMINQUERY,
  -  OP_NOTUPTO,        /* From 0 to n matches */
  -  OP_NOTMINUPTO,
  -  OP_NOTEXACT,       /* Exactly n matches */
  -
  -  OP_TYPESTAR,       /* The maximizing and minimizing versions of */
  -  OP_TYPEMINSTAR,    /* all these opcodes must come in pairs, with */
  -  OP_TYPEPLUS,       /* the minimizing one second. These codes must */
  -  OP_TYPEMINPLUS,    /* be in exactly the same order as those above. */
  -  OP_TYPEQUERY,      /* This set applies to character types such as \d */
  -  OP_TYPEMINQUERY,
  -  OP_TYPEUPTO,       /* From 0 to n matches */
  -  OP_TYPEMINUPTO,
  -  OP_TYPEEXACT,      /* Exactly n matches */
  -
  -  OP_CRSTAR,         /* The maximizing and minimizing versions of */
  -  OP_CRMINSTAR,      /* all these opcodes must come in pairs, with */
  -  OP_CRPLUS,         /* the minimizing one second. These codes must */
  -  OP_CRMINPLUS,      /* be in exactly the same order as those above. */
  -  OP_CRQUERY,        /* These are for character classes and back refs */
  -  OP_CRMINQUERY,
  -  OP_CRRANGE,        /* These are different to the three seta above. */
  -  OP_CRMINRANGE,
  -
  -  OP_CLASS,          /* Match a character class */
  -  OP_REF,            /* Match a back reference */
  -  OP_RECURSE,        /* Match this pattern recursively */
  -
  -  OP_ALT,            /* Start of alternation */
  -  OP_KET,
  -  OP_KETRMAX,        /* These two must remain together and in this */
  -  OP_KETRMIN,        /* order. They are for groups the repeat for ever. */
  -
  -  /* The assertions must come before ONCE and COND */
  -
  -  OP_ASSERT,         /* Positive lookahead */
  -  OP_ASSERT_NOT,     /* Negative lookahead */
  -  OP_ASSERTBACK,     /* Positive lookbehind */
  -  OP_ASSERTBACK_NOT, /* Negative lookbehind */
  -  OP_REVERSE,        /* Move pointer back - used in lookbehind assertions */
  -
  -  /* ONCE and COND must come after the assertions, with ONCE first, as there's
  -  a test for >= ONCE for a subpattern that isn't an assertion. */
  -
  -  OP_ONCE,           /* Once matched, don't back up into the subpattern */
  -  OP_COND,           /* Conditional group */
  -  OP_CREF,           /* Used to hold an extraction string number (cond ref) */
  -
  -  OP_BRAZERO,        /* These two must remain together and in this */
  -  OP_BRAMINZERO,     /* order. */
  -
  -  OP_BRANUMBER,      /* Used for extracting brackets whose number is greater
  -                        than can fit into an opcode. */
  -
  -  OP_BRA             /* This and greater values are used for brackets that
  -                        extract substrings up to a basic limit. After that,
  -                        use is made of OP_BRANUMBER. */
  -};
  +	OP_BRAZERO,
  +	OP_BRAMINZERO,
   
  -/* The highest extraction number before we have to start using additional
  -bytes. (Originally PCRE didn't have support for extraction counts highter than
  -this number.) The value is limited by the number of opcodes left after OP_BRA,
  -i.e. 255 - OP_BRA. We actually set it a bit lower to leave room for additional
  -opcodes. */
  +	OP_BRANUMBER,
   
  -#define EXTRACT_BASIC_MAX  150
  +	OP_BRA
  +};
   
  -/* The texts of compile-time error messages are defined as macros here so that
  -they can be accessed by the POSIX wrapper and converted into error codes.  Yes,
  -I could have used error codes in the first place, but didn't feel like changing
  -just to accommodate the POSIX wrapper. */
  +#define EXTRACT_BASIC_MAX  150
   
   #define ERR1  "\\ at end of pattern"
   #define ERR2  "\\c at end of pattern"
  @@ -294,97 +237,71 @@
   #define ERR34 "character value in \\x{...} sequence is too large"
   #define ERR35 "invalid condition (?(0)"
   
  -/* All character handling must be done as unsigned characters. Otherwise there
  -are problems with top-bit-set characters and functions such as isspace().
  -However, we leave the interface to the outside world as char *, because that
  -should make things easier for callers. We define a short type for unsigned char
  -to save lots of typing. I tried "uchar", but it causes problems on Digital
  -Unix, where it is defined in sys/types, so use "uschar" instead. */
  -
   typedef unsigned char uschar;
   
  -/* The real format of the start of the pcre block; the actual code vector
  -runs on as long as necessary after the end. */
  -
  -typedef struct real_pcre {
  -  unsigned long int magic_number;
  -  size_t size;
  -  const unsigned char *tables;
  -  unsigned long int options;
  -  unsigned short int top_bracket;
  -  unsigned short int top_backref;
  -  uschar first_char;
  -  uschar req_char;
  -  uschar code[1];
  -} real_pcre;
  -
  -/* The real format of the extra block returned by pcre_study(). */
  -
  -typedef struct real_pcre_extra {
  -  uschar options;
  -  uschar start_bits[32];
  -} real_pcre_extra;
  -
  -/* Structure for passing "static" information around between the functions
  -doing the compiling, so that they are thread-safe. */
  +typedef struct pcre_st {
  +	unsigned long int magic_number;
  +	size_t size;
  +	const unsigned char *tables;
  +	unsigned long int options;
  +	unsigned short int top_bracket;
  +	unsigned short int top_backref;
  +	uschar first_char;
  +	uschar req_char;
  +	uschar code[1];
  +} pcre_st;
  +
  +typedef struct pcre_extra_st {
  +	uschar options;
  +	uschar start_bits[32];
  +} pcre_extra_st;
   
   typedef struct compile_data {
  -  const uschar *lcc;            /* Points to lower casing table */
  -  const uschar *fcc;            /* Points to case-flipping table */
  -  const uschar *cbits;          /* Points to character type table */
  -  const uschar *ctypes;         /* Points to table of type maps */
  +	const uschar *lcc;
  +	const uschar *fcc;
  +	const uschar *cbits;
  +	const uschar *ctypes;
   } compile_data;
   
  -/* Structure for passing "static" information around between the functions
  -doing the matching, so that they are thread-safe. */
  -
   typedef struct match_data {
  -  int    errorcode;             /* As it says */
  -  int   *offset_vector;         /* Offset vector */
  -  int    offset_end;            /* One past the end */
  -  int    offset_max;            /* The maximum usable for return data */
  -  const uschar *lcc;            /* Points to lower casing table */
  -  const uschar *ctypes;         /* Points to table of type maps */
  -  BOOL   offset_overflow;       /* Set if too many extractions */
  -  BOOL   notbol;                /* NOTBOL flag */
  -  BOOL   noteol;                /* NOTEOL flag */
  -  BOOL   utf8;                  /* UTF8 flag */
  -  BOOL   endonly;               /* Dollar not before final \n */
  -  BOOL   notempty;              /* Empty string match not wanted */
  -  const uschar *start_pattern;  /* For use when recursing */
  -  const uschar *start_subject;  /* Start of the subject string */
  -  const uschar *end_subject;
  -  const uschar *start_match;    /* Start of this match attempt */
  -  const uschar *end_match_ptr;  /* Subject position at end match */
  -  int    end_offset_top;        /* Highwater mark at end of match */
  +	int errorcode;
  +	int *offset_vector;
  +	int offset_end;
  +	int offset_max;
  +	const uschar *lcc;
  +	const uschar *ctypes;
  +	BOOL offset_overflow;
  +	BOOL notbol;
  +	BOOL noteol;
  +	BOOL utf8;
  +	BOOL endonly;
  +	BOOL notempty;
  +	const uschar *start_pattern;
  +	const uschar *start_subject;
  +	const uschar *end_subject;
  +	const uschar *start_match;
  +	const uschar *end_match_ptr;
  +	int end_offset_top;
   } match_data;
   
  -/* Bit definitions for entries in the pcre_ctypes table. */
  -
   #define ctype_space   0x01
   #define ctype_letter  0x02
   #define ctype_digit   0x04
   #define ctype_xdigit  0x08
  -#define ctype_word    0x10   /* alphameric or '_' */
  -#define ctype_meta    0x80   /* regexp meta char or zero (end pattern) */
  +#define ctype_word    0x10
  +#define ctype_meta    0x80
   
  -/* Offsets for the bitmap tables in pcre_cbits. Each table contains a set
  -of bits for a class map. Some classes are built by combining these tables. */
  -
  -#define cbit_space     0      /* [:space:] or \s */
  -#define cbit_xdigit   32      /* [:xdigit:] */
  -#define cbit_digit    64      /* [:digit:] or \d */
  -#define cbit_upper    96      /* [:upper:] */
  -#define cbit_lower   128      /* [:lower:] */
  -#define cbit_word    160      /* [:word:] or \w */
  -#define cbit_graph   192      /* [:graph:] */
  -#define cbit_print   224      /* [:print:] */
  -#define cbit_punct   256      /* [:punct:] */
  -#define cbit_cntrl   288      /* [:cntrl:] */
  -#define cbit_length  320      /* Length of the cbits table */
  -
  -/* Offsets of the various tables from the base tables pointer, and
  -total length. */
  +#define cbit_space     0
  +#define cbit_xdigit   32
  +#define cbit_digit    64
  +#define cbit_upper    96
  +#define cbit_lower   128
  +#define cbit_word    160
  +#define cbit_graph   192
  +#define cbit_print   224
  +#define cbit_punct   256
  +#define cbit_cntrl   288
  +#define cbit_length  320
   
   #define lcc_offset      0
   #define fcc_offset    256
  @@ -392,5364 +309,3889 @@
   #define ctypes_offset (cbits_offset + cbit_length)
   #define tables_length (ctypes_offset + 256)
   
  -/* ____ END internal.h ____ */
  -
  -#ifndef STR_PCRE_GENTAB
  -
  -/* ____ BEGIN pcre.c ____ */
  -
  -/* Use a macro for debugging printing, 'cause that eliminates the use of #ifdef
  -inline, and there are *still* stupid compilers about that don't like indented
  -pre-processor statements. I suppose it's only been 10 years... */
  -
  -/* Include the internals header, which itself includes Standard C headers plus
  -the external pcre header. */
  -
  -/* Allow compilation as C++ source code, should anybody want to do that. */
  +#ifndef STR_PCRE_TAB
   
   #ifdef __cplusplus
   #define class pcre_class
   #endif
   
  -/* Maximum number of items on the nested bracket stacks at compile time. This
  -applies to the nesting of all kinds of parentheses. It does not limit
  -un-nested, non-capturing parentheses. This number can be made bigger if
  -necessary - it is used to dimension one int and one unsigned char vector at
  -compile time. */
  -
   #define BRASTACK_SIZE 200
   
  -/* The number of bytes in a literal character string above which we can't add
  -any more is different when UTF-8 characters may be encountered. */
  -
   #ifdef STR_PCRE_SUPPORT_UTF8
   #define MAXLIT 250
   #else
   #define MAXLIT 255
   #endif
   
  -/* Min and max values for the common repeats; for the maxima, 0 => infinity */
  -
   static const char rep_min[] = { 0, 0, 1, 1, 0, 0 };
   static const char rep_max[] = { 0, 0, 0, 0, 1, 1 };
   
  -/* Text forms of OP_ values and things, for debugging (not all used) */
  -
  -/* Table for handling escaped characters in the range '0'-'z'. Positive returns
  -are simple data values; negative values are for special things like \d and so
  -on. Zero means further processing is needed (for things like \x), or the escape
  -is invalid. */
  -
   static const short int escapes[] = {
  -    0,      0,      0,      0,      0,      0,      0,      0,   /* 0 - 7 */
  -    0,      0,    ':',    ';',    '<',    '=',    '>',    '?',   /* 8 - ? */
  -  '@', -ESC_A, -ESC_B,      0, -ESC_D,      0,      0,      0,   /* @ - G */
  -    0,      0,      0,      0,      0,      0,      0,      0,   /* H - O */
  -    0,      0,      0, -ESC_S,      0,      0,      0, -ESC_W,   /* P - W */
  -    0,      0, -ESC_Z,    '[',   '\\',    ']',    '^',    '_',   /* X - _ */
  -  '`',      7, -ESC_b,      0, -ESC_d,  ESC_E,  ESC_F,      0,   /* ` - g */
  -    0,      0,      0,      0,      0,      0,  ESC_N,      0,   /* h - o */
  -    0,      0,  ESC_R, -ESC_s,  ESC_T,      0,      0, -ESC_w,   /* p - w */
  -    0,      0, -ESC_z                                            /* x - z */
  +	0, 0, 0, 0, 0, 0, 0, 0,
  +	0, 0, ':', ';', '<', '=', '>', '?',
  +	'@', -ESC_A, -ESC_B, 0, -ESC_D, 0, 0, 0,
  +	0, 0, 0, 0, 0, 0, 0, 0,
  +	0, 0, 0, -ESC_S, 0, 0, 0, -ESC_W,
  +	0, 0, -ESC_Z, '[', '\\', ']', '^', '_',
  +	'`', 7, -ESC_b, 0, -ESC_d, ESC_E, ESC_F, 0,
  +	0, 0, 0, 0, 0, 0, ESC_N, 0,
  +	0, 0, ESC_R, -ESC_s, ESC_T, 0, 0, -ESC_w,
  +	0, 0, -ESC_z
   };
   
  -/* Tables of names of POSIX character classes and their lengths. The list is
  -terminated by a zero length entry. The first three must be alpha, upper, lower,
  -as this is assumed for handling case independence. */
  -
   static const char *posix_names[] = {
  -  "alpha", "lower", "upper",
  -  "alnum", "ascii", "cntrl", "digit", "graph",
  -  "print", "punct", "space", "word",  "xdigit" };
  +	"alpha", "lower", "upper",
  +	"alnum", "ascii", "cntrl", "digit", "graph",
  +	"print", "punct", "space", "word", "xdigit"
  +};
   
   static const uschar posix_name_lengths[] = {
  -  5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 6, 0 };
  -
  -/* Table of class bit maps for each POSIX class; up to three may be combined
  -to form the class. */
  +	5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 6, 0
  +};
   
   static const int posix_class_maps[] = {
  -  cbit_lower, cbit_upper, -1,             /* alpha */
  -  cbit_lower, -1,         -1,             /* lower */
  -  cbit_upper, -1,         -1,             /* upper */
  -  cbit_digit, cbit_lower, cbit_upper,     /* alnum */
  -  cbit_print, cbit_cntrl, -1,             /* ascii */
  -  cbit_cntrl, -1,         -1,             /* cntrl */
  -  cbit_digit, -1,         -1,             /* digit */
  -  cbit_graph, -1,         -1,             /* graph */
  -  cbit_print, -1,         -1,             /* print */
  -  cbit_punct, -1,         -1,             /* punct */
  -  cbit_space, -1,         -1,             /* space */
  -  cbit_word,  -1,         -1,             /* word */
  -  cbit_xdigit,-1,         -1              /* xdigit */
  +	cbit_lower, cbit_upper, -1,
  +	cbit_lower, -1, -1,
  +	cbit_upper, -1, -1,
  +	cbit_digit, cbit_lower, cbit_upper,
  +	cbit_print, cbit_cntrl, -1,
  +	cbit_cntrl, -1, -1,
  +	cbit_digit, -1, -1,
  +	cbit_graph, -1, -1,
  +	cbit_print, -1, -1,
  +	cbit_punct, -1, -1,
  +	cbit_space, -1, -1,
  +	cbit_word, -1, -1,
  +	cbit_xdigit, -1, -1
   };
   
  -/* Definition to allow mutual recursion */
  -
   static BOOL
  -  compile_regex(int, int, int *, uschar **, const uschar **, const char **,
  -    BOOL, int, int *, int *, compile_data *);
  -
  -/* Structure for building a chain of data that actually lives on the
  -stack, for holding the values of the subject pointer at the start of each
  -subpattern, so as to detect when an empty string has been matched by a
  -subpattern - to break infinite loops. */
  +compile_regex(int, int, int *, uschar **, const uschar **, const char **,
  +			  BOOL, int, int *, int *, compile_data *);
   
   typedef struct eptrblock {
  -  struct eptrblock *prev;
  -  const uschar *saved_eptr;
  +	struct eptrblock *prev;
  +	const uschar *saved_eptr;
   } eptrblock;
   
  -/* Flag bits for the match() function */
  -
  -#define match_condassert   0x01    /* Called to check a condition assertion */
  -#define match_isgroup      0x02    /* Set if start of bracketed group */
  +#define match_condassert   0x01
  +#define match_isgroup      0x02
   
  -/*************************************************
  -*               Global variables                 *
  -*************************************************/
  -
  -/* PCRE is thread-clean and doesn't use any global variables in the normal
  -sense. However, it calls memory allocation and free functions via the two
  -indirections below, which are can be changed by the caller, but are shared
  -between all threads. */
  -
  -void *(*pcre_malloc)(size_t) = malloc;
  -void  (*pcre_free)(void *) = free;
  -
  -/*************************************************
  -*    Macros and tables for character handling    *
  -*************************************************/
  -
  -/* When UTF-8 encoding is being used, a character is no longer just a single
  -byte. The macros for character handling generate simple sequences when used in
  -byte-mode, and more complicated ones for UTF-8 characters. */
  +void *(*pcre_malloc) (size_t) = malloc;
  +void (*pcre_free) (void *) = free;
   
   #ifndef STR_PCRE_SUPPORT_UTF8
   #define GETCHARINC(c, eptr) c = *eptr++;
   #define GETCHARLEN(c, eptr, len) c = *eptr;
   #define BACKCHAR(eptr)
   
  -#else   /* STR_PCRE_SUPPORT_UTF8 */
  -
  -/* Get the next UTF-8 character, advancing the pointer */
  +#else
   
   #define GETCHARINC(c, eptr) \
     c = *eptr++; \
     if (md->utf8 && (c & 0xc0) == 0xc0) \
       { \
  -    int a = utf8_table4[c & 0x3f];  /* Number of additional bytes */ \
  -    int s = 6 - a;                  /* Amount to shift next byte */  \
  -    c &= utf8_table3[a];            /* Low order bits from first byte */ \
  +    int a = utf8_table4[c & 0x3f];   \
  +    int s = 6*a; \
  +    c = (c & utf8_table3[a]) << s; \
       while (a-- > 0) \
         { \
  +      s -= 6; \
         c |= (*eptr++ & 0x3f) << s; \
  -      s += 6; \
         } \
       }
   
  -/* Get the next UTF-8 character, not advancing the pointer, setting length */
  -
   #define GETCHARLEN(c, eptr, len) \
     c = *eptr; \
     len = 1; \
     if (md->utf8 && (c & 0xc0) == 0xc0) \
       { \
       int i; \
  -    int a = utf8_table4[c & 0x3f];  /* Number of additional bytes */ \
  -    int s = 6 - a;                  /* Amount to shift next byte */  \
  -    c &= utf8_table3[a];            /* Low order bits from first byte */ \
  +    int a = utf8_table4[c & 0x3f];   \
  +    int s = 6*a; \
  +    c = (c & utf8_table3[a]) << s; \
       for (i = 1; i <= a; i++) \
         { \
  +      s -= 6; \
         c |= (eptr[i] & 0x3f) << s; \
  -      s += 6; \
         } \
       len += a; \
       }
   
  -/* If the pointer is not at the start of a character, move it back until
  -it is. */
  -
   #define BACKCHAR(eptr) while((*eptr & 0xc0) == 0x80) eptr--;
   
   #endif
   
  -/*************************************************
  -*             Default character tables           *
  -*************************************************/
  -
  -/* A default set of character tables is included in the PCRE binary. Its source
  -is built by the maketables auxiliary program, which uses the default C ctypes
  -functions, and put in the file chartables.c. These tables are used by PCRE
  -whenever the caller of pcre_compile() does not provide an alternate set of
  -tables. */
  -
  -#include "str_pcre_tab.c"
  +#include "str_pcre.tab"
   
   #ifdef STR_PCRE_SUPPORT_UTF8
  -/*************************************************
  -*           Tables for UTF-8 support             *
  -*************************************************/
  -
  -/* These are the breakpoints for different numbers of bytes in a UTF-8
  -character. */
  -
  -static int utf8_table1[] = { 0x7f, 0x7ff, 0xffff, 0x1fffff, 0x3ffffff, 0x7fffffff};
  -
  -/* These are the indicator bits and the mask for the data bits to set in the
  -first byte of a character, indexed by the number of additional bytes. */
   
  -static int utf8_table2[] = { 0,    0xc0, 0xe0, 0xf0, 0xf8, 0xfc};
  -static int utf8_table3[] = { 0xff, 0x1f, 0x0f, 0x07, 0x03, 0x01};
  +static int utf8_table1[] =
  +	{ 0x7f, 0x7ff, 0xffff, 0x1fffff, 0x3ffffff, 0x7fffffff };
   
  -/* Table of the number of extra characters, indexed by the first character
  -masked with 0x3f. The highest number for a valid UTF-8 character is in fact
  -0x3d. */
  +static int utf8_table2[] = { 0, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc };
  +static int utf8_table3[] = { 0xff, 0x1f, 0x0f, 0x07, 0x03, 0x01 };
   
   static uschar utf8_table4[] = {
  -  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  -  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  -  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
  -  3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5 };
  -
  -/*************************************************
  -*       Convert character value to UTF-8         *
  -*************************************************/
  -
  -/* This function takes an integer value in the range 0 - 0x7fffffff
  -and encodes it as a UTF-8 character in 0 to 6 bytes.
  -
  -Arguments:
  -  cvalue     the character value
  -  buffer     pointer to buffer for result - at least 6 bytes long
  -
  -Returns:     number of characters placed in the buffer
  -*/
  +	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  +	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  +	2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
  +	3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5
  +};
   
  -static int
  -ord2utf8(int cvalue, uschar *buffer)
  +static int ord2utf8(int cvalue, uschar * buffer)
   {
  -register int i, j;
  -for (i = 0; i < sizeof(utf8_table1)/sizeof(int); i++)
  -  if (cvalue <= utf8_table1[i]) break;
  -*buffer++ = utf8_table2[i] | (cvalue & utf8_table3[i]);
  -cvalue >>= 6 - i;
  -for (j = 0; j < i; j++)
  -  {
  -  *buffer++ = 0x80 | (cvalue & 0x3f);
  -  cvalue >>= 6;
  -  }
  -return i + 1;
  +	register int i, j;
  +	for (i = 0; i < sizeof (utf8_table1) / sizeof (int); i++)
  +		if (cvalue <= utf8_table1[i])
  +			break;
  +	buffer += i;
  +	for (j = i; j > 0; j--) {
  +		*buffer-- = 0x80 | (cvalue & 0x3f);
  +		cvalue >>= 6;
  +	}
  +	*buffer = utf8_table2[i] | cvalue;
  +	return i + 1;
   }
   #endif
   
  -/*************************************************
  -*          Return version string                 *
  -*************************************************/
  -
   #define STRING(a)  # a
   #define XSTRING(s) STRING(s)
   
  -const char *
  -pcre_version(void)
  +const char *pcre_version(void)
   {
  -return XSTRING(PCRE_MAJOR) "." XSTRING(PCRE_MINOR) " " XSTRING(PCRE_DATE);
  +	return XSTRING(PCRE_MAJOR) "." XSTRING(PCRE_MINOR) " " XSTRING(PCRE_DATE);
   }
   
  -/*************************************************
  -* (Obsolete) Return info about compiled pattern  *
  -*************************************************/
  -
  -/* This is the original "info" function. It picks potentially useful data out
  -of the private structure, but its interface was too rigid. It remains for
  -backwards compatibility. The public options are passed back in an int - though
  -the re->options field has been expanded to a long int, all the public options
  -at the low end of it, and so even on 16-bit systems this will still be OK.
  -Therefore, I haven't changed the API for pcre_info().
  -
  -Arguments:
  -  external_re   points to compiled code
  -  optptr        where to pass back the options
  -  first_char    where to pass back the first character,
  -                or -1 if multiline and all branches start ^,
  -                or -2 otherwise
  -
  -Returns:        number of capturing subpatterns
  -                or negative values on error
  -*/
  -
  -int
  -pcre_info(const pcre *external_re, int *optptr, int *first_char)
  +int pcre_info(const pcre * external_re, int *optptr, int *first_char)
   {
  -const real_pcre *re = (const real_pcre *)external_re;
  -if (re == NULL) return PCRE_ERROR_NULL;
  -if (re->magic_number != MAGIC_NUMBER) return PCRE_ERROR_BADMAGIC;
  -if (optptr != NULL) *optptr = (int)(re->options & PUBLIC_OPTIONS);
  -if (first_char != NULL)
  -  *first_char = ((re->options & PCRE_FIRSTSET) != 0)? re->first_char :
  -     ((re->options & PCRE_STARTLINE) != 0)? -1 : -2;
  -return re->top_bracket;
  +	const pcre_st *re = (const pcre_st *)external_re;
  +	if (re == NULL)
  +		return PCRE_ERROR_NULL;
  +	if (re->magic_number != MAGIC_NUMBER)
  +		return PCRE_ERROR_BADMAGIC;
  +	if (optptr != NULL)
  +		*optptr = (int)(re->options & PUBLIC_OPTIONS);
  +	if (first_char != NULL)
  +		*first_char = ((re->options & PCRE_FIRSTSET) != 0) ? re->first_char :
  +			((re->options & PCRE_STARTLINE) != 0) ? -1 : -2;
  +	return re->top_bracket;
   }
   
  -/*************************************************
  -*        Return info about compiled pattern      *
  -*************************************************/
  -
  -/* This is a newer "info" function which has an extensible interface so
  -that additional items can be added compatibly.
  -
  -Arguments:
  -  external_re      points to compiled code
  -  external_study   points to study data, or NULL
  -  what             what information is required
  -  where            where to put the information
  -
  -Returns:           0 if data returned, negative on error
  -*/
  -
   int
  -pcre_fullinfo(const pcre *external_re, const pcre_extra *study_data, int what,
  -  void *where)
  +pcre_fullinfo(const pcre * external_re, const pcre_extra * study_data,
  +			  int what, void *where)
   {
  -const real_pcre *re = (const real_pcre *)external_re;
  -const real_pcre_extra *study = (const real_pcre_extra *)study_data;
  -
  -if (re == NULL || where == NULL) return PCRE_ERROR_NULL;
  -if (re->magic_number != MAGIC_NUMBER) return PCRE_ERROR_BADMAGIC;
  +	const pcre_st *re = (const pcre_st *)external_re;
  +	const pcre_extra_st *study = (const pcre_extra_st *)study_data;
   
  -switch (what)
  -  {
  -  case PCRE_INFO_OPTIONS:
  -  *((unsigned long int *)where) = re->options & PUBLIC_OPTIONS;
  -  break;
  -
  -  case PCRE_INFO_SIZE:
  -  *((size_t *)where) = re->size;
  -  break;
  -
  -  case PCRE_INFO_CAPTURECOUNT:
  -  *((int *)where) = re->top_bracket;
  -  break;
  -
  -  case PCRE_INFO_BACKREFMAX:
  -  *((int *)where) = re->top_backref;
  -  break;
  -
  -  case PCRE_INFO_FIRSTCHAR:
  -  *((int *)where) =
  -    ((re->options & PCRE_FIRSTSET) != 0)? re->first_char :
  -    ((re->options & PCRE_STARTLINE) != 0)? -1 : -2;
  -  break;
  -
  -  case PCRE_INFO_FIRSTTABLE:
  -  *((const uschar **)where) =
  -    (study != NULL && (study->options & PCRE_STUDY_MAPPED) != 0)?
  -      study->start_bits : NULL;
  -  break;
  -
  -  case PCRE_INFO_LASTLITERAL:
  -  *((int *)where) =
  -    ((re->options & PCRE_REQCHSET) != 0)? re->req_char : -1;
  -  break;
  +	if (re == NULL || where == NULL)
  +		return PCRE_ERROR_NULL;
  +	if (re->magic_number != MAGIC_NUMBER)
  +		return PCRE_ERROR_BADMAGIC;
  +
  +	switch (what) {
  +		case PCRE_INFO_OPTIONS:
  +			*((unsigned long int *)where) = re->options & PUBLIC_OPTIONS;
  +			break;
  +
  +		case PCRE_INFO_SIZE:
  +			*((size_t *) where) = re->size;
  +			break;
  +
  +		case PCRE_INFO_CAPTURECOUNT:
  +			*((int *)where) = re->top_bracket;
  +			break;
  +
  +		case PCRE_INFO_BACKREFMAX:
  +			*((int *)where) = re->top_backref;
  +			break;
  +
  +		case PCRE_INFO_FIRSTCHAR:
  +			*((int *)where) =
  +				((re->options & PCRE_FIRSTSET) != 0) ? re->first_char :
  +				((re->options & PCRE_STARTLINE) != 0) ? -1 : -2;
  +			break;
  +
  +		case PCRE_INFO_FIRSTTABLE:
  +			*((const uschar **)where) =
  +				(study != NULL && (study->options & PCRE_STUDY_MAPPED) != 0) ?
  +				study->start_bits : NULL;
  +			break;
  +
  +		case PCRE_INFO_LASTLITERAL:
  +			*((int *)where) =
  +				((re->options & PCRE_REQCHSET) != 0) ? re->req_char : -1;
  +			break;
  +
  +		default:
  +			return PCRE_ERROR_BADOPTION;
  +	}
   
  -  default: return PCRE_ERROR_BADOPTION;
  -  }
  -
  -return 0;
  +	return 0;
   }
   
  -/*************************************************
  -*            Handle escapes                      *
  -*************************************************/
  -
  -/* This function is called when a \ has been encountered. It either returns a
  -positive value for a simple escape such as \n, or a negative value which
  -encodes one of the more complicated things such as \d. When UTF-8 is enabled,
  -a positive value greater than 255 may be returned. On entry, ptr is pointing at
  -the \. On exit, it is on the final character of the escape sequence.
  -
  -Arguments:
  -  ptrptr     points to the pattern position pointer
  -  errorptr   points to the pointer to the error message
  -  bracount   number of previous extracting brackets
  -  options    the options bits
  -  isclass    TRUE if inside a character class
  -  cd         pointer to char tables block
  -
  -Returns:     zero or positive => a data character
  -             negative => a special escape sequence
  -             on error, errorptr is set
  -*/
  -
   static int
  -check_escape(const uschar **ptrptr, const char **errorptr, int bracount,
  -  int options, BOOL isclass, compile_data *cd)
  +check_escape(const uschar ** ptrptr, const char **errorptr, int bracount,
  +			 int options, BOOL isclass, compile_data * cd)
   {
  -const uschar *ptr = *ptrptr;
  -int c, i;
  +	const uschar *ptr = *ptrptr;
  +	int c, i;
   
  -/* If backslash is at the end of the pattern, it's an error. */
  +	c = *(++ptr);
  +	if (c == 0)
  +		*errorptr = ERR1;
  +
  +	else if (c < '0' || c > 'z') {
  +	}
  +
  +	else if ((i = escapes[c - '0']) != 0)
  +		c = i;
  +
  +	else {
  +		const uschar *oldptr;
  +		switch (c) {
  +			case '1':
  +			case '2':
  +			case '3':
  +			case '4':
  +			case '5':
  +			case '6':
  +			case '7':
  +			case '8':
  +			case '9':
  +
  +				if (!isclass) {
  +					oldptr = ptr;
  +					c -= '0';
  +					while ((cd->ctypes[ptr[1]] & ctype_digit) != 0)
  +						c = c * 10 + *(++ptr) - '0';
  +					if (c < 10 || c <= bracount) {
  +						c = -(ESC_REF + c);
  +						break;
  +					}
  +					ptr = oldptr;
  +				}
  +
  +				if ((c = *ptr) >= '8') {
  +					ptr--;
  +					c = 0;
  +					break;
  +				}
  +
  +			case '0':
  +				c -= '0';
  +				while (i++ < 2 && (cd->ctypes[ptr[1]] & ctype_digit) != 0 &&
  +					   ptr[1] != '8' && ptr[1] != '9')
  +					c = c * 8 + *(++ptr) - '0';
  +				c &= 255;
  +				break;
   
  -c = *(++ptr);
  -if (c == 0) *errorptr = ERR1;
  -
  -/* Digits or letters may have special meaning; all others are literals. */
  -
  -else if (c < '0' || c > 'z') {}
  -
  -/* Do an initial lookup in a table. A non-zero result is something that can be
  -returned immediately. Otherwise further processing may be required. */
  -
  -else if ((i = escapes[c - '0']) != 0) c = i;
  -
  -/* Escapes that need further processing, or are illegal. */
  -
  -else
  -  {
  -  const uschar *oldptr;
  -  switch (c)
  -    {
  -    /* The handling of escape sequences consisting of a string of digits
  -    starting with one that is not zero is not straightforward. By experiment,
  -    the way Perl works seems to be as follows:
  -
  -    Outside a character class, the digits are read as a decimal number. If the
  -    number is less than 10, or if there are that many previous extracting
  -    left brackets, then it is a back reference. Otherwise, up to three octal
  -    digits are read to form an escaped byte. Thus \123 is likely to be octal
  -    123 (cf \0123, which is octal 012 followed by the literal 3). If the octal
  -    value is greater than 377, the least significant 8 bits are taken. Inside a
  -    character class, \ followed by a digit is always an octal number. */
  -
  -    case '1': case '2': case '3': case '4': case '5':
  -    case '6': case '7': case '8': case '9':
  -
  -    if (!isclass)
  -      {
  -      oldptr = ptr;
  -      c -= '0';
  -      while ((cd->ctypes[ptr[1]] & ctype_digit) != 0)
  -        c = c * 10 + *(++ptr) - '0';
  -      if (c < 10 || c <= bracount)
  -        {
  -        c = -(ESC_REF + c);
  -        break;
  -        }
  -      ptr = oldptr;      /* Put the pointer back and fall through */
  -      }
  -
  -    /* Handle an octal number following \. If the first digit is 8 or 9, Perl
  -    generates a binary zero byte and treats the digit as a following literal.
  -    Thus we have to pull back the pointer by one. */
  -
  -    if ((c = *ptr) >= '8')
  -      {
  -      ptr--;
  -      c = 0;
  -      break;
  -      }
  -
  -    /* \0 always starts an octal number, but we may drop through to here with a
  -    larger first octal digit. */
  -
  -    case '0':
  -    c -= '0';
  -    while(i++ < 2 && (cd->ctypes[ptr[1]] & ctype_digit) != 0 &&
  -      ptr[1] != '8' && ptr[1] != '9')
  -        c = c * 8 + *(++ptr) - '0';
  -    c &= 255;     /* Take least significant 8 bits */
  -    break;
  -
  -    /* \x is complicated when UTF-8 is enabled. \x{ddd} is a character number
  -    which can be greater than 0xff, but only if the ddd are hex digits. */
  -
  -    case 'x':
  +			case 'x':
   #ifdef STR_PCRE_SUPPORT_UTF8
  -    if (ptr[1] == '{' && (options & PCRE_UTF8) != 0)
  -      {
  -      const uschar *pt = ptr + 2;
  -      register int count = 0;
  -      c = 0;
  -      while ((cd->ctypes[*pt] & ctype_xdigit) != 0)
  -        {
  -        count++;
  -        c = c * 16 + cd->lcc[*pt] -
  -          (((cd->ctypes[*pt] & ctype_digit) != 0)? '0' : 'W');
  -        pt++;
  -        }
  -      if (*pt == '}')
  -        {
  -        if (c < 0 || count > 8) *errorptr = ERR34;
  -        ptr = pt;
  -        break;
  -        }
  -      /* If the sequence of hex digits does not end with '}', then we don't
  -      recognize this construct; fall through to the normal \x handling. */
  -      }
  +				if (ptr[1] == '{' && (options & PCRE_UTF8) != 0) {
  +					const uschar *pt = ptr + 2;
  +					register int count = 0;
  +					c = 0;
  +					while ((cd->ctypes[*pt] & ctype_xdigit) != 0) {
  +						count++;
  +						c = c * 16 + cd->lcc[*pt] -
  +							(((cd->
  +							   ctypes[*pt] & ctype_digit) != 0) ? '0' : 'W');
  +						pt++;
  +					}
  +					if (*pt == '}') {
  +						if (c < 0 || count > 8)
  +							*errorptr = ERR34;
  +						ptr = pt;
  +						break;
  +					}
  +				}
   #endif
   
  -    /* Read just a single hex char */
  -
  -    c = 0;
  -    while (i++ < 2 && (cd->ctypes[ptr[1]] & ctype_xdigit) != 0)
  -      {
  -      ptr++;
  -      c = c * 16 + cd->lcc[*ptr] -
  -        (((cd->ctypes[*ptr] & ctype_digit) != 0)? '0' : 'W');
  -      }
  -    break;
  -
  -    /* Other special escapes not starting with a digit are straightforward */
  -
  -    case 'c':
  -    c = *(++ptr);
  -    if (c == 0)
  -      {
  -      *errorptr = ERR2;
  -      return 0;
  -      }
  -
  -    /* A letter is upper-cased; then the 0x40 bit is flipped */
  -
  -    if (c >= 'a' && c <= 'z') c = cd->fcc[c];
  -    c ^= 0x40;
  -    break;
  -
  -    /* PCRE_EXTRA enables extensions to Perl in the matter of escapes. Any
  -    other alphameric following \ is an error if PCRE_EXTRA was set; otherwise,
  -    for Perl compatibility, it is a literal. This code looks a bit odd, but
  -    there used to be some cases other than the default, and there may be again
  -    in future, so I haven't "optimized" it. */
  -
  -    default:
  -    if ((options & PCRE_EXTRA) != 0) switch(c)
  -      {
  -      default:
  -      *errorptr = ERR3;
  -      break;
  -      }
  -    break;
  -    }
  -  }
  +				c = 0;
  +				while (i++ < 2 && (cd->ctypes[ptr[1]] & ctype_xdigit) != 0) {
  +					ptr++;
  +					c = c * 16 + cd->lcc[*ptr] -
  +						(((cd->ctypes[*ptr] & ctype_digit) != 0) ? '0' : 'W');
  +				}
  +				break;
  +
  +			case 'c':
  +				c = *(++ptr);
  +				if (c == 0) {
  +					*errorptr = ERR2;
  +					return 0;
  +				}
  +
  +				if (c >= 'a' && c <= 'z')
  +					c = cd->fcc[c];
  +				c ^= 0x40;
  +				break;
  +
  +			default:
  +				if ((options & PCRE_EXTRA) != 0)
  +					switch (c) {
  +						default:
  +							*errorptr = ERR3;
  +							break;
  +					}
  +				break;
  +		}
  +	}
   
  -*ptrptr = ptr;
  -return c;
  +	*ptrptr = ptr;
  +	return c;
   }
   
  -/*************************************************
  -*            Check for counted repeat            *
  -*************************************************/
  -
  -/* This function is called when a '{' is encountered in a place where it might
  -start a quantifier. It looks ahead to see if it really is a quantifier or not.
  -It is only a quantifier if it is one of the forms {ddd} {ddd,} or {ddd,ddd}
  -where the ddds are digits.
  -
  -Arguments:
  -  p         pointer to the first char after '{'
  -  cd        pointer to char tables block
  -
  -Returns:    TRUE or FALSE
  -*/
  -
  -static BOOL
  -is_counted_repeat(const uschar *p, compile_data *cd)
  +static BOOL is_counted_repeat(const uschar * p, compile_data * cd)
   {
  -if ((cd->ctypes[*p++] & ctype_digit) == 0) return FALSE;
  -while ((cd->ctypes[*p] & ctype_digit) != 0) p++;
  -if (*p == '}') return TRUE;
  -
  -if (*p++ != ',') return FALSE;
  -if (*p == '}') return TRUE;
  -
  -if ((cd->ctypes[*p++] & ctype_digit) == 0) return FALSE;
  -while ((cd->ctypes[*p] & ctype_digit) != 0) p++;
  -return (*p == '}');
  +	if ((cd->ctypes[*p++] & ctype_digit) == 0)
  +		return FALSE;
  +	while ((cd->ctypes[*p] & ctype_digit) != 0)
  +		p++;
  +	if (*p == '}')
  +		return TRUE;
  +
  +	if (*p++ != ',')
  +		return FALSE;
  +	if (*p == '}')
  +		return TRUE;
  +
  +	if ((cd->ctypes[*p++] & ctype_digit) == 0)
  +		return FALSE;
  +	while ((cd->ctypes[*p] & ctype_digit) != 0)
  +		p++;
  +	return (*p == '}');
   }
   
  -/*************************************************
  -*         Read repeat counts                     *
  -*************************************************/
  -
  -/* Read an item of the form {n,m} and return the values. This is called only
  -after is_counted_repeat() has confirmed that a repeat-count quantifier exists,
  -so the syntax is guaranteed to be correct, but we need to check the values.
  -
  -Arguments:
  -  p          pointer to first char after '{'
  -  minp       pointer to int for min
  -  maxp       pointer to int for max
  -             returned as -1 if no max
  -  errorptr   points to pointer to error message
  -  cd         pointer to character tables clock
  -
  -Returns:     pointer to '}' on success;
  -             current ptr on error, with errorptr set
  -*/
  -
  -static const uschar *
  -read_repeat_counts(const uschar *p, int *minp, int *maxp,
  -  const char **errorptr, compile_data *cd)
  +static const uschar *read_repeat_counts(const uschar * p, int *minp,
  +										int *maxp, const char **errorptr,
  +										compile_data * cd)
   {
  -int min = 0;
  -int max = -1;
  +	int min = 0;
  +	int max = -1;
   
  -while ((cd->ctypes[*p] & ctype_digit) != 0) min = min * 10 + *p++ - '0';
  +	while ((cd->ctypes[*p] & ctype_digit) != 0)
  +		min = min * 10 + *p++ - '0';
   
  -if (*p == '}') max = min; else
  -  {
  -  if (*(++p) != '}')
  -    {
  -    max = 0;
  -    while((cd->ctypes[*p] & ctype_digit) != 0) max = max * 10 + *p++ - '0';
  -    if (max < min)
  -      {
  -      *errorptr = ERR4;
  -      return p;
  -      }
  -    }
  -  }
  -
  -/* Do paranoid checks, then fill in the required variables, and pass back the
  -pointer to the terminating '}'. */
  -
  -if (min > 65535 || max > 65535)
  -  *errorptr = ERR5;
  -else
  -  {
  -  *minp = min;
  -  *maxp = max;
  -  }
  -return p;
  +	if (*p == '}')
  +		max = min;
  +	else {
  +		if (*(++p) != '}') {
  +			max = 0;
  +			while ((cd->ctypes[*p] & ctype_digit) != 0)
  +				max = max * 10 + *p++ - '0';
  +			if (max < min) {
  +				*errorptr = ERR4;
  +				return p;
  +			}
  +		}
  +	}
  +
  +	if (min > 65535 || max > 65535)
  +		*errorptr = ERR5;
  +	else {
  +		*minp = min;
  +		*maxp = max;
  +	}
  +	return p;
   }
   
  -/*************************************************
  -*        Find the fixed length of a pattern      *
  -*************************************************/
  -
  -/* Scan a pattern and compute the fixed length of subject that will match it,
  -if the length is fixed. This is needed for dealing with backward assertions.
  -
  -Arguments:
  -  code     points to the start of the pattern (the bracket)
  -  options  the compiling options
  -
  -Returns:   the fixed length, or -1 if there is no fixed length
  -*/
  -
  -static int
  -find_fixedlength(uschar *code, int options)
  +static int find_fixedlength(uschar * code, int options)
   {
  -int length = -1;
  +	int length = -1;
   
  -register int branchlength = 0;
  -register uschar *cc = code + 3;
  +	register int branchlength = 0;
  +	register uschar *cc = code + 3;
   
  -/* Scan along the opcodes for this branch. If we get to the end of the
  -branch, check the length against that of the other branches. */
  +	for (;;) {
  +		int d;
  +		register int op = *cc;
  +		if (op >= OP_BRA)
  +			op = OP_BRA;
  +
  +		switch (op) {
  +			case OP_BRA:
  +			case OP_ONCE:
  +			case OP_COND:
  +				d = find_fixedlength(cc, options);
  +				if (d < 0)
  +					return -1;
  +				branchlength += d;
  +				do
  +					cc += (cc[1] << 8) + cc[2];
  +				while (*cc == OP_ALT);
  +				cc += 3;
  +				break;
  +
  +			case OP_ALT:
  +			case OP_KET:
  +			case OP_KETRMAX:
  +			case OP_KETRMIN:
  +			case OP_END:
  +				if (length < 0)
  +					length = branchlength;
  +				else if (length != branchlength)
  +					return -1;
  +				if (*cc != OP_ALT)
  +					return length;
  +				cc += 3;
  +				branchlength = 0;
  +				break;
  +
  +			case OP_ASSERT:
  +			case OP_ASSERT_NOT:
  +			case OP_ASSERTBACK:
  +			case OP_ASSERTBACK_NOT:
  +				do
  +					cc += (cc[1] << 8) + cc[2];
  +				while (*cc == OP_ALT);
  +				cc += 3;
  +				break;
  +
  +			case OP_REVERSE:
  +			case OP_BRANUMBER:
  +			case OP_CREF:
  +				cc++;
  +			case OP_OPT:
  +				cc++;
  +			case OP_SOD:
  +			case OP_EOD:
  +			case OP_EODN:
  +			case OP_CIRC:
  +			case OP_DOLL:
  +			case OP_NOT_WORD_BOUNDARY:
  +			case OP_WORD_BOUNDARY:
  +				cc++;
  +				break;
   
  -for (;;)
  -  {
  -  int d;
  -  register int op = *cc;
  -  if (op >= OP_BRA) op = OP_BRA;
  -
  -  switch (op)
  -    {
  -    case OP_BRA:
  -    case OP_ONCE:
  -    case OP_COND:
  -    d = find_fixedlength(cc, options);
  -    if (d < 0) return -1;
  -    branchlength += d;
  -    do cc += (cc[1] << 8) + cc[2]; while (*cc == OP_ALT);
  -    cc += 3;
  -    break;
  -
  -    /* Reached end of a branch; if it's a ket it is the end of a nested
  -    call. If it's ALT it is an alternation in a nested call. If it is
  -    END it's the end of the outer call. All can be handled by the same code. */
  -
  -    case OP_ALT:
  -    case OP_KET:
  -    case OP_KETRMAX:
  -    case OP_KETRMIN:
  -    case OP_END:
  -    if (length < 0) length = branchlength;
  -      else if (length != branchlength) return -1;
  -    if (*cc != OP_ALT) return length;
  -    cc += 3;
  -    branchlength = 0;
  -    break;
  -
  -    /* Skip over assertive subpatterns */
  -
  -    case OP_ASSERT:
  -    case OP_ASSERT_NOT:
  -    case OP_ASSERTBACK:
  -    case OP_ASSERTBACK_NOT:
  -    do cc += (cc[1] << 8) + cc[2]; while (*cc == OP_ALT);
  -    cc += 3;
  -    break;
  -
  -    /* Skip over things that don't match chars */
  -
  -    case OP_REVERSE:
  -    case OP_BRANUMBER:
  -    case OP_CREF:
  -    cc++;
  -    /* Fall through */
  -
  -    case OP_OPT:
  -    cc++;
  -    /* Fall through */
  -
  -    case OP_SOD:
  -    case OP_EOD:
  -    case OP_EODN:
  -    case OP_CIRC:
  -    case OP_DOLL:
  -    case OP_NOT_WORD_BOUNDARY:
  -    case OP_WORD_BOUNDARY:
  -    cc++;
  -    break;
  -
  -    /* Handle char strings. In UTF-8 mode we must count characters, not bytes.
  -    This requires a scan of the string, unfortunately. We assume valid UTF-8
  -    strings, so all we do is reduce the length by one for byte whose bits are
  -    10xxxxxx. */
  -
  -    case OP_CHARS:
  -    branchlength += *(++cc);
  +			case OP_CHARS:
  +				branchlength += *(++cc);
   #ifdef STR_PCRE_SUPPORT_UTF8
  -    for (d = 1; d <= *cc; d++)
  -      if ((cc[d] & 0xc0) == 0x80) branchlength--;
  +				for (d = 1; d <= *cc; d++)
  +					if ((cc[d] & 0xc0) == 0x80)
  +						branchlength--;
   #endif
  -    cc += *cc + 1;
  -    break;
  -
  -    /* Handle exact repetitions */
  +				cc += *cc + 1;
  +				break;
   
  -    case OP_EXACT:
  -    case OP_TYPEEXACT:
  -    branchlength += (cc[1] << 8) + cc[2];
  -    cc += 4;
  -    break;
  -
  -    /* Handle single-char matchers */
  -
  -    case OP_NOT_DIGIT:
  -    case OP_DIGIT:
  -    case OP_NOT_WHITESPACE:
  -    case OP_WHITESPACE:
  -    case OP_NOT_WORDCHAR:
  -    case OP_WORDCHAR:
  -    case OP_ANY:
  -    branchlength++;
  -    cc++;
  -    break;
  -
  -    /* Check a class for variable quantification */
  -
  -    case OP_CLASS:
  -    cc += 33;
  -
  -    switch (*cc)
  -      {
  -      case OP_CRSTAR:
  -      case OP_CRMINSTAR:
  -      case OP_CRQUERY:
  -      case OP_CRMINQUERY:
  -      return -1;
  -
  -      case OP_CRRANGE:
  -      case OP_CRMINRANGE:
  -      if ((cc[1] << 8) + cc[2] != (cc[3] << 8) + cc[4]) return -1;
  -      branchlength += (cc[1] << 8) + cc[2];
  -      cc += 5;
  -      break;
  -
  -      default:
  -      branchlength++;
  -      }
  -    break;
  -
  -    /* Anything else is variable length */
  -
  -    default:
  -    return -1;
  -    }
  -  }
  -/* Control never gets here */
  +			case OP_EXACT:
  +			case OP_TYPEEXACT:
  +				branchlength += (cc[1] << 8) + cc[2];
  +				cc += 4;
  +				break;
  +
  +			case OP_NOT_DIGIT:
  +			case OP_DIGIT:
  +			case OP_NOT_WHITESPACE:
  +			case OP_WHITESPACE:
  +			case OP_NOT_WORDCHAR:
  +			case OP_WORDCHAR:
  +			case OP_ANY:
  +				branchlength++;
  +				cc++;
  +				break;
  +
  +			case OP_CLASS:
  +				cc += 33;
  +
  +				switch (*cc) {
  +					case OP_CRSTAR:
  +					case OP_CRMINSTAR:
  +					case OP_CRQUERY:
  +					case OP_CRMINQUERY:
  +						return -1;
  +
  +					case OP_CRRANGE:
  +					case OP_CRMINRANGE:
  +						if ((cc[1] << 8) + cc[2] != (cc[3] << 8) + cc[4])
  +							return -1;
  +						branchlength += (cc[1] << 8) + cc[2];
  +						cc += 5;
  +						break;
  +
  +					default:
  +						branchlength++;
  +				}
  +				break;
  +
  +			default:
  +				return -1;
  +		}
  +	}
   }
   
  -/*************************************************
  -*           Check for POSIX class syntax         *
  -*************************************************/
  -
  -/* This function is called when the sequence "[:" or "[." or "[=" is
  -encountered in a character class. It checks whether this is followed by an
  -optional ^ and then a sequence of letters, terminated by a matching ":]" or
  -".]" or "=]".
  -
  -Argument:
  -  ptr      pointer to the initial [
  -  endptr   where to return the end pointer
  -  cd       pointer to compile data
  -
  -Returns:   TRUE or FALSE
  -*/
  -
   static BOOL
  -check_posix_syntax(const uschar *ptr, const uschar **endptr, compile_data *cd)
  +check_posix_syntax(const uschar * ptr, const uschar ** endptr,
  +				   compile_data * cd)
   {
  -int terminator;          /* Don't combine these lines; the Solaris cc */
  -terminator = *(++ptr);   /* compiler warns about "non-constant" initializer. */
  -if (*(++ptr) == '^') ptr++;
  -while ((cd->ctypes[*ptr] & ctype_letter) != 0) ptr++;
  -if (*ptr == terminator && ptr[1] == ']')
  -  {
  -  *endptr = ptr;
  -  return TRUE;
  -  }
  -return FALSE;
  +	int terminator;
  +	terminator = *(++ptr);
  +	if (*(++ptr) == '^')
  +		ptr++;
  +	while ((cd->ctypes[*ptr] & ctype_letter) != 0)
  +		ptr++;
  +	if (*ptr == terminator && ptr[1] == ']') {
  +		*endptr = ptr;
  +		return TRUE;
  +	}
  +	return FALSE;
   }
   
  -/*************************************************
  -*          Check POSIX class name                *
  -*************************************************/
  -
  -/* This function is called to check the name given in a POSIX-style class entry
  -such as [:alnum:].
  -
  -Arguments:
  -  ptr        points to the first letter
  -  len        the length of the name
  -
  -Returns:     a value representing the name, or -1 if unknown
  -*/
  -
  -static int
  -check_posix_name(const uschar *ptr, int len)
  +static int check_posix_name(const uschar * ptr, int len)
   {
  -register int yield = 0;
  -while (posix_name_lengths[yield] != 0)
  -  {
  -  if (len == posix_name_lengths[yield] &&
  -    strncmp((const char *)ptr, posix_names[yield], len) == 0) return yield;
  -  yield++;
  -  }
  -return -1;
  +	register int yield = 0;
  +	while (posix_name_lengths[yield] != 0) {
  +		if (len == posix_name_lengths[yield] &&
  +			strncmp((const char *)ptr, posix_names[yield], len) == 0)
  +			return yield;
  +		yield++;
  +	}
  +	return -1;
   }
   
  -/*************************************************
  -*           Compile one branch                   *
  -*************************************************/
  -
  -/* Scan the pattern, compiling it into the code vector.
  -
  -Arguments:
  -  options      the option bits
  -  brackets     points to number of extracting brackets used
  -  code         points to the pointer to the current code point
  -  ptrptr       points to the current pattern pointer
  -  errorptr     points to pointer to error message
  -  optchanged   set to the value of the last OP_OPT item compiled
  -  reqchar      set to the last literal character required, else -1
  -  countlits    set to count of mandatory literal characters
  -  cd           contains pointers to tables
  -
  -Returns:       TRUE on success
  -               FALSE, with *errorptr set on error
  -*/
  -
   static BOOL
  -compile_branch(int options, int *brackets, uschar **codeptr,
  -  const uschar **ptrptr, const char **errorptr, int *optchanged,
  -  int *reqchar, int *countlits, compile_data *cd)
  +compile_branch(int options, int *brackets, uschar ** codeptr,
  +			   const uschar ** ptrptr, const char **errorptr, int *optchanged,
  +			   int *reqchar, int *countlits, compile_data * cd)
   {
  -int repeat_type, op_type;
  -int repeat_min, repeat_max;
  -int bravalue, length;
  -int greedy_default, greedy_non_default;
  -int prevreqchar;
  -int condcount = 0;
  -int subcountlits = 0;
  -register int c;
  -register uschar *code = *codeptr;
  -uschar *tempcode;
  -const uschar *ptr = *ptrptr;
  -const uschar *tempptr;
  -uschar *previous = NULL;
  -uschar class[32];
  -
  -/* Set up the default and non-default settings for greediness */
  -
  -greedy_default = ((options & PCRE_UNGREEDY) != 0);
  -greedy_non_default = greedy_default ^ 1;
  -
  -/* Initialize no required char, and count of literals */
  -
  -*reqchar = prevreqchar = -1;
  -*countlits = 0;
  -
  -/* Switch on next character until the end of the branch */
  -
  -for (;; ptr++)
  -  {
  -  BOOL negate_class;
  -  int class_charcount;
  -  int class_lastchar;
  -  int newoptions;
  -  int skipbytes;
  -  int subreqchar;
  -
  -  c = *ptr;
  -  if ((options & PCRE_EXTENDED) != 0)
  -    {
  -    if ((cd->ctypes[c] & ctype_space) != 0) continue;
  -    if (c == '#')
  -      {
  -      /* The space before the ; is to avoid a warning on a silly compiler
  -      on the Macintosh. */
  -      while ((c = *(++ptr)) != 0 && c != '\n') ;
  -      continue;
  -      }
  -    }
  -
  -  switch(c)
  -    {
  -    /* The branch terminates at end of string, |, or ). */
  -
  -    case 0:
  -    case '|':
  -    case ')':
  -    *codeptr = code;
  -    *ptrptr = ptr;
  -    return TRUE;
  -
  -    /* Handle single-character metacharacters */
  -
  -    case '^':
  -    previous = NULL;
  -    *code++ = OP_CIRC;
  -    break;
  -
  -    case '$':
  -    previous = NULL;
  -    *code++ = OP_DOLL;
  -    break;
  -
  -    case '.':
  -    previous = code;
  -    *code++ = OP_ANY;
  -    break;
  -
  -    /* Character classes. These always build a 32-byte bitmap of the permitted
  -    characters, except in the special case where there is only one character.
  -    For negated classes, we build the map as usual, then invert it at the end.
  -    */
  -
  -    case '[':
  -    previous = code;
  -    *code++ = OP_CLASS;
  -
  -    /* If the first character is '^', set the negation flag and skip it. */
  -
  -    if ((c = *(++ptr)) == '^')
  -      {
  -      negate_class = TRUE;
  -      c = *(++ptr);
  -      }
  -    else negate_class = FALSE;
  -
  -    /* Keep a count of chars so that we can optimize the case of just a single
  -    character. */
  -
  -    class_charcount = 0;
  -    class_lastchar = -1;
  -
  -    /* Initialize the 32-char bit map to all zeros. We have to build the
  -    map in a temporary bit of store, in case the class contains only 1
  -    character, because in that case the compiled code doesn't use the
  -    bit map. */
  -
  -    memset(class, 0, 32 * sizeof(uschar));
  -
  -    /* Process characters until ] is reached. By writing this as a "do" it
  -    means that an initial ] is taken as a data character. */
  -
  -    do
  -      {
  -      if (c == 0)
  -        {
  -        *errorptr = ERR6;
  -        goto FAILED;
  -        }
  -
  -      /* Handle POSIX class names. Perl allows a negation extension of the
  -      form [:^name]. A square bracket that doesn't match the syntax is
  -      treated as a literal. We also recognize the POSIX constructions
  -      [.ch.] and [=ch=] ("collating elements") and fault them, as Perl
  -      5.6 does. */
  -
  -      if (c == '[' &&
  -          (ptr[1] == ':' || ptr[1] == '.' || ptr[1] == '=') &&
  -          check_posix_syntax(ptr, &tempptr, cd))
  -        {
  -        BOOL local_negate = FALSE;
  -        int posix_class, i;
  -        register const uschar *cbits = cd->cbits;
  -
  -        if (ptr[1] != ':')
  -          {
  -          *errorptr = ERR31;
  -          goto FAILED;
  -          }
  -
  -        ptr += 2;
  -        if (*ptr == '^')
  -          {
  -          local_negate = TRUE;
  -          ptr++;
  -          }
  -
  -        posix_class = check_posix_name(ptr, tempptr - ptr);
  -        if (posix_class < 0)
  -          {
  -          *errorptr = ERR30;
  -          goto FAILED;
  -          }
  -
  -        /* If matching is caseless, upper and lower are converted to
  -        alpha. This relies on the fact that the class table starts with
  -        alpha, lower, upper as the first 3 entries. */
  -
  -        if ((options & PCRE_CASELESS) != 0 && posix_class <= 2)
  -          posix_class = 0;
  -
  -        /* Or into the map we are building up to 3 of the static class
  -        tables, or their negations. */
  -
  -        posix_class *= 3;
  -        for (i = 0; i < 3; i++)
  -          {
  -          int taboffset = posix_class_maps[posix_class + i];
  -          if (taboffset < 0) break;
  -          if (local_negate)
  -            for (c = 0; c < 32; c++) class[c] |= ~cbits[c+taboffset];
  -          else
  -            for (c = 0; c < 32; c++) class[c] |= cbits[c+taboffset];
  -          }
  -
  -        ptr = tempptr + 1;
  -        class_charcount = 10;  /* Set > 1; assumes more than 1 per class */
  -        continue;
  -        }
  -
  -      /* Backslash may introduce a single character, or it may introduce one
  -      of the specials, which just set a flag. Escaped items are checked for
  -      validity in the pre-compiling pass. The sequence \b is a special case.
  -      Inside a class (and only there) it is treated as backspace. Elsewhere
  -      it marks a word boundary. Other escapes have preset maps ready to
  -      or into the one we are building. We assume they have more than one
  -      character in them, so set class_count bigger than one. */
  -
  -      if (c == '\\')
  -        {
  -        c = check_escape(&ptr, errorptr, *brackets, options, TRUE, cd);
  -        if (-c == ESC_b) c = '\b';
  -        else if (c < 0)
  -          {
  -          register const uschar *cbits = cd->cbits;
  -          class_charcount = 10;
  -          switch (-c)
  -            {
  -            case ESC_d:
  -            for (c = 0; c < 32; c++) class[c] |= cbits[c+cbit_digit];
  -            continue;
  -
  -            case ESC_D:
  -            for (c = 0; c < 32; c++) class[c] |= ~cbits[c+cbit_digit];
  -            continue;
  -
  -            case ESC_w:
  -            for (c = 0; c < 32; c++) class[c] |= cbits[c+cbit_word];
  -            continue;
  -
  -            case ESC_W:
  -            for (c = 0; c < 32; c++) class[c] |= ~cbits[c+cbit_word];
  -            continue;
  -
  -            case ESC_s:
  -            for (c = 0; c < 32; c++) class[c] |= cbits[c+cbit_space];
  -            continue;
  -
  -            case ESC_S:
  -            for (c = 0; c < 32; c++) class[c] |= ~cbits[c+cbit_space];
  -            continue;
  -
  -            default:
  -            *errorptr = ERR7;
  -            goto FAILED;
  -            }
  -          }
  -
  -        /* Fall through if single character, but don't at present allow
  -        chars > 255 in UTF-8 mode. */
  +	int repeat_type, op_type;
  +	int repeat_min, repeat_max;
  +	int bravalue, length;
  +	int greedy_default, greedy_non_default;
  +	int prevreqchar;
  +	int condcount = 0;
  +	int subcountlits = 0;
  +	register int c;
  +	register uschar *code = *codeptr;
  +	uschar *tempcode;
  +	const uschar *ptr = *ptrptr;
  +	const uschar *tempptr;
  +	uschar *previous = NULL;
  +	uschar class[32];
  +
  +	greedy_default = ((options & PCRE_UNGREEDY) != 0);
  +	greedy_non_default = greedy_default ^ 1;
  +
  +	*reqchar = prevreqchar = -1;
  +	*countlits = 0;
  +
  +	for (;; ptr++) {
  +		BOOL negate_class;
  +		int class_charcount;
  +		int class_lastchar;
  +		int newoptions;
  +		int skipbytes;
  +		int subreqchar;
  +
  +		c = *ptr;
  +		if ((options & PCRE_EXTENDED) != 0) {
  +			if ((cd->ctypes[c] & ctype_space) != 0)
  +				continue;
  +			if (c == '#') {
  +				while ((c = *(++ptr)) != 0 && c != '\n') ;
  +				continue;
  +			}
  +		}
  +
  +		switch (c) {
  +			case 0:
  +			case '|':
  +			case ')':
  +				*codeptr = code;
  +				*ptrptr = ptr;
  +				return TRUE;
  +
  +			case '^':
  +				previous = NULL;
  +				*code++ = OP_CIRC;
  +				break;
  +
  +			case '$':
  +				previous = NULL;
  +				*code++ = OP_DOLL;
  +				break;
  +
  +			case '.':
  +				previous = code;
  +				*code++ = OP_ANY;
  +				break;
  +
  +			case '[':
  +				previous = code;
  +				*code++ = OP_CLASS;
  +
  +				if ((c = *(++ptr)) == '^') {
  +					negate_class = TRUE;
  +					c = *(++ptr);
  +				}
  +				else
  +					negate_class = FALSE;
  +
  +				class_charcount = 0;
  +				class_lastchar = -1;
  +
  +				memset(class, 0, 32 * sizeof (uschar));
  +
  +				do {
  +					if (c == 0) {
  +						*errorptr = ERR6;
  +						goto FAILED;
  +					}
  +
  +					if (c == '[' &&
  +						(ptr[1] == ':' || ptr[1] == '.' || ptr[1] == '=') &&
  +						check_posix_syntax(ptr, &tempptr, cd)) {
  +						BOOL local_negate = FALSE;
  +						int posix_class, i;
  +						register const uschar *cbits = cd->cbits;
  +
  +						if (ptr[1] != ':') {
  +							*errorptr = ERR31;
  +							goto FAILED;
  +						}
  +
  +						ptr += 2;
  +						if (*ptr == '^') {
  +							local_negate = TRUE;
  +							ptr++;
  +						}
  +
  +						posix_class = check_posix_name(ptr, tempptr - ptr);
  +						if (posix_class < 0) {
  +							*errorptr = ERR30;
  +							goto FAILED;
  +						}
  +
  +						if ((options & PCRE_CASELESS) != 0
  +							&& posix_class <= 2) posix_class = 0;
  +
  +						posix_class *= 3;
  +						for (i = 0; i < 3; i++) {
  +							int taboffset = posix_class_maps[posix_class + i];
  +							if (taboffset < 0)
  +								break;
  +							if (local_negate)
  +								for (c = 0; c < 32; c++)
  +									class[c] |= ~cbits[c + taboffset];
  +							else
  +								for (c = 0; c < 32; c++)
  +									class[c] |= cbits[c + taboffset];
  +						}
  +
  +						ptr = tempptr + 1;
  +						class_charcount = 10;
  +						continue;
  +					}
  +
  +					if (c == '\\') {
  +						c =
  +							check_escape(&ptr, errorptr, *brackets, options,
  +										 TRUE, cd);
  +						if (-c == ESC_b)
  +							c = '\b';
  +						else if (c < 0) {
  +							register const uschar *cbits = cd->cbits;
  +							class_charcount = 10;
  +							switch (-c) {
  +								case ESC_d:
  +									for (c = 0; c < 32; c++)
  +										class[c] |= cbits[c + cbit_digit];
  +									continue;
  +
  +								case ESC_D:
  +									for (c = 0; c < 32; c++)
  +										class[c] |= ~cbits[c + cbit_digit];
  +									continue;
  +
  +								case ESC_w:
  +									for (c = 0; c < 32; c++)
  +										class[c] |= cbits[c + cbit_word];
  +									continue;
  +
  +								case ESC_W:
  +									for (c = 0; c < 32; c++)
  +										class[c] |= ~cbits[c + cbit_word];
  +									continue;
  +
  +								case ESC_s:
  +									for (c = 0; c < 32; c++)
  +										class[c] |= cbits[c + cbit_space];
  +									continue;
  +
  +								case ESC_S:
  +									for (c = 0; c < 32; c++)
  +										class[c] |= ~cbits[c + cbit_space];
  +									continue;
  +
  +								default:
  +									*errorptr = ERR7;
  +									goto FAILED;
  +							}
  +						}
   
   #ifdef STR_PCRE_SUPPORT_UTF8
  -        if (c > 255)
  -          {
  -          *errorptr = ERR33;
  -          goto FAILED;
  -          }
  +						if (c > 255) {
  +							*errorptr = ERR33;
  +							goto FAILED;
  +						}
   #endif
  -        }
  +					}
   
  -      /* A single character may be followed by '-' to form a range. However,
  -      Perl does not permit ']' to be the end of the range. A '-' character
  -      here is treated as a literal. */
  -
  -      if (ptr[1] == '-' && ptr[2] != ']')
  -        {
  -        int d;
  -        ptr += 2;
  -        d = *ptr;
  -
  -        if (d == 0)
  -          {
  -          *errorptr = ERR6;
  -          goto FAILED;
  -          }
  -
  -        /* The second part of a range can be a single-character escape, but
  -        not any of the other escapes. Perl 5.6 treats a hyphen as a literal
  -        in such circumstances. */
  -
  -        if (d == '\\')
  -          {
  -          const uschar *oldptr = ptr;
  -          d = check_escape(&ptr, errorptr, *brackets, options, TRUE, cd);
  +					if (ptr[1] == '-' && ptr[2] != ']') {
  +						int d;
  +						ptr += 2;
  +						d = *ptr;
  +
  +						if (d == 0) {
  +							*errorptr = ERR6;
  +							goto FAILED;
  +						}
  +
  +						if (d == '\\') {
  +							const uschar *oldptr = ptr;
  +							d =
  +								check_escape(&ptr, errorptr, *brackets,
  +											 options, TRUE, cd);
   
   #ifdef STR_PCRE_SUPPORT_UTF8
  -          if (d > 255)
  -            {
  -            *errorptr = ERR33;
  -            goto FAILED;
  -            }
  +							if (d > 255) {
  +								*errorptr = ERR33;
  +								goto FAILED;
  +							}
   #endif
  -          /* \b is backslash; any other special means the '-' was literal */
  -
  -          if (d < 0)
  -            {
  -            if (d == -ESC_b) d = '\b'; else
  -              {
  -              ptr = oldptr - 2;
  -              goto SINGLE_CHARACTER;  /* A few lines below */
  -              }
  -            }
  -          }
  -
  -        if (d < c)
  -          {
  -          *errorptr = ERR8;
  -          goto FAILED;
  -          }
  -
  -        for (; c <= d; c++)
  -          {
  -          class[c/8] |= (1 << (c&7));
  -          if ((options & PCRE_CASELESS) != 0)
  -            {
  -            int uc = cd->fcc[c];           /* flip case */
  -            class[uc/8] |= (1 << (uc&7));
  -            }
  -          class_charcount++;                /* in case a one-char range */
  -          class_lastchar = c;
  -          }
  -        continue;   /* Go get the next char in the class */
  -        }
  -
  -      /* Handle a lone single character - we can get here for a normal
  -      non-escape char, or after \ that introduces a single character. */
  -
  -      SINGLE_CHARACTER:
  -
  -      class [c/8] |= (1 << (c&7));
  -      if ((options & PCRE_CASELESS) != 0)
  -        {
  -        c = cd->fcc[c];   /* flip case */
  -        class[c/8] |= (1 << (c&7));
  -        }
  -      class_charcount++;
  -      class_lastchar = c;
  -      }
  -
  -    /* Loop until ']' reached; the check for end of string happens inside the
  -    loop. This "while" is the end of the "do" above. */
  -
  -    while ((c = *(++ptr)) != ']');
  -
  -    /* If class_charcount is 1 and class_lastchar is not negative, we saw
  -    precisely one character. This doesn't need the whole 32-byte bit map.
  -    We turn it into a 1-character OP_CHAR if it's positive, or OP_NOT if
  -    it's negative. */
  -
  -    if (class_charcount == 1 && class_lastchar >= 0)
  -      {
  -      if (negate_class)
  -        {
  -        code[-1] = OP_NOT;
  -        }
  -      else
  -        {
  -        code[-1] = OP_CHARS;
  -        *code++ = 1;
  -        }
  -      *code++ = class_lastchar;
  -      }
  -
  -    /* Otherwise, negate the 32-byte map if necessary, and copy it into
  -    the code vector. */
  -
  -    else
  -      {
  -      if (negate_class)
  -        for (c = 0; c < 32; c++) code[c] = ~class[c];
  -      else
  -        memcpy(code, class, 32);
  -      code += 32;
  -      }
  -    break;
  -
  -    /* Various kinds of repeat */
  -
  -    case '{':
  -    if (!is_counted_repeat(ptr+1, cd)) goto NORMAL_CHAR;
  -    ptr = read_repeat_counts(ptr+1, &repeat_min, &repeat_max, errorptr, cd);
  -    if (*errorptr != NULL) goto FAILED;
  -    goto REPEAT;
  -
  -    case '*':
  -    repeat_min = 0;
  -    repeat_max = -1;
  -    goto REPEAT;
  -
  -    case '+':
  -    repeat_min = 1;
  -    repeat_max = -1;
  -    goto REPEAT;
  -
  -    case '?':
  -    repeat_min = 0;
  -    repeat_max = 1;
  -
  -    REPEAT:
  -    if (previous == NULL)
  -      {
  -      *errorptr = ERR9;
  -      goto FAILED;
  -      }
  -
  -    /* If the next character is '?' this is a minimizing repeat, by default,
  -    but if PCRE_UNGREEDY is set, it works the other way round. Advance to the
  -    next character. */
  -
  -    if (ptr[1] == '?')
  -      { repeat_type = greedy_non_default; ptr++; }
  -    else repeat_type = greedy_default;
  -
  -    /* If previous was a string of characters, chop off the last one and use it
  -    as the subject of the repeat. If there was only one character, we can
  -    abolish the previous item altogether. A repeat with a zero minimum wipes
  -    out any reqchar setting, backing up to the previous value. We must also
  -    adjust the countlits value. */
  -
  -    if (*previous == OP_CHARS)
  -      {
  -      int len = previous[1];
  -
  -      if (repeat_min == 0) *reqchar = prevreqchar;
  -      *countlits += repeat_min - 1;
  -
  -      if (len == 1)
  -        {
  -        c = previous[2];
  -        code = previous;
  -        }
  -      else
  -        {
  -        c = previous[len+1];
  -        previous[1]--;
  -        code--;
  -        }
  -      op_type = 0;                 /* Use single-char op codes */
  -      goto OUTPUT_SINGLE_REPEAT;   /* Code shared with single character types */
  -      }
  -
  -    /* If previous was a single negated character ([^a] or similar), we use
  -    one of the special opcodes, replacing it. The code is shared with single-
  -    character repeats by adding a suitable offset into repeat_type. */
  -
  -    else if ((int)*previous == OP_NOT)
  -      {
  -      op_type = OP_NOTSTAR - OP_STAR;  /* Use "not" opcodes */
  -      c = previous[1];
  -      code = previous;
  -      goto OUTPUT_SINGLE_REPEAT;
  -      }
  -
  -    /* If previous was a character type match (\d or similar), abolish it and
  -    create a suitable repeat item. The code is shared with single-character
  -    repeats by adding a suitable offset into repeat_type. */
  -
  -    else if ((int)*previous < OP_EODN || *previous == OP_ANY)
  -      {
  -      op_type = OP_TYPESTAR - OP_STAR;  /* Use type opcodes */
  -      c = *previous;
  -      code = previous;
  -
  -      OUTPUT_SINGLE_REPEAT:
  -
  -      /* If the maximum is zero then the minimum must also be zero; Perl allows
  -      this case, so we do too - by simply omitting the item altogether. */
  -
  -      if (repeat_max == 0) goto END_REPEAT;
  -
  -      /* Combine the op_type with the repeat_type */
  -
  -      repeat_type += op_type;
  -
  -      /* A minimum of zero is handled either as the special case * or ?, or as
  -      an UPTO, with the maximum given. */
  -
  -      if (repeat_min == 0)
  -        {
  -        if (repeat_max == -1) *code++ = OP_STAR + repeat_type;
  -          else if (repeat_max == 1) *code++ = OP_QUERY + repeat_type;
  -        else
  -          {
  -          *code++ = OP_UPTO + repeat_type;
  -          *code++ = repeat_max >> 8;
  -          *code++ = (repeat_max & 255);
  -          }
  -        }
  -
  -      /* The case {1,} is handled as the special case + */
  -
  -      else if (repeat_min == 1 && repeat_max == -1)
  -        *code++ = OP_PLUS + repeat_type;
  -
  -      /* The case {n,n} is just an EXACT, while the general case {n,m} is
  -      handled as an EXACT followed by an UPTO. An EXACT of 1 is optimized. */
  -
  -      else
  -        {
  -        if (repeat_min != 1)
  -          {
  -          *code++ = OP_EXACT + op_type;  /* NB EXACT doesn't have repeat_type */
  -          *code++ = repeat_min >> 8;
  -          *code++ = (repeat_min & 255);
  -          }
  -
  -        /* If the mininum is 1 and the previous item was a character string,
  -        we either have to put back the item that got cancelled if the string
  -        length was 1, or add the character back onto the end of a longer
  -        string. For a character type nothing need be done; it will just get
  -        put back naturally. Note that the final character is always going to
  -        get added below. */
  -
  -        else if (*previous == OP_CHARS)
  -          {
  -          if (code == previous) code += 2; else previous[1]++;
  -          }
  -
  -        /*  For a single negated character we also have to put back the
  -        item that got cancelled. */
  -
  -        else if (*previous == OP_NOT) code++;
  -
  -        /* If the maximum is unlimited, insert an OP_STAR. */
  -
  -        if (repeat_max < 0)
  -          {
  -          *code++ = c;
  -          *code++ = OP_STAR + repeat_type;
  -          }
  -
  -        /* Else insert an UPTO if the max is greater than the min. */
  -
  -        else if (repeat_max != repeat_min)
  -          {
  -          *code++ = c;
  -          repeat_max -= repeat_min;
  -          *code++ = OP_UPTO + repeat_type;
  -          *code++ = repeat_max >> 8;
  -          *code++ = (repeat_max & 255);
  -          }
  -        }
  -
  -      /* The character or character type itself comes last in all cases. */
  -
  -      *code++ = c;
  -      }
  -
  -    /* If previous was a character class or a back reference, we put the repeat
  -    stuff after it, but just skip the item if the repeat was {0,0}. */
  -
  -    else if (*previous == OP_CLASS || *previous == OP_REF)
  -      {
  -      if (repeat_max == 0)
  -        {
  -        code = previous;
  -        goto END_REPEAT;
  -        }
  -      if (repeat_min == 0 && repeat_max == -1)
  -        *code++ = OP_CRSTAR + repeat_type;
  -      else if (repeat_min == 1 && repeat_max == -1)
  -        *code++ = OP_CRPLUS + repeat_type;
  -      else if (repeat_min == 0 && repeat_max == 1)
  -        *code++ = OP_CRQUERY + repeat_type;
  -      else
  -        {
  -        *code++ = OP_CRRANGE + repeat_type;
  -        *code++ = repeat_min >> 8;
  -        *code++ = repeat_min & 255;
  -        if (repeat_max == -1) repeat_max = 0;  /* 2-byte encoding for max */
  -        *code++ = repeat_max >> 8;
  -        *code++ = repeat_max & 255;
  -        }
  -      }
  -
  -    /* If previous was a bracket group, we may have to replicate it in certain
  -    cases. */
  -
  -    else if ((int)*previous >= OP_BRA || (int)*previous == OP_ONCE ||
  -             (int)*previous == OP_COND)
  -      {
  -      register int i;
  -      int ketoffset = 0;
  -      int len = code - previous;
  -      uschar *bralink = NULL;
  -
  -      /* If the maximum repeat count is unlimited, find the end of the bracket
  -      by scanning through from the start, and compute the offset back to it
  -      from the current code pointer. There may be an OP_OPT setting following
  -      the final KET, so we can't find the end just by going back from the code
  -      pointer. */
  -
  -      if (repeat_max == -1)
  -        {
  -        register uschar *ket = previous;
  -        do ket += (ket[1] << 8) + ket[2]; while (*ket != OP_KET);
  -        ketoffset = code - ket;
  -        }
  -
  -      /* The case of a zero minimum is special because of the need to stick
  -      OP_BRAZERO in front of it, and because the group appears once in the
  -      data, whereas in other cases it appears the minimum number of times. For
  -      this reason, it is simplest to treat this case separately, as otherwise
  -      the code gets far too messy. There are several special subcases when the
  -      minimum is zero. */
  -
  -      if (repeat_min == 0)
  -        {
  -        /* If we set up a required char from the bracket, we must back off
  -        to the previous value and reset the countlits value too. */
  -
  -        if (subcountlits > 0)
  -          {
  -          *reqchar = prevreqchar;
  -          *countlits -= subcountlits;
  -          }
  -
  -        /* If the maximum is also zero, we just omit the group from the output
  -        altogether. */
  -
  -        if (repeat_max == 0)
  -          {
  -          code = previous;
  -          goto END_REPEAT;
  -          }
  -
  -        /* If the maximum is 1 or unlimited, we just have to stick in the
  -        BRAZERO and do no more at this point. */
  -
  -        if (repeat_max <= 1)
  -          {
  -          memmove(previous+1, previous, len);
  -          code++;
  -          *previous++ = OP_BRAZERO + repeat_type;
  -          }
  -
  -        /* If the maximum is greater than 1 and limited, we have to replicate
  -        in a nested fashion, sticking OP_BRAZERO before each set of brackets.
  -        The first one has to be handled carefully because it's the original
  -        copy, which has to be moved up. The remainder can be handled by code
  -        that is common with the non-zero minimum case below. We just have to
  -        adjust the value or repeat_max, since one less copy is required. */
  -
  -        else
  -          {
  -          int offset;
  -          memmove(previous+4, previous, len);
  -          code += 4;
  -          *previous++ = OP_BRAZERO + repeat_type;
  -          *previous++ = OP_BRA;
  -
  -          /* We chain together the bracket offset fields that have to be
  -          filled in later when the ends of the brackets are reached. */
  -
  -          offset = (bralink == NULL)? 0 : previous - bralink;
  -          bralink = previous;
  -          *previous++ = offset >> 8;
  -          *previous++ = offset & 255;
  -          }
  -
  -        repeat_max--;
  -        }
  -
  -      /* If the minimum is greater than zero, replicate the group as many
  -      times as necessary, and adjust the maximum to the number of subsequent
  -      copies that we need. */
  -
  -      else
  -        {
  -        for (i = 1; i < repeat_min; i++)
  -          {
  -          memcpy(code, previous, len);
  -          code += len;
  -          }
  -        if (repeat_max > 0) repeat_max -= repeat_min;
  -        }
  -
  -      /* This code is common to both the zero and non-zero minimum cases. If
  -      the maximum is limited, it replicates the group in a nested fashion,
  -      remembering the bracket starts on a stack. In the case of a zero minimum,
  -      the first one was set up above. In all cases the repeat_max now specifies
  -      the number of additional copies needed. */
  -
  -      if (repeat_max >= 0)
  -        {
  -        for (i = repeat_max - 1; i >= 0; i--)
  -          {
  -          *code++ = OP_BRAZERO + repeat_type;
  -
  -          /* All but the final copy start a new nesting, maintaining the
  -          chain of brackets outstanding. */
  -
  -          if (i != 0)
  -            {
  -            int offset;
  -            *code++ = OP_BRA;
  -            offset = (bralink == NULL)? 0 : code - bralink;
  -            bralink = code;
  -            *code++ = offset >> 8;
  -            *code++ = offset & 255;
  -            }
  -
  -          memcpy(code, previous, len);
  -          code += len;
  -          }
  -
  -        /* Now chain through the pending brackets, and fill in their length
  -        fields (which are holding the chain links pro tem). */
  -
  -        while (bralink != NULL)
  -          {
  -          int oldlinkoffset;
  -          int offset = code - bralink + 1;
  -          uschar *bra = code - offset;
  -          oldlinkoffset = (bra[1] << 8) + bra[2];
  -          bralink = (oldlinkoffset == 0)? NULL : bralink - oldlinkoffset;
  -          *code++ = OP_KET;
  -          *code++ = bra[1] = offset >> 8;
  -          *code++ = bra[2] = (offset & 255);
  -          }
  -        }
  -
  -      /* If the maximum is unlimited, set a repeater in the final copy. We
  -      can't just offset backwards from the current code point, because we
  -      don't know if there's been an options resetting after the ket. The
  -      correct offset was computed above. */
  -
  -      else code[-ketoffset] = OP_KETRMAX + repeat_type;
  -      }
  -
  -    /* Else there's some kind of shambles */
  -
  -    else
  -      {
  -      *errorptr = ERR11;
  -      goto FAILED;
  -      }
  -
  -    /* In all case we no longer have a previous item. */
  -
  -    END_REPEAT:
  -    previous = NULL;
  -    break;
  -
  -    /* Start of nested bracket sub-expression, or comment or lookahead or
  -    lookbehind or option setting or condition. First deal with special things
  -    that can come after a bracket; all are introduced by ?, and the appearance
  -    of any of them means that this is not a referencing group. They were
  -    checked for validity in the first pass over the string, so we don't have to
  -    check for syntax errors here.  */
  -
  -    case '(':
  -    newoptions = options;
  -    skipbytes = 0;
  -
  -    if (*(++ptr) == '?')
  -      {
  -      int set, unset;
  -      int *optset;
  -
  -      switch (*(++ptr))
  -        {
  -        case '#':                 /* Comment; skip to ket */
  -        ptr++;
  -        while (*ptr != ')') ptr++;
  -        continue;
  -
  -        case ':':                 /* Non-extracting bracket */
  -        bravalue = OP_BRA;
  -        ptr++;
  -        break;
  -
  -        case '(':
  -        bravalue = OP_COND;       /* Conditional group */
  -        if ((cd->ctypes[*(++ptr)] & ctype_digit) != 0)
  -          {
  -          int condref = *ptr - '0';
  -          while (*(++ptr) != ')') condref = condref*10 + *ptr - '0';
  -          if (condref == 0)
  -            {
  -            *errorptr = ERR35;
  -            goto FAILED;
  -            }
  -          ptr++;
  -          code[3] = OP_CREF;
  -          code[4] = condref >> 8;
  -          code[5] = condref & 255;
  -          skipbytes = 3;
  -          }
  -        else ptr--;
  -        break;
  -
  -        case '=':                 /* Positive lookahead */
  -        bravalue = OP_ASSERT;
  -        ptr++;
  -        break;
  -
  -        case '!':                 /* Negative lookahead */
  -        bravalue = OP_ASSERT_NOT;
  -        ptr++;
  -        break;
  -
  -        case '<':                 /* Lookbehinds */
  -        switch (*(++ptr))
  -          {
  -          case '=':               /* Positive lookbehind */
  -          bravalue = OP_ASSERTBACK;
  -          ptr++;
  -          break;
  -
  -          case '!':               /* Negative lookbehind */
  -          bravalue = OP_ASSERTBACK_NOT;
  -          ptr++;
  -          break;
  -
  -          default:                /* Syntax error */
  -          *errorptr = ERR24;
  -          goto FAILED;
  -          }
  -        break;
  -
  -        case '>':                 /* One-time brackets */
  -        bravalue = OP_ONCE;
  -        ptr++;
  -        break;
  -
  -        case 'R':                 /* Pattern recursion */
  -        *code++ = OP_RECURSE;
  -        ptr++;
  -        continue;
  -
  -        default:                  /* Option setting */
  -        set = unset = 0;
  -        optset = &set;
  -
  -        while (*ptr != ')' && *ptr != ':')
  -          {
  -          switch (*ptr++)
  -            {
  -            case '-': optset = &unset; break;
  -
  -            case 'i': *optset |= PCRE_CASELESS; break;
  -            case 'm': *optset |= PCRE_MULTILINE; break;
  -            case 's': *optset |= PCRE_DOTALL; break;
  -            case 'x': *optset |= PCRE_EXTENDED; break;
  -            case 'U': *optset |= PCRE_UNGREEDY; break;
  -            case 'X': *optset |= PCRE_EXTRA; break;
  -
  -            default:
  -            *errorptr = ERR12;
  -            goto FAILED;
  -            }
  -          }
  -
  -        /* Set up the changed option bits, but don't change anything yet. */
  -
  -        newoptions = (options | set) & (~unset);
  -
  -        /* If the options ended with ')' this is not the start of a nested
  -        group with option changes, so the options change at this level. At top
  -        level there is nothing else to be done (the options will in fact have
  -        been set from the start of compiling as a result of the first pass) but
  -        at an inner level we must compile code to change the ims options if
  -        necessary, and pass the new setting back so that it can be put at the
  -        start of any following branches, and when this group ends, a resetting
  -        item can be compiled. */
  -
  -        if (*ptr == ')')
  -          {
  -          if ((options & PCRE_INGROUP) != 0 &&
  -              (options & PCRE_IMS) != (newoptions & PCRE_IMS))
  -            {
  -            *code++ = OP_OPT;
  -            *code++ = *optchanged = newoptions & PCRE_IMS;
  -            }
  -          options = newoptions;  /* Change options at this level */
  -          previous = NULL;       /* This item can't be repeated */
  -          continue;              /* It is complete */
  -          }
  -
  -        /* If the options ended with ':' we are heading into a nested group
  -        with possible change of options. Such groups are non-capturing and are
  -        not assertions of any kind. All we need to do is skip over the ':';
  -        the newoptions value is handled below. */
  -
  -        bravalue = OP_BRA;
  -        ptr++;
  -        }
  -      }
  -
  -    /* Else we have a referencing group; adjust the opcode. If the bracket
  -    number is greater than EXTRACT_BASIC_MAX, we set the opcode one higher, and
  -    arrange for the true number to follow later, in an OP_BRANUMBER item. */
  -
  -    else
  -      {
  -      if (++(*brackets) > EXTRACT_BASIC_MAX)
  -        {
  -        bravalue = OP_BRA + EXTRACT_BASIC_MAX + 1;
  -        code[3] = OP_BRANUMBER;
  -        code[4] = *brackets >> 8;
  -        code[5] = *brackets & 255;
  -        skipbytes = 3;
  -        }
  -      else bravalue = OP_BRA + *brackets;
  -      }
  -
  -    /* Process nested bracketed re. Assertions may not be repeated, but other
  -    kinds can be. We copy code into a non-register variable in order to be able
  -    to pass its address because some compilers complain otherwise. Pass in a
  -    new setting for the ims options if they have changed. */
  -
  -    previous = (bravalue >= OP_ONCE)? code : NULL;
  -    *code = bravalue;
  -    tempcode = code;
  -
  -    if (!compile_regex(
  -         options | PCRE_INGROUP,       /* Set for all nested groups */
  -         ((options & PCRE_IMS) != (newoptions & PCRE_IMS))?
  -           newoptions & PCRE_IMS : -1, /* Pass ims options if changed */
  -         brackets,                     /* Extracting bracket count */
  -         &tempcode,                    /* Where to put code (updated) */
  -         &ptr,                         /* Input pointer (updated) */
  -         errorptr,                     /* Where to put an error message */
  -         (bravalue == OP_ASSERTBACK ||
  -          bravalue == OP_ASSERTBACK_NOT), /* TRUE if back assert */
  -         skipbytes,                    /* Skip over OP_COND/OP_BRANUMBER */
  -         &subreqchar,                  /* For possible last char */
  -         &subcountlits,                /* For literal count */
  -         cd))                          /* Tables block */
  -      goto FAILED;
  -
  -    /* At the end of compiling, code is still pointing to the start of the
  -    group, while tempcode has been updated to point past the end of the group
  -    and any option resetting that may follow it. The pattern pointer (ptr)
  -    is on the bracket. */
  -
  -    /* If this is a conditional bracket, check that there are no more than
  -    two branches in the group. */
  -
  -    else if (bravalue == OP_COND)
  -      {
  -      uschar *tc = code;
  -      condcount = 0;
  -
  -      do {
  -         condcount++;
  -         tc += (tc[1] << 8) | tc[2];
  -         }
  -      while (*tc != OP_KET);
  -
  -      if (condcount > 2)
  -        {
  -        *errorptr = ERR27;
  -        goto FAILED;
  -        }
  -      }
  -
  -    /* Handle updating of the required character. If the subpattern didn't
  -    set one, leave it as it was. Otherwise, update it for normal brackets of
  -    all kinds, forward assertions, and conditions with two branches. Don't
  -    update the literal count for forward assertions, however. If the bracket
  -    is followed by a quantifier with zero repeat, we have to back off. Hence
  -    the definition of prevreqchar and subcountlits outside the main loop so
  -    that they can be accessed for the back off. */
  -
  -    if (subreqchar > 0 &&
  -         (bravalue >= OP_BRA || bravalue == OP_ONCE || bravalue == OP_ASSERT ||
  -         (bravalue == OP_COND && condcount == 2)))
  -      {
  -      prevreqchar = *reqchar;
  -      *reqchar = subreqchar;
  -      if (bravalue != OP_ASSERT) *countlits += subcountlits;
  -      }
  -
  -    /* Now update the main code pointer to the end of the group. */
  -
  -    code = tempcode;
  -
  -    /* Error if hit end of pattern */
  -
  -    if (*ptr != ')')
  -      {
  -      *errorptr = ERR14;
  -      goto FAILED;
  -      }
  -    break;
  -
  -    /* Check \ for being a real metacharacter; if not, fall through and handle
  -    it as a data character at the start of a string. Escape items are checked
  -    for validity in the pre-compiling pass. */
  -
  -    case '\\':
  -    tempptr = ptr;
  -    c = check_escape(&ptr, errorptr, *brackets, options, FALSE, cd);
  -
  -    /* Handle metacharacters introduced by \. For ones like \d, the ESC_ values
  -    are arranged to be the negation of the corresponding OP_values. For the
  -    back references, the values are ESC_REF plus the reference number. Only
  -    back references and those types that consume a character may be repeated.
  -    We can test for values between ESC_b and ESC_Z for the latter; this may
  -    have to change if any new ones are ever created. */
  -
  -    if (c < 0)
  -      {
  -      if (-c >= ESC_REF)
  -        {
  -        int number = -c - ESC_REF;
  -        previous = code;
  -        *code++ = OP_REF;
  -        *code++ = number >> 8;
  -        *code++ = number & 255;
  -        }
  -      else
  -        {
  -        previous = (-c > ESC_b && -c < ESC_Z)? code : NULL;
  -        *code++ = -c;
  -        }
  -      continue;
  -      }
  -
  -    /* Data character: reset and fall through */
  -
  -    ptr = tempptr;
  -    c = '\\';
  -
  -    /* Handle a run of data characters until a metacharacter is encountered.
  -    The first character is guaranteed not to be whitespace or # when the
  -    extended flag is set. */
  -
  -    NORMAL_CHAR:
  -    default:
  -    previous = code;
  -    *code = OP_CHARS;
  -    code += 2;
  -    length = 0;
  -
  -    do
  -      {
  -      if ((options & PCRE_EXTENDED) != 0)
  -        {
  -        if ((cd->ctypes[c] & ctype_space) != 0) continue;
  -        if (c == '#')
  -          {
  -          /* The space before the ; is to avoid a warning on a silly compiler
  -          on the Macintosh. */
  -          while ((c = *(++ptr)) != 0 && c != '\n') ;
  -          if (c == 0) break;
  -          continue;
  -          }
  -        }
  -
  -      /* Backslash may introduce a data char or a metacharacter. Escaped items
  -      are checked for validity in the pre-compiling pass. Stop the string
  -      before a metaitem. */
  -
  -      if (c == '\\')
  -        {
  -        tempptr = ptr;
  -        c = check_escape(&ptr, errorptr, *brackets, options, FALSE, cd);
  -        if (c < 0) { ptr = tempptr; break; }
  -
  -        /* If a character is > 127 in UTF-8 mode, we have to turn it into
  -        two or more characters in the UTF-8 encoding. */
  +							if (d < 0) {
  +								if (d == -ESC_b)
  +									d = '\b';
  +								else {
  +									ptr = oldptr - 2;
  +									goto SINGLE_CHARACTER;
  +								}
  +							}
  +						}
  +
  +						if (d < c) {
  +							*errorptr = ERR8;
  +							goto FAILED;
  +						}
  +
  +						for (; c <= d; c++) {
  +							class[c / 8] |= (1 << (c & 7));
  +							if ((options & PCRE_CASELESS) != 0) {
  +								int uc = cd->fcc[c];
  +								class[uc / 8] |= (1 << (uc & 7));
  +							}
  +							class_charcount++;
  +							class_lastchar = c;
  +						}
  +						continue;
  +					}
  +
  +				  SINGLE_CHARACTER:
  +
  +					class[c / 8] |= (1 << (c & 7));
  +					if ((options & PCRE_CASELESS) != 0) {
  +						c = cd->fcc[c];
  +						class[c / 8] |= (1 << (c & 7));
  +					}
  +					class_charcount++;
  +					class_lastchar = c;
  +				}
  +
  +				while ((c = *(++ptr)) != ']');
  +
  +				if (class_charcount == 1 && class_lastchar >= 0) {
  +					if (negate_class) {
  +						code[-1] = OP_NOT;
  +					}
  +					else {
  +						code[-1] = OP_CHARS;
  +						*code++ = 1;
  +					}
  +					*code++ = class_lastchar;
  +				}
  +
  +				else {
  +					if (negate_class)
  +						for (c = 0; c < 32; c++)
  +							code[c] = ~class[c];
  +					else
  +						memcpy(code, class, 32);
  +					code += 32;
  +				}
  +				break;
  +
  +			case '{':
  +				if (!is_counted_repeat(ptr + 1, cd))
  +					goto NORMAL_CHAR;
  +				ptr =
  +					read_repeat_counts(ptr + 1, &repeat_min, &repeat_max,
  +									   errorptr, cd);
  +				if (*errorptr != NULL)
  +					goto FAILED;
  +				goto REPEAT;
  +
  +			case '*':
  +				repeat_min = 0;
  +				repeat_max = -1;
  +				goto REPEAT;
  +
  +			case '+':
  +				repeat_min = 1;
  +				repeat_max = -1;
  +				goto REPEAT;
  +
  +			case '?':
  +				repeat_min = 0;
  +				repeat_max = 1;
  +
  +			  REPEAT:
  +				if (previous == NULL) {
  +					*errorptr = ERR9;
  +					goto FAILED;
  +				}
  +
  +				if (ptr[1] == '?') {
  +					repeat_type = greedy_non_default;
  +					ptr++;
  +				}
  +				else
  +					repeat_type = greedy_default;
  +
  +				if (*previous == OP_CHARS) {
  +					int len = previous[1];
  +
  +					if (repeat_min == 0)
  +						*reqchar = prevreqchar;
  +					*countlits += repeat_min - 1;
  +
  +					if (len == 1) {
  +						c = previous[2];
  +						code = previous;
  +					}
  +					else {
  +						c = previous[len + 1];
  +						previous[1]--;
  +						code--;
  +					}
  +					op_type = 0;
  +					goto OUTPUT_SINGLE_REPEAT;
  +				}
  +
  +				else if ((int)*previous == OP_NOT) {
  +					op_type = OP_NOTSTAR - OP_STAR;
  +					c = previous[1];
  +					code = previous;
  +					goto OUTPUT_SINGLE_REPEAT;
  +				}
  +
  +				else if ((int)*previous < OP_EODN || *previous == OP_ANY) {
  +					op_type = OP_TYPESTAR - OP_STAR;
  +					c = *previous;
  +					code = previous;
  +
  +				  OUTPUT_SINGLE_REPEAT:
  +
  +					if (repeat_max == 0)
  +						goto END_REPEAT;
  +
  +					repeat_type += op_type;
  +
  +					if (repeat_min == 0) {
  +						if (repeat_max == -1)
  +							*code++ = OP_STAR + repeat_type;
  +						else if (repeat_max == 1)
  +							*code++ = OP_QUERY + repeat_type;
  +						else {
  +							*code++ = OP_UPTO + repeat_type;
  +							*code++ = repeat_max >> 8;
  +							*code++ = (repeat_max & 255);
  +						}
  +					}
  +
  +					else if (repeat_min == 1 && repeat_max == -1)
  +						*code++ = OP_PLUS + repeat_type;
  +
  +					else {
  +						if (repeat_min != 1) {
  +							*code++ = OP_EXACT + op_type;
  +							*code++ = repeat_min >> 8;
  +							*code++ = (repeat_min & 255);
  +						}
  +
  +						else if (*previous == OP_CHARS) {
  +							if (code == previous)
  +								code += 2;
  +							else
  +								previous[1]++;
  +						}
  +
  +						else if (*previous == OP_NOT)
  +							code++;
  +
  +						if (repeat_max < 0) {
  +							*code++ = c;
  +							*code++ = OP_STAR + repeat_type;
  +						}
  +
  +						else if (repeat_max != repeat_min) {
  +							*code++ = c;
  +							repeat_max -= repeat_min;
  +							*code++ = OP_UPTO + repeat_type;
  +							*code++ = repeat_max >> 8;
  +							*code++ = (repeat_max & 255);
  +						}
  +					}
  +
  +					*code++ = c;
  +				}
  +
  +				else if (*previous == OP_CLASS || *previous == OP_REF) {
  +					if (repeat_max == 0) {
  +						code = previous;
  +						goto END_REPEAT;
  +					}
  +					if (repeat_min == 0 && repeat_max == -1)
  +						*code++ = OP_CRSTAR + repeat_type;
  +					else if (repeat_min == 1 && repeat_max == -1)
  +						*code++ = OP_CRPLUS + repeat_type;
  +					else if (repeat_min == 0 && repeat_max == 1)
  +						*code++ = OP_CRQUERY + repeat_type;
  +					else {
  +						*code++ = OP_CRRANGE + repeat_type;
  +						*code++ = repeat_min >> 8;
  +						*code++ = repeat_min & 255;
  +						if (repeat_max == -1)
  +							repeat_max = 0;
  +						*code++ = repeat_max >> 8;
  +						*code++ = repeat_max & 255;
  +					}
  +				}
  +
  +				else if ((int)*previous >= OP_BRA || (int)*previous == OP_ONCE
  +						 || (int)*previous == OP_COND) {
  +					register int i;
  +					int ketoffset = 0;
  +					int len = code - previous;
  +					uschar *bralink = NULL;
  +
  +					if (repeat_max == -1) {
  +						register uschar *ket = previous;
  +						do
  +							ket += (ket[1] << 8) + ket[2];
  +						while (*ket != OP_KET);
  +						ketoffset = code - ket;
  +					}
  +
  +					if (repeat_min == 0) {
  +						if (subcountlits > 0) {
  +							*reqchar = prevreqchar;
  +							*countlits -= subcountlits;
  +						}
  +
  +						if (repeat_max == 0) {
  +							code = previous;
  +							goto END_REPEAT;
  +						}
  +
  +						if (repeat_max <= 1) {
  +							memmove(previous + 1, previous, len);
  +							code++;
  +							*previous++ = OP_BRAZERO + repeat_type;
  +						}
  +
  +						else {
  +							int offset;
  +							memmove(previous + 4, previous, len);
  +							code += 4;
  +							*previous++ = OP_BRAZERO + repeat_type;
  +							*previous++ = OP_BRA;
  +
  +							offset =
  +								(bralink == NULL) ? 0 : previous - bralink;
  +							bralink = previous;
  +							*previous++ = offset >> 8;
  +							*previous++ = offset & 255;
  +						}
  +
  +						repeat_max--;
  +					}
  +
  +					else {
  +						for (i = 1; i < repeat_min; i++) {
  +							memcpy(code, previous, len);
  +							code += len;
  +						}
  +						if (repeat_max > 0)
  +							repeat_max -= repeat_min;
  +					}
  +
  +					if (repeat_max >= 0) {
  +						for (i = repeat_max - 1; i >= 0; i--) {
  +							*code++ = OP_BRAZERO + repeat_type;
  +
  +							if (i != 0) {
  +								int offset;
  +								*code++ = OP_BRA;
  +								offset =
  +									(bralink == NULL) ? 0 : code - bralink;
  +								bralink = code;
  +								*code++ = offset >> 8;
  +								*code++ = offset & 255;
  +							}
  +
  +							memcpy(code, previous, len);
  +							code += len;
  +						}
  +
  +						while (bralink != NULL) {
  +							int oldlinkoffset;
  +							int offset = code - bralink + 1;
  +							uschar *bra = code - offset;
  +							oldlinkoffset = (bra[1] << 8) + bra[2];
  +							bralink =
  +								(oldlinkoffset ==
  +								 0) ? NULL : bralink - oldlinkoffset;
  +							*code++ = OP_KET;
  +							*code++ = bra[1] = offset >> 8;
  +							*code++ = bra[2] = (offset & 255);
  +						}
  +					}
  +
  +					else
  +						code[-ketoffset] = OP_KETRMAX + repeat_type;
  +				}
  +
  +				else {
  +					*errorptr = ERR11;
  +					goto FAILED;
  +				}
  +
  +			  END_REPEAT:
  +				previous = NULL;
  +				break;
  +
  +			case '(':
  +				newoptions = options;
  +				skipbytes = 0;
  +
  +				if (*(++ptr) == '?') {
  +					int set, unset;
  +					int *optset;
  +
  +					switch (*(++ptr)) {
  +						case '#':
  +							ptr++;
  +							while (*ptr != ')')
  +								ptr++;
  +							continue;
  +
  +						case ':':
  +							bravalue = OP_BRA;
  +							ptr++;
  +							break;
  +
  +						case '(':
  +							bravalue = OP_COND;
  +							if ((cd->ctypes[*(++ptr)] & ctype_digit) != 0) {
  +								int condref = *ptr - '0';
  +								while (*(++ptr) != ')')
  +									condref = condref * 10 + *ptr - '0';
  +								if (condref == 0) {
  +									*errorptr = ERR35;
  +									goto FAILED;
  +								}
  +								ptr++;
  +								code[3] = OP_CREF;
  +								code[4] = condref >> 8;
  +								code[5] = condref & 255;
  +								skipbytes = 3;
  +							}
  +							else
  +								ptr--;
  +							break;
  +
  +						case '=':
  +							bravalue = OP_ASSERT;
  +							ptr++;
  +							break;
  +
  +						case '!':
  +							bravalue = OP_ASSERT_NOT;
  +							ptr++;
  +							break;
  +
  +						case '<':
  +							switch (*(++ptr)) {
  +								case '=':
  +									bravalue = OP_ASSERTBACK;
  +									ptr++;
  +									break;
  +
  +								case '!':
  +									bravalue = OP_ASSERTBACK_NOT;
  +									ptr++;
  +									break;
  +
  +								default:
  +									*errorptr = ERR24;
  +									goto FAILED;
  +							}
  +							break;
  +
  +						case '>':
  +							bravalue = OP_ONCE;
  +							ptr++;
  +							break;
  +
  +						case 'R':
  +							*code++ = OP_RECURSE;
  +							ptr++;
  +							continue;
  +
  +						default:
  +							set = unset = 0;
  +							optset = &set;
  +
  +							while (*ptr != ')' && *ptr != ':') {
  +								switch (*ptr++) {
  +									case '-':
  +										optset = &unset;
  +										break;
  +
  +									case 'i':
  +										*optset |= PCRE_CASELESS;
  +										break;
  +									case 'm':
  +										*optset |= PCRE_MULTILINE;
  +										break;
  +									case 's':
  +										*optset |= PCRE_DOTALL;
  +										break;
  +									case 'x':
  +										*optset |= PCRE_EXTENDED;
  +										break;
  +									case 'U':
  +										*optset |= PCRE_UNGREEDY;
  +										break;
  +									case 'X':
  +										*optset |= PCRE_EXTRA;
  +										break;
  +
  +									default:
  +										*errorptr = ERR12;
  +										goto FAILED;
  +								}
  +							}
  +
  +							newoptions = (options | set) & (~unset);
  +
  +							if (*ptr == ')') {
  +								if ((options & PCRE_INGROUP) != 0 &&
  +									(options & PCRE_IMS) !=
  +									(newoptions & PCRE_IMS)) {
  +									*code++ = OP_OPT;
  +									*code++ = *optchanged =
  +										newoptions & PCRE_IMS;
  +								}
  +								options = newoptions;
  +								previous = NULL;
  +								continue;
  +							}
  +
  +							bravalue = OP_BRA;
  +							ptr++;
  +					}
  +				}
  +
  +				else {
  +					if (++(*brackets) > EXTRACT_BASIC_MAX) {
  +						bravalue = OP_BRA + EXTRACT_BASIC_MAX + 1;
  +						code[3] = OP_BRANUMBER;
  +						code[4] = *brackets >> 8;
  +						code[5] = *brackets & 255;
  +						skipbytes = 3;
  +					}
  +					else
  +						bravalue = OP_BRA + *brackets;
  +				}
  +
  +				previous = (bravalue >= OP_ONCE) ? code : NULL;
  +				*code = bravalue;
  +				tempcode = code;
  +
  +				if (!compile_regex(options | PCRE_INGROUP,
  +								   ((options & PCRE_IMS) !=
  +									(newoptions & PCRE_IMS)) ? newoptions &
  +								   PCRE_IMS : -1, brackets, &tempcode, &ptr,
  +								   errorptr, (bravalue == OP_ASSERTBACK
  +											  || bravalue ==
  +											  OP_ASSERTBACK_NOT), skipbytes,
  +								   &subreqchar, &subcountlits,
  +								   cd)) goto FAILED;
  +
  +				else if (bravalue == OP_COND) {
  +					uschar *tc = code;
  +					condcount = 0;
  +
  +					do {
  +						condcount++;
  +						tc += (tc[1] << 8) | tc[2];
  +					}
  +					while (*tc != OP_KET);
  +
  +					if (condcount > 2) {
  +						*errorptr = ERR27;
  +						goto FAILED;
  +					}
  +				}
  +
  +				if (subreqchar > 0 &&
  +					(bravalue >= OP_BRA || bravalue == OP_ONCE
  +					 || bravalue == OP_ASSERT || (bravalue == OP_COND
  +												  && condcount == 2))) {
  +					prevreqchar = *reqchar;
  +					*reqchar = subreqchar;
  +					if (bravalue != OP_ASSERT)
  +						*countlits += subcountlits;
  +				}
  +
  +				code = tempcode;
  +
  +				if (*ptr != ')') {
  +					*errorptr = ERR14;
  +					goto FAILED;
  +				}
  +				break;
  +
  +			case '\\':
  +				tempptr = ptr;
  +				c =
  +					check_escape(&ptr, errorptr, *brackets, options, FALSE,
  +								 cd);
  +
  +				if (c < 0) {
  +					if (-c >= ESC_REF) {
  +						int number = -c - ESC_REF;
  +						previous = code;
  +						*code++ = OP_REF;
  +						*code++ = number >> 8;
  +						*code++ = number & 255;
  +					}
  +					else {
  +						previous = (-c > ESC_b && -c < ESC_Z) ? code : NULL;
  +						*code++ = -c;
  +					}
  +					continue;
  +				}
  +
  +				ptr = tempptr;
  +				c = '\\';
  +
  +			  NORMAL_CHAR:
  +			default:
  +				previous = code;
  +				*code = OP_CHARS;
  +				code += 2;
  +				length = 0;
  +
  +				do {
  +					if ((options & PCRE_EXTENDED) != 0) {
  +						if ((cd->ctypes[c] & ctype_space) != 0)
  +							continue;
  +						if (c == '#') {
  +							while ((c = *(++ptr)) != 0 && c != '\n') ;
  +							if (c == 0)
  +								break;
  +							continue;
  +						}
  +					}
  +
  +					if (c == '\\') {
  +						tempptr = ptr;
  +						c =
  +							check_escape(&ptr, errorptr, *brackets, options,
  +										 FALSE, cd);
  +						if (c < 0) {
  +							ptr = tempptr;
  +							break;
  +						}
   
   #ifdef STR_PCRE_SUPPORT_UTF8
  -        if (c > 127 && (options & PCRE_UTF8) != 0)
  -          {
  -          uschar buffer[8];
  -          int len = ord2utf8(c, buffer);
  -          for (c = 0; c < len; c++) *code++ = buffer[c];
  -          length += len;
  -          continue;
  -          }
  +						if (c > 127 && (options & PCRE_UTF8) != 0) {
  +							uschar buffer[8];
  +							int len = ord2utf8(c, buffer);
  +							for (c = 0; c < len; c++)
  +								*code++ = buffer[c];
  +							length += len;
  +							continue;
  +						}
   #endif
  -        }
  -
  -      /* Ordinary character or single-char escape */
  -
  -      *code++ = c;
  -      length++;
  -      }
  -
  -    /* This "while" is the end of the "do" above. */
  -
  -    while (length < MAXLIT && (cd->ctypes[c = *(++ptr)] & ctype_meta) == 0);
  -
  -    /* Update the last character and the count of literals */
  +					}
   
  -    prevreqchar = (length > 1)? code[-2] : *reqchar;
  -    *reqchar = code[-1];
  -    *countlits += length;
  -
  -    /* Compute the length and set it in the data vector, and advance to
  -    the next state. */
  -
  -    previous[1] = length;
  -    if (length < MAXLIT) ptr--;
  -    break;
  -    }
  -  }                   /* end of big loop */
  -
  -/* Control never reaches here by falling through, only by a goto for all the
  -error states. Pass back the position in the pattern so that it can be displayed
  -to the user for diagnosing the error. */
  -
  -FAILED:
  -*ptrptr = ptr;
  -return FALSE;
  +					*code++ = c;
  +					length++;
  +				}
  +
  +				while (length < MAXLIT
  +					   && (cd->ctypes[c = *(++ptr)] & ctype_meta) == 0);
  +
  +				prevreqchar = (length > 1) ? code[-2] : *reqchar;
  +				*reqchar = code[-1];
  +				*countlits += length;
  +
  +				previous[1] = length;
  +				if (length < MAXLIT)
  +					ptr--;
  +				break;
  +		}
  +	}
  +
  +  FAILED:
  +	*ptrptr = ptr;
  +	return FALSE;
   }
   
  -/*************************************************
  -*     Compile sequence of alternatives           *
  -*************************************************/
  -
  -/* On entry, ptr is pointing past the bracket character, but on return
  -it points to the closing bracket, or vertical bar, or end of string.
  -The code variable is pointing at the byte into which the BRA operator has been
  -stored. If the ims options are changed at the start (for a (?ims: group) or
  -during any branch, we need to insert an OP_OPT item at the start of every
  -following branch to ensure they get set correctly at run time, and also pass
  -the new options into every subsequent branch compile.
  -
  -Argument:
  -  options     the option bits
  -  optchanged  new ims options to set as if (?ims) were at the start, or -1
  -               for no change
  -  brackets    -> int containing the number of extracting brackets used
  -  codeptr     -> the address of the current code pointer
  -  ptrptr      -> the address of the current pattern pointer
  -  errorptr    -> pointer to error message
  -  lookbehind  TRUE if this is a lookbehind assertion
  -  skipbytes   skip this many bytes at start (for OP_COND, OP_BRANUMBER)
  -  reqchar     -> place to put the last required character, or a negative number
  -  countlits   -> place to put the shortest literal count of any branch
  -  cd          points to the data block with tables pointers
  -
  -Returns:      TRUE on success
  -*/
  -
   static BOOL
  -compile_regex(int options, int optchanged, int *brackets, uschar **codeptr,
  -  const uschar **ptrptr, const char **errorptr, BOOL lookbehind, int skipbytes,
  -  int *reqchar, int *countlits, compile_data *cd)
  +compile_regex(int options, int optchanged, int *brackets, uschar ** codeptr,
  +			  const uschar ** ptrptr, const char **errorptr, BOOL lookbehind,
  +			  int skipbytes, int *reqchar, int *countlits, compile_data * cd)
   {
  -const uschar *ptr = *ptrptr;
  -uschar *code = *codeptr;
  -uschar *last_branch = code;
  -uschar *start_bracket = code;
  -uschar *reverse_count = NULL;
  -int oldoptions = options & PCRE_IMS;
  -int branchreqchar, branchcountlits;
  -
  -*reqchar = -1;
  -*countlits = INT_MAX;
  -code += 3 + skipbytes;
  -
  -/* Loop for each alternative branch */
  -
  -for (;;)
  -  {
  -  int length;
  -
  -  /* Handle change of options */
  -
  -  if (optchanged >= 0)
  -    {
  -    *code++ = OP_OPT;
  -    *code++ = optchanged;
  -    options = (options & ~PCRE_IMS) | optchanged;
  -    }
  -
  -  /* Set up dummy OP_REVERSE if lookbehind assertion */
  -
  -  if (lookbehind)
  -    {
  -    *code++ = OP_REVERSE;
  -    reverse_count = code;
  -    *code++ = 0;
  -    *code++ = 0;
  -    }
  -
  -  /* Now compile the branch */
  -
  -  if (!compile_branch(options, brackets, &code, &ptr, errorptr, &optchanged,
  -      &branchreqchar, &branchcountlits, cd))
  -    {
  -    *ptrptr = ptr;
  -    return FALSE;
  -    }
  -
  -  /* Fill in the length of the last branch */
  -
  -  length = code - last_branch;
  -  last_branch[1] = length >> 8;
  -  last_branch[2] = length & 255;
  -
  -  /* Save the last required character if all branches have the same; a current
  -  value of -1 means unset, while -2 means "previous branch had no last required
  -  char".  */
  -
  -  if (*reqchar != -2)
  -    {
  -    if (branchreqchar >= 0)
  -      {
  -      if (*reqchar == -1) *reqchar = branchreqchar;
  -      else if (*reqchar != branchreqchar) *reqchar = -2;
  -      }
  -    else *reqchar = -2;
  -    }
  -
  -  /* Keep the shortest literal count */
  -
  -  if (branchcountlits < *countlits) *countlits = branchcountlits;
  -
  -  /* If lookbehind, check that this branch matches a fixed-length string,
  -  and put the length into the OP_REVERSE item. Temporarily mark the end of
  -  the branch with OP_END. */
  -
  -  if (lookbehind)
  -    {
  -    *code = OP_END;
  -    length = find_fixedlength(last_branch, options);
  -
  -    if (length < 0)
  -      {
  -      *errorptr = ERR25;
  -      *ptrptr = ptr;
  -      return FALSE;
  -      }
  -    reverse_count[0] = (length >> 8);
  -    reverse_count[1] = length & 255;
  -    }
  -
  -  /* Reached end of expression, either ')' or end of pattern. Insert a
  -  terminating ket and the length of the whole bracketed item, and return,
  -  leaving the pointer at the terminating char. If any of the ims options
  -  were changed inside the group, compile a resetting op-code following. */
  -
  -  if (*ptr != '|')
  -    {
  -    length = code - start_bracket;
  -    *code++ = OP_KET;
  -    *code++ = length >> 8;
  -    *code++ = length & 255;
  -    if (optchanged >= 0)
  -      {
  -      *code++ = OP_OPT;
  -      *code++ = oldoptions;
  -      }
  -    *codeptr = code;
  -    *ptrptr = ptr;
  -    return TRUE;
  -    }
  -
  -  /* Another branch follows; insert an "or" node and advance the pointer. */
  -
  -  *code = OP_ALT;
  -  last_branch = code;
  -  code += 3;
  -  ptr++;
  -  }
  -/* Control never reaches here */
  +	const uschar *ptr = *ptrptr;
  +	uschar *code = *codeptr;
  +	uschar *last_branch = code;
  +	uschar *start_bracket = code;
  +	uschar *reverse_count = NULL;
  +	int oldoptions = options & PCRE_IMS;
  +	int branchreqchar, branchcountlits;
  +
  +	*reqchar = -1;
  +	*countlits = INT_MAX;
  +	code += 3 + skipbytes;
  +
  +	for (;;) {
  +		int length;
  +
  +		if (optchanged >= 0) {
  +			*code++ = OP_OPT;
  +			*code++ = optchanged;
  +			options = (options & ~PCRE_IMS) | optchanged;
  +		}
  +
  +		if (lookbehind) {
  +			*code++ = OP_REVERSE;
  +			reverse_count = code;
  +			*code++ = 0;
  +			*code++ = 0;
  +		}
  +
  +		if (!compile_branch
  +			(options, brackets, &code, &ptr, errorptr, &optchanged,
  +			 &branchreqchar, &branchcountlits, cd)) {
  +			*ptrptr = ptr;
  +			return FALSE;
  +		}
  +
  +		length = code - last_branch;
  +		last_branch[1] = length >> 8;
  +		last_branch[2] = length & 255;
  +
  +		if (*reqchar != -2) {
  +			if (branchreqchar >= 0) {
  +				if (*reqchar == -1)
  +					*reqchar = branchreqchar;
  +				else if (*reqchar != branchreqchar)
  +					*reqchar = -2;
  +			}
  +			else
  +				*reqchar = -2;
  +		}
  +
  +		if (branchcountlits < *countlits)
  +			*countlits = branchcountlits;
  +
  +		if (lookbehind) {
  +			*code = OP_END;
  +			length = find_fixedlength(last_branch, options);
  +
  +			if (length < 0) {
  +				*errorptr = ERR25;
  +				*ptrptr = ptr;
  +				return FALSE;
  +			}
  +			reverse_count[0] = (length >> 8);
  +			reverse_count[1] = length & 255;
  +		}
  +
  +		if (*ptr != '|') {
  +			length = code - start_bracket;
  +			*code++ = OP_KET;
  +			*code++ = length >> 8;
  +			*code++ = length & 255;
  +			if (optchanged >= 0) {
  +				*code++ = OP_OPT;
  +				*code++ = oldoptions;
  +			}
  +			*codeptr = code;
  +			*ptrptr = ptr;
  +			return TRUE;
  +		}
  +
  +		*code = OP_ALT;
  +		last_branch = code;
  +		code += 3;
  +		ptr++;
  +	}
   }
   
  -/*************************************************
  -*      Find first significant op code            *
  -*************************************************/
  -
  -/* This is called by several functions that scan a compiled expression looking
  -for a fixed first character, or an anchoring op code etc. It skips over things
  -that do not influence this. For one application, a change of caseless option is
  -important.
  -
  -Arguments:
  -  code       pointer to the start of the group
  -  options    pointer to external options
  -  optbit     the option bit whose changing is significant, or
  -             zero if none are
  -  optstop    TRUE to return on option change, otherwise change the options
  -               value and continue
  -
  -Returns:     pointer to the first significant opcode
  -*/
  -
  -static const uschar*
  -first_significant_code(const uschar *code, int *options, int optbit,
  -  BOOL optstop)
  +static const uschar *first_significant_code(const uschar * code, int *options,
  +											int optbit, BOOL optstop)
   {
  -for (;;)
  -  {
  -  switch ((int)*code)
  -    {
  -    case OP_OPT:
  -    if (optbit > 0 && ((int)code[1] & optbit) != (*options & optbit))
  -      {
  -      if (optstop) return code;
  -      *options = (int)code[1];
  -      }
  -    code += 2;
  -    break;
  -
  -    case OP_CREF:
  -    case OP_BRANUMBER:
  -    code += 3;
  -    break;
  -
  -    case OP_WORD_BOUNDARY:
  -    case OP_NOT_WORD_BOUNDARY:
  -    code++;
  -    break;
  -
  -    case OP_ASSERT_NOT:
  -    case OP_ASSERTBACK:
  -    case OP_ASSERTBACK_NOT:
  -    do code += (code[1] << 8) + code[2]; while (*code == OP_ALT);
  -    code += 3;
  -    break;
  -
  -    default:
  -    return code;
  -    }
  -  }
  -/* Control never reaches here */
  +	for (;;) {
  +		switch ((int)*code) {
  +			case OP_OPT:
  +				if (optbit > 0
  +					&& ((int)code[1] & optbit) != (*options & optbit)) {
  +					if (optstop)
  +						return code;
  +					*options = (int)code[1];
  +				}
  +				code += 2;
  +				break;
  +
  +			case OP_CREF:
  +			case OP_BRANUMBER:
  +				code += 3;
  +				break;
  +
  +			case OP_WORD_BOUNDARY:
  +			case OP_NOT_WORD_BOUNDARY:
  +				code++;
  +				break;
  +
  +			case OP_ASSERT_NOT:
  +			case OP_ASSERTBACK:
  +			case OP_ASSERTBACK_NOT:
  +				do
  +					code += (code[1] << 8) + code[2];
  +				while (*code == OP_ALT);
  +				code += 3;
  +				break;
  +
  +			default:
  +				return code;
  +		}
  +	}
   }
   
  -/*************************************************
  -*          Check for anchored expression         *
  -*************************************************/
  -
  -/* Try to find out if this is an anchored regular expression. Consider each
  -alternative branch. If they all start with OP_SOD or OP_CIRC, or with a bracket
  -all of whose alternatives start with OP_SOD or OP_CIRC (recurse ad lib), then
  -it's anchored. However, if this is a multiline pattern, then only OP_SOD
  -counts, since OP_CIRC can match in the middle.
  -
  -A branch is also implicitly anchored if it starts with .* and DOTALL is set,
  -because that will try the rest of the pattern at all possible matching points,
  -so there is no point trying them again.
  -
  -Arguments:
  -  code       points to start of expression (the bracket)
  -  options    points to the options setting
  -
  -Returns:     TRUE or FALSE
  -*/
  -
  -static BOOL
  -is_anchored(register const uschar *code, int *options)
  +static BOOL is_anchored(register const uschar * code, int *options)
   {
  -do {
  -   const uschar *scode = first_significant_code(code + 3, options,
  -     PCRE_MULTILINE, FALSE);
  -   register int op = *scode;
  -   if (op >= OP_BRA || op == OP_ASSERT || op == OP_ONCE || op == OP_COND)
  -     { if (!is_anchored(scode, options)) return FALSE; }
  -   else if ((op == OP_TYPESTAR || op == OP_TYPEMINSTAR) &&
  -            (*options & PCRE_DOTALL) != 0)
  -     { if (scode[1] != OP_ANY) return FALSE; }
  -   else if (op != OP_SOD &&
  -           ((*options & PCRE_MULTILINE) != 0 || op != OP_CIRC))
  -     return FALSE;
  -   code += (code[1] << 8) + code[2];
  -   }
  -while (*code == OP_ALT);
  -return TRUE;
  +	do {
  +		const uschar *scode = first_significant_code(code + 3, options,
  +													 PCRE_MULTILINE, FALSE);
  +		register int op = *scode;
  +		if (op >= OP_BRA || op == OP_ASSERT || op == OP_ONCE || op == OP_COND) {
  +			if (!is_anchored(scode, options))
  +				return FALSE;
  +		}
  +		else if ((op == OP_TYPESTAR || op == OP_TYPEMINSTAR) &&
  +				 (*options & PCRE_DOTALL) != 0) {
  +			if (scode[1] != OP_ANY)
  +				return FALSE;
  +		}
  +		else if (op != OP_SOD &&
  +				 ((*options & PCRE_MULTILINE) != 0 || op != OP_CIRC))
  +				return FALSE;
  +		code += (code[1] << 8) + code[2];
  +	}
  +	while (*code == OP_ALT);
  +	return TRUE;
   }
   
  -/*************************************************
  -*         Check for starting with ^ or .*        *
  -*************************************************/
  -
  -/* This is called to find out if every branch starts with ^ or .* so that
  -"first char" processing can be done to speed things up in multiline
  -matching and for non-DOTALL patterns that start with .* (which must start at
  -the beginning or after \n).
  -
  -Argument:  points to start of expression (the bracket)
  -Returns:   TRUE or FALSE
  -*/
  -
  -static BOOL
  -is_startline(const uschar *code)
  +static BOOL is_startline(const uschar * code)
   {
  -do {
  -   const uschar *scode = first_significant_code(code + 3, NULL, 0, FALSE);
  -   register int op = *scode;
  -   if (op >= OP_BRA || op == OP_ASSERT || op == OP_ONCE || op == OP_COND)
  -     { if (!is_startline(scode)) return FALSE; }
  -   else if (op == OP_TYPESTAR || op == OP_TYPEMINSTAR)
  -     { if (scode[1] != OP_ANY) return FALSE; }
  -   else if (op != OP_CIRC) return FALSE;
  -   code += (code[1] << 8) + code[2];
  -   }
  -while (*code == OP_ALT);
  -return TRUE;
  +	do {
  +		const uschar *scode =
  +			first_significant_code(code + 3, NULL, 0, FALSE);
  +		register int op = *scode;
  +		if (op >= OP_BRA || op == OP_ASSERT || op == OP_ONCE || op == OP_COND) {
  +			if (!is_startline(scode))
  +				return FALSE;
  +		}
  +		else if (op == OP_TYPESTAR || op == OP_TYPEMINSTAR) {
  +			if (scode[1] != OP_ANY)
  +				return FALSE;
  +		}
  +		else if (op != OP_CIRC)
  +			return FALSE;
  +		code += (code[1] << 8) + code[2];
  +	}
  +	while (*code == OP_ALT);
  +	return TRUE;
   }
   
  -/*************************************************
  -*          Check for fixed first char            *
  -*************************************************/
  -
  -/* Try to find out if there is a fixed first character. This is called for
  -unanchored expressions, as it speeds up their processing quite considerably.
  -Consider each alternative branch. If they all start with the same char, or with
  -a bracket all of whose alternatives start with the same char (recurse ad lib),
  -then we return that char, otherwise -1.
  -
  -Arguments:
  -  code       points to start of expression (the bracket)
  -  options    pointer to the options (used to check casing changes)
  -
  -Returns:     -1 or the fixed first char
  -*/
  -
  -static int
  -find_firstchar(const uschar *code, int *options)
  +static int find_firstchar(const uschar * code, int *options)
   {
  -register int c = -1;
  -do {
  -   int d;
  -   const uschar *scode = first_significant_code(code + 3, options,
  -     PCRE_CASELESS, TRUE);
  -   register int op = *scode;
  -
  -   if (op >= OP_BRA) op = OP_BRA;
  -
  -   switch(op)
  -     {
  -     default:
  -     return -1;
  -
  -     case OP_BRA:
  -     case OP_ASSERT:
  -     case OP_ONCE:
  -     case OP_COND:
  -     if ((d = find_firstchar(scode, options)) < 0) return -1;
  -     if (c < 0) c = d; else if (c != d) return -1;
  -     break;
  -
  -     case OP_EXACT:       /* Fall through */
  -     scode++;
  -
  -     case OP_CHARS:       /* Fall through */
  -     scode++;
  -
  -     case OP_PLUS:
  -     case OP_MINPLUS:
  -     if (c < 0) c = scode[1]; else if (c != scode[1]) return -1;
  -     break;
  -     }
  -
  -   code += (code[1] << 8) + code[2];
  -   }
  -while (*code == OP_ALT);
  -return c;
  +	register int c = -1;
  +	do {
  +		int d;
  +		const uschar *scode = first_significant_code(code + 3, options,
  +													 PCRE_CASELESS, TRUE);
  +		register int op = *scode;
  +
  +		if (op >= OP_BRA)
  +			op = OP_BRA;
  +
  +		switch (op) {
  +			default:
  +				return -1;
  +
  +			case OP_BRA:
  +			case OP_ASSERT:
  +			case OP_ONCE:
  +			case OP_COND:
  +				if ((d = find_firstchar(scode, options)) < 0)
  +					return -1;
  +				if (c < 0)
  +					c = d;
  +				else if (c != d)
  +					return -1;
  +				break;
  +
  +			case OP_EXACT:
  +				scode++;
  +
  +			case OP_CHARS:
  +				scode++;
  +
  +			case OP_PLUS:
  +			case OP_MINPLUS:
  +				if (c < 0)
  +					c = scode[1];
  +				else if (c != scode[1])
  +					return -1;
  +				break;
  +		}
  +
  +		code += (code[1] << 8) + code[2];
  +	}
  +	while (*code == OP_ALT);
  +	return c;
   }
   
  -/*************************************************
  -*        Compile a Regular Expression            *
  -*************************************************/
  -
  -/* This function takes a string and returns a pointer to a block of store
  -holding a compiled version of the expression.
  -
  -Arguments:
  -  pattern      the regular expression
  -  options      various option bits
  -  errorptr     pointer to pointer to error text
  -  erroroffset  ptr offset in pattern where error was detected
  -  tables       pointer to character tables or NULL
  -
  -Returns:       pointer to compiled data block, or NULL on error,
  -               with errorptr and erroroffset set
  -*/
  -
  -pcre *
  -pcre_compile(const char *pattern, int options, const char **errorptr,
  -  int *erroroffset, const unsigned char *tables)
  +pcre *pcre_compile(const char *pattern, int options, const char **errorptr,
  +				   int *erroroffset, const unsigned char *tables)
   {
  -real_pcre *re;
  -int length = 3;      /* For initial BRA plus length */
  -int runlength;
  -int c, reqchar, countlits;
  -int bracount = 0;
  -int top_backref = 0;
  -int branch_extra = 0;
  -int branch_newextra;
  -unsigned int brastackptr = 0;
  -size_t size;
  -uschar *code;
  -const uschar *ptr;
  -compile_data compile_block;
  -int brastack[BRASTACK_SIZE];
  -uschar bralenstack[BRASTACK_SIZE];
  -
  -/* Can't support UTF8 unless PCRE has been compiled to include the code. */
  +	pcre_st *re;
  +	int length = 3;
  +	int runlength;
  +	int c, reqchar, countlits;
  +	int bracount = 0;
  +	int top_backref = 0;
  +	int branch_extra = 0;
  +	int branch_newextra;
  +	unsigned int brastackptr = 0;
  +	size_t size;
  +	uschar *code;
  +	const uschar *ptr;
  +	compile_data compile_block;
  +	int brastack[BRASTACK_SIZE];
  +	uschar bralenstack[BRASTACK_SIZE];
   
   #ifndef STR_PCRE_SUPPORT_UTF8
  -if ((options & PCRE_UTF8) != 0)
  -  {
  -  *errorptr = ERR32;
  -  return NULL;
  -  }
  +	if ((options & PCRE_UTF8) != 0) {
  +		*errorptr = ERR32;
  +		return NULL;
  +	}
   #endif
   
  -/* We can't pass back an error message if errorptr is NULL; I guess the best we
  -can do is just return NULL. */
  -
  -if (errorptr == NULL) return NULL;
  -*errorptr = NULL;
  -
  -/* However, we can give a message for this error */
  -
  -if (erroroffset == NULL)
  -  {
  -  *errorptr = ERR16;
  -  return NULL;
  -  }
  -*erroroffset = 0;
  -
  -if ((options & ~PUBLIC_OPTIONS) != 0)
  -  {
  -  *errorptr = ERR17;
  -  return NULL;
  -  }
  -
  -/* Set up pointers to the individual character tables */
  -
  -if (tables == NULL) tables = pcre_default_tables;
  -compile_block.lcc = tables + lcc_offset;
  -compile_block.fcc = tables + fcc_offset;
  -compile_block.cbits = tables + cbits_offset;
  -compile_block.ctypes = tables + ctypes_offset;
  -
  -/* Reflect pattern for debugging output */
  -
  -/* The first thing to do is to make a pass over the pattern to compute the
  -amount of store required to hold the compiled code. This does not have to be
  -perfect as long as errors are overestimates. At the same time we can detect any
  -internal flag settings. Make an attempt to correct for any counted white space
  -if an "extended" flag setting appears late in the pattern. We can't be so
  -clever for #-comments. */
  -
  -ptr = (const uschar *)(pattern - 1);
  -while ((c = *(++ptr)) != 0)
  -  {
  -  int min, max;
  -  int class_charcount;
  -  int bracket_length;
  -
  -  if ((options & PCRE_EXTENDED) != 0)
  -    {
  -    if ((compile_block.ctypes[c] & ctype_space) != 0) continue;
  -    if (c == '#')
  -      {
  -      /* The space before the ; is to avoid a warning on a silly compiler
  -      on the Macintosh. */
  -      while ((c = *(++ptr)) != 0 && c != '\n') ;
  -      continue;
  -      }
  -    }
  -
  -  switch(c)
  -    {
  -    /* A backslashed item may be an escaped "normal" character or a
  -    character type. For a "normal" character, put the pointers and
  -    character back so that tests for whitespace etc. in the input
  -    are done correctly. */
  -
  -    case '\\':
  -      {
  -      const uschar *save_ptr = ptr;
  -      c = check_escape(&ptr, errorptr, bracount, options, FALSE, &compile_block);
  -      if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
  -      if (c >= 0)
  -        {
  -        ptr = save_ptr;
  -        c = '\\';
  -        goto NORMAL_CHAR;
  -        }
  -      }
  -    length++;
  -
  -    /* A back reference needs an additional 2 bytes, plus either one or 5
  -    bytes for a repeat. We also need to keep the value of the highest
  -    back reference. */
  -
  -    if (c <= -ESC_REF)
  -      {
  -      int refnum = -c - ESC_REF;
  -      if (refnum > top_backref) top_backref = refnum;
  -      length += 2;   /* For single back reference */
  -      if (ptr[1] == '{' && is_counted_repeat(ptr+2, &compile_block))
  -        {
  -        ptr = read_repeat_counts(ptr+2, &min, &max, errorptr, &compile_block);
  -        if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
  -        if ((min == 0 && (max == 1 || max == -1)) ||
  -          (min == 1 && max == -1))
  -            length++;
  -        else length += 5;
  -        if (ptr[1] == '?') ptr++;
  -        }
  -      }
  -    continue;
  -
  -    case '^':
  -    case '.':
  -    case '$':
  -    case '*':     /* These repeats won't be after brackets; */
  -    case '+':     /* those are handled separately */
  -    case '?':
  -    length++;
  -    continue;
  -
  -    /* This covers the cases of repeats after a single char, metachar, class,
  -    or back reference. */
  -
  -    case '{':
  -    if (!is_counted_repeat(ptr+1, &compile_block)) goto NORMAL_CHAR;
  -    ptr = read_repeat_counts(ptr+1, &min, &max, errorptr, &compile_block);
  -    if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
  -    if ((min == 0 && (max == 1 || max == -1)) ||
  -      (min == 1 && max == -1))
  -        length++;
  -    else
  -      {
  -      length--;   /* Uncount the original char or metachar */
  -      if (min == 1) length++; else if (min > 0) length += 4;
  -      if (max > 0) length += 4; else length += 2;
  -      }
  -    if (ptr[1] == '?') ptr++;
  -    continue;
  -
  -    /* An alternation contains an offset to the next branch or ket. If any ims
  -    options changed in the previous branch(es), and/or if we are in a
  -    lookbehind assertion, extra space will be needed at the start of the
  -    branch. This is handled by branch_extra. */
  -
  -    case '|':
  -    length += 3 + branch_extra;
  -    continue;
  -
  -    /* A character class uses 33 characters. Don't worry about character types
  -    that aren't allowed in classes - they'll get picked up during the compile.
  -    A character class that contains only one character uses 2 or 3 bytes,
  -    depending on whether it is negated or not. Notice this where we can. */
  -
  -    case '[':
  -    class_charcount = 0;
  -    if (*(++ptr) == '^') ptr++;
  -    do
  -      {
  -      if (*ptr == '\\')
  -        {
  -        int ch = check_escape(&ptr, errorptr, bracount, options, TRUE,
  -          &compile_block);
  -        if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
  -        if (-ch == ESC_b) class_charcount++; else class_charcount = 10;
  -        }
  -      else class_charcount++;
  -      ptr++;
  -      }
  -    while (*ptr != 0 && *ptr != ']');
  -
  -    /* Repeats for negated single chars are handled by the general code */
  -
  -    if (class_charcount == 1) length += 3; else
  -      {
  -      length += 33;
  -
  -      /* A repeat needs either 1 or 5 bytes. */
  -
  -      if (*ptr != 0 && ptr[1] == '{' && is_counted_repeat(ptr+2, &compile_block))
  -        {
  -        ptr = read_repeat_counts(ptr+2, &min, &max, errorptr, &compile_block);
  -        if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
  -        if ((min == 0 && (max == 1 || max == -1)) ||
  -          (min == 1 && max == -1))
  -            length++;
  -        else length += 5;
  -        if (ptr[1] == '?') ptr++;
  -        }
  -      }
  -    continue;
  -
  -    /* Brackets may be genuine groups or special things */
  -
  -    case '(':
  -    branch_newextra = 0;
  -    bracket_length = 3;
  -
  -    /* Handle special forms of bracket, which all start (? */
  -
  -    if (ptr[1] == '?')
  -      {
  -      int set, unset;
  -      int *optset;
  -
  -      switch (c = ptr[2])
  -        {
  -        /* Skip over comments entirely */
  -        case '#':
  -        ptr += 3;
  -        while (*ptr != 0 && *ptr != ')') ptr++;
  -        if (*ptr == 0)
  -          {
  -          *errorptr = ERR18;
  -          goto PCRE_ERROR_RETURN;
  -          }
  -        continue;
  -
  -        /* Non-referencing groups and lookaheads just move the pointer on, and
  -        then behave like a non-special bracket, except that they don't increment
  -        the count of extracting brackets. Ditto for the "once only" bracket,
  -        which is in Perl from version 5.005. */
  -
  -        case ':':
  -        case '=':
  -        case '!':
  -        case '>':
  -        ptr += 2;
  -        break;
  -
  -        /* A recursive call to the regex is an extension, to provide the
  -        facility which can be obtained by $(?p{perl-code}) in Perl 5.6. */
  -
  -        case 'R':
  -        if (ptr[3] != ')')
  -          {
  -          *errorptr = ERR29;
  -          goto PCRE_ERROR_RETURN;
  -          }
  -        ptr += 3;
  -        length += 1;
  -        break;
  -
  -        /* Lookbehinds are in Perl from version 5.005 */
  -
  -        case '<':
  -        if (ptr[3] == '=' || ptr[3] == '!')
  -          {
  -          ptr += 3;
  -          branch_newextra = 3;
  -          length += 3;         /* For the first branch */
  -          break;
  -          }
  -        *errorptr = ERR24;
  -        goto PCRE_ERROR_RETURN;
  -
  -        /* Conditionals are in Perl from version 5.005. The bracket must either
  -        be followed by a number (for bracket reference) or by an assertion
  -        group. */
  -
  -        case '(':
  -        if ((compile_block.ctypes[ptr[3]] & ctype_digit) != 0)
  -          {
  -          ptr += 4;
  -          length += 3;
  -          while ((compile_block.ctypes[*ptr] & ctype_digit) != 0) ptr++;
  -          if (*ptr != ')')
  -            {
  -            *errorptr = ERR26;
  -            goto PCRE_ERROR_RETURN;
  -            }
  -          }
  -        else   /* An assertion must follow */
  -          {
  -          ptr++;   /* Can treat like ':' as far as spacing is concerned */
  -          if (ptr[2] != '?' ||
  -             (ptr[3] != '=' && ptr[3] != '!' && ptr[3] != '<') )
  -            {
  -            ptr += 2;    /* To get right offset in message */
  -            *errorptr = ERR28;
  -            goto PCRE_ERROR_RETURN;
  -            }
  -          }
  -        break;
  -
  -        /* Else loop checking valid options until ) is met. Anything else is an
  -        error. If we are without any brackets, i.e. at top level, the settings
  -        act as if specified in the options, so massage the options immediately.
  -        This is for backward compatibility with Perl 5.004. */
  -
  -        default:
  -        set = unset = 0;
  -        optset = &set;
  -        ptr += 2;
  -
  -        for (;; ptr++)
  -          {
  -          c = *ptr;
  -          switch (c)
  -            {
  -            case 'i':
  -            *optset |= PCRE_CASELESS;
  -            continue;
  -
  -            case 'm':
  -            *optset |= PCRE_MULTILINE;
  -            continue;
  -
  -            case 's':
  -            *optset |= PCRE_DOTALL;
  -            continue;
  -
  -            case 'x':
  -            *optset |= PCRE_EXTENDED;
  -            continue;
  -
  -            case 'X':
  -            *optset |= PCRE_EXTRA;
  -            continue;
  -
  -            case 'U':
  -            *optset |= PCRE_UNGREEDY;
  -            continue;
  -
  -            case '-':
  -            optset = &unset;
  -            continue;
  -
  -            /* A termination by ')' indicates an options-setting-only item;
  -            this is global at top level; otherwise nothing is done here and
  -            it is handled during the compiling process on a per-bracket-group
  -            basis. */
  -
  -            case ')':
  -            if (brastackptr == 0)
  -              {
  -              options = (options | set) & (~unset);
  -              set = unset = 0;     /* To save length */
  -              }
  -            /* Fall through */
  -
  -            /* A termination by ':' indicates the start of a nested group with
  -            the given options set. This is again handled at compile time, but
  -            we must allow for compiled space if any of the ims options are
  -            set. We also have to allow for resetting space at the end of
  -            the group, which is why 4 is added to the length and not just 2.
  -            If there are several changes of options within the same group, this
  -            will lead to an over-estimate on the length, but this shouldn't
  -            matter very much. We also have to allow for resetting options at
  -            the start of any alternations, which we do by setting
  -            branch_newextra to 2. Finally, we record whether the case-dependent
  -            flag ever changes within the regex. This is used by the "required
  -            character" code. */
  -
  -            case ':':
  -            if (((set|unset) & PCRE_IMS) != 0)
  -              {
  -              length += 4;
  -              branch_newextra = 2;
  -              if (((set|unset) & PCRE_CASELESS) != 0) options |= PCRE_ICHANGED;
  -              }
  -            goto END_OPTIONS;
  -
  -            /* Unrecognized option character */
  -
  -            default:
  -            *errorptr = ERR12;
  -            goto PCRE_ERROR_RETURN;
  -            }
  -          }
  -
  -        /* If we hit a closing bracket, that's it - this is a freestanding
  -        option-setting. We need to ensure that branch_extra is updated if
  -        necessary. The only values branch_newextra can have here are 0 or 2.
  -        If the value is 2, then branch_extra must either be 2 or 5, depending
  -        on whether this is a lookbehind group or not. */
  -
  -        END_OPTIONS:
  -        if (c == ')')
  -          {
  -          if (branch_newextra == 2 && (branch_extra == 0 || branch_extra == 3))
  -            branch_extra += branch_newextra;
  -          continue;
  -          }
  -
  -        /* If options were terminated by ':' control comes here. Fall through
  -        to handle the group below. */
  -        }
  -      }
  -
  -    /* Extracting brackets must be counted so we can process escapes in a
  -    Perlish way. If the number exceeds EXTRACT_BASIC_MAX we are going to
  -    need an additional 3 bytes of store per extracting bracket. */
  -
  -    else
  -      {
  -      bracount++;
  -      if (bracount > EXTRACT_BASIC_MAX) bracket_length += 3;
  -      }
  -
  -    /* Save length for computing whole length at end if there's a repeat that
  -    requires duplication of the group. Also save the current value of
  -    branch_extra, and start the new group with the new value. If non-zero, this
  -    will either be 2 for a (?imsx: group, or 3 for a lookbehind assertion. */
  -
  -    if (brastackptr >= sizeof(brastack)/sizeof(int))
  -      {
  -      *errorptr = ERR19;
  -      goto PCRE_ERROR_RETURN;
  -      }
  -
  -    bralenstack[brastackptr] = branch_extra;
  -    branch_extra = branch_newextra;
  -
  -    brastack[brastackptr++] = length;
  -    length += bracket_length;
  -    continue;
  -
  -    /* Handle ket. Look for subsequent max/min; for certain sets of values we
  -    have to replicate this bracket up to that many times. If brastackptr is
  -    0 this is an unmatched bracket which will generate an error, but take care
  -    not to try to access brastack[-1] when computing the length and restoring
  -    the branch_extra value. */
  -
  -    case ')':
  -    length += 3;
  -      {
  -      int minval = 1;
  -      int maxval = 1;
  -      int duplength;
  -
  -      if (brastackptr > 0)
  -        {
  -        duplength = length - brastack[--brastackptr];
  -        branch_extra = bralenstack[brastackptr];
  -        }
  -      else duplength = 0;
  -
  -      /* Leave ptr at the final char; for read_repeat_counts this happens
  -      automatically; for the others we need an increment. */
  -
  -      if ((c = ptr[1]) == '{' && is_counted_repeat(ptr+2, &compile_block))
  -        {
  -        ptr = read_repeat_counts(ptr+2, &minval, &maxval, errorptr,
  -          &compile_block);
  -        if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
  -        }
  -      else if (c == '*') { minval = 0; maxval = -1; ptr++; }
  -      else if (c == '+') { maxval = -1; ptr++; }
  -      else if (c == '?') { minval = 0; ptr++; }
  -
  -      /* If the minimum is zero, we have to allow for an OP_BRAZERO before the
  -      group, and if the maximum is greater than zero, we have to replicate
  -      maxval-1 times; each replication acquires an OP_BRAZERO plus a nesting
  -      bracket set - hence the 7. */
  -
  -      if (minval == 0)
  -        {
  -        length++;
  -        if (maxval > 0) length += (maxval - 1) * (duplength + 7);
  -        }
  -
  -      /* When the minimum is greater than zero, 1 we have to replicate up to
  -      minval-1 times, with no additions required in the copies. Then, if
  -      there is a limited maximum we have to replicate up to maxval-1 times
  -      allowing for a BRAZERO item before each optional copy and nesting
  -      brackets for all but one of the optional copies. */
  -
  -      else
  -        {
  -        length += (minval - 1) * duplength;
  -        if (maxval > minval)   /* Need this test as maxval=-1 means no limit */
  -          length += (maxval - minval) * (duplength + 7) - 6;
  -        }
  -      }
  -    continue;
  -
  -    /* Non-special character. For a run of such characters the length required
  -    is the number of characters + 2, except that the maximum run length is 255.
  -    We won't get a skipped space or a non-data escape or the start of a #
  -    comment as the first character, so the length can't be zero. */
  -
  -    NORMAL_CHAR:
  -    default:
  -    length += 2;
  -    runlength = 0;
  -    do
  -      {
  -      if ((options & PCRE_EXTENDED) != 0)
  -        {
  -        if ((compile_block.ctypes[c] & ctype_space) != 0) continue;
  -        if (c == '#')
  -          {
  -          /* The space before the ; is to avoid a warning on a silly compiler
  -          on the Macintosh. */
  -          while ((c = *(++ptr)) != 0 && c != '\n') ;
  -          continue;
  -          }
  -        }
  -
  -      /* Backslash may introduce a data char or a metacharacter; stop the
  -      string before the latter. */
  -
  -      if (c == '\\')
  -        {
  -        const uschar *saveptr = ptr;
  -        c = check_escape(&ptr, errorptr, bracount, options, FALSE,
  -          &compile_block);
  -        if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
  -        if (c < 0) { ptr = saveptr; break; }
  +	if (errorptr == NULL)
  +		return NULL;
  +	*errorptr = NULL;
  +
  +	if (erroroffset == NULL) {
  +		*errorptr = ERR16;
  +		return NULL;
  +	}
  +	*erroroffset = 0;
  +
  +	if ((options & ~PUBLIC_OPTIONS) != 0) {
  +		*errorptr = ERR17;
  +		return NULL;
  +	}
  +
  +	if (tables == NULL)
  +		tables = pcre_default_tables;
  +	compile_block.lcc = tables + lcc_offset;
  +	compile_block.fcc = tables + fcc_offset;
  +	compile_block.cbits = tables + cbits_offset;
  +	compile_block.ctypes = tables + ctypes_offset;
  +
  +	ptr = (const uschar *)(pattern - 1);
  +	while ((c = *(++ptr)) != 0) {
  +		int min, max;
  +		int class_charcount;
  +		int bracket_length;
  +
  +		if ((options & PCRE_EXTENDED) != 0) {
  +			if ((compile_block.ctypes[c] & ctype_space) != 0)
  +				continue;
  +			if (c == '#') {
  +				while ((c = *(++ptr)) != 0 && c != '\n') ;
  +				continue;
  +			}
  +		}
  +
  +		switch (c) {
  +			case '\\':
  +				{
  +					const uschar *save_ptr = ptr;
  +					c =
  +						check_escape(&ptr, errorptr, bracount, options, FALSE,
  +									 &compile_block);
  +					if (*errorptr != NULL)
  +						goto PCRE_ERROR_RETURN;
  +					if (c >= 0) {
  +						ptr = save_ptr;
  +						c = '\\';
  +						goto NORMAL_CHAR;
  +					}
  +				}
  +				length++;
  +
  +				if (c <= -ESC_REF) {
  +					int refnum = -c - ESC_REF;
  +					if (refnum > top_backref)
  +						top_backref = refnum;
  +					length += 2;
  +					if (ptr[1] == '{'
  +						&& is_counted_repeat(ptr + 2, &compile_block)) {
  +						ptr =
  +							read_repeat_counts(ptr + 2, &min, &max, errorptr,
  +											   &compile_block);
  +						if (*errorptr != NULL)
  +							goto PCRE_ERROR_RETURN;
  +						if ((min == 0 && (max == 1 || max == -1)) ||
  +							(min == 1 && max == -1))
  +							length++;
  +						else
  +							length += 5;
  +						if (ptr[1] == '?')
  +							ptr++;
  +					}
  +				}
  +				continue;
  +
  +			case '^':
  +			case '.':
  +			case '$':
  +			case '*':
  +			case '+':
  +			case '?':
  +				length++;
  +				continue;
  +
  +			case '{':
  +				if (!is_counted_repeat(ptr + 1, &compile_block))
  +					goto NORMAL_CHAR;
  +				ptr =
  +					read_repeat_counts(ptr + 1, &min, &max, errorptr,
  +									   &compile_block);
  +				if (*errorptr != NULL)
  +					goto PCRE_ERROR_RETURN;
  +				if ((min == 0 && (max == 1 || max == -1)) ||
  +					(min == 1 && max == -1))
  +					length++;
  +				else {
  +					length--;
  +					if (min == 1)
  +						length++;
  +					else if (min > 0)
  +						length += 4;
  +					if (max > 0)
  +						length += 4;
  +					else
  +						length += 2;
  +				}
  +				if (ptr[1] == '?')
  +					ptr++;
  +				continue;
  +
  +			case '|':
  +				length += 3 + branch_extra;
  +				continue;
  +
  +			case '[':
  +				class_charcount = 0;
  +				if (*(++ptr) == '^')
  +					ptr++;
  +				do {
  +					if (*ptr == '\\') {
  +						int ch =
  +							check_escape(&ptr, errorptr, bracount, options,
  +										 TRUE,
  +										 &compile_block);
  +						if (*errorptr != NULL)
  +							goto PCRE_ERROR_RETURN;
  +						if (-ch == ESC_b)
  +							class_charcount++;
  +						else
  +							class_charcount = 10;
  +					}
  +					else
  +						class_charcount++;
  +					ptr++;
  +				}
  +				while (*ptr != 0 && *ptr != ']');
  +
  +				if (class_charcount == 1)
  +					length += 3;
  +				else {
  +					length += 33;
  +
  +					if (*ptr != 0 && ptr[1] == '{'
  +						&& is_counted_repeat(ptr + 2, &compile_block)) {
  +						ptr =
  +							read_repeat_counts(ptr + 2, &min, &max, errorptr,
  +											   &compile_block);
  +						if (*errorptr != NULL)
  +							goto PCRE_ERROR_RETURN;
  +						if ((min == 0 && (max == 1 || max == -1)) ||
  +							(min == 1 && max == -1))
  +							length++;
  +						else
  +							length += 5;
  +						if (ptr[1] == '?')
  +							ptr++;
  +					}
  +				}
  +				continue;
  +
  +			case '(':
  +				branch_newextra = 0;
  +				bracket_length = 3;
  +
  +				if (ptr[1] == '?') {
  +					int set, unset;
  +					int *optset;
  +
  +					switch (c = ptr[2]) {
  +						case '#':
  +							ptr += 3;
  +							while (*ptr != 0 && *ptr != ')')
  +								ptr++;
  +							if (*ptr == 0) {
  +								*errorptr = ERR18;
  +								goto PCRE_ERROR_RETURN;
  +							}
  +							continue;
  +
  +						case ':':
  +						case '=':
  +						case '!':
  +						case '>':
  +							ptr += 2;
  +							break;
  +
  +						case 'R':
  +							if (ptr[3] != ')') {
  +								*errorptr = ERR29;
  +								goto PCRE_ERROR_RETURN;
  +							}
  +							ptr += 3;
  +							length += 1;
  +							break;
  +
  +						case '<':
  +							if (ptr[3] == '=' || ptr[3] == '!') {
  +								ptr += 3;
  +								branch_newextra = 3;
  +								length += 3;
  +								break;
  +							}
  +							*errorptr = ERR24;
  +							goto PCRE_ERROR_RETURN;
  +
  +						case '(':
  +							if ((compile_block.ctypes[ptr[3]] & ctype_digit)
  +								!= 0) {
  +								ptr += 4;
  +								length += 3;
  +								while (
  +									   (compile_block.
  +										ctypes[*ptr] & ctype_digit) != 0)
  +									ptr++;
  +								if (*ptr != ')') {
  +									*errorptr = ERR26;
  +									goto PCRE_ERROR_RETURN;
  +								}
  +							}
  +							else {
  +								ptr++;
  +								if (ptr[2] != '?' ||
  +									(ptr[3] != '=' && ptr[3] != '!'
  +									 && ptr[3] != '<')) {
  +									ptr += 2;
  +									*errorptr = ERR28;
  +									goto PCRE_ERROR_RETURN;
  +								}
  +							}
  +							break;
  +
  +						default:
  +							set = unset = 0;
  +							optset = &set;
  +							ptr += 2;
  +
  +							for (;; ptr++) {
  +								c = *ptr;
  +								switch (c) {
  +									case 'i':
  +										*optset |= PCRE_CASELESS;
  +										continue;
  +
  +									case 'm':
  +										*optset |= PCRE_MULTILINE;
  +										continue;
  +
  +									case 's':
  +										*optset |= PCRE_DOTALL;
  +										continue;
  +
  +									case 'x':
  +										*optset |= PCRE_EXTENDED;
  +										continue;
  +
  +									case 'X':
  +										*optset |= PCRE_EXTRA;
  +										continue;
  +
  +									case 'U':
  +										*optset |= PCRE_UNGREEDY;
  +										continue;
  +
  +									case '-':
  +										optset = &unset;
  +										continue;
  +
  +									case ')':
  +										if (brastackptr == 0) {
  +											options =
  +												(options | set) & (~unset);
  +											set = unset = 0;
  +										}
  +
  +									case ':':
  +										if (((set | unset) & PCRE_IMS) != 0) {
  +											length += 4;
  +											branch_newextra = 2;
  +											if (
  +												((set | unset) &
  +												 PCRE_CASELESS) != 0)
  +												options |= PCRE_ICHANGED;
  +										}
  +										goto END_OPTIONS;
  +
  +									default:
  +										*errorptr = ERR12;
  +										goto PCRE_ERROR_RETURN;
  +								}
  +							}
  +
  +						  END_OPTIONS:
  +							if (c == ')') {
  +								if (branch_newextra == 2
  +									&& (branch_extra == 0
  +										|| branch_extra == 3)) branch_extra +=
  +										branch_newextra;
  +								continue;
  +							}
  +
  +					}
  +				}
  +
  +				else {
  +					bracount++;
  +					if (bracount > EXTRACT_BASIC_MAX)
  +						bracket_length += 3;
  +				}
  +
  +				if (brastackptr >= sizeof (brastack) / sizeof (int)) {
  +					*errorptr = ERR19;
  +					goto PCRE_ERROR_RETURN;
  +				}
  +
  +				bralenstack[brastackptr] = branch_extra;
  +				branch_extra = branch_newextra;
  +
  +				brastack[brastackptr++] = length;
  +				length += bracket_length;
  +				continue;
  +
  +			case ')':
  +				length += 3;
  +				{
  +					int minval = 1;
  +					int maxval = 1;
  +					int duplength;
  +
  +					if (brastackptr > 0) {
  +						duplength = length - brastack[--brastackptr];
  +						branch_extra = bralenstack[brastackptr];
  +					}
  +					else
  +						duplength = 0;
  +
  +					if ((c = ptr[1]) == '{'
  +						&& is_counted_repeat(ptr + 2, &compile_block)) {
  +						ptr =
  +							read_repeat_counts(ptr + 2, &minval, &maxval,
  +											   errorptr, &compile_block);
  +						if (*errorptr != NULL)
  +							goto PCRE_ERROR_RETURN;
  +					}
  +					else if (c == '*') {
  +						minval = 0;
  +						maxval = -1;
  +						ptr++;
  +					}
  +					else if (c == '+') {
  +						maxval = -1;
  +						ptr++;
  +					}
  +					else if (c == '?') {
  +						minval = 0;
  +						ptr++;
  +					}
  +
  +					if (minval == 0) {
  +						length++;
  +						if (maxval > 0)
  +							length += (maxval - 1) * (duplength + 7);
  +					}
  +
  +					else {
  +						length += (minval - 1) * duplength;
  +						if (maxval > minval)
  +							length += (maxval - minval) * (duplength + 7) - 6;
  +					}
  +				}
  +				continue;
  +
  +			  NORMAL_CHAR:
  +			default:
  +				length += 2;
  +				runlength = 0;
  +				do {
  +					if ((options & PCRE_EXTENDED) != 0) {
  +						if ((compile_block.ctypes[c] & ctype_space) != 0)
  +							continue;
  +						if (c == '#') {
  +							while ((c = *(++ptr)) != 0 && c != '\n') ;
  +							continue;
  +						}
  +					}
  +
  +					if (c == '\\') {
  +						const uschar *saveptr = ptr;
  +						c =
  +							check_escape(&ptr, errorptr, bracount, options,
  +										 FALSE, &compile_block);
  +						if (*errorptr != NULL)
  +							goto PCRE_ERROR_RETURN;
  +						if (c < 0) {
  +							ptr = saveptr;
  +							break;
  +						}
   
   #ifdef STR_PCRE_SUPPORT_UTF8
  -        if (c > 127 && (options & PCRE_UTF8) != 0)
  -          {
  -          int i;
  -          for (i = 0; i < sizeof(utf8_table1)/sizeof(int); i++)
  -            if (c <= utf8_table1[i]) break;
  -          runlength += i;
  -          }
  +						if (c > 127 && (options & PCRE_UTF8) != 0) {
  +							int i;
  +							for (i = 0;
  +								 i < sizeof (utf8_table1) / sizeof (int); i++)
  +								if (c <= utf8_table1[i])
  +									break;
  +							runlength += i;
  +						}
   #endif
  -        }
  -
  -      /* Ordinary character or single-char escape */
  -
  -      runlength++;
  -      }
  +					}
   
  -    /* This "while" is the end of the "do" above. */
  +					runlength++;
  +				}
   
  -    while (runlength < MAXLIT &&
  -      (compile_block.ctypes[c = *(++ptr)] & ctype_meta) == 0);
  +				while (runlength < MAXLIT &&
  +					   (compile_block.ctypes[c = *(++ptr)] & ctype_meta) ==
  +					   0);
  +
  +				ptr--;
  +				length += runlength;
  +				continue;
  +		}
  +	}
  +
  +	length += 4;
  +
  +	if (length > 65539) {
  +		*errorptr = ERR20;
  +		return NULL;
  +	}
  +
  +	size = length + offsetof(pcre_st, code[0]);
  +	re = (pcre_st *) (pcre_malloc) (size);
  +
  +	if (re == NULL) {
  +		*errorptr = ERR21;
  +		return NULL;
  +	}
  +
  +	re->magic_number = MAGIC_NUMBER;
  +	re->size = size;
  +	re->options = options;
  +	re->tables = tables;
  +
  +	ptr = (const uschar *)pattern;
  +	code = re->code;
  +	*code = OP_BRA;
  +	bracount = 0;
  +	(void)compile_regex(options, -1, &bracount, &code, &ptr, errorptr, FALSE, 0,
  +						&reqchar, &countlits, &compile_block);
  +	re->top_bracket = bracount;
  +	re->top_backref = top_backref;
  +
  +	if (*errorptr == NULL && *ptr != 0)
  +		*errorptr = ERR22;
  +
  +	*code++ = OP_END;
  +	if (code - re->code > length)
  +		*errorptr = ERR23;
  +
  +	if (top_backref > re->top_bracket)
  +		*errorptr = ERR15;
  +
  +	if (*errorptr != NULL) {
  +		(pcre_free) (re);
  +	  PCRE_ERROR_RETURN:
  +		*erroroffset = ptr - (const uschar *)pattern;
  +		return NULL;
  +	}
  +
  +	if ((options & PCRE_ANCHORED) == 0) {
  +		int temp_options = options;
  +		if (is_anchored(re->code, &temp_options))
  +			re->options |= PCRE_ANCHORED;
  +		else {
  +			int ch = find_firstchar(re->code, &temp_options);
  +			if (ch >= 0) {
  +				re->first_char = ch;
  +				re->options |= PCRE_FIRSTSET;
  +			}
  +			else if (is_startline(re->code))
  +				re->options |= PCRE_STARTLINE;
  +		}
  +	}
  +
  +	if (reqchar >= 0 && (countlits > 1 || (re->options & PCRE_FIRSTSET) == 0)) {
  +		re->req_char = reqchar;
  +		re->options |= PCRE_REQCHSET;
  +	}
   
  -    ptr--;
  -    length += runlength;
  -    continue;
  -    }
  -  }
  -
  -length += 4;    /* For final KET and END */
  -
  -if (length > 65539)
  -  {
  -  *errorptr = ERR20;
  -  return NULL;
  -  }
  -
  -/* Compute the size of data block needed and get it, either from malloc or
  -externally provided function. We specify "code[0]" in the offsetof() expression
  -rather than just "code", because it has been reported that one broken compiler
  -fails on "code" because it is also an independent variable. It should make no
  -difference to the value of the offsetof(). */
  -
  -size = length + offsetof(real_pcre, code[0]);
  -re = (real_pcre *)(pcre_malloc)(size);
  -
  -if (re == NULL)
  -  {
  -  *errorptr = ERR21;
  -  return NULL;
  -  }
  -
  -/* Put in the magic number, and save the size, options, and table pointer */
  -
  -re->magic_number = MAGIC_NUMBER;
  -re->size = size;
  -re->options = options;
  -re->tables = tables;
  -
  -/* Set up a starting, non-extracting bracket, then compile the expression. On
  -error, *errorptr will be set non-NULL, so we don't need to look at the result
  -of the function here. */
  -
  -ptr = (const uschar *)pattern;
  -code = re->code;
  -*code = OP_BRA;
  -bracount = 0;
  -(void)compile_regex(options, -1, &bracount, &code, &ptr, errorptr, FALSE, 0,
  -  &reqchar, &countlits, &compile_block);
  -re->top_bracket = bracount;
  -re->top_backref = top_backref;
  -
  -/* If not reached end of pattern on success, there's an excess bracket. */
  -
  -if (*errorptr == NULL && *ptr != 0) *errorptr = ERR22;
  -
  -/* Fill in the terminating state and check for disastrous overflow, but
  -if debugging, leave the test till after things are printed out. */
  -
  -*code++ = OP_END;
  -if (code - re->code > length) *errorptr = ERR23;
  -
  -/* Give an error if there's back reference to a non-existent capturing
  -subpattern. */
  -
  -if (top_backref > re->top_bracket) *errorptr = ERR15;
  -
  -/* Failed to compile */
  -
  -if (*errorptr != NULL)
  -  {
  -  (pcre_free)(re);
  -  PCRE_ERROR_RETURN:
  -  *erroroffset = ptr - (const uschar *)pattern;
  -  return NULL;
  -  }
  -
  -/* If the anchored option was not passed, set flag if we can determine that the
  -pattern is anchored by virtue of ^ characters or \A or anything else (such as
  -starting with .* when DOTALL is set).
  -
  -Otherwise, see if we can determine what the first character has to be, because
  -that speeds up unanchored matches no end. If not, see if we can set the
  -PCRE_STARTLINE flag. This is helpful for multiline matches when all branches
  -start with ^. and also when all branches start with .* for non-DOTALL matches.
  -*/
  -
  -if ((options & PCRE_ANCHORED) == 0)
  -  {
  -  int temp_options = options;
  -  if (is_anchored(re->code, &temp_options))
  -    re->options |= PCRE_ANCHORED;
  -  else
  -    {
  -    int ch = find_firstchar(re->code, &temp_options);
  -    if (ch >= 0)
  -      {
  -      re->first_char = ch;
  -      re->options |= PCRE_FIRSTSET;
  -      }
  -    else if (is_startline(re->code))
  -      re->options |= PCRE_STARTLINE;
  -    }
  -  }
  -
  -/* Save the last required character if there are at least two literal
  -characters on all paths, or if there is no first character setting. */
  -
  -if (reqchar >= 0 && (countlits > 1 || (re->options & PCRE_FIRSTSET) == 0))
  -  {
  -  re->req_char = reqchar;
  -  re->options |= PCRE_REQCHSET;
  -  }
  -
  -/* Print out the compiled data for debugging */
  -
  -return (pcre *)re;
  +	return (pcre *) re;
   }
   
  -/*************************************************
  -*          Match a back-reference                *
  -*************************************************/
  -
  -/* If a back reference hasn't been set, the length that is passed is greater
  -than the number of characters left in the string, so the match fails.
  -
  -Arguments:
  -  offset      index into the offset vector
  -  eptr        points into the subject
  -  length      length to be matched
  -  md          points to match data block
  -  ims         the ims flags
  -
  -Returns:      TRUE if matched
  -*/
  -
   static BOOL
  -match_ref(int offset, register const uschar *eptr, int length, match_data *md,
  -  unsigned long int ims)
  +match_ref(int offset, register const uschar * eptr, int length,
  +		  match_data * md, unsigned long int ims)
   {
  -const uschar *p = md->start_subject + md->offset_vector[offset];
  -
  -/* Always fail if not enough characters left */
  +	const uschar *p = md->start_subject + md->offset_vector[offset];
   
  -if (length > md->end_subject - eptr) return FALSE;
  +	if (length > md->end_subject - eptr)
  +		return FALSE;
   
  -/* Separate the caselesss case for speed */
  +	if ((ims & PCRE_CASELESS) != 0) {
  +		while (length-- > 0)
  +			if (md->lcc[*p++] != md->lcc[*eptr++])
  +				return FALSE;
  +	}
  +	else {
  +		while (length-- > 0)
  +			if (*p++ != *eptr++)
  +				return FALSE;
  +	}
   
  -if ((ims & PCRE_CASELESS) != 0)
  -  {
  -  while (length-- > 0)
  -    if (md->lcc[*p++] != md->lcc[*eptr++]) return FALSE;
  -  }
  -else
  -  { while (length-- > 0) if (*p++ != *eptr++) return FALSE; }
  -
  -return TRUE;
  +	return TRUE;
   }
   
  -/*************************************************
  -*         Match from current position            *
  -*************************************************/
  -
  -/* On entry ecode points to the first opcode, and eptr to the first character
  -in the subject string, while eptrb holds the value of eptr at the start of the
  -last bracketed group - used for breaking infinite loops matching zero-length
  -strings.
  -
  -Arguments:
  -   eptr        pointer in subject
  -   ecode       position in code
  -   offset_top  current top pointer
  -   md          pointer to "static" info for the match
  -   ims         current /i, /m, and /s options
  -   eptrb       pointer to chain of blocks containing eptr at start of
  -                 brackets - for testing for empty matches
  -   flags       can contain
  -                 match_condassert - this is an assertion condition
  -                 match_isgroup - this is the start of a bracketed group
  -
  -Returns:       TRUE if matched
  -*/
  -
   static BOOL
  -match(register const uschar *eptr, register const uschar *ecode,
  -  int offset_top, match_data *md, unsigned long int ims, eptrblock *eptrb,
  -  int flags)
  +match(register const uschar * eptr, register const uschar * ecode,
  +	  int offset_top, match_data * md, unsigned long int ims,
  +	  eptrblock * eptrb, int flags)
   {
  -unsigned long int original_ims = ims;   /* Save for resetting on ')' */
  -eptrblock newptrb;
  -
  -/* At the start of a bracketed group, add the current subject pointer to the
  -stack of such pointers, to be re-instated at the end of the group when we hit
  -the closing ket. When match() is called in other circumstances, we don't add to
  -the stack. */
  -
  -if ((flags & match_isgroup) != 0)
  -  {
  -  newptrb.prev = eptrb;
  -  newptrb.saved_eptr = eptr;
  -  eptrb = &newptrb;
  -  }
  -
  -/* Now start processing the operations. */
  -
  -for (;;)
  -  {
  -  int op = (int)*ecode;
  -  int min, max, ctype;
  -  register int i;
  -  register int c;
  -  BOOL minimize = FALSE;
  -
  -  /* Opening capturing bracket. If there is space in the offset vector, save
  -  the current subject position in the working slot at the top of the vector. We
  -  mustn't change the current values of the data slot, because they may be set
  -  from a previous iteration of this group, and be referred to by a reference
  -  inside the group.
  -
  -  If the bracket fails to match, we need to restore this value and also the
  -  values of the final offsets, in case they were set by a previous iteration of
  -  the same bracket.
  -
  -  If there isn't enough space in the offset vector, treat this as if it were a
  -  non-capturing bracket. Don't worry about setting the flag for the error case
  -  here; that is handled in the code for KET. */
  -
  -  if (op > OP_BRA)
  -    {
  -    int offset;
  -    int number = op - OP_BRA;
  -
  -    /* For extended extraction brackets (large number), we have to fish out the
  -    number from a dummy opcode at the start. */
  -
  -    if (number > EXTRACT_BASIC_MAX) number = (ecode[4] << 8) | ecode[5];
  -    offset = number << 1;
  -
  -    if (offset < md->offset_max)
  -      {
  -      int save_offset1 = md->offset_vector[offset];
  -      int save_offset2 = md->offset_vector[offset+1];
  -      int save_offset3 = md->offset_vector[md->offset_end - number];
  -
  -      md->offset_vector[md->offset_end - number] = eptr - md->start_subject;
  -
  -      do
  -        {
  -        if (match(eptr, ecode+3, offset_top, md, ims, eptrb, match_isgroup))
  -          return TRUE;
  -        ecode += (ecode[1] << 8) + ecode[2];
  -        }
  -      while (*ecode == OP_ALT);
  -
  -      md->offset_vector[offset] = save_offset1;
  -      md->offset_vector[offset+1] = save_offset2;
  -      md->offset_vector[md->offset_end - number] = save_offset3;
  +	unsigned long int original_ims = ims;
  +	eptrblock newptrb;
   
  -      return FALSE;
  -      }
  +	if ((flags & match_isgroup) != 0) {
  +		newptrb.prev = eptrb;
  +		newptrb.saved_eptr = eptr;
  +		eptrb = &newptrb;
  +	}
  +
  +	for (;;) {
  +		int op = (int)*ecode;
  +		int min, max, ctype;
  +		register int i;
  +		register int c;
  +		BOOL minimize = FALSE;
  +
  +		if (op > OP_BRA) {
  +			int offset;
  +			int number = op - OP_BRA;
  +
  +			if (number > EXTRACT_BASIC_MAX)
  +				number = (ecode[4] << 8) | ecode[5];
  +			offset = number << 1;
  +
  +			if (offset < md->offset_max) {
  +				int save_offset1 = md->offset_vector[offset];
  +				int save_offset2 = md->offset_vector[offset + 1];
  +				int save_offset3 = md->offset_vector[md->offset_end - number];
  +
  +				md->offset_vector[md->offset_end - number] =
  +					eptr - md->start_subject;
  +
  +				do {
  +					if (match
  +						(eptr, ecode + 3, offset_top, md, ims, eptrb,
  +						 match_isgroup)) return TRUE;
  +					ecode += (ecode[1] << 8) + ecode[2];
  +				}
  +				while (*ecode == OP_ALT);
  +
  +				md->offset_vector[offset] = save_offset1;
  +				md->offset_vector[offset + 1] = save_offset2;
  +				md->offset_vector[md->offset_end - number] = save_offset3;
  +
  +				return FALSE;
  +			}
  +
  +			else
  +				op = OP_BRA;
  +		}
  +
  +		switch (op) {
  +			case OP_BRA:
  +
  +				do {
  +					if (match
  +						(eptr, ecode + 3, offset_top, md, ims, eptrb,
  +						 match_isgroup)) return TRUE;
  +					ecode += (ecode[1] << 8) + ecode[2];
  +				}
  +				while (*ecode == OP_ALT);
  +
  +				return FALSE;
  +
  +			case OP_COND:
  +				if (ecode[3] == OP_CREF) {
  +					int offset = (ecode[4] << 9) | (ecode[5] << 1);
  +					return match(eptr,
  +								 ecode +
  +								 ((offset
  +								   < offset_top
  +								   && md->offset_vector[offset] >=
  +								   0) ? 6 : 3 + (ecode[1] << 8) + ecode[2]),
  +								 offset_top, md, ims, eptrb, match_isgroup);
  +				}
  +
  +				else {
  +					if (match(eptr, ecode + 3, offset_top, md, ims, NULL,
  +							  match_condassert | match_isgroup)) {
  +						ecode += 3 + (ecode[4] << 8) + ecode[5];
  +						while (*ecode == OP_ALT)
  +							ecode += (ecode[1] << 8) + ecode[2];
  +					}
  +					else
  +						ecode += (ecode[1] << 8) + ecode[2];
  +					return match(eptr, ecode + 3, offset_top, md, ims, eptrb,
  +								 match_isgroup);
  +				}
  +
  +			case OP_CREF:
  +			case OP_BRANUMBER:
  +				ecode += 3;
  +				break;
  +
  +			case OP_END:
  +				if (md->notempty && eptr == md->start_match)
  +					return FALSE;
  +				md->end_match_ptr = eptr;
  +				md->end_offset_top = offset_top;
  +				return TRUE;
  +
  +			case OP_OPT:
  +				ims = ecode[1];
  +				ecode += 2;
  +
  +				break;
  +
  +			case OP_ASSERT:
  +			case OP_ASSERTBACK:
  +				do {
  +					if (match
  +						(eptr, ecode + 3, offset_top, md, ims, NULL,
  +						 match_isgroup)) break;
  +					ecode += (ecode[1] << 8) + ecode[2];
  +				}
  +				while (*ecode == OP_ALT);
  +				if (*ecode == OP_KET)
  +					return FALSE;
  +
  +				if ((flags & match_condassert) != 0)
  +					return TRUE;
  +
  +				do
  +					ecode += (ecode[1] << 8) + ecode[2];
  +				while (*ecode == OP_ALT);
  +				ecode += 3;
  +				offset_top = md->end_offset_top;
  +				continue;
  +
  +			case OP_ASSERT_NOT:
  +			case OP_ASSERTBACK_NOT:
  +				do {
  +					if (match
  +						(eptr, ecode + 3, offset_top, md, ims, NULL,
  +						 match_isgroup)) return FALSE;
  +					ecode += (ecode[1] << 8) + ecode[2];
  +				}
  +				while (*ecode == OP_ALT);
   
  -    /* Insufficient room for saving captured contents */
  +				if ((flags & match_condassert) != 0)
  +					return TRUE;
   
  -    else op = OP_BRA;
  -    }
  -
  -  /* Other types of node can be handled by a switch */
  +				ecode += 3;
  +				continue;
   
  -  switch(op)
  -    {
  -    case OP_BRA:     /* Non-capturing bracket: optimized */
  -
  -    do
  -      {
  -      if (match(eptr, ecode+3, offset_top, md, ims, eptrb, match_isgroup))
  -        return TRUE;
  -      ecode += (ecode[1] << 8) + ecode[2];
  -      }
  -    while (*ecode == OP_ALT);
  -
  -    return FALSE;
  -
  -    /* Conditional group: compilation checked that there are no more than
  -    two branches. If the condition is false, skipping the first branch takes us
  -    past the end if there is only one branch, but that's OK because that is
  -    exactly what going to the ket would do. */
  -
  -    case OP_COND:
  -    if (ecode[3] == OP_CREF)         /* Condition is extraction test */
  -      {
  -      int offset = (ecode[4] << 9) | (ecode[5] << 1); /* Doubled ref number */
  -      return match(eptr,
  -        ecode + ((offset < offset_top && md->offset_vector[offset] >= 0)?
  -          6 : 3 + (ecode[1] << 8) + ecode[2]),
  -        offset_top, md, ims, eptrb, match_isgroup);
  -      }
  -
  -    /* The condition is an assertion. Call match() to evaluate it - setting
  -    the final argument TRUE causes it to stop at the end of an assertion. */
  -
  -    else
  -      {
  -      if (match(eptr, ecode+3, offset_top, md, ims, NULL,
  -          match_condassert | match_isgroup))
  -        {
  -        ecode += 3 + (ecode[4] << 8) + ecode[5];
  -        while (*ecode == OP_ALT) ecode += (ecode[1] << 8) + ecode[2];
  -        }
  -      else ecode += (ecode[1] << 8) + ecode[2];
  -      return match(eptr, ecode+3, offset_top, md, ims, eptrb, match_isgroup);
  -      }
  -    /* Control never reaches here */
  -
  -    /* Skip over conditional reference or large extraction number data if
  -    encountered. */
  -
  -    case OP_CREF:
  -    case OP_BRANUMBER:
  -    ecode += 3;
  -    break;
  -
  -    case OP_END:
  -    if (md->notempty && eptr == md->start_match) return FALSE;
  -    md->end_match_ptr = eptr;          /* Record where we ended */
  -    md->end_offset_top = offset_top;   /* and how many extracts were taken */
  -    return TRUE;
  -
  -    /* Change option settings */
  -
  -    case OP_OPT:
  -    ims = ecode[1];
  -    ecode += 2;
  -
  -    break;
  -
  -    /* Assertion brackets. Check the alternative branches in turn - the
  -    matching won't pass the KET for an assertion. If any one branch matches,
  -    the assertion is true. Lookbehind assertions have an OP_REVERSE item at the
  -    start of each branch to move the current point backwards, so the code at
  -    this level is identical to the lookahead case. */
  -
  -    case OP_ASSERT:
  -    case OP_ASSERTBACK:
  -    do
  -      {
  -      if (match(eptr, ecode+3, offset_top, md, ims, NULL, match_isgroup)) break;
  -      ecode += (ecode[1] << 8) + ecode[2];
  -      }
  -    while (*ecode == OP_ALT);
  -    if (*ecode == OP_KET) return FALSE;
  -
  -    /* If checking an assertion for a condition, return TRUE. */
  -
  -    if ((flags & match_condassert) != 0) return TRUE;
  -
  -    /* Continue from after the assertion, updating the offsets high water
  -    mark, since extracts may have been taken during the assertion. */
  -
  -    do ecode += (ecode[1] << 8) + ecode[2]; while (*ecode == OP_ALT);
  -    ecode += 3;
  -    offset_top = md->end_offset_top;
  -    continue;
  -
  -    /* Negative assertion: all branches must fail to match */
  -
  -    case OP_ASSERT_NOT:
  -    case OP_ASSERTBACK_NOT:
  -    do
  -      {
  -      if (match(eptr, ecode+3, offset_top, md, ims, NULL, match_isgroup))
  -        return FALSE;
  -      ecode += (ecode[1] << 8) + ecode[2];
  -      }
  -    while (*ecode == OP_ALT);
  -
  -    if ((flags & match_condassert) != 0) return TRUE;
  -
  -    ecode += 3;
  -    continue;
  -
  -    /* Move the subject pointer back. This occurs only at the start of
  -    each branch of a lookbehind assertion. If we are too close to the start to
  -    move back, this match function fails. When working with UTF-8 we move
  -    back a number of characters, not bytes. */
  -
  -    case OP_REVERSE:
  +			case OP_REVERSE:
   #ifdef STR_PCRE_SUPPORT_UTF8
  -    c = (ecode[1] << 8) + ecode[2];
  -    for (i = 0; i < c; i++)
  -      {
  -      eptr--;
  -      BACKCHAR(eptr)
  -      }
  +				c = (ecode[1] << 8) + ecode[2];
  +				for (i = 0; i < c; i++) {
  +					eptr--;
  +					BACKCHAR(eptr)
  +				}
   #else
  -    eptr -= (ecode[1] << 8) + ecode[2];
  +				eptr -= (ecode[1] << 8) + ecode[2];
   #endif
   
  -    if (eptr < md->start_subject) return FALSE;
  -    ecode += 3;
  -    break;
  -
  -    /* Recursion matches the current regex, nested. If there are any capturing
  -    brackets started but not finished, we have to save their starting points
  -    and reinstate them after the recursion. However, we don't know how many
  -    such there are (offset_top records the completed total) so we just have
  -    to save all the potential data. There may be up to 99 such values, which
  -    is a bit large to put on the stack, but using malloc for small numbers
  -    seems expensive. As a compromise, the stack is used when there are fewer
  -    than 16 values to store; otherwise malloc is used. A problem is what to do
  -    if the malloc fails ... there is no way of returning to the top level with
  -    an error. Save the top 15 values on the stack, and accept that the rest
  -    may be wrong. */
  -
  -    case OP_RECURSE:
  -      {
  -      BOOL rc;
  -      int *save;
  -      int stacksave[15];
  -
  -      c = md->offset_max;
  -
  -      if (c < 16) save = stacksave; else
  -        {
  -        save = (int *)(pcre_malloc)((c+1) * sizeof(int));
  -        if (save == NULL)
  -          {
  -          save = stacksave;
  -          c = 15;
  -          }
  -        }
  -
  -      for (i = 1; i <= c; i++)
  -        save[i] = md->offset_vector[md->offset_end - i];
  -      rc = match(eptr, md->start_pattern, offset_top, md, ims, eptrb,
  -        match_isgroup);
  -      for (i = 1; i <= c; i++)
  -        md->offset_vector[md->offset_end - i] = save[i];
  -      if (save != stacksave) (pcre_free)(save);
  -      if (!rc) return FALSE;
  -
  -      /* In case the recursion has set more capturing values, save the final
  -      number, then move along the subject till after the recursive match,
  -      and advance one byte in the pattern code. */
  -
  -      offset_top = md->end_offset_top;
  -      eptr = md->end_match_ptr;
  -      ecode++;
  -      }
  -    break;
  -
  -    /* "Once" brackets are like assertion brackets except that after a match,
  -    the point in the subject string is not moved back. Thus there can never be
  -    a move back into the brackets. Check the alternative branches in turn - the
  -    matching won't pass the KET for this kind of subpattern. If any one branch
  -    matches, we carry on as at the end of a normal bracket, leaving the subject
  -    pointer. */
  -
  -    case OP_ONCE:
  -      {
  -      const uschar *prev = ecode;
  -      const uschar *saved_eptr = eptr;
  -
  -      do
  -        {
  -        if (match(eptr, ecode+3, offset_top, md, ims, eptrb, match_isgroup))
  -          break;
  -        ecode += (ecode[1] << 8) + ecode[2];
  -        }
  -      while (*ecode == OP_ALT);
  -
  -      /* If hit the end of the group (which could be repeated), fail */
  -
  -      if (*ecode != OP_ONCE && *ecode != OP_ALT) return FALSE;
  -
  -      /* Continue as from after the assertion, updating the offsets high water
  -      mark, since extracts may have been taken. */
  -
  -      do ecode += (ecode[1] << 8) + ecode[2]; while (*ecode == OP_ALT);
  -
  -      offset_top = md->end_offset_top;
  -      eptr = md->end_match_ptr;
  -
  -      /* For a non-repeating ket, just continue at this level. This also
  -      happens for a repeating ket if no characters were matched in the group.
  -      This is the forcible breaking of infinite loops as implemented in Perl
  -      5.005. If there is an options reset, it will get obeyed in the normal
  -      course of events. */
  -
  -      if (*ecode == OP_KET || eptr == saved_eptr)
  -        {
  -        ecode += 3;
  -        break;
  -        }
  -
  -      /* The repeating kets try the rest of the pattern or restart from the
  -      preceding bracket, in the appropriate order. We need to reset any options
  -      that changed within the bracket before re-running it, so check the next
  -      opcode. */
  -
  -      if (ecode[3] == OP_OPT)
  -        {
  -        ims = (ims & ~PCRE_IMS) | ecode[4];
  -
  -        }
  -
  -      if (*ecode == OP_KETRMIN)
  -        {
  -        if (match(eptr, ecode+3, offset_top, md, ims, eptrb, 0) ||
  -            match(eptr, prev, offset_top, md, ims, eptrb, match_isgroup))
  -              return TRUE;
  -        }
  -      else  /* OP_KETRMAX */
  -        {
  -        if (match(eptr, prev, offset_top, md, ims, eptrb, match_isgroup) ||
  -            match(eptr, ecode+3, offset_top, md, ims, eptrb, 0)) return TRUE;
  -        }
  -      }
  -    return FALSE;
  -
  -    /* An alternation is the end of a branch; scan along to find the end of the
  -    bracketed group and go to there. */
  -
  -    case OP_ALT:
  -    do ecode += (ecode[1] << 8) + ecode[2]; while (*ecode == OP_ALT);
  -    break;
  -
  -    /* BRAZERO and BRAMINZERO occur just before a bracket group, indicating
  -    that it may occur zero times. It may repeat infinitely, or not at all -
  -    i.e. it could be ()* or ()? in the pattern. Brackets with fixed upper
  -    repeat limits are compiled as a number of copies, with the optional ones
  -    preceded by BRAZERO or BRAMINZERO. */
  -
  -    case OP_BRAZERO:
  -      {
  -      const uschar *next = ecode+1;
  -      if (match(eptr, next, offset_top, md, ims, eptrb, match_isgroup))
  -        return TRUE;
  -      do next += (next[1] << 8) + next[2]; while (*next == OP_ALT);
  -      ecode = next + 3;
  -      }
  -    break;
  -
  -    case OP_BRAMINZERO:
  -      {
  -      const uschar *next = ecode+1;
  -      do next += (next[1] << 8) + next[2]; while (*next == OP_ALT);
  -      if (match(eptr, next+3, offset_top, md, ims, eptrb, match_isgroup))
  -        return TRUE;
  -      ecode++;
  -      }
  -    break;
  -
  -    case OP_KET:
  -    case OP_KETRMIN:
  -    case OP_KETRMAX:
  -      {
  -      const uschar *prev = ecode - (ecode[1] << 8) - ecode[2];
  -      const uschar *saved_eptr = eptrb->saved_eptr;
  -
  -      eptrb = eptrb->prev;    /* Back up the stack of bracket start pointers */
  -
  -      if (*prev == OP_ASSERT || *prev == OP_ASSERT_NOT ||
  -          *prev == OP_ASSERTBACK || *prev == OP_ASSERTBACK_NOT ||
  -          *prev == OP_ONCE)
  -        {
  -        md->end_match_ptr = eptr;      /* For ONCE */
  -        md->end_offset_top = offset_top;
  -        return TRUE;
  -        }
  -
  -      /* In all other cases except a conditional group we have to check the
  -      group number back at the start and if necessary complete handling an
  -      extraction by setting the offsets and bumping the high water mark. */
  -
  -      if (*prev != OP_COND)
  -        {
  -        int offset;
  -        int number = *prev - OP_BRA;
  -
  -        /* For extended extraction brackets (large number), we have to fish out
  -        the number from a dummy opcode at the start. */
  -
  -        if (number > EXTRACT_BASIC_MAX) number = (prev[4] << 8) | prev[5];
  -        offset = number << 1;
  -
  -        if (number > 0)
  -          {
  -          if (offset >= md->offset_max) md->offset_overflow = TRUE; else
  -            {
  -            md->offset_vector[offset] =
  -              md->offset_vector[md->offset_end - number];
  -            md->offset_vector[offset+1] = eptr - md->start_subject;
  -            if (offset_top <= offset) offset_top = offset + 2;
  -            }
  -          }
  -        }
  -
  -      /* Reset the value of the ims flags, in case they got changed during
  -      the group. */
  -
  -      ims = original_ims;
  -
  -      /* For a non-repeating ket, just continue at this level. This also
  -      happens for a repeating ket if no characters were matched in the group.
  -      This is the forcible breaking of infinite loops as implemented in Perl
  -      5.005. If there is an options reset, it will get obeyed in the normal
  -      course of events. */
  -
  -      if (*ecode == OP_KET || eptr == saved_eptr)
  -        {
  -        ecode += 3;
  -        break;
  -        }
  -
  -      /* The repeating kets try the rest of the pattern or restart from the
  -      preceding bracket, in the appropriate order. */
  -
  -      if (*ecode == OP_KETRMIN)
  -        {
  -        if (match(eptr, ecode+3, offset_top, md, ims, eptrb, 0) ||
  -            match(eptr, prev, offset_top, md, ims, eptrb, match_isgroup))
  -              return TRUE;
  -        }
  -      else  /* OP_KETRMAX */
  -        {
  -        if (match(eptr, prev, offset_top, md, ims, eptrb, match_isgroup) ||
  -            match(eptr, ecode+3, offset_top, md, ims, eptrb, 0)) return TRUE;
  -        }
  -      }
  -    return FALSE;
  -
  -    /* Start of subject unless notbol, or after internal newline if multiline */
  -
  -    case OP_CIRC:
  -    if (md->notbol && eptr == md->start_subject) return FALSE;
  -    if ((ims & PCRE_MULTILINE) != 0)
  -      {
  -      if (eptr != md->start_subject && eptr[-1] != '\n') return FALSE;
  -      ecode++;
  -      break;
  -      }
  -    /* ... else fall through */
  -
  -    /* Start of subject assertion */
  -
  -    case OP_SOD:
  -    if (eptr != md->start_subject) return FALSE;
  -    ecode++;
  -    break;
  -
  -    /* Assert before internal newline if multiline, or before a terminating
  -    newline unless endonly is set, else end of subject unless noteol is set. */
  -
  -    case OP_DOLL:
  -    if ((ims & PCRE_MULTILINE) != 0)
  -      {
  -      if (eptr < md->end_subject) { if (*eptr != '\n') return FALSE; }
  -        else { if (md->noteol) return FALSE; }
  -      ecode++;
  -      break;
  -      }
  -    else
  -      {
  -      if (md->noteol) return FALSE;
  -      if (!md->endonly)
  -        {
  -        if (eptr < md->end_subject - 1 ||
  -           (eptr == md->end_subject - 1 && *eptr != '\n')) return FALSE;
  -
  -        ecode++;
  -        break;
  -        }
  -      }
  -    /* ... else fall through */
  -
  -    case OP_EOD:
  -    if (eptr < md->end_subject) return FALSE;
  -    ecode++;
  -    break;
  -
  -    case OP_EODN:
  -    if (eptr < md->end_subject - 1 ||
  -       (eptr == md->end_subject - 1 && *eptr != '\n')) return FALSE;
  -    ecode++;
  -    break;
  -
  -    /* Word boundary assertions */
  -
  -    case OP_NOT_WORD_BOUNDARY:
  -    case OP_WORD_BOUNDARY:
  -      {
  -      BOOL prev_is_word = (eptr != md->start_subject) &&
  -        ((md->ctypes[eptr[-1]] & ctype_word) != 0);
  -      BOOL cur_is_word = (eptr < md->end_subject) &&
  -        ((md->ctypes[*eptr] & ctype_word) != 0);
  -      if ((*ecode++ == OP_WORD_BOUNDARY)?
  -           cur_is_word == prev_is_word : cur_is_word != prev_is_word)
  -        return FALSE;
  -      }
  -    break;
  -
  -    /* Match a single character type; inline for speed */
  -
  -    case OP_ANY:
  -    if ((ims & PCRE_DOTALL) == 0 && eptr < md->end_subject && *eptr == '\n')
  -      return FALSE;
  -    if (eptr++ >= md->end_subject) return FALSE;
  +				if (eptr < md->start_subject)
  +					return FALSE;
  +				ecode += 3;
  +				break;
  +
  +			case OP_RECURSE:
  +				{
  +					BOOL rc;
  +					int *save;
  +					int stacksave[15];
  +
  +					c = md->offset_max;
  +
  +					if (c < 16)
  +						save = stacksave;
  +					else {
  +						save = (int *)(pcre_malloc) ((c + 1) * sizeof (int));
  +						if (save == NULL) {
  +							save = stacksave;
  +							c = 15;
  +						}
  +					}
  +
  +					for (i = 1; i <= c; i++)
  +						save[i] = md->offset_vector[md->offset_end - i];
  +					rc =
  +						match(eptr, md->start_pattern, offset_top, md, ims,
  +							  eptrb, match_isgroup);
  +					for (i = 1; i <= c; i++)
  +						md->offset_vector[md->offset_end - i] = save[i];
  +					if (save != stacksave)
  +						(pcre_free) (save);
  +					if (!rc)
  +						return FALSE;
  +
  +					offset_top = md->end_offset_top;
  +					eptr = md->end_match_ptr;
  +					ecode++;
  +				}
  +				break;
  +
  +			case OP_ONCE:
  +				{
  +					const uschar *prev = ecode;
  +					const uschar *saved_eptr = eptr;
  +
  +					do {
  +						if (match
  +							(eptr, ecode + 3, offset_top, md, ims, eptrb,
  +							 match_isgroup)) break;
  +						ecode += (ecode[1] << 8) + ecode[2];
  +					}
  +					while (*ecode == OP_ALT);
  +
  +					if (*ecode != OP_ONCE && *ecode != OP_ALT)
  +						return FALSE;
  +
  +					do
  +						ecode += (ecode[1] << 8) + ecode[2];
  +					while (*ecode == OP_ALT);
  +
  +					offset_top = md->end_offset_top;
  +					eptr = md->end_match_ptr;
  +
  +					if (*ecode == OP_KET || eptr == saved_eptr) {
  +						ecode += 3;
  +						break;
  +					}
  +
  +					if (ecode[3] == OP_OPT) {
  +						ims = (ims & ~PCRE_IMS) | ecode[4];
  +
  +					}
  +
  +					if (*ecode == OP_KETRMIN) {
  +						if (match
  +							(eptr, ecode + 3, offset_top, md, ims, eptrb, 0)
  +							|| match(eptr, prev, offset_top, md, ims, eptrb,
  +									 match_isgroup)) return TRUE;
  +					}
  +					else {
  +						if (match
  +							(eptr, prev, offset_top, md, ims, eptrb,
  +							 match_isgroup)
  +							|| match(eptr, ecode + 3, offset_top, md, ims,
  +									 eptrb, 0))
  +							return TRUE;
  +					}
  +				}
  +				return FALSE;
  +
  +			case OP_ALT:
  +				do
  +					ecode += (ecode[1] << 8) + ecode[2];
  +				while (*ecode == OP_ALT);
  +				break;
  +
  +			case OP_BRAZERO:
  +				{
  +					const uschar *next = ecode + 1;
  +					if (match
  +						(eptr, next, offset_top, md, ims, eptrb,
  +						 match_isgroup)) return TRUE;
  +					do
  +						next += (next[1] << 8) + next[2];
  +					while (*next == OP_ALT);
  +					ecode = next + 3;
  +				}
  +				break;
  +
  +			case OP_BRAMINZERO:
  +				{
  +					const uschar *next = ecode + 1;
  +					do
  +						next += (next[1] << 8) + next[2];
  +					while (*next == OP_ALT);
  +					if (match
  +						(eptr, next + 3, offset_top, md, ims, eptrb,
  +						 match_isgroup)) return TRUE;
  +					ecode++;
  +				}
  +				break;
  +
  +			case OP_KET:
  +			case OP_KETRMIN:
  +			case OP_KETRMAX:
  +				{
  +					const uschar *prev = ecode - (ecode[1] << 8) - ecode[2];
  +					const uschar *saved_eptr = eptrb->saved_eptr;
  +
  +					eptrb = eptrb->prev;
  +
  +					if (*prev == OP_ASSERT || *prev == OP_ASSERT_NOT ||
  +						*prev == OP_ASSERTBACK || *prev == OP_ASSERTBACK_NOT
  +						|| *prev == OP_ONCE) {
  +						md->end_match_ptr = eptr;
  +						md->end_offset_top = offset_top;
  +						return TRUE;
  +					}
  +
  +					if (*prev != OP_COND) {
  +						int offset;
  +						int number = *prev - OP_BRA;
  +
  +						if (number > EXTRACT_BASIC_MAX)
  +							number = (prev[4] << 8) | prev[5];
  +						offset = number << 1;
  +
  +						if (number > 0) {
  +							if (offset >= md->offset_max)
  +								md->offset_overflow = TRUE;
  +							else {
  +								md->offset_vector[offset] =
  +									md->offset_vector[md->offset_end -
  +													  number];
  +								md->offset_vector[offset + 1] =
  +									eptr - md->start_subject;
  +								if (offset_top <= offset)
  +									offset_top = offset + 2;
  +							}
  +						}
  +					}
  +
  +					ims = original_ims;
  +
  +					if (*ecode == OP_KET || eptr == saved_eptr) {
  +						ecode += 3;
  +						break;
  +					}
  +
  +					if (*ecode == OP_KETRMIN) {
  +						if (match
  +							(eptr, ecode + 3, offset_top, md, ims, eptrb, 0)
  +							|| match(eptr, prev, offset_top, md, ims, eptrb,
  +									 match_isgroup)) return TRUE;
  +					}
  +					else {
  +						if (match
  +							(eptr, prev, offset_top, md, ims, eptrb,
  +							 match_isgroup)
  +							|| match(eptr, ecode + 3, offset_top, md, ims,
  +									 eptrb, 0))
  +							return TRUE;
  +					}
  +				}
  +				return FALSE;
  +
  +			case OP_CIRC:
  +				if (md->notbol && eptr == md->start_subject)
  +					return FALSE;
  +				if ((ims & PCRE_MULTILINE) != 0) {
  +					if (eptr != md->start_subject && eptr[-1] != '\n')
  +						return FALSE;
  +					ecode++;
  +					break;
  +				}
  +
  +			case OP_SOD:
  +				if (eptr != md->start_subject)
  +					return FALSE;
  +				ecode++;
  +				break;
  +
  +			case OP_DOLL:
  +				if ((ims & PCRE_MULTILINE) != 0) {
  +					if (eptr < md->end_subject) {
  +						if (*eptr != '\n')
  +							return FALSE;
  +					}
  +					else {
  +						if (md->noteol)
  +							return FALSE;
  +					}
  +					ecode++;
  +					break;
  +				}
  +				else {
  +					if (md->noteol)
  +						return FALSE;
  +					if (!md->endonly) {
  +						if (eptr < md->end_subject - 1 ||
  +							(eptr == md->end_subject - 1 && *eptr != '\n'))
  +							return FALSE;
  +
  +						ecode++;
  +						break;
  +					}
  +				}
  +			case OP_EOD:
  +				if (eptr < md->end_subject)
  +					return FALSE;
  +				ecode++;
  +				break;
  +
  +			case OP_EODN:
  +				if (eptr < md->end_subject - 1 ||
  +					(eptr == md->end_subject - 1 && *eptr != '\n'))
  +					return FALSE;
  +				ecode++;
  +				break;
  +
  +			case OP_NOT_WORD_BOUNDARY:
  +			case OP_WORD_BOUNDARY:
  +				{
  +					BOOL prev_is_word = (eptr != md->start_subject) &&
  +						((md->ctypes[eptr[-1]] & ctype_word) != 0);
  +					BOOL cur_is_word = (eptr < md->end_subject) &&
  +						((md->ctypes[*eptr] & ctype_word) != 0);
  +					if ((*ecode++ == OP_WORD_BOUNDARY) ?
  +						cur_is_word == prev_is_word : cur_is_word !=
  +						prev_is_word) return FALSE;
  +				}
  +				break;
  +
  +			case OP_ANY:
  +				if ((ims & PCRE_DOTALL) == 0 && eptr < md->end_subject
  +					&& *eptr == '\n')
  +					return FALSE;
  +				if (eptr++ >= md->end_subject)
  +					return FALSE;
   #ifdef STR_PCRE_SUPPORT_UTF8
  -    if (md->utf8)
  -      while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
  +				if (md->utf8)
  +					while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80)
  +						eptr++;
   #endif
  -    ecode++;
  -    break;
  -
  -    case OP_NOT_DIGIT:
  -    if (eptr >= md->end_subject ||
  -       (md->ctypes[*eptr++] & ctype_digit) != 0)
  -      return FALSE;
  -    ecode++;
  -    break;
  -
  -    case OP_DIGIT:
  -    if (eptr >= md->end_subject ||
  -       (md->ctypes[*eptr++] & ctype_digit) == 0)
  -      return FALSE;
  -    ecode++;
  -    break;
  -
  -    case OP_NOT_WHITESPACE:
  -    if (eptr >= md->end_subject ||
  -       (md->ctypes[*eptr++] & ctype_space) != 0)
  -      return FALSE;
  -    ecode++;
  -    break;
  -
  -    case OP_WHITESPACE:
  -    if (eptr >= md->end_subject ||
  -       (md->ctypes[*eptr++] & ctype_space) == 0)
  -      return FALSE;
  -    ecode++;
  -    break;
  -
  -    case OP_NOT_WORDCHAR:
  -    if (eptr >= md->end_subject ||
  -       (md->ctypes[*eptr++] & ctype_word) != 0)
  -      return FALSE;
  -    ecode++;
  -    break;
  -
  -    case OP_WORDCHAR:
  -    if (eptr >= md->end_subject ||
  -       (md->ctypes[*eptr++] & ctype_word) == 0)
  -      return FALSE;
  -    ecode++;
  -    break;
  -
  -    /* Match a back reference, possibly repeatedly. Look past the end of the
  -    item to see if there is repeat information following. The code is similar
  -    to that for character classes, but repeated for efficiency. Then obey
  -    similar code to character type repeats - written out again for speed.
  -    However, if the referenced string is the empty string, always treat
  -    it as matched, any number of times (otherwise there could be infinite
  -    loops). */
  -
  -    case OP_REF:
  -      {
  -      int length;
  -      int offset = (ecode[1] << 9) | (ecode[2] << 1); /* Doubled ref number */
  -      ecode += 3;                                     /* Advance past item */
  -
  -      /* If the reference is unset, set the length to be longer than the amount
  -      of subject left; this ensures that every attempt at a match fails. We
  -      can't just fail here, because of the possibility of quantifiers with zero
  -      minima. */
  -
  -      length = (offset >= offset_top || md->offset_vector[offset] < 0)?
  -        md->end_subject - eptr + 1 :
  -        md->offset_vector[offset+1] - md->offset_vector[offset];
  -
  -      /* Set up for repetition, or handle the non-repeated case */
  -
  -      switch (*ecode)
  -        {
  -        case OP_CRSTAR:
  -        case OP_CRMINSTAR:
  -        case OP_CRPLUS:
  -        case OP_CRMINPLUS:
  -        case OP_CRQUERY:
  -        case OP_CRMINQUERY:
  -        c = *ecode++ - OP_CRSTAR;
  -        minimize = (c & 1) != 0;
  -        min = rep_min[c];                 /* Pick up values from tables; */
  -        max = rep_max[c];                 /* zero for max => infinity */
  -        if (max == 0) max = INT_MAX;
  -        break;
  -
  -        case OP_CRRANGE:
  -        case OP_CRMINRANGE:
  -        minimize = (*ecode == OP_CRMINRANGE);
  -        min = (ecode[1] << 8) + ecode[2];
  -        max = (ecode[3] << 8) + ecode[4];
  -        if (max == 0) max = INT_MAX;
  -        ecode += 5;
  -        break;
  -
  -        default:               /* No repeat follows */
  -        if (!match_ref(offset, eptr, length, md, ims)) return FALSE;
  -        eptr += length;
  -        continue;              /* With the main loop */
  -        }
  -
  -      /* If the length of the reference is zero, just continue with the
  -      main loop. */
  -
  -      if (length == 0) continue;
  -
  -      /* First, ensure the minimum number of matches are present. We get back
  -      the length of the reference string explicitly rather than passing the
  -      address of eptr, so that eptr can be a register variable. */
  -
  -      for (i = 1; i <= min; i++)
  -        {
  -        if (!match_ref(offset, eptr, length, md, ims)) return FALSE;
  -        eptr += length;
  -        }
  -
  -      /* If min = max, continue at the same level without recursion.
  -      They are not both allowed to be zero. */
  -
  -      if (min == max) continue;
  -
  -      /* If minimizing, keep trying and advancing the pointer */
  -
  -      if (minimize)
  -        {
  -        for (i = min;; i++)
  -          {
  -          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
  -            return TRUE;
  -          if (i >= max || !match_ref(offset, eptr, length, md, ims))
  -            return FALSE;
  -          eptr += length;
  -          }
  -        /* Control never gets here */
  -        }
  -
  -      /* If maximizing, find the longest string and work backwards */
  -
  -      else
  -        {
  -        const uschar *pp = eptr;
  -        for (i = min; i < max; i++)
  -          {
  -          if (!match_ref(offset, eptr, length, md, ims)) break;
  -          eptr += length;
  -          }
  -        while (eptr >= pp)
  -          {
  -          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
  -            return TRUE;
  -          eptr -= length;
  -          }
  -        return FALSE;
  -        }
  -      }
  -    /* Control never gets here */
  -
  -    /* Match a character class, possibly repeatedly. Look past the end of the
  -    item to see if there is repeat information following. Then obey similar
  -    code to character type repeats - written out again for speed. */
  -
  -    case OP_CLASS:
  -      {
  -      const uschar *data = ecode + 1;  /* Save for matching */
  -      ecode += 33;                     /* Advance past the item */
  -
  -      switch (*ecode)
  -        {
  -        case OP_CRSTAR:
  -        case OP_CRMINSTAR:
  -        case OP_CRPLUS:
  -        case OP_CRMINPLUS:
  -        case OP_CRQUERY:
  -        case OP_CRMINQUERY:
  -        c = *ecode++ - OP_CRSTAR;
  -        minimize = (c & 1) != 0;
  -        min = rep_min[c];                 /* Pick up values from tables; */
  -        max = rep_max[c];                 /* zero for max => infinity */
  -        if (max == 0) max = INT_MAX;
  -        break;
  -
  -        case OP_CRRANGE:
  -        case OP_CRMINRANGE:
  -        minimize = (*ecode == OP_CRMINRANGE);
  -        min = (ecode[1] << 8) + ecode[2];
  -        max = (ecode[3] << 8) + ecode[4];
  -        if (max == 0) max = INT_MAX;
  -        ecode += 5;
  -        break;
  -
  -        default:               /* No repeat follows */
  -        min = max = 1;
  -        break;
  -        }
  -
  -      /* First, ensure the minimum number of matches are present. */
  -
  -      for (i = 1; i <= min; i++)
  -        {
  -        if (eptr >= md->end_subject) return FALSE;
  -        GETCHARINC(c, eptr)         /* Get character; increment eptr */
  +				ecode++;
  +				break;
   
  +			case OP_NOT_DIGIT:
  +				if (eptr >= md->end_subject ||
  +					(md->ctypes[*eptr++] & ctype_digit) != 0)
  +					return FALSE;
  +				ecode++;
  +				break;
  +
  +			case OP_DIGIT:
  +				if (eptr >= md->end_subject ||
  +					(md->ctypes[*eptr++] & ctype_digit) == 0)
  +					return FALSE;
  +				ecode++;
  +				break;
  +
  +			case OP_NOT_WHITESPACE:
  +				if (eptr >= md->end_subject ||
  +					(md->ctypes[*eptr++] & ctype_space) != 0)
  +					return FALSE;
  +				ecode++;
  +				break;
  +
  +			case OP_WHITESPACE:
  +				if (eptr >= md->end_subject ||
  +					(md->ctypes[*eptr++] & ctype_space) == 0)
  +					return FALSE;
  +				ecode++;
  +				break;
  +
  +			case OP_NOT_WORDCHAR:
  +				if (eptr >= md->end_subject ||
  +					(md->ctypes[*eptr++] & ctype_word) != 0)
  +					return FALSE;
  +				ecode++;
  +				break;
  +
  +			case OP_WORDCHAR:
  +				if (eptr >= md->end_subject ||
  +					(md->ctypes[*eptr++] & ctype_word) == 0)
  +					return FALSE;
  +				ecode++;
  +				break;
  +
  +			case OP_REF:
  +				{
  +					int length;
  +					int offset = (ecode[1] << 9) | (ecode[2] << 1);
  +					ecode += 3;
  +
  +					length = (offset >= offset_top
  +							  || md->offset_vector[offset] <
  +							  0) ? md->end_subject - eptr +
  +						1 : md->offset_vector[offset + 1] -
  +						md->offset_vector[offset];
  +
  +					switch (*ecode) {
  +						case OP_CRSTAR:
  +						case OP_CRMINSTAR:
  +						case OP_CRPLUS:
  +						case OP_CRMINPLUS:
  +						case OP_CRQUERY:
  +						case OP_CRMINQUERY:
  +							c = *ecode++ - OP_CRSTAR;
  +							minimize = (c & 1) != 0;
  +							min = rep_min[c];
  +							max = rep_max[c];
  +							if (max == 0)
  +								max = INT_MAX;
  +							break;
  +
  +						case OP_CRRANGE:
  +						case OP_CRMINRANGE:
  +							minimize = (*ecode == OP_CRMINRANGE);
  +							min = (ecode[1] << 8) + ecode[2];
  +							max = (ecode[3] << 8) + ecode[4];
  +							if (max == 0)
  +								max = INT_MAX;
  +							ecode += 5;
  +							break;
  +
  +						default:
  +							if (!match_ref(offset, eptr, length, md, ims))
  +								return FALSE;
  +							eptr += length;
  +							continue;
  +					}
  +
  +					if (length == 0)
  +						continue;
  +
  +					for (i = 1; i <= min; i++) {
  +						if (!match_ref(offset, eptr, length, md, ims))
  +							return FALSE;
  +						eptr += length;
  +					}
  +
  +					if (min == max)
  +						continue;
  +
  +					if (minimize) {
  +						for (i = min;; i++) {
  +							if (match
  +								(eptr, ecode, offset_top, md, ims, eptrb,
  +								 0)) return TRUE;
  +							if (i >= max
  +								|| !match_ref(offset, eptr, length, md, ims))
  +								return FALSE;
  +							eptr += length;
  +						}
  +					}
  +
  +					else {
  +						const uschar *pp = eptr;
  +						for (i = min; i < max; i++) {
  +							if (!match_ref(offset, eptr, length, md, ims))
  +								break;
  +							eptr += length;
  +						}
  +						while (eptr >= pp) {
  +							if (match
  +								(eptr, ecode, offset_top, md, ims, eptrb,
  +								 0)) return TRUE;
  +							eptr -= length;
  +						}
  +						return FALSE;
  +					}
  +				}
  +
  +			case OP_CLASS:
  +				{
  +					const uschar *data = ecode + 1;
  +					ecode += 33;
  +
  +					switch (*ecode) {
  +						case OP_CRSTAR:
  +						case OP_CRMINSTAR:
  +						case OP_CRPLUS:
  +						case OP_CRMINPLUS:
  +						case OP_CRQUERY:
  +						case OP_CRMINQUERY:
  +							c = *ecode++ - OP_CRSTAR;
  +							minimize = (c & 1) != 0;
  +							min = rep_min[c];
  +							max = rep_max[c];
  +							if (max == 0)
  +								max = INT_MAX;
  +							break;
  +
  +						case OP_CRRANGE:
  +						case OP_CRMINRANGE:
  +							minimize = (*ecode == OP_CRMINRANGE);
  +							min = (ecode[1] << 8) + ecode[2];
  +							max = (ecode[3] << 8) + ecode[4];
  +							if (max == 0)
  +								max = INT_MAX;
  +							ecode += 5;
  +							break;
  +
  +						default:
  +							min = max = 1;
  +							break;
  +					}
  +
  +					for (i = 1; i <= min; i++) {
  +						if (eptr >= md->end_subject)
  +							return FALSE;
  +						GETCHARINC(c, eptr)
   #ifdef STR_PCRE_SUPPORT_UTF8
  -        /* We do not yet support class members > 255 */
  -        if (c > 255) return FALSE;
  +							if (c > 255)
  +							return FALSE;
   #endif
   
  -        if ((data[c/8] & (1 << (c&7))) != 0) continue;
  -        return FALSE;
  -        }
  -
  -      /* If max == min we can continue with the main loop without the
  -      need to recurse. */
  -
  -      if (min == max) continue;
  -
  -      /* If minimizing, keep testing the rest of the expression and advancing
  -      the pointer while it matches the class. */
  -
  -      if (minimize)
  -        {
  -        for (i = min;; i++)
  -          {
  -          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
  -            return TRUE;
  -          if (i >= max || eptr >= md->end_subject) return FALSE;
  -          GETCHARINC(c, eptr)       /* Get character; increment eptr */
  -
  +						if ((data[c / 8] & (1 << (c & 7))) != 0)
  +							continue;
  +						return FALSE;
  +					}
  +
  +					if (min == max)
  +						continue;
  +
  +					if (minimize) {
  +						for (i = min;; i++) {
  +							if (match
  +								(eptr, ecode, offset_top, md, ims, eptrb,
  +								 0)) return TRUE;
  +							if (i >= max || eptr >= md->end_subject)
  +								return FALSE;
  +							GETCHARINC(c, eptr)
   #ifdef STR_PCRE_SUPPORT_UTF8
  -          /* We do not yet support class members > 255 */
  -          if (c > 255) return FALSE;
  +								if (c > 255)
  +								return FALSE;
   #endif
  -          if ((data[c/8] & (1 << (c&7))) != 0) continue;
  -          return FALSE;
  -          }
  -        /* Control never gets here */
  -        }
  -
  -      /* If maximizing, find the longest possible run, then work backwards. */
  -
  -      else
  -        {
  -        const uschar *pp = eptr;
  -        int len = 1;
  -        for (i = min; i < max; i++)
  -          {
  -          if (eptr >= md->end_subject) break;
  -          GETCHARLEN(c, eptr, len)  /* Get character, set length if UTF-8 */
  -
  +							if ((data[c / 8] & (1 << (c & 7))) != 0)
  +								continue;
  +							return FALSE;
  +						}
  +					}
  +
  +					else {
  +						const uschar *pp = eptr;
  +						int len = 1;
  +						for (i = min; i < max; i++) {
  +							if (eptr >= md->end_subject)
  +								break;
  +							GETCHARLEN(c, eptr, len)
   #ifdef STR_PCRE_SUPPORT_UTF8
  -          /* We do not yet support class members > 255 */
  -          if (c > 255) break;
  +								if (c > 255)
  +								break;
   #endif
  -          if ((data[c/8] & (1 << (c&7))) == 0) break;
  -          eptr += len;
  -          }
  -
  -        while (eptr >= pp)
  -          {
  -          if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
  -            return TRUE;
  +							if ((data[c / 8] & (1 << (c & 7))) == 0)
  +								break;
  +							eptr += len;
  +						}
  +
  +						while (eptr >= pp) {
  +							if (match
  +								(eptr--, ecode, offset_top, md, ims, eptrb,
  +								 0)) return TRUE;
   
   #ifdef STR_PCRE_SUPPORT_UTF8
  -          BACKCHAR(eptr)
  +							BACKCHAR(eptr)
   #endif
  -          }
  -        return FALSE;
  -        }
  -      }
  -    /* Control never gets here */
  -
  -    /* Match a run of characters */
  -
  -    case OP_CHARS:
  -      {
  -      register int length = ecode[1];
  -      ecode += 2;
  -
  -      if (length > md->end_subject - eptr) return FALSE;
  -      if ((ims & PCRE_CASELESS) != 0)
  -        {
  -        while (length-- > 0)
  -          if (md->lcc[*ecode++] != md->lcc[*eptr++])
  -            return FALSE;
  -        }
  -      else
  -        {
  -        while (length-- > 0) if (*ecode++ != *eptr++) return FALSE;
  -        }
  -      }
  -    break;
  -
  -    /* Match a single character repeatedly; different opcodes share code. */
  -
  -    case OP_EXACT:
  -    min = max = (ecode[1] << 8) + ecode[2];
  -    ecode += 3;
  -    goto REPEATCHAR;
  -
  -    case OP_UPTO:
  -    case OP_MINUPTO:
  -    min = 0;
  -    max = (ecode[1] << 8) + ecode[2];
  -    minimize = *ecode == OP_MINUPTO;
  -    ecode += 3;
  -    goto REPEATCHAR;
  -
  -    case OP_STAR:
  -    case OP_MINSTAR:
  -    case OP_PLUS:
  -    case OP_MINPLUS:
  -    case OP_QUERY:
  -    case OP_MINQUERY:
  -    c = *ecode++ - OP_STAR;
  -    minimize = (c & 1) != 0;
  -    min = rep_min[c];                 /* Pick up values from tables; */
  -    max = rep_max[c];                 /* zero for max => infinity */
  -    if (max == 0) max = INT_MAX;
  -
  -    /* Common code for all repeated single-character matches. We can give
  -    up quickly if there are fewer than the minimum number of characters left in
  -    the subject. */
  -
  -    REPEATCHAR:
  -    if (min > md->end_subject - eptr) return FALSE;
  -    c = *ecode++;
  -
  -    /* The code is duplicated for the caseless and caseful cases, for speed,
  -    since matching characters is likely to be quite common. First, ensure the
  -    minimum number of matches are present. If min = max, continue at the same
  -    level without recursing. Otherwise, if minimizing, keep trying the rest of
  -    the expression and advancing one matching character if failing, up to the
  -    maximum. Alternatively, if maximizing, find the maximum number of
  -    characters and work backwards. */
  -
  -    if ((ims & PCRE_CASELESS) != 0)
  -      {
  -      c = md->lcc[c];
  -      for (i = 1; i <= min; i++)
  -        if (c != md->lcc[*eptr++]) return FALSE;
  -      if (min == max) continue;
  -      if (minimize)
  -        {
  -        for (i = min;; i++)
  -          {
  -          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
  -            return TRUE;
  -          if (i >= max || eptr >= md->end_subject ||
  -              c != md->lcc[*eptr++])
  -            return FALSE;
  -          }
  -        /* Control never gets here */
  -        }
  -      else
  -        {
  -        const uschar *pp = eptr;
  -        for (i = min; i < max; i++)
  -          {
  -          if (eptr >= md->end_subject || c != md->lcc[*eptr]) break;
  -          eptr++;
  -          }
  -        while (eptr >= pp)
  -          if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
  -            return TRUE;
  -        return FALSE;
  -        }
  -      /* Control never gets here */
  -      }
  -
  -    /* Caseful comparisons */
  -
  -    else
  -      {
  -      for (i = 1; i <= min; i++) if (c != *eptr++) return FALSE;
  -      if (min == max) continue;
  -      if (minimize)
  -        {
  -        for (i = min;; i++)
  -          {
  -          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
  -            return TRUE;
  -          if (i >= max || eptr >= md->end_subject || c != *eptr++) return FALSE;
  -          }
  -        /* Control never gets here */
  -        }
  -      else
  -        {
  -        const uschar *pp = eptr;
  -        for (i = min; i < max; i++)
  -          {
  -          if (eptr >= md->end_subject || c != *eptr) break;
  -          eptr++;
  -          }
  -        while (eptr >= pp)
  -         if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
  -           return TRUE;
  -        return FALSE;
  -        }
  -      }
  -    /* Control never gets here */
  -
  -    /* Match a negated single character */
  -
  -    case OP_NOT:
  -    if (eptr >= md->end_subject) return FALSE;
  -    ecode++;
  -    if ((ims & PCRE_CASELESS) != 0)
  -      {
  -      if (md->lcc[*ecode++] == md->lcc[*eptr++]) return FALSE;
  -      }
  -    else
  -      {
  -      if (*ecode++ == *eptr++) return FALSE;
  -      }
  -    break;
  -
  -    /* Match a negated single character repeatedly. This is almost a repeat of
  -    the code for a repeated single character, but I haven't found a nice way of
  -    commoning these up that doesn't require a test of the positive/negative
  -    option for each character match. Maybe that wouldn't add very much to the
  -    time taken, but character matching *is* what this is all about... */
  -
  -    case OP_NOTEXACT:
  -    min = max = (ecode[1] << 8) + ecode[2];
  -    ecode += 3;
  -    goto REPEATNOTCHAR;
  -
  -    case OP_NOTUPTO:
  -    case OP_NOTMINUPTO:
  -    min = 0;
  -    max = (ecode[1] << 8) + ecode[2];
  -    minimize = *ecode == OP_NOTMINUPTO;
  -    ecode += 3;
  -    goto REPEATNOTCHAR;
  -
  -    case OP_NOTSTAR:
  -    case OP_NOTMINSTAR:
  -    case OP_NOTPLUS:
  -    case OP_NOTMINPLUS:
  -    case OP_NOTQUERY:
  -    case OP_NOTMINQUERY:
  -    c = *ecode++ - OP_NOTSTAR;
  -    minimize = (c & 1) != 0;
  -    min = rep_min[c];                 /* Pick up values from tables; */
  -    max = rep_max[c];                 /* zero for max => infinity */
  -    if (max == 0) max = INT_MAX;
  -
  -    /* Common code for all repeated single-character matches. We can give
  -    up quickly if there are fewer than the minimum number of characters left in
  -    the subject. */
  -
  -    REPEATNOTCHAR:
  -    if (min > md->end_subject - eptr) return FALSE;
  -    c = *ecode++;
  -
  -    /* The code is duplicated for the caseless and caseful cases, for speed,
  -    since matching characters is likely to be quite common. First, ensure the
  -    minimum number of matches are present. If min = max, continue at the same
  -    level without recursing. Otherwise, if minimizing, keep trying the rest of
  -    the expression and advancing one matching character if failing, up to the
  -    maximum. Alternatively, if maximizing, find the maximum number of
  -    characters and work backwards. */
  -
  -    if ((ims & PCRE_CASELESS) != 0)
  -      {
  -      c = md->lcc[c];
  -      for (i = 1; i <= min; i++)
  -        if (c == md->lcc[*eptr++]) return FALSE;
  -      if (min == max) continue;
  -      if (minimize)
  -        {
  -        for (i = min;; i++)
  -          {
  -          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
  -            return TRUE;
  -          if (i >= max || eptr >= md->end_subject ||
  -              c == md->lcc[*eptr++])
  -            return FALSE;
  -          }
  -        /* Control never gets here */
  -        }
  -      else
  -        {
  -        const uschar *pp = eptr;
  -        for (i = min; i < max; i++)
  -          {
  -          if (eptr >= md->end_subject || c == md->lcc[*eptr]) break;
  -          eptr++;
  -          }
  -        while (eptr >= pp)
  -          if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
  -            return TRUE;
  -        return FALSE;
  -        }
  -      /* Control never gets here */
  -      }
  -
  -    /* Caseful comparisons */
  -
  -    else
  -      {
  -      for (i = 1; i <= min; i++) if (c == *eptr++) return FALSE;
  -      if (min == max) continue;
  -      if (minimize)
  -        {
  -        for (i = min;; i++)
  -          {
  -          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
  -            return TRUE;
  -          if (i >= max || eptr >= md->end_subject || c == *eptr++) return FALSE;
  -          }
  -        /* Control never gets here */
  -        }
  -      else
  -        {
  -        const uschar *pp = eptr;
  -        for (i = min; i < max; i++)
  -          {
  -          if (eptr >= md->end_subject || c == *eptr) break;
  -          eptr++;
  -          }
  -        while (eptr >= pp)
  -         if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
  -           return TRUE;
  -        return FALSE;
  -        }
  -      }
  -    /* Control never gets here */
  -
  -    /* Match a single character type repeatedly; several different opcodes
  -    share code. This is very similar to the code for single characters, but we
  -    repeat it in the interests of efficiency. */
  -
  -    case OP_TYPEEXACT:
  -    min = max = (ecode[1] << 8) + ecode[2];
  -    minimize = TRUE;
  -    ecode += 3;
  -    goto REPEATTYPE;
  -
  -    case OP_TYPEUPTO:
  -    case OP_TYPEMINUPTO:
  -    min = 0;
  -    max = (ecode[1] << 8) + ecode[2];
  -    minimize = *ecode == OP_TYPEMINUPTO;
  -    ecode += 3;
  -    goto REPEATTYPE;
  -
  -    case OP_TYPESTAR:
  -    case OP_TYPEMINSTAR:
  -    case OP_TYPEPLUS:
  -    case OP_TYPEMINPLUS:
  -    case OP_TYPEQUERY:
  -    case OP_TYPEMINQUERY:
  -    c = *ecode++ - OP_TYPESTAR;
  -    minimize = (c & 1) != 0;
  -    min = rep_min[c];                 /* Pick up values from tables; */
  -    max = rep_max[c];                 /* zero for max => infinity */
  -    if (max == 0) max = INT_MAX;
  -
  -    /* Common code for all repeated single character type matches */
  -
  -    REPEATTYPE:
  -    ctype = *ecode++;      /* Code for the character type */
  -
  -    /* First, ensure the minimum number of matches are present. Use inline
  -    code for maximizing the speed, and do the type test once at the start
  -    (i.e. keep it out of the loop). Also we can test that there are at least
  -    the minimum number of bytes before we start, except when doing '.' in
  -    UTF8 mode. Leave the test in in all cases; in the special case we have
  -    to test after each character. */
  -
  -    if (min > md->end_subject - eptr) return FALSE;
  -    if (min > 0) switch(ctype)
  -      {
  -      case OP_ANY:
  +						}
  +						return FALSE;
  +					}
  +				}
  +
  +			case OP_CHARS:
  +				{
  +					register int length = ecode[1];
  +					ecode += 2;
  +
  +					if (length > md->end_subject - eptr)
  +						return FALSE;
  +					if ((ims & PCRE_CASELESS) != 0) {
  +						while (length-- > 0)
  +							if (md->lcc[*ecode++] != md->lcc[*eptr++])
  +								return FALSE;
  +					}
  +					else {
  +						while (length-- > 0)
  +							if (*ecode++ != *eptr++)
  +								return FALSE;
  +					}
  +				}
  +				break;
  +
  +			case OP_EXACT:
  +				min = max = (ecode[1] << 8) + ecode[2];
  +				ecode += 3;
  +				goto REPEATCHAR;
  +
  +			case OP_UPTO:
  +			case OP_MINUPTO:
  +				min = 0;
  +				max = (ecode[1] << 8) + ecode[2];
  +				minimize = *ecode == OP_MINUPTO;
  +				ecode += 3;
  +				goto REPEATCHAR;
  +
  +			case OP_STAR:
  +			case OP_MINSTAR:
  +			case OP_PLUS:
  +			case OP_MINPLUS:
  +			case OP_QUERY:
  +			case OP_MINQUERY:
  +				c = *ecode++ - OP_STAR;
  +				minimize = (c & 1) != 0;
  +				min = rep_min[c];
  +				max = rep_max[c];
  +				if (max == 0)
  +					max = INT_MAX;
  +
  +			  REPEATCHAR:
  +				if (min > md->end_subject - eptr)
  +					return FALSE;
  +				c = *ecode++;
  +
  +				if ((ims & PCRE_CASELESS) != 0) {
  +					c = md->lcc[c];
  +					for (i = 1; i <= min; i++)
  +						if (c != md->lcc[*eptr++])
  +							return FALSE;
  +					if (min == max)
  +						continue;
  +					if (minimize) {
  +						for (i = min;; i++) {
  +							if (match
  +								(eptr, ecode, offset_top, md, ims, eptrb,
  +								 0)) return TRUE;
  +							if (i >= max || eptr >= md->end_subject
  +								|| c != md->lcc[*eptr++])
  +								return FALSE;
  +						}
  +					}
  +					else {
  +						const uschar *pp = eptr;
  +						for (i = min; i < max; i++) {
  +							if (eptr >= md->end_subject
  +								|| c != md->lcc[*eptr]) break;
  +							eptr++;
  +						}
  +						while (eptr >= pp)
  +							if (match
  +								(eptr--, ecode, offset_top, md, ims, eptrb,
  +								 0)) return TRUE;
  +						return FALSE;
  +					}
  +				}
  +
  +				else {
  +					for (i = 1; i <= min; i++)
  +						if (c != *eptr++)
  +							return FALSE;
  +					if (min == max)
  +						continue;
  +					if (minimize) {
  +						for (i = min;; i++) {
  +							if (match
  +								(eptr, ecode, offset_top, md, ims, eptrb,
  +								 0)) return TRUE;
  +							if (i >= max || eptr >= md->end_subject
  +								|| c != *eptr++)
  +								return FALSE;
  +						}
  +					}
  +					else {
  +						const uschar *pp = eptr;
  +						for (i = min; i < max; i++) {
  +							if (eptr >= md->end_subject || c != *eptr)
  +								break;
  +							eptr++;
  +						}
  +						while (eptr >= pp)
  +							if (match
  +								(eptr--, ecode, offset_top, md, ims, eptrb,
  +								 0)) return TRUE;
  +						return FALSE;
  +					}
  +				}
  +
  +			case OP_NOT:
  +				if (eptr >= md->end_subject)
  +					return FALSE;
  +				ecode++;
  +				if ((ims & PCRE_CASELESS) != 0) {
  +					if (md->lcc[*ecode++] == md->lcc[*eptr++])
  +						return FALSE;
  +				}
  +				else {
  +					if (*ecode++ == *eptr++)
  +						return FALSE;
  +				}
  +				break;
  +
  +			case OP_NOTEXACT:
  +				min = max = (ecode[1] << 8) + ecode[2];
  +				ecode += 3;
  +				goto REPEATNOTCHAR;
  +
  +			case OP_NOTUPTO:
  +			case OP_NOTMINUPTO:
  +				min = 0;
  +				max = (ecode[1] << 8) + ecode[2];
  +				minimize = *ecode == OP_NOTMINUPTO;
  +				ecode += 3;
  +				goto REPEATNOTCHAR;
  +
  +			case OP_NOTSTAR:
  +			case OP_NOTMINSTAR:
  +			case OP_NOTPLUS:
  +			case OP_NOTMINPLUS:
  +			case OP_NOTQUERY:
  +			case OP_NOTMINQUERY:
  +				c = *ecode++ - OP_NOTSTAR;
  +				minimize = (c & 1) != 0;
  +				min = rep_min[c];
  +				max = rep_max[c];
  +				if (max == 0)
  +					max = INT_MAX;
  +
  +			  REPEATNOTCHAR:
  +				if (min > md->end_subject - eptr)
  +					return FALSE;
  +				c = *ecode++;
  +
  +				if ((ims & PCRE_CASELESS) != 0) {
  +					c = md->lcc[c];
  +					for (i = 1; i <= min; i++)
  +						if (c == md->lcc[*eptr++])
  +							return FALSE;
  +					if (min == max)
  +						continue;
  +					if (minimize) {
  +						for (i = min;; i++) {
  +							if (match
  +								(eptr, ecode, offset_top, md, ims, eptrb,
  +								 0)) return TRUE;
  +							if (i >= max || eptr >= md->end_subject
  +								|| c == md->lcc[*eptr++])
  +								return FALSE;
  +						}
  +					}
  +					else {
  +						const uschar *pp = eptr;
  +						for (i = min; i < max; i++) {
  +							if (eptr >= md->end_subject
  +								|| c == md->lcc[*eptr]) break;
  +							eptr++;
  +						}
  +						while (eptr >= pp)
  +							if (match
  +								(eptr--, ecode, offset_top, md, ims, eptrb,
  +								 0)) return TRUE;
  +						return FALSE;
  +					}
  +				}
  +
  +				else {
  +					for (i = 1; i <= min; i++)
  +						if (c == *eptr++)
  +							return FALSE;
  +					if (min == max)
  +						continue;
  +					if (minimize) {
  +						for (i = min;; i++) {
  +							if (match
  +								(eptr, ecode, offset_top, md, ims, eptrb,
  +								 0)) return TRUE;
  +							if (i >= max || eptr >= md->end_subject
  +								|| c == *eptr++)
  +								return FALSE;
  +						}
  +					}
  +					else {
  +						const uschar *pp = eptr;
  +						for (i = min; i < max; i++) {
  +							if (eptr >= md->end_subject || c == *eptr)
  +								break;
  +							eptr++;
  +						}
  +						while (eptr >= pp)
  +							if (match
  +								(eptr--, ecode, offset_top, md, ims, eptrb,
  +								 0)) return TRUE;
  +						return FALSE;
  +					}
  +				}
  +
  +			case OP_TYPEEXACT:
  +				min = max = (ecode[1] << 8) + ecode[2];
  +				minimize = TRUE;
  +				ecode += 3;
  +				goto REPEATTYPE;
  +
  +			case OP_TYPEUPTO:
  +			case OP_TYPEMINUPTO:
  +				min = 0;
  +				max = (ecode[1] << 8) + ecode[2];
  +				minimize = *ecode == OP_TYPEMINUPTO;
  +				ecode += 3;
  +				goto REPEATTYPE;
  +
  +			case OP_TYPESTAR:
  +			case OP_TYPEMINSTAR:
  +			case OP_TYPEPLUS:
  +			case OP_TYPEMINPLUS:
  +			case OP_TYPEQUERY:
  +			case OP_TYPEMINQUERY:
  +				c = *ecode++ - OP_TYPESTAR;
  +				minimize = (c & 1) != 0;
  +				min = rep_min[c];
  +				max = rep_max[c];
  +				if (max == 0)
  +					max = INT_MAX;
  +
  +			  REPEATTYPE:
  +				ctype = *ecode++;
  +
  +				if (min > md->end_subject - eptr)
  +					return FALSE;
  +				if (min > 0)
  +					switch (ctype) {
  +						case OP_ANY:
   #ifdef STR_PCRE_SUPPORT_UTF8
  -      if (md->utf8)
  -        {
  -        for (i = 1; i <= min; i++)
  -          {
  -          if (eptr >= md->end_subject ||
  -             (*eptr++ == '\n' && (ims & PCRE_DOTALL) == 0))
  -            return FALSE;
  -          while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
  -          }
  -        break;
  -        }
  +							if (md->utf8) {
  +								for (i = 1; i <= min; i++) {
  +									if (eptr >= md->end_subject ||
  +										(*eptr++ == '\n'
  +										 && (ims & PCRE_DOTALL) == 0))
  +										return FALSE;
  +									while (eptr < md->end_subject
  +										   && (*eptr & 0xc0) == 0x80)
  +										eptr++;
  +								}
  +								break;
  +							}
   #endif
  -      /* Non-UTF8 can be faster */
  -      if ((ims & PCRE_DOTALL) == 0)
  -        { for (i = 1; i <= min; i++) if (*eptr++ == '\n') return FALSE; }
  -      else eptr += min;
  -      break;
  -
  -      case OP_NOT_DIGIT:
  -      for (i = 1; i <= min; i++)
  -        if ((md->ctypes[*eptr++] & ctype_digit) != 0) return FALSE;
  -      break;
  -
  -      case OP_DIGIT:
  -      for (i = 1; i <= min; i++)
  -        if ((md->ctypes[*eptr++] & ctype_digit) == 0) return FALSE;
  -      break;
  -
  -      case OP_NOT_WHITESPACE:
  -      for (i = 1; i <= min; i++)
  -        if ((md->ctypes[*eptr++] & ctype_space) != 0) return FALSE;
  -      break;
  -
  -      case OP_WHITESPACE:
  -      for (i = 1; i <= min; i++)
  -        if ((md->ctypes[*eptr++] & ctype_space) == 0) return FALSE;
  -      break;
  -
  -      case OP_NOT_WORDCHAR:
  -      for (i = 1; i <= min; i++)
  -        if ((md->ctypes[*eptr++] & ctype_word) != 0)
  -          return FALSE;
  -      break;
  -
  -      case OP_WORDCHAR:
  -      for (i = 1; i <= min; i++)
  -        if ((md->ctypes[*eptr++] & ctype_word) == 0)
  -          return FALSE;
  -      break;
  -      }
  -
  -    /* If min = max, continue at the same level without recursing */
  -
  -    if (min == max) continue;
  -
  -    /* If minimizing, we have to test the rest of the pattern before each
  -    subsequent match. */
  -
  -    if (minimize)
  -      {
  -      for (i = min;; i++)
  -        {
  -        if (match(eptr, ecode, offset_top, md, ims, eptrb, 0)) return TRUE;
  -        if (i >= max || eptr >= md->end_subject) return FALSE;
  -
  -        c = *eptr++;
  -        switch(ctype)
  -          {
  -          case OP_ANY:
  -          if ((ims & PCRE_DOTALL) == 0 && c == '\n') return FALSE;
  +							if ((ims & PCRE_DOTALL) == 0) {
  +								for (i = 1; i <= min; i++)
  +									if (*eptr++ == '\n')
  +										return FALSE;
  +							}
  +							else
  +								eptr += min;
  +							break;
  +
  +						case OP_NOT_DIGIT:
  +							for (i = 1; i <= min; i++)
  +								if ((md->ctypes[*eptr++] & ctype_digit) != 0)
  +									return FALSE;
  +							break;
  +
  +						case OP_DIGIT:
  +							for (i = 1; i <= min; i++)
  +								if ((md->ctypes[*eptr++] & ctype_digit) == 0)
  +									return FALSE;
  +							break;
  +
  +						case OP_NOT_WHITESPACE:
  +							for (i = 1; i <= min; i++)
  +								if ((md->ctypes[*eptr++] & ctype_space) != 0)
  +									return FALSE;
  +							break;
  +
  +						case OP_WHITESPACE:
  +							for (i = 1; i <= min; i++)
  +								if ((md->ctypes[*eptr++] & ctype_space) == 0)
  +									return FALSE;
  +							break;
  +
  +						case OP_NOT_WORDCHAR:
  +							for (i = 1; i <= min; i++)
  +								if ((md->ctypes[*eptr++] & ctype_word) != 0)
  +									return FALSE;
  +							break;
  +
  +						case OP_WORDCHAR:
  +							for (i = 1; i <= min; i++)
  +								if ((md->ctypes[*eptr++] & ctype_word) == 0)
  +									return FALSE;
  +							break;
  +					}
  +
  +				if (min == max)
  +					continue;
  +
  +				if (minimize) {
  +					for (i = min;; i++) {
  +						if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
  +							return TRUE;
  +						if (i >= max || eptr >= md->end_subject)
  +							return FALSE;
  +
  +						c = *eptr++;
  +						switch (ctype) {
  +							case OP_ANY:
  +								if ((ims & PCRE_DOTALL) == 0 && c == '\n')
  +									return FALSE;
   #ifdef STR_PCRE_SUPPORT_UTF8
  -          if (md->utf8)
  -            while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
  +								if (md->utf8)
  +									while (eptr < md->end_subject
  +										   && (*eptr & 0xc0) == 0x80)
  +										eptr++;
   #endif
  -          break;
  +								break;
   
  -          case OP_NOT_DIGIT:
  -          if ((md->ctypes[c] & ctype_digit) != 0) return FALSE;
  -          break;
  -
  -          case OP_DIGIT:
  -          if ((md->ctypes[c] & ctype_digit) == 0) return FALSE;
  -          break;
  -
  -          case OP_NOT_WHITESPACE:
  -          if ((md->ctypes[c] & ctype_space) != 0) return FALSE;
  -          break;
  -
  -          case OP_WHITESPACE:
  -          if  ((md->ctypes[c] & ctype_space) == 0) return FALSE;
  -          break;
  -
  -          case OP_NOT_WORDCHAR:
  -          if ((md->ctypes[c] & ctype_word) != 0) return FALSE;
  -          break;
  -
  -          case OP_WORDCHAR:
  -          if ((md->ctypes[c] & ctype_word) == 0) return FALSE;
  -          break;
  -          }
  -        }
  -      /* Control never gets here */
  -      }
  -
  -    /* If maximizing it is worth using inline code for speed, doing the type
  -    test once at the start (i.e. keep it out of the loop). */
  -
  -    else
  -      {
  -      const uschar *pp = eptr;
  -      switch(ctype)
  -        {
  -        case OP_ANY:
  -
  -        /* Special code is required for UTF8, but when the maximum is unlimited
  -        we don't need it. */
  +							case OP_NOT_DIGIT:
  +								if ((md->ctypes[c] & ctype_digit) != 0)
  +									return FALSE;
  +								break;
  +
  +							case OP_DIGIT:
  +								if ((md->ctypes[c] & ctype_digit) == 0)
  +									return FALSE;
  +								break;
  +
  +							case OP_NOT_WHITESPACE:
  +								if ((md->ctypes[c] & ctype_space) != 0)
  +									return FALSE;
  +								break;
  +
  +							case OP_WHITESPACE:
  +								if ((md->ctypes[c] & ctype_space) == 0)
  +									return FALSE;
  +								break;
  +
  +							case OP_NOT_WORDCHAR:
  +								if ((md->ctypes[c] & ctype_word) != 0)
  +									return FALSE;
  +								break;
  +
  +							case OP_WORDCHAR:
  +								if ((md->ctypes[c] & ctype_word) == 0)
  +									return FALSE;
  +								break;
  +						}
  +					}
  +				}
  +
  +				else {
  +					const uschar *pp = eptr;
  +					switch (ctype) {
  +						case OP_ANY:
   
   #ifdef STR_PCRE_SUPPORT_UTF8
  -        if (md->utf8 && max < INT_MAX)
  -          {
  -          if ((ims & PCRE_DOTALL) == 0)
  -            {
  -            for (i = min; i < max; i++)
  -              {
  -              if (eptr >= md->end_subject || *eptr++ == '\n') break;
  -              while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
  -              }
  -            }
  -          else
  -            {
  -            for (i = min; i < max; i++)
  -              {
  -              eptr++;
  -              while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
  -              }
  -            }
  -          break;
  -          }
  +							if (md->utf8 && max < INT_MAX) {
  +								if ((ims & PCRE_DOTALL) == 0) {
  +									for (i = min; i < max; i++) {
  +										if (eptr >= md->end_subject
  +											|| *eptr++ == '\n')
  +											break;
  +										while (eptr < md->end_subject
  +											   && (*eptr & 0xc0) == 0x80)
  +											eptr++;
  +									}
  +								}
  +								else {
  +									for (i = min; i < max; i++) {
  +										eptr++;
  +										while (eptr < md->end_subject
  +											   && (*eptr & 0xc0) == 0x80)
  +											eptr++;
  +									}
  +								}
  +								break;
  +							}
   #endif
  -        /* Non-UTF8 can be faster */
  -        if ((ims & PCRE_DOTALL) == 0)
  -          {
  -          for (i = min; i < max; i++)
  -            {
  -            if (eptr >= md->end_subject || *eptr == '\n') break;
  -            eptr++;
  -            }
  -          }
  -        else
  -          {
  -          c = max - min;
  -          if (c > md->end_subject - eptr) c = md->end_subject - eptr;
  -          eptr += c;
  -          }
  -        break;
  -
  -        case OP_NOT_DIGIT:
  -        for (i = min; i < max; i++)
  -          {
  -          if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_digit) != 0)
  -            break;
  -          eptr++;
  -          }
  -        break;
  -
  -        case OP_DIGIT:
  -        for (i = min; i < max; i++)
  -          {
  -          if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_digit) == 0)
  -            break;
  -          eptr++;
  -          }
  -        break;
  -
  -        case OP_NOT_WHITESPACE:
  -        for (i = min; i < max; i++)
  -          {
  -          if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_space) != 0)
  -            break;
  -          eptr++;
  -          }
  -        break;
  -
  -        case OP_WHITESPACE:
  -        for (i = min; i < max; i++)
  -          {
  -          if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_space) == 0)
  -            break;
  -          eptr++;
  -          }
  -        break;
  -
  -        case OP_NOT_WORDCHAR:
  -        for (i = min; i < max; i++)
  -          {
  -          if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_word) != 0)
  -            break;
  -          eptr++;
  -          }
  -        break;
  -
  -        case OP_WORDCHAR:
  -        for (i = min; i < max; i++)
  -          {
  -          if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_word) == 0)
  -            break;
  -          eptr++;
  -          }
  -        break;
  -        }
  -
  -      while (eptr >= pp)
  -        {
  -        if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
  -          return TRUE;
  +							if ((ims & PCRE_DOTALL) == 0) {
  +								for (i = min; i < max; i++) {
  +									if (eptr >= md->end_subject
  +										|| *eptr == '\n') break;
  +									eptr++;
  +								}
  +							}
  +							else {
  +								c = max - min;
  +								if (c > md->end_subject - eptr)
  +									c = md->end_subject - eptr;
  +								eptr += c;
  +							}
  +							break;
  +
  +						case OP_NOT_DIGIT:
  +							for (i = min; i < max; i++) {
  +								if (eptr >= md->end_subject
  +									|| (md->ctypes[*eptr] & ctype_digit) != 0)
  +									break;
  +								eptr++;
  +							}
  +							break;
  +
  +						case OP_DIGIT:
  +							for (i = min; i < max; i++) {
  +								if (eptr >= md->end_subject
  +									|| (md->ctypes[*eptr] & ctype_digit) == 0)
  +									break;
  +								eptr++;
  +							}
  +							break;
  +
  +						case OP_NOT_WHITESPACE:
  +							for (i = min; i < max; i++) {
  +								if (eptr >= md->end_subject
  +									|| (md->ctypes[*eptr] & ctype_space) != 0)
  +									break;
  +								eptr++;
  +							}
  +							break;
  +
  +						case OP_WHITESPACE:
  +							for (i = min; i < max; i++) {
  +								if (eptr >= md->end_subject
  +									|| (md->ctypes[*eptr] & ctype_space) == 0)
  +									break;
  +								eptr++;
  +							}
  +							break;
  +
  +						case OP_NOT_WORDCHAR:
  +							for (i = min; i < max; i++) {
  +								if (eptr >= md->end_subject
  +									|| (md->ctypes[*eptr] & ctype_word) != 0)
  +									break;
  +								eptr++;
  +							}
  +							break;
  +
  +						case OP_WORDCHAR:
  +							for (i = min; i < max; i++) {
  +								if (eptr >= md->end_subject
  +									|| (md->ctypes[*eptr] & ctype_word) == 0)
  +									break;
  +								eptr++;
  +							}
  +							break;
  +					}
  +
  +					while (eptr >= pp) {
  +						if (match
  +							(eptr--, ecode, offset_top, md, ims, eptrb,
  +							 0)) return TRUE;
   #ifdef STR_PCRE_SUPPORT_UTF8
  -        if (md->utf8)
  -          while (eptr > pp && (*eptr & 0xc0) == 0x80) eptr--;
  +						if (md->utf8)
  +							while (eptr > pp && (*eptr & 0xc0) == 0x80)
  +								eptr--;
   #endif
  -        }
  -      return FALSE;
  -      }
  -    /* Control never gets here */
  +					}
  +					return FALSE;
  +				}
   
  -    /* There's been some horrible disaster. */
  +			default:
   
  -    default:
  +				md->errorcode = PCRE_ERROR_UNKNOWN_NODE;
  +				return FALSE;
  +		}
   
  -    md->errorcode = PCRE_ERROR_UNKNOWN_NODE;
  -    return FALSE;
  -    }
  -
  -  /* Do not stick any code in here without much thought; it is assumed
  -  that "continue" in the code above comes out to here to repeat the main
  -  loop. */
  -
  -  }
  -/* Control never reaches here */
  +	}
   }
   
  -/*************************************************
  -*         Execute a Regular Expression           *
  -*************************************************/
  -
  -/* This function applies a compiled re to a subject string and picks out
  -portions of the string if it matches. Two elements in the vector are set for
  -each substring: the offsets to the start and end of the substring.
  -
  -Arguments:
  -  external_re     points to the compiled expression
  -  external_extra  points to "hints" from pcre_study() or is NULL
  -  subject         points to the subject string
  -  length          length of subject string (may contain binary zeros)
  -  start_offset    where to start in the subject string
  -  options         option bits
  -  offsets         points to a vector of ints to be filled in with offsets
  -  offsetcount     the number of elements in the vector
  -
  -Returns:          > 0 => success; value is the number of elements filled in
  -                  = 0 => success, but offsets is not big enough
  -                   -1 => failed to match
  -                 < -1 => some kind of unexpected problem
  -*/
  -
   int
  -pcre_exec(const pcre *external_re, const pcre_extra *external_extra,
  -  const char *subject, int length, int start_offset, int options, int *offsets,
  -  int offsetcount)
  +pcre_exec(const pcre * external_re, const pcre_extra * external_extra,
  +		  const char *subject, int length, int start_offset, int options,
  +		  int *offsets, int offsetcount)
   {
  -int resetcount, ocount;
  -int first_char = -1;
  -int req_char = -1;
  -int req_char2 = -1;
  -unsigned long int ims = 0;
  -match_data match_block;
  -const uschar *start_bits = NULL;
  -const uschar *start_match = (const uschar *)subject + start_offset;
  -const uschar *end_subject;
  -const uschar *req_char_ptr = start_match - 1;
  -const real_pcre *re = (const real_pcre *)external_re;
  -const real_pcre_extra *extra = (const real_pcre_extra *)external_extra;
  -BOOL using_temporary_offsets = FALSE;
  -BOOL anchored;
  -BOOL startline;
  -
  -if ((options & ~PUBLIC_EXEC_OPTIONS) != 0) return PCRE_ERROR_BADOPTION;
  -
  -if (re == NULL || subject == NULL ||
  -   (offsets == NULL && offsetcount > 0)) return PCRE_ERROR_NULL;
  -if (re->magic_number != MAGIC_NUMBER) return PCRE_ERROR_BADMAGIC;
  -
  -anchored = ((re->options | options) & PCRE_ANCHORED) != 0;
  -startline = (re->options & PCRE_STARTLINE) != 0;
  -
  -match_block.start_pattern = re->code;
  -match_block.start_subject = (const uschar *)subject;
  -match_block.end_subject = match_block.start_subject + length;
  -end_subject = match_block.end_subject;
  -
  -match_block.endonly = (re->options & PCRE_DOLLAR_ENDONLY) != 0;
  -match_block.utf8 = (re->options & PCRE_UTF8) != 0;
  -
  -match_block.notbol = (options & PCRE_NOTBOL) != 0;
  -match_block.noteol = (options & PCRE_NOTEOL) != 0;
  -match_block.notempty = (options & PCRE_NOTEMPTY) != 0;
  -
  -match_block.errorcode = PCRE_ERROR_NOMATCH;     /* Default error */
  -
  -match_block.lcc = re->tables + lcc_offset;
  -match_block.ctypes = re->tables + ctypes_offset;
  -
  -/* The ims options can vary during the matching as a result of the presence
  -of (?ims) items in the pattern. They are kept in a local variable so that
  -restoring at the exit of a group is easy. */
  -
  -ims = re->options & (PCRE_CASELESS|PCRE_MULTILINE|PCRE_DOTALL);
  -
  -/* If the expression has got more back references than the offsets supplied can
  -hold, we get a temporary bit of working store to use during the matching.
  -Otherwise, we can use the vector supplied, rounding down its size to a multiple
  -of 3. */
  -
  -ocount = offsetcount - (offsetcount % 3);
  -
  -if (re->top_backref > 0 && re->top_backref >= ocount/3)
  -  {
  -  ocount = re->top_backref * 3 + 3;
  -  match_block.offset_vector = (int *)(pcre_malloc)(ocount * sizeof(int));
  -  if (match_block.offset_vector == NULL) return PCRE_ERROR_NOMEMORY;
  -  using_temporary_offsets = TRUE;
  -
  -  }
  -else match_block.offset_vector = offsets;
  -
  -match_block.offset_end = ocount;
  -match_block.offset_max = (2*ocount)/3;
  -match_block.offset_overflow = FALSE;
  -
  -/* Compute the minimum number of offsets that we need to reset each time. Doing
  -this makes a huge difference to execution time when there aren't many brackets
  -in the pattern. */
  -
  -resetcount = 2 + re->top_bracket * 2;
  -if (resetcount > offsetcount) resetcount = ocount;
  -
  -/* Reset the working variable associated with each extraction. These should
  -never be used unless previously set, but they get saved and restored, and so we
  -initialize them to avoid reading uninitialized locations. */
  -
  -if (match_block.offset_vector != NULL)
  -  {
  -  register int *iptr = match_block.offset_vector + ocount;
  -  register int *iend = iptr - resetcount/2 + 1;
  -  while (--iptr >= iend) *iptr = -1;
  -  }
  -
  -/* Set up the first character to match, if available. The first_char value is
  -never set for an anchored regular expression, but the anchoring may be forced
  -at run time, so we have to test for anchoring. The first char may be unset for
  -an unanchored pattern, of course. If there's no first char and the pattern was
  -studied, there may be a bitmap of possible first characters. */
  -
  -if (!anchored)
  -  {
  -  if ((re->options & PCRE_FIRSTSET) != 0)
  -    {
  -    first_char = re->first_char;
  -    if ((ims & PCRE_CASELESS) != 0) first_char = match_block.lcc[first_char];
  -    }
  -  else
  -    if (!startline && extra != NULL &&
  -      (extra->options & PCRE_STUDY_MAPPED) != 0)
  -        start_bits = extra->start_bits;
  -  }
  -
  -/* For anchored or unanchored matches, there may be a "last known required
  -character" set. If the PCRE_CASELESS is set, implying that the match starts
  -caselessly, or if there are any changes of this flag within the regex, set up
  -both cases of the character. Otherwise set the two values the same, which will
  -avoid duplicate testing (which takes significant time). This covers the vast
  -majority of cases. It will be suboptimal when the case flag changes in a regex
  -and the required character in fact is caseful. */
  -
  -if ((re->options & PCRE_REQCHSET) != 0)
  -  {
  -  req_char = re->req_char;
  -  req_char2 = ((re->options & (PCRE_CASELESS | PCRE_ICHANGED)) != 0)?
  -    (re->tables + fcc_offset)[req_char] : req_char;
  -  }
  -
  -/* Loop for handling unanchored repeated matching attempts; for anchored regexs
  -the loop runs just once. */
  -
  -do
  -  {
  -  int rc;
  -  register int *iptr = match_block.offset_vector;
  -  register int *iend = iptr + resetcount;
  -
  -  /* Reset the maximum number of extractions we might see. */
  -
  -  while (iptr < iend) *iptr++ = -1;
  -
  -  /* Advance to a unique first char if possible */
  -
  -  if (first_char >= 0)
  -    {
  -    if ((ims & PCRE_CASELESS) != 0)
  -      while (start_match < end_subject &&
  -             match_block.lcc[*start_match] != first_char)
  -        start_match++;
  -    else
  -      while (start_match < end_subject && *start_match != first_char)
  -        start_match++;
  -    }
  -
  -  /* Or to just after \n for a multiline match if possible */
  -
  -  else if (startline)
  -    {
  -    if (start_match > match_block.start_subject + start_offset)
  -      {
  -      while (start_match < end_subject && start_match[-1] != '\n')
  -        start_match++;
  -      }
  -    }
  -
  -  /* Or to a non-unique first char after study */
  -
  -  else if (start_bits != NULL)
  -    {
  -    while (start_match < end_subject)
  -      {
  -      register int c = *start_match;
  -      if ((start_bits[c/8] & (1 << (c&7))) == 0) start_match++; else break;
  -      }
  -    }
  -
  -  /* If req_char is set, we know that that character must appear in the subject
  -  for the match to succeed. If the first character is set, req_char must be
  -  later in the subject; otherwise the test starts at the match point. This
  -  optimization can save a huge amount of backtracking in patterns with nested
  -  unlimited repeats that aren't going to match. We don't know what the state of
  -  case matching may be when this character is hit, so test for it in both its
  -  cases if necessary. However, the different cased versions will not be set up
  -  unless PCRE_CASELESS was given or the casing state changes within the regex.
  -  Writing separate code makes it go faster, as does using an autoincrement and
  -  backing off on a match. */
  -
  -  if (req_char >= 0)
  -    {
  -    register const uschar *p = start_match + ((first_char >= 0)? 1 : 0);
  -
  -    /* We don't need to repeat the search if we haven't yet reached the
  -    place we found it at last time. */
  -
  -    if (p > req_char_ptr)
  -      {
  -      /* Do a single test if no case difference is set up */
  -
  -      if (req_char == req_char2)
  -        {
  -        while (p < end_subject)
  -          {
  -          if (*p++ == req_char) { p--; break; }
  -          }
  -        }
  -
  -      /* Otherwise test for either case */
  -
  -      else
  -        {
  -        while (p < end_subject)
  -          {
  -          register int pp = *p++;
  -          if (pp == req_char || pp == req_char2) { p--; break; }
  -          }
  -        }
  -
  -      /* If we can't find the required character, break the matching loop */
  -
  -      if (p >= end_subject) break;
  -
  -      /* If we have found the required character, save the point where we
  -      found it, so that we don't search again next time round the loop if
  -      the start hasn't passed this character yet. */
  -
  -      req_char_ptr = p;
  -      }
  -    }
  -
  -  /* When a match occurs, substrings will be set for all internal extractions;
  -  we just need to set up the whole thing as substring 0 before returning. If
  -  there were too many extractions, set the return code to zero. In the case
  -  where we had to get some local store to hold offsets for backreferences, copy
  -  those back references that we can. In this case there need not be overflow
  -  if certain parts of the pattern were not used. */
  -
  -  match_block.start_match = start_match;
  -  if (!match(start_match, re->code, 2, &match_block, ims, NULL, match_isgroup))
  -    continue;
  -
  -  /* Copy the offset information from temporary store if necessary */
  -
  -  if (using_temporary_offsets)
  -    {
  -    if (offsetcount >= 4)
  -      {
  -      memcpy(offsets + 2, match_block.offset_vector + 2,
  -        (offsetcount - 2) * sizeof(int));
  -
  -      }
  -    if (match_block.end_offset_top > offsetcount)
  -      match_block.offset_overflow = TRUE;
  -
  -    (pcre_free)(match_block.offset_vector);
  -    }
  -
  -  rc = match_block.offset_overflow? 0 : match_block.end_offset_top/2;
  +	int resetcount, ocount;
  +	int first_char = -1;
  +	int req_char = -1;
  +	int req_char2 = -1;
  +	unsigned long int ims = 0;
  +	match_data match_block;
  +	const uschar *start_bits = NULL;
  +	const uschar *start_match = (const uschar *)subject + start_offset;
  +	const uschar *end_subject;
  +	const uschar *req_char_ptr = start_match - 1;
  +	const pcre_st *re = (const pcre_st *)external_re;
  +	const pcre_extra_st *extra = (const pcre_extra_st *)external_extra;
  +	BOOL using_temporary_offsets = FALSE;
  +	BOOL anchored;
  +	BOOL startline;
  +
  +	if ((options & ~PUBLIC_EXEC_OPTIONS) != 0)
  +		return PCRE_ERROR_BADOPTION;
  +
  +	if (re == NULL || subject == NULL || (offsets == NULL && offsetcount > 0))
  +		return PCRE_ERROR_NULL;
  +	if (re->magic_number != MAGIC_NUMBER)
  +		return PCRE_ERROR_BADMAGIC;
  +
  +	anchored = ((re->options | options) & PCRE_ANCHORED) != 0;
  +	startline = (re->options & PCRE_STARTLINE) != 0;
  +
  +	match_block.start_pattern = re->code;
  +	match_block.start_subject = (const uschar *)subject;
  +	match_block.end_subject = match_block.start_subject + length;
  +	end_subject = match_block.end_subject;
  +
  +	match_block.endonly = (re->options & PCRE_DOLLAR_ENDONLY) != 0;
  +	match_block.utf8 = (re->options & PCRE_UTF8) != 0;
  +
  +	match_block.notbol = (options & PCRE_NOTBOL) != 0;
  +	match_block.noteol = (options & PCRE_NOTEOL) != 0;
  +	match_block.notempty = (options & PCRE_NOTEMPTY) != 0;
  +
  +	match_block.errorcode = PCRE_ERROR_NOMATCH;
  +
  +	match_block.lcc = re->tables + lcc_offset;
  +	match_block.ctypes = re->tables + ctypes_offset;
  +
  +	ims = re->options & (PCRE_CASELESS | PCRE_MULTILINE | PCRE_DOTALL);
  +
  +	ocount = offsetcount - (offsetcount % 3);
  +
  +	if (re->top_backref > 0 && re->top_backref >= ocount / 3) {
  +		ocount = re->top_backref * 3 + 3;
  +		match_block.offset_vector =
  +			(int *)(pcre_malloc) (ocount * sizeof (int));
  +		if (match_block.offset_vector == NULL)
  +			return PCRE_ERROR_NOMEMORY;
  +		using_temporary_offsets = TRUE;
  +
  +	}
  +	else
  +		match_block.offset_vector = offsets;
  +
  +	match_block.offset_end = ocount;
  +	match_block.offset_max = (2 * ocount) / 3;
  +	match_block.offset_overflow = FALSE;
  +
  +	resetcount = 2 + re->top_bracket * 2;
  +	if (resetcount > offsetcount)
  +		resetcount = ocount;
  +
  +	if (match_block.offset_vector != NULL) {
  +		register int *iptr = match_block.offset_vector + ocount;
  +		register int *iend = iptr - resetcount / 2 + 1;
  +		while (--iptr >= iend)
  +			*iptr = -1;
  +	}
  +
  +	if (!anchored) {
  +		if ((re->options & PCRE_FIRSTSET) != 0) {
  +			first_char = re->first_char;
  +			if ((ims & PCRE_CASELESS) != 0)
  +				first_char = match_block.lcc[first_char];
  +		}
  +		else
  +			if (!startline && extra != NULL &&
  +				(extra->options & PCRE_STUDY_MAPPED) != 0)
  +			start_bits = extra->start_bits;
  +	}
  +
  +	if ((re->options & PCRE_REQCHSET) != 0) {
  +		req_char = re->req_char;
  +		req_char2 = ((re->options & (PCRE_CASELESS | PCRE_ICHANGED)) != 0) ?
  +			(re->tables + fcc_offset)[req_char] : req_char;
  +	}
  +
  +	do {
  +		int rc;
  +		register int *iptr = match_block.offset_vector;
  +		register int *iend = iptr + resetcount;
  +
  +		while (iptr < iend)
  +			*iptr++ = -1;
  +
  +		if (first_char >= 0) {
  +			if ((ims & PCRE_CASELESS) != 0)
  +				while (start_match < end_subject &&
  +					   match_block.lcc[*start_match] != first_char)
  +					start_match++;
  +			else
  +				while (start_match < end_subject
  +					   && *start_match != first_char) start_match++;
  +		}
  +
  +		else if (startline) {
  +			if (start_match > match_block.start_subject + start_offset) {
  +				while (start_match < end_subject && start_match[-1] != '\n')
  +					start_match++;
  +			}
  +		}
  +
  +		else if (start_bits != NULL) {
  +			while (start_match < end_subject) {
  +				register int c = *start_match;
  +				if ((start_bits[c / 8] & (1 << (c & 7))) == 0)
  +					start_match++;
  +				else
  +					break;
  +			}
  +		}
  +
  +		if (req_char >= 0) {
  +			register const uschar *p =
  +				start_match + ((first_char >= 0) ? 1 : 0);
  +
  +			if (p > req_char_ptr) {
  +				if (req_char == req_char2) {
  +					while (p < end_subject) {
  +						if (*p++ == req_char) {
  +							p--;
  +							break;
  +						}
  +					}
  +				}
  +
  +				else {
  +					while (p < end_subject) {
  +						register int pp = *p++;
  +						if (pp == req_char || pp == req_char2) {
  +							p--;
  +							break;
  +						}
  +					}
  +				}
  +
  +				if (p >= end_subject)
  +					break;
  +
  +				req_char_ptr = p;
  +			}
  +		}
  +
  +		match_block.start_match = start_match;
  +		if (!match
  +			(start_match, re->code, 2, &match_block, ims, NULL,
  +			 match_isgroup)) continue;
  +
  +		if (using_temporary_offsets) {
  +			if (offsetcount >= 4) {
  +				memcpy(offsets + 2, match_block.offset_vector + 2,
  +					   (offsetcount - 2) * sizeof (int));
  +
  +			}
  +			if (match_block.end_offset_top > offsetcount)
  +				match_block.offset_overflow = TRUE;
  +
  +			(pcre_free) (match_block.offset_vector);
  +		}
  +
  +		rc = match_block.offset_overflow ? 0 : match_block.end_offset_top / 2;
  +
  +		if (offsetcount < 2)
  +			rc = 0;
  +		else {
  +			offsets[0] = start_match - match_block.start_subject;
  +			offsets[1] =
  +				match_block.end_match_ptr - match_block.start_subject;
  +		}
  +
  +		return rc;
  +	}
  +
  +	while (!anchored &&
  +		   match_block.errorcode == PCRE_ERROR_NOMATCH &&
  +		   start_match++ < end_subject);
   
  -  if (match_block.offset_end < 2) rc = 0; else
  -    {
  -    offsets[0] = start_match - match_block.start_subject;
  -    offsets[1] = match_block.end_match_ptr - match_block.start_subject;
  -    }
  -
  -  return rc;
  -  }
  -
  -/* This "while" is the end of the "do" above */
  -
  -while (!anchored &&
  -       match_block.errorcode == PCRE_ERROR_NOMATCH &&
  -       start_match++ < end_subject);
  +	if (using_temporary_offsets) {
   
  -if (using_temporary_offsets)
  -  {
  +		(pcre_free) (match_block.offset_vector);
  +	}
   
  -  (pcre_free)(match_block.offset_vector);
  -  }
  -
  -return match_block.errorcode;
  +	return match_block.errorcode;
   }
   
  -/* ____ END pcre.c ____ */
  -
  -/* ____ BEGIN study.c ____ */
  -
  -/* Include the internals header, which itself includes Standard C headers plus
  -the external pcre header. */
  -
  -/*************************************************
  -*      Set a bit and maybe its alternate case    *
  -*************************************************/
  -
  -/* Given a character, set its bit in the table, and also the bit for the other
  -version of a letter if we are caseless.
  -
  -Arguments:
  -  start_bits    points to the bit map
  -  c             is the character
  -  caseless      the caseless flag
  -  cd            the block with char table pointers
  -
  -Returns:        nothing
  -*/
  -
   static void
  -set_bit(uschar *start_bits, int c, BOOL caseless, compile_data *cd)
  +set_bit(uschar * start_bits, int c, BOOL caseless, compile_data * cd)
   {
  -start_bits[c/8] |= (1 << (c&7));
  -if (caseless && (cd->ctypes[c] & ctype_letter) != 0)
  -  start_bits[cd->fcc[c]/8] |= (1 << (cd->fcc[c]&7));
  +	start_bits[c / 8] |= (1 << (c & 7));
  +	if (caseless && (cd->ctypes[c] & ctype_letter) != 0)
  +		start_bits[cd->fcc[c] / 8] |= (1 << (cd->fcc[c] & 7));
   }
   
  -/*************************************************
  -*          Create bitmap of starting chars       *
  -*************************************************/
  -
  -/* This function scans a compiled unanchored expression and attempts to build a
  -bitmap of the set of initial characters. If it can't, it returns FALSE. As time
  -goes by, we may be able to get more clever at doing this.
  -
  -Arguments:
  -  code         points to an expression
  -  start_bits   points to a 32-byte table, initialized to 0
  -  caseless     the current state of the caseless flag
  -  cd           the block with char table pointers
  -
  -Returns:       TRUE if table built, FALSE otherwise
  -*/
  -
   static BOOL
  -set_start_bits(const uschar *code, uschar *start_bits, BOOL caseless,
  -  compile_data *cd)
  +set_start_bits(const uschar * code, uschar * start_bits, BOOL caseless,
  +			   compile_data * cd)
   {
  -register int c;
  +	register int c;
   
  -/* This next statement and the later reference to dummy are here in order to
  -trick the optimizer of the IBM C compiler for OS/2 into generating correct
  -code. Apparently IBM isn't going to fix the problem, and we would rather not
  -disable optimization (in this module it actually makes a big difference, and
  -the pcre module can use all the optimization it can get). */
  -
  -volatile int dummy;
  -
  -do
  -  {
  -  const uschar *tcode = code + 3;
  -  BOOL try_next = TRUE;
  -
  -  while (try_next)
  -    {
  -    /* If a branch starts with a bracket or a positive lookahead assertion,
  -    recurse to set bits from within them. That's all for this branch. */
  -
  -    if ((int)*tcode >= OP_BRA || *tcode == OP_ASSERT)
  -      {
  -      if (!set_start_bits(tcode, start_bits, caseless, cd))
  -        return FALSE;
  -      try_next = FALSE;
  -      }
  -
  -    else switch(*tcode)
  -      {
  -      default:
  -      return FALSE;
  -
  -      /* Skip over extended extraction bracket number */
  -
  -      case OP_BRANUMBER:
  -      tcode += 3;
  -      break;
  -
  -      /* Skip over lookbehind and negative lookahead assertions */
  -
  -      case OP_ASSERT_NOT:
  -      case OP_ASSERTBACK:
  -      case OP_ASSERTBACK_NOT:
  -      do tcode += (tcode[1] << 8) + tcode[2]; while (*tcode == OP_ALT);
  -      tcode += 3;
  -      break;
  -
  -      /* Skip over an option setting, changing the caseless flag */
  -
  -      case OP_OPT:
  -      caseless = (tcode[1] & PCRE_CASELESS) != 0;
  -      tcode += 2;
  -      break;
  -
  -      /* BRAZERO does the bracket, but carries on. */
  -
  -      case OP_BRAZERO:
  -      case OP_BRAMINZERO:
  -      if (!set_start_bits(++tcode, start_bits, caseless, cd))
  -        return FALSE;
  -      dummy = 1;
  -      do tcode += (tcode[1] << 8) + tcode[2]; while (*tcode == OP_ALT);
  -      tcode += 3;
  -      break;
  -
  -      /* Single-char * or ? sets the bit and tries the next item */
  -
  -      case OP_STAR:
  -      case OP_MINSTAR:
  -      case OP_QUERY:
  -      case OP_MINQUERY:
  -      set_bit(start_bits, tcode[1], caseless, cd);
  -      tcode += 2;
  -      break;
  -
  -      /* Single-char upto sets the bit and tries the next */
  -
  -      case OP_UPTO:
  -      case OP_MINUPTO:
  -      set_bit(start_bits, tcode[3], caseless, cd);
  -      tcode += 4;
  -      break;
  -
  -      /* At least one single char sets the bit and stops */
  -
  -      case OP_EXACT:       /* Fall through */
  -      tcode++;
  -
  -      case OP_CHARS:       /* Fall through */
  -      tcode++;
  -
  -      case OP_PLUS:
  -      case OP_MINPLUS:
  -      set_bit(start_bits, tcode[1], caseless, cd);
  -      try_next = FALSE;
  -      break;
  -
  -      /* Single character type sets the bits and stops */
  -
  -      case OP_NOT_DIGIT:
  -      for (c = 0; c < 32; c++)
  -        start_bits[c] |= ~cd->cbits[c+cbit_digit];
  -      try_next = FALSE;
  -      break;
  -
  -      case OP_DIGIT:
  -      for (c = 0; c < 32; c++)
  -        start_bits[c] |= cd->cbits[c+cbit_digit];
  -      try_next = FALSE;
  -      break;
  -
  -      case OP_NOT_WHITESPACE:
  -      for (c = 0; c < 32; c++)
  -        start_bits[c] |= ~cd->cbits[c+cbit_space];
  -      try_next = FALSE;
  -      break;
  -
  -      case OP_WHITESPACE:
  -      for (c = 0; c < 32; c++)
  -        start_bits[c] |= cd->cbits[c+cbit_space];
  -      try_next = FALSE;
  -      break;
  -
  -      case OP_NOT_WORDCHAR:
  -      for (c = 0; c < 32; c++)
  -        start_bits[c] |= ~cd->cbits[c+cbit_word];
  -      try_next = FALSE;
  -      break;
  -
  -      case OP_WORDCHAR:
  -      for (c = 0; c < 32; c++)
  -        start_bits[c] |= cd->cbits[c+cbit_word];
  -      try_next = FALSE;
  -      break;
  -
  -      /* One or more character type fudges the pointer and restarts, knowing
  -      it will hit a single character type and stop there. */
  -
  -      case OP_TYPEPLUS:
  -      case OP_TYPEMINPLUS:
  -      tcode++;
  -      break;
  -
  -      case OP_TYPEEXACT:
  -      tcode += 3;
  -      break;
  -
  -      /* Zero or more repeats of character types set the bits and then
  -      try again. */
  -
  -      case OP_TYPEUPTO:
  -      case OP_TYPEMINUPTO:
  -      tcode += 2;               /* Fall through */
  -
  -      case OP_TYPESTAR:
  -      case OP_TYPEMINSTAR:
  -      case OP_TYPEQUERY:
  -      case OP_TYPEMINQUERY:
  -      switch(tcode[1])
  -        {
  -        case OP_NOT_DIGIT:
  -        for (c = 0; c < 32; c++)
  -          start_bits[c] |= ~cd->cbits[c+cbit_digit];
  -        break;
  -
  -        case OP_DIGIT:
  -        for (c = 0; c < 32; c++)
  -          start_bits[c] |= cd->cbits[c+cbit_digit];
  -        break;
  -
  -        case OP_NOT_WHITESPACE:
  -        for (c = 0; c < 32; c++)
  -          start_bits[c] |= ~cd->cbits[c+cbit_space];
  -        break;
  -
  -        case OP_WHITESPACE:
  -        for (c = 0; c < 32; c++)
  -          start_bits[c] |= cd->cbits[c+cbit_space];
  -        break;
  -
  -        case OP_NOT_WORDCHAR:
  -        for (c = 0; c < 32; c++)
  -          start_bits[c] |= ~cd->cbits[c+cbit_word];
  -        break;
  -
  -        case OP_WORDCHAR:
  -        for (c = 0; c < 32; c++)
  -          start_bits[c] |= cd->cbits[c+cbit_word];
  -        break;
  -        }
  -
  -      tcode += 2;
  -      break;
  -
  -      /* Character class: set the bits and either carry on or not,
  -      according to the repeat count. */
  -
  -      case OP_CLASS:
  -        {
  -        tcode++;
  -        for (c = 0; c < 32; c++) start_bits[c] |= tcode[c];
  -        tcode += 32;
  -        switch (*tcode)
  -          {
  -          case OP_CRSTAR:
  -          case OP_CRMINSTAR:
  -          case OP_CRQUERY:
  -          case OP_CRMINQUERY:
  -          tcode++;
  -          break;
  -
  -          case OP_CRRANGE:
  -          case OP_CRMINRANGE:
  -          if (((tcode[1] << 8) + tcode[2]) == 0) tcode += 5;
  -            else try_next = FALSE;
  -          break;
  -
  -          default:
  -          try_next = FALSE;
  -          break;
  -          }
  -        }
  -      break;
  -
  -      }
  -    }
  +	volatile int dummy;
   
  -  code += (code[1] << 8) + code[2];   /* Advance to next branch */
  -  }
  -while (*code == OP_ALT);
  -return TRUE;
  +	do {
  +		const uschar *tcode = code + 3;
  +		BOOL try_next = TRUE;
  +
  +		while (try_next) {
  +			if ((int)*tcode >= OP_BRA || *tcode == OP_ASSERT) {
  +				if (!set_start_bits(tcode, start_bits, caseless, cd))
  +					return FALSE;
  +				try_next = FALSE;
  +			}
  +
  +			else
  +				switch (*tcode) {
  +					default:
  +						return FALSE;
  +
  +					case OP_BRANUMBER:
  +						tcode += 3;
  +						break;
  +
  +					case OP_ASSERT_NOT:
  +					case OP_ASSERTBACK:
  +					case OP_ASSERTBACK_NOT:
  +						do
  +							tcode += (tcode[1] << 8) + tcode[2];
  +						while (*tcode == OP_ALT);
  +						tcode += 3;
  +						break;
  +
  +					case OP_OPT:
  +						caseless = (tcode[1] & PCRE_CASELESS) != 0;
  +						tcode += 2;
  +						break;
  +
  +					case OP_BRAZERO:
  +					case OP_BRAMINZERO:
  +						if (!set_start_bits
  +							(++tcode, start_bits, caseless, cd)) return FALSE;
  +						dummy = 1;
  +						do
  +							tcode += (tcode[1] << 8) + tcode[2];
  +						while (*tcode == OP_ALT);
  +						tcode += 3;
  +						break;
  +
  +					case OP_STAR:
  +					case OP_MINSTAR:
  +					case OP_QUERY:
  +					case OP_MINQUERY:
  +						set_bit(start_bits, tcode[1], caseless, cd);
  +						tcode += 2;
  +						break;
  +
  +					case OP_UPTO:
  +					case OP_MINUPTO:
  +						set_bit(start_bits, tcode[3], caseless, cd);
  +						tcode += 4;
  +						break;
  +
  +					case OP_EXACT:
  +						tcode++;
  +
  +					case OP_CHARS:
  +						tcode++;
  +
  +					case OP_PLUS:
  +					case OP_MINPLUS:
  +						set_bit(start_bits, tcode[1], caseless, cd);
  +						try_next = FALSE;
  +						break;
  +
  +					case OP_NOT_DIGIT:
  +						for (c = 0; c < 32; c++)
  +							start_bits[c] |= ~cd->cbits[c + cbit_digit];
  +						try_next = FALSE;
  +						break;
  +
  +					case OP_DIGIT:
  +						for (c = 0; c < 32; c++)
  +							start_bits[c] |= cd->cbits[c + cbit_digit];
  +						try_next = FALSE;
  +						break;
  +
  +					case OP_NOT_WHITESPACE:
  +						for (c = 0; c < 32; c++)
  +							start_bits[c] |= ~cd->cbits[c + cbit_space];
  +						try_next = FALSE;
  +						break;
  +
  +					case OP_WHITESPACE:
  +						for (c = 0; c < 32; c++)
  +							start_bits[c] |= cd->cbits[c + cbit_space];
  +						try_next = FALSE;
  +						break;
  +
  +					case OP_NOT_WORDCHAR:
  +						for (c = 0; c < 32; c++)
  +							start_bits[c] |= ~cd->cbits[c + cbit_word];
  +						try_next = FALSE;
  +						break;
  +
  +					case OP_WORDCHAR:
  +						for (c = 0; c < 32; c++)
  +							start_bits[c] |= cd->cbits[c + cbit_word];
  +						try_next = FALSE;
  +						break;
  +
  +					case OP_TYPEPLUS:
  +					case OP_TYPEMINPLUS:
  +						tcode++;
  +						break;
  +
  +					case OP_TYPEEXACT:
  +						tcode += 3;
  +						break;
  +
  +					case OP_TYPEUPTO:
  +					case OP_TYPEMINUPTO:
  +						tcode += 2;
  +
  +					case OP_TYPESTAR:
  +					case OP_TYPEMINSTAR:
  +					case OP_TYPEQUERY:
  +					case OP_TYPEMINQUERY:
  +						switch (tcode[1]) {
  +							case OP_NOT_DIGIT:
  +								for (c = 0; c < 32; c++)
  +									start_bits[c] |=
  +										~cd->cbits[c + cbit_digit];
  +								break;
  +
  +							case OP_DIGIT:
  +								for (c = 0; c < 32; c++)
  +									start_bits[c] |=
  +										cd->cbits[c + cbit_digit];
  +								break;
  +
  +							case OP_NOT_WHITESPACE:
  +								for (c = 0; c < 32; c++)
  +									start_bits[c] |=
  +										~cd->cbits[c + cbit_space];
  +								break;
  +
  +							case OP_WHITESPACE:
  +								for (c = 0; c < 32; c++)
  +									start_bits[c] |=
  +										cd->cbits[c + cbit_space];
  +								break;
  +
  +							case OP_NOT_WORDCHAR:
  +								for (c = 0; c < 32; c++)
  +									start_bits[c] |=
  +										~cd->cbits[c + cbit_word];
  +								break;
  +
  +							case OP_WORDCHAR:
  +								for (c = 0; c < 32; c++)
  +									start_bits[c] |= cd->cbits[c + cbit_word];
  +								break;
  +						}
  +
  +						tcode += 2;
  +						break;
  +
  +					case OP_CLASS:
  +						{
  +							tcode++;
  +							for (c = 0; c < 32; c++)
  +								start_bits[c] |= tcode[c];
  +							tcode += 32;
  +							switch (*tcode) {
  +								case OP_CRSTAR:
  +								case OP_CRMINSTAR:
  +								case OP_CRQUERY:
  +								case OP_CRMINQUERY:
  +									tcode++;
  +									break;
  +
  +								case OP_CRRANGE:
  +								case OP_CRMINRANGE:
  +									if (((tcode[1] << 8) + tcode[2]) == 0)
  +										tcode += 5;
  +									else
  +										try_next = FALSE;
  +									break;
  +
  +								default:
  +									try_next = FALSE;
  +									break;
  +							}
  +						}
  +						break;
  +
  +				}
  +		}
  +
  +		code += (code[1] << 8) + code[2];
  +	}
  +	while (*code == OP_ALT);
  +	return TRUE;
   }
   
  -/*************************************************
  -*          Study a compiled expression           *
  -*************************************************/
  -
  -/* This function is handed a compiled expression that it must study to produce
  -information that will speed up the matching. It returns a pcre_extra block
  -which then gets handed back to pcre_exec().
  -
  -Arguments:
  -  re        points to the compiled expression
  -  options   contains option bits
  -  errorptr  points to where to place error messages;
  -            set NULL unless error
  -
  -Returns:    pointer to a pcre_extra block,
  -            NULL on error or if no optimization possible
  -*/
  -
  -pcre_extra *
  -pcre_study(const pcre *external_re, int options, const char **errorptr)
  +pcre_extra *pcre_study(const pcre * external_re, int options,
  +					   const char **errorptr)
   {
  -uschar start_bits[32];
  -real_pcre_extra *extra;
  -const real_pcre *re = (const real_pcre *)external_re;
  -compile_data compile_block;
  -
  -*errorptr = NULL;
  -
  -if (re == NULL || re->magic_number != MAGIC_NUMBER)
  -  {
  -  *errorptr = "argument is not a compiled regular expression";
  -  return NULL;
  -  }
  -
  -if ((options & ~PUBLIC_STUDY_OPTIONS) != 0)
  -  {
  -  *errorptr = "unknown or incorrect option bit(s) set";
  -  return NULL;
  -  }
  -
  -/* For an anchored pattern, or an unchored pattern that has a first char, or a
  -multiline pattern that matches only at "line starts", no further processing at
  -present. */
  -
  -if ((re->options & (PCRE_ANCHORED|PCRE_FIRSTSET|PCRE_STARTLINE)) != 0)
  -  return NULL;
  -
  -/* Set the character tables in the block which is passed around */
  -
  -compile_block.lcc = re->tables + lcc_offset;
  -compile_block.fcc = re->tables + fcc_offset;
  -compile_block.cbits = re->tables + cbits_offset;
  -compile_block.ctypes = re->tables + ctypes_offset;
  +	uschar start_bits[32];
  +	pcre_extra_st *extra;
  +	const pcre_st *re = (const pcre_st *)external_re;
  +	compile_data compile_block;
  +
  +	*errorptr = NULL;
  +
  +	if (re == NULL || re->magic_number != MAGIC_NUMBER) {
  +		*errorptr = "argument is not a compiled regular expression";
  +		return NULL;
  +	}
  +
  +	if ((options & ~PUBLIC_STUDY_OPTIONS) != 0) {
  +		*errorptr = "unknown or incorrect option bit(s) set";
  +		return NULL;
  +	}
  +
  +	if ((re->options & (PCRE_ANCHORED | PCRE_FIRSTSET | PCRE_STARTLINE)) != 0)
  +		return NULL;
  +
  +	compile_block.lcc = re->tables + lcc_offset;
  +	compile_block.fcc = re->tables + fcc_offset;
  +	compile_block.cbits = re->tables + cbits_offset;
  +	compile_block.ctypes = re->tables + ctypes_offset;
  +
  +	memset(start_bits, 0, 32 * sizeof (uschar));
  +	if (!set_start_bits
  +		(re->code, start_bits, (re->options & PCRE_CASELESS) != 0,
  +		 &compile_block)) return NULL;
  +
  +	extra = (pcre_extra_st *) (pcre_malloc) (sizeof (pcre_extra_st));
  +
  +	if (extra == NULL) {
  +		*errorptr = "failed to get memory";
  +		return NULL;
  +	}
   
  -/* See if we can find a fixed set of initial characters for the pattern. */
  +	extra->options = PCRE_STUDY_MAPPED;
  +	memcpy(extra->start_bits, start_bits, sizeof (start_bits));
   
  -memset(start_bits, 0, 32 * sizeof(uschar));
  -if (!set_start_bits(re->code, start_bits, (re->options & PCRE_CASELESS) != 0,
  -  &compile_block)) return NULL;
  -
  -/* Get an "extra" block and put the information therein. */
  -
  -extra = (real_pcre_extra *)(pcre_malloc)(sizeof(real_pcre_extra));
  -
  -if (extra == NULL)
  -  {
  -  *errorptr = "failed to get memory";
  -  return NULL;
  -  }
  -
  -extra->options = PCRE_STUDY_MAPPED;
  -memcpy(extra->start_bits, start_bits, sizeof(start_bits));
  -
  -return (pcre_extra *)extra;
  +	return (pcre_extra *) extra;
   }
   
  -/* ____ END study.c ____ */
  -
  -/* ____ BEGIN get.c ____ */
  -
  -/* This module contains some convenience functions for extracting substrings
  -from the subject string after a regex match has succeeded. The original idea
  -for these functions came from Scott Wimer <scottw@cgibuilder.com>. */
  -
  -/* Include the internals header, which itself includes Standard C headers plus
  -the external pcre header. */
  -
  -/*************************************************
  -*      Copy captured string to given buffer      *
  -*************************************************/
  -
  -/* This function copies a single captured substring into a given buffer.
  -Note that we use memcpy() rather than strncpy() in case there are binary zeros
  -in the string.
  -
  -Arguments:
  -  subject        the subject string that was matched
  -  ovector        pointer to the offsets table
  -  stringcount    the number of substrings that were captured
  -                   (i.e. the yield of the pcre_exec call, unless
  -                   that was zero, in which case it should be 1/3
  -                   of the offset table size)
  -  stringnumber   the number of the required substring
  -  buffer         where to put the substring
  -  size           the size of the buffer
  -
  -Returns:         if successful:
  -                   the length of the copied string, not including the zero
  -                   that is put on the end; can be zero
  -                 if not successful:
  -                   PCRE_ERROR_NOMEMORY (-6) buffer too small
  -                   PCRE_ERROR_NOSUBSTRING (-7) no such captured substring
  -*/
  -
   int
   pcre_copy_substring(const char *subject, int *ovector, int stringcount,
  -  int stringnumber, char *buffer, int size)
  +					int stringnumber, char *buffer, int size)
   {
  -int yield;
  -if (stringnumber < 0 || stringnumber >= stringcount)
  -  return PCRE_ERROR_NOSUBSTRING;
  -stringnumber *= 2;
  -yield = ovector[stringnumber+1] - ovector[stringnumber];
  -if (size < yield + 1) return PCRE_ERROR_NOMEMORY;
  -memcpy(buffer, subject + ovector[stringnumber], yield);
  -buffer[yield] = 0;
  -return yield;
  +	int yield;
  +	if (stringnumber < 0 || stringnumber >= stringcount)
  +		return PCRE_ERROR_NOSUBSTRING;
  +	stringnumber *= 2;
  +	yield = ovector[stringnumber + 1] - ovector[stringnumber];
  +	if (size < yield + 1)
  +		return PCRE_ERROR_NOMEMORY;
  +	memcpy(buffer, subject + ovector[stringnumber], yield);
  +	buffer[yield] = 0;
  +	return yield;
   }
   
  -/*************************************************
  -*      Copy all captured strings to new store    *
  -*************************************************/
  -
  -/* This function gets one chunk of store and builds a list of pointers and all
  -of the captured substrings in it. A NULL pointer is put on the end of the list.
  -
  -Arguments:
  -  subject        the subject string that was matched
  -  ovector        pointer to the offsets table
  -  stringcount    the number of substrings that were captured
  -                   (i.e. the yield of the pcre_exec call, unless
  -                   that was zero, in which case it should be 1/3
  -                   of the offset table size)
  -  listptr        set to point to the list of pointers
  -
  -Returns:         if successful: 0
  -                 if not successful:
  -                   PCRE_ERROR_NOMEMORY (-6) failed to get store
  -*/
  -
   int
   pcre_get_substring_list(const char *subject, int *ovector, int stringcount,
  -  const char ***listptr)
  +						const char ***listptr)
   {
  -int i;
  -int size = sizeof(char *);
  -int double_count = stringcount * 2;
  -char **stringlist;
  -char *p;
  -
  -for (i = 0; i < double_count; i += 2)
  -  size += sizeof(char *) + ovector[i+1] - ovector[i] + 1;
  -
  -stringlist = (char **)(pcre_malloc)(size);
  -if (stringlist == NULL) return PCRE_ERROR_NOMEMORY;
  -
  -*listptr = (const char **)stringlist;
  -p = (char *)(stringlist + stringcount + 1);
  -
  -for (i = 0; i < double_count; i += 2)
  -  {
  -  int len = ovector[i+1] - ovector[i];
  -  memcpy(p, subject + ovector[i], len);
  -  *stringlist++ = p;
  -  p += len;
  -  *p++ = 0;
  -  }
  +	int i;
  +	int size = sizeof (char *);
  +	int double_count = stringcount * 2;
  +	char **stringlist;
  +	char *p;
  +
  +	for (i = 0; i < double_count; i += 2)
  +		size += sizeof (char *) + ovector[i + 1] - ovector[i] + 1;
  +
  +	stringlist = (char **)(pcre_malloc) (size);
  +	if (stringlist == NULL)
  +		return PCRE_ERROR_NOMEMORY;
  +
  +	*listptr = (const char **)stringlist;
  +	p = (char *)(stringlist + stringcount + 1);
  +
  +	for (i = 0; i < double_count; i += 2) {
  +		int len = ovector[i + 1] - ovector[i];
  +		memcpy(p, subject + ovector[i], len);
  +		*stringlist++ = p;
  +		p += len;
  +		*p++ = 0;
  +	}
   
  -*stringlist = NULL;
  -return 0;
  +	*stringlist = NULL;
  +	return 0;
   }
   
  -/*************************************************
  -*   Free store obtained by get_substring_list    *
  -*************************************************/
  -
  -/* This function exists for the benefit of people calling PCRE from non-C
  -programs that can call its functions, but not free() or (pcre_free)() directly.
  -
  -Argument:   the result of a previous pcre_get_substring_list()
  -Returns:    nothing
  -*/
  -
  -void
  -pcre_free_substring_list(const char **pointer)
  +void pcre_free_substring_list(const char **pointer)
   {
  -(pcre_free)((void *)pointer);
  +	(pcre_free) ((void *)pointer);
   }
   
  -/*************************************************
  -*      Copy captured string to new store         *
  -*************************************************/
  -
  -/* This function copies a single captured substring into a piece of new
  -store
  -
  -Arguments:
  -  subject        the subject string that was matched
  -  ovector        pointer to the offsets table
  -  stringcount    the number of substrings that were captured
  -                   (i.e. the yield of the pcre_exec call, unless
  -                   that was zero, in which case it should be 1/3
  -                   of the offset table size)
  -  stringnumber   the number of the required substring
  -  stringptr      where to put a pointer to the substring
  -
  -Returns:         if successful:
  -                   the length of the string, not including the zero that
  -                   is put on the end; can be zero
  -                 if not successful:
  -                   PCRE_ERROR_NOMEMORY (-6) failed to get store
  -                   PCRE_ERROR_NOSUBSTRING (-7) substring not present
  -*/
  -
   int
   pcre_get_substring(const char *subject, int *ovector, int stringcount,
  -  int stringnumber, const char **stringptr)
  +				   int stringnumber, const char **stringptr)
   {
  -int yield;
  -char *substring;
  -if (stringnumber < 0 || stringnumber >= stringcount)
  -  return PCRE_ERROR_NOSUBSTRING;
  -stringnumber *= 2;
  -yield = ovector[stringnumber+1] - ovector[stringnumber];
  -substring = (char *)(pcre_malloc)(yield + 1);
  -if (substring == NULL) return PCRE_ERROR_NOMEMORY;
  -memcpy(substring, subject + ovector[stringnumber], yield);
  -substring[yield] = 0;
  -*stringptr = substring;
  -return yield;
  +	int yield;
  +	char *substring;
  +	if (stringnumber < 0 || stringnumber >= stringcount)
  +		return PCRE_ERROR_NOSUBSTRING;
  +	stringnumber *= 2;
  +	yield = ovector[stringnumber + 1] - ovector[stringnumber];
  +	substring = (char *)(pcre_malloc) (yield + 1);
  +	if (substring == NULL)
  +		return PCRE_ERROR_NOMEMORY;
  +	memcpy(substring, subject + ovector[stringnumber], yield);
  +	substring[yield] = 0;
  +	*stringptr = substring;
  +	return yield;
   }
   
  -/*************************************************
  -*       Free store obtained by get_substring     *
  -*************************************************/
  -
  -/* This function exists for the benefit of people calling PCRE from non-C
  -programs that can call its functions, but not free() or (pcre_free)() directly.
  -
  -Argument:   the result of a previous pcre_get_substring()
  -Returns:    nothing
  -*/
  -
  -void
  -pcre_free_substring(const char *pointer)
  +void pcre_free_substring(const char *pointer)
   {
  -(pcre_free)((void *)pointer);
  +	(pcre_free) ((void *)pointer);
   }
   
  -/* ____ END get.c ____ */
  -
  -#endif /* !STR_PCRE_GENTAB */
  -
  -/* ____ BEGIN maketables.c ____ */
  -
  -/* This file is compiled on its own as part of the PCRE library. However,
  -it is also included in the compilation of dftables.c, in which case the macro
  -DFTABLES is defined. */
  -
  -/*************************************************
  -*           Create PCRE character tables         *
  -*************************************************/
  -
  -/* This function builds a set of character tables for use by PCRE and returns
  -a pointer to them. They are build using the ctype functions, and consequently
  -their contents will depend upon the current locale setting. When compiled as
  -part of the library, the store is obtained via pcre_malloc(), but when compiled
  -inside dftables, use malloc().
  -
  -Arguments:   none
  -Returns:     pointer to the contiguous block of data
  -*/
  +#endif
   
  -const unsigned char *
  -pcre_maketables(void)
  +const unsigned char *pcre_maketables(void)
   {
  -unsigned char *yield, *p;
  -int i;
  +	unsigned char *yield, *p;
  +	int i;
   
  -#ifndef STR_PCRE_GENTAB
  -yield = (unsigned char*)(pcre_malloc)(tables_length);
  +#ifndef STR_PCRE_TAB
  +	yield = (unsigned char *)(pcre_malloc) (tables_length);
   #else
  -yield = (unsigned char*)malloc(tables_length);
  +	yield = (unsigned char *)malloc(tables_length);
   #endif
   
  -if (yield == NULL) return NULL;
  -p = yield;
  -
  -/* First comes the lower casing table */
  -
  -for (i = 0; i < 256; i++) *p++ = tolower(i);
  -
  -/* Next the case-flipping table */
  +	if (yield == NULL)
  +		return NULL;
  +	p = yield;
  +
  +	for (i = 0; i < 256; i++)
  +		*p++ = tolower(i);
  +
  +	for (i = 0; i < 256; i++)
  +		*p++ = islower(i) ? toupper(i) : tolower(i);
  +
  +	memset(p, 0, cbit_length);
  +	for (i = 0; i < 256; i++) {
  +		if (isdigit(i)) {
  +			p[cbit_digit + i / 8] |= 1 << (i & 7);
  +			p[cbit_word + i / 8] |= 1 << (i & 7);
  +		}
  +		if (isupper(i)) {
  +			p[cbit_upper + i / 8] |= 1 << (i & 7);
  +			p[cbit_word + i / 8] |= 1 << (i & 7);
  +		}
  +		if (islower(i)) {
  +			p[cbit_lower + i / 8] |= 1 << (i & 7);
  +			p[cbit_word + i / 8] |= 1 << (i & 7);
  +		}
  +		if (i == '_')
  +			p[cbit_word + i / 8] |= 1 << (i & 7);
  +		if (isspace(i))
  +			p[cbit_space + i / 8] |= 1 << (i & 7);
  +		if (isxdigit(i))
  +			p[cbit_xdigit + i / 8] |= 1 << (i & 7);
  +		if (isgraph(i))
  +			p[cbit_graph + i / 8] |= 1 << (i & 7);
  +		if (isprint(i))
  +			p[cbit_print + i / 8] |= 1 << (i & 7);
  +		if (ispunct(i))
  +			p[cbit_punct + i / 8] |= 1 << (i & 7);
  +		if (iscntrl(i))
  +			p[cbit_cntrl + i / 8] |= 1 << (i & 7);
  +	}
  +	p += cbit_length;
  +
  +	for (i = 0; i < 256; i++) {
  +		int x = 0;
  +		if (isspace(i))
  +			x += ctype_space;
  +		if (isalpha(i))
  +			x += ctype_letter;
  +		if (isdigit(i))
  +			x += ctype_digit;
  +		if (isxdigit(i))
  +			x += ctype_xdigit;
  +		if (isalnum(i) || i == '_')
  +			x += ctype_word;
  +		if (strchr("*+?{^.$|()[", i) != 0)
  +			x += ctype_meta;
  +		*p++ = x;
  +	}
   
  -for (i = 0; i < 256; i++) *p++ = islower(i)? toupper(i) : tolower(i);
  -
  -/* Then the character class tables. Don't try to be clever and save effort
  -on exclusive ones - in some locales things may be different. */
  -
  -memset(p, 0, cbit_length);
  -for (i = 0; i < 256; i++)
  -  {
  -  if (isdigit(i))
  -    {
  -    p[cbit_digit  + i/8] |= 1 << (i&7);
  -    p[cbit_word   + i/8] |= 1 << (i&7);
  -    }
  -  if (isupper(i))
  -    {
  -    p[cbit_upper  + i/8] |= 1 << (i&7);
  -    p[cbit_word   + i/8] |= 1 << (i&7);
  -    }
  -  if (islower(i))
  -    {
  -    p[cbit_lower  + i/8] |= 1 << (i&7);
  -    p[cbit_word   + i/8] |= 1 << (i&7);
  -    }
  -  if (i == '_')   p[cbit_word   + i/8] |= 1 << (i&7);
  -  if (isspace(i)) p[cbit_space  + i/8] |= 1 << (i&7);
  -  if (isxdigit(i))p[cbit_xdigit + i/8] |= 1 << (i&7);
  -  if (isgraph(i)) p[cbit_graph  + i/8] |= 1 << (i&7);
  -  if (isprint(i)) p[cbit_print  + i/8] |= 1 << (i&7);
  -  if (ispunct(i)) p[cbit_punct  + i/8] |= 1 << (i&7);
  -  if (iscntrl(i)) p[cbit_cntrl  + i/8] |= 1 << (i&7);
  -  }
  -p += cbit_length;
  -
  -/* Finally, the character type table */
  -
  -for (i = 0; i < 256; i++)
  -  {
  -  int x = 0;
  -  if (isspace(i)) x += ctype_space;
  -  if (isalpha(i)) x += ctype_letter;
  -  if (isdigit(i)) x += ctype_digit;
  -  if (isxdigit(i)) x += ctype_xdigit;
  -  if (isalnum(i) || i == '_') x += ctype_word;
  -  if (strchr("*+?{^.$|()[", i) != 0) x += ctype_meta;
  -  *p++ = x;
  -  }
  -
  -return yield;
  +	return yield;
   }
   
  -/* ____ END maketables.c ____ */
  -
  -#ifdef STR_PCRE_GENTAB
  -
  -/* ____ BEGIN dftables.c ____ */
  -
  -/* This is a support program to generate the file chartables.c, containing
  -character tables of various kinds. They are built according to the default C
  -locale and used as the default tables by PCRE. Now that pcre_maketables is
  -a function visible to the outside world, we make use of its code from here in
  -order to be consistent. */
  +#ifdef STR_PCRE_TAB
   
   #include <ctype.h>
   #include <stdio.h>
  @@ -5757,94 +4199,78 @@
   
   int main(void)
   {
  -int i;
  -const unsigned char *tables = pcre_maketables();
  +	int i;
  +	const unsigned char *tables = pcre_maketables();
   
  -printf(
  -  "/*************************************************\n"
  -  "*      Perl-Compatible Regular Expressions       *\n"
  -  "*************************************************/\n\n"
  -  "static unsigned char pcre_default_tables[] = {\n\n"
  -  "/* This table is a lower casing table. */\n\n");
  -
  -printf("  ");
  -for (i = 0; i < 256; i++)
  -  {
  -  if ((i & 7) == 0 && i != 0) printf("\n  ");
  -  printf("%3d", *tables++);
  -  if (i != 255) printf(",");
  -  }
  -printf(",\n\n");
  -
  -printf("/* This table is a case flipping table. */\n\n");
  -
  -printf("  ");
  -for (i = 0; i < 256; i++)
  -  {
  -  if ((i & 7) == 0 && i != 0) printf("\n  ");
  -  printf("%3d", *tables++);
  -  if (i != 255) printf(",");
  -  }
  -printf(",\n\n");
  -
  -printf(
  -  "/* This table contains bit maps for various character classes.\n"
  -  "Each map is 32 bytes long and the bits run from the least\n"
  -  "significant end of each byte. The classes that have their own\n"
  -  "maps are: space, xdigit, digit, upper, lower, word, graph\n"
  -  "print, punct, and cntrl. Other classes are built from combinations. */\n\n");
  -
  -printf("  ");
  -for (i = 0; i < cbit_length; i++)
  -  {
  -  if ((i & 7) == 0 && i != 0)
  -    {
  -    if ((i & 31) == 0) printf("\n");
  -    printf("\n  ");
  -    }
  -  printf("0x%02x", *tables++);
  -  if (i != cbit_length - 1) printf(",");
  -  }
  -printf(",\n\n");
  -
  -printf(
  -  "/* This table identifies various classes of character by individual bits:\n"
  -  "  0x%02x   white space character\n"
  -  "  0x%02x   letter\n"
  -  "  0x%02x   decimal digit\n"
  -  "  0x%02x   hexadecimal digit\n"
  -  "  0x%02x   alphanumeric or '_'\n"
  -  "  0x%02x   regular expression metacharacter or binary zero\n*/\n\n",
  -  ctype_space, ctype_letter, ctype_digit, ctype_xdigit, ctype_word,
  -  ctype_meta);
  -
  -printf("  ");
  -for (i = 0; i < 256; i++)
  -  {
  -  if ((i & 7) == 0 && i != 0)
  -    {
  -    printf(" /* ");
  -    if (isprint(i-8)) printf(" %c -", i-8);
  -      else printf("%3d-", i-8);
  -    if (isprint(i-1)) printf(" %c ", i-1);
  -      else printf("%3d", i-1);
  -    printf(" */\n  ");
  -    }
  -  printf("0x%02x", *tables++);
  -  if (i != 255) printf(",");
  -  }
  -
  -printf("};/* ");
  -if (isprint(i-8)) printf(" %c -", i-8);
  -  else printf("%3d-", i-8);
  -if (isprint(i-1)) printf(" %c ", i-1);
  -  else printf("%3d", i-1);
  -printf(" */\n\n\n");
  +	printf("/*************************************************\n"
  +		   "*      Perl-Compatible Regular Expressions       *\n"
  +		   "*************************************************/\n\n"
  +		   "static unsigned char pcre_default_tables[] = {\n\n"
  +		   "/* This table is a lower casing table. */\n\n");
  +
  +	printf("  ");
  +	for (i = 0; i < 256; i++) {
  +		if ((i & 7) == 0 && i != 0)
  +			printf("\n  ");
  +		printf("%3d", *tables++);
  +		if (i != 255)
  +			printf(",");
  +	}
  +	printf(",\n\n");
  +
  +	printf("/* This table is a case flipping table. */\n\n");
  +
  +	printf("  ");
  +	for (i = 0; i < 256; i++) {
  +		if ((i & 7) == 0 && i != 0)
  +			printf("\n  ");
  +		printf("%3d", *tables++);
  +		if (i != 255)
  +			printf(",");
  +	}
  +	printf(",\n\n");
  +
  +	printf("/* This table contains bit maps for various character classes.\n"
  +		   "Each map is 32 bytes long and the bits run from the least\n"
  +		   "significant end of each byte. The classes that have their own\n"
  +		   "maps are: space, xdigit, digit, upper, lower, word, graph\n"
  +		   "print, punct, and cntrl. Other classes are built from combinations. */\n\n");
  +
  +	printf("  ");
  +	for (i = 0; i < cbit_length; i++) {
  +		if ((i & 7) == 0 && i != 0) {
  +			if ((i & 31) == 0)
  +				printf("\n");
  +			printf("\n  ");
  +		}
  +		printf("0x%02x", *tables++);
  +		if (i != cbit_length - 1)
  +			printf(",");
  +	}
  +	printf(",\n\n");
  +
  +	printf
  +		("/* This table identifies various classes of character by individual bits:\n"
  +		 "  0x%02x   white space character\n" "  0x%02x   letter\n"
  +		 "  0x%02x   decimal digit\n" "  0x%02x   hexadecimal digit\n"
  +		 "  0x%02x   alphanumeric or '_'\n"
  +		 "  0x%02x   regular expression metacharacter or binary zero\n*/\n\n",
  +		 ctype_space, ctype_letter, ctype_digit, ctype_xdigit, ctype_word,
  +		 ctype_meta);
  +
  +	printf("  ");
  +	for (i = 0; i < 256; i++) {
  +		if ((i & 7) == 0 && i != 0) {
  +			printf(" \n  ");
  +		}
  +		printf("0x%02x", *tables++);
  +		if (i != 255)
  +			printf(",");
  +	}
   
  -return 0;
  -}
  +	printf("};\n\n\n");
   
  -/* ____ END dftables.c ____ */
  -
  -#endif /* STR_PCRE_GENTAB */
  +	return 0;
  +}
   
  +#endif
  Index: ossp-pkg/str/str_pcre.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 str_pcre.h
  --- ossp-pkg/str/str_pcre.h	16 Aug 2001 12:04:25 -0000	1.2
  +++ ossp-pkg/str/str_pcre.h	27 Dec 2001 12:24:20 -0000	1.3
  @@ -1,6 +1,16 @@
  -/*************************************************
  -*      Perl-Compatible Regular Expressions       *
  -*************************************************/
  +/*
  + *  Perl Compatible Regular Expression (PCRE) Library
  + *  Copyright (c) 1997-2001 Philip Hazel <ph10@cam.ac.uk>
  + *  Copyright (c) 1997-2001 University of Cambridge
  + *
  + *  DO NOT EDIT THIS FILE, IT WAS AUTOMATICALLY GENERATED!
  + *
  + *  This is an automatically generated, extremely stripped down
  + *  version of the PCRE 3.8 library from the Philip Hazel.
  + *  This version is still distributed under the same original PCRE
  + *  Open Source license, but Philip Hazel is no longer responsible
  + *  for this version.
  + */
   
   /*
   This is a library of functions to support regular expressions whose syntax
  @@ -35,26 +45,42 @@
   #ifndef __STR_PCRE_H__
   #define __STR_PCRE_H__
   
  -/* The file pcre.h is build by "configure". Do not edit it; instead
  -make changes to pcre.in. */
  +#define PCRE_PREFIX str_
   
   #define PCRE_MAJOR          3
  -#define PCRE_MINOR          5
  -#define PCRE_DATE           15-Aug-2001
  +#define PCRE_MINOR          8
  +#define PCRE_DATE           18-Dec-2001
   
  -/* Have to include stdlib.h in order to ensure that size_t is defined;
  -it is needed here for malloc. */
  +#ifdef PCRE_PREFIX
  +#if defined(__STDC__) || defined(__cplusplus)
  +#define __PCRE_CONCAT(x,y) x ## y
  +#define PCRE_CONCAT(x,y) __PCRE_CONCAT(x,y)
  +#else
  +#define __PCRE_CONCAT(x) x
  +#define PCRE_CONCAT(x,y) __PCRE_CONCAT(x)y
  +#endif
  +#define pcre_malloc PCRE_CONCAT(PCRE_PREFIX,pcre_malloc)
  +#define pcre_free PCRE_CONCAT(PCRE_PREFIX,pcre_free)
  +#define pcre_compile PCRE_CONCAT(PCRE_PREFIX,pcre_compile)
  +#define pcre_copy_substring PCRE_CONCAT(PCRE_PREFIX,pcre_copy_substring)
  +#define pcre_exec PCRE_CONCAT(PCRE_PREFIX,pcre_exec)
  +#define pcre_free_substring PCRE_CONCAT(PCRE_PREFIX,pcre_free_substring)
  +#define pcre_free_substring_list PCRE_CONCAT(PCRE_PREFIX,pcre_free_substring_list)
  +#define pcre_get_substring PCRE_CONCAT(PCRE_PREFIX,pcre_get_substring)
  +#define pcre_get_substring_list PCRE_CONCAT(PCRE_PREFIX,pcre_get_substring_list)
  +#define pcre_info PCRE_CONCAT(PCRE_PREFIX,pcre_info)
  +#define pcre_fullinfo PCRE_CONCAT(PCRE_PREFIX,pcre_fullinfo)
  +#define pcre_maketables PCRE_CONCAT(PCRE_PREFIX,pcre_maketables)
  +#define pcre_study PCRE_CONCAT(PCRE_PREFIX,pcre_study)
  +#define pcre_version PCRE_CONCAT(PCRE_PREFIX,pcre_version)
  +#endif
   
   #include <stdlib.h>
   
  -/* Allow for C++ users */
  -
   #ifdef __cplusplus
   extern "C" {
   #endif
   
  -/* Options */
  -
   #define PCRE_CASELESS        0x0001
   #define PCRE_MULTILINE       0x0002
   #define PCRE_DOTALL          0x0004
  @@ -68,8 +94,6 @@
   #define PCRE_NOTEMPTY        0x0400
   #define PCRE_UTF8            0x0800
   
  -/* Exec-time and get-time error codes */
  -
   #define PCRE_ERROR_NOMATCH        (-1)
   #define PCRE_ERROR_NULL           (-2)
   #define PCRE_ERROR_BADOPTION      (-3)
  @@ -78,8 +102,6 @@
   #define PCRE_ERROR_NOMEMORY       (-6)
   #define PCRE_ERROR_NOSUBSTRING    (-7)
   
  -/* Request types for pcre_fullinfo() */
  -
   #define PCRE_INFO_OPTIONS         0
   #define PCRE_INFO_SIZE            1
   #define PCRE_INFO_CAPTURECOUNT    2
  @@ -88,23 +110,15 @@
   #define PCRE_INFO_FIRSTTABLE      5
   #define PCRE_INFO_LASTLITERAL     6
   
  -/* Types */
  -
  -struct real_pcre;        /* declaration; the definition is private  */
  -struct real_pcre_extra;  /* declaration; the definition is private */
  -
  -typedef struct real_pcre pcre;
  -typedef struct real_pcre_extra pcre_extra;
  +struct pcre_st;
  +struct pcre_extra_st;
   
  -/* Store get and free functions. These can be set to alternative malloc/free
  -functions if required. Some magic is required for Win32 DLL; it is null on
  -other OS. */
  +typedef struct pcre_st pcre;
  +typedef struct pcre_extra_st pcre_extra;
   
   extern void *(*pcre_malloc)(size_t);
   extern void  (*pcre_free)(void *);
   
  -/* Functions */
  -
   extern pcre *pcre_compile(const char *, int, const char **, int *,
                 const unsigned char *);
   extern int  pcre_copy_substring(const char *, int *, int, int, char *, int);
  @@ -121,7 +135,7 @@
   extern const char *pcre_version(void);
   
   #ifdef __cplusplus
  -}  /* extern "C" */
  +}
   #endif
   
  -#endif /* __STR_PCRE_H__ */
  +#endif

From ossp-cvs-owner@ossp.org  Thu Dec 27 13:25:38 2001
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DBEE3764D1; Thu, 27 Dec 2001 13:25:37 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str str.pod
Message-Id: <20011227122537.DBEE3764D1@mail.ossp.org>
Date: Thu, 27 Dec 2001 13:25:37 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   27-Dec-2001 13:25:37
  Branch: HEAD                             Handle: 2001122712253700

  Modified files:
    ossp-pkg/str            str.pod

  Log:
    reflect latest change

  Summary:
    Revision    Changes     Path
    1.30        +1  -1      ossp-pkg/str/str.pod
  ____________________________________________________________________________

  Index: ossp-pkg/str/str.pod
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 str.pod
  --- ossp-pkg/str/str.pod	1 Dec 2001 12:35:59 -0000	1.29
  +++ ossp-pkg/str/str.pod	27 Dec 2001 12:25:37 -0000	1.30
  @@ -758,7 +758,7 @@
   flavor from William Deich 1991 was cleaned up and adjusted. As the
   background parsing engine for str_parse(3) a heavily stripped down
   version of Philip Hazel's Perl Compatible Regular Expression (PCRE)
  -library (initially version 2.08 and now 3.5) was used. The str_format(3)
  +library (initially version 2.08 and now 3.8) was used. The str_format(3)
   implementation was based on Panos Tsirigotis' sprintf(3) code as
   adjusted by the Apache Software Foundation (ASF) 1998. The formatting
   engine was stripped down and enhanced to support internal extensions

From ossp-cvs-owner@ossp.org  Mon Dec 31 11:23:10 2001
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CC22E764D1; Mon, 31 Dec 2001 11:23:09 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp autogen.sh
Message-Id: <20011231102309.CC22E764D1@mail.ossp.org>
Date: Mon, 31 Dec 2001 11:23:09 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Dec-2001 11:23:09
  Branch: HEAD                             Handle: 2001123110230900

  Modified files:
    ossp-pkg/lmtp2nntp      autogen.sh

  Log:
    fix autogen.sh to reflect recent str changes

  Summary:
    Revision    Changes     Path
    1.10        +1  -1      ossp-pkg/lmtp2nntp/autogen.sh
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/autogen.sh
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 autogen.sh
  --- ossp-pkg/lmtp2nntp/autogen.sh	11 Dec 2001 12:02:26 -0000	1.9
  +++ ossp-pkg/lmtp2nntp/autogen.sh	31 Dec 2001 10:23:09 -0000	1.10
  @@ -65,7 +65,7 @@
   
   #   perform same operation in subdirs
   echo "===> str (autogen.sh)"
  -(cd str && ./autogen.sh)
  +(cd str && ./devtool autogen)
   echo "<=== str"
   echo "===> l2 (devtool)"
   (cd l2 && ./devtool autogen)

From ossp-cvs-owner@ossp.org  Mon Dec 31 11:23:11 2001
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 23496764F6; Mon, 31 Dec 2001 11:23:11 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str ChangeLog
Message-Id: <20011231102311.23496764F6@mail.ossp.org>
Date: Mon, 31 Dec 2001 11:23:11 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Dec-2001 11:23:11
  Branch: HEAD                             Handle: 2001123110231000

  Modified files:
    ossp-pkg/str            ChangeLog

  Log:
    remember changes

  Summary:
    Revision    Changes     Path
    1.36        +7  -1      ossp-pkg/str/ChangeLog
  ____________________________________________________________________________

  Index: ossp-pkg/str/ChangeLog
  ============================================================
  $ cvs diff -u -r1.35 -r1.36 ChangeLog
  --- ossp-pkg/str/ChangeLog	13 Sep 2001 14:07:03 -0000	1.35
  +++ ossp-pkg/str/ChangeLog	31 Dec 2001 10:23:10 -0000	1.36
  @@ -9,7 +9,13 @@
   
    ChangeLog
   
  - Changes between 0.9.5 and 0.9.6 (16-Aug-2001 to 13-Sep-2001):
  + Changes between 0.9.5 and 0.9.6 (16-Aug-2001 to 28-Dec-2001):
  +
  +   *) Switched to devtool stuff
  +      [Ralf S. Engelschall]
  +
  +   *) Upgraded to PCRE 3.8
  +      [Ralf S. Engelschall]
   
      *) Fixed "str-config --version"
         [Ralf S. Engelschall]

From ossp-cvs-owner@ossp.org  Mon Dec 31 12:09:57 2001
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CA574764D1; Mon, 31 Dec 2001 12:09:55 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp Makefile.in README argz.c argz.h autoge...
Message-Id: <20011231110955.CA574764D1@mail.ossp.org>
Date: Mon, 31 Dec 2001 12:09:55 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Dec-2001 12:09:55
  Branch: HEAD                             Handle: 197001010100001009793393

  Added files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_argz.c lmtp2nntp_argz.h
                            lmtp2nntp_daemon.c lmtp2nntp_daemon.h
                            lmtp2nntp_dotconf.c lmtp2nntp_dotconf.h
                            lmtp2nntp_global.h lmtp2nntp_lmtp.c
                            lmtp2nntp_lmtp.h lmtp2nntp_main.c lmtp2nntp_msg.c
                            lmtp2nntp_msg.h lmtp2nntp_nntp.c lmtp2nntp_nntp.h
                            lmtp2nntp_shpat.c lmtp2nntp_shpat.h
                            lmtp2nntp_version.c
  Modified files:
    ossp-pkg/lmtp2nntp      Makefile.in README autogen.sh configure.ac
  Removed files:
    ossp-pkg/lmtp2nntp      argz.c argz.h daemon.c daemon.h lmtp.c lmtp.h
                            lmtp2nntp.c lmtp2nntp.h msg.c msg.h nntp.c nntp.h
                            shpat_match.c shpat_match.h version.c

  Log:
    Mega-Commit: Finally restructure the lmtp2nntp source tree in order to clean
    it up. We especially use a consistent prefix for all inlined sources.

  Summary:
    Revision    Changes     Path
    1.31        +8  -16     ossp-pkg/lmtp2nntp/Makefile.in
    1.15        +1  -1      ossp-pkg/lmtp2nntp/README
    NONE        +0  -429    ossp-pkg/lmtp2nntp/argz.c
    NONE        +0  -66     ossp-pkg/lmtp2nntp/argz.h
    1.11        +12 -12     ossp-pkg/lmtp2nntp/autogen.sh
    1.17        +18 -18     ossp-pkg/lmtp2nntp/configure.ac
    NONE        +0  -122    ossp-pkg/lmtp2nntp/daemon.c
    NONE        +0  -6      ossp-pkg/lmtp2nntp/daemon.h
    NONE        +0  -490    ossp-pkg/lmtp2nntp/lmtp.c
    NONE        +0  -85     ossp-pkg/lmtp2nntp/lmtp.h
    NONE        +0  -2373   ossp-pkg/lmtp2nntp/lmtp2nntp.c
    NONE        +0  -52     ossp-pkg/lmtp2nntp/lmtp2nntp.h
    1.1         +429 -0     ossp-pkg/lmtp2nntp/lmtp2nntp_argz.c
    1.1         +66 -0      ossp-pkg/lmtp2nntp/lmtp2nntp_argz.h
    1.1         +122 -0     ossp-pkg/lmtp2nntp/lmtp2nntp_daemon.c
    1.1         +6  -0      ossp-pkg/lmtp2nntp/lmtp2nntp_daemon.h
    1.1         +1311 -0    ossp-pkg/lmtp2nntp/lmtp2nntp_dotconf.c
    1.1         +262 -0     ossp-pkg/lmtp2nntp/lmtp2nntp_dotconf.h
    1.1         +52 -0      ossp-pkg/lmtp2nntp/lmtp2nntp_global.h
    1.1         +490 -0     ossp-pkg/lmtp2nntp/lmtp2nntp_lmtp.c
    1.1         +85 -0      ossp-pkg/lmtp2nntp/lmtp2nntp_lmtp.h
    1.1         +2375 -0    ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
    1.1         +460 -0     ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
    1.1         +79 -0      ossp-pkg/lmtp2nntp/lmtp2nntp_msg.h
    1.1         +441 -0     ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.c
    1.1         +76 -0      ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.h
    1.1         +286 -0     ossp-pkg/lmtp2nntp/lmtp2nntp_shpat.c
    1.1         +84 -0      ossp-pkg/lmtp2nntp/lmtp2nntp_shpat.h
    1.1         +0  -0      ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
    NONE        +0  -459    ossp-pkg/lmtp2nntp/msg.c
    NONE        +0  -77     ossp-pkg/lmtp2nntp/msg.h
    NONE        +0  -441    ossp-pkg/lmtp2nntp/nntp.c
    NONE        +0  -75     ossp-pkg/lmtp2nntp/nntp.h
    NONE        +0  -286    ossp-pkg/lmtp2nntp/shpat_match.c
    NONE        +0  -84     ossp-pkg/lmtp2nntp/shpat_match.h
    NONE        +0  -46     ossp-pkg/lmtp2nntp/version.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	11 Dec 2001 12:02:26 -0000	1.30
  +++ ossp-pkg/lmtp2nntp/Makefile.in	31 Dec 2001 11:09:52 -0000	1.31
  @@ -44,9 +44,9 @@
   POD2MAN     = pod2man
   
   PROG = lmtp2nntp
  -HDRS = lmtp2nntp.h daemon.h lmtp.h nntp.h argz.h shpat_match.h msg.h 
  -SRCS = lmtp2nntp.c daemon.c lmtp.c nntp.c argz.c shpat_match.c msg.c version.c
  -OBJS = lmtp2nntp.o daemon.o lmtp.o nntp.o argz.o shpat_match.o msg.o version.o
  +HDRS = lmtp2nntp_global.h lmtp2nntp_daemon.h lmtp2nntp_lmtp.h lmtp2nntp_nntp.h lmtp2nntp_argz.h lmtp2nntp_shpat.h lmtp2nntp_msg.h 
  +SRCS = lmtp2nntp_main.c lmtp2nntp_daemon.c lmtp2nntp_lmtp.c lmtp2nntp_nntp.c lmtp2nntp_argz.c lmtp2nntp_shpat.c lmtp2nntp_msg.c lmtp2nntp_version.c
  +OBJS = lmtp2nntp_main.o lmtp2nntp_daemon.o lmtp2nntp_lmtp.o lmtp2nntp_nntp.o lmtp2nntp_argz.o lmtp2nntp_shpat.o lmtp2nntp_msg.o lmtp2nntp_version.o
   
   SUBDIRS = @SUBDIR_STR@ @SUBDIR_L2@ @SUBDIR_SA@ @SUBDIR_VAR@
   
  @@ -77,8 +77,8 @@
   	$(CC) $(LDFLAGS) -o $(PROG) $(OBJS) $(LIBS)
   
   lmtp2nntp.8: lmtp2nntp.pod
  -	VS=`$(SHTOOL) version -lc -dshort version.c`; \
  -	VL=`$(SHTOOL) version -lc -dlong version.c`; \
  +	VS=`$(SHTOOL) version -lc -dshort lmtp2nntp_version.c`; \
  +	VL=`$(SHTOOL) version -lc -dlong lmtp2nntp_version.c`; \
   	$(POD2MAN) --section=8 --center="mail to news gateway" \
                  --release="$$VS" --date="$$VL" \
                  lmtp2nntp.pod >lmtp2nntp.8
  @@ -111,13 +111,13 @@
   	-rm -f shtool
   
   new-version:
  -	@$(SHTOOL) version -lc -n lmtp2nntp -p lmtp2nntp_ -e version.c; \
  -	V=`$(SHTOOL) version -lc -dlong version.c`; \
  +	@$(SHTOOL) version -lc -n lmtp2nntp -p lmtp2nntp_ -e lmtp2nntp_version.c; \
  +	V=`$(SHTOOL) version -lc -dlong lmtp2nntp_version.c`; \
   	sed -e "s/Version .*(.*)/Version $$V/g" <README >README.n && mv README.n README
   
   dist: distclean
   	@$(SHTOOL) fixperm -v .; \
  -	V=`$(SHTOOL) version -lc -dshort version.c`; \
  +	V=`$(SHTOOL) version -lc -dshort lmtp2nntp_version.c`; \
   	$(SHTOOL) tarball -o lmtp2nntp-$${V}.tar.gz -d lmtp2nntp-$${V} -u ossp -g ossp \
   	                  -e 'CVS,\.cvsignore,\.[ao],^\.,/\.,autogen.sh,*.tar.gz,*.bak,TODO' -c 'gzip --best' .
   
  @@ -138,11 +138,3 @@
   $(OBJS): Makefile
   
   #   AUTOMATICALLY GENERATED DEPENDENCY LIST - DO NOT EDIT
  -lmtp2nntp.o: lmtp2nntp.c argz.h shpat_match.h daemon.h lmtp2nntp.h config.h lmtp.h nntp.h msg.h version.c
  -daemon.o: daemon.c config.h daemon.h
  -lmtp.o: lmtp.c lmtp.h config.h
  -nntp.o: nntp.c nntp.h msg.h lmtp2nntp.h config.h
  -argz.o: argz.c argz.h config.h
  -shpat_match.o: shpat_match.c config.h shpat_match.h
  -msg.o: msg.c msg.h lmtp2nntp.h config.h argz.h
  -version.o: version.c version.c
  Index: ossp-pkg/lmtp2nntp/README
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 README
  --- ossp-pkg/lmtp2nntp/README	11 Dec 2001 11:53:11 -0000	1.14
  +++ ossp-pkg/lmtp2nntp/README	31 Dec 2001 11:09:52 -0000	1.15
  @@ -7,7 +7,7 @@
                     |_|                        |_|    
   
     OSSP lmtp2nntp - Mail to News Gateway
  -  Version 1.2a1 (06-Dec-2001)
  +  Version 1.2a2 (31-Dec-2001)
   
     ABSTRACT
   
      Index: ossp-pkg/lmtp2nntp/autogen.sh
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 autogen.sh
  --- ossp-pkg/lmtp2nntp/autogen.sh	31 Dec 2001 10:23:09 -0000	1.10
  +++ ossp-pkg/lmtp2nntp/autogen.sh	31 Dec 2001 11:09:52 -0000	1.11
  @@ -64,16 +64,16 @@
   shtoolize -q all
   
   #   perform same operation in subdirs
  -echo "===> str (autogen.sh)"
  -(cd str && ./devtool autogen)
  -echo "<=== str"
  -echo "===> l2 (devtool)"
  -(cd l2 && ./devtool autogen)
  -echo "<=== l2"
  -echo "===> sa (devtool)"
  -(cd sa && ./devtool autogen)
  -echo "<=== sa"
  -echo "===> var (devtool)"
  -(cd var && ./devtool autogen)
  -echo "<=== var"
  +echo "===> lib_str (autogen.sh)"
  +(cd lib_str && ./devtool autogen)
  +echo "<=== lib_str"
  +echo "===> lib_l2 (devtool)"
  +(cd lib_l2 && ./devtool autogen)
  +echo "<=== lib_l2"
  +echo "===> lib_sa (devtool)"
  +(cd lib_sa && ./devtool autogen)
  +echo "<=== lib_sa"
  +echo "===> lib_var (devtool)"
  +(cd lib_var && ./devtool autogen)
  +echo "<=== lib_var"
   
  Index: ossp-pkg/lmtp2nntp/configure.ac
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 configure.ac
  --- ossp-pkg/lmtp2nntp/configure.ac	11 Dec 2001 12:02:26 -0000	1.16
  +++ ossp-pkg/lmtp2nntp/configure.ac	31 Dec 2001 11:09:52 -0000	1.17
  @@ -27,7 +27,7 @@
   dnl #   standard preamble
   AC_PREREQ(2.52)
   AC_REVISION(1.0)
  -AC_INIT(lmtp2nntp.c)
  +AC_INIT(lmtp2nntp_main.c)
   
   dnl #   announce our version
   AC_DIVERT_PUSH(NOTICE)
  @@ -52,10 +52,10 @@
   AC_CHECK_EXTLIB([OSSP Str], 
                   str, str_parse, str.h, 
                   [SUBDIR_STR=""], 
  -                [SUBDIR_STR="str"
  -                 CPPFLAGS="$CPPFLAGS -Istr"
  -                 CFLAGS="$CFLAGS -Istr"
  -                 LDFLAGS="$LDFLAGS -Lstr/.libs"
  +                [SUBDIR_STR="lib_str"
  +                 CPPFLAGS="$CPPFLAGS -Ilib_str"
  +                 CFLAGS="$CFLAGS -Ilib_str"
  +                 LDFLAGS="$LDFLAGS -Llib_str/.libs"
                    LIBS_EXTRA="$LIBS_EXTRA -lstr"])
   AC_SUBST(SUBDIR_STR)
   
  @@ -63,10 +63,10 @@
   AC_CHECK_EXTLIB([OSSP L2], 
                   l2, l2_stream_log, l2.h, 
                   [SUBDIR_L2=""], 
  -                [SUBDIR_L2="l2"
  -                 CPPFLAGS="$CPPFLAGS -Il2"
  -                 CFLAGS="$CFLAGS -Il2"
  -                 LDFLAGS="$LDFLAGS -Ll2/.libs"
  +                [SUBDIR_L2="lib_l2"
  +                 CPPFLAGS="$CPPFLAGS -Ilib_l2"
  +                 CFLAGS="$CFLAGS -Ilib_l2"
  +                 LDFLAGS="$LDFLAGS -Llib_l2/.libs"
                    LIBS_EXTRA="$LIBS_EXTRA -ll2"])
   AC_SUBST(SUBDIR_L2)
   
  @@ -74,21 +74,21 @@
   AC_CHECK_EXTLIB([OSSP SA], 
                   sa, sa_create, sa.h, 
                   [SUBDIR_SA=""], 
  -                [SUBDIR_SA="sa"
  -                 CPPFLAGS="$CPPFLAGS -Isa"
  -                 CFLAGS="$CFLAGS -Isa"
  -                 LDFLAGS="$LDFLAGS -Lsa/.libs"
  +                [SUBDIR_SA="lib_sa"
  +                 CPPFLAGS="$CPPFLAGS -Ilib_sa"
  +                 CFLAGS="$CFLAGS -Ilib_sa"
  +                 LDFLAGS="$LDFLAGS -Llib_sa/.libs"
                    LIBS_EXTRA="$LIBS_EXTRA -lsa"])
   AC_SUBST(SUBDIR_SA)
   
   dnl #   check for VAR library
  -AC_CHECK_EXTLIB([OSSP VAR], 
  +AC_CHECK_EXTLIB([OSSP Var], 
                   var, var_expand, var.h, 
                   [SUBDIR_VAR=""], 
  -                [SUBDIR_VAR="var"
  -                 CPPFLAGS="$CPPFLAGS -Ivar"
  -                 CFLAGS="$CFLAGS -Ivar"
  -                 LDFLAGS="$LDFLAGS -Lvar/.libs"
  +                [SUBDIR_VAR="lib_var"
  +                 CPPFLAGS="$CPPFLAGS -Ilib_var"
  +                 CFLAGS="$CFLAGS -Ilib_var"
  +                 LDFLAGS="$LDFLAGS -Llib_var/.libs"
                    LIBS_EXTRA="$LIBS_EXTRA -lvar"])
   AC_SUBST(SUBDIR_VAR)
   
              Index: ossp-pkg/lmtp2nntp/lmtp2nntp_argz.c
  ============================================================
  $ cvs update -p -r1.1 lmtp2nntp_argz.c
  /*
  **  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  **  mailer which forwards mails as Usenet news articles via NNTP.
  **  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  **
  **  This program is free software; you can redistribute it and/or
  **  modify it under the terms of the GNU General Public  License
  **  as published by the Free Software Foundation; either version
  **  2.0 of the License, or (at your option) any later version.
  **
  **  This program is distributed in the hope that it will be useful,
  **  but WITHOUT ANY WARRANTY; without even the implied warranty of
  **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  **  General Public License for more details.
  **
  **  You should have received a copy of the GNU General Public License
  **  along with this file; if not, write to the Free Software
  **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  **  USA, or contact the OSSP project <ossp@ossp.org>.
  **
  **  argz.h: Zero-Terminated Argument Vector library
  */
  
  /* Routines for dealing with '\0' separated arg vectors.
     Copyright (C) 1996, 1997 Free Software Foundation, Inc.
     This file is part of the GNU C Library.
     Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1996.
  
     The GNU C Library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Library General Public License as
     published by the Free Software Foundation; either version 2 of the
     License, or (at your option) any later version.
  
     The GNU C Library is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     Library General Public License for more details.
  
     You should have received a copy of the GNU Library General Public
     License along with the GNU C Library; see the file COPYING.LIB.  If not,
     write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
     Boston, MA 02111-1307, USA.  */
  
  #include <errno.h>
  #include <stdlib.h>
  #include <string.h>
  
  #include "lmtp2nntp_argz.h"
  
  #ifdef HAVE_CONFIG_H
  #include "config.h"
  #endif
  #if defined(HAVE_DMALLOC_H) && defined(DMALLOC)
  #include "dmalloc.h"
  #endif
  
  /* Find the length of STRING, but scan at most MAXLEN characters.
     If no '\0' terminator is found in that many characters, return MAXLEN.  */
  static size_t my_strnlen(const char *string, size_t maxlen)
  {
      const char *end = memchr(string, '\0', maxlen);
      return end ? (size_t) (end - string) : maxlen;
  }
  
  static char *my_strndup(const char *s, size_t n)
  {
      size_t len = my_strnlen(s, n);
      char *new = malloc(len + 1);
  
      if (new == NULL)
          return NULL;
      new[len] = '\0';
      return (char *)memcpy(new, s, len);
  }
  
  /* Copy SRC to DEST, returning the address of the terminating '\0' in DEST. */
  static char *my_stpcpy(char *dest, const char *src)
  {
      register char *d = dest;
      register const char *s = src;
  
      do {
        *d++ = *s;
      } while (*s++ != '\0');
      return d - 1;
  }
  
  int argz_add_sep(char **argz, size_t * argz_len, const char *string, int delim)
  {
  	size_t nlen = strlen(string) + 1;
  
  	if (nlen > 1) {
  		const char *rp;
  		char *wp;
  
  		*argz = (char *)realloc(*argz, *argz_len + nlen);
  		if (*argz == NULL)
  			return ENOMEM;
  
  		wp = *argz + *argz_len;
  		rp = string;
  		do {
  			if (*rp == delim) {
  				if (wp > *argz && wp[-1] != '\0')
  					*wp++ = '\0';
  				else
  					--nlen;
  			}
  			else
  				*wp++ = *rp;
  		} while (*rp++ != '\0');
  
  		*argz_len += nlen;
  	}
  
  	return 0;
  }
  
  /* Add BUF, of length BUF_LEN to the argz vector in ARGZ & ARGZ_LEN.  */
  int argz_append(char **argz, size_t * argz_len, const char *buf, size_t buf_len)
  {
  	size_t new_argz_len = *argz_len + buf_len;
  	char *new_argz = realloc(*argz, new_argz_len);
  	if (new_argz) {
  		memcpy(new_argz + *argz_len, buf, buf_len);
  		*argz = new_argz;
  		*argz_len = new_argz_len;
  		return 0;
  	}
  	else
  		return ENOMEM;
  }
  
  /* Add STR to the argz vector in ARGZ & ARGZ_LEN.  This should be moved into
   * argz.c in libshouldbelibc.  */
  int argz_add(char **argz, size_t * argz_len, const char *str)
  {
  	return argz_append(argz, argz_len, str, strlen(str) + 1);
  }
  
  /* Returns the number of strings in ARGZ.  */
  size_t argz_count(const char *argz, size_t len)
  {
  	size_t count = 0;
  	while (len > 0) {
  		size_t part_len = strlen(argz);
  		argz += part_len + 1;
  		len -= part_len + 1;
  		count++;
  	}
  	return count;
  }
  
  /* Make a '\0' separated arg vector from a unix argv vector, returning it in
   * ARGZ, and the total length in LEN.  If a memory allocation error occurs,
   * ENOMEM is returned, otherwise 0.  */
  int argz_create(char *const argv[], char **argz, size_t * len)
  {
  	int argc;
  	size_t tlen = 0;
  	char *const *ap;
  	char *p;
  
  	for (argc = 0; argv[argc] != NULL; ++argc)
  		tlen += strlen(argv[argc]) + 1;
  
  	if (tlen == 0)
  		*argz = NULL;
  	else {
  		*argz = malloc(tlen);
  		if (*argz == NULL)
  			return ENOMEM;
  
  		for (p = *argz, ap = argv; *ap; ++ap, ++p)
  			p = my_stpcpy(p, *ap);
  	}
  	*len = tlen;
  
  	return 0;
  }
  
  int argz_create_sep(const char *string, int delim, char **argz, size_t * len)
  {
  	size_t nlen = strlen(string) + 1;
  
  	if (nlen > 1) {
  		const char *rp;
  		char *wp;
  
  		*argz = (char *)malloc(nlen);
  		if (*argz == NULL)
  			return ENOMEM;
  
  		rp = string;
  		wp = *argz;
  		do
  			if (*rp == delim) {
  				if (wp > *argz && wp[-1] != '\0')
  					*wp++ = '\0';
  				else
  					--nlen;
  			}
  			else
  				*wp++ = *rp;
  		while (*rp++ != '\0');
  
  		if (nlen == 0) {
  			free(*argz);
  			*argz = NULL;
  			*len = 0;
  		}
  
  		*len = nlen;
  	}
  	else {
  		*argz = NULL;
  		*len = 0;
  	}
  
  	return 0;
  }
  
  /* Delete ENTRY from ARGZ & ARGZ_LEN, if any.  */
  void argz_delete(char **argz, size_t * argz_len, char *entry)
  {
  	if (entry)
  		/* Get rid of the old value for NAME.  */
  	{
  		size_t entry_len = strlen(entry) + 1;
  		*argz_len -= entry_len;
  		memmove(entry, entry + entry_len, *argz_len - (entry - *argz));
  		if (*argz_len == 0) {
  			free(*argz);
  			*argz = 0;
  		}
  	}
  }
  
  /* Puts pointers to each string in ARGZ, plus a terminating 0 element, into
   * ARGV, which must be large enough to hold them all.  */
  void argz_extract(const char *argz, size_t len, char **argv)
  {
  	while (len > 0) {
  		size_t part_len = strlen(argz);
  		*argv++ = (char *)argz;
  		argz += part_len + 1;
  		len -= part_len + 1;
  	}
  	*argv = 0;
  }
  
  /* Insert ENTRY into ARGZ & ARGZ_LEN before BEFORE, which should be an
   * existing entry in ARGZ; if BEFORE is NULL, ENTRY is appended to the end.
   * Since ARGZ's first entry is the same as ARGZ, argz_insert (ARGZ, ARGZ_LEN,
   * ARGZ, ENTRY) will insert ENTRY at the beginning of ARGZ.  If BEFORE is not
   * in ARGZ, EINVAL is returned, else if memory can't be allocated for the new
   * ARGZ, ENOMEM is returned, else 0.  */
  int argz_insert(char **argz, size_t * argz_len, char *before, const char *entry)
  {
  	if (!before)
  		return argz_add(argz, argz_len, entry);
  
  	if (before < *argz || before >= *argz + *argz_len)
  		return EINVAL;
  
  	if (before > *argz)
  		/* Make sure before is actually the beginning of an entry.  */
  		while (before[-1])
  			before--;
  
  	{
  		size_t after_before = *argz_len - (before - *argz);
  		size_t entry_len = strlen(entry) + 1;
  		size_t new_argz_len = *argz_len + entry_len;
  		char *new_argz = realloc(*argz, new_argz_len);
  
  		if (new_argz) {
  			before = new_argz + (before - *argz);
  			memmove(before + entry_len, before, after_before);
  			memmove(before, entry, entry_len);
  			*argz = new_argz;
  			*argz_len = new_argz_len;
  			return 0;
  		}
  		else
  			return ENOMEM;
  	}
  }
  
  char *argz_next(const char *argz, size_t argz_len, const char *entry)
  {
  	if (entry) {
  		if (entry < argz + argz_len)
  			entry = strchr(entry, '\0') + 1;
  
  		return entry >= argz + argz_len ? NULL : (char *)entry;
  	}
  	else if (argz_len > 0)
  		return (char *)argz;
  	else
  		return NULL;
  }
  
  /* Append BUF, of length BUF_LEN to *TO, of length *TO_LEN, reallocating and
   * updating *TO & *TO_LEN appropriately.  If an allocation error occurs,
   * *TO's old value is freed, and *TO is set to 0.  */
  static void
  str_append(char **to, size_t * to_len, const char *buf, const size_t buf_len)
  {
  	size_t new_len = *to_len + buf_len;
  	char *new_to = realloc(*to, new_len + 1);
  
  	if (new_to) {
  		/* *((char *)__mempcpy(new_to + *to_len, buf, buf_len)) = '\0'; */
  		memcpy(new_to + *to_len, buf, buf_len);
          *(new_to + *to_len + buf_len) = '\0';
  		*to = new_to;
  		*to_len = new_len;
  	}
  	else {
  		free(*to);
  		*to = 0;
  	}
  }
  
  /* Replace any occurrences of the string STR in ARGZ with WITH, reallocating
   * ARGZ as necessary.  If REPLACE_COUNT is non-zero, *REPLACE_COUNT will be
   * incremented by number of replacements performed.  */
  int argz_replace(char **argz, size_t * argz_len, const char *str,
  			   const char *with, unsigned *replace_count)
  {
  	int err = 0;
  
  	if (str && *str) {
  		char *arg = 0;
  		char *src = *argz;
  		size_t src_len = *argz_len;
  		char *dst = 0;
  		size_t dst_len = 0;
  		int delayed_copy = 1;		   /* True while we've avoided copying
  									    * anything.  */
  		size_t str_len = strlen(str), with_len = strlen(with);
  
  		while (!err && (arg = argz_next(src, src_len, arg))) {
  			char *match = strstr(arg, str);
  			if (match) {
  				char *from = match + str_len;
  				size_t to_len = match - arg;
  				char *to = my_strndup(arg, to_len);
  
  				while (to && from) {
  					str_append(&to, &to_len, with, with_len);
  					if (to) {
  						match = strstr(from, str);
  						if (match) {
  							str_append(&to, &to_len, from, match - from);
  							from = match + str_len;
  						}
  						else {
  							str_append(&to, &to_len, from, strlen(from));
  							from = 0;
  						}
  					}
  				}
  
  				if (to) {
  					if (delayed_copy)
  						/* We avoided copying SRC to DST until we found a
  						 * match; now that we've done so, copy everything
  						 * from the start of SRC.  */
  					{
  						if (arg > src)
  							err =
  								argz_append(&dst, &dst_len, src,
  											  (arg - src));
  						delayed_copy = 0;
  					}
  					if (!err)
  						err = argz_add(&dst, &dst_len, to);
  					free(to);
  				}
  				else
  					err = ENOMEM;
  
  				if (replace_count)
  					(*replace_count)++;
  			}
  			else if (!delayed_copy)
  				err = argz_add(&dst, &dst_len, arg);
  		}
  
  		if (!err) {
  			if (!delayed_copy)
  				/* We never found any instances of str.  */
  			{
  				if (src)
  					free(src);
  				*argz = dst;
  				*argz_len = dst_len;
  			}
  		}
  		else if (dst_len > 0)
  			free(dst);
  	}
  
  	return err;
  }
  
  /* Make '\0' separated arg vector ARGZ printable by converting all the '\0's
   * except the last into the character SEP.  */
  void argz_stringify(char *argz, size_t len, int sep)
  {
  	if (len > 0) {
  		while (1) {
  			size_t part_len = my_strnlen(argz, len);
  			argz += part_len;
  			len -= part_len;
  			if (len-- <= 1)			   /* includes final '\0' we want to stop 
  									    * at */
  				break;
  			*argz++ = sep;
  		}
      }
      return;
  }
  
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_argz.h
  ============================================================
  $ cvs update -p -r1.1 lmtp2nntp_argz.h
  /*
  **  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  **  mailer which forwards mails as Usenet news articles via NNTP.
  **  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  **
  **  This program is free software; you can redistribute it and/or
  **  modify it under the terms of the GNU General Public  License
  **  as published by the Free Software Foundation; either version
  **  2.0 of the License, or (at your option) any later version.
  **
  **  This program is distributed in the hope that it will be useful,
  **  but WITHOUT ANY WARRANTY; without even the implied warranty of
  **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  **  General Public License for more details.
  **
  **  You should have received a copy of the GNU General Public License
  **  along with this file; if not, write to the Free Software
  **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  **  USA, or contact the OSSP project <ossp@ossp.org>.
  **
  **  argz.c: Zero-Terminated Argument Vector library (API)
  */
  
  /* Routines for dealing with '\0' separated arg vectors.
     Copyright (C) 1996, 1997 Free Software Foundation, Inc.
     This file is part of the GNU C Library.
     Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1996.
  
     The GNU C Library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Library General Public License as
     published by the Free Software Foundation; either version 2 of the
     License, or (at your option) any later version.
  
     The GNU C Library is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     Library General Public License for more details.
  
     You should have received a copy of the GNU Library General Public
     License along with the GNU C Library; see the file COPYING.LIB.  If not,
     write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
     Boston, MA 02111-1307, USA.  */
  
  #ifndef _ARGZ_H_
  #define _ARGZ_H_
  
  #include <string.h>
  
  extern int    argz_create    (char *const _argv[], char **_argz, size_t * _len);
  extern int    argz_create_sep(const char *_string, int _sep, char **_argz, size_t * _len);
  extern size_t argz_count     (const char *_argz, size_t _len);
  extern void   argz_extract   (const char *_argz, size_t _len, char **_argv);
  extern void   argz_stringify (char *_argz, size_t _len, int _sep);
  extern int    argz_append    (char **_argz, size_t * _argz_len, const char *_buf, size_t _buf_len);
  extern int    argz_add       (char **_argz, size_t * _argz_len, const char *_str);
  extern int    argz_add_sep   (char **_argz, size_t * _argz_len, const char *_string, int _delim);
  extern void   argz_delete    (char **_argz, size_t * _argz_len, char *_entry);
  extern int    argz_insert    (char **_argz, size_t * _argz_len, char *_before, const char *_entry);
  extern int    argz_replace   (char **_argz, size_t * _argz_len, const char *_str, const char *_with, unsigned int *_replace_count);
  extern char  *argz_next      (const char *_argz, size_t _argz_len, const char *_entry);
  
  #endif /* _ARGZ_H_ */
  
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_daemon.c
  ============================================================
  $ cvs update -p -r1.1 lmtp2nntp_daemon.c
  /*
  **  daemon.c -- daemonize current process 
  **  Copyright (c) 1999-2000 Ralf S. Engelschall, All Rights Reserved. 
  **
  **  See "Unix Programming Frequently Asked Questions":
  **  http://www.erlenstar.demon.co.uk/unix/faq_2.html#SEC10
  */
  
  #include "config.h"
  
  #include <fcntl.h>
  #include <unistd.h>
  #include <signal.h>
  #include <sys/stat.h>
  #include <sys/ioctl.h>
  #ifdef HAVE_TERMIOS_H
  #include <sys/termios.h>
  #endif
  
  #include "lmtp2nntp_daemon.h"
  
  int daemonize(void)
  {
      int fd;
      int rc;
  
      /* 
       * if we are started from init, 
       * no need to become daemon.
       */
      if (getppid() == 1)
          return 0;
  
      /*
       * Ignore tty related signals
       */
  #ifdef  SIGTTOU
      signal(SIGTTOU, SIG_IGN);
  #endif
  #ifdef  SIGTTIN
      signal(SIGTTIN, SIG_IGN);
  #endif
  #ifdef  SIGTSTP
      signal(SIGTSTP, SIG_IGN);
  #endif
  
      /*
       * fork so the parent can exit, this returns control to the command line
       * or shell invoking your program. This step is required so that the new
       * process is guaranteed not to be a process group leader (The next step,
       * setsid, would fail if you're a process group leader). 
       */
      rc = fork();
      switch (rc) {
          case -1: return -1;
          case 0:  break;
          default: _exit(0); /* exit original process */
      }
  
      /*
       * setsid to become a process group and session group leader. Since a
       * controlling terminal is associated with a session, and this new session
       * has not yet acquired a controlling terminal our process now has no
       * controlling terminal, which is a Good Thing for daemons. 
       */
  #ifdef HAVE_SETSID
      if (setsid() == -1)
          return -1;
  #else
      if (setpgid(0, getpid()) == -1)
          return -1;
  #ifndef _PATH_TTY
  #define _PATH_TTY "/dev/tty"
  #endif
      if ((fd = open(_PATH_TTY, O_RDWR)) == -1) 
          return -1;
      ioctl(fd, TIOCNOTTY, NULL);
      close(fd);
  #endif
  
      /*
       * fork again so the parent, (the session group leader), can exit. This
       * means that we, as a non-session group leader, can never regain a
       * controlling terminal. 
       */
      rc = fork();
      switch (rc) {
          case -1: return -1;
          case 0:  break;
          default: _exit(0); /* exit original process */
      }
  
      /*
       * chdir("/") to ensure that our process doesn't keep any directory in
       * use. Failure to do this could make it so that an administrator couldn't
       * unmount a filesystem, because it was our current directory.
       * [Equivalently, we could change to any directory containing files
       * important to the daemon's operation.] 
       */
      chdir("/");
  
      /*
       * give us complete control over the permissions of anything we write. We
       * don't know what umask we may have inherited.  [This step is optional] 
       */
      umask(0);
  
      /*
       * close fds 0, 1, and 2. This releases the standard in, out, and error we
       * inherited from our parent process. We have no way of knowing where
       * these fds might have been redirected to. 
       */
      if ((fd = open("/dev/null", O_RDWR, 0)) != -1) {
          dup2(fd, STDIN_FILENO);
          dup2(fd, STDOUT_FILENO);
          dup2(fd, STDERR_FILENO);
          if (fd > 2)
              close(fd);
      }
      return 0;
  }
  
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_daemon.h
  ============================================================
  $ cvs update -p -r1.1 lmtp2nntp_daemon.h
  #ifndef _DAEMON_H_
  #define _DAEMON_H_
  
  int daemonize(void);
  
  #endif /* _DAEMON_H_ */
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_dotconf.c
  ============================================================
  $ cvs update -p -r1.1 lmtp2nntp_dotconf.c
  /* dot.conf - configuration file parser library
   * Copyright (C) 1999,2000,2001 Lukas Schroeder <lukas@azzit.de>
   * 
   * This library is free software; you can redistribute it and/or
   * modify it under the terms of the GNU Lesser General Public
   * License as published by the Free Software Foundation; either
   * version 2.1 of the License.
   * 
   * This library is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   * Lesser General Public License for more details.
   * 
   * You should have received a copy of the GNU Lesser General Public
   * License along with this library; if not, write to the
   * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
   * Boston, MA  02111-1307, USA.
   *
   */
  
  /* -- dotconf.c - this code is responsible for the input, parsing and dispatching of options  */
  
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  
  /* Added by Stephen W. Boyer <sboyer@caldera.com> 
   * for wildcard support in Include file paths
   */
  #include <sys/types.h>
  #include <sys/stat.h>
  #include <fcntl.h>
  #include <sys/stat.h>
  
  /* -- AIX 4.3 compile time fix
   * by Eduardo Marcel Macan <macan@colband.com.br>
   *
   * modified by Stephen W. Boyer <sboyer@caldera.com>
   * for Unixware and OpenServer
   */
  
  #if defined (_AIX43) || defined(UNIXWARE) || defined(OSR5)
  #include <strings.h> 
  #endif
  
  #include <stdarg.h>
  #include <time.h>
  #include <sys/stat.h>
  
  #ifndef WIN32
  
  #include <dirent.h>
  #include <unistd.h>
  
  #else /* ndef WIN32 */
  
  #include "readdir.h"			/* WIN32 fix by Robert J. Buck */
  
  #define strncasecmp strnicmp
  typedef unsigned long ulong;
  #define snprintf _snprintf
  #define vsnprintf _vsnprintf
  #endif /* !WIN32 */
  
  #include <ctype.h>
  #include "./dotconf.h"
  
  static char name[CFG_MAX_OPTION + 1];	/* option name */
  
  /*
   * some 'magic' options that are predefined by dot.conf itself for
   * advanced functionality
   */
  static DOTCONF_CB(dotconf_cb_include);		/* internal 'Include'     */
  static DOTCONF_CB(dotconf_cb_includepath);	/* internal 'IncludePath' */
  
  static configoption_t dotconf_options[] =
  {
  	{ "Include", ARG_STR, dotconf_cb_include, NULL, CTX_ALL },
  	{ "IncludePath", ARG_STR, dotconf_cb_includepath, NULL, CTX_ALL },
  	LAST_CONTEXT_OPTION
  };
  
  char *dotconf_substitute_env(configfile_t *configfile, char *str)
  {
  	char *cp1, *cp2, *cp3, *eos, *eob;
  	char *env_value;
  	char env_name[CFG_MAX_VALUE + 1];
  	char env_default[CFG_MAX_VALUE + 1];
  	char tmp_value[CFG_MAX_VALUE + 1];
  
  	memset(env_name, 0, CFG_MAX_VALUE + 1);
  	memset(env_default, 0, CFG_MAX_VALUE + 1);
  	memset(tmp_value, 0, CFG_MAX_VALUE + 1);
  
  	cp1 = str;
  	eob = cp1 + strlen(str) + 1;
  	cp2 = tmp_value;
  	eos = cp2 + CFG_MAX_VALUE + 1;
  
  	while ((cp1 < eob) && (cp2 < eos) && (*cp1 != '\0'))
  	{
  		/* substitution needed ?? */
  		if (*cp1 == '$' && *(cp1 + 1) == '{')
  		{
  			cp1 += 2;			/* skip ${ */
  			cp3 = env_name;
  			while ((cp1 < eob) && !(*cp1 == '}' || *cp1 == ':'))
  				*cp3++ = *cp1++;
  			*cp3 = '\0';		/* terminate */
  
  			/* default substitution */
  			if (*cp1 == ':' && *(cp1 + 1) == '-')
  			{
  				cp1 += 2;		/* skip :- */
  				cp3 = env_default;
  				while ((cp1 < eob) && (*cp1 != '}'))
  					*cp3++ = *cp1++;
  				*cp3 = '\0';	/* terminate */
  			}
  			else
  			{
  				while ((cp1 < eob) && (*cp1 != '}'))
  					cp1++;
  			}
  
  			if (*cp1 != '}')
  			{
  				dotconf_warning(configfile, DCLOG_WARNING, ERR_PARSE_ERROR,
  					"Unbalanced '{'");
  			}
  			else
  			{
  				cp1++;			/* skip } */
  				if ((env_value = getenv(env_name)) != NULL)
  				{
  					strncat(cp2, env_value, eos - cp2);
  					cp2 += strlen(env_value);
  				}
  				else
  				{
  					strncat(cp2, env_default, eos - cp2);
  					cp2 += strlen(env_default);
  				}
  			}
  
  		}
  
  		*cp2++ = *cp1++;
  	}
  	*cp2 = '\0';				/* terminate buffer */
  
  	free(str);
  	return strdup(tmp_value);
  }
  
  int dotconf_warning(configfile_t *configfile, int type, unsigned long errnum, const char *fmt, ...)
  {
  	va_list args;
  	int retval = 0;
  
  	va_start(args, fmt);
  	if (configfile->errorhandler != 0)	/* an errorhandler is registered */
  	{
  		char msg[CFG_BUFSIZE];
  		vsnprintf(msg, CFG_BUFSIZE, fmt, args);
  		retval = configfile->errorhandler(configfile, type, errnum, msg);
  	}
  	else						/* no errorhandler, do-it-yourself */
  	{
  		retval = 0;
  		fprintf(stderr, "%s:%ld: ", configfile->filename, configfile->line);
  		vfprintf(stderr, fmt, args);
  		fprintf(stderr, "\n");
  	}
  	va_end(args);
  
  	return retval;
  }
  
  void dotconf_register_options(configfile_t *configfile, const configoption_t * options)
  {
  	int num = configfile->config_option_count;
  
  #define GROW_BY   10
  
  	/* resize memoryblock for options blockwise */
  	if (configfile->config_options == NULL)
  	{
  		configfile->config_options = malloc(sizeof(void *) * (GROW_BY + 1));
  	}
  	else
  	{
  		if ( !(num % GROW_BY) )
  			configfile->config_options = realloc(configfile->config_options, 
  											 sizeof(void *) * (num + GROW_BY));
  	}
  
  #undef GROW_BY
  
  	/* append new options */
  	configfile->config_options[configfile->config_option_count] = options;
  	configfile->config_options[ ++configfile->config_option_count ] = 0;
  
  }
  
  void dotconf_callback(configfile_t *configfile, callback_types type, dotconf_callback_t callback)
  {
  	switch(type)
  	{
  		case ERROR_HANDLER:
  			configfile->errorhandler = (dotconf_errorhandler_t) callback;
  			break;
  		case CONTEXT_CHECKER:
  			configfile->contextchecker = (dotconf_contextchecker_t) callback;
  			break;
  		default:
  			break;
  	}
  }
  
  int dotconf_continue_line(char *buffer, size_t length)
  {
  	/* ------ match [^\\]\\[\r]\n ------------------------------ */
  	char *cp1 = buffer + length - 1;
  
  	if (length < 2)
  		return 0;
  
  	if (*cp1-- != '\n')
  		return 0;
  
  	if (*cp1 == '\r')
  		cp1--;
  
  	if (*cp1-- != '\\')
  		return 0;
  
  	cp1[1] = 0;						/* strip escape character and/or newline */
  	return (*cp1 != '\\');
  }
  
  int dotconf_get_next_line(char *buffer, size_t bufsize, configfile_t *configfile)
  {
  	char *cp1, *cp2;
  	char buf2[CFG_BUFSIZE];
  	int length;
  
  	if (configfile->eof)
  		return 1;
  
  	cp1 = fgets(buffer, CFG_BUFSIZE, configfile->stream);
  
  	if (!cp1)
  	{
  		configfile->eof = 1;
  		return 1;
  	}
  
  	configfile->line++;
  	length = strlen(cp1);
  	while ( dotconf_continue_line(cp1, length) ) 
  	{
  		cp2 = fgets(buf2, CFG_BUFSIZE, configfile->stream);
  		if (!cp2)
  		{
  			fprintf(stderr, "[dotconf] Parse error. Unexpected end of file at "
  					"line %ld in file %s\n", configfile->line, configfile->filename);
  			configfile->eof = 1;
  			return 1;
  		}
  		configfile->line++;
  		strcpy(cp1 + length - 2, cp2);
  		length = strlen(cp1);
  	}
  
  	return 0;
  }
  
  char *dotconf_get_here_document(configfile_t *configfile, const char *delimit)
  {
  	/* it's a here-document: yeah, what a cool feature ;) */
  	unsigned int limit_len;
  	char here_string;
  	char buffer[CFG_BUFSIZE];
  	char *here_doc = 0;
  	char here_limit[9];	                       /* max length for here-document delimiter: 8 */
  	struct stat finfo;
  	int offset = 0;
  
  	if (configfile->size <= 0)
  	{
  		if (stat(configfile->filename, &finfo))
  		{
  			dotconf_warning(configfile, DCLOG_EMERG, ERR_NOACCESS, 
  						   "[emerg] could not stat currently read file (%s)\n", 
  							configfile->filename);
  			return NULL;
  		}
  		configfile->size = finfo.st_size;
  	}
  
  	/* 
  	 * allocate a buffer of filesize bytes; should be enough to
  	 * prevent buffer overflows
  	 */
  	here_doc = malloc(configfile->size);	/* allocate buffer memory */
  	memset(here_doc, 0, configfile->size);
  
  	here_string = 1;
  	limit_len = snprintf(here_limit, 9, "%s", delimit);
  	while (!dotconf_get_next_line(buffer, CFG_BUFSIZE, configfile))
  	{
  		if (!strncmp(here_limit, buffer, limit_len - 1))
  		{
  			here_string = 0;
  			break;
  		}
  		offset += snprintf( (here_doc + offset), configfile->size - offset - 1, "%s", buffer);
  	}
  	if (here_string)
  		dotconf_warning(configfile, DCLOG_WARNING, ERR_PARSE_ERROR, "Unterminated here-document!");
  
  	here_doc[offset-1] = '\0';	/* strip newline */
  
  	return (char *)realloc(here_doc, offset);
  }
  
  const char *dotconf_invoke_command(configfile_t *configfile, command_t *cmd)
  {
  	const char *error = 0;
  
  	if ( !configfile->contextchecker
  		|| !(error = configfile->contextchecker(cmd, cmd->option->context)) )
  	{
  		if (!error)
  			error = cmd->option->callback(cmd, configfile->context);
  	}
  
  	return error;
  }
  
  configoption_t *dotconf_find_command(configfile_t *configfile, const char *command)
  {
  	configoption_t *option;
  	int i = 0, mod = 0, done = 0;
  
  	for (option = 0, mod = 0; configfile->config_options[mod] && !done; mod++)
  		for (i = 0; configfile->config_options[mod][i].name[0]; i++)
  		{
  			if (!configfile->cmp_func(name, 
  									  configfile->config_options[mod][i].name, CFG_MAX_OPTION))
  			{
  				option = (configoption_t *) &configfile->config_options[mod][i];
  				/* TODO: this could be flagged: option overwriting by modules */
  				done = 1;
  				break;		/* found it; break out */
  			}
  		}
  
  	/* handle ARG_NAME fallback */
  	if ( (option && option->name[0] == 0) 
  		  || configfile->config_options[mod - 1][i].type == ARG_NAME)
  	{
  		option = (configoption_t *) &configfile->config_options[mod - 1][i];
  	}
  
  	return option;
  }
  
  char *dotconf_read_arg(configfile_t *configfile, char **line)
  {
  	int sq = 0, dq = 0;							/* single quote, double quote */
  	int done;
  	char *cp1 = *line;
  	char *cp2, *eos;
  	char buf[CFG_MAX_VALUE];
  
  	memset(buf, 0, CFG_MAX_VALUE);
  	done = 0;
  	cp2 = buf;
  	eos = cp2 + CFG_MAX_VALUE - 1;
  
  	if (*cp1 == '#' || !*cp1)
  		return NULL;
  
  	/* skip all whitespace between 2 arguments */
  	while ( isspace((int)cp1[0]) && (*cp1 != '\0'))
  		cp1++;
  
  	while ((*cp1 != '\0') && (cp2 != eos) && !done)
  	{
  		switch (*cp1)
  		{
  			case '\'':					/* single quote */
  				if (dq)
  					break;					/* already double quoting, break out */
  				if (sq)
  					sq--;					/* already single quoting, clear state */
  				else if (!sq)
  					sq++;					/* set state for single quoting */
  				break;
  			case '"':					/* double quote */
  				if (sq)
  					break;					/* already single quoting, break out */
  				if (dq)
  					dq--;					/* already double quoting, clear state */
  				else if (!dq)
  					dq++;					/* set state for double quoting */
  				break;
  			case '\\':					/* protected chars */
  				if (!cp1[1])			/* dont protect NUL */
  					break;
  				*cp2++ = *(++cp1);
  				cp1++;					/* skip the protected one */
  				continue;
  				break;
  			default:
  				break;
  		}
  
  		/* unquoted space: start a new option argument */
  		if (isspace((int)*cp1) && !dq && !sq)
  		{
  			*cp2 = '\0';	/* terminate current argument */
  			break;
  		}
  		/* unquoted, unescaped comment-hash ; break out */
  		else if (*cp1 == '#' && !dq && !sq)
  		{
  			*cp2 = '\0';
  			break;
  		}
  		/* not space or quoted:eat it; dont take quote if quoting */
  		else if ( (!isspace((int)*cp1) && !dq && !sq && *cp1 != '"' && *cp1 != '\'')
  				   || (dq && (*cp1 != '"')) || (sq && *cp1 != '\'') )
  		{
  			*cp2++ = *cp1;
  		}
  		cp1++;
  	}
  
  	*line = cp1;
  
  	/* FIXME: escaping substitutes does not work 
  		Subst ${HOME} \$\{HOME\}
  		BOTH! will be substituted, which is somewhat wrong, ain't it ?? :-(
  	*/
  	if ( (configfile->flags & DONT_SUBSTITUTE) == DONT_SUBSTITUTE )
  		return buf[0] ? strdup(buf) : NULL;
   	return buf[0] ? dotconf_substitute_env(configfile, strdup(buf)) : NULL;
  }
  
  const char *dotconf_handle_command(configfile_t *configfile, char *buffer)
  {
  	char *cp1, *cp2;							/* generic char pointer      */
  	char *eob;									/* end of buffer; end of string  */
  	int i;										/* generic counter, mod holds the module index */
  	int memory_cleanup;
  	const char *error;							/* error message as return by callback */
  	command_t command;							/* command structure */
  	configoption_t *option; 					/* matched option from config_options */
  
  	i = memory_cleanup = 0;
  	error = 0;
  
  	/* TODO????: insert 'skipped_line' callback code */
  
  	/* clear fields */
  	memset(&command, 0, sizeof(command_t));
  	name[0] = 0;
  
  	/* initialize char pointer */
  	cp1 = buffer;
  	eob = cp1 + strlen(cp1);					/* calculate end of buffer */
  
  	/* skip any whitspace of indented lines */
  	while ((cp1 < eob) && (isspace((int)*cp1)))
  		cp1++;
  
  	/* ignore comments and empty lines */
  	if (!cp1 || !*cp1 || *cp1 == '#' || *cp1 == '\n' || *cp1 == EOF)
  		return NULL;
  
  	/* skip line if it only contains whitespace */
  	if (cp1 == eob)
  		return NULL;
  
  	/* get first token: read the name of a possible option */
  	cp2 = name;
  	while ((*cp1 != '\0') && (!isspace((int)*cp1)))
  		*cp2++ = *cp1++;
  	*cp2 = '\0';
  
  	option = dotconf_find_command(configfile, name);
  
  	if (!option || option->callback == 0)
  	{
  		dotconf_warning(configfile, DCLOG_INFO, ERR_UNKNOWN_OPTION, 
  						"Unknown Config-Option: '%s'", name);
  		return NULL;
  	}
  
  	/* fill in the command_t structure with values we already know */
  	command.name = option->type == ARG_NAME ? name : option->name;
  	command.option = option;
  	command.context = configfile->context;
  	command.configfile = configfile;
  	command.data.list = (char **)calloc(CFG_VALUES, sizeof(char *));
  
  	if (option->type == ARG_RAW)
  	{
  		/* if it is an ARG_RAW type, save some time and call the
  		   callback now */
  		command.data.str = cp1;
  	}
  	else if (option->type == ARG_STR)
  	{
  		/* check if it's a here-document and act accordingly */
  		char *cp3 = cp1;
  
  		/* skip whitespace */
  		while ((cp3 < eob) && (*cp3 != '\0') && (isspace((int)*cp3)))
  			cp3++;
  
  		if (!strncmp("<<", cp3, 2))	/* here document magic bytes :) */
  		{
  			command.data.str = dotconf_get_here_document(configfile, cp3 + 2);
  			command.arg_count = 1;
  			memory_cleanup = !!command.data.str;
  		}
  	}
  
  	if ( !(option->type == ARG_STR && command.data.str != 0) )
  	{
  
  		/* skip whitespace */
  		while ((cp1 < eob) && (*cp1 != '\0') && (isspace((int)*cp1)))
  			cp1++;
  
  		command.arg_count = 0; 
  		while ( command.arg_count < (CFG_VALUES - 1)
  				&& (command.data.list[command.arg_count] = dotconf_read_arg(configfile, &cp1)) )
  		{
  			command.arg_count++;
  		}
  
  		/* skip whitespace again */
  		while ((cp1 < eob) && (*cp1 != '\0') && (isspace((int)*cp1)))
  			cp1++;
  
  		if (command.arg_count && command.data.list[command.arg_count-1] && *cp1)
  			command.data.list[command.arg_count++] = strdup(cp1);
  
  		/* has an option entry been found before or do we have to use a fallback? */
  		if ((option->name && option->name[0] > 32) || option->type == ARG_NAME)
  		{
  			/* found it, now check the type of args it wants */
  			switch (option->type)
  			{
  				case ARG_TOGGLE:
  				{
  					/* the value is true if the argument is Yes, On or 1 */
  					if (command.arg_count < 1)
  					{
  						dotconf_warning(configfile, DCLOG_WARNING, ERR_WRONG_ARG_COUNT, 
  										"Missing argument to option '%s'", name);
  						goto out;
  					}
  
  					command.data.value = CFG_TOGGLED(command.data.list[0]);
  					break;
  				}
  				case ARG_INT:
  				{
  					if (command.arg_count < 1)
  					{
  						dotconf_warning(configfile, DCLOG_WARNING, ERR_WRONG_ARG_COUNT, 
  										"Missing argument to option '%s'", name);
  						goto out;
  					}
  
  					sscanf(command.data.list[0], "%li", &command.data.value);
  					break;
  				}
  				case ARG_STR:
  				{
  					if (command.arg_count < 1)
  					{
  						dotconf_warning(configfile, DCLOG_WARNING, ERR_WRONG_ARG_COUNT, 
  										"Missing argument to option '%s'", name);
  						goto out;
  					}
  
  					command.data.str = command.data.list[0];
  					break;
  				}
  				case ARG_NAME:	/* fall through */
  				case ARG_LIST:
  				case ARG_NONE:
  				case ARG_RAW:	/* this has been handled before */
  				default:
  					break;	//win32 edit
  			}
  		}
  	}
  
  	error = dotconf_invoke_command(configfile, &command);
  
  out:
  	if (command.option->type == ARG_STR && memory_cleanup)
  		free(command.data.str);
  	else
  	{
  		for (i = 0; i < command.arg_count; i++)
  			free(command.data.list[i]);
  	}
  
  	free(command.data.list);
  	return error;					
  }
  
  const char *dotconf_command_loop_until_error(configfile_t *configfile)
  {
  	char buffer[CFG_BUFSIZE];
  
  	while ( !(dotconf_get_next_line(buffer, CFG_BUFSIZE, configfile)) )
  	{
  		const char *error = dotconf_handle_command(configfile, buffer);
  		if ( error )
  			return error;
  	}
  	return NULL;
  }
  
  int dotconf_command_loop(configfile_t *configfile)
  {
  	/* ------ returns: 0 for failure -- !0 for success ------------------------------------------ */
  	char buffer[CFG_BUFSIZE];
  
  	while ( !(dotconf_get_next_line(buffer, CFG_BUFSIZE, configfile)) )
  	{
  		const char *error = dotconf_handle_command(configfile, buffer);
  		if ( error != NULL )
  		{
  			if ( dotconf_warning(configfile, DCLOG_ERR, 0, error) )
  				return 0;
  		}
  	}
  	return 1;
  }
  
  configfile_t *dotconf_create(char *fname, const configoption_t * options, 
                               context_t *context, unsigned long flags)
  {
  	configfile_t *new = 0;
  	char *dc_env;
  
  	if (access(fname, R_OK))
  	{
  		fprintf(stderr, "Error opening configuration file '%s'\n", fname);
  		return NULL;
  	}
  
  	new = calloc(1, sizeof(configfile_t));
  	if (!(new->stream = fopen(fname, "r")))
  	{
  		fprintf(stderr, "Error opening configuration file '%s'\n", fname);
  		free(new);
  		return NULL;
  	}
  
  	new->flags = flags;
  	new->filename = strdup(fname);
  
  	new->includepath = malloc(CFG_MAX_FILENAME);
  	new->includepath[0] = 0x00;
  
  	/* take includepath from environment if present */
  	if ((dc_env = getenv(CFG_INCLUDEPATH_ENV)) != NULL)
  	{
  		snprintf(new->includepath, CFG_MAX_FILENAME, "%s", dc_env);
  	}
  
  	new->context = context;
  
  	dotconf_register_options(new, dotconf_options);			
  	dotconf_register_options(new, options);					
  
  	if ( new->flags & CASE_INSENSITIVE )
  		new->cmp_func = strncasecmp;
  	else
  		new->cmp_func = strncmp;
  
  	return new;
  }
  
  void dotconf_cleanup(configfile_t *configfile)
  {
  	if (configfile->stream)
  		fclose(configfile->stream);
  
  	if (configfile->filename)
  		free(configfile->filename);
  
  	if (configfile->config_options)
  		free(configfile->config_options);
  
  	if (configfile->includepath)
  		free(configfile->includepath);
  
  	free(configfile);
  }
  
  /* ------ internal utility function that verifies if a character is in the WILDCARDS list -- */
  int dotconf_is_wild_card(char value)
  {
  	int retval = 0;
  	int i;
  	int wildcards_len = strlen(WILDCARDS);
  
  	for (i=0;i<wildcards_len;i++)
  	{
  		if (value == WILDCARDS[i])
  		{
  			retval = 1;
  			break;
  		}
  	}
  	
  	return retval;
  }
  
  /* ------ internal utility function that calls the appropriate routine for the wildcard passed in -- */
  int dotconf_handle_wild_card(command_t* cmd, char wild_card, char* path, char* pre, char* ext)
  {
  	int retval = 0;
  
  	switch (wild_card)
  	{
  		case '*':
  
  			retval = dotconf_handle_star(cmd,path,pre,ext);
  
  		break;
  
  		case '?':
  
  			retval = dotconf_handle_question_mark(cmd,path,pre,ext);
  
  		break;
  
  		default:
  			retval = -1;
  	}
  
  	return retval;
  }
  
  
  /* ------ internal utility function that frees allocated memory from dotcont_find_wild_card -- */
  void dotconf_wild_card_cleanup(char* path, char* pre)
  {
  
  	if (path != NULL)
  	{
  		free(path);
  	}
  
  	if (pre != NULL)
  	{
  		free(pre);
  	}
  
  }
  
  /* ------ internal utility function to check for wild cards in file path -- */
  /* ------ path and pre must be freed by the developer ( dotconf_wild_card_cleanup) -- */ 
  int dotconf_find_wild_card(char* filename, char* wildcard, char** path, char** pre, char** ext)
  {
  	int retval = -1;
  	int prefix_len = 0;
  	int tmp_count = 0;
  	char* tmp = 0;
  	int found_path = 0;
  
  	int len = strlen(filename);
  
  	if (wildcard != NULL && len > 0 && path != NULL && pre != NULL && ext != NULL )
  	{	
  		prefix_len = strcspn(filename,WILDCARDS); /* find any wildcard in WILDCARDS */ 
  
  		if ( prefix_len < len ) /* Wild card found */ 
  		{
  			tmp = filename + prefix_len;
  			tmp_count = prefix_len + 1;
  
  			while ( tmp != filename && *(tmp) != '/' )
  			{
  				tmp--;
  				tmp_count--;
  			}
  			
  			if ( *(tmp) == '/' )
  			{
  				*path = (char*)malloc(tmp_count+1);
  				found_path = 1;
  
  			} else 
  
  				*path = (char*)malloc(1);
  
  			*pre =  (char*)malloc((prefix_len-(tmp_count-(found_path?0:1)))+1);
  
  			if ( *path && *pre )
  			{
  				if (found_path) 
  					strncpy(*path,filename,tmp_count);
  				(*path)[tmp_count] = '\0';
  
  				strncpy(*pre,(tmp+(found_path?1:0)),
  						(prefix_len-(tmp_count-(found_path?0:1))));
  				(*pre)[(prefix_len-(tmp_count-(found_path?0:1)))] = '\0';
  
  				*ext = filename + prefix_len;
  				*wildcard = (**ext);
  				(*ext)++;
  
  				retval = prefix_len;
  
  			}
  
  		}
  
  	}
  
  	return retval;
  }
  
  /* ------ internal utility function that compares two stings from back to front -- */
  int dotconf_strcmp_from_back(const char* s1, const char* s2)
  {
  	int retval = 0;
  	int i,j;
  	int len_1 = strlen(s1);
  	int len_2 = strlen(s2);
  
  	for (i=len_1,j=len_2;(i>=0 && j>=0);i--,j--)
  	{
  		if (s1[i] != s2[j])
  		{
  			retval = -1;
  			break;
  		}
  	}
  
  	return retval;
  }
  
  /* ------ internal utility function that determins if a string matches the '?' criteria -- */
  int dotconf_question_mark_match(char* dir_name, char* pre, char* ext)
  {
  	int retval = -1;
  	int dir_name_len = strlen(dir_name);
  	int pre_len = strlen(pre);
  	int ext_len = strlen(ext); 
  	int w_card_check = strcspn(ext,WILDCARDS);
  
  	if ( (w_card_check < ext_len) && (strncmp(dir_name,pre,pre_len) == 0)
  		 && (strcmp(dir_name,".") != 0 ) && (strcmp(dir_name,"..") != 0) )
  	{
  		retval = 1;    /* Another wildcard found */
  
  	} else {
  
  		if ((dir_name_len >= pre_len) && 
  			 (strncmp(dir_name,pre,pre_len) == 0) &&
  			 (strcmp(dir_name,".") != 0 ) &&
  			 (strcmp(dir_name,"..") != 0)) 
  		{
  			retval = 0; /* Matches no other wildcards */
  		}
  
  	}
  
  	return retval;
  }
  
  /* ------ internal utility function that determins if a string matches the '*' criteria -- */
  int dotconf_star_match(char* dir_name, char* pre, char* ext)
  {
  	int retval = -1;
  	int dir_name_len = strlen(dir_name);
  	int pre_len = strlen(pre);
  	int ext_len = strlen(ext); 
  	int w_card_check = strcspn(ext,WILDCARDS);
  
  	if ( (w_card_check < ext_len) && (strncmp(dir_name,pre,pre_len) == 0)
  		 && (strcmp(dir_name,".") != 0 ) && (strcmp(dir_name,"..") != 0) )
  	{
  		retval = 1;    /* Another wildcard found */
  
  	} else {
  
  		if ((dir_name_len >= (ext_len + pre_len)) && 
  			 (dotconf_strcmp_from_back(dir_name,ext) == 0) &&
  			 (strncmp(dir_name,pre,pre_len) == 0) &&
  			 (strcmp(dir_name,".") != 0 ) &&
  			 (strcmp(dir_name,"..") != 0)) 
  		{
  			retval = 0; /* Matches no other wildcards */
  		}
  
  	}
  
  	return retval;
  }
  
  /* ------ internal utility function that determins matches for filenames with   -- */
  /* ------ a '?' in name and calls the Internal Include function on that filename -- */
  int dotconf_handle_question_mark(command_t* cmd, char* path, char* pre, char* ext)
  {
  	configfile_t *included; 
  	DIR* dh = 0;
  	struct dirent* dirptr = 0; 
  
  	char new_pre[CFG_MAX_FILENAME];
  	char already_matched[CFG_MAX_FILENAME];
  
  	char wc = '\0';
  
  	char* new_path = 0;
  	char* wc_path = 0;
  	char* wc_pre = 0;
  	char* wc_ext = 0;
  
  	int pre_len;
  	int new_path_len;
  	int name_len = 0;
  	int alloced = 0;	 
  	int match_state = 0;
  
  	pre_len = strlen(pre);
  
  	if ((dh = opendir(path)) != NULL)
  	{
  		while ( (dirptr = readdir(dh)) != NULL )
  		{
  			match_state = dotconf_question_mark_match(dirptr->d_name,pre,ext); 
  
  			if (match_state >= 0) 
  			{
  				name_len = strlen(dirptr->d_name);
  				new_path_len = strlen(path) + name_len + strlen(ext) + 1; 
  
  				if ( !alloced )
  				{
  					if ((new_path = (char*)malloc(new_path_len)) == NULL )
  					{
  						return -1;
  					}
  
  					alloced = new_path_len;
  
  				} else {
  
  						if ( new_path_len > alloced )
  						{
  							if ( realloc(new_path,new_path_len) == NULL )
  							{
  								free(new_path);
  								return -1;
  							}
  
  						}
  
  				}
  
  				if (match_state == 1)
  				{
  
  					strncpy(new_pre,dirptr->d_name,(name_len > pre_len)?(pre_len+1):pre_len);
  					new_pre[(name_len > pre_len)?(pre_len+1):pre_len] = '\0';
  
  					sprintf(new_path,"%s%s%s",path,new_pre,ext);
  
  					if (strcmp(new_path,already_matched) == 0)
  					{
  						continue; /* Already searched this expression */
  
  					} else {
  
  						strcpy(already_matched,new_path);
  
  					}
  
  					if (dotconf_find_wild_card(new_path,&wc,&wc_path,&wc_pre,&wc_ext) >= 0)
  					{
  						if ( dotconf_handle_wild_card(cmd,wc,wc_path,wc_pre,wc_ext) < 0)
  						{
  							dotconf_warning(cmd->configfile, DCLOG_WARNING, ERR_INCLUDE_ERROR,
  											"Error occured while processing wildcard %c\n"
  											"Filename is '%s'\n", wc, new_path);
  
  							free(new_path);
  							dotconf_wild_card_cleanup(wc_path,wc_pre);
  							return -1;
  						}
  
  						dotconf_wild_card_cleanup(wc_path,wc_pre);
  						continue;
  					}
  
  				}
  
  				sprintf(new_path,"%s%s",path,dirptr->d_name);
  
  				if (access(new_path, R_OK))
  				{
  					dotconf_warning(cmd->configfile, DCLOG_WARNING, ERR_INCLUDE_ERROR,
  									"Cannot open %s for inclusion.\n"
  									"IncludePath is '%s'\n", new_path, cmd->configfile->includepath);
  					return -1;
  				}
  
  				included = dotconf_create(new_path, cmd->configfile->config_options[1], 
  											cmd->configfile->context, cmd->configfile->flags);
  				if (included)
  				{
  					included->errorhandler = cmd->configfile->errorhandler;
  					included->contextchecker = cmd->configfile->contextchecker;
  					dotconf_command_loop(included);
  					dotconf_cleanup(included);
  				}
  
  			}
  
  		}
  
  		closedir(dh);
  		free(new_path);
  
  	}
  
  	return 0;
  }
  
  /* ------ internal utility function that determins matches for filenames with   --- */
  /* ------ a '*' in name and calls the Internal Include function on that filename -- */
  int dotconf_handle_star(command_t* cmd, char* path, char* pre, char* ext)
  {
  	configfile_t *included; 
  	DIR* dh = 0;
  	struct dirent* dirptr = 0; 
  
  	char new_pre[CFG_MAX_FILENAME];
  	char new_ext[CFG_MAX_FILENAME];
  	char already_matched[CFG_MAX_FILENAME];
  
  	char wc = '\0';
  
  	char* new_path = 0;
  	char* s_ext = 0;
  	char* t_ext = 0;
  	char* sub = 0;
  	char* wc_path = 0;
  	char* wc_pre = 0;
  	char* wc_ext = 0;
  
  	int pre_len;
  	int new_path_len;
  	int name_len = 0;
  	int alloced = 0;	 
  	int match_state = 0;
  	int t_ext_count = 0;
  	int sub_count = 0;
  
  	pre_len = strlen(pre);
  	memset(already_matched,0,CFG_MAX_FILENAME);
  	s_ext = ext;
  
  	while (dotconf_is_wild_card(*s_ext)) /* remove trailing wild-cards proceeded by * */
  	{
  		s_ext++;
  	}
  
  	t_ext = s_ext;
  
  	while(t_ext != NULL && !(dotconf_is_wild_card(*t_ext)) && *t_ext != '\0')
  	{
  		t_ext++;				/* find non-wild-card string */
  		t_ext_count++;
  	}
  
  	strncpy(new_ext,s_ext,t_ext_count);
  	new_ext[t_ext_count] = '\0';
  
  	if ((dh = opendir(path)) != NULL)
  	{
  		while ( (dirptr = readdir(dh)) != NULL )
  		{
  			sub_count = 0;
  			t_ext_count = 0;
  
  			match_state = dotconf_star_match(dirptr->d_name,pre,s_ext); 
  
  			if (match_state >= 0) 
  			{
  				name_len = strlen(dirptr->d_name);
  				new_path_len = strlen(path) + name_len + strlen(s_ext) + 1; 
  
  				if ( !alloced )
  				{
  					if ((new_path = (char*)malloc(new_path_len)) == NULL )
  					{
  						return -1;
  					}
  
  					alloced = new_path_len;
  
  				} else {
  
  						if ( new_path_len > alloced )
  						{
  							if ( realloc(new_path,new_path_len) == NULL )
  							{
  								free(new_path);
  								return -1;
  							}
  
  						}
  
  				}
  
  				if (match_state == 1)
  				{
  
  					if ((sub = strstr((dirptr->d_name+pre_len),new_ext)) == NULL)
  					{
  						continue;
  					}
  
  					while (sub != dirptr->d_name)
  					{
  						sub--;
  						sub_count++;
  					}
  					
  					if (sub_count + t_ext_count > name_len)
  					{
  						continue;
  					}
  
  					strncpy(new_pre,dirptr->d_name,(sub_count+t_ext_count));
  					new_pre[sub_count+t_ext_count] = '\0';
  					strcat(new_pre,new_ext);
  
  					sprintf(new_path,"%s%s%s",path,new_pre,t_ext);
  
  					if (strcmp(new_path,already_matched) == 0)
  					{
  						continue; /* Already searched this expression */
  
  					} else {
  						
  						strcpy(already_matched,new_path);
  
  					}
  
  					if (dotconf_find_wild_card(new_path,&wc,&wc_path,&wc_pre,&wc_ext) >= 0)
  					{
  						if ( dotconf_handle_wild_card(cmd,wc,wc_path,wc_pre,wc_ext) < 0)
  						{
  							dotconf_warning(cmd->configfile, DCLOG_WARNING, ERR_INCLUDE_ERROR,
  											"Error occured while processing wildcard %c\n"
  											"Filename is '%s'\n", wc, new_path);
  
  							free(new_path);
  							dotconf_wild_card_cleanup(wc_path,wc_pre);
  							return -1;
  						}
  
  						dotconf_wild_card_cleanup(wc_path,wc_pre);
  						continue;
  					}
  
  				}
  
  				sprintf(new_path,"%s%s",path,dirptr->d_name);
  
  				if (access(new_path, R_OK))
  				{
  					dotconf_warning(cmd->configfile, DCLOG_WARNING, ERR_INCLUDE_ERROR,
  									"Cannot open %s for inclusion.\n"
  									"IncludePath is '%s'\n", new_path, cmd->configfile->includepath);
  					return -1;
  				}
  
  				included = dotconf_create(new_path, cmd->configfile->config_options[1], 
  											cmd->configfile->context, cmd->configfile->flags);
  				if (included)
  				{
  					included->errorhandler = cmd->configfile->errorhandler;
  					included->contextchecker = cmd->configfile->contextchecker;
  					dotconf_command_loop(included);
  					dotconf_cleanup(included);
  				}
  
  			}
  
  		}
  
  		closedir(dh);
  		free(new_path);
  
  	}
  
  	return 0;
  }
  
  /* ------ callbacks of the internal option (Include, IncludePath) ------------------------------- */
  DOTCONF_CB(dotconf_cb_include)
  {
  	char *filename = 0;
  	configfile_t *included; 
  
  	char wild_card;
  	char* path = 0;
  	char* pre = 0;
  	char* ext = 0;	
  
  
  	if (cmd->configfile->includepath
  		&& cmd->data.str[0] != '/' && cmd->configfile->includepath[0] != '\0')
  	{
  		/* relative file AND include path is used */
  		int len, inclen;
  		char *sl;
  
  		inclen = strlen(cmd->configfile->includepath);
  		if (( len = (strlen(cmd->data.str) + inclen + 1)) == CFG_MAX_FILENAME)
  		{
  			dotconf_warning(cmd->configfile, DCLOG_WARNING, ERR_INCLUDE_ERROR,
  							"Absolute filename too long (>%d)", CFG_MAX_FILENAME);
  			return NULL;
  		}
  
  		if (cmd->configfile->includepath[inclen - 1] == '/')
  			sl = "";
  		else
  		{
  			sl = "/";
  			len++;
  		}
  
  		filename = malloc(len);
  		snprintf(filename, len, "%s%s%s", 
  				 cmd->configfile->includepath, sl, cmd->data.str);
  	}
  	else						/* fully qualified, or no includepath */
  		filename = strdup(cmd->data.str);
  
  	/* Added wild card support here */
  	if (dotconf_find_wild_card(filename,&wild_card,&path,&pre,&ext) >= 0)
  	{
  		if ( dotconf_handle_wild_card(cmd,wild_card,path,pre,ext) < 0)
  		{
  			dotconf_warning(cmd->configfile, DCLOG_WARNING, ERR_INCLUDE_ERROR,
  							"Error occured while attempting to process %s for inclusion.\n"
  							"IncludePath is '%s'\n", filename, cmd->configfile->includepath);
  		}
  
  		dotconf_wild_card_cleanup(path,pre);
  		free(filename);
  		return NULL;
  	}
  
  	if (access(filename, R_OK))
  	{
  		dotconf_warning(cmd->configfile, DCLOG_WARNING, ERR_INCLUDE_ERROR,
  						"Cannot open %s for inclusion.\n"
  						"IncludePath is '%s'\n", filename, cmd->configfile->includepath);
  		free(filename);
  		return NULL;
  	}
  
  	included = dotconf_create(filename, cmd->configfile->config_options[1], 
  							   cmd->configfile->context, cmd->configfile->flags);
  	if (included)
  	{
  		included->contextchecker = (dotconf_contextchecker_t) cmd->configfile->contextchecker;
  		included->errorhandler = (dotconf_errorhandler_t) cmd->configfile->errorhandler;
  
  		dotconf_command_loop(included);
  		dotconf_cleanup(included);
  	}
  
  	free(filename);
  	return NULL;
  }
  
  DOTCONF_CB(dotconf_cb_includepath)
  {
  	char *env = getenv(CFG_INCLUDEPATH_ENV);
  	/* environment overrides configuration file setting */
  	if (!env)					
  		snprintf(cmd->configfile->includepath, CFG_MAX_FILENAME, "%s", cmd->data.str);
  	return NULL;
  }
  
  /* vim:set ts=4: */
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_dotconf.h
  ============================================================
  $ cvs update -p -r1.1 lmtp2nntp_dotconf.h
  #ifndef DOTCONF_H
  #define DOTCONF_H
  
  #ifdef __cplusplus
  extern "C" {
  #endif
  
  /* stdio.h should be included by the application - as the manual page says */
  #ifndef _STDIO_H
  #include <stdio.h>		/* needed for FILE* */
  #endif
  
  #ifdef WIN32
  # ifndef R_OK
  #define R_OK 0
  # endif
  #endif
  
  /* some buffersize definitions */
  #define CFG_BUFSIZE 4096	/* max length of one line */
  #define CFG_MAX_OPTION 32	/* max length of any option name */
  #define CFG_MAX_VALUE 4064	/* max length of any options value */
  #define CFG_MAX_FILENAME 256	/* max length of a filename */
  #define CFG_VALUES 16		/* max # of arguments an option takes */
  
  #define CFG_INCLUDEPATH_ENV "DC_INCLUDEPATH"
  #define WILDCARDS	"*?"		/* list of supported wild-card characters */
  
  /* constants for type of option */
  #define ARG_TOGGLE    0		/* TOGGLE on,off; yes,no; 1, 0; */
  #define ARG_INT       1		/* callback wants an integer */
  #define ARG_STR       2		/* callback expects a \0 terminated str */
  #define ARG_LIST      3		/* wants list of strings */
  #define ARG_NAME      4		/* wants option name plus ARG_LIST stuff */
  #define ARG_RAW       5		/* wants raw argument data */
  #define ARG_NONE      6		/* does not expect ANY args */
  
  #define CTX_ALL       0		/* context: option can be used anywhere */
  
  /* for convenience of terminating the dotconf_options list */
  #define LAST_OPTION						{ "", 0, NULL, NULL    }
  #define LAST_CONTEXT_OPTION				{ "", 0, NULL, NULL, 0 }		
  
  #define DOTCONF_CB(__name)     const char *__name(command_t *cmd,             \
                                                    context_t *ctx)
  #define FUNC_ERRORHANDLER(_name) int _name(configfile_t * configfile,		  \
  											int type, long dc_errno, const char *msg)
  
  
  /* some flags that change the runtime behaviour of dotconf */
  #define NONE 0
  #define CASE_INSENSITIVE 1<<0	/* match option names case insensitive */
  #define DONT_SUBSTITUTE 1<<1    /* do not call substitute_env after read_arg */
  
  /* syslog style errors as suggested by Sander Steffann <sander@steffann.nl> */
  #ifdef HAVE_SYSLOG
  #include <syslog.h>
  
  #define DCLOG_EMERG		LOG_EMERG			/* system is unusable */
  #define DCLOG_ALERT		LOG_ALERT			/* action must be taken immediately */
  #define DCLOG_CRIT		LOG_CRIT			/* critical conditions */
  #define DCLOG_ERR		LOG_ERR				/* error conditions */
  #define DCLOG_WARNING	LOG_WARNING			/* warning conditions */
  #define DCLOG_NOTICE	LOG_NOTICE			/* normal but significant condition */
  #define DCLOG_INFO		LOG_INFO			/* informational */
  #define DCLOG_DEBUG		LOG_DEBUG			/* debug-level messages */
  
  #define DCLOG_LEVELMASK	LOG_PRIMASK			/* mask off the level value */
  
  #else /* HAVE_SYSLOG */
  
  #define DCLOG_EMERG     0       /* system is unusable */
  #define DCLOG_ALERT     1       /* action must be taken immediately */
  #define DCLOG_CRIT      2       /* critical conditions */
  #define DCLOG_ERR       3       /* error conditions */
  #define DCLOG_WARNING   4       /* warning conditions */
  #define DCLOG_NOTICE    5       /* normal but significant condition */
  #define DCLOG_INFO      6       /* informational */
  #define DCLOG_DEBUG     7       /* debug-level messages */
  
  #define DCLOG_LEVELMASK 7       /* mask off the level value */
  
  #endif /* HAVE_SYSLOG */
  
  /* callback types for dotconf_callback */
  
  /* error constants */
  #define ERR_NOERROR                0x0000
  #define ERR_PARSE_ERROR            0x0001
  #define ERR_UNKNOWN_OPTION         0x0002
  #define ERR_WRONG_ARG_COUNT        0x0003
  #define ERR_INCLUDE_ERROR          0x0004
  #define ERR_NOACCESS               0x0005
  #define ERR_USER                   0x1000   /* base for userdefined errno's */
  
  /* i needed this to check an ARG_LIST entry if it's toggled in one of my apps; maybe you do too */
  #define CFG_TOGGLED(_val) ( (_val[0] == 'Y'                                \
                               || _val[0] == 'y')                            \
                               || (_val[0] == '1')                           \
                               || ((_val[0] == 'o'                           \
                                   || _val[0] == 'O')                        \
                                  && (_val[1] == 'n'                         \
                                      || _val[1] == 'N')))
  
  enum callback_types
  {
  	ERROR_HANDLER = 1,
  	CONTEXT_CHECKER,
  };
  
  typedef enum callback_types			callback_types;
  typedef struct configfile_t			configfile_t;
  typedef struct configoption_t       configoption_t;
  typedef struct configoption_t		ConfigOption;
  typedef struct command_t        	command_t;
  typedef void                        context_t;
  typedef void                        info_t;
  
  typedef const char *(*dotconf_callback_t)(command_t *, context_t *);
  typedef int (*dotconf_errorhandler_t)(configfile_t *, int, unsigned long, const char *);
  typedef const char *(*dotconf_contextchecker_t)(command_t *, unsigned long);
  
  struct configfile_t
  {
  	/* ------ the fields in configfile_t are provided to the app via command_t's ; READ ONLY! --- */
  
  	FILE *stream;
  	char eof;                       /* end of file reached ? */
  	size_t size;					/* file size; cached on-demand for here-documents */
  
  	context_t *context;
  
  	configoption_t const **config_options;
  	int config_option_count;
  
  	/* ------ misc read-only fields ------------------------------------------------------------- */
  	char *filename;         		/* name of file this option was found in */
  	unsigned long line;           	/* line number we're currently at */
  	unsigned long flags;			/* runtime flags given to dotconf_open */
  
  	char *includepath;
  
  	/* ------ some callbacks for interactivity -------------------------------------------------- */
  	dotconf_errorhandler_t 		errorhandler;
  	dotconf_contextchecker_t 	contextchecker;
  
  	int (*cmp_func)(const char *, const char *, size_t);
  };
  
  struct configoption_t
  {
    const char *name;								/* name of configuration option */
    int type;										/* for possible values, see above */
    dotconf_callback_t callback;					/* callback function */
    info_t *info;									/* additional info for multi-option callbacks */
    unsigned long context;						/* context sensitivity flags */
  };
  
  struct command_t
  {
  	const char *name;             		/* name of the command */
  	configoption_t *option;		/* the option as given in the app; READ ONLY */
  
  	/* ------ argument data filled in for each line / command ----------------------------------- */
  	struct {
  		long value;                   	/* ARG_INT, ARG_TOGGLE */
  		char *str;                    	/* ARG_STR */
  		char **list;                  	/* ARG_LIST */
  	} data;
  	int arg_count;                		/* number of arguments (in data.list) */
  
  	/* ------ misc context information ---------------------------------------------------------- */
  	configfile_t *configfile;
  	context_t *context;
  };
  
  /* ------ dotconf_create() - create the configfile_t needed for further dot.conf fun ------------ */
  configfile_t *dotconf_create(char *, const configoption_t *, context_t *, unsigned long);
  
  /* ------ dotconf_cleanup() - tidy up behind dotconf_create and the parser dust ----------------- */
  void dotconf_cleanup(configfile_t *configfile);
  
  /* ------ dotconf_command_loop() - iterate through each line of file and handle the commands ---- */
  int dotconf_command_loop(configfile_t *configfile);
  
  /* ------ dotconf_command_loop_until_error() - like continue_line but return on the first error - */
  const char *dotconf_command_loop_until_error(configfile_t *configfile);
  
  /* ------ dotconf_continue_line() - check if line continuation is to be handled ----------------- */
  int dotconf_continue_line(char *buffer, size_t length);
  
  /* ------ dotconf_get_next_line() - read in the next line of the configfile_t ------------------- */
  int dotconf_get_next_line(char *buffer, size_t bufsize, configfile_t *configfile);
  
  /* ------ dotconf_get_here_document() - read the here document until delimit is found ----------- */
  char *dotconf_get_here_document(configfile_t *configfile, const char *delimit);
  
  /* ------ dotconf_invoke_command() - call the callback for command_t ---------------------------- */
  const char *dotconf_invoke_command(configfile_t *configfile, command_t *cmd);
  
  /* ------ dotconf_find_command() - iterate through all registered options trying to match ------- */
  configoption_t *dotconf_find_command(configfile_t *configfile, const char *command);
  
  /* ------ dotconf_read_arg() - read one argument from the line handling quoting and escaping ---- */
  /*
  	side effects: the char* returned by dotconf_read_arg is malloc() before, hence that pointer
                    will have to be free()ed later. 
  */
  char *dotconf_read_arg(configfile_t *configfile, char **line);
  
  /* ------ dotconf_handle_command() - parse, substitute, find, invoke the command found in buffer  */
  const char *dotconf_handle_command(configfile_t *configfile, char *buffer);
  
  /* ------ dotconf_register_option() - add a new option table to the list of commands ------------ */
  void dotconf_register_options(configfile_t *configfile, const configoption_t *options);
  
  /* ------ dotconf_warning() - handle the dispatch of error messages of various levels ----------- */
  int dotconf_warning(configfile_t *configfile, int level, unsigned long errnum, const char *, ...);
  
  /* ------ dotconf_callback() - register a special callback -------------------------------------- */
  void dotconf_callback(configfile_t *configfile, callback_types type, dotconf_callback_t);
  
  /* ------ dotconf_substitute_env() - handle the substitution on environment variables ----------- */
  char *dotconf_substitute_env(configfile_t *, char *);
  
  /* ------ internal utility function that verifies if a character is in the WILDCARDS list -- */
  int dotconf_is_wild_card(char value);
  
  /* ------ internal utility function that calls the appropriate routine for the wildcard passed in -- */
  int dotconf_handle_wild_card(command_t* cmd, char wild_card, char* path, char* pre, char* ext);
  
  /* ------ internal utility function that frees allocated memory from dotcont_find_wild_card -- */
  void dotconf_wild_card_cleanup(char* path, char* pre);
  
  /* ------ internal utility function to check for wild cards in file path -- */
  /* ------ path and pre must be freed by the developer ( dotconf_wild_card_cleanup) -- */ 
  int dotconf_find_wild_card(char* filename, char* wildcard, char** path, char** pre, char** ext);
  
  /* ------ internal utility function that compares two stings from back to front -- */
  int dotconf_strcmp_from_back(const char* s1, const char* s2);
  
  /* ------ internal utility function that determins if a string matches the '?' criteria -- */
  int dotconf_question_mark_match(char* dir_name, char* pre, char* ext);
  
  /* ------ internal utility function that determins if a string matches the '*' criteria -- */
  int dotconf_star_match(char* dir_name, char* pre, char* ext);
  
  /* ------ internal utility function that determins matches for filenames with   -- */
  /* ------ a '?' in name and calls the Internal Include function on that filename -- */
  int dotconf_handle_question_mark(command_t* cmd, char* path, char* pre, char* ext);
  
  /* ------ internal utility function that determins matches for filenames with   -- */
  /* ------ a '*' in name and calls the Internal Include function on that filename -- */
  int dotconf_handle_star(command_t* cmd, char* path, char* pre, char* ext);
  
  
  
  #ifdef __cplusplus
  } /* extern "C" */
  #endif
  
  #endif /* DOTCONF_H */
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_global.h
  ============================================================
  $ cvs update -p -r1.1 lmtp2nntp_global.h
  /*
  **  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  **  mailer which forwards mails as Usenet news articles via NNTP.
  **  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  **
  **  This program is free software; you can redistribute it and/or
  **  modify it under the terms of the GNU General Public  License
  **  as published by the Free Software Foundation; either version
  **  2.0 of the License, or (at your option) any later version.
  **
  **  This program is distributed in the hope that it will be useful,
  **  but WITHOUT ANY WARRANTY; without even the implied warranty of
  **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  **  General Public License for more details.
  **
  **  You should have received a copy of the GNU General Public License
  **  along with this file; if not, write to the Free Software
  **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  **  USA, or contact the OSSP project <ossp@ossp.org>.
  **
  **  lmtp2nntp.h: LMTP to NNTP global header
  */
  
  #ifndef __LMTP2NNTP_H__
  #define __LMTP2NNTP_H__
  
  #ifdef HAVE_CONFIG_H
  #include "config.h"
  #endif
  #if defined(HAVE_DMALLOC_H) && defined(DMALLOC)
  #include "dmalloc.h"
  #endif
  
  #define log0(ctx,level,msg) \
      l2_channel_log((ctx)->l2, L2_LEVEL_##level, "%P" msg)
  #define log1(ctx,level,msg,a1) \
      l2_channel_log((ctx)->l2, L2_LEVEL_##level, "%P" msg, a1)
  #define log2(ctx,level,msg,a1,a2) \
      l2_channel_log((ctx)->l2, L2_LEVEL_##level, "%P" msg, a1, a2)
  #define log3(ctx,level,msg,a1,a2,a3) \
      l2_channel_log((ctx)->l2, L2_LEVEL_##level, "%P" msg, a1, a2, a3)
  #define log4(ctx,level,msg,a1,a2,a3,a4) \
      l2_channel_log((ctx)->l2, L2_LEVEL_##level, "%P" msg, a1, a2, a3, a4)
  
  #define STMT(stuff) do { stuff } while (0)
  #define CU(returncode) STMT( rc = returncode; goto CUS; )
  #define VCU STMT( goto CUS; )
  
  #endif /* __LMTP2NNTP_H__ */
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_lmtp.c
  ============================================================
  $ cvs update -p -r1.1 lmtp2nntp_lmtp.c
  /*
  **  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  **  mailer which forwards mails as Usenet news articles via NNTP.
  **  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  **
  **  This program is free software; you can redistribute it and/or
  **  modify it under the terms of the GNU General Public  License
  **  as published by the Free Software Foundation; either version
  **  2.0 of the License, or (at your option) any later version.
  **
  **  This program is distributed in the hope that it will be useful,
  **  but WITHOUT ANY WARRANTY; without even the implied warranty of
  **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  **  General Public License for more details.
  **
  **  You should have received a copy of the GNU General Public License
  **  along with this file; if not, write to the Free Software
  **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  **  USA, or contact the OSSP project <ossp@ossp.org>.
  **
  **  lmtp.c: Local Mail Transfer Protocol (LMTP) server library
  */
  
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  #include <unistd.h>
  #include <ctype.h>
  #include <errno.h>
  
  #include "lmtp2nntp_lmtp.h"
  
  #ifdef HAVE_CONFIG_H
  #include "config.h"
  #endif
  #if defined(HAVE_DMALLOC_H) && defined(DMALLOC)
  #include "dmalloc.h"
  #endif
  
  #ifndef NUL
  #define NUL '\0'
  #endif
  
  /* maximum LMTP protocol line length */
  #define LMTP_LINE_MAXLEN 1024
  
  /* maximum number of verbs/callbacks to be registered */
  #define LMTP_MAXVERBS 32
  
  typedef struct {
      int   rl_cnt;
      char *rl_bufptr;
      char  rl_buf[LMTP_LINE_MAXLEN];
  } lmtp_readline_t;
  
  typedef struct {
      char       *verb;
      lmtp_cb_t   cb;
      void       *ctx;
  } lmtp_dispatch_t;
  
  struct lmtp_st {
      lmtp_io_t         io;       /* select, read, write functions */
      lmtp_readline_t   rl;       /* a function to read in a single line */
      lmtp_dispatch_t **dispatch; /* LMTP commands to be dispatched */
  };
  
  ssize_t lmtp_fd_read(void *_ctx, void *buf, size_t buflen)
  {
      lmtp_fd_t *ctx = (lmtp_fd_t *)_ctx;
      return read(ctx->fd, buf, buflen);
  }
  
  ssize_t lmtp_fd_write(void *_ctx, const void *buf, size_t buflen)
  {
      lmtp_fd_t *ctx = (lmtp_fd_t *)_ctx;
      return write(ctx->fd, buf, buflen);
  }
  
  static int verbindex(lmtp_t *lmtp, char *verb)
  {
      /* returns the index of the verb or -1 if verb not registered */
      int i;
  
      for (i = 0; (i < LMTP_MAXVERBS) && (lmtp->dispatch[i] != NULL); i++)
          if (strcasecmp(lmtp->dispatch[i]->verb, verb) == 0) 
              return i;
      return -1;
  }
  
  static lmtp_rc_t lmtp_cb_default(lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *ctx)
  {
      lmtp_res_t res;
      lmtp_rc_t rc = LMTP_OK;
  
      res.statuscode = "500";
      res.dsncode    = "5.5.1";
      res.statusmsg  = "Command unrecognized.";
      lmtp_response(lmtp, &res);
      return rc;
  }
  
  lmtp_t *lmtp_create(lmtp_io_t *io)
  {
      /*  create a lmtp structure allocating memory for it and initializing it.
       *  A lmtp_cb_default() callback is registered for the default "" verb.
       *  The _rfd_ and _wfd_ args are passed to the read(), write() 
       *  functions and must have meaning for them. If _io_ is NULL,
       *  the system io functions are used. You can provide an _io_ structure
       *  and specify alternate functions. Ommiting one or more functions inside
       *  the _io_ structure by NULLing it causes use of the system default
       *  function.
       */
      lmtp_t *lmtp;
  
      if ((lmtp = (lmtp_t *)malloc(sizeof(lmtp_t))) == NULL) 
          return NULL;
  
      if (io == NULL) 
          return NULL;
  
      lmtp->io.ctx    = io->ctx;
      lmtp->io.select = io->select;
      lmtp->io.read   = io->read;
      lmtp->io.write  = io->write;
  
      lmtp->rl.rl_cnt = 0;
      lmtp->rl.rl_bufptr = NULL;
      lmtp->rl.rl_buf[0] = NUL;
      
      if ((lmtp->dispatch = (lmtp_dispatch_t **)malloc(sizeof(void *)*LMTP_MAXVERBS)) == NULL)
          return NULL;
      lmtp->dispatch[0] = NULL;
  
      lmtp_register(lmtp, "", lmtp_cb_default, NULL, NULL, NULL);
  
      return lmtp;
  }
  
  void lmtp_destroy(lmtp_t *lmtp)
  {
      int i;
  
      if (lmtp == NULL)
          return;
  
      for (i = 0; (i < LMTP_MAXVERBS) && (lmtp->dispatch[i] != NULL); i++) {
          free(lmtp->dispatch[i]->verb); /* lmtp_register() */
          free(lmtp->dispatch[i]);       /* lmtp_register() */
      }
      free(lmtp->dispatch);              /* lmtp_create() */
      free(lmtp);                        /* lmtp_create() */
      return;
  }
  
  lmtp_rc_t lmtp_readline(lmtp_t *lmtp, char *buf, size_t buflen)
  {
      /* read a line (characters until NL) from input stream */
      size_t n;
      char c;
      lmtp_readline_t *rl = &lmtp->rl;
  
      if (lmtp == NULL)
          return LMTP_ERR_ARG;
      for (n = 0; n < buflen-1;) {
  
          /* fetch one character (but read more) */
          if (rl->rl_cnt <= 0) {
              do {
                  rl->rl_cnt = lmtp->io.read(lmtp->io.ctx, rl->rl_buf, LMTP_LINE_MAXLEN);
              } while (rl->rl_cnt == -1 && errno == EINTR);
              if (rl->rl_cnt == -1)
                  return LMTP_ERR_SYSTEM;
              if (rl->rl_cnt == 0)
                  return LMTP_EOF;
              rl->rl_bufptr = rl->rl_buf;
          }
  
          /* act on fetched character */
          rl->rl_cnt--;
          c = *rl->rl_bufptr++;
          if (c == '\r')
              continue;       /* skip copying CR */
          if (c == '\n')
              break;          /* end of line */
          buf[n++] = c;       /* output char into given buffer */
  
      }
      buf[n] = NUL;          /* string termination */
      if (n == (buflen-1)) 
          return LMTP_ERR_OVERFLOW;
      return LMTP_OK;
  }
  
  lmtp_rc_t lmtp_readmsg(lmtp_t *lmtp, char **cppBuf, size_t maxlen)
  {
      /*  read lines until end of message, unescape dots.
       *  on success, returns a buffer which has to be free(3)d by the caller
       *
       *  NOTE: the underlying lmtp_readline() already reduces any
       *        CR/LF combination to a string terminating zero. Callers of this
       *        function must assume multiline messages have lines terminated
       *        with NL only.
       *
       *  RFC0821 "Simple Mail Transfer Protocol" [excerpt]
       *  4.5.2. TRANSPARENCY
       *  When a line of mail text is received by the receiver-SMTP it checks
       *  the line.  If the line is composed of a single period it is the end of
       *  mail.  If the first character is a period and there are other
       *  characters on the line, the first character is deleted.
       */
      lmtp_rc_t rc = LMTP_OK;
      char *cpBuf;       /* buffer as a whole */
      char *cpBufrealloc;/* buffer before realloc */
      char *cpPtr;       /* write cursor */
      char *cpLine;      /* start of the current line (see offsetline) */
      size_t nBuf;       /* size of buffer, doubled through realloc until maximum reached */
      size_t offset;     /* required when cpBuf changed through realloc */
      size_t offsetline; /* memorizing start of line when reallocing in the middle of a line */
  
      for (nBuf = 4096; nBuf > maxlen; nBuf = nBuf >> 1);
      if ((cpBuf = (char *)malloc(nBuf)) == NULL)
          return LMTP_ERR_MEM;
      *cppBuf = cpBuf;                           /* tell caller about the buffer */
      cpPtr = cpBuf;                             /* initialize write cursor */
      cpLine = cpBuf;                            /* initialize start of line */
      while (1) {
          rc = lmtp_readline(lmtp, cpPtr, nBuf-(cpPtr-cpBuf));
          if (rc == LMTP_ERR_OVERFLOW) {
              if (nBuf == maxlen) 
                  return LMTP_ERR_OVERFLOW;
              offset = nBuf-1;                    /* write cursor offset is end of buffer */
              offsetline = cpLine - cpBuf;        /* remember start of line offset */
              nBuf *= 2;                          /* increase buffer */
              if (nBuf > maxlen) 
                  nBuf = maxlen;                  /* but don't exceed maximum */
              if ((cpBufrealloc = (char *)realloc(cpBuf, nBuf)) == NULL) {
                  free(cpBuf);
                  return LMTP_ERR_MEM;
              }
              cpBuf = cpBufrealloc;
              *cppBuf = cpBuf;                    /* tell caller about the new buffer */
              cpPtr = cpBuf + offset;             /* recover write cursor */
              cpLine = cpBuf + offsetline;        /* recover start of line */
          }
          else if (rc == LMTP_OK) {
              if (strcmp(cpLine, ".") == 0) {     /* dot alone is end of message */
                  *cpLine = NUL;                 /* hide dot from caller */
                  break;
              }
              if (*cpLine == '.')                 /* escaped dot */
                  memmove(cpLine, cpLine+1, strlen(cpLine+1)+1);
              cpPtr += strlen(cpPtr);             /* write cursor to the end */
              *cpPtr++ = '\n';                    /* artifical NL */
              *cpPtr = NUL;                      /* artifical end of string */
              cpLine = cpPtr;                     /* start of line */
          }
          else break;                             /* rc == LMTP_ERR* */
      }
      return rc;
  }
  
  lmtp_rc_t lmtp_request(lmtp_t *lmtp, lmtp_req_t *req)
  {  
      /*  reads a line and attaches the buffer to req->msg;
       *  pulls the verb out and attaches the verb to req->verb;
       * 
       *  LMTP_OK           req->msg set, req->verb set  means normal operation
       *  LMTP_OK           req->msg set, req->verb ""   means no verb seen
       *  LMTP_EOF          req->msg set, req->verb NULL means eof
       *  LMTP_ERR_OVERFLOW req->msg set, req->verb NULL means buf overflow
       *  LMTP_ERR_SYSTEM   req->msg set, req->verb NULL means system error
       *
       *  RFC0821 "Simple Mail Transfer Protocol" [excerpts]
       *  4.1.1. COMMAND SEMANTICS
       *  The command codes themselves are alphabetic characters terminated by
       *  <SP> if parameters follow and <CRLF> otherwise.
       *  4.1.2. COMMAND SYNTAX
       *  <SP> ::= the space character (ASCII code 32)
       */
      lmtp_rc_t rc;
      char *verb;
      int verblen;
      int i;
  
      req->verb = NULL;
      if ((req->msg = (char *)malloc(LMTP_LINE_MAXLEN)) == (char *)NULL)
          return LMTP_ERR_MEM;
      if ((rc = lmtp_readline(lmtp, req->msg, LMTP_LINE_MAXLEN)) != LMTP_OK)
          return rc;
      for (i = 0; (i < LMTP_MAXVERBS) && (lmtp->dispatch[i] != NULL); i++) {
          if ((verb = lmtp->dispatch[i]->verb) != NULL) {  /* skip NULL verb */
              if ((verblen = strlen(verb)) == 0) 
                  continue; /* skip  ""  verb */
              if (   (strlen(req->msg) >= verblen)
                  && (strncasecmp(req->msg, verb, verblen) == 0)
                  && (   (req->msg[verblen] == NUL)
                      || (req->msg[verblen] == ' ') )           ) {
                  req->verb = verb;
                  return LMTP_OK;
              }
          }
      }
      req->verb = "";
      return LMTP_OK;
  }
  
  lmtp_rc_t lmtp_response(lmtp_t *lmtp, lmtp_res_t *res)
  {
      /*  write the status message. For multiline status messages it is
       *  neccessary to repeat the status and dsn codes for every line with a
       *  dash after the status for every line but the last one
       */
      lmtp_rc_t rc = LMTP_OK;
      int rv;
      int dash;
      int len;
      char *cpS;
      char *cpE;
      char formatbuf[LMTP_LINE_MAXLEN];
  
      if (   strlen(res->statuscode) != 3
          || !isdigit((int)res->statuscode[0])
          || !isdigit((int)res->statuscode[1])
          || !isdigit((int)res->statuscode[2]))
          return LMTP_ERR_ARG;
  
      if (res->dsncode != NULL) {
          if (   (strlen(res->dsncode) != 5)
              || !isdigit((int)res->dsncode[0])
              || (res->dsncode[1] != '.')
              || !isdigit((int)res->dsncode[2])
              || (res->dsncode[3] != '.')
              || !isdigit((int)res->dsncode[4])
              || (res->dsncode[0] != res->statuscode[0]))
              return LMTP_ERR_ARG;
      }
  
      cpS = res->statusmsg;
      for (dash = 1; dash == 1; ) {
          if ((cpE = strchr(cpS, '\n')) == NULL) {
              cpE = cpS+strlen(cpS);
              dash = 0;
          }
          if (res->dsncode != NULL)
              len = sprintf(formatbuf, "%3.3s%c%5.5s ", res->statuscode, dash ? '-' : ' ', res->dsncode);
          else
              len = sprintf(formatbuf, "%3.3s%c", res->statuscode, dash ? '-' : ' ');
          if ((len + cpE - cpS + 2) > sizeof(formatbuf)) { /* status + line + '\r\n' does not fit into formatbuf */
              dash = 1;
              if ((cpE = cpS + sizeof(formatbuf) - 2 - len) <= cpS) /* no space for line at all */
                  return LMTP_ERR_ARG;
          }
          strncpy(formatbuf+len, cpS, cpE-cpS);
          len += (cpE-cpS);
          formatbuf[len++] = '\r';
          formatbuf[len++] = '\n';
          do {
              rv = lmtp->io.write(lmtp->io.ctx, formatbuf, len);
          } while (rv == -1 && errno == EINTR);
          if (rv == -1)
              return LMTP_ERR_SYSTEM;
          cpS = cpE;
          if (*cpS == '\n')
              cpS++;
      }
      return rc;
  }
  
  char *lmtp_error(lmtp_rc_t rc)
  {
      /*  get an error message matching the given lmtp_rc_t code usually
       *  returned by a previously called function
       */
      char *str;
                                        str = "LMTP: errorcode has no description";
      if      (rc == LMTP_OK          ) str = "LMTP: no error";
      else if (rc == LMTP_EOF         ) str = "LMTP: eof";
      else if (rc == LMTP_ERR_SYSTEM  ) str = "LMTP: see errno";
      else if (rc == LMTP_ERR_MEM     ) str = "LMTP: dynamic memory allocation failed";
      else if (rc == LMTP_ERR_OVERFLOW) str = "LMTP: static allocated memory exhausted";
      else if (rc == LMTP_ERR_ARG     ) str = "LMTP: invalid arg was passed to function";
      else if (rc == LMTP_ERR_UNKNOWN ) str = "LMTP: guru meditation";
      return str;
  }
  
  lmtp_rc_t lmtp_register(lmtp_t *lmtp, char *verb, lmtp_cb_t cb, void *ctx, lmtp_cb_t *oldcb, void **oldctx)
  {
      /*  For _lmtp_ structure, register a _verb_ and associate a callback
       *  function _cb_ to it. A context can be specified which will be passed
       *  to the callback function for every call. Consider the context being
       *  user data. The library itself does not care about the context except
       *  passing it along.  If the verb was registered previously, the
       *  registration is replaced and if _oldcb_ and/or _oldctx_ is given, the
       *  previous registration is returned. Calling the previously registered
       *  callbacks from within the newly registered callback effectively allows
       *  hooking or chaining to a previous registered callback. The _ctx_,
       *  _oldcb_ and _oldctx_ are optional and might be passed as NULL in case
       *  you don't care. Setting _cb_ to NULL means to check only for a
       *  previous registration;
       */
      lmtp_rc_t rc = LMTP_OK;
      int overload = 0; /* overload (replacement) detected has to return old oldcb
                           and/or oldctx, no overload requires growth of dispatch table */
      int i;
  
      if (cb == NULL) { /* checking for existing callback only */
          i = verbindex(lmtp, verb);
          if (oldcb  != NULL) 
              *oldcb  = (i == -1) ? NULL : lmtp->dispatch[i]->cb;
          if (oldctx != NULL) 
              *oldctx = (i == -1) ? NULL : lmtp->dispatch[i]->ctx;
          return LMTP_OK;
      }
  
      for (i = 0; lmtp->dispatch[i] != NULL; i++) {
          if (strcasecmp(verb, lmtp->dispatch[i]->verb) == 0) {
              overload = 1;
              if (oldcb  != NULL) 
                  *oldcb  = lmtp->dispatch[i]->cb;
              if (oldctx != NULL) 
                  *oldctx = lmtp->dispatch[i]->ctx;
              break;
          }
      }
      if (i > LMTP_MAXVERBS-2) 
          return LMTP_ERR_OVERFLOW;
  
      if (!overload) {
          if ((lmtp->dispatch[i] = 
              (lmtp_dispatch_t *)malloc(sizeof(lmtp_dispatch_t))) == NULL)
              return LMTP_ERR_MEM;
          lmtp->dispatch[i+1] = NULL;
          if (oldcb  != NULL) 
              *oldcb  = NULL;
          if (oldctx != NULL) 
              *oldctx = NULL;
      }
  
      lmtp->dispatch[i]->verb = strdup(verb);
      lmtp->dispatch[i]->cb   = cb;
      lmtp->dispatch[i]->ctx  = ctx;
  
      return rc;
  }
  
  lmtp_rc_t lmtp_loop(lmtp_t *lmtp)
  {
      /*  Print a welcome message then execute a request/ dispatch loop until
       *  request signals no more data. Each request is checked to contain a
       *  registered verb and if a verb is found the correspondig callback is
       *  executed. The lmtp_create() function usually cares to register a
       *  default callback in order to handle unregistered verbs. The psoudoverb
       *  for default is the empty string "" and the callback for this verb can
       *  be overridden.
       */
      lmtp_rc_t rc = LMTP_OK;
      lmtp_req_t req;
      lmtp_res_t res;
      char *verb;
      int i;
  
      req.verb = "";
      req.msg = NULL;
  
      res.statuscode = "220";
      res.dsncode    = NULL;
      res.statusmsg  = "LMTP Service ready.";
      if ((rc = lmtp_response(lmtp, &res)) != LMTP_OK) 
          return rc;
  
      while ((rc = lmtp_request(lmtp, &req)) == LMTP_OK) {
          verb = req.verb;
          if ((i = verbindex(lmtp, verb)) != -1) {
              rc = lmtp->dispatch[i]->cb(lmtp, &lmtp->io, &req, lmtp->dispatch[i]->ctx);
              if (req.msg != NULL)
                  free(req.msg);
              req.verb = "";
              req.msg = NULL;
  
              if (rc != LMTP_OK) 
                  break;
          }
      }
      return rc;
  }
  
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_lmtp.h
  ============================================================
  $ cvs update -p -r1.1 lmtp2nntp_lmtp.h
  /*
  **  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  **  mailer which forwards mails as Usenet news articles via NNTP.
  **  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  **
  **  This program is free software; you can redistribute it and/or
  **  modify it under the terms of the GNU General Public  License
  **  as published by the Free Software Foundation; either version
  **  2.0 of the License, or (at your option) any later version.
  **
  **  This program is distributed in the hope that it will be useful,
  **  but WITHOUT ANY WARRANTY; without even the implied warranty of
  **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  **  General Public License for more details.
  **
  **  You should have received a copy of the GNU General Public License
  **  along with this file; if not, write to the Free Software
  **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  **  USA, or contact the OSSP project <ossp@ossp.org>.
  **
  **  lmtp.h: Local Mail Transfer Protocol (LMTP) server library (API)
  */
  
  #ifndef __LMTP_H__
  #define __LMTP_H__
  
  #include <sys/types.h>
  #include <sys/uio.h>
  #include <unistd.h>
  #include <fcntl.h>
  
  struct lmtp_st;
  typedef struct lmtp_st lmtp_t;
  
  typedef struct {
      void    *ctx;
      int     (*select)(void *, fd_set *, fd_set *, fd_set *, struct timeval *);
      ssize_t (*read)(void *, void *, size_t);
      ssize_t (*write)(void *, const void *, size_t);
  } lmtp_io_t;
  
  typedef struct {
      char *verb;
      char *msg;
  } lmtp_req_t;
  
  typedef struct {
      char *statuscode;
      char *dsncode;
      char *statusmsg;
  } lmtp_res_t;
  
  typedef enum {
      LMTP_OK,
      LMTP_EOF,
      LMTP_ERR_SYSTEM,
      LMTP_ERR_MEM,
      LMTP_ERR_OVERFLOW,
      LMTP_ERR_ARG,
      LMTP_ERR_UNKNOWN
  } lmtp_rc_t;
  
  typedef struct {
      int fd;
  } lmtp_fd_t;
  
  typedef lmtp_rc_t (*lmtp_cb_t)(lmtp_t *, lmtp_io_t *, lmtp_req_t *, void *);
  
  lmtp_t     *lmtp_create  (lmtp_io_t *);
  void        lmtp_destroy (lmtp_t *);
  lmtp_rc_t   lmtp_readline(lmtp_t *, char *, size_t);
  lmtp_rc_t   lmtp_readmsg (lmtp_t *, char **, size_t);
  lmtp_rc_t   lmtp_request (lmtp_t *, lmtp_req_t *);
  lmtp_rc_t   lmtp_response(lmtp_t *, lmtp_res_t *);
  char       *lmtp_error   (lmtp_rc_t);
  lmtp_rc_t   lmtp_register(lmtp_t *, char *, lmtp_cb_t, void *, lmtp_cb_t *, void **);
  lmtp_rc_t   lmtp_loop    (lmtp_t *);
  ssize_t     lmtp_fd_read (void *, void *, size_t);
  ssize_t     lmtp_fd_write(void *, const void *, size_t);
  
  #endif /* __LMTP_H__ */
  
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs update -p -r1.1 lmtp2nntp_main.c
  /*
  **  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  **  mailer which forwards mails as Usenet news articles via NNTP.
  **  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  **
  **  This program is free software; you can redistribute it and/or
  **  modify it under the terms of the GNU General Public  License
  **  as published by the Free Software Foundation; either version
  **  2.0 of the License, or (at your option) any later version.
  **
  **  This program is distributed in the hope that it will be useful,
  **  but WITHOUT ANY WARRANTY; without even the implied warranty of
  **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  **  General Public License for more details.
  **
  **  You should have received a copy of the GNU General Public License
  **  along with this file; if not, write to the Free Software
  **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  **  USA, or contact the OSSP project <ossp@ossp.org>.
  **
  **  lmtp2nntp.c: LMTP to NNTP main procedure
  */
  
  #include <stdlib.h>
  #include <stdio.h>
  #include <unistd.h>
  #include <errno.h>
  #include <string.h>
  #include <fcntl.h>
  #include <sys/utsname.h>
  #include <sys/time.h>
  #include <sys/types.h>
  #include <sys/wait.h>
  #include <sys/stat.h>
  #include <signal.h>
  #include <pwd.h>
  
  /* third party (included) */
  #include "lmtp2nntp_argz.h"
  #include "lmtp2nntp_shpat.h"
  #include "lmtp2nntp_daemon.h"
  
  /* third party (linked in) */
  #include "str.h"
  #include "l2.h"
  #include "var.h"
  
  /* library version check (compile-time) */
  #define  L2_VERSION_HEX_REQ 0x001200
  #define  L2_VERSION_STR_REQ "0.1.0"
  #define STR_VERSION_HEX_REQ 0x009206
  #define STR_VERSION_STR_REQ "0.9.6"
  #ifdef L2_VERSION_HEX
  #if L2_VERSION_HEX < L2_VERSION_HEX_REQ
  #error "require a newer version of OSSP L2"
  #endif
  #endif
  #ifdef STR_VERSION_HEX
  #if STR_VERSION_HEX < STR_VERSION_HEX_REQ
  #error "require a newer version of OSSP Str"
  #endif
  #endif
  
  /* own headers */
  #include "lmtp2nntp_global.h"
  #ifdef HAVE_CONFIG_H
  #include "config.h"
  #endif
  #if defined(HAVE_DMALLOC_H) && defined(DMALLOC)
  #include "dmalloc.h"
  #endif
  #include "lmtp2nntp_lmtp.h"
  #include "lmtp2nntp_nntp.h"
  #include "lmtp2nntp_msg.h"
  #include "sa.h"
  #define _LMTP2NNTP_VERSION_C_AS_HEADER_
  #include "lmtp2nntp_version.c"
  #undef  _LMTP2NNTP_VERSION_C_AS_HEADER_
  
  #ifndef FALSE
  #define FALSE (1 != 1)
  #endif
  #ifndef TRUE
  #define TRUE (!FALSE)
  #endif
  
  #ifndef NUL
  #define NUL '\0'
  #endif
  
  #define ERR_EXECUTION 1
  #define ERR_DELIVERY -2
  
  #define STDSTRLEN 512
  #define MAXNEWSSERVICES 16
  #define MAXACLS 32
  
  static lmtp_rc_t lmtp_cb_lhlo(lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *ctx);
  static lmtp_rc_t lmtp_cb_mail(lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *ctx);
  static lmtp_rc_t lmtp_cb_rcpt(lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *ctx);
  static lmtp_rc_t lmtp_cb_data(lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *ctx);
  static lmtp_rc_t lmtp_cb_noop(lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *ctx);
  static lmtp_rc_t lmtp_cb_rset(lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *ctx);
  static lmtp_rc_t lmtp_cb_quit(lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *ctx);
  
  static int helo_rfc0821domain(char *msg, char **domain);
  static int helo_rfc1035domain(char *msg, char **domain);
  
  struct session {
      int     lhlo_seen;
      char   *lhlo_domain;
  };
  
  static void catchsignal(int sig, ...);
  static void initsession(struct session *session);
  static void resetsession(struct session *session);
  int groupmatch(char *, size_t, char *);
  
  struct ns {
      char           *h;    /* host */
      char           *p;    /* port */
      sa_addr_t      *saa;  /* socket address abstraction */
      sa_t           *sa;   /* socket abstraction */
      nntp_t         *nntp;
      nntp_rc_t       rc;
      l2_channel_t   *l2;
  };
  
  struct acl {
      char      *acl;
      int        not;
      sa_addr_t *saa;
      size_t     prefixlen;
  };
  
  typedef struct {
      l2_context_t    ctx;
      char           *progname;
      char           *option_logfile;
      int             option_groupmode;
      int             option_operationmode;
      char           *option_operationmodefakestatus;
      char           *option_operationmodefakedsn;
      int             option_maxmessagesize;
      char           *azHeaderValuePairs;
      size_t          asHeaderValuePairs;
      int             option_timeout_lmtp_accept;
      int             option_timeout_lmtp_read;
      int             option_timeout_lmtp_write;
      int             option_timeout_nntp_connect;
      int             option_timeout_nntp_read;
      int             option_timeout_nntp_write;
      char           *option_mailfrom;
      char           *option_restrictheader;
      unsigned int    option_levelmask;
      char           *option_pidfile;
      int             option_killflag;
      uid_t           option_uid;
      int             option_daemon;
      int             option_aclc;
      struct acl      option_acl[MAXACLS];
      int             option_veryverbose;
      int             option_childsmax;
      int             active_childs;
      l2_env_t       *l2_env;
      l2_channel_t   *l2;
      sa_addr_t      *saaAltio;
      sa_t           *saAltio;
      char           *cpBindh;
      char           *cpBindp;
      sa_addr_t      *saaBind;
      sa_t           *saBind;
      sa_addr_t      *saaIO;
      sa_t           *saIO;
      int             fdIOi;
      int             fdIOo;
      int             nsc;
      struct ns       ns[MAXNEWSSERVICES];
      char           *azGroupargs;
      size_t          asGroupargs;
      struct          session session;
      msg_t          *msg;
      struct utsname  uname;
  } lmtp2nntp_t;
  
  static var_config_t ctx_lookup_cfg = {
      '$',          /* varinit       */ 
      '{',          /* startdelim    */ 
      '}',          /* enddelim      */ 
      '[',          /* startindex    */ 
      ']',          /* endindex      */ 
      '#',          /* current_index */ 
      '\\',         /* escape        */ 
      "a-zA-Z0-9_.-" /* namechars     */ 
  };
  
  static var_rc_t ctx_lookup(
      void *_ctx, 
      const char *var_ptr, size_t var_len, int var_idx,
      const char **val_ptr, size_t *val_len, size_t *val_size)
  {
      lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx;
      const char *name;
      size_t len;
      size_t n;
      char *cp;
      var_rc_t rc;
  
      log2(ctx, DEBUG, "lookup variable \"%s\" (%d)", 
           var_ptr /* FIXME: NUL-termination? */, var_len);
      rc = VAR_ERR_UNDEFINED_VARIABLE;
      if (strncasecmp(var_ptr, "lmtp2nntp.version", var_len) == 0) {
      }
      else if (strncasecmp(var_ptr, "os.name", var_len) == 0) {
      }
      else if (strncasecmp(var_ptr, "os.version", var_len) == 0) {
      }
      else if (var_len > 8 && strncasecmp(var_ptr, "msg.hdr.", 8) == 0) {
          name = var_ptr + 8;
          len = strlen(name);
          if (ctx == NULL)
              return VAR_ERR_UNDEFINED_VARIABLE;
          if (ctx->msg == NULL)
              return VAR_ERR_UNDEFINED_VARIABLE;
          if (ctx->msg->azHeaders == NULL)
              return VAR_ERR_UNDEFINED_VARIABLE;
          cp = NULL;
          while ((cp = argz_next(ctx->msg->azHeaders, ctx->msg->asHeaders, cp)) != NULL) {
              char *cpVar, *cpVal;
              int nVar, nVal;
              cpVar = cp;
              nVar = strlen(cpVar);
              if ((cp = argz_next(ctx->msg->azHeaders, ctx->msg->asHeaders, cp)) == NULL)
                  break;
              cpVal = cp;
              nVal = strlen(cpVal);
              if (len == (nVar-1) && strncasecmp(cpVar, name, len) == 0 && cpVar[len] == ':') {
                  *val_ptr = cpVal;
                  *val_len = nVal;
                  *val_size = 0;
                  rc = VAR_OK;
              }
          }
      }
      if (rc == VAR_OK)
          log4(ctx, DEBUG, "lookup variable \"%s\" (%d) ok: result is \"%s\" (%d)", 
               var_ptr /* FIXME: NUL-termination? */, var_len, *val_ptr, *val_len);
      else
          log3(ctx, DEBUG, "lookup variable \"%s\" (%d) failed: %s", 
               var_ptr /* FIXME: NUL-termination? */, var_len, var_strerror(rc));
      return rc;
  }
  
  
  static void lmtp_gfs_ns(struct ns *);
  static void lmtp_gfs_lhlo(lmtp2nntp_t *);
  static void lmtp_gfs_rset(lmtp2nntp_t *);
  static void lmtp_gfs_quit(lmtp2nntp_t *);
  
  enum {
      GROUPMODE_ARG,
      GROUPMODE_ENVELOPE,
      GROUPMODE_HEADER
  };
  
  enum {
      OPERATIONMODE_FAKE,
      OPERATIONMODE_POST,
      OPERATIONMODE_FEED
  };
  
  /*
   * print usage information
   */
  static void usage(char *command)
  {
      /*  use
       *  perl <lmtp2nntp.c -e 'while (<>) { if(m/\/\*POD (.*) .*\*\//) { $_=$1; s/.<(.*?)>/$1/g ; print "\"$_ \"\n" };}'
       *  to pull the USAGE string out of this source
       */
      fprintf(stderr, 
              "USAGE: %s "
              "[-C childsmax] "
              "[-D] "
              "[-K] "
              "[-P pidfile] "
              "[-V] "
              "[-a addr/mask[,addr/mask[,...]] "
              "[-b addr[:port]|-|path[:perms]] "
              "[-c addr[:port]] "
              "[-d addr[:port][,addr[:port], ...]] "
              "[-g groupmode] "
              "[-h header:value] "
              "[-l level[:logfile]] "
              "[-m mailfrom] "
              "[-n nodename] "
              "[-o operationmode] "
              "[-r restrictheader] "
              "[-s size] "
              "[-t name=sec[,name=sec[,...]] "
              "[-u uid] "
              "[-v] "
              "newsgroup [newsgroup ...] "
              "\n",
              command);
      return;
  }
  
  static ssize_t hook_lmtp_read(void *_ctx, void *buf, size_t nbytes)
  {
      lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx;
      ssize_t rc;
      size_t n;
      sa_rc_t rv;
  
      if (ctx->saIO != NULL) {
          if ((rv = sa_read(ctx->saIO, buf, nbytes, &n)) != SA_OK)
              rc = -1;
          else
              rc = (ssize_t)n;
      }
      else
          rc = read(ctx->fdIOi, buf, nbytes);
      if (rc == -1)
          log0(ctx, TRACE, "LMTP read error: %m");
      else
          log3(ctx, TRACE, "LMTP %5d << \"%{text}D\"", rc, buf, rc);
      log1(ctx, DEBUG, "hook_lmtp_read() return, rc=%d", rc);
      return rc;
  }
  
  static ssize_t hook_lmtp_write(void *_ctx, const void *buf, size_t nbytes)
  {
      lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx;
      ssize_t rc;
      size_t n;
      sa_rc_t rv;
  
      log3(ctx, TRACE, "LMTP %5d >> \"%{text}D\"", nbytes, buf, nbytes);
      if (ctx->saIO != NULL) {
          if ((rv = sa_write(ctx->saIO, buf, nbytes, &n)) != SA_OK)
              rc = -1;
          else
              rc = (ssize_t)n;
      }
      else
          rc = write(ctx->fdIOo, buf, nbytes);
      if (rc == -1)
          log0(ctx, TRACE, "LMTP write error: %m");
      return rc;
  }
  
  static ssize_t hook_nntp_read(void *_ctx, void *buf, size_t nbytes)
  {
      struct ns *ctx = (struct ns *)_ctx;
      ssize_t rc;
      size_t n;
      sa_rc_t rv;
  
      if ((rv = sa_read(ctx->sa, buf, nbytes, &n)) != SA_OK)
          rc = -1;
      else
          rc = (ssize_t)n;
      if (rc == -1)
          log0(ctx, TRACE, "NNTP read error: %m");
      else
          log3(ctx, TRACE, "NNTP %5d << \"%{text}D\"", rc, buf, rc);
      return rc;
  }
  
  static ssize_t hook_nntp_write(void *_ctx, const void *buf, size_t nbytes)
  {
      struct ns *ctx = (struct ns *)_ctx;
      ssize_t rc;
      size_t n;
      sa_rc_t rv;
  
      log3(ctx, TRACE, "NNTP %5d >> \"%{text}D\"", nbytes, buf, nbytes);
      if ((rv = sa_write(ctx->sa, buf, nbytes, &n)) != SA_OK)
          rc = -1;
      else
          rc = (ssize_t)n;
      if (rc == -1)
          log0(ctx, TRACE, "NNTP write error: %m");
      return rc;
  }
  
  static l2_result_t 
  formatter_prefix(l2_context_t *_ctx, const char id, const char *param,
            char *bufptr, size_t bufsize, size_t *buflen, va_list *ap)
  {
      lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx->vp;
              
      if ((ctx->msg != NULL) && (ctx->msg->cpFid != NULL)) {
          sprintf(bufptr, "%s: ", ctx->msg->cpFid);
          *buflen = strlen(bufptr);
      }
      else
          *buflen = 0;
      return L2_OK;
  }
  
  static l2_result_t 
  formatter_errno(l2_context_t *_ctx, const char id, const char *param,
            char *bufptr, size_t bufsize, size_t *buflen, va_list *ap)
  {
      sprintf(bufptr, "(%d) %s", errno, strerror(errno));
      *buflen = strlen(bufptr);
      return L2_OK;
  }
  
  static void catchsignal(int sig, ...)
  {
      va_list ap;
      static lmtp2nntp_t *ctx = NULL;
      pid_t pid;
  
      if(sig == 0) {
          va_start(ap, sig);
          if ((ctx = va_arg(ap, lmtp2nntp_t *)) == NULL)
              exit(ERR_EXECUTION);
          log0(ctx, TRACE, "catching and logging signals now");
          va_end(ap);
          return;
      }
      if (ctx != NULL) {
          switch (sig) {
              case SIGCHLD:
                  log1(ctx, NOTICE, "caught signal %d - wait for child", sig);
                  pid = wait(NULL);
                  ctx->active_childs--;
                  log2(ctx, NOTICE, "caught signal %d - child [%ld] terminated", sig, (long)pid);
                  return;
              case SIGUSR1:
                  log1(ctx, NOTICE, "caught signal %d - flush logging stream", sig);
                  l2_channel_flush(ctx->l2);
                  return;
              case SIGHUP:
              case SIGINT:
              case SIGQUIT:
                  log1(ctx, NOTICE, "caught signal %d - exit - no more logging", sig);
                  break;
              default:
                  log1(ctx, PANIC, "CAUGHT SIGNAL %d - EXIT - NO MORE LOGGING", sig);
          }
          l2_channel_destroy(ctx->l2);
          l2_env_destroy(ctx->l2_env);
      }
      exit(ERR_EXECUTION);
  }
  
  
  int main(int argc, char **argv)
  {
      int           rc;
      lmtp_t       *lmtp = NULL;
      lmtp_io_t     lmtp_io;
      lmtp2nntp_t  *ctx = NULL;
      int           bOk;
      int           i;             /* general purpose scratch int, index ... */
      char         *cp;            /* general purpose character pointer */
      char         *azHosts;
      size_t        asHosts;
      char         *azTimeout;
      size_t        asTimeout;
      char         *azACL;
      size_t        asACL;
      char         *cpHost;
      char         *cpPort;
      pid_t         pid;
      FILE         *fd;
      char         *cpName;
      char         *cpValue;
      int           nValue;
      char         *cpAddr;
      char         *cpPrefixLen;
      struct passwd *sPasswd;
      char         *cpHeadername;
      char         *cpHeadervalue;
  
      /* drop effective uid/gid priviledges */
      seteuid(getuid());
      setegid(getgid());
  
      /* library version check (run-time) */
      if (l2_version.v_hex < L2_VERSION_HEX_REQ) {
          fprintf(stderr, "require OSSP L2 >= %s, found %s\n", L2_VERSION_STR_REQ, L2_VERSION_STR);
          CU(ERR_EXECUTION);
      }
      if (str_version.v_hex < STR_VERSION_HEX_REQ) {
          fprintf(stderr, "require OSSP Str >= %s, found %s\n", STR_VERSION_STR_REQ, STR_VERSION_STR);
          CU(ERR_EXECUTION);
      }
  
      /* create application context */
      if ((ctx = (lmtp2nntp_t *)malloc(sizeof(lmtp2nntp_t))) == NULL)
          CU(ERR_EXECUTION);
      ctx->ctx.vp = ctx;
      ctx->progname = strdup(argv[0]);
      ctx->option_logfile = NULL;
      ctx->option_groupmode = GROUPMODE_ARG;
      ctx->option_operationmode = OPERATIONMODE_FAKE;
      ctx->option_operationmodefakestatus = "553";   /* Requested action not taken: mailbox name not allowed */
      ctx->option_operationmodefakedsn    = "5.7.1"; /* Delivery not authorized, message refused */
      ctx->option_maxmessagesize = 8 * 1024 * 1024;
      ctx->azHeaderValuePairs = NULL;
      ctx->asHeaderValuePairs = 0;
      ctx->option_timeout_lmtp_accept = 0;
      ctx->option_timeout_lmtp_read = 10;
      ctx->option_timeout_lmtp_write = 10;
      ctx->option_timeout_nntp_connect = 360;
      ctx->option_timeout_nntp_read = 60;
      ctx->option_timeout_nntp_write = 60;
      ctx->option_mailfrom = NULL;
      ctx->option_restrictheader = NULL;
      ctx->option_levelmask = L2_LEVEL_NONE;
      ctx->option_pidfile = NULL;
      ctx->option_killflag = FALSE;
      ctx->option_uid = getuid();
      ctx->option_daemon = FALSE;
      ctx->option_veryverbose = FALSE;
      ctx->option_childsmax = 10;
      ctx->active_childs = 0;
      ctx->l2_env = NULL;
      ctx->l2 = NULL;
      ctx->saaAltio = NULL;
      ctx->saAltio = NULL;
      ctx->cpBindh = NULL;
      ctx->cpBindp = NULL;
      ctx->saaBind = NULL;
      ctx->saBind = NULL;
      ctx->nsc = 0;
      for (i=0; i < MAXNEWSSERVICES; i++) {
          ctx->ns[i].h = NULL;
          ctx->ns[i].p = NULL;
          ctx->ns[i].saa = NULL;
          ctx->ns[i].sa = NULL;
          ctx->ns[i].nntp = NULL;
          ctx->ns[i].rc = LMTP_ERR_UNKNOWN;
          ctx->ns[i].l2 = NULL;
      }
      ctx->option_aclc = 0;
      for (i = 0; i < MAXACLS; i++) {
          ctx->option_acl[i].acl = NULL;
          ctx->option_acl[i].not = FALSE;
          ctx->option_acl[i].saa = NULL;
          ctx->option_acl[i].prefixlen = 0;
      }
      ctx->azGroupargs = NULL;
      ctx->asGroupargs = 0;
      initsession(&ctx->session);
      ctx->msg = NULL;
      if (uname(&ctx->uname) == -1) {
          fprintf(stderr, "%s:Error: uname failed \"%s\"\n", ctx->progname, strerror(errno));
          CU(ERR_EXECUTION);
      }
  
      /*POD B<lmtp2nntp> */
  
      /*  use
       *  perl <lmtp2nntp.c -e 'while (<>) { if(m/\/\*POD (.*) .*\*\//) { $_=$1; print "$_\n" };}'
       *  to pull the POD SYNOPSIS header directly out of this source
       */
  
      /* read in the arguments */
      while ((i = getopt(argc, argv, "C:DKP:Va:b:c:d:g:h:l:m:n:o:r:s:t:u:v")) != -1) {
          switch (i) {
              case 'C': /*POD [B<-C> I<childsmax>] */
                  ctx->option_childsmax = atoi(optarg);
                  if (ctx->option_childsmax <= 0) {
                      fprintf(stderr, "%s:Error: Invalid number (%d) to option -C\n", ctx->progname, ctx->option_childsmax);
                      CU(ERR_EXECUTION);
                  }
                  break;
              case 'D': /*POD [B<-D>] */
                  ctx->option_daemon = TRUE;
                  break;
              case 'K': /*POD [B<-K>] */
                  ctx->option_killflag = TRUE;
                  break;
              case 'P': /*POD [B<-P> I<pidfile>] */
                  ctx->option_pidfile = strdup(optarg);
                  break;
              case 'V': /*POD [B<-V>] */
                  ctx->option_veryverbose = TRUE;
                  break;
              case 'a': /*POD [B<-a> I<addr>/I<mask>[,I<addr>/I<mask>[,...]] */
                  if (argz_create_sep(optarg, ',', &azACL, &asACL) != 0)
                      CU(ERR_EXECUTION);
                  cp = NULL;
                  while ((cp = argz_next(azACL, asACL, cp)) != NULL) {
                      if (ctx->option_aclc >= MAXACLS) {
                          fprintf(stderr, "%s:Error: Too many ACL (%d) using option -a\n", ctx->progname, ctx->option_aclc);
                          CU(ERR_EXECUTION);
                      }
                      ctx->option_acl[ctx->option_aclc].acl = strdup(cp);
                      if (cp[0] == '!') {
                          ctx->option_acl[ctx->option_aclc].not = TRUE;
                          cpAddr = strdup(cp+1);
                      }
                      else {
                          cpAddr = strdup(cp);
                      }
                      if ((cpPrefixLen = strrchr(cpAddr, '/')) != NULL)
                          *cpPrefixLen++ = NUL;
                      else
                          cpPrefixLen = "-1";
                      ctx->option_acl[ctx->option_aclc].prefixlen = atoi(cpPrefixLen);
                      if ((rc = sa_addr_create(&ctx->option_acl[ctx->option_aclc].saa)) != SA_OK) {
                          fprintf(stderr, "%s:Error: Creating address failed for -a option (%d)\n", 
                                  ctx->progname, rc);
                      }
                      if ((rc = sa_addr_u2a(ctx->option_acl[ctx->option_aclc].saa, "inet://%s:0", cpAddr)) != SA_OK) {
                          fprintf(stderr, "%s:Error: Parsing host address failed for \"%s:0\" (%d)\n", 
                                  ctx->progname, cpAddr, rc);
                          CU(ERR_EXECUTION);
                      }
                      ctx->option_aclc++;
                      free(cpAddr);
                  }
                  free(azACL);
                  break;
              case 'b': /*POD [B<-b> I<addr>[I<:port>]|C<->|I<path>[:perms]] */
                  if (strcmp(optarg, "-") != 0) {
                      if ((rc = sa_create(&ctx->saAltio)) != SA_OK) {
                          fprintf(stderr, "%s:Error: Creating TCP socket failed for \"%s\": %s\n", 
                                  ctx->progname, optarg, strerror(errno));
                          CU(ERR_EXECUTION);
                      }
                      if ((rc = sa_addr_create(&ctx->saaAltio)) != SA_OK) {
                          fprintf(stderr, "%s:Error: Creating address failed for -b option (%d)\n", 
                                  ctx->progname, rc);
                      }
                      if (optarg[0] == '/') {
                          char *cpPath;
                          char *cpPerm;
                          int nPerm;
                          int n;
  
                          cpPath = strdup(optarg);
                          cpPerm = NULL;
                          nPerm  = -1;
                          if ((cpPerm = strrchr(cpPath, ':')) != NULL) {
                              *cpPerm++ = '\0';
                              nPerm = 0;
                              for (i = 0; i < 4 && cpPerm[i] != '\0'; i++) {
                                  if (!isdigit((int)cpPerm[i])) {
                                      nPerm = -1;
                                      break;
                                  }
                                  n = cpPerm[i] - '0';
                                  if (n > 7) {
                                      nPerm = -1;
                                      break;
                                  }
                                  nPerm = ((nPerm << 3) | n);
                              }
                              if (nPerm == -1 || cpPerm[i] != '\0') {
                                  fprintf(stderr, "%s:Error: Invalid permissions \"%s\"\n", ctx->progname, cpPerm);
                                  CU(ERR_EXECUTION);
                              }
                          }
                          if ((rc = sa_addr_u2a(ctx->saaAltio, "unix:%s", cpPath)) != SA_OK) {
                              fprintf(stderr, "%s:Error: Parsing alternate IO guessing UNIX domain socket failed for \"%s\" (%d)\n", 
                                      ctx->progname, cpPath, rc);
                              CU(ERR_EXECUTION);
                          }
                          if ((rc = sa_bind(ctx->saAltio, ctx->saaAltio)) != SA_OK) {
                              fprintf(stderr, "%s:Error: Bind failed for \"%s\": %s\n", 
                                      ctx->progname, cpPath, strerror(errno));
                              CU(ERR_EXECUTION);
                          }
                          if (nPerm != -1) {
                              if (chmod(cpPath, nPerm) == -1) {
                                  fprintf(stderr, "%s:Error: chmod failed for \"%s\": %s\n", ctx->progname, cpPath, strerror(errno));
                                  CU(ERR_EXECUTION);
                              }
                          }
                          if (getuid() == 0 && getuid() != ctx->option_uid) {
                              if (chown(cpPath, ctx->option_uid, -1) == -1) {
                                  fprintf(stderr, "%s:Error: chown failed for \"%s\": %s\n", ctx->progname, cpPath, strerror(errno));
                                  CU(ERR_EXECUTION);
                              }
                          }
                          free(cpPath);
                      }
                      else {
                          if ((rc = sa_addr_u2a(ctx->saaAltio, "inet://%s", optarg)) != SA_OK) {
                              fprintf(stderr, "%s:Error: Parsing alternate IO guessing INET socket failed for \"%s\" (%d)\n", 
                                      ctx->progname, optarg, rc);
                              CU(ERR_EXECUTION);
                          }
                          if ((rc = sa_bind(ctx->saAltio, ctx->saaAltio)) != SA_OK) {
                              fprintf(stderr, "%s:Error: Bind failed for \"%s\": %s\n", 
                                      ctx->progname, optarg, strerror(errno));
                              CU(ERR_EXECUTION);
                          }
                      }
                      if ((rc = sa_listen(ctx->saAltio, -1)) != SA_OK) {
                          fprintf(stderr, "%s:Error: Listen to failed for \"%s\": %s\n", 
                                  ctx->progname, optarg, strerror(errno));
                          CU(ERR_EXECUTION);
                      }
                  }
                  break;
              case 'c': /*POD [B<-c> I<addr>[I<:port>]] */
                  ctx->cpBindh = strdup(optarg);
                  if ((ctx->cpBindp = strrchr(ctx->cpBindh, ':')) != NULL) {
                      *ctx->cpBindp++ = NUL;
                      ctx->cpBindp = strdup(ctx->cpBindp);
                  }
                  else 
                      ctx->cpBindp = strdup("0");
                  if ((rc = sa_addr_create(&ctx->saaBind)) != SA_OK) {
                      fprintf(stderr, "%s:Error: Creating address failed for -c option (%d)\n", 
                              ctx->progname, rc);
                  }
                  if ((rc = sa_addr_u2a(ctx->saaBind, "inet://%s:%s", ctx->cpBindh, ctx->cpBindp)) != SA_OK) {
                      fprintf(stderr, "%s:Error: Parsing bind address failed for \"%s:%s\" (%d)\n", 
                              ctx->progname, ctx->cpBindh, ctx->cpBindp, rc);
                      CU(ERR_EXECUTION);
                  }
                  break;
              case 'd': /*POD [B<-d> I<addr>[I<:port>][,I<addr>[I<:port>], ...]] */
                  if (argz_create_sep(optarg, ',', &azHosts, &asHosts) != 0)
                      CU(ERR_EXECUTION);
                  cp = NULL;
                  while ((cp = argz_next(azHosts, asHosts, cp)) != NULL) {
                      if (ctx->nsc >= MAXNEWSSERVICES) {
                          fprintf(stderr, "%s:Error: Too many services (%d) using option -d\n", ctx->progname, ctx->nsc);
                          CU(ERR_EXECUTION);
                      }
                      cpHost = strdup(cp);
                      if ((cpPort = strrchr(cpHost, ':')) != NULL) {
                          *cpPort++ = NUL;
                          cpPort = strdup(cpPort);
                      }
                      else 
                          cpPort = strdup("nntp");
                      ctx->ns[ctx->nsc].h = cpHost;
                      ctx->ns[ctx->nsc].p = cpPort;
                      if ((rc = sa_addr_create(&ctx->ns[ctx->nsc].saa)) != SA_OK) {
                          fprintf(stderr, "%s:Error: Creating address failed for -d option (%d)\n", 
                              ctx->progname, rc);
                      }
                      if ((rc = sa_addr_u2a(ctx->ns[ctx->nsc].saa, "inet://%s:%s", 
                                       ctx->ns[ctx->nsc].h, ctx->ns[ctx->nsc].p)) != SA_OK) {
                          fprintf(stderr, "%s:Error: Parsing host address failed for \"%s:%s\" (%d)\n", 
                                  ctx->progname, ctx->ns[ctx->nsc].h, ctx->ns[ctx->nsc].p, rc);
                          CU(ERR_EXECUTION);
                      }
                      if ((rc = sa_create(&ctx->ns[ctx->nsc].sa)) != SA_OK) {
                          fprintf(stderr, "%s:Error: Creating TCP socket failed for \"%s:%s\": %s\n", 
                                  ctx->progname, ctx->ns[ctx->nsc].h, ctx->ns[ctx->nsc].p, strerror(errno));
                          CU(ERR_EXECUTION);
                      }
                      ctx->ns[ctx->nsc].nntp = NULL;
                      ctx->nsc++;
                  }
                  free(azHosts);
                  break;
              case 'g': /*POD [B<-g> I<groupmode>] */
                  if      (strcasecmp(optarg, "arg") == 0)
                      ctx->option_groupmode = GROUPMODE_ARG;
                  else if (strcasecmp(optarg, "envelope") == 0)
                      ctx->option_groupmode = GROUPMODE_ENVELOPE;
                  else if (strcasecmp(optarg, "header") == 0)
                      ctx->option_groupmode = GROUPMODE_HEADER;
                  else {
                      fprintf(stderr, "%s:Error: Invalid mode \"%s\" to option -g\n", ctx->progname, optarg);
                      CU(ERR_EXECUTION);
                  }
                  break;
              case 'h': /*POD [B<-h> I<header>:<value>] */
                  cpHeadername = strdup(optarg);
                  if ((cp = strchr(cpHeadername, ':')) == NULL) {
                      free(cpHeadername);
                      fprintf(stderr, "%s:Error: header \"%s\" for -h option not terminated with colon\n", 
                              ctx->progname, cpHeadername);
                      CU(ERR_EXECUTION);
                  }
                  cp++;
                  if (*cp == NUL) {
                      free(cpHeadername);
                      fprintf(stderr, "%s:Error: header \"%s\" for -h option has no value\n", 
                              ctx->progname, cpHeadername);
                      CU(ERR_EXECUTION);
                  }
                  cpHeadervalue = strdup(cp);
                  *cp = NUL;
                  argz_add(&ctx->azHeaderValuePairs, &ctx->asHeaderValuePairs, cpHeadername);
                  argz_add(&ctx->azHeaderValuePairs, &ctx->asHeaderValuePairs, cpHeadervalue);
                  free(cpHeadervalue);
                  free(cpHeadername);
                  break;
              case 'l': /*POD [B<-l> I<level>[:I<logfile>]] */
                  if ((cp = strrchr(optarg, ':')) != NULL) {
                      *cp++ = NUL;
                      if (*cp == NUL) {
                          fprintf(stderr, "%s:Error: empty logfile to option -l\n", ctx->progname);
                          CU(ERR_EXECUTION);
                      }
                      else
                          ctx->option_logfile = strdup(cp);
                  }
                  else
                      ctx->option_logfile = strdup("logfile");
  
                  if (l2_util_s2l(optarg, strlen(optarg), ',', &ctx->option_levelmask) != L2_OK) {
                      fprintf(stderr, "%s:Error: invalid level \"%s\" to option -l\n", ctx->progname, optarg);
                      CU(ERR_EXECUTION);
                  }
                  ctx->option_levelmask = L2_LEVEL_UPTO(ctx->option_levelmask);
                  break;
              case 'm': /*POD [B<-m> I<mailfrom>] */
                  ctx->option_mailfrom = strdup(optarg);
                  /* protect ourselfs from the substitution of backreferences.
                   * Missing varargs would cause segfaults.  Rewrite capturing
                   * brackets to clustering syntax. Use poor man's s///g
                   * simulator as current str library doesn't support global
                   * substitution */
                  while (str_parse(ctx->option_mailfrom, "s/(.*?)\\((?!\\?:)(.*)/$1(?:$2/", &cp) > 0) {
                      free(ctx->option_mailfrom);
                      ctx->option_mailfrom = cp;
                  }
                  if (str_parse("<>", ctx->option_mailfrom) == -1) {
                      fprintf(stderr, "%s:Error: illegal regex \"%s\" to option -m.\n", ctx->progname, ctx->option_mailfrom);
                      CU(ERR_EXECUTION);
                  }
                  break;
              case 'n': /*POD [B<-n> I<nodename>] */
                  if (strlen(optarg) > sizeof(ctx->uname.nodename)-1) {
                          fprintf(stderr, "%s:Error: nodename \"%s\" to long to option -n.\n", ctx->progname, optarg);
                          CU(ERR_EXECUTION);
                  }
                  strcpy(ctx->uname.nodename, optarg);
                  break;
              case 'o': /*POD [B<-o> I<operationmode>] */
                  if      (strcasecmp(optarg, "post") == 0)
                      ctx->option_operationmode = OPERATIONMODE_POST;
                  else if (strcasecmp(optarg, "feed") == 0)
                      ctx->option_operationmode = OPERATIONMODE_FEED;
                  else {
                      if (strlen(optarg) != 9) {
                          fprintf(stderr, "%s:Error: Invalid format or length \"%s\" to option -o\n", ctx->progname, optarg);
                          CU(ERR_EXECUTION);
                      }
  
                      if (optarg[3] != '/') {
                          fprintf(stderr, "%s:Error: Invalid format or missing slash \"%s\" to option -o\n", ctx->progname, optarg);
                          CU(ERR_EXECUTION);
                      }
  
                      optarg[3] = NUL;
                      ctx->option_operationmodefakestatus = &optarg[0];
                      ctx->option_operationmodefakedsn    = &optarg[4];
  
                      if (   strlen(ctx->option_operationmodefakestatus) != 3
                          || !isdigit((int)ctx->option_operationmodefakestatus[0])
                          || !isdigit((int)ctx->option_operationmodefakestatus[1])
                          || !isdigit((int)ctx->option_operationmodefakestatus[2])) {
                              fprintf(stderr, "%s:Error: Invalid status in format \"%s\" to option -o\n", ctx->progname, optarg);
                              CU(ERR_EXECUTION);
                          }
  
                      if (   (strlen(ctx->option_operationmodefakedsn) != 5)
                          || !isdigit((int)ctx->option_operationmodefakedsn[0])
                          || (ctx->option_operationmodefakedsn[1] != '.')
                          || !isdigit((int)ctx->option_operationmodefakedsn[2])
                          || (ctx->option_operationmodefakedsn[3] != '.')
                          || !isdigit((int)ctx->option_operationmodefakedsn[4])
                          || (ctx->option_operationmodefakedsn[0] != ctx->option_operationmodefakestatus[0])) {
                              fprintf(stderr, "%s:Error: Invalid dsn in format \"%s\" to option -o\n", ctx->progname, optarg);
                              CU(ERR_EXECUTION);
                          }
                      }
                  break;
              case 'r': /*POD [B<-r> I<restrictheader>] */
                  ctx->option_restrictheader = strdup(optarg);
                  /* protect ourselfs from the substitution of backreferences.
                   * Missing varargs would cause segfaults.  Rewrite capturing
                   * brackets to clustering syntax. Use poor man's s///g
                   * simulator as current str library doesn't support global
                   * substitution */
                  while (str_parse(ctx->option_restrictheader, "s/(.*?)\\((?!\\?:)(.*)/$1(?:$2/", &cp) > 0) {
                      free(ctx->option_restrictheader);
                      ctx->option_restrictheader = cp;
                  }
                  if (str_parse("<>", ctx->option_restrictheader) == -1) {
                      fprintf(stderr, "%s:Error: illegal regex \"%s\" to option -r.\n", ctx->progname, ctx->option_restrictheader);
                      CU(ERR_EXECUTION);
                  }
                  break;
              case 's': /*POD [B<-s> I<size>] */
                  ctx->option_maxmessagesize = atoi(optarg);
                  if(ctx->option_maxmessagesize < 64) {
                      fprintf(stderr, "%s:Error: maximum message size is unacceptable small.\n", ctx->progname);
                      CU(ERR_EXECUTION);
                  }
                  break;
              case 't': /*POD [B<-t> I<name>=I<sec>[,I<name>=I<sec>[,...]] */
                  if (argz_create_sep(optarg, ',', &azTimeout, &asTimeout) != 0)
                      CU(ERR_EXECUTION);
                  cp = NULL;
                  while ((cp = argz_next(azTimeout, asTimeout, cp)) != NULL) {
                      cpName = strdup(cp);
                      if ((cpValue = strrchr(cpName, '=')) == NULL) {
                          fprintf(stderr, "%s:Error: comma-seperated argument %s to option -t have to be name=value.\n", ctx->progname, cp);
                          CU(ERR_EXECUTION);
                      }
                      *cpValue++ = NUL;
                      nValue = atoi(cpValue);
                      if (nValue < 0) {
                          fprintf(stderr, "%s:Error: timeout %s=%d to option -t must be a positive integer.\n", ctx->progname, cpName, nValue);
                          CU(ERR_EXECUTION);
                      }
                      if (strcmp(cpName, "lmtp") == 0) {
                          ctx->option_timeout_lmtp_accept = nValue;
                          ctx->option_timeout_lmtp_read = nValue;
                          ctx->option_timeout_lmtp_write = nValue;
                      }
                      else if (strcmp(cpName, "lmtp:accept") == 0)
                          ctx->option_timeout_lmtp_accept = nValue;
                      else if (strcmp(cpName, "lmtp:read") == 0)
                          ctx->option_timeout_lmtp_read = nValue;
                      else if (strcmp(cpName, "lmtp:write") == 0)
                          ctx->option_timeout_lmtp_write = nValue;
                      else if (strcmp(cpName, "nntp") == 0) {
                          ctx->option_timeout_nntp_connect = nValue;
                          ctx->option_timeout_nntp_read = nValue;
                          ctx->option_timeout_nntp_write = nValue;
                      }
                      else if (strcmp(cpName, "nntp:connect") == 0)
                          ctx->option_timeout_nntp_connect = nValue;
                      else if (strcmp(cpName, "nntp:read") == 0)
                          ctx->option_timeout_nntp_read = nValue;
                      else if (strcmp(cpName, "nntp:write") == 0)
                          ctx->option_timeout_nntp_write = nValue;
                      else {
                          fprintf(stderr, "%s:Error: unknown timeout %s to option -t.\n", ctx->progname, cpName);
                          CU(ERR_EXECUTION);
                      }
                      free(cpName);
                  }
                  free(azTimeout);
                  break;
              case 'u': /*POD [B<-u> I<uid>] */
                  if (isdigit((int)optarg[0])) {
                      if ((sPasswd = getpwuid((uid_t)atoi(optarg))) == NULL) {
                          fprintf(stderr, "%s:Error: uid \"%s\" not found for -u option.\n", ctx->progname, optarg);
                          CU(ERR_EXECUTION);
                      }
                  }
                  else {
                      if ((sPasswd = getpwnam(optarg)) == NULL) {
                          fprintf(stderr, "%s:Error: loginname \"%s\" not found for -u option.\n", ctx->progname, optarg);
                          CU(ERR_EXECUTION);
                      }
                  }
                  ctx->option_uid = sPasswd->pw_uid;
                  break;
              case 'v': /*POD [B<-v>] (version)*/
                  fprintf(stdout, "%s\n", lmtp2nntp_version.v_gnu);
                  CU(0);
                  break;
              case '?':
              default:
                  usage(ctx->progname);
                  CU(ERR_EXECUTION);
          }
      }
      /*POD I<newsgroup> [I<newsgroup> ...] */
      for (i = optind; i < argc; i++) {
          argz_add(&ctx->azGroupargs, &ctx->asGroupargs, argv[i]);
      }
  
      /* if no positive ACL exists (option -a) add a wildcard match-all for IPv4 and IPv6 */
      bOk = FALSE;
      for (i = 0; i < ctx->option_aclc; i++) {
          if (!ctx->option_acl[i].not) {
              bOk = TRUE;
              break;
          }
      }
      if (!bOk) {
          if (ctx->option_aclc >= MAXACLS) {
              fprintf(stderr, "%s:Error: Too many ACL (%d) using option -a (no space for additional fake IPv4 ACL)\n", ctx->progname, ctx->option_aclc);
              CU(ERR_EXECUTION);
          }
          ctx->option_acl[ctx->option_aclc].acl = "0.0.0.0";
          ctx->option_acl[ctx->option_aclc].not = FALSE;
          ctx->option_acl[ctx->option_aclc].prefixlen = 0;
          if ((rc = sa_addr_create(&ctx->option_acl[ctx->option_aclc].saa)) != SA_OK) {
              fprintf(stderr, "%s:Error: Creating fake address failed for -a option (%d)\n", 
                      ctx->progname, rc);
          }
          if ((rc = sa_addr_u2a(ctx->option_acl[ctx->option_aclc].saa, "inet://%s:0", ctx->option_acl[ctx->option_aclc].acl)) != SA_OK) {
              fprintf(stderr, "%s:Error: Parsing host address failed for \"%s:0\" (%s)\n", 
                      ctx->progname, ctx->option_acl[ctx->option_aclc].acl,
                      sa_error(rc));
              CU(ERR_EXECUTION);
          }
          ctx->option_aclc++;
      }
      if (!bOk) {
          if (ctx->option_aclc >= MAXACLS) {
              fprintf(stderr, "%s:Error: Too many ACL (%d) using option -a (no space for additional fake IPv6 ACL)\n", ctx->progname, ctx->option_aclc);
              CU(ERR_EXECUTION);
          }
          ctx->option_acl[ctx->option_aclc].acl = "[::]";
          ctx->option_acl[ctx->option_aclc].not = FALSE;
          ctx->option_acl[ctx->option_aclc].prefixlen = 0;
          if ((rc = sa_addr_create(&ctx->option_acl[ctx->option_aclc].saa)) != SA_OK) {
              fprintf(stderr, "%s:Error: Creating fake address failed for -a option (%d)\n", 
                      ctx->progname, rc);
          }
          if ((rc = sa_addr_u2a(ctx->option_acl[ctx->option_aclc].saa, "inet://%s:0", ctx->option_acl[ctx->option_aclc].acl)) != SA_OK) {
              fprintf(stderr, "%s:Error: Parsing host address failed for \"%s:0\" (%s)\n", 
                      ctx->progname, ctx->option_acl[ctx->option_aclc].acl,
                      sa_error(rc));
              CU(ERR_EXECUTION);
          }
          ctx->option_aclc++;
      }
  
      if (getuid() != ctx->option_uid) {
          if (setuid(ctx->option_uid) == -1) {
              fprintf(stderr, "%s:Error: Setting UID to %d failed: %s\n", 
                      ctx->progname, ctx->option_uid, strerror(errno));
              CU(ERR_EXECUTION);
          }
      }
  
      /* create L2 environment */
      if (l2_env_create(&ctx->l2_env) != L2_OK) {
          fprintf(stderr, "%s:Error: failed to create L2 environment\n", ctx->progname);
          CU(ERR_EXECUTION);
      }
  
      /* register custom L2 formatters */
      if (l2_env_formatter(ctx->l2_env, 'P', formatter_prefix, &ctx->ctx) != L2_OK) {
          fprintf(stderr, "%s:Error: logging failed to register prefix formatter\n", ctx->progname);
          CU(ERR_EXECUTION);
      }
      if (l2_env_formatter(ctx->l2_env, 'D', l2_util_fmt_dump, NULL) != L2_OK) {
          fprintf(stderr, "%s:Error: logging failed to register dump formatter\n", ctx->progname);
          CU(ERR_EXECUTION);
      }
      if (l2_env_formatter(ctx->l2_env, 'S', l2_util_fmt_string, NULL) != L2_OK) {
          fprintf(stderr, "%s:Error: logging failed to register string formatter\n", ctx->progname);
          CU(ERR_EXECUTION);
      }
      if (l2_env_formatter(ctx->l2_env, 'm', formatter_errno, NULL) != L2_OK) {
          fprintf(stderr, "%s:Error: logging failed to register errno formatter\n", ctx->progname);
          CU(ERR_EXECUTION);
      }
  
      /* create channel stream */
      if (ctx->option_levelmask != L2_LEVEL_NONE && ctx->option_logfile != NULL) {
          if (ctx->option_veryverbose)
              rc = l2_spec(&ctx->l2, ctx->l2_env, 
                           "prefix(prefix=\"%%b %%d %%H:%%M:%%S <%%L> lmtp2nntp[%%P]: \",timezone=local)"
                           "  -> buffer(size=65536)"
                           "  -> file(path=%s,append=1,perm=%d)",
                           ctx->option_logfile, 0644);
          else
              rc = l2_spec(&ctx->l2, ctx->l2_env, 
                           "prefix(prefix=\"%%b %%d %%H:%%M:%%S <%%L> lmtp2nntp[%%P]: \",timezone=local)"
                           "  -> file(path=%s,append=1,perm=%d)",
                           ctx->option_logfile, 0644);
          if (rc != L2_OK) {
              fprintf(stderr, "%s:Error: logging failed to create stream\n", ctx->progname);
              CU(ERR_EXECUTION);
          }
          if (l2_channel_levels(ctx->l2, ctx->option_levelmask, L2_LEVEL_NONE) != L2_OK) {
              fprintf(stderr, "%s:Error: logging failed to set global logging level\n", ctx->progname);
              CU(ERR_EXECUTION);
          }
          if (l2_channel_open(ctx->l2) != L2_OK) {
              fprintf(stderr, "%s:Error: logging failed to open channel stream\n", ctx->progname);
              CU(ERR_EXECUTION);
          }
      }
  
      /* from this point on logging is up and running and fprintf(stderr, ...)
       * should not be used in the remainder of the code
       */
  
      log1(ctx, NOTICE, "startup, version %s", lmtp2nntp_version.v_gnu);
      if (ctx->option_veryverbose)
          log0(ctx, NOTICE, "logging very verbose (unbuffered)");
  
      if ((ctx->option_pidfile != NULL) && ctx->option_killflag) {
          if ((fd = fopen(ctx->option_pidfile, "r")) == NULL)
              log1(ctx, ERROR, "cannot open pidfile \"%s\" for reading %m", ctx->option_pidfile);
          else {
              if (fscanf(fd, "%d\n", &pid) != 1) {
                  fclose(fd);
                  log1(ctx, ERROR, "cannot extract pid from pidfile \"%s\"", ctx->option_pidfile);
              }
              else {
                  fclose(fd);
                  log1(ctx, TRACE, "going to kill pid[%d]", pid);
                  if (kill(pid, SIGHUP) == -1)
                      log1(ctx, ERROR, "killing pid[%d] failed %m", pid);
                  if (unlink(ctx->option_pidfile) == -1)
                      log1(ctx, ERROR, "unlinking pidfile \"%s\" failed %m", ctx->option_pidfile);
              }
          }
          CU(0);
      }
  
      catchsignal(0, ctx);
      signal(SIGCHLD, (void(*)())catchsignal);
      signal(SIGHUP,  (void(*)())catchsignal);
      signal(SIGINT,  (void(*)())catchsignal);
      signal(SIGQUIT, (void(*)())catchsignal);
      signal(SIGILL,  (void(*)())catchsignal);
      signal(SIGBUS,  (void(*)())catchsignal);
      signal(SIGSEGV, (void(*)())catchsignal);
      signal(SIGSYS,  (void(*)())catchsignal);
      signal(SIGTERM, (void(*)())catchsignal);
      signal(SIGUSR1, (void(*)())catchsignal);
      signal(SIGUSR2,            SIG_IGN    );
  
      /* loop for LMTP protocol with support for alternate io through daemon */
      if (ctx->saAltio == NULL) {
          /* initialize LMTP context */
          ctx->fdIOi = STDIN_FILENO;
          ctx->fdIOo = STDOUT_FILENO;
          lmtp_io.ctx    = ctx;
          lmtp_io.read   = hook_lmtp_read;
          lmtp_io.write  = hook_lmtp_write;
          if ((lmtp = lmtp_create(&lmtp_io)) == NULL) {
              log0(ctx, ERROR, "Unable to initialize LMTP library\n");
              CU(ERR_EXECUTION);
          }
          /*  RFC0821, 4.5.1. MINIMUM IMPLEMENTATION
           *  In order to make SMTP workable, the following minimum implementation
           *  is required for all receivers: [...]
           *  RFC0821, 4.1.2. COMMAND SYNTAX
           *  
           *  Verb Parameter
           *  ----+-------------------------------
           *  HELO <SP> <domain> <CRLF>
           *  MAIL <SP> FROM:<reverse-path> <CRLF>
           *  RCPT <SP> TO:<forward-path> <CRLF>
           *  DATA <CRLF>
           *  RSET <CRLF>
           *  NOOP <CRLF>
           *  QUIT <CRLF>
           */
          lmtp_register(lmtp, "LHLO", lmtp_cb_lhlo, ctx, NULL, NULL); 
          lmtp_register(lmtp, "MAIL", lmtp_cb_mail, ctx, NULL, NULL);
          lmtp_register(lmtp, "RCPT", lmtp_cb_rcpt, ctx, NULL, NULL);
          lmtp_register(lmtp, "DATA", lmtp_cb_data, ctx, NULL, NULL);
          lmtp_register(lmtp, "RSET", lmtp_cb_rset, ctx, NULL, NULL);
          lmtp_register(lmtp, "NOOP", lmtp_cb_noop, ctx, NULL, NULL);
          lmtp_register(lmtp, "QUIT", lmtp_cb_quit, ctx, NULL, NULL);
          lmtp_loop(lmtp);
          lmtp_gfs_quit(ctx);
          lmtp_gfs_lhlo(ctx);
          lmtp_destroy(lmtp);
      } else {
          pid = getpid();
          if (ctx->option_daemon) {
              daemonize();
              log1(ctx, NOTICE, "daemonized, previous pid[%d]", pid);
          }
          if (ctx->option_pidfile != NULL) {
              if ((fd = fopen(ctx->option_pidfile, "w+")) == NULL)
                  log1(ctx, ERROR, "cannot open pidfile \"%s\" for writing %m", ctx->option_pidfile);
              else {
                  fprintf(fd, "%d\n", getpid());
                  fclose(fd);
              }
          }
  
          sa_timeout(ctx->saAltio, SA_TIMEOUT_ALL,    0, 0);
          sa_timeout(ctx->saAltio, SA_TIMEOUT_ACCEPT, ctx->option_timeout_lmtp_accept, 0);
          sa_timeout(ctx->saAltio, SA_TIMEOUT_READ,   ctx->option_timeout_lmtp_read,   0);
          sa_timeout(ctx->saAltio, SA_TIMEOUT_WRITE,  ctx->option_timeout_lmtp_write,  0);
          while (1) {
              while (ctx->active_childs >= ctx->option_childsmax) {
                  log1(ctx, ERROR, "maximum number of childs (%d) reached - waiting (1s)", ctx->option_childsmax);
                  sleep(1);
              }
  
              if ((rc = sa_accept(ctx->saAltio, &ctx->saaIO, &ctx->saIO)) != SA_OK) {
                  if (rc == SA_ERR_SYS)
                      log3(ctx, ERROR, "accept failed: %s: (%d) %s", sa_error(rc), errno, strerror(errno));
                  else
                      log1(ctx, ERROR, "accept failed: %s", sa_error(rc));
                  sleep(10);
                  continue;
              }
  
              /* Access Control List */
              bOk = FALSE;
              /* check positive matches */
              for (i = 0; i < ctx->option_aclc; i++) {
                  char *cpA1;
                  char *cpA2;
                  if (ctx->option_acl[i].not)
                      continue;
                  sa_addr_a2u(ctx->option_acl[i].saa, &cpA1);
                  sa_addr_a2u(ctx->saaIO, &cpA2);
                  if (sa_addr_match(ctx->saaIO, ctx->option_acl[i].saa, ctx->option_acl[i].prefixlen) == SA_OK) {
                      log4(ctx, TRACE, "positive/inclusive ACL \"%s\" (%s/%d) matches %s: YES (stop comparison)", ctx->option_acl[i].acl, cpA1, ctx->option_acl[i].prefixlen, cpA2);
                      bOk = TRUE;
                      break;
                  }
                  else
                      log4(ctx, TRACE, "positive/inclusive ACL \"%s\" (%s/%d) matches %s: NO", ctx->option_acl[i].acl, cpA1, ctx->option_acl[i].prefixlen, cpA2);
                  free(cpA1);
                  free(cpA2);
              }
              /* check negative matches */
              for (i = 0; i < ctx->option_aclc; i++) {
                  char *cpA1;
                  char *cpA2;
                  if (!ctx->option_acl[i].not)
                      continue;
                  sa_addr_a2u(ctx->option_acl[i].saa, &cpA1);
                  sa_addr_a2u(ctx->saaIO, &cpA2);
                  if (sa_addr_match(ctx->saaIO, ctx->option_acl[i].saa, ctx->option_acl[i].prefixlen) == SA_OK) {
                      log4(ctx, TRACE, "negative/exclusive ACL \"%s\" (not %s/%d) matches %s: YES (stop comparison)", ctx->option_acl[i].acl, cpA1, ctx->option_acl[i].prefixlen, cpA2);
                      bOk = FALSE;
                      break;
                  }
                  else {
                      log4(ctx, TRACE, "negative/exclusive ACL \"%s\" (not %s/%d) matches %s: NO", ctx->option_acl[i].acl, cpA1, ctx->option_acl[i].prefixlen, cpA2);
                  }
              }
              if (bOk) {
                  char *cpA;
                  sa_addr_a2u(ctx->saaIO, &cpA);
                  log1(ctx, TRACE, "connection from %s accepted due to ACL", cpA); 
                  free(cpA);
              }
              else {
                  char *cpA;
                  sa_addr_a2u(ctx->saaIO, &cpA);
                  log1(ctx, ERROR, "connection from %s refused due to ACL", cpA); 
                  free(cpA);
                  sa_destroy(ctx->saIO);
                  sa_addr_destroy(ctx->saaIO);
                  continue;
              }
  
              /* logging buffer must be empty before fork otherwise content is
               * duplicated and written twice on next flush */
              l2_channel_flush(ctx->l2);
              pid = fork();
              if (pid == -1) {
                  log0(ctx, ERROR, "daemon cannot spawn child %m");
                  continue;
              }
              if (pid != 0) {
                  log1(ctx, INFO, "daemon forked process, new child pid[%d]", pid);
                  ctx->active_childs++;
                  sa_destroy(ctx->saIO);
                  sa_addr_destroy(ctx->saaIO);
                  continue;
              }
              log1(ctx, NOTICE, "startup new child process, parent pid[%d]", getppid());
  
              /* child must close listening socket */
              sa_destroy(ctx->saAltio);
              ctx->saAltio = NULL; /* prevent cleanup from free'ing this again */
              
              /* initialize LMTP context */
              lmtp_io.ctx    = ctx;
              lmtp_io.read   = hook_lmtp_read;
              lmtp_io.write  = hook_lmtp_write;
              if ((lmtp = lmtp_create(&lmtp_io)) == NULL) {
                  log0(ctx, ERROR, "Unable to initialize LMTP library\n");
                  CU(ERR_EXECUTION);
              }
              /*  RFC0821, 4.5.1. MINIMUM IMPLEMENTATION
               *  In order to make SMTP workable, the following minimum implementation
               *  is required for all receivers: [...]
               *  RFC0821, 4.1.2. COMMAND SYNTAX
               *  
               *  Verb Parameter
               *  ----+-------------------------------
               *  HELO <SP> <domain> <CRLF>
               *  MAIL <SP> FROM:<reverse-path> <CRLF>
               *  RCPT <SP> TO:<forward-path> <CRLF>
               *  DATA <CRLF>
               *  RSET <CRLF>
               *  NOOP <CRLF>
               *  QUIT <CRLF>
               */
              lmtp_register(lmtp, "LHLO", lmtp_cb_lhlo, ctx, NULL, NULL); 
              lmtp_register(lmtp, "MAIL", lmtp_cb_mail, ctx, NULL, NULL);
              lmtp_register(lmtp, "RCPT", lmtp_cb_rcpt, ctx, NULL, NULL);
              lmtp_register(lmtp, "DATA", lmtp_cb_data, ctx, NULL, NULL);
              lmtp_register(lmtp, "RSET", lmtp_cb_rset, ctx, NULL, NULL);
              lmtp_register(lmtp, "NOOP", lmtp_cb_noop, ctx, NULL, NULL);
              lmtp_register(lmtp, "QUIT", lmtp_cb_quit, ctx, NULL, NULL);
              lmtp_loop(lmtp);
              lmtp_gfs_quit(ctx);
              lmtp_gfs_lhlo(ctx);
              lmtp_destroy(lmtp);
              CU(0);
          }
      }
      CU(0);
  
      /* graceful shutdown */
      CUS:
      log0(ctx, NOTICE, "graceful shutdown shortly before exit - no more logging");
      l2_channel_destroy(ctx->l2);
      l2_env_destroy(ctx->l2_env);
      if (ctx->saAltio)
          sa_destroy(ctx->saAltio);
      if (ctx->saaAltio)
          sa_addr_destroy(ctx->saaAltio);
      if (ctx->option_restrictheader != NULL)
          free(ctx->option_restrictheader);
      if (ctx->azHeaderValuePairs != NULL)
          free(ctx->azHeaderValuePairs);
      if (ctx->option_pidfile != NULL)
          free(ctx->option_pidfile);
      if (ctx->option_logfile != NULL)
          free(ctx->option_logfile);
      if (ctx->progname != NULL)
          free(ctx->progname);
      if (ctx->azGroupargs != NULL)
          free(ctx->azGroupargs);
      if (ctx != NULL)
          free(ctx);
      str_parse(NULL, NULL);
  
      return rc;
  }
  
  static void resetsession(struct session *session)
  {
      if (session->lhlo_domain != NULL)
          free(session->lhlo_domain);
      initsession(session);
      return;
  }
  
  static void initsession(struct session *session)
  {
      session->lhlo_seen = FALSE;
      session->lhlo_domain = NULL;
      return;
  }
  
  static lmtp_rc_t lmtp_cb_lhlo(lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *_ctx)
  {
      /*  
       *  RFC0821 [excerpt] 4.1. SMTP COMMANDS
       *  4.1.1.  COMMAND SEMANTICS, HELO
       *  This command and an OK reply to it confirm that both the sender-SMTP
       *  and the receiver-SMTP are in the initial state, that is, there is no
       *  transaction in progress and all state tables and buffers are cleared.
       * 
       *  The first command in a session must be the HELO command.  The HELO
       *  command may be used later in a session as well.  If the HELO command
       *  argument is not acceptable a 501 failure reply must be returned and
       *  the receiver-SMTP must stay in the same state.
       *
       *  If the transaction beginning command argument is not acceptable a 501
       *  failure reply must be returned and the receiver-SMTP must stay in the
       *  same state.  If the commands in a transaction are out of order a 503
       *  failure reply must be returned and the receiver-SMTP must stay in the
       *  same state.
       *
       *  HELO <SP> <domain> <CRLF>
       */
      lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx;
      nntp_rc_t    rc;
      lmtp_res_t   res;
      char         str[STDSTRLEN];
      int          bOk;
      int          i;
      nntp_io_t    nntp_io;
  
      log1(ctx, INFO, "LMTP service executing LHLO command < %s", req->msg);
  
      /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   503 Bad sequence of commands
       *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
       *  RFC1893 3.5 Network and Routing Status          X.0.0   Other undefined Status
       */
      log0(ctx, TRACE, "checking for duplicate LHLO");
      if (ctx->session.lhlo_seen) {
          res.statuscode = "503";
          res.dsncode    = "5.0.0";
          res.statusmsg  = "Duplicate LHLO.";
          CU(LMTP_OK);
      }
  
      /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   501 Syntax error in parameters or arguments
       *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
       *  RFC1893 3.5 Network and Routing Status          X.0.0   Other undefined Status
       */
      log0(ctx, TRACE, "checking domain to match either RFC0821 or RFC1035 syntax");
      if (! (   helo_rfc0821domain(req->msg, &ctx->session.lhlo_domain) > 0
             || helo_rfc1035domain(req->msg, &ctx->session.lhlo_domain) > 0)) {
          res.statuscode = "501";
          res.dsncode    = "5.0.0";
          res.statusmsg  = "Please identify yourself. Domain must match RFC0821/RFC1035.";
          CU(LMTP_OK);
      }
  
      /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   451 Requested action aborted: local error in processing
       *  RFC1893 2. Status Codes                         4.X.X   Persistent Transient Failure
       *  RFC1893 3.5 Network and Routing Status          X.3.5   System incorrectly configured
       */
      if (ctx->option_operationmode != OPERATIONMODE_FAKE) {
          log0(ctx, TRACE, "check if at least one NNTP service was successfully configured");
          if (ctx->nsc == 0) {
              res.statuscode = "451";
              res.dsncode    = "4.3.5";
              res.statusmsg  = "No valid NNTP services configured.";
              CU(LMTP_OK);
          }
      }
  
      log0(ctx, TRACE, "try to establish a session to any configured NNTP services");
      if (ctx->option_operationmode == OPERATIONMODE_FAKE)
          log0(ctx, NOTICE, "NNTP running in fake mode, network connections will be executed but result is ignored");
      i = 0;
      do {
          log1(ctx, DEBUG, "trying ns[%d]", i);
          bOk = TRUE;
          log2(ctx, TRACE, "try %s:%s", ctx->ns[i].h, ctx->ns[i].p);
  
          ctx->ns[i].l2 = ctx->l2;
  
          if (bOk && (ctx->saaBind != NULL)) {
              log2(ctx, DEBUG, "bind local socket to %s:%s", ctx->cpBindh, ctx->cpBindp);
              if (sa_bind(ctx->ns[i].sa, ctx->saaBind) != SA_OK) {
                  bOk = FALSE;
                  log2(ctx, ERROR, "binding NNTP client to local address %s:%s failed, %m", ctx->cpBindh, ctx->cpBindp);
              }
          }
  
          sa_timeout(ctx->ns[i].sa, SA_TIMEOUT_ALL, 0, 0);
          sa_timeout(ctx->ns[i].sa, SA_TIMEOUT_CONNECT, ctx->option_timeout_nntp_connect, 0);
          sa_timeout(ctx->ns[i].sa, SA_TIMEOUT_READ,    ctx->option_timeout_nntp_read,    0);
          sa_timeout(ctx->ns[i].sa, SA_TIMEOUT_WRITE,   ctx->option_timeout_nntp_read,    0);
  
          if (bOk) {
              log0(ctx, DEBUG, "connect");
              if (sa_connect(ctx->ns[i].sa, ctx->ns[i].saa) != SA_OK) {
                  bOk = FALSE;
                  log2(ctx, WARNING, "connect to %s:%s failed, %m",
                       ctx->ns[i].h, ctx->ns[i].p);
              }
          }
  
          if (bOk) {
              log0(ctx, DEBUG, "nntp_create");
              nntp_io.ctx    = &ctx->ns[i];
              nntp_io.read   = hook_nntp_read;
              nntp_io.write  = hook_nntp_write;
              if ((ctx->ns[i].nntp = nntp_create(&nntp_io)) == NULL) {
                  bOk = FALSE;
                  log0(ctx, ERROR, "creation of NNTP context failed");
              }
          }
  
          if (bOk) {
              log0(ctx, DEBUG, "nntp_init");
              if ((rc = nntp_init(ctx->ns[i].nntp)) != NNTP_OK) {
                  bOk = FALSE;
                  log2(ctx, ERROR, "initialization of NNTP context failed, (%d) %s", rc, nntp_error(rc));
              }
          }
  
          if (bOk) {
              log2(ctx, INFO, "NNTP session to %s:%s successfully established", ctx->ns[i].h, ctx->ns[i].p);
              i++;
          }
          else {
              log2(ctx, WARNING, "NNTP session establishment to %s:%s failed", ctx->ns[i].h, ctx->ns[i].p);
              log1(ctx, DEBUG, "removing ns[%d] from list", i);
              lmtp_gfs_ns(&ctx->ns[i]);
              if (i < --ctx->nsc) {
                  memcpy(&ctx->ns[i], &ctx->ns[i+1], (ctx->nsc - i ) * sizeof(struct ns));
              }
          }
      } while (i < ctx->nsc);
  
      if (ctx->option_operationmode == OPERATIONMODE_FAKE)
          log1(ctx, NOTICE, "NNTP running in fake mode, network connections successfully established=%d but ignored", ctx->nsc);
      else
      {
          /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   421 <domain> Service not available
           *  RFC1893 2. Status Codes                         4.X.X   Persistent Transient Failure
           *  RFC1893 3.5 Network and Routing Status          X.4.1   No answer from host
           */
          log0(ctx, DEBUG, "check if at least one NNTP session successfully established");
          if (ctx->nsc == 0) {
              log0(ctx, ERROR, "no NNTP session established");
              res.statuscode = "421";
              res.dsncode    = "4.4.1";
              res.statusmsg  = "No NNTP session established.";
              CU(LMTP_OK);
          }
      }
          
      ctx->session.lhlo_seen = TRUE;
  
      /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   250 Requested mail action okay, completed
       */
      str_format(str, sizeof(str),
                 "%s Hello %s, pleased to meet you.\n" /* RFC2821 4.1.1.1 */
                 "ENHANCEDSTATUSCODES\n"               /* RFC2034 */
                 "DSN\n"                               /* RFC1894 */
                 "PIPELINING\n"                        /* RFC1854 */
                 "8BITMIME",                           /* RFC1652 */
                 ctx->uname.nodename,
                 ctx->session.lhlo_domain);
      res.statuscode = "250";
      res.dsncode    = NULL; /* DSN not used for greeting */
      res.statusmsg  = str;
      CU(LMTP_OK);
  
      CUS:
      lmtp_response(lmtp, &res);
      return rc;
  }
  
  static void lmtp_gfs_ns(struct ns *ns)
  {
      if (ns->nntp != NULL) {
          nntp_destroy(ns->nntp);
          ns->nntp = NULL;
      }
      if (ns->sa != NULL) {
          sa_destroy(ns->sa);
          ns->sa = NULL;
      }
      if (ns->saa != NULL) {
          sa_addr_destroy(ns->saa);
          ns->saa = NULL;
      }
      if (ns->p != NULL) {
          free(ns->p);
          ns->p = NULL;
      }
      if (ns->h != NULL) {
          free(ns->h);
          ns->h = NULL;
      }
  }
  
  static void lmtp_gfs_lhlo(lmtp2nntp_t *ctx)
  {
      int i;
  
      log0(ctx, TRACE, "LMTP service LHLO command - graceful shutdown");
  
      for (i = 0; i < ctx->nsc; i++)
              lmtp_gfs_ns(&ctx->ns[i]);
  
      if (ctx->option_mailfrom != NULL)
          free(ctx->option_mailfrom);
      if (ctx->cpBindh != NULL)
          free(ctx->cpBindh);
      if (ctx->cpBindp != NULL)
          free(ctx->cpBindp);
      if (ctx->saBind != NULL)
          sa_destroy(ctx->saBind);
      if (ctx->saaBind != NULL)
          sa_addr_destroy(ctx->saaBind);
  }
  
  static int helo_rfc0821domain(char *msg, char **domain)
  {
      int rc;
  
      rc = str_parse(msg, 
              "^.+ ("
      /*
       ##
       ##  The mega Perl regular expression below is generated
       ##  with the following Perl program. This is only possible
       ##  because the given grammar is Chomsky-3 (right or left
       ##  linear grammar, but noth both).
       ##
      
       # BNF grammar for <domain> according to RFC0821:
       # <snum>        ::= one, two, or three digits representing a decimal integer value in the range 0 through 255
       # <a>           ::= any one of the 52 alphabetic characters A through Z in upper case and a through z in lower case
       # <d>           ::= any one of the ten digits 0 through 9
       # <let-dig-hyp> ::= <a> | <d> | "-"
       # <let-dig>     ::= <a> | <d>
       # <ldh-str>     ::= <let-dig-hyp> | <let-dig-hyp> <ldh-str>
       # <dotnum>      ::= <snum> "." <snum> "." <snum> "." <snum>
       # <number>      ::= <d> | <d> <number>
       # <name>        ::= <a> <ldh-str> <let-dig>
       # <element>     ::= <name> | "#" <number> | "[" <dotnum> "]"
       # <domain>      ::= <element> | <element> "." <domain>
       #
       # corresponding Perl regular expression ($domain)
       $snum        = "(?:[0-9]|[0-9]{2}|[0-1][0-9]{2}|2[0-4][0-9]|25[0-5])";
       $d           = "[0-9]";
       $a           = "[A-Za-z]";
       $let_dig_hyp = "(?:$a|$d|-)";
       $let_dig     = "(?:$a|$d)";
       $ldh_str     = "${let_dig_hyp}+";
       $dotnum      = "$snum\\.$snum\\.$snum\\.$snum";
       $number      = "$d+";
       $name        = "$a$ldh_str$let_dig";
       $element     = "(?:$name|#$number|\\[$dotnum\\])";
       $domain      = "(?:$element\.)*$element";
       #
       # translate into C string block suitable for passing to the Perl
       # Compatible Regular Expressions (PCRE) based string library Str.
       my $cregex = $domain;
       $cregex .= "\n";
       $cregex =~ s|\\|\\\\|sg;
       $cregex =~ s|(.{17})|$1\n|sg;
       $cregex =~ s|([^\n]+)\n|"$1"\n|sg;
       $cregex =~ s|\n\n|\n|sg;
       print "$cregex";
       */
  
      "(?:(?:[A-Za-z](?:[A-Za-z]|[0-9]|-)+(?:[A-Za-z]|[0-9])|#[0-9]+|\\[(?:[0"
      "-9]|[0-9]{2}|[0-1][0-9]{2}|2[0-4][0-9]|25[0-5])\\.(?:[0-9]|[0-9]{2}|[0"
      "-1][0-9]{2}|2[0-4][0-9]|25[0-5])\\.(?:[0-9]|[0-9]{2}|[0-1][0-9]{2}|2[0"
      "-4][0-9]|25[0-5])\\.(?:[0-9]|[0-9]{2}|[0-1][0-9]{2}|2[0-4][0-9]|25[0-5"
      "])\\]).)*(?:[A-Za-z](?:[A-Za-z]|[0-9]|-)+(?:[A-Za-z]|[0-9])|#[0-9]+|\\"
      "[(?:[0-9]|[0-9]{2}|[0-1][0-9]{2}|2[0-4][0-9]|25[0-5])\\.(?:[0-9]|[0-9]"
      "{2}|[0-1][0-9]{2}|2[0-4][0-9]|25[0-5])\\.(?:[0-9]|[0-9]{2}|[0-1][0-9]{"
      "2}|2[0-4][0-9]|25[0-5])\\.(?:[0-9]|[0-9]{2}|[0-1][0-9]{2}|2[0-4][0-9]|"
      "25[0-5])\\])"
  
      ")$", domain);
      return rc;
  }
  
  static int helo_rfc1035domain(char *msg, char **domain)
  {
      int rc;
  
      rc = str_parse(msg, 
              "^.+ ("
      /*
       ##
       ##  The mega Perl regular expression below is generated
       ##  with the following Perl program. This is only possible
       ##  because the given grammar is Chomsky-3 (right or left
       ##  linear grammar, but noth both).
       ##
  
       # BNF grammar for <domain> according to RFC1035:
       # <letter>      ::= any one of the 52 alphabetic characters A through Z in upper case and a through z in lower case
       # <digit>       ::= any one of the ten digits 0 through 9
       # <let-dig>     ::= <letter> | <digit>
       # <let-dig-hyp> ::= <let-dig> | "-"
       # <ldh-str>     ::= <let-dig-hyp> | <let-dig-hyp> <ldh-str>
       # <label>       ::= <letter> [ [ <ldh-str> ] <let-dig> ]
       # <subdomain>   ::= <label> | <subdomain> "." <label>
       # <domain>      ::= <subdomain> | " "
       #
       # corresponding Perl regular expression ($domain)
       $letter      = "[A-Za-z]";
       $digit       = "[0-9]";
       $let_dig     = "(?:$letter|$digit)";
       $let_dig_hyp = "(?:$let_dig|-)";
       $ldh_str     = "${let_dig_hyp}+";
       $label       = "(?:$letter(?:(?:$ldh_str)?$let_dig)?)";
       $subdomain   = "(?:$label\.)*$label";
       $domain      = "(?:$subdomain| )";
       #
       # translate into C string block suitable for passing to the Perl
       # Compatible Regular Expressions (PCRE) based string library Str.
       my $cregex = $domain;
       $cregex .= "\n";
       $cregex =~ s|\\|\\\\|sg;
       $cregex =~ s|(.{17})|$1\n|sg;
       $cregex =~ s|([^\n]+)\n|"$1"\n|sg;
       $cregex =~ s|\n\n|\n|sg;
       print "$cregex";
       */
  
      "(?:(?:(?:[A-Za-z](?:(?:(?:(?:[A-Za-z]|[0-9])|-)+)?(?:[A-Za-z]|[0-9]))?"
      ").)*(?:[A-Za-z](?:(?:(?:(?:[A-Za-z]|[0-9])|-)+)?(?:[A-Za-z]|[0-9]))?)|"
      " )"
  
      ")$", domain);
      return rc;
  }
  
  static lmtp_rc_t lmtp_cb_mail(lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *_ctx)
  {
      lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx;
      lmtp_rc_t    rc;
      lmtp_res_t   res;
  
      log1(ctx, INFO, "LMTP service executing MAIL command < %s", req->msg);
  
      /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   553 Requested action not taken: mailbox name not allowed
       *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
       *  RFC1893 3.5 Network and Routing Status          X.1.8   Bad sender's system address
       */
      log0(ctx, TRACE, "checking for previous LHLO");
      if (!ctx->session.lhlo_seen) {
          res.statuscode = "553";
          res.dsncode    = "5.1.8";
          res.statusmsg  = "friendly people say LHLO to open a transmission channel.";
          CU(LMTP_OK);
      }
  
      /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   503 Bad sequence of commands
       *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
       *  RFC1893 3.5 Network and Routing Status          X.5.0   Other or undefined protocol status
       */
      log0(ctx, TRACE, "checking for previous MAIL");
      if (ctx->msg != NULL) {
          res.statuscode = "503";
          res.dsncode    = "5.5.0";
          res.statusmsg  = "Sender already specified.";
          CU(LMTP_OK);
      }
  
      /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   452 Requested action not taken: insufficient system storage
       *  RFC1893 2. Status Codes                         4.X.X   Persistent Transient Failure
       *  RFC1893 3.5 Network and Routing Status          X.3.1   Mail system full 
       */
      log0(ctx, TRACE, "msg_create");
      if ((ctx->msg = msg_create()) == NULL) {
          res.statuscode = "452";
          res.dsncode    = "4.3.1";
          res.statusmsg  = "Internal error - memory.";
          CU(LMTP_ERR_MEM);
      }
      ctx->msg->l2 = ctx->l2;
  
      /*  RFC1652 2. Framework for the 8bit MIME Transport Extension
       *  (4)  one optional parameter using the keyword BODY is added to the MAIL
       *  FROM command.  The value associated with this parameter is a keyword
       *  indicating whether a 7bit message [...] or a MIME message [...] is
       *  being sent. The syntax of the value is as follows, using the ABNF
       *  notation [...]
       *  
       *  body-value ::= "7BIT" / "8BITMIME"
       *  
       *  "MAIL From:<foo@bar>"
       *  "MAIL From:<foo@bar> BODY=8BITMIME"
       *  "MAIL From:<foo@bar> BODY=7BIT"
       *  
       *  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   553 Requested action not taken: mailbox name not allowed
       *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
       *  RFC1893 3.5 Network and Routing Status          X.1.7   Bad sender's mailbox address syntax
       */
      log0(ctx, TRACE, "checking if sender address is a domain name");
      if (str_parse(req->msg, "m/^MAIL From:\\s*<(?:.+@.+)>/i") <= 0) {
          res.statuscode = "553";
          res.dsncode    = "5.1.7";
          res.statusmsg  = "Domain name required for sender address.";
          CU(LMTP_OK);
      }
      /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   501 Syntax error in parameters or arguments
       *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
       *  RFC1893 3.5 Network and Routing Status          X.5.4   Invalid command arguments
       */
      log0(ctx, TRACE, "checking BODY keyword");
      if (str_parse(req->msg, "m/^MAIL From:\\s*<(.+@.+)>"
                              "(?:\\s+BODY=(?:7BIT|8BITMIME)\\s*)?$/i", 
                              &ctx->msg->mail_from) <= 0) {
          res.statuscode = "501";
          res.dsncode    = "5.5.4";
          res.statusmsg  = "Unknown parameter for keyword BODY.";
          CU(LMTP_OK);
      }
      
      /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   550 Requested action not taken: mailbox unavailable
       *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
       *  RFC1893 3.5 Network and Routing Status          X.7.1   Delivery not authorized, message refused
       */
      log0(ctx, TRACE, "checking if sender is allowed");
      if (ctx->option_mailfrom != NULL) {
          log2(ctx, TRACE, "\"%s\" matching against \"%s\"", ctx->msg->mail_from, ctx->option_mailfrom);
          if (str_parse(ctx->msg->mail_from, ctx->option_mailfrom) <= 0) {
              res.statuscode = "550";
              res.dsncode    = "5.7.1";
              res.statusmsg  = "Delivery not authorized, message refused.";
              CU(LMTP_OK);
          }
      }
  
      /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   250 Requested mail action okay, completed
       *  RFC1893 2. Status Codes                         2.X.X   Success
       *  RFC1893 3.5 Network and Routing Status          X.1.0   Other address status
       */
      res.statuscode = "250";
      res.dsncode    = "2.1.0";
      res.statusmsg  = "Sender ok.";
      lmtp_response(lmtp, &res);
      return LMTP_OK;
  
      CUS:
      lmtp_response(lmtp, &res);
      if (ctx->msg != NULL) {
          msg_destroy(ctx->msg);
          ctx->msg = NULL;
      }
      return rc;
  }
  
  static lmtp_rc_t lmtp_cb_rcpt(lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *_ctx)
  {
      lmtp_res_t   res;
      lmtp_rc_t    rc;
      lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx;
      char        *cp;
      char        *group;
  
      log1(ctx, INFO, "LMTP service executing RCPT command < %s", req->msg);
  
      /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   503 Bad sequence of commands
       *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
       *  RFC1893 3.5 Network and Routing Status          X.5.0   Other or undefined protocol status
       */
      log0(ctx, TRACE, "checking for previous MAIL");
      if ((ctx->msg == NULL) || (ctx->msg->mail_from == NULL)) {
          res.statuscode = "503";
          res.dsncode    = "5.5.0";
          res.statusmsg  = "specify sender with MAIL first.";
          CU(LMTP_OK);
      }
  
      /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   501 Syntax error in parameters or arguments
       *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
       *  RFC1893 3.5 Network and Routing Status          X.5.2   Syntax error
       */
      log0(ctx, TRACE, "checking parameter syntax");
      if (str_parse(req->msg, "m/^RCPT To:\\s*(.+)$/i", &cp) <= 0) {
          res.statuscode = "501";
          res.dsncode    = "5.5.2";
          res.statusmsg  = "Syntax error in parameters.";
          CU(LMTP_OK);
      }
      
      /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   550 Requested action not taken: mailbox unavailable
       *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
       *  RFC1893 3.5 Network and Routing Status          X.1.1   Bad destination mailbox address
       */
      log0(ctx, TRACE, "checking for empty parameter");
      if ((cp == NULL) || (strlen(cp) == 0)) {
          res.statuscode = "550";
          res.dsncode    = "5.1.1";
          res.statusmsg  = "empty Recipient/ Group.";
          CU(LMTP_OK);
      }
  
      /* in GROUPMODE = ARG|HEADER recipient must be acknowledged and stored to
       * give proper pipelining responses.  in GROUPMODE = ENVELOPE recipient is
       * transformed into a group and matched against groupfilter. Only valid
       * groups are stored to give proper pipelining responses.
       *
       *  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   550 Requested action not taken: mailbox unavailable
       *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
       *  RFC1893 3.5 Network and Routing Status          X.1.1   Bad destination mailbox address
       *                                                  X.7.2   Mailing list expansion prohibited
       */
      log1(ctx, DEBUG, "ctx->option_groupmode=%d", ctx->option_groupmode);
      if (ctx->option_groupmode == GROUPMODE_ENVELOPE) {
          log0(ctx, TRACE, "groupmode=envelope; transform recipient into group");
          if (str_parse(cp, "m/^<(.+)?@[^@]+>$/i", &group) <= 0) {
              res.statuscode = "550";
              res.dsncode    = "5.1.1";
              res.statusmsg  = "Recipient did not transform into group.";
              CU(LMTP_OK);
          }
          log1(ctx, TRACE, "groupmode=envelope; match group %s", group);
          if (!groupmatch(ctx->azGroupargs, ctx->asGroupargs, group)) {
              res.statuscode = "550";
              res.dsncode    = "5.7.2";
              res.statusmsg  = "unmatched Group.";
              CU(LMTP_OK);
          }
          log1(ctx, TRACE, "memorize group %s", group);
          argz_add(&ctx->msg->azEnvgroups, &ctx->msg->asEnvgroups, group);
      }
      log1(ctx, TRACE, "memorize recipient %s", cp);
      argz_add(&ctx->msg->azRcpt, &ctx->msg->asRcpt, cp);
  
      /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   250 Requested mail action okay, completed
       *  RFC1893 2. Status Codes                         2.X.X   Success
       *  RFC1893 3.5 Network and Routing Status          X.1.5   Destination address valid
       */
      res.statuscode = "250";
      res.dsncode    = "2.1.5";
      res.statusmsg  = ctx->option_groupmode == GROUPMODE_ENVELOPE ? "Group accepted." : "Recipient accepted.";
      CU(LMTP_OK);
  
      CUS:
      lmtp_response(lmtp, &res);
      return rc;
  }
  
  int groupmatch(char *azPattern, size_t asPattern, char *cpGroup)
  {
      int bGroupmatch;
      char *cpGroupmatch;
  
      bGroupmatch = FALSE;
      cpGroupmatch = NULL;
      while ((cpGroupmatch = argz_next(azPattern, asPattern, cpGroupmatch)) != NULL) {
          if (shpat_match(cpGroupmatch, cpGroup, 0) == 0)
              bGroupmatch = TRUE;
      }
      return bGroupmatch;
  }
  
  static lmtp_rc_t lmtp_cb_data(lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *_ctx)
  {
      lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx;
      lmtp_rc_t    rc = LMTP_OK;
      lmtp_res_t   res;
      char        *azErr;
      size_t       asErr;
      char         errorstring[STDSTRLEN];
      char        *rcpt;
      int          i;
      int          bSuccess;
      char        *cp;
      int          bOk;
      char        *cpRestrictheader;
      char        *cpRestrictvalue;
  
      log1(ctx, INFO, "LMTP service executing DATA command < %s", req->msg);
  
      /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   503 Bad sequence of commands
       *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
       *  RFC1893 3.5 Network and Routing Status          X.5.0   Other or undefined protocol status
       */
      log0(ctx, TRACE, "checking for previous RCPT");
      if ((ctx->msg == NULL) || (argz_count(ctx->msg->azRcpt, ctx->msg->asRcpt) == 0)) {
          res.statuscode = "503";
          res.dsncode    = "5.5.0";
          res.statusmsg  = "specify recipient with RCPT first.";
          lmtp_response(lmtp, &res);
          return LMTP_OK;
      }
  
      /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   354 Start mail input; end with <CRLF>.<CRLF>
       */
      log0(ctx, TRACE, "tell remote to send message now");
      res.statuscode = "354";
      res.dsncode    = NULL; /* DSN not used for data */
      res.statusmsg  = "Enter mail, end with \".\" on a line by itself";
      lmtp_response(lmtp, &res);
  
      log1(ctx, TRACE, "read message with maximum size to accept = %d", ctx->option_maxmessagesize);
      rc = lmtp_readmsg(lmtp, &ctx->msg->cpMsg, ctx->option_maxmessagesize);
  
      /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   552 Requested mail action aborted: exceeded storage allocation
       *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
       *  RFC1893 3.5 Network and Routing Status          X.2.3   Message length exceeds administrative limit.
       */
      log0(ctx, TRACE, "checking for excessive message size");
      if (rc == LMTP_ERR_OVERFLOW) {
          str_format(errorstring, sizeof(errorstring), "Message length exceeds administrative limit. %s", lmtp_error(rc));
          res.statuscode = "552";
          res.dsncode    = "5.2.3";
          res.statusmsg  = errorstring;
          rcpt = NULL;
          while ((rcpt = argz_next(ctx->msg->azRcpt, ctx->msg->asRcpt, rcpt)) != NULL) {
              lmtp_response(lmtp, &res);
          }
          return LMTP_OK;
      }
  
      /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   451 Requested action aborted: local error in processing
       *  RFC1893 2. Status Codes                         4.X.X   Persistent Transient Failure
       *  RFC1893 3.5 Network and Routing Status          X.3.2   System not accepting network messages
       */
      log0(ctx, TRACE, "checking for system error");
      if (rc == LMTP_ERR_SYSTEM) {
          str_format(errorstring, sizeof(errorstring), "System error reading message: %s", strerror(errno));
          res.statuscode = "451";
          res.dsncode    = "4.3.2";
          res.statusmsg  = errorstring;
          rcpt = NULL;
          while ((rcpt = argz_next(ctx->msg->azRcpt, ctx->msg->asRcpt, rcpt)) != NULL) {
              lmtp_response(lmtp, &res);
          }
          return LMTP_OK;
      }
  
      /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   451 Requested action aborted: local error in processing
       *  RFC1893 2. Status Codes                         4.X.X   Persistent Transient Failure
       *  RFC1893 3.5 Network and Routing Status          X.3.2   System not accepting network messages
       */
      log0(ctx, TRACE, "checking for other error");
      if(rc != LMTP_OK) {
          str_format(errorstring, sizeof(errorstring), "Unknown error reading message: %s", lmtp_error(rc));
          res.statuscode = "451";
          res.dsncode    = "4.3.2";
          res.statusmsg  = errorstring;
          rcpt = NULL;
          while ((rcpt = argz_next(ctx->msg->azRcpt, ctx->msg->asRcpt, rcpt)) != NULL) {
              lmtp_response(lmtp, &res);
          }
          return LMTP_OK;
      }
  
      /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   554 Transaction failed
       *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
       *  RFC1893 3.5 Network and Routing Status          X.6.5   Conversion Failed
       */
      log0(ctx, TRACE, "split message");
      if ((rc = msg_split(ctx->msg)) != MSG_OK) {
          str_format(errorstring, sizeof(errorstring), "Error splitting message: %s", msg_error(rc));
          res.statuscode = "554";
          res.dsncode    = "5.6.5";
          res.statusmsg  = errorstring;
          rcpt = NULL;
          while ((rcpt = argz_next(ctx->msg->azRcpt, ctx->msg->asRcpt, rcpt)) != NULL) {
              lmtp_response(lmtp, &res);
          }
          return LMTP_OK;
      }
  
      if      (ctx->option_groupmode == GROUPMODE_ENVELOPE) {
          if ((cp = malloc(ctx->msg->asEnvgroups + 1)) == NULL) {
              /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   452 Requested action not taken: insufficient system storage
               *  RFC1893 2. Status Codes                         4.X.X   Persistent Transient Failure
               *  RFC1893 3.5 Network and Routing Status          X.3.1   Mail system full 
               */
              if ((ctx->msg = msg_create()) == NULL) {
                  res.statuscode = "452";
                  res.dsncode    = "4.3.1";
                  res.statusmsg  = "Internal error - memory.";
                  lmtp_response(lmtp, &res);
                  return LMTP_ERR_MEM;
              }
          }
          ctx->msg->azNewsgroups = memcpy(cp, ctx->msg->azEnvgroups, ctx->msg->asEnvgroups);
          ctx->msg->asNewsgroups =                                   ctx->msg->asEnvgroups;
      }
      else if (ctx->option_groupmode == GROUPMODE_ARG) {
          if ((cp = malloc(ctx->asGroupargs + 1)) == NULL) {
              /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   452 Requested action not taken: insufficient system storage
               *  RFC1893 2. Status Codes                         4.X.X   Persistent Transient Failure
               *  RFC1893 3.5 Network and Routing Status          X.3.1   Mail system full 
               */
              if ((ctx->msg = msg_create()) == NULL) {
                  res.statuscode = "452";
                  res.dsncode    = "4.3.1";
                  res.statusmsg  = "Internal error - memory.";
                  lmtp_response(lmtp, &res);
                  return LMTP_ERR_MEM;
              }
          }
          ctx->msg->azNewsgroups = memcpy(cp, ctx->azGroupargs, ctx->asGroupargs);
          ctx->msg->asNewsgroups =                              ctx->asGroupargs;
      }
      else { /*                      == GROUPMODE_HEADER */
          cp = ctx->msg->azNewsgroups;
          while (cp != NULL) {
              if (!groupmatch(ctx->azGroupargs, ctx->asGroupargs, cp)) {
                  if (argz_next(ctx->msg->azNewsgroups, ctx->msg->asNewsgroups, cp) == NULL) {
                      argz_delete(&ctx->msg->azNewsgroups, &ctx->msg->asNewsgroups, cp);
                      break;
                  }
                  else
                      argz_delete(&ctx->msg->azNewsgroups, &ctx->msg->asNewsgroups, cp);
              } else {
                  cp = argz_next(ctx->msg->azNewsgroups, ctx->msg->asNewsgroups, cp);
              }
          }
          /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   550 Requested action not taken: mailbox unavailable
           *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
           *  RFC1893 3.5 Network and Routing Status          X.7.2   Mailing list expansion prohibited
           */
          if (ctx->msg->asNewsgroups == 0) {
              rcpt = NULL;
              while ((rcpt = argz_next(ctx->msg->azRcpt, ctx->msg->asRcpt, rcpt)) != NULL) {
                  res.statuscode = "550";
                  res.dsncode    = "5.7.2";
                  res.statusmsg  = "Header did not match any valid group.";
                  lmtp_response(lmtp, &res);
              }
              return LMTP_OK;
          }
      }
  
      /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   550 Requested action not taken: mailbox unavailable
       *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
       *  RFC1893 3.5 Network and Routing Status          X.7.1   Delivery not authorized, message refused
       */
      log0(ctx, TRACE, "checking if restricted header causes reject");
      if (ctx->option_restrictheader != NULL) {
          bOk = FALSE;
          cp = NULL;
          while ((cp = argz_next(ctx->msg->azHeaders, ctx->msg->asHeaders, cp)) != NULL) {
              cpRestrictheader = cp;
              if ((cp = argz_next(ctx->msg->azHeaders, ctx->msg->asHeaders, cp)) == NULL)
                  break;
              cpRestrictvalue = cp;
              str_format(errorstring, sizeof(errorstring), "%s %s", cpRestrictheader, cpRestrictvalue);
              if (str_parse(errorstring, ctx->option_restrictheader) <= 0) {
                  log2(ctx, TRACE, "\"%s\" matching against \"%s\" NO", errorstring, ctx->option_restrictheader);
              }
              else {
                  log2(ctx, TRACE, "\"%s\" matching against \"%s\": YES", errorstring, ctx->option_restrictheader);
                  bOk = TRUE;
                  break;
              }
          }
          if (bOk) {
              log0(ctx, TRACE, "restricted header found");
              rcpt = NULL;
              while ((rcpt = argz_next(ctx->msg->azRcpt, ctx->msg->asRcpt, rcpt)) != NULL) {
                  res.statuscode = "550";
                  res.dsncode    = "5.7.1";
                  res.statusmsg  = "Restricted header matched, message rejected.";
                  lmtp_response(lmtp, &res);
              }
              return LMTP_OK;
          }
      }
  
      /* Optionally add command line specified Header/Value Pairs
       */
      log0(ctx, TRACE, "adding header/value pairs");
      if ((ctx->asHeaderValuePairs >= 1) && ((ctx->asHeaderValuePairs & 1) == 0)) {
          cp = NULL;
          while ((cp = argz_next(ctx->azHeaderValuePairs, ctx->asHeaderValuePairs, cp)) != NULL) {
              var_rc_t var_rc;
              char *res_ptr;
              if ((var_rc = var_expand(cp, strlen(cp), &res_ptr, NULL,
                                       ctx_lookup, ctx, &ctx_lookup_cfg, TRUE)) != VAR_OK) {
                  log2(ctx, ERROR, "expansion of '%s' failed: %s", cp, var_strerror(var_rc));
                  continue;
              }
              log1(ctx, DEBUG, "adding expanded header: \"%s\"", res_ptr);
              argz_add(&ctx->msg->azHeaders, &ctx->msg->asHeaders, res_ptr);
              free(res_ptr);
          }
      }
  
      /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   554 Transaction failed
       *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
       *  RFC1893 3.5 Network and Routing Status          X.6.5   Conversion Failed
       */
      log0(ctx, TRACE, "join message");
      if ((rc = msg_join(ctx->msg)) != MSG_OK) {
          str_format(errorstring, sizeof(errorstring), "Error joining message: %s", msg_error(rc));
          res.statuscode = "554";
          res.dsncode    = "5.6.5";
          res.statusmsg  = errorstring;
          rcpt = NULL;
          while ((rcpt = argz_next(ctx->msg->azRcpt, ctx->msg->asRcpt, rcpt)) != NULL) {
              lmtp_response(lmtp, &res);
          }
          return LMTP_OK;
      }
  
      log0(ctx, TRACE, "deliver message");
      bSuccess = NNTP_ERR_DELIVERY; /* assume a hard error for the worst case */
      for (i = 0; i < ctx->nsc; i++) {
          switch (ctx->option_operationmode) {
              case OPERATIONMODE_FAKE:
                  ctx->ns[i].rc = NNTP_FAKE;
                  break;
              case OPERATIONMODE_POST:
                  ctx->ns[i].rc = nntp_post(ctx->ns[i].nntp, ctx->msg);
                  break;
              case OPERATIONMODE_FEED:
                  ctx->ns[i].rc = nntp_feed(ctx->ns[i].nntp, ctx->msg);
                  break;
          }
          if (ctx->ns[i].rc == NNTP_OK)
              bSuccess = NNTP_OK;
          if (   bSuccess != NNTP_OK
              && (
                     (ctx->ns[i].rc == NNTP_ERR_SYSTEM)
                  || (ctx->ns[i].rc == NNTP_DEFER)
                    )
                )
              bSuccess = NNTP_DEFER;
      }
  
      if (ctx->option_operationmode == OPERATIONMODE_FAKE) {
          str_format(errorstring, sizeof(errorstring),
                     "NNTP running in fake mode, delivery of %s [%d bytes] %s but delivery status forced to",
                     ctx->msg->cpMsgid,
                     strlen(ctx->msg->cpMsg),
                     ((bSuccess == NNTP_OK)    ? "succeeded" :
                      (bSuccess == NNTP_DEFER) ? "deferred"  : "failed"));
          switch (ctx->option_operationmodefakestatus[0]) {
              case '5':
                  bSuccess = NNTP_ERR_UNKNOWN;
                  log2(ctx, NOTICE, "%s %s", errorstring, "failed");
                  break;
              case '4':
                  bSuccess = NNTP_DEFER;
                  log2(ctx, NOTICE, "%s %s", errorstring, "deferred");
                  break;
              default:
                  bSuccess = NNTP_OK;
                  log2(ctx, NOTICE, "%s %s", errorstring, "succeeded");
                  break;
          }
      } else {
          str_format(errorstring, sizeof(errorstring), "%sdelivery of %s [%d bytes]", 
                     ((ctx->option_operationmode == OPERATIONMODE_POST) ? "post " :
                     (ctx->option_operationmode == OPERATIONMODE_FEED) ? "feed " : ""),
                     ctx->msg->cpMsgid,
                     strlen(ctx->msg->cpMsg));
          if (bSuccess == NNTP_OK)
              log2(ctx, NOTICE,  "%s %s", errorstring, "succeeded");
          else if(bSuccess == NNTP_DEFER)
              log2(ctx, WARNING, "%s %s", errorstring, "deferred");
          else
              log2(ctx, ERROR,   "%s %s", errorstring, "failed");
      }
  
  
      /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   250 Requested mail action okay, completed
       *                                                  451 Requested action aborted: local error in processing
       *                                                  554 Transaction failed
       *  RFC1893 2. Status Codes                         2.X.X   Success
       *                                                  4.X.X   Persistent Transient Failure
       *                                                  5.X.X   Permanent Failure
       *  RFC1893 3.5 Network and Routing Status          X.0.0   Other undefined Status
       *                                                  X.4.2   Bad connection
       */
      rcpt = NULL;
      while ((rcpt = argz_next(ctx->msg->azRcpt, ctx->msg->asRcpt, rcpt)) != NULL) {
          if (ctx->option_operationmode == OPERATIONMODE_FAKE) {
                      res.statuscode = ctx->option_operationmodefakestatus;
                      res.dsncode    = ctx->option_operationmodefakedsn;
                      str_format(errorstring, sizeof(errorstring),
                                 "NNTP noop fake return for %s", rcpt);
          } else {
              switch (bSuccess) {
                  case NNTP_OK:
                      str_format(errorstring, sizeof(errorstring),
                                 "Message accepted for delivery to %s", rcpt);
                      res.statuscode = "250";
                      res.dsncode    = "2.0.0";
                      break;
                  case NNTP_DEFER:
                      str_format(errorstring, sizeof(errorstring),
                                 "Requested action aborted for %s, local error in processing.", rcpt);
                      res.statuscode = "451";
                      res.dsncode    = "4.4.2";
                      break;
                  default:
                      str_format(errorstring, sizeof(errorstring),
                                 "Error sending article for %s.", rcpt);
                      res.statuscode = "554";
                      res.dsncode    = "5.4.2";
                      break;
              }
          }
          azErr = NULL;
          asErr = 0;
          argz_add(&azErr, &asErr, errorstring);
          for (i = 0; i < ctx->nsc; i++) {
              if (ctx->ns[i].rc != NNTP_OK) {
                  str_format(errorstring, sizeof(errorstring), 
                  "%s:%s returned %s\n"
                  "%s:%s lastresp \"%s\"", 
                  ctx->ns[i].h, ctx->ns[i].p, nntp_error(ctx->ns[i].rc), 
                  ctx->ns[i].h, ctx->ns[i].p, nntp_lastresp(ctx->ns[i].nntp));
                  argz_add(&azErr, &asErr, errorstring);
              }
          }
          if (azErr != NULL) {
              argz_stringify(azErr, asErr, '\n');
              res.statusmsg  = azErr;
              lmtp_response(lmtp, &res);
              free(azErr);
              azErr = NULL;
              asErr = 0;
          }
          else {
              res.statusmsg  = errorstring;
              lmtp_response(lmtp, &res);
          }
      }
  
      msg_destroy(ctx->msg);
      ctx->msg = NULL;
  
      return LMTP_OK;
  }
  
  static lmtp_rc_t lmtp_cb_noop(lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *_ctx)
  {
      lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx;
      lmtp_res_t res;
      lmtp_rc_t rc = LMTP_OK;
  
      log1(ctx, INFO, "LMTP service executing NOOP command < %s", req->msg);
  
      /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   250 Requested mail action okay, completed
       *  RFC1893 2. Status Codes                         2.X.X   Success
       *  RFC1893 3.5 Network and Routing Status          X.0.0   Other undefined Status
       */
      res.statuscode = "250";
      res.dsncode    = "2.0.0";
      res.statusmsg  = "OK. Nice talking to you.";
      lmtp_response(lmtp, &res);
      return rc;
  }
  
  static lmtp_rc_t lmtp_cb_rset(lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *_ctx)
  {
      lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx;
      lmtp_res_t res;
      lmtp_rc_t rc = LMTP_OK;
  
      log1(ctx, INFO, "LMTP service executing RSET command < %s", req->msg);
  
      lmtp_gfs_rset(ctx);
  
      /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   250 Requested mail action okay, completed
       *  RFC1893 2. Status Codes                         2.X.X   Success
       *  RFC1893 3.5 Network and Routing Status          X.0.0   Other undefined Status
       */
      res.statuscode = "250";
      res.dsncode    = "2.0.0";
      res.statusmsg  = "Reset state.";
      lmtp_response(lmtp, &res);
      return rc;
  }
  
  static void lmtp_gfs_rset(lmtp2nntp_t *ctx)
  {
      log0(ctx, TRACE, "LMTP service RSET command - graceful shutdown");
  
      if (ctx->msg != NULL) {
          msg_destroy(ctx->msg);
          ctx->msg = NULL;
      }
  }
  
  static lmtp_rc_t lmtp_cb_quit(lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *_ctx)
  {
      lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx;
      lmtp_res_t res;
      lmtp_rc_t rc = LMTP_EOF;
  
      log1(ctx, INFO, "LMTP service executing QUIT command < %s", req->msg);
  
      lmtp_gfs_quit(ctx);
  
      /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   221 <domain> Service closing transmission channel
       *  RFC1893 2. Status Codes                         2.X.X   Success
       *  RFC1893 3.5 Network and Routing Status          X.0.0   Other undefined Status
       */
      res.statuscode = "221";
      res.dsncode    = "2.0.0";
      res.statusmsg  = "LMTP Service closing transmission channel.";
      lmtp_response(lmtp, &res);
      return rc;
  }
  
  static void lmtp_gfs_quit(lmtp2nntp_t *ctx)
  {
      log0(ctx, TRACE, "LMTP service QUIT command - graceful shutdown");
  
      lmtp_gfs_rset(ctx);
      resetsession(&ctx->session);
  }
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================
  $ cvs update -p -r1.1 lmtp2nntp_msg.c
  /*
  **  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  **  mailer which forwards mails as Usenet news articles via NNTP.
  **  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  **
  **  This program is free software; you can redistribute it and/or
  **  modify it under the terms of the GNU General Public  License
  **  as published by the Free Software Foundation; either version
  **  2.0 of the License, or (at your option) any later version.
  **
  **  This program is distributed in the hope that it will be useful,
  **  but WITHOUT ANY WARRANTY; without even the implied warranty of
  **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  **  General Public License for more details.
  **
  **  You should have received a copy of the GNU General Public License
  **  along with this file; if not, write to the Free Software
  **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  **  USA, or contact the OSSP project <ossp@ossp.org>.
  **
  **  msg.c: mail message manipulation library
  */
  
  #include <stdlib.h>
  #include <stdio.h>
  
  #include "lmtp2nntp_msg.h"
  #include "lmtp2nntp_argz.h"
  
  #include "str.h"
  
  /* third party */
  #include "l2.h"
  
  #ifdef HAVE_CONFIG_H
  #include "config.h"
  #endif
  #if defined(HAVE_DMALLOC_H) && defined(DMALLOC)
  #include "dmalloc.h"
  #endif
  
  msg_t *msg_create(void)
  {
      msg_t *msg;
  
      if ((msg = (msg_t *)malloc(sizeof(msg_t))) == NULL)
          return NULL;
  
      msg->azEnvgroups = NULL;
      msg->asEnvgroups = 0;
      msg->cpMsg = NULL;
      msg->azHeaders = NULL;
      msg->asHeaders = 0;
      msg->cpFid = NULL;
      msg->cpBody = NULL;
      msg->cpMsgid = NULL;
      msg->mail_from = NULL;
      msg->azRcpt = NULL;
      msg->asRcpt = 0;
      msg->azNewsgroups = NULL;
      msg->asNewsgroups = 0;
      msg->l2 = NULL; /* this is a copy only */
  
      return msg;
  }
  
  void msg_destroy(msg_t *msg)
  {
      if (msg == NULL)
          return;
  
      if (msg->azEnvgroups != NULL)
          free(msg->azEnvgroups);
      if (msg->cpMsg != NULL)
          free(msg->cpMsg);
      if (msg->azHeaders != NULL)
          free(msg->azHeaders);
      if (msg->cpFid != NULL)
          free(msg->cpFid);
      if (msg->cpBody != NULL)
          free(msg->cpBody);
      if (msg->cpMsgid != NULL)
          free(msg->cpMsgid);
      if (msg->mail_from != NULL)
          free(msg->mail_from);
      if (msg->azRcpt != NULL)
          free(msg->azRcpt);
      if (msg->azNewsgroups != NULL)
          free(msg->azNewsgroups);
      msg->l2 = NULL; /* this is a copy only, the "parent" needs to clean this up */
  
      free(msg);
      return;
  }
  
  msg_rc_t msg_split(msg_t *msg)
  {
      char        *cpName;
      char        *cpValue;
      char        *cpRem;     /* Remainder */
      char        *cp;
      char        *cpHeaders;
  
      /* INPUTS
       *
       * msg->cpMsg
       * must contain the wholly RFC0822 formatted message with native
       * (unescaped) dots at the beginning of a line, the 'From ' envelope,
       * headers, double newline, body, NUL, no trailing dot;
       *
       * OUTPUTS
       *
       * msg->cpMsg
       * free()d and set to NULL
       * 
       * msg->azHeaders, msg->asHeaders contains the headers in argz format, one
       * logical NUL-terminated line per header which might be wrapped into
       * multiple '\n'-ended physical lines. The "From " envelope, "Received:",
       * "Path:", "To:" and "Cc:" headers are removed silently. The
       * "Newsgroups:" and "Message-ID" headers are removed and their values are
       * stored in separate structures (see below).
       *
       * msg->cpBody
       * contains the unmodified body of the message, NUL-terminated, no
       * trailing dot.
       *
       * msg->cpMsgid
       * contains the message id including surrounding angle brackets.
       *
       * msg->azNewsgroups, asNewsgroups
       * is a argz-type array of strings containing the Newsgroups based on the
       * header information.
       */
  
      log0(msg, DEBUG, "split message into header and body");
      if (str_parse(msg->cpMsg, "m/((?:.*?)\\n)\\n(.*)$/s", &cpHeaders, &msg->cpBody) <= 0)
          return MSG_ERR_SPLITHEADBODY;
  
      free(msg->cpMsg);
      msg->cpMsg = NULL;
  
      log0(msg, DEBUG, "replace envelope From w/o colon by X-F: pseudotag");
      /* This eliminates the special case of having one header, which is really
       * an embedded envelope, not ending with a colon while all others do.
       * After splitting headers into name and value pairs this envelope ist
       * stripped off.
       */
      if (strncasecmp(cpHeaders, "From", 4) == 0)
          memcpy(cpHeaders, "X-F:", 4);
  
      log0(msg, DEBUG, "unwrap header lines");
      /* poor man's s///g simulator as current str library doesn't support global substitution */
      while (str_parse(cpHeaders, "s/(.*?)\\n[ \\t]+(.*)/$1 $2/s", &cpRem) > 0) {
          free(cpHeaders);
          cpHeaders = cpRem;
      }
  
      log0(msg, DEBUG, "split header lines into names and values");
      while (str_parse(cpHeaders, "m/^[> \\t]*([\\x21-\\x7e]+?:)[ \\t]*([^\\n]*?)[ \\t]*\\n(.*)/s", &cpName, &cpValue, &cpRem) > 0) {
          free(cpHeaders);
          cpHeaders = cpRem;
          argz_add(&msg->azHeaders, &msg->asHeaders, cpName);
          argz_add(&msg->azHeaders, &msg->asHeaders, cpValue);
          free(cpName);
          free(cpValue);
      }
  
      log0(msg, DEBUG, "check for headers we care about and do whatever neccessary");
      msg->cpMsgid = NULL;
      msg->azNewsgroups = NULL;
      msg->asNewsgroups = 0;
      cp = msg->azHeaders;
      while (cp != NULL) {
          log1(msg, DEBUG, "processing header \"%s\"", cp);
          if (strcasecmp("X-F:", cp) == 0) {
              argz_delete(&msg->azHeaders, &msg->asHeaders, cp);             /* del  name  */
              argz_delete(&msg->azHeaders, &msg->asHeaders, cp);             /* del  value */
              continue;
          }
          if (strcasecmp("Path:", cp) == 0) {
              argz_delete(&msg->azHeaders, &msg->asHeaders, cp);             /* del  name  */
              argz_delete(&msg->azHeaders, &msg->asHeaders, cp);             /* del  value */
              continue;
          }
          if (strcasecmp("Received:", cp) == 0) {
              argz_delete(&msg->azHeaders, &msg->asHeaders, cp);             /* del  name  */
              if ((msg->cpFid == NULL) &&
                  (str_parse(cp, "m/\\sid\\s+<?([\\w\\d]{1,30})/i", &msg->cpFid) > 0))
                      log1(msg, DEBUG, "found foreign-ID \"%s\" for logging", msg->cpFid);
              argz_delete(&msg->azHeaders, &msg->asHeaders, cp);             /* del  value */
              continue;
          }
          if (strcasecmp("To:", cp) == 0) {
              argz_delete(&msg->azHeaders, &msg->asHeaders, cp);             /* del  name  */
              argz_delete(&msg->azHeaders, &msg->asHeaders, cp);             /* del  value */
              continue;
          }
          if (strcasecmp("Cc:", cp) == 0) {
              argz_delete(&msg->azHeaders, &msg->asHeaders, cp);             /* del  name  */
              argz_delete(&msg->azHeaders, &msg->asHeaders, cp);             /* del  value */
              continue;
          }
          if (strcasecmp("Message-ID:", cp) == 0) {
              if (msg->cpMsgid != NULL)
                  return MSG_ERR_SPLITIDMULTI;
              argz_delete(&msg->azHeaders, &msg->asHeaders, cp);             /* del  name  */
              if ((cp == NULL) || (strlen(cp) == 0))                         /* get  value */
                  return MSG_ERR_SPLITIDEMPTY;
              if ((msg->cpMsgid = strdup(cp)) == NULL)
                  return MSG_ERR_MEM;
              argz_delete(&msg->azHeaders, &msg->asHeaders, cp);             /* del  value */
              continue;
          }
          if (strcasecmp("Newsgroups:", cp) == 0) {
              argz_delete(&msg->azHeaders, &msg->asHeaders, cp);             /* del  name  */
              if (argz_add(&msg->azNewsgroups, &msg->asNewsgroups, cp) != 0) /* get  value */
                  return MSG_ERR_MEM;
              argz_delete(&msg->azHeaders, &msg->asHeaders, cp);             /* del  value */
              continue;
          }
          if ((cp = argz_next(msg->azHeaders, msg->asHeaders, cp)) == NULL)  /* next value */
              break;
          if ((cp = argz_next(msg->azHeaders, msg->asHeaders, cp)) == NULL)  /* next name  */
              break;
      }
  
      log0(msg, DEBUG, "checking Message-ID");
      if (msg->cpMsgid == NULL)
          return MSG_ERR_SPLITIDNONE;
  
      log0(msg, DEBUG, "checking Newsgroups");
      if (msg->azNewsgroups != NULL) {
          argz_stringify(msg->azNewsgroups, msg->asNewsgroups, ',');
          if (argz_create_sep(msg->azNewsgroups, ',', &msg->azNewsgroups, &msg->asNewsgroups) != 0)
              return MSG_ERR_MEM;
      }
  
      log0(msg, DEBUG, "adding mandatory Path: header");
      argz_add(&msg->azHeaders, &msg->asHeaders, "Path:");
      argz_add(&msg->azHeaders, &msg->asHeaders, "lmtp2nntp!not-for-mail");
  
      log0(msg, DEBUG, "split complete");
      return MSG_OK;
  }
  
  msg_rc_t msg_join(msg_t *msg)
  {
      char        *cp;
      char        *cpRem;
      char       **aHeaders;
      int          i;
      int          o;
      char        *cpCut;
      char        *cpWrap;
      char         c;
      char         cOld;
      int          n;
      char        *cpHeaders;
      char        *azNewheaders;
      size_t       asNewheaders;
  
      log0(msg, DEBUG, "verify Newsgroups");
      if (msg->azNewsgroups == NULL)
          return MSG_ERR_JOINGROUPNONE;
      argz_stringify(msg->azNewsgroups, msg->asNewsgroups, ',');
      if (strlen(msg->azNewsgroups) == 0)
          return MSG_ERR_JOINGROUPEMPTY;
      argz_add(&msg->azHeaders, &msg->asHeaders, "Newsgroups:");
      argz_add(&msg->azHeaders, &msg->asHeaders, msg->azNewsgroups);
  
      log0(msg, DEBUG, "verify Message-ID");
      if (msg->cpMsgid == NULL)
          return MSG_ERR_JOINIDNONE;
      if (strlen(msg->cpMsgid) == 0)
          return MSG_ERR_JOINIDEMPTY;
      argz_add(&msg->azHeaders, &msg->asHeaders, "Message-ID:");
      argz_add(&msg->azHeaders, &msg->asHeaders, msg->cpMsgid);
  
      log0(msg, DEBUG, "merge name/value pairs into single string");
      argz_add(&msg->azHeaders, &msg->asHeaders, ""); /* append empty string */
      if ((aHeaders = (char **)malloc((argz_count(msg->azHeaders, msg->asHeaders) + 1) * sizeof(char *))) == NULL)
          return MSG_ERR_MEM;
      argz_extract(msg->azHeaders, msg->asHeaders, aHeaders);
      /* replace the trailing NUL, which is *(cp-1) of the predecessor, with a
       * space at every second string. Break action when terminating NULL string
       * is detected */
      i=0;
      while(1) {
          if ((cp = aHeaders[++i]) == NULL)
              break;
          *(cp-1) = ' ';
          if ((cp = aHeaders[++i]) == NULL)
              break;
      }
      free(aHeaders);
  
      log0(msg, DEBUG, "fold headers");
      /* A logical line is split into one or more physical '\n'-terminated
       * lines. The physical line is never longer than WRAPAT characters. This
       * includes the folded data and the header name + colon + space for the
       * first line and WRAPUSING string prefix for all other lines. Leading and
       * trailing blanks of folded lines are removed while blanks inside the
       * line are preserved.  The header is never left alone in a physical line.
       * Fragments exceeding WRAPAT characters without having a blank as a
       * splitting point are forcibly cut at a non-blank character.
       */
      azNewheaders = NULL;
      asNewheaders = 0;
      cp = NULL;
      while ((cp = argz_next(msg->azHeaders, msg->asHeaders, cp)) != NULL) {
          if (strlen(cp) > WRAPAT) {
              cpRem = cp;
              cpWrap = NULL;
              for (o = 0; (cpRem[o] != ':') && (cpRem[o] != NUL); o++); /* offset name so at least one char of value remains in first line */
              o += 2; /* skip ": " */
              while ((strlen(cpRem) + (cpWrap == NULL ? 0 : strlen(WRAPUSING))) > WRAPAT) {
                  for (i = WRAPAT - 1 - (cpWrap == NULL ? 0 :
                      strlen(WRAPUSING)); (i >= o) && !isspace((int)cpRem[i]); i--);
                  if (i < o)
                      i = WRAPAT - 1 - (cpWrap == NULL ? 0 : strlen(WRAPUSING) - 1); /* sorry, forced cut at non-blank */
                  cpCut = cpRem;
                  cpRem += i;
                  for (; (isspace((int)*cpRem) && (*cpRem != NUL)); cpRem++); /* skip next lines leading blanks */
                  for (; (i >= o) && isspace((int)cpCut[i-1]); i--); /* chop off this lines trailing blanks */
                  if (i >= o) { /* only keep line fragment if some non-blanks inside */
                      if (cpWrap == NULL) {
                          if ((cpWrap = (char *)malloc(i+strlen(WRAPUSING)+1)) == NULL)
                              return MSG_ERR_MEM;
                          *cpWrap = NUL;
                          o = 1;
                      }
                      else {
                          if ((cpWrap = (char *)realloc(cpWrap, strlen(cpWrap)+i+strlen(WRAPUSING)+1)) == NULL)
                              return MSG_ERR_MEM;
                          strcat(cpWrap, WRAPUSING);
                      }
                      strncat(cpWrap, cpCut, i);
                  }
              }
              if (strlen(cpRem) > 0) {
                  if ((cpWrap = (char *)realloc(cpWrap, strlen(cpWrap)+strlen(cpRem)+strlen(WRAPUSING)+1)) == NULL)
                          return MSG_ERR_MEM;
                  strcat(cpWrap, WRAPUSING);
                  strcat(cpWrap, cpRem);
              }
              argz_add(&azNewheaders, &asNewheaders, cpWrap);
              log2(msg, DEBUG, "a folded header \"%{text}D\"", cpWrap, strlen(cpWrap));
              free(cpWrap);
          }
          else {
              argz_add(&azNewheaders, &asNewheaders, cp);
              log2(msg, DEBUG, "verbatim header \"%{text}D\"", cp, strlen(cp));
          }
      }
      free(msg->azHeaders);
      msg->azHeaders = azNewheaders;
      msg->asHeaders = asNewheaders;
  
      log0(msg, DEBUG, "strigify headers");
      argz_stringify(msg->azHeaders, msg->asHeaders, '\n');
      cpHeaders = msg->azHeaders;
  
      /********************************************************************
       * header + CRLF + body + '.' + CRLF + NUL, replacing NL with CRLF *
       ********************************************************************/
  
      log0(msg, DEBUG, "assemble header and body");
      n = 0;
      /* count size of headers, reserve space for NL to CRLF conversion */
      for (i = 0; ((c = cpHeaders[i]) != NUL); i++) {
          if (c == '\n')
              n++;
          n++;
      }
      /* if headers don't end with NL, reserve space for CRLF */
      if (i >= 0 && cpHeaders[i - 1] != '\n')
          n+=2;
      /* reserve space for CRLF between headers and body */
      n+=2;
      /* count size of body, reserve space for NL-DOT escape and NL to CRLF conversion */
      cOld = '\n';
      for (i = 0; ((c = msg->cpBody[i]) != NUL); i++) {
          if (c == '\n')
              n++;
          if (c == '.' && cOld == '\n')
              n++;
          n++;
          cOld = c;
      }
      /* if body doesn't end with NL, reserve space for CRLF */
      if (i >= 0 && msg->cpBody[i - 1] != '\n')
          n+=2;
      /* reserve space for terminating '.'-CRLF-NUL at the end of the message */
      n+=4;
  
      if ((msg->cpMsg = (char *)malloc(n)) == NULL)
          return MSG_ERR_MEM;
  
      n = 0;
      /* copy headers, do NL to CRLF conversion */
      for (i = 0; ((c = cpHeaders[i]) != NUL); i++) {
          if (c == '\n')
              msg->cpMsg[n++] = '\r';
          msg->cpMsg[n++] = c;
      }
      /* if headers don't end with NL, append CRLF */
      if (i >= 0 && cpHeaders[i - 1] != '\n') {
          msg->cpMsg[n++] = '\r';
          msg->cpMsg[n++] = '\n';
      }
      /* add CRLF between headers and body */
      msg->cpMsg[n++] = '\r';
      msg->cpMsg[n++] = '\n';
      /* copy body, do NL-DOT escape and NL to CRLF conversion */
      cOld = '\n';
      for (i = 0; ((c = msg->cpBody[i]) != NUL); i++) {
          if (c == '\n')
              msg->cpMsg[n++] = '\r';
          if (c == '.' && cOld == '\n')
              msg->cpMsg[n++] = '.';
          msg->cpMsg[n++] = c;
          cOld = c;
      }
      /* if body doesn't end with NL, append CRLF */
      if (i >= 0 && msg->cpBody[i - 1] != '\n') {
          msg->cpMsg[n++] = '\r';
          msg->cpMsg[n++] = '\n';
      }
      /* add terminating '.'-CRLF-NUL at the end of the message */
      msg->cpMsg[n++] =  '.';
      msg->cpMsg[n++] = '\r';
      msg->cpMsg[n++] = '\n';
      msg->cpMsg[n]   = NUL;
  
      log0(msg, DEBUG, "join complete");
      return MSG_OK;
  }
  
  char *msg_error(msg_rc_t rc)
  {
      char *str;
                                                str = "MSG: no description";
      if      (rc == MSG_OK                   ) str = "MSG: no error";
      else if (rc == MSG_ERR_MEM              ) str = "MSG: memory";
      else if (rc == MSG_ERR_SPLITHEADBODY    ) str = "MSG: split into header and body failed";
      else if (rc == MSG_ERR_SPLITLEN         ) str = "MSG: header is too short";
      else if (rc == MSG_ERR_SPLITMISSINGFROM ) str = "MSG: header is missing 'From ' envelope";
      else if (rc == MSG_ERR_SPLITIDNONE      ) str = "MSG: header is missing 'Message-ID'";
      else if (rc == MSG_ERR_SPLITIDEMPTY     ) str = "MSG: header has empty 'Message-ID'";
      else if (rc == MSG_ERR_SPLITIDMULTI     ) str = "MSG: header has multiple 'Message-ID's";
      else if (rc == MSG_ERR_JOINGROUPNONE    ) str = "MSG: join with no 'Newsgroup'";
      else if (rc == MSG_ERR_JOINGROUPEMPTY   ) str = "MSG: join with empty 'Newsgroup'";
      else if (rc == MSG_ERR_JOINIDNONE       ) str = "MSG: join with no 'Message-ID'";
      else if (rc == MSG_ERR_JOINIDEMPTY      ) str = "MSG: join with empty 'Message-ID'";
      return str;
  }
  
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.h
  ============================================================
  $ cvs update -p -r1.1 lmtp2nntp_msg.h
  /*
  **  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  **  mailer which forwards mails as Usenet news articles via NNTP.
  **  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  **
  **  This program is free software; you can redistribute it and/or
  **  modify it under the terms of the GNU General Public  License
  **  as published by the Free Software Foundation; either version
  **  2.0 of the License, or (at your option) any later version.
  **
  **  This program is distributed in the hope that it will be useful,
  **  but WITHOUT ANY WARRANTY; without even the implied warranty of
  **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  **  General Public License for more details.
  **
  **  You should have received a copy of the GNU General Public License
  **  along with this file; if not, write to the Free Software
  **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  **  USA, or contact the OSSP project <ossp@ossp.org>.
  **
  **  msg.c: mail message manipulation library (API)
  */
  
  #ifndef __MSG_H__
  #define __MSG_H__
  
  #include <sys/types.h>
  
  #include "l2.h"
  
  #include "lmtp2nntp_global.h"
  
  typedef struct {
      char   *azEnvgroups;  /* Groups according to Envelope in GROUPMODE_ENVELOPE */
      size_t  asEnvgroups;
      char   *cpMsg;        /* the wholly message to be received by DATA command */
      char   *azHeaders;    /* header part of message above */
      size_t  asHeaders;
      char   *cpFid;        /* foreign (aka sendmail queue) id from parsing headers */
      char   *cpBody;       /* body part of message above */
      char   *cpMsgid;
      char   *mail_from;
      char   *azRcpt;
      size_t  asRcpt;
      char   *azNewsgroups;
      size_t  asNewsgroups;
      l2_channel_t *l2;
  } msg_t;
  
  #define WRAPAT 120          /* join wraps header lines when exceeding this value */
  #define WRAPUSING "\n    "  /* join inserts this value when wrapping lines       */
  
  typedef enum {
      MSG_OK,
      MSG_ERR_MEM,
      MSG_ERR_SPLITHEADBODY,
      MSG_ERR_SPLITLEN,
      MSG_ERR_SPLITMISSINGFROM,
      MSG_ERR_SPLITIDNONE,
      MSG_ERR_SPLITIDEMPTY,
      MSG_ERR_SPLITIDMULTI,
      MSG_ERR_JOINGROUPNONE,
      MSG_ERR_JOINGROUPEMPTY,
      MSG_ERR_JOINIDNONE,
      MSG_ERR_JOINIDEMPTY,
      MSG_ERR_ARG
  } msg_rc_t;
  
  msg_t    *msg_create(void);
  msg_rc_t  msg_split(msg_t *);
  msg_rc_t  msg_join(msg_t *);
  void      msg_destroy(msg_t *);
  char     *msg_error(msg_rc_t);
  
  #endif /*  __MSG_H__ */
  
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.c
  ============================================================
  $ cvs update -p -r1.1 lmtp2nntp_nntp.c
  /*
  **  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  **  mailer which forwards mails as Usenet news articles via NNTP.
  **  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  **
  **  This program is free software; you can redistribute it and/or
  **  modify it under the terms of the GNU General Public  License
  **  as published by the Free Software Foundation; either version
  **  2.0 of the License, or (at your option) any later version.
  **
  **  This program is distributed in the hope that it will be useful,
  **  but WITHOUT ANY WARRANTY; without even the implied warranty of
  **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  **  General Public License for more details.
  **
  **  You should have received a copy of the GNU General Public License
  **  along with this file; if not, write to the Free Software
  **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  **  USA, or contact the OSSP project <ossp@ossp.org>.
  **
  **  nntp.c: Network News Transfer Protocol (NNTP) client library
  */
  
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  #include <unistd.h>
  #include <ctype.h>
  #include <errno.h>
  #include <sys/types.h>
  #include <sys/time.h>
  
  #include "lmtp2nntp_nntp.h"
  
  #ifdef HAVE_CONFIG_H
  #include "config.h"
  #endif
  #if defined(HAVE_DMALLOC_H) && defined(DMALLOC)
  #include "dmalloc.h"
  #endif
  
  #ifndef FALSE
  #define FALSE (1 != 1)
  #endif
  #ifndef TRUE
  #define TRUE (!FALSE)
  #endif
  
  #ifndef NUL
  #define NUL '\0'
  #endif
  
  /* maximum NNTP protocol line length */
  #define NNTP_LINE_MAXLEN 1024
  
  typedef struct {
      int   rl_cnt;
      char *rl_bufptr;
      char  rl_buf[NNTP_LINE_MAXLEN];
  } nntp_readline_t;
  
  struct nntp_st {
      nntp_io_t       io;
      nntp_readline_t rl; 
      struct timeval  tv;
      int             kludgeinn441dup;
      char           *lastresp;
  };
  
  ssize_t nntp_fd_read(void *_ctx, void *buf, size_t buflen)
  {
      nntp_fd_t *ctx = (nntp_fd_t *)_ctx;
      return read(ctx->fd, buf, buflen);
  }
  
  ssize_t nntp_fd_write(void *_ctx, const void *buf, size_t buflen)
  {
      nntp_fd_t *ctx = (nntp_fd_t *)_ctx;
      return write(ctx->fd, buf, buflen);
  }
  
  nntp_t *nntp_create(nntp_io_t *io)
  {
      nntp_t *nntp;
  
      if ((nntp = (nntp_t *)malloc(sizeof(nntp_t))) == NULL) 
          return NULL;
  
      if (io == NULL) 
          return NULL;
      nntp->io.ctx    = io->ctx;
      nntp->io.read   = io->read;
      nntp->io.write  = io->write;
      nntp->rl.rl_cnt = 0;
      nntp->rl.rl_bufptr = NULL;
      nntp->rl.rl_buf[0] = NUL;
      nntp->kludgeinn441dup = FALSE;
      nntp->lastresp = NULL;
  
      return nntp;
  }
  
  nntp_rc_t nntp_init(nntp_t *nntp)
  {
      nntp_rc_t rc;
      char line[NNTP_LINE_MAXLEN];
    
      /* RFC0977 2.4.3. General Responses
       * In general, 1xx codes may be ignored or displayed as desired;  code 200
       * or 201 is sent upon initial connection to the NNTP server depending
       * upon posting permission; code 400 will be sent when the NNTP server
       * discontinues service (by operator request, for example); and 5xx codes
       * indicate that the command could not be performed for some unusual
       * reason.
       *
       * 1xx text
       * 200 server ready - posting allowed
       * 201 server ready - no posting allowed
       * 400 service discontinued
       * 500 command not recognized
       * 501 command syntax error
       * 502 access restriction or permission denied
       * 503 program fault - command not performed
       */
  
      do {
          if ((rc = nntp_readline(nntp, line, sizeof(line))) != NNTP_OK) {
              return rc;
              }
      } while (line[0] == '1');
  
      /* prepare for the INN kludge using 441 returns for other things but
       * "Duplicate".  Typical welcome string is "200 host InterNetNews NNRP
       * server INN 2.3.2 ready (posting ok)."
       */
      if (strncmp(line, "200", 3) == 0 && strstr(line, " INN ") != NULL) {
          nntp->kludgeinn441dup = TRUE;
      }
      else {
          nntp->kludgeinn441dup = FALSE;
      }
  
      if (strncmp(line, "200", 3) == 0)
          return NNTP_OK;
  
      return NNTP_ERR_INIT;
  }
  
  void nntp_destroy(nntp_t *nntp)
  {
      if (nntp != NULL) {
          if (nntp->lastresp != NULL)
              free(nntp->lastresp);
          free(nntp);
      }
      return;
  }
  
  char *nntp_lastresp(nntp_t *nntp)
  {
      if (nntp == NULL)
          return "";
      if(nntp->lastresp == NULL)
          return "";
      return nntp->lastresp;
  }
  
  nntp_rc_t nntp_readline(nntp_t *nntp, char *buf, size_t buflen)
  {
      /* read a line (characters until NL) from input stream */
      size_t n;
      char c;
      nntp_readline_t *rl = &nntp->rl;
  
      if (nntp == NULL)
          return NNTP_ERR_ARG;
      for (n = 0; n < buflen-1;) {
  
          /* fetch one character (but read more) */
          if (rl->rl_cnt <= 0) {
              do {
                  rl->rl_cnt = nntp->io.read(nntp->io.ctx, rl->rl_buf, NNTP_LINE_MAXLEN);
              } while (rl->rl_cnt == -1 && errno == EINTR);
              if (rl->rl_cnt == -1)
                  return NNTP_ERR_SYSTEM;
              if (rl->rl_cnt == 0)
                  return NNTP_EOF;
              rl->rl_bufptr = rl->rl_buf;
          }
  
          /* act on fetched character */
          rl->rl_cnt--;
          c = *rl->rl_bufptr++;
          if (c == '\r')
              continue;       /* skip copying CR */
          if (c == '\n')
              break;          /* end of line */
          buf[n++] = c;       /* output char into given buffer */
  
      }
      buf[n] = NUL;          /* string termination */
      if (n == (buflen-1)) 
          return NNTP_ERR_OVERFLOW;
      return NNTP_OK;
  }
  
  nntp_rc_t nntp_writeline(nntp_t *nntp, char *buf)
  {
      char tmp[NNTP_LINE_MAXLEN];
  
      if (nntp == NULL)
          return NNTP_ERR_ARG;
      strncpy(tmp, buf, NNTP_LINE_MAXLEN-3);
      strcat(tmp, "\r\n");
      if (nntp->io.write(nntp->io.ctx, tmp, strlen(tmp)) < 0)
          return NNTP_ERR_SYSTEM;
      return NNTP_OK;
  }
  
  nntp_rc_t nntp_post(nntp_t *nntp, msg_t *msg)
  {
      nntp_rc_t rc = NNTP_OK;
      char line[NNTP_LINE_MAXLEN];
  
      /*  RFC2980
       *   
       *  2.3 MODE READER
       *  MODE READER is used by the client to indicate to the server that it is
       *  a news reading client.  Some implementations make use of this
       *  information to reconfigure themselves for better performance in
       *  responding to news reader commands.  This command can be contrasted
       *  with the SLAVE command in RFC0977, which was not widely implemented.
       *  MODE READER was first available in INN.
       *  
       *  2.3.1 Responses
       *  200 Hello, you can post
       *  201 Hello, you can't post
       *  
       *  Research:
       *  
       *  < 200 dev16 InterNetNews server INN 2.3.2 ready
       *  > POST
       *  < 500 "post" not implemented; try "help".
       *  > MODE READER
       *  < 200 dev16 InterNetNews NNRP server INN 2.3.2 ready (posting ok).
       *  > POST
       *  < 340 Ok, recommended ID <...>
       *  
       *  In other words, INN *requires* the use of "MODE READER". This has been
       *  verified when INN is configured for expecting both news readers and
       *  feeders from a given source address. When INN is configured to expect
       *  readers only for a given source address the use of "MODE READER" is
       *  optional.
       */
      *line = NUL;
      strcat(line, "MODE READER");
      if ((rc = nntp_writeline(nntp, line)) != NNTP_OK)
          return rc;
      if ((rc = nntp_readline(nntp, line, sizeof(line))) != NNTP_OK)
          return rc;
  
      /*  A 200 response means posting ok, 201 means posting not allowed. We
       *  don't care about 5xx errors, they simply mean the server doesn't know
       *  about the RFC2980 "MODE READER" command. But any other response is not
       *  expected and we treat this as an error.
       */
      if (strncmp(line, "201", 3) == 0)
          CU(NNTP_ERR_DELIVERY);
      if (   strncmp(line, "200", 3) != 0
          && strncmp(line, "5"  , 1) != 0
            )
          CU(NNTP_ERR_DELIVERY);
  
      /*  check if this server already knows that artice
       *  > STAT <message-id>
       *  < 223 yes, article already known
       *  < 430 no, i don't know the article, yet
       */
      *line = NUL;
      strcat(line, "STAT ");
      strcat(line, msg->cpMsgid);
      if ((rc = nntp_writeline(nntp, line)) != NNTP_OK)
          return rc;
      if ((rc = nntp_readline(nntp, line, sizeof(line))) != NNTP_OK)
          return rc;
      if (strncmp(line, "223", 3) == 0)
          return NNTP_OK;
      if (strncmp(line, "430", 3) != 0)
          CU(NNTP_ERR_DELIVERY);
  
      /*  post the article
       *  > POST
       *  < 340 gimme that thing
       *  > From: ...
       *  > Subject: ...
       *  > Newsgroups: ...
       *  > Message-ID: <...>
       *  > [additional headers]
       *  > 
       *  > [body with dots escaped]
       *  > .
       *  < 240 ok, thank you
       *  < 441 duplicate (ok for us)
       *  
       *  Research:
       *  
       *  < 200 dev16 InterNetNews server INN 2.3.2 ready
       *  > POST
       *  [...]
       *  240 Article posted <...>
       *  441 435 Duplicate
       *  441 437 Too old
       *  441 Duplicate "Newsgroups" header
       *  441 Required "Subject" header is missing
       *  441 Obsolete "Received" header
       *  441 Line # too long
       *  
       *  In other words, INN uses 441 for other status messages as well.
       */
      *line = NUL;
      strcat(line, "POST");
      if ((rc = nntp_writeline(nntp, line)) != NNTP_OK)
          return rc;
      if ((rc = nntp_readline(nntp, line, sizeof(line))) != NNTP_OK)
          return rc;
      if (strncmp(line, "340", 3) != 0)
          CU(NNTP_ERR_DELIVERY);
  
      do {
          rc = nntp->io.write(nntp->io.ctx, msg->cpMsg, strlen(msg->cpMsg));
      } while (rc == -1 && errno == EINTR);
      if (rc == -1)
          return NNTP_ERR_SYSTEM;
  
      if ((rc = nntp_readline(nntp, line, sizeof(line))) != NNTP_OK)
          return rc;
  
      if (strncmp(line, "240", 3) == 0)
          return NNTP_OK;
  
      if (nntp->kludgeinn441dup) {
          if (strncmp(line, "441 435", 7) == 0)
              return NNTP_OK;
      }
      else {
          if (strncmp(line, "441", 3) == 0)
              return NNTP_OK;
      }
  
      CU(NNTP_ERR_DELIVERY);
  
      CUS:
      nntp->lastresp = strdup(line);
      return rc;
  }
  
  nntp_rc_t nntp_feed(nntp_t *nntp, msg_t *msg)
  {
      nntp_rc_t rc = NNTP_OK;
      char line[NNTP_LINE_MAXLEN];
  
      /*  RFC0977 3.4. The IHAVE command, 3.4.2. Responses
       *  < 235 article transferred ok
       *  < 335 send article to be transferred.  End with <CR-LF>.<CR-LF>
       *  < 435 article not wanted - do not send it
       *  < 436 transfer failed - try again later
       *  < 437 article rejected - do not try again
       *  
       *  Research:
       *  < 200 dev16 InterNetNews server INN 2.3.2 ready
       *  > IHAVE <messageid>
       *  < 335 [no text; this number means positive response]
       *  < 435 Duplicate
       *  < 437 Missing "Path" header
       *  < 437 Unwanted newsgroup "quux"
       *  < 480 Transfer permission denied
       */
      *line = NUL;
      strcat(line, "IHAVE ");
      strcat(line, msg->cpMsgid);
      if ((rc = nntp_writeline(nntp, line)) != NNTP_OK)
          return rc;
  
      if ((rc = nntp_readline(nntp, line, sizeof(line))) != NNTP_OK)
          return rc;
  
      if (strncmp(line, "435", 3) == 0)
          return NNTP_OK;
  
      if (strncmp(line, "436", 3) == 0)
          return NNTP_DEFER;
  
      if (   (strncmp(line, "437", 3) == 0)
          || (strncmp(line, "480", 3) == 0))
          CU(NNTP_ERR_DELIVERY);
  
      if (strncmp(line, "335", 3) != 0)
          CU(NNTP_ERR_DELIVERY);
  
      do {
          rc = nntp->io.write(nntp->io.ctx, msg->cpMsg, strlen(msg->cpMsg));
      } while (rc == -1 && errno == EINTR);
      if (rc == -1)
          return NNTP_ERR_SYSTEM;
  
      if ((rc = nntp_readline(nntp, line, sizeof(line))) != NNTP_OK)
          return rc;
  
      if (strncmp(line, "235", 3) == 0)
          return NNTP_OK;
  
      if (strncmp(line, "436", 3) == 0)
          return NNTP_DEFER;
  
      CU(NNTP_ERR_DELIVERY);
  
      CUS:
      nntp->lastresp = strdup(line);
      return rc;
  }
  
  char *nntp_error(nntp_rc_t rc)
  {
      char *str;
                                        str = "NNTP: errorcode has no description";
      if      (rc == NNTP_OK          ) str = "NNTP: no error";
      else if (rc == NNTP_EOF         ) str = "NNTP: end of file";
      else if (rc == NNTP_DEFER       ) str = "NNTP: transmission deferred";
      else if (rc == NNTP_FAKE        ) str = "NNTP: fake status not real";
      else if (rc == NNTP_ERR_SYSTEM  ) str = "NNTP: see errno";
      else if (rc == NNTP_ERR_ARG     ) str = "NNTP: invalid argument";
      else if (rc == NNTP_ERR_OVERFLOW) str = "NNTP: buffer overflow";
      else if (rc == NNTP_ERR_DELIVERY) str = "NNTP: cannot deliver message";
      else if (rc == NNTP_ERR_INIT    ) str = "NNTP: initialization failed";
      else if (rc == NNTP_ERR_UNKNOWN ) str = "NNTP: unknown error";
      return str;
  }
  
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.h
  ============================================================
  $ cvs update -p -r1.1 lmtp2nntp_nntp.h
  /*
  **  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  **  mailer which forwards mails as Usenet news articles via NNTP.
  **  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  **
  **  This program is free software; you can redistribute it and/or
  **  modify it under the terms of the GNU General Public  License
  **  as published by the Free Software Foundation; either version
  **  2.0 of the License, or (at your option) any later version.
  **
  **  This program is distributed in the hope that it will be useful,
  **  but WITHOUT ANY WARRANTY; without even the implied warranty of
  **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  **  General Public License for more details.
  **
  **  You should have received a copy of the GNU General Public License
  **  along with this file; if not, write to the Free Software
  **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  **  USA, or contact the OSSP project <ossp@ossp.org>.
  **
  **  nntp.h: Network News Transfer Protocol (NNTP) client library (API)
  */
  
  #ifndef __NNTP_H__
  #define __NNTP_H__
  
  #include <sys/types.h>
  #include <sys/uio.h>
  #include <unistd.h>
  #include <fcntl.h>
  
  #include "lmtp2nntp_msg.h"
  
  struct nntp_st;
  typedef struct nntp_st nntp_t;
  
  typedef struct {
      void    *ctx;
      ssize_t (*read)(void *, void *, size_t);
      ssize_t (*write)(void *, const void *, size_t);
  } nntp_io_t;
  
  typedef enum {
      NNTP_OK,
      NNTP_EOF,
      NNTP_DEFER,
      NNTP_FAKE,
      NNTP_ERR_SYSTEM,
      NNTP_ERR_ARG,
      NNTP_ERR_OVERFLOW,
      NNTP_ERR_DELIVERY,
      NNTP_ERR_INIT,
      NNTP_ERR_UNKNOWN
  } nntp_rc_t;
  
  typedef struct {
      int fd;
  } nntp_fd_t;
  
  nntp_t     *nntp_create   (nntp_io_t *);
  nntp_rc_t   nntp_init     (nntp_t *);
  void        nntp_destroy  (nntp_t *);
  nntp_rc_t   nntp_readline (nntp_t *, char *, size_t);
  nntp_rc_t   nntp_writeline(nntp_t *, char *);
  nntp_rc_t   nntp_post     (nntp_t *, msg_t *msg);
  nntp_rc_t   nntp_feed     (nntp_t *, msg_t *msg);
  char       *nntp_lastresp (nntp_t *nntp);
  char       *nntp_error    (nntp_rc_t);
  ssize_t     nntp_fd_read  (void *, void *, size_t);
  ssize_t     nntp_fd_write (void *, const void *, size_t);
  
  #endif /* __NNTP_H__ */
  
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_shpat.c
  ============================================================
  $ cvs update -p -r1.1 lmtp2nntp_shpat.c
  /*
  **  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  **  mailer which forwards mails as Usenet news articles via NNTP.
  **  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  **
  **  This program is free software; you can redistribute it and/or
  **  modify it under the terms of the GNU General Public  License
  **  as published by the Free Software Foundation; either version
  **  2.0 of the License, or (at your option) any later version.
  **
  **  This program is distributed in the hope that it will be useful,
  **  but WITHOUT ANY WARRANTY; without even the implied warranty of
  **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  **  General Public License for more details.
  **
  **  You should have received a copy of the GNU General Public License
  **  along with this file; if not, write to the Free Software
  **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  **  USA, or contact the OSSP project <ossp@ossp.org>.
  **
  **  shpat_match.c: Shell Pattern Matching library
  */
  
  /*
   * Copyright (c) 1989, 1993, 1994
   *      The Regents of the University of California.  All rights reserved.
   *
   * This code is derived from software contributed to Berkeley by
   * Guido van Rossum.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in the
   *    documentation and/or other materials provided with the distribution.
   * 3. All advertising materials mentioning features or use of this software
   *    must display the following acknowledgement:
   *      This product includes software developed by the University of
   *      California, Berkeley and its contributors.
   * 4. Neither the name of the University nor the names of its contributors
   *    may be used to endorse or promote products derived from this software
   *    without specific prior written permission.
   *
   * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   */
  
  /*
   * Function shpat_match() as specified in POSIX 1003.2-1992, section B.6.
   * Compares a filename or pathname to a pattern.
   */
  
  #include <ctype.h>
  #include <string.h>
  #include <stdio.h>
  
  #ifdef HAVE_CONFIG_H
  #include "config.h"
  #endif
  #if defined(HAVE_DMALLOC_H) && defined(DMALLOC)
  #include "dmalloc.h"
  #endif
  
  #include "lmtp2nntp_shpat.h"
  
  #define EOS '\0'
  
  #define RANGE_MATCH     1
  #define RANGE_NOMATCH   0
  #define RANGE_ERROR     (-1)
  
  static int rangematch(const char *, char, int, char **);
  
  int shpat_match(const char *pattern, const char *string, int flags)
  {
      const char *stringstart;
      char *newp;
      char c, test;
  
      for (stringstart = string; ; ) {
          switch (c = *pattern++) {
              case EOS:
                  if ((flags & SHPAT_M_LEADING_DIR) && *string == '/')
                      return (0);
                  return (*string == EOS ? 0 : SHPAT_M_NOMATCH);
              case '?':
                  if (*string == EOS)
                      return (SHPAT_M_NOMATCH);
                  if (*string == '/' && (flags & SHPAT_M_PATHNAME))
                      return (SHPAT_M_NOMATCH);
                  if (*string == '.' && (flags & SHPAT_M_PERIOD) &&
                      (string == stringstart ||
                       ((flags & SHPAT_M_PATHNAME) && *(string - 1) == '/')))
                      return (SHPAT_M_NOMATCH);
                  ++string;
                  break;
              case '*':
                  c = *pattern;
                  /* Collapse multiple stars. */
                  while (c == '*')
                      c = *++pattern;
  
                  if (*string == '.' && (flags & SHPAT_M_PERIOD) &&
                      (string == stringstart ||
                       ((flags & SHPAT_M_PATHNAME) && *(string - 1) == '/')))
                      return (SHPAT_M_NOMATCH);
  
                  /* Optimize for pattern with * at end or before /. */
                  if (c == EOS)
                      if (flags & SHPAT_M_PATHNAME)
                          return ((flags & SHPAT_M_LEADING_DIR) ||
                                  strchr(string, '/') == NULL ?
                                  0 : SHPAT_M_NOMATCH);
                      else
                          return (0);
                  else if (c == '/' && flags & SHPAT_M_PATHNAME) {
                      if ((string = strchr(string, '/')) == NULL)
                          return (SHPAT_M_NOMATCH);
                      break;
                  }
  
                  /* General case, use recursion. */
                  while ((test = *string) != EOS) {
                      if (!shpat_match(pattern, string, flags & ~SHPAT_M_PERIOD))
                          return (0);
                      if (test == '/' && flags & SHPAT_M_PATHNAME)
                          break;
                      ++string;
                  }
                  return (SHPAT_M_NOMATCH);
              case '[':
                  if (*string == EOS)
                      return (SHPAT_M_NOMATCH);
                  if (*string == '/' && (flags & SHPAT_M_PATHNAME))
                      return (SHPAT_M_NOMATCH);
                  if (*string == '.' && (flags & SHPAT_M_PERIOD) &&
                      (string == stringstart ||
                       ((flags & SHPAT_M_PATHNAME) && *(string - 1) == '/')))
                      return (SHPAT_M_NOMATCH);
  
                  switch (rangematch(pattern, *string, flags, &newp)) {
                      case RANGE_ERROR:
                          goto norm;
                      case RANGE_MATCH:
                          pattern = newp;
                          break;
                      case RANGE_NOMATCH:
                          return (SHPAT_M_NOMATCH);
                  }
                  ++string;
                  break;
              case '\\':
                  if (!(flags & SHPAT_M_NOESCAPE)) {
                      if ((c = *pattern++) == EOS) {
                          c = '\\';
                          --pattern;
                      }
                  }
                  /* FALLTHROUGH */
              default:
                norm:
                  if (c == *string)
                      ;
                  else if ((flags & SHPAT_M_CASEFOLD) &&
                           (tolower((unsigned char) c) ==
                            tolower((unsigned char) *string)))
                      ;
                  else
                      return (SHPAT_M_NOMATCH);
                  string++;
                  break;
          }
      }
      /* NOTREACHED */
  }
  
  static int rangematch(
       const char *pattern,
       char test,
       int flags,
       char **newp)
  {
      int negate, ok;
      char c, c2;
  
      /*
       * A bracket expression starting with an unquoted circumflex
       * character produces unspecified results (IEEE 1003.2-1992,
       * 3.13.2).  This implementation treats it like '!', for
       * consistency with the regular expression syntax.
       * J.T. Conklin (conklin@ngai.kaleida.com)
       */
      if ((negate = (*pattern == '!' || *pattern == '^')))
          ++pattern;
  
      if (flags & SHPAT_M_CASEFOLD)
          test = tolower((unsigned char) test);
  
      /*
       * A right bracket shall lose its special meaning and represent
       * itself in a bracket expression if it occurs first in the list.
       * -- POSIX.2 2.8.3.2
       */
      ok = 0;
      c = *pattern++;
      do {
          if (c == '\\' && !(flags & SHPAT_M_NOESCAPE))
              c = *pattern++;
          if (c == EOS)
              return (RANGE_ERROR);
  
          if (c == '/' && (flags & SHPAT_M_PATHNAME))
              return (RANGE_NOMATCH);
  
          if (flags & SHPAT_M_CASEFOLD)
              c = tolower((unsigned char) c);
  
          if (*pattern == '-'
              && (c2 = *(pattern + 1)) != EOS && c2 != ']') {
              pattern += 2;
              if (c2 == '\\' && !(flags & SHPAT_M_NOESCAPE))
                  c2 = *pattern++;
              if (c2 == EOS)
                  return (RANGE_ERROR);
  
              if (flags & SHPAT_M_CASEFOLD)
                  c2 = tolower((unsigned char) c2);
  
              if (c <= test && test <= c2)
                  ok = 1;
          }
          else if (c == test)
              ok = 1;
      } while ((c = *pattern++) != ']');
  
      *newp = (char *) pattern;
      return (ok == negate ? RANGE_NOMATCH : RANGE_MATCH);
  }
  
  /* 
   * This function returns non-zero if pattern 
   * contains any glob chars. Borrowed from Apache.
   */
  int shpat_match_hasglobchar(const char *pattern)
  {
      int nesting;
  
      nesting = 0;
      while (*pattern) {
          switch (*pattern) {
              case '?':
              case '*':
                  return 1;
              case '\\':
                  if (*pattern++ == EOS)
                      return 0;
                  break;
              case '[':
                  /* '[' is only a glob if it has a matching ']' */
                  nesting++;
                  break;
              case ']':
                  if (nesting)
                      return 1;
                  break;
          }
          pattern++;
      }
      return 0;
  }
  
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_shpat.h
  ============================================================
  $ cvs update -p -r1.1 lmtp2nntp_shpat.h
  /*
  **  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  **  mailer which forwards mails as Usenet news articles via NNTP.
  **  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  **
  **  This program is free software; you can redistribute it and/or
  **  modify it under the terms of the GNU General Public  License
  **  as published by the Free Software Foundation; either version
  **  2.0 of the License, or (at your option) any later version.
  **
  **  This program is distributed in the hope that it will be useful,
  **  but WITHOUT ANY WARRANTY; without even the implied warranty of
  **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  **  General Public License for more details.
  **
  **  You should have received a copy of the GNU General Public License
  **  along with this file; if not, write to the Free Software
  **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  **  USA, or contact the OSSP project <ossp@ossp.org>.
  **
  **  shpat_match.c: Shell Pattern Matching library (API)
  */
  
  /*-
   * Copyright (c) 1992, 1993
   *      The Regents of the University of California.  All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in the
   *    documentation and/or other materials provided with the distribution.
   * 3. All advertising materials mentioning features or use of this software
   *    must display the following acknowledgement:
   *      This product includes software developed by the University of
   *      California, Berkeley and its contributors.
   * 4. Neither the name of the University nor the names of its contributors
   *    may be used to endorse or promote products derived from this software
   *    without specific prior written permission.
   *
   * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   */
  
  #ifndef __SHPAT_MATCH_H__
  #define __SHPAT_MATCH_H__
  
  #define SHPAT_M_NOMATCH     1       /* Match failed. */
  
  #define SHPAT_M_NOESCAPE    0x01    /* Disable backslash escaping. */
  #define SHPAT_M_PATHNAME    0x02    /* Slash must be matched by slash. */
  #define SHPAT_M_PERIOD      0x04    /* Period must be matched by period. */
  #define SHPAT_M_LEADING_DIR 0x08    /* Ignore /<tail> after Imatch. */
  #define SHPAT_M_CASEFOLD    0x10    /* Case insensitive search. */
  #define SHPAT_M_IGNORECASE  FNM_CASEFOLD
  
  #if defined(__cplusplus)
  extern "C" {
  #endif
  
  int shpat_match(const char *, const char *, int);
  int shpat_match_hasglobchar(const char *);
  
  #if defined(__cplusplus)
  }
  #endif
  
  #endif /* __SHPAT_MATCH_H__ */
  
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ============================================================
  $ cvs update -p -r1.1 lmtp2nntp_version.c
  /*
  **  lmtp2nntp_version.c -- Version Information for lmtp2nntp (syntax: C/C++)
  **  [automatically generated and maintained by GNU shtool]
  */
  
  #ifdef _LMTP2NNTP_VERSION_C_AS_HEADER_
  
  #ifndef _LMTP2NNTP_VERSION_C_
  #define _LMTP2NNTP_VERSION_C_
  
  #define LMTP2NNTP_VERSION 0x102002
  
  typedef struct {
      const int   v_hex;
      const char *v_short;
      const char *v_long;
      const char *v_tex;
      const char *v_gnu;
      const char *v_web;
      const char *v_sccs;
      const char *v_rcs;
  } lmtp2nntp_version_t;
  
  extern lmtp2nntp_version_t lmtp2nntp_version;
  
  #endif /* _LMTP2NNTP_VERSION_C_ */
  
  #else /* _LMTP2NNTP_VERSION_C_AS_HEADER_ */
  
  #define _LMTP2NNTP_VERSION_C_AS_HEADER_
  #include "lmtp2nntp_version.c"
  #undef  _LMTP2NNTP_VERSION_C_AS_HEADER_
  
  lmtp2nntp_version_t lmtp2nntp_version = {
      0x102002,
      "1.2a2",
      "1.2a2 (31-Dec-2001)",
      "This is lmtp2nntp, Version 1.2a2 (31-Dec-2001)",
      "lmtp2nntp 1.2a2 (31-Dec-2001)",
      "lmtp2nntp/1.2a2",
      "@(#)lmtp2nntp 1.2a2 (31-Dec-2001)",
      "$Id: lmtp2nntp_version.c,v 1.1 2001/12/31 11:09:53 ossp-cvs Exp $"
  };
  
  #endif /* _LMTP2NNTP_VERSION_C_AS_HEADER_ */
  
              

From ossp-cvs-owner@ossp.org  Mon Dec 31 12:11:16 2001
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 92A66764D1; Mon, 31 Dec 2001 12:11:15 +0100 (CET)
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Message-Id: <20011231111115.92A66764D1@mail.ossp.org>
Date: Mon, 31 Dec 2001 12:11:15 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   OSSP Project Master
  Root:   /e/ossp/cvs                      Email:  ossp@ossp.org
  Module: CVSROOT                          Date:   31-Dec-2001 12:11:15
  Branch: HEAD                             Handle: 2001123111111500

  Modified files:
    CVSROOT                 modules

  Log:
    try to support lmtp2nntp changes

  Summary:
    Revision    Changes     Path
    1.33        +7  -1      CVSROOT/modules
  ____________________________________________________________________________

  Index: CVSROOT/modules
  ============================================================
  $ cvs diff -u -r1.32 -r1.33 modules
  --- CVSROOT/modules	11 Dec 2001 11:45:18 -0000	1.32
  +++ CVSROOT/modules	31 Dec 2001 11:11:15 -0000	1.33
  @@ -76,6 +76,12 @@
   srpc            ossp-pkg/srpc
   xds             ossp-pkg/xds
   sa              ossp-pkg/sa
  -lmtp2nntp       ossp-pkg/lmtp2nntp &str &l2 &sa &var
   var             ossp-pkg/var
  +
  +#   OSSP lmtp2nntp
  +lmtp2nntp       ossp-pkg/lmtp2nntp &lmtp2nntp_str &lmtp2nntp_l2 &lmtp2nntp_sa &lmtp2nntp_var
  +lmtp2nntp_str   -d lib_str ossp-pkg/str
  +lmtp2nntp_l2    -d lib_l2  ossp-pkg/l2
  +lmtp2nntp_sa    -d lib_sa  ossp-pkg/sa
  +lmtp2nntp_var   -d lib_var ossp-pkg/var
   

From ossp-cvs-owner@ossp.org  Mon Dec 31 12:30:18 2001
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3F1B6764D1; Mon, 31 Dec 2001 12:30:18 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO
Message-Id: <20011231113018.3F1B6764D1@mail.ossp.org>
Date: Mon, 31 Dec 2001 12:30:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Dec-2001 12:30:18
  Branch: HEAD                             Handle: 2001123111301700

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO

  Log:
    TODO list for Thomas ;)

  Summary:
    Revision    Changes     Path
    1.49        +8  -0      ossp-pkg/lmtp2nntp/00TODO
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.48 -r1.49 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	15 Nov 2001 09:57:40 -0000	1.48
  +++ ossp-pkg/lmtp2nntp/00TODO	31 Dec 2001 11:30:17 -0000	1.49
  @@ -1,4 +1,12 @@
   
  +  o split already too large lmtp2nntp_main.c into smaller chunks (3-4 files)
  +  o move already too complex and intermixed option parsing and processing into
  +    two parts (1: parsing, 2: processing)
  +  o use dotconf library to provide a configuration file
  +  o use var library to provide variable expansion everywhere
  +
  +  --------------------------------------------------------------------------------
  +
     use sa_buffer (where sa_timeout is called)
   
     option -U currently has to be specified before option -b in order to set the

From ossp-cvs-owner@ossp.org  Mon Dec 31 13:03:10 2001
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 300A4764D1; Mon, 31 Dec 2001 13:03:10 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp .configure Makefile.in autogen.sh devto...
Message-Id: <20011231120310.300A4764D1@mail.ossp.org>
Date: Mon, 31 Dec 2001 13:03:10 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Dec-2001 13:03:10
  Branch: HEAD                             Handle: 197001010100001009796589

  Added files:
    ossp-pkg/lmtp2nntp      devtool devtool.conf devtool.func
  Modified files:
    ossp-pkg/lmtp2nntp      Makefile.in lmtp2nntp_version.c
  Removed files:
    ossp-pkg/lmtp2nntp      .configure autogen.sh

  Log:
    switch to devtool stuff

  Summary:
    Revision    Changes     Path
    NONE        +0  -11     ossp-pkg/lmtp2nntp/.configure
    1.32        +2  -12     ossp-pkg/lmtp2nntp/Makefile.in
    NONE        +0  -79     ossp-pkg/lmtp2nntp/autogen.sh
    1.1         +47 -0      ossp-pkg/lmtp2nntp/devtool
    1.1         +58 -0      ossp-pkg/lmtp2nntp/devtool.conf
    1.1         +72 -0      ossp-pkg/lmtp2nntp/devtool.func
    1.2         +6  -6      ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ____________________________________________________________________________

    Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	31 Dec 2001 11:09:52 -0000	1.31
  +++ ossp-pkg/lmtp2nntp/Makefile.in	31 Dec 2001 12:03:09 -0000	1.32
  @@ -56,7 +56,8 @@
   	$(CC) $(CFLAGS) -c $<
   
   #   convinience rule for calling _SUBDIRS with various make targets
  -_SUBDIRS_all _SUBDIRS_check _SUBDIRS_install _SUBDIRS_uninstall _SUBDIRS_clean _SUBDIRS_distclean _SUBDIRS_depend:
  +_SUBDIRS_all _SUBDIRS_check _SUBDIRS_install _SUBDIRS_uninstall _SUBDIRS_clean \
  +_SUBDIRS_distclean _SUBDIRS_realclean _SUBDIRS_depend:
   	@$(MAKE) $(MFLAGS) \
   	         _SUBDIRS_TARGET=`echo $@ | sed -e 's/^_SUBDIRS_//'` \
   	         _SUBDIRS_STEPDOWN 
  @@ -109,17 +110,6 @@
   	-rm -f config.h.in
   	-rm -f configure
   	-rm -f shtool
  -
  -new-version:
  -	@$(SHTOOL) version -lc -n lmtp2nntp -p lmtp2nntp_ -e lmtp2nntp_version.c; \
  -	V=`$(SHTOOL) version -lc -dlong lmtp2nntp_version.c`; \
  -	sed -e "s/Version .*(.*)/Version $$V/g" <README >README.n && mv README.n README
  -
  -dist: distclean
  -	@$(SHTOOL) fixperm -v .; \
  -	V=`$(SHTOOL) version -lc -dshort lmtp2nntp_version.c`; \
  -	$(SHTOOL) tarball -o lmtp2nntp-$${V}.tar.gz -d lmtp2nntp-$${V} -u ossp -g ossp \
  -	                  -e 'CVS,\.cvsignore,\.[ao],^\.,/\.,autogen.sh,*.tar.gz,*.bak,TODO' -c 'gzip --best' .
   
   check: lmtp2nntp
   	@./test.sh
    Index: ossp-pkg/lmtp2nntp/devtool
  ============================================================
  $ cvs update -p -r1.1 devtool
  #!/bin/sh
  ##
  ##  devtool -- Development Tool
  ##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  if [ $# -eq 0 ]; then
      echo "devtool:USAGE: devtool <command> [<arg> ...]" 1>&2
      exit 1
  fi
  
  cmd="$1"
  shift
  
  devtoolfunc="./devtool.func"
  
  if [ ! -f devtool.conf ]; then
      echo "devtool:ERROR: no devtool.conf in current directory" 1>&2
      exit 1
  fi
  
  cmdline=`grep "^%$cmd" devtool.conf`
  if [ ".$cmdline" = . ]; then
      echo "devtool:ERROR: command $cmd not found in devtool.conf" 1>&2
      exit 1
  fi
  
  if [ ".$TMPDIR" != . ]; then
      tmpdir="$TMPDIR"
  elif [ ".$TEMPDIR" != . ]; then
      tmpdir="$TEMPDIR"
  else
      tmpdir="/tmp"
  fi
  tmpfile="$tmpdir/rc.$$.tmp"
  
  rm -f $tmpfile
  touch $tmpfile
  echo ". $devtoolfunc" >>$tmpfile
  ( sed <devtool.conf -e "1,/^%common/d" -e '/^%.*/,$d'
    sed <devtool.conf -e "1,/^%$cmd/d" -e '/^%.*/,$d' ) |\
  sed -e 's;\([ 	]\)@\([a-zA-Z_][a-zA-Z0-9_]*\);\1devtool_\2;' >>$tmpfile
  
  sh $tmpfile "$@"
  
  rm -f $tmpfile >/dev/null 2>&1 || true
  
  Index: ossp-pkg/lmtp2nntp/devtool.conf
  ============================================================
  $ cvs update -p -r1.1 devtool.conf
  ##
  ##  devtool.conf -- Development Tool Configuration
  ##
  
  %autogen
      @autogen shtool   1.5.4 "1.5.*" all
      @autogen autoconf 2.52  "2.5.*"
  
      echo "===> lib_str (devtool autogen)"
      (cd lib_str && ./devtool autogen)
      echo "<=== lib_str"
      echo "===> lib_l2 (devtool autogen)"
      (cd lib_l2 && ./devtool autogen)
      echo "<=== lib_l2"
      echo "===> lib_sa (devtool autogen)"
      (cd lib_sa && ./devtool autogen)
      echo "<=== lib_sa"
      echo "===> lib_var (devtool autogen)"
      (cd lib_var && ./devtool autogen)
      echo "<=== lib_var"
  
  %autoclean
      @autoclean shtool
      @autoclean autoconf
  
      echo "===> lib_str (devtool autoclean)"
      (cd lib_str && ./devtool autoclean)
      echo "<=== lib_str"
      echo "===> lib_l2 (devtool autoclean)"
      (cd lib_l2 && ./devtool autoclean)
      echo "<=== lib_l2"
      echo "===> lib_sa (devtool autoclean)"
      (cd lib_sa && ./devtool autoclean)
      echo "<=== lib_sa"
      echo "===> lib_var (devtool autoclean)"
      (cd lib_var && ./devtool autoclean)
      echo "<=== lib_var"
  
  %configure
      ./configure \
          --prefix=/tmp/lmtp2nntp \
          --disable-shared \
          --enable-maintainer \
          --enable-debug \
          "$@"
  
  %version
      ./shtool version -l c -n "OSSP lmtp2nntp" -p "lmtp2nntp_" -e lmtp2nntp_version.c
  	V=`./shtool version -lc -dlong lmtp2nntp_version.c`
  	sed -e "s/Version .*(.*)/Version $V/g" <README >README.n && mv README.n README
  
  %dist
      make distclean >/dev/null 2>&1
      ./shtool fixperm -v .
      V=`./shtool version -l c -d short lmtp2nntp_version.c`
      ./shtool tarball -o lmtp2nntp-${V}.tar.gz -d lmtp2nntp-${V} -u ossp -g ossp \
                       -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf,*.tar.gz,*.bak,00TODO' -c 'gzip --best' .
  
  Index: ossp-pkg/lmtp2nntp/devtool.func
  ============================================================
  $ cvs update -p -r1.1 devtool.func
  ##
  ##  devtool.func -- Development Tool Functions
  ##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  devtool_require () {
      t="$1"; o="$2"; p="$3"; e="$4"; a="$5"
      v=`($t $o | head -1 | awk "{ print \\\$$p; }") 2>/dev/null`
      if [ ".$v" = . ]; then
          echo "devtool:ERROR: unable to determine version of $t" 1>&2
          exit 1
      fi
      case "$v" in
          $e )
              ;;
          $a )
              echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
              ;;
          * )
              echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
              exit 1
              ;;
      esac
      echo "$v"
  }
  
  devtool_autogen () {
      tool=$1
      shift
      case $tool in
          autoconf )
              autoconf_version=`devtool_require autoconf --version 4 "$1" "$2"`
              echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
              autoconf
              autoheader 2>&1 | grep -v "is unchanged"
              ;;
          libtool )
              libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
              echo "generating (GNU Libtool $libtoolize_version): ltmain.sh, libtool.m4, config.guess, config.sub"
              libtoolize --force --copy >/dev/null 2>&1
              cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
                  sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` libtool.m4
              ;;
          shtool )
              shtoolize_version=`devtool_require shtoolize -v 3 "$1" "$2"`
              echo "generating (GNU Shtool $shtoolize_version): shtool"
              shift
              shift
              shtoolize -q "$@"
              ;;
      esac
  }
  
  devtool_autoclean () {
      tool=$1
      shift
      case $tool in
          autoconf )
              echo "removing: configure config.h.in"
              rm -f configure config.h.in
              ;;
          libtool )
              echo "removing: ltmain.sh libtool.m4 config.guess config.sub"
              rm -f ltmain.sh libtool.m4 config.guess config.sub
              ;;
          shtool )
              echo "removing: shtool"
              rm -f shtool
              ;;
      esac
  }
  
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 lmtp2nntp_version.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	31 Dec 2001 11:09:53 -0000	1.1
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	31 Dec 2001 12:03:09 -0000	1.2
  @@ -1,5 +1,5 @@
   /*
  -**  lmtp2nntp_version.c -- Version Information for lmtp2nntp (syntax: C/C++)
  +**  lmtp2nntp_version.c -- Version Information for OSSP lmtp2nntp (syntax: C/C++)
   **  [automatically generated and maintained by GNU shtool]
   */
   
  @@ -35,11 +35,11 @@
       0x102002,
       "1.2a2",
       "1.2a2 (31-Dec-2001)",
  -    "This is lmtp2nntp, Version 1.2a2 (31-Dec-2001)",
  -    "lmtp2nntp 1.2a2 (31-Dec-2001)",
  -    "lmtp2nntp/1.2a2",
  -    "@(#)lmtp2nntp 1.2a2 (31-Dec-2001)",
  -    "$Id: lmtp2nntp_version.c,v 1.1 2001/12/31 11:09:53 ossp-cvs Exp $"
  +    "This is OSSP lmtp2nntp, Version 1.2a2 (31-Dec-2001)",
  +    "OSSP lmtp2nntp 1.2a2 (31-Dec-2001)",
  +    "OSSP lmtp2nntp/1.2a2",
  +    "@(#)OSSP lmtp2nntp 1.2a2 (31-Dec-2001)",
  +    "$Id: lmtp2nntp_version.c,v 1.2 2001/12/31 12:03:09 ossp-cvs Exp $"
   };
   
   #endif /* _LMTP2NNTP_VERSION_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Mon Dec 31 13:06:18 2001
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 93C36764D1; Mon, 31 Dec 2001 13:06:18 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var configure.ac
Message-Id: <20011231120618.93C36764D1@mail.ossp.org>
Date: Mon, 31 Dec 2001 13:06:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Dec-2001 13:06:18
  Branch: HEAD                             Handle: 2001123112061800

  Modified files:
    ossp-pkg/var            configure.ac

  Log:
    style police ;)

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/var/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/var/configure.ac
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 configure.ac
  --- ossp-pkg/var/configure.ac	20 Nov 2001 20:02:21 -0000	1.1
  +++ ossp-pkg/var/configure.ac	31 Dec 2001 12:06:18 -0000	1.2
  @@ -33,7 +33,7 @@
   
   AC_DIVERT_PUSH(NOTICE)
   V=`./shtool version -l txt -d long VERSION`
  -./shtool echo -e "Configuring %BOSSP VAR%b, Version %B${V}%b"
  +./shtool echo -e "Configuring %BOSSP Var%b (Variable Expansion), Version %B${V}%b"
   AC_DIVERT_POP()
   
   AC_SET_MAKE

From ossp-cvs-owner@ossp.org  Mon Dec 31 14:15:35 2001
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 863CC764D1; Mon, 31 Dec 2001 14:15:35 +0100 (CET)
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Message-Id: <20011231131535.863CC764D1@mail.ossp.org>
Date: Mon, 31 Dec 2001 14:15:35 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   OSSP Project Master
  Root:   /e/ossp/cvs                      Email:  ossp@ossp.org
  Module: CVSROOT                          Date:   31-Dec-2001 14:15:35
  Branch: HEAD                             Handle: 2001123113153500

  Modified files:
    CVSROOT                 modules

  Log:
    add Pth

  Summary:
    Revision    Changes     Path
    1.34        +1  -0      CVSROOT/modules
  ____________________________________________________________________________

  Index: CVSROOT/modules
  ============================================================
  $ cvs diff -u -r1.33 -r1.34 modules
  --- CVSROOT/modules	31 Dec 2001 11:11:15 -0000	1.33
  +++ CVSROOT/modules	31 Dec 2001 13:15:35 -0000	1.34
  @@ -77,6 +77,7 @@
   xds             ossp-pkg/xds
   sa              ossp-pkg/sa
   var             ossp-pkg/var
  +pth             ossp-pkg/pth
   
   #   OSSP lmtp2nntp
   lmtp2nntp       ossp-pkg/lmtp2nntp &lmtp2nntp_str &lmtp2nntp_l2 &lmtp2nntp_sa &lmtp2nntp_var

From ossp-cvs-owner@ossp.org  Mon Dec 31 14:27:22 2001
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 79418764D1; Mon, 31 Dec 2001 14:27:22 +0100 (CET)
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Message-Id: <20011231132722.79418764D1@mail.ossp.org>
Date: Mon, 31 Dec 2001 14:27:22 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   OSSP Project Master
  Root:   /e/ossp/cvs                      Email:  ossp@ossp.org
  Module: CVSROOT                          Date:   31-Dec-2001 14:27:22
  Branch: HEAD                             Handle: 2001123113272200

  Modified files:
    CVSROOT                 modules

  Log:
    add shtool

  Summary:
    Revision    Changes     Path
    1.35        +1  -0      CVSROOT/modules
  ____________________________________________________________________________

  Index: CVSROOT/modules
  ============================================================
  $ cvs diff -u -r1.34 -r1.35 modules
  --- CVSROOT/modules	31 Dec 2001 13:15:35 -0000	1.34
  +++ CVSROOT/modules	31 Dec 2001 13:27:22 -0000	1.35
  @@ -78,6 +78,7 @@
   sa              ossp-pkg/sa
   var             ossp-pkg/var
   pth             ossp-pkg/pth
  +shtool          ossp-pkg/shtool
   
   #   OSSP lmtp2nntp
   lmtp2nntp       ossp-pkg/lmtp2nntp &lmtp2nntp_str &lmtp2nntp_l2 &lmtp2nntp_sa &lmtp2nntp_var

From ossp-cvs-owner@ossp.org  Mon Dec 31 16:00:33 2001
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 07592764D1; Mon, 31 Dec 2001 16:00:32 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela ChangeLog README configure.in shiela-insta...
Message-Id: <20011231150032.07592764D1@mail.ossp.org>
Date: Mon, 31 Dec 2001 16:00:32 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Dec-2001 16:00:32
  Branch: HEAD                             Handle: 2001123115003101

  Modified files:
    ossp-pkg/shiela         ChangeLog README configure.in shiela-install.pod
                            shiela-install.sh shiela.pl shiela.pod

  Log:
    bump copyright years

  Summary:
    Revision    Changes     Path
    1.9         +1  -1      ossp-pkg/shiela/ChangeLog
    1.4         +1  -1      ossp-pkg/shiela/README
    1.3         +1  -1      ossp-pkg/shiela/configure.in
    1.4         +1  -1      ossp-pkg/shiela/shiela-install.pod
    1.5         +1  -1      ossp-pkg/shiela/shiela-install.sh
    1.15        +1  -1      ossp-pkg/shiela/shiela.pl
    1.4         +1  -1      ossp-pkg/shiela/shiela.pod
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/ChangeLog
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	6 Dec 2001 10:14:42 -0000	1.8
  +++ ossp-pkg/shiela/ChangeLog	31 Dec 2001 15:00:31 -0000	1.9
  @@ -9,7 +9,7 @@
   
     ChangeLog
   
  -  Changes between 0.9.1 and 0.9.2 (10-Feb-2001 to 04-May-2001):
  +  Changes between 0.9.1 and 0.9.2 (10-Feb-2001 to xx-Jan-2002):
   
      *) Fixed warning in dereferencing uninitialized variable.
         [Ralf S. Engelschall, Markus Sander]
  Index: ossp-pkg/shiela/README
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 README
  --- ossp-pkg/shiela/README	4 May 2001 13:25:18 -0000	1.3
  +++ ossp-pkg/shiela/README	31 Dec 2001 15:00:31 -0000	1.4
  @@ -5,7 +5,7 @@
     |____/|_| |_|_|\___|_|\__,_|
   
     OSSP Shiela - Access Control and Logging Facility for CVS
  -  Copyright (c) 2000 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>
   
     Version 0.9.2 (05-May-2001)
   
  Index: ossp-pkg/shiela/configure.in
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 configure.in
  --- ossp-pkg/shiela/configure.in	10 Feb 2001 16:40:26 -0000	1.2
  +++ ossp-pkg/shiela/configure.in	31 Dec 2001 15:00:31 -0000	1.3
  @@ -4,7 +4,7 @@
   AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)
   V=`./shtool version -ltxt -dlong VERSION`
   ./shtool echo -e "Configuring %BOSSP Shiela%b, Version %B${V}%b"
  -echo "Copyright (c) 2000-2001 Ralf S. Engelschall <rse@engelschall.com>"
  +echo "Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>"
   echo ""
   AC_DIVERT_POP()
   
  Index: ossp-pkg/shiela/shiela-install.pod
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 shiela-install.pod
  --- ossp-pkg/shiela/shiela-install.pod	4 May 2001 13:25:18 -0000	1.3
  +++ ossp-pkg/shiela/shiela-install.pod	31 Dec 2001 15:00:31 -0000	1.4
  @@ -1,6 +1,6 @@
   ##
   ##  Shiela - CVS Access Control and Logging Facility
  -##  Copyright (c) 2000 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of Shiela, an access control and logging
   ##  facility for Concurrent Versions System (CVS) repositories 
  Index: ossp-pkg/shiela/shiela-install.sh
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 shiela-install.sh
  --- ossp-pkg/shiela/shiela-install.sh	4 May 2001 13:30:00 -0000	1.4
  +++ ossp-pkg/shiela/shiela-install.sh	31 Dec 2001 15:00:31 -0000	1.5
  @@ -1,7 +1,7 @@
   #!@SH@
   ##
   ##  Shiela - CVS Access Control and Logging Facility
  -##  Copyright (c) 2000 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of Shiela, an access control and logging
   ##  facility for Concurrent Versions System (CVS) repositories
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	16 Dec 2001 18:16:00 -0000	1.14
  +++ ossp-pkg/shiela/shiela.pl	31 Dec 2001 15:00:32 -0000	1.15
  @@ -1,7 +1,7 @@
   #!@PERL@ -w
   ##
   ##  Shiela - CVS Access Control and Logging Facility
  -##  Copyright (c) 2000 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of Shiela, an access control and logging
   ##  facility for Concurrent Versions System (CVS) repositories
  Index: ossp-pkg/shiela/shiela.pod
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 shiela.pod
  --- ossp-pkg/shiela/shiela.pod	4 May 2001 13:25:18 -0000	1.3
  +++ ossp-pkg/shiela/shiela.pod	31 Dec 2001 15:00:32 -0000	1.4
  @@ -1,6 +1,6 @@
   ##
   ##  Shiela - CVS Access Control and Logging Facility
  -##  Copyright (c) 2000 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of Shiela, an access control and logging
   ##  facility for Concurrent Versions System (CVS) repositories 

From ossp-cvs-owner@ossp.org  Mon Dec 31 16:06:06 2001
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 40AFA764EE; Mon, 31 Dec 2001 16:06:06 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool ChangeLog Makefile.in README configure.in ...
Message-Id: <20011231150606.40AFA764EE@mail.ossp.org>
Date: Mon, 31 Dec 2001 16:06:06 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Dec-2001 16:06:06
  Branch: HEAD                             Handle: 2001123115060400

  Modified files:
    ossp-pkg/shtool         ChangeLog Makefile.in README configure.in sh.arx
                            sh.echo sh.fixperm sh.install sh.mkdir sh.mkln
                            sh.mkshadow sh.move sh.path sh.prop sh.rotate
                            sh.scpp sh.slo sh.subst sh.table sh.tarball
                            sh.version shtool.m4 shtool.pod shtool.spec
                            shtoolize.in shtoolize.pod test.db test.sh

  Log:
    bump copyright years

  Summary:
    Revision    Changes     Path
    1.164       +1  -1      ossp-pkg/shtool/ChangeLog
    1.45        +1  -1      ossp-pkg/shtool/Makefile.in
    1.83        +1  -1      ossp-pkg/shtool/README
    1.12        +2  -2      ossp-pkg/shtool/configure.in
    1.17        +1  -1      ossp-pkg/shtool/sh.arx
    1.29        +1  -1      ossp-pkg/shtool/sh.echo
    1.14        +1  -1      ossp-pkg/shtool/sh.fixperm
    1.24        +1  -1      ossp-pkg/shtool/sh.install
    1.18        +1  -1      ossp-pkg/shtool/sh.mkdir
    1.12        +1  -1      ossp-pkg/shtool/sh.mkln
    1.20        +1  -1      ossp-pkg/shtool/sh.mkshadow
    1.15        +1  -1      ossp-pkg/shtool/sh.move
    1.21        +1  -1      ossp-pkg/shtool/sh.path
    1.15        +1  -1      ossp-pkg/shtool/sh.prop
    1.2         +1  -1      ossp-pkg/shtool/sh.rotate
    1.21        +1  -1      ossp-pkg/shtool/sh.scpp
    1.18        +1  -1      ossp-pkg/shtool/sh.slo
    1.3         +1  -1      ossp-pkg/shtool/sh.subst
    1.16        +1  -1      ossp-pkg/shtool/sh.table
    1.16        +1  -1      ossp-pkg/shtool/sh.tarball
    1.31        +1  -1      ossp-pkg/shtool/sh.version
    1.4         +1  -0      ossp-pkg/shtool/shtool.m4
    1.57        +1  -0      ossp-pkg/shtool/shtool.pod
    1.13        +1  -1      ossp-pkg/shtool/shtool.spec
    1.27        +1  -1      ossp-pkg/shtool/shtoolize.in
    1.9         +1  -0      ossp-pkg/shtool/shtoolize.pod
    1.19        +1  -1      ossp-pkg/shtool/test.db
    1.9         +1  -1      ossp-pkg/shtool/test.sh
  ____________________________________________________________________________

  Index: ossp-pkg/shtool/ChangeLog
  ============================================================
  $ cvs diff -u -r1.163 -r1.164 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	23 Sep 2001 11:15:57 -0000	1.163
  +++ ossp-pkg/shtool/ChangeLog	31 Dec 2001 15:06:04 -0000	1.164
  @@ -9,7 +9,7 @@
   
    ChangeLog
   
  - Changes between 1.5.4 and 1.6.0 (14-Jun-2001 to xx-Sep-2001):
  + Changes between 1.5.4 and 1.6.0 (14-Jun-2001 to xx-Jan-2002):
   
      *) Added new command `shtool rotate `[-v|--verbose] [-t|--trace]
         [-f|--force] [-n|--num-files <count>] [-s|--min-size <size>]
  Index: ossp-pkg/shtool/Makefile.in
  ============================================================
  $ cvs diff -u -r1.44 -r1.45 Makefile.in
  --- ossp-pkg/shtool/Makefile.in	23 Sep 2001 11:15:57 -0000	1.44
  +++ ossp-pkg/shtool/Makefile.in	31 Dec 2001 15:06:04 -0000	1.45
  @@ -1,6 +1,6 @@
   ##
   ##  Makefile for GNU shtool
  -##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  Index: ossp-pkg/shtool/README
  ============================================================
  $ cvs diff -u -r1.82 -r1.83 README
  --- ossp-pkg/shtool/README	23 Sep 2001 11:15:57 -0000	1.82
  +++ ossp-pkg/shtool/README	31 Dec 2001 15:06:04 -0000	1.83
  @@ -5,7 +5,7 @@
     |___/_| |_|\__\___/ \___/|_|
   
     GNU shtool -- The GNU Portable Shell Tool
  -  Copyright (c) 1994-2001 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 1994-2002 Ralf S. Engelschall <rse@engelschall.com>
   
     http://www.gnu.org/software/shtool/
     ftp://ftp.gnu.org/gnu/shtool/
  Index: ossp-pkg/shtool/configure.in
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 configure.in
  --- ossp-pkg/shtool/configure.in	17 Jan 2001 09:55:11 -0000	1.11
  +++ ossp-pkg/shtool/configure.in	31 Dec 2001 15:06:04 -0000	1.12
  @@ -1,6 +1,6 @@
   dnl ##
   dnl ##  configure.in -- Autoconf source for GNU shtool
  -dnl ##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##
   dnl ##  This file is part of shtool and free software; you can redistribute
   dnl ##  it and/or modify it under the terms of the GNU General Public
  @@ -23,7 +23,7 @@
   
   SHTOOL_VERSION_STR="`sh sh.version -l txt -d long VERSION`"
   sh sh.echo -e "Configuring %BGNU shtool%b (Portable Shell Tool), version %B${SHTOOL_VERSION_STR}%b"
  -echo "Copyright (c) 1994-2001 Ralf S. Engelschall <rse@engelschall.com>"
  +echo "Copyright (c) 1994-2002 Ralf S. Engelschall <rse@engelschall.com>"
   echo ""
   AC_SUBST(SHTOOL_VERSION_STR)
   
  Index: ossp-pkg/shtool/sh.arx
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 sh.arx
  --- ossp-pkg/shtool/sh.arx	23 Sep 2001 10:58:10 -0000	1.16
  +++ ossp-pkg/shtool/sh.arx	31 Dec 2001 15:06:04 -0000	1.17
  @@ -1,6 +1,6 @@
   ##
   ##  arx -- Extended archive command
  -##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for shtool
   ##
   ##  This file is part of shtool and free software; you can redistribute
  Index: ossp-pkg/shtool/sh.echo
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 sh.echo
  --- ossp-pkg/shtool/sh.echo	23 Sep 2001 10:58:10 -0000	1.28
  +++ ossp-pkg/shtool/sh.echo	31 Dec 2001 15:06:04 -0000	1.29
  @@ -1,6 +1,6 @@
   ##
   ##  echo -- Print string with optional construct expansion
  -##  Copyright (c) 1998-2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for WML as buildinfo
   ##
   ##  This file is part of shtool and free software; you can redistribute
  Index: ossp-pkg/shtool/sh.fixperm
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 sh.fixperm
  --- ossp-pkg/shtool/sh.fixperm	23 Sep 2001 10:58:10 -0000	1.13
  +++ ossp-pkg/shtool/sh.fixperm	31 Dec 2001 15:06:04 -0000	1.14
  @@ -1,6 +1,6 @@
   ##
   ##  fixperm -- Fix file permissions inside a source tree
  -##  Copyright (c) 1996-2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1996-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for ePerl
   ##
   ##  This file is part of shtool and free software; you can redistribute
  Index: ossp-pkg/shtool/sh.install
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 sh.install
  --- ossp-pkg/shtool/sh.install	23 Sep 2001 10:58:10 -0000	1.23
  +++ ossp-pkg/shtool/sh.install	31 Dec 2001 15:06:04 -0000	1.24
  @@ -1,6 +1,6 @@
   ##
   ##  install -- Install a program, script or datafile
  -##  Copyright (c) 1997-2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1997-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for shtool
   ##
   ##  This file is part of shtool and free software; you can redistribute
  Index: ossp-pkg/shtool/sh.mkdir
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 sh.mkdir
  --- ossp-pkg/shtool/sh.mkdir	23 Sep 2001 10:58:10 -0000	1.17
  +++ ossp-pkg/shtool/sh.mkdir	31 Dec 2001 15:06:04 -0000	1.18
  @@ -1,6 +1,6 @@
   ##
   ##  mkdir -- Make one or more directories
  -##  Copyright (c) 1996-2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1996-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for public domain by Noah Friedman <friedman@prep.ai.mit.edu>
   ##  Cleaned up and enhanced for shtool
   ##
  Index: ossp-pkg/shtool/sh.mkln
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 sh.mkln
  --- ossp-pkg/shtool/sh.mkln	23 Sep 2001 10:58:10 -0000	1.11
  +++ ossp-pkg/shtool/sh.mkln	31 Dec 2001 15:06:04 -0000	1.12
  @@ -1,6 +1,6 @@
   ##
   ##  mkln -- Make link with calculation of relative paths
  -##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for shtool
   ##
   ##  This file is part of shtool and free software; you can redistribute
  Index: ossp-pkg/shtool/sh.mkshadow
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 sh.mkshadow
  --- ossp-pkg/shtool/sh.mkshadow	23 Sep 2001 10:58:10 -0000	1.19
  +++ ossp-pkg/shtool/sh.mkshadow	31 Dec 2001 15:06:04 -0000	1.20
  @@ -1,6 +1,6 @@
   ##
   ##  mkshadow -- Make a shadow tree through symbolic links
  -##  Copyright (c) 1998-2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for Apache
   ##
   ##  This file is part of shtool and free software; you can redistribute
  Index: ossp-pkg/shtool/sh.move
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 sh.move
  --- ossp-pkg/shtool/sh.move	23 Sep 2001 10:58:10 -0000	1.14
  +++ ossp-pkg/shtool/sh.move	31 Dec 2001 15:06:04 -0000	1.15
  @@ -1,6 +1,6 @@
   ##
   ##  move -- Move files with simultaneous substitution
  -##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for shtool
   ##
   ##  This file is part of shtool and free software; you can redistribute
  Index: ossp-pkg/shtool/sh.path
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 sh.path
  --- ossp-pkg/shtool/sh.path	23 Sep 2001 10:58:10 -0000	1.20
  +++ ossp-pkg/shtool/sh.path	31 Dec 2001 15:06:04 -0000	1.21
  @@ -1,6 +1,6 @@
   ##
   ##  path -- Deal with program paths
  -##  Copyright (c) 1998-2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for Apache
   ##
   ##  This file is part of shtool and free software; you can redistribute
  Index: ossp-pkg/shtool/sh.prop
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 sh.prop
  --- ossp-pkg/shtool/sh.prop	23 Sep 2001 10:58:10 -0000	1.14
  +++ ossp-pkg/shtool/sh.prop	31 Dec 2001 15:06:04 -0000	1.15
  @@ -1,6 +1,6 @@
   ##
   ##  prop -- Display progress with a running propeller
  -##  Copyright (c) 1998-2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for mod_ssl
   ##
   ##  This file is part of shtool and free software; you can redistribute
  Index: ossp-pkg/shtool/sh.rotate
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 sh.rotate
  --- ossp-pkg/shtool/sh.rotate	23 Sep 2001 11:15:57 -0000	1.1
  +++ ossp-pkg/shtool/sh.rotate	31 Dec 2001 15:06:04 -0000	1.2
  @@ -1,6 +1,6 @@
   ##
   ##  rotate -- Logfile rotation
  -##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for use in OpenPKG
   ##
   ##  This file is part of shtool and free software; you can redistribute
  Index: ossp-pkg/shtool/sh.scpp
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 sh.scpp
  --- ossp-pkg/shtool/sh.scpp	23 Sep 2001 10:58:10 -0000	1.20
  +++ ossp-pkg/shtool/sh.scpp	31 Dec 2001 15:06:04 -0000	1.21
  @@ -1,6 +1,6 @@
   ##
   ##  scpp -- Sharing C Pre-Processor
  -##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for GNU Pth
   ##
   ##  This file is part of shtool and free software; you can redistribute
  Index: ossp-pkg/shtool/sh.slo
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 sh.slo
  --- ossp-pkg/shtool/sh.slo	23 Sep 2001 10:58:10 -0000	1.17
  +++ ossp-pkg/shtool/sh.slo	31 Dec 2001 15:06:04 -0000	1.18
  @@ -1,6 +1,6 @@
   ##
   ##  slo -- Separate linker options by library class
  -##  Copyright (c) 1998-2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for Apache
   ##
   ##  This file is part of shtool and free software; you can redistribute
  Index: ossp-pkg/shtool/sh.subst
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 sh.subst
  --- ossp-pkg/shtool/sh.subst	23 Sep 2001 10:58:10 -0000	1.2
  +++ ossp-pkg/shtool/sh.subst	31 Dec 2001 15:06:04 -0000	1.3
  @@ -1,6 +1,6 @@
   ##
   ##  subst -- Apply sed(1) substitution operations
  -##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for OpenPKG's rpmtool
   ##
   ##  This file is part of shtool and free software; you can redistribute
  Index: ossp-pkg/shtool/sh.table
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 sh.table
  --- ossp-pkg/shtool/sh.table	23 Sep 2001 10:58:10 -0000	1.15
  +++ ossp-pkg/shtool/sh.table	31 Dec 2001 15:06:04 -0000	1.16
  @@ -1,6 +1,6 @@
   ##
   ##  table -- Pretty-print a field-separated list as a table
  -##  Copyright (c) 1998-2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for Apache
   ##
   ##  This file is part of shtool and free software; you can redistribute
  Index: ossp-pkg/shtool/sh.tarball
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 sh.tarball
  --- ossp-pkg/shtool/sh.tarball	23 Sep 2001 10:58:10 -0000	1.15
  +++ ossp-pkg/shtool/sh.tarball	31 Dec 2001 15:06:04 -0000	1.16
  @@ -1,6 +1,6 @@
   ##
   ##  tarball -- Roll distribution tarballs
  -##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for shtool
   ##
   ##  This file is part of shtool and free software; you can redistribute
  Index: ossp-pkg/shtool/sh.version
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 sh.version
  --- ossp-pkg/shtool/sh.version	23 Sep 2001 10:58:10 -0000	1.30
  +++ ossp-pkg/shtool/sh.version	31 Dec 2001 15:06:04 -0000	1.31
  @@ -1,6 +1,6 @@
   ##
   ##  version -- Maintain a version information file
  -##  Copyright (c) 1994-2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1994-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for ePerl, rewritten from scratch for shtool
   ##
   ##  This file is part of shtool and free software; you can redistribute
  Index: ossp-pkg/shtool/shtool.m4
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 shtool.m4
  --- ossp-pkg/shtool/shtool.m4	14 Jun 2001 14:24:16 -0000	1.3
  +++ ossp-pkg/shtool/shtool.m4	31 Dec 2001 15:06:04 -0000	1.4
  @@ -1,5 +1,6 @@
   ##
   ##  shtool.m4 -- GNU shtool Autoconf macros
  +##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  Index: ossp-pkg/shtool/shtool.pod
  ============================================================
  $ cvs diff -u -r1.56 -r1.57 shtool.pod
  --- ossp-pkg/shtool/shtool.pod	23 Sep 2001 11:15:57 -0000	1.56
  +++ ossp-pkg/shtool/shtool.pod	31 Dec 2001 15:06:04 -0000	1.57
  @@ -1,5 +1,6 @@
   ##
   ##  shtool.pod -- Manual Page for shtool in POD format
  +##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  Index: ossp-pkg/shtool/shtool.spec
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 shtool.spec
  --- ossp-pkg/shtool/shtool.spec	23 Sep 2001 10:27:52 -0000	1.12
  +++ ossp-pkg/shtool/shtool.spec	31 Dec 2001 15:06:04 -0000	1.13
  @@ -1,6 +1,6 @@
   ##
   ##  shtool.spec -- RPM specification for shtool package
  -##  Copyright (c) 2000-2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  Index: ossp-pkg/shtool/shtoolize.in
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 shtoolize.in
  --- ossp-pkg/shtool/shtoolize.in	23 Sep 2001 11:15:57 -0000	1.26
  +++ ossp-pkg/shtool/shtoolize.in	31 Dec 2001 15:06:04 -0000	1.27
  @@ -1,7 +1,7 @@
   #!@PERL@
   ##
   ##  shtoolize -- Build shtool script out of ingredient scripts
  -##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  Index: ossp-pkg/shtool/shtoolize.pod
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 shtoolize.pod
  --- ossp-pkg/shtool/shtoolize.pod	23 Sep 2001 11:15:57 -0000	1.8
  +++ ossp-pkg/shtool/shtoolize.pod	31 Dec 2001 15:06:04 -0000	1.9
  @@ -1,5 +1,6 @@
   ##
   ##  shtoolize.pod -- Manual Page for shtoolize in POD format
  +##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  Index: ossp-pkg/shtool/test.db
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 test.db
  --- ossp-pkg/shtool/test.db	23 Sep 2001 11:15:57 -0000	1.18
  +++ ossp-pkg/shtool/test.db	31 Dec 2001 15:06:04 -0000	1.19
  @@ -1,6 +1,6 @@
   ##
   ##  test.db -- GNU shtool test suite (minimalistic)
  -##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   @begin{echo}
  Index: ossp-pkg/shtool/test.sh
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 test.sh
  --- ossp-pkg/shtool/test.sh	14 Jun 2001 14:24:17 -0000	1.8
  +++ ossp-pkg/shtool/test.sh	31 Dec 2001 15:06:04 -0000	1.9
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  test.sh -- GNU shtool test suite driver
  -##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public

From ossp-cvs-owner@ossp.org  Mon Dec 31 16:11:00 2001
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3551C764D1; Mon, 31 Dec 2001 16:11:00 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool shtoolize.in
Message-Id: <20011231151100.3551C764D1@mail.ossp.org>
Date: Mon, 31 Dec 2001 16:11:00 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Dec-2001 16:11:00
  Branch: HEAD                             Handle: 2001123115105900

  Modified files:
    ossp-pkg/shtool         shtoolize.in

  Log:
    bump copyright year

  Summary:
    Revision    Changes     Path
    1.28        +2  -2      ossp-pkg/shtool/shtoolize.in
  ____________________________________________________________________________

  Index: ossp-pkg/shtool/shtoolize.in
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 shtoolize.in
  --- ossp-pkg/shtool/shtoolize.in	31 Dec 2001 15:06:04 -0000	1.27
  +++ ossp-pkg/shtool/shtoolize.in	31 Dec 2001 15:10:59 -0000	1.28
  @@ -347,7 +347,7 @@
   #!/bin/sh
   ##
   ##  GNU shtool -- The GNU Portable Shell Tool
  -##  Copyright (c) 1994-2001 Ralf S. Engelschall <rse\@engelschall.com>
  +##  Copyright (c) 1994-2002 Ralf S. Engelschall <rse\@engelschall.com>
   ##
   ##  See http://www.gnu.org/software/shtool/ for more information.
   ##  See ftp://ftp.gnu.org/gnu/shtool/ for latest version.
  @@ -393,7 +393,7 @@
   fi
   if [ ".\$1" = ".-h" -o ".\$1" = ".--help" ]; then
       echo "This is GNU shtool, version ${version}"
  -    echo "Copyright (c) 1994-2001 Ralf S. Engelschall <rse\@engelschall.com>"
  +    echo "Copyright (c) 1994-2002 Ralf S. Engelschall <rse\@engelschall.com>"
       echo "Report bugs to <bug-shtool\@gnu.org>"
       echo ''
       echo "Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]"

From ossp-cvs-owner@ossp.org  Mon Dec 31 16:11:53 2001
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 66537764D1; Mon, 31 Dec 2001 16:11:53 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool NEWS
Message-Id: <20011231151153.66537764D1@mail.ossp.org>
Date: Mon, 31 Dec 2001 16:11:53 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Dec-2001 16:11:53
  Branch: HEAD                             Handle: 2001123115115300

  Modified files:
    ossp-pkg/shtool         NEWS

  Log:
    remember more

  Summary:
    Revision    Changes     Path
    1.2         +3  -1      ossp-pkg/shtool/NEWS
  ____________________________________________________________________________

  Index: ossp-pkg/shtool/NEWS
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 NEWS
  --- ossp-pkg/shtool/NEWS	14 Jun 2001 22:01:29 -0000	1.1
  +++ ossp-pkg/shtool/NEWS	31 Dec 2001 15:11:53 -0000	1.2
  @@ -9,9 +9,11 @@
     This is a list of user-visible and/or major changes to GNU shtool.
     For more details please have a look at the ChangeLog file.
   
  -  Changes between 1.5 and 1.6 (14-Jun-2001 to xx-Jun-2001)
  +  Changes between 1.5 and 1.6 (14-Jun-2001 to xx-Jan-2002)
   
      *) Added new `shtool subst' command.
  +   *) Added new `shtool rotate' command.
  +   *) Added GNU long-option support (`--xxxx').
   
     Changes between 1.4 and 1.5 (16-Apr-2000 to 14-Jun-2001)
   

From ossp-cvs-owner@ossp.org  Mon Dec 31 16:15:38 2001
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CCE9C764F3; Mon, 31 Dec 2001 16:15:37 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp Makefile.in README aclocal.m4 configure...
Message-Id: <20011231151537.CCE9C764F3@mail.ossp.org>
Date: Mon, 31 Dec 2001 16:15:37 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Dec-2001 16:15:37
  Branch: HEAD                             Handle: 2001123115153600

  Modified files:
    ossp-pkg/lmtp2nntp      Makefile.in README aclocal.m4 configure.ac devtool
                            devtool.func lmtp2nntp.pod lmtp2nntp_argz.c
                            lmtp2nntp_argz.h lmtp2nntp_global.h
                            lmtp2nntp_lmtp.c lmtp2nntp_lmtp.h lmtp2nntp_main.c
                            lmtp2nntp_msg.c lmtp2nntp_msg.h lmtp2nntp_nntp.c
                            lmtp2nntp_nntp.h lmtp2nntp_shpat.c
                            lmtp2nntp_shpat.h

  Log:
    bump copyright year

  Summary:
    Revision    Changes     Path
    1.33        +2  -2      ossp-pkg/lmtp2nntp/Makefile.in
    1.16        +2  -2      ossp-pkg/lmtp2nntp/README
    1.7         +2  -2      ossp-pkg/lmtp2nntp/aclocal.m4
    1.18        +4  -4      ossp-pkg/lmtp2nntp/configure.ac
    1.2         +1  -1      ossp-pkg/lmtp2nntp/devtool
    1.2         +1  -1      ossp-pkg/lmtp2nntp/devtool.func
    1.34        +2  -2      ossp-pkg/lmtp2nntp/lmtp2nntp.pod
    1.2         +2  -2      ossp-pkg/lmtp2nntp/lmtp2nntp_argz.c
    1.2         +2  -2      ossp-pkg/lmtp2nntp/lmtp2nntp_argz.h
    1.2         +2  -2      ossp-pkg/lmtp2nntp/lmtp2nntp_global.h
    1.2         +2  -2      ossp-pkg/lmtp2nntp/lmtp2nntp_lmtp.c
    1.2         +2  -2      ossp-pkg/lmtp2nntp/lmtp2nntp_lmtp.h
    1.2         +2  -2      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
    1.2         +2  -2      ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
    1.2         +2  -2      ossp-pkg/lmtp2nntp/lmtp2nntp_msg.h
    1.2         +2  -2      ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.c
    1.2         +2  -2      ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.h
    1.2         +2  -2      ossp-pkg/lmtp2nntp/lmtp2nntp_shpat.c
    1.2         +2  -2      ossp-pkg/lmtp2nntp/lmtp2nntp_shpat.h
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.32 -r1.33 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	31 Dec 2001 12:03:09 -0000	1.32
  +++ ossp-pkg/lmtp2nntp/Makefile.in	31 Dec 2001 15:15:36 -0000	1.33
  @@ -1,6 +1,6 @@
   ##
  -##  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   ##  mailer which forwards mails as Usenet news articles via NNTP.
  Index: ossp-pkg/lmtp2nntp/README
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 README
  --- ossp-pkg/lmtp2nntp/README	31 Dec 2001 11:09:52 -0000	1.15
  +++ ossp-pkg/lmtp2nntp/README	31 Dec 2001 15:15:36 -0000	1.16
  @@ -24,8 +24,8 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  -  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   
     This file is part of OSSP lmtp2nntp, an LMTP speaking local
     mailer which forwards mails as Usenet news articles via NNTP.
  Index: ossp-pkg/lmtp2nntp/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 aclocal.m4
  --- ossp-pkg/lmtp2nntp/aclocal.m4	5 Sep 2001 09:10:28 -0000	1.6
  +++ ossp-pkg/lmtp2nntp/aclocal.m4	31 Dec 2001 15:15:36 -0000	1.7
  @@ -1,6 +1,6 @@
   dnl ##
  -dnl ##  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   dnl ##  mailer which forwards mails as Usenet news articles via NNTP.
  Index: ossp-pkg/lmtp2nntp/configure.ac
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 configure.ac
  --- ossp-pkg/lmtp2nntp/configure.ac	31 Dec 2001 11:09:52 -0000	1.17
  +++ ossp-pkg/lmtp2nntp/configure.ac	31 Dec 2001 15:15:36 -0000	1.18
  @@ -1,6 +1,6 @@
   dnl ##
  -dnl ##  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   dnl ##  mailer which forwards mails as Usenet news articles via NNTP.
  @@ -33,8 +33,8 @@
   AC_DIVERT_PUSH(NOTICE)
   V=`./shtool version -lc -dlong version.c`
   ./shtool echo -e "Configuring %BOSSP lmtp2nntp%b, Version %B${V}%b"
  -echo "Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>"
  -echo "Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>"
  +echo "Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>"
  +echo "Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>"
   AC_DIVERT_POP()
   
   dnl #   perform feature tests
  Index: ossp-pkg/lmtp2nntp/devtool
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 devtool
  --- ossp-pkg/lmtp2nntp/devtool	31 Dec 2001 12:03:09 -0000	1.1
  +++ ossp-pkg/lmtp2nntp/devtool	31 Dec 2001 15:15:36 -0000	1.2
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  devtool -- Development Tool
  -##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
   ##
   
   if [ $# -eq 0 ]; then
  Index: ossp-pkg/lmtp2nntp/devtool.func
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.func
  --- ossp-pkg/lmtp2nntp/devtool.func	31 Dec 2001 12:03:09 -0000	1.1
  +++ ossp-pkg/lmtp2nntp/devtool.func	31 Dec 2001 15:15:36 -0000	1.2
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
   ##
   
   devtool_require () {
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ============================================================
  $ cvs diff -u -r1.33 -r1.34 lmtp2nntp.pod
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.pod	15 Oct 2001 14:22:12 -0000	1.33
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.pod	31 Dec 2001 15:15:36 -0000	1.34
  @@ -1,6 +1,6 @@
   ##
  -##  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   ##  mailer which forwards mails as Usenet news articles via NNTP.
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_argz.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 lmtp2nntp_argz.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_argz.c	31 Dec 2001 11:09:52 -0000	1.1
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_argz.c	31 Dec 2001 15:15:36 -0000	1.2
  @@ -1,6 +1,6 @@
   /*
  -**  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_argz.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 lmtp2nntp_argz.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_argz.h	31 Dec 2001 11:09:52 -0000	1.1
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_argz.h	31 Dec 2001 15:15:36 -0000	1.2
  @@ -1,6 +1,6 @@
   /*
  -**  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_global.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 lmtp2nntp_global.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_global.h	31 Dec 2001 11:09:53 -0000	1.1
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_global.h	31 Dec 2001 15:15:36 -0000	1.2
  @@ -1,6 +1,6 @@
   /*
  -**  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_lmtp.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 lmtp2nntp_lmtp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_lmtp.c	31 Dec 2001 11:09:53 -0000	1.1
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_lmtp.c	31 Dec 2001 15:15:36 -0000	1.2
  @@ -1,6 +1,6 @@
   /*
  -**  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_lmtp.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 lmtp2nntp_lmtp.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_lmtp.h	31 Dec 2001 11:09:53 -0000	1.1
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_lmtp.h	31 Dec 2001 15:15:36 -0000	1.2
  @@ -1,6 +1,6 @@
   /*
  -**  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	31 Dec 2001 11:09:53 -0000	1.1
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	31 Dec 2001 15:15:36 -0000	1.2
  @@ -1,6 +1,6 @@
   /*
  -**  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 lmtp2nntp_msg.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	31 Dec 2001 11:09:53 -0000	1.1
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	31 Dec 2001 15:15:36 -0000	1.2
  @@ -1,6 +1,6 @@
   /*
  -**  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 lmtp2nntp_msg.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.h	31 Dec 2001 11:09:53 -0000	1.1
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.h	31 Dec 2001 15:15:36 -0000	1.2
  @@ -1,6 +1,6 @@
   /*
  -**  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 lmtp2nntp_nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.c	31 Dec 2001 11:09:53 -0000	1.1
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.c	31 Dec 2001 15:15:36 -0000	1.2
  @@ -1,6 +1,6 @@
   /*
  -**  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 lmtp2nntp_nntp.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.h	31 Dec 2001 11:09:53 -0000	1.1
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.h	31 Dec 2001 15:15:36 -0000	1.2
  @@ -1,6 +1,6 @@
   /*
  -**  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_shpat.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 lmtp2nntp_shpat.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_shpat.c	31 Dec 2001 11:09:53 -0000	1.1
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_shpat.c	31 Dec 2001 15:15:36 -0000	1.2
  @@ -1,6 +1,6 @@
   /*
  -**  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_shpat.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 lmtp2nntp_shpat.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_shpat.h	31 Dec 2001 11:09:53 -0000	1.1
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_shpat.h	31 Dec 2001 15:15:36 -0000	1.2
  @@ -1,6 +1,6 @@
   /*
  -**  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.

From ossp-cvs-owner@ossp.org  Wed Jan  2 13:31:20 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 73075764E8; Wed,  2 Jan 2002 13:31:20 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c
Message-Id: <20020102123120.73075764E8@mail.ossp.org>
Date: Wed,  2 Jan 2002 13:31:20 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   02-Jan-2002 13:31:20
  Branch: HEAD                             Handle: 2002010212311900

  Modified files:
    ossp-pkg/sa             sa.c

  Log:
    add support for optional port matching

  Summary:
    Revision    Changes     Path
    1.40        +26 -5      ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.39 -r1.40 sa.c
  --- ossp-pkg/sa/sa.c	31 Oct 2001 20:42:42 -0000	1.39
  +++ ossp-pkg/sa/sa.c	2 Jan 2002 12:31:19 -0000	1.40
  @@ -717,9 +717,11 @@
       int i;
       const unsigned char *ucp0;
   #endif
  +    unsigned int np1, np2;
  +    int bMatchPort;
   
       /* argument sanity check(s) */
  -    if (saa1 == NULL || saa2 == NULL || prefixlen < -1)
  +    if (saa1 == NULL || saa2 == NULL)
           return SA_ERR_ARG;
   
       /* short circuiting for wildcard matching */
  @@ -728,11 +730,13 @@
   
       /* determine address representation pointer and size */
       if (saa1->nFamily == AF_LOCAL) {
  +        np1  = 0;
  +        np2  = 0;
           ucp1 = (const unsigned char *)(((struct sockaddr_un *)saa1->saBuf)->sun_path);
           ucp2 = (const unsigned char *)(((struct sockaddr_un *)saa2->saBuf)->sun_path);
           l1 = strlen(((struct sockaddr_un *)saa1->saBuf)->sun_path) * 8;
           l2 = strlen(((struct sockaddr_un *)saa2->saBuf)->sun_path) * 8;
  -        if (prefixlen == -1) {
  +        if (prefixlen < 0) {
               if (l1 != l2)
                   return SA_ERR_MTC;
               nBits = l1;
  @@ -749,12 +753,16 @@
           /* special case of comparing a regular IPv4 address (1.2.3.4) with an 
              "IPv4-mapped IPv6 address" (::ffff:1.2.3.4). For details see RFC 2373. */
           if (saa1->nFamily == AF_INET6) {
  +            np1  = (unsigned int)(((struct sockaddr_in6 *)saa1->saBuf)->sin6_port);
  +            np2  = (unsigned int)(((struct sockaddr_in  *)saa2->saBuf)->sin_port);
               ucp1 = (const unsigned char *)&(((struct sockaddr_in6 *)saa1->saBuf)->sin6_addr);
               ucp2 = (const unsigned char *)&(((struct sockaddr_in  *)saa2->saBuf)->sin_addr);
               ucp0 = ucp1;
               ucp1 += 12;
           }
           else {
  +            np1  = (unsigned int)(((struct sockaddr_in  *)saa1->saBuf)->sin_port);
  +            np2  = (unsigned int)(((struct sockaddr_in6 *)saa2->saBuf)->sin6_port);
               ucp1 = (const unsigned char *)&(((struct sockaddr_in  *)saa1->saBuf)->sin_addr);
               ucp2 = (const unsigned char *)&(((struct sockaddr_in6 *)saa2->saBuf)->sin6_addr);
               ucp0 = ucp2;
  @@ -769,12 +777,16 @@
       }
   #endif
       else if (saa1->nFamily == AF_INET) {
  +        np1  = (unsigned int)(((struct sockaddr_in *)saa1->saBuf)->sin_port);
  +        np2  = (unsigned int)(((struct sockaddr_in *)saa2->saBuf)->sin_port);
           ucp1 = (const unsigned char *)&(((struct sockaddr_in *)saa1->saBuf)->sin_addr);
           ucp2 = (const unsigned char *)&(((struct sockaddr_in *)saa2->saBuf)->sin_addr);
           nBits = 32;
       }
   #ifdef AF_INET6
       else if (saa1->nFamily == AF_INET6) {
  +        np1  = (unsigned int)(((struct sockaddr_in6 *)saa1->saBuf)->sin6_port);
  +        np2  = (unsigned int)(((struct sockaddr_in6 *)saa2->saBuf)->sin6_port);
           ucp1 = (const unsigned char *)&(((struct sockaddr_in6 *)saa1->saBuf)->sin6_addr);
           ucp2 = (const unsigned char *)&(((struct sockaddr_in6 *)saa2->saBuf)->sin6_addr);
           nBits = 128;
  @@ -784,12 +796,15 @@
           return SA_ERR_INT;
   
       /* make sure we do not compare than possible */
  -    if (prefixlen > nBits)
  +    if (prefixlen > (nBits+1))
           return SA_ERR_ARG;
   
  -    /* support equal matching (= all bits) */
  -    if (prefixlen == -1)
  +    /* support equal matching (= all bits plus optionally port) */
  +    if (prefixlen < 0) {
  +        if (prefixlen < -1)
  +            bMatchPort = TRUE;
           prefixlen = nBits;
  +    }
   
       /* perform address representation comparison 
          (assumption guaranteed by API: network byte order is used) */
  @@ -806,6 +821,12 @@
           if ((uc1 & mask) != (uc2 & mask))
               return SA_ERR_MTC;
       }
  +
  +    /* optionally perform additional port matching */
  +    if (bMatchPort)
  +        if (np1 != np2)
  +            return SA_ERR_MTC;
  +
       return SA_OK;
   }
   

From ossp-cvs-owner@ossp.org  Wed Jan  2 13:33:10 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 922CE764E8; Wed,  2 Jan 2002 13:33:10 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c
Message-Id: <20020102123310.922CE764E8@mail.ossp.org>
Date: Wed,  2 Jan 2002 13:33:10 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   02-Jan-2002 13:33:10
  Branch: HEAD                             Handle: 2002010212331000

  Modified files:
    ossp-pkg/sa             sa.c

  Log:
    ops, uninitialized variable.

  Summary:
    Revision    Changes     Path
    1.41        +1  -0      ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.40 -r1.41 sa.c
  --- ossp-pkg/sa/sa.c	2 Jan 2002 12:31:19 -0000	1.40
  +++ ossp-pkg/sa/sa.c	2 Jan 2002 12:33:10 -0000	1.41
  @@ -800,6 +800,7 @@
           return SA_ERR_ARG;
   
       /* support equal matching (= all bits plus optionally port) */
  +    bMatchPort = FALSE;
       if (prefixlen < 0) {
           if (prefixlen < -1)
               bMatchPort = TRUE;

From ossp-cvs-owner@ossp.org  Wed Jan  2 13:40:29 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0895D764E8; Wed,  2 Jan 2002 13:40:28 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.pod
Message-Id: <20020102124028.0895D764E8@mail.ossp.org>
Date: Wed,  2 Jan 2002 13:40:28 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   02-Jan-2002 13:40:28
  Branch: HEAD                             Handle: 2002010212402800

  Modified files:
    ossp-pkg/sa             sa.pod

  Log:
    lots of more documentation

  Summary:
    Revision    Changes     Path
    1.19        +232 -50    ossp-pkg/sa/sa.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.pod
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 sa.pod
  --- ossp-pkg/sa/sa.pod	17 Nov 2001 15:03:04 -0000	1.18
  +++ ossp-pkg/sa/sa.pod	2 Jan 2002 12:40:28 -0000	1.19
  @@ -56,12 +56,12 @@
   sa_addr_a2u,
   sa_addr_a2s,
   sa_addr_match.
  -            
  +
   =item B<Socket Object Operations>:
   
   sa_create,
   sa_destroy. 
  -            
  +
   =item B<Socket Parameter Operations>:
   
   sa_type,
  @@ -69,7 +69,7 @@
   sa_buffer, 
   sa_option, 
   sa_syscall. 
  -            
  +
   =item B<Socket Connection Operations>:
   
   sa_bind,
  @@ -82,7 +82,7 @@
   sa_shutdown.
   
   =item B<Socket Input/Output Operations (Stream Communication)>:
  -            
  +
   sa_read,
   sa_readln,
   sa_write,
  @@ -103,8 +103,9 @@
   =head1 DESCRIPTION
   
   B<OSSP sa> is an abstraction library for the Unix I<Socket> networking
  -interface featuring stream and datagram oriented communication over
  -I<Unix Domain> and I<Internet Domain> (TCP and UDP) sockets.
  +application programming interface (API), featuring stream and datagram
  +oriented communication over I<Unix Domain> and I<Internet Domain> (TCP
  +and UDP) sockets.
   
   It provides the following key features:
   
  @@ -143,11 +144,11 @@
   revised these types after some time again). This is nasty, because
   for 100% type-correct API usage (especially important on 64-bit
   machines where pointers to different integer types make trouble), every
  -application has to check whether the newer types exists and if not
  +application has to check whether the newer types exists, and if not
   provide own definitions which map to the still actually used integer
   type on the underlying platform. B<OSSP sa> hides most of this in its
   API and for C<socklen_t> provides a backward-compatibility definition.
  -Instead of C<ssize_t> it uses C<size_t> because B<OSSP sa> does not use
  +Instead of C<ssize_t> it can use C<size_t> because B<OSSP sa> does not use
   traditional Unix return code semantics.
   
   =item B<I/O Timeouts>
  @@ -167,11 +168,11 @@
   If B<OSSP sa> is used for stream communication, internally all I/O
   operations can be performed through input and/or output buffers (set
   by sa_buffer()) for achieving higher I/O performance by doing I/O
  -operations on larger aggregated messages and with less system calls.
  -Additionally if B<OSSP sa> is used for stream communication, for
  +operations on larger aggregated messages and with less required system
  +calls. Additionally if B<OSSP sa> is used for stream communication, for
   convinience reasons line-oriented reading (sa_readln()) and formatted
  -writing (sa_writef()) is provided, modelled after STDIO's fgets(3) and
  -fprintf(3). Both features fully leverage from the I/O buffering.
  +writing (see sa_writef()) is provided, modelled after STDIO's fgets(3)
  +and fprintf(3). Both features fully leverage from the I/O buffering.
   
   =back
   
  @@ -194,33 +195,49 @@
    SA_ERR_EOF  End Of Communication
    SA_ERR_TMT  Communication Timeout
    SA_ERR_SYS  Operating System Error (see errno)
  + SA_ERR_IMP  Implementation Not Available
    SA_ERR_INT  Internal Error
   
   =item B<sa_addr_t> (Socket Address Abstraction Type)
   
  -This is an opaque type representing a socket address. 
  -Only pointers to this abstract type are used in the API.
  +This is an opaque data type representing a socket address. 
  +Only pointers to this abstract data type are used in the API.
   
   =item B<sa_t> (Socket Abstraction Type)
   
  -This is an opaque type representing a socket.
  -Only pointers to this abstract type are used in the API.
  +This is an opaque data type representing a socket.
  +Only pointers to this abstract data type are used in the API.
   
   =back
   
   =head1 FUNCTIONS
   
  +B<OSSP sa> provides a bunch of API functions, all modelled after the
  +same prototype: "C<sa_rc_t> C<sa_>I<name>C<(sa_>[C<addr_>]C<_t *,>
  +...C<)>". This means every function returns C<sa_rc_t> to indicate its
  +success (C<SA_OK>) or failure (C<SA_ERR_XXX>) by returning a return code
  +(the corresponding describing text can be determined by passing this
  +return code to C<sa_error>). Each function name starts with the common
  +prefix C<sa_> and receives a C<sa_t> (or C<sa_addr_t>) object on which
  +it operates as its first argument.
  +
   =head2 Address Object Operations
   
   =over 4
   
   =item sa_rc_t B<sa_addr_create>(sa_addr_t **I<saa>);
   
  -Create a socket address abstraction object.
  +Create a socket address abstraction object. 
  +The object is stored in I<saa> on success.
  +
  +Example: C<sa_addr_t *saa; sa_addr_create(&saa);>
   
   =item sa_rc_t B<sa_addr_destroy>(sa_addr_t *I<saa>);
   
   Destroy a socket address abstraction object.
  +The object I<saa> is invalid after this call succeeded.
  +
  +Example: C<sa_addr_destroy(saa);>
   
   =back
   
  @@ -230,55 +247,120 @@
   
   =item sa_rc_t B<sa_addr_u2a>(sa_addr_t *I<saa>, const char *I<uri>, ...);
   
  -Import an address by converting from an URI specification
  -to the corresponding address abstraction. The supported URI
  -syntax is: C<unix:>I<path> for I<Unix Domain> addresses and
  -C<inet://>I<addr>C<:>I<port>[C<#>I<protocol>] for I<Internet Domain>
  -addresses.
  -
  -I<path> can be an absolute or relative file path to an existing or
  -not-existing file. I<addr> can be an IPv4 address in dotted decimal
  -notation (C<127.0.0.1>), an IPv6 address in colon-separated (optionally
  -abbreviated) hexadecimal notation (C<::1>) or a to-be-resolved hostname
  -(C<localhost.example.com>). I<port> has to be either a decimal port in
  -the range C<1>...C<65535> or a port name. If I<port> is specified as a
  -name, it is resolved as a TCP port by default. To force resolving via a
  -particular protocol, I<protocol> can be specified as either C<tcp> or
  -C<udp>.
  +Import an address into by converting from an URI specification to the
  +corresponding address abstraction. 
  +
  +The supported syntax for I<uri> is: "C<unix:>I<path>" for I<Unix Domain>
  +addresses and "C<inet://>I<addr>C<:>I<port>[C<#>I<protocol>]" for
  +I<Internet Domain> addresses.
  +
  +In the URI, I<path> can be an absolute or relative filesystem path
  +to an existing or not-existing file. I<addr> can be an IPv4 address
  +in dotted decimal notation ("C<127.0.0.1>"), an IPv6 address in
  +colon-separated (optionally abbreviated) hexadecimal notation ("C<::1>")
  +or a to-be-resolved hostname ("C<localhost.example.com>"). I<port> has
  +to be either a decimal port in the range C<1>...C<65535> or a port
  +name ("C<smtp>"). If I<port> is specified as a name, it is resolved as
  +a TCP port by default. To force resolving a I<port> name via a
  +particular protocol, I<protocol> can be specified as either "C<tcp>" or
  +"C<udp>".
  +
  +The result is stored in I<saa> on success.
  +
  +Example: C<sa_addr_u2a(saa, "inet://192.168.0.1:smtp");>
   
   =item sa_rc_t B<sa_addr_s2a>(sa_addr_t *I<saa>, const struct sockaddr *I<sabuf>, socklen_t I<salen>);
   
  -Import an address by converting from a tranditional C<struct sockaddr> object
  -to the corresponding address abstraction. The accepted addresses are: C<struct
  -sockaddr_un> (C<AF_LOCAL>), C<struct sockaddr_in> (C<AF_INET>) and C<struct
  -sockaddr_in6> (C<AF_INET6>).
  +Import an address by converting from a tranditional C<struct sockaddr>
  +object to the corresponding address abstraction.
  +
  +The accepted addresses for I<sabuf> are: C<struct sockaddr_un>
  +(C<AF_LOCAL>), C<struct sockaddr_in> (C<AF_INET>) and C<struct
  +sockaddr_in6> (C<AF_INET6>). The I<salen> is the corresponding
  +C<sizeof()> of the underlying structure.
  +
  +The result is stored in I<saa> on success.
  +
  +Example: C<sockaddr_in in; sa_addr_s2a(saa, (struct sockaddr *)&in, (socklen_t)sizeof(in));>
   
   =item sa_rc_t B<sa_addr_a2u>(sa_addr_t *I<saa>, char **I<uri>);
   
   Export an address by converting from the address abstraction to the
  -corresponding URI specification. The result is a string of the form
  -C<unix:>I<path> for I<Unix Domain> addresses and (unresolved/numerical)
  -C<inet://>I<addr>C<:>I<port> for I<Internet Domain> addresses. The
  -caller has to free(3) the I<uri> later.
  +corresponding URI specification. 
  +
  +The result is a string of the form "C<unix:>I<path>" for I<Unix
  +Domain> addresses and "C<inet://>I<addr>C<:>I<port>" for I<Internet
  +Domain> addresses. Notice that I<addr> and I<port> are returned in
  +numerical (unresolved) way. Additionally, because usually one cannot map
  +bi-directionally between TCP or UDP port names and the numerical value,
  +there is no distinction between TCP and UDP here.
  +
  +The result is stored in I<uri> on success.
  +The caller has to free(3) the I<uri> buffer later.
  +
  +Example: C<char *uri; sa_addr_a2u(saa, &uri);>
   
   =item sa_rc_t B<sa_addr_a2s>(sa_addr_t *I<saa>, struct sockaddr **I<sabuf>, socklen_t *I<salen>);
   
   Export an address by converting from the address abstraction to the
  -corresponding traditional C<struct sockaddr> object. The result
  -is one of the following underlying address structures: C<struct
  -sockaddr_un> (C<AF_LOCAL>), C<struct sockaddr_in> (C<AF_INET>) and
  -C<struct sockaddr_in6> (C<AF_INET6>). The caller has to free(3) the
  -I<sabuf> later.
  +corresponding traditional C<struct sockaddr> object. 
  +
  +The result is one of the following underlying address structures: C<struct
  +sockaddr_un> (C<AF_LOCAL>), C<struct sockaddr_in> (C<AF_INET>) and C<struct
  +sockaddr_in6> (C<AF_INET6>). 
  +
  +The result is stored in I<sabuf> and I<salen> on success.
  +The caller has to free(3) the I<sabuf> buffer later.
  +
  +Example: C<struct sockaddr sabuf, socklen_t salen; sa_addr_a2s(saa, &sa, &salen);>
   
   =item sa_rc_t B<sa_addr_match>(sa_addr_t *I<saa1>, sa_addr_t *I<saa2>, size_t I<prefixlen>);
   
  -Match two address abstractions by only taking the prefix part of length
  -I<prefixlen> into account. I<prefixlen> is number of path characters
  -for I<Unix Domain> addresses and number of bits for I<Internet Domain>
  -addresses.
  +Match two address abstractions up to a specified prefix.
  +
  +This compares the addresses I<saa1> and I<saa2> by only taking the
  +prefix part of length I<prefixlen> into account. I<prefixlen> is number
  +of filesystem path characters for I<Unix Domain> addresses and number
  +of bits for I<Internet Domain> addresses. In case of I<Internet Domain>
  +addresses, the addresses are matched in network byte order and the port
  +(counting as an additional bit/item of length 1) is virtually appended
  +to the address for matching. Specifying I<prefixlen> as C<-1> means
  +matching the whole address (but without the virtually appended port)
  +without having to know how long the underlying address representation
  +(length of path for Unix Domain addresses, 32+1 [IPv4] or 128+1 [IPv6]
  +for Internet Domain addresses) is. Specifying I<prefixlen> as C<-2> is
  +equal to C<-1> but additionally the port is matched, too.
  +
  +This especially can be used to implement Access Control Lists (ACL)
  +without having to fiddle around with the underlying representation.
  +For this make I<saa1> the to be checked address and I<saa2> plus
  +I<prefixlen> the ACL pattern as shown in the following example.
  +
  +Example:
  +
  + sa_addr_t *srv_sa;
  + sa_addr_t *clt_saa;
  + sa_t      *clt_sa;
  + sa_addr_t *acl_saa;
  + char      *acl_addr = "192.168.0.0";
  + int        acl_len  = 24;
  + ...
  + sa_addr_u2a(&acl_saa, "inet://%s:0", acl_addr);
  + ...
  + while (sa_accept(srv_sa, &clt_saa, &clt_sa) == SA_OK) {
  +     if (sa_addr_match(clt_saa, acl_saa, acl_len) != SA_OK) {
  +         /* connection refused */
  +         ...
  +         sa_addr_destroy(clt_saa);
  +         sa_destroy(clt_sa);
  +         continue;
  +     }
  +     ...
  + }
  + ...
   
   =back
  -            
  +
   =head2 Socket Object Operations
   
   =over 4
  @@ -286,10 +368,16 @@
   =item sa_rc_t B<sa_create>(sa_t **I<sa>);
   
   Create a socket abstraction object.
  +The object is stored in I<sa> on success.
  +
  +Example: C<sa_t *sa; sa_create(&sa);>
   
   =item sa_rc_t B<sa_destroy>(sa_t *I<sa>);
   
   Destroy a socket abstraction object.
  +The object I<sa> is invalid after this call succeeded.
  +
  +Example: C<sa_destroy(sa);>
   
   =back
               
  @@ -299,13 +387,107 @@
   
   =item sa_rc_t B<sa_type>(sa_t *I<sa>, sa_type_t I<type>);
   
  +Assign a particular communication protocol type to the socket
  +abstraction object.
  +
  +A socket can only be assigned a single protocol type at any time.
  +Nevertheless one can switch the type of a socket abstraction object at
  +any time in order to reuse it for a different communication. Just keep
  +in mind that switching the type will stop a still ongoing communication
  +by closing the underlying socket.
  +
  +Possible values for I<type> are C<SA_TYPE_STREAM> (stream communication)
  +and C<SA_TYPE_DATAGRAM> (datagram communication). The default
  +communication protocol type is C<SA_TYPE_STREAM>.
  +
  +Example: C<sa_type(sa, SA_TYPE_STREAM);>
  +
   =item sa_rc_t B<sa_timeout>(sa_t *I<sa>, sa_timeout_t I<id>, long I<sec>, long I<usec>);
   
  +Assign one or more communication timeouts to the socket abstraction object.
  +
  +Possible values for I<id> are: C<SA_TIMEOUT_ACCEPT> (affecting
  +sa_accept()), C<SA_TIMEOUT_CONNECT> (affecting sa_connect()),
  +C<SA_TIMEOUT_READ> (affecting sa_read(), sa_readln() and sa_recv())
  +and C<SA_TIMEOUT_WRITE> (affecting sa_write(), sa_writef() and
  +sa_send()). Additionally you can set all four timeouts at once by using
  +C<SA_TIMEOUT_ALL>. The default is that no communication timeouts are
  +used which is equal to I<sec>=C<0>/I<usec>=C<0>.
  +
  +Example: C<sa_timeout(sa, SA_TIMEOUT_ALL, 30, 0);>
  +
   =item sa_rc_t B<sa_buffer>(sa_t *I<sa>, sa_buffer_t I<id>, size_t I<size>);
   
  +Assign I/O communication buffers to the socket abstraction object.
  +
  +Possible values for I<id> are: C<SA_BUFFER_READ> (affecting sa_read()
  +and sa_readln()) and C<SA_BUFFER_WRITE> (affecting sa_write() and
  +sa_writef()). The default is that no communication buffers are
  +used which is equal to I<size>=C<0>.
  +
  +Example: C<sa_buffer(sa, SA_BUFFER_READ, 16384);>
  +
   =item sa_rc_t B<sa_option>(sa_t *I<sa>, sa_option_t I<id>, ...);
   
  +Adjust various options of the socket abstraction object.
  +
  +The adjusted option is controlled by I<id>. The number and type of
  +the expected following argument(s) are dependent on the particular
  +option. Currently the following options are implement (option arguments
  +in parenthesis): C<SA_OPTION_NAGLE> (C<int> I<yesno>) for enabling
  +(I<yesno>=C<1>) or disabling (I<yesno>=C<0>) Nagle's Algorithm
  +(see RFC898); C<SA_OPTION_NONBLOCK> (C<int> I<yesno>) for enabling
  +(I<yesno>=C<1>) or disabling (I<yesno>=C<0>) non-blocking I/O mode (see
  +C<O_NONBLOCK> of fcntl(2)).
  +
  +Example: C<sa_option(sa, SA_OPTION_NONBLOCK, 1);>
  +
   =item sa_rc_t B<sa_syscall>(sa_t *I<sa>, sa_syscall_t I<id>, void (*I<fptr>)(), void *I<fctx>);
  +
  +Divert I/O communication related system calls to user supplied callback functions.
  +
  +This allows you to override mostly all I/O related system calls B<OSSP
  +sa> internally performs while communicating. This can be used to adapt
  +B<OSSP sa> to different run-time environments and requirements without
  +having to change the source code. Usually this is used to divert the
  +system calls to the variants of a user-land multithreading facility like
  +B<GNU Pth>.
  +
  +The function supplied as I<fptr> is required to fulfill the API of
  +the replaced system call, i.e., it has to have the same prototype (if
  +I<fctx> is C<NULL>). If I<fctx> is not C<NULL>, this prototype has to be
  +extended to accept an additional first argument of type C<void *> which
  +receives the value of I<fctx>. It is up to the callback function whether
  +to pass the call through to the replaced actual system call or not.
  +
  +Possible values for I<id> are (expected prototypes behind I<fptr> are
  +given in parenthesis): 
  +C<SA_SYSCALL_CONNECT>  ("C<int (*)([void *,] int, const struct sockaddr *, socklen_t)>", see connect(2)),
  +C<SA_SYSCALL_ACCEPT>   ("C<int (*)([void *,] int, struct sockaddr *, socklen_t *)>", see accept(2)),
  +C<SA_SYSCALL_SELECT>   ("C<int (*)([void *,] int, fd_set *, fd_set *, fd_set *, struct timeval *)>", see select(2)),
  +C<SA_SYSCALL_READ>     ("C<ssize_t (*)([void *,] int, void *, size_t)>", see read(2)), 
  +C<SA_SYSCALL_WRITE>    ("C<ssize_t (*)([void *,] int, const void *, size_t)>", see write(2)), 
  +C<SA_SYSCALL_RECVFROM> ("C<ssize_t (*)([void *,] int, void *, size_t, int, struct sockaddr *, socklen_t *)>", see recvfrom(2)), 
  +C<SA_SYSCALL_SENDTO>   ("C<ssize_t (*)([void *,] int, const void *, size_t, int, const struct sockaddr *, socklen_t)>", see sendto(2)).
  +
  +Example: 
  +
  + FILE *trace_fp = ...;
  +
  + ssize_t trace_read(void *ctx, int fd, void *buf, size_t len)
  + {
  +     FILE *fp = (FILE *)ctx; 
  +     ssize_t rv;
  +     int errno_saved;
  +
  +     rv = read(fd, buf, len);
  +     errno_saved = errno;
  +     fprintf(fp, "read(%d, %lx, %d) = %d\n", fd, (long)buf, len, rv);
  +     errno = errno_saved;
  +     return rv;
  + }
  +
  + sa_syscall(sa, SA_SC_READ, trace_read, trace_fp);
   
   =back
   

From ossp-cvs-owner@ossp.org  Wed Jan  2 13:43:51 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 61DF0764E8; Wed,  2 Jan 2002 13:43:51 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa Makefile.in README aclocal.m4 sa-config.in sa....
Message-Id: <20020102124351.61DF0764E8@mail.ossp.org>
Date: Wed,  2 Jan 2002 13:43:51 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   02-Jan-2002 13:43:51
  Branch: HEAD                             Handle: 2002010212435000

  Modified files:
    ossp-pkg/sa             Makefile.in README aclocal.m4 sa-config.in sa.ac
                            sa.c sa.h sa.pod sa_test.c ts.c ts.h

  Log:
    bump copyright year

  Summary:
    Revision    Changes     Path
    1.11        +3  -3      ossp-pkg/sa/Makefile.in
    1.3         +3  -3      ossp-pkg/sa/README
    1.3         +3  -3      ossp-pkg/sa/aclocal.m4
    1.2         +3  -3      ossp-pkg/sa/sa-config.in
    1.8         +3  -3      ossp-pkg/sa/sa.ac
    1.42        +3  -3      ossp-pkg/sa/sa.c
    1.26        +3  -3      ossp-pkg/sa/sa.h
    1.20        +3  -3      ossp-pkg/sa/sa.pod
    1.13        +3  -3      ossp-pkg/sa/sa_test.c
    1.4         +3  -3      ossp-pkg/sa/ts.c
    1.3         +3  -3      ossp-pkg/sa/ts.h
  ____________________________________________________________________________

  Index: ossp-pkg/sa/Makefile.in
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 Makefile.in
  --- ossp-pkg/sa/Makefile.in	31 Oct 2001 19:52:21 -0000	1.10
  +++ ossp-pkg/sa/Makefile.in	2 Jan 2002 12:43:50 -0000	1.11
  @@ -1,8 +1,8 @@
   ##
   ##  SA - OSSP Socket Abstraction Library
  -##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP SA, a socket abstraction library which
   ##  can be found at http://www.ossp.org/pkg/sa/.
  Index: ossp-pkg/sa/README
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 README
  --- ossp-pkg/sa/README	8 Oct 2001 10:03:54 -0000	1.2
  +++ ossp-pkg/sa/README	2 Jan 2002 12:43:50 -0000	1.3
  @@ -16,9 +16,9 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  -  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   
     This file is part of OSSP SA, a socket abstraction library which
     can be found at http://www.ossp.org/pkg/sa/.
  Index: ossp-pkg/sa/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 aclocal.m4
  --- ossp-pkg/sa/aclocal.m4	8 Oct 2001 10:03:54 -0000	1.2
  +++ ossp-pkg/sa/aclocal.m4	2 Jan 2002 12:43:50 -0000	1.3
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  SA - OSSP Socket Abstraction Library
  -dnl ##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP SA, a socket abstraction library which
   dnl ##  can be found at http://www.ossp.org/pkg/sa/.
  Index: ossp-pkg/sa/sa-config.in
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 sa-config.in
  --- ossp-pkg/sa/sa-config.in	8 Oct 2001 10:03:54 -0000	1.1
  +++ ossp-pkg/sa/sa-config.in	2 Jan 2002 12:43:50 -0000	1.2
  @@ -1,9 +1,9 @@
   #!/bin/sh
   ##
   ##  SA - OSSP Logging Library
  -##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP SA, a socket abstraction library which
   ##  can be found at http://www.ossp.org/pkg/sa/.
  Index: ossp-pkg/sa/sa.ac
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 sa.ac
  --- ossp-pkg/sa/sa.ac	24 Oct 2001 12:17:51 -0000	1.7
  +++ ossp-pkg/sa/sa.ac	2 Jan 2002 12:43:50 -0000	1.8
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  SA - OSSP Socket Abstraction Library
  -dnl ##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP SA, a socket abstraction library which
   dnl ##  can be found at http://www.ossp.org/pkg/sa/.
  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.41 -r1.42 sa.c
  --- ossp-pkg/sa/sa.c	2 Jan 2002 12:33:10 -0000	1.41
  +++ ossp-pkg/sa/sa.c	2 Jan 2002 12:43:50 -0000	1.42
  @@ -1,8 +1,8 @@
   /*
   **  SA - OSSP Socket Abstraction Library
  -**  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP SA, a socket abstraction library which
   **  can be found at http://www.ossp.org/pkg/sa/.
  Index: ossp-pkg/sa/sa.h
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 sa.h
  --- ossp-pkg/sa/sa.h	30 Nov 2001 09:50:44 -0000	1.25
  +++ ossp-pkg/sa/sa.h	2 Jan 2002 12:43:50 -0000	1.26
  @@ -1,8 +1,8 @@
   /*
   **  SA - OSSP Socket Abstraction Library
  -**  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP SA, a socket abstraction library which
   **  can be found at http://www.ossp.org/pkg/sa/.
  Index: ossp-pkg/sa/sa.pod
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 sa.pod
  --- ossp-pkg/sa/sa.pod	2 Jan 2002 12:40:28 -0000	1.19
  +++ ossp-pkg/sa/sa.pod	2 Jan 2002 12:43:50 -0000	1.20
  @@ -1,8 +1,8 @@
   ##
   ##  SA - OSSP Socket Abstraction Library
  -##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP SA, a socket abstraction library which
   ##  can be found at http://www.ossp.org/pkg/sa/.
  Index: ossp-pkg/sa/sa_test.c
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 sa_test.c
  --- ossp-pkg/sa/sa_test.c	31 Oct 2001 20:16:10 -0000	1.12
  +++ ossp-pkg/sa/sa_test.c	2 Jan 2002 12:43:50 -0000	1.13
  @@ -1,8 +1,8 @@
   /*
   **  SA - OSSP Socket Abstraction Library
  -**  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP SA, a socket abstraction library which
   **  can be found at http://www.ossp.org/pkg/sa/.
  Index: ossp-pkg/sa/ts.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 ts.c
  --- ossp-pkg/sa/ts.c	31 Oct 2001 19:28:49 -0000	1.3
  +++ ossp-pkg/sa/ts.c	2 Jan 2002 12:43:50 -0000	1.4
  @@ -1,8 +1,8 @@
   /*
   **  TS - OSSP Test Suite Library
  -**  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP TS, a small test suite library which
   **  can be found at http://www.ossp.org/pkg/ts/.
  Index: ossp-pkg/sa/ts.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 ts.h
  --- ossp-pkg/sa/ts.h	31 Oct 2001 19:28:49 -0000	1.2
  +++ ossp-pkg/sa/ts.h	2 Jan 2002 12:43:50 -0000	1.3
  @@ -1,8 +1,8 @@
   /*
   **  TS - OSSP Test Suite Library
  -**  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP TS, a small test suite library which
   **  can be found at http://www.ossp.org/pkg/ts/.

From ossp-cvs-owner@ossp.org  Wed Jan  2 14:08:14 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 13600764E8; Wed,  2 Jan 2002 14:08:14 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c
Message-Id: <20020102130814.13600764E8@mail.ossp.org>
Date: Wed,  2 Jan 2002 14:08:14 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   02-Jan-2002 14:08:14
  Branch: HEAD                             Handle: 2002010213081300

  Modified files:
    ossp-pkg/sa             sa.c

  Log:
    use faster IPPROTO_XXX instead of getprotobyname if available

  Summary:
    Revision    Changes     Path
    1.43        +12 -4      ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.42 -r1.43 sa.c
  --- ossp-pkg/sa/sa.c	2 Jan 2002 12:43:50 -0000	1.42
  +++ ossp-pkg/sa/sa.c	2 Jan 2002 13:08:13 -0000	1.43
  @@ -859,7 +859,6 @@
       int nType;
       int nProto;
       struct protoent *pe;
  -    char *cpProto;
   
       /* argument sanity check(s) */
       if (sa == NULL)
  @@ -885,15 +884,24 @@
   #else
       else if (nFamily == AF_INET) {
   #endif
  +#if defined(IPPROTO_TCP) && defined(IPPROTO_UDP)
           if (nType == SOCK_STREAM)
  -            cpProto = "tcp";
  +            nProto = IPPROTO_TCP;
           else if (nType == SOCK_DGRAM)
  -            cpProto = "udp";
  +            nProto = IPPROTO_UDP;
           else
               return SA_ERR_INT;
  -        if ((pe = getprotobyname(cpProto)) == NULL)
  +#else
  +        if (nType == SOCK_STREAM)
  +            pe = getprotobyname("tcp");
  +        else if (nType == SOCK_DGRAM)
  +            pe = getprotobyname("udp");
  +        else
  +            return SA_ERR_INT;
  +        if (pe == NULL)
               return SA_ERR_SYS;
           nProto = pe->p_proto;
  +#endif
       }
       else
           return SA_ERR_INT;

From ossp-cvs-owner@ossp.org  Wed Jan  2 14:08:49 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C2D9A7650D; Wed,  2 Jan 2002 14:08:48 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c
Message-Id: <20020102130848.C2D9A7650D@mail.ossp.org>
Date: Wed,  2 Jan 2002 14:08:48 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   02-Jan-2002 14:08:48
  Branch: HEAD                             Handle: 2002010213084800

  Modified files:
    ossp-pkg/sa             sa.c

  Log:
    conditionalize variable, too.

  Summary:
    Revision    Changes     Path
    1.44        +2  -0      ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.43 -r1.44 sa.c
  --- ossp-pkg/sa/sa.c	2 Jan 2002 13:08:13 -0000	1.43
  +++ ossp-pkg/sa/sa.c	2 Jan 2002 13:08:48 -0000	1.44
  @@ -858,7 +858,9 @@
   {
       int nType;
       int nProto;
  +#if !(defined(IPPROTO_TCP) && defined(IPPROTO_UDP))
       struct protoent *pe;
  +#endif
   
       /* argument sanity check(s) */
       if (sa == NULL)

From ossp-cvs-owner@ossp.org  Wed Jan  2 14:20:12 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F178B764E8; Wed,  2 Jan 2002 14:20:11 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa TODO sa.c
Message-Id: <20020102132011.F178B764E8@mail.ossp.org>
Date: Wed,  2 Jan 2002 14:20:11 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   02-Jan-2002 14:20:11
  Branch: HEAD                             Handle: 2002010213201100

  Modified files:
    ossp-pkg/sa             TODO sa.c

  Log:
    first cut for PF_XXX usage

  Summary:
    Revision    Changes     Path
    1.32        +3  -0      ossp-pkg/sa/TODO
    1.45        +12 -1      ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 TODO
  --- ossp-pkg/sa/TODO	31 Oct 2001 20:07:22 -0000	1.31
  +++ ossp-pkg/sa/TODO	2 Jan 2002 13:20:11 -0000	1.32
  @@ -8,6 +8,9 @@
   CANDO
   -----
   
  +o Consistently use PF_XXX instead of AF_XXX whenever not directly
  +  address related things are done in order to even closer conform to POSIX.
  +
   o Support for newer DNS Resolving Functions.
   
     In IPv6 land there are usually the newer DNS resolving functions
  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.44 -r1.45 sa.c
  --- ossp-pkg/sa/sa.c	2 Jan 2002 13:08:48 -0000	1.44
  +++ ossp-pkg/sa/sa.c	2 Jan 2002 13:20:11 -0000	1.45
  @@ -47,7 +47,7 @@
   #include <sys/time.h>    /* for "struct timeval" */
   #include <sys/un.h>      /* for "struct sockaddr_un" */
   #include <netinet/in.h>  /* for "struct sockaddr_in[6]" */
  -#include <sys/socket.h>  /* for "AF_XXX" and "SOCK_XXX" */
  +#include <sys/socket.h>  /* for "PF_XXX", "AF_XXX" and "SOCK_XXX" */
   #include <arpa/inet.h>   /* for "inet_XtoX" */
   
   /* include own API header */
  @@ -64,6 +64,17 @@
   /* backward compatibility for AF_LOCAL */
   #if !defined(AF_LOCAL) && defined(AF_UNIX)
   #define AF_LOCAL AF_UNIX
  +#endif
  +
  +/* backward compatibility for PF_XXX (still unused) */
  +if !defined(PF_LOCAL) && defined(AF_LOCAL)
  +#define PF_LOCAL AF_LOCAL
  +#endif
  +if !defined(PF_INET) && defined(AF_INET)
  +#define PF_INET AF_INET
  +#endif
  +if !defined(PF_INET6) && defined(AF_INET6)
  +#define PF_INET6 AF_INET6
   #endif
   
   /* backward compatibility for ssize_t */

From ossp-cvs-owner@ossp.org  Wed Jan  2 14:21:08 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5E6BF764E8; Wed,  2 Jan 2002 14:21:08 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c
Message-Id: <20020102132108.5E6BF764E8@mail.ossp.org>
Date: Wed,  2 Jan 2002 14:21:08 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   02-Jan-2002 14:21:08
  Branch: HEAD                             Handle: 2002010213210700

  Modified files:
    ossp-pkg/sa             sa.c

  Log:
    ops, syntax error

  Summary:
    Revision    Changes     Path
    1.46        +3  -3      ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.45 -r1.46 sa.c
  --- ossp-pkg/sa/sa.c	2 Jan 2002 13:20:11 -0000	1.45
  +++ ossp-pkg/sa/sa.c	2 Jan 2002 13:21:07 -0000	1.46
  @@ -67,13 +67,13 @@
   #endif
   
   /* backward compatibility for PF_XXX (still unused) */
  -if !defined(PF_LOCAL) && defined(AF_LOCAL)
  +#if !defined(PF_LOCAL) && defined(AF_LOCAL)
   #define PF_LOCAL AF_LOCAL
   #endif
  -if !defined(PF_INET) && defined(AF_INET)
  +#if !defined(PF_INET) && defined(AF_INET)
   #define PF_INET AF_INET
   #endif
  -if !defined(PF_INET6) && defined(AF_INET6)
  +#if !defined(PF_INET6) && defined(AF_INET6)
   #define PF_INET6 AF_INET6
   #endif
   

From ossp-cvs-owner@ossp.org  Wed Jan  2 14:27:11 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6BF92764E8; Wed,  2 Jan 2002 14:27:11 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c
Message-Id: <20020102132711.6BF92764E8@mail.ossp.org>
Date: Wed,  2 Jan 2002 14:27:11 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   02-Jan-2002 14:27:11
  Branch: HEAD                             Handle: 2002010213271100

  Modified files:
    ossp-pkg/sa             sa.c

  Log:
    complain if no socket is available for SA_OPTION_NONBLOCK

  Summary:
    Revision    Changes     Path
    1.47        +4  -0      ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.46 -r1.47 sa.c
  --- ossp-pkg/sa/sa.c	2 Jan 2002 13:21:07 -0000	1.46
  +++ ossp-pkg/sa/sa.c	2 Jan 2002 13:27:11 -0000	1.47
  @@ -1147,6 +1147,10 @@
               /* enable/disable non-blocking I/O mode */
               int flags;
               int mode = (int)va_arg(ap, int);
  +            if (sa->fdSocket == -1) {
  +                rv = SA_ERR_USE;
  +                break;
  +            }
               if ((flags = fcntl(sa->fdSocket, F_GETFL, 0)) < 0) {
                   rv = SA_ERR_SYS;
                   break;

From ossp-cvs-owner@ossp.org  Wed Jan  2 14:35:36 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AD663764E8; Wed,  2 Jan 2002 14:35:36 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c sa.h sa.pod
Message-Id: <20020102133536.AD663764E8@mail.ossp.org>
Date: Wed,  2 Jan 2002 14:35:36 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   02-Jan-2002 14:35:36
  Branch: HEAD                             Handle: 2002010213353600

  Modified files:
    ossp-pkg/sa             sa.c sa.h sa.pod

  Log:
    add support for reusability of address or port

  Summary:
    Revision    Changes     Path
    1.48        +19 -0      ossp-pkg/sa/sa.c
    1.27        +2  -0      ossp-pkg/sa/sa.h
    1.21        +9  -4      ossp-pkg/sa/sa.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.47 -r1.48 sa.c
  --- ossp-pkg/sa/sa.c	2 Jan 2002 13:27:11 -0000	1.47
  +++ ossp-pkg/sa/sa.c	2 Jan 2002 13:35:36 -0000	1.48
  @@ -1143,6 +1143,25 @@
   #endif
               break;
           }
  +        case SA_OPTION_REUSEADDR:
  +        case SA_OPTION_REUSEPORT: {
  +            /* enable/disable reusability of binding to address or port */
  +            int mode = ((int)va_arg(ap, int) ? 1 : 0);
  +            int flag;
  +            if (sa->fdSocket == -1) {
  +                rv = SA_ERR_USE;
  +                break;
  +            }
  +            switch (id) {
  +                case SA_OPTION_REUSEADDR: flag = SO_REUSEADDR; break;
  +                case SA_OPTION_REUSEPORT: flag = SO_REUSEPORT; break;
  +                default: flag = 0; break;
  +            }
  +            if (setsockopt(sa->fdSocket, SOL_SOCKET, flag, 
  +                           (void *)&mode, sizeof(mode)) < 0)
  +                rv = SA_ERR_SYS;
  +            break;
  +        }
           case SA_OPTION_NONBLOCK: {
               /* enable/disable non-blocking I/O mode */
               int flags;
  Index: ossp-pkg/sa/sa.h
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 sa.h
  --- ossp-pkg/sa/sa.h	2 Jan 2002 12:43:50 -0000	1.26
  +++ ossp-pkg/sa/sa.h	2 Jan 2002 13:35:36 -0000	1.27
  @@ -138,6 +138,8 @@
   /* list of options */
   typedef enum {
       SA_OPTION_NAGLE,
  +    SA_OPTION_REUSEADDR,
  +    SA_OPTION_REUSEPORT,
       SA_OPTION_NONBLOCK
   } sa_option_t;
   
  Index: ossp-pkg/sa/sa.pod
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 sa.pod
  --- ossp-pkg/sa/sa.pod	2 Jan 2002 12:43:50 -0000	1.20
  +++ ossp-pkg/sa/sa.pod	2 Jan 2002 13:35:36 -0000	1.21
  @@ -435,10 +435,15 @@
   the expected following argument(s) are dependent on the particular
   option. Currently the following options are implement (option arguments
   in parenthesis): C<SA_OPTION_NAGLE> (C<int> I<yesno>) for enabling
  -(I<yesno>=C<1>) or disabling (I<yesno>=C<0>) Nagle's Algorithm
  -(see RFC898); C<SA_OPTION_NONBLOCK> (C<int> I<yesno>) for enabling
  -(I<yesno>=C<1>) or disabling (I<yesno>=C<0>) non-blocking I/O mode (see
  -C<O_NONBLOCK> of fcntl(2)).
  +(I<yesno>=C<1>) or disabling (I<yesno>=C<0>) Nagle's Algorithm (see
  +RFC898); C<SA_OPTION_REUSEADDR> (C<int> I<yesno>) for enabling
  +(I<yesno>=C<1>) or disabling (I<yesno>=C<0>) the reusability of
  +the address on binding (see C<SO_REUSEADDR> of setsockopt(2)),
  +C<SA_OPTION_REUSEPORT> (C<int> I<yesno>) for enabling (I<yesno>=C<1>)
  +or disabling (I<yesno>=C<0>) the reusability of the port on binding
  +(see C<SO_REUSEPORT> of setsockopt(2)), C<SA_OPTION_NONBLOCK> (C<int>
  +I<yesno>) for enabling (I<yesno>=C<1>) or disabling (I<yesno>=C<0>)
  +non-blocking I/O mode (see C<O_NONBLOCK> of fcntl(2)).
   
   Example: C<sa_option(sa, SA_OPTION_NONBLOCK, 1);>
   

From ossp-cvs-owner@ossp.org  Wed Jan  2 14:44:49 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 798F5764E8; Wed,  2 Jan 2002 14:44:49 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c sa.h sa.pod
Message-Id: <20020102134449.798F5764E8@mail.ossp.org>
Date: Wed,  2 Jan 2002 14:44:49 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   02-Jan-2002 14:44:49
  Branch: HEAD                             Handle: 2002010213444800

  Modified files:
    ossp-pkg/sa             sa.c sa.h sa.pod

  Log:
    add support for lingering on close

  Summary:
    Revision    Changes     Path
    1.49        +15 -0      ossp-pkg/sa/sa.c
    1.28        +1  -0      ossp-pkg/sa/sa.h
    1.22        +12 -8      ossp-pkg/sa/sa.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.48 -r1.49 sa.c
  --- ossp-pkg/sa/sa.c	2 Jan 2002 13:35:36 -0000	1.48
  +++ ossp-pkg/sa/sa.c	2 Jan 2002 13:44:48 -0000	1.49
  @@ -1143,6 +1143,21 @@
   #endif
               break;
           }
  +        case SA_OPTION_LINGER: {
  +#if defined(SO_LINGER)
  +            struct linger *linger = (struct linger *)va_arg(ap, void *);
  +            if (sa->fdSocket == -1) {
  +                rv = SA_ERR_USE;
  +                break;
  +            }
  +            if (setsockopt(sa->fdSocket, SOL_SOCKET, SO_LINGER, 
  +                           linger, sizeof(struct linger)) < 0)
  +                rv = SA_ERR_SYS;
  +#else
  +            rv = SA_ERR_IMP;
  +#endif
  +            break;
  +        }
           case SA_OPTION_REUSEADDR:
           case SA_OPTION_REUSEPORT: {
               /* enable/disable reusability of binding to address or port */
  Index: ossp-pkg/sa/sa.h
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 sa.h
  --- ossp-pkg/sa/sa.h	2 Jan 2002 13:35:36 -0000	1.27
  +++ ossp-pkg/sa/sa.h	2 Jan 2002 13:44:48 -0000	1.28
  @@ -138,6 +138,7 @@
   /* list of options */
   typedef enum {
       SA_OPTION_NAGLE,
  +    SA_OPTION_LINGER,
       SA_OPTION_REUSEADDR,
       SA_OPTION_REUSEPORT,
       SA_OPTION_NONBLOCK
  Index: ossp-pkg/sa/sa.pod
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 sa.pod
  --- ossp-pkg/sa/sa.pod	2 Jan 2002 13:35:36 -0000	1.21
  +++ ossp-pkg/sa/sa.pod	2 Jan 2002 13:44:48 -0000	1.22
  @@ -435,15 +435,19 @@
   the expected following argument(s) are dependent on the particular
   option. Currently the following options are implement (option arguments
   in parenthesis): C<SA_OPTION_NAGLE> (C<int> I<yesno>) for enabling
  -(I<yesno>=C<1>) or disabling (I<yesno>=C<0>) Nagle's Algorithm (see
  -RFC898); C<SA_OPTION_REUSEADDR> (C<int> I<yesno>) for enabling
  -(I<yesno>=C<1>) or disabling (I<yesno>=C<0>) the reusability of
  -the address on binding (see C<SO_REUSEADDR> of setsockopt(2)),
  -C<SA_OPTION_REUSEPORT> (C<int> I<yesno>) for enabling (I<yesno>=C<1>)
  -or disabling (I<yesno>=C<0>) the reusability of the port on binding
  -(see C<SO_REUSEPORT> of setsockopt(2)), C<SA_OPTION_NONBLOCK> (C<int>
  +(I<yesno>=C<1>) or disabling (I<yesno>=C<0>) Nagle's Algorithm
  +(see RFC898); C<SA_OPTION_LINGER> (C<struct linger *>I<linger>) for enabling
  +(C<linger-E<gt>l_onoff>=C<1>) or disabling (C<linger-E<gt>l_onoff>=C<0>
  +and C<linger-E<gt>l_linger=I<seconds>) lingering on close (see
  +C<struct linger> in F<sys/socket.h>); C<SA_OPTION_REUSEADDR> (C<int>
   I<yesno>) for enabling (I<yesno>=C<1>) or disabling (I<yesno>=C<0>)
  -non-blocking I/O mode (see C<O_NONBLOCK> of fcntl(2)).
  +the reusability of the address on binding (see C<SO_REUSEADDR>
  +of setsockopt(2)), C<SA_OPTION_REUSEPORT> (C<int> I<yesno>) for
  +enabling (I<yesno>=C<1>) or disabling (I<yesno>=C<0>) the reusability
  +of the port on binding (see C<SO_REUSEPORT> of setsockopt(2)),
  +C<SA_OPTION_NONBLOCK> (C<int> I<yesno>) for enabling (I<yesno>=C<1>) or
  +disabling (I<yesno>=C<0>) non-blocking I/O mode (see C<O_NONBLOCK> of
  +fcntl(2)).
   
   Example: C<sa_option(sa, SA_OPTION_NONBLOCK, 1);>
   

From ossp-cvs-owner@ossp.org  Wed Jan  2 14:52:39 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 455AF764E8; Wed,  2 Jan 2002 14:52:39 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c
Message-Id: <20020102135239.455AF764E8@mail.ossp.org>
Date: Wed,  2 Jan 2002 14:52:39 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   02-Jan-2002 14:52:39
  Branch: HEAD                             Handle: 2002010213523800

  Modified files:
    ossp-pkg/sa             sa.c

  Log:
    rewrite with a more readable switch() statement

  Summary:
    Revision    Changes     Path
    1.50        +18 -17     ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.49 -r1.50 sa.c
  --- ossp-pkg/sa/sa.c	2 Jan 2002 13:44:48 -0000	1.49
  +++ ossp-pkg/sa/sa.c	2 Jan 2002 13:52:38 -0000	1.50
  @@ -1209,25 +1209,26 @@
   /* override system call */
   sa_rc_t sa_syscall(sa_t *sa, sa_syscall_t id, void (*fptr)(), void *fctx)
   {
  +    sa_rc_t rv;
  +
  +    /* argument sanity check(s) */
       if (sa == NULL || fptr == NULL)
           return SA_ERR_ARG;
  -    if (id == SA_SYSCALL_CONNECT)
  -        SA_SC_ASSIGN(sa, connect, fptr, fctx); 
  -    else if (id == SA_SYSCALL_ACCEPT)
  -        SA_SC_ASSIGN(sa, accept, fptr, fctx); 
  -    else if (id == SA_SYSCALL_SELECT)
  -        SA_SC_ASSIGN(sa, select, fptr, fctx); 
  -    else if (id == SA_SYSCALL_READ)
  -        SA_SC_ASSIGN(sa, read, fptr, fctx); 
  -    else if (id == SA_SYSCALL_WRITE)
  -        SA_SC_ASSIGN(sa, write, fptr, fctx); 
  -    else if (id == SA_SYSCALL_RECVFROM)
  -        SA_SC_ASSIGN(sa, recvfrom, fptr, fctx); 
  -    else if (id == SA_SYSCALL_SENDTO)
  -        SA_SC_ASSIGN(sa, sendto, fptr, fctx); 
  -    else
  -        return SA_ERR_ARG;
  -    return SA_OK;
  +
  +    /* assign system call */
  +    rv = SA_OK;
  +    switch (id) {
  +        case SA_SYSCALL_CONNECT:  SA_SC_ASSIGN(sa, connect,  fptr, fctx); 
  +        case SA_SYSCALL_ACCEPT:   SA_SC_ASSIGN(sa, accept,   fptr, fctx); 
  +        case SA_SYSCALL_SELECT:   SA_SC_ASSIGN(sa, select,   fptr, fctx); 
  +        case SA_SYSCALL_READ:     SA_SC_ASSIGN(sa, read,     fptr, fctx); 
  +        case SA_SYSCALL_WRITE:    SA_SC_ASSIGN(sa, write,    fptr, fctx); 
  +        case SA_SYSCALL_RECVFROM: SA_SC_ASSIGN(sa, recvfrom, fptr, fctx); 
  +        case SA_SYSCALL_SENDTO:   SA_SC_ASSIGN(sa, sendto,   fptr, fctx); 
  +        case: rv = SA_ERR_ARG;
  +    }
  +
  +    return rv;
   }
   
   /* bind socket to a local address */

From ossp-cvs-owner@ossp.org  Wed Jan  2 14:53:12 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 406D47650D; Wed,  2 Jan 2002 14:53:12 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c
Message-Id: <20020102135312.406D47650D@mail.ossp.org>
Date: Wed,  2 Jan 2002 14:53:12 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   02-Jan-2002 14:53:12
  Branch: HEAD                             Handle: 2002010213531100

  Modified files:
    ossp-pkg/sa             sa.c

  Log:
    fix syntax

  Summary:
    Revision    Changes     Path
    1.51        +8  -8      ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.50 -r1.51 sa.c
  --- ossp-pkg/sa/sa.c	2 Jan 2002 13:52:38 -0000	1.50
  +++ ossp-pkg/sa/sa.c	2 Jan 2002 13:53:11 -0000	1.51
  @@ -1218,14 +1218,14 @@
       /* assign system call */
       rv = SA_OK;
       switch (id) {
  -        case SA_SYSCALL_CONNECT:  SA_SC_ASSIGN(sa, connect,  fptr, fctx); 
  -        case SA_SYSCALL_ACCEPT:   SA_SC_ASSIGN(sa, accept,   fptr, fctx); 
  -        case SA_SYSCALL_SELECT:   SA_SC_ASSIGN(sa, select,   fptr, fctx); 
  -        case SA_SYSCALL_READ:     SA_SC_ASSIGN(sa, read,     fptr, fctx); 
  -        case SA_SYSCALL_WRITE:    SA_SC_ASSIGN(sa, write,    fptr, fctx); 
  -        case SA_SYSCALL_RECVFROM: SA_SC_ASSIGN(sa, recvfrom, fptr, fctx); 
  -        case SA_SYSCALL_SENDTO:   SA_SC_ASSIGN(sa, sendto,   fptr, fctx); 
  -        case: rv = SA_ERR_ARG;
  +        case SA_SYSCALL_CONNECT:  SA_SC_ASSIGN(sa, connect,  fptr, fctx); break;
  +        case SA_SYSCALL_ACCEPT:   SA_SC_ASSIGN(sa, accept,   fptr, fctx); break;
  +        case SA_SYSCALL_SELECT:   SA_SC_ASSIGN(sa, select,   fptr, fctx); break;
  +        case SA_SYSCALL_READ:     SA_SC_ASSIGN(sa, read,     fptr, fctx); break;
  +        case SA_SYSCALL_WRITE:    SA_SC_ASSIGN(sa, write,    fptr, fctx); break;
  +        case SA_SYSCALL_RECVFROM: SA_SC_ASSIGN(sa, recvfrom, fptr, fctx); break;
  +        case SA_SYSCALL_SENDTO:   SA_SC_ASSIGN(sa, sendto,   fptr, fctx); break;
  +        default: rv = SA_ERR_ARG; 
       }
   
       return rv;

From ossp-cvs-owner@ossp.org  Wed Jan  2 14:54:19 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 04F8C764E8; Wed,  2 Jan 2002 14:54:18 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa TODO
Message-Id: <20020102135418.04F8C764E8@mail.ossp.org>
Date: Wed,  2 Jan 2002 14:54:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   02-Jan-2002 14:54:18
  Branch: HEAD                             Handle: 2002010213541800

  Modified files:
    ossp-pkg/sa             TODO

  Log:
    todo

  Summary:
    Revision    Changes     Path
    1.33        +1  -1      ossp-pkg/sa/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.32 -r1.33 TODO
  --- ossp-pkg/sa/TODO	2 Jan 2002 13:20:11 -0000	1.32
  +++ ossp-pkg/sa/TODO	2 Jan 2002 13:54:18 -0000	1.33
  @@ -2,7 +2,7 @@
   TODO
   ----
   
  -- more test cases to cover full API
  +- more test cases to cover full API and especially the client/server usage
   - more documentation to fully describe API
   
   CANDO

From ossp-cvs-owner@ossp.org  Wed Jan  2 15:41:07 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 79E56764E8; Wed,  2 Jan 2002 15:41:07 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.pod
Message-Id: <20020102144107.79E56764E8@mail.ossp.org>
Date: Wed,  2 Jan 2002 15:41:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   02-Jan-2002 15:41:07
  Branch: HEAD                             Handle: 2002010214410700

  Modified files:
    ossp-pkg/sa             sa.pod

  Log:
    even more docs

  Summary:
    Revision    Changes     Path
    1.23        +52 -0      ossp-pkg/sa/sa.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.pod
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 sa.pod
  --- ossp-pkg/sa/sa.pod	2 Jan 2002 13:44:48 -0000	1.22
  +++ ossp-pkg/sa/sa.pod	2 Jan 2002 14:41:07 -0000	1.23
  @@ -506,11 +506,63 @@
   
   =item sa_rc_t B<sa_bind>(sa_t *I<sa>, sa_addr_t *I<laddr>);
   
  +Bind socket abstraction object to a local protocol address.
  +
  +This assigns the local protocol address I<laddr>. When a socket is
  +created ) it exists in an address family space but has no protocol
  +address assigned. This call requests that I<laddr> be used as the local
  +address. For servers this is the address they later listen on (see
  +sa_listen()) for incoming connections, for clients this is the address
  +used for outgoing connections (see sa_connect()). Internally this
  +directly maps to bind(2).
  +
  +Example: C<sa_bind(sa, laddr);>
  +
   =item sa_rc_t B<sa_connect>(sa_t *I<sa>, sa_addr_t *I<raddr>);
   
  +Initiate an outgoing connection on a socket abstraction object.
  +
  +This performs a connect to the remote address I<raddr>. If the socket
  +is of type C<SA_TYPE_DATAGRAM>, this call specifies the peer with which
  +the socket is to be associated; this address is that to which datagrams
  +are to be sent, and the only address from which datagrams are to be
  +received. If the socket is of type C<SA_TYPE_STREAM>, this call attempts
  +to make a connection to the remote socket. Internally this directly maps
  +to connect(2).
  +
  +Example: C<sa_connect(sa, raddr);>
  +
   =item sa_rc_t B<sa_listen>(sa_t *I<sa>, int I<backlog>);
   
  +Listen for incoming connections on a socket abstraction object.
  +
  +A willingness to accept incoming connections and a queue limit for
  +incoming connections are specified by this call. The I<backlog> argument
  +defines the maximum length the queue of pending connections may grow to.
  +Internally this directly maps to listen(2).
  +
  +Example: C<sa_listen(sa, 128);>
  +
   =item sa_rc_t B<sa_accept>(sa_t *I<sa>, sa_addr_t **I<caddr>, sa_t **I<csa>);
  +
  +Accept incoming connection on a socket abstraction object.
  +
  +This accepts an incoming connection by extracting the first connection
  +request on the queue of pending connections. It creates a new socket
  +abstraction object (returned in I<csa>) and a new socket address
  +abstraction object (returned in I<caddr>) describing the connection. The
  +caller has to destroy these objects laters. If no pending connections
  +are present on the queue, it blocks the caller until a connection is
  +present.
  +
  +Example: 
  +
  + sa_addr_t *clt_saa;
  + sa_t      *clt_sa;
  + ...
  + while (sa_accept(srv_sa, &clt_saa, &clt_sa) == SA_OK) {
  +     ...
  + }
   
   =item sa_rc_t B<sa_getremote>(sa_t *I<sa>, sa_addr_t **I<raddr>);
   

From ossp-cvs-owner@ossp.org  Wed Jan  2 18:04:57 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 096CE764E8; Wed,  2 Jan 2002 18:04:56 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool sh.subst
Message-Id: <20020102170456.096CE764E8@mail.ossp.org>
Date: Wed,  2 Jan 2002 18:04:56 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   02-Jan-2002 18:04:56
  Branch: HEAD                             Handle: 2002010217045600

  Modified files:
    ossp-pkg/shtool         sh.subst

  Log:
    better error for directories

  Summary:
    Revision    Changes     Path
    1.4         +2  -2      ossp-pkg/shtool/sh.subst
  ____________________________________________________________________________

  Index: ossp-pkg/shtool/sh.subst
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 sh.subst
  --- ossp-pkg/shtool/sh.subst	31 Dec 2001 15:06:04 -0000	1.3
  +++ ossp-pkg/shtool/sh.subst	2 Jan 2002 17:04:56 -0000	1.4
  @@ -59,7 +59,7 @@
       done
   elif [ ".$opt_f" != . ]; then
       if [ ! -f $opt_f ]; then
  -        echo "$msgprefix:Error: command file \`$opt_f' not found" 1>&2
  +        echo "$msgprefix:Error: command file \`$opt_f' not found or not a regular file" 1>&2
           exit 1
       fi
       sedcmd="$sedcmd -f '$opt_f'"
  @@ -80,7 +80,7 @@
       for file in $files; do
           test ".$file" = . && continue
           if [ ! -f $file ]; then
  -            echo "$msgprefix:Warning: file \`$file' not found" 1>&2
  +            echo "$msgprefix:Warning: file \`$file' not found or not a regular file" 1>&2
               continue
           fi
   

From ossp-cvs-owner@ossp.org  Wed Jan  2 18:05:55 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 12FED764E8; Wed,  2 Jan 2002 18:05:55 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/act README act.h.in act_ctx.c act_ctx.h act_grid....
Message-Id: <20020102170555.12FED764E8@mail.ossp.org>
Date: Wed,  2 Jan 2002 18:05:55 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   02-Jan-2002 18:05:54
  Branch: HEAD                             Handle: 2002010217055300

  Modified files:
    ossp-pkg/act            README act.h.in act_ctx.c act_ctx.h act_grid.c
                            act_grid.h act_hash.c act_hash.h act_hash_fct.c
                            act_hash_lh.c act_hash_oh.c act_lib.c act_mem.c
                            act_mem.h act_p.h.in act_str.c configure.in

  Log:
    bump copyright year

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-pkg/act/README
    1.5         +1  -1      ossp-pkg/act/act.h.in
    1.6         +1  -1      ossp-pkg/act/act_ctx.c
    1.6         +1  -1      ossp-pkg/act/act_ctx.h
    1.4         +1  -1      ossp-pkg/act/act_grid.c
    1.3         +1  -1      ossp-pkg/act/act_grid.h
    1.7         +1  -1      ossp-pkg/act/act_hash.c
    1.6         +1  -1      ossp-pkg/act/act_hash.h
    1.27        +1  -1      ossp-pkg/act/act_hash_fct.c
    1.9         +1  -1      ossp-pkg/act/act_hash_lh.c
    1.6         +1  -1      ossp-pkg/act/act_hash_oh.c
    1.5         +1  -1      ossp-pkg/act/act_lib.c
    1.10        +1  -1      ossp-pkg/act/act_mem.c
    1.7         +1  -1      ossp-pkg/act/act_mem.h
    1.5         +1  -1      ossp-pkg/act/act_p.h.in
    1.3         +1  -1      ossp-pkg/act/act_str.c
    1.5         +2  -2      ossp-pkg/act/configure.in
  ____________________________________________________________________________

  Index: ossp-pkg/act/README
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 README
  --- ossp-pkg/act/README	21 Mar 2001 15:59:01 -0000	1.4
  +++ ossp-pkg/act/README	2 Jan 2002 17:05:53 -0000	1.5
  @@ -7,7 +7,7 @@
     Act -- Abstract Container Types
   
     A lower level data structure library for abstract container types.
  -  Copyright (c) 1999-2001 Ralf S. Engelschall, All Rights Reserved. 
  +  Copyright (c) 1999-2002 Ralf S. Engelschall, All Rights Reserved. 
   
              "`Reuse an expert's code' is the right advice for most people. 
               But it's a useless advice for the experts writing the code 
  Index: ossp-pkg/act/act.h.in
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 act.h.in
  --- ossp-pkg/act/act.h.in	21 Mar 2001 15:59:01 -0000	1.4
  +++ ossp-pkg/act/act.h.in	2 Jan 2002 17:05:53 -0000	1.5
  @@ -1,6 +1,6 @@
   /* 
   **  Act - Abstract Container Type Library
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of Act, a library for dealing with Abstract 
   **  Container Types which can be found at http://www.ossp.org/pkg/act/.
  Index: ossp-pkg/act/act_ctx.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 act_ctx.c
  --- ossp-pkg/act/act_ctx.c	21 Mar 2001 15:59:01 -0000	1.5
  +++ ossp-pkg/act/act_ctx.c	2 Jan 2002 17:05:53 -0000	1.6
  @@ -1,6 +1,6 @@
   /* 
   **  Act - Abstract Container Type Library
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of Act, a library for dealing with Abstract 
   **  Container Types which can be found at http://www.ossp.org/pkg/act/.
  Index: ossp-pkg/act/act_ctx.h
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 act_ctx.h
  --- ossp-pkg/act/act_ctx.h	21 Mar 2001 15:59:01 -0000	1.5
  +++ ossp-pkg/act/act_ctx.h	2 Jan 2002 17:05:53 -0000	1.6
  @@ -1,6 +1,6 @@
   /* 
   **  Act - Abstract Container Type Library
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of Act, a library for dealing with Abstract 
   **  Container Types which can be found at http://www.ossp.org/pkg/act/.
  Index: ossp-pkg/act/act_grid.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 act_grid.c
  --- ossp-pkg/act/act_grid.c	21 Mar 2001 15:59:01 -0000	1.3
  +++ ossp-pkg/act/act_grid.c	2 Jan 2002 17:05:53 -0000	1.4
  @@ -1,6 +1,6 @@
   /* 
   **  Act - Abstract Container Type Library
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of Act, a library for dealing with Abstract 
   **  Container Types which can be found at http://www.ossp.org/pkg/act/.
  Index: ossp-pkg/act/act_grid.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 act_grid.h
  --- ossp-pkg/act/act_grid.h	21 Mar 2001 15:59:01 -0000	1.2
  +++ ossp-pkg/act/act_grid.h	2 Jan 2002 17:05:53 -0000	1.3
  @@ -1,6 +1,6 @@
   /* 
   **  Act - Abstract Container Type Library
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of Act, a library for dealing with Abstract 
   **  Container Types which can be found at http://www.ossp.org/pkg/act/.
  Index: ossp-pkg/act/act_hash.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 act_hash.c
  --- ossp-pkg/act/act_hash.c	21 Mar 2001 15:59:01 -0000	1.6
  +++ ossp-pkg/act/act_hash.c	2 Jan 2002 17:05:53 -0000	1.7
  @@ -1,6 +1,6 @@
   /* 
   **  Act - Abstract Container Type Library
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of Act, a library for dealing with Abstract 
   **  Container Types which can be found at http://www.ossp.org/pkg/act/.
  Index: ossp-pkg/act/act_hash.h
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 act_hash.h
  --- ossp-pkg/act/act_hash.h	21 Mar 2001 15:59:01 -0000	1.5
  +++ ossp-pkg/act/act_hash.h	2 Jan 2002 17:05:53 -0000	1.6
  @@ -1,6 +1,6 @@
   /* 
   **  Act - Abstract Container Type Library
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of Act, a library for dealing with Abstract 
   **  Container Types which can be found at http://www.ossp.org/pkg/act/.
  Index: ossp-pkg/act/act_hash_fct.c
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 act_hash_fct.c
  --- ossp-pkg/act/act_hash_fct.c	21 Mar 2001 16:08:22 -0000	1.26
  +++ ossp-pkg/act/act_hash_fct.c	2 Jan 2002 17:05:53 -0000	1.27
  @@ -1,6 +1,6 @@
   /* 
   **  Act - Abstract Container Type Library
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of Act, a library for dealing with Abstract 
   **  Container Types which can be found at http://www.ossp.org/pkg/act/.
  Index: ossp-pkg/act/act_hash_lh.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 act_hash_lh.c
  --- ossp-pkg/act/act_hash_lh.c	21 Mar 2001 15:59:01 -0000	1.8
  +++ ossp-pkg/act/act_hash_lh.c	2 Jan 2002 17:05:53 -0000	1.9
  @@ -1,6 +1,6 @@
   /* 
   **  Act - Abstract Container Type Library
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of Act, a library for dealing with Abstract 
   **  Container Types which can be found at http://www.ossp.org/pkg/act/.
  Index: ossp-pkg/act/act_hash_oh.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 act_hash_oh.c
  --- ossp-pkg/act/act_hash_oh.c	21 Mar 2001 15:59:01 -0000	1.5
  +++ ossp-pkg/act/act_hash_oh.c	2 Jan 2002 17:05:53 -0000	1.6
  @@ -1,6 +1,6 @@
   /* 
   **  Act - Abstract Container Type Library
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of Act, a library for dealing with Abstract 
   **  Container Types which can be found at http://www.ossp.org/pkg/act/.
  Index: ossp-pkg/act/act_lib.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 act_lib.c
  --- ossp-pkg/act/act_lib.c	21 Mar 2001 15:59:01 -0000	1.4
  +++ ossp-pkg/act/act_lib.c	2 Jan 2002 17:05:53 -0000	1.5
  @@ -1,6 +1,6 @@
   /* 
   **  Act - Abstract Container Type Library
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of Act, a library for dealing with Abstract 
   **  Container Types which can be found at http://www.ossp.org/pkg/act/.
  Index: ossp-pkg/act/act_mem.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 act_mem.c
  --- ossp-pkg/act/act_mem.c	21 Mar 2001 15:59:01 -0000	1.9
  +++ ossp-pkg/act/act_mem.c	2 Jan 2002 17:05:53 -0000	1.10
  @@ -1,6 +1,6 @@
   /* 
   **  Act - Abstract Container Type Library
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of Act, a library for dealing with Abstract 
   **  Container Types which can be found at http://www.ossp.org/pkg/act/.
  Index: ossp-pkg/act/act_mem.h
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 act_mem.h
  --- ossp-pkg/act/act_mem.h	21 Mar 2001 15:59:01 -0000	1.6
  +++ ossp-pkg/act/act_mem.h	2 Jan 2002 17:05:53 -0000	1.7
  @@ -1,6 +1,6 @@
   /* 
   **  Act - Abstract Container Type Library
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of Act, a library for dealing with Abstract 
   **  Container Types which can be found at http://www.ossp.org/pkg/act/.
  Index: ossp-pkg/act/act_p.h.in
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 act_p.h.in
  --- ossp-pkg/act/act_p.h.in	21 Mar 2001 15:59:02 -0000	1.4
  +++ ossp-pkg/act/act_p.h.in	2 Jan 2002 17:05:53 -0000	1.5
  @@ -1,6 +1,6 @@
   /* 
   **  Act - Abstract Container Type Library
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of Act, a library for dealing with Abstract 
   **  Container Types which can be found at http://www.ossp.org/pkg/act/.
  Index: ossp-pkg/act/act_str.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 act_str.c
  --- ossp-pkg/act/act_str.c	21 Mar 2001 15:59:02 -0000	1.2
  +++ ossp-pkg/act/act_str.c	2 Jan 2002 17:05:53 -0000	1.3
  @@ -1,6 +1,6 @@
   /* 
   **  Act - Abstract Container Type Library
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of Act, a library for dealing with Abstract 
   **  Container Types which can be found at http://www.ossp.org/pkg/act/.
  Index: ossp-pkg/act/configure.in
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 configure.in
  --- ossp-pkg/act/configure.in	21 Mar 2001 15:59:02 -0000	1.4
  +++ ossp-pkg/act/configure.in	2 Jan 2002 17:05:53 -0000	1.5
  @@ -3,13 +3,13 @@
   dnl ##
   
   AC_PREREQ(2.12)dnl
  -AC_REVISION($Revision: 1.4 $)
  +AC_REVISION($Revision: 1.5 $)
   
   AC_INIT(README)
   AC_HEADLINE(dnl
   ACT, Abstract Container Types, dnl
   ACT_VERSION, act_vers.c, dnl
  -[Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>])
  +[Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>])
   AC_PREFIX_DEFAULT(/usr/local)
   AC_CONFIG_HEADER(act_cfg.h)
   

From ossp-cvs-owner@ossp.org  Wed Jan  2 18:07:41 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AC71B764E8; Wed,  2 Jan 2002 18:07:40 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 LICENSE Makefile.in README aclocal.m4 configur...
Message-Id: <20020102170740.AC71B764E8@mail.ossp.org>
Date: Wed,  2 Jan 2002 18:07:40 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   02-Jan-2002 18:07:40
  Branch: HEAD                             Handle: 2002010217073800

  Modified files:
    ossp-pkg/l2             LICENSE Makefile.in README aclocal.m4 configure.ac
                            devtool devtool.func l2-config.in l2-config.pod
                            l2.h.in l2.m4 l2.pod l2_ch_buffer.c l2_ch_fd.c
                            l2_ch_file.c l2_ch_filter.c l2_ch_irc.c
                            l2_ch_noop.c l2_ch_null.c l2_ch_pipe.c
                            l2_ch_prefix.c l2_ch_smtp.c l2_ch_socket.c
                            l2_ch_syslog.c l2_channel.c l2_env.c l2_p.h
                            l2_spec.c l2_spec_parse.y l2_spec_scan.l l2_test.c
                            l2_ut_fmtcb.c l2_ut_format.c l2_ut_format.h
                            l2_ut_level.c l2_ut_param.c l2tool.c l2tool.pod

  Log:
    bump copyright year

  Summary:
    Revision    Changes     Path
    1.3         +2  -2      ossp-pkg/l2/LICENSE
    1.41        +2  -2      ossp-pkg/l2/Makefile.in
    1.6         +2  -2      ossp-pkg/l2/README
    1.10        +2  -2      ossp-pkg/l2/aclocal.m4
    1.17        +4  -4      ossp-pkg/l2/configure.ac
    1.2         +1  -1      ossp-pkg/l2/devtool
    1.2         +1  -1      ossp-pkg/l2/devtool.func
    1.5         +2  -2      ossp-pkg/l2/l2-config.in
    1.5         +2  -2      ossp-pkg/l2/l2-config.pod
    1.27        +2  -2      ossp-pkg/l2/l2.h.in
    1.4         +2  -2      ossp-pkg/l2/l2.m4
    1.12        +2  -2      ossp-pkg/l2/l2.pod
    1.36        +2  -2      ossp-pkg/l2/l2_ch_buffer.c
    1.13        +2  -2      ossp-pkg/l2/l2_ch_fd.c
    1.21        +2  -2      ossp-pkg/l2/l2_ch_file.c
    1.16        +2  -2      ossp-pkg/l2/l2_ch_filter.c
    1.5         +2  -2      ossp-pkg/l2/l2_ch_irc.c
    1.3         +2  -2      ossp-pkg/l2/l2_ch_noop.c
    1.11        +2  -2      ossp-pkg/l2/l2_ch_null.c
    1.29        +2  -2      ossp-pkg/l2/l2_ch_pipe.c
    1.19        +2  -2      ossp-pkg/l2/l2_ch_prefix.c
    1.9         +2  -2      ossp-pkg/l2/l2_ch_smtp.c
    1.35        +2  -2      ossp-pkg/l2/l2_ch_socket.c
    1.29        +2  -2      ossp-pkg/l2/l2_ch_syslog.c
    1.27        +2  -2      ossp-pkg/l2/l2_channel.c
    1.7         +2  -2      ossp-pkg/l2/l2_env.c
    1.32        +1  -1      ossp-pkg/l2/l2_p.h
    1.8         +2  -2      ossp-pkg/l2/l2_spec.c
    1.6         +2  -2      ossp-pkg/l2/l2_spec_parse.y
    1.7         +2  -2      ossp-pkg/l2/l2_spec_scan.l
    1.49        +2  -2      ossp-pkg/l2/l2_test.c
    1.4         +2  -2      ossp-pkg/l2/l2_ut_fmtcb.c
    1.5         +3  -3      ossp-pkg/l2/l2_ut_format.c
    1.2         +1  -1      ossp-pkg/l2/l2_ut_format.h
    1.7         +2  -2      ossp-pkg/l2/l2_ut_level.c
    1.7         +2  -2      ossp-pkg/l2/l2_ut_param.c
    1.2         +2  -2      ossp-pkg/l2/l2tool.c
    1.2         +2  -2      ossp-pkg/l2/l2tool.pod
  ____________________________________________________________________________

  Index: ossp-pkg/l2/LICENSE
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 LICENSE
  --- ossp-pkg/l2/LICENSE	15 Aug 2001 10:36:03 -0000	1.2
  +++ ossp-pkg/l2/LICENSE	2 Jan 2002 17:07:38 -0000	1.3
  @@ -1,7 +1,7 @@
   
     L2 - OSSP Logging Library
  -  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   
     This file is part of OSSP L2, a flexible logging library which
     can be found at http://www.ossp.org/pkg/l2/.
  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.40 -r1.41 Makefile.in
  --- ossp-pkg/l2/Makefile.in	22 Dec 2001 22:04:55 -0000	1.40
  +++ ossp-pkg/l2/Makefile.in	2 Jan 2002 17:07:38 -0000	1.41
  @@ -1,7 +1,7 @@
   ##
   ##  L2 - OSSP Logging Library
  -##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
   ##  This file is part of OSSP L2, a flexible logging library which
   ##  can be found at http://www.ossp.org/pkg/l2/.
  Index: ossp-pkg/l2/README
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 README
  --- ossp-pkg/l2/README	9 Nov 2001 12:45:37 -0000	1.5
  +++ ossp-pkg/l2/README	2 Jan 2002 17:07:38 -0000	1.6
  @@ -32,8 +32,8 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   
     This file is part of OSSP L2, a flexible logging library which
     can be found at http://www.ossp.org/pkg/l2/.
  Index: ossp-pkg/l2/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 aclocal.m4
  --- ossp-pkg/l2/aclocal.m4	22 Dec 2001 21:51:56 -0000	1.9
  +++ ossp-pkg/l2/aclocal.m4	2 Jan 2002 17:07:38 -0000	1.10
  @@ -1,7 +1,7 @@
   dnl ##
   dnl ##  L2 - OSSP Logging Library
  -dnl ##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -dnl ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +dnl ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   dnl ##
   dnl ##  This file is part of OSSP L2, a flexible logging library which
   dnl ##  can be found at http://www.ossp.org/pkg/l2/.
  Index: ossp-pkg/l2/configure.ac
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 configure.ac
  --- ossp-pkg/l2/configure.ac	22 Dec 2001 21:51:56 -0000	1.16
  +++ ossp-pkg/l2/configure.ac	2 Jan 2002 17:07:38 -0000	1.17
  @@ -1,7 +1,7 @@
   dnl ##
   dnl ##  L2 - OSSP Logging Library
  -dnl ##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -dnl ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +dnl ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   dnl ##
   dnl ##  This file is part of OSSP L2, a flexible logging library which
   dnl ##  can be found at http://www.ossp.org/pkg/l2/.
  @@ -34,8 +34,8 @@
   AC_HEADLINE(dnl
   L2, Logging Library, dnl
   L2_VERSION, l2_version.c, dnl
  -[Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)])
  +[Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)])
   AC_CONFIG_HEADER(l2_config.h)
   AC_PREFIX_DEFAULT(/usr/local)
   AC_PLATFORM(PLATFORM)
  Index: ossp-pkg/l2/devtool
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 devtool
  --- ossp-pkg/l2/devtool	8 Nov 2001 09:53:33 -0000	1.1
  +++ ossp-pkg/l2/devtool	2 Jan 2002 17:07:38 -0000	1.2
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  devtool -- Development Tool
  -##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
   ##
   
   if [ $# -eq 0 ]; then
  Index: ossp-pkg/l2/devtool.func
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.func
  --- ossp-pkg/l2/devtool.func	8 Nov 2001 09:53:34 -0000	1.1
  +++ ossp-pkg/l2/devtool.func	2 Jan 2002 17:07:38 -0000	1.2
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
   ##
   
   devtool_require () {
  Index: ossp-pkg/l2/l2-config.in
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 l2-config.in
  --- ossp-pkg/l2/l2-config.in	22 Dec 2001 21:51:56 -0000	1.4
  +++ ossp-pkg/l2/l2-config.in	2 Jan 2002 17:07:38 -0000	1.5
  @@ -1,8 +1,8 @@
   #!/bin/sh
   ##
   ##  L2 - OSSP Logging Library
  -##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
   ##  This file is part of OSSP L2, a flexible logging library which
   ##  can be found at http://www.ossp.org/pkg/l2/.
  Index: ossp-pkg/l2/l2-config.pod
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 l2-config.pod
  --- ossp-pkg/l2/l2-config.pod	22 Dec 2001 21:51:56 -0000	1.4
  +++ ossp-pkg/l2/l2-config.pod	2 Jan 2002 17:07:38 -0000	1.5
  @@ -1,7 +1,7 @@
   ##
   ##  L2 - OSSP Logging Library
  -##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
   ##  This file is part of OSSP L2, a flexible logging library which
   ##  can be found at http://www.ossp.org/pkg/l2/.
  Index: ossp-pkg/l2/l2.h.in
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 l2.h.in
  --- ossp-pkg/l2/l2.h.in	22 Dec 2001 22:18:34 -0000	1.26
  +++ ossp-pkg/l2/l2.h.in	2 Jan 2002 17:07:38 -0000	1.27
  @@ -1,7 +1,7 @@
   /*
   **  L2 - OSSP Logging Library
  -**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/l2/.
  Index: ossp-pkg/l2/l2.m4
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 l2.m4
  --- ossp-pkg/l2/l2.m4	15 Aug 2001 10:36:03 -0000	1.3
  +++ ossp-pkg/l2/l2.m4	2 Jan 2002 17:07:38 -0000	1.4
  @@ -1,7 +1,7 @@
   dnl ##
   dnl ##  L2 - OSSP Logging Library
  -dnl ##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -dnl ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +dnl ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   dnl ##
   dnl ##  This file is part of OSSP L2, a flexible logging library which
   dnl ##  can be found at http://www.ossp.org/pkg/l2/.
  Index: ossp-pkg/l2/l2.pod
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 l2.pod
  --- ossp-pkg/l2/l2.pod	8 Dec 2001 20:58:14 -0000	1.11
  +++ ossp-pkg/l2/l2.pod	2 Jan 2002 17:07:38 -0000	1.12
  @@ -1,7 +1,7 @@
   ##
   ##  L2 - OSSP Logging Library
  -##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
   ##  This file is part of OSSP L2, a flexible logging library which
   ##  can be found at http://www.ossp.org/pkg/l2/.
  Index: ossp-pkg/l2/l2_ch_buffer.c
  ============================================================
  $ cvs diff -u -r1.35 -r1.36 l2_ch_buffer.c
  --- ossp-pkg/l2/l2_ch_buffer.c	16 Nov 2001 20:07:54 -0000	1.35
  +++ ossp-pkg/l2/l2_ch_buffer.c	2 Jan 2002 17:07:38 -0000	1.36
  @@ -1,7 +1,7 @@
   /*
   **  L2 - OSSP Logging Library
  -**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/l2/.
  Index: ossp-pkg/l2/l2_ch_fd.c
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 l2_ch_fd.c
  --- ossp-pkg/l2/l2_ch_fd.c	7 Nov 2001 13:05:20 -0000	1.12
  +++ ossp-pkg/l2/l2_ch_fd.c	2 Jan 2002 17:07:38 -0000	1.13
  @@ -1,7 +1,7 @@
   /*
   **  L2 - OSSP Logging Library
  -**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/l2/.
  Index: ossp-pkg/l2/l2_ch_file.c
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 l2_ch_file.c
  --- ossp-pkg/l2/l2_ch_file.c	15 Nov 2001 11:03:15 -0000	1.20
  +++ ossp-pkg/l2/l2_ch_file.c	2 Jan 2002 17:07:38 -0000	1.21
  @@ -1,7 +1,7 @@
   /*
   **  L2 - OSSP Logging Library
  -**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/l2/.
  Index: ossp-pkg/l2/l2_ch_filter.c
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 l2_ch_filter.c
  --- ossp-pkg/l2/l2_ch_filter.c	22 Dec 2001 22:24:40 -0000	1.15
  +++ ossp-pkg/l2/l2_ch_filter.c	2 Jan 2002 17:07:38 -0000	1.16
  @@ -1,7 +1,7 @@
   /*
   **  L2 - OSSP Logging Library
  -**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/l2/.
  Index: ossp-pkg/l2/l2_ch_irc.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 l2_ch_irc.c
  --- ossp-pkg/l2/l2_ch_irc.c	7 Nov 2001 13:05:20 -0000	1.4
  +++ ossp-pkg/l2/l2_ch_irc.c	2 Jan 2002 17:07:38 -0000	1.5
  @@ -1,7 +1,7 @@
   /*
   **  L2 - OSSP Logging Library
  -**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/l2/.
  Index: ossp-pkg/l2/l2_ch_noop.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2_ch_noop.c
  --- ossp-pkg/l2/l2_ch_noop.c	7 Nov 2001 11:37:18 -0000	1.2
  +++ ossp-pkg/l2/l2_ch_noop.c	2 Jan 2002 17:07:38 -0000	1.3
  @@ -1,7 +1,7 @@
   /*
   **  L2 - OSSP Logging Library
  -**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/l2/.
  Index: ossp-pkg/l2/l2_ch_null.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 l2_ch_null.c
  --- ossp-pkg/l2/l2_ch_null.c	7 Nov 2001 11:37:18 -0000	1.10
  +++ ossp-pkg/l2/l2_ch_null.c	2 Jan 2002 17:07:38 -0000	1.11
  @@ -1,7 +1,7 @@
   /*
   **  L2 - OSSP Logging Library
  -**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/l2/.
  Index: ossp-pkg/l2/l2_ch_pipe.c
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 l2_ch_pipe.c
  --- ossp-pkg/l2/l2_ch_pipe.c	7 Nov 2001 13:05:20 -0000	1.28
  +++ ossp-pkg/l2/l2_ch_pipe.c	2 Jan 2002 17:07:38 -0000	1.29
  @@ -1,7 +1,7 @@
   /*
   **  L2 - OSSP Logging Library
  -**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/l2/.
  Index: ossp-pkg/l2/l2_ch_prefix.c
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 l2_ch_prefix.c
  --- ossp-pkg/l2/l2_ch_prefix.c	7 Nov 2001 13:05:20 -0000	1.18
  +++ ossp-pkg/l2/l2_ch_prefix.c	2 Jan 2002 17:07:38 -0000	1.19
  @@ -1,7 +1,7 @@
   /*
   **  L2 - OSSP Logging Library
  -**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/l2/.
  Index: ossp-pkg/l2/l2_ch_smtp.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 l2_ch_smtp.c
  --- ossp-pkg/l2/l2_ch_smtp.c	7 Nov 2001 13:05:20 -0000	1.8
  +++ ossp-pkg/l2/l2_ch_smtp.c	2 Jan 2002 17:07:38 -0000	1.9
  @@ -1,7 +1,7 @@
   /*
   **  L2 - OSSP Logging Library
  -**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/l2/.
  Index: ossp-pkg/l2/l2_ch_socket.c
  ============================================================
  $ cvs diff -u -r1.34 -r1.35 l2_ch_socket.c
  --- ossp-pkg/l2/l2_ch_socket.c	7 Nov 2001 13:05:20 -0000	1.34
  +++ ossp-pkg/l2/l2_ch_socket.c	2 Jan 2002 17:07:38 -0000	1.35
  @@ -1,7 +1,7 @@
   /*
   **  L2 - OSSP Logging Library
  -**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/l2/.
  Index: ossp-pkg/l2/l2_ch_syslog.c
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 l2_ch_syslog.c
  --- ossp-pkg/l2/l2_ch_syslog.c	8 Nov 2001 09:02:35 -0000	1.28
  +++ ossp-pkg/l2/l2_ch_syslog.c	2 Jan 2002 17:07:38 -0000	1.29
  @@ -1,7 +1,7 @@
   /*
   **  L2 - OSSP Logging Library
  -**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/l2/.
  Index: ossp-pkg/l2/l2_channel.c
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 l2_channel.c
  --- ossp-pkg/l2/l2_channel.c	7 Nov 2001 16:04:22 -0000	1.26
  +++ ossp-pkg/l2/l2_channel.c	2 Jan 2002 17:07:38 -0000	1.27
  @@ -1,7 +1,7 @@
   /*
   **  L2 - OSSP Logging Library
  -**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/l2/.
  Index: ossp-pkg/l2/l2_env.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 l2_env.c
  --- ossp-pkg/l2/l2_env.c	22 Dec 2001 22:18:34 -0000	1.6
  +++ ossp-pkg/l2/l2_env.c	2 Jan 2002 17:07:38 -0000	1.7
  @@ -1,7 +1,7 @@
   /*
   **  L2 - OSSP Logging Library
  -**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/l2/.
  Index: ossp-pkg/l2/l2_p.h
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 l2_p.h
  --- ossp-pkg/l2/l2_p.h	16 Nov 2001 19:40:55 -0000	1.31
  +++ ossp-pkg/l2/l2_p.h	2 Jan 2002 17:07:38 -0000	1.32
  @@ -1,6 +1,6 @@
   /*
   **  L2 - OSSP Logging Library
  -**  Copyright (c) 2001 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland GmbH
   **
   **  This file is part of OSSP L2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/l2/.
  Index: ossp-pkg/l2/l2_spec.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 l2_spec.c
  --- ossp-pkg/l2/l2_spec.c	22 Dec 2001 22:18:34 -0000	1.7
  +++ ossp-pkg/l2/l2_spec.c	2 Jan 2002 17:07:38 -0000	1.8
  @@ -1,7 +1,7 @@
   /*
   **  L2 - OSSP Logging Library
  -**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/l2/.
  Index: ossp-pkg/l2/l2_spec_parse.y
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 l2_spec_parse.y
  --- ossp-pkg/l2/l2_spec_parse.y	14 Dec 2001 12:42:07 -0000	1.5
  +++ ossp-pkg/l2/l2_spec_parse.y	2 Jan 2002 17:07:38 -0000	1.6
  @@ -1,8 +1,8 @@
   %{
   /*
   **  L2 - OSSP Logging Library
  -**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/l2/.
  Index: ossp-pkg/l2/l2_spec_scan.l
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 l2_spec_scan.l
  --- ossp-pkg/l2/l2_spec_scan.l	14 Dec 2001 12:42:07 -0000	1.6
  +++ ossp-pkg/l2/l2_spec_scan.l	2 Jan 2002 17:07:38 -0000	1.7
  @@ -1,8 +1,8 @@
   %{
   /*
   **  L2 - OSSP Logging Library
  -**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/l2/.
  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.48 -r1.49 l2_test.c
  --- ossp-pkg/l2/l2_test.c	30 Nov 2001 09:44:47 -0000	1.48
  +++ ossp-pkg/l2/l2_test.c	2 Jan 2002 17:07:38 -0000	1.49
  @@ -1,7 +1,7 @@
   /*
   **  L2 - OSSP Logging Library
  -**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/l2/.
  Index: ossp-pkg/l2/l2_ut_fmtcb.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 l2_ut_fmtcb.c
  --- ossp-pkg/l2/l2_ut_fmtcb.c	7 Sep 2001 14:49:08 -0000	1.3
  +++ ossp-pkg/l2/l2_ut_fmtcb.c	2 Jan 2002 17:07:38 -0000	1.4
  @@ -1,7 +1,7 @@
   /*
   **  L2 - OSSP Logging Library
  -**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/l2/.
  Index: ossp-pkg/l2/l2_ut_format.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 l2_ut_format.c
  --- ossp-pkg/l2/l2_ut_format.c	4 Nov 2001 13:45:03 -0000	1.4
  +++ ossp-pkg/l2/l2_ut_format.c	2 Jan 2002 17:07:38 -0000	1.5
  @@ -1,7 +1,7 @@
   /*
   **  L2 - OSSP Logging Library
  -**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/l2/.
  @@ -45,7 +45,7 @@
   /*
    * The Apache Software License, Version 1.1
    *
  - * Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
  + * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
    * reserved.
    *
    * Redistribution and use in source and binary forms, with or without
  Index: ossp-pkg/l2/l2_ut_format.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 l2_ut_format.h
  --- ossp-pkg/l2/l2_ut_format.h	4 Nov 2001 13:45:03 -0000	1.1
  +++ ossp-pkg/l2/l2_ut_format.h	2 Jan 2002 17:07:38 -0000	1.2
  @@ -1,6 +1,6 @@
   /*
   **  L2 - OSSP Logging Library
  -**  Copyright (c) 2001 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland GmbH
   **
   **  This file is part of OSSP L2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/l2/.
  Index: ossp-pkg/l2/l2_ut_level.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 l2_ut_level.c
  --- ossp-pkg/l2/l2_ut_level.c	31 Oct 2001 16:47:05 -0000	1.6
  +++ ossp-pkg/l2/l2_ut_level.c	2 Jan 2002 17:07:38 -0000	1.7
  @@ -1,7 +1,7 @@
   /*
   **  L2 - OSSP Logging Library
  -**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/l2/.
  Index: ossp-pkg/l2/l2_ut_param.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 l2_ut_param.c
  --- ossp-pkg/l2/l2_ut_param.c	7 Nov 2001 13:05:20 -0000	1.6
  +++ ossp-pkg/l2/l2_ut_param.c	2 Jan 2002 17:07:38 -0000	1.7
  @@ -1,7 +1,7 @@
   /*
   **  L2 - OSSP Logging Library
  -**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/l2/.
  Index: ossp-pkg/l2/l2tool.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 l2tool.c
  --- ossp-pkg/l2/l2tool.c	10 Nov 2001 14:01:47 -0000	1.1
  +++ ossp-pkg/l2/l2tool.c	2 Jan 2002 17:07:38 -0000	1.2
  @@ -1,7 +1,7 @@
   /*
   **  L2 - OSSP Logging Library
  -**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/l2/.
  Index: ossp-pkg/l2/l2tool.pod
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 l2tool.pod
  --- ossp-pkg/l2/l2tool.pod	10 Nov 2001 14:01:47 -0000	1.1
  +++ ossp-pkg/l2/l2tool.pod	2 Jan 2002 17:07:38 -0000	1.2
  @@ -1,7 +1,7 @@
   ##
   ##  L2 - OSSP Logging Library
  -##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
   ##  This file is part of OSSP L2, a flexible logging library which
   ##  can be found at http://www.ossp.org/pkg/l2/.

From ossp-cvs-owner@ossp.org  Wed Jan  2 18:09:15 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 60577764E8; Wed,  2 Jan 2002 18:09:15 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str LICENSE Makefile.in README configure.ac devto...
Message-Id: <20020102170915.60577764E8@mail.ossp.org>
Date: Wed,  2 Jan 2002 18:09:15 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   02-Jan-2002 18:09:15
  Branch: HEAD                             Handle: 2002010217091301

  Modified files:
    ossp-pkg/str            LICENSE Makefile.in README configure.ac devtool
                            devtool.func str-config.in str-config.pod str.h.in
                            str.pod str_base64.c str_basic.c str_format.c
                            str_hash.c str_memory.c str_p.h str_parse.c
                            str_search.c str_test.c str_token.c

  Log:
    bump copyright year

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/str/LICENSE
    1.40        +1  -1      ossp-pkg/str/Makefile.in
    1.17        +1  -1      ossp-pkg/str/README
    1.8         +2  -2      ossp-pkg/str/configure.ac
    1.2         +1  -1      ossp-pkg/str/devtool
    1.2         +1  -1      ossp-pkg/str/devtool.func
    1.5         +1  -1      ossp-pkg/str/str-config.in
    1.4         +1  -1      ossp-pkg/str/str-config.pod
    1.3         +1  -1      ossp-pkg/str/str.h.in
    1.31        +1  -1      ossp-pkg/str/str.pod
    1.5         +1  -1      ossp-pkg/str/str_base64.c
    1.9         +1  -1      ossp-pkg/str/str_basic.c
    1.26        +1  -1      ossp-pkg/str/str_format.c
    1.5         +1  -1      ossp-pkg/str/str_hash.c
    1.6         +1  -1      ossp-pkg/str/str_memory.c
    1.18        +1  -1      ossp-pkg/str/str_p.h
    1.18        +1  -1      ossp-pkg/str/str_parse.c
    1.17        +1  -1      ossp-pkg/str/str_search.c
    1.23        +1  -1      ossp-pkg/str/str_test.c
    1.7         +1  -1      ossp-pkg/str/str_token.c
  ____________________________________________________________________________

  Index: ossp-pkg/str/LICENSE
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 LICENSE
  --- ossp-pkg/str/LICENSE	16 Aug 2001 13:21:22 -0000	1.2
  +++ ossp-pkg/str/LICENSE	2 Jan 2002 17:09:13 -0000	1.3
  @@ -1,6 +1,6 @@
   
     Str - String Library
  -  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/str/Makefile.in
  ============================================================
  $ cvs diff -u -r1.39 -r1.40 Makefile.in
  --- ossp-pkg/str/Makefile.in	27 Dec 2001 12:24:20 -0000	1.39
  +++ ossp-pkg/str/Makefile.in	2 Jan 2002 17:09:13 -0000	1.40
  @@ -1,6 +1,6 @@
   ##
   ##  Str - String Library
  -##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of Str, a string handling and manipulation 
   ##  library which can be found at http://www.engelschall.com/sw/str/.
  Index: ossp-pkg/str/README
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 README
  --- ossp-pkg/str/README	13 Sep 2001 14:12:58 -0000	1.16
  +++ ossp-pkg/str/README	2 Jan 2002 17:09:13 -0000	1.17
  @@ -17,7 +17,7 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   
     This product includes software developed by the University of
     California, Berkeley and its contributors. This product includes
  Index: ossp-pkg/str/configure.ac
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 configure.ac
  --- ossp-pkg/str/configure.ac	13 Sep 2001 14:12:30 -0000	1.7
  +++ ossp-pkg/str/configure.ac	2 Jan 2002 17:09:13 -0000	1.8
  @@ -9,8 +9,8 @@
   AC_HEADLINE(dnl
   OSSP Str, String Library, dnl
   STR_VERSION, str_version.c, dnl
  -[Copyright (c) 1999-2001 The OSSP Project <http://www.ossp.org>
  -Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>])
  +[Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org>
  +Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>])
   AC_CONFIG_HEADER(str_config.h)
   AC_PREFIX_DEFAULT(/usr/local)
   AC_PLATFORM(PLATFORM)
  Index: ossp-pkg/str/devtool
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 devtool
  --- ossp-pkg/str/devtool	27 Dec 2001 12:15:19 -0000	1.1
  +++ ossp-pkg/str/devtool	2 Jan 2002 17:09:13 -0000	1.2
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  devtool -- Development Tool
  -##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
   ##
   
   if [ $# -eq 0 ]; then
  Index: ossp-pkg/str/devtool.func
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.func
  --- ossp-pkg/str/devtool.func	27 Dec 2001 12:15:19 -0000	1.1
  +++ ossp-pkg/str/devtool.func	2 Jan 2002 17:09:13 -0000	1.2
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
   ##
   
   devtool_require () {
  Index: ossp-pkg/str/str-config.in
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 str-config.in
  --- ossp-pkg/str/str-config.in	30 Aug 2001 17:37:02 -0000	1.4
  +++ ossp-pkg/str/str-config.in	2 Jan 2002 17:09:13 -0000	1.5
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  Str - String Library
  -##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of Str, a string handling and manipulation 
   ##  library which can be found at http://www.engelschall.com/sw/str/.
  Index: ossp-pkg/str/str-config.pod
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 str-config.pod
  --- ossp-pkg/str/str-config.pod	16 Aug 2001 13:21:22 -0000	1.3
  +++ ossp-pkg/str/str-config.pod	2 Jan 2002 17:09:13 -0000	1.4
  @@ -1,6 +1,6 @@
   ##
   ##  Str - String Library
  -##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of Str, a string handling and manipulation 
   ##  library which can be found at http://www.engelschall.com/sw/str/.
  Index: ossp-pkg/str/str.h.in
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 str.h.in
  --- ossp-pkg/str/str.h.in	10 Sep 2001 10:14:38 -0000	1.2
  +++ ossp-pkg/str/str.h.in	2 Jan 2002 17:09:13 -0000	1.3
  @@ -1,6 +1,6 @@
   /*
   **  Str - String Library
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of Str, a string handling and manipulation 
   **  library which can be found at http://www.engelschall.com/sw/str/.
  Index: ossp-pkg/str/str.pod
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 str.pod
  --- ossp-pkg/str/str.pod	27 Dec 2001 12:25:37 -0000	1.30
  +++ ossp-pkg/str/str.pod	2 Jan 2002 17:09:13 -0000	1.31
  @@ -1,6 +1,6 @@
   ##
   ##  Str - String Library
  -##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of Str, a string handling and manipulation 
   ##  library which can be found at http://www.engelschall.com/sw/str/.
  Index: ossp-pkg/str/str_base64.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 str_base64.c
  --- ossp-pkg/str/str_base64.c	16 Aug 2001 13:21:22 -0000	1.4
  +++ ossp-pkg/str/str_base64.c	2 Jan 2002 17:09:13 -0000	1.5
  @@ -1,6 +1,6 @@
   /*
   **  Str - String Library
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of Str, a string handling and manipulation 
   **  library which can be found at http://www.engelschall.com/sw/str/.
  Index: ossp-pkg/str/str_basic.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 str_basic.c
  --- ossp-pkg/str/str_basic.c	16 Aug 2001 13:21:22 -0000	1.8
  +++ ossp-pkg/str/str_basic.c	2 Jan 2002 17:09:13 -0000	1.9
  @@ -1,6 +1,6 @@
   /*
   **  Str - String Library
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of Str, a string handling and manipulation 
   **  library which can be found at http://www.engelschall.com/sw/str/.
  Index: ossp-pkg/str/str_format.c
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 str_format.c
  --- ossp-pkg/str/str_format.c	16 Aug 2001 13:21:22 -0000	1.25
  +++ ossp-pkg/str/str_format.c	2 Jan 2002 17:09:13 -0000	1.26
  @@ -1,6 +1,6 @@
   /*
   **  Str - String Library
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of Str, a string handling and manipulation 
   **  library which can be found at http://www.engelschall.com/sw/str/.
  Index: ossp-pkg/str/str_hash.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 str_hash.c
  --- ossp-pkg/str/str_hash.c	16 Aug 2001 13:21:22 -0000	1.4
  +++ ossp-pkg/str/str_hash.c	2 Jan 2002 17:09:13 -0000	1.5
  @@ -1,6 +1,6 @@
   /*
   **  Str - String Library
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of Str, a string handling and manipulation 
   **  library which can be found at http://www.engelschall.com/sw/str/.
  Index: ossp-pkg/str/str_memory.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 str_memory.c
  --- ossp-pkg/str/str_memory.c	16 Aug 2001 13:21:22 -0000	1.5
  +++ ossp-pkg/str/str_memory.c	2 Jan 2002 17:09:13 -0000	1.6
  @@ -1,6 +1,6 @@
   /*
   **  Str - String Library
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of Str, a string handling and manipulation 
   **  library which can be found at http://www.engelschall.com/sw/str/.
  Index: ossp-pkg/str/str_p.h
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 str_p.h
  --- ossp-pkg/str/str_p.h	11 Sep 2001 10:40:56 -0000	1.17
  +++ ossp-pkg/str/str_p.h	2 Jan 2002 17:09:13 -0000	1.18
  @@ -1,6 +1,6 @@
   /*
   **  Str - String Library
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of Str, a string handling and manipulation 
   **  library which can be found at http://www.engelschall.com/sw/str/.
  Index: ossp-pkg/str/str_parse.c
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 str_parse.c
  --- ossp-pkg/str/str_parse.c	11 Sep 2001 13:20:27 -0000	1.17
  +++ ossp-pkg/str/str_parse.c	2 Jan 2002 17:09:13 -0000	1.18
  @@ -1,6 +1,6 @@
   /*
   **  Str - String Library
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of Str, a string handling and manipulation 
   **  library which can be found at http://www.engelschall.com/sw/str/.
  Index: ossp-pkg/str/str_search.c
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 str_search.c
  --- ossp-pkg/str/str_search.c	16 Aug 2001 13:21:23 -0000	1.16
  +++ ossp-pkg/str/str_search.c	2 Jan 2002 17:09:13 -0000	1.17
  @@ -1,6 +1,6 @@
   /*
   **  Str - String Library
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of Str, a string handling and manipulation 
   **  library which can be found at http://www.engelschall.com/sw/str/.
  Index: ossp-pkg/str/str_test.c
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 str_test.c
  --- ossp-pkg/str/str_test.c	27 Dec 2001 12:11:01 -0000	1.22
  +++ ossp-pkg/str/str_test.c	2 Jan 2002 17:09:13 -0000	1.23
  @@ -1,6 +1,6 @@
   /*
   **  Str - String Library
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of Str, a string handling and manipulation 
   **  library which can be found at http://www.engelschall.com/sw/str/.
  Index: ossp-pkg/str/str_token.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 str_token.c
  --- ossp-pkg/str/str_token.c	16 Aug 2001 13:21:23 -0000	1.6
  +++ ossp-pkg/str/str_token.c	2 Jan 2002 17:09:14 -0000	1.7
  @@ -1,6 +1,6 @@
   /*
   **  Str - String Library
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of Str, a string handling and manipulation 
   **  library which can be found at http://www.engelschall.com/sw/str/.

From ossp-cvs-owner@ossp.org  Wed Jan  2 18:12:19 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5520E764E8; Wed,  2 Jan 2002 18:12:19 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var Makefile.in configure.ac devtool devtool.func...
Message-Id: <20020102171219.5520E764E8@mail.ossp.org>
Date: Wed,  2 Jan 2002 18:12:19 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   02-Jan-2002 18:12:19
  Branch: HEAD                             Handle: 2002010217121800

  Modified files:
    ossp-pkg/var            Makefile.in configure.ac devtool devtool.func
                            var-config.in var-config.pod var.c var.h var.pod
                            var_test.c

  Log:
    bump copyright year

  Summary:
    Revision    Changes     Path
    1.2         +2  -2      ossp-pkg/var/Makefile.in
    1.3         +2  -2      ossp-pkg/var/configure.ac
    1.2         +1  -1      ossp-pkg/var/devtool
    1.2         +1  -1      ossp-pkg/var/devtool.func
    1.2         +26 -9      ossp-pkg/var/var-config.in
    1.2         +2  -2      ossp-pkg/var/var-config.pod
    1.58        +2  -2      ossp-pkg/var/var.c
    1.21        +2  -2      ossp-pkg/var/var.h
    1.18        +2  -2      ossp-pkg/var/var.pod
    1.30        +2  -2      ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/Makefile.in
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 Makefile.in
  --- ossp-pkg/var/Makefile.in	20 Nov 2001 20:02:21 -0000	1.1
  +++ ossp-pkg/var/Makefile.in	2 Jan 2002 17:12:18 -0000	1.2
  @@ -1,7 +1,7 @@
   ##
   ##  VAR - OSSP variable expression library.
  -##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
   ##  This file is part of OSSP VAR, an extensible data serialization
   ##  library which can be found at http://www.ossp.org/pkg/var/.
  Index: ossp-pkg/var/configure.ac
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 configure.ac
  --- ossp-pkg/var/configure.ac	31 Dec 2001 12:06:18 -0000	1.2
  +++ ossp-pkg/var/configure.ac	2 Jan 2002 17:12:18 -0000	1.3
  @@ -1,7 +1,7 @@
   dnl ##
   dnl ##  VAR - OSSP variable expression library.
  -dnl ##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -dnl ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +dnl ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   dnl ##
   dnl ##  This file is part of OSSP VAR, an extensible data serialization
   dnl ##  library which can be found at http://www.ossp.org/pkg/var/.
  Index: ossp-pkg/var/devtool
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 devtool
  --- ossp-pkg/var/devtool	20 Nov 2001 20:02:21 -0000	1.1
  +++ ossp-pkg/var/devtool	2 Jan 2002 17:12:18 -0000	1.2
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  devtool -- Development Tool
  -##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
   ##
   
   if [ $# -eq 0 ]; then
  Index: ossp-pkg/var/devtool.func
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.func
  --- ossp-pkg/var/devtool.func	20 Nov 2001 20:02:21 -0000	1.1
  +++ ossp-pkg/var/devtool.func	2 Jan 2002 17:12:18 -0000	1.2
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
   ##
   
   devtool_require () {
  Index: ossp-pkg/var/var-config.in
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 var-config.in
  --- ossp-pkg/var/var-config.in	20 Nov 2001 20:02:21 -0000	1.1
  +++ ossp-pkg/var/var-config.in	2 Jan 2002 17:12:18 -0000	1.2
  @@ -1,25 +1,42 @@
   #!/bin/sh
   ##
  -##  FOO - OSSP Foo Library
  -##  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  +##  VAR - OSSP variable expression library.
  +##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
  -##  This file is part of OSSP foo, an example library 
  -##  which can be found at http://www.ossp.org/pkg/foo/.
  +##  This file is part of OSSP VAR, an extensible data serialization
  +##  library which can be found at http://www.ossp.org/pkg/var/.
   ##
  -##  ...[whole license (BSD) or license summary and reference (GPL)]...
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
   ##
  -##  foo-config.in: library build utility
  +##  THIS SOFTWARE IS PROVIDED `AS IS' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  var-config.in: library build utility
   ##
   
   DIFS=' 
   '
   
   #   tool
  -tool_name="foo-config"
  +tool_name="var-config"
   
   #   library version
  -lib_name="OSSP FOO"
  -lib_version="@FOO_VERSION_STR@"
  +lib_name="OSSP Var"
  +lib_version="@VAR_VERSION_STR@"
   
   #   build paths
   prefix="@prefix@"
  Index: ossp-pkg/var/var-config.pod
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 var-config.pod
  --- ossp-pkg/var/var-config.pod	20 Nov 2001 20:02:21 -0000	1.1
  +++ ossp-pkg/var/var-config.pod	2 Jan 2002 17:12:18 -0000	1.2
  @@ -1,7 +1,7 @@
   ##
   ##  VAR - OSSP variable expression library.
  -##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
   ##  This file is part of OSSP VAR, an extensible data serialization
   ##  library which can be found at http://www.ossp.org/pkg/var/.
  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.57 -r1.58 var.c
  --- ossp-pkg/var/var.c	17 Dec 2001 12:57:46 -0000	1.57
  +++ ossp-pkg/var/var.c	2 Jan 2002 17:12:18 -0000	1.58
  @@ -1,7 +1,7 @@
   /*
   **  VAR - OSSP variable expression library.
  -**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP VAR, an extensible data serialization
   **  library which can be found at http://www.ossp.org/pkg/var/.
  Index: ossp-pkg/var/var.h
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 var.h
  --- ossp-pkg/var/var.h	17 Dec 2001 10:29:43 -0000	1.20
  +++ ossp-pkg/var/var.h	2 Jan 2002 17:12:18 -0000	1.21
  @@ -1,7 +1,7 @@
   /*
   **  VAR - OSSP variable expression library.
  -**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP VAR, an extensible data serialization
   **  library which can be found at http://www.ossp.org/pkg/var/.
  Index: ossp-pkg/var/var.pod
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 var.pod
  --- ossp-pkg/var/var.pod	17 Dec 2001 12:57:46 -0000	1.17
  +++ ossp-pkg/var/var.pod	2 Jan 2002 17:12:18 -0000	1.18
  @@ -1,7 +1,7 @@
   ##
   ##  VAR - OSSP variable expression library.
  -##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
   ##  This file is part of OSSP VAR, an extensible data serialization
   ##  library which can be found at http://www.ossp.org/pkg/var/.
  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 var_test.c
  --- ossp-pkg/var/var_test.c	17 Dec 2001 10:29:43 -0000	1.29
  +++ ossp-pkg/var/var_test.c	2 Jan 2002 17:12:18 -0000	1.30
  @@ -1,7 +1,7 @@
   /*
   **  VAR - OSSP variable expression library.
  -**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP VAR, an extensible data serialization
   **  library which can be found at http://www.ossp.org/pkg/var/.

From ossp-cvs-owner@ossp.org  Wed Jan  2 18:13:46 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 62B23764E8; Wed,  2 Jan 2002 18:13:46 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/xds LICENSE Makefile.in README aclocal.m4 autogen...
Message-Id: <20020102171346.62B23764E8@mail.ossp.org>
Date: Wed,  2 Jan 2002 18:13:46 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   02-Jan-2002 18:13:46
  Branch: HEAD                             Handle: 2002010217134401

  Modified files:
    ossp-pkg/xds            LICENSE Makefile.in README aclocal.m4 autogen.sh
                            configure.ac xds-config.in xds-config.pod
                            xds-xml.dtd xds.c xds.h.in xds.m4 xds.pod
                            xds_engine_xdr.c xds_engine_xml.c xds_p.h
                            xds_test.sh xds_test_lib.c xds_test_xdr.c
                            xds_test_xml.c

  Log:
    bump copyright year

  Summary:
    Revision    Changes     Path
    1.3         +2  -2      ossp-pkg/xds/LICENSE
    1.36        +2  -2      ossp-pkg/xds/Makefile.in
    1.5         +2  -2      ossp-pkg/xds/README
    1.5         +2  -2      ossp-pkg/xds/aclocal.m4
    1.3         +2  -2      ossp-pkg/xds/autogen.sh
    1.23        +4  -4      ossp-pkg/xds/configure.ac
    1.4         +2  -2      ossp-pkg/xds/xds-config.in
    1.4         +2  -2      ossp-pkg/xds/xds-config.pod
    1.4         +2  -2      ossp-pkg/xds/xds-xml.dtd
    1.8         +2  -2      ossp-pkg/xds/xds.c
    1.19        +2  -2      ossp-pkg/xds/xds.h.in
    1.4         +2  -2      ossp-pkg/xds/xds.m4
    1.13        +2  -2      ossp-pkg/xds/xds.pod
    1.11        +2  -2      ossp-pkg/xds/xds_engine_xdr.c
    1.9         +2  -2      ossp-pkg/xds/xds_engine_xml.c
    1.8         +2  -2      ossp-pkg/xds/xds_p.h
    1.6         +2  -2      ossp-pkg/xds/xds_test.sh
    1.8         +2  -2      ossp-pkg/xds/xds_test_lib.c
    1.9         +2  -2      ossp-pkg/xds/xds_test_xdr.c
    1.7         +2  -2      ossp-pkg/xds/xds_test_xml.c
  ____________________________________________________________________________

  Index: ossp-pkg/xds/LICENSE
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 LICENSE
  --- ossp-pkg/xds/LICENSE	12 Aug 2001 11:31:45 -0000	1.2
  +++ ossp-pkg/xds/LICENSE	2 Jan 2002 17:13:44 -0000	1.3
  @@ -1,6 +1,6 @@
   XDS - OSSP Extensible Data Serialization Library
  -Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   
   This file is part of OSSP XDS, an extensible data serialization
   library which can be found at http://www.ossp.org/pkg/xds/.
  Index: ossp-pkg/xds/Makefile.in
  ============================================================
  $ cvs diff -u -r1.35 -r1.36 Makefile.in
  --- ossp-pkg/xds/Makefile.in	30 Aug 2001 10:55:29 -0000	1.35
  +++ ossp-pkg/xds/Makefile.in	2 Jan 2002 17:13:44 -0000	1.36
  @@ -1,7 +1,7 @@
   ##
   ##  XDS - OSSP Extensible Data Serialization Library
  -##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
   ##  This file is part of OSSP XDS, an extensible data serialization
   ##  library which can be found at http://www.ossp.org/pkg/xds/.
  Index: ossp-pkg/xds/README
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 README
  --- ossp-pkg/xds/README	13 Aug 2001 19:48:02 -0000	1.4
  +++ ossp-pkg/xds/README	2 Jan 2002 17:13:44 -0000	1.5
  @@ -8,8 +8,8 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   
     This file is part of OSSP XDS, an extensible data serialization
     library which can be found at http://www.ossp.org/pkg/xds/.
  Index: ossp-pkg/xds/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 aclocal.m4
  --- ossp-pkg/xds/aclocal.m4	13 Aug 2001 19:48:02 -0000	1.4
  +++ ossp-pkg/xds/aclocal.m4	2 Jan 2002 17:13:44 -0000	1.5
  @@ -1,7 +1,7 @@
   dnl ##
   dnl ##  XDS - OSSP Extensible Data Serialization Library
  -dnl ##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -dnl ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +dnl ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   dnl ##
   dnl ##  This file is part of OSSP XDS, an extensible data serialization
   dnl ##  library which can be found at http://www.ossp.org/pkg/xds/.
  Index: ossp-pkg/xds/autogen.sh
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 autogen.sh
  --- ossp-pkg/xds/autogen.sh	13 Aug 2001 19:48:02 -0000	1.2
  +++ ossp-pkg/xds/autogen.sh	2 Jan 2002 17:13:44 -0000	1.3
  @@ -1,8 +1,8 @@
   #!/bin/sh
   ##
   ##  XDS - OSSP Extensible Data Serialization Library
  -##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
   ##  This file is part of OSSP XDS, an extensible data serialization
   ##  library which can be found at http://www.ossp.org/pkg/xds/.
  Index: ossp-pkg/xds/configure.ac
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 configure.ac
  --- ossp-pkg/xds/configure.ac	13 Aug 2001 19:48:02 -0000	1.22
  +++ ossp-pkg/xds/configure.ac	2 Jan 2002 17:13:44 -0000	1.23
  @@ -1,7 +1,7 @@
   dnl ##
   dnl ##  XDS - OSSP Extensible Data Serialization Library
  -dnl ##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -dnl ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +dnl ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   dnl ##
   dnl ##  This file is part of OSSP XDS, an extensible data serialization
   dnl ##  library which can be found at http://www.ossp.org/pkg/xds/.
  @@ -34,8 +34,8 @@
   AC_HEADLINE(dnl
   XDS, eXtensible Data Serialization, dnl
   XDS_VERSION, xds_version.c, dnl
  -[Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)])
  +[Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)])
   AC_PLATFORM(PLATFORM)
   AC_CONFIG_HEADERS(config.h)
   
  Index: ossp-pkg/xds/xds-config.in
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xds-config.in
  --- ossp-pkg/xds/xds-config.in	13 Aug 2001 19:48:02 -0000	1.3
  +++ ossp-pkg/xds/xds-config.in	2 Jan 2002 17:13:44 -0000	1.4
  @@ -1,8 +1,8 @@
   #!/bin/sh
   ##
   ##  XDS - OSSP Extensible Data Serialization Library
  -##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
   ##  This file is part of OSSP XDS, an extensible data serialization
   ##  library which can be found at http://www.ossp.org/pkg/xds/.
  Index: ossp-pkg/xds/xds-config.pod
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xds-config.pod
  --- ossp-pkg/xds/xds-config.pod	13 Aug 2001 19:48:02 -0000	1.3
  +++ ossp-pkg/xds/xds-config.pod	2 Jan 2002 17:13:44 -0000	1.4
  @@ -1,7 +1,7 @@
   ##
   ##  XDS - OSSP Extensible Data Serialization Library
  -##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
   ##  This file is part of OSSP XDS, an extensible data serialization
   ##  library which can be found at http://www.ossp.org/pkg/xds/.
  Index: ossp-pkg/xds/xds-xml.dtd
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xds-xml.dtd
  --- ossp-pkg/xds/xds-xml.dtd	13 Aug 2001 19:48:02 -0000	1.3
  +++ ossp-pkg/xds/xds-xml.dtd	2 Jan 2002 17:13:44 -0000	1.4
  @@ -1,7 +1,7 @@
   <!-- ===========================================================
        XDS - OSSP Extensible Data Serialization Library
  -     Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -     Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +     Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +     Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   
        This file is part of OSSP XDS, an extensible data serialization
        library which can be found at http://www.ossp.org/pkg/xds/.
  Index: ossp-pkg/xds/xds.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 xds.c
  --- ossp-pkg/xds/xds.c	13 Aug 2001 19:48:02 -0000	1.7
  +++ ossp-pkg/xds/xds.c	2 Jan 2002 17:13:44 -0000	1.8
  @@ -1,7 +1,7 @@
   /*
   **  XDS - OSSP Extensible Data Serialization Library
  -**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP XDS, an extensible data serialization
   **  library which can be found at http://www.ossp.org/pkg/xds/.
  Index: ossp-pkg/xds/xds.h.in
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 xds.h.in
  --- ossp-pkg/xds/xds.h.in	30 Aug 2001 14:47:41 -0000	1.18
  +++ ossp-pkg/xds/xds.h.in	2 Jan 2002 17:13:44 -0000	1.19
  @@ -1,7 +1,7 @@
   /*
   **  XDS - OSSP Extensible Data Serialization Library
  -**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP XDS, an extensible data serialization
   **  library which can be found at http://www.ossp.org/pkg/xds/.
  Index: ossp-pkg/xds/xds.m4
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 xds.m4
  --- ossp-pkg/xds/xds.m4	13 Aug 2001 19:48:02 -0000	1.3
  +++ ossp-pkg/xds/xds.m4	2 Jan 2002 17:13:44 -0000	1.4
  @@ -1,7 +1,7 @@
   dnl ##
   dnl ##  XDS - OSSP Extensible Data Serialization Library
  -dnl ##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -dnl ##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +dnl ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   dnl ##
   dnl ##  This file is part of OSSP XDS, an extensible data serialization
   dnl ##  library which can be found at http://www.ossp.org/pkg/xds/.
  Index: ossp-pkg/xds/xds.pod
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 xds.pod
  --- ossp-pkg/xds/xds.pod	30 Aug 2001 15:02:52 -0000	1.12
  +++ ossp-pkg/xds/xds.pod	2 Jan 2002 17:13:44 -0000	1.13
  @@ -1,7 +1,7 @@
   ##
   ##  XDS - OSSP Extensible Data Serialization Library
  -##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
   ##  This file is part of OSSP XDS, an extensible data serialization
   ##  library which can be found at http://www.ossp.org/pkg/xds/.
  Index: ossp-pkg/xds/xds_engine_xdr.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 xds_engine_xdr.c
  --- ossp-pkg/xds/xds_engine_xdr.c	30 Aug 2001 11:15:54 -0000	1.10
  +++ ossp-pkg/xds/xds_engine_xdr.c	2 Jan 2002 17:13:44 -0000	1.11
  @@ -1,7 +1,7 @@
   /*
   **  XDS - OSSP Extensible Data Serialization Library
  -**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP XDS, an extensible data serialization
   **  library which can be found at http://www.ossp.org/pkg/xds/.
  Index: ossp-pkg/xds/xds_engine_xml.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 xds_engine_xml.c
  --- ossp-pkg/xds/xds_engine_xml.c	30 Aug 2001 14:49:49 -0000	1.8
  +++ ossp-pkg/xds/xds_engine_xml.c	2 Jan 2002 17:13:44 -0000	1.9
  @@ -1,7 +1,7 @@
   /*
   **  XDS - OSSP Extensible Data Serialization Library
  -**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP XDS, an extensible data serialization
   **  library which can be found at http://www.ossp.org/pkg/xds/.
  Index: ossp-pkg/xds/xds_p.h
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 xds_p.h
  --- ossp-pkg/xds/xds_p.h	22 Aug 2001 20:23:22 -0000	1.7
  +++ ossp-pkg/xds/xds_p.h	2 Jan 2002 17:13:44 -0000	1.8
  @@ -1,7 +1,7 @@
   /*
   **  XDS - OSSP Extensible Data Serialization Library
  -**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP XDS, an extensible data serialization
   **  library which can be found at http://www.ossp.org/pkg/xds/.
  Index: ossp-pkg/xds/xds_test.sh
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 xds_test.sh
  --- ossp-pkg/xds/xds_test.sh	13 Aug 2001 19:48:02 -0000	1.5
  +++ ossp-pkg/xds/xds_test.sh	2 Jan 2002 17:13:44 -0000	1.6
  @@ -1,8 +1,8 @@
   #!/bin/sh
   ##
   ##  XDS - OSSP Extensible Data Serialization Library
  -##  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
   ##  This file is part of OSSP XDS, an extensible data serialization
   ##  library which can be found at http://www.ossp.org/pkg/xds/.
  Index: ossp-pkg/xds/xds_test_lib.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 xds_test_lib.c
  --- ossp-pkg/xds/xds_test_lib.c	30 Aug 2001 10:42:24 -0000	1.7
  +++ ossp-pkg/xds/xds_test_lib.c	2 Jan 2002 17:13:45 -0000	1.8
  @@ -1,7 +1,7 @@
   /*
   **  XDS - OSSP Extensible Data Serialization Library
  -**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP XDS, an extensible data serialization
   **  library which can be found at http://www.ossp.org/pkg/xds/.
  Index: ossp-pkg/xds/xds_test_xdr.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 xds_test_xdr.c
  --- ossp-pkg/xds/xds_test_xdr.c	30 Aug 2001 10:31:55 -0000	1.8
  +++ ossp-pkg/xds/xds_test_xdr.c	2 Jan 2002 17:13:45 -0000	1.9
  @@ -1,7 +1,7 @@
   /*
   **  XDS - OSSP Extensible Data Serialization Library
  -**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP XDS, an extensible data serialization
   **  library which can be found at http://www.ossp.org/pkg/xds/.
  Index: ossp-pkg/xds/xds_test_xml.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 xds_test_xml.c
  --- ossp-pkg/xds/xds_test_xml.c	30 Aug 2001 14:48:45 -0000	1.6
  +++ ossp-pkg/xds/xds_test_xml.c	2 Jan 2002 17:13:45 -0000	1.7
  @@ -1,7 +1,7 @@
   /*
   **  XDS - OSSP Extensible Data Serialization Library
  -**  Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP XDS, an extensible data serialization
   **  library which can be found at http://www.ossp.org/pkg/xds/.

From ossp-cvs-owner@ossp.org  Wed Jan  2 19:10:43 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DD4C8764E8; Wed,  2 Jan 2002 19:10:42 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/xds Makefile.in autogen.sh config.guess config.h....
Message-Id: <20020102181042.DD4C8764E8@mail.ossp.org>
Date: Wed,  2 Jan 2002 19:10:42 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   02-Jan-2002 19:10:42
  Branch: HEAD                             Handle: 197001010100001009991441

  Added files:
    ossp-pkg/xds            devtool devtool.conf devtool.func
  Modified files:
    ossp-pkg/xds            Makefile.in
  Removed files:
    ossp-pkg/xds            autogen.sh config.guess config.h.in config.sub
                            configure libtool.m4 ltmain.sh shtool

  Log:
    switch to devtool

  Summary:
    Revision    Changes     Path
    1.37        +0  -19     ossp-pkg/xds/Makefile.in
    NONE        +0  -75     ossp-pkg/xds/autogen.sh
    NONE        +0  -1371   ossp-pkg/xds/config.guess
    NONE        +0  -34     ossp-pkg/xds/config.h.in
    NONE        +0  -1362   ossp-pkg/xds/config.sub
    NONE        +0  -0      ossp-pkg/xds/configure
    1.1         +47 -0      ossp-pkg/xds/devtool
    1.1         +32 -0      ossp-pkg/xds/devtool.conf
    1.1         +72 -0      ossp-pkg/xds/devtool.func
    NONE        +0  -3397   ossp-pkg/xds/libtool.m4
    NONE        +0  -4946   ossp-pkg/xds/ltmain.sh
    NONE        +0  -2837   ossp-pkg/xds/shtool
  ____________________________________________________________________________

  Index: ossp-pkg/xds/Makefile.in
  ============================================================
  $ cvs diff -u -r1.36 -r1.37 Makefile.in
  --- ossp-pkg/xds/Makefile.in	2 Jan 2002 17:13:44 -0000	1.36
  +++ ossp-pkg/xds/Makefile.in	2 Jan 2002 18:10:41 -0000	1.37
  @@ -164,25 +164,6 @@
   	-$(RMDIR) $(DESTDIR)$(includedir)
   	-$(RMDIR) $(DESTDIR)$(bindir)
   
  -#   roll a distribution tarball
  -dist: distclean
  -	@$(SHTOOL) fixperm -v .; \
  -	V=`$(SHTOOL) version -l c -d short xds_version.c`; \
  -	$(SHTOOL) tarball -o xds-$${V}.tar.gz -d str-$${V} -u ossp -g ossp \
  -	                  -e 'CVS,\.cvsignore,\.[ao],^\.,autogen.sh' -c 'gzip --best' .
  -
  -#   increase or update version information
  -new-version:
  -	@V="$(VERSION)"; \
  -	if [ ".$$V" != . ]; then \
  -		OPT="-s$$V"; \
  -	else \
  -		OPT="-e"; \
  -	fi; \
  -	$(_VERSION)
  -update-version:
  -	@OPT="-s`$(SHTOOL) version -lc -dshort $(_VERSION_FILE)`" && $(_VERSION)
  -
   # Dependencies
   
   $(LIB_OBJS):			xds_p.h xds.h
            Index: ossp-pkg/xds/devtool
  ============================================================
  $ cvs update -p -r1.1 devtool
  #!/bin/sh
  ##
  ##  devtool -- Development Tool
  ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  if [ $# -eq 0 ]; then
      echo "devtool:USAGE: devtool <command> [<arg> ...]" 1>&2
      exit 1
  fi
  
  cmd="$1"
  shift
  
  devtoolfunc="./devtool.func"
  
  if [ ! -f devtool.conf ]; then
      echo "devtool:ERROR: no devtool.conf in current directory" 1>&2
      exit 1
  fi
  
  cmdline=`grep "^%$cmd" devtool.conf`
  if [ ".$cmdline" = . ]; then
      echo "devtool:ERROR: command $cmd not found in devtool.conf" 1>&2
      exit 1
  fi
  
  if [ ".$TMPDIR" != . ]; then
      tmpdir="$TMPDIR"
  elif [ ".$TEMPDIR" != . ]; then
      tmpdir="$TEMPDIR"
  else
      tmpdir="/tmp"
  fi
  tmpfile="$tmpdir/rc.$$.tmp"
  
  rm -f $tmpfile
  touch $tmpfile
  echo ". $devtoolfunc" >>$tmpfile
  ( sed <devtool.conf -e "1,/^%common/d" -e '/^%.*/,$d'
    sed <devtool.conf -e "1,/^%$cmd/d" -e '/^%.*/,$d' ) |\
  sed -e 's;\([ 	]\)@\([a-zA-Z_][a-zA-Z0-9_]*\);\1devtool_\2;' >>$tmpfile
  
  sh $tmpfile "$@"
  
  rm -f $tmpfile >/dev/null 2>&1 || true
  
  Index: ossp-pkg/xds/devtool.conf
  ============================================================
  $ cvs update -p -r1.1 devtool.conf
  ##
  ##  devtool.conf -- Development Tool Configuration
  ##
  
  %autogen
      @autogen shtool   1.5.4 "1.5.*" all
      @autogen libtool  1.4.2 "1.4*"
      @autogen autoconf 2.52  "2.5.*"
  
  %autoclean
      @autoclean shtool
      @autoclean libtool
      @autoclean autoconf
  
  %configure
      ./configure \
          --prefix=/tmp/xds \
          --disable-shared \
          --enable-maintainer \
          --enable-debug \
          "$@"
  
  %version
      ./shtool version -l c -n "OSSP XDS" -p "xds_" -e xds_version.c
  
  %dist
      make distclean >/dev/null 2>&1
      ./shtool fixperm -v .
      V=`./shtool version -l c -d short xds_version.c`
      ./shtool tarball -o xds-${V}.tar.gz -d xds-${V} -u ossp -g ossp \
                       -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf' -c 'gzip --best' .
  
  Index: ossp-pkg/xds/devtool.func
  ============================================================
  $ cvs update -p -r1.1 devtool.func
  ##
  ##  devtool.func -- Development Tool Functions
  ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  devtool_require () {
      t="$1"; o="$2"; p="$3"; e="$4"; a="$5"
      v=`($t $o | head -1 | awk "{ print \\\$$p; }") 2>/dev/null`
      if [ ".$v" = . ]; then
          echo "devtool:ERROR: unable to determine version of $t" 1>&2
          exit 1
      fi
      case "$v" in
          $e )
              ;;
          $a )
              echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
              ;;
          * )
              echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
              exit 1
              ;;
      esac
      echo "$v"
  }
  
  devtool_autogen () {
      tool=$1
      shift
      case $tool in
          autoconf )
              autoconf_version=`devtool_require autoconf --version 4 "$1" "$2"`
              echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
              autoconf
              autoheader 2>&1 | grep -v "is unchanged"
              ;;
          libtool )
              libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
              echo "generating (GNU Libtool $libtoolize_version): ltmain.sh, libtool.m4, config.guess, config.sub"
              libtoolize --force --copy >/dev/null 2>&1
              cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
                  sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` libtool.m4
              ;;
          shtool )
              shtoolize_version=`devtool_require shtoolize -v 3 "$1" "$2"`
              echo "generating (GNU Shtool $shtoolize_version): shtool"
              shift
              shift
              shtoolize -q "$@"
              ;;
      esac
  }
  
  devtool_autoclean () {
      tool=$1
      shift
      case $tool in
          autoconf )
              echo "removing: configure config.h.in"
              rm -f configure config.h.in
              ;;
          libtool )
              echo "removing: ltmain.sh libtool.m4 config.guess config.sub"
              rm -f ltmain.sh libtool.m4 config.guess config.sub
              ;;
          shtool )
              echo "removing: shtool"
              rm -f shtool
              ;;
      esac
  }
  
      

From ossp-cvs-owner@ossp.org  Wed Jan  2 19:35:51 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 74C5D764E8; Wed,  2 Jan 2002 19:35:51 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/xds xds.pod
Message-Id: <20020102183551.74C5D764E8@mail.ossp.org>
Date: Wed,  2 Jan 2002 19:35:51 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   02-Jan-2002 19:35:51
  Branch: HEAD                             Handle: 2002010218355100

  Modified files:
    ossp-pkg/xds            xds.pod

  Log:
    first cut in cleaning up manual page

  Summary:
    Revision    Changes     Path
    1.14        +170 -163   ossp-pkg/xds/xds.pod
  ____________________________________________________________________________

  Index: ossp-pkg/xds/xds.pod
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 xds.pod
  --- ossp-pkg/xds/xds.pod	2 Jan 2002 17:13:44 -0000	1.13
  +++ ossp-pkg/xds/xds.pod	2 Jan 2002 18:35:51 -0000	1.14
  @@ -31,141 +31,148 @@
   
   =head1 NAME
   
  -xds - OSSP Extensible Data Serialization
  +B<OSSP xds> - eXtensible Data Serialization
   
   =head1 SYNOPSIS
   
  +xds_init, 
  +xds_destroy,
  +xds_register,
  +xds_unregister,
  +xds_setbuffer,
  +xds_getbuffer,
  +xds_encode,
  +xds_decode,
  +xds_vencode,
  +xds_vdecode.
  +
   =head1 DESCRIPTION
   
  -The purpose of XDS is to encode data in a way that allows this data to
  -be exchanged between different computer systems. Assume you'd want to
  -transfer the value $1234 from host A to host B. Then you would encode
  -it using XDS, transfer the encoded data over the network, and decode
  -the value again at the other end. Every program that follows this
  -process will read the correct value no matter what native
  -representation is used internally.
  -
  -XDS consists of three components: The generic encoding and decoding
  -framework, a set of engines to encode and decode values in a certain
  -format, and a run-time context, which is used to manage buffers,
  +The purpose of B<OSSP xds> is to encode data in a way that allows this
  +data to be exchanged between different computer systems. Assume you
  +would want to transfer the value 0x1234 from host A to host B. Then you
  +would encode it using B<OSSP xds>, transfer the encoded data over the
  +network, and decode the value again at the other end. Every program that
  +follows this process will read the correct value no matter what native
  +representation is uses internally.
  +
  +B<OSSP xds> consists of three components: The generic encoding and
  +decoding framework, a set of engines to encode and decode values in a
  +certain format, and a run-time context, which is used to manage buffers,
   registered engines, etc.
   
  -In order to use the library, the first thing the developer has to do
  -is to create a valid XDS context by calling xds_init(). The
  -routine requires one parameter that determines whether to operate in
  -encoding- or decoding mode. A context can be used for encoding or
  -decoding only; it is not possible to use the same context for both
  -operations. Once a valid XDS context has been obtained, the routine
  -xds_register() can be used to register an arbitrary number
  -of encoding or decoding engines within the context.
  -
  -Two sets of engines are included in the library. These routines will
  -handle any elementary datatype defined by the ISO-C language, such as
  -32-bit integers, 64-bit integers, unsigned integers (of both 32- and
  -64-bit), floating point numbers, strings and octet streams.
  +In order to use B<OSSP xds>, the first thing the developer has to
  +do is to create a valid context by calling xds_init(). The function
  +requires one parameter that determines whether to operate in encoding-
  +or decoding mode. A context can be used for encoding or decoding only;
  +it is not possible to use the same context for both operations. Once a
  +valid context has been obtained, the function xds_register() can be used
  +to register an arbitrary number of encoding (or decoding) engines within
  +the context.
  +
  +Two sets of engines are included in the library, additional ones can be
  +easily programmed. These functions will handle any elementary datatype
  +defined by the ISO-C language, such as 32-bit integers, 64-bit integers,
  +unsigned integers (of both 32 and 64-bit), floating point numbers,
  +strings and octet streams.
   
   Once all required encoding/decoding engines are registered, the
  -routines xds_encode() or xds_decode() may be
  -used to actually perform the encoding or decoding process. Any data
  -type for which an engine has been registered can be handled by the
  -library.
  -
  -This means, that it is possible for the developer to write custom
  -engines for any data type he desires to use and to register them in
  -the context -- as long as these engines adhere to the
  -xds_engine_t interface defined in xds.h.
  -
  -In particular, it is possible to register meta engines. That is an
  -engine designed to encode or decode data types, which consist of
  -several elementary data types. Such an engine will simply re-use the
  -existing engines to encode or decode the elements of the structure.
  -
  -The following example program will encode an unsigend integer into the
  -XDR format, decode it back into the native host format, and compare
  -the result to make sure it is the original value again:
  -
  -    #include <stdio.h>
  -    #include <errno.h>
  -    #include <xds.h>
  -
  -    int main()
  -	{
  -	xds_t* xds;
  -	xds_uint32_t uint32 = 0x12345678;
  -	xds_uint32_t new_uint32;
  -	char* buffer;
  -	size_t buffer_size;
  -
  -	if ((xds = xds_init(XDS_ENCODE)) == NULL ||
  -	    xds_register(xds, "uint32", &xdr_encode_uint32, NULL) != XDS_OK ||
  -	    xds_encode(xds, "uint32", uint32) != XDS_OK ||
  -	    xds_getbuffer(xds, XDS_GIFT, (void**)&buffer, &buffer_size) != XDS_OK)
  -	    {
  -	    printf("Encoding failed.\n");
  -	    exit(1);
  -	    }
  -	xds_destroy(xds);
  -
  -	if ((xds = xds_init(XDS_DECODE)) == NULL ||
  -	    xds_register(xds, "uint32", &xdr_decode_uint32, NULL) != XDS_OK ||
  -	    xds_setbuffer(xds, XDS_LOAN, buffer, buffer_size) != XDS_OK ||
  -	    xds_decode(xds, "uint32", &new_uint32) != XDS_OK)
  -	    {
  -	    printf("Decoding failed.\n");
  -	    exit(1);
  -	    }
  -	xds_destroy(xds);
  -
  -	if (uint32 == new_uint32)
  -	    printf("OK\n");
  -	else
  -	    printf("Failure\n");
  -
  -	return 0;
  -	}
  +functions xds_encode() or xds_decode() may be used to actually perform
  +the encoding or decoding process. Any data type for which an engine has
  +been registered before can be handled by the library.
  +
  +This means, it is possible for the developer to write custom engines for
  +any data type he desires to use and to register them in the context --
  +as long as these engines adhere to the C<xds_engine_t> interface defined
  +in F<xds.h>.
  +
  +In particular, it is possible to register meta engines. This is an
  +engine designed to encode or decode data types which consist of several
  +elementary data types. Such an engine will simply re-use the existing
  +engines to encode or decode the elements of the structure.
  +
  +The following example program (without error checking for simplicity)
  +will encode the unsigned integer 0x1234 into the XDR format (known from
  +Sun RPC), decode it back into the native host format, and compare the
  +result to make sure it is the original value again:
  +
  + #include <stdio.h>
  + #include <errno.h>
  +
  + #include "xds.h"
  +
  + int main(int argc, char *argv[])
  + {
  +     xds_t *xds;
  +     xds_uint32_t uint32 = 0x1234;
  +     xds_uint32_t uint32_new;
  +     char *buffer;
  +     size_t buffer_size;
  +
  +     /* encoding */
  +     xds = xds_init(XDS_ENCODE);
  +     xds_register(xds, "uint32", &xdr_encode_uint32, NULL);
  +     xds_encode(xds, "uint32", uint32);
  +     xds_getbuffer(xds, XDS_GIFT, (void**)&buffer, &buffer_size);
  +     xds_destroy(xds);
  +
  +     /* ...usually buffer is now transferred to a remote system... */
  +
  +     /* decoding */
  +     xds = xds_init(XDS_DECODE);
  +     xds_register(xds, "uint32", &xdr_decode_uint32, NULL);
  +     xds_setbuffer(xds, XDS_LOAN, buffer, buffer_size);
  +     xds_decode(xds, "uint32", &uint32_new);
  +     xds_destroy(xds);
  +
  +     /* comparison */
  +     if (uint32 == uint32_new)
  +         printf("OK\n");
  +     else
  +         printf("Failure\n");
  +     return 0;
  + }
   
   =head1 THE XDS FRAMEWORK
   
  +B<OSSP xds> provides a generic framework for encoding and decoding.
  +The corresponding API is described here.
  +
   =over 4
   
  -=item xds_t* xds_init(xds_mode_t I<mode>);
  +=item xds_t *B<xds_init>(xds_mode_t I<mode>);
  +
  +This function creates and initializes a context. The I<mode> parameter
  +may be either C<XDS_ENCODE> or C<XDS_DECODE>, depending on whether you
  +want to encode or decode data. If successful, xds_init() returns a
  +pointer to the context. In case of failure, xds_init() returns C<NULL>
  +and sets errno to C<ENOMEM> (failed to allocate internal memory buffers)
  +or C<EINVAL> (I<mode> parameter was invalid).
   
  -This routine creates and initializes a context for use with the XDS
  -library. The `mode' parameter may be either XDS_ENCODE or
  -XDS_DECODE, depending on whether you want to encode or to decode
  -data. If successful, xds_init() returns a pointer to the XDS
  -context structure. In case of failure, xds_init() returns
  -NULL and sets errno to ENOMEM (failed to allocate
  -internal memory buffers) or EINVAL (`mode' parameter was invalid).
  -
  -A context obtained from xds_init() must be destroyed by
  -xds_destroy() when it is not needed any more.
  -
  -=item void xds_destroy(xds_t* I<xds>);
  -
  -xds_destroy() will destroy an XDS context created by
  -xds_init(). Doing so will return all resources associated with
  -this context -- most notably the memory used to buffer the results of
  -encoding or decoding any values. A context may not be used after it has
  -been destroyed.
  +A context obtained from xds_init() must be destroyed by xds_destroy() if
  +it is no longer needed.
   
  -=item int xds_register(xds_t* I<xds>, const char* I<name>, xds_engine_t I<engine>, void* I<engine_context>);
  +=item void B<xds_destroy>(xds_t *I<xds>);
   
  -This routine will register an engine in the provided XDS context. An
  -`engine' is potentially any function that fullfils the following
  +xds_destroy() will destroy the context I<xds>, created by xds_init().
  +Doing so will return all resources associated with this context -- most
  +notably the memory used to buffer the results of encoding or decoding
  +any values. A context may not be used after it has been destroyed.
  +
  +=item int B<xds_register>(xds_t *I<xds>, const char *I<name>, xds_engine_t I<engine>, void *I<engine_context>);
  +
  +This function will register an engine in the provided context. An
  +I<engine> is potentially any function that fullfils the following
   interface:
   
  -    int engine(xds_t* xds, void* engine_context,
  -               void* buffer, size_t buffer_size,
  -               size_t* used_buffer_size,
  -               va_list* args);
  -
  -By calling xds_register(), the engine `engine' will be
  -registered under the name `name' in the XDS context `xds'. The last
  -parameter `engine_context' may be used as the user sees fit: It will be
  -passed when the engine is actually called and may be used to implement an
  -engine-specific context. Most engines will not need a context of their own,
  -in which case NULL should be specified here.
  +int B<engine>(xds_t *I<xds>, void *I<engine_context>, void *I<buffer>, size_t I<buffer_size>, size_t *I<used_buffer_size>, va_list *I<args>);
  +
  +By calling xds_register(), the I<engine> will be registered under the
  +name I<name> in the context I<xds>. The last parameter I<engine_context>
  +may be used as the user sees fit: It will be passed when the engine is
  +actually called and may be used to implement an engine-specific context.
  +Most engines will not need a context of their own, in which case C<NULL>
  +should be specified here.
   
   Please note that until the user calls xds_register() for an XDS
   context he obtained from xds_init(), no engines are registered
  @@ -194,7 +201,7 @@
   
   =item int xds_setbuffer(xds_t* I<xds>, xds_scope_t I<flag>, void* I<buffer>, size_t I<buffer_len>);
   
  -This routine allows the user to control XDS' buffer handling: Calling it
  +This function allows the user to control XDS' buffer handling: Calling it
   will replace the buffer currently used in `xds'. The address and size of
   that buffer are passed to xds_setbuffer() via the `buffer' and
   `buffer_len' parameters. The `xds' parameter determines for which XDS
  @@ -217,7 +224,7 @@
   
   =item int xds_getbuffer(xds_t* I<xds>, xds_scope_t I<flag>, void** I<buffer>, size_t* I<buffer_len>);
   
  -This routine is the counterpart to xds_setbuffer(): It will get
  +This function is the counterpart to xds_setbuffer(): It will get
   the buffer currently used in the XDS context `xds'. The address of that
   buffer is stored in the location `buffer' points to; the length of the
   buffer's content will be stored in the location `buffer_len' points to.
  @@ -236,7 +243,7 @@
   xds_getbuffer() may change after any other xds_xxx()
   function call!
   
  -The routine will return XDS_OK (everything went fine) or
  +The function will return XDS_OK (everything went fine) or
   XDS_ERR_INVALID_ARG (`xds', `buffer' or `buffer_len' are
   NULL or `flag' is invalid) signifying success or failure
   respectively.
  @@ -248,7 +255,7 @@
   
   =item int xds_vencode(xds_t* I<xds>, const char* I<fmt>, va_list I<args>);
   
  -This routine will encode one or several values using the appropriate
  +This function will encode one or several values using the appropriate
   encoding engines registered in XDS context `xds'. The parameter `fmt'
   contains a sprintf(3)-alike descriptions of the values to be
   encoded; the actual values are provided in the varadic parameter `args'.
  @@ -297,12 +304,12 @@
   
   =item int xds_encode(xds_t* I<xds>, const char* I<fmt>, ...);
   
  -This routine is basically identical to xds_vencode(), only that
  +This function is basically identical to xds_vencode(), only that
   it uses a different prototype syntax.
   
   =item int xds_vdecode(xds_t* I<xds>, const char* I<fmt>, va_list I<args>);
   
  -This routine is almost identical to xds_vencode(): It expects an
  +This function is almost identical to xds_vencode(): It expects an
   XDS context, a format string and a set of parameters for the engines, but
   xds_vdecode() does not encode any data, it decodes the data back
   into the native format. The format string determines which engines are to
  @@ -326,7 +333,7 @@
   
   =item int xds_decode(xds_t* I<xds>, const char* I<fmt>, ...);
   
  -This routine is basically identical to xds_vdecode(), only that
  +This function is basically identical to xds_vdecode(), only that
   it uses a different prototype syntax.
   
   =back
  @@ -352,7 +359,7 @@
     xdr_encode_string()        char*             variable   variable
     xdr_decode_string()        char**            variable   variable
   
  -Please note that the routines xdr_decode_octetstream() and
  +Please note that the functions xdr_decode_octetstream() and
   xdr_decode_string() return a pointer to a buffer holding the
   decoded data. This buffer has been allocated with malloc(3) and
   must be free(3)ed by the application when it is not required
  @@ -382,7 +389,7 @@
     xml_encode_string()        char*             variable      variable
     xml_decode_string()        char**            variable      variable
   
  -Please note that the routines xml_decode_octetstream() and
  +Please note that the functions xml_decode_octetstream() and
   xml_decode_string() return a pointer to a buffer holding the decoded
   data. This buffer has been allocated with malloc(3) and must be
   free(3)ed by the application when it is not required anymore. All
  @@ -399,12 +406,12 @@
   defined as follows:
   
       struct mystruct
  -	{
  -	xds_int32_t   small;
  -	xds_int64_t   big;
  -	xds_uint32_t  positive;
  -	char          text[16];
  -	};
  +    {
  +    xds_int32_t   small;
  +    xds_int64_t   big;
  +    xds_uint32_t  positive;
  +    char          text[16];
  +    };
   
   Some readers might wonder why the structure is defined using these
   weird data types rather than the familiar ones like int, long, etc.
  @@ -420,16 +427,16 @@
   engine:
   
       static int encode_mystruct(xds_t* xds, void* engine_context,
  -			       void* buffer, size_t buffer_size,
  -			       size_t* used_buffer_size,
  -			       va_list* args)
  -	{
  -	struct mystruct* ms;
  -	ms = va_arg(*args, struct mystruct*);
  -	return xds_encode(xds, "int32 int64 uint32 octetstream",
  -			  ms->small, ms->big, ms->positive,
  -			  ms->text, sizeof(ms->text));
  -	}
  +                   void* buffer, size_t buffer_size,
  +                   size_t* used_buffer_size,
  +                   va_list* args)
  +    {
  +    struct mystruct* ms;
  +    ms = va_arg(*args, struct mystruct*);
  +    return xds_encode(xds, "int32 int64 uint32 octetstream",
  +              ms->small, ms->big, ms->positive,
  +              ms->text, sizeof(ms->text));
  +    }
   
   This engine takes the address of the `mystruct' structure from the
   stack and then uses xds_encode() to handle all elements of
  @@ -535,28 +542,28 @@
   Let's take a look at the corresponding decoding engine now:
   
       static int decode_mystruct(xds_t* xds, void* engine_context,
  -			       void* buffer, size_t buffer_size,
  -			       size_t* used_buffer_size,
  -			       va_list* args)
  -	{
  -	struct mystruct* ms;
  -	size_t i;
  -	char*  tmp;
  -	int rc;
  -	ms = va_arg(*args, struct mystruct*);
  -	rc = xds_decode(xds, "int32 int64 uint32 octetstream",
  -			&(ms->small), &(ms->big), &(ms->positive),
  -			&tmp, &i);
  -	if (rc == XDS_OK)
  -	    {
  -	    if (i == sizeof(ms->text))
  -		memmove(ms->text, tmp, i);
  -	    else
  -		rc = XDS_ERR_TYPE_MISMATCH;
  -	    free(tmp);
  -	    }
  -	return rc;
  -	}
  +                   void* buffer, size_t buffer_size,
  +                   size_t* used_buffer_size,
  +                   va_list* args)
  +    {
  +    struct mystruct* ms;
  +    size_t i;
  +    char*  tmp;
  +    int rc;
  +    ms = va_arg(*args, struct mystruct*);
  +    rc = xds_decode(xds, "int32 int64 uint32 octetstream",
  +            &(ms->small), &(ms->big), &(ms->positive),
  +            &tmp, &i);
  +    if (rc == XDS_OK)
  +        {
  +        if (i == sizeof(ms->text))
  +        memmove(ms->text, tmp, i);
  +        else
  +        rc = XDS_ERR_TYPE_MISMATCH;
  +        free(tmp);
  +        }
  +    return rc;
  +    }
   
   The engine simply calls xds_decode() to handle the separate data
   types. The only complication is that the octet stream decoding engines

From ossp-cvs-owner@ossp.org  Wed Jan  2 19:36:01 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1599A7650F; Wed,  2 Jan 2002 19:36:01 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/xds TODO
Message-Id: <20020102183601.1599A7650F@mail.ossp.org>
Date: Wed,  2 Jan 2002 19:36:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   02-Jan-2002 19:36:01
  Branch: HEAD                             Handle: 2002010218360000

  Modified files:
    ossp-pkg/xds            TODO

  Log:
    remember

  Summary:
    Revision    Changes     Path
    1.28        +4  -0      ossp-pkg/xds/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/xds/TODO
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 TODO
  --- ossp-pkg/xds/TODO	30 Aug 2001 14:59:19 -0000	1.27
  +++ ossp-pkg/xds/TODO	2 Jan 2002 18:36:00 -0000	1.28
  @@ -55,3 +55,7 @@
   o M8 (peti+rse) [1 week until 17-Sep-2001]
    - [peti] documentation for libamp
    - [rse]  OSSP adjustments for libamp
  +
  + ----
  +
  + change xds_init() to return xds_rc_t

From ossp-cvs-owner@ossp.org  Thu Jan  3 12:54:26 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6FC5E764EC; Thu,  3 Jan 2002 12:54:26 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Message-Id: <20020103115426.6FC5E764EC@mail.ossp.org>
Date: Thu,  3 Jan 2002 12:54:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   03-Jan-2002 12:54:26
  Branch: HEAD                             Handle: 2002010311542500

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    Remember to document the formatter functions.

  Summary:
    Revision    Changes     Path
    1.52        +25 -0      ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.51 -r1.52 TODO
  --- ossp-pkg/l2/TODO	22 Dec 2001 22:25:34 -0000	1.51
  +++ ossp-pkg/l2/TODO	3 Jan 2002 11:54:25 -0000	1.52
  @@ -184,6 +184,31 @@
       Describe whether a channel continues passing data on downstream
       if it somehow fails, and if the data will be corrupt.
   
  +- l2_util_fmt_string
  +    This can be used like %s, but instead of fetching only a "char *"
  +    from the var-args stack, it fetches a "char *" plus a "size_t" and
  +    this way allows one to log only a sub-string of a larger string
  +    without the need for any temporary buffers, etc.
  +    
  +- l2_util_fmt_dump:
  +    This can be used as "%{type}X" for dumping arbitrary octets. The
  +    parameter "type" can be either "text" (the default if only "%X"
  +    is used) for dumping the octets as text but with non-printable
  +    characters replaced by "\xXX" constructs; "hex" for dumping the
  +    octets in hexadecimal as "XX:XX:XX:XX" or "base64" for dumping the
  +    octets Base64 encoded. All three are intended for making it easier to
  +    produce reasonable L2_LEVEL_DEBUG messages without having to fiddle
  +    around with temporary buffers and having to care with non-printable
  +    characters.
  +
  +- formatter example
  +    l2_stream_formatter(st, 'D', l2_util_fmt_dump, NULL);
  +        :
  +    l2_stream_vlog(st, L2_LEVEL_DEBUG, "%{text}D %{hex}D %{base64}D\n",
  +        "foo", 12345, "foo\1bar", 7, "foo\1bar", 7, "foo\1bar", 7);
  +        :
  +    ...produces "foo\x01bar 66:6f:6f:01:62:61:72 Zm9vAWJhcg=="
  +
   High-level configuration interface
   ==================================
   Config-File (OSSP):

From ossp-cvs-owner@ossp.org  Thu Jan  3 15:22:34 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C2D8B764D1; Thu,  3 Jan 2002 15:22:33 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/xds xds.pod
Message-Id: <20020103142233.C2D8B764D1@mail.ossp.org>
Date: Thu,  3 Jan 2002 15:22:33 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   03-Jan-2002 15:22:33
  Branch: HEAD                             Handle: 2002010314223300

  Modified files:
    ossp-pkg/xds            xds.pod

  Log:
    complete revamping of XDS manual page

  Summary:
    Revision    Changes     Path
    1.15        +346 -319   ossp-pkg/xds/xds.pod
  ____________________________________________________________________________

  Index: ossp-pkg/xds/xds.pod
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 xds.pod
  --- ossp-pkg/xds/xds.pod	2 Jan 2002 18:35:51 -0000	1.14
  +++ ossp-pkg/xds/xds.pod	3 Jan 2002 14:22:33 -0000	1.15
  @@ -92,7 +92,7 @@
   engines to encode or decode the elements of the structure.
   
   The following example program (without error checking for simplicity)
  -will encode the unsigned integer 0x1234 into the XDR format (known from
  +will encode the unsigned integer 0x1234 into the B<XDR> format (known from
   Sun RPC), decode it back into the native host format, and compare the
   result to make sure it is the original value again:
   
  @@ -174,164 +174,158 @@
   Most engines will not need a context of their own, in which case C<NULL>
   should be specified here.
   
  -Please note that until the user calls xds_register() for an XDS
  -context he obtained from xds_init(), no engines are registered
  -for that context. Even the engines included in the library distribution are
  -not registered automatically.
  -
  -For engine names, any combination of the characters `a-z', `A-Z',
  -`0-9', `-', and `_' may be used; anything else is not a legal
  -engine name component.
  -
  -xds_register() may return the following return codes:
  -XDS_OK (everything went fine; the engine is registered now),
  -XDS_ERR_INVALID_ARG (either `xds', `name', or `engine'
  -are NULL or `name' contains illegal characters for an engine
  -name), or XDS_ERR_NO_MEM (failed to allocate internally
  -required buffers).
  -
  -=item int xds_unregister(xds_t* I<xds>, const char* I<name>);
  -
  -xds_unregister() will remove the engine `name' from XDS context
  -`xds'. The function will return XDS_OK in case everything went
  -fine, XDS_ERR_UNKNOWN_ENGINE in case the engine `name' is not
  -registered in `xds', or XDS_ERR_INVALID_ARG if either `xds'
  -or `name' are NULL or `name' contains illegal characters for
  -an engine name.
  -
  -=item int xds_setbuffer(xds_t* I<xds>, xds_scope_t I<flag>, void* I<buffer>, size_t I<buffer_len>);
  -
  -This function allows the user to control XDS' buffer handling: Calling it
  -will replace the buffer currently used in `xds'. The address and size of
  -that buffer are passed to xds_setbuffer() via the `buffer' and
  -`buffer_len' parameters. The `xds' parameter determines for which XDS
  -context the new buffer will be set. Furthermore, you can set `flag' to
  -either XDS_GIFT or XDS_LOAN.
  -
  -XDS_GIFT will tell XDS that the provided buffer is now owned by
  -the library and that it may be resized by calling realloc(3).
  -Furthermore, the buffer is free(3)ed when `xds' is destroyed. If
  -`flag' is XDS_GIFT and `buffer' is NULL,
  -xds_setbuffer() will simply allocate a buffer of its own to be
  -set in `xds'. Please note that a buffer given to XDS as gift B<must>
  -have been allocated using malloc(3) -- it may not live on the
  -stack because XDS will try to free or to resize the buffer as it sees fit.
  -
  -Passing XDS_LOAN via `flag' tells xds_setbuffer()
  -that the buffer is owned by the application and that XDS should not free
  -nor resize the buffer in any case. In this mode, passing a buffer of
  -NULL will result in an invalid-argument error.
  +Please note that until the user calls xds_register() for a context he
  +obtained from xds_init(), no engines are registered for that context.
  +Even the engines included in the B<OSSP xds> source distribution are not
  +registered automatically.
  +
  +For engine names, any combination of the characters a-z, A-Z, 0-9, "-",
  +and "_" may be used; anything else is not a legal engine name component.
  +
  +xds_register() may return the following return codes: C<XDS_OK>
  +(everything went fine; the engine is registered now),
  +C<XDS_ERR_INVALID_ARG> (either I<xds>, I<name>, or I<engine> are
  +C<NULL> or I<name> contains illegal characters for an engine name), or
  +C<XDS_ERR_NO_MEM> (failed to allocate internally required buffers).
  +
  +=item int B<xds_unregister>(xds_t *I<xds>, const char *I<name>);
  +
  +xds_unregister() will remove the engine I<name> from the context I<xds>.
  +The function will return C<XDS_OK> in case everything went fine,
  +C<XDS_ERR_UNKNOWN_ENGINE> in case the engine I<name> is not registered
  +in I<xds>, or C<XDS_ERR_INVALID_ARG> if either I<xds> or I<name> are
  +C<NULL> or I<name> contains illegal characters for an engine name.
  +
  +=item int B<xds_setbuffer>(xds_t *I<xds>, xds_scope_t I<flag>, void *I<buffer>, size_t I<buffer_len>);
  +
  +This function allows the user to control the buffer handling: Calling
  +it will replace the buffer currently used in I<xds>. The address and
  +size of that buffer are passed to xds_setbuffer() via the I<buffer> and
  +I<buffer_len> parameters. The I<xds> parameter determines for which
  +context the new buffer will be set. Furthermore, you can set I<flag> to
  +either C<XDS_GIFT> or C<XDS_LOAN>.
  +
  +C<XDS_GIFT> will tell B<OSSP xds> that the provided buffer is now
  +owned by the library and that it may be resized by calling realloc(3).
  +Furthermore, the buffer is free(3)'ed when I<xds> is destroyed. If
  +I<flag> is C<XDS_GIFT> and I<buffer> is C<NULL>, xds_setbuffer() will
  +simply allocate a buffer of its own to be set in I<xds>. Please note
  +that a buffer given to the library as a gift B<must> have been allocated
  +using malloc(3) -- it may not live on the stack because B<OSSP xds> will
  +try to free or to resize the buffer as it sees fit.
  +
  +Passing C<XDS_LOAN> via I<flag> tells xds_setbuffer() that the buffer is
  +owned by the application and that B<OSSP xds> should not free nor resize
  +the buffer in any case. In this mode, passing a buffer of C<NULL> will
  +result in an invalid-argument error.
   
  -=item int xds_getbuffer(xds_t* I<xds>, xds_scope_t I<flag>, void** I<buffer>, size_t* I<buffer_len>);
  +=item int B<xds_getbuffer>(xds_t *I<xds>, xds_scope_t I<flag>, void **I<buffer>, size_t *I<buffer_len>);
   
   This function is the counterpart to xds_setbuffer(): It will get
  -the buffer currently used in the XDS context `xds'. The address of that
  -buffer is stored in the location `buffer' points to; the length of the
  -buffer's content will be stored in the location `buffer_len' points to.
  -
  -The `flag' argument may be set to either XDS_GIFT or
  -XDS_LOAN. The first setting means that the buffer is now owned by
  -the application and that XDS must not use it after this
  -xds_getbuffer() call anymore; the library will allocate a new
  -internal buffer instead. Of course, this also means that the buffer will
  -not be freed by xds_destroy(); the application has to
  -free(3) the buffer itself when it is not needed anymore.
  -
  -Setting `flag' to XDS_LOAN tells XDS that the application just
  -wishes to peek into the buffer and will not modify it. The buffer is still
  -owned (and used) by XDS. Please note that the loaned address returned by
  -xds_getbuffer() may change after any other xds_xxx()
  +the buffer currently used in the context I<xds>. The address of that
  +buffer is stored in the location I<buffer> points to; the length of the
  +buffer's content will be stored in the location I<buffer_len> points to.
  +
  +The I<flag> argument may be set to either C<XDS_GIFT> or C<XDS_LOAN>.
  +The first setting means that the buffer is now owned by the application
  +and that B<OSSP xds> must not use it after this xds_getbuffer() call
  +anymore; it will allocate a new internal buffer instead. Of course,
  +this also means that the buffer will not be freed by xds_destroy();
  +the application has to free(3) the buffer itself when it is not needed
  +anymore.
  +
  +Setting I<flag> to C<XDS_LOAN> tells B<OSSP xds> that the application
  +just wishes to peek into the buffer and will not modify it. The buffer
  +is still owned (and used) by B<OSSP xds>. Please note that the loaned
  +address returned by xds_getbuffer() may change after any other xds_xxx()
   function call!
   
  -The function will return XDS_OK (everything went fine) or
  -XDS_ERR_INVALID_ARG (`xds', `buffer' or `buffer_len' are
  -NULL or `flag' is invalid) signifying success or failure
  -respectively.
  -
  -Please note: It is perfectly legal for xds_getbuffer() to return
  -a buffer of NULL and a buffer length of 0! This happens when
  -xds_getbuffer() is called for an XDS context before a buffer has
  -been allocated.
  +The function will return C<XDS_OK> (everything went fine) or
  +C<XDS_ERR_INVALID_ARG> (I<xds>, I<buffer> or I<buffer_len> are C<NULL>
  +or I<flag> is invalid) signifying success or failure respectively.
  +
  +Please note: It is perfectly legal for xds_getbuffer() to return a
  +buffer of C<NULL> and a buffer length of C<0>! This happens when
  +xds_getbuffer() is called for a fresh context before a buffer has been
  +allocated at all.
   
  -=item int xds_vencode(xds_t* I<xds>, const char* I<fmt>, va_list I<args>);
  +=item int B<xds_vencode>(xds_t *I<xds>, const char *I<fmt>, va_list I<args>);
   
   This function will encode one or several values using the appropriate
  -encoding engines registered in XDS context `xds'. The parameter `fmt'
  +encoding engines registered in the context I<xds>. The parameter I<fmt>
   contains a sprintf(3)-alike descriptions of the values to be
  -encoded; the actual values are provided in the varadic parameter `args'.
  +encoded; the actual values are provided in the varadic parameter I<args>.
   
  -The format for `fmt' is simple: Just provide the names of the engines to
  -be used for encoding the appropriate value(s) in `args'. Any non-legal
  +The format for I<fmt> is simple: Just provide the names of the engines to
  +be used for encoding the appropriate value(s) in I<args>. Any non-legal
   engine-name character may be used as a delimiter. In order to encode two
   32-bit integers followed by a 64-bit integer, the format string
   
  -    int32 int32 int64
  + int32 int32 int64
   
   could be used. In case you don't like the blank, use the colon instead:
   
  -    int32:int32:int64
  + int32:int32:int64
   
   Of course the names to be used here have to match to the names used to
  -register the engines in `xds' earlier.
  +register the engines in I<xds> earlier.
   
  -Every time xds_vencode() is called, it will append the encoded
  -data at the end of the internal buffer stored in `xds'. Thus, you can
  -call xds_vencode() several times in order to encode several
  -values, but you'll still get all encoded values stored in one buffer.
  -Calling xds_setbuffer() or xds_getbuffer() with gift
  -semantics at any point during encoding will re-set the buffer to the
  -beginning. All values that have been encoded into that buffer already will
  -eventually be overwritten when xds_encode() is called again.
  -Hence: Don't call xds_setbuffer() or xds_getbuffer()
  -unless you actually want to access the data stored in the buffer.
  -
  -Also, it should be noted that the data you have to provide for `args'
  -depends entirely on what the deployed engines expect to find on the stack
  --- there is no `standard' on what should be put on the stack here. The
  -XML and XDR engines included in the distribution will simply expect the
  -value to be encoded to be found on the stack, but other engines may act
  -differently.
  -
  -xds_vencode() will return any of the following return codes:
  -XDS_OK (everything worked fine), XDS_ERR_NO_MEM
  -(failed to allocate or to resize the internal buffer),
  -XDS_ERR_OVERFLOW (the internal buffer is too small but is not
  -owned by us), XDS_ERR_INVALID_ARG (`xds' or `fmt' are
  -NULL), XDS_ERR_UNKNOWN_ENGINE (an engine name
  -specified in `fmt' is not registered in `xds'),
  -XDS_ERR_INVALID_MODE (`xds' is initialized in decode mode),
  -or XDS_ERR_UNKNOWN (the engine returned an unspecified error).
  +Every time xds_vencode() is called, it will append the encoded data
  +at the end of the internal buffer stored in I<xds>. Thus, you can
  +call xds_vencode() several times in order to encode several values,
  +but you'll still get all encoded values stored in one buffer. Calling
  +xds_setbuffer() or xds_getbuffer() with gift semantics at any point
  +during encoding will re-set the buffer to the beginning. All values
  +that have been encoded into that buffer already will eventually be
  +overwritten when xds_encode() is called again. Hence: Don't call
  +xds_setbuffer() or xds_getbuffer() unless you actually want to access
  +the data stored in the buffer.
  +
  +Also, it should be noted that the data you have to provide for I<args>
  +depends entirely on what the deployed engines expect to find on the
  +stack -- there is no "standard" on what should be put on the stack here.
  +The B<XML> and B<XDR> engines included in the distribution will simply expect
  +the value to be encoded to be found on the stack, but other engines may
  +act differently.
  +
  +xds_vencode() will return any of the following return codes: C<XDS_OK>
  +(everything worked fine), C<XDS_ERR_NO_MEM> (failed to allocate or to
  +resize the internal buffer), C<XDS_ERR_OVERFLOW> (the internal buffer
  +is too small but is not owned by us), C<XDS_ERR_INVALID_ARG> (I<xds> or
  +I<fmt> are C<NULL>), C<XDS_ERR_UNKNOWN_ENGINE> (an engine name specified
  +in I<fmt> is not registered in I<xds>), C<XDS_ERR_INVALID_MODE> (I<xds>
  +is initialized in decode mode), or C<XDS_ERR_UNKNOWN> (the engine
  +returned an unspecified error).
   
  -=item int xds_encode(xds_t* I<xds>, const char* I<fmt>, ...);
  +=item int B<xds_encode>(xds_t *I<xds>, const char *I<fmt>, ...);
   
   This function is basically identical to xds_vencode(), only that
   it uses a different prototype syntax.
   
  -=item int xds_vdecode(xds_t* I<xds>, const char* I<fmt>, va_list I<args>);
  +=item int B<xds_vdecode>(xds_t *I<xds>, const char *I<fmt>, va_list I<args>);
   
  -This function is almost identical to xds_vencode(): It expects an
  -XDS context, a format string and a set of parameters for the engines, but
  -xds_vdecode() does not encode any data, it decodes the data back
  -into the native format. The format string determines which engines are to
  -be called by the framework in order to decode the values contained in the
  +This function is almost identical to xds_vencode(): It expects a
  +context, a format string and a set of parameters for the engines, but
  +xds_vdecode() does not encode any data, it decodes the data back into
  +the native format. The format string determines which engines are to be
  +called by the framework in order to decode the values contained in the
   buffer. The values will then be stored at the locations found in the
  -corresponding `args' entry. But please note that the exact behavior of
  -the decoding engines is not specified! The XML and XDR engines included in
  -this distribution expect a pointer to a location where to store the decoded
  -value, but other engines may vary.
  -
  -xds_vdecode() may return any of the following return codes:
  -XDS_OK (everything went fine), XDS_ERR_INVALID_ARG
  -(`xds' or `fmt' are NULL), XDS_ERR_TYPE_MISMATCH
  -(the format string says the next value is of type $A$, but that's not what
  -we found in the buffer), XDS_ERR_UNKNOWN_ENGINE (an engine name
  -specified in `fmt' is not registered in `xds'),
  -XDS_ERR_INVALID_MODE (`xds' has been initialized in encode
  -mode), XDS_ERR_UNDERFLOW (an engine tried to read $n$ bytes
  -from the buffer, but we don't have that much data left), or
  -XDS_ERR_UNKNOWN (an engine returned an unspecified error).
  +corresponding I<args> entry. But please note that the exact behavior of
  +the decoding engines is not specified! The B<XML> and B<XDR> engines included
  +in this distribution expect a pointer to a location where to store the
  +decoded value, but other engines may vary.
  +
  +xds_vdecode() may return any of the following return codes: C<XDS_OK>
  +(everything went fine), C<XDS_ERR_INVALID_ARG> (I<xds> or I<fmt> are
  +C<NULL>), C<XDS_ERR_TYPE_MISMATCH> (the format string says the next
  +value is of a particular type, but that's not what we found in the
  +buffer), C<XDS_ERR_UNKNOWN_ENGINE> (an engine name specified in I<fmt>
  +is not registered in I<xds>), C<XDS_ERR_INVALID_MODE> (I<xds> has
  +been initialized in encode mode), C<XDS_ERR_UNDERFLOW> (an engine
  +tried to read more bytes from the buffer than what is data left), or
  +C<XDS_ERR_UNKNOWN> (an engine returned an unspecified error).
   
  -=item int xds_decode(xds_t* I<xds>, const char* I<fmt>, ...);
  +=item int B<xds_decode>(xds_t *I<xds>, const char *I<fmt>, ...);
   
   This function is basically identical to xds_vdecode(), only that
   it uses a different prototype syntax.
  @@ -340,125 +334,137 @@
   
   =head1 THE XDR ENGINES
   
  -  Function Name             Expected `args'     Input      Output
  - -----------------------------------------------------------------
  -  xdr_encode_uint32()        xds_uint32_t      4 bytes    4 bytes
  -  xdr_decode_uint32()        xds_uint32_t*     4 bytes    4 bytes
  -  xdr_encode_int32()         xds_int32_t       4 bytes    4 bytes
  -  xdr_decode_int32()         xds_int32_t*      4 bytes    4 bytes
  -  xdr_encode_uint64()        xds_uint64_t      4 bytes    4 bytes
  -  xdr_decode_uint64()        xds_uint64_t*     4 bytes    4 bytes
  -  xdr_encode_int64()         xds_int64_t       4 bytes    4 bytes
  -  xdr_decode_int64()         xds_int64_t*      4 bytes    4 bytes
  -  xdr_encode_float()         xds_float_t       4 bytes    4 bytes
  -  xdr_decode_float()         xds_float_t*      4 bytes    4 bytes
  -  xdr_encode_double()        xds_double_t      8 bytes    8 bytes
  -  xdr_decode_double()        xds_double_t*     8 bytes    8 bytes
  -  xdr_encode_octetstream()   void*, size_t     variable   variable
  -  xdr_decode_octetstream()   void**, size_t*   variable   variable
  -  xdr_encode_string()        char*             variable   variable
  -  xdr_decode_string()        char**            variable   variable
  +The B<OSSP xds> distribution ships with a set of engine functions which
  +implement the encoding and decoding for the B<XDR> encoding known from
  +Sun RPC.
  +
  + Function Name            Expected `args' Input    Output
  + ----------------------------------------------------------
  + xdr_encode_uint32()      xds_uint32_t    4 bytes  4 bytes
  + xdr_decode_uint32()      xds_uint32_t*   4 bytes  4 bytes
  + xdr_encode_int32()       xds_int32_t     4 bytes  4 bytes
  + xdr_decode_int32()       xds_int32_t*    4 bytes  4 bytes
  + xdr_encode_uint64()      xds_uint64_t    4 bytes  4 bytes
  + xdr_decode_uint64()      xds_uint64_t*   4 bytes  4 bytes
  + xdr_encode_int64()       xds_int64_t     4 bytes  4 bytes
  + xdr_decode_int64()       xds_int64_t*    4 bytes  4 bytes
  + xdr_encode_float()       xds_float_t     4 bytes  4 bytes
  + xdr_decode_float()       xds_float_t*    4 bytes  4 bytes
  + xdr_encode_double()      xds_double_t    8 bytes  8 bytes
  + xdr_decode_double()      xds_double_t*   8 bytes  8 bytes
  + xdr_encode_octetstream() void*, size_t   variable variable
  + xdr_decode_octetstream() void**, size_t* variable variable
  + xdr_encode_string()      char*           variable variable
  + xdr_decode_string()      char**          variable variable
   
   Please note that the functions xdr_decode_octetstream() and
  -xdr_decode_string() return a pointer to a buffer holding the
  -decoded data. This buffer has been allocated with malloc(3) and
  -must be free(3)ed by the application when it is not required
  -anymore. All other callbacks write the decoded value into the location
  -found on the stack, but these behave differently because the length of the
  -decoded data is not known in advance and the application cannot provide a
  -buffer that's guaranteed to suffice.
  +xdr_decode_string() return a pointer to a buffer holding the decoded
  +data. This buffer has been allocated with malloc(3) and must be
  +free(3)'ed by the application when it is not required anymore. All other
  +callbacks write the decoded value into the location found on the stack,
  +but these behave differently because the length of the decoded data is
  +not known in advance and the application cannot provide a buffer that's
  +guaranteed to suffice.
   
   =head1 THE XML ENGINES
   
  -  Function Name             Expected `args'      Input         Output
  - ------------------------------------------------------------------------
  -  xml_encode_uint32()        xds_uint32_t      4 bytes       8-27 bytes
  -  xml_decode_uint32()        xds_uint32_t*     18-27 bytes   4 bytes
  -  xml_encode_int32()         xds_int32_t       4 bytes       16-26 bytes
  -  xml_decode_int32()         xds_int32_t*      16-26 bytes   4 bytes
  -  xml_encode_uint64()        xds_uint64_t      8 bytes       18-37 bytes
  -  xml_decode_uint64()        xds_uint64_t*     18-37 bytes   8 bytes
  -  xml_encode_int64()         xds_int64_t       8 bytes       16-36 bytes
  -  xml_decode_int64()         xds_int64_t*      16-36 bytes   8 bytes
  -  xml_encode_float()         xds_float_t       4 bytes       variable
  -  xml_decode_float()         xds_float_t*      variable      4 bytes
  -  xml_encode_double()        xds_double_t      8 bytes       variable
  -  xml_decode_double()        xds_double_t*     variable      8 bytes
  -  xml_encode_octetstream()   void*, size_t     variable      variable
  -  xml_decode_octetstream()   void**, size_t*   variable      variable
  -  xml_encode_string()        char*             variable      variable
  -  xml_decode_string()        char**            variable      variable
  +The B<OSSP xds> distribution ships with a set of engine functions which
  +implement the encoding and decoding for an B<XML> based format specified by
  +the included B<XML> DTD.
  +
  + Function Name            Expected `args' Input       Output
  + ----------------------------------------------------------------
  + xml_encode_uint32()      xds_uint32_t    4 bytes     8-27 bytes
  + xml_decode_uint32()      xds_uint32_t*   18-27 bytes 4 bytes
  + xml_encode_int32()       xds_int32_t     4 bytes     16-26 bytes
  + xml_decode_int32()       xds_int32_t*    16-26 bytes 4 bytes
  + xml_encode_uint64()      xds_uint64_t    8 bytes     18-37 bytes
  + xml_decode_uint64()      xds_uint64_t*   18-37 bytes 8 bytes
  + xml_encode_int64()       xds_int64_t     8 bytes     16-36 bytes
  + xml_decode_int64()       xds_int64_t*    16-36 bytes 8 bytes
  + xml_encode_float()       xds_float_t     4 bytes     variable
  + xml_decode_float()       xds_float_t*    variable    4 bytes
  + xml_encode_double()      xds_double_t    8 bytes     variable
  + xml_decode_double()      xds_double_t*   variable    8 bytes
  + xml_encode_octetstream() void*, size_t   variable    variable
  + xml_decode_octetstream() void**, size_t* variable    variable
  + xml_encode_string()      char*           variable    variable
  + xml_decode_string()      char**          variable    variable
   
   Please note that the functions xml_decode_octetstream() and
   xml_decode_string() return a pointer to a buffer holding the decoded
   data. This buffer has been allocated with malloc(3) and must be
  -free(3)ed by the application when it is not required anymore. All
  -other callbacks write the decoded value into the location found on the
  -stack, but these behave differently because the length of the decoded data
  -is not known in advance and the application cannot provide a buffer that's
  +free(3)ed by the application when it is not required anymore. All other
  +callbacks write the decoded value into the location found on the stack,
  +but these behave differently because the length of the decoded data is
  +not known in advance and the application cannot provide a buffer that's
   guaranteed to suffice.
   
  -=head1 EXTENDING THE XDS LIBRARY
  +=head1 EXTENDING THE LIBRARY
   
  -This section demonstrates, how to write a `meta engine' and for the
  -XDS framework. The example engine will encode a complex data
  -structure, consisting of three elementary data types. The structure is
  -defined as follows:
  -
  -    struct mystruct
  -    {
  -    xds_int32_t   small;
  -    xds_int64_t   big;
  -    xds_uint32_t  positive;
  -    char          text[16];
  -    };
  +This section demonstrates how to write a "meta engine" for the B<OSSP
  +xds> framework. The example engine will encode a complex data structure,
  +consisting of three elementary data types. The structure is defined as
  +follows:
  +
  + struct mystruct {
  +     xds_int32_t   small;
  +     xds_int64_t   big;
  +     xds_uint32_t  positive;
  +     char          text[16];
  + };
   
   Some readers might wonder why the structure is defined using these
  -weird data types rather than the familiar ones like int, long, etc.
  -The reason is that these data types have an undefined size. An int
  -variable will have, say, 32 bits when compiled on the average Unix
  -machine, but when the same program is compiled on a 64-bit machine
  -like TRUE64 Unix, it will have a size of 64 bit. That is a problem
  +weird data types rather than the familiar ones like C<int>, C<long>,
  +etc. The reason is that these data types have an undefined size. An
  +C<int> variable will have, say, 32 bits when compiled on the average
  +Unix machine, but when the same program is compiled on a 64-bit machine
  +like Tru64 Unix, it will have a size of 64 bit. This is a problem
   when those structures have to be exchanged between entirely different
   systems, because the structures are binary incompatible -- something
  -even XDS cannot remedy.
  +even B<OSSP xds> cannot remedy, because it is impossible to construct a
  +bidirectional and lossless mapping in this case.
   
   In order to encode an instance of this structure, we write an encoding
   engine:
   
  -    static int encode_mystruct(xds_t* xds, void* engine_context,
  -                   void* buffer, size_t buffer_size,
  -                   size_t* used_buffer_size,
  -                   va_list* args)
  -    {
  -    struct mystruct* ms;
  -    ms = va_arg(*args, struct mystruct*);
  -    return xds_encode(xds, "int32 int64 uint32 octetstream",
  -              ms->small, ms->big, ms->positive,
  -              ms->text, sizeof(ms->text));
  -    }
  -
  -This engine takes the address of the `mystruct' structure from the
  -stack and then uses xds_encode() to handle all elements of
  -`mystruct' separately -- which is fine, because these data types
  -are supperted by XDS already. It is worth noting, though, that we
  -refer to the other engines by name, meaning that these engines must be
  -registered in `xds' by that name!
  + static int 
  + encode_mystruct(
  +     xds_t *xds, void *engine_context,
  +     void *buffer, size_t buffer_size,
  +     size_t *used_buffer_size,
  +     va_list *args)
  + {
  +     struct mystruct *ms;
  +
  +     ms = va_arg(*args, struct mystruct*);
  +     return xds_encode(xds, "int32 int64 uint32 octetstream",
  +                       ms->small, ms->big, ms->positive,
  +                       ms->text, sizeof(ms->text));
  + }
  +
  +This engine takes the address of the I<mystruct> structure from the
  +stack and then uses xds_encode() to handle all elements of I<mystruct>
  +separately -- which is fine, because these data types are supported
  +by B<OSSP xds> already (both by the shipped B<XDR> and B<XML> engines). It
  +is worth noting, though, that we refer to the other engines by name,
  +meaning that these engines must be registered in I<xds> by that name
  +before!
   
   What is very nice, though, is the fact that this encoding engine does
  -not even need to know which engines are used to encode the actual
  -values! If the user registeres the XDR engines under the appropriate
  -names, `mystruct' will be encoded in XDR. If the user registeres the
  -XML engines under the appropriate names, `mystruct' will be encoded
  -in XML. Because of that property, we call such an engine a `meta
  -engine'.
  +not even need to know which particular engines are used to encode the
  +actual values! If the user registere the B<XDR> engines under the
  +appropriate names, I<mystruct> will be encoded in B<XDR>. If the user
  +registers the B<XML> engines under the appropriate names, I<mystruct>
  +will be encoded in B<XML>. Because of that property, we call such an
  +engine a "meta engine".
   
  -Of coures you need not necessarily implement an engine as B<meta>
  -engine: Rather than going through xds_encode(), it would be possible
  +Of coures you need not necessarily implement an engine as a "meta
  +engine": Rather than going through xds_encode(), it would be possible
   to execute the appropriate encoding engines directly. This had the
  -advantage of not depending on those engines being registered at all,
  -but it would make the custom engine depend on the elementary engines
  --- what is an unnecessary limitation.
  +advantage of not depending on those engines being registered at all, but
  +it would make the custom engine depend on the elementary engines -- what
  +is an unnecessary limitation.
   
   One more word about the engine syntax and semantics: As has been
   mentioned earlier, any function that adheres to the interface shown
  @@ -467,122 +473,143 @@
   
   =over 4
   
  -=item xds -- This is the XDS context that was originally provided to
  -the xds_encode() call, which in turn executed the engine. It may be
  -used, for example, for executing xds_encode() again like we did in our
  -example engines.
  -
  -=item engine_context -- The engine context can be used by the engine
  -to store any type of internal information. The value the engine will
  -receive must have been provided when the engine was registered by
  -xds_register(). Engines obviously may neglect this parameter if they
  -don't need a context of their own -- all engines included in the
  -distribution do so.
  -
  -=item buffer -- This parameter points to the buffer the encoded data
  -should be written to. In decoding mode, `buffer' points to the
  -encoded data, which should be decoded; the location where the results
  -should be stored at can be found on the stack then.
  -
  -=item buffer_size -- The number of bytes available in `buffer'. In
  -encoding mode, this means `free space', in decoding mode,
  -`buffer_size' determines how many bytes of encoded data are
  -available in `buffer' for consumption.
  -
  -=item used_buffer_size -- This parameter points to a variable, which
  -the callback must set before returning in order to let the framework
  -know how many bytes it consumed from `buffer'. A callback encoding,
  -say, an int32 number into a 8 bytes text representation would set the
  -used_buffer_size to 8:
  -
  -    *used_buffer_size = 8;
  -
  -In encoding mode, this variable determines how many bytes the engine
  -has written into `buffer'; in decoding mode the variable determines
  -how many bytes the engines has read from `buffer'.
  +=item I<xds>
  +
  +This is the B<OSSP xds> context that was originally provided to the
  +xds_encode() call, which in turn executed the engine. It may be used,
  +for example, for executing xds_encode() again like we did in our example
  +engines.
  +
  +=item I<engine_context>
  +
  +The engine context can be used by the engine to store any type of
  +internal information. The value the engine will receive must have been
  +provided when the engine was registered by xds_register(). Engines
  +obviously may neglect this parameter if they don't need a context of
  +their own -- all engines included in the distribution do so.
  +
  +=item I<buffer> 
  +
  +This parameter points to the buffer the encoded data should be written
  +to. In decoding mode, I<buffer> points to the encoded data, which should
  +be decoded; the location where the results should be stored at can be
  +found on the stack then.
  +
  +=item I<buffer_size>
  +
  +The number of bytes available in I<buffer>. In encoding mode, this means
  +"free space", in decoding mode, I<buffer_size> determines how many bytes
  +of encoded data are available in I<buffer> for consumption.
  +
  +=item I<used_buffer_size>
  +
  +This parameter points to a variable, which the callback must set before
  +returning in order to let the framework know how many bytes it consumed
  +from I<buffer>. A callback encoding, say, an int32 number into a 8 bytes
  +text representation would set the used_buffer_size to 8:
  +
  + *used_buffer_size = 8;
  +
  +In encoding mode, this variable determines how many bytes the engine has
  +written into I<buffer>; in decoding mode the variable determines how
  +many bytes the engines has read from I<buffer>.
   
  -=item args -- This pointer points to an initialized varadic argument.
  +=item I<args>
  +
  +This pointer points to an initialized varadic argument.
   Use the standard C macro va_arg(3) to fetch the actual data.
   
   =back
   
   A callback may return any of the following return codes, as defined in
  -xds.h:
  +F<xds.h>:
   
   =over 4
   
  -=item XDS_OK -- No error.
  +=item C<XDS_OK>
  +
  +No error.
  +
  +=item C<XDS_ERR_NO_MEM>
  +
  +Failed to allocate required memory.
  +
  +=item C<XDS_ERR_OVERFLOW>
  +
  +The buffer is too small to hold all encoded data. The callback may set
  +*I<used_buffer_size> to the number of bytes it needs in I<buffer>,
  +thereby giving the framework a hint by how many bytes it should
  +enlarge the buffer before trying the engine again, but just leaving
  +*I<used_buffer_size> alone will work fine too, it may just be a bit less
  +efficient in some cases. Obviously this return code does not make much
  +sense in decoding mode.
  +
  +=item C<XDS_ERR_INVALID_ARG>
  +
  +Unexpected or incorrect parameters.
  +
  +=item C<XDS_ERR_TYPE_MISMATCH>
   
  -=item XDS_ERR_NO_MEM -- Failed to allocate required memory.
  +This return code will be returned in decoding mode in case the decoding
  +engine realizes that the data it is decoding does not fit what it is
  +expecting. Not all encoding formats will allow to detect this at all.
  +B<XDR>, for example, does not.
   
  -=item XDS_ERR_OVERFLOW -- The buffer is too small to hold all encoded
  -data. The callback may set `*used_buffer_size' to the number of bytes
  -it needs in `buffer', thereby giving the framework a hint by how many
  -bytes it should enlarge the buffer before trying the engine again, but just
  -leaving `*used_buffer_size' alone will work fine too, it may just be a
  -bit less efficient in some cases. Obviously this return code does not make
  -much sense in decoding mode.
  -
  -=item XDS_ERR_INVALID_ARG -- Unexpected or incorrect parameters.
  -
  -=item XDS_ERR_TYPE_MISMATCH -- This return code will be returned in
  -decoding mode in case the decoding engine realizes that the data it is
  -decoding does not fit what it is expecting. Not all encoding formats will
  -allow to detect this at all. XDR, for example, does not.
  -
  -=item XDS_ERR_UNDERFLOW -- In decode mode, this error is be returned
  -when an engine needs, say, 4 bytes of data in order to decode a value but
  -`buffer'/'buffer_size' provides less.
  +=item C<XDS_ERR_UNDERFLOW>
   
  -=item XDS_ERR_UNKNOWN -- Any other reason to fail than those listed
  -before. Catch all ...
  +In decode mode, this error is be returned when an engine needs, say, 4
  +bytes of data in order to decode a value but I<buffer>/I<buffer_size>
  +provides less.
  +
  +=item C<XDS_ERR_UNKNOWN>
  +
  +Any other reason to fail than those listed before. Catch all...
   
   =back
   
  -Let's take a look at the corresponding decoding engine now:
  +Let's take a look at the corresponding decoding "meta engine" now:
   
  -    static int decode_mystruct(xds_t* xds, void* engine_context,
  -                   void* buffer, size_t buffer_size,
  -                   size_t* used_buffer_size,
  -                   va_list* args)
  -    {
  -    struct mystruct* ms;
  -    size_t i;
  -    char*  tmp;
  -    int rc;
  -    ms = va_arg(*args, struct mystruct*);
  -    rc = xds_decode(xds, "int32 int64 uint32 octetstream",
  -            &(ms->small), &(ms->big), &(ms->positive),
  -            &tmp, &i);
  -    if (rc == XDS_OK)
  -        {
  + static int 
  + decode_mystruct(
  +     xds_t *xds, void *engine_context,
  +     void *buffer, size_t buffer_size,
  +     size_t *used_buffer_size,
  +     va_list *args)
  + {
  +     struct mystruct *ms;
  +     size_t i;
  +     char *tmp;
  +     int rc;
  +
  +     ms = (struct mystruct *)va_arg(*args, void *);
  +     rc = xds_decode(xds, "int32 int64 uint32 octetstream",
  +                     &(ms->small), &(ms->big), &(ms->positive),
  +                     &tmp, &i);
  +     if (rc == XDS_OK) {
           if (i == sizeof(ms->text))
  -        memmove(ms->text, tmp, i);
  +            memmove(ms->text, tmp, i);
           else
  -        rc = XDS_ERR_TYPE_MISMATCH;
  +            rc = XDS_ERR_TYPE_MISMATCH;
           free(tmp);
  -        }
  -    return rc;
  -    }
  -
  -The engine simply calls xds_decode() to handle the separate data
  -types. The only complication is that the octet stream decoding engines
  -return a pointer to malloc(3)ed buffer -- what is not what we
  -need. Thus we have to manually copy the contents of that buffer into the
  -right place in the structure and free the (now unused) buffer again.
  +     }
  +     return rc;
  + }
   
  -A complete example program encoding and decoding `mystruct' can be found
  -at docs/extended.c in the distribution.
  +The engine simply calls xds_decode() to handle the separate data types.
  +The only complication is that the octet stream decoding engines return a
  +pointer to malloc(3)ed buffer -- what is not what we need. Thus we have
  +to manually copy the contents of that buffer into the right place in the
  +structure and free the (now unused) buffer again.
   
  -=head1 SO ALSO
  +A complete example program encoding and decoding C<mystruct> can be
  +found as F<docs/extended.c> in the B<OSSP xds> source distribution.
   
  -=over 4
  +=head1 SEE ALSO
   
  -=item RFC 1832: `XDR: External Data Representation Standard',
  +RFC 1832: `XDR: External Data Representation Standard',
   R. Srinivasan, August 1995
   
  -=item XML-RPC Home Page: http://www.xmlrpc.org/
  -
  -=back
  +XML-RPC Home Page: http://www.xmlrpc.org/
   
   =cut
  +

From ossp-cvs-owner@ossp.org  Thu Jan  3 16:23:19 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A6F0E764D1; Thu,  3 Jan 2002 16:23:19 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Message-Id: <20020103152319.A6F0E764D1@mail.ossp.org>
Date: Thu,  3 Jan 2002 16:23:19 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   03-Jan-2002 16:23:19
  Branch: HEAD                             Handle: 2002010315231900

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    updates

  Summary:
    Revision    Changes     Path
    1.53        +0  -3      ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.52 -r1.53 TODO
  --- ossp-pkg/l2/TODO	3 Jan 2002 11:54:25 -0000	1.52
  +++ ossp-pkg/l2/TODO	3 Jan 2002 15:23:19 -0000	1.53
  @@ -84,12 +84,9 @@
       incoming callbacks.
   
   Library-wide changes --------------------------------------
  -- Replace l2_sockmon with netcat or peep.
   - Add nonreentrant log method like mm.
   - Add striptease target to Makefile.
  -- Provide a C++ implementation also.
   - l2tool needs an [addr:]port option
  -- Adjust license to ISC/MIT/BSD.
   - API access through the LogManager logm;
   - Jump to a callback in case of error, throw/exit.
   - Offer the option to reopen the logfile on each write.

From ossp-cvs-owner@ossp.org  Thu Jan  3 17:12:52 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D536F764D1; Thu,  3 Jan 2002 17:12:51 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 Makefile.in configure.ac l2_syslog.c
Message-Id: <20020103161251.D536F764D1@mail.ossp.org>
Date: Thu,  3 Jan 2002 17:12:51 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   03-Jan-2002 17:12:51
  Branch: HEAD                             Handle: 2002010316125100

  Added files:
    ossp-pkg/l2             l2_syslog.c
  Modified files:
    ossp-pkg/l2             Makefile.in configure.ac

  Log:
    integrate first cut of l2syslog stuff

  Summary:
    Revision    Changes     Path
    1.42        +10 -2      ossp-pkg/l2/Makefile.in
    1.18        +6  -0      ossp-pkg/l2/configure.ac
    1.1         +244 -0     ossp-pkg/l2/l2_syslog.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.41 -r1.42 Makefile.in
  --- ossp-pkg/l2/Makefile.in	2 Jan 2002 17:07:38 -0000	1.41
  +++ ossp-pkg/l2/Makefile.in	3 Jan 2002 16:12:51 -0000	1.42
  @@ -57,9 +57,9 @@
   LIBTOOL     = ./libtool
   
   TARGET       = $(TARGET_LIBS) $(TARGET_MANS) $(TARGET_PROGS)
  -TARGET_LIBS  = libl2.la
  +TARGET_LIBS  = libl2.la libl2syslog.la
   TARGET_MANS  = l2tool.1 l2-config.1 l2.3
  -TARGET_PROGS = l2tool l2_test
  +TARGET_PROGS = l2tool l2_test l2_test_syslog
   
   #   list of library object files
   OBJS = \
  @@ -137,6 +137,9 @@
   libl2.la: $(OBJS)
   	$(LIBTOOL) --mode=link --quiet $(CC) -o libl2.la $(OBJS) -rpath $(libdir) \
   	    -version-info `$(SHTOOL) version -l c -d libtool l2_version.c`
  +libl2syslog.la: l2_syslog.lo libl2.la
  +	$(LIBTOOL) --mode=link --quiet $(CC) -o libl2syslog.la l2_syslog.lo libl2.la -rpath $(libdir) \
  +	    -version-info `$(SHTOOL) version -l c -d libtool l2_version.c`
   
   #   build regex library
   l2_ut_pcre.lo: l2_ut_pcre.tab l2_ut_pcre.c
  @@ -158,6 +161,8 @@
   	$(LIBTOOL) --mode=link --quiet $(CC) $(LDFLAGS) -o l2tool l2tool.o libl2.la $(LIBS)
   l2_test: l2_test.o libl2.la
   	$(LIBTOOL) --mode=link --quiet $(CC) $(LDFLAGS) -o l2_test l2_test.o libl2.la $(LIBS)
  +l2_test_syslog: l2_test_syslog.o libl2syslog.la libl2.la
  +	$(LIBTOOL) --mode=link --quiet $(CC) $(LDFLAGS) -o l2_test_syslog l2_test_syslog.o libl2syslog.la libl2.la $(LIBS)
   
   #   build Unix manual pages
   l2tool.1: l2tool.pod l2_version.c
  @@ -196,11 +201,14 @@
   	$(SHTOOL) install -c -m 644 l2.h $(DESTDIR)$(includedir)/l2.h
   	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 \
   	    libl2.la $(DESTDIR)$(libdir)/libl2.la
  +	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 \
  +	    libl2syslog.la $(DESTDIR)$(libdir)/libl2syslog.la
   
   #   perform standard uninstallation procedure
   uninstall:
   	$(MAKE) $(MFLAGS) uninstall-c uninstall-std
   uninstall-c:
  +	@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libl2syslog.la
   	@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libl2.la
   	$(RM) $(DESTDIR)$(includedir)/l2.h
   	$(RM) $(DESTDIR)$(mandir)/man3/l2.3
  Index: ossp-pkg/l2/configure.ac
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 configure.ac
  --- ossp-pkg/l2/configure.ac	2 Jan 2002 17:07:38 -0000	1.17
  +++ ossp-pkg/l2/configure.ac	3 Jan 2002 16:12:51 -0000	1.18
  @@ -78,6 +78,12 @@
   
   AC_CHECK_FUNCS(inet_aton inet_pton inet_ntoa inet_ntop snprintf vsnprintf setitimer)
   
  +case $PLATFORM in
  +    *-*-solaris2.[[6-8]]* )
  +        AC_DEFINE(HAVE_VSYSLOG_USVALIST)
  +        ;;
  +esac
  +
   sinclude(l2_ut_sa.ac)
   SA_CHECK_ALL
   
  Index: ossp-pkg/l2/l2_syslog.c
  ============================================================
  $ cvs update -p -r1.1 l2_syslog.c
  /*
  **  L2 - OSSP Logging Library
  **  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP L2, a flexible logging library which
  **  can be found at http://www.ossp.org/pkg/l2/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  l2_syslog.c: syslog(3) faked API library
  */
  
  /* standard includes we use */
  #include <stdio.h>
  #include <stdlib.h>
  #include <stdarg.h>
  #include <errno.h>
  #include <string.h>
  #include <unistd.h>
  #include <time.h>
  #include <sys/time.h>
  
  /* own includes */
  #include "l2.h"
  #include "l2_p.h"
  
  /* standard include we re-implement */
  #include <syslog.h>
  
  /* default for the dedicated logfile */
  #ifndef LOGFILE
  #define LOGFILE "/tmp/syslog"
  #endif
  
  #ifndef LOG_PRIMASK
  #define LOG_PRIMASK (LOG_EMERG|LOG_ALERT|LOG_CRIT|LOG_ERR|LOG_WARNING|LOG_NOTICE|LOG_INFO|LOG_DEBUG)
  #endif
  #ifndef LOG_PRI
  #define LOG_PRI(p) ((p) & LOG_PRIMASK)
  #endif
  
  /* log level to string mapping */
  static struct {
      int level;
      char *string;
  } level2string[] = {
      { LOG_EMERG,   "emerg"    },
      { LOG_ALERT,   "alert"    },
      { LOG_CRIT,    "crit"     },
      { LOG_ERR,     "err"      },
      { LOG_WARNING, "warning"  },
      { LOG_NOTICE,  "notice"   },
      { LOG_INFO,    "info"     },
      { LOG_DEBUG,   "debug"    },
      { 0,           NULL       }
  };
  
  /* internal context structure */
  static struct {
      FILE *log;
      char *logfile;
      const char *ident;
      int logopt;
      int facility;
      int maskpri;
  } ctx = { 
      NULL, LOGFILE, "unknown", 0, LOG_USER, 0xff
  };
  
  void openlog(const char *ident, int logopt, int facility)
  {
      /* remember parameters */
      ctx.ident    = ident;
      ctx.logopt   = logopt;
      ctx.facility = facility;
  
      /* close perhaps still open logfile */
      if (ctx.log != NULL) {
          fclose(ctx.log);
          ctx.log = NULL;
      }
  
      /* (re-)open new logfile */
      if (!(ctx.logopt & LOG_NDELAY) && ctx.log == NULL)
          if ((ctx.log = fopen(ctx.logfile, "a")) == NULL)
              return;
      return;
  }
  
  void closelog(void)
  {
      /* close open logfile*/
      if (ctx.log != NULL) {
          fclose(ctx.log);
          ctx.log = NULL;
      }
      return;
  }
  
  int setlogmask(int maskpri)
  {
      int omask;
  
      /* remember the logging mask */
      omask = ctx.maskpri;
      if (maskpri != 0)
          ctx.maskpri = maskpri;
      return omask;
  }
  
  void syslog(int priority, const char *message, ...)
  {
      va_list args;
  
      /* wrap around vsyslog(3) */
      va_start(args, message);
      vsyslog(priority, message, args);
      va_end(args);
      return;
  }
  
  #ifdef HAVE_VSYSLOG_USVALIST
  void vsyslog(int priority, const char *fmt, __va_list args)
  #else
  void vsyslog(int priority, const char *fmt, va_list args)
  #endif
  {
      time_t now;
      int saved_errno;
      char buf[2048];
      char *cpBuf;
      int nBuf;
      char caMsg[2048];
      char *cpMsg;
      char *cpFmt;
      int i;
      char *cpTime;
      char *cpLevel;
  
      /* Check for invalid bits */
      if (priority & ~(LOG_PRIMASK|LOG_FACMASK))
          priority &= (LOG_PRIMASK|LOG_FACMASK);
  
      /* stop processing if mask disabled this call */
      if (!(LOG_MASK(LOG_PRI(priority)) & ctx.maskpri))
          return;
  
      /* make sure we have a reasonable default for facility */
      if ((priority & LOG_FACMASK) == 0)
          priority |= ctx.facility;
  
      /* remember errno for optional %m processing below */
      saved_errno = errno;
  
      /* open logfile now (if it was delayed) */
      if (ctx.log == NULL)
          if ((ctx.log = fopen(ctx.logfile, "a")) == NULL)
              return;
  
      /* determine current time */
      time(&now);
      cpTime = ctime(&now) + 4;
  
      /* determine logging level name */
      cpLevel = "unknown";
      for (i = 0; level2string[i].string != NULL; i++) {
          if (LOG_PRI(priority) == level2string[i].level) {
              cpLevel = level2string[i].string;
              break;
          }
      }
      
      /* start output generation */
      cpBuf = buf;
      sprintf(cpBuf, "%.15s <%s> %s", cpTime, cpLevel, ctx.ident);
      nBuf = strlen(cpBuf);
  
      /* optionally add process id */
      if (ctx.logopt & LOG_PID) {
          sprintf(cpBuf+nBuf, "[%d]", getpid());
          nBuf += strlen(cpBuf+nBuf);
      }
  
      /* end prefix */
      strcpy(cpBuf+nBuf, ": ");
      nBuf += 2;
  
      /* optionally expand %m in format string */
      cpFmt = (char *)fmt;
      if (strstr(cpFmt, "%m")) {
          cpMsg = caMsg;
          while (cpFmt[0] != '\0') {
              if (cpFmt[0] == '%' && cpFmt[1] == 'm') {
                  strcpy(cpMsg, strerror(saved_errno));
                  cpMsg += strlen(cpMsg);
                  cpFmt += 2;
              } else {
                  *cpMsg++ = *cpFmt++;
                  *cpMsg = '\0';
              }
          }
          cpFmt = caMsg;
      }
  
      /* append message to output buffer */
      vsprintf(cpBuf+nBuf, cpFmt, args);
      nBuf += strlen(cpBuf+nBuf);
  
      /* append newline if still not present */
      if (cpBuf[nBuf-1] != '\n') {
          cpBuf[nBuf++] = '\n';
          cpBuf[nBuf] = '\0';
      }
  
      /* now finally write output buffer to logfile */
      fwrite(cpBuf, nBuf, 1, ctx.log);
      fflush(ctx.log);
  
  #ifdef LOG_PERROR
      /* optionally also write output buffer to stderr */
      if (ctx.logopt & LOG_PERROR)
          fwrite(cpBuf, nBuf, 1, stderr);
  #endif
  
      return;
  }
  

From ossp-cvs-owner@ossp.org  Thu Jan  3 17:13:06 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EBF42764F9; Thu,  3 Jan 2002 17:13:05 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_test_syslog.c
Message-Id: <20020103161305.EBF42764F9@mail.ossp.org>
Date: Thu,  3 Jan 2002 17:13:05 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   03-Jan-2002 17:13:05
  Branch: HEAD                             Handle: 2002010316130500

  Added files:
    ossp-pkg/l2             l2_test_syslog.c

  Log:
    integrate first cut of l2syslog stuff (missing file)

  Summary:
    Revision    Changes     Path
    1.1         +14 -0      ossp-pkg/l2/l2_test_syslog.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_test_syslog.c
  ============================================================
  $ cvs update -p -r1.1 l2_test_syslog.c
  
  #include <stdio.h>
  #include <syslog.h>
  
  int main(int argc, char *argv[]) 
  {
      syslog(LOG_INFO, "Connection from host %s", "foo.bar.dom");
      openlog("ftpd", LOG_PID|LOG_NDELAY, LOG_FTP);
      syslog(LOG_ALERT, "who: internal error 23\n");
      setlogmask(LOG_UPTO(LOG_ERR));
      syslog(LOG_INFO|LOG_LOCAL2, "foobar error: %m");
      return 0;
  }
  

From ossp-cvs-owner@ossp.org  Thu Jan  3 17:13:28 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 08D5C764F1; Thu,  3 Jan 2002 17:13:27 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 .cvsignore
Message-Id: <20020103161327.08D5C764F1@mail.ossp.org>
Date: Thu,  3 Jan 2002 17:13:27 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   03-Jan-2002 17:13:27
  Branch: HEAD                             Handle: 2002010316132700

  Modified files:
    ossp-pkg/l2             .cvsignore

  Log:
    update ignored files

  Summary:
    Revision    Changes     Path
    1.13        +1  -1      ossp-pkg/l2/.cvsignore
  ____________________________________________________________________________

  Index: ossp-pkg/l2/.cvsignore
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 .cvsignore
  --- ossp-pkg/l2/.cvsignore	10 Nov 2001 14:01:47 -0000	1.12
  +++ ossp-pkg/l2/.cvsignore	3 Jan 2002 16:13:27 -0000	1.13
  @@ -7,7 +7,7 @@
   l2-config
   l2_test.log
   l2_test
  -l2_test++
  +l2_test_syslog
   l2_sockmon
   config.guess
   config.sub

From ossp-cvs-owner@ossp.org  Thu Jan  3 17:21:20 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9E11A764D1; Thu,  3 Jan 2002 17:21:20 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Message-Id: <20020103162120.9E11A764D1@mail.ossp.org>
Date: Thu,  3 Jan 2002 17:21:20 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   03-Jan-2002 17:21:20
  Branch: HEAD                             Handle: 2002010316212000

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    update entries

  Summary:
    Revision    Changes     Path
    1.54        +11 -14     ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.53 -r1.54 TODO
  --- ossp-pkg/l2/TODO	3 Jan 2002 15:23:19 -0000	1.53
  +++ ossp-pkg/l2/TODO	3 Jan 2002 16:21:20 -0000	1.54
  @@ -2,6 +2,17 @@
   ============
   
   Next steps:
  +
  +- libl2syslog:
  +  OpenPKG fakesyslog is nasty, because it doesn't provide logging
  +  to multiple files or filter out some messages. Additionally the
  +  application has to be restarted in order to reopen the logfile which
  +  is nasty for MTAs like Postfix in case of very high loads (because
  +  they start again processing the queue from scratch). What we need is a
  +  new L2-based libl2syslog which maps from syslog(3) API to l2(3) API.
  +  We later can add the reopen feature in L2 or sends the messages via
  +  Unix Domain socket to an L2 daemon which in turn logs to targets via
  +  l2tool, etc.
   - signal and process handling (l2_env*)
   - asynchronous channel (l2_ch_async.c)
   - manual page (l2.pod)
  @@ -133,10 +144,6 @@
       otherwise have to rebuffer the message and append the
       null terminator character.
   
  -- An optional syslog(3) compatible API for converting syslog-only based
  -  applications (like sendmail) to (restricted) liblog-based applications.
  -  -> Des ist schon implimentiert in fakesyslog oder? (ms)
  -
   Spec-parsing ----------------------------------------------
   - implement location tracking
   
  @@ -152,16 +159,6 @@
   - syscall override ala OSSP SA in l2_env_t
   - perhaps rename l2_env to l2_ctx and l2_channel_ to just l2_
   - API cleanup for open semantics
  -
  -Related Projects ------------------------------------------
  -- Custom libsyslog
  -    OpenPKG fakesyslog is nasty, because it doesn't provide logging
  -    to multiple files or filter out some messages. Additionally the
  -    app has to be restarted in order to reopen the logfile which is
  -    nasty for MTAs like Postfix in case of very high loads (because
  -    they start again processign the queue from scratch). What we need
  -    is a new L2-based libsyslog.a which sends the stuff via Unix Domain
  -    socket to an L2 daemon which in turn logs to targets via L2.
   
   Documentation ---------------------------------------------
   - l2_ch_buffer

From ossp-cvs-owner@ossp.org  Fri Jan  4 23:31:04 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 56C84764E3; Fri,  4 Jan 2002 23:31:04 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var_qref.pod
Message-Id: <20020104223104.56C84764E3@mail.ossp.org>
Date: Fri,  4 Jan 2002 23:31:04 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-Jan-2002 23:31:04
  Branch: HEAD                             Handle: 2002010422310300

  Added files:
    ossp-pkg/var            var_qref.pod

  Log:
    add first cut for OSSP var quick reference

  Summary:
    Revision    Changes     Path
    1.1         +105 -0     ossp-pkg/var/var_qref.pod
  ____________________________________________________________________________

  Index: ossp-pkg/var/var_qref.pod
  ============================================================
  $ cvs update -p -r1.1 var_qref.pod
  
  =pod
  
  A string expanded through B<OSSP var> can consist of arbitrary text
  characters plus one or more of the following special constructs.
  This is just a very brief summary. For details see var(3).
  
  =over 4
  
  =item C<\\>, C<\>I<x>
  
  Ordinary characters C<\> and I<x>.
  
  =item C<\t>, C<\r>, C<\n>
  
  Tabulator, carriage return and newline character.
  
  =item C<\>I<NNN>
  
  Character with the octal value I<NNN>.
  
  =item C<\x>I<NN>
  
  Character with the hexadecial value I<NN>.
  
  =item C<\x{>I<NNMM..>C<}>
  
  Characters denoted by grouped hexadecimal numbers I<NNMM..>.
  
  =item C<$>I<name>, C<${>I<name>C<}>
  
  Contents of scalar variable I<name>.
  
  =item C<${>I<name>C<[>I<index>C<]>C<}>
  
  Contents of array variable I<name> at I<index> position.
  For I<index> full arithmetic expressions are allowed.
  
  =item C<${>I<name>C<:#}>
  
  Length of C<$>I<name>.
  
  =item ${name:l}, ${name:u}
  
  C<$>I<name>, converted to all lower-case or all upper-case.
  
  =item ${name:-<word>}
  
  If C<$>I<name> is not empty string, then C<$>I<name>, else I<word>
  (default value).
  
  =item ${name:+<word>}
  
  If C<$>I<name> is empty string, then empty string, else I<word>
  (positive alternative).
  
  =item C<${>I<name>C<:*>I<word>C<}>
  
  If C<$>I<name> is not empty string, then empty string, else I<word>
  (negative alternative).
  
  =item C<${>I<name>C<:o>I<start>C<,>[I<length>]C<}>
  
  Substring of C<$>I<name> starting at position I<start> with I<length>
  characters.
  
  =item C<${>I<name>C<:o>I<start>C<->[I<end>]C<}>
  
  Substring of C<$>I<name> starting at position I<start> and ending at
  position I<end> (inclusive).
  
  =item C<${>I<name>C<:s/>I<pattern>C</>I<string>C</>[C<itg>]C<}>
  
  C<$>I<name> after replacing characters matching I<pattern> with
  I<string>. By default, case-sensitive regular expression matching is
  performed and only the first occurance of I<pattern> is replaced. Flag
  "C<i>" switches to case insensitive matching; flag "C<t>" switches
  to plain text pattern; flag "C<g>" switches to replacements of all
  occurances.
  
  =item C<${>I<name>C<:y/>I<ochars>C</>I<nchars>C</}>
  
  C<$>I<name> after replacing all characters found in the I<ochars>
  character class by the corresponding character in the I<nchars>
  character class.
  
  =item C<${>I<name>C<:p/>I<width>C</>I<string>C</>{C<l>,C<c>,C<r>}C<}>
  
  C<$>I<name> after padding to I<width> with I<string>. Original contents
  of I<name> is either left justified (flag "C<l>"), centered (flag
  "C<c>"), or right justified (flag "C<r>").
  
  
  =item C<[>I<body>C<]>, C<[>I<body>C<]>C<{>I<start>C<,>I<step>C<,>I<end>C<}>
  
  Repeat expansion of I<body> as long as at least one array variable
  does not expand to the empty string (first variant) or exactly
  (I<end>-I<start>)/I<step> times (second variant). In both cases the
  character "C<#>" is expanded in C<body> as the current loop index
  (C<0>,... for first variant and I<start>,...,I<end> with stepping
  I<step> for second variant). I<index> of array variable lookups. For
  I<start>, I<step> and I<end>, full arithmetic expressions are allowed.
  
  =back
  

From ossp-cvs-owner@ossp.org  Fri Jan  4 23:31:43 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 75ED5764FD; Fri,  4 Jan 2002 23:31:43 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var TODO
Message-Id: <20020104223143.75ED5764FD@mail.ossp.org>
Date: Fri,  4 Jan 2002 23:31:43 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-Jan-2002 23:31:43
  Branch: HEAD                             Handle: 2002010422314300

  Modified files:
    ossp-pkg/var            TODO

  Log:
    remember

  Summary:
    Revision    Changes     Path
    1.9         +5  -0      ossp-pkg/var/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/var/TODO
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 TODO
  --- ossp-pkg/var/TODO	16 Dec 2001 18:13:22 -0000	1.8
  +++ ossp-pkg/var/TODO	4 Jan 2002 22:31:43 -0000	1.9
  @@ -131,3 +131,8 @@
           ${foo[$#{foo}]}
   
   
  +---
  +
  +o manual page style cleanup
  +o docs of o1,2 und o1-2 seem to be still incorrect
  +

From ossp-cvs-owner@ossp.org  Mon Jan  7 10:37:50 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 82428764D1; Mon,  7 Jan 2002 10:37:50 +0100 (CET)
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Message-Id: <20020107093750.82428764D1@mail.ossp.org>
Date: Mon,  7 Jan 2002 10:37:50 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   OSSP Project Master
  Root:   /e/ossp/cvs                      Email:  ossp@ossp.org
  Module: CVSROOT                          Date:   07-Jan-2002 10:37:50
  Branch: HEAD                             Handle: 2002010709374900

  Modified files:
    CVSROOT                 modules

  Log:
    add rc

  Summary:
    Revision    Changes     Path
    1.36        +1  -0      CVSROOT/modules
  ____________________________________________________________________________

  Index: CVSROOT/modules
  ============================================================
  $ cvs diff -u -r1.35 -r1.36 modules
  --- CVSROOT/modules	31 Dec 2001 13:27:22 -0000	1.35
  +++ CVSROOT/modules	7 Jan 2002 09:37:49 -0000	1.36
  @@ -79,6 +79,7 @@
   var             ossp-pkg/var
   pth             ossp-pkg/pth
   shtool          ossp-pkg/shtool
  +rc              ossp-pkg/rc
   
   #   OSSP lmtp2nntp
   lmtp2nntp       ossp-pkg/lmtp2nntp &lmtp2nntp_str &lmtp2nntp_l2 &lmtp2nntp_sa &lmtp2nntp_var

From ossp-cvs-owner@ossp.org  Mon Jan  7 11:52:52 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 44E52764D1; Mon,  7 Jan 2002 11:52:52 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc 00TODO
Message-Id: <20020107105252.44E52764D1@mail.ossp.org>
Date: Mon,  7 Jan 2002 11:52:52 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   07-Jan-2002 11:52:52
  Branch: HEAD                             Handle: 2002010710525100

  Modified files:
    ossp-pkg/rc             00TODO

  Log:
    changed filename

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/rc/00TODO
  ____________________________________________________________________________

  Index: ossp-pkg/rc/00TODO
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 00TODO
  --- ossp-pkg/rc/00TODO	4 Jan 2002 17:14:45 -0000	1.1
  +++ ossp-pkg/rc/00TODO	7 Jan 2002 10:52:51 -0000	1.2
  @@ -1,4 +1,4 @@
  -rcTODO: Tasks left to accomplish before the rc utility is complete
  +00TODO: Tasks left to accomplish before the rc utility is complete
   
   Consider
     Develop return code and error definitions unique to OpenPKG

From ossp-cvs-owner@ossp.org  Mon Jan  7 11:56:59 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D4670764D1; Mon,  7 Jan 2002 11:56:58 +0100 (CET)
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Message-Id: <20020107105658.D4670764D1@mail.ossp.org>
Date: Mon,  7 Jan 2002 11:56:58 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   OSSP Project Master
  Root:   /e/ossp/cvs                      Email:  ossp@ossp.org
  Module: CVSROOT                          Date:   07-Jan-2002 11:56:58
  Branch: HEAD                             Handle: 2002010710565800

  Modified files:
    CVSROOT                 modules

  Log:
    link str and var into rc

  Summary:
    Revision    Changes     Path
    1.37        +5  -1      CVSROOT/modules
  ____________________________________________________________________________

  Index: CVSROOT/modules
  ============================================================
  $ cvs diff -u -r1.36 -r1.37 modules
  --- CVSROOT/modules	7 Jan 2002 09:37:49 -0000	1.36
  +++ CVSROOT/modules	7 Jan 2002 10:56:58 -0000	1.37
  @@ -79,7 +79,6 @@
   var             ossp-pkg/var
   pth             ossp-pkg/pth
   shtool          ossp-pkg/shtool
  -rc              ossp-pkg/rc
   
   #   OSSP lmtp2nntp
   lmtp2nntp       ossp-pkg/lmtp2nntp &lmtp2nntp_str &lmtp2nntp_l2 &lmtp2nntp_sa &lmtp2nntp_var
  @@ -87,4 +86,9 @@
   lmtp2nntp_l2    -d lib_l2  ossp-pkg/l2
   lmtp2nntp_sa    -d lib_sa  ossp-pkg/sa
   lmtp2nntp_var   -d lib_var ossp-pkg/var
  +
  +#   OSSP rc
  +rc              ossp-pkg/rc &rc_str &rc_var
  +rc_str          -d rc_str ossp-pkg/str
  +rc_var          -d rc_var ossp-pkg/var
   

From ossp-cvs-owner@ossp.org  Mon Jan  7 14:16:00 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 39C2E764D1; Mon,  7 Jan 2002 14:16:00 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp Makefile.in configure.ac lmtp2nntp_main...
Message-Id: <20020107131600.39C2E764D1@mail.ossp.org>
Date: Mon,  7 Jan 2002 14:16:00 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   07-Jan-2002 14:16:00
  Branch: HEAD                             Handle: 2002010713155900

  Added files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_popt.c lmtp2nntp_popt.h
  Modified files:
    ossp-pkg/lmtp2nntp      Makefile.in configure.ac lmtp2nntp_main.c

  Log:
    link in a stripped down version of POPT

  Summary:
    Revision    Changes     Path
    1.34        +3  -3      ossp-pkg/lmtp2nntp/Makefile.in
    1.19        +3  -0      ossp-pkg/lmtp2nntp/configure.ac
    1.3         +1  -0      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
    1.1         +2149 -0    ossp-pkg/lmtp2nntp/lmtp2nntp_popt.c
    1.1         +208 -0     ossp-pkg/lmtp2nntp/lmtp2nntp_popt.h
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.33 -r1.34 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	31 Dec 2001 15:15:36 -0000	1.33
  +++ ossp-pkg/lmtp2nntp/Makefile.in	7 Jan 2002 13:15:59 -0000	1.34
  @@ -44,9 +44,9 @@
   POD2MAN     = pod2man
   
   PROG = lmtp2nntp
  -HDRS = lmtp2nntp_global.h lmtp2nntp_daemon.h lmtp2nntp_lmtp.h lmtp2nntp_nntp.h lmtp2nntp_argz.h lmtp2nntp_shpat.h lmtp2nntp_msg.h 
  -SRCS = lmtp2nntp_main.c lmtp2nntp_daemon.c lmtp2nntp_lmtp.c lmtp2nntp_nntp.c lmtp2nntp_argz.c lmtp2nntp_shpat.c lmtp2nntp_msg.c lmtp2nntp_version.c
  -OBJS = lmtp2nntp_main.o lmtp2nntp_daemon.o lmtp2nntp_lmtp.o lmtp2nntp_nntp.o lmtp2nntp_argz.o lmtp2nntp_shpat.o lmtp2nntp_msg.o lmtp2nntp_version.o
  +HDRS = lmtp2nntp_global.h lmtp2nntp_daemon.h lmtp2nntp_lmtp.h lmtp2nntp_nntp.h lmtp2nntp_argz.h lmtp2nntp_shpat.h lmtp2nntp_msg.h lmtp2nntp_popt.h
  +SRCS = lmtp2nntp_main.c lmtp2nntp_daemon.c lmtp2nntp_lmtp.c lmtp2nntp_nntp.c lmtp2nntp_argz.c lmtp2nntp_shpat.c lmtp2nntp_msg.c lmtp2nntp_popt.c lmtp2nntp_version.c 
  +OBJS = lmtp2nntp_main.o lmtp2nntp_daemon.o lmtp2nntp_lmtp.o lmtp2nntp_nntp.o lmtp2nntp_argz.o lmtp2nntp_shpat.o lmtp2nntp_msg.o lmtp2nntp_popt.o lmtp2nntp_version.o
   
   SUBDIRS = @SUBDIR_STR@ @SUBDIR_L2@ @SUBDIR_SA@ @SUBDIR_VAR@
   
  Index: ossp-pkg/lmtp2nntp/configure.ac
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 configure.ac
  --- ossp-pkg/lmtp2nntp/configure.ac	31 Dec 2001 15:15:36 -0000	1.18
  +++ ossp-pkg/lmtp2nntp/configure.ac	7 Jan 2002 13:15:59 -0000	1.19
  @@ -48,6 +48,9 @@
   AC_CHECK_FUNCS(setsid)
   AC_CHECK_HEADERS(sys/termios.h)
   
  +dnl #   checks for POPT library
  +AC_CHECK_HEADERS(alloca.h float.h)
  +
   dnl #   check for Str library
   AC_CHECK_EXTLIB([OSSP Str], 
                   str, str_parse, str.h, 
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	31 Dec 2001 15:15:36 -0000	1.2
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	7 Jan 2002 13:15:59 -0000	1.3
  @@ -42,6 +42,7 @@
   #include "lmtp2nntp_argz.h"
   #include "lmtp2nntp_shpat.h"
   #include "lmtp2nntp_daemon.h"
  +#include "lmtp2nntp_popt.h"
   
   /* third party (linked in) */
   #include "str.h"
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_popt.c
  ============================================================
  $ cvs update -p -r1.1 lmtp2nntp_popt.c
  /* 
   *  Option Parsing Library (POPT)
   *  Copyright (c) 1998-2002 Red Hat, Inc.
   *
   *  Permission is hereby granted, free of charge, to any person obtaining a copy
   *  of this software and associated documentation files (the "Software"), to deal
   *  in the Software without restriction, including without limitation the rights
   *  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
   *  copies of the Software, and to permit persons to whom the Software is
   *  furnished to do so, subject to the following conditions:
   *
   *  The above copyright notice and this permission notice shall be included in
   *  all copies or substantial portions of the Software.
   *
   *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
   *  X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
   *  AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
   *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
   *
   *  Except as contained in this notice, the name of the X Consortium shall not be
   *  used in advertising or otherwise to promote the sale, use or other dealings
   *  in this Software without prior written authorization from the X Consortium.
   *
   *  DO NOT EDIT THIS FILE, IT WAS AUTOMATICALLY GENERATED!
   *
   *  This is an automatically generated, extremely stripped down version
   *  of the POPT 1.6.3 library from Red Hat, Inc. This version is still
   *  distributed under the same original POPT Open Source license, but
   *  Red Hat is no longer responsible for this version.
   */
  
  #ifdef HAVE_CONFIG_H
  #include "config.h"
  #endif
  
  #include <ctype.h>
  #include <errno.h>
  #include <fcntl.h>
  #include <limits.h>
  
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  
  #include <unistd.h>
  
  #ifndef __GNUC__
  # if HAVE_ALLOCA_H
  #  include <alloca.h>
  # else
  #  ifdef _AIX
  #pragma alloca
  #  else
  #   ifndef alloca
  char *alloca();
  #   endif
  #  endif
  # endif
  #elif defined(__GNUC__) && defined(__STRICT_ANSI__)
  #define alloca __builtin_alloca
  #endif
  #include "lmtp2nntp_popt.h"
  
  #ifndef H_POPTINT
  #define H_POPTINT
  
  static void *_free(const void *p)
  {
  	if (p != NULL)
  		free((void *)p);
  	return NULL;
  }
  
  typedef unsigned int __pbm_bits;
  #define	__PBM_NBITS		(8 * sizeof (__pbm_bits))
  #define	__PBM_IX(d)		((d) / __PBM_NBITS)
  #define __PBM_MASK(d)		((__pbm_bits) 1 << ((d) % __PBM_NBITS))
  typedef struct {
  	__pbm_bits bits[1];
  } pbm_set;
  #define	__PBM_BITS(set)	((set)->bits)
  
  #define	PBM_ALLOC(d)	calloc(__PBM_IX (d) + 1, sizeof(__pbm_bits))
  #define	PBM_FREE(s)	_free(s);
  #define PBM_SET(d, s)   (__PBM_BITS (s)[__PBM_IX (d)] |= __PBM_MASK (d))
  #define PBM_CLR(d, s)   (__PBM_BITS (s)[__PBM_IX (d)] &= ~__PBM_MASK (d))
  #define PBM_ISSET(d, s) ((__PBM_BITS (s)[__PBM_IX (d)] & __PBM_MASK (d)) != 0)
  
  struct optionStackEntry {
  	int argc;
  	const char **argv;
  	pbm_set *argb;
  	int next;
  	const char *nextArg;
  	const char *nextCharArg;
  	popt_item currAlias;
  	int stuffed;
  };
  
  struct popt_context_s {
  	struct optionStackEntry optionStack[POPT_OPTION_DEPTH];
  	struct optionStackEntry *os;
  	const char **leftovers;
  	int numLeftovers;
  	int nextLeftover;
  	const struct popt_option *options;
  	int restLeftover;
  	const char *appName;
  	popt_item aliases;
  	int numAliases;
  	int flags;
  	popt_item execs;
  	int numExecs;
  	const char **finalArgv;
  	int finalArgvCount;
  	int finalArgvAlloced;
  	popt_item doExec;
  	const char *execPath;
  	int execAbsolute;
  	const char *otherHelp;
  	pbm_set *arg_strip;
  };
  
  #ifdef HAVE_LIBINTL_H
  #include <libintl.h>
  #endif
  
  #if defined(HAVE_GETTEXT) && !defined(__LCLINT__)
  #define _(foo) gettext(foo)
  #else
  #define _(foo) foo
  #endif
  
  #if defined(HAVE_DGETTEXT) && !defined(__LCLINT__)
  #define D_(dom, str) dgettext(dom, str)
  #define POPT_(foo) D_("popt", foo)
  #else
  #define D_(dom, str) str
  #define POPT_(foo) foo
  #endif
  
  #define N_(foo) foo
  
  #endif
  
  static const char *findProgramPath(const char *argv0)
  {
  	char *path = getenv("PATH");
  	char *pathbuf;
  	char *start, *chptr;
  	char *buf;
  
  	if (argv0 == NULL)
  		return NULL;
  	if (strchr(argv0, '/'))
  		return strdup(argv0);
  
  	if (path == NULL)
  		return NULL;
  
  	start = pathbuf = alloca(strlen(path) + 1);
  	buf = malloc(strlen(path) + strlen(argv0) + sizeof ("/"));
  	if (buf == NULL)
  		return NULL;
  	strcpy(pathbuf, path);
  
  	chptr = NULL;
  	do {
  		if ((chptr = strchr(start, ':')))
  			*chptr = '\0';
  		sprintf(buf, "%s/%s", start, argv0);
  
  		if (!access(buf, X_OK))
  			return buf;
  
  		if (chptr)
  			start = chptr + 1;
  		else
  			start = NULL;
  	} while (start && *start);
  
  	free(buf);
  
  	return NULL;
  }
  
  #if HAVE_FLOAT_H
  #include <float.h>
  #endif
  #include <math.h>
  
  void popt_setexecpath(popt_context con, const char *path, int allowAbsolute)
  {
  	con->execPath = _free(con->execPath);
  	con->execPath = strdup(path);
  	con->execAbsolute = allowAbsolute;
  }
  
  static void invokeCallbacksPRE(popt_context con,
  							   const struct popt_option *opt)
  {
  	if (opt != NULL)
  		for (; opt->longName || opt->shortName || opt->arg; opt++) {
  			if (opt->arg == NULL)
  				continue;
  			if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INCLUDE_TABLE) {
  				invokeCallbacksPRE(con, opt->arg);
  			}
  			else if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_CALLBACK &&
  					 (opt->argInfo & POPT_CBFLAG_PRE)) {
  				popt_callbacktype cb = (popt_callbacktype) opt->arg;
  
  				cb(con, POPT_CALLBACK_REASON_PRE, NULL, NULL, opt->descrip);
  
  			}
  		}
  }
  
  static void invokeCallbacksPOST(popt_context con,
  								const struct popt_option *opt)
  {
  	if (opt != NULL)
  		for (; opt->longName || opt->shortName || opt->arg; opt++) {
  			if (opt->arg == NULL)
  				continue;
  			if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INCLUDE_TABLE) {
  				invokeCallbacksPOST(con, opt->arg);
  			}
  			else if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_CALLBACK &&
  					 (opt->argInfo & POPT_CBFLAG_POST)) {
  				popt_callbacktype cb = (popt_callbacktype) opt->arg;
  
  				cb(con, POPT_CALLBACK_REASON_POST, NULL, NULL, opt->descrip);
  
  			}
  		}
  }
  
  static void invokeCallbacksOPTION(popt_context con,
  								  const struct popt_option *opt,
  								  const struct popt_option *myOpt,
  								  const void *myData, int shorty)
  {
  	const struct popt_option *cbopt = NULL;
  
  	if (opt != NULL)
  		for (; opt->longName || opt->shortName || opt->arg; opt++) {
  			if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INCLUDE_TABLE) {
  				if (opt->arg != NULL)
  					invokeCallbacksOPTION(con, opt->arg, myOpt, myData,
  										  shorty);
  			}
  			else if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_CALLBACK &&
  					 !(opt->argInfo & POPT_CBFLAG_SKIPOPTION)) {
  				cbopt = opt;
  			}
  			else if (cbopt != NULL &&
  					 ((myOpt->shortName && opt->shortName && shorty &&
  					   myOpt->shortName == opt->shortName) ||
  					  (myOpt->longName && opt->longName &&
  					   !strcmp(myOpt->longName, opt->longName)))
  
  				) {
  				popt_callbacktype cb = (popt_callbacktype) cbopt->arg;
  
  				const void *cbData =
  					(cbopt->descrip ? cbopt->descrip : myData);
  				if (cb != NULL) {
  
  					cb(con, POPT_CALLBACK_REASON_OPTION, myOpt,
  					   con->os->nextArg, cbData);
  
  				}
  				if (!(cbopt->argInfo & POPT_CBFLAG_CONTINUE))
  					return;
  			}
  		}
  }
  
  popt_context popt_getcontext(const char *name, int argc, const char **argv,
  							 const struct popt_option * options, int flags)
  {
  	popt_context con = malloc(sizeof (*con));
  
  	if (con == NULL)
  		return NULL;
  	memset(con, 0, sizeof (*con));
  
  	con->os = con->optionStack;
  	con->os->argc = argc;
  	con->os->argv = argv;
  
  	con->os->argb = NULL;
  
  	if (!(flags & POPT_CONTEXT_KEEP_FIRST))
  		con->os->next = 1;
  
  	con->leftovers = calloc((argc + 1), sizeof (char *));
  	con->options = options;
  
  	con->aliases = NULL;
  	con->numAliases = 0;
  	con->flags = flags;
  	con->execs = NULL;
  	con->numExecs = 0;
  	con->finalArgvAlloced = argc * 2;
  	con->finalArgv = calloc(con->finalArgvAlloced, sizeof (*con->finalArgv));
  	con->execAbsolute = 1;
  	con->arg_strip = NULL;
  
  	if (getenv("POSIXLY_CORRECT") || getenv("POSIX_ME_HARDER"))
  		con->flags |= POPT_CONTEXT_POSIXMEHARDER;
  
  	if (name) {
  		char *t = malloc(strlen(name) + 1);
  		if (t)
  			con->appName = strcpy(t, name);
  	}
  
  	invokeCallbacksPRE(con, con->options);
  
  	return con;
  }
  
  static void cleanOSE(struct optionStackEntry *os)
  {
  	os->nextArg = _free(os->nextArg);
  	os->argv = _free(os->argv);
  	os->argb = PBM_FREE(os->argb);
  }
  
  void popt_resetcontext(popt_context con)
  {
  	int i;
  
  	if (con == NULL)
  		return;
  	while (con->os > con->optionStack) {
  		cleanOSE(con->os--);
  	}
  	con->os->argb = PBM_FREE(con->os->argb);
  	con->os->currAlias = NULL;
  	con->os->nextCharArg = NULL;
  	con->os->nextArg = NULL;
  	con->os->next = 1;
  
  	con->numLeftovers = 0;
  	con->nextLeftover = 0;
  	con->restLeftover = 0;
  	con->doExec = NULL;
  
  	if (con->finalArgv != NULL)
  		for (i = 0; i < con->finalArgvCount; i++)
  			con->finalArgv[i] = _free(con->finalArgv[i]);
  
  	con->finalArgvCount = 0;
  	con->arg_strip = PBM_FREE(con->arg_strip);
  	return;
  
  }
  
  static int handleExec(popt_context con, const char *longName, char shortName)
  {
  	popt_item item;
  	int i;
  
  	if (con->execs == NULL || con->numExecs <= 0)
  		return 0;
  
  	for (i = con->numExecs - 1; i >= 0; i--) {
  		item = con->execs + i;
  		if (longName && !(item->option.longName &&
  						  !strcmp(longName, item->option.longName)))
  			continue;
  		else if (shortName != item->option.shortName)
  			continue;
  		break;
  	}
  	if (i < 0)
  		return 0;
  
  	if (con->flags & POPT_CONTEXT_NO_EXEC)
  		return 1;
  
  	if (con->doExec == NULL) {
  		con->doExec = con->execs + i;
  		return 1;
  	}
  
  	if ((con->finalArgvCount + 1) >= (con->finalArgvAlloced)) {
  		con->finalArgvAlloced += 10;
  		con->finalArgv = realloc(con->finalArgv,
  								 sizeof (*con->finalArgv) *
  								 con->finalArgvAlloced);
  	}
  
  	i = con->finalArgvCount++;
  	if (con->finalArgv != NULL) {
  		char *s = malloc((longName ? strlen(longName) : 0) + 3);
  		if (s != NULL) {
  			if (longName)
  				sprintf(s, "--%s", longName);
  			else
  				sprintf(s, "-%c", shortName);
  			con->finalArgv[i] = s;
  		}
  		else
  			con->finalArgv[i] = NULL;
  	}
  
  	return 1;
  
  }
  
  static int handleAlias(popt_context con,
  					   const char *longName, char shortName,
  					   const char *nextCharArg)
  {
  	popt_item item = con->os->currAlias;
  	int rc;
  	int i;
  
  	if (item) {
  		if (longName && (item->option.longName &&
  						 !strcmp(longName, item->option.longName)))
  			return 0;
  		if (shortName && shortName == item->option.shortName)
  			return 0;
  	}
  
  	if (con->aliases == NULL || con->numAliases <= 0)
  		return 0;
  
  	for (i = con->numAliases - 1; i >= 0; i--) {
  		item = con->aliases + i;
  		if (longName && !(item->option.longName &&
  						  !strcmp(longName, item->option.longName)))
  			continue;
  		else if (shortName != item->option.shortName)
  			continue;
  		break;
  	}
  	if (i < 0)
  		return 0;
  
  	if ((con->os - con->optionStack + 1) == POPT_OPTION_DEPTH)
  		return POPT_ERROR_OPTSTOODEEP;
  
  	if (nextCharArg && *nextCharArg)
  		con->os->nextCharArg = nextCharArg;
  
  	con->os++;
  	con->os->next = 0;
  	con->os->stuffed = 0;
  	con->os->nextArg = NULL;
  	con->os->nextCharArg = NULL;
  	con->os->currAlias = con->aliases + i;
  	rc = popt_dupargv(con->os->currAlias->argc, con->os->currAlias->argv,
  					  &con->os->argc, &con->os->argv);
  	con->os->argb = NULL;
  
  	return (rc ? rc : 1);
  }
  
  static int execCommand(popt_context con)
  {
  	popt_item item = con->doExec;
  	const char **argv;
  	int argc = 0;
  	int rc;
  
  	if (item == NULL)
  		return POPT_ERROR_NOARG;
  
  	if (item->argv == NULL || item->argc < 1 ||
  		(!con->execAbsolute && strchr(item->argv[0], '/')))
  		return POPT_ERROR_NOARG;
  
  	argv = malloc(sizeof (*argv) *
  				  (6 + item->argc + con->numLeftovers + con->finalArgvCount));
  	if (argv == NULL)
  		return POPT_ERROR_MALLOC;
  
  	if (!strchr(item->argv[0], '/') && con->execPath) {
  		char *s =
  			alloca(strlen(con->execPath) + strlen(item->argv[0]) +
  				   sizeof ("/"));
  		sprintf(s, "%s/%s", con->execPath, item->argv[0]);
  		argv[argc] = s;
  	}
  	else {
  		argv[argc] = findProgramPath(item->argv[0]);
  	}
  	if (argv[argc++] == NULL)
  		return POPT_ERROR_NOARG;
  
  	if (item->argc > 1) {
  		memcpy(argv + argc, item->argv + 1,
  			   sizeof (*argv) * (item->argc - 1));
  		argc += (item->argc - 1);
  	}
  
  	if (con->finalArgv != NULL && con->finalArgvCount > 0) {
  		memcpy(argv + argc, con->finalArgv,
  			   sizeof (*argv) * con->finalArgvCount);
  		argc += con->finalArgvCount;
  	}
  
  	if (con->leftovers != NULL && con->numLeftovers > 0) {
  
  		memcpy(argv + argc, con->leftovers,
  			   sizeof (*argv) * con->numLeftovers);
  		argc += con->numLeftovers;
  	}
  
  	argv[argc] = NULL;
  
  #ifdef __hpux
  	rc = setresuid(getuid(), getuid(), -1);
  	if (rc)
  		return POPT_ERROR_ERRNO;
  #else
  #if defined(HAVE_SETUID)
  	rc = setuid(getuid());
  	if (rc)
  		return POPT_ERROR_ERRNO;
  #elif defined (HAVE_SETREUID)
  	rc = setreuid(getuid(), getuid());
  	if (rc)
  		return POPT_ERROR_ERRNO;
  #else
  	;
  #endif
  #endif
  
  	if (argv[0] == NULL)
  		return POPT_ERROR_NOARG;
  
  	rc = execvp(argv[0], (char *const *)argv);
  	return POPT_ERROR_ERRNO;
  }
  
  static const struct popt_option *findOption(const struct popt_option *opt,
  											const char *longName,
  											char shortName,
  											popt_callbacktype * callback,
  											const void **callbackData,
  											int singleDash)
  {
  	const struct popt_option *cb = NULL;
  
  	if (singleDash && !shortName && (longName && *longName == '\0'))
  		shortName = '-';
  
  	for (; opt->longName || opt->shortName || opt->arg; opt++) {
  
  		if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INCLUDE_TABLE) {
  			const struct popt_option *opt2;
  
  			if (opt->arg == NULL)
  				continue;
  			opt2 = findOption(opt->arg, longName, shortName, callback,
  							  callbackData, singleDash);
  			if (opt2 == NULL)
  				continue;
  			if (!(callback && *callback))
  				return opt2;
  			if (!(callbackData && *callbackData == NULL))
  				return opt2;
  
  			*callbackData = opt->descrip;
  
  			return opt2;
  		}
  		else if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_CALLBACK) {
  			cb = opt;
  		}
  		else if (longName && opt->longName &&
  				 (!singleDash || (opt->argInfo & POPT_ARGFLAG_ONEDASH)) &&
  				 !strcmp(longName, opt->longName))
  		{
  			break;
  		}
  		else if (shortName && shortName == opt->shortName) {
  			break;
  		}
  	}
  
  	if (!opt->longName && !opt->shortName)
  		return NULL;
  
  	if (callback)
  		*callback = NULL;
  	if (callbackData)
  		*callbackData = NULL;
  	if (cb) {
  		if (callback)
  
  			*callback = (popt_callbacktype) cb->arg;
  
  		if (!(cb->argInfo & POPT_CBFLAG_INC_DATA)) {
  			if (callbackData)
  				*callbackData = cb->descrip;
  
  		}
  	}
  
  	return opt;
  }
  
  static const char *findNextArg(popt_context con,
  							   unsigned argx, int delete_arg)
  {
  	struct optionStackEntry *os = con->os;
  	const char *arg;
  
  	do {
  		int i;
  		arg = NULL;
  		while (os->next == os->argc && os > con->optionStack)
  			os--;
  		if (os->next == os->argc && os == con->optionStack)
  			break;
  		if (os->argv != NULL)
  			for (i = os->next; i < os->argc; i++) {
  				if (os->argb && PBM_ISSET(i, os->argb))
  					continue;
  				if (*os->argv[i] == '-')
  					continue;
  				if (--argx > 0)
  					continue;
  				arg = os->argv[i];
  				if (delete_arg) {
  					if (os->argb == NULL)
  						os->argb = PBM_ALLOC(os->argc);
  					if (os->argb != NULL)
  						PBM_SET(i, os->argb);
  				}
  				break;
  			}
  		if (os > con->optionStack)
  			os--;
  	} while (arg == NULL);
  	return arg;
  }
  
  static const char *expandNextArg(popt_context con, const char *s)
  {
  	const char *a = NULL;
  	size_t alen;
  	char *t, *te;
  	size_t tn = strlen(s) + 1;
  	char c;
  
  	te = t = malloc(tn);;
  	if (t == NULL)
  		return NULL;
  	while ((c = *s++) != '\0') {
  		switch (c) {
  
  			case '!':
  				if (!(s[0] == '#' && s[1] == ':' && s[2] == '+'))
  					break;
  				if (a == NULL) {
  					if ((a = findNextArg(con, 1, 1)) == NULL)
  						break;
  				}
  				s += 3;
  
  				alen = strlen(a);
  				tn += alen;
  				*te = '\0';
  				t = realloc(t, tn);
  				te = t + strlen(t);
  				strncpy(te, a, alen);
  				te += alen;
  				continue;
  				break;
  			default:
  				break;
  		}
  		*te++ = c;
  	}
  	*te = '\0';
  	t = realloc(t, strlen(t) + 1);
  	return t;
  }
  
  static void poptStripArg(popt_context con, int which)
  {
  	if (con->arg_strip == NULL)
  		con->arg_strip = PBM_ALLOC(con->optionStack[0].argc);
  	if (con->arg_strip != NULL)
  		PBM_SET(which, con->arg_strip);
  }
  
  static int poptSaveLong(const struct popt_option *opt, long aLong)
  {
  	if (opt->arg == NULL)
  		return POPT_ERROR_NULLARG;
  
  	if (opt->argInfo & POPT_ARGFLAG_NOT)
  		aLong = ~aLong;
  	switch (opt->argInfo & POPT_ARGFLAG_LOGICALOPS) {
  		case 0:
  			*((long *)opt->arg) = aLong;
  			break;
  		case POPT_ARGFLAG_OR:
  			*((long *)opt->arg) |= aLong;
  			break;
  		case POPT_ARGFLAG_AND:
  			*((long *)opt->arg) &= aLong;
  			break;
  		case POPT_ARGFLAG_XOR:
  			*((long *)opt->arg) ^= aLong;
  			break;
  		default:
  			return POPT_ERROR_BADOPERATION;
  			break;
  	}
  	return 0;
  }
  
  static int poptSaveInt(const struct popt_option *opt, long aLong)
  {
  	if (opt->arg == NULL)
  		return POPT_ERROR_NULLARG;
  
  	if (opt->argInfo & POPT_ARGFLAG_NOT)
  		aLong = ~aLong;
  	switch (opt->argInfo & POPT_ARGFLAG_LOGICALOPS) {
  		case 0:
  			*((int *)opt->arg) = aLong;
  			break;
  		case POPT_ARGFLAG_OR:
  			*((int *)opt->arg) |= aLong;
  			break;
  		case POPT_ARGFLAG_AND:
  			*((int *)opt->arg) &= aLong;
  			break;
  		case POPT_ARGFLAG_XOR:
  			*((int *)opt->arg) ^= aLong;
  			break;
  		default:
  			return POPT_ERROR_BADOPERATION;
  			break;
  	}
  	return 0;
  }
  
  int popt_getnextopt(popt_context con)
  {
  	const struct popt_option *opt = NULL;
  	int done = 0;
  
  	if (con == NULL)
  		return -1;
  	while (!done) {
  		const char *origOptString = NULL;
  		popt_callbacktype cb = NULL;
  		const void *cbData = NULL;
  		const char *longArg = NULL;
  		int canstrip = 0;
  		int shorty = 0;
  
  		while (!con->os->nextCharArg && con->os->next == con->os->argc
  			   && con->os > con->optionStack) {
  			cleanOSE(con->os--);
  		}
  		if (!con->os->nextCharArg && con->os->next == con->os->argc) {
  			invokeCallbacksPOST(con, con->options);
  			if (con->doExec)
  				return execCommand(con);
  			return -1;
  		}
  
  		if (!con->os->nextCharArg) {
  			char *localOptString, *optString;
  			int thisopt;
  
  			if (con->os->argb && PBM_ISSET(con->os->next, con->os->argb)) {
  				con->os->next++;
  				continue;
  			}
  			thisopt = con->os->next;
  			if (con->os->argv != NULL)
  				origOptString = con->os->argv[con->os->next++];
  
  			if (origOptString == NULL)
  				return POPT_ERROR_BADOPT;
  
  			if (con->restLeftover || *origOptString != '-') {
  				if (con->flags & POPT_CONTEXT_POSIXMEHARDER)
  					con->restLeftover = 1;
  				if (con->flags & POPT_CONTEXT_ARG_OPTS) {
  					con->os->nextArg = strdup(origOptString);
  					return 0;
  				}
  				if (con->leftovers != NULL)
  					con->leftovers[con->numLeftovers++] = origOptString;
  				continue;
  			}
  
  			localOptString = optString =
  				strcpy(alloca(strlen(origOptString) + 1), origOptString);
  
  			if (optString[0] == '\0')
  				return POPT_ERROR_BADOPT;
  
  			if (optString[1] == '-' && !optString[2]) {
  				con->restLeftover = 1;
  				continue;
  			}
  			else {
  				char *oe;
  				int singleDash;
  
  				optString++;
  				if (*optString == '-')
  					singleDash = 0, optString++;
  				else
  					singleDash = 1;
  
  				if (handleAlias(con, optString, '\0', NULL))
  					continue;
  
  				if (handleExec(con, optString, '\0'))
  					continue;
  
  				for (oe = optString; *oe && *oe != '='; oe++) {
  				};
  				if (*oe == '=') {
  					*oe++ = '\0';
  					longArg = origOptString + (oe - localOptString);
  				}
  
  				opt = findOption(con->options, optString, '\0', &cb, &cbData,
  								 singleDash);
  				if (!opt && !singleDash)
  					return POPT_ERROR_BADOPT;
  			}
  
  			if (!opt) {
  				con->os->nextCharArg = origOptString + 1;
  			}
  			else {
  				if (con->os == con->optionStack &&
  					opt->argInfo & POPT_ARGFLAG_STRIP) {
  					canstrip = 1;
  					poptStripArg(con, thisopt);
  				}
  				shorty = 0;
  			}
  		}
  
  		if (con->os->nextCharArg) {
  			origOptString = con->os->nextCharArg;
  
  			con->os->nextCharArg = NULL;
  
  			if (handleAlias(con, NULL, *origOptString, origOptString + 1))
  				continue;
  
  			if (handleExec(con, NULL, *origOptString)) {
  				origOptString++;
  				if (*origOptString != '\0')
  					con->os->nextCharArg = origOptString;
  				continue;
  			}
  
  			opt = findOption(con->options, NULL, *origOptString, &cb,
  							 &cbData, 0);
  			if (!opt)
  				return POPT_ERROR_BADOPT;
  			shorty = 1;
  
  			origOptString++;
  			if (*origOptString != '\0')
  				con->os->nextCharArg = origOptString;
  
  		}
  
  		if (opt == NULL)
  			return POPT_ERROR_BADOPT;
  		if (opt->arg && (opt->argInfo & POPT_ARG_MASK) == POPT_ARG_NONE) {
  			if (poptSaveInt(opt, 1L))
  				return POPT_ERROR_BADOPERATION;
  		}
  		else if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_VAL) {
  			if (opt->arg) {
  				if (poptSaveInt(opt, (long)opt->val))
  					return POPT_ERROR_BADOPERATION;
  			}
  		}
  		else if ((opt->argInfo & POPT_ARG_MASK) != POPT_ARG_NONE) {
  			con->os->nextArg = _free(con->os->nextArg);
  			if (longArg) {
  
  				longArg = expandNextArg(con, longArg);
  				con->os->nextArg = longArg;
  			}
  			else if (con->os->nextCharArg) {
  				longArg = expandNextArg(con, con->os->nextCharArg);
  				con->os->nextArg = longArg;
  				con->os->nextCharArg = NULL;
  			}
  			else {
  				while (con->os->next == con->os->argc &&
  					   con->os > con->optionStack) {
  					cleanOSE(con->os--);
  				}
  				if (con->os->next == con->os->argc) {
  					if (!(opt->argInfo & POPT_ARGFLAG_OPTIONAL))
  						return POPT_ERROR_NOARG;
  
  					con->os->nextArg = NULL;
  				}
  				else {
  
  					if (con->os == con->optionStack &&
  						(opt->argInfo & POPT_ARGFLAG_STRIP) && canstrip) {
  						poptStripArg(con, con->os->next);
  					}
  
  					if (con->os->argv != NULL) {
  						longArg = con->os->argv[con->os->next++];
  						longArg = expandNextArg(con, longArg);
  						con->os->nextArg = longArg;
  					}
  				}
  			}
  			longArg = NULL;
  
  			if (opt->arg) {
  				switch (opt->argInfo & POPT_ARG_MASK) {
  					case POPT_ARG_STRING:
  						*((const char **)opt->arg) = (con->os->nextArg)
  							? strdup(con->os->nextArg) : NULL;
  						break;
  
  					case POPT_ARG_INT:
  					case POPT_ARG_LONG:
  						{
  							long aLong = 0;
  							char *end;
  
  							if (con->os->nextArg) {
  								aLong = strtol(con->os->nextArg, &end, 0);
  								if (!(end && *end == '\0'))
  									return POPT_ERROR_BADNUMBER;
  							}
  
  							if ((opt->argInfo & POPT_ARG_MASK) ==
  								POPT_ARG_LONG) {
  								if (aLong == LONG_MIN || aLong == LONG_MAX)
  									return POPT_ERROR_OVERFLOW;
  								if (poptSaveLong(opt, aLong))
  									return POPT_ERROR_BADOPERATION;
  							}
  							else {
  								if (aLong > INT_MAX || aLong < INT_MIN)
  									return POPT_ERROR_OVERFLOW;
  								if (poptSaveInt(opt, aLong))
  									return POPT_ERROR_BADOPERATION;
  							}
  						}
  						break;
  
  					case POPT_ARG_FLOAT:
  					case POPT_ARG_DOUBLE:
  						{
  							double aDouble = 0.0;
  							char *end;
  
  							if (con->os->nextArg) {
  								int saveerrno = errno;
  								errno = 0;
  								aDouble = strtod(con->os->nextArg, &end);
  								if (errno == ERANGE)
  									return POPT_ERROR_OVERFLOW;
  								errno = saveerrno;
  								if (*end != '\0')
  									return POPT_ERROR_BADNUMBER;
  							}
  
  							if ((opt->argInfo & POPT_ARG_MASK) ==
  								POPT_ARG_DOUBLE) {
  								*((double *)opt->arg) = aDouble;
  							}
  							else {
  #define _ABS(a)	((((a) - 0.0) < DBL_EPSILON) ? -(a) : (a))
  								if ((_ABS(aDouble) - FLT_MAX) > DBL_EPSILON)
  									return POPT_ERROR_OVERFLOW;
  								if ((FLT_MIN - _ABS(aDouble)) > DBL_EPSILON)
  									return POPT_ERROR_OVERFLOW;
  								*((float *)opt->arg) = aDouble;
  							}
  						} break;
  					default:
  						fprintf(stdout,
  								POPT_
  								("option type (%d) not implemented in popt\n"),
  								(opt->argInfo & POPT_ARG_MASK));
  						exit(EXIT_FAILURE);
  				}
  			}
  		}
  
  		if (cb)
  			invokeCallbacksOPTION(con, con->options, opt, cbData, shorty);
  		else if (opt->val && ((opt->argInfo & POPT_ARG_MASK) != POPT_ARG_VAL))
  			done = 1;
  
  		if ((con->finalArgvCount + 2) >= (con->finalArgvAlloced)) {
  			con->finalArgvAlloced += 10;
  			con->finalArgv = realloc(con->finalArgv,
  									 sizeof (*con->finalArgv) *
  									 con->finalArgvAlloced);
  		}
  
  		if (con->finalArgv != NULL) {
  			char *s = malloc((opt->longName ? strlen(opt->longName) : 0) + 3);
  			if (s != NULL) {
  				if (opt->longName)
  					sprintf(s, "%s%s",
  							((opt->
  							  argInfo & POPT_ARGFLAG_ONEDASH) ? "-" : "--"),
  							opt->longName);
  				else
  					sprintf(s, "-%c", opt->shortName);
  				con->finalArgv[con->finalArgvCount++] = s;
  			}
  			else
  				con->finalArgv[con->finalArgvCount++] = NULL;
  		}
  
  		if (opt->arg && (opt->argInfo & POPT_ARG_MASK) == POPT_ARG_NONE) ;
  		else if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_VAL) ;
  		else if ((opt->argInfo & POPT_ARG_MASK) != POPT_ARG_NONE) {
  			if (con->finalArgv != NULL && con->os->nextArg)
  				con->finalArgv[con->finalArgvCount++] =
  					strdup(con->os->nextArg);
  
  		}
  	}
  
  	return (opt ? opt->val : -1);
  }
  
  const char *popt_getoptarg(popt_context con)
  {
  	const char *ret = NULL;
  	if (con) {
  		ret = con->os->nextArg;
  		con->os->nextArg = NULL;
  	}
  	return ret;
  }
  
  const char *popt_getarg(popt_context con)
  {
  	const char *ret = NULL;
  	if (con && con->leftovers != NULL
  		&& con->nextLeftover < con->numLeftovers)
  		ret = con->leftovers[con->nextLeftover++];
  	return ret;
  }
  
  const char *popt_peekarg(popt_context con)
  {
  	const char *ret = NULL;
  	if (con && con->leftovers != NULL
  		&& con->nextLeftover < con->numLeftovers)
  		ret = con->leftovers[con->nextLeftover];
  	return ret;
  }
  
  const char **popt_getargs(popt_context con)
  {
  	if (con == NULL ||
  		con->leftovers == NULL || con->numLeftovers == con->nextLeftover)
  		return NULL;
  
  	con->leftovers[con->numLeftovers] = NULL;
  
  	return (con->leftovers + con->nextLeftover);
  
  }
  
  popt_context popt_freecontext(popt_context con)
  {
  	popt_item item;
  	int i;
  
  	if (con == NULL)
  		return con;
  	popt_resetcontext(con);
  	con->os->argb = _free(con->os->argb);
  
  	if (con->aliases != NULL)
  		for (i = 0; i < con->numAliases; i++) {
  			item = con->aliases + i;
  
  			item->option.longName = _free(item->option.longName);
  			item->option.descrip = _free(item->option.descrip);
  			item->option.argDescrip = _free(item->option.argDescrip);
  
  			item->argv = _free(item->argv);
  		}
  	con->aliases = _free(con->aliases);
  
  	if (con->execs != NULL)
  		for (i = 0; i < con->numExecs; i++) {
  			item = con->execs + i;
  
  			item->option.longName = _free(item->option.longName);
  			item->option.descrip = _free(item->option.descrip);
  			item->option.argDescrip = _free(item->option.argDescrip);
  
  			item->argv = _free(item->argv);
  		}
  	con->execs = _free(con->execs);
  
  	con->leftovers = _free(con->leftovers);
  	con->finalArgv = _free(con->finalArgv);
  	con->appName = _free(con->appName);
  	con->otherHelp = _free(con->otherHelp);
  	con->execPath = _free(con->execPath);
  	con->arg_strip = PBM_FREE(con->arg_strip);
  
  	con = _free(con);
  	return con;
  }
  
  int popt_addalias(popt_context con, struct popt_alias newAlias, int flags)
  {
  	popt_item item = alloca(sizeof (*item));
  	memset(item, 0, sizeof (*item));
  	item->option.longName = newAlias.longName;
  	item->option.shortName = newAlias.shortName;
  	item->option.argInfo = POPT_ARGFLAG_DOC_HIDDEN;
  	item->option.arg = 0;
  	item->option.val = 0;
  	item->option.descrip = NULL;
  	item->option.argDescrip = NULL;
  	item->argc = newAlias.argc;
  	item->argv = newAlias.argv;
  	return popt_additem(con, item, 0);
  }
  
  int popt_additem(popt_context con, popt_item newItem, int flags)
  {
  	popt_item *items, item;
  	int *nitems;
  
  	switch (flags) {
  		case 1:
  			items = &con->execs;
  			nitems = &con->numExecs;
  			break;
  		case 0:
  			items = &con->aliases;
  			nitems = &con->numAliases;
  			break;
  		default:
  			return 1;
  			break;
  	}
  
  	*items = realloc((*items), ((*nitems) + 1) * sizeof (**items));
  	if ((*items) == NULL)
  		return 1;
  
  	item = (*items) + (*nitems);
  
  	item->option.longName =
  		(newItem->option.longName ? strdup(newItem->option.longName) : NULL);
  	item->option.shortName = newItem->option.shortName;
  	item->option.argInfo = newItem->option.argInfo;
  	item->option.arg = newItem->option.arg;
  	item->option.val = newItem->option.val;
  	item->option.descrip =
  		(newItem->option.descrip ? strdup(newItem->option.descrip) : NULL);
  	item->option.argDescrip =
  		(newItem->option.
  		 argDescrip ? strdup(newItem->option.argDescrip) : NULL);
  	item->argc = newItem->argc;
  	item->argv = newItem->argv;
  
  	(*nitems)++;
  
  	return 0;
  }
  
  const char *popt_badoption(popt_context con, int flags)
  {
  	struct optionStackEntry *os = NULL;
  
  	if (con != NULL)
  		os = (flags & POPT_BADOPTION_NOALIAS) ? con->optionStack : con->os;
  
  	return (os && os->argv ? os->argv[os->next - 1] : NULL);
  
  }
  
  const char *const popt_strerror(const int error)
  {
  	switch (error) {
  		case POPT_ERROR_NOARG:
  			return POPT_("missing argument");
  		case POPT_ERROR_BADOPT:
  			return POPT_("unknown option");
  		case POPT_ERROR_BADOPERATION:
  			return POPT_("mutually exclusive logical operations requested");
  		case POPT_ERROR_NULLARG:
  			return POPT_("opt->arg should not be NULL");
  		case POPT_ERROR_OPTSTOODEEP:
  			return POPT_("aliases nested too deeply");
  		case POPT_ERROR_BADQUOTE:
  			return POPT_("error in parameter quoting");
  		case POPT_ERROR_BADNUMBER:
  			return POPT_("invalid numeric value");
  		case POPT_ERROR_OVERFLOW:
  			return POPT_("number too large or too small");
  		case POPT_ERROR_MALLOC:
  			return POPT_("memory allocation failed");
  		case POPT_ERROR_ERRNO:
  			return strerror(errno);
  		default:
  			return POPT_("unknown error");
  	}
  }
  
  int popt_stuffargs(popt_context con, const char **argv)
  {
  	int argc;
  	int rc;
  
  	if ((con->os - con->optionStack) == POPT_OPTION_DEPTH)
  		return POPT_ERROR_OPTSTOODEEP;
  
  	for (argc = 0; argv[argc]; argc++) {
  	};
  
  	con->os++;
  	con->os->next = 0;
  	con->os->nextArg = NULL;
  	con->os->nextCharArg = NULL;
  	con->os->currAlias = NULL;
  	rc = popt_dupargv(argc, argv, &con->os->argc, &con->os->argv);
  	con->os->argb = NULL;
  	con->os->stuffed = 1;
  
  	return rc;
  }
  
  const char *popt_getinvocationname(popt_context con)
  {
  	return (con->os->argv ? con->os->argv[0] : "");
  }
  
  int popt_strippedargv(popt_context con, int argc, char **argv)
  {
  	int numargs = argc;
  	int j = 1;
  	int i;
  
  	if (con->arg_strip)
  		for (i = 1; i < argc; i++) {
  			if (PBM_ISSET(i, con->arg_strip))
  				numargs--;
  		}
  
  	for (i = 1; i < argc; i++) {
  		if (con->arg_strip && PBM_ISSET(i, con->arg_strip))
  			continue;
  		argv[j] = (j < numargs) ? argv[i] : NULL;
  		j++;
  	}
  
  	return numargs;
  }
  
  #define POPT_ARGV_ARRAY_GROW_DELTA 5
  
  int popt_dupargv(int argc, const char **argv,
  				 int *argcPtr, const char ***argvPtr)
  {
  	size_t nb = (argc + 1) * sizeof (*argv);
  	const char **argv2;
  	char *dst;
  	int i;
  
  	if (argc <= 0 || argv == NULL)
  		return POPT_ERROR_NOARG;
  	for (i = 0; i < argc; i++) {
  		if (argv[i] == NULL)
  			return POPT_ERROR_NOARG;
  		nb += strlen(argv[i]) + 1;
  	}
  
  	dst = malloc(nb);
  	if (dst == NULL)
  		return POPT_ERROR_MALLOC;
  	argv2 = (void *)dst;
  	dst += (argc + 1) * sizeof (*argv);
  
  	for (i = 0; i < argc; i++) {
  		argv2[i] = dst;
  		dst += strlen(strcpy(dst, argv[i])) + 1;
  	}
  	argv2[argc] = NULL;
  
  	if (argvPtr) {
  		*argvPtr = argv2;
  	}
  	else {
  		free(argv2);
  		argv2 = NULL;
  	}
  	if (argcPtr)
  		*argcPtr = argc;
  	return 0;
  }
  
  int popt_parseargvstring(const char *s, int *argcPtr, const char ***argvPtr)
  {
  	const char *src;
  	char quote = '\0';
  	int argvAlloced = POPT_ARGV_ARRAY_GROW_DELTA;
  	const char **argv = malloc(sizeof (*argv) * argvAlloced);
  	int argc = 0;
  	int buflen = strlen(s) + 1;
  	char *buf = memset(alloca(buflen), 0, buflen);
  	int rc = POPT_ERROR_MALLOC;
  
  	if (argv == NULL)
  		return rc;
  	argv[argc] = buf;
  
  	for (src = s; *src != '\0'; src++) {
  		if (quote == *src) {
  			quote = '\0';
  		}
  		else if (quote != '\0') {
  			if (*src == '\\') {
  				src++;
  				if (!*src) {
  					rc = POPT_ERROR_BADQUOTE;
  					goto exit;
  				}
  				if (*src != quote)
  					*buf++ = '\\';
  			}
  			*buf++ = *src;
  		}
  		else if (isspace(*src)) {
  			if (*argv[argc] != '\0') {
  				buf++, argc++;
  				if (argc == argvAlloced) {
  					argvAlloced += POPT_ARGV_ARRAY_GROW_DELTA;
  					argv = realloc(argv, sizeof (*argv) * argvAlloced);
  					if (argv == NULL)
  						goto exit;
  				}
  				argv[argc] = buf;
  			}
  		}
  		else
  			switch (*src) {
  				case '"':
  				case '\'':
  					quote = *src;
  					break;
  				case '\\':
  					src++;
  					if (!*src) {
  						rc = POPT_ERROR_BADQUOTE;
  						goto exit;
  					}
  
  				default:
  					*buf++ = *src;
  					break;
  			}
  	}
  
  	if (strlen(argv[argc])) {
  		argc++, buf++;
  	}
  
  	rc = popt_dupargv(argc, argv, argcPtr, argvPtr);
  
    exit:
  	if (argv)
  		free(argv);
  	return rc;
  }
  
  static void configLine(popt_context con, char *line)
  {
  	int nameLength = strlen(con->appName);
  	const char *entryType;
  	const char *opt;
  	popt_item item = alloca(sizeof (*item));
  	int i, j;
  
  	memset(item, 0, sizeof (*item));
  
  	if (strncmp(line, con->appName, nameLength))
  		return;
  	line += nameLength;
  	if (*line == '\0' || !isspace(*line))
  		return;
  
  	while (*line != '\0' && isspace(*line))
  		line++;
  	entryType = line;
  	while (*line == '\0' || !isspace(*line))
  		line++;
  	*line++ = '\0';
  
  	while (*line != '\0' && isspace(*line))
  		line++;
  	if (*line == '\0')
  		return;
  	opt = line;
  	while (*line == '\0' || !isspace(*line))
  		line++;
  	*line++ = '\0';
  
  	while (*line != '\0' && isspace(*line))
  		line++;
  	if (*line == '\0')
  		return;
  
  	if (opt[0] == '-' && opt[1] == '-')
  		item->option.longName = opt + 2;
  	else if (opt[0] == '-' && opt[2] == '\0')
  		item->option.shortName = opt[1];
  
  	if (popt_parseargvstring(line, &item->argc, &item->argv))
  		return;
  
  	item->option.argInfo = POPT_ARGFLAG_DOC_HIDDEN;
  	for (i = 0, j = 0; i < item->argc; i++, j++) {
  		const char *f;
  		if (!strncmp
  			(item->argv[i], "--POPTdesc=", sizeof ("--POPTdesc=") - 1)) {
  			f = item->argv[i] + sizeof ("--POPTdesc=");
  			if (f[0] == '$' && f[1] == '"')
  				f++;
  			item->option.descrip = f;
  			item->option.argInfo &= ~POPT_ARGFLAG_DOC_HIDDEN;
  			j--;
  		}
  		else if (!strncmp
  				 (item->argv[i], "--POPTargs=", sizeof ("--POPTargs=") - 1)) {
  			f = item->argv[i] + sizeof ("--POPTargs=");
  			if (f[0] == '$' && f[1] == '"')
  				f++;
  			item->option.argDescrip = f;
  			item->option.argInfo &= ~POPT_ARGFLAG_DOC_HIDDEN;
  			item->option.argInfo |= POPT_ARG_STRING;
  			j--;
  		}
  		else if (j != i)
  			item->argv[j] = item->argv[i];
  	}
  	if (j != i) {
  		item->argv[j] = NULL;
  		item->argc = j;
  	}
  
  	if (!strcmp(entryType, "alias"))
  		(void)popt_additem(con, item, 0);
  	else if (!strcmp(entryType, "exec"))
  		(void)popt_additem(con, item, 1);
  }
  
  int popt_readconfigfile(popt_context con, const char *fn)
  {
  	const char *file, *chptr, *end;
  	char *buf;
  	char *dst;
  	int fd, rc;
  	off_t fileLength;
  
  	fd = open(fn, O_RDONLY);
  	if (fd < 0)
  		return (errno == ENOENT ? 0 : POPT_ERROR_ERRNO);
  
  	fileLength = lseek(fd, 0, SEEK_END);
  	if (fileLength == -1 || lseek(fd, 0, 0) == -1) {
  		rc = errno;
  		(void)close(fd);
  		errno = rc;
  		return POPT_ERROR_ERRNO;
  	}
  
  	file = alloca(fileLength + 1);
  	if (read(fd, (char *)file, fileLength) != fileLength) {
  		rc = errno;
  		(void)close(fd);
  		errno = rc;
  		return POPT_ERROR_ERRNO;
  	}
  	if (close(fd) == -1)
  		return POPT_ERROR_ERRNO;
  
  	dst = buf = alloca(fileLength + 1);
  
  	chptr = file;
  	end = (file + fileLength);
  	while (chptr < end) {
  		switch (*chptr) {
  			case '\n':
  				*dst = '\0';
  				dst = buf;
  				while (*dst && isspace(*dst))
  					dst++;
  				if (*dst && *dst != '#')
  					configLine(con, dst);
  				chptr++;
  				break;
  			case '\\':
  				*dst++ = *chptr++;
  				if (chptr < end) {
  					if (*chptr == '\n')
  						dst--, chptr++;
  					else
  						*dst++ = *chptr++;
  				}
  				break;
  			default:
  				*dst++ = *chptr++;
  				break;
  		}
  	}
  
  	return 0;
  }
  
  int popt_readdefaultconfig(popt_context con, int useEnv)
  {
  	char *fn, *home;
  	int rc;
  
  	if (!con->appName)
  		return 0;
  
  	rc = popt_readconfigfile(con, "/etc/popt");
  	if (rc)
  		return rc;
  	if (getuid() != geteuid())
  		return 0;
  
  	if ((home = getenv("HOME"))) {
  		fn = alloca(strlen(home) + 20);
  		strcpy(fn, home);
  		strcat(fn, "/.popt");
  		rc = popt_readconfigfile(con, fn);
  		if (rc)
  			return rc;
  	}
  
  	return 0;
  }
  
  static void displayArgs(popt_context con,
  						enum popt_callbackreason foo,
  						struct popt_option *key, const char *arg, void *data)
  {
  	if (key->shortName == '?')
  		popt_printhelp(con, stdout, 0);
  	else
  		popt_printusage(con, stdout, 0);
  	exit(0);
  }
  
  struct popt_option popt_aliasOptions[] = {
  	POPT_TABLEEND
  };
  
  struct popt_option popt_helpoptions[] = {
  	{NULL, '\0', POPT_ARG_CALLBACK, (void *)&displayArgs, '\0', NULL, NULL},
  	{"help", '?', 0, NULL, '?', N_("Show this help message"), NULL},
  	{"usage", '\0', 0, NULL, 'u', N_("Display brief usage message"), NULL},
  
  	POPT_TABLEEND
  };
  
  static const char *const
  getTableTranslationDomain(const struct popt_option *table)
  {
  	const struct popt_option *opt;
  
  	if (table != NULL)
  		for (opt = table; opt->longName || opt->shortName || opt->arg; opt++) {
  			if (opt->argInfo == POPT_ARG_INTL_DOMAIN)
  				return opt->arg;
  		}
  	return NULL;
  }
  
  static const char *const
  getArgDescrip(const struct popt_option *opt, const char *translation_domain)
  {
  	if (!(opt->argInfo & POPT_ARG_MASK))
  		return NULL;
  
  	if (opt == (popt_helpoptions + 1) || opt == (popt_helpoptions + 2))
  		if (opt->argDescrip)
  			return POPT_(opt->argDescrip);
  
  	if (opt->argDescrip)
  		return D_(translation_domain, opt->argDescrip);
  
  	switch (opt->argInfo & POPT_ARG_MASK) {
  		case POPT_ARG_NONE:
  			return POPT_("NONE");
  		case POPT_ARG_VAL:
  			return POPT_("VAL");
  		case POPT_ARG_INT:
  			return POPT_("INT");
  		case POPT_ARG_LONG:
  			return POPT_("LONG");
  		case POPT_ARG_STRING:
  			return POPT_("STRING");
  		case POPT_ARG_FLOAT:
  			return POPT_("FLOAT");
  		case POPT_ARG_DOUBLE:
  			return POPT_("DOUBLE");
  		default:
  			return POPT_("ARG");
  	}
  }
  
  static char *singleOptionDefaultValue(int lineLength,
  									  const struct popt_option *opt,
  									  const char *translation_domain)
  {
  	const char *defstr = D_(translation_domain, "default");
  	char *le = malloc(4 * lineLength + 1);
  	char *l = le;
  
  	if (l == NULL)
  		return NULL;
  	*le = '\0';
  	*le++ = '(';
  	strcpy(le, defstr);
  	le += strlen(le);
  	*le++ = ':';
  	*le++ = ' ';
  	if (opt->arg)
  		switch (opt->argInfo & POPT_ARG_MASK) {
  			case POPT_ARG_VAL:
  			case POPT_ARG_INT:
  				{
  					long aLong = *((int *)opt->arg);
  					le += sprintf(le, "%ld", aLong);
  				} break;
  			case POPT_ARG_LONG:
  				{
  					long aLong = *((long *)opt->arg);
  					le += sprintf(le, "%ld", aLong);
  				} break;
  			case POPT_ARG_FLOAT:
  				{
  					double aDouble = *((float *)opt->arg);
  					le += sprintf(le, "%g", aDouble);
  				} break;
  			case POPT_ARG_DOUBLE:
  				{
  					double aDouble = *((double *)opt->arg);
  					le += sprintf(le, "%g", aDouble);
  				} break;
  			case POPT_ARG_STRING:
  				{
  					const char *s = *(const char **)opt->arg;
  					if (s == NULL) {
  						strcpy(le, "null");
  						le += strlen(le);
  					}
  					else {
  						size_t slen =
  							4 * lineLength - (le - l) - sizeof ("\"...\")");
  						*le++ = '"';
  						strncpy(le, s, slen);
  						le[slen] = '\0';
  						le += strlen(le);
  						if (slen < strlen(s)) {
  							strcpy(le, "...");
  							le += strlen(le);
  						}
  						*le++ = '"';
  					}
  				}
  				break;
  			case POPT_ARG_NONE:
  			default:
  				l = _free(l);
  				return NULL;
  				break;
  		}
  	*le++ = ')';
  	*le = '\0';
  
  	return l;
  }
  
  static void singleOptionHelp(FILE * fp, int maxLeftCol,
  							 const struct popt_option *opt,
  							 const char *translation_domain)
  {
  	int indentLength = maxLeftCol + 5;
  	int lineLength = 79 - indentLength;
  	const char *help = D_(translation_domain, opt->descrip);
  	const char *argDescrip = getArgDescrip(opt, translation_domain);
  	int helpLength;
  	char *defs = NULL;
  	char *left;
  	int nb = maxLeftCol + 1;
  
  	if (opt->longName)
  		nb += strlen(opt->longName);
  	if (argDescrip)
  		nb += strlen(argDescrip);
  
  	left = malloc(nb);
  	if (left == NULL)
  		return;
  	left[0] = '\0';
  	left[maxLeftCol] = '\0';
  
  	if (opt->longName && opt->shortName)
  		sprintf(left, "-%c, %s%s", opt->shortName,
  				((opt->argInfo & POPT_ARGFLAG_ONEDASH) ? "-" : "--"),
  				opt->longName);
  	else if (opt->shortName != '\0')
  		sprintf(left, "-%c", opt->shortName);
  	else if (opt->longName)
  		sprintf(left, "%s%s",
  				((opt->argInfo & POPT_ARGFLAG_ONEDASH) ? "-" : "--"),
  				opt->longName);
  	if (!*left)
  		goto out;
  	if (argDescrip) {
  		char *le = left + strlen(left);
  
  		if (opt->argInfo & POPT_ARGFLAG_OPTIONAL)
  			*le++ = '[';
  
  		if (opt->argInfo & POPT_ARGFLAG_SHOW_DEFAULT) {
  			defs =
  				singleOptionDefaultValue(lineLength, opt, translation_domain);
  			if (defs) {
  				char *t = malloc((help ? strlen(help) : 0) +
  								 strlen(defs) + sizeof (" "));
  				if (t) {
  					char *te = t;
  					*te = '\0';
  					if (help) {
  						strcpy(te, help);
  						te += strlen(te);
  					}
  					*te++ = ' ';
  					strcpy(te, defs);
  					defs = _free(defs);
  				}
  				defs = t;
  			}
  		}
  
  		if (opt->argDescrip == NULL) {
  			switch (opt->argInfo & POPT_ARG_MASK) {
  				case POPT_ARG_NONE:
  					break;
  				case POPT_ARG_VAL:
  					{
  						long aLong = opt->val;
  						int ops = (opt->argInfo & POPT_ARGFLAG_LOGICALOPS);
  						int negate = (opt->argInfo & POPT_ARGFLAG_NOT);
  
  						if (!ops
  							&& (aLong == 0L || aLong == 1L || aLong == -1L))
  							break;
  						*le++ = '[';
  						switch (ops) {
  							case POPT_ARGFLAG_OR:
  								*le++ = '|';
  								break;
  							case POPT_ARGFLAG_AND:
  								*le++ = '&';
  								break;
  							case POPT_ARGFLAG_XOR:
  								*le++ = '^';
  								break;
  							default:
  								break;
  						}
  						*le++ = '=';
  						if (negate)
  							*le++ = '~';
  
  						le += sprintf(le, (ops ? "0x%lx" : "%ld"), aLong);
  
  						*le++ = ']';
  					}
  					break;
  				case POPT_ARG_INT:
  				case POPT_ARG_LONG:
  				case POPT_ARG_FLOAT:
  				case POPT_ARG_DOUBLE:
  				case POPT_ARG_STRING:
  					*le++ = '=';
  					strcpy(le, argDescrip);
  					le += strlen(le);
  					break;
  				default:
  					break;
  			}
  		}
  		else {
  			*le++ = '=';
  			strcpy(le, argDescrip);
  			le += strlen(le);
  		}
  		if (opt->argInfo & POPT_ARGFLAG_OPTIONAL)
  			*le++ = ']';
  		*le = '\0';
  	}
  
  	if (help)
  		fprintf(fp, "  %-*s   ", maxLeftCol, left);
  	else {
  		fprintf(fp, "  %s\n", left);
  		goto out;
  	}
  
  	left = _free(left);
  	if (defs) {
  		help = defs;
  		defs = NULL;
  	}
  
  	helpLength = strlen(help);
  	while (helpLength > lineLength) {
  		const char *ch;
  		char format[10];
  
  		ch = help + lineLength - 1;
  		while (ch > help && !isspace(*ch))
  			ch--;
  		if (ch == help)
  			break;
  		while (ch > (help + 1) && isspace(*ch))
  			ch--;
  		ch++;
  
  		sprintf(format, "%%.%ds\n%%%ds", (int)(ch - help), indentLength);
  
  		fprintf(fp, format, help, " ");
  
  		help = ch;
  		while (isspace(*help) && *help)
  			help++;
  		helpLength = strlen(help);
  	}
  
  	if (helpLength)
  		fprintf(fp, "%s\n", help);
  
    out:
  	defs = _free(defs);
  	left = _free(left);
  }
  
  static int maxArgWidth(const struct popt_option *opt,
  					   const char *translation_domain)
  {
  	int max = 0;
  	int len = 0;
  	const char *s;
  
  	if (opt != NULL)
  		while (opt->longName || opt->shortName || opt->arg) {
  			if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INCLUDE_TABLE) {
  				if (opt->arg)
  					len = maxArgWidth(opt->arg, translation_domain);
  				if (len > max)
  					max = len;
  			}
  			else if (!(opt->argInfo & POPT_ARGFLAG_DOC_HIDDEN)) {
  				len = sizeof ("  ") - 1;
  				if (opt->shortName != '\0')
  					len += sizeof ("-X") - 1;
  				if (opt->shortName != '\0' && opt->longName)
  					len += sizeof (", ") - 1;
  				if (opt->longName) {
  					len += ((opt->argInfo & POPT_ARGFLAG_ONEDASH)
  							? sizeof ("-") - 1 : sizeof ("--") - 1);
  					len += strlen(opt->longName);
  				}
  
  				s = getArgDescrip(opt, translation_domain);
  				if (s)
  					len += sizeof ("=") - 1 + strlen(s);
  				if (opt->argInfo & POPT_ARGFLAG_OPTIONAL)
  					len += sizeof ("[]") - 1;
  				if (len > max)
  					max = len;
  			}
  
  			opt++;
  		}
  
  	return max;
  }
  
  static void itemHelp(FILE * fp,
  					 popt_item items, int nitems, int left,
  					 const char *translation_domain)
  {
  	popt_item item;
  	int i;
  
  	if (items != NULL)
  		for (i = 0, item = items; i < nitems; i++, item++) {
  			const struct popt_option *opt;
  			opt = &item->option;
  			if ((opt->longName || opt->shortName) &&
  				!(opt->argInfo & POPT_ARGFLAG_DOC_HIDDEN))
  				singleOptionHelp(fp, left, opt, translation_domain);
  		}
  }
  
  static void singleTableHelp(popt_context con, FILE * fp,
  							const struct popt_option *table, int left,
  							const char *translation_domain)
  {
  	const struct popt_option *opt;
  	const char *sub_transdom;
  
  	if (table == popt_aliasOptions) {
  		itemHelp(fp, con->aliases, con->numAliases, left, NULL);
  		itemHelp(fp, con->execs, con->numExecs, left, NULL);
  		return;
  	}
  
  	if (table != NULL)
  		for (opt = table; (opt->longName || opt->shortName || opt->arg);
  			 opt++) {
  			if ((opt->longName || opt->shortName)
  				&& !(opt->argInfo & POPT_ARGFLAG_DOC_HIDDEN))
  				singleOptionHelp(fp, left, opt, translation_domain);
  		}
  
  	if (table != NULL)
  		for (opt = table; (opt->longName || opt->shortName || opt->arg);
  			 opt++) {
  			if ((opt->argInfo & POPT_ARG_MASK) != POPT_ARG_INCLUDE_TABLE)
  				continue;
  			sub_transdom = getTableTranslationDomain(opt->arg);
  			if (sub_transdom == NULL)
  				sub_transdom = translation_domain;
  
  			if (opt->descrip)
  				fprintf(fp, "\n%s\n", D_(sub_transdom, opt->descrip));
  
  			singleTableHelp(con, fp, opt->arg, left, sub_transdom);
  		}
  }
  
  static int showHelpIntro(popt_context con, FILE * fp)
  {
  	int len = 6;
  	const char *fn;
  
  	fprintf(fp, POPT_("Usage:"));
  	if (!(con->flags & POPT_CONTEXT_KEEP_FIRST)) {
  		fn = con->optionStack->argv[0];
  
  		if (fn == NULL)
  			return len;
  		if (strchr(fn, '/'))
  			fn = strrchr(fn, '/') + 1;
  		fprintf(fp, " %s", fn);
  		len += strlen(fn) + 1;
  	}
  
  	return len;
  }
  
  void popt_printhelp(popt_context con, FILE * fp, int flags)
  {
  	int leftColWidth;
  
  	(void)showHelpIntro(con, fp);
  	if (con->otherHelp)
  		fprintf(fp, " %s\n", con->otherHelp);
  	else
  		fprintf(fp, " %s\n", POPT_("[OPTION...]"));
  
  	leftColWidth = maxArgWidth(con->options, NULL);
  	singleTableHelp(con, fp, con->options, leftColWidth, NULL);
  }
  
  static int singleOptionUsage(FILE * fp, int cursor,
  							 const struct popt_option *opt,
  							 const char *translation_domain)
  {
  	int len = 3;
  	char shortStr[2] = { '\0', '\0' };
  	const char *item = shortStr;
  	const char *argDescrip = getArgDescrip(opt, translation_domain);
  
  	if (opt->shortName != '\0') {
  		if (!(opt->argInfo & POPT_ARG_MASK))
  			return cursor;
  		len++;
  		shortStr[0] = opt->shortName;
  		shortStr[1] = '\0';
  	}
  	else if (opt->longName) {
  		len += 1 + strlen(opt->longName);
  		item = opt->longName;
  	}
  
  	if (len == 3)
  		return cursor;
  
  	if (argDescrip)
  		len += strlen(argDescrip) + 1;
  
  	if ((cursor + len) > 79) {
  		fprintf(fp, "\n       ");
  		cursor = 7;
  	}
  
  	fprintf(fp, " [-%s%s%s%s]",
  			((opt->shortName
  			  || (opt->argInfo & POPT_ARGFLAG_ONEDASH)) ? "" : "-"), item,
  			(argDescrip ? (opt->shortName != '\0' ? " " : "=") : ""),
  			(argDescrip ? argDescrip : ""));
  
  	return cursor + len + 1;
  }
  
  static int itemUsage(FILE * fp, int cursor, popt_item item, int nitems,
  					 const char *translation_domain)
  {
  	int i;
  
  	if (item != NULL)
  		for (i = 0; i < nitems; i++, item++) {
  			const struct popt_option *opt;
  			opt = &item->option;
  			if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INTL_DOMAIN) {
  				translation_domain = (const char *)opt->arg;
  			}
  			else if ((opt->longName || opt->shortName) &&
  					 !(opt->argInfo & POPT_ARGFLAG_DOC_HIDDEN)) {
  				cursor =
  					singleOptionUsage(fp, cursor, opt, translation_domain);
  			}
  		}
  
  	return cursor;
  }
  
  static int singleTableUsage(popt_context con, FILE * fp,
  							int cursor, const struct popt_option *opt,
  							const char *translation_domain)
  {
  	if (opt != NULL)
  		for (; (opt->longName || opt->shortName || opt->arg); opt++) {
  			if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INTL_DOMAIN) {
  				translation_domain = (const char *)opt->arg;
  			}
  			else if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INCLUDE_TABLE) {
  				if (opt->arg)
  					cursor = singleTableUsage(con, fp, cursor, opt->arg,
  											  translation_domain);
  			}
  			else if ((opt->longName || opt->shortName) &&
  					 !(opt->argInfo & POPT_ARGFLAG_DOC_HIDDEN)) {
  				cursor =
  					singleOptionUsage(fp, cursor, opt, translation_domain);
  			}
  		}
  
  	return cursor;
  }
  
  static int showShortOptions(const struct popt_option *opt, FILE * fp,
  							char *str)
  {
  	char *s = alloca(300);
  
  	s[0] = '\0';
  	if (str == NULL) {
  		memset(s, 0, sizeof (s));
  		str = s;
  	}
  
  	if (opt != NULL)
  		for (; (opt->longName || opt->shortName || opt->arg); opt++) {
  			if (opt->shortName && !(opt->argInfo & POPT_ARG_MASK))
  				str[strlen(str)] = opt->shortName;
  			else if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INCLUDE_TABLE)
  				if (opt->arg)
  					(void)showShortOptions(opt->arg, fp, str);
  		}
  
  	if (s != str || *s != '\0')
  		return 0;
  
  	fprintf(fp, " [-%s]", s);
  	return strlen(s) + 4;
  }
  
  void popt_printusage(popt_context con, FILE * fp, int flags)
  {
  	int cursor;
  
  	cursor = showHelpIntro(con, fp);
  	cursor += showShortOptions(con->options, fp, NULL);
  	(void)singleTableUsage(con, fp, cursor, con->options, NULL);
  	(void)itemUsage(fp, cursor, con->aliases, con->numAliases, NULL);
  	(void)itemUsage(fp, cursor, con->execs, con->numExecs, NULL);
  
  	if (con->otherHelp) {
  		cursor += strlen(con->otherHelp) + 1;
  		if (cursor > 79)
  			fprintf(fp, "\n       ");
  		fprintf(fp, " %s", con->otherHelp);
  	}
  
  	fprintf(fp, "\n");
  }
  
  void popt_setotheroptionhelp(popt_context con, const char *text)
  {
  	con->otherHelp = _free(con->otherHelp);
  	con->otherHelp = strdup(text);
  }
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_popt.h
  ============================================================
  $ cvs update -p -r1.1 lmtp2nntp_popt.h
  /* 
   *  Option Parsing Library (POPT)
   *  Copyright (c) 1998-2002 Red Hat, Inc.
   *
   *  Permission is hereby granted, free of charge, to any person obtaining a copy
   *  of this software and associated documentation files (the "Software"), to deal
   *  in the Software without restriction, including without limitation the rights
   *  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
   *  copies of the Software, and to permit persons to whom the Software is
   *  furnished to do so, subject to the following conditions:
   *
   *  The above copyright notice and this permission notice shall be included in
   *  all copies or substantial portions of the Software.
   *
   *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
   *  X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
   *  AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
   *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
   *
   *  Except as contained in this notice, the name of the X Consortium shall not be
   *  used in advertising or otherwise to promote the sale, use or other dealings
   *  in this Software without prior written authorization from the X Consortium.
   *
   *  DO NOT EDIT THIS FILE, IT WAS AUTOMATICALLY GENERATED!
   *
   *  This is an automatically generated, extremely stripped down version
   *  of the POPT 1.6.3 library from Red Hat, Inc. This version is still
   *  distributed under the same original POPT Open Source license, but
   *  Red Hat is no longer responsible for this version.
   */
  
  #ifndef __LMTP2NNTP_POPT_H__
  #define __LMTP2NNTP_POPT_H__
  
  #ifdef __cplusplus
  extern "C" {
  #endif
  
  #include <stdio.h>
  
  #define POPT_OPTION_DEPTH	10
  
  #define POPT_ARG_NONE		0
  #define POPT_ARG_STRING		1
  #define POPT_ARG_INT		2
  #define POPT_ARG_LONG		3
  #define POPT_ARG_INCLUDE_TABLE	4
  #define POPT_ARG_CALLBACK	5
  #define POPT_ARG_INTL_DOMAIN    6
  #define POPT_ARG_VAL		7
  #define	POPT_ARG_FLOAT		8
  #define	POPT_ARG_DOUBLE		9
  
  #define POPT_ARG_MASK		0x0000FFFF
  
  #define POPT_ARGFLAG_ONEDASH	0x80000000
  #define POPT_ARGFLAG_DOC_HIDDEN 0x40000000
  #define POPT_ARGFLAG_STRIP	0x20000000
  #define	POPT_ARGFLAG_OPTIONAL	0x10000000
  
  #define	POPT_ARGFLAG_OR		0x08000000
  #define	POPT_ARGFLAG_NOR	0x09000000
  #define	POPT_ARGFLAG_AND	0x04000000
  #define	POPT_ARGFLAG_NAND	0x05000000
  #define	POPT_ARGFLAG_XOR	0x02000000
  #define	POPT_ARGFLAG_NOT	0x01000000
  #define POPT_ARGFLAG_LOGICALOPS \
          (POPT_ARGFLAG_OR|POPT_ARGFLAG_AND|POPT_ARGFLAG_XOR)
  
  #define	POPT_BIT_SET	(POPT_ARG_VAL|POPT_ARGFLAG_OR)
  
  #define	POPT_BIT_CLR	(POPT_ARG_VAL|POPT_ARGFLAG_NAND)
  
  #define	POPT_ARGFLAG_SHOW_DEFAULT 0x00800000
  
  #define POPT_CBFLAG_PRE		0x80000000
  #define POPT_CBFLAG_POST	0x40000000
  #define POPT_CBFLAG_INC_DATA	0x20000000
  #define POPT_CBFLAG_SKIPOPTION	0x10000000
  #define POPT_CBFLAG_CONTINUE	0x08000000
  
  #define POPT_ERROR_NOARG	-10
  #define POPT_ERROR_BADOPT	-11
  #define POPT_ERROR_OPTSTOODEEP	-13
  #define POPT_ERROR_BADQUOTE	-15
  #define POPT_ERROR_ERRNO	-16
  #define POPT_ERROR_BADNUMBER	-17
  #define POPT_ERROR_OVERFLOW	-18
  #define	POPT_ERROR_BADOPERATION	-19
  #define	POPT_ERROR_NULLARG	-20
  #define	POPT_ERROR_MALLOC	-21
  
  #define POPT_BADOPTION_NOALIAS  (1 << 0)
  
  #define POPT_CONTEXT_NO_EXEC	(1 << 0)
  #define POPT_CONTEXT_KEEP_FIRST	(1 << 1)
  #define POPT_CONTEXT_POSIXMEHARDER (1 << 2)
  #define POPT_CONTEXT_ARG_OPTS	(1 << 4)
  
  	struct popt_option {
  		const char *longName;
  		char shortName;
  		int argInfo;
  		void *arg;
  		int val;
  		const char *descrip;
  		const char *argDescrip;
  	};
  
  	struct popt_alias {
  		const char *longName;
  		char shortName;
  		int argc;
  		const char **argv;
  	};
  
  	typedef struct popt_item_s {
  		struct popt_option option;
  		int argc;
  		const char **argv;
  	}  *popt_item;
  
  	extern struct popt_option popt_aliasOptions[];
  #define POPT_AUTOALIAS { NULL, '\0', POPT_ARG_INCLUDE_TABLE, popt_aliasOptions, \
  			0, "Options implemented via popt alias/exec:", NULL },
  
  	extern struct popt_option popt_helpoptions[];
  #define POPT_AUTOHELP { NULL, '\0', POPT_ARG_INCLUDE_TABLE, popt_helpoptions, \
  			0, "Help options:", NULL },
  
  #define POPT_TABLEEND { NULL, '\0', 0, 0, 0, NULL, NULL }
  
  	typedef struct popt_context_s *popt_context;
  
  #ifndef __cplusplus
  
  	typedef struct popt_option *popt_option;
  
  #endif
  
  	enum popt_callbackreason { POPT_CALLBACK_REASON_PRE,
  		POPT_CALLBACK_REASON_POST,
  		POPT_CALLBACK_REASON_OPTION
  	};
  
  	typedef void (*popt_callbacktype) (popt_context con,
  									   enum popt_callbackreason reason,
  									   const struct popt_option * opt,
  									   const char *arg, const void *data);
  
  	popt_context popt_getcontext(const char *name,
  								 int argc, const char **argv,
  								 const struct popt_option *options,
  								 int flags);
  
  	void popt_resetcontext(popt_context con);
  
  	int popt_getnextopt(popt_context con);
  
  	const char *popt_getoptarg(popt_context con);
  
  	const char *popt_getarg(popt_context con);
  
  	const char *popt_peekarg(popt_context con);
  
  	const char **popt_getargs(popt_context con);
  
  	const char *popt_badoption(popt_context con, int flags);
  
  	popt_context popt_freecontext(popt_context con);
  
  	int popt_stuffargs(popt_context con, const char **argv);
  
  	int popt_addalias(popt_context con, struct popt_alias alias, int flags);
  
  	int popt_additem(popt_context con, popt_item newItem, int flags);
  
  	int popt_readconfigfile(popt_context con, const char *fn);
  
  	int popt_readdefaultconfig(popt_context con, int useEnv);
  
  	int popt_dupargv(int argc, const char **argv,
  					 int *argcPtr, const char ***argvPtr);
  
  	int popt_parseargvstring(const char *s,
  							 int *argcPtr, const char ***argvPtr);
  
  	const char *const popt_strerror(const int error);
  
  	void popt_setexecpath(popt_context con, const char *path,
  						  int allowAbsolute);
  
  	void popt_printhelp(popt_context con, FILE * fp, int flags);
  
  	void popt_printusage(popt_context con, FILE * fp, int flags);
  
  	void popt_setotheroptionhelp(popt_context con, const char *text);
  
  	const char *popt_getinvocationname(popt_context con);
  
  	int popt_strippedargv(popt_context con, int argc, char **argv);
  
  #ifdef  __cplusplus
  }
  #endif
  #endif

From ossp-cvs-owner@ossp.org  Mon Jan  7 15:36:55 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AEA4E764D1; Mon,  7 Jan 2002 15:36:55 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pcre AUTHORS COPYING ChangeLog ChangeLog.OSSP LIC...
Message-Id: <20020107143655.AEA4E764D1@mail.ossp.org>
Date: Mon,  7 Jan 2002 15:36:55 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   07-Jan-2002 15:36:55
  Branch: HEAD                             Handle: 2002010714365400

  Added files:
    ossp-pkg/pcre           AUTHORS COPYING NEWS
  Modified files:
    ossp-pkg/pcre           ChangeLog ChangeLog.OSSP LICENCE README

  Log:
    merge changes from 3.4 to 3.5

  Summary:
    Revision    Changes     Path
    1.1         +6  -0      ossp-pkg/pcre/AUTHORS
    1.1         +50 -0      ossp-pkg/pcre/COPYING
    1.8         +56 -0      ossp-pkg/pcre/ChangeLog
    1.18        +1  -0      ossp-pkg/pcre/ChangeLog.OSSP
    1.5         +7  -3      ossp-pkg/pcre/LICENCE
    1.1         +85 -0      ossp-pkg/pcre/NEWS
    1.5         +70 -33     ossp-pkg/pcre/README
  ____________________________________________________________________________

  Index: ossp-pkg/pcre/AUTHORS
  ============================================================
  $ cvs update -p -r1.1 AUTHORS
  Written by: Philip Hazel <ph10@cam.ac.uk>
  
  University of Cambridge Computing Service,
  Cambridge, England. Phone: +44 1223 334714.
  
  Copyright (c) 1997-2001 University of Cambridge
  Index: ossp-pkg/pcre/COPYING
  ============================================================
  $ cvs update -p -r1.1 COPYING
  PCRE LICENCE
  ------------
  
  PCRE is a library of functions to support regular expressions whose syntax
  and semantics are as close as possible to those of the Perl 5 language.
  
  Written by: Philip Hazel <ph10@cam.ac.uk>
  
  University of Cambridge Computing Service,
  Cambridge, England. Phone: +44 1223 334714.
  
  Copyright (c) 1997-2001 University of Cambridge
  
  Permission is granted to anyone to use this software for any purpose on any
  computer system, and to redistribute it freely, subject to the following
  restrictions:
  
  1. This software is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  
  2. The origin of this software must not be misrepresented, either by
     explicit claim or by omission. In practice, this means that if you use
     PCRE in software which you distribute to others, commercially or
     otherwise, you must put a sentence like this
  
       Regular expression support is provided by the PCRE library package,
       which is open source software, written by Philip Hazel, and copyright
       by the University of Cambridge, England.
  
     somewhere reasonably visible in your documentation and in any relevant
     files or online help data or similar. A reference to the ftp site for
     the source, that is, to
  
       ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/
  
     should also be given in the documentation.
  
  3. Altered versions must be plainly marked as such, and must not be
     misrepresented as being the original software.
  
  4. If PCRE is embedded in any software that is released under the GNU
     General Purpose Licence (GPL), or Lesser General Purpose Licence (LGPL),
     then the terms of that licence shall supersede any condition above with
     which it is incompatible.
  
  The documentation for PCRE, supplied in the "doc" directory, is distributed
  under the same terms as the software itself.
  
  End
  Index: ossp-pkg/pcre/ChangeLog
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 ChangeLog
  --- ossp-pkg/pcre/ChangeLog	29 Aug 2000 19:24:17 -0000	1.7
  +++ ossp-pkg/pcre/ChangeLog	7 Jan 2002 14:36:54 -0000	1.8
  @@ -1,6 +1,62 @@
   ChangeLog for PCRE
   ------------------
   
  +Version 3.5 15-Aug-01
  +---------------------
  +
  +1. Added some missing #if !defined NOPOSIX conditionals in pcretest.c that
  +had been forgotten.
  +
  +2. By using declared but undefined structures, we can avoid using "void"
  +definitions in pcre.h while keeping the internal definitions of the structures
  +private.
  +
  +3. The distribution is now built using autoconf 2.50 and libtool 1.4. From a
  +user point of view, this means that both static and shared libraries are built
  +by default, but this can be individually controlled. More of the work of
  +handling this static/shared cases is now inside libtool instead of PCRE's make
  +file.
  +
  +4. The pcretest utility is now installed along with pcregrep because it is
  +useful for users (to test regexs) and by doing this, it automatically gets
  +relinked by libtool. The documentation has been turned into a man page, so
  +there are now .1, .txt, and .html versions in /doc.
  +
  +5. Upgrades to pcregrep:
  +   (i)   Added long-form option names like gnu grep.
  +   (ii)  Added --help to list all options with an explanatory phrase.
  +   (iii) Added -r, --recursive to recurse into sub-directories.
  +   (iv)  Added -f, --file to read patterns from a file.
  +
  +6. pcre_exec() was referring to its "code" argument before testing that
  +argument for NULL (and giving an error if it was NULL).
  +
  +7. Upgraded Makefile.in to allow for compiling in a different directory from
  +the source directory.
  +
  +8. Tiny buglet in pcretest: when pcre_fullinfo() was called to retrieve the
  +options bits, the pointer it was passed was to an int instead of to an unsigned
  +long int. This mattered only on 64-bit systems.
  +
  +9. Fixed typo (3.4/1) in pcre.h again. Sigh. I had changed pcre.h (which is
  +generated) instead of pcre.in, which it its source. Also made the same change
  +in several of the .c files.
  +
  +10. A new release of gcc defines printf() as a macro, which broke pcretest
  +because it had an ifdef in the middle of a string argument for printf(). Fixed
  +by using separate calls to printf().
  +
  +11. Added --enable-newline-is-cr and --enable-newline-is-lf to the configure
  +script, to force use of CR or LF instead of \n in the source. On non-Unix
  +systems, the value can be set in config.h.
  +
  +12. The limit of 200 on non-capturing parentheses is a _nesting_ limit, not an
  +absolute limit. Changed the text of the error message to make this clear, and
  +likewise updated the man page.
  +
  +13. The limit of 99 on the number of capturing subpatterns has been removed.
  +The new limit is 65535, which I hope will not be a "real" limit.
  +
   
   Version 3.4 22-Aug-00
   ---------------------
  Index: ossp-pkg/pcre/ChangeLog.OSSP
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 ChangeLog.OSSP
  --- ossp-pkg/pcre/ChangeLog.OSSP	16 Aug 2001 10:08:06 -0000	1.17
  +++ ossp-pkg/pcre/ChangeLog.OSSP	7 Jan 2002 14:36:54 -0000	1.18
  @@ -4,6 +4,7 @@
   
    Changes made to OSSP pcre 3.5 (29-Aug-2000 to 16-Aug-2001):
   
  +  *) Merged in changes between PCRE 3.4 to 3.5
     *) Upgraded GNU libtool from 1.3.5 to 1.4
     *) Upgraded GNU autoconf from 2.13 to 2.52
     *) Upgraded GNU shtool from 1.5.1 to 1.5.4
  Index: ossp-pkg/pcre/LICENCE
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 LICENCE
  --- ossp-pkg/pcre/LICENCE	2 Aug 2000 09:46:06 -0000	1.4
  +++ ossp-pkg/pcre/LICENCE	7 Jan 2002 14:36:54 -0000	1.5
  @@ -9,7 +9,7 @@
   University of Cambridge Computing Service,
   Cambridge, England. Phone: +44 1223 334714.
   
  -Copyright (c) 1997-2000 University of Cambridge
  +Copyright (c) 1997-2001 University of Cambridge
   
   Permission is granted to anyone to use this software for any purpose on any
   computer system, and to redistribute it freely, subject to the following
  @@ -40,7 +40,11 @@
      misrepresented as being the original software.
   
   4. If PCRE is embedded in any software that is released under the GNU
  -   General Purpose Licence (GPL), then the terms of that licence shall
  -   supersede any condition above with which it is incompatible.
  +   General Purpose Licence (GPL), or Lesser General Purpose Licence (LGPL),
  +   then the terms of that licence shall supersede any condition above with
  +   which it is incompatible.
  +
  +The documentation for PCRE, supplied in the "doc" directory, is distributed
  +under the same terms as the software itself.
   
   End
  Index: ossp-pkg/pcre/NEWS
  ============================================================
  $ cvs update -p -r1.1 NEWS
  News about PCRE releases
  ------------------------
  
  Release 3.5 15-Aug-01
  ---------------------
  
  1. The configuring system has been upgraded to use later versions of autoconf
  and libtool. By default it builds both a shared and a static library if the OS
  supports it. You can use --disable-shared or --disable-static on the configure
  command if you want only one of them.
  
  2. The pcretest utility is now installed along with pcregrep because it is
  useful for users (to test regexs) and by doing this, it automatically gets
  relinked by libtool. The documentation has been turned into a man page, so
  there are now .1, .txt, and .html versions in /doc.
  
  3. Upgrades to pcregrep:
     (i)   Added long-form option names like gnu grep.
     (ii)  Added --help to list all options with an explanatory phrase.
     (iii) Added -r, --recursive to recurse into sub-directories.
     (iv)  Added -f, --file to read patterns from a file.
  
  4. Added --enable-newline-is-cr and --enable-newline-is-lf to the configure
  script, to force use of CR or LF instead of \n in the source. On non-Unix
  systems, the value can be set in config.h.
  
  5. The limit of 200 on non-capturing parentheses is a _nesting_ limit, not an
  absolute limit. Changed the text of the error message to make this clear, and
  likewise updated the man page.
  
  6. The limit of 99 on the number of capturing subpatterns has been removed.
  The new limit is 65535, which I hope will not be a "real" limit.
  
  
  Release 3.3 01-Aug-00
  ---------------------
  
  There is some support for UTF-8 character strings. This is incomplete and
  experimental. The documentation describes what is and what is not implemented.
  Otherwise, this is just a bug-fixing release.
  
  
  Release 3.0 01-Feb-00
  ---------------------
  
  1. A "configure" script is now used to configure PCRE for Unix systems. It
  builds a Makefile, a config.h file, and the pcre-config script.
  
  2. PCRE is built as a shared library by default.
  
  3. There is support for POSIX classes such as [:alpha:].
  
  5. There is an experimental recursion feature.
  
  ----------------------------------------------------------------------------
            IMPORTANT FOR THOSE UPGRADING FROM VERSIONS BEFORE 2.00
  
  Please note that there has been a change in the API such that a larger
  ovector is required at matching time, to provide some additional workspace.
  The new man page has details. This change was necessary in order to support
  some of the new functionality in Perl 5.005.
  
            IMPORTANT FOR THOSE UPGRADING FROM VERSION 2.00
  
  Another (I hope this is the last!) change has been made to the API for the
  pcre_compile() function. An additional argument has been added to make it
  possible to pass over a pointer to character tables built in the current
  locale by pcre_maketables(). To use the default tables, this new arguement
  should be passed as NULL.
  
            IMPORTANT FOR THOSE UPGRADING FROM VERSION 2.05
  
  Yet another (and again I hope this really is the last) change has been made
  to the API for the pcre_exec() function. An additional argument has been
  added to make it possible to start the match other than at the start of the
  subject string. This is important if there are lookbehinds. The new man
  page has the details, but you just want to convert existing programs, all
  you need to do is to stick in a new fifth argument to pcre_exec(), with a
  value of zero. For example, change
  
    pcre_exec(pattern, extra, subject, length, options, ovec, ovecsize)
  to
    pcre_exec(pattern, extra, subject, length, 0, options, ovec, ovecsize)
  
  ****
  Index: ossp-pkg/pcre/README
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 README
  --- ossp-pkg/pcre/README	2 Aug 2000 09:46:06 -0000	1.4
  +++ ossp-pkg/pcre/README	7 Jan 2002 14:36:54 -0000	1.5
  @@ -17,14 +17,30 @@
   uses the POSIX API, it will have to be renamed or pointed at by a link.
   
   
  +Contributions by users of PCRE
  +------------------------------
  +
  +You can find contributions from PCRE users in the directory
  +
  +  ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/Contrib
  +
  +where there is also a README file giving brief descriptions of what they are.
  +Several of them provide support for compiling PCRE on various flavours of
  +Windows systems (I myself do not use Windows). Some are complete in themselves;
  +others are pointers to URLs containing relevant files.
  +
  +
   Building PCRE on a Unix system
   ------------------------------
   
  -To build PCRE on a Unix system, run the "configure" command in the PCRE
  -distribution directory. This is a standard GNU "autoconf" configuration script,
  -for which generic instructions are supplied in INSTALL. On many systems just
  -running "./configure" is sufficient, but the usual methods of changing standard
  -defaults are available. For example,
  +To build PCRE on a Unix system, first run the "configure" command from the PCRE
  +distribution directory, with your current directory set to the directory where
  +you want the files to be created. This command is a standard GNU "autoconf"
  +configuration script, for which generic instructions are supplied in INSTALL.
  +
  +Most commonly, people build PCRE within its own distribution directory, and in
  +this case, on many systems, just running "./configure" is sufficient, but the
  +usual methods of changing standard defaults are available. For example,
   
   CFLAGS='-O2 -Wall' ./configure --prefix=/opt/local
   
  @@ -32,14 +48,22 @@
   of the default, and that "make install" should install PCRE under /opt/local
   instead of the default /usr/local.
   
  +If you want to build in a different directory, just run "configure" with that
  +directory as current. For example, suppose you have unpacked the PCRE source
  +into /source/pcre/pcre-xxx, but you want to build it in /build/pcre/pcre-xxx:
  +
  +cd /build/pcre/pcre-xxx
  +/source/pcre/pcre-xxx/configure
  +
   If you want to make use of the experimential, incomplete support for UTF-8
   character strings in PCRE, you must add --enable-utf8 to the "configure"
   command. Without it, the code for handling UTF-8 is not included in the
   library. (Even when included, it still has to be enabled by an option at run
   time.)
   
  -The "configure" script builds four files:
  +The "configure" script builds five files:
   
  +. libtool is a script that builds shared and/or static libraries
   . Makefile is built by copying Makefile.in and making substitutions.
   . config.h is built by copying config.in and making substitutions.
   . pcre-config is built by copying pcre-config.in and making substitutions.
  @@ -47,8 +71,9 @@
   
   Once "configure" has run, you can run "make". It builds two libraries called
   libpcre and libpcreposix, a test program called pcretest, and the pcregrep
  -command. You can use "make install" to copy these, and the public header file
  -pcre.h, to appropriate live directories on your system, in the normal way.
  +command. You can use "make install" to copy these, the public header files
  +pcre.h and pcreposix.h, and the man pages to appropriate live directories on
  +your system, in the normal way.
   
   Running "make install" also installs the command pcre-config, which can be used
   to recall information about the PCRE configuration and installation. For
  @@ -64,26 +89,38 @@
   included in makefiles for programs that use PCRE, saving the programmer from
   having to remember too many details.
   
  +There is one esoteric feature that is controlled by "configure". It concerns
  +the character value used for "newline", and is something that you probably do
  +not want to change on a Unix system. The default is to use whatever value your
  +compiler gives to '\n'. By using --enable-newline-is-cr or
  +--enable-newline-is-lf you can force the value to be CR (13) or LF (10) if you
  +really want to.
  +
   
   Shared libraries on Unix systems
   --------------------------------
   
  -The default distribution builds PCRE as two shared libraries. This support is
  -new and experimental and may not work on all systems. It relies on the
  -"libtool" scripts - these are distributed with PCRE. It should build a
  -"libtool" script and use this to compile and link shared libraries, which are
  -placed in a subdirectory called .libs. The programs pcretest and pcregrep are
  -built to use these uninstalled libraries by means of wrapper scripts. When you
  -use "make install" to install shared libraries, pcregrep and pcretest are
  -automatically re-built to use the newly installed libraries. However, only
  -pcregrep is installed, as pcretest is really just a test program.
  +The default distribution builds PCRE as two shared libraries and two static
  +libraries, as long as the operating system supports shared libraries. Shared
  +library support relies on the "libtool" script which is built as part of the
  +"configure" process.
  +
  +The libtool script is used to compile and link both shared and static
  +libraries. They are placed in a subdirectory called .libs when they are newly
  +built. The programs pcretest and pcregrep are built to use these uninstalled
  +libraries (by means of wrapper scripts in the case of shared libraries). When
  +you use "make install" to install shared libraries, pcregrep and pcretest are
  +automatically re-built to use the newly installed shared libraries before being
  +installed themselves. However, the versions left in the source directory still
  +use the uninstalled libraries.
   
  -To build PCRE using static libraries you must use --disable-shared when
  +To build PCRE using static libraries only you must use --disable-shared when
   configuring it. For example
   
   ./configure --prefix=/usr/gnu --disable-shared
   
  -Then run "make" in the usual way.
  +Then run "make" in the usual way. Similarly, you can use --disable-static to
  +build only shared libraries.
   
   
   Building on non-Unix systems
  @@ -99,16 +136,16 @@
   Testing PCRE
   ------------
   
  -To test PCRE on a Unix system, run the RunTest script in the pcre directory.
  -(This can also be run by "make runtest", "make check", or "make test".) For
  -other systems, see the instruction in NON-UNIX-USE.
  -
  -The script runs the pcretest test program (which is documented in
  -doc/pcretest.txt) on each of the testinput files (in the testdata directory) in
  -turn, and compares the output with the contents of the corresponding testoutput
  -file. A file called testtry is used to hold the output from pcretest. To run
  -pcretest on just one of the test files, give its number as an argument to
  -RunTest, for example:
  +To test PCRE on a Unix system, run the RunTest script that is created by the
  +configuring process. (This can also be run by "make runtest", "make check", or
  +"make test".) For other systems, see the instruction in NON-UNIX-USE.
  +
  +The script runs the pcretest test program (which is documented in the doc
  +directory) on each of the testinput files (in the testdata directory) in turn,
  +and compares the output with the contents of the corresponding testoutput file.
  +A file called testtry is used to hold the output from pcretest. To run pcretest
  +on just one of the test files, give its number as an argument to RunTest, for
  +example:
   
     RunTest 3
   
  @@ -241,9 +278,9 @@
     doc/pcregrep.html     HTML version
     doc/pcregrep.txt      plain text version
     install-sh            a shell script for installing files
  -  ltconfig              ) files used to build "libtool",
  -  ltmain.sh             )   used only when building a shared library
  -  pcretest.c            test program
  +  ltmain.sh             file used to build a libtool script
  +  pcretest.c            comprehensive test program
  +  pcredemo.c            simple demonstration of coding calls to PCRE
     perltest              Perl test program
     perltest8             Perl test program for UTF-8 tests
     pcregrep.c            source of a grep utility that uses PCRE
  @@ -267,4 +304,4 @@
     pcre.def
   
   Philip Hazel <ph10@cam.ac.uk>
  -August 2000
  +August 2001

From ossp-cvs-owner@ossp.org  Mon Jan  7 15:51:33 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7E594764D1; Mon,  7 Jan 2002 15:51:33 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pcre autogen.sh config.guess config.h.in config.s...
Message-Id: <20020107145133.7E594764D1@mail.ossp.org>
Date: Mon,  7 Jan 2002 15:51:33 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   07-Jan-2002 15:51:33
  Branch: HEAD                             Handle: 197001010100001010411492

  Added files:
    ossp-pkg/pcre           devtool devtool.conf devtool.func
  Modified files:
    ossp-pkg/pcre           config.h.in configure.ac
  Removed files:
    ossp-pkg/pcre           autogen.sh config.guess config.sub libtool.m4
                            ltmain.sh shtool

  Log:
    switch to devtool

  Summary:
    Revision    Changes     Path
    NONE        +0  -74     ossp-pkg/pcre/autogen.sh
    NONE        +0  -1371   ossp-pkg/pcre/config.guess
    1.3         +7  -30     ossp-pkg/pcre/config.h.in
    NONE        +0  -1362   ossp-pkg/pcre/config.sub
    1.2         +6  -6      ossp-pkg/pcre/configure.ac
    1.1         +47 -0      ossp-pkg/pcre/devtool
    1.1         +21 -0      ossp-pkg/pcre/devtool.conf
    1.1         +72 -0      ossp-pkg/pcre/devtool.func
    NONE        +0  -3397   ossp-pkg/pcre/libtool.m4
    NONE        +0  -4946   ossp-pkg/pcre/ltmain.sh
    NONE        +0  -1029   ossp-pkg/pcre/shtool
  ____________________________________________________________________________

      Index: ossp-pkg/pcre/config.h.in
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 config.h.in
  --- ossp-pkg/pcre/config.h.in	16 May 2000 18:47:31 -0000	1.2
  +++ ossp-pkg/pcre/config.h.in	7 Jan 2002 14:51:31 -0000	1.3
  @@ -1,33 +1,10 @@
  +/* config.h.in.  Generated automatically from configure.ac by autoheader.  */
   
  -/* On Unix systems config.in is converted by configure into config.h. PCRE is
  -written in Standard C, but there are a few non-standard things it can cope
  -with, allowing it to run on SunOS4 and other "close to standard" systems.
  +/* Define if you have the <dlfcn.h> header file. */
  +#undef HAVE_DLFCN_H
   
  -On a non-Unix system you should just copy this file into config.h and change
  -the definitions of HAVE_STRERROR and HAVE_MEMMOVE to 1. Unfortunately, because
  -of the way autoconf works, these cannot be made the defaults. If your system
  -has bcopy() and not memmove(), change the definition of HAVE_BCOPY instead of
  -HAVE_MEMMOVE. If your system has neither bcopy() nor memmove(), leave them both
  -as 0; an emulation function will be used. */
  +/* Define if you have the `memmove' function. */
  +#undef HAVE_MEMMOVE
   
  -/* Define to empty if the keyword does not work. */
  -
  -#undef const
  -
  -/* Define to `unsigned' if <stddef.h> doesn't define size_t. */
  -
  -#undef size_t
  -
  -/* The following two definitions are mainly for the benefit of SunOS4, which
  -doesn't have the strerror() or memmove() functions that should be present in
  -all Standard C libraries. The macros HAVE_STRERROR and HAVE_MEMMOVE should
  -normally be defined with the value 1 for other systems, but unfortunately we
  -can't make this the default because "configure" files generated by autoconf
  -will only change 0 to 1; they won't change 1 to 0 if the functions are not
  -found. If HAVE_MEMMOVE is set to 1, the value of HAVE_BCOPY is not relevant. */
  -
  -#define HAVE_STRERROR 0
  -#define HAVE_MEMMOVE  0
  -#define HAVE_BCOPY    0
  -
  -/* End */
  +/* Define if you have the `strerror' function. */
  +#undef HAVE_STRERROR
    Index: ossp-pkg/pcre/configure.ac
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 configure.ac
  --- ossp-pkg/pcre/configure.ac	16 Aug 2001 10:08:07 -0000	1.1
  +++ ossp-pkg/pcre/configure.ac	7 Jan 2002 14:51:32 -0000	1.2
  @@ -2,8 +2,9 @@
   dnl ##   Autoconf specification for PCRE library
   dnl ##
   
  -AC_PREREQ(2.12)dnl
  -AC_REVISION($Revision: 1.1 $)
  +AC_PREREQ(2.52)dnl
  +AC_REVISION($Revision: 1.2 $)
  +AC_INIT(README)
   
   SHTOOL="./shtool"
   AC_SUBST(SHTOOL)
  @@ -14,11 +15,10 @@
   PCRE_VERSION="$PCRE_MAJOR.$PCRE_MINOR"
   AC_SUBST(PCRE_VERSION)
   echo "Configuring ${T_MD}OSSP pcre${T_ME} (Perl-Compatible Regular Expressions) ${T_MD}${PCRE_VERSION}${T_ME}"
  -echo "Copyright (c) 1997-2001 Philip Hazel <ph10@cam.ac.uk>, All rights reserved."
  -echo "Copyright (c) 1997-2001 University of Cambridge, All rights reserved."
  -echo "Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>"
  +echo "Copyright (c) 1997-2002 Philip Hazel <ph10@cam.ac.uk>, All rights reserved."
  +echo "Copyright (c) 1997-2002 University of Cambridge, All rights reserved."
  +echo "Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>"
   
  -AC_INIT(README)
   AC_CONFIG_HEADER(config.h)
   AC_PREFIX_DEFAULT(/usr/local)
   
  Index: ossp-pkg/pcre/devtool
  ============================================================
  $ cvs update -p -r1.1 devtool
  #!/bin/sh
  ##
  ##  devtool -- Development Tool
  ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  if [ $# -eq 0 ]; then
      echo "devtool:USAGE: devtool <command> [<arg> ...]" 1>&2
      exit 1
  fi
  
  cmd="$1"
  shift
  
  devtoolfunc="./devtool.func"
  
  if [ ! -f devtool.conf ]; then
      echo "devtool:ERROR: no devtool.conf in current directory" 1>&2
      exit 1
  fi
  
  cmdline=`grep "^%$cmd" devtool.conf`
  if [ ".$cmdline" = . ]; then
      echo "devtool:ERROR: command $cmd not found in devtool.conf" 1>&2
      exit 1
  fi
  
  if [ ".$TMPDIR" != . ]; then
      tmpdir="$TMPDIR"
  elif [ ".$TEMPDIR" != . ]; then
      tmpdir="$TEMPDIR"
  else
      tmpdir="/tmp"
  fi
  tmpfile="$tmpdir/rc.$$.tmp"
  
  rm -f $tmpfile
  touch $tmpfile
  echo ". $devtoolfunc" >>$tmpfile
  ( sed <devtool.conf -e "1,/^%common/d" -e '/^%.*/,$d'
    sed <devtool.conf -e "1,/^%$cmd/d" -e '/^%.*/,$d' ) |\
  sed -e 's;\([ 	]\)@\([a-zA-Z_][a-zA-Z0-9_]*\);\1devtool_\2;' >>$tmpfile
  
  sh $tmpfile "$@"
  
  rm -f $tmpfile >/dev/null 2>&1 || true
  
  Index: ossp-pkg/pcre/devtool.conf
  ============================================================
  $ cvs update -p -r1.1 devtool.conf
  ##
  ##  devtool.conf -- Development Tool Configuration
  ##
  
  %autogen
      @autogen shtool   1.5.4 "1.5.*" echo install mkdir fixperm tarball
      @autogen libtool  1.4.2 "1.4*"
      @autogen autoconf 2.52  "2.5.*"
  
  %autoclean
      @autoclean shtool
      @autoclean libtool
      @autoclean autoconf
  
  %configure
      ./configure \
          --prefix=/tmp/pcre \
          --disable-shared \
          --enable-debug \
          "$@"
  
  Index: ossp-pkg/pcre/devtool.func
  ============================================================
  $ cvs update -p -r1.1 devtool.func
  ##
  ##  devtool.func -- Development Tool Functions
  ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  devtool_require () {
      t="$1"; o="$2"; p="$3"; e="$4"; a="$5"
      v=`($t $o | head -1 | awk "{ print \\\$$p; }") 2>/dev/null`
      if [ ".$v" = . ]; then
          echo "devtool:ERROR: unable to determine version of $t" 1>&2
          exit 1
      fi
      case "$v" in
          $e )
              ;;
          $a )
              echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
              ;;
          * )
              echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
              exit 1
              ;;
      esac
      echo "$v"
  }
  
  devtool_autogen () {
      tool=$1
      shift
      case $tool in
          autoconf )
              autoconf_version=`devtool_require autoconf --version 4 "$1" "$2"`
              echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
              autoconf
              autoheader 2>&1 | grep -v "is unchanged"
              ;;
          libtool )
              libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
              echo "generating (GNU Libtool $libtoolize_version): ltmain.sh, libtool.m4, config.guess, config.sub"
              libtoolize --force --copy >/dev/null 2>&1
              cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
                  sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` libtool.m4
              ;;
          shtool )
              shtoolize_version=`devtool_require shtoolize -v 3 "$1" "$2"`
              echo "generating (GNU Shtool $shtoolize_version): shtool"
              shift
              shift
              shtoolize -q "$@"
              ;;
      esac
  }
  
  devtool_autoclean () {
      tool=$1
      shift
      case $tool in
          autoconf )
              echo "removing: configure config.h.in"
              rm -f configure config.h.in
              ;;
          libtool )
              echo "removing: ltmain.sh libtool.m4 config.guess config.sub"
              rm -f ltmain.sh libtool.m4 config.guess config.sub
              ;;
          shtool )
              echo "removing: shtool"
              rm -f shtool
              ;;
      esac
  }
  
      

From ossp-cvs-owner@ossp.org  Mon Jan  7 15:52:05 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 38B31764B0; Mon,  7 Jan 2002 15:52:05 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pcre config.h.in configure
Message-Id: <20020107145205.38B31764B0@mail.ossp.org>
Date: Mon,  7 Jan 2002 15:52:05 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   07-Jan-2002 15:52:05
  Branch: HEAD                             Handle: 1970010101000000

  Removed files:
    ossp-pkg/pcre           config.h.in configure

  Log:
    remove generated files

  Summary:
    Revision    Changes     Path
    NONE        +0  -10     ossp-pkg/pcre/config.h.in
    NONE        +0  -7036   ossp-pkg/pcre/configure
  ____________________________________________________________________________

    

From ossp-cvs-owner@ossp.org  Mon Jan  7 16:21:09 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 21B92764D1; Mon,  7 Jan 2002 16:21:09 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pcre .cvsignore ChangeLog Makefile.in pcre.3 pcre...
Message-Id: <20020107152109.21B92764D1@mail.ossp.org>
Date: Mon,  7 Jan 2002 16:21:09 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   07-Jan-2002 16:21:08
  Branch: HEAD                             Handle: 197001010100001010413268

  Added files:
    ossp-pkg/pcre           pcregrep.1 pcregrep.c
  Modified files:
    ossp-pkg/pcre           .cvsignore ChangeLog Makefile.in pcre.3 pcre.c
                            pcre.h pcre_dftables.c pcre_get.c pcre_internal.h
                            pcre_maketables.c pcre_study.c pcre_test.c
                            pcre_test.sh pcreposix.3 pcreposix.c pcreposix.h
    ossp-pkg/pcre/pcre_test.d testinput1 testinput2 testinput6 testoutput1
                            testoutput2 testoutput3 testoutput4 testoutput5
                            testoutput6
  Removed files:
    ossp-pkg/pcre           pgrep.1 pgrep.c

  Log:
    upgrade to PCRE 3.8

  Summary:
    Revision    Changes     Path
    1.5         +8  -1      ossp-pkg/pcre/.cvsignore
    1.9         +30 -0      ossp-pkg/pcre/ChangeLog
    1.7         +3  -3      ossp-pkg/pcre/Makefile.in
    1.6         +209 -28    ossp-pkg/pcre/pcre.3
    1.8         +115 -91    ossp-pkg/pcre/pcre.c
    1.8         +9  -6      ossp-pkg/pcre/pcre.h
    1.4         +4  -4      ossp-pkg/pcre/pcre_dftables.c
    1.3         +1  -1      ossp-pkg/pcre/pcre_get.c
    1.7         +42 -11     ossp-pkg/pcre/pcre_internal.h
    1.3         +2  -2      ossp-pkg/pcre/pcre_maketables.c
    1.3         +21 -17     ossp-pkg/pcre/pcre_study.c
    1.6         +115 -78    ossp-pkg/pcre/pcre_test.c
    1.4         +33 -4      ossp-pkg/pcre/pcre_test.d/testinput1
    1.6         +11 -0      ossp-pkg/pcre/pcre_test.d/testinput2
    1.2         +26 -0      ossp-pkg/pcre/pcre_test.d/testinput6
    1.8         +63 -10     ossp-pkg/pcre/pcre_test.d/testoutput1
    1.8         +306 -1     ossp-pkg/pcre/pcre_test.d/testoutput2
    1.8         +1  -1      ossp-pkg/pcre/pcre_test.d/testoutput3
    1.8         +1  -1      ossp-pkg/pcre/pcre_test.d/testoutput4
    1.3         +1  -1      ossp-pkg/pcre/pcre_test.d/testoutput5
    1.3         +157 -23    ossp-pkg/pcre/pcre_test.d/testoutput6
    1.2         +68 -12     ossp-pkg/pcre/pcre_test.sh
    1.1         +98 -0      ossp-pkg/pcre/pcregrep.1
    1.1         +540 -0     ossp-pkg/pcre/pcregrep.c
    1.3         +5  -5      ossp-pkg/pcre/pcreposix.3
    1.5         +4  -4      ossp-pkg/pcre/pcreposix.c
    1.3         +1  -1      ossp-pkg/pcre/pcreposix.h
    NONE        +0  -76     ossp-pkg/pcre/pgrep.1
    NONE        +0  -228    ossp-pkg/pcre/pgrep.c
  ____________________________________________________________________________

  Index: ossp-pkg/pcre/.cvsignore
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 .cvsignore
  --- ossp-pkg/pcre/.cvsignore	2 Feb 2000 17:18:45 -0000	1.4
  +++ ossp-pkg/pcre/.cvsignore	7 Jan 2002 15:21:06 -0000	1.5
  @@ -12,4 +12,11 @@
   *.o
   *.la
   *.lo
  -pgrep
  +pcregrep
  +shtool
  +config.guess
  +config.sub
  +ltmain.sh
  +libtool.m4
  +configure
  +config.h.in
  Index: ossp-pkg/pcre/ChangeLog
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 ChangeLog
  --- ossp-pkg/pcre/ChangeLog	7 Jan 2002 14:36:54 -0000	1.8
  +++ ossp-pkg/pcre/ChangeLog	7 Jan 2002 15:21:06 -0000	1.9
  @@ -1,6 +1,36 @@
   ChangeLog for PCRE
   ------------------
   
  +Version 3.8 18-Dec-01
  +---------------------
  +
  +1. The experimental UTF-8 code was completely screwed up. It was packing the
  +bytes in the wrong order. How dumb can you get?
  +
  +
  +Version 3.7 29-Oct-01
  +---------------------
  +
  +1. In updating pcretest to check change 1 of version 3.6, I screwed up.
  +This caused pcretest, when used on the test data, to segfault. Unfortunately,
  +this didn't happen under Solaris 8, where I normally test things.
  +
  +2. The Makefile had to be changed to make it work on BSD systems, where 'make'
  +doesn't seem to recognize that ./xxx and xxx are the same file. (This entry
  +isn't in ChangeLog distributed with 3.7 because I forgot when I hastily made
  +this fix an hour or so after the initial 3.7 release.)
  +
  +
  +Version 3.6 23-Oct-01
  +---------------------
  +
  +1. Crashed with /(sens|respons)e and \1ibility/ and "sense and sensibility" if
  +offsets passed as NULL with zero offset count.
  +
  +2. The config.guess and config.sub files had not been updated when I moved to
  +the latest autoconf.
  +
  +
   Version 3.5 15-Aug-01
   ---------------------
   
  Index: ossp-pkg/pcre/Makefile.in
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 Makefile.in
  --- ossp-pkg/pcre/Makefile.in	16 Aug 2001 10:08:06 -0000	1.6
  +++ ossp-pkg/pcre/Makefile.in	7 Jan 2002 15:21:06 -0000	1.7
  @@ -56,8 +56,8 @@
   pcre_test: pcre_test.lo libpcre.la libpcreposix.la
   	$(LIBTOOL) --quiet --mode=link $(CC) $(LDFLAGS) -o pcre_test pcre_test.lo libpcre.la libpcreposix.la
   
  -pgrep: pgrep.lo libpcre.la
  -	$(LIBTOOL) --quiet --mode=link $(CC) $(LDFLAGS) -o pgrep pgrep.lo libpcre.la
  +pcregrep: pcregrep.lo libpcre.la
  +	$(LIBTOOL) --quiet --mode=link $(CC) $(LDFLAGS) -o pcregrep pcregrep.lo libpcre.la
   
   check: test
   test: all pcre_test
  @@ -78,7 +78,7 @@
   
   clean:
   	$(RM) *.la *.lo *.o
  -	$(RM) pgrep
  +	$(RM) pcregrep
   
   distclean: clean
   	$(RM) -r .libs
  Index: ossp-pkg/pcre/pcre.3
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 pcre.3
  --- ossp-pkg/pcre/pcre.3	29 Aug 2000 19:24:17 -0000	1.5
  +++ ossp-pkg/pcre/pcre.3	7 Jan 2002 15:21:06 -0000	1.6
  @@ -92,7 +92,9 @@
   use these to include support for different releases.
   
   The functions \fBpcre_compile()\fR, \fBpcre_study()\fR, and \fBpcre_exec()\fR
  -are used for compiling and matching regular expressions.
  +are used for compiling and matching regular expressions. A sample program that
  +demonstrates the simplest way of using them is given in the file
  +\fIpcredemo.c\fR. The last section of this man page describes how to run it.
   
   The functions \fBpcre_copy_substring()\fR, \fBpcre_get_substring()\fR, and
   \fBpcre_get_substring_list()\fR are convenience functions for extracting
  @@ -129,18 +131,22 @@
   The function \fBpcre_compile()\fR is called to compile a pattern into an
   internal form. The pattern is a C string terminated by a binary zero, and
   is passed in the argument \fIpattern\fR. A pointer to a single block of memory
  -that is obtained via \fBpcre_malloc\fR is returned. This contains the
  -compiled code and related data. The \fBpcre\fR type is defined for this for
  -convenience, but in fact \fBpcre\fR is just a typedef for \fBvoid\fR, since the
  -contents of the block are not externally defined. It is up to the caller to
  -free the memory when it is no longer required.
  -.PP
  +that is obtained via \fBpcre_malloc\fR is returned. This contains the compiled
  +code and related data. The \fBpcre\fR type is defined for the returned block;
  +this is a typedef for a structure whose contents are not externally defined. It
  +is up to the caller to free the memory when it is no longer required.
  +
  +Although the compiled code of a PCRE regex is relocatable, that is, it does not
  +depend on memory location, the complete \fBpcre\fR data block is not
  +fully relocatable, because it contains a copy of the \fItableptr\fR argument,
  +which is an address (see below).
  +
   The size of a compiled pattern is roughly proportional to the length of the
   pattern string, except that each character class (other than those containing
   just a single character, negated or not) requires 33 bytes, and repeat
   quantifiers with a minimum greater than one or a bounded maximum cause the
   relevant portions of the compiled pattern to be replicated.
  -.PP
  +
   The \fIoptions\fR argument contains independent bits that affect the
   compilation. It should be zero if no options are required. Some of the options,
   in particular, those that are compatible with Perl, can also be set and unset
  @@ -149,19 +155,31 @@
   their initial settings at the start of compilation and execution. The
   PCRE_ANCHORED option can be set at the time of matching as well as at compile
   time.
  -.PP
  +
   If \fIerrptr\fR is NULL, \fBpcre_compile()\fR returns NULL immediately.
   Otherwise, if compilation of a pattern fails, \fBpcre_compile()\fR returns
   NULL, and sets the variable pointed to by \fIerrptr\fR to point to a textual
   error message. The offset from the start of the pattern to the character where
   the error was discovered is placed in the variable pointed to by
   \fIerroffset\fR, which must not be NULL. If it is, an immediate error is given.
  -.PP
  +
   If the final argument, \fItableptr\fR, is NULL, PCRE uses a default set of
   character tables which are built when it is compiled, using the default C
   locale. Otherwise, \fItableptr\fR must be the result of a call to
   \fBpcre_maketables()\fR. See the section on locale support below.
  -.PP
  +
  +This code fragment shows a typical straightforward call to \fBpcre_compile()\fR:
  +
  +  pcre *re;
  +  const char *error;
  +  int erroffset;
  +  re = pcre_compile(
  +    "^A.*Z",          /* the pattern */
  +    0,                /* default options */
  +    &error,           /* for error message */
  +    &erroffset,       /* for error offset */
  +    NULL);            /* use default character tables */
  +
   The following option bits are defined in the header file:
   
     PCRE_ANCHORED
  @@ -248,10 +266,10 @@
   When a pattern is going to be used several times, it is worth spending more
   time analyzing it in order to speed up the time taken for matching. The
   function \fBpcre_study()\fR takes a pointer to a compiled pattern as its first
  -argument, and returns a pointer to a \fBpcre_extra\fR block (another \fBvoid\fR
  -typedef) containing additional information about the pattern; this can be
  -passed to \fBpcre_exec()\fR. If no additional information is available, NULL
  -is returned.
  +argument, and returns a pointer to a \fBpcre_extra\fR block (another typedef
  +for a structure with hidden contents) containing additional information about
  +the pattern; this can be passed to \fBpcre_exec()\fR. If no additional
  +information is available, NULL is returned.
   
   The second argument contains option bits. At present, no options are defined
   for \fBpcre_study()\fR, and this argument should always be zero.
  @@ -260,6 +278,14 @@
   studying succeeds (even if no data is returned), the variable it points to is
   set to NULL. Otherwise it points to a textual error message.
   
  +This is a typical call to \fBpcre_study\fR():
  +
  +  pcre_extra *pe;
  +  pe = pcre_study(
  +    re,             /* result of pcre_compile() */
  +    0,              /* no options exist */
  +    &error);        /* set to NULL or points to a message */
  +
   At present, studying a pattern is useful only for non-anchored patterns that do
   not have a single fixed starting character. A bitmap of possible starting
   characters is created.
  @@ -309,13 +335,24 @@
     PCRE_ERROR_BADMAGIC   the "magic number" was not found
     PCRE_ERROR_BADOPTION  the value of \fIwhat\fR was invalid
   
  +Here is a typical call of \fBpcre_fullinfo()\fR, to obtain the length of the
  +compiled pattern:
  +
  +  int rc;
  +  unsigned long int length;
  +  rc = pcre_fullinfo(
  +    re,               /* result of pcre_compile() */
  +    pe,               /* result of pcre_study(), or NULL */
  +    PCRE_INFO_SIZE,   /* what is required */
  +    &length);         /* where to put the data */
  +
   The possible values for the third argument are defined in \fBpcre.h\fR, and are
   as follows:
   
     PCRE_INFO_OPTIONS
   
   Return a copy of the options with which the pattern was compiled. The fourth
  -argument should point to au \fBunsigned long int\fR variable. These option bits
  +argument should point to an \fBunsigned long int\fR variable. These option bits
   are those specified in the call to \fBpcre_compile()\fR, modified by any
   top-level option settings within the pattern itself, and with the PCRE_ANCHORED
   bit forcibly set if the form of the pattern implies that it can match only at
  @@ -396,6 +433,20 @@
   pattern has been studied, the result of the study should be passed in the
   \fIextra\fR argument. Otherwise this must be NULL.
   
  +Here is an example of a simple call to \fBpcre_exec()\fR:
  +
  +  int rc;
  +  int ovector[30];
  +  rc = pcre_exec(
  +    re,             /* result of pcre_compile() */
  +    NULL,           /* we didn't study the pattern */
  +    "some string",  /* the subject string */
  +    11,             /* the length of the subject string */
  +    0,              /* start at offset 0 in the subject */
  +    0,              /* default options */
  +    ovector,        /* vector for substring information */
  +    30);            /* number of elements in the vector */
  +
   The PCRE_ANCHORED option can be passed in the \fIoptions\fR argument, whose
   unused bits must be zero. However, if a pattern was compiled with
   PCRE_ANCHORED, or turned out to be anchored by virtue of its contents, it
  @@ -437,9 +488,9 @@
   
   The subject string is passed as a pointer in \fIsubject\fR, a length in
   \fIlength\fR, and a starting offset in \fIstartoffset\fR. Unlike the pattern
  -string, it may contain binary zero characters. When the starting offset is
  -zero, the search for a match starts at the beginning of the subject, and this
  -is by far the most common case.
  +string, the subject may contain binary zero characters. When the starting
  +offset is zero, the search for a match starts at the beginning of the subject,
  +and this is by far the most common case.
   
   A non-zero starting offset is useful when searching for another match in the
   same subject by calling \fBpcre_exec()\fR again after a previous success.
  @@ -626,8 +677,9 @@
   practice be relevant.
   The maximum length of a compiled pattern is 65539 (sic) bytes.
   All values in repeating quantifiers must be less than 65536.
  -The maximum number of capturing subpatterns is 99.
  -The maximum number of all parenthesized subpatterns, including capturing
  +There maximum number of capturing subpatterns is 65535.
  +There is no limit to the number of non-capturing subpatterns, but the maximum
  +depth of nesting of all kinds of parenthesized subpattern, including capturing
   subpatterns, assertions, and other types of subpattern, is 200.
   
   The maximum length of a subject string is the largest positive number that an
  @@ -949,7 +1001,7 @@
   
   Note that the sequences \\A, \\Z, and \\z can be used to match the start and
   end of the subject in both modes, and if all branches of a pattern start with
  -\\A is it always anchored, whether PCRE_MULTILINE is set or not.
  +\\A it is always anchored, whether PCRE_MULTILINE is set or not.
   
   
   .SH FULL STOP (PERIOD, DOT)
  @@ -1053,7 +1105,7 @@
   
     [12[:^digit:]]
   
  -matches "1", "2", or any non-digit. PCRE (and Perl) also recogize the POSIX
  +matches "1", "2", or any non-digit. PCRE (and Perl) also recognize the POSIX
   syntax [.ch.] and [=ch=] where "ch" is a "collating element", but these are not
   supported, and an error is given if they are encountered.
   
  @@ -1151,7 +1203,7 @@
     the ((red|white) (king|queen))
   
   the captured substrings are "red king", "red", and "king", and are numbered 1,
  -2, and 3.
  +2, and 3, respectively.
   
   The fact that plain parentheses fulfil two functions is not always helpful.
   There are often times when a grouping subpattern is required without a
  @@ -1792,6 +1844,137 @@
   
   2. The use of Unicode tables and properties and escapes \\p, \\P, and \\X.
   
  +
  +.SH SAMPLE PROGRAM
  +The code below is a simple, complete demonstration program, to get you started
  +with using PCRE. This code is also supplied in the file \fIpcredemo.c\fR in the
  +PCRE distribution.
  +
  +The program compiles the regular expression that is its first argument, and
  +matches it against the subject string in its second argument. No options are
  +set, and default character tables are used. If matching succeeds, the program
  +outputs the portion of the subject that matched, together with the contents of
  +any captured substrings.
  +
  +On a Unix system that has PCRE installed in \fI/usr/local\fR, you can compile
  +the demonstration program using a command like this:
  +
  +  gcc -o pcredemo pcredemo.c -I/usr/local/include -L/usr/local/lib -lpcre
  +
  +Then you can run simple tests like this:
  +
  +  ./pcredemo 'cat|dog' 'the cat sat on the mat'
  +
  +Note that there is a much more comprehensive test program, called
  +\fBpcretest\fR, which supports many more facilities for testing regular
  +expressions. The \fBpcredemo\fR program is provided as a simple coding example.
  +
  +On some operating systems (e.g. Solaris) you may get an error like this when
  +you try to run \fBpcredemo\fR:
  +
  +  ld.so.1: a.out: fatal: libpcre.so.0: open failed: No such file or directory
  +
  +This is caused by the way shared library support works on those systems. You
  +need to add
  +
  +  -R/usr/local/lib
  +
  +to the compile command to get round this problem. Here's the code:
  +
  +  #include <stdio.h>
  +  #include <string.h>
  +  #include <pcre.h>
  +
  +  #define OVECCOUNT 30    /* should be a multiple of 3 */
  +
  +  int main(int argc, char **argv)
  +  {
  +  pcre *re;
  +  const char *error;
  +  int erroffset;
  +  int ovector[OVECCOUNT];
  +  int rc, i;
  +
  +  if (argc != 3)
  +    {
  +    printf("Two arguments required: a regex and a "
  +      "subject string\\n");
  +    return 1;
  +    }
  +
  +  /* Compile the regular expression in the first argument */
  +
  +  re = pcre_compile(
  +    argv[1],     /* the pattern */
  +    0,           /* default options */
  +    &error,      /* for error message */
  +    &erroffset,  /* for error offset */
  +    NULL);       /* use default character tables */
  +
  +  /* Compilation failed: print the error message and exit */
  +
  +  if (re == NULL)
  +    {
  +    printf("PCRE compilation failed at offset %d: %s\\n",
  +      erroffset, error);
  +    return 1;
  +    }
  +
  +  /* Compilation succeeded: match the subject in the second
  +     argument */
  +
  +  rc = pcre_exec(
  +    re,          /* the compiled pattern */
  +    NULL,        /* we didn't study the pattern */
  +    argv[2],     /* the subject string */
  +    (int)strlen(argv[2]), /* the length of the subject */
  +    0,           /* start at offset 0 in the subject */
  +    0,           /* default options */
  +    ovector,     /* vector for substring information */
  +    OVECCOUNT);  /* number of elements in the vector */
  +
  +  /* Matching failed: handle error cases */
  +
  +  if (rc < 0)
  +    {
  +    switch(rc)
  +      {
  +      case PCRE_ERROR_NOMATCH: printf("No match\\n"); break;
  +      /*
  +      Handle other special cases if you like
  +      */
  +      default: printf("Matching error %d\\n", rc); break;
  +      }
  +    return 1;
  +    }
  +
  +  /* Match succeded */
  +
  +  printf("Match succeeded\\n");
  +
  +  /* The output vector wasn't big enough */
  +
  +  if (rc == 0)
  +    {
  +    rc = OVECCOUNT/3;
  +    printf("ovector only has room for %d captured "
  +      substrings\\n", rc - 1);
  +    }
  +
  +  /* Show substrings stored in the output vector */
  +
  +  for (i = 0; i < rc; i++)
  +    {
  +    char *substring_start = argv[2] + ovector[2*i];
  +    int substring_length = ovector[2*i+1] - ovector[2*i];
  +    printf("%2d: %.*s\\n", i, substring_length,
  +      substring_start);
  +    }
  +
  +  return 0;
  +  }
  +
  +
   .SH AUTHOR
   Philip Hazel <ph10@cam.ac.uk>
   .br
  @@ -1803,8 +1986,6 @@
   .br
   Phone: +44 1223 334714
   
  -Last updated: 28 August 2000,
  -.br
  -  the 250th anniversary of the death of J.S. Bach.
  +Last updated: 15 August 2001
   .br
  -Copyright (c) 1997-2000 University of Cambridge.
  +Copyright (c) 1997-2001 University of Cambridge.
  Index: ossp-pkg/pcre/pcre.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 pcre.c
  --- ossp-pkg/pcre/pcre.c	29 Aug 2000 19:24:17 -0000	1.7
  +++ ossp-pkg/pcre/pcre.c	7 Jan 2002 15:21:06 -0000	1.8
  @@ -9,7 +9,7 @@
   
   Written by: Philip Hazel <ph10@cam.ac.uk>
   
  -           Copyright (c) 1997-2000 University of Cambridge
  +           Copyright (c) 1997-2001 University of Cambridge
   
   -----------------------------------------------------------------------------
   Permission is granted to anyone to use this software for any purpose on any
  @@ -60,8 +60,11 @@
   #endif
   
   
  -/* Number of items on the nested bracket stacks at compile time. This should
  -not be set greater than 200. */
  +/* Maximum number of items on the nested bracket stacks at compile time. This
  +applies to the nesting of all kinds of parentheses. It does not limit
  +un-nested, non-capturing parentheses. This number can be made bigger if
  +necessary - it is used to dimension one int and one unsigned char vector at
  +compile time. */
   
   #define BRASTACK_SIZE 200
   
  @@ -95,7 +98,7 @@
     "class", "Ref", "Recurse",
     "Alt", "Ket", "KetRmax", "KetRmin", "Assert", "Assert not",
     "AssertB", "AssertB not", "Reverse", "Once", "Cond", "Cref",
  -  "Brazero", "Braminzero", "Bra"
  +  "Brazero", "Braminzero", "Branumber", "Bra"
   };
   #endif
   
  @@ -111,9 +114,9 @@
       0,      0,      0,      0,      0,      0,      0,      0,   /* H - O */
       0,      0,      0, -ESC_S,      0,      0,      0, -ESC_W,   /* P - W */
       0,      0, -ESC_Z,    '[',   '\\',    ']',    '^',    '_',   /* X - _ */
  -  '`',      7, -ESC_b,      0, -ESC_d,     27,   '\f',      0,   /* ` - g */
  -    0,      0,      0,      0,      0,      0,   '\n',      0,   /* h - o */
  -    0,      0,   '\r', -ESC_s,   '\t',      0,      0, -ESC_w,   /* p - w */
  +  '`',      7, -ESC_b,      0, -ESC_d,  ESC_E,  ESC_F,      0,   /* ` - g */
  +    0,      0,      0,      0,      0,      0,  ESC_N,      0,   /* h - o */
  +    0,      0,  ESC_R, -ESC_s,  ESC_T,      0,      0, -ESC_w,   /* p - w */
       0,      0, -ESC_z                                            /* x - z */
   };
   
  @@ -208,12 +211,12 @@
     if (md->utf8 && (c & 0xc0) == 0xc0) \
       { \
       int a = utf8_table4[c & 0x3f];  /* Number of additional bytes */ \
  -    int s = 6 - a;                  /* Amount to shift next byte */  \
  -    c &= utf8_table3[a];            /* Low order bits from first byte */ \
  +    int s = 6*a; \
  +    c = (c & utf8_table3[a]) << s; \
       while (a-- > 0) \
         { \
  +      s -= 6; \
         c |= (*eptr++ & 0x3f) << s; \
  -      s += 6; \
         } \
       }
   
  @@ -224,14 +227,14 @@
     len = 1; \
     if (md->utf8 && (c & 0xc0) == 0xc0) \
       { \
  -    int _i; \
  +    int i; \
       int a = utf8_table4[c & 0x3f];  /* Number of additional bytes */ \
  -    int s = 6 - a;                  /* Amount to shift next byte */  \
  -    c &= utf8_table3[a];            /* Low order bits from first byte */ \
  -    for (_i = 1; _i <= a; _i++) \
  +    int s = 6*a; \
  +    c = (c & utf8_table3[a]) << s; \
  +    for (i = 1; i <= a; i++) \
         { \
  +      s -= 6; \
         c |= (eptr[i] & 0x3f) << s; \
  -      s += 6; \
         } \
       len += a; \
       }
  @@ -258,6 +261,7 @@
   #include "pcre_chartables.c"
   
   
  +
   #ifdef SUPPORT_UTF8
   /*************************************************
   *           Tables for UTF-8 support             *
  @@ -305,13 +309,13 @@
   register int i, j;
   for (i = 0; i < sizeof(utf8_table1)/sizeof(int); i++)
     if (cvalue <= utf8_table1[i]) break;
  -*buffer++ = utf8_table2[i] | (cvalue & utf8_table3[i]);
  -cvalue >>= 6 - i;
  -for (j = 0; j < i; j++)
  -  {
  -  *buffer++ = 0x80 | (cvalue & 0x3f);
  -  cvalue >>= 6;
  -  }
  +buffer += i;
  +for (j = i; j > 0; j--)
  + {
  + *buffer-- = 0x80 | (cvalue & 0x3f);
  + cvalue >>= 6;
  + }
  +*buffer = utf8_table2[i] | cvalue;
   return i + 1;
   }
   #endif
  @@ -813,10 +817,11 @@
       /* Skip over things that don't match chars */
   
       case OP_REVERSE:
  +    case OP_BRANUMBER:
  +    case OP_CREF:
       cc++;
       /* Fall through */
   
  -    case OP_CREF:
       case OP_OPT:
       cc++;
       /* Fall through */
  @@ -870,7 +875,7 @@
       /* Check a class for variable quantification */
   
       case OP_CLASS:
  -    cc += (*cc == OP_REF)? 2 : 33;
  +    cc += 33;
   
       switch (*cc)
         {
  @@ -977,7 +982,7 @@
   
   Arguments:
     options      the option bits
  -  brackets     points to number of brackets used
  +  brackets     points to number of extracting brackets used
     code         points to the pointer to the current code point
     ptrptr       points to the current pattern pointer
     errorptr     points to pointer to error message
  @@ -1028,7 +1033,7 @@
     int class_charcount;
     int class_lastchar;
     int newoptions;
  -  int condref;
  +  int skipbytes;
     int subreqchar;
   
     c = *ptr;
  @@ -1577,7 +1582,7 @@
         OP_BRAZERO in front of it, and because the group appears once in the
         data, whereas in other cases it appears the minimum number of times. For
         this reason, it is simplest to treat this case separately, as otherwise
  -      the code gets far too mess. There are several special subcases when the
  +      the code gets far too messy. There are several special subcases when the
         minimum is zero. */
   
         if (repeat_min == 0)
  @@ -1728,7 +1733,7 @@
   
       case '(':
       newoptions = options;
  -    condref = -1;
  +    skipbytes = 0;
   
       if (*(++ptr) == '?')
         {
  @@ -1751,7 +1756,7 @@
           bravalue = OP_COND;       /* Conditional group */
           if ((cd->ctypes[*(++ptr)] & ctype_digit) != 0)
             {
  -          condref = *ptr - '0';
  +          int condref = *ptr - '0';
             while (*(++ptr) != ')') condref = condref*10 + *ptr - '0';
             if (condref == 0)
               {
  @@ -1759,6 +1764,10 @@
               goto FAILED;
               }
             ptr++;
  +          code[3] = OP_CREF;
  +          code[4] = condref >> 8;
  +          code[5] = condref & 255;
  +          skipbytes = 3;
             }
           else ptr--;
           break;
  @@ -1861,16 +1870,21 @@
           }
         }
   
  -    /* Else we have a referencing group; adjust the opcode. */
  +    /* Else we have a referencing group; adjust the opcode. If the bracket
  +    number is greater than EXTRACT_BASIC_MAX, we set the opcode one higher, and
  +    arrange for the true number to follow later, in an OP_BRANUMBER item. */
   
       else
         {
  -      if (++(*brackets) > EXTRACT_MAX)
  +      if (++(*brackets) > EXTRACT_BASIC_MAX)
           {
  -        *errorptr = ERR13;
  -        goto FAILED;
  +        bravalue = OP_BRA + EXTRACT_BASIC_MAX + 1;
  +        code[3] = OP_BRANUMBER;
  +        code[4] = *brackets >> 8;
  +        code[5] = *brackets & 255;
  +        skipbytes = 3;
           }
  -      bravalue = OP_BRA + *brackets;
  +      else bravalue = OP_BRA + *brackets;
         }
   
       /* Process nested bracketed re. Assertions may not be repeated, but other
  @@ -1886,13 +1900,13 @@
            options | PCRE_INGROUP,       /* Set for all nested groups */
            ((options & PCRE_IMS) != (newoptions & PCRE_IMS))?
              newoptions & PCRE_IMS : -1, /* Pass ims options if changed */
  -         brackets,                     /* Bracket level */
  +         brackets,                     /* Extracting bracket count */
            &tempcode,                    /* Where to put code (updated) */
            &ptr,                         /* Input pointer (updated) */
            errorptr,                     /* Where to put an error message */
            (bravalue == OP_ASSERTBACK ||
             bravalue == OP_ASSERTBACK_NOT), /* TRUE if back assert */
  -         condref,                      /* Condition reference number */
  +         skipbytes,                    /* Skip over OP_COND/OP_BRANUMBER */
            &subreqchar,                  /* For possible last char */
            &subcountlits,                /* For literal count */
            cd))                          /* Tables block */
  @@ -1906,7 +1920,7 @@
       /* If this is a conditional bracket, check that there are no more than
       two branches in the group. */
   
  -    if (bravalue == OP_COND)
  +    else if (bravalue == OP_COND)
         {
         uschar *tc = code;
         condcount = 0;
  @@ -1973,9 +1987,11 @@
         {
         if (-c >= ESC_REF)
           {
  +        int number = -c - ESC_REF;
           previous = code;
           *code++ = OP_REF;
  -        *code++ = -c - ESC_REF;
  +        *code++ = number >> 8;
  +        *code++ = number & 255;
           }
         else
           {
  @@ -2099,7 +2115,7 @@
     ptrptr      -> the address of the current pattern pointer
     errorptr    -> pointer to error message
     lookbehind  TRUE if this is a lookbehind assertion
  -  condref     >= 0 for OPT_CREF setting at start of conditional group
  +  skipbytes   skip this many bytes at start (for OP_COND, OP_BRANUMBER)
     reqchar     -> place to put the last required character, or a negative number
     countlits   -> place to put the shortest literal count of any branch
     cd          points to the data block with tables pointers
  @@ -2109,7 +2125,7 @@
   
   static BOOL
   compile_regex(int options, int optchanged, int *brackets, uschar **codeptr,
  -  const uschar **ptrptr, const char **errorptr, BOOL lookbehind, int condref,
  +  const uschar **ptrptr, const char **errorptr, BOOL lookbehind, int skipbytes,
     int *reqchar, int *countlits, compile_data *cd)
   {
   const uschar *ptr = *ptrptr;
  @@ -2122,16 +2138,7 @@
   
   *reqchar = -1;
   *countlits = INT_MAX;
  -code += 3;
  -
  -/* At the start of a reference-based conditional group, insert the reference
  -number as an OP_CREF item. */
  -
  -if (condref >= 0)
  -  {
  -  *code++ = OP_CREF;
  -  *code++ = condref;
  -  }
  +code += 3 + skipbytes;
   
   /* Loop for each alternative branch */
   
  @@ -2283,7 +2290,8 @@
       break;
   
       case OP_CREF:
  -    code += 2;
  +    case OP_BRANUMBER:
  +    code += 3;
       break;
   
       case OP_WORD_BOUNDARY:
  @@ -2546,6 +2554,7 @@
     {
     int min, max;
     int class_charcount;
  +  int bracket_length;
   
     if ((options & PCRE_EXTENDED) != 0)
       {
  @@ -2580,7 +2589,7 @@
         }
       length++;
   
  -    /* A back reference needs an additional char, plus either one or 5
  +    /* A back reference needs an additional 2 bytes, plus either one or 5
       bytes for a repeat. We also need to keep the value of the highest
       back reference. */
   
  @@ -2588,7 +2597,7 @@
         {
         int refnum = -c - ESC_REF;
         if (refnum > top_backref) top_backref = refnum;
  -      length++;   /* For single back reference */
  +      length += 2;   /* For single back reference */
         if (ptr[1] == '{' && is_counted_repeat(ptr+2, &compile_block))
           {
           ptr = read_repeat_counts(ptr+2, &min, &max, errorptr, &compile_block);
  @@ -2686,6 +2695,7 @@
   
       case '(':
       branch_newextra = 0;
  +    bracket_length = 3;
   
       /* Handle special forms of bracket, which all start (? */
   
  @@ -2753,7 +2763,7 @@
           if ((compile_block.ctypes[ptr[3]] & ctype_digit) != 0)
             {
             ptr += 4;
  -          length += 2;
  +          length += 3;
             while ((compile_block.ctypes[*ptr] & ctype_digit) != 0) ptr++;
             if (*ptr != ')')
               {
  @@ -2880,15 +2890,19 @@
         }
   
       /* Extracting brackets must be counted so we can process escapes in a
  -    Perlish way. */
  +    Perlish way. If the number exceeds EXTRACT_BASIC_MAX we are going to
  +    need an additional 3 bytes of store per extracting bracket. */
   
  -    else bracount++;
  +    else
  +      {
  +      bracount++;
  +      if (bracount > EXTRACT_BASIC_MAX) bracket_length += 3;
  +      }
   
  -    /* Non-special forms of bracket. Save length for computing whole length
  -    at end if there's a repeat that requires duplication of the group. Also
  -    save the current value of branch_extra, and start the new group with
  -    the new value. If non-zero, this will either be 2 for a (?imsx: group, or 3
  -    for a lookbehind assertion. */
  +    /* Save length for computing whole length at end if there's a repeat that
  +    requires duplication of the group. Also save the current value of
  +    branch_extra, and start the new group with the new value. If non-zero, this
  +    will either be 2 for a (?imsx: group, or 3 for a lookbehind assertion. */
   
       if (brastackptr >= sizeof(brastack)/sizeof(int))
         {
  @@ -2900,7 +2914,7 @@
       branch_extra = branch_newextra;
   
       brastack[brastackptr++] = length;
  -    length += 3;
  +    length += bracket_length;
       continue;
   
       /* Handle ket. Look for subsequent max/min; for certain sets of values we
  @@ -3061,7 +3075,7 @@
   code = re->code;
   *code = OP_BRA;
   bracount = 0;
  -(void)compile_regex(options, -1, &bracount, &code, &ptr, errorptr, FALSE, -1,
  +(void)compile_regex(options, -1, &bracount, &code, &ptr, errorptr, FALSE, 0,
     &reqchar, &countlits, &compile_block);
   re->top_bracket = bracount;
   re->top_backref = top_backref;
  @@ -3175,7 +3189,10 @@
   
     if (*code >= OP_BRA)
       {
  -    printf("%3d Bra %d", (code[1] << 8) + code[2], *code - OP_BRA);
  +    if (*code - OP_BRA > EXTRACT_BASIC_MAX)
  +      printf("%3d Bra extra", (code[1] << 8) + code[2]);
  +    else
  +      printf("%3d Bra %d", (code[1] << 8) + code[2], *code - OP_BRA);
       code += 2;
       }
   
  @@ -3186,16 +3203,6 @@
       code++;
       break;
   
  -    case OP_COND:
  -    printf("%3d Cond", (code[1] << 8) + code[2]);
  -    code += 2;
  -    break;
  -
  -    case OP_CREF:
  -    printf(" %.2d %s", code[1], OP_names[*code]);
  -    code++;
  -    break;
  -
       case OP_CHARS:
       charlength = *(++code);
       printf("%3d ", charlength);
  @@ -3212,11 +3219,10 @@
       case OP_ASSERTBACK:
       case OP_ASSERTBACK_NOT:
       case OP_ONCE:
  -    printf("%3d %s", (code[1] << 8) + code[2], OP_names[*code]);
  -    code += 2;
  -    break;
  -
       case OP_REVERSE:
  +    case OP_BRANUMBER:
  +    case OP_COND:
  +    case OP_CREF:
       printf("%3d %s", (code[1] << 8) + code[2], OP_names[*code]);
       code += 2;
       break;
  @@ -3289,8 +3295,8 @@
       break;
   
       case OP_REF:
  -    printf("    \\%d", *(++code));
  -    code ++;
  +    printf("    \\%d", (code[1] << 8) | code[2]);
  +    code += 3;
       goto CLASS_REF_REPEAT;
   
       case OP_CLASS:
  @@ -3503,8 +3509,14 @@
   
     if (op > OP_BRA)
       {
  +    int offset;
       int number = op - OP_BRA;
  -    int offset = number << 1;
  +
  +    /* For extended extraction brackets (large number), we have to fish out the
  +    number from a dummy opcode at the start. */
  +
  +    if (number > EXTRACT_BASIC_MAX) number = (ecode[4] << 8) | ecode[5];
  +    offset = number << 1;
   
   #ifdef DEBUG
       printf("start bracket %d subject=", number);
  @@ -3534,6 +3546,7 @@
         md->offset_vector[offset] = save_offset1;
         md->offset_vector[offset+1] = save_offset2;
         md->offset_vector[md->offset_end - number] = save_offset3;
  +
         return FALSE;
         }
   
  @@ -3566,10 +3579,10 @@
       case OP_COND:
       if (ecode[3] == OP_CREF)         /* Condition is extraction test */
         {
  -      int offset = ecode[4] << 1;    /* Doubled reference number */
  +      int offset = (ecode[4] << 9) | (ecode[5] << 1); /* Doubled ref number */
         return match(eptr,
           ecode + ((offset < offset_top && md->offset_vector[offset] >= 0)?
  -          5 : 3 + (ecode[1] << 8) + ecode[2]),
  +          6 : 3 + (ecode[1] << 8) + ecode[2]),
           offset_top, md, ims, eptrb, match_isgroup);
         }
   
  @@ -3589,10 +3602,12 @@
         }
       /* Control never reaches here */
   
  -    /* Skip over conditional reference data if encountered (should not be) */
  +    /* Skip over conditional reference or large extraction number data if
  +    encountered. */
   
       case OP_CREF:
  -    ecode += 2;
  +    case OP_BRANUMBER:
  +    ecode += 3;
       break;
   
       /* End of the pattern. If PCRE_NOTEMPTY is set, fail if we have matched
  @@ -3858,8 +3873,14 @@
   
         if (*prev != OP_COND)
           {
  +        int offset;
           int number = *prev - OP_BRA;
  -        int offset = number << 1;
  +
  +        /* For extended extraction brackets (large number), we have to fish out
  +        the number from a dummy opcode at the start. */
  +
  +        if (number > EXTRACT_BASIC_MAX) number = (prev[4] << 8) | prev[5];
  +        offset = number << 1;
   
   #ifdef DEBUG
           printf("end bracket %d", number);
  @@ -4053,8 +4074,8 @@
       case OP_REF:
         {
         int length;
  -      int offset = ecode[1] << 1;                /* Doubled reference number */
  -      ecode += 2;                                /* Advance past the item */
  +      int offset = (ecode[1] << 9) | (ecode[2] << 1); /* Doubled ref number */
  +      ecode += 3;                                     /* Advance past item */
   
         /* If the reference is unset, set the length to be longer than the amount
         of subject left; this ensures that every attempt at a match fails. We
  @@ -4878,8 +4899,8 @@
   const real_pcre *re = (const real_pcre *)external_re;
   const real_pcre_extra *extra = (const real_pcre_extra *)external_extra;
   BOOL using_temporary_offsets = FALSE;
  -BOOL anchored = ((re->options | options) & PCRE_ANCHORED) != 0;
  -BOOL startline = (re->options & PCRE_STARTLINE) != 0;
  +BOOL anchored;
  +BOOL startline;
   
   if ((options & ~PUBLIC_EXEC_OPTIONS) != 0) return PCRE_ERROR_BADOPTION;
   
  @@ -4887,6 +4908,9 @@
      (offsets == NULL && offsetcount > 0)) return PCRE_ERROR_NULL;
   if (re->magic_number != MAGIC_NUMBER) return PCRE_ERROR_BADMAGIC;
   
  +anchored = ((re->options | options) & PCRE_ANCHORED) != 0;
  +startline = (re->options & PCRE_STARTLINE) != 0;
  +
   match_block.start_pattern = re->code;
   match_block.start_subject = (const uschar *)subject;
   match_block.end_subject = match_block.start_subject + length;
  @@ -5120,7 +5144,7 @@
   
     rc = match_block.offset_overflow? 0 : match_block.end_offset_top/2;
   
  -  if (match_block.offset_end < 2) rc = 0; else
  +  if (offsetcount < 2) rc = 0; else
       {
       offsets[0] = start_match - match_block.start_subject;
       offsets[1] = match_block.end_match_ptr - match_block.start_subject;
  Index: ossp-pkg/pcre/pcre.h
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 pcre.h
  --- ossp-pkg/pcre/pcre.h	29 Aug 2000 19:24:17 -0000	1.7
  +++ ossp-pkg/pcre/pcre.h	7 Jan 2002 15:21:06 -0000	1.8
  @@ -2,14 +2,14 @@
   *       Perl-Compatible Regular Expressions      *
   *************************************************/
   
  -/* Copyright (c) 1997-2000 University of Cambridge */
  +/* Copyright (c) 1997-2001 University of Cambridge */
   
   #ifndef _PCRE_H
   #define _PCRE_H
   
   #define PCRE_MAJOR 3
  -#define PCRE_MINOR 4
  -#define PCRE_DATE  22-Aug-2000
  +#define PCRE_MINOR 8
  +#define PCRE_DATE  18-Dec-2001
   
   #define __PCRE_STRING(a)  #a
   #define __PCRE_XSTRING(s) _STRING(s)
  @@ -77,8 +77,11 @@
   
   /* Types */
   
  -typedef void pcre;
  -typedef void pcre_extra;
  +struct real_pcre;        /* declaration; the definition is private  */
  +struct real_pcre_extra;  /* declaration; the definition is private */
  +
  +typedef struct real_pcre pcre;
  +typedef struct real_pcre_extra pcre_extra;
   
   /* Store get and free functions. These can be set to alternative malloc/free
   functions if required. Some magic is required for Win32 DLL; it is null on
  @@ -102,7 +105,7 @@
   extern int  pcre_get_substring_list(const char *, int *, int, const char ***);
   extern int  pcre_info(const pcre *, int *, int *);
   extern int  pcre_fullinfo(const pcre *, const pcre_extra *, int, void *);
  -extern unsigned const char *pcre_maketables(void);
  +extern const unsigned char *pcre_maketables(void);
   extern pcre_extra *pcre_study(const pcre *, int, const char **);
   extern const char *pcre_version(void);
   extern int pcre_match(const char *, const char *, ...);
  Index: ossp-pkg/pcre/pcre_dftables.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 pcre_dftables.c
  --- ossp-pkg/pcre/pcre_dftables.c	2 Feb 2000 17:18:46 -0000	1.3
  +++ ossp-pkg/pcre/pcre_dftables.c	7 Jan 2002 15:21:06 -0000	1.4
  @@ -8,7 +8,7 @@
   
   Written by: Philip Hazel <ph10@cam.ac.uk>
   
  -           Copyright (c) 1997-2000 University of Cambridge
  +           Copyright (c) 1997-2001 University of Cambridge
   
   -----------------------------------------------------------------------------
   Permission is granted to anyone to use this software for any purpose on any
  @@ -53,13 +53,13 @@
   int main(void)
   {
   int i;
  -unsigned const char *tables = pcre_maketables();
  +const unsigned char *tables = pcre_maketables();
   
   printf(
     "/*************************************************\n"
     "*      Perl-Compatible Regular Expressions       *\n"
     "*************************************************/\n\n"
  -  "/* This file is automatically written by the pcre_dftables auxiliary \n"
  +  "/* This file is automatically written by the dftables auxiliary \n"
     "program. If you edit it by hand, you might like to edit the Makefile to \n"
     "prevent its ever being regenerated.\n\n"
     "This file is #included in the compilation of pcre.c to build the default\n"
  @@ -145,4 +145,4 @@
   return 0;
   }
   
  -/* End of pcre_dftables.c */
  +/* End of dftables.c */
  Index: ossp-pkg/pcre/pcre_get.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 pcre_get.c
  --- ossp-pkg/pcre/pcre_get.c	2 Aug 2000 09:46:06 -0000	1.2
  +++ ossp-pkg/pcre/pcre_get.c	7 Jan 2002 15:21:06 -0000	1.3
  @@ -9,7 +9,7 @@
   
   Written by: Philip Hazel <ph10@cam.ac.uk>
   
  -           Copyright (c) 1997-2000 University of Cambridge
  +           Copyright (c) 1997-2001 University of Cambridge
   
   -----------------------------------------------------------------------------
   Permission is granted to anyone to use this software for any purpose on any
  Index: ossp-pkg/pcre/pcre_internal.h
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 pcre_internal.h
  --- ossp-pkg/pcre/pcre_internal.h	29 Aug 2000 19:24:17 -0000	1.6
  +++ ossp-pkg/pcre/pcre_internal.h	7 Jan 2002 15:21:06 -0000	1.7
  @@ -9,7 +9,7 @@
   
   Written by: Philip Hazel <ph10@cam.ac.uk>
   
  -           Copyright (c) 1997-2000 University of Cambridge
  +           Copyright (c) 1997-2001 University of Cambridge
   
   -----------------------------------------------------------------------------
   Permission is granted to anyone to use this software for any purpose on any
  @@ -123,12 +123,36 @@
   #define FALSE   0
   #define TRUE    1
   
  +/* Escape items that are just an encoding of a particular data value. Note that
  +ESC_N is defined as yet another macro, which is set in config.h to either \n
  +(the default) or \r (which some people want). */
  +
  +#ifndef ESC_E
  +#define ESC_E 27
  +#endif
  +
  +#ifndef ESC_F
  +#define ESC_F '\f'
  +#endif
  +
  +#ifndef ESC_N
  +#define ESC_N '\n'
  +#endif
  +
  +#ifndef ESC_R
  +#define ESC_R '\r'
  +#endif
  +
  +#ifndef ESC_T
  +#define ESC_T '\t'
  +#endif
  +
   /* These are escaped items that aren't just an encoding of a particular data
   value such as \n. They must have non-zero values, as check_escape() returns
   their negation. Also, they must appear in the same order as in the opcode
   definitions below, up to ESC_z. The final one must be ESC_REF as subsequent
   values are used for \1, \2, \3, etc. There is a test in the code for an escape
  -greater than ESC_b and less than ESC_X to detect the types that may be
  +greater than ESC_b and less than ESC_Z to detect the types that may be
   repeated. If any new escapes are put in-between that don't consume a character,
   that code will have to change. */
   
  @@ -224,19 +248,26 @@
   
     OP_ONCE,           /* Once matched, don't back up into the subpattern */
     OP_COND,           /* Conditional group */
  -  OP_CREF,           /* Used to hold an extraction string number */
  +  OP_CREF,           /* Used to hold an extraction string number (cond ref) */
   
     OP_BRAZERO,        /* These two must remain together and in this */
     OP_BRAMINZERO,     /* order. */
   
  +  OP_BRANUMBER,      /* Used for extracting brackets whose number is greater
  +                        than can fit into an opcode. */
  +
     OP_BRA             /* This and greater values are used for brackets that
  -                        extract substrings. */
  +                        extract substrings up to a basic limit. After that,
  +                        use is made of OP_BRANUMBER. */
   };
   
  -/* The highest extraction number. This is limited by the number of opcodes
  -left after OP_BRA, i.e. 255 - OP_BRA. We actually set it somewhat lower. */
  +/* The highest extraction number before we have to start using additional
  +bytes. (Originally PCRE didn't have support for extraction counts highter than
  +this number.) The value is limited by the number of opcodes left after OP_BRA,
  +i.e. 255 - OP_BRA. We actually set it a bit lower to leave room for additional
  +opcodes. */
   
  -#define EXTRACT_MAX  99
  +#define EXTRACT_BASIC_MAX  150
   
   /* The texts of compile-time error messages are defined as macros here so that
   they can be accessed by the POSIX wrapper and converted into error codes.  Yes,
  @@ -255,13 +286,13 @@
   #define ERR10 "operand of unlimited repeat could match the empty string"
   #define ERR11 "internal error: unexpected repeat"
   #define ERR12 "unrecognized character after (?"
  -#define ERR13 "too many capturing parenthesized sub-patterns"
  +#define ERR13 "unused error"
   #define ERR14 "missing )"
   #define ERR15 "back reference to non-existent subpattern"
   #define ERR16 "erroffset passed as NULL"
   #define ERR17 "unknown option bit(s) set"
   #define ERR18 "missing ) after comment"
  -#define ERR19 "too many sets of parentheses"
  +#define ERR19 "parentheses nested too deeply"
   #define ERR20 "regular expression too large"
   #define ERR21 "failed to get memory"
   #define ERR22 "unmatched parentheses"
  @@ -296,8 +327,8 @@
     size_t size;
     const unsigned char *tables;
     unsigned long int options;
  -  uschar top_bracket;
  -  uschar top_backref;
  +  unsigned short int top_bracket;
  +  unsigned short int top_backref;
     uschar first_char;
     uschar req_char;
     uschar code[1];
  Index: ossp-pkg/pcre/pcre_maketables.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 pcre_maketables.c
  --- ossp-pkg/pcre/pcre_maketables.c	2 Feb 2000 17:18:46 -0000	1.2
  +++ ossp-pkg/pcre/pcre_maketables.c	7 Jan 2002 15:21:06 -0000	1.3
  @@ -8,7 +8,7 @@
   
   Written by: Philip Hazel <ph10@cam.ac.uk>
   
  -           Copyright (c) 1997-2000 University of Cambridge
  +           Copyright (c) 1997-2001 University of Cambridge
   
   -----------------------------------------------------------------------------
   Permission is granted to anyone to use this software for any purpose on any
  @@ -58,7 +58,7 @@
   Returns:     pointer to the contiguous block of data
   */
   
  -unsigned const char *
  +const unsigned char *
   pcre_maketables(void)
   {
   unsigned char *yield, *p;
  Index: ossp-pkg/pcre/pcre_study.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 pcre_study.c
  --- ossp-pkg/pcre/pcre_study.c	2 Feb 2000 17:18:46 -0000	1.2
  +++ ossp-pkg/pcre/pcre_study.c	7 Jan 2002 15:21:06 -0000	1.3
  @@ -9,7 +9,7 @@
   
   Written by: Philip Hazel <ph10@cam.ac.uk>
   
  -           Copyright (c) 1997-2000 University of Cambridge
  +           Copyright (c) 1997-2001 University of Cambridge
   
   -----------------------------------------------------------------------------
   Permission is granted to anyone to use this software for any purpose on any
  @@ -104,8 +104,6 @@
   
     while (try_next)
       {
  -    try_next = FALSE;
  -
       /* If a branch starts with a bracket or a positive lookahead assertion,
       recurse to set bits from within them. That's all for this branch. */
   
  @@ -113,6 +111,7 @@
         {
         if (!set_start_bits(tcode, start_bits, caseless, cd))
           return FALSE;
  +      try_next = FALSE;
         }
   
       else switch(*tcode)
  @@ -120,12 +119,17 @@
         default:
         return FALSE;
   
  +      /* Skip over extended extraction bracket number */
  +
  +      case OP_BRANUMBER:
  +      tcode += 3;
  +      break;
  +
         /* Skip over lookbehind and negative lookahead assertions */
   
         case OP_ASSERT_NOT:
         case OP_ASSERTBACK:
         case OP_ASSERTBACK_NOT:
  -      try_next = TRUE;
         do tcode += (tcode[1] << 8) + tcode[2]; while (*tcode == OP_ALT);
         tcode += 3;
         break;
  @@ -135,7 +139,6 @@
         case OP_OPT:
         caseless = (tcode[1] & PCRE_CASELESS) != 0;
         tcode += 2;
  -      try_next = TRUE;
         break;
   
         /* BRAZERO does the bracket, but carries on. */
  @@ -147,7 +150,6 @@
         dummy = 1;
         do tcode += (tcode[1] << 8) + tcode[2]; while (*tcode == OP_ALT);
         tcode += 3;
  -      try_next = TRUE;
         break;
   
         /* Single-char * or ? sets the bit and tries the next item */
  @@ -158,7 +160,6 @@
         case OP_MINQUERY:
         set_bit(start_bits, tcode[1], caseless, cd);
         tcode += 2;
  -      try_next = TRUE;
         break;
   
         /* Single-char upto sets the bit and tries the next */
  @@ -167,7 +168,6 @@
         case OP_MINUPTO:
         set_bit(start_bits, tcode[3], caseless, cd);
         tcode += 4;
  -      try_next = TRUE;
         break;
   
         /* At least one single char sets the bit and stops */
  @@ -181,6 +181,7 @@
         case OP_PLUS:
         case OP_MINPLUS:
         set_bit(start_bits, tcode[1], caseless, cd);
  +      try_next = FALSE;
         break;
   
         /* Single character type sets the bits and stops */
  @@ -188,31 +189,37 @@
         case OP_NOT_DIGIT:
         for (c = 0; c < 32; c++)
           start_bits[c] |= ~cd->cbits[c+cbit_digit];
  +      try_next = FALSE;
         break;
   
         case OP_DIGIT:
         for (c = 0; c < 32; c++)
           start_bits[c] |= cd->cbits[c+cbit_digit];
  +      try_next = FALSE;
         break;
   
         case OP_NOT_WHITESPACE:
         for (c = 0; c < 32; c++)
           start_bits[c] |= ~cd->cbits[c+cbit_space];
  +      try_next = FALSE;
         break;
   
         case OP_WHITESPACE:
         for (c = 0; c < 32; c++)
           start_bits[c] |= cd->cbits[c+cbit_space];
  +      try_next = FALSE;
         break;
   
         case OP_NOT_WORDCHAR:
         for (c = 0; c < 32; c++)
           start_bits[c] |= ~cd->cbits[c+cbit_word];
  +      try_next = FALSE;
         break;
   
         case OP_WORDCHAR:
         for (c = 0; c < 32; c++)
           start_bits[c] |= cd->cbits[c+cbit_word];
  +      try_next = FALSE;
         break;
   
         /* One or more character type fudges the pointer and restarts, knowing
  @@ -221,12 +228,10 @@
         case OP_TYPEPLUS:
         case OP_TYPEMINPLUS:
         tcode++;
  -      try_next = TRUE;
         break;
   
         case OP_TYPEEXACT:
         tcode += 3;
  -      try_next = TRUE;
         break;
   
         /* Zero or more repeats of character types set the bits and then
  @@ -274,7 +279,6 @@
           }
   
         tcode += 2;
  -      try_next = TRUE;
         break;
   
         /* Character class: set the bits and either carry on or not,
  @@ -292,16 +296,16 @@
             case OP_CRQUERY:
             case OP_CRMINQUERY:
             tcode++;
  -          try_next = TRUE;
             break;
   
             case OP_CRRANGE:
             case OP_CRMINRANGE:
  -          if (((tcode[1] << 8) + tcode[2]) == 0)
  -            {
  -            tcode += 5;
  -            try_next = TRUE;
  -            }
  +          if (((tcode[1] << 8) + tcode[2]) == 0) tcode += 5;
  +            else try_next = FALSE;
  +          break;
  +
  +          default:
  +          try_next = FALSE;
             break;
             }
           }
  Index: ossp-pkg/pcre/pcre_test.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 pcre_test.c
  --- ossp-pkg/pcre/pcre_test.c	2 Aug 2000 09:46:06 -0000	1.5
  +++ ossp-pkg/pcre/pcre_test.c	7 Jan 2002 15:21:06 -0000	1.6
  @@ -73,13 +73,14 @@
     if (cvalue <= utf8_table1[i]) break;
   if (i >= sizeof(utf8_table1)/sizeof(int)) return 0;
   if (cvalue < 0) return -1;
  -*buffer++ = utf8_table2[i] | (cvalue & utf8_table3[i]);
  -cvalue >>= 6 - i;
  -for (j = 0; j < i; j++)
  -  {
  -  *buffer++ = 0x80 | (cvalue & 0x3f);
  -  cvalue >>= 6;
  -  }
  +
  +buffer += i;
  +for (j = i; j > 0; j--)
  + {
  + *buffer-- = 0x80 | (cvalue & 0x3f);
  + cvalue >>= 6;
  + }
  +*buffer = utf8_table2[i] | cvalue;
   return i + 1;
   }
   
  @@ -99,7 +100,7 @@
              -6 to 0 => malformed UTF-8 character at offset = (-return)
   */
   
  -static int
  +int
   utf82ord(unsigned char *buffer, int *vptr)
   {
   int c = *buffer++;
  @@ -117,15 +118,15 @@
   
   /* i now has a value in the range 1-5 */
   
  -d = c & utf8_table3[i];
  -s = 6 - i;
  +s = 6*i;
  +d = (c & utf8_table3[i]) << s;
   
   for (j = 0; j < i; j++)
     {
     c = *buffer++;
     if ((c & 0xc0) != 0x80) return -(j+1);
  +  s -= 6;
     d |= (c & 0x3f) << s;
  -  s += 6;
     }
   
   /* Check that encoding was the correct unique one */
  @@ -159,7 +160,7 @@
     "class", "Ref", "Recurse",
     "Alt", "Ket", "KetRmax", "KetRmin", "Assert", "Assert not",
     "AssertB", "AssertB not", "Reverse", "Once", "Cond", "Cref",
  -  "Brazero", "Braminzero", "Bra"
  +  "Brazero", "Braminzero", "Branumber", "Bra"
   };
   
   
  @@ -178,7 +179,10 @@
   
     if (*code >= OP_BRA)
       {
  -    fprintf(outfile, "%3d Bra %d", (code[1] << 8) + code[2], *code - OP_BRA);
  +    if (*code - OP_BRA > EXTRACT_BASIC_MAX)
  +      fprintf(outfile, "%3d Bra extra", (code[1] << 8) + code[2]);
  +    else
  +      fprintf(outfile, "%3d Bra %d", (code[1] << 8) + code[2], *code - OP_BRA);
       code += 2;
       }
   
  @@ -194,16 +198,6 @@
       code++;
       break;
   
  -    case OP_COND:
  -    fprintf(outfile, "%3d Cond", (code[1] << 8) + code[2]);
  -    code += 2;
  -    break;
  -
  -    case OP_CREF:
  -    fprintf(outfile, " %.2d %s", code[1], OP_names[*code]);
  -    code++;
  -    break;
  -
       case OP_CHARS:
       charlength = *(++code);
       fprintf(outfile, "%3d ", charlength);
  @@ -221,11 +215,10 @@
       case OP_ASSERTBACK:
       case OP_ASSERTBACK_NOT:
       case OP_ONCE:
  -    fprintf(outfile, "%3d %s", (code[1] << 8) + code[2], OP_names[*code]);
  -    code += 2;
  -    break;
  -
  +    case OP_COND:
  +    case OP_BRANUMBER:
       case OP_REVERSE:
  +    case OP_CREF:
       fprintf(outfile, "%3d %s", (code[1] << 8) + code[2], OP_names[*code]);
       code += 2;
       break;
  @@ -298,8 +291,8 @@
       break;
   
       case OP_REF:
  -    fprintf(outfile, "    \\%d", *(++code));
  -    code++;
  +    fprintf(outfile, "    \\%d", (code[1] << 8) | code[2]);
  +    code += 3;
       goto CLASS_REF_REPEAT;
   
       case OP_CLASS:
  @@ -441,7 +434,12 @@
   int timeit = 0;
   int showinfo = 0;
   int showstore = 0;
  +int size_offsets = 45;
  +int size_offsets_max;
  +int *offsets;
  +#if !defined NOPOSIX
   int posix = 0;
  +#endif
   int debug = 0;
   int done = 0;
   unsigned char buffer[30000];
  @@ -455,27 +453,51 @@
   
   while (argc > 1 && argv[op][0] == '-')
     {
  +  char *endptr;
  +
     if (strcmp(argv[op], "-s") == 0 || strcmp(argv[op], "-m") == 0)
       showstore = 1;
     else if (strcmp(argv[op], "-t") == 0) timeit = 1;
     else if (strcmp(argv[op], "-i") == 0) showinfo = 1;
     else if (strcmp(argv[op], "-d") == 0) showinfo = debug = 1;
  +  else if (strcmp(argv[op], "-o") == 0 && argc > 2 &&
  +      ((size_offsets = (int)strtoul(argv[op+1], &endptr, 10)), *endptr == 0))
  +    {
  +    op++;
  +    argc--;
  +    }
  +#if !defined NOPOSIX
     else if (strcmp(argv[op], "-p") == 0) posix = 1;
  +#endif
     else
       {
  -    printf("*** Unknown option %s\n", argv[op]);
  -    printf("Usage: pcretest [-d] [-i] [-p] [-s] [-t] [<input> [<output>]]\n");
  -    printf("  -d   debug: show compiled code; implies -i\n"
  -           "  -i   show information about compiled pattern\n"
  -           "  -p   use POSIX interface\n"
  -           "  -s   output store information\n"
  -           "  -t   time compilation and execution\n");
  +    printf("** Unknown or malformed option %s\n", argv[op]);
  +    printf("Usage:   pcretest [-d] [-i] [-o <n>] [-p] [-s] [-t] [<input> [<output>]]\n");
  +    printf("  -d     debug: show compiled code; implies -i\n"
  +           "  -i     show information about compiled pattern\n"
  +           "  -o <n> set size of offsets vector to <n>\n");
  +#if !defined NOPOSIX
  +    printf("  -p     use POSIX interface\n");
  +#endif
  +    printf("  -s     output store information\n"
  +           "  -t     time compilation and execution\n");
       return 1;
       }
     op++;
     argc--;
     }
   
  +/* Get the store for the offsets vector, and remember what it was */
  +
  +size_offsets_max = size_offsets;
  +offsets = malloc(size_offsets_max * sizeof(int));
  +if (offsets == NULL)
  +  {
  +  printf("** Failed to get %d bytes of memory for offsets vector\n",
  +    size_offsets_max * sizeof(int));
  +  return 1;
  +  }
  +
   /* Sort out the input and output files */
   
   if (argc > 1)
  @@ -515,18 +537,18 @@
   
   #if !defined NOPOSIX  /* There are still compilers that require no indent */
     regex_t preg;
  +  int do_posix = 0;
   #endif
   
     const char *error;
     unsigned char *p, *pp, *ppp;
  -  unsigned const char *tables = NULL;
  +  const unsigned char *tables = NULL;
     int do_study = 0;
     int do_debug = debug;
     int do_G = 0;
     int do_g = 0;
     int do_showinfo = showinfo;
     int do_showrest = 0;
  -  int do_posix = 0;
     int utf8 = 0;
     int erroroffset, len, delimiter;
   
  @@ -720,13 +742,14 @@
   
       if (do_showinfo)
         {
  +      unsigned long int get_options;
         int old_first_char, old_options, old_count;
         int count, backrefmax, first_char, need_char;
         size_t size;
   
         if (do_debug) print_internals(re);
   
  -      new_info(re, NULL, PCRE_INFO_OPTIONS, &options);
  +      new_info(re, NULL, PCRE_INFO_OPTIONS, &get_options);
         new_info(re, NULL, PCRE_INFO_SIZE, &size);
         new_info(re, NULL, PCRE_INFO_CAPTURECOUNT, &count);
         new_info(re, NULL, PCRE_INFO_BACKREFMAX, &backrefmax);
  @@ -746,9 +769,9 @@
             "First char disagreement: pcre_fullinfo=%d pcre_info=%d\n",
               first_char, old_first_char);
   
  -        if (old_options != options) fprintf(outfile,
  -          "Options disagreement: pcre_fullinfo=%d pcre_info=%d\n", options,
  -            old_options);
  +        if (old_options != (int)get_options) fprintf(outfile,
  +          "Options disagreement: pcre_fullinfo=%ld pcre_info=%d\n",
  +            get_options, old_options);
           }
   
         if (size != gotten_store) fprintf(outfile,
  @@ -758,17 +781,17 @@
         fprintf(outfile, "Capturing subpattern count = %d\n", count);
         if (backrefmax > 0)
           fprintf(outfile, "Max back reference = %d\n", backrefmax);
  -      if (options == 0) fprintf(outfile, "No options\n");
  +      if (get_options == 0) fprintf(outfile, "No options\n");
           else fprintf(outfile, "Options:%s%s%s%s%s%s%s%s%s\n",
  -          ((options & PCRE_ANCHORED) != 0)? " anchored" : "",
  -          ((options & PCRE_CASELESS) != 0)? " caseless" : "",
  -          ((options & PCRE_EXTENDED) != 0)? " extended" : "",
  -          ((options & PCRE_MULTILINE) != 0)? " multiline" : "",
  -          ((options & PCRE_DOTALL) != 0)? " dotall" : "",
  -          ((options & PCRE_DOLLAR_ENDONLY) != 0)? " dollar_endonly" : "",
  -          ((options & PCRE_EXTRA) != 0)? " extra" : "",
  -          ((options & PCRE_UNGREEDY) != 0)? " ungreedy" : "",
  -          ((options & PCRE_UTF8) != 0)? " utf8" : "");
  +          ((get_options & PCRE_ANCHORED) != 0)? " anchored" : "",
  +          ((get_options & PCRE_CASELESS) != 0)? " caseless" : "",
  +          ((get_options & PCRE_EXTENDED) != 0)? " extended" : "",
  +          ((get_options & PCRE_MULTILINE) != 0)? " multiline" : "",
  +          ((get_options & PCRE_DOTALL) != 0)? " dotall" : "",
  +          ((get_options & PCRE_DOLLAR_ENDONLY) != 0)? " dollar_endonly" : "",
  +          ((get_options & PCRE_EXTRA) != 0)? " extra" : "",
  +          ((get_options & PCRE_UNGREEDY) != 0)? " ungreedy" : "",
  +          ((get_options & PCRE_UTF8) != 0)? " utf8" : "");
   
         if (((((real_pcre *)re)->options) & PCRE_ICHANGED) != 0)
           fprintf(outfile, "Case state changes\n");
  @@ -871,6 +894,8 @@
       {
       unsigned char *q;
       unsigned char *bptr = dbuffer;
  +    int *use_offsets = offsets;
  +    int use_size_offsets = size_offsets;
       int count, c;
       int copystrings = 0;
       int getstrings = 0;
  @@ -878,8 +903,6 @@
       int gmatched = 0;
       int start_offset = 0;
       int g_notempty = 0;
  -    int offsets[45];
  -    int size_offsets = sizeof(offsets)/sizeof(int);
   
       options = 0;
   
  @@ -934,11 +957,11 @@
               c = c * 16 + tolower(*pt) - ((isdigit(*pt))? '0' : 'W');
             if (*pt == '}')
               {
  -            unsigned char utf8_buffer[8];
  +            unsigned char buffer[8];
               int ii, utn;
  -            utn = ord2utf8(c, utf8_buffer);
  -            for (ii = 0; ii < utn - 1; ii++) *q++ = utf8_buffer[ii];
  -            c = utf8_buffer[ii];   /* Last byte */
  +            utn = ord2utf8(c, buffer);
  +            for (ii = 0; ii < utn - 1; ii++) *q++ = buffer[ii];
  +            c = buffer[ii];   /* Last byte */
               p = pt + 1;
               break;
               }
  @@ -987,7 +1010,20 @@
   
           case 'O':
           while(isdigit(*p)) n = n * 10 + *p++ - '0';
  -        if (n <= (int)(sizeof(offsets)/sizeof(int))) size_offsets = n;
  +        if (n > size_offsets_max)
  +          {
  +          size_offsets_max = n;
  +          free(offsets);
  +          use_offsets = offsets = malloc(size_offsets_max * sizeof(int));
  +          if (offsets == NULL)
  +            {
  +            printf("** Failed to get %d bytes of memory for offsets vector\n",
  +              size_offsets_max * sizeof(int));
  +            return 1;
  +            }
  +          }
  +        use_size_offsets = n;
  +        if (n == 0) use_offsets = NULL;
           continue;
   
           case 'Z':
  @@ -1007,11 +1043,11 @@
         {
         int rc;
         int eflags = 0;
  -      regmatch_t pmatch[sizeof(offsets)/sizeof(int)];
  +      regmatch_t *pmatch = malloc(sizeof(regmatch_t) * use_size_offsets);
         if ((options & PCRE_NOTBOL) != 0) eflags |= REG_NOTBOL;
         if ((options & PCRE_NOTEOL) != 0) eflags |= REG_NOTEOL;
   
  -      rc = regexec(&preg, (const char *)bptr, size_offsets, pmatch, eflags);
  +      rc = regexec(&preg, (const char *)bptr, use_size_offsets, pmatch, eflags);
   
         if (rc != 0)
           {
  @@ -1021,7 +1057,7 @@
         else
           {
           size_t i;
  -        for (i = 0; i < size_offsets; i++)
  +        for (i = 0; i < use_size_offsets; i++)
             {
             if (pmatch[i].rm_so >= 0)
               {
  @@ -1038,6 +1074,7 @@
               }
             }
           }
  +      free(pmatch);
         }
   
       /* Handle matching via the native interface - repeats for /g and /G */
  @@ -1054,7 +1091,7 @@
           clock_t start_time = clock();
           for (i = 0; i < LOOPREPEAT; i++)
             count = pcre_exec(re, extra, (char *)bptr, len,
  -            start_offset, options | g_notempty, offsets, size_offsets);
  +            start_offset, options | g_notempty, use_offsets, use_size_offsets);
           time_taken = clock() - start_time;
           fprintf(outfile, "Execute time %.3f milliseconds\n",
             ((double)time_taken * 1000.0)/
  @@ -1062,12 +1099,12 @@
           }
   
         count = pcre_exec(re, extra, (char *)bptr, len,
  -        start_offset, options | g_notempty, offsets, size_offsets);
  +        start_offset, options | g_notempty, use_offsets, use_size_offsets);
   
         if (count == 0)
           {
           fprintf(outfile, "Matched, but too many substrings\n");
  -        count = size_offsets/3;
  +        count = use_size_offsets/3;
           }
   
         /* Matched */
  @@ -1077,19 +1114,19 @@
           int i;
           for (i = 0; i < count * 2; i += 2)
             {
  -          if (offsets[i] < 0)
  +          if (use_offsets[i] < 0)
               fprintf(outfile, "%2d: <unset>\n", i/2);
             else
               {
               fprintf(outfile, "%2d: ", i/2);
  -            pchars(bptr + offsets[i], offsets[i+1] - offsets[i], utf8);
  +            pchars(bptr + use_offsets[i], use_offsets[i+1] - use_offsets[i], utf8);
               fprintf(outfile, "\n");
               if (i == 0)
                 {
                 if (do_showrest)
                   {
                   fprintf(outfile, " 0+ ");
  -                pchars(bptr + offsets[i+1], len - offsets[i+1], utf8);
  +                pchars(bptr + use_offsets[i+1], len - use_offsets[i+1], utf8);
                   fprintf(outfile, "\n");
                   }
                 }
  @@ -1101,7 +1138,7 @@
             if ((copystrings & (1 << i)) != 0)
               {
               char copybuffer[16];
  -            int rc = pcre_copy_substring((char *)bptr, offsets, count,
  +            int rc = pcre_copy_substring((char *)bptr, use_offsets, count,
                 i, copybuffer, sizeof(copybuffer));
               if (rc < 0)
                 fprintf(outfile, "copy substring %d failed %d\n", i, rc);
  @@ -1115,7 +1152,7 @@
             if ((getstrings & (1 << i)) != 0)
               {
               const char *substring;
  -            int rc = pcre_get_substring((char *)bptr, offsets, count,
  +            int rc = pcre_get_substring((char *)bptr, use_offsets, count,
                 i, &substring);
               if (rc < 0)
                 fprintf(outfile, "get substring %d failed %d\n", i, rc);
  @@ -1131,7 +1168,7 @@
           if (getlist)
             {
             const char **stringlist;
  -          int rc = pcre_get_substring_list((char *)bptr, offsets, count,
  +          int rc = pcre_get_substring_list((char *)bptr, use_offsets, count,
               &stringlist);
             if (rc < 0)
               fprintf(outfile, "get substring list failed %d\n", rc);
  @@ -1157,8 +1194,8 @@
           {
           if (g_notempty != 0)
             {
  -          offsets[0] = start_offset;
  -          offsets[1] = start_offset + 1;
  +          use_offsets[0] = start_offset;
  +          use_offsets[1] = start_offset + 1;
             }
           else
             {
  @@ -1183,22 +1220,22 @@
         character. */
   
         g_notempty = 0;
  -      if (offsets[0] == offsets[1])
  +      if (use_offsets[0] == use_offsets[1])
           {
  -        if (offsets[0] == len) break;
  +        if (use_offsets[0] == len) break;
           g_notempty = PCRE_NOTEMPTY | PCRE_ANCHORED;
           }
   
         /* For /g, update the start offset, leaving the rest alone */
   
  -      if (do_g) start_offset = offsets[1];
  +      if (do_g) start_offset = use_offsets[1];
   
         /* For /G, update the pointer and length */
   
         else
           {
  -        bptr += offsets[1];
  -        len -= offsets[1];
  +        bptr += use_offsets[1];
  +        len -= use_offsets[1];
           }
         }  /* End of loop for /g and /G */
       }    /* End of loop for data lines */
  Index: ossp-pkg/pcre/pcre_test.d/testinput1
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 testinput1
  --- ossp-pkg/pcre/pcre_test.d/testinput1	2 Aug 2000 09:46:09 -0000	1.3
  +++ ossp-pkg/pcre/pcre_test.d/testinput1	7 Jan 2002 15:21:07 -0000	1.4
  @@ -1441,10 +1441,6 @@
       ABCabc
       abcABC
   
  -/(main(O)?)+/
  -    mainmain
  -    mainOmain
  -
   /ab{3cd/
       ab{3cd
   
  @@ -1918,4 +1914,37 @@
       acb
       a\nb  
   
  +/^(b+?|a){1,2}?c/
  +    bac
  +    bbac
  +    bbbac
  +    bbbbac
  +    bbbbbac 
  +
  +/^(b+|a){1,2}?c/
  +    bac
  +    bbac
  +    bbbac
  +    bbbbac
  +    bbbbbac 
  +    
  +/(?!\A)x/m
  +    x\nb\n
  +    a\bx\n  
  +    
  +/\x0{ab}/
  +    \0{ab} 
  +
  +/(A|B)*?CD/
  +    CD 
  +    
  +/(A|B)*CD/
  +    CD 
  +
  +/(AB)*?\1/
  +    ABABAB
  +
  +/(AB)*\1/
  +    ABABAB
  +    
   / End of testinput1 /
  Index: ossp-pkg/pcre/pcre_test.d/testinput2
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 testinput2
  --- ossp-pkg/pcre/pcre_test.d/testinput2	29 Aug 2000 19:24:19 -0000	1.5
  +++ ossp-pkg/pcre/pcre_test.d/testinput2	7 Jan 2002 15:21:07 -0000	1.6
  @@ -709,4 +709,15 @@
   
   /^(?(0)f|b)oo/
   
  +/This one's here because of the large output vector needed/
  +
  +/(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\w+)\s+(\270)/
  +    \O900 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 ABC ABC
  +
  +/This one's here because Perl does this differently and PCRE can't at present/
  +
  +/(main(O)?)+/
  +    mainmain
  +    mainOmain
  +    
   / End of testinput2 /
  Index: ossp-pkg/pcre/pcre_test.d/testinput6
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 testinput6
  --- ossp-pkg/pcre/pcre_test.d/testinput6	2 Aug 2000 09:46:09 -0000	1.1
  +++ ossp-pkg/pcre/pcre_test.d/testinput6	7 Jan 2002 15:21:07 -0000	1.2
  @@ -27,6 +27,32 @@
   
   /\xff/8D
   
  +/\x{0041}\x{2262}\x{0391}\x{002e}/D8
  +    \x{0041}\x{2262}\x{0391}\x{002e}
  +    
  +/\x{D55c}\x{ad6d}\x{C5B4}/D8 
  +    \x{D55c}\x{ad6d}\x{C5B4} 
  +
  +/\x{65e5}\x{672c}\x{8a9e}/D8
  +    \x{65e5}\x{672c}\x{8a9e}
  +
  +/\x{80}/D8
  +
  +/\x{084}/D8
  +
  +/\x{104}/D8
  +
  +/\x{861}/D8
  +
  +/\x{212ab}/D8
  +
  +/.{3,5}X/D8
  +    \x{212ab}\x{212ab}\x{212ab}\x{861}X
  +
  +
  +/.{3,5}?/D8
  +    \x{212ab}\x{212ab}\x{212ab}\x{861}
  +
   /-- These tests are here rather than in testinput5 because Perl 5.6 has --/
   /-- some problems with UTF-8 support, in the area of \x{..} where the   --/
   /-- value is < 255. It grumbles about invalid UTF-8 strings.            --/
  Index: ossp-pkg/pcre/pcre_test.d/testoutput1
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 testoutput1
  --- ossp-pkg/pcre/pcre_test.d/testoutput1	29 Aug 2000 19:24:19 -0000	1.7
  +++ ossp-pkg/pcre/pcre_test.d/testoutput1	7 Jan 2002 15:21:07 -0000	1.8
  @@ -1,4 +1,4 @@
  -PCRE version 3.4 22-Aug-2000
  +PCRE version 3.8 18-Dec-2001
   
   /the quick brown fox/
       the quick brown fox
  @@ -2079,15 +2079,6 @@
    0: abcABC
    1: abc
   
  -/(main(O)?)+/
  -    mainmain
  - 0: mainmain
  - 1: main
  -    mainOmain
  - 0: mainOmain
  - 1: main
  - 2: O
  -
   /ab{3cd/
       ab{3cd
    0: ab{3cd
  @@ -2961,5 +2952,67 @@
       a\nb  
    0: a\x0ab
   
  +/^(b+?|a){1,2}?c/
  +    bac
  + 0: bac
  + 1: a
  +    bbac
  + 0: bbac
  + 1: a
  +    bbbac
  + 0: bbbac
  + 1: a
  +    bbbbac
  + 0: bbbbac
  + 1: a
  +    bbbbbac 
  + 0: bbbbbac
  + 1: a
  +
  +/^(b+|a){1,2}?c/
  +    bac
  + 0: bac
  + 1: a
  +    bbac
  + 0: bbac
  + 1: a
  +    bbbac
  + 0: bbbac
  + 1: a
  +    bbbbac
  + 0: bbbbac
  + 1: a
  +    bbbbbac 
  + 0: bbbbbac
  + 1: a
  +    
  +/(?!\A)x/m
  +    x\nb\n
  +No match
  +    a\bx\n  
  + 0: x
  +    
  +/\x0{ab}/
  +    \0{ab} 
  + 0: \x00{ab}
  +
  +/(A|B)*?CD/
  +    CD 
  + 0: CD
  +    
  +/(A|B)*CD/
  +    CD 
  + 0: CD
  +
  +/(AB)*?\1/
  +    ABABAB
  + 0: ABAB
  + 1: AB
  +
  +/(AB)*\1/
  +    ABABAB
  + 0: ABABAB
  + 1: AB
  +    
   / End of testinput1 /
   
  Index: ossp-pkg/pcre/pcre_test.d/testoutput2
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 testoutput2
  --- ossp-pkg/pcre/pcre_test.d/testoutput2	29 Aug 2000 19:24:19 -0000	1.7
  +++ ossp-pkg/pcre/pcre_test.d/testoutput2	7 Jan 2002 15:21:07 -0000	1.8
  @@ -1,4 +1,4 @@
  -PCRE version 3.4 22-Aug-2000
  +PCRE version 3.8 18-Dec-2001
   
   /(a)b|/
   Capturing subpattern count = 1
  @@ -2067,6 +2067,311 @@
   /^(?(0)f|b)oo/
   Failed: invalid condition (?(0) at offset 5
   
  +/This one's here because of the large output vector needed/
  +Capturing subpattern count = 0
  +No options
  +First char = 'T'
  +Need char = 'd'
  +
  +/(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\w+)\s+(\270)/
  +Capturing subpattern count = 271
  +Max back reference = 270
  +No options
  +No first char
  +No need char
  +    \O900 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 ABC ABC
  + 0: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 ABC ABC
  + 1: 1 
  + 2: 2 
  + 3: 3 
  + 4: 4 
  + 5: 5 
  + 6: 6 
  + 7: 7 
  + 8: 8 
  + 9: 9 
  +10: 10 
  +11: 11 
  +12: 12 
  +13: 13 
  +14: 14 
  +15: 15 
  +16: 16 
  +17: 17 
  +18: 18 
  +19: 19 
  +20: 20 
  +21: 21 
  +22: 22 
  +23: 23 
  +24: 24 
  +25: 25 
  +26: 26 
  +27: 27 
  +28: 28 
  +29: 29 
  +30: 30 
  +31: 31 
  +32: 32 
  +33: 33 
  +34: 34 
  +35: 35 
  +36: 36 
  +37: 37 
  +38: 38 
  +39: 39 
  +40: 40 
  +41: 41 
  +42: 42 
  +43: 43 
  +44: 44 
  +45: 45 
  +46: 46 
  +47: 47 
  +48: 48 
  +49: 49 
  +50: 50 
  +51: 51 
  +52: 52 
  +53: 53 
  +54: 54 
  +55: 55 
  +56: 56 
  +57: 57 
  +58: 58 
  +59: 59 
  +60: 60 
  +61: 61 
  +62: 62 
  +63: 63 
  +64: 64 
  +65: 65 
  +66: 66 
  +67: 67 
  +68: 68 
  +69: 69 
  +70: 70 
  +71: 71 
  +72: 72 
  +73: 73 
  +74: 74 
  +75: 75 
  +76: 76 
  +77: 77 
  +78: 78 
  +79: 79 
  +80: 80 
  +81: 81 
  +82: 82 
  +83: 83 
  +84: 84 
  +85: 85 
  +86: 86 
  +87: 87 
  +88: 88 
  +89: 89 
  +90: 90 
  +91: 91 
  +92: 92 
  +93: 93 
  +94: 94 
  +95: 95 
  +96: 96 
  +97: 97 
  +98: 98 
  +99: 99 
  +100: 100 
  +101: 101 
  +102: 102 
  +103: 103 
  +104: 104 
  +105: 105 
  +106: 106 
  +107: 107 
  +108: 108 
  +109: 109 
  +110: 110 
  +111: 111 
  +112: 112 
  +113: 113 
  +114: 114 
  +115: 115 
  +116: 116 
  +117: 117 
  +118: 118 
  +119: 119 
  +120: 120 
  +121: 121 
  +122: 122 
  +123: 123 
  +124: 124 
  +125: 125 
  +126: 126 
  +127: 127 
  +128: 128 
  +129: 129 
  +130: 130 
  +131: 131 
  +132: 132 
  +133: 133 
  +134: 134 
  +135: 135 
  +136: 136 
  +137: 137 
  +138: 138 
  +139: 139 
  +140: 140 
  +141: 141 
  +142: 142 
  +143: 143 
  +144: 144 
  +145: 145 
  +146: 146 
  +147: 147 
  +148: 148 
  +149: 149 
  +150: 150 
  +151: 151 
  +152: 152 
  +153: 153 
  +154: 154 
  +155: 155 
  +156: 156 
  +157: 157 
  +158: 158 
  +159: 159 
  +160: 160 
  +161: 161 
  +162: 162 
  +163: 163 
  +164: 164 
  +165: 165 
  +166: 166 
  +167: 167 
  +168: 168 
  +169: 169 
  +170: 170 
  +171: 171 
  +172: 172 
  +173: 173 
  +174: 174 
  +175: 175 
  +176: 176 
  +177: 177 
  +178: 178 
  +179: 179 
  +180: 180 
  +181: 181 
  +182: 182 
  +183: 183 
  +184: 184 
  +185: 185 
  +186: 186 
  +187: 187 
  +188: 188 
  +189: 189 
  +190: 190 
  +191: 191 
  +192: 192 
  +193: 193 
  +194: 194 
  +195: 195 
  +196: 196 
  +197: 197 
  +198: 198 
  +199: 199 
  +200: 200 
  +201: 201 
  +202: 202 
  +203: 203 
  +204: 204 
  +205: 205 
  +206: 206 
  +207: 207 
  +208: 208 
  +209: 209 
  +210: 210 
  +211: 211 
  +212: 212 
  +213: 213 
  +214: 214 
  +215: 215 
  +216: 216 
  +217: 217 
  +218: 218 
  +219: 219 
  +220: 220 
  +221: 221 
  +222: 222 
  +223: 223 
  +224: 224 
  +225: 225 
  +226: 226 
  +227: 227 
  +228: 228 
  +229: 229 
  +230: 230 
  +231: 231 
  +232: 232 
  +233: 233 
  +234: 234 
  +235: 235 
  +236: 236 
  +237: 237 
  +238: 238 
  +239: 239 
  +240: 240 
  +241: 241 
  +242: 242 
  +243: 243 
  +244: 244 
  +245: 245 
  +246: 246 
  +247: 247 
  +248: 248 
  +249: 249 
  +250: 250 
  +251: 251 
  +252: 252 
  +253: 253 
  +254: 254 
  +255: 255 
  +256: 256 
  +257: 257 
  +258: 258 
  +259: 259 
  +260: 260 
  +261: 261 
  +262: 262 
  +263: 263 
  +264: 264 
  +265: 265 
  +266: 266 
  +267: 267 
  +268: 268 
  +269: 269 
  +270: ABC
  +271: ABC
  +
  +/This one's here because Perl does this differently and PCRE can't at present/
  +Capturing subpattern count = 0
  +No options
  +First char = 'T'
  +Need char = 't'
  +
  +/(main(O)?)+/
  +Capturing subpattern count = 2
  +No options
  +First char = 'm'
  +Need char = 'n'
  +    mainmain
  + 0: mainmain
  + 1: main
  +    mainOmain
  + 0: mainOmain
  + 1: main
  + 2: O
  +    
   / End of testinput2 /
   Capturing subpattern count = 0
   No options
  Index: ossp-pkg/pcre/pcre_test.d/testoutput3
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 testoutput3
  --- ossp-pkg/pcre/pcre_test.d/testoutput3	29 Aug 2000 19:24:19 -0000	1.7
  +++ ossp-pkg/pcre/pcre_test.d/testoutput3	7 Jan 2002 15:21:08 -0000	1.8
  @@ -1,4 +1,4 @@
  -PCRE version 3.4 22-Aug-2000
  +PCRE version 3.8 18-Dec-2001
   
   /(?<!bar)foo/
       foo
  Index: ossp-pkg/pcre/pcre_test.d/testoutput4
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 testoutput4
  --- ossp-pkg/pcre/pcre_test.d/testoutput4	29 Aug 2000 19:24:19 -0000	1.7
  +++ ossp-pkg/pcre/pcre_test.d/testoutput4	7 Jan 2002 15:21:08 -0000	1.8
  @@ -1,4 +1,4 @@
  -PCRE version 3.4 22-Aug-2000
  +PCRE version 3.8 18-Dec-2001
   
   /^[\w]+/
       *** Failers
  Index: ossp-pkg/pcre/pcre_test.d/testoutput5
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 testoutput5
  --- ossp-pkg/pcre/pcre_test.d/testoutput5	29 Aug 2000 19:24:19 -0000	1.2
  +++ ossp-pkg/pcre/pcre_test.d/testoutput5	7 Jan 2002 15:21:08 -0000	1.3
  @@ -1,4 +1,4 @@
  -PCRE version 3.4 22-Aug-2000
  +PCRE version 3.8 18-Dec-2001
   
   /-- Because of problems with Perl 5.6 in handling UTF-8 vs non UTF-8 --/
   /-- strings automatically, do not use the \x{} construct except with --/
  Index: ossp-pkg/pcre/pcre_test.d/testoutput6
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 testoutput6
  --- ossp-pkg/pcre/pcre_test.d/testoutput6	29 Aug 2000 19:24:19 -0000	1.2
  +++ ossp-pkg/pcre/pcre_test.d/testoutput6	7 Jan 2002 15:21:08 -0000	1.3
  @@ -1,82 +1,82 @@
  -PCRE version 3.4 22-Aug-2000
  +PCRE version 3.8 18-Dec-2001
   
   /\x{100}/8DM
   Memory allocation (code space): 11
   ------------------------------------------------------------------
     0   7 Bra 0
  -  3   2 \xc0\x88
  +  3   2 \xc4\x80
     7   7 Ket
    10     End
   ------------------------------------------------------------------
   Capturing subpattern count = 0
   Options: utf8
  -First char = 192
  -Need char = 136
  +First char = 196
  +Need char = 128
   
   /\x{1000}/8DM
   Memory allocation (code space): 12
   ------------------------------------------------------------------
     0   8 Bra 0
  -  3   3 \xe0\x80\x84
  +  3   3 \xe1\x80\x80
     8   8 Ket
    11     End
   ------------------------------------------------------------------
   Capturing subpattern count = 0
   Options: utf8
  -First char = 224
  -Need char = 132
  +First char = 225
  +Need char = 128
   
   /\x{10000}/8DM
   Memory allocation (code space): 13
   ------------------------------------------------------------------
     0   9 Bra 0
  -  3   4 \xf0\x80\x80\x82
  +  3   4 \xf0\x90\x80\x80
     9   9 Ket
    12     End
   ------------------------------------------------------------------
   Capturing subpattern count = 0
   Options: utf8
   First char = 240
  -Need char = 130
  +Need char = 128
   
   /\x{100000}/8DM
   Memory allocation (code space): 13
   ------------------------------------------------------------------
     0   9 Bra 0
  -  3   4 \xf0\x80\x80\xa0
  +  3   4 \xf4\x80\x80\x80
     9   9 Ket
    12     End
   ------------------------------------------------------------------
   Capturing subpattern count = 0
   Options: utf8
  -First char = 240
  -Need char = 160
  +First char = 244
  +Need char = 128
   
   /\x{1000000}/8DM
   Memory allocation (code space): 14
   ------------------------------------------------------------------
     0  10 Bra 0
  -  3   5 \xf8\x80\x80\x80\x90
  +  3   5 \xf9\x80\x80\x80\x80
    10  10 Ket
    13     End
   ------------------------------------------------------------------
   Capturing subpattern count = 0
   Options: utf8
  -First char = 248
  -Need char = 144
  +First char = 249
  +Need char = 128
   
   /\x{4000000}/8DM
   Memory allocation (code space): 15
   ------------------------------------------------------------------
     0  11 Bra 0
  -  3   6 \xfc\x80\x80\x80\x80\x82
  +  3   6 \xfc\x84\x80\x80\x80\x80
    11  11 Ket
    14     End
   ------------------------------------------------------------------
   Capturing subpattern count = 0
   Options: utf8
   First char = 252
  -Need char = 130
  +Need char = 128
   
   /\x{7fffFFFF}/8DM
   Memory allocation (code space): 15
  @@ -121,26 +121,160 @@
   /\x80/8D
   ------------------------------------------------------------------
     0   7 Bra 0
  -  3   2 \xc0\x84
  +  3   2 \xc2\x80
     7   7 Ket
    10     End
   ------------------------------------------------------------------
   Capturing subpattern count = 0
   Options: utf8
  -First char = 192
  -Need char = 132
  +First char = 194
  +Need char = 128
   
   /\xff/8D
   ------------------------------------------------------------------
     0   7 Bra 0
  -  3   2 \xdf\x87
  +  3   2 \xc3\xbf
  +  7   7 Ket
  + 10     End
  +------------------------------------------------------------------
  +Capturing subpattern count = 0
  +Options: utf8
  +First char = 195
  +Need char = 191
  +
  +/\x{0041}\x{2262}\x{0391}\x{002e}/D8
  +------------------------------------------------------------------
  +  0  12 Bra 0
  +  3   7 A\xe2\x89\xa2\xce\x91.
  + 12  12 Ket
  + 15     End
  +------------------------------------------------------------------
  +Capturing subpattern count = 0
  +Options: utf8
  +First char = 'A'
  +Need char = '.'
  +    \x{0041}\x{2262}\x{0391}\x{002e}
  + 0: A\x{2262}\x{391}.
  +    
  +/\x{D55c}\x{ad6d}\x{C5B4}/D8 
  +------------------------------------------------------------------
  +  0  14 Bra 0
  +  3   9 \xed\x95\x9c\xea\xb5\xad\xec\x96\xb4
  + 14  14 Ket
  + 17     End
  +------------------------------------------------------------------
  +Capturing subpattern count = 0
  +Options: utf8
  +First char = 237
  +Need char = 180
  +    \x{D55c}\x{ad6d}\x{C5B4} 
  + 0: \x{d55c}\x{ad6d}\x{c5b4}
  +
  +/\x{65e5}\x{672c}\x{8a9e}/D8
  +------------------------------------------------------------------
  +  0  14 Bra 0
  +  3   9 \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e
  + 14  14 Ket
  + 17     End
  +------------------------------------------------------------------
  +Capturing subpattern count = 0
  +Options: utf8
  +First char = 230
  +Need char = 158
  +    \x{65e5}\x{672c}\x{8a9e}
  + 0: \x{65e5}\x{672c}\x{8a9e}
  +
  +/\x{80}/D8
  +------------------------------------------------------------------
  +  0   7 Bra 0
  +  3   2 \xc2\x80
     7   7 Ket
    10     End
   ------------------------------------------------------------------
   Capturing subpattern count = 0
   Options: utf8
  -First char = 223
  -Need char = 135
  +First char = 194
  +Need char = 128
  +
  +/\x{084}/D8
  +------------------------------------------------------------------
  +  0   7 Bra 0
  +  3   2 \xc2\x84
  +  7   7 Ket
  + 10     End
  +------------------------------------------------------------------
  +Capturing subpattern count = 0
  +Options: utf8
  +First char = 194
  +Need char = 132
  +
  +/\x{104}/D8
  +------------------------------------------------------------------
  +  0   7 Bra 0
  +  3   2 \xc4\x84
  +  7   7 Ket
  + 10     End
  +------------------------------------------------------------------
  +Capturing subpattern count = 0
  +Options: utf8
  +First char = 196
  +Need char = 132
  +
  +/\x{861}/D8
  +------------------------------------------------------------------
  +  0   8 Bra 0
  +  3   3 \xe0\xa1\xa1
  +  8   8 Ket
  + 11     End
  +------------------------------------------------------------------
  +Capturing subpattern count = 0
  +Options: utf8
  +First char = 224
  +Need char = 161
  +
  +/\x{212ab}/D8
  +------------------------------------------------------------------
  +  0   9 Bra 0
  +  3   4 \xf0\xa1\x8a\xab
  +  9   9 Ket
  + 12     End
  +------------------------------------------------------------------
  +Capturing subpattern count = 0
  +Options: utf8
  +First char = 240
  +Need char = 171
  +
  +/.{3,5}X/D8
  +------------------------------------------------------------------
  +  0  14 Bra 0
  +  3     Any{3}
  +  7     Any{0,2}
  + 11   1 X
  + 14  14 Ket
  + 17     End
  +------------------------------------------------------------------
  +Capturing subpattern count = 0
  +Options: utf8
  +No first char
  +Need char = 'X'
  +    \x{212ab}\x{212ab}\x{212ab}\x{861}X
  + 0: \x{212ab}\x{212ab}\x{212ab}\x{861}X
  +
  +
  +/.{3,5}?/D8
  +------------------------------------------------------------------
  +  0  11 Bra 0
  +  3     Any{3}
  +  7     Any{0,2}?
  + 11  11 Ket
  + 14     End
  +------------------------------------------------------------------
  +Capturing subpattern count = 0
  +Options: utf8
  +No first char
  +No need char
  +    \x{212ab}\x{212ab}\x{212ab}\x{861}
  + 0: \x{212ab}\x{212ab}\x{212ab}
   
   /-- These tests are here rather than in testinput5 because Perl 5.6 has --/
   /-- some problems with UTF-8 support, in the area of \x{..} where the   --/
  Index: ossp-pkg/pcre/pcre_test.sh
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 pcre_test.sh
  --- ossp-pkg/pcre/pcre_test.sh	26 Aug 1999 08:15:20 -0000	1.1.1.1
  +++ ossp-pkg/pcre/pcre_test.sh	7 Jan 2002 15:21:06 -0000	1.2
  @@ -1,10 +1,12 @@
   #! /bin/sh
   
  -# Run PCRE tests
  +# This file is generated by configure from RunTest.in. Make any changes
  +# to that file.
   
  -trap 'rm -f testtry' 0 1 2 3 15
  +# Run PCRE tests
   
   cf=diff
  +testdata=pcre_test.d
   
   # Select which tests to run; if no selection, run all
   
  @@ -12,6 +14,8 @@
   do2=no
   do3=no
   do4=no
  +do5=no
  +do6=no
   
   while [ $# -gt 0 ] ; do
     case $1 in
  @@ -19,25 +23,41 @@
       2) do2=yes;;
       3) do3=yes;;
       4) do4=yes;;
  +    5) do5=yes;; 
  +    6) do6=yes;; 
       *) echo "Unknown test number $1"; exit 1;;
     esac
     shift
   done
   
  -if [ $do1 = no -a $do2 = no -a $do3 = no -a $do4 = no ] ; then
  +if [ "@UTF8@" = "" ] ; then
  +  if [ $do5 = yes ] ; then
  +    echo "Can't run test 5 because UFT8 support is not configured"
  +    exit 1
  +  fi   
  +  if [ $do6 = yes ] ; then
  +    echo "Can't run test 6 because UFT8 support is not configured"
  +    exit 1
  +  fi   
  +fi    
  +
  +if [ $do1 = no -a $do2 = no -a $do3 = no -a $do4 = no -a\
  +     $do5 = no -a $do6 = no ] ; then
     do1=yes
     do2=yes
     do3=yes
     do4=yes
  +  if [ "@UTF8@" != "" ] ; then do5=yes; fi
  +  if [ "@UTF8@" != "" ] ; then do6=yes; fi
   fi
   
   # Primary test, Perl-compatible
   
   if [ $do1 = yes ] ; then
     echo "Testing main functionality (Perl compatible)"
  -  ./pcre_test pcre_test.d/testinput1 testtry
  +  ./pcre_test $testdata/testinput1 testtry
     if [ $? = 0 ] ; then
  -    $cf testtry pcre_test.d/testoutput1
  +    $cf testtry $testdata/testoutput1
       if [ $? != 0 ] ; then exit 1; fi
     else exit 1
     fi
  @@ -47,9 +67,9 @@
   
   if [ $do2 = yes ] ; then
     echo "Testing API and error handling (not Perl compatible)"
  -  ./pcre_test -i pcre_test.d/testinput2 testtry
  +  ./pcre_test -i $testdata/testinput2 testtry
     if [ $? = 0 ] ; then
  -    $cf testtry pcre_test.d/testoutput2
  +    $cf testtry $testdata/testoutput2
       if [ $? != 0 ] ; then exit 1; fi
     else exit 1
     fi
  @@ -59,16 +79,18 @@
   
   if [ $do3 = yes ] ; then
     echo "Testing Perl 5.005 features (Perl 5.005 compatible)"
  -  ./pcre_test pcre_test.d/testinput3 testtry
  +  ./pcre_test $testdata/testinput3 testtry
     if [ $? = 0 ] ; then
  -    $cf testtry pcre_test.d/testoutput3
  +    $cf testtry $testdata/testoutput3
       if [ $? != 0 ] ; then exit 1; fi
     else exit 1
     fi
   fi
   
   if [ $do1 = yes -a $do2 = yes -a $do3 = yes ] ; then
  +  echo " " 
     echo "The three main tests all ran OK"
  +  echo " " 
   fi
   
   # Locale-specific tests, provided the "fr" locale is available
  @@ -77,17 +99,51 @@
     locale -a | grep '^fr$' >/dev/null
     if [ $? -eq 0 ] ; then
       echo "Testing locale-specific features (using 'fr' locale)"
  -    ./pcre_test pcre_test.d/testinput4 testtry
  +    ./pcre_test $testdata/testinput4 testtry
       if [ $? = 0 ] ; then
  -      $cf testtry pcre_test.d/testoutput4
  -      if [ $? != 0 ] ; then exit 1; fi
  +      $cf testtry $testdata/testoutput4
  +      if [ $? != 0 ] ; then 
  +        echo " "
  +        echo "Locale test did not run entirely successfully."
  +        echo "This usually means that there is a problem with the locale"
  +        echo "settings rather than a bug in PCRE."    
  +      else
         echo "Locale test ran OK" 
  +      fi 
  +      echo " " 
       else exit 1
       fi
     else
       echo "Cannot test locale-specific features - 'fr' locale not found,"
       echo "or the \"locale\" command is not available to check for it."
  +    echo " " 
  +  fi
  +fi
  +
  +# Additional tests for UTF8 support
  +
  +if [ $do5 = yes ] ; then
  +  echo "Testing experimental, incomplete UTF8 support (Perl compatible)"
  +  ./pcre_test $testdata/testinput5 testtry 
  +  if [ $? = 0 ] ; then
  +    $cf testtry $testdata/testoutput5
  +    if [ $? != 0 ] ; then exit 1; fi
  +  else exit 1
  +  fi
  +  echo "UTF8 test ran OK"
  +  echo " "
  +fi
  +
  +if [ $do6 = yes ] ; then
  +  echo "Testing API and internals for UTF8 support (not Perl compatible)"
  +  ./pcre_test $testdata/testinput6 testtry 
  +  if [ $? = 0 ] ; then
  +    $cf testtry $testdata/testoutput6
  +    if [ $? != 0 ] ; then exit 1; fi
  +  else exit 1
     fi
  +  echo "UTF8 internals test ran OK"
  +  echo " "
   fi
   
   # End
  Index: ossp-pkg/pcre/pcregrep.1
  ============================================================
  $ cvs update -p -r1.1 pcregrep.1
  .TH PCREGREP 1
  .SH NAME
  pcregrep - a grep with Perl-compatible regular expressions.
  .SH SYNOPSIS
  .B pcregrep [-Vcfhilnrsvx] pattern [file] ...
  
  
  .SH DESCRIPTION
  \fBpcregrep\fR searches files for character patterns, in the same way as other
  grep commands do, but it uses the PCRE regular expression library to support
  patterns that are compatible with the regular expressions of Perl 5. See
  \fBpcre(3)\fR for a full description of syntax and semantics.
  
  If no files are specified, \fBpcregrep\fR reads the standard input. By default,
  each line that matches the pattern is copied to the standard output, and if
  there is more than one file, the file name is printed before each line of
  output. However, there are options that can change how \fBpcregrep\fR behaves.
  
  Lines are limited to BUFSIZ characters. BUFSIZ is defined in \fB<stdio.h>\fR.
  The newline character is removed from the end of each line before it is matched
  against the pattern.
  
  
  .SH OPTIONS
  .TP 10
  \fB-V\fR
  Write the version number of the PCRE library being used to the standard error
  stream.
  .TP
  \fB-c\fR
  Do not print individual lines; instead just print a count of the number of
  lines that would otherwise have been printed. If several files are given, a
  count is printed for each of them.
  .TP
  
         versity of Cambridge for use on Unix systems connected  to
         the  Internet.  It  is freely available under the terms of
         the GNU General Public Licence. In style it is similar  to
         Smail  3,  but  its  facilities are more extensive, and in
         particular it has some defences  against  mail  bombs  and
         unsolicited junk mail, in the form of options for refusing
         messages from particular hosts, networks, or senders.
  
         Exim's command line takes the  standard  Unix  form  of  a
         sequence  of  options, each starting with a hyphen charac\fB-f\fIfilename\fR
  Read patterns from the file, one per line, and match all patterns against each
  line. There is a maximum of 100 patterns. Trailing white space is removed, and
  blank lines are ignored. An empty file contains no patterns and therefore
  matches nothing.
  .TP
  \fB-h\fR
  Suppress printing of filenames when searching multiple files.
  .TP
  \fB-i\fR
  Ignore upper/lower case distinctions during comparisons.
  .TP
  \fB-l\fR
  Instead of printing lines from the files, just print the names of the files
  containing lines that would have been printed. Each file name is printed
  once, on a separate line.
  .TP
  \fB-n\fR
  Precede each line by its line number in the file.
  .TP
  \fB-r\fR
  If any file is a directory, recursively scan the files it contains. Without
  \fB-r\fR a directory is scanned as a normal file.
  .TP
  \fB-s\fR
  Work silently, that is, display nothing except error messages.
  The exit status indicates whether any matches were found.
  .TP
  \fB-v\fR
  Invert the sense of the match, so that lines which do \fInot\fR match the
  pattern are now the ones that are found.
  .TP
  \fB-x\fR
  Force the pattern to be anchored (it must start matching at the beginning of
  the line) and in addition, require it to match the entire line. This is
  equivalent to having ^ and $ characters at the start and end of each
  alternative branch in the regular expression.
  
  
  .SH SEE ALSO
  \fBpcre(3)\fR, Perl 5 documentation
  
  
  .SH DIAGNOSTICS
  Exit status is 0 if any matches were found, 1 if no matches were found, and 2
  for syntax errors or inacessible files (even if matches were found).
  
  
  .SH AUTHOR
  Philip Hazel <ph10@cam.ac.uk>
  
  Last updated: 15 August 2001
  .br
  Copyright (c) 1997-2001 University of Cambridge.
  Index: ossp-pkg/pcre/pcregrep.c
  ============================================================
  $ cvs update -p -r1.1 pcregrep.c
  /*************************************************
  *               pcregrep program                 *
  *************************************************/
  
  /* This is a grep program that uses the PCRE regular expression library to do
  its pattern matching. On a Unix system it can recurse into directories. */
  
  #include <ctype.h>
  #include <stdio.h>
  #include <string.h>
  #include <stdlib.h>
  #include <errno.h>
  #include "config.h"
  #include "pcre.h"
  
  #define FALSE 0
  #define TRUE 1
  
  typedef int BOOL;
  
  #define VERSION "2.0 01-Aug-2001"
  #define MAX_PATTERN_COUNT 100
  
  
  /*************************************************
  *               Global variables                 *
  *************************************************/
  
  static char *pattern_filename = NULL;
  static int  pattern_count = 0;
  static pcre **pattern_list;
  static pcre_extra **hints_list;
  
  static BOOL count_only = FALSE;
  static BOOL filenames = TRUE;
  static BOOL filenames_only = FALSE;
  static BOOL invert = FALSE;
  static BOOL number = FALSE;
  static BOOL recurse = FALSE;
  static BOOL silent = FALSE;
  static BOOL whole_lines = FALSE;
  
  /* Structure for options and list of them */
  
  typedef struct option_item {
    int one_char;
    char *long_name;
    char *help_text;
  } option_item;
  
  static option_item optionlist[] = {
    { -1,  "help",         "display this help and exit" },
    { 'c', "count",        "print only a count of matching lines per FILE" },
    { 'h', "no-filename",  "suppress the prefixing filename on output" },
    { 'i', "ignore-case",  "ignore case distinctions" },
    { 'l', "files-with-matches", "print only FILE names containing matches" },
    { 'n', "line-number",  "print line number with output lines" },
    { 'r', "recursive",    "recursively scan sub-directories" },
    { 's', "no-messages",  "suppress error messages" },
    { 'V', "version",      "print version information and exit" },
    { 'v', "invert-match", "select non-matching lines" },
    { 'x', "line-regex",   "force PATTERN to match only whole lines" },
    { 'x', "line-regexp",  "force PATTERN to match only whole lines" },
    { 0,    NULL,           NULL }
  };
  
  
  /*************************************************
  *       Functions for directory scanning         *
  *************************************************/
  
  /* These functions are defined so that they can be made system specific,
  although at present the only ones are for Unix, and for "no directory recursion
  support". */
  
  
  /************* Directory scanning in Unix ***********/
  
  #if IS_UNIX
  #include <sys/types.h>
  #include <sys/stat.h>
  #include <dirent.h>
  
  typedef DIR directory_type;
  
  int
  isdirectory(char *filename)
  {
  struct stat statbuf;
  if (stat(filename, &statbuf) < 0)
    return 0;        /* In the expectation that opening as a file will fail */
  return ((statbuf.st_mode & S_IFMT) == S_IFDIR)? '/' : 0;
  }
  
  directory_type *
  opendirectory(char *filename)
  {
  return opendir(filename);
  }
  
  char *
  readdirectory(directory_type *dir)
  {
  for (;;)
    {
    struct dirent *dent = readdir(dir);
    if (dent == NULL) return NULL;
    if (strcmp(dent->d_name, ".") != 0 && strcmp(dent->d_name, "..") != 0)
      return dent->d_name;
    }
  return NULL;   /* Keep compiler happy; never executed */
  }
  
  void
  closedirectory(directory_type *dir)
  {
  closedir(dir);
  }
  
  
  #else
  
  
  /************* Directory scanning when we can't do it ***********/
  
  /* The type is void, and apart from isdirectory(), the functions do nothing. */
  
  typedef void directory_type;
  
  int isdirectory(char *filename) { return FALSE; }
  directory_type * opendirectory(char *filename) {}
  char *readdirectory(directory_type *dir) {}
  void closedirectory(directory_type *dir) {}
  
  #endif
  
  
  
  #if ! HAVE_STRERROR
  /*************************************************
  *     Provide strerror() for non-ANSI libraries  *
  *************************************************/
  
  /* Some old-fashioned systems still around (e.g. SunOS4) don't have strerror()
  in their libraries, but can provide the same facility by this simple
  alternative function. */
  
  extern int   sys_nerr;
  extern char *sys_errlist[];
  
  char *
  strerror(int n)
  {
  if (n < 0 || n >= sys_nerr) return "unknown error number";
  return sys_errlist[n];
  }
  #endif /* HAVE_STRERROR */
  
  
  
  /*************************************************
  *              Grep an individual file           *
  *************************************************/
  
  static int
  pcregrep(FILE *in, char *name)
  {
  int rc = 1;
  int linenumber = 0;
  int count = 0;
  int offsets[99];
  char buffer[BUFSIZ];
  
  while (fgets(buffer, sizeof(buffer), in) != NULL)
    {
    BOOL match = FALSE;
    int i;
    int length = (int)strlen(buffer);
    if (length > 0 && buffer[length-1] == '\n') buffer[--length] = 0;
    linenumber++;
  
    for (i = 0; !match && i < pattern_count; i++)
      {
      match = pcre_exec(pattern_list[i], hints_list[i], buffer, length, 0, 0,
        offsets, 99) >= 0;
      if (match && whole_lines && offsets[1] != length) match = FALSE;
      }
  
    if (match != invert)
      {
      if (count_only) count++;
  
      else if (filenames_only)
        {
        fprintf(stdout, "%s\n", (name == NULL)? "<stdin>" : name);
        return 0;
        }
  
      else if (silent) return 0;
  
      else
        {
        if (name != NULL) fprintf(stdout, "%s:", name);
        if (number) fprintf(stdout, "%d:", linenumber);
        fprintf(stdout, "%s\n", buffer);
        }
  
      rc = 0;
      }
    }
  
  if (count_only)
    {
    if (name != NULL) fprintf(stdout, "%s:", name);
    fprintf(stdout, "%d\n", count);
    }
  
  return rc;
  }
  
  
  
  
  /*************************************************
  *     Grep a file or recurse into a directory    *
  *************************************************/
  
  static int
  grep_or_recurse(char *filename, BOOL recurse, BOOL show_filenames,
    BOOL only_one_at_top)
  {
  int rc = 1;
  int sep;
  FILE *in;
  
  /* If the file is a directory and we are recursing, scan each file within it.
  The scanning code is localized so it can be made system-specific. */
  
  if ((sep = isdirectory(filename)) != 0 && recurse)
    {
    char buffer[1024];
    char *nextfile;
    directory_type *dir = opendirectory(filename);
  
    if (dir == NULL)
      {
      fprintf(stderr, "pcregrep: Failed to open directory %s: %s\n", filename,
        strerror(errno));
      return 2;
      }
  
    while ((nextfile = readdirectory(dir)) != NULL)
      {
      int frc;
      sprintf(buffer, "%.512s%c%.128s", filename, sep, nextfile);
      frc = grep_or_recurse(buffer, recurse, TRUE, FALSE);
      if (frc == 0 && rc == 1) rc = 0;
      }
  
    closedirectory(dir);
    return rc;
    }
  
  /* If the file is not a directory, or we are not recursing, scan it. If this is
  the first and only argument at top level, we don't show the file name.
  Otherwise, control is via the show_filenames variable. */
  
  in = fopen(filename, "r");
  if (in == NULL)
    {
    fprintf(stderr, "pcregrep: Failed to open %s: %s\n", filename, strerror(errno));
    return 2;
    }
  
  rc = pcregrep(in, (show_filenames && !only_one_at_top)? filename : NULL);
  fclose(in);
  return rc;
  }
  
  
  
  
  /*************************************************
  *                Usage function                  *
  *************************************************/
  
  static int
  usage(int rc)
  {
  fprintf(stderr, "Usage: pcregrep [-Vcfhilnrsvx] [long-options] pattern [file] ...\n");
  fprintf(stderr, "Type `pcregrep --help' for more information.\n");
  return rc;
  }
  
  
  
  
  /*************************************************
  *                Help function                   *
  *************************************************/
  
  static void
  help(void)
  {
  option_item *op;
  
  printf("Usage: pcregrep [OPTION]... PATTERN [FILE] ...\n");
  printf("Search for PATTERN in each FILE or standard input.\n");
  printf("Example: pcregrep -i 'hello.*world' menu.h main.c\n\n");
  
  printf("Options:\n");
  
  for (op = optionlist; op->one_char != 0; op++)
    {
    int n;
    char s[4];
    if (op->one_char > 0) sprintf(s, "-%c,", op->one_char); else strcpy(s, "   ");
    printf("  %s --%s%n", s, op->long_name, &n);
    n = 30 - n;
    if (n < 1) n = 1;
    printf("%.*s%s\n", n, "                    ", op->help_text);
    }
  
  printf("\n  -f<filename>  or  --file=<filename>\n");
  printf("    Read patterns from <filename> instead of using a command line option.\n");
  printf("    Trailing white space is removed; blanks lines are ignored.\n");
  printf("    There is a maximum of %d patterns.\n", MAX_PATTERN_COUNT);
  
  printf("\nWith no FILE, read standard input. If fewer than two FILEs given, assume -h.\n");
  printf("Exit status is 0 if any matches, 1 if no matches, and 2 if trouble.\n");
  }
  
  
  
  
  /*************************************************
  *                Handle an option                *
  *************************************************/
  
  static int
  handle_option(int letter, int options)
  {
  switch(letter)
    {
    case -1:  help(); exit(0);
    case 'c': count_only = TRUE; break;
    case 'h': filenames = FALSE; break;
    case 'i': options |= PCRE_CASELESS; break;
    case 'l': filenames_only = TRUE;
    case 'n': number = TRUE; break;
    case 'r': recurse = TRUE; break;
    case 's': silent = TRUE; break;
    case 'v': invert = TRUE; break;
    case 'x': whole_lines = TRUE; options |= PCRE_ANCHORED; break;
  
    case 'V':
    fprintf(stderr, "pcregrep version %s using ", VERSION);
    fprintf(stderr, "PCRE version %s\n", pcre_version());
    exit(0);
    break;
  
    default:
    fprintf(stderr, "pcregrep: Unknown option -%c\n", letter);
    exit(usage(2));
    }
  
  return options;
  }
  
  
  
  
  /*************************************************
  *                Main program                    *
  *************************************************/
  
  int
  main(int argc, char **argv)
  {
  int i, j;
  int rc = 1;
  int options = 0;
  int errptr;
  const char *error;
  BOOL only_one_at_top;
  
  /* Process the options */
  
  for (i = 1; i < argc; i++)
    {
    if (argv[i][0] != '-') break;
  
    /* Long name options */
  
    if (argv[i][1] == '-')
      {
      option_item *op;
  
      if (strncmp(argv[i]+2, "file=", 5) == 0)
        {
        pattern_filename = argv[i] + 7;
        continue;
        }
  
      for (op = optionlist; op->one_char != 0; op++)
        {
        if (strcmp(argv[i]+2, op->long_name) == 0)
          {
          options = handle_option(op->one_char, options);
          break;
          }
        }
      if (op->one_char == 0)
        {
        fprintf(stderr, "pcregrep: Unknown option %s\n", argv[i]);
        exit(usage(2));
        }
      }
  
    /* One-char options */
  
    else
      {
      char *s = argv[i] + 1;
      while (*s != 0)
        {
        if (*s == 'f')
          {
          pattern_filename = s + 1;
          if (pattern_filename[0] == 0)
            {
            if (i >= argc - 1)
              {
              fprintf(stderr, "pcregrep: File name missing after -f\n");
              exit(usage(2));
              }
            pattern_filename = argv[++i];
            }
          break;
          }
        else options = handle_option(*s++, options);
        }
      }
    }
  
  pattern_list = malloc(MAX_PATTERN_COUNT * sizeof(pcre *));
  hints_list = malloc(MAX_PATTERN_COUNT * sizeof(pcre_extra *));
  
  if (pattern_list == NULL || hints_list == NULL)
    {
    fprintf(stderr, "pcregrep: malloc failed\n");
    return 2;
    }
  
  /* Compile the regular expression(s). */
  
  if (pattern_filename != NULL)
    {
    FILE *f = fopen(pattern_filename, "r");
    char buffer[BUFSIZ];
    if (f == NULL)
      {
      fprintf(stderr, "pcregrep: Failed to open %s: %s\n", pattern_filename,
        strerror(errno));
      return 2;
      }
    while (fgets(buffer, sizeof(buffer), f) != NULL)
      {
      char *s = buffer + (int)strlen(buffer);
      if (pattern_count >= MAX_PATTERN_COUNT)
        {
        fprintf(stderr, "pcregrep: Too many patterns in file (max %d)\n",
          MAX_PATTERN_COUNT);
        return 2;
        }
      while (s > buffer && isspace((unsigned char)(s[-1]))) s--;
      if (s == buffer) continue;
      *s = 0;
      pattern_list[pattern_count] = pcre_compile(buffer, options, &error,
        &errptr, NULL);
      if (pattern_list[pattern_count++] == NULL)
        {
        fprintf(stderr, "pcregrep: Error in regex number %d at offset %d: %s\n",
          pattern_count, errptr, error);
        return 2;
        }
      }
    fclose(f);
    }
  
  /* If no file name, a single regex must be given inline */
  
  else
    {
    if (i >= argc) return usage(0);
    pattern_list[0] = pcre_compile(argv[i++], options, &error, &errptr, NULL);
    if (pattern_list[0] == NULL)
      {
      fprintf(stderr, "pcregrep: Error in regex at offset %d: %s\n", errptr,
        error);
      return 2;
      }
    pattern_count++;
    }
  
  /* Study the regular expressions, as we will be running them may times */
  
  for (j = 0; j < pattern_count; j++)
    {
    hints_list[j] = pcre_study(pattern_list[j], 0, &error);
    if (error != NULL)
      {
      char s[16];
      if (pattern_count == 1) s[0] = 0; else sprintf(s, " number %d", j);
      fprintf(stderr, "pcregrep: Error while studying regex%s: %s\n", s, error);
      return 2;
      }
    }
  
  /* If there are no further arguments, do the business on stdin and exit */
  
  if (i >= argc) return pcregrep(stdin, NULL);
  
  /* Otherwise, work through the remaining arguments as files or directories.
  Pass in the fact that there is only one argument at top level - this suppresses
  the file name if the argument is not a directory. */
  
  only_one_at_top = (i == argc - 1);
  if (filenames_only) filenames = TRUE;
  
  for (; i < argc; i++)
    {
    int frc = grep_or_recurse(argv[i], recurse, filenames, only_one_at_top);
    if (frc == 0 && rc == 1) rc = 0;
    }
  
  return rc;
  }
  
  /* End */
  Index: ossp-pkg/pcre/pcreposix.3
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 pcreposix.3
  --- ossp-pkg/pcre/pcreposix.3	2 Aug 2000 09:46:06 -0000	1.2
  +++ ossp-pkg/pcre/pcreposix.3	7 Jan 2002 15:21:06 -0000	1.3
  @@ -36,11 +36,11 @@
   application which uses them. Because the POSIX functions call the native ones,
   it is also necessary to add \fR-lpcre\fR.
   
  -As I am pretty ignorant about POSIX, these functions must be considered as
  -experimental. I have implemented only those option bits that can be reasonably
  -mapped to PCRE native options. Other POSIX options are not even defined. It may
  -be that it is useful to define, but ignore, other options. Feedback from more
  -knowledgeable folk may cause this kind of detail to change.
  +I have implemented only those option bits that can be reasonably mapped to PCRE
  +native options. In addition, the options REG_EXTENDED and REG_NOSUB are defined
  +with the value zero. They have no effect, but since programs that are written
  +to the POSIX interface often use them, this makes it easier to slot in PCRE as
  +a replacement library. Other POSIX options are not even defined.
   
   When PCRE is called via these functions, it is only the API that is POSIX-like
   in style. The syntax and semantics of the regular expressions themselves are
  Index: ossp-pkg/pcre/pcreposix.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 pcreposix.c
  --- ossp-pkg/pcre/pcreposix.c	29 Aug 2000 19:24:17 -0000	1.4
  +++ ossp-pkg/pcre/pcreposix.c	7 Jan 2002 15:21:06 -0000	1.5
  @@ -12,7 +12,7 @@
   
   Written by: Philip Hazel <ph10@cam.ac.uk>
   
  -           Copyright (c) 1997-2000 University of Cambridge
  +           Copyright (c) 1997-2001 University of Cambridge
   
   -----------------------------------------------------------------------------
   Permission is granted to anyone to use this software for any purpose on any
  @@ -37,8 +37,8 @@
   
   #include "pcre_internal.h"
   #include "pcreposix.h"
  +#include "stdlib.h"
   
  -#include <stdlib.h>
   
   
   /* Corresponding tables of PCRE error messages and POSIX error codes. */
  @@ -62,13 +62,13 @@
     REG_BADRPT,  /* "operand of unlimited repeat could match the empty string" */
     REG_ASSERT,  /* "internal error: unexpected repeat" */
     REG_BADPAT,  /* "unrecognized character after (?" */
  -  REG_ESIZE,   /* "too many capturing parenthesized sub-patterns" */
  +  REG_ASSERT,  /* "unused error" */
     REG_EPAREN,  /* "missing )" */
     REG_ESUBREG, /* "back reference to non-existent subpattern" */
     REG_INVARG,  /* "erroffset passed as NULL" */
     REG_INVARG,  /* "unknown option bit(s) set" */
     REG_EPAREN,  /* "missing ) after comment" */
  -  REG_ESIZE,   /* "too many sets of parentheses" */
  +  REG_ESIZE,   /* "parentheses nested too deeply" */
     REG_ESIZE,   /* "regular expression too large" */
     REG_ESPACE,  /* "failed to get memory" */
     REG_EPAREN,  /* "unmatched brackets" */
  Index: ossp-pkg/pcre/pcreposix.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 pcreposix.h
  --- ossp-pkg/pcre/pcreposix.h	2 Feb 2000 17:18:46 -0000	1.2
  +++ ossp-pkg/pcre/pcreposix.h	7 Jan 2002 15:21:06 -0000	1.3
  @@ -2,7 +2,7 @@
   *       Perl-Compatible Regular Expressions      *
   *************************************************/
   
  -/* Copyright (c) 1997-2000 University of Cambridge */
  +/* Copyright (c) 1997-2001 University of Cambridge */
   
   #ifndef _PCREPOSIX_H
   #define _PCREPOSIX_H
    

From ossp-cvs-owner@ossp.org  Mon Jan  7 16:42:57 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E020D764D1; Mon,  7 Jan 2002 16:42:56 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 acconfig.h
Message-Id: <20020107154256.E020D764D1@mail.ossp.org>
Date: Mon,  7 Jan 2002 16:42:56 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   07-Jan-2002 16:42:56
  Branch: HEAD                             Handle: 2002010715425600

  Modified files:
    ossp-pkg/l2             acconfig.h

  Log:
    add missing stuff

  Summary:
    Revision    Changes     Path
    1.3         +3  -0      ossp-pkg/l2/acconfig.h
  ____________________________________________________________________________

  Index: ossp-pkg/l2/acconfig.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 acconfig.h
  --- ossp-pkg/l2/acconfig.h	5 Nov 2001 11:02:43 -0000	1.2
  +++ ossp-pkg/l2/acconfig.h	7 Jan 2002 15:42:56 -0000	1.3
  @@ -6,3 +6,6 @@
   #undef HAVE_SOCKLEN_T
   #undef HAVE_SSIZE_T
   
  +/* syslog stuff */
  +#undef HAVE_VSYSLOG_USVALIST
  +

From ossp-cvs-owner@ossp.org  Tue Jan  8 16:47:16 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7843A764E3; Tue,  8 Jan 2002 16:47:14 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc AUTHORS COPYING ChangeLog Makefile.am NEWS REA...
Message-Id: <20020108154714.7843A764E3@mail.ossp.org>
Date: Tue,  8 Jan 2002 16:47:14 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   08-Jan-2002 16:47:14
  Branch: HEAD                             Handle: 2002010815471100

  Added files:
    ossp-pkg/rc             AUTHORS COPYING ChangeLog Makefile.am NEWS README
                            aclocal.m4 autogen.sh config.guess config.h.in
                            config.sub configure.in ltmain.sh rc_p.h
                            rc_test.sh

  Log:
    Second birth of project OSSP rc.

  Summary:
    Revision    Changes     Path
    1.1         +8  -0      ossp-pkg/rc/AUTHORS
    1.1         +280 -0     ossp-pkg/rc/COPYING
    1.1         +17 -0      ossp-pkg/rc/ChangeLog
    1.1         +2  -0      ossp-pkg/rc/Makefile.am
    1.1         BLOB        ossp-pkg/rc/NEWS
    1.1         +43 -0      ossp-pkg/rc/README
    1.1         +4052 -0    ossp-pkg/rc/aclocal.m4
    1.1         BLOB        ossp-pkg/rc/autogen.sh
    1.1         +1314 -0    ossp-pkg/rc/config.guess
    1.1         BLOB        ossp-pkg/rc/config.h.in
    1.1         +1410 -0    ossp-pkg/rc/config.sub
    1.1         +54 -0      ossp-pkg/rc/configure.in
    1.1         +4984 -0    ossp-pkg/rc/ltmain.sh
    1.1         +39 -0      ossp-pkg/rc/rc_p.h
    1.1         +30 -0      ossp-pkg/rc/rc_test.sh
  ____________________________________________________________________________

  Index: ossp-pkg/rc/AUTHORS
  ============================================================
  $ cvs update -p -r1.1 AUTHORS
  AUTHORS
  =======
  
  This is a list of the authors who have written
  or edited major parts of the OSSP RC source code.
  
  Ralf S. Engelschall  <rse@engelschall.com>
  Michael Schloh       <michael.schloh@cw.com>
  Index: ossp-pkg/rc/COPYING
  ============================================================
  $ cvs update -p -r1.1 COPYING
                      GNU GENERAL PUBLIC LICENSE
                         Version 2, June 1991
  
   Copyright (C) 1989, 1991 Free Software Foundation, Inc.
                         59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   Everyone is permitted to copy and distribute verbatim copies
   of this license document, but changing it is not allowed.
  
                              Preamble
  
    The licenses for most software are designed to take away your
  freedom to share and change it.  By contrast, the GNU General Public
  License is intended to guarantee your freedom to share and change free
  software--to make sure the software is free for all its users.  This
  General Public License applies to most of the Free Software
  Foundation's software and to any other program whose authors commit to
  using it.  (Some other Free Software Foundation software is covered by
  the GNU Library General Public License instead.)  You can apply it to
  your programs, too.
  
    When we speak of free software, we are referring to freedom, not
  price.  Our General Public Licenses are designed to make sure that you
  have the freedom to distribute copies of free software (and charge for
  this service if you wish), that you receive source code or can get it
  if you want it, that you can change the software or use pieces of it
  in new free programs; and that you know you can do these things.
  
    To protect your rights, we need to make restrictions that forbid
  anyone to deny you these rights or to ask you to surrender the rights.
  These restrictions translate to certain responsibilities for you if you
  distribute copies of the software, or if you modify it.
  
    For example, if you distribute copies of such a program, whether
  gratis or for a fee, you must give the recipients all the rights that
  you have.  You must make sure that they, too, receive or can get the
  source code.  And you must show them these terms so they know their
  rights.
  
    We protect your rights with two steps: (1) copyright the software, and
  (2) offer you this license which gives you legal permission to copy,
  distribute and/or modify the software.
  
    Also, for each author's protection and ours, we want to make certain
  that everyone understands that there is no warranty for this free
  software.  If the software is modified by someone else and passed on, we
  want its recipients to know that what they have is not the original, so
  that any problems introduced by others will not reflect on the original
  authors' reputations.
  
    Finally, any free program is threatened constantly by software
  patents.  We wish to avoid the danger that redistributors of a free
  program will individually obtain patent licenses, in effect making the
  program proprietary.  To prevent this, we have made it clear that any
  patent must be licensed for everyone's free use or not licensed at all.
  
    The precise terms and conditions for copying, distribution and
  modification follow.
  
                      GNU GENERAL PUBLIC LICENSE
     TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
  
    0. This License applies to any program or other work which contains
  a notice placed by the copyright holder saying it may be distributed
  under the terms of this General Public License.  The "Program", below,
  refers to any such program or work, and a "work based on the Program"
  means either the Program or any derivative work under copyright law:
  that is to say, a work containing the Program or a portion of it,
  either verbatim or with modifications and/or translated into another
  language.  (Hereinafter, translation is included without limitation in
  the term "modification".)  Each licensee is addressed as "you".
  
  Activities other than copying, distribution and modification are not
  covered by this License; they are outside its scope.  The act of
  running the Program is not restricted, and the output from the Program
  is covered only if its contents constitute a work based on the
  Program (independent of having been made by running the Program).
  Whether that is true depends on what the Program does.
  
    1. You may copy and distribute verbatim copies of the Program's
  source code as you receive it, in any medium, provided that you
  conspicuously and appropriately publish on each copy an appropriate
  copyright notice and disclaimer of warranty; keep intact all the
  notices that refer to this License and to the absence of any warranty;
  and give any other recipients of the Program a copy of this License
  along with the Program.
  
  You may charge a fee for the physical act of transferring a copy, and
  you may at your option offer warranty protection in exchange for a fee.
  
    2. You may modify your copy or copies of the Program or any portion
  of it, thus forming a work based on the Program, and copy and
  distribute such modifications or work under the terms of Section 1
  above, provided that you also meet all of these conditions:
  
      a) You must cause the modified files to carry prominent notices
      stating that you changed the files and the date of any change.
  
      b) You must cause any work that you distribute or publish, that in
      whole or in part contains or is derived from the Program or any
      part thereof, to be licensed as a whole at no charge to all third
      parties under the terms of this License.
  
      c) If the modified program normally reads commands interactively
      when run, you must cause it, when started running for such
      interactive use in the most ordinary way, to print or display an
      announcement including an appropriate copyright notice and a
      notice that there is no warranty (or else, saying that you provide
      a warranty) and that users may redistribute the program under
      these conditions, and telling the user how to view a copy of this
      License.  (Exception: if the Program itself is interactive but
      does not normally print such an announcement, your work based on
      the Program is not required to print an announcement.)
  
  These requirements apply to the modified work as a whole.  If
  identifiable sections of that work are not derived from the Program,
  and can be reasonably considered independent and separate works in
  themselves, then this License, and its terms, do not apply to those
  sections when you distribute them as separate works.  But when you
  distribute the same sections as part of a whole which is a work based
  on the Program, the distribution of the whole must be on the terms of
  this License, whose permissions for other licensees extend to the
  entire whole, and thus to each and every part regardless of who wrote it.
  
  Thus, it is not the intent of this section to claim rights or contest
  your rights to work written entirely by you; rather, the intent is to
  exercise the right to control the distribution of derivative or
  collective works based on the Program.
  
  In addition, mere aggregation of another work not based on the Program
  with the Program (or with a work based on the Program) on a volume of
  a storage or distribution medium does not bring the other work under
  the scope of this License.
  
    3. You may copy and distribute the Program (or a work based on it,
  under Section 2) in object code or executable form under the terms of
  Sections 1 and 2 above provided that you also do one of the following:
  
      a) Accompany it with the complete corresponding machine-readable
      source code, which must be distributed under the terms of Sections
      1 and 2 above on a medium customarily used for software interchange; or,
  
      b) Accompany it with a written offer, valid for at least three
      years, to give any third party, for a charge no more than your
      cost of physically performing source distribution, a complete
      machine-readable copy of the corresponding source code, to be
      distributed under the terms of Sections 1 and 2 above on a medium
      customarily used for software interchange; or,
  
      c) Accompany it with the information you received as to the offer
      to distribute corresponding source code.  (This alternative is
      allowed only for noncommercial distribution and only if you
      received the program in object code or executable form with such
      an offer, in accord with Subsection b above.)
  
  The source code for a work means the preferred form of the work for
  making modifications to it.  For an executable work, complete source
  code means all the source code for all modules it contains, plus any
  associated interface definition files, plus the scripts used to
  control compilation and installation of the executable.  However, as a
  special exception, the source code distributed need not include
  anything that is normally distributed (in either source or binary
  form) with the major components (compiler, kernel, and so on) of the
  operating system on which the executable runs, unless that component
  itself accompanies the executable.
  
  If distribution of executable or object code is made by offering
  access to copy from a designated place, then offering equivalent
  access to copy the source code from the same place counts as
  distribution of the source code, even though third parties are not
  compelled to copy the source along with the object code.
  
    4. You may not copy, modify, sublicense, or distribute the Program
  except as expressly provided under this License.  Any attempt
  otherwise to copy, modify, sublicense or distribute the Program is
  void, and will automatically terminate your rights under this License.
  However, parties who have received copies, or rights, from you under
  this License will not have their licenses terminated so long as such
  parties remain in full compliance.
  
    5. You are not required to accept this License, since you have not
  signed it.  However, nothing else grants you permission to modify or
  distribute the Program or its derivative works.  These actions are
  prohibited by law if you do not accept this License.  Therefore, by
  modifying or distributing the Program (or any work based on the
  Program), you indicate your acceptance of this License to do so, and
  all its terms and conditions for copying, distributing or modifying
  the Program or works based on it.
  
    6. Each time you redistribute the Program (or any work based on the
  Program), the recipient automatically receives a license from the
  original licensor to copy, distribute or modify the Program subject to
  these terms and conditions.  You may not impose any further
  restrictions on the recipients' exercise of the rights granted herein.
  You are not responsible for enforcing compliance by third parties to
  this License.
  
    7. If, as a consequence of a court judgment or allegation of patent
  infringement or for any other reason (not limited to patent issues),
  conditions are imposed on you (whether by court order, agreement or
  otherwise) that contradict the conditions of this License, they do not
  excuse you from the conditions of this License.  If you cannot
  distribute so as to satisfy simultaneously your obligations under this
  License and any other pertinent obligations, then as a consequence you
  may not distribute the Program at all.  For example, if a patent
  license would not permit royalty-free redistribution of the Program by
  all those who receive copies directly or indirectly through you, then
  the only way you could satisfy both it and this License would be to
  refrain entirely from distribution of the Program.
  
  If any portion of this section is held invalid or unenforceable under
  any particular circumstance, the balance of the section is intended to
  apply and the section as a whole is intended to apply in other
  circumstances.
  
  It is not the purpose of this section to induce you to infringe any
  patents or other property right claims or to contest validity of any
  such claims; this section has the sole purpose of protecting the
  integrity of the free software distribution system, which is
  implemented by public license practices.  Many people have made
  generous contributions to the wide range of software distributed
  through that system in reliance on consistent application of that
  system; it is up to the author/donor to decide if he or she is willing
  to distribute software through any other system and a licensee cannot
  impose that choice.
  
  This section is intended to make thoroughly clear what is believed to
  be a consequence of the rest of this License.
  
    8. If the distribution and/or use of the Program is restricted in
  certain countries either by patents or by copyrighted interfaces, the
  original copyright holder who places the Program under this License
  may add an explicit geographical distribution limitation excluding
  those countries, so that distribution is permitted only in or among
  countries not thus excluded.  In such case, this License incorporates
  the limitation as if written in the body of this License.
  
    9. The Free Software Foundation may publish revised and/or new versions
  of the General Public License from time to time.  Such new versions will
  be similar in spirit to the present version, but may differ in detail to
  address new problems or concerns.
  
  Each version is given a distinguishing version number.  If the Program
  specifies a version number of this License which applies to it and "any
  later version", you have the option of following the terms and conditions
  either of that version or of any later version published by the Free
  Software Foundation.  If the Program does not specify a version number of
  this License, you may choose any version ever published by the Free Software
  Foundation.
  
    10. If you wish to incorporate parts of the Program into other free
  programs whose distribution conditions are different, write to the author
  to ask for permission.  For software which is copyrighted by the Free
  Software Foundation, write to the Free Software Foundation; we sometimes
  make exceptions for this.  Our decision will be guided by the two goals
  of preserving the free status of all derivatives of our free software and
  of promoting the sharing and reuse of software generally.
  
                              NO WARRANTY
  
    11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
  FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
  OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
  PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
  OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
  TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
  PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
  REPAIR OR CORRECTION.
  
    12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
  WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
  REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
  INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
  OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
  TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
  YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
  PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
  POSSIBILITY OF SUCH DAMAGES.
  
                       END OF TERMS AND CONDITIONS
  Index: ossp-pkg/rc/ChangeLog
  ============================================================
  $ cvs update -p -r1.1 ChangeLog
     _ __ ___ 
    | '__/ __|
    | | | (__ 
    |_|  \___|
  
    rc - Runcommand processor
    ____________________________________________________________________
  
    ChangeLog
  
    Changes between *GENESIS* and 0.9.0 (07-Jan-2002 to 00-Duc-2002):
  
      *) Added Autoconf and other build configuration.
         [Michael Schloh von Bennewitz]
  
      *) Created the rc revision hierarchy.
         [Ralf S. Engelschall]
  Index: ossp-pkg/rc/Makefile.am
  ============================================================
  $ cvs update -p -r1.1 Makefile.am
  bin_PROGRAMS= rc
  rc_SOURCES= rc_p.h rc.h rc.c
  Index: ossp-pkg/rc/NEWS
  ============================================================
  $ cvs update -p -r1.1 NEWS | uuencode NEWS
  Index: ossp-pkg/rc/README
  ============================================================
  $ cvs update -p -r1.1 README
     _ __ ___ 
    | '__/ __|
    | | | (__ 
    |_|  \___|
  
    rc - Runcommand processor
    Version 0.9.0 (00-Duc-2002)
  
    ABSTRACT
  
    The rc Runcommand processor is a Duc.
  
    COPYRIGHT AND LICENSE
  
    Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  
    Permission to use, copy, modify, and distribute this software for
    any purpose with or without fee is hereby granted, provided that
    the above copyright notice and this permission notice appear in all
    copies.
  
    THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
    WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
    IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
    CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
    USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    SUCH DAMAGE.
  
    HOME AND DOCUMENTATION
  
    Documentation and releases can be found at
  
    o http://www.ossp.org/pkg/rc/
    o  ftp://ftp.ossp.org/Duc/
  
                                         Michael Schloh von Bennewitz
                                         michael.schloh@cw.com
  Index: ossp-pkg/rc/aclocal.m4
  ============================================================
  $ cvs update -p -r1.1 aclocal.m4
  # aclocal.m4 generated automatically by aclocal 1.5
  
  # Copyright 1996, 1997, 1998, 1999, 2000, 2001
  # Free Software Foundation, Inc.
  # This file is free software; the Free Software Foundation
  # gives unlimited permission to copy and/or distribute it,
  # with or without modifications, as long as this notice is preserved.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY, to the extent permitted by law; without
  # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  # PARTICULAR PURPOSE.
  
  # Do all the work for Automake.  This macro actually does too much --
  # some checks are only needed if your package does certain things.
  # But this isn't really a big deal.
  
  # serial 5
  
  # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
  # written in clear, in which case automake, when reading aclocal.m4,
  # will think it sees a *use*, and therefore will trigger all it's
  # C support machinery.  Also note that it means that autoscan, seeing
  # CC etc. in the Makefile, will ask for an AC_PROG_CC use...
  
  
  # We require 2.13 because we rely on SHELL being computed by configure.
  AC_PREREQ([2.13])
  
  # AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED)
  # -----------------------------------------------------------
  # If MACRO-NAME is provided do IF-PROVIDED, else IF-NOT-PROVIDED.
  # The purpose of this macro is to provide the user with a means to
  # check macros which are provided without letting her know how the
  # information is coded.
  # If this macro is not defined by Autoconf, define it here.
  ifdef([AC_PROVIDE_IFELSE],
        [],
        [define([AC_PROVIDE_IFELSE],
                [ifdef([AC_PROVIDE_$1],
                       [$2], [$3])])])
  
  
  # AM_INIT_AUTOMAKE(PACKAGE,VERSION, [NO-DEFINE])
  # ----------------------------------------------
  AC_DEFUN([AM_INIT_AUTOMAKE],
  [AC_REQUIRE([AC_PROG_INSTALL])dnl
  # test to see if srcdir already configured
  if test "`CDPATH=:; cd $srcdir && pwd`" != "`pwd`" &&
     test -f $srcdir/config.status; then
    AC_MSG_ERROR([source directory already configured; run \"make distclean\" there first])
  fi
  
  # Define the identity of the package.
  PACKAGE=$1
  AC_SUBST(PACKAGE)dnl
  VERSION=$2
  AC_SUBST(VERSION)dnl
  ifelse([$3],,
  [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
  AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])
  
  # Autoconf 2.50 wants to disallow AM_ names.  We explicitly allow
  # the ones we care about.
  ifdef([m4_pattern_allow],
        [m4_pattern_allow([^AM_[A-Z]+FLAGS])])dnl
  
  # Autoconf 2.50 always computes EXEEXT.  However we need to be
  # compatible with 2.13, for now.  So we always define EXEEXT, but we
  # don't compute it.
  AC_SUBST(EXEEXT)
  # Similar for OBJEXT -- only we only use OBJEXT if the user actually
  # requests that it be used.  This is a bit dumb.
  : ${OBJEXT=o}
  AC_SUBST(OBJEXT)
  
  # Some tools Automake needs.
  AC_REQUIRE([AM_SANITY_CHECK])dnl
  AC_REQUIRE([AC_ARG_PROGRAM])dnl
  AM_MISSING_PROG(ACLOCAL, aclocal)
  AM_MISSING_PROG(AUTOCONF, autoconf)
  AM_MISSING_PROG(AUTOMAKE, automake)
  AM_MISSING_PROG(AUTOHEADER, autoheader)
  AM_MISSING_PROG(MAKEINFO, makeinfo)
  AM_MISSING_PROG(AMTAR, tar)
  AM_PROG_INSTALL_SH
  AM_PROG_INSTALL_STRIP
  # We need awk for the "check" target.  The system "awk" is bad on
  # some platforms.
  AC_REQUIRE([AC_PROG_AWK])dnl
  AC_REQUIRE([AC_PROG_MAKE_SET])dnl
  AC_REQUIRE([AM_DEP_TRACK])dnl
  AC_REQUIRE([AM_SET_DEPDIR])dnl
  AC_PROVIDE_IFELSE([AC_PROG_][CC],
                    [_AM_DEPENDENCIES(CC)],
                    [define([AC_PROG_][CC],
                            defn([AC_PROG_][CC])[_AM_DEPENDENCIES(CC)])])dnl
  AC_PROVIDE_IFELSE([AC_PROG_][CXX],
                    [_AM_DEPENDENCIES(CXX)],
                    [define([AC_PROG_][CXX],
                            defn([AC_PROG_][CXX])[_AM_DEPENDENCIES(CXX)])])dnl
  ])
  
  #
  # Check to make sure that the build environment is sane.
  #
  
  # serial 3
  
  # AM_SANITY_CHECK
  # ---------------
  AC_DEFUN([AM_SANITY_CHECK],
  [AC_MSG_CHECKING([whether build environment is sane])
  # Just in case
  sleep 1
  echo timestamp > conftest.file
  # Do `set' in a subshell so we don't clobber the current shell's
  # arguments.  Must try -L first in case configure is actually a
  # symlink; some systems play weird games with the mod time of symlinks
  # (eg FreeBSD returns the mod time of the symlink's containing
  # directory).
  if (
     set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
     if test "$[*]" = "X"; then
        # -L didn't work.
        set X `ls -t $srcdir/configure conftest.file`
     fi
     rm -f conftest.file
     if test "$[*]" != "X $srcdir/configure conftest.file" \
        && test "$[*]" != "X conftest.file $srcdir/configure"; then
  
        # If neither matched, then we have a broken ls.  This can happen
        # if, for instance, CONFIG_SHELL is bash and it inherits a
        # broken ls alias from the environment.  This has actually
        # happened.  Such a system could not be considered "sane".
        AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
  alias in your environment])
     fi
  
     test "$[2]" = conftest.file
     )
  then
     # Ok.
     :
  else
     AC_MSG_ERROR([newly created file is older than distributed files!
  Check your system clock])
  fi
  AC_MSG_RESULT(yes)])
  
  
  # serial 2
  
  # AM_MISSING_PROG(NAME, PROGRAM)
  # ------------------------------
  AC_DEFUN([AM_MISSING_PROG],
  [AC_REQUIRE([AM_MISSING_HAS_RUN])
  $1=${$1-"${am_missing_run}$2"}
  AC_SUBST($1)])
  
  
  # AM_MISSING_HAS_RUN
  # ------------------
  # Define MISSING if not defined so far and test if it supports --run.
  # If it does, set am_missing_run to use it, otherwise, to nothing.
  AC_DEFUN([AM_MISSING_HAS_RUN],
  [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
  test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
  # Use eval to expand $SHELL
  if eval "$MISSING --run true"; then
    am_missing_run="$MISSING --run "
  else
    am_missing_run=
    am_backtick='`'
    AC_MSG_WARN([${am_backtick}missing' script is too old or missing])
  fi
  ])
  
  # AM_AUX_DIR_EXPAND
  
  # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
  # $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
  # `$srcdir', `$srcdir/..', or `$srcdir/../..'.
  #
  # Of course, Automake must honor this variable whenever it calls a
  # tool from the auxiliary directory.  The problem is that $srcdir (and
  # therefore $ac_aux_dir as well) can be either absolute or relative,
  # depending on how configure is run.  This is pretty annoying, since
  # it makes $ac_aux_dir quite unusable in subdirectories: in the top
  # source directory, any form will work fine, but in subdirectories a
  # relative path needs to be adjusted first.
  #
  # $ac_aux_dir/missing
  #    fails when called from a subdirectory if $ac_aux_dir is relative
  # $top_srcdir/$ac_aux_dir/missing
  #    fails if $ac_aux_dir is absolute,
  #    fails when called from a subdirectory in a VPATH build with
  #          a relative $ac_aux_dir
  #
  # The reason of the latter failure is that $top_srcdir and $ac_aux_dir
  # are both prefixed by $srcdir.  In an in-source build this is usually
  # harmless because $srcdir is `.', but things will broke when you
  # start a VPATH build or use an absolute $srcdir.
  #
  # So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
  # iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
  #   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
  # and then we would define $MISSING as
  #   MISSING="\${SHELL} $am_aux_dir/missing"
  # This will work as long as MISSING is not called from configure, because
  # unfortunately $(top_srcdir) has no meaning in configure.
  # However there are other variables, like CC, which are often used in
  # configure, and could therefore not use this "fixed" $ac_aux_dir.
  #
  # Another solution, used here, is to always expand $ac_aux_dir to an
  # absolute PATH.  The drawback is that using absolute paths prevent a
  # configured tree to be moved without reconfiguration.
  
  AC_DEFUN([AM_AUX_DIR_EXPAND], [
  # expand $ac_aux_dir to an absolute path
  am_aux_dir=`CDPATH=:; cd $ac_aux_dir && pwd`
  ])
  
  # AM_PROG_INSTALL_SH
  # ------------------
  # Define $install_sh.
  AC_DEFUN([AM_PROG_INSTALL_SH],
  [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
  install_sh=${install_sh-"$am_aux_dir/install-sh"}
  AC_SUBST(install_sh)])
  
  # One issue with vendor `install' (even GNU) is that you can't
  # specify the program used to strip binaries.  This is especially
  # annoying in cross-compiling environments, where the build's strip
  # is unlikely to handle the host's binaries.
  # Fortunately install-sh will honor a STRIPPROG variable, so we
  # always use install-sh in `make install-strip', and initialize
  # STRIPPROG with the value of the STRIP variable (set by the user).
  AC_DEFUN([AM_PROG_INSTALL_STRIP],
  [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
  INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
  AC_SUBST([INSTALL_STRIP_PROGRAM])])
  
  # serial 4						-*- Autoconf -*-
  
  
  
  # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
  # written in clear, in which case automake, when reading aclocal.m4,
  # will think it sees a *use*, and therefore will trigger all it's
  # C support machinery.  Also note that it means that autoscan, seeing
  # CC etc. in the Makefile, will ask for an AC_PROG_CC use...
  
  
  
  # _AM_DEPENDENCIES(NAME)
  # ---------------------
  # See how the compiler implements dependency checking.
  # NAME is "CC", "CXX" or "OBJC".
  # We try a few techniques and use that to set a single cache variable.
  #
  # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
  # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
  # dependency, and given that the user is not expected to run this macro,
  # just rely on AC_PROG_CC.
  AC_DEFUN([_AM_DEPENDENCIES],
  [AC_REQUIRE([AM_SET_DEPDIR])dnl
  AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
  AC_REQUIRE([AM_MAKE_INCLUDE])dnl
  AC_REQUIRE([AM_DEP_TRACK])dnl
  
  ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
         [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
         [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc']
         [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
                     [depcc="$$1"   am_compiler_list=])
  
  AC_CACHE_CHECK([dependency style of $depcc],
                 [am_cv_$1_dependencies_compiler_type],
  [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
    # We make a subdir and do the tests there.  Otherwise we can end up
    # making bogus files that we don't know about and never remove.  For
    # instance it was reported that on HP-UX the gcc test will end up
    # making a dummy file named `D' -- because `-MD' means `put the output
    # in D'.
    mkdir conftest.dir
    # Copy depcomp to subdir because otherwise we won't find it if we're
    # using a relative directory.
    cp "$am_depcomp" conftest.dir
    cd conftest.dir
  
    am_cv_$1_dependencies_compiler_type=none
    if test "$am_compiler_list" = ""; then
       am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
    fi
    for depmode in $am_compiler_list; do
      # We need to recreate these files for each test, as the compiler may
      # overwrite some of them when testing with obscure command lines.
      # This happens at least with the AIX C compiler.
      echo '#include "conftest.h"' > conftest.c
      echo 'int i;' > conftest.h
      echo "${am__include} ${am__quote}conftest.Po${am__quote}" > confmf
  
      case $depmode in
      nosideeffect)
        # after this tag, mechanisms are not by side-effect, so they'll
        # only be used when explicitly requested
        if test "x$enable_dependency_tracking" = xyes; then
  	continue
        else
  	break
        fi
        ;;
      none) break ;;
      esac
      # We check with `-c' and `-o' for the sake of the "dashmstdout"
      # mode.  It turns out that the SunPro C++ compiler does not properly
      # handle `-M -o', and we need to detect this.
      if depmode=$depmode \
         source=conftest.c object=conftest.o \
         depfile=conftest.Po tmpdepfile=conftest.TPo \
         $SHELL ./depcomp $depcc -c conftest.c -o conftest.o >/dev/null 2>&1 &&
         grep conftest.h conftest.Po > /dev/null 2>&1 &&
         ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
        am_cv_$1_dependencies_compiler_type=$depmode
        break
      fi
    done
  
    cd ..
    rm -rf conftest.dir
  else
    am_cv_$1_dependencies_compiler_type=none
  fi
  ])
  $1DEPMODE="depmode=$am_cv_$1_dependencies_compiler_type"
  AC_SUBST([$1DEPMODE])
  ])
  
  
  # AM_SET_DEPDIR
  # -------------
  # Choose a directory name for dependency files.
  # This macro is AC_REQUIREd in _AM_DEPENDENCIES
  AC_DEFUN([AM_SET_DEPDIR],
  [rm -f .deps 2>/dev/null
  mkdir .deps 2>/dev/null
  if test -d .deps; then
    DEPDIR=.deps
  else
    # MS-DOS does not allow filenames that begin with a dot.
    DEPDIR=_deps
  fi
  rmdir .deps 2>/dev/null
  AC_SUBST(DEPDIR)
  ])
  
  
  # AM_DEP_TRACK
  # ------------
  AC_DEFUN([AM_DEP_TRACK],
  [AC_ARG_ENABLE(dependency-tracking,
  [  --disable-dependency-tracking Speeds up one-time builds
    --enable-dependency-tracking  Do not reject slow dependency extractors])
  if test "x$enable_dependency_tracking" != xno; then
    am_depcomp="$ac_aux_dir/depcomp"
    AMDEPBACKSLASH='\'
  fi
  AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
  pushdef([subst], defn([AC_SUBST]))
  subst(AMDEPBACKSLASH)
  popdef([subst])
  ])
  
  # Generate code to set up dependency tracking.
  # This macro should only be invoked once -- use via AC_REQUIRE.
  # Usage:
  # AM_OUTPUT_DEPENDENCY_COMMANDS
  
  #
  # This code is only required when automatic dependency tracking
  # is enabled.  FIXME.  This creates each `.P' file that we will
  # need in order to bootstrap the dependency handling code.
  AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],[
  AC_OUTPUT_COMMANDS([
  test x"$AMDEP_TRUE" != x"" ||
  for mf in $CONFIG_FILES; do
    case "$mf" in
    Makefile) dirpart=.;;
    */Makefile) dirpart=`echo "$mf" | sed -e 's|/[^/]*$||'`;;
    *) continue;;
    esac
    grep '^DEP_FILES *= *[^ #]' < "$mf" > /dev/null || continue
    # Extract the definition of DEP_FILES from the Makefile without
    # running `make'.
    DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"`
    test -z "$DEPDIR" && continue
    # When using ansi2knr, U may be empty or an underscore; expand it
    U=`sed -n -e '/^U = / s///p' < "$mf"`
    test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
    # We invoke sed twice because it is the simplest approach to
    # changing $(DEPDIR) to its actual value in the expansion.
    for file in `sed -n -e '
      /^DEP_FILES = .*\\\\$/ {
        s/^DEP_FILES = //
        :loop
  	s/\\\\$//
  	p
  	n
  	/\\\\$/ b loop
        p
      }
      /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \
         sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
      # Make sure the directory exists.
      test -f "$dirpart/$file" && continue
      fdir=`echo "$file" | sed -e 's|/[^/]*$||'`
      $ac_aux_dir/mkinstalldirs "$dirpart/$fdir" > /dev/null 2>&1
      # echo "creating $dirpart/$file"
      echo '# dummy' > "$dirpart/$file"
    done
  done
  ], [AMDEP_TRUE="$AMDEP_TRUE"
  ac_aux_dir="$ac_aux_dir"])])
  
  # AM_MAKE_INCLUDE()
  # -----------------
  # Check to see how make treats includes.
  AC_DEFUN([AM_MAKE_INCLUDE],
  [am_make=${MAKE-make}
  cat > confinc << 'END'
  doit:
  	@echo done
  END
  # If we don't find an include directive, just comment out the code.
  AC_MSG_CHECKING([for style of include used by $am_make])
  am__include='#'
  am__quote=
  _am_result=none
  # First try GNU make style include.
  echo "include confinc" > confmf
  # We grep out `Entering directory' and `Leaving directory'
  # messages which can occur if `w' ends up in MAKEFLAGS.
  # In particular we don't look at `^make:' because GNU make might
  # be invoked under some other name (usually "gmake"), in which
  # case it prints its new name instead of `make'.
  if test "`$am_make -s -f confmf 2> /dev/null | fgrep -v 'ing directory'`" = "done"; then
     am__include=include
     am__quote=
     _am_result=GNU
  fi
  # Now try BSD make style include.
  if test "$am__include" = "#"; then
     echo '.include "confinc"' > confmf
     if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
        am__include=.include
        am__quote='"'
        _am_result=BSD
     fi
  fi
  AC_SUBST(am__include)
  AC_SUBST(am__quote)
  AC_MSG_RESULT($_am_result)
  rm -f confinc confmf
  ])
  
  # serial 3
  
  # AM_CONDITIONAL(NAME, SHELL-CONDITION)
  # -------------------------------------
  # Define a conditional.
  #
  # FIXME: Once using 2.50, use this:
  # m4_match([$1], [^TRUE\|FALSE$], [AC_FATAL([$0: invalid condition: $1])])dnl
  AC_DEFUN([AM_CONDITIONAL],
  [ifelse([$1], [TRUE],
          [errprint(__file__:__line__: [$0: invalid condition: $1
  ])dnl
  m4exit(1)])dnl
  ifelse([$1], [FALSE],
         [errprint(__file__:__line__: [$0: invalid condition: $1
  ])dnl
  m4exit(1)])dnl
  AC_SUBST([$1_TRUE])
  AC_SUBST([$1_FALSE])
  if $2; then
    $1_TRUE=
    $1_FALSE='#'
  else
    $1_TRUE='#'
    $1_FALSE=
  fi])
  
  # Like AC_CONFIG_HEADER, but automatically create stamp file.
  
  # serial 3
  
  # When config.status generates a header, we must update the stamp-h file.
  # This file resides in the same directory as the config header
  # that is generated.  We must strip everything past the first ":",
  # and everything past the last "/".
  
  AC_PREREQ([2.12])
  
  AC_DEFUN([AM_CONFIG_HEADER],
  [ifdef([AC_FOREACH],dnl
  	 [dnl init our file count if it isn't already
  	 m4_ifndef([_AM_Config_Header_Index], m4_define([_AM_Config_Header_Index], [0]))
  	 dnl prepare to store our destination file list for use in config.status
  	 AC_FOREACH([_AM_File], [$1],
  		    [m4_pushdef([_AM_Dest], m4_patsubst(_AM_File, [:.*]))
  		    m4_define([_AM_Config_Header_Index], m4_incr(_AM_Config_Header_Index))
  		    dnl and add it to the list of files AC keeps track of, along
  		    dnl with our hook
  		    AC_CONFIG_HEADERS(_AM_File,
  dnl COMMANDS, [, INIT-CMDS]
  [# update the timestamp
  echo timestamp >"AS_ESCAPE(_AM_DIRNAME(]_AM_Dest[))/stamp-h]_AM_Config_Header_Index["
  ][$2]m4_ifval([$3], [, [$3]]))dnl AC_CONFIG_HEADERS
  		    m4_popdef([_AM_Dest])])],dnl
  [AC_CONFIG_HEADER([$1])
    AC_OUTPUT_COMMANDS(
     ifelse(patsubst([$1], [[^ ]], []),
  	  [],
  	  [test -z "$CONFIG_HEADERS" || echo timestamp >dnl
  	   patsubst([$1], [^\([^:]*/\)?.*], [\1])stamp-h]),dnl
  [am_indx=1
  for am_file in $1; do
    case " \$CONFIG_HEADERS " in
    *" \$am_file "*)
      am_dir=\`echo \$am_file |sed 's%:.*%%;s%[^/]*\$%%'\`
      if test -n "\$am_dir"; then
        am_tmpdir=\`echo \$am_dir |sed 's%^\(/*\).*\$%\1%'\`
        for am_subdir in \`echo \$am_dir |sed 's%/% %'\`; do
          am_tmpdir=\$am_tmpdir\$am_subdir/
          if test ! -d \$am_tmpdir; then
            mkdir \$am_tmpdir
          fi
        done
      fi
      echo timestamp > "\$am_dir"stamp-h\$am_indx
      ;;
    esac
    am_indx=\`expr \$am_indx + 1\`
  done])
  ])]) # AM_CONFIG_HEADER
  
  # _AM_DIRNAME(PATH)
  # -----------------
  # Like AS_DIRNAME, only do it during macro expansion
  AC_DEFUN([_AM_DIRNAME],
         [m4_if(m4_regexp([$1], [^.*[^/]//*[^/][^/]*/*$]), -1,
  	      m4_if(m4_regexp([$1], [^//\([^/]\|$\)]), -1,
  		    m4_if(m4_regexp([$1], [^/.*]), -1,
  			  [.],
  			  m4_patsubst([$1], [^\(/\).*], [\1])),
  		    m4_patsubst([$1], [^\(//\)\([^/].*\|$\)], [\1])),
  	      m4_patsubst([$1], [^\(.*[^/]\)//*[^/][^/]*/*$], [\1]))[]dnl
  ]) # _AM_DIRNAME
  
  # libtool.m4 - Configure libtool for the host system. -*-Shell-script-*-
  
  # serial 46 AC_PROG_LIBTOOL
  
  AC_DEFUN([AC_PROG_LIBTOOL],
  [AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
  
  # This can be used to rebuild libtool when needed
  LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
  
  # Always use our own libtool.
  LIBTOOL='$(SHELL) $(top_builddir)/libtool'
  AC_SUBST(LIBTOOL)dnl
  
  # Prevent multiple expansion
  define([AC_PROG_LIBTOOL], [])
  ])
  
  AC_DEFUN([AC_LIBTOOL_SETUP],
  [AC_PREREQ(2.13)dnl
  AC_REQUIRE([AC_ENABLE_SHARED])dnl
  AC_REQUIRE([AC_ENABLE_STATIC])dnl
  AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl
  AC_REQUIRE([AC_CANONICAL_HOST])dnl
  AC_REQUIRE([AC_CANONICAL_BUILD])dnl
  AC_REQUIRE([AC_PROG_CC])dnl
  AC_REQUIRE([AC_PROG_LD])dnl
  AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl
  AC_REQUIRE([AC_PROG_NM])dnl
  AC_REQUIRE([AC_PROG_LN_S])dnl
  AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl
  AC_REQUIRE([AC_OBJEXT])dnl
  AC_REQUIRE([AC_EXEEXT])dnl
  dnl
  
  _LT_AC_PROG_ECHO_BACKSLASH
  # Only perform the check for file, if the check method requires it
  case $deplibs_check_method in
  file_magic*)
    if test "$file_magic_cmd" = '$MAGIC_CMD'; then
      AC_PATH_MAGIC
    fi
    ;;
  esac
  
  AC_CHECK_TOOL(RANLIB, ranlib, :)
  AC_CHECK_TOOL(STRIP, strip, :)
  
  ifdef([AC_PROVIDE_AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no)
  ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL],
  enable_win32_dll=yes, enable_win32_dll=no)
  
  AC_ARG_ENABLE(libtool-lock,
    [  --disable-libtool-lock  avoid locking (might break parallel builds)])
  test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
  
  # Some flags need to be propagated to the compiler or linker for good
  # libtool support.
  case $host in
  *-*-irix6*)
    # Find out which ABI we are using.
    echo '[#]line __oline__ "configure"' > conftest.$ac_ext
    if AC_TRY_EVAL(ac_compile); then
      case `/usr/bin/file conftest.$ac_objext` in
      *32-bit*)
        LD="${LD-ld} -32"
        ;;
      *N32*)
        LD="${LD-ld} -n32"
        ;;
      *64-bit*)
        LD="${LD-ld} -64"
        ;;
      esac
    fi
    rm -rf conftest*
    ;;
  
  *-*-sco3.2v5*)
    # On SCO OpenServer 5, we need -belf to get full-featured binaries.
    SAVE_CFLAGS="$CFLAGS"
    CFLAGS="$CFLAGS -belf"
    AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
      [AC_LANG_SAVE
       AC_LANG_C
       AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
       AC_LANG_RESTORE])
    if test x"$lt_cv_cc_needs_belf" != x"yes"; then
      # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
      CFLAGS="$SAVE_CFLAGS"
    fi
    ;;
  
  ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL],
  [*-*-cygwin* | *-*-mingw* | *-*-pw32*)
    AC_CHECK_TOOL(DLLTOOL, dlltool, false)
    AC_CHECK_TOOL(AS, as, false)
    AC_CHECK_TOOL(OBJDUMP, objdump, false)
  
    # recent cygwin and mingw systems supply a stub DllMain which the user
    # can override, but on older systems we have to supply one
    AC_CACHE_CHECK([if libtool should supply DllMain function], lt_cv_need_dllmain,
      [AC_TRY_LINK([],
        [extern int __attribute__((__stdcall__)) DllMain(void*, int, void*);
        DllMain (0, 0, 0);],
        [lt_cv_need_dllmain=no],[lt_cv_need_dllmain=yes])])
  
    case $host/$CC in
    *-*-cygwin*/gcc*-mno-cygwin*|*-*-mingw*)
      # old mingw systems require "-dll" to link a DLL, while more recent ones
      # require "-mdll"
      SAVE_CFLAGS="$CFLAGS"
      CFLAGS="$CFLAGS -mdll"
      AC_CACHE_CHECK([how to link DLLs], lt_cv_cc_dll_switch,
        [AC_TRY_LINK([], [], [lt_cv_cc_dll_switch=-mdll],[lt_cv_cc_dll_switch=-dll])])
      CFLAGS="$SAVE_CFLAGS" ;;
    *-*-cygwin* | *-*-pw32*)
      # cygwin systems need to pass --dll to the linker, and not link
      # crt.o which will require a WinMain@16 definition.
      lt_cv_cc_dll_switch="-Wl,--dll -nostartfiles" ;;
    esac
    ;;
    ])
  esac
  
  _LT_AC_LTCONFIG_HACK
  
  ])
  
  # AC_LIBTOOL_HEADER_ASSERT
  # ------------------------
  AC_DEFUN([AC_LIBTOOL_HEADER_ASSERT],
  [AC_CACHE_CHECK([whether $CC supports assert without backlinking],
      [lt_cv_func_assert_works],
      [case $host in
      *-*-solaris*)
        if test "$GCC" = yes && test "$with_gnu_ld" != yes; then
          case `$CC --version 2>/dev/null` in
          [[12]].*) lt_cv_func_assert_works=no ;;
          *)        lt_cv_func_assert_works=yes ;;
          esac
        fi
        ;;
      esac])
  
  if test "x$lt_cv_func_assert_works" = xyes; then
    AC_CHECK_HEADERS(assert.h)
  fi
  ])# AC_LIBTOOL_HEADER_ASSERT
  
  # _LT_AC_CHECK_DLFCN
  # --------------------
  AC_DEFUN([_LT_AC_CHECK_DLFCN],
  [AC_CHECK_HEADERS(dlfcn.h)
  ])# _LT_AC_CHECK_DLFCN
  
  # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
  # ---------------------------------
  AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE],
  [AC_REQUIRE([AC_CANONICAL_HOST])
  AC_REQUIRE([AC_PROG_NM])
  AC_REQUIRE([AC_OBJEXT])
  # Check for command to grab the raw symbol name followed by C symbol from nm.
  AC_MSG_CHECKING([command to parse $NM output])
  AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [dnl
  
  # These are sane defaults that work on at least a few old systems.
  # [They come from Ultrix.  What could be older than Ultrix?!! ;)]
  
  # Character class describing NM global symbol codes.
  symcode='[[BCDEGRST]]'
  
  # Regexp to match symbols that can be accessed directly from C.
  sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
  
  # Transform the above into a raw symbol and a C symbol.
  symxfrm='\1 \2\3 \3'
  
  # Transform an extracted symbol line into a proper C declaration
  lt_cv_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'"
  
  # Transform an extracted symbol line into symbol name and symbol address
  lt_cv_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
  
  # Define system-specific variables.
  case $host_os in
  aix*)
    symcode='[[BCDT]]'
    ;;
  cygwin* | mingw* | pw32*)
    symcode='[[ABCDGISTW]]'
    ;;
  hpux*) # Its linker distinguishes data from code symbols
    lt_cv_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
    lt_cv_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
    ;;
  irix*)
    symcode='[[BCDEGRST]]'
    ;;
  solaris* | sysv5*)
    symcode='[[BDT]]'
    ;;
  sysv4)
    symcode='[[DFNSTU]]'
    ;;
  esac
  
  # Handle CRLF in mingw tool chain
  opt_cr=
  case $host_os in
  mingw*)
    opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
    ;;
  esac
  
  # If we're using GNU nm, then use its standard symbol codes.
  if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then
    symcode='[[ABCDGISTW]]'
  fi
  
  # Try without a prefix undercore, then with it.
  for ac_symprfx in "" "_"; do
  
    # Write the raw and C identifiers.
  lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ 	]]\($symcode$symcode*\)[[ 	]][[ 	]]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'"
  
    # Check to see that the pipe works correctly.
    pipe_works=no
    rm -f conftest*
    cat > conftest.$ac_ext <<EOF
  #ifdef __cplusplus
  extern "C" {
  #endif
  char nm_test_var;
  void nm_test_func(){}
  #ifdef __cplusplus
  }
  #endif
  int main(){nm_test_var='a';nm_test_func();return(0);}
  EOF
  
    if AC_TRY_EVAL(ac_compile); then
      # Now try to grab the symbols.
      nlist=conftest.nm
      if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
        # Try sorting and uniquifying the output.
        if sort "$nlist" | uniq > "$nlist"T; then
  	mv -f "$nlist"T "$nlist"
        else
  	rm -f "$nlist"T
        fi
  
        # Make sure that we snagged all the symbols we need.
        if egrep ' nm_test_var$' "$nlist" >/dev/null; then
  	if egrep ' nm_test_func$' "$nlist" >/dev/null; then
  	  cat <<EOF > conftest.$ac_ext
  #ifdef __cplusplus
  extern "C" {
  #endif
  
  EOF
  	  # Now generate the symbol file.
  	  eval "$lt_cv_global_symbol_to_cdecl"' < "$nlist" >> conftest.$ac_ext'
  
  	  cat <<EOF >> conftest.$ac_ext
  #if defined (__STDC__) && __STDC__
  # define lt_ptr void *
  #else
  # define lt_ptr char *
  # define const
  #endif
  
  /* The mapping between symbol names and symbols. */
  const struct {
    const char *name;
    lt_ptr address;
  }
  lt_preloaded_symbols[[]] =
  {
  EOF
  	  sed "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (lt_ptr) \&\2},/" < "$nlist" >> conftest.$ac_ext
  	  cat <<\EOF >> conftest.$ac_ext
    {0, (lt_ptr) 0}
  };
  
  #ifdef __cplusplus
  }
  #endif
  EOF
  	  # Now try linking the two files.
  	  mv conftest.$ac_objext conftstm.$ac_objext
  	  save_LIBS="$LIBS"
  	  save_CFLAGS="$CFLAGS"
  	  LIBS="conftstm.$ac_objext"
  	  CFLAGS="$CFLAGS$no_builtin_flag"
  	  if AC_TRY_EVAL(ac_link) && test -s conftest; then
  	    pipe_works=yes
  	  fi
  	  LIBS="$save_LIBS"
  	  CFLAGS="$save_CFLAGS"
  	else
  	  echo "cannot find nm_test_func in $nlist" >&AC_FD_CC
  	fi
        else
  	echo "cannot find nm_test_var in $nlist" >&AC_FD_CC
        fi
      else
        echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AC_FD_CC
      fi
    else
      echo "$progname: failed program was:" >&AC_FD_CC
      cat conftest.$ac_ext >&5
    fi
    rm -f conftest* conftst*
  
    # Do not use the global_symbol_pipe unless it works.
    if test "$pipe_works" = yes; then
      break
    else
      lt_cv_sys_global_symbol_pipe=
    fi
  done
  ])
  global_symbol_pipe="$lt_cv_sys_global_symbol_pipe"
  if test -z "$lt_cv_sys_global_symbol_pipe"; then
    global_symbol_to_cdecl=
    global_symbol_to_c_name_address=
  else
    global_symbol_to_cdecl="$lt_cv_global_symbol_to_cdecl"
    global_symbol_to_c_name_address="$lt_cv_global_symbol_to_c_name_address"
  fi
  if test -z "$global_symbol_pipe$global_symbol_to_cdec$global_symbol_to_c_name_address";
  then
    AC_MSG_RESULT(failed)
  else
    AC_MSG_RESULT(ok)
  fi
  ]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
  
  # _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR
  # ---------------------------------
  AC_DEFUN([_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR],
  [# Find the correct PATH separator.  Usually this is `:', but
  # DJGPP uses `;' like DOS.
  if test "X${PATH_SEPARATOR+set}" != Xset; then
    UNAME=${UNAME-`uname 2>/dev/null`}
    case X$UNAME in
      *-DOS) lt_cv_sys_path_separator=';' ;;
      *)     lt_cv_sys_path_separator=':' ;;
    esac
    PATH_SEPARATOR=$lt_cv_sys_path_separator
  fi
  ])# _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR
  
  # _LT_AC_PROG_ECHO_BACKSLASH
  # --------------------------
  # Add some code to the start of the generated configure script which
  # will find an echo command which doesn't interpret backslashes.
  AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH],
  [ifdef([AC_DIVERSION_NOTICE], [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
  			      [AC_DIVERT_PUSH(NOTICE)])
  _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR
  
  # Check that we are running under the correct shell.
  SHELL=${CONFIG_SHELL-/bin/sh}
  
  case X$ECHO in
  X*--fallback-echo)
    # Remove one level of quotation (which was required for Make).
    ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
    ;;
  esac
  
  echo=${ECHO-echo}
  if test "X[$]1" = X--no-reexec; then
    # Discard the --no-reexec flag, and continue.
    shift
  elif test "X[$]1" = X--fallback-echo; then
    # Avoid inline document here, it may be left over
    :
  elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
    # Yippee, $echo works!
    :
  else
    # Restart under the correct shell.
    exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
  fi
  
  if test "X[$]1" = X--fallback-echo; then
    # used as fallback echo
    shift
    cat <<EOF
  $*
  EOF
    exit 0
  fi
  
  # The HP-UX ksh and POSIX shell print the target directory to stdout
  # if CDPATH is set.
  if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
  
  if test -z "$ECHO"; then
  if test "X${echo_test_string+set}" != Xset; then
  # find a string as large as possible, as long as the shell can cope with it
    for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
      if (echo_test_string="`eval $cmd`") 2>/dev/null &&
         echo_test_string="`eval $cmd`" &&
         (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
      then
        break
      fi
    done
  fi
  
  if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
     echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
     test "X$echo_testing_string" = "X$echo_test_string"; then
    :
  else
    # The Solaris, AIX, and Digital Unix default echo programs unquote
    # backslashes.  This makes it impossible to quote backslashes using
    #   echo "$something" | sed 's/\\/\\\\/g'
    #
    # So, first we look for a working echo in the user's PATH.
  
    IFS="${IFS= 	}"; save_ifs="$IFS"; IFS=$PATH_SEPARATOR
    for dir in $PATH /usr/ucb; do
      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
         test "X$echo_testing_string" = "X$echo_test_string"; then
        echo="$dir/echo"
        break
      fi
    done
    IFS="$save_ifs"
  
    if test "X$echo" = Xecho; then
      # We didn't find a better echo, so look for alternatives.
      if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
         echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
         test "X$echo_testing_string" = "X$echo_test_string"; then
        # This shell has a builtin print -r that does the trick.
        echo='print -r'
      elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
  	 test "X$CONFIG_SHELL" != X/bin/ksh; then
        # If we have ksh, try running configure again with it.
        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
        export ORIGINAL_CONFIG_SHELL
        CONFIG_SHELL=/bin/ksh
        export CONFIG_SHELL
        exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
      else
        # Try using printf.
        echo='printf %s\n'
        if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
  	 echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
  	 test "X$echo_testing_string" = "X$echo_test_string"; then
  	# Cool, printf works
  	:
        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
  	   test "X$echo_testing_string" = 'X\t' &&
  	   echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
  	   test "X$echo_testing_string" = "X$echo_test_string"; then
  	CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
  	export CONFIG_SHELL
  	SHELL="$CONFIG_SHELL"
  	export SHELL
  	echo="$CONFIG_SHELL [$]0 --fallback-echo"
        elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
  	   test "X$echo_testing_string" = 'X\t' &&
  	   echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
  	   test "X$echo_testing_string" = "X$echo_test_string"; then
  	echo="$CONFIG_SHELL [$]0 --fallback-echo"
        else
  	# maybe with a smaller string...
  	prev=:
  
  	for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
  	  if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
  	  then
  	    break
  	  fi
  	  prev="$cmd"
  	done
  
  	if test "$prev" != 'sed 50q "[$]0"'; then
  	  echo_test_string=`eval $prev`
  	  export echo_test_string
  	  exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
  	else
  	  # Oops.  We lost completely, so just stick with echo.
  	  echo=echo
  	fi
        fi
      fi
    fi
  fi
  fi
  
  # Copy echo and quote the copy suitably for passing to libtool from
  # the Makefile, instead of quoting the original, which is used later.
  ECHO=$echo
  if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
     ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
  fi
  
  AC_SUBST(ECHO)
  AC_DIVERT_POP
  ])# _LT_AC_PROG_ECHO_BACKSLASH
  
  # _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
  #                           ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
  # ------------------------------------------------------------------
  AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF],
  [if test "$cross_compiling" = yes; then :
    [$4]
  else
    AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<EOF
  [#line __oline__ "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
  #include <dlfcn.h>
  #endif
  
  #include <stdio.h>
  
  #ifdef RTLD_GLOBAL
  #  define LT_DLGLOBAL		RTLD_GLOBAL
  #else
  #  ifdef DL_GLOBAL
  #    define LT_DLGLOBAL		DL_GLOBAL
  #  else
  #    define LT_DLGLOBAL		0
  #  endif
  #endif
  
  /* We may have to define LT_DLLAZY_OR_NOW in the command line if we
     find out it does not work in some platform. */
  #ifndef LT_DLLAZY_OR_NOW
  #  ifdef RTLD_LAZY
  #    define LT_DLLAZY_OR_NOW		RTLD_LAZY
  #  else
  #    ifdef DL_LAZY
  #      define LT_DLLAZY_OR_NOW		DL_LAZY
  #    else
  #      ifdef RTLD_NOW
  #        define LT_DLLAZY_OR_NOW	RTLD_NOW
  #      else
  #        ifdef DL_NOW
  #          define LT_DLLAZY_OR_NOW	DL_NOW
  #        else
  #          define LT_DLLAZY_OR_NOW	0
  #        endif
  #      endif
  #    endif
  #  endif
  #endif
  
  #ifdef __cplusplus
  extern "C" void exit (int);
  #endif
  
  void fnord() { int i=42;}
  int main ()
  {
    void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
    int status = $lt_dlunknown;
  
    if (self)
      {
        if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
        else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
        /* dlclose (self); */
      }
  
      exit (status);
  }]
  EOF
    if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
      (./conftest; exit; ) 2>/dev/null
      lt_status=$?
      case x$lt_status in
        x$lt_dlno_uscore) $1 ;;
        x$lt_dlneed_uscore) $2 ;;
        x$lt_unknown|x*) $3 ;;
      esac
    else :
      # compilation failed
      $3
    fi
  fi
  rm -fr conftest*
  ])# _LT_AC_TRY_DLOPEN_SELF
  
  # AC_LIBTOOL_DLOPEN_SELF
  # -------------------
  AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF],
  [if test "x$enable_dlopen" != xyes; then
    enable_dlopen=unknown
    enable_dlopen_self=unknown
    enable_dlopen_self_static=unknown
  else
    lt_cv_dlopen=no
    lt_cv_dlopen_libs=
  
    case $host_os in
    beos*)
      lt_cv_dlopen="load_add_on"
      lt_cv_dlopen_libs=
      lt_cv_dlopen_self=yes
      ;;
  
    cygwin* | mingw* | pw32*)
      lt_cv_dlopen="LoadLibrary"
      lt_cv_dlopen_libs=
     ;;
  
    *)
      AC_CHECK_FUNC([shl_load],
            [lt_cv_dlopen="shl_load"],
        [AC_CHECK_LIB([dld], [shl_load],
              [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"],
  	[AC_CHECK_FUNC([dlopen],
  	      [lt_cv_dlopen="dlopen"],
  	  [AC_CHECK_LIB([dl], [dlopen],
  	        [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
  	    [AC_CHECK_LIB([svld], [dlopen],
  	          [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
  	      [AC_CHECK_LIB([dld], [dld_link],
  	            [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
  	      ])
  	    ])
  	  ])
  	])
        ])
      ;;
    esac
  
    if test "x$lt_cv_dlopen" != xno; then
      enable_dlopen=yes
    else
      enable_dlopen=no
    fi
  
    case $lt_cv_dlopen in
    dlopen)
      save_CPPFLAGS="$CPPFLAGS"
      AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
      test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
  
      save_LDFLAGS="$LDFLAGS"
      eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
  
      save_LIBS="$LIBS"
      LIBS="$lt_cv_dlopen_libs $LIBS"
  
      AC_CACHE_CHECK([whether a program can dlopen itself],
  	  lt_cv_dlopen_self, [dnl
  	  _LT_AC_TRY_DLOPEN_SELF(
  	    lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
  	    lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
      ])
  
      if test "x$lt_cv_dlopen_self" = xyes; then
        LDFLAGS="$LDFLAGS $link_static_flag"
        AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
      	  lt_cv_dlopen_self_static, [dnl
  	  _LT_AC_TRY_DLOPEN_SELF(
  	    lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
  	    lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
        ])
      fi
  
      CPPFLAGS="$save_CPPFLAGS"
      LDFLAGS="$save_LDFLAGS"
      LIBS="$save_LIBS"
      ;;
    esac
  
    case $lt_cv_dlopen_self in
    yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
    *) enable_dlopen_self=unknown ;;
    esac
  
    case $lt_cv_dlopen_self_static in
    yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
    *) enable_dlopen_self_static=unknown ;;
    esac
  fi
  ])# AC_LIBTOOL_DLOPEN_SELF
  
  AC_DEFUN([_LT_AC_LTCONFIG_HACK],
  [AC_REQUIRE([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])dnl
  # Sed substitution that helps us do robust quoting.  It backslashifies
  # metacharacters that are still active within double-quoted strings.
  Xsed='sed -e s/^X//'
  sed_quote_subst='s/\([[\\"\\`$\\\\]]\)/\\\1/g'
  
  # Same as above, but do not quote variable references.
  double_quote_subst='s/\([[\\"\\`\\\\]]\)/\\\1/g'
  
  # Sed substitution to delay expansion of an escaped shell variable in a
  # double_quote_subst'ed string.
  delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
  
  # Constants:
  rm="rm -f"
  
  # Global variables:
  default_ofile=libtool
  can_build_shared=yes
  
  # All known linkers require a `.a' archive for static linking (except M$VC,
  # which needs '.lib').
  libext=a
  ltmain="$ac_aux_dir/ltmain.sh"
  ofile="$default_ofile"
  with_gnu_ld="$lt_cv_prog_gnu_ld"
  need_locks="$enable_libtool_lock"
  
  old_CC="$CC"
  old_CFLAGS="$CFLAGS"
  
  # Set sane defaults for various variables
  test -z "$AR" && AR=ar
  test -z "$AR_FLAGS" && AR_FLAGS=cru
  test -z "$AS" && AS=as
  test -z "$CC" && CC=cc
  test -z "$DLLTOOL" && DLLTOOL=dlltool
  test -z "$LD" && LD=ld
  test -z "$LN_S" && LN_S="ln -s"
  test -z "$MAGIC_CMD" && MAGIC_CMD=file
  test -z "$NM" && NM=nm
  test -z "$OBJDUMP" && OBJDUMP=objdump
  test -z "$RANLIB" && RANLIB=:
  test -z "$STRIP" && STRIP=:
  test -z "$ac_objext" && ac_objext=o
  
  if test x"$host" != x"$build"; then
    ac_tool_prefix=${host_alias}-
  else
    ac_tool_prefix=
  fi
  
  # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
  case $host_os in
  linux-gnu*) ;;
  linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
  esac
  
  case $host_os in
  aix3*)
    # AIX sometimes has problems with the GCC collect2 program.  For some
    # reason, if we set the COLLECT_NAMES environment variable, the problems
    # vanish in a puff of smoke.
    if test "X${COLLECT_NAMES+set}" != Xset; then
      COLLECT_NAMES=
      export COLLECT_NAMES
    fi
    ;;
  esac
  
  # Determine commands to create old-style static archives.
  old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
  old_postinstall_cmds='chmod 644 $oldlib'
  old_postuninstall_cmds=
  
  if test -n "$RANLIB"; then
    case $host_os in
    openbsd*)
      old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds"
      ;;
    *)
      old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
      ;;
    esac
    old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
  fi
  
  # Allow CC to be a program name with arguments.
  set dummy $CC
  compiler="[$]2"
  
  AC_MSG_CHECKING([for objdir])
  rm -f .libs 2>/dev/null
  mkdir .libs 2>/dev/null
  if test -d .libs; then
    objdir=.libs
  else
    # MS-DOS does not allow filenames that begin with a dot.
    objdir=_libs
  fi
  rmdir .libs 2>/dev/null
  AC_MSG_RESULT($objdir)
  
  
  AC_ARG_WITH(pic,
  [  --with-pic              try to use only PIC/non-PIC objects [default=use both]],
  pic_mode="$withval", pic_mode=default)
  test -z "$pic_mode" && pic_mode=default
  
  # We assume here that the value for lt_cv_prog_cc_pic will not be cached
  # in isolation, and that seeing it set (from the cache) indicates that
  # the associated values are set (in the cache) correctly too.
  AC_MSG_CHECKING([for $compiler option to produce PIC])
  AC_CACHE_VAL(lt_cv_prog_cc_pic,
  [ lt_cv_prog_cc_pic=
    lt_cv_prog_cc_shlib=
    lt_cv_prog_cc_wl=
    lt_cv_prog_cc_static=
    lt_cv_prog_cc_no_builtin=
    lt_cv_prog_cc_can_build_shared=$can_build_shared
  
    if test "$GCC" = yes; then
      lt_cv_prog_cc_wl='-Wl,'
      lt_cv_prog_cc_static='-static'
  
      case $host_os in
      aix*)
        # Below there is a dirty hack to force normal static linking with -ldl
        # The problem is because libdl dynamically linked with both libc and
        # libC (AIX C++ library), which obviously doesn't included in libraries
        # list by gcc. This cause undefined symbols with -static flags.
        # This hack allows C programs to be linked with "-static -ldl", but
        # not sure about C++ programs.
        lt_cv_prog_cc_static="$lt_cv_prog_cc_static ${lt_cv_prog_cc_wl}-lC"
        ;;
      amigaos*)
        # FIXME: we need at least 68020 code to build shared libraries, but
        # adding the `-m68020' flag to GCC prevents building anything better,
        # like `-m68040'.
        lt_cv_prog_cc_pic='-m68020 -resident32 -malways-restore-a4'
        ;;
      beos* | irix5* | irix6* | osf3* | osf4* | osf5*)
        # PIC is the default for these OSes.
        ;;
      darwin* | rhapsody*)
        # PIC is the default on this platform
        # Common symbols not allowed in MH_DYLIB files
        lt_cv_prog_cc_pic='-fno-common'
        ;;
      cygwin* | mingw* | pw32* | os2*)
        # This hack is so that the source file can tell whether it is being
        # built for inclusion in a dll (and should export symbols for example).
        lt_cv_prog_cc_pic='-DDLL_EXPORT'
        ;;
      sysv4*MP*)
        if test -d /usr/nec; then
  	 lt_cv_prog_cc_pic=-Kconform_pic
        fi
        ;;
      *)
        lt_cv_prog_cc_pic='-fPIC'
        ;;
      esac
    else
      # PORTME Check for PIC flags for the system compiler.
      case $host_os in
      aix3* | aix4* | aix5*)
        lt_cv_prog_cc_wl='-Wl,'
        # All AIX code is PIC.
        if test "$host_cpu" = ia64; then
  	# AIX 5 now supports IA64 processor
  	lt_cv_prog_cc_static='-Bstatic'
        else
  	lt_cv_prog_cc_static='-bnso -bI:/lib/syscalls.exp'
        fi
        ;;
  
      hpux9* | hpux10* | hpux11*)
        # Is there a better lt_cv_prog_cc_static that works with the bundled CC?
        lt_cv_prog_cc_wl='-Wl,'
        lt_cv_prog_cc_static="${lt_cv_prog_cc_wl}-a ${lt_cv_prog_cc_wl}archive"
        lt_cv_prog_cc_pic='+Z'
        ;;
  
      irix5* | irix6*)
        lt_cv_prog_cc_wl='-Wl,'
        lt_cv_prog_cc_static='-non_shared'
        # PIC (with -KPIC) is the default.
        ;;
  
      cygwin* | mingw* | pw32* | os2*)
        # This hack is so that the source file can tell whether it is being
        # built for inclusion in a dll (and should export symbols for example).
        lt_cv_prog_cc_pic='-DDLL_EXPORT'
        ;;
  
      newsos6)
        lt_cv_prog_cc_pic='-KPIC'
        lt_cv_prog_cc_static='-Bstatic'
        ;;
  
      osf3* | osf4* | osf5*)
        # All OSF/1 code is PIC.
        lt_cv_prog_cc_wl='-Wl,'
        lt_cv_prog_cc_static='-non_shared'
        ;;
  
      sco3.2v5*)
        lt_cv_prog_cc_pic='-Kpic'
        lt_cv_prog_cc_static='-dn'
        lt_cv_prog_cc_shlib='-belf'
        ;;
  
      solaris*)
        lt_cv_prog_cc_pic='-KPIC'
        lt_cv_prog_cc_static='-Bstatic'
        lt_cv_prog_cc_wl='-Wl,'
        ;;
  
      sunos4*)
        lt_cv_prog_cc_pic='-PIC'
        lt_cv_prog_cc_static='-Bstatic'
        lt_cv_prog_cc_wl='-Qoption ld '
        ;;
  
      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
        lt_cv_prog_cc_pic='-KPIC'
        lt_cv_prog_cc_static='-Bstatic'
        if test "x$host_vendor" = xsni; then
  	lt_cv_prog_cc_wl='-LD'
        else
  	lt_cv_prog_cc_wl='-Wl,'
        fi
        ;;
  
      uts4*)
        lt_cv_prog_cc_pic='-pic'
        lt_cv_prog_cc_static='-Bstatic'
        ;;
  
      sysv4*MP*)
        if test -d /usr/nec ;then
  	lt_cv_prog_cc_pic='-Kconform_pic'
  	lt_cv_prog_cc_static='-Bstatic'
        fi
        ;;
  
      *)
        lt_cv_prog_cc_can_build_shared=no
        ;;
      esac
    fi
  ])
  if test -z "$lt_cv_prog_cc_pic"; then
    AC_MSG_RESULT([none])
  else
    AC_MSG_RESULT([$lt_cv_prog_cc_pic])
  
    # Check to make sure the pic_flag actually works.
    AC_MSG_CHECKING([if $compiler PIC flag $lt_cv_prog_cc_pic works])
    AC_CACHE_VAL(lt_cv_prog_cc_pic_works, [dnl
      save_CFLAGS="$CFLAGS"
      CFLAGS="$CFLAGS $lt_cv_prog_cc_pic -DPIC"
      AC_TRY_COMPILE([], [], [dnl
        case $host_os in
        hpux9* | hpux10* | hpux11*)
  	# On HP-UX, both CC and GCC only warn that PIC is supported... then
  	# they create non-PIC objects.  So, if there were any warnings, we
  	# assume that PIC is not supported.
  	if test -s conftest.err; then
  	  lt_cv_prog_cc_pic_works=no
  	else
  	  lt_cv_prog_cc_pic_works=yes
  	fi
  	;;
        *)
  	lt_cv_prog_cc_pic_works=yes
  	;;
        esac
      ], [dnl
        lt_cv_prog_cc_pic_works=no
      ])
      CFLAGS="$save_CFLAGS"
    ])
  
    if test "X$lt_cv_prog_cc_pic_works" = Xno; then
      lt_cv_prog_cc_pic=
      lt_cv_prog_cc_can_build_shared=no
    else
      lt_cv_prog_cc_pic=" $lt_cv_prog_cc_pic"
    fi
  
    AC_MSG_RESULT([$lt_cv_prog_cc_pic_works])
  fi
  
  # Check for any special shared library compilation flags.
  if test -n "$lt_cv_prog_cc_shlib"; then
    AC_MSG_WARN([\`$CC' requires \`$lt_cv_prog_cc_shlib' to build shared libraries])
    if echo "$old_CC $old_CFLAGS " | egrep -e "[[ 	]]$lt_cv_prog_cc_shlib[[ 	]]" >/dev/null; then :
    else
     AC_MSG_WARN([add \`$lt_cv_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure])
      lt_cv_prog_cc_can_build_shared=no
    fi
  fi
  
  AC_MSG_CHECKING([if $compiler static flag $lt_cv_prog_cc_static works])
  AC_CACHE_VAL([lt_cv_prog_cc_static_works], [dnl
    lt_cv_prog_cc_static_works=no
    save_LDFLAGS="$LDFLAGS"
    LDFLAGS="$LDFLAGS $lt_cv_prog_cc_static"
    AC_TRY_LINK([], [], [lt_cv_prog_cc_static_works=yes])
    LDFLAGS="$save_LDFLAGS"
  ])
  
  # Belt *and* braces to stop my trousers falling down:
  test "X$lt_cv_prog_cc_static_works" = Xno && lt_cv_prog_cc_static=
  AC_MSG_RESULT([$lt_cv_prog_cc_static_works])
  
  pic_flag="$lt_cv_prog_cc_pic"
  special_shlib_compile_flags="$lt_cv_prog_cc_shlib"
  wl="$lt_cv_prog_cc_wl"
  link_static_flag="$lt_cv_prog_cc_static"
  no_builtin_flag="$lt_cv_prog_cc_no_builtin"
  can_build_shared="$lt_cv_prog_cc_can_build_shared"
  
  
  # Check to see if options -o and -c are simultaneously supported by compiler
  AC_MSG_CHECKING([if $compiler supports -c -o file.$ac_objext])
  AC_CACHE_VAL([lt_cv_compiler_c_o], [
  $rm -r conftest 2>/dev/null
  mkdir conftest
  cd conftest
  echo "int some_variable = 0;" > conftest.$ac_ext
  mkdir out
  # According to Tom Tromey, Ian Lance Taylor reported there are C compilers
  # that will create temporary files in the current directory regardless of
  # the output directory.  Thus, making CWD read-only will cause this test
  # to fail, enabling locking or at least warning the user not to do parallel
  # builds.
  chmod -w .
  save_CFLAGS="$CFLAGS"
  CFLAGS="$CFLAGS -o out/conftest2.$ac_objext"
  compiler_c_o=no
  if { (eval echo configure:__oline__: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.$ac_objext; then
    # The compiler can only warn and ignore the option if not recognized
    # So say no if there are warnings
    if test -s out/conftest.err; then
      lt_cv_compiler_c_o=no
    else
      lt_cv_compiler_c_o=yes
    fi
  else
    # Append any errors to the config.log.
    cat out/conftest.err 1>&AC_FD_CC
    lt_cv_compiler_c_o=no
  fi
  CFLAGS="$save_CFLAGS"
  chmod u+w .
  $rm conftest* out/*
  rmdir out
  cd ..
  rmdir conftest
  $rm -r conftest 2>/dev/null
  ])
  compiler_c_o=$lt_cv_compiler_c_o
  AC_MSG_RESULT([$compiler_c_o])
  
  if test x"$compiler_c_o" = x"yes"; then
    # Check to see if we can write to a .lo
    AC_MSG_CHECKING([if $compiler supports -c -o file.lo])
    AC_CACHE_VAL([lt_cv_compiler_o_lo], [
    lt_cv_compiler_o_lo=no
    save_CFLAGS="$CFLAGS"
    CFLAGS="$CFLAGS -c -o conftest.lo"
    save_objext="$ac_objext"
    ac_objext=lo
    AC_TRY_COMPILE([], [int some_variable = 0;], [dnl
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings
      if test -s conftest.err; then
        lt_cv_compiler_o_lo=no
      else
        lt_cv_compiler_o_lo=yes
      fi
    ])
    ac_objext="$save_objext"
    CFLAGS="$save_CFLAGS"
    ])
    compiler_o_lo=$lt_cv_compiler_o_lo
    AC_MSG_RESULT([$compiler_o_lo])
  else
    compiler_o_lo=no
  fi
  
  # Check to see if we can do hard links to lock some files if needed
  hard_links="nottested"
  if test "$compiler_c_o" = no && test "$need_locks" != no; then
    # do not overwrite the value of need_locks provided by the user
    AC_MSG_CHECKING([if we can lock with hard links])
    hard_links=yes
    $rm conftest*
    ln conftest.a conftest.b 2>/dev/null && hard_links=no
    touch conftest.a
    ln conftest.a conftest.b 2>&5 || hard_links=no
    ln conftest.a conftest.b 2>/dev/null && hard_links=no
    AC_MSG_RESULT([$hard_links])
    if test "$hard_links" = no; then
      AC_MSG_WARN([\`$CC' does not support \`-c -o', so \`make -j' may be unsafe])
      need_locks=warn
    fi
  else
    need_locks=no
  fi
  
  if test "$GCC" = yes; then
    # Check to see if options -fno-rtti -fno-exceptions are supported by compiler
    AC_MSG_CHECKING([if $compiler supports -fno-rtti -fno-exceptions])
    echo "int some_variable = 0;" > conftest.$ac_ext
    save_CFLAGS="$CFLAGS"
    CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.$ac_ext"
    compiler_rtti_exceptions=no
    AC_TRY_COMPILE([], [int some_variable = 0;], [dnl
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings
      if test -s conftest.err; then
        compiler_rtti_exceptions=no
      else
        compiler_rtti_exceptions=yes
      fi
    ])
    CFLAGS="$save_CFLAGS"
    AC_MSG_RESULT([$compiler_rtti_exceptions])
  
    if test "$compiler_rtti_exceptions" = "yes"; then
      no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions'
    else
      no_builtin_flag=' -fno-builtin'
    fi
  fi
  
  # See if the linker supports building shared libraries.
  AC_MSG_CHECKING([whether the linker ($LD) supports shared libraries])
  
  allow_undefined_flag=
  no_undefined_flag=
  need_lib_prefix=unknown
  need_version=unknown
  # when you set need_version to no, make sure it does not cause -set_version
  # flags to be left without arguments
  archive_cmds=
  archive_expsym_cmds=
  old_archive_from_new_cmds=
  old_archive_from_expsyms_cmds=
  export_dynamic_flag_spec=
  whole_archive_flag_spec=
  thread_safe_flag_spec=
  hardcode_into_libs=no
  hardcode_libdir_flag_spec=
  hardcode_libdir_separator=
  hardcode_direct=no
  hardcode_minus_L=no
  hardcode_shlibpath_var=unsupported
  runpath_var=
  link_all_deplibs=unknown
  always_export_symbols=no
  export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols'
  # include_expsyms should be a list of space-separated symbols to be *always*
  # included in the symbol list
  include_expsyms=
  # exclude_expsyms can be an egrep regular expression of symbols to exclude
  # it will be wrapped by ` (' and `)$', so one must not match beginning or
  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
  # as well as any symbol that contains `d'.
  exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
  # platforms (ab)use it in PIC code, but their linkers get confused if
  # the symbol is explicitly referenced.  Since portable code cannot
  # rely on this symbol name, it's probably fine to never include it in
  # preloaded symbol tables.
  extract_expsyms_cmds=
  
  case $host_os in
  cygwin* | mingw* | pw32*)
    # FIXME: the MSVC++ port hasn't been tested in a loooong time
    # When not using gcc, we currently assume that we are using
    # Microsoft Visual C++.
    if test "$GCC" != yes; then
      with_gnu_ld=no
    fi
    ;;
  openbsd*)
    with_gnu_ld=no
    ;;
  esac
  
  ld_shlibs=yes
  if test "$with_gnu_ld" = yes; then
    # If archive_cmds runs LD, not CC, wlarc should be empty
    wlarc='${wl}'
  
    # See if GNU ld supports shared libraries.
    case $host_os in
    aix3* | aix4* | aix5*)
      # On AIX, the GNU linker is very broken
      # Note:Check GNU linker on AIX 5-IA64 when/if it becomes available.
      ld_shlibs=no
      cat <<EOF 1>&2
  
  *** Warning: the GNU linker, at least up to release 2.9.1, is reported
  *** to be unable to reliably create shared libraries on AIX.
  *** Therefore, libtool is disabling shared libraries support.  If you
  *** really care for shared libraries, you may want to modify your PATH
  *** so that a non-GNU linker is found, and then restart.
  
  EOF
      ;;
  
    amigaos*)
      archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
      hardcode_libdir_flag_spec='-L$libdir'
      hardcode_minus_L=yes
  
      # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
      # that the semantics of dynamic libraries on AmigaOS, at least up
      # to version 4, is to share data among multiple programs linked
      # with the same dynamic library.  Since this doesn't match the
      # behavior of shared libraries on other platforms, we can use
      # them.
      ld_shlibs=no
      ;;
  
    beos*)
      if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
        allow_undefined_flag=unsupported
        # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
        # support --undefined.  This deserves some investigation.  FIXME
        archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
      else
        ld_shlibs=no
      fi
      ;;
  
    cygwin* | mingw* | pw32*)
      # hardcode_libdir_flag_spec is actually meaningless, as there is
      # no search path for DLLs.
      hardcode_libdir_flag_spec='-L$libdir'
      allow_undefined_flag=unsupported
      always_export_symbols=yes
  
      extract_expsyms_cmds='test -f $output_objdir/impgen.c || \
        sed -e "/^# \/\* impgen\.c starts here \*\//,/^# \/\* impgen.c ends here \*\// { s/^# //;s/^# *$//; p; }" -e d < $''0 > $output_objdir/impgen.c~
        test -f $output_objdir/impgen.exe || (cd $output_objdir && \
        if test "x$HOST_CC" != "x" ; then $HOST_CC -o impgen impgen.c ; \
        else $CC -o impgen impgen.c ; fi)~
        $output_objdir/impgen $dir/$soroot > $output_objdir/$soname-def'
  
      old_archive_from_expsyms_cmds='$DLLTOOL --as=$AS --dllname $soname --def $output_objdir/$soname-def --output-lib $output_objdir/$newlib'
  
      # cygwin and mingw dlls have different entry points and sets of symbols
      # to exclude.
      # FIXME: what about values for MSVC?
      dll_entry=__cygwin_dll_entry@12
      dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12~
      case $host_os in
      mingw*)
        # mingw values
        dll_entry=_DllMainCRTStartup@12
        dll_exclude_symbols=DllMain@12,DllMainCRTStartup@12,DllEntryPoint@12~
        ;;
      esac
  
      # mingw and cygwin differ, and it's simplest to just exclude the union
      # of the two symbol sets.
      dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12,DllMainCRTStartup@12,DllEntryPoint@12
  
      # recent cygwin and mingw systems supply a stub DllMain which the user
      # can override, but on older systems we have to supply one (in ltdll.c)
      if test "x$lt_cv_need_dllmain" = "xyes"; then
        ltdll_obj='$output_objdir/$soname-ltdll.'"$ac_objext "
        ltdll_cmds='test -f $output_objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $''0 > $output_objdir/$soname-ltdll.c~
  	test -f $output_objdir/$soname-ltdll.$ac_objext || (cd $output_objdir && $CC -c $soname-ltdll.c)~'
      else
        ltdll_obj=
        ltdll_cmds=
      fi
  
      # Extract the symbol export list from an `--export-all' def file,
      # then regenerate the def file from the symbol export list, so that
      # the compiled dll only exports the symbol export list.
      # Be careful not to strip the DATA tag left be newer dlltools.
      export_symbols_cmds="$ltdll_cmds"'
        $DLLTOOL --export-all --exclude-symbols '$dll_exclude_symbols' --output-def $output_objdir/$soname-def '$ltdll_obj'$libobjs $convenience~
        sed -e "1,/EXPORTS/d" -e "s/ @ [[0-9]]*//" -e "s/ *;.*$//" < $output_objdir/$soname-def > $export_symbols'
  
      # If the export-symbols file already is a .def file (1st line
      # is EXPORTS), use it as is.
      # If DATA tags from a recent dlltool are present, honour them!
      archive_expsym_cmds='if test "x`head -1 $export_symbols`" = xEXPORTS; then
  	cp $export_symbols $output_objdir/$soname-def;
        else
  	echo EXPORTS > $output_objdir/$soname-def;
  	_lt_hint=1;
  	cat $export_symbols | while read symbol; do
  	 set dummy \$symbol;
  	 case \[$]# in
  	   2) echo "   \[$]2 @ \$_lt_hint ; " >> $output_objdir/$soname-def;;
  	   *) echo "     \[$]2 @ \$_lt_hint \[$]3 ; " >> $output_objdir/$soname-def;;
  	 esac;
  	 _lt_hint=`expr 1 + \$_lt_hint`;
  	done;
        fi~
        '"$ltdll_cmds"'
        $CC -Wl,--base-file,$output_objdir/$soname-base '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~
        $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp~
        $CC -Wl,--base-file,$output_objdir/$soname-base $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~
        $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp --output-lib $output_objdir/$libname.dll.a~
        $CC $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags'
      ;;
  
    netbsd*)
      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
        archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
        wlarc=
      else
        archive_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
        archive_expsym_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
      fi
      ;;
  
    solaris* | sysv5*)
      if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then
        ld_shlibs=no
        cat <<EOF 1>&2
  
  *** Warning: The releases 2.8.* of the GNU linker cannot reliably
  *** create shared libraries on Solaris systems.  Therefore, libtool
  *** is disabling shared libraries support.  We urge you to upgrade GNU
  *** binutils to release 2.9.1 or newer.  Another option is to modify
  *** your PATH or compiler configuration so that the native linker is
  *** used, and then restart.
  
  EOF
      elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
        archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
      else
        ld_shlibs=no
      fi
      ;;
  
    sunos4*)
      archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
      wlarc=
      hardcode_direct=yes
      hardcode_shlibpath_var=no
      ;;
  
    *)
      if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
        archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
      else
        ld_shlibs=no
      fi
      ;;
    esac
  
    if test "$ld_shlibs" = yes; then
      runpath_var=LD_RUN_PATH
      hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
      export_dynamic_flag_spec='${wl}--export-dynamic'
      case $host_os in
      cygwin* | mingw* | pw32*)
        # dlltool doesn't understand --whole-archive et. al.
        whole_archive_flag_spec=
        ;;
      *)
        # ancient GNU ld didn't support --whole-archive et. al.
        if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then
  	whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
        else
  	whole_archive_flag_spec=
        fi
        ;;
      esac
    fi
  else
    # PORTME fill in a description of your system's linker (not GNU ld)
    case $host_os in
    aix3*)
      allow_undefined_flag=unsupported
      always_export_symbols=yes
      archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
      # Note: this linker hardcodes the directories in LIBPATH if there
      # are no directories specified by -L.
      hardcode_minus_L=yes
      if test "$GCC" = yes && test -z "$link_static_flag"; then
        # Neither direct hardcoding nor static linking is supported with a
        # broken collect2.
        hardcode_direct=unsupported
      fi
      ;;
  
    aix4* | aix5*)
      if test "$host_cpu" = ia64; then
        # On IA64, the linker does run time linking by default, so we don't
        # have to do anything special.
        aix_use_runtimelinking=no
        exp_sym_flag='-Bexport'
        no_entry_flag=""
      else
        aix_use_runtimelinking=no
  
        # Test if we are trying to use run time linking or normal
        # AIX style linking. If -brtl is somewhere in LDFLAGS, we
        # need to do runtime linking.
        case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*)
  	for ld_flag in $LDFLAGS; do
  	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
  	    aix_use_runtimelinking=yes
  	    break
  	  fi
  	done
        esac
  
        exp_sym_flag='-bexport'
        no_entry_flag='-bnoentry'
      fi
  
      # When large executables or shared objects are built, AIX ld can
      # have problems creating the table of contents.  If linking a library
      # or program results in "error TOC overflow" add -mminimal-toc to
      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
  
      hardcode_direct=yes
      archive_cmds=''
      hardcode_libdir_separator=':'
      if test "$GCC" = yes; then
        case $host_os in aix4.[[012]]|aix4.[[012]].*)
  	collect2name=`${CC} -print-prog-name=collect2`
  	if test -f "$collect2name" && \
  	  strings "$collect2name" | grep resolve_lib_name >/dev/null
  	then
  	  # We have reworked collect2
  	  hardcode_direct=yes
  	else
  	  # We have old collect2
  	  hardcode_direct=unsupported
  	  # It fails to find uninstalled libraries when the uninstalled
  	  # path is not listed in the libpath.  Setting hardcode_minus_L
  	  # to unsupported forces relinking
  	  hardcode_minus_L=yes
  	  hardcode_libdir_flag_spec='-L$libdir'
  	  hardcode_libdir_separator=
  	fi
        esac
  
        shared_flag='-shared'
      else
        # not using gcc
        if test "$host_cpu" = ia64; then
  	shared_flag='${wl}-G'
        else
  	if test "$aix_use_runtimelinking" = yes; then
  	  shared_flag='${wl}-G'
  	else
  	  shared_flag='${wl}-bM:SRE'
  	fi
        fi
      fi
  
      # It seems that -bexpall can do strange things, so it is better to
      # generate a list of symbols to export.
      always_export_symbols=yes
      if test "$aix_use_runtimelinking" = yes; then
        # Warning - without using the other runtime loading flags (-brtl),
        # -berok will link without error, but may produce a broken library.
        allow_undefined_flag='-berok'
        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib'
        archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
      else
        if test "$host_cpu" = ia64; then
  	hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
  	allow_undefined_flag="-z nodefs"
  	archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname ${wl}-h$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
        else
  	hardcode_libdir_flag_spec='${wl}-bnolibpath ${wl}-blibpath:$libdir:/usr/lib:/lib'
  	# Warning - without using the other run time loading flags,
  	# -berok will link without error, but may produce a broken library.
  	allow_undefined_flag='${wl}-berok'
  	# This is a bit strange, but is similar to how AIX traditionally builds
  	# it's shared libraries.
  	archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"' ~$AR -crlo $objdir/$libname$release.a $objdir/$soname'
        fi
      fi
      ;;
  
    amigaos*)
      archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
      hardcode_libdir_flag_spec='-L$libdir'
      hardcode_minus_L=yes
      # see comment about different semantics on the GNU ld section
      ld_shlibs=no
      ;;
  
    cygwin* | mingw* | pw32*)
      # When not using gcc, we currently assume that we are using
      # Microsoft Visual C++.
      # hardcode_libdir_flag_spec is actually meaningless, as there is
      # no search path for DLLs.
      hardcode_libdir_flag_spec=' '
      allow_undefined_flag=unsupported
      # Tell ltmain to make .lib files, not .a files.
      libext=lib
      # FIXME: Setting linknames here is a bad hack.
      archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames='
      # The linker will automatically build a .lib file if we build a DLL.
      old_archive_from_new_cmds='true'
      # FIXME: Should let the user specify the lib program.
      old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs'
      fix_srcfile_path='`cygpath -w "$srcfile"`'
      ;;
  
    darwin* | rhapsody*)
      case "$host_os" in
      rhapsody* | darwin1.[[012]])
        allow_undefined_flag='-undefined suppress'
        ;;
      *) # Darwin 1.3 on
        allow_undefined_flag='-flat_namespace -undefined suppress'
        ;;
      esac
      # FIXME: Relying on posixy $() will cause problems for
      #        cross-compilation, but unfortunately the echo tests do not
      #        yet detect zsh echo's removal of \ escapes.
      archive_cmds='$nonopt $(test "x$module" = xyes && echo -bundle || echo -dynamiclib) $allow_undefined_flag -o $lib $libobjs $deplibs$linker_flags -install_name $rpath/$soname $verstring'
      # We need to add '_' to the symbols in $export_symbols first
      #archive_expsym_cmds="$archive_cmds"' && strip -s $export_symbols'
      hardcode_direct=yes
      hardcode_shlibpath_var=no
      whole_archive_flag_spec='-all_load $convenience'
      ;;
  
    freebsd1*)
      ld_shlibs=no
      ;;
  
    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
    # support.  Future versions do this automatically, but an explicit c++rt0.o
    # does not break anything, and helps significantly (at the cost of a little
    # extra space).
    freebsd2.2*)
      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
      hardcode_libdir_flag_spec='-R$libdir'
      hardcode_direct=yes
      hardcode_shlibpath_var=no
      ;;
  
    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
    freebsd2*)
      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
      hardcode_direct=yes
      hardcode_minus_L=yes
      hardcode_shlibpath_var=no
      ;;
  
    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
    freebsd*)
      archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
      hardcode_libdir_flag_spec='-R$libdir'
      hardcode_direct=yes
      hardcode_shlibpath_var=no
      ;;
  
    hpux9* | hpux10* | hpux11*)
      case $host_os in
      hpux9*) archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ;;
      *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;;
      esac
      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
      hardcode_libdir_separator=:
      hardcode_direct=yes
      hardcode_minus_L=yes # Not in the search PATH, but as the default
  			 # location of the library.
      export_dynamic_flag_spec='${wl}-E'
      ;;
  
    irix5* | irix6*)
      if test "$GCC" = yes; then
        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
      else
        archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
      fi
      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
      hardcode_libdir_separator=:
      link_all_deplibs=yes
      ;;
  
    netbsd*)
      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
        archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
      else
        archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
      fi
      hardcode_libdir_flag_spec='-R$libdir'
      hardcode_direct=yes
      hardcode_shlibpath_var=no
      ;;
  
    newsos6)
      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
      hardcode_direct=yes
      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
      hardcode_libdir_separator=:
      hardcode_shlibpath_var=no
      ;;
  
    openbsd*)
      hardcode_direct=yes
      hardcode_shlibpath_var=no
      if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
        archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $linker_flags'
        hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
        export_dynamic_flag_spec='${wl}-E'
      else
        case "$host_os" in
        openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
  	archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
  	hardcode_libdir_flag_spec='-R$libdir'
          ;;
        *)
          archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $linker_flags'
          hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
          ;;
        esac
      fi
      ;;
  
    os2*)
      hardcode_libdir_flag_spec='-L$libdir'
      hardcode_minus_L=yes
      allow_undefined_flag=unsupported
      archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
      old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
      ;;
  
    osf3*)
      if test "$GCC" = yes; then
        allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
        archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
      else
        allow_undefined_flag=' -expect_unresolved \*'
        archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
      fi
      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
      hardcode_libdir_separator=:
      ;;
  
    osf4* | osf5*)	# as osf3* with the addition of -msym flag
      if test "$GCC" = yes; then
        allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
        archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
        hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
      else
        allow_undefined_flag=' -expect_unresolved \*'
        archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
        archive_expsym_cmds='for i in `cat $export_symbols`; do printf "-exported_symbol " >> $lib.exp; echo "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
        $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
  
        #Both c and cxx compiler support -rpath directly
        hardcode_libdir_flag_spec='-rpath $libdir'
      fi
      hardcode_libdir_separator=:
      ;;
  
    sco3.2v5*)
      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
      hardcode_shlibpath_var=no
      runpath_var=LD_RUN_PATH
      hardcode_runpath_var=yes
      export_dynamic_flag_spec='${wl}-Bexport'
      ;;
  
    solaris*)
      # gcc --version < 3.0 without binutils cannot create self contained
      # shared libraries reliably, requiring libgcc.a to resolve some of
      # the object symbols generated in some cases.  Libraries that use
      # assert need libgcc.a to resolve __eprintf, for example.  Linking
      # a copy of libgcc.a into every shared library to guarantee resolving
      # such symbols causes other problems:  According to Tim Van Holder
      # <tim.van.holder@pandora.be>, C++ libraries end up with a separate
      # (to the application) exception stack for one thing.
      no_undefined_flag=' -z defs'
      if test "$GCC" = yes; then
        case `$CC --version 2>/dev/null` in
        [[12]].*)
  	cat <<EOF 1>&2
  
  *** Warning: Releases of GCC earlier than version 3.0 cannot reliably
  *** create self contained shared libraries on Solaris systems, without
  *** introducing a dependency on libgcc.a.  Therefore, libtool is disabling
  *** -no-undefined support, which will at least allow you to build shared
  *** libraries.  However, you may find that when you link such libraries
  *** into an application without using GCC, you have to manually add
  *** \`gcc --print-libgcc-file-name\` to the link command.  We urge you to
  *** upgrade to a newer version of GCC.  Another option is to rebuild your
  *** current GCC to use the GNU linker from GNU binutils 2.9.1 or newer.
  
  EOF
          no_undefined_flag=
  	;;
        esac
      fi
      # $CC -shared without GNU ld will not create a library from C++
      # object files and a static libstdc++, better avoid it by now
      archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
      archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
  		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
      hardcode_libdir_flag_spec='-R$libdir'
      hardcode_shlibpath_var=no
      case $host_os in
      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
      *) # Supported since Solaris 2.6 (maybe 2.5.1?)
        whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;
      esac
      link_all_deplibs=yes
      ;;
  
    sunos4*)
      if test "x$host_vendor" = xsequent; then
        # Use $CC to link under sequent, because it throws in some extra .o
        # files that make .init and .fini sections work.
        archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
      else
        archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
      fi
      hardcode_libdir_flag_spec='-L$libdir'
      hardcode_direct=yes
      hardcode_minus_L=yes
      hardcode_shlibpath_var=no
      ;;
  
    sysv4)
      if test "x$host_vendor" = xsno; then
        archive_cmds='$LD -G -Bsymbolic -h $soname -o $lib $libobjs $deplibs $linker_flags'
        hardcode_direct=yes # is this really true???
      else
        archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
        hardcode_direct=no #Motorola manual says yes, but my tests say they lie
      fi
      runpath_var='LD_RUN_PATH'
      hardcode_shlibpath_var=no
      ;;
  
    sysv4.3*)
      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
      hardcode_shlibpath_var=no
      export_dynamic_flag_spec='-Bexport'
      ;;
  
    sysv5*)
      no_undefined_flag=' -z text'
      # $CC -shared without GNU ld will not create a library from C++
      # object files and a static libstdc++, better avoid it by now
      archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
      archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
  		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
      hardcode_libdir_flag_spec=
      hardcode_shlibpath_var=no
      runpath_var='LD_RUN_PATH'
      ;;
  
    uts4*)
      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
      hardcode_libdir_flag_spec='-L$libdir'
      hardcode_shlibpath_var=no
      ;;
  
    dgux*)
      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
      hardcode_libdir_flag_spec='-L$libdir'
      hardcode_shlibpath_var=no
      ;;
  
    sysv4*MP*)
      if test -d /usr/nec; then
        archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
        hardcode_shlibpath_var=no
        runpath_var=LD_RUN_PATH
        hardcode_runpath_var=yes
        ld_shlibs=yes
      fi
      ;;
  
    sysv4.2uw2*)
      archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
      hardcode_direct=yes
      hardcode_minus_L=no
      hardcode_shlibpath_var=no
      hardcode_runpath_var=yes
      runpath_var=LD_RUN_PATH
      ;;
  
    sysv5uw7* | unixware7*)
      no_undefined_flag='${wl}-z ${wl}text'
      if test "$GCC" = yes; then
        archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
      else
        archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
      fi
      runpath_var='LD_RUN_PATH'
      hardcode_shlibpath_var=no
      ;;
  
    *)
      ld_shlibs=no
      ;;
    esac
  fi
  AC_MSG_RESULT([$ld_shlibs])
  test "$ld_shlibs" = no && can_build_shared=no
  
  # Check hardcoding attributes.
  AC_MSG_CHECKING([how to hardcode library paths into programs])
  hardcode_action=
  if test -n "$hardcode_libdir_flag_spec" || \
     test -n "$runpath_var"; then
  
    # We can hardcode non-existant directories.
    if test "$hardcode_direct" != no &&
       # If the only mechanism to avoid hardcoding is shlibpath_var, we
       # have to relink, otherwise we might link with an installed library
       # when we should be linking with a yet-to-be-installed one
       ## test "$hardcode_shlibpath_var" != no &&
       test "$hardcode_minus_L" != no; then
      # Linking always hardcodes the temporary library directory.
      hardcode_action=relink
    else
      # We can link without hardcoding, and we can hardcode nonexisting dirs.
      hardcode_action=immediate
    fi
  else
    # We cannot hardcode anything, or else we can only hardcode existing
    # directories.
    hardcode_action=unsupported
  fi
  AC_MSG_RESULT([$hardcode_action])
  
  striplib=
  old_striplib=
  AC_MSG_CHECKING([whether stripping libraries is possible])
  if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
    test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
    test -z "$striplib" && striplib="$STRIP --strip-unneeded"
    AC_MSG_RESULT([yes])
  else
    AC_MSG_RESULT([no])
  fi
  
  reload_cmds='$LD$reload_flag -o $output$reload_objs'
  test -z "$deplibs_check_method" && deplibs_check_method=unknown
  
  # PORTME Fill in your ld.so characteristics
  AC_MSG_CHECKING([dynamic linker characteristics])
  library_names_spec=
  libname_spec='lib$name'
  soname_spec=
  postinstall_cmds=
  postuninstall_cmds=
  finish_cmds=
  finish_eval=
  shlibpath_var=
  shlibpath_overrides_runpath=unknown
  version_type=none
  dynamic_linker="$host_os ld.so"
  sys_lib_dlsearch_path_spec="/lib /usr/lib"
  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
  
  case $host_os in
  aix3*)
    version_type=linux
    library_names_spec='${libname}${release}.so$versuffix $libname.a'
    shlibpath_var=LIBPATH
  
    # AIX has no versioning support, so we append a major version to the name.
    soname_spec='${libname}${release}.so$major'
    ;;
  
  aix4* | aix5*)
    version_type=linux
    if test "$host_cpu" = ia64; then
      # AIX 5 supports IA64
      library_names_spec='${libname}${release}.so$major ${libname}${release}.so$versuffix $libname.so'
      shlibpath_var=LD_LIBRARY_PATH
    else
      # With GCC up to 2.95.x, collect2 would create an import file
      # for dependence libraries.  The import file would start with
      # the line `#! .'.  This would cause the generated library to
      # depend on `.', always an invalid library.  This was fixed in
      # development snapshots of GCC prior to 3.0.
      case $host_os in
        aix4 | aix4.[[01]] | aix4.[[01]].*)
  	if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
  	     echo ' yes '
  	     echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
  	  :
  	else
  	  can_build_shared=no
  	fi
  	;;
      esac
      # AIX (on Power*) has no versioning support, so currently we can
      # not hardcode correct soname into executable. Probably we can
      # add versioning support to collect2, so additional links can
      # be useful in future.
      if test "$aix_use_runtimelinking" = yes; then
        # If using run time linking (on AIX 4.2 or later) use lib<name>.so
        # instead of lib<name>.a to let people know that these are not
        # typical AIX shared libraries.
        library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
      else
        # We preserve .a as extension for shared libraries through AIX4.2
        # and later when we are not doing run time linking.
        library_names_spec='${libname}${release}.a $libname.a'
        soname_spec='${libname}${release}.so$major'
      fi
      shlibpath_var=LIBPATH
    fi
    ;;
  
  amigaos*)
    library_names_spec='$libname.ixlibrary $libname.a'
    # Create ${libname}_ixlibrary.a entries in /sys/libs.
    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
    ;;
  
  beos*)
    library_names_spec='${libname}.so'
    dynamic_linker="$host_os ld.so"
    shlibpath_var=LIBRARY_PATH
    ;;
  
  bsdi4*)
    version_type=linux
    need_version=no
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
    soname_spec='${libname}${release}.so$major'
    finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
    shlibpath_var=LD_LIBRARY_PATH
    sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
    sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
    export_dynamic_flag_spec=-rdynamic
    # the default ld.so.conf also contains /usr/contrib/lib and
    # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
    # libtool to hard-code these into programs
    ;;
  
  cygwin* | mingw* | pw32*)
    version_type=windows
    need_version=no
    need_lib_prefix=no
    case $GCC,$host_os in
    yes,cygwin*)
      library_names_spec='$libname.dll.a'
      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | sed -e 's/[[.]]/-/g'`${versuffix}.dll'
      postinstall_cmds='dlpath=`bash 2>&1 -c '\''. $dir/${file}i;echo \$dlname'\''`~
        dldir=$destdir/`dirname \$dlpath`~
        test -d \$dldir || mkdir -p \$dldir~
        $install_prog .libs/$dlname \$dldir/$dlname'
      postuninstall_cmds='dldll=`bash 2>&1 -c '\''. $file; echo \$dlname'\''`~
        dlpath=$dir/\$dldll~
         $rm \$dlpath'
      ;;
    yes,mingw*)
      library_names_spec='${libname}`echo ${release} | sed -e 's/[[.]]/-/g'`${versuffix}.dll'
      sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | sed -e "s/^libraries://" -e "s/;/ /g"`
      ;;
    yes,pw32*)
      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll'
      ;;
    *)
      library_names_spec='${libname}`echo ${release} | sed -e 's/[[.]]/-/g'`${versuffix}.dll $libname.lib'
      ;;
    esac
    dynamic_linker='Win32 ld.exe'
    # FIXME: first we should search . and the directory the executable is in
    shlibpath_var=PATH
    ;;
  
  darwin* | rhapsody*)
    dynamic_linker="$host_os dyld"
    version_type=darwin
    need_lib_prefix=no
    need_version=no
    # FIXME: Relying on posixy $() will cause problems for
    #        cross-compilation, but unfortunately the echo tests do not
    #        yet detect zsh echo's removal of \ escapes.
    library_names_spec='${libname}${release}${versuffix}.$(test .$module = .yes && echo so || echo dylib) ${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib) ${libname}.$(test .$module = .yes && echo so || echo dylib)'
    soname_spec='${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib)'
    shlibpath_overrides_runpath=yes
    shlibpath_var=DYLD_LIBRARY_PATH
    ;;
  
  freebsd1*)
    dynamic_linker=no
    ;;
  
  freebsd*)
    objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
    version_type=freebsd-$objformat
    case $version_type in
      freebsd-elf*)
        library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
        need_version=no
        need_lib_prefix=no
        ;;
      freebsd-*)
        library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix'
        need_version=yes
        ;;
    esac
    shlibpath_var=LD_LIBRARY_PATH
    case $host_os in
    freebsd2*)
      shlibpath_overrides_runpath=yes
      ;;
    *)
      shlibpath_overrides_runpath=no
      hardcode_into_libs=yes
      ;;
    esac
    ;;
  
  gnu*)
    version_type=linux
    need_lib_prefix=no
    need_version=no
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so'
    soname_spec='${libname}${release}.so$major'
    shlibpath_var=LD_LIBRARY_PATH
    hardcode_into_libs=yes
    ;;
  
  hpux9* | hpux10* | hpux11*)
    # Give a soname corresponding to the major version so that dld.sl refuses to
    # link against other versions.
    dynamic_linker="$host_os dld.sl"
    version_type=sunos
    need_lib_prefix=no
    need_version=no
    shlibpath_var=SHLIB_PATH
    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
    library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl'
    soname_spec='${libname}${release}.sl$major'
    # HP-UX runs *really* slowly unless shared libraries are mode 555.
    postinstall_cmds='chmod 555 $lib'
    ;;
  
  irix5* | irix6*)
    version_type=irix
    need_lib_prefix=no
    need_version=no
    soname_spec='${libname}${release}.so$major'
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so $libname.so'
    case $host_os in
    irix5*)
      libsuff= shlibsuff=
      ;;
    *)
      case $LD in # libtool.m4 will add one of these switches to LD
      *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;;
      *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;;
      *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;;
      *) libsuff= shlibsuff= libmagic=never-match;;
      esac
      ;;
    esac
    shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
    shlibpath_overrides_runpath=no
    sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
    sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
    ;;
  
  # No shared lib support for Linux oldld, aout, or coff.
  linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*)
    dynamic_linker=no
    ;;
  
  # This must be Linux ELF.
  linux-gnu*)
    version_type=linux
    need_lib_prefix=no
    need_version=no
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
    soname_spec='${libname}${release}.so$major'
    finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
    shlibpath_var=LD_LIBRARY_PATH
    shlibpath_overrides_runpath=no
    # This implies no fast_install, which is unacceptable.
    # Some rework will be needed to allow for fast_install
    # before this can be enabled.
    hardcode_into_libs=yes
  
    # We used to test for /lib/ld.so.1 and disable shared libraries on
    # powerpc, because MkLinux only supported shared libraries with the
    # GNU dynamic linker.  Since this was broken with cross compilers,
    # most powerpc-linux boxes support dynamic linking these days and
    # people can always --disable-shared, the test was removed, and we
    # assume the GNU/Linux dynamic linker is in use.
    dynamic_linker='GNU/Linux ld.so'
    ;;
  
  netbsd*)
    version_type=sunos
    need_lib_prefix=no
    need_version=no
    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
      library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
      finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
      dynamic_linker='NetBSD (a.out) ld.so'
    else
      library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so'
      soname_spec='${libname}${release}.so$major'
      dynamic_linker='NetBSD ld.elf_so'
    fi
    shlibpath_var=LD_LIBRARY_PATH
    shlibpath_overrides_runpath=yes
    hardcode_into_libs=yes
    ;;
  
  newsos6)
    version_type=linux
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
    shlibpath_var=LD_LIBRARY_PATH
    shlibpath_overrides_runpath=yes
    ;;
  
  openbsd*)
    version_type=sunos
    need_lib_prefix=no
    need_version=no
    if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
      case "$host_os" in
      openbsd2.[[89]] | openbsd2.[[89]].*)
        shlibpath_overrides_runpath=no
        ;;
      *)
        shlibpath_overrides_runpath=yes
        ;;
      esac
    else
      shlibpath_overrides_runpath=yes
    fi
    library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
    shlibpath_var=LD_LIBRARY_PATH
    ;;
  
  os2*)
    libname_spec='$name'
    need_lib_prefix=no
    library_names_spec='$libname.dll $libname.a'
    dynamic_linker='OS/2 ld.exe'
    shlibpath_var=LIBPATH
    ;;
  
  osf3* | osf4* | osf5*)
    version_type=osf
    need_version=no
    soname_spec='${libname}${release}.so'
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
    shlibpath_var=LD_LIBRARY_PATH
    sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
    sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
    ;;
  
  sco3.2v5*)
    version_type=osf
    soname_spec='${libname}${release}.so$major'
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
    shlibpath_var=LD_LIBRARY_PATH
    ;;
  
  solaris*)
    version_type=linux
    need_lib_prefix=no
    need_version=no
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
    soname_spec='${libname}${release}.so$major'
    shlibpath_var=LD_LIBRARY_PATH
    shlibpath_overrides_runpath=yes
    hardcode_into_libs=yes
    # ldd complains unless libraries are executable
    postinstall_cmds='chmod +x $lib'
    ;;
  
  sunos4*)
    version_type=sunos
    library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
    finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
    shlibpath_var=LD_LIBRARY_PATH
    shlibpath_overrides_runpath=yes
    if test "$with_gnu_ld" = yes; then
      need_lib_prefix=no
    fi
    need_version=yes
    ;;
  
  sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
    version_type=linux
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
    soname_spec='${libname}${release}.so$major'
    shlibpath_var=LD_LIBRARY_PATH
    case $host_vendor in
      sni)
        shlibpath_overrides_runpath=no
        ;;
      motorola)
        need_lib_prefix=no
        need_version=no
        shlibpath_overrides_runpath=no
        sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
        ;;
    esac
    ;;
  
  uts4*)
    version_type=linux
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
    soname_spec='${libname}${release}.so$major'
    shlibpath_var=LD_LIBRARY_PATH
    ;;
  
  dgux*)
    version_type=linux
    need_lib_prefix=no
    need_version=no
    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
    soname_spec='${libname}${release}.so$major'
    shlibpath_var=LD_LIBRARY_PATH
    ;;
  
  sysv4*MP*)
    if test -d /usr/nec ;then
      version_type=linux
      library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so'
      soname_spec='$libname.so.$major'
      shlibpath_var=LD_LIBRARY_PATH
    fi
    ;;
  
  *)
    dynamic_linker=no
    ;;
  esac
  AC_MSG_RESULT([$dynamic_linker])
  test "$dynamic_linker" = no && can_build_shared=no
  
  # Report the final consequences.
  AC_MSG_CHECKING([if libtool supports shared libraries])
  AC_MSG_RESULT([$can_build_shared])
  
  AC_MSG_CHECKING([whether to build shared libraries])
  test "$can_build_shared" = "no" && enable_shared=no
  
  # On AIX, shared libraries and static libraries use the same namespace, and
  # are all built from PIC.
  case "$host_os" in
  aix3*)
    test "$enable_shared" = yes && enable_static=no
    if test -n "$RANLIB"; then
      archive_cmds="$archive_cmds~\$RANLIB \$lib"
      postinstall_cmds='$RANLIB $lib'
    fi
    ;;
  
  aix4*)
    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
      test "$enable_shared" = yes && enable_static=no
    fi
    ;;
  esac
  AC_MSG_RESULT([$enable_shared])
  
  AC_MSG_CHECKING([whether to build static libraries])
  # Make sure either enable_shared or enable_static is yes.
  test "$enable_shared" = yes || enable_static=yes
  AC_MSG_RESULT([$enable_static])
  
  if test "$hardcode_action" = relink; then
    # Fast installation is not supported
    enable_fast_install=no
  elif test "$shlibpath_overrides_runpath" = yes ||
       test "$enable_shared" = no; then
    # Fast installation is not necessary
    enable_fast_install=needless
  fi
  
  variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
  if test "$GCC" = yes; then
    variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
  fi
  
  AC_LIBTOOL_DLOPEN_SELF
  
  if test "$enable_shared" = yes && test "$GCC" = yes; then
    case $archive_cmds in
    *'~'*)
      # FIXME: we may have to deal with multi-command sequences.
      ;;
    '$CC '*)
      # Test whether the compiler implicitly links with -lc since on some
      # systems, -lgcc has to come before -lc. If gcc already passes -lc
      # to ld, don't add -lc before -lgcc.
      AC_MSG_CHECKING([whether -lc should be explicitly linked in])
      AC_CACHE_VAL([lt_cv_archive_cmds_need_lc],
      [$rm conftest*
      echo 'static int dummy;' > conftest.$ac_ext
  
      if AC_TRY_EVAL(ac_compile); then
        soname=conftest
        lib=conftest
        libobjs=conftest.$ac_objext
        deplibs=
        wl=$lt_cv_prog_cc_wl
        compiler_flags=-v
        linker_flags=-v
        verstring=
        output_objdir=.
        libname=conftest
        save_allow_undefined_flag=$allow_undefined_flag
        allow_undefined_flag=
        if AC_TRY_EVAL(archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1)
        then
  	lt_cv_archive_cmds_need_lc=no
        else
  	lt_cv_archive_cmds_need_lc=yes
        fi
        allow_undefined_flag=$save_allow_undefined_flag
      else
        cat conftest.err 1>&5
      fi])
      AC_MSG_RESULT([$lt_cv_archive_cmds_need_lc])
      ;;
    esac
  fi
  need_lc=${lt_cv_archive_cmds_need_lc-yes}
  
  # The second clause should only fire when bootstrapping the
  # libtool distribution, otherwise you forgot to ship ltmain.sh
  # with your package, and you will get complaints that there are
  # no rules to generate ltmain.sh.
  if test -f "$ltmain"; then
    :
  else
    # If there is no Makefile yet, we rely on a make rule to execute
    # `config.status --recheck' to rerun these tests and create the
    # libtool script then.
    test -f Makefile && make "$ltmain"
  fi
  
  if test -f "$ltmain"; then
    trap "$rm \"${ofile}T\"; exit 1" 1 2 15
    $rm -f "${ofile}T"
  
    echo creating $ofile
  
    # Now quote all the things that may contain metacharacters while being
    # careful not to overquote the AC_SUBSTed values.  We take copies of the
    # variables and quote the copies for generation of the libtool script.
    for var in echo old_CC old_CFLAGS \
      AR AR_FLAGS CC LD LN_S NM SHELL \
      reload_flag reload_cmds wl \
      pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \
      thread_safe_flag_spec whole_archive_flag_spec libname_spec \
      library_names_spec soname_spec \
      RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \
      old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds \
      postuninstall_cmds extract_expsyms_cmds old_archive_from_expsyms_cmds \
      old_striplib striplib file_magic_cmd export_symbols_cmds \
      deplibs_check_method allow_undefined_flag no_undefined_flag \
      finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \
      global_symbol_to_c_name_address \
      hardcode_libdir_flag_spec hardcode_libdir_separator  \
      sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
      compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do
  
      case $var in
      reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \
      old_postinstall_cmds | old_postuninstall_cmds | \
      export_symbols_cmds | archive_cmds | archive_expsym_cmds | \
      extract_expsyms_cmds | old_archive_from_expsyms_cmds | \
      postinstall_cmds | postuninstall_cmds | \
      finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
        # Double-quote double-evaled strings.
        eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
        ;;
      *)
        eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
        ;;
      esac
    done
  
    cat <<__EOF__ > "${ofile}T"
  #! $SHELL
  
  # `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
  # Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
  # NOTE: Changes made to this file will be lost: look at ltmain.sh.
  #
  # Copyright (C) 1996-2000 Free Software Foundation, Inc.
  # Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
  #
  # This program is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 2 of the License, or
  # (at your option) any later version.
  #
  # This program is distributed in the hope that it will be useful, but
  # WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  # General Public License for more details.
  #
  # You should have received a copy of the GNU General Public License
  # along with this program; if not, write to the Free Software
  # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  #
  # As a special exception to the GNU General Public License, if you
  # distribute this file as part of a program that contains a
  # configuration script generated by Autoconf, you may include it under
  # the same distribution terms that you use for the rest of that program.
  
  # Sed that helps us avoid accidentally triggering echo(1) options like -n.
  Xsed="sed -e s/^X//"
  
  # The HP-UX ksh and POSIX shell print the target directory to stdout
  # if CDPATH is set.
  if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
  
  # ### BEGIN LIBTOOL CONFIG
  
  # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
  
  # Shell to use when invoking shell scripts.
  SHELL=$lt_SHELL
  
  # Whether or not to build shared libraries.
  build_libtool_libs=$enable_shared
  
  # Whether or not to build static libraries.
  build_old_libs=$enable_static
  
  # Whether or not to add -lc for building shared libraries.
  build_libtool_need_lc=$need_lc
  
  # Whether or not to optimize for fast installation.
  fast_install=$enable_fast_install
  
  # The host system.
  host_alias=$host_alias
  host=$host
  
  # An echo program that does not interpret backslashes.
  echo=$lt_echo
  
  # The archiver.
  AR=$lt_AR
  AR_FLAGS=$lt_AR_FLAGS
  
  # The default C compiler.
  CC=$lt_CC
  
  # Is the compiler the GNU C compiler?
  with_gcc=$GCC
  
  # The linker used to build libraries.
  LD=$lt_LD
  
  # Whether we need hard or soft links.
  LN_S=$lt_LN_S
  
  # A BSD-compatible nm program.
  NM=$lt_NM
  
  # A symbol stripping program
  STRIP=$STRIP
  
  # Used to examine libraries when file_magic_cmd begins "file"
  MAGIC_CMD=$MAGIC_CMD
  
  # Used on cygwin: DLL creation program.
  DLLTOOL="$DLLTOOL"
  
  # Used on cygwin: object dumper.
  OBJDUMP="$OBJDUMP"
  
  # Used on cygwin: assembler.
  AS="$AS"
  
  # The name of the directory that contains temporary libtool files.
  objdir=$objdir
  
  # How to create reloadable object files.
  reload_flag=$lt_reload_flag
  reload_cmds=$lt_reload_cmds
  
  # How to pass a linker flag through the compiler.
  wl=$lt_wl
  
  # Object file suffix (normally "o").
  objext="$ac_objext"
  
  # Old archive suffix (normally "a").
  libext="$libext"
  
  # Executable file suffix (normally "").
  exeext="$exeext"
  
  # Additional compiler flags for building library objects.
  pic_flag=$lt_pic_flag
  pic_mode=$pic_mode
  
  # Does compiler simultaneously support -c and -o options?
  compiler_c_o=$lt_compiler_c_o
  
  # Can we write directly to a .lo ?
  compiler_o_lo=$lt_compiler_o_lo
  
  # Must we lock files when doing compilation ?
  need_locks=$lt_need_locks
  
  # Do we need the lib prefix for modules?
  need_lib_prefix=$need_lib_prefix
  
  # Do we need a version for libraries?
  need_version=$need_version
  
  # Whether dlopen is supported.
  dlopen_support=$enable_dlopen
  
  # Whether dlopen of programs is supported.
  dlopen_self=$enable_dlopen_self
  
  # Whether dlopen of statically linked programs is supported.
  dlopen_self_static=$enable_dlopen_self_static
  
  # Compiler flag to prevent dynamic linking.
  link_static_flag=$lt_link_static_flag
  
  # Compiler flag to turn off builtin functions.
  no_builtin_flag=$lt_no_builtin_flag
  
  # Compiler flag to allow reflexive dlopens.
  export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
  
  # Compiler flag to generate shared objects directly from archives.
  whole_archive_flag_spec=$lt_whole_archive_flag_spec
  
  # Compiler flag to generate thread-safe objects.
  thread_safe_flag_spec=$lt_thread_safe_flag_spec
  
  # Library versioning type.
  version_type=$version_type
  
  # Format of library name prefix.
  libname_spec=$lt_libname_spec
  
  # List of archive names.  First name is the real one, the rest are links.
  # The last name is the one that the linker finds with -lNAME.
  library_names_spec=$lt_library_names_spec
  
  # The coded name of the library, if different from the real name.
  soname_spec=$lt_soname_spec
  
  # Commands used to build and install an old-style archive.
  RANLIB=$lt_RANLIB
  old_archive_cmds=$lt_old_archive_cmds
  old_postinstall_cmds=$lt_old_postinstall_cmds
  old_postuninstall_cmds=$lt_old_postuninstall_cmds
  
  # Create an old-style archive from a shared archive.
  old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
  
  # Create a temporary old-style archive to link instead of a shared archive.
  old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
  
  # Commands used to build and install a shared archive.
  archive_cmds=$lt_archive_cmds
  archive_expsym_cmds=$lt_archive_expsym_cmds
  postinstall_cmds=$lt_postinstall_cmds
  postuninstall_cmds=$lt_postuninstall_cmds
  
  # Commands to strip libraries.
  old_striplib=$lt_old_striplib
  striplib=$lt_striplib
  
  # Method to check whether dependent libraries are shared objects.
  deplibs_check_method=$lt_deplibs_check_method
  
  # Command to use when deplibs_check_method == file_magic.
  file_magic_cmd=$lt_file_magic_cmd
  
  # Flag that allows shared libraries with undefined symbols to be built.
  allow_undefined_flag=$lt_allow_undefined_flag
  
  # Flag that forces no undefined symbols.
  no_undefined_flag=$lt_no_undefined_flag
  
  # Commands used to finish a libtool library installation in a directory.
  finish_cmds=$lt_finish_cmds
  
  # Same as above, but a single script fragment to be evaled but not shown.
  finish_eval=$lt_finish_eval
  
  # Take the output of nm and produce a listing of raw symbols and C names.
  global_symbol_pipe=$lt_global_symbol_pipe
  
  # Transform the output of nm in a proper C declaration
  global_symbol_to_cdecl=$lt_global_symbol_to_cdecl
  
  # Transform the output of nm in a C name address pair
  global_symbol_to_c_name_address=$lt_global_symbol_to_c_name_address
  
  # This is the shared library runtime path variable.
  runpath_var=$runpath_var
  
  # This is the shared library path variable.
  shlibpath_var=$shlibpath_var
  
  # Is shlibpath searched before the hard-coded library search path?
  shlibpath_overrides_runpath=$shlibpath_overrides_runpath
  
  # How to hardcode a shared library path into an executable.
  hardcode_action=$hardcode_action
  
  # Whether we should hardcode library paths into libraries.
  hardcode_into_libs=$hardcode_into_libs
  
  # Flag to hardcode \$libdir into a binary during linking.
  # This must work even if \$libdir does not exist.
  hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
  
  # Whether we need a single -rpath flag with a separated argument.
  hardcode_libdir_separator=$lt_hardcode_libdir_separator
  
  # Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
  # resulting binary.
  hardcode_direct=$hardcode_direct
  
  # Set to yes if using the -LDIR flag during linking hardcodes DIR into the
  # resulting binary.
  hardcode_minus_L=$hardcode_minus_L
  
  # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
  # the resulting binary.
  hardcode_shlibpath_var=$hardcode_shlibpath_var
  
  # Variables whose values should be saved in libtool wrapper scripts and
  # restored at relink time.
  variables_saved_for_relink="$variables_saved_for_relink"
  
  # Whether libtool must link a program against all its dependency libraries.
  link_all_deplibs=$link_all_deplibs
  
  # Compile-time system search path for libraries
  sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
  
  # Run-time system search path for libraries
  sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
  
  # Fix the shell variable \$srcfile for the compiler.
  fix_srcfile_path="$fix_srcfile_path"
  
  # Set to yes if exported symbols are required.
  always_export_symbols=$always_export_symbols
  
  # The commands to list exported symbols.
  export_symbols_cmds=$lt_export_symbols_cmds
  
  # The commands to extract the exported symbol list from a shared archive.
  extract_expsyms_cmds=$lt_extract_expsyms_cmds
  
  # Symbols that should not be listed in the preloaded symbols.
  exclude_expsyms=$lt_exclude_expsyms
  
  # Symbols that must always be exported.
  include_expsyms=$lt_include_expsyms
  
  # ### END LIBTOOL CONFIG
  
  __EOF__
  
    case $host_os in
    aix3*)
      cat <<\EOF >> "${ofile}T"
  
  # AIX sometimes has problems with the GCC collect2 program.  For some
  # reason, if we set the COLLECT_NAMES environment variable, the problems
  # vanish in a puff of smoke.
  if test "X${COLLECT_NAMES+set}" != Xset; then
    COLLECT_NAMES=
    export COLLECT_NAMES
  fi
  EOF
      ;;
    esac
  
    case $host_os in
    cygwin* | mingw* | pw32* | os2*)
      cat <<'EOF' >> "${ofile}T"
        # This is a source program that is used to create dlls on Windows
        # Don't remove nor modify the starting and closing comments
  # /* ltdll.c starts here */
  # #define WIN32_LEAN_AND_MEAN
  # #include <windows.h>
  # #undef WIN32_LEAN_AND_MEAN
  # #include <stdio.h>
  #
  # #ifndef __CYGWIN__
  # #  ifdef __CYGWIN32__
  # #    define __CYGWIN__ __CYGWIN32__
  # #  endif
  # #endif
  #
  # #ifdef __cplusplus
  # extern "C" {
  # #endif
  # BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
  # #ifdef __cplusplus
  # }
  # #endif
  #
  # #ifdef __CYGWIN__
  # #include <cygwin/cygwin_dll.h>
  # DECLARE_CYGWIN_DLL( DllMain );
  # #endif
  # HINSTANCE __hDllInstance_base;
  #
  # BOOL APIENTRY
  # DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
  # {
  #   __hDllInstance_base = hInst;
  #   return TRUE;
  # }
  # /* ltdll.c ends here */
  	# This is a source program that is used to create import libraries
  	# on Windows for dlls which lack them. Don't remove nor modify the
  	# starting and closing comments
  # /* impgen.c starts here */
  # /*   Copyright (C) 1999-2000 Free Software Foundation, Inc.
  #
  #  This file is part of GNU libtool.
  #
  #  This program is free software; you can redistribute it and/or modify
  #  it under the terms of the GNU General Public License as published by
  #  the Free Software Foundation; either version 2 of the License, or
  #  (at your option) any later version.
  #
  #  This program is distributed in the hope that it will be useful,
  #  but WITHOUT ANY WARRANTY; without even the implied warranty of
  #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  #  GNU General Public License for more details.
  #
  #  You should have received a copy of the GNU General Public License
  #  along with this program; if not, write to the Free Software
  #  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  #  */
  #
  # #include <stdio.h>		/* for printf() */
  # #include <unistd.h>		/* for open(), lseek(), read() */
  # #include <fcntl.h>		/* for O_RDONLY, O_BINARY */
  # #include <string.h>		/* for strdup() */
  #
  # /* O_BINARY isn't required (or even defined sometimes) under Unix */
  # #ifndef O_BINARY
  # #define O_BINARY 0
  # #endif
  #
  # static unsigned int
  # pe_get16 (fd, offset)
  #      int fd;
  #      int offset;
  # {
  #   unsigned char b[2];
  #   lseek (fd, offset, SEEK_SET);
  #   read (fd, b, 2);
  #   return b[0] + (b[1]<<8);
  # }
  #
  # static unsigned int
  # pe_get32 (fd, offset)
  #     int fd;
  #     int offset;
  # {
  #   unsigned char b[4];
  #   lseek (fd, offset, SEEK_SET);
  #   read (fd, b, 4);
  #   return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
  # }
  #
  # static unsigned int
  # pe_as32 (ptr)
  #      void *ptr;
  # {
  #   unsigned char *b = ptr;
  #   return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
  # }
  #
  # int
  # main (argc, argv)
  #     int argc;
  #     char *argv[];
  # {
  #     int dll;
  #     unsigned long pe_header_offset, opthdr_ofs, num_entries, i;
  #     unsigned long export_rva, export_size, nsections, secptr, expptr;
  #     unsigned long name_rvas, nexp;
  #     unsigned char *expdata, *erva;
  #     char *filename, *dll_name;
  #
  #     filename = argv[1];
  #
  #     dll = open(filename, O_RDONLY|O_BINARY);
  #     if (dll < 1)
  # 	return 1;
  #
  #     dll_name = filename;
  #
  #     for (i=0; filename[i]; i++)
  # 	if (filename[i] == '/' || filename[i] == '\\'  || filename[i] == ':')
  # 	    dll_name = filename + i +1;
  #
  #     pe_header_offset = pe_get32 (dll, 0x3c);
  #     opthdr_ofs = pe_header_offset + 4 + 20;
  #     num_entries = pe_get32 (dll, opthdr_ofs + 92);
  #
  #     if (num_entries < 1) /* no exports */
  # 	return 1;
  #
  #     export_rva = pe_get32 (dll, opthdr_ofs + 96);
  #     export_size = pe_get32 (dll, opthdr_ofs + 100);
  #     nsections = pe_get16 (dll, pe_header_offset + 4 +2);
  #     secptr = (pe_header_offset + 4 + 20 +
  # 	      pe_get16 (dll, pe_header_offset + 4 + 16));
  #
  #     expptr = 0;
  #     for (i = 0; i < nsections; i++)
  #     {
  # 	char sname[8];
  # 	unsigned long secptr1 = secptr + 40 * i;
  # 	unsigned long vaddr = pe_get32 (dll, secptr1 + 12);
  # 	unsigned long vsize = pe_get32 (dll, secptr1 + 16);
  # 	unsigned long fptr = pe_get32 (dll, secptr1 + 20);
  # 	lseek(dll, secptr1, SEEK_SET);
  # 	read(dll, sname, 8);
  # 	if (vaddr <= export_rva && vaddr+vsize > export_rva)
  # 	{
  # 	    expptr = fptr + (export_rva - vaddr);
  # 	    if (export_rva + export_size > vaddr + vsize)
  # 		export_size = vsize - (export_rva - vaddr);
  # 	    break;
  # 	}
  #     }
  #
  #     expdata = (unsigned char*)malloc(export_size);
  #     lseek (dll, expptr, SEEK_SET);
  #     read (dll, expdata, export_size);
  #     erva = expdata - export_rva;
  #
  #     nexp = pe_as32 (expdata+24);
  #     name_rvas = pe_as32 (expdata+32);
  #
  #     printf ("EXPORTS\n");
  #     for (i = 0; i<nexp; i++)
  #     {
  # 	unsigned long name_rva = pe_as32 (erva+name_rvas+i*4);
  # 	printf ("\t%s @ %ld ;\n", erva+name_rva, 1+ i);
  #     }
  #
  #     return 0;
  # }
  # /* impgen.c ends here */
  
  EOF
      ;;
    esac
  
    # We use sed instead of cat because bash on DJGPP gets confused if
    # if finds mixed CR/LF and LF-only lines.  Since sed operates in
    # text mode, it properly converts lines to CR/LF.  This bash problem
    # is reportedly fixed, but why not run on old versions too?
    sed '$q' "$ltmain" >> "${ofile}T" || (rm -f "${ofile}T"; exit 1)
  
    mv -f "${ofile}T" "$ofile" || \
      (rm -f "$ofile" && cp "${ofile}T" "$ofile" && rm -f "${ofile}T")
    chmod +x "$ofile"
  fi
  
  ])# _LT_AC_LTCONFIG_HACK
  
  # AC_LIBTOOL_DLOPEN - enable checks for dlopen support
  AC_DEFUN([AC_LIBTOOL_DLOPEN], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])])
  
  # AC_LIBTOOL_WIN32_DLL - declare package support for building win32 dll's
  AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_BEFORE([$0], [AC_LIBTOOL_SETUP])])
  
  # AC_ENABLE_SHARED - implement the --enable-shared flag
  # Usage: AC_ENABLE_SHARED[(DEFAULT)]
  #   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
  #   `yes'.
  AC_DEFUN([AC_ENABLE_SHARED],
  [define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
  AC_ARG_ENABLE(shared,
  changequote(<<, >>)dnl
  <<  --enable-shared[=PKGS]  build shared libraries [default=>>AC_ENABLE_SHARED_DEFAULT],
  changequote([, ])dnl
  [p=${PACKAGE-default}
  case $enableval in
  yes) enable_shared=yes ;;
  no) enable_shared=no ;;
  *)
    enable_shared=no
    # Look at the argument we got.  We use all the common list separators.
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
    for pkg in $enableval; do
      if test "X$pkg" = "X$p"; then
        enable_shared=yes
      fi
    done
    IFS="$ac_save_ifs"
    ;;
  esac],
  enable_shared=AC_ENABLE_SHARED_DEFAULT)dnl
  ])
  
  # AC_DISABLE_SHARED - set the default shared flag to --disable-shared
  AC_DEFUN([AC_DISABLE_SHARED],
  [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
  AC_ENABLE_SHARED(no)])
  
  # AC_ENABLE_STATIC - implement the --enable-static flag
  # Usage: AC_ENABLE_STATIC[(DEFAULT)]
  #   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
  #   `yes'.
  AC_DEFUN([AC_ENABLE_STATIC],
  [define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
  AC_ARG_ENABLE(static,
  changequote(<<, >>)dnl
  <<  --enable-static[=PKGS]  build static libraries [default=>>AC_ENABLE_STATIC_DEFAULT],
  changequote([, ])dnl
  [p=${PACKAGE-default}
  case $enableval in
  yes) enable_static=yes ;;
  no) enable_static=no ;;
  *)
    enable_static=no
    # Look at the argument we got.  We use all the common list separators.
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
    for pkg in $enableval; do
      if test "X$pkg" = "X$p"; then
        enable_static=yes
      fi
    done
    IFS="$ac_save_ifs"
    ;;
  esac],
  enable_static=AC_ENABLE_STATIC_DEFAULT)dnl
  ])
  
  # AC_DISABLE_STATIC - set the default static flag to --disable-static
  AC_DEFUN([AC_DISABLE_STATIC],
  [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
  AC_ENABLE_STATIC(no)])
  
  
  # AC_ENABLE_FAST_INSTALL - implement the --enable-fast-install flag
  # Usage: AC_ENABLE_FAST_INSTALL[(DEFAULT)]
  #   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
  #   `yes'.
  AC_DEFUN([AC_ENABLE_FAST_INSTALL],
  [define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
  AC_ARG_ENABLE(fast-install,
  changequote(<<, >>)dnl
  <<  --enable-fast-install[=PKGS]  optimize for fast installation [default=>>AC_ENABLE_FAST_INSTALL_DEFAULT],
  changequote([, ])dnl
  [p=${PACKAGE-default}
  case $enableval in
  yes) enable_fast_install=yes ;;
  no) enable_fast_install=no ;;
  *)
    enable_fast_install=no
    # Look at the argument we got.  We use all the common list separators.
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
    for pkg in $enableval; do
      if test "X$pkg" = "X$p"; then
        enable_fast_install=yes
      fi
    done
    IFS="$ac_save_ifs"
    ;;
  esac],
  enable_fast_install=AC_ENABLE_FAST_INSTALL_DEFAULT)dnl
  ])
  
  # AC_DISABLE_FAST_INSTALL - set the default to --disable-fast-install
  AC_DEFUN([AC_DISABLE_FAST_INSTALL],
  [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
  AC_ENABLE_FAST_INSTALL(no)])
  
  # AC_LIBTOOL_PICMODE - implement the --with-pic flag
  # Usage: AC_LIBTOOL_PICMODE[(MODE)]
  #   Where MODE is either `yes' or `no'.  If omitted, it defaults to
  #   `both'.
  AC_DEFUN([AC_LIBTOOL_PICMODE],
  [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
  pic_mode=ifelse($#,1,$1,default)])
  
  
  # AC_PATH_TOOL_PREFIX - find a file program which can recognise shared library
  AC_DEFUN([AC_PATH_TOOL_PREFIX],
  [AC_MSG_CHECKING([for $1])
  AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
  [case $MAGIC_CMD in
    /*)
    lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
    ;;
    ?:/*)
    lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path.
    ;;
    *)
    ac_save_MAGIC_CMD="$MAGIC_CMD"
    IFS="${IFS=   }"; ac_save_ifs="$IFS"; IFS=":"
  dnl $ac_dummy forces splitting on constant user-supplied paths.
  dnl POSIX.2 word splitting is done only on the output of word expansions,
  dnl not every word.  This closes a longstanding sh security hole.
    ac_dummy="ifelse([$2], , $PATH, [$2])"
    for ac_dir in $ac_dummy; do
      test -z "$ac_dir" && ac_dir=.
      if test -f $ac_dir/$1; then
        lt_cv_path_MAGIC_CMD="$ac_dir/$1"
        if test -n "$file_magic_test_file"; then
  	case $deplibs_check_method in
  	"file_magic "*)
  	  file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
  	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
  	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
  	    egrep "$file_magic_regex" > /dev/null; then
  	    :
  	  else
  	    cat <<EOF 1>&2
  
  *** Warning: the command libtool uses to detect shared libraries,
  *** $file_magic_cmd, produces output that libtool cannot recognize.
  *** The result is that libtool may fail to recognize shared libraries
  *** as such.  This will affect the creation of libtool libraries that
  *** depend on shared libraries, but programs linked with such libtool
  *** libraries will work regardless of this problem.  Nevertheless, you
  *** may want to report the problem to your system manager and/or to
  *** bug-libtool@gnu.org
  
  EOF
  	  fi ;;
  	esac
        fi
        break
      fi
    done
    IFS="$ac_save_ifs"
    MAGIC_CMD="$ac_save_MAGIC_CMD"
    ;;
  esac])
  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
  if test -n "$MAGIC_CMD"; then
    AC_MSG_RESULT($MAGIC_CMD)
  else
    AC_MSG_RESULT(no)
  fi
  ])
  
  
  # AC_PATH_MAGIC - find a file program which can recognise a shared library
  AC_DEFUN([AC_PATH_MAGIC],
  [AC_REQUIRE([AC_CHECK_TOOL_PREFIX])dnl
  AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin:$PATH)
  if test -z "$lt_cv_path_MAGIC_CMD"; then
    if test -n "$ac_tool_prefix"; then
      AC_PATH_TOOL_PREFIX(file, /usr/bin:$PATH)
    else
      MAGIC_CMD=:
    fi
  fi
  ])
  
  
  # AC_PROG_LD - find the path to the GNU or non-GNU linker
  AC_DEFUN([AC_PROG_LD],
  [AC_ARG_WITH(gnu-ld,
  [  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]],
  test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
  AC_REQUIRE([AC_PROG_CC])dnl
  AC_REQUIRE([AC_CANONICAL_HOST])dnl
  AC_REQUIRE([AC_CANONICAL_BUILD])dnl
  AC_REQUIRE([_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR])dnl
  ac_prog=ld
  if test "$GCC" = yes; then
    # Check if gcc -print-prog-name=ld gives a path.
    AC_MSG_CHECKING([for ld used by GCC])
    case $host in
    *-*-mingw*)
      # gcc leaves a trailing carriage return which upsets mingw
      ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
    *)
      ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
    esac
    case $ac_prog in
      # Accept absolute paths.
      [[\\/]]* | [[A-Za-z]]:[[\\/]]*)
        re_direlt='/[[^/]][[^/]]*/\.\./'
        # Canonicalize the path of ld
        ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
        while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
  	ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
        done
        test -z "$LD" && LD="$ac_prog"
        ;;
    "")
      # If it fails, then pretend we aren't using GCC.
      ac_prog=ld
      ;;
    *)
      # If it is relative, then search for the first ld in PATH.
      with_gnu_ld=unknown
      ;;
    esac
  elif test "$with_gnu_ld" = yes; then
    AC_MSG_CHECKING([for GNU ld])
  else
    AC_MSG_CHECKING([for non-GNU ld])
  fi
  AC_CACHE_VAL(lt_cv_path_LD,
  [if test -z "$LD"; then
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
    for ac_dir in $PATH; do
      test -z "$ac_dir" && ac_dir=.
      if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
        lt_cv_path_LD="$ac_dir/$ac_prog"
        # Check to see if the program is GNU ld.  I'd rather use --version,
        # but apparently some GNU ld's only accept -v.
        # Break only if it was the GNU/non-GNU ld that we prefer.
        if "$lt_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
  	test "$with_gnu_ld" != no && break
        else
  	test "$with_gnu_ld" != yes && break
        fi
      fi
    done
    IFS="$ac_save_ifs"
  else
    lt_cv_path_LD="$LD" # Let the user override the test with a path.
  fi])
  LD="$lt_cv_path_LD"
  if test -n "$LD"; then
    AC_MSG_RESULT($LD)
  else
    AC_MSG_RESULT(no)
  fi
  test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
  AC_PROG_LD_GNU
  ])
  
  # AC_PROG_LD_GNU -
  AC_DEFUN([AC_PROG_LD_GNU],
  [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
  [# I'd rather use --version here, but apparently some GNU ld's only accept -v.
  if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
    lt_cv_prog_gnu_ld=yes
  else
    lt_cv_prog_gnu_ld=no
  fi])
  with_gnu_ld=$lt_cv_prog_gnu_ld
  ])
  
  # AC_PROG_LD_RELOAD_FLAG - find reload flag for linker
  #   -- PORTME Some linkers may need a different reload flag.
  AC_DEFUN([AC_PROG_LD_RELOAD_FLAG],
  [AC_CACHE_CHECK([for $LD option to reload object files], lt_cv_ld_reload_flag,
  [lt_cv_ld_reload_flag='-r'])
  reload_flag=$lt_cv_ld_reload_flag
  test -n "$reload_flag" && reload_flag=" $reload_flag"
  ])
  
  # AC_DEPLIBS_CHECK_METHOD - how to check for library dependencies
  #  -- PORTME fill in with the dynamic library characteristics
  AC_DEFUN([AC_DEPLIBS_CHECK_METHOD],
  [AC_CACHE_CHECK([how to recognise dependant libraries],
  lt_cv_deplibs_check_method,
  [lt_cv_file_magic_cmd='$MAGIC_CMD'
  lt_cv_file_magic_test_file=
  lt_cv_deplibs_check_method='unknown'
  # Need to set the preceding variable on all platforms that support
  # interlibrary dependencies.
  # 'none' -- dependencies not supported.
  # `unknown' -- same as none, but documents that we really don't know.
  # 'pass_all' -- all dependencies passed with no checks.
  # 'test_compile' -- check by making test program.
  # 'file_magic [[regex]]' -- check by looking for files in library path
  # which responds to the $file_magic_cmd with a given egrep regex.
  # If you have `file' or equivalent on your system and you're not sure
  # whether `pass_all' will *always* work, you probably want this one.
  
  case $host_os in
  aix4* | aix5*)
    lt_cv_deplibs_check_method=pass_all
    ;;
  
  beos*)
    lt_cv_deplibs_check_method=pass_all
    ;;
  
  bsdi4*)
    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
    lt_cv_file_magic_cmd='/usr/bin/file -L'
    lt_cv_file_magic_test_file=/shlib/libc.so
    ;;
  
  cygwin* | mingw* | pw32*)
    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
    lt_cv_file_magic_cmd='$OBJDUMP -f'
    ;;
  
  darwin* | rhapsody*)
    lt_cv_deplibs_check_method='file_magic Mach-O dynamically linked shared library'
    lt_cv_file_magic_cmd='/usr/bin/file -L'
    case "$host_os" in
    rhapsody* | darwin1.[[012]])
      lt_cv_file_magic_test_file=`echo /System/Library/Frameworks/System.framework/Versions/*/System | head -1`
      ;;
    *) # Darwin 1.3 on
      lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib'
      ;;
    esac
    ;;
  
  freebsd*)
    if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
      case $host_cpu in
      i*86 )
        # Not sure whether the presence of OpenBSD here was a mistake.
        # Let's accept both of them until this is cleared up.
        lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[[3-9]]86 (compact )?demand paged shared library'
        lt_cv_file_magic_cmd=/usr/bin/file
        lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
        ;;
      esac
    else
      lt_cv_deplibs_check_method=pass_all
    fi
    ;;
  
  gnu*)
    lt_cv_deplibs_check_method=pass_all
    ;;
  
  hpux10.20*|hpux11*)
    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
    lt_cv_file_magic_cmd=/usr/bin/file
    lt_cv_file_magic_test_file=/usr/lib/libc.sl
    ;;
  
  irix5* | irix6*)
    case $host_os in
    irix5*)
      # this will be overridden with pass_all, but let us keep it just in case
      lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1"
      ;;
    *)
      case $LD in
      *-32|*"-32 ") libmagic=32-bit;;
      *-n32|*"-n32 ") libmagic=N32;;
      *-64|*"-64 ") libmagic=64-bit;;
      *) libmagic=never-match;;
      esac
      # this will be overridden with pass_all, but let us keep it just in case
      lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[[1234]] dynamic lib MIPS - version 1"
      ;;
    esac
    lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*`
    lt_cv_deplibs_check_method=pass_all
    ;;
  
  # This must be Linux ELF.
  linux-gnu*)
    case $host_cpu in
    alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* )
      lt_cv_deplibs_check_method=pass_all ;;
    *)
      # glibc up to 2.1.1 does not perform some relocations on ARM
      lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;;
    esac
    lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
    ;;
  
  netbsd*)
    if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
      lt_cv_deplibs_check_method='match_pattern /lib[[^/\.]]+\.so\.[[0-9]]+\.[[0-9]]+$'
    else
      lt_cv_deplibs_check_method='match_pattern /lib[[^/\.]]+\.so$'
    fi
    ;;
  
  newos6*)
    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
    lt_cv_file_magic_cmd=/usr/bin/file
    lt_cv_file_magic_test_file=/usr/lib/libnls.so
    ;;
  
  openbsd*)
    lt_cv_file_magic_cmd=/usr/bin/file
    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
    if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
      lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB shared object'
    else
      lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library'
    fi
    ;;
  
  osf3* | osf4* | osf5*)
    # this will be overridden with pass_all, but let us keep it just in case
    lt_cv_deplibs_check_method='file_magic COFF format alpha shared library'
    lt_cv_file_magic_test_file=/shlib/libc.so
    lt_cv_deplibs_check_method=pass_all
    ;;
  
  sco3.2v5*)
    lt_cv_deplibs_check_method=pass_all
    ;;
  
  solaris*)
    lt_cv_deplibs_check_method=pass_all
    lt_cv_file_magic_test_file=/lib/libc.so
    ;;
  
  sysv5uw[[78]]* | sysv4*uw2*)
    lt_cv_deplibs_check_method=pass_all
    ;;
  
  sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
    case $host_vendor in
    motorola)
      lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
      ;;
    ncr)
      lt_cv_deplibs_check_method=pass_all
      ;;
    sequent)
      lt_cv_file_magic_cmd='/bin/file'
      lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
      ;;
    sni)
      lt_cv_file_magic_cmd='/bin/file'
      lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
      lt_cv_file_magic_test_file=/lib/libc.so
      ;;
    esac
    ;;
  esac
  ])
  file_magic_cmd=$lt_cv_file_magic_cmd
  deplibs_check_method=$lt_cv_deplibs_check_method
  ])
  
  
  # AC_PROG_NM - find the path to a BSD-compatible name lister
  AC_DEFUN([AC_PROG_NM],
  [AC_REQUIRE([_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR])dnl
  AC_MSG_CHECKING([for BSD-compatible nm])
  AC_CACHE_VAL(lt_cv_path_NM,
  [if test -n "$NM"; then
    # Let the user override the test.
    lt_cv_path_NM="$NM"
  else
    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
    for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
      test -z "$ac_dir" && ac_dir=.
      tmp_nm=$ac_dir/${ac_tool_prefix}nm
      if test -f $tmp_nm || test -f $tmp_nm$ac_exeext ; then
        # Check to see if the nm accepts a BSD-compat flag.
        # Adding the `sed 1q' prevents false positives on HP-UX, which says:
        #   nm: unknown option "B" ignored
        # Tru64's nm complains that /dev/null is an invalid object file
        if ($tmp_nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep '(/dev/null|Invalid file or object type)' >/dev/null; then
  	lt_cv_path_NM="$tmp_nm -B"
  	break
        elif ($tmp_nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
  	lt_cv_path_NM="$tmp_nm -p"
  	break
        else
  	lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
  	continue # so that we can try to find one that supports BSD flags
        fi
      fi
    done
    IFS="$ac_save_ifs"
    test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
  fi])
  NM="$lt_cv_path_NM"
  AC_MSG_RESULT([$NM])
  ])
  
  # AC_CHECK_LIBM - check for math library
  AC_DEFUN([AC_CHECK_LIBM],
  [AC_REQUIRE([AC_CANONICAL_HOST])dnl
  LIBM=
  case $host in
  *-*-beos* | *-*-cygwin* | *-*-pw32*)
    # These system don't have libm
    ;;
  *-ncr-sysv4.3*)
    AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
    AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
    ;;
  *)
    AC_CHECK_LIB(m, main, LIBM="-lm")
    ;;
  esac
  ])
  
  # AC_LIBLTDL_CONVENIENCE[(dir)] - sets LIBLTDL to the link flags for
  # the libltdl convenience library and INCLTDL to the include flags for
  # the libltdl header and adds --enable-ltdl-convenience to the
  # configure arguments.  Note that LIBLTDL and INCLTDL are not
  # AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called.  If DIR is not
  # provided, it is assumed to be `libltdl'.  LIBLTDL will be prefixed
  # with '${top_builddir}/' and INCLTDL will be prefixed with
  # '${top_srcdir}/' (note the single quotes!).  If your package is not
  # flat and you're not using automake, define top_builddir and
  # top_srcdir appropriately in the Makefiles.
  AC_DEFUN([AC_LIBLTDL_CONVENIENCE],
  [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
    case $enable_ltdl_convenience in
    no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
    "") enable_ltdl_convenience=yes
        ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
    esac
    LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la
    INCLTDL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
  ])
  
  # AC_LIBLTDL_INSTALLABLE[(dir)] - sets LIBLTDL to the link flags for
  # the libltdl installable library and INCLTDL to the include flags for
  # the libltdl header and adds --enable-ltdl-install to the configure
  # arguments.  Note that LIBLTDL and INCLTDL are not AC_SUBSTed, nor is
  # AC_CONFIG_SUBDIRS called.  If DIR is not provided and an installed
  # libltdl is not found, it is assumed to be `libltdl'.  LIBLTDL will
  # be prefixed with '${top_builddir}/' and INCLTDL will be prefixed
  # with '${top_srcdir}/' (note the single quotes!).  If your package is
  # not flat and you're not using automake, define top_builddir and
  # top_srcdir appropriately in the Makefiles.
  # In the future, this macro may have to be called after AC_PROG_LIBTOOL.
  AC_DEFUN([AC_LIBLTDL_INSTALLABLE],
  [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
    AC_CHECK_LIB(ltdl, main,
    [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
    [if test x"$enable_ltdl_install" = xno; then
       AC_MSG_WARN([libltdl not installed, but installation disabled])
     else
       enable_ltdl_install=yes
     fi
    ])
    if test x"$enable_ltdl_install" = x"yes"; then
      ac_configure_args="$ac_configure_args --enable-ltdl-install"
      LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la
      INCLTDL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
    else
      ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
      LIBLTDL="-lltdl"
      INCLTDL=
    fi
  ])
  
  # old names
  AC_DEFUN([AM_PROG_LIBTOOL],   [AC_PROG_LIBTOOL])
  AC_DEFUN([AM_ENABLE_SHARED],  [AC_ENABLE_SHARED($@)])
  AC_DEFUN([AM_ENABLE_STATIC],  [AC_ENABLE_STATIC($@)])
  AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
  AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
  AC_DEFUN([AM_PROG_LD],        [AC_PROG_LD])
  AC_DEFUN([AM_PROG_NM],        [AC_PROG_NM])
  
  # This is just to silence aclocal about the macro not being used
  ifelse([AC_DISABLE_FAST_INSTALL])
  
  Index: ossp-pkg/rc/autogen.sh
  ============================================================
  $ cvs update -p -r1.1 autogen.sh | uuencode autogen.sh
  Index: ossp-pkg/rc/config.guess
  ============================================================
  $ cvs update -p -r1.1 config.guess
  #! /bin/sh
  # Attempt to guess a canonical system name.
  #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
  #   Free Software Foundation, Inc.
  
  timestamp='2001-08-21'
  
  # This file is free software; you can redistribute it and/or modify it
  # under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 2 of the License, or
  # (at your option) any later version.
  #
  # This program is distributed in the hope that it will be useful, but
  # WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  # General Public License for more details.
  #
  # You should have received a copy of the GNU General Public License
  # along with this program; if not, write to the Free Software
  # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  #
  # As a special exception to the GNU General Public License, if you
  # distribute this file as part of a program that contains a
  # configuration script generated by Autoconf, you may include it under
  # the same distribution terms that you use for the rest of that program.
  
  # Written by Per Bothner <bothner@cygnus.com>.
  # Please send patches to <config-patches@gnu.org>.
  #
  # This script attempts to guess a canonical system name similar to
  # config.sub.  If it succeeds, it prints the system name on stdout, and
  # exits with 0.  Otherwise, it exits with 1.
  #
  # The plan is that this can be called by configure scripts if you
  # don't specify an explicit build system type.
  
  me=`echo "$0" | sed -e 's,.*/,,'`
  
  usage="\
  Usage: $0 [OPTION]
  
  Output the configuration name of the system \`$me' is run on.
  
  Operation modes:
    -h, --help         print this help, then exit
    -t, --time-stamp   print date of last modification, then exit
    -v, --version      print version number, then exit
  
  Report bugs and patches to <config-patches@gnu.org>."
  
  version="\
  GNU config.guess ($timestamp)
  
  Originally written by Per Bothner.
  Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
  Free Software Foundation, Inc.
  
  This is free software; see the source for copying conditions.  There is NO
  warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
  
  help="
  Try \`$me --help' for more information."
  
  # Parse command line
  while test $# -gt 0 ; do
    case $1 in
      --time-stamp | --time* | -t )
         echo "$timestamp" ; exit 0 ;;
      --version | -v )
         echo "$version" ; exit 0 ;;
      --help | --h* | -h )
         echo "$usage"; exit 0 ;;
      -- )     # Stop option processing
         shift; break ;;
      - )	# Use stdin as input.
         break ;;
      -* )
         echo "$me: invalid option $1$help" >&2
         exit 1 ;;
      * )
         break ;;
    esac
  done
  
  if test $# != 0; then
    echo "$me: too many arguments$help" >&2
    exit 1
  fi
  
  
  dummy=dummy-$$
  trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15
  
  # CC_FOR_BUILD -- compiler used by this script.
  # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
  # use `HOST_CC' if defined, but it is deprecated.
  
  set_cc_for_build='case $CC_FOR_BUILD,$HOST_CC,$CC in
   ,,)    echo "int dummy(){}" > $dummy.c ;
  	for c in cc gcc c89 ; do
  	  ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ;
  	  if test $? = 0 ; then
  	     CC_FOR_BUILD="$c"; break ;
  	  fi ;
  	done ;
  	rm -f $dummy.c $dummy.o $dummy.rel ;
  	if test x"$CC_FOR_BUILD" = x ; then
  	  CC_FOR_BUILD=no_compiler_found ;
  	fi
  	;;
   ,,*)   CC_FOR_BUILD=$CC ;;
   ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
  esac'
  
  # This is needed to find uname on a Pyramid OSx when run in the BSD universe.
  # (ghazi@noc.rutgers.edu 1994-08-24)
  if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
  	PATH=$PATH:/.attbin ; export PATH
  fi
  
  UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
  UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
  UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
  UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
  
  # Note: order is significant - the case branches are not exclusive.
  
  case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
      *:NetBSD:*:*)
  	# Netbsd (nbsd) targets should (where applicable) match one or
  	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
  	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
  	# switched to ELF, *-*-netbsd* would select the old
  	# object file format.  This provides both forward
  	# compatibility and a consistent mechanism for selecting the
  	# object file format.
  	# Determine the machine/vendor (is the vendor relevant).
  	case "${UNAME_MACHINE}" in
  	    amiga) machine=m68k-unknown ;;
  	    arm32) machine=arm-unknown ;;
  	    atari*) machine=m68k-atari ;;
  	    sun3*) machine=m68k-sun ;;
  	    mac68k) machine=m68k-apple ;;
  	    macppc) machine=powerpc-apple ;;
  	    hp3[0-9][05]) machine=m68k-hp ;;
  	    ibmrt|romp-ibm) machine=romp-ibm ;;
  	    *) machine=${UNAME_MACHINE}-unknown ;;
  	esac
  	# The Operating System including object format, if it has switched
  	# to ELF recently, or will in the future.
  	case "${UNAME_MACHINE}" in
  	    i386|sparc|amiga|arm*|hp300|mvme68k|vax|atari|luna68k|mac68k|news68k|next68k|pc532|sun3*|x68k)
  		eval $set_cc_for_build
  		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
  			| grep __ELF__ >/dev/null
  		then
  		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
  		    # Return netbsd for either.  FIX?
  		    os=netbsd
  		else
  		    os=netbsdelf
  		fi
  		;;
  	    *)
  	        os=netbsd
  		;;
  	esac
  	# The OS release
  	release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
  	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
  	# contains redundant information, the shorter form:
  	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
  	echo "${machine}-${os}${release}"
  	exit 0 ;;
      alpha:OSF1:*:*)
  	if test $UNAME_RELEASE = "V4.0"; then
  		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
  	fi
  	# A Vn.n version is a released version.
  	# A Tn.n version is a released field test version.
  	# A Xn.n version is an unreleased experimental baselevel.
  	# 1.2 uses "1.2" for uname -r.
  	cat <<EOF >$dummy.s
  	.data
  \$Lformat:
  	.byte 37,100,45,37,120,10,0	# "%d-%x\n"
  
  	.text
  	.globl main
  	.align 4
  	.ent main
  main:
  	.frame \$30,16,\$26,0
  	ldgp \$29,0(\$27)
  	.prologue 1
  	.long 0x47e03d80 # implver \$0
  	lda \$2,-1
  	.long 0x47e20c21 # amask \$2,\$1
  	lda \$16,\$Lformat
  	mov \$0,\$17
  	not \$1,\$18
  	jsr \$26,printf
  	ldgp \$29,0(\$26)
  	mov 0,\$16
  	jsr \$26,exit
  	.end main
  EOF
  	eval $set_cc_for_build
  	$CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
  	if test "$?" = 0 ; then
  		case `./$dummy` in
  			0-0)
  				UNAME_MACHINE="alpha"
  				;;
  			1-0)
  				UNAME_MACHINE="alphaev5"
  				;;
  			1-1)
  				UNAME_MACHINE="alphaev56"
  				;;
  			1-101)
  				UNAME_MACHINE="alphapca56"
  				;;
  			2-303)
  				UNAME_MACHINE="alphaev6"
  				;;
  			2-307)
  				UNAME_MACHINE="alphaev67"
  				;;
  			2-1307)
  				UNAME_MACHINE="alphaev68"
  				;;
  		esac
  	fi
  	rm -f $dummy.s $dummy
  	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
  	exit 0 ;;
      Alpha\ *:Windows_NT*:*)
  	# How do we know it's Interix rather than the generic POSIX subsystem?
  	# Should we change UNAME_MACHINE based on the output of uname instead
  	# of the specific Alpha model?
  	echo alpha-pc-interix
  	exit 0 ;;
      21064:Windows_NT:50:3)
  	echo alpha-dec-winnt3.5
  	exit 0 ;;
      Amiga*:UNIX_System_V:4.0:*)
  	echo m68k-unknown-sysv4
  	exit 0;;
      amiga:OpenBSD:*:*)
  	echo m68k-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      *:[Aa]miga[Oo][Ss]:*:*)
  	echo ${UNAME_MACHINE}-unknown-amigaos
  	exit 0 ;;
      arc64:OpenBSD:*:*)
  	echo mips64el-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      arc:OpenBSD:*:*)
  	echo mipsel-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      hkmips:OpenBSD:*:*)
  	echo mips-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      pmax:OpenBSD:*:*)
  	echo mipsel-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      sgi:OpenBSD:*:*)
  	echo mips-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      wgrisc:OpenBSD:*:*)
  	echo mipsel-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      *:OS/390:*:*)
  	echo i370-ibm-openedition
  	exit 0 ;;
      arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
  	echo arm-acorn-riscix${UNAME_RELEASE}
  	exit 0;;
      SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
  	echo hppa1.1-hitachi-hiuxmpp
  	exit 0;;
      Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
  	# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
  	if test "`(/bin/universe) 2>/dev/null`" = att ; then
  		echo pyramid-pyramid-sysv3
  	else
  		echo pyramid-pyramid-bsd
  	fi
  	exit 0 ;;
      NILE*:*:*:dcosx)
  	echo pyramid-pyramid-svr4
  	exit 0 ;;
      sun4H:SunOS:5.*:*)
  	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
  	exit 0 ;;
      sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
  	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
  	exit 0 ;;
      i86pc:SunOS:5.*:*)
  	echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
  	exit 0 ;;
      sun4*:SunOS:6*:*)
  	# According to config.sub, this is the proper way to canonicalize
  	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
  	# it's likely to be more like Solaris than SunOS4.
  	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
  	exit 0 ;;
      sun4*:SunOS:*:*)
  	case "`/usr/bin/arch -k`" in
  	    Series*|S4*)
  		UNAME_RELEASE=`uname -v`
  		;;
  	esac
  	# Japanese Language versions have a version number like `4.1.3-JL'.
  	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
  	exit 0 ;;
      sun3*:SunOS:*:*)
  	echo m68k-sun-sunos${UNAME_RELEASE}
  	exit 0 ;;
      sun*:*:4.2BSD:*)
  	UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
  	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
  	case "`/bin/arch`" in
  	    sun3)
  		echo m68k-sun-sunos${UNAME_RELEASE}
  		;;
  	    sun4)
  		echo sparc-sun-sunos${UNAME_RELEASE}
  		;;
  	esac
  	exit 0 ;;
      aushp:SunOS:*:*)
  	echo sparc-auspex-sunos${UNAME_RELEASE}
  	exit 0 ;;
      sparc*:NetBSD:*)
  	echo `uname -p`-unknown-netbsd${UNAME_RELEASE}
  	exit 0 ;;
      atari*:OpenBSD:*:*)
  	echo m68k-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      # The situation for MiNT is a little confusing.  The machine name
      # can be virtually everything (everything which is not
      # "atarist" or "atariste" at least should have a processor
      # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
      # to the lowercase version "mint" (or "freemint").  Finally
      # the system name "TOS" denotes a system which is actually not
      # MiNT.  But MiNT is downward compatible to TOS, so this should
      # be no problem.
      atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
          echo m68k-atari-mint${UNAME_RELEASE}
  	exit 0 ;;
      atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
  	echo m68k-atari-mint${UNAME_RELEASE}
          exit 0 ;;
      *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
          echo m68k-atari-mint${UNAME_RELEASE}
  	exit 0 ;;
      milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
          echo m68k-milan-mint${UNAME_RELEASE}
          exit 0 ;;
      hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
          echo m68k-hades-mint${UNAME_RELEASE}
          exit 0 ;;
      *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
          echo m68k-unknown-mint${UNAME_RELEASE}
          exit 0 ;;
      sun3*:OpenBSD:*:*)
  	echo m68k-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      mac68k:OpenBSD:*:*)
  	echo m68k-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      mvme68k:OpenBSD:*:*)
  	echo m68k-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      mvme88k:OpenBSD:*:*)
  	echo m88k-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      powerpc:machten:*:*)
  	echo powerpc-apple-machten${UNAME_RELEASE}
  	exit 0 ;;
      RISC*:Mach:*:*)
  	echo mips-dec-mach_bsd4.3
  	exit 0 ;;
      RISC*:ULTRIX:*:*)
  	echo mips-dec-ultrix${UNAME_RELEASE}
  	exit 0 ;;
      VAX*:ULTRIX*:*:*)
  	echo vax-dec-ultrix${UNAME_RELEASE}
  	exit 0 ;;
      2020:CLIX:*:* | 2430:CLIX:*:*)
  	echo clipper-intergraph-clix${UNAME_RELEASE}
  	exit 0 ;;
      mips:*:*:UMIPS | mips:*:*:RISCos)
  	sed 's/^	//' << EOF >$dummy.c
  #ifdef __cplusplus
  #include <stdio.h>  /* for printf() prototype */
  	int main (int argc, char *argv[]) {
  #else
  	int main (argc, argv) int argc; char *argv[]; {
  #endif
  	#if defined (host_mips) && defined (MIPSEB)
  	#if defined (SYSTYPE_SYSV)
  	  printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
  	#endif
  	#if defined (SYSTYPE_SVR4)
  	  printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
  	#endif
  	#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
  	  printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
  	#endif
  	#endif
  	  exit (-1);
  	}
  EOF
  	eval $set_cc_for_build
  	$CC_FOR_BUILD $dummy.c -o $dummy \
  	  && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
  	  && rm -f $dummy.c $dummy && exit 0
  	rm -f $dummy.c $dummy
  	echo mips-mips-riscos${UNAME_RELEASE}
  	exit 0 ;;
      Motorola:PowerMAX_OS:*:*)
  	echo powerpc-motorola-powermax
  	exit 0 ;;
      Night_Hawk:Power_UNIX:*:*)
  	echo powerpc-harris-powerunix
  	exit 0 ;;
      m88k:CX/UX:7*:*)
  	echo m88k-harris-cxux7
  	exit 0 ;;
      m88k:*:4*:R4*)
  	echo m88k-motorola-sysv4
  	exit 0 ;;
      m88k:*:3*:R3*)
  	echo m88k-motorola-sysv3
  	exit 0 ;;
      AViiON:dgux:*:*)
          # DG/UX returns AViiON for all architectures
          UNAME_PROCESSOR=`/usr/bin/uname -p`
  	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
  	then
  	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
  	       [ ${TARGET_BINARY_INTERFACE}x = x ]
  	    then
  		echo m88k-dg-dgux${UNAME_RELEASE}
  	    else
  		echo m88k-dg-dguxbcs${UNAME_RELEASE}
  	    fi
  	else
  	    echo i586-dg-dgux${UNAME_RELEASE}
  	fi
   	exit 0 ;;
      M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
  	echo m88k-dolphin-sysv3
  	exit 0 ;;
      M88*:*:R3*:*)
  	# Delta 88k system running SVR3
  	echo m88k-motorola-sysv3
  	exit 0 ;;
      XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
  	echo m88k-tektronix-sysv3
  	exit 0 ;;
      Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
  	echo m68k-tektronix-bsd
  	exit 0 ;;
      *:IRIX*:*:*)
  	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
  	exit 0 ;;
      ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
  	echo romp-ibm-aix      # uname -m gives an 8 hex-code CPU id
  	exit 0 ;;              # Note that: echo "'`uname -s`'" gives 'AIX '
      i*86:AIX:*:*)
  	echo i386-ibm-aix
  	exit 0 ;;
      ia64:AIX:*:*)
  	if [ -x /usr/bin/oslevel ] ; then
  		IBM_REV=`/usr/bin/oslevel`
  	else
  		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
  	fi
  	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
  	exit 0 ;;
      *:AIX:2:3)
  	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
  		sed 's/^		//' << EOF >$dummy.c
  		#include <sys/systemcfg.h>
  
  		main()
  			{
  			if (!__power_pc())
  				exit(1);
  			puts("powerpc-ibm-aix3.2.5");
  			exit(0);
  			}
  EOF
  		eval $set_cc_for_build
  		$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
  		rm -f $dummy.c $dummy
  		echo rs6000-ibm-aix3.2.5
  	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
  		echo rs6000-ibm-aix3.2.4
  	else
  		echo rs6000-ibm-aix3.2
  	fi
  	exit 0 ;;
      *:AIX:*:[45])
  	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'`
  	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
  		IBM_ARCH=rs6000
  	else
  		IBM_ARCH=powerpc
  	fi
  	if [ -x /usr/bin/oslevel ] ; then
  		IBM_REV=`/usr/bin/oslevel`
  	else
  		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
  	fi
  	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
  	exit 0 ;;
      *:AIX:*:*)
  	echo rs6000-ibm-aix
  	exit 0 ;;
      ibmrt:4.4BSD:*|romp-ibm:BSD:*)
  	echo romp-ibm-bsd4.4
  	exit 0 ;;
      ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
  	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
  	exit 0 ;;                           # report: romp-ibm BSD 4.3
      *:BOSX:*:*)
  	echo rs6000-bull-bosx
  	exit 0 ;;
      DPX/2?00:B.O.S.:*:*)
  	echo m68k-bull-sysv3
  	exit 0 ;;
      9000/[34]??:4.3bsd:1.*:*)
  	echo m68k-hp-bsd
  	exit 0 ;;
      hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
  	echo m68k-hp-bsd4.4
  	exit 0 ;;
      9000/[34678]??:HP-UX:*:*)
  	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
  	case "${UNAME_MACHINE}" in
  	    9000/31? )            HP_ARCH=m68000 ;;
  	    9000/[34]?? )         HP_ARCH=m68k ;;
  	    9000/[678][0-9][0-9])
                case "${HPUX_REV}" in
                  11.[0-9][0-9])
                    if [ -x /usr/bin/getconf ]; then
                      sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
                      sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
                      case "${sc_cpu_version}" in
                        523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
                        528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
                        532)                      # CPU_PA_RISC2_0
                          case "${sc_kernel_bits}" in
                            32) HP_ARCH="hppa2.0n" ;;
                            64) HP_ARCH="hppa2.0w" ;;
                          esac ;;
                      esac
                    fi ;;
                esac
                if [ "${HP_ARCH}" = "" ]; then
                sed 's/^              //' << EOF >$dummy.c
  
                #define _HPUX_SOURCE
                #include <stdlib.h>
                #include <unistd.h>
  
                int main ()
                {
                #if defined(_SC_KERNEL_BITS)
                    long bits = sysconf(_SC_KERNEL_BITS);
                #endif
                    long cpu  = sysconf (_SC_CPU_VERSION);
  
                    switch (cpu)
                	{
                	case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
                	case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
                	case CPU_PA_RISC2_0:
                #if defined(_SC_KERNEL_BITS)
                	    switch (bits)
                		{
                		case 64: puts ("hppa2.0w"); break;
                		case 32: puts ("hppa2.0n"); break;
                		default: puts ("hppa2.0"); break;
                		} break;
                #else  /* !defined(_SC_KERNEL_BITS) */
                	    puts ("hppa2.0"); break;
                #endif
                	default: puts ("hppa1.0"); break;
                	}
                    exit (0);
                }
  EOF
  	eval $set_cc_for_build
  	(CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
  	if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi
  	rm -f $dummy.c $dummy
  	fi ;;
  	esac
  	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
  	exit 0 ;;
      ia64:HP-UX:*:*)
  	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
  	echo ia64-hp-hpux${HPUX_REV}
  	exit 0 ;;
      3050*:HI-UX:*:*)
  	sed 's/^	//' << EOF >$dummy.c
  	#include <unistd.h>
  	int
  	main ()
  	{
  	  long cpu = sysconf (_SC_CPU_VERSION);
  	  /* The order matters, because CPU_IS_HP_MC68K erroneously returns
  	     true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
  	     results, however.  */
  	  if (CPU_IS_PA_RISC (cpu))
  	    {
  	      switch (cpu)
  		{
  		  case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
  		  case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
  		  case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
  		  default: puts ("hppa-hitachi-hiuxwe2"); break;
  		}
  	    }
  	  else if (CPU_IS_HP_MC68K (cpu))
  	    puts ("m68k-hitachi-hiuxwe2");
  	  else puts ("unknown-hitachi-hiuxwe2");
  	  exit (0);
  	}
  EOF
  	eval $set_cc_for_build
  	$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
  	rm -f $dummy.c $dummy
  	echo unknown-hitachi-hiuxwe2
  	exit 0 ;;
      9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
  	echo hppa1.1-hp-bsd
  	exit 0 ;;
      9000/8??:4.3bsd:*:*)
  	echo hppa1.0-hp-bsd
  	exit 0 ;;
      *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
  	echo hppa1.0-hp-mpeix
  	exit 0 ;;
      hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
  	echo hppa1.1-hp-osf
  	exit 0 ;;
      hp8??:OSF1:*:*)
  	echo hppa1.0-hp-osf
  	exit 0 ;;
      i*86:OSF1:*:*)
  	if [ -x /usr/sbin/sysversion ] ; then
  	    echo ${UNAME_MACHINE}-unknown-osf1mk
  	else
  	    echo ${UNAME_MACHINE}-unknown-osf1
  	fi
  	exit 0 ;;
      parisc*:Lites*:*:*)
  	echo hppa1.1-hp-lites
  	exit 0 ;;
      hppa*:OpenBSD:*:*)
  	echo hppa-unknown-openbsd
  	exit 0 ;;
      C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
  	echo c1-convex-bsd
          exit 0 ;;
      C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
  	if getsysinfo -f scalar_acc
  	then echo c32-convex-bsd
  	else echo c2-convex-bsd
  	fi
          exit 0 ;;
      C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
  	echo c34-convex-bsd
          exit 0 ;;
      C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
  	echo c38-convex-bsd
          exit 0 ;;
      C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
  	echo c4-convex-bsd
          exit 0 ;;
      CRAY*X-MP:*:*:*)
  	echo xmp-cray-unicos
          exit 0 ;;
      CRAY*Y-MP:*:*:*)
  	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
  	exit 0 ;;
      CRAY*[A-Z]90:*:*:*)
  	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
  	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
  	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
  	      -e 's/\.[^.]*$/.X/'
  	exit 0 ;;
      CRAY*TS:*:*:*)
  	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
  	exit 0 ;;
      CRAY*T3D:*:*:*)
  	echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
  	exit 0 ;;
      CRAY*T3E:*:*:*)
  	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
  	exit 0 ;;
      CRAY*SV1:*:*:*)
  	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
  	exit 0 ;;
      CRAY-2:*:*:*)
  	echo cray2-cray-unicos
          exit 0 ;;
      F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
  	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
          FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
          FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
          echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
          exit 0 ;;
      hp300:OpenBSD:*:*)
  	echo m68k-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
  	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
  	exit 0 ;;
      sparc*:BSD/OS:*:*)
  	echo sparc-unknown-bsdi${UNAME_RELEASE}
  	exit 0 ;;
      *:BSD/OS:*:*)
  	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
  	exit 0 ;;
      *:FreeBSD:*:*)
  	echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
  	exit 0 ;;
      *:OpenBSD:*:*)
  	echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
  	exit 0 ;;
      i*:CYGWIN*:*)
  	echo ${UNAME_MACHINE}-pc-cygwin
  	exit 0 ;;
      i*:MINGW*:*)
  	echo ${UNAME_MACHINE}-pc-mingw32
  	exit 0 ;;
      i*:PW*:*)
  	echo ${UNAME_MACHINE}-pc-pw32
  	exit 0 ;;
      i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
  	# How do we know it's Interix rather than the generic POSIX subsystem?
  	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
  	# UNAME_MACHINE based on the output of uname instead of i386?
  	echo i386-pc-interix
  	exit 0 ;;
      i*:UWIN*:*)
  	echo ${UNAME_MACHINE}-pc-uwin
  	exit 0 ;;
      p*:CYGWIN*:*)
  	echo powerpcle-unknown-cygwin
  	exit 0 ;;
      prep*:SunOS:5.*:*)
  	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
  	exit 0 ;;
      *:GNU:*:*)
  	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
  	exit 0 ;;
      i*86:Minix:*:*)
  	echo ${UNAME_MACHINE}-pc-minix
  	exit 0 ;;
      arm*:Linux:*:*)
  	echo ${UNAME_MACHINE}-unknown-linux-gnu
  	exit 0 ;;
      ia64:Linux:*:*)
  	echo ${UNAME_MACHINE}-unknown-linux
  	exit 0 ;;
      m68*:Linux:*:*)
  	echo ${UNAME_MACHINE}-unknown-linux-gnu
  	exit 0 ;;
      mips:Linux:*:*)
  	case `sed -n '/^byte/s/^.*: \(.*\) endian/\1/p' < /proc/cpuinfo` in
  	  big)    echo mips-unknown-linux-gnu && exit 0 ;;
  	  little) echo mipsel-unknown-linux-gnu && exit 0 ;;
  	esac
  	;;
      ppc:Linux:*:*)
  	echo powerpc-unknown-linux-gnu
  	exit 0 ;;
      ppc64:Linux:*:*)
  	echo powerpc64-unknown-linux-gnu
  	exit 0 ;;
      alpha:Linux:*:*)
  	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
  	  EV5)   UNAME_MACHINE=alphaev5 ;;
  	  EV56)  UNAME_MACHINE=alphaev56 ;;
  	  PCA56) UNAME_MACHINE=alphapca56 ;;
  	  PCA57) UNAME_MACHINE=alphapca56 ;;
  	  EV6)   UNAME_MACHINE=alphaev6 ;;
  	  EV67)  UNAME_MACHINE=alphaev67 ;;
  	  EV68*) UNAME_MACHINE=alphaev68 ;;
          esac
  	objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
  	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
  	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
  	exit 0 ;;
      parisc:Linux:*:* | hppa:Linux:*:*)
  	# Look for CPU level
  	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
  	  PA7*) echo hppa1.1-unknown-linux-gnu ;;
  	  PA8*) echo hppa2.0-unknown-linux-gnu ;;
  	  *)    echo hppa-unknown-linux-gnu ;;
  	esac
  	exit 0 ;;
      parisc64:Linux:*:* | hppa64:Linux:*:*)
  	echo hppa64-unknown-linux-gnu
  	exit 0 ;;
      s390:Linux:*:* | s390x:Linux:*:*)
  	echo ${UNAME_MACHINE}-ibm-linux
  	exit 0 ;;
      sh*:Linux:*:*)
  	echo ${UNAME_MACHINE}-unknown-linux-gnu
  	exit 0 ;;
      sparc:Linux:*:* | sparc64:Linux:*:*)
  	echo ${UNAME_MACHINE}-unknown-linux-gnu
  	exit 0 ;;
      x86_64:Linux:*:*)
  	echo x86_64-unknown-linux-gnu
  	exit 0 ;;
      i*86:Linux:*:*)
  	# The BFD linker knows what the default object file format is, so
  	# first see if it will tell us. cd to the root directory to prevent
  	# problems with other programs or directories called `ld' in the path.
  	ld_supported_targets=`cd /; ld --help 2>&1 \
  			 | sed -ne '/supported targets:/!d
  				    s/[ 	][ 	]*/ /g
  				    s/.*supported targets: *//
  				    s/ .*//
  				    p'`
          case "$ld_supported_targets" in
  	  elf32-i386)
  		TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
  		;;
  	  a.out-i386-linux)
  		echo "${UNAME_MACHINE}-pc-linux-gnuaout"
  		exit 0 ;;		
  	  coff-i386)
  		echo "${UNAME_MACHINE}-pc-linux-gnucoff"
  		exit 0 ;;
  	  "")
  		# Either a pre-BFD a.out linker (linux-gnuoldld) or
  		# one that does not give us useful --help.
  		echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
  		exit 0 ;;
  	esac
  	# Determine whether the default compiler is a.out or elf
  	cat >$dummy.c <<EOF
  #include <features.h>
  #ifdef __cplusplus
  #include <stdio.h>  /* for printf() prototype */
  	int main (int argc, char *argv[]) {
  #else
  	int main (argc, argv) int argc; char *argv[]; {
  #endif
  #ifdef __ELF__
  # ifdef __GLIBC__
  #  if __GLIBC__ >= 2
      printf ("%s-pc-linux-gnu\n", argv[1]);
  #  else
      printf ("%s-pc-linux-gnulibc1\n", argv[1]);
  #  endif
  # else
     printf ("%s-pc-linux-gnulibc1\n", argv[1]);
  # endif
  #else
    printf ("%s-pc-linux-gnuaout\n", argv[1]);
  #endif
    return 0;
  }
  EOF
  	eval $set_cc_for_build
  	$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0
  	rm -f $dummy.c $dummy
  	test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
  	;;
      i*86:DYNIX/ptx:4*:*)
  	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
  	# earlier versions are messed up and put the nodename in both
  	# sysname and nodename.
  	echo i386-sequent-sysv4
  	exit 0 ;;
      i*86:UNIX_SV:4.2MP:2.*)
          # Unixware is an offshoot of SVR4, but it has its own version
          # number series starting with 2...
          # I am not positive that other SVR4 systems won't match this,
  	# I just have to hope.  -- rms.
          # Use sysv4.2uw... so that sysv4* matches it.
  	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
  	exit 0 ;;
      i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
  	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
  	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
  		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
  	else
  		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
  	fi
  	exit 0 ;;
      i*86:*:5:[78]*)
  	case `/bin/uname -X | grep "^Machine"` in
  	    *486*)	     UNAME_MACHINE=i486 ;;
  	    *Pentium)	     UNAME_MACHINE=i586 ;;
  	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
  	esac
  	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
  	exit 0 ;;
      i*86:*:3.2:*)
  	if test -f /usr/options/cb.name; then
  		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
  		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
  	elif /bin/uname -X 2>/dev/null >/dev/null ; then
  		UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
  		(/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
  		(/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
  			&& UNAME_MACHINE=i586
  		(/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \
  			&& UNAME_MACHINE=i686
  		(/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \
  			&& UNAME_MACHINE=i686
  		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
  	else
  		echo ${UNAME_MACHINE}-pc-sysv32
  	fi
  	exit 0 ;;
      i*86:*DOS:*:*)
  	echo ${UNAME_MACHINE}-pc-msdosdjgpp
  	exit 0 ;;
      pc:*:*:*)
  	# Left here for compatibility:
          # uname -m prints for DJGPP always 'pc', but it prints nothing about
          # the processor, so we play safe by assuming i386.
  	echo i386-pc-msdosdjgpp
          exit 0 ;;
      Intel:Mach:3*:*)
  	echo i386-pc-mach3
  	exit 0 ;;
      paragon:*:*:*)
  	echo i860-intel-osf1
  	exit 0 ;;
      i860:*:4.*:*) # i860-SVR4
  	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
  	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
  	else # Add other i860-SVR4 vendors below as they are discovered.
  	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
  	fi
  	exit 0 ;;
      mini*:CTIX:SYS*5:*)
  	# "miniframe"
  	echo m68010-convergent-sysv
  	exit 0 ;;
      M68*:*:R3V[567]*:*)
  	test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
      3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
  	OS_REL=''
  	test -r /etc/.relid \
  	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
  	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
  	  && echo i486-ncr-sysv4.3${OS_REL} && exit 0
  	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
  	  && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
      3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
          /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
            && echo i486-ncr-sysv4 && exit 0 ;;
      m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
  	echo m68k-unknown-lynxos${UNAME_RELEASE}
  	exit 0 ;;
      mc68030:UNIX_System_V:4.*:*)
  	echo m68k-atari-sysv4
  	exit 0 ;;
      i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
  	echo i386-unknown-lynxos${UNAME_RELEASE}
  	exit 0 ;;
      TSUNAMI:LynxOS:2.*:*)
  	echo sparc-unknown-lynxos${UNAME_RELEASE}
  	exit 0 ;;
      rs6000:LynxOS:2.*:*)
  	echo rs6000-unknown-lynxos${UNAME_RELEASE}
  	exit 0 ;;
      PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
  	echo powerpc-unknown-lynxos${UNAME_RELEASE}
  	exit 0 ;;
      SM[BE]S:UNIX_SV:*:*)
  	echo mips-dde-sysv${UNAME_RELEASE}
  	exit 0 ;;
      RM*:ReliantUNIX-*:*:*)
  	echo mips-sni-sysv4
  	exit 0 ;;
      RM*:SINIX-*:*:*)
  	echo mips-sni-sysv4
  	exit 0 ;;
      *:SINIX-*:*:*)
  	if uname -p 2>/dev/null >/dev/null ; then
  		UNAME_MACHINE=`(uname -p) 2>/dev/null`
  		echo ${UNAME_MACHINE}-sni-sysv4
  	else
  		echo ns32k-sni-sysv
  	fi
  	exit 0 ;;
      PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
                        # says <Richard.M.Bartel@ccMail.Census.GOV>
          echo i586-unisys-sysv4
          exit 0 ;;
      *:UNIX_System_V:4*:FTX*)
  	# From Gerald Hewes <hewes@openmarket.com>.
  	# How about differentiating between stratus architectures? -djm
  	echo hppa1.1-stratus-sysv4
  	exit 0 ;;
      *:*:*:FTX*)
  	# From seanf@swdc.stratus.com.
  	echo i860-stratus-sysv4
  	exit 0 ;;
      *:VOS:*:*)
  	# From Paul.Green@stratus.com.
  	echo hppa1.1-stratus-vos
  	exit 0 ;;
      mc68*:A/UX:*:*)
  	echo m68k-apple-aux${UNAME_RELEASE}
  	exit 0 ;;
      news*:NEWS-OS:6*:*)
  	echo mips-sony-newsos6
  	exit 0 ;;
      R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
  	if [ -d /usr/nec ]; then
  	        echo mips-nec-sysv${UNAME_RELEASE}
  	else
  	        echo mips-unknown-sysv${UNAME_RELEASE}
  	fi
          exit 0 ;;
      BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
  	echo powerpc-be-beos
  	exit 0 ;;
      BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
  	echo powerpc-apple-beos
  	exit 0 ;;
      BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
  	echo i586-pc-beos
  	exit 0 ;;
      SX-4:SUPER-UX:*:*)
  	echo sx4-nec-superux${UNAME_RELEASE}
  	exit 0 ;;
      SX-5:SUPER-UX:*:*)
  	echo sx5-nec-superux${UNAME_RELEASE}
  	exit 0 ;;
      Power*:Rhapsody:*:*)
  	echo powerpc-apple-rhapsody${UNAME_RELEASE}
  	exit 0 ;;
      *:Rhapsody:*:*)
  	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
  	exit 0 ;;
      *:Darwin:*:*)
  	echo `uname -p`-apple-darwin${UNAME_RELEASE}
  	exit 0 ;;
      *:procnto*:*:* | *:QNX:[0123456789]*:*)
  	if test "${UNAME_MACHINE}" = "x86pc"; then
  		UNAME_MACHINE=pc
  	fi
  	echo `uname -p`-${UNAME_MACHINE}-nto-qnx
  	exit 0 ;;
      *:QNX:*:4*)
  	echo i386-pc-qnx
  	exit 0 ;;
      NSR-[KW]:NONSTOP_KERNEL:*:*)
  	echo nsr-tandem-nsk${UNAME_RELEASE}
  	exit 0 ;;
      *:NonStop-UX:*:*)
  	echo mips-compaq-nonstopux
  	exit 0 ;;
      BS2000:POSIX*:*:*)
  	echo bs2000-siemens-sysv
  	exit 0 ;;
      DS/*:UNIX_System_V:*:*)
  	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
  	exit 0 ;;
      *:Plan9:*:*)
  	# "uname -m" is not consistent, so use $cputype instead. 386
  	# is converted to i386 for consistency with other x86
  	# operating systems.
  	if test "$cputype" = "386"; then
  	    UNAME_MACHINE=i386
  	else
  	    UNAME_MACHINE="$cputype"
  	fi
  	echo ${UNAME_MACHINE}-unknown-plan9
  	exit 0 ;;
      i*86:OS/2:*:*)
  	# If we were able to find `uname', then EMX Unix compatibility
  	# is probably installed.
  	echo ${UNAME_MACHINE}-pc-os2-emx
  	exit 0 ;;
      *:TOPS-10:*:*)
  	echo pdp10-unknown-tops10
  	exit 0 ;;
      *:TENEX:*:*)
  	echo pdp10-unknown-tenex
  	exit 0 ;;
      KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
  	echo pdp10-dec-tops20
  	exit 0 ;;
      XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
  	echo pdp10-xkl-tops20
  	exit 0 ;;
      *:TOPS-20:*:*)
  	echo pdp10-unknown-tops20
  	exit 0 ;;
      *:ITS:*:*)
  	echo pdp10-unknown-its
  	exit 0 ;;
      i*86:XTS-300:*:STOP)
  	echo ${UNAME_MACHINE}-unknown-stop
  	exit 0 ;;
  esac
  
  #echo '(No uname command or uname output not recognized.)' 1>&2
  #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
  
  cat >$dummy.c <<EOF
  #ifdef _SEQUENT_
  # include <sys/types.h>
  # include <sys/utsname.h>
  #endif
  main ()
  {
  #if defined (sony)
  #if defined (MIPSEB)
    /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
       I don't know....  */
    printf ("mips-sony-bsd\n"); exit (0);
  #else
  #include <sys/param.h>
    printf ("m68k-sony-newsos%s\n",
  #ifdef NEWSOS4
            "4"
  #else
  	  ""
  #endif
           ); exit (0);
  #endif
  #endif
  
  #if defined (__arm) && defined (__acorn) && defined (__unix)
    printf ("arm-acorn-riscix"); exit (0);
  #endif
  
  #if defined (hp300) && !defined (hpux)
    printf ("m68k-hp-bsd\n"); exit (0);
  #endif
  
  #if defined (NeXT)
  #if !defined (__ARCHITECTURE__)
  #define __ARCHITECTURE__ "m68k"
  #endif
    int version;
    version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
    if (version < 4)
      printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
    else
      printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
    exit (0);
  #endif
  
  #if defined (MULTIMAX) || defined (n16)
  #if defined (UMAXV)
    printf ("ns32k-encore-sysv\n"); exit (0);
  #else
  #if defined (CMU)
    printf ("ns32k-encore-mach\n"); exit (0);
  #else
    printf ("ns32k-encore-bsd\n"); exit (0);
  #endif
  #endif
  #endif
  
  #if defined (__386BSD__)
    printf ("i386-pc-bsd\n"); exit (0);
  #endif
  
  #if defined (sequent)
  #if defined (i386)
    printf ("i386-sequent-dynix\n"); exit (0);
  #endif
  #if defined (ns32000)
    printf ("ns32k-sequent-dynix\n"); exit (0);
  #endif
  #endif
  
  #if defined (_SEQUENT_)
      struct utsname un;
  
      uname(&un);
  
      if (strncmp(un.version, "V2", 2) == 0) {
  	printf ("i386-sequent-ptx2\n"); exit (0);
      }
      if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
  	printf ("i386-sequent-ptx1\n"); exit (0);
      }
      printf ("i386-sequent-ptx\n"); exit (0);
  
  #endif
  
  #if defined (vax)
  # if !defined (ultrix)
  #  include <sys/param.h>
  #  if defined (BSD)
  #   if BSD == 43
        printf ("vax-dec-bsd4.3\n"); exit (0);
  #   else
  #    if BSD == 199006
        printf ("vax-dec-bsd4.3reno\n"); exit (0);
  #    else
        printf ("vax-dec-bsd\n"); exit (0);
  #    endif
  #   endif
  #  else
      printf ("vax-dec-bsd\n"); exit (0);
  #  endif
  # else
      printf ("vax-dec-ultrix\n"); exit (0);
  # endif
  #endif
  
  #if defined (alliant) && defined (i860)
    printf ("i860-alliant-bsd\n"); exit (0);
  #endif
  
    exit (1);
  }
  EOF
  
  eval $set_cc_for_build
  $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0
  rm -f $dummy.c $dummy
  
  # Apollos put the system type in the environment.
  
  test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
  
  # Convex versions that predate uname can use getsysinfo(1)
  
  if [ -x /usr/convex/getsysinfo ]
  then
      case `getsysinfo -f cpu_type` in
      c1*)
  	echo c1-convex-bsd
  	exit 0 ;;
      c2*)
  	if getsysinfo -f scalar_acc
  	then echo c32-convex-bsd
  	else echo c2-convex-bsd
  	fi
  	exit 0 ;;
      c34*)
  	echo c34-convex-bsd
  	exit 0 ;;
      c38*)
  	echo c38-convex-bsd
  	exit 0 ;;
      c4*)
  	echo c4-convex-bsd
  	exit 0 ;;
      esac
  fi
  
  cat >&2 <<EOF
  $0: unable to guess system type
  
  This script, last modified $timestamp, has failed to recognize
  the operating system you are using. It is advised that you
  download the most up to date version of the config scripts from
  
      ftp://ftp.gnu.org/pub/gnu/config/
  
  If the version you run ($0) is already up to date, please
  send the following data and any information you think might be
  pertinent to <config-patches@gnu.org> in order to provide the needed
  information to handle your system.
  
  config.guess timestamp = $timestamp
  
  uname -m = `(uname -m) 2>/dev/null || echo unknown`
  uname -r = `(uname -r) 2>/dev/null || echo unknown`
  uname -s = `(uname -s) 2>/dev/null || echo unknown`
  uname -v = `(uname -v) 2>/dev/null || echo unknown`
  
  /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
  /bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
  
  hostinfo               = `(hostinfo) 2>/dev/null`
  /bin/universe          = `(/bin/universe) 2>/dev/null`
  /usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
  /bin/arch              = `(/bin/arch) 2>/dev/null`
  /usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
  /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
  
  UNAME_MACHINE = ${UNAME_MACHINE}
  UNAME_RELEASE = ${UNAME_RELEASE}
  UNAME_SYSTEM  = ${UNAME_SYSTEM}
  UNAME_VERSION = ${UNAME_VERSION}
  EOF
  
  exit 1
  
  # Local variables:
  # eval: (add-hook 'write-file-hooks 'time-stamp)
  # time-stamp-start: "timestamp='"
  # time-stamp-format: "%:y-%02m-%02d"
  # time-stamp-end: "'"
  # End:
  Index: ossp-pkg/rc/config.h.in
  ============================================================
  $ cvs update -p -r1.1 config.h.in | uuencode config.h.in
  Index: ossp-pkg/rc/config.sub
  ============================================================
  $ cvs update -p -r1.1 config.sub
  #! /bin/sh
  # Configuration validation subroutine script.
  #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
  #   Free Software Foundation, Inc.
  
  timestamp='2001-08-13'
  
  # This file is (in principle) common to ALL GNU software.
  # The presence of a machine in this file suggests that SOME GNU software
  # can handle that machine.  It does not imply ALL GNU software can.
  #
  # This file is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 2 of the License, or
  # (at your option) any later version.
  #
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  #
  # You should have received a copy of the GNU General Public License
  # along with this program; if not, write to the Free Software
  # Foundation, Inc., 59 Temple Place - Suite 330,
  # Boston, MA 02111-1307, USA.
  
  # As a special exception to the GNU General Public License, if you
  # distribute this file as part of a program that contains a
  # configuration script generated by Autoconf, you may include it under
  # the same distribution terms that you use for the rest of that program.
  
  # Please send patches to <config-patches@gnu.org>.
  #
  # Configuration subroutine to validate and canonicalize a configuration type.
  # Supply the specified configuration type as an argument.
  # If it is invalid, we print an error message on stderr and exit with code 1.
  # Otherwise, we print the canonical config type on stdout and succeed.
  
  # This file is supposed to be the same for all GNU packages
  # and recognize all the CPU types, system types and aliases
  # that are meaningful with *any* GNU software.
  # Each package is responsible for reporting which valid configurations
  # it does not support.  The user should be able to distinguish
  # a failure to support a valid configuration from a meaningless
  # configuration.
  
  # The goal of this file is to map all the various variations of a given
  # machine specification into a single specification in the form:
  #	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
  # or in some cases, the newer four-part form:
  #	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
  # It is wrong to echo any other type of specification.
  
  me=`echo "$0" | sed -e 's,.*/,,'`
  
  usage="\
  Usage: $0 [OPTION] CPU-MFR-OPSYS
         $0 [OPTION] ALIAS
  
  Canonicalize a configuration name.
  
  Operation modes:
    -h, --help         print this help, then exit
    -t, --time-stamp   print date of last modification, then exit
    -v, --version      print version number, then exit
  
  Report bugs and patches to <config-patches@gnu.org>."
  
  version="\
  GNU config.sub ($timestamp)
  
  Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
  Free Software Foundation, Inc.
  
  This is free software; see the source for copying conditions.  There is NO
  warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
  
  help="
  Try \`$me --help' for more information."
  
  # Parse command line
  while test $# -gt 0 ; do
    case $1 in
      --time-stamp | --time* | -t )
         echo "$timestamp" ; exit 0 ;;
      --version | -v )
         echo "$version" ; exit 0 ;;
      --help | --h* | -h )
         echo "$usage"; exit 0 ;;
      -- )     # Stop option processing
         shift; break ;;
      - )	# Use stdin as input.
         break ;;
      -* )
         echo "$me: invalid option $1$help"
         exit 1 ;;
  
      *local*)
         # First pass through any local machine types.
         echo $1
         exit 0;;
  
      * )
         break ;;
    esac
  done
  
  case $# in
   0) echo "$me: missing argument$help" >&2
      exit 1;;
   1) ;;
   *) echo "$me: too many arguments$help" >&2
      exit 1;;
  esac
  
  # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
  # Here we must recognize all the valid KERNEL-OS combinations.
  maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
  case $maybe_os in
    nto-qnx* | linux-gnu* | storm-chaos* | os2-emx* | windows32-*)
      os=-$maybe_os
      basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
      ;;
    *)
      basic_machine=`echo $1 | sed 's/-[^-]*$//'`
      if [ $basic_machine != $1 ]
      then os=`echo $1 | sed 's/.*-/-/'`
      else os=; fi
      ;;
  esac
  
  ### Let's recognize common machines as not being operating systems so
  ### that things like config.sub decstation-3100 work.  We also
  ### recognize some manufacturers as not being operating systems, so we
  ### can provide default operating systems below.
  case $os in
  	-sun*os*)
  		# Prevent following clause from handling this invalid input.
  		;;
  	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
  	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
  	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
  	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
  	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
  	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
  	-apple | -axis)
  		os=
  		basic_machine=$1
  		;;
  	-sim | -cisco | -oki | -wec | -winbond)
  		os=
  		basic_machine=$1
  		;;
  	-scout)
  		;;
  	-wrs)
  		os=-vxworks
  		basic_machine=$1
  		;;
  	-chorusos*)
  		os=-chorusos
  		basic_machine=$1
  		;;
   	-chorusrdb)
   		os=-chorusrdb
  		basic_machine=$1
   		;;
  	-hiux*)
  		os=-hiuxwe2
  		;;
  	-sco5)
  		os=-sco3.2v5
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  		;;
  	-sco4)
  		os=-sco3.2v4
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  		;;
  	-sco3.2.[4-9]*)
  		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  		;;
  	-sco3.2v[4-9]*)
  		# Don't forget version if it is 3.2v4 or newer.
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  		;;
  	-sco*)
  		os=-sco3.2v2
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  		;;
  	-udk*)
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  		;;
  	-isc)
  		os=-isc2.2
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  		;;
  	-clix*)
  		basic_machine=clipper-intergraph
  		;;
  	-isc*)
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  		;;
  	-lynx*)
  		os=-lynxos
  		;;
  	-ptx*)
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
  		;;
  	-windowsnt*)
  		os=`echo $os | sed -e 's/windowsnt/winnt/'`
  		;;
  	-psos*)
  		os=-psos
  		;;
  	-mint | -mint[0-9]*)
  		basic_machine=m68k-atari
  		os=-mint
  		;;
  esac
  
  # Decode aliases for certain CPU-COMPANY combinations.
  case $basic_machine in
  	# Recognize the basic CPU types without company name.
  	# Some are omitted here because they have special meanings below.
  	1750a | 580 \
  	| a29k \
  	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
  	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
  	| c4x | clipper \
  	| d10v | d30v | dsp16xx \
  	| fr30 \
  	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
  	| i370 | i860 | i960 | ia64 \
  	| m32r | m68000 | m68k | m88k | mcore \
  	| mips16 | mips64 | mips64el | mips64orion | mips64orionel \
  	| mips64vr4100 | mips64vr4100el | mips64vr4300 \
  	| mips64vr4300el | mips64vr5000 | mips64vr5000el \
  	| mipsbe | mipsel | mipsle | mipstx39 | mipstx39el \
  	| mn10200 | mn10300 \
  	| ns16k | ns32k \
  	| openrisc \
  	| pdp10 | pdp11 | pj | pjl \
  	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
  	| pyramid \
  	| s390 | s390x \
  	| sh | sh[34] | sh[34]eb | shbe | shle \
  	| sparc | sparc64 | sparclet | sparclite | sparcv9 | sparcv9b \
  	| strongarm \
  	| tahoe | thumb | tic80 | tron \
  	| v850 \
  	| we32k \
  	| x86 | xscale \
  	| z8k)
  		basic_machine=$basic_machine-unknown
  		;;
  	m6811 | m68hc11 | m6812 | m68hc12)
  		# Motorola 68HC11/12.
  		basic_machine=$basic_machine-unknown
  		os=-none
  		;;
  	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
  		;;
  
  	# We use `pc' rather than `unknown'
  	# because (1) that's what they normally are, and
  	# (2) the word "unknown" tends to confuse beginning users.
  	i*86 | x86_64)
  	  basic_machine=$basic_machine-pc
  	  ;;
  	# Object if more than one company name word.
  	*-*-*)
  		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
  		exit 1
  		;;
  	# Recognize the basic CPU types with company name.
  	580-* \
  	| a29k-* \
  	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
  	| alphapca5[67]-* | arc-* \
  	| arm-*  | armbe-* | armle-* | armv*-* \
  	| bs2000-* \
  	| c[123]* | c30-* | [cjt]90-* | c54x-* \
  	| clipper-* | cray2-* | cydra-* \
  	| d10v-* | d30v-* \
  	| elxsi-* \
  	| f30[01]-* | f700-* | fr30-* | fx80-* \
  	| h8300-* | h8500-* \
  	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
  	| i*86-* | i860-* | i960-* | ia64-* \
  	| m32r-* \
  	| m68000-* | m680[01234]0-* | m68360-* | m683?2-* | m68k-* \
  	| m88110-* | m88k-* | mcore-* \
  	| mips-* | mips16-* | mips64-* | mips64el-* | mips64orion-* \
  	| mips64orionel-* | mips64vr4100-* | mips64vr4100el-* \
  	| mips64vr4300-* | mips64vr4300el-* | mipsbe-* | mipsel-* \
  	| mipsle-* | mipstx39-* | mipstx39el-* \
  	| none-* | np1-* | ns16k-* | ns32k-* \
  	| orion-* \
  	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
  	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
  	| pyramid-* \
  	| romp-* | rs6000-* \
  	| s390-* | s390x-* \
  	| sh-* | sh[34]-* | sh[34]eb-* | shbe-* | shle-* \
  	| sparc-* | sparc64-* | sparc86x-* | sparclite-* \
  	| sparcv9-* | sparcv9b-* | strongarm-* | sv1-* \
  	| t3e-* | tahoe-* | thumb-* | tic30-* | tic54x-* | tic80-* | tron-* \
  	| v850-* | vax-* \
  	| we32k-* \
  	| x86-* | x86_64-* | xmp-* | xps100-* | xscale-* \
  	| ymp-* \
  	| z8k-*)
  		;;
  	# Recognize the various machine names and aliases which stand
  	# for a CPU type and a company and sometimes even an OS.
  	386bsd)
  		basic_machine=i386-unknown
  		os=-bsd
  		;;
  	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
  		basic_machine=m68000-att
  		;;
  	3b*)
  		basic_machine=we32k-att
  		;;
  	a29khif)
  		basic_machine=a29k-amd
  		os=-udi
  		;;
  	adobe68k)
  		basic_machine=m68010-adobe
  		os=-scout
  		;;
  	alliant | fx80)
  		basic_machine=fx80-alliant
  		;;
  	altos | altos3068)
  		basic_machine=m68k-altos
  		;;
  	am29k)
  		basic_machine=a29k-none
  		os=-bsd
  		;;
  	amdahl)
  		basic_machine=580-amdahl
  		os=-sysv
  		;;
  	amiga | amiga-*)
  		basic_machine=m68k-unknown
  		;;
  	amigaos | amigados)
  		basic_machine=m68k-unknown
  		os=-amigaos
  		;;
  	amigaunix | amix)
  		basic_machine=m68k-unknown
  		os=-sysv4
  		;;
  	apollo68)
  		basic_machine=m68k-apollo
  		os=-sysv
  		;;
  	apollo68bsd)
  		basic_machine=m68k-apollo
  		os=-bsd
  		;;
  	aux)
  		basic_machine=m68k-apple
  		os=-aux
  		;;
  	balance)
  		basic_machine=ns32k-sequent
  		os=-dynix
  		;;
  	convex-c1)
  		basic_machine=c1-convex
  		os=-bsd
  		;;
  	convex-c2)
  		basic_machine=c2-convex
  		os=-bsd
  		;;
  	convex-c32)
  		basic_machine=c32-convex
  		os=-bsd
  		;;
  	convex-c34)
  		basic_machine=c34-convex
  		os=-bsd
  		;;
  	convex-c38)
  		basic_machine=c38-convex
  		os=-bsd
  		;;
  	cray | ymp)
  		basic_machine=ymp-cray
  		os=-unicos
  		;;
  	cray2)
  		basic_machine=cray2-cray
  		os=-unicos
  		;;
  	[cjt]90)
  		basic_machine=${basic_machine}-cray
  		os=-unicos
  		;;
  	crds | unos)
  		basic_machine=m68k-crds
  		;;
  	cris | cris-* | etrax*)
  		basic_machine=cris-axis
  		;;
  	da30 | da30-*)
  		basic_machine=m68k-da30
  		;;
  	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
  		basic_machine=mips-dec
  		;;
  	delta | 3300 | motorola-3300 | motorola-delta \
  	      | 3300-motorola | delta-motorola)
  		basic_machine=m68k-motorola
  		;;
  	delta88)
  		basic_machine=m88k-motorola
  		os=-sysv3
  		;;
  	dpx20 | dpx20-*)
  		basic_machine=rs6000-bull
  		os=-bosx
  		;;
  	dpx2* | dpx2*-bull)
  		basic_machine=m68k-bull
  		os=-sysv3
  		;;
  	ebmon29k)
  		basic_machine=a29k-amd
  		os=-ebmon
  		;;
  	elxsi)
  		basic_machine=elxsi-elxsi
  		os=-bsd
  		;;
  	encore | umax | mmax)
  		basic_machine=ns32k-encore
  		;;
  	es1800 | OSE68k | ose68k | ose | OSE)
  		basic_machine=m68k-ericsson
  		os=-ose
  		;;
  	fx2800)
  		basic_machine=i860-alliant
  		;;
  	genix)
  		basic_machine=ns32k-ns
  		;;
  	gmicro)
  		basic_machine=tron-gmicro
  		os=-sysv
  		;;
  	go32)
  		basic_machine=i386-pc
  		os=-go32
  		;;
  	h3050r* | hiux*)
  		basic_machine=hppa1.1-hitachi
  		os=-hiuxwe2
  		;;
  	h8300hms)
  		basic_machine=h8300-hitachi
  		os=-hms
  		;;
  	h8300xray)
  		basic_machine=h8300-hitachi
  		os=-xray
  		;;
  	h8500hms)
  		basic_machine=h8500-hitachi
  		os=-hms
  		;;
  	harris)
  		basic_machine=m88k-harris
  		os=-sysv3
  		;;
  	hp300-*)
  		basic_machine=m68k-hp
  		;;
  	hp300bsd)
  		basic_machine=m68k-hp
  		os=-bsd
  		;;
  	hp300hpux)
  		basic_machine=m68k-hp
  		os=-hpux
  		;;
  	hp3k9[0-9][0-9] | hp9[0-9][0-9])
  		basic_machine=hppa1.0-hp
  		;;
  	hp9k2[0-9][0-9] | hp9k31[0-9])
  		basic_machine=m68000-hp
  		;;
  	hp9k3[2-9][0-9])
  		basic_machine=m68k-hp
  		;;
  	hp9k6[0-9][0-9] | hp6[0-9][0-9])
  		basic_machine=hppa1.0-hp
  		;;
  	hp9k7[0-79][0-9] | hp7[0-79][0-9])
  		basic_machine=hppa1.1-hp
  		;;
  	hp9k78[0-9] | hp78[0-9])
  		# FIXME: really hppa2.0-hp
  		basic_machine=hppa1.1-hp
  		;;
  	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
  		# FIXME: really hppa2.0-hp
  		basic_machine=hppa1.1-hp
  		;;
  	hp9k8[0-9][13679] | hp8[0-9][13679])
  		basic_machine=hppa1.1-hp
  		;;
  	hp9k8[0-9][0-9] | hp8[0-9][0-9])
  		basic_machine=hppa1.0-hp
  		;;
  	hppa-next)
  		os=-nextstep3
  		;;
  	hppaosf)
  		basic_machine=hppa1.1-hp
  		os=-osf
  		;;
  	hppro)
  		basic_machine=hppa1.1-hp
  		os=-proelf
  		;;
  	i370-ibm* | ibm*)
  		basic_machine=i370-ibm
  		;;
  # I'm not sure what "Sysv32" means.  Should this be sysv3.2?
  	i*86v32)
  		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
  		os=-sysv32
  		;;
  	i*86v4*)
  		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
  		os=-sysv4
  		;;
  	i*86v)
  		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
  		os=-sysv
  		;;
  	i*86sol2)
  		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
  		os=-solaris2
  		;;
  	i386mach)
  		basic_machine=i386-mach
  		os=-mach
  		;;
  	i386-vsta | vsta)
  		basic_machine=i386-unknown
  		os=-vsta
  		;;
  	iris | iris4d)
  		basic_machine=mips-sgi
  		case $os in
  		    -irix*)
  			;;
  		    *)
  			os=-irix4
  			;;
  		esac
  		;;
  	isi68 | isi)
  		basic_machine=m68k-isi
  		os=-sysv
  		;;
  	m88k-omron*)
  		basic_machine=m88k-omron
  		;;
  	magnum | m3230)
  		basic_machine=mips-mips
  		os=-sysv
  		;;
  	merlin)
  		basic_machine=ns32k-utek
  		os=-sysv
  		;;
  	mingw32)
  		basic_machine=i386-pc
  		os=-mingw32
  		;;
  	miniframe)
  		basic_machine=m68000-convergent
  		;;
  	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
  		basic_machine=m68k-atari
  		os=-mint
  		;;
  	mipsel*-linux*)
  		basic_machine=mipsel-unknown
  		os=-linux-gnu
  		;;
  	mips*-linux*)
  		basic_machine=mips-unknown
  		os=-linux-gnu
  		;;
  	mips3*-*)
  		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
  		;;
  	mips3*)
  		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
  		;;
  	mmix*)
  		basic_machine=mmix-knuth
  		os=-mmixware
  		;;
  	monitor)
  		basic_machine=m68k-rom68k
  		os=-coff
  		;;
  	msdos)
  		basic_machine=i386-pc
  		os=-msdos
  		;;
  	mvs)
  		basic_machine=i370-ibm
  		os=-mvs
  		;;
  	ncr3000)
  		basic_machine=i486-ncr
  		os=-sysv4
  		;;
  	netbsd386)
  		basic_machine=i386-unknown
  		os=-netbsd
  		;;
  	netwinder)
  		basic_machine=armv4l-rebel
  		os=-linux
  		;;
  	news | news700 | news800 | news900)
  		basic_machine=m68k-sony
  		os=-newsos
  		;;
  	news1000)
  		basic_machine=m68030-sony
  		os=-newsos
  		;;
  	news-3600 | risc-news)
  		basic_machine=mips-sony
  		os=-newsos
  		;;
  	necv70)
  		basic_machine=v70-nec
  		os=-sysv
  		;;
  	next | m*-next )
  		basic_machine=m68k-next
  		case $os in
  		    -nextstep* )
  			;;
  		    -ns2*)
  		      os=-nextstep2
  			;;
  		    *)
  		      os=-nextstep3
  			;;
  		esac
  		;;
  	nh3000)
  		basic_machine=m68k-harris
  		os=-cxux
  		;;
  	nh[45]000)
  		basic_machine=m88k-harris
  		os=-cxux
  		;;
  	nindy960)
  		basic_machine=i960-intel
  		os=-nindy
  		;;
  	mon960)
  		basic_machine=i960-intel
  		os=-mon960
  		;;
  	nonstopux)
  		basic_machine=mips-compaq
  		os=-nonstopux
  		;;
  	np1)
  		basic_machine=np1-gould
  		;;
  	nsr-tandem)
  		basic_machine=nsr-tandem
  		;;
  	op50n-* | op60c-*)
  		basic_machine=hppa1.1-oki
  		os=-proelf
  		;;
  	OSE68000 | ose68000)
  		basic_machine=m68000-ericsson
  		os=-ose
  		;;
  	os68k)
  		basic_machine=m68k-none
  		os=-os68k
  		;;
  	pa-hitachi)
  		basic_machine=hppa1.1-hitachi
  		os=-hiuxwe2
  		;;
  	paragon)
  		basic_machine=i860-intel
  		os=-osf
  		;;
  	pbd)
  		basic_machine=sparc-tti
  		;;
  	pbb)
  		basic_machine=m68k-tti
  		;;
          pc532 | pc532-*)
  		basic_machine=ns32k-pc532
  		;;
  	pentium | p5 | k5 | k6 | nexgen)
  		basic_machine=i586-pc
  		;;
  	pentiumpro | p6 | 6x86 | athlon)
  		basic_machine=i686-pc
  		;;
  	pentiumii | pentium2)
  		basic_machine=i686-pc
  		;;
  	pentium-* | p5-* | k5-* | k6-* | nexgen-*)
  		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
  		;;
  	pentiumpro-* | p6-* | 6x86-* | athlon-*)
  		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
  		;;
  	pentiumii-* | pentium2-*)
  		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
  		;;
  	pn)
  		basic_machine=pn-gould
  		;;
  	power)	basic_machine=power-ibm
  		;;
  	ppc)	basic_machine=powerpc-unknown
  	        ;;
  	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
  		;;
  	ppcle | powerpclittle | ppc-le | powerpc-little)
  		basic_machine=powerpcle-unknown
  	        ;;
  	ppcle-* | powerpclittle-*)
  		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
  		;;
  	ppc64)	basic_machine=powerpc64-unknown
  	        ;;
  	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
  		;;
  	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
  		basic_machine=powerpc64le-unknown
  	        ;;
  	ppc64le-* | powerpc64little-*)
  		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
  		;;
  	ps2)
  		basic_machine=i386-ibm
  		;;
  	pw32)
  		basic_machine=i586-unknown
  		os=-pw32
  		;;
  	rom68k)
  		basic_machine=m68k-rom68k
  		os=-coff
  		;;
  	rm[46]00)
  		basic_machine=mips-siemens
  		;;
  	rtpc | rtpc-*)
  		basic_machine=romp-ibm
  		;;
  	sa29200)
  		basic_machine=a29k-amd
  		os=-udi
  		;;
  	sequent)
  		basic_machine=i386-sequent
  		;;
  	sh)
  		basic_machine=sh-hitachi
  		os=-hms
  		;;
  	sparclite-wrs)
  		basic_machine=sparclite-wrs
  		os=-vxworks
  		;;
  	sps7)
  		basic_machine=m68k-bull
  		os=-sysv2
  		;;
  	spur)
  		basic_machine=spur-unknown
  		;;
  	st2000)
  		basic_machine=m68k-tandem
  		;;
  	stratus)
  		basic_machine=i860-stratus
  		os=-sysv4
  		;;
  	sun2)
  		basic_machine=m68000-sun
  		;;
  	sun2os3)
  		basic_machine=m68000-sun
  		os=-sunos3
  		;;
  	sun2os4)
  		basic_machine=m68000-sun
  		os=-sunos4
  		;;
  	sun3os3)
  		basic_machine=m68k-sun
  		os=-sunos3
  		;;
  	sun3os4)
  		basic_machine=m68k-sun
  		os=-sunos4
  		;;
  	sun4os3)
  		basic_machine=sparc-sun
  		os=-sunos3
  		;;
  	sun4os4)
  		basic_machine=sparc-sun
  		os=-sunos4
  		;;
  	sun4sol2)
  		basic_machine=sparc-sun
  		os=-solaris2
  		;;
  	sun3 | sun3-*)
  		basic_machine=m68k-sun
  		;;
  	sun4)
  		basic_machine=sparc-sun
  		;;
  	sun386 | sun386i | roadrunner)
  		basic_machine=i386-sun
  		;;
  	sv1)
  		basic_machine=sv1-cray
  		os=-unicos
  		;;
  	symmetry)
  		basic_machine=i386-sequent
  		os=-dynix
  		;;
  	t3e)
  		basic_machine=t3e-cray
  		os=-unicos
  		;;
  	tic54x | c54x*)
  		basic_machine=tic54x-unknown
  		os=-coff
  		;;
  	tx39)
  		basic_machine=mipstx39-unknown
  		;;
  	tx39el)
  		basic_machine=mipstx39el-unknown
  		;;
  	tower | tower-32)
  		basic_machine=m68k-ncr
  		;;
  	udi29k)
  		basic_machine=a29k-amd
  		os=-udi
  		;;
  	ultra3)
  		basic_machine=a29k-nyu
  		os=-sym1
  		;;
  	v810 | necv810)
  		basic_machine=v810-nec
  		os=-none
  		;;
  	vaxv)
  		basic_machine=vax-dec
  		os=-sysv
  		;;
  	vms)
  		basic_machine=vax-dec
  		os=-vms
  		;;
  	vpp*|vx|vx-*)
                 basic_machine=f301-fujitsu
                 ;;
  	vxworks960)
  		basic_machine=i960-wrs
  		os=-vxworks
  		;;
  	vxworks68)
  		basic_machine=m68k-wrs
  		os=-vxworks
  		;;
  	vxworks29k)
  		basic_machine=a29k-wrs
  		os=-vxworks
  		;;
  	w65*)
  		basic_machine=w65-wdc
  		os=-none
  		;;
  	w89k-*)
  		basic_machine=hppa1.1-winbond
  		os=-proelf
  		;;
  	windows32)
  		basic_machine=i386-pc
  		os=-windows32-msvcrt
  		;;
  	xmp)
  		basic_machine=xmp-cray
  		os=-unicos
  		;;
          xps | xps100)
  		basic_machine=xps100-honeywell
  		;;
  	z8k-*-coff)
  		basic_machine=z8k-unknown
  		os=-sim
  		;;
  	none)
  		basic_machine=none-none
  		os=-none
  		;;
  
  # Here we handle the default manufacturer of certain CPU types.  It is in
  # some cases the only manufacturer, in others, it is the most popular.
  	w89k)
  		basic_machine=hppa1.1-winbond
  		;;
  	op50n)
  		basic_machine=hppa1.1-oki
  		;;
  	op60c)
  		basic_machine=hppa1.1-oki
  		;;
  	mips)
  		if [ x$os = x-linux-gnu ]; then
  			basic_machine=mips-unknown
  		else
  			basic_machine=mips-mips
  		fi
  		;;
  	romp)
  		basic_machine=romp-ibm
  		;;
  	rs6000)
  		basic_machine=rs6000-ibm
  		;;
  	vax)
  		basic_machine=vax-dec
  		;;
  	pdp10)
  		# there are many clones, so DEC is not a safe bet
  		basic_machine=pdp10-unknown
  		;;
  	pdp11)
  		basic_machine=pdp11-dec
  		;;
  	we32k)
  		basic_machine=we32k-att
  		;;
  	sh3 | sh4 | sh3eb | sh4eb)
  		basic_machine=sh-unknown
  		;;
  	sparc | sparcv9 | sparcv9b)
  		basic_machine=sparc-sun
  		;;
          cydra)
  		basic_machine=cydra-cydrome
  		;;
  	orion)
  		basic_machine=orion-highlevel
  		;;
  	orion105)
  		basic_machine=clipper-highlevel
  		;;
  	mac | mpw | mac-mpw)
  		basic_machine=m68k-apple
  		;;
  	pmac | pmac-mpw)
  		basic_machine=powerpc-apple
  		;;
  	c4x*)
  		basic_machine=c4x-none
  		os=-coff
  		;;
  	*-unknown)
  		# Make sure to match an already-canonicalized machine name.
  		;;
  	*)
  		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
  		exit 1
  		;;
  esac
  
  # Here we canonicalize certain aliases for manufacturers.
  case $basic_machine in
  	*-digital*)
  		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
  		;;
  	*-commodore*)
  		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
  		;;
  	*)
  		;;
  esac
  
  # Decode manufacturer-specific aliases for certain operating systems.
  
  if [ x"$os" != x"" ]
  then
  case $os in
          # First match some system type aliases
          # that might get confused with valid system types.
  	# -solaris* is a basic system type, with this one exception.
  	-solaris1 | -solaris1.*)
  		os=`echo $os | sed -e 's|solaris1|sunos4|'`
  		;;
  	-solaris)
  		os=-solaris2
  		;;
  	-svr4*)
  		os=-sysv4
  		;;
  	-unixware*)
  		os=-sysv4.2uw
  		;;
  	-gnu/linux*)
  		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
  		;;
  	# First accept the basic system types.
  	# The portable systems comes first.
  	# Each alternative MUST END IN A *, to match a version number.
  	# -sysv* is not here because it comes later, after sysvr4.
  	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
  	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
  	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
  	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
  	      | -aos* \
  	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
  	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
  	      | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
  	      | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
  	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
  	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
  	      | -chorusos* | -chorusrdb* \
  	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
  	      | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
  	      | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
  	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
  	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
  	      | -os2* | -vos*)
  	# Remember, each alternative MUST END IN *, to match a version number.
  		;;
  	-qnx*)
  		case $basic_machine in
  		    x86-* | i*86-*)
  			;;
  		    *)
  			os=-nto$os
  			;;
  		esac
  		;;
  	-nto*)
  		os=-nto-qnx
  		;;
  	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
  	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
  	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
  		;;
  	-mac*)
  		os=`echo $os | sed -e 's|mac|macos|'`
  		;;
  	-linux*)
  		os=`echo $os | sed -e 's|linux|linux-gnu|'`
  		;;
  	-sunos5*)
  		os=`echo $os | sed -e 's|sunos5|solaris2|'`
  		;;
  	-sunos6*)
  		os=`echo $os | sed -e 's|sunos6|solaris3|'`
  		;;
  	-opened*)
  		os=-openedition
  		;;
  	-wince*)
  		os=-wince
  		;;
  	-osfrose*)
  		os=-osfrose
  		;;
  	-osf*)
  		os=-osf
  		;;
  	-utek*)
  		os=-bsd
  		;;
  	-dynix*)
  		os=-bsd
  		;;
  	-acis*)
  		os=-aos
  		;;
  	-386bsd)
  		os=-bsd
  		;;
  	-ctix* | -uts*)
  		os=-sysv
  		;;
  	-ns2 )
  	        os=-nextstep2
  		;;
  	-nsk*)
  		os=-nsk
  		;;
  	# Preserve the version number of sinix5.
  	-sinix5.*)
  		os=`echo $os | sed -e 's|sinix|sysv|'`
  		;;
  	-sinix*)
  		os=-sysv4
  		;;
  	-triton*)
  		os=-sysv3
  		;;
  	-oss*)
  		os=-sysv3
  		;;
  	-svr4)
  		os=-sysv4
  		;;
  	-svr3)
  		os=-sysv3
  		;;
  	-sysvr4)
  		os=-sysv4
  		;;
  	# This must come after -sysvr4.
  	-sysv*)
  		;;
  	-ose*)
  		os=-ose
  		;;
  	-es1800*)
  		os=-ose
  		;;
  	-xenix)
  		os=-xenix
  		;;
          -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
  	        os=-mint
  		;;
  	-none)
  		;;
  	*)
  		# Get rid of the `-' at the beginning of $os.
  		os=`echo $os | sed 's/[^-]*-//'`
  		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
  		exit 1
  		;;
  esac
  else
  
  # Here we handle the default operating systems that come with various machines.
  # The value should be what the vendor currently ships out the door with their
  # machine or put another way, the most popular os provided with the machine.
  
  # Note that if you're going to try to match "-MANUFACTURER" here (say,
  # "-sun"), then you have to tell the case statement up towards the top
  # that MANUFACTURER isn't an operating system.  Otherwise, code above
  # will signal an error saying that MANUFACTURER isn't an operating
  # system, and we'll never get to this point.
  
  case $basic_machine in
  	*-acorn)
  		os=-riscix1.2
  		;;
  	arm*-rebel)
  		os=-linux
  		;;
  	arm*-semi)
  		os=-aout
  		;;
  	pdp10-*)
  		os=-tops20
  		;;
          pdp11-*)
  		os=-none
  		;;
  	*-dec | vax-*)
  		os=-ultrix4.2
  		;;
  	m68*-apollo)
  		os=-domain
  		;;
  	i386-sun)
  		os=-sunos4.0.2
  		;;
  	m68000-sun)
  		os=-sunos3
  		# This also exists in the configure program, but was not the
  		# default.
  		# os=-sunos4
  		;;
  	m68*-cisco)
  		os=-aout
  		;;
  	mips*-cisco)
  		os=-elf
  		;;
  	mips*-*)
  		os=-elf
  		;;
  	*-tti)	# must be before sparc entry or we get the wrong os.
  		os=-sysv3
  		;;
  	sparc-* | *-sun)
  		os=-sunos4.1.1
  		;;
  	*-be)
  		os=-beos
  		;;
  	*-ibm)
  		os=-aix
  		;;
  	*-wec)
  		os=-proelf
  		;;
  	*-winbond)
  		os=-proelf
  		;;
  	*-oki)
  		os=-proelf
  		;;
  	*-hp)
  		os=-hpux
  		;;
  	*-hitachi)
  		os=-hiux
  		;;
  	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
  		os=-sysv
  		;;
  	*-cbm)
  		os=-amigaos
  		;;
  	*-dg)
  		os=-dgux
  		;;
  	*-dolphin)
  		os=-sysv3
  		;;
  	m68k-ccur)
  		os=-rtu
  		;;
  	m88k-omron*)
  		os=-luna
  		;;
  	*-next )
  		os=-nextstep
  		;;
  	*-sequent)
  		os=-ptx
  		;;
  	*-crds)
  		os=-unos
  		;;
  	*-ns)
  		os=-genix
  		;;
  	i370-*)
  		os=-mvs
  		;;
  	*-next)
  		os=-nextstep3
  		;;
          *-gould)
  		os=-sysv
  		;;
          *-highlevel)
  		os=-bsd
  		;;
  	*-encore)
  		os=-bsd
  		;;
          *-sgi)
  		os=-irix
  		;;
          *-siemens)
  		os=-sysv4
  		;;
  	*-masscomp)
  		os=-rtu
  		;;
  	f30[01]-fujitsu | f700-fujitsu)
  		os=-uxpv
  		;;
  	*-rom68k)
  		os=-coff
  		;;
  	*-*bug)
  		os=-coff
  		;;
  	*-apple)
  		os=-macos
  		;;
  	*-atari*)
  		os=-mint
  		;;
  	*)
  		os=-none
  		;;
  esac
  fi
  
  # Here we handle the case where we know the os, and the CPU type, but not the
  # manufacturer.  We pick the logical manufacturer.
  vendor=unknown
  case $basic_machine in
  	*-unknown)
  		case $os in
  			-riscix*)
  				vendor=acorn
  				;;
  			-sunos*)
  				vendor=sun
  				;;
  			-aix*)
  				vendor=ibm
  				;;
  			-beos*)
  				vendor=be
  				;;
  			-hpux*)
  				vendor=hp
  				;;
  			-mpeix*)
  				vendor=hp
  				;;
  			-hiux*)
  				vendor=hitachi
  				;;
  			-unos*)
  				vendor=crds
  				;;
  			-dgux*)
  				vendor=dg
  				;;
  			-luna*)
  				vendor=omron
  				;;
  			-genix*)
  				vendor=ns
  				;;
  			-mvs* | -opened*)
  				vendor=ibm
  				;;
  			-ptx*)
  				vendor=sequent
  				;;
  			-vxsim* | -vxworks*)
  				vendor=wrs
  				;;
  			-aux*)
  				vendor=apple
  				;;
  			-hms*)
  				vendor=hitachi
  				;;
  			-mpw* | -macos*)
  				vendor=apple
  				;;
  			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
  				vendor=atari
  				;;
  			-vos*)
  				vendor=stratus
  				;;
  		esac
  		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
  		;;
  esac
  
  echo $basic_machine$os
  exit 0
  
  # Local variables:
  # eval: (add-hook 'write-file-hooks 'time-stamp)
  # time-stamp-start: "timestamp='"
  # time-stamp-format: "%:y-%02m-%02d"
  # time-stamp-end: "'"
  # End:
  Index: ossp-pkg/rc/configure.in
  ============================================================
  $ cvs update -p -r1.1 configure.in
  dnl ##
  dnl ##  rc - OSSP Runcommand processor
  dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  dnl ##  Copyright (c) 2002 Ralf S. Engelschall
  dnl ##
  dnl ##  This file is part of OSSP rc, a portable Runcommand processor
  dnl ##  which can be found at http://www.ossp.org/pkg/rc/
  dnl ##
  dnl ##  Permission to use, copy, modify, and distribute this software for
  dnl ##  any purpose with or without fee is hereby granted, provided that
  dnl ##  the above copyright notice and this permission notice appear in all
  dnl ##  copies.
  dnl ##
  dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  dnl ##  SUCH DAMAGE.
  dnl ##
  dnl ##  configure.in: GNU Autoconf source script
  dnl ##
  
  dnl Version requirement and information
  AC_PREREQ(2.52)dnl
  AC_REVISION(1.0)
  
  dnl Process this file with autoconf to produce a configure script
  AC_INIT(rc.h)
  AM_INIT_AUTOMAKE(rc, 0.0.1)
  AM_CONFIG_HEADER(config.h)
  AC_LANG_C
  
  dnl Checks for programs
  AC_PROG_CC
  AM_PROG_LIBTOOL
  AC_PROG_INSTALL
  
  dnl Make all the necessary Makefiles
  AC_OUTPUT(Makefile)
  
  dnl Checking existence
  AC_PATH_PROG(FLEX, flex, true)
  AC_CHECK_LIB(nsl, gethostname)
  AC_CHECK_LIB(socket, accept)
  AC_CHECK_HEADERS(sys/time.h)
  AC_CHECK_FUNCS(inet_aton inet_pton inet_ntoa inet_ntop setitimer)
  Index: ossp-pkg/rc/ltmain.sh
  ============================================================
  $ cvs update -p -r1.1 ltmain.sh
  # ltmain.sh - Provide generalized library-building support services.
  # NOTE: Changing this file will not affect anything until you rerun configure.
  #
  # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
  # Free Software Foundation, Inc.
  # Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
  #
  # This program is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 2 of the License, or
  # (at your option) any later version.
  #
  # This program is distributed in the hope that it will be useful, but
  # WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  # General Public License for more details.
  #
  # You should have received a copy of the GNU General Public License
  # along with this program; if not, write to the Free Software
  # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  #
  # As a special exception to the GNU General Public License, if you
  # distribute this file as part of a program that contains a
  # configuration script generated by Autoconf, you may include it under
  # the same distribution terms that you use for the rest of that program.
  
  # Check that we have a working $echo.
  if test "X$1" = X--no-reexec; then
    # Discard the --no-reexec flag, and continue.
    shift
  elif test "X$1" = X--fallback-echo; then
    # Avoid inline document here, it may be left over
    :
  elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
    # Yippee, $echo works!
    :
  else
    # Restart under the correct shell, and then maybe $echo will work.
    exec $SHELL "$0" --no-reexec ${1+"$@"}
  fi
  
  if test "X$1" = X--fallback-echo; then
    # used as fallback echo
    shift
    cat <<EOF
  $*
  EOF
    exit 0
  fi
  
  # The name of this program.
  progname=`$echo "$0" | sed 's%^.*/%%'`
  modename="$progname"
  
  # Constants.
  PROGRAM=ltmain.sh
  PACKAGE=libtool
  VERSION=1.4.2
  TIMESTAMP=" (1.922.2.53 2001/09/11 03:18:52)"
  
  default_mode=
  help="Try \`$progname --help' for more information."
  magic="%%%MAGIC variable%%%"
  mkdir="mkdir"
  mv="mv -f"
  rm="rm -f"
  
  # Sed substitution that helps us do robust quoting.  It backslashifies
  # metacharacters that are still active within double-quoted strings.
  Xsed='sed -e 1s/^X//'
  sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g'
  SP2NL='tr \040 \012'
  NL2SP='tr \015\012 \040\040'
  
  # NLS nuisances.
  # Only set LANG and LC_ALL to C if already set.
  # These must not be set unconditionally because not all systems understand
  # e.g. LANG=C (notably SCO).
  # We save the old values to restore during execute mode.
  if test "${LC_ALL+set}" = set; then
    save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL
  fi
  if test "${LANG+set}" = set; then
    save_LANG="$LANG"; LANG=C; export LANG
  fi
  
  # Make sure IFS has a sensible default
  : ${IFS=" 	"}
  
  if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
    echo "$modename: not configured to build any kind of library" 1>&2
    echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
    exit 1
  fi
  
  # Global variables.
  mode=$default_mode
  nonopt=
  prev=
  prevopt=
  run=
  show="$echo"
  show_help=
  execute_dlfiles=
  lo2o="s/\\.lo\$/.${objext}/"
  o2lo="s/\\.${objext}\$/.lo/"
  
  # Parse our command line options once, thoroughly.
  while test $# -gt 0
  do
    arg="$1"
    shift
  
    case $arg in
    -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;;
    *) optarg= ;;
    esac
  
    # If the previous option needs an argument, assign it.
    if test -n "$prev"; then
      case $prev in
      execute_dlfiles)
        execute_dlfiles="$execute_dlfiles $arg"
        ;;
      *)
        eval "$prev=\$arg"
        ;;
      esac
  
      prev=
      prevopt=
      continue
    fi
  
    # Have we seen a non-optional argument yet?
    case $arg in
    --help)
      show_help=yes
      ;;
  
    --version)
      echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"
      exit 0
      ;;
  
    --config)
      sed -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $0
      exit 0
      ;;
  
    --debug)
      echo "$progname: enabling shell trace mode"
      set -x
      ;;
  
    --dry-run | -n)
      run=:
      ;;
  
    --features)
      echo "host: $host"
      if test "$build_libtool_libs" = yes; then
        echo "enable shared libraries"
      else
        echo "disable shared libraries"
      fi
      if test "$build_old_libs" = yes; then
        echo "enable static libraries"
      else
        echo "disable static libraries"
      fi
      exit 0
      ;;
  
    --finish) mode="finish" ;;
  
    --mode) prevopt="--mode" prev=mode ;;
    --mode=*) mode="$optarg" ;;
  
    --quiet | --silent)
      show=:
      ;;
  
    -dlopen)
      prevopt="-dlopen"
      prev=execute_dlfiles
      ;;
  
    -*)
      $echo "$modename: unrecognized option \`$arg'" 1>&2
      $echo "$help" 1>&2
      exit 1
      ;;
  
    *)
      nonopt="$arg"
      break
      ;;
    esac
  done
  
  if test -n "$prevopt"; then
    $echo "$modename: option \`$prevopt' requires an argument" 1>&2
    $echo "$help" 1>&2
    exit 1
  fi
  
  # If this variable is set in any of the actions, the command in it
  # will be execed at the end.  This prevents here-documents from being
  # left over by shells.
  exec_cmd=
  
  if test -z "$show_help"; then
  
    # Infer the operation mode.
    if test -z "$mode"; then
      case $nonopt in
      *cc | *++ | gcc* | *-gcc*)
        mode=link
        for arg
        do
  	case $arg in
  	-c)
  	   mode=compile
  	   break
  	   ;;
  	esac
        done
        ;;
      *db | *dbx | *strace | *truss)
        mode=execute
        ;;
      *install*|cp|mv)
        mode=install
        ;;
      *rm)
        mode=uninstall
        ;;
      *)
        # If we have no mode, but dlfiles were specified, then do execute mode.
        test -n "$execute_dlfiles" && mode=execute
  
        # Just use the default operation mode.
        if test -z "$mode"; then
  	if test -n "$nonopt"; then
  	  $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2
  	else
  	  $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2
  	fi
        fi
        ;;
      esac
    fi
  
    # Only execute mode is allowed to have -dlopen flags.
    if test -n "$execute_dlfiles" && test "$mode" != execute; then
      $echo "$modename: unrecognized option \`-dlopen'" 1>&2
      $echo "$help" 1>&2
      exit 1
    fi
  
    # Change the help message to a mode-specific one.
    generic_help="$help"
    help="Try \`$modename --help --mode=$mode' for more information."
  
    # These modes are in order of execution frequency so that they run quickly.
    case $mode in
    # libtool compile mode
    compile)
      modename="$modename: compile"
      # Get the compilation command and the source file.
      base_compile=
      prev=
      lastarg=
      srcfile="$nonopt"
      suppress_output=
  
      user_target=no
      for arg
      do
        case $prev in
        "") ;;
        xcompiler)
  	# Aesthetically quote the previous argument.
  	prev=
  	lastarg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
  
  	case $arg in
  	# Double-quote args containing other shell metacharacters.
  	# Many Bourne shells cannot handle close brackets correctly
  	# in scan sets, so we specify it separately.
  	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
  	  arg="\"$arg\""
  	  ;;
  	esac
  
  	# Add the previous argument to base_compile.
  	if test -z "$base_compile"; then
  	  base_compile="$lastarg"
  	else
  	  base_compile="$base_compile $lastarg"
  	fi
  	continue
  	;;
        esac
  
        # Accept any command-line options.
        case $arg in
        -o)
  	if test "$user_target" != "no"; then
  	  $echo "$modename: you cannot specify \`-o' more than once" 1>&2
  	  exit 1
  	fi
  	user_target=next
  	;;
  
        -static)
  	build_old_libs=yes
  	continue
  	;;
  
        -prefer-pic)
  	pic_mode=yes
  	continue
  	;;
  
        -prefer-non-pic)
  	pic_mode=no
  	continue
  	;;
  
        -Xcompiler)
  	prev=xcompiler
  	continue
  	;;
  
        -Wc,*)
  	args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"`
  	lastarg=
  	save_ifs="$IFS"; IFS=','
  	for arg in $args; do
  	  IFS="$save_ifs"
  
  	  # Double-quote args containing other shell metacharacters.
  	  # Many Bourne shells cannot handle close brackets correctly
  	  # in scan sets, so we specify it separately.
  	  case $arg in
  	    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
  	    arg="\"$arg\""
  	    ;;
  	  esac
  	  lastarg="$lastarg $arg"
  	done
  	IFS="$save_ifs"
  	lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"`
  
  	# Add the arguments to base_compile.
  	if test -z "$base_compile"; then
  	  base_compile="$lastarg"
  	else
  	  base_compile="$base_compile $lastarg"
  	fi
  	continue
  	;;
        esac
  
        case $user_target in
        next)
  	# The next one is the -o target name
  	user_target=yes
  	continue
  	;;
        yes)
  	# We got the output file
  	user_target=set
  	libobj="$arg"
  	continue
  	;;
        esac
  
        # Accept the current argument as the source file.
        lastarg="$srcfile"
        srcfile="$arg"
  
        # Aesthetically quote the previous argument.
  
        # Backslashify any backslashes, double quotes, and dollar signs.
        # These are the only characters that are still specially
        # interpreted inside of double-quoted scrings.
        lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"`
  
        # Double-quote args containing other shell metacharacters.
        # Many Bourne shells cannot handle close brackets correctly
        # in scan sets, so we specify it separately.
        case $lastarg in
        *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
  	lastarg="\"$lastarg\""
  	;;
        esac
  
        # Add the previous argument to base_compile.
        if test -z "$base_compile"; then
  	base_compile="$lastarg"
        else
  	base_compile="$base_compile $lastarg"
        fi
      done
  
      case $user_target in
      set)
        ;;
      no)
        # Get the name of the library object.
        libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'`
        ;;
      *)
        $echo "$modename: you must specify a target with \`-o'" 1>&2
        exit 1
        ;;
      esac
  
      # Recognize several different file suffixes.
      # If the user specifies -o file.o, it is replaced with file.lo
      xform='[cCFSfmso]'
      case $libobj in
      *.ada) xform=ada ;;
      *.adb) xform=adb ;;
      *.ads) xform=ads ;;
      *.asm) xform=asm ;;
      *.c++) xform=c++ ;;
      *.cc) xform=cc ;;
      *.cpp) xform=cpp ;;
      *.cxx) xform=cxx ;;
      *.f90) xform=f90 ;;
      *.for) xform=for ;;
      esac
  
      libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
  
      case $libobj in
      *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;;
      *)
        $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2
        exit 1
        ;;
      esac
  
      if test -z "$base_compile"; then
        $echo "$modename: you must specify a compilation command" 1>&2
        $echo "$help" 1>&2
        exit 1
      fi
  
      # Delete any leftover library objects.
      if test "$build_old_libs" = yes; then
        removelist="$obj $libobj"
      else
        removelist="$libobj"
      fi
  
      $run $rm $removelist
      trap "$run $rm $removelist; exit 1" 1 2 15
  
      # On Cygwin there's no "real" PIC flag so we must build both object types
      case $host_os in
      cygwin* | mingw* | pw32* | os2*)
        pic_mode=default
        ;;
      esac
      if test $pic_mode = no && test "$deplibs_check_method" != pass_all; then
        # non-PIC code in shared libraries is not supported
        pic_mode=default
      fi
  
      # Calculate the filename of the output object if compiler does
      # not support -o with -c
      if test "$compiler_c_o" = no; then
        output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
        lockfile="$output_obj.lock"
        removelist="$removelist $output_obj $lockfile"
        trap "$run $rm $removelist; exit 1" 1 2 15
      else
        need_locks=no
        lockfile=
      fi
  
      # Lock this critical section if it is needed
      # We use this script file to make the link, it avoids creating a new file
      if test "$need_locks" = yes; then
        until $run ln "$0" "$lockfile" 2>/dev/null; do
  	$show "Waiting for $lockfile to be removed"
  	sleep 2
        done
      elif test "$need_locks" = warn; then
        if test -f "$lockfile"; then
  	echo "\
  *** ERROR, $lockfile exists and contains:
  `cat $lockfile 2>/dev/null`
  
  This indicates that another process is trying to use the same
  temporary object file, and libtool could not work around it because
  your compiler does not support \`-c' and \`-o' together.  If you
  repeat this compilation, it may succeed, by chance, but you had better
  avoid parallel builds (make -j) in this platform, or get a better
  compiler."
  
  	$run $rm $removelist
  	exit 1
        fi
        echo $srcfile > "$lockfile"
      fi
  
      if test -n "$fix_srcfile_path"; then
        eval srcfile=\"$fix_srcfile_path\"
      fi
  
      # Only build a PIC object if we are building libtool libraries.
      if test "$build_libtool_libs" = yes; then
        # Without this assignment, base_compile gets emptied.
        fbsd_hideous_sh_bug=$base_compile
  
        if test "$pic_mode" != no; then
  	# All platforms use -DPIC, to notify preprocessed assembler code.
  	command="$base_compile $srcfile $pic_flag -DPIC"
        else
  	# Don't build PIC code
  	command="$base_compile $srcfile"
        fi
        if test "$build_old_libs" = yes; then
  	lo_libobj="$libobj"
  	dir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'`
  	if test "X$dir" = "X$libobj"; then
  	  dir="$objdir"
  	else
  	  dir="$dir/$objdir"
  	fi
  	libobj="$dir/"`$echo "X$libobj" | $Xsed -e 's%^.*/%%'`
  
  	if test -d "$dir"; then
  	  $show "$rm $libobj"
  	  $run $rm $libobj
  	else
  	  $show "$mkdir $dir"
  	  $run $mkdir $dir
  	  status=$?
  	  if test $status -ne 0 && test ! -d $dir; then
  	    exit $status
  	  fi
  	fi
        fi
        if test "$compiler_o_lo" = yes; then
  	output_obj="$libobj"
  	command="$command -o $output_obj"
        elif test "$compiler_c_o" = yes; then
  	output_obj="$obj"
  	command="$command -o $output_obj"
        fi
  
        $run $rm "$output_obj"
        $show "$command"
        if $run eval "$command"; then :
        else
  	test -n "$output_obj" && $run $rm $removelist
  	exit 1
        fi
  
        if test "$need_locks" = warn &&
  	 test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then
  	echo "\
  *** ERROR, $lockfile contains:
  `cat $lockfile 2>/dev/null`
  
  but it should contain:
  $srcfile
  
  This indicates that another process is trying to use the same
  temporary object file, and libtool could not work around it because
  your compiler does not support \`-c' and \`-o' together.  If you
  repeat this compilation, it may succeed, by chance, but you had better
  avoid parallel builds (make -j) in this platform, or get a better
  compiler."
  
  	$run $rm $removelist
  	exit 1
        fi
  
        # Just move the object if needed, then go on to compile the next one
        if test x"$output_obj" != x"$libobj"; then
  	$show "$mv $output_obj $libobj"
  	if $run $mv $output_obj $libobj; then :
  	else
  	  error=$?
  	  $run $rm $removelist
  	  exit $error
  	fi
        fi
  
        # If we have no pic_flag, then copy the object into place and finish.
        if (test -z "$pic_flag" || test "$pic_mode" != default) &&
  	 test "$build_old_libs" = yes; then
  	# Rename the .lo from within objdir to obj
  	if test -f $obj; then
  	  $show $rm $obj
  	  $run $rm $obj
  	fi
  
  	$show "$mv $libobj $obj"
  	if $run $mv $libobj $obj; then :
  	else
  	  error=$?
  	  $run $rm $removelist
  	  exit $error
  	fi
  
  	xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
  	if test "X$xdir" = "X$obj"; then
  	  xdir="."
  	else
  	  xdir="$xdir"
  	fi
  	baseobj=`$echo "X$obj" | $Xsed -e "s%.*/%%"`
  	libobj=`$echo "X$baseobj" | $Xsed -e "$o2lo"`
  	# Now arrange that obj and lo_libobj become the same file
  	$show "(cd $xdir && $LN_S $baseobj $libobj)"
  	if $run eval '(cd $xdir && $LN_S $baseobj $libobj)'; then
  	  # Unlock the critical section if it was locked
  	  if test "$need_locks" != no; then
  	    $run $rm "$lockfile"
  	  fi
  	  exit 0
  	else
  	  error=$?
  	  $run $rm $removelist
  	  exit $error
  	fi
        fi
  
        # Allow error messages only from the first compilation.
        suppress_output=' >/dev/null 2>&1'
      fi
  
      # Only build a position-dependent object if we build old libraries.
      if test "$build_old_libs" = yes; then
        if test "$pic_mode" != yes; then
  	# Don't build PIC code
  	command="$base_compile $srcfile"
        else
  	# All platforms use -DPIC, to notify preprocessed assembler code.
  	command="$base_compile $srcfile $pic_flag -DPIC"
        fi
        if test "$compiler_c_o" = yes; then
  	command="$command -o $obj"
  	output_obj="$obj"
        fi
  
        # Suppress compiler output if we already did a PIC compilation.
        command="$command$suppress_output"
        $run $rm "$output_obj"
        $show "$command"
        if $run eval "$command"; then :
        else
  	$run $rm $removelist
  	exit 1
        fi
  
        if test "$need_locks" = warn &&
  	 test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then
  	echo "\
  *** ERROR, $lockfile contains:
  `cat $lockfile 2>/dev/null`
  
  but it should contain:
  $srcfile
  
  This indicates that another process is trying to use the same
  temporary object file, and libtool could not work around it because
  your compiler does not support \`-c' and \`-o' together.  If you
  repeat this compilation, it may succeed, by chance, but you had better
  avoid parallel builds (make -j) in this platform, or get a better
  compiler."
  
  	$run $rm $removelist
  	exit 1
        fi
  
        # Just move the object if needed
        if test x"$output_obj" != x"$obj"; then
  	$show "$mv $output_obj $obj"
  	if $run $mv $output_obj $obj; then :
  	else
  	  error=$?
  	  $run $rm $removelist
  	  exit $error
  	fi
        fi
  
        # Create an invalid libtool object if no PIC, so that we do not
        # accidentally link it into a program.
        if test "$build_libtool_libs" != yes; then
  	$show "echo timestamp > $libobj"
  	$run eval "echo timestamp > \$libobj" || exit $?
        else
  	# Move the .lo from within objdir
  	$show "$mv $libobj $lo_libobj"
  	if $run $mv $libobj $lo_libobj; then :
  	else
  	  error=$?
  	  $run $rm $removelist
  	  exit $error
  	fi
        fi
      fi
  
      # Unlock the critical section if it was locked
      if test "$need_locks" != no; then
        $run $rm "$lockfile"
      fi
  
      exit 0
      ;;
  
    # libtool link mode
    link | relink)
      modename="$modename: link"
      case $host in
      *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
        # It is impossible to link a dll without this setting, and
        # we shouldn't force the makefile maintainer to figure out
        # which system we are compiling for in order to pass an extra
        # flag for every libtool invokation.
        # allow_undefined=no
  
        # FIXME: Unfortunately, there are problems with the above when trying
        # to make a dll which has undefined symbols, in which case not
        # even a static library is built.  For now, we need to specify
        # -no-undefined on the libtool link line when we can be certain
        # that all symbols are satisfied, otherwise we get a static library.
        allow_undefined=yes
        ;;
      *)
        allow_undefined=yes
        ;;
      esac
      libtool_args="$nonopt"
      compile_command="$nonopt"
      finalize_command="$nonopt"
  
      compile_rpath=
      finalize_rpath=
      compile_shlibpath=
      finalize_shlibpath=
      convenience=
      old_convenience=
      deplibs=
      old_deplibs=
      compiler_flags=
      linker_flags=
      dllsearchpath=
      lib_search_path=`pwd`
  
      avoid_version=no
      dlfiles=
      dlprefiles=
      dlself=no
      export_dynamic=no
      export_symbols=
      export_symbols_regex=
      generated=
      libobjs=
      ltlibs=
      module=no
      no_install=no
      objs=
      prefer_static_libs=no
      preload=no
      prev=
      prevarg=
      release=
      rpath=
      xrpath=
      perm_rpath=
      temp_rpath=
      thread_safe=no
      vinfo=
  
      # We need to know -static, to get the right output filenames.
      for arg
      do
        case $arg in
        -all-static | -static)
  	if test "X$arg" = "X-all-static"; then
  	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
  	    $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2
  	  fi
  	  if test -n "$link_static_flag"; then
  	    dlopen_self=$dlopen_self_static
  	  fi
  	else
  	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
  	    dlopen_self=$dlopen_self_static
  	  fi
  	fi
  	build_libtool_libs=no
  	build_old_libs=yes
  	prefer_static_libs=yes
  	break
  	;;
        esac
      done
  
      # See if our shared archives depend on static archives.
      test -n "$old_archive_from_new_cmds" && build_old_libs=yes
  
      # Go through the arguments, transforming them on the way.
      while test $# -gt 0; do
        arg="$1"
        shift
        case $arg in
        *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
  	qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test
  	;;
        *) qarg=$arg ;;
        esac
        libtool_args="$libtool_args $qarg"
  
        # If the previous option needs an argument, assign it.
        if test -n "$prev"; then
  	case $prev in
  	output)
  	  compile_command="$compile_command @OUTPUT@"
  	  finalize_command="$finalize_command @OUTPUT@"
  	  ;;
  	esac
  
  	case $prev in
  	dlfiles|dlprefiles)
  	  if test "$preload" = no; then
  	    # Add the symbol object into the linking commands.
  	    compile_command="$compile_command @SYMFILE@"
  	    finalize_command="$finalize_command @SYMFILE@"
  	    preload=yes
  	  fi
  	  case $arg in
  	  *.la | *.lo) ;;  # We handle these cases below.
  	  force)
  	    if test "$dlself" = no; then
  	      dlself=needless
  	      export_dynamic=yes
  	    fi
  	    prev=
  	    continue
  	    ;;
  	  self)
  	    if test "$prev" = dlprefiles; then
  	      dlself=yes
  	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
  	      dlself=yes
  	    else
  	      dlself=needless
  	      export_dynamic=yes
  	    fi
  	    prev=
  	    continue
  	    ;;
  	  *)
  	    if test "$prev" = dlfiles; then
  	      dlfiles="$dlfiles $arg"
  	    else
  	      dlprefiles="$dlprefiles $arg"
  	    fi
  	    prev=
  	    continue
  	    ;;
  	  esac
  	  ;;
  	expsyms)
  	  export_symbols="$arg"
  	  if test ! -f "$arg"; then
  	    $echo "$modename: symbol file \`$arg' does not exist"
  	    exit 1
  	  fi
  	  prev=
  	  continue
  	  ;;
  	expsyms_regex)
  	  export_symbols_regex="$arg"
  	  prev=
  	  continue
  	  ;;
  	release)
  	  release="-$arg"
  	  prev=
  	  continue
  	  ;;
  	rpath | xrpath)
  	  # We need an absolute path.
  	  case $arg in
  	  [\\/]* | [A-Za-z]:[\\/]*) ;;
  	  *)
  	    $echo "$modename: only absolute run-paths are allowed" 1>&2
  	    exit 1
  	    ;;
  	  esac
  	  if test "$prev" = rpath; then
  	    case "$rpath " in
  	    *" $arg "*) ;;
  	    *) rpath="$rpath $arg" ;;
  	    esac
  	  else
  	    case "$xrpath " in
  	    *" $arg "*) ;;
  	    *) xrpath="$xrpath $arg" ;;
  	    esac
  	  fi
  	  prev=
  	  continue
  	  ;;
  	xcompiler)
  	  compiler_flags="$compiler_flags $qarg"
  	  prev=
  	  compile_command="$compile_command $qarg"
  	  finalize_command="$finalize_command $qarg"
  	  continue
  	  ;;
  	xlinker)
  	  linker_flags="$linker_flags $qarg"
  	  compiler_flags="$compiler_flags $wl$qarg"
  	  prev=
  	  compile_command="$compile_command $wl$qarg"
  	  finalize_command="$finalize_command $wl$qarg"
  	  continue
  	  ;;
  	*)
  	  eval "$prev=\"\$arg\""
  	  prev=
  	  continue
  	  ;;
  	esac
        fi # test -n $prev
  
        prevarg="$arg"
  
        case $arg in
        -all-static)
  	if test -n "$link_static_flag"; then
  	  compile_command="$compile_command $link_static_flag"
  	  finalize_command="$finalize_command $link_static_flag"
  	fi
  	continue
  	;;
  
        -allow-undefined)
  	# FIXME: remove this flag sometime in the future.
  	$echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2
  	continue
  	;;
  
        -avoid-version)
  	avoid_version=yes
  	continue
  	;;
  
        -dlopen)
  	prev=dlfiles
  	continue
  	;;
  
        -dlpreopen)
  	prev=dlprefiles
  	continue
  	;;
  
        -export-dynamic)
  	export_dynamic=yes
  	continue
  	;;
  
        -export-symbols | -export-symbols-regex)
  	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
  	  $echo "$modename: more than one -exported-symbols argument is not allowed"
  	  exit 1
  	fi
  	if test "X$arg" = "X-export-symbols"; then
  	  prev=expsyms
  	else
  	  prev=expsyms_regex
  	fi
  	continue
  	;;
  
        # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
        # so, if we see these flags be careful not to treat them like -L
        -L[A-Z][A-Z]*:*)
  	case $with_gcc/$host in
  	no/*-*-irix*)
  	  compile_command="$compile_command $arg"
  	  finalize_command="$finalize_command $arg"
  	  ;;
  	esac
  	continue
  	;;
  
        -L*)
  	dir=`$echo "X$arg" | $Xsed -e 's/^-L//'`
  	# We need an absolute path.
  	case $dir in
  	[\\/]* | [A-Za-z]:[\\/]*) ;;
  	*)
  	  absdir=`cd "$dir" && pwd`
  	  if test -z "$absdir"; then
  	    $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2
  	    exit 1
  	  fi
  	  dir="$absdir"
  	  ;;
  	esac
  	case "$deplibs " in
  	*" -L$dir "*) ;;
  	*)
  	  deplibs="$deplibs -L$dir"
  	  lib_search_path="$lib_search_path $dir"
  	  ;;
  	esac
  	case $host in
  	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
  	  case :$dllsearchpath: in
  	  *":$dir:"*) ;;
  	  *) dllsearchpath="$dllsearchpath:$dir";;
  	  esac
  	  ;;
  	esac
  	continue
  	;;
  
        -l*)
  	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
  	  case $host in
  	  *-*-cygwin* | *-*-pw32* | *-*-beos*)
  	    # These systems don't actually have a C or math library (as such)
  	    continue
  	    ;;
  	  *-*-mingw* | *-*-os2*)
  	    # These systems don't actually have a C library (as such)
  	    test "X$arg" = "X-lc" && continue
  	    ;;
  	  *-*-openbsd*)
  	    # Do not include libc due to us having libc/libc_r.
  	    test "X$arg" = "X-lc" && continue
  	    ;;
  	  esac
  	 elif test "X$arg" = "X-lc_r"; then
  	  case $host in
  	  *-*-openbsd*)
  	    # Do not include libc_r directly, use -pthread flag.
  	    continue
  	    ;;
  	  esac
  	fi
  	deplibs="$deplibs $arg"
  	continue
  	;;
  
        -module)
  	module=yes
  	continue
  	;;
  
        -no-fast-install)
  	fast_install=no
  	continue
  	;;
  
        -no-install)
  	case $host in
  	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
  	  # The PATH hackery in wrapper scripts is required on Windows
  	  # in order for the loader to find any dlls it needs.
  	  $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2
  	  $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2
  	  fast_install=no
  	  ;;
  	*) no_install=yes ;;
  	esac
  	continue
  	;;
  
        -no-undefined)
  	allow_undefined=no
  	continue
  	;;
  
        -o) prev=output ;;
  
        -release)
  	prev=release
  	continue
  	;;
  
        -rpath)
  	prev=rpath
  	continue
  	;;
  
        -R)
  	prev=xrpath
  	continue
  	;;
  
        -R*)
  	dir=`$echo "X$arg" | $Xsed -e 's/^-R//'`
  	# We need an absolute path.
  	case $dir in
  	[\\/]* | [A-Za-z]:[\\/]*) ;;
  	*)
  	  $echo "$modename: only absolute run-paths are allowed" 1>&2
  	  exit 1
  	  ;;
  	esac
  	case "$xrpath " in
  	*" $dir "*) ;;
  	*) xrpath="$xrpath $dir" ;;
  	esac
  	continue
  	;;
  
        -static)
  	# The effects of -static are defined in a previous loop.
  	# We used to do the same as -all-static on platforms that
  	# didn't have a PIC flag, but the assumption that the effects
  	# would be equivalent was wrong.  It would break on at least
  	# Digital Unix and AIX.
  	continue
  	;;
  
        -thread-safe)
  	thread_safe=yes
  	continue
  	;;
  
        -version-info)
  	prev=vinfo
  	continue
  	;;
  
        -Wc,*)
  	args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'`
  	arg=
  	save_ifs="$IFS"; IFS=','
  	for flag in $args; do
  	  IFS="$save_ifs"
  	  case $flag in
  	    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
  	    flag="\"$flag\""
  	    ;;
  	  esac
  	  arg="$arg $wl$flag"
  	  compiler_flags="$compiler_flags $flag"
  	done
  	IFS="$save_ifs"
  	arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
  	;;
  
        -Wl,*)
  	args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'`
  	arg=
  	save_ifs="$IFS"; IFS=','
  	for flag in $args; do
  	  IFS="$save_ifs"
  	  case $flag in
  	    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
  	    flag="\"$flag\""
  	    ;;
  	  esac
  	  arg="$arg $wl$flag"
  	  compiler_flags="$compiler_flags $wl$flag"
  	  linker_flags="$linker_flags $flag"
  	done
  	IFS="$save_ifs"
  	arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
  	;;
  
        -Xcompiler)
  	prev=xcompiler
  	continue
  	;;
  
        -Xlinker)
  	prev=xlinker
  	continue
  	;;
  
        # Some other compiler flag.
        -* | +*)
  	# Unknown arguments in both finalize_command and compile_command need
  	# to be aesthetically quoted because they are evaled later.
  	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
  	case $arg in
  	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
  	  arg="\"$arg\""
  	  ;;
  	esac
  	;;
  
        *.lo | *.$objext)
  	# A library or standard object.
  	if test "$prev" = dlfiles; then
  	  # This file was specified with -dlopen.
  	  if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
  	    dlfiles="$dlfiles $arg"
  	    prev=
  	    continue
  	  else
  	    # If libtool objects are unsupported, then we need to preload.
  	    prev=dlprefiles
  	  fi
  	fi
  
  	if test "$prev" = dlprefiles; then
  	  # Preload the old-style object.
  	  dlprefiles="$dlprefiles "`$echo "X$arg" | $Xsed -e "$lo2o"`
  	  prev=
  	else
  	  case $arg in
  	  *.lo) libobjs="$libobjs $arg" ;;
  	  *) objs="$objs $arg" ;;
  	  esac
  	fi
  	;;
  
        *.$libext)
  	# An archive.
  	deplibs="$deplibs $arg"
  	old_deplibs="$old_deplibs $arg"
  	continue
  	;;
  
        *.la)
  	# A libtool-controlled library.
  
  	if test "$prev" = dlfiles; then
  	  # This library was specified with -dlopen.
  	  dlfiles="$dlfiles $arg"
  	  prev=
  	elif test "$prev" = dlprefiles; then
  	  # The library was specified with -dlpreopen.
  	  dlprefiles="$dlprefiles $arg"
  	  prev=
  	else
  	  deplibs="$deplibs $arg"
  	fi
  	continue
  	;;
  
        # Some other compiler argument.
        *)
  	# Unknown arguments in both finalize_command and compile_command need
  	# to be aesthetically quoted because they are evaled later.
  	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
  	case $arg in
  	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
  	  arg="\"$arg\""
  	  ;;
  	esac
  	;;
        esac # arg
  
        # Now actually substitute the argument into the commands.
        if test -n "$arg"; then
  	compile_command="$compile_command $arg"
  	finalize_command="$finalize_command $arg"
        fi
      done # argument parsing loop
  
      if test -n "$prev"; then
        $echo "$modename: the \`$prevarg' option requires an argument" 1>&2
        $echo "$help" 1>&2
        exit 1
      fi
  
      if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
        eval arg=\"$export_dynamic_flag_spec\"
        compile_command="$compile_command $arg"
        finalize_command="$finalize_command $arg"
      fi
  
      # calculate the name of the file, without its directory
      outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
      libobjs_save="$libobjs"
  
      if test -n "$shlibpath_var"; then
        # get the directories listed in $shlibpath_var
        eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
      else
        shlib_search_path=
      fi
      eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
      eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
  
      output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
      if test "X$output_objdir" = "X$output"; then
        output_objdir="$objdir"
      else
        output_objdir="$output_objdir/$objdir"
      fi
      # Create the object directory.
      if test ! -d $output_objdir; then
        $show "$mkdir $output_objdir"
        $run $mkdir $output_objdir
        status=$?
        if test $status -ne 0 && test ! -d $output_objdir; then
  	exit $status
        fi
      fi
  
      # Determine the type of output
      case $output in
      "")
        $echo "$modename: you must specify an output file" 1>&2
        $echo "$help" 1>&2
        exit 1
        ;;
      *.$libext) linkmode=oldlib ;;
      *.lo | *.$objext) linkmode=obj ;;
      *.la) linkmode=lib ;;
      *) linkmode=prog ;; # Anything else should be a program.
      esac
  
      specialdeplibs=
      libs=
      # Find all interdependent deplibs by searching for libraries
      # that are linked more than once (e.g. -la -lb -la)
      for deplib in $deplibs; do
        case "$libs " in
        *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
        esac
        libs="$libs $deplib"
      done
      deplibs=
      newdependency_libs=
      newlib_search_path=
      need_relink=no # whether we're linking any uninstalled libtool libraries
      notinst_deplibs= # not-installed libtool libraries
      notinst_path= # paths that contain not-installed libtool libraries
      case $linkmode in
      lib)
  	passes="conv link"
  	for file in $dlfiles $dlprefiles; do
  	  case $file in
  	  *.la) ;;
  	  *)
  	    $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2
  	    exit 1
  	    ;;
  	  esac
  	done
  	;;
      prog)
  	compile_deplibs=
  	finalize_deplibs=
  	alldeplibs=no
  	newdlfiles=
  	newdlprefiles=
  	passes="conv scan dlopen dlpreopen link"
  	;;
      *)  passes="conv"
  	;;
      esac
      for pass in $passes; do
        if test $linkmode = prog; then
  	# Determine which files to process
  	case $pass in
  	dlopen)
  	  libs="$dlfiles"
  	  save_deplibs="$deplibs" # Collect dlpreopened libraries
  	  deplibs=
  	  ;;
  	dlpreopen) libs="$dlprefiles" ;;
  	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
  	esac
        fi
        for deplib in $libs; do
  	lib=
  	found=no
  	case $deplib in
  	-l*)
  	  if test $linkmode = oldlib && test $linkmode = obj; then
  	    $echo "$modename: warning: \`-l' is ignored for archives/objects: $deplib" 1>&2
  	    continue
  	  fi
  	  if test $pass = conv; then
  	    deplibs="$deplib $deplibs"
  	    continue
  	  fi
  	  name=`$echo "X$deplib" | $Xsed -e 's/^-l//'`
  	  for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do
  	    # Search the libtool library
  	    lib="$searchdir/lib${name}.la"
  	    if test -f "$lib"; then
  	      found=yes
  	      break
  	    fi
  	  done
  	  if test "$found" != yes; then
  	    # deplib doesn't seem to be a libtool library
  	    if test "$linkmode,$pass" = "prog,link"; then
  	      compile_deplibs="$deplib $compile_deplibs"
  	      finalize_deplibs="$deplib $finalize_deplibs"
  	    else
  	      deplibs="$deplib $deplibs"
  	      test $linkmode = lib && newdependency_libs="$deplib $newdependency_libs"
  	    fi
  	    continue
  	  fi
  	  ;; # -l
  	-L*)
  	  case $linkmode in
  	  lib)
  	    deplibs="$deplib $deplibs"
  	    test $pass = conv && continue
  	    newdependency_libs="$deplib $newdependency_libs"
  	    newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
  	    ;;
  	  prog)
  	    if test $pass = conv; then
  	      deplibs="$deplib $deplibs"
  	      continue
  	    fi
  	    if test $pass = scan; then
  	      deplibs="$deplib $deplibs"
  	      newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
  	    else
  	      compile_deplibs="$deplib $compile_deplibs"
  	      finalize_deplibs="$deplib $finalize_deplibs"
  	    fi
  	    ;;
  	  *)
  	    $echo "$modename: warning: \`-L' is ignored for archives/objects: $deplib" 1>&2
  	    ;;
  	  esac # linkmode
  	  continue
  	  ;; # -L
  	-R*)
  	  if test $pass = link; then
  	    dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
  	    # Make sure the xrpath contains only unique directories.
  	    case "$xrpath " in
  	    *" $dir "*) ;;
  	    *) xrpath="$xrpath $dir" ;;
  	    esac
  	  fi
  	  deplibs="$deplib $deplibs"
  	  continue
  	  ;;
  	*.la) lib="$deplib" ;;
  	*.$libext)
  	  if test $pass = conv; then
  	    deplibs="$deplib $deplibs"
  	    continue
  	  fi
  	  case $linkmode in
  	  lib)
  	    if test "$deplibs_check_method" != pass_all; then
  	      echo
  	      echo "*** Warning: This library needs some functionality provided by $deplib."
  	      echo "*** I have the capability to make that library automatically link in when"
  	      echo "*** you link to this library.  But I can only do this if you have a"
  	      echo "*** shared version of the library, which you do not appear to have."
  	    else
  	      echo
  	      echo "*** Warning: Linking the shared library $output against the"
  	      echo "*** static library $deplib is not portable!"
  	      deplibs="$deplib $deplibs"
  	    fi
  	    continue
  	    ;;
  	  prog)
  	    if test $pass != link; then
  	      deplibs="$deplib $deplibs"
  	    else
  	      compile_deplibs="$deplib $compile_deplibs"
  	      finalize_deplibs="$deplib $finalize_deplibs"
  	    fi
  	    continue
  	    ;;
  	  esac # linkmode
  	  ;; # *.$libext
  	*.lo | *.$objext)
  	  if test $pass = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
  	    # If there is no dlopen support or we're linking statically,
  	    # we need to preload.
  	    newdlprefiles="$newdlprefiles $deplib"
  	    compile_deplibs="$deplib $compile_deplibs"
  	    finalize_deplibs="$deplib $finalize_deplibs"
  	  else
  	    newdlfiles="$newdlfiles $deplib"
  	  fi
  	  continue
  	  ;;
  	%DEPLIBS%)
  	  alldeplibs=yes
  	  continue
  	  ;;
  	esac # case $deplib
  	if test $found = yes || test -f "$lib"; then :
  	else
  	  $echo "$modename: cannot find the library \`$lib'" 1>&2
  	  exit 1
  	fi
  
  	# Check to see that this really is a libtool archive.
  	if (sed -e '2q' $lib | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
  	else
  	  $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
  	  exit 1
  	fi
  
  	ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
  	test "X$ladir" = "X$lib" && ladir="."
  
  	dlname=
  	dlopen=
  	dlpreopen=
  	libdir=
  	library_names=
  	old_library=
  	# If the library was installed with an old release of libtool,
  	# it will not redefine variable installed.
  	installed=yes
  
  	# Read the .la file
  	case $lib in
  	*/* | *\\*) . $lib ;;
  	*) . ./$lib ;;
  	esac
  
  	if test "$linkmode,$pass" = "lib,link" ||
  	   test "$linkmode,$pass" = "prog,scan" ||
  	   { test $linkmode = oldlib && test $linkmode = obj; }; then
  	   # Add dl[pre]opened files of deplib
  	  test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
  	  test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
  	fi
  
  	if test $pass = conv; then
  	  # Only check for convenience libraries
  	  deplibs="$lib $deplibs"
  	  if test -z "$libdir"; then
  	    if test -z "$old_library"; then
  	      $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
  	      exit 1
  	    fi
  	    # It is a libtool convenience library, so add in its objects.
  	    convenience="$convenience $ladir/$objdir/$old_library"
  	    old_convenience="$old_convenience $ladir/$objdir/$old_library"
  	    tmp_libs=
  	    for deplib in $dependency_libs; do
  	      deplibs="$deplib $deplibs"
  	      case "$tmp_libs " in
  	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
  	      esac
  	      tmp_libs="$tmp_libs $deplib"
  	    done
  	  elif test $linkmode != prog && test $linkmode != lib; then
  	    $echo "$modename: \`$lib' is not a convenience library" 1>&2
  	    exit 1
  	  fi
  	  continue
  	fi # $pass = conv
  
  	# Get the name of the library we link against.
  	linklib=
  	for l in $old_library $library_names; do
  	  linklib="$l"
  	done
  	if test -z "$linklib"; then
  	  $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
  	  exit 1
  	fi
  
  	# This library was specified with -dlopen.
  	if test $pass = dlopen; then
  	  if test -z "$libdir"; then
  	    $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2
  	    exit 1
  	  fi
  	  if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
  	    # If there is no dlname, no dlopen support or we're linking
  	    # statically, we need to preload.
  	    dlprefiles="$dlprefiles $lib"
  	  else
  	    newdlfiles="$newdlfiles $lib"
  	  fi
  	  continue
  	fi # $pass = dlopen
  
  	# We need an absolute path.
  	case $ladir in
  	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
  	*)
  	  abs_ladir=`cd "$ladir" && pwd`
  	  if test -z "$abs_ladir"; then
  	    $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2
  	    $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
  	    abs_ladir="$ladir"
  	  fi
  	  ;;
  	esac
  	laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
  
  	# Find the relevant object directory and library name.
  	if test "X$installed" = Xyes; then
  	  if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
  	    $echo "$modename: warning: library \`$lib' was moved." 1>&2
  	    dir="$ladir"
  	    absdir="$abs_ladir"
  	    libdir="$abs_ladir"
  	  else
  	    dir="$libdir"
  	    absdir="$libdir"
  	  fi
  	else
  	  dir="$ladir/$objdir"
  	  absdir="$abs_ladir/$objdir"
  	  # Remove this search path later
  	  notinst_path="$notinst_path $abs_ladir"
  	fi # $installed = yes
  	name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
  
  	# This library was specified with -dlpreopen.
  	if test $pass = dlpreopen; then
  	  if test -z "$libdir"; then
  	    $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2
  	    exit 1
  	  fi
  	  # Prefer using a static library (so that no silly _DYNAMIC symbols
  	  # are required to link).
  	  if test -n "$old_library"; then
  	    newdlprefiles="$newdlprefiles $dir/$old_library"
  	  # Otherwise, use the dlname, so that lt_dlopen finds it.
  	  elif test -n "$dlname"; then
  	    newdlprefiles="$newdlprefiles $dir/$dlname"
  	  else
  	    newdlprefiles="$newdlprefiles $dir/$linklib"
  	  fi
  	fi # $pass = dlpreopen
  
  	if test -z "$libdir"; then
  	  # Link the convenience library
  	  if test $linkmode = lib; then
  	    deplibs="$dir/$old_library $deplibs"
  	  elif test "$linkmode,$pass" = "prog,link"; then
  	    compile_deplibs="$dir/$old_library $compile_deplibs"
  	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
  	  else
  	    deplibs="$lib $deplibs"
  	  fi
  	  continue
  	fi
  
  	if test $linkmode = prog && test $pass != link; then
  	  newlib_search_path="$newlib_search_path $ladir"
  	  deplibs="$lib $deplibs"
  
  	  linkalldeplibs=no
  	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
  	     test "$build_libtool_libs" = no; then
  	    linkalldeplibs=yes
  	  fi
  
  	  tmp_libs=
  	  for deplib in $dependency_libs; do
  	    case $deplib in
  	    -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test
  	    esac
  	    # Need to link against all dependency_libs?
  	    if test $linkalldeplibs = yes; then
  	      deplibs="$deplib $deplibs"
  	    else
  	      # Need to hardcode shared library paths
  	      # or/and link against static libraries
  	      newdependency_libs="$deplib $newdependency_libs"
  	    fi
  	    case "$tmp_libs " in
  	    *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
  	    esac
  	    tmp_libs="$tmp_libs $deplib"
  	  done # for deplib
  	  continue
  	fi # $linkmode = prog...
  
  	link_static=no # Whether the deplib will be linked statically
  	if test -n "$library_names" &&
  	   { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
  	  # Link against this shared library
  
  	  if test "$linkmode,$pass" = "prog,link" ||
  	   { test $linkmode = lib && test $hardcode_into_libs = yes; }; then
  	    # Hardcode the library path.
  	    # Skip directories that are in the system default run-time
  	    # search path.
  	    case " $sys_lib_dlsearch_path " in
  	    *" $absdir "*) ;;
  	    *)
  	      case "$compile_rpath " in
  	      *" $absdir "*) ;;
  	      *) compile_rpath="$compile_rpath $absdir"
  	      esac
  	      ;;
  	    esac
  	    case " $sys_lib_dlsearch_path " in
  	    *" $libdir "*) ;;
  	    *)
  	      case "$finalize_rpath " in
  	      *" $libdir "*) ;;
  	      *) finalize_rpath="$finalize_rpath $libdir"
  	      esac
  	      ;;
  	    esac
  	    if test $linkmode = prog; then
  	      # We need to hardcode the library path
  	      if test -n "$shlibpath_var"; then
  		# Make sure the rpath contains only unique directories.
  		case "$temp_rpath " in
  		*" $dir "*) ;;
  		*" $absdir "*) ;;
  		*) temp_rpath="$temp_rpath $dir" ;;
  		esac
  	      fi
  	    fi
  	  fi # $linkmode,$pass = prog,link...
  
  	  if test "$alldeplibs" = yes &&
  	     { test "$deplibs_check_method" = pass_all ||
  	       { test "$build_libtool_libs" = yes &&
  		 test -n "$library_names"; }; }; then
  	    # We only need to search for static libraries
  	    continue
  	  fi
  
  	  if test "$installed" = no; then
  	    notinst_deplibs="$notinst_deplibs $lib"
  	    need_relink=yes
  	  fi
  
  	  if test -n "$old_archive_from_expsyms_cmds"; then
  	    # figure out the soname
  	    set dummy $library_names
  	    realname="$2"
  	    shift; shift
  	    libname=`eval \\$echo \"$libname_spec\"`
  	    # use dlname if we got it. it's perfectly good, no?
  	    if test -n "$dlname"; then
  	      soname="$dlname"
  	    elif test -n "$soname_spec"; then
  	      # bleh windows
  	      case $host in
  	      *cygwin*)
  		major=`expr $current - $age`
  		versuffix="-$major"
  		;;
  	      esac
  	      eval soname=\"$soname_spec\"
  	    else
  	      soname="$realname"
  	    fi
  
  	    # Make a new name for the extract_expsyms_cmds to use
  	    soroot="$soname"
  	    soname=`echo $soroot | sed -e 's/^.*\///'`
  	    newlib="libimp-`echo $soname | sed 's/^lib//;s/\.dll$//'`.a"
  
  	    # If the library has no export list, then create one now
  	    if test -f "$output_objdir/$soname-def"; then :
  	    else
  	      $show "extracting exported symbol list from \`$soname'"
  	      save_ifs="$IFS"; IFS='~'
  	      eval cmds=\"$extract_expsyms_cmds\"
  	      for cmd in $cmds; do
  		IFS="$save_ifs"
  		$show "$cmd"
  		$run eval "$cmd" || exit $?
  	      done
  	      IFS="$save_ifs"
  	    fi
  
  	    # Create $newlib
  	    if test -f "$output_objdir/$newlib"; then :; else
  	      $show "generating import library for \`$soname'"
  	      save_ifs="$IFS"; IFS='~'
  	      eval cmds=\"$old_archive_from_expsyms_cmds\"
  	      for cmd in $cmds; do
  		IFS="$save_ifs"
  		$show "$cmd"
  		$run eval "$cmd" || exit $?
  	      done
  	      IFS="$save_ifs"
  	    fi
  	    # make sure the library variables are pointing to the new library
  	    dir=$output_objdir
  	    linklib=$newlib
  	  fi # test -n $old_archive_from_expsyms_cmds
  
  	  if test $linkmode = prog || test "$mode" != relink; then
  	    add_shlibpath=
  	    add_dir=
  	    add=
  	    lib_linked=yes
  	    case $hardcode_action in
  	    immediate | unsupported)
  	      if test "$hardcode_direct" = no; then
  		add="$dir/$linklib"
  	      elif test "$hardcode_minus_L" = no; then
  		case $host in
  		*-*-sunos*) add_shlibpath="$dir" ;;
  		esac
  		add_dir="-L$dir"
  		add="-l$name"
  	      elif test "$hardcode_shlibpath_var" = no; then
  		add_shlibpath="$dir"
  		add="-l$name"
  	      else
  		lib_linked=no
  	      fi
  	      ;;
  	    relink)
  	      if test "$hardcode_direct" = yes; then
  		add="$dir/$linklib"
  	      elif test "$hardcode_minus_L" = yes; then
  		add_dir="-L$dir"
  		add="-l$name"
  	      elif test "$hardcode_shlibpath_var" = yes; then
  		add_shlibpath="$dir"
  		add="-l$name"
  	      else
  		lib_linked=no
  	      fi
  	      ;;
  	    *) lib_linked=no ;;
  	    esac
  
  	    if test "$lib_linked" != yes; then
  	      $echo "$modename: configuration error: unsupported hardcode properties"
  	      exit 1
  	    fi
  
  	    if test -n "$add_shlibpath"; then
  	      case :$compile_shlibpath: in
  	      *":$add_shlibpath:"*) ;;
  	      *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
  	      esac
  	    fi
  	    if test $linkmode = prog; then
  	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
  	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
  	    else
  	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
  	      test -n "$add" && deplibs="$add $deplibs"
  	      if test "$hardcode_direct" != yes && \
  		 test "$hardcode_minus_L" != yes && \
  		 test "$hardcode_shlibpath_var" = yes; then
  		case :$finalize_shlibpath: in
  		*":$libdir:"*) ;;
  		*) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
  		esac
  	      fi
  	    fi
  	  fi
  
  	  if test $linkmode = prog || test "$mode" = relink; then
  	    add_shlibpath=
  	    add_dir=
  	    add=
  	    # Finalize command for both is simple: just hardcode it.
  	    if test "$hardcode_direct" = yes; then
  	      add="$libdir/$linklib"
  	    elif test "$hardcode_minus_L" = yes; then
  	      add_dir="-L$libdir"
  	      add="-l$name"
  	    elif test "$hardcode_shlibpath_var" = yes; then
  	      case :$finalize_shlibpath: in
  	      *":$libdir:"*) ;;
  	      *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
  	      esac
  	      add="-l$name"
  	    else
  	      # We cannot seem to hardcode it, guess we'll fake it.
  	      add_dir="-L$libdir"
  	      add="-l$name"
  	    fi
  
  	    if test $linkmode = prog; then
  	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
  	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
  	    else
  	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
  	      test -n "$add" && deplibs="$add $deplibs"
  	    fi
  	  fi
  	elif test $linkmode = prog; then
  	  if test "$alldeplibs" = yes &&
  	     { test "$deplibs_check_method" = pass_all ||
  	       { test "$build_libtool_libs" = yes &&
  		 test -n "$library_names"; }; }; then
  	    # We only need to search for static libraries
  	    continue
  	  fi
  
  	  # Try to link the static library
  	  # Here we assume that one of hardcode_direct or hardcode_minus_L
  	  # is not unsupported.  This is valid on all known static and
  	  # shared platforms.
  	  if test "$hardcode_direct" != unsupported; then
  	    test -n "$old_library" && linklib="$old_library"
  	    compile_deplibs="$dir/$linklib $compile_deplibs"
  	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
  	  else
  	    compile_deplibs="-l$name -L$dir $compile_deplibs"
  	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
  	  fi
  	elif test "$build_libtool_libs" = yes; then
  	  # Not a shared library
  	  if test "$deplibs_check_method" != pass_all; then
  	    # We're trying link a shared library against a static one
  	    # but the system doesn't support it.
  
  	    # Just print a warning and add the library to dependency_libs so
  	    # that the program can be linked against the static library.
  	    echo
  	    echo "*** Warning: This library needs some functionality provided by $lib."
  	    echo "*** I have the capability to make that library automatically link in when"
  	    echo "*** you link to this library.  But I can only do this if you have a"
  	    echo "*** shared version of the library, which you do not appear to have."
  	    if test "$module" = yes; then
  	      echo "*** Therefore, libtool will create a static module, that should work "
  	      echo "*** as long as the dlopening application is linked with the -dlopen flag."
  	      if test -z "$global_symbol_pipe"; then
  		echo
  		echo "*** However, this would only work if libtool was able to extract symbol"
  		echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
  		echo "*** not find such a program.  So, this module is probably useless."
  		echo "*** \`nm' from GNU binutils and a full rebuild may help."
  	      fi
  	      if test "$build_old_libs" = no; then
  		build_libtool_libs=module
  		build_old_libs=yes
  	      else
  		build_libtool_libs=no
  	      fi
  	    fi
  	  else
  	    convenience="$convenience $dir/$old_library"
  	    old_convenience="$old_convenience $dir/$old_library"
  	    deplibs="$dir/$old_library $deplibs"
  	    link_static=yes
  	  fi
  	fi # link shared/static library?
  
  	if test $linkmode = lib; then
  	  if test -n "$dependency_libs" &&
  	     { test $hardcode_into_libs != yes || test $build_old_libs = yes ||
  	       test $link_static = yes; }; then
  	    # Extract -R from dependency_libs
  	    temp_deplibs=
  	    for libdir in $dependency_libs; do
  	      case $libdir in
  	      -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'`
  		   case " $xrpath " in
  		   *" $temp_xrpath "*) ;;
  		   *) xrpath="$xrpath $temp_xrpath";;
  		   esac;;
  	      *) temp_deplibs="$temp_deplibs $libdir";;
  	      esac
  	    done
  	    dependency_libs="$temp_deplibs"
  	  fi
  
  	  newlib_search_path="$newlib_search_path $absdir"
  	  # Link against this library
  	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
  	  # ... and its dependency_libs
  	  tmp_libs=
  	  for deplib in $dependency_libs; do
  	    newdependency_libs="$deplib $newdependency_libs"
  	    case "$tmp_libs " in
  	    *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
  	    esac
  	    tmp_libs="$tmp_libs $deplib"
  	  done
  
  	  if test $link_all_deplibs != no; then
  	    # Add the search paths of all dependency libraries
  	    for deplib in $dependency_libs; do
  	      case $deplib in
  	      -L*) path="$deplib" ;;
  	      *.la)
  		dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'`
  		test "X$dir" = "X$deplib" && dir="."
  		# We need an absolute path.
  		case $dir in
  		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
  		*)
  		  absdir=`cd "$dir" && pwd`
  		  if test -z "$absdir"; then
  		    $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
  		    absdir="$dir"
  		  fi
  		  ;;
  		esac
  		if grep "^installed=no" $deplib > /dev/null; then
  		  path="-L$absdir/$objdir"
  		else
  		  eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
  		  if test -z "$libdir"; then
  		    $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
  		    exit 1
  		  fi
  		  if test "$absdir" != "$libdir"; then
  		    $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2
  		  fi
  		  path="-L$absdir"
  		fi
  		;;
  	      *) continue ;;
  	      esac
  	      case " $deplibs " in
  	      *" $path "*) ;;
  	      *) deplibs="$deplibs $path" ;;
  	      esac
  	    done
  	  fi # link_all_deplibs != no
  	fi # linkmode = lib
        done # for deplib in $libs
        if test $pass = dlpreopen; then
  	# Link the dlpreopened libraries before other libraries
  	for deplib in $save_deplibs; do
  	  deplibs="$deplib $deplibs"
  	done
        fi
        if test $pass != dlopen; then
  	test $pass != scan && dependency_libs="$newdependency_libs"
  	if test $pass != conv; then
  	  # Make sure lib_search_path contains only unique directories.
  	  lib_search_path=
  	  for dir in $newlib_search_path; do
  	    case "$lib_search_path " in
  	    *" $dir "*) ;;
  	    *) lib_search_path="$lib_search_path $dir" ;;
  	    esac
  	  done
  	  newlib_search_path=
  	fi
  
  	if test "$linkmode,$pass" != "prog,link"; then
  	  vars="deplibs"
  	else
  	  vars="compile_deplibs finalize_deplibs"
  	fi
  	for var in $vars dependency_libs; do
  	  # Add libraries to $var in reverse order
  	  eval tmp_libs=\"\$$var\"
  	  new_libs=
  	  for deplib in $tmp_libs; do
  	    case $deplib in
  	    -L*) new_libs="$deplib $new_libs" ;;
  	    *)
  	      case " $specialdeplibs " in
  	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
  	      *)
  		case " $new_libs " in
  		*" $deplib "*) ;;
  		*) new_libs="$deplib $new_libs" ;;
  		esac
  		;;
  	      esac
  	      ;;
  	    esac
  	  done
  	  tmp_libs=
  	  for deplib in $new_libs; do
  	    case $deplib in
  	    -L*)
  	      case " $tmp_libs " in
  	      *" $deplib "*) ;;
  	      *) tmp_libs="$tmp_libs $deplib" ;;
  	      esac
  	      ;;
  	    *) tmp_libs="$tmp_libs $deplib" ;;
  	    esac
  	  done
  	  eval $var=\"$tmp_libs\"
  	done # for var
        fi
        if test "$pass" = "conv" &&
         { test "$linkmode" = "lib" || test "$linkmode" = "prog"; }; then
  	libs="$deplibs" # reset libs
  	deplibs=
        fi
      done # for pass
      if test $linkmode = prog; then
        dlfiles="$newdlfiles"
        dlprefiles="$newdlprefiles"
      fi
  
      case $linkmode in
      oldlib)
        if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
  	$echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2
        fi
  
        if test -n "$rpath"; then
  	$echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2
        fi
  
        if test -n "$xrpath"; then
  	$echo "$modename: warning: \`-R' is ignored for archives" 1>&2
        fi
  
        if test -n "$vinfo"; then
  	$echo "$modename: warning: \`-version-info' is ignored for archives" 1>&2
        fi
  
        if test -n "$release"; then
  	$echo "$modename: warning: \`-release' is ignored for archives" 1>&2
        fi
  
        if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
  	$echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2
        fi
  
        # Now set the variables for building old libraries.
        build_libtool_libs=no
        oldlibs="$output"
        objs="$objs$old_deplibs"
        ;;
  
      lib)
        # Make sure we only generate libraries of the form `libNAME.la'.
        case $outputname in
        lib*)
  	name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
  	eval libname=\"$libname_spec\"
  	;;
        *)
  	if test "$module" = no; then
  	  $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2
  	  $echo "$help" 1>&2
  	  exit 1
  	fi
  	if test "$need_lib_prefix" != no; then
  	  # Add the "lib" prefix for modules if required
  	  name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
  	  eval libname=\"$libname_spec\"
  	else
  	  libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
  	fi
  	;;
        esac
  
        if test -n "$objs"; then
  	if test "$deplibs_check_method" != pass_all; then
  	  $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1
  	  exit 1
  	else
  	  echo
  	  echo "*** Warning: Linking the shared library $output against the non-libtool"
  	  echo "*** objects $objs is not portable!"
  	  libobjs="$libobjs $objs"
  	fi
        fi
  
        if test "$dlself" != no; then
  	$echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2
        fi
  
        set dummy $rpath
        if test $# -gt 2; then
  	$echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2
        fi
        install_libdir="$2"
  
        oldlibs=
        if test -z "$rpath"; then
  	if test "$build_libtool_libs" = yes; then
  	  # Building a libtool convenience library.
  	  libext=al
  	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
  	  build_libtool_libs=convenience
  	  build_old_libs=yes
  	fi
  
  	if test -n "$vinfo"; then
  	  $echo "$modename: warning: \`-version-info' is ignored for convenience libraries" 1>&2
  	fi
  
  	if test -n "$release"; then
  	  $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2
  	fi
        else
  
  	# Parse the version information argument.
  	save_ifs="$IFS"; IFS=':'
  	set dummy $vinfo 0 0 0
  	IFS="$save_ifs"
  
  	if test -n "$8"; then
  	  $echo "$modename: too many parameters to \`-version-info'" 1>&2
  	  $echo "$help" 1>&2
  	  exit 1
  	fi
  
  	current="$2"
  	revision="$3"
  	age="$4"
  
  	# Check that each of the things are valid numbers.
  	case $current in
  	0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
  	*)
  	  $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2
  	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
  	  exit 1
  	  ;;
  	esac
  
  	case $revision in
  	0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
  	*)
  	  $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2
  	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
  	  exit 1
  	  ;;
  	esac
  
  	case $age in
  	0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
  	*)
  	  $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2
  	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
  	  exit 1
  	  ;;
  	esac
  
  	if test $age -gt $current; then
  	  $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2
  	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
  	  exit 1
  	fi
  
  	# Calculate the version variables.
  	major=
  	versuffix=
  	verstring=
  	case $version_type in
  	none) ;;
  
  	darwin)
  	  # Like Linux, but with the current version available in
  	  # verstring for coding it into the library header
  	  major=.`expr $current - $age`
  	  versuffix="$major.$age.$revision"
  	  # Darwin ld doesn't like 0 for these options...
  	  minor_current=`expr $current + 1`
  	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
  	  ;;
  
  	freebsd-aout)
  	  major=".$current"
  	  versuffix=".$current.$revision";
  	  ;;
  
  	freebsd-elf)
  	  major=".$current"
  	  versuffix=".$current";
  	  ;;
  
  	irix)
  	  major=`expr $current - $age + 1`
  	  verstring="sgi$major.$revision"
  
  	  # Add in all the interfaces that we are compatible with.
  	  loop=$revision
  	  while test $loop != 0; do
  	    iface=`expr $revision - $loop`
  	    loop=`expr $loop - 1`
  	    verstring="sgi$major.$iface:$verstring"
  	  done
  
  	  # Before this point, $major must not contain `.'.
  	  major=.$major
  	  versuffix="$major.$revision"
  	  ;;
  
  	linux)
  	  major=.`expr $current - $age`
  	  versuffix="$major.$age.$revision"
  	  ;;
  
  	osf)
  	  major=`expr $current - $age`
  	  versuffix=".$current.$age.$revision"
  	  verstring="$current.$age.$revision"
  
  	  # Add in all the interfaces that we are compatible with.
  	  loop=$age
  	  while test $loop != 0; do
  	    iface=`expr $current - $loop`
  	    loop=`expr $loop - 1`
  	    verstring="$verstring:${iface}.0"
  	  done
  
  	  # Make executables depend on our current version.
  	  verstring="$verstring:${current}.0"
  	  ;;
  
  	sunos)
  	  major=".$current"
  	  versuffix=".$current.$revision"
  	  ;;
  
  	windows)
  	  # Use '-' rather than '.', since we only want one
  	  # extension on DOS 8.3 filesystems.
  	  major=`expr $current - $age`
  	  versuffix="-$major"
  	  ;;
  
  	*)
  	  $echo "$modename: unknown library version type \`$version_type'" 1>&2
  	  echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
  	  exit 1
  	  ;;
  	esac
  
  	# Clear the version info if we defaulted, and they specified a release.
  	if test -z "$vinfo" && test -n "$release"; then
  	  major=
  	  verstring="0.0"
  	  case $version_type in
  	  darwin)
  	    # we can't check for "0.0" in archive_cmds due to quoting
  	    # problems, so we reset it completely
  	    verstring=""
  	    ;;
  	  *)
  	    verstring="0.0"
  	    ;;
  	  esac
  	  if test "$need_version" = no; then
  	    versuffix=
  	  else
  	    versuffix=".0.0"
  	  fi
  	fi
  
  	# Remove version info from name if versioning should be avoided
  	if test "$avoid_version" = yes && test "$need_version" = no; then
  	  major=
  	  versuffix=
  	  verstring=""
  	fi
  
  	# Check to see if the archive will have undefined symbols.
  	if test "$allow_undefined" = yes; then
  	  if test "$allow_undefined_flag" = unsupported; then
  	    $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2
  	    build_libtool_libs=no
  	    build_old_libs=yes
  	  fi
  	else
  	  # Don't allow undefined symbols.
  	  allow_undefined_flag="$no_undefined_flag"
  	fi
        fi
  
        if test "$mode" != relink; then
  	# Remove our outputs.
  	$show "${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*"
  	$run ${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*
        fi
  
        # Now set the variables for building old libraries.
        if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
  	oldlibs="$oldlibs $output_objdir/$libname.$libext"
  
  	# Transform .lo files to .o files.
  	oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
        fi
  
        # Eliminate all temporary directories.
        for path in $notinst_path; do
  	lib_search_path=`echo "$lib_search_path " | sed -e 's% $path % %g'`
  	deplibs=`echo "$deplibs " | sed -e 's% -L$path % %g'`
  	dependency_libs=`echo "$dependency_libs " | sed -e 's% -L$path % %g'`
        done
  
        if test -n "$xrpath"; then
  	# If the user specified any rpath flags, then add them.
  	temp_xrpath=
  	for libdir in $xrpath; do
  	  temp_xrpath="$temp_xrpath -R$libdir"
  	  case "$finalize_rpath " in
  	  *" $libdir "*) ;;
  	  *) finalize_rpath="$finalize_rpath $libdir" ;;
  	  esac
  	done
  	if test $hardcode_into_libs != yes || test $build_old_libs = yes; then
  	  dependency_libs="$temp_xrpath $dependency_libs"
  	fi
        fi
  
        # Make sure dlfiles contains only unique files that won't be dlpreopened
        old_dlfiles="$dlfiles"
        dlfiles=
        for lib in $old_dlfiles; do
  	case " $dlprefiles $dlfiles " in
  	*" $lib "*) ;;
  	*) dlfiles="$dlfiles $lib" ;;
  	esac
        done
  
        # Make sure dlprefiles contains only unique files
        old_dlprefiles="$dlprefiles"
        dlprefiles=
        for lib in $old_dlprefiles; do
  	case "$dlprefiles " in
  	*" $lib "*) ;;
  	*) dlprefiles="$dlprefiles $lib" ;;
  	esac
        done
  
        if test "$build_libtool_libs" = yes; then
  	if test -n "$rpath"; then
  	  case $host in
  	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*)
  	    # these systems don't actually have a c library (as such)!
  	    ;;
  	  *-*-rhapsody* | *-*-darwin1.[012])
  	    # Rhapsody C library is in the System framework
  	    deplibs="$deplibs -framework System"
  	    ;;
  	  *-*-netbsd*)
  	    # Don't link with libc until the a.out ld.so is fixed.
  	    ;;
  	  *-*-openbsd*)
  	    # Do not include libc due to us having libc/libc_r.
  	    ;;
  	  *)
  	    # Add libc to deplibs on all other systems if necessary.
  	    if test $build_libtool_need_lc = "yes"; then
  	      deplibs="$deplibs -lc"
  	    fi
  	    ;;
  	  esac
  	fi
  
  	# Transform deplibs into only deplibs that can be linked in shared.
  	name_save=$name
  	libname_save=$libname
  	release_save=$release
  	versuffix_save=$versuffix
  	major_save=$major
  	# I'm not sure if I'm treating the release correctly.  I think
  	# release should show up in the -l (ie -lgmp5) so we don't want to
  	# add it in twice.  Is that correct?
  	release=""
  	versuffix=""
  	major=""
  	newdeplibs=
  	droppeddeps=no
  	case $deplibs_check_method in
  	pass_all)
  	  # Don't check for shared/static.  Everything works.
  	  # This might be a little naive.  We might want to check
  	  # whether the library exists or not.  But this is on
  	  # osf3 & osf4 and I'm not really sure... Just
  	  # implementing what was already the behaviour.
  	  newdeplibs=$deplibs
  	  ;;
  	test_compile)
  	  # This code stresses the "libraries are programs" paradigm to its
  	  # limits. Maybe even breaks it.  We compile a program, linking it
  	  # against the deplibs as a proxy for the library.  Then we can check
  	  # whether they linked in statically or dynamically with ldd.
  	  $rm conftest.c
  	  cat > conftest.c <<EOF
  	  int main() { return 0; }
  EOF
  	  $rm conftest
  	  $CC -o conftest conftest.c $deplibs
  	  if test $? -eq 0 ; then
  	    ldd_output=`ldd conftest`
  	    for i in $deplibs; do
  	      name="`expr $i : '-l\(.*\)'`"
  	      # If $name is empty we are operating on a -L argument.
  	      if test -n "$name" && test "$name" != "0"; then
  		libname=`eval \\$echo \"$libname_spec\"`
  		deplib_matches=`eval \\$echo \"$library_names_spec\"`
  		set dummy $deplib_matches
  		deplib_match=$2
  		if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
  		  newdeplibs="$newdeplibs $i"
  		else
  		  droppeddeps=yes
  		  echo
  		  echo "*** Warning: This library needs some functionality provided by $i."
  		  echo "*** I have the capability to make that library automatically link in when"
  		  echo "*** you link to this library.  But I can only do this if you have a"
  		  echo "*** shared version of the library, which you do not appear to have."
  		fi
  	      else
  		newdeplibs="$newdeplibs $i"
  	      fi
  	    done
  	  else
  	    # Error occured in the first compile.  Let's try to salvage the situation:
  	    # Compile a seperate program for each library.
  	    for i in $deplibs; do
  	      name="`expr $i : '-l\(.*\)'`"
  	     # If $name is empty we are operating on a -L argument.
  	      if test -n "$name" && test "$name" != "0"; then
  		$rm conftest
  		$CC -o conftest conftest.c $i
  		# Did it work?
  		if test $? -eq 0 ; then
  		  ldd_output=`ldd conftest`
  		  libname=`eval \\$echo \"$libname_spec\"`
  		  deplib_matches=`eval \\$echo \"$library_names_spec\"`
  		  set dummy $deplib_matches
  		  deplib_match=$2
  		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
  		    newdeplibs="$newdeplibs $i"
  		  else
  		    droppeddeps=yes
  		    echo
  		    echo "*** Warning: This library needs some functionality provided by $i."
  		    echo "*** I have the capability to make that library automatically link in when"
  		    echo "*** you link to this library.  But I can only do this if you have a"
  		    echo "*** shared version of the library, which you do not appear to have."
  		  fi
  		else
  		  droppeddeps=yes
  		  echo
  		  echo "*** Warning!  Library $i is needed by this library but I was not able to"
  		  echo "***  make it link in!  You will probably need to install it or some"
  		  echo "*** library that it depends on before this library will be fully"
  		  echo "*** functional.  Installing it before continuing would be even better."
  		fi
  	      else
  		newdeplibs="$newdeplibs $i"
  	      fi
  	    done
  	  fi
  	  ;;
  	file_magic*)
  	  set dummy $deplibs_check_method
  	  file_magic_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
  	  for a_deplib in $deplibs; do
  	    name="`expr $a_deplib : '-l\(.*\)'`"
  	    # If $name is empty we are operating on a -L argument.
  	    if test -n "$name" && test "$name" != "0"; then
  	      libname=`eval \\$echo \"$libname_spec\"`
  	      for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
  		    potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
  		    for potent_lib in $potential_libs; do
  		      # Follow soft links.
  		      if ls -lLd "$potent_lib" 2>/dev/null \
  			 | grep " -> " >/dev/null; then
  			continue
  		      fi
  		      # The statement above tries to avoid entering an
  		      # endless loop below, in case of cyclic links.
  		      # We might still enter an endless loop, since a link
  		      # loop can be closed while we follow links,
  		      # but so what?
  		      potlib="$potent_lib"
  		      while test -h "$potlib" 2>/dev/null; do
  			potliblink=`ls -ld $potlib | sed 's/.* -> //'`
  			case $potliblink in
  			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
  			*) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
  			esac
  		      done
  		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \
  			 | sed 10q \
  			 | egrep "$file_magic_regex" > /dev/null; then
  			newdeplibs="$newdeplibs $a_deplib"
  			a_deplib=""
  			break 2
  		      fi
  		    done
  	      done
  	      if test -n "$a_deplib" ; then
  		droppeddeps=yes
  		echo
  		echo "*** Warning: This library needs some functionality provided by $a_deplib."
  		echo "*** I have the capability to make that library automatically link in when"
  		echo "*** you link to this library.  But I can only do this if you have a"
  		echo "*** shared version of the library, which you do not appear to have."
  	      fi
  	    else
  	      # Add a -L argument.
  	      newdeplibs="$newdeplibs $a_deplib"
  	    fi
  	  done # Gone through all deplibs.
  	  ;;
  	match_pattern*)
  	  set dummy $deplibs_check_method
  	  match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
  	  for a_deplib in $deplibs; do
  	    name="`expr $a_deplib : '-l\(.*\)'`"
  	    # If $name is empty we are operating on a -L argument.
  	    if test -n "$name" && test "$name" != "0"; then
  	      libname=`eval \\$echo \"$libname_spec\"`
  	      for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
  		potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
  		for potent_lib in $potential_libs; do
  		  if eval echo \"$potent_lib\" 2>/dev/null \
  		      | sed 10q \
  		      | egrep "$match_pattern_regex" > /dev/null; then
  		    newdeplibs="$newdeplibs $a_deplib"
  		    a_deplib=""
  		    break 2
  		  fi
  		done
  	      done
  	      if test -n "$a_deplib" ; then
  		droppeddeps=yes
  		echo
  		echo "*** Warning: This library needs some functionality provided by $a_deplib."
  		echo "*** I have the capability to make that library automatically link in when"
  		echo "*** you link to this library.  But I can only do this if you have a"
  		echo "*** shared version of the library, which you do not appear to have."
  	      fi
  	    else
  	      # Add a -L argument.
  	      newdeplibs="$newdeplibs $a_deplib"
  	    fi
  	  done # Gone through all deplibs.
  	  ;;
  	none | unknown | *)
  	  newdeplibs=""
  	  if $echo "X $deplibs" | $Xsed -e 's/ -lc$//' \
  	       -e 's/ -[LR][^ ]*//g' -e 's/[ 	]//g' |
  	     grep . >/dev/null; then
  	    echo
  	    if test "X$deplibs_check_method" = "Xnone"; then
  	      echo "*** Warning: inter-library dependencies are not supported in this platform."
  	    else
  	      echo "*** Warning: inter-library dependencies are not known to be supported."
  	    fi
  	    echo "*** All declared inter-library dependencies are being dropped."
  	    droppeddeps=yes
  	  fi
  	  ;;
  	esac
  	versuffix=$versuffix_save
  	major=$major_save
  	release=$release_save
  	libname=$libname_save
  	name=$name_save
  
  	case $host in
  	*-*-rhapsody* | *-*-darwin1.[012])
  	  # On Rhapsody replace the C library is the System framework
  	  newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'`
  	  ;;
  	esac
  
  	if test "$droppeddeps" = yes; then
  	  if test "$module" = yes; then
  	    echo
  	    echo "*** Warning: libtool could not satisfy all declared inter-library"
  	    echo "*** dependencies of module $libname.  Therefore, libtool will create"
  	    echo "*** a static module, that should work as long as the dlopening"
  	    echo "*** application is linked with the -dlopen flag."
  	    if test -z "$global_symbol_pipe"; then
  	      echo
  	      echo "*** However, this would only work if libtool was able to extract symbol"
  	      echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
  	      echo "*** not find such a program.  So, this module is probably useless."
  	      echo "*** \`nm' from GNU binutils and a full rebuild may help."
  	    fi
  	    if test "$build_old_libs" = no; then
  	      oldlibs="$output_objdir/$libname.$libext"
  	      build_libtool_libs=module
  	      build_old_libs=yes
  	    else
  	      build_libtool_libs=no
  	    fi
  	  else
  	    echo "*** The inter-library dependencies that have been dropped here will be"
  	    echo "*** automatically added whenever a program is linked with this library"
  	    echo "*** or is declared to -dlopen it."
  
  	    if test $allow_undefined = no; then
  	      echo
  	      echo "*** Since this library must not contain undefined symbols,"
  	      echo "*** because either the platform does not support them or"
  	      echo "*** it was explicitly requested with -no-undefined,"
  	      echo "*** libtool will only create a static version of it."
  	      if test "$build_old_libs" = no; then
  		oldlibs="$output_objdir/$libname.$libext"
  		build_libtool_libs=module
  		build_old_libs=yes
  	      else
  		build_libtool_libs=no
  	      fi
  	    fi
  	  fi
  	fi
  	# Done checking deplibs!
  	deplibs=$newdeplibs
        fi
  
        # All the library-specific variables (install_libdir is set above).
        library_names=
        old_library=
        dlname=
  
        # Test again, we may have decided not to build it any more
        if test "$build_libtool_libs" = yes; then
  	if test $hardcode_into_libs = yes; then
  	  # Hardcode the library paths
  	  hardcode_libdirs=
  	  dep_rpath=
  	  rpath="$finalize_rpath"
  	  test "$mode" != relink && rpath="$compile_rpath$rpath"
  	  for libdir in $rpath; do
  	    if test -n "$hardcode_libdir_flag_spec"; then
  	      if test -n "$hardcode_libdir_separator"; then
  		if test -z "$hardcode_libdirs"; then
  		  hardcode_libdirs="$libdir"
  		else
  		  # Just accumulate the unique libdirs.
  		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
  		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
  		    ;;
  		  *)
  		    hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
  		    ;;
  		  esac
  		fi
  	      else
  		eval flag=\"$hardcode_libdir_flag_spec\"
  		dep_rpath="$dep_rpath $flag"
  	      fi
  	    elif test -n "$runpath_var"; then
  	      case "$perm_rpath " in
  	      *" $libdir "*) ;;
  	      *) perm_rpath="$perm_rpath $libdir" ;;
  	      esac
  	    fi
  	  done
  	  # Substitute the hardcoded libdirs into the rpath.
  	  if test -n "$hardcode_libdir_separator" &&
  	     test -n "$hardcode_libdirs"; then
  	    libdir="$hardcode_libdirs"
  	    eval dep_rpath=\"$hardcode_libdir_flag_spec\"
  	  fi
  	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
  	    # We should set the runpath_var.
  	    rpath=
  	    for dir in $perm_rpath; do
  	      rpath="$rpath$dir:"
  	    done
  	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
  	  fi
  	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
  	fi
  
  	shlibpath="$finalize_shlibpath"
  	test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
  	if test -n "$shlibpath"; then
  	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
  	fi
  
  	# Get the real and link names of the library.
  	eval library_names=\"$library_names_spec\"
  	set dummy $library_names
  	realname="$2"
  	shift; shift
  
  	if test -n "$soname_spec"; then
  	  eval soname=\"$soname_spec\"
  	else
  	  soname="$realname"
  	fi
  	test -z "$dlname" && dlname=$soname
  
  	lib="$output_objdir/$realname"
  	for link
  	do
  	  linknames="$linknames $link"
  	done
  
  	# Ensure that we have .o objects for linkers which dislike .lo
  	# (e.g. aix) in case we are running --disable-static
  	for obj in $libobjs; do
  	  xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
  	  if test "X$xdir" = "X$obj"; then
  	    xdir="."
  	  else
  	    xdir="$xdir"
  	  fi
  	  baseobj=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
  	  oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"`
  	  if test ! -f $xdir/$oldobj; then
  	    $show "(cd $xdir && ${LN_S} $baseobj $oldobj)"
  	    $run eval '(cd $xdir && ${LN_S} $baseobj $oldobj)' || exit $?
  	  fi
  	done
  
  	# Use standard objects if they are pic
  	test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
  
  	# Prepare the list of exported symbols
  	if test -z "$export_symbols"; then
  	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
  	    $show "generating symbol list for \`$libname.la'"
  	    export_symbols="$output_objdir/$libname.exp"
  	    $run $rm $export_symbols
  	    eval cmds=\"$export_symbols_cmds\"
  	    save_ifs="$IFS"; IFS='~'
  	    for cmd in $cmds; do
  	      IFS="$save_ifs"
  	      $show "$cmd"
  	      $run eval "$cmd" || exit $?
  	    done
  	    IFS="$save_ifs"
  	    if test -n "$export_symbols_regex"; then
  	      $show "egrep -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\""
  	      $run eval 'egrep -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
  	      $show "$mv \"${export_symbols}T\" \"$export_symbols\""
  	      $run eval '$mv "${export_symbols}T" "$export_symbols"'
  	    fi
  	  fi
  	fi
  
  	if test -n "$export_symbols" && test -n "$include_expsyms"; then
  	  $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"'
  	fi
  
  	if test -n "$convenience"; then
  	  if test -n "$whole_archive_flag_spec"; then
  	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
  	  else
  	    gentop="$output_objdir/${outputname}x"
  	    $show "${rm}r $gentop"
  	    $run ${rm}r "$gentop"
  	    $show "mkdir $gentop"
  	    $run mkdir "$gentop"
  	    status=$?
  	    if test $status -ne 0 && test ! -d "$gentop"; then
  	      exit $status
  	    fi
  	    generated="$generated $gentop"
  
  	    for xlib in $convenience; do
  	      # Extract the objects.
  	      case $xlib in
  	      [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
  	      *) xabs=`pwd`"/$xlib" ;;
  	      esac
  	      xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
  	      xdir="$gentop/$xlib"
  
  	      $show "${rm}r $xdir"
  	      $run ${rm}r "$xdir"
  	      $show "mkdir $xdir"
  	      $run mkdir "$xdir"
  	      status=$?
  	      if test $status -ne 0 && test ! -d "$xdir"; then
  		exit $status
  	      fi
  	      $show "(cd $xdir && $AR x $xabs)"
  	      $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
  
  	      libobjs="$libobjs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP`
  	    done
  	  fi
  	fi
  
  	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
  	  eval flag=\"$thread_safe_flag_spec\"
  	  linker_flags="$linker_flags $flag"
  	fi
  
  	# Make a backup of the uninstalled library when relinking
  	if test "$mode" = relink; then
  	  $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $?
  	fi
  
  	# Do each of the archive commands.
  	if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
  	  eval cmds=\"$archive_expsym_cmds\"
  	else
  	  eval cmds=\"$archive_cmds\"
  	fi
  	save_ifs="$IFS"; IFS='~'
  	for cmd in $cmds; do
  	  IFS="$save_ifs"
  	  $show "$cmd"
  	  $run eval "$cmd" || exit $?
  	done
  	IFS="$save_ifs"
  
  	# Restore the uninstalled library and exit
  	if test "$mode" = relink; then
  	  $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $?
  	  exit 0
  	fi
  
  	# Create links to the real library.
  	for linkname in $linknames; do
  	  if test "$realname" != "$linkname"; then
  	    $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)"
  	    $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $?
  	  fi
  	done
  
  	# If -module or -export-dynamic was specified, set the dlname.
  	if test "$module" = yes || test "$export_dynamic" = yes; then
  	  # On all known operating systems, these are identical.
  	  dlname="$soname"
  	fi
        fi
        ;;
  
      obj)
        if test -n "$deplibs"; then
  	$echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2
        fi
  
        if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
  	$echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2
        fi
  
        if test -n "$rpath"; then
  	$echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2
        fi
  
        if test -n "$xrpath"; then
  	$echo "$modename: warning: \`-R' is ignored for objects" 1>&2
        fi
  
        if test -n "$vinfo"; then
  	$echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2
        fi
  
        if test -n "$release"; then
  	$echo "$modename: warning: \`-release' is ignored for objects" 1>&2
        fi
  
        case $output in
        *.lo)
  	if test -n "$objs$old_deplibs"; then
  	  $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2
  	  exit 1
  	fi
  	libobj="$output"
  	obj=`$echo "X$output" | $Xsed -e "$lo2o"`
  	;;
        *)
  	libobj=
  	obj="$output"
  	;;
        esac
  
        # Delete the old objects.
        $run $rm $obj $libobj
  
        # Objects from convenience libraries.  This assumes
        # single-version convenience libraries.  Whenever we create
        # different ones for PIC/non-PIC, this we'll have to duplicate
        # the extraction.
        reload_conv_objs=
        gentop=
        # reload_cmds runs $LD directly, so let us get rid of
        # -Wl from whole_archive_flag_spec
        wl=
  
        if test -n "$convenience"; then
  	if test -n "$whole_archive_flag_spec"; then
  	  eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\"
  	else
  	  gentop="$output_objdir/${obj}x"
  	  $show "${rm}r $gentop"
  	  $run ${rm}r "$gentop"
  	  $show "mkdir $gentop"
  	  $run mkdir "$gentop"
  	  status=$?
  	  if test $status -ne 0 && test ! -d "$gentop"; then
  	    exit $status
  	  fi
  	  generated="$generated $gentop"
  
  	  for xlib in $convenience; do
  	    # Extract the objects.
  	    case $xlib in
  	    [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
  	    *) xabs=`pwd`"/$xlib" ;;
  	    esac
  	    xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
  	    xdir="$gentop/$xlib"
  
  	    $show "${rm}r $xdir"
  	    $run ${rm}r "$xdir"
  	    $show "mkdir $xdir"
  	    $run mkdir "$xdir"
  	    status=$?
  	    if test $status -ne 0 && test ! -d "$xdir"; then
  	      exit $status
  	    fi
  	    $show "(cd $xdir && $AR x $xabs)"
  	    $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
  
  	    reload_conv_objs="$reload_objs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP`
  	  done
  	fi
        fi
  
        # Create the old-style object.
        reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
  
        output="$obj"
        eval cmds=\"$reload_cmds\"
        save_ifs="$IFS"; IFS='~'
        for cmd in $cmds; do
  	IFS="$save_ifs"
  	$show "$cmd"
  	$run eval "$cmd" || exit $?
        done
        IFS="$save_ifs"
  
        # Exit if we aren't doing a library object file.
        if test -z "$libobj"; then
  	if test -n "$gentop"; then
  	  $show "${rm}r $gentop"
  	  $run ${rm}r $gentop
  	fi
  
  	exit 0
        fi
  
        if test "$build_libtool_libs" != yes; then
  	if test -n "$gentop"; then
  	  $show "${rm}r $gentop"
  	  $run ${rm}r $gentop
  	fi
  
  	# Create an invalid libtool object if no PIC, so that we don't
  	# accidentally link it into a program.
  	$show "echo timestamp > $libobj"
  	$run eval "echo timestamp > $libobj" || exit $?
  	exit 0
        fi
  
        if test -n "$pic_flag" || test "$pic_mode" != default; then
  	# Only do commands if we really have different PIC objects.
  	reload_objs="$libobjs $reload_conv_objs"
  	output="$libobj"
  	eval cmds=\"$reload_cmds\"
  	save_ifs="$IFS"; IFS='~'
  	for cmd in $cmds; do
  	  IFS="$save_ifs"
  	  $show "$cmd"
  	  $run eval "$cmd" || exit $?
  	done
  	IFS="$save_ifs"
        else
  	# Just create a symlink.
  	$show $rm $libobj
  	$run $rm $libobj
  	xdir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'`
  	if test "X$xdir" = "X$libobj"; then
  	  xdir="."
  	else
  	  xdir="$xdir"
  	fi
  	baseobj=`$echo "X$libobj" | $Xsed -e 's%^.*/%%'`
  	oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"`
  	$show "(cd $xdir && $LN_S $oldobj $baseobj)"
  	$run eval '(cd $xdir && $LN_S $oldobj $baseobj)' || exit $?
        fi
  
        if test -n "$gentop"; then
  	$show "${rm}r $gentop"
  	$run ${rm}r $gentop
        fi
  
        exit 0
        ;;
  
      prog)
        case $host in
  	*cygwin*) output=`echo $output | sed -e 's,.exe$,,;s,$,.exe,'` ;;
        esac
        if test -n "$vinfo"; then
  	$echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2
        fi
  
        if test -n "$release"; then
  	$echo "$modename: warning: \`-release' is ignored for programs" 1>&2
        fi
  
        if test "$preload" = yes; then
  	if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown &&
  	   test "$dlopen_self_static" = unknown; then
  	  $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support."
  	fi
        fi
  
        case $host in
        *-*-rhapsody* | *-*-darwin1.[012])
  	# On Rhapsody replace the C library is the System framework
  	compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
  	finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
  	;;
        esac
  
        compile_command="$compile_command $compile_deplibs"
        finalize_command="$finalize_command $finalize_deplibs"
  
        if test -n "$rpath$xrpath"; then
  	# If the user specified any rpath flags, then add them.
  	for libdir in $rpath $xrpath; do
  	  # This is the magic to use -rpath.
  	  case "$finalize_rpath " in
  	  *" $libdir "*) ;;
  	  *) finalize_rpath="$finalize_rpath $libdir" ;;
  	  esac
  	done
        fi
  
        # Now hardcode the library paths
        rpath=
        hardcode_libdirs=
        for libdir in $compile_rpath $finalize_rpath; do
  	if test -n "$hardcode_libdir_flag_spec"; then
  	  if test -n "$hardcode_libdir_separator"; then
  	    if test -z "$hardcode_libdirs"; then
  	      hardcode_libdirs="$libdir"
  	    else
  	      # Just accumulate the unique libdirs.
  	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
  	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
  		;;
  	      *)
  		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
  		;;
  	      esac
  	    fi
  	  else
  	    eval flag=\"$hardcode_libdir_flag_spec\"
  	    rpath="$rpath $flag"
  	  fi
  	elif test -n "$runpath_var"; then
  	  case "$perm_rpath " in
  	  *" $libdir "*) ;;
  	  *) perm_rpath="$perm_rpath $libdir" ;;
  	  esac
  	fi
  	case $host in
  	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
  	  case :$dllsearchpath: in
  	  *":$libdir:"*) ;;
  	  *) dllsearchpath="$dllsearchpath:$libdir";;
  	  esac
  	  ;;
  	esac
        done
        # Substitute the hardcoded libdirs into the rpath.
        if test -n "$hardcode_libdir_separator" &&
  	 test -n "$hardcode_libdirs"; then
  	libdir="$hardcode_libdirs"
  	eval rpath=\" $hardcode_libdir_flag_spec\"
        fi
        compile_rpath="$rpath"
  
        rpath=
        hardcode_libdirs=
        for libdir in $finalize_rpath; do
  	if test -n "$hardcode_libdir_flag_spec"; then
  	  if test -n "$hardcode_libdir_separator"; then
  	    if test -z "$hardcode_libdirs"; then
  	      hardcode_libdirs="$libdir"
  	    else
  	      # Just accumulate the unique libdirs.
  	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
  	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
  		;;
  	      *)
  		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
  		;;
  	      esac
  	    fi
  	  else
  	    eval flag=\"$hardcode_libdir_flag_spec\"
  	    rpath="$rpath $flag"
  	  fi
  	elif test -n "$runpath_var"; then
  	  case "$finalize_perm_rpath " in
  	  *" $libdir "*) ;;
  	  *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
  	  esac
  	fi
        done
        # Substitute the hardcoded libdirs into the rpath.
        if test -n "$hardcode_libdir_separator" &&
  	 test -n "$hardcode_libdirs"; then
  	libdir="$hardcode_libdirs"
  	eval rpath=\" $hardcode_libdir_flag_spec\"
        fi
        finalize_rpath="$rpath"
  
        if test -n "$libobjs" && test "$build_old_libs" = yes; then
  	# Transform all the library objects into standard objects.
  	compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
  	finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
        fi
  
        dlsyms=
        if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
  	if test -n "$NM" && test -n "$global_symbol_pipe"; then
  	  dlsyms="${outputname}S.c"
  	else
  	  $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2
  	fi
        fi
  
        if test -n "$dlsyms"; then
  	case $dlsyms in
  	"") ;;
  	*.c)
  	  # Discover the nlist of each of the dlfiles.
  	  nlist="$output_objdir/${outputname}.nm"
  
  	  $show "$rm $nlist ${nlist}S ${nlist}T"
  	  $run $rm "$nlist" "${nlist}S" "${nlist}T"
  
  	  # Parse the name list into a source file.
  	  $show "creating $output_objdir/$dlsyms"
  
  	  test -z "$run" && $echo > "$output_objdir/$dlsyms" "\
  /* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */
  /* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */
  
  #ifdef __cplusplus
  extern \"C\" {
  #endif
  
  /* Prevent the only kind of declaration conflicts we can make. */
  #define lt_preloaded_symbols some_other_symbol
  
  /* External symbol declarations for the compiler. */\
  "
  
  	  if test "$dlself" = yes; then
  	    $show "generating symbol list for \`$output'"
  
  	    test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist"
  
  	    # Add our own program objects to the symbol list.
  	    progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
  	    for arg in $progfiles; do
  	      $show "extracting global C symbols from \`$arg'"
  	      $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
  	    done
  
  	    if test -n "$exclude_expsyms"; then
  	      $run eval 'egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
  	      $run eval '$mv "$nlist"T "$nlist"'
  	    fi
  
  	    if test -n "$export_symbols_regex"; then
  	      $run eval 'egrep -e "$export_symbols_regex" "$nlist" > "$nlist"T'
  	      $run eval '$mv "$nlist"T "$nlist"'
  	    fi
  
  	    # Prepare the list of exported symbols
  	    if test -z "$export_symbols"; then
  	      export_symbols="$output_objdir/$output.exp"
  	      $run $rm $export_symbols
  	      $run eval "sed -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
  	    else
  	      $run eval "sed -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"'
  	      $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T'
  	      $run eval 'mv "$nlist"T "$nlist"'
  	    fi
  	  fi
  
  	  for arg in $dlprefiles; do
  	    $show "extracting global C symbols from \`$arg'"
  	    name=`echo "$arg" | sed -e 's%^.*/%%'`
  	    $run eval 'echo ": $name " >> "$nlist"'
  	    $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
  	  done
  
  	  if test -z "$run"; then
  	    # Make sure we have at least an empty file.
  	    test -f "$nlist" || : > "$nlist"
  
  	    if test -n "$exclude_expsyms"; then
  	      egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
  	      $mv "$nlist"T "$nlist"
  	    fi
  
  	    # Try sorting and uniquifying the output.
  	    if grep -v "^: " < "$nlist" | sort +2 | uniq > "$nlist"S; then
  	      :
  	    else
  	      grep -v "^: " < "$nlist" > "$nlist"S
  	    fi
  
  	    if test -f "$nlist"S; then
  	      eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"'
  	    else
  	      echo '/* NONE */' >> "$output_objdir/$dlsyms"
  	    fi
  
  	    $echo >> "$output_objdir/$dlsyms" "\
  
  #undef lt_preloaded_symbols
  
  #if defined (__STDC__) && __STDC__
  # define lt_ptr void *
  #else
  # define lt_ptr char *
  # define const
  #endif
  
  /* The mapping between symbol names and symbols. */
  const struct {
    const char *name;
    lt_ptr address;
  }
  lt_preloaded_symbols[] =
  {\
  "
  
  	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms"
  
  	    $echo >> "$output_objdir/$dlsyms" "\
    {0, (lt_ptr) 0}
  };
  
  /* This works around a problem in FreeBSD linker */
  #ifdef FREEBSD_WORKAROUND
  static const void *lt_preloaded_setup() {
    return lt_preloaded_symbols;
  }
  #endif
  
  #ifdef __cplusplus
  }
  #endif\
  "
  	  fi
  
  	  pic_flag_for_symtable=
  	  case $host in
  	  # compiling the symbol table file with pic_flag works around
  	  # a FreeBSD bug that causes programs to crash when -lm is
  	  # linked before any other PIC object.  But we must not use
  	  # pic_flag when linking with -static.  The problem exists in
  	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
  	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
  	    case "$compile_command " in
  	    *" -static "*) ;;
  	    *) pic_flag_for_symtable=" $pic_flag -DPIC -DFREEBSD_WORKAROUND";;
  	    esac;;
  	  *-*-hpux*)
  	    case "$compile_command " in
  	    *" -static "*) ;;
  	    *) pic_flag_for_symtable=" $pic_flag -DPIC";;
  	    esac
  	  esac
  
  	  # Now compile the dynamic symbol file.
  	  $show "(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")"
  	  $run eval '(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $?
  
  	  # Clean up the generated files.
  	  $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T"
  	  $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T"
  
  	  # Transform the symbol file into the correct name.
  	  compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
  	  finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
  	  ;;
  	*)
  	  $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2
  	  exit 1
  	  ;;
  	esac
        else
  	# We keep going just in case the user didn't refer to
  	# lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
  	# really was required.
  
  	# Nullify the symbol file.
  	compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
  	finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
        fi
  
        if test $need_relink = no || test "$build_libtool_libs" != yes; then
  	# Replace the output file specification.
  	compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
  	link_command="$compile_command$compile_rpath"
  
  	# We have no uninstalled library dependencies, so finalize right now.
  	$show "$link_command"
  	$run eval "$link_command"
  	status=$?
  
  	# Delete the generated files.
  	if test -n "$dlsyms"; then
  	  $show "$rm $output_objdir/${outputname}S.${objext}"
  	  $run $rm "$output_objdir/${outputname}S.${objext}"
  	fi
  
  	exit $status
        fi
  
        if test -n "$shlibpath_var"; then
  	# We should set the shlibpath_var
  	rpath=
  	for dir in $temp_rpath; do
  	  case $dir in
  	  [\\/]* | [A-Za-z]:[\\/]*)
  	    # Absolute path.
  	    rpath="$rpath$dir:"
  	    ;;
  	  *)
  	    # Relative path: add a thisdir entry.
  	    rpath="$rpath\$thisdir/$dir:"
  	    ;;
  	  esac
  	done
  	temp_rpath="$rpath"
        fi
  
        if test -n "$compile_shlibpath$finalize_shlibpath"; then
  	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
        fi
        if test -n "$finalize_shlibpath"; then
  	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
        fi
  
        compile_var=
        finalize_var=
        if test -n "$runpath_var"; then
  	if test -n "$perm_rpath"; then
  	  # We should set the runpath_var.
  	  rpath=
  	  for dir in $perm_rpath; do
  	    rpath="$rpath$dir:"
  	  done
  	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
  	fi
  	if test -n "$finalize_perm_rpath"; then
  	  # We should set the runpath_var.
  	  rpath=
  	  for dir in $finalize_perm_rpath; do
  	    rpath="$rpath$dir:"
  	  done
  	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
  	fi
        fi
  
        if test "$no_install" = yes; then
  	# We don't need to create a wrapper script.
  	link_command="$compile_var$compile_command$compile_rpath"
  	# Replace the output file specification.
  	link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
  	# Delete the old output file.
  	$run $rm $output
  	# Link the executable and exit
  	$show "$link_command"
  	$run eval "$link_command" || exit $?
  	exit 0
        fi
  
        if test "$hardcode_action" = relink; then
  	# Fast installation is not supported
  	link_command="$compile_var$compile_command$compile_rpath"
  	relink_command="$finalize_var$finalize_command$finalize_rpath"
  
  	$echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2
  	$echo "$modename: \`$output' will be relinked during installation" 1>&2
        else
  	if test "$fast_install" != no; then
  	  link_command="$finalize_var$compile_command$finalize_rpath"
  	  if test "$fast_install" = yes; then
  	    relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
  	  else
  	    # fast_install is set to needless
  	    relink_command=
  	  fi
  	else
  	  link_command="$compile_var$compile_command$compile_rpath"
  	  relink_command="$finalize_var$finalize_command$finalize_rpath"
  	fi
        fi
  
        # Replace the output file specification.
        link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
  
        # Delete the old output files.
        $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname
  
        $show "$link_command"
        $run eval "$link_command" || exit $?
  
        # Now create the wrapper script.
        $show "creating $output"
  
        # Quote the relink command for shipping.
        if test -n "$relink_command"; then
  	# Preserve any variables that may affect compiler behavior
  	for var in $variables_saved_for_relink; do
  	  if eval test -z \"\${$var+set}\"; then
  	    relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
  	  elif eval var_value=\$$var; test -z "$var_value"; then
  	    relink_command="$var=; export $var; $relink_command"
  	  else
  	    var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
  	    relink_command="$var=\"$var_value\"; export $var; $relink_command"
  	  fi
  	done
  	relink_command="cd `pwd`; $relink_command"
  	relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
        fi
  
        # Quote $echo for shipping.
        if test "X$echo" = "X$SHELL $0 --fallback-echo"; then
  	case $0 in
  	[\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";;
  	*) qecho="$SHELL `pwd`/$0 --fallback-echo";;
  	esac
  	qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"`
        else
  	qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"`
        fi
  
        # Only actually do things if our run command is non-null.
        if test -z "$run"; then
  	# win32 will think the script is a binary if it has
  	# a .exe suffix, so we strip it off here.
  	case $output in
  	  *.exe) output=`echo $output|sed 's,.exe$,,'` ;;
  	esac
  	# test for cygwin because mv fails w/o .exe extensions
  	case $host in
  	  *cygwin*) exeext=.exe ;;
  	  *) exeext= ;;
  	esac
  	$rm $output
  	trap "$rm $output; exit 1" 1 2 15
  
  	$echo > $output "\
  #! $SHELL
  
  # $output - temporary wrapper script for $objdir/$outputname
  # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
  #
  # The $output program cannot be directly executed until all the libtool
  # libraries that it depends on are installed.
  #
  # This wrapper script should never be moved out of the build directory.
  # If it is, it will not operate correctly.
  
  # Sed substitution that helps us do robust quoting.  It backslashifies
  # metacharacters that are still active within double-quoted strings.
  Xsed='sed -e 1s/^X//'
  sed_quote_subst='$sed_quote_subst'
  
  # The HP-UX ksh and POSIX shell print the target directory to stdout
  # if CDPATH is set.
  if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi
  
  relink_command=\"$relink_command\"
  
  # This environment variable determines our operation mode.
  if test \"\$libtool_install_magic\" = \"$magic\"; then
    # install mode needs the following variable:
    notinst_deplibs='$notinst_deplibs'
  else
    # When we are sourced in execute mode, \$file and \$echo are already set.
    if test \"\$libtool_execute_magic\" != \"$magic\"; then
      echo=\"$qecho\"
      file=\"\$0\"
      # Make sure echo works.
      if test \"X\$1\" = X--no-reexec; then
        # Discard the --no-reexec flag, and continue.
        shift
      elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then
        # Yippee, \$echo works!
        :
      else
        # Restart under the correct shell, and then maybe \$echo will work.
        exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
      fi
    fi\
  "
  	$echo >> $output "\
  
    # Find the directory that this script lives in.
    thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
    test \"x\$thisdir\" = \"x\$file\" && thisdir=.
  
    # Follow symbolic links until we get to the real thisdir.
    file=\`ls -ld \"\$file\" | sed -n 's/.*-> //p'\`
    while test -n \"\$file\"; do
      destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
  
      # If there was a directory component, then change thisdir.
      if test \"x\$destdir\" != \"x\$file\"; then
        case \"\$destdir\" in
        [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
        *) thisdir=\"\$thisdir/\$destdir\" ;;
        esac
      fi
  
      file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
      file=\`ls -ld \"\$thisdir/\$file\" | sed -n 's/.*-> //p'\`
    done
  
    # Try to get the absolute directory name.
    absdir=\`cd \"\$thisdir\" && pwd\`
    test -n \"\$absdir\" && thisdir=\"\$absdir\"
  "
  
  	if test "$fast_install" = yes; then
  	  echo >> $output "\
    program=lt-'$outputname'$exeext
    progdir=\"\$thisdir/$objdir\"
  
    if test ! -f \"\$progdir/\$program\" || \\
       { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | sed 1q\`; \\
         test \"X\$file\" != \"X\$progdir/\$program\"; }; then
  
      file=\"\$\$-\$program\"
  
      if test ! -d \"\$progdir\"; then
        $mkdir \"\$progdir\"
      else
        $rm \"\$progdir/\$file\"
      fi"
  
  	  echo >> $output "\
  
      # relink executable if necessary
      if test -n \"\$relink_command\"; then
        if relink_command_output=\`eval \$relink_command 2>&1\`; then :
        else
  	$echo \"\$relink_command_output\" >&2
  	$rm \"\$progdir/\$file\"
  	exit 1
        fi
      fi
  
      $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
      { $rm \"\$progdir/\$program\";
        $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; }
      $rm \"\$progdir/\$file\"
    fi"
  	else
  	  echo >> $output "\
    program='$outputname'
    progdir=\"\$thisdir/$objdir\"
  "
  	fi
  
  	echo >> $output "\
  
    if test -f \"\$progdir/\$program\"; then"
  
  	# Export our shlibpath_var if we have one.
  	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
  	  $echo >> $output "\
      # Add our own library path to $shlibpath_var
      $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
  
      # Some systems cannot cope with colon-terminated $shlibpath_var
      # The second colon is a workaround for a bug in BeOS R4 sed
      $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
  
      export $shlibpath_var
  "
  	fi
  
  	# fixup the dll searchpath if we need to.
  	if test -n "$dllsearchpath"; then
  	  $echo >> $output "\
      # Add the dll search path components to the executable PATH
      PATH=$dllsearchpath:\$PATH
  "
  	fi
  
  	$echo >> $output "\
      if test \"\$libtool_execute_magic\" != \"$magic\"; then
        # Run the actual program with our arguments.
  "
  	case $host in
  	# win32 systems need to use the prog path for dll
  	# lookup to work
  	*-*-cygwin* | *-*-pw32*)
  	  $echo >> $output "\
        exec \$progdir/\$program \${1+\"\$@\"}
  "
  	  ;;
  
  	# Backslashes separate directories on plain windows
  	*-*-mingw | *-*-os2*)
  	  $echo >> $output "\
        exec \$progdir\\\\\$program \${1+\"\$@\"}
  "
  	  ;;
  
  	*)
  	  $echo >> $output "\
        # Export the path to the program.
        PATH=\"\$progdir:\$PATH\"
        export PATH
  
        exec \$program \${1+\"\$@\"}
  "
  	  ;;
  	esac
  	$echo >> $output "\
        \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\"
        exit 1
      fi
    else
      # The program doesn't exist.
      \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2
      \$echo \"This script is just a wrapper for \$program.\" 1>&2
      echo \"See the $PACKAGE documentation for more information.\" 1>&2
      exit 1
    fi
  fi\
  "
  	chmod +x $output
        fi
        exit 0
        ;;
      esac
  
      # See if we need to build an old-fashioned archive.
      for oldlib in $oldlibs; do
  
        if test "$build_libtool_libs" = convenience; then
  	oldobjs="$libobjs_save"
  	addlibs="$convenience"
  	build_libtool_libs=no
        else
  	if test "$build_libtool_libs" = module; then
  	  oldobjs="$libobjs_save"
  	  build_libtool_libs=no
  	else
  	  oldobjs="$objs$old_deplibs "`$echo "X$libobjs_save" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`
  	fi
  	addlibs="$old_convenience"
        fi
  
        if test -n "$addlibs"; then
  	gentop="$output_objdir/${outputname}x"
  	$show "${rm}r $gentop"
  	$run ${rm}r "$gentop"
  	$show "mkdir $gentop"
  	$run mkdir "$gentop"
  	status=$?
  	if test $status -ne 0 && test ! -d "$gentop"; then
  	  exit $status
  	fi
  	generated="$generated $gentop"
  
  	# Add in members from convenience archives.
  	for xlib in $addlibs; do
  	  # Extract the objects.
  	  case $xlib in
  	  [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
  	  *) xabs=`pwd`"/$xlib" ;;
  	  esac
  	  xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
  	  xdir="$gentop/$xlib"
  
  	  $show "${rm}r $xdir"
  	  $run ${rm}r "$xdir"
  	  $show "mkdir $xdir"
  	  $run mkdir "$xdir"
  	  status=$?
  	  if test $status -ne 0 && test ! -d "$xdir"; then
  	    exit $status
  	  fi
  	  $show "(cd $xdir && $AR x $xabs)"
  	  $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
  
  	  oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP`
  	done
        fi
  
        # Do each command in the archive commands.
        if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
  	eval cmds=\"$old_archive_from_new_cmds\"
        else
  	# Ensure that we have .o objects in place in case we decided
  	# not to build a shared library, and have fallen back to building
  	# static libs even though --disable-static was passed!
  	for oldobj in $oldobjs; do
  	  if test ! -f $oldobj; then
  	    xdir=`$echo "X$oldobj" | $Xsed -e 's%/[^/]*$%%'`
  	    if test "X$xdir" = "X$oldobj"; then
  	      xdir="."
  	    else
  	      xdir="$xdir"
  	    fi
  	    baseobj=`$echo "X$oldobj" | $Xsed -e 's%^.*/%%'`
  	    obj=`$echo "X$baseobj" | $Xsed -e "$o2lo"`
  	    $show "(cd $xdir && ${LN_S} $obj $baseobj)"
  	    $run eval '(cd $xdir && ${LN_S} $obj $baseobj)' || exit $?
  	  fi
  	done
  
  	eval cmds=\"$old_archive_cmds\"
        fi
        save_ifs="$IFS"; IFS='~'
        for cmd in $cmds; do
  	IFS="$save_ifs"
  	$show "$cmd"
  	$run eval "$cmd" || exit $?
        done
        IFS="$save_ifs"
      done
  
      if test -n "$generated"; then
        $show "${rm}r$generated"
        $run ${rm}r$generated
      fi
  
      # Now create the libtool archive.
      case $output in
      *.la)
        old_library=
        test "$build_old_libs" = yes && old_library="$libname.$libext"
        $show "creating $output"
  
        # Preserve any variables that may affect compiler behavior
        for var in $variables_saved_for_relink; do
  	if eval test -z \"\${$var+set}\"; then
  	  relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
  	elif eval var_value=\$$var; test -z "$var_value"; then
  	  relink_command="$var=; export $var; $relink_command"
  	else
  	  var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
  	  relink_command="$var=\"$var_value\"; export $var; $relink_command"
  	fi
        done
        # Quote the link command for shipping.
        relink_command="cd `pwd`; $SHELL $0 --mode=relink $libtool_args"
        relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
  
        # Only create the output if not a dry run.
        if test -z "$run"; then
  	for installed in no yes; do
  	  if test "$installed" = yes; then
  	    if test -z "$install_libdir"; then
  	      break
  	    fi
  	    output="$output_objdir/$outputname"i
  	    # Replace all uninstalled libtool libraries with the installed ones
  	    newdependency_libs=
  	    for deplib in $dependency_libs; do
  	      case $deplib in
  	      *.la)
  		name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'`
  		eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
  		if test -z "$libdir"; then
  		  $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
  		  exit 1
  		fi
  		newdependency_libs="$newdependency_libs $libdir/$name"
  		;;
  	      *) newdependency_libs="$newdependency_libs $deplib" ;;
  	      esac
  	    done
  	    dependency_libs="$newdependency_libs"
  	    newdlfiles=
  	    for lib in $dlfiles; do
  	      name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
  	      eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
  	      if test -z "$libdir"; then
  		$echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
  		exit 1
  	      fi
  	      newdlfiles="$newdlfiles $libdir/$name"
  	    done
  	    dlfiles="$newdlfiles"
  	    newdlprefiles=
  	    for lib in $dlprefiles; do
  	      name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
  	      eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
  	      if test -z "$libdir"; then
  		$echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
  		exit 1
  	      fi
  	      newdlprefiles="$newdlprefiles $libdir/$name"
  	    done
  	    dlprefiles="$newdlprefiles"
  	  fi
  	  $rm $output
  	  # place dlname in correct position for cygwin
  	  tdlname=$dlname
  	  case $host,$output,$installed,$module,$dlname in
  	    *cygwin*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
  	  esac
  	  $echo > $output "\
  # $outputname - a libtool library file
  # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
  #
  # Please DO NOT delete this file!
  # It is necessary for linking the library.
  
  # The name that we can dlopen(3).
  dlname='$tdlname'
  
  # Names of this library.
  library_names='$library_names'
  
  # The name of the static archive.
  old_library='$old_library'
  
  # Libraries that this one depends upon.
  dependency_libs='$dependency_libs'
  
  # Version information for $libname.
  current=$current
  age=$age
  revision=$revision
  
  # Is this an already installed library?
  installed=$installed
  
  # Files to dlopen/dlpreopen
  dlopen='$dlfiles'
  dlpreopen='$dlprefiles'
  
  # Directory that this library needs to be installed in:
  libdir='$install_libdir'"
  	  if test "$installed" = no && test $need_relink = yes; then
  	    $echo >> $output "\
  relink_command=\"$relink_command\""
  	  fi
  	done
        fi
  
        # Do a symbolic link so that the libtool archive can be found in
        # LD_LIBRARY_PATH before the program is installed.
        $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)"
        $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $?
        ;;
      esac
      exit 0
      ;;
  
    # libtool install mode
    install)
      modename="$modename: install"
  
      # There may be an optional sh(1) argument at the beginning of
      # install_prog (especially on Windows NT).
      if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
         # Allow the use of GNU shtool's install command.
         $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then
        # Aesthetically quote it.
        arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"`
        case $arg in
        *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
  	arg="\"$arg\""
  	;;
        esac
        install_prog="$arg "
        arg="$1"
        shift
      else
        install_prog=
        arg="$nonopt"
      fi
  
      # The real first argument should be the name of the installation program.
      # Aesthetically quote it.
      arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
      case $arg in
      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
        arg="\"$arg\""
        ;;
      esac
      install_prog="$install_prog$arg"
  
      # We need to accept at least all the BSD install flags.
      dest=
      files=
      opts=
      prev=
      install_type=
      isdir=no
      stripme=
      for arg
      do
        if test -n "$dest"; then
  	files="$files $dest"
  	dest="$arg"
  	continue
        fi
  
        case $arg in
        -d) isdir=yes ;;
        -f) prev="-f" ;;
        -g) prev="-g" ;;
        -m) prev="-m" ;;
        -o) prev="-o" ;;
        -s)
  	stripme=" -s"
  	continue
  	;;
        -*) ;;
  
        *)
  	# If the previous option needed an argument, then skip it.
  	if test -n "$prev"; then
  	  prev=
  	else
  	  dest="$arg"
  	  continue
  	fi
  	;;
        esac
  
        # Aesthetically quote the argument.
        arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
        case $arg in
        *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
  	arg="\"$arg\""
  	;;
        esac
        install_prog="$install_prog $arg"
      done
  
      if test -z "$install_prog"; then
        $echo "$modename: you must specify an install program" 1>&2
        $echo "$help" 1>&2
        exit 1
      fi
  
      if test -n "$prev"; then
        $echo "$modename: the \`$prev' option requires an argument" 1>&2
        $echo "$help" 1>&2
        exit 1
      fi
  
      if test -z "$files"; then
        if test -z "$dest"; then
  	$echo "$modename: no file or destination specified" 1>&2
        else
  	$echo "$modename: you must specify a destination" 1>&2
        fi
        $echo "$help" 1>&2
        exit 1
      fi
  
      # Strip any trailing slash from the destination.
      dest=`$echo "X$dest" | $Xsed -e 's%/$%%'`
  
      # Check to see that the destination is a directory.
      test -d "$dest" && isdir=yes
      if test "$isdir" = yes; then
        destdir="$dest"
        destname=
      else
        destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'`
        test "X$destdir" = "X$dest" && destdir=.
        destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'`
  
        # Not a directory, so check to see that there is only one file specified.
        set dummy $files
        if test $# -gt 2; then
  	$echo "$modename: \`$dest' is not a directory" 1>&2
  	$echo "$help" 1>&2
  	exit 1
        fi
      fi
      case $destdir in
      [\\/]* | [A-Za-z]:[\\/]*) ;;
      *)
        for file in $files; do
  	case $file in
  	*.lo) ;;
  	*)
  	  $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2
  	  $echo "$help" 1>&2
  	  exit 1
  	  ;;
  	esac
        done
        ;;
      esac
  
      # This variable tells wrapper scripts just to set variables rather
      # than running their programs.
      libtool_install_magic="$magic"
  
      staticlibs=
      future_libdirs=
      current_libdirs=
      for file in $files; do
  
        # Do each installation.
        case $file in
        *.$libext)
  	# Do the static libraries later.
  	staticlibs="$staticlibs $file"
  	;;
  
        *.la)
  	# Check to see that this really is a libtool archive.
  	if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
  	else
  	  $echo "$modename: \`$file' is not a valid libtool archive" 1>&2
  	  $echo "$help" 1>&2
  	  exit 1
  	fi
  
  	library_names=
  	old_library=
  	relink_command=
  	# If there is no directory component, then add one.
  	case $file in
  	*/* | *\\*) . $file ;;
  	*) . ./$file ;;
  	esac
  
  	# Add the libdir to current_libdirs if it is the destination.
  	if test "X$destdir" = "X$libdir"; then
  	  case "$current_libdirs " in
  	  *" $libdir "*) ;;
  	  *) current_libdirs="$current_libdirs $libdir" ;;
  	  esac
  	else
  	  # Note the libdir as a future libdir.
  	  case "$future_libdirs " in
  	  *" $libdir "*) ;;
  	  *) future_libdirs="$future_libdirs $libdir" ;;
  	  esac
  	fi
  
  	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/
  	test "X$dir" = "X$file/" && dir=
  	dir="$dir$objdir"
  
  	if test -n "$relink_command"; then
  	  $echo "$modename: warning: relinking \`$file'" 1>&2
  	  $show "$relink_command"
  	  if $run eval "$relink_command"; then :
  	  else
  	    $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
  	    continue
  	  fi
  	fi
  
  	# See the names of the shared library.
  	set dummy $library_names
  	if test -n "$2"; then
  	  realname="$2"
  	  shift
  	  shift
  
  	  srcname="$realname"
  	  test -n "$relink_command" && srcname="$realname"T
  
  	  # Install the shared library and build the symlinks.
  	  $show "$install_prog $dir/$srcname $destdir/$realname"
  	  $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $?
  	  if test -n "$stripme" && test -n "$striplib"; then
  	    $show "$striplib $destdir/$realname"
  	    $run eval "$striplib $destdir/$realname" || exit $?
  	  fi
  
  	  if test $# -gt 0; then
  	    # Delete the old symlinks, and create new ones.
  	    for linkname
  	    do
  	      if test "$linkname" != "$realname"; then
  		$show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
  		$run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
  	      fi
  	    done
  	  fi
  
  	  # Do each command in the postinstall commands.
  	  lib="$destdir/$realname"
  	  eval cmds=\"$postinstall_cmds\"
  	  save_ifs="$IFS"; IFS='~'
  	  for cmd in $cmds; do
  	    IFS="$save_ifs"
  	    $show "$cmd"
  	    $run eval "$cmd" || exit $?
  	  done
  	  IFS="$save_ifs"
  	fi
  
  	# Install the pseudo-library for information purposes.
  	name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
  	instname="$dir/$name"i
  	$show "$install_prog $instname $destdir/$name"
  	$run eval "$install_prog $instname $destdir/$name" || exit $?
  
  	# Maybe install the static library, too.
  	test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
  	;;
  
        *.lo)
  	# Install (i.e. copy) a libtool object.
  
  	# Figure out destination file name, if it wasn't already specified.
  	if test -n "$destname"; then
  	  destfile="$destdir/$destname"
  	else
  	  destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
  	  destfile="$destdir/$destfile"
  	fi
  
  	# Deduce the name of the destination old-style object file.
  	case $destfile in
  	*.lo)
  	  staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"`
  	  ;;
  	*.$objext)
  	  staticdest="$destfile"
  	  destfile=
  	  ;;
  	*)
  	  $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2
  	  $echo "$help" 1>&2
  	  exit 1
  	  ;;
  	esac
  
  	# Install the libtool object if requested.
  	if test -n "$destfile"; then
  	  $show "$install_prog $file $destfile"
  	  $run eval "$install_prog $file $destfile" || exit $?
  	fi
  
  	# Install the old object if enabled.
  	if test "$build_old_libs" = yes; then
  	  # Deduce the name of the old-style object file.
  	  staticobj=`$echo "X$file" | $Xsed -e "$lo2o"`
  
  	  $show "$install_prog $staticobj $staticdest"
  	  $run eval "$install_prog \$staticobj \$staticdest" || exit $?
  	fi
  	exit 0
  	;;
  
        *)
  	# Figure out destination file name, if it wasn't already specified.
  	if test -n "$destname"; then
  	  destfile="$destdir/$destname"
  	else
  	  destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
  	  destfile="$destdir/$destfile"
  	fi
  
  	# Do a test to see if this is really a libtool program.
  	if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
  	  notinst_deplibs=
  	  relink_command=
  
  	  # If there is no directory component, then add one.
  	  case $file in
  	  */* | *\\*) . $file ;;
  	  *) . ./$file ;;
  	  esac
  
  	  # Check the variables that should have been set.
  	  if test -z "$notinst_deplibs"; then
  	    $echo "$modename: invalid libtool wrapper script \`$file'" 1>&2
  	    exit 1
  	  fi
  
  	  finalize=yes
  	  for lib in $notinst_deplibs; do
  	    # Check to see that each library is installed.
  	    libdir=
  	    if test -f "$lib"; then
  	      # If there is no directory component, then add one.
  	      case $lib in
  	      */* | *\\*) . $lib ;;
  	      *) . ./$lib ;;
  	      esac
  	    fi
  	    libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
  	    if test -n "$libdir" && test ! -f "$libfile"; then
  	      $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2
  	      finalize=no
  	    fi
  	  done
  
  	  relink_command=
  	  # If there is no directory component, then add one.
  	  case $file in
  	  */* | *\\*) . $file ;;
  	  *) . ./$file ;;
  	  esac
  
  	  outputname=
  	  if test "$fast_install" = no && test -n "$relink_command"; then
  	    if test "$finalize" = yes && test -z "$run"; then
  	      tmpdir="/tmp"
  	      test -n "$TMPDIR" && tmpdir="$TMPDIR"
  	      tmpdir="$tmpdir/libtool-$$"
  	      if $mkdir -p "$tmpdir" && chmod 700 "$tmpdir"; then :
  	      else
  		$echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2
  		continue
  	      fi
  	      file=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
  	      outputname="$tmpdir/$file"
  	      # Replace the output file specification.
  	      relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
  
  	      $show "$relink_command"
  	      if $run eval "$relink_command"; then :
  	      else
  		$echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
  		${rm}r "$tmpdir"
  		continue
  	      fi
  	      file="$outputname"
  	    else
  	      $echo "$modename: warning: cannot relink \`$file'" 1>&2
  	    fi
  	  else
  	    # Install the binary that we compiled earlier.
  	    file=`$echo "X$file" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
  	  fi
  	fi
  
  	# remove .exe since cygwin /usr/bin/install will append another
  	# one anyways
  	case $install_prog,$host in
  	/usr/bin/install*,*cygwin*)
  	  case $file:$destfile in
  	  *.exe:*.exe)
  	    # this is ok
  	    ;;
  	  *.exe:*)
  	    destfile=$destfile.exe
  	    ;;
  	  *:*.exe)
  	    destfile=`echo $destfile | sed -e 's,.exe$,,'`
  	    ;;
  	  esac
  	  ;;
  	esac
  	$show "$install_prog$stripme $file $destfile"
  	$run eval "$install_prog\$stripme \$file \$destfile" || exit $?
  	test -n "$outputname" && ${rm}r "$tmpdir"
  	;;
        esac
      done
  
      for file in $staticlibs; do
        name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
  
        # Set up the ranlib parameters.
        oldlib="$destdir/$name"
  
        $show "$install_prog $file $oldlib"
        $run eval "$install_prog \$file \$oldlib" || exit $?
  
        if test -n "$stripme" && test -n "$striplib"; then
  	$show "$old_striplib $oldlib"
  	$run eval "$old_striplib $oldlib" || exit $?
        fi
  
        # Do each command in the postinstall commands.
        eval cmds=\"$old_postinstall_cmds\"
        save_ifs="$IFS"; IFS='~'
        for cmd in $cmds; do
  	IFS="$save_ifs"
  	$show "$cmd"
  	$run eval "$cmd" || exit $?
        done
        IFS="$save_ifs"
      done
  
      if test -n "$future_libdirs"; then
        $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2
      fi
  
      if test -n "$current_libdirs"; then
        # Maybe just do a dry run.
        test -n "$run" && current_libdirs=" -n$current_libdirs"
        exec_cmd='$SHELL $0 --finish$current_libdirs'
      else
        exit 0
      fi
      ;;
  
    # libtool finish mode
    finish)
      modename="$modename: finish"
      libdirs="$nonopt"
      admincmds=
  
      if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
        for dir
        do
  	libdirs="$libdirs $dir"
        done
  
        for libdir in $libdirs; do
  	if test -n "$finish_cmds"; then
  	  # Do each command in the finish commands.
  	  eval cmds=\"$finish_cmds\"
  	  save_ifs="$IFS"; IFS='~'
  	  for cmd in $cmds; do
  	    IFS="$save_ifs"
  	    $show "$cmd"
  	    $run eval "$cmd" || admincmds="$admincmds
         $cmd"
  	  done
  	  IFS="$save_ifs"
  	fi
  	if test -n "$finish_eval"; then
  	  # Do the single finish_eval.
  	  eval cmds=\"$finish_eval\"
  	  $run eval "$cmds" || admincmds="$admincmds
         $cmds"
  	fi
        done
      fi
  
      # Exit here if they wanted silent mode.
      test "$show" = ":" && exit 0
  
      echo "----------------------------------------------------------------------"
      echo "Libraries have been installed in:"
      for libdir in $libdirs; do
        echo "   $libdir"
      done
      echo
      echo "If you ever happen to want to link against installed libraries"
      echo "in a given directory, LIBDIR, you must either use libtool, and"
      echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
      echo "flag during linking and do at least one of the following:"
      if test -n "$shlibpath_var"; then
        echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
        echo "     during execution"
      fi
      if test -n "$runpath_var"; then
        echo "   - add LIBDIR to the \`$runpath_var' environment variable"
        echo "     during linking"
      fi
      if test -n "$hardcode_libdir_flag_spec"; then
        libdir=LIBDIR
        eval flag=\"$hardcode_libdir_flag_spec\"
  
        echo "   - use the \`$flag' linker flag"
      fi
      if test -n "$admincmds"; then
        echo "   - have your system administrator run these commands:$admincmds"
      fi
      if test -f /etc/ld.so.conf; then
        echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
      fi
      echo
      echo "See any operating system documentation about shared libraries for"
      echo "more information, such as the ld(1) and ld.so(8) manual pages."
      echo "----------------------------------------------------------------------"
      exit 0
      ;;
  
    # libtool execute mode
    execute)
      modename="$modename: execute"
  
      # The first argument is the command name.
      cmd="$nonopt"
      if test -z "$cmd"; then
        $echo "$modename: you must specify a COMMAND" 1>&2
        $echo "$help"
        exit 1
      fi
  
      # Handle -dlopen flags immediately.
      for file in $execute_dlfiles; do
        if test ! -f "$file"; then
  	$echo "$modename: \`$file' is not a file" 1>&2
  	$echo "$help" 1>&2
  	exit 1
        fi
  
        dir=
        case $file in
        *.la)
  	# Check to see that this really is a libtool archive.
  	if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
  	else
  	  $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
  	  $echo "$help" 1>&2
  	  exit 1
  	fi
  
  	# Read the libtool library.
  	dlname=
  	library_names=
  
  	# If there is no directory component, then add one.
  	case $file in
  	*/* | *\\*) . $file ;;
  	*) . ./$file ;;
  	esac
  
  	# Skip this library if it cannot be dlopened.
  	if test -z "$dlname"; then
  	  # Warn if it was a shared library.
  	  test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'"
  	  continue
  	fi
  
  	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
  	test "X$dir" = "X$file" && dir=.
  
  	if test -f "$dir/$objdir/$dlname"; then
  	  dir="$dir/$objdir"
  	else
  	  $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2
  	  exit 1
  	fi
  	;;
  
        *.lo)
  	# Just add the directory containing the .lo file.
  	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
  	test "X$dir" = "X$file" && dir=.
  	;;
  
        *)
  	$echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2
  	continue
  	;;
        esac
  
        # Get the absolute pathname.
        absdir=`cd "$dir" && pwd`
        test -n "$absdir" && dir="$absdir"
  
        # Now add the directory to shlibpath_var.
        if eval "test -z \"\$$shlibpath_var\""; then
  	eval "$shlibpath_var=\"\$dir\""
        else
  	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
        fi
      done
  
      # This variable tells wrapper scripts just to set shlibpath_var
      # rather than running their programs.
      libtool_execute_magic="$magic"
  
      # Check if any of the arguments is a wrapper script.
      args=
      for file
      do
        case $file in
        -*) ;;
        *)
  	# Do a test to see if this is really a libtool program.
  	if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
  	  # If there is no directory component, then add one.
  	  case $file in
  	  */* | *\\*) . $file ;;
  	  *) . ./$file ;;
  	  esac
  
  	  # Transform arg to wrapped name.
  	  file="$progdir/$program"
  	fi
  	;;
        esac
        # Quote arguments (to preserve shell metacharacters).
        file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"`
        args="$args \"$file\""
      done
  
      if test -z "$run"; then
        if test -n "$shlibpath_var"; then
  	# Export the shlibpath_var.
  	eval "export $shlibpath_var"
        fi
  
        # Restore saved enviroment variables
        if test "${save_LC_ALL+set}" = set; then
  	LC_ALL="$save_LC_ALL"; export LC_ALL
        fi
        if test "${save_LANG+set}" = set; then
  	LANG="$save_LANG"; export LANG
        fi
  
        # Now prepare to actually exec the command.
        exec_cmd='"$cmd"$args'
      else
        # Display what would be done.
        if test -n "$shlibpath_var"; then
  	eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
  	$echo "export $shlibpath_var"
        fi
        $echo "$cmd$args"
        exit 0
      fi
      ;;
  
    # libtool clean and uninstall mode
    clean | uninstall)
      modename="$modename: $mode"
      rm="$nonopt"
      files=
      rmforce=
      exit_status=0
  
      # This variable tells wrapper scripts just to set variables rather
      # than running their programs.
      libtool_install_magic="$magic"
  
      for arg
      do
        case $arg in
        -f) rm="$rm $arg"; rmforce=yes ;;
        -*) rm="$rm $arg" ;;
        *) files="$files $arg" ;;
        esac
      done
  
      if test -z "$rm"; then
        $echo "$modename: you must specify an RM program" 1>&2
        $echo "$help" 1>&2
        exit 1
      fi
  
      rmdirs=
  
      for file in $files; do
        dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
        if test "X$dir" = "X$file"; then
  	dir=.
  	objdir="$objdir"
        else
  	objdir="$dir/$objdir"
        fi
        name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
        test $mode = uninstall && objdir="$dir"
  
        # Remember objdir for removal later, being careful to avoid duplicates
        if test $mode = clean; then
  	case " $rmdirs " in
  	  *" $objdir "*) ;;
  	  *) rmdirs="$rmdirs $objdir" ;;
  	esac
        fi
  
        # Don't error if the file doesn't exist and rm -f was used.
        if (test -L "$file") >/dev/null 2>&1 \
  	|| (test -h "$file") >/dev/null 2>&1 \
  	|| test -f "$file"; then
  	:
        elif test -d "$file"; then
  	exit_status=1
  	continue
        elif test "$rmforce" = yes; then
  	continue
        fi
  
        rmfiles="$file"
  
        case $name in
        *.la)
  	# Possibly a libtool archive, so verify it.
  	if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
  	  . $dir/$name
  
  	  # Delete the libtool libraries and symlinks.
  	  for n in $library_names; do
  	    rmfiles="$rmfiles $objdir/$n"
  	  done
  	  test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
  	  test $mode = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
  
  	  if test $mode = uninstall; then
  	    if test -n "$library_names"; then
  	      # Do each command in the postuninstall commands.
  	      eval cmds=\"$postuninstall_cmds\"
  	      save_ifs="$IFS"; IFS='~'
  	      for cmd in $cmds; do
  		IFS="$save_ifs"
  		$show "$cmd"
  		$run eval "$cmd"
  		if test $? != 0 && test "$rmforce" != yes; then
  		  exit_status=1
  		fi
  	      done
  	      IFS="$save_ifs"
  	    fi
  
  	    if test -n "$old_library"; then
  	      # Do each command in the old_postuninstall commands.
  	      eval cmds=\"$old_postuninstall_cmds\"
  	      save_ifs="$IFS"; IFS='~'
  	      for cmd in $cmds; do
  		IFS="$save_ifs"
  		$show "$cmd"
  		$run eval "$cmd"
  		if test $? != 0 && test "$rmforce" != yes; then
  		  exit_status=1
  		fi
  	      done
  	      IFS="$save_ifs"
  	    fi
  	    # FIXME: should reinstall the best remaining shared library.
  	  fi
  	fi
  	;;
  
        *.lo)
  	if test "$build_old_libs" = yes; then
  	  oldobj=`$echo "X$name" | $Xsed -e "$lo2o"`
  	  rmfiles="$rmfiles $dir/$oldobj"
  	fi
  	;;
  
        *)
  	# Do a test to see if this is a libtool program.
  	if test $mode = clean &&
  	   (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
  	  relink_command=
  	  . $dir/$file
  
  	  rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
  	  if test "$fast_install" = yes && test -n "$relink_command"; then
  	    rmfiles="$rmfiles $objdir/lt-$name"
  	  fi
  	fi
  	;;
        esac
        $show "$rm $rmfiles"
        $run $rm $rmfiles || exit_status=1
      done
  
      # Try to remove the ${objdir}s in the directories where we deleted files
      for dir in $rmdirs; do
        if test -d "$dir"; then
  	$show "rmdir $dir"
  	$run rmdir $dir >/dev/null 2>&1
        fi
      done
  
      exit $exit_status
      ;;
  
    "")
      $echo "$modename: you must specify a MODE" 1>&2
      $echo "$generic_help" 1>&2
      exit 1
      ;;
    esac
  
    if test -z "$exec_cmd"; then
      $echo "$modename: invalid operation mode \`$mode'" 1>&2
      $echo "$generic_help" 1>&2
      exit 1
    fi
  fi # test -z "$show_help"
  
  if test -n "$exec_cmd"; then
    eval exec $exec_cmd
    exit 1
  fi
  
  # We need to display help for each of the modes.
  case $mode in
  "") $echo \
  "Usage: $modename [OPTION]... [MODE-ARG]...
  
  Provide generalized library-building support services.
  
      --config          show all configuration variables
      --debug           enable verbose shell tracing
  -n, --dry-run         display commands without modifying any files
      --features        display basic configuration information and exit
      --finish          same as \`--mode=finish'
      --help            display this help message and exit
      --mode=MODE       use operation mode MODE [default=inferred from MODE-ARGS]
      --quiet           same as \`--silent'
      --silent          don't print informational messages
      --version         print version information
  
  MODE must be one of the following:
  
        clean           remove files from the build directory
        compile         compile a source file into a libtool object
        execute         automatically set library path, then run a program
        finish          complete the installation of libtool libraries
        install         install libraries or executables
        link            create a library or an executable
        uninstall       remove libraries from an installed directory
  
  MODE-ARGS vary depending on the MODE.  Try \`$modename --help --mode=MODE' for
  a more detailed description of MODE."
    exit 0
    ;;
  
  clean)
    $echo \
  "Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
  
  Remove files from the build directory.
  
  RM is the name of the program to use to delete files associated with each FILE
  (typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
  to RM.
  
  If FILE is a libtool library, object or program, all the files associated
  with it are deleted. Otherwise, only FILE itself is deleted using RM."
    ;;
  
  compile)
    $echo \
  "Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
  
  Compile a source file into a libtool library object.
  
  This mode accepts the following additional options:
  
    -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
    -prefer-pic       try to building PIC objects only
    -prefer-non-pic   try to building non-PIC objects only
    -static           always build a \`.o' file suitable for static linking
  
  COMPILE-COMMAND is a command to be used in creating a \`standard' object file
  from the given SOURCEFILE.
  
  The output file name is determined by removing the directory component from
  SOURCEFILE, then substituting the C source code suffix \`.c' with the
  library object suffix, \`.lo'."
    ;;
  
  execute)
    $echo \
  "Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]...
  
  Automatically set library path, then run a program.
  
  This mode accepts the following additional options:
  
    -dlopen FILE      add the directory containing FILE to the library path
  
  This mode sets the library path environment variable according to \`-dlopen'
  flags.
  
  If any of the ARGS are libtool executable wrappers, then they are translated
  into their corresponding uninstalled binary, and any of their required library
  directories are added to the library path.
  
  Then, COMMAND is executed, with ARGS as arguments."
    ;;
  
  finish)
    $echo \
  "Usage: $modename [OPTION]... --mode=finish [LIBDIR]...
  
  Complete the installation of libtool libraries.
  
  Each LIBDIR is a directory that contains libtool libraries.
  
  The commands that this mode executes may require superuser privileges.  Use
  the \`--dry-run' option if you just want to see what would be executed."
    ;;
  
  install)
    $echo \
  "Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND...
  
  Install executables or libraries.
  
  INSTALL-COMMAND is the installation command.  The first component should be
  either the \`install' or \`cp' program.
  
  The rest of the components are interpreted as arguments to that command (only
  BSD-compatible install options are recognized)."
    ;;
  
  link)
    $echo \
  "Usage: $modename [OPTION]... --mode=link LINK-COMMAND...
  
  Link object files or libraries together to form another library, or to
  create an executable program.
  
  LINK-COMMAND is a command using the C compiler that you would use to create
  a program from several object files.
  
  The following components of LINK-COMMAND are treated specially:
  
    -all-static       do not do any dynamic linking at all
    -avoid-version    do not add a version suffix if possible
    -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
    -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
    -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
    -export-symbols SYMFILE
  		    try to export only the symbols listed in SYMFILE
    -export-symbols-regex REGEX
  		    try to export only the symbols matching REGEX
    -LLIBDIR          search LIBDIR for required installed libraries
    -lNAME            OUTPUT-FILE requires the installed library libNAME
    -module           build a library that can dlopened
    -no-fast-install  disable the fast-install mode
    -no-install       link a not-installable executable
    -no-undefined     declare that a library does not refer to external symbols
    -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
    -release RELEASE  specify package release information
    -rpath LIBDIR     the created library will eventually be installed in LIBDIR
    -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
    -static           do not do any dynamic linking of libtool libraries
    -version-info CURRENT[:REVISION[:AGE]]
  		    specify library version info [each variable defaults to 0]
  
  All other options (arguments beginning with \`-') are ignored.
  
  Every other argument is treated as a filename.  Files ending in \`.la' are
  treated as uninstalled libtool libraries, other files are standard or library
  object files.
  
  If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
  only library objects (\`.lo' files) may be specified, and \`-rpath' is
  required, except when creating a convenience library.
  
  If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
  using \`ar' and \`ranlib', or on Windows using \`lib'.
  
  If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
  is created, otherwise an executable program is created."
    ;;
  
  uninstall)
    $echo \
  "Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
  
  Remove libraries from an installation directory.
  
  RM is the name of the program to use to delete files associated with each FILE
  (typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
  to RM.
  
  If FILE is a libtool library, all the files associated with it are deleted.
  Otherwise, only FILE itself is deleted using RM."
    ;;
  
  *)
    $echo "$modename: invalid operation mode \`$mode'" 1>&2
    $echo "$help" 1>&2
    exit 1
    ;;
  esac
  
  echo
  $echo "Try \`$modename --help' for more information about other modes."
  
  exit 0
  
  # Local Variables:
  # mode:shell-script
  # sh-indentation:2
  # End:
  Index: ossp-pkg/rc/rc_p.h
  ============================================================
  $ cvs update -p -r1.1 rc_p.h
  /*  rc - OSSP Runcommand processor
  **  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2002 Ralf S. Engelschall
  **
  **  This file is part of OSSP rc, a portable Runcommand processor
  **  which can be found at http://www.ossp.org/pkg/rc/
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  rc_p.h: Runcommand processor ANSI C private API header file
  */
  
  #ifndef __OSSPRC_P_H__
  #define __OSSPRC_P_H__
  
  #include "rc_config.h"
  
  #ifdef HAVE_SYS_TIME_H /* must come after include rc_config.h */
  #include <sys/time.h>
  #endif
  
  #endif /* __OSSPRC_P_H__ */
  Index: ossp-pkg/rc/rc_test.sh
  ============================================================
  $ cvs update -p -r1.1 rc_test.sh
  #! /bin/sh
  #  rc - OSSP Runcommand processor
  #  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  #  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  #  Copyright (c) 2002 Ralf S. Engelschall
  #
  #  This file is part of OSSP rc, a portable Runcommand processor
  #  which can be found at http://www.ossp.org/pkg/rc/
  #
  #  Permission to use, copy, modify, and distribute this software for
  #  any purpose with or without fee is hereby granted, provided that
  #  the above copyright notice and this permission notice appear in all
  #  copies.
  #
  #  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  #  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  #  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  #  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  #  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  #  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  #  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  #  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  #  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  #  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  #  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  #  SUCH DAMAGE.
  #
  #  test_rc.sh: Runcommand processor test script
  
  echo "Eat a OSSP frog"

From ossp-cvs-owner@ossp.org  Tue Jan  8 16:49:03 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 01571764E3; Tue,  8 Jan 2002 16:49:02 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc 00TODO rc.c rc.h
Message-Id: <20020108154902.01571764E3@mail.ossp.org>
Date: Tue,  8 Jan 2002 16:49:02 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   08-Jan-2002 16:49:02
  Branch: HEAD                             Handle: 2002010815490200

  Modified files:
    ossp-pkg/rc             00TODO rc.c rc.h

  Log:
    Final move from OpenPKG project hierarchy to OSSP project hierarchy.

  Summary:
    Revision    Changes     Path
    1.3         +9  -4      ossp-pkg/rc/00TODO
    1.2         +7  -8      ossp-pkg/rc/rc.c
    1.2         +10 -11     ossp-pkg/rc/rc.h
  ____________________________________________________________________________

  Index: ossp-pkg/rc/00TODO
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 00TODO
  --- ossp-pkg/rc/00TODO	7 Jan 2002 10:52:51 -0000	1.2
  +++ ossp-pkg/rc/00TODO	8 Jan 2002 15:49:02 -0000	1.3
  @@ -1,8 +1,13 @@
  -00TODO: Tasks left to accomplish before the rc utility is complete
  +00TODO: Tasks left to accomplish before rc is complete
   
   Consider
  -  Develop return code and error definitions unique to OpenPKG
  -  Enclose rc.c in its own project and write autoconf logic
  +  Make return code and error definitions unique to OSSP rc.
  +  Enclose rc.c in its own project and write autoconf logic.
   
   Must do
  -  Translate rc bourne shell script to ANSI C
  +  Translate rc bourne shell script to ANSI C.
  +  If a variable is defined for which no default exists, warn user (Scholli.)
  +  Avoid a silent failure when giving non-existent run commands (Marcus.)
  +
  +Automated environment
  +  Solve problem discussed at OpenPKG eval meeting.
  Index: ossp-pkg/rc/rc.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 rc.c
  --- ossp-pkg/rc/rc.c	4 Jan 2002 17:14:45 -0000	1.1
  +++ ossp-pkg/rc/rc.c	8 Jan 2002 15:49:02 -0000	1.2
  @@ -1,11 +1,10 @@
  -/*
  -**  OpenPKG rc - Run-Command Handling for OpenPKG
  -**  Copyright (c) 2000-2001 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2002 The OpenPKG Project (http://www.openpkg.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +/*  rc - OSSP Runcommand processor
  +**  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002 Ralf S. Engelschall
   **
  -**  This file is part of OpenPKG, a packaging facility which can be
  -**  found at http://www.openpkg.org/
  +**  This file is part of OSSP rc, a portable Runcommand processor
  +**  which can be found at http://www.ossp.org/pkg/rc/
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  @@ -25,7 +24,7 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  rc.c: run-command processor ANSI C source file
  +**  rc.c: Runcommand processor ANSI C source file
   */
   
   #include <stdio.h>
  Index: ossp-pkg/rc/rc.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 rc.h
  --- ossp-pkg/rc/rc.h	4 Jan 2002 17:14:45 -0000	1.1
  +++ ossp-pkg/rc/rc.h	8 Jan 2002 15:49:02 -0000	1.2
  @@ -1,11 +1,10 @@
  -/*
  -**  OpenPKG rc - Run-Command Handling for OpenPKG
  -**  Copyright (c) 2000-2001 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2002 The OpenPKG Project (http://www.openpkg.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +/*  rc - OSSP Runcommand processor
  +**  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002 Ralf S. Engelschall
   **
  -**  This file is part of OpenPKG, a packaging facility which can be
  -**  found at http://www.openpkg.org/
  +**  This file is part of OSSP rc, a portable Runcommand processor
  +**  which can be found at http://www.ossp.org/pkg/rc/
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  @@ -25,11 +24,11 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  rc.h: run-command processor ANSI C header file
  +**  rc.h: Runcommand processor ANSI C public header file
   */
   
  -#ifndef __OPENPKGRC_H__
  -#define __OPENPKGRC_H__
  +#ifndef __OSSPRC_H__
  +#define __OSSPRC_H__
   
   /* compensate for poor standard environments */
   #ifndef NULL
  @@ -44,4 +43,4 @@
   #define TRUE (!FALSE)
   #endif
   
  -#endif /* __OPENPKGRC_H__ */
  +#endif /* __OSSPRC_H__ */

From ossp-cvs-owner@ossp.org  Tue Jan  8 16:56:13 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B060C764E3; Tue,  8 Jan 2002 16:56:13 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc .cvsignore
Message-Id: <20020108155613.B060C764E3@mail.ossp.org>
Date: Tue,  8 Jan 2002 16:56:13 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   08-Jan-2002 16:56:13
  Branch: HEAD                             Handle: 2002010815561300

  Added files:
    ossp-pkg/rc             .cvsignore

  Log:
    Birth of cvs ignore file.

  Summary:
    Revision    Changes     Path
    1.1         +11 -0      ossp-pkg/rc/.cvsignore
  ____________________________________________________________________________

  Index: ossp-pkg/rc/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  Makefile
  configure
  config.status
  config.log
  config.cache
  config.guess
  config.sub
  config.h
  libtool.m4
  shtool
  rc.1

From ossp-cvs-owner@ossp.org  Tue Jan  8 17:36:41 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D19B8764E3; Tue,  8 Jan 2002 17:36:40 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var_qref.pod
Message-Id: <20020108163640.D19B8764E3@mail.ossp.org>
Date: Tue,  8 Jan 2002 17:36:40 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   08-Jan-2002 17:36:40
  Branch: HEAD                             Handle: 2002010816364000

  Modified files:
    ossp-pkg/var            var_qref.pod

  Log:
    polishing

  Summary:
    Revision    Changes     Path
    1.2         +58 -18     ossp-pkg/var/var_qref.pod
  ____________________________________________________________________________

  Index: ossp-pkg/var/var_qref.pod
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 var_qref.pod
  --- ossp-pkg/var/var_qref.pod	4 Jan 2002 22:31:03 -0000	1.1
  +++ ossp-pkg/var/var_qref.pod	8 Jan 2002 16:36:40 -0000	1.2
  @@ -1,31 +1,65 @@
  +##
  +##  VAR - OSSP variable expression library.
  +##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##
  +##  This file is part of OSSP VAR, an extensible data serialization
  +##  library which can be found at http://www.ossp.org/pkg/var/.
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED `AS IS' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  var_qref.pod: Quick Reference manual page source
  +##
   
   =pod
   
  -A string expanded through B<OSSP var> can consist of arbitrary text
  -characters plus one or more of the following special constructs.
  -This is just a very brief summary. For details see var(3).
  -
  -=over 4
  +=head1 NAME
   
  -=item C<\\>, C<\>I<x>
  +var_qref -- OSSP var Quick Reference
   
  -Ordinary characters C<\> and I<x>.
  +=head1 DESCRIPTION
   
  -=item C<\t>, C<\r>, C<\n>
  +A string expanded through B<OSSP var> can consist of arbitrary text
  +characters plus one or more of the following special syntax constructs
  +which are expanded by B<OSSP var>. This is just a very brief summary.
  +For more details see var(3).
   
  -Tabulator, carriage return and newline character.
  +=over 4
   
   =item C<\>I<NNN>
   
  -Character with the octal value I<NNN>.
  +Character with the octal value I<NNN> 
  +(I<N>: C<0>,...,C<7>).
   
  -=item C<\x>I<NN>
  +=item C<\x>I<NN>, C<\x{>I<NNMM..>C<}>
   
  -Character with the hexadecial value I<NN>.
  +Character with the hexadecimal value I<NN> or the characters
  +denoted by grouped hexadecimal numbers I<NNMM..>. (I<N>, I<M>:
  +C<0>,...,C<9>,[C<aA>],...,[C<fF>]).
   
  -=item C<\x{>I<NNMM..>C<}>
  +=item C<\t>, C<\r>, C<\n>
  +
  +Tabulator, Carriage Return and Newline character.
  +
  +=item C<\\>, C<\>I<x>
   
  -Characters denoted by grouped hexadecimal numbers I<NNMM..>.
  +Ordinary character C<\> and I<x>.
   
   =item C<$>I<name>, C<${>I<name>C<}>
   
  @@ -33,23 +67,23 @@
   
   =item C<${>I<name>C<[>I<index>C<]>C<}>
   
  -Contents of array variable I<name> at I<index> position.
  +Contents of array variable I<name> at position I<index>.
   For I<index> full arithmetic expressions are allowed.
   
   =item C<${>I<name>C<:#}>
   
   Length of C<$>I<name>.
   
  -=item ${name:l}, ${name:u}
  +=item C<${>I<name>C<:l}>, C<${>I<name>C<:u}>
   
   C<$>I<name>, converted to all lower-case or all upper-case.
   
  -=item ${name:-<word>}
  +=item C<${>I<name>C<:->I<word>C<}>
   
   If C<$>I<name> is not empty string, then C<$>I<name>, else I<word>
   (default value).
   
  -=item ${name:+<word>}
  +=item C<${>I<name>C<:+>I<word>C<}>
   
   If C<$>I<name> is empty string, then empty string, else I<word>
   (positive alternative).
  @@ -102,4 +136,10 @@
   I<start>, I<step> and I<end>, full arithmetic expressions are allowed.
   
   =back
  +
  +=head1 SEE ALSO
  +
  +var(3).
  +
  +=cut
   

From ossp-cvs-owner@ossp.org  Wed Jan  9 08:42:30 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6FFC2764D1; Wed,  9 Jan 2002 08:42:30 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp example.conf
Message-Id: <20020109074230.6FFC2764D1@mail.ossp.org>
Date: Wed,  9 Jan 2002 08:42:30 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   09-Jan-2002 08:42:30
  Branch: HEAD                             Handle: 2002010907422900

  Added files:
    ossp-pkg/lmtp2nntp      example.conf

  Log:
    first draft of a configuration file example

  Summary:
    Revision    Changes     Path
    1.1         +49 -0      ossp-pkg/lmtp2nntp/example.conf
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/example.conf
  ============================================================
  $ cvs update -p -r1.1 example.conf
  
  # 
  # LMTP2NNTP exsample.conf
  # 
  
          ### DAEMON ###
  
  childsmax       10                              #see -C aka --childsmax
  daemonize       yes                             #see -D aka --daemonize
                                                  #    -K aka --kill is not available in the configfile
  pidfile         "/tmp/pid"                      #see -P aka --pidfile
                                                  #    -V is obsolete since v1.2; remove the "buffer" channel from l2spec
  acl             10/8                            #see -a aka --acl
  acl             172.16/12
  acl             192.168/16
  acl             127.0.0.1/32     
  bind            127.0.0.1:12345                 #see -b aka --bind, use IPv4:port
  #bind           "/tmp/uds:600"                  #    UNIX domain socket path:permissions 
  
          ### GATEWAY ###
  
  client          127.0.0.2                       #see -c aka --client
  destination     news.example.com                #see -d aka --destination
  groupmode       envelope                        #see -g aka --groupmode
  headervalue     X-gateway "lmtp2nntp gateway"   #see -h aka --headervalue
  include         "sampleconfig.two"              #    -i aka --include
                                                  #    -l is obsolete since v1.2, see l2spec
  
  l2spec          prefix(prefix="%%b %%d %%H:%%M:%%S <%%L> lmtp2nntp[%%P]: ",timezone=local) \
                     -> buffer(size=65536) \
                     -> file(path=%s,append=1,perm=%d) \
                                                  #    -l aka --l2spec
  
  mailfrom        "any.*@example\.org"            #see -m aka --mailfrom
  nodename        "gateway.example.com"           #see -n aka --nodename
  operationmode   post                            #see -o aka --operationmode
  restrictheader  "Cc: j\.doe@example\.org"       #see -r aka --restrictheader
  size            555000                          #see -s aka --size
  timeout         lmtp:accept  0                  #see -t aka --timeout
  timeout         lmtp:read    10 
  timeout         lmtp:write   10 
  timeout         nntp:connect 360 
  timeout         nntp:read    60 
  timeout         nntp:write   60 
  uid             gate                            #see -u aka --uid
                                                  #    -v aka --version is not available in the configfile
  newsgroup       "test"
  newsgroup       "alt.test"                      #see man page for information about newsgroup
  

From ossp-cvs-owner@ossp.org  Wed Jan  9 11:31:15 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1234A764D1; Wed,  9 Jan 2002 11:31:15 +0100 (CET)
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Message-Id: <20020109103115.1234A764D1@mail.ossp.org>
Date: Wed,  9 Jan 2002 11:31:15 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   OSSP Project Master
  Root:   /e/ossp/cvs                      Email:  ossp@ossp.org
  Module: CVSROOT                          Date:   09-Jan-2002 11:31:14
  Branch: HEAD                             Handle: 2002010910311400

  Modified files:
    CVSROOT                 modules

  Log:
    add cache module

  Summary:
    Revision    Changes     Path
    1.38        +1  -0      CVSROOT/modules
  ____________________________________________________________________________

  Index: CVSROOT/modules
  ============================================================
  $ cvs diff -u -r1.37 -r1.38 modules
  --- CVSROOT/modules	7 Jan 2002 10:56:58 -0000	1.37
  +++ CVSROOT/modules	9 Jan 2002 10:31:14 -0000	1.38
  @@ -79,6 +79,7 @@
   var             ossp-pkg/var
   pth             ossp-pkg/pth
   shtool          ossp-pkg/shtool
  +cache           ossp-pkg/cache
   
   #   OSSP lmtp2nntp
   lmtp2nntp       ossp-pkg/lmtp2nntp &lmtp2nntp_str &lmtp2nntp_l2 &lmtp2nntp_sa &lmtp2nntp_var

From ossp-cvs-owner@ossp.org  Wed Jan  9 11:44:30 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1F93C764D1; Wed,  9 Jan 2002 11:44:30 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cache Makefile.in README TODO VERSION aclocal.m4 ...
Message-Id: <20020109104430.1F93C764D1@mail.ossp.org>
Date: Wed,  9 Jan 2002 11:44:30 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Jan-2002 11:44:30
  Branch: HEAD                             Handle: 2002010910442800

  Added files:
    ossp-pkg/cache          Makefile.in README TODO VERSION aclocal.m4
                            cache-config.in cache.c cache.h cache.pod
                            cache_test.c configure.ac devtool devtool.conf
                            devtool.func

  Log:
    Create a fresh build environment for new born child OSSP cache.
    This soon to be written library will provide a user-land cache
    with O(1) time complexity and fixed size memory usage.

  Summary:
    Revision    Changes     Path
    1.1         +112 -0     ossp-pkg/cache/Makefile.in
    1.1         +47 -0      ossp-pkg/cache/README
    1.1         +4  -0      ossp-pkg/cache/TODO
    1.1         +6  -0      ossp-pkg/cache/VERSION
    1.1         +117 -0     ossp-pkg/cache/aclocal.m4
    1.1         +145 -0     ossp-pkg/cache/cache-config.in
    1.1         +49 -0      ossp-pkg/cache/cache.c
    1.1         +35 -0      ossp-pkg/cache/cache.h
    1.1         +59 -0      ossp-pkg/cache/cache.pod
    1.1         +35 -0      ossp-pkg/cache/cache_test.c
    1.1         +52 -0      ossp-pkg/cache/configure.ac
    1.1         +47 -0      ossp-pkg/cache/devtool
    1.1         +31 -0      ossp-pkg/cache/devtool.conf
    1.1         +72 -0      ossp-pkg/cache/devtool.func
  ____________________________________________________________________________

  Index: ossp-pkg/cache/Makefile.in
  ============================================================
  $ cvs update -p -r1.1 Makefile.in
  ##
  ##  cache - OSSP Caching Library
  ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  ##
  ##  This file is part of OSSP cache, a Caching library which
  ##  can be found at http://www.ossp.org/pkg/cache/.
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  Makefile.in: make(1) build procedure
  ##
  
  @SET_MAKE@
  
  DESTDIR     =
  prefix      = @prefix@
  exec_prefix = @exec_prefix@
  bindir      = @bindir@
  libdir      = @libdir@
  includedir  = @includedir@
  mandir      = @mandir@
  
  CC          = @CC@
  CPPFLAGS    = @CPPFLAGS@
  CFLAGS      = @DEFS@ @CFLAGS@
  LDFLAGS     = @LDFLAGS@
  LIBS        = @LIBS@
  RM          = rm -f
  RMDIR       = rmdir
  SHTOOL      = ./shtool
  LIBTOOL     = ./libtool
  TRUE        = true
  
  LIB_NAME    = libcache.la
  LIB_OBJS    = cache.lo
  
  TST_NAME    = cache_test
  TST_OBJS    = cache_test.o
  
  .SUFFIXES:
  .SUFFIXES: .c .o .lo
  
  all: $(LIB_NAME) $(TST_NAME)
  
  .c.o:
  	$(CC) $(CPPFLAGS) $(CFLAGS) -c $<
  
  .c.lo:
  	@$(LIBTOOL) --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS) -c $<
  
  $(LIB_NAME): $(LIB_OBJS)
  	@$(LIBTOOL) --mode=link $(CC) -o $(LIB_NAME) $(LIB_OBJS) -rpath $(libdir) \
  	    -version-info `$(SHTOOL) version -l txt -d libtool VERSION`
  
  $(TST_NAME): $(TST_OBJS) $(LIB_NAME)
  	@$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $(TST_NAME) $(TST_OBJS) $(LIB_NAME) $(LIBS)
  
  check: $(TST_NAME)
  	@$(LIBTOOL) --mode=execute ./$(TST_NAME)
  
  install:
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(includedir)
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libdir)
  	$(SHTOOL) install -c -m 755 cache-config $(DESTDIR)$(bindir)/
  	$(SHTOOL) install -c -m 644 cache.h $(DESTDIR)$(includedir)/
  	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libcache.la $(DESTDIR)$(libdir)/
  
  uninstall:
  	@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libcache.la
  	-$(RM) $(DESTDIR)$(includedir)/cache.h
  	-$(RM) $(DESTDIR)$(bindir)/cache-config
  	-$(RMDIR) $(DESTDIR)$(libdir) >/dev/null 2>&1 || $(TRUE)
  	-$(RMDIR) $(DESTDIR)$(includedir) >/dev/null 2>&1 || $(TRUE)
  	-$(RMDIR) $(DESTDIR)$(bindir) >/dev/null 2>&1 || $(TRUE)
  	-$(RMDIR) $(DESTDIR)$(prefix) >/dev/null 2>&1 || $(TRUE)
  
  clean:
  	-$(RM) $(LIB_NAME) $(LIB_OBJS)
  	-$(RM) $(TST_NAME) $(TST_OBJS)
  	-$(RM) -r .libs >/dev/null 2>&1 || $(TRUE)
  	-$(RM) *.o *.lo
  
  distclean: clean
  	-$(RM) config.log config.status config.cache
  	-$(RM) Makefile config.h cache-config
  	-$(RM) libtool
  
  realclean: distclean
  	-$(RM) configure config.h.in
  	-$(RM) shtool
  	-$(RM) ltmain.sh libtool.m4 config.guess config.sub
  
  Index: ossp-pkg/cache/README
  ============================================================
  $ cvs update -p -r1.1 README
                    _          
      ___ __ _  ___| |__   ___ 
     / __/ _` |/ __| '_ \ / _ \
    | (_| (_| | (__| | | |  __/
     \___\__,_|\___|_| |_|\___|
  
    OSSP Cache - Caching Library
    Version 0.1.0 (13-Sep-2001)
  
    ABSTRACT
  
    The OSSP Cache library is ...
  
    COPYRIGHT AND LICENSE
  
    Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
    Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
    Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  
    This file is part of OSSP Cache, a caching library which
    can be found at http://www.ossp.org/pkg/cache/.
  
    Permission to use, copy, modify, and distribute this software for
    any purpose with or without fee is hereby granted, provided that
    the above copyright notice and this permission notice appear in all
    copies.
  
    THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
    WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
    IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
    CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
    USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    SUCH DAMAGE.
  
    HOME AND DOCUMENTATION
  
    The documentation and latest release can be found on
  
    o http://www.ossp.org/pkg/cache/
    o  ftp://ftp.ossp.org/pkg/cache/
  
  Index: ossp-pkg/cache/TODO
  ============================================================
  $ cvs update -p -r1.1 TODO
  
  TODO
  ----
  
  Index: ossp-pkg/cache/VERSION
  ============================================================
  $ cvs update -p -r1.1 VERSION
  
    VERSION -- Version Information for OSSP cache (syntax: Text)
    [automatically generated and maintained by GNU shtool]
  
    This is OSSP cache, Version 0.1.0 (08-Oct-2001)
  
  Index: ossp-pkg/cache/aclocal.m4
  ============================================================
  $ cvs update -p -r1.1 aclocal.m4
  dnl ##
  dnl ##  SA - OSSP Socket Abstraction Library
  dnl ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  dnl ##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  dnl ##
  dnl ##  This file is part of OSSP SA, a socket abstraction library which
  dnl ##  can be found at http://www.ossp.org/pkg/sa/.
  dnl ##
  dnl ##  Permission to use, copy, modify, and distribute this software for
  dnl ##  any purpose with or without fee is hereby granted, provided that
  dnl ##  the above copyright notice and this permission notice appear in all
  dnl ##  copies.
  dnl ##
  dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  dnl ##  SUCH DAMAGE.
  dnl ##
  dnl ##  aclocal.m4: GNU Autoconf local macro definitions
  dnl ##
  
  dnl ##
  dnl ##  Check whether compiler option works
  dnl ##
  dnl ##  configure.in:
  dnl ##    AC_COMPILER_OPTION(<name>, <display>, <option>,
  dnl ##                       <action-success>, <action-failure>)
  dnl ##
  
  AC_DEFUN(AC_COMPILER_OPTION,[dnl
  AC_MSG_CHECKING(whether compiler option(s) $2 work)
  AC_CACHE_VAL(ac_cv_compiler_option_$1,[
  SAVE_CFLAGS="$CFLAGS"
  CFLAGS="$CFLAGS $3"
  AC_TRY_COMPILE([],[], ac_cv_compiler_option_$1=yes, ac_cv_compiler_option_$1=no)
  CFLAGS="$SAVE_CFLAGS"
  ])dnl
  if test ".$ac_cv_compiler_option_$1" = .yes; then
      ifelse([$4], , :, [$4])
  else
      ifelse([$5], , :, [$5])
  fi
  AC_MSG_RESULT([$ac_cv_compiler_option_$1])
  ])dnl
  
  dnl ##
  dnl ##  Debugging Support
  dnl ##
  dnl ##  configure.in:
  dnl ##    AC_CHECK_DEBUGGING
  dnl ##
  
  AC_DEFUN(AC_CHECK_DEBUGGING,[dnl
  AC_ARG_ENABLE(debug,dnl
  [  --enable-debug          build for debugging (default=no)],
  [dnl
  if test ".$ac_cv_prog_gcc" = ".yes"; then
      case "$CFLAGS" in
          *-O* ) ;;
             * ) CFLAGS="$CFLAGS -O2" ;;
      esac
      case "$CFLAGS" in
          *-g* ) ;;
             * ) CFLAGS="$CFLAGS -g" ;;
      esac
      case "$CFLAGS" in
          *-pipe* ) ;;
                * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
      esac
      AC_COMPILER_OPTION(defdbg, -DDEBUG, -DDEBUG, CFLAGS="$CFLAGS -DDEBUG")
      AC_COMPILER_OPTION(ggdb3, -ggdb3, -ggdb3, CFLAGS="$CFLAGS -ggdb3")
      CFLAGS="$CFLAGS -pedantic"
      CFLAGS="$CFLAGS -Wall"
      WMORE="-Wshadow -Wpointer-arith -Wcast-align -Winline"
      WMORE="$WMORE -Wmissing-prototypes -Wmissing-declarations -Wnested-externs"
      AC_COMPILER_OPTION(wmore, -W<xxx>, $WMORE, CFLAGS="$CFLAGS $WMORE")
      AC_COMPILER_OPTION(wnolonglong, -Wno-long-long, -Wno-long-long, CFLAGS="$CFLAGS -Wno-long-long")
  else
      case "$CFLAGS" in
          *-g* ) ;;
             * ) CFLAGS="$CFLAGS -g" ;;
      esac
  fi
  msg="enabled"
  ],[
  if test ".$ac_cv_prog_gcc" = ".yes"; then
  case "$CFLAGS" in
      *-pipe* ) ;;
            * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
  esac
  fi
  case "$CFLAGS" in
      *-g* ) CFLAGS=`echo "$CFLAGS" |\
                     sed -e 's/ -g / /g' -e 's/ -g$//' -e 's/^-g //g' -e 's/^-g$//'` ;;
  esac
  case "$CXXFLAGS" in
      *-g* ) CXXFLAGS=`echo "$CXXFLAGS" |\
                       sed -e 's/ -g / /g' -e 's/ -g$//' -e 's/^-g //g' -e 's/^-g$//'` ;;
  esac
  msg=disabled
  ])dnl
  AC_MSG_CHECKING(for compilation debug mode)
  AC_MSG_RESULT([$msg])
  if test ".$msg" = .enabled; then
      enable_shared=no
  fi
  ])
  
  Index: ossp-pkg/cache/cache-config.in
  ============================================================
  $ cvs update -p -r1.1 cache-config.in
  #!/bin/sh
  ##
  ##  cache - OSSP Caching Library
  ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  ##
  ##  This file is part of OSSP cache, a Caching library which
  ##  can be found at http://www.ossp.org/pkg/cache/.
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  cache-config.in: SA library build utility
  ##
  
  DIFS=' 	
  '
  
  prefix="@prefix@"
  exec_prefix="@exec_prefix@"
  
  cache_prefix="$prefix"
  cache_exec_prefix="$exec_prefix"
  cache_bindir="@bindir@"
  cache_libdir="@libdir@"
  cache_includedir="@includedir@"
  cache_mandir="@mandir@"
  cache_datadir="@datadir@"
  cache_acdir="@datadir@/aclocal"
  cache_cflags="@CFLAGS@"
  cache_ldflags="@LDFLAGS@"
  cache_libs="@LIBS@"
  cache_version="@SA_VERSION_STR@"
  
  help=no
  version=no
  
  usage="cache-config"
  usage="$usage [--help] [--version] [--all]"
  usage="$usage [--prefix] [--exec-prefix] [--bindir] [--libdir] [--includedir] [--mandir] [--datadir] [--acdir]"
  usage="$usage [--cflags] [--ldflags] [--libs]"
  if [ $# -eq 0 ]; then
      echo "cache-config:Error: Invalid option" 1>&2
      echo "cache-config:Usage: $usage" 1>&2
      exit 1
  fi
  output=''
  output_extra=''
  all=no
  prev=''
  OIFS="$IFS" IFS="$DIFS"
  for option
  do
      if [ ".$prev" != . ]; then
          eval "$prev=\$option"
          prev=''
          continue
      fi
      case "$option" in
          -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
             *) optarg='' ;;
      esac
      case "$option" in
          --help|-h)
              echo "Usage: $usage"
              exit 0
              ;;
          --version|-v)
              echo "OSSP cache $cache_version"
              exit 0
              ;;
          --all)
              all=yes
              ;;
          --prefix)
              output="$output $cache_prefix"
              ;;
          --exec-prefix)
              output="$output $cache_exec_prefix"
              ;;
          --bindir)
              output="$output $cache_bindir"
              ;;
          --libdir)
              output="$output $cache_libdir"
              ;;
          --includedir)
              output="$output $cache_includedir"
              ;;
          --mandir)
              output="$output $cache_mandir"
              ;;
          --datadir)
              output="$output $cache_datadir"
              ;;
          --acdir)
              output="$output $cache_acdir"
              ;;
          --cflags)
              output="$output -I$cache_includedir"
              output_extra="$output_extra $cache_cflags"
              ;;
          --ldflags)
              output="$output -L$cache_libdir"
              output_extra="$output_extra $cache_ldflags"
              ;;
          --libs)
              output="$output -lcache"
              output_extra="$output_extra $cache_libs"
              ;;
          * )
              echo "sa-config:Error: Invalid option" 1>&2
              echo "sa-config:Usage: $usage" 1>&2
              exit 1;
              ;;
      esac
  done
  IFS="$OIFS"
  if [ ".$prev" != . ]; then
      echo "cache-config:Error: missing argument to --`echo $prev | sed 's/_/-/g'`" 1>&2
      exit 1
  fi
  if [ ".$output" != . ]; then
      if [ ".$all" = .yes ]; then
          output="$output $output_extra"
      fi
      echo $output
  fi
  
  Index: ossp-pkg/cache/cache.c
  ============================================================
  $ cvs update -p -r1.1 cache.c
  /*
  **  cache - OSSP Caching Library
  **  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP cache, a Caching library which
  **  can be found at http://www.ossp.org/pkg/cache/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  cache.c: library implementation
  */
  
  /* include optional Autoconf header */
  #ifdef HAVE_CONFIG_H
  #include "config.h"
  #endif
  
  /* include system API headers */
  #include <stdio.h>       /* for "s[n]printf()" */
  
  /* include own API header */
  #include "cache.h"
  
  /* boolean values */
  #ifndef FALSE
  #define FALSE (0)
  #endif
  #ifndef TRUE
  #define TRUE  (!FALSE)
  #endif
  
  Index: ossp-pkg/cache/cache.h
  ============================================================
  $ cvs update -p -r1.1 cache.h
  /*
  **  cache - OSSP Caching Library
  **  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP cache, a Caching library which
  **  can be found at http://www.ossp.org/pkg/cache/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  cache.h: library API
  */
  
  #ifndef __CACHE_H__
  #define __CACHE_H__
  
  #endif /* __CACHE_H__ */
  
  Index: ossp-pkg/cache/cache.pod
  ============================================================
  $ cvs update -p -r1.1 cache.pod
  ##
  ##  cache - OSSP Caching Library
  ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  ##
  ##  This file is part of OSSP cache, a Caching library which
  ##  can be found at http://www.ossp.org/pkg/cache/.
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  cache.pod: socket abstraction library manual page
  ##
  
  =pod
  
  =head1 NAME
  
  B<OSSP cache> - Caching Library
  
  =head1 SYNOPSIS
  
  =head1 DESCRIPTION
  
  B<OSSP cache> is ...
  
  =head1 SEE ALSO
  
  ...
  
  =head1 HISTORY
  
  B<OSSP cache> was invented in Januar 2002 by Ralf S. Engelschall for use
  inside the OSSP project.
  
  =head1 AUTHORS
  
   Ralf S. Engelschall
   rse@engelschall.com
   www.engelschall.com
  
  =cut
  
  Index: ossp-pkg/cache/cache_test.c
  ============================================================
  $ cvs update -p -r1.1 cache_test.c
  /*
  **  cache - OSSP Caching Library
  **  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP cache, a Caching library which
  **  can be found at http://www.ossp.org/pkg/cache/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  cache_test.c: test suite
  */
  
  int main(int argc, char *argv[])
  {
      return 0;
  }
  
  Index: ossp-pkg/cache/configure.ac
  ============================================================
  $ cvs update -p -r1.1 configure.ac
  dnl ##
  dnl ##  cache - OSSP Caching Library
  dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  dnl ##
  dnl ##  This file is part of OSSP cache, a Caching library which
  dnl ##  can be found at http://www.ossp.org/pkg/cache/.
  dnl ##
  dnl ##  Permission to use, copy, modify, and distribute this software for
  dnl ##  any purpose with or without fee is hereby granted, provided that
  dnl ##  the above copyright notice and this permission notice appear in all
  dnl ##  copies.
  dnl ##
  dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  dnl ##  SUCH DAMAGE.
  dnl ##
  dnl ##  configure.ac: GNU Autoconf source script
  dnl ##
  
  AC_PREREQ(2.52)
  AC_REVISION(1.0)
  AC_INIT(README)
  
  AC_DIVERT_PUSH(NOTICE)
  V=`./shtool version -l txt -d long VERSION`
  ./shtool echo -e "Configuring %BOSSP cache%b (Caching Library), Version %B${V}%b"
  AC_DIVERT_POP()
  
  AC_SET_MAKE
  AC_PROG_CC
  AC_CHECK_DEBUGGING
  
  sinclude(libtool.m4)
  AC_PROG_LIBTOOL
  
  AC_CONFIG_HEADERS(config.h)
  AC_CONFIG_FILES(Makefile cache-config)
  AC_OUTPUT
  
  chmod a+x cache-config
  
  Index: ossp-pkg/cache/devtool
  ============================================================
  $ cvs update -p -r1.1 devtool
  #!/bin/sh
  ##
  ##  devtool -- Development Tool
  ##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  if [ $# -eq 0 ]; then
      echo "devtool:USAGE: devtool <command> [<arg> ...]" 1>&2
      exit 1
  fi
  
  cmd="$1"
  shift
  
  devtoolfunc="./devtool.func"
  
  if [ ! -f devtool.conf ]; then
      echo "devtool:ERROR: no devtool.conf in current directory" 1>&2
      exit 1
  fi
  
  cmdline=`grep "^%$cmd" devtool.conf`
  if [ ".$cmdline" = . ]; then
      echo "devtool:ERROR: command $cmd not found in devtool.conf" 1>&2
      exit 1
  fi
  
  if [ ".$TMPDIR" != . ]; then
      tmpdir="$TMPDIR"
  elif [ ".$TEMPDIR" != . ]; then
      tmpdir="$TEMPDIR"
  else
      tmpdir="/tmp"
  fi
  tmpfile="$tmpdir/rc.$$.tmp"
  
  rm -f $tmpfile
  touch $tmpfile
  echo ". $devtoolfunc" >>$tmpfile
  ( sed <devtool.conf -e "1,/^%common/d" -e '/^%.*/,$d'
    sed <devtool.conf -e "1,/^%$cmd/d" -e '/^%.*/,$d' ) |\
  sed -e 's;\([ 	]\)@\([a-zA-Z_][a-zA-Z0-9_]*\);\1devtool_\2;' >>$tmpfile
  
  sh $tmpfile "$@"
  
  rm -f $tmpfile >/dev/null 2>&1 || true
  
  Index: ossp-pkg/cache/devtool.conf
  ============================================================
  $ cvs update -p -r1.1 devtool.conf
  ##
  ##  devtool.conf -- Development Tool Configuration
  ##
  
  %autogen
      @autogen shtool   1.5.4 "1.5.*" all
      @autogen libtool  1.4.2 "1.4*"
      @autogen autoconf 2.52  "2.5.*"
  
  %autoclean
      @autoclean shtool
      @autoclean libtool
      @autoclean autoconf
  
  %configure
      ./configure \
          --prefix=/tmp/sa \
          --disable-shared \
          --enable-debug \
          "$@"
  
  %version
      ./shtool version -l txt -n "OSSP SA" -e VERSION
  
  %dist
      make distclean >/dev/null 2>&1
      ./shtool fixperm -v .
      V=`./shtool version -l txt -d short VERSION`
      ./shtool tarball -o sa-${V}.tar.gz -d sa-${V} -u ossp -g ossp \
                       -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf' -c 'gzip --best' .
  
  Index: ossp-pkg/cache/devtool.func
  ============================================================
  $ cvs update -p -r1.1 devtool.func
  ##
  ##  devtool.func -- Development Tool Functions
  ##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  devtool_require () {
      t="$1"; o="$2"; p="$3"; e="$4"; a="$5"
      v=`($t $o | head -1 | awk "{ print \\\$$p; }") 2>/dev/null`
      if [ ".$v" = . ]; then
          echo "devtool:ERROR: unable to determine version of $t" 1>&2
          exit 1
      fi
      case "$v" in
          $e )
              ;;
          $a )
              echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
              ;;
          * )
              echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
              exit 1
              ;;
      esac
      echo "$v"
  }
  
  devtool_autogen () {
      tool=$1
      shift
      case $tool in
          autoconf )
              autoconf_version=`devtool_require autoconf --version 4 "$1" "$2"`
              echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
              autoconf
              autoheader 2>&1 | grep -v "is unchanged"
              ;;
          libtool )
              libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
              echo "generating (GNU Libtool $libtoolize_version): ltmain.sh, libtool.m4, config.guess, config.sub"
              libtoolize --force --copy >/dev/null 2>&1
              cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
                  sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` libtool.m4
              ;;
          shtool )
              shtoolize_version=`devtool_require shtoolize -v 3 "$1" "$2"`
              echo "generating (GNU Shtool $shtoolize_version): shtool"
              shift
              shift
              shtoolize -q "$@"
              ;;
      esac
  }
  
  devtool_autoclean () {
      tool=$1
      shift
      case $tool in
          autoconf )
              echo "removing: configure config.h.in"
              rm -f configure config.h.in
              ;;
          libtool )
              echo "removing: ltmain.sh libtool.m4 config.guess config.sub"
              rm -f ltmain.sh libtool.m4 config.guess config.sub
              ;;
          shtool )
              echo "removing: shtool"
              rm -f shtool
              ;;
      esac
  }
  

From ossp-cvs-owner@ossp.org  Wed Jan  9 12:17:21 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 21069764D1; Wed,  9 Jan 2002 12:17:21 +0100 (CET)
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var_test.c
Message-Id: <20020109111721.21069764D1@mail.ossp.org>
Date: Wed,  9 Jan 2002 12:17:21 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   09-Jan-2002 12:17:21
  Branch: HEAD                             Handle: 2002010911172000

  Modified files:
    ossp-pkg/var            var_test.c

  Log:
    Fixed a test case where the expected result was incorrect. Thus, the
    test didn't not fail even though search_and_replace() contained a bug.

  Summary:
    Revision    Changes     Path
    1.31        +1  -1      ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 var_test.c
  --- ossp-pkg/var/var_test.c	2 Jan 2002 17:12:18 -0000	1.30
  +++ ossp-pkg/var/var_test.c	9 Jan 2002 11:17:20 -0000	1.31
  @@ -159,7 +159,7 @@
           { "${HOME:s/g(res)s/x\\1x/g}",    "/home/rexresxion-tests"                         },
           { "${HOME:s/(s+)/_\\1_/g}",       "/home/regre_ss_ion-te_s_t_s_"                   },
           { "${HOME:s/\\x65/\\x45/g}",      "/homE/rEgrEssion-tEsts"                         },
  -        { "${HOME:s/(s*)/x\\1X/g}",       "xXxXxXxXxXxXxXxXxXxXxXxssXxXxXxXxXxXxXxsXxXxsX" },
  +        { "${HOME:s/(s*)/x\\1X/g}",       "xX/xXhxXoxXmxXexX/xXrxXexXgxXrxXexssXxXixXoxXnxX-xXtxXexsXxXtxsX" },
           { "${HOME:s/./\\\\/g}",           "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"   },
           { "${ARRAY[1]}",                  "entry1",                                        },
           { "${ARRAY[5+4*2-1]}",            "${ARRAY[5+4*2-1]}",                             },

From ossp-cvs-owner@ossp.org  Wed Jan  9 12:23:02 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3B975764D1; Wed,  9 Jan 2002 12:23:02 +0100 (CET)
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var_test.c
Message-Id: <20020109112302.3B975764D1@mail.ossp.org>
Date: Wed,  9 Jan 2002 12:23:02 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   09-Jan-2002 12:23:02
  Branch: HEAD                             Handle: 2002010911230100

  Modified files:
    ossp-pkg/var            var_test.c

  Log:
    Added test case that verifies the correct behavior of
    search_and_replace() when zero-length matches occur.

  Summary:
    Revision    Changes     Path
    1.32        +17 -15     ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 var_test.c
  --- ossp-pkg/var/var_test.c	9 Jan 2002 11:17:20 -0000	1.31
  +++ ossp-pkg/var/var_test.c	9 Jan 2002 11:23:01 -0000	1.32
  @@ -92,21 +92,22 @@
   int main(int argc, char **argv)
   {
       const struct variable vars[] = {
  -        { "HOME",   0, "/home/regression-tests" },
  -        { "OSTYPE", 0, "regression-os" },
  -        { "TERM",   0, "regression-term" },
  -        { "FOO",    0, "os" },
  -        { "BAR",    0, "type" },
  -        { "EMPTY",  0, "" },
  -        { "ARRAY",  0, "entry0" },
  -        { "ARRAY",  1, "entry1" },
  -        { "ARRAY",  2, "entry2" },
  -        { "ARRAY",  3, "entry3" },
  -        { "HEINZ",  0, "heinz0" },
  -        { "HEINZ",  1, "heinz1" },
  -        { "NUMBER", 0, "+2" },
  -        { "NUMEXP", 0, "((16)%5)" },
  -        { NULL,     0, NULL }
  +        { "ARRAY",     0, "entry0" },
  +        { "ARRAY",     1, "entry1" },
  +        { "ARRAY",     2, "entry2" },
  +        { "ARRAY",     3, "entry3" },
  +        { "BAR",       0, "type" },
  +        { "EMPTY",     0, "" },
  +        { "FOO",       0, "os" },
  +        { "HEINZ",     0, "heinz0" },
  +        { "HEINZ",     1, "heinz1" },
  +        { "HOME",      0, "/home/regression-tests" },
  +        { "MULTILINE", 0, "line1\nline2\n" },
  +        { "NUMBER",    0, "+2" },
  +        { "NUMEXP",    0, "((16)%5)" },
  +        { "OSTYPE",    0, "regression-os" },
  +        { "TERM",      0, "regression-term" },
  +        { NULL,        0, NULL }
           };
   
       const struct test_case tests[] = {
  @@ -177,6 +178,7 @@
           { "[${ARRAY[#+1]}-]",             "entry1-entry2-entry3-"                          },
           { "-[${ARRAY[#]}:]{1,$NUMBER}-",  "-entry1:entry2:-"                               },
           { "-[${ARRAY[#]}:]{1,3,5}-",      "-entry1::-"                                     },
  +        { "${MULTILINE:s/^/ | /g}",       " | line1\n | line2\n"                           },
           {
           "[${ARRAY}:${ARRAY[#]}-]",
           "entry0:entry0-entry0:entry1-entry0:entry2-entry0:entry3-"

From ossp-cvs-owner@ossp.org  Wed Jan  9 12:27:08 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 086AC764D1; Wed,  9 Jan 2002 12:27:07 +0100 (CET)
From: "Peter Simons" <simons@computer.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Message-Id: <20020109112707.086AC764D1@mail.ossp.org>
Date: Wed,  9 Jan 2002 12:27:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Simons
  Root:   /e/ossp/cvs                      Email:  simons@computer.org
  Module: ossp-pkg                         Date:   09-Jan-2002 12:27:07
  Branch: HEAD                             Handle: 2002010911270700

  Modified files:
    ossp-pkg/var            var.c

  Log:
    - Compile regular expressions with REG_NEWLINE flag so that '^' and
      '$' match in the middle of the string where appropriate.
    
    - Fixed incorrect results of search_and_replace() with zero-length
      matches, such as '^'.

  Summary:
    Revision    Changes     Path
    1.59        +22 -6      ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.58 -r1.59 var.c
  --- ossp-pkg/var/var.c	2 Jan 2002 17:12:18 -0000	1.58
  +++ ossp-pkg/var/var.c	9 Jan 2002 11:27:07 -0000	1.59
  @@ -1272,7 +1272,7 @@
   
           /* Compile the pattern. */
   
  -        rc = regcomp(&preg, tmp.begin, REG_EXTENDED|((case_insensitive)?REG_ICASE:0));
  +        rc = regcomp(&preg, tmp.begin, REG_NEWLINE | REG_EXTENDED|((case_insensitive)?REG_ICASE:0));
           tokenbuf_free(&tmp);
           if (rc != 0) {
               tokenbuf_free(&mydata);
  @@ -1287,9 +1287,8 @@
                   regexec_flag = 0;
               else
                   regexec_flag = REG_NOTBOL;
  -            if (regexec
  -                (&preg, p, sizeof(pmatch) / sizeof(regmatch_t), pmatch,
  -                 regexec_flag) == REG_NOMATCH) {
  +            if (regexec(&preg, p, sizeof(pmatch) / sizeof(regmatch_t), pmatch, regexec_flag) == REG_NOMATCH ||
  +                p + pmatch[0].rm_so == mydata.end) {
                   tokenbuf_append(&tmp, p, mydata.end - p);
                   break;
               } else {
  @@ -1309,11 +1308,28 @@
                       tokenbuf_free(&myreplace);
                       return VAR_ERR_OUT_OF_MEMORY;
                   } else {
  -                    p += (pmatch[0].rm_eo > 0) ? pmatch[0].rm_eo : 1;
  +                    p += pmatch[0].rm_eo;
  +                    if (pmatch[0].rm_eo - pmatch[0].rm_so == 0)
  +                        {
  +                        if (!tokenbuf_append(&tmp, p, 1))
  +                            {
  +                            regfree(&preg);
  +                            tokenbuf_free(&tmp);
  +                            tokenbuf_free(&mydata);
  +                            tokenbuf_free(&myreplace);
  +                            return VAR_ERR_OUT_OF_MEMORY;
  +                            }
  +                        ++p;
  +                        }
                       tokenbuf_free(&myreplace);
                   }
                   if (!global) {
  -                    tokenbuf_append(&tmp, p, mydata.end - p);
  +                    if (!tokenbuf_append(&tmp, p, mydata.end - p)) {
  +                        regfree(&preg);
  +                        tokenbuf_free(&tmp);
  +                        tokenbuf_free(&mydata);
  +                        return VAR_ERR_OUT_OF_MEMORY;
  +                    }
                       break;
                   }
               }

From ossp-cvs-owner@ossp.org  Wed Jan  9 13:39:15 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AA756764D1; Wed,  9 Jan 2002 13:39:15 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cache aclocal.m4
Message-Id: <20020109123915.AA756764D1@mail.ossp.org>
Date: Wed,  9 Jan 2002 13:39:15 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   09-Jan-2002 13:39:15
  Branch: HEAD                             Handle: 2002010912391500

  Modified files:
    ossp-pkg/cache          aclocal.m4

  Log:
    File header had wrong project name.

  Summary:
    Revision    Changes     Path
    1.2         +6  -6      ossp-pkg/cache/aclocal.m4
  ____________________________________________________________________________

  Index: ossp-pkg/cache/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 aclocal.m4
  --- ossp-pkg/cache/aclocal.m4	9 Jan 2002 10:44:28 -0000	1.1
  +++ ossp-pkg/cache/aclocal.m4	9 Jan 2002 12:39:15 -0000	1.2
  @@ -1,11 +1,11 @@
   dnl ##
  -dnl ##  SA - OSSP Socket Abstraction Library
  -dnl ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  cache - OSSP Caching Library
  +dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
  -dnl ##  This file is part of OSSP SA, a socket abstraction library which
  -dnl ##  can be found at http://www.ossp.org/pkg/sa/.
  +dnl ##  This file is part of OSSP cache, a Caching library which
  +dnl ##  can be found at http://www.ossp.org/pkg/cache/.
   dnl ##
   dnl ##  Permission to use, copy, modify, and distribute this software for
   dnl ##  any purpose with or without fee is hereby granted, provided that

From ossp-cvs-owner@ossp.org  Wed Jan  9 14:34:43 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0BEFF764D1; Wed,  9 Jan 2002 14:34:43 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cache cache-config.in devtool.conf
Message-Id: <20020109133443.0BEFF764D1@mail.ossp.org>
Date: Wed,  9 Jan 2002 14:34:43 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   09-Jan-2002 14:34:42
  Branch: HEAD                             Handle: 2002010913344200

  Modified files:
    ossp-pkg/cache          cache-config.in devtool.conf

  Log:
    More build configuration fixes.

  Summary:
    Revision    Changes     Path
    1.2         +3  -2      ossp-pkg/cache/cache-config.in
    1.2         +1  -1      ossp-pkg/cache/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/cache/cache-config.in
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 cache-config.in
  --- ossp-pkg/cache/cache-config.in	9 Jan 2002 10:44:28 -0000	1.1
  +++ ossp-pkg/cache/cache-config.in	9 Jan 2002 13:34:42 -0000	1.2
  @@ -26,7 +26,7 @@
   ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   ##  SUCH DAMAGE.
   ##
  -##  cache-config.in: SA library build utility
  +##  cache-config.in: cache library build utility
   ##
   
   DIFS=' 	
  @@ -46,7 +46,8 @@
   cache_cflags="@CFLAGS@"
   cache_ldflags="@LDFLAGS@"
   cache_libs="@LIBS@"
  -cache_version="@SA_VERSION_STR@"
  +## FIXME! Should be CACHE or cache?
  +cache_version="@CACHE_VERSION_STR@"
   
   help=no
   version=no
  Index: ossp-pkg/cache/devtool.conf
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.conf
  --- ossp-pkg/cache/devtool.conf	9 Jan 2002 10:44:28 -0000	1.1
  +++ ossp-pkg/cache/devtool.conf	9 Jan 2002 13:34:42 -0000	1.2
  @@ -20,7 +20,7 @@
           "$@"
   
   %version
  -    ./shtool version -l txt -n "OSSP SA" -e VERSION
  +    ./shtool version -l txt -n "OSSP cache" -e VERSION
   
   %dist
       make distclean >/dev/null 2>&1

From ossp-cvs-owner@ossp.org  Wed Jan  9 14:36:42 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DE4A3764D1; Wed,  9 Jan 2002 14:36:41 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cache cache.pod
Message-Id: <20020109133641.DE4A3764D1@mail.ossp.org>
Date: Wed,  9 Jan 2002 14:36:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   09-Jan-2002 14:36:41
  Branch: HEAD                             Handle: 2002010913364100

  Modified files:
    ossp-pkg/cache          cache.pod

  Log:
    Cleanup.

  Summary:
    Revision    Changes     Path
    1.2         +2  -2      ossp-pkg/cache/cache.pod
  ____________________________________________________________________________

  Index: ossp-pkg/cache/cache.pod
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 cache.pod
  --- ossp-pkg/cache/cache.pod	9 Jan 2002 10:44:28 -0000	1.1
  +++ ossp-pkg/cache/cache.pod	9 Jan 2002 13:36:41 -0000	1.2
  @@ -25,7 +25,7 @@
   ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   ##  SUCH DAMAGE.
   ##
  -##  cache.pod: socket abstraction library manual page
  +##  cache.pod: library manual page
   ##
   
   =pod
  @@ -46,7 +46,7 @@
   
   =head1 HISTORY
   
  -B<OSSP cache> was invented in Januar 2002 by Ralf S. Engelschall for use
  +B<OSSP cache> was invented in January 2002 by Ralf S. Engelschall for use
   inside the OSSP project.
   
   =head1 AUTHORS

From ossp-cvs-owner@ossp.org  Wed Jan  9 14:44:51 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 62AB3764D1; Wed,  9 Jan 2002 14:44:51 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cache TODO
Message-Id: <20020109134451.62AB3764D1@mail.ossp.org>
Date: Wed,  9 Jan 2002 14:44:51 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   09-Jan-2002 14:44:51
  Branch: HEAD                             Handle: 2002010913445000

  Modified files:
    ossp-pkg/cache          TODO

  Log:
    Remember flock(2).

  Summary:
    Revision    Changes     Path
    1.2         +1  -0      ossp-pkg/cache/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/cache/TODO
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 TODO
  --- ossp-pkg/cache/TODO	9 Jan 2002 10:44:28 -0000	1.1
  +++ ossp-pkg/cache/TODO	9 Jan 2002 13:44:50 -0000	1.2
  @@ -2,3 +2,4 @@
   TODO
   ----
   
  +File locking might be enforced, or available as a runtime option.

From ossp-cvs-owner@ossp.org  Wed Jan  9 14:51:59 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7B321764D1; Wed,  9 Jan 2002 14:51:59 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.pod
Message-Id: <20020109135159.7B321764D1@mail.ossp.org>
Date: Wed,  9 Jan 2002 14:51:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   09-Jan-2002 14:51:59
  Branch: HEAD                             Handle: 2002010913515900

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.pod

  Log:
    moved a paragraph; better description of acl

  Summary:
    Revision    Changes     Path
    1.35        +11 -9      ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ============================================================
  $ cvs diff -u -r1.34 -r1.35 lmtp2nntp.pod
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.pod	31 Dec 2001 15:15:36 -0000	1.34
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.pod	9 Jan 2002 13:51:59 -0000	1.35
  @@ -72,12 +72,6 @@
   
   =over 4
   
  -=item B<-h> I<header>:<value>
  -
  -Header with value to to be inserted into message before delivery.  This option
  -can be specified more than once.  Useful for specifiying an moderator Email
  -address to all outgoing news messages by applying an "Approved:" header.
  -
   =item B<-C> I<childsmax>
   
   Childs the daemon spawns at maximum. Default is 10.
  @@ -112,9 +106,11 @@
   Omitting the wholly option defaults to 0.0.0.0/0 which allows access from
   everywhere.  It is possible to specify both inclusive and exclusive addresses,
   the latter have to prefixed with an exclamation mark. In order to pass the ACL
  -a client must match any inclusion and not match any exclusion. If you do not
  -specify any inclusions a fake inclusion of 0.0.0.0/0 is appended internally.
  -Any addr can be a name to be resolved first.
  +a client must match any inclusion and not match any exclusion. If you specify
  +exclusions only a fake inclusion of 0.0.0.0/0 is appended internally.  Any
  +addr can be a name to be resolved first.
  +
  +FIXME should we resolv on startup only or for every access or using dns ttl
   
   =item B<-b> I<addr>[I<:port>]|C<->|I<path[:perms]> (LMTP daemon bind)
   
  @@ -158,6 +154,12 @@
   C<envelope> and C<header> mode groups must still be specified as command line
   arguments. However, in these modes the command line arguments are filters
   representing allowed groups. Filters can be specified as wildmat's.
  +
  +=item B<-h> I<header>:<value>
  +
  +Header with value to to be inserted into message before delivery.  This option
  +can be specified more than once.  Useful for specifiying an moderator Email
  +address to all outgoing news messages by applying an "Approved:" header.
   
   =item B<-l> I<level>[:I<logfile>]
   

From ossp-cvs-owner@ossp.org  Wed Jan  9 14:54:26 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 76DD5764D1; Wed,  9 Jan 2002 14:54:26 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp Makefile.in example.conf lmtp2nntp_conf...
Message-Id: <20020109135426.76DD5764D1@mail.ossp.org>
Date: Wed,  9 Jan 2002 14:54:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   09-Jan-2002 14:54:26
  Branch: HEAD                             Handle: 2002010913542500

  Added files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c lmtp2nntp_config.h
  Modified files:
    ossp-pkg/lmtp2nntp      Makefile.in example.conf lmtp2nntp_dotconf.c
                            lmtp2nntp_dotconf.h lmtp2nntp_main.c

  Log:
    configfile example with sections and evaluation of code to parse it

  Summary:
    Revision    Changes     Path
    1.35        +3  -3      ossp-pkg/lmtp2nntp/Makefile.in
    1.2         +57 -43     ossp-pkg/lmtp2nntp/example.conf
    1.1         +195 -0     ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.1         +28 -0      ossp-pkg/lmtp2nntp/lmtp2nntp_config.h
    1.2         +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_dotconf.c
    1.2         +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_dotconf.h
    1.4         +4  -0      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.34 -r1.35 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	7 Jan 2002 13:15:59 -0000	1.34
  +++ ossp-pkg/lmtp2nntp/Makefile.in	9 Jan 2002 13:54:25 -0000	1.35
  @@ -44,9 +44,9 @@
   POD2MAN     = pod2man
   
   PROG = lmtp2nntp
  -HDRS = lmtp2nntp_global.h lmtp2nntp_daemon.h lmtp2nntp_lmtp.h lmtp2nntp_nntp.h lmtp2nntp_argz.h lmtp2nntp_shpat.h lmtp2nntp_msg.h lmtp2nntp_popt.h
  -SRCS = lmtp2nntp_main.c lmtp2nntp_daemon.c lmtp2nntp_lmtp.c lmtp2nntp_nntp.c lmtp2nntp_argz.c lmtp2nntp_shpat.c lmtp2nntp_msg.c lmtp2nntp_popt.c lmtp2nntp_version.c 
  -OBJS = lmtp2nntp_main.o lmtp2nntp_daemon.o lmtp2nntp_lmtp.o lmtp2nntp_nntp.o lmtp2nntp_argz.o lmtp2nntp_shpat.o lmtp2nntp_msg.o lmtp2nntp_popt.o lmtp2nntp_version.o
  +HDRS = lmtp2nntp_global.h lmtp2nntp_daemon.h lmtp2nntp_lmtp.h lmtp2nntp_nntp.h lmtp2nntp_argz.h lmtp2nntp_shpat.h lmtp2nntp_msg.h lmtp2nntp_popt.h lmtp2nntp_dotconf.h lmtp2nntp_config.h
  +SRCS = lmtp2nntp_main.c   lmtp2nntp_daemon.c lmtp2nntp_lmtp.c lmtp2nntp_nntp.c lmtp2nntp_argz.c lmtp2nntp_shpat.c lmtp2nntp_msg.c lmtp2nntp_popt.c lmtp2nntp_dotconf.c lmtp2nntp_config.c lmtp2nntp_version.c 
  +OBJS = lmtp2nntp_main.o   lmtp2nntp_daemon.o lmtp2nntp_lmtp.o lmtp2nntp_nntp.o lmtp2nntp_argz.o lmtp2nntp_shpat.o lmtp2nntp_msg.o lmtp2nntp_popt.o lmtp2nntp_dotconf.o lmtp2nntp_config.o lmtp2nntp_version.o
   
   SUBDIRS = @SUBDIR_STR@ @SUBDIR_L2@ @SUBDIR_SA@ @SUBDIR_VAR@
   
  Index: ossp-pkg/lmtp2nntp/example.conf
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 example.conf
  --- ossp-pkg/lmtp2nntp/example.conf	9 Jan 2002 07:42:29 -0000	1.1
  +++ ossp-pkg/lmtp2nntp/example.conf	9 Jan 2002 13:54:25 -0000	1.2
  @@ -1,49 +1,63 @@
   
   # 
  -# LMTP2NNTP exsample.conf
  +# LMTP2NNTP example.conf
   # 
   
  -        ### DAEMON ###
  +#   include         "sampleconfig.two"              #    -i aka --include
   
  -childsmax       10                              #see -C aka --childsmax
  -daemonize       yes                             #see -D aka --daemonize
  -                                                #    -K aka --kill is not available in the configfile
  -pidfile         "/tmp/pid"                      #see -P aka --pidfile
  -                                                #    -V is obsolete since v1.2; remove the "buffer" channel from l2spec
  -acl             10/8                            #see -a aka --acl
  -acl             172.16/12
  -acl             192.168/16
  -acl             127.0.0.1/32     
  -bind            127.0.0.1:12345                 #see -b aka --bind, use IPv4:port
  -#bind           "/tmp/uds:600"                  #    UNIX domain socket path:permissions 
  -
  -        ### GATEWAY ###
  -
  -client          127.0.0.2                       #see -c aka --client
  -destination     news.example.com                #see -d aka --destination
  -groupmode       envelope                        #see -g aka --groupmode
  -headervalue     X-gateway "lmtp2nntp gateway"   #see -h aka --headervalue
  -include         "sampleconfig.two"              #    -i aka --include
  -                                                #    -l is obsolete since v1.2, see l2spec
  -
  -l2spec          prefix(prefix="%%b %%d %%H:%%M:%%S <%%L> lmtp2nntp[%%P]: ",timezone=local) \
  -                   -> buffer(size=65536) \
  -                   -> file(path=%s,append=1,perm=%d) \
  -                                                #    -l aka --l2spec
  -
  -mailfrom        "any.*@example\.org"            #see -m aka --mailfrom
  -nodename        "gateway.example.com"           #see -n aka --nodename
  -operationmode   post                            #see -o aka --operationmode
  -restrictheader  "Cc: j\.doe@example\.org"       #see -r aka --restrictheader
  -size            555000                          #see -s aka --size
  -timeout         lmtp:accept  0                  #see -t aka --timeout
  -timeout         lmtp:read    10 
  -timeout         lmtp:write   10 
  -timeout         nntp:connect 360 
  -timeout         nntp:read    60 
  -timeout         nntp:write   60 
  -uid             gate                            #see -u aka --uid
  -                                                #    -v aka --version is not available in the configfile
  -newsgroup       "test"
  -newsgroup       "alt.test"                      #see man page for information about newsgroup
  +<daemon>
  +    childsmax       10                              #see -C aka --childsmax
  +    daemonize       yes                             #see -D aka --daemonize
  +                                                    #    -K aka --kill is not available in the configfile
  +    pidfile         "/tmp/pid"                      #see -P aka --pidfile
  +    acl             10/8                            #see -a aka --acl
  +    acl             172.16/12
  +    acl             192.168/16
  +    acl             127.0.0.1/32     
  +    bind            127.0.0.1:12345                 #see -b aka --bind, use IPv4:port
  +    #bind           "/tmp/uds:600"                  #    UNIX domain socket path:permissions 
  +</daemon>
  +
  +<server> #LMTP
  +    timeoutaccept   0                               #see -t aka --timeout
  +    timeoutread     10 
  +    timeoutwrite    10 
  +    size            555000                          #see -s aka --size
  +    mailfrom        "any.*@example\.org"            #see -m aka --mailfrom
  +    nodename        "gateway.example.com"           #see -n aka --nodename
  +</server>
  +
  +<client> #NNTP, multiple sections allowed
  +    client          127.0.0.2                       #see -c aka --client
  +    destination     news.example.com                #see -d aka --destination
  +    operationmode   post                            #see -o aka --operationmode
  +    timeoutconnect  360 
  +    timeoutread     60 
  +    timeoutwrite    60 
  +</client>
  +
  +<gateway> #main and globals
  +    groupmode       envelope                        #see -g aka --groupmode
  +
  +                                                    #    -l is obsolete since v1.2, see l2spec
  +                                                    #    -V is obsolete since v1.2; remove the "buffer" channel from l2spec
  +    l2spec          prefix(prefix="%%b %%d %%H:%%M:%%S <%%L> lmtp2nntp[%%P]: ",timezone=local) \
  +                       -> buffer(size=65536) \
  +                       -> file(path=%s,append=1,perm=%d) \
  +                                                    #    -l aka --l2spec
  +
  +    uid             gate                            #see -u aka --uid
  +                                                    #    -v aka --version is not available in the configfile
  +    newsgroup       "test"
  +    newsgroup       "alt.test"                      #see man page for information about newsgroup
  +</gateway>
  +
  +<message>
  +    headervalue     X-gateway "lmtp2nntp gateway"   #see -h aka --headervalue
  +    restrictheader  "Cc: j\.doe@example\.org"       #see -r aka --restrictheader
  +</message>
  +
  +<server>
  +    client          1.2.3.4 #must produce an error
  +</server>
   
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs update -p -r1.1 lmtp2nntp_config.c
  /*
  **  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  **  mailer which forwards mails as Usenet news articles via NNTP.
  **  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  **
  **  This program is free software; you can redistribute it and/or
  **  modify it under the terms of the GNU General Public  License
  **  as published by the Free Software Foundation; either version
  **  2.0 of the License, or (at your option) any later version.
  **
  **  This program is distributed in the hope that it will be useful,
  **  but WITHOUT ANY WARRANTY; without even the implied warranty of
  **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  **  General Public License for more details.
  **
  **  You should have received a copy of the GNU General Public License
  **  along with this file; if not, write to the Free Software
  **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  **  USA, or contact the OSSP project <ossp@ossp.org>.
  **
  **  lmtp2nntp.c: LMTP to NNTP configuration parsing
  */
  
  #include <stdlib.h>
  #include <stdio.h>
  // #include <unistd.h>
  // #include <errno.h>
  // #include <string.h>
  // #include <fcntl.h>
  // #include <sys/utsname.h>
  // #include <sys/time.h>
  // #include <sys/types.h>
  // #include <sys/wait.h>
  // #include <sys/stat.h>
  // #include <signal.h>
  // #include <pwd.h>
  
  /* third party (included) */
  // #include "lmtp2nntp_argz.h"
  // #include "lmtp2nntp_shpat.h"
  // #include "lmtp2nntp_daemon.h"
  // #include "lmtp2nntp_popt.h"
  #include "lmtp2nntp_dotconf.h"
  
  /* third party (linked in) */
  // #include "str.h"
  // #include "l2.h"
  // #include "var.h"
  
  /* library version check (compile-time) */
  #define  L2_VERSION_HEX_REQ 0x001200
  #define  L2_VERSION_STR_REQ "0.1.0"
  #define STR_VERSION_HEX_REQ 0x009206
  #define STR_VERSION_STR_REQ "0.9.6"
  #ifdef L2_VERSION_HEX
  #if L2_VERSION_HEX < L2_VERSION_HEX_REQ
  #error "require a newer version of OSSP L2"
  #endif
  #endif
  #ifdef STR_VERSION_HEX
  #if STR_VERSION_HEX < STR_VERSION_HEX_REQ
  #error "require a newer version of OSSP Str"
  #endif
  #endif
  
  /* own headers */
  #include "lmtp2nntp_global.h"
  #ifdef HAVE_CONFIG_H
  #include "config.h"
  #endif
  #if defined(HAVE_DMALLOC_H) && defined(DMALLOC)
  #include "dmalloc.h"
  #endif
  #include "lmtp2nntp_lmtp.h"
  #include "lmtp2nntp_nntp.h"
  #include "lmtp2nntp_msg.h"
  #include "sa.h"
  #define _LMTP2NNTP_VERSION_C_AS_HEADER_
  #include "lmtp2nntp_version.c"
  #undef  _LMTP2NNTP_VERSION_C_AS_HEADER_
  
  #ifndef FALSE
  #define FALSE (1 != 1)
  #endif
  #ifndef TRUE
  #define TRUE (!FALSE)
  #endif
  
  #ifndef NUL
  #define NUL '\0'
  #endif
  
  const char *foo(command_t *, context_t *);
  int bar(configfile_t *, int, long, const char *);
  const char *quux(command_t *, unsigned long);
  
  const char *foo(command_t *cmd, context_t *_ctx)
  {
      int *foodata = (int *)_ctx;
      int i;
      printf("DEBUG: callbck %s:%ld: %s:", cmd->configfile->filename, cmd->configfile->line, cmd->name);
      for (i = 0; i < cmd->arg_count; i++)
          ;//printf("[%d=***%s***] ", i, cmd->data.list[i]);
      printf("---%lx---%d---", foodata, (*foodata)++);
      printf("\n");
      return NULL;
  }
  
  int bar(configfile_t *configfile, int type, long dc_errno, const char *msg)
  {
      printf("DEBUG: handler type=%d, dc_errno=%ld, msg=***%s***\n", type, dc_errno, msg);
      return 0; /* 0=continue, 1=abort */
  }
  
  const char *quux(command_t *cmd, unsigned long mask)
  {
      printf("DEBUG: checker %s:%ld: %s: ", cmd->configfile->filename, cmd->configfile->line, cmd->name);
      printf("[mask=%lx]", mask);
      printf("\n");
      if ((strcmp(cmd->name, "client") == 0) && (mask = 4))
          return "Nasenbaer!";
      return NULL;
  }
  
  enum configcontext
  {
      CTX_DAEMON  = 1<<0,
      CTX_SERVER  = 1<<1,
      CTX_CLIENT  = 1<<2,
      CTX_GATEWAY = 1<<3,
      CTX_MESSAGE = 1<<4
  };
  
  
  void dotconftest(void)
  {
      configfile_t *configfile;
      static int foodata;
      static const configoption_t options[] = {
          { "<daemon>",       ARG_NONE, foo, NULL, CTX_ALL     },
          { "childsmax",      ARG_STR,  foo, NULL, CTX_DAEMON  },
          { "daemonize",      ARG_STR,  foo, NULL, CTX_DAEMON  },
          { "pidfile",        ARG_STR,  foo, NULL, CTX_DAEMON  },
          { "acl",            ARG_STR,  foo, NULL, CTX_DAEMON  },
          { "bind",           ARG_STR,  foo, NULL, CTX_DAEMON  },
          { "</daemon>",      ARG_NONE, foo, NULL, CTX_DAEMON  },
          { "<server>",       ARG_NONE, foo, NULL, CTX_ALL     },
          { "timeoutaccept",  ARG_STR,  foo, NULL, CTX_SERVER  },
          { "timeoutread",    ARG_STR,  foo, NULL, CTX_SERVER  },
          { "timeoutwrite",   ARG_STR,  foo, NULL, CTX_SERVER  },
          { "size",           ARG_STR,  foo, NULL, CTX_SERVER  },
          { "mailfrom",       ARG_STR,  foo, NULL, CTX_SERVER  },
          { "nodename",       ARG_STR,  foo, NULL, CTX_SERVER  },
          { "</server>",      ARG_NONE, foo, NULL, CTX_SERVER  },
          { "<client>",       ARG_NONE, foo, NULL, CTX_ALL     },
          { "client",         ARG_STR,  foo, NULL, CTX_CLIENT  },
          { "destination",    ARG_STR,  foo, NULL, CTX_CLIENT  },
          { "operationmode",  ARG_STR,  foo, NULL, CTX_CLIENT  },
          { "timeoutconnect", ARG_STR,  foo, NULL, CTX_CLIENT  },
          { "timeoutread",    ARG_STR,  foo, NULL, CTX_CLIENT  },
          { "timeoutwrite",   ARG_STR,  foo, NULL, CTX_CLIENT  },
          { "</client>",      ARG_NONE, foo, NULL, CTX_CLIENT  },
          { "<gateway>",      ARG_NONE, foo, NULL, CTX_ALL     },
          { "groupmode",      ARG_STR,  foo, NULL, CTX_GATEWAY },
          { "l2spec",         ARG_STR,  foo, NULL, CTX_GATEWAY },
          { "uid",            ARG_STR,  foo, NULL, CTX_GATEWAY },
          { "newsgroup",      ARG_STR,  foo, NULL, CTX_GATEWAY },
          { "</gateway>",     ARG_NONE, foo, NULL, CTX_GATEWAY },
          { "<message>",      ARG_NONE, foo, NULL, CTX_ALL     },
          { "headervalue",    ARG_STR,  foo, NULL, CTX_MESSAGE },
          { "restrictheader", ARG_STR,  foo, NULL, CTX_MESSAGE },
          { "</message>",     ARG_NONE, foo, NULL, CTX_MESSAGE },
          LAST_OPTION
      };
  
      foodata = 1000;
      printf("---%lx---%d---", &foodata, foodata);
  
      configfile = dotconf_create("example.conf", options, &foodata, CASE_INSENSITIVE);
      if (!configfile) {
          fprintf(stderr, "Error opening config file\n");
          return;
      }
      configfile->errorhandler = (dotconf_errorhandler_t)bar;
      configfile->contextchecker = (dotconf_contextchecker_t)quux;
  
      if (dotconf_command_loop(configfile) == 0)
          fprintf(stderr, "Error reading config file\n");
  
      dotconf_cleanup(configfile);
  }
  
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.h
  ============================================================
  $ cvs update -p -r1.1 lmtp2nntp_config.h
  /*
  **  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  **  mailer which forwards mails as Usenet news articles via NNTP.
  **  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  **
  **  This program is free software; you can redistribute it and/or
  **  modify it under the terms of the GNU General Public  License
  **  as published by the Free Software Foundation; either version
  **  2.0 of the License, or (at your option) any later version.
  **
  **  This program is distributed in the hope that it will be useful,
  **  but WITHOUT ANY WARRANTY; without even the implied warranty of
  **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  **  General Public License for more details.
  **
  **  You should have received a copy of the GNU General Public License
  **  along with this file; if not, write to the Free Software
  **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  **  USA, or contact the OSSP project <ossp@ossp.org>.
  **
  **  lmtp2nntp.c: LMTP to NNTP configuration parsing
  */
  
  void dotconftest(void);
  
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_dotconf.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 lmtp2nntp_dotconf.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_dotconf.c	31 Dec 2001 11:09:53 -0000	1.1
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_dotconf.c	9 Jan 2002 13:54:25 -0000	1.2
  @@ -63,7 +63,7 @@
   #endif /* !WIN32 */
   
   #include <ctype.h>
  -#include "./dotconf.h"
  +#include "lmtp2nntp_dotconf.h"
   
   static char name[CFG_MAX_OPTION + 1];	/* option name */
   
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_dotconf.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 lmtp2nntp_dotconf.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_dotconf.h	31 Dec 2001 11:09:53 -0000	1.1
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_dotconf.h	9 Jan 2002 13:54:25 -0000	1.2
  @@ -105,7 +105,7 @@
   enum callback_types
   {
   	ERROR_HANDLER = 1,
  -	CONTEXT_CHECKER,
  +	CONTEXT_CHECKER
   };
   
   typedef enum callback_types			callback_types;
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	7 Jan 2002 13:15:59 -0000	1.3
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	9 Jan 2002 13:54:25 -0000	1.4
  @@ -43,6 +43,7 @@
   #include "lmtp2nntp_shpat.h"
   #include "lmtp2nntp_daemon.h"
   #include "lmtp2nntp_popt.h"
  +#include "lmtp2nntp_config.h"
   
   /* third party (linked in) */
   #include "str.h"
  @@ -293,6 +294,7 @@
               "[-b addr[:port]|-|path[:perms]] "
               "[-c addr[:port]] "
               "[-d addr[:port][,addr[:port], ...]] "
  +            "[-f configfile] "
               "[-g groupmode] "
               "[-h header:value] "
               "[-l level[:logfile]] "
  @@ -481,6 +483,8 @@
       struct passwd *sPasswd;
       char         *cpHeadername;
       char         *cpHeadervalue;
  +
  +dotconftest(); return 0; /*FIXME*/
   
       /* drop effective uid/gid priviledges */
       seteuid(getuid());

From ossp-cvs-owner@ossp.org  Wed Jan  9 15:10:07 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 02BCC764D1; Wed,  9 Jan 2002 15:10:06 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cache cache-config.in
Message-Id: <20020109141006.02BCC764D1@mail.ossp.org>
Date: Wed,  9 Jan 2002 15:10:06 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Jan-2002 15:10:06
  Branch: HEAD                             Handle: 2002010914100600

  Modified files:
    ossp-pkg/cache          cache-config.in

  Log:
    CACHE is correct, yes

  Summary:
    Revision    Changes     Path
    1.3         +0  -1      ossp-pkg/cache/cache-config.in
  ____________________________________________________________________________

  Index: ossp-pkg/cache/cache-config.in
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 cache-config.in
  --- ossp-pkg/cache/cache-config.in	9 Jan 2002 13:34:42 -0000	1.2
  +++ ossp-pkg/cache/cache-config.in	9 Jan 2002 14:10:06 -0000	1.3
  @@ -46,7 +46,6 @@
   cache_cflags="@CFLAGS@"
   cache_ldflags="@LDFLAGS@"
   cache_libs="@LIBS@"
  -## FIXME! Should be CACHE or cache?
   cache_version="@CACHE_VERSION_STR@"
   
   help=no

From ossp-cvs-owner@ossp.org  Thu Jan 10 11:29:39 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 31BB4764E3; Thu, 10 Jan 2002 11:29:39 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc README aclocal.m4 autogen.sh config.guess conf...
Message-Id: <20020110102939.31BB4764E3@mail.ossp.org>
Date: Thu, 10 Jan 2002 11:29:39 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   10-Jan-2002 11:29:39
  Branch: HEAD                             Handle: 197001010100001010654977

  Modified files:
    ossp-pkg/rc             README autogen.sh
  Removed files:
    ossp-pkg/rc             aclocal.m4 config.guess config.h.in config.sub
                            ltmain.sh

  Log:
    Build configuration adjustments.

  Summary:
    Revision    Changes     Path
    1.2         +8  -3      ossp-pkg/rc/README
    NONE        +0  -4052   ossp-pkg/rc/aclocal.m4
    1.2         +4  -0      ossp-pkg/rc/autogen.sh
    NONE        +0  -1314   ossp-pkg/rc/config.guess
    NONE        +0  -0      ossp-pkg/rc/config.h.in
    NONE        +0  -1410   ossp-pkg/rc/config.sub
    NONE        +0  -4984   ossp-pkg/rc/ltmain.sh
  ____________________________________________________________________________

  Index: ossp-pkg/rc/README
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 README
  --- ossp-pkg/rc/README	8 Jan 2002 15:47:11 -0000	1.1
  +++ ossp-pkg/rc/README	10 Jan 2002 10:29:37 -0000	1.2
  @@ -3,16 +3,21 @@
     | | | (__ 
     |_|  \___|
   
  -  rc - Runcommand processor
  -  Version 0.9.0 (00-Duc-2002)
  +  OSSP rc - Runcommand processor
  +  Version 0.1.0 (00-Duc-2002)
   
     ABSTRACT
   
  -  The rc Runcommand processor is a Duc.
  +  The OSSP Runcommand processor is a Duc.
   
     COPYRIGHT AND LICENSE
   
     Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +
  +  This file is part of OSSP rc, a Runcommand processor which
  +  can be found at http://www.ossp.org/pkg/rc/.
   
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
    Index: ossp-pkg/rc/autogen.sh
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 autogen.sh
  --- ossp-pkg/rc/autogen.sh	8 Jan 2002 15:47:11 -0000	1.1
  +++ ossp-pkg/rc/autogen.sh	10 Jan 2002 10:29:37 -0000	1.2
  @@ -0,0 +1,4 @@
  +aclocal
  +autoheader
  +automake --add-missing --gnu
  +autoconf
        

From ossp-cvs-owner@ossp.org  Thu Jan 10 11:37:39 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C0C3A764E3; Thu, 10 Jan 2002 11:37:38 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp Makefile.in example.conf lmtp2nntp_conf...
Message-Id: <20020110103738.C0C3A764E3@mail.ossp.org>
Date: Thu, 10 Jan 2002 11:37:38 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   10-Jan-2002 11:37:38
  Branch: HEAD                             Handle: 197001010100001010655458

  Modified files:
    ossp-pkg/lmtp2nntp      Makefile.in example.conf lmtp2nntp_config.c
  Removed files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_dotconf.c lmtp2nntp_dotconf.h

  Log:
    replaced dotconf library with own code and str_token

  Summary:
    Revision    Changes     Path
    1.36        +3  -3      ossp-pkg/lmtp2nntp/Makefile.in
    1.3         +8  -8      ossp-pkg/lmtp2nntp/example.conf
    1.2         +92 -55     ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    NONE        +0  -1311   ossp-pkg/lmtp2nntp/lmtp2nntp_dotconf.c
    NONE        +0  -262    ossp-pkg/lmtp2nntp/lmtp2nntp_dotconf.h
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.35 -r1.36 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	9 Jan 2002 13:54:25 -0000	1.35
  +++ ossp-pkg/lmtp2nntp/Makefile.in	10 Jan 2002 10:37:38 -0000	1.36
  @@ -44,9 +44,9 @@
   POD2MAN     = pod2man
   
   PROG = lmtp2nntp
  -HDRS = lmtp2nntp_global.h lmtp2nntp_daemon.h lmtp2nntp_lmtp.h lmtp2nntp_nntp.h lmtp2nntp_argz.h lmtp2nntp_shpat.h lmtp2nntp_msg.h lmtp2nntp_popt.h lmtp2nntp_dotconf.h lmtp2nntp_config.h
  -SRCS = lmtp2nntp_main.c   lmtp2nntp_daemon.c lmtp2nntp_lmtp.c lmtp2nntp_nntp.c lmtp2nntp_argz.c lmtp2nntp_shpat.c lmtp2nntp_msg.c lmtp2nntp_popt.c lmtp2nntp_dotconf.c lmtp2nntp_config.c lmtp2nntp_version.c 
  -OBJS = lmtp2nntp_main.o   lmtp2nntp_daemon.o lmtp2nntp_lmtp.o lmtp2nntp_nntp.o lmtp2nntp_argz.o lmtp2nntp_shpat.o lmtp2nntp_msg.o lmtp2nntp_popt.o lmtp2nntp_dotconf.o lmtp2nntp_config.o lmtp2nntp_version.o
  +HDRS = lmtp2nntp_global.h lmtp2nntp_daemon.h lmtp2nntp_lmtp.h lmtp2nntp_nntp.h lmtp2nntp_argz.h lmtp2nntp_shpat.h lmtp2nntp_msg.h lmtp2nntp_popt.h lmtp2nntp_config.h
  +SRCS = lmtp2nntp_main.c   lmtp2nntp_daemon.c lmtp2nntp_lmtp.c lmtp2nntp_nntp.c lmtp2nntp_argz.c lmtp2nntp_shpat.c lmtp2nntp_msg.c lmtp2nntp_popt.c lmtp2nntp_config.c lmtp2nntp_version.c 
  +OBJS = lmtp2nntp_main.o   lmtp2nntp_daemon.o lmtp2nntp_lmtp.o lmtp2nntp_nntp.o lmtp2nntp_argz.o lmtp2nntp_shpat.o lmtp2nntp_msg.o lmtp2nntp_popt.o lmtp2nntp_config.o lmtp2nntp_version.o
   
   SUBDIRS = @SUBDIR_STR@ @SUBDIR_L2@ @SUBDIR_SA@ @SUBDIR_VAR@
   
  Index: ossp-pkg/lmtp2nntp/example.conf
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 example.conf
  --- ossp-pkg/lmtp2nntp/example.conf	9 Jan 2002 13:54:25 -0000	1.2
  +++ ossp-pkg/lmtp2nntp/example.conf	10 Jan 2002 10:37:38 -0000	1.3
  @@ -9,13 +9,13 @@
       childsmax       10                              #see -C aka --childsmax
       daemonize       yes                             #see -D aka --daemonize
                                                       #    -K aka --kill is not available in the configfile
  -    pidfile         "/tmp/pid"                      #see -P aka --pidfile
  +    pidfile         /tmp/pid                        #see -P aka --pidfile
       acl             10/8                            #see -a aka --acl
       acl             172.16/12
       acl             192.168/16
       acl             127.0.0.1/32     
       bind            127.0.0.1:12345                 #see -b aka --bind, use IPv4:port
  -    #bind           "/tmp/uds:600"                  #    UNIX domain socket path:permissions 
  +    #bind           /tmp/uds:600                    #    UNIX domain socket path:permissions 
   </daemon>
   
   <server> #LMTP
  @@ -23,8 +23,8 @@
       timeoutread     10 
       timeoutwrite    10 
       size            555000                          #see -s aka --size
  -    mailfrom        "any.*@example\.org"            #see -m aka --mailfrom
  -    nodename        "gateway.example.com"           #see -n aka --nodename
  +    mailfrom        any.*@example\.org              #see -m aka --mailfrom
  +    nodename        gateway.example.com             #see -n aka --nodename
   </server>
   
   <client> #NNTP, multiple sections allowed
  @@ -41,15 +41,15 @@
   
                                                       #    -l is obsolete since v1.2, see l2spec
                                                       #    -V is obsolete since v1.2; remove the "buffer" channel from l2spec
  -    l2spec          prefix(prefix="%%b %%d %%H:%%M:%%S <%%L> lmtp2nntp[%%P]: ",timezone=local) \
  +    l2spec          "prefix(prefix="%%b %%d %%H:%%M:%%S <%%L> lmtp2nntp[%%P]: ",timezone=local) \
                          -> buffer(size=65536) \
  -                       -> file(path=%s,append=1,perm=%d) \
  +                       -> file(path=%s,append=1,perm=%d)" \
                                                       #    -l aka --l2spec
   
       uid             gate                            #see -u aka --uid
                                                       #    -v aka --version is not available in the configfile
  -    newsgroup       "test"
  -    newsgroup       "alt.test"                      #see man page for information about newsgroup
  +    newsgroup       test
  +    newsgroup       alt.test                        #see man page for information about newsgroup
   </gateway>
   
   <message>
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	9 Jan 2002 13:54:25 -0000	1.1
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	10 Jan 2002 10:37:38 -0000	1.2
  @@ -26,6 +26,7 @@
   
   #include <stdlib.h>
   #include <stdio.h>
  +#include <sys/stat.h>
   // #include <unistd.h>
   // #include <errno.h>
   // #include <string.h>
  @@ -43,10 +44,9 @@
   // #include "lmtp2nntp_shpat.h"
   // #include "lmtp2nntp_daemon.h"
   // #include "lmtp2nntp_popt.h"
  -#include "lmtp2nntp_dotconf.h"
   
   /* third party (linked in) */
  -// #include "str.h"
  +#include "str.h"
   // #include "l2.h"
   // #include "var.h"
   
  @@ -93,52 +93,16 @@
   #define NUL '\0'
   #endif
   
  -const char *foo(command_t *, context_t *);
  -int bar(configfile_t *, int, long, const char *);
  -const char *quux(command_t *, unsigned long);
  -
  -const char *foo(command_t *cmd, context_t *_ctx)
  -{
  -    int *foodata = (int *)_ctx;
  -    int i;
  -    printf("DEBUG: callbck %s:%ld: %s:", cmd->configfile->filename, cmd->configfile->line, cmd->name);
  -    for (i = 0; i < cmd->arg_count; i++)
  -        ;//printf("[%d=***%s***] ", i, cmd->data.list[i]);
  -    printf("---%lx---%d---", foodata, (*foodata)++);
  -    printf("\n");
  -    return NULL;
  -}
  -
  -int bar(configfile_t *configfile, int type, long dc_errno, const char *msg)
  -{
  -    printf("DEBUG: handler type=%d, dc_errno=%ld, msg=***%s***\n", type, dc_errno, msg);
  -    return 0; /* 0=continue, 1=abort */
  -}
  -
  -const char *quux(command_t *cmd, unsigned long mask)
  +void die(char *); //FIXME
  +void die(char *msg)
   {
  -    printf("DEBUG: checker %s:%ld: %s: ", cmd->configfile->filename, cmd->configfile->line, cmd->name);
  -    printf("[mask=%lx]", mask);
  -    printf("\n");
  -    if ((strcmp(cmd->name, "client") == 0) && (mask = 4))
  -        return "Nasenbaer!";
  -    return NULL;
  +        printf("ERROR: %s", msg);
  +            exit(-1);
   }
   
  -enum configcontext
  -{
  -    CTX_DAEMON  = 1<<0,
  -    CTX_SERVER  = 1<<1,
  -    CTX_CLIENT  = 1<<2,
  -    CTX_GATEWAY = 1<<3,
  -    CTX_MESSAGE = 1<<4
  -};
  -
  -
   void dotconftest(void)
   {
  -    configfile_t *configfile;
  -    static int foodata;
  +#if 0
       static const configoption_t options[] = {
           { "<daemon>",       ARG_NONE, foo, NULL, CTX_ALL     },
           { "childsmax",      ARG_STR,  foo, NULL, CTX_DAEMON  },
  @@ -175,21 +139,94 @@
           { "</message>",     ARG_NONE, foo, NULL, CTX_MESSAGE },
           LAST_OPTION
       };
  +#endif
   
  -    foodata = 1000;
  -    printf("---%lx---%d---", &foodata, foodata);
  +    const char *filename = "example.conf";
  +    char *cpBuf;
   
  -    configfile = dotconf_create("example.conf", options, &foodata, CASE_INSENSITIVE);
  -    if (!configfile) {
  -        fprintf(stderr, "Error opening config file\n");
  -        return;
  +    {
  +        struct stat sb;
  +        int fd;
  +
  +        if (stat(filename, &sb) == -1)
  +            die("stat");
  +        if ((cpBuf = (char *)malloc((size_t)sb.st_size + 1)) == NULL)
  +            die("malloc");
  +        if ((fd = open(filename, O_RDONLY)) == -1)
  +            die("open");
  +        if (read(fd, (void *)cpBuf, (size_t)sb.st_size) != (ssize_t)sb.st_size)
  +            die("read");
  +        cpBuf[(int)sb.st_size] = '\0';
  +        if (close(fd) == -1)
  +            die("close");
       }
  -    configfile->errorhandler = (dotconf_errorhandler_t)bar;
  -    configfile->contextchecker = (dotconf_contextchecker_t)quux;
  -
  -    if (dotconf_command_loop(configfile) == 0)
  -        fprintf(stderr, "Error reading config file\n");
  +    //FIXME printf("DEBUG: *** 1 *** file as it was just read in ***\n%s***\n", cpBuf);
   
  -    dotconf_cleanup(configfile);
  +    {
  +        char *cpI; /* pointer to next character to be read */
  +        char *cpO; /* pointer to next character to be written when eliminating backslash+newline at a line continuation */
  +        char *cpL; /* pointer to start of line */
  +        int pline; /* current physical (disregarding line continuation) line number */
  +        int lline; /* current logical lines first physical line number */
  +        int eline; /* flag signaling empty or just whitespace-filled line */
  +        char c; /* current character */
  +        char p; /* previous character */
  +        int eof; /* flag signaling end of file detected */
  +
  +        cpI = cpBuf;
  +        cpO = cpBuf;
  +        eof = FALSE;
  +        pline = 1;
  +        p = NUL; /* prefill previous character with fake value to avoid false
  +        line continuation detection when a newline is seen as the first
  +        character in the buffer */
  +
  +        cpL = cpO;
  +        lline = pline;
  +        eline = TRUE;
  +        while(!eof) {
  +            c = *cpI++;
  +            *cpO++ = c;
  +            if (c == NUL)
  +                eof = TRUE;
  +            else
  +                if (!isspace(c))
  +                    eline = FALSE;
  +            if (eof || (c == '\n')) {
  +                pline++;
  +                if (!eof && (p == '\\')) { /* line continuation situation */
  +                    cpO-=2; /* need to remove both backslash+newline */
  +                }
  +                else {
  +                    if (!eline) { /* process logical line unless it's empty */
  +                        *(cpO-1) = NUL;
  +                        if (lline == (pline-1))
  +                            printf("DEBUG: line[%3d] = ***%s***\n", lline, cpL);
  +                        else
  +                            printf("DEBUG: [%3d-%3d] = ***%s***\n", lline, pline-1, cpL);
  +                        {
  +                            char *cp = cpL;
  +                            char *token;
  +                            char *value;
  +
  +                            if ((token = str_token(&cp, " ", "\"'", "#", STR_STRIPQUOTES|STR_BACKSLASHESC)) == NULL)
  +                                printf("DEBUG: no token - comment only\n");
  +                            else {
  +                                printf("DEBUG:     token = ***%s***\n", token);
  +                                if ((value = str_token(&cp, "", "\"'", "#", STR_STRIPQUOTES|STR_BACKSLASHESC)) == NULL)
  +                                    printf("DEBUG: no value - section\n");
  +                                else
  +                                    printf("DEBUG:     value = ***%s***\n", value);
  +                            }
  +                        }
  +                    }
  +                    cpL = cpO;
  +                    lline = pline;
  +                    eline = TRUE;
  +                }
  +            }
  +            p = c;
  +        }
  +    }
   }
   
    

From ossp-cvs-owner@ossp.org  Thu Jan 10 21:05:30 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 01A9F764E3; Thu, 10 Jan 2002 21:05:29 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cache TODO
Message-Id: <20020110200529.01A9F764E3@mail.ossp.org>
Date: Thu, 10 Jan 2002 21:05:29 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   10-Jan-2002 21:05:29
  Branch: HEAD                             Handle: 2002011020052900

  Modified files:
    ossp-pkg/cache          TODO

  Log:
    We don't need locking, let the controlling application do such checks instead.

  Summary:
    Revision    Changes     Path
    1.3         +0  -2      ossp-pkg/cache/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/cache/TODO
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 TODO
  --- ossp-pkg/cache/TODO	9 Jan 2002 13:44:50 -0000	1.2
  +++ ossp-pkg/cache/TODO	10 Jan 2002 20:05:29 -0000	1.3
  @@ -1,5 +1,3 @@
   
   TODO
   ----
  -
  -File locking might be enforced, or available as a runtime option.

From ossp-cvs-owner@ossp.org  Thu Jan 10 21:05:35 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8F2EB76503; Thu, 10 Jan 2002 21:05:35 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc ChangeLog Makefile.am autogen.sh configure.in
Message-Id: <20020110200535.8F2EB76503@mail.ossp.org>
Date: Thu, 10 Jan 2002 21:05:35 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   10-Jan-2002 21:05:35
  Branch: HEAD                             Handle: 2002011020053401

  Modified files:
    ossp-pkg/rc             ChangeLog Makefile.am autogen.sh configure.in

  Log:
    Build configuration corrections and small cleanups.

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/rc/ChangeLog
    1.2         +4  -2      ossp-pkg/rc/Makefile.am
    1.3         +2  -0      ossp-pkg/rc/autogen.sh
    1.2         +1  -1      ossp-pkg/rc/configure.in
  ____________________________________________________________________________

  Index: ossp-pkg/rc/ChangeLog
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 ChangeLog
  --- ossp-pkg/rc/ChangeLog	8 Jan 2002 15:47:11 -0000	1.1
  +++ ossp-pkg/rc/ChangeLog	10 Jan 2002 20:05:34 -0000	1.2
  @@ -8,7 +8,7 @@
   
     ChangeLog
   
  -  Changes between *GENESIS* and 0.9.0 (07-Jan-2002 to 00-Duc-2002):
  +  Changes between *GENESIS* and 0.1.0 (07-Jan-2002 to 00-Duc-2002):
   
       *) Added Autoconf and other build configuration.
          [Michael Schloh von Bennewitz]
  Index: ossp-pkg/rc/Makefile.am
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 Makefile.am
  --- ossp-pkg/rc/Makefile.am	8 Jan 2002 15:47:11 -0000	1.1
  +++ ossp-pkg/rc/Makefile.am	10 Jan 2002 20:05:34 -0000	1.2
  @@ -1,2 +1,4 @@
  -bin_PROGRAMS= rc
  -rc_SOURCES= rc_p.h rc.h rc.c
  +bin_PROGRAMS = rc
  +rc_SOURCES = rc_p.h rc.h rc.c
  +
  +EXTRA_DIST = autogen.sh AUTHORS TODO README configure
  Index: ossp-pkg/rc/autogen.sh
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 autogen.sh
  --- ossp-pkg/rc/autogen.sh	10 Jan 2002 10:29:37 -0000	1.2
  +++ ossp-pkg/rc/autogen.sh	10 Jan 2002 20:05:34 -0000	1.3
  @@ -1,3 +1,5 @@
  +#!/bin/sh
  +
   aclocal
   autoheader
   automake --add-missing --gnu
  Index: ossp-pkg/rc/configure.in
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 configure.in
  --- ossp-pkg/rc/configure.in	8 Jan 2002 15:47:11 -0000	1.1
  +++ ossp-pkg/rc/configure.in	10 Jan 2002 20:05:35 -0000	1.2
  @@ -1,5 +1,5 @@
   dnl ##
  -dnl ##  rc - OSSP Runcommand processor
  +dnl ##  OSSP rc - Runcommand processor
   dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
   dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
   dnl ##  Copyright (c) 2002 Ralf S. Engelschall

From ossp-cvs-owner@ossp.org  Fri Jan 11 11:19:14 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5C432764D1; Fri, 11 Jan 2002 11:19:14 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pcre ChangeLog ChangeLog.OSSP pcre.h ossp-pkg/pcr...
Message-Id: <20020111101914.5C432764D1@mail.ossp.org>
Date: Fri, 11 Jan 2002 11:19:14 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   11-Jan-2002 11:19:14
  Branch: HEAD                             Handle: 2002011110191201

  Modified files:
    ossp-pkg/pcre           ChangeLog ChangeLog.OSSP pcre.h pcregrep.1
    ossp-pkg/pcre/pcre_test.d testoutput1 testoutput2 testoutput3 testoutput4
                            testoutput5 testoutput6

  Log:
    upgrade to PCRE 3.9

  Summary:
    Revision    Changes     Path
    1.10        +10 -0      ossp-pkg/pcre/ChangeLog
    1.19        +3  -0      ossp-pkg/pcre/ChangeLog.OSSP
    1.9         +2  -2      ossp-pkg/pcre/pcre.h
    1.9         +1  -1      ossp-pkg/pcre/pcre_test.d/testoutput1
    1.9         +1  -1      ossp-pkg/pcre/pcre_test.d/testoutput2
    1.9         +1  -1      ossp-pkg/pcre/pcre_test.d/testoutput3
    1.9         +1  -1      ossp-pkg/pcre/pcre_test.d/testoutput4
    1.4         +1  -1      ossp-pkg/pcre/pcre_test.d/testoutput5
    1.4         +1  -1      ossp-pkg/pcre/pcre_test.d/testoutput6
    1.2         +1  -11     ossp-pkg/pcre/pcregrep.1
  ____________________________________________________________________________

  Index: ossp-pkg/pcre/ChangeLog
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 ChangeLog
  --- ossp-pkg/pcre/ChangeLog	7 Jan 2002 15:21:06 -0000	1.9
  +++ ossp-pkg/pcre/ChangeLog	11 Jan 2002 10:19:12 -0000	1.10
  @@ -1,6 +1,16 @@
   ChangeLog for PCRE
   ------------------
   
  +Version 3.0 02-Jan-02
  +---------------------
  +
  +1. A bit of extraneous text had somehow crept into the pcregrep documentation.
  +
  +2. If --disable-static was given, the building process failed when trying to
  +build pcretest and pcregrep. (For some reason it was using libtool to compile
  +them, which is not right, as they aren't part of the library.)
  +
  +
   Version 3.8 18-Dec-01
   ---------------------
   
  Index: ossp-pkg/pcre/ChangeLog.OSSP
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 ChangeLog.OSSP
  --- ossp-pkg/pcre/ChangeLog.OSSP	7 Jan 2002 14:36:54 -0000	1.18
  +++ ossp-pkg/pcre/ChangeLog.OSSP	11 Jan 2002 10:19:12 -0000	1.19
  @@ -2,6 +2,9 @@
    OSSP ChangeLog for PCRE
    =======================
   
  +  *) Upgraded to PCRE 3.9
  +  *) Upgraded to PCRE 3.8
  +
    Changes made to OSSP pcre 3.5 (29-Aug-2000 to 16-Aug-2001):
   
     *) Merged in changes between PCRE 3.4 to 3.5
  Index: ossp-pkg/pcre/pcre.h
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 pcre.h
  --- ossp-pkg/pcre/pcre.h	7 Jan 2002 15:21:06 -0000	1.8
  +++ ossp-pkg/pcre/pcre.h	11 Jan 2002 10:19:12 -0000	1.9
  @@ -8,8 +8,8 @@
   #define _PCRE_H
   
   #define PCRE_MAJOR 3
  -#define PCRE_MINOR 8
  -#define PCRE_DATE  18-Dec-2001
  +#define PCRE_MINOR 9
  +#define PCRE_DATE  02-Jan-2002
   
   #define __PCRE_STRING(a)  #a
   #define __PCRE_XSTRING(s) _STRING(s)
  Index: ossp-pkg/pcre/pcre_test.d/testoutput1
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 testoutput1
  --- ossp-pkg/pcre/pcre_test.d/testoutput1	7 Jan 2002 15:21:07 -0000	1.8
  +++ ossp-pkg/pcre/pcre_test.d/testoutput1	11 Jan 2002 10:19:13 -0000	1.9
  @@ -1,4 +1,4 @@
  -PCRE version 3.8 18-Dec-2001
  +PCRE version 3.9 02-Jan-2002
   
   /the quick brown fox/
       the quick brown fox
  Index: ossp-pkg/pcre/pcre_test.d/testoutput2
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 testoutput2
  --- ossp-pkg/pcre/pcre_test.d/testoutput2	7 Jan 2002 15:21:07 -0000	1.8
  +++ ossp-pkg/pcre/pcre_test.d/testoutput2	11 Jan 2002 10:19:13 -0000	1.9
  @@ -1,4 +1,4 @@
  -PCRE version 3.8 18-Dec-2001
  +PCRE version 3.9 02-Jan-2002
   
   /(a)b|/
   Capturing subpattern count = 1
  Index: ossp-pkg/pcre/pcre_test.d/testoutput3
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 testoutput3
  --- ossp-pkg/pcre/pcre_test.d/testoutput3	7 Jan 2002 15:21:08 -0000	1.8
  +++ ossp-pkg/pcre/pcre_test.d/testoutput3	11 Jan 2002 10:19:13 -0000	1.9
  @@ -1,4 +1,4 @@
  -PCRE version 3.8 18-Dec-2001
  +PCRE version 3.9 02-Jan-2002
   
   /(?<!bar)foo/
       foo
  Index: ossp-pkg/pcre/pcre_test.d/testoutput4
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 testoutput4
  --- ossp-pkg/pcre/pcre_test.d/testoutput4	7 Jan 2002 15:21:08 -0000	1.8
  +++ ossp-pkg/pcre/pcre_test.d/testoutput4	11 Jan 2002 10:19:13 -0000	1.9
  @@ -1,4 +1,4 @@
  -PCRE version 3.8 18-Dec-2001
  +PCRE version 3.9 02-Jan-2002
   
   /^[\w]+/
       *** Failers
  Index: ossp-pkg/pcre/pcre_test.d/testoutput5
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 testoutput5
  --- ossp-pkg/pcre/pcre_test.d/testoutput5	7 Jan 2002 15:21:08 -0000	1.3
  +++ ossp-pkg/pcre/pcre_test.d/testoutput5	11 Jan 2002 10:19:13 -0000	1.4
  @@ -1,4 +1,4 @@
  -PCRE version 3.8 18-Dec-2001
  +PCRE version 3.9 02-Jan-2002
   
   /-- Because of problems with Perl 5.6 in handling UTF-8 vs non UTF-8 --/
   /-- strings automatically, do not use the \x{} construct except with --/
  Index: ossp-pkg/pcre/pcre_test.d/testoutput6
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 testoutput6
  --- ossp-pkg/pcre/pcre_test.d/testoutput6	7 Jan 2002 15:21:08 -0000	1.3
  +++ ossp-pkg/pcre/pcre_test.d/testoutput6	11 Jan 2002 10:19:13 -0000	1.4
  @@ -1,4 +1,4 @@
  -PCRE version 3.8 18-Dec-2001
  +PCRE version 3.9 02-Jan-2002
   
   /\x{100}/8DM
   Memory allocation (code space): 11
  Index: ossp-pkg/pcre/pcregrep.1
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 pcregrep.1
  --- ossp-pkg/pcre/pcregrep.1	7 Jan 2002 15:21:06 -0000	1.1
  +++ ossp-pkg/pcre/pcregrep.1	11 Jan 2002 10:19:12 -0000	1.2
  @@ -32,17 +32,7 @@
   lines that would otherwise have been printed. If several files are given, a
   count is printed for each of them.
   .TP
  -
  -       versity of Cambridge for use on Unix systems connected  to
  -       the  Internet.  It  is freely available under the terms of
  -       the GNU General Public Licence. In style it is similar  to
  -       Smail  3,  but  its  facilities are more extensive, and in
  -       particular it has some defences  against  mail  bombs  and
  -       unsolicited junk mail, in the form of options for refusing
  -       messages from particular hosts, networks, or senders.
  -
  -       Exim's command line takes the  standard  Unix  form  of  a
  -       sequence  of  options, each starting with a hyphen charac\fB-f\fIfilename\fR
  +\fB-f\fIfilename\fR
   Read patterns from the file, one per line, and match all patterns against each
   line. There is a maximum of 100 patterns. Trailing white space is removed, and
   blank lines are ignored. An empty file contains no patterns and therefore

From ossp-cvs-owner@ossp.org  Fri Jan 11 11:27:10 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C97C2764D1; Fri, 11 Jan 2002 11:27:09 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str str_pcre.c str_pcre.h
Message-Id: <20020111102709.C97C2764D1@mail.ossp.org>
Date: Fri, 11 Jan 2002 11:27:09 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   11-Jan-2002 11:27:09
  Branch: HEAD                             Handle: 2002011110270900

  Modified files:
    ossp-pkg/str            str_pcre.c str_pcre.h

  Log:
    upgrade to PCRE 3.9

  Summary:
    Revision    Changes     Path
    1.7         +91 -79     ossp-pkg/str/str_pcre.c
    1.4         +3  -3      ossp-pkg/str/str_pcre.h
  ____________________________________________________________________________

  Index: ossp-pkg/str/str_pcre.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 str_pcre.c
  --- ossp-pkg/str/str_pcre.c	27 Dec 2001 12:24:20 -0000	1.6
  +++ ossp-pkg/str/str_pcre.c	11 Jan 2002 10:27:09 -0000	1.7
  @@ -6,7 +6,7 @@
    *  DO NOT EDIT THIS FILE, IT WAS AUTOMATICALLY GENERATED!
    *
    *  This is an automatically generated, extremely stripped down
  - *  version of the PCRE 3.8 library from the Philip Hazel.
  + *  version of the PCRE 3.9 library from the Philip Hazel.
    *  This version is still distributed under the same original PCRE
    *  Open Source license, but Philip Hazel is no longer responsible
    *  for this version.
  @@ -596,8 +596,8 @@
   					while ((cd->ctypes[*pt] & ctype_xdigit) != 0) {
   						count++;
   						c = c * 16 + cd->lcc[*pt] -
  -							(((cd->
  -							   ctypes[*pt] & ctype_digit) != 0) ? '0' : 'W');
  +							(((cd->ctypes[*pt] & ctype_digit) !=
  +							  0) ? '0' : 'W');
   						pt++;
   					}
   					if (*pt == '}') {
  @@ -965,7 +965,8 @@
   						}
   
   						if ((options & PCRE_CASELESS) != 0
  -							&& posix_class <= 2) posix_class = 0;
  +							&& posix_class <= 2)
  +							posix_class = 0;
   
   						posix_class *= 3;
   						for (i = 0; i < 3; i++) {
  @@ -986,8 +987,7 @@
   					}
   
   					if (c == '\\') {
  -						c =
  -							check_escape(&ptr, errorptr, *brackets, options,
  +						c = check_escape(&ptr, errorptr, *brackets, options,
   										 TRUE, cd);
   						if (-c == ESC_b)
   							c = '\b';
  @@ -1051,8 +1051,7 @@
   
   						if (d == '\\') {
   							const uschar *oldptr = ptr;
  -							d =
  -								check_escape(&ptr, errorptr, *brackets,
  +							d = check_escape(&ptr, errorptr, *brackets,
   											 options, TRUE, cd);
   
   #ifdef STR_PCRE_SUPPORT_UTF8
  @@ -1528,8 +1527,8 @@
   								   errorptr, (bravalue == OP_ASSERTBACK
   											  || bravalue ==
   											  OP_ASSERTBACK_NOT), skipbytes,
  -								   &subreqchar, &subcountlits,
  -								   cd)) goto FAILED;
  +								   &subreqchar, &subcountlits, cd))
  +					goto FAILED;
   
   				else if (bravalue == OP_COND) {
   					uschar *tc = code;
  @@ -1567,8 +1566,7 @@
   
   			case '\\':
   				tempptr = ptr;
  -				c =
  -					check_escape(&ptr, errorptr, *brackets, options, FALSE,
  +				c = check_escape(&ptr, errorptr, *brackets, options, FALSE,
   								 cd);
   
   				if (c < 0) {
  @@ -1610,8 +1608,7 @@
   
   					if (c == '\\') {
   						tempptr = ptr;
  -						c =
  -							check_escape(&ptr, errorptr, *brackets, options,
  +						c = check_escape(&ptr, errorptr, *brackets, options,
   										 FALSE, cd);
   						if (c < 0) {
   							ptr = tempptr;
  @@ -1802,7 +1799,7 @@
   		}
   		else if (op != OP_SOD &&
   				 ((*options & PCRE_MULTILINE) != 0 || op != OP_CIRC))
  -				return FALSE;
  +			return FALSE;
   		code += (code[1] << 8) + code[2];
   	}
   	while (*code == OP_ALT);
  @@ -1947,8 +1944,7 @@
   			case '\\':
   				{
   					const uschar *save_ptr = ptr;
  -					c =
  -						check_escape(&ptr, errorptr, bracount, options, FALSE,
  +					c = check_escape(&ptr, errorptr, bracount, options, FALSE,
   									 &compile_block);
   					if (*errorptr != NULL)
   						goto PCRE_ERROR_RETURN;
  @@ -2114,12 +2110,11 @@
   							goto PCRE_ERROR_RETURN;
   
   						case '(':
  -							if ((compile_block.ctypes[ptr[3]] & ctype_digit)
  -								!= 0) {
  +							if ((compile_block.
  +								 ctypes[ptr[3]] & ctype_digit) != 0) {
   								ptr += 4;
   								length += 3;
  -								while (
  -									   (compile_block.
  +								while ((compile_block.
   										ctypes[*ptr] & ctype_digit) != 0)
   									ptr++;
   								if (*ptr != ')') {
  @@ -2186,8 +2181,7 @@
   										if (((set | unset) & PCRE_IMS) != 0) {
   											length += 4;
   											branch_newextra = 2;
  -											if (
  -												((set | unset) &
  +											if (((set | unset) &
   												 PCRE_CASELESS) != 0)
   												options |= PCRE_ICHANGED;
   										}
  @@ -2203,8 +2197,8 @@
   							if (c == ')') {
   								if (branch_newextra == 2
   									&& (branch_extra == 0
  -										|| branch_extra == 3)) branch_extra +=
  -										branch_newextra;
  +										|| branch_extra == 3))
  +									branch_extra += branch_newextra;
   								continue;
   							}
   
  @@ -2295,8 +2289,7 @@
   
   					if (c == '\\') {
   						const uschar *saveptr = ptr;
  -						c =
  -							check_escape(&ptr, errorptr, bracount, options,
  +						c = check_escape(&ptr, errorptr, bracount, options,
   										 FALSE, &compile_block);
   						if (*errorptr != NULL)
   							goto PCRE_ERROR_RETURN;
  @@ -2354,8 +2347,8 @@
   	code = re->code;
   	*code = OP_BRA;
   	bracount = 0;
  -	(void)compile_regex(options, -1, &bracount, &code, &ptr, errorptr, FALSE, 0,
  -						&reqchar, &countlits, &compile_block);
  +	(void)compile_regex(options, -1, &bracount, &code, &ptr, errorptr, FALSE,
  +						0, &reqchar, &countlits, &compile_block);
   	re->top_bracket = bracount;
   	re->top_backref = top_backref;
   
  @@ -2462,7 +2455,8 @@
   				do {
   					if (match
   						(eptr, ecode + 3, offset_top, md, ims, eptrb,
  -						 match_isgroup)) return TRUE;
  +						 match_isgroup))
  +						return TRUE;
   					ecode += (ecode[1] << 8) + ecode[2];
   				}
   				while (*ecode == OP_ALT);
  @@ -2484,7 +2478,8 @@
   				do {
   					if (match
   						(eptr, ecode + 3, offset_top, md, ims, eptrb,
  -						 match_isgroup)) return TRUE;
  +						 match_isgroup))
  +						return TRUE;
   					ecode += (ecode[1] << 8) + ecode[2];
   				}
   				while (*ecode == OP_ALT);
  @@ -2496,8 +2491,7 @@
   					int offset = (ecode[4] << 9) | (ecode[5] << 1);
   					return match(eptr,
   								 ecode +
  -								 ((offset
  -								   < offset_top
  +								 ((offset < offset_top
   								   && md->offset_vector[offset] >=
   								   0) ? 6 : 3 + (ecode[1] << 8) + ecode[2]),
   								 offset_top, md, ims, eptrb, match_isgroup);
  @@ -2539,7 +2533,8 @@
   				do {
   					if (match
   						(eptr, ecode + 3, offset_top, md, ims, NULL,
  -						 match_isgroup)) break;
  +						 match_isgroup))
  +						break;
   					ecode += (ecode[1] << 8) + ecode[2];
   				}
   				while (*ecode == OP_ALT);
  @@ -2561,7 +2556,8 @@
   				do {
   					if (match
   						(eptr, ecode + 3, offset_top, md, ims, NULL,
  -						 match_isgroup)) return FALSE;
  +						 match_isgroup))
  +						return FALSE;
   					ecode += (ecode[1] << 8) + ecode[2];
   				}
   				while (*ecode == OP_ALT);
  @@ -2608,9 +2604,8 @@
   
   					for (i = 1; i <= c; i++)
   						save[i] = md->offset_vector[md->offset_end - i];
  -					rc =
  -						match(eptr, md->start_pattern, offset_top, md, ims,
  -							  eptrb, match_isgroup);
  +					rc = match(eptr, md->start_pattern, offset_top, md, ims,
  +							   eptrb, match_isgroup);
   					for (i = 1; i <= c; i++)
   						md->offset_vector[md->offset_end - i] = save[i];
   					if (save != stacksave)
  @@ -2632,7 +2627,8 @@
   					do {
   						if (match
   							(eptr, ecode + 3, offset_top, md, ims, eptrb,
  -							 match_isgroup)) break;
  +							 match_isgroup))
  +							break;
   						ecode += (ecode[1] << 8) + ecode[2];
   					}
   					while (*ecode == OP_ALT);
  @@ -2661,7 +2657,8 @@
   						if (match
   							(eptr, ecode + 3, offset_top, md, ims, eptrb, 0)
   							|| match(eptr, prev, offset_top, md, ims, eptrb,
  -									 match_isgroup)) return TRUE;
  +									 match_isgroup))
  +							return TRUE;
   					}
   					else {
   						if (match
  @@ -2685,7 +2682,8 @@
   					const uschar *next = ecode + 1;
   					if (match
   						(eptr, next, offset_top, md, ims, eptrb,
  -						 match_isgroup)) return TRUE;
  +						 match_isgroup))
  +						return TRUE;
   					do
   						next += (next[1] << 8) + next[2];
   					while (*next == OP_ALT);
  @@ -2701,7 +2699,8 @@
   					while (*next == OP_ALT);
   					if (match
   						(eptr, next + 3, offset_top, md, ims, eptrb,
  -						 match_isgroup)) return TRUE;
  +						 match_isgroup))
  +						return TRUE;
   					ecode++;
   				}
   				break;
  @@ -2757,7 +2756,8 @@
   						if (match
   							(eptr, ecode + 3, offset_top, md, ims, eptrb, 0)
   							|| match(eptr, prev, offset_top, md, ims, eptrb,
  -									 match_isgroup)) return TRUE;
  +									 match_isgroup))
  +							return TRUE;
   					}
   					else {
   						if (match
  @@ -2833,7 +2833,8 @@
   						((md->ctypes[*eptr] & ctype_word) != 0);
   					if ((*ecode++ == OP_WORD_BOUNDARY) ?
   						cur_is_word == prev_is_word : cur_is_word !=
  -						prev_is_word) return FALSE;
  +						prev_is_word)
  +						return FALSE;
   				}
   				break;
   
  @@ -2952,8 +2953,8 @@
   					if (minimize) {
   						for (i = min;; i++) {
   							if (match
  -								(eptr, ecode, offset_top, md, ims, eptrb,
  -								 0)) return TRUE;
  +								(eptr, ecode, offset_top, md, ims, eptrb, 0))
  +								return TRUE;
   							if (i >= max
   								|| !match_ref(offset, eptr, length, md, ims))
   								return FALSE;
  @@ -2970,8 +2971,8 @@
   						}
   						while (eptr >= pp) {
   							if (match
  -								(eptr, ecode, offset_top, md, ims, eptrb,
  -								 0)) return TRUE;
  +								(eptr, ecode, offset_top, md, ims, eptrb, 0))
  +								return TRUE;
   							eptr -= length;
   						}
   						return FALSE;
  @@ -3033,8 +3034,8 @@
   					if (minimize) {
   						for (i = min;; i++) {
   							if (match
  -								(eptr, ecode, offset_top, md, ims, eptrb,
  -								 0)) return TRUE;
  +								(eptr, ecode, offset_top, md, ims, eptrb, 0))
  +								return TRUE;
   							if (i >= max || eptr >= md->end_subject)
   								return FALSE;
   							GETCHARINC(c, eptr)
  @@ -3067,7 +3068,8 @@
   						while (eptr >= pp) {
   							if (match
   								(eptr--, ecode, offset_top, md, ims, eptrb,
  -								 0)) return TRUE;
  +								 0))
  +								return TRUE;
   
   #ifdef STR_PCRE_SUPPORT_UTF8
   							BACKCHAR(eptr)
  @@ -3138,10 +3140,10 @@
   					if (minimize) {
   						for (i = min;; i++) {
   							if (match
  -								(eptr, ecode, offset_top, md, ims, eptrb,
  -								 0)) return TRUE;
  -							if (i >= max || eptr >= md->end_subject
  -								|| c != md->lcc[*eptr++])
  +								(eptr, ecode, offset_top, md, ims, eptrb, 0))
  +								return TRUE;
  +							if (i >= max || eptr >= md->end_subject ||
  +								c != md->lcc[*eptr++])
   								return FALSE;
   						}
   					}
  @@ -3149,13 +3151,15 @@
   						const uschar *pp = eptr;
   						for (i = min; i < max; i++) {
   							if (eptr >= md->end_subject
  -								|| c != md->lcc[*eptr]) break;
  +								|| c != md->lcc[*eptr])
  +								break;
   							eptr++;
   						}
   						while (eptr >= pp)
   							if (match
   								(eptr--, ecode, offset_top, md, ims, eptrb,
  -								 0)) return TRUE;
  +								 0))
  +								return TRUE;
   						return FALSE;
   					}
   				}
  @@ -3169,8 +3173,8 @@
   					if (minimize) {
   						for (i = min;; i++) {
   							if (match
  -								(eptr, ecode, offset_top, md, ims, eptrb,
  -								 0)) return TRUE;
  +								(eptr, ecode, offset_top, md, ims, eptrb, 0))
  +								return TRUE;
   							if (i >= max || eptr >= md->end_subject
   								|| c != *eptr++)
   								return FALSE;
  @@ -3186,7 +3190,8 @@
   						while (eptr >= pp)
   							if (match
   								(eptr--, ecode, offset_top, md, ims, eptrb,
  -								 0)) return TRUE;
  +								 0))
  +								return TRUE;
   						return FALSE;
   					}
   				}
  @@ -3246,10 +3251,10 @@
   					if (minimize) {
   						for (i = min;; i++) {
   							if (match
  -								(eptr, ecode, offset_top, md, ims, eptrb,
  -								 0)) return TRUE;
  -							if (i >= max || eptr >= md->end_subject
  -								|| c == md->lcc[*eptr++])
  +								(eptr, ecode, offset_top, md, ims, eptrb, 0))
  +								return TRUE;
  +							if (i >= max || eptr >= md->end_subject ||
  +								c == md->lcc[*eptr++])
   								return FALSE;
   						}
   					}
  @@ -3257,13 +3262,15 @@
   						const uschar *pp = eptr;
   						for (i = min; i < max; i++) {
   							if (eptr >= md->end_subject
  -								|| c == md->lcc[*eptr]) break;
  +								|| c == md->lcc[*eptr])
  +								break;
   							eptr++;
   						}
   						while (eptr >= pp)
   							if (match
   								(eptr--, ecode, offset_top, md, ims, eptrb,
  -								 0)) return TRUE;
  +								 0))
  +								return TRUE;
   						return FALSE;
   					}
   				}
  @@ -3277,8 +3284,8 @@
   					if (minimize) {
   						for (i = min;; i++) {
   							if (match
  -								(eptr, ecode, offset_top, md, ims, eptrb,
  -								 0)) return TRUE;
  +								(eptr, ecode, offset_top, md, ims, eptrb, 0))
  +								return TRUE;
   							if (i >= max || eptr >= md->end_subject
   								|| c == *eptr++)
   								return FALSE;
  @@ -3294,7 +3301,8 @@
   						while (eptr >= pp)
   							if (match
   								(eptr--, ecode, offset_top, md, ims, eptrb,
  -								 0)) return TRUE;
  +								 0))
  +								return TRUE;
   						return FALSE;
   					}
   				}
  @@ -3481,7 +3489,8 @@
   							if ((ims & PCRE_DOTALL) == 0) {
   								for (i = min; i < max; i++) {
   									if (eptr >= md->end_subject
  -										|| *eptr == '\n') break;
  +										|| *eptr == '\n')
  +										break;
   									eptr++;
   								}
   							}
  @@ -3550,8 +3559,8 @@
   
   					while (eptr >= pp) {
   						if (match
  -							(eptr--, ecode, offset_top, md, ims, eptrb,
  -							 0)) return TRUE;
  +							(eptr--, ecode, offset_top, md, ims, eptrb, 0))
  +							return TRUE;
   #ifdef STR_PCRE_SUPPORT_UTF8
   						if (md->utf8)
   							while (eptr > pp && (*eptr & 0xc0) == 0x80)
  @@ -3656,9 +3665,8 @@
   			if ((ims & PCRE_CASELESS) != 0)
   				first_char = match_block.lcc[first_char];
   		}
  -		else
  -			if (!startline && extra != NULL &&
  -				(extra->options & PCRE_STUDY_MAPPED) != 0)
  +		else if (!startline && extra != NULL &&
  +				 (extra->options & PCRE_STUDY_MAPPED) != 0)
   			start_bits = extra->start_bits;
   	}
   
  @@ -3683,7 +3691,8 @@
   					start_match++;
   			else
   				while (start_match < end_subject
  -					   && *start_match != first_char) start_match++;
  +					   && *start_match != first_char)
  +					start_match++;
   		}
   
   		else if (startline) {
  @@ -3737,7 +3746,8 @@
   		match_block.start_match = start_match;
   		if (!match
   			(start_match, re->code, 2, &match_block, ims, NULL,
  -			 match_isgroup)) continue;
  +			 match_isgroup))
  +			continue;
   
   		if (using_temporary_offsets) {
   			if (offsetcount >= 4) {
  @@ -3829,7 +3839,8 @@
   					case OP_BRAZERO:
   					case OP_BRAMINZERO:
   						if (!set_start_bits
  -							(++tcode, start_bits, caseless, cd)) return FALSE;
  +							(++tcode, start_bits, caseless, cd))
  +							return FALSE;
   						dummy = 1;
   						do
   							tcode += (tcode[1] << 8) + tcode[2];
  @@ -4025,7 +4036,8 @@
   	memset(start_bits, 0, 32 * sizeof (uschar));
   	if (!set_start_bits
   		(re->code, start_bits, (re->options & PCRE_CASELESS) != 0,
  -		 &compile_block)) return NULL;
  +		 &compile_block))
  +		return NULL;
   
   	extra = (pcre_extra_st *) (pcre_malloc) (sizeof (pcre_extra_st));
   
  Index: ossp-pkg/str/str_pcre.h
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 str_pcre.h
  --- ossp-pkg/str/str_pcre.h	27 Dec 2001 12:24:20 -0000	1.3
  +++ ossp-pkg/str/str_pcre.h	11 Jan 2002 10:27:09 -0000	1.4
  @@ -6,7 +6,7 @@
    *  DO NOT EDIT THIS FILE, IT WAS AUTOMATICALLY GENERATED!
    *
    *  This is an automatically generated, extremely stripped down
  - *  version of the PCRE 3.8 library from the Philip Hazel.
  + *  version of the PCRE 3.9 library from the Philip Hazel.
    *  This version is still distributed under the same original PCRE
    *  Open Source license, but Philip Hazel is no longer responsible
    *  for this version.
  @@ -48,8 +48,8 @@
   #define PCRE_PREFIX str_
   
   #define PCRE_MAJOR          3
  -#define PCRE_MINOR          8
  -#define PCRE_DATE           18-Dec-2001
  +#define PCRE_MINOR          9
  +#define PCRE_DATE           02-Jan-2002
   
   #ifdef PCRE_PREFIX
   #if defined(__STDC__) || defined(__cplusplus)

From ossp-cvs-owner@ossp.org  Fri Jan 11 11:36:15 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1C65F764D1; Fri, 11 Jan 2002 11:36:15 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ut_pcre.c l2_ut_pcre.h
Message-Id: <20020111103615.1C65F764D1@mail.ossp.org>
Date: Fri, 11 Jan 2002 11:36:15 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   11-Jan-2002 11:36:14
  Branch: HEAD                             Handle: 2002011110361400

  Modified files:
    ossp-pkg/l2             l2_ut_pcre.c l2_ut_pcre.h

  Log:
    upgrade to PCRE 3.9

  Summary:
    Revision    Changes     Path
    1.6         +91 -79     ossp-pkg/l2/l2_ut_pcre.c
    1.6         +3  -3      ossp-pkg/l2/l2_ut_pcre.h
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ut_pcre.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 l2_ut_pcre.c
  --- ossp-pkg/l2/l2_ut_pcre.c	21 Dec 2001 10:50:01 -0000	1.5
  +++ ossp-pkg/l2/l2_ut_pcre.c	11 Jan 2002 10:36:14 -0000	1.6
  @@ -6,7 +6,7 @@
    *  DO NOT EDIT THIS FILE, IT WAS AUTOMATICALLY GENERATED!
    *
    *  This is an automatically generated, extremely stripped down
  - *  version of the PCRE 3.8 library from the Philip Hazel.
  + *  version of the PCRE 3.9 library from the Philip Hazel.
    *  This version is still distributed under the same original PCRE
    *  Open Source license, but Philip Hazel is no longer responsible
    *  for this version.
  @@ -596,8 +596,8 @@
   					while ((cd->ctypes[*pt] & ctype_xdigit) != 0) {
   						count++;
   						c = c * 16 + cd->lcc[*pt] -
  -							(((cd->
  -							   ctypes[*pt] & ctype_digit) != 0) ? '0' : 'W');
  +							(((cd->ctypes[*pt] & ctype_digit) !=
  +							  0) ? '0' : 'W');
   						pt++;
   					}
   					if (*pt == '}') {
  @@ -965,7 +965,8 @@
   						}
   
   						if ((options & PCRE_CASELESS) != 0
  -							&& posix_class <= 2) posix_class = 0;
  +							&& posix_class <= 2)
  +							posix_class = 0;
   
   						posix_class *= 3;
   						for (i = 0; i < 3; i++) {
  @@ -986,8 +987,7 @@
   					}
   
   					if (c == '\\') {
  -						c =
  -							check_escape(&ptr, errorptr, *brackets, options,
  +						c = check_escape(&ptr, errorptr, *brackets, options,
   										 TRUE, cd);
   						if (-c == ESC_b)
   							c = '\b';
  @@ -1051,8 +1051,7 @@
   
   						if (d == '\\') {
   							const uschar *oldptr = ptr;
  -							d =
  -								check_escape(&ptr, errorptr, *brackets,
  +							d = check_escape(&ptr, errorptr, *brackets,
   											 options, TRUE, cd);
   
   #ifdef L2_UT_PCRE_SUPPORT_UTF8
  @@ -1528,8 +1527,8 @@
   								   errorptr, (bravalue == OP_ASSERTBACK
   											  || bravalue ==
   											  OP_ASSERTBACK_NOT), skipbytes,
  -								   &subreqchar, &subcountlits,
  -								   cd)) goto FAILED;
  +								   &subreqchar, &subcountlits, cd))
  +					goto FAILED;
   
   				else if (bravalue == OP_COND) {
   					uschar *tc = code;
  @@ -1567,8 +1566,7 @@
   
   			case '\\':
   				tempptr = ptr;
  -				c =
  -					check_escape(&ptr, errorptr, *brackets, options, FALSE,
  +				c = check_escape(&ptr, errorptr, *brackets, options, FALSE,
   								 cd);
   
   				if (c < 0) {
  @@ -1610,8 +1608,7 @@
   
   					if (c == '\\') {
   						tempptr = ptr;
  -						c =
  -							check_escape(&ptr, errorptr, *brackets, options,
  +						c = check_escape(&ptr, errorptr, *brackets, options,
   										 FALSE, cd);
   						if (c < 0) {
   							ptr = tempptr;
  @@ -1802,7 +1799,7 @@
   		}
   		else if (op != OP_SOD &&
   				 ((*options & PCRE_MULTILINE) != 0 || op != OP_CIRC))
  -				return FALSE;
  +			return FALSE;
   		code += (code[1] << 8) + code[2];
   	}
   	while (*code == OP_ALT);
  @@ -1947,8 +1944,7 @@
   			case '\\':
   				{
   					const uschar *save_ptr = ptr;
  -					c =
  -						check_escape(&ptr, errorptr, bracount, options, FALSE,
  +					c = check_escape(&ptr, errorptr, bracount, options, FALSE,
   									 &compile_block);
   					if (*errorptr != NULL)
   						goto PCRE_ERROR_RETURN;
  @@ -2114,12 +2110,11 @@
   							goto PCRE_ERROR_RETURN;
   
   						case '(':
  -							if ((compile_block.ctypes[ptr[3]] & ctype_digit)
  -								!= 0) {
  +							if ((compile_block.
  +								 ctypes[ptr[3]] & ctype_digit) != 0) {
   								ptr += 4;
   								length += 3;
  -								while (
  -									   (compile_block.
  +								while ((compile_block.
   										ctypes[*ptr] & ctype_digit) != 0)
   									ptr++;
   								if (*ptr != ')') {
  @@ -2186,8 +2181,7 @@
   										if (((set | unset) & PCRE_IMS) != 0) {
   											length += 4;
   											branch_newextra = 2;
  -											if (
  -												((set | unset) &
  +											if (((set | unset) &
   												 PCRE_CASELESS) != 0)
   												options |= PCRE_ICHANGED;
   										}
  @@ -2203,8 +2197,8 @@
   							if (c == ')') {
   								if (branch_newextra == 2
   									&& (branch_extra == 0
  -										|| branch_extra == 3)) branch_extra +=
  -										branch_newextra;
  +										|| branch_extra == 3))
  +									branch_extra += branch_newextra;
   								continue;
   							}
   
  @@ -2295,8 +2289,7 @@
   
   					if (c == '\\') {
   						const uschar *saveptr = ptr;
  -						c =
  -							check_escape(&ptr, errorptr, bracount, options,
  +						c = check_escape(&ptr, errorptr, bracount, options,
   										 FALSE, &compile_block);
   						if (*errorptr != NULL)
   							goto PCRE_ERROR_RETURN;
  @@ -2354,8 +2347,8 @@
   	code = re->code;
   	*code = OP_BRA;
   	bracount = 0;
  -	(void)compile_regex(options, -1, &bracount, &code, &ptr, errorptr, FALSE, 0,
  -						&reqchar, &countlits, &compile_block);
  +	(void)compile_regex(options, -1, &bracount, &code, &ptr, errorptr, FALSE,
  +						0, &reqchar, &countlits, &compile_block);
   	re->top_bracket = bracount;
   	re->top_backref = top_backref;
   
  @@ -2462,7 +2455,8 @@
   				do {
   					if (match
   						(eptr, ecode + 3, offset_top, md, ims, eptrb,
  -						 match_isgroup)) return TRUE;
  +						 match_isgroup))
  +						return TRUE;
   					ecode += (ecode[1] << 8) + ecode[2];
   				}
   				while (*ecode == OP_ALT);
  @@ -2484,7 +2478,8 @@
   				do {
   					if (match
   						(eptr, ecode + 3, offset_top, md, ims, eptrb,
  -						 match_isgroup)) return TRUE;
  +						 match_isgroup))
  +						return TRUE;
   					ecode += (ecode[1] << 8) + ecode[2];
   				}
   				while (*ecode == OP_ALT);
  @@ -2496,8 +2491,7 @@
   					int offset = (ecode[4] << 9) | (ecode[5] << 1);
   					return match(eptr,
   								 ecode +
  -								 ((offset
  -								   < offset_top
  +								 ((offset < offset_top
   								   && md->offset_vector[offset] >=
   								   0) ? 6 : 3 + (ecode[1] << 8) + ecode[2]),
   								 offset_top, md, ims, eptrb, match_isgroup);
  @@ -2539,7 +2533,8 @@
   				do {
   					if (match
   						(eptr, ecode + 3, offset_top, md, ims, NULL,
  -						 match_isgroup)) break;
  +						 match_isgroup))
  +						break;
   					ecode += (ecode[1] << 8) + ecode[2];
   				}
   				while (*ecode == OP_ALT);
  @@ -2561,7 +2556,8 @@
   				do {
   					if (match
   						(eptr, ecode + 3, offset_top, md, ims, NULL,
  -						 match_isgroup)) return FALSE;
  +						 match_isgroup))
  +						return FALSE;
   					ecode += (ecode[1] << 8) + ecode[2];
   				}
   				while (*ecode == OP_ALT);
  @@ -2608,9 +2604,8 @@
   
   					for (i = 1; i <= c; i++)
   						save[i] = md->offset_vector[md->offset_end - i];
  -					rc =
  -						match(eptr, md->start_pattern, offset_top, md, ims,
  -							  eptrb, match_isgroup);
  +					rc = match(eptr, md->start_pattern, offset_top, md, ims,
  +							   eptrb, match_isgroup);
   					for (i = 1; i <= c; i++)
   						md->offset_vector[md->offset_end - i] = save[i];
   					if (save != stacksave)
  @@ -2632,7 +2627,8 @@
   					do {
   						if (match
   							(eptr, ecode + 3, offset_top, md, ims, eptrb,
  -							 match_isgroup)) break;
  +							 match_isgroup))
  +							break;
   						ecode += (ecode[1] << 8) + ecode[2];
   					}
   					while (*ecode == OP_ALT);
  @@ -2661,7 +2657,8 @@
   						if (match
   							(eptr, ecode + 3, offset_top, md, ims, eptrb, 0)
   							|| match(eptr, prev, offset_top, md, ims, eptrb,
  -									 match_isgroup)) return TRUE;
  +									 match_isgroup))
  +							return TRUE;
   					}
   					else {
   						if (match
  @@ -2685,7 +2682,8 @@
   					const uschar *next = ecode + 1;
   					if (match
   						(eptr, next, offset_top, md, ims, eptrb,
  -						 match_isgroup)) return TRUE;
  +						 match_isgroup))
  +						return TRUE;
   					do
   						next += (next[1] << 8) + next[2];
   					while (*next == OP_ALT);
  @@ -2701,7 +2699,8 @@
   					while (*next == OP_ALT);
   					if (match
   						(eptr, next + 3, offset_top, md, ims, eptrb,
  -						 match_isgroup)) return TRUE;
  +						 match_isgroup))
  +						return TRUE;
   					ecode++;
   				}
   				break;
  @@ -2757,7 +2756,8 @@
   						if (match
   							(eptr, ecode + 3, offset_top, md, ims, eptrb, 0)
   							|| match(eptr, prev, offset_top, md, ims, eptrb,
  -									 match_isgroup)) return TRUE;
  +									 match_isgroup))
  +							return TRUE;
   					}
   					else {
   						if (match
  @@ -2833,7 +2833,8 @@
   						((md->ctypes[*eptr] & ctype_word) != 0);
   					if ((*ecode++ == OP_WORD_BOUNDARY) ?
   						cur_is_word == prev_is_word : cur_is_word !=
  -						prev_is_word) return FALSE;
  +						prev_is_word)
  +						return FALSE;
   				}
   				break;
   
  @@ -2952,8 +2953,8 @@
   					if (minimize) {
   						for (i = min;; i++) {
   							if (match
  -								(eptr, ecode, offset_top, md, ims, eptrb,
  -								 0)) return TRUE;
  +								(eptr, ecode, offset_top, md, ims, eptrb, 0))
  +								return TRUE;
   							if (i >= max
   								|| !match_ref(offset, eptr, length, md, ims))
   								return FALSE;
  @@ -2970,8 +2971,8 @@
   						}
   						while (eptr >= pp) {
   							if (match
  -								(eptr, ecode, offset_top, md, ims, eptrb,
  -								 0)) return TRUE;
  +								(eptr, ecode, offset_top, md, ims, eptrb, 0))
  +								return TRUE;
   							eptr -= length;
   						}
   						return FALSE;
  @@ -3033,8 +3034,8 @@
   					if (minimize) {
   						for (i = min;; i++) {
   							if (match
  -								(eptr, ecode, offset_top, md, ims, eptrb,
  -								 0)) return TRUE;
  +								(eptr, ecode, offset_top, md, ims, eptrb, 0))
  +								return TRUE;
   							if (i >= max || eptr >= md->end_subject)
   								return FALSE;
   							GETCHARINC(c, eptr)
  @@ -3067,7 +3068,8 @@
   						while (eptr >= pp) {
   							if (match
   								(eptr--, ecode, offset_top, md, ims, eptrb,
  -								 0)) return TRUE;
  +								 0))
  +								return TRUE;
   
   #ifdef L2_UT_PCRE_SUPPORT_UTF8
   							BACKCHAR(eptr)
  @@ -3138,10 +3140,10 @@
   					if (minimize) {
   						for (i = min;; i++) {
   							if (match
  -								(eptr, ecode, offset_top, md, ims, eptrb,
  -								 0)) return TRUE;
  -							if (i >= max || eptr >= md->end_subject
  -								|| c != md->lcc[*eptr++])
  +								(eptr, ecode, offset_top, md, ims, eptrb, 0))
  +								return TRUE;
  +							if (i >= max || eptr >= md->end_subject ||
  +								c != md->lcc[*eptr++])
   								return FALSE;
   						}
   					}
  @@ -3149,13 +3151,15 @@
   						const uschar *pp = eptr;
   						for (i = min; i < max; i++) {
   							if (eptr >= md->end_subject
  -								|| c != md->lcc[*eptr]) break;
  +								|| c != md->lcc[*eptr])
  +								break;
   							eptr++;
   						}
   						while (eptr >= pp)
   							if (match
   								(eptr--, ecode, offset_top, md, ims, eptrb,
  -								 0)) return TRUE;
  +								 0))
  +								return TRUE;
   						return FALSE;
   					}
   				}
  @@ -3169,8 +3173,8 @@
   					if (minimize) {
   						for (i = min;; i++) {
   							if (match
  -								(eptr, ecode, offset_top, md, ims, eptrb,
  -								 0)) return TRUE;
  +								(eptr, ecode, offset_top, md, ims, eptrb, 0))
  +								return TRUE;
   							if (i >= max || eptr >= md->end_subject
   								|| c != *eptr++)
   								return FALSE;
  @@ -3186,7 +3190,8 @@
   						while (eptr >= pp)
   							if (match
   								(eptr--, ecode, offset_top, md, ims, eptrb,
  -								 0)) return TRUE;
  +								 0))
  +								return TRUE;
   						return FALSE;
   					}
   				}
  @@ -3246,10 +3251,10 @@
   					if (minimize) {
   						for (i = min;; i++) {
   							if (match
  -								(eptr, ecode, offset_top, md, ims, eptrb,
  -								 0)) return TRUE;
  -							if (i >= max || eptr >= md->end_subject
  -								|| c == md->lcc[*eptr++])
  +								(eptr, ecode, offset_top, md, ims, eptrb, 0))
  +								return TRUE;
  +							if (i >= max || eptr >= md->end_subject ||
  +								c == md->lcc[*eptr++])
   								return FALSE;
   						}
   					}
  @@ -3257,13 +3262,15 @@
   						const uschar *pp = eptr;
   						for (i = min; i < max; i++) {
   							if (eptr >= md->end_subject
  -								|| c == md->lcc[*eptr]) break;
  +								|| c == md->lcc[*eptr])
  +								break;
   							eptr++;
   						}
   						while (eptr >= pp)
   							if (match
   								(eptr--, ecode, offset_top, md, ims, eptrb,
  -								 0)) return TRUE;
  +								 0))
  +								return TRUE;
   						return FALSE;
   					}
   				}
  @@ -3277,8 +3284,8 @@
   					if (minimize) {
   						for (i = min;; i++) {
   							if (match
  -								(eptr, ecode, offset_top, md, ims, eptrb,
  -								 0)) return TRUE;
  +								(eptr, ecode, offset_top, md, ims, eptrb, 0))
  +								return TRUE;
   							if (i >= max || eptr >= md->end_subject
   								|| c == *eptr++)
   								return FALSE;
  @@ -3294,7 +3301,8 @@
   						while (eptr >= pp)
   							if (match
   								(eptr--, ecode, offset_top, md, ims, eptrb,
  -								 0)) return TRUE;
  +								 0))
  +								return TRUE;
   						return FALSE;
   					}
   				}
  @@ -3481,7 +3489,8 @@
   							if ((ims & PCRE_DOTALL) == 0) {
   								for (i = min; i < max; i++) {
   									if (eptr >= md->end_subject
  -										|| *eptr == '\n') break;
  +										|| *eptr == '\n')
  +										break;
   									eptr++;
   								}
   							}
  @@ -3550,8 +3559,8 @@
   
   					while (eptr >= pp) {
   						if (match
  -							(eptr--, ecode, offset_top, md, ims, eptrb,
  -							 0)) return TRUE;
  +							(eptr--, ecode, offset_top, md, ims, eptrb, 0))
  +							return TRUE;
   #ifdef L2_UT_PCRE_SUPPORT_UTF8
   						if (md->utf8)
   							while (eptr > pp && (*eptr & 0xc0) == 0x80)
  @@ -3656,9 +3665,8 @@
   			if ((ims & PCRE_CASELESS) != 0)
   				first_char = match_block.lcc[first_char];
   		}
  -		else
  -			if (!startline && extra != NULL &&
  -				(extra->options & PCRE_STUDY_MAPPED) != 0)
  +		else if (!startline && extra != NULL &&
  +				 (extra->options & PCRE_STUDY_MAPPED) != 0)
   			start_bits = extra->start_bits;
   	}
   
  @@ -3683,7 +3691,8 @@
   					start_match++;
   			else
   				while (start_match < end_subject
  -					   && *start_match != first_char) start_match++;
  +					   && *start_match != first_char)
  +					start_match++;
   		}
   
   		else if (startline) {
  @@ -3737,7 +3746,8 @@
   		match_block.start_match = start_match;
   		if (!match
   			(start_match, re->code, 2, &match_block, ims, NULL,
  -			 match_isgroup)) continue;
  +			 match_isgroup))
  +			continue;
   
   		if (using_temporary_offsets) {
   			if (offsetcount >= 4) {
  @@ -3829,7 +3839,8 @@
   					case OP_BRAZERO:
   					case OP_BRAMINZERO:
   						if (!set_start_bits
  -							(++tcode, start_bits, caseless, cd)) return FALSE;
  +							(++tcode, start_bits, caseless, cd))
  +							return FALSE;
   						dummy = 1;
   						do
   							tcode += (tcode[1] << 8) + tcode[2];
  @@ -4025,7 +4036,8 @@
   	memset(start_bits, 0, 32 * sizeof (uschar));
   	if (!set_start_bits
   		(re->code, start_bits, (re->options & PCRE_CASELESS) != 0,
  -		 &compile_block)) return NULL;
  +		 &compile_block))
  +		return NULL;
   
   	extra = (pcre_extra_st *) (pcre_malloc) (sizeof (pcre_extra_st));
   
  Index: ossp-pkg/l2/l2_ut_pcre.h
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 l2_ut_pcre.h
  --- ossp-pkg/l2/l2_ut_pcre.h	21 Dec 2001 10:50:01 -0000	1.5
  +++ ossp-pkg/l2/l2_ut_pcre.h	11 Jan 2002 10:36:14 -0000	1.6
  @@ -6,7 +6,7 @@
    *  DO NOT EDIT THIS FILE, IT WAS AUTOMATICALLY GENERATED!
    *
    *  This is an automatically generated, extremely stripped down
  - *  version of the PCRE 3.8 library from the Philip Hazel.
  + *  version of the PCRE 3.9 library from the Philip Hazel.
    *  This version is still distributed under the same original PCRE
    *  Open Source license, but Philip Hazel is no longer responsible
    *  for this version.
  @@ -48,8 +48,8 @@
   #define PCRE_PREFIX l2_util_
   
   #define PCRE_MAJOR          3
  -#define PCRE_MINOR          8
  -#define PCRE_DATE           18-Dec-2001
  +#define PCRE_MINOR          9
  +#define PCRE_DATE           02-Jan-2002
   
   #ifdef PCRE_PREFIX
   #if defined(__STDC__) || defined(__cplusplus)

From ossp-cvs-owner@ossp.org  Sun Jan 13 10:25:24 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 39C19764D1; Sun, 13 Jan 2002 10:25:24 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/petidomo petidomo-approve
Message-Id: <20020113092524.39C19764D1@mail.ossp.org>
Date: Sun, 13 Jan 2002 10:25:24 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   13-Jan-2002 10:25:24
  Branch: HEAD                             Handle: 2002011309252300

  Modified files:
    ossp-pkg/petidomo       petidomo-approve

  Log:
    avoid rejection by MTA because of forwarding loop

  Summary:
    Revision    Changes     Path
    1.2         +1  -0      ossp-pkg/petidomo/petidomo-approve
  ____________________________________________________________________________

  Index: ossp-pkg/petidomo/petidomo-approve
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 petidomo-approve
  --- ossp-pkg/petidomo/petidomo-approve	18 Jan 2001 15:31:30 -0000	1.1
  +++ ossp-pkg/petidomo/petidomo-approve	13 Jan 2002 09:25:23 -0000	1.2
  @@ -59,6 +59,7 @@
       close(FP);
       $mail =~ s|^.+?\n\n||s;
       $mail =~ s|^.+?\n>?From .+?\n||s;
  +    $mail =~ s|Delivered-To:\s*$list\s*\n||s;
       $mail = "Approved: $password\n" . $mail; # best
       #$mail =~ s|^(.+?\n\n)(.*)$|$1Approved $password\n$2|s; # not good
       open(SM, "|$sendmail $replyto") || die "cannot spawn $sendmail";

From ossp-cvs-owner@ossp.org  Mon Jan 14 13:23:22 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3B5D9764E3; Mon, 14 Jan 2002 13:23:22 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp example.conf lmtp2nntp_config.c lmtp2nn...
Message-Id: <20020114122322.3B5D9764E3@mail.ossp.org>
Date: Mon, 14 Jan 2002 13:23:22 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   14-Jan-2002 13:23:22
  Branch: HEAD                             Handle: 2002011412232100

  Modified files:
    ossp-pkg/lmtp2nntp      example.conf lmtp2nntp_config.c lmtp2nntp_config.h
                            lmtp2nntp_main.c

  Log:
    first steps toward popt

  Summary:
    Revision    Changes     Path
    1.4         +2  -2      ossp-pkg/lmtp2nntp/example.conf
    1.3         +78 -61     ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.2         +31 -1      ossp-pkg/lmtp2nntp/lmtp2nntp_config.h
    1.5         +3  -5      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/example.conf
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 example.conf
  --- ossp-pkg/lmtp2nntp/example.conf	10 Jan 2002 10:37:38 -0000	1.3
  +++ ossp-pkg/lmtp2nntp/example.conf	14 Jan 2002 12:23:21 -0000	1.4
  @@ -41,9 +41,9 @@
   
                                                       #    -l is obsolete since v1.2, see l2spec
                                                       #    -V is obsolete since v1.2; remove the "buffer" channel from l2spec
  -    l2spec          "prefix(prefix="%%b %%d %%H:%%M:%%S <%%L> lmtp2nntp[%%P]: ",timezone=local) \
  +    l2spec          'prefix(prefix="%%b %%d %%H:%%M:%%S <%%L> lmtp2nntp[%%P]: ",timezone=local) \
                          -> buffer(size=65536) \
  -                       -> file(path=%s,append=1,perm=%d)" \
  +                       -> file(path=%s,append=1,perm=%d)' \
                                                       #    -l aka --l2spec
   
       uid             gate                            #see -u aka --uid
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	10 Jan 2002 10:37:38 -0000	1.2
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	14 Jan 2002 12:23:21 -0000	1.3
  @@ -43,7 +43,7 @@
   // #include "lmtp2nntp_argz.h"
   // #include "lmtp2nntp_shpat.h"
   // #include "lmtp2nntp_daemon.h"
  -// #include "lmtp2nntp_popt.h"
  +#include "lmtp2nntp_popt.h"
   
   /* third party (linked in) */
   #include "str.h"
  @@ -74,6 +74,7 @@
   #if defined(HAVE_DMALLOC_H) && defined(DMALLOC)
   #include "dmalloc.h"
   #endif
  +#include "lmtp2nntp_config.h"
   #include "lmtp2nntp_lmtp.h"
   #include "lmtp2nntp_nntp.h"
   #include "lmtp2nntp_msg.h"
  @@ -100,51 +101,66 @@
               exit(-1);
   }
   
  -void dotconftest(void)
  +void dotconftest(int argc, char **argv) /*FIXME*/
   {
  -#if 0
  -    static const configoption_t options[] = {
  -        { "<daemon>",       ARG_NONE, foo, NULL, CTX_ALL     },
  -        { "childsmax",      ARG_STR,  foo, NULL, CTX_DAEMON  },
  -        { "daemonize",      ARG_STR,  foo, NULL, CTX_DAEMON  },
  -        { "pidfile",        ARG_STR,  foo, NULL, CTX_DAEMON  },
  -        { "acl",            ARG_STR,  foo, NULL, CTX_DAEMON  },
  -        { "bind",           ARG_STR,  foo, NULL, CTX_DAEMON  },
  -        { "</daemon>",      ARG_NONE, foo, NULL, CTX_DAEMON  },
  -        { "<server>",       ARG_NONE, foo, NULL, CTX_ALL     },
  -        { "timeoutaccept",  ARG_STR,  foo, NULL, CTX_SERVER  },
  -        { "timeoutread",    ARG_STR,  foo, NULL, CTX_SERVER  },
  -        { "timeoutwrite",   ARG_STR,  foo, NULL, CTX_SERVER  },
  -        { "size",           ARG_STR,  foo, NULL, CTX_SERVER  },
  -        { "mailfrom",       ARG_STR,  foo, NULL, CTX_SERVER  },
  -        { "nodename",       ARG_STR,  foo, NULL, CTX_SERVER  },
  -        { "</server>",      ARG_NONE, foo, NULL, CTX_SERVER  },
  -        { "<client>",       ARG_NONE, foo, NULL, CTX_ALL     },
  -        { "client",         ARG_STR,  foo, NULL, CTX_CLIENT  },
  -        { "destination",    ARG_STR,  foo, NULL, CTX_CLIENT  },
  -        { "operationmode",  ARG_STR,  foo, NULL, CTX_CLIENT  },
  -        { "timeoutconnect", ARG_STR,  foo, NULL, CTX_CLIENT  },
  -        { "timeoutread",    ARG_STR,  foo, NULL, CTX_CLIENT  },
  -        { "timeoutwrite",   ARG_STR,  foo, NULL, CTX_CLIENT  },
  -        { "</client>",      ARG_NONE, foo, NULL, CTX_CLIENT  },
  -        { "<gateway>",      ARG_NONE, foo, NULL, CTX_ALL     },
  -        { "groupmode",      ARG_STR,  foo, NULL, CTX_GATEWAY },
  -        { "l2spec",         ARG_STR,  foo, NULL, CTX_GATEWAY },
  -        { "uid",            ARG_STR,  foo, NULL, CTX_GATEWAY },
  -        { "newsgroup",      ARG_STR,  foo, NULL, CTX_GATEWAY },
  -        { "</gateway>",     ARG_NONE, foo, NULL, CTX_GATEWAY },
  -        { "<message>",      ARG_NONE, foo, NULL, CTX_ALL     },
  -        { "headervalue",    ARG_STR,  foo, NULL, CTX_MESSAGE },
  -        { "restrictheader", ARG_STR,  foo, NULL, CTX_MESSAGE },
  -        { "</message>",     ARG_NONE, foo, NULL, CTX_MESSAGE },
  -        LAST_OPTION
  +    popt_context poptCon;   /* context for parsing command-line options */
  +    lmtp2nntp_config_t *ctx;
  +    char *cpBuf;
  +    struct popt_option poptTable[] = {
  +        { "childsmax",      'C', POPT_ARG_STRING, NULL, 'C', "foo", "childsmax" },
  +        { "daemonize",      'D', POPT_ARG_NONE,   NULL, 'D', "foo", NULL },
  +        { "kill",           'K', POPT_ARG_NONE,   NULL, 'K', "foo", NULL },
  +        { "pidfile",        'P', POPT_ARG_STRING, NULL, 'P', "foo", "pidfile" },
  +        { "veryverbose",    'V', POPT_ARG_NONE,   NULL, 'V', "foo", NULL },
  +        { "acl",            'a', POPT_ARG_STRING, NULL, 'a', "foo", "addr[/mask]" },
  +        { "bind",           'b', POPT_ARG_STRING, NULL, 'b', "foo", "addr[:port]|-|path[:perms]" },
  +        { "client",         'c', POPT_ARG_STRING, NULL, 'c', "foo", "addr[:port]" },
  +        { "destination",    'd', POPT_ARG_STRING, NULL, 'd', "foo", "addr[:port]" },
  +        { "groupmode",      'g', POPT_ARG_STRING, NULL, 'g', "foo", "groupmode" },
  +        { "headervalue",    'h', POPT_ARG_STRING, NULL, 'h', "foo", "header: value" },
  +        { "include",        'i', POPT_ARG_STRING, NULL, 'i', "foo", "configfile" },
  +        { "size",           's', POPT_ARG_STRING, NULL, 's', "foo", "bytes" },
  +        { "timeout",        't', POPT_ARG_STRING, NULL, 't', "foo", "name=sec" },
  +        { "mailfrom",       'm', POPT_ARG_STRING, NULL, 'm', "foo", "regex" },
  +        { "nodename",       'n', POPT_ARG_STRING, NULL, 'n', "foo", "nodename" },
  +        { "operationmode",  'o', POPT_ARG_STRING, NULL, 'o', "foo", "post|feed" },
  +        { "l2spec",         'l', POPT_ARG_STRING, NULL, 'l', "foo", "spec" },
  +        { "uid",            'u', POPT_ARG_STRING, NULL, 'u', "foo", "number|name" },
  +        { "restrictheader", 'r', POPT_ARG_STRING, NULL, 'r', "foo", "regex" },
  +        { "newsgroup",      NUL, POPT_ARG_STRING
  +                        |POPT_ARGFLAG_DOC_HIDDEN, NULL, 1,   NULL,  NULL },
  +        POPT_AUTOHELP
  +        { NULL,               0, 0,               NULL, 0 }
       };
  -#endif
  + 
  +    ctx = malloc(sizeof(lmtp2nntp_config_t));
  +    ctx->option_childsmax = 10;
   
  -    const char *filename = "example.conf";
  -    char *cpBuf;
  +    {
  +        char c;
  +        char *cp;
  +
  +        poptCon = popt_getcontext(NULL, argc, (const char **)argv, poptTable, 0);
  +        popt_setotheroptionhelp(poptCon, "[OPTIONS]* [newsgroup ...]");
  +        printf("DEBUG: argc=%d\n", argc);
  +        if (argc < 2) {
  +            popt_printusage(poptCon, stderr, 0);
  +            exit(1);
  +        }
  +        while ((c = popt_getnextopt(poptCon)) >= 0) {
  +            printf("DEBUG: popt_getnextopt returned %d='%c'\n", (int)c, c);
  +        }
  +        while ((cp = popt_getarg(poptCon)) != NULL) {
  +            printf("DEBUG: popt_getarg returned \"%s\"\n", cp);
  +        }
  +
  +        printf("DEBUG: popt_getnextopt ended with \"%s\"(%d)\n", popt_strerror((int)c), (int)c);
  +        popt_freecontext(poptCon);
  +        return;
  +    }
   
       {
  +        const char *filename = "example.conf";
           struct stat sb;
           int fd;
   
  @@ -163,23 +179,22 @@
       //FIXME printf("DEBUG: *** 1 *** file as it was just read in ***\n%s***\n", cpBuf);
   
       {
  -        char *cpI; /* pointer to next character to be read */
  -        char *cpO; /* pointer to next character to be written when eliminating backslash+newline at a line continuation */
  -        char *cpL; /* pointer to start of line */
  -        int pline; /* current physical (disregarding line continuation) line number */
  -        int lline; /* current logical lines first physical line number */
  -        int eline; /* flag signaling empty or just whitespace-filled line */
  -        char c; /* current character */
  -        char p; /* previous character */
  -        int eof; /* flag signaling end of file detected */
  +        char *cpI;  /* pointer to next character to be read */
  +        char *cpO;  /* pointer to next character to be written. Used for eliminating
  +                       backslash+newline at a line continuation */
  +        char *cpL;  /* pointer to start of line */
  +        int pline;  /* current physical (disregarding line continuation) line number */
  +        int lline;  /* current logical lines first physical line number */
  +        int eline;  /* flag signaling empty or just whitespace-filled line */
  +        char c;     /* current character */
  +        char p;     /* previous character */
  +        int eof;    /* flag signaling end of file detected */
   
           cpI = cpBuf;
           cpO = cpBuf;
           eof = FALSE;
           pline = 1;
  -        p = NUL; /* prefill previous character with fake value to avoid false
  -        line continuation detection when a newline is seen as the first
  -        character in the buffer */
  +        p = NUL;
   
           cpL = cpO;
           lline = pline;
  @@ -201,22 +216,24 @@
                       if (!eline) { /* process logical line unless it's empty */
                           *(cpO-1) = NUL;
                           if (lline == (pline-1))
  -                            printf("DEBUG: line[%3d] = ***%s***\n", lline, cpL);
  +                            ;//printf("DEBUG: line[%3d] = ***%s***\n", lline, cpL);
                           else
  -                            printf("DEBUG: [%3d-%3d] = ***%s***\n", lline, pline-1, cpL);
  +                            ;//printf("DEBUG: [%3d-%3d] = ***%s***\n", lline, pline-1, cpL);
                           {
                               char *cp = cpL;
  -                            char *token;
  +                            char *command;
                               char *value;
   
  -                            if ((token = str_token(&cp, " ", "\"'", "#", STR_STRIPQUOTES|STR_BACKSLASHESC)) == NULL)
  -                                printf("DEBUG: no token - comment only\n");
  +                            if ((command = str_token(&cp, " \t", "\"'", "#", STR_STRIPQUOTES|STR_BACKSLASHESC)) == NULL)
  +                                ;//printf("DEBUG: no command - comment only\n");
                               else {
  -                                printf("DEBUG:     token = ***%s***\n", token);
  -                                if ((value = str_token(&cp, "", "\"'", "#", STR_STRIPQUOTES|STR_BACKSLASHESC)) == NULL)
  +                                printf("DEBUG:   command = ***%s***\n", command);
  +                                if ((value = str_token(&cp, " \t", "\"'", "#", STR_STRIPQUOTES|STR_BACKSLASHESC)) == NULL)
                                       printf("DEBUG: no value - section\n");
  -                                else
  +                                else {
  +                                    ;//while(isspace((int)*value)) value++;
                                       printf("DEBUG:     value = ***%s***\n", value);
  +                                }
                               }
                           }
                       }
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 lmtp2nntp_config.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.h	9 Jan 2002 13:54:25 -0000	1.1
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.h	14 Jan 2002 12:23:21 -0000	1.2
  @@ -24,5 +24,35 @@
   **  lmtp2nntp.c: LMTP to NNTP configuration parsing
   */
   
  -void dotconftest(void);
  +#include "lmtp2nntp_global.h"
  +void dotconftest(int, char **); //FIXME
  +
  +typedef struct {
  +    int             option_childsmax;
  +
  +    char           *option_logfile;
  +    int             option_groupmode;
  +    int             option_operationmode;
  +    char           *option_operationmodefakestatus;
  +    char           *option_operationmodefakedsn;
  +    int             option_maxmessagesize;
  +    char           *option_azHeaderValuePairs;
  +    size_t          option_asHeaderValuePairs;
  +    int             option_timeout_lmtp_accept;
  +    int             option_timeout_lmtp_read;
  +    int             option_timeout_lmtp_write;
  +    int             option_timeout_nntp_connect;
  +    int             option_timeout_nntp_read;
  +    int             option_timeout_nntp_write;
  +    char           *option_mailfrom;
  +    char           *option_restrictheader;
  +    unsigned int    option_levelmask;
  +    char           *option_pidfile;
  +    int             option_killflag;
  +    uid_t           option_uid;
  +    int             option_daemon;
  +    int             option_aclc;
  +    //struct acl      option_acl[MAXACLS];
  +    int             option_veryverbose;
  +} lmtp2nntp_config_t;
   
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	9 Jan 2002 13:54:25 -0000	1.4
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	14 Jan 2002 12:23:21 -0000	1.5
  @@ -43,7 +43,6 @@
   #include "lmtp2nntp_shpat.h"
   #include "lmtp2nntp_daemon.h"
   #include "lmtp2nntp_popt.h"
  -#include "lmtp2nntp_config.h"
   
   /* third party (linked in) */
   #include "str.h"
  @@ -74,6 +73,7 @@
   #if defined(HAVE_DMALLOC_H) && defined(DMALLOC)
   #include "dmalloc.h"
   #endif
  +#include "lmtp2nntp_config.h"
   #include "lmtp2nntp_lmtp.h"
   #include "lmtp2nntp_nntp.h"
   #include "lmtp2nntp_msg.h"
  @@ -207,7 +207,6 @@
       lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx;
       const char *name;
       size_t len;
  -    size_t n;
       char *cp;
       var_rc_t rc;
   
  @@ -484,8 +483,6 @@
       char         *cpHeadername;
       char         *cpHeadervalue;
   
  -dotconftest(); return 0; /*FIXME*/
  -
       /* drop effective uid/gid priviledges */
       seteuid(getuid());
       setegid(getgid());
  @@ -505,6 +502,7 @@
           CU(ERR_EXECUTION);
       ctx->ctx.vp = ctx;
       ctx->progname = strdup(argv[0]);
  +    ctx->option_childsmax = 10;
       ctx->option_logfile = NULL;
       ctx->option_groupmode = GROUPMODE_ARG;
       ctx->option_operationmode = OPERATIONMODE_FAKE;
  @@ -527,7 +525,6 @@
       ctx->option_uid = getuid();
       ctx->option_daemon = FALSE;
       ctx->option_veryverbose = FALSE;
  -    ctx->option_childsmax = 10;
       ctx->active_childs = 0;
       ctx->l2_env = NULL;
       ctx->l2 = NULL;
  @@ -562,6 +559,7 @@
           fprintf(stderr, "%s:Error: uname failed \"%s\"\n", ctx->progname, strerror(errno));
           CU(ERR_EXECUTION);
       }
  +dotconftest(argc, argv); return 0; //FIXME
   
       /*POD B<lmtp2nntp> */
   

From ossp-cvs-owner@ossp.org  Mon Jan 14 15:49:08 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5E234764E3; Mon, 14 Jan 2002 15:49:08 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp Makefile.in lmtp2nntp_lh.c lmtp2nntp_lh...
Message-Id: <20020114144908.5E234764E3@mail.ossp.org>
Date: Mon, 14 Jan 2002 15:49:08 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   14-Jan-2002 15:49:08
  Branch: HEAD                             Handle: 2002011414490700

  Added files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_lh.c lmtp2nntp_lh.h
  Modified files:
    ossp-pkg/lmtp2nntp      Makefile.in

  Log:
    include a stripped down version of OSSP act's linae hashing library

  Summary:
    Revision    Changes     Path
    1.37        +3  -3      ossp-pkg/lmtp2nntp/Makefile.in
    1.1         +553 -0     ossp-pkg/lmtp2nntp/lmtp2nntp_lh.c
    1.1         +40 -0      ossp-pkg/lmtp2nntp/lmtp2nntp_lh.h
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.36 -r1.37 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	10 Jan 2002 10:37:38 -0000	1.36
  +++ ossp-pkg/lmtp2nntp/Makefile.in	14 Jan 2002 14:49:07 -0000	1.37
  @@ -44,9 +44,9 @@
   POD2MAN     = pod2man
   
   PROG = lmtp2nntp
  -HDRS = lmtp2nntp_global.h lmtp2nntp_daemon.h lmtp2nntp_lmtp.h lmtp2nntp_nntp.h lmtp2nntp_argz.h lmtp2nntp_shpat.h lmtp2nntp_msg.h lmtp2nntp_popt.h lmtp2nntp_config.h
  -SRCS = lmtp2nntp_main.c   lmtp2nntp_daemon.c lmtp2nntp_lmtp.c lmtp2nntp_nntp.c lmtp2nntp_argz.c lmtp2nntp_shpat.c lmtp2nntp_msg.c lmtp2nntp_popt.c lmtp2nntp_config.c lmtp2nntp_version.c 
  -OBJS = lmtp2nntp_main.o   lmtp2nntp_daemon.o lmtp2nntp_lmtp.o lmtp2nntp_nntp.o lmtp2nntp_argz.o lmtp2nntp_shpat.o lmtp2nntp_msg.o lmtp2nntp_popt.o lmtp2nntp_config.o lmtp2nntp_version.o
  +HDRS = lmtp2nntp_global.h lmtp2nntp_daemon.h lmtp2nntp_lmtp.h lmtp2nntp_nntp.h lmtp2nntp_argz.h lmtp2nntp_shpat.h lmtp2nntp_msg.h lmtp2nntp_popt.h lmtp2nntp_config.h lmtp2nntp_lh.h
  +SRCS = lmtp2nntp_main.c   lmtp2nntp_daemon.c lmtp2nntp_lmtp.c lmtp2nntp_nntp.c lmtp2nntp_argz.c lmtp2nntp_shpat.c lmtp2nntp_msg.c lmtp2nntp_popt.c lmtp2nntp_config.c lmtp2nntp_lh.c lmtp2nntp_version.c 
  +OBJS = lmtp2nntp_main.o   lmtp2nntp_daemon.o lmtp2nntp_lmtp.o lmtp2nntp_nntp.o lmtp2nntp_argz.o lmtp2nntp_shpat.o lmtp2nntp_msg.o lmtp2nntp_popt.o lmtp2nntp_config.o lmtp2nntp_lh.o lmtp2nntp_version.o
   
   SUBDIRS = @SUBDIR_STR@ @SUBDIR_L2@ @SUBDIR_SA@ @SUBDIR_VAR@
   
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_lh.c
  ============================================================
  $ cvs update -p -r1.1 lmtp2nntp_lh.c
  
  /* 
  **  Act - Abstract Container Type Library
  **  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  **
  **  This file is part of Act, a library for dealing with Abstract 
  **  Container Types which can be found at http://www.ossp.org/pkg/act/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  */
  
  /*
  **  This module implements a Dynamic Hash Table, based on WITOLD LITWIN
  **  and PER-AKE LARSON's ``Linear Hashing'' algorithm (1980/1988),
  **  implemented on top of a two-level virtual array with separate
  **  collision chains as the backend data structure. Some ideas were
  **  taken over from MIKAEL PETTERSON's Linear Hashing enhancements
  **  (1993).
  **   
  **  Linear Hashing can be summarized as following:
  **
  **  o drawback of classical hashing is that the hash table is of
  **    fixed size; if table is filled, the table has to be expanded;
  **    unfortunately this requires re-hashing of all existing elements.
  **
  **  o Extendible Hashing solves this problem by allowing the table
  **    to grow without complete re-hashing of elements every time;
  **    unfortunately the table must double in size to grow - not a
  **    problem for small tables, but a disadvantage for large ones.
  **
  **  o Linear Hashing allows the table to grow one bucket at a time:
  **    table is extended when its load factor passes a critical value; buckets
  **    are split "in sequence" starting at index 0 and ending at 2^n; two
  **    hashing functions are always "active" - one for split buckets and one
  **    for unsplit; when last bucket (the 2^n-th one) is split, the table has
  **    been doubled in size, and a new cycle of splitting begins starting at
  **    bucket 0.
  **
  **  The internal structure of the linear hashing table is illustrated
  **  in the following figure:
  **
  **  -----BEGIN EMBEDDED OBJECT-----
  **  Content-type: application/fig
  **  Description: linear hashing structure layout
  **  Version: eo/1.0
  **  H4sIACfenzkCA62WTYvbMBCGz+tfIeixJOhb9rnQsrC3XntxE7ExdZ0ldhf233dG
  **  sr6aNllRE2K90USPpNGMRx8+P34hYs+bp346zof+xTaf7LTYS/M4HU52bp7sAr8I
  **  aRile0qbr8P0PNpmxxvGKSW84QQ/jOwYMURRQlFx+CtK9wMb1TwQBlYB3R1NLX6x
  **  P7TQX0OkK5IbmguNNGdLagXDT/jyzoM5PCLYRC6HzRIJ/+BKZYIJVGhLCoyVXNhm
  **  4EXFJV15SaG1Eu1Z5UPIsNSk0FDhZt6Gxaq4Aa86JDprUn8su725bIFdTOM68fgz
  **  1foTLZRWNWgd0UYVqo0xklQVWvKAlkIVCoHemlQduo3oThXKAVtaKI9mKxqOLJwj
  **  zc8RbbJ5QMGgn2i0EshfTGjIIskV8Y4xmfDRmUXizWnMvVm06/KZHloMSPcakVvs
  **  gwvYh49vE9PJxCCgmzlMUHSPgdmEKJVWZTz970Q64rtSubDgm00kecBLVSo30VWs
  **  7djNmfi7fIeK822oyVF6O2rmFb4htY3UNlHD60HQe+9LlzVGpdasRTC01yWJ/RsY
  **  0m896SBczXS2pGR90XA56EpFplp1/WC0zgnU+c2XikyZUCoyVedfHdFGFSpeLDJV
  **  hXbp6oCuVGTKhFKRqTp0G9GdKpQJpSJTIYx9KKdjZLU1I5bQKGR5Ldpgji6go/BX
  **  m3iNkd4L+GAaotU7CMDuPqkZ5BoDjovg43Cxh+V8eftGKbseyfbK0DaM1OFWgzey
  **  2T7/hHvx/PeB5ZTS1U6fOMv5ZTfaVzveGwgn28FAoXCtuPHDeRyHeThP5HDqh+k9
  **  E7P19efi/od9+3jsl/4dEzNm0O04EkP9dbgsv/qRnPr5RJb++2gd4zf8ksj2KwwA
  **  AA==
  **  -----END EMBEDDED OBJECT-----
  **
  **  As you can see, it consists of four classes of memory chunks:
  **  1. a top-level structure which acts as the primary handle
  **  2. the virtual hash table consisting of a single (growing) 
  **     directory and one or more (fixed size) directory segments
  **  3. the collision chains consisting of element structures
  **  4. the actual elements consisting of key+value structures
  */
  
  #include <stdlib.h>
  #include <string.h>
  
  #ifndef FALSE
  #define FALSE 0
  #endif
  #ifndef TRUE
  #define TRUE !FALSE
  #endif
  
  #include "lmtp2nntp_lh.h"
  
  /* fixed size (number of pointers) of the directory and of each segment */
  #define INITDIRSIZE  256 /* can be an arbitrary value */
  #define SEGMENTSIZE  512 /* has to be a power of 2 for below arithmetic */
  
  /* the borders for the hash table load */
  #define MINLOADFCTR  1   /* should be between 0 and 1 */
  #define MAXLOADFCTR  2   /* should be between 2 and 4 */
  
  /* the per-element structure (keep as small as possible!) */
  typedef struct element_st element_t;
  struct element_st {
      element_t    *e_next;    /* pointer to next element in collision chain */
      unsigned long e_hash;    /* cached hash value of element (rehashing optimization) */
      void         *e_keyptr;  /* pointer to key (= also pointer to key+data memory chunk) */
      void         *e_datptr;  /* pointer to data in key+data memory chunk */
      void         *e_endptr;  /* pointer to end of key+data memory chunk */
  };
  
  /* the hash table segments */
  typedef struct segment_st segment_t;
  struct segment_st {
      element_t *s_element[SEGMENTSIZE]; /* array of pointers to elements */
  }; 
  
  /* the top-level hash table structure */
  struct lh_st {
      unsigned int   h_p;         /* pointer to start of unsplit region */
      unsigned int   h_pmax;      /* pointer to end of unsplit region */
      int            h_slack;     /* grow/shrink indicator */
      unsigned       h_dirsize;   /* current size of directory */
      segment_t    **h_dir;       /* pointer to directory */
  };
  
  /* on-the-fly calculate index into directory and segment from virtual array index */
  #define DIRINDEX(addr) (int)((addr) / SEGMENTSIZE)
  #define SEGINDEX(addr) (int)((addr) % SEGMENTSIZE)
  
  /* on-the-fly calculate lengths of key and data to reduce memory in element_t */
  #define el_keylen(el) ((char *)((el)->e_datptr)-(char *)((el)->e_keyptr))
  #define el_datlen(el) ((char *)((el)->e_endptr)-(char *)((el)->e_datptr))
  
  /*
   * BJDDJ Hash Function (Bob Jenkins, Dr. Dobbs Journal):
   * This is a very complex but also very good hash function, as proposed
   * in the March'97 issue of Dr. Dobbs Journal (DDJ) by Bob Jenkins (see
   * http://burtleburtle.net/bob/hash/doobs.html for online version). He
   * showed that this hash function has both very good distribution and
   * performance and our own hash function comparison confirmed this. The
   * only difference to the original function of B.J. here is that our
   * version doesn't provide the `level' (= previous hash) argument for
   * consistency reasons with the other hash functions (i.e. same function
   * signature). It can be definetely recommended as a good general
   * purpuse hash function.
   */
  static long 
  lh_hash(
      register unsigned char *k,
      register size_t length)
  {
      register long a,b,c,len;
  
      /* some abbreviations */
  #define ub4 long
  #define mix(a,b,c) { \
          a -= b; a -= c; a ^= (c>>13); \
          b -= c; b -= a; b ^= (a<< 8); \
          c -= a; c -= b; c ^= (b>>13); \
          a -= b; a -= c; a ^= (c>>12); \
          b -= c; b -= a; b ^= (a<<16); \
          c -= a; c -= b; c ^= (b>> 5); \
          a -= b; a -= c; a ^= (c>> 3); \
          b -= c; b -= a; b ^= (a<<10); \
          c -= a; c -= b; c ^= (b>>15); \
      }
  
      /* setup the internal state */
      len = length;
      a = b = 0x9e3779b9;  /* the golden ratio; an arbitrary value */
      c = 0;
  
      /* handle most of the key */
      while (len >= 12) {
          a += (k[0] +((ub4)k[1]<<8) +((ub4)k[ 2]<<16) +((ub4)k[ 3]<<24));
          b += (k[4] +((ub4)k[5]<<8) +((ub4)k[ 6]<<16) +((ub4)k[ 7]<<24));
          c += (k[8] +((ub4)k[9]<<8) +((ub4)k[10]<<16) +((ub4)k[11]<<24));
          mix(a,b,c);
          k += 12; len -= 12;
      }
  
      /* handle the last 11 bytes */
      c += length;
      switch(len) { 
          /* all the case statements fall through */
          case 11: c+=((ub4)k[10]<<24);
          case 10: c+=((ub4)k[ 9]<<16);
          case 9 : c+=((ub4)k[ 8]<< 8);
          /* the first byte of c is reserved for the length */
          case 8 : b+=((ub4)k[ 7]<<24);
          case 7 : b+=((ub4)k[ 6]<<16);
          case 6 : b+=((ub4)k[ 5]<< 8);
          case 5 : b+=k[4];
          case 4 : a+=((ub4)k[ 3]<<24);
          case 3 : a+=((ub4)k[ 2]<<16);
          case 2 : a+=((ub4)k[ 1]<< 8);
          case 1 : a+=k[0];
          /* case 0: nothing left to add */
      }
      mix(a,b,c);
  
  #undef ub4
  #undef mix
  
      /* report the result */
      return c;
  }
  
  /* create the hash table structure */
  lh_t *lh_new(void)
  {
      lh_t *h;
  
      /* allocate hash structure */
      if ((h = (lh_t *)malloc(sizeof(lh_t))) == NULL)
          return NULL;
  
      /* allocate and clear hash table directory */
      h->h_dirsize = INITDIRSIZE;
      if ((h->h_dir = (segment_t **)malloc(h->h_dirsize * sizeof(segment_t *))) == NULL) {
          free(h);
          return NULL;
      }
      memset(h->h_dir, 0, h->h_dirsize * sizeof(segment_t *));
  
      /* allocate and clear first segment of hash table array */
      if ((h->h_dir[0] = (segment_t *)malloc(sizeof(segment_t))) == NULL) {
          free(h->h_dir); 
          free(h);
          return NULL;
      }
      memset(h->h_dir[0], 0, sizeof(segment_t));
  
      /* initialize hash table control attributes */
      h->h_p     = 0;
      h->h_pmax  = SEGMENTSIZE;
      h->h_slack = SEGMENTSIZE * MAXLOADFCTR;
  
      return h;
  }
  
  /* expand the hash table */
  static void lh_expand(lh_t *h)
  {
      unsigned int pmax0;
      unsigned int newaddr;
      segment_t *seg;
      element_t **pelold;
      element_t *el, *headofold, *headofnew, *next;
      unsigned int n;
      
      /* calculate next new address */
      pmax0   = h->h_pmax;
      newaddr = pmax0 + h->h_p;
  
      /* have to enlarge directory? */
      if (h->h_dirsize <= DIRINDEX(newaddr)) {
          n = h->h_dirsize * sizeof(segment_t *);
          h->h_dirsize *= 2;
          if ((h->h_dir = (segment_t **)realloc(
                           h->h_dir, h->h_dirsize*sizeof(segment_t *))) == NULL)
               return;
          memset((char *)h->h_dir+n, 0, n);
      }
      
      /* have to create a new table segment? */
      if (SEGINDEX(newaddr) == 0) {
          if ((seg = (segment_t *)malloc(sizeof(segment_t))) == NULL)
              return;
          memset(seg, 0, sizeof(segment_t));
          h->h_dir[DIRINDEX(newaddr)] = seg;
      }
  
      /* locate P-element */
      pelold = &h->h_dir[DIRINDEX(h->h_p)]->s_element[SEGINDEX(h->h_p)];
  
      /* adjust the state variables */
      if (++(h->h_p) >= h->h_pmax) {
          h->h_pmax = (h->h_pmax << 1); /* == h->h_pmax * 2 */
          h->h_p = 0;
      }
      h->h_slack += MAXLOADFCTR;
      
      /* relocate and split between P-element new element */
      headofold = NULL;
      headofnew = NULL;
      for (el = *pelold; el != NULL; el = next) {
          next = el->e_next;
          if (el->e_hash & pmax0) {
              el->e_next = headofnew;
              headofnew  = el;
          } else {
              el->e_next = headofold;
              headofold  = el;
          }
      }
      *pelold = headofold;
      h->h_dir[DIRINDEX(newaddr)]->s_element[SEGINDEX(newaddr)] = headofnew;
  
      return;
  }
  
  /* shrink hash table */
  static void lh_shrink(lh_t *h)
  {
      segment_t *lastseg;
      element_t **pel;
      unsigned int oldlast;
      unsigned int dirsize;
      void *dir;
  
      /* calculate old last element */
      oldlast = h->h_p + h->h_pmax - 1;
  
      /* we cannot shrink below one segment */
      if (oldlast == 0)
          return;
  
      /* adjust the state variables */
      if (h->h_p == 0) {
          h->h_pmax = (h->h_pmax >> 1); /* == h->h_pmax / 2 */;
          h->h_p = h->h_pmax - 1;
      } else
          h->h_p--;
      h->h_slack -= MAXLOADFCTR;
  
      /* relocate the lost old last element to the end of the P-element */
      pel = &h->h_dir[DIRINDEX(h->h_p)]->s_element[SEGINDEX(h->h_p)];
      while (*pel != NULL)
          pel = &((*pel)->e_next);
      lastseg = h->h_dir[DIRINDEX(oldlast)];
      *pel = lastseg->s_element[SEGINDEX(oldlast)];
      lastseg->s_element[SEGINDEX(oldlast)] = NULL;
  
      /* if possible, deallocate the last segment */
      if (SEGINDEX(oldlast) == 0) {
          h->h_dir[DIRINDEX(oldlast)] = NULL;
          free(lastseg);
      }
  
      /* if possible, deallocate the end of the directory */
      if (h->h_dirsize > INITDIRSIZE && DIRINDEX(oldlast) < h->h_dirsize/2) {
          dirsize = (h->h_dirsize >> 1); /* == h->h_dirsize / 2 */
          if ((dir = (segment_t **)realloc(
                     h->h_dir, dirsize*sizeof(segment_t *))) != NULL) {
              h->h_dirsize = dirsize;
              h->h_dir = dir;
          }
      }
      return;
  }
  
  /* insert element into hash table */
  int lh_insert(lh_t *h, void *keyptr, int keylen, void *datptr, int datlen, int override)
  {
      unsigned int hash, addr;
      element_t *el, **pel;
      int bFound;
      void *vp;
  
      /* argument consistency check */
      if (h == NULL || keyptr == NULL || keylen <= 0)
          return FALSE;
  
      /* calculate hash address */
      hash = lh_hash(keyptr, keylen);
      addr = hash % h->h_pmax; /* unsplit region */
      if (addr < h->h_p)
          addr = hash % (h->h_pmax << 1); /* split region */
  
      /* locate hash element's collision list */
      pel = &h->h_dir[DIRINDEX(addr)]->s_element[SEGINDEX(addr)];
  
      /* check whether element is already in the hash table */
      bFound = FALSE;
      for (el = *pel; el != NULL; el = el->e_next) {
          if (   el->e_hash == hash 
              && el_keylen(el) == keylen
              && memcmp(el->e_keyptr, keyptr, el_keylen(el)) == 0) {
              bFound = TRUE;
              break;
          }
      }
  
      /* only override on request */
      if (bFound && !override)
          return FALSE;
  
      /* create a duplicate of key and data */
      if ((vp = malloc(keylen+datlen)) == NULL)
          return FALSE;
      memmove(vp, keyptr, keylen);
      memmove((char *)vp+keylen, datptr, datlen);
      keyptr = vp;
      datptr = (char *)vp+keylen;
  
      if (bFound) {
          /* reuse existing element by freeing old contents */
          if (el->e_keyptr != NULL)
              free(el->e_keyptr);
      }
      else {
          /* allocate new element and chain into list */
          if ((el = (element_t *)malloc(sizeof(element_t))) == 0) {
              free(vp);
              return FALSE;
          }
          while (*pel != NULL)
              pel = &((*pel)->e_next);
          el->e_next = *pel;
          *pel = el;
      }
  
      /* insert contents into element structure */
      el->e_keyptr = keyptr;
      el->e_datptr = datptr;
      el->e_endptr = (char *)datptr+datlen;
      el->e_hash   = hash;
  
      /* do we need to expand the table now? */
      if (--(h->h_slack) < 0)
          lh_expand(h);
  
      return TRUE;
  }
  
  /* lookup an element in hash table */
  int lh_lookup(lh_t *h, void *keyptr, int keylen, void **datptr, int *datlen)
  {
      unsigned int hash, addr;
      element_t *el, **pel;
  
      /* argument consistency check */
      if (h == NULL || keyptr == NULL || keylen <= 0)
          return FALSE;
  
      /* calculate hash address */
      hash = lh_hash(keyptr, keylen);
      addr = hash % h->h_pmax; /* unsplit region */
      if (addr < h->h_p)
          addr = hash % (h->h_pmax << 1); /* split region */
  
      /* locate hash element collision list */
      pel = &h->h_dir[DIRINDEX(addr)]->s_element[SEGINDEX(addr)];
  
      /* search for element in collision list */
      for (el = *pel; el != NULL; el = el->e_next) {
          if (   el->e_hash == hash 
              && el_keylen(el) == keylen
              && memcmp(el->e_keyptr, keyptr, el_keylen(el)) == 0) {
              /* provide results */
              if (datptr != NULL)
                  *datptr = el->e_datptr;
              if (datlen != NULL)
                  *datlen = el_datlen(el);
              return TRUE;
          }
      }
      return FALSE;
  }
  
  /* delete an element in hash table */
  int lh_delete(lh_t *h, void *keyptr, int keylen)
  {
      unsigned int hash, addr;
      element_t *el, *lel, **pel;
      int rv;
  
      /* argument consistency check */
      if (h == NULL || keyptr == NULL || keylen <= 0)
          return FALSE;
  
      /* calculate hash address */
      hash = lh_hash(keyptr, keylen);
      addr = hash % h->h_pmax; /* unsplit region */
      if (addr < h->h_p)
          addr = hash % (h->h_pmax << 1); /* split region */
  
      /* locate hash element collision chain */
      pel = &h->h_dir[DIRINDEX(addr)]->s_element[SEGINDEX(addr)];
  
      /* search for element in collision chain */
      rv = FALSE;
      for (lel = NULL, el = *pel; el != NULL; lel = el, el = el->e_next) {
          if (   el->e_hash == hash 
              && el_keylen(el) == keylen
              && memcmp(el->e_keyptr, keyptr, el_keylen(el)) == 0) {
              /* free key+data memory chunk */
              if (el->e_keyptr != NULL)
                  free(el->e_keyptr);
              /* remove element from collision chain */
              if (lel == NULL)
                  *pel = el->e_next; 
              else
                  lel->e_next = el->e_next;
              /* deallocate element structure */
              free(el);
              rv = TRUE;
              break;
          }
      }
  
      /* do we need to shrink the table now? */
      if (++(h->h_slack) > ((h->h_pmax + h->h_p) * (MAXLOADFCTR-MINLOADFCTR)))
          lh_shrink(h);
  
      return rv;
  }
  
  /* destroy the whole hash table */
  int lh_free(lh_t *h)
  {
      element_t *el, **pel;
      unsigned int i, j;
  
      /* argument consistency check */
      if (h == NULL)
          return FALSE;
  
      /* deallocate all segment's entries */
      for (i = 0; i < h->h_dirsize; i++) {
          if (h->h_dir[i] == NULL)
              continue;
          /* deallocate all collision chains */
          for (j = 0; j < SEGMENTSIZE; j++) {
              if (h->h_dir[i]->s_element[j] == NULL)
                  continue;
              /* deallocate all elements in collision chain */
              pel = &h->h_dir[i]->s_element[j];
              for (el = *pel; el != NULL; el = el->e_next) {
                  /* deallocate key+data memory chunk */
                  if (el->e_keyptr != NULL)
                      free(el->e_keyptr);
              }
          }
          free(h->h_dir[i]);
      }
  
      /* deallocate hash table directory */
      free(h->h_dir);
  
      /* deallocate hash table top-level structure */
      free(h);
  
      return TRUE;
  }
  
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_lh.h
  ============================================================
  $ cvs update -p -r1.1 lmtp2nntp_lh.h
  /* 
  **  Act - Abstract Container Type Library
  **  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  **
  **  This file is part of Act, a library for dealing with Abstract 
  **  Container Types which can be found at http://www.ossp.org/pkg/act/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  */
  
  #ifndef __LH_H__
  #define __LH_H__
  
  struct lh_st;
  typedef struct lh_st lh_t;
  
  lh_t *lh_new   (void);
  int   lh_insert(lh_t *h, void *keyptr, int keylen, void  *datptr, int  datlen, int override);
  int   lh_lookup(lh_t *h, void *keyptr, int keylen, void **datptr, int *datlen);
  int   lh_delete(lh_t *h, void *keyptr, int keylen);
  int   lh_free  (lh_t *h);
  
  #endif /* __LH_H__ */
  

From ossp-cvs-owner@ossp.org  Mon Jan 14 16:00:38 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 38D90764E3; Mon, 14 Jan 2002 16:00:38 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_map.c lmtp2nntp_map.h
Message-Id: <20020114150038.38D90764E3@mail.ossp.org>
Date: Mon, 14 Jan 2002 16:00:38 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   14-Jan-2002 16:00:38
  Branch: HEAD                             Handle: 2002011415003700

  Added files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_map.c lmtp2nntp_map.h

  Log:
    first cut for map library

  Summary:
    Revision    Changes     Path
    1.1         +21 -0      ossp-pkg/lmtp2nntp/lmtp2nntp_map.c
    1.1         +17 -0      ossp-pkg/lmtp2nntp/lmtp2nntp_map.h
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_map.c
  ============================================================
  $ cvs update -p -r1.1 lmtp2nntp_map.c
  
  #include "lmtp2nntp_map.h"
  
  enum {
      VAR_INLINE      = 1<<0,
  };
  
  typedef struct {
      char *name;
      var_type_t type;
      union {
          void  *p;
          char   c;
          short  s;
          int    i;
          long   l;
          float  f;
          double d;
      } data;
  } var_object_t;
  
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_map.h
  ============================================================
  $ cvs update -p -r1.1 lmtp2nntp_map.h
  
  enum {
      VAR_TYPE_PTR    = 1<<1,
      VAR_TYPE_CHAR   = 1<<2,
      VAR_TYPE_SHORT  = 1<<3,
      VAR_TYPE_INT    = 1<<4,
      VAR_TYPE_LONG   = 1<<5,
      VAR_TYPE_FLOAT  = 1<<6,
      VAR_TYPE_DOUBLE = 1<<7
  };
  
  var_rc_t var_create  (var_t *var);
  var_rc_t var_destroy (var_t *var);
  var_rc_t var_reg     (var_t *var, const char *name, int type, void *storage);
  var_rc_t var_set     (var_t *var, const char *name, ...);
  var_rc_t var_get     (var_t *var, const char *name, ...);
  

From ossp-cvs-owner@ossp.org  Tue Jan 15 12:57:32 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C6514764D1; Tue, 15 Jan 2002 12:57:31 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_lh.c lmtp2nntp_lh.h
Message-Id: <20020115115731.C6514764D1@mail.ossp.org>
Date: Tue, 15 Jan 2002 12:57:31 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   15-Jan-2002 12:57:31
  Branch: HEAD                             Handle: 2002011511573100

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_lh.c lmtp2nntp_lh.h

  Log:
    constification

  Summary:
    Revision    Changes     Path
    1.2         +8  -8      ossp-pkg/lmtp2nntp/lmtp2nntp_lh.c
    1.2         +5  -5      ossp-pkg/lmtp2nntp/lmtp2nntp_lh.h
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_lh.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 lmtp2nntp_lh.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_lh.c	14 Jan 2002 14:49:07 -0000	1.1
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_lh.c	15 Jan 2002 11:57:31 -0000	1.2
  @@ -152,7 +152,7 @@
    */
   static long 
   lh_hash(
  -    register unsigned char *k,
  +    register const unsigned char *k,
       register size_t length)
   {
       register long a,b,c,len;
  @@ -213,7 +213,7 @@
   }
   
   /* create the hash table structure */
  -lh_t *lh_new(void)
  +lh_t *lh_create(void)
   {
       lh_t *h;
   
  @@ -357,7 +357,7 @@
   }
   
   /* insert element into hash table */
  -int lh_insert(lh_t *h, void *keyptr, int keylen, void *datptr, int datlen, int override)
  +int lh_insert(lh_t *h, const void *keyptr, int keylen, const void *datptr, int datlen, int override)
   {
       unsigned int hash, addr;
       element_t *el, **pel;
  @@ -418,8 +418,8 @@
       }
   
       /* insert contents into element structure */
  -    el->e_keyptr = keyptr;
  -    el->e_datptr = datptr;
  +    el->e_keyptr = (void *)keyptr;
  +    el->e_datptr = (void *)datptr;
       el->e_endptr = (char *)datptr+datlen;
       el->e_hash   = hash;
   
  @@ -431,7 +431,7 @@
   }
   
   /* lookup an element in hash table */
  -int lh_lookup(lh_t *h, void *keyptr, int keylen, void **datptr, int *datlen)
  +int lh_lookup(lh_t *h, const void *keyptr, int keylen, void **datptr, int *datlen)
   {
       unsigned int hash, addr;
       element_t *el, **pel;
  @@ -466,7 +466,7 @@
   }
   
   /* delete an element in hash table */
  -int lh_delete(lh_t *h, void *keyptr, int keylen)
  +int lh_delete(lh_t *h, const void *keyptr, int keylen)
   {
       unsigned int hash, addr;
       element_t *el, *lel, **pel;
  @@ -514,7 +514,7 @@
   }
   
   /* destroy the whole hash table */
  -int lh_free(lh_t *h)
  +int lh_destroy(lh_t *h)
   {
       element_t *el, **pel;
       unsigned int i, j;
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_lh.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 lmtp2nntp_lh.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_lh.h	14 Jan 2002 14:49:07 -0000	1.1
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_lh.h	15 Jan 2002 11:57:31 -0000	1.2
  @@ -30,11 +30,11 @@
   struct lh_st;
   typedef struct lh_st lh_t;
   
  -lh_t *lh_new   (void);
  -int   lh_insert(lh_t *h, void *keyptr, int keylen, void  *datptr, int  datlen, int override);
  -int   lh_lookup(lh_t *h, void *keyptr, int keylen, void **datptr, int *datlen);
  -int   lh_delete(lh_t *h, void *keyptr, int keylen);
  -int   lh_free  (lh_t *h);
  +lh_t *lh_create (void);
  +int   lh_insert (lh_t *h, const void *keyptr, int keylen, const void  *datptr, int  datlen, int override);
  +int   lh_lookup (lh_t *h, const void *keyptr, int keylen,       void **datptr, int *datlen);
  +int   lh_delete (lh_t *h, const void *keyptr, int keylen);
  +int   lh_destroy(lh_t *h);
   
   #endif /* __LH_H__ */
   

From ossp-cvs-owner@ossp.org  Tue Jan 15 14:02:21 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 05A30764D1; Tue, 15 Jan 2002 14:02:20 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp Makefile.in lmtp2nntp_config.c lmtp2nnt...
Message-Id: <20020115130220.05A30764D1@mail.ossp.org>
Date: Tue, 15 Jan 2002 14:02:20 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   15-Jan-2002 14:02:20
  Branch: HEAD                             Handle: 197001010100001011096140

  Added files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_val.c lmtp2nntp_val.h
  Modified files:
    ossp-pkg/lmtp2nntp      Makefile.in lmtp2nntp_config.c
  Removed files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_map.c lmtp2nntp_map.h

  Log:
    map renamed to val and basic functionality successfully verified

  Summary:
    Revision    Changes     Path
    1.38        +3  -3      ossp-pkg/lmtp2nntp/Makefile.in
    1.4         +63 -0      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    NONE        +0  -21     ossp-pkg/lmtp2nntp/lmtp2nntp_map.c
    NONE        +0  -17     ossp-pkg/lmtp2nntp/lmtp2nntp_map.h
    1.1         +214 -0     ossp-pkg/lmtp2nntp/lmtp2nntp_val.c
    1.1         +31 -0      ossp-pkg/lmtp2nntp/lmtp2nntp_val.h
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.37 -r1.38 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	14 Jan 2002 14:49:07 -0000	1.37
  +++ ossp-pkg/lmtp2nntp/Makefile.in	15 Jan 2002 13:02:20 -0000	1.38
  @@ -44,9 +44,9 @@
   POD2MAN     = pod2man
   
   PROG = lmtp2nntp
  -HDRS = lmtp2nntp_global.h lmtp2nntp_daemon.h lmtp2nntp_lmtp.h lmtp2nntp_nntp.h lmtp2nntp_argz.h lmtp2nntp_shpat.h lmtp2nntp_msg.h lmtp2nntp_popt.h lmtp2nntp_config.h lmtp2nntp_lh.h
  -SRCS = lmtp2nntp_main.c   lmtp2nntp_daemon.c lmtp2nntp_lmtp.c lmtp2nntp_nntp.c lmtp2nntp_argz.c lmtp2nntp_shpat.c lmtp2nntp_msg.c lmtp2nntp_popt.c lmtp2nntp_config.c lmtp2nntp_lh.c lmtp2nntp_version.c 
  -OBJS = lmtp2nntp_main.o   lmtp2nntp_daemon.o lmtp2nntp_lmtp.o lmtp2nntp_nntp.o lmtp2nntp_argz.o lmtp2nntp_shpat.o lmtp2nntp_msg.o lmtp2nntp_popt.o lmtp2nntp_config.o lmtp2nntp_lh.o lmtp2nntp_version.o
  +HDRS = lmtp2nntp_global.h lmtp2nntp_daemon.h lmtp2nntp_lmtp.h lmtp2nntp_nntp.h lmtp2nntp_argz.h lmtp2nntp_shpat.h lmtp2nntp_msg.h lmtp2nntp_popt.h lmtp2nntp_val.h lmtp2nntp_config.h lmtp2nntp_lh.h
  +SRCS = lmtp2nntp_main.c   lmtp2nntp_daemon.c lmtp2nntp_lmtp.c lmtp2nntp_nntp.c lmtp2nntp_argz.c lmtp2nntp_shpat.c lmtp2nntp_msg.c lmtp2nntp_popt.c lmtp2nntp_val.c lmtp2nntp_config.c lmtp2nntp_lh.c lmtp2nntp_version.c 
  +OBJS = lmtp2nntp_main.o   lmtp2nntp_daemon.o lmtp2nntp_lmtp.o lmtp2nntp_nntp.o lmtp2nntp_argz.o lmtp2nntp_shpat.o lmtp2nntp_msg.o lmtp2nntp_popt.o lmtp2nntp_val.o lmtp2nntp_config.o lmtp2nntp_lh.o lmtp2nntp_version.o
   
   SUBDIRS = @SUBDIR_STR@ @SUBDIR_L2@ @SUBDIR_SA@ @SUBDIR_VAR@
   
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	14 Jan 2002 12:23:21 -0000	1.3
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	15 Jan 2002 13:02:20 -0000	1.4
  @@ -44,6 +44,7 @@
   // #include "lmtp2nntp_shpat.h"
   // #include "lmtp2nntp_daemon.h"
   #include "lmtp2nntp_popt.h"
  +#include "lmtp2nntp_val.h"
   
   /* third party (linked in) */
   #include "str.h"
  @@ -137,6 +138,37 @@
       ctx->option_childsmax = 10;
   
       {
  +        int testint = 10;
  +        int testintout = 100;
  +        val_rc_t rc;
  +        val_t *v;
  +
  +        if ((rc = val_create(&v)) != VAL_OK)
  +            die("val_create");
  +
  +        printf("DEBUG: testint = %d, testintout = %d\n", testint, testintout);
  +
  +        if ((rc = val_reg(v, "foo", VAL_TYPE_INT, (void *)&testint)) != VAL_OK)
  +            die("val_reg");
  +
  +        testint++;
  +        if ((rc = val_get(v, "foo", &testintout)) != VAL_OK)
  +            die("val_get");
  +        printf("DEBUG: testint = %d, testintout = %d\n", testint, testintout);
  +
  +        if ((rc = val_set(v, "foo", 2)) != VAL_OK)
  +            die("val_set");
  +        if ((rc = val_get(v, "foo", &testintout)) != VAL_OK)
  +            die("val_get");
  +        printf("DEBUG: testint = %d, testintout = %d\n", testint, testintout);
  +
  +        if ((rc = val_destroy(v)) != VAL_OK)
  +            die("val_destroy");
  +
  +        return;
  +    }
  +
  +    {
           char c;
           char *cp;
   
  @@ -158,6 +190,37 @@
           popt_freecontext(poptCon);
           return;
       }
  +
  +/* Braindump
  +
  +    fuer configure
  +
  +ich brauche eine Tabelle, die alle optionen in langer und kurzer Form
  +enthaelt, Angabe ob flag, single- oder multivalue, callbacks fuer die
  +syntaxpruefung des human-readable inputs, die conversion ins interne binaryformat sowie rueckwandlung in
  +human-readable format. Dazu informationen fuer help.
  + */
  +
  +/* Braindump
  +
  +    fuer var
  +
  +ich brauche eine struktur, aus der man ersehen kann, welche variablen es gibt. 
  +    {
  +        struct "system.uname.sysname",  varstring, 
  +        struct "system.uname.nodename", 
  +        struct "system.uname.release", 
  +        struct "system.uname.version", 
  +        struct "system.uname.machine", 
  +        
  +        <<< ctx->progname = strdup(argv[0]);
  +        <<< foo = ctx->progname;
  +
  +        >>> rc = varreg("main.progname", &ctx->progname);
  +        >>> rc = varset("main.progname", strdup(argv[0])); //equivalent to ctx->progname = strdup(argv[0]);
  +        >>> rc = varget("main.progname", &foo);            //equivalent to foo = ctx->progname
  +    }
  + */
   
       {
           const char *filename = "example.conf";
      Index: ossp-pkg/lmtp2nntp/lmtp2nntp_val.c
  ============================================================
  $ cvs update -p -r1.1 lmtp2nntp_val.c
  
  #include "lmtp2nntp_val.h"
  #include "lmtp2nntp_lh.h"
  #include <stdlib.h>
  #include <stdarg.h>
  #include <string.h>
  
  
  /* usually val_object_t.data is a pointer val_object_t.data.p, but VAL_INLINE
   * signals val_object_t.data is actual data val_object_t.data.[csilfd]
   */
  enum {
      VAL_INLINE      = 1<<31
  };
  
  typedef struct {
      char *name;
      int type;
      union {
          void  *p;
          char   c;
          short  s;
          int    i;
          long   l;
          float  f;
          double d;
      } data;
  } val_object_t;
  
  struct val_s {
      lh_t *lh;
  };
  
  static void *val_unionptr(val_object_t *obj)
  {
      void *storage;
  
      switch (obj->type & ~VAL_INLINE) {
          case VAL_TYPE_PTR:
              storage = &obj->data.p;
              break;
          case VAL_TYPE_CHAR:
              storage = (void *)&obj->data.c;
              break;
          case VAL_TYPE_SHORT:
              storage = (void *)&obj->data.s;
              break;
          case VAL_TYPE_INT:
              storage = (void *)&obj->data.i;
              break;
          case VAL_TYPE_LONG:
              storage = (void *)&obj->data.l;
              break;
          case VAL_TYPE_FLOAT:
              storage = (void *)&obj->data.f;
              break;
          case VAL_TYPE_DOUBLE:
              storage = (void *)&obj->data.d;
              break;
          default:
              storage = NULL;
      }
      return storage;
  }
  
  val_rc_t val_create(val_t **valp)
  {
      val_t *val;
  
      if ((val = (val_t *)malloc(sizeof(val_t))) == NULL)
          return VAL_MEMORY;
      if ((val->lh = lh_create()) == NULL)
          return VAL_LH;
      *valp = val;
      return VAL_OK;
  }
  
  val_rc_t val_destroy(val_t *val)
  {
      if (val == NULL)
          return VAL_MEMORY;
      lh_destroy(val->lh);
      free(val);
      return VAL_OK;
  }
  
  val_rc_t val_reg(val_t *val, const char *name, int type, void *storage)
  {
      val_object_t obj;
  
      if ((obj.name = strdup(name)) == NULL)
          return VAL_MEMORY;
      obj.type = type;
      if (storage == NULL) {
          obj.type |= VAL_INLINE;
          obj.data.l = 0;
      }
      else
          obj.data.p = storage;
  
      if (! lh_insert(val->lh, name, strlen(name), &obj, sizeof(obj), 1))
          return VAL_LH;
      
      return VAL_OK;
  }
  
  val_rc_t val_vset(val_t *val, const char *name, va_list ap)
  {
      val_object_t *obj;
      void *storage;
      const char *cp;
  
      if ((cp = strchr(name, '.')) != NULL) {
          if (! lh_lookup(val->lh, name, cp-name, (void **)&obj, NULL))
              return VAL_LH;
          return val_vset((val_t *)obj->data.p, cp+1, ap);
      }
      if (! lh_lookup(val->lh, name, strlen(name), (void **)&obj, NULL))
          return VAL_LH;
      if (obj->type & VAL_INLINE)
          storage = val_unionptr(obj);
      else
          storage = obj->data.p;
      switch(obj->type & ~VAL_INLINE) {
          case VAL_TYPE_PTR:
              *(char **)storage = (char *)va_arg(ap, void *);
              break;
          case VAL_TYPE_CHAR:
              *(char *)storage = (char)va_arg(ap, int);
              break;
          case VAL_TYPE_SHORT:
              *(short *)storage = (short)va_arg(ap, int);
              break;
          case VAL_TYPE_INT:
              *(int *)storage = (int)va_arg(ap, int);
              break;
          case VAL_TYPE_LONG:
              *(long *)storage = (long)va_arg(ap, long);
              break;
          case VAL_TYPE_FLOAT:
              *(float *)storage = (float)va_arg(ap, double);
              break;
          case VAL_TYPE_DOUBLE:
              *(double *)storage = (double)va_arg(ap, double);
              break;
      }
      return VAL_OK;
  }
  
  val_rc_t val_set(val_t *val, const char *name, ...)
  {
      val_rc_t rc;
      va_list ap;
  
      va_start(ap, name);
      rc = val_vset(val, name, ap);
      va_end(ap);
      return rc;
  }
  
  val_rc_t val_vget(val_t *val, const char *name, va_list ap)
  {
      val_object_t *obj;
      void *storage;
      const char *cp;
  
      if ((cp = strchr(name, '.')) != NULL) {
          if (! lh_lookup(val->lh, name, cp-name, (void **)&obj, NULL))
              return VAL_LH;
          return val_vget((val_t *)obj->data.p, cp+1, ap);
      }
      if (! lh_lookup(val->lh, name, strlen(name), (void **)&obj, NULL))
          return VAL_LH;
      if (obj->type & VAL_INLINE)
          storage = val_unionptr(obj);
      else
          storage = obj->data.p;
      switch (obj->type & ~VAL_INLINE) {
          case VAL_TYPE_PTR:
              *((char **)va_arg(ap, void *)) = *(char **)storage;
              break;
          case VAL_TYPE_CHAR:
              *((char *)va_arg(ap, int *)) = *(char *)storage;
              break;
          case VAL_TYPE_SHORT:
              *((short *)va_arg(ap, int *)) = *(short *)storage;
              break;
          case VAL_TYPE_INT:
              *((int *)va_arg(ap, int *)) = *(int *)storage;
              break;
          case VAL_TYPE_LONG:
              *((long *)va_arg(ap, long *)) = *(long *)storage;
              break;
          case VAL_TYPE_FLOAT:
              *((float *)va_arg(ap, double *)) = *(float *)storage;
              break;
          case VAL_TYPE_DOUBLE:
              *((double *)va_arg(ap, double *)) = *(double *)storage;
              break;
      }
      return VAL_OK;
  }
  
  val_rc_t val_get(val_t *val, const char *name, ...)
  {
      val_rc_t rc;
      va_list ap;
  
      va_start(ap, name);
      rc = val_vget(val, name, ap);
      va_end(ap);
      return rc;
  }
  
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_val.h
  ============================================================
  $ cvs update -p -r1.1 lmtp2nntp_val.h
  
  #include <stdarg.h>
  
  enum {
      VAL_TYPE_PTR    = 1<<0,
      VAL_TYPE_CHAR   = 1<<1,
      VAL_TYPE_SHORT  = 1<<2,
      VAL_TYPE_INT    = 1<<3,
      VAL_TYPE_LONG   = 1<<4,
      VAL_TYPE_FLOAT  = 1<<5,
      VAL_TYPE_DOUBLE = 1<<6
  };
  
  typedef enum {
      VAL_OK,
      VAL_MEMORY,
      VAL_LH,
      VAL_UNKNOWN
  } val_rc_t;
  
  struct val_s;
  typedef struct val_s val_t;
  
  val_rc_t val_create  (val_t **);
  val_rc_t val_destroy (val_t *);
  val_rc_t val_reg     (val_t *, const char *, int, void *);
  val_rc_t val_set     (val_t *, const char *, ...);
  val_rc_t val_get     (val_t *, const char *, ...);
  val_rc_t val_vset    (val_t *, const char *, va_list);
  val_rc_t val_vget    (val_t *, const char *, va_list);
  

From ossp-cvs-owner@ossp.org  Tue Jan 15 14:04:09 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 77C39764D1; Tue, 15 Jan 2002 14:04:09 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c
Message-Id: <20020115130409.77C39764D1@mail.ossp.org>
Date: Tue, 15 Jan 2002 14:04:09 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   15-Jan-2002 14:04:09
  Branch: HEAD                             Handle: 2002011513040900

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c

  Log:
    map renamed to val and basic functionality successfully verified

  Summary:
    Revision    Changes     Path
    1.5         +4  -4      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	15 Jan 2002 13:02:20 -0000	1.4
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	15 Jan 2002 13:04:09 -0000	1.5
  @@ -148,17 +148,17 @@
   
           printf("DEBUG: testint = %d, testintout = %d\n", testint, testintout);
   
  -        if ((rc = val_reg(v, "foo", VAL_TYPE_INT, (void *)&testint)) != VAL_OK)
  +        if ((rc = val_reg(v, "foo.bar", VAL_TYPE_INT, (void *)&testint)) != VAL_OK)
               die("val_reg");
   
           testint++;
  -        if ((rc = val_get(v, "foo", &testintout)) != VAL_OK)
  +        if ((rc = val_get(v, "foo.bar", &testintout)) != VAL_OK)
               die("val_get");
           printf("DEBUG: testint = %d, testintout = %d\n", testint, testintout);
   
  -        if ((rc = val_set(v, "foo", 2)) != VAL_OK)
  +        if ((rc = val_set(v, "foo.bar", 2)) != VAL_OK)
               die("val_set");
  -        if ((rc = val_get(v, "foo", &testintout)) != VAL_OK)
  +        if ((rc = val_get(v, "foo.bar", &testintout)) != VAL_OK)
               die("val_get");
           printf("DEBUG: testint = %d, testintout = %d\n", testint, testintout);
   

From ossp-cvs-owner@ossp.org  Wed Jan 16 10:46:53 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6EDA5764E3; Wed, 16 Jan 2002 10:46:53 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c lmtp2nntp_lh.c lmtp2...
Message-Id: <20020116094653.6EDA5764E3@mail.ossp.org>
Date: Wed, 16 Jan 2002 10:46:53 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   16-Jan-2002 10:46:53
  Branch: HEAD                             Handle: 2002011609465200

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c lmtp2nntp_lh.c lmtp2nntp_lh.h
                            lmtp2nntp_val.c lmtp2nntp_val.h

  Log:
    val now supports OO-style variable names.  lh now supports iteration through
    all elements and applying a callback to each.  lmtp2nntp_config.c currently
    has sample code for lib val embedded, including a data dumper.

  Summary:
    Revision    Changes     Path
    1.6         +116 -6     ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.3         +29 -7      ossp-pkg/lmtp2nntp/lmtp2nntp_lh.c
    1.3         +10 -0      ossp-pkg/lmtp2nntp/lmtp2nntp_lh.h
    1.2         +176 -65    ossp-pkg/lmtp2nntp/lmtp2nntp_val.c
    1.2         +21 -11     ossp-pkg/lmtp2nntp/lmtp2nntp_val.h
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	15 Jan 2002 13:04:09 -0000	1.5
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	16 Jan 2002 09:46:52 -0000	1.6
  @@ -98,10 +98,53 @@
   void die(char *); //FIXME
   void die(char *msg)
   {
  -        printf("ERROR: %s", msg);
  +        printf("ERROR: %s\n", msg);
               exit(-1);
   }
   
  +static val_rc_t dumper(void *ctx, const char *name, int type, const char *desc, void *data)
  +{
  +    switch (type) {
  +        case VAL_TYPE_VAL:
  +            fprintf(stderr, "DEBUG: <%10s> VAL_TYPE_VAL,    desc=<%20s>, data@%.8lx INTERNAL\n",
  +                    (char *)ctx,       desc, (long)data);
  +            break;
  +        case VAL_TYPE_PTR:
  +            fprintf(stderr, "DEBUG: <%10s> VAL_TYPE_PTR,    desc=<%20s>, data@%.8lx=%.8lx\n",
  +                    (char *)ctx,       desc, (long)data, *(long *)data);
  +            break;
  +        case VAL_TYPE_CHAR:                                                                              
  +            fprintf(stderr, "DEBUG: <%10s> VAL_TYPE_CHAR,   desc=<%20s>, data@%.8lx='%c'\n",
  +                    (char *)ctx,       desc, (long)data, *(char *)data);
  +            break;
  +        case VAL_TYPE_SHORT:                                                                             
  +            fprintf(stderr, "DEBUG: <%10s> VAL_TYPE_SHORT,  desc=<%20s>, data@%.8lx=%8d\n",
  +                    (char *)ctx,       desc, (long)data, *(short *)data);
  +            break;
  +        case VAL_TYPE_INT:                                                                               
  +            fprintf(stderr, "DEBUG: <%10s> VAL_TYPE_INT,    desc=<%20s>, data@%.8lx=%8d\n",
  +                    (char *)ctx,       desc, (long)data, *(int *)data);
  +            break;
  +        case VAL_TYPE_LONG:                                                                              
  +            fprintf(stderr, "DEBUG: <%10s> VAL_TYPE_LONG,   desc=<%20s>, data@%.8lx=%8d\n",
  +                    (char *)ctx,       desc, (long)data, *(long *)data);
  +            break;
  +        case VAL_TYPE_FLOAT:                                                                             
  +            fprintf(stderr, "DEBUG: <%10s> VAL_TYPE_FLOAT,  desc=<%20s>, data@%.8lx=%8f\n",
  +                    (char *)ctx,       desc, (long)data, *(float *)data);
  +            break;
  +        case VAL_TYPE_DOUBLE:                                                                            
  +            fprintf(stderr, "DEBUG: <%10s> VAL_TYPE_DOUBLE, desc=<%20s>, data@%.8lx=%8f\n",
  +                    (char *)ctx,       desc, (long)data, *(double *)data);
  +            break;
  +        default: 
  +            fprintf(stderr, "DEBUG: <%10s> type = %.8lx,    desc=<%20s>, data@%.8lx\n",
  +                    (char *)ctx, type, desc, (long)data);
  +    }
  +
  +    return VAL_OK;
  +}
  +
   void dotconftest(int argc, char **argv) /*FIXME*/
   {
       popt_context poptCon;   /* context for parsing command-line options */
  @@ -140,27 +183,94 @@
       {
           int testint = 10;
           int testintout = 100;
  +        int testint2 = 20;
  +        int testintout2 = 200;
           val_rc_t rc;
  -        val_t *v;
  +        val_t *v, *v2, *v3;
   
           if ((rc = val_create(&v)) != VAL_OK)
               die("val_create");
   
           printf("DEBUG: testint = %d, testintout = %d\n", testint, testintout);
   
  -        if ((rc = val_reg(v, "foo.bar", VAL_TYPE_INT, (void *)&testint)) != VAL_OK)
  +        if ((rc = val_reg(v, "foo", VAL_TYPE_INT, "foo variable", (void *)&testint)) != VAL_OK)
               die("val_reg");
   
           testint++;
  -        if ((rc = val_get(v, "foo.bar", &testintout)) != VAL_OK)
  +        if ((rc = val_get(v, "foo", &testintout)) != VAL_OK)
               die("val_get");
           printf("DEBUG: testint = %d, testintout = %d\n", testint, testintout);
   
  -        if ((rc = val_set(v, "foo.bar", 2)) != VAL_OK)
  +        if ((rc = val_set(v, "foo", 2)) != VAL_OK)
               die("val_set");
  -        if ((rc = val_get(v, "foo.bar", &testintout)) != VAL_OK)
  +        if ((rc = val_get(v, "foo", &testintout)) != VAL_OK)
               die("val_get");
           printf("DEBUG: testint = %d, testintout = %d\n", testint, testintout);
  +
  +        if ((rc = val_create(&v2)) != VAL_OK)
  +            die("val_create 2");
  +
  +#if 0
  +        if ((rc = val_reg(v, "bar", VAL_TYPE_VAL, "bar variable", (void *)&v2)) != VAL_OK)
  +            die("val_reg 2");
  +#endif
  +        val_reg(v, "bar", VAL_TYPE_VAL, "bar variable", NULL);
  +        val_set(v, "bar", v2);
  +        if ((rc = val_get(v, "bar", &v3)) != VAL_OK)
  +            die("val_get v3");
  +
  +        if ((rc = val_reg(v2, "quux", VAL_TYPE_INT, "quux variable", (void *)&testint2)) != VAL_OK)
  +            die("val_reg 2b");
  +
  +        testint2++;
  +        if ((rc = val_get(v2, "quux", &testintout2)) != VAL_OK)
  +            die("val_get 2c");
  +        printf("DEBUG: testint2 = %d, testintout2 = %d\n", testint2, testintout2);
  +        if ((rc = val_get(v, "bar.quux", &testintout2)) != VAL_OK) {
  +            fprintf(stderr, "rc=%d\n", rc);
  +            die("val_get 2d");
  +        }
  +        printf("DEBUG: testint2 = %d, testintout2 = %d\n", testint2, testintout2);
  +
  +        printf("DEBUG: testint     at address %lx\n", (long)&testint);
  +        printf("DEBUG: testintout  at address %lx\n", (long)&testintout);
  +        printf("DEBUG: testint2    at address %lx\n", (long)&testint2);
  +        printf("DEBUG: testint2out at address %lx\n", (long)&testintout2);
  +
  +        if ((rc = val_reg(v, "bar.ptr", VAL_TYPE_PTR, "bar ptr (&testint)", NULL)) != VAL_OK)
  +            die("val_ret  for bar.ptr using inline data");
  +        if ((rc = val_set(v, "bar.ptr", &testint)) != VAL_OK)
  +            die("val_set  for bar.ptr using inline data");
  +        if ((rc = val_reg(v, "bar.char", VAL_TYPE_CHAR, "bar character (!)", NULL)) != VAL_OK)
  +            die("val_ret  for bar.char using inline data");
  +        if ((rc = val_set(v, "bar.char", '!')) != VAL_OK)
  +            die("val_set  for bar.char using inline data");
  +        if ((rc = val_reg(v, "bar.short", VAL_TYPE_SHORT, "bar short (555)", NULL)) != VAL_OK)
  +            die("val_ret  for bar.short using inline data");
  +        if ((rc = val_set(v, "bar.short", 555)) != VAL_OK)
  +            die("val_set  for bar.short using inline data");
  +        if ((rc = val_reg(v, "bar.int", VAL_TYPE_INT, "bar integer (76543)", NULL)) != VAL_OK)
  +            die("val_ret  for bar.int using inline data");
  +        if ((rc = val_set(v, "bar.int", 76543)) != VAL_OK)
  +            die("val_set  for bar.int using inline data");
  +        if ((rc = val_reg(v, "bar.long", VAL_TYPE_LONG, "bar long (2097152)", NULL)) != VAL_OK)
  +            die("val_ret  for bar.long using inline data");
  +        if ((rc = val_set(v, "bar.long", 2097152)) != VAL_OK)
  +            die("val_set  for bar.long using inline data");
  +        if ((rc = val_reg(v, "bar.float", VAL_TYPE_FLOAT, "bar float (1.955830)", NULL)) != VAL_OK)
  +            die("val_ret  for bar.float using inline data");
  +        if ((rc = val_set(v, "bar.float", 1.95583)) != VAL_OK)
  +            die("val_set  for bar.float using inline data");
  +        if ((rc = val_reg(v, "bar.double", VAL_TYPE_DOUBLE, "bar double (3.1415+)", NULL)) != VAL_OK)
  +            die("val_ret  for bar.double using inline data");
  +        if ((rc = val_set(v, "bar.double", 3.14159265358979)) != VAL_OK)
  +            die("val_set  for bar.double using inline data");
  +
  +        val_apply(v,  dumper, "v" );
  +        val_apply(v2, dumper, "v2");
  +
  +        if ((rc = val_destroy(v2)) != VAL_OK)
  +            die("val_destroy 2");
   
           if ((rc = val_destroy(v)) != VAL_OK)
               die("val_destroy");
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_lh.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 lmtp2nntp_lh.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_lh.c	15 Jan 2002 11:57:31 -0000	1.2
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_lh.c	16 Jan 2002 09:46:52 -0000	1.3
  @@ -87,13 +87,6 @@
   #include <stdlib.h>
   #include <string.h>
   
  -#ifndef FALSE
  -#define FALSE 0
  -#endif
  -#ifndef TRUE
  -#define TRUE !FALSE
  -#endif
  -
   #include "lmtp2nntp_lh.h"
   
   /* fixed size (number of pointers) of the directory and of each segment */
  @@ -511,6 +504,35 @@
           lh_shrink(h);
   
       return rv;
  +}
  +
  +/* apply a callback for all elements in the hash table */
  +int lh_apply(lh_t *h, lh_cb_t cb, void *ctx)
  +{
  +    element_t *el, **pel;
  +    unsigned int i, j;
  +
  +    /* argument consistency check */
  +    if (h == NULL || cb == NULL)
  +        return FALSE;
  +
  +    /* interate over all segment's entries */
  +    for (i = 0; i < h->h_dirsize; i++) {
  +        if (h->h_dir[i] == NULL)
  +            continue;
  +        /* interate over all collision chains */
  +        for (j = 0; j < SEGMENTSIZE; j++) {
  +            if (h->h_dir[i]->s_element[j] == NULL)
  +                continue;
  +            /* interate over all elements in collision chain */
  +            el = h->h_dir[i]->s_element[j];
  +            for (; el != NULL; el = el->e_next) {
  +                if (!cb(ctx, el->e_keyptr, el_keylen(el), el->e_datptr, el_datlen(el)))
  +                    return;
  +            }
  +        }
  +    }
  +    return TRUE;
   }
   
   /* destroy the whole hash table */
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_lh.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 lmtp2nntp_lh.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_lh.h	15 Jan 2002 11:57:31 -0000	1.2
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_lh.h	16 Jan 2002 09:46:52 -0000	1.3
  @@ -27,13 +27,23 @@
   #ifndef __LH_H__
   #define __LH_H__
   
  +#ifndef FALSE
  +#define FALSE 0
  +#endif
  +#ifndef TRUE
  +#define TRUE !FALSE
  +#endif
  +
   struct lh_st;
   typedef struct lh_st lh_t;
   
  +typedef int (*lh_cb_t)(void *ctx, const void *keyptr, int keylen, const void *datptr, int datlen);
  +
   lh_t *lh_create (void);
   int   lh_insert (lh_t *h, const void *keyptr, int keylen, const void  *datptr, int  datlen, int override);
   int   lh_lookup (lh_t *h, const void *keyptr, int keylen,       void **datptr, int *datlen);
   int   lh_delete (lh_t *h, const void *keyptr, int keylen);
  +int   lh_apply  (lh_t *h, lh_cb_t cb, void *ctx);
   int   lh_destroy(lh_t *h);
   
   #endif /* __LH_H__ */
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_val.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 lmtp2nntp_val.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_val.c	15 Jan 2002 13:02:20 -0000	1.1
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_val.c	16 Jan 2002 09:46:52 -0000	1.2
  @@ -4,7 +4,7 @@
   #include <stdlib.h>
   #include <stdarg.h>
   #include <string.h>
  -
  +#include <stdio.h>
   
   /* usually val_object_t.data is a pointer val_object_t.data.p, but VAL_INLINE
    * signals val_object_t.data is actual data val_object_t.data.[csilfd]
  @@ -14,9 +14,9 @@
   };
   
   typedef struct {
  -    char *name;
       int type;
       union {
  +        val_t *v;
           void  *p;
           char   c;
           short  s;
  @@ -25,41 +25,49 @@
           float  f;
           double d;
       } data;
  +    char *desc;
   } val_object_t;
   
   struct val_s {
       lh_t *lh;
   };
   
  -static void *val_unionptr(val_object_t *obj)
  +static void *val_storage(val_object_t *obj)
   {
       void *storage;
   
  -    switch (obj->type & ~VAL_INLINE) {
  -        case VAL_TYPE_PTR:
  -            storage = &obj->data.p;
  -            break;
  -        case VAL_TYPE_CHAR:
  -            storage = (void *)&obj->data.c;
  -            break;
  -        case VAL_TYPE_SHORT:
  -            storage = (void *)&obj->data.s;
  -            break;
  -        case VAL_TYPE_INT:
  -            storage = (void *)&obj->data.i;
  -            break;
  -        case VAL_TYPE_LONG:
  -            storage = (void *)&obj->data.l;
  -            break;
  -        case VAL_TYPE_FLOAT:
  -            storage = (void *)&obj->data.f;
  -            break;
  -        case VAL_TYPE_DOUBLE:
  -            storage = (void *)&obj->data.d;
  -            break;
  -        default:
  -            storage = NULL;
  +    if (obj->type & VAL_INLINE) {
  +        switch (obj->type & ~VAL_INLINE) {
  +            case VAL_TYPE_VAL:
  +                storage = &obj->data.v;
  +                break;
  +            case VAL_TYPE_PTR:
  +                storage = &obj->data.p;
  +                break;
  +            case VAL_TYPE_CHAR:
  +                storage = &obj->data.c;
  +                break;
  +            case VAL_TYPE_SHORT:
  +                storage = &obj->data.s;
  +                break;
  +            case VAL_TYPE_INT:
  +                storage = &obj->data.i;
  +                break;
  +            case VAL_TYPE_LONG:
  +                storage = &obj->data.l;
  +                break;
  +            case VAL_TYPE_FLOAT:
  +                storage = &obj->data.f;
  +                break;
  +            case VAL_TYPE_DOUBLE:
  +                storage = &obj->data.d;
  +                break;
  +            default:
  +                storage = NULL;
  +        }
       }
  +    else 
  +        storage = obj->data.p;
       return storage;
   }
   
  @@ -67,40 +75,77 @@
   {
       val_t *val;
   
  +    if (valp == NULL)
  +        return VAL_ERR_ARG;
       if ((val = (val_t *)malloc(sizeof(val_t))) == NULL)
  -        return VAL_MEMORY;
  -    if ((val->lh = lh_create()) == NULL)
  -        return VAL_LH;
  +        return VAL_ERR_SYS;
  +    if ((val->lh = lh_create()) == NULL) {
  +        free(val);
  +        return VAL_ERR_SYS;
  +    }
       *valp = val;
       return VAL_OK;
   }
   
  +static int (val_destroy_cb)(void *_ctx, const void *keyptr, int keylen, const void *datptr, int datlen)
  +{
  +    val_object_t *obj;
  +    
  +    obj = (val_object_t *)datptr;
  +    if (obj->desc != NULL)
  +        free(obj->desc);
  +    return TRUE;
  +}
  +
   val_rc_t val_destroy(val_t *val)
   {
       if (val == NULL)
  -        return VAL_MEMORY;
  -    lh_destroy(val->lh);
  +        return VAL_ERR_ARG;
  +    lh_apply(val->lh, val_destroy_cb, NULL);
  +    if (!lh_destroy(val->lh))
  +        return VAL_ERR_SYS;
       free(val);
       return VAL_OK;
   }
   
  -val_rc_t val_reg(val_t *val, const char *name, int type, void *storage)
  +val_rc_t val_reg(val_t *val, const char *name, int type, const char *desc, void *storage)
   {
  -    val_object_t obj;
  +    val_object_t *obj;
  +    val_object_t newobj;
  +    const char *cp;
  +    val_t *child;
  +
  +    if (val == NULL || name == NULL || type == 0)
  +        return VAL_ERR_ARG;
  +
  +
   
  -    if ((obj.name = strdup(name)) == NULL)
  -        return VAL_MEMORY;
  -    obj.type = type;
  -    if (storage == NULL) {
  -        obj.type |= VAL_INLINE;
  -        obj.data.l = 0;
  +    if ((cp = strchr(name, '.')) != NULL) {
  +        if (!lh_lookup(val->lh, name, cp-name, (void **)&obj, NULL))
  +            return VAL_ERR_ARG;
  +        if (!(obj->type & VAL_TYPE_VAL))
  +            return VAL_ERR_USE;
  +        child = *(val_t **)(val_storage(obj));
  +        return val_reg(child, cp+1, type, desc, storage);
       }
  +
  +
  +
  +    if (desc != NULL)
  +        newobj.desc = strdup(desc);
       else
  -        obj.data.p = storage;
  +        newobj.desc = NULL;
  +    if (storage == NULL) { 
  +        newobj.type   = (type | VAL_INLINE);
  +        newobj.data.l = 0;
  +    }
  +    else {
  +        newobj.type   = (type & ~VAL_INLINE);
  +        newobj.data.p = storage;
  +    }
  +    if (!lh_insert(val->lh, name, strlen(name), &newobj, sizeof(newobj), 1))
  +        return VAL_ERR_SYS;
   
  -    if (! lh_insert(val->lh, name, strlen(name), &obj, sizeof(obj), 1))
  -        return VAL_LH;
  -    
       return VAL_OK;
   }
   
  @@ -109,19 +154,25 @@
       val_object_t *obj;
       void *storage;
       const char *cp;
  +    val_t *child;
   
  +    if (val == NULL || name == NULL || ap == NULL)
  +        return VAL_ERR_ARG;
       if ((cp = strchr(name, '.')) != NULL) {
  -        if (! lh_lookup(val->lh, name, cp-name, (void **)&obj, NULL))
  -            return VAL_LH;
  -        return val_vset((val_t *)obj->data.p, cp+1, ap);
  -    }
  -    if (! lh_lookup(val->lh, name, strlen(name), (void **)&obj, NULL))
  -        return VAL_LH;
  -    if (obj->type & VAL_INLINE)
  -        storage = val_unionptr(obj);
  -    else
  -        storage = obj->data.p;
  -    switch(obj->type & ~VAL_INLINE) {
  +        if (!lh_lookup(val->lh, name, cp-name, (void **)&obj, NULL))
  +            return VAL_ERR_ARG;
  +        if (!(obj->type & VAL_TYPE_VAL))
  +            return VAL_ERR_USE;
  +        child = *(val_t **)(val_storage(obj));
  +        return val_vset(child, cp+1, ap);
  +    }
  +    if (!lh_lookup(val->lh, name, strlen(name), (void **)&obj, NULL))
  +        return VAL_ERR_ARG;
  +    storage = val_storage(obj);
  +    switch (obj->type & ~VAL_INLINE) {
  +        case VAL_TYPE_VAL:
  +            *(val_t **)storage = (val_t *)va_arg(ap, void *);
  +            break;
           case VAL_TYPE_PTR:
               *(char **)storage = (char *)va_arg(ap, void *);
               break;
  @@ -152,6 +203,8 @@
       val_rc_t rc;
       va_list ap;
   
  +    if (val == NULL || name == NULL)
  +        return VAL_ERR_ARG;
       va_start(ap, name);
       rc = val_vset(val, name, ap);
       va_end(ap);
  @@ -163,19 +216,25 @@
       val_object_t *obj;
       void *storage;
       const char *cp;
  +    val_t *child;
   
  +    if (val == NULL || name == NULL || ap == NULL)
  +        return VAL_ERR_ARG;
       if ((cp = strchr(name, '.')) != NULL) {
  -        if (! lh_lookup(val->lh, name, cp-name, (void **)&obj, NULL))
  -            return VAL_LH;
  -        return val_vget((val_t *)obj->data.p, cp+1, ap);
  -    }
  -    if (! lh_lookup(val->lh, name, strlen(name), (void **)&obj, NULL))
  -        return VAL_LH;
  -    if (obj->type & VAL_INLINE)
  -        storage = val_unionptr(obj);
  -    else
  -        storage = obj->data.p;
  +        if (!lh_lookup(val->lh, name, cp-name, (void **)&obj, NULL))
  +            return VAL_ERR_ARG;
  +        if (!(obj->type & VAL_TYPE_VAL))
  +            return VAL_ERR_USE;
  +        child = *(val_t **)(val_storage(obj));
  +        return val_vget(child, cp+1, ap);
  +    }
  +    if (!lh_lookup(val->lh, name, strlen(name), (void **)&obj, NULL))
  +        return VAL_ERR_ARG;
  +    storage = val_storage(obj);
       switch (obj->type & ~VAL_INLINE) {
  +        case VAL_TYPE_VAL:
  +            *((val_t **)va_arg(ap, void *)) = *(val_t **)storage;
  +            break;
           case VAL_TYPE_PTR:
               *((char **)va_arg(ap, void *)) = *(char **)storage;
               break;
  @@ -206,9 +265,61 @@
       val_rc_t rc;
       va_list ap;
   
  +    if (val == NULL || name == NULL)
  +        return VAL_ERR_ARG;
       va_start(ap, name);
       rc = val_vget(val, name, ap);
       va_end(ap);
       return rc;
  +}
  +
  +#define VAL_MAXNAME 1024
  +
  +typedef struct {
  +    val_cb_t cb;
  +    void *ctx;
  +    val_rc_t rc;
  +} val_apply_ctx_t;
  +
  +static int (val_apply_cb)(void *_ctx, const void *keyptr, int keylen, const void *datptr, int datlen)
  +{
  +    val_apply_ctx_t *ctx = (val_apply_ctx_t *)_ctx;
  +    val_object_t *obj;
  +    char name[VAL_MAXNAME+1];
  +
  +    /* on-the-fly create NUL-terminated name string */
  +    if (keylen > VAL_MAXNAME) {
  +        ctx->rc = VAL_ERR_MEM;
  +        return FALSE;
  +    }
  +    strncpy(name, (char *)keyptr, keylen);
  +    *((char *)name+keylen) = '\0';
  +
  +    /* take object */
  +    if (datlen != sizeof(val_object_t)) {
  +        ctx->rc = VAL_ERR_ARG;
  +        return FALSE;
  +    }
  +    obj = (val_object_t *)datptr;
  +
  +    /* execute VAL callback */
  +    if ((ctx->rc = ctx->cb(ctx->ctx, name, (obj->type & ~VAL_INLINE), obj->desc, val_storage(obj))) != VAL_OK)
  +        return FALSE;
  +
  +    return TRUE;
  +}
  +
  +val_rc_t val_apply(val_t *val, val_cb_t cb, void *ctx)
  +{
  +    val_apply_ctx_t val_ctx;
  +
  +    if (val == NULL || cb == NULL)
  +        return VAL_ERR_ARG;
  +    val_ctx.cb  = cb;
  +    val_ctx.ctx = ctx;
  +    val_ctx.rc  = VAL_OK;
  +    if (!lh_apply(val->lh, val_apply_cb, &val_ctx))
  +        return VAL_ERR_SYS;
  +    return val_ctx.rc;
   }
   
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_val.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 lmtp2nntp_val.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_val.h	15 Jan 2002 13:02:20 -0000	1.1
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_val.h	16 Jan 2002 09:46:52 -0000	1.2
  @@ -1,31 +1,41 @@
   
  +#ifndef __LMTP2NNTP_VAL_H__
  +#define __LMTP2NNTP_VAL_H__
  +
   #include <stdarg.h>
   
   enum {
  -    VAL_TYPE_PTR    = 1<<0,
  -    VAL_TYPE_CHAR   = 1<<1,
  -    VAL_TYPE_SHORT  = 1<<2,
  -    VAL_TYPE_INT    = 1<<3,
  -    VAL_TYPE_LONG   = 1<<4,
  -    VAL_TYPE_FLOAT  = 1<<5,
  -    VAL_TYPE_DOUBLE = 1<<6
  +    VAL_TYPE_VAL    = 1<<0,
  +    VAL_TYPE_PTR    = 1<<1,
  +    VAL_TYPE_CHAR   = 1<<2,
  +    VAL_TYPE_SHORT  = 1<<3,
  +    VAL_TYPE_INT    = 1<<4,
  +    VAL_TYPE_LONG   = 1<<5,
  +    VAL_TYPE_FLOAT  = 1<<6,
  +    VAL_TYPE_DOUBLE = 1<<7
   };
   
   typedef enum {
       VAL_OK,
  -    VAL_MEMORY,
  -    VAL_LH,
  -    VAL_UNKNOWN
  +    VAL_ERR_ARG,
  +    VAL_ERR_USE,
  +    VAL_ERR_MEM,
  +    VAL_ERR_SYS
   } val_rc_t;
   
   struct val_s;
   typedef struct val_s val_t;
   
  +typedef val_rc_t (*val_cb_t)(void *, const char *, int, const char *, void *);
  +
   val_rc_t val_create  (val_t **);
   val_rc_t val_destroy (val_t *);
  -val_rc_t val_reg     (val_t *, const char *, int, void *);
  +val_rc_t val_reg     (val_t *, const char *, int, const char *, void *);
   val_rc_t val_set     (val_t *, const char *, ...);
   val_rc_t val_get     (val_t *, const char *, ...);
   val_rc_t val_vset    (val_t *, const char *, va_list);
   val_rc_t val_vget    (val_t *, const char *, va_list);
  +val_rc_t val_apply   (val_t *, val_cb_t cb, void *ctx);
  +
  +#endif /* __LMTP2NNTP_VAL_H__ */
   

From ossp-cvs-owner@ossp.org  Wed Jan 16 15:03:54 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C9F30764E3; Wed, 16 Jan 2002 15:03:53 +0100 (CET)
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Message-Id: <20020116140353.C9F30764E3@mail.ossp.org>
Date: Wed, 16 Jan 2002 15:03:53 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   OSSP Project Master
  Root:   /e/ossp/cvs                      Email:  ossp@ossp.org
  Module: CVSROOT                          Date:   16-Jan-2002 15:03:53
  Branch: HEAD                             Handle: 2002011614035300

  Modified files:
    CVSROOT                 modules

  Log:
    add new-born val library

  Summary:
    Revision    Changes     Path
    1.39        +1  -0      CVSROOT/modules
  ____________________________________________________________________________

  Index: CVSROOT/modules
  ============================================================
  $ cvs diff -u -r1.38 -r1.39 modules
  --- CVSROOT/modules	9 Jan 2002 10:31:14 -0000	1.38
  +++ CVSROOT/modules	16 Jan 2002 14:03:53 -0000	1.39
  @@ -80,6 +80,7 @@
   pth             ossp-pkg/pth
   shtool          ossp-pkg/shtool
   cache           ossp-pkg/cache
  +val             ossp-pkg/val
   
   #   OSSP lmtp2nntp
   lmtp2nntp       ossp-pkg/lmtp2nntp &lmtp2nntp_str &lmtp2nntp_l2 &lmtp2nntp_sa &lmtp2nntp_var

From ossp-cvs-owner@ossp.org  Wed Jan 16 15:09:19 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9D76A764E3; Wed, 16 Jan 2002 15:09:19 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val README TODO VERSION aclocal.m4 devtool.conf v...
Message-Id: <20020116140919.9D76A764E3@mail.ossp.org>
Date: Wed, 16 Jan 2002 15:09:19 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   16-Jan-2002 15:09:19
  Branch: HEAD                             Handle: 2002011614091800

  Modified files:
    ossp-pkg/val            README TODO VERSION aclocal.m4 devtool.conf
                            val.pod

  Log:
    new OSSP val build environment

  Summary:
    Revision    Changes     Path
    1.2         +6  -6      ossp-pkg/val/README
    1.4         +1  -0      ossp-pkg/val/TODO
    1.2         +1  -1      ossp-pkg/val/VERSION
    1.3         +1  -1      ossp-pkg/val/aclocal.m4
    1.3         +1  -1      ossp-pkg/val/devtool.conf
    1.3         +3  -4      ossp-pkg/val/val.pod
  ____________________________________________________________________________

  Index: ossp-pkg/val/README
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 README
  --- ossp-pkg/val/README	9 Jan 2002 10:44:28 -0000	1.1
  +++ ossp-pkg/val/README	16 Jan 2002 14:09:18 -0000	1.2
  @@ -1,11 +1,11 @@
  -                  _          
  -    ___ __ _  ___| |__   ___ 
  -   / __/ _` |/ __| '_ \ / _ \
  -  | (_| (_| | (__| | | |  __/
  -   \___\__,_|\___|_| |_|\___|
  +              _ 
  +  __   ____ _| |
  +  \ \ / / _` | |
  +   \ V / (_| | |
  +    \_/ \__,_|_|
   
     OSSP Val - Value Library
  -  Version 0.1.0 (13-Sep-2001)
  +  Version 0.1.0 (16-Jan-2002)
   
     ABSTRACT
   
  Index: ossp-pkg/val/TODO
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 TODO
  --- ossp-pkg/val/TODO	10 Jan 2002 20:05:29 -0000	1.3
  +++ ossp-pkg/val/TODO	16 Jan 2002 14:09:18 -0000	1.4
  @@ -1,3 +1,4 @@
   
   TODO
   ----
  +
  Index: ossp-pkg/val/VERSION
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 VERSION
  --- ossp-pkg/val/VERSION	9 Jan 2002 10:44:28 -0000	1.1
  +++ ossp-pkg/val/VERSION	16 Jan 2002 14:09:18 -0000	1.2
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP val (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP val, Version 0.1.0 (08-Oct-2001)
  +  This is OSSP val, Version 0.1.0 (16-Jan-2002)
   
  Index: ossp-pkg/val/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 aclocal.m4
  --- ossp-pkg/val/aclocal.m4	9 Jan 2002 12:39:15 -0000	1.2
  +++ ossp-pkg/val/aclocal.m4	16 Jan 2002 14:09:18 -0000	1.3
  @@ -38,7 +38,7 @@
   
   AC_DEFUN(AC_COMPILER_OPTION,[dnl
   AC_MSG_CHECKING(whether compiler option(s) $2 work)
  -AC_VAL_VAL(ac_cv_compiler_option_$1,[
  +AC_CACHE_VAL(ac_cv_compiler_option_$1,[
   SAVE_CFLAGS="$CFLAGS"
   CFLAGS="$CFLAGS $3"
   AC_TRY_COMPILE([],[], ac_cv_compiler_option_$1=yes, ac_cv_compiler_option_$1=no)
  Index: ossp-pkg/val/devtool.conf
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.conf
  --- ossp-pkg/val/devtool.conf	9 Jan 2002 13:34:42 -0000	1.2
  +++ ossp-pkg/val/devtool.conf	16 Jan 2002 14:09:18 -0000	1.3
  @@ -14,7 +14,7 @@
   
   %configure
       ./configure \
  -        --prefix=/tmp/sa \
  +        --prefix=/tmp/val \
           --disable-shared \
           --enable-debug \
           "$@"
  Index: ossp-pkg/val/val.pod
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 val.pod
  --- ossp-pkg/val/val.pod	9 Jan 2002 13:36:41 -0000	1.2
  +++ ossp-pkg/val/val.pod	16 Jan 2002 14:09:18 -0000	1.3
  @@ -46,14 +46,13 @@
   
   =head1 HISTORY
   
  -B<OSSP val> was invented in January 2002 by Ralf S. Engelschall for use
  -inside the OSSP project.
  +B<OSSP val> was invented in January 2002 by Thomas Lotterer and Ralf S.
  +Engelschall for use inside the OSSP lmtp2nntp project.
   
   =head1 AUTHORS
   
  + Thomas Lotterer
    Ralf S. Engelschall
  - rse@engelschall.com
  - www.engelschall.com
   
   =cut
   

From ossp-cvs-owner@ossp.org  Wed Jan 16 15:09:55 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6823D764F8; Wed, 16 Jan 2002 15:09:55 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val .cvsignore
Message-Id: <20020116140955.6823D764F8@mail.ossp.org>
Date: Wed, 16 Jan 2002 15:09:55 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   16-Jan-2002 15:09:55
  Branch: HEAD                             Handle: 2002011614095500

  Added files:
    ossp-pkg/val            .cvsignore

  Log:
    ignore generated files

  Summary:
    Revision    Changes     Path
    1.1         +11 -0      ossp-pkg/val/.cvsignore
  ____________________________________________________________________________

  Index: ossp-pkg/val/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  val_test
  val-config
  shtool
  ltmain.sh
  libtool.m4
  configure
  config.sub
  config.h.in
  config.h
  config.guess
  Makefile

From ossp-cvs-owner@ossp.org  Wed Jan 16 15:17:57 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 30AF3764E3; Wed, 16 Jan 2002 15:17:57 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val val.c val.h
Message-Id: <20020116141757.30AF3764E3@mail.ossp.org>
Date: Wed, 16 Jan 2002 15:17:57 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   16-Jan-2002 15:17:57
  Branch: HEAD                             Handle: 2002011614175600

  Modified files:
    ossp-pkg/val            val.c val.h

  Log:
    move val+lh code from OSSP lmtp2nntp to its dedicated source tree

  Summary:
    Revision    Changes     Path
    1.2         +889 -1     ossp-pkg/val/val.c
    1.2         +35 -0      ossp-pkg/val/val.h
  ____________________________________________________________________________

  Index: ossp-pkg/val/val.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 val.c
  --- ossp-pkg/val/val.c	9 Jan 2002 10:44:28 -0000	1.1
  +++ ossp-pkg/val/val.c	16 Jan 2002 14:17:56 -0000	1.2
  @@ -34,7 +34,10 @@
   #endif
   
   /* include system API headers */
  -#include <stdio.h>       /* for "s[n]printf()" */
  +#include <stdio.h>       /* for "size_t" */
  +#include <stdlib.h>
  +#include <stdarg.h>
  +#include <string.h>
   
   /* include own API header */
   #include "val.h"
  @@ -46,4 +49,889 @@
   #ifndef TRUE
   #define TRUE  (!FALSE)
   #endif
  +
  +/*
  +**  ____                           ____
  +**  ____ LINEAR HASING SUB-LIBRARY ____
  +**
  +**  This part implements a Dynamic Hash Table, based on WITOLD LITWIN
  +**  and PER-AKE LARSON's ``Linear Hashing'' algorithm (1980/1988),
  +**  implemented on top of a two-level virtual array with separate
  +**  collision chains as the backend data structure. Some ideas were
  +**  taken over from MIKAEL PETTERSON's Linear Hashing enhancements
  +**  (1993). The code is derived from OSSP act. See there for details.
  +*/
  +
  +struct lh_st;
  +typedef struct lh_st lh_t;
  +
  +typedef int (*lh_cb_t)(void *ctx, const void *keyptr, int keylen, const void *datptr, int datlen);
  +
  +#if 0
  +lh_t *lh_create (void);
  +int   lh_insert (lh_t *h, const void *keyptr, int keylen, const void  *datptr, int  datlen, int override);
  +int   lh_lookup (lh_t *h, const void *keyptr, int keylen,       void **datptr, int *datlen);
  +int   lh_delete (lh_t *h, const void *keyptr, int keylen);
  +int   lh_apply  (lh_t *h, lh_cb_t cb, void *ctx);
  +int   lh_destroy(lh_t *h);
  +#endif
  +
  +/* fixed size (number of pointers) of the directory and of each segment */
  +#define INITDIRSIZE  256 /* can be an arbitrary value */
  +#define SEGMENTSIZE  512 /* has to be a power of 2 for below arithmetic */
  +
  +/* the borders for the hash table load */
  +#define MINLOADFCTR  1   /* should be between 0 and 1 */
  +#define MAXLOADFCTR  2   /* should be between 2 and 4 */
  +
  +/* the per-element structure (keep as small as possible!) */
  +typedef struct element_st element_t;
  +struct element_st {
  +    element_t    *e_next;    /* pointer to next element in collision chain */
  +    unsigned long e_hash;    /* cached hash value of element (rehashing optimization) */
  +    void         *e_keyptr;  /* pointer to key (= also pointer to key+data memory chunk) */
  +    void         *e_datptr;  /* pointer to data in key+data memory chunk */
  +    void         *e_endptr;  /* pointer to end of key+data memory chunk */
  +};
  +
  +/* the hash table segments */
  +typedef struct segment_st segment_t;
  +struct segment_st {
  +    element_t *s_element[SEGMENTSIZE]; /* array of pointers to elements */
  +}; 
  +
  +/* the top-level hash table structure */
  +struct lh_st {
  +    unsigned int   h_p;         /* pointer to start of unsplit region */
  +    unsigned int   h_pmax;      /* pointer to end of unsplit region */
  +    int            h_slack;     /* grow/shrink indicator */
  +    unsigned       h_dirsize;   /* current size of directory */
  +    segment_t    **h_dir;       /* pointer to directory */
  +};
  +
  +/* on-the-fly calculate index into directory and segment from virtual array index */
  +#define DIRINDEX(addr) (int)((addr) / SEGMENTSIZE)
  +#define SEGINDEX(addr) (int)((addr) % SEGMENTSIZE)
  +
  +/* on-the-fly calculate lengths of key and data to reduce memory in element_t */
  +#define el_keylen(el) ((char *)((el)->e_datptr)-(char *)((el)->e_keyptr))
  +#define el_datlen(el) ((char *)((el)->e_endptr)-(char *)((el)->e_datptr))
  +
  +/*
  + * BJDDJ Hash Function (Bob Jenkins, Dr. Dobbs Journal):
  + * This is a very complex but also very good hash function, as proposed
  + * in the March'97 issue of Dr. Dobbs Journal (DDJ) by Bob Jenkins (see
  + * http://burtleburtle.net/bob/hash/doobs.html for online version). He
  + * showed that this hash function has both very good distribution and
  + * performance and our own hash function comparison confirmed this. The
  + * only difference to the original function of B.J. here is that our
  + * version doesn't provide the `level' (= previous hash) argument for
  + * consistency reasons with the other hash functions (i.e. same function
  + * signature). It can be definetely recommended as a good general
  + * purpuse hash function.
  + */
  +static long 
  +lh_hash(
  +    register const unsigned char *k,
  +    register size_t length)
  +{
  +    register long a,b,c,len;
  +
  +    /* some abbreviations */
  +#define ub4 long
  +#define mix(a,b,c) { \
  +        a -= b; a -= c; a ^= (c>>13); \
  +        b -= c; b -= a; b ^= (a<< 8); \
  +        c -= a; c -= b; c ^= (b>>13); \
  +        a -= b; a -= c; a ^= (c>>12); \
  +        b -= c; b -= a; b ^= (a<<16); \
  +        c -= a; c -= b; c ^= (b>> 5); \
  +        a -= b; a -= c; a ^= (c>> 3); \
  +        b -= c; b -= a; b ^= (a<<10); \
  +        c -= a; c -= b; c ^= (b>>15); \
  +    }
  +
  +    /* setup the internal state */
  +    len = length;
  +    a = b = 0x9e3779b9;  /* the golden ratio; an arbitrary value */
  +    c = 0;
  +
  +    /* handle most of the key */
  +    while (len >= 12) {
  +        a += (k[0] +((ub4)k[1]<<8) +((ub4)k[ 2]<<16) +((ub4)k[ 3]<<24));
  +        b += (k[4] +((ub4)k[5]<<8) +((ub4)k[ 6]<<16) +((ub4)k[ 7]<<24));
  +        c += (k[8] +((ub4)k[9]<<8) +((ub4)k[10]<<16) +((ub4)k[11]<<24));
  +        mix(a,b,c);
  +        k += 12; len -= 12;
  +    }
  +
  +    /* handle the last 11 bytes */
  +    c += length;
  +    switch(len) { 
  +        /* all the case statements fall through */
  +        case 11: c+=((ub4)k[10]<<24);
  +        case 10: c+=((ub4)k[ 9]<<16);
  +        case 9 : c+=((ub4)k[ 8]<< 8);
  +        /* the first byte of c is reserved for the length */
  +        case 8 : b+=((ub4)k[ 7]<<24);
  +        case 7 : b+=((ub4)k[ 6]<<16);
  +        case 6 : b+=((ub4)k[ 5]<< 8);
  +        case 5 : b+=k[4];
  +        case 4 : a+=((ub4)k[ 3]<<24);
  +        case 3 : a+=((ub4)k[ 2]<<16);
  +        case 2 : a+=((ub4)k[ 1]<< 8);
  +        case 1 : a+=k[0];
  +        /* case 0: nothing left to add */
  +    }
  +    mix(a,b,c);
  +
  +#undef ub4
  +#undef mix
  +
  +    /* report the result */
  +    return c;
  +}
  +
  +/* create the hash table structure */
  +static lh_t *lh_create(void)
  +{
  +    lh_t *h;
  +
  +    /* allocate hash structure */
  +    if ((h = (lh_t *)malloc(sizeof(lh_t))) == NULL)
  +        return NULL;
  +
  +    /* allocate and clear hash table directory */
  +    h->h_dirsize = INITDIRSIZE;
  +    if ((h->h_dir = (segment_t **)malloc(h->h_dirsize * sizeof(segment_t *))) == NULL) {
  +        free(h);
  +        return NULL;
  +    }
  +    memset(h->h_dir, 0, h->h_dirsize * sizeof(segment_t *));
  +
  +    /* allocate and clear first segment of hash table array */
  +    if ((h->h_dir[0] = (segment_t *)malloc(sizeof(segment_t))) == NULL) {
  +        free(h->h_dir); 
  +        free(h);
  +        return NULL;
  +    }
  +    memset(h->h_dir[0], 0, sizeof(segment_t));
  +
  +    /* initialize hash table control attributes */
  +    h->h_p     = 0;
  +    h->h_pmax  = SEGMENTSIZE;
  +    h->h_slack = SEGMENTSIZE * MAXLOADFCTR;
  +
  +    return h;
  +}
  +
  +/* expand the hash table */
  +static void lh_expand(lh_t *h)
  +{
  +    unsigned int pmax0;
  +    unsigned int newaddr;
  +    segment_t *seg;
  +    element_t **pelold;
  +    element_t *el, *headofold, *headofnew, *next;
  +    unsigned int n;
  +    
  +    /* calculate next new address */
  +    pmax0   = h->h_pmax;
  +    newaddr = pmax0 + h->h_p;
  +
  +    /* have to enlarge directory? */
  +    if (h->h_dirsize <= DIRINDEX(newaddr)) {
  +        n = h->h_dirsize * sizeof(segment_t *);
  +        h->h_dirsize *= 2;
  +        if ((h->h_dir = (segment_t **)realloc(
  +                         h->h_dir, h->h_dirsize*sizeof(segment_t *))) == NULL)
  +             return;
  +        memset((char *)h->h_dir+n, 0, n);
  +    }
  +    
  +    /* have to create a new table segment? */
  +    if (SEGINDEX(newaddr) == 0) {
  +        if ((seg = (segment_t *)malloc(sizeof(segment_t))) == NULL)
  +            return;
  +        memset(seg, 0, sizeof(segment_t));
  +        h->h_dir[DIRINDEX(newaddr)] = seg;
  +    }
  +
  +    /* locate P-element */
  +    pelold = &h->h_dir[DIRINDEX(h->h_p)]->s_element[SEGINDEX(h->h_p)];
  +
  +    /* adjust the state variables */
  +    if (++(h->h_p) >= h->h_pmax) {
  +        h->h_pmax = (h->h_pmax << 1); /* == h->h_pmax * 2 */
  +        h->h_p = 0;
  +    }
  +    h->h_slack += MAXLOADFCTR;
  +    
  +    /* relocate and split between P-element new element */
  +    headofold = NULL;
  +    headofnew = NULL;
  +    for (el = *pelold; el != NULL; el = next) {
  +        next = el->e_next;
  +        if (el->e_hash & pmax0) {
  +            el->e_next = headofnew;
  +            headofnew  = el;
  +        } else {
  +            el->e_next = headofold;
  +            headofold  = el;
  +        }
  +    }
  +    *pelold = headofold;
  +    h->h_dir[DIRINDEX(newaddr)]->s_element[SEGINDEX(newaddr)] = headofnew;
  +
  +    return;
  +}
  +
  +/* shrink hash table */
  +static void lh_shrink(lh_t *h)
  +{
  +    segment_t *lastseg;
  +    element_t **pel;
  +    unsigned int oldlast;
  +    unsigned int dirsize;
  +    void *dir;
  +
  +    /* calculate old last element */
  +    oldlast = h->h_p + h->h_pmax - 1;
  +
  +    /* we cannot shrink below one segment */
  +    if (oldlast == 0)
  +        return;
  +
  +    /* adjust the state variables */
  +    if (h->h_p == 0) {
  +        h->h_pmax = (h->h_pmax >> 1); /* == h->h_pmax / 2 */;
  +        h->h_p = h->h_pmax - 1;
  +    } else
  +        h->h_p--;
  +    h->h_slack -= MAXLOADFCTR;
  +
  +    /* relocate the lost old last element to the end of the P-element */
  +    pel = &h->h_dir[DIRINDEX(h->h_p)]->s_element[SEGINDEX(h->h_p)];
  +    while (*pel != NULL)
  +        pel = &((*pel)->e_next);
  +    lastseg = h->h_dir[DIRINDEX(oldlast)];
  +    *pel = lastseg->s_element[SEGINDEX(oldlast)];
  +    lastseg->s_element[SEGINDEX(oldlast)] = NULL;
  +
  +    /* if possible, deallocate the last segment */
  +    if (SEGINDEX(oldlast) == 0) {
  +        h->h_dir[DIRINDEX(oldlast)] = NULL;
  +        free(lastseg);
  +    }
  +
  +    /* if possible, deallocate the end of the directory */
  +    if (h->h_dirsize > INITDIRSIZE && DIRINDEX(oldlast) < h->h_dirsize/2) {
  +        dirsize = (h->h_dirsize >> 1); /* == h->h_dirsize / 2 */
  +        if ((dir = (segment_t **)realloc(
  +                   h->h_dir, dirsize*sizeof(segment_t *))) != NULL) {
  +            h->h_dirsize = dirsize;
  +            h->h_dir = dir;
  +        }
  +    }
  +    return;
  +}
  +
  +/* insert element into hash table */
  +static int lh_insert(lh_t *h, const void *keyptr, int keylen, const void *datptr, int datlen, int override)
  +{
  +    unsigned int hash, addr;
  +    element_t *el, **pel;
  +    int bFound;
  +    void *vp;
  +
  +    /* argument consistency check */
  +    if (h == NULL || keyptr == NULL || keylen <= 0)
  +        return FALSE;
  +
  +    /* calculate hash address */
  +    hash = lh_hash(keyptr, keylen);
  +    addr = hash % h->h_pmax; /* unsplit region */
  +    if (addr < h->h_p)
  +        addr = hash % (h->h_pmax << 1); /* split region */
  +
  +    /* locate hash element's collision list */
  +    pel = &h->h_dir[DIRINDEX(addr)]->s_element[SEGINDEX(addr)];
  +
  +    /* check whether element is already in the hash table */
  +    bFound = FALSE;
  +    for (el = *pel; el != NULL; el = el->e_next) {
  +        if (   el->e_hash == hash 
  +            && el_keylen(el) == keylen
  +            && memcmp(el->e_keyptr, keyptr, el_keylen(el)) == 0) {
  +            bFound = TRUE;
  +            break;
  +        }
  +    }
  +
  +    /* only override on request */
  +    if (bFound && !override)
  +        return FALSE;
  +
  +    /* create a duplicate of key and data */
  +    if ((vp = malloc(keylen+datlen)) == NULL)
  +        return FALSE;
  +    memmove(vp, keyptr, keylen);
  +    memmove((char *)vp+keylen, datptr, datlen);
  +    keyptr = vp;
  +    datptr = (char *)vp+keylen;
  +
  +    if (bFound) {
  +        /* reuse existing element by freeing old contents */
  +        if (el->e_keyptr != NULL)
  +            free(el->e_keyptr);
  +    }
  +    else {
  +        /* allocate new element and chain into list */
  +        if ((el = (element_t *)malloc(sizeof(element_t))) == 0) {
  +            free(vp);
  +            return FALSE;
  +        }
  +        while (*pel != NULL)
  +            pel = &((*pel)->e_next);
  +        el->e_next = *pel;
  +        *pel = el;
  +    }
  +
  +    /* insert contents into element structure */
  +    el->e_keyptr = (void *)keyptr;
  +    el->e_datptr = (void *)datptr;
  +    el->e_endptr = (char *)datptr+datlen;
  +    el->e_hash   = hash;
  +
  +    /* do we need to expand the table now? */
  +    if (--(h->h_slack) < 0)
  +        lh_expand(h);
  +
  +    return TRUE;
  +}
  +
  +/* lookup an element in hash table */
  +static int lh_lookup(lh_t *h, const void *keyptr, int keylen, void **datptr, int *datlen)
  +{
  +    unsigned int hash, addr;
  +    element_t *el, **pel;
  +
  +    /* argument consistency check */
  +    if (h == NULL || keyptr == NULL || keylen <= 0)
  +        return FALSE;
  +
  +    /* calculate hash address */
  +    hash = lh_hash(keyptr, keylen);
  +    addr = hash % h->h_pmax; /* unsplit region */
  +    if (addr < h->h_p)
  +        addr = hash % (h->h_pmax << 1); /* split region */
  +
  +    /* locate hash element collision list */
  +    pel = &h->h_dir[DIRINDEX(addr)]->s_element[SEGINDEX(addr)];
  +
  +    /* search for element in collision list */
  +    for (el = *pel; el != NULL; el = el->e_next) {
  +        if (   el->e_hash == hash 
  +            && el_keylen(el) == keylen
  +            && memcmp(el->e_keyptr, keyptr, el_keylen(el)) == 0) {
  +            /* provide results */
  +            if (datptr != NULL)
  +                *datptr = el->e_datptr;
  +            if (datlen != NULL)
  +                *datlen = el_datlen(el);
  +            return TRUE;
  +        }
  +    }
  +    return FALSE;
  +}
  +
  +/* delete an element in hash table */
  +static int lh_delete(lh_t *h, const void *keyptr, int keylen)
  +{
  +    unsigned int hash, addr;
  +    element_t *el, *lel, **pel;
  +    int rv;
  +
  +    /* argument consistency check */
  +    if (h == NULL || keyptr == NULL || keylen <= 0)
  +        return FALSE;
  +
  +    /* calculate hash address */
  +    hash = lh_hash(keyptr, keylen);
  +    addr = hash % h->h_pmax; /* unsplit region */
  +    if (addr < h->h_p)
  +        addr = hash % (h->h_pmax << 1); /* split region */
  +
  +    /* locate hash element collision chain */
  +    pel = &h->h_dir[DIRINDEX(addr)]->s_element[SEGINDEX(addr)];
  +
  +    /* search for element in collision chain */
  +    rv = FALSE;
  +    for (lel = NULL, el = *pel; el != NULL; lel = el, el = el->e_next) {
  +        if (   el->e_hash == hash 
  +            && el_keylen(el) == keylen
  +            && memcmp(el->e_keyptr, keyptr, el_keylen(el)) == 0) {
  +            /* free key+data memory chunk */
  +            if (el->e_keyptr != NULL)
  +                free(el->e_keyptr);
  +            /* remove element from collision chain */
  +            if (lel == NULL)
  +                *pel = el->e_next; 
  +            else
  +                lel->e_next = el->e_next;
  +            /* deallocate element structure */
  +            free(el);
  +            rv = TRUE;
  +            break;
  +        }
  +    }
  +
  +    /* do we need to shrink the table now? */
  +    if (++(h->h_slack) > ((h->h_pmax + h->h_p) * (MAXLOADFCTR-MINLOADFCTR)))
  +        lh_shrink(h);
  +
  +    return rv;
  +}
  +
  +/* apply a callback for all elements in the hash table */
  +static int lh_apply(lh_t *h, lh_cb_t cb, void *ctx)
  +{
  +    element_t *el;
  +    unsigned int i, j;
  +
  +    /* argument consistency check */
  +    if (h == NULL || cb == NULL)
  +        return FALSE;
  +
  +    /* interate over all segment's entries */
  +    for (i = 0; i < h->h_dirsize; i++) {
  +        if (h->h_dir[i] == NULL)
  +            continue;
  +        /* interate over all collision chains */
  +        for (j = 0; j < SEGMENTSIZE; j++) {
  +            if (h->h_dir[i]->s_element[j] == NULL)
  +                continue;
  +            /* interate over all elements in collision chain */
  +            el = h->h_dir[i]->s_element[j];
  +            for (; el != NULL; el = el->e_next) {
  +                if (!cb(ctx, el->e_keyptr, el_keylen(el), el->e_datptr, el_datlen(el)))
  +                    return FALSE;
  +            }
  +        }
  +    }
  +    return TRUE;
  +}
  +
  +/* destroy the whole hash table */
  +static int lh_destroy(lh_t *h)
  +{
  +    element_t *el, **pel;
  +    unsigned int i, j;
  +
  +    /* argument consistency check */
  +    if (h == NULL)
  +        return FALSE;
  +
  +    /* deallocate all segment's entries */
  +    for (i = 0; i < h->h_dirsize; i++) {
  +        if (h->h_dir[i] == NULL)
  +            continue;
  +        /* deallocate all collision chains */
  +        for (j = 0; j < SEGMENTSIZE; j++) {
  +            if (h->h_dir[i]->s_element[j] == NULL)
  +                continue;
  +            /* deallocate all elements in collision chain */
  +            pel = &h->h_dir[i]->s_element[j];
  +            for (el = *pel; el != NULL; el = el->e_next) {
  +                /* deallocate key+data memory chunk */
  +                if (el->e_keyptr != NULL)
  +                    free(el->e_keyptr);
  +            }
  +        }
  +        free(h->h_dir[i]);
  +    }
  +
  +    /* deallocate hash table directory */
  +    free(h->h_dir);
  +
  +    /* deallocate hash table top-level structure */
  +    free(h);
  +
  +    return TRUE;
  +}
  +
  +/*
  +**  ____               ____
  +**  ____ VALUE LIBRARY ____
  +**
  +*/
  +
  +/* usually val_object_t.data is a pointer val_object_t.data.p, but VAL_INLINE
  + * signals val_object_t.data is actual data val_object_t.data.[csilfd]
  + */
  +enum {
  +    VAL_INLINE      = 1<<31
  +};
  +
  +typedef struct {
  +    int type;
  +    union {
  +        val_t *v;
  +        void  *p;
  +        char   c;
  +        short  s;
  +        int    i;
  +        long   l;
  +        float  f;
  +        double d;
  +    } data;
  +    char *desc;
  +} val_object_t;
  +
  +struct val_s {
  +    lh_t *lh;
  +};
  +
  +static void *val_storage(val_object_t *obj)
  +{
  +    void *storage;
  +
  +    if (obj->type & VAL_INLINE) {
  +        switch (obj->type & ~VAL_INLINE) {
  +            case VAL_TYPE_VAL:
  +                storage = &obj->data.v;
  +                break;
  +            case VAL_TYPE_PTR:
  +                storage = &obj->data.p;
  +                break;
  +            case VAL_TYPE_CHAR:
  +                storage = &obj->data.c;
  +                break;
  +            case VAL_TYPE_SHORT:
  +                storage = &obj->data.s;
  +                break;
  +            case VAL_TYPE_INT:
  +                storage = &obj->data.i;
  +                break;
  +            case VAL_TYPE_LONG:
  +                storage = &obj->data.l;
  +                break;
  +            case VAL_TYPE_FLOAT:
  +                storage = &obj->data.f;
  +                break;
  +            case VAL_TYPE_DOUBLE:
  +                storage = &obj->data.d;
  +                break;
  +            default:
  +                storage = NULL;
  +        }
  +    }
  +    else 
  +        storage = obj->data.p;
  +    return storage;
  +}
  +
  +val_rc_t val_create(val_t **valp)
  +{
  +    val_t *val;
  +
  +    if (valp == NULL)
  +        return VAL_ERR_ARG;
  +    if ((val = (val_t *)malloc(sizeof(val_t))) == NULL)
  +        return VAL_ERR_SYS;
  +    if ((val->lh = lh_create()) == NULL) {
  +        free(val);
  +        return VAL_ERR_SYS;
  +    }
  +    *valp = val;
  +    return VAL_OK;
  +}
  +
  +static int (val_destroy_cb)(void *_ctx, const void *keyptr, int keylen, const void *datptr, int datlen)
  +{
  +    val_object_t *obj;
  +    
  +    obj = (val_object_t *)datptr;
  +    if (obj->desc != NULL)
  +        free(obj->desc);
  +    return TRUE;
  +}
  +
  +val_rc_t val_destroy(val_t *val)
  +{
  +    if (val == NULL)
  +        return VAL_ERR_ARG;
  +    lh_apply(val->lh, val_destroy_cb, NULL);
  +    if (!lh_destroy(val->lh))
  +        return VAL_ERR_SYS;
  +    free(val);
  +    return VAL_OK;
  +}
  +
  +val_rc_t val_reg(val_t *val, const char *name, int type, const char *desc, void *storage)
  +{
  +    val_object_t *obj;
  +    val_object_t newobj;
  +    const char *cp;
  +    val_t *child;
  +
  +    if (val == NULL || name == NULL || type == 0)
  +        return VAL_ERR_ARG;
  +
  +
  +
  +    if ((cp = strchr(name, '.')) != NULL) {
  +        if (!lh_lookup(val->lh, name, cp-name, (void **)&obj, NULL))
  +            return VAL_ERR_ARG;
  +        if (!(obj->type & VAL_TYPE_VAL))
  +            return VAL_ERR_USE;
  +        child = *(val_t **)(val_storage(obj));
  +        return val_reg(child, cp+1, type, desc, storage);
  +    }
  +
  +
  +
  +    if (desc != NULL)
  +        newobj.desc = strdup(desc);
  +    else
  +        newobj.desc = NULL;
  +    if (storage == NULL) { 
  +        newobj.type   = (type | VAL_INLINE);
  +        newobj.data.l = 0;
  +    }
  +    else {
  +        newobj.type   = (type & ~VAL_INLINE);
  +        newobj.data.p = storage;
  +    }
  +    if (!lh_insert(val->lh, name, strlen(name), &newobj, sizeof(newobj), 1))
  +        return VAL_ERR_SYS;
  +
  +    return VAL_OK;
  +}
  +
  +val_rc_t val_vset(val_t *val, const char *name, va_list ap)
  +{
  +    val_object_t *obj;
  +    void *storage;
  +    const char *cp;
  +    val_t *child;
  +
  +    if (val == NULL || name == NULL || ap == NULL)
  +        return VAL_ERR_ARG;
  +    if ((cp = strchr(name, '.')) != NULL) {
  +        if (!lh_lookup(val->lh, name, cp-name, (void **)&obj, NULL))
  +            return VAL_ERR_ARG;
  +        if (!(obj->type & VAL_TYPE_VAL))
  +            return VAL_ERR_USE;
  +        child = *(val_t **)(val_storage(obj));
  +        return val_vset(child, cp+1, ap);
  +    }
  +    if (!lh_lookup(val->lh, name, strlen(name), (void **)&obj, NULL))
  +        return VAL_ERR_ARG;
  +    storage = val_storage(obj);
  +    switch (obj->type & ~VAL_INLINE) {
  +        case VAL_TYPE_VAL:
  +            *(val_t **)storage = (val_t *)va_arg(ap, void *);
  +            break;
  +        case VAL_TYPE_PTR:
  +            *(char **)storage = (char *)va_arg(ap, void *);
  +            break;
  +        case VAL_TYPE_CHAR:
  +            *(char *)storage = (char)va_arg(ap, int);
  +            break;
  +        case VAL_TYPE_SHORT:
  +            *(short *)storage = (short)va_arg(ap, int);
  +            break;
  +        case VAL_TYPE_INT:
  +            *(int *)storage = (int)va_arg(ap, int);
  +            break;
  +        case VAL_TYPE_LONG:
  +            *(long *)storage = (long)va_arg(ap, long);
  +            break;
  +        case VAL_TYPE_FLOAT:
  +            *(float *)storage = (float)va_arg(ap, double);
  +            break;
  +        case VAL_TYPE_DOUBLE:
  +            *(double *)storage = (double)va_arg(ap, double);
  +            break;
  +    }
  +    return VAL_OK;
  +}
  +
  +val_rc_t val_set(val_t *val, const char *name, ...)
  +{
  +    val_rc_t rc;
  +    va_list ap;
  +
  +    if (val == NULL || name == NULL)
  +        return VAL_ERR_ARG;
  +    va_start(ap, name);
  +    rc = val_vset(val, name, ap);
  +    va_end(ap);
  +    return rc;
  +}
  +
  +val_rc_t val_vget(val_t *val, const char *name, va_list ap)
  +{
  +    val_object_t *obj;
  +    void *storage;
  +    const char *cp;
  +    val_t *child;
  +
  +    if (val == NULL || name == NULL || ap == NULL)
  +        return VAL_ERR_ARG;
  +    if ((cp = strchr(name, '.')) != NULL) {
  +        if (!lh_lookup(val->lh, name, cp-name, (void **)&obj, NULL))
  +            return VAL_ERR_ARG;
  +        if (!(obj->type & VAL_TYPE_VAL))
  +            return VAL_ERR_USE;
  +        child = *(val_t **)(val_storage(obj));
  +        return val_vget(child, cp+1, ap);
  +    }
  +    if (!lh_lookup(val->lh, name, strlen(name), (void **)&obj, NULL))
  +        return VAL_ERR_ARG;
  +    storage = val_storage(obj);
  +    switch (obj->type & ~VAL_INLINE) {
  +        case VAL_TYPE_VAL:
  +            *((val_t **)va_arg(ap, void *)) = *(val_t **)storage;
  +            break;
  +        case VAL_TYPE_PTR:
  +            *((char **)va_arg(ap, void *)) = *(char **)storage;
  +            break;
  +        case VAL_TYPE_CHAR:
  +            *((char *)va_arg(ap, int *)) = *(char *)storage;
  +            break;
  +        case VAL_TYPE_SHORT:
  +            *((short *)va_arg(ap, int *)) = *(short *)storage;
  +            break;
  +        case VAL_TYPE_INT:
  +            *((int *)va_arg(ap, int *)) = *(int *)storage;
  +            break;
  +        case VAL_TYPE_LONG:
  +            *((long *)va_arg(ap, long *)) = *(long *)storage;
  +            break;
  +        case VAL_TYPE_FLOAT:
  +            *((float *)va_arg(ap, double *)) = *(float *)storage;
  +            break;
  +        case VAL_TYPE_DOUBLE:
  +            *((double *)va_arg(ap, double *)) = *(double *)storage;
  +            break;
  +    }
  +    return VAL_OK;
  +}
  +
  +val_rc_t val_get(val_t *val, const char *name, ...)
  +{
  +    val_rc_t rc;
  +    va_list ap;
  +
  +    if (val == NULL || name == NULL)
  +        return VAL_ERR_ARG;
  +    va_start(ap, name);
  +    rc = val_vget(val, name, ap);
  +    va_end(ap);
  +    return rc;
  +}
  +
  +#define VAL_MAXNAME 1024
  +
  +typedef struct {
  +    val_t *val;
  +    char *name;
  +    int prefixlen;
  +    int depth;
  +    val_cb_t cb;
  +    void *ctx;
  +    val_rc_t rc;
  +} val_apply_ctx_t;
  +
  +static val_rc_t val_apply_internal(val_t *, const char *, int, int, val_cb_t, void *);
  +
  +static int (val_apply_cb)(void *_ctx, const void *keyptr, int keylen, const void *datptr, int datlen)
  +{
  +    val_apply_ctx_t *ctx = (val_apply_ctx_t *)_ctx;
  +    char name[VAL_MAXNAME+1];
  +    int prefixlen;
  +
  +    /* on-the-fly create NUL-terminated name string */
  +    if ((strlen(ctx->name) + 1 + keylen) > VAL_MAXNAME) {
  +        ctx->rc = VAL_ERR_MEM;
  +        return FALSE;
  +    }
  +    if (strlen(ctx->name) > 0) {
  +        strcpy(name, ctx->name);
  +        strcat(name, ".");
  +        prefixlen = ctx->prefixlen + 1;
  +    }
  +    else {
  +        *name = '\0';
  +        prefixlen = ctx->prefixlen;
  +    }
  +    strncat(name, (char *)keyptr, keylen);
  +    if ((ctx->rc = val_apply_internal(ctx->val, name, prefixlen, ctx->depth, ctx->cb, ctx->ctx)) != VAL_OK)
  +        return FALSE;
  +    return TRUE;
  +}
  +
  +static val_rc_t val_apply_internal(val_t *val, const char *name, int prefixlen, int depth, val_cb_t cb, void *ctx)
  +{
  +    val_object_t *obj;
  +    val_t *child;
  +    char *cp;
  +    val_rc_t rc;
  +    val_apply_ctx_t val_ctx;
  +
  +fprintf(stderr, "DEBUG: val_apply_internal name=<%s>, prefixlen=%d, depth=%d\n", name, prefixlen, depth);
  +    if (name[prefixlen] == '\0') {
  +        /* prefix="foo.bar.", remainder="" */
  +        //if (--depth > 0) {
  +            val_ctx.val       = val;
  +            val_ctx.name      = (char *)name;
  +            val_ctx.prefixlen = prefixlen;
  +            val_ctx.depth     = depth;
  +            val_ctx.cb        = cb;
  +            val_ctx.ctx       = ctx;
  +            val_ctx.rc        = VAL_OK;
  +            if (!lh_apply(val->lh, val_apply_cb, &val_ctx))
  +                return VAL_ERR_SYS;
  +        //}
  +    }
  +    else {
  +        if ((cp = strchr(name+prefixlen, '.')) != NULL) {
  +            /* prefix="foo.bar.", remainder="quux.baz" */
  +            if (!lh_lookup(val->lh, name+prefixlen, cp-(name+prefixlen), (void **)&obj, NULL))
  +                return VAL_ERR_ARG;
  +            if (!(obj->type & VAL_TYPE_VAL))
  +                return VAL_ERR_USE;
  +            child = *(val_t **)(val_storage(obj));
  +            if (depth == 0)
  +                return VAL_OK;
  +            return val_apply_internal(child, name, cp-name+1, --depth, cb, ctx);
  +        }
  +        else {
  +            /* prefix="foo.bar.quux.", remainder="baz" */
  +            if (!lh_lookup(val->lh, name+prefixlen, strlen(name+prefixlen), (void **)&obj, NULL))
  +                return VAL_ERR_ARG;
  +            /* execute VAL callback */
  +            if ((rc = cb(ctx, name, (obj->type & ~VAL_INLINE), obj->desc, val_storage(obj))) != VAL_OK)
  +                return rc;
  +//fprintf(stderr, "DEBUG: depth=%d obj->type=%.8lx\n", depth, obj->type);
  +            if (obj->type & VAL_TYPE_VAL) {
  +                if (depth == 0)
  +                    return VAL_OK;
  +                child = *(val_t **)(val_storage(obj));
  +                return val_apply_internal(child, name, strlen(name), --depth, cb, ctx);
  +            }
  +        }
  +    }
  +    return VAL_OK;
  +}
  +
  +val_rc_t val_apply(val_t *val, const char *name, int depth, val_cb_t cb, void *ctx)
  +{
  +    if (val == NULL || name == NULL || depth < 0 || cb == NULL)
  +        return VAL_ERR_ARG;
  +
  +    return val_apply_internal(val, name, 0, depth, cb, ctx);
  +}
   
  Index: ossp-pkg/val/val.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 val.h
  --- ossp-pkg/val/val.h	9 Jan 2002 10:44:28 -0000	1.1
  +++ ossp-pkg/val/val.h	16 Jan 2002 14:17:56 -0000	1.2
  @@ -31,5 +31,40 @@
   #ifndef __VAL_H__
   #define __VAL_H__
   
  +#include <stdarg.h>
  +
  +enum {
  +    VAL_TYPE_VAL    = 1<<0,
  +    VAL_TYPE_PTR    = 1<<1,
  +    VAL_TYPE_CHAR   = 1<<2,
  +    VAL_TYPE_SHORT  = 1<<3,
  +    VAL_TYPE_INT    = 1<<4,
  +    VAL_TYPE_LONG   = 1<<5,
  +    VAL_TYPE_FLOAT  = 1<<6,
  +    VAL_TYPE_DOUBLE = 1<<7
  +};
  +
  +typedef enum {
  +    VAL_OK,
  +    VAL_ERR_ARG,
  +    VAL_ERR_USE,
  +    VAL_ERR_MEM,
  +    VAL_ERR_SYS
  +} val_rc_t;
  +
  +struct val_s;
  +typedef struct val_s val_t;
  +
  +typedef val_rc_t (*val_cb_t)(void *, const char *, int, const char *, void *);
  +
  +val_rc_t val_create  (val_t **);
  +val_rc_t val_destroy (val_t *);
  +val_rc_t val_reg     (val_t *, const char *, int, const char *, void *);
  +val_rc_t val_set     (val_t *, const char *, ...);
  +val_rc_t val_get     (val_t *, const char *, ...);
  +val_rc_t val_vset    (val_t *, const char *, va_list);
  +val_rc_t val_vget    (val_t *, const char *, va_list);
  +val_rc_t val_apply   (val_t *, const char *, int, val_cb_t, void *);
  +
   #endif /* __VAL_H__ */
   

From ossp-cvs-owner@ossp.org  Wed Jan 16 15:19:08 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 017C2764E3; Wed, 16 Jan 2002 15:19:07 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c lmtp2nntp_val.c lmtp...
Message-Id: <20020116141907.017C2764E3@mail.ossp.org>
Date: Wed, 16 Jan 2002 15:19:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   16-Jan-2002 15:19:07
  Branch: HEAD                             Handle: 2002011614190700

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c lmtp2nntp_val.c lmtp2nntp_val.h

  Log:
    commit for protocol reasons

  Summary:
    Revision    Changes     Path
    1.7         +27 -20     ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.3         +74 -23     ossp-pkg/lmtp2nntp/lmtp2nntp_val.c
    1.3         +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_val.h
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	16 Jan 2002 09:46:52 -0000	1.6
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	16 Jan 2002 14:19:07 -0000	1.7
  @@ -106,40 +106,40 @@
   {
       switch (type) {
           case VAL_TYPE_VAL:
  -            fprintf(stderr, "DEBUG: <%10s> VAL_TYPE_VAL,    desc=<%20s>, data@%.8lx INTERNAL\n",
  -                    (char *)ctx,       desc, (long)data);
  +            fprintf(stderr, "DEBUG: <%10s>, name=<%10s>, VAL_TYPE_VAL,    desc=<%20s>, data@%.8lx INTERNAL\n",
  +                    (char *)ctx, name,      desc, (long)data);
               break;
           case VAL_TYPE_PTR:
  -            fprintf(stderr, "DEBUG: <%10s> VAL_TYPE_PTR,    desc=<%20s>, data@%.8lx=%.8lx\n",
  -                    (char *)ctx,       desc, (long)data, *(long *)data);
  +            fprintf(stderr, "DEBUG: <%10s>, name=<%10s>, VAL_TYPE_PTR,    desc=<%20s>, data@%.8lx=%.8lx\n",
  +                    (char *)ctx, name,      desc, (long)data, *(long *)data);
               break;
           case VAL_TYPE_CHAR:                                                                              
  -            fprintf(stderr, "DEBUG: <%10s> VAL_TYPE_CHAR,   desc=<%20s>, data@%.8lx='%c'\n",
  -                    (char *)ctx,       desc, (long)data, *(char *)data);
  +            fprintf(stderr, "DEBUG: <%10s>, name=<%10s>, VAL_TYPE_CHAR,   desc=<%20s>, data@%.8lx='%c'\n",
  +                    (char *)ctx, name,      desc, (long)data, *(char *)data);
               break;
           case VAL_TYPE_SHORT:                                                                             
  -            fprintf(stderr, "DEBUG: <%10s> VAL_TYPE_SHORT,  desc=<%20s>, data@%.8lx=%8d\n",
  -                    (char *)ctx,       desc, (long)data, *(short *)data);
  +            fprintf(stderr, "DEBUG: <%10s>, name=<%10s>, VAL_TYPE_SHORT,  desc=<%20s>, data@%.8lx=%8d\n",
  +                    (char *)ctx, name,      desc, (long)data, *(short *)data);
               break;
           case VAL_TYPE_INT:                                                                               
  -            fprintf(stderr, "DEBUG: <%10s> VAL_TYPE_INT,    desc=<%20s>, data@%.8lx=%8d\n",
  -                    (char *)ctx,       desc, (long)data, *(int *)data);
  +            fprintf(stderr, "DEBUG: <%10s>, name=<%10s>, VAL_TYPE_INT,    desc=<%20s>, data@%.8lx=%8d\n",
  +                    (char *)ctx, name,      desc, (long)data, *(int *)data);
               break;
           case VAL_TYPE_LONG:                                                                              
  -            fprintf(stderr, "DEBUG: <%10s> VAL_TYPE_LONG,   desc=<%20s>, data@%.8lx=%8d\n",
  -                    (char *)ctx,       desc, (long)data, *(long *)data);
  +            fprintf(stderr, "DEBUG: <%10s>, name=<%10s>, VAL_TYPE_LONG,   desc=<%20s>, data@%.8lx=%8ld\n",
  +                    (char *)ctx, name,      desc, (long)data, *(long *)data);
               break;
           case VAL_TYPE_FLOAT:                                                                             
  -            fprintf(stderr, "DEBUG: <%10s> VAL_TYPE_FLOAT,  desc=<%20s>, data@%.8lx=%8f\n",
  -                    (char *)ctx,       desc, (long)data, *(float *)data);
  +            fprintf(stderr, "DEBUG: <%10s>, name=<%10s>, VAL_TYPE_FLOAT,  desc=<%20s>, data@%.8lx=%8f\n",
  +                    (char *)ctx, name,      desc, (long)data, *(float *)data);
               break;
           case VAL_TYPE_DOUBLE:                                                                            
  -            fprintf(stderr, "DEBUG: <%10s> VAL_TYPE_DOUBLE, desc=<%20s>, data@%.8lx=%8f\n",
  -                    (char *)ctx,       desc, (long)data, *(double *)data);
  +            fprintf(stderr, "DEBUG: <%10s>, name=<%10s>, VAL_TYPE_DOUBLE, desc=<%20s>, data@%.8lx=%8f\n",
  +                    (char *)ctx, name,      desc, (long)data, *(double *)data);
               break;
           default: 
  -            fprintf(stderr, "DEBUG: <%10s> type = %.8lx,    desc=<%20s>, data@%.8lx\n",
  -                    (char *)ctx, type, desc, (long)data);
  +            fprintf(stderr, "DEBUG: <%10s>, name=<%10s>, type = %.8lx,    desc=<%20s>, data@%.8lx\n",
  +                    (char *)ctx, name, (long)type, desc, (long)data);
       }
   
       return VAL_OK;
  @@ -266,8 +266,15 @@
           if ((rc = val_set(v, "bar.double", 3.14159265358979)) != VAL_OK)
               die("val_set  for bar.double using inline data");
   
  -        val_apply(v,  dumper, "v" );
  -        val_apply(v2, dumper, "v2");
  +        // OK val_apply(v,  "", 9, dumper, "v" );
  +        // OK val_apply(v2, "", 9, dumper, "v2");
  +        // OK val_apply(v,  "", 0, dumper, "v" );
  +        // OK val_apply(v,  "bar", 1, dumper, "v" );
  +        // OK val_apply(v2,  "", 0, dumper, "v" );
  +        // OK val_apply(v,  "", 1, dumper, "v" );
  +        // OK val_apply(v,  "foo", 0, dumper, "v" );
  +        // OK val_apply(v2,  "char", 2, dumper, "v" );
  +        // OK val_apply(v,  "bar.char", 2, dumper, "v" );
   
           if ((rc = val_destroy(v2)) != VAL_OK)
               die("val_destroy 2");
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_val.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 lmtp2nntp_val.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_val.c	16 Jan 2002 09:46:52 -0000	1.2
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_val.c	16 Jan 2002 14:19:07 -0000	1.3
  @@ -276,50 +276,101 @@
   #define VAL_MAXNAME 1024
   
   typedef struct {
  +    val_t *val;
  +    char *name;
  +    int prefixlen;
  +    int depth;
       val_cb_t cb;
       void *ctx;
       val_rc_t rc;
   } val_apply_ctx_t;
   
  +static val_rc_t val_apply_internal(val_t *, const char *, int, int, val_cb_t, void *);
  +
   static int (val_apply_cb)(void *_ctx, const void *keyptr, int keylen, const void *datptr, int datlen)
   {
       val_apply_ctx_t *ctx = (val_apply_ctx_t *)_ctx;
  -    val_object_t *obj;
       char name[VAL_MAXNAME+1];
  +    int prefixlen;
   
       /* on-the-fly create NUL-terminated name string */
  -    if (keylen > VAL_MAXNAME) {
  +    if ((strlen(ctx->name) + 1 + keylen) > VAL_MAXNAME) {
           ctx->rc = VAL_ERR_MEM;
           return FALSE;
       }
  -    strncpy(name, (char *)keyptr, keylen);
  -    *((char *)name+keylen) = '\0';
  -
  -    /* take object */
  -    if (datlen != sizeof(val_object_t)) {
  -        ctx->rc = VAL_ERR_ARG;
  -        return FALSE;
  +    if (strlen(ctx->name) > 0) {
  +        strcpy(name, ctx->name);
  +        strcat(name, ".");
  +        prefixlen = ctx->prefixlen + 1;
       }
  -    obj = (val_object_t *)datptr;
  -
  -    /* execute VAL callback */
  -    if ((ctx->rc = ctx->cb(ctx->ctx, name, (obj->type & ~VAL_INLINE), obj->desc, val_storage(obj))) != VAL_OK)
  +    else {
  +        *name = '\0';
  +        prefixlen = ctx->prefixlen;
  +    }
  +    strncat(name, (char *)keyptr, keylen);
  +    if ((ctx->rc = val_apply_internal(ctx->val, name, prefixlen, ctx->depth, ctx->cb, ctx->ctx)) != VAL_OK)
           return FALSE;
  -
       return TRUE;
   }
   
  -val_rc_t val_apply(val_t *val, val_cb_t cb, void *ctx)
  +static val_rc_t val_apply_internal(val_t *val, const char *name, int prefixlen, int depth, val_cb_t cb, void *ctx)
   {
  +    val_object_t *obj;
  +    val_t *child;
  +    char *cp;
  +    val_rc_t rc;
       val_apply_ctx_t val_ctx;
   
  -    if (val == NULL || cb == NULL)
  -        return VAL_ERR_ARG;
  -    val_ctx.cb  = cb;
  -    val_ctx.ctx = ctx;
  -    val_ctx.rc  = VAL_OK;
  -    if (!lh_apply(val->lh, val_apply_cb, &val_ctx))
  -        return VAL_ERR_SYS;
  -    return val_ctx.rc;
  +fprintf(stderr, "DEBUG: val_apply_internal name=<%s>, prefixlen=%d, depth=%d\n", name, prefixlen, depth);
  +    if (name[prefixlen] == '\0') {
  +        /* prefix="foo.bar.", remainder="" */
  +        //if (--depth > 0) {
  +            val_ctx.val       = val;
  +            val_ctx.name      = (char *)name;
  +            val_ctx.prefixlen = prefixlen;
  +            val_ctx.depth     = depth;
  +            val_ctx.cb        = cb;
  +            val_ctx.ctx       = ctx;
  +            val_ctx.rc        = VAL_OK;
  +            if (!lh_apply(val->lh, val_apply_cb, &val_ctx))
  +                return VAL_ERR_SYS;
  +        //}
  +    }
  +    else {
  +        if ((cp = strchr(name+prefixlen, '.')) != NULL) {
  +            /* prefix="foo.bar.", remainder="quux.baz" */
  +            if (!lh_lookup(val->lh, name+prefixlen, cp-(name+prefixlen), (void **)&obj, NULL))
  +                return VAL_ERR_ARG;
  +            if (!(obj->type & VAL_TYPE_VAL))
  +                return VAL_ERR_USE;
  +            child = *(val_t **)(val_storage(obj));
  +            if (depth == 0)
  +                return VAL_OK;
  +            return val_apply_internal(child, name, cp-name+1, --depth, cb, ctx);
  +        }
  +        else {
  +            /* prefix="foo.bar.quux.", remainder="baz" */
  +            if (!lh_lookup(val->lh, name+prefixlen, strlen(name+prefixlen), (void **)&obj, NULL))
  +                return VAL_ERR_ARG;
  +            /* execute VAL callback */
  +            if ((rc = cb(ctx, name, (obj->type & ~VAL_INLINE), obj->desc, val_storage(obj))) != VAL_OK)
  +                return rc;
  +//fprintf(stderr, "DEBUG: depth=%d obj->type=%.8lx\n", depth, obj->type);
  +            if (obj->type & VAL_TYPE_VAL) {
  +                if (depth == 0)
  +                    return VAL_OK;
  +                child = *(val_t **)(val_storage(obj));
  +                return val_apply_internal(child, name, strlen(name), --depth, cb, ctx);
  +            }
  +        }
  +    }
  +    return VAL_OK;
   }
   
  +val_rc_t val_apply(val_t *val, const char *name, int depth, val_cb_t cb, void *ctx)
  +{
  +    if (val == NULL || name == NULL || depth < 0 || cb == NULL)
  +        return VAL_ERR_ARG;
  +
  +    return val_apply_internal(val, name, 0, depth, cb, ctx);
  +}
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_val.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 lmtp2nntp_val.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_val.h	16 Jan 2002 09:46:52 -0000	1.2
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_val.h	16 Jan 2002 14:19:07 -0000	1.3
  @@ -35,7 +35,7 @@
   val_rc_t val_get     (val_t *, const char *, ...);
   val_rc_t val_vset    (val_t *, const char *, va_list);
   val_rc_t val_vget    (val_t *, const char *, va_list);
  -val_rc_t val_apply   (val_t *, val_cb_t cb, void *ctx);
  +val_rc_t val_apply   (val_t *, const char *, int, val_cb_t, void *);
   
   #endif /* __LMTP2NNTP_VAL_H__ */
   

From ossp-cvs-owner@ossp.org  Wed Jan 16 15:20:28 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9A31C764E3; Wed, 16 Jan 2002 15:20:28 +0100 (CET)
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Message-Id: <20020116142028.9A31C764E3@mail.ossp.org>
Date: Wed, 16 Jan 2002 15:20:28 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   OSSP Project Master
  Root:   /e/ossp/cvs                      Email:  ossp@ossp.org
  Module: CVSROOT                          Date:   16-Jan-2002 15:20:28
  Branch: HEAD                             Handle: 2002011614202800

  Modified files:
    CVSROOT                 modules

  Log:
    link OSSP val into OSSP lmtp2nntp

  Summary:
    Revision    Changes     Path
    1.40        +2  -1      CVSROOT/modules
  ____________________________________________________________________________

  Index: CVSROOT/modules
  ============================================================
  $ cvs diff -u -r1.39 -r1.40 modules
  --- CVSROOT/modules	16 Jan 2002 14:03:53 -0000	1.39
  +++ CVSROOT/modules	16 Jan 2002 14:20:28 -0000	1.40
  @@ -83,11 +83,12 @@
   val             ossp-pkg/val
   
   #   OSSP lmtp2nntp
  -lmtp2nntp       ossp-pkg/lmtp2nntp &lmtp2nntp_str &lmtp2nntp_l2 &lmtp2nntp_sa &lmtp2nntp_var
  +lmtp2nntp       ossp-pkg/lmtp2nntp &lmtp2nntp_str &lmtp2nntp_l2 &lmtp2nntp_sa &lmtp2nntp_var &lmtp2nntp_val
   lmtp2nntp_str   -d lib_str ossp-pkg/str
   lmtp2nntp_l2    -d lib_l2  ossp-pkg/l2
   lmtp2nntp_sa    -d lib_sa  ossp-pkg/sa
   lmtp2nntp_var   -d lib_var ossp-pkg/var
  +lmtp2nntp_val   -d lib_val ossp-pkg/val
   
   #   OSSP rc
   rc              ossp-pkg/rc &rc_str &rc_var

From ossp-cvs-owner@ossp.org  Wed Jan 16 15:22:15 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C55D2764E3; Wed, 16 Jan 2002 15:22:14 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp Makefile.in configure.ac lmtp2nntp_conf...
Message-Id: <20020116142214.C55D2764E3@mail.ossp.org>
Date: Wed, 16 Jan 2002 15:22:14 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   16-Jan-2002 15:22:14
  Branch: HEAD                             Handle: 197001010100001011187334

  Modified files:
    ossp-pkg/lmtp2nntp      Makefile.in configure.ac lmtp2nntp_config.c
  Removed files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_val.c lmtp2nntp_val.h

  Log:
    switch from included to linked-in OSSP val variant

  Summary:
    Revision    Changes     Path
    1.39        +4  -4      ossp-pkg/lmtp2nntp/Makefile.in
    1.20        +11 -0      ossp-pkg/lmtp2nntp/configure.ac
    1.8         +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    NONE        +0  -376    ossp-pkg/lmtp2nntp/lmtp2nntp_val.c
    NONE        +0  -41     ossp-pkg/lmtp2nntp/lmtp2nntp_val.h
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.38 -r1.39 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	15 Jan 2002 13:02:20 -0000	1.38
  +++ ossp-pkg/lmtp2nntp/Makefile.in	16 Jan 2002 14:22:14 -0000	1.39
  @@ -44,11 +44,11 @@
   POD2MAN     = pod2man
   
   PROG = lmtp2nntp
  -HDRS = lmtp2nntp_global.h lmtp2nntp_daemon.h lmtp2nntp_lmtp.h lmtp2nntp_nntp.h lmtp2nntp_argz.h lmtp2nntp_shpat.h lmtp2nntp_msg.h lmtp2nntp_popt.h lmtp2nntp_val.h lmtp2nntp_config.h lmtp2nntp_lh.h
  -SRCS = lmtp2nntp_main.c   lmtp2nntp_daemon.c lmtp2nntp_lmtp.c lmtp2nntp_nntp.c lmtp2nntp_argz.c lmtp2nntp_shpat.c lmtp2nntp_msg.c lmtp2nntp_popt.c lmtp2nntp_val.c lmtp2nntp_config.c lmtp2nntp_lh.c lmtp2nntp_version.c 
  -OBJS = lmtp2nntp_main.o   lmtp2nntp_daemon.o lmtp2nntp_lmtp.o lmtp2nntp_nntp.o lmtp2nntp_argz.o lmtp2nntp_shpat.o lmtp2nntp_msg.o lmtp2nntp_popt.o lmtp2nntp_val.o lmtp2nntp_config.o lmtp2nntp_lh.o lmtp2nntp_version.o
  +HDRS = lmtp2nntp_global.h lmtp2nntp_daemon.h lmtp2nntp_lmtp.h lmtp2nntp_nntp.h lmtp2nntp_argz.h lmtp2nntp_shpat.h lmtp2nntp_msg.h lmtp2nntp_popt.h lmtp2nntp_config.h lmtp2nntp_lh.h
  +SRCS = lmtp2nntp_main.c   lmtp2nntp_daemon.c lmtp2nntp_lmtp.c lmtp2nntp_nntp.c lmtp2nntp_argz.c lmtp2nntp_shpat.c lmtp2nntp_msg.c lmtp2nntp_popt.c lmtp2nntp_config.c lmtp2nntp_lh.c lmtp2nntp_version.c 
  +OBJS = lmtp2nntp_main.o   lmtp2nntp_daemon.o lmtp2nntp_lmtp.o lmtp2nntp_nntp.o lmtp2nntp_argz.o lmtp2nntp_shpat.o lmtp2nntp_msg.o lmtp2nntp_popt.o lmtp2nntp_config.o lmtp2nntp_lh.o lmtp2nntp_version.o
   
  -SUBDIRS = @SUBDIR_STR@ @SUBDIR_L2@ @SUBDIR_SA@ @SUBDIR_VAR@
  +SUBDIRS = @SUBDIR_STR@ @SUBDIR_L2@ @SUBDIR_SA@ @SUBDIR_VAR@ @SUBDIR_VAL@
   
   all: _SUBDIRS_all lmtp2nntp lmtp2nntp.8
   
  Index: ossp-pkg/lmtp2nntp/configure.ac
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 configure.ac
  --- ossp-pkg/lmtp2nntp/configure.ac	7 Jan 2002 13:15:59 -0000	1.19
  +++ ossp-pkg/lmtp2nntp/configure.ac	16 Jan 2002 14:22:14 -0000	1.20
  @@ -95,6 +95,17 @@
                    LIBS_EXTRA="$LIBS_EXTRA -lvar"])
   AC_SUBST(SUBDIR_VAR)
   
  +dnl #   check for VAL library
  +AC_CHECK_EXTLIB([OSSP Val], 
  +                val, val_create, val.h, 
  +                [SUBDIR_VAL=""], 
  +                [SUBDIR_VAL="lib_val"
  +                 CPPFLAGS="$CPPFLAGS -Ilib_val"
  +                 CFLAGS="$CFLAGS -Ilib_val"
  +                 LDFLAGS="$LDFLAGS -Llib_val/.libs"
  +                 LIBS_EXTRA="$LIBS_EXTRA -lval"])
  +AC_SUBST(SUBDIR_VAL)
  +
   dnl #   check for external Dmalloc library
   AC_CHECK_EXTLIB([Dmalloc], dmalloc, dmalloc_debug, dmalloc.h, AC_DEFINE(DMALLOC))
   
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	16 Jan 2002 14:19:07 -0000	1.7
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	16 Jan 2002 14:22:14 -0000	1.8
  @@ -44,7 +44,7 @@
   // #include "lmtp2nntp_shpat.h"
   // #include "lmtp2nntp_daemon.h"
   #include "lmtp2nntp_popt.h"
  -#include "lmtp2nntp_val.h"
  +#include "val.h"
   
   /* third party (linked in) */
   #include "str.h"
    

From ossp-cvs-owner@ossp.org  Wed Jan 16 17:10:35 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2829A764E3; Wed, 16 Jan 2002 17:10:35 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val val.c
Message-Id: <20020116161035.2829A764E3@mail.ossp.org>
Date: Wed, 16 Jan 2002 17:10:35 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   16-Jan-2002 17:10:34
  Branch: HEAD                             Handle: 2002011616103400

  Modified files:
    ossp-pkg/val            val.c

  Log:
    code cleanup

  Summary:
    Revision    Changes     Path
    1.3         +9  -13     ossp-pkg/val/val.c
  ____________________________________________________________________________

  Index: ossp-pkg/val/val.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 val.c
  --- ossp-pkg/val/val.c	16 Jan 2002 14:17:56 -0000	1.2
  +++ ossp-pkg/val/val.c	16 Jan 2002 16:10:34 -0000	1.3
  @@ -881,20 +881,17 @@
       val_rc_t rc;
       val_apply_ctx_t val_ctx;
   
  -fprintf(stderr, "DEBUG: val_apply_internal name=<%s>, prefixlen=%d, depth=%d\n", name, prefixlen, depth);
       if (name[prefixlen] == '\0') {
           /* prefix="foo.bar.", remainder="" */
  -        //if (--depth > 0) {
  -            val_ctx.val       = val;
  -            val_ctx.name      = (char *)name;
  -            val_ctx.prefixlen = prefixlen;
  -            val_ctx.depth     = depth;
  -            val_ctx.cb        = cb;
  -            val_ctx.ctx       = ctx;
  -            val_ctx.rc        = VAL_OK;
  -            if (!lh_apply(val->lh, val_apply_cb, &val_ctx))
  -                return VAL_ERR_SYS;
  -        //}
  +        val_ctx.val       = val;
  +        val_ctx.name      = (char *)name;
  +        val_ctx.prefixlen = prefixlen;
  +        val_ctx.depth     = depth;
  +        val_ctx.cb        = cb;
  +        val_ctx.ctx       = ctx;
  +        val_ctx.rc        = VAL_OK;
  +        if (!lh_apply(val->lh, val_apply_cb, &val_ctx))
  +            return VAL_ERR_SYS;
       }
       else {
           if ((cp = strchr(name+prefixlen, '.')) != NULL) {
  @@ -915,7 +912,6 @@
               /* execute VAL callback */
               if ((rc = cb(ctx, name, (obj->type & ~VAL_INLINE), obj->desc, val_storage(obj))) != VAL_OK)
                   return rc;
  -//fprintf(stderr, "DEBUG: depth=%d obj->type=%.8lx\n", depth, obj->type);
               if (obj->type & VAL_TYPE_VAL) {
                   if (depth == 0)
                       return VAL_OK;

From ossp-cvs-owner@ossp.org  Wed Jan 16 17:14:15 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1B064764E3; Wed, 16 Jan 2002 17:14:15 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val val_test.c
Message-Id: <20020116161415.1B064764E3@mail.ossp.org>
Date: Wed, 16 Jan 2002 17:14:15 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   16-Jan-2002 17:14:14
  Branch: HEAD                             Handle: 2002011616141400

  Modified files:
    ossp-pkg/val            val_test.c

  Log:
    test showing all functions and provides a data dumper callback example. Use of
    direct and OO-style access is shown. Multiple names for C-code variable and
    intermixing direct and OO-style access demonstrated.

  Summary:
    Revision    Changes     Path
    1.2         +213 -0     ossp-pkg/val/val_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/val/val_test.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 val_test.c
  --- ossp-pkg/val/val_test.c	9 Jan 2002 10:44:28 -0000	1.1
  +++ ossp-pkg/val/val_test.c	16 Jan 2002 16:14:14 -0000	1.2
  @@ -28,8 +28,221 @@
   **  val_test.c: test suite
   */
   
  +#include <stdio.h>
  +#include <stdlib.h>
  +#include "val.h"
  +
  +static void die(char *msg)
  +{
  +        fprintf(stderr, "ERROR: %s\n", msg);
  +            exit(-1);
  +}
  +
  +static val_rc_t dumper(void *ctx, const char *name, int type, const char *desc, void *data)
  +{
  +    switch (type) {
  +        case VAL_TYPE_VAL:
  +            printf("DEBUG: <%10s>, name=<%10s>, VAL_TYPE_VAL,    desc=<%20s>, data@%.8lx INTERNAL\n",
  +                    (char *)ctx, name,             desc, (long)data);
  +            break;
  +        case VAL_TYPE_PTR:
  +            printf("DEBUG: <%10s>, name=<%10s>, VAL_TYPE_PTR,    desc=<%20s>, data@%.8lx=%.8lx\n",
  +                    (char *)ctx, name,             desc, (long)data, *(long *)data);
  +            break;
  +        case VAL_TYPE_CHAR:                                                                              
  +            printf("DEBUG: <%10s>, name=<%10s>, VAL_TYPE_CHAR,   desc=<%20s>, data@%.8lx='%c'\n",
  +                    (char *)ctx, name,             desc, (long)data, *(char *)data);
  +            break;
  +        case VAL_TYPE_SHORT:                                                                             
  +            printf("DEBUG: <%10s>, name=<%10s>, VAL_TYPE_SHORT,  desc=<%20s>, data@%.8lx=%8d\n",
  +                    (char *)ctx, name,             desc, (long)data, *(short *)data);
  +            break;
  +        case VAL_TYPE_INT:                                                                               
  +            printf("DEBUG: <%10s>, name=<%10s>, VAL_TYPE_INT,    desc=<%20s>, data@%.8lx=%8d\n",
  +                    (char *)ctx, name,             desc, (long)data, *(int *)data);
  +            break;
  +        case VAL_TYPE_LONG:                                                                              
  +            printf("DEBUG: <%10s>, name=<%10s>, VAL_TYPE_LONG,   desc=<%20s>, data@%.8lx=%8ld\n",
  +                    (char *)ctx, name,             desc, (long)data, *(long *)data);
  +            break;
  +        case VAL_TYPE_FLOAT:                                                                             
  +            printf("DEBUG: <%10s>, name=<%10s>, VAL_TYPE_FLOAT,  desc=<%20s>, data@%.8lx=%8f\n",
  +                    (char *)ctx, name,             desc, (long)data, *(float *)data);
  +            break;
  +        case VAL_TYPE_DOUBLE:                                                                            
  +            printf("DEBUG: <%10s>, name=<%10s>, VAL_TYPE_DOUBLE, desc=<%20s>, data@%.8lx=%8f\n",
  +                    (char *)ctx, name,             desc, (long)data, *(double *)data);
  +            break;
  +        default: 
  +            printf("DEBUG: <%10s>, name=<%10s>, type = %.8lx,    desc=<%20s>, data@%.8lx\n",
  +                    (char *)ctx, name, (long)type, desc, (long)data);
  +    }
  +    return VAL_OK;
  +}
  +
   int main(int argc, char *argv[])
   {
  +    val_rc_t rc;
  +    val_t *v1, *v2, *v3;
  +    int testint;
  +    int testintout;
  +
  +    /* initialize variables */
  +    testint    = 10;
  +    testintout = !testint;
  +    if (testint == testintout)
  +        die("testint/testintout initialization");
  +    printf("DEBUG: testint@%.8lx, testintout@%.8lx\n", (long)&testint, (long)&testintout);
  +
  +    /* create first val_t */
  +    if ((rc = val_create(&v1)) != VAL_OK)
  +        die("val_create() #1");
  +
  +    /* register variable under first val_t and name it "foo" */
  +    if ((rc = val_reg(v1, "foo", VAL_TYPE_INT, "foo variable", (void *)&testint)) != VAL_OK)
  +        die("val_reg() #1");
  +
  +    /* work with testint */
  +    testint++;
  +
  +    /* get the value of testint aka "foo" into testintout */
  +    if ((rc = val_get(v1, "foo", &testintout)) != VAL_OK)
  +        die("val_get() #1");
  +    if (testint != testintout)
  +        die("testint/testintout compare #1");
  +
  +    /* set the value of testint aka "foo" using name */
  +    if ((rc = val_set(v1, "foo", 2002)) != VAL_OK)
  +        die("val_set() #1");
  +
  +    /* get the value of testint aka "foo" into testintout */
  +    if ((rc = val_get(v1, "foo", &testintout)) != VAL_OK)
  +        die("val_get() #2");
  +
  +    /* comparison */
  +    if (testint != testintout)
  +        die("testint/testintout not equal after setting testint by name");
  +
  +    /* create a second val_t */
  +    if ((rc = val_create(&v2)) != VAL_OK)
  +        die("val_create() #2");
  +
  +    /* register second val_t as child of first and name it "bar" - reg method */
  +    if ((rc = val_reg(v1, "bar", VAL_TYPE_VAL, "bar child", (void *)&v2)) != VAL_OK)
  +        die("val_reg() #2");
  +
  +    /* create a third val_t */
  +    if ((rc = val_create(&v3)) != VAL_OK)
  +        die("val_create() #3");
  +
  +    /* register third val_t as child of first and name it "baz" - set method */
  +    if ((rc = val_reg(v1, "baz", VAL_TYPE_VAL, "baz child", NULL)) != VAL_OK)
  +        die("val_reg() #3");
  +    if ((rc = val_set(v1, "baz", v3)) != VAL_OK)
  +        die("val_set() #2");
  +
  +    /* register variable under second val_t and name it "quux2" - direct method */
  +    if ((rc = val_reg(v2, "quux2", VAL_TYPE_INT, "quux2 variable", (void *)&testint)) != VAL_OK)
  +        die("val_reg() #4");
  +
  +    /* set the value of testint using name - direct method */
  +    if ((rc = val_set(v2, "quux2", testint+1)) != VAL_OK)
  +        die("val_set() #3");
  +
  +    /* work with testint */
  +    testint++;
  +
  +    /* get the value of testint aka "quux2" into testintout - direct method */
  +    if ((rc = val_get(v2, "quux2", &testintout)) != VAL_OK)
  +        die("val_get() #3");
  +
  +    /* comparison */
  +    if (testint != testintout)
  +        die("testint/testintout compare #2");
  +
  +    /* register variable under second val_t and name it "quux3" - OO method */
  +    if ((rc = val_reg(v1, "baz.quux3", VAL_TYPE_INT, "quux3 variable", (void *)&testint)) != VAL_OK)
  +        die("val_reg() #5");
  +
  +    /* set the value of testint using name - OO method */
  +    if ((rc = val_set(v1, "baz.quux3", testint+1)) != VAL_OK)
  +        die("val_set() #4");
  +
  +    /* work with testint */
  +    testint++;
  +
  +    /* get the value of testint aka "quux3" into testintout - OO method */
  +    if ((rc = val_get(v1, "baz.quux3", &testintout)) != VAL_OK)
  +        die("val_get() #4");
  +
  +    /* comparison */
  +    if (testint != testintout)
  +        die("testint/testintout compare #3");
  +
  +
  +    /* work with testintout2 */
  +    testintout--;
  +
  +    /* set every data type - OO method */
  +    if ((rc = val_reg(v1, "bar.ptr", VAL_TYPE_PTR, "bar ptr (&testint)", NULL)) != VAL_OK)
  +        die("val_ret  for bar.ptr using inline data");
  +    if ((rc = val_set(v1, "bar.ptr", &testint)) != VAL_OK)
  +        die("val_set  for bar.ptr using inline data");
  +    if ((rc = val_reg(v1, "bar.char", VAL_TYPE_CHAR, "bar character (!)", NULL)) != VAL_OK)
  +        die("val_ret  for bar.char using inline data");
  +    if ((rc = val_set(v1, "bar.char", '!')) != VAL_OK)
  +        die("val_set  for bar.char using inline data");
  +    if ((rc = val_reg(v1, "bar.short", VAL_TYPE_SHORT, "bar short (555)", NULL)) != VAL_OK)
  +        die("val_ret  for bar.short using inline data");
  +    if ((rc = val_set(v1, "bar.short", 555)) != VAL_OK)
  +        die("val_set  for bar.short using inline data");
  +    if ((rc = val_reg(v1, "bar.int", VAL_TYPE_INT, "bar integer (76543)", NULL)) != VAL_OK)
  +        die("val_ret  for bar.int using inline data");
  +    if ((rc = val_set(v1, "bar.int", 76543)) != VAL_OK)
  +        die("val_set  for bar.int using inline data");
  +    if ((rc = val_reg(v1, "bar.long", VAL_TYPE_LONG, "bar long (2097152)", NULL)) != VAL_OK)
  +        die("val_ret  for bar.long using inline data");
  +    if ((rc = val_set(v1, "bar.long", 2097152)) != VAL_OK)
  +        die("val_set  for bar.long using inline data");
  +    if ((rc = val_reg(v1, "bar.float", VAL_TYPE_FLOAT, "bar float (1.955830)", NULL)) != VAL_OK)
  +        die("val_ret  for bar.float using inline data");
  +    if ((rc = val_set(v1, "bar.float", 1.95583)) != VAL_OK)
  +        die("val_set  for bar.float using inline data");
  +    if ((rc = val_reg(v1, "bar.double", VAL_TYPE_DOUBLE, "bar double (3.1415+)", NULL)) != VAL_OK)
  +        die("val_ret  for bar.double using inline data");
  +    if ((rc = val_set(v1, "bar.double", 3.14159265358979)) != VAL_OK)
  +        die("val_set  for bar.double using inline data");
  +
  +    /* apply data dumper for everything up to nine levels deep */
  +    val_apply(v1, "", 9, dumper, "all" );
  +
  +    /* apply data dumper for upper level only */
  +    val_apply(v1, "", 0, dumper, "upper" );
  +
  +    /* apply data dumper for everything below baz - direct method */
  +    val_apply(v3, "", 9, dumper, "baz-dir");
  +
  +    /* apply data dumper for everything below baz - OO method */
  +    val_apply(v1, "baz", 9, dumper, "baz- OO");
  +
  +    /* apply data dumper for bar.char only - direct method */
  +    val_apply(v2, "char", 0, dumper, "char" );
  +
  +    /* apply data dumper for bar.char only - OO method */
  +    val_apply(v1, "bar.char", 0, dumper, "bar.char" );
  +
  +    /* destroy val_t and free memory */
  +    if ((rc = val_destroy(v3)) != VAL_OK)
  +        die("val_destroy #1");
  +
  +    /* destroy val_t and free memory */
  +    if ((rc = val_destroy(v2)) != VAL_OK)
  +        die("val_destroy #2");
  +
  +    /* destroy val_t and free memory */
  +    if ((rc = val_destroy(v1)) != VAL_OK)
  +        die("val_destroy #3");
  +
       return 0;
   }
   

From ossp-cvs-owner@ossp.org  Wed Jan 16 20:30:37 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0AA06764E3; Wed, 16 Jan 2002 20:30:36 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/act act_hash_fct.c
Message-Id: <20020116193036.0AA06764E3@mail.ossp.org>
Date: Wed, 16 Jan 2002 20:30:36 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   16-Jan-2002 20:30:36
  Branch: HEAD                             Handle: 2002011619303600

  Modified files:
    ossp-pkg/act            act_hash_fct.c

  Log:
    typo

  Summary:
    Revision    Changes     Path
    1.28        +1  -1      ossp-pkg/act/act_hash_fct.c
  ____________________________________________________________________________

  Index: ossp-pkg/act/act_hash_fct.c
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 act_hash_fct.c
  --- ossp-pkg/act/act_hash_fct.c	2 Jan 2002 17:05:53 -0000	1.27
  +++ ossp-pkg/act/act_hash_fct.c	16 Jan 2002 19:30:36 -0000	1.28
  @@ -356,7 +356,7 @@
    * version doesn't provide the `level' (= previous hash) argument for
    * consistency reasons with the other hash functions (i.e. same function
    * signature). It can be definetely recommended as a good general
  - * purpuse hash function.
  + * purpose hash function.
    */
   intern act_uint32_t 
   act_hash_fct_bjddj(

From ossp-cvs-owner@ossp.org  Wed Jan 16 21:24:10 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 84BE8764E3; Wed, 16 Jan 2002 21:24:10 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val val.c val.h
Message-Id: <20020116202410.84BE8764E3@mail.ossp.org>
Date: Wed, 16 Jan 2002 21:24:10 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   16-Jan-2002 21:24:10
  Branch: HEAD                             Handle: 2002011620240901

  Modified files:
    ossp-pkg/val            val.c val.h

  Log:
    - fully document the source code
    - lots of additional cosmetic cleanups

  Summary:
    Revision    Changes     Path
    1.4         +164 -137   ossp-pkg/val/val.c
    1.3         +15 -5      ossp-pkg/val/val.h
  ____________________________________________________________________________

  Index: ossp-pkg/val/val.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 val.c
  --- ossp-pkg/val/val.c	16 Jan 2002 16:10:34 -0000	1.3
  +++ ossp-pkg/val/val.c	16 Jan 2002 20:24:09 -0000	1.4
  @@ -67,15 +67,6 @@
   
   typedef int (*lh_cb_t)(void *ctx, const void *keyptr, int keylen, const void *datptr, int datlen);
   
  -#if 0
  -lh_t *lh_create (void);
  -int   lh_insert (lh_t *h, const void *keyptr, int keylen, const void  *datptr, int  datlen, int override);
  -int   lh_lookup (lh_t *h, const void *keyptr, int keylen,       void **datptr, int *datlen);
  -int   lh_delete (lh_t *h, const void *keyptr, int keylen);
  -int   lh_apply  (lh_t *h, lh_cb_t cb, void *ctx);
  -int   lh_destroy(lh_t *h);
  -#endif
  -
   /* fixed size (number of pointers) of the directory and of each segment */
   #define INITDIRSIZE  256 /* can be an arbitrary value */
   #define SEGMENTSIZE  512 /* has to be a power of 2 for below arithmetic */
  @@ -128,7 +119,7 @@
    * version doesn't provide the `level' (= previous hash) argument for
    * consistency reasons with the other hash functions (i.e. same function
    * signature). It can be definetely recommended as a good general
  - * purpuse hash function.
  + * purpose hash function.
    */
   static long 
   lh_hash(
  @@ -564,15 +555,21 @@
   **  ____               ____
   **  ____ VALUE LIBRARY ____
   **
  +**  This part implements the actual Value library. Fortunately this
  +**  is now easy because it internally is just based on the above
  +**  full-featured linear hashing library.
   */
   
  -/* usually val_object_t.data is a pointer val_object_t.data.p, but VAL_INLINE
  - * signals val_object_t.data is actual data val_object_t.data.[csilfd]
  +/* 
  + * usually val_object_t.data is a pointer val_object_t.data.p,
  + * but VAL_INLINE signals val_object_t.data is actual data
  + * val_object_t.data.[csilfd].
    */
   enum {
  -    VAL_INLINE      = 1<<31
  +    VAL_INLINE = 1<<31
   };
   
  +/* the internal representation of a value object */
   typedef struct {
       int type;
       union {
  @@ -588,86 +585,101 @@
       char *desc;
   } val_object_t;
   
  +/* the val_t internally is just a hash table */
   struct val_s {
       lh_t *lh;
   };
   
  +/* determine address of an object's storage */
   static void *val_storage(val_object_t *obj)
   {
       void *storage;
   
  +    /* argument consistency check */
  +    if (obj == NULL)
  +        return NULL;
  +
  +    /* address determination */
       if (obj->type & VAL_INLINE) {
           switch (obj->type & ~VAL_INLINE) {
  -            case VAL_TYPE_VAL:
  -                storage = &obj->data.v;
  -                break;
  -            case VAL_TYPE_PTR:
  -                storage = &obj->data.p;
  -                break;
  -            case VAL_TYPE_CHAR:
  -                storage = &obj->data.c;
  -                break;
  -            case VAL_TYPE_SHORT:
  -                storage = &obj->data.s;
  -                break;
  -            case VAL_TYPE_INT:
  -                storage = &obj->data.i;
  -                break;
  -            case VAL_TYPE_LONG:
  -                storage = &obj->data.l;
  -                break;
  -            case VAL_TYPE_FLOAT:
  -                storage = &obj->data.f;
  -                break;
  -            case VAL_TYPE_DOUBLE:
  -                storage = &obj->data.d;
  -                break;
  -            default:
  -                storage = NULL;
  +            case VAL_TYPE_VAL:    storage = &obj->data.v; break;
  +            case VAL_TYPE_PTR:    storage = &obj->data.p; break;
  +            case VAL_TYPE_CHAR:   storage = &obj->data.c; break;
  +            case VAL_TYPE_SHORT:  storage = &obj->data.s; break;
  +            case VAL_TYPE_INT:    storage = &obj->data.i; break;
  +            case VAL_TYPE_LONG:   storage = &obj->data.l; break;
  +            case VAL_TYPE_FLOAT:  storage = &obj->data.f; break;
  +            case VAL_TYPE_DOUBLE: storage = &obj->data.d; break;
  +            default:              storage = NULL; break; /* cannot happen */
           }
       }
       else 
           storage = obj->data.p;
  +
       return storage;
   }
   
  -val_rc_t val_create(val_t **valp)
  +/* create object */
  +val_rc_t val_create(val_t **pval)
   {
       val_t *val;
   
  -    if (valp == NULL)
  +    /* argument consistency check */
  +    if (pval == NULL)
           return VAL_ERR_ARG;
  +
  +    /* create top-level structure */
       if ((val = (val_t *)malloc(sizeof(val_t))) == NULL)
           return VAL_ERR_SYS;
  +
  +    /* create hash table */
       if ((val->lh = lh_create()) == NULL) {
           free(val);
           return VAL_ERR_SYS;
       }
  -    *valp = val;
  +
  +    /* pass result to caller */
  +    *pval = val;
  +
       return VAL_OK;
   }
   
  -static int (val_destroy_cb)(void *_ctx, const void *keyptr, int keylen, const void *datptr, int datlen)
  +/* internal lh_apply() callback for use with val_destroy() */
  +static int val_destroy_cb(void *_ctx, 
  +                          const void *keyptr, int keylen, 
  +                          const void *datptr, int datlen)
   {
       val_object_t *obj;
       
  -    obj = (val_object_t *)datptr;
  -    if (obj->desc != NULL)
  -        free(obj->desc);
  +    /* free description string */
  +    if ((obj = (val_object_t *)datptr) != NULL)
  +        if (obj->desc != NULL)
  +            free(obj->desc);
  +
       return TRUE;
   }
   
  +/* destroy object */
   val_rc_t val_destroy(val_t *val)
   {
  +    /* argument consistency check */
       if (val == NULL)
           return VAL_ERR_ARG;
  +
  +    /* destroy all hash table elements */
       lh_apply(val->lh, val_destroy_cb, NULL);
  +
  +    /* destroy hash table */
       if (!lh_destroy(val->lh))
           return VAL_ERR_SYS;
  +
  +    /* destroy top-level structure */
       free(val);
  +
       return VAL_OK;
   }
   
  +/* register a value */
   val_rc_t val_reg(val_t *val, const char *name, int type, const char *desc, void *storage)
   {
       val_object_t *obj;
  @@ -675,11 +687,11 @@
       const char *cp;
       val_t *child;
   
  +    /* argument consistency check */
       if (val == NULL || name == NULL || type == 0)
           return VAL_ERR_ARG;
   
  -
  -
  +    /* recursive step-down on structured name */
       if ((cp = strchr(name, '.')) != NULL) {
           if (!lh_lookup(val->lh, name, cp-name, (void **)&obj, NULL))
               return VAL_ERR_ARG;
  @@ -689,8 +701,7 @@
           return val_reg(child, cp+1, type, desc, storage);
       }
   
  -
  -
  +    /* create a new value object */
       if (desc != NULL)
           newobj.desc = strdup(desc);
       else
  @@ -703,12 +714,15 @@
           newobj.type   = (type & ~VAL_INLINE);
           newobj.data.p = storage;
       }
  +
  +    /* insert value into hash table */
       if (!lh_insert(val->lh, name, strlen(name), &newobj, sizeof(newobj), 1))
  -        return VAL_ERR_SYS;
  +        return VAL_ERR_HSH;
   
       return VAL_OK;
   }
   
  +/* set a value (va_list variant) */
   val_rc_t val_vset(val_t *val, const char *name, va_list ap)
   {
       val_object_t *obj;
  @@ -716,8 +730,11 @@
       const char *cp;
       val_t *child;
   
  +    /* argument consistency check */
       if (val == NULL || name == NULL || ap == NULL)
           return VAL_ERR_ARG;
  +
  +    /* recursive step-down on structured name */
       if ((cp = strchr(name, '.')) != NULL) {
           if (!lh_lookup(val->lh, name, cp-name, (void **)&obj, NULL))
               return VAL_ERR_ARG;
  @@ -726,51 +743,50 @@
           child = *(val_t **)(val_storage(obj));
           return val_vset(child, cp+1, ap);
       }
  +
  +    /* try to lookup object in hash table */
       if (!lh_lookup(val->lh, name, strlen(name), (void **)&obj, NULL))
           return VAL_ERR_ARG;
  -    storage = val_storage(obj);
  +
  +    /* determine value storage */
  +    if ((storage = val_storage(obj)) == NULL)
  +        return VAL_ERR_INT;
  +
  +    /* copy value from variable argument into storage location */
       switch (obj->type & ~VAL_INLINE) {
  -        case VAL_TYPE_VAL:
  -            *(val_t **)storage = (val_t *)va_arg(ap, void *);
  -            break;
  -        case VAL_TYPE_PTR:
  -            *(char **)storage = (char *)va_arg(ap, void *);
  -            break;
  -        case VAL_TYPE_CHAR:
  -            *(char *)storage = (char)va_arg(ap, int);
  -            break;
  -        case VAL_TYPE_SHORT:
  -            *(short *)storage = (short)va_arg(ap, int);
  -            break;
  -        case VAL_TYPE_INT:
  -            *(int *)storage = (int)va_arg(ap, int);
  -            break;
  -        case VAL_TYPE_LONG:
  -            *(long *)storage = (long)va_arg(ap, long);
  -            break;
  -        case VAL_TYPE_FLOAT:
  -            *(float *)storage = (float)va_arg(ap, double);
  -            break;
  -        case VAL_TYPE_DOUBLE:
  -            *(double *)storage = (double)va_arg(ap, double);
  -            break;
  +        case VAL_TYPE_VAL:    *(val_t **)storage = (val_t *)va_arg(ap, void *); break;
  +        case VAL_TYPE_PTR:    *(char  **)storage = (char  *)va_arg(ap, void *); break;
  +        case VAL_TYPE_CHAR:   *(char   *)storage = (char   )va_arg(ap, int   ); break;
  +        case VAL_TYPE_SHORT:  *(short  *)storage = (short  )va_arg(ap, int   ); break;
  +        case VAL_TYPE_INT:    *(int    *)storage = (int    )va_arg(ap, int   ); break;
  +        case VAL_TYPE_LONG:   *(long   *)storage = (long   )va_arg(ap, long  ); break;
  +        case VAL_TYPE_FLOAT:  *(float  *)storage = (float  )va_arg(ap, double); break;
  +        case VAL_TYPE_DOUBLE: *(double *)storage = (double )va_arg(ap, double); break;
  +        default: break; /* cannot happen */
       }
  +
       return VAL_OK;
   }
   
  +/* set a value */
   val_rc_t val_set(val_t *val, const char *name, ...)
   {
       val_rc_t rc;
       va_list ap;
   
  +    /* argument consistency check */
       if (val == NULL || name == NULL)
           return VAL_ERR_ARG;
  +
  +    /* just pass-through to va_list variant */
       va_start(ap, name);
       rc = val_vset(val, name, ap);
       va_end(ap);
  +
       return rc;
   }
   
  +/* get a value (va_list variant) */
   val_rc_t val_vget(val_t *val, const char *name, va_list ap)
   {
       val_object_t *obj;
  @@ -778,8 +794,11 @@
       const char *cp;
       val_t *child;
   
  +    /* argument consistency check */
       if (val == NULL || name == NULL || ap == NULL)
           return VAL_ERR_ARG;
  +    
  +    /* recursive step-down on structured name */
       if ((cp = strchr(name, '.')) != NULL) {
           if (!lh_lookup(val->lh, name, cp-name, (void **)&obj, NULL))
               return VAL_ERR_ARG;
  @@ -788,72 +807,71 @@
           child = *(val_t **)(val_storage(obj));
           return val_vget(child, cp+1, ap);
       }
  +
  +    /* try to lookup object in hash table */
       if (!lh_lookup(val->lh, name, strlen(name), (void **)&obj, NULL))
           return VAL_ERR_ARG;
  -    storage = val_storage(obj);
  +
  +    /* determine value storage */
  +    if ((storage = val_storage(obj)) == NULL)
  +        return VAL_ERR_INT;
  +
  +    /* copy value from storage location into variable argument pointer location */
       switch (obj->type & ~VAL_INLINE) {
  -        case VAL_TYPE_VAL:
  -            *((val_t **)va_arg(ap, void *)) = *(val_t **)storage;
  -            break;
  -        case VAL_TYPE_PTR:
  -            *((char **)va_arg(ap, void *)) = *(char **)storage;
  -            break;
  -        case VAL_TYPE_CHAR:
  -            *((char *)va_arg(ap, int *)) = *(char *)storage;
  -            break;
  -        case VAL_TYPE_SHORT:
  -            *((short *)va_arg(ap, int *)) = *(short *)storage;
  -            break;
  -        case VAL_TYPE_INT:
  -            *((int *)va_arg(ap, int *)) = *(int *)storage;
  -            break;
  -        case VAL_TYPE_LONG:
  -            *((long *)va_arg(ap, long *)) = *(long *)storage;
  -            break;
  -        case VAL_TYPE_FLOAT:
  -            *((float *)va_arg(ap, double *)) = *(float *)storage;
  -            break;
  -        case VAL_TYPE_DOUBLE:
  -            *((double *)va_arg(ap, double *)) = *(double *)storage;
  -            break;
  +        case VAL_TYPE_VAL:    *((val_t **)va_arg(ap, void   *)) = *(val_t **)storage; break;
  +        case VAL_TYPE_PTR:    *((char  **)va_arg(ap, void   *)) = *(char  **)storage; break;
  +        case VAL_TYPE_CHAR:   *((char   *)va_arg(ap, int    *)) = *(char   *)storage; break;
  +        case VAL_TYPE_SHORT:  *((short  *)va_arg(ap, int    *)) = *(short  *)storage; break;
  +        case VAL_TYPE_INT:    *((int    *)va_arg(ap, int    *)) = *(int    *)storage; break;
  +        case VAL_TYPE_LONG:   *((long   *)va_arg(ap, long   *)) = *(long   *)storage; break;
  +        case VAL_TYPE_FLOAT:  *((float  *)va_arg(ap, double *)) = *(float  *)storage; break;
  +        case VAL_TYPE_DOUBLE: *((double *)va_arg(ap, double *)) = *(double *)storage; break;
  +        default: break; /* cannot happen */
       }
  +
       return VAL_OK;
   }
   
  +/* get a value */
   val_rc_t val_get(val_t *val, const char *name, ...)
   {
       val_rc_t rc;
       va_list ap;
   
  +    /* argument consistency check */
       if (val == NULL || name == NULL)
           return VAL_ERR_ARG;
  +    
  +    /* just pass-through to va_list variant */
       va_start(ap, name);
       rc = val_vget(val, name, ap);
       va_end(ap);
  +
       return rc;
   }
   
  -#define VAL_MAXNAME 1024
  -
  +/* internal lh_apply() recursion callback context structure */
   typedef struct {
  -    val_t *val;
  -    char *name;
  -    int prefixlen;
  -    int depth;
  -    val_cb_t cb;
  -    void *ctx;
  -    val_rc_t rc;
  +    val_t    *val;
  +    char     *name;
  +    int       prefixlen;
  +    int       depth;
  +    val_cb_t  cb;
  +    void     *ctx;
  +    val_rc_t  rc;
   } val_apply_ctx_t;
   
  +/* forward declaration */
   static val_rc_t val_apply_internal(val_t *, const char *, int, int, val_cb_t, void *);
   
  +/* internal lh_apply() recursion callback for use with val_apply() */
   static int (val_apply_cb)(void *_ctx, const void *keyptr, int keylen, const void *datptr, int datlen)
   {
       val_apply_ctx_t *ctx = (val_apply_ctx_t *)_ctx;
       char name[VAL_MAXNAME+1];
       int prefixlen;
   
  -    /* on-the-fly create NUL-terminated name string */
  +    /* on-the-fly create NUL-terminated concatenated name string */
       if ((strlen(ctx->name) + 1 + keylen) > VAL_MAXNAME) {
           ctx->rc = VAL_ERR_MEM;
           return FALSE;
  @@ -868,12 +886,18 @@
           prefixlen = ctx->prefixlen;
       }
       strncat(name, (char *)keyptr, keylen);
  -    if ((ctx->rc = val_apply_internal(ctx->val, name, prefixlen, ctx->depth, ctx->cb, ctx->ctx)) != VAL_OK)
  +
  +    /* recursive step-down */
  +    if ((ctx->rc = val_apply_internal(ctx->val, name, prefixlen, 
  +                                      ctx->depth, ctx->cb, ctx->ctx)) != VAL_OK)
           return FALSE;
  +
       return TRUE;
   }
   
  -static val_rc_t val_apply_internal(val_t *val, const char *name, int prefixlen, int depth, val_cb_t cb, void *ctx)
  +/* internal API-increased variant of val_apply() */
  +static val_rc_t val_apply_internal(val_t *val, const char *name, int prefixlen, 
  +                                   int depth, val_cb_t cb, void *ctx)
   {
       val_object_t *obj;
       val_t *child;
  @@ -882,7 +906,8 @@
       val_apply_ctx_t val_ctx;
   
       if (name[prefixlen] == '\0') {
  -        /* prefix="foo.bar.", remainder="" */
  +        /* CASE 1: apply to all elements 
  +           prefix="foo.bar.", remainder="" */
           val_ctx.val       = val;
           val_ctx.name      = (char *)name;
           val_ctx.prefixlen = prefixlen;
  @@ -893,41 +918,43 @@
           if (!lh_apply(val->lh, val_apply_cb, &val_ctx))
               return VAL_ERR_SYS;
       }
  -    else {
  -        if ((cp = strchr(name+prefixlen, '.')) != NULL) {
  -            /* prefix="foo.bar.", remainder="quux.baz" */
  -            if (!lh_lookup(val->lh, name+prefixlen, cp-(name+prefixlen), (void **)&obj, NULL))
  -                return VAL_ERR_ARG;
  -            if (!(obj->type & VAL_TYPE_VAL))
  -                return VAL_ERR_USE;
  -            child = *(val_t **)(val_storage(obj));
  +    else if ((cp = strchr(name+prefixlen, '.')) != NULL) {
  +        /* CASE 2: still stepping-down for structured name
  +           prefix="foo.bar.", remainder="quux.baz" */
  +        if (!lh_lookup(val->lh, name+prefixlen, cp-(name+prefixlen), (void **)&obj, NULL))
  +            return VAL_ERR_ARG;
  +        if (!(obj->type & VAL_TYPE_VAL))
  +            return VAL_ERR_USE;
  +        child = *(val_t **)(val_storage(obj));
  +        if (depth == 0)
  +            return VAL_OK;
  +        return val_apply_internal(child, name, cp-name+1, depth-1, cb, ctx);
  +    } else {
  +        /* CASE 3: reached last component of structured name
  +           prefix="foo.bar.quux.", remainder="baz" */
  +        if (!lh_lookup(val->lh, name+prefixlen, strlen(name+prefixlen), (void **)&obj, NULL))
  +            return VAL_ERR_ARG;
  +        if ((rc = cb(ctx, name, (obj->type & ~VAL_INLINE), 
  +                     obj->desc, val_storage(obj))) != VAL_OK)
  +            return rc;
  +        if (obj->type & VAL_TYPE_VAL) {
               if (depth == 0)
                   return VAL_OK;
  -            return val_apply_internal(child, name, cp-name+1, --depth, cb, ctx);
  -        }
  -        else {
  -            /* prefix="foo.bar.quux.", remainder="baz" */
  -            if (!lh_lookup(val->lh, name+prefixlen, strlen(name+prefixlen), (void **)&obj, NULL))
  -                return VAL_ERR_ARG;
  -            /* execute VAL callback */
  -            if ((rc = cb(ctx, name, (obj->type & ~VAL_INLINE), obj->desc, val_storage(obj))) != VAL_OK)
  -                return rc;
  -            if (obj->type & VAL_TYPE_VAL) {
  -                if (depth == 0)
  -                    return VAL_OK;
  -                child = *(val_t **)(val_storage(obj));
  -                return val_apply_internal(child, name, strlen(name), --depth, cb, ctx);
  -            }
  +            child = *(val_t **)(val_storage(obj));
  +            return val_apply_internal(child, name, strlen(name), depth-1, cb, ctx);
           }
       }
       return VAL_OK;
   }
   
  +/* apply a callback to each value */
   val_rc_t val_apply(val_t *val, const char *name, int depth, val_cb_t cb, void *ctx)
   {
  +    /* argument consistency check */
       if (val == NULL || name == NULL || depth < 0 || cb == NULL)
           return VAL_ERR_ARG;
   
  +    /* just pass-through to internal API-extended variant */
       return val_apply_internal(val, name, 0, depth, cb, ctx);
   }
   
  Index: ossp-pkg/val/val.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 val.h
  --- ossp-pkg/val/val.h	16 Jan 2002 14:17:56 -0000	1.2
  +++ ossp-pkg/val/val.h	16 Jan 2002 20:24:10 -0000	1.3
  @@ -33,6 +33,10 @@
   
   #include <stdarg.h>
   
  +/* maximum length of a structured value name */
  +#define VAL_MAXNAME 1024
  +
  +/* the set of distinct value types */
   enum {
       VAL_TYPE_VAL    = 1<<0,
       VAL_TYPE_PTR    = 1<<1,
  @@ -44,19 +48,25 @@
       VAL_TYPE_DOUBLE = 1<<7
   };
   
  +/* the set of return codes */
   typedef enum {
  -    VAL_OK,
  -    VAL_ERR_ARG,
  -    VAL_ERR_USE,
  -    VAL_ERR_MEM,
  -    VAL_ERR_SYS
  +    VAL_OK,        /* everything ok */
  +    VAL_ERR_ARG,   /* error: invalid argument */
  +    VAL_ERR_USE,   /* error: invalid use */
  +    VAL_ERR_MEM,   /* error: no more memory */
  +    VAL_ERR_HSH,   /* error: hash table problem */
  +    VAL_ERR_INT,   /* error: internal error */
  +    VAL_ERR_SYS    /* error: system error (see errno) */
   } val_rc_t;
   
  +/* the opaque data structure and type */
   struct val_s;
   typedef struct val_s val_t;
   
  +/* function type for use with val_apply() */
   typedef val_rc_t (*val_cb_t)(void *, const char *, int, const char *, void *);
   
  +/* set of API functions */
   val_rc_t val_create  (val_t **);
   val_rc_t val_destroy (val_t *);
   val_rc_t val_reg     (val_t *, const char *, int, const char *, void *);

From ossp-cvs-owner@ossp.org  Wed Jan 16 21:32:24 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F2238764E3; Wed, 16 Jan 2002 21:32:23 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val val.c val.h
Message-Id: <20020116203223.F2238764E3@mail.ossp.org>
Date: Wed, 16 Jan 2002 21:32:23 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   16-Jan-2002 21:32:23
  Branch: HEAD                             Handle: 2002011620322300

  Modified files:
    ossp-pkg/val            val.c val.h

  Log:
    add general query function which can be used to get back all things
    which were stored on val_reg() and especially allows to query just the
    existance of the value.

  Summary:
    Revision    Changes     Path
    1.5         +37 -0      ossp-pkg/val/val.c
    1.4         +1  -0      ossp-pkg/val/val.h
  ____________________________________________________________________________

  Index: ossp-pkg/val/val.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 val.c
  --- ossp-pkg/val/val.c	16 Jan 2002 20:24:09 -0000	1.4
  +++ ossp-pkg/val/val.c	16 Jan 2002 20:32:23 -0000	1.5
  @@ -722,6 +722,43 @@
       return VAL_OK;
   }
   
  +/* query information about a value */
  +val_rc_t val_query(val_t *val, const char *name, 
  +                   int *ptype, char **pdesc, void **pstorage)
  +{
  +    char *cp;
  +    val_object_t *obj;
  +    val_t *child;
  +
  +    /* argument consistency check */
  +    if (val == NULL || name == NULL)
  +        return VAL_ERR_ARG;
  +
  +    /* recursive step-down on structured name */
  +    if ((cp = strchr(name, '.')) != NULL) {
  +        if (!lh_lookup(val->lh, name, cp-name, (void **)&obj, NULL))
  +            return VAL_ERR_ARG;
  +        if (!(obj->type & VAL_TYPE_VAL))
  +            return VAL_ERR_USE;
  +        child = *(val_t **)(val_storage(obj));
  +        return val_query(child, cp+1, ptype, pdesc, pstorage);
  +    }
  +
  +    /* try to lookup object in hash table */
  +    if (!lh_lookup(val->lh, name, strlen(name), (void **)&obj, NULL))
  +        return VAL_ERR_ARG;
  +
  +    /* pass queried information to caller */
  +    if (ptype != NULL)
  +        *ptype = (obj->type & ~VAL_INLINE);
  +    if (pdesc != NULL)
  +        *pdesc = obj->desc;
  +    if (pstorage != NULL)
  +        *pstorage = val_storage(obj);
  +
  +    return VAL_OK;
  +}
  +
   /* set a value (va_list variant) */
   val_rc_t val_vset(val_t *val, const char *name, va_list ap)
   {
  Index: ossp-pkg/val/val.h
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 val.h
  --- ossp-pkg/val/val.h	16 Jan 2002 20:24:10 -0000	1.3
  +++ ossp-pkg/val/val.h	16 Jan 2002 20:32:23 -0000	1.4
  @@ -70,6 +70,7 @@
   val_rc_t val_create  (val_t **);
   val_rc_t val_destroy (val_t *);
   val_rc_t val_reg     (val_t *, const char *, int, const char *, void *);
  +val_rc_t val_query   (val_t *, const char *, int *, char **, void **);
   val_rc_t val_set     (val_t *, const char *, ...);
   val_rc_t val_get     (val_t *, const char *, ...);
   val_rc_t val_vset    (val_t *, const char *, va_list);

From ossp-cvs-owner@ossp.org  Wed Jan 16 21:47:57 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E4326764E3; Wed, 16 Jan 2002 21:47:56 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val val.pod
Message-Id: <20020116204756.E4326764E3@mail.ossp.org>
Date: Wed, 16 Jan 2002 21:47:56 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   16-Jan-2002 21:47:56
  Branch: HEAD                             Handle: 2002011620475600

  Modified files:
    ossp-pkg/val            val.pod

  Log:
    Provide the skeleton for the manual page.
    Details will be filled in soon (Thomas?!)

  Summary:
    Revision    Changes     Path
    1.4         +114 -2     ossp-pkg/val/val.pod
  ____________________________________________________________________________

  Index: ossp-pkg/val/val.pod
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 val.pod
  --- ossp-pkg/val/val.pod	16 Jan 2002 14:09:18 -0000	1.3
  +++ ossp-pkg/val/val.pod	16 Jan 2002 20:47:56 -0000	1.4
  @@ -36,13 +36,125 @@
   
   =head1 SYNOPSIS
   
  +=over 4
  +
  +=item B<Constants>
  +
  +C<VAL_MAXNAME>, 
  +C<VAL_TYPE_VAL>,
  +C<VAL_TYPE_PTR>,
  +C<VAL_TYPE_CHAR>,
  +C<VAL_TYPE_SHORT>,
  +C<VAL_TYPE_INT>,
  +C<VAL_TYPE_LONG>,
  +C<VAL_TYPE_FLOAT>,
  +C<VAL_TYPE_DOUBLE>
  +C<VAL_OK>,
  +C<VAL_ERR_ARG>,
  +C<VAL_ERR_USE>,
  +C<VAL_ERR_MEM>,
  +C<VAL_ERR_HSH>,
  +C<VAL_ERR_INT>,
  +C<VAL_ERR_SYS>.
  +
  +=item B<Data Types>
  +
  +C<val_t>,
  +C<val_cb_t>,
  +C<val_rc_t>.
  +
  +=item B<Functions>
  +
  +C<val_create>,
  +C<val_destroy>,
  +C<val_reg>,
  +C<val_query>,
  +C<val_set>,
  +C<val_get>,
  +C<val_vset>,
  +C<val_vget>,
  +C<val_apply>.
  +
  +=back
  +
   =head1 DESCRIPTION
   
  -B<OSSP val> is ...
  +B<OSSP val> is a flexible name to value mapping library for C variables.
  +It allows one to access C variables through name strings, although
  +the C language does neither provide such a dedicated facility nor an
  +evaluation construct (which could be used to implement such a facility
  +easily). In general, it is interesting whenevery you need access to C
  +variable symbols without having to know the actual address/reference.
  +The typical use cases are in combination with flexible configuration
  +parsing and supporting loosly-coupled DSO-based module architectures.
  +
  +=head1 API CONSTANTS
  +
  +=over 4
  +
  +=item C<VAL_MAXNAME>
  +
  +=item C<VAL_TYPE_>I<ID>
  +
  +C<VAL_TYPE_VAL>,
  +C<VAL_TYPE_PTR>,
  +C<VAL_TYPE_CHAR>,
  +C<VAL_TYPE_SHORT>,
  +C<VAL_TYPE_INT>,
  +C<VAL_TYPE_LONG>,
  +C<VAL_TYPE_FLOAT>,
  +C<VAL_TYPE_DOUBLE>
  +
  +=item C<VAL_OK>, C<VAL_ERR_>I<ID>
  +
  +C<VAL_ERR_ARG>,
  +C<VAL_ERR_USE>,
  +C<VAL_ERR_MEM>,
  +C<VAL_ERR_HSH>,
  +C<VAL_ERR_INT>,
  +C<VAL_ERR_SYS>.
  +
  +=back
  +
  +=head1 API DATA TYPES
  +
  +=over 4
  +
  +=item C<val_t>
  +
  +=item C<val_cb_t>
  +
  +=item C<val_rc_t>
  +
  +=back
  +
  +=head1 API FUNCTIONS
  +
  +=over 4
  +
  +=item val_rc_t B<val_create>(val_t **I<pval>);
  +
  +=item val_rc_t B<val_destroy>(val_t *I<val>);
  +
  +=item val_rc_t B<val_reg>(val_t *I<val>, const char *I<name>, int I<type>, const char *I<desc>, void *I<storage>);
  +
  +=item val_rc_t B<val_query>(val_t *I<val>, const char *I<name>, int *I<ptype>, char **I<pdesc>, void **I<pstorage>);
  +
  +=item val_rc_t B<val_set>(val_t *I<val>, const char *I<name>, ...);
  +
  +=item val_rc_t B<val_get>(val_t *I<val>, const char *I<name>, ...);
  +
  +=item val_rc_t B<val_vset>(val_t *I<val>, const char *I<name>, va_list I<ap>);
  +
  +=item val_rc_t B<val_vget>(val_t *I<val>, const char *I<name>, va_list I<ap>);
  +
  +=item val_rc_t B<val_apply>(val_t *I<val>, const char *I<name>, int I<depth>, val_cb_t I<cb>, void *I<ctx>);
  +
  +=back
   
   =head1 SEE ALSO
   
  -...
  +OSSP var.
   
   =head1 HISTORY
   

From ossp-cvs-owner@ossp.org  Thu Jan 17 09:02:45 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3EEFD764D1; Thu, 17 Jan 2002 09:02:45 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_lh.c lmtp2nntp_lh.h
Message-Id: <20020117080245.3EEFD764D1@mail.ossp.org>
Date: Thu, 17 Jan 2002 09:02:45 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   17-Jan-2002 09:02:45
  Branch: HEAD                             Handle: 1970010101000000

  Removed files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_lh.c lmtp2nntp_lh.h

  Log:
    remove lh, it was relocated to lib val

  Summary:
    Revision    Changes     Path
    NONE        +0  -575    ossp-pkg/lmtp2nntp/lmtp2nntp_lh.c
    NONE        +0  -50     ossp-pkg/lmtp2nntp/lmtp2nntp_lh.h
  ____________________________________________________________________________

    

From ossp-cvs-owner@ossp.org  Thu Jan 17 10:22:19 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F2A2D764D1; Thu, 17 Jan 2002 10:22:18 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val val.pod
Message-Id: <20020117092218.F2A2D764D1@mail.ossp.org>
Date: Thu, 17 Jan 2002 10:22:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   17-Jan-2002 10:22:18
  Branch: HEAD                             Handle: 2002011709221800

  Modified files:
    ossp-pkg/val            val.pod

  Log:
    completed documentation

  Summary:
    Revision    Changes     Path
    1.5         +77 -1      ossp-pkg/val/val.pod
  ____________________________________________________________________________

  Index: ossp-pkg/val/val.pod
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 val.pod
  --- ossp-pkg/val/val.pod	16 Jan 2002 20:47:56 -0000	1.4
  +++ ossp-pkg/val/val.pod	17 Jan 2002 09:22:18 -0000	1.5
  @@ -83,19 +83,34 @@
   It allows one to access C variables through name strings, although
   the C language does neither provide such a dedicated facility nor an
   evaluation construct (which could be used to implement such a facility
  -easily). In general, it is interesting whenevery you need access to C
  +easily). In general, it is interesting whenever you need access to C
   variable symbols without having to know the actual address/reference.
   The typical use cases are in combination with flexible configuration
   parsing and supporting loosly-coupled DSO-based module architectures.
   
  +=head1 STRUCTURED NAMES
  +
  +Whenever the APIs calls for a name it supports structured names where elements
  +are separated by a dot. It is assumed that the leading elements are references
  +to other C<val_t> structures and only the very last element is a reference to
  +an actual variable.
  +
   =head1 API CONSTANTS
   
   =over 4
   
   =item C<VAL_MAXNAME>
   
  +The maximum length of a variable name. For structured variables this includes
  +the concatenation of all elements within a path and their separating dots.
  +
   =item C<VAL_TYPE_>I<ID>
   
  +Type of value when registering a variable using B<val_reg>() or querying for
  +the type using B<val_query>(). Most are self-explanatory, C<VAL_TYPE_VAL> is
  +used to mount a C<val_t> structure into an existing C<val_t> structure to
  +support structured names.
  +
   C<VAL_TYPE_VAL>,
   C<VAL_TYPE_PTR>,
   C<VAL_TYPE_CHAR>,
  @@ -107,6 +122,12 @@
   
   =item C<VAL_OK>, C<VAL_ERR_>I<ID>
   
  +Return codes for every API function. Signals success, invalid argument passed
  +to function, bad usage of a function, memoryusage reached C<VAL_MAXNAME>
  +limit, error in internal hash function to be examined through C<errno>,
  +internal error in storage as result from structure corruption, or system
  +errors including out of memory.
  +
   C<VAL_ERR_ARG>,
   C<VAL_ERR_USE>,
   C<VAL_ERR_MEM>,
  @@ -122,10 +143,18 @@
   
   =item C<val_t>
   
  +Handle created by B<val_create>() and passed to all other functions to reference
  +the the same group of variables.
  +
   =item C<val_cb_t>
   
  +Callback to be used B<var_apply>().
  +
   =item C<val_rc_t>
   
  +Code returned by every function. See C<API_CONSTANTS> C<VAL_OK> and
  +C<VAL_ERR_>I<ID>.
  +
   =back
   
   =head1 API FUNCTIONS
  @@ -134,21 +163,68 @@
   
   =item val_rc_t B<val_create>(val_t **I<pval>);
   
  +Creates an I<val> and updates the given pointer to reference it.
  +
   =item val_rc_t B<val_destroy>(val_t *I<val>);
   
  +Destroys an I<val>, freeing up memory.
  +
   =item val_rc_t B<val_reg>(val_t *I<val>, const char *I<name>, int I<type>, const char *I<desc>, void *I<storage>);
   
  +Registers a variable I<name> using I<type> in I<val>. An optional description
  +or NULL can be passed through I<desc> which can be queried through
  +B<val_query>() and is also passed to the callback of B<val_apply>(). The value
  +that belongs to the given I<name> is expected to be found at I<storage>.
  +Passing NULL as I<storage> will create an inline data store in I<val> so it
  +can only be access through B<val_get>(), B<val_set>() or after the actual
  +storage address was queried using B<val_query>().
  +
   =item val_rc_t B<val_query>(val_t *I<val>, const char *I<name>, int *I<ptype>, char **I<pdesc>, void **I<pstorage>);
   
  +Queries a variable I<name> in I<val> and returns it's type, description and
  +storage address. All of I<ptype>, I<pdesc> and I<pstorage> are optional and
  +NULL can be passed in if this information is not needed. Passing NULL to all
  +query result pointers just checks for existence of I<name>.
  +
   =item val_rc_t B<val_set>(val_t *I<val>, const char *I<name>, ...);
   
  +Sets the value of variable I<name> in I<val> to the data passed in as vararg.
  +Unless the actual storage address was queried using B<val_query>() this is
  +mandatory for inline data. Usually not the value but a pointer to it is stored
  +to the value can be modified without notice to the library.
  +
   =item val_rc_t B<val_get>(val_t *I<val>, const char *I<name>, ...);
   
  +Gets the value of variable I<name> in I<val> and stores it whereever the
  +passed vararg points to.
  +
   =item val_rc_t B<val_vset>(val_t *I<val>, const char *I<name>, va_list I<ap>);
   
  +Like B<val_set>() but takes a C<va_list> as input to allow recursive
  +execution. Acutally, B<val_set>() ist just a wrapper around
  +B<val_vset>().
  +
   =item val_rc_t B<val_vget>(val_t *I<val>, const char *I<name>, va_list I<ap>);
   
  +Like B<val_get>() but takes a C<va_list> as input to allow recursive
  +execution. Acutally, B<val_get>() ist just a wrapper around
  +B<val_vget>().
  +
   =item val_rc_t B<val_apply>(val_t *I<val>, const char *I<name>, int I<depth>, val_cb_t I<cb>, void *I<ctx>);
  +
  +Iterates through all elements of I<val>, starting with I<name> which can be
  +either a data store or I<val> reference, down to a given recursion I<depth>.
  +When I<name> is set to the empty string the search starts immediately at
  +I<val>.  For every element, the callback I<cb>() is executed and a context
  +I<ctx> is passed to it along with other information described below.
  +
  +=item val_rc_t (*)(void *I<ctx>, const char *I<name>, int I<type>, const char *I<desc>, void *I<data>)
  +
  +Callback executed by B<val_apply>() for each element being processed. The
  +context I<ctx> input to B<val_apply>() is passed to the callback verbatim. The
  +I<name> is the structured name relative to the I<val> passed to
  +B<val_apply>(), I<type> signals the type of value I<data> points to and
  +I<desc> is a text which was optionally passed to B<val_reg>().
   
   =back
   

From ossp-cvs-owner@ossp.org  Thu Jan 17 12:50:06 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A154B764D1; Thu, 17 Jan 2002 12:50:06 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val val.pod
Message-Id: <20020117115006.A154B764D1@mail.ossp.org>
Date: Thu, 17 Jan 2002 12:50:06 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   17-Jan-2002 12:50:06
  Branch: HEAD                             Handle: 2002011711500600

  Modified files:
    ossp-pkg/val            val.pod

  Log:
    added two copy'n'past examples

  Summary:
    Revision    Changes     Path
    1.6         +50 -0      ossp-pkg/val/val.pod
  ____________________________________________________________________________

  Index: ossp-pkg/val/val.pod
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 val.pod
  --- ossp-pkg/val/val.pod	17 Jan 2002 09:22:18 -0000	1.5
  +++ ossp-pkg/val/val.pod	17 Jan 2002 11:50:06 -0000	1.6
  @@ -232,6 +232,56 @@
   
   OSSP var.
   
  +=head1 EXAMPLES
  +
  +=over 4
  +
  +=item simple create, reg, get, destroy
  +
  +    #include <stdio.h>
  +    #include "val.h"
  +
  +    int main(void)
  +    {
  +        val_rc_t rc;
  +        val_t *v;
  +        int example;
  +        int pullout;
  +
  +        if ((rc = val_create(&v)) != VAL_OK) exit(-1);
  +        if ((rc = val_reg(v, "foo", VAL_TYPE_INT, "foo variable", (void *)&example)) != VAL_OK) exit(-1);
  +        example = 123;
  +        if ((rc = val_get(v, "foo", &pullout)) != VAL_OK) exit(-1);
  +        printf("pulled example and got %d\n", pullout);
  +        if ((rc = val_destroy(v)) != VAL_OK) exit(-1);
  +        return 0;
  +    }
  +
  +=item reg inline data, structured name, set
  +
  +    #include <stdio.h>
  +    #include "val.h"
  +
  +    int main(void)
  +    {
  +        val_rc_t rc;
  +        val_t *v1, *v2;
  +        int pullout;
  +
  +        if ((rc = val_create(&v1)) != VAL_OK) exit(-1);
  +        if ((rc = val_create(&v2)) != VAL_OK) exit(-1);
  +        if ((rc = val_reg(v1, "bar", VAL_TYPE_VAL, "child", (void *)&v2)) != VAL_OK) exit(-1);
  +        if ((rc = val_reg(v1, "bar.foo", VAL_TYPE_INT, "foo variable", NULL)) != VAL_OK) exit(-1);
  +        if ((rc = val_set(v2, "foo", 456)) != VAL_OK) exit(-1);
  +        if ((rc = val_get(v1, "bar.foo", &pullout)) != VAL_OK) exit(-1);
  +        printf("pulled example and got %d\n", pullout);
  +        if ((rc = val_destroy(v2)) != VAL_OK) exit(-1);
  +        if ((rc = val_destroy(v1)) != VAL_OK) exit(-1);
  +        return 0;
  +    }
  +
  +=back
  +
   =head1 HISTORY
   
   B<OSSP val> was invented in January 2002 by Thomas Lotterer and Ralf S.

From ossp-cvs-owner@ossp.org  Thu Jan 17 12:53:25 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D9B0D764D1; Thu, 17 Jan 2002 12:53:24 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp configure.ac devtool.conf
Message-Id: <20020117115324.D9B0D764D1@mail.ossp.org>
Date: Thu, 17 Jan 2002 12:53:24 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   17-Jan-2002 12:53:24
  Branch: HEAD                             Handle: 2002011711532400

  Modified files:
    ossp-pkg/lmtp2nntp      configure.ac devtool.conf

  Log:
    lib val was missing

  Summary:
    Revision    Changes     Path
    1.21        +1  -1      ossp-pkg/lmtp2nntp/configure.ac
    1.2         +6  -0      ossp-pkg/lmtp2nntp/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/configure.ac
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 configure.ac
  --- ossp-pkg/lmtp2nntp/configure.ac	16 Jan 2002 14:22:14 -0000	1.20
  +++ ossp-pkg/lmtp2nntp/configure.ac	17 Jan 2002 11:53:24 -0000	1.21
  @@ -116,7 +116,7 @@
   export enable_shared
   enable_headline=no
   export enable_headline
  -AC_CONFIG_SUBDIRS([$SUBDIR_STR $SUBDIR_L2 $SUBDIR_SA $SUBDIR_VAR])
  +AC_CONFIG_SUBDIRS([$SUBDIR_STR $SUBDIR_L2 $SUBDIR_SA $SUBDIR_VAR $SUBDIR_VAL])
   
   dnl #   standard output generation
   AC_CONFIG_HEADERS(config.h)
  Index: ossp-pkg/lmtp2nntp/devtool.conf
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.conf
  --- ossp-pkg/lmtp2nntp/devtool.conf	31 Dec 2001 12:03:09 -0000	1.1
  +++ ossp-pkg/lmtp2nntp/devtool.conf	17 Jan 2002 11:53:24 -0000	1.2
  @@ -18,6 +18,9 @@
       echo "===> lib_var (devtool autogen)"
       (cd lib_var && ./devtool autogen)
       echo "<=== lib_var"
  +    echo "===> lib_val (devtool autogen)"
  +    (cd lib_val && ./devtool autogen)
  +    echo "<=== lib_val"
   
   %autoclean
       @autoclean shtool
  @@ -35,6 +38,9 @@
       echo "===> lib_var (devtool autoclean)"
       (cd lib_var && ./devtool autoclean)
       echo "<=== lib_var"
  +    echo "===> lib_val (devtool autoclean)"
  +    (cd lib_val && ./devtool autoclean)
  +    echo "<=== lib_val"
   
   %configure
       ./configure \

From ossp-cvs-owner@ossp.org  Thu Jan 17 13:19:10 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 368FE764D1; Thu, 17 Jan 2002 13:19:10 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val val.c val.h val.pod
Message-Id: <20020117121910.368FE764D1@mail.ossp.org>
Date: Thu, 17 Jan 2002 13:19:10 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   17-Jan-2002 13:19:10
  Branch: HEAD                             Handle: 2002011712190900

  Modified files:
    ossp-pkg/val            val.c val.h val.pod

  Log:
    add val_unreg() function

  Summary:
    Revision    Changes     Path
    1.6         +35 -0      ossp-pkg/val/val.c
    1.5         +1  -0      ossp-pkg/val/val.h
    1.7         +5  -0      ossp-pkg/val/val.pod
  ____________________________________________________________________________

  Index: ossp-pkg/val/val.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 val.c
  --- ossp-pkg/val/val.c	16 Jan 2002 20:32:23 -0000	1.5
  +++ ossp-pkg/val/val.c	17 Jan 2002 12:19:09 -0000	1.6
  @@ -722,6 +722,41 @@
       return VAL_OK;
   }
   
  +val_rc_t val_unreg(val_t *val, const char *name)
  +{
  +    val_object_t *obj;
  +    const char *cp;
  +    val_t *child;
  +
  +    /* argument consistency check */
  +    if (val == NULL || name == NULL)
  +        return VAL_ERR_ARG;
  +
  +    /* recursive step-down on structured name */
  +    if ((cp = strchr(name, '.')) != NULL) {
  +        if (!lh_lookup(val->lh, name, cp-name, (void **)&obj, NULL))
  +            return VAL_ERR_ARG;
  +        if (!(obj->type & VAL_TYPE_VAL))
  +            return VAL_ERR_USE;
  +        child = *(val_t **)(val_storage(obj));
  +        return val_unreg(child, cp+1);
  +    }
  +
  +    /* try to lookup object in hash table */
  +    if (!lh_lookup(val->lh, name, strlen(name), (void **)&obj, NULL))
  +        return VAL_ERR_ARG;
  +
  +    /* destroy value object */
  +    if (obj->desc != NULL)
  +        free(obj->desc);
  +
  +    /* delete value from hash table */
  +    if (!lh_delete(val->lh, name, strlen(name)))
  +        return VAL_ERR_HSH;
  +
  +    return VAL_OK;
  +}
  +
   /* query information about a value */
   val_rc_t val_query(val_t *val, const char *name, 
                      int *ptype, char **pdesc, void **pstorage)
  Index: ossp-pkg/val/val.h
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 val.h
  --- ossp-pkg/val/val.h	16 Jan 2002 20:32:23 -0000	1.4
  +++ ossp-pkg/val/val.h	17 Jan 2002 12:19:09 -0000	1.5
  @@ -70,6 +70,7 @@
   val_rc_t val_create  (val_t **);
   val_rc_t val_destroy (val_t *);
   val_rc_t val_reg     (val_t *, const char *, int, const char *, void *);
  +val_rc_t val_unreg   (val_t *, const char *);
   val_rc_t val_query   (val_t *, const char *, int *, char **, void **);
   val_rc_t val_set     (val_t *, const char *, ...);
   val_rc_t val_get     (val_t *, const char *, ...);
  Index: ossp-pkg/val/val.pod
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 val.pod
  --- ossp-pkg/val/val.pod	17 Jan 2002 11:50:06 -0000	1.6
  +++ ossp-pkg/val/val.pod	17 Jan 2002 12:19:09 -0000	1.7
  @@ -68,6 +68,7 @@
   C<val_create>,
   C<val_destroy>,
   C<val_reg>,
  +C<val_unreg>,
   C<val_query>,
   C<val_set>,
   C<val_get>,
  @@ -178,6 +179,10 @@
   Passing NULL as I<storage> will create an inline data store in I<val> so it
   can only be access through B<val_get>(), B<val_set>() or after the actual
   storage address was queried using B<val_query>().
  +
  +=item val_rc_t B<val_unreg>(val_t *I<val>, const char *I<name>);
  +
  +Unregisters a variable I<name> in I<val>.
   
   =item val_rc_t B<val_query>(val_t *I<val>, const char *I<name>, int *I<ptype>, char **I<pdesc>, void **I<pstorage>);
   

From ossp-cvs-owner@ossp.org  Thu Jan 17 13:29:34 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0E57F764D1; Thu, 17 Jan 2002 13:29:34 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth pth.pod
Message-Id: <20020117122934.0E57F764D1@mail.ossp.org>
Date: Thu, 17 Jan 2002 13:29:34 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   17-Jan-2002 13:29:33
  Branch: HEAD                             Handle: 2002011712293300

  Modified files:
    ossp-pkg/pth            pth.pod

  Log:
    fix typo (found by Takashi Ishihara <tishihara@ucdavis.edu>)

  Summary:
    Revision    Changes     Path
    1.150       +1  -1      ossp-pkg/pth/pth.pod
  ____________________________________________________________________________

  Index: ossp-pkg/pth/pth.pod
  ============================================================
  $ cvs diff -u -r1.149 -r1.150 pth.pod
  --- ossp-pkg/pth/pth.pod	26 Nov 2001 20:08:30 -0000	1.149
  +++ ossp-pkg/pth/pth.pod	17 Jan 2002 12:29:33 -0000	1.150
  @@ -1097,7 +1097,7 @@
   =item C<PTH_EVENT_FD>
   
   This is a file descriptor event. One or more of C<PTH_UNTIL_FD_READABLE>,
  -C<PTH_UNTIL_FD_WRITEABLE> or C<PTH_UNTIL_FD_EXECPTION> have to be OR-ed into
  +C<PTH_UNTIL_FD_WRITEABLE> or C<PTH_UNTIL_FD_EXCEPTION> have to be OR-ed into
   I<spec> to specify on which state of the file descriptor you want to wait.  The
   file descriptor itself has to be given as an additional argument.  Example:
   `C<pth_event(PTH_EVENT_FD|PTH_UNTIL_FD_READABLE, fd)>'.

From ossp-cvs-owner@ossp.org  Thu Jan 17 14:01:59 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5EA57764D1; Thu, 17 Jan 2002 14:01:59 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val val.pod
Message-Id: <20020117130159.5EA57764D1@mail.ossp.org>
Date: Thu, 17 Jan 2002 14:01:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   17-Jan-2002 14:01:59
  Branch: HEAD                             Handle: 2002011713015800

  Modified files:
    ossp-pkg/val            val.pod

  Log:
    - add a third example
    - add a little bit more tests to first examples
    - remove all error checking because in examples
      we generally ommit this for easier reading
    - display expected output

  Summary:
    Revision    Changes     Path
    1.8         +100 -45    ossp-pkg/val/val.pod
  ____________________________________________________________________________

  Index: ossp-pkg/val/val.pod
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 val.pod
  --- ossp-pkg/val/val.pod	17 Jan 2002 12:19:09 -0000	1.7
  +++ ossp-pkg/val/val.pod	17 Jan 2002 13:01:58 -0000	1.8
  @@ -239,51 +239,106 @@
   
   =head1 EXAMPLES
   
  -=over 4
  -
  -=item simple create, reg, get, destroy
  -
  -    #include <stdio.h>
  -    #include "val.h"
  -
  -    int main(void)
  -    {
  -        val_rc_t rc;
  -        val_t *v;
  -        int example;
  -        int pullout;
  -
  -        if ((rc = val_create(&v)) != VAL_OK) exit(-1);
  -        if ((rc = val_reg(v, "foo", VAL_TYPE_INT, "foo variable", (void *)&example)) != VAL_OK) exit(-1);
  -        example = 123;
  -        if ((rc = val_get(v, "foo", &pullout)) != VAL_OK) exit(-1);
  -        printf("pulled example and got %d\n", pullout);
  -        if ((rc = val_destroy(v)) != VAL_OK) exit(-1);
  -        return 0;
  -    }
  -
  -=item reg inline data, structured name, set
  -
  -    #include <stdio.h>
  -    #include "val.h"
  -
  -    int main(void)
  -    {
  -        val_rc_t rc;
  -        val_t *v1, *v2;
  -        int pullout;
  -
  -        if ((rc = val_create(&v1)) != VAL_OK) exit(-1);
  -        if ((rc = val_create(&v2)) != VAL_OK) exit(-1);
  -        if ((rc = val_reg(v1, "bar", VAL_TYPE_VAL, "child", (void *)&v2)) != VAL_OK) exit(-1);
  -        if ((rc = val_reg(v1, "bar.foo", VAL_TYPE_INT, "foo variable", NULL)) != VAL_OK) exit(-1);
  -        if ((rc = val_set(v2, "foo", 456)) != VAL_OK) exit(-1);
  -        if ((rc = val_get(v1, "bar.foo", &pullout)) != VAL_OK) exit(-1);
  -        printf("pulled example and got %d\n", pullout);
  -        if ((rc = val_destroy(v2)) != VAL_OK) exit(-1);
  -        if ((rc = val_destroy(v1)) != VAL_OK) exit(-1);
  -        return 0;
  -    }
  +A few simple examples on how to use B<OSSP val> are following. For
  +easier reading all error checks are omitted. In a production program you
  +have to check every val_xxx() call against C<VAL_OK>, of course.
  +
  +=head2 Simple Internal Value
  +
  +Source:
  +
  + #include <stdio.h>
  + #include "val.h"
  +
  + int main(void)
  + {
  +     val_rc_t rc;
  +     val_t *v;
  +     int tmp;
  +
  +     val_create(&v);
  +     val_reg(v, "foo", VAL_TYPE_INT, "foo variable", NULL);
  +     val_set(v, "foo", 123);
  +     val_get(v, "foo", &tmp);
  +     printf("foo=%d\n", tmp);
  +     val_destroy(v);
  +     return 0;
  + }
  +
  +Output:
  +
  +  foo=123
  +
  +=head2 Simple External Value
  +
  +Source:
  +
  + #include <stdio.h>
  + #include "val.h"
  +
  + int main(void)
  + {
  +     val_rc_t rc;
  +     val_t *v;
  +     int foo;
  +     int tmp;
  +
  +     val_create(&v);
  +     val_reg(v, "foo", VAL_TYPE_INT, "foo variable", (void *)&foo);
  +     foo = 123;
  +     val_get(v, "foo", &tmp);
  +     printf("1. foo=%d tmp=%d\n", foo, tmp);
  +     val_set(v, "foo", 456);
  +     val_get(v, "foo", &tmp);
  +     printf("2. foo=%d tmp=%d\n", foo, tmp);
  +     example = 789;
  +     val_get(v, "foo", &tmp);
  +     printf("3. foo=%d tmp=%d\n", foo, tmp);
  +     val_destroy(v);
  +     return 0;
  + }
  +
  +Output:
  +
  + 1. foo=123 tmp=123
  + 2. foo=456 tmp=456
  + 3. foo=789 tmp=789
  +
  +=head2 Structured Internal Values
  +
  +Source:
  +
  + #include <stdio.h>
  + #include "val.h"
  +
  + int main(void)
  + {
  +     val_rc_t rc;
  +     val_t *v1, *v2;
  +     int tmp;
  +
  +     val_create(&v1);
  +     val_create(&v2);
  +     val_reg(v1, "bar", VAL_TYPE_VAL, "v2", (void *)&v2);
  +     val_reg(v1, "bar.foo", VAL_TYPE_INT, "foo variable", NULL);
  +     val_set(v2, "foo", 123);
  +     val_get(v2, "foo", &tmp);
  +     printf("1. foo=%d\n", tmp);
  +     val_get(v1, "bar.foo", &tmp);
  +     printf("2. bar.foo=%d\n", tmp);
  +     val_set(v1, "bar.foo", 456);
  +     val_get(v2, "foo", &tmp);
  +     printf("3. foo=%d\n", tmp);
  +     val_destroy(v2);
  +     val_destroy(v1);
  +     return 0;
  + }
  +
  +Output:
  +
  + 1. foo=123
  + 2. bar.foo=123
  + 3. foo=456
   
   =back
   

From ossp-cvs-owner@ossp.org  Thu Jan 17 14:26:32 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 21595764D1; Thu, 17 Jan 2002 14:26:32 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val val.pod
Message-Id: <20020117132632.21595764D1@mail.ossp.org>
Date: Thu, 17 Jan 2002 14:26:32 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   17-Jan-2002 14:26:32
  Branch: HEAD                             Handle: 2002011713263100

  Modified files:
    ossp-pkg/val            val.pod

  Log:
    more polishing

  Summary:
    Revision    Changes     Path
    1.9         +69 -73     ossp-pkg/val/val.pod
  ____________________________________________________________________________

  Index: ossp-pkg/val/val.pod
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 val.pod
  --- ossp-pkg/val/val.pod	17 Jan 2002 13:01:58 -0000	1.8
  +++ ossp-pkg/val/val.pod	17 Jan 2002 13:26:31 -0000	1.9
  @@ -84,10 +84,12 @@
   It allows one to access C variables through name strings, although
   the C language does neither provide such a dedicated facility nor an
   evaluation construct (which could be used to implement such a facility
  -easily). In general, it is interesting whenever you need access to C
  -variable symbols without having to know the actual address/reference.
  -The typical use cases are in combination with flexible configuration
  -parsing and supporting loosly-coupled DSO-based module architectures.
  +easily). 
  +
  +In general, this is used for accessing C variables without having to
  +know the actual symbol/address/reference. The typical use cases are
  +in combination with flexible configuration parsing and supporting
  +loosly-coupled DSO-based module architectures.
   
   =head1 STRUCTURED NAMES
   
  @@ -107,33 +109,27 @@
   
   =item C<VAL_TYPE_>I<ID>
   
  -Type of value when registering a variable using B<val_reg>() or querying for
  -the type using B<val_query>(). Most are self-explanatory, C<VAL_TYPE_VAL> is
  -used to mount a C<val_t> structure into an existing C<val_t> structure to
  -support structured names.
  -
  -C<VAL_TYPE_VAL>,
  -C<VAL_TYPE_PTR>,
  -C<VAL_TYPE_CHAR>,
  -C<VAL_TYPE_SHORT>,
  -C<VAL_TYPE_INT>,
  -C<VAL_TYPE_LONG>,
  -C<VAL_TYPE_FLOAT>,
  -C<VAL_TYPE_DOUBLE>
  +Type of value when registering a variable using B<val_reg>() or querying
  +for the type using B<val_query>(). Most are self-explanatory because
  +directly correspond to the basic C data types. C<VAL_TYPE_VAL> is used
  +to mount a C<val_t> structure into an existing C<val_t> structure to
  +support structured names (see example section for details).
  +
  +The following particular types exist: C<VAL_TYPE_VAL>, C<VAL_TYPE_PTR>,
  +C<VAL_TYPE_CHAR>, C<VAL_TYPE_SHORT>, C<VAL_TYPE_INT>, C<VAL_TYPE_LONG>,
  +C<VAL_TYPE_FLOAT>, C<VAL_TYPE_DOUBLE>
   
   =item C<VAL_OK>, C<VAL_ERR_>I<ID>
   
  -Return codes for every API function. Signals success, invalid argument passed
  -to function, bad usage of a function, memoryusage reached C<VAL_MAXNAME>
  -limit, error in internal hash function to be examined through C<errno>,
  -internal error in storage as result from structure corruption, or system
  -errors including out of memory.
  -
  -C<VAL_ERR_ARG>,
  -C<VAL_ERR_USE>,
  -C<VAL_ERR_MEM>,
  -C<VAL_ERR_HSH>,
  -C<VAL_ERR_INT>,
  +Return codes (of type C<val_rc_t>) for every API function. Signals success
  +(C<VAL_OK>), invalid argument passed to function, bad usage of a function,
  +memory usage reached C<VAL_MAXNAME> limit, error in internal hash function to
  +be examined through C<errno>, internal error in storage as result from
  +structure corruption, or system errors including out of memory to be examined
  +through C<errno>.
  +
  +The following particular return codes exist: C<VAL_OK>, C<VAL_ERR_ARG>,
  +C<VAL_ERR_USE>, C<VAL_ERR_MEM>, C<VAL_ERR_HSH>, C<VAL_ERR_INT>,
   C<VAL_ERR_SYS>.
   
   =back
  @@ -144,16 +140,16 @@
   
   =item C<val_t>
   
  -Handle created by B<val_create>() and passed to all other functions to reference
  -the the same group of variables.
  +Opaque handle data type created by B<val_create>() and passed to all
  +other functions to reference the the same group of values.
   
   =item C<val_cb_t>
   
  -Callback to be used B<var_apply>().
  +Function data type for the callback to be used with B<var_apply>().
   
   =item C<val_rc_t>
   
  -Code returned by every function. See C<API_CONSTANTS> C<VAL_OK> and
  +Data type returned by every function. See B<API CONSTANTS> C<VAL_OK> and
   C<VAL_ERR_>I<ID>.
   
   =back
  @@ -164,78 +160,78 @@
   
   =item val_rc_t B<val_create>(val_t **I<pval>);
   
  -Creates an I<val> and updates the given pointer to reference it.
  +Creates a new value structure and updates the given pointer to reference it.
   
   =item val_rc_t B<val_destroy>(val_t *I<val>);
   
  -Destroys an I<val>, freeing up memory.
  +Destroys a I<val> structure.
   
   =item val_rc_t B<val_reg>(val_t *I<val>, const char *I<name>, int I<type>, const char *I<desc>, void *I<storage>);
   
  -Registers a variable I<name> using I<type> in I<val>. An optional description
  -or NULL can be passed through I<desc> which can be queried through
  -B<val_query>() and is also passed to the callback of B<val_apply>(). The value
  -that belongs to the given I<name> is expected to be found at I<storage>.
  -Passing NULL as I<storage> will create an inline data store in I<val> so it
  -can only be access through B<val_get>(), B<val_set>() or after the actual
  -storage address was queried using B<val_query>().
  +Registers a value under I<name> of type I<type> in I<val>. An optional
  +description or C<NULL> can be passed through I<desc> which can be
  +queried through B<val_query>() and is also passed to the callback of
  +B<val_apply>(). The value that belongs to the given I<name> is expected
  +to be found at I<storage>. Passing C<NULL> as I<storage> will create
  +an internal data storage in I<val> so it can only be access through
  +B<val_get>(), B<val_set>() or after the actual storage address was
  +queried using B<val_query>().
   
   =item val_rc_t B<val_unreg>(val_t *I<val>, const char *I<name>);
   
  -Unregisters a variable I<name> in I<val>.
  +Unregisters the value under I<name> in I<val>.
   
   =item val_rc_t B<val_query>(val_t *I<val>, const char *I<name>, int *I<ptype>, char **I<pdesc>, void **I<pstorage>);
   
  -Queries a variable I<name> in I<val> and returns it's type, description and
  +Queries a value I<name> in I<val> and returns its type, description and
   storage address. All of I<ptype>, I<pdesc> and I<pstorage> are optional and
  -NULL can be passed in if this information is not needed. Passing NULL to all
  -query result pointers just checks for existence of I<name>.
  +C<NULL> can be passed in if this information is not needed. Passing C<NULL> to
  +all query result pointers just checks for existence of the value I<name> in
  +I<val>.
   
   =item val_rc_t B<val_set>(val_t *I<val>, const char *I<name>, ...);
   
  -Sets the value of variable I<name> in I<val> to the data passed in as vararg.
  -Unless the actual storage address was queried using B<val_query>() this is
  -mandatory for inline data. Usually not the value but a pointer to it is stored
  -to the value can be modified without notice to the library.
  +Sets the value I<name> in I<val> to the data passed in as the variable
  +argument (expected to be of the I<type> specified at B<val_reg>() time).
  +Unless the actual storage address was queried using B<val_query>() this
  +operation is mandatory for internally stored data. If external storage
  +is used, not the value but a pointer to it is stored in the library, so
  +the value is allowed to be be modified without notice to the library.
   
   =item val_rc_t B<val_get>(val_t *I<val>, const char *I<name>, ...);
   
  -Gets the value of variable I<name> in I<val> and stores it whereever the
  -passed vararg points to.
  +Gets the value I<name> in I<val> and stores it whereever the passed variable
  +argument points to. The storage location is expected to be of the I<type>
  +specified at B<val_reg>() time.
   
   =item val_rc_t B<val_vset>(val_t *I<val>, const char *I<name>, va_list I<ap>);
   
  -Like B<val_set>() but takes a C<va_list> as input to allow recursive
  -execution. Acutally, B<val_set>() ist just a wrapper around
  -B<val_vset>().
  +Exactly like B<val_set>() but uses a C<va_list>.
   
   =item val_rc_t B<val_vget>(val_t *I<val>, const char *I<name>, va_list I<ap>);
   
  -Like B<val_get>() but takes a C<va_list> as input to allow recursive
  -execution. Acutally, B<val_get>() ist just a wrapper around
  -B<val_vget>().
  +Exactly like B<val_get>() but uses a C<va_list>.
   
   =item val_rc_t B<val_apply>(val_t *I<val>, const char *I<name>, int I<depth>, val_cb_t I<cb>, void *I<ctx>);
   
  -Iterates through all elements of I<val>, starting with I<name> which can be
  -either a data store or I<val> reference, down to a given recursion I<depth>.
  -When I<name> is set to the empty string the search starts immediately at
  -I<val>.  For every element, the callback I<cb>() is executed and a context
  -I<ctx> is passed to it along with other information described below.
  -
  -=item val_rc_t (*)(void *I<ctx>, const char *I<name>, int I<type>, const char *I<desc>, void *I<data>)
  -
  -Callback executed by B<val_apply>() for each element being processed. The
  -context I<ctx> input to B<val_apply>() is passed to the callback verbatim. The
  -I<name> is the structured name relative to the I<val> passed to
  -B<val_apply>(), I<type> signals the type of value I<data> points to and
  -I<desc> is a text which was optionally passed to B<val_reg>().
  +Iterates over all values in I<val>, starting with I<name>, which can be
  +either a data storage or I<val_t> reference, down to a given recursion
  +I<depth>. If I<name> is set to the empty string the search starts
  +immediately at I<val>. For every value, the callback I<cb>() is executed.
  +The callback has to be a function with the following prototype:
  +
  +val_rc_t cb(void *I<ctx>, const char *I<name>, int I<type>, const char *I<desc>, void *I<storage>);
  +
  +The I<ctx> is the passed-through context I<ctx> of B<val_apply>().
  +The I<name> is the structured name relative to the I<val> passed to
  +B<val_apply>(), I<type> signals the type of value I<storage> points to
  +and I<desc> is the text which was optionally passed to B<val_reg>().
   
   =back
   
   =head1 SEE ALSO
   
  -OSSP var.
  +B<OSSP var> (Variable Expansion Library)
   
   =head1 EXAMPLES
   
  @@ -349,8 +345,8 @@
   
   =head1 AUTHORS
   
  - Thomas Lotterer
  - Ralf S. Engelschall
  + Thomas Lotterer     <thomas.lotterer@cw.com>
  + Ralf S. Engelschall <rse@engelschall.com>
   
   =cut
   

From ossp-cvs-owner@ossp.org  Thu Jan 17 16:47:11 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1C412764D1; Thu, 17 Jan 2002 16:47:10 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc 00TODO Makefile.am autogen.sh configure.in rc....
Message-Id: <20020117154710.1C412764D1@mail.ossp.org>
Date: Thu, 17 Jan 2002 16:47:10 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   17-Jan-2002 16:47:10
  Branch: HEAD                             Handle: 2002011715471000

  Modified files:
    ossp-pkg/rc             00TODO Makefile.am autogen.sh configure.in rc.pod

  Log:
    Documentation and small configuration changes.

  Summary:
    Revision    Changes     Path
    1.4         +1  -0      ossp-pkg/rc/00TODO
    1.3         +11 -3      ossp-pkg/rc/Makefile.am
    1.4         +54 -2      ossp-pkg/rc/autogen.sh
    1.3         +4  -2      ossp-pkg/rc/configure.in
    1.3         +65 -0      ossp-pkg/rc/rc.pod
  ____________________________________________________________________________

  Index: ossp-pkg/rc/00TODO
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 00TODO
  --- ossp-pkg/rc/00TODO	8 Jan 2002 15:49:02 -0000	1.3
  +++ ossp-pkg/rc/00TODO	17 Jan 2002 15:47:10 -0000	1.4
  @@ -6,6 +6,7 @@
   
   Must do
     Translate rc bourne shell script to ANSI C.
  +  Convert from autogen to devtool for conformance with team standards.
     If a variable is defined for which no default exists, warn user (Scholli.)
     Avoid a silent failure when giving non-existent run commands (Marcus.)
   
  Index: ossp-pkg/rc/Makefile.am
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 Makefile.am
  --- ossp-pkg/rc/Makefile.am	10 Jan 2002 20:05:34 -0000	1.2
  +++ ossp-pkg/rc/Makefile.am	17 Jan 2002 15:47:10 -0000	1.3
  @@ -1,4 +1,12 @@
  -bin_PROGRAMS = rc
  -rc_SOURCES = rc_p.h rc.h rc.c
  +bin_PROGRAMS    = rc
  +rc_SOURCES      = rc.c
  +noinst_HEADERS  =           \
  +                  rc_p.h    \
  +                  rc.h
   
  -EXTRA_DIST = autogen.sh AUTHORS TODO README configure
  +EXTRA_DIST      =           \
  +                  autogen.sh\
  +                  AUTHORS   \
  +                  TODO      \
  +                  README    \
  +                  configure
  Index: ossp-pkg/rc/autogen.sh
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 autogen.sh
  --- ossp-pkg/rc/autogen.sh	10 Jan 2002 20:05:34 -0000	1.3
  +++ ossp-pkg/rc/autogen.sh	17 Jan 2002 15:47:10 -0000	1.4
  @@ -1,6 +1,58 @@
   #!/bin/sh
   
  -aclocal
  +# Test for libtool
  +(grep "^AM_PROG_LIBTOOL" configure.in >/dev/null) && {
  +  (libtool --version) < /dev/null > /dev/null 2>&1 || {
  +    echo
  +    echo "Attenzione! You don't have \`libtool'."
  +    echo "You can get it from the GNU FTP site."
  +    DIE=1
  +    NO_LIBTOOL=yes
  +  }
  +}
  +
  +# Test for autoconf
  +(autoconf --version) < /dev/null > /dev/null 2>&1 || {
  +    echo
  +    echo "Attenzione! You don't have \`autoconf'."
  +    echo "You can get it from the GNU FTP site."
  +    NO_AUTOCONF=yes
  +  DIE=1
  +}
  +
  +# Test for automake
  +(automake --version) < /dev/null > /dev/null 2>&1 || {
  +    echo
  +    echo "Attenzione! You don't have \`automake'."
  +    echo "You can get it from the GNU FTP site."
  +    DIE=1
  +    NO_AUTOMAKE=yes
  +}
  +
  +
  +# Don't test for aclocal if automake is not there
  +test -n "$NO_AUTOMAKE" || (aclocal --version) < /dev/null > /dev/null 2>&1 || {
  +    echo
  +    echo "Attenzione! You don't have \`aclocal'."
  +    echo "Try updating your \`automake' to get it."
  +    NO_LIBTOOL=yes
  +    DIE=1
  +}
  +
  +if test "$DIE" -eq 1; then
  +    echo "Build configuration broken due to one ore more failures."
  +    echo "Exiting..."
  +    exit 1
  +fi
  +
  +# Run build tools if no errors were found
  +libtoolize --force --copy --automake
  +aclocal -I /usr/local/share/aclocal
   autoheader
  -automake --add-missing --gnu
  +automake --add-missing --copy --gnu
   autoconf
  +
  +# Bonehead user instructions to finish up
  +echo "To build this now, you need to do two more things."
  +echo "First, type \`configure' to configure the program."
  +echo "Then, type \`make' to compile the program."
  Index: ossp-pkg/rc/configure.in
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 configure.in
  --- ossp-pkg/rc/configure.in	10 Jan 2002 20:05:35 -0000	1.2
  +++ ossp-pkg/rc/configure.in	17 Jan 2002 15:47:10 -0000	1.3
  @@ -38,15 +38,17 @@
   AM_CONFIG_HEADER(config.h)
   AC_LANG_C
   
  -dnl Checks for programs
  +dnl Checks requirements
   AC_PROG_CC
   AM_PROG_LIBTOOL
  +AM_PROG_CC_STDC
  +AC_HEADER_STDC
   AC_PROG_INSTALL
   
   dnl Make all the necessary Makefiles
   AC_OUTPUT(Makefile)
   
  -dnl Checking existence
  +dnl Remove me
   AC_PATH_PROG(FLEX, flex, true)
   AC_CHECK_LIB(nsl, gethostname)
   AC_CHECK_LIB(socket, accept)
  Index: ossp-pkg/rc/rc.pod
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 rc.pod
  --- ossp-pkg/rc/rc.pod	6 Jan 2002 12:40:50 -0000	1.2
  +++ ossp-pkg/rc/rc.pod	17 Jan 2002 15:47:10 -0000	1.3
  @@ -86,6 +86,10 @@
   [B<-h>|B<--help>]
   [B<-V>|B<--version>] 
   
  +=head1 DESCRIPTION
  +
  +OSSP rc is a run command processor.
  +
   =head1 PARAMETER OPTIONS
   
   All these options have reasonable builtin defaults by can be used to
  @@ -186,5 +190,66 @@
   Prints the B<rc> version and copyright information and exits immediately.
   
   =back
  +
  +=head1 RETURN VALUE
  +
  +Will return an error every single time ;-)
  +
  +=head1 EXAMPLES
  +
  +/myetc/rc start sshd
  +/etc/rc close docview primary
  +/sfw/etc/rc restart lmtp2nntp
  +/cw/etc/rc restart apache
  +
  +=head1 ENVIRONMENT
  +
  +=head1 FILES
  +
  +rc.conf
  +
  +=head1 SEE ALSO
  +
  +OSSP rc integrates concepts taken from other run command architectures. For
  +more information, inspect the /etc/rc structures provided by FreeBSD, Solaris,
  +and Red Hat distributions.
  +
  +biff(1), bagg(1), honk(1), gonk(1), and quatch(1).
  +
  +=head1 NOTES
  +
  +=head1 WARNINGS
  +
  +=head1 DIAGNOSTICS
  +
  +Rc will print out error messages to stderr. The messages can be used to
  +diagnose possible sources of failure of the chosen command, or even within the
  +run command structure itself. FIXME! Marcus Bemerkung. The possible errors
  +observed include the following.
  +
  +=over 4
  +
  +OSSP rc: The ice cream is too hot
  +Possible solution: This error happens alot.
  +
  +OSSP rc: The hot chocolate has a fly in it
  +Possible solution: Just take the fly out and drink the coffee.
  +
  +=back 4
  +
  +=head1 BUGS
  +
  +=head1 RESTRICTIONS
  +
  +Bugs we don't plan to fix include washing out the bathtub.
  +
  +=head1 AUTHORS
  +
  +Ralf S. Engelschall
  +Michael Schloh von Bennewitz
  +
  +=head1 HISTORY
  +
  +Part of the OpenPKG distribution. Had its start in OpenPKG development.
   
   =cut

From ossp-cvs-owner@ossp.org  Thu Jan 17 18:01:56 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2BDBF764D1; Thu, 17 Jan 2002 18:01:56 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp Makefile.in lmtp2nntp_config.c lmtp2nnt...
Message-Id: <20020117170156.2BDBF764D1@mail.ossp.org>
Date: Thu, 17 Jan 2002 18:01:56 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   17-Jan-2002 18:01:56
  Branch: HEAD                             Handle: 2002011717015500

  Modified files:
    ossp-pkg/lmtp2nntp      Makefile.in lmtp2nntp_config.c lmtp2nntp_config.h
                            lmtp2nntp_global.h lmtp2nntp_main.c

  Log:
    flush weekly work

  Summary:
    Revision    Changes     Path
    1.40        +12 -3      ossp-pkg/lmtp2nntp/Makefile.in
    1.9         +186 -55    ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.3         +40 -28     ossp-pkg/lmtp2nntp/lmtp2nntp_config.h
    1.3         +5  -0      ossp-pkg/lmtp2nntp/lmtp2nntp_global.h
    1.6         +7  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.39 -r1.40 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	16 Jan 2002 14:22:14 -0000	1.39
  +++ ossp-pkg/lmtp2nntp/Makefile.in	17 Jan 2002 17:01:55 -0000	1.40
  @@ -44,9 +44,9 @@
   POD2MAN     = pod2man
   
   PROG = lmtp2nntp
  -HDRS = lmtp2nntp_global.h lmtp2nntp_daemon.h lmtp2nntp_lmtp.h lmtp2nntp_nntp.h lmtp2nntp_argz.h lmtp2nntp_shpat.h lmtp2nntp_msg.h lmtp2nntp_popt.h lmtp2nntp_config.h lmtp2nntp_lh.h
  -SRCS = lmtp2nntp_main.c   lmtp2nntp_daemon.c lmtp2nntp_lmtp.c lmtp2nntp_nntp.c lmtp2nntp_argz.c lmtp2nntp_shpat.c lmtp2nntp_msg.c lmtp2nntp_popt.c lmtp2nntp_config.c lmtp2nntp_lh.c lmtp2nntp_version.c 
  -OBJS = lmtp2nntp_main.o   lmtp2nntp_daemon.o lmtp2nntp_lmtp.o lmtp2nntp_nntp.o lmtp2nntp_argz.o lmtp2nntp_shpat.o lmtp2nntp_msg.o lmtp2nntp_popt.o lmtp2nntp_config.o lmtp2nntp_lh.o lmtp2nntp_version.o
  +HDRS = lmtp2nntp_global.h lmtp2nntp_daemon.h lmtp2nntp_lmtp.h lmtp2nntp_nntp.h lmtp2nntp_argz.h lmtp2nntp_shpat.h lmtp2nntp_msg.h lmtp2nntp_popt.h lmtp2nntp_config.h 
  +SRCS = lmtp2nntp_main.c   lmtp2nntp_daemon.c lmtp2nntp_lmtp.c lmtp2nntp_nntp.c lmtp2nntp_argz.c lmtp2nntp_shpat.c lmtp2nntp_msg.c lmtp2nntp_popt.c lmtp2nntp_config.c lmtp2nntp_version.c 
  +OBJS = lmtp2nntp_main.o   lmtp2nntp_daemon.o lmtp2nntp_lmtp.o lmtp2nntp_nntp.o lmtp2nntp_argz.o lmtp2nntp_shpat.o lmtp2nntp_msg.o lmtp2nntp_popt.o lmtp2nntp_config.o lmtp2nntp_version.o
   
   SUBDIRS = @SUBDIR_STR@ @SUBDIR_L2@ @SUBDIR_SA@ @SUBDIR_VAR@ @SUBDIR_VAL@
   
  @@ -128,3 +128,12 @@
   $(OBJS): Makefile
   
   #   AUTOMATICALLY GENERATED DEPENDENCY LIST - DO NOT EDIT
  +lmtp2nntp_main.o: lmtp2nntp_main.c lmtp2nntp_argz.h lmtp2nntp_shpat.h lmtp2nntp_daemon.h lmtp2nntp_popt.h lmtp2nntp_global.h config.h lmtp2nntp_config.h lmtp2nntp_lmtp.h lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_version.c
  +lmtp2nntp_daemon.o: lmtp2nntp_daemon.c config.h lmtp2nntp_daemon.h
  +lmtp2nntp_lmtp.o: lmtp2nntp_lmtp.c lmtp2nntp_lmtp.h config.h
  +lmtp2nntp_nntp.o: lmtp2nntp_nntp.c lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_global.h config.h
  +lmtp2nntp_argz.o: lmtp2nntp_argz.c lmtp2nntp_argz.h config.h
  +lmtp2nntp_shpat.o: lmtp2nntp_shpat.c config.h lmtp2nntp_shpat.h
  +lmtp2nntp_msg.o: lmtp2nntp_msg.c lmtp2nntp_msg.h lmtp2nntp_global.h config.h lmtp2nntp_argz.h lmtp2nntp_popt.o: lmtp2nntp_popt.c config.h lmtp2nntp_popt.h
  +lmtp2nntp_config.o: lmtp2nntp_config.c lmtp2nntp_popt.h lmtp2nntp_global.h config.h lmtp2nntp_config.h lmtp2nntp_lmtp.h lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_version.c
  +lmtp2nntp_version.o: lmtp2nntp_version.c lmtp2nntp_version.c
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	16 Jan 2002 14:22:14 -0000	1.8
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	17 Jan 2002 17:01:55 -0000	1.9
  @@ -21,35 +21,41 @@
   **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
   **  USA, or contact the OSSP project <ossp@ossp.org>.
   **
  -**  lmtp2nntp.c: LMTP to NNTP configuration parsing
  +**  FIXME lmtp2nntp_config.c: LMTP to NNTP configuration parsing
   */
   
   #include <stdlib.h>
   #include <stdio.h>
   #include <sys/stat.h>
  -// #include <unistd.h>
  -// #include <errno.h>
  -// #include <string.h>
  -// #include <fcntl.h>
  -// #include <sys/utsname.h>
  -// #include <sys/time.h>
  -// #include <sys/types.h>
  -// #include <sys/wait.h>
  -// #include <sys/stat.h>
  -// #include <signal.h>
  -// #include <pwd.h>
  +#if 0
  +#include <unistd.h>
  +#include <errno.h>
  +#include <string.h>
  +#include <fcntl.h>
  +#include <sys/utsname.h>
  +#include <sys/time.h>
  +#include <sys/types.h>
  +#include <sys/wait.h>
  +#include <sys/stat.h>
  +#include <signal.h>
  +#include <pwd.h>
  +#endif
   
   /* third party (included) */
  -// #include "lmtp2nntp_argz.h"
  -// #include "lmtp2nntp_shpat.h"
  -// #include "lmtp2nntp_daemon.h"
  +#if 0
  +#include "lmtp2nntp_argz.h"
  +#include "lmtp2nntp_shpat.h"
  +#include "lmtp2nntp_daemon.h"
  +#endif
   #include "lmtp2nntp_popt.h"
   #include "val.h"
   
   /* third party (linked in) */
   #include "str.h"
  -// #include "l2.h"
  -// #include "var.h"
  +#if 0
  +#include "l2.h"
  +#include "var.h"
  +#endif
   
   /* library version check (compile-time) */
   #define  L2_VERSION_HEX_REQ 0x001200
  @@ -95,13 +101,14 @@
   #define NUL '\0'
   #endif
   
  -void die(char *); //FIXME
  +void die(char *); /* FIXME */
   void die(char *msg)
   {
           printf("ERROR: %s\n", msg);
               exit(-1);
   }
   
  +#if 0
   static val_rc_t dumper(void *ctx, const char *name, int type, const char *desc, void *data)
   {
       switch (type) {
  @@ -145,6 +152,12 @@
       return VAL_OK;
   }
   
  +
  +
  +
  +    FIXME pass(optionconfig_t *o, int pass);
  +    /* pass=0 for preinitialization !? */
  +
   void dotconftest(int argc, char **argv) /*FIXME*/
   {
       popt_context poptCon;   /* context for parsing command-line options */
  @@ -210,10 +223,8 @@
           if ((rc = val_create(&v2)) != VAL_OK)
               die("val_create 2");
   
  -#if 0
           if ((rc = val_reg(v, "bar", VAL_TYPE_VAL, "bar variable", (void *)&v2)) != VAL_OK)
               die("val_reg 2");
  -#endif
           val_reg(v, "bar", VAL_TYPE_VAL, "bar variable", NULL);
           val_set(v, "bar", v2);
           if ((rc = val_get(v, "bar", &v3)) != VAL_OK)
  @@ -266,15 +277,15 @@
           if ((rc = val_set(v, "bar.double", 3.14159265358979)) != VAL_OK)
               die("val_set  for bar.double using inline data");
   
  -        // OK val_apply(v,  "", 9, dumper, "v" );
  -        // OK val_apply(v2, "", 9, dumper, "v2");
  -        // OK val_apply(v,  "", 0, dumper, "v" );
  -        // OK val_apply(v,  "bar", 1, dumper, "v" );
  -        // OK val_apply(v2,  "", 0, dumper, "v" );
  -        // OK val_apply(v,  "", 1, dumper, "v" );
  -        // OK val_apply(v,  "foo", 0, dumper, "v" );
  -        // OK val_apply(v2,  "char", 2, dumper, "v" );
  -        // OK val_apply(v,  "bar.char", 2, dumper, "v" );
  +        OK val_apply(v,  "", 9, dumper, "v" );
  +        OK val_apply(v2, "", 9, dumper, "v2");
  +        OK val_apply(v,  "", 0, dumper, "v" );
  +        OK val_apply(v,  "bar", 1, dumper, "v" );
  +        OK val_apply(v2,  "", 0, dumper, "v" );
  +        OK val_apply(v,  "", 1, dumper, "v" );
  +        OK val_apply(v,  "foo", 0, dumper, "v" );
  +        OK val_apply(v2,  "char", 2, dumper, "v" );
  +        OK val_apply(v,  "bar.char", 2, dumper, "v" );
   
           if ((rc = val_destroy(v2)) != VAL_OK)
               die("val_destroy 2");
  @@ -318,27 +329,6 @@
   human-readable format. Dazu informationen fuer help.
    */
   
  -/* Braindump
  -
  -    fuer var
  -
  -ich brauche eine struktur, aus der man ersehen kann, welche variablen es gibt. 
  -    {
  -        struct "system.uname.sysname",  varstring, 
  -        struct "system.uname.nodename", 
  -        struct "system.uname.release", 
  -        struct "system.uname.version", 
  -        struct "system.uname.machine", 
  -        
  -        <<< ctx->progname = strdup(argv[0]);
  -        <<< foo = ctx->progname;
  -
  -        >>> rc = varreg("main.progname", &ctx->progname);
  -        >>> rc = varset("main.progname", strdup(argv[0])); //equivalent to ctx->progname = strdup(argv[0]);
  -        >>> rc = varget("main.progname", &foo);            //equivalent to foo = ctx->progname
  -    }
  - */
  -
       {
           const char *filename = "example.conf";
           struct stat sb;
  @@ -356,7 +346,7 @@
           if (close(fd) == -1)
               die("close");
       }
  -    //FIXME printf("DEBUG: *** 1 *** file as it was just read in ***\n%s***\n", cpBuf);
  +    printf("DEBUG: *** 1 *** file as it was just read in ***\n%s***\n", cpBuf);
   
       {
           char *cpI;  /* pointer to next character to be read */
  @@ -396,22 +386,22 @@
                       if (!eline) { /* process logical line unless it's empty */
                           *(cpO-1) = NUL;
                           if (lline == (pline-1))
  -                            ;//printf("DEBUG: line[%3d] = ***%s***\n", lline, cpL);
  +                            printf("DEBUG: line[%3d] = ***%s***\n", lline, cpL);
                           else
  -                            ;//printf("DEBUG: [%3d-%3d] = ***%s***\n", lline, pline-1, cpL);
  +                            printf("DEBUG: [%3d-%3d] = ***%s***\n", lline, pline-1, cpL);
                           {
                               char *cp = cpL;
                               char *command;
                               char *value;
   
                               if ((command = str_token(&cp, " \t", "\"'", "#", STR_STRIPQUOTES|STR_BACKSLASHESC)) == NULL)
  -                                ;//printf("DEBUG: no command - comment only\n");
  +                                printf("DEBUG: no command - comment only\n");
                               else {
                                   printf("DEBUG:   command = ***%s***\n", command);
                                   if ((value = str_token(&cp, " \t", "\"'", "#", STR_STRIPQUOTES|STR_BACKSLASHESC)) == NULL)
                                       printf("DEBUG: no value - section\n");
                                   else {
  -                                    ;//while(isspace((int)*value)) value++;
  +                                    while(isspace((int)*value)) value++;
                                       printf("DEBUG:     value = ***%s***\n", value);
                                   }
                               }
  @@ -426,4 +416,145 @@
           }
       }
   }
  +#endif
  +
  +typedef enum {
  +    OPT_FLAG,
  +    OPT_SINGLE,
  +    OPT_MULTI
  +} optiontype_t;
  +
  +typedef void (*optionloop_cb_t)(void);
  +
  +struct optionconfig_s;
  +typedef struct optionconfig_s optionconfig_t;
  +struct optionconfig_s {
  +    optionconfig_t *next;           /* cleanup chain for destroy */
  +                    /**/
  +    char               *longname;       /* the long name (optional if shortname given) */
  +    char                shortname;      /* the short name (optional if longname given) */
  +    char               *descrip;        /* description for autohelp */
  +    char               *argdescrip;     /* argument description for autohelp */
  +    optiontype_t        type;           /* OPT_FLAG, OPT_SINGLE, OPT_MULTI */
  +    optionloop_cb_t    *cb;             /* callback for first iteration - syntax check and include */
  +    void               *cbctx;          /* context for pass1 */
  +    void               *pass1default;   /* default for pass1 */
  +    val_t              *val;            /* val we are registered under */
  +                    /**/
  +    int             number;         /* number of this option for popt */
  +    union {                         /* option data as read from configuration */
  +        int f;                      /* OPT_FLAG */
  +        char *s;                    /* OPT_SINGLE */
  +        char **m;                   /* OPT_MULTI */
  +    } data;
  +};
   
  +static void stdsyntax(void)
  +{
  +    return;
  +}
  +
  +static void includeit(void)
  +{
  +    return;
  +}
  +
  +static void option_register(lmtp2nntp_option_t *o, char *longname, char shortname, optiontype_t type, optionloop_cb_t cb, char *cbctx, char *descrip, char *argdescrip)
  +{
  +    return;
  +}
  +
  +lmtp2nntp_option_rc_t option_create(lmtp2nntp_option_t **op)
  +{
  +    if (op == NULL)
  +        return OPTION_ERR_ARG;
  +
  +    if ((*op = (lmtp2nntp_option_t *)malloc(sizeof(lmtp2nntp_option_t))) == NULL)
  +        return OPTION_ERR_MEM;
  +    (*op)->childsmax = 0;
  +    (*op)->daemonize = 0;
  +    (*op)->kill = 0;
  +    (*op)->pidfile = 0;
  +    (*op)->acl.as = 0;
  +    (*op)->acl.az = NULL;
  +    (*op)->bind = NULL;
  +    (*op)->client = NULL;
  +    (*op)->destination.as = 0;
  +    (*op)->destination.az = NULL;
  +    (*op)->groupmode = NULL;
  +    (*op)->headervalue.as = 0;
  +    (*op)->headervalue.az = NULL;
  +    (*op)->include.as = 0;
  +    (*op)->include.az = NULL;
  +    (*op)->size = 0;
  +    (*op)->timeoutlmtpaccept = 0;
  +    (*op)->timeoutlmtpread = 0;
  +    (*op)->timeoutlmtpwrite = 0;
  +    (*op)->timeoutnntpconnect = 0;
  +    (*op)->timeoutnntpread = 0;
  +    (*op)->timeoutnntpwrite = 0;
  +    (*op)->mailfrom = NULL;
  +    (*op)->nodename = NULL;
  +    (*op)->operationmode = NULL;
  +    (*op)->l2spec = NULL;
  +    (*op)->uid = NULL;
  +    (*op)->restrictheader.as = 0;
  +    (*op)->restrictheader.az = NULL;
  +    (*op)->newsgroup.as = 0;
  +    (*op)->newsgroup.az = NULL;
  +                    /**/
  +    (*op)->vo = NULL;
  +    if (val_create(&((*op)->vo)) != VAL_OK) {
  +        free(*op);
  +        return OPTION_ERR_VAL;
  +    }
  +    return OPTION_OK;
  +}
  +
  +lmtp2nntp_option_rc_t option_parse(lmtp2nntp_option_t *o, int argc, char **argv)
  +{
  +    if (o == NULL)
  +        return OPTION_ERR_ARG;
  +
  +    option_register(o, "childsmax",           'C', OPT_SINGLE, stdsyntax, "[0-9]{,5}",           "foo", "childsmax" );
  +    option_register(o, "daemonize",           'D', OPT_FLAG,   NULL,      NULL,                  "foo", NULL );
  +    option_register(o, "kill",                'K', OPT_FLAG,   NULL,      NULL,                  "foo", NULL );
  +    option_register(o, "pidfile",             'P', OPT_SINGLE, stdsyntax, ".{,255}",             "foo", "pidfile" );
  +    option_register(o, "veryverbose",         'V', OPT_FLAG,   NULL,      NULL,                  "foo", NULL );
  +    option_register(o, "acl",                 'a', OPT_MULTI,  stdsyntax, "[0-9.](/[0-9]2)?",    "foo", "addr[/mask]" );
  +    option_register(o, "bind",                'b', OPT_SINGLE, stdsyntax, ".*",                  "foo", "addr[:port]|-|path[:perms]" );
  +    option_register(o, "client",              'c', OPT_SINGLE, stdsyntax, ".*",                  "foo", "addr[:port]" );
  +    option_register(o, "destination",         'd', OPT_MULTI,  stdsyntax, ".*",                  "foo", "addr[:port]" );
  +    option_register(o, "groupmode",           'g', OPT_SINGLE, stdsyntax, ".*",                  "foo", "groupmode" );
  +    option_register(o, "headervalue",         'h', OPT_MULTI,  stdsyntax, ".*",                  "foo", "header: value" );
  +    option_register(o, "include",             'i', OPT_MULTI,  includeit, ".*",                  "foo", "configfile" );
  +    option_register(o, "size",                's', OPT_SINGLE, stdsyntax, ".*",                  "foo", "bytes" );
  +    option_register(o, "timeoutlmtpaccept",   NUL, OPT_MULTI,  stdsyntax, ".*",                  "foo", "sec" );
  +    option_register(o, "timeoutlmtpread",     NUL, OPT_MULTI,  stdsyntax, ".*",                  "foo", "sec" );
  +    option_register(o, "timeoutlmtpwrite",    NUL, OPT_MULTI,  stdsyntax, ".*",                  "foo", "sec" );
  +    option_register(o, "timeoutnntpconnect",  NUL, OPT_MULTI,  stdsyntax, ".*",                  "foo", "sec" );
  +    option_register(o, "timeoutnntpread",     NUL, OPT_MULTI,  stdsyntax, ".*",                  "foo", "sec" );
  +    option_register(o, "timeoutnntpwrite",    NUL, OPT_MULTI,  stdsyntax, ".*",                  "foo", "sec" );
  +    option_register(o, "mailfrom",            'm', OPT_SINGLE, stdsyntax, ".*",                  "foo", "regex" );
  +    option_register(o, "nodename",            'n', OPT_SINGLE, stdsyntax, ".*",                  "foo", "nodename" );
  +    option_register(o, "operationmode",       'o', OPT_SINGLE, stdsyntax, ".*",                  "foo", "post|feed" );
  +    option_register(o, "l2spec",              'l', OPT_SINGLE, stdsyntax, ".*",                  "foo", "spec" );
  +    option_register(o, "uid",                 'u', OPT_SINGLE, stdsyntax, ".*",                  "foo", "number|name" );
  +    option_register(o, "restrictheader",      'r', OPT_MULTI,  stdsyntax, ".*",                  "foo", "regex" );
  +    option_register(o, "newsgroup",           NUL, OPT_MULTI,  stdsyntax, ".*",                  "foo", "newsgroup");
  +
  +    return OPTION_OK;
  +}
  +
  +lmtp2nntp_option_rc_t option_destroy(lmtp2nntp_option_t *o)
  +{
  +    if (o == NULL)
  +        return OPTION_ERR_ARG;
  +
  +    if (o->vo != NULL)
  +        val_destroy(o->vo);
  +
  +    free(o);
  +
  +    return OPTION_OK;
  +}
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 lmtp2nntp_config.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.h	14 Jan 2002 12:23:21 -0000	1.2
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.h	17 Jan 2002 17:01:55 -0000	1.3
  @@ -21,38 +21,50 @@
   **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
   **  USA, or contact the OSSP project <ossp@ossp.org>.
   **
  -**  lmtp2nntp.c: LMTP to NNTP configuration parsing
  +**  FIXME lmtp2nntp_option.h: LMTP to NNTP configuration parsing
   */
   
   #include "lmtp2nntp_global.h"
  -void dotconftest(int, char **); //FIXME
  +#include "val.h"
   
   typedef struct {
  -    int             option_childsmax;
  +    int         childsmax;
  +    int         daemonize;
  +    int         kill;
  +    char       *pidfile;
  +    argz_t      acl;
  +    char       *bind;
  +    char       *client;
  +    argz_t      destination;
  +    char       *groupmode;
  +    argz_t      headervalue;
  +    argz_t      include;
  +    char       *size;
  +    int        *timeoutlmtpaccept;
  +    int        *timeoutlmtpread;
  +    int        *timeoutlmtpwrite;
  +    int        *timeoutnntpconnect;
  +    int        *timeoutnntpread;
  +    int        *timeoutnntpwrite;
  +    char       *mailfrom;
  +    char       *nodename;
  +    char       *operationmode;
  +    char       *l2spec;
  +    char       *uid;
  +    argz_t      restrictheader;
  +    argz_t      newsgroup;
  +                    /**/
  +    val_t      *vo;
   
  -    char           *option_logfile;
  -    int             option_groupmode;
  -    int             option_operationmode;
  -    char           *option_operationmodefakestatus;
  -    char           *option_operationmodefakedsn;
  -    int             option_maxmessagesize;
  -    char           *option_azHeaderValuePairs;
  -    size_t          option_asHeaderValuePairs;
  -    int             option_timeout_lmtp_accept;
  -    int             option_timeout_lmtp_read;
  -    int             option_timeout_lmtp_write;
  -    int             option_timeout_nntp_connect;
  -    int             option_timeout_nntp_read;
  -    int             option_timeout_nntp_write;
  -    char           *option_mailfrom;
  -    char           *option_restrictheader;
  -    unsigned int    option_levelmask;
  -    char           *option_pidfile;
  -    int             option_killflag;
  -    uid_t           option_uid;
  -    int             option_daemon;
  -    int             option_aclc;
  -    //struct acl      option_acl[MAXACLS];
  -    int             option_veryverbose;
  -} lmtp2nntp_config_t;
  +} lmtp2nntp_option_t;
   
  +typedef enum {
  +    OPTION_OK,
  +    OPTION_ERR_ARG, /* invalid args passed into function */
  +    OPTION_ERR_MEM, /* out of memory */
  +    OPTION_ERR_VAL  /* libval failed */
  +} lmtp2nntp_option_rc_t;
  +
  +lmtp2nntp_option_rc_t option_create (lmtp2nntp_option_t **);
  +lmtp2nntp_option_rc_t option_parse  (lmtp2nntp_option_t *, int, char **);
  +lmtp2nntp_option_rc_t option_destroy(lmtp2nntp_option_t *);
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_global.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 lmtp2nntp_global.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_global.h	31 Dec 2001 15:15:36 -0000	1.2
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_global.h	17 Jan 2002 17:01:55 -0000	1.3
  @@ -49,4 +49,9 @@
   #define CU(returncode) STMT( rc = returncode; goto CUS; )
   #define VCU STMT( goto CUS; )
   
  +typedef struct {
  +    size_t  as;
  +    char   *az;
  +} argz_t;
  +
   #endif /* __LMTP2NNTP_H__ */
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	14 Jan 2002 12:23:21 -0000	1.5
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	17 Jan 2002 17:01:55 -0000	1.6
  @@ -559,7 +559,12 @@
           fprintf(stderr, "%s:Error: uname failed \"%s\"\n", ctx->progname, strerror(errno));
           CU(ERR_EXECUTION);
       }
  -dotconftest(argc, argv); return 0; //FIXME
  +
  +{
  +lmtp2nntp_option_t *o;
  +(void)option_create(&o); /* FIXME */
  +(void)option_parse(o, argc, argv); return 0;
  +}
   
       /*POD B<lmtp2nntp> */
   
  @@ -1338,6 +1343,7 @@
       if (ctx != NULL)
           free(ctx);
       str_parse(NULL, NULL);
  +    /*FIXME option_destroy(o); */
   
       return rc;
   }

From ossp-cvs-owner@ossp.org  Thu Jan 17 21:19:59 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 31D47764D1; Thu, 17 Jan 2002 21:19:59 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/act Makefile.in aclocal.m4 act_cfg.h.in act_test....
Message-Id: <20020117201959.31D47764D1@mail.ossp.org>
Date: Thu, 17 Jan 2002 21:19:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   17-Jan-2002 21:19:59
  Branch: HEAD                             Handle: 197001010100001011295197

  Added files:
    ossp-pkg/act            configure.ac devtool devtool.conf devtool.func
  Modified files:
    ossp-pkg/act            Makefile.in aclocal.m4 act_cfg.h.in act_test.c
  Removed files:
    ossp-pkg/act            configure configure.in shtool

  Log:
    - use devtool
    - remove generated files
    - upgrade to Autoconf 2.52

  Summary:
    Revision    Changes     Path
    1.6         +0  -12     ossp-pkg/act/Makefile.in
    1.2         +1  -1      ossp-pkg/act/aclocal.m4
    1.2         +44 -14     ossp-pkg/act/act_cfg.h.in
    1.4         +1  -0      ossp-pkg/act/act_test.c
    NONE        +0  -1628   ossp-pkg/act/configure
    1.1         +0  -0      ossp-pkg/act/configure.ac
    NONE        +0  -101    ossp-pkg/act/configure.in
    1.1         +47 -0      ossp-pkg/act/devtool
    1.1         +31 -0      ossp-pkg/act/devtool.conf
    1.1         +72 -0      ossp-pkg/act/devtool.func
    NONE        +0  -2837   ossp-pkg/act/shtool
  ____________________________________________________________________________

  Index: ossp-pkg/act/Makefile.in
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 Makefile.in
  --- ossp-pkg/act/Makefile.in	20 Aug 2000 14:46:26 -0000	1.5
  +++ ossp-pkg/act/Makefile.in	17 Jan 2002 20:19:57 -0000	1.6
  @@ -44,18 +44,6 @@
   	$(CC) -DACT_TEST -oact_hash_fct act_hash_fct.c -lm
   	./act_hash_fct
   
  -#   increase or update version information
  -new-version:
  -	@V="$(VERSION)"; \
  -	if [ ".$$V" != . ]; then \
  -		OPT="-s$$V"; \
  -	else \
  -		OPT="-e"; \
  -	fi; \
  -	$(_VERSION)
  -update-version:
  -	OPT="-s`$(SHTOOL) version -lc -dshort $(_VERSION_FILE)`" && $(_VERSION)
  -
   clean:
   	$(RM) $(PRE)
   	$(RM) $(LIB)
  Index: ossp-pkg/act/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 aclocal.m4
  --- ossp-pkg/act/aclocal.m4	12 Nov 1999 20:37:19 -0000	1.1.1.1
  +++ ossp-pkg/act/aclocal.m4	17 Jan 2002 20:19:57 -0000	1.2
  @@ -9,7 +9,7 @@
   dnl ##
   
   AC_DEFUN(AC_HEADLINE,[dnl
  -AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)dnl
  +AC_DIVERT_PUSH(NOTICE)dnl
   #   configuration header
   if test ".`echo dummy [$]@ | grep help`" = .; then
       #   bootstrapping shtool
  Index: ossp-pkg/act/act_cfg.h.in
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 act_cfg.h.in
  --- ossp-pkg/act/act_cfg.h.in	12 Nov 1999 20:37:20 -0000	1.1.1.1
  +++ ossp-pkg/act/act_cfg.h.in	17 Jan 2002 20:19:57 -0000	1.2
  @@ -1,25 +1,55 @@
  -/* act_cfg.h.in.  Generated automatically from configure.in by autoheader.  */
  +/* act_cfg.h.in.  Generated automatically from configure.ac by autoheader.  */
   
  -/* The number of bytes in a char.  */
  +/* Define if you have the <inttypes.h> header file. */
  +#undef HAVE_INTTYPES_H
  +
  +/* Define if you have the `memcmp' function. */
  +#undef HAVE_MEMCMP
  +
  +/* Define if you have the `memmove' function. */
  +#undef HAVE_MEMMOVE
  +
  +/* Define if you have the <memory.h> header file. */
  +#undef HAVE_MEMORY_H
  +
  +/* Define if you have the `memset' function. */
  +#undef HAVE_MEMSET
  +
  +/* Define if you have the <stdint.h> header file. */
  +#undef HAVE_STDINT_H
  +
  +/* Define if you have the <stdlib.h> header file. */
  +#undef HAVE_STDLIB_H
  +
  +/* Define if you have the <strings.h> header file. */
  +#undef HAVE_STRINGS_H
  +
  +/* Define if you have the <string.h> header file. */
  +#undef HAVE_STRING_H
  +
  +/* Define if you have the <sys/stat.h> header file. */
  +#undef HAVE_SYS_STAT_H
  +
  +/* Define if you have the <sys/types.h> header file. */
  +#undef HAVE_SYS_TYPES_H
  +
  +/* Define if you have the <unistd.h> header file. */
  +#undef HAVE_UNISTD_H
  +
  +/* The size of a `char', as computed by sizeof. */
   #undef SIZEOF_CHAR
   
  -/* The number of bytes in a int.  */
  +/* The size of a `int', as computed by sizeof. */
   #undef SIZEOF_INT
   
  -/* The number of bytes in a long.  */
  +/* The size of a `long', as computed by sizeof. */
   #undef SIZEOF_LONG
   
  -/* The number of bytes in a long long.  */
  +/* The size of a `long long', as computed by sizeof. */
   #undef SIZEOF_LONG_LONG
   
  -/* The number of bytes in a short.  */
  +/* The size of a `short', as computed by sizeof. */
   #undef SIZEOF_SHORT
   
  -/* Define if you have the memcmp function.  */
  -#undef HAVE_MEMCMP
  -
  -/* Define if you have the memmove function.  */
  -#undef HAVE_MEMMOVE
  -
  -/* Define if you have the memset function.  */
  -#undef HAVE_MEMSET
  +/* Define if you have the ANSI C header files. */
  +#undef STDC_HEADERS
  Index: ossp-pkg/act/act_test.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 act_test.c
  --- ossp-pkg/act/act_test.c	20 Aug 2000 13:57:53 -0000	1.3
  +++ ossp-pkg/act/act_test.c	17 Jan 2002 20:19:57 -0000	1.4
  @@ -1,5 +1,6 @@
   
   #include <stdio.h>
  +#include <string.h>
   
   #include "act_p.h"
   #include "act_hash.h"
    Index: ossp-pkg/act/configure.ac
  ============================================================
  $ cvs update -p -r1.1 configure.ac
  dnl ##
  dnl ##   Autoconf specification for ACT library
  dnl ##
  
  AC_PREREQ(2.12)dnl
  AC_REVISION($Revision: 1.1 $)
  
  AC_INIT(README)
  AC_HEADLINE(dnl
  OSSP act, Abstract Container Types, dnl
  ACT_VERSION, act_vers.c, dnl
  [Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>])
  AC_PREFIX_DEFAULT(/usr/local)
  AC_CONFIG_HEADER(act_cfg.h)
  
  AC_SET_MAKE
  AC_PROG_CC
  AC_PROG_CPP
  AC_CHECK_PROG(AR, ar, ar)
  AC_PROG_RANLIB
  
  AC_MSG_CHECKING(whether to build with debugging)
  AC_ARG_ENABLE(debug,dnl
  [  --enable-debug          build with debugging (default=no)],
  enable_debug="$enableval",
  if test ".$enable_debug" = .; then
      enable_debug=no
  fi
  )dnl
  if test ".$enable_debug" = .yes; then
      LDFLAGS="$LDFLAGS -g -ggdb3"
      CFLAGS="$CFLAGS -g -ggdb3"
      CFLAGS="$CFLAGS -pedantic"
      CFLAGS="$CFLAGS -Wall -Wshadow -Wpointer-arith -Wcast-align"
      CFLAGS="$CFLAGS -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline"
      CFLAGS="$CFLAGS -Wno-long-long"
  fi
  AC_MSG_RESULT([$enable_debug])
  
  AC_MSG_CHECKING(for compilation profile mode)
  AC_ARG_ENABLE(profile,dnl
  [  --enable-profile        build for profiling (default=no)],
  [dnl
  if test ".$ac_cv_prog_gcc" = ".no"; then
      AC_MSG_ERROR([profiling requires gcc and gprof])
  fi
  CFLAGS=`echo "$CFLAGS" | sed -e 's/-O2//g'`
  CFLAGS="$CFLAGS -O0 -pg"
  LDFLAGS="$LDFLAGS -pg"
  msg="enabled"
  ],[
  msg="disabled"
  ])dnl
  AC_MSG_RESULT([$msg])
  
  AC_HAVE_FUNCS(memset memmove memcmp)
  AC_CHECK_SIZEOF(char, 1)
  AC_CHECK_SIZEOF(short, 2)
  AC_CHECK_SIZEOF(int, 4)
  AC_CHECK_SIZEOF(long, 4)
  AC_CHECK_SIZEOF(long long, 8)
  
  HAVE_ACT_UINT8_T="#define HAVE_ACT_UINT8_T";
  HAVE_ACT_UINT16_T="#define HAVE_ACT_UINT16_T";
  HAVE_ACT_UINT32_T="#define HAVE_ACT_UINT32_T";
  HAVE_ACT_UINT64_T="#define HAVE_ACT_UINT64_T";
  HAVE_ACT_SIZE_T="#define HAVE_ACT_SIZE_T";
  AC_SUBST(HAVE_ACT_UINT8_T)
  AC_SUBST(HAVE_ACT_UINT16_T)
  AC_SUBST(HAVE_ACT_UINT32_T)
  AC_SUBST(HAVE_ACT_UINT64_T)
  AC_SUBST(HAVE_ACT_SIZE_T)
  ACT_UINT8_T="unsigned char";
  ACT_UINT16_T="unsigned short";
  ACT_UINT32_T="unsigned long";
  ACT_UINT64_T="unsigned long long";
  ACT_SIZE_T="unsigned int";
  AC_SUBST(ACT_UINT8_T)
  AC_SUBST(ACT_UINT16_T)
  AC_SUBST(ACT_UINT32_T)
  AC_SUBST(ACT_UINT64_T)
  AC_SUBST(ACT_SIZE_T)
  
  dnl AC_TRY_RUN([
  dnl #include <unistd.h>
  dnl #include <sys/types.h>
  dnl #include <stdio.h>
  dnl main()
  dnl {
      dnl long long n = 1;
      dnl if (sizeof(long long) >= 8)
         dnl  
      dnl exit(0)
  dnl }
  dnl ],
  
  AC_OUTPUT(dnl
  Makefile dnl
  act.h dnl
  )dnl
  
    Index: ossp-pkg/act/devtool
  ============================================================
  $ cvs update -p -r1.1 devtool
  #!/bin/sh
  ##
  ##  devtool -- Development Tool
  ##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  if [ $# -eq 0 ]; then
      echo "devtool:USAGE: devtool <command> [<arg> ...]" 1>&2
      exit 1
  fi
  
  cmd="$1"
  shift
  
  devtoolfunc="./devtool.func"
  
  if [ ! -f devtool.conf ]; then
      echo "devtool:ERROR: no devtool.conf in current directory" 1>&2
      exit 1
  fi
  
  cmdline=`grep "^%$cmd" devtool.conf`
  if [ ".$cmdline" = . ]; then
      echo "devtool:ERROR: command $cmd not found in devtool.conf" 1>&2
      exit 1
  fi
  
  if [ ".$TMPDIR" != . ]; then
      tmpdir="$TMPDIR"
  elif [ ".$TEMPDIR" != . ]; then
      tmpdir="$TEMPDIR"
  else
      tmpdir="/tmp"
  fi
  tmpfile="$tmpdir/rc.$$.tmp"
  
  rm -f $tmpfile
  touch $tmpfile
  echo ". $devtoolfunc" >>$tmpfile
  ( sed <devtool.conf -e "1,/^%common/d" -e '/^%.*/,$d'
    sed <devtool.conf -e "1,/^%$cmd/d" -e '/^%.*/,$d' ) |\
  sed -e 's;\([ 	]\)@\([a-zA-Z_][a-zA-Z0-9_]*\);\1devtool_\2;' >>$tmpfile
  
  sh $tmpfile "$@"
  
  rm -f $tmpfile >/dev/null 2>&1 || true
  
  Index: ossp-pkg/act/devtool.conf
  ============================================================
  $ cvs update -p -r1.1 devtool.conf
  ##
  ##  devtool.conf -- Development Tool Configuration
  ##
  
  %autogen
      @autogen shtool   1.5.4 "1.5.*" all
      @autogen libtool  1.4.2 "1.4*"
      @autogen autoconf 2.52  "2.5.*"
  
  %autoclean
      @autoclean shtool
      @autoclean libtool
      @autoclean autoconf
  
  %configure
      ./configure \
          --prefix=/tmp/act \
          --disable-shared \
          --enable-debug \
          "$@"
  
  %version
      ./shtool version -l c -n "OSSP act" -e act_vers.c
  
  %dist
      make distclean >/dev/null 2>&1
      ./shtool fixperm -v .
      V=`./shtool version -l c -d short act_vers.c`
      ./shtool tarball -o act-${V}.tar.gz -d act-${V} -u ossp -g ossp \
                       -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf' -c 'gzip --best' .
  
  Index: ossp-pkg/act/devtool.func
  ============================================================
  $ cvs update -p -r1.1 devtool.func
  ##
  ##  devtool.func -- Development Tool Functions
  ##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  devtool_require () {
      t="$1"; o="$2"; p="$3"; e="$4"; a="$5"
      v=`($t $o | head -1 | awk "{ print \\\$$p; }") 2>/dev/null`
      if [ ".$v" = . ]; then
          echo "devtool:ERROR: unable to determine version of $t" 1>&2
          exit 1
      fi
      case "$v" in
          $e )
              ;;
          $a )
              echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
              ;;
          * )
              echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
              exit 1
              ;;
      esac
      echo "$v"
  }
  
  devtool_autogen () {
      tool=$1
      shift
      case $tool in
          autoconf )
              autoconf_version=`devtool_require autoconf --version 4 "$1" "$2"`
              echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
              autoconf
              autoheader 2>&1 | grep -v "is unchanged"
              ;;
          libtool )
              libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
              echo "generating (GNU Libtool $libtoolize_version): ltmain.sh, libtool.m4, config.guess, config.sub"
              libtoolize --force --copy >/dev/null 2>&1
              cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
                  sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` libtool.m4
              ;;
          shtool )
              shtoolize_version=`devtool_require shtoolize -v 3 "$1" "$2"`
              echo "generating (GNU Shtool $shtoolize_version): shtool"
              shift
              shift
              shtoolize -q "$@"
              ;;
      esac
  }
  
  devtool_autoclean () {
      tool=$1
      shift
      case $tool in
          autoconf )
              echo "removing: configure config.h.in"
              rm -f configure config.h.in
              ;;
          libtool )
              echo "removing: ltmain.sh libtool.m4 config.guess config.sub"
              rm -f ltmain.sh libtool.m4 config.guess config.sub
              ;;
          shtool )
              echo "removing: shtool"
              rm -f shtool
              ;;
      esac
  }
  
  

From ossp-cvs-owner@ossp.org  Fri Jan 18 17:47:18 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D263F764E3; Fri, 18 Jan 2002 17:47:17 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc 00TODO devtool devtool.conf devtool.func
Message-Id: <20020118164717.D263F764E3@mail.ossp.org>
Date: Fri, 18 Jan 2002 17:47:17 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   18-Jan-2002 17:47:17
  Branch: HEAD                             Handle: 2002011816471700

  Added files:
    ossp-pkg/rc             devtool devtool.conf devtool.func
  Modified files:
    ossp-pkg/rc             00TODO

  Log:
    Give rc a devtool.

  Summary:
    Revision    Changes     Path
    1.5         +3  -1      ossp-pkg/rc/00TODO
    1.1         +46 -0      ossp-pkg/rc/devtool
    1.1         +28 -0      ossp-pkg/rc/devtool.conf
    1.1         +71 -0      ossp-pkg/rc/devtool.func
  ____________________________________________________________________________

  Index: ossp-pkg/rc/00TODO
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 00TODO
  --- ossp-pkg/rc/00TODO	17 Jan 2002 15:47:10 -0000	1.4
  +++ ossp-pkg/rc/00TODO	18 Jan 2002 16:47:17 -0000	1.5
  @@ -6,7 +6,9 @@
   
   Must do
     Translate rc bourne shell script to ANSI C.
  -  Convert from autogen to devtool for conformance with team standards.
  +  Finish man page. Start latex or Docbook guide.
  +  Remove autogen.sh after devtool is finished.
  +  Customize devtool.conf and devtool.func for rc and automake.
     If a variable is defined for which no default exists, warn user (Scholli.)
     Avoid a silent failure when giving non-existent run commands (Marcus.)
   
  Index: ossp-pkg/rc/devtool
  ============================================================
  $ cvs update -p -r1.1 devtool
  #! /bin/sh
  ##
  ##  devtool -- Development Tool
  ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  if [ $# -eq 0 ]; then
      echo "devtool:USAGE: devtool <command> [<arg> ...]" 1>&2
      exit 1
  fi
  
  cmd="$1"
  shift
  
  devtoolfunc="./devtool.func"
  
  if [ ! -f devtool.conf ]; then
      echo "devtool:ERROR: no devtool.conf in current directory" 1>&2
      exit 1
  fi
  
  cmdline=`grep "^%$cmd" devtool.conf`
  if [ ".$cmdline" = . ]; then
      echo "devtool:ERROR: command $cmd not found in devtool.conf" 1>&2
      exit 1
  fi
  
  if [ ".$TMPDIR" != . ]; then
      tmpdir="$TMPDIR"
  elif [ ".$TEMPDIR" != . ]; then
      tmpdir="$TEMPDIR"
  else
      tmpdir="/tmp"
  fi
  tmpfile="$tmpdir/rc.$$.tmp"
  
  rm -f $tmpfile
  touch $tmpfile
  echo ". $devtoolfunc" >>$tmpfile
  ( sed <devtool.conf -e "1,/^%common/d" -e '/^%.*/,$d'
    sed <devtool.conf -e "1,/^%$cmd/d" -e '/^%.*/,$d' ) |\
  sed -e 's;\([ 	]\)@\([a-zA-Z_][a-zA-Z0-9_]*\);\1devtool_\2;' >>$tmpfile
  
  sh $tmpfile "$@"
  
  rm -f $tmpfile >/dev/null 2>&1 || true
  Index: ossp-pkg/rc/devtool.conf
  ============================================================
  $ cvs update -p -r1.1 devtool.conf
  ##
  ##  devtool.conf -- Development Tool Configuration
  ##
  
  %autogen
      @autogen shtool   1.5.4 "1.5.*" all
      @autogen libtool  1.4.2 "1.4*"
      @autogen autoconf 2.52  "2.5.*"
  
  %autoclean
      @autoclean shtool
      @autoclean libtool
      @autoclean autoconf
  
  %configure
      ./configure \
          --prefix=/tmp/rc \
          "$@"
  
  %version
      ./shtool version -l txt -n "OSSP rc" -p "rc_" -e VERSION
  
  %dist
      make distclean >/dev/null 2>&1
      ./shtool fixperm -v .
      V=`./shtool version -l txt -d short VERSION`
      ./shtool tarball -o rc-${V}.tar.gz -d rc-${V} -u ossp -g ossp \
                       -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf' -c 'gzip --best' .
  Index: ossp-pkg/rc/devtool.func
  ============================================================
  $ cvs update -p -r1.1 devtool.func
  ##
  ##  devtool.func -- Development Tool Functions
  ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  devtool_require () {
      t="$1"; o="$2"; p="$3"; e="$4"; a="$5"
      v=`($t $o | head -1 | awk "{ print \\\$$p; }") 2>/dev/null`
      if [ ".$v" = . ]; then
          echo "devtool:ERROR: unable to determine version of $t" 1>&2
          exit 1
      fi
      case "$v" in
          $e )
              ;;
          $a )
              echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
              ;;
          * )
              echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
              exit 1
              ;;
      esac
      echo "$v"
  }
  
  devtool_autogen () {
      tool=$1
      shift
      case $tool in
          autoconf )
              autoconf_version=`devtool_require autoconf --version 4 "$1" "$2"`
              echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
              autoconf
              autoheader 2>&1 | grep -v "is unchanged"
              ;;
          libtool )
              libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
              echo "generating (GNU Libtool $libtoolize_version): ltmain.sh, libtool.m4, config.guess, config.sub"
              libtoolize --force --copy >/dev/null 2>&1
              cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
                  sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` libtool.m4
              ;;
          shtool )
              shtoolize_version=`devtool_require shtoolize -v 3 "$1" "$2"`
              echo "generating (GNU Shtool $shtoolize_version): shtool"
              shift
              shift
              shtoolize -q "$@"
              ;;
      esac
  }
  
  devtool_autoclean () {
      tool=$1
      shift
      case $tool in
          autoconf )
              echo "removing: configure config.h.in"
              rm -f configure config.h.in
              ;;
          libtool )
              echo "removing: ltmain.sh libtool.m4 config.guess config.sub"
              rm -f ltmain.sh libtool.m4 config.guess config.sub
              ;;
          shtool )
              echo "removing: shtool"
              rm -f shtool
              ;;
      esac
  }

From ossp-cvs-owner@ossp.org  Fri Jan 18 17:47:54 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 37EA0764E3; Fri, 18 Jan 2002 17:47:54 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.pod
Message-Id: <20020118164754.37EA0764E3@mail.ossp.org>
Date: Fri, 18 Jan 2002 17:47:54 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   18-Jan-2002 17:47:54
  Branch: HEAD                             Handle: 2002011816475300

  Modified files:
    ossp-pkg/rc             rc.pod

  Log:
    More draft quality documentation.

  Summary:
    Revision    Changes     Path
    1.4         +47 -3      ossp-pkg/rc/rc.pod
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.pod
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 rc.pod
  --- ossp-pkg/rc/rc.pod	17 Jan 2002 15:47:10 -0000	1.3
  +++ ossp-pkg/rc/rc.pod	18 Jan 2002 16:47:53 -0000	1.4
  @@ -38,6 +38,11 @@
   
   =head1 SYNOPSIS
   
  +rc [-h|--help] [-V|--version] [-v|--verbose]
  +   [-d|--debug] [-p|--print] [-e|--eval]
  +   [-c|--config] [-q|--query] [-r|--raw]
  +   <command> <section> [<section> ...]
  +
   =over 4
   
   =item B<General>
  @@ -88,12 +93,51 @@
   
   =head1 DESCRIPTION
   
  -OSSP rc is a run command processor.
  +OSSP rc is a run command processor. It applies the script code associated with
  +a given section label to one or more given commands. The command(s) must each
  +have entries in the form rc.<command> including script code grouped into
  +sections. OSSP rc references these command entries by reading the
  +configuration file (see FILES) and searching the directory where the command
  +entries reside.
  +
  +Each section of script code extends a type of functionality described by its
  +section label. This label is the same one given before the desired command(s).
  +Although only one section is possible for each call to OSSP rc, many
  +`commands' can follow the section label. This allows for an abbreviated input
  +format when calling the same script section of many commands. An example of
  +this is given in (EXAMPLES.)
   
   =head1 PARAMETER OPTIONS
   
  -All these options have reasonable builtin defaults by can be used to
  -adjust one or more parameters of the B<rc> facility.
  +-h, --help
  +       print this help, then exit
  +
  +-V, --version
  +       print version number, then exit
  +
  +-v, --verbose
  +       verbosely report processing, including all warnings
  +
  +-d, --debug
  +       don't remove any temporary files
  +
  +-p, --print
  +       print the name of each section as it is processed
  +
  +-e, --eval
  +       evaluate the nature of a fat tomato sandwich FIXME!
  +
  +-c, --config
  +       locate the configuration file in the following path
  +
  +-q, --query
  +       ask Ralf what he thinks about snails FIXME!
  +
  +-r, --raw
  +       the sushi is too raw, and must be cooked longer FIXME!
  +
  +All of these options have reasonable default values,
  +which OSSP rc assumes when no option is given.
   
   =over 4
   

From ossp-cvs-owner@ossp.org  Fri Jan 18 18:30:05 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 99BA6764E3; Fri, 18 Jan 2002 18:30:05 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/act act.h.in act_p.h.in
Message-Id: <20020118173005.99BA6764E3@mail.ossp.org>
Date: Fri, 18 Jan 2002 18:30:05 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   18-Jan-2002 18:30:05
  Branch: HEAD                             Handle: 2002011817300500

  Modified files:
    ossp-pkg/act            act.h.in act_p.h.in

  Log:
    provide a few macros and return codes

  Summary:
    Revision    Changes     Path
    1.6         +12 -0      ossp-pkg/act/act.h.in
    1.6         +3  -0      ossp-pkg/act/act_p.h.in
  ____________________________________________________________________________

  Index: ossp-pkg/act/act.h.in
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 act.h.in
  --- ossp-pkg/act/act.h.in	2 Jan 2002 17:05:53 -0000	1.5
  +++ ossp-pkg/act/act.h.in	18 Jan 2002 17:30:05 -0000	1.6
  @@ -147,6 +147,18 @@
   typedef enum act_type_en act_type_t;
   
   /*
  + * Act return types
  + */
  +typedef enum {
  +    ACT_OK = 0,
  +    ACT_ERR_ARG,
  +    ACT_ERR_USE,
  +    ACT_ERR_INT,
  +    ACT_ERR_IMP,
  +    ACT_ERR_SYS
  +} act_rc_t;
  +
  +/*
    * ???
    */
   
  Index: ossp-pkg/act/act_p.h.in
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 act_p.h.in
  --- ossp-pkg/act/act_p.h.in	2 Jan 2002 17:05:53 -0000	1.5
  +++ ossp-pkg/act/act_p.h.in	18 Jan 2002 17:30:05 -0000	1.6
  @@ -58,6 +58,9 @@
   
   #define insist(expr,false) if (!(expr)) return false
   
  +#define act_insist(expr,false) if (!(expr)) return false
  +#define act_argcheck(expr) if (!(expr)) return ACT_ERR_ARG
  +
   /* compiler happyness: avoid ``empty compilation unit'' problem */
   #define COMPILER_HAPPYNESS(name) \
       int __##name##_unit = 0;

From ossp-cvs-owner@ossp.org  Fri Jan 18 18:31:07 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1E1E7764E3; Fri, 18 Jan 2002 18:31:07 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/act devtool.conf
Message-Id: <20020118173107.1E1E7764E3@mail.ossp.org>
Date: Fri, 18 Jan 2002 18:31:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   18-Jan-2002 18:31:07
  Branch: HEAD                             Handle: 2002011817310600

  Modified files:
    ossp-pkg/act            devtool.conf

  Log:
    disable libtool

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/act/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/act/devtool.conf
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.conf
  --- ossp-pkg/act/devtool.conf	17 Jan 2002 20:19:57 -0000	1.1
  +++ ossp-pkg/act/devtool.conf	18 Jan 2002 17:31:06 -0000	1.2
  @@ -4,7 +4,7 @@
   
   %autogen
       @autogen shtool   1.5.4 "1.5.*" all
  -    @autogen libtool  1.4.2 "1.4*"
  +    # @autogen libtool  1.4.2 "1.4*"
       @autogen autoconf 2.52  "2.5.*"
   
   %autoclean

From ossp-cvs-owner@ossp.org  Fri Jan 18 18:31:39 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B4C08764B0; Fri, 18 Jan 2002 18:31:39 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/act act_grid.c act_grid.h
Message-Id: <20020118173139.B4C08764B0@mail.ossp.org>
Date: Fri, 18 Jan 2002 18:31:39 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   18-Jan-2002 18:31:39
  Branch: HEAD                             Handle: 2002011817313900

  Modified files:
    ossp-pkg/act            act_grid.c act_grid.h

  Log:
    Finish the implementation of the special-case grid
    memory management library.

  Summary:
    Revision    Changes     Path
    1.5         +294 -54    ossp-pkg/act/act_grid.c
    1.4         +8  -7      ossp-pkg/act/act_grid.h
  ____________________________________________________________________________

  Index: ossp-pkg/act/act_grid.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 act_grid.c
  --- ossp-pkg/act/act_grid.c	2 Jan 2002 17:05:53 -0000	1.4
  +++ ossp-pkg/act/act_grid.c	18 Jan 2002 17:31:39 -0000	1.5
  @@ -26,101 +26,341 @@
   **  act_grid.c: memory grid (implementation)
   */
   
  +/*
  + *  This is a special-case memory management library dedicated to the
  + *  speed- and memory-optimized allocation and deallocation of fixed
  + *  size objects. Inside OSSP act we have lots of those objects and
  + *  if we would manage them directly through malloc(3) it would be to
  + *  run-time expensive and waste too much total memory.
  + *  
  + *  It works by collecting together larger segments (act_grid_seg_t) of
  + *  those fixed size objects (act_grid_tile_t) and linking them into
  + *  a top-level grid structure (act_grid_t). The number of tiles in a
  + *  segment grows with the Fibonacci numbers f(n) = f(n-1)+f(n-2) in
  + *  order to dynamically scale better to the allocation requests without
  + *  having to waste too much memory (in contrast to the usual "double to
  + *  twice of size" approach). Inside a grid segment, the tiles are just
  + *  arranged as a linar array after a linkage structure. The free tiles
  + *  are remembered in a single linked list. So the grid in memory looks
  + *  like this:
  + *  
  + *  -----BEGIN EMBEDDED OBJECT-----
  + *  Content-type: application/fig
  + *  Description: grid memory allocator memory architecture
  + *  Version: eo/1.0
  + *  H4sIAFxTSDwCA61aTW/cNhA9R79CQM82+DUUdS7QIkBuvfYSJAvXQLIoYv9/VOKI
  + *  b0itg/i5RhD6rcX5nqFm6P3tj49/zvE+TJ8+X78+ffn872X6/XJ9vvyYPl6//HN5
  + *  mj5dnrdP8zx55+6dm/56vD58u0x3YfLBuTlMefbiZu+2ZdlB2TaFOcwb3P6HdZb6
  + *  0807+bZu/5a6yvRBSXc+ywA2HvoIIIxcyyzuF1yhEEDomGHPxtUfXBdleuc7pvuH
  + *  XdDGNbqDtAI185WkqUlNwpLmJjXTUquJsVkfhSWVFg6hpeYmNQsRt+rYXeEkPZDm
  + *  c4DIcM3uZAs000cA4lhdc1MRoHT5gT1k5t7am8WZX9ue6S5vxbe6I8Xrbq76VmfF
  + *  MKBd+XUAVP2ddDIUOnbYRaSWQ/U6upCUzhaOOEJypCWvIBPHFuKKmIhjK3HtUodO
  + *  RNdKsLPaEuQUXKoeO1eclgyZhqiiVG0ydDVU+qSxfWROv2T7LgOebru0NlX+viuE
  + *  fUmULSNxh06mZfpNpj6AXw69Xku8QvIqLHHwTXJFpGRkhfqBe6OhEJRYeMkZkrlS
  + *  KiigVQaEs7ZDVCmpOwejTMPjqSGhOjMkmCUdsvjgmvpEZB0iN6fTsRQ3oDcEqkDr
  + *  whOviPJK55cmdTgQSxz6hXUndO9QcbcLl7orPOJdj04fsY/U+iU2CFyPvGOrYvRm
  + *  l7o4eGyfntYRY0PcG8St8XLtt3W7/fbVRXQiHtnoU0PcYRhjM6OiQ6/XEidok4Qm
  + *  zpCcecnVUmlO3hFLvMCdCy+5QHKhJpPq7ap2kgEtLQIdEop1dmejTMPjqaHF0VoX
  + *  6AqkSdfyxvYRrP3PjK9CzNdt315jHHcrxQ6FVi0d4qZ4G+Mj3YFEDPKoILJulDjz
  + *  kjHMR36ajzZW8vN8xOAZ3zDRY6SPmOmjDfU25fJjfcRcD6NMw+OpIaGPbY3UMiA9
  + *  9fyAuN6nM9mCYh7GtI99bKAKtC488Yoor/y57OElz5/LAedy4PMrI6sMFWSVIS51
  + *  EzySXY/U0CQ94nofPXleYKNuiG5AVO+jGg7e7FN3fHVb76P9UMILgepyTsQjm/MD
  + *  cl4UtG1CNyr1paTEC92o1LeXEhde8qAx2eWMGpNdzqgx+VJXb0t7s3fo9FGE7XLU
  + *  nYNRpuHNQnU5qg34nyUNUWAdkn5m/Jgd2Ed1OTo/u6Zfh0JL3A5RXU5VUomFv6RZ
  + *  IHnhK7ZAcuElJ7QLjr4qVWJpgedennaXocSZrhu9mFrcgKRFoEORrpvRKNPweGpI
  + *  6GO7/UGrR3ae28J1OZ3JCEp3byQyoDcEqkDrwhOviPLKn8seXvL8uRxwFgU+vzKy
  + *  ylBBVhniUnfBvUuRHunlyOJ6xHU5evK8wEbvYkQGxN3wFDl7s0/d0+Ec6PnQpuIU
  + *  6PlQiXdEEmdIzrxk34ZtvV/ydP+uhi8HYokTJCe6E+44GIrudvH0fDgaZRoeTw1F
  + *  eojrVD8ZEd3ZCNabGbpmnnjpF5Z4heSVlpxwTZMcnwRJbhcLoaFED3HwZI9WyDS0
  + *  8Fq/wEbdUA8PoMObTOqO3jxQ6E8H20debeghswwo4T7N0Gno2eJ9mwRLfZSmD34D
  + *  /r5+UeVeG4b960LHd1/c8f2IEkQ/AJz62rfJ6L4TsKPKvPTgfaSszZSKdub13QXw
  + *  LlL0TevaK35nXlMI4F2kRIQltrikFpd0+PD/mxI3bvWiYQdHvuGnHxM3ul//USd2
  + *  A50CXMjkrjmbkpLti8+bIOW46Tof19Hb1kVqRj78ePz6t3P+RJONZKl+V5X9ZsfT
  + *  5eH75fr8KiLNFpqqvEWWpiBLFTm7crVpzruWcQPPj98uleI/a7orF0koAAA=
  + *  -----END EMBEDDED OBJECT-----
  + */
  +
   #include "act_p.h"
   #include "act_grid.h"
   
  -/* the top-level structure of a grid */
  +/* forward declarations */
  +struct act_grid_tile_st;
  +struct act_grid_seg_st;
  +
  +/* corresponding types */
  +typedef struct act_grid_tile_st act_grid_tile_t;
  +typedef struct act_grid_seg_st  act_grid_seg_t;
  +
  +/* the structure of a grid tile */
  +struct act_grid_tile_st {
  +    act_grid_tile_t *gt_next;
  +};
  +
  +/* the structure of a grid segment */
  +struct act_grid_seg_st {
  +    act_grid_seg_t   *gs_next;
  +    act_grid_tile_t  *gs_tile_base;
  +    int               gs_tile_num;
  +    act_grid_tile_t  *gs_tile_free_first;
  +    int               gs_tile_free_num;
  +};
  +
  +/* the structure of a grid */
   struct act_grid_st {
  -    act_ctx_t *g_ctx;
  -    void      *g_seg_block;
  -    void      *g_seg_free;
  -    size_t     g_seg_num;
  -    size_t     g_seg_size;
  +    act_ctx_t      *g_ctx;
  +    act_grid_seg_t *g_seg_first;
  +    int             g_seg_num;
  +    size_t          g_tile_size;
  +    int             g_tile_num_first;
   };
   
  -act_grid_t *
  -act_grid_create(
  +/* create a grid segment [INTERNAL] */
  +static act_rc_t 
  +act_grid_seg_create(
       act_ctx_t *ctx, 
  -    size_t segnum, 
  -    size_t segsize)
  +    act_grid_seg_t **pseg, 
  +    size_t tile_size, 
  +    int tile_num)
   {
  -    act_grid_t *grid = NULL;
  -    void *block;
  -    void *seg;
  +    size_t seg_top_size;
  +    size_t seg_size;
  +    act_grid_seg_t *seg;
  +    act_grid_tile_t *tile;
       int i;
   
  +    /* determine (aligned) sizes */
  +    seg_top_size = act_mem_align(sizeof(act_grid_seg_t));
  +    seg_size     = seg_top_size + (tile_size * tile_num);
  +
  +    /* allocate first segment */
  +    if ((seg = act_mem_alloc_ctx(ctx, seg_size)) == NULL)
  +        return ACT_ERR_SYS;
  +
  +    /* initialize first segment */
  +    seg->gs_next            = NULL;
  +    seg->gs_tile_base       = (act_grid_tile_t *)((char *)seg + seg_top_size);
  +    seg->gs_tile_num        = tile_num;
  +    seg->gs_tile_free_first = seg->gs_tile_base;
  +    seg->gs_tile_free_num   = seg->gs_tile_num;
  +
  +    /* initialize free tile list in first segment */
  +    tile = seg->gs_tile_free_first;
  +    for (i = 0; i < seg->gs_tile_free_num-1; i++) {
  +        tile->gt_next = (act_grid_tile_t *)((char *)tile+tile_size);
  +        tile = tile->gt_next;
  +    }
  +    tile->gt_next = NULL;
  +
  +    /* pass segment to caller */
  +    *pseg = seg;
  +
  +    return ACT_OK;
  +}
  +
  +/* create a grid */
  +act_rc_t
  +act_grid_create(
  +    act_grid_t **pgrid,
  +    act_ctx_t *ctx, 
  +    size_t tile_size,
  +    int tile_num)
  +{
  +    act_grid_t *grid;
  +    act_grid_seg_t *seg;
  +    act_rc_t rc;
  +
       /* consistency checks */
  -    insist(ctx != NULL, NULL);
  -    insist(segnum >= 1, NULL);
  -    insist(segsize >= sizeof(void *), NULL);
  +    act_argcheck(ctx != NULL);
  +    act_argcheck(tile_size >= 1);
  +    act_argcheck(tile_num >= 1);
       
  -    /* align segment size */
  -    segsize = act_mem_align(segsize);
  +    /* determine (aligned) sizes */
  +    tile_size    = act_mem_align(tile_size);
   
  -    /* allocate memory chunks */
  +    /* allocate top-level grid structure */
       if ((grid = (act_grid_t *)act_mem_alloc_ctx(ctx, sizeof(act_grid_t))) == NULL)
  -        return NULL;
  -    if ((block = act_mem_alloc_ctx(ctx, segnum * segsize)) == NULL) {
  +        return ACT_ERR_SYS;
  +
  +    /* allocate first segment */
  +    if ((rc = act_grid_seg_create(ctx, &seg, tile_size, tile_num)) != ACT_OK) {
           act_mem_free_ctx(ctx, grid);
  -        return NULL;
  +        return rc;
       }
   
       /* initialize top-level structure */
  -    grid->g_ctx       = act_ctx_dup(ctx, NULL);
  -    grid->g_seg_block = block;
  -    grid->g_seg_free  = block;
  -    grid->g_seg_num   = segnum;
  -    grid->g_seg_size  = segsize;
  +    grid->g_ctx            = act_ctx_dup(ctx, NULL);
  +    grid->g_seg_first      = seg;
  +    grid->g_seg_num        = 1;
  +    grid->g_tile_size      = tile_size;
  +    grid->g_tile_num_first = tile_num;
   
  -    /* initialize segment block */
  -    seg = grid->g_seg_free;
  -    for (i = 0; i < segnum-1; i++) {
  -        *((void **)seg) = (char *)seg+segsize;
  -        seg = (char *)seg+segsize;
  -    }
  -    *((void **)seg) = NULL;
  +    /* pass grid to caller */
  +    *pgrid = grid;
   
  -    return grid;
  +    return ACT_OK;
   }
   
  -int 
  +/* destroy a grid */
  +act_rc_t 
   act_grid_destroy(
       act_grid_t *grid)
   {
  -    act_ctx_t *ctx;
  +    act_grid_seg_t *seg;
  +    act_grid_seg_t *seg_last;
  +    
  +    /* consistency checks */
  +    act_argcheck(grid != NULL);
   
  -    insist(grid != NULL, FALSE);
  +    /* destroy grid segments */
  +    seg_last = grid->g_seg_first;
  +    while (seg_last != NULL) {
  +        seg = seg_last->gs_next;
  +        act_mem_free_ctx(grid->g_ctx, seg_last);
  +    }
   
  -    ctx = grid->g_ctx;
  -    act_mem_free_ctx(ctx, grid->g_seg_block);
  -    act_mem_free_ctx(ctx, grid);
  +    /* destroy top-level grid structure */
  +    act_mem_free_ctx(grid->g_ctx, grid);
   
  -    return TRUE;
  +    return ACT_OK;
   }
   
  -void *
  +/* allocate a tile from a grid */
  +act_rc_t
   act_grid_alloc(
  -    act_grid_t *grid)
  +    act_grid_t *grid,
  +    void **ptile)
   {
  -    void *chunk = NULL;
  +    act_grid_seg_t *seg;
  +    act_grid_seg_t *seg_l1;
  +    act_grid_seg_t *seg_l2;
  +    act_grid_tile_t *tile;
  +    act_rc_t rc;
  +    int tile_num;
   
  -    insist(grid != NULL, NULL);
  +    /* consistency checks */
  +    act_argcheck(grid != NULL);
  +    act_argcheck(ptile != NULL);
   
  -    /* XXX */
  +    /* find segment with first free tile */
  +    seg_l2 = NULL;
  +    seg_l1 = NULL;
  +    seg = grid->g_seg_first; 
  +    while (seg != NULL) {
  +        if (seg->gs_tile_free_num > 0)
  +            break;
  +        seg_l2 = seg_l1;
  +        seg_l1 = seg;
  +        seg = seg->gs_next;
  +    }
   
  -    return chunk;
  +    /* if no more segment with a free tile exists, add new segment */
  +    if (seg == NULL) {
  +        /* tile_num increases with Fibonacci behaviour, i.e,
  +           tile_num(seg) = tile_num(seg_l1) + tile_num(seg_l2). This way
  +           the segments grow in size exponentially but not as fast as
  +           twith he usual "double the size" approach. */
  +        if (seg_l2 == NULL)
  +            tile_num = grid->g_tile_num_first;
  +        else
  +            tile_num = seg_l1->gs_tile_num + seg_l2->gs_tile_num;
  +        if ((rc = act_grid_seg_create(grid->g_ctx, &seg, grid->g_tile_size, tile_num)) != ACT_OK)
  +            return rc;
  +        if (seg_l1 == NULL)
  +            grid->g_seg_first = seg;
  +        else
  +            seg_l1->gs_next = seg;
  +    }
  +
  +    /* allocate tile from segment */
  +    tile = seg->gs_tile_free_first;
  +    seg->gs_tile_free_first = tile->gt_next;
  +    seg->gs_tile_free_num--;
  +
  +    /* pass tile to caller */
  +    *ptile = tile;
  +
  +    return ACT_OK;
   }
   
  -int 
  +/* find grid segment where tile is stored [INTERNAL] */
  +static act_rc_t 
  +act_grid_seg_find(
  +    act_grid_t *grid, 
  +    act_grid_seg_t **pseg,
  +    act_grid_tile_t *tile)
  +{
  +    act_grid_seg_t *seg;
  +
  +    seg = grid->g_seg_first;
  +    while (seg != NULL) {
  +        if (   seg->gs_tile_base <= tile 
  +            && tile < (seg->gs_tile_base+(grid->g_tile_size*seg->gs_tile_num))) {
  +            if (pseg != NULL)
  +                *pseg = seg;
  +            return ACT_OK;
  +        }
  +        seg = seg->gs_next;
  +    }
  +    return ACT_ERR_INT;
  +}
  +
  +/* free a tile to a grid */
  +act_rc_t 
   act_grid_free(
       act_grid_t *grid, 
  -    void *segptr)
  +    void *_tile)
  +{
  +    act_grid_seg_t *seg;
  +    act_grid_seg_t *seg_last;
  +    act_grid_tile_t *tile;
  +    act_rc_t rc;
  +
  +    /* cast to internal structure */
  +    tile = (act_grid_tile_t *)_tile;
  +
  +    /* consistency checks */
  +    act_argcheck(grid != NULL);
  +    act_argcheck(tile != NULL);
  +    
  +    /* find segment of tile */
  +    if ((rc = act_grid_seg_find(grid, &seg, tile)) != ACT_OK)
  +        return rc;
  +
  +    /* move into list of free tiles */
  +    tile->gt_next = seg->gs_tile_free_first;
  +    seg->gs_tile_free_first = tile;
  +    seg->gs_tile_free_num++;
  +
  +    /* free last segment if it is empty and if segment 
  +       before (this one here) is now also empty */
  +    if (   seg->gs_tile_num == seg->gs_tile_free_num 
  +        && (seg_last = seg->gs_next) != NULL        ) {
  +        if (   seg_last->gs_tile_num == seg_last->gs_tile_free_num 
  +            && seg_last->gs_next == NULL                          ) {
  +               act_mem_free_ctx(grid->g_ctx, seg_last);
  +               seg->gs_next = NULL;
  +        }
  +    }
  +
  +    return ACT_OK;
  +}
  +
  +/* test whether a tile is inside a grid */
  +act_rc_t 
  +act_grid_inside(
  +    act_grid_t *grid, 
  +    void *_tile)
   {
  -    insist(grid != NULL, FALSE);
  -    insist(segptr != NULL, FALSE);
  +    act_grid_tile_t *tile;
  +    
  +    /* cast to internal structure */
  +    tile = (act_grid_tile_t *)_tile;
   
  -    /* XXX */
  +    /* consistency checks */
  +    act_argcheck(grid != NULL);
  +    act_argcheck(tile != NULL);
   
  -    return TRUE;
  +    /* just try to find a segment */
  +    return act_grid_seg_find(grid, NULL, tile);
   }
   
  Index: ossp-pkg/act/act_grid.h
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 act_grid.h
  --- ossp-pkg/act/act_grid.h	2 Jan 2002 17:05:53 -0000	1.3
  +++ ossp-pkg/act/act_grid.h	18 Jan 2002 17:31:39 -0000	1.4
  @@ -26,16 +26,17 @@
   **  act_grid.h: memory grid (declaration)
   */
   
  -#ifndef _ACT_GRID_H_
  -#define _ACT_GRID_H_
  +#ifndef __ACT_GRID_H__
  +#define __ACT_GRID_H__
   
   struct act_grid_st;
   typedef struct act_grid_st act_grid_t;
   
  -extern act_grid_t *act_grid_create   (act_ctx_t *ctx, size_t segnum, size_t segsize);
  -extern void       *act_grid_alloc    (act_grid_t *grid);
  -extern int         act_grid_free     (act_grid_t *grid, void *segptr);
  -extern int         act_grid_destroy  (act_grid_t *grid);
  +extern act_rc_t act_grid_create (act_grid_t **grid, act_ctx_t *ctx, size_t tile_size, int tile_num);
  +extern act_rc_t act_grid_alloc  (act_grid_t  *grid, void **tile);
  +extern act_rc_t act_grid_free   (act_grid_t  *grid, void  *tile);
  +extern act_rc_t act_grid_inside (act_grid_t  *grid, void  *tile);
  +extern act_rc_t act_grid_destroy(act_grid_t  *grid);
   
  -#endif /* _ACT_GRID_H_ */
  +#endif /* __ACT_GRID_H__ */
   

From ossp-cvs-owner@ossp.org  Fri Jan 18 19:12:34 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4D6D6764E3; Fri, 18 Jan 2002 19:12:34 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val val.c
Message-Id: <20020118181234.4D6D6764E3@mail.ossp.org>
Date: Fri, 18 Jan 2002 19:12:34 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   18-Jan-2002 19:12:34
  Branch: HEAD                             Handle: 2002011818123300

  Modified files:
    ossp-pkg/val            val.c

  Log:
    fix memory leak

  Summary:
    Revision    Changes     Path
    1.7         +5  -2      ossp-pkg/val/val.c
  ____________________________________________________________________________

  Index: ossp-pkg/val/val.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 val.c
  --- ossp-pkg/val/val.c	17 Jan 2002 12:19:09 -0000	1.6
  +++ ossp-pkg/val/val.c	18 Jan 2002 18:12:33 -0000	1.7
  @@ -516,7 +516,7 @@
   /* destroy the whole hash table */
   static int lh_destroy(lh_t *h)
   {
  -    element_t *el, **pel;
  +    element_t *el, **pel, *el_next;
       unsigned int i, j;
   
       /* argument consistency check */
  @@ -533,10 +533,13 @@
                   continue;
               /* deallocate all elements in collision chain */
               pel = &h->h_dir[i]->s_element[j];
  -            for (el = *pel; el != NULL; el = el->e_next) {
  +            for (el = *pel; el != NULL; ) {
                   /* deallocate key+data memory chunk */
                   if (el->e_keyptr != NULL)
                       free(el->e_keyptr);
  +                el_next = el->e_next;
  +                free(el);
  +                el = el_next;
               }
           }
           free(h->h_dir[i]);

From ossp-cvs-owner@ossp.org  Fri Jan 18 19:13:06 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 19868764E3; Fri, 18 Jan 2002 19:13:06 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/act .cvsignore
Message-Id: <20020118181306.19868764E3@mail.ossp.org>
Date: Fri, 18 Jan 2002 19:13:06 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   18-Jan-2002 19:13:06
  Branch: HEAD                             Handle: 2002011818130500

  Modified files:
    ossp-pkg/act            .cvsignore

  Log:
    ignore generated stuff

  Summary:
    Revision    Changes     Path
    1.2         +2  -0      ossp-pkg/act/.cvsignore
  ____________________________________________________________________________

  Index: ossp-pkg/act/.cvsignore
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 .cvsignore
  --- ossp-pkg/act/.cvsignore	12 Nov 1999 20:39:01 -0000	1.1
  +++ ossp-pkg/act/.cvsignore	18 Jan 2002 18:13:05 -0000	1.2
  @@ -7,3 +7,5 @@
   act_p.h
   act_test
   act_hash_fct
  +shtool
  +configure

From ossp-cvs-owner@ossp.org  Fri Jan 18 19:13:14 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B6EC676506; Fri, 18 Jan 2002 19:13:14 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/act act_p.h.in
Message-Id: <20020118181314.B6EC676506@mail.ossp.org>
Date: Fri, 18 Jan 2002 19:13:14 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   18-Jan-2002 19:13:14
  Branch: HEAD                             Handle: 2002011818131400

  Modified files:
    ossp-pkg/act            act_p.h.in

  Log:
    activate grid

  Summary:
    Revision    Changes     Path
    1.7         +1  -0      ossp-pkg/act/act_p.h.in
  ____________________________________________________________________________

  Index: ossp-pkg/act/act_p.h.in
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 act_p.h.in
  --- ossp-pkg/act/act_p.h.in	18 Jan 2002 17:30:05 -0000	1.6
  +++ ossp-pkg/act/act_p.h.in	18 Jan 2002 18:13:14 -0000	1.7
  @@ -54,6 +54,7 @@
   #include "act_lib.h"
   #include "act_ctx.h"
   #include "act_mem.h"
  +#include "act_grid.h"
   #include "act_hash.h"
   
   #define insist(expr,false) if (!(expr)) return false

From ossp-cvs-owner@ossp.org  Fri Jan 18 19:17:56 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6D9E0764E3; Fri, 18 Jan 2002 19:17:56 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/act TODO act_hash_lh.c
Message-Id: <20020118181756.6D9E0764E3@mail.ossp.org>
Date: Fri, 18 Jan 2002 19:17:56 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   18-Jan-2002 19:17:56
  Branch: HEAD                             Handle: 2002011818175500

  Modified files:
    ossp-pkg/act            TODO act_hash_lh.c

  Log:
    Use new grid memory manager for the segment and element chunks. This way
    the hash requires a lot less memory chunks and is also even more faster.

  Summary:
    Revision    Changes     Path
    1.4         +0  -4      ossp-pkg/act/TODO
    1.10        +34 -10     ossp-pkg/act/act_hash_lh.c
  ____________________________________________________________________________

  Index: ossp-pkg/act/TODO
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 TODO
  --- ossp-pkg/act/TODO	20 Aug 2000 14:47:12 -0000	1.3
  +++ ossp-pkg/act/TODO	18 Jan 2002 18:17:55 -0000	1.4
  @@ -1,8 +1,4 @@
   
  -- next act_grid vervollstaendigen und dann diesesd
  -  nutzen, um im act_hash_lh.c die collision chain chunks
  -  zusammenzusfassen!
  -
   - es sollte custom/domain-specific hash functions geben,
     die wissen, welche Keys reinkommen und auf diese
     spezzialisiert sind!
  Index: ossp-pkg/act/act_hash_lh.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 act_hash_lh.c
  --- ossp-pkg/act/act_hash_lh.c	2 Jan 2002 17:05:53 -0000	1.9
  +++ ossp-pkg/act/act_hash_lh.c	18 Jan 2002 18:17:55 -0000	1.10
  @@ -28,7 +28,7 @@
   
   /*
   **  This module implements a Dynamic Hash Table, based on WITOLD LITWIN
  -**  and PER-AKE LARSON's ``Linear Hashing'' algorithm (1980/1988),
  +**  and PER-AKE LARSON's "Linear Hashing" algorithm (1980/1988),
   **  implemented on top of a two-level virtual array with separate
   **  collision chains as the backend data structure. Some ideas were
   **  taken over from MIKAEL PETTERSON's Linear Hashing enhancements
  @@ -115,12 +115,15 @@
   typedef struct act_hash_lh_st act_hash_lh_t;
   struct act_hash_lh_st {
       act_ctx_t     *h_ctx;       /* context structure */
  +    act_grid_t    *h_grid_seg;  /* memory grid for segments */
  +    act_grid_t    *h_grid_el;   /* memory grid for elements */
       act_hash_fct_t h_func;      /* hash function (copied from context) */
       unsigned int   h_p;         /* pointer to start of unsplit region */
       unsigned int   h_pmax;      /* pointer to end of unsplit region */
       int            h_slack;     /* grow/shrink indicator */
       unsigned       h_dirsize;   /* current size of directory */
       segment_t    **h_dir;       /* pointer to directory */
  +
   };
   
   /* on-the-fly calculate index into directory and segment from virtual array index */
  @@ -143,18 +146,36 @@
           return NULL;
       h->h_ctx = ctx;
   
  +    /* create the internal memory grid for segments */
  +    if (act_grid_create(&h->h_grid_seg, ctx, sizeof(segment_t), 1) != ACT_OK) {
  +        errno_safe(act_mem_free_ctx(ctx, h));
  +        return NULL;
  +    }
  +
  +    /* create the internal memory grid for elements */
  +    if (act_grid_create(&h->h_grid_el, ctx, sizeof(element_t), SEGMENTSIZE) != ACT_OK) {
  +        errno_safe(act_grid_destroy(h->h_grid_seg));
  +        errno_safe(act_mem_free_ctx(ctx, h));
  +        return NULL;
  +    }
  +
       /* allocate and clear hash table directory */
       h->h_dirsize = INITDIRSIZE;
       if ((h->h_dir = (segment_t **)act_mem_alloc_ctx(
                       ctx, h->h_dirsize * sizeof(segment_t *))) == NULL) {
  +        errno_safe(act_grid_destroy(h->h_grid_seg));
  +        errno_safe(act_grid_destroy(h->h_grid_el));
           errno_safe(act_mem_free_ctx(ctx, h));
           return NULL;
       }
       act_mem_set(h->h_dir, 0, h->h_dirsize * sizeof(segment_t *));
   
       /* allocate and clear first segment of hash table array */
  -    if ((h->h_dir[0] = (segment_t *)act_mem_alloc_ctx(ctx, sizeof(segment_t))) == NULL) {
  -        errno_safe(act_mem_free_ctx(ctx, h->h_dir); act_mem_free_ctx(ctx, h));
  +    if (act_grid_alloc(h->h_grid_seg, (void **)&(h->h_dir[0])) != ACT_OK) {
  +        errno_safe(act_grid_destroy(h->h_grid_seg));
  +        errno_safe(act_grid_destroy(h->h_grid_el));
  +        errno_safe(act_mem_free_ctx(ctx, h->h_dir)); 
  +        errno_safe(act_mem_free_ctx(ctx, h));
           return NULL;
       }
       act_mem_set(h->h_dir[0], 0, sizeof(segment_t));
  @@ -200,7 +221,7 @@
       
       /* have to create a new table segment? */
       if (SEGINDEX(newaddr) == 0) {
  -        if ((seg = (segment_t *)act_mem_alloc_ctx(ctx, sizeof(segment_t))) == NULL)
  +        if (act_grid_alloc(h->h_grid_seg, (void **)&seg) != ACT_OK)
               return;
           act_mem_set(seg, 0, sizeof(segment_t));
           h->h_dir[DIRINDEX(newaddr)] = seg;
  @@ -273,7 +294,7 @@
       /* if possible, deallocate the last segment */
       if (SEGINDEX(oldlast) == 0) {
           h->h_dir[DIRINDEX(oldlast)] = NULL;
  -        free(lastseg);
  +        act_grid_free(h->h_grid_seg, lastseg);
       }
   
       /* if possible, deallocate the end of the directory */
  @@ -345,7 +366,7 @@
       }
       else {
           /* allocate new element and chain into list */
  -        if ((el = (element_t *)act_mem_alloc_ctx(ctx, sizeof(element_t))) == 0) {
  +        if (act_grid_alloc(h->h_grid_el, (void **)&el) != ACT_OK) {
               act_mem_free_ctx(ctx, vp);
               return FALSE;
           }
  @@ -447,7 +468,7 @@
               else
                   lel->e_next = el->e_next;
               /* deallocate element structure */
  -            act_mem_free_ctx(ctx, el);
  +            act_grid_free(h->h_grid_el, el);
               rv = TRUE;
               break;
           }
  @@ -602,7 +623,7 @@
       act_ctx_t *ctx, 
       act_hash_lh_t *h)
   {
  -    element_t *el, **pel;
  +    element_t *el, **pel, *el_next;
       unsigned int i, j;
   
       /* argument consistency check */
  @@ -619,13 +640,16 @@
                   continue;
               /* deallocate all elements in collision chain */
               pel = &h->h_dir[i]->s_element[j];
  -            for (el = *pel; el != NULL; el = el->e_next) {
  +            for (el = *pel; el != NULL; ) {
                   /* deallocate key+data memory chunk */
                   if (el->e_keyptr != NULL)
                       act_mem_free_ctx(ctx, el->e_keyptr);
  +                el_next = el->e_next;
  +                act_grid_free(h->h_grid_el, el);
  +                el = el_next;
               }
           }
  -        act_mem_free_ctx(ctx, h->h_dir[i]);
  +        act_grid_free(h->h_grid_seg, h->h_dir[i]);
       }
   
       /* deallocate hash table directory */

From ossp-cvs-owner@ossp.org  Sat Jan 19 14:12:04 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 07B9D764D1; Sat, 19 Jan 2002 14:12:03 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/act act_chain.h
Message-Id: <20020119131203.07B9D764D1@mail.ossp.org>
Date: Sat, 19 Jan 2002 14:12:03 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   19-Jan-2002 14:12:03
  Branch: HEAD                             Handle: 2002011913120300

  Added files:
    ossp-pkg/act            act_chain.h

  Log:
    Add a macro set for managing chained structures
    (single-linked lists and double-linked rings)

  Summary:
    Revision    Changes     Path
    1.1         +193 -0     ossp-pkg/act/act_chain.h
  ____________________________________________________________________________

  Index: ossp-pkg/act/act_chain.h
  ============================================================
  $ cvs update -p -r1.1 act_chain.h
  /* 
  **  Act - Abstract Container Type Library
  **  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  **
  **  This file is part of Act, a library for dealing with Abstract 
  **  Container Types which can be found at http://www.ossp.org/pkg/act/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  act_chain.h: basic chained data structures (implementation)
  */
  
  #ifndef __ACT_CHAIN_H__
  #define __ACT_CHAIN_H__
  
  /*
   * Macro set for implementing single-linked lists.
   */
  
  /* declaration:
   * typedef struct {
   *     ACT_LIST_ELEM(foo_t) next;
   * } foo_t;
   * ACT_LIST_HEAD(foo_t) head;
   */
  #define ACT_LIST_HEAD(type)\
      struct { type *first; }
  #define ACT_LIST_ELEM(type) \
      struct { type *next; }
  
  /* initialization */
  #define ACT_LIST_INITIALIZER \
      { NULL }
  #define ACT_LIST_INIT(hp) \
      ACT_LIST_FIRST((hp)) = NULL
  #define ACT_LIST_ELEM_INIT(ep, field) \
      ACT_LIST_NEXT((ep), field) = NULL
  
  /* direct access */
  #define ACT_LIST_FIRST(hp) \
      ((hp)->first)
  #define ACT_LIST_NEXT(ep, field) \
      ((ep)->field.next)
  
  /* empty check */
  #define ACT_LIST_EMPTY(hp) \
      (ACT_LIST_FIRST((hp)) == NULL)
  
  /* insert */
  #define ACT_LIST_INSERT_HEAD(hp, ep, field) \
      do { ACT_LIST_NEXT((ep), field) = ACT_LIST_FIRST((hp)); \
           ACT_LIST_FIRST((hp)) = (ep); } while (0)
  #define ACT_LIST_INSERT_AFTER(ap, ep, field) \
      do { ACT_LIST_NEXT((ep), field) = ACT_LIST_NEXT((ap), field); \
           ACT_LIST_NEXT((ap), field) = (ep); } while (0) 
  
  /* remove */
  #define ACT_LIST_REMOVE_HEAD(hp, field) \
      ACT_LIST_FIRST((hp)) = \
          ACT_LIST_NEXT(ACT_LIST_FIRST((hp)), field)
  #define ACT_LIST_REMOVE(hp, ep, field, type) \
      do { \
          if (ACT_LIST_FIRST((hp)) == (ep)) \
              ACT_LIST_REMOVE_HEAD((hp), field); \
          else { \
              type *cep = ACT_LIST_FIRST((hp)); \
              while (ACT_LIST_NEXT(cep, field) != (ep)) \
                  cep = ACT_LIST_NEXT(cep, field); \
              ACT_LIST_NEXT(cep, field) = \
                  ACT_LIST_NEXT(ACT_LIST_NEXT(cep, field), field); \
          } \
      } while (0)
  
  /* iteration */
  #define ACT_LIST_FOREACH(hp, ep, field) \
      for ((ep) = ACT_LIST_FIRST((hp)); \
           (ep) != NULL; \
           (ep) = ACT_LIST_NEXT((ep), field))
  
  /*
   * Macro set for implementing double-linked rings.
   */
  
  /* declaration */
  #define ACT_RING_HEAD(type) \
      struct { type *next; type *prev; }
  #define ACT_RING_ELEM(type) \
      struct { type *next; type *prev; }
  
  /* initialization */
  #define ACT_RING_INITIALIZER \
      { NULL, NULL }
  #define ACT_RING_SENTINEL(hp, type, field) \
      (type *)((char *)(hp) - ((size_t)(&((type *)0)->field)))
  #define ACT_RING_INIT(hp, type, field) \
      do { ACT_RING_FIRST((hp)) = ACT_RING_SENTINEL((hp), type, field); \
           ACT_RING_LAST((hp))  = ACT_RING_SENTINEL((hp), type, field); } while (0)
  #define ACT_RING_ELEM_INIT(ep, field) \
      do { ACT_RING_NEXT((ep), field) = (ep); \
           ACT_RING_PREV((ep), field) = (ep); } while (0)
  
  /* direct access */
  #define ACT_RING_FIRST(hp) \
      ((hp)->next)
  #define ACT_RING_LAST(hp) \
      ((hp)->prev)
  #define ACT_RING_NEXT(ep, field) \
      ((ep)->field.next)
  #define ACT_RING_PREV(ep, field) \
      ((ep)->field.prev)
  
  /* empty check */
  #define ACT_RING_EMPTY(hp, type, field) \
      (ACT_RING_FIRST((hp)) == ACT_RING_SENTINEL((hp), type, field))
  
  /* insert */
  #define ACT_RING_SPLICE_BEFORE(lep, ep1, epN, field) \
      do { \
          ACT_RING_NEXT((epN), field) = (lep); \
          ACT_RING_PREV((ep1), field) = ACT_RING_PREV((lep), field); \
          ACT_RING_NEXT(ACT_RING_PREV((lep), field), field) = (ep1); \
          ACT_RING_PREV((lep), field) = (epN); \
      } while (0)
  #define ACT_RING_SPLICE_AFTER(lep, ep1, epN, field) \
      do { \
          ACT_RING_PREV((ep1), field) = (lep); \
          ACT_RING_NEXT((epN), field) = ACT_RING_NEXT((lep), field); \
          ACT_RING_PREV(ACT_RING_NEXT((lep), field), field) = (epN); \
          ACT_RING_NEXT((lep), field) = (ep1); \
      } while (0)
  #define ACT_RING_SPLICE_HEAD(hp, ep1, epN, type, field) \
      ACT_RING_SPLICE_AFTER(ACT_RING_SENTINEL((hp), type, field), (ep1), (epN), field)
  #define ACT_RING_SPLICE_TAIL(hp, ep1, epN, type, field) \
      ACT_RING_SPLICE_BEFORE(ACT_RING_SENTINEL((hp), type, field), (ep1), (epN), field)
  #define ACT_RING_INSERT_BEFORE(lep, nep, field) \
      ACT_RING_SPLICE_BEFORE((lep), (nep), (nep), field)
  #define ACT_RING_INSERT_AFTER(lep, nep, field) \
      ACT_RING_SPLICE_AFTER((lep), (nep), (nep), field)
  #define ACT_RING_INSERT_HEAD(hp, nep, type, field) \
      ACT_RING_SPLICE_HEAD((hp), (nep), (nep), type, field)
  #define ACT_RING_INSERT_TAIL(hp, nep, type, field) \
      ACT_RING_SPLICE_TAIL((hp), (nep), (nep), type, field)
  
  /* remove */
  #define ACT_RING_UNSPLICE(ep1, epN, field) \
      do { \
          ACT_RING_NEXT(ACT_RING_PREV((ep1), field), field) = \
              ACT_RING_NEXT((epN), field); \
          ACT_RING_PREV(ACT_RING_NEXT((epN), field), field) = \
              ACT_RING_PREV((ep1), field); \
      } while (0)
  #define ACT_RING_REMOVE(ep, field) \
      ACT_RING_UNSPLICE((ep), (ep), field)
  
  /* concatenation */
  #define ACT_RING_CONCAT(h1, h2, type, field) \
      do { \
          if (!ACT_RING_EMPTY((h2), type, field)) { \
              ACT_RING_SPLICE_BEFORE(ACT_RING_SENTINEL((h1), type, field), \
                                     ACT_RING_FIRST((h2)), \
                                     ACT_RING_LAST((h2)), field); \
              ACT_RING_INIT((h2), type, field); \
          } \
      } while (0)
  
  /* iteration */
  #define ACT_RING_FOREACH(ep, hp, type, field) \
      for ((ep)  = ACT_RING_FIRST((hp)); \
           (ep) != ACT_RING_SENTINEL((hp), type, field); \
           (ep)  = ACT_RING_NEXT((ep), field))
  #define ACT_RING_FOREACH_REVERSE(ep, hp, type, field) \
      for ((ep)  = ACT_RING_LAST((hp)); \
           (ep) != ACT_RING_SENTINEL((hp), type, field); \
           (ep)  = ACT_RING_PREV((ep), field))
  
  #endif /* __ACT_CHAIN_H__*/
  

From ossp-cvs-owner@ossp.org  Sat Jan 19 14:13:33 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4F873764D1; Sat, 19 Jan 2002 14:13:33 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/act act_p.h.in
Message-Id: <20020119131333.4F873764D1@mail.ossp.org>
Date: Sat, 19 Jan 2002 14:13:33 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   19-Jan-2002 14:13:33
  Branch: HEAD                             Handle: 2002011913133200

  Modified files:
    ossp-pkg/act            act_p.h.in

  Log:
    activate act_chain.h

  Summary:
    Revision    Changes     Path
    1.8         +1  -0      ossp-pkg/act/act_p.h.in
  ____________________________________________________________________________

  Index: ossp-pkg/act/act_p.h.in
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 act_p.h.in
  --- ossp-pkg/act/act_p.h.in	18 Jan 2002 18:13:14 -0000	1.7
  +++ ossp-pkg/act/act_p.h.in	19 Jan 2002 13:13:32 -0000	1.8
  @@ -54,6 +54,7 @@
   #include "act_lib.h"
   #include "act_ctx.h"
   #include "act_mem.h"
  +#include "act_chain.h"
   #include "act_grid.h"
   #include "act_hash.h"
   

From ossp-cvs-owner@ossp.org  Sat Jan 19 14:16:33 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DDF95764D1; Sat, 19 Jan 2002 14:16:32 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/act act_grid.c
Message-Id: <20020119131632.DDF95764D1@mail.ossp.org>
Date: Sat, 19 Jan 2002 14:16:32 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   19-Jan-2002 14:16:32
  Branch: HEAD                             Handle: 2002011913163200

  Modified files:
    ossp-pkg/act            act_grid.c

  Log:
    switch to act_chain.h macros

  Summary:
    Revision    Changes     Path
    1.6         +45 -47     ossp-pkg/act/act_grid.c
  ____________________________________________________________________________

  Index: ossp-pkg/act/act_grid.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 act_grid.c
  --- ossp-pkg/act/act_grid.c	18 Jan 2002 17:31:39 -0000	1.5
  +++ ossp-pkg/act/act_grid.c	19 Jan 2002 13:16:32 -0000	1.6
  @@ -93,25 +93,24 @@
   
   /* the structure of a grid tile */
   struct act_grid_tile_st {
  -    act_grid_tile_t *gt_next;
  +    ACT_LIST_ELEM(act_grid_tile_t) gt_link;            /* linkage to next tile */
   };
   
   /* the structure of a grid segment */
   struct act_grid_seg_st {
  -    act_grid_seg_t   *gs_next;
  -    act_grid_tile_t  *gs_tile_base;
  -    int               gs_tile_num;
  -    act_grid_tile_t  *gs_tile_free_first;
  -    int               gs_tile_free_num;
  +    ACT_RING_ELEM(act_grid_seg_t)  gs_link;            /* linkage to next+prev segments */
  +    act_grid_tile_t               *gs_tile_base;       /* pointer to tile base */
  +    int                            gs_tile_num;        /* number of tiles */
  +    ACT_LIST_HEAD(act_grid_tile_t) gs_tile_free_list;  /* list of free tiles */
  +    int                            gs_tile_free_num;   /* number of free tiles */
   };
   
   /* the structure of a grid */
   struct act_grid_st {
  -    act_ctx_t      *g_ctx;
  -    act_grid_seg_t *g_seg_first;
  -    int             g_seg_num;
  -    size_t          g_tile_size;
  -    int             g_tile_num_first;
  +    act_ctx_t                     *g_ctx;              /* context structure */
  +    ACT_RING_HEAD(act_grid_seg_t)  g_seg;              /* ring of segments */
  +    size_t                         g_tile_size;        /* size of a tile */
  +    int                            g_tile_num_first;   /* number of tiles in first segment */
   };
   
   /* create a grid segment [INTERNAL] */
  @@ -137,19 +136,21 @@
           return ACT_ERR_SYS;
   
       /* initialize first segment */
  -    seg->gs_next            = NULL;
  -    seg->gs_tile_base       = (act_grid_tile_t *)((char *)seg + seg_top_size);
  -    seg->gs_tile_num        = tile_num;
  -    seg->gs_tile_free_first = seg->gs_tile_base;
  -    seg->gs_tile_free_num   = seg->gs_tile_num;
  +    ACT_RING_ELEM_INIT(seg, gs_link);
  +    seg->gs_tile_base = (act_grid_tile_t *)((char *)seg + seg_top_size);
  +    seg->gs_tile_num = tile_num;
  +    ACT_LIST_ELEM_INIT(seg->gs_tile_base, gt_link);
  +    ACT_LIST_INIT(&seg->gs_tile_free_list);
  +    ACT_LIST_INSERT_HEAD(&seg->gs_tile_free_list, seg->gs_tile_base, gt_link);
  +    seg->gs_tile_free_num = seg->gs_tile_num;
   
       /* initialize free tile list in first segment */
  -    tile = seg->gs_tile_free_first;
  +    tile = ACT_LIST_FIRST(&seg->gs_tile_free_list);
       for (i = 0; i < seg->gs_tile_free_num-1; i++) {
  -        tile->gt_next = (act_grid_tile_t *)((char *)tile+tile_size);
  -        tile = tile->gt_next;
  +        ACT_LIST_NEXT(tile, gt_link) = (act_grid_tile_t *)((char *)tile+tile_size);
  +        tile = ACT_LIST_NEXT(tile, gt_link);
       }
  -    tile->gt_next = NULL;
  +    ACT_LIST_NEXT(tile, gt_link) = NULL;
   
       /* pass segment to caller */
       *pseg = seg;
  @@ -175,7 +176,7 @@
       act_argcheck(tile_num >= 1);
       
       /* determine (aligned) sizes */
  -    tile_size    = act_mem_align(tile_size);
  +    tile_size = act_mem_align(tile_size);
   
       /* allocate top-level grid structure */
       if ((grid = (act_grid_t *)act_mem_alloc_ctx(ctx, sizeof(act_grid_t))) == NULL)
  @@ -188,10 +189,10 @@
       }
   
       /* initialize top-level structure */
  -    grid->g_ctx            = act_ctx_dup(ctx, NULL);
  -    grid->g_seg_first      = seg;
  -    grid->g_seg_num        = 1;
  -    grid->g_tile_size      = tile_size;
  +    grid->g_ctx = act_ctx_dup(ctx, NULL);
  +    ACT_RING_INIT(&grid->g_seg, act_grid_seg_t, gs_link);
  +    ACT_RING_INSERT_HEAD(&grid->g_seg, seg, act_grid_seg_t, gs_link);
  +    grid->g_tile_size = tile_size;
       grid->g_tile_num_first = tile_num;
   
       /* pass grid to caller */
  @@ -212,9 +213,9 @@
       act_argcheck(grid != NULL);
   
       /* destroy grid segments */
  -    seg_last = grid->g_seg_first;
  -    while (seg_last != NULL) {
  -        seg = seg_last->gs_next;
  +    seg_last = ACT_RING_FIRST(&grid->g_seg);
  +    while (seg_last != ACT_RING_SENTINEL(&grid->g_seg, act_grid_seg_t, gs_link)) {
  +        seg = ACT_RING_NEXT(seg_last, gs_link);
           act_mem_free_ctx(grid->g_ctx, seg_last);
       }
   
  @@ -244,17 +245,17 @@
       /* find segment with first free tile */
       seg_l2 = NULL;
       seg_l1 = NULL;
  -    seg = grid->g_seg_first; 
  -    while (seg != NULL) {
  +    seg = ACT_RING_FIRST(&grid->g_seg);
  +    while (seg != ACT_RING_SENTINEL(&grid->g_seg, act_grid_seg_t, gs_link)) {
           if (seg->gs_tile_free_num > 0)
               break;
           seg_l2 = seg_l1;
           seg_l1 = seg;
  -        seg = seg->gs_next;
  +        seg = ACT_RING_NEXT(seg, gs_link);
       }
   
       /* if no more segment with a free tile exists, add new segment */
  -    if (seg == NULL) {
  +    if (seg == ACT_RING_SENTINEL(&grid->g_seg, act_grid_seg_t, gs_link)) {
           /* tile_num increases with Fibonacci behaviour, i.e,
              tile_num(seg) = tile_num(seg_l1) + tile_num(seg_l2). This way
              the segments grow in size exponentially but not as fast as
  @@ -265,15 +266,12 @@
               tile_num = seg_l1->gs_tile_num + seg_l2->gs_tile_num;
           if ((rc = act_grid_seg_create(grid->g_ctx, &seg, grid->g_tile_size, tile_num)) != ACT_OK)
               return rc;
  -        if (seg_l1 == NULL)
  -            grid->g_seg_first = seg;
  -        else
  -            seg_l1->gs_next = seg;
  +        ACT_RING_INSERT_TAIL(&grid->g_seg, seg, act_grid_seg_t, gs_link);
       }
   
       /* allocate tile from segment */
  -    tile = seg->gs_tile_free_first;
  -    seg->gs_tile_free_first = tile->gt_next;
  +    tile = ACT_LIST_FIRST(&seg->gs_tile_free_list);
  +    ACT_LIST_REMOVE_HEAD(&seg->gs_tile_free_list, gt_link);
       seg->gs_tile_free_num--;
   
       /* pass tile to caller */
  @@ -291,15 +289,15 @@
   {
       act_grid_seg_t *seg;
   
  -    seg = grid->g_seg_first;
  -    while (seg != NULL) {
  +    seg = ACT_RING_FIRST(&grid->g_seg);
  +    while (seg != ACT_RING_SENTINEL(&grid->g_seg, act_grid_seg_t, gs_link)) {
           if (   seg->gs_tile_base <= tile 
               && tile < (seg->gs_tile_base+(grid->g_tile_size*seg->gs_tile_num))) {
               if (pseg != NULL)
                   *pseg = seg;
               return ACT_OK;
           }
  -        seg = seg->gs_next;
  +        seg = ACT_RING_NEXT(seg, gs_link);
       }
       return ACT_ERR_INT;
   }
  @@ -311,7 +309,6 @@
       void *_tile)
   {
       act_grid_seg_t *seg;
  -    act_grid_seg_t *seg_last;
       act_grid_tile_t *tile;
       act_rc_t rc;
   
  @@ -327,20 +324,21 @@
           return rc;
   
       /* move into list of free tiles */
  -    tile->gt_next = seg->gs_tile_free_first;
  -    seg->gs_tile_free_first = tile;
  +    ACT_LIST_INSERT_HEAD(&seg->gs_tile_free_list, tile, gt_link);
       seg->gs_tile_free_num++;
   
       /* free last segment if it is empty and if segment 
          before (this one here) is now also empty */
  +#if 0
       if (   seg->gs_tile_num == seg->gs_tile_free_num 
  -        && (seg_last = seg->gs_next) != NULL        ) {
  +        && (seg_last = seg->gs_link) != NULL        ) {
           if (   seg_last->gs_tile_num == seg_last->gs_tile_free_num 
  -            && seg_last->gs_next == NULL                          ) {
  +            && seg_last->gs_link == NULL                          ) {
                  act_mem_free_ctx(grid->g_ctx, seg_last);
  -               seg->gs_next = NULL;
  +               seg->gs_link = NULL;
           }
       }
  +#endif
   
       return ACT_OK;
   }

From ossp-cvs-owner@ossp.org  Sat Jan 19 14:18:01 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 97CBA764D1; Sat, 19 Jan 2002 14:18:01 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/act act_grid.c act_grid.h
Message-Id: <20020119131801.97CBA764D1@mail.ossp.org>
Date: Sat, 19 Jan 2002 14:18:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   19-Jan-2002 14:18:01
  Branch: HEAD                             Handle: 2002011913180100

  Modified files:
    ossp-pkg/act            act_grid.c act_grid.h

  Log:
    Add act_grid_stat() function for querying statistics about the grid.

  Summary:
    Revision    Changes     Path
    1.7         +48 -0      ossp-pkg/act/act_grid.c
    1.5         +2  -1      ossp-pkg/act/act_grid.h
  ____________________________________________________________________________

  Index: ossp-pkg/act/act_grid.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 act_grid.c
  --- ossp-pkg/act/act_grid.c	19 Jan 2002 13:16:32 -0000	1.6
  +++ ossp-pkg/act/act_grid.c	19 Jan 2002 13:18:01 -0000	1.7
  @@ -362,3 +362,51 @@
       return act_grid_seg_find(grid, NULL, tile);
   }
   
  +/* determine grid statistics */
  +act_rc_t 
  +act_grid_stat(
  +    act_grid_t *grid, 
  +    int *pchunks, 
  +    int *pbytes_mgmt, int *pbytes_used, int *pbytes_free, 
  +    int *ptiles_used, int *ptiles_free)
  +{
  +    act_grid_seg_t *seg;
  +    int chunks = 0;
  +    int bytes_mgmt = 0;
  +    int bytes_used = 0;
  +    int bytes_free = 0;
  +    int tiles_used = 0;
  +    int tiles_free = 0;
  +
  +    /* consistency checks */
  +    act_argcheck(grid != NULL);
  +
  +    /* determine statistic information */
  +    bytes_mgmt += sizeof(act_grid_t);
  +    chunks += 1;
  +    ACT_RING_FOREACH(seg, &grid->g_seg, act_grid_seg_t, gs_link) {
  +        chunks++;
  +        bytes_mgmt += sizeof(act_grid_seg_t);
  +        bytes_used += ((seg->gs_tile_num - seg->gs_tile_free_num) * grid->g_tile_size);
  +        bytes_free += (seg->gs_tile_free_num * grid->g_tile_size);
  +        tiles_used += (seg->gs_tile_num - seg->gs_tile_free_num);
  +        tiles_free += seg->gs_tile_free_num;
  +    }
  +
  +    /* pass statistic information to caller */
  +    if (pchunks != NULL)
  +        *pchunks = chunks;
  +    if (pbytes_mgmt != NULL)
  +        *pbytes_mgmt = bytes_mgmt;
  +    if (pbytes_used != NULL)
  +        *pbytes_used = bytes_used;
  +    if (pbytes_free != NULL)
  +        *pbytes_free = bytes_free;
  +    if (ptiles_used != NULL)
  +        *ptiles_used = tiles_used;
  +    if (ptiles_free != NULL)
  +        *ptiles_free = tiles_free;
  +
  +    return ACT_OK;
  +}
  +
  Index: ossp-pkg/act/act_grid.h
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 act_grid.h
  --- ossp-pkg/act/act_grid.h	18 Jan 2002 17:31:39 -0000	1.4
  +++ ossp-pkg/act/act_grid.h	19 Jan 2002 13:18:01 -0000	1.5
  @@ -34,8 +34,9 @@
   
   extern act_rc_t act_grid_create (act_grid_t **grid, act_ctx_t *ctx, size_t tile_size, int tile_num);
   extern act_rc_t act_grid_alloc  (act_grid_t  *grid, void **tile);
  -extern act_rc_t act_grid_free   (act_grid_t  *grid, void  *tile);
   extern act_rc_t act_grid_inside (act_grid_t  *grid, void  *tile);
  +extern act_rc_t act_grid_free   (act_grid_t  *grid, void  *tile);
  +extern act_rc_t act_grid_stat   (act_grid_t  *grid, int *chunks, int *bytes_mgmt, int *bytes_used, int *bytes_free, int *tiles_used, int *tiles_free);
   extern act_rc_t act_grid_destroy(act_grid_t  *grid);
   
   #endif /* __ACT_GRID_H__ */

From ossp-cvs-owner@ossp.org  Sat Jan 19 14:21:48 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 47054764D1; Sat, 19 Jan 2002 14:21:48 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/act act_grid.c
Message-Id: <20020119132148.47054764D1@mail.ossp.org>
Date: Sat, 19 Jan 2002 14:21:48 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   19-Jan-2002 14:21:48
  Branch: HEAD                             Handle: 2002011913214700

  Modified files:
    ossp-pkg/act            act_grid.c

  Log:
    add again support for freeing segments

  Summary:
    Revision    Changes     Path
    1.8         +4  -11     ossp-pkg/act/act_grid.c
  ____________________________________________________________________________

  Index: ossp-pkg/act/act_grid.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 act_grid.c
  --- ossp-pkg/act/act_grid.c	19 Jan 2002 13:18:01 -0000	1.7
  +++ ossp-pkg/act/act_grid.c	19 Jan 2002 13:21:47 -0000	1.8
  @@ -327,18 +327,11 @@
       ACT_LIST_INSERT_HEAD(&seg->gs_tile_free_list, tile, gt_link);
       seg->gs_tile_free_num++;
   
  -    /* free last segment if it is empty and if segment 
  -       before (this one here) is now also empty */
  -#if 0
  -    if (   seg->gs_tile_num == seg->gs_tile_free_num 
  -        && (seg_last = seg->gs_link) != NULL        ) {
  -        if (   seg_last->gs_tile_num == seg_last->gs_tile_free_num 
  -            && seg_last->gs_link == NULL                          ) {
  -               act_mem_free_ctx(grid->g_ctx, seg_last);
  -               seg->gs_link = NULL;
  -        }
  +    /* free segment if it is now empty */
  +    if (seg->gs_tile_num == seg->gs_tile_free_num) {
  +        ACT_RING_REMOVE(seg, gs_link);
  +        act_mem_free_ctx(grid->g_ctx, seg);
       }
  -#endif
   
       return ACT_OK;
   }

From ossp-cvs-owner@ossp.org  Sat Jan 19 14:28:55 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 86160764D1; Sat, 19 Jan 2002 14:28:55 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/act act_grid.c
Message-Id: <20020119132855.86160764D1@mail.ossp.org>
Date: Sat, 19 Jan 2002 14:28:55 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   19-Jan-2002 14:28:55
  Branch: HEAD                             Handle: 2002011913285500

  Modified files:
    ossp-pkg/act            act_grid.c

  Log:
    do not remove last remaining segment

  Summary:
    Revision    Changes     Path
    1.9         +6  -1      ossp-pkg/act/act_grid.c
  ____________________________________________________________________________

  Index: ossp-pkg/act/act_grid.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 act_grid.c
  --- ossp-pkg/act/act_grid.c	19 Jan 2002 13:21:47 -0000	1.8
  +++ ossp-pkg/act/act_grid.c	19 Jan 2002 13:28:55 -0000	1.9
  @@ -109,6 +109,7 @@
   struct act_grid_st {
       act_ctx_t                     *g_ctx;              /* context structure */
       ACT_RING_HEAD(act_grid_seg_t)  g_seg;              /* ring of segments */
  +    int                            g_seg_num;          /* number of segments */
       size_t                         g_tile_size;        /* size of a tile */
       int                            g_tile_num_first;   /* number of tiles in first segment */
   };
  @@ -192,6 +193,7 @@
       grid->g_ctx = act_ctx_dup(ctx, NULL);
       ACT_RING_INIT(&grid->g_seg, act_grid_seg_t, gs_link);
       ACT_RING_INSERT_HEAD(&grid->g_seg, seg, act_grid_seg_t, gs_link);
  +    grid->g_seg_num = 1;
       grid->g_tile_size = tile_size;
       grid->g_tile_num_first = tile_num;
   
  @@ -267,6 +269,7 @@
           if ((rc = act_grid_seg_create(grid->g_ctx, &seg, grid->g_tile_size, tile_num)) != ACT_OK)
               return rc;
           ACT_RING_INSERT_TAIL(&grid->g_seg, seg, act_grid_seg_t, gs_link);
  +        grid->g_seg_num++;
       }
   
       /* allocate tile from segment */
  @@ -328,8 +331,10 @@
       seg->gs_tile_free_num++;
   
       /* free segment if it is now empty */
  -    if (seg->gs_tile_num == seg->gs_tile_free_num) {
  +    if (   grid->g_seg_num > 1
  +        && seg->gs_tile_num == seg->gs_tile_free_num) {
           ACT_RING_REMOVE(seg, gs_link);
  +        grid->g_seg_num--;
           act_mem_free_ctx(grid->g_ctx, seg);
       }
   

From ossp-cvs-owner@ossp.org  Mon Jan 21 14:23:36 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3EFC1764D8; Mon, 21 Jan 2002 14:23:36 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val Makefile.in
Message-Id: <20020121132336.3EFC1764D8@mail.ossp.org>
Date: Mon, 21 Jan 2002 14:23:36 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   21-Jan-2002 14:23:36
  Branch: HEAD                             Handle: 2002012113233500

  Modified files:
    ossp-pkg/val            Makefile.in

  Log:
    fix global replace mistake

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/val/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/val/Makefile.in
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 Makefile.in
  --- ossp-pkg/val/Makefile.in	9 Jan 2002 10:44:28 -0000	1.1
  +++ ossp-pkg/val/Makefile.in	21 Jan 2002 13:23:35 -0000	1.2
  @@ -101,7 +101,7 @@
   	-$(RM) *.o *.lo
   
   distclean: clean
  -	-$(RM) config.log config.status config.val
  +	-$(RM) config.log config.status config.cache
   	-$(RM) Makefile config.h val-config
   	-$(RM) libtool
   

From ossp-cvs-owner@ossp.org  Mon Jan 21 14:24:27 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B14AF764F9; Mon, 21 Jan 2002 14:24:27 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val devtool.conf
Message-Id: <20020121132427.B14AF764F9@mail.ossp.org>
Date: Mon, 21 Jan 2002 14:24:27 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   21-Jan-2002 14:24:27
  Branch: HEAD                             Handle: 2002012113242700

  Modified files:
    ossp-pkg/val            devtool.conf

  Log:
    fix name of library

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/val/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/val/devtool.conf
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.conf
  --- ossp-pkg/val/devtool.conf	16 Jan 2002 14:09:18 -0000	1.3
  +++ ossp-pkg/val/devtool.conf	21 Jan 2002 13:24:27 -0000	1.4
  @@ -26,6 +26,6 @@
       make distclean >/dev/null 2>&1
       ./shtool fixperm -v .
       V=`./shtool version -l txt -d short VERSION`
  -    ./shtool tarball -o sa-${V}.tar.gz -d sa-${V} -u ossp -g ossp \
  +    ./shtool tarball -o val-${V}.tar.gz -d val-${V} -u ossp -g ossp \
                        -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf' -c 'gzip --best' .
   

From ossp-cvs-owner@ossp.org  Mon Jan 21 14:32:37 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A8E83764F0; Mon, 21 Jan 2002 14:32:37 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/path ChangeLog Makefile.in README TODO VERSION ac...
Message-Id: <20020121133237.A8E83764F0@mail.ossp.org>
Date: Mon, 21 Jan 2002 14:32:37 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   21-Jan-2002 14:32:37
  Branch: VENDOR                           Handle: 2002012113323401

  Added files:              (Branch: VENDOR)
    ossp-pkg/path           ChangeLog Makefile.in README TODO VERSION
                            aclocal.m4 configure.ac devtool devtool.conf
                            devtool.func path-config.in path.h path_abs2rel.c
                            path_basename.c path_dirname.c path_rel2abs.c
                            path_resolve.c path_test.c path_test.pl

  Log:
    Welcome OSSP path (filesystem path manipulation library)
    
    This is currently just a collection of reused components, assembled
    together from various vendor sources.
    
    [Release Tag: INITIAL]

  Summary:
    Revision    Changes     Path
    1.1.1.1     +9  -0      ossp-pkg/path/ChangeLog
    1.1.1.1     +112 -0     ossp-pkg/path/Makefile.in
    1.1.1.1     +12 -0      ossp-pkg/path/README
    1.1.1.1     +14 -0      ossp-pkg/path/TODO
    1.1.1.1     +6  -0      ossp-pkg/path/VERSION
    1.1.1.1     +117 -0     ossp-pkg/path/aclocal.m4
    1.1.1.1     +52 -0      ossp-pkg/path/configure.ac
    1.1.1.1     +47 -0      ossp-pkg/path/devtool
    1.1.1.1     +31 -0      ossp-pkg/path/devtool.conf
    1.1.1.1     +72 -0      ossp-pkg/path/devtool.func
    1.1.1.1     +145 -0     ossp-pkg/path/path-config.in
    1.1.1.1     +10 -0      ossp-pkg/path/path.h
    1.1.1.1     +129 -0     ossp-pkg/path/path_abs2rel.c
    1.1.1.1     +76 -0      ossp-pkg/path/path_basename.c
    1.1.1.1     +75 -0      ossp-pkg/path/path_dirname.c
    1.1.1.1     +141 -0     ossp-pkg/path/path_rel2abs.c
    1.1.1.1     +160 -0     ossp-pkg/path/path_resolve.c
    1.1.1.1     +40 -0      ossp-pkg/path/path_test.c
    1.1.1.1     +106 -0     ossp-pkg/path/path_test.pl
  ____________________________________________________________________________

  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/path/ChangeLog?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/path/Makefile.in?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/path/README?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/path/TODO?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/path/VERSION?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/path/aclocal.m4?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/path/configure.ac?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/path/devtool?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/path/devtool.conf?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/path/devtool.func?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/path/path-config.in?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/path/path.h?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/path/path_abs2rel.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/path/path_basename.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/path/path_dirname.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/path/path_rel2abs.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/path/path_resolve.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/path/path_test.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/path/path_test.pl?cvsroot=ossp&r1=NONE&r2=1.1.1.1

From ossp-cvs-owner@ossp.org  Mon Jan 21 14:32:38 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 89713764EE; Mon, 21 Jan 2002 14:32:37 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/path ChangeLog Makefile.in README TODO VERSION ac...
Message-Id: <20020121133237.89713764EE@mail.ossp.org>
Date: Mon, 21 Jan 2002 14:32:37 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   21-Jan-2002 14:32:37
  Branch: VENDOR                           Handle: 2002012113323401

  Added files:              (Branch: VENDOR)
    ossp-pkg/path           ChangeLog Makefile.in README TODO VERSION
                            aclocal.m4 configure.ac devtool devtool.conf
                            devtool.func path-config.in path.h path_abs2rel.c
                            path_basename.c path_dirname.c path_rel2abs.c
                            path_resolve.c path_test.c path_test.pl

  Log:
    Welcome OSSP path (filesystem path manipulation library)
    
    This is currently just a collection of reused components, assembled
    together from various vendor sources.
    
    [Release Tag: INITIAL]

  Summary:
    Revision    Changes     Path
    1.1.1.1     +9  -0      ossp-pkg/path/ChangeLog
    1.1.1.1     +112 -0     ossp-pkg/path/Makefile.in
    1.1.1.1     +12 -0      ossp-pkg/path/README
    1.1.1.1     +14 -0      ossp-pkg/path/TODO
    1.1.1.1     +6  -0      ossp-pkg/path/VERSION
    1.1.1.1     +117 -0     ossp-pkg/path/aclocal.m4
    1.1.1.1     +52 -0      ossp-pkg/path/configure.ac
    1.1.1.1     +47 -0      ossp-pkg/path/devtool
    1.1.1.1     +31 -0      ossp-pkg/path/devtool.conf
    1.1.1.1     +72 -0      ossp-pkg/path/devtool.func
    1.1.1.1     +145 -0     ossp-pkg/path/path-config.in
    1.1.1.1     +10 -0      ossp-pkg/path/path.h
    1.1.1.1     +129 -0     ossp-pkg/path/path_abs2rel.c
    1.1.1.1     +76 -0      ossp-pkg/path/path_basename.c
    1.1.1.1     +75 -0      ossp-pkg/path/path_dirname.c
    1.1.1.1     +141 -0     ossp-pkg/path/path_rel2abs.c
    1.1.1.1     +160 -0     ossp-pkg/path/path_resolve.c
    1.1.1.1     +40 -0      ossp-pkg/path/path_test.c
    1.1.1.1     +106 -0     ossp-pkg/path/path_test.pl
  ____________________________________________________________________________

  Index: ossp-pkg/path/ChangeLog
  ============================================================
  $ cvs update -p -r1.1.1.1 ChangeLog
  
    o Taken FreeBSD 3.4's realpath.c/realpath.3 and created path_resolve.c
      out of realpath.c, but support a size-restricted output buffer.
    o Taken abs2rel.c/abs2rel.3 and rel2abs.c/rel2abs.3 from
      PathConvert (http://www.tamacom.com/pathconvert/)
    o Cleaned up the sources (K&R -> ANSI C, indentation, use path_ prefix, etc.)
    o Added path.h
    o Merged PathConverts's test suite into path_test.{c,pl}
     
  Index: ossp-pkg/path/Makefile.in
  ============================================================
  $ cvs update -p -r1.1.1.1 Makefile.in
  ##
  ##  path - OSSP Path Library
  ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  ##
  ##  This file is part of OSSP path, a filesystem path manipulation library
  ##  which can be found at http://www.ossp.org/pkg/path/.
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  Makefile.in: make(1) build procedure
  ##
  
  @SET_MAKE@
  
  DESTDIR     =
  prefix      = @prefix@
  exec_prefix = @exec_prefix@
  bindir      = @bindir@
  libdir      = @libdir@
  includedir  = @includedir@
  mandir      = @mandir@
  
  CC          = @CC@
  CPPFLAGS    = @CPPFLAGS@
  CFLAGS      = @DEFS@ @CFLAGS@
  LDFLAGS     = @LDFLAGS@
  LIBS        = @LIBS@
  RM          = rm -f
  RMDIR       = rmdir
  SHTOOL      = ./shtool
  LIBTOOL     = ./libtool
  TRUE        = true
  
  LIB_NAME    = libpath.la
  LIB_OBJS    = path_abs2rel.lo path_rel2abs.lo path_resolve.lo path_dirname.lo path_basename.lo 
  
  TST_NAME    = path_test
  TST_OBJS    = path_test.o
  
  .SUFFIXES:
  .SUFFIXES: .c .o .lo
  
  all: $(LIB_NAME) $(TST_NAME)
  
  .c.o:
  	$(CC) $(CPPFLAGS) $(CFLAGS) -c $<
  
  .c.lo:
  	@$(LIBTOOL) --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS) -c $<
  
  $(LIB_NAME): $(LIB_OBJS)
  	@$(LIBTOOL) --mode=link $(CC) -o $(LIB_NAME) $(LIB_OBJS) -rpath $(libdir) \
  	    -version-info `$(SHTOOL) version -l txt -d libtool VERSION`
  
  $(TST_NAME): $(TST_OBJS) $(LIB_NAME)
  	@$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $(TST_NAME) $(TST_OBJS) $(LIB_NAME) $(LIBS)
  
  check: $(TST_NAME)
  	@$(LIBTOOL) --mode=execute ./$(TST_NAME)
  
  install:
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(includedir)
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libdir)
  	$(SHTOOL) install -c -m 755 path-config $(DESTDIR)$(bindir)/
  	$(SHTOOL) install -c -m 644 path.h $(DESTDIR)$(includedir)/
  	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libpath.la $(DESTDIR)$(libdir)/
  
  uninstall:
  	@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libpath.la
  	-$(RM) $(DESTDIR)$(includedir)/path.h
  	-$(RM) $(DESTDIR)$(bindir)/path-config
  	-$(RMDIR) $(DESTDIR)$(libdir) >/dev/null 2>&1 || $(TRUE)
  	-$(RMDIR) $(DESTDIR)$(includedir) >/dev/null 2>&1 || $(TRUE)
  	-$(RMDIR) $(DESTDIR)$(bindir) >/dev/null 2>&1 || $(TRUE)
  	-$(RMDIR) $(DESTDIR)$(prefix) >/dev/null 2>&1 || $(TRUE)
  
  clean:
  	-$(RM) $(LIB_NAME) $(LIB_OBJS)
  	-$(RM) $(TST_NAME) $(TST_OBJS)
  	-$(RM) -r .libs >/dev/null 2>&1 || $(TRUE)
  	-$(RM) *.o *.lo
  
  distclean: clean
  	-$(RM) config.log config.status config.cache
  	-$(RM) Makefile config.h path-config
  	-$(RM) libtool
  
  realclean: distclean
  	-$(RM) configure config.h.in
  	-$(RM) shtool
  	-$(RM) ltmain.sh libtool.m4 config.guess config.sub
  
  Index: ossp-pkg/path/README
  ============================================================
  $ cvs update -p -r1.1.1.1 README
     ____       _   _     
    |  _ \ __ _| |_| |__  
    | |_) / _` | __| '_ \ 
    |  __/ (_| | |_| | | |
    |_|   \__,_|\__|_| |_|
  
    Path - Filesystem Path Manipulation Library
                        
    This product includes software developed by the University of California,
    Berkeley and its contributors. This product includes software developed by
    Shigio Yamaguchi.
  
  Index: ossp-pkg/path/TODO
  ============================================================
  $ cvs update -p -r1.1.1.1 TODO
  
  - add path_tmpfile() from BSD tmpfile(3) stuff
  - add glob(*) from shpat
  - add fnmatch(*) from shpat
  - add tilde() from shpath/bres or bash-2.05a
  
  - merge with shpat und proc/getcwd
  
  - MAXPATHLEN should be PATH_MAXPATHLEN und
    per AUtoconf herausgegfunden weredse
  - path_test.pl in C umschreiben und in path_test.c einbauen
  - path_test.c um path_resolve() checks erweitern
  - path.pod per pod2man convertieren
  
  Index: ossp-pkg/path/VERSION
  ============================================================
  $ cvs update -p -r1.1.1.1 VERSION
  
    VERSION -- Version Information for OSSP path (syntax: Text)
    [automatically generated and maintained by GNU shtool]
  
    This is OSSP path, Version 0.1.0 (21-Jan-2002)
  
  Index: ossp-pkg/path/aclocal.m4
  ============================================================
  $ cvs update -p -r1.1.1.1 aclocal.m4
  dnl ##
  dnl ##  val - OSSP Value Library
  dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  dnl ##
  dnl ##  This file is part of OSSP val, a Value library which
  dnl ##  can be found at http://www.ossp.org/pkg/val/.
  dnl ##
  dnl ##  Permission to use, copy, modify, and distribute this software for
  dnl ##  any purpose with or without fee is hereby granted, provided that
  dnl ##  the above copyright notice and this permission notice appear in all
  dnl ##  copies.
  dnl ##
  dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  dnl ##  SUCH DAMAGE.
  dnl ##
  dnl ##  aclocal.m4: GNU Autoconf local macro definitions
  dnl ##
  
  dnl ##
  dnl ##  Check whether compiler option works
  dnl ##
  dnl ##  configure.in:
  dnl ##    AC_COMPILER_OPTION(<name>, <display>, <option>,
  dnl ##                       <action-success>, <action-failure>)
  dnl ##
  
  AC_DEFUN(AC_COMPILER_OPTION,[dnl
  AC_MSG_CHECKING(whether compiler option(s) $2 work)
  AC_CACHE_VAL(ac_cv_compiler_option_$1,[
  SAVE_CFLAGS="$CFLAGS"
  CFLAGS="$CFLAGS $3"
  AC_TRY_COMPILE([],[], ac_cv_compiler_option_$1=yes, ac_cv_compiler_option_$1=no)
  CFLAGS="$SAVE_CFLAGS"
  ])dnl
  if test ".$ac_cv_compiler_option_$1" = .yes; then
      ifelse([$4], , :, [$4])
  else
      ifelse([$5], , :, [$5])
  fi
  AC_MSG_RESULT([$ac_cv_compiler_option_$1])
  ])dnl
  
  dnl ##
  dnl ##  Debugging Support
  dnl ##
  dnl ##  configure.in:
  dnl ##    AC_CHECK_DEBUGGING
  dnl ##
  
  AC_DEFUN(AC_CHECK_DEBUGGING,[dnl
  AC_ARG_ENABLE(debug,dnl
  [  --enable-debug          build for debugging (default=no)],
  [dnl
  if test ".$ac_cv_prog_gcc" = ".yes"; then
      case "$CFLAGS" in
          *-O* ) ;;
             * ) CFLAGS="$CFLAGS -O2" ;;
      esac
      case "$CFLAGS" in
          *-g* ) ;;
             * ) CFLAGS="$CFLAGS -g" ;;
      esac
      case "$CFLAGS" in
          *-pipe* ) ;;
                * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
      esac
      AC_COMPILER_OPTION(defdbg, -DDEBUG, -DDEBUG, CFLAGS="$CFLAGS -DDEBUG")
      AC_COMPILER_OPTION(ggdb3, -ggdb3, -ggdb3, CFLAGS="$CFLAGS -ggdb3")
      CFLAGS="$CFLAGS -pedantic"
      CFLAGS="$CFLAGS -Wall"
      WMORE="-Wshadow -Wpointer-arith -Wcast-align -Winline"
      WMORE="$WMORE -Wmissing-prototypes -Wmissing-declarations -Wnested-externs"
      AC_COMPILER_OPTION(wmore, -W<xxx>, $WMORE, CFLAGS="$CFLAGS $WMORE")
      AC_COMPILER_OPTION(wnolonglong, -Wno-long-long, -Wno-long-long, CFLAGS="$CFLAGS -Wno-long-long")
  else
      case "$CFLAGS" in
          *-g* ) ;;
             * ) CFLAGS="$CFLAGS -g" ;;
      esac
  fi
  msg="enabled"
  ],[
  if test ".$ac_cv_prog_gcc" = ".yes"; then
  case "$CFLAGS" in
      *-pipe* ) ;;
            * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
  esac
  fi
  case "$CFLAGS" in
      *-g* ) CFLAGS=`echo "$CFLAGS" |\
                     sed -e 's/ -g / /g' -e 's/ -g$//' -e 's/^-g //g' -e 's/^-g$//'` ;;
  esac
  case "$CXXFLAGS" in
      *-g* ) CXXFLAGS=`echo "$CXXFLAGS" |\
                       sed -e 's/ -g / /g' -e 's/ -g$//' -e 's/^-g //g' -e 's/^-g$//'` ;;
  esac
  msg=disabled
  ])dnl
  AC_MSG_CHECKING(for compilation debug mode)
  AC_MSG_RESULT([$msg])
  if test ".$msg" = .enabled; then
      enable_shared=no
  fi
  ])
  
  Index: ossp-pkg/path/configure.ac
  ============================================================
  $ cvs update -p -r1.1.1.1 configure.ac
  dnl ##
  dnl ##  path - OSSP Path Library
  dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  dnl ##
  dnl ##  This file is part of OSSP path, a filesystem path manipulation library
  dnl ##  which can be found at http://www.ossp.org/pkg/path/.
  dnl ##
  dnl ##  Permission to use, copy, modify, and distribute this software for
  dnl ##  any purpose with or without fee is hereby granted, provided that
  dnl ##  the above copyright notice and this permission notice appear in all
  dnl ##  copies.
  dnl ##
  dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  dnl ##  SUCH DAMAGE.
  dnl ##
  dnl ##  configure.ac: GNU Autoconf source script
  dnl ##
  
  AC_PREREQ(2.52)
  AC_REVISION(1.0)
  AC_INIT(README)
  
  AC_DIVERT_PUSH(NOTICE)
  V=`./shtool version -l txt -d long VERSION`
  ./shtool echo -e "Configuring %BOSSP path%b (Filesystem Path Library), Version %B${V}%b"
  AC_DIVERT_POP()
  
  AC_SET_MAKE
  AC_PROG_CC
  AC_CHECK_DEBUGGING
  
  sinclude(libtool.m4)
  AC_PROG_LIBTOOL
  
  AC_CONFIG_HEADERS(config.h)
  AC_CONFIG_FILES(Makefile path-config)
  AC_OUTPUT
  
  chmod a+x path-config
  
  Index: ossp-pkg/path/devtool
  ============================================================
  $ cvs update -p -r1.1.1.1 devtool
  #!/bin/sh
  ##
  ##  devtool -- Development Tool
  ##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  if [ $# -eq 0 ]; then
      echo "devtool:USAGE: devtool <command> [<arg> ...]" 1>&2
      exit 1
  fi
  
  cmd="$1"
  shift
  
  devtoolfunc="./devtool.func"
  
  if [ ! -f devtool.conf ]; then
      echo "devtool:ERROR: no devtool.conf in current directory" 1>&2
      exit 1
  fi
  
  cmdline=`grep "^%$cmd" devtool.conf`
  if [ ".$cmdline" = . ]; then
      echo "devtool:ERROR: command $cmd not found in devtool.conf" 1>&2
      exit 1
  fi
  
  if [ ".$TMPDIR" != . ]; then
      tmpdir="$TMPDIR"
  elif [ ".$TEMPDIR" != . ]; then
      tmpdir="$TEMPDIR"
  else
      tmpdir="/tmp"
  fi
  tmpfile="$tmpdir/rc.$$.tmp"
  
  rm -f $tmpfile
  touch $tmpfile
  echo ". $devtoolfunc" >>$tmpfile
  ( sed <devtool.conf -e "1,/^%common/d" -e '/^%.*/,$d'
    sed <devtool.conf -e "1,/^%$cmd/d" -e '/^%.*/,$d' ) |\
  sed -e 's;\([ 	]\)@\([a-zA-Z_][a-zA-Z0-9_]*\);\1devtool_\2;' >>$tmpfile
  
  sh $tmpfile "$@"
  
  rm -f $tmpfile >/dev/null 2>&1 || true
  
  Index: ossp-pkg/path/devtool.conf
  ============================================================
  $ cvs update -p -r1.1.1.1 devtool.conf
  ##
  ##  devtool.conf -- Development Tool Configuration
  ##
  
  %autogen
      @autogen shtool   1.5.4 "1.5.*" all
      @autogen libtool  1.4.2 "1.4*"
      @autogen autoconf 2.52  "2.5.*"
  
  %autoclean
      @autoclean shtool
      @autoclean libtool
      @autoclean autoconf
  
  %configure
      ./configure \
          --prefix=/tmp/path \
          --disable-shared \
          --enable-debug \
          "$@"
  
  %version
      ./shtool version -l txt -n "OSSP path" -e VERSION
  
  %dist
      make distclean >/dev/null 2>&1
      ./shtool fixperm -v .
      V=`./shtool version -l txt -d short VERSION`
      ./shtool tarball -o path-${V}.tar.gz -d path-${V} -u ossp -g ossp \
                       -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf' -c 'gzip --best' .
  
  Index: ossp-pkg/path/devtool.func
  ============================================================
  $ cvs update -p -r1.1.1.1 devtool.func
  ##
  ##  devtool.func -- Development Tool Functions
  ##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  devtool_require () {
      t="$1"; o="$2"; p="$3"; e="$4"; a="$5"
      v=`($t $o | head -1 | awk "{ print \\\$$p; }") 2>/dev/null`
      if [ ".$v" = . ]; then
          echo "devtool:ERROR: unable to determine version of $t" 1>&2
          exit 1
      fi
      case "$v" in
          $e )
              ;;
          $a )
              echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
              ;;
          * )
              echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
              exit 1
              ;;
      esac
      echo "$v"
  }
  
  devtool_autogen () {
      tool=$1
      shift
      case $tool in
          autoconf )
              autoconf_version=`devtool_require autoconf --version 4 "$1" "$2"`
              echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
              autoconf
              autoheader 2>&1 | grep -v "is unchanged"
              ;;
          libtool )
              libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
              echo "generating (GNU Libtool $libtoolize_version): ltmain.sh, libtool.m4, config.guess, config.sub"
              libtoolize --force --copy >/dev/null 2>&1
              cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
                  sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` libtool.m4
              ;;
          shtool )
              shtoolize_version=`devtool_require shtoolize -v 3 "$1" "$2"`
              echo "generating (GNU Shtool $shtoolize_version): shtool"
              shift
              shift
              shtoolize -q "$@"
              ;;
      esac
  }
  
  devtool_autoclean () {
      tool=$1
      shift
      case $tool in
          autoconf )
              echo "removing: configure config.h.in"
              rm -f configure config.h.in
              ;;
          libtool )
              echo "removing: ltmain.sh libtool.m4 config.guess config.sub"
              rm -f ltmain.sh libtool.m4 config.guess config.sub
              ;;
          shtool )
              echo "removing: shtool"
              rm -f shtool
              ;;
      esac
  }
  
  Index: ossp-pkg/path/path-config.in
  ============================================================
  $ cvs update -p -r1.1.1.1 path-config.in
  #!/bin/sh
  ##
  ##  path - OSSP Path Library
  ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  ##
  ##  This file is part of OSSP path, a filesystem path manipulation library
  ##  which can be found at http://www.ossp.org/pkg/path/.
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  path-config.in: library build utility
  ##
  
  DIFS=' 	
  '
  
  prefix="@prefix@"
  exec_prefix="@exec_prefix@"
  
  my_prefix="$prefix"
  my_exec_prefix="$exec_prefix"
  my_bindir="@bindir@"
  my_libdir="@libdir@"
  my_includedir="@includedir@"
  my_mandir="@mandir@"
  my_datadir="@datadir@"
  my_acdir="@datadir@/aclocal"
  my_cflags="@CFLAGS@"
  my_ldflags="@LDFLAGS@"
  my_libs="@LIBS@"
  my_version="@PATH_VERSION_STR@"
  
  help=no
  version=no
  
  usage="path-config"
  usage="$usage [--help] [--version] [--all]"
  usage="$usage [--prefix] [--exec-prefix] [--bindir] [--libdir] [--includedir] [--mandir] [--datadir] [--acdir]"
  usage="$usage [--cflags] [--ldflags] [--libs]"
  if [ $# -eq 0 ]; then
      echo "path-config:Error: Invalid option" 1>&2
      echo "path-config:Usage: $usage" 1>&2
      exit 1
  fi
  output=''
  output_extra=''
  all=no
  prev=''
  OIFS="$IFS" IFS="$DIFS"
  for option
  do
      if [ ".$prev" != . ]; then
          eval "$prev=\$option"
          prev=''
          continue
      fi
      case "$option" in
          -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
             *) optarg='' ;;
      esac
      case "$option" in
          --help|-h)
              echo "Usage: $usage"
              exit 0
              ;;
          --version|-v)
              echo "OSSP path $my_version"
              exit 0
              ;;
          --all)
              all=yes
              ;;
          --prefix)
              output="$output $my_prefix"
              ;;
          --exec-prefix)
              output="$output $my_exec_prefix"
              ;;
          --bindir)
              output="$output $my_bindir"
              ;;
          --libdir)
              output="$output $my_libdir"
              ;;
          --includedir)
              output="$output $my_includedir"
              ;;
          --mandir)
              output="$output $my_mandir"
              ;;
          --datadir)
              output="$output $my_datadir"
              ;;
          --acdir)
              output="$output $my_acdir"
              ;;
          --cflags)
              output="$output -I$my_includedir"
              output_extra="$output_extra $my_cflags"
              ;;
          --ldflags)
              output="$output -L$my_libdir"
              output_extra="$output_extra $my_ldflags"
              ;;
          --libs)
              output="$output -lpath"
              output_extra="$output_extra $my_libs"
              ;;
          * )
              echo "sa-config:Error: Invalid option" 1>&2
              echo "sa-config:Usage: $usage" 1>&2
              exit 1;
              ;;
      esac
  done
  IFS="$OIFS"
  if [ ".$prev" != . ]; then
      echo "path-config:Error: missing argument to --`echo $prev | sed 's/_/-/g'`" 1>&2
      exit 1
  fi
  if [ ".$output" != . ]; then
      if [ ".$all" = .yes ]; then
          output="$output $output_extra"
      fi
      echo $output
  fi
  
  Index: ossp-pkg/path/path.h
  ============================================================
  $ cvs update -p -r1.1.1.1 path.h
  #ifndef _PATH_H_
  #define _PATH_H_
  
  char *path_abs2rel  (char *, size_t, const char *, const char *);
  char *path_rel2abs  (char *, size_t, const char *, const char *);
  char *path_resolve  (char *, size_t, const char *);
  char *path_dirname  (char *, size_t, const char *);
  char *path_basename (char *, size_t, const char *);
  
  #endif /* _PATH_H_ */
  Index: ossp-pkg/path/path_abs2rel.c
  ============================================================
  $ cvs update -p -r1.1.1.1 path_abs2rel.c
  
  /*
   * Copyright (c) 1997 Shigio Yamaguchi. All rights reserved.
   * Copyright (c) 1999 Tama Communications Corporation. All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in the
   *    documentation and/or other materials provided with the distribution.
   * 3. All advertising materials mentioning features or use of this software
   *    must display the following acknowledgement:
   *      This product includes software developed by Tama Communications
   *      Corporation.
   * 4. Neither the name of the author nor the names of any co-contributors
   *    may be used to endorse or promote products derived from this software
   *    without specific prior written permission.
   *
   * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   */
  
  #include <errno.h>
  #include <stdlib.h>
  #include <string.h>
  
  #include "path.h"
  
  /*
   * abs2rel: convert an absolute path name into relative.
   */
  char *
  path_abs2rel(
      char *result,
      size_t size,
      const char *path,
      const char *base)
  {
      const char *pp, *bp, *branch;
      const char *endp;
      char *rp;
  
      /* endp points the last position which is safe in the result buffer. */
      endp = result + size - 1;
  
      if (*path != '/') {
          if (strlen(path) >= size)
              goto erange;
          strcpy(result, path);
          goto finish;
      } 
      else if (*base != '/' || !size) {
          errno = EINVAL;
          return NULL;
      } 
      else if (size == 1) {
          goto erange;
      }
  
      /*
       * seek to branched point.
       */
      branch = path;
      for (pp = path, bp = base; *pp && *bp && *pp == *bp; pp++, bp++)
          if (*pp == '/')
              branch = pp;
      if ((*pp == 0 || (*pp == '/' && *(pp + 1) == 0)) &&
          (*bp == 0 || (*bp == '/' && *(bp + 1) == 0))) {
          rp = result;
          *rp++ = '.';
          if (*pp == '/' || *(pp - 1) == '/')
              *rp++ = '/';
          if (rp > endp)
              goto erange;
          *rp = 0;
          goto finish;
      }
      if ((*pp == 0 && *bp == '/') || (*pp == '/' && *bp == 0))
          branch = pp;
  
      /*
       * up to root.
       */
      rp = result;
      for (bp = base + (branch - path); *bp; bp++) {
          if (*bp == '/' && *(bp + 1) != 0) {
              if (rp + 3 > endp)
                  goto erange;
              *rp++ = '.';
              *rp++ = '.';
              *rp++ = '/';
          }
      }
      if (rp > endp)
          goto erange;
      *rp = 0;
  
      /*
       * down to leaf.
       */
      if (*branch) {
          if (rp + strlen(branch + 1) > endp)
              goto erange;
          strcpy(rp, branch + 1);
      } 
      else {
          *--rp = 0;
      }
  
  finish:
      return result;
  
  erange:
      errno = ERANGE;
      return NULL;
  }
  
  Index: ossp-pkg/path/path_basename.c
  ============================================================
  $ cvs update -p -r1.1.1.1 path_basename.c
  
  /*-
   * Copyright (c) 2000 Chris Costello <chris@FreeBSD.org>
   * All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in the
   *    documentation and/or other materials provided with the distribution.
   *
   * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   *
   */
  
  #include <string.h>
  #include <sys/param.h>
  
  #include "path.h"
  
  char *
  path_basename(
  	char *outbuf,
      size_t outsize,
  	const char *path)
  {
  	const char *cp;
  	size_t len;
      int n;
  
      /* argument consistency check */
  	if (path == NULL || *path == '\0')
  		return (strncpy(outbuf, ".", outsize));
  
      /* skip leading slashes */ 
  	len = strspn(path, "/");
  	if (len > 0)
  		path += len - 1;
  	if (path[0] == '/' && path[1] == '\0')
  		return (strncpy(outbuf, "/", outsize));
  
  	/* skip trailing slashes. */
  	len = strlen(path) - 1;
  	for (; len > 0 && path[len] == '/'; len--)
  		;
  	cp = path + len;
  
  	/* look for the beginning of the final path component */
  	for (; *cp != '/' && cp > path; cp--)
  		;
  
      /* copy basename to result buffer */
      if (cp != path)
          cp++; /* the path consisted of more than one component */
  	n = len - (cp - path) + 1;
      if (n > MAXPATHLEN)
          n = MAXPATHLEN;
      strncpy(outbuf, cp, n);
      outbuf[n] = '\0';
  
  	return outbuf;
  }
  
  Index: ossp-pkg/path/path_dirname.c
  ============================================================
  $ cvs update -p -r1.1.1.1 path_dirname.c
  
  /*-
   * Copyright (c) 2000 Chris Costello <chris@FreeBSD.org>
   * All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in the
   *    documentation and/or other materials provided with the distribution.
   *
   * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   *
   *  $FreeBSD$
   */
  
  #include <sys/param.h>
  #include <errno.h>
  #include <string.h>
  
  #include "path.h"
  
  char *
  path_dirname(
      char *outbuf,
      size_t outsize,
      const char *path)
  {
      const char *cp;
      int n;
  
      /* argument consistency check */
      if (path == NULL || path[0] == '\0')
          return (strncpy(outbuf, ".", outsize));
  
      /* skip trailing slashes */
      cp = path + strlen(path) - 1;
      for (; cp > path && *cp == '/'; cp--)
          ;
      if (cp == path)
          return (strncpy(outbuf, "/", outsize));
  
      /* skip last path component */
      for (; cp > path && *cp != '/'; cp--)
          ;
      if (cp == path && *cp != '/')
          return (strncpy(outbuf, ".", outsize));
  
      /* skip slashes off before the final path component */
      for (; cp > path && *cp == '/'; cp--)
          ;
  
      /* copy directory to output buffer */
      n = cp - path + 1;
      if (n > MAXPATHLEN)
          n = MAXPATHLEN;
      strncpy(outbuf, path, n);
      outbuf[n] = '\0';
  
      return outbuf;
  }
  
  Index: ossp-pkg/path/path_rel2abs.c
  ============================================================
  $ cvs update -p -r1.1.1.1 path_rel2abs.c
  
  /*
   * Copyright (c) 1997 Shigio Yamaguchi. All rights reserved.
   * Copyright (c) 1999 Tama Communications Corporation. All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in the
   *    documentation and/or other materials provided with the distribution.
   * 3. All advertising materials mentioning features or use of this software
   *    must display the following acknowledgement:
   *      This product includes software developed by Tama Communications
   *      Corporation.
   * 4. Neither the name of the author nor the names of any co-contributors
   *    may be used to endorse or promote products derived from this software
   *    without specific prior written permission.
   *
   * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   */
  
  #include <errno.h>
  #include <stdlib.h>
  #include <string.h>
  
  #include "path.h"
  
  /*
   * rel2abs: convert an relative path name into absolute.
   */
  char *
  path_rel2abs(
      char *result,
      size_t size,
      const char *path,
      const char *base)
  {
      const char *pp, *bp;
      const char *endp;
      char *rp;
      int length;
  
      /* endp points the last position which is safe in the result buffer. */
      endp = result + size - 1;
  
      if (*path == '/') {
          if (strlen(path) >= size)
              goto erange;
          strcpy(result, path);
          goto finish;
      } 
      else if (*base != '/' || !size) {
          errno = EINVAL;
          return (NULL);
      } 
      else if (size == 1) {
          goto erange;
      }
  
      if (!strcmp(path, ".") || !strcmp(path, "./")) {
          if (strlen(base) >= size)
              goto erange;
          strcpy(result, base);
  
          /* rp points the last char. */
          rp = result + strlen(base) - 1;
          if (*rp == '/')
              *rp = 0;
          else
              rp++;
  
          /* rp point NULL char */
          if (*++path == '/') {
              /* Append '/' to the tail of path name. */
              *rp++ = '/';
              if (rp > endp)
                  goto erange;
              *rp = 0;
          }
          goto finish;
      }
      bp = base + strlen(base);
      if (*(bp - 1) == '/')
          --bp;
  
      /*
       * up to root.
       */
      for (pp = path; *pp && *pp == '.'; ) {
          if (!strncmp(pp, "../", 3)) {
              pp += 3;
              while (bp > base && *--bp != '/')
                  ;
          } 
          else if (!strncmp(pp, "./", 2)) {
              pp += 2;
          } 
          else if (!strncmp(pp, "..\0", 3)) {
              pp += 2;
              while (bp > base && *--bp != '/')
                  ;
          } 
          else
              break;
      }
  
      /*
       * down to leaf.
       */
      length = bp - base;
      if (length >= size)
          goto erange;
      strncpy(result, base, length);
      rp = result + length;
      if (*pp || *(pp - 1) == '/' || length == 0)
          *rp++ = '/';
      if (rp + strlen(pp) > endp)
          goto erange;
      strcpy(rp, pp);
  
  finish:
      return result;
  
  erange:
      errno = ERANGE;
      return (NULL);
  }
  
  Index: ossp-pkg/path/path_resolve.c
  ============================================================
  $ cvs update -p -r1.1.1.1 path_resolve.c
  
  /*
   * Copyright (c) 1994
   *  The Regents of the University of California.  All rights reserved.
   *
   * This code is derived from software contributed to Berkeley by
   * Jan-Simon Pendry.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in the
   *    documentation and/or other materials provided with the distribution.
   * 3. All advertising materials mentioning features or use of this software
   *    must display the following acknowledgement:
   *       This product includes software developed by the University of
   *       California, Berkeley and its contributors.
   * 4. Neither the name of the University nor the names of its contributors
   *    may be used to endorse or promote products derived from this software
   *    without specific prior written permission.
   *
   * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   */
  
  #include <errno.h>
  #include <fcntl.h>
  #include <stdlib.h>
  #include <string.h>
  #include <unistd.h>
  #include <sys/param.h>
  #include <sys/stat.h>
  
  #include "path.h"
  
  char *
  path_resolve(
      char *outbuf,
      size_t outsize,
      const char *path)
  {
      struct stat sb;
      int fd, n, rootd, serrno;
      char *p, *q, wbuf[MAXPATHLEN];
      char resolved[MAXPATHLEN];
      int symlinks = 0;
  
      /* save the starting point */
      if ((fd = open(".", O_RDONLY)) < 0) {
          strcpy(resolved, ".");
          return NULL;
      }
  
      /*
       * Find the dirname and basename from the path to be resolved.
       * Change directory to the dirname component.
       * lstat() the basename part.
       *     if it is a symlink, read in the value and loop.
       *     if it is a directory, then change to that directory.
       * get the current directory name and append the basename.
       */
      strncpy(resolved, path, MAXPATHLEN - 1);
      resolved[MAXPATHLEN-1] = '\0';
  loop:
      if ((q = strrchr(resolved, '/')) != NULL) {
          p = q + 1;
          if (q == resolved)
              q = "/";
          else {
              do {
                  --q;
              } while (q > resolved && *q == '/');
              q[1] = '\0';
              q = resolved;
          }
          if (chdir(q) < 0)
              goto err1;
      } else
          p = resolved;
  
      /* Deal with the last component. */
      if (*p != '\0' && lstat(p, &sb) == 0) {
          if (S_ISLNK(sb.st_mode)) {
              if (++symlinks > MAXSYMLINKS) {
                  errno = ELOOP;
                  goto err1;
              }
              n = readlink(p, resolved, MAXPATHLEN - 1);
              if (n < 0)
                  goto err1;
              resolved[n] = '\0';
              goto loop;
          }
          if (S_ISDIR(sb.st_mode)) {
              if (chdir(p) < 0)
                  goto err1;
              p = "";
          }
      }
  
      /*
       * Save the last component name and get the full pathname of
       * the current directory.
       */
      strcpy(wbuf, p);
      if (getcwd(resolved, MAXPATHLEN) == 0)
          goto err1;
  
      /*
       * Join the two strings together, ensuring that the right thing
       * happens if the last component is empty, or the dirname is root.
       */
      if (resolved[0] == '/' && resolved[1] == '\0')
          rootd = 1;
      else
          rootd = 0;
  
      if (*wbuf) {
          if (strlen(resolved) + strlen(wbuf) + rootd + 1 > MAXPATHLEN) {
              errno = ENAMETOOLONG;
              goto err1;
          }
          if (rootd == 0)
              strcat(resolved, "/");
          strcat(resolved, wbuf);
      }
  
      /* Go back to where we came from. */
      if (fchdir(fd) < 0) {
          serrno = errno;
          goto err2;
      }
  
      /* It's okay if the close fails, what's an fd more or less? */
      close(fd);
      strncpy(outbuf, resolved, outsize);
      outbuf[outsize-1] = '\0';
      return outbuf;
  
  err1:   
      serrno = errno;
      fchdir(fd);
  err2:
      close(fd);
      errno = serrno;
      return NULL;
  }
  
  Index: ossp-pkg/path/path_test.c
  ============================================================
  $ cvs update -p -r1.1.1.1 path_test.c
  
  #include <stdio.h>
  #include <stdlib.h>
  #include <errno.h>
  #include <unistd.h>
  #include <string.h>
  #include <sys/param.h>
  
  #include "path.h"
  
  int main(int argc, char *argv[])
  {
  	char result[MAXPATHLEN];
  	char cwd[MAXPATHLEN];
      char *rv;
  
  	if (argc < 3) {
  		fprintf(stderr, "usage: test abs2rel|rel2abs path [base]\n");
  		exit(1);
  	}
  	if (argc == 3) {
  		if (getcwd(cwd, MAXPATHLEN) == NULL) {
  			fprintf(stderr, "cannot get current directory.\n");
  			exit(1);
  		}
  	} else
  		strcpy(cwd, argv[3]);
  	
      if (strcmp(argv[1], "abs2rel") == 0)
  	    rv = path_abs2rel(result, MAXPATHLEN, argv[2], cwd);
      else                                                  
  	    rv = path_rel2abs(result, MAXPATHLEN, argv[2], cwd);
          
      if (rv != NULL)
  		printf("%s\n", result);
  	else
  		printf("ERROR\n");
  	exit(0);
  }
  
  Index: ossp-pkg/path/path_test.pl
  ============================================================
  $ cvs update -p -r1.1.1.1 path_test.pl
  
  @abs2rel = (
          'a/b/c          /               a/b/c',
          'a/b/c          /a              a/b/c',
          '/a/b/c         a               ERROR',
  );
  
  @rel2abs = (
          '/a/b/c         /               /a/b/c',
          '/a/b/c         /a              /a/b/c',
          'a/b/c          a               ERROR',
          '..             /a              /',
          '../            /a              /',
          '../..          /a              /',
          '../../         /a              /',
          '../../..       /a              /',
          '../../../      /a              /',
          '../b           /a              /b',
          '../b/          /a              /b/',
          '../../b        /a              /b',
          '../../b/       /a              /b/',
          '../../../b     /a              /b',
          '../../../b/    /a              /b/',
          '../b/c         /a              /b/c',
          '../b/c/        /a              /b/c/',
          '../../b/c      /a              /b/c',
          '../../b/c/     /a              /b/c/',
          '../../../b/c   /a              /b/c',
          '../../../b/c/  /a              /b/c/',
  );
  
  @common = (
          '/a/b/c         /a/b/c          .',
          '/a/b/c         /a/b/           c',
          '/a/b/c         /a/b            c',
          '/a/b/c         /a/             b/c',
          '/a/b/c         /a              b/c',
          '/a/b/c         /               a/b/c',
          '/a/b/c         /a/b/c          .',
          '/a/b/c         /a/b/c/         .',
          '/a/b/c/        /a/b/c          ./',
          '/a/b/          /a/b/c          ../',
          '/a/b           /a/b/c          ..',
          '/a/            /a/b/c          ../../',
          '/a             /a/b/c          ../..',
          '/              /a/b/c          ../../../',
          '/a/b/c         /a/b/z          ../c',
          '/a/b/c         /a/y/z          ../../b/c',
          '/a/b/c         /x/y/z          ../../../a/b/c',
  );
  
  $cnt = 0;
  $progname = './path_test';
  
  foreach (@abs2rel) {
      @d = split;
      chop($result = `./$progname abs2rel $d[0] $d[1]`);
      if ($d[2] eq $result) {
          print STDERR "OK: abs2rel: $d[0] $d[1] -> $result\n";
      } else {
          print STDERR "ERROR: abs2rel: $d[0] $d[1] -> $result (It should be '$d[2]')\n";
          $cnt++;
      }
  }
  foreach (@common) {
      @d = split;
      chop($result = `./$progname abs2rel $d[0] $d[1]`);
      if ($d[2] eq $result) {
          print STDERR "OK: abs2rel: $d[0] $d[1] -> $result\n";
      } else {
          print STDERR "ERROR: abs2rel: $d[0] $d[1] -> $result (It should be '$d[2]')\n";
          $cnt++;
      }
  }
  
  foreach (@rel2abs) {
      @d = split;
      chop($result = `./$progname rel2abs $d[0] $d[1]`);
      if ($d[2] eq $result) {
          print STDERR "OK: rel2abs: $d[0] $d[1] -> $result\n";
      } else {
          print STDERR "ERROR: rel2abs: $d[0] $d[1] -> $result (It should be '$d[2]')\n";
          $cnt++;
      }
  }
  
  foreach (@common) {
      @d = split;
      chop($result = `./$progname rel2abs $d[2] $d[1]`);
      if ($d[0] eq $result) {
          print STDERR "OK: rel2abs: $d[0] $d[1] -> $result\n";
      } else {
          print 'X';
          print STDERR "ERROR: rel2abs: $d[0] $d[1] -> $result (It should be '$d[2]')\n";
          $cnt++;
      }
  }
  
  close(LOG);
  
  if ($cnt == 0) {
      print STDERR "Total: OK.\n";
  } else {
      print STDERR "Total: $cnt errors detected.\n";
  }
  

From ossp-cvs-owner@ossp.org  Mon Jan 21 14:33:08 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 85120764F5; Mon, 21 Jan 2002 14:33:08 +0100 (CET)
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Message-Id: <20020121133308.85120764F5@mail.ossp.org>
Date: Mon, 21 Jan 2002 14:33:08 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   OSSP Project Master
  Root:   /e/ossp/cvs                      Email:  ossp@ossp.org
  Module: CVSROOT                          Date:   21-Jan-2002 14:33:08
  Branch: HEAD                             Handle: 2002012113330800

  Modified files:
    CVSROOT                 modules

  Log:
    add OSSP path

  Summary:
    Revision    Changes     Path
    1.41        +1  -0      CVSROOT/modules
  ____________________________________________________________________________

  Index: CVSROOT/modules
  ============================================================
  $ cvs diff -u -r1.40 -r1.41 modules
  --- CVSROOT/modules	16 Jan 2002 14:20:28 -0000	1.40
  +++ CVSROOT/modules	21 Jan 2002 13:33:08 -0000	1.41
  @@ -81,6 +81,7 @@
   shtool          ossp-pkg/shtool
   cache           ossp-pkg/cache
   val             ossp-pkg/val
  +path            ossp-pkg/path
   
   #   OSSP lmtp2nntp
   lmtp2nntp       ossp-pkg/lmtp2nntp &lmtp2nntp_str &lmtp2nntp_l2 &lmtp2nntp_sa &lmtp2nntp_var &lmtp2nntp_val

From ossp-cvs-owner@ossp.org  Mon Jan 21 15:00:18 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1C496764D8; Mon, 21 Jan 2002 15:00:18 +0100 (CET)
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Message-Id: <20020121140018.1C496764D8@mail.ossp.org>
Date: Mon, 21 Jan 2002 15:00:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   OSSP Project Master
  Root:   /e/ossp/cvs                      Email:  ossp@ossp.org
  Module: CVSROOT                          Date:   21-Jan-2002 15:00:18
  Branch: HEAD                             Handle: 2002012114001700

  Modified files:
    CVSROOT                 modules

  Log:
    add missing OSSP act

  Summary:
    Revision    Changes     Path
    1.42        +1  -0      CVSROOT/modules
  ____________________________________________________________________________

  Index: CVSROOT/modules
  ============================================================
  $ cvs diff -u -r1.41 -r1.42 modules
  --- CVSROOT/modules	21 Jan 2002 13:33:08 -0000	1.41
  +++ CVSROOT/modules	21 Jan 2002 14:00:17 -0000	1.42
  @@ -82,6 +82,7 @@
   cache           ossp-pkg/cache
   val             ossp-pkg/val
   path            ossp-pkg/path
  +act             ossp-pkg/act
   
   #   OSSP lmtp2nntp
   lmtp2nntp       ossp-pkg/lmtp2nntp &lmtp2nntp_str &lmtp2nntp_l2 &lmtp2nntp_sa &lmtp2nntp_var &lmtp2nntp_val

From ossp-cvs-owner@ossp.org  Mon Jan 21 15:01:54 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BF3C0764D8; Mon, 21 Jan 2002 15:01:54 +0100 (CET)
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Message-Id: <20020121140154.BF3C0764D8@mail.ossp.org>
Date: Mon, 21 Jan 2002 15:01:54 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   OSSP Project Master
  Root:   /e/ossp/cvs                      Email:  ossp@ossp.org
  Module: CVSROOT                          Date:   21-Jan-2002 15:01:54
  Branch: HEAD                             Handle: 2002012114015400

  Modified files:
    CVSROOT                 modules

  Log:
    sort module list

  Summary:
    Revision    Changes     Path
    1.43        +20 -16     CVSROOT/modules
  ____________________________________________________________________________

  Index: CVSROOT/modules
  ============================================================
  $ cvs diff -u -r1.42 -r1.43 modules
  --- CVSROOT/modules	21 Jan 2002 14:00:17 -0000	1.42
  +++ CVSROOT/modules	21 Jan 2002 14:01:54 -0000	1.43
  @@ -59,30 +59,34 @@
   ossp-web        ossp-web   
   ossp-play       ossp-play  
   
  -#   the OSSP sub-modules
  +#   the OSSP libraries
  +act             ossp-pkg/act
   adns            ossp-pkg/adns
  -cvs             ossp-pkg/cvs
  -eperl           ossp-pkg/eperl
  +cache           ossp-pkg/cache
   ev              ossp-pkg/ev
  -jitterbug       ossp-pkg/jitterbug
  +l2              ossp-pkg/l2
   mm              ossp-pkg/mm
  +path            ossp-pkg/path
   pcre            ossp-pkg/pcre
  -petidomo        ossp-pkg/petidomo
  +pth             ossp-pkg/pth
  +sa              ossp-pkg/sa
   sfio            ossp-pkg/sfio
  -shiela          ossp-pkg/shiela
  -str             ossp-pkg/str
  -sugar           ossp-pkg/sugar
  -l2              ossp-pkg/l2
   srpc            ossp-pkg/srpc
  -xds             ossp-pkg/xds
  -sa              ossp-pkg/sa
  +str             ossp-pkg/str
  +val             ossp-pkg/val
   var             ossp-pkg/var
  -pth             ossp-pkg/pth
  +xds             ossp-pkg/xds
  +
  +#   the OSSP applications
  +eperl           ossp-pkg/eperl
  +shiela          ossp-pkg/shiela
   shtool          ossp-pkg/shtool
  -cache           ossp-pkg/cache
  -val             ossp-pkg/val
  -path            ossp-pkg/path
  -act             ossp-pkg/act
  +sugar           ossp-pkg/sugar
  +
  +#   the OSSP applications (third-party)
  +cvs             ossp-pkg/cvs
  +jitterbug       ossp-pkg/jitterbug
  +petidomo        ossp-pkg/petidomo
   
   #   OSSP lmtp2nntp
   lmtp2nntp       ossp-pkg/lmtp2nntp &lmtp2nntp_str &lmtp2nntp_l2 &lmtp2nntp_sa &lmtp2nntp_var &lmtp2nntp_val

From ossp-cvs-owner@ossp.org  Mon Jan 21 17:15:40 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7D0E4764D8; Mon, 21 Jan 2002 17:15:40 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/act act_ds.c act_ds.h
Message-Id: <20020121161540.7D0E4764D8@mail.ossp.org>
Date: Mon, 21 Jan 2002 17:15:40 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   21-Jan-2002 17:15:40
  Branch: HEAD                             Handle: 2002012116153900

  Added files:
    ossp-pkg/act            act_ds.c act_ds.h

  Log:
    flush today's work

  Summary:
    Revision    Changes     Path
    1.1         +151 -0     ossp-pkg/act/act_ds.c
    1.1         +150 -0     ossp-pkg/act/act_ds.h
  ____________________________________________________________________________

  Index: ossp-pkg/act/act_ds.c
  ============================================================
  $ cvs update -p -r1.1 act_ds.c
  /* 
  **  Act - Abstract Container Type Library
  **  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  **
  **  This file is part of Act, a library for dealing with Abstract 
  **  Container Types which can be found at http://www.ossp.org/pkg/act/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  act_ds.c: data structure low-level API (implementation)
  */
  
  #include "act_p.h"
  #include "act_ds.h"
  
  /* the generic top-level data structure for a ds */
  struct act_ds_st {
      act_ctx_t       *ds_ctx;    /* the attached ACT context */
      act_ds_method_t *ds_method; /* the dsing method which is actually used */
      void            *ds_data;   /* the data structure */
  };
  
  /* convinience macro for calling a method */
  #define method(ds,name) ds->ds_method->m_##name
  
  /* global initialization at library startup time */
  intern int act_ds_init(void)
  {
      act_ctx_set(act_ctx_default, ACT_HASH_METHOD,      act_ds_mth(lh));
      act_ctx_set(act_ctx_default, ACT_HASH_FUNC,        act_ds_fct(djbx33a));
      act_ctx_set(act_ctx_default, ACT_HASH_TABLESIZE,   128);
      act_ctx_set(act_ctx_default, ACT_HASH_MINLOADFCTR, 1);
      act_ctx_set(act_ctx_default, ACT_HASH_MAXLOADFCTR, 2);
      return TRUE;
  }
  
  /* global destruction at library startup time */
  intern int act_ds_kill(void)
  {
      return TRUE;
  }
  
  /* create a new ds */
  act_ds_t *act_ds_new(act_ctx_t *ctx)
  {
      act_ds_t *h;
      act_ds_method_t *method;
      void *data;
  
      insist(ctx != NULL, NULL);
  
      /* fetch the implementation method */
      insist(act_ctx_get(ctx, ACT_HASH_METHOD, &method), NULL);
      insist(method != NULL, NULL);
      insist(method->m_tag == ACT_HASH_METHOD_TAG, NULL);
  
      /* create a new ds */
      data = method->m_new(ctx);
      insist(data != NULL, NULL);
  
      /* allocate a top-level data structure */
      if ((h = (act_ds_t *)act_mem_alloc_ctx(ctx, sizeof(act_ds_t))) == NULL) {
          method->m_free(ctx, data);
          return NULL;
      }
  
      /* stash ingredients into top-level data structure */
      h->h_ctx    = act_ctx_dup(ctx, NULL);
      h->h_method = method;
      h->h_data   = data;
  
      return h;
  }
  
  /* return the attached context */
  act_ctx_t *act_ds_ctx(act_ds_t *h)
  {
      insist(h != NULL, NULL);
      return h->h_ctx;
  }
  
  /* destroy the ds */
  int act_ds_free(act_ds_t *h)
  {
      insist(h != NULL, NULL);
  
      /* destroy real ds table */
      if (!method(h, free)(h->h_ctx, h->h_data))
          return FALSE;
  
      /* destroy top-level structure */
      act_mem_free(h);
  
      return TRUE;
  }
  
  /* insert an element into the ds */
  int act_ds_insert(act_ds_t *h, void *kp, int ks, void *dp, int ds, int ov)
  {
      insist(h != NULL, NULL);
      return method(h, insert)(h->h_ctx, h->h_data, kp, ks, dp, ds, ov);
  }
  
  /* lookup an element from the ds */
  int act_ds_lookup(act_ds_t *h, void *kp, int ks, void **dp, int *ds)
  {
      insist(h != NULL, NULL);
      return method(h, lookup)(h->h_ctx, h->h_data, kp, ks, dp, ds);
  }
  
  /* delete an element in the ds */
  int act_ds_delete(act_ds_t *h, void *kp, int ks)
  {
      insist(h != NULL, NULL);
      return method(h, delete)(h->h_ctx, h->h_data, kp, ks);
  }
  
  /* determine byte and element size of the ds */
  int act_ds_size(act_ds_t *h, long *pb, long *pe)
  {
      insist(h != NULL, NULL);
      insist(pb != NULL, NULL);
      insist(pe != NULL, NULL);
      return method(h, size)(h->h_ctx, h->h_data, pb, pe);
  }
  
  /* return summary of current internal status */
  int act_ds_status(act_ds_t *h, char *ps, int ns)
  {
      insist(h != NULL, NULL);
      insist(ps != NULL, NULL);
      insist(ns > 0, NULL);
      return method(h, status)(h->h_ctx, h->h_data, ps, ns);
  }
  
  Index: ossp-pkg/act/act_ds.h
  ============================================================
  $ cvs update -p -r1.1 act_ds.h
  /* 
  **  Act - Abstract Container Type Library
  **  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  **
  **  This file is part of Act, a library for dealing with Abstract 
  **  Container Types which can be found at http://www.ossp.org/pkg/act/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  act_ds.h: data structure low-level API (declaration)
  */
  
  #ifndef __ACT_DS_H__
  #define __ACT_DS_H__
  
  /* the opaque data structure type */ 
  struct act_ds_st;
  typedef struct act_ds_st act_ds_t;
  
  /* the magic cookie which identifies a method structure */
  #define ACT_DS_METHOD_TAG 0xBEEF
  
  /* types corresponding to the dispatch functions */
  typedef void *(*act_ds_new_t)    (act_ctx_t *);
  typedef int   (*act_ds_insert_t) (act_ctx_t *, void *, void *, int, void *, int, int);
  typedef int   (*act_ds_lookup_t) (act_ctx_t *, void *, void *, int, void **, int *);
  typedef int   (*act_ds_delete_t) (act_ctx_t *, void *, void *, int);
  typedef int   (*act_ds_size_t)   (act_ctx_t *, void *, long *, long *);
  typedef int   (*act_ds_status_t) (act_ctx_t *, void *, char *, int);
  typedef int   (*act_ds_free_t)   (act_ctx_t *, void *);
  
  /* the dispatch structure for the data structure method */
  typedef struct act_ds_method_st {
      unsigned int    m_tag;
      act_ds_new_t    m_new;
      act_ds_insert_t m_insert;
      act_ds_lookup_t m_lookup;
      act_ds_delete_t m_delete;
      act_ds_size_t   m_size;
      act_ds_status_t m_status;
      act_ds_free_t   m_free;
  } act_ds_method_t;
  
  /* ---------------------------------------------------------------------------------- */
  
  typedef struct { 
      void   *ptr;
      size_t *len;
  } act_blob_t;
  
  #define ACT_BLOB(ptr,len) \
      { (ptr), (len) }
  
  static act_blob_t act_blob(void *ptr, size_t len)
  {
      act_blob_t blob;
  
      blob.ptr = ptr;
      blob.len = len;
      return blob;
  }
  
  /* ---------------------------------------------------------------------------------- */
  
  enum {
      /* access control */
      ACT_IT_ACL_READ,
      ACT_IT_ACL_WRITE,
      /* traversal */
      ACT_IT_TR_STATIC,
      ACT_IT_TR_NATURAL,
      ACT_IT_TR_RANDOM,
      ACT_IT_TR_SORT,
      ACT_IT_TR_REVERSE,
      /* absolute position */
      ACT_IT_POS_IT,
      ACT_IT_POS_KEY,
      ACT_IT_POS_FIRST,
      ACT_IT_POS_LAST,
      ACT_IT_POS_INDEX,
      /* relative positioning */
      ACT_IT_GO_UP,
      ACT_IT_GO_DOWN,
      ACT_IT_GO_LEFT,
      ACT_IT_GO_RIGHT,
      ACT_IT_GO_BACK,
      ACT_IT_GO_FRONT,
      ACT_IT_GO_NEXT,
      ACT_IT_GO_PREV,
  };
  
  act_rc_t act_it_create   (act_it_t **it, int acl_and_traverse, ...);
  act_rc_t act_it_goto     (act_it_t **it, int position);
  act_rc_t act_it_destroy  (act_it_t  *it);
  
  /* ---------------------------------------------------------------------------------- */
  
  enum {
      ACT_CB_RWLOCK_CREATE,
      ACT_CB_RWLOCK_ACQUIRE,
      ACT_CB_RWLOCK_RELEASE,
      ACT_CB_RWLOCK_DESTROY,
      ACT_MAX_WRITER,
      ACT_MAX_READER
      ACT_ST_BYTES_TOTAL,
      ACT_ST_BYTES_MGMT,
      ACT_ST_BYTES_USED,
      ACT_ST_BYTES_FREE,
      ACT_ST_ELEM_TOTAL,
      ACT_ST_ELEM_USED,
      ACT_ST_ELEM_FREE,
  };
  
  act_rc_t act_ds_create   (act_ds_t **ds, act_ctx_t *ctx, act_ds_method_t *meth);
  act_rc_t act_ds_clone    (act_ds_t  *ds, act_ds_t **clone);
  act_rc_t act_ds_import   (act_ds_t  *ds, char *buf, size_t *buf, act_cb_t cb);
  act_rc_t act_ds_export   (act_ds_t  *ds, char *buf, size_t *buf, act_cb_t cb);
  act_rc_t act_ds_destroy  (act_ds_t  *ds);
  
  act_rc_t act_ds_config   (act_ds_t  *ds, const char *fmt, ...);
  act_rc_t act_ds_query    (act_ds_t  *ds, const char *fmt, ...);
  
  act_rc_t act_ds_iterator (act_ds_t  *ds, act_it_t **it, int acl_and_traverse, ...);
  
  act_rc_t act_ds_insert   (act_ds_t  *ds, act_it_t  *it, int pos);
  act_rc_t act_ds_delete   (act_ds_t  *ds, act_it_t  *it, int pos);
  
  act_rc_t act_ds_write    (act_ds_t  *ds, act_it_t *it, act_blob_t *blob);
  act_rc_t act_ds_read     (act_ds_t  *ds, act_it_t *it, act_blob_t *blob);
  
  /* ---------------------------------------------------------------------------------- */
  
  #endif /* __ACT_DS_H__ */
  

From ossp-cvs-owner@ossp.org  Mon Jan 21 17:21:17 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EFB95764D8; Mon, 21 Jan 2002 17:21:16 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c lmtp2nntp_config.h
Message-Id: <20020121162116.EFB95764D8@mail.ossp.org>
Date: Mon, 21 Jan 2002 17:21:16 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   21-Jan-2002 17:21:16
  Branch: HEAD                             Handle: 2002012116211600

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c lmtp2nntp_config.h

  Log:
    flush

  Summary:
    Revision    Changes     Path
    1.10        +197 -203   ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.4         +46 -30     ossp-pkg/lmtp2nntp/lmtp2nntp_config.h
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	17 Jan 2002 17:01:55 -0000	1.9
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	21 Jan 2002 16:21:16 -0000	1.10
  @@ -113,39 +113,39 @@
   {
       switch (type) {
           case VAL_TYPE_VAL:
  -            fprintf(stderr, "DEBUG: <%10s>, name=<%10s>, VAL_TYPE_VAL,    desc=<%20s>, data@%.8lx INTERNAL\n",
  +            printf("DEBUG: <%10s>, name=<%10s>, VAL_TYPE_VAL,    desc=<%20s>, data@%.8lx INTERNAL\n",
                       (char *)ctx, name,      desc, (long)data);
               break;
           case VAL_TYPE_PTR:
  -            fprintf(stderr, "DEBUG: <%10s>, name=<%10s>, VAL_TYPE_PTR,    desc=<%20s>, data@%.8lx=%.8lx\n",
  +            printf("DEBUG: <%10s>, name=<%10s>, VAL_TYPE_PTR,    desc=<%20s>, data@%.8lx=%.8lx\n",
                       (char *)ctx, name,      desc, (long)data, *(long *)data);
               break;
           case VAL_TYPE_CHAR:                                                                              
  -            fprintf(stderr, "DEBUG: <%10s>, name=<%10s>, VAL_TYPE_CHAR,   desc=<%20s>, data@%.8lx='%c'\n",
  +            printf("DEBUG: <%10s>, name=<%10s>, VAL_TYPE_CHAR,   desc=<%20s>, data@%.8lx='%c'\n",
                       (char *)ctx, name,      desc, (long)data, *(char *)data);
               break;
           case VAL_TYPE_SHORT:                                                                             
  -            fprintf(stderr, "DEBUG: <%10s>, name=<%10s>, VAL_TYPE_SHORT,  desc=<%20s>, data@%.8lx=%8d\n",
  +            printf("DEBUG: <%10s>, name=<%10s>, VAL_TYPE_SHORT,  desc=<%20s>, data@%.8lx=%8d\n",
                       (char *)ctx, name,      desc, (long)data, *(short *)data);
               break;
           case VAL_TYPE_INT:                                                                               
  -            fprintf(stderr, "DEBUG: <%10s>, name=<%10s>, VAL_TYPE_INT,    desc=<%20s>, data@%.8lx=%8d\n",
  +            printf("DEBUG: <%10s>, name=<%10s>, VAL_TYPE_INT,    desc=<%20s>, data@%.8lx=%8d\n",
                       (char *)ctx, name,      desc, (long)data, *(int *)data);
               break;
           case VAL_TYPE_LONG:                                                                              
  -            fprintf(stderr, "DEBUG: <%10s>, name=<%10s>, VAL_TYPE_LONG,   desc=<%20s>, data@%.8lx=%8ld\n",
  +            printf("DEBUG: <%10s>, name=<%10s>, VAL_TYPE_LONG,   desc=<%20s>, data@%.8lx=%8ld\n",
                       (char *)ctx, name,      desc, (long)data, *(long *)data);
               break;
           case VAL_TYPE_FLOAT:                                                                             
  -            fprintf(stderr, "DEBUG: <%10s>, name=<%10s>, VAL_TYPE_FLOAT,  desc=<%20s>, data@%.8lx=%8f\n",
  +            printf("DEBUG: <%10s>, name=<%10s>, VAL_TYPE_FLOAT,  desc=<%20s>, data@%.8lx=%8f\n",
                       (char *)ctx, name,      desc, (long)data, *(float *)data);
               break;
           case VAL_TYPE_DOUBLE:                                                                            
  -            fprintf(stderr, "DEBUG: <%10s>, name=<%10s>, VAL_TYPE_DOUBLE, desc=<%20s>, data@%.8lx=%8f\n",
  +            printf("DEBUG: <%10s>, name=<%10s>, VAL_TYPE_DOUBLE, desc=<%20s>, data@%.8lx=%8f\n",
                       (char *)ctx, name,      desc, (long)data, *(double *)data);
               break;
           default: 
  -            fprintf(stderr, "DEBUG: <%10s>, name=<%10s>, type = %.8lx,    desc=<%20s>, data@%.8lx\n",
  +            printf("DEBUG: <%10s>, name=<%10s>, type = %.8lx,    desc=<%20s>, data@%.8lx\n",
                       (char *)ctx, name, (long)type, desc, (long)data);
       }
   
  @@ -160,164 +160,10 @@
   
   void dotconftest(int argc, char **argv) /*FIXME*/
   {
  -    popt_context poptCon;   /* context for parsing command-line options */
  -    lmtp2nntp_config_t *ctx;
  -    char *cpBuf;
  -    struct popt_option poptTable[] = {
  -        { "childsmax",      'C', POPT_ARG_STRING, NULL, 'C', "foo", "childsmax" },
  -        { "daemonize",      'D', POPT_ARG_NONE,   NULL, 'D', "foo", NULL },
  -        { "kill",           'K', POPT_ARG_NONE,   NULL, 'K', "foo", NULL },
  -        { "pidfile",        'P', POPT_ARG_STRING, NULL, 'P', "foo", "pidfile" },
  -        { "veryverbose",    'V', POPT_ARG_NONE,   NULL, 'V', "foo", NULL },
  -        { "acl",            'a', POPT_ARG_STRING, NULL, 'a', "foo", "addr[/mask]" },
  -        { "bind",           'b', POPT_ARG_STRING, NULL, 'b', "foo", "addr[:port]|-|path[:perms]" },
  -        { "client",         'c', POPT_ARG_STRING, NULL, 'c', "foo", "addr[:port]" },
  -        { "destination",    'd', POPT_ARG_STRING, NULL, 'd', "foo", "addr[:port]" },
  -        { "groupmode",      'g', POPT_ARG_STRING, NULL, 'g', "foo", "groupmode" },
  -        { "headervalue",    'h', POPT_ARG_STRING, NULL, 'h', "foo", "header: value" },
  -        { "include",        'i', POPT_ARG_STRING, NULL, 'i', "foo", "configfile" },
  -        { "size",           's', POPT_ARG_STRING, NULL, 's', "foo", "bytes" },
  -        { "timeout",        't', POPT_ARG_STRING, NULL, 't', "foo", "name=sec" },
  -        { "mailfrom",       'm', POPT_ARG_STRING, NULL, 'm', "foo", "regex" },
  -        { "nodename",       'n', POPT_ARG_STRING, NULL, 'n', "foo", "nodename" },
  -        { "operationmode",  'o', POPT_ARG_STRING, NULL, 'o', "foo", "post|feed" },
  -        { "l2spec",         'l', POPT_ARG_STRING, NULL, 'l', "foo", "spec" },
  -        { "uid",            'u', POPT_ARG_STRING, NULL, 'u', "foo", "number|name" },
  -        { "restrictheader", 'r', POPT_ARG_STRING, NULL, 'r', "foo", "regex" },
  -        { "newsgroup",      NUL, POPT_ARG_STRING
  -                        |POPT_ARGFLAG_DOC_HIDDEN, NULL, 1,   NULL,  NULL },
  -        POPT_AUTOHELP
  -        { NULL,               0, 0,               NULL, 0 }
  -    };
    
       ctx = malloc(sizeof(lmtp2nntp_config_t));
       ctx->option_childsmax = 10;
   
  -    {
  -        int testint = 10;
  -        int testintout = 100;
  -        int testint2 = 20;
  -        int testintout2 = 200;
  -        val_rc_t rc;
  -        val_t *v, *v2, *v3;
  -
  -        if ((rc = val_create(&v)) != VAL_OK)
  -            die("val_create");
  -
  -        printf("DEBUG: testint = %d, testintout = %d\n", testint, testintout);
  -
  -        if ((rc = val_reg(v, "foo", VAL_TYPE_INT, "foo variable", (void *)&testint)) != VAL_OK)
  -            die("val_reg");
  -
  -        testint++;
  -        if ((rc = val_get(v, "foo", &testintout)) != VAL_OK)
  -            die("val_get");
  -        printf("DEBUG: testint = %d, testintout = %d\n", testint, testintout);
  -
  -        if ((rc = val_set(v, "foo", 2)) != VAL_OK)
  -            die("val_set");
  -        if ((rc = val_get(v, "foo", &testintout)) != VAL_OK)
  -            die("val_get");
  -        printf("DEBUG: testint = %d, testintout = %d\n", testint, testintout);
  -
  -        if ((rc = val_create(&v2)) != VAL_OK)
  -            die("val_create 2");
  -
  -        if ((rc = val_reg(v, "bar", VAL_TYPE_VAL, "bar variable", (void *)&v2)) != VAL_OK)
  -            die("val_reg 2");
  -        val_reg(v, "bar", VAL_TYPE_VAL, "bar variable", NULL);
  -        val_set(v, "bar", v2);
  -        if ((rc = val_get(v, "bar", &v3)) != VAL_OK)
  -            die("val_get v3");
  -
  -        if ((rc = val_reg(v2, "quux", VAL_TYPE_INT, "quux variable", (void *)&testint2)) != VAL_OK)
  -            die("val_reg 2b");
  -
  -        testint2++;
  -        if ((rc = val_get(v2, "quux", &testintout2)) != VAL_OK)
  -            die("val_get 2c");
  -        printf("DEBUG: testint2 = %d, testintout2 = %d\n", testint2, testintout2);
  -        if ((rc = val_get(v, "bar.quux", &testintout2)) != VAL_OK) {
  -            fprintf(stderr, "rc=%d\n", rc);
  -            die("val_get 2d");
  -        }
  -        printf("DEBUG: testint2 = %d, testintout2 = %d\n", testint2, testintout2);
  -
  -        printf("DEBUG: testint     at address %lx\n", (long)&testint);
  -        printf("DEBUG: testintout  at address %lx\n", (long)&testintout);
  -        printf("DEBUG: testint2    at address %lx\n", (long)&testint2);
  -        printf("DEBUG: testint2out at address %lx\n", (long)&testintout2);
  -
  -        if ((rc = val_reg(v, "bar.ptr", VAL_TYPE_PTR, "bar ptr (&testint)", NULL)) != VAL_OK)
  -            die("val_ret  for bar.ptr using inline data");
  -        if ((rc = val_set(v, "bar.ptr", &testint)) != VAL_OK)
  -            die("val_set  for bar.ptr using inline data");
  -        if ((rc = val_reg(v, "bar.char", VAL_TYPE_CHAR, "bar character (!)", NULL)) != VAL_OK)
  -            die("val_ret  for bar.char using inline data");
  -        if ((rc = val_set(v, "bar.char", '!')) != VAL_OK)
  -            die("val_set  for bar.char using inline data");
  -        if ((rc = val_reg(v, "bar.short", VAL_TYPE_SHORT, "bar short (555)", NULL)) != VAL_OK)
  -            die("val_ret  for bar.short using inline data");
  -        if ((rc = val_set(v, "bar.short", 555)) != VAL_OK)
  -            die("val_set  for bar.short using inline data");
  -        if ((rc = val_reg(v, "bar.int", VAL_TYPE_INT, "bar integer (76543)", NULL)) != VAL_OK)
  -            die("val_ret  for bar.int using inline data");
  -        if ((rc = val_set(v, "bar.int", 76543)) != VAL_OK)
  -            die("val_set  for bar.int using inline data");
  -        if ((rc = val_reg(v, "bar.long", VAL_TYPE_LONG, "bar long (2097152)", NULL)) != VAL_OK)
  -            die("val_ret  for bar.long using inline data");
  -        if ((rc = val_set(v, "bar.long", 2097152)) != VAL_OK)
  -            die("val_set  for bar.long using inline data");
  -        if ((rc = val_reg(v, "bar.float", VAL_TYPE_FLOAT, "bar float (1.955830)", NULL)) != VAL_OK)
  -            die("val_ret  for bar.float using inline data");
  -        if ((rc = val_set(v, "bar.float", 1.95583)) != VAL_OK)
  -            die("val_set  for bar.float using inline data");
  -        if ((rc = val_reg(v, "bar.double", VAL_TYPE_DOUBLE, "bar double (3.1415+)", NULL)) != VAL_OK)
  -            die("val_ret  for bar.double using inline data");
  -        if ((rc = val_set(v, "bar.double", 3.14159265358979)) != VAL_OK)
  -            die("val_set  for bar.double using inline data");
  -
  -        OK val_apply(v,  "", 9, dumper, "v" );
  -        OK val_apply(v2, "", 9, dumper, "v2");
  -        OK val_apply(v,  "", 0, dumper, "v" );
  -        OK val_apply(v,  "bar", 1, dumper, "v" );
  -        OK val_apply(v2,  "", 0, dumper, "v" );
  -        OK val_apply(v,  "", 1, dumper, "v" );
  -        OK val_apply(v,  "foo", 0, dumper, "v" );
  -        OK val_apply(v2,  "char", 2, dumper, "v" );
  -        OK val_apply(v,  "bar.char", 2, dumper, "v" );
  -
  -        if ((rc = val_destroy(v2)) != VAL_OK)
  -            die("val_destroy 2");
  -
  -        if ((rc = val_destroy(v)) != VAL_OK)
  -            die("val_destroy");
  -
  -        return;
  -    }
  -
  -    {
  -        char c;
  -        char *cp;
  -
  -        poptCon = popt_getcontext(NULL, argc, (const char **)argv, poptTable, 0);
  -        popt_setotheroptionhelp(poptCon, "[OPTIONS]* [newsgroup ...]");
  -        printf("DEBUG: argc=%d\n", argc);
  -        if (argc < 2) {
  -            popt_printusage(poptCon, stderr, 0);
  -            exit(1);
  -        }
  -        while ((c = popt_getnextopt(poptCon)) >= 0) {
  -            printf("DEBUG: popt_getnextopt returned %d='%c'\n", (int)c, c);
  -        }
  -        while ((cp = popt_getarg(poptCon)) != NULL) {
  -            printf("DEBUG: popt_getarg returned \"%s\"\n", cp);
  -        }
  -
  -        printf("DEBUG: popt_getnextopt ended with \"%s\"(%d)\n", popt_strerror((int)c), (int)c);
  -        popt_freecontext(poptCon);
  -        return;
  -    }
   
   /* Braindump
   
  @@ -418,16 +264,6 @@
   }
   #endif
   
  -typedef enum {
  -    OPT_FLAG,
  -    OPT_SINGLE,
  -    OPT_MULTI
  -} optiontype_t;
  -
  -typedef void (*optionloop_cb_t)(void);
  -
  -struct optionconfig_s;
  -typedef struct optionconfig_s optionconfig_t;
   struct optionconfig_s {
       optionconfig_t *next;           /* cleanup chain for destroy */
                       /**/
  @@ -449,23 +285,142 @@
       } data;
   };
   
  -static void stdsyntax(void)
  +lmtp2nntp_option_rc_t option_find(lmtp2nntp_option_t *o, int number, optionconfig_t **ocp);
  +lmtp2nntp_option_rc_t option_find(lmtp2nntp_option_t *o, int number, optionconfig_t **ocp)
   {
  -    return;
  +    lmtp2nntp_option_rc_t rc = VAL_OK;
  +
  +    if (o == NULL || ocp == NULL)
  +        return OPTION_ERR_ARG;
  +
  +    *ocp = o->first;
  +    while (*ocp != NULL && (*ocp)->number != number)
  +        *ocp = (*ocp)->next;
  +
  +    return rc;
  +}
  +
  +
  +lmtp2nntp_option_rc_t option_register(lmtp2nntp_option_t *o, char *longname, char shortname, optiontype_t type, optionloop_cb_t *cb, char *cbctx, char *descrip, char *argdescrip)
  +{
  +    lmtp2nntp_option_rc_t rc = VAL_OK;
  +    optionconfig_t *oc;
  +    
  +    printf("DEBUG: enter option_register(%.8lx, \"%s\", '%c', %d, %.8lx, %.8lx, \"%s\", \"%s\")\n", (long)o, longname, shortname, type, (long)cb, (long)cbctx, descrip, argdescrip);
  +
  +    if (o == NULL || longname == NULL)
  +        return OPTION_ERR_ARG;
  +
  +    /* create a optionconfig_t structure */
  +    if ((oc = (optionconfig_t *)malloc(sizeof(optionconfig_t))) == NULL)
  +        return OPTION_ERR_MEM;
  +    printf("DEBUG: optionconfig_t structure malloc'ed\n");
  +    oc->next         = NULL;
  +    oc->longname     = strdup(longname);
  +    oc->shortname    = shortname;
  +    oc->descrip      = descrip == NULL ? NULL : strdup(descrip);
  +    oc->argdescrip   = argdescrip == NULL ? NULL : strdup(argdescrip);
  +    oc->type         = type;
  +    oc->cb           = cb;
  +    oc->cbctx        = cbctx;
  +    oc->pass1default = NULL; /*FIXME*/
  +    oc->val          = o->vo;
  +    oc->number       = o->pi; /*FIXME + 1; 0 is a reserved val in popt, so offset 1 */
  +    if (   (                      oc->longname   == NULL)
  +        || (descrip    != NULL && oc->descrip    == NULL)
  +        || (argdescrip != NULL && oc->argdescrip == NULL)
  +          )
  +        CU(OPTION_ERR_MEM);
  +
  +    printf("DEBUG: optionconfig_t structure created\n");
  +
  +    /* feed lib_val */
  +    (void)/*FIXME rc*/val_reg(oc->val, oc->longname,
  +                              type == OPT_FLAG ? VAL_TYPE_INT : VAL_TYPE_PTR,
  +                              oc->descrip, NULL);
  +
  +    printf("DEBUG: val_reg'ed\n");
  +
  +    /* feed lib_popt */
  +    printf("DEBUG: o->pi=%d, o->pn=%d\n", o->pi, o->pn);
  +    if (o->pi >= (o->pn-2)) { /* correction by two here, in malloc and realloc is for AUTOHELP and TABLEEND */
  +        if (o->pt == NULL) {
  +            printf("DEBUG: malloc\n");
  +            o->pt = (struct popt_option *)malloc(                (1 + 2) * sizeof(struct popt_option)); /*FIXME out of mem*/
  +            o->pn = 1;
  +        }
  +        else {
  +            printf("DEBUG: realloc\n");
  +            o->pt = (struct popt_option *)realloc(o->pt, (o->pn * 2 + 2) * sizeof(struct popt_option)); /*FIXME out of mem*/
  +            o->pn = o->pn * 2;
  +        }
  +    }
  +    o->pt[o->pi].longName   = oc->longname;
  +    o->pt[o->pi].shortName  = oc->shortname;
  +    o->pt[o->pi].argInfo    = oc->type == OPT_FLAG ? POPT_ARG_NONE : POPT_ARG_STRING;
  +    o->pt[o->pi].arg        = NULL;
  +    o->pt[o->pi].val        = oc->number;
  +    o->pt[o->pi].descrip    = oc->descrip;
  +    o->pt[o->pi].argDescrip = oc->argdescrip;
  +
  +    /* append POPT_AUTOHELP */
  +    o->pt[o->pi+1].longName   = NULL;
  +    o->pt[o->pi+1].shortName  = '\0';
  +    o->pt[o->pi+1].argInfo    = POPT_ARG_INCLUDE_TABLE;
  +    o->pt[o->pi+1].arg        = popt_helpoptions;
  +    o->pt[o->pi+1].val        = 0;
  +    o->pt[o->pi+1].descrip    = "Help options:";
  +    o->pt[o->pi+1].argDescrip = NULL;
  +
  +    /* append POPT_TABLEEND */
  +    o->pt[o->pi+2].longName   = NULL;
  +    o->pt[o->pi+2].shortName  = '\0';
  +    o->pt[o->pi+2].argInfo    = 0;
  +    o->pt[o->pi+2].arg        = 0;
  +    o->pt[o->pi+2].val        = 0;
  +    o->pt[o->pi+2].descrip    = NULL;
  +    o->pt[o->pi+2].argDescrip = NULL;
  +    o->pi++;
  +    printf("DEBUG: popt'ed\n");
  +
  +    /* link in this new optionconfig_t structure */
  +    if (o->first == NULL) {
  +        o->first = oc;
  +        o->last  = oc;
  +    }
  +    else {
  +        o->last->next = oc; 
  +        o->last       = oc;
  +    }
  +    printf("DEBUG: linked\n");
  +
  +    return rc;
  +
  +    CUS:
  +    if (oc != NULL) {
  +        if (oc->argdescrip != NULL) free(oc->argdescrip);
  +        if (oc->descrip    != NULL) free(oc->descrip);
  +        if (oc->longname   != NULL) free(oc->longname);
  +        free(oc);
  +    }
  +    return rc;
   }
   
  -static void includeit(void)
  +static void stdsyntax(optionconfig_t *oc, char *arg, char *cbctx)
   {
  +    printf("DEBUG: enter stdsyntax %.8lx, \"%s\", \"%s\"\n", (long)oc, arg, cbctx);
       return;
   }
   
  -static void option_register(lmtp2nntp_option_t *o, char *longname, char shortname, optiontype_t type, optionloop_cb_t cb, char *cbctx, char *descrip, char *argdescrip)
  +static void includeit(optionconfig_t *oc, char *arg, char *cbctx)
   {
       return;
   }
   
   lmtp2nntp_option_rc_t option_create(lmtp2nntp_option_t **op)
   {
  +    printf("DEBUG: enter option_create(%.8lx)\n", (long)op);
  +
       if (op == NULL)
           return OPTION_ERR_ARG;
   
  @@ -503,7 +458,13 @@
       (*op)->newsgroup.as = 0;
       (*op)->newsgroup.az = NULL;
                       /**/
  +    (*op)->first = NULL;
  +    (*op)->last = NULL;
       (*op)->vo = NULL;
  +    (*op)->pn = 0;
  +    (*op)->pi = 0;
  +    (*op)->pt = NULL;
  +
       if (val_create(&((*op)->vo)) != VAL_OK) {
           free(*op);
           return OPTION_ERR_VAL;
  @@ -513,36 +474,69 @@
   
   lmtp2nntp_option_rc_t option_parse(lmtp2nntp_option_t *o, int argc, char **argv)
   {
  +    printf("DEBUG: enter option_parse(%.8lx, %d, %.8lx)\n", (long)o, argc, (long)argv);
  +
       if (o == NULL)
           return OPTION_ERR_ARG;
   
  -    option_register(o, "childsmax",           'C', OPT_SINGLE, stdsyntax, "[0-9]{,5}",           "foo", "childsmax" );
  -    option_register(o, "daemonize",           'D', OPT_FLAG,   NULL,      NULL,                  "foo", NULL );
  -    option_register(o, "kill",                'K', OPT_FLAG,   NULL,      NULL,                  "foo", NULL );
  -    option_register(o, "pidfile",             'P', OPT_SINGLE, stdsyntax, ".{,255}",             "foo", "pidfile" );
  -    option_register(o, "veryverbose",         'V', OPT_FLAG,   NULL,      NULL,                  "foo", NULL );
  -    option_register(o, "acl",                 'a', OPT_MULTI,  stdsyntax, "[0-9.](/[0-9]2)?",    "foo", "addr[/mask]" );
  -    option_register(o, "bind",                'b', OPT_SINGLE, stdsyntax, ".*",                  "foo", "addr[:port]|-|path[:perms]" );
  -    option_register(o, "client",              'c', OPT_SINGLE, stdsyntax, ".*",                  "foo", "addr[:port]" );
  -    option_register(o, "destination",         'd', OPT_MULTI,  stdsyntax, ".*",                  "foo", "addr[:port]" );
  -    option_register(o, "groupmode",           'g', OPT_SINGLE, stdsyntax, ".*",                  "foo", "groupmode" );
  -    option_register(o, "headervalue",         'h', OPT_MULTI,  stdsyntax, ".*",                  "foo", "header: value" );
  -    option_register(o, "include",             'i', OPT_MULTI,  includeit, ".*",                  "foo", "configfile" );
  -    option_register(o, "size",                's', OPT_SINGLE, stdsyntax, ".*",                  "foo", "bytes" );
  -    option_register(o, "timeoutlmtpaccept",   NUL, OPT_MULTI,  stdsyntax, ".*",                  "foo", "sec" );
  -    option_register(o, "timeoutlmtpread",     NUL, OPT_MULTI,  stdsyntax, ".*",                  "foo", "sec" );
  -    option_register(o, "timeoutlmtpwrite",    NUL, OPT_MULTI,  stdsyntax, ".*",                  "foo", "sec" );
  -    option_register(o, "timeoutnntpconnect",  NUL, OPT_MULTI,  stdsyntax, ".*",                  "foo", "sec" );
  -    option_register(o, "timeoutnntpread",     NUL, OPT_MULTI,  stdsyntax, ".*",                  "foo", "sec" );
  -    option_register(o, "timeoutnntpwrite",    NUL, OPT_MULTI,  stdsyntax, ".*",                  "foo", "sec" );
  -    option_register(o, "mailfrom",            'm', OPT_SINGLE, stdsyntax, ".*",                  "foo", "regex" );
  -    option_register(o, "nodename",            'n', OPT_SINGLE, stdsyntax, ".*",                  "foo", "nodename" );
  -    option_register(o, "operationmode",       'o', OPT_SINGLE, stdsyntax, ".*",                  "foo", "post|feed" );
  -    option_register(o, "l2spec",              'l', OPT_SINGLE, stdsyntax, ".*",                  "foo", "spec" );
  -    option_register(o, "uid",                 'u', OPT_SINGLE, stdsyntax, ".*",                  "foo", "number|name" );
  -    option_register(o, "restrictheader",      'r', OPT_MULTI,  stdsyntax, ".*",                  "foo", "regex" );
  -    option_register(o, "newsgroup",           NUL, OPT_MULTI,  stdsyntax, ".*",                  "foo", "newsgroup");
  +    (void)option_register(o, "childsmax",           'C', OPT_SINGLE, &stdsyntax, "[0-9]{,5}",           "foo", "childsmax" );
  +    (void)option_register(o, "daemonize",           'D', OPT_FLAG,   NULL,       NULL,                  "foo", NULL );
  +    (void)option_register(o, "kill",                'K', OPT_FLAG,   NULL,       NULL,                  "foo", NULL );
  +    (void)option_register(o, "pidfile",             'P', OPT_SINGLE, &stdsyntax, ".{,255}",             "foo", "pidfile" );
  +    (void)option_register(o, "veryverbose",         'V', OPT_FLAG,   NULL,       NULL,                  "foo", NULL );
  +    (void)option_register(o, "acl",                 'a', OPT_MULTI,  &stdsyntax, "[0-9.](/[0-9]2)?",    "foo", "addr[/mask]" );
  +    (void)option_register(o, "bind",                'b', OPT_SINGLE, &stdsyntax, ".*",                  "foo", "addr[:port]|-|path[:perms]" );
  +    (void)option_register(o, "client",              'c', OPT_SINGLE, &stdsyntax, ".*",                  "foo", "addr[:port]" );
  +    (void)option_register(o, "destination",         'd', OPT_MULTI,  &stdsyntax, ".*",                  "foo", "addr[:port]" );
  +    (void)option_register(o, "groupmode",           'g', OPT_SINGLE, &stdsyntax, ".*",                  "foo", "groupmode" );
  +    (void)option_register(o, "headervalue",         'h', OPT_MULTI,  &stdsyntax, ".*",                  "foo", "header: value" );
  +    (void)option_register(o, "include",             'i', OPT_MULTI,  &includeit, ".*",                  "foo", "configfile" );
  +    (void)option_register(o, "size",                's', OPT_SINGLE, &stdsyntax, ".*",                  "foo", "bytes" );
  +    (void)option_register(o, "timeoutlmtpaccept",   NUL, OPT_MULTI,  &stdsyntax, ".*",                  "foo", "sec" );
  +    (void)option_register(o, "timeoutlmtpread",     NUL, OPT_MULTI,  &stdsyntax, ".*",                  "foo", "sec" );
  +    (void)option_register(o, "timeoutlmtpwrite",    NUL, OPT_MULTI,  &stdsyntax, ".*",                  "foo", "sec" );
  +    (void)option_register(o, "timeoutnntpconnect",  NUL, OPT_MULTI,  &stdsyntax, ".*",                  "foo", "sec" );
  +    (void)option_register(o, "timeoutnntpread",     NUL, OPT_MULTI,  &stdsyntax, ".*",                  "foo", "sec" );
  +    (void)option_register(o, "timeoutnntpwrite",    NUL, OPT_MULTI,  &stdsyntax, ".*",                  "foo", "sec" );
  +    (void)option_register(o, "mailfrom",            'm', OPT_SINGLE, &stdsyntax, ".*",                  "foo", "regex" );
  +    (void)option_register(o, "nodename",            'n', OPT_SINGLE, &stdsyntax, ".*",                  "foo", "nodename" );
  +    (void)option_register(o, "operationmode",       'o', OPT_SINGLE, &stdsyntax, ".*",                  "foo", "post|feed" );
  +    (void)option_register(o, "l2spec",              'l', OPT_SINGLE, &stdsyntax, ".*",                  "foo", "spec" );
  +    (void)option_register(o, "uid",                 'u', OPT_SINGLE, &stdsyntax, ".*",                  "foo", "number|name" );
  +    (void)option_register(o, "restrictheader",      'r', OPT_MULTI,  &stdsyntax, ".*",                  "foo", "regex" );
  +    (void)option_register(o, "newsgroup",           NUL, OPT_MULTI,  &stdsyntax, ".*",                  "foo", "newsgroup");
  +
  +    
  +    {
  +        int i;
  +        char *cp;
  +        optionconfig_t *ocp;
  +        popt_context poptCon;   /* context for parsing command-line options */
   
  +        poptCon = popt_getcontext(NULL, argc, (const char **)argv, o->pt, 0);
  +        popt_setotheroptionhelp(poptCon, "[OPTIONS]* [newsgroup ...]");
  +        printf("DEBUG: argc=%d\n", argc);
  +        if (argc < 2) {
  +            popt_printusage(poptCon, stderr, 0);
  +            exit(1);
  +        }
  +        while ((i = popt_getnextopt(poptCon)) >= 0) {
  +            (void)option_find(o, i, &ocp);
  +            if (ocp->type == OPT_FLAG)
  +                ocp->cb(ocp, "ohne", ocp->cbctx);
  +            else
  +                ocp->cb(ocp, cp = popt_getoptarg(poptCon), ocp->cbctx);
  +            printf("DEBUG: popt_getnextopt returned  %d \"%s\", \"%s\"\n", i, o->pt[i].longName, ocp->longname);
  +            printf("DEBUG: popt_getoptarg  returned  \"%s\"\n", cp);
  +        }
  +        printf("DEBUG: current popt error is \"%s\"(%d)\n", popt_strerror(i), i);
  +        printf("DEBUG: ----\n");
  +        while ((cp = (char *)popt_getarg(poptCon)) != NULL) {
  +            printf("DEBUG: popt_getarg returned \"%s\"\n", cp);
  +        }
  +        printf("DEBUG: current popt error is \"%s\"(%d)\n", popt_strerror(i), i);
  +        popt_freecontext(poptCon);
  +    }
       return OPTION_OK;
   }
   
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.h
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 lmtp2nntp_config.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.h	17 Jan 2002 17:01:55 -0000	1.3
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.h	21 Jan 2002 16:21:16 -0000	1.4
  @@ -27,34 +27,42 @@
   #include "lmtp2nntp_global.h"
   #include "val.h"
   
  +struct optionconfig_s;
  +typedef struct optionconfig_s optionconfig_t;
  +
   typedef struct {
  -    int         childsmax;
  -    int         daemonize;
  -    int         kill;
  -    char       *pidfile;
  -    argz_t      acl;
  -    char       *bind;
  -    char       *client;
  -    argz_t      destination;
  -    char       *groupmode;
  -    argz_t      headervalue;
  -    argz_t      include;
  -    char       *size;
  -    int        *timeoutlmtpaccept;
  -    int        *timeoutlmtpread;
  -    int        *timeoutlmtpwrite;
  -    int        *timeoutnntpconnect;
  -    int        *timeoutnntpread;
  -    int        *timeoutnntpwrite;
  -    char       *mailfrom;
  -    char       *nodename;
  -    char       *operationmode;
  -    char       *l2spec;
  -    char       *uid;
  -    argz_t      restrictheader;
  -    argz_t      newsgroup;
  -                    /**/
  -    val_t      *vo;
  +    int                 childsmax;
  +    int                 daemonize;
  +    int                 kill;
  +    char               *pidfile;
  +    argz_t              acl;
  +    char               *bind;
  +    char               *client;
  +    argz_t              destination;
  +    char               *groupmode;
  +    argz_t              headervalue;
  +    argz_t              include;
  +    char               *size;
  +    int                *timeoutlmtpaccept;
  +    int                *timeoutlmtpread;
  +    int                *timeoutlmtpwrite;
  +    int                *timeoutnntpconnect;
  +    int                *timeoutnntpread;
  +    int                *timeoutnntpwrite;
  +    char               *mailfrom;
  +    char               *nodename;
  +    char               *operationmode;
  +    char               *l2spec;
  +    char               *uid;
  +    argz_t              restrictheader;
  +    argz_t              newsgroup;
  +                /*FIXME above*/
  +    optionconfig_t     *first;
  +    optionconfig_t     *last;
  +    val_t              *vo;     /* val_t for all options */
  +    int                 pi;     /* popt index to next record */
  +    int                 pn;     /* popt number of available records */
  +    struct popt_option *pt;     /* popt table */
   
   } lmtp2nntp_option_t;
   
  @@ -65,6 +73,14 @@
       OPTION_ERR_VAL  /* libval failed */
   } lmtp2nntp_option_rc_t;
   
  -lmtp2nntp_option_rc_t option_create (lmtp2nntp_option_t **);
  -lmtp2nntp_option_rc_t option_parse  (lmtp2nntp_option_t *, int, char **);
  -lmtp2nntp_option_rc_t option_destroy(lmtp2nntp_option_t *);
  +typedef enum {
  +    OPT_FLAG,
  +    OPT_SINGLE,
  +    OPT_MULTI
  +} optiontype_t;
  +
  +typedef void (optionloop_cb_t)(optionconfig_t *oc, char *arg, char *cbctx);
  +lmtp2nntp_option_rc_t option_create  (lmtp2nntp_option_t **);
  +lmtp2nntp_option_rc_t option_register(lmtp2nntp_option_t *, char *, char, optiontype_t, optionloop_cb_t *, char *, char *, char *);
  +lmtp2nntp_option_rc_t option_parse   (lmtp2nntp_option_t *, int, char **);
  +lmtp2nntp_option_rc_t option_destroy (lmtp2nntp_option_t *);

From ossp-cvs-owner@ossp.org  Mon Jan 21 19:00:08 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3A308764D8; Mon, 21 Jan 2002 19:00:08 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc devtool.conf devtool.func
Message-Id: <20020121180008.3A308764D8@mail.ossp.org>
Date: Mon, 21 Jan 2002 19:00:08 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   21-Jan-2002 19:00:08
  Branch: HEAD                             Handle: 2002012118000700

  Modified files:
    ossp-pkg/rc             devtool.conf devtool.func

  Log:
    Changed autoconf and autoheader ordering, added automake and aclocal logic.

  Summary:
    Revision    Changes     Path
    1.2         +4  -0      ossp-pkg/rc/devtool.conf
    1.2         +21 -1      ossp-pkg/rc/devtool.func
  ____________________________________________________________________________

  Index: ossp-pkg/rc/devtool.conf
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.conf
  --- ossp-pkg/rc/devtool.conf	18 Jan 2002 16:47:17 -0000	1.1
  +++ ossp-pkg/rc/devtool.conf	21 Jan 2002 18:00:07 -0000	1.2
  @@ -5,11 +5,15 @@
   %autogen
       @autogen shtool   1.5.4 "1.5.*" all
       @autogen libtool  1.4.2 "1.4*"
  +    @autogen aclocal  1.5   "1.4*"          # Part of automake
  +    @autogen automake 1.5   "1.4*"
       @autogen autoconf 2.52  "2.5.*"
   
   %autoclean
       @autoclean shtool
       @autoclean libtool
  +    @autoclean aclocal
  +    @autoclean automake
       @autoclean autoconf
   
   %configure
  Index: ossp-pkg/rc/devtool.func
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.func
  --- ossp-pkg/rc/devtool.func	18 Jan 2002 16:47:17 -0000	1.1
  +++ ossp-pkg/rc/devtool.func	21 Jan 2002 18:00:07 -0000	1.2
  @@ -28,16 +28,28 @@
       tool=$1
       shift
       case $tool in
  +        aclocal )
  +            aclocal_version=`devtool_require aclocal --version 4 "$1" "$2"`
  +            echo "generating (GNU Aclocal $aclocal_version): aclocal.m4"
  +            aclocal
  +            ;;
           autoconf )
               autoconf_version=`devtool_require autoconf --version 4 "$1" "$2"`
               echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
               autoconf
               autoheader 2>&1 | grep -v "is unchanged"
               ;;
  +        automake )
  +            # We might depend on config.h.in
  +            (autoheader --version) </dev/null >/dev/null 2>&1 && autoheader
  +            automake_version=`devtool_require automake --version 4 "$1" "$2"`
  +            echo "generating (GNU Automake $automake_version): INSTALL Makefile.in depcomp install-sh missing mkinstalldirs stamp-h.in"
  +            automake --add-missing --copy --gnu
  +            ;;
           libtool )
               libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
               echo "generating (GNU Libtool $libtoolize_version): ltmain.sh, libtool.m4, config.guess, config.sub"
  -            libtoolize --force --copy >/dev/null 2>&1
  +            libtoolize --force --copy --automake >/dev/null 2>&1
               cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
                   sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` libtool.m4
               ;;
  @@ -58,6 +70,14 @@
           autoconf )
               echo "removing: configure config.h.in"
               rm -f configure config.h.in
  +            ;;
  +        automake )
  +            echo "removing: INSTALL Makefile.in depcomp install-sh missing mkinstalldirs stamp-h.in"
  +            rm -f INSTALL Makefile.in depcomp install-sh missing mkinstalldirs stamp-h.in
  +            ;;
  +        aclocal )
  +            echo "removing: aclocal.m4"
  +            rm -f aclocal.m4
               ;;
           libtool )
               echo "removing: ltmain.sh libtool.m4 config.guess config.sub"

From ossp-cvs-owner@ossp.org  Mon Jan 21 19:14:54 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 719D2764D8; Mon, 21 Jan 2002 19:14:54 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.pod
Message-Id: <20020121181454.719D2764D8@mail.ossp.org>
Date: Mon, 21 Jan 2002 19:14:54 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   21-Jan-2002 19:14:54
  Branch: HEAD                             Handle: 2002012118145400

  Modified files:
    ossp-pkg/rc             rc.pod

  Log:
    Added text, reorganization, and editing.

  Summary:
    Revision    Changes     Path
    1.5         +166 -89    ossp-pkg/rc/rc.pod
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.pod
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 rc.pod
  --- ossp-pkg/rc/rc.pod	18 Jan 2002 16:47:53 -0000	1.4
  +++ ossp-pkg/rc/rc.pod	21 Jan 2002 18:14:54 -0000	1.5
  @@ -43,6 +43,130 @@
      [-c|--config] [-q|--query] [-r|--raw]
      <command> <section> [<section> ...]
   
  +=head1 DESCRIPTION
  +
  +OSSP rc is a run command processor. It applies the script code associated with
  +a given section label to one or more given commands. The command(s) must each
  +have entries in the form rc.<command> including script code grouped into
  +sections. OSSP rc references these command entries by reading the
  +configuration file (see FILES) and searching the directory where the command
  +entries reside.
  +
  +Each section of script code extends a type of functionality described by its
  +section label. This label is the same one given before the desired command(s).
  +Although only one section is possible for each call to OSSP rc, many
  +`commands' can follow the section label. This allows for an abbreviated input
  +format when calling the same script section of many commands. An example of
  +this is given in (EXAMPLES.)
  +
  +=head1 OPTIONS
  +
  +Inclusive options which may be used with another
  +
  +-v, --verbose
  +        verbosely report processing, including all warnings
  +
  +-s, --silent
  +        hold silence, and output no text messages whatsoever
  +
  +-d, --debug
  +        don't remove any temporary files, and output debug messages
  +
  +-r, --raw
  +        output text using no terminal control sequences
  +
  +Mutually exclusive options, i.e. only a single one can be given
  +
  +-h, --help
  +        print this help, then exit
  +
  +-V, --version
  +        print version number, then exit
  +
  +-c, --config
  +        locate the configuration file in the following path,
  +        overriding the environment variable $OSSP_RC_ROOT when
  +        locating the configuration file
  +
  +-p, --print
  +        output the text as it would be interpreted
  +        by the shell, but do not run the commands
  +
  +-e, --eval
  +        output the text for a command suitable for shell evaluation
  +
  +-x, --exec
  +        execute in subshell(s), follow with <package> <section>
  +
  +-q, --query
  +        print the value(s) of rc configuration variables
  +
  +-l, --labels
  +        learn what section labels a run command extends
  +
  +-i, --info
  +        print a comprehensive summary of the rc environment
  +
  +All of these options have reasonable default values,
  +which OSSP rc assumes when no option is otherwise given.
  +
  +=head1 RETURN VALUE
  +
  +Returns zero if successful, or nonzero if otherwise.
  +
  +=head1 ERRORS
  +
  +-1 Faulty run command hierarchy
  + 0 Success
  + 1 First (or only) run command failed
  + 2 Second run command failed
  + N Nth run command failed
  +
  +Positive error values are indexed to their respective run commands by command
  +line ordering. For more information see `DIAGNOSTICS.'
  +
  +=head1 EXAMPLES
  +
  +/myetc/rc start sshd
  +/etc/rc close docview primary httpd sshd radiusd
  +/sfw/etc/rc restart smtpd lmtp2nntp
  +/cw/etc/rc restart apache
  +
  +=head1 ENVIRONMENT
  +
  +OSSP_RC_ROOT                - Where the OSSP rc hierarchy is located
  +OSSP_RC_OPTIONS             - Options, same as the command line ones
  +
  +The environment determines where rc will look before beginning to process run
  +commands. It also influences the behaviour, just as the command line options
  +do. There is no difference between typing an option in the command line, and
  +adding the same option to the OSSP_RC_OPTIONS variable.
  +
  +OSSP_RC_IMPLS               - Other rc implementations
  +
  +The OSSP_RC_IMPLS variable plays a role only when the user has more than one
  +logical set of run command sections. If rc reads anything but EOL in this
  +variable, it will assume that more than one rc implementation exists. The
  +variable should contain a chain of paths where other rc implementations are.
  +This allows the user to build several OSSP rc hierarchies and then switch from
  +each... Blah FIXME I don't know if we should be paying attention to the
  +ENVIRONMENT guys. Maybe this is not a good solution for our dynamic OpenPKG
  +environment problem after all.
  +
  +=head1 FILES
  +
  +/$OSSP_RC_ROOT/rc.conf      - Configuration file
  +
  +=head1 SEE ALSO
  +
  +OSSP rc integrates concepts taken from other run command architectures. For
  +more information, inspect the /etc/rc structures provided by FreeBSD, Solaris,
  +and Red Hat distributions.
  +
  +biff(1), bagg(1), honk(1), gonk(1), and quatch(1).
  +
  +=head1 NOTES
  +
   =over 4
   
   =item B<General>
  @@ -91,54 +215,6 @@
   [B<-h>|B<--help>]
   [B<-V>|B<--version>] 
   
  -=head1 DESCRIPTION
  -
  -OSSP rc is a run command processor. It applies the script code associated with
  -a given section label to one or more given commands. The command(s) must each
  -have entries in the form rc.<command> including script code grouped into
  -sections. OSSP rc references these command entries by reading the
  -configuration file (see FILES) and searching the directory where the command
  -entries reside.
  -
  -Each section of script code extends a type of functionality described by its
  -section label. This label is the same one given before the desired command(s).
  -Although only one section is possible for each call to OSSP rc, many
  -`commands' can follow the section label. This allows for an abbreviated input
  -format when calling the same script section of many commands. An example of
  -this is given in (EXAMPLES.)
  -
  -=head1 PARAMETER OPTIONS
  -
  --h, --help
  -       print this help, then exit
  -
  --V, --version
  -       print version number, then exit
  -
  --v, --verbose
  -       verbosely report processing, including all warnings
  -
  --d, --debug
  -       don't remove any temporary files
  -
  --p, --print
  -       print the name of each section as it is processed
  -
  --e, --eval
  -       evaluate the nature of a fat tomato sandwich FIXME!
  -
  --c, --config
  -       locate the configuration file in the following path
  -
  --q, --query
  -       ask Ralf what he thinks about snails FIXME!
  -
  --r, --raw
  -       the sushi is too raw, and must be cooked longer FIXME!
  -
  -All of these options have reasonable default values,
  -which OSSP rc assumes when no option is given.
  -
   =over 4
   
   =item B<-f>, B<--rcfile> I<file>
  @@ -155,6 +231,8 @@
   tries to use (in this order) C<$TMPDIR>, C<$TEMPDIR>, C<~/tmp> and
   C</tmp>.
   
  +!FIXME! Remark, difference between PARAMETER OPTIONS and COMMAND OPTIONS
  +
   =item B<-r>, B<--raw>
   
   Control whether the output controlled by the options B<--config>,
  @@ -172,9 +250,7 @@
   
   Enables debugging messages on F<stderr>.
   
  -=back4 
  -
  -=head1 COMMAND OPTIONS
  +!FIXME! Remark, difference between PARAMETER OPTIONS and COMMAND OPTIONS
   
   These options are mutually exclusive, i.e., you can specify only a
   single one to select the type of operation.
  @@ -235,57 +311,50 @@
   
   =back
   
  -=head1 RETURN VALUE
  -
  -Will return an error every single time ;-)
  -
  -=head1 EXAMPLES
  -
  -/myetc/rc start sshd
  -/etc/rc close docview primary
  -/sfw/etc/rc restart lmtp2nntp
  -/cw/etc/rc restart apache
  -
  -=head1 ENVIRONMENT
  -
  -=head1 FILES
  -
  -rc.conf
  -
  -=head1 SEE ALSO
  -
  -OSSP rc integrates concepts taken from other run command architectures. For
  -more information, inspect the /etc/rc structures provided by FreeBSD, Solaris,
  -and Red Hat distributions.
  -
  -biff(1), bagg(1), honk(1), gonk(1), and quatch(1).
  -
  -=head1 NOTES
  -
   =head1 WARNINGS
   
   =head1 DIAGNOSTICS
   
  -Rc will print out error messages to stderr. The messages can be used to
  -diagnose possible sources of failure of the chosen command, or even within the
  -run command structure itself. FIXME! Marcus Bemerkung. The possible errors
  -observed include the following.
  -
   =over 4
   
  -OSSP rc: The ice cream is too hot
  -Possible solution: This error happens alot.
  +An explanation of all possible exit status values
   
  -OSSP rc: The hot chocolate has a fly in it
  -Possible solution: Just take the fly out and drink the coffee.
  +The exit status is 0 if rc was able to initiate the given section code of the
  +given run command(s). If rc encountered an error during its processing, the
  +exit status is indexed to the first command parameter which failed as ordered
  +by the command line. This means that if rc returns 3, the third run command
  +given on the command line failed.
  +
  +FIXME! Choose one interpretation:
  +1 This does not mean that only the third run command failed, however.
  +  It is possible that the fourth and sixth failed as well, for example.
  +
  +2 Upon failure of any run command, OSSP rc halts and processes no more.
  +  Because of such a failure, a long batch of run commands may not be processed.
  +
  +This may be important with long run command batches or dependencies between
  +run commands, so plan well when constructing the order of run commands on the
  +command line.
  +
  +In case rc fails when only one run command is given, the exit status will be 1
  +as expected. If rc failed because of a broken run command hierarchy, the exit
  +status will be -1. This can happen if a script file is moved or renamed, for
  +example. If the run command hierarchy is broken, no further action is taken
  +and no run commands are processed.
   
   =back 4
   
   =head1 BUGS
   
  +!FIXME!
  +To report a bug, please visit the web page http://www.ossp.org/bugdb.html. Be
  +sure to include the word "rc" in the subject field of your bug report.
  +
  +OSSP rc contains no known bugs to date.
  +
   =head1 RESTRICTIONS
   
  -Bugs we don't plan to fix include washing out the bathtub.
  +Bugs we don't plan to fix include washing out the bathtub. !FIXME!
   
   =head1 AUTHORS
   
  @@ -294,6 +363,14 @@
   
   =head1 HISTORY
   
  -Part of the OpenPKG distribution. Had its start in OpenPKG development.
  +OSSP rc was born to replace the run command logic used in the OpenPKG project.
  +In the first version of OpenPKG (http://www.openpkg.org), a run command script
  +called `rc' could issue run commands to programs installed under the OpenPKG
  +software hierarchy. This solution had a number of inconveniences, however. As
  +time wore on, developers at Cable & Wireless Deutschland GmbH decided to
  +replace the bourne shell script with a faster, more robust implementation.
  +This is OSSP rc. By the way, an unplanned advantage of this redevelopment is
  +that OSSP rc can be used for any project needing generic run command logic as
  +well as the OpenPKG project as first planned.
   
   =cut

From ossp-cvs-owner@ossp.org  Tue Jan 22 17:09:48 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4FB89764EB; Tue, 22 Jan 2002 17:09:48 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c lmtp2nntp_config.h l...
Message-Id: <20020122160948.4FB89764EB@mail.ossp.org>
Date: Tue, 22 Jan 2002 17:09:48 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   22-Jan-2002 17:09:48
  Branch: HEAD                             Handle: 2002012216094700

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c lmtp2nntp_config.h
                            lmtp2nntp_main.c

  Log:
    flush

  Summary:
    Revision    Changes     Path
    1.11        +172 -112   ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.5         +2  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_config.h
    1.7         +3  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	21 Jan 2002 16:21:16 -0000	1.10
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	22 Jan 2002 16:09:47 -0000	1.11
  @@ -104,53 +104,11 @@
   void die(char *); /* FIXME */
   void die(char *msg)
   {
  -        printf("ERROR: %s\n", msg);
  +        //printf("ERROR: %s\n", msg);
               exit(-1);
   }
   
   #if 0
  -static val_rc_t dumper(void *ctx, const char *name, int type, const char *desc, void *data)
  -{
  -    switch (type) {
  -        case VAL_TYPE_VAL:
  -            printf("DEBUG: <%10s>, name=<%10s>, VAL_TYPE_VAL,    desc=<%20s>, data@%.8lx INTERNAL\n",
  -                    (char *)ctx, name,      desc, (long)data);
  -            break;
  -        case VAL_TYPE_PTR:
  -            printf("DEBUG: <%10s>, name=<%10s>, VAL_TYPE_PTR,    desc=<%20s>, data@%.8lx=%.8lx\n",
  -                    (char *)ctx, name,      desc, (long)data, *(long *)data);
  -            break;
  -        case VAL_TYPE_CHAR:                                                                              
  -            printf("DEBUG: <%10s>, name=<%10s>, VAL_TYPE_CHAR,   desc=<%20s>, data@%.8lx='%c'\n",
  -                    (char *)ctx, name,      desc, (long)data, *(char *)data);
  -            break;
  -        case VAL_TYPE_SHORT:                                                                             
  -            printf("DEBUG: <%10s>, name=<%10s>, VAL_TYPE_SHORT,  desc=<%20s>, data@%.8lx=%8d\n",
  -                    (char *)ctx, name,      desc, (long)data, *(short *)data);
  -            break;
  -        case VAL_TYPE_INT:                                                                               
  -            printf("DEBUG: <%10s>, name=<%10s>, VAL_TYPE_INT,    desc=<%20s>, data@%.8lx=%8d\n",
  -                    (char *)ctx, name,      desc, (long)data, *(int *)data);
  -            break;
  -        case VAL_TYPE_LONG:                                                                              
  -            printf("DEBUG: <%10s>, name=<%10s>, VAL_TYPE_LONG,   desc=<%20s>, data@%.8lx=%8ld\n",
  -                    (char *)ctx, name,      desc, (long)data, *(long *)data);
  -            break;
  -        case VAL_TYPE_FLOAT:                                                                             
  -            printf("DEBUG: <%10s>, name=<%10s>, VAL_TYPE_FLOAT,  desc=<%20s>, data@%.8lx=%8f\n",
  -                    (char *)ctx, name,      desc, (long)data, *(float *)data);
  -            break;
  -        case VAL_TYPE_DOUBLE:                                                                            
  -            printf("DEBUG: <%10s>, name=<%10s>, VAL_TYPE_DOUBLE, desc=<%20s>, data@%.8lx=%8f\n",
  -                    (char *)ctx, name,      desc, (long)data, *(double *)data);
  -            break;
  -        default: 
  -            printf("DEBUG: <%10s>, name=<%10s>, type = %.8lx,    desc=<%20s>, data@%.8lx\n",
  -                    (char *)ctx, name, (long)type, desc, (long)data);
  -    }
  -
  -    return VAL_OK;
  -}
   
   
   
  @@ -192,7 +150,7 @@
           if (close(fd) == -1)
               die("close");
       }
  -    printf("DEBUG: *** 1 *** file as it was just read in ***\n%s***\n", cpBuf);
  +    //printf("DEBUG: *** 1 *** file as it was just read in ***\n%s***\n", cpBuf);
   
       {
           char *cpI;  /* pointer to next character to be read */
  @@ -232,23 +190,23 @@
                       if (!eline) { /* process logical line unless it's empty */
                           *(cpO-1) = NUL;
                           if (lline == (pline-1))
  -                            printf("DEBUG: line[%3d] = ***%s***\n", lline, cpL);
  +                            //printf("DEBUG: line[%3d] = ***%s***\n", lline, cpL);
                           else
  -                            printf("DEBUG: [%3d-%3d] = ***%s***\n", lline, pline-1, cpL);
  +                            //printf("DEBUG: [%3d-%3d] = ***%s***\n", lline, pline-1, cpL);
                           {
                               char *cp = cpL;
                               char *command;
                               char *value;
   
                               if ((command = str_token(&cp, " \t", "\"'", "#", STR_STRIPQUOTES|STR_BACKSLASHESC)) == NULL)
  -                                printf("DEBUG: no command - comment only\n");
  +                                //printf("DEBUG: no command - comment only\n");
                               else {
  -                                printf("DEBUG:   command = ***%s***\n", command);
  +                                //printf("DEBUG:   command = ***%s***\n", command);
                                   if ((value = str_token(&cp, " \t", "\"'", "#", STR_STRIPQUOTES|STR_BACKSLASHESC)) == NULL)
  -                                    printf("DEBUG: no value - section\n");
  +                                    //printf("DEBUG: no value - section\n");
                                   else {
                                       while(isspace((int)*value)) value++;
  -                                    printf("DEBUG:     value = ***%s***\n", value);
  +                                    //printf("DEBUG:     value = ***%s***\n", value);
                                   }
                               }
                           }
  @@ -265,7 +223,7 @@
   #endif
   
   struct optionconfig_s {
  -    optionconfig_t *next;           /* cleanup chain for destroy */
  +    optionconfig_t *next;               /* cleanup chain for destroy */
                       /**/
       char               *longname;       /* the long name (optional if shortname given) */
       char                shortname;      /* the short name (optional if longname given) */
  @@ -274,17 +232,45 @@
       optiontype_t        type;           /* OPT_FLAG, OPT_SINGLE, OPT_MULTI */
       optionloop_cb_t    *cb;             /* callback for first iteration - syntax check and include */
       void               *cbctx;          /* context for pass1 */
  -    void               *pass1default;   /* default for pass1 */
       val_t              *val;            /* val we are registered under */
                       /**/
  -    int             number;         /* number of this option for popt */
  -    union {                         /* option data as read from configuration */
  -        int f;                      /* OPT_FLAG */
  -        char *s;                    /* OPT_SINGLE */
  -        char **m;                   /* OPT_MULTI */
  +    int                 number;         /* number of this option for popt */
  +    union {                             /* option data as read from configuration */
  +        int f;                          /* OPT_FLAG */
  +        char *s;                        /* OPT_SINGLE */
  +        char **m;                       /* OPT_MULTI */
       } data;
  +    int ndata;
   };
   
  +static val_rc_t dumper(void *ctx, const char *name, int type, const char *desc, void *data)
  +{
  +    optionconfig_t *oc;
  +    int i;
  +
  +    if (type != VAL_TYPE_PTR)
  +        return VAL_OK;
  +
  +    oc = (optionconfig_t *)data;
  +
  +    switch (oc->type) {
  +        case OPT_FLAG:
  +            printf("DEBUG: <%5s>, name=<%20s>, OPT_FLAG,   desc=<%20s>, data@%.8lx->[%d]%d\n",     (char *)ctx, name, desc, (long)oc, oc->ndata, oc->data.f);
  +            break;
  +        case OPT_SINGLE:
  +            printf("DEBUG: <%5s>, name=<%20s>, OPT_SINGLE, desc=<%20s>, data@%.8lx->[%d]\"%s\"\n", (char *)ctx, name, desc, (long)oc, oc->ndata, oc->data.s == NULL ? "NULL" : oc->data.s);
  +            break;
  +        case OPT_MULTI:
  +            printf("DEBUG: <%5s>, name=<%20s>, OPT_MULTI,  desc=<%20s>, data@%.8lx->[%d]%.8lx\n",  (char *)ctx, name, desc, (long)oc, oc->ndata, (long)oc->data.m);
  +            for (i = 0; i < oc->ndata; i++) {
  +                printf("DEBUG:        [%3d]                        =<%20s>\n", i, oc->data.m[i]);
  +            }
  +            break;
  +        default:
  +            break;
  +    }
  +    return VAL_OK;
  +}
   lmtp2nntp_option_rc_t option_find(lmtp2nntp_option_t *o, int number, optionconfig_t **ocp);
   lmtp2nntp_option_rc_t option_find(lmtp2nntp_option_t *o, int number, optionconfig_t **ocp)
   {
  @@ -306,7 +292,7 @@
       lmtp2nntp_option_rc_t rc = VAL_OK;
       optionconfig_t *oc;
       
  -    printf("DEBUG: enter option_register(%.8lx, \"%s\", '%c', %d, %.8lx, %.8lx, \"%s\", \"%s\")\n", (long)o, longname, shortname, type, (long)cb, (long)cbctx, descrip, argdescrip);
  +    //printf("DEBUG: enter option_register(%.8lx, \"%s\", '%c', %d, %.8lx, %.8lx, \"%s\", \"%s\")\n", (long)o, longname, shortname, type, (long)cb, (long)cbctx, descrip, argdescrip);
   
       if (o == NULL || longname == NULL)
           return OPTION_ERR_ARG;
  @@ -314,7 +300,7 @@
       /* create a optionconfig_t structure */
       if ((oc = (optionconfig_t *)malloc(sizeof(optionconfig_t))) == NULL)
           return OPTION_ERR_MEM;
  -    printf("DEBUG: optionconfig_t structure malloc'ed\n");
  +    //printf("DEBUG: optionconfig_t structure malloc'ed\n");
       oc->next         = NULL;
       oc->longname     = strdup(longname);
       oc->shortname    = shortname;
  @@ -323,34 +309,35 @@
       oc->type         = type;
       oc->cb           = cb;
       oc->cbctx        = cbctx;
  -    oc->pass1default = NULL; /*FIXME*/
       oc->val          = o->vo;
       oc->number       = o->pi; /*FIXME + 1; 0 is a reserved val in popt, so offset 1 */
  +    oc->data.f       = 0;
  +    oc->data.s       = NULL; /* just in case a pointer is larger than int */
  +    oc->data.m       = NULL;
  +    oc->ndata        = 0;
       if (   (                      oc->longname   == NULL)
           || (descrip    != NULL && oc->descrip    == NULL)
           || (argdescrip != NULL && oc->argdescrip == NULL)
             )
           CU(OPTION_ERR_MEM);
   
  -    printf("DEBUG: optionconfig_t structure created\n");
  +    //printf("DEBUG: optionconfig_t structure created\n");
   
       /* feed lib_val */
  -    (void)/*FIXME rc*/val_reg(oc->val, oc->longname,
  -                              type == OPT_FLAG ? VAL_TYPE_INT : VAL_TYPE_PTR,
  -                              oc->descrip, NULL);
  +    (void)/*FIXME rc*/val_reg(oc->val, oc->longname, VAL_TYPE_PTR, oc->descrip, oc);
   
  -    printf("DEBUG: val_reg'ed\n");
  +    //printf("DEBUG: val_reg'ed\n");
   
       /* feed lib_popt */
  -    printf("DEBUG: o->pi=%d, o->pn=%d\n", o->pi, o->pn);
  +    //printf("DEBUG: o->pi=%d, o->pn=%d\n", o->pi, o->pn);
       if (o->pi >= (o->pn-2)) { /* correction by two here, in malloc and realloc is for AUTOHELP and TABLEEND */
           if (o->pt == NULL) {
  -            printf("DEBUG: malloc\n");
  +            //printf("DEBUG: malloc\n");
               o->pt = (struct popt_option *)malloc(                (1 + 2) * sizeof(struct popt_option)); /*FIXME out of mem*/
               o->pn = 1;
           }
           else {
  -            printf("DEBUG: realloc\n");
  +            //printf("DEBUG: realloc\n");
               o->pt = (struct popt_option *)realloc(o->pt, (o->pn * 2 + 2) * sizeof(struct popt_option)); /*FIXME out of mem*/
               o->pn = o->pn * 2;
           }
  @@ -381,7 +368,7 @@
       o->pt[o->pi+2].descrip    = NULL;
       o->pt[o->pi+2].argDescrip = NULL;
       o->pi++;
  -    printf("DEBUG: popt'ed\n");
  +    //printf("DEBUG: popt'ed\n");
   
       /* link in this new optionconfig_t structure */
       if (o->first == NULL) {
  @@ -392,7 +379,7 @@
           o->last->next = oc; 
           o->last       = oc;
       }
  -    printf("DEBUG: linked\n");
  +    //printf("DEBUG: linked\n");
   
       return rc;
   
  @@ -406,20 +393,77 @@
       return rc;
   }
   
  -static void stdsyntax(optionconfig_t *oc, char *arg, char *cbctx)
  +static lmtp2nntp_option_rc_t stdsyntax(optionconfig_t *oc, char *arg, char *cbctx)
   {
       printf("DEBUG: enter stdsyntax %.8lx, \"%s\", \"%s\"\n", (long)oc, arg, cbctx);
  -    return;
  +
  +    //printf("DEBUG: oc->type=%d\n", oc->type);
  +    switch (oc->type) {
  +        case OPT_FLAG:
  +            printf("DEBUG: flag\n");
  +            if (arg != NULL || cbctx != NULL)
  +                return OPTION_ERR_ARG;
  +            if (oc->ndata >= 1)
  +                return OPTION_ERR_USE;
  +            oc->data.f = 1;
  +            oc->ndata = 1;
  +            break;
  +        case OPT_SINGLE:
  +            printf("DEBUG: single\n");
  +            if (arg == NULL)
  +                return OPTION_ERR_ARG;
  +            if (oc->ndata >= 1 || oc->data.s != NULL)
  +                    return OPTION_ERR_USE;
  +            if (cbctx != NULL)
  +                if (str_parse(arg, cbctx) <= 0) {
  +                    //printf("DEBUG: \"%s\" does NOT match \"%s\"\n", arg, cbctx);
  +                    return OPTION_ERR_USE;
  +                }
  +            printf("DEBUG: \"%s\" does match \"%s\"\n", arg, cbctx);
  +            if ((oc->data.s = strdup(arg)) == NULL)
  +                    return OPTION_ERR_MEM;
  +            oc->ndata = 1;
  +            break;
  +        case OPT_MULTI:
  +            //printf("DEBUG: multi\n");
  +            if (arg == NULL)
  +                return OPTION_ERR_ARG;
  +            if (oc->ndata >= 1 && oc->data.m == NULL)
  +                    return OPTION_ERR_USE;
  +            if (cbctx != NULL)
  +                if (str_parse(arg, cbctx) <= 0) {
  +                    //printf("DEBUG: \"%s\" does NOT match \"%s\"\n", arg, cbctx);
  +                    return OPTION_ERR_USE;
  +                }
  +            //printf("DEBUG: \"%s\" does match \"%s\"\n", arg, cbctx);
  +            if (oc->data.m == NULL) {
  +                if ((oc->data.m = (char **)malloc(             (        1 + 1) * sizeof(char **))) == NULL)
  +                    return OPTION_ERR_MEM;
  +            }
  +            else {
  +                if ((oc->data.m = (char **)realloc(oc->data.m, (oc->ndata + 1) * sizeof(char **))) == NULL)
  +                    return OPTION_ERR_MEM;
  +            }
  +            if ((oc->data.m[oc->ndata] = strdup(arg)) == NULL)
  +                    return OPTION_ERR_MEM;
  +            oc->ndata++;
  +            oc->data.m[oc->ndata] = NULL;
  +            break;
  +        default:
  +            return OPTION_ERR_ARG;
  +            break;
  +    }
  +    return OPTION_OK;
   }
   
  -static void includeit(optionconfig_t *oc, char *arg, char *cbctx)
  +static lmtp2nntp_option_rc_t includeit(optionconfig_t *oc, char *arg, char *cbctx)
   {
  -    return;
  +    return OPTION_OK;
   }
   
   lmtp2nntp_option_rc_t option_create(lmtp2nntp_option_t **op)
   {
  -    printf("DEBUG: enter option_create(%.8lx)\n", (long)op);
  +    //printf("DEBUG: enter option_create(%.8lx)\n", (long)op);
   
       if (op == NULL)
           return OPTION_ERR_ARG;
  @@ -474,38 +518,38 @@
   
   lmtp2nntp_option_rc_t option_parse(lmtp2nntp_option_t *o, int argc, char **argv)
   {
  -    printf("DEBUG: enter option_parse(%.8lx, %d, %.8lx)\n", (long)o, argc, (long)argv);
  +    //printf("DEBUG: enter option_parse(%.8lx, %d, %.8lx)\n", (long)o, argc, (long)argv);
   
       if (o == NULL)
           return OPTION_ERR_ARG;
   
  -    (void)option_register(o, "childsmax",           'C', OPT_SINGLE, &stdsyntax, "[0-9]{,5}",           "foo", "childsmax" );
  +    (void)option_register(o, "childsmax",           'C', OPT_SINGLE, &stdsyntax, "m/.*/",               "foo", "childsmax" );
       (void)option_register(o, "daemonize",           'D', OPT_FLAG,   NULL,       NULL,                  "foo", NULL );
       (void)option_register(o, "kill",                'K', OPT_FLAG,   NULL,       NULL,                  "foo", NULL );
  -    (void)option_register(o, "pidfile",             'P', OPT_SINGLE, &stdsyntax, ".{,255}",             "foo", "pidfile" );
  +    (void)option_register(o, "pidfile",             'P', OPT_SINGLE, &stdsyntax, "m/.{,255}/",          "foo", "pidfile" );
       (void)option_register(o, "veryverbose",         'V', OPT_FLAG,   NULL,       NULL,                  "foo", NULL );
  -    (void)option_register(o, "acl",                 'a', OPT_MULTI,  &stdsyntax, "[0-9.](/[0-9]2)?",    "foo", "addr[/mask]" );
  -    (void)option_register(o, "bind",                'b', OPT_SINGLE, &stdsyntax, ".*",                  "foo", "addr[:port]|-|path[:perms]" );
  -    (void)option_register(o, "client",              'c', OPT_SINGLE, &stdsyntax, ".*",                  "foo", "addr[:port]" );
  -    (void)option_register(o, "destination",         'd', OPT_MULTI,  &stdsyntax, ".*",                  "foo", "addr[:port]" );
  -    (void)option_register(o, "groupmode",           'g', OPT_SINGLE, &stdsyntax, ".*",                  "foo", "groupmode" );
  -    (void)option_register(o, "headervalue",         'h', OPT_MULTI,  &stdsyntax, ".*",                  "foo", "header: value" );
  -    (void)option_register(o, "include",             'i', OPT_MULTI,  &includeit, ".*",                  "foo", "configfile" );
  -    (void)option_register(o, "size",                's', OPT_SINGLE, &stdsyntax, ".*",                  "foo", "bytes" );
  -    (void)option_register(o, "timeoutlmtpaccept",   NUL, OPT_MULTI,  &stdsyntax, ".*",                  "foo", "sec" );
  -    (void)option_register(o, "timeoutlmtpread",     NUL, OPT_MULTI,  &stdsyntax, ".*",                  "foo", "sec" );
  -    (void)option_register(o, "timeoutlmtpwrite",    NUL, OPT_MULTI,  &stdsyntax, ".*",                  "foo", "sec" );
  -    (void)option_register(o, "timeoutnntpconnect",  NUL, OPT_MULTI,  &stdsyntax, ".*",                  "foo", "sec" );
  -    (void)option_register(o, "timeoutnntpread",     NUL, OPT_MULTI,  &stdsyntax, ".*",                  "foo", "sec" );
  -    (void)option_register(o, "timeoutnntpwrite",    NUL, OPT_MULTI,  &stdsyntax, ".*",                  "foo", "sec" );
  -    (void)option_register(o, "mailfrom",            'm', OPT_SINGLE, &stdsyntax, ".*",                  "foo", "regex" );
  -    (void)option_register(o, "nodename",            'n', OPT_SINGLE, &stdsyntax, ".*",                  "foo", "nodename" );
  -    (void)option_register(o, "operationmode",       'o', OPT_SINGLE, &stdsyntax, ".*",                  "foo", "post|feed" );
  -    (void)option_register(o, "l2spec",              'l', OPT_SINGLE, &stdsyntax, ".*",                  "foo", "spec" );
  -    (void)option_register(o, "uid",                 'u', OPT_SINGLE, &stdsyntax, ".*",                  "foo", "number|name" );
  -    (void)option_register(o, "restrictheader",      'r', OPT_MULTI,  &stdsyntax, ".*",                  "foo", "regex" );
  -    (void)option_register(o, "newsgroup",           NUL, OPT_MULTI,  &stdsyntax, ".*",                  "foo", "newsgroup");
  -
  +    (void)option_register(o, "acl",                 'a', OPT_MULTI,  &stdsyntax, "m/[0-9.](/[0-9]2)?/", "foo", "addr[/mask]" );
  +    (void)option_register(o, "bind",                'b', OPT_SINGLE, &stdsyntax, "m/.*/",               "foo", "addr[:port]|-|path[:perms]" );
  +    (void)option_register(o, "client",              'c', OPT_SINGLE, &stdsyntax, "m/.*/",               "foo", "addr[:port]" );
  +    (void)option_register(o, "destination",         'd', OPT_MULTI,  &stdsyntax, "m/.*/",               "foo", "addr[:port]" );
  +    (void)option_register(o, "groupmode",           'g', OPT_SINGLE, &stdsyntax, "m/.*/",               "foo", "groupmode" );
  +    (void)option_register(o, "headervalue",         'h', OPT_MULTI,  &stdsyntax, "m/.*/",               "foo", "header: value" );
  +    (void)option_register(o, "include",             'i', OPT_MULTI,  &includeit, "m/.*/",               "foo", "configfile" );
  +    (void)option_register(o, "size",                's', OPT_SINGLE, &stdsyntax, "m/[0-9]+/",           "foo", "bytes" );
  +    (void)option_register(o, "timeoutlmtpaccept",   NUL, OPT_MULTI,  &stdsyntax, "m/.*/",               "foo", "sec" );
  +    (void)option_register(o, "timeoutlmtpread",     NUL, OPT_MULTI,  &stdsyntax, "m/.*/",               "foo", "sec" );
  +    (void)option_register(o, "timeoutlmtpwrite",    NUL, OPT_MULTI,  &stdsyntax, "m/.*/",               "foo", "sec" );
  +    (void)option_register(o, "timeoutnntpconnect",  NUL, OPT_MULTI,  &stdsyntax, "m/.*/",               "foo", "sec" );
  +    (void)option_register(o, "timeoutnntpread",     NUL, OPT_MULTI,  &stdsyntax, "m/.*/",               "foo", "sec" );
  +    (void)option_register(o, "timeoutnntpwrite",    NUL, OPT_MULTI,  &stdsyntax, "m/.*/",               "foo", "sec" );
  +    (void)option_register(o, "mailfrom",            'm', OPT_SINGLE, &stdsyntax, "m/.*/",               "foo", "regex" );
  +    (void)option_register(o, "nodename",            'n', OPT_SINGLE, &stdsyntax, "m/.*/",               "foo", "nodename" );
  +    (void)option_register(o, "operationmode",       'o', OPT_SINGLE, &stdsyntax, "m/.*/",               "foo", "post|feed" );
  +    (void)option_register(o, "l2spec",              'l', OPT_SINGLE, &stdsyntax, "m/.*/",               "foo", "spec" );
  +    (void)option_register(o, "uid",                 'u', OPT_SINGLE, &stdsyntax, "m/.*/",               "foo", "number|name" );
  +    (void)option_register(o, "restrictheader",      'r', OPT_MULTI,  &stdsyntax, "m/.*/",               "foo", "regex" );
  +    (void)option_register(o, "newsgroup",           NUL, OPT_MULTI,  &stdsyntax, "m/.*/",               "foo", "newsgroup");
  +    //val_apply(o->vo, "", 9, dumper, "all" );
       
       {
           int i;
  @@ -515,39 +559,55 @@
   
           poptCon = popt_getcontext(NULL, argc, (const char **)argv, o->pt, 0);
           popt_setotheroptionhelp(poptCon, "[OPTIONS]* [newsgroup ...]");
  -        printf("DEBUG: argc=%d\n", argc);
  +        //printf("DEBUG: argc=%d\n", argc);
           if (argc < 2) {
               popt_printusage(poptCon, stderr, 0);
               exit(1);
           }
           while ((i = popt_getnextopt(poptCon)) >= 0) {
               (void)option_find(o, i, &ocp);
  -            if (ocp->type == OPT_FLAG)
  -                ocp->cb(ocp, "ohne", ocp->cbctx);
  -            else
  -                ocp->cb(ocp, cp = popt_getoptarg(poptCon), ocp->cbctx);
  -            printf("DEBUG: popt_getnextopt returned  %d \"%s\", \"%s\"\n", i, o->pt[i].longName, ocp->longname);
  -            printf("DEBUG: popt_getoptarg  returned  \"%s\"\n", cp);
  +            printf("DEBUG: ocp->type=%d\n", ocp->type);
  +            if (ocp->cb != NULL)
  +                ocp->cb(ocp, cp = (ocp->type == OPT_FLAG ? NULL : (char *)popt_getoptarg(poptCon)), ocp->cbctx);
  +            //printf("DEBUG: popt_getnextopt returned  %d \"%s\", \"%s\"\n", i, o->pt[i].longName, ocp->longname);
  +            //printf("DEBUG: popt_getoptarg  returned  \"%s\"\n", cp);
           }
  -        printf("DEBUG: current popt error is \"%s\"(%d)\n", popt_strerror(i), i);
  -        printf("DEBUG: ----\n");
  +        //printf("DEBUG: current popt error is \"%s\"(%d)\n", popt_strerror(i), i);
  +        //printf("DEBUG: ----\n");
           while ((cp = (char *)popt_getarg(poptCon)) != NULL) {
  -            printf("DEBUG: popt_getarg returned \"%s\"\n", cp);
  +            //printf("DEBUG: popt_getarg returned \"%s\"\n", cp);
           }
  -        printf("DEBUG: current popt error is \"%s\"(%d)\n", popt_strerror(i), i);
  +        //printf("DEBUG: current popt error is \"%s\"(%d)\n", popt_strerror(i), i);
           popt_freecontext(poptCon);
       }
  +    val_apply(o->vo, "", 9, dumper, "all" );
       return OPTION_OK;
   }
   
   lmtp2nntp_option_rc_t option_destroy(lmtp2nntp_option_t *o)
   {
  +    optionconfig_t *oc;
  +    int i;
  +
       if (o == NULL)
           return OPTION_ERR_ARG;
   
  +    oc = o->first;
  +    while (oc != NULL) {
  +        if (oc->type == OPT_SINGLE && oc->data.s != NULL)
  +            free(oc->data.s);
  +        if (oc->type == OPT_MULTI  && oc->data.m != NULL) {
  +            for (i = 0; i < oc->ndata; i++)
  +                if (oc->data.m[i] == NULL)
  +                    break;
  +                else
  +                    free(oc->data.m[i]);
  +            free(oc->data.m);
  +        }
  +        oc = oc->next;
  +    }
       if (o->vo != NULL)
           val_destroy(o->vo);
  -
       free(o);
   
       return OPTION_OK;
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.h
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 lmtp2nntp_config.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.h	21 Jan 2002 16:21:16 -0000	1.4
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.h	22 Jan 2002 16:09:47 -0000	1.5
  @@ -69,6 +69,7 @@
   typedef enum {
       OPTION_OK,
       OPTION_ERR_ARG, /* invalid args passed into function */
  +    OPTION_ERR_USE, /* invalid usage, bad data passed into function */
       OPTION_ERR_MEM, /* out of memory */
       OPTION_ERR_VAL  /* libval failed */
   } lmtp2nntp_option_rc_t;
  @@ -79,7 +80,7 @@
       OPT_MULTI
   } optiontype_t;
   
  -typedef void (optionloop_cb_t)(optionconfig_t *oc, char *arg, char *cbctx);
  +typedef lmtp2nntp_option_rc_t (optionloop_cb_t)(optionconfig_t *oc, char *arg, char *cbctx);
   lmtp2nntp_option_rc_t option_create  (lmtp2nntp_option_t **);
   lmtp2nntp_option_rc_t option_register(lmtp2nntp_option_t *, char *, char, optiontype_t, optionloop_cb_t *, char *, char *, char *);
   lmtp2nntp_option_rc_t option_parse   (lmtp2nntp_option_t *, int, char **);
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	17 Jan 2002 17:01:55 -0000	1.6
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	22 Jan 2002 16:09:47 -0000	1.7
  @@ -563,7 +563,9 @@
   {
   lmtp2nntp_option_t *o;
   (void)option_create(&o); /* FIXME */
  -(void)option_parse(o, argc, argv); return 0;
  +(void)option_parse(o, argc, argv);
  +(void)option_destroy(o);
  +return 0;
   }
   
       /*POD B<lmtp2nntp> */

From ossp-cvs-owner@ossp.org  Tue Jan 22 19:01:00 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EBB1A764EB; Tue, 22 Jan 2002 19:00:59 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.pod
Message-Id: <20020122180059.EBB1A764EB@mail.ossp.org>
Date: Tue, 22 Jan 2002 19:00:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   22-Jan-2002 19:00:59
  Branch: HEAD                             Handle: 2002012218005900

  Modified files:
    ossp-pkg/rc             rc.pod

  Log:
    More editing, markup, and reorder.

  Summary:
    Revision    Changes     Path
    1.6         +117 -99    ossp-pkg/rc/rc.pod
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.pod
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 rc.pod
  --- ossp-pkg/rc/rc.pod	21 Jan 2002 18:14:54 -0000	1.5
  +++ ossp-pkg/rc/rc.pod	22 Jan 2002 18:00:59 -0000	1.6
  @@ -1,7 +1,7 @@
   ##
  -##  rc.pod -- OpenPKG Run-Command Facility (Manual Page)
  +##  rc.pod -- OSSP Run Command Facility (Manual Page)
   ##  Copyright (c) 2000-2002 Cable & Wireless Deutschland GmbH
  -##  Copyright (c) 2000-2002 The OpenPKG Project <http://www.openpkg.org/>
  +##  Copyright (c) 2000-2002 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  Permission to use, copy, modify, and distribute this software for
  @@ -23,18 +23,11 @@
   ##  SUCH DAMAGE.
   ##
   
  -# ref: %start; %stop
  -# cfg 
  -#     --glob-rcfile='rc.%s' 
  -#     --regex-section='(?<=^|\n)%%%s\s*\n(.+?)(?=\n%\S+|$)'
  -#     --regex-reference='(?<=^|\n)%%%s\s*(.+?)(?=\n|;)'
  -# def --showdefault, --defsetion=config
  -
   =pod
   
   =head1 NAME
   
  -B<rc> - OpenPKG Run-Command Facility
  +B<rc> - OSSP Run Command Facility
   
   =head1 SYNOPSIS
   
  @@ -57,58 +50,63 @@
   Although only one section is possible for each call to OSSP rc, many
   `commands' can follow the section label. This allows for an abbreviated input
   format when calling the same script section of many commands. An example of
  -this is given in (EXAMPLES.)
  +this is given in `EXAMPLES.'
   
   =head1 OPTIONS
   
  +=over 4
  +
   Inclusive options which may be used with another
   
  --v, --verbose
  +=item B<-c>, B<--config>
  +        locate the configuration file in the following path,
  +        overriding the environment variable $OSSP_RC_ROOT when
  +        locating the configuration file
  +
  +=item B<-v>, B<--verbose>
           verbosely report processing, including all warnings
   
  --s, --silent
  +=item B<-s>, B<--silent>
           hold silence, and output no text messages whatsoever
   
  --d, --debug
  -        don't remove any temporary files, and output debug messages
  +=item B<-d>, B<--debug>
  +        don't remove temporary files, and output debug messages to stderr
   
  --r, --raw
  +=item B<-r>, B<--raw>
           output text using no terminal control sequences
   
   Mutually exclusive options, i.e. only a single one can be given
   
  --h, --help
  +=item B<-h>, B<--help>
           print this help, then exit
   
  --V, --version
  -        print version number, then exit
  -
  --c, --config
  -        locate the configuration file in the following path,
  -        overriding the environment variable $OSSP_RC_ROOT when
  -        locating the configuration file
  +=item B<-V>, B<--version>
  +        print version and copyright, then exit
   
  --p, --print
  +=item B<-p>, B<--print>
           output the text as it would be interpreted
           by the shell, but do not run the commands
   
  --e, --eval
  +=item B<-e>, B<--eval>
           output the text for a command suitable for shell evaluation
   
  --x, --exec
  -        execute in subshell(s), follow with <package> <section>
  +=item B<-x>, B<--exec>
  +        execute in subshell(s), follow with <program> <section>
   
  --q, --query
  +=item B<-q>, B<--query>
           print the value(s) of rc configuration variables
   
  --l, --labels
  +=item B<-l>, B<--labels>
           learn what section labels a run command extends
   
  --i, --info
  +=item B<-i>, B<--info>
           print a comprehensive summary of the rc environment
   
  -All of these options have reasonable default values,
  -which OSSP rc assumes when no option is otherwise given.
  +All of these options have reasonable default values, which OSSP rc assumes
  +when no option is otherwise given. For details of each listed option see
  +`NOTES'.
  +
  +=back 4
   
   =head1 RETURN VALUE
   
  @@ -127,10 +125,26 @@
   
   =head1 EXAMPLES
   
  -/myetc/rc start sshd
  -/etc/rc close docview primary httpd sshd radiusd
  -/sfw/etc/rc restart smtpd lmtp2nntp
  -/cw/etc/rc restart apache
  +Some short one line examples include the following. Note that a run command
  +consists of a single program name and one or more sections. The wildcard `all'
  +can be given in place of a program name to denote all programs with entries in
  +the rc registry F<$OSSP_RC_ROOT/rc.d>.
  +
  +  /usr/local/bin/rc --info
  +  /etc/rc --query lmtp2nntp
  +  /mybin/rc sshd start
  +  /etc/rc lmtp2nntp start
  +  /sfw/etc/rc --config /etc/rc.conf --debug smtpd stop
  +  /sfw/etc/rc --silent ntpd start sync stop start
  +  /usr/local/bin/rc httpd restart
  +
  +To evaluate a run command for all programs with an identical section name, a
  +short expression can be written into a F<.profile> file. When the shell
  +initializes itself, the run commands will execute according to the C<eval>
  +command. This is often seen when importing the environment of packages of an
  +B<OpenPKG> hierarchy.
  +
  + $ eval `@l_prefix@/etc/rc --eval all env`
   
   =head1 ENVIRONMENT
   
  @@ -167,7 +181,14 @@
   
   =head1 NOTES
   
  -=over 4
  +=nada
  +
  +# ref: %start; %stop
  +# cfg 
  +#     --glob-rcfile='rc.%s' 
  +#     --regex-section='(?<=^|\n)%%%s\s*\n(.+?)(?=\n%\S+|$)'
  +#     --regex-reference='(?<=^|\n)%%%s\s*(.+?)(?=\n|;)'
  +# def --showdefault, --defsetion=config
   
   =item B<General>
   
  @@ -233,91 +254,88 @@
   
   !FIXME! Remark, difference between PARAMETER OPTIONS and COMMAND OPTIONS
   
  -=item B<-r>, B<--raw>
  +=nada
   
  -Control whether the output controlled by the options B<--config>,
  -B<--help>, B<--version> and B<--verbose> are raw text or annotated with
  -terminal control sequences for better readability. By default B<rc>
  -automatically determines whether F<stdout> is connected to a terminal or
  -not and uses terminal sequences in the output or respectively raw text
  -output only.
  +=over 4
   
   =item B<-v>, B<--verbose>
  +        verbosely report processing, including all warnings
   
  -Enables verbose messages on F<stdout>.
  -
  -=item B<-D>, B<--debug>
  -
  -Enables debugging messages on F<stderr>.
  -
  -!FIXME! Remark, difference between PARAMETER OPTIONS and COMMAND OPTIONS
  -
  -These options are mutually exclusive, i.e., you can specify only a
  -single one to select the type of operation.
  +=item B<-s>, B<--silent>
  +        hold silence, and output no text messages whatsoever
   
  -=over 4
  +=item B<-d>, B<--debug>
  +        don't remove any temporary files, and output debug messages
   
  -=item B<-x>, B<--exec>
  +As expected, when B<rc> has output it will write ASCII text to F<stdout> for
  +normal output, and F<stderr> for abnormal output (such as warnings and
  +errors.) The options for controlling the output content are B<--config>,
  +B<--help>, B<--version>, B<--verbose>, and B<--silent>.
  +
  +The option B<-r> or B<--raw> turns on raw output mode. In this case, no
  +formatting is done to output text. This mode contrasts formatted output mode,
  +in which the output is annotated with terminal control sequences for better
  +readability. This option has no single default value. If the raw mode option
  +is not specified, B<rc> will determine whether F<stdout> is connected to a
  +terminal. If so, B<rc> will run in formatted output mode. If F<stdout> is not
  +connected to a terminal (such as with most daemons,) B<rc> will run in raw
  +output mode even though it was not specified as an option. 
   
  -This is the default where all run-commands are executed in sub-shells.
  -It expects exactly two non-option command line arguments: a I<package>
  -name and a I<command> name.
  +=item B<-c>, B<--config>
  +        locate the configuration file in the following path,
  +        overriding the environment variable $OSSP_RC_ROOT when
  +        locating the configuration file
   
   =item B<-p>, B<--print>
  -
  -Instead of (by default) executing the run-commands, print them to
  -F<stdout> only.
  +        output the text as it would be interpreted
  +        by the shell, but do not run the commands
   
   =item B<-e>, B<--eval>
   
  -Instead of (by default) executing the run-commands in a sub-shell,
  -return a command suitable for evaluation the run-commands in the
  -current shell. Do not intermix this with option B<--print>, because
  -B<--eval> prepares the run-commands in a temporary file and just
  -outputs the necessary run and cleanup commands on F<stdout>. This is
  -because most Bourne-Shell flavors dislike to C<eval> commands spanning
  -multiple lines. So, B<--print> is for human readability and batch
  -post-processing, while B<--eval> is for batch evaluation through the
  -Bourne-Shell C<eval> command.
  +The run command will not be executed. Rather, B<rc> will print a command
  +suitable for later evaluation in the current shell. Given alone, this option
  +will cause B<rc> to not execute the run command. Used together with B<--exec>,
  +B<rc> will execute the run command and print a similar command for later
  +execution as well. The B<--eval> option cannot be used together with
  +B<--print>, because of conflicting output and the way that B<rc> constructs
  +the evaluation text. Specifically, most Bourne shells and derivatives report
  +errors with commands spanning multiple lines.
  +
  +Consider using the B<--eval> option for batch evaluation with the Bourne shell
  +C<eval> command. Use the B<--print> option for better human readability. See
  +`EXAMPLES' for an example.
   
  -This is usually used from within F<.profile> files to import the shell
  -environment of the packages of an B<OpenPKG> hierarchy:
  -
  - $ eval `@l_prefix@/etc/rc --eval all env`
  -
  -=item B<-q>, B<--query> 
  +=item B<-x>, B<--exec>
   
  -Query the current (still default or overridden) value of one or more
  -run-command configuration variables (see rc-file section C<%config>).
  -It expects exactly one non-option command line argument: a I<format>
  -string. This is an arbitrary text string which can contain one or more
  -B<OSSP var> variable specifications ("C<${>I<name>C<}>" in its simplest
  -form).
  +Exec is the most common option of all, in which B<rc> executes a run command
  +made up of a given program and section. Options controlling the flow of
  +execution include B<--print>, B<--eval>, and B<--exec>. When no option is given,
  +B<rc> will default to B<--exec> and execute the run command directly.
  +
  +=item B<-q>, B<--query>
  +
  +Query the value of one or more configuration variables. These variables are
  +set in the C<%config> section of the F<\<program\>.rc> file corresponding to a
  +program. The B<--query> option may report a different value, however. It is
  +possible for variable declarations in the F<rc.conf> file to override those in
  +the program's own rc file. Used with the B<--query> option, B<rc> will expect
  +exactly one command line argument to follow. This must be a I<format> string
  +containing arbitrary text and optionally one or more B<OSSP var> variable
  +specifications ("C<${>I<name>C<}>" in its simplest form.)
   
  -=item B<-c>, B<--config>
  +=item B<-l>, B<--labels>
  +        learn what section labels a run command extends
   
   =item B<-i>, B<--info>
  +        print a comprehensive summary of the rc environment
   
  -Prints a summary of the whole run-command environment of B<rc>
  -and exits immediately.
  -
  -=item B<-h>, B<--help>
  -
  -Prints the B<rc> usage information and exits immediately.
  -
  -=item B<-V>, B<--version>
  -
  -Prints the B<rc> version and copyright information and exits immediately.
  -
  -=back
  +=back 4
   
   =head1 WARNINGS
   
   =head1 DIAGNOSTICS
   
   =over 4
  -
  -An explanation of all possible exit status values
   
   The exit status is 0 if rc was able to initiate the given section code of the
   given run command(s). If rc encountered an error during its processing, the

From ossp-cvs-owner@ossp.org  Tue Jan 22 21:10:28 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C5490764EB; Tue, 22 Jan 2002 21:10:27 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.pod
Message-Id: <20020122201027.C5490764EB@mail.ossp.org>
Date: Tue, 22 Jan 2002 21:10:27 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   22-Jan-2002 21:10:27
  Branch: HEAD                             Handle: 2002012220102700

  Modified files:
    ossp-pkg/rc             rc.pod

  Log:
    fix POD markup

  Summary:
    Revision    Changes     Path
    1.7         +29 -16     ossp-pkg/rc/rc.pod
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.pod
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 rc.pod
  --- ossp-pkg/rc/rc.pod	22 Jan 2002 18:00:59 -0000	1.6
  +++ ossp-pkg/rc/rc.pod	22 Jan 2002 20:10:27 -0000	1.7
  @@ -59,48 +59,61 @@
   Inclusive options which may be used with another
   
   =item B<-c>, B<--config>
  -        locate the configuration file in the following path,
  -        overriding the environment variable $OSSP_RC_ROOT when
  -        locating the configuration file
  +
  +locate the configuration file in the following path,
  +overriding the environment variable $OSSP_RC_ROOT when
  +locating the configuration file
   
   =item B<-v>, B<--verbose>
  -        verbosely report processing, including all warnings
  +
  +verbosely report processing, including all warnings
   
   =item B<-s>, B<--silent>
  -        hold silence, and output no text messages whatsoever
  +
  +hold silence, and output no text messages whatsoever
   
   =item B<-d>, B<--debug>
  -        don't remove temporary files, and output debug messages to stderr
  +
  +don't remove temporary files, and output debug messages to stderr
   
   =item B<-r>, B<--raw>
  -        output text using no terminal control sequences
  +
  +output text using no terminal control sequences
   
   Mutually exclusive options, i.e. only a single one can be given
   
   =item B<-h>, B<--help>
  -        print this help, then exit
  +
  +print this help, then exit
   
   =item B<-V>, B<--version>
  -        print version and copyright, then exit
  +
  +print version and copyright, then exit
   
   =item B<-p>, B<--print>
  -        output the text as it would be interpreted
  -        by the shell, but do not run the commands
  +
  +output the text as it would be interpreted
  +by the shell, but do not run the commands
   
   =item B<-e>, B<--eval>
  -        output the text for a command suitable for shell evaluation
  +
  +output the text for a command suitable for shell evaluation
   
   =item B<-x>, B<--exec>
  -        execute in subshell(s), follow with <program> <section>
  +
  +execute in subshell(s), follow with <program> <section>
   
   =item B<-q>, B<--query>
  -        print the value(s) of rc configuration variables
  +
  +print the value(s) of rc configuration variables
   
   =item B<-l>, B<--labels>
  -        learn what section labels a run command extends
  +
  +learn what section labels a run command extends
   
   =item B<-i>, B<--info>
  -        print a comprehensive summary of the rc environment
  +
  +print a comprehensive summary of the rc environment
   
   All of these options have reasonable default values, which OSSP rc assumes
   when no option is otherwise given. For details of each listed option see

From ossp-cvs-owner@ossp.org  Tue Jan 22 23:53:48 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0B662764EB; Tue, 22 Jan 2002 23:53:47 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.h
Message-Id: <20020122225347.0B662764EB@mail.ossp.org>
Date: Tue, 22 Jan 2002 23:53:47 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   22-Jan-2002 23:53:47
  Branch: HEAD                             Handle: 2002012222534700

  Modified files:
    ossp-pkg/rc             rc.h

  Log:
    Some possible interface methods, taken from the OpenPKG implementation.

  Summary:
    Revision    Changes     Path
    1.3         +12 -0      ossp-pkg/rc/rc.h
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 rc.h
  --- ossp-pkg/rc/rc.h	8 Jan 2002 15:49:02 -0000	1.2
  +++ ossp-pkg/rc/rc.h	22 Jan 2002 22:53:47 -0000	1.3
  @@ -43,4 +43,16 @@
   #define TRUE (!FALSE)
   #endif
   
  +
  +rc_result_t rc_Err              (void);
  +rc_result_t rc_Warn             (void);
  +rc_result_t rc_PathAppend       (int bExists, char **pszPaths);
  +rc_result_t rc_PathPrepend      (int bExists, char **pszPaths);
  +rc_result_t rc_EnvDel           (char *szVar, char **pszVals);
  +rc_result_t rc_QueryVar         (char *szVar, char **pszVal);
  +rc_result_t rc_ServiceState     (char *szService, char **pszServState);
  +rc_result_t rc_TmpDirGen        (char *szProgram);
  +rc_result_t rc_TmpDirFile       (char *szProgram, char *szFilename, *szVar);
  +rc_result_t rc_TmpDirDel        (char *szProgram);
  +
   #endif /* __OSSPRC_H__ */

From ossp-cvs-owner@ossp.org  Wed Jan 23 14:09:21 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 07FBC764D8; Wed, 23 Jan 2002 14:09:20 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc 00TODO rc.pod
Message-Id: <20020123130920.07FBC764D8@mail.ossp.org>
Date: Wed, 23 Jan 2002 14:09:20 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   23-Jan-2002 14:09:20
  Branch: HEAD                             Handle: 2002012313092000

  Modified files:
    ossp-pkg/rc             00TODO rc.pod

  Log:
    Completed draft.

  Summary:
    Revision    Changes     Path
    1.6         +1  -0      ossp-pkg/rc/00TODO
    1.8         +116 -93    ossp-pkg/rc/rc.pod
  ____________________________________________________________________________

  Index: ossp-pkg/rc/00TODO
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 00TODO
  --- ossp-pkg/rc/00TODO	18 Jan 2002 16:47:17 -0000	1.5
  +++ ossp-pkg/rc/00TODO	23 Jan 2002 13:09:20 -0000	1.6
  @@ -5,6 +5,7 @@
     Enclose rc.c in its own project and write autoconf logic.
   
   Must do
  +  Automake raus.
     Translate rc bourne shell script to ANSI C.
     Finish man page. Start latex or Docbook guide.
     Remove autogen.sh after devtool is finished.
  Index: ossp-pkg/rc/rc.pod
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 rc.pod
  --- ossp-pkg/rc/rc.pod	22 Jan 2002 20:10:27 -0000	1.7
  +++ ossp-pkg/rc/rc.pod	23 Jan 2002 13:09:20 -0000	1.8
  @@ -27,17 +27,27 @@
   
   =head1 NAME
   
  +=over 4
  +
   B<rc> - OSSP Run Command Facility
   
  +=back 4
  +
   =head1 SYNOPSIS
   
  +=over 4
  +
   rc [-h|--help] [-V|--version] [-v|--verbose]
      [-d|--debug] [-p|--print] [-e|--eval]
      [-c|--config] [-q|--query] [-r|--raw]
      <command> <section> [<section> ...]
   
  +=back 4
  +
   =head1 DESCRIPTION
   
  +=over 4
  +
   OSSP rc is a run command processor. It applies the script code associated with
   a given section label to one or more given commands. The command(s) must each
   have entries in the form rc.<command> including script code grouped into
  @@ -52,81 +62,90 @@
   format when calling the same script section of many commands. An example of
   this is given in `EXAMPLES.'
   
  +=back 4
  +
   =head1 OPTIONS
   
   =over 4
   
  +!FIXME! Remark, difference between PARAMETER OPTIONS and COMMAND OPTIONS
  +
   Inclusive options which may be used with another
   
  -=item B<-c>, B<--config>
  +=item B<-c>, B<--config> F<file>
  +specify the location of the configuration file,
  +overriding the environment variable $OSSP_RC_ROOT
  +
  +=item B<-n>, B<--func> F<file>[C<:>F<file>[...]]
  +specify the location of an optional functions file,
  +containing Bourne shell script code
   
  -locate the configuration file in the following path,
  -overriding the environment variable $OSSP_RC_ROOT when
  -locating the configuration file
  +=item B<-f>, B<--file> F<file>
  +use the configuration and section data of a particular file
   
  -=item B<-v>, B<--verbose>
  +=item B<-d>, B<--dirs> I<dir>[C<:>I<dir>[...]
  +override OSSP_RC_ROOT, and use these paths instead
  +
  +=item B<-t>, B<--tmpdir> I<dir>
  +specify the location of the temporary directory
   
  +=item B<-v>, B<--verbose>
   verbosely report processing, including all warnings
   
   =item B<-s>, B<--silent>
  -
   hold silence, and output no text messages whatsoever
   
   =item B<-d>, B<--debug>
  -
   don't remove temporary files, and output debug messages to stderr
   
   =item B<-r>, B<--raw>
  -
   output text using no terminal control sequences
   
   Mutually exclusive options, i.e. only a single one can be given
   
   =item B<-h>, B<--help>
  -
   print this help, then exit
   
   =item B<-V>, B<--version>
  -
   print version and copyright, then exit
   
   =item B<-p>, B<--print>
  -
   output the text as it would be interpreted
   by the shell, but do not run the commands
   
   =item B<-e>, B<--eval>
  -
   output the text for a command suitable for shell evaluation
   
   =item B<-x>, B<--exec>
  -
   execute in subshell(s), follow with <program> <section>
   
   =item B<-q>, B<--query>
  -
   print the value(s) of rc configuration variables
   
   =item B<-l>, B<--labels>
  -
  -learn what section labels a run command extends
  +learn what section labels a run command offers
   
   =item B<-i>, B<--info>
  -
   print a comprehensive summary of the rc environment
   
   All of these options have reasonable default values, which OSSP rc assumes
  -when no option is otherwise given. For details of each listed option see
  +when no option is otherwise given. For details of some listed option see
   `NOTES'.
   
   =back 4
   
   =head1 RETURN VALUE
   
  +=over 4
  +
   Returns zero if successful, or nonzero if otherwise.
   
  +=back 4
  +
   =head1 ERRORS
   
  +=over 4
  +
   -1 Faulty run command hierarchy
    0 Success
    1 First (or only) run command failed
  @@ -136,8 +155,12 @@
   Positive error values are indexed to their respective run commands by command
   line ordering. For more information see `DIAGNOSTICS.'
   
  +=back 4
  +
   =head1 EXAMPLES
   
  +=over 4
  +
   Some short one line examples include the following. Note that a run command
   consists of a single program name and one or more sections. The wildcard `all'
   can be given in place of a program name to denote all programs with entries in
  @@ -159,50 +182,6 @@
   
    $ eval `@l_prefix@/etc/rc --eval all env`
   
  -=head1 ENVIRONMENT
  -
  -OSSP_RC_ROOT                - Where the OSSP rc hierarchy is located
  -OSSP_RC_OPTIONS             - Options, same as the command line ones
  -
  -The environment determines where rc will look before beginning to process run
  -commands. It also influences the behaviour, just as the command line options
  -do. There is no difference between typing an option in the command line, and
  -adding the same option to the OSSP_RC_OPTIONS variable.
  -
  -OSSP_RC_IMPLS               - Other rc implementations
  -
  -The OSSP_RC_IMPLS variable plays a role only when the user has more than one
  -logical set of run command sections. If rc reads anything but EOL in this
  -variable, it will assume that more than one rc implementation exists. The
  -variable should contain a chain of paths where other rc implementations are.
  -This allows the user to build several OSSP rc hierarchies and then switch from
  -each... Blah FIXME I don't know if we should be paying attention to the
  -ENVIRONMENT guys. Maybe this is not a good solution for our dynamic OpenPKG
  -environment problem after all.
  -
  -=head1 FILES
  -
  -/$OSSP_RC_ROOT/rc.conf      - Configuration file
  -
  -=head1 SEE ALSO
  -
  -OSSP rc integrates concepts taken from other run command architectures. For
  -more information, inspect the /etc/rc structures provided by FreeBSD, Solaris,
  -and Red Hat distributions.
  -
  -biff(1), bagg(1), honk(1), gonk(1), and quatch(1).
  -
  -=head1 NOTES
  -
  -=nada
  -
  -# ref: %start; %stop
  -# cfg 
  -#     --glob-rcfile='rc.%s' 
  -#     --regex-section='(?<=^|\n)%%%s\s*\n(.+?)(?=\n%\S+|$)'
  -#     --regex-reference='(?<=^|\n)%%%s\s*(.+?)(?=\n|;)'
  -# def --showdefault, --defsetion=config
  -
   =item B<General>
   
   @l_prefix@/etc/rc
  @@ -247,38 +226,69 @@
   
   @l_prefix@/etc/rc
   [B<-h>|B<--help>]
  -[B<-V>|B<--version>] 
  +[B<-V>|B<--version>]
  +
  +=back 4
  +
  +=head1 ENVIRONMENT
   
   =over 4
   
  -=item B<-f>, B<--rcfile> I<file>
  +OSSP_RC_ROOT                - Where the OSSP rc hierarchy is located
  +OSSP_RC_OPTIONS             - Options, same as the command line ones
   
  -=item B<-d>, B<--rcdir> I<dir>[C<:>I<dir>[...]
  +The environment determines where rc will look before beginning to process run
  +commands. It also influences the behaviour, just as the command line options
  +do. There is no difference between typing an option in the command line, and
  +adding the same option to the OSSP_RC_OPTIONS variable.
   
  -=item B<-C>, B<--rcconf> I<file>[C<:>I<file>[...]] 
  +OSSP_RC_IMPLS               - Other rc implementations
   
  -=item B<-F>, B<--rcfunc> I<file>[C<:>I<file>[...]]
  +The OSSP_RC_IMPLS variable plays a role only when the user has more than one
  +logical set of run command sections. If rc reads anything but EOL in this
  +variable, it will assume that more than one rc implementation exists. The
  +variable should contain a chain of paths where other rc implementations are.
  +This allows the user to build several OSSP rc hierarchies and then switch from
  +each... Blah FIXME I don't know if we should be paying attention to the
  +ENVIRONMENT guys. Maybe this is not a good solution for our dynamic OpenPKG
  +environment problem after all.
   
  -=item B<-t>, B<--tmpdir> I<dir>
  +=back 4
   
  -Force the use of a particular temporary directory. By default B<rc>
  -tries to use (in this order) C<$TMPDIR>, C<$TEMPDIR>, C<~/tmp> and
  -C</tmp>.
  +=head1 FILES
   
  -!FIXME! Remark, difference between PARAMETER OPTIONS and COMMAND OPTIONS
  +=over 4
  +
  +/$OSSP_RC_ROOT/rc.conf      - Configuration file
   
  -=nada
  +=back 4
  +
  +=head1 SEE ALSO
   
   =over 4
   
  -=item B<-v>, B<--verbose>
  -        verbosely report processing, including all warnings
  +OSSP rc integrates concepts taken from other run command architectures. For
  +more information, inspect the /etc/rc structures provided by FreeBSD, Solaris,
  +and Red Hat distributions.
   
  -=item B<-s>, B<--silent>
  -        hold silence, and output no text messages whatsoever
  +biff(1), bagg(1), honk(1), gonk(1), and quatch(1).
   
  -=item B<-d>, B<--debug>
  -        don't remove any temporary files, and output debug messages
  +=back 4
  +
  +=head1 NOTES
  +
  +=over 4
  +
  +# ref: %start; %stop
  +# cfg 
  +#     --glob-rcfile='rc.%s' 
  +#     --regex-section='(?<=^|\n)%%%s\s*\n(.+?)(?=\n%\S+|$)'
  +#     --regex-reference='(?<=^|\n)%%%s\s*(.+?)(?=\n|;)'
  +# def --showdefault, --defsetion=config
  +
  +!FIXME! Remark, difference between PARAMETER OPTIONS and COMMAND OPTIONS
  +
  +=over 4
   
   As expected, when B<rc> has output it will write ASCII text to F<stdout> for
   normal output, and F<stderr> for abnormal output (such as warnings and
  @@ -294,16 +304,13 @@
   connected to a terminal (such as with most daemons,) B<rc> will run in raw
   output mode even though it was not specified as an option. 
   
  -=item B<-c>, B<--config>
  -        locate the configuration file in the following path,
  -        overriding the environment variable $OSSP_RC_ROOT when
  -        locating the configuration file
  +=item B<-t>, B<--tmpdir> I<dir>
   
  -=item B<-p>, B<--print>
  -        output the text as it would be interpreted
  -        by the shell, but do not run the commands
  +Specifying this option will force B<rc> to use the given temporary directory
  +I<dir> for all its temporary output. If this option is not given, B<rc> will
  +try to use C<$TMPDIR>, C<$TEMPDIR>, C<~/tmp> and C</tmp> (in that order.)
   
  -=item B<-e>, B<--eval>
  +=item B<-e>, B<--eval> and B<-p>, B<--print>
   
   The run command will not be executed. Rather, B<rc> will print a command
   suitable for later evaluation in the current shell. Given alone, this option
  @@ -336,16 +343,16 @@
   containing arbitrary text and optionally one or more B<OSSP var> variable
   specifications ("C<${>I<name>C<}>" in its simplest form.)
   
  -=item B<-l>, B<--labels>
  -        learn what section labels a run command extends
  -
  -=item B<-i>, B<--info>
  -        print a comprehensive summary of the rc environment
  -
   =back 4
   
   =head1 WARNINGS
   
  +=over 4
  +
  +There are no warnings. OSSP rc is perfect ;-)
  +
  +=back 4
  +
   =head1 DIAGNOSTICS
   
   =over 4
  @@ -377,23 +384,37 @@
   
   =head1 BUGS
   
  +=over 4
  +
   !FIXME!
   To report a bug, please visit the web page http://www.ossp.org/bugdb.html. Be
   sure to include the word "rc" in the subject field of your bug report.
   
   OSSP rc contains no known bugs to date.
   
  +=back 4
  +
   =head1 RESTRICTIONS
   
  +=over 4
  +
   Bugs we don't plan to fix include washing out the bathtub. !FIXME!
   
  +=back 4
  +
   =head1 AUTHORS
   
  +=over 4
  +
   Ralf S. Engelschall
   Michael Schloh von Bennewitz
   
  +=back 4
  +
   =head1 HISTORY
   
  +=over 4
  +
   OSSP rc was born to replace the run command logic used in the OpenPKG project.
   In the first version of OpenPKG (http://www.openpkg.org), a run command script
   called `rc' could issue run commands to programs installed under the OpenPKG
  @@ -403,5 +424,7 @@
   This is OSSP rc. By the way, an unplanned advantage of this redevelopment is
   that OSSP rc can be used for any project needing generic run command logic as
   well as the OpenPKG project as first planned.
  +
  +=back 4
   
   =cut

From ossp-cvs-owner@ossp.org  Wed Jan 23 14:10:39 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A348B764D8; Wed, 23 Jan 2002 14:10:39 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.pod
Message-Id: <20020123131039.A348B764D8@mail.ossp.org>
Date: Wed, 23 Jan 2002 14:10:39 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   23-Jan-2002 14:10:39
  Branch: HEAD                             Handle: 2002012313103900

  Modified files:
    ossp-pkg/rc             rc.pod

  Log:
    Removed stray text. Please review this deletion.

  Summary:
    Revision    Changes     Path
    1.9         +0  -7      ossp-pkg/rc/rc.pod
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.pod
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 rc.pod
  --- ossp-pkg/rc/rc.pod	23 Jan 2002 13:09:20 -0000	1.8
  +++ ossp-pkg/rc/rc.pod	23 Jan 2002 13:10:39 -0000	1.9
  @@ -279,13 +279,6 @@
   
   =over 4
   
  -# ref: %start; %stop
  -# cfg 
  -#     --glob-rcfile='rc.%s' 
  -#     --regex-section='(?<=^|\n)%%%s\s*\n(.+?)(?=\n%\S+|$)'
  -#     --regex-reference='(?<=^|\n)%%%s\s*(.+?)(?=\n|;)'
  -# def --showdefault, --defsetion=config
  -
   !FIXME! Remark, difference between PARAMETER OPTIONS and COMMAND OPTIONS
   
   =over 4

From ossp-cvs-owner@ossp.org  Wed Jan 23 14:29:21 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C5EE0764D8; Wed, 23 Jan 2002 14:29:21 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.pod
Message-Id: <20020123132921.C5EE0764D8@mail.ossp.org>
Date: Wed, 23 Jan 2002 14:29:21 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   23-Jan-2002 14:29:21
  Branch: HEAD                             Handle: 2002012313292100

  Modified files:
    ossp-pkg/rc             rc.pod

  Log:
    Grrr... as I already did last time: fix POD style. all POD =xxx commands
    are intended to be surrounded by blank lines for correct parsing and
    results. You can trust me: I usually know what I'm doing ;)

  Summary:
    Revision    Changes     Path
    1.10        +19 -1      ossp-pkg/rc/rc.pod
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.pod
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 rc.pod
  --- ossp-pkg/rc/rc.pod	23 Jan 2002 13:10:39 -0000	1.9
  +++ ossp-pkg/rc/rc.pod	23 Jan 2002 13:29:21 -0000	1.10
  @@ -73,59 +73,77 @@
   Inclusive options which may be used with another
   
   =item B<-c>, B<--config> F<file>
  +
   specify the location of the configuration file,
  -overriding the environment variable $OSSP_RC_ROOT
  +overriding the environment variable C<$OSSP_RC_CONFIG>
  +and the built-in hard-coded value.
   
   =item B<-n>, B<--func> F<file>[C<:>F<file>[...]]
  +
   specify the location of an optional functions file,
   containing Bourne shell script code
   
   =item B<-f>, B<--file> F<file>
  +
   use the configuration and section data of a particular file
   
   =item B<-d>, B<--dirs> I<dir>[C<:>I<dir>[...]
  +
   override OSSP_RC_ROOT, and use these paths instead
   
   =item B<-t>, B<--tmpdir> I<dir>
  +
   specify the location of the temporary directory
   
   =item B<-v>, B<--verbose>
  +
   verbosely report processing, including all warnings
   
   =item B<-s>, B<--silent>
  +
   hold silence, and output no text messages whatsoever
   
   =item B<-d>, B<--debug>
  +
   don't remove temporary files, and output debug messages to stderr
   
   =item B<-r>, B<--raw>
  +
   output text using no terminal control sequences
   
   Mutually exclusive options, i.e. only a single one can be given
   
   =item B<-h>, B<--help>
  +
   print this help, then exit
   
   =item B<-V>, B<--version>
  +
   print version and copyright, then exit
   
   =item B<-p>, B<--print>
  +
   output the text as it would be interpreted
   by the shell, but do not run the commands
   
   =item B<-e>, B<--eval>
  +
   output the text for a command suitable for shell evaluation
   
   =item B<-x>, B<--exec>
  +
   execute in subshell(s), follow with <program> <section>
   
   =item B<-q>, B<--query>
  +
   print the value(s) of rc configuration variables
   
   =item B<-l>, B<--labels>
  +
   learn what section labels a run command offers
   
   =item B<-i>, B<--info>
  +
   print a comprehensive summary of the rc environment
   
   All of these options have reasonable default values, which OSSP rc assumes

From ossp-cvs-owner@ossp.org  Wed Jan 23 14:31:21 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2BF33764D8; Wed, 23 Jan 2002 14:31:21 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.pod
Message-Id: <20020123133121.2BF33764D8@mail.ossp.org>
Date: Wed, 23 Jan 2002 14:31:21 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   23-Jan-2002 14:31:21
  Branch: HEAD                             Handle: 2002012313312000

  Modified files:
    ossp-pkg/rc             rc.pod

  Log:
    move the synopsis back to where it belongs: SYNOPSIS section

  Summary:
    Revision    Changes     Path
    1.11        +46 -54     ossp-pkg/rc/rc.pod
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.pod
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 rc.pod
  --- ossp-pkg/rc/rc.pod	23 Jan 2002 13:29:21 -0000	1.10
  +++ ossp-pkg/rc/rc.pod	23 Jan 2002 13:31:20 -0000	1.11
  @@ -37,10 +37,52 @@
   
   =over 4
   
  -rc [-h|--help] [-V|--version] [-v|--verbose]
  -   [-d|--debug] [-p|--print] [-e|--eval]
  -   [-c|--config] [-q|--query] [-r|--raw]
  -   <command> <section> [<section> ...]
  +=item B<General>
  +
  +@l_prefix@/etc/rc
  +[B<-f>|B<--rcfile> I<file>] 
  +[B<-d>|B<--rcdir> I<dir>[C<:>I<dir>[...]] 
  +[B<-C>|B<--rcconf> I<file>[C<:>I<file>[...]]] 
  +[B<-F>|B<--rcfunc> I<file>[C<:>I<file>[...]]] 
  +[B<-t>|B<--tmpdir> I<dir>]
  +[B<-r>|B<--raw>]
  +[B<-v>|B<--verbose>] 
  +[B<-D>|B<--debug>] 
  +[I<command-options>]
  +[I<command-arguments>]
  +
  +=item B<Run-Command Execution>
  +
  +@l_prefix@/etc/rc
  +[I<parameter-options>]
  +[B<-x>|B<--exec>] 
  +[B<-p>|B<--print>] 
  +[B<-e>|B<--eval>] 
  +I<package> 
  +I<command>
  +[I<command> ...]
  +
  +=item B<Configuration Query>
  +
  +@l_prefix@/etc/rc
  +[I<parameter-options>]
  +[B<-q>|B<--query>] 
  +I<format>
  +
  +@l_prefix@/etc/rc
  +[I<parameter-options>]
  +[B<-c>|B<--config>] 
  +[I<package>]
  +
  +=item B<Facility Query>
  +
  +@l_prefix@/etc/rc
  +[I<parameter-options>]
  +[B<-i>|B<--info>] 
  +
  +@l_prefix@/etc/rc
  +[B<-h>|B<--help>]
  +[B<-V>|B<--version>]
   
   =back 4
   
  @@ -177,8 +219,6 @@
   
   =head1 EXAMPLES
   
  -=over 4
  -
   Some short one line examples include the following. Note that a run command
   consists of a single program name and one or more sections. The wildcard `all'
   can be given in place of a program name to denote all programs with entries in
  @@ -199,54 +239,6 @@
   B<OpenPKG> hierarchy.
   
    $ eval `@l_prefix@/etc/rc --eval all env`
  -
  -=item B<General>
  -
  -@l_prefix@/etc/rc
  -[B<-f>|B<--rcfile> I<file>] 
  -[B<-d>|B<--rcdir> I<dir>[C<:>I<dir>[...]] 
  -[B<-C>|B<--rcconf> I<file>[C<:>I<file>[...]]] 
  -[B<-F>|B<--rcfunc> I<file>[C<:>I<file>[...]]] 
  -[B<-t>|B<--tmpdir> I<dir>]
  -[B<-r>|B<--raw>]
  -[B<-v>|B<--verbose>] 
  -[B<-D>|B<--debug>] 
  -[I<command-options>]
  -[I<command-arguments>]
  -
  -=item B<Run-Command Execution>
  -
  -@l_prefix@/etc/rc
  -[I<parameter-options>]
  -[B<-x>|B<--exec>] 
  -[B<-p>|B<--print>] 
  -[B<-e>|B<--eval>] 
  -I<package> 
  -I<command>
  -
  -=item B<Configuration Query>
  -
  -@l_prefix@/etc/rc
  -[I<parameter-options>]
  -[B<-q>|B<--query>] 
  -I<format>
  -
  -@l_prefix@/etc/rc
  -[I<parameter-options>]
  -[B<-c>|B<--config>] 
  -[I<package>]
  -
  -=item B<Facility Query>
  -
  -@l_prefix@/etc/rc
  -[I<parameter-options>]
  -[B<-i>|B<--info>] 
  -
  -@l_prefix@/etc/rc
  -[B<-h>|B<--help>]
  -[B<-V>|B<--version>]
  -
  -=back 4
   
   =head1 ENVIRONMENT
   

From ossp-cvs-owner@ossp.org  Wed Jan 23 14:40:54 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8D259764D8; Wed, 23 Jan 2002 14:40:54 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.pod
Message-Id: <20020123134054.8D259764D8@mail.ossp.org>
Date: Wed, 23 Jan 2002 14:40:54 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   23-Jan-2002 14:40:54
  Branch: HEAD                             Handle: 2002012313405400

  Modified files:
    ossp-pkg/rc             rc.pod

  Log:
    remove too much Bla-Blah...

  Summary:
    Revision    Changes     Path
    1.12        +7  -39     ossp-pkg/rc/rc.pod
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.pod
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 rc.pod
  --- ossp-pkg/rc/rc.pod	23 Jan 2002 13:31:20 -0000	1.11
  +++ ossp-pkg/rc/rc.pod	23 Jan 2002 13:40:54 -0000	1.12
  @@ -385,49 +385,17 @@
   
   =back 4
   
  -=head1 BUGS
  -
  -=over 4
  -
  -!FIXME!
  -To report a bug, please visit the web page http://www.ossp.org/bugdb.html. Be
  -sure to include the word "rc" in the subject field of your bug report.
  -
  -OSSP rc contains no known bugs to date.
  -
  -=back 4
  -
  -=head1 RESTRICTIONS
  -
  -=over 4
  -
  -Bugs we don't plan to fix include washing out the bathtub. !FIXME!
  -
  -=back 4
  -
   =head1 AUTHORS
   
  -=over 4
  -
  -Ralf S. Engelschall
  -Michael Schloh von Bennewitz
  -
  -=back 4
  + Ralf S. Engelschall <rse@engelschall.com>
  + Michael Schloh von Bennewitz <michael.schloh@cw.com>
   
   =head1 HISTORY
   
  -=over 4
  -
  -OSSP rc was born to replace the run command logic used in the OpenPKG project.
  -In the first version of OpenPKG (http://www.openpkg.org), a run command script
  -called `rc' could issue run commands to programs installed under the OpenPKG
  -software hierarchy. This solution had a number of inconveniences, however. As
  -time wore on, developers at Cable & Wireless Deutschland GmbH decided to
  -replace the bourne shell script with a faster, more robust implementation.
  -This is OSSP rc. By the way, an unplanned advantage of this redevelopment is
  -that OSSP rc can be used for any project needing generic run command logic as
  -well as the OpenPKG project as first planned.
  -
  -=back 4
  +B<OSSP rc> was born to replace the prototype run-command facility used
  +in the OpenPKG project (http://www.openpkg.org/). The prototype was a
  +slow and less robust Bourne-Shell script. B<OSSP rc> is intended to
  +replace it with a faster, more robust and flexible facility.
   
   =cut
  +

From ossp-cvs-owner@ossp.org  Wed Jan 23 14:44:51 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 310E4764D8; Wed, 23 Jan 2002 14:44:51 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.pod
Message-Id: <20020123134451.310E4764D8@mail.ossp.org>
Date: Wed, 23 Jan 2002 14:44:51 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   23-Jan-2002 14:44:51
  Branch: HEAD                             Handle: 2002012313445000

  Modified files:
    ossp-pkg/rc             rc.pod

  Log:
    more axing... hell\!

  Summary:
    Revision    Changes     Path
    1.13        +55 -96     ossp-pkg/rc/rc.pod
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.pod
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 rc.pod
  --- ossp-pkg/rc/rc.pod	23 Jan 2002 13:40:54 -0000	1.12
  +++ ossp-pkg/rc/rc.pod	23 Jan 2002 13:44:50 -0000	1.13
  @@ -90,7 +90,7 @@
   
   =over 4
   
  -OSSP rc is a run command processor. It applies the script code associated with
  +B<OSSP rc> is a generic run-command processor. It applies the script code associated with
   a given section label to one or more given commands. The command(s) must each
   have entries in the form rc.<command> including script code grouped into
   sections. OSSP rc references these command entries by reading the
  @@ -194,97 +194,6 @@
   
   =back 4
   
  -=head1 RETURN VALUE
  -
  -=over 4
  -
  -Returns zero if successful, or nonzero if otherwise.
  -
  -=back 4
  -
  -=head1 ERRORS
  -
  -=over 4
  -
  --1 Faulty run command hierarchy
  - 0 Success
  - 1 First (or only) run command failed
  - 2 Second run command failed
  - N Nth run command failed
  -
  -Positive error values are indexed to their respective run commands by command
  -line ordering. For more information see `DIAGNOSTICS.'
  -
  -=back 4
  -
  -=head1 EXAMPLES
  -
  -Some short one line examples include the following. Note that a run command
  -consists of a single program name and one or more sections. The wildcard `all'
  -can be given in place of a program name to denote all programs with entries in
  -the rc registry F<$OSSP_RC_ROOT/rc.d>.
  -
  -  /usr/local/bin/rc --info
  -  /etc/rc --query lmtp2nntp
  -  /mybin/rc sshd start
  -  /etc/rc lmtp2nntp start
  -  /sfw/etc/rc --config /etc/rc.conf --debug smtpd stop
  -  /sfw/etc/rc --silent ntpd start sync stop start
  -  /usr/local/bin/rc httpd restart
  -
  -To evaluate a run command for all programs with an identical section name, a
  -short expression can be written into a F<.profile> file. When the shell
  -initializes itself, the run commands will execute according to the C<eval>
  -command. This is often seen when importing the environment of packages of an
  -B<OpenPKG> hierarchy.
  -
  - $ eval `@l_prefix@/etc/rc --eval all env`
  -
  -=head1 ENVIRONMENT
  -
  -=over 4
  -
  -OSSP_RC_ROOT                - Where the OSSP rc hierarchy is located
  -OSSP_RC_OPTIONS             - Options, same as the command line ones
  -
  -The environment determines where rc will look before beginning to process run
  -commands. It also influences the behaviour, just as the command line options
  -do. There is no difference between typing an option in the command line, and
  -adding the same option to the OSSP_RC_OPTIONS variable.
  -
  -OSSP_RC_IMPLS               - Other rc implementations
  -
  -The OSSP_RC_IMPLS variable plays a role only when the user has more than one
  -logical set of run command sections. If rc reads anything but EOL in this
  -variable, it will assume that more than one rc implementation exists. The
  -variable should contain a chain of paths where other rc implementations are.
  -This allows the user to build several OSSP rc hierarchies and then switch from
  -each... Blah FIXME I don't know if we should be paying attention to the
  -ENVIRONMENT guys. Maybe this is not a good solution for our dynamic OpenPKG
  -environment problem after all.
  -
  -=back 4
  -
  -=head1 FILES
  -
  -=over 4
  -
  -/$OSSP_RC_ROOT/rc.conf      - Configuration file
  -
  -=back 4
  -
  -=head1 SEE ALSO
  -
  -=over 4
  -
  -OSSP rc integrates concepts taken from other run command architectures. For
  -more information, inspect the /etc/rc structures provided by FreeBSD, Solaris,
  -and Red Hat distributions.
  -
  -biff(1), bagg(1), honk(1), gonk(1), and quatch(1).
  -
  -=back 4
  -
   =head1 NOTES
   
   =over 4
  @@ -348,18 +257,64 @@
   
   =back 4
   
  -=head1 WARNINGS
  +=head1 ENVIRONMENT
   
   =over 4
   
  -There are no warnings. OSSP rc is perfect ;-)
  +OSSP_RC_ROOT                - Where the OSSP rc hierarchy is located
  +OSSP_RC_OPTIONS             - Options, same as the command line ones
  +
  +The environment determines where rc will look before beginning to process run
  +commands. It also influences the behaviour, just as the command line options
  +do. There is no difference between typing an option in the command line, and
  +adding the same option to the OSSP_RC_OPTIONS variable.
  +
  +OSSP_RC_IMPLS               - Other rc implementations
  +
  +The OSSP_RC_IMPLS variable plays a role only when the user has more than one
  +logical set of run command sections. If rc reads anything but EOL in this
  +variable, it will assume that more than one rc implementation exists. The
  +variable should contain a chain of paths where other rc implementations are.
  +This allows the user to build several OSSP rc hierarchies and then switch from
  +each... Blah FIXME I don't know if we should be paying attention to the
  +ENVIRONMENT guys. Maybe this is not a good solution for our dynamic OpenPKG
  +environment problem after all.
   
   =back 4
   
  -=head1 DIAGNOSTICS
  +=head1 FILES
   
   =over 4
   
  +/$OSSP_RC_ROOT/rc.conf      - Configuration file
  +
  +=back 4
  +
  +=head1 EXAMPLES
  +
  +Some short one line examples include the following. Note that a run command
  +consists of a single program name and one or more sections. The wildcard `all'
  +can be given in place of a program name to denote all programs with entries in
  +the rc registry F<$OSSP_RC_ROOT/rc.d>.
  +
  +  /usr/local/bin/rc --info
  +  /etc/rc --query lmtp2nntp
  +  /mybin/rc sshd start
  +  /etc/rc lmtp2nntp start
  +  /sfw/etc/rc --config /etc/rc.conf --debug smtpd stop
  +  /sfw/etc/rc --silent ntpd start sync stop start
  +  /usr/local/bin/rc httpd restart
  +
  +To evaluate a run command for all programs with an identical section name, a
  +short expression can be written into a F<.profile> file. When the shell
  +initializes itself, the run commands will execute according to the C<eval>
  +command. This is often seen when importing the environment of packages of an
  +B<OpenPKG> hierarchy.
  +
  + $ eval `@l_prefix@/etc/rc --eval all env`
  +
  +=head1 DIAGNOSTICS
  +
   The exit status is 0 if rc was able to initiate the given section code of the
   given run command(s). If rc encountered an error during its processing, the
   exit status is indexed to the first command parameter which failed as ordered
  @@ -383,7 +338,11 @@
   example. If the run command hierarchy is broken, no further action is taken
   and no run commands are processed.
   
  -=back 4
  +=head1 SEE ALSO
  +
  +B<OSSP rc> integrates concepts taken from other run-command
  +architectures. For more information, inspect the /etc/rc facilities
  +provided by FreeBSD, NetBSD and Solaris.
   
   =head1 AUTHORS
   

From ossp-cvs-owner@ossp.org  Wed Jan 23 15:12:53 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D7087764D8; Wed, 23 Jan 2002 15:12:52 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp example.conf lmtp2nntp_config.c
Message-Id: <20020123141252.D7087764D8@mail.ossp.org>
Date: Wed, 23 Jan 2002 15:12:52 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   23-Jan-2002 15:12:52
  Branch: HEAD                             Handle: 2002012314125200

  Modified files:
    ossp-pkg/lmtp2nntp      example.conf lmtp2nntp_config.c

  Log:
    can now read flat example.conf through include option

  Summary:
    Revision    Changes     Path
    1.5         +44 -57     ossp-pkg/lmtp2nntp/example.conf
    1.12        +286 -268   ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/example.conf
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 example.conf
  --- ossp-pkg/lmtp2nntp/example.conf	14 Jan 2002 12:23:21 -0000	1.4
  +++ ossp-pkg/lmtp2nntp/example.conf	23 Jan 2002 14:12:52 -0000	1.5
  @@ -3,61 +3,48 @@
   # LMTP2NNTP example.conf
   # 
   
  -#   include         "sampleconfig.two"              #    -i aka --include
  -
  -<daemon>
  -    childsmax       10                              #see -C aka --childsmax
  -    daemonize       yes                             #see -D aka --daemonize
  -                                                    #    -K aka --kill is not available in the configfile
  -    pidfile         /tmp/pid                        #see -P aka --pidfile
  -    acl             10/8                            #see -a aka --acl
  -    acl             172.16/12
  -    acl             192.168/16
  -    acl             127.0.0.1/32     
  -    bind            127.0.0.1:12345                 #see -b aka --bind, use IPv4:port
  -    #bind           /tmp/uds:600                    #    UNIX domain socket path:permissions 
  -</daemon>
  -
  -<server> #LMTP
  -    timeoutaccept   0                               #see -t aka --timeout
  -    timeoutread     10 
  -    timeoutwrite    10 
  -    size            555000                          #see -s aka --size
  -    mailfrom        any.*@example\.org              #see -m aka --mailfrom
  -    nodename        gateway.example.com             #see -n aka --nodename
  -</server>
  -
  -<client> #NNTP, multiple sections allowed
  -    client          127.0.0.2                       #see -c aka --client
  -    destination     news.example.com                #see -d aka --destination
  -    operationmode   post                            #see -o aka --operationmode
  -    timeoutconnect  360 
  -    timeoutread     60 
  -    timeoutwrite    60 
  -</client>
  -
  -<gateway> #main and globals
  -    groupmode       envelope                        #see -g aka --groupmode
  -
  -                                                    #    -l is obsolete since v1.2, see l2spec
  -                                                    #    -V is obsolete since v1.2; remove the "buffer" channel from l2spec
  -    l2spec          'prefix(prefix="%%b %%d %%H:%%M:%%S <%%L> lmtp2nntp[%%P]: ",timezone=local) \
  -                       -> buffer(size=65536) \
  -                       -> file(path=%s,append=1,perm=%d)' \
  -                                                    #    -l aka --l2spec
  -
  -    uid             gate                            #see -u aka --uid
  -                                                    #    -v aka --version is not available in the configfile
  -    newsgroup       test
  -    newsgroup       alt.test                        #see man page for information about newsgroup
  -</gateway>
  -
  -<message>
  -    headervalue     X-gateway "lmtp2nntp gateway"   #see -h aka --headervalue
  -    restrictheader  "Cc: j\.doe@example\.org"       #see -r aka --restrictheader
  -</message>
  -
  -<server>
  -    client          1.2.3.4 #must produce an error
  -</server>
  +        ### DAEMON ###
   
  +childsmax       10                              #see -C aka --childsmax
  +daemonize       yes                             #see -D aka --daemonize
  +kill            4711                            #see -K aka --kill
  +pidfile         "/tmp/pid"                      #see -P aka --pidfile
  +veryverbose                                     #see -V aka --veryverbose
  +                                                #           obsolete since v1.2
  +                                                #           remove the "buffer" channel from l2spec
  +acl             10/8                            #see -a aka --acl
  +acl             172.16/12
  +acl             192.168/16
  +acl             127.0.0.1/32     
  +bind            127.0.0.1:12345                 #see -b aka --bind, use IPv4:port
  +#bind           "/tmp/uds:600"                  #    UNIX domain socket path:permissions 
  +
  +        ### GATEWAY ###
  +
  +client          127.0.0.2                       #see -c aka --client
  +destination     news.example.com                #see -d aka --destination
  +groupmode       envelope                        #see -g aka --groupmode
  +headervalue     X-gateway "lmtp2nntp gateway"   #see -h aka --headervalue
  +include         "sampleconfig.two"              #    -i aka --include
  +                                                #    -l is obsolete since v1.2, see l2spec
  +
  +l2spec          prefix(prefix="%%b %%d %%H:%%M:%%S <%%L> lmtp2nntp[%%P]: ",timezone=local) \
  +                   -> buffer(size=65536) \
  +                   -> file(path=%s,append=1,perm=%d) \
  +                                                #    -l aka --l2spec
  +
  +mailfrom        "any.*@example\.org"            #see -m aka --mailfrom
  +nodename        "gateway.example.com"           #see -n aka --nodename
  +operationmode   post                            #see -o aka --operationmode
  +restrictheader  "Cc: j\.doe@example\.org"       #see -r aka --restrictheader
  +size            555000                          #see -s aka --size
  +timeoutlmtpaccept  0                            #see        --timeoutlmtpaccept
  +timeoutlmtpread    10                           #see        --timeoutlmtpread
  +timeoutlmtpwrite   10                           #see        --timeoutlmtpwrite
  +timeoutnntpconnect 360                          #see        --timeoutnntpconnect
  +timeoutnntpread    60                           #see        --timeoutnntpread
  +timeoutnntpwrite   60                           #see        --timeoutnntpwrite
  +uid             gate                            #see -u aka --uid
  +                                                #    -v aka --version is not available in the configfile
  +newsgroup       "test"
  +newsgroup       "alt.test"                      #see man page for information about newsgroup
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	22 Jan 2002 16:09:47 -0000	1.11
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	23 Jan 2002 14:12:52 -0000	1.12
  @@ -27,46 +27,18 @@
   #include <stdlib.h>
   #include <stdio.h>
   #include <sys/stat.h>
  -#if 0
  -#include <unistd.h>
  -#include <errno.h>
  -#include <string.h>
  -#include <fcntl.h>
  -#include <sys/utsname.h>
  -#include <sys/time.h>
  -#include <sys/types.h>
  -#include <sys/wait.h>
  -#include <sys/stat.h>
  -#include <signal.h>
  -#include <pwd.h>
  -#endif
   
   /* third party (included) */
  -#if 0
   #include "lmtp2nntp_argz.h"
  -#include "lmtp2nntp_shpat.h"
  -#include "lmtp2nntp_daemon.h"
  -#endif
   #include "lmtp2nntp_popt.h"
  -#include "val.h"
   
   /* third party (linked in) */
  -#include "str.h"
  -#if 0
  -#include "l2.h"
  -#include "var.h"
  -#endif
  +#include <str.h>
  +#include <val.h>
   
   /* library version check (compile-time) */
  -#define  L2_VERSION_HEX_REQ 0x001200
  -#define  L2_VERSION_STR_REQ "0.1.0"
   #define STR_VERSION_HEX_REQ 0x009206
   #define STR_VERSION_STR_REQ "0.9.6"
  -#ifdef L2_VERSION_HEX
  -#if L2_VERSION_HEX < L2_VERSION_HEX_REQ
  -#error "require a newer version of OSSP L2"
  -#endif
  -#endif
   #ifdef STR_VERSION_HEX
   #if STR_VERSION_HEX < STR_VERSION_HEX_REQ
   #error "require a newer version of OSSP Str"
  @@ -85,7 +57,6 @@
   #include "lmtp2nntp_lmtp.h"
   #include "lmtp2nntp_nntp.h"
   #include "lmtp2nntp_msg.h"
  -#include "sa.h"
   #define _LMTP2NNTP_VERSION_C_AS_HEADER_
   #include "lmtp2nntp_version.c"
   #undef  _LMTP2NNTP_VERSION_C_AS_HEADER_
  @@ -101,129 +72,15 @@
   #define NUL '\0'
   #endif
   
  -void die(char *); /* FIXME */
  -void die(char *msg)
  +static void die(char *msg)
   {
  -        //printf("ERROR: %s\n", msg);
  -            exit(-1);
  +    printf("ERROR: %s\n", msg);
  +    exit(-1);
   }
   
  -#if 0
  -
  -
  -
  -
  -    FIXME pass(optionconfig_t *o, int pass);
  -    /* pass=0 for preinitialization !? */
  -
  -void dotconftest(int argc, char **argv) /*FIXME*/
  -{
  - 
  -    ctx = malloc(sizeof(lmtp2nntp_config_t));
  -    ctx->option_childsmax = 10;
  -
  -
  -/* Braindump
  -
  -    fuer configure
  -
  -ich brauche eine Tabelle, die alle optionen in langer und kurzer Form
  -enthaelt, Angabe ob flag, single- oder multivalue, callbacks fuer die
  -syntaxpruefung des human-readable inputs, die conversion ins interne binaryformat sowie rueckwandlung in
  -human-readable format. Dazu informationen fuer help.
  - */
  -
  -    {
  -        const char *filename = "example.conf";
  -        struct stat sb;
  -        int fd;
  -
  -        if (stat(filename, &sb) == -1)
  -            die("stat");
  -        if ((cpBuf = (char *)malloc((size_t)sb.st_size + 1)) == NULL)
  -            die("malloc");
  -        if ((fd = open(filename, O_RDONLY)) == -1)
  -            die("open");
  -        if (read(fd, (void *)cpBuf, (size_t)sb.st_size) != (ssize_t)sb.st_size)
  -            die("read");
  -        cpBuf[(int)sb.st_size] = '\0';
  -        if (close(fd) == -1)
  -            die("close");
  -    }
  -    //printf("DEBUG: *** 1 *** file as it was just read in ***\n%s***\n", cpBuf);
  -
  -    {
  -        char *cpI;  /* pointer to next character to be read */
  -        char *cpO;  /* pointer to next character to be written. Used for eliminating
  -                       backslash+newline at a line continuation */
  -        char *cpL;  /* pointer to start of line */
  -        int pline;  /* current physical (disregarding line continuation) line number */
  -        int lline;  /* current logical lines first physical line number */
  -        int eline;  /* flag signaling empty or just whitespace-filled line */
  -        char c;     /* current character */
  -        char p;     /* previous character */
  -        int eof;    /* flag signaling end of file detected */
  -
  -        cpI = cpBuf;
  -        cpO = cpBuf;
  -        eof = FALSE;
  -        pline = 1;
  -        p = NUL;
  -
  -        cpL = cpO;
  -        lline = pline;
  -        eline = TRUE;
  -        while(!eof) {
  -            c = *cpI++;
  -            *cpO++ = c;
  -            if (c == NUL)
  -                eof = TRUE;
  -            else
  -                if (!isspace(c))
  -                    eline = FALSE;
  -            if (eof || (c == '\n')) {
  -                pline++;
  -                if (!eof && (p == '\\')) { /* line continuation situation */
  -                    cpO-=2; /* need to remove both backslash+newline */
  -                }
  -                else {
  -                    if (!eline) { /* process logical line unless it's empty */
  -                        *(cpO-1) = NUL;
  -                        if (lline == (pline-1))
  -                            //printf("DEBUG: line[%3d] = ***%s***\n", lline, cpL);
  -                        else
  -                            //printf("DEBUG: [%3d-%3d] = ***%s***\n", lline, pline-1, cpL);
  -                        {
  -                            char *cp = cpL;
  -                            char *command;
  -                            char *value;
  -
  -                            if ((command = str_token(&cp, " \t", "\"'", "#", STR_STRIPQUOTES|STR_BACKSLASHESC)) == NULL)
  -                                //printf("DEBUG: no command - comment only\n");
  -                            else {
  -                                //printf("DEBUG:   command = ***%s***\n", command);
  -                                if ((value = str_token(&cp, " \t", "\"'", "#", STR_STRIPQUOTES|STR_BACKSLASHESC)) == NULL)
  -                                    //printf("DEBUG: no value - section\n");
  -                                else {
  -                                    while(isspace((int)*value)) value++;
  -                                    //printf("DEBUG:     value = ***%s***\n", value);
  -                                }
  -                            }
  -                        }
  -                    }
  -                    cpL = cpO;
  -                    lline = pline;
  -                    eline = TRUE;
  -                }
  -            }
  -            p = c;
  -        }
  -    }
  -}
  -#endif
  -
   struct optionconfig_s {
       optionconfig_t *next;               /* cleanup chain for destroy */
  +    lmtp2nntp_option_t *parent;         /* include needs access to parent */
                       /**/
       char               *longname;       /* the long name (optional if shortname given) */
       char                shortname;      /* the short name (optional if longname given) */
  @@ -263,7 +120,7 @@
           case OPT_MULTI:
               printf("DEBUG: <%5s>, name=<%20s>, OPT_MULTI,  desc=<%20s>, data@%.8lx->[%d]%.8lx\n",  (char *)ctx, name, desc, (long)oc, oc->ndata, (long)oc->data.m);
               for (i = 0; i < oc->ndata; i++) {
  -                printf("DEBUG:        [%3d]                        =<%20s>\n", i, oc->data.m[i]);
  +                printf("DEBUG:        [%3d] \"%s\"\n", i, oc->data.m[i]);
               }
               break;
           default:
  @@ -271,8 +128,8 @@
       }
       return VAL_OK;
   }
  -lmtp2nntp_option_rc_t option_find(lmtp2nntp_option_t *o, int number, optionconfig_t **ocp);
  -lmtp2nntp_option_rc_t option_find(lmtp2nntp_option_t *o, int number, optionconfig_t **ocp)
  +//lmtp2nntp_option_rc_t option_find(lmtp2nntp_option_t *o, int number, optionconfig_t **ocp);
  +static lmtp2nntp_option_rc_t option_find(lmtp2nntp_option_t *o, int number, optionconfig_t **ocp)
   {
       lmtp2nntp_option_rc_t rc = VAL_OK;
   
  @@ -302,6 +159,7 @@
           return OPTION_ERR_MEM;
       //printf("DEBUG: optionconfig_t structure malloc'ed\n");
       oc->next         = NULL;
  +    oc->parent       = o;
       oc->longname     = strdup(longname);
       oc->shortname    = shortname;
       oc->descrip      = descrip == NULL ? NULL : strdup(descrip);
  @@ -310,7 +168,7 @@
       oc->cb           = cb;
       oc->cbctx        = cbctx;
       oc->val          = o->vo;
  -    oc->number       = o->pi; /*FIXME + 1; 0 is a reserved val in popt, so offset 1 */
  +    oc->number       = o->pi + 1; /* 0 is a reserved val in popt, so offset 1 */
       oc->data.f       = 0;
       oc->data.s       = NULL; /* just in case a pointer is larger than int */
       oc->data.m       = NULL;
  @@ -324,7 +182,8 @@
       //printf("DEBUG: optionconfig_t structure created\n");
   
       /* feed lib_val */
  -    (void)/*FIXME rc*/val_reg(oc->val, oc->longname, VAL_TYPE_PTR, oc->descrip, oc);
  +    if (val_reg(oc->val, oc->longname, VAL_TYPE_PTR, oc->descrip, oc) != VAL_OK)
  +        CU(OPTION_ERR_USE);
   
       //printf("DEBUG: val_reg'ed\n");
   
  @@ -333,15 +192,17 @@
       if (o->pi >= (o->pn-2)) { /* correction by two here, in malloc and realloc is for AUTOHELP and TABLEEND */
           if (o->pt == NULL) {
               //printf("DEBUG: malloc\n");
  -            o->pt = (struct popt_option *)malloc(                (1 + 2) * sizeof(struct popt_option)); /*FIXME out of mem*/
  +            o->pt = (struct popt_option *)malloc(                (1 + 2) * sizeof(struct popt_option));
               o->pn = 1;
           }
           else {
               //printf("DEBUG: realloc\n");
  -            o->pt = (struct popt_option *)realloc(o->pt, (o->pn * 2 + 2) * sizeof(struct popt_option)); /*FIXME out of mem*/
  +            o->pt = (struct popt_option *)realloc(o->pt, (o->pn * 2 + 2) * sizeof(struct popt_option));
               o->pn = o->pn * 2;
           }
       }
  +    if (o->pt == NULL)
  +        CU(OPTION_ERR_MEM);
       o->pt[o->pi].longName   = oc->longname;
       o->pt[o->pi].shortName  = oc->shortname;
       o->pt[o->pi].argInfo    = oc->type == OPT_FLAG ? POPT_ARG_NONE : POPT_ARG_STRING;
  @@ -393,14 +254,110 @@
       return rc;
   }
   
  +lmtp2nntp_option_rc_t option_create(lmtp2nntp_option_t **op)
  +{
  +    //printf("DEBUG: enter option_create(%.8lx)\n", (long)op);
  +
  +    if (op == NULL)
  +        return OPTION_ERR_ARG;
  +
  +    if ((*op = (lmtp2nntp_option_t *)malloc(sizeof(lmtp2nntp_option_t))) == NULL)
  +        return OPTION_ERR_MEM;
  +    (*op)->childsmax = 0;
  +    (*op)->daemonize = 0;
  +    (*op)->kill = 0;
  +    (*op)->pidfile = 0;
  +    (*op)->acl.as = 0;
  +    (*op)->acl.az = NULL;
  +    (*op)->bind = NULL;
  +    (*op)->client = NULL;
  +    (*op)->destination.as = 0;
  +    (*op)->destination.az = NULL;
  +    (*op)->groupmode = NULL;
  +    (*op)->headervalue.as = 0;
  +    (*op)->headervalue.az = NULL;
  +    (*op)->include.as = 0;
  +    (*op)->include.az = NULL;
  +    (*op)->size = 0;
  +    (*op)->timeoutlmtpaccept = 0;
  +    (*op)->timeoutlmtpread = 0;
  +    (*op)->timeoutlmtpwrite = 0;
  +    (*op)->timeoutnntpconnect = 0;
  +    (*op)->timeoutnntpread = 0;
  +    (*op)->timeoutnntpwrite = 0;
  +    (*op)->mailfrom = NULL;
  +    (*op)->nodename = NULL;
  +    (*op)->operationmode = NULL;
  +    (*op)->l2spec = NULL;
  +    (*op)->uid = NULL;
  +    (*op)->restrictheader.as = 0;
  +    (*op)->restrictheader.az = NULL;
  +    (*op)->newsgroup.as = 0;
  +    (*op)->newsgroup.az = NULL;
  +                    /**/
  +    (*op)->first = NULL;
  +    (*op)->last = NULL;
  +    (*op)->vo = NULL;
  +    (*op)->pn = 0;
  +    (*op)->pi = 0;
  +    (*op)->pt = NULL;
  +
  +    if (val_create(&((*op)->vo)) != VAL_OK) {
  +        free(*op);
  +        return OPTION_ERR_VAL;
  +    }
  +    return OPTION_OK;
  +}
  +
  +static lmtp2nntp_option_rc_t option_parse_internal(lmtp2nntp_option_t *o, int argc, char **argv)
  +{
  +    int i;
  +    char *cp;
  +    optionconfig_t *ocp;
  +    popt_context poptCon;   /* context for parsing command-line options */
  +
  +#if 0
  +    {
  +        int i; 
  +    
  +        for (i=0; i<argc; i++)
  +            printf("DEBUG: argv[%3d] = ***%s***\n", i, argv[i]);
  +    }
  +#endif
  +
  +    poptCon = popt_getcontext(NULL, argc, (const char **)argv, o->pt, 0);
  +    popt_setotheroptionhelp(poptCon, "[OPTIONS]* [newsgroup ...]");
  +    //printf("DEBUG: argc=%d\n", argc);
  +    if (argc < 2) {
  +        popt_printusage(poptCon, stderr, 0);
  +        exit(1);
  +    }
  +    while ((i = popt_getnextopt(poptCon)) >= 0) {
  +        (void)option_find(o, i, &ocp);
  +        //printf("DEBUG: ocp->type=%d\n", ocp->type);
  +        if (ocp->cb != NULL)
  +            ocp->cb(ocp, cp = (ocp->type == OPT_FLAG ? NULL : (char *)popt_getoptarg(poptCon)), ocp->cbctx);
  +        //printf("DEBUG: popt_getnextopt returned  %d \"%s\", \"%s\"\n", i-1, o->pt[i-1].longName, ocp->longname);
  +        //printf("DEBUG: popt_getoptarg  returned  \"%s\"\n", cp);
  +    }
  +    //printf("DEBUG: current popt error is \"%s\"(%d)\n", popt_strerror(i), i);
  +    //printf("DEBUG: ----\n");
  +    while ((cp = (char *)popt_getarg(poptCon)) != NULL) {
  +        printf("DEBUG: popt_getarg returned \"%s\"\n", cp);
  +    }
  +    //printf("DEBUG: current popt error is \"%s\"(%d)\n", popt_strerror(i), i);
  +    popt_freecontext(poptCon);
  +    return OPTION_OK;
  +}
  +
   static lmtp2nntp_option_rc_t stdsyntax(optionconfig_t *oc, char *arg, char *cbctx)
   {
  -    printf("DEBUG: enter stdsyntax %.8lx, \"%s\", \"%s\"\n", (long)oc, arg, cbctx);
  +    //printf("DEBUG: enter stdsyntax %.8lx, \"%s\", \"%s\"\n", (long)oc, arg, cbctx);
   
       //printf("DEBUG: oc->type=%d\n", oc->type);
       switch (oc->type) {
           case OPT_FLAG:
  -            printf("DEBUG: flag\n");
  +            printf("DEBUG: flag   %20s = %s should match %s\n", oc->longname, arg, cbctx);
               if (arg != NULL || cbctx != NULL)
                   return OPTION_ERR_ARG;
               if (oc->ndata >= 1)
  @@ -409,23 +366,25 @@
               oc->ndata = 1;
               break;
           case OPT_SINGLE:
  -            printf("DEBUG: single\n");
  +            printf("DEBUG: single %20s = %s should match %s\n", oc->longname, arg, cbctx);
               if (arg == NULL)
                   return OPTION_ERR_ARG;
  -            if (oc->ndata >= 1 || oc->data.s != NULL)
  -                    return OPTION_ERR_USE;
  +            /* use this if repeated overwriting definitions are not allowed
  +             *  if (oc->ndata >= 1 || oc->data.s != NULL)
  +             *      return OPTION_ERR_USE;
  +             */
               if (cbctx != NULL)
                   if (str_parse(arg, cbctx) <= 0) {
                       //printf("DEBUG: \"%s\" does NOT match \"%s\"\n", arg, cbctx);
                       return OPTION_ERR_USE;
                   }
  -            printf("DEBUG: \"%s\" does match \"%s\"\n", arg, cbctx);
  +            //printf("DEBUG: \"%s\" does match \"%s\"\n", arg, cbctx);
               if ((oc->data.s = strdup(arg)) == NULL)
                       return OPTION_ERR_MEM;
               oc->ndata = 1;
               break;
           case OPT_MULTI:
  -            //printf("DEBUG: multi\n");
  +            printf("DEBUG: multi  %20s = %s should match %s\n", oc->longname, arg, cbctx);
               if (arg == NULL)
                   return OPTION_ERR_ARG;
               if (oc->ndata >= 1 && oc->data.m == NULL)
  @@ -458,130 +417,189 @@
   
   static lmtp2nntp_option_rc_t includeit(optionconfig_t *oc, char *arg, char *cbctx)
   {
  -    return OPTION_OK;
  -}
  +    lmtp2nntp_option_t *o;
  +    char *cpBuf = NULL;
  +    int argc = 0;
  +    char **argv = NULL;
   
  -lmtp2nntp_option_rc_t option_create(lmtp2nntp_option_t **op)
  -{
  -    //printf("DEBUG: enter option_create(%.8lx)\n", (long)op);
  +    //printf("DEBUG: enter includeit %.8lx, \"%s\", \"%s\"\n", (long)oc, arg, cbctx);
   
  -    if (op == NULL)
  -        return OPTION_ERR_ARG;
  +    if ((o = oc->parent) == NULL)
  +        return OPTION_ERR_USE;
   
  -    if ((*op = (lmtp2nntp_option_t *)malloc(sizeof(lmtp2nntp_option_t))) == NULL)
  -        return OPTION_ERR_MEM;
  -    (*op)->childsmax = 0;
  -    (*op)->daemonize = 0;
  -    (*op)->kill = 0;
  -    (*op)->pidfile = 0;
  -    (*op)->acl.as = 0;
  -    (*op)->acl.az = NULL;
  -    (*op)->bind = NULL;
  -    (*op)->client = NULL;
  -    (*op)->destination.as = 0;
  -    (*op)->destination.az = NULL;
  -    (*op)->groupmode = NULL;
  -    (*op)->headervalue.as = 0;
  -    (*op)->headervalue.az = NULL;
  -    (*op)->include.as = 0;
  -    (*op)->include.az = NULL;
  -    (*op)->size = 0;
  -    (*op)->timeoutlmtpaccept = 0;
  -    (*op)->timeoutlmtpread = 0;
  -    (*op)->timeoutlmtpwrite = 0;
  -    (*op)->timeoutnntpconnect = 0;
  -    (*op)->timeoutnntpread = 0;
  -    (*op)->timeoutnntpwrite = 0;
  -    (*op)->mailfrom = NULL;
  -    (*op)->nodename = NULL;
  -    (*op)->operationmode = NULL;
  -    (*op)->l2spec = NULL;
  -    (*op)->uid = NULL;
  -    (*op)->restrictheader.as = 0;
  -    (*op)->restrictheader.az = NULL;
  -    (*op)->newsgroup.as = 0;
  -    (*op)->newsgroup.az = NULL;
  -                    /**/
  -    (*op)->first = NULL;
  -    (*op)->last = NULL;
  -    (*op)->vo = NULL;
  -    (*op)->pn = 0;
  -    (*op)->pi = 0;
  -    (*op)->pt = NULL;
  +    stdsyntax(oc, arg, cbctx);
  +    //printf("DEBUG: *** 1 *** file going to be read in now\n");
  +    {
  +        const char *filename = arg;
  +        struct stat sb;
  +        int fd;
   
  -    if (val_create(&((*op)->vo)) != VAL_OK) {
  -        free(*op);
  -        return OPTION_ERR_VAL;
  +        if (stat(filename, &sb) == -1) die("stat");
  +        if ((cpBuf = (char *)malloc((size_t)sb.st_size + 1)) == NULL) die("malloc");
  +        if ((fd = open(filename, O_RDONLY)) == -1) die("open");
  +        if (read(fd, (void *)cpBuf, (size_t)sb.st_size) != (ssize_t)sb.st_size) die("read");
  +        cpBuf[(int)sb.st_size] = '\0';
  +        if (close(fd) == -1)
  +            die("close");
       }
  -    return OPTION_OK;
  +    //printf("DEBUG: *** 2 *** file as it was just read in ***\n%s***\n", cpBuf);
  +
  +    {
  +        char *cpI;  /* pointer to next character to be read */
  +        char *cpO;  /* pointer to next character to be written. Used for eliminating
  +                       backslash+newline at a line continuation */
  +        char *cpL;  /* pointer to start of line */
  +        int pline;  /* current physical (disregarding line continuation) line number */
  +        int lline;  /* current logical lines first physical line number */
  +        int eline;  /* flag signaling empty or just whitespace-filled line */
  +        char c;     /* current character */
  +        char p;     /* previous character */
  +        int eof;    /* flag signaling end of file detected */
  +
  +        cpI = cpBuf;
  +        cpO = cpBuf;
  +        eof = FALSE;
  +        pline = 1;
  +        p = NUL;
  +
  +        cpL = cpO;
  +        lline = pline;
  +        eline = TRUE;
  +        while(!eof) {
  +            c = *cpI++;
  +            *cpO++ = c;
  +            if (c == NUL)
  +                eof = TRUE;
  +            else
  +                if (!isspace(c))
  +                    eline = FALSE;
  +            if (eof || (c == '\n')) {
  +                pline++;
  +                if (!eof && (p == '\\')) { /* line continuation situation */
  +                    cpO-=2; /* need to remove both backslash+newline */
  +                }
  +                else {
  +                    if (!eline) { /* process logical line unless it's empty */
  +                        *(cpO-1) = NUL;
  +                        if (lline == (pline-1))
  +                            ;//printf("DEBUG: line[%3d] = ***%s***\n", lline, cpL);
  +                        else
  +                            ;//printf("DEBUG: [%3d-%3d] = ***%s***\n", lline, pline-1, cpL);
  +                        {
  +                            char *cp = cpL;
  +                            char *option;
  +                            char *value;
  +                            char *cpNew;
  +                            argz_t Newarg;
  +
  +                            Newarg.as = 0;
  +                            Newarg.az = NULL;
  +                            if ((option = str_token(&cp, " \t", "\"'", "#", STR_STRIPQUOTES|STR_BACKSLASHESC)) == NULL)
  +                                //printf("DEBUG: no command - comment only\n")
  +                                ;/* don't care about comments */
  +                            else {
  +                                //printf("DEBUG:    option = ***%s***\n", option);
  +                                if ((value = str_token(&cp, " \t", "\"'", "#", STR_STRIPQUOTES|STR_BACKSLASHESC)) == NULL)
  +                                    ;//printf("DEBUG: no value - section\n");
  +                                else {
  +                                    while(isspace((int)*value)) value++;
  +                                    //printf("DEBUG:     value = ***%s***\n", value);
  +
  +                                    if (argv == NULL) {
  +                                        if ((argv = (char **)malloc(   (   1 + 1) * sizeof(char **))) == NULL)
  +                                            return OPTION_ERR_MEM;
  +                                        argc = 0;
  +                                        argv[argc++] = "include";
  +                                        argv[argc] = NULL;
  +                                    }
  +
  +                                    if ((cpNew = (char *)malloc(2 + strlen(option) + 1)) == NULL)
  +                                        return OPTION_ERR_MEM;
  +                                    cpNew[0]=NUL;
  +                                    strcat(cpNew, "--");
  +                                    strcat(cpNew, option);
  +                                    if ((argv = (char **)realloc(argv, (argc + 1) * sizeof(char **))) == NULL)
  +                                        return OPTION_ERR_MEM;
  +                                    argv[argc++] = cpNew;
  +                                    argv[argc] = NULL;
  +
  +                                    if ((cpNew = strdup(value)) == NULL)
  +                                        return OPTION_ERR_MEM;
  +                                    if ((argv = (char **)realloc(argv, (argc + 1) * sizeof(char **))) == NULL)
  +                                        return OPTION_ERR_MEM;
  +                                    argv[argc++] = cpNew;
  +                                    argv[argc] = NULL;
  +                                }
  +                            }
  +                        }
  +                    }
  +                    cpL = cpO;
  +                    lline = pline;
  +                    eline = TRUE;
  +                }
  +            }
  +            p = c;
  +        }
  +    }
  +    
  +    return option_parse_internal(o, argc, argv);
   }
   
   lmtp2nntp_option_rc_t option_parse(lmtp2nntp_option_t *o, int argc, char **argv)
   {
  +    lmtp2nntp_option_rc_t rc;
       //printf("DEBUG: enter option_parse(%.8lx, %d, %.8lx)\n", (long)o, argc, (long)argv);
   
       if (o == NULL)
           return OPTION_ERR_ARG;
   
  -    (void)option_register(o, "childsmax",           'C', OPT_SINGLE, &stdsyntax, "m/.*/",               "foo", "childsmax" );
  -    (void)option_register(o, "daemonize",           'D', OPT_FLAG,   NULL,       NULL,                  "foo", NULL );
  -    (void)option_register(o, "kill",                'K', OPT_FLAG,   NULL,       NULL,                  "foo", NULL );
  -    (void)option_register(o, "pidfile",             'P', OPT_SINGLE, &stdsyntax, "m/.{,255}/",          "foo", "pidfile" );
  -    (void)option_register(o, "veryverbose",         'V', OPT_FLAG,   NULL,       NULL,                  "foo", NULL );
  -    (void)option_register(o, "acl",                 'a', OPT_MULTI,  &stdsyntax, "m/[0-9.](/[0-9]2)?/", "foo", "addr[/mask]" );
  -    (void)option_register(o, "bind",                'b', OPT_SINGLE, &stdsyntax, "m/.*/",               "foo", "addr[:port]|-|path[:perms]" );
  -    (void)option_register(o, "client",              'c', OPT_SINGLE, &stdsyntax, "m/.*/",               "foo", "addr[:port]" );
  -    (void)option_register(o, "destination",         'd', OPT_MULTI,  &stdsyntax, "m/.*/",               "foo", "addr[:port]" );
  -    (void)option_register(o, "groupmode",           'g', OPT_SINGLE, &stdsyntax, "m/.*/",               "foo", "groupmode" );
  -    (void)option_register(o, "headervalue",         'h', OPT_MULTI,  &stdsyntax, "m/.*/",               "foo", "header: value" );
  -    (void)option_register(o, "include",             'i', OPT_MULTI,  &includeit, "m/.*/",               "foo", "configfile" );
  -    (void)option_register(o, "size",                's', OPT_SINGLE, &stdsyntax, "m/[0-9]+/",           "foo", "bytes" );
  -    (void)option_register(o, "timeoutlmtpaccept",   NUL, OPT_MULTI,  &stdsyntax, "m/.*/",               "foo", "sec" );
  -    (void)option_register(o, "timeoutlmtpread",     NUL, OPT_MULTI,  &stdsyntax, "m/.*/",               "foo", "sec" );
  -    (void)option_register(o, "timeoutlmtpwrite",    NUL, OPT_MULTI,  &stdsyntax, "m/.*/",               "foo", "sec" );
  -    (void)option_register(o, "timeoutnntpconnect",  NUL, OPT_MULTI,  &stdsyntax, "m/.*/",               "foo", "sec" );
  -    (void)option_register(o, "timeoutnntpread",     NUL, OPT_MULTI,  &stdsyntax, "m/.*/",               "foo", "sec" );
  -    (void)option_register(o, "timeoutnntpwrite",    NUL, OPT_MULTI,  &stdsyntax, "m/.*/",               "foo", "sec" );
  -    (void)option_register(o, "mailfrom",            'm', OPT_SINGLE, &stdsyntax, "m/.*/",               "foo", "regex" );
  -    (void)option_register(o, "nodename",            'n', OPT_SINGLE, &stdsyntax, "m/.*/",               "foo", "nodename" );
  -    (void)option_register(o, "operationmode",       'o', OPT_SINGLE, &stdsyntax, "m/.*/",               "foo", "post|feed" );
  -    (void)option_register(o, "l2spec",              'l', OPT_SINGLE, &stdsyntax, "m/.*/",               "foo", "spec" );
  -    (void)option_register(o, "uid",                 'u', OPT_SINGLE, &stdsyntax, "m/.*/",               "foo", "number|name" );
  -    (void)option_register(o, "restrictheader",      'r', OPT_MULTI,  &stdsyntax, "m/.*/",               "foo", "regex" );
  -    (void)option_register(o, "newsgroup",           NUL, OPT_MULTI,  &stdsyntax, "m/.*/",               "foo", "newsgroup");
  -    //val_apply(o->vo, "", 9, dumper, "all" );
  -    
  +    (void)option_register(o, "childsmax",          'C', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "childsmax" );
  +    (void)option_register(o, "daemonize",          'D', OPT_FLAG,   &stdsyntax, NULL,    "foo", NULL );
  +    (void)option_register(o, "kill",               'K', OPT_FLAG,   &stdsyntax, NULL,    "foo", NULL );
  +    (void)option_register(o, "pidfile",            'P', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "pidfile" );
  +    (void)option_register(o, "veryverbose",        'V', OPT_FLAG,   &stdsyntax, NULL,    "foo", NULL );
  +    (void)option_register(o, "acl",                'a', OPT_MULTI,  &stdsyntax, "m/.*/", "foo", "addr[/mask]" );
  +    (void)option_register(o, "bind",               'b', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "addr[:port]|-|path[:perms]" );
  +    (void)option_register(o, "client",             'c', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "addr[:port]" );
  +    (void)option_register(o, "destination",        'd', OPT_MULTI,  &stdsyntax, "m/.*/", "foo", "addr[:port]" );
  +    (void)option_register(o, "groupmode",          'g', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "groupmode" );
  +    (void)option_register(o, "headervalue",        'h', OPT_MULTI,  &stdsyntax, "m/.*/", "foo", "header: value" );
  +    (void)option_register(o, "include",            'i', OPT_MULTI,  &includeit, "m/.*/", "foo", "configfile" );
  +    (void)option_register(o, "size",               's', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "bytes" );
  +    (void)option_register(o, "timeoutlmtpaccept",  NUL, OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "sec" );
  +    (void)option_register(o, "timeoutlmtpread",    NUL, OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "sec" );
  +    (void)option_register(o, "timeoutlmtpwrite",   NUL, OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "sec" );
  +    (void)option_register(o, "timeoutnntpconnect", NUL, OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "sec" );
  +    (void)option_register(o, "timeoutnntpread",    NUL, OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "sec" );
  +    (void)option_register(o, "timeoutnntpwrite",   NUL, OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "sec" );
  +    (void)option_register(o, "mailfrom",           'm', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "regex" );
  +    (void)option_register(o, "nodename",           'n', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "nodename" );
  +    (void)option_register(o, "operationmode",      'o', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "post|feed" );
  +    (void)option_register(o, "l2spec",             'l', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "spec" );
  +    (void)option_register(o, "uid",                'u', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "number|name" );
  +    (void)option_register(o, "restrictheader",     'r', OPT_MULTI,  &stdsyntax, "m/.*/", "foo", "regex" );
  +    (void)option_register(o, "newsgroup",          NUL, OPT_MULTI,  &stdsyntax, "m/.*/", "foo", "newsgroup");
  +
  +#if 0
       {
           int i;
  -        char *cp;
  -        optionconfig_t *ocp;
  -        popt_context poptCon;   /* context for parsing command-line options */
  -
  -        poptCon = popt_getcontext(NULL, argc, (const char **)argv, o->pt, 0);
  -        popt_setotheroptionhelp(poptCon, "[OPTIONS]* [newsgroup ...]");
  -        //printf("DEBUG: argc=%d\n", argc);
  -        if (argc < 2) {
  -            popt_printusage(poptCon, stderr, 0);
  -            exit(1);
  -        }
  -        while ((i = popt_getnextopt(poptCon)) >= 0) {
  -            (void)option_find(o, i, &ocp);
  -            printf("DEBUG: ocp->type=%d\n", ocp->type);
  -            if (ocp->cb != NULL)
  -                ocp->cb(ocp, cp = (ocp->type == OPT_FLAG ? NULL : (char *)popt_getoptarg(poptCon)), ocp->cbctx);
  -            //printf("DEBUG: popt_getnextopt returned  %d \"%s\", \"%s\"\n", i, o->pt[i].longName, ocp->longname);
  -            //printf("DEBUG: popt_getoptarg  returned  \"%s\"\n", cp);
  -        }
  -        //printf("DEBUG: current popt error is \"%s\"(%d)\n", popt_strerror(i), i);
  -        //printf("DEBUG: ----\n");
  -        while ((cp = (char *)popt_getarg(poptCon)) != NULL) {
  -            //printf("DEBUG: popt_getarg returned \"%s\"\n", cp);
  +
  +        for (i=0; i<26; i++) {
  +            printf("DEBUG: o->pt[%3d].longName   = %s   \n", i,       o->pt[i].longName  );
  +            printf("DEBUG: o->pt[%3d].shortName  = %c   \n", i,       o->pt[i].shortName );
  +            printf("DEBUG: o->pt[%3d].argInfo    = %d   \n", i,       o->pt[i].argInfo   );
  +            printf("DEBUG: o->pt[%3d].arg        = %.8lx\n", i, (long)o->pt[i].arg       );
  +            printf("DEBUG: o->pt[%3d].val        = %d   \n", i,       o->pt[i].val       );
  +            printf("DEBUG: o->pt[%3d].descrip    = %s   \n", i,       o->pt[i].descrip   );
  +            printf("DEBUG: o->pt[%3d].argDescrip = %s   \n", i,       o->pt[i].argDescrip);
           }
  -        //printf("DEBUG: current popt error is \"%s\"(%d)\n", popt_strerror(i), i);
  -        popt_freecontext(poptCon);
       }
  +#endif
  +
  +    //val_apply(o->vo, "", 9, dumper, "all" );
  +    rc = option_parse_internal(o, argc, argv);
       val_apply(o->vo, "", 9, dumper, "all" );
  -    return OPTION_OK;
  +    return rc;
   }
   
   lmtp2nntp_option_rc_t option_destroy(lmtp2nntp_option_t *o)

From ossp-cvs-owner@ossp.org  Wed Jan 23 15:58:51 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B9317764D8; Wed, 23 Jan 2002 15:58:51 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.pod
Message-Id: <20020123145851.B9317764D8@mail.ossp.org>
Date: Wed, 23 Jan 2002 15:58:51 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   23-Jan-2002 15:58:51
  Branch: HEAD                             Handle: 2002012314585100

  Modified files:
    ossp-pkg/rc             rc.pod

  Log:
    flush our brainstorming

  Summary:
    Revision    Changes     Path
    1.14        +101 -0     ossp-pkg/rc/rc.pod
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.pod
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 rc.pod
  --- ossp-pkg/rc/rc.pod	23 Jan 2002 13:44:50 -0000	1.13
  +++ ossp-pkg/rc/rc.pod	23 Jan 2002 14:58:51 -0000	1.14
  @@ -23,6 +23,106 @@
   ##  SUCH DAMAGE.
   ##
   
  +# ref: %start; %stop
  +# cfg
  +# def --showdefault, --defsetion=config
  +
  +# --dir=dir1:dir2:..
  +# --rcfile='rc.%s'
  +# --regex-section='(?<=^|\n)%%%s\s*\n(.+?)(?=\n%\S+|$)'
  +# --regex-param='..'
  +# --regex-reference='(?<=^|\n)%%%s\s*(.+?)(?=\n|;)'
  +# --regex-config='(\s+)=(.*)$'
  +# --name-config=config
  +# --name-common=common
  +
  +#  RegexSection (?<=^|\n)%%%s\s*\n(.+?)(?=\n%\S+|$)
  +
  +# Examples:
  +
  +# rc.foo
  +%config
  +    foo=1
  +    bar=2
  +%start -u root -p 200
  +    /cw/bin/fooctl start $foo
  +%stop -u root -p 200
  +    /cw/bin/fooctl stop $bar
  +%restart -u root
  +    %stop
  +    sleep 1
  +    %start
  +%foo -c /usr/bin/perl
  +    print STDERR "foo";
  +
  +<!-- rc.foo -->
  +<config>
  +    <set name=foo>1</set>
  +    <set name=bar>2</set>
  +</config>
  +<start user=root priority=20>
  +    /cw/bin/fooctl start $foo
  +</start>
  +<stop user=root priority=200>
  +    /cw/bin/fooctl stop $bar
  +</stop>
  +<restart user=root>
  +    %stop
  +    sleep 1
  +    %start
  +</restart>
  +<foo command=/usr/bin/perl>
  +    print STDERR "foo";
  +</foo>
  +
  +rc <package> <section> [<section> ...]
  +
  +foreach sec in <section> [<section> ...] {
  +    foreach dir in --dir=dir1:dir2:.. {
  +        search for --rcfile where %s is <package>
  +        parse rcfile into blocks according to --regex-section/etc.
  +        remember common/<section> into list
  +    }
  +    // we now have an unsorted list of common/<section>
  +    sort list of common/<section> according to their priority (see --regex-param)
  +
  +    // execution
  +    forearch common/<section> in list {
  +        prepend config section
  +        prepend common section
  +        expand references accordingf to --regex-reference
  +        execute result as user/group (see --regex-param) with interpreter (see --regex-param)
  +    }
  +}
  +
  +
  +cd () {
  +    eval `rc --eval --rcfunc=$HOME/.cdfunc --rcfile-owner=$USER --rcfile-umask=022 --dir .:..:../..:../../.. --rcfile .cd all leave`
  +    builtin cd ${1+"$@"}
  +    eval `rc --eval --rcfunc=$HOME/.cdfunc --rcfile-owner=$USER --rcfile-umask=022 --dir .:..:../..:../../.. --rcfile .cd all enter`
  +}
  +
  +#  $HOME/.cdfunc
  +AddPath () {
  +    ...
  +}
  +RemPath () {
  +    ...
  +}
  +
  +# .cd
  +%enter
  +    FOO=1
  +    export FOO
  +    AddPath `pwd`/bin
  +%leave
  +    unset FOO
  +    RemPath `pwd`/bin
  +
  +TODO:
  +- error semantic: imediate faulure or skip failured
  +- security => --rcfile-umask
  +
   =pod
   
   =head1 NAME
  @@ -48,6 +148,7 @@
   [B<-r>|B<--raw>]
   [B<-v>|B<--verbose>] 
   [B<-D>|B<--debug>] 
  +[I<command>]
   [I<command-options>]
   [I<command-arguments>]
   

From ossp-cvs-owner@ossp.org  Wed Jan 23 16:36:05 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9D350764D8; Wed, 23 Jan 2002 16:36:05 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.pod
Message-Id: <20020123153605.9D350764D8@mail.ossp.org>
Date: Wed, 23 Jan 2002 16:36:05 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   23-Jan-2002 16:36:05
  Branch: HEAD                             Handle: 2002012315360500

  Modified files:
    ossp-pkg/rc             rc.pod

  Log:
    flush

  Summary:
    Revision    Changes     Path
    1.15        +4  -1      ossp-pkg/rc/rc.pod
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.pod
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 rc.pod
  --- ossp-pkg/rc/rc.pod	23 Jan 2002 14:58:51 -0000	1.14
  +++ ossp-pkg/rc/rc.pod	23 Jan 2002 15:36:05 -0000	1.15
  @@ -38,6 +38,10 @@
   
   #  RegexSection (?<=^|\n)%%%s\s*\n(.+?)(?=\n%\S+|$)
   
  +# - instead of separate run-commands use a global one
  +# - temporarily deactivation of run-commands through environment variable 
  +# - perhaps: "rc <class>[,<class>[,...]] <cmd> [-<opt> ...] [<cmd> ...]
  +
   # Examples:
   
   # rc.foo
  @@ -94,7 +98,6 @@
           execute result as user/group (see --regex-param) with interpreter (see --regex-param)
       }
   }
  -
   
   cd () {
       eval `rc --eval --rcfunc=$HOME/.cdfunc --rcfile-owner=$USER --rcfile-umask=022 --dir .:..:../..:../../.. --rcfile .cd all leave`

From ossp-cvs-owner@ossp.org  Wed Jan 23 16:55:22 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D091E764D8; Wed, 23 Jan 2002 16:55:21 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp example.conf lmtp2nntp_config.c
Message-Id: <20020123155521.D091E764D8@mail.ossp.org>
Date: Wed, 23 Jan 2002 16:55:21 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   23-Jan-2002 16:55:21
  Branch: HEAD                             Handle: 2002012315552100

  Modified files:
    ossp-pkg/lmtp2nntp      example.conf lmtp2nntp_config.c

  Log:
    flag options no longer have an optarg

  Summary:
    Revision    Changes     Path
    1.6         +3  -3      ossp-pkg/lmtp2nntp/example.conf
    1.13        +60 -22     ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/example.conf
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 example.conf
  --- ossp-pkg/lmtp2nntp/example.conf	23 Jan 2002 14:12:52 -0000	1.5
  +++ ossp-pkg/lmtp2nntp/example.conf	23 Jan 2002 15:55:21 -0000	1.6
  @@ -6,8 +6,8 @@
           ### DAEMON ###
   
   childsmax       10                              #see -C aka --childsmax
  -daemonize       yes                             #see -D aka --daemonize
  -kill            4711                            #see -K aka --kill
  +daemonize                                       #see -D aka --daemonize
  +kill                                            #see -K aka --kill
   pidfile         "/tmp/pid"                      #see -P aka --pidfile
   veryverbose                                     #see -V aka --veryverbose
                                                   #           obsolete since v1.2
  @@ -25,7 +25,7 @@
   destination     news.example.com                #see -d aka --destination
   groupmode       envelope                        #see -g aka --groupmode
   headervalue     X-gateway "lmtp2nntp gateway"   #see -h aka --headervalue
  -include         "sampleconfig.two"              #    -i aka --include
  +#include         "sampleconfig.two"             #    -i aka --include
                                                   #    -l is obsolete since v1.2, see l2spec
   
   l2spec          prefix(prefix="%%b %%d %%H:%%M:%%S <%%L> lmtp2nntp[%%P]: ",timezone=local) \
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	23 Jan 2002 14:12:52 -0000	1.12
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	23 Jan 2002 15:55:21 -0000	1.13
  @@ -342,8 +342,36 @@
       }
       //printf("DEBUG: current popt error is \"%s\"(%d)\n", popt_strerror(i), i);
       //printf("DEBUG: ----\n");
  -    while ((cp = (char *)popt_getarg(poptCon)) != NULL) {
  -        printf("DEBUG: popt_getarg returned \"%s\"\n", cp);
  +
  +    {
  +        int largc;
  +        char **largv;
  +        char *cpNew;
  +
  +        if ((largv = (char **)malloc((1 + 1) * sizeof(char **))) == NULL)
  +            return OPTION_ERR_MEM;
  +        largc = 0;
  +        largv[largc++] = "leftover";
  +        largv[largc] = NULL;
  +        while ((cp = (char *)popt_getarg(poptCon)) != NULL) {
  +            //printf("DEBUG: popt_getarg returned \"%s\"\n", cp);
  +            if ((largv = (char **)realloc(largv, (largc + 2) * sizeof(char **))) == NULL)
  +                return OPTION_ERR_MEM;
  +            largv[largc++] = "--newsgroup";
  +            largv[largc] = NULL;
  +            if ((cpNew = strdup(cp)) == NULL)
  +                return OPTION_ERR_MEM;
  +            //printf("DEBUG: cpNew = \"%s\"\n", cpNew);
  +            largv[largc++] = cpNew;
  +            largv[largc] = NULL;
  +            //printf("DEBUG: largc = \"%d\"\n", largc);
  +#if 0
  +            for (i=0; i<largc; i++)
  +                printf("DEBUG: largv[%d] = \"%s\"\n", i, largv[i]);
  +#endif
  +        }
  +        if (largc > 1)
  +            option_parse_internal(o, largc, largv);
       }
       //printf("DEBUG: current popt error is \"%s\"(%d)\n", popt_strerror(i), i);
       popt_freecontext(poptCon);
  @@ -373,12 +401,14 @@
                *  if (oc->ndata >= 1 || oc->data.s != NULL)
                *      return OPTION_ERR_USE;
                */
  +#if 0
               if (cbctx != NULL)
                   if (str_parse(arg, cbctx) <= 0) {
                       //printf("DEBUG: \"%s\" does NOT match \"%s\"\n", arg, cbctx);
                       return OPTION_ERR_USE;
                   }
               //printf("DEBUG: \"%s\" does match \"%s\"\n", arg, cbctx);
  +#endif
               if ((oc->data.s = strdup(arg)) == NULL)
                       return OPTION_ERR_MEM;
               oc->ndata = 1;
  @@ -389,12 +419,14 @@
                   return OPTION_ERR_ARG;
               if (oc->ndata >= 1 && oc->data.m == NULL)
                       return OPTION_ERR_USE;
  +#if 0
               if (cbctx != NULL)
                   if (str_parse(arg, cbctx) <= 0) {
                       //printf("DEBUG: \"%s\" does NOT match \"%s\"\n", arg, cbctx);
                       return OPTION_ERR_USE;
                   }
               //printf("DEBUG: \"%s\" does match \"%s\"\n", arg, cbctx);
  +#endif
               if (oc->data.m == NULL) {
                   if ((oc->data.m = (char **)malloc(             (        1 + 1) * sizeof(char **))) == NULL)
                       return OPTION_ERR_MEM;
  @@ -407,6 +439,14 @@
                       return OPTION_ERR_MEM;
               oc->ndata++;
               oc->data.m[oc->ndata] = NULL;
  +#if 1
  +            {
  +                int i;
  +                printf("DEBUG: oc->ndata=%d\n", oc->ndata);
  +                for (i=0; i<oc->ndata; i++)
  +                    printf("DEBUG: oc->data[%3d] = %s\n", i, oc->data.m[i]);
  +            }
  +#endif
               break;
           default:
               return OPTION_ERR_ARG;
  @@ -499,30 +539,29 @@
                                   ;/* don't care about comments */
                               else {
                                   //printf("DEBUG:    option = ***%s***\n", option);
  +                                if (argv == NULL) {
  +                                    if ((argv = (char **)malloc(   (   1 + 1) * sizeof(char **))) == NULL)
  +                                        return OPTION_ERR_MEM;
  +                                    argc = 0;
  +                                    argv[argc++] = "include";
  +                                    argv[argc] = NULL;
  +                                }
  +
  +                                if ((cpNew = (char *)malloc(2 + strlen(option) + 1)) == NULL)
  +                                    return OPTION_ERR_MEM;
  +                                cpNew[0]=NUL;
  +                                strcat(cpNew, "--");
  +                                strcat(cpNew, option);
  +                                if ((argv = (char **)realloc(argv, (argc + 1) * sizeof(char **))) == NULL)
  +                                    return OPTION_ERR_MEM;
  +                                argv[argc++] = cpNew;
  +                                argv[argc] = NULL;
  +
                                   if ((value = str_token(&cp, " \t", "\"'", "#", STR_STRIPQUOTES|STR_BACKSLASHESC)) == NULL)
                                       ;//printf("DEBUG: no value - section\n");
                                   else {
                                       while(isspace((int)*value)) value++;
                                       //printf("DEBUG:     value = ***%s***\n", value);
  -
  -                                    if (argv == NULL) {
  -                                        if ((argv = (char **)malloc(   (   1 + 1) * sizeof(char **))) == NULL)
  -                                            return OPTION_ERR_MEM;
  -                                        argc = 0;
  -                                        argv[argc++] = "include";
  -                                        argv[argc] = NULL;
  -                                    }
  -
  -                                    if ((cpNew = (char *)malloc(2 + strlen(option) + 1)) == NULL)
  -                                        return OPTION_ERR_MEM;
  -                                    cpNew[0]=NUL;
  -                                    strcat(cpNew, "--");
  -                                    strcat(cpNew, option);
  -                                    if ((argv = (char **)realloc(argv, (argc + 1) * sizeof(char **))) == NULL)
  -                                        return OPTION_ERR_MEM;
  -                                    argv[argc++] = cpNew;
  -                                    argv[argc] = NULL;
  -
                                       if ((cpNew = strdup(value)) == NULL)
                                           return OPTION_ERR_MEM;
                                       if ((argv = (char **)realloc(argv, (argc + 1) * sizeof(char **))) == NULL)
  @@ -541,7 +580,6 @@
               p = c;
           }
       }
  -    
       return option_parse_internal(o, argc, argv);
   }
   

From ossp-cvs-owner@ossp.org  Wed Jan 23 17:39:53 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9995D764D8; Wed, 23 Jan 2002 17:39:53 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc-sample.pod
Message-Id: <20020123163953.9995D764D8@mail.ossp.org>
Date: Wed, 23 Jan 2002 17:39:53 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   23-Jan-2002 17:39:53
  Branch: HEAD                             Handle: 2002012316395300

  Added files:
    ossp-pkg/rc             rc-sample.pod

  Log:
    add first cut of sample manual page

  Summary:
    Revision    Changes     Path
    1.1         +169 -0     ossp-pkg/rc/rc-sample.pod
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc-sample.pod
  ============================================================
  $ cvs update -p -r1.1 rc-sample.pod
  
  =pod
  
  =head1 NAME
  
  rc-sample -- B<OSSP rc> Example Use Cases
  
  =head1 DESCRIPTION
  
  This documents typical use cases for B<OSSP rc>.
  
  =head1 USE CASE: OpenPKG Run-Command Facility
  
  This describes how B<OSSP rc> is used as the B<OpenPKG>
  (http://www.openpkg.org/) run-command facility. First, the involved files:
  
  =over 4
  
  =item F</cw/etc/rc>
  
  This is just the location of the B<OSSP rc> program.
  
  =item F</cw/etc/rc.cf> 
  
  This is the B<OSSP rc> configuration file, hard-coded into
  F</cw/etc/rc> at configure/build time with the Autoconf option
  C<--with-config=/cw/etc/rc.cf>. It is installed at B<OpenPKG>
  bootstrap time and used read-only.
  
   Dirs          /cw/etc/rc.d:/cw/local/etc/rc.d
   Name          rc.%s/rc.*
   ConfigDef     (?<=^\s*)([a-zA-Z_][a-zA-Z_0-9]*)=("[^"]*"|'[^']*'|\S+)
   SectionDef    (?<=^|\n)%([a-zA-Z][a-zA-Z0-9]*)(\s+-[a-zA-Z]\s*\S+)\s*\n(.+?)(?=\n%%\S+|$)
   ParamDef      (?<=^|\s)-([a-zA-Z])\s*(\S+)
   SectionRef    (?<=^\s*|;\s*)%([a-zA-Z][a-zA-Z0-9]*)(\s+[^\n]+)?
   ParamRef      \$([0-9])
   NameConfig    config
   NameCommon    common
   Execute       root  %s
   Execute       !root sudo %s
   LineControl   yes
  
  =item F</cw/etc/rc.func> (C<%common> extensions)
  
  This is the B<OpenPKG> Bourne-Shell script providing a set of reusable
  functions. It is installed at B<OpenPKG> bootstrap time and used
  read-only.
  
   opVarIsYes () {
       _var="${1}"
       eval "_val=\"\$${_var}\""
       case "${_val}" in
           [Yy][Ee][Ss] | [Tt][Rr][Uu][Ee] | [Oo][Nn] | 1 )
               unset _var _val
               return 0
               ;;
           [Nn][Oo] | [Ff][Aa][Ll][Ss][Ee] | [Oo][Ff][Ff] | 0 )
               unset _var _val
               return 1
               ;;
           *)
               opWarn "variable \$${_var} is not set properly."
               unset _var _val
               return 1
           ;;
       esac
   }
   opServiceEnabled () {
       opVarIsYes ${1}_enable
   }
  
  =item F</cw/etc/rc.conf> 
  
  This is the B<OpenPKG> configuration script where the administrator
  overrides the variables from the script's C<%config> sections. It it
  generated (as an empty file) on B<OpenPKG> bootstrap time and manually
  edited later to influence the behaviours of the package's run-command
  scripts (here F</cw/etc/rc.d/rc.foo>).
  
   foo_enable=yes
   foo_flags="--sample"
  
  =item F</cw/etc/rc.d/rc.foo> 
  
  This is the example run-command script of an B<OpenPKG> package C<foo>.
  It is installed by package C<foo> and used read-only.
  
   #!/cw/etc/rc
   %config
       foo_enable=yes
       foo_flags=""
   %common
       foo_pidfile=/cw/var/foo/foo.pid
   %start -u root -p 100
       if opServiceEnabled foo; then
           /cw/sbin/foo -p $foo_pidfile -S $foo_flags
       fi
   %stop -u root -p 100
       if opServiceEnabled foo; then
           /cw/sbin/foo -p $foo_pidfile -K
       fi
   %restart -u root -p 100
       if opServiceEnabled foo; then
           %stop
           sleep 1
           %start 
       fi
   %env
       if opServiceEnabled foo; then
           FOO=/cw/sbin/foo
           export FOO
       fi
  
  =back
  
  With this setup, the following use cases are possible:
  
   $ /cw/etc/rc --query "foo enabled: %{foo_enable}"
   foo enabled: yes
   $ _
  
   $ /cw/etc/rc --config
   Configuration Variable   Effective Value              Default Value
   ------------------------ ------------------------- -- -------------------------
   foo_enable               "yes"                     == "yes"                    
   foo_flags                "--sample"                != ""                    
   $ _ 
  
   $ /cw/etc/rc -v foo start
   start: foo
   $ _ 
  
   $ /cw/etc/rc --print foo env
   # /cw/etc/rc.d/rc.foo 3
       foo_enable=yes
       foo_flags=""
   # /cw/etc/rc.conf 1
   foo_enable=yes
   foo_flags="--sample"
   # internal 0
       . /cw/etc/rc.func
   # /cw/etc/rc.d/rc.foo 6
       foo_pidfile=/cw/var/foo/foo.pid
   # /cw/etc/rc.d/rc.foo 22
       if opServiceEnabled foo; then
           FOO="The Foo"
           export FOO
       fi
   $ _
  
   $ eval `/cw/etc/rc --eval foo env`
   $ print $FOO
   The Foo
   $ _
  
  =head1 USE CASE: Dynamic User Environment (DUE)
  
   ....
  
  #   rc configuration for Dynamic User Environment (DUE)
  Dirs          .:..//
  Name          .duerc
  RequireUmask  022      
  RequireOwner  $USER           
  RequireGroup  %{GROUP}
  
   ....
  
  =cut

From ossp-cvs-owner@ossp.org  Wed Jan 23 17:51:55 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 208CE764D8; Wed, 23 Jan 2002 17:51:55 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc devtool.conf devtool.func
Message-Id: <20020123165155.208CE764D8@mail.ossp.org>
Date: Wed, 23 Jan 2002 17:51:55 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   23-Jan-2002 17:51:55
  Branch: HEAD                             Handle: 2002012316515400

  Modified files:
    ossp-pkg/rc             devtool.conf devtool.func

  Log:
    Back out changes, removing Automake logic at Ralf's request.

  Summary:
    Revision    Changes     Path
    1.3         +0  -4      ossp-pkg/rc/devtool.conf
    1.3         +1  -21     ossp-pkg/rc/devtool.func
  ____________________________________________________________________________

  Index: ossp-pkg/rc/devtool.conf
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.conf
  --- ossp-pkg/rc/devtool.conf	21 Jan 2002 18:00:07 -0000	1.2
  +++ ossp-pkg/rc/devtool.conf	23 Jan 2002 16:51:54 -0000	1.3
  @@ -5,15 +5,11 @@
   %autogen
       @autogen shtool   1.5.4 "1.5.*" all
       @autogen libtool  1.4.2 "1.4*"
  -    @autogen aclocal  1.5   "1.4*"          # Part of automake
  -    @autogen automake 1.5   "1.4*"
       @autogen autoconf 2.52  "2.5.*"
   
   %autoclean
       @autoclean shtool
       @autoclean libtool
  -    @autoclean aclocal
  -    @autoclean automake
       @autoclean autoconf
   
   %configure
  Index: ossp-pkg/rc/devtool.func
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.func
  --- ossp-pkg/rc/devtool.func	21 Jan 2002 18:00:07 -0000	1.2
  +++ ossp-pkg/rc/devtool.func	23 Jan 2002 16:51:54 -0000	1.3
  @@ -28,28 +28,16 @@
       tool=$1
       shift
       case $tool in
  -        aclocal )
  -            aclocal_version=`devtool_require aclocal --version 4 "$1" "$2"`
  -            echo "generating (GNU Aclocal $aclocal_version): aclocal.m4"
  -            aclocal
  -            ;;
           autoconf )
               autoconf_version=`devtool_require autoconf --version 4 "$1" "$2"`
               echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
               autoconf
               autoheader 2>&1 | grep -v "is unchanged"
               ;;
  -        automake )
  -            # We might depend on config.h.in
  -            (autoheader --version) </dev/null >/dev/null 2>&1 && autoheader
  -            automake_version=`devtool_require automake --version 4 "$1" "$2"`
  -            echo "generating (GNU Automake $automake_version): INSTALL Makefile.in depcomp install-sh missing mkinstalldirs stamp-h.in"
  -            automake --add-missing --copy --gnu
  -            ;;
           libtool )
               libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
               echo "generating (GNU Libtool $libtoolize_version): ltmain.sh, libtool.m4, config.guess, config.sub"
  -            libtoolize --force --copy --automake >/dev/null 2>&1
  +            libtoolize --force --copy >/dev/null 2>&1
               cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
                   sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` libtool.m4
               ;;
  @@ -70,14 +58,6 @@
           autoconf )
               echo "removing: configure config.h.in"
               rm -f configure config.h.in
  -            ;;
  -        automake )
  -            echo "removing: INSTALL Makefile.in depcomp install-sh missing mkinstalldirs stamp-h.in"
  -            rm -f INSTALL Makefile.in depcomp install-sh missing mkinstalldirs stamp-h.in
  -            ;;
  -        aclocal )
  -            echo "removing: aclocal.m4"
  -            rm -f aclocal.m4
               ;;
           libtool )
               echo "removing: ltmain.sh libtool.m4 config.guess config.sub"

From ossp-cvs-owner@ossp.org  Wed Jan 23 17:56:06 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9CE38764D8; Wed, 23 Jan 2002 17:56:06 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc autogen.sh
Message-Id: <20020123165606.9CE38764D8@mail.ossp.org>
Date: Wed, 23 Jan 2002 17:56:06 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   23-Jan-2002 17:56:06
  Branch: HEAD                             Handle: 1970010101000000

  Removed files:
    ossp-pkg/rc             autogen.sh

  Log:
    Remove autogen in favor of devtool.

  Summary:
    Revision    Changes     Path
    NONE        +0  -58     ossp-pkg/rc/autogen.sh
  ____________________________________________________________________________

  

From ossp-cvs-owner@ossp.org  Thu Jan 24 09:54:26 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8C2A8764EB; Thu, 24 Jan 2002 09:54:26 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c
Message-Id: <20020124085426.8C2A8764EB@mail.ossp.org>
Date: Thu, 24 Jan 2002 09:54:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   24-Jan-2002 09:54:26
  Branch: HEAD                             Handle: 2002012408542500

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c

  Log:
    fixed nasty realloc problem. Thanks FreeBSD for MALLOC_OPTIONS=Z

  Summary:
    Revision    Changes     Path
    1.14        +32 -16     ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	23 Jan 2002 15:55:21 -0000	1.13
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	24 Jan 2002 08:54:25 -0000	1.14
  @@ -92,9 +92,11 @@
       val_t              *val;            /* val we are registered under */
                       /**/
       int                 number;         /* number of this option for popt */
  -    union {                             /* option data as read from configuration */
  +    struct {                             /* option data as read from configuration */
           int f;                          /* OPT_FLAG */
  +        void *foo1, *foo2, *foo3, *foo4, *foo5, *foo6, *foo7, *foo8, *foo9; 
           char *s;                        /* OPT_SINGLE */
  +        void *bar1, *bar2, *bar3, *bar4, *bar5, *bar6, *bar7, *bar8, *bar9; 
           char **m;                       /* OPT_MULTI */
       } data;
       int ndata;
  @@ -112,15 +114,24 @@
   
       switch (oc->type) {
           case OPT_FLAG:
  -            printf("DEBUG: <%5s>, name=<%20s>, OPT_FLAG,   desc=<%20s>, data@%.8lx->[%d]%d\n",     (char *)ctx, name, desc, (long)oc, oc->ndata, oc->data.f);
  -            break;
  +            printf("DEBUG: <%5s>, name=<%20s>, OPT_FLAG,   desc=<%20s>, data@%.8lx->[%d]%d\n",     (char *)ctx, name, desc, (long)oc, oc->ndata, oc->data.f); break;
           case OPT_SINGLE:
               printf("DEBUG: <%5s>, name=<%20s>, OPT_SINGLE, desc=<%20s>, data@%.8lx->[%d]\"%s\"\n", (char *)ctx, name, desc, (long)oc, oc->ndata, oc->data.s == NULL ? "NULL" : oc->data.s);
               break;
           case OPT_MULTI:
               printf("DEBUG: <%5s>, name=<%20s>, OPT_MULTI,  desc=<%20s>, data@%.8lx->[%d]%.8lx\n",  (char *)ctx, name, desc, (long)oc, oc->ndata, (long)oc->data.m);
               for (i = 0; i < oc->ndata; i++) {
  -                printf("DEBUG:        [%3d] \"%s\"\n", i, oc->data.m[i]);
  +#if 0
  +                {
  +                    int j;
  +                    printf("DEBUG: ");
  +                    for (j=0; j<8; j++) printf("%.2x ", (unsigned char)oc->data.m[i][j]);
  +                    printf(" ");
  +                    for (j=0; j<8; j++) printf("%c", isprint(oc->data.m[i][j]) ? oc->data.m[i][j] : '.');
  +                    printf(" ");
  +                }
  +#endif
  +                printf("DEBUG: [%3d] %.8lx \"%s\"\n", i, (long)oc->data.m[i], oc->data.m[i]);
               }
               break;
           default:
  @@ -385,7 +396,7 @@
       //printf("DEBUG: oc->type=%d\n", oc->type);
       switch (oc->type) {
           case OPT_FLAG:
  -            printf("DEBUG: flag   %20s = %s should match %s\n", oc->longname, arg, cbctx);
  +            //printf("DEBUG: flag   %20s = %s should match %s\n", oc->longname, arg, cbctx);
               if (arg != NULL || cbctx != NULL)
                   return OPTION_ERR_ARG;
               if (oc->ndata >= 1)
  @@ -394,57 +405,60 @@
               oc->ndata = 1;
               break;
           case OPT_SINGLE:
  -            printf("DEBUG: single %20s = %s should match %s\n", oc->longname, arg, cbctx);
  +            //printf("DEBUG: single %20s = %s should match %s\n", oc->longname, arg, cbctx);
               if (arg == NULL)
                   return OPTION_ERR_ARG;
               /* use this if repeated overwriting definitions are not allowed
                *  if (oc->ndata >= 1 || oc->data.s != NULL)
                *      return OPTION_ERR_USE;
                */
  -#if 0
               if (cbctx != NULL)
                   if (str_parse(arg, cbctx) <= 0) {
                       //printf("DEBUG: \"%s\" does NOT match \"%s\"\n", arg, cbctx);
                       return OPTION_ERR_USE;
                   }
               //printf("DEBUG: \"%s\" does match \"%s\"\n", arg, cbctx);
  -#endif
               if ((oc->data.s = strdup(arg)) == NULL)
                       return OPTION_ERR_MEM;
               oc->ndata = 1;
               break;
           case OPT_MULTI:
  -            printf("DEBUG: multi  %20s = %s should match %s\n", oc->longname, arg, cbctx);
  +            //printf("DEBUG: multi  %20s = %s should match %s\n", oc->longname, arg, cbctx);
               if (arg == NULL)
                   return OPTION_ERR_ARG;
               if (oc->ndata >= 1 && oc->data.m == NULL)
                       return OPTION_ERR_USE;
  -#if 0
               if (cbctx != NULL)
                   if (str_parse(arg, cbctx) <= 0) {
                       //printf("DEBUG: \"%s\" does NOT match \"%s\"\n", arg, cbctx);
                       return OPTION_ERR_USE;
                   }
               //printf("DEBUG: \"%s\" does match \"%s\"\n", arg, cbctx);
  -#endif
  +            /* malloc/realloc                                 existing + this new + terminating NULL */
               if (oc->data.m == NULL) {
  -                if ((oc->data.m = (char **)malloc(             (        1 + 1) * sizeof(char **))) == NULL)
  +                //printf("DEBUG: before  malloc, oc->data.m = %.8lx - ", (long)oc->data.m);
  +                //printf("DEBUG: requesting %d bytes\n",         (        0 + 1 + 1) * sizeof(char **));
  +                if ((oc->data.m = (char **)malloc(             (        0 + 1 + 1) * sizeof(char **))) == NULL)
                       return OPTION_ERR_MEM;
  +                //printf("DEBUG: after   malloc, oc->data.m = %.8lx\n", (long)oc->data.m);
               }
               else {
  -                if ((oc->data.m = (char **)realloc(oc->data.m, (oc->ndata + 1) * sizeof(char **))) == NULL)
  +                //printf("DEBUG: before realloc, oc->data.m = %.8lx\n", (long)oc->data.m);
  +                //printf("DEBUG: requesting %d bytes\n",         (oc->ndata + 1 + 1) * sizeof(char **));
  +                if ((oc->data.m = (char **)realloc(oc->data.m, (oc->ndata + 1 + 1) * sizeof(char **))) == NULL)
                       return OPTION_ERR_MEM;
  +                //printf("DEBUG: after  realloc, oc->data.m = %.8lx\n", (long)oc->data.m);
               }
               if ((oc->data.m[oc->ndata] = strdup(arg)) == NULL)
                       return OPTION_ERR_MEM;
               oc->ndata++;
               oc->data.m[oc->ndata] = NULL;
  -#if 1
  +#if 0
               {
                   int i;
                   printf("DEBUG: oc->ndata=%d\n", oc->ndata);
  -                for (i=0; i<oc->ndata; i++)
  -                    printf("DEBUG: oc->data[%3d] = %s\n", i, oc->data.m[i]);
  +                for (i=0; i<=oc->ndata; i++)
  +                    printf("DEBUG: oc->data[%3d] at %.8lx points to  %.8lx = %s\n", i, (long)&oc->data.m[i], (long)oc->data.m[i], oc->data.m[i]);
               }
   #endif
               break;
  @@ -644,6 +658,8 @@
   {
       optionconfig_t *oc;
       int i;
  +
  +    //printf("DEBUG: option_destroy %.8lx\n", (long)o);
   
       if (o == NULL)
           return OPTION_ERR_ARG;

From ossp-cvs-owner@ossp.org  Thu Jan 24 12:05:02 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2FA36764EB; Thu, 24 Jan 2002 12:05:02 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val val_test.c
Message-Id: <20020124110502.2FA36764EB@mail.ossp.org>
Date: Thu, 24 Jan 2002 12:05:02 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   24-Jan-2002 12:05:01
  Branch: HEAD                             Handle: 2002012411050100

  Modified files:
    ossp-pkg/val            val_test.c

  Log:
    Fix typo.

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/val/val_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/val/val_test.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 val_test.c
  --- ossp-pkg/val/val_test.c	16 Jan 2002 16:14:14 -0000	1.2
  +++ ossp-pkg/val/val_test.c	24 Jan 2002 11:05:01 -0000	1.3
  @@ -160,7 +160,7 @@
       if (testint != testintout)
           die("testint/testintout compare #2");
   
  -    /* register variable under second val_t and name it "quux3" - OO method */
  +    /* register variable under first val_t and name it "quux3" - OO method */
       if ((rc = val_reg(v1, "baz.quux3", VAL_TYPE_INT, "quux3 variable", (void *)&testint)) != VAL_OK)
           die("val_reg() #5");
   

From ossp-cvs-owner@ossp.org  Thu Jan 24 13:04:47 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 70141764EB; Thu, 24 Jan 2002 13:04:47 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c lmtp2nntp_config.h l...
Message-Id: <20020124120447.70141764EB@mail.ossp.org>
Date: Thu, 24 Jan 2002 13:04:47 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   24-Jan-2002 13:04:47
  Branch: HEAD                             Handle: 2002012412044600

  Added files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_option.c lmtp2nntp_option.h
  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c lmtp2nntp_config.h

  Log:
    moved config to option, created a new config

  Summary:
    Revision    Changes     Path
    1.15        +6  -611    ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.6         +5  -61     ossp-pkg/lmtp2nntp/lmtp2nntp_config.h
    1.1         +691 -0     ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
    1.1         +87 -0      ossp-pkg/lmtp2nntp/lmtp2nntp_option.h
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	24 Jan 2002 08:54:25 -0000	1.14
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	24 Jan 2002 12:04:46 -0000	1.15
  @@ -1,3 +1,4 @@
  +
   /*
   **  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  @@ -21,7 +22,7 @@
   **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
   **  USA, or contact the OSSP project <ossp@ossp.org>.
   **
  -**  FIXME lmtp2nntp_config.c: LMTP to NNTP configuration parsing
  +**  lmtp2nntp_config.c: config handling
   */
   
   #include <stdlib.h>
  @@ -53,10 +54,12 @@
   #if defined(HAVE_DMALLOC_H) && defined(DMALLOC)
   #include "dmalloc.h"
   #endif
  +#include "lmtp2nntp_option.h"
   #include "lmtp2nntp_config.h"
   #include "lmtp2nntp_lmtp.h"
   #include "lmtp2nntp_nntp.h"
   #include "lmtp2nntp_msg.h"
  +#include "fixme.h"
   #define _LMTP2NNTP_VERSION_C_AS_HEADER_
   #include "lmtp2nntp_version.c"
   #undef  _LMTP2NNTP_VERSION_C_AS_HEADER_
  @@ -72,615 +75,7 @@
   #define NUL '\0'
   #endif
   
  -static void die(char *msg)
  -{
  -    printf("ERROR: %s\n", msg);
  -    exit(-1);
  -}
  -
  -struct optionconfig_s {
  -    optionconfig_t *next;               /* cleanup chain for destroy */
  -    lmtp2nntp_option_t *parent;         /* include needs access to parent */
  -                    /**/
  -    char               *longname;       /* the long name (optional if shortname given) */
  -    char                shortname;      /* the short name (optional if longname given) */
  -    char               *descrip;        /* description for autohelp */
  -    char               *argdescrip;     /* argument description for autohelp */
  -    optiontype_t        type;           /* OPT_FLAG, OPT_SINGLE, OPT_MULTI */
  -    optionloop_cb_t    *cb;             /* callback for first iteration - syntax check and include */
  -    void               *cbctx;          /* context for pass1 */
  -    val_t              *val;            /* val we are registered under */
  -                    /**/
  -    int                 number;         /* number of this option for popt */
  -    struct {                             /* option data as read from configuration */
  -        int f;                          /* OPT_FLAG */
  -        void *foo1, *foo2, *foo3, *foo4, *foo5, *foo6, *foo7, *foo8, *foo9; 
  -        char *s;                        /* OPT_SINGLE */
  -        void *bar1, *bar2, *bar3, *bar4, *bar5, *bar6, *bar7, *bar8, *bar9; 
  -        char **m;                       /* OPT_MULTI */
  -    } data;
  -    int ndata;
  -};
  -
  -static val_rc_t dumper(void *ctx, const char *name, int type, const char *desc, void *data)
  -{
  -    optionconfig_t *oc;
  -    int i;
  -
  -    if (type != VAL_TYPE_PTR)
  -        return VAL_OK;
  -
  -    oc = (optionconfig_t *)data;
  -
  -    switch (oc->type) {
  -        case OPT_FLAG:
  -            printf("DEBUG: <%5s>, name=<%20s>, OPT_FLAG,   desc=<%20s>, data@%.8lx->[%d]%d\n",     (char *)ctx, name, desc, (long)oc, oc->ndata, oc->data.f); break;
  -        case OPT_SINGLE:
  -            printf("DEBUG: <%5s>, name=<%20s>, OPT_SINGLE, desc=<%20s>, data@%.8lx->[%d]\"%s\"\n", (char *)ctx, name, desc, (long)oc, oc->ndata, oc->data.s == NULL ? "NULL" : oc->data.s);
  -            break;
  -        case OPT_MULTI:
  -            printf("DEBUG: <%5s>, name=<%20s>, OPT_MULTI,  desc=<%20s>, data@%.8lx->[%d]%.8lx\n",  (char *)ctx, name, desc, (long)oc, oc->ndata, (long)oc->data.m);
  -            for (i = 0; i < oc->ndata; i++) {
  -#if 0
  -                {
  -                    int j;
  -                    printf("DEBUG: ");
  -                    for (j=0; j<8; j++) printf("%.2x ", (unsigned char)oc->data.m[i][j]);
  -                    printf(" ");
  -                    for (j=0; j<8; j++) printf("%c", isprint(oc->data.m[i][j]) ? oc->data.m[i][j] : '.');
  -                    printf(" ");
  -                }
  -#endif
  -                printf("DEBUG: [%3d] %.8lx \"%s\"\n", i, (long)oc->data.m[i], oc->data.m[i]);
  -            }
  -            break;
  -        default:
  -            break;
  -    }
  -    return VAL_OK;
  -}
  -//lmtp2nntp_option_rc_t option_find(lmtp2nntp_option_t *o, int number, optionconfig_t **ocp);
  -static lmtp2nntp_option_rc_t option_find(lmtp2nntp_option_t *o, int number, optionconfig_t **ocp)
  -{
  -    lmtp2nntp_option_rc_t rc = VAL_OK;
  -
  -    if (o == NULL || ocp == NULL)
  -        return OPTION_ERR_ARG;
  -
  -    *ocp = o->first;
  -    while (*ocp != NULL && (*ocp)->number != number)
  -        *ocp = (*ocp)->next;
  -
  -    return rc;
  -}
  -
  -
  -lmtp2nntp_option_rc_t option_register(lmtp2nntp_option_t *o, char *longname, char shortname, optiontype_t type, optionloop_cb_t *cb, char *cbctx, char *descrip, char *argdescrip)
  +void config_context(lmtp2nntp_t *ctx)
   {
  -    lmtp2nntp_option_rc_t rc = VAL_OK;
  -    optionconfig_t *oc;
  -    
  -    //printf("DEBUG: enter option_register(%.8lx, \"%s\", '%c', %d, %.8lx, %.8lx, \"%s\", \"%s\")\n", (long)o, longname, shortname, type, (long)cb, (long)cbctx, descrip, argdescrip);
  -
  -    if (o == NULL || longname == NULL)
  -        return OPTION_ERR_ARG;
  -
  -    /* create a optionconfig_t structure */
  -    if ((oc = (optionconfig_t *)malloc(sizeof(optionconfig_t))) == NULL)
  -        return OPTION_ERR_MEM;
  -    //printf("DEBUG: optionconfig_t structure malloc'ed\n");
  -    oc->next         = NULL;
  -    oc->parent       = o;
  -    oc->longname     = strdup(longname);
  -    oc->shortname    = shortname;
  -    oc->descrip      = descrip == NULL ? NULL : strdup(descrip);
  -    oc->argdescrip   = argdescrip == NULL ? NULL : strdup(argdescrip);
  -    oc->type         = type;
  -    oc->cb           = cb;
  -    oc->cbctx        = cbctx;
  -    oc->val          = o->vo;
  -    oc->number       = o->pi + 1; /* 0 is a reserved val in popt, so offset 1 */
  -    oc->data.f       = 0;
  -    oc->data.s       = NULL; /* just in case a pointer is larger than int */
  -    oc->data.m       = NULL;
  -    oc->ndata        = 0;
  -    if (   (                      oc->longname   == NULL)
  -        || (descrip    != NULL && oc->descrip    == NULL)
  -        || (argdescrip != NULL && oc->argdescrip == NULL)
  -          )
  -        CU(OPTION_ERR_MEM);
  -
  -    //printf("DEBUG: optionconfig_t structure created\n");
  -
  -    /* feed lib_val */
  -    if (val_reg(oc->val, oc->longname, VAL_TYPE_PTR, oc->descrip, oc) != VAL_OK)
  -        CU(OPTION_ERR_USE);
  -
  -    //printf("DEBUG: val_reg'ed\n");
  -
  -    /* feed lib_popt */
  -    //printf("DEBUG: o->pi=%d, o->pn=%d\n", o->pi, o->pn);
  -    if (o->pi >= (o->pn-2)) { /* correction by two here, in malloc and realloc is for AUTOHELP and TABLEEND */
  -        if (o->pt == NULL) {
  -            //printf("DEBUG: malloc\n");
  -            o->pt = (struct popt_option *)malloc(                (1 + 2) * sizeof(struct popt_option));
  -            o->pn = 1;
  -        }
  -        else {
  -            //printf("DEBUG: realloc\n");
  -            o->pt = (struct popt_option *)realloc(o->pt, (o->pn * 2 + 2) * sizeof(struct popt_option));
  -            o->pn = o->pn * 2;
  -        }
  -    }
  -    if (o->pt == NULL)
  -        CU(OPTION_ERR_MEM);
  -    o->pt[o->pi].longName   = oc->longname;
  -    o->pt[o->pi].shortName  = oc->shortname;
  -    o->pt[o->pi].argInfo    = oc->type == OPT_FLAG ? POPT_ARG_NONE : POPT_ARG_STRING;
  -    o->pt[o->pi].arg        = NULL;
  -    o->pt[o->pi].val        = oc->number;
  -    o->pt[o->pi].descrip    = oc->descrip;
  -    o->pt[o->pi].argDescrip = oc->argdescrip;
  -
  -    /* append POPT_AUTOHELP */
  -    o->pt[o->pi+1].longName   = NULL;
  -    o->pt[o->pi+1].shortName  = '\0';
  -    o->pt[o->pi+1].argInfo    = POPT_ARG_INCLUDE_TABLE;
  -    o->pt[o->pi+1].arg        = popt_helpoptions;
  -    o->pt[o->pi+1].val        = 0;
  -    o->pt[o->pi+1].descrip    = "Help options:";
  -    o->pt[o->pi+1].argDescrip = NULL;
  -
  -    /* append POPT_TABLEEND */
  -    o->pt[o->pi+2].longName   = NULL;
  -    o->pt[o->pi+2].shortName  = '\0';
  -    o->pt[o->pi+2].argInfo    = 0;
  -    o->pt[o->pi+2].arg        = 0;
  -    o->pt[o->pi+2].val        = 0;
  -    o->pt[o->pi+2].descrip    = NULL;
  -    o->pt[o->pi+2].argDescrip = NULL;
  -    o->pi++;
  -    //printf("DEBUG: popt'ed\n");
  -
  -    /* link in this new optionconfig_t structure */
  -    if (o->first == NULL) {
  -        o->first = oc;
  -        o->last  = oc;
  -    }
  -    else {
  -        o->last->next = oc; 
  -        o->last       = oc;
  -    }
  -    //printf("DEBUG: linked\n");
  -
  -    return rc;
  -
  -    CUS:
  -    if (oc != NULL) {
  -        if (oc->argdescrip != NULL) free(oc->argdescrip);
  -        if (oc->descrip    != NULL) free(oc->descrip);
  -        if (oc->longname   != NULL) free(oc->longname);
  -        free(oc);
  -    }
  -    return rc;
  -}
  -
  -lmtp2nntp_option_rc_t option_create(lmtp2nntp_option_t **op)
  -{
  -    //printf("DEBUG: enter option_create(%.8lx)\n", (long)op);
  -
  -    if (op == NULL)
  -        return OPTION_ERR_ARG;
  -
  -    if ((*op = (lmtp2nntp_option_t *)malloc(sizeof(lmtp2nntp_option_t))) == NULL)
  -        return OPTION_ERR_MEM;
  -    (*op)->childsmax = 0;
  -    (*op)->daemonize = 0;
  -    (*op)->kill = 0;
  -    (*op)->pidfile = 0;
  -    (*op)->acl.as = 0;
  -    (*op)->acl.az = NULL;
  -    (*op)->bind = NULL;
  -    (*op)->client = NULL;
  -    (*op)->destination.as = 0;
  -    (*op)->destination.az = NULL;
  -    (*op)->groupmode = NULL;
  -    (*op)->headervalue.as = 0;
  -    (*op)->headervalue.az = NULL;
  -    (*op)->include.as = 0;
  -    (*op)->include.az = NULL;
  -    (*op)->size = 0;
  -    (*op)->timeoutlmtpaccept = 0;
  -    (*op)->timeoutlmtpread = 0;
  -    (*op)->timeoutlmtpwrite = 0;
  -    (*op)->timeoutnntpconnect = 0;
  -    (*op)->timeoutnntpread = 0;
  -    (*op)->timeoutnntpwrite = 0;
  -    (*op)->mailfrom = NULL;
  -    (*op)->nodename = NULL;
  -    (*op)->operationmode = NULL;
  -    (*op)->l2spec = NULL;
  -    (*op)->uid = NULL;
  -    (*op)->restrictheader.as = 0;
  -    (*op)->restrictheader.az = NULL;
  -    (*op)->newsgroup.as = 0;
  -    (*op)->newsgroup.az = NULL;
  -                    /**/
  -    (*op)->first = NULL;
  -    (*op)->last = NULL;
  -    (*op)->vo = NULL;
  -    (*op)->pn = 0;
  -    (*op)->pi = 0;
  -    (*op)->pt = NULL;
  -
  -    if (val_create(&((*op)->vo)) != VAL_OK) {
  -        free(*op);
  -        return OPTION_ERR_VAL;
  -    }
  -    return OPTION_OK;
  -}
  -
  -static lmtp2nntp_option_rc_t option_parse_internal(lmtp2nntp_option_t *o, int argc, char **argv)
  -{
  -    int i;
  -    char *cp;
  -    optionconfig_t *ocp;
  -    popt_context poptCon;   /* context for parsing command-line options */
  -
  -#if 0
  -    {
  -        int i; 
  -    
  -        for (i=0; i<argc; i++)
  -            printf("DEBUG: argv[%3d] = ***%s***\n", i, argv[i]);
  -    }
  -#endif
  -
  -    poptCon = popt_getcontext(NULL, argc, (const char **)argv, o->pt, 0);
  -    popt_setotheroptionhelp(poptCon, "[OPTIONS]* [newsgroup ...]");
  -    //printf("DEBUG: argc=%d\n", argc);
  -    if (argc < 2) {
  -        popt_printusage(poptCon, stderr, 0);
  -        exit(1);
  -    }
  -    while ((i = popt_getnextopt(poptCon)) >= 0) {
  -        (void)option_find(o, i, &ocp);
  -        //printf("DEBUG: ocp->type=%d\n", ocp->type);
  -        if (ocp->cb != NULL)
  -            ocp->cb(ocp, cp = (ocp->type == OPT_FLAG ? NULL : (char *)popt_getoptarg(poptCon)), ocp->cbctx);
  -        //printf("DEBUG: popt_getnextopt returned  %d \"%s\", \"%s\"\n", i-1, o->pt[i-1].longName, ocp->longname);
  -        //printf("DEBUG: popt_getoptarg  returned  \"%s\"\n", cp);
  -    }
  -    //printf("DEBUG: current popt error is \"%s\"(%d)\n", popt_strerror(i), i);
  -    //printf("DEBUG: ----\n");
  -
  -    {
  -        int largc;
  -        char **largv;
  -        char *cpNew;
  -
  -        if ((largv = (char **)malloc((1 + 1) * sizeof(char **))) == NULL)
  -            return OPTION_ERR_MEM;
  -        largc = 0;
  -        largv[largc++] = "leftover";
  -        largv[largc] = NULL;
  -        while ((cp = (char *)popt_getarg(poptCon)) != NULL) {
  -            //printf("DEBUG: popt_getarg returned \"%s\"\n", cp);
  -            if ((largv = (char **)realloc(largv, (largc + 2) * sizeof(char **))) == NULL)
  -                return OPTION_ERR_MEM;
  -            largv[largc++] = "--newsgroup";
  -            largv[largc] = NULL;
  -            if ((cpNew = strdup(cp)) == NULL)
  -                return OPTION_ERR_MEM;
  -            //printf("DEBUG: cpNew = \"%s\"\n", cpNew);
  -            largv[largc++] = cpNew;
  -            largv[largc] = NULL;
  -            //printf("DEBUG: largc = \"%d\"\n", largc);
  -#if 0
  -            for (i=0; i<largc; i++)
  -                printf("DEBUG: largv[%d] = \"%s\"\n", i, largv[i]);
  -#endif
  -        }
  -        if (largc > 1)
  -            option_parse_internal(o, largc, largv);
  -    }
  -    //printf("DEBUG: current popt error is \"%s\"(%d)\n", popt_strerror(i), i);
  -    popt_freecontext(poptCon);
  -    return OPTION_OK;
  -}
  -
  -static lmtp2nntp_option_rc_t stdsyntax(optionconfig_t *oc, char *arg, char *cbctx)
  -{
  -    //printf("DEBUG: enter stdsyntax %.8lx, \"%s\", \"%s\"\n", (long)oc, arg, cbctx);
  -
  -    //printf("DEBUG: oc->type=%d\n", oc->type);
  -    switch (oc->type) {
  -        case OPT_FLAG:
  -            //printf("DEBUG: flag   %20s = %s should match %s\n", oc->longname, arg, cbctx);
  -            if (arg != NULL || cbctx != NULL)
  -                return OPTION_ERR_ARG;
  -            if (oc->ndata >= 1)
  -                return OPTION_ERR_USE;
  -            oc->data.f = 1;
  -            oc->ndata = 1;
  -            break;
  -        case OPT_SINGLE:
  -            //printf("DEBUG: single %20s = %s should match %s\n", oc->longname, arg, cbctx);
  -            if (arg == NULL)
  -                return OPTION_ERR_ARG;
  -            /* use this if repeated overwriting definitions are not allowed
  -             *  if (oc->ndata >= 1 || oc->data.s != NULL)
  -             *      return OPTION_ERR_USE;
  -             */
  -            if (cbctx != NULL)
  -                if (str_parse(arg, cbctx) <= 0) {
  -                    //printf("DEBUG: \"%s\" does NOT match \"%s\"\n", arg, cbctx);
  -                    return OPTION_ERR_USE;
  -                }
  -            //printf("DEBUG: \"%s\" does match \"%s\"\n", arg, cbctx);
  -            if ((oc->data.s = strdup(arg)) == NULL)
  -                    return OPTION_ERR_MEM;
  -            oc->ndata = 1;
  -            break;
  -        case OPT_MULTI:
  -            //printf("DEBUG: multi  %20s = %s should match %s\n", oc->longname, arg, cbctx);
  -            if (arg == NULL)
  -                return OPTION_ERR_ARG;
  -            if (oc->ndata >= 1 && oc->data.m == NULL)
  -                    return OPTION_ERR_USE;
  -            if (cbctx != NULL)
  -                if (str_parse(arg, cbctx) <= 0) {
  -                    //printf("DEBUG: \"%s\" does NOT match \"%s\"\n", arg, cbctx);
  -                    return OPTION_ERR_USE;
  -                }
  -            //printf("DEBUG: \"%s\" does match \"%s\"\n", arg, cbctx);
  -            /* malloc/realloc                                 existing + this new + terminating NULL */
  -            if (oc->data.m == NULL) {
  -                //printf("DEBUG: before  malloc, oc->data.m = %.8lx - ", (long)oc->data.m);
  -                //printf("DEBUG: requesting %d bytes\n",         (        0 + 1 + 1) * sizeof(char **));
  -                if ((oc->data.m = (char **)malloc(             (        0 + 1 + 1) * sizeof(char **))) == NULL)
  -                    return OPTION_ERR_MEM;
  -                //printf("DEBUG: after   malloc, oc->data.m = %.8lx\n", (long)oc->data.m);
  -            }
  -            else {
  -                //printf("DEBUG: before realloc, oc->data.m = %.8lx\n", (long)oc->data.m);
  -                //printf("DEBUG: requesting %d bytes\n",         (oc->ndata + 1 + 1) * sizeof(char **));
  -                if ((oc->data.m = (char **)realloc(oc->data.m, (oc->ndata + 1 + 1) * sizeof(char **))) == NULL)
  -                    return OPTION_ERR_MEM;
  -                //printf("DEBUG: after  realloc, oc->data.m = %.8lx\n", (long)oc->data.m);
  -            }
  -            if ((oc->data.m[oc->ndata] = strdup(arg)) == NULL)
  -                    return OPTION_ERR_MEM;
  -            oc->ndata++;
  -            oc->data.m[oc->ndata] = NULL;
  -#if 0
  -            {
  -                int i;
  -                printf("DEBUG: oc->ndata=%d\n", oc->ndata);
  -                for (i=0; i<=oc->ndata; i++)
  -                    printf("DEBUG: oc->data[%3d] at %.8lx points to  %.8lx = %s\n", i, (long)&oc->data.m[i], (long)oc->data.m[i], oc->data.m[i]);
  -            }
  -#endif
  -            break;
  -        default:
  -            return OPTION_ERR_ARG;
  -            break;
  -    }
  -    return OPTION_OK;
  -}
  -
  -static lmtp2nntp_option_rc_t includeit(optionconfig_t *oc, char *arg, char *cbctx)
  -{
  -    lmtp2nntp_option_t *o;
  -    char *cpBuf = NULL;
  -    int argc = 0;
  -    char **argv = NULL;
  -
  -    //printf("DEBUG: enter includeit %.8lx, \"%s\", \"%s\"\n", (long)oc, arg, cbctx);
  -
  -    if ((o = oc->parent) == NULL)
  -        return OPTION_ERR_USE;
  -
  -    stdsyntax(oc, arg, cbctx);
  -    //printf("DEBUG: *** 1 *** file going to be read in now\n");
  -    {
  -        const char *filename = arg;
  -        struct stat sb;
  -        int fd;
  -
  -        if (stat(filename, &sb) == -1) die("stat");
  -        if ((cpBuf = (char *)malloc((size_t)sb.st_size + 1)) == NULL) die("malloc");
  -        if ((fd = open(filename, O_RDONLY)) == -1) die("open");
  -        if (read(fd, (void *)cpBuf, (size_t)sb.st_size) != (ssize_t)sb.st_size) die("read");
  -        cpBuf[(int)sb.st_size] = '\0';
  -        if (close(fd) == -1)
  -            die("close");
  -    }
  -    //printf("DEBUG: *** 2 *** file as it was just read in ***\n%s***\n", cpBuf);
  -
  -    {
  -        char *cpI;  /* pointer to next character to be read */
  -        char *cpO;  /* pointer to next character to be written. Used for eliminating
  -                       backslash+newline at a line continuation */
  -        char *cpL;  /* pointer to start of line */
  -        int pline;  /* current physical (disregarding line continuation) line number */
  -        int lline;  /* current logical lines first physical line number */
  -        int eline;  /* flag signaling empty or just whitespace-filled line */
  -        char c;     /* current character */
  -        char p;     /* previous character */
  -        int eof;    /* flag signaling end of file detected */
  -
  -        cpI = cpBuf;
  -        cpO = cpBuf;
  -        eof = FALSE;
  -        pline = 1;
  -        p = NUL;
  -
  -        cpL = cpO;
  -        lline = pline;
  -        eline = TRUE;
  -        while(!eof) {
  -            c = *cpI++;
  -            *cpO++ = c;
  -            if (c == NUL)
  -                eof = TRUE;
  -            else
  -                if (!isspace(c))
  -                    eline = FALSE;
  -            if (eof || (c == '\n')) {
  -                pline++;
  -                if (!eof && (p == '\\')) { /* line continuation situation */
  -                    cpO-=2; /* need to remove both backslash+newline */
  -                }
  -                else {
  -                    if (!eline) { /* process logical line unless it's empty */
  -                        *(cpO-1) = NUL;
  -                        if (lline == (pline-1))
  -                            ;//printf("DEBUG: line[%3d] = ***%s***\n", lline, cpL);
  -                        else
  -                            ;//printf("DEBUG: [%3d-%3d] = ***%s***\n", lline, pline-1, cpL);
  -                        {
  -                            char *cp = cpL;
  -                            char *option;
  -                            char *value;
  -                            char *cpNew;
  -                            argz_t Newarg;
  -
  -                            Newarg.as = 0;
  -                            Newarg.az = NULL;
  -                            if ((option = str_token(&cp, " \t", "\"'", "#", STR_STRIPQUOTES|STR_BACKSLASHESC)) == NULL)
  -                                //printf("DEBUG: no command - comment only\n")
  -                                ;/* don't care about comments */
  -                            else {
  -                                //printf("DEBUG:    option = ***%s***\n", option);
  -                                if (argv == NULL) {
  -                                    if ((argv = (char **)malloc(   (   1 + 1) * sizeof(char **))) == NULL)
  -                                        return OPTION_ERR_MEM;
  -                                    argc = 0;
  -                                    argv[argc++] = "include";
  -                                    argv[argc] = NULL;
  -                                }
  -
  -                                if ((cpNew = (char *)malloc(2 + strlen(option) + 1)) == NULL)
  -                                    return OPTION_ERR_MEM;
  -                                cpNew[0]=NUL;
  -                                strcat(cpNew, "--");
  -                                strcat(cpNew, option);
  -                                if ((argv = (char **)realloc(argv, (argc + 1) * sizeof(char **))) == NULL)
  -                                    return OPTION_ERR_MEM;
  -                                argv[argc++] = cpNew;
  -                                argv[argc] = NULL;
  -
  -                                if ((value = str_token(&cp, " \t", "\"'", "#", STR_STRIPQUOTES|STR_BACKSLASHESC)) == NULL)
  -                                    ;//printf("DEBUG: no value - section\n");
  -                                else {
  -                                    while(isspace((int)*value)) value++;
  -                                    //printf("DEBUG:     value = ***%s***\n", value);
  -                                    if ((cpNew = strdup(value)) == NULL)
  -                                        return OPTION_ERR_MEM;
  -                                    if ((argv = (char **)realloc(argv, (argc + 1) * sizeof(char **))) == NULL)
  -                                        return OPTION_ERR_MEM;
  -                                    argv[argc++] = cpNew;
  -                                    argv[argc] = NULL;
  -                                }
  -                            }
  -                        }
  -                    }
  -                    cpL = cpO;
  -                    lline = pline;
  -                    eline = TRUE;
  -                }
  -            }
  -            p = c;
  -        }
  -    }
  -    return option_parse_internal(o, argc, argv);
  -}
  -
  -lmtp2nntp_option_rc_t option_parse(lmtp2nntp_option_t *o, int argc, char **argv)
  -{
  -    lmtp2nntp_option_rc_t rc;
  -    //printf("DEBUG: enter option_parse(%.8lx, %d, %.8lx)\n", (long)o, argc, (long)argv);
  -
  -    if (o == NULL)
  -        return OPTION_ERR_ARG;
  -
  -    (void)option_register(o, "childsmax",          'C', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "childsmax" );
  -    (void)option_register(o, "daemonize",          'D', OPT_FLAG,   &stdsyntax, NULL,    "foo", NULL );
  -    (void)option_register(o, "kill",               'K', OPT_FLAG,   &stdsyntax, NULL,    "foo", NULL );
  -    (void)option_register(o, "pidfile",            'P', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "pidfile" );
  -    (void)option_register(o, "veryverbose",        'V', OPT_FLAG,   &stdsyntax, NULL,    "foo", NULL );
  -    (void)option_register(o, "acl",                'a', OPT_MULTI,  &stdsyntax, "m/.*/", "foo", "addr[/mask]" );
  -    (void)option_register(o, "bind",               'b', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "addr[:port]|-|path[:perms]" );
  -    (void)option_register(o, "client",             'c', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "addr[:port]" );
  -    (void)option_register(o, "destination",        'd', OPT_MULTI,  &stdsyntax, "m/.*/", "foo", "addr[:port]" );
  -    (void)option_register(o, "groupmode",          'g', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "groupmode" );
  -    (void)option_register(o, "headervalue",        'h', OPT_MULTI,  &stdsyntax, "m/.*/", "foo", "header: value" );
  -    (void)option_register(o, "include",            'i', OPT_MULTI,  &includeit, "m/.*/", "foo", "configfile" );
  -    (void)option_register(o, "size",               's', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "bytes" );
  -    (void)option_register(o, "timeoutlmtpaccept",  NUL, OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "sec" );
  -    (void)option_register(o, "timeoutlmtpread",    NUL, OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "sec" );
  -    (void)option_register(o, "timeoutlmtpwrite",   NUL, OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "sec" );
  -    (void)option_register(o, "timeoutnntpconnect", NUL, OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "sec" );
  -    (void)option_register(o, "timeoutnntpread",    NUL, OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "sec" );
  -    (void)option_register(o, "timeoutnntpwrite",   NUL, OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "sec" );
  -    (void)option_register(o, "mailfrom",           'm', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "regex" );
  -    (void)option_register(o, "nodename",           'n', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "nodename" );
  -    (void)option_register(o, "operationmode",      'o', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "post|feed" );
  -    (void)option_register(o, "l2spec",             'l', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "spec" );
  -    (void)option_register(o, "uid",                'u', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "number|name" );
  -    (void)option_register(o, "restrictheader",     'r', OPT_MULTI,  &stdsyntax, "m/.*/", "foo", "regex" );
  -    (void)option_register(o, "newsgroup",          NUL, OPT_MULTI,  &stdsyntax, "m/.*/", "foo", "newsgroup");
  -
  -#if 0
  -    {
  -        int i;
  -
  -        for (i=0; i<26; i++) {
  -            printf("DEBUG: o->pt[%3d].longName   = %s   \n", i,       o->pt[i].longName  );
  -            printf("DEBUG: o->pt[%3d].shortName  = %c   \n", i,       o->pt[i].shortName );
  -            printf("DEBUG: o->pt[%3d].argInfo    = %d   \n", i,       o->pt[i].argInfo   );
  -            printf("DEBUG: o->pt[%3d].arg        = %.8lx\n", i, (long)o->pt[i].arg       );
  -            printf("DEBUG: o->pt[%3d].val        = %d   \n", i,       o->pt[i].val       );
  -            printf("DEBUG: o->pt[%3d].descrip    = %s   \n", i,       o->pt[i].descrip   );
  -            printf("DEBUG: o->pt[%3d].argDescrip = %s   \n", i,       o->pt[i].argDescrip);
  -        }
  -    }
  -#endif
  -
  -    //val_apply(o->vo, "", 9, dumper, "all" );
  -    rc = option_parse_internal(o, argc, argv);
  -    val_apply(o->vo, "", 9, dumper, "all" );
  -    return rc;
  -}
  -
  -lmtp2nntp_option_rc_t option_destroy(lmtp2nntp_option_t *o)
  -{
  -    optionconfig_t *oc;
  -    int i;
  -
  -    //printf("DEBUG: option_destroy %.8lx\n", (long)o);
  -
  -    if (o == NULL)
  -        return OPTION_ERR_ARG;
  -
  -    oc = o->first;
  -    while (oc != NULL) {
  -        if (oc->type == OPT_SINGLE && oc->data.s != NULL)
  -            free(oc->data.s);
  -        if (oc->type == OPT_MULTI  && oc->data.m != NULL) {
  -            for (i = 0; i < oc->ndata; i++)
  -                if (oc->data.m[i] == NULL)
  -                    break;
  -                else
  -                    free(oc->data.m[i]);
  -            free(oc->data.m);
  -        }
  -        oc = oc->next;
  -    }
  -    if (o->vo != NULL)
  -        val_destroy(o->vo);
  -    free(o);
  -
  -    return OPTION_OK;
  +    return;
   }
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.h
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 lmtp2nntp_config.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.h	22 Jan 2002 16:09:47 -0000	1.5
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.h	24 Jan 2002 12:04:46 -0000	1.6
  @@ -21,67 +21,11 @@
   **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
   **  USA, or contact the OSSP project <ossp@ossp.org>.
   **
  -**  FIXME lmtp2nntp_option.h: LMTP to NNTP configuration parsing
  +**  lmtp2nntp_config.h: config handling
   */
   
   #include "lmtp2nntp_global.h"
  -#include "val.h"
  -
  -struct optionconfig_s;
  -typedef struct optionconfig_s optionconfig_t;
  -
  -typedef struct {
  -    int                 childsmax;
  -    int                 daemonize;
  -    int                 kill;
  -    char               *pidfile;
  -    argz_t              acl;
  -    char               *bind;
  -    char               *client;
  -    argz_t              destination;
  -    char               *groupmode;
  -    argz_t              headervalue;
  -    argz_t              include;
  -    char               *size;
  -    int                *timeoutlmtpaccept;
  -    int                *timeoutlmtpread;
  -    int                *timeoutlmtpwrite;
  -    int                *timeoutnntpconnect;
  -    int                *timeoutnntpread;
  -    int                *timeoutnntpwrite;
  -    char               *mailfrom;
  -    char               *nodename;
  -    char               *operationmode;
  -    char               *l2spec;
  -    char               *uid;
  -    argz_t              restrictheader;
  -    argz_t              newsgroup;
  -                /*FIXME above*/
  -    optionconfig_t     *first;
  -    optionconfig_t     *last;
  -    val_t              *vo;     /* val_t for all options */
  -    int                 pi;     /* popt index to next record */
  -    int                 pn;     /* popt number of available records */
  -    struct popt_option *pt;     /* popt table */
  -
  -} lmtp2nntp_option_t;
  -
  -typedef enum {
  -    OPTION_OK,
  -    OPTION_ERR_ARG, /* invalid args passed into function */
  -    OPTION_ERR_USE, /* invalid usage, bad data passed into function */
  -    OPTION_ERR_MEM, /* out of memory */
  -    OPTION_ERR_VAL  /* libval failed */
  -} lmtp2nntp_option_rc_t;
  -
  -typedef enum {
  -    OPT_FLAG,
  -    OPT_SINGLE,
  -    OPT_MULTI
  -} optiontype_t;
  -
  -typedef lmtp2nntp_option_rc_t (optionloop_cb_t)(optionconfig_t *oc, char *arg, char *cbctx);
  -lmtp2nntp_option_rc_t option_create  (lmtp2nntp_option_t **);
  -lmtp2nntp_option_rc_t option_register(lmtp2nntp_option_t *, char *, char, optiontype_t, optionloop_cb_t *, char *, char *, char *);
  -lmtp2nntp_option_rc_t option_parse   (lmtp2nntp_option_t *, int, char **);
  -lmtp2nntp_option_rc_t option_destroy (lmtp2nntp_option_t *);
  +#include "fixme.h"
  +//#include "val.h"
  +//void config_context(lmtp2nntp_t *);
  +void config_context(lmtp2nntp_t *);
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ============================================================
  $ cvs update -p -r1.1 lmtp2nntp_option.c
  /*
  **  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  **  mailer which forwards mails as Usenet news articles via NNTP.
  **  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  **
  **  This program is free software; you can redistribute it and/or
  **  modify it under the terms of the GNU General Public  License
  **  as published by the Free Software Foundation; either version
  **  2.0 of the License, or (at your option) any later version.
  **
  **  This program is distributed in the hope that it will be useful,
  **  but WITHOUT ANY WARRANTY; without even the implied warranty of
  **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  **  General Public License for more details.
  **
  **  You should have received a copy of the GNU General Public License
  **  along with this file; if not, write to the Free Software
  **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  **  USA, or contact the OSSP project <ossp@ossp.org>.
  **
  **  lmtp2nntp_option.h: option parsing
  */
  
  #include <stdlib.h>
  #include <stdio.h>
  #include <sys/stat.h>
  
  /* third party (included) */
  #include "lmtp2nntp_argz.h"
  #include "lmtp2nntp_popt.h"
  
  /* third party (linked in) */
  #include <str.h>
  #include <val.h>
  
  /* library version check (compile-time) */
  #define STR_VERSION_HEX_REQ 0x009206
  #define STR_VERSION_STR_REQ "0.9.6"
  #ifdef STR_VERSION_HEX
  #if STR_VERSION_HEX < STR_VERSION_HEX_REQ
  #error "require a newer version of OSSP Str"
  #endif
  #endif
  
  /* own headers */
  #include "lmtp2nntp_global.h"
  #ifdef HAVE_CONFIG_H
  #include "config.h"
  #endif
  #if defined(HAVE_DMALLOC_H) && defined(DMALLOC)
  #include "dmalloc.h"
  #endif
  #include "lmtp2nntp_option.h"
  #include "lmtp2nntp_config.h"
  #include "lmtp2nntp_lmtp.h"
  #include "lmtp2nntp_nntp.h"
  #include "lmtp2nntp_msg.h"
  #define _LMTP2NNTP_VERSION_C_AS_HEADER_
  #include "lmtp2nntp_version.c"
  #undef  _LMTP2NNTP_VERSION_C_AS_HEADER_
  
  #ifndef FALSE
  #define FALSE (1 != 1)
  #endif
  #ifndef TRUE
  #define TRUE (!FALSE)
  #endif
  
  #ifndef NUL
  #define NUL '\0'
  #endif
  
  static void die(char *msg)
  {
      printf("ERROR: %s\n", msg);
      exit(-1);
  }
  
  struct optionconfig_s {
      optionconfig_t *next;               /* cleanup chain for destroy */
      lmtp2nntp_option_t *parent;         /* include needs access to parent */
                      /**/
      char               *longname;       /* the long name (optional if shortname given) */
      char                shortname;      /* the short name (optional if longname given) */
      char               *descrip;        /* description for autohelp */
      char               *argdescrip;     /* argument description for autohelp */
      optiontype_t        type;           /* OPT_FLAG, OPT_SINGLE, OPT_MULTI */
      optionloop_cb_t    *cb;             /* callback for first iteration - syntax check and include */
      void               *cbctx;          /* context for pass1 */
      val_t              *val;            /* val we are registered under */
                      /**/
      int                 number;         /* number of this option for popt */
      struct {                             /* option data as read from configuration */
          int f;                          /* OPT_FLAG */
          void *foo1, *foo2, *foo3, *foo4, *foo5, *foo6, *foo7, *foo8, *foo9; 
          char *s;                        /* OPT_SINGLE */
          void *bar1, *bar2, *bar3, *bar4, *bar5, *bar6, *bar7, *bar8, *bar9; 
          char **m;                       /* OPT_MULTI */
      } data;
      int ndata;
  };
  
  static val_rc_t dumper(void *ctx, const char *name, int type, const char *desc, void *data)
  {
      optionconfig_t *oc;
      int i;
  
      if (type != VAL_TYPE_PTR)
          return VAL_OK;
  
      oc = (optionconfig_t *)data;
  
      switch (oc->type) {
          case OPT_FLAG:
              printf("DEBUG: <%5s>, name=<%20s>, OPT_FLAG,   desc=<%20s>, data@%.8lx->[%d]%d\n",     (char *)ctx, name, desc, (long)oc, oc->ndata, oc->data.f); break;
          case OPT_SINGLE:
              printf("DEBUG: <%5s>, name=<%20s>, OPT_SINGLE, desc=<%20s>, data@%.8lx->[%d]\"%s\"\n", (char *)ctx, name, desc, (long)oc, oc->ndata, oc->data.s == NULL ? "NULL" : oc->data.s);
              break;
          case OPT_MULTI:
              printf("DEBUG: <%5s>, name=<%20s>, OPT_MULTI,  desc=<%20s>, data@%.8lx->[%d]%.8lx\n",  (char *)ctx, name, desc, (long)oc, oc->ndata, (long)oc->data.m);
              for (i = 0; i < oc->ndata; i++) {
  #if 0
                  {
                      int j;
                      printf("DEBUG: ");
                      for (j=0; j<8; j++) printf("%.2x ", (unsigned char)oc->data.m[i][j]);
                      printf(" ");
                      for (j=0; j<8; j++) printf("%c", isprint(oc->data.m[i][j]) ? oc->data.m[i][j] : '.');
                      printf(" ");
                  }
  #endif
                  printf("DEBUG: [%3d] %.8lx \"%s\"\n", i, (long)oc->data.m[i], oc->data.m[i]);
              }
              break;
          default:
              break;
      }
      return VAL_OK;
  }
  //lmtp2nntp_option_rc_t option_find(lmtp2nntp_option_t *o, int number, optionconfig_t **ocp);
  static lmtp2nntp_option_rc_t option_find(lmtp2nntp_option_t *o, int number, optionconfig_t **ocp)
  {
      lmtp2nntp_option_rc_t rc = VAL_OK;
  
      if (o == NULL || ocp == NULL)
          return OPTION_ERR_ARG;
  
      *ocp = o->first;
      while (*ocp != NULL && (*ocp)->number != number)
          *ocp = (*ocp)->next;
  
      return rc;
  }
  
  
  lmtp2nntp_option_rc_t option_register(lmtp2nntp_option_t *o, char *longname, char shortname, optiontype_t type, optionloop_cb_t *cb, char *cbctx, char *descrip, char *argdescrip)
  {
      lmtp2nntp_option_rc_t rc = VAL_OK;
      optionconfig_t *oc;
      
      //printf("DEBUG: enter option_register(%.8lx, \"%s\", '%c', %d, %.8lx, %.8lx, \"%s\", \"%s\")\n", (long)o, longname, shortname, type, (long)cb, (long)cbctx, descrip, argdescrip);
  
      if (o == NULL || longname == NULL)
          return OPTION_ERR_ARG;
  
      /* create a optionconfig_t structure */
      if ((oc = (optionconfig_t *)malloc(sizeof(optionconfig_t))) == NULL)
          return OPTION_ERR_MEM;
      //printf("DEBUG: optionconfig_t structure malloc'ed\n");
      oc->next         = NULL;
      oc->parent       = o;
      oc->longname     = strdup(longname);
      oc->shortname    = shortname;
      oc->descrip      = descrip == NULL ? NULL : strdup(descrip);
      oc->argdescrip   = argdescrip == NULL ? NULL : strdup(argdescrip);
      oc->type         = type;
      oc->cb           = cb;
      oc->cbctx        = cbctx;
      oc->val          = o->vo;
      oc->number       = o->pi + 1; /* 0 is a reserved val in popt, so offset 1 */
      oc->data.f       = 0;
      oc->data.s       = NULL; /* just in case a pointer is larger than int */
      oc->data.m       = NULL;
      oc->ndata        = 0;
      if (   (                      oc->longname   == NULL)
          || (descrip    != NULL && oc->descrip    == NULL)
          || (argdescrip != NULL && oc->argdescrip == NULL)
            )
          CU(OPTION_ERR_MEM);
  
      //printf("DEBUG: optionconfig_t structure created\n");
  
      /* feed lib_val */
      if (val_reg(oc->val, oc->longname, VAL_TYPE_PTR, oc->descrip, oc) != VAL_OK)
          CU(OPTION_ERR_USE);
  
      //printf("DEBUG: val_reg'ed\n");
  
      /* feed lib_popt */
      //printf("DEBUG: o->pi=%d, o->pn=%d\n", o->pi, o->pn);
      if (o->pi >= (o->pn-2)) { /* correction by two here, in malloc and realloc is for AUTOHELP and TABLEEND */
          if (o->pt == NULL) {
              //printf("DEBUG: malloc\n");
              o->pt = (struct popt_option *)malloc(                (1 + 2) * sizeof(struct popt_option));
              o->pn = 1;
          }
          else {
              //printf("DEBUG: realloc\n");
              o->pt = (struct popt_option *)realloc(o->pt, (o->pn * 2 + 2) * sizeof(struct popt_option));
              o->pn = o->pn * 2;
          }
      }
      if (o->pt == NULL)
          CU(OPTION_ERR_MEM);
      o->pt[o->pi].longName   = oc->longname;
      o->pt[o->pi].shortName  = oc->shortname;
      o->pt[o->pi].argInfo    = oc->type == OPT_FLAG ? POPT_ARG_NONE : POPT_ARG_STRING;
      o->pt[o->pi].arg        = NULL;
      o->pt[o->pi].val        = oc->number;
      o->pt[o->pi].descrip    = oc->descrip;
      o->pt[o->pi].argDescrip = oc->argdescrip;
  
      /* append POPT_AUTOHELP */
      o->pt[o->pi+1].longName   = NULL;
      o->pt[o->pi+1].shortName  = '\0';
      o->pt[o->pi+1].argInfo    = POPT_ARG_INCLUDE_TABLE;
      o->pt[o->pi+1].arg        = popt_helpoptions;
      o->pt[o->pi+1].val        = 0;
      o->pt[o->pi+1].descrip    = "Help options:";
      o->pt[o->pi+1].argDescrip = NULL;
  
      /* append POPT_TABLEEND */
      o->pt[o->pi+2].longName   = NULL;
      o->pt[o->pi+2].shortName  = '\0';
      o->pt[o->pi+2].argInfo    = 0;
      o->pt[o->pi+2].arg        = 0;
      o->pt[o->pi+2].val        = 0;
      o->pt[o->pi+2].descrip    = NULL;
      o->pt[o->pi+2].argDescrip = NULL;
      o->pi++;
      //printf("DEBUG: popt'ed\n");
  
      /* link in this new optionconfig_t structure */
      if (o->first == NULL) {
          o->first = oc;
          o->last  = oc;
      }
      else {
          o->last->next = oc; 
          o->last       = oc;
      }
      //printf("DEBUG: linked\n");
  
      return rc;
  
      CUS:
      if (oc != NULL) {
          if (oc->argdescrip != NULL) free(oc->argdescrip);
          if (oc->descrip    != NULL) free(oc->descrip);
          if (oc->longname   != NULL) free(oc->longname);
          free(oc);
      }
      return rc;
  }
  
  lmtp2nntp_option_rc_t option_create(lmtp2nntp_option_t **op, val_t *parent)
  {
      //printf("DEBUG: enter option_create(%.8lx)\n", (long)op);
  
      if (op == NULL)
          return OPTION_ERR_ARG;
  
      if ((*op = (lmtp2nntp_option_t *)malloc(sizeof(lmtp2nntp_option_t))) == NULL)
          return OPTION_ERR_MEM;
      (*op)->childsmax = 0;
      (*op)->daemonize = 0;
      (*op)->kill = 0;
      (*op)->pidfile = 0;
      (*op)->acl.as = 0;
      (*op)->acl.az = NULL;
      (*op)->bind = NULL;
      (*op)->client = NULL;
      (*op)->destination.as = 0;
      (*op)->destination.az = NULL;
      (*op)->groupmode = NULL;
      (*op)->headervalue.as = 0;
      (*op)->headervalue.az = NULL;
      (*op)->include.as = 0;
      (*op)->include.az = NULL;
      (*op)->size = 0;
      (*op)->timeoutlmtpaccept = 0;
      (*op)->timeoutlmtpread = 0;
      (*op)->timeoutlmtpwrite = 0;
      (*op)->timeoutnntpconnect = 0;
      (*op)->timeoutnntpread = 0;
      (*op)->timeoutnntpwrite = 0;
      (*op)->mailfrom = NULL;
      (*op)->nodename = NULL;
      (*op)->operationmode = NULL;
      (*op)->l2spec = NULL;
      (*op)->uid = NULL;
      (*op)->restrictheader.as = 0;
      (*op)->restrictheader.az = NULL;
      (*op)->newsgroup.as = 0;
      (*op)->newsgroup.az = NULL;
                      /**/
      (*op)->first = NULL;
      (*op)->last = NULL;
      (*op)->vo = NULL;
      (*op)->pn = 0;
      (*op)->pi = 0;
      (*op)->pt = NULL;
  
      if (val_create(&((*op)->vo)) != VAL_OK) {
          free(*op);
          return OPTION_ERR_VAL;
      }
      if (val_reg(parent, "option", VAL_TYPE_VAL, "option", (void *)&((*op)->vo)) != VAL_OK) {
          free(*op);
          return OPTION_ERR_VAL;
      }
      return OPTION_OK;
  }
  
  static lmtp2nntp_option_rc_t option_parse_internal(lmtp2nntp_option_t *o, int argc, char **argv)
  {
      int i;
      char *cp;
      optionconfig_t *ocp;
      popt_context poptCon;   /* context for parsing command-line options */
  
  #if 0
      {
          int i; 
      
          for (i=0; i<argc; i++)
              printf("DEBUG: argv[%3d] = ***%s***\n", i, argv[i]);
      }
  #endif
  
      poptCon = popt_getcontext(NULL, argc, (const char **)argv, o->pt, 0);
      popt_setotheroptionhelp(poptCon, "[OPTIONS]* [newsgroup ...]");
      //printf("DEBUG: argc=%d\n", argc);
      if (argc < 2) {
          popt_printusage(poptCon, stderr, 0);
          exit(1);
      }
      while ((i = popt_getnextopt(poptCon)) >= 0) {
          (void)option_find(o, i, &ocp);
          //printf("DEBUG: ocp->type=%d\n", ocp->type);
          if (ocp->cb != NULL)
              ocp->cb(ocp, cp = (ocp->type == OPT_FLAG ? NULL : (char *)popt_getoptarg(poptCon)), ocp->cbctx);
          //printf("DEBUG: popt_getnextopt returned  %d \"%s\", \"%s\"\n", i-1, o->pt[i-1].longName, ocp->longname);
          //printf("DEBUG: popt_getoptarg  returned  \"%s\"\n", cp);
      }
      //printf("DEBUG: current popt error is \"%s\"(%d)\n", popt_strerror(i), i);
      //printf("DEBUG: ----\n");
  
      {
          int largc;
          char **largv;
          char *cpNew;
  
          if ((largv = (char **)malloc((1 + 1) * sizeof(char **))) == NULL)
              return OPTION_ERR_MEM;
          largc = 0;
          largv[largc++] = "leftover";
          largv[largc] = NULL;
          while ((cp = (char *)popt_getarg(poptCon)) != NULL) {
              //printf("DEBUG: popt_getarg returned \"%s\"\n", cp);
              if ((largv = (char **)realloc(largv, (largc + 2) * sizeof(char **))) == NULL)
                  return OPTION_ERR_MEM;
              largv[largc++] = "--newsgroup";
              largv[largc] = NULL;
              if ((cpNew = strdup(cp)) == NULL)
                  return OPTION_ERR_MEM;
              //printf("DEBUG: cpNew = \"%s\"\n", cpNew);
              largv[largc++] = cpNew;
              largv[largc] = NULL;
              //printf("DEBUG: largc = \"%d\"\n", largc);
  #if 0
              for (i=0; i<largc; i++)
                  printf("DEBUG: largv[%d] = \"%s\"\n", i, largv[i]);
  #endif
          }
          if (largc > 1)
              option_parse_internal(o, largc, largv);
      }
      //printf("DEBUG: current popt error is \"%s\"(%d)\n", popt_strerror(i), i);
      popt_freecontext(poptCon);
      return OPTION_OK;
  }
  
  static lmtp2nntp_option_rc_t stdsyntax(optionconfig_t *oc, char *arg, char *cbctx)
  {
      printf("DEBUG: enter stdsyntax %.8lx, \"%s\", \"%s\"\n", (long)oc, arg, cbctx);
  
      //printf("DEBUG: oc->type=%d\n", oc->type);
      switch (oc->type) {
          case OPT_FLAG:
              //printf("DEBUG: flag   %20s = %s should match %s\n", oc->longname, arg, cbctx);
              if (arg != NULL || cbctx != NULL)
                  return OPTION_ERR_ARG;
              if (oc->ndata >= 1)
                  return OPTION_ERR_USE;
              oc->data.f = 1;
              oc->ndata = 1;
              break;
          case OPT_SINGLE:
              //printf("DEBUG: single %20s = %s should match %s\n", oc->longname, arg, cbctx);
              if (arg == NULL)
                  return OPTION_ERR_ARG;
              /* use this if repeated overwriting definitions are not allowed
               *  if (oc->ndata >= 1 || oc->data.s != NULL)
               *      return OPTION_ERR_USE;
               */
              if (cbctx != NULL)
                  if (str_parse(arg, cbctx) <= 0) {
                      //printf("DEBUG: \"%s\" does NOT match \"%s\"\n", arg, cbctx);
                      return OPTION_ERR_USE;
                  }
              //printf("DEBUG: \"%s\" does match \"%s\"\n", arg, cbctx);
              if ((oc->data.s = strdup(arg)) == NULL)
                      return OPTION_ERR_MEM;
              oc->ndata = 1;
              break;
          case OPT_MULTI:
              //printf("DEBUG: multi  %20s = %s should match %s\n", oc->longname, arg, cbctx);
              if (arg == NULL)
                  return OPTION_ERR_ARG;
              if (oc->ndata >= 1 && oc->data.m == NULL)
                      return OPTION_ERR_USE;
              if (cbctx != NULL)
                  if (str_parse(arg, cbctx) <= 0) {
                      //printf("DEBUG: \"%s\" does NOT match \"%s\"\n", arg, cbctx);
                      return OPTION_ERR_USE;
                  }
              //printf("DEBUG: \"%s\" does match \"%s\"\n", arg, cbctx);
              /* malloc/realloc                                 existing + this new + terminating NULL */
              if (oc->data.m == NULL) {
                  //printf("DEBUG: before  malloc, oc->data.m = %.8lx - ", (long)oc->data.m);
                  //printf("DEBUG: requesting %d bytes\n",         (        0 + 1 + 1) * sizeof(char **));
                  if ((oc->data.m = (char **)malloc(             (        0 + 1 + 1) * sizeof(char **))) == NULL)
                      return OPTION_ERR_MEM;
                  //printf("DEBUG: after   malloc, oc->data.m = %.8lx\n", (long)oc->data.m);
              }
              else {
                  //printf("DEBUG: before realloc, oc->data.m = %.8lx\n", (long)oc->data.m);
                  //printf("DEBUG: requesting %d bytes\n",         (oc->ndata + 1 + 1) * sizeof(char **));
                  if ((oc->data.m = (char **)realloc(oc->data.m, (oc->ndata + 1 + 1) * sizeof(char **))) == NULL)
                      return OPTION_ERR_MEM;
                  //printf("DEBUG: after  realloc, oc->data.m = %.8lx\n", (long)oc->data.m);
              }
              if ((oc->data.m[oc->ndata] = strdup(arg)) == NULL)
                      return OPTION_ERR_MEM;
              oc->ndata++;
              oc->data.m[oc->ndata] = NULL;
  #if 0
              {
                  int i;
                  printf("DEBUG: oc->ndata=%d\n", oc->ndata);
                  for (i=0; i<=oc->ndata; i++)
                      printf("DEBUG: oc->data[%3d] at %.8lx points to  %.8lx = %s\n", i, (long)&oc->data.m[i], (long)oc->data.m[i], oc->data.m[i]);
              }
  #endif
              break;
          default:
              return OPTION_ERR_ARG;
              break;
      }
      return OPTION_OK;
  }
  
  static lmtp2nntp_option_rc_t includeit(optionconfig_t *oc, char *arg, char *cbctx)
  {
      lmtp2nntp_option_t *o;
      char *cpBuf = NULL;
      int argc = 0;
      char **argv = NULL;
  
      //printf("DEBUG: enter includeit %.8lx, \"%s\", \"%s\"\n", (long)oc, arg, cbctx);
  
      if ((o = oc->parent) == NULL)
          return OPTION_ERR_USE;
  
      stdsyntax(oc, arg, cbctx);
      //printf("DEBUG: *** 1 *** file going to be read in now\n");
      {
          const char *filename = arg;
          struct stat sb;
          int fd;
  
          if (stat(filename, &sb) == -1) die("stat");
          if ((cpBuf = (char *)malloc((size_t)sb.st_size + 1)) == NULL) die("malloc");
          if ((fd = open(filename, O_RDONLY)) == -1) die("open");
          if (read(fd, (void *)cpBuf, (size_t)sb.st_size) != (ssize_t)sb.st_size) die("read");
          cpBuf[(int)sb.st_size] = '\0';
          if (close(fd) == -1)
              die("close");
      }
      //printf("DEBUG: *** 2 *** file as it was just read in ***\n%s***\n", cpBuf);
  
      {
          char *cpI;  /* pointer to next character to be read */
          char *cpO;  /* pointer to next character to be written. Used for eliminating
                         backslash+newline at a line continuation */
          char *cpL;  /* pointer to start of line */
          int pline;  /* current physical (disregarding line continuation) line number */
          int lline;  /* current logical lines first physical line number */
          int eline;  /* flag signaling empty or just whitespace-filled line */
          char c;     /* current character */
          char p;     /* previous character */
          int eof;    /* flag signaling end of file detected */
  
          cpI = cpBuf;
          cpO = cpBuf;
          eof = FALSE;
          pline = 1;
          p = NUL;
  
          cpL = cpO;
          lline = pline;
          eline = TRUE;
          while(!eof) {
              c = *cpI++;
              *cpO++ = c;
              if (c == NUL)
                  eof = TRUE;
              else
                  if (!isspace(c))
                      eline = FALSE;
              if (eof || (c == '\n')) {
                  pline++;
                  if (!eof && (p == '\\')) { /* line continuation situation */
                      cpO-=2; /* need to remove both backslash+newline */
                  }
                  else {
                      if (!eline) { /* process logical line unless it's empty */
                          *(cpO-1) = NUL;
                          if (lline == (pline-1))
                              ;//printf("DEBUG: line[%3d] = ***%s***\n", lline, cpL);
                          else
                              ;//printf("DEBUG: [%3d-%3d] = ***%s***\n", lline, pline-1, cpL);
                          {
                              char *cp = cpL;
                              char *option;
                              char *value;
                              char *cpNew;
                              argz_t Newarg;
  
                              Newarg.as = 0;
                              Newarg.az = NULL;
                              if ((option = str_token(&cp, " \t", "\"'", "#", STR_STRIPQUOTES|STR_BACKSLASHESC)) == NULL)
                                  //printf("DEBUG: no command - comment only\n")
                                  ;/* don't care about comments */
                              else {
                                  //printf("DEBUG:    option = ***%s***\n", option);
                                  if (argv == NULL) {
                                      if ((argv = (char **)malloc(   (   1 + 1) * sizeof(char **))) == NULL)
                                          return OPTION_ERR_MEM;
                                      argc = 0;
                                      argv[argc++] = "include";
                                      argv[argc] = NULL;
                                  }
  
                                  if ((cpNew = (char *)malloc(2 + strlen(option) + 1)) == NULL)
                                      return OPTION_ERR_MEM;
                                  cpNew[0]=NUL;
                                  strcat(cpNew, "--");
                                  strcat(cpNew, option);
                                  if ((argv = (char **)realloc(argv, (argc + 1) * sizeof(char **))) == NULL)
                                      return OPTION_ERR_MEM;
                                  argv[argc++] = cpNew;
                                  argv[argc] = NULL;
  
                                  if ((value = str_token(&cp, " \t", "\"'", "#", STR_STRIPQUOTES|STR_BACKSLASHESC)) == NULL)
                                      ;//printf("DEBUG: no value - section\n");
                                  else {
                                      while(isspace((int)*value)) value++;
                                      //printf("DEBUG:     value = ***%s***\n", value);
                                      if ((cpNew = strdup(value)) == NULL)
                                          return OPTION_ERR_MEM;
                                      if ((argv = (char **)realloc(argv, (argc + 1) * sizeof(char **))) == NULL)
                                          return OPTION_ERR_MEM;
                                      argv[argc++] = cpNew;
                                      argv[argc] = NULL;
                                  }
                              }
                          }
                      }
                      cpL = cpO;
                      lline = pline;
                      eline = TRUE;
                  }
              }
              p = c;
          }
      }
      return option_parse_internal(o, argc, argv);
  }
  
  lmtp2nntp_option_rc_t option_parse(lmtp2nntp_option_t *o, int argc, char **argv)
  {
      lmtp2nntp_option_rc_t rc;
      //printf("DEBUG: enter option_parse(%.8lx, %d, %.8lx)\n", (long)o, argc, (long)argv);
  
      if (o == NULL)
          return OPTION_ERR_ARG;
  
      (void)option_register(o, "childsmax",          'C', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "childsmax" );
      (void)option_register(o, "daemonize",          'D', OPT_FLAG,   &stdsyntax, NULL,    "foo", NULL );
      (void)option_register(o, "kill",               'K', OPT_FLAG,   &stdsyntax, NULL,    "foo", NULL );
      (void)option_register(o, "pidfile",            'P', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "pidfile" );
      (void)option_register(o, "veryverbose",        'V', OPT_FLAG,   &stdsyntax, NULL,    "foo", NULL );
      (void)option_register(o, "acl",                'a', OPT_MULTI,  &stdsyntax, "m/.*/", "foo", "addr[/mask]" );
      (void)option_register(o, "bind",               'b', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "addr[:port]|-|path[:perms]" );
      (void)option_register(o, "client",             'c', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "addr[:port]" );
      (void)option_register(o, "destination",        'd', OPT_MULTI,  &stdsyntax, "m/.*/", "foo", "addr[:port]" );
      (void)option_register(o, "groupmode",          'g', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "groupmode" );
      (void)option_register(o, "headervalue",        'h', OPT_MULTI,  &stdsyntax, "m/.*/", "foo", "header: value" );
      (void)option_register(o, "include",            'i', OPT_MULTI,  &includeit, "m/.*/", "foo", "configfile" );
      (void)option_register(o, "size",               's', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "bytes" );
      (void)option_register(o, "timeoutlmtpaccept",  NUL, OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "sec" );
      (void)option_register(o, "timeoutlmtpread",    NUL, OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "sec" );
      (void)option_register(o, "timeoutlmtpwrite",   NUL, OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "sec" );
      (void)option_register(o, "timeoutnntpconnect", NUL, OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "sec" );
      (void)option_register(o, "timeoutnntpread",    NUL, OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "sec" );
      (void)option_register(o, "timeoutnntpwrite",   NUL, OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "sec" );
      (void)option_register(o, "mailfrom",           'm', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "regex" );
      (void)option_register(o, "nodename",           'n', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "nodename" );
      (void)option_register(o, "operationmode",      'o', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "post|feed" );
      (void)option_register(o, "l2spec",             'l', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "spec" );
      (void)option_register(o, "uid",                'u', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "number|name" );
      (void)option_register(o, "restrictheader",     'r', OPT_MULTI,  &stdsyntax, "m/.*/", "foo", "regex" );
      (void)option_register(o, "newsgroup",          NUL, OPT_MULTI,  &stdsyntax, "m/.*/", "foo", "newsgroup");
  
  #if 0
      {
          int i;
  
          for (i=0; i<26; i++) {
              printf("DEBUG: o->pt[%3d].longName   = %s   \n", i,       o->pt[i].longName  );
              printf("DEBUG: o->pt[%3d].shortName  = %c   \n", i,       o->pt[i].shortName );
              printf("DEBUG: o->pt[%3d].argInfo    = %d   \n", i,       o->pt[i].argInfo   );
              printf("DEBUG: o->pt[%3d].arg        = %.8lx\n", i, (long)o->pt[i].arg       );
              printf("DEBUG: o->pt[%3d].val        = %d   \n", i,       o->pt[i].val       );
              printf("DEBUG: o->pt[%3d].descrip    = %s   \n", i,       o->pt[i].descrip   );
              printf("DEBUG: o->pt[%3d].argDescrip = %s   \n", i,       o->pt[i].argDescrip);
          }
      }
  #endif
  
      //val_apply(o->vo, "", 9, dumper, "all" );
      rc = option_parse_internal(o, argc, argv);
      val_apply(o->vo, "", 9, dumper, "all" );
      return rc;
  }
  
  lmtp2nntp_option_rc_t option_destroy(lmtp2nntp_option_t *o)
  {
      optionconfig_t *oc;
      int i;
  
      //printf("DEBUG: option_destroy %.8lx\n", (long)o);
  
      if (o == NULL)
          return OPTION_ERR_ARG;
  
      oc = o->first;
      while (oc != NULL) {
          if (oc->type == OPT_SINGLE && oc->data.s != NULL)
              free(oc->data.s);
          if (oc->type == OPT_MULTI  && oc->data.m != NULL) {
              for (i = 0; i < oc->ndata; i++)
                  if (oc->data.m[i] == NULL)
                      break;
                  else
                      free(oc->data.m[i]);
              free(oc->data.m);
          }
          oc = oc->next;
      }
      if (o->vo != NULL)
          val_destroy(o->vo);
      free(o);
  
      return OPTION_OK;
  }
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_option.h
  ============================================================
  $ cvs update -p -r1.1 lmtp2nntp_option.h
  /*
  **  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  **  mailer which forwards mails as Usenet news articles via NNTP.
  **  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  **
  **  This program is free software; you can redistribute it and/or
  **  modify it under the terms of the GNU General Public  License
  **  as published by the Free Software Foundation; either version
  **  2.0 of the License, or (at your option) any later version.
  **
  **  This program is distributed in the hope that it will be useful,
  **  but WITHOUT ANY WARRANTY; without even the implied warranty of
  **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  **  General Public License for more details.
  **
  **  You should have received a copy of the GNU General Public License
  **  along with this file; if not, write to the Free Software
  **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  **  USA, or contact the OSSP project <ossp@ossp.org>.
  **
  **  lmtp2nntp_option.h: option parsing
  */
  
  #include "lmtp2nntp_global.h"
  #include "val.h"
  
  struct optionconfig_s;
  typedef struct optionconfig_s optionconfig_t;
  
  typedef struct {
      int                 childsmax;
      int                 daemonize;
      int                 kill;
      char               *pidfile;
      argz_t              acl;
      char               *bind;
      char               *client;
      argz_t              destination;
      char               *groupmode;
      argz_t              headervalue;
      argz_t              include;
      char               *size;
      int                *timeoutlmtpaccept;
      int                *timeoutlmtpread;
      int                *timeoutlmtpwrite;
      int                *timeoutnntpconnect;
      int                *timeoutnntpread;
      int                *timeoutnntpwrite;
      char               *mailfrom;
      char               *nodename;
      char               *operationmode;
      char               *l2spec;
      char               *uid;
      argz_t              restrictheader;
      argz_t              newsgroup;
                  /*FIXME above*/
      optionconfig_t     *first;
      optionconfig_t     *last;
      val_t              *vo;     /* val_t for all options */
      int                 pi;     /* popt index to next record */
      int                 pn;     /* popt number of available records */
      struct popt_option *pt;     /* popt table */
  
  } lmtp2nntp_option_t;
  
  typedef enum {
      OPTION_OK,
      OPTION_ERR_ARG, /* invalid args passed into function */
      OPTION_ERR_USE, /* invalid usage, bad data passed into function */
      OPTION_ERR_MEM, /* out of memory */
      OPTION_ERR_VAL  /* libval failed */
  } lmtp2nntp_option_rc_t;
  
  typedef enum {
      OPT_FLAG,
      OPT_SINGLE,
      OPT_MULTI
  } optiontype_t;
  
  typedef lmtp2nntp_option_rc_t (optionloop_cb_t)(optionconfig_t *oc, char *arg, char *cbctx);
  lmtp2nntp_option_rc_t option_create  (lmtp2nntp_option_t **, val_t *);
  lmtp2nntp_option_rc_t option_register(lmtp2nntp_option_t *, char *, char, optiontype_t, optionloop_cb_t *, char *, char *, char *);
  lmtp2nntp_option_rc_t option_parse   (lmtp2nntp_option_t *, int, char **);
  lmtp2nntp_option_rc_t option_destroy (lmtp2nntp_option_t *);

From ossp-cvs-owner@ossp.org  Thu Jan 24 13:05:52 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DD2C7764EB; Thu, 24 Jan 2002 13:05:51 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp Makefile.in
Message-Id: <20020124120551.DD2C7764EB@mail.ossp.org>
Date: Thu, 24 Jan 2002 13:05:51 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   24-Jan-2002 13:05:51
  Branch: HEAD                             Handle: 2002012412055100

  Modified files:
    ossp-pkg/lmtp2nntp      Makefile.in

  Log:
    added option

  Summary:
    Revision    Changes     Path
    1.41        +6  -5      ossp-pkg/lmtp2nntp/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.40 -r1.41 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	17 Jan 2002 17:01:55 -0000	1.40
  +++ ossp-pkg/lmtp2nntp/Makefile.in	24 Jan 2002 12:05:51 -0000	1.41
  @@ -44,9 +44,9 @@
   POD2MAN     = pod2man
   
   PROG = lmtp2nntp
  -HDRS = lmtp2nntp_global.h lmtp2nntp_daemon.h lmtp2nntp_lmtp.h lmtp2nntp_nntp.h lmtp2nntp_argz.h lmtp2nntp_shpat.h lmtp2nntp_msg.h lmtp2nntp_popt.h lmtp2nntp_config.h 
  -SRCS = lmtp2nntp_main.c   lmtp2nntp_daemon.c lmtp2nntp_lmtp.c lmtp2nntp_nntp.c lmtp2nntp_argz.c lmtp2nntp_shpat.c lmtp2nntp_msg.c lmtp2nntp_popt.c lmtp2nntp_config.c lmtp2nntp_version.c 
  -OBJS = lmtp2nntp_main.o   lmtp2nntp_daemon.o lmtp2nntp_lmtp.o lmtp2nntp_nntp.o lmtp2nntp_argz.o lmtp2nntp_shpat.o lmtp2nntp_msg.o lmtp2nntp_popt.o lmtp2nntp_config.o lmtp2nntp_version.o
  +HDRS = lmtp2nntp_global.h lmtp2nntp_daemon.h lmtp2nntp_lmtp.h lmtp2nntp_nntp.h lmtp2nntp_argz.h lmtp2nntp_shpat.h lmtp2nntp_msg.h lmtp2nntp_popt.h lmtp2nntp_option.h lmtp2nntp_config.h 
  +SRCS = lmtp2nntp_main.c   lmtp2nntp_daemon.c lmtp2nntp_lmtp.c lmtp2nntp_nntp.c lmtp2nntp_argz.c lmtp2nntp_shpat.c lmtp2nntp_msg.c lmtp2nntp_popt.c lmtp2nntp_option.c lmtp2nntp_config.c lmtp2nntp_version.c 
  +OBJS = lmtp2nntp_main.o   lmtp2nntp_daemon.o lmtp2nntp_lmtp.o lmtp2nntp_nntp.o lmtp2nntp_argz.o lmtp2nntp_shpat.o lmtp2nntp_msg.o lmtp2nntp_popt.o lmtp2nntp_option.o lmtp2nntp_config.o lmtp2nntp_version.o
   
   SUBDIRS = @SUBDIR_STR@ @SUBDIR_L2@ @SUBDIR_SA@ @SUBDIR_VAR@ @SUBDIR_VAL@
   
  @@ -128,12 +128,13 @@
   $(OBJS): Makefile
   
   #   AUTOMATICALLY GENERATED DEPENDENCY LIST - DO NOT EDIT
  -lmtp2nntp_main.o: lmtp2nntp_main.c lmtp2nntp_argz.h lmtp2nntp_shpat.h lmtp2nntp_daemon.h lmtp2nntp_popt.h lmtp2nntp_global.h config.h lmtp2nntp_config.h lmtp2nntp_lmtp.h lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_version.c
  +lmtp2nntp_main.o: lmtp2nntp_main.c lmtp2nntp_argz.h lmtp2nntp_shpat.h lmtp2nntp_daemon.h lmtp2nntp_popt.h lmtp2nntp_global.h config.h lmtp2nntp_option.h lmtp2nntp_config.h lmtp2nntp_lmtp.h lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_version.c
   lmtp2nntp_daemon.o: lmtp2nntp_daemon.c config.h lmtp2nntp_daemon.h
   lmtp2nntp_lmtp.o: lmtp2nntp_lmtp.c lmtp2nntp_lmtp.h config.h
   lmtp2nntp_nntp.o: lmtp2nntp_nntp.c lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_global.h config.h
   lmtp2nntp_argz.o: lmtp2nntp_argz.c lmtp2nntp_argz.h config.h
   lmtp2nntp_shpat.o: lmtp2nntp_shpat.c config.h lmtp2nntp_shpat.h
   lmtp2nntp_msg.o: lmtp2nntp_msg.c lmtp2nntp_msg.h lmtp2nntp_global.h config.h lmtp2nntp_argz.h lmtp2nntp_popt.o: lmtp2nntp_popt.c config.h lmtp2nntp_popt.h
  -lmtp2nntp_config.o: lmtp2nntp_config.c lmtp2nntp_popt.h lmtp2nntp_global.h config.h lmtp2nntp_config.h lmtp2nntp_lmtp.h lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_version.c
  +lmtp2nntp_option.o: lmtp2nntp_option.c lmtp2nntp_argz.h lmtp2nntp_popt.h lmtp2nntp_global.h config.h lmtp2nntp_option.h lmtp2nntp_config.h lmtp2nntp_lmtp.h lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_version.c
  +lmtp2nntp_config.o: lmtp2nntp_config.c
   lmtp2nntp_version.o: lmtp2nntp_version.c lmtp2nntp_version.c

From ossp-cvs-owner@ossp.org  Thu Jan 24 13:07:13 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B40FE764EB; Thu, 24 Jan 2002 13:07:13 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp fixme.h lmtp2nntp_main.c lmtp2nntp_nntp...
Message-Id: <20020124120713.B40FE764EB@mail.ossp.org>
Date: Thu, 24 Jan 2002 13:07:13 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   24-Jan-2002 13:07:13
  Branch: HEAD                             Handle: 2002012412071300

  Added files:
    ossp-pkg/lmtp2nntp      fixme.h
  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_main.c lmtp2nntp_nntp.h

  Log:
    master of the FIXMEs! please read comment in fixme.h

  Summary:
    Revision    Changes     Path
    1.1         +86 -0      ossp-pkg/lmtp2nntp/fixme.h
    1.8         +11 -76     ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
    1.3         +5  -0      ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.h
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/fixme.h
  ============================================================
  $ cvs update -p -r1.1 fixme.h
  
  /*FIXME this structure should not be global! This is a temporary fix to allow
   * code migration from lmtp2nntp_main.c's getopt switch to lmtp2nntp_config.[ch]
   */
  #ifndef __FIXME_H__
  #define __FIXME_H__
  
  #include <val.h>
  #define MAXACLS 32
  #include <sa.h>
  struct acl {
      char      *acl;
      int        not;
      sa_addr_t *saa;
      size_t     prefixlen;
  };
  #define MAXNEWSSERVICES 16
  struct nntp_st;
  typedef struct nntp_st nntp_t;
  #include "lmtp2nntp_nntp.h"
  struct ns {
      char           *h;    /* host */
      char           *p;    /* port */
      sa_addr_t      *saa;  /* socket address abstraction */
      sa_t           *sa;   /* socket abstraction */
      nntp_t         *nntp;
      nntp_rc_t       rc;
      l2_channel_t   *l2;
  };
  struct session {
      int     lhlo_seen;
      char   *lhlo_domain;
  };
  #include <sys/utsname.h>
  typedef struct {
      l2_context_t    ctx;
      val_t          *val;
      char           *progname;
      char           *option_logfile;
      int             option_groupmode;
      int             option_operationmode;
      char           *option_operationmodefakestatus;
      char           *option_operationmodefakedsn;
      int             option_maxmessagesize;
      char           *azHeaderValuePairs;
      size_t          asHeaderValuePairs;
      int             option_timeout_lmtp_accept;
      int             option_timeout_lmtp_read;
      int             option_timeout_lmtp_write;
      int             option_timeout_nntp_connect;
      int             option_timeout_nntp_read;
      int             option_timeout_nntp_write;
      char           *option_mailfrom;
      char           *option_restrictheader;
      unsigned int    option_levelmask;
      char           *option_pidfile;
      int             option_killflag;
      uid_t           option_uid;
      int             option_daemon;
      int             option_aclc;
      struct acl      option_acl[MAXACLS];
      int             option_veryverbose;
      int             option_childsmax;
      int             active_childs;
      l2_env_t       *l2_env;
      l2_channel_t   *l2;
      sa_addr_t      *saaAltio;
      sa_t           *saAltio;
      char           *cpBindh;
      char           *cpBindp;
      sa_addr_t      *saaBind;
      sa_t           *saBind;
      sa_addr_t      *saaIO;
      sa_t           *saIO;
      int             fdIOi;
      int             fdIOo;
      int             nsc;
      struct ns       ns[MAXNEWSSERVICES];
      char           *azGroupargs;
      size_t          asGroupargs;
      struct          session session;
      msg_t          *msg;
      struct utsname  uname;
  } lmtp2nntp_t;
  
  #endif /* __FIXME_H__ */
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	22 Jan 2002 16:09:47 -0000	1.7
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	24 Jan 2002 12:07:13 -0000	1.8
  @@ -73,10 +73,12 @@
   #if defined(HAVE_DMALLOC_H) && defined(DMALLOC)
   #include "dmalloc.h"
   #endif
  +#include "lmtp2nntp_option.h"
   #include "lmtp2nntp_config.h"
   #include "lmtp2nntp_lmtp.h"
   #include "lmtp2nntp_nntp.h"
   #include "lmtp2nntp_msg.h"
  +#include "fixme.h"
   #include "sa.h"
   #define _LMTP2NNTP_VERSION_C_AS_HEADER_
   #include "lmtp2nntp_version.c"
  @@ -97,8 +99,6 @@
   #define ERR_DELIVERY -2
   
   #define STDSTRLEN 512
  -#define MAXNEWSSERVICES 16
  -#define MAXACLS 32
   
   static lmtp_rc_t lmtp_cb_lhlo(lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *ctx);
   static lmtp_rc_t lmtp_cb_mail(lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *ctx);
  @@ -111,83 +111,11 @@
   static int helo_rfc0821domain(char *msg, char **domain);
   static int helo_rfc1035domain(char *msg, char **domain);
   
  -struct session {
  -    int     lhlo_seen;
  -    char   *lhlo_domain;
  -};
  -
   static void catchsignal(int sig, ...);
   static void initsession(struct session *session);
   static void resetsession(struct session *session);
   int groupmatch(char *, size_t, char *);
   
  -struct ns {
  -    char           *h;    /* host */
  -    char           *p;    /* port */
  -    sa_addr_t      *saa;  /* socket address abstraction */
  -    sa_t           *sa;   /* socket abstraction */
  -    nntp_t         *nntp;
  -    nntp_rc_t       rc;
  -    l2_channel_t   *l2;
  -};
  -
  -struct acl {
  -    char      *acl;
  -    int        not;
  -    sa_addr_t *saa;
  -    size_t     prefixlen;
  -};
  -
  -typedef struct {
  -    l2_context_t    ctx;
  -    char           *progname;
  -    char           *option_logfile;
  -    int             option_groupmode;
  -    int             option_operationmode;
  -    char           *option_operationmodefakestatus;
  -    char           *option_operationmodefakedsn;
  -    int             option_maxmessagesize;
  -    char           *azHeaderValuePairs;
  -    size_t          asHeaderValuePairs;
  -    int             option_timeout_lmtp_accept;
  -    int             option_timeout_lmtp_read;
  -    int             option_timeout_lmtp_write;
  -    int             option_timeout_nntp_connect;
  -    int             option_timeout_nntp_read;
  -    int             option_timeout_nntp_write;
  -    char           *option_mailfrom;
  -    char           *option_restrictheader;
  -    unsigned int    option_levelmask;
  -    char           *option_pidfile;
  -    int             option_killflag;
  -    uid_t           option_uid;
  -    int             option_daemon;
  -    int             option_aclc;
  -    struct acl      option_acl[MAXACLS];
  -    int             option_veryverbose;
  -    int             option_childsmax;
  -    int             active_childs;
  -    l2_env_t       *l2_env;
  -    l2_channel_t   *l2;
  -    sa_addr_t      *saaAltio;
  -    sa_t           *saAltio;
  -    char           *cpBindh;
  -    char           *cpBindp;
  -    sa_addr_t      *saaBind;
  -    sa_t           *saBind;
  -    sa_addr_t      *saaIO;
  -    sa_t           *saIO;
  -    int             fdIOi;
  -    int             fdIOo;
  -    int             nsc;
  -    struct ns       ns[MAXNEWSSERVICES];
  -    char           *azGroupargs;
  -    size_t          asGroupargs;
  -    struct          session session;
  -    msg_t          *msg;
  -    struct utsname  uname;
  -} lmtp2nntp_t;
  -
   static var_config_t ctx_lookup_cfg = {
       '$',          /* varinit       */ 
       '{',          /* startdelim    */ 
  @@ -501,7 +429,8 @@
       if ((ctx = (lmtp2nntp_t *)malloc(sizeof(lmtp2nntp_t))) == NULL)
           CU(ERR_EXECUTION);
       ctx->ctx.vp = ctx;
  -    ctx->progname = strdup(argv[0]);
  +    ctx->val = NULL;
  +    ctx->progname = NULL;
       ctx->option_childsmax = 10;
       ctx->option_logfile = NULL;
       ctx->option_groupmode = GROUPMODE_ARG;
  @@ -555,15 +484,21 @@
       ctx->asGroupargs = 0;
       initsession(&ctx->session);
       ctx->msg = NULL;
  +    
  +    /* fill in application context */
  +    if (val_create(&ctx->val) != VAL_OK)
  +        CU(ERR_EXECUTION);
       if (uname(&ctx->uname) == -1) {
           fprintf(stderr, "%s:Error: uname failed \"%s\"\n", ctx->progname, strerror(errno));
           CU(ERR_EXECUTION);
       }
  +    ctx->progname = strdup(argv[0]);
   
   {
   lmtp2nntp_option_t *o;
  -(void)option_create(&o); /* FIXME */
  +(void)option_create(&o, ctx->val); /* FIXME */
   (void)option_parse(o, argc, argv);
  +(void)config_context(ctx);
   (void)option_destroy(o);
   return 0;
   }
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 lmtp2nntp_nntp.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.h	31 Dec 2001 15:15:36 -0000	1.2
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.h	24 Jan 2002 12:07:13 -0000	1.3
  @@ -34,8 +34,10 @@
   
   #include "lmtp2nntp_msg.h"
   
  +/*FIXME see include below
   struct nntp_st;
   typedef struct nntp_st nntp_t;
  +*/
   
   typedef struct {
       void    *ctx;
  @@ -55,6 +57,9 @@
       NNTP_ERR_INIT,
       NNTP_ERR_UNKNOWN
   } nntp_rc_t;
  +
  +/*FIXME see fixme above */
  +#include "fixme.h"
   
   typedef struct {
       int fd;

From ossp-cvs-owner@ossp.org  Thu Jan 24 13:50:55 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6A256764EB; Thu, 24 Jan 2002 13:50:55 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc 00TODO
Message-Id: <20020124125055.6A256764EB@mail.ossp.org>
Date: Thu, 24 Jan 2002 13:50:55 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   24-Jan-2002 13:50:55
  Branch: HEAD                             Handle: 2002012412505500

  Modified files:
    ossp-pkg/rc             00TODO

  Log:
    Update buildconf status and record config file and postcode file design.

  Summary:
    Revision    Changes     Path
    1.7         +3  -4      ossp-pkg/rc/00TODO
  ____________________________________________________________________________

  Index: ossp-pkg/rc/00TODO
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 00TODO
  --- ossp-pkg/rc/00TODO	23 Jan 2002 13:09:20 -0000	1.6
  +++ ossp-pkg/rc/00TODO	24 Jan 2002 12:50:55 -0000	1.7
  @@ -2,14 +2,13 @@
   
   Consider
     Make return code and error definitions unique to OSSP rc.
  -  Enclose rc.c in its own project and write autoconf logic.
  +  Standardize rc.conf
  +    Rename rc.conf to rc.post or/and rc.pre
  +    New rc.conf has a rc config like syslog.conf, resolv.conf, or inetd.conf
   
   Must do
  -  Automake raus.
     Translate rc bourne shell script to ANSI C.
     Finish man page. Start latex or Docbook guide.
  -  Remove autogen.sh after devtool is finished.
  -  Customize devtool.conf and devtool.func for rc and automake.
     If a variable is defined for which no default exists, warn user (Scholli.)
     Avoid a silent failure when giving non-existent run commands (Marcus.)
   

From ossp-cvs-owner@ossp.org  Thu Jan 24 16:29:17 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 711B5764EB; Thu, 24 Jan 2002 16:29:17 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val val_test.c
Message-Id: <20020124152917.711B5764EB@mail.ossp.org>
Date: Thu, 24 Jan 2002 16:29:17 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   24-Jan-2002 16:29:17
  Branch: HEAD                             Handle: 2002012415291700

  Modified files:
    ossp-pkg/val            val_test.c

  Log:
    Backed out changed comment. Value names are parsed, and their values are
    implicitly stored lower in the cascade after all.

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/val/val_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/val/val_test.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 val_test.c
  --- ossp-pkg/val/val_test.c	24 Jan 2002 11:05:01 -0000	1.3
  +++ ossp-pkg/val/val_test.c	24 Jan 2002 15:29:17 -0000	1.4
  @@ -160,7 +160,7 @@
       if (testint != testintout)
           die("testint/testintout compare #2");
   
  -    /* register variable under first val_t and name it "quux3" - OO method */
  +    /* register variable under second val_t and name it "quux3" - OO method */
       if ((rc = val_reg(v1, "baz.quux3", VAL_TYPE_INT, "quux3 variable", (void *)&testint)) != VAL_OK)
           die("val_reg() #5");
   

From ossp-cvs-owner@ossp.org  Thu Jan 24 16:30:11 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2E251764EB; Thu, 24 Jan 2002 16:30:11 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp Makefile.in
Message-Id: <20020124153011.2E251764EB@mail.ossp.org>
Date: Thu, 24 Jan 2002 16:30:11 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   24-Jan-2002 16:30:11
  Branch: HEAD                             Handle: 2002012415301000

  Modified files:
    ossp-pkg/lmtp2nntp      Makefile.in

  Log:
    fixed dependency generator

  Summary:
    Revision    Changes     Path
    1.42        +7  -6      ossp-pkg/lmtp2nntp/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.41 -r1.42 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	24 Jan 2002 12:05:51 -0000	1.41
  +++ ossp-pkg/lmtp2nntp/Makefile.in	24 Jan 2002 15:30:10 -0000	1.42
  @@ -120,7 +120,7 @@
   	&& sed -ne '1,/^#   AUTOMATICALLY GENERATED DEPENDENCY LIST/p' Makefile.in > Makefile.new \
   	&& $(CC) -MM $(CPPFLAGS) $(CFLAGS) $(SRCS) |\
   	   perl -e 'my $$d = ""; $$d .= $$_ while (<STDIN>); $$_ = $$d; \
  -	            s|\\\n\s*| |sg; s|\b?\S*/\S*\b?||g; s|\s{2,}| |g; \
  +	            s|\\\n\s*| |sg; s|\b?\S*/\S*\b?||sg; s|[ \t]{2,}| |sg; \
   	            print $$_;' >> Makefile.new \
   	&& cp Makefile.new Makefile.in
   	&& rm -f Makefile.new
  @@ -128,13 +128,14 @@
   $(OBJS): Makefile
   
   #   AUTOMATICALLY GENERATED DEPENDENCY LIST - DO NOT EDIT
  -lmtp2nntp_main.o: lmtp2nntp_main.c lmtp2nntp_argz.h lmtp2nntp_shpat.h lmtp2nntp_daemon.h lmtp2nntp_popt.h lmtp2nntp_global.h config.h lmtp2nntp_option.h lmtp2nntp_config.h lmtp2nntp_lmtp.h lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_version.c
  +lmtp2nntp_main.o: lmtp2nntp_main.c lmtp2nntp_argz.h lmtp2nntp_shpat.h lmtp2nntp_daemon.h lmtp2nntp_popt.h lmtp2nntp_global.h config.h lmtp2nntp_option.h lmtp2nntp_config.h fixme.h lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_lmtp.h lmtp2nntp_version.c
   lmtp2nntp_daemon.o: lmtp2nntp_daemon.c config.h lmtp2nntp_daemon.h
   lmtp2nntp_lmtp.o: lmtp2nntp_lmtp.c lmtp2nntp_lmtp.h config.h
  -lmtp2nntp_nntp.o: lmtp2nntp_nntp.c lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_global.h config.h
  +lmtp2nntp_nntp.o: lmtp2nntp_nntp.c lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_global.h config.h fixme.h
   lmtp2nntp_argz.o: lmtp2nntp_argz.c lmtp2nntp_argz.h config.h
   lmtp2nntp_shpat.o: lmtp2nntp_shpat.c config.h lmtp2nntp_shpat.h
  -lmtp2nntp_msg.o: lmtp2nntp_msg.c lmtp2nntp_msg.h lmtp2nntp_global.h config.h lmtp2nntp_argz.h lmtp2nntp_popt.o: lmtp2nntp_popt.c config.h lmtp2nntp_popt.h
  -lmtp2nntp_option.o: lmtp2nntp_option.c lmtp2nntp_argz.h lmtp2nntp_popt.h lmtp2nntp_global.h config.h lmtp2nntp_option.h lmtp2nntp_config.h lmtp2nntp_lmtp.h lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_version.c
  -lmtp2nntp_config.o: lmtp2nntp_config.c
  +lmtp2nntp_msg.o: lmtp2nntp_msg.c lmtp2nntp_msg.h lmtp2nntp_global.h config.h lmtp2nntp_argz.h 
  +lmtp2nntp_popt.o: lmtp2nntp_popt.c config.h lmtp2nntp_popt.h
  +lmtp2nntp_option.o: lmtp2nntp_option.c lmtp2nntp_argz.h lmtp2nntp_popt.h lmtp2nntp_global.h config.h lmtp2nntp_option.h lmtp2nntp_config.h fixme.h lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_lmtp.h lmtp2nntp_version.c
  +lmtp2nntp_config.o: lmtp2nntp_config.c lmtp2nntp_argz.h lmtp2nntp_popt.h lmtp2nntp_global.h config.h lmtp2nntp_option.h lmtp2nntp_config.h fixme.h lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_lmtp.h lmtp2nntp_version.c
   lmtp2nntp_version.o: lmtp2nntp_version.c lmtp2nntp_version.c

From ossp-cvs-owner@ossp.org  Thu Jan 24 16:30:58 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BB811764EB; Thu, 24 Jan 2002 16:30:58 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val val.c
Message-Id: <20020124153058.BB811764EB@mail.ossp.org>
Date: Thu, 24 Jan 2002 16:30:58 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   24-Jan-2002 16:30:58
  Branch: HEAD                             Handle: 2002012415305800

  Modified files:
    ossp-pkg/val            val.c

  Log:
    This one is really a typo ;-)

  Summary:
    Revision    Changes     Path
    1.8         +2  -2      ossp-pkg/val/val.c
  ____________________________________________________________________________

  Index: ossp-pkg/val/val.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 val.c
  --- ossp-pkg/val/val.c	18 Jan 2002 18:12:33 -0000	1.7
  +++ ossp-pkg/val/val.c	24 Jan 2002 15:30:58 -0000	1.8
  @@ -51,8 +51,8 @@
   #endif
   
   /*
  -**  ____                           ____
  -**  ____ LINEAR HASING SUB-LIBRARY ____
  +**  ____                            ____
  +**  ____ LINEAR HASHING SUB-LIBRARY ____
   **
   **  This part implements a Dynamic Hash Table, based on WITOLD LITWIN
   **  and PER-AKE LARSON's ``Linear Hashing'' algorithm (1980/1988),

From ossp-cvs-owner@ossp.org  Thu Jan 24 17:25:56 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A77A0764EB; Thu, 24 Jan 2002 17:25:55 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c lmtp2nntp_config.h l...
Message-Id: <20020124162555.A77A0764EB@mail.ossp.org>
Date: Thu, 24 Jan 2002 17:25:55 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   24-Jan-2002 17:25:55
  Branch: HEAD                             Handle: 2002012416255400

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c lmtp2nntp_config.h
                            lmtp2nntp_main.c lmtp2nntp_option.c
                            lmtp2nntp_option.h

  Log:
    option works and data can be read by config

  Summary:
    Revision    Changes     Path
    1.16        +13 -0      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.7         +0  -2      ossp-pkg/lmtp2nntp/lmtp2nntp_config.h
    1.9         +0  -7      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
    1.2         +58 -69     ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
    1.2         +35 -10     ossp-pkg/lmtp2nntp/lmtp2nntp_option.h
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	24 Jan 2002 12:04:46 -0000	1.15
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	24 Jan 2002 16:25:54 -0000	1.16
  @@ -77,5 +77,18 @@
   
   void config_context(lmtp2nntp_t *ctx)
   {
  +    optionval_t *ov;
  +    char *cp;
  +
  +    printf("DEBUG: Hello, World!\n");
  +    //case 'C': /*POD [B<-C> I<childsmax>] */
  +    if (val_get(ctx->val, "option.childsmax", &ov) != VAL_OK)
  +        fprintf(stderr, "%s:Error: (internal) config did not register 'childsmax' option\n", ctx->progname);
  +    printf("DEBUG: option_childsmax %d = \"%s\"\n", ov->ndata, ov->data.s);
  +    ctx->option_childsmax = atoi(ov->data.s);
  +    if (ctx->option_childsmax <= 0) {
  +        fprintf(stderr, "%s:Error: Invalid number (%d) to option -C\n", ctx->progname, ctx->option_childsmax);
  +        return; //FIXME CU(ERR_EXECUTION);
  +    }
       return;
   }
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.h
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 lmtp2nntp_config.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.h	24 Jan 2002 12:04:46 -0000	1.6
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.h	24 Jan 2002 16:25:54 -0000	1.7
  @@ -26,6 +26,4 @@
   
   #include "lmtp2nntp_global.h"
   #include "fixme.h"
  -//#include "val.h"
  -//void config_context(lmtp2nntp_t *);
   void config_context(lmtp2nntp_t *);
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	24 Jan 2002 12:07:13 -0000	1.8
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	24 Jan 2002 16:25:54 -0000	1.9
  @@ -513,13 +513,6 @@
       /* read in the arguments */
       while ((i = getopt(argc, argv, "C:DKP:Va:b:c:d:g:h:l:m:n:o:r:s:t:u:v")) != -1) {
           switch (i) {
  -            case 'C': /*POD [B<-C> I<childsmax>] */
  -                ctx->option_childsmax = atoi(optarg);
  -                if (ctx->option_childsmax <= 0) {
  -                    fprintf(stderr, "%s:Error: Invalid number (%d) to option -C\n", ctx->progname, ctx->option_childsmax);
  -                    CU(ERR_EXECUTION);
  -                }
  -                break;
               case 'D': /*POD [B<-D>] */
                   ctx->option_daemon = TRUE;
                   break;
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 lmtp2nntp_option.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	24 Jan 2002 12:04:46 -0000	1.1
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	24 Jan 2002 16:25:54 -0000	1.2
  @@ -79,39 +79,15 @@
       exit(-1);
   }
   
  -struct optionconfig_s {
  -    optionconfig_t *next;               /* cleanup chain for destroy */
  -    lmtp2nntp_option_t *parent;         /* include needs access to parent */
  -                    /**/
  -    char               *longname;       /* the long name (optional if shortname given) */
  -    char                shortname;      /* the short name (optional if longname given) */
  -    char               *descrip;        /* description for autohelp */
  -    char               *argdescrip;     /* argument description for autohelp */
  -    optiontype_t        type;           /* OPT_FLAG, OPT_SINGLE, OPT_MULTI */
  -    optionloop_cb_t    *cb;             /* callback for first iteration - syntax check and include */
  -    void               *cbctx;          /* context for pass1 */
  -    val_t              *val;            /* val we are registered under */
  -                    /**/
  -    int                 number;         /* number of this option for popt */
  -    struct {                             /* option data as read from configuration */
  -        int f;                          /* OPT_FLAG */
  -        void *foo1, *foo2, *foo3, *foo4, *foo5, *foo6, *foo7, *foo8, *foo9; 
  -        char *s;                        /* OPT_SINGLE */
  -        void *bar1, *bar2, *bar3, *bar4, *bar5, *bar6, *bar7, *bar8, *bar9; 
  -        char **m;                       /* OPT_MULTI */
  -    } data;
  -    int ndata;
  -};
  -
   static val_rc_t dumper(void *ctx, const char *name, int type, const char *desc, void *data)
   {
  -    optionconfig_t *oc;
  +    optionval_t *oc;
       int i;
   
       if (type != VAL_TYPE_PTR)
           return VAL_OK;
   
  -    oc = (optionconfig_t *)data;
  +    oc = *(optionval_t **)data;
   
       switch (oc->type) {
           case OPT_FLAG:
  @@ -140,8 +116,8 @@
       }
       return VAL_OK;
   }
  -//lmtp2nntp_option_rc_t option_find(lmtp2nntp_option_t *o, int number, optionconfig_t **ocp);
  -static lmtp2nntp_option_rc_t option_find(lmtp2nntp_option_t *o, int number, optionconfig_t **ocp)
  +//lmtp2nntp_option_rc_t option_find(lmtp2nntp_option_t *o, int number, optionval_t **ocp);
  +static lmtp2nntp_option_rc_t option_find(lmtp2nntp_option_t *o, int number, optionval_t **ocp)
   {
       lmtp2nntp_option_rc_t rc = VAL_OK;
   
  @@ -159,17 +135,17 @@
   lmtp2nntp_option_rc_t option_register(lmtp2nntp_option_t *o, char *longname, char shortname, optiontype_t type, optionloop_cb_t *cb, char *cbctx, char *descrip, char *argdescrip)
   {
       lmtp2nntp_option_rc_t rc = VAL_OK;
  -    optionconfig_t *oc;
  +    optionval_t *oc;
       
       //printf("DEBUG: enter option_register(%.8lx, \"%s\", '%c', %d, %.8lx, %.8lx, \"%s\", \"%s\")\n", (long)o, longname, shortname, type, (long)cb, (long)cbctx, descrip, argdescrip);
   
       if (o == NULL || longname == NULL)
           return OPTION_ERR_ARG;
   
  -    /* create a optionconfig_t structure */
  -    if ((oc = (optionconfig_t *)malloc(sizeof(optionconfig_t))) == NULL)
  +    /* create a optionval_t structure */
  +    if ((oc = (optionval_t *)malloc(sizeof(optionval_t))) == NULL)
           return OPTION_ERR_MEM;
  -    //printf("DEBUG: optionconfig_t structure malloc'ed\n");
  +    //printf("DEBUG: optionval_t structure malloc'ed\n");
       oc->next         = NULL;
       oc->parent       = o;
       oc->longname     = strdup(longname);
  @@ -191,14 +167,27 @@
             )
           CU(OPTION_ERR_MEM);
   
  -    //printf("DEBUG: optionconfig_t structure created\n");
  +    //printf("DEBUG: optionval_t structure created, oc at %.8lx is %.8lx\n", (long)&oc, (long)oc);
   
       /* feed lib_val */
  -    if (val_reg(oc->val, oc->longname, VAL_TYPE_PTR, oc->descrip, oc) != VAL_OK)
  +    if (val_reg(oc->val, oc->longname, VAL_TYPE_PTR, oc->descrip, NULL) != VAL_OK)
  +        CU(OPTION_ERR_USE);
  +    if (val_set(oc->val, oc->longname, oc) != VAL_OK)
           CU(OPTION_ERR_USE);
  -
       //printf("DEBUG: val_reg'ed\n");
   
  +#if 0
  +    {
  +        optionval_t *ov = 0x12345678;
  +
  +        if (val_get(oc->val, oc->longname, &ov) == VAL_OK)
  +            printf("DEBUG: oc->val %.8lx %s in %.8lx d = \"s\"\n", (long)oc->val, oc->longname, (long)(oc));
  +        if (val_get(o->vo,   oc->longname, &ov) == VAL_OK)
  +            printf("DEBUG: o->vo   %.8lx %s in %.8lx d = \"s\"\n", (long)o->vo,   oc->longname, (long)(ov));
  +        printf("DEBUG: val_get'ed\n");
  +    }
  +#endif
  +
       /* feed lib_popt */
       //printf("DEBUG: o->pi=%d, o->pn=%d\n", o->pi, o->pn);
       if (o->pi >= (o->pn-2)) { /* correction by two here, in malloc and realloc is for AUTOHELP and TABLEEND */
  @@ -243,7 +232,7 @@
       o->pi++;
       //printf("DEBUG: popt'ed\n");
   
  -    /* link in this new optionconfig_t structure */
  +    /* link in this new optionval_t structure */
       if (o->first == NULL) {
           o->first = oc;
           o->last  = oc;
  @@ -329,7 +318,7 @@
   {
       int i;
       char *cp;
  -    optionconfig_t *ocp;
  +    optionval_t *ocp;
       popt_context poptCon;   /* context for parsing command-line options */
   
   #if 0
  @@ -394,9 +383,9 @@
       return OPTION_OK;
   }
   
  -static lmtp2nntp_option_rc_t stdsyntax(optionconfig_t *oc, char *arg, char *cbctx)
  +static lmtp2nntp_option_rc_t stdsyntax(optionval_t *oc, char *arg, char *cbctx)
   {
  -    printf("DEBUG: enter stdsyntax %.8lx, \"%s\", \"%s\"\n", (long)oc, arg, cbctx);
  +    //printf("DEBUG: enter stdsyntax %.8lx, \"%s\", \"%s\"\n", (long)oc, arg, cbctx);
   
       //printf("DEBUG: oc->type=%d\n", oc->type);
       switch (oc->type) {
  @@ -474,7 +463,7 @@
       return OPTION_OK;
   }
   
  -static lmtp2nntp_option_rc_t includeit(optionconfig_t *oc, char *arg, char *cbctx)
  +static lmtp2nntp_option_rc_t includeit(optionval_t *oc, char *arg, char *cbctx)
   {
       lmtp2nntp_option_t *o;
       char *cpBuf = NULL;
  @@ -610,32 +599,32 @@
       if (o == NULL)
           return OPTION_ERR_ARG;
   
  -    (void)option_register(o, "childsmax",          'C', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "childsmax" );
  -    (void)option_register(o, "daemonize",          'D', OPT_FLAG,   &stdsyntax, NULL,    "foo", NULL );
  -    (void)option_register(o, "kill",               'K', OPT_FLAG,   &stdsyntax, NULL,    "foo", NULL );
  -    (void)option_register(o, "pidfile",            'P', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "pidfile" );
  -    (void)option_register(o, "veryverbose",        'V', OPT_FLAG,   &stdsyntax, NULL,    "foo", NULL );
  -    (void)option_register(o, "acl",                'a', OPT_MULTI,  &stdsyntax, "m/.*/", "foo", "addr[/mask]" );
  -    (void)option_register(o, "bind",               'b', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "addr[:port]|-|path[:perms]" );
  -    (void)option_register(o, "client",             'c', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "addr[:port]" );
  -    (void)option_register(o, "destination",        'd', OPT_MULTI,  &stdsyntax, "m/.*/", "foo", "addr[:port]" );
  -    (void)option_register(o, "groupmode",          'g', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "groupmode" );
  -    (void)option_register(o, "headervalue",        'h', OPT_MULTI,  &stdsyntax, "m/.*/", "foo", "header: value" );
  -    (void)option_register(o, "include",            'i', OPT_MULTI,  &includeit, "m/.*/", "foo", "configfile" );
  -    (void)option_register(o, "size",               's', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "bytes" );
  -    (void)option_register(o, "timeoutlmtpaccept",  NUL, OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "sec" );
  -    (void)option_register(o, "timeoutlmtpread",    NUL, OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "sec" );
  -    (void)option_register(o, "timeoutlmtpwrite",   NUL, OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "sec" );
  -    (void)option_register(o, "timeoutnntpconnect", NUL, OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "sec" );
  -    (void)option_register(o, "timeoutnntpread",    NUL, OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "sec" );
  -    (void)option_register(o, "timeoutnntpwrite",   NUL, OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "sec" );
  -    (void)option_register(o, "mailfrom",           'm', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "regex" );
  -    (void)option_register(o, "nodename",           'n', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "nodename" );
  -    (void)option_register(o, "operationmode",      'o', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "post|feed" );
  -    (void)option_register(o, "l2spec",             'l', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "spec" );
  -    (void)option_register(o, "uid",                'u', OPT_SINGLE, &stdsyntax, "m/.*/", "foo", "number|name" );
  -    (void)option_register(o, "restrictheader",     'r', OPT_MULTI,  &stdsyntax, "m/.*/", "foo", "regex" );
  -    (void)option_register(o, "newsgroup",          NUL, OPT_MULTI,  &stdsyntax, "m/.*/", "foo", "newsgroup");
  +    (void)option_register(o, "childsmax",          'C', OPT_SINGLE, &stdsyntax, "m/[0-9]+/", "foo01", "childsmax" );
  +    (void)option_register(o, "daemonize",          'D', OPT_FLAG,   &stdsyntax, NULL,        "foo02", NULL );
  +    (void)option_register(o, "kill",               'K', OPT_FLAG,   &stdsyntax, NULL,        "foo03", NULL );
  +    (void)option_register(o, "pidfile",            'P', OPT_SINGLE, &stdsyntax, "m/.*/",     "foo04", "pidfile" );
  +    (void)option_register(o, "veryverbose",        'V', OPT_FLAG,   &stdsyntax, NULL,        "foo05", NULL );
  +    (void)option_register(o, "acl",                'a', OPT_MULTI,  &stdsyntax, "m/.*/",     "foo06", "addr[/mask]" );
  +    (void)option_register(o, "bind",               'b', OPT_SINGLE, &stdsyntax, "m/.*/",     "foo07", "addr[:port]|-|path[:perms]" );
  +    (void)option_register(o, "client",             'c', OPT_SINGLE, &stdsyntax, "m/.*/",     "foo08", "addr[:port]" );
  +    (void)option_register(o, "destination",        'd', OPT_MULTI,  &stdsyntax, "m/.*/",     "foo09", "addr[:port]" );
  +    (void)option_register(o, "groupmode",          'g', OPT_SINGLE, &stdsyntax, "m/.*/",     "foo10", "groupmode" );
  +    (void)option_register(o, "headervalue",        'h', OPT_MULTI,  &stdsyntax, "m/.*/",     "foo11", "header: value" );
  +    (void)option_register(o, "include",            'i', OPT_MULTI,  &includeit, "m/.*/",     "foo12", "configfile" );
  +    (void)option_register(o, "size",               's', OPT_SINGLE, &stdsyntax, "m/.*/",     "foo13", "bytes" );
  +    (void)option_register(o, "timeoutlmtpaccept",  NUL, OPT_SINGLE, &stdsyntax, "m/.*/",     "foo14", "sec" );
  +    (void)option_register(o, "timeoutlmtpread",    NUL, OPT_SINGLE, &stdsyntax, "m/.*/",     "foo15", "sec" );
  +    (void)option_register(o, "timeoutlmtpwrite",   NUL, OPT_SINGLE, &stdsyntax, "m/.*/",     "foo16", "sec" );
  +    (void)option_register(o, "timeoutnntpconnect", NUL, OPT_SINGLE, &stdsyntax, "m/.*/",     "foo17", "sec" );
  +    (void)option_register(o, "timeoutnntpread",    NUL, OPT_SINGLE, &stdsyntax, "m/.*/",     "foo18", "sec" );
  +    (void)option_register(o, "timeoutnntpwrite",   NUL, OPT_SINGLE, &stdsyntax, "m/.*/",     "foo19", "sec" );
  +    (void)option_register(o, "mailfrom",           'm', OPT_SINGLE, &stdsyntax, "m/.*/",     "foo20", "regex" );
  +    (void)option_register(o, "nodename",           'n', OPT_SINGLE, &stdsyntax, "m/.*/",     "foo21", "nodename" );
  +    (void)option_register(o, "operationmode",      'o', OPT_SINGLE, &stdsyntax, "m/.*/",     "foo22", "post|feed" );
  +    (void)option_register(o, "l2spec",             'l', OPT_SINGLE, &stdsyntax, "m/.*/",     "foo23", "spec" );
  +    (void)option_register(o, "uid",                'u', OPT_SINGLE, &stdsyntax, "m/.*/",     "foo24", "number|name" );
  +    (void)option_register(o, "restrictheader",     'r', OPT_MULTI,  &stdsyntax, "m/.*/",     "foo25", "regex" );
  +    (void)option_register(o, "newsgroup",          NUL, OPT_MULTI,  &stdsyntax, "m/.*/",     "foo26", "newsgroup");
   
   #if 0
       {
  @@ -653,15 +642,15 @@
       }
   #endif
   
  -    //val_apply(o->vo, "", 9, dumper, "all" );
  +    //val_apply(o->vo, "", 9, dumper, "vorher" );
       rc = option_parse_internal(o, argc, argv);
  -    val_apply(o->vo, "", 9, dumper, "all" );
  +    //val_apply(o->vo, "", 9, dumper, "nachher" );
       return rc;
   }
   
   lmtp2nntp_option_rc_t option_destroy(lmtp2nntp_option_t *o)
   {
  -    optionconfig_t *oc;
  +    optionval_t *oc;
       int i;
   
       //printf("DEBUG: option_destroy %.8lx\n", (long)o);
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_option.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 lmtp2nntp_option.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_option.h	24 Jan 2002 12:04:46 -0000	1.1
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_option.h	24 Jan 2002 16:25:54 -0000	1.2
  @@ -27,8 +27,8 @@
   #include "lmtp2nntp_global.h"
   #include "val.h"
   
  -struct optionconfig_s;
  -typedef struct optionconfig_s optionconfig_t;
  +struct optionval_s;
  +typedef struct optionval_s optionval_t;
   
   typedef struct {
       int                 childsmax;
  @@ -57,8 +57,8 @@
       argz_t              restrictheader;
       argz_t              newsgroup;
                   /*FIXME above*/
  -    optionconfig_t     *first;
  -    optionconfig_t     *last;
  +    optionval_t     *first;
  +    optionval_t     *last;
       val_t              *vo;     /* val_t for all options */
       int                 pi;     /* popt index to next record */
       int                 pn;     /* popt number of available records */
  @@ -67,6 +67,12 @@
   } lmtp2nntp_option_t;
   
   typedef enum {
  +    OPT_FLAG,
  +    OPT_SINGLE,
  +    OPT_MULTI
  +} optiontype_t;
  +
  +typedef enum {
       OPTION_OK,
       OPTION_ERR_ARG, /* invalid args passed into function */
       OPTION_ERR_USE, /* invalid usage, bad data passed into function */
  @@ -74,13 +80,32 @@
       OPTION_ERR_VAL  /* libval failed */
   } lmtp2nntp_option_rc_t;
   
  -typedef enum {
  -    OPT_FLAG,
  -    OPT_SINGLE,
  -    OPT_MULTI
  -} optiontype_t;
  +typedef lmtp2nntp_option_rc_t (optionloop_cb_t)(optionval_t *oc, char *arg, char *cbctx);
  +
  +struct optionval_s {
  +    optionval_t        *next;           /* cleanup chain for destroy */
  +    lmtp2nntp_option_t *parent;         /* include needs access to parent */
  +                    /**/
  +    char               *longname;       /* the long name (optional if shortname given) */
  +    char                shortname;      /* the short name (optional if longname given) */
  +    char               *descrip;        /* description for autohelp */
  +    char               *argdescrip;     /* argument description for autohelp */
  +    optiontype_t        type;           /* OPT_FLAG, OPT_SINGLE, OPT_MULTI */
  +    optionloop_cb_t    *cb;             /* callback for first iteration - syntax check and include */
  +    void               *cbctx;          /* context for pass1 */
  +    val_t              *val;            /* val we are registered under */
  +                    /**/
  +    int                 number;         /* number of this option for popt */
  +    struct {                             /* option data as read from configuration */
  +        int f;                          /* OPT_FLAG */
  +        void *foo1, *foo2, *foo3, *foo4, *foo5, *foo6, *foo7, *foo8, *foo9; 
  +        char *s;                        /* OPT_SINGLE */
  +        void *bar1, *bar2, *bar3, *bar4, *bar5, *bar6, *bar7, *bar8, *bar9; 
  +        char **m;                       /* OPT_MULTI */
  +    } data;
  +    int ndata;
  +};
   
  -typedef lmtp2nntp_option_rc_t (optionloop_cb_t)(optionconfig_t *oc, char *arg, char *cbctx);
   lmtp2nntp_option_rc_t option_create  (lmtp2nntp_option_t **, val_t *);
   lmtp2nntp_option_rc_t option_register(lmtp2nntp_option_t *, char *, char, optiontype_t, optionloop_cb_t *, char *, char *, char *);
   lmtp2nntp_option_rc_t option_parse   (lmtp2nntp_option_t *, int, char **);

From ossp-cvs-owner@ossp.org  Thu Jan 24 17:30:05 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D19D2764EB; Thu, 24 Jan 2002 17:30:04 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 .cvsignore ossp-pkg/str .cvsignore
Message-Id: <20020124163004.D19D2764EB@mail.ossp.org>
Date: Thu, 24 Jan 2002 17:30:04 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   24-Jan-2002 17:30:04
  Branch: HEAD                             Handle: 2002012416300202

  Modified files:
    ossp-pkg/l2             .cvsignore
    ossp-pkg/str            .cvsignore

  Log:
    ignore one more .in file

  Summary:
    Revision    Changes     Path
    1.14        +1  -0      ossp-pkg/l2/.cvsignore
    1.12        +1  -0      ossp-pkg/str/.cvsignore
  ____________________________________________________________________________

  Index: ossp-pkg/l2/.cvsignore
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 .cvsignore
  --- ossp-pkg/l2/.cvsignore	3 Jan 2002 16:13:27 -0000	1.13
  +++ ossp-pkg/l2/.cvsignore	24 Jan 2002 16:30:02 -0000	1.14
  @@ -25,3 +25,4 @@
   l2_spec_scan.c
   l2tool
   l2tool.1
  +config.h.in
  Index: ossp-pkg/str/.cvsignore
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 .cvsignore
  --- ossp-pkg/str/.cvsignore	27 Dec 2001 12:24:20 -0000	1.11
  +++ ossp-pkg/str/.cvsignore	24 Jan 2002 16:30:04 -0000	1.12
  @@ -23,3 +23,4 @@
   str-config.1
   str.h
   str_pcre.tab
  +config.h.in

From ossp-cvs-owner@ossp.org  Thu Jan 24 18:47:48 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EDB23764EB; Thu, 24 Jan 2002 18:47:47 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc 00TODO Makefile.in rc.conf rc.example
Message-Id: <20020124174747.EDB23764EB@mail.ossp.org>
Date: Thu, 24 Jan 2002 18:47:47 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   24-Jan-2002 18:47:47
  Branch: HEAD                             Handle: 2002012417474700

  Added files:
    ossp-pkg/rc             Makefile.in rc.conf rc.example
  Modified files:
    ossp-pkg/rc             00TODO

  Log:
    Buildconf and example files.

  Summary:
    Revision    Changes     Path
    1.8         +7  -3      ossp-pkg/rc/00TODO
    1.1         +97 -0      ossp-pkg/rc/Makefile.in
    1.1         +37 -0      ossp-pkg/rc/rc.conf
    1.1         +48 -0      ossp-pkg/rc/rc.example
  ____________________________________________________________________________

  Index: ossp-pkg/rc/00TODO
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 00TODO
  --- ossp-pkg/rc/00TODO	24 Jan 2002 12:50:55 -0000	1.7
  +++ ossp-pkg/rc/00TODO	24 Jan 2002 17:47:47 -0000	1.8
  @@ -2,9 +2,10 @@
   
   Consider
     Make return code and error definitions unique to OSSP rc.
  -  Standardize rc.conf
  -    Rename rc.conf to rc.post or/and rc.pre
  -    New rc.conf has a rc config like syslog.conf, resolv.conf, or inetd.conf
  +  Offer include directive in config file.
  +  Standardize rc.conf.
  +    Rename rc.conf to rc.config.
  +    New rc.conf specifies options like syslog.conf or resolv.conf does.
   
   Must do
     Translate rc bourne shell script to ANSI C.
  @@ -14,3 +15,6 @@
   
   Automated environment
     Solve problem discussed at OpenPKG eval meeting.
  +
  +Error handling
  +  Classic error, give 'restart' command in place of 'start' to stopped prog
  Index: ossp-pkg/rc/Makefile.in
  ============================================================
  $ cvs update -p -r1.1 Makefile.in
  ##
  ##  rc - OSSP Runcommand processor
  ##  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  ##  Copyright (c) 2002 Ralf S. Engelschall
  ##
  ##  This file is part of OSSP rc, a portable Runcommand processor
  ##  which can be found at http://www.ossp.org/pkg/rc/
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  Makefile.in: make(1) build procedure
  ##
  
  @SET_MAKE@
  
  DESTDIR         =
  prefix          = @prefix@
  exec_prefix     = @exec_prefix@
  bindir          = @bindir@
  sbindir         = @sbindir@
  libdir          = @libdir@
  includedir      = @includedir@
  mandir          = @mandir@
  
  CC              = @CC@
  CFLAGS          = @CFLAGS@ @DEFS@
  CPPFLAGS        = @CPPFLAGS@
  LDFLAGS         = @LDFLAGS@
  LIBS            = @LIBS@
  
  RM              = rm -f
  RMDIR           = rmdir
  SHTOOL          = ./shtool
  LIBTOOL         = ./libtool
  POD2MAN         = pod2man
  TRUE            = true
  
  TARGET          = $(TARGET_PROGS) $(TARGET_MANS) $(TARGET_TESTS)
  TARGET_PROGS    = rc
  TARGET_MANS     = rc.1
  TARGET_TESTS    = rc_test
  
  PROG_OBJS       = rc.o
  TST_OBJS        = rc_test.o
  
  SUBDIRS         = @SUBDIR_VAR@ @SUBDIR_STR@
  
  all:            $(SUBDIRS) $(TARGET)
  
  .c.o:
  	$(CC) $(CPPFLAGS) $(CFLAGS) -c $<
  
  $(TARGET_TEST): $(TST_OBJS)
  	@$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $(TST_NAME) $(TST_OBJS) $(LIB_NAME) $(LIBS)
  
  check: $(TARGET_TEST)
  	@$(LIBTOOL) --mode=execute ./$(TST_NAME)
  
  install:
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
  
  uninstall:
  	-$(RMDIR) $(DESTDIR)$(bindir) >/dev/null 2>&1 || $(TRUE)
  	-$(RMDIR) $(DESTDIR)$(prefix) >/dev/null 2>&1 || $(TRUE)
  
  clean:
  	-$(RM) $(TARGET_PROG) $(PROG_OBJS)
  	-$(RM) $(TARGET_TST) $(TST_OBJS)
  
  distclean: clean
  	-$(RM) config.log config.status config.cache
  	-$(RM) Makefile config.h
  	-$(RM) libtool
  
  realclean: distclean
  	-$(RM) configure config.h.in
  	-$(RM) shtool
  	-$(RM) ltmain.sh libtool.m4 config.guess config.sub
  
  Index: ossp-pkg/rc/rc.conf
  ============================================================
  $ cvs update -p -r1.1 rc.conf
  # 
  # OSSP rc rc.conf example
  # 
  
  #### Inclusive options ####
  func      $OSSP_RC_ROOT/rc.iofunc $OSSP_RC_ROOT/rc.dbgfunc\
            $OSSP_RC_ROOT/rc.exfunc
  dirs      /usr/local/rc /export/home/macgyver/runcommands
  #file     /export/home/rc.init  #practically only used on command line
  tmpdir    /var/tmp
  verbose
  #silent
  debug
  #raw
  defaultsection  config          #name for config section in rcfile
  commonsection   common          #name for common section in rcfile
  refsymbol       &               #can be @ or any unreserved ASCII symbol
  rcfile          'rc.%s'         #'rc.' followed by the program name
  rcumask         002             #mask checked against rcfile permissions
  deactivate      OSSP_RC_DEACT   #environment variable controls activation
  
  # The following regex options need explanation
  regex-section   '(?<=^|\n)%%%s\s*\n(.+?)(?=\n%\S+|$)'
  regex-param     '..'
  regex-reference '(?<=^|\n)%%%s\s*(.+?)(?=\n|;)'
  regex-config    '(\s+)=(.*)$'
  
  #### Exclusive options ####
  #help
  #version
  #showdefaults
  #print
  eval
  #exec
  #query
  #labels
  #info
  Index: ossp-pkg/rc/rc.example
  ============================================================
  $ cvs update -p -r1.1 rc.example
  ##
  ##  rc.example
  ##
  
  #  Generic run commands for example daemon. #
  #  Using custom symbols and identifiers.    #
  
  !confvars
      sftpd_enable="yes"
      sftpd_anonymous="yes"
      sftpd_flags=""
  
  !start -p 200 -u root
      /usr/local/sbin/sftpd -c
  
  !term -p 200 -u root
      kill -TERM `cat /var/sftp/run/sftpd.pid` 
  
  !hangup -u root
      kill -HUP `cat /var/sftp/run/sftpd.pid` 
  
  !restart -u root
      &term       # reference to term section
      sleep 2
      &start      # reference to start section
  
  
  #  Generic run commands for example daemon. #
  #  Using default symbols and identifiers.   #
  
  %confvars
      sftpd_enable="yes"
      sftpd_anonymous="yes"
      sftpd_flags=""
  
  %start -p 200 -u root
      /usr/local/sbin/sftpd -c
  
  %term -p 200 -u root
      kill -TERM `cat /var/sftp/run/sftpd.pid` 
  
  %hangup -u root
      kill -HUP `cat /var/sftp/run/sftpd.pid` 
  
  %restart -u root
      @term       # reference to term section
      sleep 2
      @start      # reference to start section

From ossp-cvs-owner@ossp.org  Fri Jan 25 16:25:52 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8C54E764D8; Fri, 25 Jan 2002 16:25:52 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex Makefile README TODO ex.c ex.h ex.pod ex_test....
Message-Id: <20020125152552.8C54E764D8@mail.ossp.org>
Date: Fri, 25 Jan 2002 16:25:52 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   25-Jan-2002 16:25:52
  Branch: HEAD                             Handle: 2002012515255100

  Added files:
    ossp-pkg/ex             Makefile README TODO ex.c ex.h ex.pod ex_test.c

  Log:
    Welcome OSSP ex, another new-born OSSP library.
    This is the first cut for a C exception handling library.
    Read ex.pod for details...

  Summary:
    Revision    Changes     Path
    1.1         +23 -0      ossp-pkg/ex/Makefile
    1.1         +1  -0      ossp-pkg/ex/README
    1.1         +4  -0      ossp-pkg/ex/TODO
    1.1         +29 -0      ossp-pkg/ex/ex.c
    1.1         +134 -0     ossp-pkg/ex/ex.h
    1.1         +220 -0     ossp-pkg/ex/ex.pod
    1.1         +104 -0     ossp-pkg/ex/ex_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/ex/Makefile
  ============================================================
  $ cvs update -p -r1.1 Makefile
  
  CC      = /usr/opkg/bin/gcc
  CFLAGS  = -Wall -O2 -I.
  LDFLAGS = 
  AR      = ar
  RANLIB  = ranlib
  
  all: libex.a ex_test
  
  ex_test: ex_test.o libex.a
  	$(CC) $(LDFLAGS) -o ex_test ex_test.o libex.a
  
  libex.a: ex.o
  	rm -f $@
  	$(AR) cr $@ ex.o
  	$(RANLIB) $@
  
  clean:
  	rm -f ex_test *.a *.o *.core
  
  check: ex_test
  	./ex_test
  
  Index: ossp-pkg/ex/README
  ============================================================
  $ cvs update -p -r1.1 README
  
  Index: ossp-pkg/ex/TODO
  ============================================================
  $ cvs update -p -r1.1 TODO
  - default handler
  - sigsetjmp (Why can't "real" exceptions be caught?)
  - pth
  - disable throwing
  Index: ossp-pkg/ex/ex.c
  ============================================================
  $ cvs update -p -r1.1 ex.c
  /*
  **  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP ex, an exception library
  **  which can be found at http://www.ossp.org/pkg/ex/.
  **
  **  This program is free software; you can redistribute it and/or
  **  modify it under the terms of the GNU General Public  License
  **  as published by the Free Software Foundation; either version
  **  2.0 of the License, or (at your option) any later version.
  **
  **  This program is distributed in the hope that it will be useful,
  **  but WITHOUT ANY WARRANTY; without even the implied warranty of
  **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  **  General Public License for more details.
  **
  **  You should have received a copy of the GNU General Public License
  **  along with this file; if not, write to the Free Software
  **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  **  USA, or contact the OSSP project <ossp@ossp.org>.
  **
  **  ex.c: exception handling (compiler part)
  */
  
  #include "ex.h"
  
  ex_ctx_t __ex_ctx_global;
  
  Index: ossp-pkg/ex/ex.h
  ============================================================
  $ cvs update -p -r1.1 ex.h
  /*
  **  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP ex, an exception library
  **  which can be found at http://www.ossp.org/pkg/ex/.
  **
  **  This program is free software; you can redistribute it and/or
  **  modify it under the terms of the GNU General Public  License
  **  as published by the Free Software Foundation; either version
  **  2.0 of the License, or (at your option) any later version.
  **
  **  This program is distributed in the hope that it will be useful,
  **  but WITHOUT ANY WARRANTY; without even the implied warranty of
  **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  **  General Public License for more details.
  **
  **  You should have received a copy of the GNU General Public License
  **  along with this file; if not, write to the Free Software
  **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  **  USA, or contact the OSSP project <ossp@ossp.org>.
  **
  **  ex.h: exception handling (pre-processor part)
  */
  
  #ifndef __TEXAS_H__
  #define __TEXAS_H__
  
  /* the required ISO-C standard facilities */
  #include <stdio.h>   /* for NULL */
  #include <setjmp.h>  /* for jmp_buf, setjmp(3), longjmp(3) */
  
  /* determine how the current function name can be fetched */
  #if (   defined(__STDC__) \
       && defined(__STDC_VERSION__) \
       && __STDC_VERSION__ >= 199901L)
  #define __TEXAS_FUNC__ __func__      /* ISO C99 compliant */
  #elif (   defined(__GNUC__) \
         && defined(__GNUC_MINOR__) \
         && (   __GNUC__ > 2 \
             || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8)))
  #define __TEXAS_FUNC__ __FUNCTION__  /* gcc >= 2.8 */
  #else
  #define __TEXAS_FUNC__ "#NA#"        /* not available */
  #endif
  
  /* declare the exception type (public) */
  typedef struct {
      /* throw value */
      void *ex_class;
      void *ex_object;
      void *ex_value;
      /* throw point */
      char *ex_file; 
      int   ex_line; 
      char *ex_func;
  } ex_t;
  
  /* declare the exception context type (private) */
  typedef struct {
      jmp_buf      *ctx_jbprev; /* previous jump buffer */
      int           ctx_caught; /* flag whether exception was caught */
      volatile ex_t ctx_ex;     /* the exception temporary storage */
  } ex_ctx_t;
  
  /* ex context (default requires linking against libex) */
  #ifndef __ex_ctx
  #define __ex_ctx (&__ex_ctx_global)
  extern ex_ctx_t __ex_ctx_global;
  #endif
  
  /* block for trying execution */
  #define ex_try \
      { \
          jmp_buf *__ex_jbprev; \
          jmp_buf __ex_jbme; \
          __ex_jbprev = __ex_ctx->ctx_jbprev; \
          __ex_ctx->ctx_jbprev = &__ex_jbme; \
          if (setjmp(__ex_jbme) == 0) { \
              if (1)
  
  /* block for catching an exception */
  #define ex_catch(e) \
              else { \
              } \
              __ex_ctx->ctx_caught = 0; \
          } \
          else { \
              __ex_ctx->ctx_caught = 1; \
          } \
          __ex_ctx->ctx_jbprev = __ex_jbprev; \
      } \
      if (!__ex_ctx->ctx_caught || ((e) = __ex_ctx->ctx_ex, 0)) { \
      } \
      else
  
  /* throw a new exception */
  #define ex_throw(c,o,v) \
      (__ex_ctx->ctx_jbprev == NULL ? \
       (abort(), 0) : \
       ( __ex_ctx->ctx_ex.ex_class  = (void *)(c), \
         __ex_ctx->ctx_ex.ex_object = (void *)(o), \
         __ex_ctx->ctx_ex.ex_value  = (void *)(v), \
         __ex_ctx->ctx_ex.ex_file   = __FILE__, \
         __ex_ctx->ctx_ex.ex_line   = __LINE__, \
         __ex_ctx->ctx_ex.ex_func   = __TEXAS_FUNC__, \
         longjmp(*(__ex_ctx->ctx_jbprev), 1), \
         0 \
       ) \
      )
  
  /* re-throw a caught exception */
  #define ex_rethrow \
      (__ex_ctx->ctx_jbprev == NULL ? \
       (abort(), 0) : \
       (longjmp(*(__ex_ctx->ctx_jbprev), 1), 0) \
      )
  
  /* optional namespace mapping */
  #if !defined(__cplusplus) && !defined(__TEXAS_NO_CXX_NS__)
  #define try      ex_try
  #define catch    ex_catch
  #define throw    ex_throw
  #define rethrow  ex_rethrow
  #endif
  #if !defined(__TEXAS_NO_SIMPLE_NS__)
  #define Try      ex_try
  #define Catch    ex_catch
  #define Throw    ex_throw
  #define Rethrow  ex_rethrow
  #endif
  
  #endif /* __TEXAS_H__ */
  
  Index: ossp-pkg/ex/ex.pod
  ============================================================
  $ cvs update -p -r1.1 ex.pod
  ##
  ##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  ##
  ##  This file is part of OSSP ex, an exception library
  ##  which can be found at http://www.ossp.org/pkg/ex/.
  ##
  ##  This program is free software; you can redistribute it and/or
  ##  modify it under the terms of the GNU General Public  License
  ##  as published by the Free Software Foundation; either version
  ##  2.0 of the License, or (at your option) any later version.
  ##
  ##  This program is distributed in the hope that it will be useful,
  ##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  ##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  ##  General Public License for more details.
  ##
  ##  You should have received a copy of the GNU General Public License
  ##  along with this file; if not, write to the Free Software
  ##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  ##  USA, or contact the OSSP project <ossp@ossp.org>.
  ##
  ##  ex.pod: exception library manual page
  ##
  
  =pod
  
  =head1 NAME
  
  B<OSSP ex> - Exception Library
  
  =head1 SYNOPSIS
  
  B<ex_t> I<variable>;
  
  B<ex_try> { ... } B<ex_catch> (I<variable>) { ... }
  
  B<ex_throw>(I<class>, I<object>, I<value>);
  
  B<ex_rethrow>;
  
  =head1 DESCRIPTION
  
  B<OSSP ex> is a small ISO-C++ style exception handling library for use
  in the ISO-C language. It allows you to use the paradigm of throwing
  and catching exceptions in order to reduce the amount of error handling
  code in without making your program less robust. This is achieved
  by directly transferring exceptional return codes (and the program
  control flow) from the location where it was raised (throw point) to
  the location where it is handled (catch point) - usually from a deeply
  nested sub-routine to a parent routine. All intermediate routines
  no longer have to make sure that the exceptional return codes from
  sub-routines are correctly passed back to the parent.
  
  =head2 EXCEPTIONS
  
  An exception is a triple E<lt>I<class>,I<object>,I<value>E<gt> where
  I<class> identifies the class of the exception thrower, I<object>
  identifies the particular class instance of the exception thrower, and
  I<value> is the exceptional return code the thrower wants to send to the
  catcher. All three parts are of type C<void *> internally, but every
  value can be used which can be (automatically) casted to a C<void *>.
  Exceptions are created on-the-fly by the B<ex_throw> command.
  
  =head2 APPLICATION PROGRAMMER INTERFACE (API)
  
  The B<OSSP ex> API consists of four different elements:
  
  =over 4
  
  =item B<ex_t> I<variable>;
  
  This is the declaration of an exception variable. It is usually never
  initialized manually. Instead it is initialized by an B<ex_catch> block
  and just used read-only inside the block. Such a variable of type
  B<ex_t> consists of six attributes:
  
  =over 2
  
  =item C<void *>I<ex_class>
  
  This is the I<class> argument of the B<ex_throw> call which created
  the exception. This globally and uniquely identifies the class of
  I<ex_value>. Usually this is a pointer to a static object (variable,
  structure or function) which identifies the thrower.
  
  =item C<void *>I<ex_object>
  
  This is the I<object> argument of the B<ex_throw> call which created
  the exception. This globally and uniquely identifies the class instance
  of I<ex_value> (in case multiple instances exists). Usually this a
  pointer to a dynamic object (structure) which identifiers the particular
  instance of the thrower.
  
  =item C<void *>I<ex_value>
  
  This is the I<value> argument of the B<ex_throw> call which created the
  exception. This is the exceptional return code which uniquely identifies
  the type of exception. Usually this is the value which is C<return>ed
  if no exceptions would be thrown. In the simple case this is just a
  numerical return code. In the complex case this can be a pointer to an
  arbitrary complex data structure describing the exception.
  
  =item C<char *>I<ex_file> 
  
  This is the file name of the source where the B<ex_throw> call
  was performed. It is provided as an additional information about
  the throw point and is intended mainly for tracing and debugging
  purposes.
  
  =item C<int> I<ex_line>
  
  This is the line number inside the source file name where the
  B<ex_throw> call was performed. It is provided as an additional
  information about the throw point and is intended mainly for tracing and
  debugging purposes.
  
  =item C<char *>I<ex_func>
  
  This is the function name (if determinable, else "C<#NA#>") inside
  the source file name where the B<ex_throw> call was performed. It is
  provided as an additional information about the throw point and is
  intended mainly for tracing and debugging purposes.
  
  =back
  
  =item B<ex_try> { ... } B<ex_catch> (I<variable>) { ... }
  
  This is the main construct provided by B<OSSP ex>. It is modeled after
  the ISO-C++ C<try>-C<catch> construct which in turn is very similar to
  an ISO-C C<if>-C<else> construct. It consists of an B<ex_try> block
  which forms the dynamic scope of the exception handling (i.e. exceptions
  thrown there are or from routines called from there are catched) and a
  B<ex_catch> block where the caught exceptions are handled.
  
  The B<ex_trx> and B<ex_catch> cannot be used seperately, they work only
  in combination. In contrast to ISO-C++ there is only one B<ex_catch>
  block and not multiple ones (all B<OSSP ex> exceptions are of the
  same ISO-C type B<ex_t>). If an exception is caught, it is stored in
  I<variable> for inspection (or re-throwing) inside the B<ex_catch>
  block. Although declared outside, the I<variable> is only valid
  within the B<ex_catch> block. But it can be re-used in following
  B<ex_try>/B<ex_catch> constructs, of course.
  
  The B<ex_try> block is a regular ISO-C language block, but it is not
  allowed to jump into it via C<goto> or C<longjmp>(3) or out of it via
  C<return>, C<goto> or C<longjmp>(3) because there is some hidden setup
  and cleanup that needs to be done by B<OSSP ex> regardless of whether an
  exception is caught. Jumping into an B<ex_try> clause would avoid doing
  the setup, and jumping out of it would avoid doing the cleanup. In both
  cases the result is a broken exception facility.
  
  The B<ex_catch> block is a regular ISO-C language block without any
  restrictions.
  
  =item B<ex_throw>(I<class>, I<object>, I<value>);
  
  This is second main construct. It builds an exception from the supplied
  arguments and throws it. If an B<ex_try>/B<ex_catch> clause exists in
  the dynamic scope of the B<ex_throw> call, this exception is copied into
  the I<variable> of B<ex_catch> and the program control flow is continued
  in the B<ex_catch> block. If no B<ex_try>/B<ex_catch> clause exists in
  the dynamic scope of the B<ex_throw> call, the program C<abort>(3)s. The
  B<ex_throw> can be performed everywhere, including inside B<ex_try> and
  B<ex_catch> blocks.
  
  =item B<ex_rethrow>;
  
  This is only valid within an B<ex_catch> block and re-throws
  the current exception (in I<variable>). It is similar to the
  call B<ex_throw>(I<variable>.ex_class, I<variable>.ex_object,
  I<variable>.ex_value) but with the difference that the C<ex_file>,
  C<ex_line> and C<ex_func> elements of the thrown exception are kept.
  
  =back
  
  =head1 EXAMPLE
  
   #include "ex.h"
  
   ex_t e;
  
   ex_try {
       ...
       ex_throw (..., ..., 123);
       ...
   }
   ex_catch (e) {
       ...
       if ((int)e->ex_value == 123)
           ...
       else if ((int)e->ex_value == 456)
           ...
       else
           ex_rethrow;
       ...
   }
  
  =head1 SEE ALSO
  
  C++ try/catch/throw language directives;
  setjmp(3), longjmp(3), sigsetjmp(3), siglongjmp(3).
  
  =head1 HISTORY
  
  B<OSSP ex> was invented in January 2002 by Ralf S. Engelschall for use
  inside the OSSP project. Its creation was prompted by the requirement to
  reduce the error handling inside B<OSSP lmtp2nntp>. The implementation
  is partly derived from B<cexcept> 2.0.0, a similar library written 2000
  by Adam M. Costello E<lt>amc@cs.berkeley.eduE<gt> and Cosmin Truta
  E<lt>cosmin@cs.toronto.eduE<gt>.
  
  =head1 AUTHORS
  
   Ralf S. Engelschall
   rse@engelschall.com
   www.engelschall.com
  
  =cut
  
  Index: ossp-pkg/ex/ex_test.c
  ============================================================
  $ cvs update -p -r1.1 ex_test.c
  
  #include <stdio.h>
  #include <stdlib.h>
  #include <time.h>
  
  #include "ex.h"
  
  /* === foo.h === */
  
  typedef enum {
      FOO_OK = 0,
      FOO_ERR_1,
      FOO_ERR_2,
      FOO_ERR_3
  } foo_rc_t;
  
  #define FOO_TEXAS
  
  #ifdef FOO_TEXAS
  
  #include "ex.h"
  #define FOO_ERR(err) \
       (ex_throw(FOO_CLASS, NULL, FOO_ERR_##err), FOO_ERR_##err)
  #else
  #define FOO_ERR(err) \
       (FOO_ERR_##err)
  #endif
  
  #define FOO_EX2RC(e) \
      ((foo_rc_t)((e)->ex_value))
  #define FOO_CLASS (&foo_class)
  extern int foo_class;
  
  foo_rc_t foo_func(void);
  
  /* === foo.c === */
  
  int foo_class;
  
  static int foo_sub(void)
  {
      fprintf(stderr, "mark4\n");
      if (random() % 2)
          return FOO_OK;
      return FOO_ERR(1);
  }
  
  foo_rc_t foo_func(void)
  {
      fprintf(stderr, "mark3\n");
      foo_sub();
      if (random() % 2)
          return FOO_OK;
      return FOO_ERR(2);
  }
  
  /* === test.c === */
  
  int main(int argc, char *argv[])
  {
      srandom((unsigned int)time(NULL));
      ex_t e;
      
      fprintf(stderr, "main-0\n");
      for (;;) {
          fprintf(stderr, "main-1\n");
          try {
              fprintf(stderr, "main-2\n");
              foo_func();
              fprintf(stderr, "main-3\n");
              for (;;) {
                  fprintf(stderr, "main-4\n");
                  try {
                      fprintf(stderr, "main-5\n");
                      foo_func();
                      fprintf(stderr, "main-6\n");
                  }
                  catch (e) {
                      fprintf(stderr, "main-7\n");
                      fprintf(stderr, "  %s@%s:%d class=0x%lx object=0x%lx value=0x%lx\n", 
                              e.ex_func, e.ex_file, e.ex_line, (long)e.ex_class, (long)e.ex_object, (long)e.ex_value);
                      if (e.ex_class == FOO_CLASS && (foo_rc_t)(e.ex_value) == FOO_ERR_1)
                          fprintf(stderr, "  exception handling\n");
                      else {
                          fprintf(stderr, "  exception rethrowing\n");
                          ex_rethrow;
                      }
                      fprintf(stderr, "main-8\n");
                  }
                  fprintf(stderr, "main-9\n");
              }
              fprintf(stderr, "main-10\n");
          }
          catch (e) {
              fprintf(stderr, "main-11\n");
              fprintf(stderr, "   %s@%s:%d class=0x%lx object=0x%lx value=0x%lx\n", 
                      e.ex_func, e.ex_file, e.ex_line, (long)e.ex_class, (long)e.ex_object, (long)e.ex_value);
              fprintf(stderr, "main-12\n");
          }
      }
      fprintf(stderr, "main-0\n");
      return 0;
  }
  

From ossp-cvs-owner@ossp.org  Fri Jan 25 16:30:05 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 99F8E764D8; Fri, 25 Jan 2002 16:30:05 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex ex.pod
Message-Id: <20020125153005.99F8E764D8@mail.ossp.org>
Date: Fri, 25 Jan 2002 16:30:05 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   25-Jan-2002 16:30:05
  Branch: HEAD                             Handle: 2002012515300500

  Modified files:
    ossp-pkg/ex             ex.pod

  Log:
    notice that nesting is ok, of course

  Summary:
    Revision    Changes     Path
    1.2         +2  -1      ossp-pkg/ex/ex.pod
  ____________________________________________________________________________

  Index: ossp-pkg/ex/ex.pod
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 ex.pod
  --- ossp-pkg/ex/ex.pod	25 Jan 2002 15:25:51 -0000	1.1
  +++ ossp-pkg/ex/ex.pod	25 Jan 2002 15:30:05 -0000	1.2
  @@ -148,7 +148,8 @@
   and cleanup that needs to be done by B<OSSP ex> regardless of whether an
   exception is caught. Jumping into an B<ex_try> clause would avoid doing
   the setup, and jumping out of it would avoid doing the cleanup. In both
  -cases the result is a broken exception facility.
  +cases the result is a broken exception facility. Nevertheless you are
  +allowed to nest B<ex_try> clauses.
   
   The B<ex_catch> block is a regular ISO-C language block without any
   restrictions.

From ossp-cvs-owner@ossp.org  Fri Jan 25 16:44:10 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E3B05764D8; Fri, 25 Jan 2002 16:44:09 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex .cvsignore
Message-Id: <20020125154409.E3B05764D8@mail.ossp.org>
Date: Fri, 25 Jan 2002 16:44:09 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   25-Jan-2002 16:44:09
  Branch: HEAD                             Handle: 2002012515440900

  Added files:
    ossp-pkg/ex             .cvsignore

  Log:
    ignore files

  Summary:
    Revision    Changes     Path
    1.1         +1  -0      ossp-pkg/ex/.cvsignore
  ____________________________________________________________________________

  Index: ossp-pkg/ex/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  ex_test

From ossp-cvs-owner@ossp.org  Fri Jan 25 17:02:43 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CCFE4764D8; Fri, 25 Jan 2002 17:02:42 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc acconfig.h aclocal.m4 configure.in
Message-Id: <20020125160242.CCFE4764D8@mail.ossp.org>
Date: Fri, 25 Jan 2002 17:02:42 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   25-Jan-2002 17:02:42
  Branch: HEAD                             Handle: 2002012516024200

  Added files:
    ossp-pkg/rc             acconfig.h aclocal.m4
  Modified files:
    ossp-pkg/rc             configure.in

  Log:
    Undo still more automake logic, add build system macros and autoconf logic.

  Summary:
    Revision    Changes     Path
    1.1         +1  -0      ossp-pkg/rc/acconfig.h
    1.3         +312 -0     ossp-pkg/rc/aclocal.m4
    1.4         +59 -7      ossp-pkg/rc/configure.in
  ____________________________________________________________________________

  Index: ossp-pkg/rc/acconfig.h
  ============================================================
  $ cvs update -p -r1.1 acconfig.h
  #undef DMALLOC
  Index: ossp-pkg/rc/aclocal.m4
  ============================================================
  $ cvs update -p -r1.3 aclocal.m4
  dnl ##
  dnl ##  OSSP rc - Runcommand processor
  dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  dnl ##  Copyright (c) 2002 Ralf S. Engelschall
  dnl ##
  dnl ##  This file is part of OSSP rc, a portable Runcommand processor
  dnl ##  which can be found at http://www.ossp.org/pkg/rc/
  dnl ##
  dnl ##  Permission to use, copy, modify, and distribute this software for
  dnl ##  any purpose with or without fee is hereby granted, provided that
  dnl ##  the above copyright notice and this permission notice appear in all
  dnl ##  copies.
  dnl ##
  dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  dnl ##  SUCH DAMAGE.
  dnl ##
  dnl ##  aclocal.m4: GNU Autoconf local macros
  dnl ##
  
  dnl ##
  dnl ##  Support for Platform IDs
  dnl ##
  dnl ##  configure.in:
  dnl ##    AC_PLATFORM(<variable>)
  dnl ##
  
  AC_DEFUN(AC_PLATFORM,[
  if test ".$host" != .NONE && test ".$host" != .; then
      $1="$host"
  else
      $1=`${CONFIG_SHELL-/bin/sh} $srcdir/config.guess`
  fi
  $1=`${CONFIG_SHELL-/bin/sh} $srcdir/config.sub $$1` || exit 1
  AC_SUBST($1)
  if test ".$enable_subdir" != .yes; then
      echo "Platform: ${TB}${$1}${TN}"
  fi
  ])dnl
  
  dnl ##
  dnl ##  Support for Configuration Headers
  dnl ##
  dnl ##  configure.in:
  dnl ##    AC_HEADLINE(<short-name>, <long-name>,
  dnl ##                <vers-var>, <vers-file>,
  dnl ##                <copyright>)
  dnl ##
  
  AC_DEFUN(AC_HEADLINE,[dnl
  AC_DIVERT_PUSH(NOTICE)dnl
  #   configuration header
  if test ".`echo dummy [$]@ | grep help`" = .; then
      #   bootstrapping shtool
      ac_prog=[$]0
  changequote(, )dnl
      ac_srcdir=`echo $ac_prog | sed -e 's%/[^/][^/]*$%%' -e 's%\([^/]\)/*$%\1%'`
  changequote([, ])dnl
      test ".$ac_srcdir" = ".$ac_prog" && ac_srcdir=.
      ac_shtool="$ac_srcdir/shtool"
  
      #   find out terminal sequences
      TB=`$ac_shtool echo -n -e %B 2>/dev/null`
      TN=`$ac_shtool echo -n -e %b 2>/dev/null`
  
      #   find out package version
      $3_STR="`$ac_shtool version -l c -d long $ac_srcdir/$4`"
      AC_SUBST($3_STR)
  
      #   friendly header ;)
      echo "Configuring ${TB}$1${TN} ($2), Version ${TB}${$3_STR}${TN}"
      echo "$5"
  
      #   additionally find out hex version
      $3_HEX="`$ac_shtool version -l c -d hex $ac_srcdir/$4`"
      AC_SUBST($3_HEX)
  fi
  AC_DIVERT_POP()
  ])dnl
  
  dnl ##
  dnl ##  Check whether compiler option works
  dnl ##
  dnl ##  configure.in:
  dnl ##    AC_COMPILER_OPTION(<name>, <display>, <option>,
  dnl ##                       <action-success>, <action-failure>)
  dnl ##
  
  AC_DEFUN(AC_COMPILER_OPTION,[dnl
  AC_MSG_CHECKING(whether compiler option(s) $2 work)
  AC_CACHE_VAL(ac_cv_compiler_option_$1,[
  SAVE_CFLAGS="$CFLAGS"
  CFLAGS="$CFLAGS $3"
  AC_TRY_COMPILE([],[], ac_cv_compiler_option_$1=yes, ac_cv_compiler_option_$1=no)
  CFLAGS="$SAVE_CFLAGS"
  ])dnl
  if test ".$ac_cv_compiler_option_$1" = .yes; then
      ifelse([$4], , :, [$4])
  else
      ifelse([$5], , :, [$5])
  fi
  AC_MSG_RESULT([$ac_cv_compiler_option_$1])
  ])dnl
  
  dnl ##
  dnl ##  Debugging Support
  dnl ##
  dnl ##  configure.in:
  dnl ##    AC_CHECK_DEBUGGING
  dnl ##
  
  AC_DEFUN(AC_CHECK_DEBUGGING,[dnl
  AC_ARG_ENABLE(debug,dnl
  [  --enable-debug          build for debugging (default=no)],
  [dnl
  if test ".$ac_cv_prog_gcc" = ".yes"; then
      case "$CFLAGS" in
          *-O* ) ;;
             * ) CFLAGS="$CFLAGS -O2" ;;
      esac
      case "$CFLAGS" in
          *-g* ) ;;
             * ) CFLAGS="$CFLAGS -g" ;;
      esac
      case "$CFLAGS" in
          *-pipe* ) ;;
                * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
      esac
      AC_COMPILER_OPTION(ggdb3, -ggdb3, -ggdb3, CFLAGS="$CFLAGS -ggdb3")
      CFLAGS="$CFLAGS -pedantic"
      CFLAGS="$CFLAGS -Wall"
      WMORE="-Wshadow -Wpointer-arith -Wcast-align -Winline"
      WMORE="$WMORE -Wmissing-prototypes -Wmissing-declarations -Wnested-externs"
      AC_COMPILER_OPTION(wmore, -W<xxx>, $WMORE, CFLAGS="$CFLAGS $WMORE")
      AC_COMPILER_OPTION(wnolonglong, -Wno-long-long, -Wno-long-long, CFLAGS="$CFLAGS -Wno-long-long")
  else
      case "$CFLAGS" in
          *-g* ) ;;
             * ) CFLAGS="$CFLAGS -g" ;;
      esac
  fi
  msg="enabled"
  dnl AC_DEFINE(DEBUG)
  ],[
  if test ".$ac_cv_prog_gcc" = ".yes"; then
  case "$CFLAGS" in
      *-pipe* ) ;;
            * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
  esac
  fi
  case "$CFLAGS" in
      *-g* ) CFLAGS=`echo "$CFLAGS" |\
                     sed -e 's/ -g / /g' -e 's/ -g$//' -e 's/^-g //g' -e 's/^-g$//'` ;;
  esac
  case "$CXXFLAGS" in
      *-g* ) CXXFLAGS=`echo "$CXXFLAGS" |\
                       sed -e 's/ -g / /g' -e 's/ -g$//' -e 's/^-g //g' -e 's/^-g$//'` ;;
  esac
  msg=disabled
  ])dnl
  AC_MSG_CHECKING(for compilation debug mode)
  AC_MSG_RESULT([$msg])
  if test ".$msg" = .enabled; then
      enable_shared=no
  fi
  ])
  
  define(AC_IFALLYES,[dnl
  ac_rc=yes
  for ac_spec in $1; do
      ac_type=`echo "$ac_spec" | sed -e 's/:.*$//'`
      ac_item=`echo "$ac_spec" | sed -e 's/^.*://'`
      case $ac_type in
          header [)]
              ac_item=`echo "$ac_item" | sed 'y%./+-%__p_%'`
              ac_var="ac_cv_header_$ac_item"
              ;;
          file [)]
              ac_item=`echo "$ac_item" | sed 'y%./+-%__p_%'`
              ac_var="ac_cv_file_$ac_item"
              ;;
          func    [)] ac_var="ac_cv_func_$ac_item"   ;;
          lib     [)] ac_var="ac_cv_lib_$ac_item"    ;;
          define  [)] ac_var="ac_cv_define_$ac_item" ;;
          typedef [)] ac_var="ac_cv_typedef_$ac_item" ;;
          custom  [)] ac_var="$ac_item" ;;
      esac
      eval "ac_val=\$$ac_var"
      if test ".$ac_val" != .yes; then
          ac_rc=no
          break
      fi
  done
  if test ".$ac_rc" = .yes; then
      :
      $2
  else
      :
      $3
  fi
  ])
  
  
  dnl ##
  dnl ##  Check for an external/extension library.
  dnl ##  - is aware of <libname>-config style scripts
  dnl ##  - searches under standard paths include, lib, etc.
  dnl ##  - searches under subareas like .libs, etc.
  dnl ##
  dnl ##  configure.in:
  dnl ##      AC_CHECK_EXTLIB(<realname>, <libname>, <func>, <header>,
  dnl ##                      [<success-action> [, <fail-action>]])
  dnl ##  Makefile.in:
  dnl ##      CFLAGS  = @CFLAGS@
  dnl ##      LDFLAGS = @LDFLAGS@
  dnl ##      LIBS    = @LIBS@
  dnl ##  shell:
  dnl ##      $ ./configure --with-<libname>[=DIR]
  dnl ##
  
  AC_DEFUN(AC_CHECK_EXTLIB,[dnl
  AC_ARG_WITH($2, [dnl
  [  --with-]$2[[=DIR]        build with external $1 library (default=no)]], [dnl
      if test ".$with_$2" = .yes; then
          #   via config script
          $2_version=`($2-config --version) 2>/dev/null`
          if test ".$$2_version" != .; then
              CPPFLAGS="$CPPFLAGS `$2-config --cflags`"
              CFLAGS="$CFLAGS `$2-config --cflags`"
              LDFLAGS="$LDFLAGS `$2-config --ldflags`"
          fi
      else
          if test -d "$with_$2"; then
              found=0
              #   via config script
              for dir in $with_$2/bin $with_$2; do
                  if test -f "$dir/$2-config"; then
                      $2_version=`($dir/$2-config --version) 2>/dev/null`
                      if test ".$$2_version" != .; then
                          CPPFLAGS="$CPPFLAGS `$dir/$2-config --cflags`"
                          CFLAGS="$CFLAGS `$dir/$2-config --cflags`"
                          LDFLAGS="$LDFLAGS `$dir/$2-config --ldflags`"
                          found=1
                          break
                      fi
                  fi
              done
              #   via standard paths
              if test ".$found" = .0; then
                  for dir in $with_$2/include/$2 $with_$2/include $with_$2; do
                      if test -f "$dir/$4"; then
                          CPPFLAGS="$CPPFLAGS -I$dir"
                          CFLAGS="$CFLAGS -I$dir"
                          found=1
                          break
                      fi
                  done
                  for dir in $with_$2/lib/$2 $with_$2/lib $with_$2; do
                      if test -f "$dir/lib$2.a" -o -f "$dir/lib$2.so"; then
                          LDFLAGS="$LDFLAGS -L$dir"
                          found=1
                          break
                      fi
                  done
              fi
              #   in any subarea
              if test ".$found" = .0; then
  changequote(, )dnl
                  for file in x `find $with_$2 -name "$4" -type f -print`; do
                      test .$file = .x && continue
                      dir=`echo $file | sed -e 's;[[^/]]*$;;' -e 's;\(.\)/$;\1;'`
                      CPPFLAGS="$CPPFLAGS -I$dir"
                      CFLAGS="$CFLAGS -I$dir"
                  done
                  for file in x `find $with_$2 -name "lib$2.[[aso]]" -type f -print`; do
                      test .$file = .x && continue
                      dir=`echo $file | sed -e 's;[[^/]]*$;;' -e 's;\(.\)/$;\1;'`
                      LDFLAGS="$LDFLAGS -L$dir"
                  done
  changequote([, ])dnl
              fi
          fi
      fi
      AC_HAVE_HEADERS($4)
      AC_CHECK_LIB($2, $3)
      AC_IFALLYES(header:$4 lib:$2_$3, with_$2=yes, with_$2=no)
      if test ".$with_$2" = .no; then
          AC_ERROR([Unable to find $1 library])
      fi
      ], [dnl
  if test ".$with_$2" = .; then
      with_$2=no
  fi
      ])dnl
  AC_MSG_CHECKING(whether to build against external $1 library)
  if test ".$with_$2" = .yes; then
      ifelse([$5], , :, [$5])
  else
      ifelse([$6], , :, [$6])
  fi
  AC_MSG_RESULT([$with_$2])
  ])dnl
  Index: ossp-pkg/rc/configure.in
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 configure.in
  --- ossp-pkg/rc/configure.in	17 Jan 2002 15:47:10 -0000	1.3
  +++ ossp-pkg/rc/configure.in	25 Jan 2002 16:02:42 -0000	1.4
  @@ -32,23 +32,75 @@
   AC_PREREQ(2.52)dnl
   AC_REVISION(1.0)
   
  -dnl Process this file with autoconf to produce a configure script
  +dnl Announce the product and version
  +AC_DIVERT_PUSH(NOTICE)
  +V=`./shtool version -lc -dlong version.c`
  +./shtool echo -e "Configuring %BOSSP rc%b, Version %B${V}%b"
  +echo "Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>"
  +echo "Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>"
  +AC_DIVERT_POP()
  +
  +dnl Process this file with autoconf
   AC_INIT(rc.h)
  -AM_INIT_AUTOMAKE(rc, 0.0.1)
  -AM_CONFIG_HEADER(config.h)
  +AC_CONFIG_HEADER(config.h)
   AC_LANG_C
   
  -dnl Checks requirements
  +dnl Checks basic requirements
   AC_PROG_CC
  -AM_PROG_LIBTOOL
  -AM_PROG_CC_STDC
  +AC_PROG_CPP
  +AC_PROG_CC_STDC
   AC_HEADER_STDC
   AC_PROG_INSTALL
   
  +dnl Check other requirements
  +AC_SET_MAKE
  +AC_PROG_CC
  +AC_PROG_CPP
  +AC_CHECK_DEBUGGING
  +AC_CHECK_LIB(socket, getprotobyname)
  +AC_CHECK_LIB(nsl, gethostbyname)
  +AC_CHECK_FUNCS(inet_pton inet_aton)
  +AC_CHECK_FUNCS(setsid)
  +AC_CHECK_HEADERS(sys/termios.h)
  +
  +dnl Check for Dmalloc library
  +AC_CHECK_EXTLIB([Dmalloc],
  +                dmalloc, dmalloc_debug, dmalloc.h,
  +                AC_DEFINE(DMALLOC))
  +
  +dnl Check for OSSP Str library
  +AC_CHECK_EXTLIB([OSSP Str],
  +                str, str_parse, str.h,
  +                [SUBDIR_STR=""],
  +                [SUBDIR_STR="rc_str"
  +                 CPPFLAGS="$CPPFLAGS -Irc_str"
  +                 CFLAGS="$CFLAGS -Irc_str"
  +                 LDFLAGS="$LDFLAGS -Lrc_str/.libs"
  +                 LIBS_EXTRA="$LIBS_EXTRA -lstr"])
  +AC_SUBST(SUBDIR_STR)
  +
  +dnl Check for OSSP Var library
  +AC_CHECK_EXTLIB([OSSP Var],
  +                var, var_expand, var.h,
  +                [SUBDIR_VAR=""],
  +                [SUBDIR_VAR="rc_var"
  +                 CPPFLAGS="$CPPFLAGS -Irc_var"
  +                 CFLAGS="$CFLAGS -Irc_var"
  +                 LDFLAGS="$LDFLAGS -Lrc_var/.libs"
  +                 LIBS_EXTRA="$LIBS_EXTRA -lvar"])
  +AC_SUBST(SUBDIR_VAR)
  +
  +dnl Extra library handling
  +LIBS="$LIBS $LIBS_EXTRA"
  +
  +dnl Call other configure scripts
  +AC_CONFIG_SUBDIRS([$SUBDIR_STR $SUBDIR_VAR])
  +
   dnl Make all the necessary Makefiles
  +#AC_CONFIG_FILES(Makefile)
   AC_OUTPUT(Makefile)
   
  -dnl Remove me
  +dnl Remove these placeholders
   AC_PATH_PROG(FLEX, flex, true)
   AC_CHECK_LIB(nsl, gethostname)
   AC_CHECK_LIB(socket, accept)

From ossp-cvs-owner@ossp.org  Fri Jan 25 17:04:41 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 95906764D8; Fri, 25 Jan 2002 17:04:41 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc 00TODO rc.conf rc.example
Message-Id: <20020125160441.95906764D8@mail.ossp.org>
Date: Fri, 25 Jan 2002 17:04:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   25-Jan-2002 17:04:41
  Branch: HEAD                             Handle: 2002012516044100

  Modified files:
    ossp-pkg/rc             00TODO rc.conf rc.example

  Log:
    Added detail to examples, and studied of abstract syntax in rc.files and
    rc.conf.

  Summary:
    Revision    Changes     Path
    1.9         +8  -1      ossp-pkg/rc/00TODO
    1.2         +6  -6      ossp-pkg/rc/rc.conf
    1.2         +58 -16     ossp-pkg/rc/rc.example
  ____________________________________________________________________________

  Index: ossp-pkg/rc/00TODO
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 00TODO
  --- ossp-pkg/rc/00TODO	24 Jan 2002 17:47:47 -0000	1.8
  +++ ossp-pkg/rc/00TODO	25 Jan 2002 16:04:41 -0000	1.9
  @@ -13,8 +13,15 @@
     If a variable is defined for which no default exists, warn user (Scholli.)
     Avoid a silent failure when giving non-existent run commands (Marcus.)
   
  +Possible problems
  +  Abstract syntax of rc.file identifiers
  +    Need to recognize language syntax, i.e. set, block von XML?
  +    Is a regex enough to describe a syntax or do we need more?
  +    Cases XML, M4, asn.1, ...
  +
   Automated environment
  -  Solve problem discussed at OpenPKG eval meeting.
  +  Stock rc.func includes AddPath, DelPath, PermMask.
  +  Reccommended .bashrc includes rcEnter() and rcExit().
   
   Error handling
     Classic error, give 'restart' command in place of 'start' to stopped prog
  Index: ossp-pkg/rc/rc.conf
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 rc.conf
  --- ossp-pkg/rc/rc.conf	24 Jan 2002 17:47:47 -0000	1.1
  +++ ossp-pkg/rc/rc.conf	25 Jan 2002 16:04:41 -0000	1.2
  @@ -12,18 +12,18 @@
   #silent
   debug
   #raw
  +
   defaultsection  config          #name for config section in rcfile
   commonsection   common          #name for common section in rcfile
  -refsymbol       &               #can be @ or any unreserved ASCII symbol
   rcfile          'rc.%s'         #'rc.' followed by the program name
   rcumask         002             #mask checked against rcfile permissions
   deactivate      OSSP_RC_DEACT   #environment variable controls activation
  +interpreter     /usr/bin/perl   #command interpreter to use for script code
   
  -# The following regex options need explanation
  -regex-section   '(?<=^|\n)%%%s\s*\n(.+?)(?=\n%\S+|$)'
  -regex-param     '..'
  -regex-reference '(?<=^|\n)%%%s\s*(.+?)(?=\n|;)'
  -regex-config    '(\s+)=(.*)$'
  +regex-sec       '(?<=^|\n)%%%s\s*\n(.+?)(?=\n%\S+|$)'
  +regex-ref       '(?<=^|\n)%%%s\s*(.+?)(?=\n|;)'
  +regex-assign    '(\s+)=(.*)$'
  +regex-param     '..'            #needs explanation
   
   #### Exclusive options ####
   #help
  Index: ossp-pkg/rc/rc.example
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 rc.example
  --- ossp-pkg/rc/rc.example	24 Jan 2002 17:47:47 -0000	1.1
  +++ ossp-pkg/rc/rc.example	25 Jan 2002 16:04:41 -0000	1.2
  @@ -2,11 +2,39 @@
   ##  rc.example
   ##
   
  -#  Generic run commands for example daemon. #
  -#  Using custom symbols and identifiers.    #
  +#  Generic run commands for example daemon. Using #
  +#  default symbols and conventional identifiers.  #
  +
  +%confvars
  +    sftpd_enable="yes"
  +    sftpd_interpreter="/usr/bin/sh"
  +    sftpd_anonymous="yes"
  +    sftpd_flags=""
  +
  +%start -p 200 -u root
  +    /usr/local/sbin/sftpd -c
  +
  +%stop -p 200 -u root
  +    kill -TERM `cat /var/sftp/run/sftpd.pid` 
  +
  +%reload -u root
  +    kill -HUP `cat /var/sftp/run/sftpd.pid` 
  +
  +%restart -u root
  +    @stop       # reference to term section
  +    sleep 2
  +    @start      # reference to start section
  +
  +%status -c /usr/bin/perl
  +    print STDERR "Sftpd status report";
  +    for ...
  +
  +#  Generic run commands for example daemon. Using   #
  +#  custom symbols and unconventional identifiers.   #
   
   !confvars
       sftpd_enable="yes"
  +    sftpd_interpreter="/usr/bin/sh"
       sftpd_anonymous="yes"
       sftpd_flags=""
   
  @@ -24,25 +52,39 @@
       sleep 2
       &start      # reference to start section
   
  +!status -c /usr/bin/perl
  +    print STDERR "Sftpd status report";
  +    for ...
  +
  +#  Generic run commands for example daemon. Using #
  +#  abstract syntax and conventional identifiers.  #
  +
  +<config>
  +    <set name=sftpd_enable>"yes"</set>
  +    <set name=sftpd_interpreter>"/usr/bin/sh"</set>
  +    <set name=sftpd_anonymous>"yes"</set>
  +    <set name=sftpd_flags>""</set>
  +</config>
   
  -#  Generic run commands for example daemon. #
  -#  Using default symbols and identifiers.   #
  -
  -%confvars
  -    sftpd_enable="yes"
  -    sftpd_anonymous="yes"
  -    sftpd_flags=""
  -
  -%start -p 200 -u root
  +<start pri=200 user=root>
       /usr/local/sbin/sftpd -c
  +</start>
   
  -%term -p 200 -u root
  +<stop pri=200 user=root>
       kill -TERM `cat /var/sftp/run/sftpd.pid` 
  +</stop>
   
  -%hangup -u root
  +<reload user=root>
       kill -HUP `cat /var/sftp/run/sftpd.pid` 
  +</reload>
   
  -%restart -u root
  -    @term       # reference to term section
  +<restart user=root>
  +    <refer name=stop>   # reference to term section
       sleep 2
  -    @start      # reference to start section
  +    <refer name=start>  # reference to start section
  +</restart>
  +
  +<status pri=100 interpreter=/usr/bin/perl>
  +    print STDERR "Sftpd status report";
  +    for ...
  +</status>

From ossp-cvs-owner@ossp.org  Fri Jan 25 19:31:08 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 67D36764D8; Fri, 25 Jan 2002 19:31:08 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex ex.h
Message-Id: <20020125183108.67D36764D8@mail.ossp.org>
Date: Fri, 25 Jan 2002 19:31:08 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   25-Jan-2002 19:31:08
  Branch: HEAD                             Handle: 2002012518310700

  Modified files:
    ossp-pkg/ex             ex.h

  Log:
    Allow overriding of machine context switching approach.

  Summary:
    Revision    Changes     Path
    1.2         +36 -20     ossp-pkg/ex/ex.h
  ____________________________________________________________________________

  Index: ossp-pkg/ex/ex.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 ex.h
  --- ossp-pkg/ex/ex.h	25 Jan 2002 15:25:51 -0000	1.1
  +++ ossp-pkg/ex/ex.h	25 Jan 2002 18:31:07 -0000	1.2
  @@ -23,8 +23,8 @@
   **  ex.h: exception handling (pre-processor part)
   */
   
  -#ifndef __TEXAS_H__
  -#define __TEXAS_H__
  +#ifndef __EX_H__
  +#define __EX_H__
   
   /* the required ISO-C standard facilities */
   #include <stdio.h>   /* for NULL */
  @@ -34,16 +34,31 @@
   #if (   defined(__STDC__) \
        && defined(__STDC_VERSION__) \
        && __STDC_VERSION__ >= 199901L)
  -#define __TEXAS_FUNC__ __func__      /* ISO C99 compliant */
  +#define __EX_FUNC__ __func__      /* ISO C99 compliant */
   #elif (   defined(__GNUC__) \
          && defined(__GNUC_MINOR__) \
          && (   __GNUC__ > 2 \
              || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8)))
  -#define __TEXAS_FUNC__ __FUNCTION__  /* gcc >= 2.8 */
  +#define __EX_FUNC__ __FUNCTION__  /* gcc >= 2.8 */
   #else
  -#define __TEXAS_FUNC__ "#NA#"        /* not available */
  +#define __EX_FUNC__ "#NA#"        /* not available */
   #endif
   
  +/* the machine context */
  +#ifndef __ex_mctx_st
  +#define __ex_mctx_st             struct { jmp_buf jb; }
  +#endif
  +#ifndef __ex_mctx_save
  +#define __ex_mctx_save(mctx)     setjmp((mctx)->jb)
  +#endif
  +#ifndef __ex_mctx_restore
  +#define __ex_mctx_restore(mctx)  (void)longjmp((mctx)->jb, 1)
  +#endif
  +#ifndef __ex_mctx_restored
  +#define __ex_mctx_restored(mctx) /* NOOP */
  +#endif
  +typedef __ex_mctx_st __ex_mctx_t;
  +
   /* declare the exception type (public) */
   typedef struct {
       /* throw value */
  @@ -58,7 +73,7 @@
   
   /* declare the exception context type (private) */
   typedef struct {
  -    jmp_buf      *ctx_jbprev; /* previous jump buffer */
  +    __ex_mctx_t  *ctx_mctx_prev; /* previous jump buffer */
       int           ctx_caught; /* flag whether exception was caught */
       volatile ex_t ctx_ex;     /* the exception temporary storage */
   } ex_ctx_t;
  @@ -72,11 +87,11 @@
   /* block for trying execution */
   #define ex_try \
       { \
  -        jmp_buf *__ex_jbprev; \
  -        jmp_buf __ex_jbme; \
  -        __ex_jbprev = __ex_ctx->ctx_jbprev; \
  -        __ex_ctx->ctx_jbprev = &__ex_jbme; \
  -        if (setjmp(__ex_jbme) == 0) { \
  +        __ex_mctx_t *__ex_mctx_prev; \
  +        __ex_mctx_t __ex_mctx_me; \
  +        __ex_mctx_prev = __ex_ctx->ctx_mctx_prev; \
  +        __ex_ctx->ctx_mctx_prev = &__ex_mctx_me; \
  +        if (__ex_mctx_save(&__ex_mctx_me) == 0) { \
               if (1)
   
   /* block for catching an exception */
  @@ -86,9 +101,10 @@
               __ex_ctx->ctx_caught = 0; \
           } \
           else { \
  +            __ex_mctx_restored(&__ex_mctx_me); \
               __ex_ctx->ctx_caught = 1; \
           } \
  -        __ex_ctx->ctx_jbprev = __ex_jbprev; \
  +        __ex_ctx->ctx_mctx_prev = __ex_mctx_prev; \
       } \
       if (!__ex_ctx->ctx_caught || ((e) = __ex_ctx->ctx_ex, 0)) { \
       } \
  @@ -96,39 +112,39 @@
   
   /* throw a new exception */
   #define ex_throw(c,o,v) \
  -    (__ex_ctx->ctx_jbprev == NULL ? \
  +    (__ex_ctx->ctx_mctx_prev == NULL ? \
        (abort(), 0) : \
        ( __ex_ctx->ctx_ex.ex_class  = (void *)(c), \
          __ex_ctx->ctx_ex.ex_object = (void *)(o), \
          __ex_ctx->ctx_ex.ex_value  = (void *)(v), \
          __ex_ctx->ctx_ex.ex_file   = __FILE__, \
          __ex_ctx->ctx_ex.ex_line   = __LINE__, \
  -       __ex_ctx->ctx_ex.ex_func   = __TEXAS_FUNC__, \
  -       longjmp(*(__ex_ctx->ctx_jbprev), 1), \
  +       __ex_ctx->ctx_ex.ex_func   = __EX_FUNC__, \
  +       __ex_mctx_restore(__ex_ctx->ctx_mctx_prev), \
          0 \
        ) \
       )
   
   /* re-throw a caught exception */
   #define ex_rethrow \
  -    (__ex_ctx->ctx_jbprev == NULL ? \
  +    (__ex_ctx->ctx_mctx_prev == NULL ? \
        (abort(), 0) : \
  -     (longjmp(*(__ex_ctx->ctx_jbprev), 1), 0) \
  +     (__ex_mctx_restore(__ex_ctx->ctx_mctx_prev), 0) \
       )
   
   /* optional namespace mapping */
  -#if !defined(__cplusplus) && !defined(__TEXAS_NO_CXX_NS__)
  +#if !defined(__cplusplus) && !defined(__EX_NO_CXX_NS__)
   #define try      ex_try
   #define catch    ex_catch
   #define throw    ex_throw
   #define rethrow  ex_rethrow
   #endif
  -#if !defined(__TEXAS_NO_SIMPLE_NS__)
  +#if !defined(__EX_NO_SIMPLE_NS__)
   #define Try      ex_try
   #define Catch    ex_catch
   #define Throw    ex_throw
   #define Rethrow  ex_rethrow
   #endif
   
  -#endif /* __TEXAS_H__ */
  +#endif /* __EX_H__ */
   

From ossp-cvs-owner@ossp.org  Fri Jan 25 19:32:25 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6DD5A764D8; Fri, 25 Jan 2002 19:32:25 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex TODO
Message-Id: <20020125183225.6DD5A764D8@mail.ossp.org>
Date: Fri, 25 Jan 2002 19:32:25 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   25-Jan-2002 19:32:25
  Branch: HEAD                             Handle: 2002012518322500

  Modified files:
    ossp-pkg/ex             TODO

  Log:
    done

  Summary:
    Revision    Changes     Path
    1.2         +0  -1      ossp-pkg/ex/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/ex/TODO
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 TODO
  --- ossp-pkg/ex/TODO	25 Jan 2002 15:25:51 -0000	1.1
  +++ ossp-pkg/ex/TODO	25 Jan 2002 18:32:25 -0000	1.2
  @@ -1,4 +1,3 @@
   - default handler
  -- sigsetjmp (Why can't "real" exceptions be caught?)
   - pth
   - disable throwing

From ossp-cvs-owner@ossp.org  Fri Jan 25 19:36:18 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 551B3764D8; Fri, 25 Jan 2002 19:36:18 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex ex.h
Message-Id: <20020125183618.551B3764D8@mail.ossp.org>
Date: Fri, 25 Jan 2002 19:36:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   25-Jan-2002 19:36:18
  Branch: HEAD                             Handle: 2002012518361700

  Modified files:
    ossp-pkg/ex             ex.h

  Log:
    cleanups

  Summary:
    Revision    Changes     Path
    1.3         +10 -6      ossp-pkg/ex/ex.h
  ____________________________________________________________________________

  Index: ossp-pkg/ex/ex.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 ex.h
  --- ossp-pkg/ex/ex.h	25 Jan 2002 18:31:07 -0000	1.2
  +++ ossp-pkg/ex/ex.h	25 Jan 2002 18:36:17 -0000	1.3
  @@ -49,7 +49,7 @@
   #define __ex_mctx_st             struct { jmp_buf jb; }
   #endif
   #ifndef __ex_mctx_save
  -#define __ex_mctx_save(mctx)     setjmp((mctx)->jb)
  +#define __ex_mctx_save(mctx)     (setjmp((mctx)->jb) == 0)
   #endif
   #ifndef __ex_mctx_restore
   #define __ex_mctx_restore(mctx)  (void)longjmp((mctx)->jb, 1)
  @@ -74,14 +74,18 @@
   /* declare the exception context type (private) */
   typedef struct {
       __ex_mctx_t  *ctx_mctx_prev; /* previous jump buffer */
  -    int           ctx_caught; /* flag whether exception was caught */
  -    volatile ex_t ctx_ex;     /* the exception temporary storage */
  +    int           ctx_caught;    /* flag whether exception was caught */
  +    volatile ex_t ctx_ex;        /* the exception temporary storage */
   } ex_ctx_t;
   
  -/* ex context (default requires linking against libex) */
  +/* exception context */
   #ifndef __ex_ctx
   #define __ex_ctx (&__ex_ctx_global)
  -extern ex_ctx_t __ex_ctx_global;
  +#ifdef __EX_STATIC_CTX__
  +static ex_ctx_t __ex_ctx_global; /* for very small environments */
  +#else
  +extern ex_ctx_t __ex_ctx_global; /* for non-MT environments (require libex.a) */
  +#endif
   #endif
   
   /* block for trying execution */
  @@ -91,7 +95,7 @@
           __ex_mctx_t __ex_mctx_me; \
           __ex_mctx_prev = __ex_ctx->ctx_mctx_prev; \
           __ex_ctx->ctx_mctx_prev = &__ex_mctx_me; \
  -        if (__ex_mctx_save(&__ex_mctx_me) == 0) { \
  +        if (__ex_mctx_save(&__ex_mctx_me)) { \
               if (1)
   
   /* block for catching an exception */

From ossp-cvs-owner@ossp.org  Fri Jan 25 23:23:18 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 95809764D8; Fri, 25 Jan 2002 23:23:18 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex TODO ex.h ex.pod ex_test.c
Message-Id: <20020125222318.95809764D8@mail.ossp.org>
Date: Fri, 25 Jan 2002 23:23:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   25-Jan-2002 23:23:18
  Branch: HEAD                             Handle: 2002012522231700

  Modified files:
    ossp-pkg/ex             TODO ex.h ex.pod ex_test.c

  Log:
    many many polishing and extending

  Summary:
    Revision    Changes     Path
    1.3         +3  -3      ossp-pkg/ex/TODO
    1.4         +110 -55    ossp-pkg/ex/ex.h
    1.3         +416 -17    ossp-pkg/ex/ex.pod
    1.2         +6  -2      ossp-pkg/ex/ex_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/ex/TODO
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 TODO
  --- ossp-pkg/ex/TODO	25 Jan 2002 18:32:25 -0000	1.2
  +++ ossp-pkg/ex/TODO	25 Jan 2002 22:23:17 -0000	1.3
  @@ -1,3 +1,3 @@
  -- default handler
  -- pth
  -- disable throwing
  +- devtool environment
  +- test thread examples 
  +- overhault ex_text.c
  Index: ossp-pkg/ex/ex.h
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 ex.h
  --- ossp-pkg/ex/ex.h	25 Jan 2002 18:36:17 -0000	1.3
  +++ ossp-pkg/ex/ex.h	25 Jan 2002 22:23:17 -0000	1.4
  @@ -26,9 +26,13 @@
   #ifndef __EX_H__
   #define __EX_H__
   
  -/* the required ISO-C standard facilities */
  -#include <stdio.h>   /* for NULL */
  -#include <setjmp.h>  /* for jmp_buf, setjmp(3), longjmp(3) */
  +/* required ISO-C standard facilities */
  +#include <stdio.h>
  +
  +/* convinience define */
  +#ifndef NULL
  +#define NULL (void *)0
  +#endif
   
   /* determine how the current function name can be fetched */
   #if (   defined(__STDC__) \
  @@ -45,19 +49,30 @@
   #endif
   
   /* the machine context */
  -#ifndef __ex_mctx_st
  -#define __ex_mctx_st             struct { jmp_buf jb; }
  -#endif
  -#ifndef __ex_mctx_save
  +#if defined(__EX_MCTX_USE_MCSC__)
  +#include <ucontext.h>            /* POSIX.1 ucontext(3) */
  +#define __ex_mctx_struct         ucontext_t uc; 
  +#define __ex_mctx_save(mctx)     (getcontext(&(mctx)->uc) == 0)
  +#define __ex_mctx_restored(mctx) /* noop */
  +#define __ex_mctx_restore(mctx)  (void)setcontext(&(mctx)->uc)
  +
  +#elif defined(__EX_MCTX_USE_SSJLJ__)
  +#include <setjmp.h>              /* POSIX.1 sigjmp_buf(3) */
  +#define __ex_mctx_struct         sigjmp_buf jb;
  +#define __ex_mctx_save(mctx)     (sigsetjmp((mctx)->jb, 1) == 0)
  +#define __ex_mctx_restored(mctx) /* noop */
  +#define __ex_mctx_restore(mctx)  (void)siglongjmp((mctx)->jb, 1)
  +
  +#elif defined(__EX_MCTX_USE_SJLJ__) || !defined(__EX_MCTX_USE_CUSTOM__)
  +#include <setjmp.h>              /* ISO C jmp_buf(3) */
  +#define __ex_mctx_struct         jmp_buf jb;
   #define __ex_mctx_save(mctx)     (setjmp((mctx)->jb) == 0)
  -#endif
  -#ifndef __ex_mctx_restore
  +#define __ex_mctx_restored(mctx) /* noop */
   #define __ex_mctx_restore(mctx)  (void)longjmp((mctx)->jb, 1)
   #endif
  -#ifndef __ex_mctx_restored
  -#define __ex_mctx_restored(mctx) /* NOOP */
  -#endif
  -typedef __ex_mctx_st __ex_mctx_t;
  +
  +/* declare the machine context type */
  +typedef struct { __ex_mctx_struct } __ex_mctx_t;
   
   /* declare the exception type (public) */
   typedef struct {
  @@ -71,34 +86,65 @@
       char *ex_func;
   } ex_t;
   
  -/* declare the exception context type (private) */
  +/* declare the context type (private) */
   typedef struct {
  -    __ex_mctx_t  *ctx_mctx_prev; /* previous jump buffer */
  -    int           ctx_caught;    /* flag whether exception was caught */
  -    volatile ex_t ctx_ex;        /* the exception temporary storage */
  +    __ex_mctx_t  *ctx_mctx;      /* permanent machine context of enclosing try/catch */
  +    int           ctx_disabled;  /* permanent flag whether exception handling is disabled */
  +    int           ctx_caught;    /* temporary flag whether exception was caught */
  +    volatile ex_t ctx_ex;        /* temporary exception storage */
   } ex_ctx_t;
   
  -/* exception context */
  -#ifndef __ex_ctx
  +/* the static and dynamic initializers for a context structure */
  +#define EX_CTX_INITIALIZER \
  +    { NULL, 0, 0, { NULL, NULL, NULL, NULL, 0, NULL } }
  +#define EX_CTX_INITIALIZE(ctx) \
  +    do { \
  +        (ctx)->ctx_mctx         = NULL; \
  +        (ctx)->ctx_disabled     = 0;    \
  +        (ctx)->ctx_caught       = 0;    \
  +        (ctx)->ctx_ex.ex_class  = NULL; \
  +        (ctx)->ctx_ex.ex_object = NULL; \
  +        (ctx)->ctx_ex.ex_value  = NULL; \
  +        (ctx)->ctx_ex.ex_file   = NULL; \
  +        (ctx)->ctx_ex.ex_line   = 0;    \
  +        (ctx)->ctx_ex.ex_func   = NULL; \
  +    } while (0)
  +
  +/* the exception context */
  +#if defined(__EX_CTX_USE_STATIC__)
  +static ex_ctx_t __ex_ctx_global;
  +#define __ex_ctx (&__ex_ctx_global)
  +#elif defined(__EX_CTX_USE_GLOBAL__) || !(__EX_CTX_USE_CUSTOM__)
  +#define EX_CTX_GLOBAL ex_ctx_t __ex_ctx_global;
  +extern ex_ctx_t __ex_ctx_global;
   #define __ex_ctx (&__ex_ctx_global)
  -#ifdef __EX_STATIC_CTX__
  -static ex_ctx_t __ex_ctx_global; /* for very small environments */
  -#else
  -extern ex_ctx_t __ex_ctx_global; /* for non-MT environments (require libex.a) */
   #endif
  +
  +/* the termination handler */
  +#if defined(__EX_TERMINATE_USE_NOOP__)
  +#define __ex_terminate(e) \
  +    /* noop */
  +#elif defined(__EX_TERMINATE_USE_ABORT__) || !(__EX_CTX_USE_CUSTOM__)
  +#define __ex_terminate(e) \
  +    ( fprintf(stderr, \
  +              "**EX: UNCAUGHT EXCEPTION: " \
  +              "class=0x%lx object=0x%lx value=0x%lx [%s:%d@%s]\n", \
  +              (long)((e)->ex_class), (long)((e)->ex_object), (long)((e)->ex_value), \
  +              (e)->ex_file, (e)->ex_line, (e)->ex_func), \
  +     abort() )
   #endif
   
  -/* block for trying execution */
  +/* the block for trying execution */
   #define ex_try \
       { \
  -        __ex_mctx_t *__ex_mctx_prev; \
  +        __ex_mctx_t *__ex_mctx_en; \
           __ex_mctx_t __ex_mctx_me; \
  -        __ex_mctx_prev = __ex_ctx->ctx_mctx_prev; \
  -        __ex_ctx->ctx_mctx_prev = &__ex_mctx_me; \
  +        __ex_mctx_en = __ex_ctx->ctx_mctx; \
  +        __ex_ctx->ctx_mctx = &__ex_mctx_me; \
           if (__ex_mctx_save(&__ex_mctx_me)) { \
               if (1)
   
  -/* block for catching an exception */
  +/* the block for catching an exception */
   #define ex_catch(e) \
               else { \
               } \
  @@ -108,46 +154,55 @@
               __ex_mctx_restored(&__ex_mctx_me); \
               __ex_ctx->ctx_caught = 1; \
           } \
  -        __ex_ctx->ctx_mctx_prev = __ex_mctx_prev; \
  +        __ex_ctx->ctx_mctx = __ex_mctx_en; \
       } \
  -    if (!__ex_ctx->ctx_caught || ((e) = __ex_ctx->ctx_ex, 0)) { \
  +    if (   !(__ex_ctx->ctx_caught) \
  +        || ((e) = __ex_ctx->ctx_ex, 0)) { \
       } \
       else
   
  -/* throw a new exception */
  +/* the throwing of a new exception */
   #define ex_throw(c,o,v) \
  -    (__ex_ctx->ctx_mctx_prev == NULL ? \
  -     (abort(), 0) : \
  -     ( __ex_ctx->ctx_ex.ex_class  = (void *)(c), \
  -       __ex_ctx->ctx_ex.ex_object = (void *)(o), \
  -       __ex_ctx->ctx_ex.ex_value  = (void *)(v), \
  -       __ex_ctx->ctx_ex.ex_file   = __FILE__, \
  -       __ex_ctx->ctx_ex.ex_line   = __LINE__, \
  -       __ex_ctx->ctx_ex.ex_func   = __EX_FUNC__, \
  -       __ex_mctx_restore(__ex_ctx->ctx_mctx_prev), \
  -       0 \
  -     ) \
  -    )
  +    (__ex_ctx->ctx_disabled ? 0 : \
  +     (__ex_ctx->ctx_ex.ex_class  = (void *)(c), \
  +      __ex_ctx->ctx_ex.ex_object = (void *)(o), \
  +      __ex_ctx->ctx_ex.ex_value  = (void *)(v), \
  +      __ex_ctx->ctx_ex.ex_file   = __FILE__, \
  +      __ex_ctx->ctx_ex.ex_line   = __LINE__, \
  +      __ex_ctx->ctx_ex.ex_func   = __EX_FUNC__, \
  +      (  __ex_ctx->ctx_mctx == NULL \
  +       ? (__ex_terminate(&(__ex_ctx->ctx_ex)), -1) \
  +       : (__ex_mctx_restore(__ex_ctx->ctx_mctx), 1) )))
   
  -/* re-throw a caught exception */
  +/* the re-throwing of an already caught exception */
   #define ex_rethrow \
  -    (__ex_ctx->ctx_mctx_prev == NULL ? \
  -     (abort(), 0) : \
  -     (__ex_mctx_restore(__ex_ctx->ctx_mctx_prev), 0) \
  -    )
  +    (__ex_ctx->ctx_disabled ? 0 : \
  +      (__ex_ctx->ctx_mctx == NULL ? (__ex_terminate(&(__ex_ctx->ctx_ex)), -1) : \
  +        (__ex_mctx_restore(__ex_ctx->ctx_mctx), 1) ))
  +
  +/* shield an operation from exception handling */
  +#define ex_shield \
  +    for (__ex_ctx->ctx_disabled = 1; \
  +         __ex_ctx->ctx_disabled == 1; \
  +         __ex_ctx->ctx_disabled = 0)
  +#define ex_shielded \
  +        (__ex_ctx->ctx_disabled)
   
   /* optional namespace mapping */
  -#if !defined(__cplusplus) && !defined(__EX_NO_CXX_NS__)
  -#define try      ex_try
  -#define catch    ex_catch
  -#define throw    ex_throw
  -#define rethrow  ex_rethrow
  -#endif
  -#if !defined(__EX_NO_SIMPLE_NS__)
  +#if defined(__EX_NS_USE_UCCXX__)
   #define Try      ex_try
   #define Catch    ex_catch
   #define Throw    ex_throw
   #define Rethrow  ex_rethrow
  +#define Shield   ex_shield
  +#define Shielded ex_shielded
  +#elif defined(__EX_NS_USE_CXX__) || (!defined(__cplusplus) && !defined(__EX_NS_USE_CUSTOM__))
  +#define try      ex_try
  +#define catch    ex_catch
  +#define throw    ex_throw
  +#define rethrow  ex_rethrow
  +#define shield   ex_shield
  +#define shielded ex_shielded
   #endif
   
   #endif /* __EX_H__ */
  Index: ossp-pkg/ex/ex.pod
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 ex.pod
  --- ossp-pkg/ex/ex.pod	25 Jan 2002 15:30:05 -0000	1.2
  +++ ossp-pkg/ex/ex.pod	25 Jan 2002 22:23:17 -0000	1.3
  @@ -39,6 +39,10 @@
   
   B<ex_rethrow>;
   
  +B<ex_shield> { ... };
  +
  +if (B<ex_shielded>) ...
  +
   =head1 DESCRIPTION
   
   B<OSSP ex> is a small ISO-C++ style exception handling library for use
  @@ -173,30 +177,424 @@
   I<variable>.ex_value) but with the difference that the C<ex_file>,
   C<ex_line> and C<ex_func> elements of the thrown exception are kept.
   
  +=item B<ex_shield> { ... }
  +
  +This directive executes its block while shielding against the throwing
  +of exceptions, i.e., in the dynamic scope of B<ex_shield> any
  +B<ex_throw> operation is ignored. 
  +
  +=item B<ex_shielded>
  +
  +This is a flag which can be tested inside a block to test whether the
  +current scope is exception shielded (by B<ex_shield> somewhere in the
  +dynamic scope) or not.
  +
  +=back
  +
  +=head1 IMPLEMENTATION CONTROL
  +
  +B<OSSP ex> uses a very light-weight but still flexible exception
  +facility implementation. The following adjustments can be made before
  +including the F<ex.h> header:
  +
  +=head2 Machine Context
  +
  +In order to move the program control flow from the exception throw point
  +(B<ex_throw>) to the catch point (B<ex_catch>), B<OSSP ex> uses four
  +macros:
  +
  +=over 4
  +
  +=item B<__ex_mctx_struct>
  +
  +This is the contents of the machine context structure. A pointer to such
  +a machine context is passed to the following macros as I<mctx>. 
  +
  +=item B<__ex_mctx_save>(I<mctx>)
  +
  +This is called by the prolog of B<ex_try> to save the current machine
  +context in I<mctx>. This function has to return true (not C<0>) after
  +saving. If the machine context is restored (by B<__ex_mctx_restore>) it
  +has to return false (C<0>).
  +
  +=item B<__ex_mctx_restored>(I<mctx>)
  +
  +This is called by the epilog of B<ex_try> to perform additional
  +operations at the new (restored) machine context after an exception was
  +cought. Usually this is a no-operation macro.
  +
  +=item B<__ex_mctx_restore>(I<mctx>)
  +
  +This is called by B<ex_throw> at the old machine context in order to
  +restore the machine context of the B<ex_try>/B<ex_catch> clause which
  +will catch the exception.
  +
   =back
   
  -=head1 EXAMPLE
  +The default implementation (define C<__EX_MCTX_USE_SJLJ__> or as long
  +C<__EX_MCTX_USE_CUSTOM__> is not defined) uses B<ISO C> jmp_buf(3):
   
  + #define __ex_mctx_struct         jmp_buf jb;
  + #define __ex_mctx_save(mctx)     (setjmp((mctx)->jb) == 0)
  + #define __ex_mctx_restored(mctx) /* noop */
  + #define __ex_mctx_restore(mctx)  (void)longjmp((mctx)->jb, 1)
  +
  +Alternatively one can define C<__EX_MCTX_USE_SSJLJ__> to use B<POSIX.1>
  +sigjmp_buf(3) and C<__EX_MCTX_USE_MCSC__> to use B<POSIX.1> ucontext(3).
  +For using a custom implementation define C<__EX_MCTX_USE_CUSTOM__> and
  +provide own macro definitions for the four B<__ex_mctx_xxxx>.
  +
  +=head2 Exception Context
  +
  +In order to maintain the exception catching stack and for passing the
  +exception between the throw point and the catch point, B<OSSP ex> uses
  +a global exception context macro B<__ex_ctx> holding a pointer to a
  +structure of type B<ex_ctx_t>. This is a private data structure and
  +should be treated as opaque by the user. 
  +
  +By default (define C<__EX_CTX_USE_GLOBAL__> or as long as
  +C<__EX_CTX_USE_CUSTOM__> is not defined) this references a global
  +variable C<__ex_ctx_global>. This variable is either defined by the user
  +by placing the directive "C<EX_CTX_GLOBAL>" macro somewhere outside of
  +any functions in the application or alternatively link the F<libex>
  +library to the application.
  +
  +Alternatively one can define C<__EX_CTX_USE_STATIC__> to get a static
  +declaration directly inside the header file (for small environments
  +where F<ex.h> is included once only) or define C<__EX_CTX_USE_CUSTOM__>
  +and provide an own macro definition for B<__ex_ctx>.
  +
  +To initialize an exception context structure there are two macros
  +defined: B<EX_CTX_INITIALIZER> for static initialization and
  +B<EX_CTX_INITIALIZE>(B<ex_ctx_t *>I<ctx>) for dynamic initialization.
  +
  +=head2 Termination Handler
  +
  +In case there is an exception thrown which is not caught by
  +any B<ex_try>/B<ex_catch> clauses, B<OSSP ex> calls the macro
  +B<__ex_terminate>(C<ex_t *>). It receives a pointer to the exception
  +object which should have been thrown.
  +
  +By default (define C<__EX_TERMINATE_USE_ABORT__> or as long as
  +C<__EX_TERMINATE_USE_CUSTOM__> is not defined) this prints a message of
  +the form "C<**EX: UNCAUGHT EXCEPTION: class=0xXXXXXXXX object=0xXXXXXXXX
  +value=0xXXXXXXX [file:123:func]>" to F<stderr> and then calls abort(3)
  +in order to terminate the application.
  +
  +Alternatively one can define C<__EX_TERMINATE_USE_NOOP__> to ignore the
  +exception or or define C<__EX_TERMINATE_USE_CUSTOM__> and provide an own
  +macro definition for B<__ex_terminate>.
  +
  +=head2 Namespace Mapping
  +
  +B<OSSP ex> implementation consistently uses the B<ex_>, B<__ex_>
  +and B<__EX_> prefixes for namespace protection. But at least the
  +B<ex_> prefix for the API macros B<ex_try>, B<ex_catch>, B<ex_throw>,
  +B<ex_rethrow>, B<ex_shield> and B<ex_shielded> sometimes have a
  +unpleasant optical appearance. Especially because B<OSSP rc> is modeled
  +after the exception facility in ISO C++ where there is no such prefix on
  +the directives.
  +
  +For this B<OSSP ex> optionally provides the ability to provide
  +additional namespace mappings for those API macros. By default (define
  +C<__EX_NS_USE_CXX__> o or as long as C<__EX_CTX_USE_CUSTOM__> and
  +C<__cplusplus> is not defined) you can additional C++ style macros
  +named B<catch>, B<throw>, B<rethrow>, B<shield> and B<shielded>. As an
  +alternative you can define C<__EX_NS_USE_UCCXX__> to get the same but
  +with an (more namespace safe) upper case first letter.
  +
  +=head1 MULTITHREADING ENVIRONMENTS
  +
  +B<OSSP ex> is designed to work both in single-threading and
  +multi-threading environments. The default is to support single-threading
  +only. But it is easy to configure B<OSSP ex> to work correctly in a
  +multi-threading environment like B<POSIX pthreads> or B<GNU pth>.
  +
  +There are two issues: which machine context to use and where to
  +store the exception context to make sure exception throwing happens
  +only within a thread and does not conflict with the regular thread
  +dispatching. Here are two examples:
  +
  +=head2 GNU pth
  +
  +Using B<OSSP ex> with B<GNU pth> is straight-forward. One just have to
  +wrap pth_init() and pth_spawn() to tie the exception facility to the
  +threading facility.
  +
  +=over 4
  +
  +=item F<pth_ex.h>
  +
  + #ifndef __PTH_EX_H__
  + #define __PTH_EX_H__
  +
  + /* include GNU pth API */
  + #include "pth.h"
  + 
  + /* configure and include OSSP ex API */
  + #define __EX_CTX_USE_CUSTOM__
  + #define __ex_ctx \
  +     (ex_ctx_t *)pth_getkey(ex_ctx_key)
  + #define __ex_terminate(e) \
  +     pth_exit(e->ex_value)
    #include "ex.h"
   
  - ex_t e;
  + int pth_init_ex(void);
  + pth_t pth_spawn_ex(pth_attr_t attr, void *(*entry)(void *), void *arg);
   
  - ex_try {
  + #ifndef PTH_EX_C
  + #define pth_init  pth_ex_init
  + #define pth_spawn pth_ex_spawn
  + #endif
  +
  + #endif /* __PTH_EX_H__ */
  +
  +=item F<pth_ex.c>
  +
  + #define PTH_EX_C
  + #include "pth_ex.h"
  +
  + /* context storage key */
  + static pth_key_t ex_ctx_key;
  +
  + /* context destructor */
  + void ex_ctx_destroy(void *data)
  + {
  +     if (data != NULL)
  +         free(data);
  +     return;
  + }
  +
  + /* pth_init() wrapper */
  + int pth_init_ex(void)
  + {
  +     int rc;
  +
  +     rc = pth_init();
  +     pth_key_create(&ex_ctx_key, ex_ctx_destroy);
  +     return rc;
  + }
  +
  + /* internal thread entry wrapper information */
  + typedef struct {
  +     void *(*entry)(void *);
  +     void *arg;
  + } pth_spawn_ex_t;
  +
  + /* internal thread entry wrapper */
  + static void *pth_spawn_wrapper(void *arg)
  + {
  +     pth_spawn_ex_t *wrapper;
  +     ex_ctx_t *ex_ctx;
  +
  +     wrapper = (pth_spawn_ex_t *)arg;
  +     ex_ctx = (ex_ctx_t *)malloc(sizeof(ex_ctx_t));
  +     EX_CTX_INITIALIZE(ex_ctx);
  +     pth_key_setdata(ex_ctx_key, ex_ctx);
  +     return wrapper.entry(wrapper.arg);
  + }
  +
  + /* pth_spawn() wrapper */
  + pth_t pth_spawn_ex(pth_attr_t attr, void *(*entry)(void *), void *arg)
  + {
  +     pth_t tid;
  +     pth_spawn_ex_t wrapper;
  +
  +     wrapper.entry = entry;
  +     wrapper.arg   = arg;
  +     tid = pth_spawn(attr, pth_spawn_wrapper, &wrapper);
  +     return tid;
  + }
  +
  +=back
  +
  +=head2 POSIX pthreads
  +
  +Using B<OSSP ex> inside a B<POSIX pthreads> environment is identical to
  +using it inside B<GNU pth>. You can use the same solution as above by
  +just replacing all B<pth_> prefixes with B<pthread_> prefixes.
  +
  +=head1 EXAMPLES
  +
  +As a full real-life example we will look how you can add optional B<OSSP
  +ex> based exception handling support to a library B<foo>. The original
  +library looks like this:
  +
  +=over 2
  +
  +=item F<foo.h>
  +
  + typedef enum {
  +     FOO_OK,
  +     FOO_ERR_ARG,
  +     FOO_ERR_XXX,
  +     FOO_ERR_SYS,
  +     FOO_ERR_IMP,
        ...
  -     ex_throw (..., ..., 123);
  + } foo_rc_t;
  +
  + struct foo_st;
  + typedef struct foo_st foo_t;
  +
  + foo_rc_t foo_create  (foo_t **foo);
  + foo_rc_t foo_perform (foo_t  *foo);
  + foo_rc_t foo_destroy (foo_t  *foo);
  +
  +=item F<foo.c>
  +
  + #include "foo.h"
  +
  + struct foo_st {
        ...
    }
  - ex_catch (e) {
  -     ...
  -     if ((int)e->ex_value == 123)
  -         ...
  -     else if ((int)e->ex_value == 456)
  -         ...
  -     else
  -         ex_rethrow;
  +
  + foo_rc_t foo_create(foo_t **foo)
  + {
  +     if ((*foo = (foo_t)malloc(sizeof(foo))) == NULL)
  +         return FOO_ERR_SYS;
  +     (*foo)->... = ...
  +     return FOO_OK;
  + }
  +
  + foo_rc_t foo_perform(foo_t *foo)
  + {
  +     if (foo == NULL)
  +         return FOO_ERR_ARG;
  +     if (...)
  +         return FOO_ERR_XXX;
  +     return FOO_OK;
  + }
  +
  + foo_rc_t foo_destroy(foo_t *foo)
  + {
  +     if (foo == NULL)
  +         return FOO_ERR_ARG;
  +     free(foo);
  +     return FOO_OK;
  + }
  +
  +=back
  +
  +Then the typical usage of this library is:
  +
  + #include "foo.h"
  + ...
  + foo_t foo;
  + foo_rc_t rc;
  + ...
  + if ((rc = foo_create(&foo)) != FOO_OK)
  +     die(rc);
  + if ((rc = foo_perform(foo)) != FOO_OK)
  +     die(rc);
  + if ((rc = foo_destroy(foo)) != FOO_OK)
  +     die(rc);
  +
  +But what you really want, is to use exception handling to get rid of the
  +intermixed error handling code:
  +
  + #include "foo.h"
  + #include "ex.h"
  + ...
  + foo_t foo;
  + ex_t ex;
  + ...
  + ex_try {
  +     foo_create(&foo);
  +     foo_perform(foo);
  +     foo_destroy(foo);
  + }
  + ex_catch (ex) {
  +     die((foo_rc_t)ex->ex_value);
  + }
  +
  +You can achieve this very easily by changing the library as following:
  +
  +=over 4
  +
  +=item F<foo.h>
  +
  + ...
  + foo_rc_t foo_ex(foo_t *foo, int use);
  + ...
  +
  +=item F<foo.c>
  +
  + #include "foo.h"
  +
  + #ifdef WITH_EX
  + #include "ex.h"
  + char foo_ex_class = "foo"; /* class identifier */
  + int  foo_ex_use   = 0;     /* class disable flag */
  + #endif
  + 
  + struct foo_st {
  + #ifdef WITH_EX
  +     int ex_use; /* object disable flag */
  + #endif
        ...
    }
   
  + #ifdef WITH_EX
  + #define FOO_ERR(ctx,err) \
  +     ((   ex_shielded \
  +       || !foo_ex_use \
  +       || ((ctx) != NULL && !(ctx)->ex_use)) 
  +      ? FOO_ERR_##err \
  +      : ex_throw(&foo_ex_class, ctx, FOO_ERR_##err))
  + #else
  + #define FOO_ERR(ctx,err) \
  +      (FOO_ERR_##err)
  + #endif
  +
  + foo_rc_t foo_create(foo_t **foo)
  + {
  +     if ((*foo = (foo_t)malloc(sizeof(foo))) == NULL)
  +         return FOO_ERR(NULL, SYS);
  +     (*foo)->ex_use = 0;
  +     (*foo)->... = ...
  +     return FOO_OK;
  + }
  +
  + foo_rc_t foo_ex(foo_t *foo, int use)
  + {
  +     if (foo == NULL)
  +         return FOO_ERR(foo, ARG);
  +#ifndef WITH_EX
  +     return FOO_ERR_IMP;
  +#else
  +     foo->ex_use = use;
  +     return FOO_OK;
  +#endif
  + }
  +
  + foo_rc_t foo_perform(foo_t *foo)
  + {
  +     if (foo == NULL)
  +         return FOO_ERR(foo, ARG);
  +     if (...)
  +         return FOO_ERR(foo, XXX);
  +     return FOO_OK;
  + }
  +
  + foo_rc_t foo_destroy(foo_t *foo)
  + {
  +     if (foo == NULL)
  +         return FOO_ERR(foo, ARG);
  +     free(foo);
  +     return FOO_OK;
  + }
  +
  +=back
  +
  +This way the library by default is still exactly the same. If you now
  +compile it with C<-DWITH_EX> you build optional exception handling
  +support into it, although it is still disabled and the library behaviour
  +is the same. But if you now enable execptions via C<foo_ex(foo, 1);>
  +the library throws exceptions where C<ex_value> is the C<foo_rc_t>
  +instead of returning this value. Notice that in our example we allow the
  +enabling/disabling also on a per object basis, i.e., some B<foo> objects
  +could have exception handling enabled and others not.
  +
   =head1 SEE ALSO
   
   C++ try/catch/throw language directives;
  @@ -204,11 +602,12 @@
   
   =head1 HISTORY
   
  -B<OSSP ex> was invented in January 2002 by Ralf S. Engelschall for use
  -inside the OSSP project. Its creation was prompted by the requirement to
  -reduce the error handling inside B<OSSP lmtp2nntp>. The implementation
  -is partly derived from B<cexcept> 2.0.0, a similar library written 2000
  -by Adam M. Costello E<lt>amc@cs.berkeley.eduE<gt> and Cosmin Truta
  +<OSSP ex> was invented in January 2002 by Ralf S. Engelschall
  +for use inside the OSSP project. Its creation was prompted by
  +the requirement to reduce the error handling inside B<OSSP
  +lmtp2nntp>. The core B<try>/B<catch> clause implementation is
  +derived from B<cexcept> 2.0.0, a similar library written 2000 by
  +Adam M. Costello E<lt>amc@cs.berkeley.eduE<gt> and Cosmin Truta
   E<lt>cosmin@cs.toronto.eduE<gt>.
   
   =head1 AUTHORS
  Index: ossp-pkg/ex/ex_test.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 ex_test.c
  --- ossp-pkg/ex/ex_test.c	25 Jan 2002 15:25:51 -0000	1.1
  +++ ossp-pkg/ex/ex_test.c	25 Jan 2002 22:23:17 -0000	1.2
  @@ -60,13 +60,15 @@
   {
       srandom((unsigned int)time(NULL));
       ex_t e;
  -    
  +
       fprintf(stderr, "main-0\n");
       for (;;) {
           fprintf(stderr, "main-1\n");
           try {
               fprintf(stderr, "main-2\n");
  -            foo_func();
  +            ex_shield {
  +                foo_func();
  +            }
               fprintf(stderr, "main-3\n");
               for (;;) {
                   fprintf(stderr, "main-4\n");
  @@ -96,6 +98,8 @@
               fprintf(stderr, "   %s@%s:%d class=0x%lx object=0x%lx value=0x%lx\n", 
                       e.ex_func, e.ex_file, e.ex_line, (long)e.ex_class, (long)e.ex_object, (long)e.ex_value);
               fprintf(stderr, "main-12\n");
  +            if (e.ex_class == FOO_CLASS && (foo_rc_t)(e.ex_value) == FOO_ERR_2)
  +                break;
           }
       }
       fprintf(stderr, "main-0\n");

From ossp-cvs-owner@ossp.org  Fri Jan 25 23:23:55 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 80664764F9; Fri, 25 Jan 2002 23:23:55 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex ex.pod
Message-Id: <20020125222355.80664764F9@mail.ossp.org>
Date: Fri, 25 Jan 2002 23:23:55 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   25-Jan-2002 23:23:55
  Branch: HEAD                             Handle: 2002012522235500

  Modified files:
    ossp-pkg/ex             ex.pod

  Log:
    typo

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/ex/ex.pod
  ____________________________________________________________________________

  Index: ossp-pkg/ex/ex.pod
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 ex.pod
  --- ossp-pkg/ex/ex.pod	25 Jan 2002 22:23:17 -0000	1.3
  +++ ossp-pkg/ex/ex.pod	25 Jan 2002 22:23:55 -0000	1.4
  @@ -602,7 +602,7 @@
   
   =head1 HISTORY
   
  -<OSSP ex> was invented in January 2002 by Ralf S. Engelschall
  +B<OSSP ex> was invented in January 2002 by Ralf S. Engelschall
   for use inside the OSSP project. Its creation was prompted by
   the requirement to reduce the error handling inside B<OSSP
   lmtp2nntp>. The core B<try>/B<catch> clause implementation is

From ossp-cvs-owner@ossp.org  Sat Jan 26 21:12:21 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BC127764EB; Sat, 26 Jan 2002 21:12:20 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex .cvsignore Makefile Makefile.in README TODO VE...
Message-Id: <20020126201220.BC127764EB@mail.ossp.org>
Date: Sat, 26 Jan 2002 21:12:20 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   26-Jan-2002 21:12:20
  Branch: HEAD                             Handle: 197001010100001012072339

  Added files:
    ossp-pkg/ex             Makefile.in VERSION aclocal.m4 configure.ac
                            devtool devtool.conf devtool.func ex-config.in
                            ts.c ts.h
  Modified files:
    ossp-pkg/ex             .cvsignore README TODO ex.c ex.h
  Removed files:
    ossp-pkg/ex             Makefile

  Log:
    switch to our standard build environment

  Summary:
    Revision    Changes     Path
    1.2         +9  -0      ossp-pkg/ex/.cvsignore
    NONE        +0  -23     ossp-pkg/ex/Makefile
    1.1         +109 -0     ossp-pkg/ex/Makefile.in
    1.2         +55 -0      ossp-pkg/ex/README
    1.4         +0  -1      ossp-pkg/ex/TODO
    1.1         +6  -0      ossp-pkg/ex/VERSION
    1.1         +117 -0     ossp-pkg/ex/aclocal.m4
    1.1         +49 -0      ossp-pkg/ex/configure.ac
    1.1         +47 -0      ossp-pkg/ex/devtool
    1.1         +31 -0      ossp-pkg/ex/devtool.conf
    1.1         +72 -0      ossp-pkg/ex/devtool.func
    1.1         +145 -0     ossp-pkg/ex/ex-config.in
    1.2         +5  -3      ossp-pkg/ex/ex.c
    1.5         +5  -3      ossp-pkg/ex/ex.h
    1.1         +463 -0     ossp-pkg/ex/ts.c
    1.1         +64 -0      ossp-pkg/ex/ts.h
  ____________________________________________________________________________

  Index: ossp-pkg/ex/.cvsignore
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 .cvsignore
  --- ossp-pkg/ex/.cvsignore	25 Jan 2002 15:44:09 -0000	1.1
  +++ ossp-pkg/ex/.cvsignore	26 Jan 2002 20:12:19 -0000	1.2
  @@ -1 +1,10 @@
  +shtool
  +config.guess
  +config.sub
  +ltmain.sh
  +libtool.m4
  +configure
  +config.h.in
  +ex-config
  +config.h
   ex_test
    Index: ossp-pkg/ex/Makefile.in
  ============================================================
  $ cvs update -p -r1.1 Makefile.in
  ##
  ##  OSSP ex - Exception Handling Library
  ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  ##
  ##  This file is part of OSSP ex, an exception handling library
  ##  which can be found at http://www.ossp.org/pkg/ex/.
  ##
  ##  This program is free software; you can redistribute it and/or
  ##  modify it under the terms of the GNU General Public  License
  ##  as published by the Free Software Foundation; either version
  ##  2.0 of the License, or (at your option) any later version.
  ##
  ##  This program is distributed in the hope that it will be useful,
  ##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  ##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  ##  General Public License for more details.
  ##
  ##  You should have received a copy of the GNU General Public License
  ##  along with this file; if not, write to the Free Software
  ##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  ##  USA, or contact the OSSP project <ossp@ossp.org>.
  ##
  ##  Makefile.in: make(1) build procedure
  ##
  
  @SET_MAKE@
  
  DESTDIR     =
  prefix      = @prefix@
  exec_prefix = @exec_prefix@
  bindir      = @bindir@
  libdir      = @libdir@
  includedir  = @includedir@
  mandir      = @mandir@
  
  CC          = @CC@
  CPPFLAGS    = @CPPFLAGS@
  CFLAGS      = @DEFS@ @CFLAGS@
  LDFLAGS     = @LDFLAGS@
  LIBS        = @LIBS@
  RM          = rm -f
  RMDIR       = rmdir
  SHTOOL      = ./shtool
  LIBTOOL     = ./libtool
  TRUE        = true
  
  LIB_NAME    = libex.la
  LIB_OBJS    = ex.lo
  
  TST_NAME    = ex_test
  TST_OBJS    = ex_test.o ts.o
  
  .SUFFIXES:
  .SUFFIXES: .c .o .lo
  
  all: $(LIB_NAME) $(TST_NAME)
  
  .c.o:
  	$(CC) $(CPPFLAGS) $(CFLAGS) -c $<
  
  .c.lo:
  	@$(LIBTOOL) --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS) -c $<
  
  $(LIB_NAME): $(LIB_OBJS)
  	@$(LIBTOOL) --mode=link $(CC) -o $(LIB_NAME) $(LIB_OBJS) -rpath $(libdir) \
  	    -version-info `$(SHTOOL) version -l txt -d libtool VERSION`
  
  $(TST_NAME): $(TST_OBJS) $(LIB_NAME)
  	@$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $(TST_NAME) $(TST_OBJS) $(LIB_NAME) $(LIBS)
  
  check: $(TST_NAME)
  	@$(LIBTOOL) --mode=execute ./$(TST_NAME)
  
  install:
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(includedir)
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libdir)
  	$(SHTOOL) install -c -m 755 ex-config $(DESTDIR)$(bindir)/
  	$(SHTOOL) install -c -m 644 ex.h $(DESTDIR)$(includedir)/
  	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libex.la $(DESTDIR)$(libdir)/
  
  uninstall:
  	@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libex.la
  	-$(RM) $(DESTDIR)$(includedir)/ex.h
  	-$(RM) $(DESTDIR)$(bindir)/ex-config
  	-$(RMDIR) $(DESTDIR)$(libdir) >/dev/null 2>&1 || $(TRUE)
  	-$(RMDIR) $(DESTDIR)$(includedir) >/dev/null 2>&1 || $(TRUE)
  	-$(RMDIR) $(DESTDIR)$(bindir) >/dev/null 2>&1 || $(TRUE)
  	-$(RMDIR) $(DESTDIR)$(prefix) >/dev/null 2>&1 || $(TRUE)
  
  clean:
  	-$(RM) $(LIB_NAME) $(LIB_OBJS)
  	-$(RM) $(TST_NAME) $(TST_OBJS)
  	-$(RM) -r .libs >/dev/null 2>&1 || $(TRUE)
  	-$(RM) *.o *.lo
  
  distclean: clean
  	-$(RM) config.log config.status config.cache
  	-$(RM) Makefile config.h ex-config
  	-$(RM) libtool
  
  realclean: distclean
  	-$(RM) configure config.h.in
  	-$(RM) shtool
  	-$(RM) ltmain.sh libtool.m4 config.guess config.sub
  
  Index: ossp-pkg/ex/README
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 README
  --- ossp-pkg/ex/README	25 Jan 2002 15:25:51 -0000	1.1
  +++ ossp-pkg/ex/README	26 Jan 2002 20:12:19 -0000	1.2
  @@ -1 +1,56 @@
  +   _____  __
  +  / _ \ \/ /
  + |  __/>  < 
  +  \___/_/\_\
  +               
  +  OSSP ex - Exception Handling Library
  +  Version 0.1.0 (26-Jan-2002)
  +
  +  ABSTRACT
  +
  +  The OSSP ex library is a small ISO-C++ style exception handling
  +  library for use in the ISO-C language. It allows you to use the
  +  paradigm of throwing and catching exceptions in order to reduce the
  +  amount of error handling code in without making your program less
  +  robust. This is achieved by directly transferring exceptional return
  +  codes (and the program control flow) from the location where it was
  +  raised (throw point) to the location where it is handled (catch point)
  +  - usually from a deeply nested sub-routine to a parent routine. All
  +  intermediate routines no longer have to make sure that the exceptional
  +  return codes from sub-routines are correctly passed back to the
  +  parent.
  +
  +  COPYRIGHT AND LICENSE
  +
  +  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +
  +  This file is part of OSSP ex, an exception handling library which
  +  can be found at http://www.ossp.org/pkg/ex/.
  +
  +  Permission to use, copy, modify, and distribute this software for
  +  any purpose with or without fee is hereby granted, provided that
  +  the above copyright notice and this permission notice appear in all
  +  copies.
  +
  +  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +  SUCH DAMAGE.
  +
  +  HOME AND DOCUMENTATION
  +
  +  The documentation and latest release can be found on
  +
  +  o http://www.ossp.org/pkg/ex/
  +  o  ftp://ftp.ossp.org/pkg/ex/
   
  Index: ossp-pkg/ex/TODO
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 TODO
  --- ossp-pkg/ex/TODO	25 Jan 2002 22:23:17 -0000	1.3
  +++ ossp-pkg/ex/TODO	26 Jan 2002 20:12:19 -0000	1.4
  @@ -1,3 +1,2 @@
  -- devtool environment
   - test thread examples 
   - overhault ex_text.c
  Index: ossp-pkg/ex/VERSION
  ============================================================
  $ cvs update -p -r1.1 VERSION
  
    VERSION -- Version Information for OSSP ex (syntax: Text)
    [automatically generated and maintained by GNU shtool]
  
    This is OSSP ex, Version 0.1.0 (26-Jan-2002)
  
  Index: ossp-pkg/ex/aclocal.m4
  ============================================================
  $ cvs update -p -r1.1 aclocal.m4
  dnl ##
  dnl ##  SA - OSSP Socket Abstraction Library
  dnl ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  dnl ##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  dnl ##
  dnl ##  This file is part of OSSP SA, a socket abstraction library which
  dnl ##  can be found at http://www.ossp.org/pkg/sa/.
  dnl ##
  dnl ##  Permission to use, copy, modify, and distribute this software for
  dnl ##  any purpose with or without fee is hereby granted, provided that
  dnl ##  the above copyright notice and this permission notice appear in all
  dnl ##  copies.
  dnl ##
  dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  dnl ##  SUCH DAMAGE.
  dnl ##
  dnl ##  aclocal.m4: GNU Autoconf local macro definitions
  dnl ##
  
  dnl ##
  dnl ##  Check whether compiler option works
  dnl ##
  dnl ##  configure.in:
  dnl ##    AC_COMPILER_OPTION(<name>, <display>, <option>,
  dnl ##                       <action-success>, <action-failure>)
  dnl ##
  
  AC_DEFUN(AC_COMPILER_OPTION,[dnl
  AC_MSG_CHECKING(whether compiler option(s) $2 work)
  AC_CACHE_VAL(ac_cv_compiler_option_$1,[
  SAVE_CFLAGS="$CFLAGS"
  CFLAGS="$CFLAGS $3"
  AC_TRY_COMPILE([],[], ac_cv_compiler_option_$1=yes, ac_cv_compiler_option_$1=no)
  CFLAGS="$SAVE_CFLAGS"
  ])dnl
  if test ".$ac_cv_compiler_option_$1" = .yes; then
      ifelse([$4], , :, [$4])
  else
      ifelse([$5], , :, [$5])
  fi
  AC_MSG_RESULT([$ac_cv_compiler_option_$1])
  ])dnl
  
  dnl ##
  dnl ##  Debugging Support
  dnl ##
  dnl ##  configure.in:
  dnl ##    AC_CHECK_DEBUGGING
  dnl ##
  
  AC_DEFUN(AC_CHECK_DEBUGGING,[dnl
  AC_ARG_ENABLE(debug,dnl
  [  --enable-debug          build for debugging (default=no)],
  [dnl
  if test ".$ac_cv_prog_gcc" = ".yes"; then
      case "$CFLAGS" in
          *-O* ) ;;
             * ) CFLAGS="$CFLAGS -O2" ;;
      esac
      case "$CFLAGS" in
          *-g* ) ;;
             * ) CFLAGS="$CFLAGS -g" ;;
      esac
      case "$CFLAGS" in
          *-pipe* ) ;;
                * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
      esac
      AC_COMPILER_OPTION(defdbg, -DDEBUG, -DDEBUG, CFLAGS="$CFLAGS -DDEBUG")
      AC_COMPILER_OPTION(ggdb3, -ggdb3, -ggdb3, CFLAGS="$CFLAGS -ggdb3")
      CFLAGS="$CFLAGS -pedantic"
      CFLAGS="$CFLAGS -Wall"
      WMORE="-Wshadow -Wpointer-arith -Wcast-align -Winline"
      WMORE="$WMORE -Wmissing-prototypes -Wmissing-declarations -Wnested-externs"
      AC_COMPILER_OPTION(wmore, -W<xxx>, $WMORE, CFLAGS="$CFLAGS $WMORE")
      AC_COMPILER_OPTION(wnolonglong, -Wno-long-long, -Wno-long-long, CFLAGS="$CFLAGS -Wno-long-long")
  else
      case "$CFLAGS" in
          *-g* ) ;;
             * ) CFLAGS="$CFLAGS -g" ;;
      esac
  fi
  msg="enabled"
  ],[
  if test ".$ac_cv_prog_gcc" = ".yes"; then
  case "$CFLAGS" in
      *-pipe* ) ;;
            * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
  esac
  fi
  case "$CFLAGS" in
      *-g* ) CFLAGS=`echo "$CFLAGS" |\
                     sed -e 's/ -g / /g' -e 's/ -g$//' -e 's/^-g //g' -e 's/^-g$//'` ;;
  esac
  case "$CXXFLAGS" in
      *-g* ) CXXFLAGS=`echo "$CXXFLAGS" |\
                       sed -e 's/ -g / /g' -e 's/ -g$//' -e 's/^-g //g' -e 's/^-g$//'` ;;
  esac
  msg=disabled
  ])dnl
  AC_MSG_CHECKING(for compilation debug mode)
  AC_MSG_RESULT([$msg])
  if test ".$msg" = .enabled; then
      enable_shared=no
  fi
  ])
  
  Index: ossp-pkg/ex/configure.ac
  ============================================================
  $ cvs update -p -r1.1 configure.ac
  dnl ##
  dnl ##  OSSP ex - Exception Handling Library
  dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  dnl ##
  dnl ##  This file is part of OSSP ex, an exception handling library
  dnl ##  which can be found at http://www.ossp.org/pkg/ex/.
  dnl ##
  dnl ##  This program is free software; you can redistribute it and/or
  dnl ##  modify it under the terms of the GNU General Public  License
  dnl ##  as published by the Free Software Foundation; either version
  dnl ##  2.0 of the License, or (at your option) any later version.
  dnl ##
  dnl ##  This program is distributed in the hope that it will be useful,
  dnl ##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  dnl ##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  dnl ##  General Public License for more details.
  dnl ##
  dnl ##  You should have received a copy of the GNU General Public License
  dnl ##  along with this file; if not, write to the Free Software
  dnl ##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  dnl ##  USA, or contact the OSSP project <ossp@ossp.org>.
  dnl ##
  dnl ##  configure.ac: GNU Autoconf source script
  dnl ##
  
  AC_PREREQ(2.52)
  AC_REVISION(1.0)
  AC_INIT(README)
  
  AC_DIVERT_PUSH(NOTICE)
  V=`./shtool version -l txt -d long VERSION`
  ./shtool echo -e "Configuring %BOSSP ex%b (Exception Handling), Version %B${V}%b"
  AC_DIVERT_POP()
  
  AC_SET_MAKE
  AC_PROG_CC
  AC_CHECK_DEBUGGING
  
  sinclude(libtool.m4)
  AC_PROG_LIBTOOL
  
  AC_CONFIG_HEADERS(config.h)
  AC_CONFIG_FILES(Makefile ex-config)
  AC_OUTPUT
  
  chmod a+x ex-config
  
  Index: ossp-pkg/ex/devtool
  ============================================================
  $ cvs update -p -r1.1 devtool
  #!/bin/sh
  ##
  ##  devtool -- Development Tool
  ##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  if [ $# -eq 0 ]; then
      echo "devtool:USAGE: devtool <command> [<arg> ...]" 1>&2
      exit 1
  fi
  
  cmd="$1"
  shift
  
  devtoolfunc="./devtool.func"
  
  if [ ! -f devtool.conf ]; then
      echo "devtool:ERROR: no devtool.conf in current directory" 1>&2
      exit 1
  fi
  
  cmdline=`grep "^%$cmd" devtool.conf`
  if [ ".$cmdline" = . ]; then
      echo "devtool:ERROR: command $cmd not found in devtool.conf" 1>&2
      exit 1
  fi
  
  if [ ".$TMPDIR" != . ]; then
      tmpdir="$TMPDIR"
  elif [ ".$TEMPDIR" != . ]; then
      tmpdir="$TEMPDIR"
  else
      tmpdir="/tmp"
  fi
  tmpfile="$tmpdir/rc.$$.tmp"
  
  rm -f $tmpfile
  touch $tmpfile
  echo ". $devtoolfunc" >>$tmpfile
  ( sed <devtool.conf -e "1,/^%common/d" -e '/^%.*/,$d'
    sed <devtool.conf -e "1,/^%$cmd/d" -e '/^%.*/,$d' ) |\
  sed -e 's;\([ 	]\)@\([a-zA-Z_][a-zA-Z0-9_]*\);\1devtool_\2;' >>$tmpfile
  
  sh $tmpfile "$@"
  
  rm -f $tmpfile >/dev/null 2>&1 || true
  
  Index: ossp-pkg/ex/devtool.conf
  ============================================================
  $ cvs update -p -r1.1 devtool.conf
  ##
  ##  devtool.conf -- Development Tool Configuration
  ##
  
  %autogen
      @autogen shtool   1.5.4 "1.5.*" all
      @autogen libtool  1.4.2 "1.4*"
      @autogen autoconf 2.52  "2.5.*"
  
  %autoclean
      @autoclean shtool
      @autoclean libtool
      @autoclean autoconf
  
  %configure
      ./configure \
          --prefix=/tmp/ex \
          --disable-shared \
          --enable-debug \
          "$@"
  
  %version
      ./shtool version -l txt -n "OSSP ex" -e VERSION
  
  %dist
      make distclean >/dev/null 2>&1
      ./shtool fixperm -v .
      V=`./shtool version -l txt -d short VERSION`
      ./shtool tarball -o ex-${V}.tar.gz -d ex-${V} -u ossp -g ossp \
                       -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf' -c 'gzip --best' .
  
  Index: ossp-pkg/ex/devtool.func
  ============================================================
  $ cvs update -p -r1.1 devtool.func
  ##
  ##  devtool.func -- Development Tool Functions
  ##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  devtool_require () {
      t="$1"; o="$2"; p="$3"; e="$4"; a="$5"
      v=`($t $o | head -1 | awk "{ print \\\$$p; }") 2>/dev/null`
      if [ ".$v" = . ]; then
          echo "devtool:ERROR: unable to determine version of $t" 1>&2
          exit 1
      fi
      case "$v" in
          $e )
              ;;
          $a )
              echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
              ;;
          * )
              echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
              exit 1
              ;;
      esac
      echo "$v"
  }
  
  devtool_autogen () {
      tool=$1
      shift
      case $tool in
          autoconf )
              autoconf_version=`devtool_require autoconf --version 4 "$1" "$2"`
              echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
              autoconf
              autoheader 2>&1 | grep -v "is unchanged"
              ;;
          libtool )
              libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
              echo "generating (GNU Libtool $libtoolize_version): ltmain.sh, libtool.m4, config.guess, config.sub"
              libtoolize --force --copy >/dev/null 2>&1
              cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
                  sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` libtool.m4
              ;;
          shtool )
              shtoolize_version=`devtool_require shtoolize -v 3 "$1" "$2"`
              echo "generating (GNU Shtool $shtoolize_version): shtool"
              shift
              shift
              shtoolize -q "$@"
              ;;
      esac
  }
  
  devtool_autoclean () {
      tool=$1
      shift
      case $tool in
          autoconf )
              echo "removing: configure config.h.in"
              rm -f configure config.h.in
              ;;
          libtool )
              echo "removing: ltmain.sh libtool.m4 config.guess config.sub"
              rm -f ltmain.sh libtool.m4 config.guess config.sub
              ;;
          shtool )
              echo "removing: shtool"
              rm -f shtool
              ;;
      esac
  }
  
  Index: ossp-pkg/ex/ex-config.in
  ============================================================
  $ cvs update -p -r1.1 ex-config.in
  #!/bin/sh
  ##
  ##  OSSP ex - Exception Handling Library
  ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  ##
  ##  This file is part of OSSP ex, an exception handling library
  ##  which can be found at http://www.ossp.org/pkg/ex/.
  ##
  ##  This program is free software; you can redistribute it and/or
  ##  modify it under the terms of the GNU General Public  License
  ##  as published by the Free Software Foundation; either version
  ##  2.0 of the License, or (at your option) any later version.
  ##
  ##  This program is distributed in the hope that it will be useful,
  ##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  ##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  ##  General Public License for more details.
  ##
  ##  You should have received a copy of the GNU General Public License
  ##  along with this file; if not, write to the Free Software
  ##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  ##  USA, or contact the OSSP project <ossp@ossp.org>.
  ##
  ##  ex-config.in: library build utility
  ##
  
  DIFS=' 
  '
  
  #   tool
  tool_name="ex-config"
  
  #   library version
  lib_name="OSSP ex"
  lib_version="@EX_VERSION_STR@"
  
  #   build paths
  prefix="@prefix@"
  exec_prefix="@exec_prefix@"
  bindir="@bindir@"
  libdir="@libdir@"
  includedir="@includedir@"
  mandir="@mandir@"
  datadir="@datadir@"
  
  #   build options
  cflags="@CFLAGS@"
  ldflags="@LDFLAGS@"
  libs="@LIBS@"
  
  #   option defaults
  help=no
  version=no
  
  usage="$tool_name"
  usage="$usage [--help] [--version] [--all]"
  usage="$usage [--prefix] [--exec-prefix] [--bindir] [--libdir] [--includedir] [--mandir] [--datadir]"
  usage="$usage [--cflags] [--ldflags] [--libs]"
  if [ $# -eq 0 ]; then
      echo "$tool_name:Error: Invalid option" 1>&2
      echo "$tool_name:Usage: $usage" 1>&2
      exit 1
  fi
  output=''
  output_extra=''
  all=no
  prev=''
  OIFS="$IFS" IFS="$DIFS"
  for option
  do
      if [ ".$prev" != . ]; then
          eval "$prev=\$option"
          prev=''
          continue
      fi
      case "$option" in
          -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
             *) optarg='' ;;
      esac
      case "$option" in
          --help|-h)
              echo "Usage: $usage"
              exit 0
              ;;
          --version|-v)
              echo "$lib_name $lib_version"
              exit 0
              ;;
          --all)
              all=yes
              ;;
          --prefix)
              output="$output $prefix"
              ;;
          --exec-prefix)
              output="$output $exec_prefix"
              ;;
          --bindir)
              output="$output $bindir"
              ;;
          --libdir)
              output="$output $libdir"
              ;;
          --includedir)
              output="$output $includedir"
              ;;
          --mandir)
              output="$output $mandir"
              ;;
          --datadir)
              output="$output $datadir"
              ;;
          --cflags)
              output="$output -I$includedir"
              output_extra="$output_extra $cflags"
              ;;
          --ldflags)
              output="$output -L$libdir"
              output_extra="$output_extra $ldflags"
              ;;
          --libs)
              output="$output -lxds"
              output_extra="$output_extra $libs"
              ;;
          * )
              echo "$tool_name:Error: Invalid option" 1>&2
              echo "$tool_name:Usage: $usage" 1>&2
              exit 1;
              ;;
      esac
  done
  IFS="$OIFS"
  if [ ".$prev" != . ]; then
      echo "$tool_name:Error: missing argument to --`echo $prev | sed 's/_/-/g'`" 1>&2
      exit 1
  fi
  if [ ".$output" != . ]; then
      if [ ".$all" = .yes ]; then
          output="$output $output_extra"
      fi
      echo $output
  fi
  
  Index: ossp-pkg/ex/ex.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 ex.c
  --- ossp-pkg/ex/ex.c	25 Jan 2002 15:25:51 -0000	1.1
  +++ ossp-pkg/ex/ex.c	26 Jan 2002 20:12:19 -0000	1.2
  @@ -1,8 +1,10 @@
   /*
  -**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  OSSP ex - Exception Handling Library
  +**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
  -**  This file is part of OSSP ex, an exception library
  +**  This file is part of OSSP ex, an exception handling library
   **  which can be found at http://www.ossp.org/pkg/ex/.
   **
   **  This program is free software; you can redistribute it and/or
  Index: ossp-pkg/ex/ex.h
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 ex.h
  --- ossp-pkg/ex/ex.h	25 Jan 2002 22:23:17 -0000	1.4
  +++ ossp-pkg/ex/ex.h	26 Jan 2002 20:12:19 -0000	1.5
  @@ -1,8 +1,10 @@
   /*
  -**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  OSSP ex - Exception Handling Library
  +**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
  -**  This file is part of OSSP ex, an exception library
  +**  This file is part of OSSP ex, an exception handling library
   **  which can be found at http://www.ossp.org/pkg/ex/.
   **
   **  This program is free software; you can redistribute it and/or
  Index: ossp-pkg/ex/ts.c
  ============================================================
  $ cvs update -p -r1.1 ts.c
  /*
  **  TS - OSSP Test Suite Library
  **  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP TS, a small test suite library which
  **  can be found at http://www.ossp.org/pkg/ts/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  ts.c: test suite library
  */
  
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  #include <stdarg.h>
  
  #include "ts.h"
  
  /* embedded ring data structure library */
  #define RING_ENTRY(elem) \
      struct { elem *next; elem *prev; }
  #define RING_HEAD(elem) \
      struct { elem *next; elem *prev; }
  #define RING_SENTINEL(hp, elem, link) \
      (elem *)((char *)(hp) - ((size_t)(&((elem *)0)->link)))
  #define RING_FIRST(hp) \
      (hp)->next
  #define RING_LAST(hp) \
      (hp)->prev
  #define RING_NEXT(ep, link) \
      (ep)->link.next
  #define RING_PREV(ep, link) \
      (ep)->link.prev
  #define RING_INIT(hp, elem, link) \
      do { RING_FIRST((hp)) = RING_SENTINEL((hp), elem, link); \
           RING_LAST((hp))  = RING_SENTINEL((hp), elem, link); } while (0)
  #define RING_EMPTY(hp, elem, link) \
      (RING_FIRST((hp)) == RING_SENTINEL((hp), elem, link))
  #define RING_ELEM_INIT(ep, link) \
      do { RING_NEXT((ep), link) = (ep); \
           RING_PREV((ep), link) = (ep); } while (0)
  #define RING_SPLICE_BEFORE(lep, ep1, epN, link) \
      do { RING_NEXT((epN), link) = (lep); \
           RING_PREV((ep1), link) = RING_PREV((lep), link); \
           RING_NEXT(RING_PREV((lep), link), link) = (ep1); \
           RING_PREV((lep), link) = (epN); } while (0)
  #define RING_SPLICE_TAIL(hp, ep1, epN, elem, link) \
      RING_SPLICE_BEFORE(RING_SENTINEL((hp), elem, link), (ep1), (epN), link)
  #define RING_INSERT_TAIL(hp, nep, elem, link) \
      RING_SPLICE_TAIL((hp), (nep), (nep), elem, link)
  #define RING_FOREACH(ep, hp, elem, link) \
      for ((ep)  = RING_FIRST((hp)); \
           (ep) != RING_SENTINEL((hp), elem, link); \
           (ep)  = RING_NEXT((ep), link))
  
  /* test suite test log */
  struct tstl_st;
  typedef struct tstl_st tstl_t;
  struct tstl_st {
      RING_ENTRY(tstl_t) next;
      char              *text;
      const char        *file;
      int                line;
  };
  
  /* test suite test check */
  struct tstc_st;
  typedef struct tstc_st tstc_t;
  struct tstc_st {
      RING_ENTRY(tstc_t) next;
      char              *title;
      int                failed;
      const char        *file;
      int                line;
      RING_HEAD(tstl_t)  logs;
  };
  
  /* test suite test */
  struct ts_test_st {
      RING_ENTRY(ts_test_t)  next;
      char              *title;
      ts_test_cb_t         func;
      const char        *file;
      int                line;
      RING_HEAD(tstc_t)  checks;
  };
  
  /* test suite */
  struct ts_suite_st {
      char              *title;
      RING_HEAD(ts_test_t)   tests;
  };
  
  /* minimal output-independent vprintf(3) variant which supports %{c,s,d,%} only */
  static int ts_suite_mvxprintf(char *buffer, size_t bufsize, const char *format, va_list ap)
  {
      /* sufficient integer buffer: <available-bits> x log_10(2) + safety */
      char ibuf[((sizeof(int)*8)/3)+10]; 
      char *cp;
      char c;
      int d;
      int n;
      int bytes;
  
      if (format == NULL || ap == NULL)
          return -1;
      bytes = 0;
      while (*format != '\0') {
          if (*format == '%') {
              c = *(format+1);
              if (c == '%') {
                  /* expand "%%" */
                  cp = &c;
                  n = sizeof(char);
              }
              else if (c == 'c') {
                  /* expand "%c" */
                  c = (char)va_arg(ap, int);
                  cp = &c;
                  n = sizeof(char);
              }
              else if (c == 's') {
                  /* expand "%s" */
                  if ((cp = (char *)va_arg(ap, char *)) == NULL)
                      cp = "(null)";
                  n = strlen(cp);
              }
              else if (c == 'd') {
                  /* expand "%d" */
                  d = (int)va_arg(ap, int);
  #ifdef HAVE_SNPRINTF
                  snprintf(ibuf, sizeof(ibuf), "%d", d); /* explicitly secure */
  #else
                  sprintf(ibuf, "%d", d);                /* implicitly secure */
  #endif
                  cp = ibuf;
                  n = strlen(cp);
              }
              else {
                  /* any other "%X" */
                  cp = (char *)format;
                  n  = 2;
              }
              format += 2;
          }
          else {
              /* plain text */
              cp = (char *)format;
              if ((format = strchr(cp, '%')) == NULL)
                  format = strchr(cp, '\0');
              n = format - cp;
          }
          /* perform output operation */
          if (buffer != NULL) {
              if (n > bufsize)
                  return -1;
              memcpy(buffer, cp, n);
              buffer  += n;
              bufsize -= n;
          }
          bytes += n;
      }
      /* nul-terminate output */
      if (buffer != NULL) {
          if (bufsize == 0)
              return -1;
          *buffer = '\0';
      }
      return bytes;
  }
  
  /* minimal vasprintf(3) variant which supports %{c,s,d} only */
  static char *ts_suite_mvasprintf(const char *format, va_list ap)
  {
      char *buffer;
      int n;
      va_list ap2;
  
      if (format == NULL || ap == NULL)
          return NULL;
      ap2 = ap;
      if ((n = ts_suite_mvxprintf(NULL, 0, format, ap)) == -1)
          return NULL;
      if ((buffer = (char *)malloc(n+1)) == NULL)
          return NULL;
      ts_suite_mvxprintf(buffer, n+1, format, ap2);
      return buffer;
  }
  
  /* minimal asprintf(3) variant which supports %{c,s,d} only */
  static char *ts_suite_masprintf(const char *format, ...)
  {
      va_list ap;
      char *cp;
  
      va_start(ap, format);
      cp = ts_suite_mvasprintf(format, ap);
      va_end(ap);
      return cp;
  }
  
  /* create test suite */
  ts_suite_t *ts_suite_new(const char *fmt, ...)
  {
      ts_suite_t *ts;
      va_list ap;
  
      if ((ts = (ts_suite_t *)malloc(sizeof(ts_suite_t))) == NULL)
          return NULL;
      va_start(ap, fmt);
      ts->title = ts_suite_mvasprintf(fmt, ap);
      RING_INIT(&ts->tests, ts_test_t, next);
      va_end(ap);
      return ts;
  }
  
  /* add test case to test suite */
  void ts_suite_test(ts_suite_t *ts, ts_test_cb_t func, const char *fmt, ...)
  {
      ts_test_t *tst;
      va_list ap;
  
      if (ts == NULL || func == NULL || fmt == NULL)
          return;
      if ((tst = (ts_test_t *)malloc(sizeof(ts_test_t))) == NULL)
          return;
      RING_ELEM_INIT(tst, next);
      va_start(ap, fmt);
      tst->title = ts_suite_mvasprintf(fmt, ap);
      va_end(ap);
      tst->func = func;
      tst->file = NULL;
      tst->line = 0;
      RING_INIT(&tst->checks, tstc_t, next);
      RING_INSERT_TAIL(&ts->tests, tst, ts_test_t, next);
      return;
  }
  
  /* run test suite */
  int ts_suite_run(ts_suite_t *ts)
  {
      ts_test_t *tst;
      tstc_t *tstc;
      tstl_t *tstl;
      int total_tests, total_tests_suite_failed;
      int total_checks, total_checks_failed;
      int test_checks, test_checks_failed;
      const char *file;
      int line;
      char *cp;
  
      if (ts == NULL)
          return 0;
  
      /* init total counters */
      total_tests         = 0;
      total_tests_suite_failed  = 0;
      total_checks        = 0;
      total_checks_failed = 0;
  
      fprintf(stdout, "\n");
      fprintf(stdout, " Test Suite: %s\n", ts->title);
      fprintf(stdout, " __________________________________________________________________\n");
      fprintf(stdout, "\n");
      fflush(stdout);
  
      /* iterate through all test cases */
      RING_FOREACH(tst, &ts->tests, ts_test_t, next) {
          cp = ts_suite_masprintf(" Test: %s ........................................"
                                      "........................................", tst->title);
          cp[60] = '\0';
          fprintf(stdout, "%s", cp);
          free(cp);
          fflush(stdout);
  
          /* init test case counters */
          test_checks        = 0;
          test_checks_failed = 0;
  
          /* run the test case function */
          tst->func(tst);
  
          /* iterate through all performed checks to determine status */
          RING_FOREACH(tstc, &tst->checks, tstc_t, next) {
              test_checks++;
              if (tstc->failed)
                  test_checks_failed++;
          }
  
          if (test_checks_failed > 0) {
              /* some checks failed, so do detailed reporting of test case */
              fprintf(stdout, " FAILED\n");
              fprintf(stdout, "       Ops, %d/%d checks failed! Detailed report follows:\n",
                      test_checks_failed, test_checks);
              RING_FOREACH(tstc, &tst->checks, tstc_t, next) {
                  file = (tstc->file != NULL ? tstc->file : tst->file);
                  line = (tstc->line != 0    ? tstc->line : tst->line);
                  if (file != NULL)
                      fprintf(stdout, "       Check: %s [%s:%d]\n", tstc->title, file, line);
                  else
                      fprintf(stdout, "       Check: %s\n", tstc->title);
                  RING_FOREACH(tstl, &tstc->logs, tstl_t, next) {
                      file = (tstl->file != NULL ? tstl->file : file);
                      line = (tstl->line != 0    ? tstl->line : line);
                      if (file != NULL)
                          fprintf(stdout, "              Log: %s [%s:%d]\n", tstl->text, file, line);
                      else
                          fprintf(stdout, "              Log: %s\n", tstl->text);
                  }
              }
          }
          else {
              /* test case ran successfully */
              fprintf(stdout, ".... OK\n");
          }
          fflush(stdout);
  
          /* accumulate counters */
          total_checks += test_checks;
          total_tests++;
          if (test_checks_failed > 0) {
              total_checks_failed += test_checks_failed;
              total_tests_suite_failed++;
          }
      }
  
      /* print test suite summary */
      fprintf(stdout, " __________________________________________________________________\n");
      fprintf(stdout, "\n");
      fprintf(stdout, " Test Summary: %d tests (%d ok, %d failed), %d checks (%d ok, %d failed)\n", 
              total_tests, (total_tests - total_tests_suite_failed), total_tests_suite_failed, 
              total_checks, (total_checks - total_checks_failed), total_checks_failed); 
      if (total_tests_suite_failed > 0)
          fprintf(stdout, " Test Suite: FAILED\n");
      else
          fprintf(stdout, " Test Suite: OK\n");
      fprintf(stdout, "\n");
      fflush(stdout);
  
      return total_checks_failed;
  }
  
  /* destroy test suite */
  void ts_suite_free(ts_suite_t *ts)
  {
      ts_test_t *tst;
      tstc_t *tstc;
      tstl_t *tstl;
  
      if (ts == NULL)
          return;
      RING_FOREACH(tst, &ts->tests, ts_test_t, next) {
          RING_FOREACH(tstc, &tst->checks, tstc_t, next) {
              RING_FOREACH(tstl, &tstc->logs, tstl_t, next) {
                  free(tstl->text);
              }
              free(tstc->title);
              free(tstc);
          }
          free(tst->title);
          free(tst);
      }
      free(tst->title);
      free(ts);
      return;
  }
  
  /* annotate test case with file name and line number */
  ts_test_t *ts_test_ctx(ts_test_t *tst, const char *file, int line)
  {
      if (tst != NULL && file != NULL) {
          tst->file = file;
          tst->line = line;
      }
      return tst;
  }
  
  /* annotate test case with check */
  void ts_test_check(ts_test_t *tst, const char *fmt, ...)
  {
      tstc_t *tstc;
      va_list ap;
  
      if (tst == NULL || fmt == NULL)
          return;
      if ((tstc = (tstc_t *)malloc(sizeof(tstc_t))) == NULL)
          return;
      va_start(ap, fmt);
      RING_ELEM_INIT(tstc, next);
      tstc->title = ts_suite_mvasprintf(fmt, ap);
      tstc->failed = 0;
      tstc->file = tst->file;
      tstc->line = tst->line;
      RING_INIT(&tstc->logs, tstl_t, next);
      RING_INSERT_TAIL(&tst->checks, tstc, tstc_t, next);
      va_end(ap);
      return;
  }
  
  /* annotate test case with log message and failure */
  void ts_test_fail(ts_test_t *tst, const char *fmt, ...)
  {
      tstc_t *tstc;
      tstl_t *tstl;
      va_list ap;
  
      if (tst == NULL || fmt == NULL)
          return;
      if ((tstl = (tstl_t *)malloc(sizeof(tstl_t))) == NULL)
          return;
      va_start(ap, fmt);
      tstl->text = ts_suite_mvasprintf(fmt, ap);
      tstl->file = tst->file;
      tstl->line = tst->line;
      RING_ELEM_INIT(tstl, next);
      tstc = RING_LAST(&tst->checks);
      RING_INSERT_TAIL(&tstc->logs, tstl, tstl_t, next);
      tstc->failed = 1;
      va_end(ap);
      return;
  }
  
  /* annotate test case with log message only */
  void ts_test_log(ts_test_t *tst, const char *fmt, ...)
  {
      tstc_t *tstc;
      tstl_t *tstl;
      va_list ap;
  
      if (tst == NULL || fmt == NULL)
          return;
      if ((tstl = (tstl_t *)malloc(sizeof(tstl_t))) == NULL)
          return;
      va_start(ap, fmt);
      tstl->text = ts_suite_mvasprintf(fmt, ap);
      tstl->file = tst->file;
      tstl->line = tst->line;
      RING_ELEM_INIT(tstl, next);
      tstc = RING_LAST(&tst->checks);
      RING_INSERT_TAIL(&tstc->logs, tstl, tstl_t, next);
      va_end(ap);
      return;
  }
  
  Index: ossp-pkg/ex/ts.h
  ============================================================
  $ cvs update -p -r1.1 ts.h
  /*
  **  TS - OSSP Test Suite Library
  **  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP TS, a small test suite library which
  **  can be found at http://www.ossp.org/pkg/ts/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  ts.h: test suite library API
  */
  
  #ifndef _TS_H_
  #define _TS_H_
  
  /* test suite object type */
  struct ts_suite_st;
  typedef struct ts_suite_st ts_suite_t;
  
  /* test object type */
  struct ts_test_st;
  typedef struct ts_test_st ts_test_t;
  
  /* test callback function type */
  typedef void (*ts_test_cb_t)(ts_test_t *);
  
  /* test suite operations */
  ts_suite_t *ts_suite_new  (const char *fmt, ...);
  void        ts_suite_test (ts_suite_t *s, ts_test_cb_t func, const char *fmt, ...);
  int         ts_suite_run  (ts_suite_t *s);
  void        ts_suite_free (ts_suite_t *s);
  
  /* test operations */
  ts_test_t  *ts_test_ctx   (ts_test_t *t, const char *file, int line);
  void        ts_test_check (ts_test_t *t, const char *fmt, ...);
  void        ts_test_fail  (ts_test_t *t, const char *fmt, ...);
  void        ts_test_log   (ts_test_t *t, const char *fmt, ...);
  
  /* test suite short-cut macros */
  #define TS_TEST(name) \
      static void name(ts_test_t *_t)
  #define TS_CTX \
      ts_test_ctx(_t, __FILE__, __LINE__)
  
  #endif /* _TS_H_ */
  

From ossp-cvs-owner@ossp.org  Sat Jan 26 21:13:02 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 83420764FB; Sat, 26 Jan 2002 21:13:02 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex TODO
Message-Id: <20020126201302.83420764FB@mail.ossp.org>
Date: Sat, 26 Jan 2002 21:13:02 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   26-Jan-2002 21:13:02
  Branch: HEAD                             Handle: 2002012620130100

  Modified files:
    ossp-pkg/ex             TODO

  Log:
    remember

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-pkg/ex/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/ex/TODO
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 TODO
  --- ossp-pkg/ex/TODO	26 Jan 2002 20:12:19 -0000	1.4
  +++ ossp-pkg/ex/TODO	26 Jan 2002 20:13:01 -0000	1.5
  @@ -1,2 +1,2 @@
   - test thread examples 
  -- overhault ex_text.c
  +- overhault ex_text.c and use ts.[ch]

From ossp-cvs-owner@ossp.org  Sat Jan 26 23:29:59 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A6B16764EB; Sat, 26 Jan 2002 23:29:59 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex .cvsignore
Message-Id: <20020126222959.A6B16764EB@mail.ossp.org>
Date: Sat, 26 Jan 2002 23:29:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   26-Jan-2002 23:29:59
  Branch: HEAD                             Handle: 2002012622295900

  Modified files:
    ossp-pkg/ex             .cvsignore

  Log:
    ignore Makefile

  Summary:
    Revision    Changes     Path
    1.3         +1  -0      ossp-pkg/ex/.cvsignore
  ____________________________________________________________________________

  Index: ossp-pkg/ex/.cvsignore
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 .cvsignore
  --- ossp-pkg/ex/.cvsignore	26 Jan 2002 20:12:19 -0000	1.2
  +++ ossp-pkg/ex/.cvsignore	26 Jan 2002 22:29:59 -0000	1.3
  @@ -8,3 +8,4 @@
   ex-config
   config.h
   ex_test
  +Makefile

From ossp-cvs-owner@ossp.org  Sat Jan 26 23:30:20 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0050376514; Sat, 26 Jan 2002 23:30:19 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex TODO ex_test.c
Message-Id: <20020126223019.0050376514@mail.ossp.org>
Date: Sat, 26 Jan 2002 23:30:19 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   26-Jan-2002 23:30:19
  Branch: HEAD                             Handle: 2002012622301900

  Modified files:
    ossp-pkg/ex             TODO ex_test.c

  Log:
    first cut for a real test suite

  Summary:
    Revision    Changes     Path
    1.6         +0  -1      ossp-pkg/ex/TODO
    1.3         +124 -86    ossp-pkg/ex/ex_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/ex/TODO
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 TODO
  --- ossp-pkg/ex/TODO	26 Jan 2002 20:13:01 -0000	1.5
  +++ ossp-pkg/ex/TODO	26 Jan 2002 22:30:19 -0000	1.6
  @@ -1,2 +1 @@
   - test thread examples 
  -- overhault ex_text.c and use ts.[ch]
  Index: ossp-pkg/ex/ex_test.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 ex_test.c
  --- ossp-pkg/ex/ex_test.c	25 Jan 2002 22:23:17 -0000	1.2
  +++ ossp-pkg/ex/ex_test.c	26 Jan 2002 22:30:19 -0000	1.3
  @@ -1,108 +1,146 @@
  +/*
  +**  OSSP ex - Exception Handling Library
  +**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**
  +**  This file is part of OSSP ex, an exception handling library
  +**  which can be found at http://www.ossp.org/pkg/ex/.
  +**
  +**  This program is free software; you can redistribute it and/or
  +**  modify it under the terms of the GNU General Public  License
  +**  as published by the Free Software Foundation; either version
  +**  2.0 of the License, or (at your option) any later version.
  +**
  +**  This program is distributed in the hope that it will be useful,
  +**  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +**  General Public License for more details.
  +**
  +**  You should have received a copy of the GNU General Public License
  +**  along with this file; if not, write to the Free Software
  +**  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +**  USA, or contact the OSSP project <ossp@ossp.org>.
  +**
  +**  ex_test.c: exception handling test suite
  +*/
   
   #include <stdio.h>
   #include <stdlib.h>
   #include <time.h>
   
  +#include "ts.h"
   #include "ex.h"
   
  -/* === foo.h === */
  -
  -typedef enum {
  -    FOO_OK = 0,
  -    FOO_ERR_1,
  -    FOO_ERR_2,
  -    FOO_ERR_3
  -} foo_rc_t;
  -
  -#define FOO_TEXAS
  -
  -#ifdef FOO_TEXAS
  -
  -#include "ex.h"
  -#define FOO_ERR(err) \
  -     (ex_throw(FOO_CLASS, NULL, FOO_ERR_##err), FOO_ERR_##err)
  -#else
  -#define FOO_ERR(err) \
  -     (FOO_ERR_##err)
  -#endif
  -
  -#define FOO_EX2RC(e) \
  -    ((foo_rc_t)((e)->ex_value))
  -#define FOO_CLASS (&foo_class)
  -extern int foo_class;
  +TS_TEST(test_controlflow)
  +{
  +    ex_t ex;
  +    volatile int n;
   
  -foo_rc_t foo_func(void);
  +    ts_test_check(TS_CTX, "basic nested control flow");
  +    n = 1;
  +    ex_try {
  +        if (n != 1)
  +            ts_test_fail(TS_CTX, "M1: n=%d (!= 1)", n);
  +        n++;
  +        ex_try {
  +            if (n != 2)
  +                ts_test_fail(TS_CTX, "M2: n=%d (!= 2)", n);
  +            n++;
  +            ex_throw(0, 0, 0);
  +        }
  +        ex_catch (ex) {
  +            if (n != 3)
  +                ts_test_fail(TS_CTX, "M3: n=%d (!= 1)", n);
  +            n++;
  +            ex_rethrow;
  +        }
  +        ts_test_fail(TS_CTX, "MX: n=%d (expected: not reached)", n);
  +    }
  +    ex_catch (ex) {
  +        if (n != 4)
  +            ts_test_fail(TS_CTX, "M4: n=%d (!= 4)", n);
  +        n++;
  +    }
  +    if (n != 5)
  +        ts_test_fail(TS_CTX, "M5: n=%d (!= 5)", n);
  +}
   
  -/* === foo.c === */
  +TS_TEST(test_value)
  +{
  +    ex_t ex;
   
  -int foo_class;
  +    ex_try {
  +        ex_throw(1, 2, 3);
  +    }
  +    ex_catch (ex) {
  +        ts_test_check(TS_CTX, "exception value passing");
  +        if (ex.ex_class != (void *)1)
  +            ts_test_fail(TS_CTX, "ex_class=0x%lx (!= 1)", (long)ex.ex_class);
  +        if (ex.ex_object != (void *)2)
  +            ts_test_fail(TS_CTX, "ex_object=0x%lx (!= 2)", (long)ex.ex_object);
  +        if (ex.ex_value != (void *)3)
  +            ts_test_fail(TS_CTX, "ex_value=0x%lx (!= 3)", (long)ex.ex_value);
  +    }
  +}
   
  -static int foo_sub(void)
  +TS_TEST(test_variables)
   {
  -    fprintf(stderr, "mark4\n");
  -    if (random() % 2)
  -        return FOO_OK;
  -    return FOO_ERR(1);
  +    ex_t ex;
  +    int r1, r2;
  +    volatile int v1, v2;
  +
  +    r1 = r2 = v1 = v2 = 1234;
  +    ex_try {
  +        r2 = 5678;
  +        v2 = 5678;
  +        ex_throw(0, 0, 0);
  +    }
  +    ex_catch (ex) {
  +        ts_test_check(TS_CTX, "variable preservation");
  +        if (r1 != 1234)
  +            ts_test_fail(TS_CTX, "r1=%d (!= 1234)", r1);
  +        if (v1 != 1234)
  +            ts_test_fail(TS_CTX, "v1=%d (!= 1234)", v1);
  +        /* r2 is allowed to be destroyed because not volatile */
  +        if (v2 != 5678)
  +            ts_test_fail(TS_CTX, "v2=%d (!= 5678)", v2);
  +    }
   }
   
  -foo_rc_t foo_func(void)
  +TS_TEST(test_shield)
   {
  -    fprintf(stderr, "mark3\n");
  -    foo_sub();
  -    if (random() % 2)
  -        return FOO_OK;
  -    return FOO_ERR(2);
  -}
  +    ex_t ex;
   
  -/* === test.c === */
  +    ts_test_check(TS_CTX, "exception shielding");
  +    if (ex_shielded)
  +        ts_test_fail(TS_CTX, "unexpected shielded scope");
  +    ex_try {
  +        ex_shield {
  +            if (!ex_shielded)
  +                ts_test_fail(TS_CTX, "unexpected non-shielded scope");
  +            ex_throw(0, 0, 0);
  +        }
  +        if (ex_shielded)
  +            ts_test_fail(TS_CTX, "unexpected shielded scope");
  +    }
  +    ex_catch (ex) {
  +        ts_test_fail(TS_CTX, "unexpected exception catched");
  +    }
  +}
   
   int main(int argc, char *argv[])
   {
  -    srandom((unsigned int)time(NULL));
  -    ex_t e;
  +    ts_suite_t *ts;
  +    int n;
   
  -    fprintf(stderr, "main-0\n");
  -    for (;;) {
  -        fprintf(stderr, "main-1\n");
  -        try {
  -            fprintf(stderr, "main-2\n");
  -            ex_shield {
  -                foo_func();
  -            }
  -            fprintf(stderr, "main-3\n");
  -            for (;;) {
  -                fprintf(stderr, "main-4\n");
  -                try {
  -                    fprintf(stderr, "main-5\n");
  -                    foo_func();
  -                    fprintf(stderr, "main-6\n");
  -                }
  -                catch (e) {
  -                    fprintf(stderr, "main-7\n");
  -                    fprintf(stderr, "  %s@%s:%d class=0x%lx object=0x%lx value=0x%lx\n", 
  -                            e.ex_func, e.ex_file, e.ex_line, (long)e.ex_class, (long)e.ex_object, (long)e.ex_value);
  -                    if (e.ex_class == FOO_CLASS && (foo_rc_t)(e.ex_value) == FOO_ERR_1)
  -                        fprintf(stderr, "  exception handling\n");
  -                    else {
  -                        fprintf(stderr, "  exception rethrowing\n");
  -                        ex_rethrow;
  -                    }
  -                    fprintf(stderr, "main-8\n");
  -                }
  -                fprintf(stderr, "main-9\n");
  -            }
  -            fprintf(stderr, "main-10\n");
  -        }
  -        catch (e) {
  -            fprintf(stderr, "main-11\n");
  -            fprintf(stderr, "   %s@%s:%d class=0x%lx object=0x%lx value=0x%lx\n", 
  -                    e.ex_func, e.ex_file, e.ex_line, (long)e.ex_class, (long)e.ex_object, (long)e.ex_value);
  -            fprintf(stderr, "main-12\n");
  -            if (e.ex_class == FOO_CLASS && (foo_rc_t)(e.ex_value) == FOO_ERR_2)
  -                break;
  -        }
  -    }
  -    fprintf(stderr, "main-0\n");
  -    return 0;
  +    ts = ts_suite_new("OSSP ex (Exception Handling)");
  +    ts_suite_test(ts, test_controlflow, "basic nested control flow");
  +    ts_suite_test(ts, test_value,       "exception value passing");
  +    ts_suite_test(ts, test_variables,   "variable value preservation");
  +    ts_suite_test(ts, test_shield,      "exception shielding");
  +    n = ts_suite_run(ts);
  +    ts_suite_free(ts);
  +    return n;
   }
   

From ossp-cvs-owner@ossp.org  Sat Jan 26 23:35:03 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7A2C6764EB; Sat, 26 Jan 2002 23:35:03 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex ex-config.in ex.c ex.h ex.pod ex_test.c
Message-Id: <20020126223503.7A2C6764EB@mail.ossp.org>
Date: Sat, 26 Jan 2002 23:35:03 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   26-Jan-2002 23:35:03
  Branch: HEAD                             Handle: 2002012622350200

  Modified files:
    ossp-pkg/ex             ex-config.in ex.c ex.h ex.pod ex_test.c

  Log:
    fix license messages

  Summary:
    Revision    Changes     Path
    1.2         +16 -13     ossp-pkg/ex/ex-config.in
    1.3         +16 -13     ossp-pkg/ex/ex.c
    1.6         +16 -13     ossp-pkg/ex/ex.h
    1.5         +16 -13     ossp-pkg/ex/ex.pod
    1.4         +16 -13     ossp-pkg/ex/ex_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/ex/ex-config.in
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 ex-config.in
  --- ossp-pkg/ex/ex-config.in	26 Jan 2002 20:12:19 -0000	1.1
  +++ ossp-pkg/ex/ex-config.in	26 Jan 2002 22:35:02 -0000	1.2
  @@ -8,20 +8,23 @@
   ##  This file is part of OSSP ex, an exception handling library
   ##  which can be found at http://www.ossp.org/pkg/ex/.
   ##
  -##  This program is free software; you can redistribute it and/or
  -##  modify it under the terms of the GNU General Public  License
  -##  as published by the Free Software Foundation; either version
  -##  2.0 of the License, or (at your option) any later version.
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
   ##
  -##  This program is distributed in the hope that it will be useful,
  -##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  -##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  -##  General Public License for more details.
  -##
  -##  You should have received a copy of the GNU General Public License
  -##  along with this file; if not, write to the Free Software
  -##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  -##  USA, or contact the OSSP project <ossp@ossp.org>.
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
   ##
   ##  ex-config.in: library build utility
   ##
  Index: ossp-pkg/ex/ex.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 ex.c
  --- ossp-pkg/ex/ex.c	26 Jan 2002 20:12:19 -0000	1.2
  +++ ossp-pkg/ex/ex.c	26 Jan 2002 22:35:02 -0000	1.3
  @@ -7,20 +7,23 @@
   **  This file is part of OSSP ex, an exception handling library
   **  which can be found at http://www.ossp.org/pkg/ex/.
   **
  -**  This program is free software; you can redistribute it and/or
  -**  modify it under the terms of the GNU General Public  License
  -**  as published by the Free Software Foundation; either version
  -**  2.0 of the License, or (at your option) any later version.
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
   **
  -**  This program is distributed in the hope that it will be useful,
  -**  but WITHOUT ANY WARRANTY; without even the implied warranty of
  -**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  -**  General Public License for more details.
  -**
  -**  You should have received a copy of the GNU General Public License
  -**  along with this file; if not, write to the Free Software
  -**  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  -**  USA, or contact the OSSP project <ossp@ossp.org>.
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
   **
   **  ex.c: exception handling (compiler part)
   */
  Index: ossp-pkg/ex/ex.h
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 ex.h
  --- ossp-pkg/ex/ex.h	26 Jan 2002 20:12:19 -0000	1.5
  +++ ossp-pkg/ex/ex.h	26 Jan 2002 22:35:02 -0000	1.6
  @@ -7,20 +7,23 @@
   **  This file is part of OSSP ex, an exception handling library
   **  which can be found at http://www.ossp.org/pkg/ex/.
   **
  -**  This program is free software; you can redistribute it and/or
  -**  modify it under the terms of the GNU General Public  License
  -**  as published by the Free Software Foundation; either version
  -**  2.0 of the License, or (at your option) any later version.
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
   **
  -**  This program is distributed in the hope that it will be useful,
  -**  but WITHOUT ANY WARRANTY; without even the implied warranty of
  -**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  -**  General Public License for more details.
  -**
  -**  You should have received a copy of the GNU General Public License
  -**  along with this file; if not, write to the Free Software
  -**  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  -**  USA, or contact the OSSP project <ossp@ossp.org>.
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
   **
   **  ex.h: exception handling (pre-processor part)
   */
  Index: ossp-pkg/ex/ex.pod
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 ex.pod
  --- ossp-pkg/ex/ex.pod	25 Jan 2002 22:23:55 -0000	1.4
  +++ ossp-pkg/ex/ex.pod	26 Jan 2002 22:35:02 -0000	1.5
  @@ -5,20 +5,23 @@
   ##  This file is part of OSSP ex, an exception library
   ##  which can be found at http://www.ossp.org/pkg/ex/.
   ##
  -##  This program is free software; you can redistribute it and/or
  -##  modify it under the terms of the GNU General Public  License
  -##  as published by the Free Software Foundation; either version
  -##  2.0 of the License, or (at your option) any later version.
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
   ##
  -##  This program is distributed in the hope that it will be useful,
  -##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  -##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  -##  General Public License for more details.
  -##
  -##  You should have received a copy of the GNU General Public License
  -##  along with this file; if not, write to the Free Software
  -##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  -##  USA, or contact the OSSP project <ossp@ossp.org>.
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
   ##
   ##  ex.pod: exception library manual page
   ##
  Index: ossp-pkg/ex/ex_test.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 ex_test.c
  --- ossp-pkg/ex/ex_test.c	26 Jan 2002 22:30:19 -0000	1.3
  +++ ossp-pkg/ex/ex_test.c	26 Jan 2002 22:35:02 -0000	1.4
  @@ -7,20 +7,23 @@
   **  This file is part of OSSP ex, an exception handling library
   **  which can be found at http://www.ossp.org/pkg/ex/.
   **
  -**  This program is free software; you can redistribute it and/or
  -**  modify it under the terms of the GNU General Public  License
  -**  as published by the Free Software Foundation; either version
  -**  2.0 of the License, or (at your option) any later version.
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
   **
  -**  This program is distributed in the hope that it will be useful,
  -**  but WITHOUT ANY WARRANTY; without even the implied warranty of
  -**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  -**  General Public License for more details.
  -**
  -**  You should have received a copy of the GNU General Public License
  -**  along with this file; if not, write to the Free Software
  -**  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  -**  USA, or contact the OSSP project <ossp@ossp.org>.
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
   **
   **  ex_test.c: exception handling test suite
   */

From ossp-cvs-owner@ossp.org  Sat Jan 26 23:42:47 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 43DA9764EB; Sat, 26 Jan 2002 23:42:47 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex ex.h ex.pod ex_test.c
Message-Id: <20020126224247.43DA9764EB@mail.ossp.org>
Date: Sat, 26 Jan 2002 23:42:47 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   26-Jan-2002 23:42:47
  Branch: HEAD                             Handle: 2002012622424600

  Modified files:
    ossp-pkg/ex             ex.h ex.pod ex_test.c

  Log:
    - rename ex_shielded to ex_shielding
    - do not provide namespace mapping for ex_shielding
    - add ex_catching for testing whether someone is trying to catch exceptions

  Summary:
    Revision    Changes     Path
    1.7         +6  -4      ossp-pkg/ex/ex.h
    1.6         +19 -12     ossp-pkg/ex/ex.pod
    1.5         +6  -6      ossp-pkg/ex/ex_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/ex/ex.h
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 ex.h
  --- ossp-pkg/ex/ex.h	26 Jan 2002 22:35:02 -0000	1.6
  +++ ossp-pkg/ex/ex.h	26 Jan 2002 22:42:46 -0000	1.7
  @@ -190,8 +190,12 @@
       for (__ex_ctx->ctx_disabled = 1; \
            __ex_ctx->ctx_disabled == 1; \
            __ex_ctx->ctx_disabled = 0)
  -#define ex_shielded \
  -        (__ex_ctx->ctx_disabled)
  +
  +/* exception handling tests */
  +#define ex_catching \
  +    (__ex_ctx->ctx_mctx != NULL)
  +#define ex_shielding \
  +    (__ex_ctx->ctx_disabled)
   
   /* optional namespace mapping */
   #if defined(__EX_NS_USE_UCCXX__)
  @@ -200,14 +204,12 @@
   #define Throw    ex_throw
   #define Rethrow  ex_rethrow
   #define Shield   ex_shield
  -#define Shielded ex_shielded
   #elif defined(__EX_NS_USE_CXX__) || (!defined(__cplusplus) && !defined(__EX_NS_USE_CUSTOM__))
   #define try      ex_try
   #define catch    ex_catch
   #define throw    ex_throw
   #define rethrow  ex_rethrow
   #define shield   ex_shield
  -#define shielded ex_shielded
   #endif
   
   #endif /* __EX_H__ */
  Index: ossp-pkg/ex/ex.pod
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 ex.pod
  --- ossp-pkg/ex/ex.pod	26 Jan 2002 22:35:02 -0000	1.5
  +++ ossp-pkg/ex/ex.pod	26 Jan 2002 22:42:46 -0000	1.6
  @@ -44,7 +44,9 @@
   
   B<ex_shield> { ... };
   
  -if (B<ex_shielded>) ...
  +if (B<ex_catching>) ...
  +
  +if (B<ex_shielding>) ...
   
   =head1 DESCRIPTION
   
  @@ -186,10 +188,16 @@
   of exceptions, i.e., in the dynamic scope of B<ex_shield> any
   B<ex_throw> operation is ignored. 
   
  -=item B<ex_shielded>
  +=item B<ex_catching>
  +
  +This is a flag which can be tested inside a block to test whether the
  +current scope is exception catching (by B<ex_catch> somewhere in the
  +dynamic scope) or not.
  +
  +=item B<ex_shielding>
   
   This is a flag which can be tested inside a block to test whether the
  -current scope is exception shielded (by B<ex_shield> somewhere in the
  +current scope is exception shielding (by B<ex_shield> somewhere in the
   dynamic scope) or not.
   
   =back
  @@ -293,18 +301,17 @@
   B<OSSP ex> implementation consistently uses the B<ex_>, B<__ex_>
   and B<__EX_> prefixes for namespace protection. But at least the
   B<ex_> prefix for the API macros B<ex_try>, B<ex_catch>, B<ex_throw>,
  -B<ex_rethrow>, B<ex_shield> and B<ex_shielded> sometimes have a
  -unpleasant optical appearance. Especially because B<OSSP rc> is modeled
  -after the exception facility in ISO C++ where there is no such prefix on
  -the directives.
  +B<ex_rethrow> and B<ex_shield> sometimes have a unpleasant optical
  +appearance. Especially because B<OSSP rc> is modeled after the exception
  +facility in ISO C++ where there is no such prefix on the directives.
   
   For this B<OSSP ex> optionally provides the ability to provide
   additional namespace mappings for those API macros. By default (define
   C<__EX_NS_USE_CXX__> o or as long as C<__EX_CTX_USE_CUSTOM__> and
  -C<__cplusplus> is not defined) you can additional C++ style macros
  -named B<catch>, B<throw>, B<rethrow>, B<shield> and B<shielded>. As an
  -alternative you can define C<__EX_NS_USE_UCCXX__> to get the same but
  -with an (more namespace safe) upper case first letter.
  +C<__cplusplus> is not defined) you can additional C++ style macros named
  +B<catch>, B<throw>, B<rethrow> and B<shield>. As an alternative you
  +can define C<__EX_NS_USE_UCCXX__> to get the same but with an (more
  +namespace safe) upper case first letter.
   
   =head1 MULTITHREADING ENVIRONMENTS
   
  @@ -539,7 +546,7 @@
   
    #ifdef WITH_EX
    #define FOO_ERR(ctx,err) \
  -     ((   ex_shielded \
  +     ((   ex_shielding \
          || !foo_ex_use \
          || ((ctx) != NULL && !(ctx)->ex_use)) 
         ? FOO_ERR_##err \
  Index: ossp-pkg/ex/ex_test.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 ex_test.c
  --- ossp-pkg/ex/ex_test.c	26 Jan 2002 22:35:02 -0000	1.4
  +++ ossp-pkg/ex/ex_test.c	26 Jan 2002 22:42:46 -0000	1.5
  @@ -116,16 +116,16 @@
       ex_t ex;
   
       ts_test_check(TS_CTX, "exception shielding");
  -    if (ex_shielded)
  -        ts_test_fail(TS_CTX, "unexpected shielded scope");
  +    if (ex_shielding)
  +        ts_test_fail(TS_CTX, "unexpected shielding scope");
       ex_try {
           ex_shield {
  -            if (!ex_shielded)
  -                ts_test_fail(TS_CTX, "unexpected non-shielded scope");
  +            if (!ex_shielding)
  +                ts_test_fail(TS_CTX, "unexpected non-shielding scope");
               ex_throw(0, 0, 0);
           }
  -        if (ex_shielded)
  -            ts_test_fail(TS_CTX, "unexpected shielded scope");
  +        if (ex_shielding)
  +            ts_test_fail(TS_CTX, "unexpected shielding scope");
       }
       ex_catch (ex) {
           ts_test_fail(TS_CTX, "unexpected exception catched");

From ossp-cvs-owner@ossp.org  Sat Jan 26 23:43:54 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C789C764EB; Sat, 26 Jan 2002 23:43:54 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex ex.pod
Message-Id: <20020126224354.C789C764EB@mail.ossp.org>
Date: Sat, 26 Jan 2002 23:43:54 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   26-Jan-2002 23:43:54
  Branch: HEAD                             Handle: 2002012622435400

  Modified files:
    ossp-pkg/ex             ex.pod

  Log:
    these are boolean flags

  Summary:
    Revision    Changes     Path
    1.7         +6  -6      ossp-pkg/ex/ex.pod
  ____________________________________________________________________________

  Index: ossp-pkg/ex/ex.pod
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 ex.pod
  --- ossp-pkg/ex/ex.pod	26 Jan 2002 22:42:46 -0000	1.6
  +++ ossp-pkg/ex/ex.pod	26 Jan 2002 22:43:54 -0000	1.7
  @@ -190,15 +190,15 @@
   
   =item B<ex_catching>
   
  -This is a flag which can be tested inside a block to test whether the
  -current scope is exception catching (by B<ex_catch> somewhere in the
  -dynamic scope) or not.
  +This is a boolean flag which can be tested inside a block to test
  +whether the current scope is exception catching (by B<ex_catch>
  +somewhere in the dynamic scope) or not.
   
   =item B<ex_shielding>
   
  -This is a flag which can be tested inside a block to test whether the
  -current scope is exception shielding (by B<ex_shield> somewhere in the
  -dynamic scope) or not.
  +This is a boolean flag which can be tested inside a block to test
  +whether the current scope is exception shielding (by B<ex_shield>
  +somewhere in the dynamic scope) or not.
   
   =back
   

From ossp-cvs-owner@ossp.org  Sat Jan 26 23:45:38 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id ED763764EB; Sat, 26 Jan 2002 23:45:37 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex ex_test.c
Message-Id: <20020126224537.ED763764EB@mail.ossp.org>
Date: Sat, 26 Jan 2002 23:45:37 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   26-Jan-2002 23:45:37
  Branch: HEAD                             Handle: 2002012622453700

  Modified files:
    ossp-pkg/ex             ex_test.c

  Log:
    add ex_catching to test suite

  Summary:
    Revision    Changes     Path
    1.6         +8  -0      ossp-pkg/ex/ex_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/ex/ex_test.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 ex_test.c
  --- ossp-pkg/ex/ex_test.c	26 Jan 2002 22:42:46 -0000	1.5
  +++ ossp-pkg/ex/ex_test.c	26 Jan 2002 22:45:37 -0000	1.6
  @@ -118,6 +118,8 @@
       ts_test_check(TS_CTX, "exception shielding");
       if (ex_shielding)
           ts_test_fail(TS_CTX, "unexpected shielding scope");
  +    if (ex_catching)
  +        ts_test_fail(TS_CTX, "unexpected catching scope");
       ex_try {
           ex_shield {
               if (!ex_shielding)
  @@ -126,10 +128,16 @@
           }
           if (ex_shielding)
               ts_test_fail(TS_CTX, "unexpected shielding scope");
  +        if (!ex_catching)
  +            ts_test_fail(TS_CTX, "unexpected non-catching scope");
       }
       ex_catch (ex) {
           ts_test_fail(TS_CTX, "unexpected exception catched");
  +        if (ex_catching)
  +            ts_test_fail(TS_CTX, "unexpected catching scope");
       }
  +    if (ex_catching)
  +        ts_test_fail(TS_CTX, "unexpected catching scope");
   }
   
   int main(int argc, char *argv[])

From ossp-cvs-owner@ossp.org  Sat Jan 26 23:50:13 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E9B69764EB; Sat, 26 Jan 2002 23:50:12 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex ex.h
Message-Id: <20020126225012.E9B69764EB@mail.ossp.org>
Date: Sat, 26 Jan 2002 23:50:12 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   26-Jan-2002 23:50:12
  Branch: HEAD                             Handle: 2002012622501200

  Modified files:
    ossp-pkg/ex             ex.h

  Log:
    fix typo

  Summary:
    Revision    Changes     Path
    1.8         +2  -2      ossp-pkg/ex/ex.h
  ____________________________________________________________________________

  Index: ossp-pkg/ex/ex.h
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 ex.h
  --- ossp-pkg/ex/ex.h	26 Jan 2002 22:42:46 -0000	1.7
  +++ ossp-pkg/ex/ex.h	26 Jan 2002 22:50:12 -0000	1.8
  @@ -119,7 +119,7 @@
   #if defined(__EX_CTX_USE_STATIC__)
   static ex_ctx_t __ex_ctx_global;
   #define __ex_ctx (&__ex_ctx_global)
  -#elif defined(__EX_CTX_USE_GLOBAL__) || !(__EX_CTX_USE_CUSTOM__)
  +#elif defined(__EX_CTX_USE_GLOBAL__) || !defined(__EX_CTX_USE_CUSTOM__)
   #define EX_CTX_GLOBAL ex_ctx_t __ex_ctx_global;
   extern ex_ctx_t __ex_ctx_global;
   #define __ex_ctx (&__ex_ctx_global)
  @@ -129,7 +129,7 @@
   #if defined(__EX_TERMINATE_USE_NOOP__)
   #define __ex_terminate(e) \
       /* noop */
  -#elif defined(__EX_TERMINATE_USE_ABORT__) || !(__EX_CTX_USE_CUSTOM__)
  +#elif defined(__EX_TERMINATE_USE_ABORT__) || !defined(__EX_CTX_USE_CUSTOM__)
   #define __ex_terminate(e) \
       ( fprintf(stderr, \
                 "**EX: UNCAUGHT EXCEPTION: " \

From ossp-cvs-owner@ossp.org  Sun Jan 27 11:47:02 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 34CF9764D8; Sun, 27 Jan 2002 11:47:02 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth pth_high.c
Message-Id: <20020127104702.34CF9764D8@mail.ossp.org>
Date: Sun, 27 Jan 2002 11:47:02 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   27-Jan-2002 11:47:02
  Branch: HEAD                             Handle: 2002012710470100

  Modified files:
    ossp-pkg/pth            pth_high.c

  Log:
    Replaced thread-unsafe usage of a static struct iovec in
    pth_writev_ev() with a thread-safe stack/heap-based solution.
    
    Submitted by: Mark Burton <markb@ordern.com>

  Summary:
    Revision    Changes     Path
    1.80        +26 -7      ossp-pkg/pth/pth_high.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/pth_high.c
  ============================================================
  $ cvs diff -u -r1.79 -r1.80 pth_high.c
  --- ossp-pkg/pth/pth_high.c	30 Jul 2001 18:47:28 -0000	1.79
  +++ ossp-pkg/pth/pth_high.c	27 Jan 2002 10:47:01 -0000	1.80
  @@ -860,6 +860,9 @@
       ssize_t rv;
       ssize_t s;
       int n;
  +    struct iovec tiov_stack[32];
  +    struct iovec *tiov;
  +    int tiovcnt;
   
       pth_implicit_init();
       pth_debug2("pth_writev_ev: enter from thread \"%s\"", pth_current->name);
  @@ -873,6 +876,16 @@
   
       /* poll filedescriptor if not already in non-blocking operation */
       if (fdmode != PTH_FDMODE_NONBLOCK) {
  +        /* provide temporary iovec structure */
  +        if (iovcnt > sizeof(tiov_stack)) {
  +            tiovcnt = (sizeof(struct iovec) * UIO_MAXIOV);
  +            if ((tiov = (struct iovec *)malloc(tiovcnt)) == NULL)
  +                return -1 /* errno is set */;
  +        }
  +        else {
  +            tiovcnt = sizeof(tiov_stack);
  +            tiov    = tiov_stack;
  +        }
   
           /* init return value and number of bytes to write */
           rv      = 0;
  @@ -881,7 +894,7 @@
           /* init local iovec structure */
           liov    = NULL;
           liovcnt = 0;
  -        pth_writev_iov_advance(iov, iovcnt, 0, &liov, &liovcnt);
  +        pth_writev_iov_advance(iov, iovcnt, 0, &liov, &liovcnt, tiov, tiovcnt);
   
           /* first directly poll filedescriptor for writeability
              to avoid unneccessary (and resource consuming because of context
  @@ -905,6 +918,8 @@
                       pth_event_isolate(ev);
                       if (!pth_event_occurred(ev)) {
                           pth_fdmode(fd, fdmode);
  +                        if (iovcnt > sizeof(tiov_stack))
  +                            free(tiov);
                           return_errno(-1, EINTR);
                       }
                   }
  @@ -926,7 +941,7 @@
                  we've to mimic the usual blocking I/O behaviour of writev(2) */
               if (s > 0 && s < (ssize_t)nbytes) {
                   nbytes -= s;
  -                pth_writev_iov_advance(iov, iovcnt, s, &liov, &liovcnt);
  +                pth_writev_iov_advance(iov, iovcnt, s, &liov, &liovcnt, tiov, tiovcnt);
                   n = 0;
                   continue;
               }
  @@ -938,6 +953,10 @@
               /* stop looping */
               break;
           }
  +
  +        /* cleanup */
  +        if (iovcnt > sizeof(tiov_stack))
  +            free(tiov);
       }
       else {
           /* just perform the actual write operation */
  @@ -974,9 +993,9 @@
   
   /* advance the virtual pointer of a struct iov */
   intern void pth_writev_iov_advance(const struct iovec *riov, int riovcnt, size_t advance,
  -                                   struct iovec **liov, int *liovcnt)
  +                                   struct iovec **liov, int *liovcnt, 
  +                                   struct iovec *tiov, int tiovcnt)
   {
  -    static struct iovec siov[UIO_MAXIOV];
       int i;
   
       if (*liov == NULL && *liovcnt == 0) {
  @@ -987,10 +1006,10 @@
       if (advance > 0) {
           if (*liov == riov && *liovcnt == riovcnt) {
               /* reinitialize with a copy to be able to adjust it */
  -            *liov = &siov[0];
  +            *liov = &tiov[0];
               for (i = 0; i < riovcnt; i++) {
  -                siov[i].iov_base = riov[i].iov_base;
  -                siov[i].iov_len  = riov[i].iov_len;
  +                tiov[i].iov_base = riov[i].iov_base;
  +                tiov[i].iov_len  = riov[i].iov_len;
               }
           }
           /* advance the virtual pointer */

From ossp-cvs-owner@ossp.org  Sun Jan 27 11:51:53 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3B22E764D8; Sun, 27 Jan 2002 11:51:53 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog
Message-Id: <20020127105153.3B22E764D8@mail.ossp.org>
Date: Sun, 27 Jan 2002 11:51:53 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   27-Jan-2002 11:51:53
  Branch: HEAD                             Handle: 2002012710515200

  Modified files:
    ossp-pkg/pth            ChangeLog

  Log:
    update

  Summary:
    Revision    Changes     Path
    1.554       +17 -1      ossp-pkg/pth/ChangeLog
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.553 -r1.554 ChangeLog
  --- ossp-pkg/pth/ChangeLog	6 Aug 2001 17:35:38 -0000	1.553
  +++ ossp-pkg/pth/ChangeLog	27 Jan 2002 10:51:52 -0000	1.554
  @@ -19,7 +19,23 @@
       | ||__   _|
     __|_(_) |_|_____________________________________________________________ 
       
  -  Changes between 1.4.0 and 1.4.1 (24-Mar-2001 to xx-Aug-2001)
  +  Changes between 1.4.0 and 1.4.1 (24-Mar-2001 to xx-Jan-2002)
  +
  +   *) Fixed typos in manual page.
  +      [Michael Schloh v. Bennewitz <michael.schloh@de.cw.net>, 
  +       Takashi Ishihara <tishihara@ucdavis.edu>]
  +   
  +   *) For portability reasons changed definition of PTH_EXT_SFIO to 0/1
  +      instead of FALSE/TRUE because some external definitions use a
  +      casted value and hence make trouble on plain #if constructs.
  +      [Staehli Patrik <patrik.staehli@siemens.ch>]
  +
  +   *) Fixed return value (number of occurred events) of pth_wait().
  +      [David Dureau <david.dureau@cea.fr>]
  +
  +   *) Replaced thread-unsafe usage of a static struct iovec in
  +      pth_writev_ev() with a thread-safe stack/heap-based solution.
  +      [Ralf S. Engelschall, Mark Burton <markb@ordern.com>]
   
      *) Replaced antiquated PTH_FLAG_NOJOIN references with the correct
         PTH_ATTR_JOINABLE references in the manual page.

From ossp-cvs-owner@ossp.org  Sun Jan 27 11:57:02 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DD0E2764D8; Sun, 27 Jan 2002 11:57:01 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth config.param
Message-Id: <20020127105701.DD0E2764D8@mail.ossp.org>
Date: Sun, 27 Jan 2002 11:57:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   27-Jan-2002 11:57:01
  Branch: HEAD                             Handle: 2002012710570100

  Modified files:
    ossp-pkg/pth            config.param

  Log:
    local GCC adjustments

  Summary:
    Revision    Changes     Path
    1.16        +1  -2      ossp-pkg/pth/config.param
  ____________________________________________________________________________

  Index: ossp-pkg/pth/config.param
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 config.param
  --- ossp-pkg/pth/config.param	24 Mar 2001 14:51:04 -0000	1.15
  +++ ossp-pkg/pth/config.param	27 Jan 2002 10:57:01 -0000	1.16
  @@ -54,8 +54,7 @@
   #   (developer machine only)
   #   [Hint: dmalloc -l dmalloc.log -i 1 debug3]
   devel {
  -    CC=/sw/bin/egcc IF test -f /sw/bin/egcc
  -    CC=/usr/local/bin/egcc IF test -f /usr/local/bin/egcc
  +    CC=/usr/opkg/bin/gcc IF test -f /usr/opkg/bin/gcc
       --prefix=/sw/pkg/pth IF test -d /sw/pkg/pth/
       --enable-batch
       --enable-debug

From ossp-cvs-owner@ossp.org  Sun Jan 27 11:59:42 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E44F4764D8; Sun, 27 Jan 2002 11:59:41 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth striptease.pl
Message-Id: <20020127105941.E44F4764D8@mail.ossp.org>
Date: Sun, 27 Jan 2002 11:59:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   27-Jan-2002 11:59:41
  Branch: HEAD                             Handle: 2002012710594100

  Modified files:
    ossp-pkg/pth            striptease.pl

  Log:
    copyright

  Summary:
    Revision    Changes     Path
    1.13        +1  -3      ossp-pkg/pth/striptease.pl
  ____________________________________________________________________________

  Index: ossp-pkg/pth/striptease.pl
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 striptease.pl
  --- ossp-pkg/pth/striptease.pl	30 Mar 2001 11:02:50 -0000	1.12
  +++ ossp-pkg/pth/striptease.pl	27 Jan 2002 10:59:41 -0000	1.13
  @@ -1,8 +1,6 @@
   ##
  -##  Copyright (c) 1999-2001 Ralf S. Engelschall, All Rights Reserved.
  -##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.

From ossp-cvs-owner@ossp.org  Sun Jan 27 12:03:45 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 045B8764D8; Sun, 27 Jan 2002 12:03:44 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth Makefile.in README acconfig.h acheader.m4 acl...
Message-Id: <20020127110344.045B8764D8@mail.ossp.org>
Date: Sun, 27 Jan 2002 12:03:44 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   27-Jan-2002 12:03:44
  Branch: HEAD                             Handle: 2002012711033902

  Modified files:
    ossp-pkg/pth            Makefile.in README acconfig.h acheader.m4
                            aclocal.m4 config.param configure configure.in
                            pth-config.in pth-config.pod pth.h.in pth.m4
                            pth.pod pth.spec pth_acdef.h.in pth_acmac.h.in
                            pth_attr.c pth_cancel.c pth_clean.c pth_compat.c
                            pth_data.c pth_debug.c pth_errno.c pth_event.c
                            pth_ext.c pth_fork.c pth_high.c pth_lib.c
                            pth_mctx.c pth_msg.c pth_p.h.in pth_pqueue.c
                            pth_ring.c pth_sched.c pth_string.c pth_sync.c
                            pth_syscall.c pth_tcb.c pth_time.c pth_util.c
                            pthread-config.in pthread-config.pod pthread.c
                            pthread.h.in pthread.pod striptease.mk
                            test_common.c test_common.h test_httpd.c
                            test_misc.c test_mp.c test_philo.c test_pthread.c
                            test_select.c test_sfio.c test_sig.c test_std.c

  Log:
    bump copyright year

  Summary:
    Revision    Changes     Path
    1.144       +1  -1      ossp-pkg/pth/Makefile.in
    1.193       +1  -1      ossp-pkg/pth/README
    1.28        +1  -1      ossp-pkg/pth/acconfig.h
    1.7         +1  -1      ossp-pkg/pth/acheader.m4
    1.92        +1  -1      ossp-pkg/pth/aclocal.m4
    1.17        +1  -1      ossp-pkg/pth/config.param
    1.145       BLOB        ossp-pkg/pth/configure
    1.123       +2  -2      ossp-pkg/pth/configure.in
    1.23        +1  -1      ossp-pkg/pth/pth-config.in
    1.20        +1  -1      ossp-pkg/pth/pth-config.pod
    1.131       +1  -1      ossp-pkg/pth/pth.h.in
    1.8         +1  -1      ossp-pkg/pth/pth.m4
    1.151       +1  -1      ossp-pkg/pth/pth.pod
    1.7         +1  -1      ossp-pkg/pth/pth.spec
    1.17        +1  -1      ossp-pkg/pth/pth_acdef.h.in
    1.8         +1  -1      ossp-pkg/pth/pth_acmac.h.in
    1.16        +1  -1      ossp-pkg/pth/pth_attr.c
    1.25        +1  -1      ossp-pkg/pth/pth_cancel.c
    1.16        +1  -1      ossp-pkg/pth/pth_clean.c
    1.9         +1  -1      ossp-pkg/pth/pth_compat.c
    1.28        +1  -1      ossp-pkg/pth/pth_data.c
    1.26        +1  -1      ossp-pkg/pth/pth_debug.c
    1.23        +1  -1      ossp-pkg/pth/pth_errno.c
    1.57        +1  -1      ossp-pkg/pth/pth_event.c
    1.10        +1  -1      ossp-pkg/pth/pth_ext.c
    1.13        +1  -1      ossp-pkg/pth/pth_fork.c
    1.81        +1  -1      ossp-pkg/pth/pth_high.c
    1.47        +1  -1      ossp-pkg/pth/pth_lib.c
    1.56        +1  -1      ossp-pkg/pth/pth_mctx.c
    1.22        +1  -1      ossp-pkg/pth/pth_msg.c
    1.29        +1  -1      ossp-pkg/pth/pth_p.h.in
    1.30        +1  -1      ossp-pkg/pth/pth_pqueue.c
    1.21        +1  -1      ossp-pkg/pth/pth_ring.c
    1.81        +1  -1      ossp-pkg/pth/pth_sched.c
    1.6         +1  -1      ossp-pkg/pth/pth_string.c
    1.36        +1  -1      ossp-pkg/pth/pth_sync.c
    1.22        +1  -1      ossp-pkg/pth/pth_syscall.c
    1.37        +1  -1      ossp-pkg/pth/pth_tcb.c
    1.27        +1  -1      ossp-pkg/pth/pth_time.c
    1.20        +1  -1      ossp-pkg/pth/pth_util.c
    1.19        +1  -1      ossp-pkg/pth/pthread-config.in
    1.16        +1  -1      ossp-pkg/pth/pthread-config.pod
    1.57        +1  -1      ossp-pkg/pth/pthread.c
    1.61        +1  -1      ossp-pkg/pth/pthread.h.in
    1.22        +1  -1      ossp-pkg/pth/pthread.pod
    1.6         +1  -1      ossp-pkg/pth/striptease.mk
    1.14        +1  -1      ossp-pkg/pth/test_common.c
    1.7         +1  -1      ossp-pkg/pth/test_common.h
    1.52        +1  -1      ossp-pkg/pth/test_httpd.c
    1.33        +1  -1      ossp-pkg/pth/test_misc.c
    1.40        +1  -1      ossp-pkg/pth/test_mp.c
    1.18        +1  -1      ossp-pkg/pth/test_philo.c
    1.13        +1  -1      ossp-pkg/pth/test_pthread.c
    1.14        +1  -1      ossp-pkg/pth/test_select.c
    1.11        +1  -1      ossp-pkg/pth/test_sfio.c
    1.19        +1  -1      ossp-pkg/pth/test_sig.c
    1.16        +1  -1      ossp-pkg/pth/test_std.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/Makefile.in
  ============================================================
  $ cvs diff -u -r1.143 -r1.144 Makefile.in
  --- ossp-pkg/pth/Makefile.in	24 Mar 2001 15:00:11 -0000	1.143
  +++ ossp-pkg/pth/Makefile.in	27 Jan 2002 11:03:39 -0000	1.144
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/README
  ============================================================
  $ cvs diff -u -r1.192 -r1.193 README
  --- ossp-pkg/pth/README	24 Mar 2001 16:30:36 -0000	1.192
  +++ ossp-pkg/pth/README	27 Jan 2002 11:03:40 -0000	1.193
  @@ -54,7 +54,7 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   
     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
  Index: ossp-pkg/pth/acconfig.h
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 acconfig.h
  --- ossp-pkg/pth/acconfig.h	24 Mar 2001 14:51:03 -0000	1.27
  +++ ossp-pkg/pth/acconfig.h	27 Jan 2002 11:03:40 -0000	1.28
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/acheader.m4
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 acheader.m4
  --- ossp-pkg/pth/acheader.m4	24 Mar 2001 14:51:03 -0000	1.6
  +++ ossp-pkg/pth/acheader.m4	27 Jan 2002 11:03:40 -0000	1.7
  @@ -1,6 +1,6 @@
   dnl ##
   dnl ##  GNU Pth - The GNU Portable Threads
  -dnl ##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##
   dnl ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   dnl ##  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.91 -r1.92 aclocal.m4
  --- ossp-pkg/pth/aclocal.m4	24 Mar 2001 14:51:04 -0000	1.91
  +++ ossp-pkg/pth/aclocal.m4	27 Jan 2002 11:03:40 -0000	1.92
  @@ -1,6 +1,6 @@
   dnl ##
   dnl ##  GNU Pth - The GNU Portable Threads
  -dnl ##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##
   dnl ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   dnl ##  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/config.param
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 config.param
  --- ossp-pkg/pth/config.param	27 Jan 2002 10:57:01 -0000	1.16
  +++ ossp-pkg/pth/config.param	27 Jan 2002 11:03:40 -0000	1.17
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/configure
  ============================================================
  $ cvs update -p -r1.144 configure >configure.old
  $ cvs update -p -r1.145 configure >configure.new
  $ diff -u configure.old configure.new
  Index: ossp-pkg/pth/configure.in
  ============================================================
  $ cvs diff -u -r1.122 -r1.123 configure.in
  --- ossp-pkg/pth/configure.in	30 Nov 2001 12:38:47 -0000	1.122
  +++ ossp-pkg/pth/configure.in	27 Jan 2002 11:03:40 -0000	1.123
  @@ -1,6 +1,6 @@
   dnl ##
   dnl ##  GNU Pth - The GNU Portable Threads
  -dnl ##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##
   dnl ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   dnl ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ -42,7 +42,7 @@
   AC_HEADLINE(dnl
   GNU Pth, Portable Threads, dnl
   PTH_VERSION, pth_vers.c, dnl
  -[Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>])
  +[Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>])
   AC_CONFIG_PARAM(config.param)
   AC_CONFIG_HEADER(pth_acdef.h)dnl
   AC_PREFIX_DEFAULT(/usr/local)
  Index: ossp-pkg/pth/pth-config.in
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 pth-config.in
  --- ossp-pkg/pth/pth-config.in	24 Mar 2001 14:51:04 -0000	1.22
  +++ ossp-pkg/pth/pth-config.in	27 Jan 2002 11:03:40 -0000	1.23
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/pth-config.pod
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 pth-config.pod
  --- ossp-pkg/pth/pth-config.pod	24 Mar 2001 14:51:04 -0000	1.19
  +++ ossp-pkg/pth/pth-config.pod	27 Jan 2002 11:03:40 -0000	1.20
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/pth.h.in
  ============================================================
  $ cvs diff -u -r1.130 -r1.131 pth.h.in
  --- ossp-pkg/pth/pth.h.in	24 Jul 2001 18:55:36 -0000	1.130
  +++ ossp-pkg/pth/pth.h.in	27 Jan 2002 11:03:40 -0000	1.131
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/pth.m4
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 pth.m4
  --- ossp-pkg/pth/pth.m4	24 Mar 2001 14:51:04 -0000	1.7
  +++ ossp-pkg/pth/pth.m4	27 Jan 2002 11:03:40 -0000	1.8
  @@ -1,6 +1,6 @@
   dnl ##
   dnl ##  GNU Pth - The GNU Portable Threads
  -dnl ##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##
   dnl ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   dnl ##  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/pth.pod
  ============================================================
  $ cvs diff -u -r1.150 -r1.151 pth.pod
  --- ossp-pkg/pth/pth.pod	17 Jan 2002 12:29:33 -0000	1.150
  +++ ossp-pkg/pth/pth.pod	27 Jan 2002 11:03:40 -0000	1.151
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/pth.spec
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 pth.spec
  --- ossp-pkg/pth/pth.spec	24 Mar 2001 16:30:36 -0000	1.6
  +++ ossp-pkg/pth/pth.spec	27 Jan 2002 11:03:40 -0000	1.7
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 2000-2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/pth_acdef.h.in
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 pth_acdef.h.in
  --- ossp-pkg/pth/pth_acdef.h.in	24 Mar 2001 14:51:04 -0000	1.16
  +++ ossp-pkg/pth/pth_acdef.h.in	27 Jan 2002 11:03:40 -0000	1.17
  @@ -1,7 +1,7 @@
   /* pth_acdef.h.in.  Generated automatically from - by autoheader.  */
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/pth_acmac.h.in
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 pth_acmac.h.in
  --- ossp-pkg/pth/pth_acmac.h.in	24 Mar 2001 14:51:04 -0000	1.7
  +++ ossp-pkg/pth/pth_acmac.h.in	27 Jan 2002 11:03:40 -0000	1.8
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/pth_attr.c
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 pth_attr.c
  --- ossp-pkg/pth/pth_attr.c	24 Mar 2001 14:51:04 -0000	1.15
  +++ ossp-pkg/pth/pth_attr.c	27 Jan 2002 11:03:40 -0000	1.16
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/pth_cancel.c
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 pth_cancel.c
  --- ossp-pkg/pth/pth_cancel.c	24 Mar 2001 14:51:04 -0000	1.24
  +++ ossp-pkg/pth/pth_cancel.c	27 Jan 2002 11:03:40 -0000	1.25
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/pth_clean.c
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 pth_clean.c
  --- ossp-pkg/pth/pth_clean.c	24 Mar 2001 14:51:04 -0000	1.15
  +++ ossp-pkg/pth/pth_clean.c	27 Jan 2002 11:03:40 -0000	1.16
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/pth_compat.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 pth_compat.c
  --- ossp-pkg/pth/pth_compat.c	24 Mar 2001 14:51:04 -0000	1.8
  +++ ossp-pkg/pth/pth_compat.c	27 Jan 2002 11:03:40 -0000	1.9
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/pth_data.c
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 pth_data.c
  --- ossp-pkg/pth/pth_data.c	24 Mar 2001 14:51:04 -0000	1.27
  +++ ossp-pkg/pth/pth_data.c	27 Jan 2002 11:03:40 -0000	1.28
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/pth_debug.c
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 pth_debug.c
  --- ossp-pkg/pth/pth_debug.c	24 Mar 2001 14:51:04 -0000	1.25
  +++ ossp-pkg/pth/pth_debug.c	27 Jan 2002 11:03:40 -0000	1.26
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/pth_errno.c
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 pth_errno.c
  --- ossp-pkg/pth/pth_errno.c	24 Mar 2001 14:51:04 -0000	1.22
  +++ ossp-pkg/pth/pth_errno.c	27 Jan 2002 11:03:40 -0000	1.23
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/pth_event.c
  ============================================================
  $ cvs diff -u -r1.56 -r1.57 pth_event.c
  --- ossp-pkg/pth/pth_event.c	30 Nov 2001 12:37:29 -0000	1.56
  +++ ossp-pkg/pth/pth_event.c	27 Jan 2002 11:03:40 -0000	1.57
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/pth_ext.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 pth_ext.c
  --- ossp-pkg/pth/pth_ext.c	24 Mar 2001 14:51:04 -0000	1.9
  +++ ossp-pkg/pth/pth_ext.c	27 Jan 2002 11:03:40 -0000	1.10
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/pth_fork.c
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 pth_fork.c
  --- ossp-pkg/pth/pth_fork.c	24 Mar 2001 14:51:04 -0000	1.12
  +++ ossp-pkg/pth/pth_fork.c	27 Jan 2002 11:03:40 -0000	1.13
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/pth_high.c
  ============================================================
  $ cvs diff -u -r1.80 -r1.81 pth_high.c
  --- ossp-pkg/pth/pth_high.c	27 Jan 2002 10:47:01 -0000	1.80
  +++ ossp-pkg/pth/pth_high.c	27 Jan 2002 11:03:40 -0000	1.81
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/pth_lib.c
  ============================================================
  $ cvs diff -u -r1.46 -r1.47 pth_lib.c
  --- ossp-pkg/pth/pth_lib.c	24 Mar 2001 14:51:04 -0000	1.46
  +++ ossp-pkg/pth/pth_lib.c	27 Jan 2002 11:03:40 -0000	1.47
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/pth_mctx.c
  ============================================================
  $ cvs diff -u -r1.55 -r1.56 pth_mctx.c
  --- ossp-pkg/pth/pth_mctx.c	24 Mar 2001 14:51:04 -0000	1.55
  +++ ossp-pkg/pth/pth_mctx.c	27 Jan 2002 11:03:40 -0000	1.56
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/pth_msg.c
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 pth_msg.c
  --- ossp-pkg/pth/pth_msg.c	24 Mar 2001 14:51:04 -0000	1.21
  +++ ossp-pkg/pth/pth_msg.c	27 Jan 2002 11:03:40 -0000	1.22
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/pth_p.h.in
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 pth_p.h.in
  --- ossp-pkg/pth/pth_p.h.in	24 Mar 2001 14:51:04 -0000	1.28
  +++ ossp-pkg/pth/pth_p.h.in	27 Jan 2002 11:03:40 -0000	1.29
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/pth_pqueue.c
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 pth_pqueue.c
  --- ossp-pkg/pth/pth_pqueue.c	24 Mar 2001 15:28:53 -0000	1.29
  +++ ossp-pkg/pth/pth_pqueue.c	27 Jan 2002 11:03:40 -0000	1.30
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/pth_ring.c
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 pth_ring.c
  --- ossp-pkg/pth/pth_ring.c	24 Mar 2001 14:51:04 -0000	1.20
  +++ ossp-pkg/pth/pth_ring.c	27 Jan 2002 11:03:41 -0000	1.21
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/pth_sched.c
  ============================================================
  $ cvs diff -u -r1.80 -r1.81 pth_sched.c
  --- ossp-pkg/pth/pth_sched.c	24 Mar 2001 14:51:04 -0000	1.80
  +++ ossp-pkg/pth/pth_sched.c	27 Jan 2002 11:03:41 -0000	1.81
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/pth_string.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 pth_string.c
  --- ossp-pkg/pth/pth_string.c	24 Mar 2001 14:51:04 -0000	1.5
  +++ ossp-pkg/pth/pth_string.c	27 Jan 2002 11:03:41 -0000	1.6
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/pth_sync.c
  ============================================================
  $ cvs diff -u -r1.35 -r1.36 pth_sync.c
  --- ossp-pkg/pth/pth_sync.c	24 Mar 2001 14:51:05 -0000	1.35
  +++ ossp-pkg/pth/pth_sync.c	27 Jan 2002 11:03:41 -0000	1.36
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/pth_syscall.c
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 pth_syscall.c
  --- ossp-pkg/pth/pth_syscall.c	24 Mar 2001 14:51:05 -0000	1.21
  +++ ossp-pkg/pth/pth_syscall.c	27 Jan 2002 11:03:41 -0000	1.22
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/pth_tcb.c
  ============================================================
  $ cvs diff -u -r1.36 -r1.37 pth_tcb.c
  --- ossp-pkg/pth/pth_tcb.c	30 Mar 2001 11:15:34 -0000	1.36
  +++ ossp-pkg/pth/pth_tcb.c	27 Jan 2002 11:03:41 -0000	1.37
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/pth_time.c
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 pth_time.c
  --- ossp-pkg/pth/pth_time.c	24 Mar 2001 14:51:05 -0000	1.26
  +++ ossp-pkg/pth/pth_time.c	27 Jan 2002 11:03:41 -0000	1.27
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/pth_util.c
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 pth_util.c
  --- ossp-pkg/pth/pth_util.c	24 Mar 2001 14:51:05 -0000	1.19
  +++ ossp-pkg/pth/pth_util.c	27 Jan 2002 11:03:41 -0000	1.20
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/pthread-config.in
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 pthread-config.in
  --- ossp-pkg/pth/pthread-config.in	24 Mar 2001 14:51:05 -0000	1.18
  +++ ossp-pkg/pth/pthread-config.in	27 Jan 2002 11:03:41 -0000	1.19
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/pthread-config.pod
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 pthread-config.pod
  --- ossp-pkg/pth/pthread-config.pod	24 Mar 2001 14:51:05 -0000	1.15
  +++ ossp-pkg/pth/pthread-config.pod	27 Jan 2002 11:03:41 -0000	1.16
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/pthread.c
  ============================================================
  $ cvs diff -u -r1.56 -r1.57 pthread.c
  --- ossp-pkg/pth/pthread.c	24 Mar 2001 15:55:33 -0000	1.56
  +++ ossp-pkg/pth/pthread.c	27 Jan 2002 11:03:41 -0000	1.57
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/pthread.h.in
  ============================================================
  $ cvs diff -u -r1.60 -r1.61 pthread.h.in
  --- ossp-pkg/pth/pthread.h.in	24 Mar 2001 16:01:06 -0000	1.60
  +++ ossp-pkg/pth/pthread.h.in	27 Jan 2002 11:03:41 -0000	1.61
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/pthread.pod
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 pthread.pod
  --- ossp-pkg/pth/pthread.pod	24 Mar 2001 14:51:05 -0000	1.21
  +++ ossp-pkg/pth/pthread.pod	27 Jan 2002 11:03:41 -0000	1.22
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/striptease.mk
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 striptease.mk
  --- ossp-pkg/pth/striptease.mk	24 Mar 2001 14:51:05 -0000	1.5
  +++ ossp-pkg/pth/striptease.mk	27 Jan 2002 11:03:41 -0000	1.6
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/test_common.c
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 test_common.c
  --- ossp-pkg/pth/test_common.c	24 Mar 2001 14:51:05 -0000	1.13
  +++ ossp-pkg/pth/test_common.c	27 Jan 2002 11:03:41 -0000	1.14
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/test_common.h
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 test_common.h
  --- ossp-pkg/pth/test_common.h	24 Mar 2001 14:51:05 -0000	1.6
  +++ ossp-pkg/pth/test_common.h	27 Jan 2002 11:03:41 -0000	1.7
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/test_httpd.c
  ============================================================
  $ cvs diff -u -r1.51 -r1.52 test_httpd.c
  --- ossp-pkg/pth/test_httpd.c	24 Mar 2001 14:51:05 -0000	1.51
  +++ ossp-pkg/pth/test_httpd.c	27 Jan 2002 11:03:41 -0000	1.52
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/test_misc.c
  ============================================================
  $ cvs diff -u -r1.32 -r1.33 test_misc.c
  --- ossp-pkg/pth/test_misc.c	24 Mar 2001 14:51:05 -0000	1.32
  +++ ossp-pkg/pth/test_misc.c	27 Jan 2002 11:03:41 -0000	1.33
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/test_mp.c
  ============================================================
  $ cvs diff -u -r1.39 -r1.40 test_mp.c
  --- ossp-pkg/pth/test_mp.c	24 Mar 2001 14:51:05 -0000	1.39
  +++ ossp-pkg/pth/test_mp.c	27 Jan 2002 11:03:41 -0000	1.40
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/test_philo.c
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 test_philo.c
  --- ossp-pkg/pth/test_philo.c	24 Mar 2001 14:51:05 -0000	1.17
  +++ ossp-pkg/pth/test_philo.c	27 Jan 2002 11:03:41 -0000	1.18
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/test_pthread.c
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 test_pthread.c
  --- ossp-pkg/pth/test_pthread.c	24 Mar 2001 14:51:05 -0000	1.12
  +++ ossp-pkg/pth/test_pthread.c	27 Jan 2002 11:03:41 -0000	1.13
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/test_select.c
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 test_select.c
  --- ossp-pkg/pth/test_select.c	24 Mar 2001 14:51:05 -0000	1.13
  +++ ossp-pkg/pth/test_select.c	27 Jan 2002 11:03:41 -0000	1.14
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/test_sfio.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 test_sfio.c
  --- ossp-pkg/pth/test_sfio.c	24 Mar 2001 14:51:05 -0000	1.10
  +++ ossp-pkg/pth/test_sfio.c	27 Jan 2002 11:03:41 -0000	1.11
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/test_sig.c
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 test_sig.c
  --- ossp-pkg/pth/test_sig.c	24 Mar 2001 14:51:05 -0000	1.18
  +++ ossp-pkg/pth/test_sig.c	27 Jan 2002 11:03:41 -0000	1.19
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  Index: ossp-pkg/pth/test_std.c
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 test_std.c
  --- ossp-pkg/pth/test_std.c	24 Mar 2001 14:51:05 -0000	1.15
  +++ ossp-pkg/pth/test_std.c	27 Jan 2002 11:03:41 -0000	1.16
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.

From ossp-cvs-owner@ossp.org  Sun Jan 27 12:49:50 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3138C764D8; Sun, 27 Jan 2002 12:49:50 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp aclocal.m4
Message-Id: <20020127114950.3138C764D8@mail.ossp.org>
Date: Sun, 27 Jan 2002 12:49:50 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   27-Jan-2002 12:49:50
  Branch: HEAD                             Handle: 2002012711494900

  Modified files:
    ossp-pkg/lmtp2nntp      aclocal.m4

  Log:
    finally fix AC_CHECK_EXTLIB output on --help

  Summary:
    Revision    Changes     Path
    1.8         +1  -1      ossp-pkg/lmtp2nntp/aclocal.m4
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 aclocal.m4
  --- ossp-pkg/lmtp2nntp/aclocal.m4	31 Dec 2001 15:15:36 -0000	1.7
  +++ ossp-pkg/lmtp2nntp/aclocal.m4	27 Jan 2002 11:49:49 -0000	1.8
  @@ -226,7 +226,7 @@
   
   AC_DEFUN(AC_CHECK_EXTLIB,[dnl
   AC_ARG_WITH($2, [dnl
  -[  --with-]$2[[=DIR]        build with external $1 library (default=no)]], [dnl
  +[  --with-]m4_substr([$2[[=DIR]]                     ], 0, 19)[build with external $1 library (default=no)]], [dnl
       if test ".$with_$2" = .yes; then
           #   via config script
           $2_version=`($2-config --version) 2>/dev/null`

From ossp-cvs-owner@ossp.org  Sun Jan 27 13:34:31 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7F8FF764D8; Sun, 27 Jan 2002 13:34:31 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog README configure pth-config.1 pth.3...
Message-Id: <20020127123431.7F8FF764D8@mail.ossp.org>
Date: Sun, 27 Jan 2002 13:34:31 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   27-Jan-2002 13:34:31
  Branch: HEAD                             Handle: 2002012712342901

  Modified files:
    ossp-pkg/pth            ChangeLog README configure pth-config.1 pth.3
                            pth.spec pth_vers.c pthread-config.1 pthread.3

  Log:
    update version

  Summary:
    Revision    Changes     Path
    1.555       +1  -1      ossp-pkg/pth/ChangeLog
    1.194       +1  -1      ossp-pkg/pth/README
    1.146       BLOB        ossp-pkg/pth/configure
    1.132       +7  -7      ossp-pkg/pth/pth-config.1
    1.232       +27 -25     ossp-pkg/pth/pth.3
    1.8         +1  -1      ossp-pkg/pth/pth.spec
    1.139       +9  -9      ossp-pkg/pth/pth_vers.c
    1.97        +7  -7      ossp-pkg/pth/pthread-config.1
    1.102       +7  -7      ossp-pkg/pth/pthread.3
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.554 -r1.555 ChangeLog
  --- ossp-pkg/pth/ChangeLog	27 Jan 2002 10:51:52 -0000	1.554
  +++ ossp-pkg/pth/ChangeLog	27 Jan 2002 12:34:29 -0000	1.555
  @@ -19,7 +19,7 @@
       | ||__   _|
     __|_(_) |_|_____________________________________________________________ 
       
  -  Changes between 1.4.0 and 1.4.1 (24-Mar-2001 to xx-Jan-2002)
  +  Changes between 1.4.0 and 1.4.1 (24-Mar-2001 to 27-Jan-2002)
   
      *) Fixed typos in manual page.
         [Michael Schloh v. Bennewitz <michael.schloh@de.cw.net>, 
  Index: ossp-pkg/pth/README
  ============================================================
  $ cvs diff -u -r1.193 -r1.194 README
  --- ossp-pkg/pth/README	27 Jan 2002 11:03:40 -0000	1.193
  +++ ossp-pkg/pth/README	27 Jan 2002 12:34:29 -0000	1.194
  @@ -5,7 +5,7 @@
     |_|    \__|_| |_|                     the impossible.''
   
     GNU Pth - The GNU Portable Threads
  -  Version 1.4.0 (24-Mar-2001)
  +  Version 1.4.1 (27-Jan-2002)
   
     ABSTRACT
   
  Index: ossp-pkg/pth/configure
  ============================================================
  $ cvs update -p -r1.145 configure >configure.old
  $ cvs update -p -r1.146 configure >configure.new
  $ diff -u configure.old configure.new
  Index: ossp-pkg/pth/pth-config.1
  ============================================================
  $ cvs diff -u -r1.131 -r1.132 pth-config.1
  --- ossp-pkg/pth/pth-config.1	24 Mar 2001 16:30:36 -0000	1.131
  +++ ossp-pkg/pth/pth-config.1	27 Jan 2002 12:34:30 -0000	1.132
  @@ -1,5 +1,5 @@
  -.\" Automatically generated by Pod::Man version 1.02
  -.\" Sat Mar 24 17:29:24 2001
  +.\" Automatically generated by Pod::Man version 1.15
  +.\" Sun Jan 27 13:33:10 2002
   .\"
   .\" Standard preamble:
   .\" ======================================================================
  @@ -46,8 +46,8 @@
   .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
   .    ds L" ""
   .    ds R" ""
  -.    ds C` `
  -.    ds C' '
  +.    ds C` ""
  +.    ds C' ""
   'br\}
   .el\{\
   .    ds -- \|\(em\|
  @@ -63,7 +63,7 @@
   .if \nF \{\
   .    de IX
   .    tm Index:\\$1\t\\n%\t"\\$2"
  -.    .
  +..
   .    nr % 0
   .    rr F
   .\}
  @@ -138,13 +138,13 @@
   .\" ======================================================================
   .\"
   .IX Title "PTH-CONFIG 1"
  -.TH PTH-CONFIG 1 "24-Mar-2001" "GNU Pth 1.4.0" "GNU Portable Threads"
  +.TH PTH-CONFIG 1 "27-Jan-2002" "GNU Pth 1.4.1" "GNU Portable Threads"
   .UC
   .SH "NAME"
   \&\fBpth-config\fR \- Pth library build utility
   .SH "VERSION"
   .IX Header "VERSION"
  -\&\s-1GNU\s0 Pth \s-11.4.0 (24-Mar-2001)\s0
  +\&\s-1GNU\s0 Pth \s-11.4.1 (27-Jan-2002)\s0
   .SH "SYNOPSIS"
   .IX Header "SYNOPSIS"
   \&\fBpth-config\fR
  Index: ossp-pkg/pth/pth.3
  ============================================================
  $ cvs diff -u -r1.231 -r1.232 pth.3
  --- ossp-pkg/pth/pth.3	12 Jul 2001 07:20:04 -0000	1.231
  +++ ossp-pkg/pth/pth.3	27 Jan 2002 12:34:30 -0000	1.232
  @@ -1,5 +1,5 @@
   .\" Automatically generated by Pod::Man version 1.15
  -.\" Thu Jul 12 09:19:00 2001
  +.\" Sun Jan 27 13:33:11 2002
   .\"
   .\" Standard preamble:
   .\" ======================================================================
  @@ -138,13 +138,13 @@
   .\" ======================================================================
   .\"
   .IX Title "pth 3"
  -.TH pth 3 "24-Mar-2001" "GNU Pth 1.4.0" "GNU Portable Threads"
  +.TH pth 3 "27-Jan-2002" "GNU Pth 1.4.1" "GNU Portable Threads"
   .UC
   .SH "NAME"
   \&\fBpth\fR \- \s-1GNU\s0 Portable Threads
   .SH "VERSION"
   .IX Header "VERSION"
  -\&\s-1GNU\s0 Pth \s-11.4.0 (24-Mar-2001)\s0
  +\&\s-1GNU\s0 Pth \s-11.4.1 (27-Jan-2002)\s0
   .SH "SYNOPSIS"
   .IX Header "SYNOPSIS"
   .Ip "\fBGlobal Library Management\fR" 4
  @@ -756,9 +756,10 @@
   .if n .Ip "\f(CW""""PTH_ATTR_JOINABLE""""\fR (read-write> [\f(CW""""int""""\fR]" 4
   .el .Ip "\f(CWPTH_ATTR_JOINABLE\fR (read-write> [\f(CWint\fR]" 4
   .IX Item "PTH_ATTR_JOINABLE (read-write> [int]"
  -The thread detachment type, \f(CW\*(C`TRUE\*(C'\fR indicates a joinable thread, \f(CW\*(C`FALSE\*(C'\fR
  -indicates a detached thread.  When a the is detached after termination it is
  -immediately kicked out of the system instead of inserted into the dead queue.
  +The thread detachment type, \f(CW\*(C`TRUE\*(C'\fR indicates a joinable thread,
  +\&\f(CW\*(C`FALSE\*(C'\fR indicates a detached thread. When a thread is detached,
  +after termination it is immediately kicked out of the system instead of
  +inserted into the dead queue.
   .if n .Ip "\f(CW""""PTH_ATTR_CANCEL_STATE""""\fR (read-write) [\f(CW""""unsigned int""""\fR]" 4
   .el .Ip "\f(CWPTH_ATTR_CANCEL_STATE\fR (read-write) [\f(CWunsigned int\fR]" 4
   .IX Item "PTH_ATTR_CANCEL_STATE (read-write) [unsigned int]"
  @@ -1006,21 +1007,23 @@
   `\f(CW\*(C`pth_cancel(\*(C'\fR\fItid\fR\f(CW\*(C`)\*(C'\fR'.
   .Ip "int \fBpth_join\fR(pth_t \fItid\fR, void **\fIvalue\fR);" 4
   .IX Item "int pth_join(pth_t tid, void **value);"
  -This joins the current thread with the thread specified via \fItid\fR.  It first
  -suspends the current thread until the \fItid\fR thread has terminated. Then it is
  -awakened and stores the value of \fItid\fR's \fIpth_exit\fR\|(3) call into *\fIvalue\fR (if
  -\&\fIvalue\fR and not \f(CW\*(C`NULL\*(C'\fR) and returns to the caller.  A thread can be joined
  -only when it was \fInot\fR spawned with \f(CW\*(C`PTH_FLAG_NOJOIN\*(C'\fR. A thread can only be
  -joined once, i.e., after the \fIpth_join\fR\|(3) call the thread \fItid\fR is removed
  -from the system.
  +This joins the current thread with the thread specified via \fItid\fR.
  +It first suspends the current thread until the \fItid\fR thread has
  +terminated. Then it is awakened and stores the value of \fItid\fR's
  +\&\fIpth_exit\fR\|(3) call into *\fIvalue\fR (if \fIvalue\fR and not \f(CW\*(C`NULL\*(C'\fR) and
  +returns to the caller. A thread can be joined only when it has the
  +attribute \f(CW\*(C`PTH_ATTR_JOINABLE\*(C'\fR set to \f(CW\*(C`TRUE\*(C'\fR (the default). A thread
  +can only be joined once, i.e., after the \fIpth_join\fR\|(3) call the thread
  +\&\fItid\fR is completely removed from the system.
   .Ip "void \fBpth_exit\fR(void *\fIvalue\fR);" 4
   .IX Item "void pth_exit(void *value);"
  -This terminates the current thread. Whether it's immediately removed from the
  -system or inserted into the dead queue of the scheduler depends on its join
  -type which was specified at spawning time. When it was spawned with
  -\&\f(CW\*(C`PTH_FLAG_NOJOIN\*(C'\fR it's immediately removed and \fIvalue\fR is ignored.
  -Else the thread is inserted into the dead queue and \fIvalue\fR remembered
  -for a \fIpth_join\fR\|(3) call by another thread.
  +This terminates the current thread. Whether it's immediately removed
  +from the system or inserted into the dead queue of the scheduler depends
  +on its join type which was specified at spawning time. If it has the
  +attribute \f(CW\*(C`PTH_ATTR_JOINABLE\*(C'\fR set to \f(CW\*(C`FALSE\*(C'\fR, it's immediately removed
  +and \fIvalue\fR is ignored. Else the thread is inserted into the dead queue
  +and \fIvalue\fR remembered for a subsequent \fIpth_join\fR\|(3) call by another
  +thread.
   .Sh "Utilities"
   .IX Subsection "Utilities"
   The following functions are utility functions.
  @@ -1098,7 +1101,7 @@
   .el .Ip "\f(CWPTH_EVENT_FD\fR" 4
   .IX Item "PTH_EVENT_FD"
   This is a file descriptor event. One or more of \f(CW\*(C`PTH_UNTIL_FD_READABLE\*(C'\fR,
  -\&\f(CW\*(C`PTH_UNTIL_FD_WRITEABLE\*(C'\fR or \f(CW\*(C`PTH_UNTIL_FD_EXECPTION\*(C'\fR have to be OR-ed into
  +\&\f(CW\*(C`PTH_UNTIL_FD_WRITEABLE\*(C'\fR or \f(CW\*(C`PTH_UNTIL_FD_EXCEPTION\*(C'\fR have to be OR-ed into
   \&\fIspec\fR to specify on which state of the file descriptor you want to wait.  The
   file descriptor itself has to be given as an additional argument.  Example:
   `\f(CW\*(C`pth_event(PTH_EVENT_FD|PTH_UNTIL_FD_READABLE, fd)\*(C'\fR'.
  @@ -1821,9 +1824,8 @@
   \& |     rm -f Makefile
   .Ve
   Because \fBautoconf\fR generates additional files, we added a canonical
  -\&\f(CW\*(C`distclean\*(C'\fR target which cleanups this, too. Second, we write
  -a (minimalistic) \fBautoconf\fR script specification in a file
  -\&\f(CW\*(C`configure.in\*(C'\fR:
  +\&\f(CW\*(C`distclean\*(C'\fR target which cleans this up. Secondly, we wrote
  +\&\f(CW\*(C`configure.in\*(C'\fR, a (minimal) \fBautoconf\fR script specification:
   .PP
   .Vb 4
   \& $ vi configure.in
  @@ -1881,8 +1883,8 @@
   .IX Subsection "Autoconf Build Environment with Local Copy of Pth (Expert)"
   Finally let us assume the \f(CW\*(C`foo\*(C'\fR program stays under either a \fI\s-1GPL\s0\fR or
   \&\fI\s-1LGPL\s0\fR distribution license and we want to make it a stand-alone package for
  -easier distribution and installation.  That is, we don't want that the
  -end-user first has to install \fBPth\fR just to allow our \f(CW\*(C`foo\*(C'\fR package to
  +easier distribution and installation.  That is, we don't want to oblige the
  +end-user to install \fBPth\fR just to allow our \f(CW\*(C`foo\*(C'\fR package to
   compile. For this, it is a convenient practice to include the required
   libraries (here \fBPth\fR) into the source tree of the package (here \f(CW\*(C`foo\*(C'\fR).
   \&\fBPth\fR ships with all necessary support to allow us to easily achieve this
  Index: ossp-pkg/pth/pth.spec
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 pth.spec
  --- ossp-pkg/pth/pth.spec	27 Jan 2002 11:03:40 -0000	1.7
  +++ ossp-pkg/pth/pth.spec	27 Jan 2002 12:34:30 -0000	1.8
  @@ -30,7 +30,7 @@
   #   distribution tarball.
   
   %define prefix /usr
  -%define ver 1.4.0
  +%define ver 1.4.1
   %define rel 1
   
   Name:       pth
  Index: ossp-pkg/pth/pth_vers.c
  ============================================================
  $ cvs diff -u -r1.138 -r1.139 pth_vers.c
  --- ossp-pkg/pth/pth_vers.c	24 Mar 2001 16:30:36 -0000	1.138
  +++ ossp-pkg/pth/pth_vers.c	27 Jan 2002 12:34:30 -0000	1.139
  @@ -8,7 +8,7 @@
   #ifndef _PTH_VERS_C_
   #define _PTH_VERS_C_
   
  -#define PTH_INTERNAL_VERSION 0x104200
  +#define PTH_INTERNAL_VERSION 0x104201
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _PTH_VERS_C_AS_HEADER_
   
   pth_internal_version_t pth_internal_version = {
  -    0x104200,
  -    "1.4.0",
  -    "1.4.0 (24-Mar-2001)",
  -    "This is GNU Pth, Version 1.4.0 (24-Mar-2001)",
  -    "GNU Pth 1.4.0 (24-Mar-2001)",
  -    "GNU Pth/1.4.0",
  -    "@(#)GNU Pth 1.4.0 (24-Mar-2001)",
  -    "$Id: GNU Pth 1.4.0 (24-Mar-2001) $"
  +    0x104201,
  +    "1.4.1",
  +    "1.4.1 (27-Jan-2002)",
  +    "This is GNU Pth, Version 1.4.1 (27-Jan-2002)",
  +    "GNU Pth 1.4.1 (27-Jan-2002)",
  +    "GNU Pth/1.4.1",
  +    "@(#)GNU Pth 1.4.1 (27-Jan-2002)",
  +    "$Id: GNU Pth 1.4.1 (27-Jan-2002) $"
   };
   
   #endif /* _PTH_VERS_C_AS_HEADER_ */
  Index: ossp-pkg/pth/pthread-config.1
  ============================================================
  $ cvs diff -u -r1.96 -r1.97 pthread-config.1
  --- ossp-pkg/pth/pthread-config.1	24 Mar 2001 16:30:36 -0000	1.96
  +++ ossp-pkg/pth/pthread-config.1	27 Jan 2002 12:34:30 -0000	1.97
  @@ -1,5 +1,5 @@
  -.\" Automatically generated by Pod::Man version 1.02
  -.\" Sat Mar 24 17:29:28 2001
  +.\" Automatically generated by Pod::Man version 1.15
  +.\" Sun Jan 27 13:33:12 2002
   .\"
   .\" Standard preamble:
   .\" ======================================================================
  @@ -46,8 +46,8 @@
   .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
   .    ds L" ""
   .    ds R" ""
  -.    ds C` `
  -.    ds C' '
  +.    ds C` ""
  +.    ds C' ""
   'br\}
   .el\{\
   .    ds -- \|\(em\|
  @@ -63,7 +63,7 @@
   .if \nF \{\
   .    de IX
   .    tm Index:\\$1\t\\n%\t"\\$2"
  -.    .
  +..
   .    nr % 0
   .    rr F
   .\}
  @@ -138,13 +138,13 @@
   .\" ======================================================================
   .\"
   .IX Title "PTHREAD-CONFIG 1"
  -.TH PTHREAD-CONFIG 1 "24-Mar-2001" "GNU Pth 1.4.0" "POSIX Threading API of GNU Pth"
  +.TH PTHREAD-CONFIG 1 "27-Jan-2002" "GNU Pth 1.4.1" "POSIX Threading API of GNU Pth"
   .UC
   .SH "NAME"
   \&\fBpthread-config\fR \- Pth pthread library build utility
   .SH "VERSION"
   .IX Header "VERSION"
  -\&\s-1GNU\s0 Pth \s-11.4.0 (24-Mar-2001)\s0
  +\&\s-1GNU\s0 Pth \s-11.4.1 (27-Jan-2002)\s0
   .SH "SYNOPSIS"
   .IX Header "SYNOPSIS"
   \&\fBpthread-config\fR
  Index: ossp-pkg/pth/pthread.3
  ============================================================
  $ cvs diff -u -r1.101 -r1.102 pthread.3
  --- ossp-pkg/pth/pthread.3	24 Mar 2001 16:30:36 -0000	1.101
  +++ ossp-pkg/pth/pthread.3	27 Jan 2002 12:34:30 -0000	1.102
  @@ -1,5 +1,5 @@
  -.\" Automatically generated by Pod::Man version 1.02
  -.\" Sat Mar 24 17:29:29 2001
  +.\" Automatically generated by Pod::Man version 1.15
  +.\" Sun Jan 27 13:33:12 2002
   .\"
   .\" Standard preamble:
   .\" ======================================================================
  @@ -46,8 +46,8 @@
   .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
   .    ds L" ""
   .    ds R" ""
  -.    ds C` `
  -.    ds C' '
  +.    ds C` ""
  +.    ds C' ""
   'br\}
   .el\{\
   .    ds -- \|\(em\|
  @@ -63,7 +63,7 @@
   .if \nF \{\
   .    de IX
   .    tm Index:\\$1\t\\n%\t"\\$2"
  -.    .
  +..
   .    nr % 0
   .    rr F
   .\}
  @@ -138,13 +138,13 @@
   .\" ======================================================================
   .\"
   .IX Title "pthread 3"
  -.TH pthread 3 "24-Mar-2001" "GNU Pth 1.4.0" "POSIX Threading API of GNU Pth"
  +.TH pthread 3 "27-Jan-2002" "GNU Pth 1.4.1" "POSIX Threading API of GNU Pth"
   .UC
   .SH "NAME"
   \&\fBpthread\fR \- \s-1POSIX\s0.1c Threading \s-1API\s0 of \s-1GNU\s0 Pth
   .SH "VERSION"
   .IX Header "VERSION"
  -\&\s-1GNU\s0 Pth \s-11.4.0 (24-Mar-2001)\s0
  +\&\s-1GNU\s0 Pth \s-11.4.1 (27-Jan-2002)\s0
   .SH "SYNOPSIS"
   .IX Header "SYNOPSIS"
   \&\fBApplication Makefiles:\fR

From ossp-cvs-owner@ossp.org  Sun Jan 27 13:39:11 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2F81D764D8; Sun, 27 Jan 2002 13:39:11 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog THANKS pth_high.c
Message-Id: <20020127123911.2F81D764D8@mail.ossp.org>
Date: Sun, 27 Jan 2002 13:39:11 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   27-Jan-2002 13:39:11
  Branch: HEAD                             Handle: 2002012712391000

  Modified files:
    ossp-pkg/pth            ChangeLog THANKS pth_high.c

  Log:
    Correctly support PTH_FDMODE_NONBLOCK in pth_connect and pth_accept.
    
    Submitted by: Archie Cobbs <archie@packetdesign.com>

  Summary:
    Revision    Changes     Path
    1.556       +3  -0      ossp-pkg/pth/ChangeLog
    1.83        +2  -1      ossp-pkg/pth/THANKS
    1.82        +3  -2      ossp-pkg/pth/pth_high.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.555 -r1.556 ChangeLog
  --- ossp-pkg/pth/ChangeLog	27 Jan 2002 12:34:29 -0000	1.555
  +++ ossp-pkg/pth/ChangeLog	27 Jan 2002 12:39:10 -0000	1.556
  @@ -21,6 +21,9 @@
       
     Changes between 1.4.0 and 1.4.1 (24-Mar-2001 to 27-Jan-2002)
   
  +   *) Correctly support PTH_FDMODE_NONBLOCK in pth_connect and pth_accept. 
  +      [Archie Cobbs <archie@packetdesign.com>]
  +
      *) Fixed typos in manual page.
         [Michael Schloh v. Bennewitz <michael.schloh@de.cw.net>, 
          Takashi Ishihara <tishihara@ucdavis.edu>]
  Index: ossp-pkg/pth/THANKS
  ============================================================
  $ cvs diff -u -r1.82 -r1.83 THANKS
  --- ossp-pkg/pth/THANKS	30 Nov 2001 12:40:31 -0000	1.82
  +++ ossp-pkg/pth/THANKS	27 Jan 2002 12:39:10 -0000	1.83
  @@ -1,4 +1,4 @@
  -   ____  _   _
  +
     |  _ \| |_| |__                      ``There is enough for the need of
     | |_) | __| '_ \                       everyone in this world, but not
     |  __/| |_| | | |                      for the greed of everyone.'' 
  @@ -22,6 +22,7 @@
       o  Edwin Brown                 <Edwin.Brown@sdrc.com>
       o  Dan Buckler                 <buckler@sco.com>
       o  Mark Burton                 <markb@ordern.com>
  +    o  Archie Cobbs                <archie@packetdesign.com>
       o  Jon Cook                    <cookj@cs.man.ac.uk>
       o  Philippe Defert             <Philippe.Defert@cern.ch>
       o  David Dureau                <david.dureau@cea.fr>
  Index: ossp-pkg/pth/pth_high.c
  ============================================================
  $ cvs diff -u -r1.81 -r1.82 pth_high.c
  --- ossp-pkg/pth/pth_high.c	27 Jan 2002 11:03:40 -0000	1.81
  +++ ossp-pkg/pth/pth_high.c	27 Jan 2002 12:39:10 -0000	1.82
  @@ -496,7 +496,7 @@
       errno_shield { pth_fdmode(s, fdmode); }
   
       /* if it is still on progress wait until socket is really writeable */
  -    if (rv == -1 && errno == EINPROGRESS) {
  +    if (rv == -1 && errno == EINPROGRESS && fdmode != PTH_FDMODE_NONBLOCK) {
           ev = pth_event(PTH_EVENT_FD|PTH_UNTIL_FD_WRITEABLE|PTH_MODE_STATIC, &ev_key, s);
           if (ev_extra != NULL)
               pth_event_concat(ev, ev_extra, NULL);
  @@ -541,7 +541,8 @@
       /* poll socket via accept */
       ev = NULL;
       while ((rv = pth_sc(accept)(s, addr, addrlen)) == -1
  -           && (errno == EAGAIN || errno == EWOULDBLOCK)) {
  +           && (errno == EAGAIN || errno == EWOULDBLOCK)
  +           && fdmode != PTH_FDMODE_NONBLOCK) {
           /* do lazy event allocation */
           if (ev == NULL) {
               ev = pth_event(PTH_EVENT_FD|PTH_UNTIL_FD_READABLE|PTH_MODE_STATIC, &ev_key, s);

From ossp-cvs-owner@ossp.org  Sun Jan 27 14:15:29 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 37F27764D8; Sun, 27 Jan 2002 14:15:29 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog pth_event.c pth_high.c pth_util.c
Message-Id: <20020127131529.37F27764D8@mail.ossp.org>
Date: Sun, 27 Jan 2002 14:15:29 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   27-Jan-2002 14:15:29
  Branch: HEAD                             Handle: 2002012713152800

  Modified files:
    ossp-pkg/pth            ChangeLog pth_event.c pth_high.c pth_util.c

  Log:
    Internally make sure an invalid file-descriptor (integer not
    between 0 and (FD_SETSIZE-1) does not lead to any segfaults or
    other undefined behaviour. Instead an error is returned and errno
    is set to EBADF, similar to what the OS functions do. Especially
    pth_poll() now return with this error (instead of skipping the fd)
    if an fd in the "struct pollfd" is invalid.
    
    Hint by: Archie Cobbs <archie@packetdesign.com>

  Summary:
    Revision    Changes     Path
    1.557       +8  -0      ossp-pkg/pth/ChangeLog
    1.58        +2  -0      ossp-pkg/pth/pth_event.c
    1.83        +22 -2      ossp-pkg/pth/pth_high.c
    1.21        +9  -0      ossp-pkg/pth/pth_util.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.556 -r1.557 ChangeLog
  --- ossp-pkg/pth/ChangeLog	27 Jan 2002 12:39:10 -0000	1.556
  +++ ossp-pkg/pth/ChangeLog	27 Jan 2002 13:15:28 -0000	1.557
  @@ -21,6 +21,14 @@
       
     Changes between 1.4.0 and 1.4.1 (24-Mar-2001 to 27-Jan-2002)
   
  +   *) Internally make sure an invalid file-descriptor (integer not
  +      between 0 and (FD_SETSIZE-1) does not lead to any segfaults or
  +      other undefined behaviour. Instead an error is returned and errno
  +      is set to EBADF, similar to what the OS functions do. Especially
  +      pth_poll() now return with this error (instead of skipping the fd)
  +      if an fd in the "struct pollfd" is invalid.
  +      [Ralf S. Engelschall, Archie Cobbs <archie@packetdesign.com>]
  +
      *) Correctly support PTH_FDMODE_NONBLOCK in pth_connect and pth_accept. 
         [Archie Cobbs <archie@packetdesign.com>]
   
  Index: ossp-pkg/pth/pth_event.c
  ============================================================
  $ cvs diff -u -r1.57 -r1.58 pth_event.c
  --- ossp-pkg/pth/pth_event.c	27 Jan 2002 11:03:40 -0000	1.57
  +++ ossp-pkg/pth/pth_event.c	27 Jan 2002 13:15:28 -0000	1.58
  @@ -114,6 +114,8 @@
       if (spec & PTH_EVENT_FD) {
           /* filedescriptor event */
           int fd = va_arg(ap, int);
  +        if (!pth_util_fd_valid(fd))
  +            return_errno(NULL, EBADF);
           ev->ev_type = PTH_EVENT_FD;
           ev->ev_goal = (int)(spec & (PTH_UNTIL_FD_READABLE|\
                                       PTH_UNTIL_FD_WRITEABLE|\
  Index: ossp-pkg/pth/pth_high.c
  ============================================================
  $ cvs diff -u -r1.82 -r1.83 pth_high.c
  --- ossp-pkg/pth/pth_high.c	27 Jan 2002 12:39:10 -0000	1.82
  +++ ossp-pkg/pth/pth_high.c	27 Jan 2002 13:15:28 -0000	1.83
  @@ -411,8 +411,8 @@
       FD_ZERO(&wfds);
       FD_ZERO(&efds);
       for(i = 0; i < nfd; i++) {
  -        if (pfd[i].fd < 0)
  -            continue;
  +        if (!pth_util_fd_valid(pfd[i].fd))
  +            return_errno(-1, EBADF);
           if (pfd[i].events & POLLIN)
               FD_SET(pfd[i].fd, &rfds);
           if (pfd[i].events & POLLOUT)
  @@ -600,6 +600,8 @@
           /* now directly poll filedescriptor for readability
              to avoid unneccessary (and resource consuming because of context
              switches, etc) event handling through the scheduler */
  +        if (!pth_util_fd_valid(fd))
  +            return_errno(-1, EBADF);
           FD_ZERO(&fds);
           FD_SET(fd, &fds);
           delay.tv_sec  = 0;
  @@ -668,6 +670,10 @@
           /* now directly poll filedescriptor for writeability
              to avoid unneccessary (and resource consuming because of context
              switches, etc) event handling through the scheduler */
  +        if (!pth_util_fd_valid(fd)) {
  +            pth_fdmode(fd, fdmode);
  +            return_errno(-1, EBADF);
  +        }
           FD_ZERO(&fds);
           FD_SET(fd, &fds);
           delay.tv_sec  = 0;
  @@ -758,6 +764,8 @@
           /* first directly poll filedescriptor for readability
              to avoid unneccessary (and resource consuming because of context
              switches, etc) event handling through the scheduler */
  +        if (!pth_util_fd_valid(fd))
  +            return_errno(-1, EBADF);
           FD_ZERO(&fds);
           FD_SET(fd, &fds);
           delay.tv_sec  = 0;
  @@ -900,6 +908,12 @@
           /* first directly poll filedescriptor for writeability
              to avoid unneccessary (and resource consuming because of context
              switches, etc) event handling through the scheduler */
  +        if (!pth_util_fd_valid(fd)) {
  +            pth_fdmode(fd, fdmode);
  +            if (iovcnt > sizeof(tiov_stack))
  +                free(tiov);
  +            return_errno(-1, EBADF);
  +        }
           FD_ZERO(&fds);
           FD_SET(fd, &fds);
           delay.tv_sec  = 0;
  @@ -1177,6 +1191,8 @@
           /* now directly poll filedescriptor for readability
              to avoid unneccessary (and resource consuming because of context
              switches, etc) event handling through the scheduler */
  +        if (!pth_util_fd_valid(fd))
  +            return_errno(-1, EBADF);
           FD_ZERO(&fds);
           FD_SET(fd, &fds);
           delay.tv_sec  = 0;
  @@ -1257,6 +1273,10 @@
           /* now directly poll filedescriptor for writeability
              to avoid unneccessary (and resource consuming because of context
              switches, etc) event handling through the scheduler */
  +        if (!pth_util_fd_valid(fd)) {
  +            pth_fdmode(fd, fdmode);
  +            return_errno(-1, EBADF);
  +        }
           FD_ZERO(&fds);
           FD_SET(fd, &fds);
           delay.tv_sec  = 0;
  Index: ossp-pkg/pth/pth_util.c
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 pth_util.c
  --- ossp-pkg/pth/pth_util.c	27 Jan 2002 11:03:41 -0000	1.20
  +++ ossp-pkg/pth/pth_util.c	27 Jan 2002 13:15:28 -0000	1.21
  @@ -91,6 +91,15 @@
       return d;
   }
   
  +/* check whether a file-descriptor is valid */
  +#if cpp
  +#if !defined(FD_SETSIZE)
  +#define FD_SETSIZE 1024
  +#endif
  +#define pth_util_fd_valid(fd) \
  +    ((fd) >= 0 && (fd) <= (FD_SETSIZE-1))
  +#endif
  +
   /* merge input fd set into output fds */
   intern void pth_util_fds_merge(int nfd,
                                  fd_set *ifds1, fd_set *ofds1,

From ossp-cvs-owner@ossp.org  Sun Jan 27 14:16:20 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CBAF9764D8; Sun, 27 Jan 2002 14:16:20 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth HISTORY
Message-Id: <20020127131620.CBAF9764D8@mail.ossp.org>
Date: Sun, 27 Jan 2002 14:16:20 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   27-Jan-2002 14:16:20
  Branch: HEAD                             Handle: 2002012713162000

  Modified files:
    ossp-pkg/pth            HISTORY

  Log:
    add 1.4.1

  Summary:
    Revision    Changes     Path
    1.10        +1  -0      ossp-pkg/pth/HISTORY
  ____________________________________________________________________________

  Index: ossp-pkg/pth/HISTORY
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 HISTORY
  --- ossp-pkg/pth/HISTORY	24 Mar 2001 16:30:36 -0000	1.9
  +++ ossp-pkg/pth/HISTORY	27 Jan 2002 13:16:20 -0000	1.10
  @@ -95,4 +95,5 @@
     29-Jul-2000  1.3.7         release
     29-Jul-2000  1.4a3         alpha
     24-Mar-2001  1.4.0         release
  +  27-Jan-2002  1.4.1         release
   

From ossp-cvs-owner@ossp.org  Sun Jan 27 17:11:42 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C3452764D8; Sun, 27 Jan 2002 17:11:42 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog
Message-Id: <20020127161142.C3452764D8@mail.ossp.org>
Date: Sun, 27 Jan 2002 17:11:42 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   27-Jan-2002 17:11:42
  Branch: HEAD                             Handle: 2002012716114200

  Modified files:
    ossp-pkg/pth            ChangeLog

  Log:
    add 1.5 header

  Summary:
    Revision    Changes     Path
    1.558       +7  -0      ossp-pkg/pth/ChangeLog
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.557 -r1.558 ChangeLog
  --- ossp-pkg/pth/ChangeLog	27 Jan 2002 13:15:28 -0000	1.557
  +++ ossp-pkg/pth/ChangeLog	27 Jan 2002 16:11:42 -0000	1.558
  @@ -13,6 +13,13 @@
     of just the user-visible and/or major changes please have a look at
     the NEWS file.
   
  +     _   ____  
  +    / | | ___| 
  +    | | |___ \ 
  +    | |_ ___) |
  +  __|_(_)____/____________________________________________________________
  +
  +
        _  _  _   
       / || || |  
       | || || |_ 

From ossp-cvs-owner@ossp.org  Sun Jan 27 17:14:03 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 078A8764D8; Sun, 27 Jan 2002 17:14:02 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth README pth-config.1 pth.3 pth.spec pth_vers.c...
Message-Id: <20020127161402.078A8764D8@mail.ossp.org>
Date: Sun, 27 Jan 2002 17:14:02 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   27-Jan-2002 17:14:02
  Branch: HEAD                             Handle: 2002012716140101

  Modified files:
    ossp-pkg/pth            README pth-config.1 pth.3 pth.spec pth_vers.c
                            pthread-config.1 pthread.3

  Log:
    switch to version 1.5 branding

  Summary:
    Revision    Changes     Path
    1.195       +1  -1      ossp-pkg/pth/README
    1.133       +3  -3      ossp-pkg/pth/pth-config.1
    1.233       +3  -3      ossp-pkg/pth/pth.3
    1.9         +1  -1      ossp-pkg/pth/pth.spec
    1.140       +9  -9      ossp-pkg/pth/pth_vers.c
    1.98        +3  -3      ossp-pkg/pth/pthread-config.1
    1.103       +3  -3      ossp-pkg/pth/pthread.3
  ____________________________________________________________________________

  Index: ossp-pkg/pth/README
  ============================================================
  $ cvs diff -u -r1.194 -r1.195 README
  --- ossp-pkg/pth/README	27 Jan 2002 12:34:29 -0000	1.194
  +++ ossp-pkg/pth/README	27 Jan 2002 16:14:01 -0000	1.195
  @@ -5,7 +5,7 @@
     |_|    \__|_| |_|                     the impossible.''
   
     GNU Pth - The GNU Portable Threads
  -  Version 1.4.1 (27-Jan-2002)
  +  Version 1.5b1 (27-Jan-2002)
   
     ABSTRACT
   
  Index: ossp-pkg/pth/pth-config.1
  ============================================================
  $ cvs diff -u -r1.132 -r1.133 pth-config.1
  --- ossp-pkg/pth/pth-config.1	27 Jan 2002 12:34:30 -0000	1.132
  +++ ossp-pkg/pth/pth-config.1	27 Jan 2002 16:14:01 -0000	1.133
  @@ -1,5 +1,5 @@
   .\" Automatically generated by Pod::Man version 1.15
  -.\" Sun Jan 27 13:33:10 2002
  +.\" Sun Jan 27 17:13:12 2002
   .\"
   .\" Standard preamble:
   .\" ======================================================================
  @@ -138,13 +138,13 @@
   .\" ======================================================================
   .\"
   .IX Title "PTH-CONFIG 1"
  -.TH PTH-CONFIG 1 "27-Jan-2002" "GNU Pth 1.4.1" "GNU Portable Threads"
  +.TH PTH-CONFIG 1 "27-Jan-2002" "GNU Pth 1.5b1" "GNU Portable Threads"
   .UC
   .SH "NAME"
   \&\fBpth-config\fR \- Pth library build utility
   .SH "VERSION"
   .IX Header "VERSION"
  -\&\s-1GNU\s0 Pth \s-11.4.1 (27-Jan-2002)\s0
  +\&\s-1GNU\s0 Pth \s-11.5b1 (27-Jan-2002)\s0
   .SH "SYNOPSIS"
   .IX Header "SYNOPSIS"
   \&\fBpth-config\fR
  Index: ossp-pkg/pth/pth.3
  ============================================================
  $ cvs diff -u -r1.232 -r1.233 pth.3
  --- ossp-pkg/pth/pth.3	27 Jan 2002 12:34:30 -0000	1.232
  +++ ossp-pkg/pth/pth.3	27 Jan 2002 16:14:01 -0000	1.233
  @@ -1,5 +1,5 @@
   .\" Automatically generated by Pod::Man version 1.15
  -.\" Sun Jan 27 13:33:11 2002
  +.\" Sun Jan 27 17:13:13 2002
   .\"
   .\" Standard preamble:
   .\" ======================================================================
  @@ -138,13 +138,13 @@
   .\" ======================================================================
   .\"
   .IX Title "pth 3"
  -.TH pth 3 "27-Jan-2002" "GNU Pth 1.4.1" "GNU Portable Threads"
  +.TH pth 3 "27-Jan-2002" "GNU Pth 1.5b1" "GNU Portable Threads"
   .UC
   .SH "NAME"
   \&\fBpth\fR \- \s-1GNU\s0 Portable Threads
   .SH "VERSION"
   .IX Header "VERSION"
  -\&\s-1GNU\s0 Pth \s-11.4.1 (27-Jan-2002)\s0
  +\&\s-1GNU\s0 Pth \s-11.5b1 (27-Jan-2002)\s0
   .SH "SYNOPSIS"
   .IX Header "SYNOPSIS"
   .Ip "\fBGlobal Library Management\fR" 4
  Index: ossp-pkg/pth/pth.spec
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 pth.spec
  --- ossp-pkg/pth/pth.spec	27 Jan 2002 12:34:30 -0000	1.8
  +++ ossp-pkg/pth/pth.spec	27 Jan 2002 16:14:02 -0000	1.9
  @@ -30,7 +30,7 @@
   #   distribution tarball.
   
   %define prefix /usr
  -%define ver 1.4.1
  +%define ver 1.5b1
   %define rel 1
   
   Name:       pth
  Index: ossp-pkg/pth/pth_vers.c
  ============================================================
  $ cvs diff -u -r1.139 -r1.140 pth_vers.c
  --- ossp-pkg/pth/pth_vers.c	27 Jan 2002 12:34:30 -0000	1.139
  +++ ossp-pkg/pth/pth_vers.c	27 Jan 2002 16:14:02 -0000	1.140
  @@ -8,7 +8,7 @@
   #ifndef _PTH_VERS_C_
   #define _PTH_VERS_C_
   
  -#define PTH_INTERNAL_VERSION 0x104201
  +#define PTH_INTERNAL_VERSION 0x105101
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _PTH_VERS_C_AS_HEADER_
   
   pth_internal_version_t pth_internal_version = {
  -    0x104201,
  -    "1.4.1",
  -    "1.4.1 (27-Jan-2002)",
  -    "This is GNU Pth, Version 1.4.1 (27-Jan-2002)",
  -    "GNU Pth 1.4.1 (27-Jan-2002)",
  -    "GNU Pth/1.4.1",
  -    "@(#)GNU Pth 1.4.1 (27-Jan-2002)",
  -    "$Id: GNU Pth 1.4.1 (27-Jan-2002) $"
  +    0x105101,
  +    "1.5b1",
  +    "1.5b1 (27-Jan-2002)",
  +    "This is GNU Pth, Version 1.5b1 (27-Jan-2002)",
  +    "GNU Pth 1.5b1 (27-Jan-2002)",
  +    "GNU Pth/1.5b1",
  +    "@(#)GNU Pth 1.5b1 (27-Jan-2002)",
  +    "$Id: GNU Pth 1.5b1 (27-Jan-2002) $"
   };
   
   #endif /* _PTH_VERS_C_AS_HEADER_ */
  Index: ossp-pkg/pth/pthread-config.1
  ============================================================
  $ cvs diff -u -r1.97 -r1.98 pthread-config.1
  --- ossp-pkg/pth/pthread-config.1	27 Jan 2002 12:34:30 -0000	1.97
  +++ ossp-pkg/pth/pthread-config.1	27 Jan 2002 16:14:02 -0000	1.98
  @@ -1,5 +1,5 @@
   .\" Automatically generated by Pod::Man version 1.15
  -.\" Sun Jan 27 13:33:12 2002
  +.\" Sun Jan 27 17:13:14 2002
   .\"
   .\" Standard preamble:
   .\" ======================================================================
  @@ -138,13 +138,13 @@
   .\" ======================================================================
   .\"
   .IX Title "PTHREAD-CONFIG 1"
  -.TH PTHREAD-CONFIG 1 "27-Jan-2002" "GNU Pth 1.4.1" "POSIX Threading API of GNU Pth"
  +.TH PTHREAD-CONFIG 1 "27-Jan-2002" "GNU Pth 1.5b1" "POSIX Threading API of GNU Pth"
   .UC
   .SH "NAME"
   \&\fBpthread-config\fR \- Pth pthread library build utility
   .SH "VERSION"
   .IX Header "VERSION"
  -\&\s-1GNU\s0 Pth \s-11.4.1 (27-Jan-2002)\s0
  +\&\s-1GNU\s0 Pth \s-11.5b1 (27-Jan-2002)\s0
   .SH "SYNOPSIS"
   .IX Header "SYNOPSIS"
   \&\fBpthread-config\fR
  Index: ossp-pkg/pth/pthread.3
  ============================================================
  $ cvs diff -u -r1.102 -r1.103 pthread.3
  --- ossp-pkg/pth/pthread.3	27 Jan 2002 12:34:30 -0000	1.102
  +++ ossp-pkg/pth/pthread.3	27 Jan 2002 16:14:02 -0000	1.103
  @@ -1,5 +1,5 @@
   .\" Automatically generated by Pod::Man version 1.15
  -.\" Sun Jan 27 13:33:12 2002
  +.\" Sun Jan 27 17:13:15 2002
   .\"
   .\" Standard preamble:
   .\" ======================================================================
  @@ -138,13 +138,13 @@
   .\" ======================================================================
   .\"
   .IX Title "pthread 3"
  -.TH pthread 3 "27-Jan-2002" "GNU Pth 1.4.1" "POSIX Threading API of GNU Pth"
  +.TH pthread 3 "27-Jan-2002" "GNU Pth 1.5b1" "POSIX Threading API of GNU Pth"
   .UC
   .SH "NAME"
   \&\fBpthread\fR \- \s-1POSIX\s0.1c Threading \s-1API\s0 of \s-1GNU\s0 Pth
   .SH "VERSION"
   .IX Header "VERSION"
  -\&\s-1GNU\s0 Pth \s-11.4.1 (27-Jan-2002)\s0
  +\&\s-1GNU\s0 Pth \s-11.5b1 (27-Jan-2002)\s0
   .SH "SYNOPSIS"
   .IX Header "SYNOPSIS"
   \&\fBApplication Makefiles:\fR

From ossp-cvs-owner@ossp.org  Sun Jan 27 17:39:23 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4BA27764D8; Sun, 27 Jan 2002 17:39:23 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth PORTING
Message-Id: <20020127163923.4BA27764D8@mail.ossp.org>
Date: Sun, 27 Jan 2002 17:39:23 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   27-Jan-2002 17:39:23
  Branch: HEAD                             Handle: 2002012716392200

  Modified files:
    ossp-pkg/pth            PORTING

  Log:
    Solaris 9 works fine

  Summary:
    Revision    Changes     Path
    1.186       +1  -0      ossp-pkg/pth/PORTING
  ____________________________________________________________________________

  Index: ossp-pkg/pth/PORTING
  ============================================================
  $ cvs diff -u -r1.185 -r1.186 PORTING
  --- ossp-pkg/pth/PORTING	30 Nov 2001 12:39:10 -0000	1.185
  +++ ossp-pkg/pth/PORTING	27 Jan 2002 16:39:22 -0000	1.186
  @@ -118,6 +118,7 @@
     alphaev6-unknown-linux-gnu          | sjlj/ssjlj/sas    | down    | 1.2.0
     powerpc-unknown-linux-gnu           | sjls/ssjlj/sas    | down    | 1.2.0
     powerpc-debian-linux-gnu2.2glibc2.1 | sjlj/ssjlj/sas    | down    | 1.3.5
  +  sparc-sun-solaris2.9                | mcsc/sc/mc        | down    | 1.4.1
     sparc-sun-solaris2.8                | mcsc/sc/mc        | down    | 1.4a2
     sparc-sun-solaris2.7                | mcsc/sc/mc        | down    | 1.2.0
     sparc-sun-solaris2.6                | mcsc/sc/mc        | down    | 1.3.0

From ossp-cvs-owner@ossp.org  Sun Jan 27 20:38:50 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 61E66764D8; Sun, 27 Jan 2002 20:38:50 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex ex.h
Message-Id: <20020127193850.61E66764D8@mail.ossp.org>
Date: Sun, 27 Jan 2002 20:38:50 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   27-Jan-2002 20:38:50
  Branch: HEAD                             Handle: 2002012719384900

  Modified files:
    ossp-pkg/ex             ex.h

  Log:
    reduce referencing amount (important in MT environments)

  Summary:
    Revision    Changes     Path
    1.9         +6  -5      ossp-pkg/ex/ex.h
  ____________________________________________________________________________

  Index: ossp-pkg/ex/ex.h
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 ex.h
  --- ossp-pkg/ex/ex.h	26 Jan 2002 22:50:12 -0000	1.8
  +++ ossp-pkg/ex/ex.h	27 Jan 2002 19:38:49 -0000	1.9
  @@ -142,10 +142,11 @@
   /* the block for trying execution */
   #define ex_try \
       { \
  +        ex_ctx_t *__ex_ctx_ptr = __ex_ctx; \
           __ex_mctx_t *__ex_mctx_en; \
           __ex_mctx_t __ex_mctx_me; \
  -        __ex_mctx_en = __ex_ctx->ctx_mctx; \
  -        __ex_ctx->ctx_mctx = &__ex_mctx_me; \
  +        __ex_mctx_en = __ex_ctx_ptr->ctx_mctx; \
  +        __ex_ctx_ptr->ctx_mctx = &__ex_mctx_me; \
           if (__ex_mctx_save(&__ex_mctx_me)) { \
               if (1)
   
  @@ -153,13 +154,13 @@
   #define ex_catch(e) \
               else { \
               } \
  -            __ex_ctx->ctx_caught = 0; \
  +            __ex_ctx_ptr->ctx_caught = 0; \
           } \
           else { \
               __ex_mctx_restored(&__ex_mctx_me); \
  -            __ex_ctx->ctx_caught = 1; \
  +            __ex_ctx_ptr->ctx_caught = 1; \
           } \
  -        __ex_ctx->ctx_mctx = __ex_mctx_en; \
  +        __ex_ctx_ptr->ctx_mctx = __ex_mctx_en; \
       } \
       if (   !(__ex_ctx->ctx_caught) \
           || ((e) = __ex_ctx->ctx_ex, 0)) { \

From ossp-cvs-owner@ossp.org  Sun Jan 27 21:42:29 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8B680764D8; Sun, 27 Jan 2002 21:42:29 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c
Message-Id: <20020127204229.8B680764D8@mail.ossp.org>
Date: Sun, 27 Jan 2002 21:42:29 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   27-Jan-2002 21:42:29
  Branch: HEAD                             Handle: 2002012720422900

  Modified files:
    ossp-pkg/sa             sa.c

  Log:
    Linux does not have SA_OPTION_REUSEPORT, so use this optionally only.

  Summary:
    Revision    Changes     Path
    1.52        +6  -1      ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.51 -r1.52 sa.c
  --- ossp-pkg/sa/sa.c	2 Jan 2002 13:53:11 -0000	1.51
  +++ ossp-pkg/sa/sa.c	27 Jan 2002 20:42:29 -0000	1.52
  @@ -1159,7 +1159,10 @@
               break;
           }
           case SA_OPTION_REUSEADDR:
  -        case SA_OPTION_REUSEPORT: {
  +#ifdef SA_OPTION_REUSEPORT
  +        case SA_OPTION_REUSEPORT: 
  +#endif
  +        {
               /* enable/disable reusability of binding to address or port */
               int mode = ((int)va_arg(ap, int) ? 1 : 0);
               int flag;
  @@ -1169,7 +1172,9 @@
               }
               switch (id) {
                   case SA_OPTION_REUSEADDR: flag = SO_REUSEADDR; break;
  +#ifdef SA_OPTION_REUSEPORT
                   case SA_OPTION_REUSEPORT: flag = SO_REUSEPORT; break;
  +#endif
                   default: flag = 0; break;
               }
               if (setsockopt(sa->fdSocket, SOL_SOCKET, flag, 

From ossp-cvs-owner@ossp.org  Sun Jan 27 21:43:22 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5883E764D8; Sun, 27 Jan 2002 21:43:22 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c
Message-Id: <20020127204322.5883E764D8@mail.ossp.org>
Date: Sun, 27 Jan 2002 21:43:22 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   27-Jan-2002 21:43:22
  Branch: HEAD                             Handle: 2002012720432100

  Modified files:
    ossp-pkg/sa             sa.c

  Log:
    Ops, an else was killed... add it again

  Summary:
    Revision    Changes     Path
    1.53        +1  -0      ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.52 -r1.53 sa.c
  --- ossp-pkg/sa/sa.c	27 Jan 2002 20:42:29 -0000	1.52
  +++ ossp-pkg/sa/sa.c	27 Jan 2002 20:43:21 -0000	1.53
  @@ -1108,6 +1108,7 @@
               sa->nWriteSize = 0;
           }
       }
  +    else
           return SA_ERR_ARG;
   
       return SA_OK;

From ossp-cvs-owner@ossp.org  Mon Jan 28 13:08:14 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B30CB764EB; Mon, 28 Jan 2002 13:08:13 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.pod
Message-Id: <20020128120813.B30CB764EB@mail.ossp.org>
Date: Mon, 28 Jan 2002 13:08:13 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   28-Jan-2002 13:08:13
  Branch: HEAD                             Handle: 2002012812081300

  Modified files:
    ossp-pkg/rc             rc.pod

  Log:
    ms and thl manually merged ms' and rse's work

  Summary:
    Revision    Changes     Path
    1.16        +221 -218   ossp-pkg/rc/rc.pod
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.pod
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 rc.pod
  --- ossp-pkg/rc/rc.pod	23 Jan 2002 15:36:05 -0000	1.15
  +++ ossp-pkg/rc/rc.pod	28 Jan 2002 12:08:13 -0000	1.16
  @@ -1,5 +1,5 @@
   ##
  -##  rc.pod -- OSSP Run Command Facility (Manual Page)
  +##  rc.pod -- OSSP Run Command Processor (Manual Page)
   ##  Copyright (c) 2000-2002 Cable & Wireless Deutschland GmbH
   ##  Copyright (c) 2000-2002 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>
  @@ -23,116 +23,13 @@
   ##  SUCH DAMAGE.
   ##
   
  -# ref: %start; %stop
  -# cfg
  -# def --showdefault, --defsetion=config
  -
  -# --dir=dir1:dir2:..
  -# --rcfile='rc.%s'
  -# --regex-section='(?<=^|\n)%%%s\s*\n(.+?)(?=\n%\S+|$)'
  -# --regex-param='..'
  -# --regex-reference='(?<=^|\n)%%%s\s*(.+?)(?=\n|;)'
  -# --regex-config='(\s+)=(.*)$'
  -# --name-config=config
  -# --name-common=common
  -
  -#  RegexSection (?<=^|\n)%%%s\s*\n(.+?)(?=\n%\S+|$)
  -
  -# - instead of separate run-commands use a global one
  -# - temporarily deactivation of run-commands through environment variable 
  -# - perhaps: "rc <class>[,<class>[,...]] <cmd> [-<opt> ...] [<cmd> ...]
  -
  -# Examples:
  -
  -# rc.foo
  -%config
  -    foo=1
  -    bar=2
  -%start -u root -p 200
  -    /cw/bin/fooctl start $foo
  -%stop -u root -p 200
  -    /cw/bin/fooctl stop $bar
  -%restart -u root
  -    %stop
  -    sleep 1
  -    %start
  -%foo -c /usr/bin/perl
  -    print STDERR "foo";
  -
  -<!-- rc.foo -->
  -<config>
  -    <set name=foo>1</set>
  -    <set name=bar>2</set>
  -</config>
  -<start user=root priority=20>
  -    /cw/bin/fooctl start $foo
  -</start>
  -<stop user=root priority=200>
  -    /cw/bin/fooctl stop $bar
  -</stop>
  -<restart user=root>
  -    %stop
  -    sleep 1
  -    %start
  -</restart>
  -<foo command=/usr/bin/perl>
  -    print STDERR "foo";
  -</foo>
  -
  -rc <package> <section> [<section> ...]
  -
  -foreach sec in <section> [<section> ...] {
  -    foreach dir in --dir=dir1:dir2:.. {
  -        search for --rcfile where %s is <package>
  -        parse rcfile into blocks according to --regex-section/etc.
  -        remember common/<section> into list
  -    }
  -    // we now have an unsorted list of common/<section>
  -    sort list of common/<section> according to their priority (see --regex-param)
  -
  -    // execution
  -    forearch common/<section> in list {
  -        prepend config section
  -        prepend common section
  -        expand references accordingf to --regex-reference
  -        execute result as user/group (see --regex-param) with interpreter (see --regex-param)
  -    }
  -}
  -
  -cd () {
  -    eval `rc --eval --rcfunc=$HOME/.cdfunc --rcfile-owner=$USER --rcfile-umask=022 --dir .:..:../..:../../.. --rcfile .cd all leave`
  -    builtin cd ${1+"$@"}
  -    eval `rc --eval --rcfunc=$HOME/.cdfunc --rcfile-owner=$USER --rcfile-umask=022 --dir .:..:../..:../../.. --rcfile .cd all enter`
  -}
  -
  -#  $HOME/.cdfunc
  -AddPath () {
  -    ...
  -}
  -RemPath () {
  -    ...
  -}
  -
  -# .cd
  -%enter
  -    FOO=1
  -    export FOO
  -    AddPath `pwd`/bin
  -%leave
  -    unset FOO
  -    RemPath `pwd`/bin
  -
  -TODO:
  -- error semantic: imediate faulure or skip failured
  -- security => --rcfile-umask
  -
   =pod
   
   =head1 NAME
   
   =over 4
   
  -B<rc> - OSSP Run Command Facility
  +B<rc> - OSSP Run Command Processor
   
   =back 4
   
  @@ -140,6 +37,11 @@
   
   =over 4
   
  +#rc [-h|--help] [-V|--version] [-v|--verbose]
  +#   [-d|--debug] [-p|--print] [-e|--eval]
  +#   [-c|--config] [-q|--query] [-r|--raw]
  +#   <command> <section> [<section> ...]
  +
   =item B<General>
   
   @l_prefix@/etc/rc
  @@ -194,19 +96,34 @@
   
   =over 4
   
  -B<OSSP rc> is a generic run-command processor. It applies the script code associated with
  -a given section label to one or more given commands. The command(s) must each
  -have entries in the form rc.<command> including script code grouped into
  -sections. OSSP rc references these command entries by reading the
  -configuration file (see FILES) and searching the directory where the command
  -entries reside.
  -
  -Each section of script code extends a type of functionality described by its
  -section label. This label is the same one given before the desired command(s).
  -Although only one section is possible for each call to OSSP rc, many
  -`commands' can follow the section label. This allows for an abbreviated input
  -format when calling the same script section of many commands. An example of
  -this is given in `EXAMPLES.'
  +OSSP rc is a run command processor. It applies the script code associated with
  +one or more given section label to a given program. The program must have an
  +entry in the form rc.<program> including script code grouped into sections. To
  +help understand this file structure and how a section typically looks, an
  +example called F<rc.example> is included in the distribution. OSSP rc
  +references these command entries by reading the configuration file (see FILES)
  +and searching the directory where the program entries reside.
  +
  +Each section of script code offers a type of functionality described by its
  +section label. This label is the same one given on the command line after the
  +desired program name. Only one program may be processed at a time, although
  +many sections can be sourced with the same call to rc. An example of this is
  +given in `EXAMPLES.'
  +
  +There exists one exception to this rule in which an rc keyword named `all' is
  +reserved to mean `all programs.' The user may thus give the `all' wildcard in
  +place of the C<program> parameter to process the given sections of all
  +programs found.
  +
  +#THL! does "all stop start" mean "a stop stop, a start, b start" or " a stop,
  +#a start, b stop, b start"?
  +#Prioritaeten
  +
  +#Using the `all' wildcard may be risky in some cases, because successful
  +#performance then depends not only on the code written into each program's
  +#sections but also if every single program found has the named section label at
  +#all. For information about the rc exit status after such an operation see
  +#`DIAGNOSTICS.'
   
   =back 4
   
  @@ -214,15 +131,13 @@
   
   =over 4
   
  -!FIXME! Remark, difference between PARAMETER OPTIONS and COMMAND OPTIONS
  -
   Inclusive options which may be used with another
   
   =item B<-c>, B<--config> F<file>
   
   specify the location of the configuration file,
  -overriding the environment variable C<$OSSP_RC_CONFIG>
  -and the built-in hard-coded value.
  +overriding the environment variable $OSSP_RC_CONFIG
  +and the built-in hard-coded value (see DEFAULTS.)!FIXME!
   
   =item B<-n>, B<--func> F<file>[C<:>F<file>[...]]
   
  @@ -235,7 +150,7 @@
   
   =item B<-d>, B<--dirs> I<dir>[C<:>I<dir>[...]
   
  -override OSSP_RC_ROOT, and use these paths instead
  +override OSSP_RC_DIRS, and use these paths instead
   
   =item B<-t>, B<--tmpdir> I<dir>
   
  @@ -247,7 +162,7 @@
   
   =item B<-s>, B<--silent>
   
  -hold silence, and output no text messages whatsoever
  +be silent, and disable output
   
   =item B<-d>, B<--debug>
   
  @@ -257,8 +172,12 @@
   
   output text using no terminal control sequences
   
  +=back 4
  +
   Mutually exclusive options, i.e. only a single one can be given
   
  +=over 4
  +
   =item B<-h>, B<--help>
   
   print this help, then exit
  @@ -278,7 +197,7 @@
   
   =item B<-x>, B<--exec>
   
  -execute in subshell(s), follow with <program> <section>
  +execute in subshell(s), will actually run the commands
   
   =item B<-q>, B<--query>
   
  @@ -292,50 +211,44 @@
   
   print a comprehensive summary of the rc environment
   
  -All of these options have reasonable default values, which OSSP rc assumes
  -when no option is otherwise given. For details of some listed option see
  -`NOTES'.
  -
   =back 4
   
   =head1 NOTES
   
   =over 4
   
  -!FIXME! Remark, difference between PARAMETER OPTIONS and COMMAND OPTIONS
  +=item B<-h>, B<--help>, B<-V>, B<--version>, B<-v>, B<--verbose>, and B<-q>
  +B<--silent>
   
  -=over 4
  +The B<--help>, B<--version>, B<--verbose>, and B<--silent> options are used to
  +control the screen output of B<rc>, but control the general output of all
  +script code found in the F<rc.files> as well. For example, specifying
  +B<--silent> will mute B<rc>'s output and also all script output that B<rc>
  +runs.
   
  -As expected, when B<rc> has output it will write ASCII text to F<stdout> for
  -normal output, and F<stderr> for abnormal output (such as warnings and
  -errors.) The options for controlling the output content are B<--config>,
  -B<--help>, B<--version>, B<--verbose>, and B<--silent>.
  +=item B<-t>, B<--tmpdir> I<dir>
   
   The option B<-r> or B<--raw> turns on raw output mode. In this case, no
  -formatting is done to output text. This mode contrasts formatted output mode,
  -in which the output is annotated with terminal control sequences for better
  -readability. This option has no single default value. If the raw mode option
  -is not specified, B<rc> will determine whether F<stdout> is connected to a
  -terminal. If so, B<rc> will run in formatted output mode. If F<stdout> is not
  -connected to a terminal (such as with most daemons,) B<rc> will run in raw
  -output mode even though it was not specified as an option. 
  +formatting is done to the screen output. This mode is different from formatted
  +output mode, in which the output is annotated with terminal control sequences
  +for better readability.
   
   =item B<-t>, B<--tmpdir> I<dir>
   
  -Specifying this option will force B<rc> to use the given temporary directory
  -I<dir> for all its temporary output. If this option is not given, B<rc> will
  -try to use C<$TMPDIR>, C<$TEMPDIR>, C<~/tmp> and C</tmp> (in that order.)
  +Specifying the option B<--tmpdir> will force B<rc> to use the given temporary
  +directory I<dir> for all its temporary output. 
   
   =item B<-e>, B<--eval> and B<-p>, B<--print>
   
  -The run command will not be executed. Rather, B<rc> will print a command
  -suitable for later evaluation in the current shell. Given alone, this option
  -will cause B<rc> to not execute the run command. Used together with B<--exec>,
  -B<rc> will execute the run command and print a similar command for later
  -execution as well. The B<--eval> option cannot be used together with
  -B<--print>, because of conflicting output and the way that B<rc> constructs
  -the evaluation text. Specifically, most Bourne shells and derivatives report
  -errors with commands spanning multiple lines.
  +With the B<--eval> or B<--print> options, the run command will not be
  +executed. Rather, B<rc> will print a command suitable for later evaluation in
  +the current shell. Given alone, this option will cause B<rc> to not execute
  +the run command. Used together with B<--exec>, B<rc> will execute the run
  +command and print a similar command for later execution as well. The B<--eval>
  +option cannot be used together with B<--print>, because of conflicting output
  +and the way that B<rc> constructs the evaluation text. Specifically, most
  +Bourne shells and derivatives report errors with commands spanning multiple
  +lines.
   
   Consider using the B<--eval> option for batch evaluation with the Bourne shell
   C<eval> command. Use the B<--print> option for better human readability. See
  @@ -343,59 +256,115 @@
   
   =item B<-x>, B<--exec>
   
  -Exec is the most common option of all, in which B<rc> executes a run command
  +The B<--exec> is the most common option of all, in which B<rc> executes a run command
   made up of a given program and section. Options controlling the flow of
  -execution include B<--print>, B<--eval>, and B<--exec>. When no option is given,
  -B<rc> will default to B<--exec> and execute the run command directly.
  +execution include B<--print>, B<--eval>, and B<--exec>.
   
   =item B<-q>, B<--query>
   
  -Query the value of one or more configuration variables. These variables are
  -set in the C<%config> section of the F<\<program\>.rc> file corresponding to a
  -program. The B<--query> option may report a different value, however. It is
  -possible for variable declarations in the F<rc.conf> file to override those in
  -the program's own rc file. Used with the B<--query> option, B<rc> will expect
  -exactly one command line argument to follow. This must be a I<format> string
  -containing arbitrary text and optionally one or more B<OSSP var> variable
  -specifications ("C<${>I<name>C<}>" in its simplest form.)
  +The B<--query> option queries the I<effective> value of one or more
  +configuration variables. These variables are set in the C<%config> section of
  +the corresponding F<rc.\<program\>> file. The B<--query> option reports the
  +I<effective> value, and not necessarily that written in the F<rc.\<program\>>
  +file, which can be overridden by variable settings in the F<rc.config> file.
  +
  +Used with the B<--query> option, B<rc> will expect exactly one command line
  +argument to follow. This must be a I<format> string containing arbitrary text
  +and optionally one or more B<OSSP var> variable specifications
  +("C<${>I<name>C<}>" in its simplest form.)
  +!FIXME what is var here!
   
   =back 4
   
  -=head1 ENVIRONMENT
  +=head1 DEFAULT VALUES
   
   =over 4
   
  -OSSP_RC_ROOT                - Where the OSSP rc hierarchy is located
  -OSSP_RC_OPTIONS             - Options, same as the command line ones
  +In B<OSSP rc>, all options have a reasonable default value. This allows for a
  +configurationless B<rc> installation.
  +
  +=item B<-r>, B<--raw>
  +
  +The B<--raw> option determines its default at runtime. If the raw mode option
  +is not specified, B<rc> will determine whether F<stdout> is connected to a
  +terminal.  If so, B<rc> will run in formatted output mode. If F<stdout> is not
  +connected to a terminal (such as with most daemons,) B<rc> will run in raw
  +output mode even though it was not specified as an option.
  +
  +=item B<-t>, B<--tmpdir> I<dir>
  +
  +If the B<--dirs> option is not given, B<rc> will try to use C<$TMPDIR>,
  +C<$TEMPDIR>, C<~/tmp> and C</tmp> (in that order.)
  +
  +=item B<-p>, B<--print>, B<-e>, B<--eval>, B<-x>, B<--exec>
   
  -The environment determines where rc will look before beginning to process run
  -commands. It also influences the behaviour, just as the command line options
  -do. There is no difference between typing an option in the command line, and
  -adding the same option to the OSSP_RC_OPTIONS variable.
  -
  -OSSP_RC_IMPLS               - Other rc implementations
  -
  -The OSSP_RC_IMPLS variable plays a role only when the user has more than one
  -logical set of run command sections. If rc reads anything but EOL in this
  -variable, it will assume that more than one rc implementation exists. The
  -variable should contain a chain of paths where other rc implementations are.
  -This allows the user to build several OSSP rc hierarchies and then switch from
  -each... Blah FIXME I don't know if we should be paying attention to the
  -ENVIRONMENT guys. Maybe this is not a good solution for our dynamic OpenPKG
  -environment problem after all.
  +If neither B<--print>, B<--eval>, or B<­-exec> is given B<rc> will default to
  +B<--exec>.
  +
  +=item B<-c>, B<--config> F<file>
  +=item B<-n>, B<--func> F<file>[C<:>F<file>[...]]
  +=item B<-f>, B<--file> F<file>
  +=item B<-d>, B<--dirs> I<dir>[C<:>I<dir>[...]
  +
  +#!FIXME! Sprech mal von Pfad und Dateien defaults wieviel rc.conf erlaubt
  +#!FIXME! sind, und welche genommen wird oder sonst wie gemerged.
  +
  +F<rc.conf>
  +F<rc.func>
  +F<rc.config>
  +F<rc.\<program\>>
  +
  +#!FIXME! Kein mehr defaults, und sag so
  +=item B<-v>, B<--verbose>
  +=item B<-q>, B<--silent>
  +=item B<-d>, B<--debug>
  +=item B<-h>, B<--help>
  +=item B<-V>, B<--version>
  +=item B<-q>, B<--query>
  +=item B<-l>, B<--labels>
  +=item B<-i>, B<--info>
  +
  +=head1 ENVIRONMENT
  +
  +=over 4
  +
  +OSSP_RC_CONFIG      - Where to find the F<rc.conf> file.
  +OSSP_RC_DIRS        - Where to find the F<rc.\<program\>> files.
  +OSSP_RC_OPTIONS     - Options, same as the command line ones
  +
  +The environment determines where rc will search before beginning to process
  +run commands. It also influences B<rc's> behaviour, just as the command line
  +options do. There is no difference between typing an option in the command
  +line, and appending the same option to the OSSP_RC_OPTIONS variable.
  +
  +#!FIXME! Study this and determine if it is needed
  +#OSSP_RC_IMPLS       - Other rc implementations
  +#
  +#The OSSP_RC_IMPLS variable plays a role only when the user has more than one
  +#logical set of run command sections. If rc reads anything but EOL in this
  +#variable, it will assume that more than one rc implementation exists. The
  +#variable should contain a chain of paths where other rc implementations are.
  +#This allows the user to build several OSSP rc hierarchies and then switch from
  +#each... Blah FIXME I don't know if we should be paying attention to the
  +#ENVIRONMENT guys. Maybe this is not a good solution for our dynamic OpenPKG
  +#environment problem after all.
   
   =back 4
   
  -=head1 FILES
  +=head1 RETURN VALUE
   
   =over 4
   
  -/$OSSP_RC_ROOT/rc.conf      - Configuration file
  +-1 Faulty run command hierarchy
  + 0 Success
  + 1 One or more run commands failed
   
   =back 4
   
   =head1 EXAMPLES
   
  +=over 4
  +
   Some short one line examples include the following. Note that a run command
   consists of a single program name and one or more sections. The wildcard `all'
   can be given in place of a program name to denote all programs with entries in
  @@ -415,50 +384,84 @@
   command. This is often seen when importing the environment of packages of an
   B<OpenPKG> hierarchy.
   
  - $ eval `@l_prefix@/etc/rc --eval all env`
  +=over 4
  +
  +$ eval `@l_prefix@/etc/rc --eval all env`
   
  -=head1 DIAGNOSTICS
  +=back 4
   
  -The exit status is 0 if rc was able to initiate the given section code of the
  -given run command(s). If rc encountered an error during its processing, the
  -exit status is indexed to the first command parameter which failed as ordered
  -by the command line. This means that if rc returns 3, the third run command
  -given on the command line failed.
  -
  -FIXME! Choose one interpretation:
  -1 This does not mean that only the third run command failed, however.
  -  It is possible that the fourth and sixth failed as well, for example.
  -
  -2 Upon failure of any run command, OSSP rc halts and processes no more.
  -  Because of such a failure, a long batch of run commands may not be processed.
  -
  -This may be important with long run command batches or dependencies between
  -run commands, so plan well when constructing the order of run commands on the
  -command line.
  -
  -In case rc fails when only one run command is given, the exit status will be 1
  -as expected. If rc failed because of a broken run command hierarchy, the exit
  -status will be -1. This can happen if a script file is moved or renamed, for
  -example. If the run command hierarchy is broken, no further action is taken
  -and no run commands are processed.
  +=back 4
  +
  +=head1 FILES
  +
  +=over 4
  +
  +F<rc.conf>          - Master configuration file
  +
  +The following filenames are specified in F<rc.conf>. Both their names and
  +locations may be different due to user customizations.
  +
  +=over 4
  +
  +F<rc.func>          - User defined functions file
  +F<rc.config>        - Postprocess variable declaration file
  +F<rc.\<program\>>   - Run command file
  +
  +=back 4
  +
  +=back 4
   
   =head1 SEE ALSO
   
  -B<OSSP rc> integrates concepts taken from other run-command
  -architectures. For more information, inspect the /etc/rc facilities
  -provided by FreeBSD, NetBSD and Solaris.
  +=over 4
  +
  +OSSP rc integrates concepts taken from other run command architectures. For
  +more information, inspect the /etc/rc structures provided by FreeBSD, Solaris,
  +and Red Hat distributions.
  +
  +rc.conf(1), rc.func(1), rc.config(1), rc.program(1), and rc-sample(1).
  +
  +=back 4
  +
  +=head1 DIAGNOSTICS
  +
  +=over 4
  +
  +If rc fails while processing a run command, the exit status will be 1. If rc
  +failed due to a broken run command configuration, the exit status will be -1.
  +This can happen if a script file is moved or renamed, for example. If the run
  +command configuration is broken, no further action is taken and no run
  +commands are processed.
  +
  +Importantly, if the keyword `all' is given as the program wildcard parameter,
  +then processing will begin and continue until the first error is reached.
  +Should an error arise, processing will stop and the exit status will be 1.
  +There is no way to learn which command caused the error unless it is apparent
  +from the text output of the rc process.
  +
  +=back 4
   
   =head1 AUTHORS
   
  - Ralf S. Engelschall <rse@engelschall.com>
  - Michael Schloh von Bennewitz <michael.schloh@cw.com>
  +=over 4
  +
  +Ralf S. Engelschall
  +
  +Michael Schloh von Bennewitz
  +
  +=back 4
   
   =head1 HISTORY
   
  -B<OSSP rc> was born to replace the prototype run-command facility used
  -in the OpenPKG project (http://www.openpkg.org/). The prototype was a
  -slow and less robust Bourne-Shell script. B<OSSP rc> is intended to
  -replace it with a faster, more robust and flexible facility.
  +=over 4
   
  -=cut
  +B<OSSP rc> is a replacement for the prototype run command facility used in the
  +OpenPKG project (http://www.openpkg.org/). The prototype was a slow and less
  +robust Bourne shell script. B<OSSP rc> is intended to faster, more robust, and
  +more flexible. This flexibility allows for wider range of use, however. B<OSSP
  +rc> can therefore be used in a variety of situations, and is no longer
  +exclusive to the OpenPKG project.
   
  +=back 4
  +
  +=cut

From ossp-cvs-owner@ossp.org  Mon Jan 28 15:25:48 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2F8FB764EB; Mon, 28 Jan 2002 15:25:48 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.pod
Message-Id: <20020128142548.2F8FB764EB@mail.ossp.org>
Date: Mon, 28 Jan 2002 15:25:48 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   28-Jan-2002 15:25:48
  Branch: HEAD                             Handle: 2002012814254700

  Modified files:
    ossp-pkg/rc             rc.pod

  Log:
    consequent usage of terms "rcfile", "label", "commands" and "sections"

  Summary:
    Revision    Changes     Path
    1.17        +58 -50     ossp-pkg/rc/rc.pod
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.pod
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 rc.pod
  --- ossp-pkg/rc/rc.pod	28 Jan 2002 12:08:13 -0000	1.16
  +++ ossp-pkg/rc/rc.pod	28 Jan 2002 14:25:47 -0000	1.17
  @@ -45,7 +45,7 @@
   =item B<General>
   
   @l_prefix@/etc/rc
  -[B<-f>|B<--rcfile> I<file>] 
  +[B<-f>|B<--rcfile>]
   [B<-d>|B<--rcdir> I<dir>[C<:>I<dir>[...]] 
   [B<-C>|B<--rcconf> I<file>[C<:>I<file>[...]]] 
   [B<-F>|B<--rcfunc> I<file>[C<:>I<file>[...]]] 
  @@ -53,7 +53,7 @@
   [B<-r>|B<--raw>]
   [B<-v>|B<--verbose>] 
   [B<-D>|B<--debug>] 
  -[I<command>]
  +[I<rcfile>]
   [I<command-options>]
   [I<command-arguments>]
   
  @@ -64,9 +64,9 @@
   [B<-x>|B<--exec>] 
   [B<-p>|B<--print>] 
   [B<-e>|B<--eval>] 
  -I<package> 
  -I<command>
  -[I<command> ...]
  +I<rcfile> 
  +I<section>
  +[I<section> ...]
   
   =item B<Configuration Query>
   
  @@ -96,24 +96,28 @@
   
   =over 4
   
  -OSSP rc is a run command processor. It applies the script code associated with
  -one or more given section label to a given program. The program must have an
  -entry in the form rc.<program> including script code grouped into sections. To
  -help understand this file structure and how a section typically looks, an
  -example called F<rc.example> is included in the distribution. OSSP rc
  -references these command entries by reading the configuration file (see FILES)
  -and searching the directory where the program entries reside.
  -
  -Each section of script code offers a type of functionality described by its
  -section label. This label is the same one given on the command line after the
  -desired program name. Only one program may be processed at a time, although
  -many sections can be sourced with the same call to rc. An example of this is
  -given in `EXAMPLES.'
  -
  -There exists one exception to this rule in which an rc keyword named `all' is
  -reserved to mean `all programs.' The user may thus give the `all' wildcard in
  -place of the C<program> parameter to process the given sections of all
  -programs found.
  +OSSP rc is a run command processor. It's primary function is to  scan F<rcfile>
  +script files for B<section>(s) identified by corresponding label(s) and run the
  +commands in the section(s).
  +
  +The run command processor can also only print the commands without executing
  +them or reformat them to C<eval> input. The F<rcfile> files contain variables
  +and the command processor has functionality to query their default, set and
  +effective values.
  +
  +To understand the structure and syntax of F<rcfile> script files, an example
  +called F<rc.example> is included in the distribution.  The rc environment and
  +behaviour is very configurable, so the syntax may vary and not match exactly
  +the example provided.
  +
  +With a single call to rc usually one F<rcfile> may be processed at, although
  +many sections can be given to source their corresponding commands, see
  +EXAMPLES below.
  +
  +There is one exception to this rule in which an rc keyword named `all' is
  +reserved to mean `all F<rcfile>s.' The user may thus give the `all' wildcard
  +in place of the C<rcfile> parameter to process the commands from the given
  +sections of all C<rcfile>s found.
   
   #THL! does "all stop start" mean "a stop stop, a start, b start" or " a stop,
   #a start, b stop, b start"?
  @@ -135,22 +139,25 @@
   
   =item B<-c>, B<--config> F<file>
   
  -specify the location of the configuration file,
  -overriding the environment variable $OSSP_RC_CONFIG
  -and the built-in hard-coded value (see DEFAULTS.)!FIXME!
  +specify the location of the configuration file, overriding the environment
  +variable $OSSP_RC_CONFIG and the built-in hard-coded value (see
  +DEFAULTS.)!FIXME!
   
   =item B<-n>, B<--func> F<file>[C<:>F<file>[...]]
   
  -specify the location of an optional functions file,
  -containing Bourne shell script code
  -
  -=item B<-f>, B<--file> F<file>
  -
  -use the configuration and section data of a particular file
  +specify the location of one or more optional function files, containing
  +commands which are prepended /FIXME append?/ to the sections of their corresponding
  +C<rcfile>s.
  +
  +=item B<-f>, B<--file>
  +
  +Disable ${OSSP_RC_PREFIX} and ${OSSP_RC_SUFFIX} expansion on F<rcfile>.
  +Disable searching for F<rcfile>. This mode assumes F<rcfile> is a filename. It
  +is automagically entered when the F<rcfile> matches the regex '^\.{0,2}/'.
   
   =item B<-d>, B<--dirs> I<dir>[C<:>I<dir>[...]
   
  -override OSSP_RC_DIRS, and use these paths instead
  +override OSSP_RC_DIRS, and use these paths to search for F<rcfile>s instead.
   
   =item B<-t>, B<--tmpdir> I<dir>
   
  @@ -188,24 +195,25 @@
   
   =item B<-p>, B<--print>
   
  -output the text as it would be interpreted
  -by the shell, but do not run the commands
  +output the commands as they would by seen by the command interpreter, but do
  +not run them.
   
   =item B<-e>, B<--eval>
   
  -output the text for a command suitable for shell evaluation
  +output the text for a command suitable for shell evaluation, but do not run
  +it.
   
   =item B<-x>, B<--exec>
   
  -execute in subshell(s), will actually run the commands
  +execute the command interpreter in a subprocess and actually run the commands.
   
   =item B<-q>, B<--query>
   
  -print the value(s) of rc configuration variables
  +print the value(s) of rc configuration variables defined in the %config section.
   
   =item B<-l>, B<--labels>
   
  -learn what section labels a run command offers
  +learn what section labels a F<rcfile> offers.
   
   =item B<-i>, B<--info>
   
  @@ -221,9 +229,9 @@
   B<--silent>
   
   The B<--help>, B<--version>, B<--verbose>, and B<--silent> options are used to
  -control the screen output of B<rc>, but control the general output of all
  -script code found in the F<rc.files> as well. For example, specifying
  -B<--silent> will mute B<rc>'s output and also all script output that B<rc>
  +control the screen output of B<rc> and control the general output of all
  +sections found in the F<rcfile>s as well. For example, specifying
  +B<--silent> will mute B<rc>'s output and also all command output that B<rc>
   runs.
   
   =item B<-t>, B<--tmpdir> I<dir>
  @@ -264,9 +272,9 @@
   
   The B<--query> option queries the I<effective> value of one or more
   configuration variables. These variables are set in the C<%config> section of
  -the corresponding F<rc.\<program\>> file. The B<--query> option reports the
  -I<effective> value, and not necessarily that written in the F<rc.\<program\>>
  -file, which can be overridden by variable settings in the F<rc.config> file.
  +the corresponding F<rcfile>. The B<--query> option reports the
  +I<effective> value, and not necessarily that written in the F<rcfile>
  +file, which can be overridden by variable settings in the F<rc.env> file.
   
   Used with the B<--query> option, B<rc> will expect exactly one command line
   argument to follow. This must be a I<format> string containing arbitrary text
  @@ -311,8 +319,8 @@
   
   F<rc.conf>
   F<rc.func>
  -F<rc.config>
  -F<rc.\<program\>>
  +F<rc.env>
  +F<rcfile>
   
   #!FIXME! Kein mehr defaults, und sag so
   =item B<-v>, B<--verbose>
  @@ -404,8 +412,8 @@
   =over 4
   
   F<rc.func>          - User defined functions file
  -F<rc.config>        - Postprocess variable declaration file
  -F<rc.\<program\>>   - Run command file
  +F<rc.env>           - Postprocess variable declaration file
  +F<rc.\<rcfile\>>    - Run command file
   
   =back 4
   
  @@ -419,7 +427,7 @@
   more information, inspect the /etc/rc structures provided by FreeBSD, Solaris,
   and Red Hat distributions.
   
  -rc.conf(1), rc.func(1), rc.config(1), rc.program(1), and rc-sample(1).
  +rc.conf(1), rc.func(1), rc.env(1), rcfile(1), and rc-sample(1).
   
   =back 4
   

From ossp-cvs-owner@ossp.org  Mon Jan 28 15:30:05 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1D6CF764EB; Mon, 28 Jan 2002 15:30:05 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.pod
Message-Id: <20020128143005.1D6CF764EB@mail.ossp.org>
Date: Mon, 28 Jan 2002 15:30:05 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   28-Jan-2002 15:30:05
  Branch: HEAD                             Handle: 2002012814300400

  Modified files:
    ossp-pkg/rc             rc.pod

  Log:
    append does not work in shell

  Summary:
    Revision    Changes     Path
    1.18        +1  -1      ossp-pkg/rc/rc.pod
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.pod
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 rc.pod
  --- ossp-pkg/rc/rc.pod	28 Jan 2002 14:25:47 -0000	1.17
  +++ ossp-pkg/rc/rc.pod	28 Jan 2002 14:30:04 -0000	1.18
  @@ -146,7 +146,7 @@
   =item B<-n>, B<--func> F<file>[C<:>F<file>[...]]
   
   specify the location of one or more optional function files, containing
  -commands which are prepended /FIXME append?/ to the sections of their corresponding
  +commands which are prepended to the sections of their corresponding
   C<rcfile>s.
   
   =item B<-f>, B<--file>

From ossp-cvs-owner@ossp.org  Mon Jan 28 17:01:24 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2200F764EB; Mon, 28 Jan 2002 17:01:23 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.conf rc.pod
Message-Id: <20020128160123.2200F764EB@mail.ossp.org>
Date: Mon, 28 Jan 2002 17:01:23 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   28-Jan-2002 17:01:23
  Branch: HEAD                             Handle: 2002012816012300

  Modified files:
    ossp-pkg/rc             rc.conf rc.pod

  Log:
    start work on aligning longoptions and config file example

  Summary:
    Revision    Changes     Path
    1.3         +27 -13     ossp-pkg/rc/rc.conf
    1.19        +55 -53     ossp-pkg/rc/rc.pod
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.conf
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 rc.conf
  --- ossp-pkg/rc/rc.conf	25 Jan 2002 16:04:41 -0000	1.2
  +++ ossp-pkg/rc/rc.conf	28 Jan 2002 16:01:23 -0000	1.3
  @@ -3,11 +3,9 @@
   # 
   
   #### Inclusive options ####
  -func      $OSSP_RC_ROOT/rc.iofunc $OSSP_RC_ROOT/rc.dbgfunc\
  -          $OSSP_RC_ROOT/rc.exfunc
   dirs      /usr/local/rc /export/home/macgyver/runcommands
   #file     /export/home/rc.init  #practically only used on command line
  -tmpdir    /var/tmp
  +tmp       /var/tmp
   verbose
   #silent
   debug
  @@ -25,13 +23,29 @@
   regex-assign    '(\s+)=(.*)$'
   regex-param     '..'            #needs explanation
   
  -#### Exclusive options ####
  -#help
  -#version
  -#showdefaults
  -#print
  -eval
  -#exec
  -#query
  -#labels
  -#info
  +
  +
  +
  +
  +
  +
  +#conf       it's not possible to set the conf file in the conf file
  +func        rc.iofunc \
  +            rc.dbgfunc \
  +            rc.exfunc
  +force       #flag
  +dirs        /cw/etc/rc.d:/etc/rc.d
  +tmp         /var/tmp
  +verbose     #flag
  +silent      #flag
  +debug       #flag
  +raw         #flag
  +help        #flag
  +usage       #flag
  +version     #flag
  +print       #flag
  +eval        #flag
  +exec        #flag
  +query       ${foovar:-foodefault}
  +labels      start
  +info        #flag
  Index: ossp-pkg/rc/rc.pod
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 rc.pod
  --- ossp-pkg/rc/rc.pod	28 Jan 2002 14:30:04 -0000	1.18
  +++ ossp-pkg/rc/rc.pod	28 Jan 2002 16:01:23 -0000	1.19
  @@ -37,56 +37,62 @@
   
   =over 4
   
  -#rc [-h|--help] [-V|--version] [-v|--verbose]
  -#   [-d|--debug] [-p|--print] [-e|--eval]
  -#   [-c|--config] [-q|--query] [-r|--raw]
  -#   <command> <section> [<section> ...]
  -
   =item B<General>
   
   @l_prefix@/etc/rc
  -[B<-f>|B<--rcfile>]
  -[B<-d>|B<--rcdir> I<dir>[C<:>I<dir>[...]] 
  -[B<-C>|B<--rcconf> I<file>[C<:>I<file>[...]]] 
  -[B<-F>|B<--rcfunc> I<file>[C<:>I<file>[...]]] 
  -[B<-t>|B<--tmpdir> I<dir>]
  +[B<-c>|B<--conf> I<file>[C<:>I<file>[...]]] 
  +[B<-t>|B<--tmp> I<dir>]
   [B<-r>|B<--raw>]
   [B<-v>|B<--verbose>] 
   [B<-D>|B<--debug>] 
  -[I<rcfile>]
  -[I<command-options>]
  -[I<command-arguments>]
   
   =item B<Run-Command Execution>
   
   @l_prefix@/etc/rc
  -[I<parameter-options>]
  +[I<General options>]
   [B<-x>|B<--exec>] 
   [B<-p>|B<--print>] 
   [B<-e>|B<--eval>] 
  -I<rcfile> 
  +[B<-d>|B<--dirs> I<dir>[C<:>I<dir>[...]] 
  +[B<-f>|B<--func> I<file>[C<:>I<file>[...]]] 
  +[B<-F>|B<--force>]
  +I<rcfile>
   I<section>
   [I<section> ...]
   
   =item B<Configuration Query>
   
   @l_prefix@/etc/rc
  -[I<parameter-options>]
  -[B<-q>|B<--query>] 
  -I<format>
  -
  -@l_prefix@/etc/rc
  -[I<parameter-options>]
  -[B<-c>|B<--config>] 
  -[I<package>]
  +[I<General options>]
  +B<-q>|B<--query> I<format>
  +[B<-d>|B<--dirs> I<dir>[C<:>I<dir>[...]] 
  +[B<-F>|B<--force>]
  +I<rcfile>
  +
  +=item B<Looking up available labels>
  +
  +[I<General options>]
  +<-l>|<--labels>
  +[B<-d>|B<--dirs> I<dir>[C<:>I<dir>[...]] 
  +[B<-F>|B<--force>]
  +I<rcfile>
  +
  +# FIXME Ralf, what's that?
  +# @l_prefix@/etc/rc
  +# [I<parameter-options>]
  +# [B<-c>|B<--conf>] 
  +# [I<package>]
   
  -=item B<Facility Query>
  +=item B<Facility Information>
   
   @l_prefix@/etc/rc
  -[I<parameter-options>]
  +[I<General options>]
   [B<-i>|B<--info>] 
   
  +=item B<Other>
  +
   @l_prefix@/etc/rc
  +[B<-?>|B<--usage>]
   [B<-h>|B<--help>]
   [B<-V>|B<--version>]
   
  @@ -137,19 +143,17 @@
   
   Inclusive options which may be used with another
   
  -=item B<-c>, B<--config> F<file>
  +=item B<-c>, B<--conf> F<file>
   
  -specify the location of the configuration file, overriding the environment
  -variable $OSSP_RC_CONFIG and the built-in hard-coded value (see
  -DEFAULTS.)!FIXME!
  +specify the location of the configuration file.
   
  -=item B<-n>, B<--func> F<file>[C<:>F<file>[...]]
  +=item B<-f>, B<--func> F<file>[C<:>F<file>[...]]
   
   specify the location of one or more optional function files, containing
   commands which are prepended to the sections of their corresponding
   C<rcfile>s.
   
  -=item B<-f>, B<--file>
  +=item B<-F>, B<--force>
   
   Disable ${OSSP_RC_PREFIX} and ${OSSP_RC_SUFFIX} expansion on F<rcfile>.
   Disable searching for F<rcfile>. This mode assumes F<rcfile> is a filename. It
  @@ -171,7 +175,7 @@
   
   be silent, and disable output
   
  -=item B<-d>, B<--debug>
  +=item B<-D>, B<--debug>
   
   don't remove temporary files, and output debug messages to stderr
   
  @@ -189,6 +193,10 @@
   
   print this help, then exit
   
  +=item B<-?>, B<--usage>
  +
  +print short usage summary, then exit.
  +
   =item B<-V>, B<--version>
   
   print version and copyright, then exit
  @@ -234,16 +242,16 @@
   B<--silent> will mute B<rc>'s output and also all command output that B<rc>
   runs.
   
  -=item B<-t>, B<--tmpdir> I<dir>
  +=item B<-r>, B<--raw> I<dir>
   
   The option B<-r> or B<--raw> turns on raw output mode. In this case, no
   formatting is done to the screen output. This mode is different from formatted
   output mode, in which the output is annotated with terminal control sequences
   for better readability.
   
  -=item B<-t>, B<--tmpdir> I<dir>
  +=item B<-t>, B<--tmp> I<dir>
   
  -Specifying the option B<--tmpdir> will force B<rc> to use the given temporary
  +Specifying this option will force B<rc> to use the given temporary
   directory I<dir> for all its temporary output. 
   
   =item B<-e>, B<--eval> and B<-p>, B<--print>
  @@ -309,9 +317,13 @@
   If neither B<--print>, B<--eval>, or B<­-exec> is given B<rc> will default to
   B<--exec>.
   
  -=item B<-c>, B<--config> F<file>
  -=item B<-n>, B<--func> F<file>[C<:>F<file>[...]]
  -=item B<-f>, B<--file> F<file>
  +=item B<-c>, B<--conf> F<file>
  +
  +Using F<file> from command line option -c aka --conf, fallback to
  +${OSSP_RC_CONF}, fallback to "@l_prefix@/etc/rc.conf".
  +
  +=item B<-f>, B<--func> F<file>[C<:>F<file>[...]]
  +=item B<-F>, B<--force>
   =item B<-d>, B<--dirs> I<dir>[C<:>I<dir>[...]
   
   #!FIXME! Sprech mal von Pfad und Dateien defaults wieviel rc.conf erlaubt
  @@ -322,28 +334,18 @@
   F<rc.env>
   F<rcfile>
   
  -#!FIXME! Kein mehr defaults, und sag so
  -=item B<-v>, B<--verbose>
  -=item B<-q>, B<--silent>
  -=item B<-d>, B<--debug>
  -=item B<-h>, B<--help>
  -=item B<-V>, B<--version>
  -=item B<-q>, B<--query>
  -=item B<-l>, B<--labels>
  -=item B<-i>, B<--info>
  -
   =head1 ENVIRONMENT
   
   =over 4
   
  -OSSP_RC_CONFIG      - Where to find the F<rc.conf> file.
  -OSSP_RC_DIRS        - Where to find the F<rc.\<program\>> files.
  -OSSP_RC_OPTIONS     - Options, same as the command line ones
  +Every command line longoption is also a keyword in the rc.conf file and,
  +prefixed with "OSSP_RC_" and it's name in upper case, also available as an
  +environment variable.
   
   The environment determines where rc will search before beginning to process
   run commands. It also influences B<rc's> behaviour, just as the command line
   options do. There is no difference between typing an option in the command
  -line, and appending the same option to the OSSP_RC_OPTIONS variable.
  +line, and appending the same option to the OSSP_RC_OPTS variable.
   
   #!FIXME! Study this and determine if it is needed
   #OSSP_RC_IMPLS       - Other rc implementations
  @@ -382,7 +384,7 @@
     /etc/rc --query lmtp2nntp
     /mybin/rc sshd start
     /etc/rc lmtp2nntp start
  -  /sfw/etc/rc --config /etc/rc.conf --debug smtpd stop
  +  /sfw/etc/rc --conf /etc/rc.conf --debug smtpd stop
     /sfw/etc/rc --silent ntpd start sync stop start
     /usr/local/bin/rc httpd restart
   

From ossp-cvs-owner@ossp.org  Mon Jan 28 17:23:21 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 25F41764EB; Mon, 28 Jan 2002 17:23:21 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc-sample.pod
Message-Id: <20020128162321.25F41764EB@mail.ossp.org>
Date: Mon, 28 Jan 2002 17:23:21 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   28-Jan-2002 17:23:21
  Branch: HEAD                             Handle: 2002012816232000

  Modified files:
    ossp-pkg/rc             rc-sample.pod

  Log:
    still unfinished DUE example

  Summary:
    Revision    Changes     Path
    1.2         +113 -8     ossp-pkg/rc/rc-sample.pod
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc-sample.pod
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 rc-sample.pod
  --- ossp-pkg/rc/rc-sample.pod	23 Jan 2002 16:39:53 -0000	1.1
  +++ ossp-pkg/rc/rc-sample.pod	28 Jan 2002 16:23:20 -0000	1.2
  @@ -155,15 +155,120 @@
   
   =head1 USE CASE: Dynamic User Environment (DUE)
   
  - ....
  +=over 4
   
  -#   rc configuration for Dynamic User Environment (DUE)
  -Dirs          .:..//
  -Name          .duerc
  -RequireUmask  022      
  -RequireOwner  $USER           
  -RequireGroup  %{GROUP}
  +=item F<$HOME/.bashrc>
   
  - ....
  +  cd () {
  +      eval `rc --eval --conf=$HOME/.duecf - leave`
  +      builtin cd ${1+"$@"} 
  +      eval `rc --eval --conf=$HOME/.duecf - enter`
  +  }
  +
  +=item F<$HOME/.duecf>
  +
  +  Dirs          .:..// # current and all parent dirs
  +  Name          .duerc
  +  NameGlobal    $HOME/.dueglobal:/etc/dueglobal
  +  RequireUmask  022      
  +  RequireOwner  %{USER}
  +  RequireGroup  %{GROUP}
  +  Functions     $HOME/.duefunc
  +
  +=item F<$HOME/.duefunc>
  +
  + #   append (or optionally prepend) one or more directories (optionally
  + #   have to be existing) to a colon-separated path variable. In case a
  + #   directory already exists, it is first removed.
  + #
  + #   Usage:   duePathAdd [-p] [-e] <variable> <dir> [<dir> ...]
  + #   Example: duePathAdd -e PATH /bin /sbin /usr/bin /usr/sbin /usr/ccs/bin
  + #
  + duePathAdd () {
  +    _prepend=0
  +    _exists=0
  +    while [ $# -gt 0 ]; do
  +        case $1 in
  +            -p ) _prepend=1; shift ;;
  +            -e ) _exists=1;  shift ;;
  +            *  ) break ;;
  +        esac
  +    done
  +    _var="$1"
  +    shift
  +    _edit_del=""
  +    _edit_add=""
  +    for _dir in "$@"; do
  +        if [ ".${_exists}" = .1 ] && [ ! -d "${_dir}" ]; then
  +            continue
  +        fi
  +        _edit_del="${_edit_del} -e 's;^${_dir}\$;;' -e 's;^${_dir}:;;'"
  +        _edit_del="${_edit_del} -e 's;:${_dir}:;:;' -e 's;:${_dir}\$;;'"
  +        if [ ".${_prepend}" = .0 ]; then
  +            _edit_add="${_edit_add} -e 's;\$;:${_dir};'"
  +        else
  +            _edit_add="-e 's;^;${_dir}:;' ${_edit_add}"
  +        fi
  +    done
  +    if [ ".${_edit_del}${_edit_add}" != . ]; then
  +        eval "${_var}=\`echo \"\$${_var}\" | sed ${_edit_del} ${_edit_add}\`"
  +    fi
  +    unset _prepend _exists _var _edit_del _edit_add _dir
  + }
  +
  + #
  + #   remove one or more directories from a colon-separated path variable
  + #
  + #   Usage:   duePathDel <variable> <dir> [<dir> ...]
  + #   Example: duePathDel PATH /bin /sbin /usr/bin /usr/sbin /usr/ccs/bin
  + #
  + duePathDel () {
  +    _var="$1"
  +    shift
  +    _edit=""
  +    for _dir in "$@"; do
  +        _edit="${_edit} -e 's;^${_dir}\$;;' -e 's;^${_dir}:;;'"
  +        _edit="${_edit} -e 's;:${_dir}:;:;' -e 's;:${_dir}\$;;'"
  +    done
  +    eval "${_var}=\`echo \"\$${_var}\" | sed ${_edit}\`"
  +    unset _var _edit _dir
  + }
  +
  +
  +=item F</cw/.duerc>
  +
  +  <event name=enter>
  +      duePathAdd PATH            $CWD/bin $CWD/sbin
  +      duePathAdd MANPATH         $CWD/man
  +      duePathAdd INFOPATH        $CWD/info
  +      duePathAdd LD_LIBRARY_PATH $CWD/lib
  +  </event>
  +  <event name=leave>
  +      duePathDel PATH            $CWD/bin $CWD/sbin
  +      duePathDel MANPATH         $CWD/man
  +      duePathDel INFOPATH        $CWD/info
  +      duePathDel LD_LIBRARY_PATH $CWD/lib
  +  </event>
  +
  +=item F<$HOME/.dueglobal>
  +  
  +  <directory path=/cw>
  +      <event name=enter>
  +          duePathAdd PATH            /cw/bin /cw/sbin
  +          duePathAdd MANPATH         /cw/man
  +          duePathAdd INFOPATH        /cw/info
  +          duePathAdd LD_LIBRARY_PATH /cw/lib
  +      </event>
  +      <event name=leave>
  +          duePathDel PATH            /cw/bin /cw/sbin
  +          duePathDel MANPATH         /cw/man
  +          duePathDel INFOPATH        /cw/info
  +          duePathDel LD_LIBRARY_PATH /cw/lib
  +      </event>
  +  </directory>
  +  <directory path=/usr/opkg>
  +      ...
  +  </directory>
   
   =cut
  +

From ossp-cvs-owner@ossp.org  Mon Jan 28 21:58:38 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 13536764EB; Mon, 28 Jan 2002 21:58:38 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc_pcre.c rc_pcre.h
Message-Id: <20020128205838.13536764EB@mail.ossp.org>
Date: Mon, 28 Jan 2002 21:58:38 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   28-Jan-2002 21:58:37
  Branch: HEAD                             Handle: 2002012820583700

  Added files:
    ossp-pkg/rc             rc_pcre.c rc_pcre.h

  Log:
    Add pcre support to match perl compatible regular expressions.

  Summary:
    Revision    Changes     Path
    1.1         +4288 -0    ossp-pkg/rc/rc_pcre.c
    1.1         +141 -0     ossp-pkg/rc/rc_pcre.h
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc_pcre.c
  ============================================================
  $ cvs update -p -r1.1 rc_pcre.c
  /* 
   *  Perl Compatible Regular Expression (PCRE) Library
   *  Copyright (c) 1997-2001 Philip Hazel <ph10@cam.ac.uk>
   *  Copyright (c) 1997-2001 University of Cambridge
   *
   *  DO NOT EDIT THIS FILE, IT WAS AUTOMATICALLY GENERATED!
   *
   *  This is an automatically generated, extremely stripped down
   *  version of the PCRE 3.9 library from the Philip Hazel.
   *  This version is still distributed under the same original PCRE
   *  Open Source license, but Philip Hazel is no longer responsible
   *  for this version.
   */
  
  /* 
     This is a library of functions to support regular expressions whose syntax
     and semantics are as close as possible to those of the Perl 5 language. See
     the file Tech.Notes for some information on the internals.
  
     Written by: Philip Hazel <ph10@cam.ac.uk>
  
     Copyright (c) 1997-2001 University of Cambridge
  
     -----------------------------------------------------------------------------
     Permission is granted to anyone to use this software for any purpose on any
     computer system, and to redistribute it freely, subject to the following
     restrictions:
  
     1. This software is distributed in the hope that it will be useful, but
     WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
     FITNESS FOR A PARTICULAR PURPOSE.
  
     2. The origin of this software must not be misrepresented, either by explicit
     claim or by omission.
  
     3. Altered versions must be plainly marked as such, and must not be
     misrepresented as being the original software.
  
     4. If PCRE is embedded in any software that is released under the GNU General
     Purpose Licence (GPL), then the terms of that licence shall supersede any
     condition above with which it is incompatible.
     ----------------------------------------------------------------------------- */
  
  #ifdef HAVE_CONFIG_H
  #include "config.h"
  #endif
  
  #include <ctype.h>
  #include <limits.h>
  #include <stddef.h>
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  #include "rc_pcre.h"
  
  #ifndef offsetof
  #define offsetof(p_type,field) ((size_t)&(((p_type *)0)->field))
  #endif
  
  #define PCRE_IMS (PCRE_CASELESS|PCRE_MULTILINE|PCRE_DOTALL)
  
  #define PCRE_FIRSTSET      0x40000000
  #define PCRE_REQCHSET      0x20000000
  #define PCRE_STARTLINE     0x10000000
  #define PCRE_INGROUP       0x08000000
  #define PCRE_ICHANGED      0x04000000
  
  #define PCRE_STUDY_MAPPED   0x01
  
  #define PUBLIC_OPTIONS \
    (PCRE_CASELESS|PCRE_EXTENDED|PCRE_ANCHORED|PCRE_MULTILINE| \
     PCRE_DOTALL|PCRE_DOLLAR_ENDONLY|PCRE_EXTRA|PCRE_UNGREEDY|PCRE_UTF8)
  
  #define PUBLIC_EXEC_OPTIONS \
    (PCRE_ANCHORED|PCRE_NOTBOL|PCRE_NOTEOL|PCRE_NOTEMPTY)
  
  #define PUBLIC_STUDY_OPTIONS 0
  
  #define MAGIC_NUMBER  0x50435245UL
  
  typedef int BOOL;
  
  #ifndef FALSE
  #define FALSE   0
  #endif
  #ifndef TRUE
  #define TRUE    1
  #endif
  
  #ifndef ESC_E
  #define ESC_E 27
  #endif
  
  #ifndef ESC_F
  #define ESC_F '\f'
  #endif
  
  #ifndef ESC_N
  #define ESC_N '\n'
  #endif
  
  #ifndef ESC_R
  #define ESC_R '\r'
  #endif
  
  #ifndef ESC_T
  #define ESC_T '\t'
  #endif
  
  enum { ESC_A = 1, ESC_B, ESC_b, ESC_D, ESC_d, ESC_S, ESC_s, ESC_W, ESC_w,
  	ESC_Z, ESC_z, ESC_REF
  };
  
  enum {
  	OP_END,
  
  	OP_SOD,
  	OP_NOT_WORD_BOUNDARY,
  	OP_WORD_BOUNDARY,
  	OP_NOT_DIGIT,
  	OP_DIGIT,
  	OP_NOT_WHITESPACE,
  	OP_WHITESPACE,
  	OP_NOT_WORDCHAR,
  	OP_WORDCHAR,
  	OP_EODN,
  	OP_EOD,
  
  	OP_OPT,
  	OP_CIRC,
  	OP_DOLL,
  	OP_ANY,
  	OP_CHARS,
  	OP_NOT,
  
  	OP_STAR,
  	OP_MINSTAR,
  	OP_PLUS,
  	OP_MINPLUS,
  	OP_QUERY,
  	OP_MINQUERY,
  	OP_UPTO,
  	OP_MINUPTO,
  	OP_EXACT,
  
  	OP_NOTSTAR,
  	OP_NOTMINSTAR,
  	OP_NOTPLUS,
  	OP_NOTMINPLUS,
  	OP_NOTQUERY,
  	OP_NOTMINQUERY,
  	OP_NOTUPTO,
  	OP_NOTMINUPTO,
  	OP_NOTEXACT,
  
  	OP_TYPESTAR,
  	OP_TYPEMINSTAR,
  	OP_TYPEPLUS,
  	OP_TYPEMINPLUS,
  	OP_TYPEQUERY,
  	OP_TYPEMINQUERY,
  	OP_TYPEUPTO,
  	OP_TYPEMINUPTO,
  	OP_TYPEEXACT,
  
  	OP_CRSTAR,
  	OP_CRMINSTAR,
  	OP_CRPLUS,
  	OP_CRMINPLUS,
  	OP_CRQUERY,
  	OP_CRMINQUERY,
  	OP_CRRANGE,
  	OP_CRMINRANGE,
  
  	OP_CLASS,
  	OP_REF,
  	OP_RECURSE,
  
  	OP_ALT,
  	OP_KET,
  	OP_KETRMAX,
  	OP_KETRMIN,
  
  	OP_ASSERT,
  	OP_ASSERT_NOT,
  	OP_ASSERTBACK,
  	OP_ASSERTBACK_NOT,
  	OP_REVERSE,
  
  	OP_ONCE,
  	OP_COND,
  	OP_CREF,
  
  	OP_BRAZERO,
  	OP_BRAMINZERO,
  
  	OP_BRANUMBER,
  
  	OP_BRA
  };
  
  #define EXTRACT_BASIC_MAX  150
  
  #define ERR1  "\\ at end of pattern"
  #define ERR2  "\\c at end of pattern"
  #define ERR3  "unrecognized character follows \\"
  #define ERR4  "numbers out of order in {} quantifier"
  #define ERR5  "number too big in {} quantifier"
  #define ERR6  "missing terminating ] for character class"
  #define ERR7  "invalid escape sequence in character class"
  #define ERR8  "range out of order in character class"
  #define ERR9  "nothing to repeat"
  #define ERR10 "operand of unlimited repeat could match the empty string"
  #define ERR11 "internal error: unexpected repeat"
  #define ERR12 "unrecognized character after (?"
  #define ERR13 "unused error"
  #define ERR14 "missing )"
  #define ERR15 "back reference to non-existent subpattern"
  #define ERR16 "erroffset passed as NULL"
  #define ERR17 "unknown option bit(s) set"
  #define ERR18 "missing ) after comment"
  #define ERR19 "parentheses nested too deeply"
  #define ERR20 "regular expression too large"
  #define ERR21 "failed to get memory"
  #define ERR22 "unmatched parentheses"
  #define ERR23 "internal error: code overflow"
  #define ERR24 "unrecognized character after (?<"
  #define ERR25 "lookbehind assertion is not fixed length"
  #define ERR26 "malformed number after (?("
  #define ERR27 "conditional group contains more than two branches"
  #define ERR28 "assertion expected after (?("
  #define ERR29 "(?p must be followed by )"
  #define ERR30 "unknown POSIX class name"
  #define ERR31 "POSIX collating elements are not supported"
  #define ERR32 "this version of PCRE is not compiled with PCRE_UTF8 support"
  #define ERR33 "characters with values > 255 are not yet supported in classes"
  #define ERR34 "character value in \\x{...} sequence is too large"
  #define ERR35 "invalid condition (?(0)"
  
  typedef unsigned char uschar;
  
  typedef struct pcre_st {
  	unsigned long int magic_number;
  	size_t size;
  	const unsigned char *tables;
  	unsigned long int options;
  	unsigned short int top_bracket;
  	unsigned short int top_backref;
  	uschar first_char;
  	uschar req_char;
  	uschar code[1];
  } pcre_st;
  
  typedef struct pcre_extra_st {
  	uschar options;
  	uschar start_bits[32];
  } pcre_extra_st;
  
  typedef struct compile_data {
  	const uschar *lcc;
  	const uschar *fcc;
  	const uschar *cbits;
  	const uschar *ctypes;
  } compile_data;
  
  typedef struct match_data {
  	int errorcode;
  	int *offset_vector;
  	int offset_end;
  	int offset_max;
  	const uschar *lcc;
  	const uschar *ctypes;
  	BOOL offset_overflow;
  	BOOL notbol;
  	BOOL noteol;
  	BOOL utf8;
  	BOOL endonly;
  	BOOL notempty;
  	const uschar *start_pattern;
  	const uschar *start_subject;
  	const uschar *end_subject;
  	const uschar *start_match;
  	const uschar *end_match_ptr;
  	int end_offset_top;
  } match_data;
  
  #define ctype_space   0x01
  #define ctype_letter  0x02
  #define ctype_digit   0x04
  #define ctype_xdigit  0x08
  #define ctype_word    0x10
  #define ctype_meta    0x80
  
  #define cbit_space     0
  #define cbit_xdigit   32
  #define cbit_digit    64
  #define cbit_upper    96
  #define cbit_lower   128
  #define cbit_word    160
  #define cbit_graph   192
  #define cbit_print   224
  #define cbit_punct   256
  #define cbit_cntrl   288
  #define cbit_length  320
  
  #define lcc_offset      0
  #define fcc_offset    256
  #define cbits_offset  512
  #define ctypes_offset (cbits_offset + cbit_length)
  #define tables_length (ctypes_offset + 256)
  
  #ifndef RC_PCRE_TAB
  
  #ifdef __cplusplus
  #define class pcre_class
  #endif
  
  #define BRASTACK_SIZE 200
  
  #ifdef RC_PCRE_SUPPORT_UTF8
  #define MAXLIT 250
  #else
  #define MAXLIT 255
  #endif
  
  static const char rep_min[] = { 0, 0, 1, 1, 0, 0 };
  static const char rep_max[] = { 0, 0, 0, 0, 1, 1 };
  
  static const short int escapes[] = {
  	0, 0, 0, 0, 0, 0, 0, 0,
  	0, 0, ':', ';', '<', '=', '>', '?',
  	'@', -ESC_A, -ESC_B, 0, -ESC_D, 0, 0, 0,
  	0, 0, 0, 0, 0, 0, 0, 0,
  	0, 0, 0, -ESC_S, 0, 0, 0, -ESC_W,
  	0, 0, -ESC_Z, '[', '\\', ']', '^', '_',
  	'`', 7, -ESC_b, 0, -ESC_d, ESC_E, ESC_F, 0,
  	0, 0, 0, 0, 0, 0, ESC_N, 0,
  	0, 0, ESC_R, -ESC_s, ESC_T, 0, 0, -ESC_w,
  	0, 0, -ESC_z
  };
  
  static const char *posix_names[] = {
  	"alpha", "lower", "upper",
  	"alnum", "ascii", "cntrl", "digit", "graph",
  	"print", "punct", "space", "word", "xdigit"
  };
  
  static const uschar posix_name_lengths[] = {
  	5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 6, 0
  };
  
  static const int posix_class_maps[] = {
  	cbit_lower, cbit_upper, -1,
  	cbit_lower, -1, -1,
  	cbit_upper, -1, -1,
  	cbit_digit, cbit_lower, cbit_upper,
  	cbit_print, cbit_cntrl, -1,
  	cbit_cntrl, -1, -1,
  	cbit_digit, -1, -1,
  	cbit_graph, -1, -1,
  	cbit_print, -1, -1,
  	cbit_punct, -1, -1,
  	cbit_space, -1, -1,
  	cbit_word, -1, -1,
  	cbit_xdigit, -1, -1
  };
  
  static BOOL
  compile_regex(int, int, int *, uschar **, const uschar **, const char **,
  			  BOOL, int, int *, int *, compile_data *);
  
  typedef struct eptrblock {
  	struct eptrblock *prev;
  	const uschar *saved_eptr;
  } eptrblock;
  
  #define match_condassert   0x01
  #define match_isgroup      0x02
  
  void *(*pcre_malloc) (size_t) = malloc;
  void (*pcre_free) (void *) = free;
  
  #ifndef RC_PCRE_SUPPORT_UTF8
  #define GETCHARINC(c, eptr) c = *eptr++;
  #define GETCHARLEN(c, eptr, len) c = *eptr;
  #define BACKCHAR(eptr)
  
  #else
  
  #define GETCHARINC(c, eptr) \
    c = *eptr++; \
    if (md->utf8 && (c & 0xc0) == 0xc0) \
      { \
      int a = utf8_table4[c & 0x3f];   \
      int s = 6*a; \
      c = (c & utf8_table3[a]) << s; \
      while (a-- > 0) \
        { \
        s -= 6; \
        c |= (*eptr++ & 0x3f) << s; \
        } \
      }
  
  #define GETCHARLEN(c, eptr, len) \
    c = *eptr; \
    len = 1; \
    if (md->utf8 && (c & 0xc0) == 0xc0) \
      { \
      int i; \
      int a = utf8_table4[c & 0x3f];   \
      int s = 6*a; \
      c = (c & utf8_table3[a]) << s; \
      for (i = 1; i <= a; i++) \
        { \
        s -= 6; \
        c |= (eptr[i] & 0x3f) << s; \
        } \
      len += a; \
      }
  
  #define BACKCHAR(eptr) while((*eptr & 0xc0) == 0x80) eptr--;
  
  #endif
  
  #include "rc_pcre.tab"
  
  #ifdef RC_PCRE_SUPPORT_UTF8
  
  static int utf8_table1[] =
  	{ 0x7f, 0x7ff, 0xffff, 0x1fffff, 0x3ffffff, 0x7fffffff };
  
  static int utf8_table2[] = { 0, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc };
  static int utf8_table3[] = { 0xff, 0x1f, 0x0f, 0x07, 0x03, 0x01 };
  
  static uschar utf8_table4[] = {
  	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  	2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
  	3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5
  };
  
  static int ord2utf8(int cvalue, uschar * buffer)
  {
  	register int i, j;
  	for (i = 0; i < sizeof (utf8_table1) / sizeof (int); i++)
  		if (cvalue <= utf8_table1[i])
  			break;
  	buffer += i;
  	for (j = i; j > 0; j--) {
  		*buffer-- = 0x80 | (cvalue & 0x3f);
  		cvalue >>= 6;
  	}
  	*buffer = utf8_table2[i] | cvalue;
  	return i + 1;
  }
  #endif
  
  #define STRING(a)  # a
  #define XSTRING(s) STRING(s)
  
  const char *pcre_version(void)
  {
  	return XSTRING(PCRE_MAJOR) "." XSTRING(PCRE_MINOR) " " XSTRING(PCRE_DATE);
  }
  
  int pcre_info(const pcre * external_re, int *optptr, int *first_char)
  {
  	const pcre_st *re = (const pcre_st *)external_re;
  	if (re == NULL)
  		return PCRE_ERROR_NULL;
  	if (re->magic_number != MAGIC_NUMBER)
  		return PCRE_ERROR_BADMAGIC;
  	if (optptr != NULL)
  		*optptr = (int)(re->options & PUBLIC_OPTIONS);
  	if (first_char != NULL)
  		*first_char = ((re->options & PCRE_FIRSTSET) != 0) ? re->first_char :
  			((re->options & PCRE_STARTLINE) != 0) ? -1 : -2;
  	return re->top_bracket;
  }
  
  int
  pcre_fullinfo(const pcre * external_re, const pcre_extra * study_data,
  			  int what, void *where)
  {
  	const pcre_st *re = (const pcre_st *)external_re;
  	const pcre_extra_st *study = (const pcre_extra_st *)study_data;
  
  	if (re == NULL || where == NULL)
  		return PCRE_ERROR_NULL;
  	if (re->magic_number != MAGIC_NUMBER)
  		return PCRE_ERROR_BADMAGIC;
  
  	switch (what) {
  		case PCRE_INFO_OPTIONS:
  			*((unsigned long int *)where) = re->options & PUBLIC_OPTIONS;
  			break;
  
  		case PCRE_INFO_SIZE:
  			*((size_t *) where) = re->size;
  			break;
  
  		case PCRE_INFO_CAPTURECOUNT:
  			*((int *)where) = re->top_bracket;
  			break;
  
  		case PCRE_INFO_BACKREFMAX:
  			*((int *)where) = re->top_backref;
  			break;
  
  		case PCRE_INFO_FIRSTCHAR:
  			*((int *)where) =
  				((re->options & PCRE_FIRSTSET) != 0) ? re->first_char :
  				((re->options & PCRE_STARTLINE) != 0) ? -1 : -2;
  			break;
  
  		case PCRE_INFO_FIRSTTABLE:
  			*((const uschar **)where) =
  				(study != NULL && (study->options & PCRE_STUDY_MAPPED) != 0) ?
  				study->start_bits : NULL;
  			break;
  
  		case PCRE_INFO_LASTLITERAL:
  			*((int *)where) =
  				((re->options & PCRE_REQCHSET) != 0) ? re->req_char : -1;
  			break;
  
  		default:
  			return PCRE_ERROR_BADOPTION;
  	}
  
  	return 0;
  }
  
  static int
  check_escape(const uschar ** ptrptr, const char **errorptr, int bracount,
  			 int options, BOOL isclass, compile_data * cd)
  {
  	const uschar *ptr = *ptrptr;
  	int c, i;
  
  	c = *(++ptr);
  	if (c == 0)
  		*errorptr = ERR1;
  
  	else if (c < '0' || c > 'z') {
  	}
  
  	else if ((i = escapes[c - '0']) != 0)
  		c = i;
  
  	else {
  		const uschar *oldptr;
  		switch (c) {
  			case '1':
  			case '2':
  			case '3':
  			case '4':
  			case '5':
  			case '6':
  			case '7':
  			case '8':
  			case '9':
  
  				if (!isclass) {
  					oldptr = ptr;
  					c -= '0';
  					while ((cd->ctypes[ptr[1]] & ctype_digit) != 0)
  						c = c * 10 + *(++ptr) - '0';
  					if (c < 10 || c <= bracount) {
  						c = -(ESC_REF + c);
  						break;
  					}
  					ptr = oldptr;
  				}
  
  				if ((c = *ptr) >= '8') {
  					ptr--;
  					c = 0;
  					break;
  				}
  
  			case '0':
  				c -= '0';
  				while (i++ < 2 && (cd->ctypes[ptr[1]] & ctype_digit) != 0 &&
  					   ptr[1] != '8' && ptr[1] != '9')
  					c = c * 8 + *(++ptr) - '0';
  				c &= 255;
  				break;
  
  			case 'x':
  #ifdef RC_PCRE_SUPPORT_UTF8
  				if (ptr[1] == '{' && (options & PCRE_UTF8) != 0) {
  					const uschar *pt = ptr + 2;
  					register int count = 0;
  					c = 0;
  					while ((cd->ctypes[*pt] & ctype_xdigit) != 0) {
  						count++;
  						c = c * 16 + cd->lcc[*pt] -
  							(((cd->ctypes[*pt] & ctype_digit) !=
  							  0) ? '0' : 'W');
  						pt++;
  					}
  					if (*pt == '}') {
  						if (c < 0 || count > 8)
  							*errorptr = ERR34;
  						ptr = pt;
  						break;
  					}
  				}
  #endif
  
  				c = 0;
  				while (i++ < 2 && (cd->ctypes[ptr[1]] & ctype_xdigit) != 0) {
  					ptr++;
  					c = c * 16 + cd->lcc[*ptr] -
  						(((cd->ctypes[*ptr] & ctype_digit) != 0) ? '0' : 'W');
  				}
  				break;
  
  			case 'c':
  				c = *(++ptr);
  				if (c == 0) {
  					*errorptr = ERR2;
  					return 0;
  				}
  
  				if (c >= 'a' && c <= 'z')
  					c = cd->fcc[c];
  				c ^= 0x40;
  				break;
  
  			default:
  				if ((options & PCRE_EXTRA) != 0)
  					switch (c) {
  						default:
  							*errorptr = ERR3;
  							break;
  					}
  				break;
  		}
  	}
  
  	*ptrptr = ptr;
  	return c;
  }
  
  static BOOL is_counted_repeat(const uschar * p, compile_data * cd)
  {
  	if ((cd->ctypes[*p++] & ctype_digit) == 0)
  		return FALSE;
  	while ((cd->ctypes[*p] & ctype_digit) != 0)
  		p++;
  	if (*p == '}')
  		return TRUE;
  
  	if (*p++ != ',')
  		return FALSE;
  	if (*p == '}')
  		return TRUE;
  
  	if ((cd->ctypes[*p++] & ctype_digit) == 0)
  		return FALSE;
  	while ((cd->ctypes[*p] & ctype_digit) != 0)
  		p++;
  	return (*p == '}');
  }
  
  static const uschar *read_repeat_counts(const uschar * p, int *minp,
  										int *maxp, const char **errorptr,
  										compile_data * cd)
  {
  	int min = 0;
  	int max = -1;
  
  	while ((cd->ctypes[*p] & ctype_digit) != 0)
  		min = min * 10 + *p++ - '0';
  
  	if (*p == '}')
  		max = min;
  	else {
  		if (*(++p) != '}') {
  			max = 0;
  			while ((cd->ctypes[*p] & ctype_digit) != 0)
  				max = max * 10 + *p++ - '0';
  			if (max < min) {
  				*errorptr = ERR4;
  				return p;
  			}
  		}
  	}
  
  	if (min > 65535 || max > 65535)
  		*errorptr = ERR5;
  	else {
  		*minp = min;
  		*maxp = max;
  	}
  	return p;
  }
  
  static int find_fixedlength(uschar * code, int options)
  {
  	int length = -1;
  
  	register int branchlength = 0;
  	register uschar *cc = code + 3;
  
  	for (;;) {
  		int d;
  		register int op = *cc;
  		if (op >= OP_BRA)
  			op = OP_BRA;
  
  		switch (op) {
  			case OP_BRA:
  			case OP_ONCE:
  			case OP_COND:
  				d = find_fixedlength(cc, options);
  				if (d < 0)
  					return -1;
  				branchlength += d;
  				do
  					cc += (cc[1] << 8) + cc[2];
  				while (*cc == OP_ALT);
  				cc += 3;
  				break;
  
  			case OP_ALT:
  			case OP_KET:
  			case OP_KETRMAX:
  			case OP_KETRMIN:
  			case OP_END:
  				if (length < 0)
  					length = branchlength;
  				else if (length != branchlength)
  					return -1;
  				if (*cc != OP_ALT)
  					return length;
  				cc += 3;
  				branchlength = 0;
  				break;
  
  			case OP_ASSERT:
  			case OP_ASSERT_NOT:
  			case OP_ASSERTBACK:
  			case OP_ASSERTBACK_NOT:
  				do
  					cc += (cc[1] << 8) + cc[2];
  				while (*cc == OP_ALT);
  				cc += 3;
  				break;
  
  			case OP_REVERSE:
  			case OP_BRANUMBER:
  			case OP_CREF:
  				cc++;
  			case OP_OPT:
  				cc++;
  			case OP_SOD:
  			case OP_EOD:
  			case OP_EODN:
  			case OP_CIRC:
  			case OP_DOLL:
  			case OP_NOT_WORD_BOUNDARY:
  			case OP_WORD_BOUNDARY:
  				cc++;
  				break;
  
  			case OP_CHARS:
  				branchlength += *(++cc);
  #ifdef RC_PCRE_SUPPORT_UTF8
  				for (d = 1; d <= *cc; d++)
  					if ((cc[d] & 0xc0) == 0x80)
  						branchlength--;
  #endif
  				cc += *cc + 1;
  				break;
  
  			case OP_EXACT:
  			case OP_TYPEEXACT:
  				branchlength += (cc[1] << 8) + cc[2];
  				cc += 4;
  				break;
  
  			case OP_NOT_DIGIT:
  			case OP_DIGIT:
  			case OP_NOT_WHITESPACE:
  			case OP_WHITESPACE:
  			case OP_NOT_WORDCHAR:
  			case OP_WORDCHAR:
  			case OP_ANY:
  				branchlength++;
  				cc++;
  				break;
  
  			case OP_CLASS:
  				cc += 33;
  
  				switch (*cc) {
  					case OP_CRSTAR:
  					case OP_CRMINSTAR:
  					case OP_CRQUERY:
  					case OP_CRMINQUERY:
  						return -1;
  
  					case OP_CRRANGE:
  					case OP_CRMINRANGE:
  						if ((cc[1] << 8) + cc[2] != (cc[3] << 8) + cc[4])
  							return -1;
  						branchlength += (cc[1] << 8) + cc[2];
  						cc += 5;
  						break;
  
  					default:
  						branchlength++;
  				}
  				break;
  
  			default:
  				return -1;
  		}
  	}
  }
  
  static BOOL
  check_posix_syntax(const uschar * ptr, const uschar ** endptr,
  				   compile_data * cd)
  {
  	int terminator;
  	terminator = *(++ptr);
  	if (*(++ptr) == '^')
  		ptr++;
  	while ((cd->ctypes[*ptr] & ctype_letter) != 0)
  		ptr++;
  	if (*ptr == terminator && ptr[1] == ']') {
  		*endptr = ptr;
  		return TRUE;
  	}
  	return FALSE;
  }
  
  static int check_posix_name(const uschar * ptr, int len)
  {
  	register int yield = 0;
  	while (posix_name_lengths[yield] != 0) {
  		if (len == posix_name_lengths[yield] &&
  			strncmp((const char *)ptr, posix_names[yield], len) == 0)
  			return yield;
  		yield++;
  	}
  	return -1;
  }
  
  static BOOL
  compile_branch(int options, int *brackets, uschar ** codeptr,
  			   const uschar ** ptrptr, const char **errorptr, int *optchanged,
  			   int *reqchar, int *countlits, compile_data * cd)
  {
  	int repeat_type, op_type;
  	int repeat_min, repeat_max;
  	int bravalue, length;
  	int greedy_default, greedy_non_default;
  	int prevreqchar;
  	int condcount = 0;
  	int subcountlits = 0;
  	register int c;
  	register uschar *code = *codeptr;
  	uschar *tempcode;
  	const uschar *ptr = *ptrptr;
  	const uschar *tempptr;
  	uschar *previous = NULL;
  	uschar class[32];
  
  	greedy_default = ((options & PCRE_UNGREEDY) != 0);
  	greedy_non_default = greedy_default ^ 1;
  
  	*reqchar = prevreqchar = -1;
  	*countlits = 0;
  
  	for (;; ptr++) {
  		BOOL negate_class;
  		int class_charcount;
  		int class_lastchar;
  		int newoptions;
  		int skipbytes;
  		int subreqchar;
  
  		c = *ptr;
  		if ((options & PCRE_EXTENDED) != 0) {
  			if ((cd->ctypes[c] & ctype_space) != 0)
  				continue;
  			if (c == '#') {
  				while ((c = *(++ptr)) != 0 && c != '\n') ;
  				continue;
  			}
  		}
  
  		switch (c) {
  			case 0:
  			case '|':
  			case ')':
  				*codeptr = code;
  				*ptrptr = ptr;
  				return TRUE;
  
  			case '^':
  				previous = NULL;
  				*code++ = OP_CIRC;
  				break;
  
  			case '$':
  				previous = NULL;
  				*code++ = OP_DOLL;
  				break;
  
  			case '.':
  				previous = code;
  				*code++ = OP_ANY;
  				break;
  
  			case '[':
  				previous = code;
  				*code++ = OP_CLASS;
  
  				if ((c = *(++ptr)) == '^') {
  					negate_class = TRUE;
  					c = *(++ptr);
  				}
  				else
  					negate_class = FALSE;
  
  				class_charcount = 0;
  				class_lastchar = -1;
  
  				memset(class, 0, 32 * sizeof (uschar));
  
  				do {
  					if (c == 0) {
  						*errorptr = ERR6;
  						goto FAILED;
  					}
  
  					if (c == '[' &&
  						(ptr[1] == ':' || ptr[1] == '.' || ptr[1] == '=') &&
  						check_posix_syntax(ptr, &tempptr, cd)) {
  						BOOL local_negate = FALSE;
  						int posix_class, i;
  						register const uschar *cbits = cd->cbits;
  
  						if (ptr[1] != ':') {
  							*errorptr = ERR31;
  							goto FAILED;
  						}
  
  						ptr += 2;
  						if (*ptr == '^') {
  							local_negate = TRUE;
  							ptr++;
  						}
  
  						posix_class = check_posix_name(ptr, tempptr - ptr);
  						if (posix_class < 0) {
  							*errorptr = ERR30;
  							goto FAILED;
  						}
  
  						if ((options & PCRE_CASELESS) != 0
  							&& posix_class <= 2)
  							posix_class = 0;
  
  						posix_class *= 3;
  						for (i = 0; i < 3; i++) {
  							int taboffset = posix_class_maps[posix_class + i];
  							if (taboffset < 0)
  								break;
  							if (local_negate)
  								for (c = 0; c < 32; c++)
  									class[c] |= ~cbits[c + taboffset];
  							else
  								for (c = 0; c < 32; c++)
  									class[c] |= cbits[c + taboffset];
  						}
  
  						ptr = tempptr + 1;
  						class_charcount = 10;
  						continue;
  					}
  
  					if (c == '\\') {
  						c = check_escape(&ptr, errorptr, *brackets, options,
  										 TRUE, cd);
  						if (-c == ESC_b)
  							c = '\b';
  						else if (c < 0) {
  							register const uschar *cbits = cd->cbits;
  							class_charcount = 10;
  							switch (-c) {
  								case ESC_d:
  									for (c = 0; c < 32; c++)
  										class[c] |= cbits[c + cbit_digit];
  									continue;
  
  								case ESC_D:
  									for (c = 0; c < 32; c++)
  										class[c] |= ~cbits[c + cbit_digit];
  									continue;
  
  								case ESC_w:
  									for (c = 0; c < 32; c++)
  										class[c] |= cbits[c + cbit_word];
  									continue;
  
  								case ESC_W:
  									for (c = 0; c < 32; c++)
  										class[c] |= ~cbits[c + cbit_word];
  									continue;
  
  								case ESC_s:
  									for (c = 0; c < 32; c++)
  										class[c] |= cbits[c + cbit_space];
  									continue;
  
  								case ESC_S:
  									for (c = 0; c < 32; c++)
  										class[c] |= ~cbits[c + cbit_space];
  									continue;
  
  								default:
  									*errorptr = ERR7;
  									goto FAILED;
  							}
  						}
  
  #ifdef RC_PCRE_SUPPORT_UTF8
  						if (c > 255) {
  							*errorptr = ERR33;
  							goto FAILED;
  						}
  #endif
  					}
  
  					if (ptr[1] == '-' && ptr[2] != ']') {
  						int d;
  						ptr += 2;
  						d = *ptr;
  
  						if (d == 0) {
  							*errorptr = ERR6;
  							goto FAILED;
  						}
  
  						if (d == '\\') {
  							const uschar *oldptr = ptr;
  							d = check_escape(&ptr, errorptr, *brackets,
  											 options, TRUE, cd);
  
  #ifdef RC_PCRE_SUPPORT_UTF8
  							if (d > 255) {
  								*errorptr = ERR33;
  								goto FAILED;
  							}
  #endif
  							if (d < 0) {
  								if (d == -ESC_b)
  									d = '\b';
  								else {
  									ptr = oldptr - 2;
  									goto SINGLE_CHARACTER;
  								}
  							}
  						}
  
  						if (d < c) {
  							*errorptr = ERR8;
  							goto FAILED;
  						}
  
  						for (; c <= d; c++) {
  							class[c / 8] |= (1 << (c & 7));
  							if ((options & PCRE_CASELESS) != 0) {
  								int uc = cd->fcc[c];
  								class[uc / 8] |= (1 << (uc & 7));
  							}
  							class_charcount++;
  							class_lastchar = c;
  						}
  						continue;
  					}
  
  				  SINGLE_CHARACTER:
  
  					class[c / 8] |= (1 << (c & 7));
  					if ((options & PCRE_CASELESS) != 0) {
  						c = cd->fcc[c];
  						class[c / 8] |= (1 << (c & 7));
  					}
  					class_charcount++;
  					class_lastchar = c;
  				}
  
  				while ((c = *(++ptr)) != ']');
  
  				if (class_charcount == 1 && class_lastchar >= 0) {
  					if (negate_class) {
  						code[-1] = OP_NOT;
  					}
  					else {
  						code[-1] = OP_CHARS;
  						*code++ = 1;
  					}
  					*code++ = class_lastchar;
  				}
  
  				else {
  					if (negate_class)
  						for (c = 0; c < 32; c++)
  							code[c] = ~class[c];
  					else
  						memcpy(code, class, 32);
  					code += 32;
  				}
  				break;
  
  			case '{':
  				if (!is_counted_repeat(ptr + 1, cd))
  					goto NORMAL_CHAR;
  				ptr =
  					read_repeat_counts(ptr + 1, &repeat_min, &repeat_max,
  									   errorptr, cd);
  				if (*errorptr != NULL)
  					goto FAILED;
  				goto REPEAT;
  
  			case '*':
  				repeat_min = 0;
  				repeat_max = -1;
  				goto REPEAT;
  
  			case '+':
  				repeat_min = 1;
  				repeat_max = -1;
  				goto REPEAT;
  
  			case '?':
  				repeat_min = 0;
  				repeat_max = 1;
  
  			  REPEAT:
  				if (previous == NULL) {
  					*errorptr = ERR9;
  					goto FAILED;
  				}
  
  				if (ptr[1] == '?') {
  					repeat_type = greedy_non_default;
  					ptr++;
  				}
  				else
  					repeat_type = greedy_default;
  
  				if (*previous == OP_CHARS) {
  					int len = previous[1];
  
  					if (repeat_min == 0)
  						*reqchar = prevreqchar;
  					*countlits += repeat_min - 1;
  
  					if (len == 1) {
  						c = previous[2];
  						code = previous;
  					}
  					else {
  						c = previous[len + 1];
  						previous[1]--;
  						code--;
  					}
  					op_type = 0;
  					goto OUTPUT_SINGLE_REPEAT;
  				}
  
  				else if ((int)*previous == OP_NOT) {
  					op_type = OP_NOTSTAR - OP_STAR;
  					c = previous[1];
  					code = previous;
  					goto OUTPUT_SINGLE_REPEAT;
  				}
  
  				else if ((int)*previous < OP_EODN || *previous == OP_ANY) {
  					op_type = OP_TYPESTAR - OP_STAR;
  					c = *previous;
  					code = previous;
  
  				  OUTPUT_SINGLE_REPEAT:
  
  					if (repeat_max == 0)
  						goto END_REPEAT;
  
  					repeat_type += op_type;
  
  					if (repeat_min == 0) {
  						if (repeat_max == -1)
  							*code++ = OP_STAR + repeat_type;
  						else if (repeat_max == 1)
  							*code++ = OP_QUERY + repeat_type;
  						else {
  							*code++ = OP_UPTO + repeat_type;
  							*code++ = repeat_max >> 8;
  							*code++ = (repeat_max & 255);
  						}
  					}
  
  					else if (repeat_min == 1 && repeat_max == -1)
  						*code++ = OP_PLUS + repeat_type;
  
  					else {
  						if (repeat_min != 1) {
  							*code++ = OP_EXACT + op_type;
  							*code++ = repeat_min >> 8;
  							*code++ = (repeat_min & 255);
  						}
  
  						else if (*previous == OP_CHARS) {
  							if (code == previous)
  								code += 2;
  							else
  								previous[1]++;
  						}
  
  						else if (*previous == OP_NOT)
  							code++;
  
  						if (repeat_max < 0) {
  							*code++ = c;
  							*code++ = OP_STAR + repeat_type;
  						}
  
  						else if (repeat_max != repeat_min) {
  							*code++ = c;
  							repeat_max -= repeat_min;
  							*code++ = OP_UPTO + repeat_type;
  							*code++ = repeat_max >> 8;
  							*code++ = (repeat_max & 255);
  						}
  					}
  
  					*code++ = c;
  				}
  
  				else if (*previous == OP_CLASS || *previous == OP_REF) {
  					if (repeat_max == 0) {
  						code = previous;
  						goto END_REPEAT;
  					}
  					if (repeat_min == 0 && repeat_max == -1)
  						*code++ = OP_CRSTAR + repeat_type;
  					else if (repeat_min == 1 && repeat_max == -1)
  						*code++ = OP_CRPLUS + repeat_type;
  					else if (repeat_min == 0 && repeat_max == 1)
  						*code++ = OP_CRQUERY + repeat_type;
  					else {
  						*code++ = OP_CRRANGE + repeat_type;
  						*code++ = repeat_min >> 8;
  						*code++ = repeat_min & 255;
  						if (repeat_max == -1)
  							repeat_max = 0;
  						*code++ = repeat_max >> 8;
  						*code++ = repeat_max & 255;
  					}
  				}
  
  				else if ((int)*previous >= OP_BRA || (int)*previous == OP_ONCE
  						 || (int)*previous == OP_COND) {
  					register int i;
  					int ketoffset = 0;
  					int len = code - previous;
  					uschar *bralink = NULL;
  
  					if (repeat_max == -1) {
  						register uschar *ket = previous;
  						do
  							ket += (ket[1] << 8) + ket[2];
  						while (*ket != OP_KET);
  						ketoffset = code - ket;
  					}
  
  					if (repeat_min == 0) {
  						if (subcountlits > 0) {
  							*reqchar = prevreqchar;
  							*countlits -= subcountlits;
  						}
  
  						if (repeat_max == 0) {
  							code = previous;
  							goto END_REPEAT;
  						}
  
  						if (repeat_max <= 1) {
  							memmove(previous + 1, previous, len);
  							code++;
  							*previous++ = OP_BRAZERO + repeat_type;
  						}
  
  						else {
  							int offset;
  							memmove(previous + 4, previous, len);
  							code += 4;
  							*previous++ = OP_BRAZERO + repeat_type;
  							*previous++ = OP_BRA;
  
  							offset =
  								(bralink == NULL) ? 0 : previous - bralink;
  							bralink = previous;
  							*previous++ = offset >> 8;
  							*previous++ = offset & 255;
  						}
  
  						repeat_max--;
  					}
  
  					else {
  						for (i = 1; i < repeat_min; i++) {
  							memcpy(code, previous, len);
  							code += len;
  						}
  						if (repeat_max > 0)
  							repeat_max -= repeat_min;
  					}
  
  					if (repeat_max >= 0) {
  						for (i = repeat_max - 1; i >= 0; i--) {
  							*code++ = OP_BRAZERO + repeat_type;
  
  							if (i != 0) {
  								int offset;
  								*code++ = OP_BRA;
  								offset =
  									(bralink == NULL) ? 0 : code - bralink;
  								bralink = code;
  								*code++ = offset >> 8;
  								*code++ = offset & 255;
  							}
  
  							memcpy(code, previous, len);
  							code += len;
  						}
  
  						while (bralink != NULL) {
  							int oldlinkoffset;
  							int offset = code - bralink + 1;
  							uschar *bra = code - offset;
  							oldlinkoffset = (bra[1] << 8) + bra[2];
  							bralink =
  								(oldlinkoffset ==
  								 0) ? NULL : bralink - oldlinkoffset;
  							*code++ = OP_KET;
  							*code++ = bra[1] = offset >> 8;
  							*code++ = bra[2] = (offset & 255);
  						}
  					}
  
  					else
  						code[-ketoffset] = OP_KETRMAX + repeat_type;
  				}
  
  				else {
  					*errorptr = ERR11;
  					goto FAILED;
  				}
  
  			  END_REPEAT:
  				previous = NULL;
  				break;
  
  			case '(':
  				newoptions = options;
  				skipbytes = 0;
  
  				if (*(++ptr) == '?') {
  					int set, unset;
  					int *optset;
  
  					switch (*(++ptr)) {
  						case '#':
  							ptr++;
  							while (*ptr != ')')
  								ptr++;
  							continue;
  
  						case ':':
  							bravalue = OP_BRA;
  							ptr++;
  							break;
  
  						case '(':
  							bravalue = OP_COND;
  							if ((cd->ctypes[*(++ptr)] & ctype_digit) != 0) {
  								int condref = *ptr - '0';
  								while (*(++ptr) != ')')
  									condref = condref * 10 + *ptr - '0';
  								if (condref == 0) {
  									*errorptr = ERR35;
  									goto FAILED;
  								}
  								ptr++;
  								code[3] = OP_CREF;
  								code[4] = condref >> 8;
  								code[5] = condref & 255;
  								skipbytes = 3;
  							}
  							else
  								ptr--;
  							break;
  
  						case '=':
  							bravalue = OP_ASSERT;
  							ptr++;
  							break;
  
  						case '!':
  							bravalue = OP_ASSERT_NOT;
  							ptr++;
  							break;
  
  						case '<':
  							switch (*(++ptr)) {
  								case '=':
  									bravalue = OP_ASSERTBACK;
  									ptr++;
  									break;
  
  								case '!':
  									bravalue = OP_ASSERTBACK_NOT;
  									ptr++;
  									break;
  
  								default:
  									*errorptr = ERR24;
  									goto FAILED;
  							}
  							break;
  
  						case '>':
  							bravalue = OP_ONCE;
  							ptr++;
  							break;
  
  						case 'R':
  							*code++ = OP_RECURSE;
  							ptr++;
  							continue;
  
  						default:
  							set = unset = 0;
  							optset = &set;
  
  							while (*ptr != ')' && *ptr != ':') {
  								switch (*ptr++) {
  									case '-':
  										optset = &unset;
  										break;
  
  									case 'i':
  										*optset |= PCRE_CASELESS;
  										break;
  									case 'm':
  										*optset |= PCRE_MULTILINE;
  										break;
  									case 's':
  										*optset |= PCRE_DOTALL;
  										break;
  									case 'x':
  										*optset |= PCRE_EXTENDED;
  										break;
  									case 'U':
  										*optset |= PCRE_UNGREEDY;
  										break;
  									case 'X':
  										*optset |= PCRE_EXTRA;
  										break;
  
  									default:
  										*errorptr = ERR12;
  										goto FAILED;
  								}
  							}
  
  							newoptions = (options | set) & (~unset);
  
  							if (*ptr == ')') {
  								if ((options & PCRE_INGROUP) != 0 &&
  									(options & PCRE_IMS) !=
  									(newoptions & PCRE_IMS)) {
  									*code++ = OP_OPT;
  									*code++ = *optchanged =
  										newoptions & PCRE_IMS;
  								}
  								options = newoptions;
  								previous = NULL;
  								continue;
  							}
  
  							bravalue = OP_BRA;
  							ptr++;
  					}
  				}
  
  				else {
  					if (++(*brackets) > EXTRACT_BASIC_MAX) {
  						bravalue = OP_BRA + EXTRACT_BASIC_MAX + 1;
  						code[3] = OP_BRANUMBER;
  						code[4] = *brackets >> 8;
  						code[5] = *brackets & 255;
  						skipbytes = 3;
  					}
  					else
  						bravalue = OP_BRA + *brackets;
  				}
  
  				previous = (bravalue >= OP_ONCE) ? code : NULL;
  				*code = bravalue;
  				tempcode = code;
  
  				if (!compile_regex(options | PCRE_INGROUP,
  								   ((options & PCRE_IMS) !=
  									(newoptions & PCRE_IMS)) ? newoptions &
  								   PCRE_IMS : -1, brackets, &tempcode, &ptr,
  								   errorptr, (bravalue == OP_ASSERTBACK
  											  || bravalue ==
  											  OP_ASSERTBACK_NOT), skipbytes,
  								   &subreqchar, &subcountlits, cd))
  					goto FAILED;
  
  				else if (bravalue == OP_COND) {
  					uschar *tc = code;
  					condcount = 0;
  
  					do {
  						condcount++;
  						tc += (tc[1] << 8) | tc[2];
  					}
  					while (*tc != OP_KET);
  
  					if (condcount > 2) {
  						*errorptr = ERR27;
  						goto FAILED;
  					}
  				}
  
  				if (subreqchar > 0 &&
  					(bravalue >= OP_BRA || bravalue == OP_ONCE
  					 || bravalue == OP_ASSERT || (bravalue == OP_COND
  												  && condcount == 2))) {
  					prevreqchar = *reqchar;
  					*reqchar = subreqchar;
  					if (bravalue != OP_ASSERT)
  						*countlits += subcountlits;
  				}
  
  				code = tempcode;
  
  				if (*ptr != ')') {
  					*errorptr = ERR14;
  					goto FAILED;
  				}
  				break;
  
  			case '\\':
  				tempptr = ptr;
  				c = check_escape(&ptr, errorptr, *brackets, options, FALSE,
  								 cd);
  
  				if (c < 0) {
  					if (-c >= ESC_REF) {
  						int number = -c - ESC_REF;
  						previous = code;
  						*code++ = OP_REF;
  						*code++ = number >> 8;
  						*code++ = number & 255;
  					}
  					else {
  						previous = (-c > ESC_b && -c < ESC_Z) ? code : NULL;
  						*code++ = -c;
  					}
  					continue;
  				}
  
  				ptr = tempptr;
  				c = '\\';
  
  			  NORMAL_CHAR:
  			default:
  				previous = code;
  				*code = OP_CHARS;
  				code += 2;
  				length = 0;
  
  				do {
  					if ((options & PCRE_EXTENDED) != 0) {
  						if ((cd->ctypes[c] & ctype_space) != 0)
  							continue;
  						if (c == '#') {
  							while ((c = *(++ptr)) != 0 && c != '\n') ;
  							if (c == 0)
  								break;
  							continue;
  						}
  					}
  
  					if (c == '\\') {
  						tempptr = ptr;
  						c = check_escape(&ptr, errorptr, *brackets, options,
  										 FALSE, cd);
  						if (c < 0) {
  							ptr = tempptr;
  							break;
  						}
  
  #ifdef RC_PCRE_SUPPORT_UTF8
  						if (c > 127 && (options & PCRE_UTF8) != 0) {
  							uschar buffer[8];
  							int len = ord2utf8(c, buffer);
  							for (c = 0; c < len; c++)
  								*code++ = buffer[c];
  							length += len;
  							continue;
  						}
  #endif
  					}
  
  					*code++ = c;
  					length++;
  				}
  
  				while (length < MAXLIT
  					   && (cd->ctypes[c = *(++ptr)] & ctype_meta) == 0);
  
  				prevreqchar = (length > 1) ? code[-2] : *reqchar;
  				*reqchar = code[-1];
  				*countlits += length;
  
  				previous[1] = length;
  				if (length < MAXLIT)
  					ptr--;
  				break;
  		}
  	}
  
    FAILED:
  	*ptrptr = ptr;
  	return FALSE;
  }
  
  static BOOL
  compile_regex(int options, int optchanged, int *brackets, uschar ** codeptr,
  			  const uschar ** ptrptr, const char **errorptr, BOOL lookbehind,
  			  int skipbytes, int *reqchar, int *countlits, compile_data * cd)
  {
  	const uschar *ptr = *ptrptr;
  	uschar *code = *codeptr;
  	uschar *last_branch = code;
  	uschar *start_bracket = code;
  	uschar *reverse_count = NULL;
  	int oldoptions = options & PCRE_IMS;
  	int branchreqchar, branchcountlits;
  
  	*reqchar = -1;
  	*countlits = INT_MAX;
  	code += 3 + skipbytes;
  
  	for (;;) {
  		int length;
  
  		if (optchanged >= 0) {
  			*code++ = OP_OPT;
  			*code++ = optchanged;
  			options = (options & ~PCRE_IMS) | optchanged;
  		}
  
  		if (lookbehind) {
  			*code++ = OP_REVERSE;
  			reverse_count = code;
  			*code++ = 0;
  			*code++ = 0;
  		}
  
  		if (!compile_branch
  			(options, brackets, &code, &ptr, errorptr, &optchanged,
  			 &branchreqchar, &branchcountlits, cd)) {
  			*ptrptr = ptr;
  			return FALSE;
  		}
  
  		length = code - last_branch;
  		last_branch[1] = length >> 8;
  		last_branch[2] = length & 255;
  
  		if (*reqchar != -2) {
  			if (branchreqchar >= 0) {
  				if (*reqchar == -1)
  					*reqchar = branchreqchar;
  				else if (*reqchar != branchreqchar)
  					*reqchar = -2;
  			}
  			else
  				*reqchar = -2;
  		}
  
  		if (branchcountlits < *countlits)
  			*countlits = branchcountlits;
  
  		if (lookbehind) {
  			*code = OP_END;
  			length = find_fixedlength(last_branch, options);
  
  			if (length < 0) {
  				*errorptr = ERR25;
  				*ptrptr = ptr;
  				return FALSE;
  			}
  			reverse_count[0] = (length >> 8);
  			reverse_count[1] = length & 255;
  		}
  
  		if (*ptr != '|') {
  			length = code - start_bracket;
  			*code++ = OP_KET;
  			*code++ = length >> 8;
  			*code++ = length & 255;
  			if (optchanged >= 0) {
  				*code++ = OP_OPT;
  				*code++ = oldoptions;
  			}
  			*codeptr = code;
  			*ptrptr = ptr;
  			return TRUE;
  		}
  
  		*code = OP_ALT;
  		last_branch = code;
  		code += 3;
  		ptr++;
  	}
  }
  
  static const uschar *first_significant_code(const uschar * code, int *options,
  											int optbit, BOOL optstop)
  {
  	for (;;) {
  		switch ((int)*code) {
  			case OP_OPT:
  				if (optbit > 0
  					&& ((int)code[1] & optbit) != (*options & optbit)) {
  					if (optstop)
  						return code;
  					*options = (int)code[1];
  				}
  				code += 2;
  				break;
  
  			case OP_CREF:
  			case OP_BRANUMBER:
  				code += 3;
  				break;
  
  			case OP_WORD_BOUNDARY:
  			case OP_NOT_WORD_BOUNDARY:
  				code++;
  				break;
  
  			case OP_ASSERT_NOT:
  			case OP_ASSERTBACK:
  			case OP_ASSERTBACK_NOT:
  				do
  					code += (code[1] << 8) + code[2];
  				while (*code == OP_ALT);
  				code += 3;
  				break;
  
  			default:
  				return code;
  		}
  	}
  }
  
  static BOOL is_anchored(register const uschar * code, int *options)
  {
  	do {
  		const uschar *scode = first_significant_code(code + 3, options,
  													 PCRE_MULTILINE, FALSE);
  		register int op = *scode;
  		if (op >= OP_BRA || op == OP_ASSERT || op == OP_ONCE || op == OP_COND) {
  			if (!is_anchored(scode, options))
  				return FALSE;
  		}
  		else if ((op == OP_TYPESTAR || op == OP_TYPEMINSTAR) &&
  				 (*options & PCRE_DOTALL) != 0) {
  			if (scode[1] != OP_ANY)
  				return FALSE;
  		}
  		else if (op != OP_SOD &&
  				 ((*options & PCRE_MULTILINE) != 0 || op != OP_CIRC))
  			return FALSE;
  		code += (code[1] << 8) + code[2];
  	}
  	while (*code == OP_ALT);
  	return TRUE;
  }
  
  static BOOL is_startline(const uschar * code)
  {
  	do {
  		const uschar *scode =
  			first_significant_code(code + 3, NULL, 0, FALSE);
  		register int op = *scode;
  		if (op >= OP_BRA || op == OP_ASSERT || op == OP_ONCE || op == OP_COND) {
  			if (!is_startline(scode))
  				return FALSE;
  		}
  		else if (op == OP_TYPESTAR || op == OP_TYPEMINSTAR) {
  			if (scode[1] != OP_ANY)
  				return FALSE;
  		}
  		else if (op != OP_CIRC)
  			return FALSE;
  		code += (code[1] << 8) + code[2];
  	}
  	while (*code == OP_ALT);
  	return TRUE;
  }
  
  static int find_firstchar(const uschar * code, int *options)
  {
  	register int c = -1;
  	do {
  		int d;
  		const uschar *scode = first_significant_code(code + 3, options,
  													 PCRE_CASELESS, TRUE);
  		register int op = *scode;
  
  		if (op >= OP_BRA)
  			op = OP_BRA;
  
  		switch (op) {
  			default:
  				return -1;
  
  			case OP_BRA:
  			case OP_ASSERT:
  			case OP_ONCE:
  			case OP_COND:
  				if ((d = find_firstchar(scode, options)) < 0)
  					return -1;
  				if (c < 0)
  					c = d;
  				else if (c != d)
  					return -1;
  				break;
  
  			case OP_EXACT:
  				scode++;
  
  			case OP_CHARS:
  				scode++;
  
  			case OP_PLUS:
  			case OP_MINPLUS:
  				if (c < 0)
  					c = scode[1];
  				else if (c != scode[1])
  					return -1;
  				break;
  		}
  
  		code += (code[1] << 8) + code[2];
  	}
  	while (*code == OP_ALT);
  	return c;
  }
  
  pcre *pcre_compile(const char *pattern, int options, const char **errorptr,
  				   int *erroroffset, const unsigned char *tables)
  {
  	pcre_st *re;
  	int length = 3;
  	int runlength;
  	int c, reqchar, countlits;
  	int bracount = 0;
  	int top_backref = 0;
  	int branch_extra = 0;
  	int branch_newextra;
  	unsigned int brastackptr = 0;
  	size_t size;
  	uschar *code;
  	const uschar *ptr;
  	compile_data compile_block;
  	int brastack[BRASTACK_SIZE];
  	uschar bralenstack[BRASTACK_SIZE];
  
  #ifndef RC_PCRE_SUPPORT_UTF8
  	if ((options & PCRE_UTF8) != 0) {
  		*errorptr = ERR32;
  		return NULL;
  	}
  #endif
  
  	if (errorptr == NULL)
  		return NULL;
  	*errorptr = NULL;
  
  	if (erroroffset == NULL) {
  		*errorptr = ERR16;
  		return NULL;
  	}
  	*erroroffset = 0;
  
  	if ((options & ~PUBLIC_OPTIONS) != 0) {
  		*errorptr = ERR17;
  		return NULL;
  	}
  
  	if (tables == NULL)
  		tables = pcre_default_tables;
  	compile_block.lcc = tables + lcc_offset;
  	compile_block.fcc = tables + fcc_offset;
  	compile_block.cbits = tables + cbits_offset;
  	compile_block.ctypes = tables + ctypes_offset;
  
  	ptr = (const uschar *)(pattern - 1);
  	while ((c = *(++ptr)) != 0) {
  		int min, max;
  		int class_charcount;
  		int bracket_length;
  
  		if ((options & PCRE_EXTENDED) != 0) {
  			if ((compile_block.ctypes[c] & ctype_space) != 0)
  				continue;
  			if (c == '#') {
  				while ((c = *(++ptr)) != 0 && c != '\n') ;
  				continue;
  			}
  		}
  
  		switch (c) {
  			case '\\':
  				{
  					const uschar *save_ptr = ptr;
  					c = check_escape(&ptr, errorptr, bracount, options, FALSE,
  									 &compile_block);
  					if (*errorptr != NULL)
  						goto PCRE_ERROR_RETURN;
  					if (c >= 0) {
  						ptr = save_ptr;
  						c = '\\';
  						goto NORMAL_CHAR;
  					}
  				}
  				length++;
  
  				if (c <= -ESC_REF) {
  					int refnum = -c - ESC_REF;
  					if (refnum > top_backref)
  						top_backref = refnum;
  					length += 2;
  					if (ptr[1] == '{'
  						&& is_counted_repeat(ptr + 2, &compile_block)) {
  						ptr =
  							read_repeat_counts(ptr + 2, &min, &max, errorptr,
  											   &compile_block);
  						if (*errorptr != NULL)
  							goto PCRE_ERROR_RETURN;
  						if ((min == 0 && (max == 1 || max == -1)) ||
  							(min == 1 && max == -1))
  							length++;
  						else
  							length += 5;
  						if (ptr[1] == '?')
  							ptr++;
  					}
  				}
  				continue;
  
  			case '^':
  			case '.':
  			case '$':
  			case '*':
  			case '+':
  			case '?':
  				length++;
  				continue;
  
  			case '{':
  				if (!is_counted_repeat(ptr + 1, &compile_block))
  					goto NORMAL_CHAR;
  				ptr =
  					read_repeat_counts(ptr + 1, &min, &max, errorptr,
  									   &compile_block);
  				if (*errorptr != NULL)
  					goto PCRE_ERROR_RETURN;
  				if ((min == 0 && (max == 1 || max == -1)) ||
  					(min == 1 && max == -1))
  					length++;
  				else {
  					length--;
  					if (min == 1)
  						length++;
  					else if (min > 0)
  						length += 4;
  					if (max > 0)
  						length += 4;
  					else
  						length += 2;
  				}
  				if (ptr[1] == '?')
  					ptr++;
  				continue;
  
  			case '|':
  				length += 3 + branch_extra;
  				continue;
  
  			case '[':
  				class_charcount = 0;
  				if (*(++ptr) == '^')
  					ptr++;
  				do {
  					if (*ptr == '\\') {
  						int ch =
  							check_escape(&ptr, errorptr, bracount, options,
  										 TRUE,
  										 &compile_block);
  						if (*errorptr != NULL)
  							goto PCRE_ERROR_RETURN;
  						if (-ch == ESC_b)
  							class_charcount++;
  						else
  							class_charcount = 10;
  					}
  					else
  						class_charcount++;
  					ptr++;
  				}
  				while (*ptr != 0 && *ptr != ']');
  
  				if (class_charcount == 1)
  					length += 3;
  				else {
  					length += 33;
  
  					if (*ptr != 0 && ptr[1] == '{'
  						&& is_counted_repeat(ptr + 2, &compile_block)) {
  						ptr =
  							read_repeat_counts(ptr + 2, &min, &max, errorptr,
  											   &compile_block);
  						if (*errorptr != NULL)
  							goto PCRE_ERROR_RETURN;
  						if ((min == 0 && (max == 1 || max == -1)) ||
  							(min == 1 && max == -1))
  							length++;
  						else
  							length += 5;
  						if (ptr[1] == '?')
  							ptr++;
  					}
  				}
  				continue;
  
  			case '(':
  				branch_newextra = 0;
  				bracket_length = 3;
  
  				if (ptr[1] == '?') {
  					int set, unset;
  					int *optset;
  
  					switch (c = ptr[2]) {
  						case '#':
  							ptr += 3;
  							while (*ptr != 0 && *ptr != ')')
  								ptr++;
  							if (*ptr == 0) {
  								*errorptr = ERR18;
  								goto PCRE_ERROR_RETURN;
  							}
  							continue;
  
  						case ':':
  						case '=':
  						case '!':
  						case '>':
  							ptr += 2;
  							break;
  
  						case 'R':
  							if (ptr[3] != ')') {
  								*errorptr = ERR29;
  								goto PCRE_ERROR_RETURN;
  							}
  							ptr += 3;
  							length += 1;
  							break;
  
  						case '<':
  							if (ptr[3] == '=' || ptr[3] == '!') {
  								ptr += 3;
  								branch_newextra = 3;
  								length += 3;
  								break;
  							}
  							*errorptr = ERR24;
  							goto PCRE_ERROR_RETURN;
  
  						case '(':
  							if ((compile_block.
  								 ctypes[ptr[3]] & ctype_digit) != 0) {
  								ptr += 4;
  								length += 3;
  								while ((compile_block.
  										ctypes[*ptr] & ctype_digit) != 0)
  									ptr++;
  								if (*ptr != ')') {
  									*errorptr = ERR26;
  									goto PCRE_ERROR_RETURN;
  								}
  							}
  							else {
  								ptr++;
  								if (ptr[2] != '?' ||
  									(ptr[3] != '=' && ptr[3] != '!'
  									 && ptr[3] != '<')) {
  									ptr += 2;
  									*errorptr = ERR28;
  									goto PCRE_ERROR_RETURN;
  								}
  							}
  							break;
  
  						default:
  							set = unset = 0;
  							optset = &set;
  							ptr += 2;
  
  							for (;; ptr++) {
  								c = *ptr;
  								switch (c) {
  									case 'i':
  										*optset |= PCRE_CASELESS;
  										continue;
  
  									case 'm':
  										*optset |= PCRE_MULTILINE;
  										continue;
  
  									case 's':
  										*optset |= PCRE_DOTALL;
  										continue;
  
  									case 'x':
  										*optset |= PCRE_EXTENDED;
  										continue;
  
  									case 'X':
  										*optset |= PCRE_EXTRA;
  										continue;
  
  									case 'U':
  										*optset |= PCRE_UNGREEDY;
  										continue;
  
  									case '-':
  										optset = &unset;
  										continue;
  
  									case ')':
  										if (brastackptr == 0) {
  											options =
  												(options | set) & (~unset);
  											set = unset = 0;
  										}
  
  									case ':':
  										if (((set | unset) & PCRE_IMS) != 0) {
  											length += 4;
  											branch_newextra = 2;
  											if (((set | unset) &
  												 PCRE_CASELESS) != 0)
  												options |= PCRE_ICHANGED;
  										}
  										goto END_OPTIONS;
  
  									default:
  										*errorptr = ERR12;
  										goto PCRE_ERROR_RETURN;
  								}
  							}
  
  						  END_OPTIONS:
  							if (c == ')') {
  								if (branch_newextra == 2
  									&& (branch_extra == 0
  										|| branch_extra == 3))
  									branch_extra += branch_newextra;
  								continue;
  							}
  
  					}
  				}
  
  				else {
  					bracount++;
  					if (bracount > EXTRACT_BASIC_MAX)
  						bracket_length += 3;
  				}
  
  				if (brastackptr >= sizeof (brastack) / sizeof (int)) {
  					*errorptr = ERR19;
  					goto PCRE_ERROR_RETURN;
  				}
  
  				bralenstack[brastackptr] = branch_extra;
  				branch_extra = branch_newextra;
  
  				brastack[brastackptr++] = length;
  				length += bracket_length;
  				continue;
  
  			case ')':
  				length += 3;
  				{
  					int minval = 1;
  					int maxval = 1;
  					int duplength;
  
  					if (brastackptr > 0) {
  						duplength = length - brastack[--brastackptr];
  						branch_extra = bralenstack[brastackptr];
  					}
  					else
  						duplength = 0;
  
  					if ((c = ptr[1]) == '{'
  						&& is_counted_repeat(ptr + 2, &compile_block)) {
  						ptr =
  							read_repeat_counts(ptr + 2, &minval, &maxval,
  											   errorptr, &compile_block);
  						if (*errorptr != NULL)
  							goto PCRE_ERROR_RETURN;
  					}
  					else if (c == '*') {
  						minval = 0;
  						maxval = -1;
  						ptr++;
  					}
  					else if (c == '+') {
  						maxval = -1;
  						ptr++;
  					}
  					else if (c == '?') {
  						minval = 0;
  						ptr++;
  					}
  
  					if (minval == 0) {
  						length++;
  						if (maxval > 0)
  							length += (maxval - 1) * (duplength + 7);
  					}
  
  					else {
  						length += (minval - 1) * duplength;
  						if (maxval > minval)
  							length += (maxval - minval) * (duplength + 7) - 6;
  					}
  				}
  				continue;
  
  			  NORMAL_CHAR:
  			default:
  				length += 2;
  				runlength = 0;
  				do {
  					if ((options & PCRE_EXTENDED) != 0) {
  						if ((compile_block.ctypes[c] & ctype_space) != 0)
  							continue;
  						if (c == '#') {
  							while ((c = *(++ptr)) != 0 && c != '\n') ;
  							continue;
  						}
  					}
  
  					if (c == '\\') {
  						const uschar *saveptr = ptr;
  						c = check_escape(&ptr, errorptr, bracount, options,
  										 FALSE, &compile_block);
  						if (*errorptr != NULL)
  							goto PCRE_ERROR_RETURN;
  						if (c < 0) {
  							ptr = saveptr;
  							break;
  						}
  
  #ifdef RC_PCRE_SUPPORT_UTF8
  						if (c > 127 && (options & PCRE_UTF8) != 0) {
  							int i;
  							for (i = 0;
  								 i < sizeof (utf8_table1) / sizeof (int); i++)
  								if (c <= utf8_table1[i])
  									break;
  							runlength += i;
  						}
  #endif
  					}
  
  					runlength++;
  				}
  
  				while (runlength < MAXLIT &&
  					   (compile_block.ctypes[c = *(++ptr)] & ctype_meta) ==
  					   0);
  
  				ptr--;
  				length += runlength;
  				continue;
  		}
  	}
  
  	length += 4;
  
  	if (length > 65539) {
  		*errorptr = ERR20;
  		return NULL;
  	}
  
  	size = length + offsetof(pcre_st, code[0]);
  	re = (pcre_st *) (pcre_malloc) (size);
  
  	if (re == NULL) {
  		*errorptr = ERR21;
  		return NULL;
  	}
  
  	re->magic_number = MAGIC_NUMBER;
  	re->size = size;
  	re->options = options;
  	re->tables = tables;
  
  	ptr = (const uschar *)pattern;
  	code = re->code;
  	*code = OP_BRA;
  	bracount = 0;
  	(void)compile_regex(options, -1, &bracount, &code, &ptr, errorptr, FALSE,
  						0, &reqchar, &countlits, &compile_block);
  	re->top_bracket = bracount;
  	re->top_backref = top_backref;
  
  	if (*errorptr == NULL && *ptr != 0)
  		*errorptr = ERR22;
  
  	*code++ = OP_END;
  	if (code - re->code > length)
  		*errorptr = ERR23;
  
  	if (top_backref > re->top_bracket)
  		*errorptr = ERR15;
  
  	if (*errorptr != NULL) {
  		(pcre_free) (re);
  	  PCRE_ERROR_RETURN:
  		*erroroffset = ptr - (const uschar *)pattern;
  		return NULL;
  	}
  
  	if ((options & PCRE_ANCHORED) == 0) {
  		int temp_options = options;
  		if (is_anchored(re->code, &temp_options))
  			re->options |= PCRE_ANCHORED;
  		else {
  			int ch = find_firstchar(re->code, &temp_options);
  			if (ch >= 0) {
  				re->first_char = ch;
  				re->options |= PCRE_FIRSTSET;
  			}
  			else if (is_startline(re->code))
  				re->options |= PCRE_STARTLINE;
  		}
  	}
  
  	if (reqchar >= 0 && (countlits > 1 || (re->options & PCRE_FIRSTSET) == 0)) {
  		re->req_char = reqchar;
  		re->options |= PCRE_REQCHSET;
  	}
  
  	return (pcre *) re;
  }
  
  static BOOL
  match_ref(int offset, register const uschar * eptr, int length,
  		  match_data * md, unsigned long int ims)
  {
  	const uschar *p = md->start_subject + md->offset_vector[offset];
  
  	if (length > md->end_subject - eptr)
  		return FALSE;
  
  	if ((ims & PCRE_CASELESS) != 0) {
  		while (length-- > 0)
  			if (md->lcc[*p++] != md->lcc[*eptr++])
  				return FALSE;
  	}
  	else {
  		while (length-- > 0)
  			if (*p++ != *eptr++)
  				return FALSE;
  	}
  
  	return TRUE;
  }
  
  static BOOL
  match(register const uschar * eptr, register const uschar * ecode,
  	  int offset_top, match_data * md, unsigned long int ims,
  	  eptrblock * eptrb, int flags)
  {
  	unsigned long int original_ims = ims;
  	eptrblock newptrb;
  
  	if ((flags & match_isgroup) != 0) {
  		newptrb.prev = eptrb;
  		newptrb.saved_eptr = eptr;
  		eptrb = &newptrb;
  	}
  
  	for (;;) {
  		int op = (int)*ecode;
  		int min, max, ctype;
  		register int i;
  		register int c;
  		BOOL minimize = FALSE;
  
  		if (op > OP_BRA) {
  			int offset;
  			int number = op - OP_BRA;
  
  			if (number > EXTRACT_BASIC_MAX)
  				number = (ecode[4] << 8) | ecode[5];
  			offset = number << 1;
  
  			if (offset < md->offset_max) {
  				int save_offset1 = md->offset_vector[offset];
  				int save_offset2 = md->offset_vector[offset + 1];
  				int save_offset3 = md->offset_vector[md->offset_end - number];
  
  				md->offset_vector[md->offset_end - number] =
  					eptr - md->start_subject;
  
  				do {
  					if (match
  						(eptr, ecode + 3, offset_top, md, ims, eptrb,
  						 match_isgroup))
  						return TRUE;
  					ecode += (ecode[1] << 8) + ecode[2];
  				}
  				while (*ecode == OP_ALT);
  
  				md->offset_vector[offset] = save_offset1;
  				md->offset_vector[offset + 1] = save_offset2;
  				md->offset_vector[md->offset_end - number] = save_offset3;
  
  				return FALSE;
  			}
  
  			else
  				op = OP_BRA;
  		}
  
  		switch (op) {
  			case OP_BRA:
  
  				do {
  					if (match
  						(eptr, ecode + 3, offset_top, md, ims, eptrb,
  						 match_isgroup))
  						return TRUE;
  					ecode += (ecode[1] << 8) + ecode[2];
  				}
  				while (*ecode == OP_ALT);
  
  				return FALSE;
  
  			case OP_COND:
  				if (ecode[3] == OP_CREF) {
  					int offset = (ecode[4] << 9) | (ecode[5] << 1);
  					return match(eptr,
  								 ecode +
  								 ((offset < offset_top
  								   && md->offset_vector[offset] >=
  								   0) ? 6 : 3 + (ecode[1] << 8) + ecode[2]),
  								 offset_top, md, ims, eptrb, match_isgroup);
  				}
  
  				else {
  					if (match(eptr, ecode + 3, offset_top, md, ims, NULL,
  							  match_condassert | match_isgroup)) {
  						ecode += 3 + (ecode[4] << 8) + ecode[5];
  						while (*ecode == OP_ALT)
  							ecode += (ecode[1] << 8) + ecode[2];
  					}
  					else
  						ecode += (ecode[1] << 8) + ecode[2];
  					return match(eptr, ecode + 3, offset_top, md, ims, eptrb,
  								 match_isgroup);
  				}
  
  			case OP_CREF:
  			case OP_BRANUMBER:
  				ecode += 3;
  				break;
  
  			case OP_END:
  				if (md->notempty && eptr == md->start_match)
  					return FALSE;
  				md->end_match_ptr = eptr;
  				md->end_offset_top = offset_top;
  				return TRUE;
  
  			case OP_OPT:
  				ims = ecode[1];
  				ecode += 2;
  
  				break;
  
  			case OP_ASSERT:
  			case OP_ASSERTBACK:
  				do {
  					if (match
  						(eptr, ecode + 3, offset_top, md, ims, NULL,
  						 match_isgroup))
  						break;
  					ecode += (ecode[1] << 8) + ecode[2];
  				}
  				while (*ecode == OP_ALT);
  				if (*ecode == OP_KET)
  					return FALSE;
  
  				if ((flags & match_condassert) != 0)
  					return TRUE;
  
  				do
  					ecode += (ecode[1] << 8) + ecode[2];
  				while (*ecode == OP_ALT);
  				ecode += 3;
  				offset_top = md->end_offset_top;
  				continue;
  
  			case OP_ASSERT_NOT:
  			case OP_ASSERTBACK_NOT:
  				do {
  					if (match
  						(eptr, ecode + 3, offset_top, md, ims, NULL,
  						 match_isgroup))
  						return FALSE;
  					ecode += (ecode[1] << 8) + ecode[2];
  				}
  				while (*ecode == OP_ALT);
  
  				if ((flags & match_condassert) != 0)
  					return TRUE;
  
  				ecode += 3;
  				continue;
  
  			case OP_REVERSE:
  #ifdef RC_PCRE_SUPPORT_UTF8
  				c = (ecode[1] << 8) + ecode[2];
  				for (i = 0; i < c; i++) {
  					eptr--;
  					BACKCHAR(eptr)
  				}
  #else
  				eptr -= (ecode[1] << 8) + ecode[2];
  #endif
  
  				if (eptr < md->start_subject)
  					return FALSE;
  				ecode += 3;
  				break;
  
  			case OP_RECURSE:
  				{
  					BOOL rc;
  					int *save;
  					int stacksave[15];
  
  					c = md->offset_max;
  
  					if (c < 16)
  						save = stacksave;
  					else {
  						save = (int *)(pcre_malloc) ((c + 1) * sizeof (int));
  						if (save == NULL) {
  							save = stacksave;
  							c = 15;
  						}
  					}
  
  					for (i = 1; i <= c; i++)
  						save[i] = md->offset_vector[md->offset_end - i];
  					rc = match(eptr, md->start_pattern, offset_top, md, ims,
  							   eptrb, match_isgroup);
  					for (i = 1; i <= c; i++)
  						md->offset_vector[md->offset_end - i] = save[i];
  					if (save != stacksave)
  						(pcre_free) (save);
  					if (!rc)
  						return FALSE;
  
  					offset_top = md->end_offset_top;
  					eptr = md->end_match_ptr;
  					ecode++;
  				}
  				break;
  
  			case OP_ONCE:
  				{
  					const uschar *prev = ecode;
  					const uschar *saved_eptr = eptr;
  
  					do {
  						if (match
  							(eptr, ecode + 3, offset_top, md, ims, eptrb,
  							 match_isgroup))
  							break;
  						ecode += (ecode[1] << 8) + ecode[2];
  					}
  					while (*ecode == OP_ALT);
  
  					if (*ecode != OP_ONCE && *ecode != OP_ALT)
  						return FALSE;
  
  					do
  						ecode += (ecode[1] << 8) + ecode[2];
  					while (*ecode == OP_ALT);
  
  					offset_top = md->end_offset_top;
  					eptr = md->end_match_ptr;
  
  					if (*ecode == OP_KET || eptr == saved_eptr) {
  						ecode += 3;
  						break;
  					}
  
  					if (ecode[3] == OP_OPT) {
  						ims = (ims & ~PCRE_IMS) | ecode[4];
  
  					}
  
  					if (*ecode == OP_KETRMIN) {
  						if (match
  							(eptr, ecode + 3, offset_top, md, ims, eptrb, 0)
  							|| match(eptr, prev, offset_top, md, ims, eptrb,
  									 match_isgroup))
  							return TRUE;
  					}
  					else {
  						if (match
  							(eptr, prev, offset_top, md, ims, eptrb,
  							 match_isgroup)
  							|| match(eptr, ecode + 3, offset_top, md, ims,
  									 eptrb, 0))
  							return TRUE;
  					}
  				}
  				return FALSE;
  
  			case OP_ALT:
  				do
  					ecode += (ecode[1] << 8) + ecode[2];
  				while (*ecode == OP_ALT);
  				break;
  
  			case OP_BRAZERO:
  				{
  					const uschar *next = ecode + 1;
  					if (match
  						(eptr, next, offset_top, md, ims, eptrb,
  						 match_isgroup))
  						return TRUE;
  					do
  						next += (next[1] << 8) + next[2];
  					while (*next == OP_ALT);
  					ecode = next + 3;
  				}
  				break;
  
  			case OP_BRAMINZERO:
  				{
  					const uschar *next = ecode + 1;
  					do
  						next += (next[1] << 8) + next[2];
  					while (*next == OP_ALT);
  					if (match
  						(eptr, next + 3, offset_top, md, ims, eptrb,
  						 match_isgroup))
  						return TRUE;
  					ecode++;
  				}
  				break;
  
  			case OP_KET:
  			case OP_KETRMIN:
  			case OP_KETRMAX:
  				{
  					const uschar *prev = ecode - (ecode[1] << 8) - ecode[2];
  					const uschar *saved_eptr = eptrb->saved_eptr;
  
  					eptrb = eptrb->prev;
  
  					if (*prev == OP_ASSERT || *prev == OP_ASSERT_NOT ||
  						*prev == OP_ASSERTBACK || *prev == OP_ASSERTBACK_NOT
  						|| *prev == OP_ONCE) {
  						md->end_match_ptr = eptr;
  						md->end_offset_top = offset_top;
  						return TRUE;
  					}
  
  					if (*prev != OP_COND) {
  						int offset;
  						int number = *prev - OP_BRA;
  
  						if (number > EXTRACT_BASIC_MAX)
  							number = (prev[4] << 8) | prev[5];
  						offset = number << 1;
  
  						if (number > 0) {
  							if (offset >= md->offset_max)
  								md->offset_overflow = TRUE;
  							else {
  								md->offset_vector[offset] =
  									md->offset_vector[md->offset_end -
  													  number];
  								md->offset_vector[offset + 1] =
  									eptr - md->start_subject;
  								if (offset_top <= offset)
  									offset_top = offset + 2;
  							}
  						}
  					}
  
  					ims = original_ims;
  
  					if (*ecode == OP_KET || eptr == saved_eptr) {
  						ecode += 3;
  						break;
  					}
  
  					if (*ecode == OP_KETRMIN) {
  						if (match
  							(eptr, ecode + 3, offset_top, md, ims, eptrb, 0)
  							|| match(eptr, prev, offset_top, md, ims, eptrb,
  									 match_isgroup))
  							return TRUE;
  					}
  					else {
  						if (match
  							(eptr, prev, offset_top, md, ims, eptrb,
  							 match_isgroup)
  							|| match(eptr, ecode + 3, offset_top, md, ims,
  									 eptrb, 0))
  							return TRUE;
  					}
  				}
  				return FALSE;
  
  			case OP_CIRC:
  				if (md->notbol && eptr == md->start_subject)
  					return FALSE;
  				if ((ims & PCRE_MULTILINE) != 0) {
  					if (eptr != md->start_subject && eptr[-1] != '\n')
  						return FALSE;
  					ecode++;
  					break;
  				}
  
  			case OP_SOD:
  				if (eptr != md->start_subject)
  					return FALSE;
  				ecode++;
  				break;
  
  			case OP_DOLL:
  				if ((ims & PCRE_MULTILINE) != 0) {
  					if (eptr < md->end_subject) {
  						if (*eptr != '\n')
  							return FALSE;
  					}
  					else {
  						if (md->noteol)
  							return FALSE;
  					}
  					ecode++;
  					break;
  				}
  				else {
  					if (md->noteol)
  						return FALSE;
  					if (!md->endonly) {
  						if (eptr < md->end_subject - 1 ||
  							(eptr == md->end_subject - 1 && *eptr != '\n'))
  							return FALSE;
  
  						ecode++;
  						break;
  					}
  				}
  			case OP_EOD:
  				if (eptr < md->end_subject)
  					return FALSE;
  				ecode++;
  				break;
  
  			case OP_EODN:
  				if (eptr < md->end_subject - 1 ||
  					(eptr == md->end_subject - 1 && *eptr != '\n'))
  					return FALSE;
  				ecode++;
  				break;
  
  			case OP_NOT_WORD_BOUNDARY:
  			case OP_WORD_BOUNDARY:
  				{
  					BOOL prev_is_word = (eptr != md->start_subject) &&
  						((md->ctypes[eptr[-1]] & ctype_word) != 0);
  					BOOL cur_is_word = (eptr < md->end_subject) &&
  						((md->ctypes[*eptr] & ctype_word) != 0);
  					if ((*ecode++ == OP_WORD_BOUNDARY) ?
  						cur_is_word == prev_is_word : cur_is_word !=
  						prev_is_word)
  						return FALSE;
  				}
  				break;
  
  			case OP_ANY:
  				if ((ims & PCRE_DOTALL) == 0 && eptr < md->end_subject
  					&& *eptr == '\n')
  					return FALSE;
  				if (eptr++ >= md->end_subject)
  					return FALSE;
  #ifdef RC_PCRE_SUPPORT_UTF8
  				if (md->utf8)
  					while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80)
  						eptr++;
  #endif
  				ecode++;
  				break;
  
  			case OP_NOT_DIGIT:
  				if (eptr >= md->end_subject ||
  					(md->ctypes[*eptr++] & ctype_digit) != 0)
  					return FALSE;
  				ecode++;
  				break;
  
  			case OP_DIGIT:
  				if (eptr >= md->end_subject ||
  					(md->ctypes[*eptr++] & ctype_digit) == 0)
  					return FALSE;
  				ecode++;
  				break;
  
  			case OP_NOT_WHITESPACE:
  				if (eptr >= md->end_subject ||
  					(md->ctypes[*eptr++] & ctype_space) != 0)
  					return FALSE;
  				ecode++;
  				break;
  
  			case OP_WHITESPACE:
  				if (eptr >= md->end_subject ||
  					(md->ctypes[*eptr++] & ctype_space) == 0)
  					return FALSE;
  				ecode++;
  				break;
  
  			case OP_NOT_WORDCHAR:
  				if (eptr >= md->end_subject ||
  					(md->ctypes[*eptr++] & ctype_word) != 0)
  					return FALSE;
  				ecode++;
  				break;
  
  			case OP_WORDCHAR:
  				if (eptr >= md->end_subject ||
  					(md->ctypes[*eptr++] & ctype_word) == 0)
  					return FALSE;
  				ecode++;
  				break;
  
  			case OP_REF:
  				{
  					int length;
  					int offset = (ecode[1] << 9) | (ecode[2] << 1);
  					ecode += 3;
  
  					length = (offset >= offset_top
  							  || md->offset_vector[offset] <
  							  0) ? md->end_subject - eptr +
  						1 : md->offset_vector[offset + 1] -
  						md->offset_vector[offset];
  
  					switch (*ecode) {
  						case OP_CRSTAR:
  						case OP_CRMINSTAR:
  						case OP_CRPLUS:
  						case OP_CRMINPLUS:
  						case OP_CRQUERY:
  						case OP_CRMINQUERY:
  							c = *ecode++ - OP_CRSTAR;
  							minimize = (c & 1) != 0;
  							min = rep_min[c];
  							max = rep_max[c];
  							if (max == 0)
  								max = INT_MAX;
  							break;
  
  						case OP_CRRANGE:
  						case OP_CRMINRANGE:
  							minimize = (*ecode == OP_CRMINRANGE);
  							min = (ecode[1] << 8) + ecode[2];
  							max = (ecode[3] << 8) + ecode[4];
  							if (max == 0)
  								max = INT_MAX;
  							ecode += 5;
  							break;
  
  						default:
  							if (!match_ref(offset, eptr, length, md, ims))
  								return FALSE;
  							eptr += length;
  							continue;
  					}
  
  					if (length == 0)
  						continue;
  
  					for (i = 1; i <= min; i++) {
  						if (!match_ref(offset, eptr, length, md, ims))
  							return FALSE;
  						eptr += length;
  					}
  
  					if (min == max)
  						continue;
  
  					if (minimize) {
  						for (i = min;; i++) {
  							if (match
  								(eptr, ecode, offset_top, md, ims, eptrb, 0))
  								return TRUE;
  							if (i >= max
  								|| !match_ref(offset, eptr, length, md, ims))
  								return FALSE;
  							eptr += length;
  						}
  					}
  
  					else {
  						const uschar *pp = eptr;
  						for (i = min; i < max; i++) {
  							if (!match_ref(offset, eptr, length, md, ims))
  								break;
  							eptr += length;
  						}
  						while (eptr >= pp) {
  							if (match
  								(eptr, ecode, offset_top, md, ims, eptrb, 0))
  								return TRUE;
  							eptr -= length;
  						}
  						return FALSE;
  					}
  				}
  
  			case OP_CLASS:
  				{
  					const uschar *data = ecode + 1;
  					ecode += 33;
  
  					switch (*ecode) {
  						case OP_CRSTAR:
  						case OP_CRMINSTAR:
  						case OP_CRPLUS:
  						case OP_CRMINPLUS:
  						case OP_CRQUERY:
  						case OP_CRMINQUERY:
  							c = *ecode++ - OP_CRSTAR;
  							minimize = (c & 1) != 0;
  							min = rep_min[c];
  							max = rep_max[c];
  							if (max == 0)
  								max = INT_MAX;
  							break;
  
  						case OP_CRRANGE:
  						case OP_CRMINRANGE:
  							minimize = (*ecode == OP_CRMINRANGE);
  							min = (ecode[1] << 8) + ecode[2];
  							max = (ecode[3] << 8) + ecode[4];
  							if (max == 0)
  								max = INT_MAX;
  							ecode += 5;
  							break;
  
  						default:
  							min = max = 1;
  							break;
  					}
  
  					for (i = 1; i <= min; i++) {
  						if (eptr >= md->end_subject)
  							return FALSE;
  						GETCHARINC(c, eptr)
  #ifdef RC_PCRE_SUPPORT_UTF8
  							if (c > 255)
  							return FALSE;
  #endif
  
  						if ((data[c / 8] & (1 << (c & 7))) != 0)
  							continue;
  						return FALSE;
  					}
  
  					if (min == max)
  						continue;
  
  					if (minimize) {
  						for (i = min;; i++) {
  							if (match
  								(eptr, ecode, offset_top, md, ims, eptrb, 0))
  								return TRUE;
  							if (i >= max || eptr >= md->end_subject)
  								return FALSE;
  							GETCHARINC(c, eptr)
  #ifdef RC_PCRE_SUPPORT_UTF8
  								if (c > 255)
  								return FALSE;
  #endif
  							if ((data[c / 8] & (1 << (c & 7))) != 0)
  								continue;
  							return FALSE;
  						}
  					}
  
  					else {
  						const uschar *pp = eptr;
  						int len = 1;
  						for (i = min; i < max; i++) {
  							if (eptr >= md->end_subject)
  								break;
  							GETCHARLEN(c, eptr, len)
  #ifdef RC_PCRE_SUPPORT_UTF8
  								if (c > 255)
  								break;
  #endif
  							if ((data[c / 8] & (1 << (c & 7))) == 0)
  								break;
  							eptr += len;
  						}
  
  						while (eptr >= pp) {
  							if (match
  								(eptr--, ecode, offset_top, md, ims, eptrb,
  								 0))
  								return TRUE;
  
  #ifdef RC_PCRE_SUPPORT_UTF8
  							BACKCHAR(eptr)
  #endif
  						}
  						return FALSE;
  					}
  				}
  
  			case OP_CHARS:
  				{
  					register int length = ecode[1];
  					ecode += 2;
  
  					if (length > md->end_subject - eptr)
  						return FALSE;
  					if ((ims & PCRE_CASELESS) != 0) {
  						while (length-- > 0)
  							if (md->lcc[*ecode++] != md->lcc[*eptr++])
  								return FALSE;
  					}
  					else {
  						while (length-- > 0)
  							if (*ecode++ != *eptr++)
  								return FALSE;
  					}
  				}
  				break;
  
  			case OP_EXACT:
  				min = max = (ecode[1] << 8) + ecode[2];
  				ecode += 3;
  				goto REPEATCHAR;
  
  			case OP_UPTO:
  			case OP_MINUPTO:
  				min = 0;
  				max = (ecode[1] << 8) + ecode[2];
  				minimize = *ecode == OP_MINUPTO;
  				ecode += 3;
  				goto REPEATCHAR;
  
  			case OP_STAR:
  			case OP_MINSTAR:
  			case OP_PLUS:
  			case OP_MINPLUS:
  			case OP_QUERY:
  			case OP_MINQUERY:
  				c = *ecode++ - OP_STAR;
  				minimize = (c & 1) != 0;
  				min = rep_min[c];
  				max = rep_max[c];
  				if (max == 0)
  					max = INT_MAX;
  
  			  REPEATCHAR:
  				if (min > md->end_subject - eptr)
  					return FALSE;
  				c = *ecode++;
  
  				if ((ims & PCRE_CASELESS) != 0) {
  					c = md->lcc[c];
  					for (i = 1; i <= min; i++)
  						if (c != md->lcc[*eptr++])
  							return FALSE;
  					if (min == max)
  						continue;
  					if (minimize) {
  						for (i = min;; i++) {
  							if (match
  								(eptr, ecode, offset_top, md, ims, eptrb, 0))
  								return TRUE;
  							if (i >= max || eptr >= md->end_subject ||
  								c != md->lcc[*eptr++])
  								return FALSE;
  						}
  					}
  					else {
  						const uschar *pp = eptr;
  						for (i = min; i < max; i++) {
  							if (eptr >= md->end_subject
  								|| c != md->lcc[*eptr])
  								break;
  							eptr++;
  						}
  						while (eptr >= pp)
  							if (match
  								(eptr--, ecode, offset_top, md, ims, eptrb,
  								 0))
  								return TRUE;
  						return FALSE;
  					}
  				}
  
  				else {
  					for (i = 1; i <= min; i++)
  						if (c != *eptr++)
  							return FALSE;
  					if (min == max)
  						continue;
  					if (minimize) {
  						for (i = min;; i++) {
  							if (match
  								(eptr, ecode, offset_top, md, ims, eptrb, 0))
  								return TRUE;
  							if (i >= max || eptr >= md->end_subject
  								|| c != *eptr++)
  								return FALSE;
  						}
  					}
  					else {
  						const uschar *pp = eptr;
  						for (i = min; i < max; i++) {
  							if (eptr >= md->end_subject || c != *eptr)
  								break;
  							eptr++;
  						}
  						while (eptr >= pp)
  							if (match
  								(eptr--, ecode, offset_top, md, ims, eptrb,
  								 0))
  								return TRUE;
  						return FALSE;
  					}
  				}
  
  			case OP_NOT:
  				if (eptr >= md->end_subject)
  					return FALSE;
  				ecode++;
  				if ((ims & PCRE_CASELESS) != 0) {
  					if (md->lcc[*ecode++] == md->lcc[*eptr++])
  						return FALSE;
  				}
  				else {
  					if (*ecode++ == *eptr++)
  						return FALSE;
  				}
  				break;
  
  			case OP_NOTEXACT:
  				min = max = (ecode[1] << 8) + ecode[2];
  				ecode += 3;
  				goto REPEATNOTCHAR;
  
  			case OP_NOTUPTO:
  			case OP_NOTMINUPTO:
  				min = 0;
  				max = (ecode[1] << 8) + ecode[2];
  				minimize = *ecode == OP_NOTMINUPTO;
  				ecode += 3;
  				goto REPEATNOTCHAR;
  
  			case OP_NOTSTAR:
  			case OP_NOTMINSTAR:
  			case OP_NOTPLUS:
  			case OP_NOTMINPLUS:
  			case OP_NOTQUERY:
  			case OP_NOTMINQUERY:
  				c = *ecode++ - OP_NOTSTAR;
  				minimize = (c & 1) != 0;
  				min = rep_min[c];
  				max = rep_max[c];
  				if (max == 0)
  					max = INT_MAX;
  
  			  REPEATNOTCHAR:
  				if (min > md->end_subject - eptr)
  					return FALSE;
  				c = *ecode++;
  
  				if ((ims & PCRE_CASELESS) != 0) {
  					c = md->lcc[c];
  					for (i = 1; i <= min; i++)
  						if (c == md->lcc[*eptr++])
  							return FALSE;
  					if (min == max)
  						continue;
  					if (minimize) {
  						for (i = min;; i++) {
  							if (match
  								(eptr, ecode, offset_top, md, ims, eptrb, 0))
  								return TRUE;
  							if (i >= max || eptr >= md->end_subject ||
  								c == md->lcc[*eptr++])
  								return FALSE;
  						}
  					}
  					else {
  						const uschar *pp = eptr;
  						for (i = min; i < max; i++) {
  							if (eptr >= md->end_subject
  								|| c == md->lcc[*eptr])
  								break;
  							eptr++;
  						}
  						while (eptr >= pp)
  							if (match
  								(eptr--, ecode, offset_top, md, ims, eptrb,
  								 0))
  								return TRUE;
  						return FALSE;
  					}
  				}
  
  				else {
  					for (i = 1; i <= min; i++)
  						if (c == *eptr++)
  							return FALSE;
  					if (min == max)
  						continue;
  					if (minimize) {
  						for (i = min;; i++) {
  							if (match
  								(eptr, ecode, offset_top, md, ims, eptrb, 0))
  								return TRUE;
  							if (i >= max || eptr >= md->end_subject
  								|| c == *eptr++)
  								return FALSE;
  						}
  					}
  					else {
  						const uschar *pp = eptr;
  						for (i = min; i < max; i++) {
  							if (eptr >= md->end_subject || c == *eptr)
  								break;
  							eptr++;
  						}
  						while (eptr >= pp)
  							if (match
  								(eptr--, ecode, offset_top, md, ims, eptrb,
  								 0))
  								return TRUE;
  						return FALSE;
  					}
  				}
  
  			case OP_TYPEEXACT:
  				min = max = (ecode[1] << 8) + ecode[2];
  				minimize = TRUE;
  				ecode += 3;
  				goto REPEATTYPE;
  
  			case OP_TYPEUPTO:
  			case OP_TYPEMINUPTO:
  				min = 0;
  				max = (ecode[1] << 8) + ecode[2];
  				minimize = *ecode == OP_TYPEMINUPTO;
  				ecode += 3;
  				goto REPEATTYPE;
  
  			case OP_TYPESTAR:
  			case OP_TYPEMINSTAR:
  			case OP_TYPEPLUS:
  			case OP_TYPEMINPLUS:
  			case OP_TYPEQUERY:
  			case OP_TYPEMINQUERY:
  				c = *ecode++ - OP_TYPESTAR;
  				minimize = (c & 1) != 0;
  				min = rep_min[c];
  				max = rep_max[c];
  				if (max == 0)
  					max = INT_MAX;
  
  			  REPEATTYPE:
  				ctype = *ecode++;
  
  				if (min > md->end_subject - eptr)
  					return FALSE;
  				if (min > 0)
  					switch (ctype) {
  						case OP_ANY:
  #ifdef RC_PCRE_SUPPORT_UTF8
  							if (md->utf8) {
  								for (i = 1; i <= min; i++) {
  									if (eptr >= md->end_subject ||
  										(*eptr++ == '\n'
  										 && (ims & PCRE_DOTALL) == 0))
  										return FALSE;
  									while (eptr < md->end_subject
  										   && (*eptr & 0xc0) == 0x80)
  										eptr++;
  								}
  								break;
  							}
  #endif
  							if ((ims & PCRE_DOTALL) == 0) {
  								for (i = 1; i <= min; i++)
  									if (*eptr++ == '\n')
  										return FALSE;
  							}
  							else
  								eptr += min;
  							break;
  
  						case OP_NOT_DIGIT:
  							for (i = 1; i <= min; i++)
  								if ((md->ctypes[*eptr++] & ctype_digit) != 0)
  									return FALSE;
  							break;
  
  						case OP_DIGIT:
  							for (i = 1; i <= min; i++)
  								if ((md->ctypes[*eptr++] & ctype_digit) == 0)
  									return FALSE;
  							break;
  
  						case OP_NOT_WHITESPACE:
  							for (i = 1; i <= min; i++)
  								if ((md->ctypes[*eptr++] & ctype_space) != 0)
  									return FALSE;
  							break;
  
  						case OP_WHITESPACE:
  							for (i = 1; i <= min; i++)
  								if ((md->ctypes[*eptr++] & ctype_space) == 0)
  									return FALSE;
  							break;
  
  						case OP_NOT_WORDCHAR:
  							for (i = 1; i <= min; i++)
  								if ((md->ctypes[*eptr++] & ctype_word) != 0)
  									return FALSE;
  							break;
  
  						case OP_WORDCHAR:
  							for (i = 1; i <= min; i++)
  								if ((md->ctypes[*eptr++] & ctype_word) == 0)
  									return FALSE;
  							break;
  					}
  
  				if (min == max)
  					continue;
  
  				if (minimize) {
  					for (i = min;; i++) {
  						if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
  							return TRUE;
  						if (i >= max || eptr >= md->end_subject)
  							return FALSE;
  
  						c = *eptr++;
  						switch (ctype) {
  							case OP_ANY:
  								if ((ims & PCRE_DOTALL) == 0 && c == '\n')
  									return FALSE;
  #ifdef RC_PCRE_SUPPORT_UTF8
  								if (md->utf8)
  									while (eptr < md->end_subject
  										   && (*eptr & 0xc0) == 0x80)
  										eptr++;
  #endif
  								break;
  
  							case OP_NOT_DIGIT:
  								if ((md->ctypes[c] & ctype_digit) != 0)
  									return FALSE;
  								break;
  
  							case OP_DIGIT:
  								if ((md->ctypes[c] & ctype_digit) == 0)
  									return FALSE;
  								break;
  
  							case OP_NOT_WHITESPACE:
  								if ((md->ctypes[c] & ctype_space) != 0)
  									return FALSE;
  								break;
  
  							case OP_WHITESPACE:
  								if ((md->ctypes[c] & ctype_space) == 0)
  									return FALSE;
  								break;
  
  							case OP_NOT_WORDCHAR:
  								if ((md->ctypes[c] & ctype_word) != 0)
  									return FALSE;
  								break;
  
  							case OP_WORDCHAR:
  								if ((md->ctypes[c] & ctype_word) == 0)
  									return FALSE;
  								break;
  						}
  					}
  				}
  
  				else {
  					const uschar *pp = eptr;
  					switch (ctype) {
  						case OP_ANY:
  
  #ifdef RC_PCRE_SUPPORT_UTF8
  							if (md->utf8 && max < INT_MAX) {
  								if ((ims & PCRE_DOTALL) == 0) {
  									for (i = min; i < max; i++) {
  										if (eptr >= md->end_subject
  											|| *eptr++ == '\n')
  											break;
  										while (eptr < md->end_subject
  											   && (*eptr & 0xc0) == 0x80)
  											eptr++;
  									}
  								}
  								else {
  									for (i = min; i < max; i++) {
  										eptr++;
  										while (eptr < md->end_subject
  											   && (*eptr & 0xc0) == 0x80)
  											eptr++;
  									}
  								}
  								break;
  							}
  #endif
  							if ((ims & PCRE_DOTALL) == 0) {
  								for (i = min; i < max; i++) {
  									if (eptr >= md->end_subject
  										|| *eptr == '\n')
  										break;
  									eptr++;
  								}
  							}
  							else {
  								c = max - min;
  								if (c > md->end_subject - eptr)
  									c = md->end_subject - eptr;
  								eptr += c;
  							}
  							break;
  
  						case OP_NOT_DIGIT:
  							for (i = min; i < max; i++) {
  								if (eptr >= md->end_subject
  									|| (md->ctypes[*eptr] & ctype_digit) != 0)
  									break;
  								eptr++;
  							}
  							break;
  
  						case OP_DIGIT:
  							for (i = min; i < max; i++) {
  								if (eptr >= md->end_subject
  									|| (md->ctypes[*eptr] & ctype_digit) == 0)
  									break;
  								eptr++;
  							}
  							break;
  
  						case OP_NOT_WHITESPACE:
  							for (i = min; i < max; i++) {
  								if (eptr >= md->end_subject
  									|| (md->ctypes[*eptr] & ctype_space) != 0)
  									break;
  								eptr++;
  							}
  							break;
  
  						case OP_WHITESPACE:
  							for (i = min; i < max; i++) {
  								if (eptr >= md->end_subject
  									|| (md->ctypes[*eptr] & ctype_space) == 0)
  									break;
  								eptr++;
  							}
  							break;
  
  						case OP_NOT_WORDCHAR:
  							for (i = min; i < max; i++) {
  								if (eptr >= md->end_subject
  									|| (md->ctypes[*eptr] & ctype_word) != 0)
  									break;
  								eptr++;
  							}
  							break;
  
  						case OP_WORDCHAR:
  							for (i = min; i < max; i++) {
  								if (eptr >= md->end_subject
  									|| (md->ctypes[*eptr] & ctype_word) == 0)
  									break;
  								eptr++;
  							}
  							break;
  					}
  
  					while (eptr >= pp) {
  						if (match
  							(eptr--, ecode, offset_top, md, ims, eptrb, 0))
  							return TRUE;
  #ifdef RC_PCRE_SUPPORT_UTF8
  						if (md->utf8)
  							while (eptr > pp && (*eptr & 0xc0) == 0x80)
  								eptr--;
  #endif
  					}
  					return FALSE;
  				}
  
  			default:
  
  				md->errorcode = PCRE_ERROR_UNKNOWN_NODE;
  				return FALSE;
  		}
  
  	}
  }
  
  int
  pcre_exec(const pcre * external_re, const pcre_extra * external_extra,
  		  const char *subject, int length, int start_offset, int options,
  		  int *offsets, int offsetcount)
  {
  	int resetcount, ocount;
  	int first_char = -1;
  	int req_char = -1;
  	int req_char2 = -1;
  	unsigned long int ims = 0;
  	match_data match_block;
  	const uschar *start_bits = NULL;
  	const uschar *start_match = (const uschar *)subject + start_offset;
  	const uschar *end_subject;
  	const uschar *req_char_ptr = start_match - 1;
  	const pcre_st *re = (const pcre_st *)external_re;
  	const pcre_extra_st *extra = (const pcre_extra_st *)external_extra;
  	BOOL using_temporary_offsets = FALSE;
  	BOOL anchored;
  	BOOL startline;
  
  	if ((options & ~PUBLIC_EXEC_OPTIONS) != 0)
  		return PCRE_ERROR_BADOPTION;
  
  	if (re == NULL || subject == NULL || (offsets == NULL && offsetcount > 0))
  		return PCRE_ERROR_NULL;
  	if (re->magic_number != MAGIC_NUMBER)
  		return PCRE_ERROR_BADMAGIC;
  
  	anchored = ((re->options | options) & PCRE_ANCHORED) != 0;
  	startline = (re->options & PCRE_STARTLINE) != 0;
  
  	match_block.start_pattern = re->code;
  	match_block.start_subject = (const uschar *)subject;
  	match_block.end_subject = match_block.start_subject + length;
  	end_subject = match_block.end_subject;
  
  	match_block.endonly = (re->options & PCRE_DOLLAR_ENDONLY) != 0;
  	match_block.utf8 = (re->options & PCRE_UTF8) != 0;
  
  	match_block.notbol = (options & PCRE_NOTBOL) != 0;
  	match_block.noteol = (options & PCRE_NOTEOL) != 0;
  	match_block.notempty = (options & PCRE_NOTEMPTY) != 0;
  
  	match_block.errorcode = PCRE_ERROR_NOMATCH;
  
  	match_block.lcc = re->tables + lcc_offset;
  	match_block.ctypes = re->tables + ctypes_offset;
  
  	ims = re->options & (PCRE_CASELESS | PCRE_MULTILINE | PCRE_DOTALL);
  
  	ocount = offsetcount - (offsetcount % 3);
  
  	if (re->top_backref > 0 && re->top_backref >= ocount / 3) {
  		ocount = re->top_backref * 3 + 3;
  		match_block.offset_vector =
  			(int *)(pcre_malloc) (ocount * sizeof (int));
  		if (match_block.offset_vector == NULL)
  			return PCRE_ERROR_NOMEMORY;
  		using_temporary_offsets = TRUE;
  
  	}
  	else
  		match_block.offset_vector = offsets;
  
  	match_block.offset_end = ocount;
  	match_block.offset_max = (2 * ocount) / 3;
  	match_block.offset_overflow = FALSE;
  
  	resetcount = 2 + re->top_bracket * 2;
  	if (resetcount > offsetcount)
  		resetcount = ocount;
  
  	if (match_block.offset_vector != NULL) {
  		register int *iptr = match_block.offset_vector + ocount;
  		register int *iend = iptr - resetcount / 2 + 1;
  		while (--iptr >= iend)
  			*iptr = -1;
  	}
  
  	if (!anchored) {
  		if ((re->options & PCRE_FIRSTSET) != 0) {
  			first_char = re->first_char;
  			if ((ims & PCRE_CASELESS) != 0)
  				first_char = match_block.lcc[first_char];
  		}
  		else if (!startline && extra != NULL &&
  				 (extra->options & PCRE_STUDY_MAPPED) != 0)
  			start_bits = extra->start_bits;
  	}
  
  	if ((re->options & PCRE_REQCHSET) != 0) {
  		req_char = re->req_char;
  		req_char2 = ((re->options & (PCRE_CASELESS | PCRE_ICHANGED)) != 0) ?
  			(re->tables + fcc_offset)[req_char] : req_char;
  	}
  
  	do {
  		int rc;
  		register int *iptr = match_block.offset_vector;
  		register int *iend = iptr + resetcount;
  
  		while (iptr < iend)
  			*iptr++ = -1;
  
  		if (first_char >= 0) {
  			if ((ims & PCRE_CASELESS) != 0)
  				while (start_match < end_subject &&
  					   match_block.lcc[*start_match] != first_char)
  					start_match++;
  			else
  				while (start_match < end_subject
  					   && *start_match != first_char)
  					start_match++;
  		}
  
  		else if (startline) {
  			if (start_match > match_block.start_subject + start_offset) {
  				while (start_match < end_subject && start_match[-1] != '\n')
  					start_match++;
  			}
  		}
  
  		else if (start_bits != NULL) {
  			while (start_match < end_subject) {
  				register int c = *start_match;
  				if ((start_bits[c / 8] & (1 << (c & 7))) == 0)
  					start_match++;
  				else
  					break;
  			}
  		}
  
  		if (req_char >= 0) {
  			register const uschar *p =
  				start_match + ((first_char >= 0) ? 1 : 0);
  
  			if (p > req_char_ptr) {
  				if (req_char == req_char2) {
  					while (p < end_subject) {
  						if (*p++ == req_char) {
  							p--;
  							break;
  						}
  					}
  				}
  
  				else {
  					while (p < end_subject) {
  						register int pp = *p++;
  						if (pp == req_char || pp == req_char2) {
  							p--;
  							break;
  						}
  					}
  				}
  
  				if (p >= end_subject)
  					break;
  
  				req_char_ptr = p;
  			}
  		}
  
  		match_block.start_match = start_match;
  		if (!match
  			(start_match, re->code, 2, &match_block, ims, NULL,
  			 match_isgroup))
  			continue;
  
  		if (using_temporary_offsets) {
  			if (offsetcount >= 4) {
  				memcpy(offsets + 2, match_block.offset_vector + 2,
  					   (offsetcount - 2) * sizeof (int));
  
  			}
  			if (match_block.end_offset_top > offsetcount)
  				match_block.offset_overflow = TRUE;
  
  			(pcre_free) (match_block.offset_vector);
  		}
  
  		rc = match_block.offset_overflow ? 0 : match_block.end_offset_top / 2;
  
  		if (offsetcount < 2)
  			rc = 0;
  		else {
  			offsets[0] = start_match - match_block.start_subject;
  			offsets[1] =
  				match_block.end_match_ptr - match_block.start_subject;
  		}
  
  		return rc;
  	}
  
  	while (!anchored &&
  		   match_block.errorcode == PCRE_ERROR_NOMATCH &&
  		   start_match++ < end_subject);
  
  	if (using_temporary_offsets) {
  
  		(pcre_free) (match_block.offset_vector);
  	}
  
  	return match_block.errorcode;
  }
  
  static void
  set_bit(uschar * start_bits, int c, BOOL caseless, compile_data * cd)
  {
  	start_bits[c / 8] |= (1 << (c & 7));
  	if (caseless && (cd->ctypes[c] & ctype_letter) != 0)
  		start_bits[cd->fcc[c] / 8] |= (1 << (cd->fcc[c] & 7));
  }
  
  static BOOL
  set_start_bits(const uschar * code, uschar * start_bits, BOOL caseless,
  			   compile_data * cd)
  {
  	register int c;
  
  	volatile int dummy;
  
  	do {
  		const uschar *tcode = code + 3;
  		BOOL try_next = TRUE;
  
  		while (try_next) {
  			if ((int)*tcode >= OP_BRA || *tcode == OP_ASSERT) {
  				if (!set_start_bits(tcode, start_bits, caseless, cd))
  					return FALSE;
  				try_next = FALSE;
  			}
  
  			else
  				switch (*tcode) {
  					default:
  						return FALSE;
  
  					case OP_BRANUMBER:
  						tcode += 3;
  						break;
  
  					case OP_ASSERT_NOT:
  					case OP_ASSERTBACK:
  					case OP_ASSERTBACK_NOT:
  						do
  							tcode += (tcode[1] << 8) + tcode[2];
  						while (*tcode == OP_ALT);
  						tcode += 3;
  						break;
  
  					case OP_OPT:
  						caseless = (tcode[1] & PCRE_CASELESS) != 0;
  						tcode += 2;
  						break;
  
  					case OP_BRAZERO:
  					case OP_BRAMINZERO:
  						if (!set_start_bits
  							(++tcode, start_bits, caseless, cd))
  							return FALSE;
  						dummy = 1;
  						do
  							tcode += (tcode[1] << 8) + tcode[2];
  						while (*tcode == OP_ALT);
  						tcode += 3;
  						break;
  
  					case OP_STAR:
  					case OP_MINSTAR:
  					case OP_QUERY:
  					case OP_MINQUERY:
  						set_bit(start_bits, tcode[1], caseless, cd);
  						tcode += 2;
  						break;
  
  					case OP_UPTO:
  					case OP_MINUPTO:
  						set_bit(start_bits, tcode[3], caseless, cd);
  						tcode += 4;
  						break;
  
  					case OP_EXACT:
  						tcode++;
  
  					case OP_CHARS:
  						tcode++;
  
  					case OP_PLUS:
  					case OP_MINPLUS:
  						set_bit(start_bits, tcode[1], caseless, cd);
  						try_next = FALSE;
  						break;
  
  					case OP_NOT_DIGIT:
  						for (c = 0; c < 32; c++)
  							start_bits[c] |= ~cd->cbits[c + cbit_digit];
  						try_next = FALSE;
  						break;
  
  					case OP_DIGIT:
  						for (c = 0; c < 32; c++)
  							start_bits[c] |= cd->cbits[c + cbit_digit];
  						try_next = FALSE;
  						break;
  
  					case OP_NOT_WHITESPACE:
  						for (c = 0; c < 32; c++)
  							start_bits[c] |= ~cd->cbits[c + cbit_space];
  						try_next = FALSE;
  						break;
  
  					case OP_WHITESPACE:
  						for (c = 0; c < 32; c++)
  							start_bits[c] |= cd->cbits[c + cbit_space];
  						try_next = FALSE;
  						break;
  
  					case OP_NOT_WORDCHAR:
  						for (c = 0; c < 32; c++)
  							start_bits[c] |= ~cd->cbits[c + cbit_word];
  						try_next = FALSE;
  						break;
  
  					case OP_WORDCHAR:
  						for (c = 0; c < 32; c++)
  							start_bits[c] |= cd->cbits[c + cbit_word];
  						try_next = FALSE;
  						break;
  
  					case OP_TYPEPLUS:
  					case OP_TYPEMINPLUS:
  						tcode++;
  						break;
  
  					case OP_TYPEEXACT:
  						tcode += 3;
  						break;
  
  					case OP_TYPEUPTO:
  					case OP_TYPEMINUPTO:
  						tcode += 2;
  
  					case OP_TYPESTAR:
  					case OP_TYPEMINSTAR:
  					case OP_TYPEQUERY:
  					case OP_TYPEMINQUERY:
  						switch (tcode[1]) {
  							case OP_NOT_DIGIT:
  								for (c = 0; c < 32; c++)
  									start_bits[c] |=
  										~cd->cbits[c + cbit_digit];
  								break;
  
  							case OP_DIGIT:
  								for (c = 0; c < 32; c++)
  									start_bits[c] |=
  										cd->cbits[c + cbit_digit];
  								break;
  
  							case OP_NOT_WHITESPACE:
  								for (c = 0; c < 32; c++)
  									start_bits[c] |=
  										~cd->cbits[c + cbit_space];
  								break;
  
  							case OP_WHITESPACE:
  								for (c = 0; c < 32; c++)
  									start_bits[c] |=
  										cd->cbits[c + cbit_space];
  								break;
  
  							case OP_NOT_WORDCHAR:
  								for (c = 0; c < 32; c++)
  									start_bits[c] |=
  										~cd->cbits[c + cbit_word];
  								break;
  
  							case OP_WORDCHAR:
  								for (c = 0; c < 32; c++)
  									start_bits[c] |= cd->cbits[c + cbit_word];
  								break;
  						}
  
  						tcode += 2;
  						break;
  
  					case OP_CLASS:
  						{
  							tcode++;
  							for (c = 0; c < 32; c++)
  								start_bits[c] |= tcode[c];
  							tcode += 32;
  							switch (*tcode) {
  								case OP_CRSTAR:
  								case OP_CRMINSTAR:
  								case OP_CRQUERY:
  								case OP_CRMINQUERY:
  									tcode++;
  									break;
  
  								case OP_CRRANGE:
  								case OP_CRMINRANGE:
  									if (((tcode[1] << 8) + tcode[2]) == 0)
  										tcode += 5;
  									else
  										try_next = FALSE;
  									break;
  
  								default:
  									try_next = FALSE;
  									break;
  							}
  						}
  						break;
  
  				}
  		}
  
  		code += (code[1] << 8) + code[2];
  	}
  	while (*code == OP_ALT);
  	return TRUE;
  }
  
  pcre_extra *pcre_study(const pcre * external_re, int options,
  					   const char **errorptr)
  {
  	uschar start_bits[32];
  	pcre_extra_st *extra;
  	const pcre_st *re = (const pcre_st *)external_re;
  	compile_data compile_block;
  
  	*errorptr = NULL;
  
  	if (re == NULL || re->magic_number != MAGIC_NUMBER) {
  		*errorptr = "argument is not a compiled regular expression";
  		return NULL;
  	}
  
  	if ((options & ~PUBLIC_STUDY_OPTIONS) != 0) {
  		*errorptr = "unknown or incorrect option bit(s) set";
  		return NULL;
  	}
  
  	if ((re->options & (PCRE_ANCHORED | PCRE_FIRSTSET | PCRE_STARTLINE)) != 0)
  		return NULL;
  
  	compile_block.lcc = re->tables + lcc_offset;
  	compile_block.fcc = re->tables + fcc_offset;
  	compile_block.cbits = re->tables + cbits_offset;
  	compile_block.ctypes = re->tables + ctypes_offset;
  
  	memset(start_bits, 0, 32 * sizeof (uschar));
  	if (!set_start_bits
  		(re->code, start_bits, (re->options & PCRE_CASELESS) != 0,
  		 &compile_block))
  		return NULL;
  
  	extra = (pcre_extra_st *) (pcre_malloc) (sizeof (pcre_extra_st));
  
  	if (extra == NULL) {
  		*errorptr = "failed to get memory";
  		return NULL;
  	}
  
  	extra->options = PCRE_STUDY_MAPPED;
  	memcpy(extra->start_bits, start_bits, sizeof (start_bits));
  
  	return (pcre_extra *) extra;
  }
  
  int
  pcre_copy_substring(const char *subject, int *ovector, int stringcount,
  					int stringnumber, char *buffer, int size)
  {
  	int yield;
  	if (stringnumber < 0 || stringnumber >= stringcount)
  		return PCRE_ERROR_NOSUBSTRING;
  	stringnumber *= 2;
  	yield = ovector[stringnumber + 1] - ovector[stringnumber];
  	if (size < yield + 1)
  		return PCRE_ERROR_NOMEMORY;
  	memcpy(buffer, subject + ovector[stringnumber], yield);
  	buffer[yield] = 0;
  	return yield;
  }
  
  int
  pcre_get_substring_list(const char *subject, int *ovector, int stringcount,
  						const char ***listptr)
  {
  	int i;
  	int size = sizeof (char *);
  	int double_count = stringcount * 2;
  	char **stringlist;
  	char *p;
  
  	for (i = 0; i < double_count; i += 2)
  		size += sizeof (char *) + ovector[i + 1] - ovector[i] + 1;
  
  	stringlist = (char **)(pcre_malloc) (size);
  	if (stringlist == NULL)
  		return PCRE_ERROR_NOMEMORY;
  
  	*listptr = (const char **)stringlist;
  	p = (char *)(stringlist + stringcount + 1);
  
  	for (i = 0; i < double_count; i += 2) {
  		int len = ovector[i + 1] - ovector[i];
  		memcpy(p, subject + ovector[i], len);
  		*stringlist++ = p;
  		p += len;
  		*p++ = 0;
  	}
  
  	*stringlist = NULL;
  	return 0;
  }
  
  void pcre_free_substring_list(const char **pointer)
  {
  	(pcre_free) ((void *)pointer);
  }
  
  int
  pcre_get_substring(const char *subject, int *ovector, int stringcount,
  				   int stringnumber, const char **stringptr)
  {
  	int yield;
  	char *substring;
  	if (stringnumber < 0 || stringnumber >= stringcount)
  		return PCRE_ERROR_NOSUBSTRING;
  	stringnumber *= 2;
  	yield = ovector[stringnumber + 1] - ovector[stringnumber];
  	substring = (char *)(pcre_malloc) (yield + 1);
  	if (substring == NULL)
  		return PCRE_ERROR_NOMEMORY;
  	memcpy(substring, subject + ovector[stringnumber], yield);
  	substring[yield] = 0;
  	*stringptr = substring;
  	return yield;
  }
  
  void pcre_free_substring(const char *pointer)
  {
  	(pcre_free) ((void *)pointer);
  }
  
  #endif
  
  const unsigned char *pcre_maketables(void)
  {
  	unsigned char *yield, *p;
  	int i;
  
  #ifndef RC_PCRE_TAB
  	yield = (unsigned char *)(pcre_malloc) (tables_length);
  #else
  	yield = (unsigned char *)malloc(tables_length);
  #endif
  
  	if (yield == NULL)
  		return NULL;
  	p = yield;
  
  	for (i = 0; i < 256; i++)
  		*p++ = tolower(i);
  
  	for (i = 0; i < 256; i++)
  		*p++ = islower(i) ? toupper(i) : tolower(i);
  
  	memset(p, 0, cbit_length);
  	for (i = 0; i < 256; i++) {
  		if (isdigit(i)) {
  			p[cbit_digit + i / 8] |= 1 << (i & 7);
  			p[cbit_word + i / 8] |= 1 << (i & 7);
  		}
  		if (isupper(i)) {
  			p[cbit_upper + i / 8] |= 1 << (i & 7);
  			p[cbit_word + i / 8] |= 1 << (i & 7);
  		}
  		if (islower(i)) {
  			p[cbit_lower + i / 8] |= 1 << (i & 7);
  			p[cbit_word + i / 8] |= 1 << (i & 7);
  		}
  		if (i == '_')
  			p[cbit_word + i / 8] |= 1 << (i & 7);
  		if (isspace(i))
  			p[cbit_space + i / 8] |= 1 << (i & 7);
  		if (isxdigit(i))
  			p[cbit_xdigit + i / 8] |= 1 << (i & 7);
  		if (isgraph(i))
  			p[cbit_graph + i / 8] |= 1 << (i & 7);
  		if (isprint(i))
  			p[cbit_print + i / 8] |= 1 << (i & 7);
  		if (ispunct(i))
  			p[cbit_punct + i / 8] |= 1 << (i & 7);
  		if (iscntrl(i))
  			p[cbit_cntrl + i / 8] |= 1 << (i & 7);
  	}
  	p += cbit_length;
  
  	for (i = 0; i < 256; i++) {
  		int x = 0;
  		if (isspace(i))
  			x += ctype_space;
  		if (isalpha(i))
  			x += ctype_letter;
  		if (isdigit(i))
  			x += ctype_digit;
  		if (isxdigit(i))
  			x += ctype_xdigit;
  		if (isalnum(i) || i == '_')
  			x += ctype_word;
  		if (strchr("*+?{^.$|()[", i) != 0)
  			x += ctype_meta;
  		*p++ = x;
  	}
  
  	return yield;
  }
  
  #ifdef RC_PCRE_TAB
  
  #include <ctype.h>
  #include <stdio.h>
  #include <string.h>
  
  int main(void)
  {
  	int i;
  	const unsigned char *tables = pcre_maketables();
  
  	printf("/*************************************************\n"
  		   "*      Perl-Compatible Regular Expressions       *\n"
  		   "*************************************************/\n\n"
  		   "static unsigned char pcre_default_tables[] = {\n\n"
  		   "/* This table is a lower casing table. */\n\n");
  
  	printf("  ");
  	for (i = 0; i < 256; i++) {
  		if ((i & 7) == 0 && i != 0)
  			printf("\n  ");
  		printf("%3d", *tables++);
  		if (i != 255)
  			printf(",");
  	}
  	printf(",\n\n");
  
  	printf("/* This table is a case flipping table. */\n\n");
  
  	printf("  ");
  	for (i = 0; i < 256; i++) {
  		if ((i & 7) == 0 && i != 0)
  			printf("\n  ");
  		printf("%3d", *tables++);
  		if (i != 255)
  			printf(",");
  	}
  	printf(",\n\n");
  
  	printf("/* This table contains bit maps for various character classes.\n"
  		   "Each map is 32 bytes long and the bits run from the least\n"
  		   "significant end of each byte. The classes that have their own\n"
  		   "maps are: space, xdigit, digit, upper, lower, word, graph\n"
  		   "print, punct, and cntrl. Other classes are built from combinations. */\n\n");
  
  	printf("  ");
  	for (i = 0; i < cbit_length; i++) {
  		if ((i & 7) == 0 && i != 0) {
  			if ((i & 31) == 0)
  				printf("\n");
  			printf("\n  ");
  		}
  		printf("0x%02x", *tables++);
  		if (i != cbit_length - 1)
  			printf(",");
  	}
  	printf(",\n\n");
  
  	printf
  		("/* This table identifies various classes of character by individual bits:\n"
  		 "  0x%02x   white space character\n" "  0x%02x   letter\n"
  		 "  0x%02x   decimal digit\n" "  0x%02x   hexadecimal digit\n"
  		 "  0x%02x   alphanumeric or '_'\n"
  		 "  0x%02x   regular expression metacharacter or binary zero\n*/\n\n",
  		 ctype_space, ctype_letter, ctype_digit, ctype_xdigit, ctype_word,
  		 ctype_meta);
  
  	printf("  ");
  	for (i = 0; i < 256; i++) {
  		if ((i & 7) == 0 && i != 0) {
  			printf(" \n  ");
  		}
  		printf("0x%02x", *tables++);
  		if (i != 255)
  			printf(",");
  	}
  
  	printf("};\n\n\n");
  
  	return 0;
  }
  
  #endif
  Index: ossp-pkg/rc/rc_pcre.h
  ============================================================
  $ cvs update -p -r1.1 rc_pcre.h
  /*
   *  Perl Compatible Regular Expression (PCRE) Library
   *  Copyright (c) 1997-2001 Philip Hazel <ph10@cam.ac.uk>
   *  Copyright (c) 1997-2001 University of Cambridge
   *
   *  DO NOT EDIT THIS FILE, IT WAS AUTOMATICALLY GENERATED!
   *
   *  This is an automatically generated, extremely stripped down
   *  version of the PCRE 3.9 library from the Philip Hazel.
   *  This version is still distributed under the same original PCRE
   *  Open Source license, but Philip Hazel is no longer responsible
   *  for this version.
   */
  
  /*
  This is a library of functions to support regular expressions whose syntax
  and semantics are as close as possible to those of the Perl 5 language. See
  the file Tech.Notes for some information on the internals.
  
  Written by: Philip Hazel <ph10@cam.ac.uk>
  
             Copyright (c) 1997-2001 University of Cambridge
  
  -----------------------------------------------------------------------------
  Permission is granted to anyone to use this software for any purpose on any
  computer system, and to redistribute it freely, subject to the following
  restrictions:
  
  1. This software is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  
  2. The origin of this software must not be misrepresented, either by
     explicit claim or by omission.
  
  3. Altered versions must be plainly marked as such, and must not be
     misrepresented as being the original software.
  
  4. If PCRE is embedded in any software that is released under the GNU
     General Purpose Licence (GPL), then the terms of that licence shall
     supersede any condition above with which it is incompatible.
  -----------------------------------------------------------------------------
  */
  
  #ifndef __RC_PCRE_H__
  #define __RC_PCRE_H__
  
  #define PCRE_PREFIX RC_
  
  #define PCRE_MAJOR          3
  #define PCRE_MINOR          9
  #define PCRE_DATE           02-Jan-2002
  
  #ifdef PCRE_PREFIX
  #if defined(__STDC__) || defined(__cplusplus)
  #define __PCRE_CONCAT(x,y) x ## y
  #define PCRE_CONCAT(x,y) __PCRE_CONCAT(x,y)
  #else
  #define __PCRE_CONCAT(x) x
  #define PCRE_CONCAT(x,y) __PCRE_CONCAT(x)y
  #endif
  #define pcre_malloc PCRE_CONCAT(PCRE_PREFIX,pcre_malloc)
  #define pcre_free PCRE_CONCAT(PCRE_PREFIX,pcre_free)
  #define pcre_compile PCRE_CONCAT(PCRE_PREFIX,pcre_compile)
  #define pcre_copy_substring PCRE_CONCAT(PCRE_PREFIX,pcre_copy_substring)
  #define pcre_exec PCRE_CONCAT(PCRE_PREFIX,pcre_exec)
  #define pcre_free_substring PCRE_CONCAT(PCRE_PREFIX,pcre_free_substring)
  #define pcre_free_substring_list PCRE_CONCAT(PCRE_PREFIX,pcre_free_substring_list)
  #define pcre_get_substring PCRE_CONCAT(PCRE_PREFIX,pcre_get_substring)
  #define pcre_get_substring_list PCRE_CONCAT(PCRE_PREFIX,pcre_get_substring_list)
  #define pcre_info PCRE_CONCAT(PCRE_PREFIX,pcre_info)
  #define pcre_fullinfo PCRE_CONCAT(PCRE_PREFIX,pcre_fullinfo)
  #define pcre_maketables PCRE_CONCAT(PCRE_PREFIX,pcre_maketables)
  #define pcre_study PCRE_CONCAT(PCRE_PREFIX,pcre_study)
  #define pcre_version PCRE_CONCAT(PCRE_PREFIX,pcre_version)
  #endif
  
  #include <stdlib.h>
  
  #ifdef __cplusplus
  extern "C" {
  #endif
  
  #define PCRE_CASELESS        0x0001
  #define PCRE_MULTILINE       0x0002
  #define PCRE_DOTALL          0x0004
  #define PCRE_EXTENDED        0x0008
  #define PCRE_ANCHORED        0x0010
  #define PCRE_DOLLAR_ENDONLY  0x0020
  #define PCRE_EXTRA           0x0040
  #define PCRE_NOTBOL          0x0080
  #define PCRE_NOTEOL          0x0100
  #define PCRE_UNGREEDY        0x0200
  #define PCRE_NOTEMPTY        0x0400
  #define PCRE_UTF8            0x0800
  
  #define PCRE_ERROR_NOMATCH        (-1)
  #define PCRE_ERROR_NULL           (-2)
  #define PCRE_ERROR_BADOPTION      (-3)
  #define PCRE_ERROR_BADMAGIC       (-4)
  #define PCRE_ERROR_UNKNOWN_NODE   (-5)
  #define PCRE_ERROR_NOMEMORY       (-6)
  #define PCRE_ERROR_NOSUBSTRING    (-7)
  
  #define PCRE_INFO_OPTIONS         0
  #define PCRE_INFO_SIZE            1
  #define PCRE_INFO_CAPTURECOUNT    2
  #define PCRE_INFO_BACKREFMAX      3
  #define PCRE_INFO_FIRSTCHAR       4
  #define PCRE_INFO_FIRSTTABLE      5
  #define PCRE_INFO_LASTLITERAL     6
  
  struct pcre_st;
  struct pcre_extra_st;
  
  typedef struct pcre_st pcre;
  typedef struct pcre_extra_st pcre_extra;
  
  extern void *(*pcre_malloc)(size_t);
  extern void  (*pcre_free)(void *);
  
  extern pcre *pcre_compile(const char *, int, const char **, int *,
                const unsigned char *);
  extern int  pcre_copy_substring(const char *, int *, int, int, char *, int);
  extern int  pcre_exec(const pcre *, const pcre_extra *, const char *,
                int, int, int, int *, int);
  extern void pcre_free_substring(const char *);
  extern void pcre_free_substring_list(const char **);
  extern int  pcre_get_substring(const char *, int *, int, int, const char **);
  extern int  pcre_get_substring_list(const char *, int *, int, const char ***);
  extern int  pcre_info(const pcre *, int *, int *);
  extern int  pcre_fullinfo(const pcre *, const pcre_extra *, int, void *);
  extern const unsigned char *pcre_maketables(void);
  extern pcre_extra *pcre_study(const pcre *, int, const char **);
  extern const char *pcre_version(void);
  
  #ifdef __cplusplus
  }
  #endif
  
  #endif

From ossp-cvs-owner@ossp.org  Tue Jan 29 08:31:12 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B810076500; Tue, 29 Jan 2002 08:31:11 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.pod
Message-Id: <20020129073111.B810076500@mail.ossp.org>
Date: Tue, 29 Jan 2002 08:31:11 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   29-Jan-2002 08:31:11
  Branch: HEAD                             Handle: 2002012907311100

  Modified files:
    ossp-pkg/rc             rc.pod

  Log:
    set administrative lock

  Summary:
    Revision    Changes     Path
    1.20        +4  -0      ossp-pkg/rc/rc.pod
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.pod
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 rc.pod
  --- ossp-pkg/rc/rc.pod	28 Jan 2002 16:01:23 -0000	1.19
  +++ ossp-pkg/rc/rc.pod	29 Jan 2002 07:31:11 -0000	1.20
  @@ -1,3 +1,7 @@
  +--------------------------------------------------------------------------------
  +DO NOT EDIT. MAJOR REWRITES JOINING OPTIONS, NOTES AND DEFAULTS IN PROGRESS. THL
  +--------------------------------------------------------------------------------
  +
   ##
   ##  rc.pod -- OSSP Run Command Processor (Manual Page)
   ##  Copyright (c) 2000-2002 Cable & Wireless Deutschland GmbH

From ossp-cvs-owner@ossp.org  Tue Jan 29 09:42:20 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 87FD376500; Tue, 29 Jan 2002 09:42:20 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.pod
Message-Id: <20020129084220.87FD376500@mail.ossp.org>
Date: Tue, 29 Jan 2002 09:42:20 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   29-Jan-2002 09:42:20
  Branch: HEAD                             Handle: 2002012908422000

  Modified files:
    ossp-pkg/rc             rc.pod

  Log:
    unlock

  Summary:
    Revision    Changes     Path
    1.21        +85 -297    ossp-pkg/rc/rc.pod
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.pod
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 rc.pod
  --- ossp-pkg/rc/rc.pod	29 Jan 2002 07:31:11 -0000	1.20
  +++ ossp-pkg/rc/rc.pod	29 Jan 2002 08:42:20 -0000	1.21
  @@ -1,7 +1,3 @@
  ---------------------------------------------------------------------------------
  -DO NOT EDIT. MAJOR REWRITES JOINING OPTIONS, NOTES AND DEFAULTS IN PROGRESS. THL
  ---------------------------------------------------------------------------------
  -
   ##
   ##  rc.pod -- OSSP Run Command Processor (Manual Page)
   ##  Copyright (c) 2000-2002 Cable & Wireless Deutschland GmbH
  @@ -41,64 +37,27 @@
   
   =over 4
   
  -=item B<General>
  -
   @l_prefix@/etc/rc
  -[B<-c>|B<--conf> I<file>[C<:>I<file>[...]]] 
  -[B<-t>|B<--tmp> I<dir>]
  -[B<-r>|B<--raw>]
  -[B<-v>|B<--verbose>] 
  +[B<-?>|B<--usage>]
   [B<-D>|B<--debug>] 
  -
  -=item B<Run-Command Execution>
  -
  -@l_prefix@/etc/rc
  -[I<General options>]
  -[B<-x>|B<--exec>] 
  -[B<-p>|B<--print>] 
  -[B<-e>|B<--eval>] 
  -[B<-d>|B<--dirs> I<dir>[C<:>I<dir>[...]] 
  -[B<-f>|B<--func> I<file>[C<:>I<file>[...]]] 
   [B<-F>|B<--force>]
  +[B<-V>|B<--version>]
  +[B<-c>|B<--conf> I<file>[C<:>I<file>[...]]]
  +[B<-d>|B<--dirs> I<dir>[C<:>I<dir>[...]]]
  +[B<-e>|B<--eval>]
  +[B<-f>|B<--func> I<file>[C<:>I<file>[...]]] 
  +[B<-h>|B<--help>]
  +[B<-i>|B<--info>] 
  +[B<-l>|B<--labels>]
  +[B<-p>|B<--print>]
  +[B<-q>|B<--query>] I<format>
  +[B<-s>|B<--silent>]
  +[B<-r>|B<--raw>]
  +[B<-t>|B<--tmp> I<dir>]
  +[B<-v>|B<--verbose>]
  +[B<-x>|B<--exec>] 
   I<rcfile>
   I<section>
  -[I<section> ...]
  -
  -=item B<Configuration Query>
  -
  -@l_prefix@/etc/rc
  -[I<General options>]
  -B<-q>|B<--query> I<format>
  -[B<-d>|B<--dirs> I<dir>[C<:>I<dir>[...]] 
  -[B<-F>|B<--force>]
  -I<rcfile>
  -
  -=item B<Looking up available labels>
  -
  -[I<General options>]
  -<-l>|<--labels>
  -[B<-d>|B<--dirs> I<dir>[C<:>I<dir>[...]] 
  -[B<-F>|B<--force>]
  -I<rcfile>
  -
  -# FIXME Ralf, what's that?
  -# @l_prefix@/etc/rc
  -# [I<parameter-options>]
  -# [B<-c>|B<--conf>] 
  -# [I<package>]
  -
  -=item B<Facility Information>
  -
  -@l_prefix@/etc/rc
  -[I<General options>]
  -[B<-i>|B<--info>] 
  -
  -=item B<Other>
  -
  -@l_prefix@/etc/rc
  -[B<-?>|B<--usage>]
  -[B<-h>|B<--help>]
  -[B<-V>|B<--version>]
   
   =back 4
   
  @@ -106,272 +65,135 @@
   
   =over 4
   
  -OSSP rc is a run command processor. It's primary function is to  scan F<rcfile>
  -script files for B<section>(s) identified by corresponding label(s) and run the
  -commands in the section(s).
  -
  -The run command processor can also only print the commands without executing
  -them or reformat them to C<eval> input. The F<rcfile> files contain variables
  -and the command processor has functionality to query their default, set and
  -effective values.
  -
  -To understand the structure and syntax of F<rcfile> script files, an example
  -called F<rc.example> is included in the distribution.  The rc environment and
  -behaviour is very configurable, so the syntax may vary and not match exactly
  -the example provided.
  +OSSP rc is a run command processor. It's primary function is to  scan
  +F<rcfile> script files for B<section>(s) and run the commands listed in the
  +section(s).
  +
  +The run command processor can alternatively print the commands in human
  +readable format or reformat them for shell C<eval> input without executing
  +them. The F<rcfile> files contain variables and the command processor has
  +functionality to query their default, set and effective values.
  +
  +The structure of the F<rcfile>s is simple but the syntax is highly
  +configurable.  A F<rcfile> is divided into B<section>s and each of them is
  +identified by a label build from the B<section> name.  The distribution
  +contains various examples.
   
   With a single call to rc usually one F<rcfile> may be processed at, although
  -many sections can be given to source their corresponding commands, see
  -EXAMPLES below.
  -
  -There is one exception to this rule in which an rc keyword named `all' is
  -reserved to mean `all F<rcfile>s.' The user may thus give the `all' wildcard
  -in place of the C<rcfile> parameter to process the commands from the given
  -sections of all C<rcfile>s found.
  -
  -#THL! does "all stop start" mean "a stop stop, a start, b start" or " a stop,
  -#a start, b stop, b start"?
  -#Prioritaeten
  -
  -#Using the `all' wildcard may be risky in some cases, because successful
  -#performance then depends not only on the code written into each program's
  -#sections but also if every single program found has the named section label at
  -#all. For information about the rc exit status after such an operation see
  -#`DIAGNOSTICS.'
  +many sections can be passed which are executed in given order.  The only
  +exception to this rule is when the reserved keyword `all' is used as F<rcfile>
  +meaning `all F<rcfile>s.'
   
   =back 4
   
   =head1 OPTIONS
   
   =over 4
  +=item B<-?>|B<--usage>
   
  -Inclusive options which may be used with another
  -
  -=item B<-c>, B<--conf> F<file>
  -
  -specify the location of the configuration file.
  -
  -=item B<-f>, B<--func> F<file>[C<:>F<file>[...]]
  -
  -specify the location of one or more optional function files, containing
  -commands which are prepended to the sections of their corresponding
  -C<rcfile>s.
  -
  -=item B<-F>, B<--force>
  -
  -Disable ${OSSP_RC_PREFIX} and ${OSSP_RC_SUFFIX} expansion on F<rcfile>.
  -Disable searching for F<rcfile>. This mode assumes F<rcfile> is a filename. It
  -is automagically entered when the F<rcfile> matches the regex '^\.{0,2}/'.
  -
  -=item B<-d>, B<--dirs> I<dir>[C<:>I<dir>[...]
  -
  -override OSSP_RC_DIRS, and use these paths to search for F<rcfile>s instead.
  -
  -=item B<-t>, B<--tmpdir> I<dir>
  -
  -specify the location of the temporary directory
  -
  -=item B<-v>, B<--verbose>
  -
  -verbosely report processing, including all warnings
  -
  -=item B<-s>, B<--silent>
  -
  -be silent, and disable output
  +print short usage summary, then exit.
   
  -=item B<-D>, B<--debug>
  +=item B<-D>|B<--debug>
   
   don't remove temporary files, and output debug messages to stderr
   
  -=item B<-r>, B<--raw>
  +=item B<-F>|B<--force>
   
  -output text using no terminal control sequences
  +Usually F<rcfile> is a fraction of a filename and the run command facility
  +prefixes this name with ${OSSP_RC_PREFIX} and appends ${OSSP_RC_SUFFIX} to it,
  +then searches the file in directories given using --dirs.  If the initial
  +F<rcfile> matches the regex '^\.{0,2}/', --force is automagically assumed.
   
  -=back 4
  -
  -Mutually exclusive options, i.e. only a single one can be given
  -
  -=over 4
  -
  -=item B<-h>, B<--help>
  -
  -print this help, then exit
  -
  -=item B<-?>, B<--usage>
  -
  -print short usage summary, then exit.
  -
  -=item B<-V>, B<--version>
  +=item B<-V>|B<--version>
   
   print version and copyright, then exit
   
  -=item B<-p>, B<--print>
  +=item B<-c>|B<--conf> I<file>[C<:>I<file>[...]]
   
  -output the commands as they would by seen by the command interpreter, but do
  -not run them.
  +specify the location of the configuration file.  If omitted, the fallback is
  +to look for C<$OSSP_RC_CONF>, and "@l_prefix@/etc/rc.conf", in that order.
   
  -=item B<-e>, B<--eval>
  +=item B<-d>|B<--dirs> I<dir>[C<:>I<dir>[...]]
   
  -output the text for a command suitable for shell evaluation, but do not run
  -it.
  +directories to search for F<rcfile>s.
   
  -=item B<-x>, B<--exec>
  +=item B<-e>|B<--eval>
   
  -execute the command interpreter in a subprocess and actually run the commands.
  +output the commands text in a format suitable for shell evaluation, but do not run it.
   
  -=item B<-q>, B<--query>
  +=item B<-f>|B<--func> I<file>[C<:>I<file>[...]]
   
  -print the value(s) of rc configuration variables defined in the %config section.
  +specify the location of one or more optional function files. They act like
  +libraries, containing commands which are prepended to the sections of their
  +corresponding C<rcfile>s just before execution.
   
  -=item B<-l>, B<--labels>
  +=item B<-h>|B<--help>
   
  -learn what section labels a F<rcfile> offers.
  +print this help, then exit
   
  -=item B<-i>, B<--info>
  +=item B<-i>|B<--info>
   
   print a comprehensive summary of the rc environment
   
  -=back 4
  -
  -=head1 NOTES
  -
  -=over 4
  +=item B<-l>|B<--labels>
   
  -=item B<-h>, B<--help>, B<-V>, B<--version>, B<-v>, B<--verbose>, and B<-q>
  -B<--silent>
  +learn what section labels a F<rcfile> offers.
   
  -The B<--help>, B<--version>, B<--verbose>, and B<--silent> options are used to
  -control the screen output of B<rc> and control the general output of all
  -sections found in the F<rcfile>s as well. For example, specifying
  -B<--silent> will mute B<rc>'s output and also all command output that B<rc>
  -runs.
  -
  -=item B<-r>, B<--raw> I<dir>
  -
  -The option B<-r> or B<--raw> turns on raw output mode. In this case, no
  -formatting is done to the screen output. This mode is different from formatted
  -output mode, in which the output is annotated with terminal control sequences
  -for better readability.
  -
  -=item B<-t>, B<--tmp> I<dir>
  -
  -Specifying this option will force B<rc> to use the given temporary
  -directory I<dir> for all its temporary output. 
  -
  -=item B<-e>, B<--eval> and B<-p>, B<--print>
  -
  -With the B<--eval> or B<--print> options, the run command will not be
  -executed. Rather, B<rc> will print a command suitable for later evaluation in
  -the current shell. Given alone, this option will cause B<rc> to not execute
  -the run command. Used together with B<--exec>, B<rc> will execute the run
  -command and print a similar command for later execution as well. The B<--eval>
  -option cannot be used together with B<--print>, because of conflicting output
  -and the way that B<rc> constructs the evaluation text. Specifically, most
  -Bourne shells and derivatives report errors with commands spanning multiple
  -lines.
  -
  -Consider using the B<--eval> option for batch evaluation with the Bourne shell
  -C<eval> command. Use the B<--print> option for better human readability. See
  -`EXAMPLES' for an example.
  -
  -=item B<-x>, B<--exec>
  -
  -The B<--exec> is the most common option of all, in which B<rc> executes a run command
  -made up of a given program and section. Options controlling the flow of
  -execution include B<--print>, B<--eval>, and B<--exec>.
  -
  -=item B<-q>, B<--query>
  -
  -The B<--query> option queries the I<effective> value of one or more
  -configuration variables. These variables are set in the C<%config> section of
  -the corresponding F<rcfile>. The B<--query> option reports the
  -I<effective> value, and not necessarily that written in the F<rcfile>
  -file, which can be overridden by variable settings in the F<rc.env> file.
  -
  -Used with the B<--query> option, B<rc> will expect exactly one command line
  -argument to follow. This must be a I<format> string containing arbitrary text
  -and optionally one or more B<OSSP var> variable specifications
  -("C<${>I<name>C<}>" in its simplest form.)
  -!FIXME what is var here!
  +=item B<-p>|B<--print>
   
  -=back 4
  +output the commands text in a format suitable for human reading, but do not run it.
   
  -=head1 DEFAULT VALUES
  +=item B<-q>|B<--query> I<format>
   
  -=over 4
  +query the effective value of configuration variables from the %config section
  +and print them using the I<format> string specified in RPM style.
   
  -In B<OSSP rc>, all options have a reasonable default value. This allows for a
  -configurationless B<rc> installation.
  +=item B<-r>|B<--raw>
   
  -=item B<-r>, B<--raw>
  +output text using no terminal control sequences.  The rc facility usually
  +tries to improve output text for human readability using terminal control
  +sequences for color, bold and italic rendering.  The default is determines at
  +runtime and is automagically disabled if stdout is detached from a terminal.
   
  -The B<--raw> option determines its default at runtime. If the raw mode option
  -is not specified, B<rc> will determine whether F<stdout> is connected to a
  -terminal.  If so, B<rc> will run in formatted output mode. If F<stdout> is not
  -connected to a terminal (such as with most daemons,) B<rc> will run in raw
  -output mode even though it was not specified as an option.
  +=item B<-s>|B<--silent>
   
  -=item B<-t>, B<--tmpdir> I<dir>
  -
  -If the B<--dirs> option is not given, B<rc> will try to use C<$TMPDIR>,
  -C<$TEMPDIR>, C<~/tmp> and C</tmp> (in that order.)
  +be silent, and disable output
   
  -=item B<-p>, B<--print>, B<-e>, B<--eval>, B<-x>, B<--exec>
  +=item B<-t>|B<--tmp> I<dir>
   
  -If neither B<--print>, B<--eval>, or B<­-exec> is given B<rc> will default to
  -B<--exec>.
  +specify the location of the temporary directory.  If omitted, the fallback is
  +to look for C<$TMPDIR>, C<$TMPDIR>, try using C<~/tmp> and C</tmp>, in that
  +order.
   
  -=item B<-c>, B<--conf> F<file>
  +=item B<-v>|B<--verbose>
   
  -Using F<file> from command line option -c aka --conf, fallback to
  -${OSSP_RC_CONF}, fallback to "@l_prefix@/etc/rc.conf".
  +be verbose, output what's going on.
   
  -=item B<-f>, B<--func> F<file>[C<:>F<file>[...]]
  -=item B<-F>, B<--force>
  -=item B<-d>, B<--dirs> I<dir>[C<:>I<dir>[...]
  +=item B<-x>|B<--exec>
   
  -#!FIXME! Sprech mal von Pfad und Dateien defaults wieviel rc.conf erlaubt
  -#!FIXME! sind, und welche genommen wird oder sonst wie gemerged.
  +execute the command interpreter in a subprocess and actually run the commands.
  +If neither B<--print>, B<--eval>, or B<­-exec> is given, the default is
  +B<--exec> anyway.
   
  -F<rc.conf>
  -F<rc.func>
  -F<rc.env>
  -F<rcfile>
  +=back 4
   
   =head1 ENVIRONMENT
   
   =over 4
   
  -Every command line longoption is also a keyword in the rc.conf file and,
  +Every command line longoption is also a keyword in the F<rc.conf> file and,
   prefixed with "OSSP_RC_" and it's name in upper case, also available as an
   environment variable.
   
  -The environment determines where rc will search before beginning to process
  -run commands. It also influences B<rc's> behaviour, just as the command line
  -options do. There is no difference between typing an option in the command
  -line, and appending the same option to the OSSP_RC_OPTS variable.
  -
  -#!FIXME! Study this and determine if it is needed
  -#OSSP_RC_IMPLS       - Other rc implementations
  -#
  -#The OSSP_RC_IMPLS variable plays a role only when the user has more than one
  -#logical set of run command sections. If rc reads anything but EOL in this
  -#variable, it will assume that more than one rc implementation exists. The
  -#variable should contain a chain of paths where other rc implementations are.
  -#This allows the user to build several OSSP rc hierarchies and then switch from
  -#each... Blah FIXME I don't know if we should be paying attention to the
  -#ENVIRONMENT guys. Maybe this is not a good solution for our dynamic OpenPKG
  -#environment problem after all.
  -
   =back 4
   
   =head1 RETURN VALUE
   
   =over 4
   
  --1 Faulty run command hierarchy
  +-1 Error in rc
    0 Success
  - 1 One or more run commands failed
  + 1 Error in command executed by rc
   
   =back 4
   
  @@ -398,30 +220,14 @@
   command. This is often seen when importing the environment of packages of an
   B<OpenPKG> hierarchy.
   
  -=over 4
  -
  -$ eval `@l_prefix@/etc/rc --eval all env`
  -
  -=back 4
  -
  -=back 4
  -
   =head1 FILES
   
   =over 4
   
   F<rc.conf>          - Master configuration file
  -
  -The following filenames are specified in F<rc.conf>. Both their names and
  -locations may be different due to user customizations.
  -
  -=over 4
  -
  -F<rc.func>          - User defined functions file
  +F<rc.func>          - User defined functions library
   F<rc.env>           - Postprocess variable declaration file
  -F<rc.\<rcfile\>>    - Run command file
  -
  -=back 4
  +F<rc.foo>           - Run commands for "foo" application
   
   =back 4
   
  @@ -434,24 +240,6 @@
   and Red Hat distributions.
   
   rc.conf(1), rc.func(1), rc.env(1), rcfile(1), and rc-sample(1).
  -
  -=back 4
  -
  -=head1 DIAGNOSTICS
  -
  -=over 4
  -
  -If rc fails while processing a run command, the exit status will be 1. If rc
  -failed due to a broken run command configuration, the exit status will be -1.
  -This can happen if a script file is moved or renamed, for example. If the run
  -command configuration is broken, no further action is taken and no run
  -commands are processed.
  -
  -Importantly, if the keyword `all' is given as the program wildcard parameter,
  -then processing will begin and continue until the first error is reached.
  -Should an error arise, processing will stop and the exit status will be 1.
  -There is no way to learn which command caused the error unless it is apparent
  -from the text output of the rc process.
   
   =back 4
   

From ossp-cvs-owner@ossp.org  Tue Jan 29 09:48:14 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1B75E76500; Tue, 29 Jan 2002 09:48:14 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc Makefile.am rc_test.sh
Message-Id: <20020129084814.1B75E76500@mail.ossp.org>
Date: Tue, 29 Jan 2002 09:48:14 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   29-Jan-2002 09:48:14
  Branch: HEAD                             Handle: 197001010100001012290493

  Modified files:
    ossp-pkg/rc             rc_test.sh
  Removed files:
    ossp-pkg/rc             Makefile.am

  Log:
    Remove automake macros.

  Summary:
    Revision    Changes     Path
    NONE        +0  -12     ossp-pkg/rc/Makefile.am
    1.2         +41 -1      ossp-pkg/rc/rc_test.sh
  ____________________________________________________________________________

    Index: ossp-pkg/rc/rc_test.sh
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 rc_test.sh
  --- ossp-pkg/rc/rc_test.sh	8 Jan 2002 15:47:11 -0000	1.1
  +++ ossp-pkg/rc/rc_test.sh	29 Jan 2002 08:48:13 -0000	1.2
  @@ -27,4 +27,44 @@
   #
   #  test_rc.sh: Runcommand processor test script
   
  -echo "Eat a OSSP frog"
  +#Pre:
  +#tar zxvf ossprc-0.9.tar.gz
  +#cd ossprc-0.9
  +#./configure
  +#make
  +#su
  +#make install
  +#export OSSP_RC_ROOT=/etc/ossprc/
  +#
  +#Assume:
  +#Installed program 'mycom' in /usr/local/bin/mycom
  +#Valid OSSP run command file rc.mycom in /etc/ossprc/rc.d
  +#File rc.mycom contains the sections start, sync, and restart
  +#
  +#Begin:
  +#$ rc mycom start sync restart
  +#
  +#Output:
  +#
  +#Post:
  +#
  +#Procedure:
  +#
  +#foreach sec in <section> [<section> ...] {
  +#    foreach dir in --dir=dir1:dir2:.. {
  +#        search for --rcfile where %s is <package>
  +#        parse rcfile into blocks according to --regex-section/etc.
  +#        remember common/<section> into list
  +#    }
  +#    // we now have an unsorted list of common/<section>
  +#    sort list of common/<section> according to their priority (see --regex-param)
  +#
  +#    // execution
  +#    forearch common/<section> in list {
  +#        prepend config section
  +#        prepend common section
  +#        expand references accordingf to --regex-reference
  +#        execute result as user/group (see --regex-param) with interpreter (see --regex-param)
  +#    }
  +#}
  +#

From ossp-cvs-owner@ossp.org  Tue Jan 29 09:53:03 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B7BA976500; Tue, 29 Jan 2002 09:53:03 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc-sample.pod
Message-Id: <20020129085303.B7BA976500@mail.ossp.org>
Date: Tue, 29 Jan 2002 09:53:03 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   29-Jan-2002 09:53:03
  Branch: HEAD                             Handle: 2002012908530300

  Modified files:
    ossp-pkg/rc             rc-sample.pod

  Log:
    overhauling the location determination of rc files

  Summary:
    Revision    Changes     Path
    1.3         +70 -54     ossp-pkg/rc/rc-sample.pod
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc-sample.pod
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 rc-sample.pod
  --- ossp-pkg/rc/rc-sample.pod	28 Jan 2002 16:23:20 -0000	1.2
  +++ ossp-pkg/rc/rc-sample.pod	29 Jan 2002 08:53:03 -0000	1.3
  @@ -12,7 +12,9 @@
   =head1 USE CASE: OpenPKG Run-Command Facility
   
   This describes how B<OSSP rc> is used as the B<OpenPKG>
  -(http://www.openpkg.org/) run-command facility. First, the involved files:
  +(http://www.openpkg.org/) run-command facility. 
  +
  +First, the involved files:
   
   =over 4
   
  @@ -27,18 +29,27 @@
   C<--with-config=/cw/etc/rc.cf>. It is installed at B<OpenPKG>
   bootstrap time and used read-only.
   
  - Dirs          /cw/etc/rc.d:/cw/local/etc/rc.d
  - Name          rc.%s/rc.*
  - ConfigDef     (?<=^\s*)([a-zA-Z_][a-zA-Z_0-9]*)=("[^"]*"|'[^']*'|\S+)
  - SectionDef    (?<=^|\n)%([a-zA-Z][a-zA-Z0-9]*)(\s+-[a-zA-Z]\s*\S+)\s*\n(.+?)(?=\n%%\S+|$)
  - ParamDef      (?<=^|\s)-([a-zA-Z])\s*(\S+)
  - SectionRef    (?<=^\s*|;\s*)%([a-zA-Z][a-zA-Z0-9]*)(\s+[^\n]+)?
  - ParamRef      \$([0-9])
  - NameConfig    config
  - NameCommon    common
  - Execute       root  %s
  - Execute       !root sudo %s
  - LineControl   yes
  + #   how to locate RC files
  + Locate            /cw/etc/rc.d/rc.%{RCFILE:s/^all$/*/}
  + Locate            /cw/local/etc/rc.d/rc.%{RCFILE:s/^all$/*/}
  +
  + #   requirements on RC files
  + RequireUmask      022
  + RequireOwner      cw
  + RequireGroup      cw
  +
  + #   how to parse RC files
  + ParseConfigDef    (?<=^\s*)([a-zA-Z_][a-zA-Z_0-9]*)=(?:"([^"]*)"|'([^']*)'|(\S+))
  + ParseSectionDef   (?<=^|\n)%([a-zA-Z][a-zA-Z0-9]*)(\s+-[a-zA-Z]\s*\S+)*\s*\n(.+?)(?=\n%%\S+|$)
  + ParseSectionParam (?<=^|\s)-([a-zA-Z])\s*(\S+)
  + ParseSectionRef   (?<=^\s*|;\s*)%([a-zA-Z][a-zA-Z0-9]*)(\s+[^\n]+)?
  + ParseParamRef     \$([0-9])
  + NameConfig        config
  + NameCommon        common
  +
  + Execute           root  %s
  + Execute           !root sudo %s
  + LineControl       yes
   
   =item F</cw/etc/rc.func> (C<%common> extensions)
   
  @@ -159,21 +170,26 @@
   
   =item F<$HOME/.bashrc>
   
  -  cd () {
  -      eval `rc --eval --conf=$HOME/.duecf - leave`
  -      builtin cd ${1+"$@"} 
  -      eval `rc --eval --conf=$HOME/.duecf - enter`
  -  }
  + cd () {
  +     eval `rc --eval --conf=$HOME/.duecf $PWD leave`
  +     builtin cd ${1+"$@"} 
  +     eval `rc --eval --conf=$HOME/.duecf $PWD enter`
  + }
   
   =item F<$HOME/.duecf>
   
  -  Dirs          .:..// # current and all parent dirs
  -  Name          .duerc
  -  NameGlobal    $HOME/.dueglobal:/etc/dueglobal
  -  RequireUmask  022      
  -  RequireOwner  %{USER}
  -  RequireGroup  %{GROUP}
  -  Functions     $HOME/.duefunc
  + #   how to locate RC files
  + Locate        %{RCFILE}/.duerc
  + Locate        ${HOME}/.duerc:m/^<dir path="%{RCFILE}">(.*)<\/dir>/i
  + Locate        ${HOME}/.duerc.%{RCFILE:s/^\///:s/[\/]/-/g}
  +
  + #   restrictions on RC files
  + RequireUmask  022
  + RequireOwner  ${USER}
  + RequireGroup  ${USER:F<user2group>}
  +
  + #   how to parse RC files
  + Functions     $HOME/.duefunc
   
   =item F<$HOME/.duefunc>
   
  @@ -237,38 +253,38 @@
   
   =item F</cw/.duerc>
   
  -  <event name=enter>
  -      duePathAdd PATH            $CWD/bin $CWD/sbin
  -      duePathAdd MANPATH         $CWD/man
  -      duePathAdd INFOPATH        $CWD/info
  -      duePathAdd LD_LIBRARY_PATH $CWD/lib
  -  </event>
  -  <event name=leave>
  -      duePathDel PATH            $CWD/bin $CWD/sbin
  -      duePathDel MANPATH         $CWD/man
  -      duePathDel INFOPATH        $CWD/info
  -      duePathDel LD_LIBRARY_PATH $CWD/lib
  -  </event>
  + <event name=enter>
  +     duePathAdd PATH            $CWD/bin $CWD/sbin
  +     duePathAdd MANPATH         $CWD/man
  +     duePathAdd INFOPATH        $CWD/info
  +     duePathAdd LD_LIBRARY_PATH $CWD/lib
  + </event>
  + <event name=leave>
  +     duePathDel PATH            $CWD/bin $CWD/sbin
  +     duePathDel MANPATH         $CWD/man
  +     duePathDel INFOPATH        $CWD/info
  +     duePathDel LD_LIBRARY_PATH $CWD/lib
  + </event>
   
   =item F<$HOME/.dueglobal>
     
  -  <directory path=/cw>
  -      <event name=enter>
  -          duePathAdd PATH            /cw/bin /cw/sbin
  -          duePathAdd MANPATH         /cw/man
  -          duePathAdd INFOPATH        /cw/info
  -          duePathAdd LD_LIBRARY_PATH /cw/lib
  -      </event>
  -      <event name=leave>
  -          duePathDel PATH            /cw/bin /cw/sbin
  -          duePathDel MANPATH         /cw/man
  -          duePathDel INFOPATH        /cw/info
  -          duePathDel LD_LIBRARY_PATH /cw/lib
  -      </event>
  -  </directory>
  -  <directory path=/usr/opkg>
  -      ...
  -  </directory>
  + <dir path=/cw>
  +     <event name=enter>
  +         duePathAdd PATH            /cw/bin /cw/sbin
  +         duePathAdd MANPATH         /cw/man
  +         duePathAdd INFOPATH        /cw/info
  +         duePathAdd LD_LIBRARY_PATH /cw/lib
  +     </event>
  +     <event name=leave>
  +         duePathDel PATH            /cw/bin /cw/sbin
  +         duePathDel MANPATH         /cw/man
  +         duePathDel INFOPATH        /cw/info
  +         duePathDel LD_LIBRARY_PATH /cw/lib
  +     </event>
  + </dir>
  + <dir path=/usr/opkg>
  +     ...
  + </dir>
   
   =cut
   

From ossp-cvs-owner@ossp.org  Tue Jan 29 10:14:39 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F257F76500; Tue, 29 Jan 2002 10:14:38 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.pod
Message-Id: <20020129091438.F257F76500@mail.ossp.org>
Date: Tue, 29 Jan 2002 10:14:38 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   29-Jan-2002 10:14:38
  Branch: HEAD                             Handle: 2002012909143800

  Modified files:
    ossp-pkg/rc             rc.pod

  Log:
    remove useless =over

  Summary:
    Revision    Changes     Path
    1.22        +0  -16     ossp-pkg/rc/rc.pod
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.pod
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 rc.pod
  --- ossp-pkg/rc/rc.pod	29 Jan 2002 08:42:20 -0000	1.21
  +++ ossp-pkg/rc/rc.pod	29 Jan 2002 09:14:38 -0000	1.22
  @@ -222,48 +222,32 @@
   
   =head1 FILES
   
  -=over 4
  -
   F<rc.conf>          - Master configuration file
   F<rc.func>          - User defined functions library
   F<rc.env>           - Postprocess variable declaration file
   F<rc.foo>           - Run commands for "foo" application
   
  -=back 4
  -
   =head1 SEE ALSO
   
  -=over 4
  -
   OSSP rc integrates concepts taken from other run command architectures. For
   more information, inspect the /etc/rc structures provided by FreeBSD, Solaris,
   and Red Hat distributions.
   
   rc.conf(1), rc.func(1), rc.env(1), rcfile(1), and rc-sample(1).
   
  -=back 4
  -
   =head1 AUTHORS
   
  -=over 4
  -
   Ralf S. Engelschall
   
   Michael Schloh von Bennewitz
   
  -=back 4
  -
   =head1 HISTORY
   
  -=over 4
  -
   B<OSSP rc> is a replacement for the prototype run command facility used in the
   OpenPKG project (http://www.openpkg.org/). The prototype was a slow and less
   robust Bourne shell script. B<OSSP rc> is intended to faster, more robust, and
   more flexible. This flexibility allows for wider range of use, however. B<OSSP
   rc> can therefore be used in a variety of situations, and is no longer
   exclusive to the OpenPKG project.
  -
  -=back 4
   
   =cut

From ossp-cvs-owner@ossp.org  Tue Jan 29 10:19:29 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8D4E776500; Tue, 29 Jan 2002 10:19:29 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Message-Id: <20020129091929.8D4E776500@mail.ossp.org>
Date: Tue, 29 Jan 2002 10:19:29 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: CVSROOT                          Date:   29-Jan-2002 10:19:29
  Branch: HEAD                             Handle: 2002012909192900

  Modified files:
    CVSROOT                 modules

  Log:
    add OSSP ex

  Summary:
    Revision    Changes     Path
    1.44        +1  -0      CVSROOT/modules
  ____________________________________________________________________________

  Index: CVSROOT/modules
  ============================================================
  $ cvs diff -u -r1.43 -r1.44 modules
  --- CVSROOT/modules	21 Jan 2002 14:01:54 -0000	1.43
  +++ CVSROOT/modules	29 Jan 2002 09:19:29 -0000	1.44
  @@ -76,6 +76,7 @@
   val             ossp-pkg/val
   var             ossp-pkg/var
   xds             ossp-pkg/xds
  +ex              ossp-pkg/ex
   
   #   the OSSP applications
   eperl           ossp-pkg/eperl

From ossp-cvs-owner@ossp.org  Tue Jan 29 12:05:22 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4D7AC76500; Tue, 29 Jan 2002 12:05:22 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex ex.c ex.h ex.pod
Message-Id: <20020129110522.4D7AC76500@mail.ossp.org>
Date: Tue, 29 Jan 2002 12:05:22 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   29-Jan-2002 12:05:22
  Branch: HEAD                             Handle: 2002012911052100

  Modified files:
    ossp-pkg/ex             ex.c ex.h ex.pod

  Log:
    overhaul __ex_ctx and __ex_terminate stuff

  Summary:
    Revision    Changes     Path
    1.4         +22 -1      ossp-pkg/ex/ex.c
    1.10        +30 -45     ossp-pkg/ex/ex.h
    1.8         +68 -65     ossp-pkg/ex/ex.pod
  ____________________________________________________________________________

  Index: ossp-pkg/ex/ex.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 ex.c
  --- ossp-pkg/ex/ex.c	26 Jan 2002 22:35:02 -0000	1.3
  +++ ossp-pkg/ex/ex.c	29 Jan 2002 11:05:21 -0000	1.4
  @@ -28,7 +28,28 @@
   **  ex.c: exception handling (compiler part)
   */
   
  +#include <stdio.h>
  +#include <stdlib.h>
  +
   #include "ex.h"
   
  -ex_ctx_t __ex_ctx_global;
  +static ex_ctx_t *ex_ctx_default(void)
  +{
  +    static ex_ctx_t ctx = EX_CTX_INITIALIZER;
  +
  +    return &ctx;
  +}
  +
  +static void ex_terminate_default(ex_t *e)
  +{ 
  +    fprintf(stderr,
  +            "**EX: UNCAUGHT EXCEPTION: "
  +            "class=0x%lx object=0x%lx value=0x%lx [%s:%d@%s]\n",
  +            (long)((e)->ex_class), (long)((e)->ex_object), (long)((e)->ex_value),
  +            (e)->ex_file, (e)->ex_line, (e)->ex_func);
  +    abort();
  +}
  +
  +ex_ctx_cb_t  __ex_ctx       = &ex_ctx_default;
  +ex_term_cb_t __ex_terminate = &ex_terminate_default;
   
  Index: ossp-pkg/ex/ex.h
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 ex.h
  --- ossp-pkg/ex/ex.h	27 Jan 2002 19:38:49 -0000	1.9
  +++ ossp-pkg/ex/ex.h	29 Jan 2002 11:05:21 -0000	1.10
  @@ -93,10 +93,10 @@
   
   /* declare the context type (private) */
   typedef struct {
  -    __ex_mctx_t  *ctx_mctx;      /* permanent machine context of enclosing try/catch */
  -    int           ctx_disabled;  /* permanent flag whether exception handling is disabled */
  -    int           ctx_caught;    /* temporary flag whether exception was caught */
  -    volatile ex_t ctx_ex;        /* temporary exception storage */
  +    __ex_mctx_t  *ctx_mctx;     /* permanent machine context of enclosing try/catch */
  +    int           ctx_disabled; /* permanent flag whether exception handling is disabled */
  +    int           ctx_caught;   /* temporary flag whether exception was caught */
  +    volatile ex_t ctx_ex;       /* temporary exception storage */
   } ex_ctx_t;
   
   /* the static and dynamic initializers for a context structure */
  @@ -116,33 +116,17 @@
       } while (0)
   
   /* the exception context */
  -#if defined(__EX_CTX_USE_STATIC__)
  -static ex_ctx_t __ex_ctx_global;
  -#define __ex_ctx (&__ex_ctx_global)
  -#elif defined(__EX_CTX_USE_GLOBAL__) || !defined(__EX_CTX_USE_CUSTOM__)
  -#define EX_CTX_GLOBAL ex_ctx_t __ex_ctx_global;
  -extern ex_ctx_t __ex_ctx_global;
  -#define __ex_ctx (&__ex_ctx_global)
  -#endif
  +typedef ex_ctx_t *(*ex_ctx_cb_t)(void);
  +extern ex_ctx_cb_t __ex_ctx;
   
   /* the termination handler */
  -#if defined(__EX_TERMINATE_USE_NOOP__)
  -#define __ex_terminate(e) \
  -    /* noop */
  -#elif defined(__EX_TERMINATE_USE_ABORT__) || !defined(__EX_CTX_USE_CUSTOM__)
  -#define __ex_terminate(e) \
  -    ( fprintf(stderr, \
  -              "**EX: UNCAUGHT EXCEPTION: " \
  -              "class=0x%lx object=0x%lx value=0x%lx [%s:%d@%s]\n", \
  -              (long)((e)->ex_class), (long)((e)->ex_object), (long)((e)->ex_value), \
  -              (e)->ex_file, (e)->ex_line, (e)->ex_func), \
  -     abort() )
  -#endif
  +typedef void (*ex_term_cb_t)(ex_t *);
  +extern ex_term_cb_t __ex_terminate; 
   
   /* the block for trying execution */
   #define ex_try \
       { \
  -        ex_ctx_t *__ex_ctx_ptr = __ex_ctx; \
  +        ex_ctx_t *__ex_ctx_ptr = __ex_ctx(); \
           __ex_mctx_t *__ex_mctx_en; \
           __ex_mctx_t __ex_mctx_me; \
           __ex_mctx_en = __ex_ctx_ptr->ctx_mctx; \
  @@ -162,41 +146,42 @@
           } \
           __ex_ctx_ptr->ctx_mctx = __ex_mctx_en; \
       } \
  -    if (   !(__ex_ctx->ctx_caught) \
  -        || ((e) = __ex_ctx->ctx_ex, 0)) { \
  +    if (   !(__ex_ctx()->ctx_caught) \
  +        || ((e) = __ex_ctx()->ctx_ex, 0)) { \
       } \
       else
   
   /* the throwing of a new exception */
   #define ex_throw(c,o,v) \
  -    (__ex_ctx->ctx_disabled ? 0 : \
  -     (__ex_ctx->ctx_ex.ex_class  = (void *)(c), \
  -      __ex_ctx->ctx_ex.ex_object = (void *)(o), \
  -      __ex_ctx->ctx_ex.ex_value  = (void *)(v), \
  -      __ex_ctx->ctx_ex.ex_file   = __FILE__, \
  -      __ex_ctx->ctx_ex.ex_line   = __LINE__, \
  -      __ex_ctx->ctx_ex.ex_func   = __EX_FUNC__, \
  -      (  __ex_ctx->ctx_mctx == NULL \
  -       ? (__ex_terminate(&(__ex_ctx->ctx_ex)), -1) \
  -       : (__ex_mctx_restore(__ex_ctx->ctx_mctx), 1) )))
  +    (__ex_ctx()->ctx_disabled ? 0 : \
  +     (__ex_ctx()->ctx_ex.ex_class  = (void *)(c), \
  +      __ex_ctx()->ctx_ex.ex_object = (void *)(o), \
  +      __ex_ctx()->ctx_ex.ex_value  = (void *)(v), \
  +      __ex_ctx()->ctx_ex.ex_file   = __FILE__, \
  +      __ex_ctx()->ctx_ex.ex_line   = __LINE__, \
  +      __ex_ctx()->ctx_ex.ex_func   = __EX_FUNC__, \
  +      (  __ex_ctx()->ctx_mctx == NULL \
  +       ? (__ex_terminate((ex_t *)&(__ex_ctx()->ctx_ex)), -1) \
  +       : (__ex_mctx_restore(__ex_ctx()->ctx_mctx), 1) )))
   
   /* the re-throwing of an already caught exception */
   #define ex_rethrow \
  -    (__ex_ctx->ctx_disabled ? 0 : \
  -      (__ex_ctx->ctx_mctx == NULL ? (__ex_terminate(&(__ex_ctx->ctx_ex)), -1) : \
  -        (__ex_mctx_restore(__ex_ctx->ctx_mctx), 1) ))
  +    (__ex_ctx()->ctx_disabled ? 0 : \
  +      (  __ex_ctx()->ctx_mctx == NULL \
  +       ? (__ex_terminate((ex_t *)&(__ex_ctx()->ctx_ex)), -1) \
  +       : (__ex_mctx_restore(__ex_ctx()->ctx_mctx), 1) ))
   
   /* shield an operation from exception handling */
   #define ex_shield \
  -    for (__ex_ctx->ctx_disabled = 1; \
  -         __ex_ctx->ctx_disabled == 1; \
  -         __ex_ctx->ctx_disabled = 0)
  +    for (__ex_ctx()->ctx_disabled = 1; \
  +         __ex_ctx()->ctx_disabled == 1; \
  +         __ex_ctx()->ctx_disabled = 0)
   
   /* exception handling tests */
   #define ex_catching \
  -    (__ex_ctx->ctx_mctx != NULL)
  +    (__ex_ctx()->ctx_mctx != NULL)
   #define ex_shielding \
  -    (__ex_ctx->ctx_disabled)
  +    (__ex_ctx()->ctx_disabled)
   
   /* optional namespace mapping */
   #if defined(__EX_NS_USE_UCCXX__)
  Index: ossp-pkg/ex/ex.pod
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 ex.pod
  --- ossp-pkg/ex/ex.pod	26 Jan 2002 22:43:54 -0000	1.7
  +++ ossp-pkg/ex/ex.pod	29 Jan 2002 11:05:21 -0000	1.8
  @@ -258,22 +258,13 @@
   =head2 Exception Context
   
   In order to maintain the exception catching stack and for passing the
  -exception between the throw point and the catch point, B<OSSP ex> uses
  -a global exception context macro B<__ex_ctx> holding a pointer to a
  -structure of type B<ex_ctx_t>. This is a private data structure and
  -should be treated as opaque by the user. 
  -
  -By default (define C<__EX_CTX_USE_GLOBAL__> or as long as
  -C<__EX_CTX_USE_CUSTOM__> is not defined) this references a global
  -variable C<__ex_ctx_global>. This variable is either defined by the user
  -by placing the directive "C<EX_CTX_GLOBAL>" macro somewhere outside of
  -any functions in the application or alternatively link the F<libex>
  -library to the application.
  -
  -Alternatively one can define C<__EX_CTX_USE_STATIC__> to get a static
  -declaration directly inside the header file (for small environments
  -where F<ex.h> is included once only) or define C<__EX_CTX_USE_CUSTOM__>
  -and provide an own macro definition for B<__ex_ctx>.
  +exception between the throw and the catch point, B<OSSP ex> uses a
  +global exception context, returned on-the-fly by the callback "ex_ctx_t
  +*(*B<__ex_ctx>)(void)".
  +
  +The default B<__ex_ctx> (as provided by F<libex>) returns a pointer to
  +a static B<ex_ctx_t> context. For use in multi-threading environments,
  +this should be overwritten with a per-thread context structure.
   
   To initialize an exception context structure there are two macros
   defined: B<EX_CTX_INITIALIZER> for static initialization and
  @@ -281,20 +272,17 @@
   
   =head2 Termination Handler
   
  -In case there is an exception thrown which is not caught by
  -any B<ex_try>/B<ex_catch> clauses, B<OSSP ex> calls the macro
  -B<__ex_terminate>(C<ex_t *>). It receives a pointer to the exception
  +In case there is an exception thrown which is not caught by any
  +B<ex_try>/B<ex_catch> clauses, B<OSSP ex> calls the callback "void
  +(*B<__ex_terminate>)(C<ex_t *>)". It receives a pointer to the exception
   object which should have been thrown.
   
  -By default (define C<__EX_TERMINATE_USE_ABORT__> or as long as
  -C<__EX_TERMINATE_USE_CUSTOM__> is not defined) this prints a message of
  -the form "C<**EX: UNCAUGHT EXCEPTION: class=0xXXXXXXXX object=0xXXXXXXXX
  -value=0xXXXXXXX [file:123:func]>" to F<stderr> and then calls abort(3)
  -in order to terminate the application.
  -
  -Alternatively one can define C<__EX_TERMINATE_USE_NOOP__> to ignore the
  -exception or or define C<__EX_TERMINATE_USE_CUSTOM__> and provide an own
  -macro definition for B<__ex_terminate>.
  +The default B<__ex_terminate> (as provided by F<libex>) this prints
  +a message of the form "C<**EX: UNCAUGHT EXCEPTION: class=0xXXXXXXXX
  +object=0xXXXXXXXX value=0xXXXXXXX [file:123:func]>" to F<stderr> and
  +then calls abort(3) in order to terminate the application. For use in
  +multi-threading environments, this should be overwritten with a callback
  +function which terminates only the current thread.
   
   =head2 Namespace Mapping
   
  @@ -307,10 +295,10 @@
   
   For this B<OSSP ex> optionally provides the ability to provide
   additional namespace mappings for those API macros. By default (define
  -C<__EX_NS_USE_CXX__> o or as long as C<__EX_CTX_USE_CUSTOM__> and
  -C<__cplusplus> is not defined) you can additional C++ style macros named
  -B<catch>, B<throw>, B<rethrow> and B<shield>. As an alternative you
  -can define C<__EX_NS_USE_UCCXX__> to get the same but with an (more
  +C<__EX_NS_USE_CXX__> or as long as C<__EX_NS_USE_CUSTOM__> and
  +C<__cplusplus> is not defined) you can additional C++ style macros
  +named B<catch>, B<throw>, B<rethrow> and B<shield>. As an alternative
  +you can define C<__EX_NS_USE_UCCXX__> to get the same but with an (more
   namespace safe) upper case first letter.
   
   =head1 MULTITHREADING ENVIRONMENTS
  @@ -337,83 +325,98 @@
   
    #ifndef __PTH_EX_H__
    #define __PTH_EX_H__
  -
  - /* include GNU pth API */
  + 
    #include "pth.h"
    
  - /* configure and include OSSP ex API */
  - #define __EX_CTX_USE_CUSTOM__
  - #define __ex_ctx \
  -     (ex_ctx_t *)pth_getkey(ex_ctx_key)
  - #define __ex_terminate(e) \
  -     pth_exit(e->ex_value)
  - #include "ex.h"
  -
  - int pth_init_ex(void);
  - pth_t pth_spawn_ex(pth_attr_t attr, void *(*entry)(void *), void *arg);
  -
  - #ifndef PTH_EX_C
  + int   pth_init_ex  (void);
  + pth_t pth_spawn_ex (pth_attr_t attr, void *(*entry)(void *), void *arg);
  + 
  + #ifndef PTH_EX_INTERNAL
    #define pth_init  pth_ex_init
    #define pth_spawn pth_ex_spawn
    #endif
  -
  + 
    #endif /* __PTH_EX_H__ */
   
   =item F<pth_ex.c>
   
  - #define PTH_EX_C
  + #include <stdlib.h>
  + 
  + #define PTH_EX_INTERNAL
    #include "pth_ex.h"
  -
  + #include "pth.h"
  + #include "ex.h"
  + 
    /* context storage key */
  - static pth_key_t ex_ctx_key;
  -
  + static pth_key_t pth_ex_ctx_key;
  + 
    /* context destructor */
  - void ex_ctx_destroy(void *data)
  + static void pth_ex_ctx_destroy(void *data)
    {
        if (data != NULL)
            free(data);
        return;
    }
  -
  + 
  + /* callback: context fetching */
  + static ex_ctx_t *pth_ex_ctx(void)
  + {
  +     return (ex_ctx_t *)pth_key_getdata(pth_ex_ctx_key);
  + }
  + 
  + /* callback: termination */
  + static void pth_ex_terminate(ex_t *e)
  + {
  +     pth_exit(e->ex_value);
  + }
  + 
    /* pth_init() wrapper */
    int pth_init_ex(void)
    {
        int rc;
  -
  + 
  +     /* perform original operation */
        rc = pth_init();
  -     pth_key_create(&ex_ctx_key, ex_ctx_destroy);
  + 
  +     /* additionally create thread data key and override OSSP ex callbacks */
  +     pth_key_create(&pth_ex_ctx_key, pth_ex_ctx_destroy);
  +     __ex_ctx       = pth_ex_ctx;
  +     __ex_terminate = pth_ex_terminate;
  + 
        return rc;
    }
  -
  + 
    /* internal thread entry wrapper information */
    typedef struct {
        void *(*entry)(void *);
        void *arg;
    } pth_spawn_ex_t;
  -
  + 
    /* internal thread entry wrapper */
    static void *pth_spawn_wrapper(void *arg)
    {
        pth_spawn_ex_t *wrapper;
        ex_ctx_t *ex_ctx;
  -
  + 
  +     /* create per-thread exception context */
        wrapper = (pth_spawn_ex_t *)arg;
        ex_ctx = (ex_ctx_t *)malloc(sizeof(ex_ctx_t));
        EX_CTX_INITIALIZE(ex_ctx);
  -     pth_key_setdata(ex_ctx_key, ex_ctx);
  -     return wrapper.entry(wrapper.arg);
  +     pth_key_setdata(pth_ex_ctx_key, ex_ctx);
  + 
  +     /* perform original operation */
  +     return wrapper->entry(wrapper->arg);
    }
  -
  + 
    /* pth_spawn() wrapper */
    pth_t pth_spawn_ex(pth_attr_t attr, void *(*entry)(void *), void *arg)
    {
  -     pth_t tid;
        pth_spawn_ex_t wrapper;
  -
  + 
  +     /* spawn thread but execute start function through wrapper */
        wrapper.entry = entry;
        wrapper.arg   = arg;
  -     tid = pth_spawn(attr, pth_spawn_wrapper, &wrapper);
  -     return tid;
  +     return pth_spawn(attr, pth_spawn_wrapper, &wrapper);
    }
   
   =back

From ossp-cvs-owner@ossp.org  Tue Jan 29 12:06:36 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2435176500; Tue, 29 Jan 2002 12:06:36 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex ex.c
Message-Id: <20020129110636.2435176500@mail.ossp.org>
Date: Tue, 29 Jan 2002 12:06:36 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   29-Jan-2002 12:06:36
  Branch: HEAD                             Handle: 2002012911063500

  Modified files:
    ossp-pkg/ex             ex.c

  Log:
    just a few comments I forgot...

  Summary:
    Revision    Changes     Path
    1.5         +3  -0      ossp-pkg/ex/ex.c
  ____________________________________________________________________________

  Index: ossp-pkg/ex/ex.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 ex.c
  --- ossp-pkg/ex/ex.c	29 Jan 2002 11:05:21 -0000	1.4
  +++ ossp-pkg/ex/ex.c	29 Jan 2002 11:06:35 -0000	1.5
  @@ -33,6 +33,7 @@
   
   #include "ex.h"
   
  +/* default __ex_ctx callback function */
   static ex_ctx_t *ex_ctx_default(void)
   {
       static ex_ctx_t ctx = EX_CTX_INITIALIZER;
  @@ -40,6 +41,7 @@
       return &ctx;
   }
   
  +/* default __ex_terminate callback function */
   static void ex_terminate_default(ex_t *e)
   { 
       fprintf(stderr,
  @@ -50,6 +52,7 @@
       abort();
   }
   
  +/* the externally visible API */
   ex_ctx_cb_t  __ex_ctx       = &ex_ctx_default;
   ex_term_cb_t __ex_terminate = &ex_terminate_default;
   

From ossp-cvs-owner@ossp.org  Tue Jan 29 13:48:29 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2A95276500; Tue, 29 Jan 2002 13:48:29 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c
Message-Id: <20020129124829.2A95276500@mail.ossp.org>
Date: Tue, 29 Jan 2002 13:48:29 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   29-Jan-2002 13:48:29
  Branch: HEAD                             Handle: 2002012912482800

  Modified files:
    ossp-pkg/sa             sa.c

  Log:
    cleanups triggered by Intel ICC

  Summary:
    Revision    Changes     Path
    1.54        +12 -12     ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.53 -r1.54 sa.c
  --- ossp-pkg/sa/sa.c	27 Jan 2002 20:43:21 -0000	1.53
  +++ ossp-pkg/sa/sa.c	29 Jan 2002 12:48:28 -0000	1.54
  @@ -143,14 +143,14 @@
       do { \
           (sa)->scSysCall.sc_##fn.fptr.any = (void (*)())(ptr); \
           (sa)->scSysCall.sc_##fn.fctx = (ctx); \
  -    } while(0)
  +    } while (0)
   
   /* system call structure assignment macro */
   #define SA_SC_COPY(sa1, sa2, fn) \
       do { \
           (sa1)->scSysCall.sc_##fn.fptr.any = (sa2)->scSysCall.sc_##fn.fptr.any; \
           (sa1)->scSysCall.sc_##fn.fctx     = (sa2)->scSysCall.sc_##fn.fctx; \
  -    } while(0)
  +    } while (0)
   
   /* system call function call macros */
   #define SA_SC_CALL_0(sa, fn) \
  @@ -449,7 +449,7 @@
       char *cpHost;
       char *cpPort;
       char *cpProto;
  -    int nPort;
  +    unsigned int nPort;
       const char *cpPath;
       char uribuf[1024];
       char *cp;
  @@ -545,7 +545,7 @@
               }
           }
           if (bNumeric)
  -            nPort = atoi(cpPort);
  +            nPort = (unsigned int)atoi(cpPort);
           else {
               if ((se = getservbyname(cpPort, cpProto)) == NULL)
                   return SA_ERR_SYS;
  @@ -658,7 +658,7 @@
       struct sockaddr_in6 *sa6;
   #endif
       char caHost[512];
  -    int nPort;
  +    unsigned int nPort;
   
       /* argument sanity check(s) */
       if (saa == NULL || uri == NULL)
  @@ -1596,7 +1596,7 @@
   {
       int n;
       sa_rc_t rv;
  -    size_t res;
  +    int res;
   
       /* argument sanity check(s) */
       if (sa == NULL || cpBuf == NULL || nBufReq == 0)
  @@ -1627,7 +1627,7 @@
       else {
           /* user-space buffered I/O */
           res = 0;
  -        while (1) {
  +        for (;;) {
               if (nBufReq <= sa->nReadLen) {
                   /* buffer holds enough data, so just use this */
                   memmove(cpBuf, sa->cpReadBuf, nBufReq);
  @@ -1682,7 +1682,7 @@
   
       /* pass number of actually read bytes to caller */ 
       if (nBufRes != NULL)
  -        *nBufRes = res;
  +        *nBufRes = (size_t)res;
   
       return rv;
   }
  @@ -1773,8 +1773,8 @@
   /* write data to socket */
   sa_rc_t sa_write(sa_t *sa, const char *cpBuf, size_t nBufReq, size_t *nBufRes)
   {
  -    size_t n;
  -    size_t res;
  +    int n;
  +    int res;
       sa_rc_t rv;
   
       /* argument sanity check(s) */
  @@ -1830,7 +1830,7 @@
   
       /* pass number of actually written bytes to caller */
       if (nBufRes != NULL)
  -        *nBufRes = res;
  +        *nBufRes = (size_t)res;
   
       return rv;
   }
  @@ -1884,7 +1884,7 @@
   /* flush write/outgoing I/O buffer */
   sa_rc_t sa_flush(sa_t *sa)
   {
  -    size_t n;
  +    int n;
       sa_rc_t rv;
   
       /* argument sanity check(s) */

From ossp-cvs-owner@ossp.org  Tue Jan 29 16:35:06 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2723C76500; Tue, 29 Jan 2002 16:35:06 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc 00TODO rc.conf rc.pod
Message-Id: <20020129153506.2723C76500@mail.ossp.org>
Date: Tue, 29 Jan 2002 16:35:06 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   29-Jan-2002 16:35:06
  Branch: HEAD                             Handle: 2002012915350500

  Modified files:
    ossp-pkg/rc             00TODO rc.conf rc.pod

  Log:
    Pseudocoded anad small adjustments.

  Summary:
    Revision    Changes     Path
    1.10        +67 -0      ossp-pkg/rc/00TODO
    1.4         +21 -19     ossp-pkg/rc/rc.conf
    1.23        +40 -11     ossp-pkg/rc/rc.pod
  ____________________________________________________________________________

  Index: ossp-pkg/rc/00TODO
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 00TODO
  --- ossp-pkg/rc/00TODO	25 Jan 2002 16:04:41 -0000	1.9
  +++ ossp-pkg/rc/00TODO	29 Jan 2002 15:35:05 -0000	1.10
  @@ -25,3 +25,70 @@
   
   Error handling
     Classic error, give 'restart' command in place of 'start' to stopped prog
  +
  +Pseudocode
  +                ***********************************
  +                * psoudocode implementation of rc *
  +                ***********************************
  +
  +parse command line options
  +read and merge all "rc.conf" files
  +
  +parse "Locate"
  +
  + Locate        /cw/etc/rc.d/rc.%{RCFILE:s/^all$/*/}
  + Locate        /cw/local/etc/rc.d/rc.%{RCFILE:s/^all$/*/}
  + Locate        %{RCFILE}/.duerc
  + Locate        ${HOME}/.duerc:m/^<dir path="%{RCFILE}">(.*)<\/dir>/i
  + Locate        ${HOME}/.duerc.%{RCFILE:s/^\///:s/[\/]/-/g}
  + Locate        path/file/regex:regex_inside_file
  +
  +foreach given locate {
  +    for each (locate all possible rcfiles working out the regex) {
  +        continue if (absolute path seen previously) //avoid duplicates
  +        if (filename matches given rcfile && securitycheck(RequireUmask, RequireOwner, RequireGroup))
  +            load file and grab only a part of the file according to info after colon given in "locate"
  +    }
  +}
  +
  +foreach located_rcfile_fraction {
  +        parse rcfile into blocks according to --ParseSectionDef
  +        take out %config section according to --NameConfig
  +        take out %common section according to --NameCommon
  +        take out any sections given on command line
  +}
  +
  +foreach section {
  +    if (multiple rcfiles, i.e. all)
  +        sort rcfiles by section priority.
  +    foreach rcfile {
  +        script = "";
  +        script += %config from rcfile
  +        script += %env from rc.env and override it
  +        create_script_for_rcfile(script, section, parent=no)
  +        expand our internal variables
  +        execute, print or printeval script with user & group priveleges
  +            and command interpreter according to options or section header
  +    }
  +}
  +EXIT
  +
  +
  +create_script_for_rcfile(script, section, parent)
  +{
  +    script += "${body}" //start with a pseudo value
  +
  +    if (!parent) { //only one rc.func!?
  +        replace ${body} with %common from rc.func
  +        if no ${body} assume prepend
  +    }
  +    replace ${body} with %common from rcfile
  +    if no ${body} assume prepend
  +    if (!parent) { //only one rc.func!?
  +        replace ${body} with %section from rc.func
  +        if no ${body} assume prepend
  +    }
  +    replace ${body} with %section from rcfile
  +
  +    expand references using --ParseSectionRef and calling create_script_for_rcfile(section, parent=yes);
  +}
  Index: ossp-pkg/rc/rc.conf
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 rc.conf
  --- ossp-pkg/rc/rc.conf	28 Jan 2002 16:01:23 -0000	1.3
  +++ ossp-pkg/rc/rc.conf	29 Jan 2002 15:35:05 -0000	1.4
  @@ -11,17 +11,17 @@
   debug
   #raw
   
  -defaultsection  config          #name for config section in rcfile
  +configsection   config          #name for config section in rcfile
   commonsection   common          #name for common section in rcfile
   rcfile          'rc.%s'         #'rc.' followed by the program name
   rcumask         002             #mask checked against rcfile permissions
   deactivate      OSSP_RC_DEACT   #environment variable controls activation
   interpreter     /usr/bin/perl   #command interpreter to use for script code
   
  -regex-sec       '(?<=^|\n)%%%s\s*\n(.+?)(?=\n%\S+|$)'
  -regex-ref       '(?<=^|\n)%%%s\s*(.+?)(?=\n|;)'
  -regex-assign    '(\s+)=(.*)$'
  -regex-param     '..'            #needs explanation
  +regexsection   '(?<=^|\n)%%%s\s*\n(.+?)(?=\n%\S+|$)'
  +#RSE what about ${begin} regexref       '(?<=^|\n)%%%s\s*(.+?)(?=\n|;)'
  +regexassign    '(\s+)=(.*)$'
  +regexparam     '..'             #needs explanation
   
   
   
  @@ -29,23 +29,25 @@
   
   
   
  -#conf       it's not possible to set the conf file in the conf file
  +
  +usage       #flag
  +debug       #flag
  +force       #flag
  +version     #flag
  +#conf       #it's too late to set the conf file in the conf file
  +dirs        /cw/etc/rc.d:/etc/rc.d
  +eval        #flag
   func        rc.iofunc \
               rc.dbgfunc \
               rc.exfunc
  -force       #flag
  -dirs        /cw/etc/rc.d:/etc/rc.d
  -tmp         /var/tmp
  -verbose     #flag
  -silent      #flag
  -debug       #flag
  -raw         #flag
   help        #flag
  -usage       #flag
  -version     #flag
  +info        #flag
  +labels      start
   print       #flag
  -eval        #flag
  -exec        #flag
   query       ${foovar:-foodefault}
  -labels      start
  -info        #flag
  +silent      #flag
  +raw         #flag
  +tmp         /var/tmp
  +verbose     #flag
  +exec        #flag
  +
  Index: ossp-pkg/rc/rc.pod
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 rc.pod
  --- ossp-pkg/rc/rc.pod	29 Jan 2002 09:14:38 -0000	1.22
  +++ ossp-pkg/rc/rc.pod	29 Jan 2002 15:35:05 -0000	1.23
  @@ -40,10 +40,9 @@
   @l_prefix@/etc/rc
   [B<-?>|B<--usage>]
   [B<-D>|B<--debug>] 
  -[B<-F>|B<--force>]
  +[B<-L>|B<--locate> I<dir>[C<:>I<dir>[...]]]
   [B<-V>|B<--version>]
   [B<-c>|B<--conf> I<file>[C<:>I<file>[...]]]
  -[B<-d>|B<--dirs> I<dir>[C<:>I<dir>[...]]]
   [B<-e>|B<--eval>]
   [B<-f>|B<--func> I<file>[C<:>I<file>[...]]] 
   [B<-h>|B<--help>]
  @@ -56,6 +55,13 @@
   [B<-t>|B<--tmp> I<dir>]
   [B<-v>|B<--verbose>]
   [B<-x>|B<--exec>] 
  +[B<--RequireUmask umask>]
  +[B<--RequireOwner uid|name>]
  +[B<--RequireGroup gid|name>]
  +[B<--ParseSectionDef regex>]
  +[B<--ParseSectionRef regex>]
  +[B<--NameConfig> name]
  +[B<--NameCommon> name]
   I<rcfile>
   I<section>
   
  @@ -97,12 +103,11 @@
   
   don't remove temporary files, and output debug messages to stderr
   
  -=item B<-F>|B<--force>
  +=item B<-L>|B<--locate> I<file>[C<:>I<part>]
   
  -Usually F<rcfile> is a fraction of a filename and the run command facility
  -prefixes this name with ${OSSP_RC_PREFIX} and appends ${OSSP_RC_SUFFIX} to it,
  -then searches the file in directories given using --dirs.  If the initial
  -F<rcfile> matches the regex '^\.{0,2}/', --force is automagically assumed.
  +locations to search for F<rcfile>s where I<file> can contain regex patterns to
  +filter files and the optional part is a regex to filter out parts of a file.
  +This option can be specified more than once.
   
   =item B<-V>|B<--version>
   
  @@ -113,10 +118,6 @@
   specify the location of the configuration file.  If omitted, the fallback is
   to look for C<$OSSP_RC_CONF>, and "@l_prefix@/etc/rc.conf", in that order.
   
  -=item B<-d>|B<--dirs> I<dir>[C<:>I<dir>[...]]
  -
  -directories to search for F<rcfile>s.
  -
   =item B<-e>|B<--eval>
   
   output the commands text in a format suitable for shell evaluation, but do not run it.
  @@ -174,6 +175,34 @@
   execute the command interpreter in a subprocess and actually run the commands.
   If neither B<--print>, B<--eval>, or B<­-exec> is given, the default is
   B<--exec> anyway.
  +
  +=item B<--RequireUmask umask>
  +
  +umask a F<rcfile> has to have, otherwise it's ignored.
  +
  +=item B<--RequireOwner uid|name>
  +
  +owner of the F<rcfile> must match uid|name, otherwise it's ignored.
  +
  +=item B<--RequireGroup gid|name>
  +
  +group of the F<rcfile> must match gid|name, otherwise it's ignored.
  +
  +=item B<--ParseSectionDef regex>
  +
  +regex matching a section within a F<rcfile>.
  +
  +=item B<--ParseSectionRef regex>
  +
  +regex matching a reference within a F<rcfile>.
  +
  +=item B<--NameConfig> name
  +
  +name of the config section, defaults to %config.
  +
  +=item B<--NameCommon> name
  +
  +name of the common section, defaults to %common.
   
   =back 4
   

From ossp-cvs-owner@ossp.org  Tue Jan 29 18:00:17 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C437D76500; Tue, 29 Jan 2002 18:00:17 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc aclocal.m4
Message-Id: <20020129170017.C437D76500@mail.ossp.org>
Date: Tue, 29 Jan 2002 18:00:17 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   29-Jan-2002 18:00:17
  Branch: HEAD                             Handle: 2002012917001700

  Modified files:
    ossp-pkg/rc             aclocal.m4

  Log:
    Propagate OSSP lmtp2nntp correction, 'Fix AC_CHECK_EXTLIB output on --help'.

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/rc/aclocal.m4
  ____________________________________________________________________________

  Index: ossp-pkg/rc/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 aclocal.m4
  --- ossp-pkg/rc/aclocal.m4	25 Jan 2002 16:02:42 -0000	1.3
  +++ ossp-pkg/rc/aclocal.m4	29 Jan 2002 17:00:17 -0000	1.4
  @@ -230,7 +230,7 @@
   
   AC_DEFUN(AC_CHECK_EXTLIB,[dnl
   AC_ARG_WITH($2, [dnl
  -[  --with-]$2[[=DIR]        build with external $1 library (default=no)]], [dnl
  +[  --with-]m4_substr([$2[[=DIR]]                     ], 0, 19)[build with external $1 library (default=no)]], [dnl
       if test ".$with_$2" = .yes; then
           #   via config script
           $2_version=`($2-config --version) 2>/dev/null`

From ossp-cvs-owner@ossp.org  Tue Jan 29 21:10:54 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BBD3476500; Tue, 29 Jan 2002 21:10:53 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex ex.c ex.h ex.pod
Message-Id: <20020129201053.BBD3476500@mail.ossp.org>
Date: Tue, 29 Jan 2002 21:10:53 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   29-Jan-2002 21:10:53
  Branch: HEAD                             Handle: 2002012920105300

  Modified files:
    ossp-pkg/ex             ex.c ex.h ex.pod

  Log:
    make defaults useable from outside to reset library

  Summary:
    Revision    Changes     Path
    1.6         +4  -4      ossp-pkg/ex/ex.c
    1.11        +2  -0      ossp-pkg/ex/ex.h
    1.9         +10 -9      ossp-pkg/ex/ex.pod
  ____________________________________________________________________________

  Index: ossp-pkg/ex/ex.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 ex.c
  --- ossp-pkg/ex/ex.c	29 Jan 2002 11:06:35 -0000	1.5
  +++ ossp-pkg/ex/ex.c	29 Jan 2002 20:10:53 -0000	1.6
  @@ -34,7 +34,7 @@
   #include "ex.h"
   
   /* default __ex_ctx callback function */
  -static ex_ctx_t *ex_ctx_default(void)
  +ex_ctx_t *__ex_ctx_default(void)
   {
       static ex_ctx_t ctx = EX_CTX_INITIALIZER;
   
  @@ -42,7 +42,7 @@
   }
   
   /* default __ex_terminate callback function */
  -static void ex_terminate_default(ex_t *e)
  +void __ex_terminate_default(ex_t *e)
   { 
       fprintf(stderr,
               "**EX: UNCAUGHT EXCEPTION: "
  @@ -53,6 +53,6 @@
   }
   
   /* the externally visible API */
  -ex_ctx_cb_t  __ex_ctx       = &ex_ctx_default;
  -ex_term_cb_t __ex_terminate = &ex_terminate_default;
  +ex_ctx_cb_t  __ex_ctx       = &__ex_ctx_default;
  +ex_term_cb_t __ex_terminate = &__ex_terminate_default;
   
  Index: ossp-pkg/ex/ex.h
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 ex.h
  --- ossp-pkg/ex/ex.h	29 Jan 2002 11:05:21 -0000	1.10
  +++ ossp-pkg/ex/ex.h	29 Jan 2002 20:10:53 -0000	1.11
  @@ -118,10 +118,12 @@
   /* the exception context */
   typedef ex_ctx_t *(*ex_ctx_cb_t)(void);
   extern ex_ctx_cb_t __ex_ctx;
  +extern ex_ctx_t *__ex_ctx_default(void);
   
   /* the termination handler */
   typedef void (*ex_term_cb_t)(ex_t *);
   extern ex_term_cb_t __ex_terminate; 
  +extern void __ex_terminate_default(ex_t *e);
   
   /* the block for trying execution */
   #define ex_try \
  Index: ossp-pkg/ex/ex.pod
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 ex.pod
  --- ossp-pkg/ex/ex.pod	29 Jan 2002 11:05:21 -0000	1.8
  +++ ossp-pkg/ex/ex.pod	29 Jan 2002 20:10:53 -0000	1.9
  @@ -262,9 +262,10 @@
   global exception context, returned on-the-fly by the callback "ex_ctx_t
   *(*B<__ex_ctx>)(void)".
   
  -The default B<__ex_ctx> (as provided by F<libex>) returns a pointer to
  -a static B<ex_ctx_t> context. For use in multi-threading environments,
  -this should be overwritten with a per-thread context structure.
  +The default B<__ex_ctx> (B<__ex_ctx_default> as provided by F<libex>)
  +returns a pointer to a static B<ex_ctx_t> context. For use in
  +multi-threading environments, this should be overwritten with a
  +per-thread context structure.
   
   To initialize an exception context structure there are two macros
   defined: B<EX_CTX_INITIALIZER> for static initialization and
  @@ -277,12 +278,12 @@
   (*B<__ex_terminate>)(C<ex_t *>)". It receives a pointer to the exception
   object which should have been thrown.
   
  -The default B<__ex_terminate> (as provided by F<libex>) this prints
  -a message of the form "C<**EX: UNCAUGHT EXCEPTION: class=0xXXXXXXXX
  -object=0xXXXXXXXX value=0xXXXXXXX [file:123:func]>" to F<stderr> and
  -then calls abort(3) in order to terminate the application. For use in
  -multi-threading environments, this should be overwritten with a callback
  -function which terminates only the current thread.
  +The default B<__ex_terminate> (B<__ex_terminate_default> as provided by
  +F<libex>) this prints a message of the form "C<**EX: UNCAUGHT EXCEPTION:
  +class=0xXXXXXXXX object=0xXXXXXXXX value=0xXXXXXXX [file:123:func]>" to
  +F<stderr> and then calls abort(3) in order to terminate the application.
  +For use in multi-threading environments, this should be overwritten with
  +a callback function which terminates only the current thread.
   
   =head2 Namespace Mapping
   

From ossp-cvs-owner@ossp.org  Wed Jan 30 08:53:25 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6D4C3764D8; Wed, 30 Jan 2002 08:53:25 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc 00TODO
Message-Id: <20020130075325.6D4C3764D8@mail.ossp.org>
Date: Wed, 30 Jan 2002 08:53:25 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   30-Jan-2002 08:53:25
  Branch: HEAD                             Handle: 2002013007532400

  Modified files:
    ossp-pkg/rc             00TODO

  Log:
    options come from command line and config files,
    note file globbing,
    rc.env has no %env section

  Summary:
    Revision    Changes     Path
    1.11        +4  -4      ossp-pkg/rc/00TODO
  ____________________________________________________________________________

  Index: ossp-pkg/rc/00TODO
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 00TODO
  --- ossp-pkg/rc/00TODO	29 Jan 2002 15:35:05 -0000	1.10
  +++ ossp-pkg/rc/00TODO	30 Jan 2002 07:53:24 -0000	1.11
  @@ -31,7 +31,7 @@
                   * psoudocode implementation of rc *
                   ***********************************
   
  -parse command line options
  +parse options
   read and merge all "rc.conf" files
   
   parse "Locate"
  @@ -43,8 +43,8 @@
    Locate        ${HOME}/.duerc.%{RCFILE:s/^\///:s/[\/]/-/g}
    Locate        path/file/regex:regex_inside_file
   
  -foreach given locate {
  -    for each (locate all possible rcfiles working out the regex) {
  +foreach locate {
  +    for each (locate all possible rcfiles after variable expansion and shell globbing) {
           continue if (absolute path seen previously) //avoid duplicates
           if (filename matches given rcfile && securitycheck(RequireUmask, RequireOwner, RequireGroup))
               load file and grab only a part of the file according to info after colon given in "locate"
  @@ -64,7 +64,7 @@
       foreach rcfile {
           script = "";
           script += %config from rcfile
  -        script += %env from rc.env and override it
  +        script += rc.env and override it
           create_script_for_rcfile(script, section, parent=no)
           expand our internal variables
           execute, print or printeval script with user & group priveleges

From ossp-cvs-owner@ossp.org  Wed Jan 30 08:55:33 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CAC6C764D8; Wed, 30 Jan 2002 08:55:32 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.conf
Message-Id: <20020130075532.CAC6C764D8@mail.ossp.org>
Date: Wed, 30 Jan 2002 08:55:32 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   30-Jan-2002 08:55:32
  Branch: HEAD                             Handle: 2002013007553200

  Modified files:
    ossp-pkg/rc             rc.conf

  Log:
    dirs renamed to locate

  Summary:
    Revision    Changes     Path
    1.5         +3  -2      ossp-pkg/rc/rc.conf
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.conf
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 rc.conf
  --- ossp-pkg/rc/rc.conf	29 Jan 2002 15:35:05 -0000	1.4
  +++ ossp-pkg/rc/rc.conf	30 Jan 2002 07:55:32 -0000	1.5
  @@ -18,7 +18,6 @@
   deactivate      OSSP_RC_DEACT   #environment variable controls activation
   interpreter     /usr/bin/perl   #command interpreter to use for script code
   
  -regexsection   '(?<=^|\n)%%%s\s*\n(.+?)(?=\n%\S+|$)'
   #RSE what about ${begin} regexref       '(?<=^|\n)%%%s\s*(.+?)(?=\n|;)'
   regexassign    '(\s+)=(.*)$'
   regexparam     '..'             #needs explanation
  @@ -30,12 +29,14 @@
   
   
   
  +regexsection   '(?<=^|\n)%%%s\s*\n(.+?)(?=\n%\S+|$)'
  +
   usage       #flag
   debug       #flag
   force       #flag
   version     #flag
   #conf       #it's too late to set the conf file in the conf file
  -dirs        /cw/etc/rc.d:/etc/rc.d
  +locate      /cw/etc/rc.d:/etc/rc.d
   eval        #flag
   func        rc.iofunc \
               rc.dbgfunc \

From ossp-cvs-owner@ossp.org  Wed Jan 30 08:57:57 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1069F764D8; Wed, 30 Jan 2002 08:57:57 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc-sample.pod
Message-Id: <20020130075757.1069F764D8@mail.ossp.org>
Date: Wed, 30 Jan 2002 08:57:57 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   30-Jan-2002 08:57:57
  Branch: HEAD                             Handle: 2002013007575600

  Modified files:
    ossp-pkg/rc             rc-sample.pod

  Log:
    consequently rename config to env

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/rc/rc-sample.pod
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc-sample.pod
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 rc-sample.pod
  --- ossp-pkg/rc/rc-sample.pod	29 Jan 2002 08:53:03 -0000	1.3
  +++ ossp-pkg/rc/rc-sample.pod	30 Jan 2002 07:57:56 -0000	1.4
  @@ -39,7 +39,7 @@
    RequireGroup      cw
   
    #   how to parse RC files
  - ParseConfigDef    (?<=^\s*)([a-zA-Z_][a-zA-Z_0-9]*)=(?:"([^"]*)"|'([^']*)'|(\S+))
  + ParseEnvDef       (?<=^\s*)([a-zA-Z_][a-zA-Z_0-9]*)=(?:"([^"]*)"|'([^']*)'|(\S+))
    ParseSectionDef   (?<=^|\n)%([a-zA-Z][a-zA-Z0-9]*)(\s+-[a-zA-Z]\s*\S+)*\s*\n(.+?)(?=\n%%\S+|$)
    ParseSectionParam (?<=^|\s)-([a-zA-Z])\s*(\S+)
    ParseSectionRef   (?<=^\s*|;\s*)%([a-zA-Z][a-zA-Z0-9]*)(\s+[^\n]+)?

From ossp-cvs-owner@ossp.org  Wed Jan 30 09:00:06 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 28160764D8; Wed, 30 Jan 2002 09:00:06 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc-sample.pod
Message-Id: <20020130080006.28160764D8@mail.ossp.org>
Date: Wed, 30 Jan 2002 09:00:06 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   30-Jan-2002 09:00:06
  Branch: HEAD                             Handle: 2002013008000400

  Modified files:
    ossp-pkg/rc             rc-sample.pod

  Log:
    since --eval might change $PATH, ensure same rc is used afterwards

  Summary:
    Revision    Changes     Path
    1.5         +2  -2      ossp-pkg/rc/rc-sample.pod
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc-sample.pod
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 rc-sample.pod
  --- ossp-pkg/rc/rc-sample.pod	30 Jan 2002 07:57:56 -0000	1.4
  +++ ossp-pkg/rc/rc-sample.pod	30 Jan 2002 08:00:04 -0000	1.5
  @@ -171,9 +171,9 @@
   =item F<$HOME/.bashrc>
   
    cd () {
  -     eval `rc --eval --conf=$HOME/.duecf $PWD leave`
  +     eval `$HOME/bin/rc --eval --conf=$HOME/.duecf $PWD leave`
        builtin cd ${1+"$@"} 
  -     eval `rc --eval --conf=$HOME/.duecf $PWD enter`
  +     eval `$HOME/bin/rc --eval --conf=$HOME/.duecf $PWD enter`
    }
   
   =item F<$HOME/.duecf>

From ossp-cvs-owner@ossp.org  Wed Jan 30 09:07:09 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5C564764D8; Wed, 30 Jan 2002 09:07:09 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Message-Id: <20020130080709.5C564764D8@mail.ossp.org>
Date: Wed, 30 Jan 2002 09:07:09 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: CVSROOT                          Date:   30-Jan-2002 09:07:09
  Branch: HEAD                             Handle: 2002013008070800

  Modified files:
    CVSROOT                 modules

  Log:
    add OSSP ex to OSSP lmtp2nntp

  Summary:
    Revision    Changes     Path
    1.45        +2  -1      CVSROOT/modules
  ____________________________________________________________________________

  Index: CVSROOT/modules
  ============================================================
  $ cvs diff -u -r1.44 -r1.45 modules
  --- CVSROOT/modules	29 Jan 2002 09:19:29 -0000	1.44
  +++ CVSROOT/modules	30 Jan 2002 08:07:08 -0000	1.45
  @@ -90,12 +90,13 @@
   petidomo        ossp-pkg/petidomo
   
   #   OSSP lmtp2nntp
  -lmtp2nntp       ossp-pkg/lmtp2nntp &lmtp2nntp_str &lmtp2nntp_l2 &lmtp2nntp_sa &lmtp2nntp_var &lmtp2nntp_val
  +lmtp2nntp       ossp-pkg/lmtp2nntp &lmtp2nntp_str &lmtp2nntp_l2 &lmtp2nntp_sa &lmtp2nntp_var &lmtp2nntp_val &lmtp2nntp_ex
   lmtp2nntp_str   -d lib_str ossp-pkg/str
   lmtp2nntp_l2    -d lib_l2  ossp-pkg/l2
   lmtp2nntp_sa    -d lib_sa  ossp-pkg/sa
   lmtp2nntp_var   -d lib_var ossp-pkg/var
   lmtp2nntp_val   -d lib_val ossp-pkg/val
  +lmtp2nntp_ex    -d lib_val ossp-pkg/ex
   
   #   OSSP rc
   rc              ossp-pkg/rc &rc_str &rc_var

From ossp-cvs-owner@ossp.org  Wed Jan 30 09:07:24 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D2D0976514; Wed, 30 Jan 2002 09:07:23 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Message-Id: <20020130080723.D2D0976514@mail.ossp.org>
Date: Wed, 30 Jan 2002 09:07:23 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: CVSROOT                          Date:   30-Jan-2002 09:07:23
  Branch: HEAD                             Handle: 2002013008072300

  Modified files:
    CVSROOT                 modules

  Log:
    fix cut & paste error

  Summary:
    Revision    Changes     Path
    1.46        +1  -1      CVSROOT/modules
  ____________________________________________________________________________

  Index: CVSROOT/modules
  ============================================================
  $ cvs diff -u -r1.45 -r1.46 modules
  --- CVSROOT/modules	30 Jan 2002 08:07:08 -0000	1.45
  +++ CVSROOT/modules	30 Jan 2002 08:07:23 -0000	1.46
  @@ -96,7 +96,7 @@
   lmtp2nntp_sa    -d lib_sa  ossp-pkg/sa
   lmtp2nntp_var   -d lib_var ossp-pkg/var
   lmtp2nntp_val   -d lib_val ossp-pkg/val
  -lmtp2nntp_ex    -d lib_val ossp-pkg/ex
  +lmtp2nntp_ex    -d lib_ex  ossp-pkg/ex
   
   #   OSSP rc
   rc              ossp-pkg/rc &rc_str &rc_var

From ossp-cvs-owner@ossp.org  Wed Jan 30 09:38:24 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 56709764D8; Wed, 30 Jan 2002 09:38:24 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp Makefile.in configure.ac devtool.conf l...
Message-Id: <20020130083824.56709764D8@mail.ossp.org>
Date: Wed, 30 Jan 2002 09:38:24 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   30-Jan-2002 09:38:24
  Branch: HEAD                             Handle: 2002013008382300

  Modified files:
    ossp-pkg/lmtp2nntp      Makefile.in configure.ac devtool.conf
                            lmtp2nntp_main.c

  Log:
    add OSSP ex to OSSP lmtp2nntp

  Summary:
    Revision    Changes     Path
    1.43        +1  -1      ossp-pkg/lmtp2nntp/Makefile.in
    1.22        +22 -11     ossp-pkg/lmtp2nntp/configure.ac
    1.3         +6  -0      ossp-pkg/lmtp2nntp/devtool.conf
    1.10        +3  -0      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.42 -r1.43 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	24 Jan 2002 15:30:10 -0000	1.42
  +++ ossp-pkg/lmtp2nntp/Makefile.in	30 Jan 2002 08:38:23 -0000	1.43
  @@ -48,7 +48,7 @@
   SRCS = lmtp2nntp_main.c   lmtp2nntp_daemon.c lmtp2nntp_lmtp.c lmtp2nntp_nntp.c lmtp2nntp_argz.c lmtp2nntp_shpat.c lmtp2nntp_msg.c lmtp2nntp_popt.c lmtp2nntp_option.c lmtp2nntp_config.c lmtp2nntp_version.c 
   OBJS = lmtp2nntp_main.o   lmtp2nntp_daemon.o lmtp2nntp_lmtp.o lmtp2nntp_nntp.o lmtp2nntp_argz.o lmtp2nntp_shpat.o lmtp2nntp_msg.o lmtp2nntp_popt.o lmtp2nntp_option.o lmtp2nntp_config.o lmtp2nntp_version.o
   
  -SUBDIRS = @SUBDIR_STR@ @SUBDIR_L2@ @SUBDIR_SA@ @SUBDIR_VAR@ @SUBDIR_VAL@
  +SUBDIRS = @SUBDIR_EX@ @SUBDIR_STR@ @SUBDIR_L2@ @SUBDIR_SA@ @SUBDIR_VAR@ @SUBDIR_VAL@
   
   all: _SUBDIRS_all lmtp2nntp lmtp2nntp.8
   
  Index: ossp-pkg/lmtp2nntp/configure.ac
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 configure.ac
  --- ossp-pkg/lmtp2nntp/configure.ac	17 Jan 2002 11:53:24 -0000	1.21
  +++ ossp-pkg/lmtp2nntp/configure.ac	30 Jan 2002 08:38:23 -0000	1.22
  @@ -51,8 +51,19 @@
   dnl #   checks for POPT library
   AC_CHECK_HEADERS(alloca.h float.h)
   
  -dnl #   check for Str library
  -AC_CHECK_EXTLIB([OSSP Str], 
  +dnl #   check for OSSP ex library
  +AC_CHECK_EXTLIB([OSSP ex], 
  +                ex, __ex_ctx, ex.h, 
  +                [SUBDIR_EX=""], 
  +                [SUBDIR_EX="lib_ex"
  +                 CPPFLAGS="$CPPFLAGS -Ilib_ex"
  +                 CFLAGS="$CFLAGS -Ilib_ex"
  +                 LDFLAGS="$LDFLAGS -Llib_ex/.libs"
  +                 LIBS_EXTRA="$LIBS_EXTRA -lex"])
  +AC_SUBST(SUBDIR_EX)
  +
  +dnl #   check for OSSP str library
  +AC_CHECK_EXTLIB([OSSP str], 
                   str, str_parse, str.h, 
                   [SUBDIR_STR=""], 
                   [SUBDIR_STR="lib_str"
  @@ -62,8 +73,8 @@
                    LIBS_EXTRA="$LIBS_EXTRA -lstr"])
   AC_SUBST(SUBDIR_STR)
   
  -dnl #   check for L2 library
  -AC_CHECK_EXTLIB([OSSP L2], 
  +dnl #   check for OSSP l2 library
  +AC_CHECK_EXTLIB([OSSP l2], 
                   l2, l2_stream_log, l2.h, 
                   [SUBDIR_L2=""], 
                   [SUBDIR_L2="lib_l2"
  @@ -73,8 +84,8 @@
                    LIBS_EXTRA="$LIBS_EXTRA -ll2"])
   AC_SUBST(SUBDIR_L2)
   
  -dnl #   check for SA library
  -AC_CHECK_EXTLIB([OSSP SA], 
  +dnl #   check for OSSP sa library
  +AC_CHECK_EXTLIB([OSSP sa], 
                   sa, sa_create, sa.h, 
                   [SUBDIR_SA=""], 
                   [SUBDIR_SA="lib_sa"
  @@ -84,8 +95,8 @@
                    LIBS_EXTRA="$LIBS_EXTRA -lsa"])
   AC_SUBST(SUBDIR_SA)
   
  -dnl #   check for VAR library
  -AC_CHECK_EXTLIB([OSSP Var], 
  +dnl #   check for OSSP var library
  +AC_CHECK_EXTLIB([OSSP var], 
                   var, var_expand, var.h, 
                   [SUBDIR_VAR=""], 
                   [SUBDIR_VAR="lib_var"
  @@ -95,8 +106,8 @@
                    LIBS_EXTRA="$LIBS_EXTRA -lvar"])
   AC_SUBST(SUBDIR_VAR)
   
  -dnl #   check for VAL library
  -AC_CHECK_EXTLIB([OSSP Val], 
  +dnl #   check for OSSP val library
  +AC_CHECK_EXTLIB([OSSP val], 
                   val, val_create, val.h, 
                   [SUBDIR_VAL=""], 
                   [SUBDIR_VAL="lib_val"
  @@ -116,7 +127,7 @@
   export enable_shared
   enable_headline=no
   export enable_headline
  -AC_CONFIG_SUBDIRS([$SUBDIR_STR $SUBDIR_L2 $SUBDIR_SA $SUBDIR_VAR $SUBDIR_VAL])
  +AC_CONFIG_SUBDIRS([$SUBDIR_EX $SUBDIR_STR $SUBDIR_L2 $SUBDIR_SA $SUBDIR_VAR $SUBDIR_VAL])
   
   dnl #   standard output generation
   AC_CONFIG_HEADERS(config.h)
  Index: ossp-pkg/lmtp2nntp/devtool.conf
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.conf
  --- ossp-pkg/lmtp2nntp/devtool.conf	17 Jan 2002 11:53:24 -0000	1.2
  +++ ossp-pkg/lmtp2nntp/devtool.conf	30 Jan 2002 08:38:23 -0000	1.3
  @@ -6,6 +6,9 @@
       @autogen shtool   1.5.4 "1.5.*" all
       @autogen autoconf 2.52  "2.5.*"
   
  +    echo "===> lib_ex (devtool autogen)"
  +    (cd lib_ex && ./devtool autogen)
  +    echo "<=== lib_ex"
       echo "===> lib_str (devtool autogen)"
       (cd lib_str && ./devtool autogen)
       echo "<=== lib_str"
  @@ -26,6 +29,9 @@
       @autoclean shtool
       @autoclean autoconf
   
  +    echo "===> lib_ex (devtool autoclean)"
  +    (cd lib_ex && ./devtool autoclean)
  +    echo "<=== lib_ex"
       echo "===> lib_str (devtool autoclean)"
       (cd lib_str && ./devtool autoclean)
       echo "<=== lib_str"
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	24 Jan 2002 16:25:54 -0000	1.9
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	30 Jan 2002 08:38:23 -0000	1.10
  @@ -45,9 +45,12 @@
   #include "lmtp2nntp_popt.h"
   
   /* third party (linked in) */
  +#include "ex.h"
   #include "str.h"
   #include "l2.h"
  +#include "sa.h"
   #include "var.h"
  +#include "val.h"
   
   /* library version check (compile-time) */
   #define  L2_VERSION_HEX_REQ 0x001200

From ossp-cvs-owner@ossp.org  Wed Jan 30 11:33:37 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C1F91764D8; Wed, 30 Jan 2002 11:33:36 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex ex.h ex.pod ex_test.c
Message-Id: <20020130103336.C1F91764D8@mail.ossp.org>
Date: Wed, 30 Jan 2002 11:33:36 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   30-Jan-2002 11:33:36
  Branch: HEAD                             Handle: 2002013010333600

  Modified files:
    ossp-pkg/ex             ex.h ex.pod ex_test.c

  Log:
    add ex_cleanup clause to ex_try/ex_catch, modelled after Java's "finally"

  Summary:
    Revision    Changes     Path
    1.12        +24 -3      ossp-pkg/ex/ex.h
    1.10        +17 -14     ossp-pkg/ex/ex.pod
    1.7         +30 -0      ossp-pkg/ex/ex_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/ex/ex.h
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 ex.h
  --- ossp-pkg/ex/ex.h	29 Jan 2002 20:10:53 -0000	1.11
  +++ ossp-pkg/ex/ex.h	30 Jan 2002 10:33:36 -0000	1.12
  @@ -96,17 +96,19 @@
       __ex_mctx_t  *ctx_mctx;     /* permanent machine context of enclosing try/catch */
       int           ctx_disabled; /* permanent flag whether exception handling is disabled */
       int           ctx_caught;   /* temporary flag whether exception was caught */
  +    int           ctx_cleanup;  /* temporary flag whether cleanup block was present */
       volatile ex_t ctx_ex;       /* temporary exception storage */
   } ex_ctx_t;
   
   /* the static and dynamic initializers for a context structure */
   #define EX_CTX_INITIALIZER \
  -    { NULL, 0, 0, { NULL, NULL, NULL, NULL, 0, NULL } }
  +    { NULL, 0, 0, 0, { NULL, NULL, NULL, NULL, 0, NULL } }
   #define EX_CTX_INITIALIZE(ctx) \
       do { \
           (ctx)->ctx_mctx         = NULL; \
           (ctx)->ctx_disabled     = 0;    \
           (ctx)->ctx_caught       = 0;    \
  +        (ctx)->ctx_cleanup      = 0;    \
           (ctx)->ctx_ex.ex_class  = NULL; \
           (ctx)->ctx_ex.ex_object = NULL; \
           (ctx)->ctx_ex.ex_value  = NULL; \
  @@ -133,11 +135,12 @@
           __ex_mctx_t __ex_mctx_me; \
           __ex_mctx_en = __ex_ctx_ptr->ctx_mctx; \
           __ex_ctx_ptr->ctx_mctx = &__ex_mctx_me; \
  +        __ex_ctx_ptr->ctx_cleanup = 0; \
           if (__ex_mctx_save(&__ex_mctx_me)) { \
               if (1)
   
  -/* the block for catching an exception */
  -#define ex_catch(e) \
  +/* the optional(!) block for cleanup */
  +#define ex_cleanup \
               else { \
               } \
               __ex_ctx_ptr->ctx_caught = 0; \
  @@ -145,6 +148,24 @@
           else { \
               __ex_mctx_restored(&__ex_mctx_me); \
               __ex_ctx_ptr->ctx_caught = 1; \
  +        } \
  +        __ex_ctx_ptr->ctx_mctx = __ex_mctx_en; \
  +        __ex_ctx()->ctx_cleanup = 1; \
  +        if (1) { \
  +            if (1)
  +
  +/* the block for catching an exception */
  +#define ex_catch(e) \
  +            else { \
  +            } \
  +            if (!(__ex_ctx()->ctx_cleanup)) \
  +                __ex_ctx_ptr->ctx_caught = 0; \
  +        } \
  +        else { \
  +            if (!(__ex_ctx()->ctx_cleanup)) { \
  +                __ex_mctx_restored(&__ex_mctx_me); \
  +                __ex_ctx_ptr->ctx_caught = 1; \
  +            } \
           } \
           __ex_ctx_ptr->ctx_mctx = __ex_mctx_en; \
       } \
  Index: ossp-pkg/ex/ex.pod
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 ex.pod
  --- ossp-pkg/ex/ex.pod	29 Jan 2002 20:10:53 -0000	1.9
  +++ ossp-pkg/ex/ex.pod	30 Jan 2002 10:33:36 -0000	1.10
  @@ -36,13 +36,13 @@
   
   B<ex_t> I<variable>;
   
  -B<ex_try> { ... } B<ex_catch> (I<variable>) { ... }
  +B<ex_try> {...} [B<ex_cleanup> {...}] B<ex_catch> (I<variable>) {...}
   
   B<ex_throw>(I<class>, I<object>, I<value>);
   
   B<ex_rethrow>;
   
  -B<ex_shield> { ... };
  +B<ex_shield> {...};
   
   if (B<ex_catching>) ...
   
  @@ -53,7 +53,7 @@
   B<OSSP ex> is a small ISO-C++ style exception handling library for use
   in the ISO-C language. It allows you to use the paradigm of throwing
   and catching exceptions in order to reduce the amount of error handling
  -code in without making your program less robust. This is achieved
  +code without making your program less robust. This is achieved
   by directly transferring exceptional return codes (and the program
   control flow) from the location where it was raised (throw point) to
   the location where it is handled (catch point) - usually from a deeply
  @@ -133,22 +133,25 @@
   
   =back
   
  -=item B<ex_try> { ... } B<ex_catch> (I<variable>) { ... }
  +=item B<ex_try> {...} [B<ex_cleanup> {...}] B<ex_catch> (I<variable>) {...}
   
   This is the main construct provided by B<OSSP ex>. It is modeled after
   the ISO-C++ C<try>-C<catch> construct which in turn is very similar to
   an ISO-C C<if>-C<else> construct. It consists of an B<ex_try> block
   which forms the dynamic scope of the exception handling (i.e. exceptions
  -thrown there are or from routines called from there are catched) and a
  +directly thrown there or thrown from subroutines are catched), an
  +optional B<ex_cleanup> block for performing cleanup sequences and a
   B<ex_catch> block where the caught exceptions are handled.
   
  -The B<ex_trx> and B<ex_catch> cannot be used seperately, they work only
  -in combination. In contrast to ISO-C++ there is only one B<ex_catch>
  -block and not multiple ones (all B<OSSP ex> exceptions are of the
  -same ISO-C type B<ex_t>). If an exception is caught, it is stored in
  -I<variable> for inspection (or re-throwing) inside the B<ex_catch>
  -block. Although declared outside, the I<variable> is only valid
  -within the B<ex_catch> block. But it can be re-used in following
  +# CONTROL FLOW FIXME!
  +
  +The B<ex_try>, B<ex_cleanup> and B<ex_catch> cannot be used seperately,
  +they work only in combination. In contrast to ISO-C++ there is only
  +one B<ex_catch> block and not multiple ones (all B<OSSP ex> exceptions
  +are of the same ISO-C type B<ex_t>). If an exception is caught, it
  +is stored in I<variable> for inspection (or re-throwing) inside the
  +B<ex_catch> block. Although declared outside, the I<variable> is only
  +valid within the B<ex_catch> block. But it can be re-used in following
   B<ex_try>/B<ex_catch> constructs, of course.
   
   The B<ex_try> block is a regular ISO-C language block, but it is not
  @@ -182,7 +185,7 @@
   I<variable>.ex_value) but with the difference that the C<ex_file>,
   C<ex_line> and C<ex_func> elements of the thrown exception are kept.
   
  -=item B<ex_shield> { ... }
  +=item B<ex_shield> {...}
   
   This directive executes its block while shielding against the throwing
   of exceptions, i.e., in the dynamic scope of B<ex_shield> any
  @@ -232,7 +235,7 @@
   
   This is called by the epilog of B<ex_try> to perform additional
   operations at the new (restored) machine context after an exception was
  -cought. Usually this is a no-operation macro.
  +caught. Usually this is a no-operation macro.
   
   =item B<__ex_mctx_restore>(I<mctx>)
   
  Index: ossp-pkg/ex/ex_test.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 ex_test.c
  --- ossp-pkg/ex/ex_test.c	26 Jan 2002 22:45:37 -0000	1.6
  +++ ossp-pkg/ex/ex_test.c	30 Jan 2002 10:33:36 -0000	1.7
  @@ -140,6 +140,35 @@
           ts_test_fail(TS_CTX, "unexpected catching scope");
   }
   
  +TS_TEST(test_cleanup)
  +{
  +    ex_t ex;
  +    volatile int v1;
  +    int cleanup;
  +
  +    ts_test_check(TS_CTX, "cleanup handling");
  +
  +    v1 = 1234;
  +    cleanup = 0;
  +    ex_try {
  +        v1 = 5678;
  +        ex_throw(1, 2, 3);
  +    }
  +    ex_cleanup {
  +        if (v1 != 5678)
  +            ts_test_fail(TS_CTX, "v1 = %d (!= 5678)", v1);
  +        cleanup = 1;
  +    }
  +    ex_catch (ex) {
  +        if (v1 != 5678)
  +            ts_test_fail(TS_CTX, "v1 = %d (!= 5678)", v1);
  +        if (!(ex.ex_class == (void *)1 && ex.ex_object == (void *)2 && ex.ex_value == (void *)3))
  +            ts_test_fail(TS_CTX, "unexpected exception contents");
  +    }
  +    if (!cleanup)
  +        ts_test_fail(TS_CTX, "ex_cleanup not executed");
  +}
  +
   int main(int argc, char *argv[])
   {
       ts_suite_t *ts;
  @@ -150,6 +179,7 @@
       ts_suite_test(ts, test_value,       "exception value passing");
       ts_suite_test(ts, test_variables,   "variable value preservation");
       ts_suite_test(ts, test_shield,      "exception shielding");
  +    ts_suite_test(ts, test_cleanup,     "cleanup handling");
       n = ts_suite_run(ts);
       ts_suite_free(ts);
       return n;

From ossp-cvs-owner@ossp.org  Wed Jan 30 11:37:55 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B3583764D8; Wed, 30 Jan 2002 11:37:55 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex ex.h
Message-Id: <20020130103755.B3583764D8@mail.ossp.org>
Date: Wed, 30 Jan 2002 11:37:55 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   30-Jan-2002 11:37:55
  Branch: HEAD                             Handle: 2002013010375500

  Modified files:
    ossp-pkg/ex             ex.h

  Log:
    added namespace mapping for cleanup

  Summary:
    Revision    Changes     Path
    1.13        +2  -0      ossp-pkg/ex/ex.h
  ____________________________________________________________________________

  Index: ossp-pkg/ex/ex.h
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 ex.h
  --- ossp-pkg/ex/ex.h	30 Jan 2002 10:33:36 -0000	1.12
  +++ ossp-pkg/ex/ex.h	30 Jan 2002 10:37:55 -0000	1.13
  @@ -209,12 +209,14 @@
   /* optional namespace mapping */
   #if defined(__EX_NS_USE_UCCXX__)
   #define Try      ex_try
  +#define Cleanup  ex_cleanup
   #define Catch    ex_catch
   #define Throw    ex_throw
   #define Rethrow  ex_rethrow
   #define Shield   ex_shield
   #elif defined(__EX_NS_USE_CXX__) || (!defined(__cplusplus) && !defined(__EX_NS_USE_CUSTOM__))
   #define try      ex_try
  +#define cleanup  ex_cleanup
   #define catch    ex_catch
   #define throw    ex_throw
   #define rethrow  ex_rethrow

From ossp-cvs-owner@ossp.org  Wed Jan 30 11:40:07 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8B965764D8; Wed, 30 Jan 2002 11:40:07 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex ex_test.c
Message-Id: <20020130104007.8B965764D8@mail.ossp.org>
Date: Wed, 30 Jan 2002 11:40:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   30-Jan-2002 11:40:07
  Branch: HEAD                             Handle: 2002013010400700

  Modified files:
    ossp-pkg/ex             ex_test.c

  Log:
    resolve name space mapping conflict

  Summary:
    Revision    Changes     Path
    1.8         +4  -4      ossp-pkg/ex/ex_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/ex/ex_test.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 ex_test.c
  --- ossp-pkg/ex/ex_test.c	30 Jan 2002 10:33:36 -0000	1.7
  +++ ossp-pkg/ex/ex_test.c	30 Jan 2002 10:40:07 -0000	1.8
  @@ -144,12 +144,12 @@
   {
       ex_t ex;
       volatile int v1;
  -    int cleanup;
  +    int c;
   
       ts_test_check(TS_CTX, "cleanup handling");
   
       v1 = 1234;
  -    cleanup = 0;
  +    c = 0;
       ex_try {
           v1 = 5678;
           ex_throw(1, 2, 3);
  @@ -157,7 +157,7 @@
       ex_cleanup {
           if (v1 != 5678)
               ts_test_fail(TS_CTX, "v1 = %d (!= 5678)", v1);
  -        cleanup = 1;
  +        c = 1;
       }
       ex_catch (ex) {
           if (v1 != 5678)
  @@ -165,7 +165,7 @@
           if (!(ex.ex_class == (void *)1 && ex.ex_object == (void *)2 && ex.ex_value == (void *)3))
               ts_test_fail(TS_CTX, "unexpected exception contents");
       }
  -    if (!cleanup)
  +    if (!c)
           ts_test_fail(TS_CTX, "ex_cleanup not executed");
   }
   

From ossp-cvs-owner@ossp.org  Wed Jan 30 12:11:10 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 42785764D8; Wed, 30 Jan 2002 12:11:10 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex ex.pod
Message-Id: <20020130111110.42785764D8@mail.ossp.org>
Date: Wed, 30 Jan 2002 12:11:10 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   30-Jan-2002 12:11:10
  Branch: HEAD                             Handle: 2002013011110900

  Modified files:
    ossp-pkg/ex             ex.pod

  Log:
    polishing after ex_cleanup introduction

  Summary:
    Revision    Changes     Path
    1.11        +59 -51     ossp-pkg/ex/ex.pod
  ____________________________________________________________________________

  Index: ossp-pkg/ex/ex.pod
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 ex.pod
  --- ossp-pkg/ex/ex.pod	30 Jan 2002 10:33:36 -0000	1.10
  +++ ossp-pkg/ex/ex.pod	30 Jan 2002 11:11:09 -0000	1.11
  @@ -36,13 +36,13 @@
   
   B<ex_t> I<variable>;
   
  -B<ex_try> {...} [B<ex_cleanup> {...}] B<ex_catch> (I<variable>) {...}
  +B<ex_try> I<BLOCK1> [B<ex_cleanup> I<BLOCK2>] B<ex_catch> (I<variable>) I<BLOCK3>
   
   B<ex_throw>(I<class>, I<object>, I<value>);
   
   B<ex_rethrow>;
   
  -B<ex_shield> {...};
  +B<ex_shield> I<BLOCK>
   
   if (B<ex_catching>) ...
   
  @@ -50,30 +50,31 @@
   
   =head1 DESCRIPTION
   
  -B<OSSP ex> is a small ISO-C++ style exception handling library for use
  -in the ISO-C language. It allows you to use the paradigm of throwing
  -and catching exceptions in order to reduce the amount of error handling
  -code without making your program less robust. This is achieved
  +B<OSSP ex> is a small B<ISO-C++> style exception handling library for
  +use in the B<ISO-C> language. It allows you to use the paradigm of
  +throwing and catching exceptions in order to reduce the amount of error
  +handling code without making your program less robust. This is achieved
   by directly transferring exceptional return codes (and the program
  -control flow) from the location where it was raised (throw point) to
  -the location where it is handled (catch point) - usually from a deeply
  -nested sub-routine to a parent routine. All intermediate routines
  -no longer have to make sure that the exceptional return codes from
  -sub-routines are correctly passed back to the parent.
  +control flow) from the location where the exception is raised (throw
  +point) to the location where it is handled (catch point) -- usually
  +from a deeply nested sub-routine to a parent routine. All intermediate
  +routines no longer have to make sure that the exceptional return codes
  +from sub-routines are correctly passed back to the parent.
   
   =head2 EXCEPTIONS
   
   An exception is a triple E<lt>I<class>,I<object>,I<value>E<gt> where
   I<class> identifies the class of the exception thrower, I<object>
   identifies the particular class instance of the exception thrower, and
  -I<value> is the exceptional return code the thrower wants to send to the
  -catcher. All three parts are of type C<void *> internally, but every
  -value can be used which can be (automatically) casted to a C<void *>.
  -Exceptions are created on-the-fly by the B<ex_throw> command.
  +I<value> is the exceptional return code value the thrower wants to send
  +to the catcher. All three parts are of type "C<void *>" internally,
  +but every value can be used which can be (automatically) casted to the
  +B<ISO-C> type "C<void *>". Exceptions are created on-the-fly by the
  +B<ex_throw> command.
   
   =head2 APPLICATION PROGRAMMER INTERFACE (API)
   
  -The B<OSSP ex> API consists of four different elements:
  +The B<OSSP ex> API consists of the following elements:
   
   =over 4
   
  @@ -133,38 +134,45 @@
   
   =back
   
  -=item B<ex_try> {...} [B<ex_cleanup> {...}] B<ex_catch> (I<variable>) {...}
  +=item B<ex_try> I<BLOCK1> [B<ex_cleanup> I<BLOCK2>] B<ex_catch> (I<variable>) I<BLOCK3>
   
   This is the main construct provided by B<OSSP ex>. It is modeled after
  -the ISO-C++ C<try>-C<catch> construct which in turn is very similar to
  -an ISO-C C<if>-C<else> construct. It consists of an B<ex_try> block
  -which forms the dynamic scope of the exception handling (i.e. exceptions
  -directly thrown there or thrown from subroutines are catched), an
  -optional B<ex_cleanup> block for performing cleanup sequences and a
  -B<ex_catch> block where the caught exceptions are handled.
  -
  -# CONTROL FLOW FIXME!
  -
  +the B<ISO-C++> C<try>-C<catch> clause which in turn is very similar to
  +an B<ISO-C> C<if>-C<else> clause. It consists of an B<ex_try> block
  +I<BLOCK1> which forms the dynamic scope of the exception handling (i.e.
  +exceptions directly thrown there or thrown from its sub-routines are
  +catched), an optional B<ex_cleanup> block I<BLOCK2> for performing
  +cleanup operations and an B<ex_catch> block I<BLOCK3> where the caught
  +exceptions are handled.
  +
  +The control flow in case no exception is thrown is simply I<BLOCK1>,
  +optionally followed by I<BLOCK2>. I<BLOCK3> is skipped. The control flow
  +in case an exception is thrown is: I<BLOCK1> (up to the statement where
  +the exception is thrown), optionally followed by I<BLOCK2>, followed by
  +I<BLOCK3>.
  +    
   The B<ex_try>, B<ex_cleanup> and B<ex_catch> cannot be used seperately,
  -they work only in combination. In contrast to ISO-C++ there is only
  -one B<ex_catch> block and not multiple ones (all B<OSSP ex> exceptions
  -are of the same ISO-C type B<ex_t>). If an exception is caught, it
  -is stored in I<variable> for inspection (or re-throwing) inside the
  -B<ex_catch> block. Although declared outside, the I<variable> is only
  -valid within the B<ex_catch> block. But it can be re-used in following
  -B<ex_try>/B<ex_catch> constructs, of course.
  -
  -The B<ex_try> block is a regular ISO-C language block, but it is not
  -allowed to jump into it via C<goto> or C<longjmp>(3) or out of it via
  -C<return>, C<goto> or C<longjmp>(3) because there is some hidden setup
  -and cleanup that needs to be done by B<OSSP ex> regardless of whether an
  -exception is caught. Jumping into an B<ex_try> clause would avoid doing
  -the setup, and jumping out of it would avoid doing the cleanup. In both
  -cases the result is a broken exception facility. Nevertheless you are
  -allowed to nest B<ex_try> clauses.
  -
  -The B<ex_catch> block is a regular ISO-C language block without any
  -restrictions.
  +they work only in combination. And in contrast to B<ISO-C++> there
  +is only one B<ex_catch> block and not multiple ones (all B<OSSP ex>
  +exceptions are of the same B<ISO-C> type B<ex_t>). If an exception is
  +caught, it is stored in I<variable> for inspection (or re-throwing)
  +inside the B<ex_catch> block. Although declared outside, the I<variable>
  +is only valid within the B<ex_catch> block. But it can be re-used in
  +following B<ex_try>/B<ex_catch> constructs, of course.
  +
  +The B<ex_try> block is a regular B<ISO-C> language block of
  +statement(s), but it is not allowed to jump into it via C<goto> or
  +C<longjmp>(3) or out of it via C<return>, C<goto> or C<longjmp>(3)
  +because there is some hidden setup and cleanup that needs to be done by
  +B<OSSP ex> regardless of whether an exception is caught. Jumping into
  +an B<ex_try> clause would avoid doing the setup, and jumping out of it
  +would avoid doing the cleanup. In both cases the result is a broken
  +exception facility. Nevertheless you are allowed to nest B<ex_try>
  +clauses.
  +
  +The B<ex_cleanup> and B<ex_catch> blocks are regular B<ISO-C> language
  +block of statement(s) without any restrictions. You are even allowed to
  +throw (and in the B<ex_catch> block to re-throw) an exception.
   
   =item B<ex_throw>(I<class>, I<object>, I<value>);
   
  @@ -185,11 +193,11 @@
   I<variable>.ex_value) but with the difference that the C<ex_file>,
   C<ex_line> and C<ex_func> elements of the thrown exception are kept.
   
  -=item B<ex_shield> {...}
  +=item B<ex_shield> I<BLOCK>
   
  -This directive executes its block while shielding against the throwing
  -of exceptions, i.e., in the dynamic scope of B<ex_shield> any
  -B<ex_throw> operation is ignored. 
  +This directive executes I<BLOCK> while shielding it against the throwing
  +of exceptions, i.e., inside the dynamic scope of B<ex_shield> all
  +B<ex_throw> operations are ignored.
   
   =item B<ex_catching>
   
  @@ -246,7 +254,7 @@
   =back
   
   The default implementation (define C<__EX_MCTX_USE_SJLJ__> or as long
  -C<__EX_MCTX_USE_CUSTOM__> is not defined) uses B<ISO C> jmp_buf(3):
  +C<__EX_MCTX_USE_CUSTOM__> is not defined) uses B<ISO-C> jmp_buf(3):
   
    #define __ex_mctx_struct         jmp_buf jb;
    #define __ex_mctx_save(mctx)     (setjmp((mctx)->jb) == 0)
  @@ -295,7 +303,7 @@
   B<ex_> prefix for the API macros B<ex_try>, B<ex_catch>, B<ex_throw>,
   B<ex_rethrow> and B<ex_shield> sometimes have a unpleasant optical
   appearance. Especially because B<OSSP rc> is modeled after the exception
  -facility in ISO C++ where there is no such prefix on the directives.
  +facility in B<ISO-C++> where there is no such prefix on the directives.
   
   For this B<OSSP ex> optionally provides the ability to provide
   additional namespace mappings for those API macros. By default (define

From ossp-cvs-owner@ossp.org  Wed Jan 30 12:55:53 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 65259764D8; Wed, 30 Jan 2002 12:55:53 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex ex.pod
Message-Id: <20020130115553.65259764D8@mail.ossp.org>
Date: Wed, 30 Jan 2002 12:55:53 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   30-Jan-2002 12:55:53
  Branch: HEAD                             Handle: 2002013011555200

  Modified files:
    ossp-pkg/ex             ex.pod

  Log:
    forget to mention 'cleanup' in namespace mapping

  Summary:
    Revision    Changes     Path
    1.12        +8  -7      ossp-pkg/ex/ex.pod
  ____________________________________________________________________________

  Index: ossp-pkg/ex/ex.pod
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 ex.pod
  --- ossp-pkg/ex/ex.pod	30 Jan 2002 11:11:09 -0000	1.11
  +++ ossp-pkg/ex/ex.pod	30 Jan 2002 11:55:52 -0000	1.12
  @@ -300,18 +300,19 @@
   
   B<OSSP ex> implementation consistently uses the B<ex_>, B<__ex_>
   and B<__EX_> prefixes for namespace protection. But at least the
  -B<ex_> prefix for the API macros B<ex_try>, B<ex_catch>, B<ex_throw>,
  -B<ex_rethrow> and B<ex_shield> sometimes have a unpleasant optical
  -appearance. Especially because B<OSSP rc> is modeled after the exception
  -facility in B<ISO-C++> where there is no such prefix on the directives.
  +B<ex_> prefix for the API macros B<ex_try>, B<ex_cleanup>, B<ex_catch>,
  +B<ex_throw>, B<ex_rethrow> and B<ex_shield> sometimes have a unpleasant
  +optical appearance. Especially because B<OSSP rc> is modeled after the
  +exception facility in B<ISO-C++> where there is no such prefix on the
  +directives.
   
   For this B<OSSP ex> optionally provides the ability to provide
   additional namespace mappings for those API macros. By default (define
   C<__EX_NS_USE_CXX__> or as long as C<__EX_NS_USE_CUSTOM__> and
   C<__cplusplus> is not defined) you can additional C++ style macros
  -named B<catch>, B<throw>, B<rethrow> and B<shield>. As an alternative
  -you can define C<__EX_NS_USE_UCCXX__> to get the same but with an (more
  -namespace safe) upper case first letter.
  +named B<catch>, B<cleanup>, B<throw>, B<rethrow> and B<shield>. As an
  +alternative you can define C<__EX_NS_USE_UCCXX__> to get the same but
  +with an (more namespace safe) upper case first letter.
   
   =head1 MULTITHREADING ENVIRONMENTS
   

From ossp-cvs-owner@ossp.org  Wed Jan 30 13:17:59 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 422F1764D8; Wed, 30 Jan 2002 13:17:59 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex ex.pod
Message-Id: <20020130121759.422F1764D8@mail.ossp.org>
Date: Wed, 30 Jan 2002 13:17:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   30-Jan-2002 13:17:59
  Branch: HEAD                             Handle: 2002013012175800

  Modified files:
    ossp-pkg/ex             ex.pod

  Log:
    replace MT stuff

  Summary:
    Revision    Changes     Path
    1.13        +109 -104   ossp-pkg/ex/ex.pod
  ____________________________________________________________________________

  Index: ossp-pkg/ex/ex.pod
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 ex.pod
  --- ossp-pkg/ex/ex.pod	30 Jan 2002 11:55:52 -0000	1.12
  +++ ossp-pkg/ex/ex.pod	30 Jan 2002 12:17:58 -0000	1.13
  @@ -328,117 +328,122 @@
   
   =head2 GNU pth
   
  -Using B<OSSP ex> with B<GNU pth> is straight-forward. One just have to
  -wrap pth_init() and pth_spawn() to tie the exception facility to the
  -threading facility.
  +Using B<OSSP ex> with B<GNU pth> is straight-forward, because B<GNU pth>
  +already has support for B<OSSP ex> built-in. All which is needed is that
  +B<GNU pth> is configured with the Autoconf option C<--with-ex>. Then
  +each thread has its own B<OSSP ex> exception context.
  +
  +=head2 POSIX pthreads
  +
  +Using B<OSSP ex> inside a standard B<POSIX pthreads> environment is
  +also straight-forward, although it requires additional coding. What
  +you basically have to do is to make sure that the B<__ex_ctx> becomes
  +a per-thread context and that B<__ex_terminate> terminates only the
  +current thread. To get an impression, a small utility library for this
  +follows:
   
   =over 4
   
  -=item F<pth_ex.h>
  +=item F<pthread_ex.h>
   
  - #ifndef __PTH_EX_H__
  - #define __PTH_EX_H__
  - 
  - #include "pth.h"
  - 
  - int   pth_init_ex  (void);
  - pth_t pth_spawn_ex (pth_attr_t attr, void *(*entry)(void *), void *arg);
  - 
  - #ifndef PTH_EX_INTERNAL
  - #define pth_init  pth_ex_init
  - #define pth_spawn pth_ex_spawn
  - #endif
  - 
  - #endif /* __PTH_EX_H__ */
  -
  -=item F<pth_ex.c>
  -
  - #include <stdlib.h>
  - 
  - #define PTH_EX_INTERNAL
  - #include "pth_ex.h"
  - #include "pth.h"
  - #include "ex.h"
  - 
  - /* context storage key */
  - static pth_key_t pth_ex_ctx_key;
  - 
  - /* context destructor */
  - static void pth_ex_ctx_destroy(void *data)
  - {
  -     if (data != NULL)
  -         free(data);
  -     return;
  - }
  - 
  - /* callback: context fetching */
  - static ex_ctx_t *pth_ex_ctx(void)
  - {
  -     return (ex_ctx_t *)pth_key_getdata(pth_ex_ctx_key);
  - }
  - 
  - /* callback: termination */
  - static void pth_ex_terminate(ex_t *e)
  - {
  -     pth_exit(e->ex_value);
  - }
  - 
  - /* pth_init() wrapper */
  - int pth_init_ex(void)
  - {
  -     int rc;
  - 
  -     /* perform original operation */
  -     rc = pth_init();
  - 
  -     /* additionally create thread data key and override OSSP ex callbacks */
  -     pth_key_create(&pth_ex_ctx_key, pth_ex_ctx_destroy);
  -     __ex_ctx       = pth_ex_ctx;
  -     __ex_terminate = pth_ex_terminate;
  - 
  -     return rc;
  - }
  - 
  - /* internal thread entry wrapper information */
  - typedef struct {
  -     void *(*entry)(void *);
  -     void *arg;
  - } pth_spawn_ex_t;
  - 
  - /* internal thread entry wrapper */
  - static void *pth_spawn_wrapper(void *arg)
  - {
  -     pth_spawn_ex_t *wrapper;
  -     ex_ctx_t *ex_ctx;
  - 
  -     /* create per-thread exception context */
  -     wrapper = (pth_spawn_ex_t *)arg;
  -     ex_ctx = (ex_ctx_t *)malloc(sizeof(ex_ctx_t));
  -     EX_CTX_INITIALIZE(ex_ctx);
  -     pth_key_setdata(pth_ex_ctx_key, ex_ctx);
  - 
  -     /* perform original operation */
  -     return wrapper->entry(wrapper->arg);
  - }
  - 
  - /* pth_spawn() wrapper */
  - pth_t pth_spawn_ex(pth_attr_t attr, void *(*entry)(void *), void *arg)
  - {
  -     pth_spawn_ex_t wrapper;
  - 
  -     /* spawn thread but execute start function through wrapper */
  -     wrapper.entry = entry;
  -     wrapper.arg   = arg;
  -     return pth_spawn(attr, pth_spawn_wrapper, &wrapper);
  - }
  +#ifndef __PTHREAD_EX_H__
  +#define __PTHREAD_EX_H__
   
  -=back
  +#include <pthread.h>
   
  -=head2 POSIX pthreads
  +int pthread_init_ex   (void);
  +int pthread_create_ex (pthread_t *thread, const pthread_attr_t *attr, void *(*entry)(void *), void *arg);
  +
  +#ifndef PTHREAD_EX_INTERNAL
  +#define pthread_init   pthread_init_ex
  +#define pthread_create pthread_create_ex
  +#endif
  +
  +#endif /* __PTHREAD_EX_H__ */
  +
  +=item F<pthread_ex.c>
  +
  +#include <stdlib.h>
  +#include <pthread.h>
  +
  +#define PTHREAD_EX_INTERNAL
  +#include "pthread_ex.h"
  +#include "ex.h"
  +
  +/* context storage key */
  +static pthread_key_t pthread_ex_ctx_key;
  +
  +/* context destructor */
  +static void pthread_ex_ctx_destroy(void *data)
  +{
  +    if (data != NULL)
  +        free(data);
  +    return;
  +}
  +
  +/* callback: context fetching */
  +static ex_ctx_t *pthread_ex_ctx(void)
  +{
  +    return (ex_ctx_t *)pthread_getspecific(pthread_ex_ctx_key);
  +}
  +
  +/* callback: termination */
  +static void pthread_ex_terminate(ex_t *e)
  +{
  +    pthread_exit(e->ex_value);
  +}
  +
  +/* pthread init */
  +int pthread_init_ex(void)
  +{
  +    int rc;
  +
  +    /* additionally create thread data key and override OSSP ex callbacks */
  +    pthread_key_create(&pthread_ex_ctx_key, pthread_ex_ctx_destroy);
  +    __ex_ctx       = pthread_ex_ctx;
  +    __ex_terminate = pthread_ex_terminate;
  +
  +    return rc;
  +}
  +
  +/* internal thread entry wrapper information */
  +typedef struct {
  +    void *(*entry)(void *);
  +    void *arg;
  +} pthread_create_ex_t;
  +
  +/* internal thread entry wrapper */
  +static void *pthread_create_wrapper(void *arg)
  +{
  +    pthread_create_ex_t *wrapper;
  +    ex_ctx_t *ex_ctx;
  +
  +    /* create per-thread exception context */
  +    wrapper = (pthread_create_ex_t *)arg;
  +    ex_ctx = (ex_ctx_t *)malloc(sizeof(ex_ctx_t));
  +    EX_CTX_INITIALIZE(ex_ctx);
  +    pthread_setspecific(pthread_ex_ctx_key, ex_ctx);
  +
  +    /* perform original operation */
  +    return wrapper->entry(wrapper->arg);
  +}
  +
  +/* pthread_create() wrapper */
  +int pthread_create_ex(pthread_t *thread, const pthread_attr_t *attr, void *(*entry)(void *), void *arg)
  +{
  +    pthread_create_ex_t wrapper;
  +
  +    /* spawn thread but execute start function through wrapper */
  +    wrapper.entry = entry;
  +    wrapper.arg   = arg;
  +    return pthread_create(thread, attr, pthread_create_wrapper, &wrapper);
  +}
  +
  +=back
   
  -Using B<OSSP ex> inside a B<POSIX pthreads> environment is identical to
  -using it inside B<GNU pth>. You can use the same solution as above by
  -just replacing all B<pth_> prefixes with B<pthread_> prefixes.
  +Now all which is required is that you include F<pthread_ex.h> after
  +the standard F<pthread.h> header and to call B<pthread_init>() once at
  +startup of your program.
   
   =head1 EXAMPLES
   

From ossp-cvs-owner@ossp.org  Wed Jan 30 13:28:37 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7A07C764D8; Wed, 30 Jan 2002 13:28:37 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex ex.pod
Message-Id: <20020130122837.7A07C764D8@mail.ossp.org>
Date: Wed, 30 Jan 2002 13:28:37 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   30-Jan-2002 13:28:37
  Branch: HEAD                             Handle: 2002013012283700

  Modified files:
    ossp-pkg/ex             ex.pod

  Log:
    remember the volatile situation

  Summary:
    Revision    Changes     Path
    1.14        +10 -0      ossp-pkg/ex/ex.pod
  ____________________________________________________________________________

  Index: ossp-pkg/ex/ex.pod
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 ex.pod
  --- ossp-pkg/ex/ex.pod	30 Jan 2002 12:17:58 -0000	1.13
  +++ ossp-pkg/ex/ex.pod	30 Jan 2002 12:28:37 -0000	1.14
  @@ -174,6 +174,16 @@
   block of statement(s) without any restrictions. You are even allowed to
   throw (and in the B<ex_catch> block to re-throw) an exception.
   
  +There is just one subtle portability detail you have to remember about
  +B<ex_try> blocks: all accessible B<ISO-C> objects have the (expected)
  +values as of the time B<ex_throw> was called, except that the values of
  +objects of automatic storage invocation duration that do not have the
  +C<volatile> storage class I<and> have been changed between the B<ex_try>
  +invocation and B<ex_throw> are indeterminate. This is both because
  +you usually do not know which commands in the B<ex_try> were already
  +successful before the exception was thrown and because the underlying
  +B<ISO-C> setjmp(3) facility applies those restrictions.
  +
   =item B<ex_throw>(I<class>, I<object>, I<value>);
   
   This is second main construct. It builds an exception from the supplied

From ossp-cvs-owner@ossp.org  Wed Jan 30 13:34:42 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 33FAF764D8; Wed, 30 Jan 2002 13:34:42 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex ex.pod
Message-Id: <20020130123442.33FAF764D8@mail.ossp.org>
Date: Wed, 30 Jan 2002 13:34:42 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   30-Jan-2002 13:34:42
  Branch: HEAD                             Handle: 2002013012344100

  Modified files:
    ossp-pkg/ex             ex.pod

  Log:
    be correct and mention version number of Pth

  Summary:
    Revision    Changes     Path
    1.15        +4  -4      ossp-pkg/ex/ex.pod
  ____________________________________________________________________________

  Index: ossp-pkg/ex/ex.pod
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 ex.pod
  --- ossp-pkg/ex/ex.pod	30 Jan 2002 12:28:37 -0000	1.14
  +++ ossp-pkg/ex/ex.pod	30 Jan 2002 12:34:41 -0000	1.15
  @@ -334,14 +334,14 @@
   There are two issues: which machine context to use and where to
   store the exception context to make sure exception throwing happens
   only within a thread and does not conflict with the regular thread
  -dispatching. Here are two examples:
  +dispatching.
   
   =head2 GNU pth
   
   Using B<OSSP ex> with B<GNU pth> is straight-forward, because B<GNU pth>
  -already has support for B<OSSP ex> built-in. All which is needed is that
  -B<GNU pth> is configured with the Autoconf option C<--with-ex>. Then
  -each thread has its own B<OSSP ex> exception context.
  +1.5 (or higher) already has support for B<OSSP ex> built-in. All which
  +is needed is that B<GNU pth> is configured with the Autoconf option
  +C<--with-ex>. Then each thread has its own B<OSSP ex> exception context.
   
   =head2 POSIX pthreads
   

From ossp-cvs-owner@ossp.org  Wed Jan 30 13:54:31 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 31C8E764D8; Wed, 30 Jan 2002 13:54:31 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth .cvsignore ChangeLog HACKING Makefile.in aclo...
Message-Id: <20020130125431.31C8E764D8@mail.ossp.org>
Date: Wed, 30 Jan 2002 13:54:31 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   30-Jan-2002 13:54:31
  Branch: HEAD                             Handle: 197001010100001012391664

  Added files:
    ossp-pkg/pth            configure.ac devtool devtool.conf devtool.func
  Modified files:
    ossp-pkg/pth            .cvsignore ChangeLog HACKING Makefile.in
                            aclocal.m4 pth.m4 pth.pod pth_acdef.h.in
  Removed files:
    ossp-pkg/pth            config.guess config.sub configure configure.in
                            ltconfig ltmain.sh pth-config.1 pth.3
                            pthread-config.1 pthread.3 shtool

  Log:
    Woohhooo! Major GNU Pth source tree overhauling:
    - Removed all generated files from CVS.
    - Use OSSP devtool stuff to re-generate files on demand.
    - Switched to Autoconf 2.52 and Libtool 1.4.2 environment.

  Summary:
    Revision    Changes     Path
    1.19        +1  -0      ossp-pkg/pth/.cvsignore
    1.559       +4  -0      ossp-pkg/pth/ChangeLog
    1.13        +2  -2      ossp-pkg/pth/HACKING
    1.145       +37 -127    ossp-pkg/pth/Makefile.in
    1.93        +59 -151    ossp-pkg/pth/aclocal.m4
    NONE        +0  -983    ossp-pkg/pth/config.guess
    NONE        +0  -1222   ossp-pkg/pth/config.sub
    NONE        +0  -0      ossp-pkg/pth/configure
    1.1         +612 -0     ossp-pkg/pth/configure.ac
    NONE        +0  -607    ossp-pkg/pth/configure.in
    1.1         +47 -0      ossp-pkg/pth/devtool
    1.1         +55 -0      ossp-pkg/pth/devtool.conf
    1.1         +72 -0      ossp-pkg/pth/devtool.func
    NONE        +0  -3114   ossp-pkg/pth/ltconfig
    NONE        +0  -4024   ossp-pkg/pth/ltmain.sh
    NONE        +0  -247    ossp-pkg/pth/pth-config.1
    NONE        +0  -2239   ossp-pkg/pth/pth.3
    1.9         +1  -1      ossp-pkg/pth/pth.m4
    1.152       +8  -8      ossp-pkg/pth/pth.pod
    1.18        +96 -91     ossp-pkg/pth/pth_acdef.h.in
    NONE        +0  -240    ossp-pkg/pth/pthread-config.1
    NONE        +0  -8318   ossp-pkg/pth/pthread.3
    NONE        +0  -1548   ossp-pkg/pth/shtool
  ____________________________________________________________________________

  Index: ossp-pkg/pth/.cvsignore
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 .cvsignore
  --- ossp-pkg/pth/.cvsignore	31 Aug 1999 10:51:14 -0000	1.18
  +++ ossp-pkg/pth/.cvsignore	30 Jan 2002 12:54:21 -0000	1.19
  @@ -27,3 +27,4 @@
   *.la
   core
   *.core
  +libtool.m4
  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.558 -r1.559 ChangeLog
  --- ossp-pkg/pth/ChangeLog	27 Jan 2002 16:11:42 -0000	1.558
  +++ ossp-pkg/pth/ChangeLog	30 Jan 2002 12:54:21 -0000	1.559
  @@ -19,6 +19,10 @@
       | |_ ___) |
     __|_(_)____/____________________________________________________________
   
  +   *) Removed all generated files from CVS.
  +      Use OSSP devtool stuff to re-generate files on demand.
  +      Switched to Autoconf 2.52 and Libtool 1.4.2 environment.
  +      [Ralf S. Engelschall]
   
        _  _  _   
       / || || |  
  Index: ossp-pkg/pth/HACKING
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 HACKING
  --- ossp-pkg/pth/HACKING	24 Mar 2001 14:56:46 -0000	1.12
  +++ ossp-pkg/pth/HACKING	30 Jan 2002 12:54:21 -0000	1.13
  @@ -94,8 +94,8 @@
     config.guess .......... Autoconf platform guessing tool (part I)
     config.param .......... Autoconf command line parameter collections
     config.sub ............ Autoconf platform guessing tool (part II)
  -  configure ............. Autoconf script (pre-generated from configure.in)
  -  configure.in .......... Autoconf script source
  +  configure ............. Autoconf script (pre-generated from configure.ac)
  +  configure.ac .......... Autoconf script source
   
     ltconfig .............. Libtool configuration script
     ltmain.sh ............. Libtool main template
  Index: ossp-pkg/pth/Makefile.in
  ============================================================
  $ cvs diff -u -r1.144 -r1.145 Makefile.in
  --- ossp-pkg/pth/Makefile.in	27 Jan 2002 11:03:39 -0000	1.144
  +++ ossp-pkg/pth/Makefile.in	30 Jan 2002 12:54:21 -0000	1.145
  @@ -293,6 +293,7 @@
   #   clean the source tree by removing really all generate stuff
   realclean: distclean
   	$(RM) $(TARGET_MANS)
  +	./devtool autoclean
   
   #   give hints what to do as the next step
   what-next:
  @@ -372,54 +373,6 @@
   	./test_sfio
   test-pthread: test_pthread
   	./test_pthread
  -
  -#   GNU compat targets
  -check: test
  -installcheck:
  -installdirs: install-dirs
  -install-strip: install
  -mostlyclean: clean
  -maintainer-clean: realclean
  -info:
  -dvi:
  -TAGS:
  -
  -##
  -##  ____ DEVELOPER TARGETS ___________________________________________
  -##  (THIS IS NOT INTENDED TO BE RUN BY END USERS)
  -##
  -
  -#   fixup the permissions in the source tree
  -fixperm:
  -	@echo "Fixing permissions in source tree"
  -	@$(SHTOOL) fixperm *
  -
  -#   update Autoconf files
  -update-autoconf: configure pth_acdef.h.in
  -configure: configure.in
  -	$(RM) configure
  -	autoconf
  -pth_acdef.h.in: configure.in acconfig.h acheader.m4
  -	$(RM) pth_acdef.h.in
  -	cat acheader.m4 configure.in | autoheader - >pth_acdef.h.in
  -
  -#   update build tools
  -update-tools:
  -	@$(RM) shtool ltmain.sh ltconfig
  -	@$(MAKE) $(MKFLAGS) shtool ltmain.sh ltconfig
  -shtool:
  -	shtoolize -o shtool echo version scpp mkdir install fixperm tarball
  -ltmain.sh:
  -	@F=`libtoolize -n -c -f | grep 'cp.*ltmain.sh' |\
  -	    $(SED) -e 's;[^/]*;;' -e 's; .*;;'`; \
  -	$(ECHO) "ltmain.sh <-- $$F"; cat $$F |\
  -	$(SED) -e 's:/bin/sh; then:/bin/sh || test ".`$(ECHO) $$nonopt | grep shtool`" != .;then:' \
  -	    -e 's:exec \$$SHELL \$$0 --finish:exit 0 #:' >ltmain.sh
  -ltconfig:
  -	@F=`libtoolize -n -c -f | grep 'cp.*ltconfig' | $(SED) -e 's;[^/]*;;' -e 's; .*;;'`; \
  -	$(ECHO) "ltconfig <-- $$F"; $(CAT) $$F >ltconfig
  -
  -#   debug the test programs
   debug: debug-std
   debug-std: test_std
   	TEST=test_std && $(_DEBUG)
  @@ -440,38 +393,16 @@
   debug-pthread: test_pthread
   	TEST=test_pthread && $(_DEBUG)
   
  -#   roll the release or snapshot tarball
  -dist: distclean fixperm
  -	@V=`$(SHTOOL) version -l c -d short $(_VERSION_FILE)`; NAME="pth-$$V"; \
  -	$(ECHO) "Rolling RELEASE tarball $$NAME.tar.gz"; $(_TARBALL)
  -snap: distclean fixperm
  -	@V=`$(SHTOOL) version -l c -d short $(_VERSION_FILE)`; NAME="pth-$$V-SNAP"; \
  -	$(ECHO) "Rolling SNAPSHOT tarball $$NAME.tar.gz"; $(_TARBALL)
  -
  -#   increase or update version information
  -new-version:
  -	@V="$(VERSION)"; \
  -	if [ ".$$V" != . ]; then \
  -		OPT="-s$$V"; \
  -	else \
  -		OPT="-e"; \
  -	fi; \
  -	$(_VERSION)
  -update-version:
  -	@OPT="-s`$(SHTOOL) version -lc -dshort $(_VERSION_FILE)`" && $(_VERSION)
  -
  -#   make a striptease
  -striptease:
  -	@$(PERL) striptease.pl
  -
  -#   create dependencies
  -depend:
  -	$(CP) Makefile.in Makefile.in.bak \
  -	&& $(SED) -ne '1,/^# DO NOT REMOVE/p' Makefile.in > Makefile.new \
  -	&& $(CC) -MM $(CPPFLAGS) $(CFLAGS) *.c |\
  -	   $(SED) -e 's/^\(pth_.*\)\.o:/\1.lo:/' >> Makefile.new \
  -	&& $(CP) Makefile.new Makefile.in \
  -	&& $(RM) Makefile.new
  +#   GNU compat targets
  +check: test
  +installcheck:
  +installdirs: install-dirs
  +install-strip: install
  +mostlyclean: clean
  +maintainer-clean: realclean
  +info:
  +dvi:
  +TAGS:
   
   ##
   ##  ____ DEPENDENCY AREA ____________________________________________
  @@ -481,58 +412,37 @@
   $(LOBJS): Makefile
   
   # DO NOT REMOVE
  -pth_attr.lo: pth_attr.c pth_p.h pth_vers.c pth.h pth_acdef.h \
  - pth_acmac.h
  -pth_cancel.lo: pth_cancel.c pth_p.h pth_vers.c pth.h pth_acdef.h \
  - pth_acmac.h
  -pth_clean.lo: pth_clean.c pth_p.h pth_vers.c pth.h pth_acdef.h \
  - pth_acmac.h
  -pth_compat.lo: pth_compat.c pth_p.h pth_vers.c pth.h pth_acdef.h \
  - pth_acmac.h
  -pth_data.lo: pth_data.c pth_p.h pth_vers.c pth.h pth_acdef.h \
  - pth_acmac.h
  -pth_debug.lo: pth_debug.c pth_p.h pth_vers.c pth.h pth_acdef.h \
  - pth_acmac.h
  -pth_errno.lo: pth_errno.c pth_p.h pth_vers.c pth.h pth_acdef.h \
  - pth_acmac.h
  -pth_event.lo: pth_event.c pth_p.h pth_vers.c pth.h pth_acdef.h \
  - pth_acmac.h
  -pth_ext.lo: pth_ext.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  -pth_fork.lo: pth_fork.c pth_p.h pth_vers.c pth.h pth_acdef.h \
  - pth_acmac.h
  -pth_high.lo: pth_high.c pth_p.h pth_vers.c pth.h pth_acdef.h \
  - pth_acmac.h
  -pth_lib.lo: pth_lib.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  -pth_mctx.lo: pth_mctx.c pth_p.h pth_vers.c pth.h pth_acdef.h \
  - pth_acmac.h
  -pth_msg.lo: pth_msg.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  -pth_pqueue.lo: pth_pqueue.c pth_p.h pth_vers.c pth.h pth_acdef.h \
  - pth_acmac.h
  -pth_ring.lo: pth_ring.c pth_p.h pth_vers.c pth.h pth_acdef.h \
  - pth_acmac.h
  -pth_sched.lo: pth_sched.c pth_p.h pth_vers.c pth.h pth_acdef.h \
  - pth_acmac.h
  -pth_string.lo: pth_string.c pth_p.h pth_vers.c pth.h pth_acdef.h \
  - pth_acmac.h
  -pth_sync.lo: pth_sync.c pth_p.h pth_vers.c pth.h pth_acdef.h \
  - pth_acmac.h
  -pth_syscall.lo: pth_syscall.c pth_p.h pth_vers.c pth.h pth_acdef.h \
  - pth_acmac.h
  -pth_tcb.lo: pth_tcb.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  -pth_time.lo: pth_time.c pth_p.h pth_vers.c pth.h pth_acdef.h \
  - pth_acmac.h
  -pth_util.lo: pth_util.c pth_p.h pth_vers.c pth.h pth_acdef.h \
  - pth_acmac.h
  -pth_vers.lo: pth_vers.c
  -pthread.o: pthread.c pthread.h pth_p.h pth_vers.c pth.h pth_acdef.h \
  - pth_acmac.h
  +pth_attr.lo: pth_attr.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_cancel.o: pth_cancel.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_clean.o: pth_clean.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_compat.o: pth_compat.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_data.o: pth_data.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_debug.o: pth_debug.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_errno.o: pth_errno.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_event.o: pth_event.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_ext.o: pth_ext.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_fork.o: pth_fork.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_high.o: pth_high.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_lib.o: pth_lib.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_mctx.o: pth_mctx.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_msg.o: pth_msg.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_pqueue.o: pth_pqueue.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_ring.o: pth_ring.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_sched.o: pth_sched.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_string.o: pth_string.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_sync.o: pth_sync.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_syscall.o: pth_syscall.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_tcb.o: pth_tcb.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_time.o: pth_time.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_util.o: pth_util.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_vers.o: pth_vers.c pth_vers.c
  +pthread.o: pthread.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
   test_common.o: test_common.c pth.h test_common.h
   test_httpd.o: test_httpd.c pth.h test_common.h
   test_misc.o: test_misc.c pth.h
   test_mp.o: test_mp.c pth.h test_common.h
   test_philo.o: test_philo.c pth.h test_common.h
  -test_pthread.o: test_pthread.c pthread.h
  -test_select.o: test_select.c pth.h
  +test_pthread.o: test_pthread.c test_select.o: test_select.c pth.h
   test_sfio.o: test_sfio.c pth.h
   test_sig.o: test_sig.c pth.h
   test_std.o: test_std.c pth.h
  Index: ossp-pkg/pth/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.92 -r1.93 aclocal.m4
  --- ossp-pkg/pth/aclocal.m4	27 Jan 2002 11:03:40 -0000	1.92
  +++ ossp-pkg/pth/aclocal.m4	30 Jan 2002 12:54:21 -0000	1.93
  @@ -22,7 +22,6 @@
   dnl ##
   dnl ##  aclocal.m4: Pth Autoconf macros
   dnl ##
  -divert(-1)
                           dnl # ``"Reuse an expert's code" is the right
                           dnl #   advice for most people. But it's a useless 
                           dnl #   advice for the experts writing the code 
  @@ -32,11 +31,11 @@
   dnl ##
   dnl ##  Display Configuration Headers
   dnl ##
  -dnl ##  configure.in:
  +dnl ##  configure.ac:
   dnl ##    AC_MSG_PART(<text>)
   dnl ##
   
  -define(AC_MSG_PART,[dnl
  +m4_define(AC_MSG_PART,[dnl
   if test ".$enable_subdir" != .yes; then
       AC_MSG_RESULT()
       AC_MSG_RESULT(${TB}$1:${TN})
  @@ -46,11 +45,11 @@
   dnl ##
   dnl ##  Display a message under --verbose
   dnl ##
  -dnl ##  configure.in:
  +dnl ##  configure.ac:
   dnl ##    AC_MSG_VERBOSE(<text>)
   dnl ##
   
  -define(AC_MSG_VERBOSE,[dnl
  +m4_define(AC_MSG_VERBOSE,[dnl
   if test ".$verbose" = .yes; then
       AC_MSG_RESULT([  $1])
   fi
  @@ -59,12 +58,12 @@
   dnl ##
   dnl ##  Do not display message for a command
   dnl ##
  -dnl ##  configure.in:
  +dnl ##  configure.ac:
   dnl ##    AC_MSG_SILENT(...)
   dnl ##
   
  -define(AC_FD_TMP, 9)
  -define(AC_MSG_SILENT,[dnl
  +m4_define(AC_FD_TMP, 9)
  +m4_define(AC_MSG_SILENT,[dnl
   exec AC_FD_TMP>&AC_FD_MSG AC_FD_MSG>/dev/null
   $1
   exec AC_FD_MSG>&AC_FD_TMP AC_FD_TMP>&-
  @@ -73,13 +72,13 @@
   dnl ##
   dnl ##  Perform something only once
   dnl ##
  -dnl ##  configure.in:
  +dnl ##  configure.ac:
   dnl ##    AC_ONCE(<action>)
   dnl ##
   
  -define(AC_ONCE,[
  +m4_define(AC_ONCE,[
   ifelse(ac_once_$1, already_done, ,[
  -    define(ac_once_$1, already_done)
  +    m4_define(ac_once_$1, already_done)
       $2
   ])dnl
   ])
  @@ -87,7 +86,7 @@
   dnl ##
   dnl ##  Support for $(S)
   dnl ##
  -dnl ##  configure.in:
  +dnl ##  configure.ac:
   dnl ##    AC_SRCDIR_PREFIX(<varname>)
   dnl ##
   
  @@ -115,7 +114,7 @@
   dnl ##
   dnl ##  Support for --enable-subdir (for use with pth.m4)
   dnl ##
  -dnl ##  configure.in:
  +dnl ##  configure.ac:
   dnl ##    AC_ENABLESUBDIR
   dnl ##
   
  @@ -134,14 +133,14 @@
   dnl ##
   dnl ##  Support for Configuration Headers
   dnl ##
  -dnl ##  configure.in:
  +dnl ##  configure.ac:
   dnl ##    AC_HEADLINE(<short-name>, <long-name>,
   dnl ##                <vers-var>, <vers-file>,
   dnl ##                <copyright>)
   dnl ##
   
   AC_DEFUN(AC_HEADLINE,[dnl
  -AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)dnl
  +AC_DIVERT_PUSH(NOTICE)dnl
   #   configuration header
   if test ".`echo dummy [$]@ | grep enable-subdir`" != .; then
       enable_subdir=yes
  @@ -184,15 +183,13 @@
   dnl ##
   dnl ##  Support for Platform IDs
   dnl ##
  -dnl ##  configure.in:
  +dnl ##  configure.ac:
   dnl ##    AC_PLATFORM(<variable>)
   dnl ##
   
   AC_DEFUN(AC_PLATFORM,[
  -if test ".$host" != .NONE; then
  +if test ".$host" != .; then
       $1="$host"
  -elif test ".$nonopt" != .NONE; then
  -    $1="$nonopt"
   else
       $1=`${CONFIG_SHELL-/bin/sh} $srcdir/config.guess`
   fi
  @@ -206,15 +203,15 @@
   dnl ##
   dnl ##  Support for config.param files
   dnl ##
  -dnl ##  configure.in:
  +dnl ##  configure.ac:
   dnl ##    AC_CONFIG_PARAM(<file>)
   dnl ##
   
   AC_DEFUN(AC_CONFIG_PARAM,[
   AC_DIVERT_PUSH(-1)
  -AC_ARG_WITH(param,[  --with-param=ID[,ID,..] load parameters from $1])
  +AC_ARG_WITH(param,[  --with-param=ID[[,ID,..]] load parameters from $1])
   AC_DIVERT_POP()
  -AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)
  +AC_DIVERT_PUSH(NOTICE)
   ac_prev=""
   ac_param=""
   if test -f $1; then
  @@ -294,7 +291,7 @@
   dnl ##
   dnl ##  Check whether compiler option works
   dnl ##
  -dnl ##  configure.in:
  +dnl ##  configure.ac:
   dnl ##    AC_COMPILER_OPTION(<name>, <display>, <option>,
   dnl ##                       <action-success>, <action-failure>)
   dnl ##
  @@ -324,90 +321,53 @@
   dnl ##
   dnl ##  Check whether `long long' and `long double' type exists
   dnl ##
  -dnl ##  configure.in:
  +dnl ##  configure.ac:
   dnl ##    AC_CHECK_LONGLONG
   dnl ##    AC_CHECK_LONGDOUBLE
   dnl ##
   
   AC_DEFUN(AC_CHECK_LONGLONG,[dnl
   AC_MSG_CHECKING(for built-in type long long)
  - AC_CACHE_VAL(ac_cv_type_longlong,[
  + AC_CACHE_VAL(ac_cv_type_longlong,[dnl
     AC_TRY_LINK([
   #include <sys/types.h>
     ],[
       long long X = 2, Y = 1, Z;
       Z = X / Y; 
     ],
  -    AC_DEFINE(HAVE_LONGLONG)
       ac_cv_type_longlong=yes, 
       ac_cv_type_longlong=no
     )dnl
    ])dnl
   AC_MSG_RESULT([$ac_cv_type_longlong])
  +if test ".$ac_cv_type_longlong" = .yes; then
  +    AC_DEFINE(HAVE_LONGLONG)
  +fi
   ])dnl
   
   AC_DEFUN(AC_CHECK_LONGDOUBLE,[dnl
   AC_MSG_CHECKING(for built-in type long double)
  - AC_CACHE_VAL(ac_cv_type_longdouble,[
  + AC_CACHE_VAL(ac_cv_type_longdouble,[dnl
     AC_TRY_LINK([
   #include <sys/types.h>
     ],[
       long double X = 2, Y = 1, Z;
       Z = X / Y; 
     ],
  -    AC_DEFINE(HAVE_LONGDOUBLE)
       ac_cv_type_longdouble=yes, 
       ac_cv_type_longdouble=no
     )dnl
    ])dnl
   AC_MSG_RESULT([$ac_cv_type_longdouble])
  -])dnl
  -
  -dnl ##
  -dnl ##  Minimalistic Libtool Glue Code
  -dnl ##
  -dnl ##  configure.in:
  -dnl ##    AC_PROG_LIBTOOL(<platform-variable>)
  -dnl ##
  -
  -AC_DEFUN(AC_PROG_LIBTOOL,[dnl
  -AC_ARG_ENABLE(static,dnl
  -[  --enable-static         build static libraries (default=yes)],
  -enable_static="$enableval",
  -if test ".$enable_static" = .; then
  -    enable_static=yes
  -fi
  -)dnl
  -AC_ARG_ENABLE(shared,dnl
  -[  --enable-shared         build shared libraries (default=yes)],
  -enable_shared="$enableval",
  -if test ".$enable_shared" = .; then
  -    enable_shared=yes
  +if test ".$ac_cv_type_longdouble" = .yes; then
  +    AC_DEFINE(HAVE_LONGDOUBLE)
   fi
  -)dnl
  -case "$PLATFORM" in
  -    #   Solaris 2.7/x86 is slightly broken
  -    *-pc-solaris2.[[78]] [)] enable_shared=no ;;
  -esac
  -libtool_flags=''
  -dnl libtool_flags="$libtool_flags --cache-file=$cache_file"
  -libtool_flags="$libtool_flags --disable-lock"
  -test ".$silent"            = .yes && libtool_flags="$libtool_flags --silent"
  -test ".$enable_static"     = .no  && libtool_flags="$libtool_flags --disable-static"
  -test ".$enable_shared"     = .no  && libtool_flags="$libtool_flags --disable-shared"
  -test ".$ac_cv_prog_gcc"    = .yes && libtool_flags="$libtool_flags --with-gcc"
  -test ".$ac_cv_prog_gnu_ld" = .yes && libtool_flags="$libtool_flags --with-gnu-ld"
  -CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" LD="$LD" \
  -${CONFIG_SHELL-/bin/sh} $srcdir/ltconfig --no-reexec \
  -$libtool_flags --srcdir=$srcdir --no-verify $srcdir/ltmain.sh $1 ||\
  -AC_MSG_ERROR([libtool configuration failed])
  -dnl (AC_CACHE_LOAD) >/dev/null 2>&1
   ])dnl
   
   dnl ##
   dnl ##  Debugging Support
   dnl ##
  -dnl ##  configure.in:
  +dnl ##  configure.ac:
   dnl ##    AC_CHECK_DEBUGGING
   dnl ##
   
  @@ -472,7 +432,7 @@
   dnl ##
   dnl ##  Profiling Support
   dnl ##
  -dnl ##  configure.in:
  +dnl ##  configure.ac:
   dnl ##    AC_CHECK_PROFILING
   dnl ##
   
  @@ -500,7 +460,7 @@
   dnl ##
   dnl ##  Build Parameters
   dnl ##
  -dnl ##  configure.in:
  +dnl ##  configure.ac:
   dnl ##    AC_CHECK_BUILDPARAM
   dnl ##
   
  @@ -546,7 +506,7 @@
   dnl ##
   dnl ##  Optimization Support
   dnl ##
  -dnl ##  configure.in:
  +dnl ##  configure.ac:
   dnl ##    AC_CHECK_OPTIMIZE
   dnl ##
   
  @@ -595,7 +555,7 @@
   dnl ##
   dnl ##  Check for a pre-processor define in a header
   dnl ##
  -dnl ##  configure.in:
  +dnl ##  configure.ac:
   dnl ##    AC_CHECK_DEFINE(<define>, <header>)
   dnl ##  acconfig.h:
   dnl ##    #undef HAVE_<define>
  @@ -619,7 +579,7 @@
   dnl ##
   dnl ##  Check for an ANSI C typedef in a header
   dnl ##
  -dnl ##  configure.in:
  +dnl ##  configure.ac:
   dnl ##    AC_CHECK_TYPEDEF(<typedef>, <header>)
   dnl ##  acconfig.h:
   dnl ##    #undef HAVE_<typedef>
  @@ -644,7 +604,7 @@
   dnl ##
   dnl ##  Check for an ANSI C struct attribute in a structure defined in a header
   dnl ##
  -dnl ##  configure.in:
  +dnl ##  configure.ac:
   dnl ##    AC_CHECK_STRUCTATTR(<attr>, <struct>, <header>)
   dnl ##  acconfig.h:
   dnl ##    #undef HAVE_<attr>
  @@ -672,7 +632,7 @@
   dnl ##
   dnl ##  Check for argument type of a function
   dnl ##
  -dnl ##  configure.in:
  +dnl ##  configure.ac:
   dnl ##    AC_CHECK_ARGTYPE(<header> [...], <func>, <arg-number>,
   dnl ##                     <max-arg-number>, <action-with-${ac_type}>)
   dnl ##
  @@ -705,7 +665,9 @@
       fi
       i=`expr $i + 1`
   done
  +changequote([, ])dnl
   (eval "$ac_cpp conftest.$ac_ext") 2>&AC_FD_CC |\
  +changequote(, )dnl
   sed -e ':join' \
       -e '/,[ 	]*$/N' \
       -e 's/,[ 	]*\n[ 	]*/, /' \
  @@ -741,62 +703,10 @@
   ])
   
   dnl ##
  -dnl ##  Check for existance of a function
  -dnl ##
  -dnl ##  configure.in:
  -dnl ##     AC_CHECK_FUNCTION(<function> [, <action-if-found> [, <action-if-not-found>]])
  -dnl ##     AC_CHECK_FUNCTIONS(<function> [...] [, <action-if-found> [, <action-if-not-found>]])
  -dnl ##
  -
  -AC_DEFUN(AC_CHECK_FUNCTIONS,[dnl
  -for ac_func in $1; do
  -    AC_CHECK_FUNCTION($ac_func,
  -        [changequote(, )dnl
  -        ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
  -        changequote([, ])dnl
  -        AC_DEFINE_UNQUOTED($ac_tr_func) $2], $3)dnl
  -done
  -])
  -
  -AC_DEFUN(AC_CHECK_FUNCTION, [dnl
  -AC_MSG_CHECKING([for function $1])
  -AC_CACHE_VAL(ac_cv_func_$1, [dnl
  -AC_TRY_LINK([
  -/* System header to define __stub macros and hopefully few prototypes,
  -   which can conflict with char $1(); below. */
  -#include <assert.h>
  -#ifdef __cplusplus
  -extern "C"
  -#endif
  -/* We use char because int might match the return type of a gcc2
  -   builtin and then its argument prototype would still apply. */
  -char $1();
  -char (*f)();
  -], [
  -/* The GNU C library defines this for functions which it implements
  -   to always fail with ENOSYS.  Some functions are actually named
  -   something starting with __ and the normal name is an alias. */
  -#if defined (__stub_$1) || defined (__stub___$1)
  -choke me
  -#else
  -f = $1;
  -#endif
  -], eval "ac_cv_func_$1=yes", eval "ac_cv_func_$1=no")])
  -if eval "test \"`echo '$ac_cv_func_'$1`\" = yes"; then
  -  AC_MSG_RESULT(yes)
  -  ifelse([$2], , :, [$2])
  -else
  -  AC_MSG_RESULT(no)
  -ifelse([$3], , , [$3
  -])dnl
  -fi
  -])
  -
  -dnl ##
   dnl ##  Decision Hierachy
   dnl ##
   
  -define(AC_IFALLYES,[dnl
  +m4_define(AC_IFALLYES,[dnl
   ac_rc=yes
   for ac_spec in $1; do
       ac_type=`echo "$ac_spec" | sed -e 's/:.*$//'`
  @@ -831,20 +741,20 @@
   fi
   ])
   
  -define(AC_BEGIN_DECISION,[dnl
  +m4_define(AC_BEGIN_DECISION,[dnl
   ac_decision_item='$1'
   ac_decision_msg='FAILED'
   ac_decision=''
   ])
   
  -define(AC_DECIDE,[dnl
  +m4_define(AC_DECIDE,[dnl
   ac_decision='$1'
   ac_decision_msg='$2'
   ac_decision_$1=yes
   ac_decision_$1_msg='$2'
   ])
   
  -define(AC_DECISION_OVERRIDE,[dnl
  +m4_define(AC_DECISION_OVERRIDE,[dnl
       ac_decision=''
       for ac_item in $1; do
            eval "ac_decision_this=\$ac_decision_${ac_item}"
  @@ -855,12 +765,12 @@
       done
   ])
   
  -define(AC_DECISION_FORCE,[dnl
  +m4_define(AC_DECISION_FORCE,[dnl
   ac_decision="$1"
   eval "ac_decision_msg=\"\$ac_decision_${ac_decision}_msg\""
   ])
   
  -define(AC_END_DECISION,[dnl
  +m4_define(AC_END_DECISION,[dnl
   if test ".$ac_decision" = .; then
       echo "[$]0:Error: decision on $ac_decision_item failed." 1>&2
       echo "[$]0:Hint: see config.log for more details!" 1>&2
  @@ -876,7 +786,7 @@
   dnl ##
   dnl ##  Check for existance of a file
   dnl ##
  -dnl ##  configure.in:
  +dnl ##  configure.ac:
   dnl ##    AC_TEST_FILE(<file>, <success-action>, <failure-action>)
   dnl ##
   
  @@ -902,7 +812,7 @@
   dnl ##
   dnl ##  Check for socket/network size type
   dnl ##
  -dnl ##  configure.in:
  +dnl ##  configure.ac:
   dnl ##    AC_CHECK_SOCKLENTYPE(<action-with-${ac_type}>)
   dnl ##
   
  @@ -950,7 +860,7 @@
   dnl ##
   dnl ##  Check for filedescriptor number type
   dnl ##
  -dnl ##  configure.in:
  +dnl ##  configure.ac:
   dnl ##    AC_CHECK_NFDSTYPE(<action-with-${ac_type}>)
   dnl ##
   
  @@ -975,7 +885,7 @@
   dnl ##
   dnl ##  Check for direction of stack growth
   dnl ##
  -dnl ##  configure.in:
  +dnl ##  configure.ac:
   dnl ##    AC_CHECK_STACKGROWTH(<define>)
   dnl ##  acconfig.h:
   dnl ##    #undef <define>
  @@ -1038,7 +948,7 @@
   dnl ##
   dnl ##  Check whether and how a POSIX compliant sigsetjmp(3) can be achieved
   dnl ##
  -dnl ##  configure.in:
  +dnl ##  configure.ac:
   dnl ##    AC_CHECK_SJLJ(<success-action>, <failure-action>, <type-var>)
   dnl ##
   
  @@ -1152,7 +1062,7 @@
   rc=`cat conftestval`,
   rc=failed,
   rc=failed
  -)dnl
  +)
   CFLAGS="$OCFLAGS"
   if test ".$rc" = .ok; then
       ac_cv_check_sjlj=$testtype
  @@ -1204,7 +1114,7 @@
   dnl ##
   dnl ##  Check for number of signals (NSIG)
   dnl ##
  -dnl ##  configure.in:
  +dnl ##  configure.ac:
   dnl ##    AC_CHECK_NSIG(<define>)
   dnl ##  acconfig.h:
   dnl ##    #undef <define>
  @@ -1248,7 +1158,7 @@
   nsig=`cat conftestval`,
   nsig=32,
   nsig=32
  -)dnl
  +)
   AC_MSG_RESULT([$nsig])
   AC_DEFINE_UNQUOTED($1, $nsig)
   ])
  @@ -1259,7 +1169,7 @@
   dnl ##  - searches under standard paths include, lib, etc.
   dnl ##  - searches under subareas like .libs, etc.
   dnl ##
  -dnl ##  configure.in:
  +dnl ##  configure.ac:
   dnl ##      AC_CHECK_EXTLIB(<realname>, <libname>, <func>, <header>,
   dnl ##                      [<success-action> [, <fail-action>]])
   dnl ##  Makefile.in:
  @@ -1271,8 +1181,8 @@
   dnl ##
   
   AC_DEFUN(AC_CHECK_EXTLIB,[dnl
  -AC_ARG_WITH($2,dnl
  -[  --with-]substr([$2[[=DIR]]                 ], 0, 19)[build against $1 library (default=no)],
  +AC_ARG_WITH($2,[dnl
  +[  --with-]m4_substr([$2[[=DIR]]                 ], 0, 19)[build against $1 library (default=no)]],
       if test ".$with_$2" = .yes; then
           #   via config script
           $2_version=`($2-config --version) 2>/dev/null`
  @@ -1357,7 +1267,7 @@
   dnl ##  Check whether SVR4/SUSv2 makecontext(2), swapcontext(2) and
   dnl ##  friends can be used for user-space context switching
   dnl ##
  -dnl ##  configure.in:
  +dnl ##  configure.ac:
   dnl ##     AC_CHECK_MCSC(<success-action>, <failure-action>)
   dnl ##
   
  @@ -1434,7 +1344,7 @@
   dnl ##  Check how stacks have to be setup for the functions
   dnl ##  sigstack(2), sigaltstack(2) and makecontext(2).
   dnl ##
  -dnl ##  configure.in:
  +dnl ##  configure.ac:
   dnl ##    AC_CHECK_STACKSETUP(sigstack|sigaltstack|makecontext, <macro-addr>, <macro-size>)
   dnl ##  acconfig.h:
   dnl ##    #undef HAVE_{SIGSTACK|SIGALTSTACK|MAKECONTEXT}
  @@ -1458,7 +1368,7 @@
   dnl #   we require the C compiler and the standard headers
   AC_REQUIRE([AC_HEADER_STDC])dnl
   dnl #   we at least require the function to check
  -AC_CHECK_FUNCTIONS($1)
  +AC_CHECK_FUNCS($1)
   dnl #   sigaltstack on some platforms uses stack_t instead of struct sigaltstack
   ifelse($1, sigaltstack, [
       AC_ONCE(stacksetup_stack_t, [
  @@ -1619,7 +1529,7 @@
   ],[
   dnl #   cross-platform => failed
   ac_cv_stacksetup_$1='guessed:(skaddr),(sksize)'
  -])dnl
  +])
   dnl #   restore original compile environment
   CFLAGS="$OCFLAGS"
   ])dnl
  @@ -1639,6 +1549,4 @@
   AC_MSG_VERBOSE([$]$2)
   AC_MSG_VERBOSE([$]$3)
   ])
  -
  -divert
   
        Index: ossp-pkg/pth/configure.ac
  ============================================================
  $ cvs update -p -r1.1 configure.ac
  dnl ##
  dnl ##  GNU Pth - The GNU Portable Threads
  dnl ##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  dnl ##
  dnl ##  This file is part of GNU Pth, a non-preemptive thread scheduling
  dnl ##  library which can be found at http://www.gnu.org/software/pth/.
  dnl ##
  dnl ##  This library is free software; you can redistribute it and/or
  dnl ##  modify it under the terms of the GNU Lesser General Public
  dnl ##  License as published by the Free Software Foundation; either
  dnl ##  version 2.1 of the License, or (at your option) any later version.
  dnl ##
  dnl ##  This library is distributed in the hope that it will be useful,
  dnl ##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  dnl ##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  dnl ##  Lesser General Public License for more details.
  dnl ##
  dnl ##  You should have received a copy of the GNU Lesser General Public
  dnl ##  License along with this library; if not, write to the Free Software
  dnl ##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  dnl ##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  dnl ##
  dnl ##  configure.ac: Pth Autoconf specification
  dnl ##
  
  dnl #                              ``Programming in Bourne-Shell
  dnl #                                is a higher form of masochism.''
  dnl #                                           -- Unknown
  
  dnl ##
  dnl ##  PROLOG
  dnl ##
  
  dnl #   standard Autoconf prolog
  AC_PREREQ(2.52)dnl
  AC_REVISION([1.0])
  
  dnl #   autoconf initialization
  AC_INIT(README)
  AC_ENABLESUBDIR
  AC_SRCDIR_PREFIX(srcdir_prefix)
  AC_HEADLINE(dnl
  GNU Pth, Portable Threads, dnl
  PTH_VERSION, pth_vers.c, dnl
  [Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>])
  AC_CONFIG_PARAM(config.param)
  AC_CONFIG_HEADER(pth_acdef.h)dnl
  AC_PREFIX_DEFAULT(/usr/local)
  AC_PLATFORM(PLATFORM)
  
  dnl ##
  dnl ##  BUILD TOOLS
  dnl ##
  
  AC_MSG_PART(Build Tools)
  
  AC_PROG_CC
  AC_PROG_CPP
  AC_SET_MAKE
  AC_CHECK_DEBUGGING
  AC_CHECK_PROFILING
  AC_CHECK_OPTIMIZE
  if test -f "$srcdir/ltmain.sh"; then
      case "$PLATFORM" in
          #   Solaris 2.7/x86 is slightly broken
          *-pc-solaris2.[[78]] [)] enable_shared=no ;;
      esac
      sinclude(libtool.m4)
      AC_PROG_LIBTOOL
  else
      dnl # only for stripped down Pth source tree
      AC_CHECK_PROG(AR, ar, ar)
      AC_PROG_RANLIB
  fi
  
  dnl ##  Support for some special platform/compiler options
  case "$PLATFORM:$CC" in
      *-sun-solaris2*:cc )
          #   shut-up harmless warnings caused by do-while macros on Solaris
          test ".$ac_cv_prog_gcc" = ".no" && CFLAGS="$CFLAGS -w"
          ;;
      *-*-sysv*uw[[27]]*:cc )
          #   shut-up harmless warnings caused by do-while macros on UnixWare
          CFLAGS="$CFLAGS -w"
          ;;
      *-hp-hpux*:cc )
          #   HPUX needs a few special options to find its ANSI C brain
          CFLAGS="$CFLAGS -Ae -O"
          ;;
      *-hp-hpux*:CC )
          #   HPUX outputs useless warnings
          CFLAGS="$CFLAGS -w"
          ;;
      *-sgi-irix6.2:cc )
          #   shut-up warnings caused by IRIX brain-dead 32/64 bit stuff
          LDFLAGS="$LDFLAGS -woff 85 -Wl,-woff,84 -Wl,-woff,85"
          ;;
      *-sgi-irix6.5.[[2-9]]:cc )
          #   since IRIX 6.5.2 the C compiler is smart enough,
          #   but the linker is still complaining, of course
          LDFLAGS="$LDFLAGS -woff 84,85,134"
          ;;
      *-sgi-irix6.5:cc )
          #   shut-up warnings caused by IRIX brain-dead 32/64 bit stuff
          CFLAGS="$CFLAGS -woff 1110,1048"
          LDFLAGS="$LDFLAGS -woff 84,85,134"
          ;;
      *-dec-osf4*:cc )
          #   make sure the standard compliant functions are used on Tru64/OSF1 4.x
          CFLAGS="$CFLAGS -std"
          ;;
      *-dec-osf5*:cc )
          #   make sure the standard compliant functions are used on Tru64/OSF1 5.x
          CFLAGS="$CFLAGS -std -D_XOPEN_SOURCE_EXTENDED"
          ;;
      *-*-isc*:* )
          #   ISC is brain-dead and needs a bunch of options to find its brain
          CPPFLAGS="$CPPFLAGS -D_POSIX_SOURCE";
          LIBS="$LIBS -lcposix -linet";
          ;;
  esac
  
  dnl ##
  dnl ##   MANDATORY PLATFORM ENVIRONMENT
  dnl ##
  
  AC_MSG_PART(Mandatory Platform Environment)
  
  dnl # check for standard headers
  AC_HEADER_STDC
  AC_HAVE_HEADERS(dnl
     stdio.h stdlib.h stdarg.h string.h signal.h unistd.h setjmp.h fcntl.h dnl
     errno.h sys/types.h sys/time.h sys/wait.h sys/stat.h sys/socket.h)
  AC_CHECK_FUNCS(dnl
     gettimeofday select sigaction sigprocmask sigpending sigsuspend)
  AC_BEGIN_DECISION([mandatory system headers and functions])
  AC_IFALLYES(dnl
     header:stdio.h header:stdlib.h header:stdarg.h header:string.h dnl
     header:signal.h header:unistd.h header:setjmp.h header:fcntl.h header:errno.h dnl
     header:sys/types.h header:sys/time.h header:sys/wait.h header:sys/stat.h header:sys/socket.h dnl
     func:gettimeofday func:select func:sigaction func:sigprocmask dnl
     func:sigpending func:sigsuspend,
     AC_DECIDE(fine, [all fine]))
  AC_END_DECISION
  
  
  dnl ##
  dnl ##  OPTIONAL PLATFORM ENVIRONMENT
  dnl ##
  
  AC_MSG_PART(Optional Platform Environment)
  
  dnl #  check for the number of signals
  AC_CHECK_NSIG(PTH_NSIG)
  
  dnl # check whether poll(2)'s input stuff has to be faked
  AC_CHECK_FUNCS(poll)
  AC_CHECK_DEFINE(POLLIN, poll.h)
  AC_MSG_CHECKING(whether poll(2) facility has to be faked)
  AC_IFALLYES(func:poll define:POLLIN, PTH_FAKE_POLL=0, PTH_FAKE_POLL=1)
  if test .$PTH_FAKE_POLL = .1; then
      msg="yes"
  else
      msg="no"
  fi
  AC_SUBST(PTH_FAKE_POLL)
  AC_MSG_RESULT([$msg])
  
  dnl # check for readv/writev environment
  AC_HAVE_HEADERS(sys/uio.h)
  AC_CHECK_FUNCS(readv writev)
  AC_MSG_CHECKING(whether readv(2)/writev(2) facility has to be faked)
  AC_IFALLYES(func:readv func:writev header:sys/uio.h, PTH_FAKE_RWV=0, PTH_FAKE_RWV=1)
  if test .$PTH_FAKE_RWV = .1; then
      msg="yes"
  else
      msg="no"
  fi
  AC_SUBST(PTH_FAKE_RWV)
  AC_MSG_RESULT([$msg])
  
  dnl # check for various other functions which would be nice to have
  AC_CHECK_FUNCS(usleep strerror)
  
  dnl # check for various other headers which we might need
  AC_HAVE_HEADERS(sys/resource.h net/errno.h paths.h)
  
  dnl # at least the test programs need some socket stuff
  AC_CHECK_LIB(nsl, gethostname)
  if test ".`echo $LIBS | grep nsl`" = . ;then
      AC_CHECK_LIB(nsl, gethostbyname)
  fi
  AC_CHECK_LIB(socket, accept)
  
  dnl # check whether we've to use a non-standard #include <sys/select.h>  to get
  dnl # the definition for fd_set under AIX and other brain-dead platforms.
  AC_HAVE_HEADERS(sys/select.h)
  EXTRA_INCLUDE_SYS_SELECT_H="#include <sys/select.h>"
  if test ".$ac_cv_header_sys_select_h" != .yes; then
      EXTRA_INCLUDE_SYS_SELECT_H="/* $EXTRA_INCLUDE_SYS_SELECT_H */"
  fi
  AC_SUBST(EXTRA_INCLUDE_SYS_SELECT_H)
  
  dnl # check whether we've to define sig_atomic_t
  AC_CHECK_TYPEDEF(sig_atomic_t, signal.h)
  FALLBACK_SIG_ATOMIC_T="typedef int sig_atomic_t;"
  if test ".$ac_cv_typedef_sig_atomic_t" = .yes; then
      FALLBACK_SIG_ATOMIC_T="/* $FALLBACK_SIG_ATOMIC_T */"
  fi
  AC_SUBST(FALLBACK_SIG_ATOMIC_T)
  
  dnl # check whether we've to define pid_t
  AC_CHECK_TYPEDEF(pid_t, sys/types.h)
  FALLBACK_PID_T="typedef int pid_t;"
  if test ".$ac_cv_typedef_pid_t" = .yes; then
      FALLBACK_PID_T="/* $FALLBACK_PID_T */"
  fi
  AC_SUBST(FALLBACK_PID_T)
  
  dnl # check whether we've to define size_t
  AC_CHECK_TYPEDEF(size_t, stdlib.h)
  FALLBACK_SIZE_T="typedef unsigned int size_t;"
  if test ".$ac_cv_typedef_size_t" = .yes; then
      FALLBACK_SIZE_T="/* $FALLBACK_SIZE_T */"
  fi
  AC_SUBST(FALLBACK_SIZE_T)
  
  dnl # check whether we've to define ssize_t
  AC_CHECK_TYPEDEF(ssize_t, sys/types.h)
  FALLBACK_SSIZE_T="typedef unsigned int ssize_t;"
  if test ".$ac_cv_typedef_ssize_t" = .yes; then
      FALLBACK_SSIZE_T="/* $FALLBACK_SSIZE_T */"
  fi
  AC_SUBST(FALLBACK_SSIZE_T)
  
  dnl # check whether we've to define off_t
  AC_CHECK_TYPEDEF(off_t, sys/types.h)
  FALLBACK_OFF_T="typedef int off_t;"
  if test ".$ac_cv_typedef_off_t" = .yes; then
      FALLBACK_OFF_T="/* $FALLBACK_OFF_T */"
  fi
  AC_SUBST(FALLBACK_OFF_T)
  
  dnl # check whether stack_t exists instead of sigaltstack
  AC_CHECK_TYPEDEF(stack_t, signal.h)
  
  dnl # check whether ss_base instead of ss_sp attribute exists
  AC_CHECK_STRUCTATTR(ss_base, sigaltstack, sys/signal.h)
  AC_CHECK_STRUCTATTR(ss_sp,   sigaltstack, sys/signal.h)
  
  dnl # check for gettimeofday() variant
  AC_MSG_CHECKING(for a single-argument based gettimeofday)
  cross_compile=no
  AC_TRY_COMPILE([
  #include <sys/types.h>
  #include <sys/time.h>
  #include <unistd.h>
  ],[
  struct timeval tv;
  (void)gettimeofday(&tv);
  ],
  msg="yes"
  ,
  msg="no"
  )
  case $PLATFORM in
      *-*-aix4* ) msg="no" ;; # on AIX the compiler test doesn't work
      *-*-isc* )  msg="no" ;; # on ISC the compiler test doesn't work
  esac
  if test ".$msg" = .yes; then
      AC_DEFINE(HAVE_GETTIMEOFDAY_ARGS1)
  fi
  AC_MSG_RESULT([$msg])
  
  dnl # check for struct timespec
  AC_MSG_CHECKING(for struct timespec)
  cross_compile=no
  AC_TRY_COMPILE([
  #include <time.h>
  #include <sys/time.h>
  ],[
  struct timespec ts;
  ],
  msg="yes"
  ,
  msg="no"
  )
  if test ".$msg" = .yes; then
      AC_DEFINE(HAVE_STRUCT_TIMESPEC)
  fi
  AC_MSG_RESULT([$msg])
  
  dnl # check for network/socket size type
  AC_CHECK_SOCKLENTYPE([
  FALLBACK_SOCKLEN_T="typedef ${ac_type} socklen_t;"
  if test ".$ac_type" = ".socklen_t"; then
      FALLBACK_SOCKLEN_T="/* $FALLBACK_SOCKLEN_T */"
  fi
  AC_SUBST(FALLBACK_SOCKLEN_T)
  ])
  
  dnl # check for filedescriptor number type
  AC_CHECK_NFDSTYPE([
  FALLBACK_NFDS_T="typedef ${ac_type} nfds_t;"
  if test ".$ac_type" = ".nfds_t"; then
      FALLBACK_NFDS_T="/* $FALLBACK_NFDS_T */"
  fi
  AC_SUBST(FALLBACK_NFDS_T)
  ])
  
  dnl # check for 64-bit types (for pth_snprintf.c)
  AC_CHECK_LONGLONG
  AC_CHECK_LONGDOUBLE
  
  dnl ##
  dnl ##  MACHINE CONTEXT IMPLEMENTATION
  dnl ##
  
  AC_MSG_PART(Machine Context Implementation)
  
  dnl #
  dnl #  1. determine possibilities
  dnl #
  
  dnl #  check for MCSC method
  AC_CHECK_HEADERS(ucontext.h)
  AC_CHECK_FUNCS(makecontext swapcontext getcontext setcontext)
  AC_CHECK_MCSC(mcsc=yes, mcsc=no)
  
  dnl #  check for SJLJ method
  AC_CHECK_HEADERS(signal.h)
  AC_CHECK_FUNCS(sigsetjmp siglongjmp setjmp longjmp _setjmp _longjmp)
  AC_CHECK_FUNCS(sigaltstack sigstack)
  AC_CHECK_SJLJ(sjlj=yes, sjlj=no, sjlj_type)
  
  dnl #
  dnl #  2. make a general decision
  dnl #
  
  if test ".$mcsc" = .yes; then
      mctx_mth=mcsc
      mctx_dsp=sc
      mctx_stk=mc
  elif test ".$sjlj" = .yes; then
      mctx_mth=sjlj
      mctx_dsp=$sjlj_type
      mctx_stk=none
      AC_IFALLYES(func:sigstack,    mctx_stk=ss)
      AC_IFALLYES(func:sigaltstack, mctx_stk=sas)
      case $mctx_dsp in
           sjljlx|sjljisc|sjljw32 ) mctx_stk=none
      esac
  else
      AC_ERROR([no appropriate mctx method found])
  fi
  
  dnl #
  dnl #  3. allow decision to be overridden by user
  dnl #
  
  AC_ARG_WITH(mctx-mth,dnl
  [  --with-mctx-mth=ID      force mctx method      (mcsc,sjlj)],[
  case $withval in
      mcsc|sjlj ) mctx_mth=$withval ;;
      * ) AC_ERROR([invalid mctx method -- allowed: mcsc,sjlj]) ;;
  esac
  ])dnl
  AC_ARG_WITH(mctx-dsp,dnl
  [  --with-mctx-dsp=ID      force mctx dispatching (sc,ssjlj,sjlj,usjlj,sjlje,...)],[
  case $withval in
      sc|ssjlj|sjlj|usjlj|sjlje|sjljlx|sjljisc|sjljw32 ) mctx_dsp=$withval ;;
      * ) AC_ERROR([invalid mctx dispatching -- allowed: sc,ssjlj,sjlj,usjlj,sjlje,sjljlx,sjljisc,sjljw32]) ;;
  esac
  ])dnl
  AC_ARG_WITH(mctx-stk,dnl
  [  --with-mctx-stk=ID      force mctx stack setup (mc,ss,sas,...)],[
  case $withval in
      mc|ss|sas|none ) mctx_stk=$withval ;;
      * ) AC_ERROR([invalid mctx stack setup -- allowed: mc,ss,sas,none]) ;;
  esac
  ])dnl
  
  dnl #
  dnl #  4. determine a few additional details
  dnl #
  
  dnl #  whether sigaltstack has to use stack_t instead of struct sigaltstack
  AC_CHECK_TYPEDEF(stack_t, signal.h)
  
  dnl #  direction of stack grow
  AC_CHECK_STACKGROWTH(PTH_STACKGROWTH)
  if test ".$ac_cv_check_stackgrowth" = ".down"; then
      PTH_STACK_GROWTH="down"
  else
      PTH_STACK_GROWTH="up"
  fi
  AC_SUBST(PTH_STACK_GROWTH)
  
  dnl #  how to specify stacks for the various functions
  AC_CHECK_STACKSETUP(makecontext, pth_skaddr_makecontext, pth_sksize_makecontext)
  AC_CHECK_STACKSETUP(sigaltstack, pth_skaddr_sigaltstack, pth_sksize_sigaltstack)
  AC_CHECK_STACKSETUP(sigstack,    pth_skaddr_sigstack,    pth_sksize_sigstack)
  
  dnl #  how to implement POSIX compliant sig{set,long}jmp()
  case $mctx_dsp in [
      ssjlj )
          pth_sigjmpbuf='sigjmp_buf'
          pth_sigsetjmp='sigsetjmp(buf,1)'
          pth_siglongjmp='siglongjmp(buf,val)'
          ;;
      sjlj )
          pth_sigjmpbuf='jmp_buf'
          pth_sigsetjmp='setjmp(buf)'
          pth_siglongjmp='longjmp(buf,val)'
          ;;
      usjlj )
          pth_sigjmpbuf='jmp_buf'
          pth_sigsetjmp='_setjmp(buf)'
          pth_siglongjmp='_longjmp(buf,val)'
          ;;
      sjlje )
          pth_sigjmpbuf='jmp_buf'
          pth_sigsetjmp='setjmp(buf)'
          pth_siglongjmp='longjmp(buf,val)'
          ;;
      sjljlx|sjljisc|sjljw32 )
          pth_sigjmpbuf='sigjmp_buf'
          pth_sigsetjmp='sigsetjmp(buf,1)'
          pth_siglongjmp='siglongjmp(buf,val)'
          ;;
  ] esac
  pth_sigjmpbuf="#define pth_sigjmpbuf $pth_sigjmpbuf"
  pth_sigsetjmp="#define pth_sigsetjmp(buf) $pth_sigsetjmp"
  pth_siglongjmp="#define pth_siglongjmp(buf,val) $pth_siglongjmp"
  AC_SUBST(pth_sigjmpbuf)
  AC_SUBST(pth_sigsetjmp)
  AC_SUBST(pth_siglongjmp)
  
  dnl #
  dnl #  5. export the results
  dnl #
  
  AC_DEFINE_UNQUOTED(PTH_MCTX_MTH_use, [PTH_MCTX_MTH_$mctx_mth])
  AC_DEFINE_UNQUOTED(PTH_MCTX_DSP_use, [PTH_MCTX_DSP_$mctx_dsp])
  AC_DEFINE_UNQUOTED(PTH_MCTX_STK_use, [PTH_MCTX_STK_$mctx_stk])
  
  PTH_MCTX_ID="$mctx_mth/$mctx_dsp/$mctx_stk"
  AC_MSG_RESULT([decision on mctx implementation... ${TB}${PTH_MCTX_ID}${TN}])
  AC_SUBST(PTH_MCTX_ID)
  
  AC_MSG_VERBOSE([decided mctx method: $mctx_mth])
  AC_MSG_VERBOSE([decided mctx dispatching: $mctx_dsp])
  AC_MSG_VERBOSE([decided mctx stack setup: $mctx_stk])
  
  
  dnl ##
  dnl ##  SYSTEM CALL MAPPING
  dnl ##
  
  AC_MSG_PART(System Call Mapping)
  
  AC_CHECK_FUNCS(syscall)
  AC_CHECK_HEADERS(sys/syscall.h sys/socketcall.h)
  AC_CHECK_DEFINE(SYS_read, sys/syscall.h)
  
  AC_MSG_CHECKING([whether soft system call mapping is used])
  AC_ARG_ENABLE(syscall-soft,dnl
  [  --enable-syscall-soft   enable soft system call mapping (default=no)],
  enable_syscall_soft="$enableval",
  if test ".$enable_syscall_soft" = .; then
      enable_syscall_soft=no
  fi
  )dnl
  if test .$enable_syscall_soft = .yes; then
      PTH_SYSCALL_SOFT=1
      msg="yes"
  else
      PTH_SYSCALL_SOFT=0
      msg="no"
  fi
  AC_MSG_RESULT([$msg])
  AC_SUBST(PTH_SYSCALL_SOFT)
  
  AC_MSG_CHECKING([whether hard system call mapping is used])
  AC_ARG_ENABLE(syscall-hard,dnl
  [  --enable-syscall-hard   enable hard system call mapping (default=no)],
  enable_syscall_hard="$enableval",[
  if test ".$enable_syscall_hard" = .; then
      enable_syscall_hard=no
  fi
  ])dnl
  if test ".$enable_syscall_hard" = .yes; then
      AC_IFALLYES(func:syscall header:sys/syscall.h define:SYS_read,
                  enable_syscall_hard=yes, enable_syscall_hard=no)
  fi
  if test ".$enable_syscall_hard" = .yes; then
      PTH_SYSCALL_HARD=1
      msg="yes"
  else
      PTH_SYSCALL_HARD=0
      msg="no"
  fi
  AC_MSG_RESULT([$msg])
  AC_SUBST(PTH_SYSCALL_HARD)
  if test ".$enable_syscall_hard" = .yes; then
      echo "${TB}Warning: The hard system call mapping variant is still work in progress.${TN}"
      echo "${TB}         Do neither expect it to compile on all platforms (because of${TN}"
      echo "${TB}         conflicts with vendor prototypes) nor to actually work!${TN}"
  fi
  
  
  dnl ##
  dnl ##  BUILD PARAMETERS
  dnl ##
  
  AC_MSG_PART(Build Parameters)
  
  dnl #  check for various build parameters
  AC_CHECK_BUILDPARAM
  
  dnl #  whether to build Pthread library
  AC_MSG_CHECKING(whether to build Pthread library)
  AC_ARG_ENABLE(pthread,dnl
  [  --enable-pthread        build Pthread library (default=no)],
  enable_pthread="$enableval",
  if test ".$enable_pthread" = .; then
      enable_pthread=no
  fi
  )dnl
  AC_MSG_RESULT([$enable_pthread])
  if test ".$enable_pthread" = .yes; then
      PTHREAD_O=pthread.o       dnl # only for stripped down Pth source tree
      LIBPTHREAD_A=libpthread.a dnl # only for stripped down Pth source tree
      LIBPTHREAD_LA=libpthread.la
      PTHREAD_CONFIG_1='$(S)pthread-config.1'
      PTHREAD_3='$(S)pthread.3'
      INSTALL_PTHREAD=install-pthread
      UNINSTALL_PTHREAD=uninstall-pthread
      TEST_PTHREAD=test_pthread
      enable_syscall_soft=yes
      AC_HAVE_HEADERS(pthread.h)
      ac_warn=no
      if test ".$ac_cv_header_pthread_h" = .yes; then
          warn=yes
          changequote(<<,>>)
          case $PLATFORM in
              *-*-freebsd* ) ac_warn=no ;;
              *-*-linux*   ) ac_warn=no ;;
              *-*-solaris* ) ac_warn=no ;;
              *-*-irix*    ) ac_warn=no ;;
          esac
          changequote([,])
      fi
      if test ".$ac_warn" = .yes; then
          echo "${TB}Warning: You seem to have a vendor Pthread library installed.${TN}"
          echo "${TB}         There might be conflicts with its pthread.h under compile-time!${TN}"
      fi
  else
      PTHREAD_O=""     dnl # only for stripped down Pth source tree
      LIBPTHREAD_A=""  dnl # only for stripped down Pth source tree
      LIBPTHREAD_LA=""
      PTHREAD_CONFIG_1=""
      PTHREAD_3=""
      INSTALL_PTHREAD=""
      UNINSTALL_PTHREAD=""
      TEST_PTHREAD=""
  fi
  AC_SUBST(PTHREAD_O)
  AC_SUBST(LIBPTHREAD_A)
  AC_SUBST(LIBPTHREAD_LA)
  AC_SUBST(PTHREAD_CONFIG_1)
  AC_SUBST(PTHREAD_3)
  AC_SUBST(INSTALL_PTHREAD)
  AC_SUBST(UNINSTALL_PTHREAD)
  AC_SUBST(TEST_PTHREAD)
  
  dnl #   whether to build against Sfio library
  PTH_EXT_SFIO=0
  AC_CHECK_EXTLIB(Sfio, sfio, sfdisc, sfio.h, PTH_EXT_SFIO=1)
  AC_SUBST(PTH_EXT_SFIO)
  
  dnl #   whether to build against Dmalloc library
  AC_CHECK_EXTLIB(Dmalloc, dmalloc, dmalloc_debug, dmalloc.h, AC_DEFINE(PTH_DMALLOC))
  
  dnl ##
  dnl ##  OUTPUT SUBSTITUTION
  dnl ##
  
  AC_MSG_PART(Output Substitution)
  
  AC_OUTPUT(dnl
  Makefile dnl
  pthread-config dnl
  pthread.h dnl
  pth-config dnl
  pth.h dnl
  pth_acmac.h dnl
  ,dnl
  chmod +rx pthread-config
  chmod +rx pth-config
  )dnl
  if test ".$enable_pthread" = .no; then
      rm -f pthread-config
      rm -f pthread.h
  fi
  
  if test ".$enable_batch" != .yes; then
      echo ""
      echo "Now please type \`${TB}make${TN}' to compile. Good luck."
      echo ""
  fi
  
    Index: ossp-pkg/pth/devtool
  ============================================================
  $ cvs update -p -r1.1 devtool
  #!/bin/sh
  ##
  ##  devtool -- Development Tool
  ##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  if [ $# -eq 0 ]; then
      echo "devtool:USAGE: devtool <command> [<arg> ...]" 1>&2
      exit 1
  fi
  
  cmd="$1"
  shift
  
  devtoolfunc="./devtool.func"
  
  if [ ! -f devtool.conf ]; then
      echo "devtool:ERROR: no devtool.conf in current directory" 1>&2
      exit 1
  fi
  
  cmdline=`grep "^%$cmd" devtool.conf`
  if [ ".$cmdline" = . ]; then
      echo "devtool:ERROR: command $cmd not found in devtool.conf" 1>&2
      exit 1
  fi
  
  if [ ".$TMPDIR" != . ]; then
      tmpdir="$TMPDIR"
  elif [ ".$TEMPDIR" != . ]; then
      tmpdir="$TEMPDIR"
  else
      tmpdir="/tmp"
  fi
  tmpfile="$tmpdir/rc.$$.tmp"
  
  rm -f $tmpfile
  touch $tmpfile
  echo ". $devtoolfunc" >>$tmpfile
  ( sed <devtool.conf -e "1,/^%common/d" -e '/^%.*/,$d'
    sed <devtool.conf -e "1,/^%$cmd/d" -e '/^%.*/,$d' ) |\
  sed -e 's;\([ 	]\)@\([a-zA-Z_][a-zA-Z0-9_]*\);\1devtool_\2;' >>$tmpfile
  
  sh $tmpfile "$@"
  
  rm -f $tmpfile >/dev/null 2>&1 || true
  
  Index: ossp-pkg/pth/devtool.conf
  ============================================================
  $ cvs update -p -r1.1 devtool.conf
  ##
  ##  devtool.conf -- Development Tool Configuration
  ##
  
  %autogen
      @autogen shtool   1.5.4 "1.5.*" echo version scpp mkdir install fixperm tarball
      @autogen libtool  1.4.2 "1.4*"
      @autogen autoconf 2.52  "2.5.*"
  	cat acheader.m4 configure.ac | autoheader - >pth_acdef.h.in
  
  %autoclean
      @autoclean shtool
      @autoclean libtool
      @autoclean autoconf
  
  %configure
      if [ $# -gt 0 ]; then
          param="$1"
          shift
      else
          param=devel
      fi
      ./configure --with-param=$param "$@"
  
  %version
      ./shtool version -lc -n 'GNU Pth' -p pth_internal_ -e pth_vers.c
  
  %dist
      make distclean >/dev/null 2>&1
      ./shtool fixperm -v .
      V=`./shtool version -lc -d short pth_vers.c`
      ./shtool tarball -o pth-${V}.tar.gz -d pth-${V} -u gnu -g pth \
                       -e 'CVS,\.cvsignore,\.[ao],^\.,devtool*' -c 'gzip --best' .
  
  %snap
      make distclean >/dev/null 2>&1
      ./shtool fixperm -v .
      V=`./shtool version -lc -d short pth_vers.c`
      ./shtool tarball -o pth-${V}-SNAP.tar.gz -d pth-${V} -u gnu -g pth \
                       -e 'CVS,\.cvsignore,\.[ao],^\.,devtool*' -c 'gzip --best' .
  
  %striptease
  	perl striptease.pl
  
  %depend
  	cp Makefile.in Makefile.in.bak
  	sed -ne '1,/^# DO NOT REMOVE/p' Makefile.in >Makefile.new
  	gcc -MM -I. *.c |\
  	perl -e 'my $d = ""; $d .= $_ while (<STDIN>); $_ = $d; \
  	         s/^(pth_.*)\.o:/$1.lo:/; \
  	         s|\\\n\s*| |sg; s|\b?\S*/\S*\b?||g; s|\s{2,}| |g; \
  	         print $_;' >> Makefile.new
  	cp Makefile.new Makefile.in
  	rm -f Makefile.new
  
  Index: ossp-pkg/pth/devtool.func
  ============================================================
  $ cvs update -p -r1.1 devtool.func
  ##
  ##  devtool.func -- Development Tool Functions
  ##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  devtool_require () {
      t="$1"; o="$2"; p="$3"; e="$4"; a="$5"
      v=`($t $o | head -1 | awk "{ print \\\$$p; }") 2>/dev/null`
      if [ ".$v" = . ]; then
          echo "devtool:ERROR: unable to determine version of $t" 1>&2
          exit 1
      fi
      case "$v" in
          $e )
              ;;
          $a )
              echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
              ;;
          * )
              echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
              exit 1
              ;;
      esac
      echo "$v"
  }
  
  devtool_autogen () {
      tool=$1
      shift
      case $tool in
          autoconf )
              autoconf_version=`devtool_require autoconf --version 4 "$1" "$2"`
              echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
              autoconf
              autoheader 2>&1 | grep -v "is unchanged"
              ;;
          libtool )
              libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
              echo "generating (GNU Libtool $libtoolize_version): ltmain.sh, libtool.m4, config.guess, config.sub"
              libtoolize --force --copy >/dev/null 2>&1
              cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
                  sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` libtool.m4
              ;;
          shtool )
              shtoolize_version=`devtool_require shtoolize -v 3 "$1" "$2"`
              echo "generating (GNU Shtool $shtoolize_version): shtool"
              shift
              shift
              shtoolize -q "$@"
              ;;
      esac
  }
  
  devtool_autoclean () {
      tool=$1
      shift
      case $tool in
          autoconf )
              echo "removing: configure config.h.in"
              rm -f configure config.h.in
              ;;
          libtool )
              echo "removing: ltmain.sh libtool.m4 config.guess config.sub"
              rm -f ltmain.sh libtool.m4 config.guess config.sub
              ;;
          shtool )
              echo "removing: shtool"
              rm -f shtool
              ;;
      esac
  }
  
          Index: ossp-pkg/pth/pth.m4
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 pth.m4
  --- ossp-pkg/pth/pth.m4	27 Jan 2002 11:03:40 -0000	1.8
  +++ ossp-pkg/pth/pth.m4	30 Jan 2002 12:54:24 -0000	1.9
  @@ -21,7 +21,7 @@
   dnl ##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
   dnl ##
   dnl ##  pth.m4: Autoconf macro for locating GNU Pth from within
  -dnl ##          configure.in of third-party software packages
  +dnl ##          configure.ac of third-party software packages
   dnl ##
   
   dnl ##
  Index: ossp-pkg/pth/pth.pod
  ============================================================
  $ cvs diff -u -r1.151 -r1.152 pth.pod
  --- ossp-pkg/pth/pth.pod	27 Jan 2002 11:03:40 -0000	1.151
  +++ ossp-pkg/pth/pth.pod	30 Jan 2002 12:54:24 -0000	1.152
  @@ -1914,16 +1914,16 @@
   
   Because B<autoconf> generates additional files, we added a canonical
   C<distclean> target which cleans this up. Secondly, we wrote
  -C<configure.in>, a (minimal) B<autoconf> script specification:
  +C<configure.ac>, a (minimal) B<autoconf> script specification:
   
  - $ vi configure.in
  + $ vi configure.ac
    | AC_INIT(Makefile.in)
    | AC_CHECK_PTH(1.3.0)
    | AC_OUTPUT(Makefile)
   
   Then we let B<autoconf>'s C<aclocal> program generate for us an C<aclocal.m4>
   file containing B<Pth>'s C<AC_CHECK_PTH> macro. Then we generate the final
  -C<configure> script out of this C<aclocal.m4> file and the C<configure.in>
  +C<configure> script out of this C<aclocal.m4> file and the C<configure.ac>
   file:
   
    $ aclocal --acdir=`pth-config --acdir`
  @@ -1935,7 +1935,7 @@
    -rw-r--r--  1 rse  users    176 Nov  3 11:11 Makefile.in
    -rw-r--r--  1 rse  users  15314 Nov  3 11:16 aclocal.m4
    -rwxr-xr-x  1 rse  users  52045 Nov  3 11:16 configure
  - -rw-r--r--  1 rse  users     63 Nov  3 11:11 configure.in
  + -rw-r--r--  1 rse  users     63 Nov  3 11:11 configure.ac
    -rw-r--r--  1 rse  users   4227 Nov  3 11:11 foo.c
   
   If we now run C<configure> we get a correct C<Makefile> which
  @@ -2016,9 +2016,9 @@
    |     rm -f config.log config.status config.cache
    |     rm -f Makefile
   
  -Then we create a slightly different B<autoconf> script C<configure.in>:
  +Then we create a slightly different B<autoconf> script C<configure.ac>:
   
  - $ vi configure.in
  + $ vi configure.ac
    | AC_INIT(Makefile.in)
    | AC_CONFIG_AUX_DIR(pth)
    | AC_CHECK_PTH(1.3.0, subdir:pth --disable-tests)
  @@ -2038,7 +2038,7 @@
   Now we let B<autoconf>'s C<aclocal> program again generate for us an
   C<aclocal.m4> file with the contents of B<Pth>'s C<AC_CHECK_PTH> macro.
   Finally we generate the C<configure> script out of this C<aclocal.m4>
  -file and the C<configure.in> file.
  +file and the C<configure.ac> file.
   
    $ aclocal --acdir=`pth-config --acdir`
    $ autoconf
  @@ -2063,7 +2063,7 @@
    -rw-r--r--  1 rse  users    709 Nov  3 11:51 Makefile.in
    -rw-r--r--  1 rse  users  16431 Nov  3 12:20 aclocal.m4
    -rwxr-xr-x  1 rse  users  57403 Nov  3 12:21 configure
  - -rw-r--r--  1 rse  users    129 Nov  3 12:21 configure.in
  + -rw-r--r--  1 rse  users    129 Nov  3 12:21 configure.ac
    -rw-r--r--  1 rse  users   4227 Nov  3 11:11 foo.c
    drwxr-xr-x  2 rse  users   3584 Nov  3 12:36 pth
    $ ls -l pth/
  Index: ossp-pkg/pth/pth_acdef.h.in
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 pth_acdef.h.in
  --- ossp-pkg/pth/pth_acdef.h.in	27 Jan 2002 11:03:40 -0000	1.17
  +++ ossp-pkg/pth/pth_acdef.h.in	30 Jan 2002 12:54:24 -0000	1.18
  @@ -28,8 +28,6 @@
   #define _PTH_ACDEF_H_
   
   
  -/* Define if you have the ANSI C header files.  */
  -#undef STDC_HEADERS
   
   /* the custom Autoconf defines */
   #undef HAVE_SIG_ATOMIC_T
  @@ -56,164 +54,171 @@
   #undef PTH_STACKGROWTH
   #undef PTH_DMALLOC
   
  -/* Define if you have the _longjmp function.  */
  -#undef HAVE__LONGJMP
   
  -/* Define if you have the _setjmp function.  */
  -#undef HAVE__SETJMP
  +/* Define if you have the <dlfcn.h> header file. */
  +#undef HAVE_DLFCN_H
  +
  +/* Define if you have the <dmalloc.h> header file. */
  +#undef HAVE_DMALLOC_H
   
  -/* Define if you have the getcontext function.  */
  +/* Define if you have the <errno.h> header file. */
  +#undef HAVE_ERRNO_H
  +
  +/* Define if you have the <fcntl.h> header file. */
  +#undef HAVE_FCNTL_H
  +
  +/* Define if you have the `getcontext' function. */
   #undef HAVE_GETCONTEXT
   
  -/* Define if you have the gettimeofday function.  */
  +/* Define if you have the `gettimeofday' function. */
   #undef HAVE_GETTIMEOFDAY
   
  -/* Define if you have the longjmp function.  */
  +/* Define if you have the `dmalloc' library (-ldmalloc). */
  +#undef HAVE_LIBDMALLOC
  +
  +/* Define if you have the `nsl' library (-lnsl). */
  +#undef HAVE_LIBNSL
  +
  +/* Define if you have the `sfio' library (-lsfio). */
  +#undef HAVE_LIBSFIO
  +
  +/* Define if you have the `socket' library (-lsocket). */
  +#undef HAVE_LIBSOCKET
  +
  +/* Define if you have the `longjmp' function. */
   #undef HAVE_LONGJMP
   
  -/* Define if you have the makecontext function.  */
  +/* Define if you have the `makecontext' function. */
   #undef HAVE_MAKECONTEXT
   
  -/* Define if you have the poll function.  */
  +/* Define if you have the <net/errno.h> header file. */
  +#undef HAVE_NET_ERRNO_H
  +
  +/* Define if you have the <paths.h> header file. */
  +#undef HAVE_PATHS_H
  +
  +/* Define if you have the `poll' function. */
   #undef HAVE_POLL
   
  -/* Define if you have the readv function.  */
  +/* Define if you have the <pthread.h> header file. */
  +#undef HAVE_PTHREAD_H
  +
  +/* Define if you have the `readv' function. */
   #undef HAVE_READV
   
  -/* Define if you have the select function.  */
  +/* Define if you have the `select' function. */
   #undef HAVE_SELECT
   
  -/* Define if you have the setcontext function.  */
  +/* Define if you have the `setcontext' function. */
   #undef HAVE_SETCONTEXT
   
  -/* Define if you have the setjmp function.  */
  +/* Define if you have the `setjmp' function. */
   #undef HAVE_SETJMP
   
  -/* Define if you have the sigaction function.  */
  +/* Define if you have the <setjmp.h> header file. */
  +#undef HAVE_SETJMP_H
  +
  +/* Define if you have the <sfio.h> header file. */
  +#undef HAVE_SFIO_H
  +
  +/* Define if you have the `sigaction' function. */
   #undef HAVE_SIGACTION
   
  -/* Define if you have the sigaltstack function.  */
  +/* Define if you have the `sigaltstack' function. */
   #undef HAVE_SIGALTSTACK
   
  -/* Define if you have the siglongjmp function.  */
  +/* Define if you have the `siglongjmp' function. */
   #undef HAVE_SIGLONGJMP
   
  -/* Define if you have the sigpending function.  */
  +/* Define if you have the <signal.h> header file. */
  +#undef HAVE_SIGNAL_H
  +
  +/* Define if you have the `sigpending' function. */
   #undef HAVE_SIGPENDING
   
  -/* Define if you have the sigprocmask function.  */
  +/* Define if you have the `sigprocmask' function. */
   #undef HAVE_SIGPROCMASK
   
  -/* Define if you have the sigsetjmp function.  */
  +/* Define if you have the `sigsetjmp' function. */
   #undef HAVE_SIGSETJMP
   
  -/* Define if you have the sigstack function.  */
  +/* Define if you have the `sigstack' function. */
   #undef HAVE_SIGSTACK
   
  -/* Define if you have the sigsuspend function.  */
  +/* Define if you have the `sigsuspend' function. */
   #undef HAVE_SIGSUSPEND
   
  -/* Define if you have the strerror function.  */
  -#undef HAVE_STRERROR
  -
  -/* Define if you have the swapcontext function.  */
  -#undef HAVE_SWAPCONTEXT
  -
  -/* Define if you have the syscall function.  */
  -#undef HAVE_SYSCALL
  -
  -/* Define if you have the usleep function.  */
  -#undef HAVE_USLEEP
  -
  -/* Define if you have the writev function.  */
  -#undef HAVE_WRITEV
  -
  -/* Define if you have the <dmalloc.h> header file.  */
  -#undef HAVE_DMALLOC_H
  -
  -/* Define if you have the <errno.h> header file.  */
  -#undef HAVE_ERRNO_H
  -
  -/* Define if you have the <fcntl.h> header file.  */
  -#undef HAVE_FCNTL_H
  -
  -/* Define if you have the <net/errno.h> header file.  */
  -#undef HAVE_NET_ERRNO_H
  -
  -/* Define if you have the <paths.h> header file.  */
  -#undef HAVE_PATHS_H
  -
  -/* Define if you have the <pthread.h> header file.  */
  -#undef HAVE_PTHREAD_H
  -
  -/* Define if you have the <setjmp.h> header file.  */
  -#undef HAVE_SETJMP_H
  -
  -/* Define if you have the <sfio.h> header file.  */
  -#undef HAVE_SFIO_H
  -
  -/* Define if you have the <signal.h> header file.  */
  -#undef HAVE_SIGNAL_H
  -
  -/* Define if you have the <stdarg.h> header file.  */
  +/* Define if you have the <stdarg.h> header file. */
   #undef HAVE_STDARG_H
   
  -/* Define if you have the <stdio.h> header file.  */
  +/* Define if you have the <stdio.h> header file. */
   #undef HAVE_STDIO_H
   
  -/* Define if you have the <stdlib.h> header file.  */
  +/* Define if you have the <stdlib.h> header file. */
   #undef HAVE_STDLIB_H
   
  -/* Define if you have the <string.h> header file.  */
  +/* Define if you have the `strerror' function. */
  +#undef HAVE_STRERROR
  +
  +/* Define if you have the <string.h> header file. */
   #undef HAVE_STRING_H
   
  -/* Define if you have the <sys/resource.h> header file.  */
  +/* Define if you have the `swapcontext' function. */
  +#undef HAVE_SWAPCONTEXT
  +
  +/* Define if you have the `syscall' function. */
  +#undef HAVE_SYSCALL
  +
  +/* Define if you have the <sys/resource.h> header file. */
   #undef HAVE_SYS_RESOURCE_H
   
  -/* Define if you have the <sys/select.h> header file.  */
  +/* Define if you have the <sys/select.h> header file. */
   #undef HAVE_SYS_SELECT_H
   
  -/* Define if you have the <sys/socket.h> header file.  */
  -#undef HAVE_SYS_SOCKET_H
  -
  -/* Define if you have the <sys/socketcall.h> header file.  */
  +/* Define if you have the <sys/socketcall.h> header file. */
   #undef HAVE_SYS_SOCKETCALL_H
   
  -/* Define if you have the <sys/stat.h> header file.  */
  +/* Define if you have the <sys/socket.h> header file. */
  +#undef HAVE_SYS_SOCKET_H
  +
  +/* Define if you have the <sys/stat.h> header file. */
   #undef HAVE_SYS_STAT_H
   
  -/* Define if you have the <sys/syscall.h> header file.  */
  +/* Define if you have the <sys/syscall.h> header file. */
   #undef HAVE_SYS_SYSCALL_H
   
  -/* Define if you have the <sys/time.h> header file.  */
  +/* Define if you have the <sys/time.h> header file. */
   #undef HAVE_SYS_TIME_H
   
  -/* Define if you have the <sys/types.h> header file.  */
  +/* Define if you have the <sys/types.h> header file. */
   #undef HAVE_SYS_TYPES_H
   
  -/* Define if you have the <sys/uio.h> header file.  */
  +/* Define if you have the <sys/uio.h> header file. */
   #undef HAVE_SYS_UIO_H
   
  -/* Define if you have the <sys/wait.h> header file.  */
  +/* Define if you have the <sys/wait.h> header file. */
   #undef HAVE_SYS_WAIT_H
   
  -/* Define if you have the <ucontext.h> header file.  */
  +/* Define if you have the <ucontext.h> header file. */
   #undef HAVE_UCONTEXT_H
   
  -/* Define if you have the <unistd.h> header file.  */
  +/* Define if you have the <unistd.h> header file. */
   #undef HAVE_UNISTD_H
   
  -/* Define if you have the dmalloc library (-ldmalloc).  */
  -#undef HAVE_LIBDMALLOC
  +/* Define if you have the `usleep' function. */
  +#undef HAVE_USLEEP
   
  -/* Define if you have the nsl library (-lnsl).  */
  -#undef HAVE_LIBNSL
  +/* Define if you have the `writev' function. */
  +#undef HAVE_WRITEV
   
  -/* Define if you have the sfio library (-lsfio).  */
  -#undef HAVE_LIBSFIO
  +/* Define if you have the `_longjmp' function. */
  +#undef HAVE__LONGJMP
   
  -/* Define if you have the socket library (-lsocket).  */
  -#undef HAVE_LIBSOCKET
  +/* Define if you have the `_setjmp' function. */
  +#undef HAVE__SETJMP
  +
  +/* Define if you have the ANSI C header files. */
  +#undef STDC_HEADERS
   
   #endif /* _PTH_ACDEF_H_ */
   
      

From ossp-cvs-owner@ossp.org  Wed Jan 30 13:57:11 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C429D764D8; Wed, 30 Jan 2002 13:57:11 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth pth_acdef.h.in
Message-Id: <20020130125711.C429D764D8@mail.ossp.org>
Date: Wed, 30 Jan 2002 13:57:11 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   30-Jan-2002 13:57:11
  Branch: HEAD                             Handle: 1970010101000000

  Removed files:
    ossp-pkg/pth            pth_acdef.h.in

  Log:
    remove one more generated file

  Summary:
    Revision    Changes     Path
    NONE        +0  -224    ossp-pkg/pth/pth_acdef.h.in
  ____________________________________________________________________________

  

From ossp-cvs-owner@ossp.org  Wed Jan 30 14:05:23 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DA800764D8; Wed, 30 Jan 2002 14:05:22 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth .cvsignore
Message-Id: <20020130130522.DA800764D8@mail.ossp.org>
Date: Wed, 30 Jan 2002 14:05:22 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   30-Jan-2002 14:05:22
  Branch: HEAD                             Handle: 2002013013052200

  Modified files:
    ossp-pkg/pth            .cvsignore

  Log:
    ignore generated files

  Summary:
    Revision    Changes     Path
    1.20        +24 -14     ossp-pkg/pth/.cvsignore
  ____________________________________________________________________________

  Index: ossp-pkg/pth/.cvsignore
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 .cvsignore
  --- ossp-pkg/pth/.cvsignore	30 Jan 2002 12:54:21 -0000	1.19
  +++ ossp-pkg/pth/.cvsignore	30 Jan 2002 13:05:22 -0000	1.20
  @@ -1,30 +1,40 @@
  +*.a
  +*.core
  +*.la
  +*.lo
  +*.o
  +.done-*
  +.libs
   Makefile
  -config.log
   config.cache
  +config.guess
  +config.log
   config.status
  +config.sub
  +configure
  +core
   libtool
  -.libs
  -.done-*
  +libtool.m4
  +ltmain.sh
   pth-config
  +pth-config.1
  +pth.3
  +pth.h
   pth_acdef.h
  +pth_acdef.h.in
   pth_acmac.h
  -pth.h
   pth_p.h
   pthread-config
  +pthread-config.1
  +pthread.3
   pthread.h
  -test_std
  +shtool
   test_httpd
   test_misc
   test_mp
   test_philo
  -test_sig
  +test_pthread
   test_select
   test_sfio
  -test_pthread
  -*.o
  -*.lo
  -*.a
  -*.la
  -core
  -*.core
  -libtool.m4
  +test_sig
  +test_std

From ossp-cvs-owner@ossp.org  Wed Jan 30 14:06:10 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CDA3A764D8; Wed, 30 Jan 2002 14:06:09 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth aclocal.m4
Message-Id: <20020130130609.CDA3A764D8@mail.ossp.org>
Date: Wed, 30 Jan 2002 14:06:09 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   30-Jan-2002 14:06:09
  Branch: HEAD                             Handle: 2002013013060900

  Modified files:
    ossp-pkg/pth            aclocal.m4

  Log:
    better support uninstalled source trees

  Summary:
    Revision    Changes     Path
    1.94        +6  -2      ossp-pkg/pth/aclocal.m4
  ____________________________________________________________________________

  Index: ossp-pkg/pth/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.93 -r1.94 aclocal.m4
  --- ossp-pkg/pth/aclocal.m4	30 Jan 2002 12:54:21 -0000	1.93
  +++ ossp-pkg/pth/aclocal.m4	30 Jan 2002 13:06:09 -0000	1.94
  @@ -1196,7 +1196,7 @@
               found=0
               #   via config script
               for dir in $with_$2/bin $with_$2; do
  -                if test -f "$dir/$2-config"; then
  +                if test -f "$dir/$2-config" && test ! -f "$dir/$2-config.in"; then
                       $2_version=`($dir/$2-config --version) 2>/dev/null`
                       if test ".$$2_version" != .; then
                           CPPFLAGS="$CPPFLAGS `$dir/$2-config --cflags`"
  @@ -1218,7 +1218,11 @@
                       fi
                   done
                   for dir in $with_$2/lib/$2 $with_$2/lib $with_$2; do
  -                    if test -f "$dir/lib$2.a" -o -f "$dir/lib$2.so"; then
  +                    if test -f "$dir/lib$2.la" && test -d "$dir/.libs"; then
  +                        LDFLAGS="$LDFLAGS -L$dir -L$dir/.libs"
  +                        found=1
  +                        break
  +                    elif test -f "$dir/lib$2.a" -o -f "$dir/lib$2.so"; then
                           LDFLAGS="$LDFLAGS -L$dir"
                           found=1
                           break

From ossp-cvs-owner@ossp.org  Wed Jan 30 14:07:10 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0E1D8764D8; Wed, 30 Jan 2002 14:07:10 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog INSTALL acconfig.h pth_lib.c pth_p....
Message-Id: <20020130130710.0E1D8764D8@mail.ossp.org>
Date: Wed, 30 Jan 2002 14:07:10 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   30-Jan-2002 14:07:09
  Branch: HEAD                             Handle: 2002013013070701

  Modified files:
    ossp-pkg/pth            ChangeLog INSTALL acconfig.h pth_lib.c pth_p.h.in
                            pth_tcb.c

  Log:
    Add optional support for OSSP ex based exception handling. GNU Pth
    (still) does not throw exceptions by itself, but handles the per-thread
    exception context of OSSP ex to make exception handling local to a
    thread.

  Summary:
    Revision    Changes     Path
    1.560       +6  -0      ossp-pkg/pth/ChangeLog
    1.31        +8  -0      ossp-pkg/pth/INSTALL
    1.29        +1  -0      ossp-pkg/pth/acconfig.h
    1.48        +27 -0      ossp-pkg/pth/pth_lib.c
    1.30        +5  -0      ossp-pkg/pth/pth_p.h.in
    1.38        +5  -0      ossp-pkg/pth/pth_tcb.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.559 -r1.560 ChangeLog
  --- ossp-pkg/pth/ChangeLog	30 Jan 2002 12:54:21 -0000	1.559
  +++ ossp-pkg/pth/ChangeLog	30 Jan 2002 13:07:07 -0000	1.560
  @@ -19,6 +19,12 @@
       | |_ ___) |
     __|_(_)____/____________________________________________________________
   
  +   *) Add optional support for OSSP ex based exception handling. GNU
  +      Pth (still) does not throw exceptions by itself, but handles the
  +      per-thread exception context of OSSP ex to make exception handling
  +      local to a thread.
  +      [Ralf S. Engelschall]
  +
      *) Removed all generated files from CVS.
         Use OSSP devtool stuff to re-generate files on demand.
         Switched to Autoconf 2.52 and Libtool 1.4.2 environment.
  Index: ossp-pkg/pth/INSTALL
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 INSTALL
  --- ossp-pkg/pth/INSTALL	19 Feb 2000 16:34:24 -0000	1.30
  +++ ossp-pkg/pth/INSTALL	30 Jan 2002 13:07:08 -0000	1.31
  @@ -29,6 +29,7 @@
         [--enable-syscall-soft]
         [--enable-syscall-hard]
         [--with-sfio[=DIR]]
  +      [--with-ex[=DIR]]
         [--with-dmalloc[=DIR]]
         [--with-mctx-mth=ID]
         [--with-mctx-dsp=ID]
  @@ -96,6 +97,13 @@
         given via CFLAGS and LDFLAGS or the DIR argument has to specify the root
         of the Sfio installation tree. Sfio can be found at
         http://www.research.att.com/sw/tools/sfio/.
  +
  +  --with-ex[=DIR]
  +      This can be used to enable OSSP ex support (exception handling)
  +      for Pth. The paths to the include and library file of OSSP ex has
  +      to be either given via CFLAGS and LDFLAGS or the DIR argument has
  +      to specify the root of the OSSP ex installation tree. OSSP ex can
  +      be found at http://www.ossp.org/pkg/ex/.
   
     --with-dmalloc[=DIR]
         This can be used to enable Dmalloc support (debugging memory
  Index: ossp-pkg/pth/acconfig.h
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 acconfig.h
  --- ossp-pkg/pth/acconfig.h	27 Jan 2002 11:03:40 -0000	1.28
  +++ ossp-pkg/pth/acconfig.h	30 Jan 2002 13:07:08 -0000	1.29
  @@ -52,6 +52,7 @@
   #undef PTH_MCTX_STK_use
   #undef PTH_STACKGROWTH
   #undef PTH_DMALLOC
  +#undef PTH_EX
   
   @BOTTOM@
   
  Index: ossp-pkg/pth/pth_lib.c
  ============================================================
  $ cvs diff -u -r1.47 -r1.48 pth_lib.c
  --- ossp-pkg/pth/pth_lib.c	27 Jan 2002 11:03:40 -0000	1.47
  +++ ossp-pkg/pth/pth_lib.c	30 Jan 2002 13:07:08 -0000	1.48
  @@ -43,6 +43,18 @@
           pth_init();
   #endif
   
  +#ifdef PTH_EX
  +/* exception handling callback functions */
  +static ex_ctx_t *pth_ex_ctx(void)
  +{
  +    return &(pth_current->ex_ctx);
  +}
  +static void pth_ex_terminate(ex_t *ex)
  +{
  +    pth_exit(ex->ex_value);
  +}
  +#endif
  +
   /* initialize the package */
   int pth_init(void)
   {
  @@ -60,6 +72,12 @@
       /* initialize the scheduler */
       pth_scheduler_init();
   
  +#ifdef PTH_EX
  +    /* optional support for exceptional handling */
  +    __ex_ctx       = pth_ex_ctx;
  +    __ex_terminate = pth_ex_terminate;
  +#endif
  +
       /* spawn the scheduler thread */
       t_attr = pth_attr_new();
       pth_attr_set(t_attr, PTH_ATTR_PRIO,         PTH_PRIO_MAX);
  @@ -120,6 +138,10 @@
       pth_initialized = FALSE;
       pth_tcb_free(pth_sched);
       pth_tcb_free(pth_main);
  +#ifdef PTH_EX
  +    __ex_ctx       = __ex_ctx_default;
  +    __ex_terminate = __ex_terminate_default;
  +#endif
       pth_debug1("pth_kill: leave");
       return TRUE;
   }
  @@ -261,6 +283,11 @@
   
       /* initialize mutex stuff */
       pth_ring_init(&t->mutexring);
  +
  +#ifdef PTH_EX
  +    /* initialize exception handling context */
  +    EX_CTX_INITIALIZE(&t->ex_ctx);
  +#endif
   
       /* initialize the machine context of this new thread */
       if (t->stacksize > 0) { /* the "main thread" (indicated by == 0) is special! */
  Index: ossp-pkg/pth/pth_p.h.in
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 pth_p.h.in
  --- ossp-pkg/pth/pth_p.h.in	27 Jan 2002 11:03:40 -0000	1.29
  +++ ossp-pkg/pth/pth_p.h.in	30 Jan 2002 13:07:08 -0000	1.30
  @@ -70,6 +70,11 @@
   #include <dmalloc.h>
   #endif
   
  +/* OSSP ex support */
  +#ifdef PTH_EX
  +#include "ex.h"
  +#endif
  +
   /* paths */
   #ifdef HAVE_PATHS_H
   #include <paths.h>
  Index: ossp-pkg/pth/pth_tcb.c
  ============================================================
  $ cvs diff -u -r1.37 -r1.38 pth_tcb.c
  --- ossp-pkg/pth/pth_tcb.c	27 Jan 2002 11:03:41 -0000	1.37
  +++ ossp-pkg/pth/pth_tcb.c	30 Jan 2002 13:07:08 -0000	1.38
  @@ -78,6 +78,11 @@
   
       /* mutex ring */
       pth_ring_t     mutexring;            /* ring of aquired mutex structures            */
  +
  +#ifdef PTH_EX
  +    /* per-thread exception handling */
  +    ex_ctx_t       ex_ctx;               /* exception handling context                  */
  +#endif
   };
   
   #endif /* cpp */

From ossp-cvs-owner@ossp.org  Wed Jan 30 14:15:34 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4EE92764D8; Wed, 30 Jan 2002 14:15:34 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth Makefile.in devtool.conf
Message-Id: <20020130131534.4EE92764D8@mail.ossp.org>
Date: Wed, 30 Jan 2002 14:15:34 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   30-Jan-2002 14:15:34
  Branch: HEAD                             Handle: 2002013013153300

  Modified files:
    ossp-pkg/pth            Makefile.in devtool.conf

  Log:
    fix dependency generation and defaults

  Summary:
    Revision    Changes     Path
    1.146       +26 -25     ossp-pkg/pth/Makefile.in
    1.2         +1  -1      ossp-pkg/pth/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/pth/Makefile.in
  ============================================================
  $ cvs diff -u -r1.145 -r1.146 Makefile.in
  --- ossp-pkg/pth/Makefile.in	30 Jan 2002 12:54:21 -0000	1.145
  +++ ossp-pkg/pth/Makefile.in	30 Jan 2002 13:15:33 -0000	1.146
  @@ -413,36 +413,37 @@
   
   # DO NOT REMOVE
   pth_attr.lo: pth_attr.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  -pth_cancel.o: pth_cancel.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  -pth_clean.o: pth_clean.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  -pth_compat.o: pth_compat.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  -pth_data.o: pth_data.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  -pth_debug.o: pth_debug.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  -pth_errno.o: pth_errno.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  -pth_event.o: pth_event.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  -pth_ext.o: pth_ext.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  -pth_fork.o: pth_fork.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  -pth_high.o: pth_high.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  -pth_lib.o: pth_lib.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  -pth_mctx.o: pth_mctx.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  -pth_msg.o: pth_msg.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  -pth_pqueue.o: pth_pqueue.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  -pth_ring.o: pth_ring.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  -pth_sched.o: pth_sched.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  -pth_string.o: pth_string.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  -pth_sync.o: pth_sync.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  -pth_syscall.o: pth_syscall.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  -pth_tcb.o: pth_tcb.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  -pth_time.o: pth_time.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  -pth_util.o: pth_util.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  -pth_vers.o: pth_vers.c pth_vers.c
  -pthread.o: pthread.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_cancel.lo: pth_cancel.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_clean.lo: pth_clean.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_compat.lo: pth_compat.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_data.lo: pth_data.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_debug.lo: pth_debug.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_errno.lo: pth_errno.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_event.lo: pth_event.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_ext.lo: pth_ext.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_fork.lo: pth_fork.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_high.lo: pth_high.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_lib.lo: pth_lib.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_mctx.lo: pth_mctx.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_msg.lo: pth_msg.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_pqueue.lo: pth_pqueue.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_ring.lo: pth_ring.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_sched.lo: pth_sched.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_string.lo: pth_string.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_sync.lo: pth_sync.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_syscall.lo: pth_syscall.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_tcb.lo: pth_tcb.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_time.lo: pth_time.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_util.lo: pth_util.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
  +pth_vers.lo: pth_vers.c pth_vers.c
  +pthread.o: pthread.c pthread.h pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h
   test_common.o: test_common.c pth.h test_common.h
   test_httpd.o: test_httpd.c pth.h test_common.h
   test_misc.o: test_misc.c pth.h
   test_mp.o: test_mp.c pth.h test_common.h
   test_philo.o: test_philo.c pth.h test_common.h
  -test_pthread.o: test_pthread.c test_select.o: test_select.c pth.h
  +test_pthread.o: test_pthread.c pthread.h
  +test_select.o: test_select.c pth.h
   test_sfio.o: test_sfio.c pth.h
   test_sig.o: test_sig.c pth.h
   test_std.o: test_std.c pth.h
  Index: ossp-pkg/pth/devtool.conf
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.conf
  --- ossp-pkg/pth/devtool.conf	30 Jan 2002 12:54:22 -0000	1.1
  +++ ossp-pkg/pth/devtool.conf	30 Jan 2002 13:15:33 -0000	1.2
  @@ -47,7 +47,7 @@
   	sed -ne '1,/^# DO NOT REMOVE/p' Makefile.in >Makefile.new
   	gcc -MM -I. *.c |\
   	perl -e 'my $d = ""; $d .= $_ while (<STDIN>); $_ = $d; \
  -	         s/^(pth_.*)\.o:/$1.lo:/; \
  +	         s/^(pth_.*)\.o:/$1.lo:/mg; \
   	         s|\\\n\s*| |sg; s|\b?\S*/\S*\b?||g; s|\s{2,}| |g; \
   	         print $_;' >> Makefile.new
   	cp Makefile.new Makefile.in

From ossp-cvs-owner@ossp.org  Wed Jan 30 14:15:50 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 77A7D764FA; Wed, 30 Jan 2002 14:15:50 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth configure.ac
Message-Id: <20020130131550.77A7D764FA@mail.ossp.org>
Date: Wed, 30 Jan 2002 14:15:50 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   30-Jan-2002 14:15:50
  Branch: HEAD                             Handle: 2002013013155000

  Modified files:
    ossp-pkg/pth            configure.ac

  Log:
    Ops, forgot to commit the OSSP ex Autoconf part

  Summary:
    Revision    Changes     Path
    1.2         +3  -0      ossp-pkg/pth/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/pth/configure.ac
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 configure.ac
  --- ossp-pkg/pth/configure.ac	30 Jan 2002 12:54:22 -0000	1.1
  +++ ossp-pkg/pth/configure.ac	30 Jan 2002 13:15:50 -0000	1.2
  @@ -574,6 +574,9 @@
   AC_SUBST(UNINSTALL_PTHREAD)
   AC_SUBST(TEST_PTHREAD)
   
  +dnl #   whether to build against OSSP ex library
  +AC_CHECK_EXTLIB(OSSP ex, ex, __ex_ctx, ex.h, AC_DEFINE(PTH_EX))
  +
   dnl #   whether to build against Sfio library
   PTH_EXT_SFIO=0
   AC_CHECK_EXTLIB(Sfio, sfio, sfdisc, sfio.h, PTH_EXT_SFIO=1)

From ossp-cvs-owner@ossp.org  Wed Jan 30 14:34:41 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 69E4A764D8; Wed, 30 Jan 2002 14:34:41 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth pth_p.h.in
Message-Id: <20020130133441.69E4A764D8@mail.ossp.org>
Date: Wed, 30 Jan 2002 14:34:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   30-Jan-2002 14:34:41
  Branch: HEAD                             Handle: 2002013013344000

  Modified files:
    ossp-pkg/pth            pth_p.h.in

  Log:
    resolve namespace conflict

  Summary:
    Revision    Changes     Path
    1.31        +1  -0      ossp-pkg/pth/pth_p.h.in
  ____________________________________________________________________________

  Index: ossp-pkg/pth/pth_p.h.in
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 pth_p.h.in
  --- ossp-pkg/pth/pth_p.h.in	30 Jan 2002 13:07:08 -0000	1.30
  +++ ossp-pkg/pth/pth_p.h.in	30 Jan 2002 13:34:40 -0000	1.31
  @@ -72,6 +72,7 @@
   
   /* OSSP ex support */
   #ifdef PTH_EX
  +#define __EX_NS_USE_CUSTOM__
   #include "ex.h"
   #endif
   

From ossp-cvs-owner@ossp.org  Wed Jan 30 14:39:41 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BCA86764D8; Wed, 30 Jan 2002 14:39:41 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex ex.pod
Message-Id: <20020130133941.BCA86764D8@mail.ossp.org>
Date: Wed, 30 Jan 2002 14:39:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   30-Jan-2002 14:39:41
  Branch: HEAD                             Handle: 2002013013394100

  Modified files:
    ossp-pkg/ex             ex.pod

  Log:
    mention C++ and Java

  Summary:
    Revision    Changes     Path
    1.16        +8  -7      ossp-pkg/ex/ex.pod
  ____________________________________________________________________________

  Index: ossp-pkg/ex/ex.pod
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 ex.pod
  --- ossp-pkg/ex/ex.pod	30 Jan 2002 12:34:41 -0000	1.15
  +++ ossp-pkg/ex/ex.pod	30 Jan 2002 13:39:41 -0000	1.16
  @@ -643,13 +643,14 @@
   
   =head1 HISTORY
   
  -B<OSSP ex> was invented in January 2002 by Ralf S. Engelschall
  -for use inside the OSSP project. Its creation was prompted by
  -the requirement to reduce the error handling inside B<OSSP
  -lmtp2nntp>. The core B<try>/B<catch> clause implementation is
  -derived from B<cexcept> 2.0.0, a similar library written 2000 by
  -Adam M. Costello E<lt>amc@cs.berkeley.eduE<gt> and Cosmin Truta
  -E<lt>cosmin@cs.toronto.eduE<gt>.
  +B<OSSP ex> was invented in January 2002 by Ralf S. Engelschall for use
  +inside the OSSP project. Its creation was prompted by the requirement
  +to reduce the error handling inside B<OSSP lmtp2nntp>. The core
  +B<try>/B<catch> clause is inspired by B<ISO-C++> and the implementation
  +is derived from B<cexcept> 2.0.0, a similar library written 2000
  +by Adam M. Costello E<lt>amc@cs.berkeley.eduE<gt> and Cosmin Truta
  +E<lt>cosmin@cs.toronto.eduE<gt>. The B<cleanup> clause is inspired by
  +the B<Java> C<finally> clause.
   
   =head1 AUTHORS
   

From ossp-cvs-owner@ossp.org  Wed Jan 30 15:00:24 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2F0B5764D8; Wed, 30 Jan 2002 15:00:24 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/popt popt.ac popt.c popt.h
Message-Id: <20020130140024.2F0B5764D8@mail.ossp.org>
Date: Wed, 30 Jan 2002 15:00:24 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   30-Jan-2002 15:00:24
  Branch: upstream                         Handle: 2002013014002002

  Added files:              (Branch: upstream)
    ossp-pkg/popt           popt.ac popt.c popt.h

  Log:
    Import of stripped down POPT 1.6.3
    
    [Release Tag: POPT_1_6_3]

  Summary:
    Revision    Changes     Path
    1.1.1.1     +3  -0      ossp-pkg/popt/popt.ac
    1.1.1.1     +2148 -0    ossp-pkg/popt/popt.c
    1.1.1.1     +207 -0     ossp-pkg/popt/popt.h
  ____________________________________________________________________________

  Index: ossp-pkg/popt/popt.ac
  ============================================================
  $ cvs update -p -r1.1.1.1 popt.ac
  AC_DEFUN(AC_POPT,[
      AC_CHECK_HEADERS(alloca.h float.h)
  Index: ossp-pkg/popt/popt.c
  ============================================================
  $ cvs update -p -r1.1.1.1 popt.c
  /* 
   *  Option Parsing Library (POPT)
   *  Copyright (c) 1998-2002 Red Hat, Inc.
   *
   *  Permission is hereby granted, free of charge, to any person obtaining a copy
   *  of this software and associated documentation files (the "Software"), to deal
   *  in the Software without restriction, including without limitation the rights
   *  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
   *  copies of the Software, and to permit persons to whom the Software is
   *  furnished to do so, subject to the following conditions:
   *
   *  The above copyright notice and this permission notice shall be included in
   *  all copies or substantial portions of the Software.
   *
   *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
   *  X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
   *  AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
   *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
   *
   *  Except as contained in this notice, the name of the X Consortium shall not be
   *  used in advertising or otherwise to promote the sale, use or other dealings
   *  in this Software without prior written authorization from the X Consortium.
   *
   *  NOTICE:
   *  This is an automatically generated, stripped down version of the
   *  POPT 1.6.3 library from Red Hat, Inc. This version is still
   *  distributed under above Open Source license, but Red Hat is no longer
   *  responsible for this version. Contact The OSSP Project instead.
   */
  
  #ifdef HAVE_CONFIG_H
  #include "config.h"
  #endif
  
  #include <ctype.h>
  #include <errno.h>
  #include <fcntl.h>
  #include <limits.h>
  
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  
  #include <unistd.h>
  
  #ifndef __GNUC__
  # if HAVE_ALLOCA_H
  #  include <alloca.h>
  # else
  #  ifdef _AIX
  #pragma alloca
  #  else
  #   ifndef alloca
  char *alloca();
  #   endif
  #  endif
  # endif
  #elif defined(__GNUC__) && defined(__STRICT_ANSI__)
  #define alloca __builtin_alloca
  #endif
  #include "popt.h"
  
  #ifndef H_POPTINT
  #define H_POPTINT
  
  static void *_free(const void *p)
  {
  	if (p != NULL)
  		free((void *)p);
  	return NULL;
  }
  
  typedef unsigned int __pbm_bits;
  #define	__PBM_NBITS		(8 * sizeof (__pbm_bits))
  #define	__PBM_IX(d)		((d) / __PBM_NBITS)
  #define __PBM_MASK(d)		((__pbm_bits) 1 << ((d) % __PBM_NBITS))
  typedef struct {
  	__pbm_bits bits[1];
  } pbm_set;
  #define	__PBM_BITS(set)	((set)->bits)
  
  #define	PBM_ALLOC(d)	calloc(__PBM_IX (d) + 1, sizeof(__pbm_bits))
  #define	PBM_FREE(s)	_free(s);
  #define PBM_SET(d, s)   (__PBM_BITS (s)[__PBM_IX (d)] |= __PBM_MASK (d))
  #define PBM_CLR(d, s)   (__PBM_BITS (s)[__PBM_IX (d)] &= ~__PBM_MASK (d))
  #define PBM_ISSET(d, s) ((__PBM_BITS (s)[__PBM_IX (d)] & __PBM_MASK (d)) != 0)
  
  struct optionStackEntry {
  	int argc;
  	const char **argv;
  	pbm_set *argb;
  	int next;
  	const char *nextArg;
  	const char *nextCharArg;
  	popt_item currAlias;
  	int stuffed;
  };
  
  struct popt_context_s {
  	struct optionStackEntry optionStack[POPT_OPTION_DEPTH];
  	struct optionStackEntry *os;
  	const char **leftovers;
  	int numLeftovers;
  	int nextLeftover;
  	const struct popt_option *options;
  	int restLeftover;
  	const char *appName;
  	popt_item aliases;
  	int numAliases;
  	int flags;
  	popt_item execs;
  	int numExecs;
  	const char **finalArgv;
  	int finalArgvCount;
  	int finalArgvAlloced;
  	popt_item doExec;
  	const char *execPath;
  	int execAbsolute;
  	const char *otherHelp;
  	pbm_set *arg_strip;
  };
  
  #ifdef HAVE_LIBINTL_H
  #include <libintl.h>
  #endif
  
  #if defined(HAVE_GETTEXT) && !defined(__LCLINT__)
  #define _(foo) gettext(foo)
  #else
  #define _(foo) foo
  #endif
  
  #if defined(HAVE_DGETTEXT) && !defined(__LCLINT__)
  #define D_(dom, str) dgettext(dom, str)
  #define POPT_(foo) D_("popt", foo)
  #else
  #define D_(dom, str) str
  #define POPT_(foo) foo
  #endif
  
  #define N_(foo) foo
  
  #endif
  
  static const char *findProgramPath(const char *argv0)
  {
  	char *path = getenv("PATH");
  	char *pathbuf;
  	char *start, *chptr;
  	char *buf;
  
  	if (argv0 == NULL)
  		return NULL;
  	if (strchr(argv0, '/'))
  		return strdup(argv0);
  
  	if (path == NULL)
  		return NULL;
  
  	start = pathbuf = alloca(strlen(path) + 1);
  	buf = malloc(strlen(path) + strlen(argv0) + sizeof ("/"));
  	if (buf == NULL)
  		return NULL;
  	strcpy(pathbuf, path);
  
  	chptr = NULL;
  	do {
  		if ((chptr = strchr(start, ':')))
  			*chptr = '\0';
  		sprintf(buf, "%s/%s", start, argv0);
  
  		if (!access(buf, X_OK))
  			return buf;
  
  		if (chptr)
  			start = chptr + 1;
  		else
  			start = NULL;
  	} while (start && *start);
  
  	free(buf);
  
  	return NULL;
  }
  
  #if HAVE_FLOAT_H
  #include <float.h>
  #endif
  #include <math.h>
  
  void popt_setexecpath(popt_context con, const char *path, int allowAbsolute)
  {
  	con->execPath = _free(con->execPath);
  	con->execPath = strdup(path);
  	con->execAbsolute = allowAbsolute;
  }
  
  static void invokeCallbacksPRE(popt_context con,
  							   const struct popt_option *opt)
  {
  	if (opt != NULL)
  		for (; opt->longName || opt->shortName || opt->arg; opt++) {
  			if (opt->arg == NULL)
  				continue;
  			if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INCLUDE_TABLE) {
  				invokeCallbacksPRE(con, opt->arg);
  			}
  			else if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_CALLBACK &&
  					 (opt->argInfo & POPT_CBFLAG_PRE)) {
  				popt_callbacktype cb = (popt_callbacktype) opt->arg;
  
  				cb(con, POPT_CALLBACK_REASON_PRE, NULL, NULL, opt->descrip);
  
  			}
  		}
  }
  
  static void invokeCallbacksPOST(popt_context con,
  								const struct popt_option *opt)
  {
  	if (opt != NULL)
  		for (; opt->longName || opt->shortName || opt->arg; opt++) {
  			if (opt->arg == NULL)
  				continue;
  			if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INCLUDE_TABLE) {
  				invokeCallbacksPOST(con, opt->arg);
  			}
  			else if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_CALLBACK &&
  					 (opt->argInfo & POPT_CBFLAG_POST)) {
  				popt_callbacktype cb = (popt_callbacktype) opt->arg;
  
  				cb(con, POPT_CALLBACK_REASON_POST, NULL, NULL, opt->descrip);
  
  			}
  		}
  }
  
  static void invokeCallbacksOPTION(popt_context con,
  								  const struct popt_option *opt,
  								  const struct popt_option *myOpt,
  								  const void *myData, int shorty)
  {
  	const struct popt_option *cbopt = NULL;
  
  	if (opt != NULL)
  		for (; opt->longName || opt->shortName || opt->arg; opt++) {
  			if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INCLUDE_TABLE) {
  				if (opt->arg != NULL)
  					invokeCallbacksOPTION(con, opt->arg, myOpt, myData,
  										  shorty);
  			}
  			else if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_CALLBACK &&
  					 !(opt->argInfo & POPT_CBFLAG_SKIPOPTION)) {
  				cbopt = opt;
  			}
  			else if (cbopt != NULL &&
  					 ((myOpt->shortName && opt->shortName && shorty &&
  					   myOpt->shortName == opt->shortName) ||
  					  (myOpt->longName && opt->longName &&
  					   !strcmp(myOpt->longName, opt->longName)))
  
  				) {
  				popt_callbacktype cb = (popt_callbacktype) cbopt->arg;
  
  				const void *cbData =
  					(cbopt->descrip ? cbopt->descrip : myData);
  				if (cb != NULL) {
  
  					cb(con, POPT_CALLBACK_REASON_OPTION, myOpt,
  					   con->os->nextArg, cbData);
  
  				}
  				if (!(cbopt->argInfo & POPT_CBFLAG_CONTINUE))
  					return;
  			}
  		}
  }
  
  popt_context popt_getcontext(const char *name, int argc, const char **argv,
  							 const struct popt_option * options, int flags)
  {
  	popt_context con = malloc(sizeof (*con));
  
  	if (con == NULL)
  		return NULL;
  	memset(con, 0, sizeof (*con));
  
  	con->os = con->optionStack;
  	con->os->argc = argc;
  	con->os->argv = argv;
  
  	con->os->argb = NULL;
  
  	if (!(flags & POPT_CONTEXT_KEEP_FIRST))
  		con->os->next = 1;
  
  	con->leftovers = calloc((argc + 1), sizeof (char *));
  	con->options = options;
  
  	con->aliases = NULL;
  	con->numAliases = 0;
  	con->flags = flags;
  	con->execs = NULL;
  	con->numExecs = 0;
  	con->finalArgvAlloced = argc * 2;
  	con->finalArgv = calloc(con->finalArgvAlloced, sizeof (*con->finalArgv));
  	con->execAbsolute = 1;
  	con->arg_strip = NULL;
  
  	if (getenv("POSIXLY_CORRECT") || getenv("POSIX_ME_HARDER"))
  		con->flags |= POPT_CONTEXT_POSIXMEHARDER;
  
  	if (name) {
  		char *t = malloc(strlen(name) + 1);
  		if (t)
  			con->appName = strcpy(t, name);
  	}
  
  	invokeCallbacksPRE(con, con->options);
  
  	return con;
  }
  
  static void cleanOSE(struct optionStackEntry *os)
  {
  	os->nextArg = _free(os->nextArg);
  	os->argv = _free(os->argv);
  	os->argb = PBM_FREE(os->argb);
  }
  
  void popt_resetcontext(popt_context con)
  {
  	int i;
  
  	if (con == NULL)
  		return;
  	while (con->os > con->optionStack) {
  		cleanOSE(con->os--);
  	}
  	con->os->argb = PBM_FREE(con->os->argb);
  	con->os->currAlias = NULL;
  	con->os->nextCharArg = NULL;
  	con->os->nextArg = NULL;
  	con->os->next = 1;
  
  	con->numLeftovers = 0;
  	con->nextLeftover = 0;
  	con->restLeftover = 0;
  	con->doExec = NULL;
  
  	if (con->finalArgv != NULL)
  		for (i = 0; i < con->finalArgvCount; i++)
  			con->finalArgv[i] = _free(con->finalArgv[i]);
  
  	con->finalArgvCount = 0;
  	con->arg_strip = PBM_FREE(con->arg_strip);
  	return;
  
  }
  
  static int handleExec(popt_context con, const char *longName, char shortName)
  {
  	popt_item item;
  	int i;
  
  	if (con->execs == NULL || con->numExecs <= 0)
  		return 0;
  
  	for (i = con->numExecs - 1; i >= 0; i--) {
  		item = con->execs + i;
  		if (longName && !(item->option.longName &&
  						  !strcmp(longName, item->option.longName)))
  			continue;
  		else if (shortName != item->option.shortName)
  			continue;
  		break;
  	}
  	if (i < 0)
  		return 0;
  
  	if (con->flags & POPT_CONTEXT_NO_EXEC)
  		return 1;
  
  	if (con->doExec == NULL) {
  		con->doExec = con->execs + i;
  		return 1;
  	}
  
  	if ((con->finalArgvCount + 1) >= (con->finalArgvAlloced)) {
  		con->finalArgvAlloced += 10;
  		con->finalArgv = realloc(con->finalArgv,
  								 sizeof (*con->finalArgv) *
  								 con->finalArgvAlloced);
  	}
  
  	i = con->finalArgvCount++;
  	if (con->finalArgv != NULL) {
  		char *s = malloc((longName ? strlen(longName) : 0) + 3);
  		if (s != NULL) {
  			if (longName)
  				sprintf(s, "--%s", longName);
  			else
  				sprintf(s, "-%c", shortName);
  			con->finalArgv[i] = s;
  		}
  		else
  			con->finalArgv[i] = NULL;
  	}
  
  	return 1;
  
  }
  
  static int handleAlias(popt_context con,
  					   const char *longName, char shortName,
  					   const char *nextCharArg)
  {
  	popt_item item = con->os->currAlias;
  	int rc;
  	int i;
  
  	if (item) {
  		if (longName && (item->option.longName &&
  						 !strcmp(longName, item->option.longName)))
  			return 0;
  		if (shortName && shortName == item->option.shortName)
  			return 0;
  	}
  
  	if (con->aliases == NULL || con->numAliases <= 0)
  		return 0;
  
  	for (i = con->numAliases - 1; i >= 0; i--) {
  		item = con->aliases + i;
  		if (longName && !(item->option.longName &&
  						  !strcmp(longName, item->option.longName)))
  			continue;
  		else if (shortName != item->option.shortName)
  			continue;
  		break;
  	}
  	if (i < 0)
  		return 0;
  
  	if ((con->os - con->optionStack + 1) == POPT_OPTION_DEPTH)
  		return POPT_ERROR_OPTSTOODEEP;
  
  	if (nextCharArg && *nextCharArg)
  		con->os->nextCharArg = nextCharArg;
  
  	con->os++;
  	con->os->next = 0;
  	con->os->stuffed = 0;
  	con->os->nextArg = NULL;
  	con->os->nextCharArg = NULL;
  	con->os->currAlias = con->aliases + i;
  	rc = popt_dupargv(con->os->currAlias->argc, con->os->currAlias->argv,
  					  &con->os->argc, &con->os->argv);
  	con->os->argb = NULL;
  
  	return (rc ? rc : 1);
  }
  
  static int execCommand(popt_context con)
  {
  	popt_item item = con->doExec;
  	const char **argv;
  	int argc = 0;
  	int rc;
  
  	if (item == NULL)
  		return POPT_ERROR_NOARG;
  
  	if (item->argv == NULL || item->argc < 1 ||
  		(!con->execAbsolute && strchr(item->argv[0], '/')))
  		return POPT_ERROR_NOARG;
  
  	argv = malloc(sizeof (*argv) *
  				  (6 + item->argc + con->numLeftovers + con->finalArgvCount));
  	if (argv == NULL)
  		return POPT_ERROR_MALLOC;
  
  	if (!strchr(item->argv[0], '/') && con->execPath) {
  		char *s =
  			alloca(strlen(con->execPath) + strlen(item->argv[0]) +
  				   sizeof ("/"));
  		sprintf(s, "%s/%s", con->execPath, item->argv[0]);
  		argv[argc] = s;
  	}
  	else {
  		argv[argc] = findProgramPath(item->argv[0]);
  	}
  	if (argv[argc++] == NULL)
  		return POPT_ERROR_NOARG;
  
  	if (item->argc > 1) {
  		memcpy(argv + argc, item->argv + 1,
  			   sizeof (*argv) * (item->argc - 1));
  		argc += (item->argc - 1);
  	}
  
  	if (con->finalArgv != NULL && con->finalArgvCount > 0) {
  		memcpy(argv + argc, con->finalArgv,
  			   sizeof (*argv) * con->finalArgvCount);
  		argc += con->finalArgvCount;
  	}
  
  	if (con->leftovers != NULL && con->numLeftovers > 0) {
  
  		memcpy(argv + argc, con->leftovers,
  			   sizeof (*argv) * con->numLeftovers);
  		argc += con->numLeftovers;
  	}
  
  	argv[argc] = NULL;
  
  #ifdef __hpux
  	rc = setresuid(getuid(), getuid(), -1);
  	if (rc)
  		return POPT_ERROR_ERRNO;
  #else
  #if defined(HAVE_SETUID)
  	rc = setuid(getuid());
  	if (rc)
  		return POPT_ERROR_ERRNO;
  #elif defined (HAVE_SETREUID)
  	rc = setreuid(getuid(), getuid());
  	if (rc)
  		return POPT_ERROR_ERRNO;
  #else
  	;
  #endif
  #endif
  
  	if (argv[0] == NULL)
  		return POPT_ERROR_NOARG;
  
  	rc = execvp(argv[0], (char *const *)argv);
  	return POPT_ERROR_ERRNO;
  }
  
  static const struct popt_option *findOption(const struct popt_option *opt,
  											const char *longName,
  											char shortName,
  											popt_callbacktype * callback,
  											const void **callbackData,
  											int singleDash)
  {
  	const struct popt_option *cb = NULL;
  
  	if (singleDash && !shortName && (longName && *longName == '\0'))
  		shortName = '-';
  
  	for (; opt->longName || opt->shortName || opt->arg; opt++) {
  
  		if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INCLUDE_TABLE) {
  			const struct popt_option *opt2;
  
  			if (opt->arg == NULL)
  				continue;
  			opt2 = findOption(opt->arg, longName, shortName, callback,
  							  callbackData, singleDash);
  			if (opt2 == NULL)
  				continue;
  			if (!(callback && *callback))
  				return opt2;
  			if (!(callbackData && *callbackData == NULL))
  				return opt2;
  
  			*callbackData = opt->descrip;
  
  			return opt2;
  		}
  		else if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_CALLBACK) {
  			cb = opt;
  		}
  		else if (longName && opt->longName &&
  				 (!singleDash || (opt->argInfo & POPT_ARGFLAG_ONEDASH)) &&
  				 !strcmp(longName, opt->longName))
  		{
  			break;
  		}
  		else if (shortName && shortName == opt->shortName) {
  			break;
  		}
  	}
  
  	if (!opt->longName && !opt->shortName)
  		return NULL;
  
  	if (callback)
  		*callback = NULL;
  	if (callbackData)
  		*callbackData = NULL;
  	if (cb) {
  		if (callback)
  
  			*callback = (popt_callbacktype) cb->arg;
  
  		if (!(cb->argInfo & POPT_CBFLAG_INC_DATA)) {
  			if (callbackData)
  				*callbackData = cb->descrip;
  
  		}
  	}
  
  	return opt;
  }
  
  static const char *findNextArg(popt_context con,
  							   unsigned argx, int delete_arg)
  {
  	struct optionStackEntry *os = con->os;
  	const char *arg;
  
  	do {
  		int i;
  		arg = NULL;
  		while (os->next == os->argc && os > con->optionStack)
  			os--;
  		if (os->next == os->argc && os == con->optionStack)
  			break;
  		if (os->argv != NULL)
  			for (i = os->next; i < os->argc; i++) {
  				if (os->argb && PBM_ISSET(i, os->argb))
  					continue;
  				if (*os->argv[i] == '-')
  					continue;
  				if (--argx > 0)
  					continue;
  				arg = os->argv[i];
  				if (delete_arg) {
  					if (os->argb == NULL)
  						os->argb = PBM_ALLOC(os->argc);
  					if (os->argb != NULL)
  						PBM_SET(i, os->argb);
  				}
  				break;
  			}
  		if (os > con->optionStack)
  			os--;
  	} while (arg == NULL);
  	return arg;
  }
  
  static const char *expandNextArg(popt_context con, const char *s)
  {
  	const char *a = NULL;
  	size_t alen;
  	char *t, *te;
  	size_t tn = strlen(s) + 1;
  	char c;
  
  	te = t = malloc(tn);;
  	if (t == NULL)
  		return NULL;
  	while ((c = *s++) != '\0') {
  		switch (c) {
  
  			case '!':
  				if (!(s[0] == '#' && s[1] == ':' && s[2] == '+'))
  					break;
  				if (a == NULL) {
  					if ((a = findNextArg(con, 1, 1)) == NULL)
  						break;
  				}
  				s += 3;
  
  				alen = strlen(a);
  				tn += alen;
  				*te = '\0';
  				t = realloc(t, tn);
  				te = t + strlen(t);
  				strncpy(te, a, alen);
  				te += alen;
  				continue;
  				break;
  			default:
  				break;
  		}
  		*te++ = c;
  	}
  	*te = '\0';
  	t = realloc(t, strlen(t) + 1);
  	return t;
  }
  
  static void poptStripArg(popt_context con, int which)
  {
  	if (con->arg_strip == NULL)
  		con->arg_strip = PBM_ALLOC(con->optionStack[0].argc);
  	if (con->arg_strip != NULL)
  		PBM_SET(which, con->arg_strip);
  }
  
  static int poptSaveLong(const struct popt_option *opt, long aLong)
  {
  	if (opt->arg == NULL)
  		return POPT_ERROR_NULLARG;
  
  	if (opt->argInfo & POPT_ARGFLAG_NOT)
  		aLong = ~aLong;
  	switch (opt->argInfo & POPT_ARGFLAG_LOGICALOPS) {
  		case 0:
  			*((long *)opt->arg) = aLong;
  			break;
  		case POPT_ARGFLAG_OR:
  			*((long *)opt->arg) |= aLong;
  			break;
  		case POPT_ARGFLAG_AND:
  			*((long *)opt->arg) &= aLong;
  			break;
  		case POPT_ARGFLAG_XOR:
  			*((long *)opt->arg) ^= aLong;
  			break;
  		default:
  			return POPT_ERROR_BADOPERATION;
  			break;
  	}
  	return 0;
  }
  
  static int poptSaveInt(const struct popt_option *opt, long aLong)
  {
  	if (opt->arg == NULL)
  		return POPT_ERROR_NULLARG;
  
  	if (opt->argInfo & POPT_ARGFLAG_NOT)
  		aLong = ~aLong;
  	switch (opt->argInfo & POPT_ARGFLAG_LOGICALOPS) {
  		case 0:
  			*((int *)opt->arg) = aLong;
  			break;
  		case POPT_ARGFLAG_OR:
  			*((int *)opt->arg) |= aLong;
  			break;
  		case POPT_ARGFLAG_AND:
  			*((int *)opt->arg) &= aLong;
  			break;
  		case POPT_ARGFLAG_XOR:
  			*((int *)opt->arg) ^= aLong;
  			break;
  		default:
  			return POPT_ERROR_BADOPERATION;
  			break;
  	}
  	return 0;
  }
  
  int popt_getnextopt(popt_context con)
  {
  	const struct popt_option *opt = NULL;
  	int done = 0;
  
  	if (con == NULL)
  		return -1;
  	while (!done) {
  		const char *origOptString = NULL;
  		popt_callbacktype cb = NULL;
  		const void *cbData = NULL;
  		const char *longArg = NULL;
  		int canstrip = 0;
  		int shorty = 0;
  
  		while (!con->os->nextCharArg && con->os->next == con->os->argc
  			   && con->os > con->optionStack) {
  			cleanOSE(con->os--);
  		}
  		if (!con->os->nextCharArg && con->os->next == con->os->argc) {
  			invokeCallbacksPOST(con, con->options);
  			if (con->doExec)
  				return execCommand(con);
  			return -1;
  		}
  
  		if (!con->os->nextCharArg) {
  			char *localOptString, *optString;
  			int thisopt;
  
  			if (con->os->argb && PBM_ISSET(con->os->next, con->os->argb)) {
  				con->os->next++;
  				continue;
  			}
  			thisopt = con->os->next;
  			if (con->os->argv != NULL)
  				origOptString = con->os->argv[con->os->next++];
  
  			if (origOptString == NULL)
  				return POPT_ERROR_BADOPT;
  
  			if (con->restLeftover || *origOptString != '-') {
  				if (con->flags & POPT_CONTEXT_POSIXMEHARDER)
  					con->restLeftover = 1;
  				if (con->flags & POPT_CONTEXT_ARG_OPTS) {
  					con->os->nextArg = strdup(origOptString);
  					return 0;
  				}
  				if (con->leftovers != NULL)
  					con->leftovers[con->numLeftovers++] = origOptString;
  				continue;
  			}
  
  			localOptString = optString =
  				strcpy(alloca(strlen(origOptString) + 1), origOptString);
  
  			if (optString[0] == '\0')
  				return POPT_ERROR_BADOPT;
  
  			if (optString[1] == '-' && !optString[2]) {
  				con->restLeftover = 1;
  				continue;
  			}
  			else {
  				char *oe;
  				int singleDash;
  
  				optString++;
  				if (*optString == '-')
  					singleDash = 0, optString++;
  				else
  					singleDash = 1;
  
  				if (handleAlias(con, optString, '\0', NULL))
  					continue;
  
  				if (handleExec(con, optString, '\0'))
  					continue;
  
  				for (oe = optString; *oe && *oe != '='; oe++) {
  				};
  				if (*oe == '=') {
  					*oe++ = '\0';
  					longArg = origOptString + (oe - localOptString);
  				}
  
  				opt = findOption(con->options, optString, '\0', &cb, &cbData,
  								 singleDash);
  				if (!opt && !singleDash)
  					return POPT_ERROR_BADOPT;
  			}
  
  			if (!opt) {
  				con->os->nextCharArg = origOptString + 1;
  			}
  			else {
  				if (con->os == con->optionStack &&
  					opt->argInfo & POPT_ARGFLAG_STRIP) {
  					canstrip = 1;
  					poptStripArg(con, thisopt);
  				}
  				shorty = 0;
  			}
  		}
  
  		if (con->os->nextCharArg) {
  			origOptString = con->os->nextCharArg;
  
  			con->os->nextCharArg = NULL;
  
  			if (handleAlias(con, NULL, *origOptString, origOptString + 1))
  				continue;
  
  			if (handleExec(con, NULL, *origOptString)) {
  				origOptString++;
  				if (*origOptString != '\0')
  					con->os->nextCharArg = origOptString;
  				continue;
  			}
  
  			opt = findOption(con->options, NULL, *origOptString, &cb,
  							 &cbData, 0);
  			if (!opt)
  				return POPT_ERROR_BADOPT;
  			shorty = 1;
  
  			origOptString++;
  			if (*origOptString != '\0')
  				con->os->nextCharArg = origOptString;
  
  		}
  
  		if (opt == NULL)
  			return POPT_ERROR_BADOPT;
  		if (opt->arg && (opt->argInfo & POPT_ARG_MASK) == POPT_ARG_NONE) {
  			if (poptSaveInt(opt, 1L))
  				return POPT_ERROR_BADOPERATION;
  		}
  		else if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_VAL) {
  			if (opt->arg) {
  				if (poptSaveInt(opt, (long)opt->val))
  					return POPT_ERROR_BADOPERATION;
  			}
  		}
  		else if ((opt->argInfo & POPT_ARG_MASK) != POPT_ARG_NONE) {
  			con->os->nextArg = _free(con->os->nextArg);
  			if (longArg) {
  
  				longArg = expandNextArg(con, longArg);
  				con->os->nextArg = longArg;
  			}
  			else if (con->os->nextCharArg) {
  				longArg = expandNextArg(con, con->os->nextCharArg);
  				con->os->nextArg = longArg;
  				con->os->nextCharArg = NULL;
  			}
  			else {
  				while (con->os->next == con->os->argc &&
  					   con->os > con->optionStack) {
  					cleanOSE(con->os--);
  				}
  				if (con->os->next == con->os->argc) {
  					if (!(opt->argInfo & POPT_ARGFLAG_OPTIONAL))
  						return POPT_ERROR_NOARG;
  
  					con->os->nextArg = NULL;
  				}
  				else {
  
  					if (con->os == con->optionStack &&
  						(opt->argInfo & POPT_ARGFLAG_STRIP) && canstrip) {
  						poptStripArg(con, con->os->next);
  					}
  
  					if (con->os->argv != NULL) {
  						longArg = con->os->argv[con->os->next++];
  						longArg = expandNextArg(con, longArg);
  						con->os->nextArg = longArg;
  					}
  				}
  			}
  			longArg = NULL;
  
  			if (opt->arg) {
  				switch (opt->argInfo & POPT_ARG_MASK) {
  					case POPT_ARG_STRING:
  						*((const char **)opt->arg) = (con->os->nextArg)
  							? strdup(con->os->nextArg) : NULL;
  						break;
  
  					case POPT_ARG_INT:
  					case POPT_ARG_LONG:
  						{
  							long aLong = 0;
  							char *end;
  
  							if (con->os->nextArg) {
  								aLong = strtol(con->os->nextArg, &end, 0);
  								if (!(end && *end == '\0'))
  									return POPT_ERROR_BADNUMBER;
  							}
  
  							if ((opt->argInfo & POPT_ARG_MASK) ==
  								POPT_ARG_LONG) {
  								if (aLong == LONG_MIN || aLong == LONG_MAX)
  									return POPT_ERROR_OVERFLOW;
  								if (poptSaveLong(opt, aLong))
  									return POPT_ERROR_BADOPERATION;
  							}
  							else {
  								if (aLong > INT_MAX || aLong < INT_MIN)
  									return POPT_ERROR_OVERFLOW;
  								if (poptSaveInt(opt, aLong))
  									return POPT_ERROR_BADOPERATION;
  							}
  						}
  						break;
  
  					case POPT_ARG_FLOAT:
  					case POPT_ARG_DOUBLE:
  						{
  							double aDouble = 0.0;
  							char *end;
  
  							if (con->os->nextArg) {
  								int saveerrno = errno;
  								errno = 0;
  								aDouble = strtod(con->os->nextArg, &end);
  								if (errno == ERANGE)
  									return POPT_ERROR_OVERFLOW;
  								errno = saveerrno;
  								if (*end != '\0')
  									return POPT_ERROR_BADNUMBER;
  							}
  
  							if ((opt->argInfo & POPT_ARG_MASK) ==
  								POPT_ARG_DOUBLE) {
  								*((double *)opt->arg) = aDouble;
  							}
  							else {
  #define _ABS(a)	((((a) - 0.0) < DBL_EPSILON) ? -(a) : (a))
  								if ((_ABS(aDouble) - FLT_MAX) > DBL_EPSILON)
  									return POPT_ERROR_OVERFLOW;
  								if ((FLT_MIN - _ABS(aDouble)) > DBL_EPSILON)
  									return POPT_ERROR_OVERFLOW;
  								*((float *)opt->arg) = aDouble;
  							}
  						} break;
  					default:
  						fprintf(stdout,
  								POPT_
  								("option type (%d) not implemented in popt\n"),
  								(opt->argInfo & POPT_ARG_MASK));
  						exit(EXIT_FAILURE);
  				}
  			}
  		}
  
  		if (cb)
  			invokeCallbacksOPTION(con, con->options, opt, cbData, shorty);
  		else if (opt->val && ((opt->argInfo & POPT_ARG_MASK) != POPT_ARG_VAL))
  			done = 1;
  
  		if ((con->finalArgvCount + 2) >= (con->finalArgvAlloced)) {
  			con->finalArgvAlloced += 10;
  			con->finalArgv = realloc(con->finalArgv,
  									 sizeof (*con->finalArgv) *
  									 con->finalArgvAlloced);
  		}
  
  		if (con->finalArgv != NULL) {
  			char *s = malloc((opt->longName ? strlen(opt->longName) : 0) + 3);
  			if (s != NULL) {
  				if (opt->longName)
  					sprintf(s, "%s%s",
  							((opt->
  							  argInfo & POPT_ARGFLAG_ONEDASH) ? "-" : "--"),
  							opt->longName);
  				else
  					sprintf(s, "-%c", opt->shortName);
  				con->finalArgv[con->finalArgvCount++] = s;
  			}
  			else
  				con->finalArgv[con->finalArgvCount++] = NULL;
  		}
  
  		if (opt->arg && (opt->argInfo & POPT_ARG_MASK) == POPT_ARG_NONE) ;
  		else if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_VAL) ;
  		else if ((opt->argInfo & POPT_ARG_MASK) != POPT_ARG_NONE) {
  			if (con->finalArgv != NULL && con->os->nextArg)
  				con->finalArgv[con->finalArgvCount++] =
  					strdup(con->os->nextArg);
  
  		}
  	}
  
  	return (opt ? opt->val : -1);
  }
  
  const char *popt_getoptarg(popt_context con)
  {
  	const char *ret = NULL;
  	if (con) {
  		ret = con->os->nextArg;
  		con->os->nextArg = NULL;
  	}
  	return ret;
  }
  
  const char *popt_getarg(popt_context con)
  {
  	const char *ret = NULL;
  	if (con && con->leftovers != NULL
  		&& con->nextLeftover < con->numLeftovers)
  		ret = con->leftovers[con->nextLeftover++];
  	return ret;
  }
  
  const char *popt_peekarg(popt_context con)
  {
  	const char *ret = NULL;
  	if (con && con->leftovers != NULL
  		&& con->nextLeftover < con->numLeftovers)
  		ret = con->leftovers[con->nextLeftover];
  	return ret;
  }
  
  const char **popt_getargs(popt_context con)
  {
  	if (con == NULL ||
  		con->leftovers == NULL || con->numLeftovers == con->nextLeftover)
  		return NULL;
  
  	con->leftovers[con->numLeftovers] = NULL;
  
  	return (con->leftovers + con->nextLeftover);
  
  }
  
  popt_context popt_freecontext(popt_context con)
  {
  	popt_item item;
  	int i;
  
  	if (con == NULL)
  		return con;
  	popt_resetcontext(con);
  	con->os->argb = _free(con->os->argb);
  
  	if (con->aliases != NULL)
  		for (i = 0; i < con->numAliases; i++) {
  			item = con->aliases + i;
  
  			item->option.longName = _free(item->option.longName);
  			item->option.descrip = _free(item->option.descrip);
  			item->option.argDescrip = _free(item->option.argDescrip);
  
  			item->argv = _free(item->argv);
  		}
  	con->aliases = _free(con->aliases);
  
  	if (con->execs != NULL)
  		for (i = 0; i < con->numExecs; i++) {
  			item = con->execs + i;
  
  			item->option.longName = _free(item->option.longName);
  			item->option.descrip = _free(item->option.descrip);
  			item->option.argDescrip = _free(item->option.argDescrip);
  
  			item->argv = _free(item->argv);
  		}
  	con->execs = _free(con->execs);
  
  	con->leftovers = _free(con->leftovers);
  	con->finalArgv = _free(con->finalArgv);
  	con->appName = _free(con->appName);
  	con->otherHelp = _free(con->otherHelp);
  	con->execPath = _free(con->execPath);
  	con->arg_strip = PBM_FREE(con->arg_strip);
  
  	con = _free(con);
  	return con;
  }
  
  int popt_addalias(popt_context con, struct popt_alias newAlias, int flags)
  {
  	popt_item item = alloca(sizeof (*item));
  	memset(item, 0, sizeof (*item));
  	item->option.longName = newAlias.longName;
  	item->option.shortName = newAlias.shortName;
  	item->option.argInfo = POPT_ARGFLAG_DOC_HIDDEN;
  	item->option.arg = 0;
  	item->option.val = 0;
  	item->option.descrip = NULL;
  	item->option.argDescrip = NULL;
  	item->argc = newAlias.argc;
  	item->argv = newAlias.argv;
  	return popt_additem(con, item, 0);
  }
  
  int popt_additem(popt_context con, popt_item newItem, int flags)
  {
  	popt_item *items, item;
  	int *nitems;
  
  	switch (flags) {
  		case 1:
  			items = &con->execs;
  			nitems = &con->numExecs;
  			break;
  		case 0:
  			items = &con->aliases;
  			nitems = &con->numAliases;
  			break;
  		default:
  			return 1;
  			break;
  	}
  
  	*items = realloc((*items), ((*nitems) + 1) * sizeof (**items));
  	if ((*items) == NULL)
  		return 1;
  
  	item = (*items) + (*nitems);
  
  	item->option.longName =
  		(newItem->option.longName ? strdup(newItem->option.longName) : NULL);
  	item->option.shortName = newItem->option.shortName;
  	item->option.argInfo = newItem->option.argInfo;
  	item->option.arg = newItem->option.arg;
  	item->option.val = newItem->option.val;
  	item->option.descrip =
  		(newItem->option.descrip ? strdup(newItem->option.descrip) : NULL);
  	item->option.argDescrip =
  		(newItem->option.
  		 argDescrip ? strdup(newItem->option.argDescrip) : NULL);
  	item->argc = newItem->argc;
  	item->argv = newItem->argv;
  
  	(*nitems)++;
  
  	return 0;
  }
  
  const char *popt_badoption(popt_context con, int flags)
  {
  	struct optionStackEntry *os = NULL;
  
  	if (con != NULL)
  		os = (flags & POPT_BADOPTION_NOALIAS) ? con->optionStack : con->os;
  
  	return (os && os->argv ? os->argv[os->next - 1] : NULL);
  
  }
  
  const char *const popt_strerror(const int error)
  {
  	switch (error) {
  		case POPT_ERROR_NOARG:
  			return POPT_("missing argument");
  		case POPT_ERROR_BADOPT:
  			return POPT_("unknown option");
  		case POPT_ERROR_BADOPERATION:
  			return POPT_("mutually exclusive logical operations requested");
  		case POPT_ERROR_NULLARG:
  			return POPT_("opt->arg should not be NULL");
  		case POPT_ERROR_OPTSTOODEEP:
  			return POPT_("aliases nested too deeply");
  		case POPT_ERROR_BADQUOTE:
  			return POPT_("error in parameter quoting");
  		case POPT_ERROR_BADNUMBER:
  			return POPT_("invalid numeric value");
  		case POPT_ERROR_OVERFLOW:
  			return POPT_("number too large or too small");
  		case POPT_ERROR_MALLOC:
  			return POPT_("memory allocation failed");
  		case POPT_ERROR_ERRNO:
  			return strerror(errno);
  		default:
  			return POPT_("unknown error");
  	}
  }
  
  int popt_stuffargs(popt_context con, const char **argv)
  {
  	int argc;
  	int rc;
  
  	if ((con->os - con->optionStack) == POPT_OPTION_DEPTH)
  		return POPT_ERROR_OPTSTOODEEP;
  
  	for (argc = 0; argv[argc]; argc++) {
  	};
  
  	con->os++;
  	con->os->next = 0;
  	con->os->nextArg = NULL;
  	con->os->nextCharArg = NULL;
  	con->os->currAlias = NULL;
  	rc = popt_dupargv(argc, argv, &con->os->argc, &con->os->argv);
  	con->os->argb = NULL;
  	con->os->stuffed = 1;
  
  	return rc;
  }
  
  const char *popt_getinvocationname(popt_context con)
  {
  	return (con->os->argv ? con->os->argv[0] : "");
  }
  
  int popt_strippedargv(popt_context con, int argc, char **argv)
  {
  	int numargs = argc;
  	int j = 1;
  	int i;
  
  	if (con->arg_strip)
  		for (i = 1; i < argc; i++) {
  			if (PBM_ISSET(i, con->arg_strip))
  				numargs--;
  		}
  
  	for (i = 1; i < argc; i++) {
  		if (con->arg_strip && PBM_ISSET(i, con->arg_strip))
  			continue;
  		argv[j] = (j < numargs) ? argv[i] : NULL;
  		j++;
  	}
  
  	return numargs;
  }
  
  #define POPT_ARGV_ARRAY_GROW_DELTA 5
  
  int popt_dupargv(int argc, const char **argv,
  				 int *argcPtr, const char ***argvPtr)
  {
  	size_t nb = (argc + 1) * sizeof (*argv);
  	const char **argv2;
  	char *dst;
  	int i;
  
  	if (argc <= 0 || argv == NULL)
  		return POPT_ERROR_NOARG;
  	for (i = 0; i < argc; i++) {
  		if (argv[i] == NULL)
  			return POPT_ERROR_NOARG;
  		nb += strlen(argv[i]) + 1;
  	}
  
  	dst = malloc(nb);
  	if (dst == NULL)
  		return POPT_ERROR_MALLOC;
  	argv2 = (void *)dst;
  	dst += (argc + 1) * sizeof (*argv);
  
  	for (i = 0; i < argc; i++) {
  		argv2[i] = dst;
  		dst += strlen(strcpy(dst, argv[i])) + 1;
  	}
  	argv2[argc] = NULL;
  
  	if (argvPtr) {
  		*argvPtr = argv2;
  	}
  	else {
  		free(argv2);
  		argv2 = NULL;
  	}
  	if (argcPtr)
  		*argcPtr = argc;
  	return 0;
  }
  
  int popt_parseargvstring(const char *s, int *argcPtr, const char ***argvPtr)
  {
  	const char *src;
  	char quote = '\0';
  	int argvAlloced = POPT_ARGV_ARRAY_GROW_DELTA;
  	const char **argv = malloc(sizeof (*argv) * argvAlloced);
  	int argc = 0;
  	int buflen = strlen(s) + 1;
  	char *buf = memset(alloca(buflen), 0, buflen);
  	int rc = POPT_ERROR_MALLOC;
  
  	if (argv == NULL)
  		return rc;
  	argv[argc] = buf;
  
  	for (src = s; *src != '\0'; src++) {
  		if (quote == *src) {
  			quote = '\0';
  		}
  		else if (quote != '\0') {
  			if (*src == '\\') {
  				src++;
  				if (!*src) {
  					rc = POPT_ERROR_BADQUOTE;
  					goto exit;
  				}
  				if (*src != quote)
  					*buf++ = '\\';
  			}
  			*buf++ = *src;
  		}
  		else if (isspace(*src)) {
  			if (*argv[argc] != '\0') {
  				buf++, argc++;
  				if (argc == argvAlloced) {
  					argvAlloced += POPT_ARGV_ARRAY_GROW_DELTA;
  					argv = realloc(argv, sizeof (*argv) * argvAlloced);
  					if (argv == NULL)
  						goto exit;
  				}
  				argv[argc] = buf;
  			}
  		}
  		else
  			switch (*src) {
  				case '"':
  				case '\'':
  					quote = *src;
  					break;
  				case '\\':
  					src++;
  					if (!*src) {
  						rc = POPT_ERROR_BADQUOTE;
  						goto exit;
  					}
  
  				default:
  					*buf++ = *src;
  					break;
  			}
  	}
  
  	if (strlen(argv[argc])) {
  		argc++, buf++;
  	}
  
  	rc = popt_dupargv(argc, argv, argcPtr, argvPtr);
  
    exit:
  	if (argv)
  		free(argv);
  	return rc;
  }
  
  static void configLine(popt_context con, char *line)
  {
  	int nameLength = strlen(con->appName);
  	const char *entryType;
  	const char *opt;
  	popt_item item = alloca(sizeof (*item));
  	int i, j;
  
  	memset(item, 0, sizeof (*item));
  
  	if (strncmp(line, con->appName, nameLength))
  		return;
  	line += nameLength;
  	if (*line == '\0' || !isspace(*line))
  		return;
  
  	while (*line != '\0' && isspace(*line))
  		line++;
  	entryType = line;
  	while (*line == '\0' || !isspace(*line))
  		line++;
  	*line++ = '\0';
  
  	while (*line != '\0' && isspace(*line))
  		line++;
  	if (*line == '\0')
  		return;
  	opt = line;
  	while (*line == '\0' || !isspace(*line))
  		line++;
  	*line++ = '\0';
  
  	while (*line != '\0' && isspace(*line))
  		line++;
  	if (*line == '\0')
  		return;
  
  	if (opt[0] == '-' && opt[1] == '-')
  		item->option.longName = opt + 2;
  	else if (opt[0] == '-' && opt[2] == '\0')
  		item->option.shortName = opt[1];
  
  	if (popt_parseargvstring(line, &item->argc, &item->argv))
  		return;
  
  	item->option.argInfo = POPT_ARGFLAG_DOC_HIDDEN;
  	for (i = 0, j = 0; i < item->argc; i++, j++) {
  		const char *f;
  		if (!strncmp
  			(item->argv[i], "--POPTdesc=", sizeof ("--POPTdesc=") - 1)) {
  			f = item->argv[i] + sizeof ("--POPTdesc=");
  			if (f[0] == '$' && f[1] == '"')
  				f++;
  			item->option.descrip = f;
  			item->option.argInfo &= ~POPT_ARGFLAG_DOC_HIDDEN;
  			j--;
  		}
  		else if (!strncmp
  				 (item->argv[i], "--POPTargs=", sizeof ("--POPTargs=") - 1)) {
  			f = item->argv[i] + sizeof ("--POPTargs=");
  			if (f[0] == '$' && f[1] == '"')
  				f++;
  			item->option.argDescrip = f;
  			item->option.argInfo &= ~POPT_ARGFLAG_DOC_HIDDEN;
  			item->option.argInfo |= POPT_ARG_STRING;
  			j--;
  		}
  		else if (j != i)
  			item->argv[j] = item->argv[i];
  	}
  	if (j != i) {
  		item->argv[j] = NULL;
  		item->argc = j;
  	}
  
  	if (!strcmp(entryType, "alias"))
  		(void)popt_additem(con, item, 0);
  	else if (!strcmp(entryType, "exec"))
  		(void)popt_additem(con, item, 1);
  }
  
  int popt_readconfigfile(popt_context con, const char *fn)
  {
  	const char *file, *chptr, *end;
  	char *buf;
  	char *dst;
  	int fd, rc;
  	off_t fileLength;
  
  	fd = open(fn, O_RDONLY);
  	if (fd < 0)
  		return (errno == ENOENT ? 0 : POPT_ERROR_ERRNO);
  
  	fileLength = lseek(fd, 0, SEEK_END);
  	if (fileLength == -1 || lseek(fd, 0, 0) == -1) {
  		rc = errno;
  		(void)close(fd);
  		errno = rc;
  		return POPT_ERROR_ERRNO;
  	}
  
  	file = alloca(fileLength + 1);
  	if (read(fd, (char *)file, fileLength) != fileLength) {
  		rc = errno;
  		(void)close(fd);
  		errno = rc;
  		return POPT_ERROR_ERRNO;
  	}
  	if (close(fd) == -1)
  		return POPT_ERROR_ERRNO;
  
  	dst = buf = alloca(fileLength + 1);
  
  	chptr = file;
  	end = (file + fileLength);
  	while (chptr < end) {
  		switch (*chptr) {
  			case '\n':
  				*dst = '\0';
  				dst = buf;
  				while (*dst && isspace(*dst))
  					dst++;
  				if (*dst && *dst != '#')
  					configLine(con, dst);
  				chptr++;
  				break;
  			case '\\':
  				*dst++ = *chptr++;
  				if (chptr < end) {
  					if (*chptr == '\n')
  						dst--, chptr++;
  					else
  						*dst++ = *chptr++;
  				}
  				break;
  			default:
  				*dst++ = *chptr++;
  				break;
  		}
  	}
  
  	return 0;
  }
  
  int popt_readdefaultconfig(popt_context con, int useEnv)
  {
  	char *fn, *home;
  	int rc;
  
  	if (!con->appName)
  		return 0;
  
  	rc = popt_readconfigfile(con, "/etc/popt");
  	if (rc)
  		return rc;
  	if (getuid() != geteuid())
  		return 0;
  
  	if ((home = getenv("HOME"))) {
  		fn = alloca(strlen(home) + 20);
  		strcpy(fn, home);
  		strcat(fn, "/.popt");
  		rc = popt_readconfigfile(con, fn);
  		if (rc)
  			return rc;
  	}
  
  	return 0;
  }
  
  static void displayArgs(popt_context con,
  						enum popt_callbackreason foo,
  						struct popt_option *key, const char *arg, void *data)
  {
  	if (key->shortName == '?')
  		popt_printhelp(con, stdout, 0);
  	else
  		popt_printusage(con, stdout, 0);
  	exit(0);
  }
  
  struct popt_option popt_aliasOptions[] = {
  	POPT_TABLEEND
  };
  
  struct popt_option popt_helpoptions[] = {
  	{NULL, '\0', POPT_ARG_CALLBACK, (void *)&displayArgs, '\0', NULL, NULL},
  	{"help", '?', 0, NULL, '?', N_("Show this help message"), NULL},
  	{"usage", '\0', 0, NULL, 'u', N_("Display brief usage message"), NULL},
  
  	POPT_TABLEEND
  };
  
  static const char *const
  getTableTranslationDomain(const struct popt_option *table)
  {
  	const struct popt_option *opt;
  
  	if (table != NULL)
  		for (opt = table; opt->longName || opt->shortName || opt->arg; opt++) {
  			if (opt->argInfo == POPT_ARG_INTL_DOMAIN)
  				return opt->arg;
  		}
  	return NULL;
  }
  
  static const char *const
  getArgDescrip(const struct popt_option *opt, const char *translation_domain)
  {
  	if (!(opt->argInfo & POPT_ARG_MASK))
  		return NULL;
  
  	if (opt == (popt_helpoptions + 1) || opt == (popt_helpoptions + 2))
  		if (opt->argDescrip)
  			return POPT_(opt->argDescrip);
  
  	if (opt->argDescrip)
  		return D_(translation_domain, opt->argDescrip);
  
  	switch (opt->argInfo & POPT_ARG_MASK) {
  		case POPT_ARG_NONE:
  			return POPT_("NONE");
  		case POPT_ARG_VAL:
  			return POPT_("VAL");
  		case POPT_ARG_INT:
  			return POPT_("INT");
  		case POPT_ARG_LONG:
  			return POPT_("LONG");
  		case POPT_ARG_STRING:
  			return POPT_("STRING");
  		case POPT_ARG_FLOAT:
  			return POPT_("FLOAT");
  		case POPT_ARG_DOUBLE:
  			return POPT_("DOUBLE");
  		default:
  			return POPT_("ARG");
  	}
  }
  
  static char *singleOptionDefaultValue(int lineLength,
  									  const struct popt_option *opt,
  									  const char *translation_domain)
  {
  	const char *defstr = D_(translation_domain, "default");
  	char *le = malloc(4 * lineLength + 1);
  	char *l = le;
  
  	if (l == NULL)
  		return NULL;
  	*le = '\0';
  	*le++ = '(';
  	strcpy(le, defstr);
  	le += strlen(le);
  	*le++ = ':';
  	*le++ = ' ';
  	if (opt->arg)
  		switch (opt->argInfo & POPT_ARG_MASK) {
  			case POPT_ARG_VAL:
  			case POPT_ARG_INT:
  				{
  					long aLong = *((int *)opt->arg);
  					le += sprintf(le, "%ld", aLong);
  				} break;
  			case POPT_ARG_LONG:
  				{
  					long aLong = *((long *)opt->arg);
  					le += sprintf(le, "%ld", aLong);
  				} break;
  			case POPT_ARG_FLOAT:
  				{
  					double aDouble = *((float *)opt->arg);
  					le += sprintf(le, "%g", aDouble);
  				} break;
  			case POPT_ARG_DOUBLE:
  				{
  					double aDouble = *((double *)opt->arg);
  					le += sprintf(le, "%g", aDouble);
  				} break;
  			case POPT_ARG_STRING:
  				{
  					const char *s = *(const char **)opt->arg;
  					if (s == NULL) {
  						strcpy(le, "null");
  						le += strlen(le);
  					}
  					else {
  						size_t slen =
  							4 * lineLength - (le - l) - sizeof ("\"...\")");
  						*le++ = '"';
  						strncpy(le, s, slen);
  						le[slen] = '\0';
  						le += strlen(le);
  						if (slen < strlen(s)) {
  							strcpy(le, "...");
  							le += strlen(le);
  						}
  						*le++ = '"';
  					}
  				}
  				break;
  			case POPT_ARG_NONE:
  			default:
  				l = _free(l);
  				return NULL;
  				break;
  		}
  	*le++ = ')';
  	*le = '\0';
  
  	return l;
  }
  
  static void singleOptionHelp(FILE * fp, int maxLeftCol,
  							 const struct popt_option *opt,
  							 const char *translation_domain)
  {
  	int indentLength = maxLeftCol + 5;
  	int lineLength = 79 - indentLength;
  	const char *help = D_(translation_domain, opt->descrip);
  	const char *argDescrip = getArgDescrip(opt, translation_domain);
  	int helpLength;
  	char *defs = NULL;
  	char *left;
  	int nb = maxLeftCol + 1;
  
  	if (opt->longName)
  		nb += strlen(opt->longName);
  	if (argDescrip)
  		nb += strlen(argDescrip);
  
  	left = malloc(nb);
  	if (left == NULL)
  		return;
  	left[0] = '\0';
  	left[maxLeftCol] = '\0';
  
  	if (opt->longName && opt->shortName)
  		sprintf(left, "-%c, %s%s", opt->shortName,
  				((opt->argInfo & POPT_ARGFLAG_ONEDASH) ? "-" : "--"),
  				opt->longName);
  	else if (opt->shortName != '\0')
  		sprintf(left, "-%c", opt->shortName);
  	else if (opt->longName)
  		sprintf(left, "%s%s",
  				((opt->argInfo & POPT_ARGFLAG_ONEDASH) ? "-" : "--"),
  				opt->longName);
  	if (!*left)
  		goto out;
  	if (argDescrip) {
  		char *le = left + strlen(left);
  
  		if (opt->argInfo & POPT_ARGFLAG_OPTIONAL)
  			*le++ = '[';
  
  		if (opt->argInfo & POPT_ARGFLAG_SHOW_DEFAULT) {
  			defs =
  				singleOptionDefaultValue(lineLength, opt, translation_domain);
  			if (defs) {
  				char *t = malloc((help ? strlen(help) : 0) +
  								 strlen(defs) + sizeof (" "));
  				if (t) {
  					char *te = t;
  					*te = '\0';
  					if (help) {
  						strcpy(te, help);
  						te += strlen(te);
  					}
  					*te++ = ' ';
  					strcpy(te, defs);
  					defs = _free(defs);
  				}
  				defs = t;
  			}
  		}
  
  		if (opt->argDescrip == NULL) {
  			switch (opt->argInfo & POPT_ARG_MASK) {
  				case POPT_ARG_NONE:
  					break;
  				case POPT_ARG_VAL:
  					{
  						long aLong = opt->val;
  						int ops = (opt->argInfo & POPT_ARGFLAG_LOGICALOPS);
  						int negate = (opt->argInfo & POPT_ARGFLAG_NOT);
  
  						if (!ops
  							&& (aLong == 0L || aLong == 1L || aLong == -1L))
  							break;
  						*le++ = '[';
  						switch (ops) {
  							case POPT_ARGFLAG_OR:
  								*le++ = '|';
  								break;
  							case POPT_ARGFLAG_AND:
  								*le++ = '&';
  								break;
  							case POPT_ARGFLAG_XOR:
  								*le++ = '^';
  								break;
  							default:
  								break;
  						}
  						*le++ = '=';
  						if (negate)
  							*le++ = '~';
  
  						le += sprintf(le, (ops ? "0x%lx" : "%ld"), aLong);
  
  						*le++ = ']';
  					}
  					break;
  				case POPT_ARG_INT:
  				case POPT_ARG_LONG:
  				case POPT_ARG_FLOAT:
  				case POPT_ARG_DOUBLE:
  				case POPT_ARG_STRING:
  					*le++ = '=';
  					strcpy(le, argDescrip);
  					le += strlen(le);
  					break;
  				default:
  					break;
  			}
  		}
  		else {
  			*le++ = '=';
  			strcpy(le, argDescrip);
  			le += strlen(le);
  		}
  		if (opt->argInfo & POPT_ARGFLAG_OPTIONAL)
  			*le++ = ']';
  		*le = '\0';
  	}
  
  	if (help)
  		fprintf(fp, "  %-*s   ", maxLeftCol, left);
  	else {
  		fprintf(fp, "  %s\n", left);
  		goto out;
  	}
  
  	left = _free(left);
  	if (defs) {
  		help = defs;
  		defs = NULL;
  	}
  
  	helpLength = strlen(help);
  	while (helpLength > lineLength) {
  		const char *ch;
  		char format[10];
  
  		ch = help + lineLength - 1;
  		while (ch > help && !isspace(*ch))
  			ch--;
  		if (ch == help)
  			break;
  		while (ch > (help + 1) && isspace(*ch))
  			ch--;
  		ch++;
  
  		sprintf(format, "%%.%ds\n%%%ds", (int)(ch - help), indentLength);
  
  		fprintf(fp, format, help, " ");
  
  		help = ch;
  		while (isspace(*help) && *help)
  			help++;
  		helpLength = strlen(help);
  	}
  
  	if (helpLength)
  		fprintf(fp, "%s\n", help);
  
    out:
  	defs = _free(defs);
  	left = _free(left);
  }
  
  static int maxArgWidth(const struct popt_option *opt,
  					   const char *translation_domain)
  {
  	int max = 0;
  	int len = 0;
  	const char *s;
  
  	if (opt != NULL)
  		while (opt->longName || opt->shortName || opt->arg) {
  			if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INCLUDE_TABLE) {
  				if (opt->arg)
  					len = maxArgWidth(opt->arg, translation_domain);
  				if (len > max)
  					max = len;
  			}
  			else if (!(opt->argInfo & POPT_ARGFLAG_DOC_HIDDEN)) {
  				len = sizeof ("  ") - 1;
  				if (opt->shortName != '\0')
  					len += sizeof ("-X") - 1;
  				if (opt->shortName != '\0' && opt->longName)
  					len += sizeof (", ") - 1;
  				if (opt->longName) {
  					len += ((opt->argInfo & POPT_ARGFLAG_ONEDASH)
  							? sizeof ("-") - 1 : sizeof ("--") - 1);
  					len += strlen(opt->longName);
  				}
  
  				s = getArgDescrip(opt, translation_domain);
  				if (s)
  					len += sizeof ("=") - 1 + strlen(s);
  				if (opt->argInfo & POPT_ARGFLAG_OPTIONAL)
  					len += sizeof ("[]") - 1;
  				if (len > max)
  					max = len;
  			}
  
  			opt++;
  		}
  
  	return max;
  }
  
  static void itemHelp(FILE * fp,
  					 popt_item items, int nitems, int left,
  					 const char *translation_domain)
  {
  	popt_item item;
  	int i;
  
  	if (items != NULL)
  		for (i = 0, item = items; i < nitems; i++, item++) {
  			const struct popt_option *opt;
  			opt = &item->option;
  			if ((opt->longName || opt->shortName) &&
  				!(opt->argInfo & POPT_ARGFLAG_DOC_HIDDEN))
  				singleOptionHelp(fp, left, opt, translation_domain);
  		}
  }
  
  static void singleTableHelp(popt_context con, FILE * fp,
  							const struct popt_option *table, int left,
  							const char *translation_domain)
  {
  	const struct popt_option *opt;
  	const char *sub_transdom;
  
  	if (table == popt_aliasOptions) {
  		itemHelp(fp, con->aliases, con->numAliases, left, NULL);
  		itemHelp(fp, con->execs, con->numExecs, left, NULL);
  		return;
  	}
  
  	if (table != NULL)
  		for (opt = table; (opt->longName || opt->shortName || opt->arg);
  			 opt++) {
  			if ((opt->longName || opt->shortName)
  				&& !(opt->argInfo & POPT_ARGFLAG_DOC_HIDDEN))
  				singleOptionHelp(fp, left, opt, translation_domain);
  		}
  
  	if (table != NULL)
  		for (opt = table; (opt->longName || opt->shortName || opt->arg);
  			 opt++) {
  			if ((opt->argInfo & POPT_ARG_MASK) != POPT_ARG_INCLUDE_TABLE)
  				continue;
  			sub_transdom = getTableTranslationDomain(opt->arg);
  			if (sub_transdom == NULL)
  				sub_transdom = translation_domain;
  
  			if (opt->descrip)
  				fprintf(fp, "\n%s\n", D_(sub_transdom, opt->descrip));
  
  			singleTableHelp(con, fp, opt->arg, left, sub_transdom);
  		}
  }
  
  static int showHelpIntro(popt_context con, FILE * fp)
  {
  	int len = 6;
  	const char *fn;
  
  	fprintf(fp, POPT_("Usage:"));
  	if (!(con->flags & POPT_CONTEXT_KEEP_FIRST)) {
  		fn = con->optionStack->argv[0];
  
  		if (fn == NULL)
  			return len;
  		if (strchr(fn, '/'))
  			fn = strrchr(fn, '/') + 1;
  		fprintf(fp, " %s", fn);
  		len += strlen(fn) + 1;
  	}
  
  	return len;
  }
  
  void popt_printhelp(popt_context con, FILE * fp, int flags)
  {
  	int leftColWidth;
  
  	(void)showHelpIntro(con, fp);
  	if (con->otherHelp)
  		fprintf(fp, " %s\n", con->otherHelp);
  	else
  		fprintf(fp, " %s\n", POPT_("[OPTION...]"));
  
  	leftColWidth = maxArgWidth(con->options, NULL);
  	singleTableHelp(con, fp, con->options, leftColWidth, NULL);
  }
  
  static int singleOptionUsage(FILE * fp, int cursor,
  							 const struct popt_option *opt,
  							 const char *translation_domain)
  {
  	int len = 3;
  	char shortStr[2] = { '\0', '\0' };
  	const char *item = shortStr;
  	const char *argDescrip = getArgDescrip(opt, translation_domain);
  
  	if (opt->shortName != '\0') {
  		if (!(opt->argInfo & POPT_ARG_MASK))
  			return cursor;
  		len++;
  		shortStr[0] = opt->shortName;
  		shortStr[1] = '\0';
  	}
  	else if (opt->longName) {
  		len += 1 + strlen(opt->longName);
  		item = opt->longName;
  	}
  
  	if (len == 3)
  		return cursor;
  
  	if (argDescrip)
  		len += strlen(argDescrip) + 1;
  
  	if ((cursor + len) > 79) {
  		fprintf(fp, "\n       ");
  		cursor = 7;
  	}
  
  	fprintf(fp, " [-%s%s%s%s]",
  			((opt->shortName
  			  || (opt->argInfo & POPT_ARGFLAG_ONEDASH)) ? "" : "-"), item,
  			(argDescrip ? (opt->shortName != '\0' ? " " : "=") : ""),
  			(argDescrip ? argDescrip : ""));
  
  	return cursor + len + 1;
  }
  
  static int itemUsage(FILE * fp, int cursor, popt_item item, int nitems,
  					 const char *translation_domain)
  {
  	int i;
  
  	if (item != NULL)
  		for (i = 0; i < nitems; i++, item++) {
  			const struct popt_option *opt;
  			opt = &item->option;
  			if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INTL_DOMAIN) {
  				translation_domain = (const char *)opt->arg;
  			}
  			else if ((opt->longName || opt->shortName) &&
  					 !(opt->argInfo & POPT_ARGFLAG_DOC_HIDDEN)) {
  				cursor =
  					singleOptionUsage(fp, cursor, opt, translation_domain);
  			}
  		}
  
  	return cursor;
  }
  
  static int singleTableUsage(popt_context con, FILE * fp,
  							int cursor, const struct popt_option *opt,
  							const char *translation_domain)
  {
  	if (opt != NULL)
  		for (; (opt->longName || opt->shortName || opt->arg); opt++) {
  			if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INTL_DOMAIN) {
  				translation_domain = (const char *)opt->arg;
  			}
  			else if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INCLUDE_TABLE) {
  				if (opt->arg)
  					cursor = singleTableUsage(con, fp, cursor, opt->arg,
  											  translation_domain);
  			}
  			else if ((opt->longName || opt->shortName) &&
  					 !(opt->argInfo & POPT_ARGFLAG_DOC_HIDDEN)) {
  				cursor =
  					singleOptionUsage(fp, cursor, opt, translation_domain);
  			}
  		}
  
  	return cursor;
  }
  
  static int showShortOptions(const struct popt_option *opt, FILE * fp,
  							char *str)
  {
  	char *s = alloca(300);
  
  	s[0] = '\0';
  	if (str == NULL) {
  		memset(s, 0, sizeof (s));
  		str = s;
  	}
  
  	if (opt != NULL)
  		for (; (opt->longName || opt->shortName || opt->arg); opt++) {
  			if (opt->shortName && !(opt->argInfo & POPT_ARG_MASK))
  				str[strlen(str)] = opt->shortName;
  			else if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INCLUDE_TABLE)
  				if (opt->arg)
  					(void)showShortOptions(opt->arg, fp, str);
  		}
  
  	if (s != str || *s != '\0')
  		return 0;
  
  	fprintf(fp, " [-%s]", s);
  	return strlen(s) + 4;
  }
  
  void popt_printusage(popt_context con, FILE * fp, int flags)
  {
  	int cursor;
  
  	cursor = showHelpIntro(con, fp);
  	cursor += showShortOptions(con->options, fp, NULL);
  	(void)singleTableUsage(con, fp, cursor, con->options, NULL);
  	(void)itemUsage(fp, cursor, con->aliases, con->numAliases, NULL);
  	(void)itemUsage(fp, cursor, con->execs, con->numExecs, NULL);
  
  	if (con->otherHelp) {
  		cursor += strlen(con->otherHelp) + 1;
  		if (cursor > 79)
  			fprintf(fp, "\n       ");
  		fprintf(fp, " %s", con->otherHelp);
  	}
  
  	fprintf(fp, "\n");
  }
  
  void popt_setotheroptionhelp(popt_context con, const char *text)
  {
  	con->otherHelp = _free(con->otherHelp);
  	con->otherHelp = strdup(text);
  }
  Index: ossp-pkg/popt/popt.h
  ============================================================
  $ cvs update -p -r1.1.1.1 popt.h
  /* 
   *  Option Parsing Library (POPT)
   *  Copyright (c) 1998-2002 Red Hat, Inc.
   *
   *  Permission is hereby granted, free of charge, to any person obtaining a copy
   *  of this software and associated documentation files (the "Software"), to deal
   *  in the Software without restriction, including without limitation the rights
   *  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
   *  copies of the Software, and to permit persons to whom the Software is
   *  furnished to do so, subject to the following conditions:
   *
   *  The above copyright notice and this permission notice shall be included in
   *  all copies or substantial portions of the Software.
   *
   *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
   *  X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
   *  AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
   *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
   *
   *  Except as contained in this notice, the name of the X Consortium shall not be
   *  used in advertising or otherwise to promote the sale, use or other dealings
   *  in this Software without prior written authorization from the X Consortium.
   *
   *  NOTICE:
   *  This is an automatically generated, stripped down version of the
   *  POPT 1.6.3 library from Red Hat, Inc. This version is still
   *  distributed under above Open Source license, but Red Hat is no longer
   *  responsible for this version. Contact The OSSP Project instead.
   */
  
  #ifndef __POPT_H__
  #define __POPT_H__
  
  #ifdef __cplusplus
  extern "C" {
  #endif
  
  #include <stdio.h>
  
  #define POPT_OPTION_DEPTH	10
  
  #define POPT_ARG_NONE		0
  #define POPT_ARG_STRING		1
  #define POPT_ARG_INT		2
  #define POPT_ARG_LONG		3
  #define POPT_ARG_INCLUDE_TABLE	4
  #define POPT_ARG_CALLBACK	5
  #define POPT_ARG_INTL_DOMAIN    6
  #define POPT_ARG_VAL		7
  #define	POPT_ARG_FLOAT		8
  #define	POPT_ARG_DOUBLE		9
  
  #define POPT_ARG_MASK		0x0000FFFF
  
  #define POPT_ARGFLAG_ONEDASH	0x80000000
  #define POPT_ARGFLAG_DOC_HIDDEN 0x40000000
  #define POPT_ARGFLAG_STRIP	0x20000000
  #define	POPT_ARGFLAG_OPTIONAL	0x10000000
  
  #define	POPT_ARGFLAG_OR		0x08000000
  #define	POPT_ARGFLAG_NOR	0x09000000
  #define	POPT_ARGFLAG_AND	0x04000000
  #define	POPT_ARGFLAG_NAND	0x05000000
  #define	POPT_ARGFLAG_XOR	0x02000000
  #define	POPT_ARGFLAG_NOT	0x01000000
  #define POPT_ARGFLAG_LOGICALOPS \
          (POPT_ARGFLAG_OR|POPT_ARGFLAG_AND|POPT_ARGFLAG_XOR)
  
  #define	POPT_BIT_SET	(POPT_ARG_VAL|POPT_ARGFLAG_OR)
  
  #define	POPT_BIT_CLR	(POPT_ARG_VAL|POPT_ARGFLAG_NAND)
  
  #define	POPT_ARGFLAG_SHOW_DEFAULT 0x00800000
  
  #define POPT_CBFLAG_PRE		0x80000000
  #define POPT_CBFLAG_POST	0x40000000
  #define POPT_CBFLAG_INC_DATA	0x20000000
  #define POPT_CBFLAG_SKIPOPTION	0x10000000
  #define POPT_CBFLAG_CONTINUE	0x08000000
  
  #define POPT_ERROR_NOARG	-10
  #define POPT_ERROR_BADOPT	-11
  #define POPT_ERROR_OPTSTOODEEP	-13
  #define POPT_ERROR_BADQUOTE	-15
  #define POPT_ERROR_ERRNO	-16
  #define POPT_ERROR_BADNUMBER	-17
  #define POPT_ERROR_OVERFLOW	-18
  #define	POPT_ERROR_BADOPERATION	-19
  #define	POPT_ERROR_NULLARG	-20
  #define	POPT_ERROR_MALLOC	-21
  
  #define POPT_BADOPTION_NOALIAS  (1 << 0)
  
  #define POPT_CONTEXT_NO_EXEC	(1 << 0)
  #define POPT_CONTEXT_KEEP_FIRST	(1 << 1)
  #define POPT_CONTEXT_POSIXMEHARDER (1 << 2)
  #define POPT_CONTEXT_ARG_OPTS	(1 << 4)
  
  	struct popt_option {
  		const char *longName;
  		char shortName;
  		int argInfo;
  		void *arg;
  		int val;
  		const char *descrip;
  		const char *argDescrip;
  	};
  
  	struct popt_alias {
  		const char *longName;
  		char shortName;
  		int argc;
  		const char **argv;
  	};
  
  	typedef struct popt_item_s {
  		struct popt_option option;
  		int argc;
  		const char **argv;
  	}  *popt_item;
  
  	extern struct popt_option popt_aliasOptions[];
  #define POPT_AUTOALIAS { NULL, '\0', POPT_ARG_INCLUDE_TABLE, popt_aliasOptions, \
  			0, "Options implemented via popt alias/exec:", NULL },
  
  	extern struct popt_option popt_helpoptions[];
  #define POPT_AUTOHELP { NULL, '\0', POPT_ARG_INCLUDE_TABLE, popt_helpoptions, \
  			0, "Help options:", NULL },
  
  #define POPT_TABLEEND { NULL, '\0', 0, 0, 0, NULL, NULL }
  
  	typedef struct popt_context_s *popt_context;
  
  #ifndef __cplusplus
  
  	typedef struct popt_option *popt_option;
  
  #endif
  
  	enum popt_callbackreason { POPT_CALLBACK_REASON_PRE,
  		POPT_CALLBACK_REASON_POST,
  		POPT_CALLBACK_REASON_OPTION
  	};
  
  	typedef void (*popt_callbacktype) (popt_context con,
  									   enum popt_callbackreason reason,
  									   const struct popt_option * opt,
  									   const char *arg, const void *data);
  
  	popt_context popt_getcontext(const char *name,
  								 int argc, const char **argv,
  								 const struct popt_option *options,
  								 int flags);
  
  	void popt_resetcontext(popt_context con);
  
  	int popt_getnextopt(popt_context con);
  
  	const char *popt_getoptarg(popt_context con);
  
  	const char *popt_getarg(popt_context con);
  
  	const char *popt_peekarg(popt_context con);
  
  	const char **popt_getargs(popt_context con);
  
  	const char *popt_badoption(popt_context con, int flags);
  
  	popt_context popt_freecontext(popt_context con);
  
  	int popt_stuffargs(popt_context con, const char **argv);
  
  	int popt_addalias(popt_context con, struct popt_alias alias, int flags);
  
  	int popt_additem(popt_context con, popt_item newItem, int flags);
  
  	int popt_readconfigfile(popt_context con, const char *fn);
  
  	int popt_readdefaultconfig(popt_context con, int useEnv);
  
  	int popt_dupargv(int argc, const char **argv,
  					 int *argcPtr, const char ***argvPtr);
  
  	int popt_parseargvstring(const char *s,
  							 int *argcPtr, const char ***argvPtr);
  
  	const char *const popt_strerror(const int error);
  
  	void popt_setexecpath(popt_context con, const char *path,
  						  int allowAbsolute);
  
  	void popt_printhelp(popt_context con, FILE * fp, int flags);
  
  	void popt_printusage(popt_context con, FILE * fp, int flags);
  
  	void popt_setotheroptionhelp(popt_context con, const char *text);
  
  	const char *popt_getinvocationname(popt_context con);
  
  	int popt_strippedargv(popt_context con, int argc, char **argv);
  
  #ifdef  __cplusplus
  }
  #endif
  #endif

From ossp-cvs-owner@ossp.org  Wed Jan 30 15:02:45 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DAD5D764D8; Wed, 30 Jan 2002 15:02:43 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/popt popt.ps
Message-Id: <20020130140243.DAD5D764D8@mail.ossp.org>
Date: Wed, 30 Jan 2002 15:02:43 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   30-Jan-2002 15:02:43
  Branch: HEAD                             Handle: 2002013014024200

  Added files:
    ossp-pkg/popt           popt.ps

  Log:
    add POPT Postscript document

  Summary:
    Revision    Changes     Path
    1.1         +7963 -0    ossp-pkg/popt/popt.ps
  ____________________________________________________________________________

  Index: ossp-pkg/popt/popt.ps
  ============================================================
  $ cvs update -p -r1.1 popt.ps
  %!PS-Adobe-2.0
  %%Creator: dvipsk 5.58f Copyright 1986, 1994 Radical Eye Software
  %%Title: book.dvi
  %%Pages: 11
  %%PageOrder: Ascend
  %%BoundingBox: 0 0 567 702
  %%DocumentFonts: ZapfDingbats Palatino-Bold Palatino-Roman
  %%+ StoneSans-Bold StoneSans Palatino-Italic PPCode
  %%+ StoneSans-SemiboldItalic StoneSans-Semibold PPCodeBold
  %%DocumentPaperSizes: Letter
  %%EndComments
  %DVIPSCommandLine: dvips -k -o "|./fixappendix book.ps" book.dvi
  %DVIPSParameters: dpi=600, comments removed
  %DVIPSSource:  TeX output 1998.03.23:1523
  %%BeginProcSet: tex.pro
  /TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
  /X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72
  mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1}
  ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
  isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div
  hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul
  TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if}
  forall round exch round exch]setmatrix}N /@landscape{/isls true N}B
  /@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B
  /FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{
  /nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N
  string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N
  end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{
  /sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]
  N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup
  length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{
  128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub
  get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data
  dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N
  /rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup
  /base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx
  0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff
  setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff
  .1 sub]{ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{]}
  if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup
  length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{
  cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin
  0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul
  add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore userdict
  /eop-hook known{eop-hook}if showpage}N /@start{userdict /start-hook
  known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X
  /IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for
  65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0
  0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V
  {}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7
  getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false}
  ifelse}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false
  RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1
  false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform
  round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg
  rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail
  {dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M}
  B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{
  4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{
  p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p
  a}B /bos{/SS save N}B /eos{SS restore}B end
  %%EndProcSet
  %%BeginFont: Palatino-Bold
  % @@psencodingfile@{
  %   author = "S. Rahtz, P. MacKay, Alan Jeffrey, B. Horn, K. Berry",
  %   version = "0.6",
  %   date = "22 June 1996",
  %   filename = "8r.enc",
  %   email = "kb@@mail.tug.org",
  %   address = "135 Center Hill Rd. // Plymouth, MA 02360",
  %   codetable = "ISO/ASCII",
  %   checksum = "119     662    4424",
  %   docstring = "Encoding for TrueType or Type 1 fonts to be used with TeX."
  % @}
  % 
  % Idea is to have all the characters normally included in Type 1 fonts
  % available for typesetting. This is effectively the characters in Adobe
  % Standard Encoding + ISO Latin 1 + extra characters from Lucida.
  % 
  % Character code assignments were made as follows:
  % 
  % (1) the Windows ANSI characters are almost all in their Windows ANSI
  % positions, because some Windows users cannot easily reencode the
  % fonts, and it makes no difference on other systems. The only Windows
  % ANSI characters not available are those that make no sense for
  % typesetting -- rubout (127 decimal), nobreakspace (160), softhyphen
  % (173). quotesingle and grave are moved just because it's such an
  % irritation not having them in TeX positions.
  % 
  % (2) Remaining characters are assigned arbitrarily to the lower part
  % of the range, avoiding 0, 10 and 13 in case we meet dumb software.
  % 
  % (3) Y&Y Lucida Bright includes some extra text characters; in the
  % hopes that other PostScript fonts, perhaps created for public
  % consumption, will include them, they are included starting at 0x12.
  % 
  % (4) Remaining positions left undefined are for use in (hopefully)
  % upward-compatible revisions, if someday more characters are generally
  % available.
  % 
  % (5) hyphen appears twice for compatibility with both ASCII and Windows.
  % 
  /TeXBase1Encoding [
  % 0x00 (encoded characters from Adobe Standard not in Windows 3.1)
    /.notdef /dotaccent /fi /fl
    /fraction /hungarumlaut /Lslash /lslash
    /ogonek /ring /.notdef
    /breve /minus /.notdef 
  % These are the only two remaining unencoded characters, so may as
  % well include them.
    /Zcaron /zcaron 
  % 0x10
   /caron /dotlessi 
  % (unusual TeX characters available in, e.g., Lucida Bright)
   /dotlessj /ff /ffi /ffl 
   /.notdef /.notdef /.notdef /.notdef
   /.notdef /.notdef /.notdef /.notdef
   % very contentious; it's so painful not having quoteleft and quoteright
   % at 96 and 145 that we move the things normally found there down to here.
   /grave /quotesingle 
  % 0x20 (ASCII begins)
   /space /exclam /quotedbl /numbersign
   /dollar /percent /ampersand /quoteright
   /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash
  % 0x30
   /zero /one /two /three /four /five /six /seven
   /eight /nine /colon /semicolon /less /equal /greater /question
  % 0x40
   /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O
  % 0x50
   /P /Q /R /S /T /U /V /W
   /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
  % 0x60
   /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o
  % 0x70
   /p /q /r /s /t /u /v /w
   /x /y /z /braceleft /bar /braceright /asciitilde
   /.notdef % rubout; ASCII ends
  % 0x80
   /.notdef /.notdef /quotesinglbase /florin
   /quotedblbase /ellipsis /dagger /daggerdbl
   /circumflex /perthousand /Scaron /guilsinglleft
   /OE /.notdef /.notdef /.notdef
  % 0x90
   /.notdef /.notdef /.notdef /quotedblleft
   /quotedblright /bullet /endash /emdash
   /tilde /trademark /scaron /guilsinglright
   /oe /.notdef /.notdef /Ydieresis
  % 0xA0
   /.notdef % nobreakspace
   /exclamdown /cent /sterling
   /currency /yen /brokenbar /section
   /dieresis /copyright /ordfeminine /guillemotleft
   /logicalnot
   /hyphen % Y&Y (also at 45); Windows' softhyphen
   /registered
   /macron
  % 0xD0
   /degree /plusminus /twosuperior /threesuperior
   /acute /mu /paragraph /periodcentered
   /cedilla /onesuperior /ordmasculine /guillemotright
   /onequarter /onehalf /threequarters /questiondown
  % 0xC0
   /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
   /Egrave /Eacute /Ecircumflex /Edieresis
   /Igrave /Iacute /Icircumflex /Idieresis
  % 0xD0
   /Eth /Ntilde /Ograve /Oacute
   /Ocircumflex /Otilde /Odieresis /multiply
   /Oslash /Ugrave /Uacute /Ucircumflex
   /Udieresis /Yacute /Thorn /germandbls
  % 0xE0
   /agrave /aacute /acircumflex /atilde
   /adieresis /aring /ae /ccedilla
   /egrave /eacute /ecircumflex /edieresis
   /igrave /iacute /icircumflex /idieresis
  % 0xF0
   /eth /ntilde /ograve /oacute
   /ocircumflex /otilde /odieresis /divide
   /oslash /ugrave /uacute /ucircumflex
   /udieresis /yacute /thorn /ydieresis
  ] def
  %%EndFont
  %%BeginProcSet: stonesb.pfa
  11 dict begin
  /FontInfo 10 dict dup begin
  /version (001.002) readonly def
  /Notice (Copyright (c) 1987, 1990, 1992 Adobe Systems Incorporated.  All Rights Reserved.ITC Stone is a registered trademark of International Typeface Corporation.) readonly def
  /FullName (ITC Stone Sans Bold) readonly def
  /FamilyName (ITC Stone Sans) readonly def
  /Weight (Bold) readonly def
  /isFixedPitch false def
  /ItalicAngle 0 def
  /UnderlinePosition -100 def
  /UnderlineThickness 50 def
  end readonly def
  /FontName /StoneSans-Bold def
  /Encoding StandardEncoding def
  /PaintType 0 def
  /FontType 1 def
  /FontMatrix [0.001 0 0 0.001 0 0] readonly def
  /UniqueID 38782 def
  /FontBBox{-158 -250 1540 946}readonly def
  currentdict end
  currentfile eexec
  405149B573AEC9378BAE46685AAF7849E5C9A5C8C876748725589FB14A049808D39A75D55F6464
  11A9C3526F1887AA2BAE53EE4BA6377CB094098BB2590828DB96FFD3A289579524DBBC79D9597D
  47A79192E01C360F06B93BFF89A3C642BC410337D743499A7F8B1E476FA1BDB0B198F67CAE3F57
  49A1ACC4879F6EBCD84740D62C5248595B530E6C3D3CDC3AF54369EAFDEDCD9848E2D38CD091BF
  2ACAD10DF1C87872AABD086D60475ED6046E240F2232FE2F00259225931518B7B429137B14384D
  15F582467A818C20C1C6316C56736C19F1D7464231D69800D94CF5013DC237DA1EC16FD63D3154
  4FADF83F152D1496E3E1B50E657D51952A65DA2224AE3C290A948226F005C37ABA2F6CAA732367
  9D03A1F924A332FCF713C3AFF685DCD14F950A9F50F46939759F915F780F68EB1E8A2A6DD370DD
  DEF5A51652CD0C5DECBCC94396962904B19069ACAB227B6D4D14852A65362D2BFE3B3936D8AB3F
  2318A99A46913D868EDF1984F868785E3B1107643BC4E58206E8E5E71E5E13A822A289A7C7559E
  07BBD8822847C56EC0DDB12202633CACA990B5844B5253EBF7218C2C491211D1879A4F36BAD9B6
  9353D636506C52F24818E4464E02C41AAA17AF7BF09FBC37C335A7BCA40481C1371828D4ADE630
  8DF09DC08C641377295CD75485DC14732819C2DB21CC499733FECAE1CA94907A1F144F0EB9BFC2
  98E471AF304BC3628CD390202FFF59A7BD14D9F9CC99368826DE6446CD40A68ADEDBBE8C388798
  0FE574448B196E987C2A392DA865DA46E652AAC8F9A4826D5AD1776FE2E5D2DEEFA011507BE935
  9E19E2AF34643135691E3A221B4B0AB0D18DC3993F6465489CE5EFA0D2FEC087881927A434E51F
  99683AA0463697BB9614B6CF5247330BB7393F836A789A3774629B27E1F82AE4C01EDBE95C237A
  0EAC78A5A7FFCC2332DCDB725BDE9101A9DE53A6CCA64A98429471BA8018A3E3C2D287B6316FBF
  08C3D2BB5A611D1BE846B17C2F0CAAE2955BBA7EE4D84DBFA6BB5D54B5D90E23C21D34562144DA
  4F5A49E666C1E6F7F18B2B33B2BC4A7FE722440D272CE53354B39442F3BC89E5F939B7175448F0
  02D6A60BC297C770745222FDACC9D456B4F869E7BD4E802C01D517AD752BA533DF1ECF4F9A6CF0
  DE8306C55A90405F23D1834D76D2B4452E4504AA953A8B4DDA4F0C967329D922A68615B1B71F73
  E8BB682ECBE3C7417A218DC386B0095B38575EBBA55581F768BA5D5F203A7625FE78857EF2B919
  BAE4DE0116506FE2C476A6423414FEF5833DFE00D3EAD6C6B5F31625CD76FB0A49D04C1DD85A7E
  692BECE0CC32C9A8C04AC209B5D1D77B7BD213B71855FBE81F757F46127E7253823E732A609DCF
  16C79412D1F0A1517288A81B42165B47DA66ECA5E8E1F6A39A474486A3D4B669BC65CF63136AC9
  243E7A492CFE222CB4F55C2ED4BAA7556DEDAD425BD706AEED895EAC76704AF6366295EFB4A91B
  548C2176D4A30B1026489E70D8D981D110DE46E0D5DF3A287059220142DB0100092FBD9E16484B
  7CDFBAC2B595FD35359D65D5351D5AA1AF8EE94E6A259A568F3D6219F2538EB9E31E88D2A7D8B2
  15F88C581AFAAAE67AF587343AB6AB3636AE519CAB00CD0A79EAE4DBCB56E76E46F14DD7F03759
  D10A4F78BC714B60E3CC56BC04C4FE68C5549BC1A4577F2AF578F1441EEE9178E6788CE03EE16C
  8C3E80DEE3F0D016AC09B0B62B46EBE547F0C10466E8BC9C3AC235F91F599B244F8DAC3B9FA661
  8A09D9A62E9E904CCE33BB1DA1F6FC81E1F97A1C56A2107F721F837180DF24FF110C7AED628E7D
  0B465D5064A6DB0E178C400B65E23951E7562A8C890BAB0774C2ACCED07E487D54E688E5AF3546
  661B13336EB1A4EF484BFE4CAB61BFA47B7F232D46EFAF50D5E31A8305EF727DB091AB0B93430E
  61FB938F721390EE271D2BA5D8B33BAFD5CB3F24C7A4ADEFF6C0E42D93E1B9DABD25F891811A09
  457BC94E13F1B71F628969679740D91C1971598A1D4C248F840BBEF2BCF74FB1EAC6D3D58306DD
  607CAEB18A8B19EB775BCBC6602DED6DC273D4A0190EF8D30E05675BC7B3EE1F6D584311C681F0
  C9B7D60D25BECC3CA7BC83B17E7D42832D92CB66345668F455F86A39D59534B84967D5542D288B
  0018FA183A4271150F549D0532E692C31077ACD8F905293CC16C9901DEAAE6B326680A59493707
  895264F881D693BBCA955A6F03B58AE0D81540E26BC9A2104D4AB20C5CD1D4FA3DB09A38246425
  E5B1FE1EFBE6C32AF609EBE71CA5DE4E24D8CDCAF1C3C84359126DAA6AD0098BF74284455943F5
  115360799F10BDD657D00FFBC2039816785AD6E5EFA8444F3AEAA8DB52E2F3CBEA815C4EC09076
  1D03E87401317A12567DA35A9DED959746FD5613E1D7497D04F80CAA3463D3F3EB7912CCB6EF87
  8B487485A275D154E2549F3C424A730F66F66AC9E6FAE099E71504AD5B76B4F97C7BE15D70E4A4
  3CB01E09CD47F41BF047757436C886A36B9C5F2C51B161A397DFC5494C2ECB5A4CCCC075DBE2D2
  E37B22F14C3665182200830F6796C1C9841F24453286515E3F6B701EF8C0BE65B8305A3D2A0522
  CA5A30CFE5CBFC50A9B6E7D3925E532AB5A58D4C6CEA5FAE1C1EED2E39C815E64BCC96DE2AF85E
  F5BC1831EDA3B1BA541B7DB5EDF6E042246A8534353B20E99A0ADDB46B32AF11DEDC2FE1B32263
  F054E752F68427F5A1B71ED953FC272FDDEA55506CC8FDE8F35C619E37296048024FA6303A9FFE
  6C9BE3EDE4BE5794AD1A8E761B3CDF137C7A29C64D0D8EE1CF071F9096DEE843ED40F1D4A543A8
  CE28F7043D38A74E929EAEAB6BA95CDD17E51BDD77691F0846F9EEE48CD5CAF905CE0814F3C7DF
  A17F430384CF1B2004F31E07975CE4A6BC88CAD0A805CF89D167BDD15C9F0F8442166DE3DFA687
  5FC08A35D221A151698B803BD67064571AE57B67797B5F0618B6B8F3D14829B87ADA7838D65BCE
  D527CE2FF9984555B8A6B915A68263E64141408FCB7BBF1FF7B8C043705A8803ADB84397B861BD
  64A3A7BA781C44C847A68F1A9E8FF6ED7BE881B08C8ED3A2BAFAB919D7D36D36772DAAF812A74A
  EC368EA622DB6903CBA3134E755C63B0020EE72EA699A3975BA4B1CF7030E66B36BDE8A66BD0B2
  70C7A2EC084B8383D023269B931B9CA036FCA362A9DA6DC9DDDFC11F715B1F2A60098C56B6B68D
  52BAF33BF0AEE2D8551F0C8809342894F60D3490D9DAD1317AB2F70E313924E9D680C610D41CC3
  1924E1458AD220FFE0B384404DF3AA67E7305A0836C5C195513EC3D0686B368A65DD3DE9AEF5D4
  EA28376B4ACC1D00EB38F6D4EED7E025EE17A1D157C1E71879DE16BF46D58E1BB46B2CF9CBA082
  C0A94567A5C874E8E6477A3CD0D6E48F8CD4E4AC3730E33EC8079B4CCE0EBDDA5E48ED13626F90
  888A2892448DD075EA3A846D1C8E6E3F0FF03B8D63D04AEDFC659840A949275394EB21B85E544C
  28BF0C2AB7113EBE4A8A3D0579EF48C15D9D82A09E96347422073A45E3197490D59FE5E9818697
  065A419E95768DAF768E1D938414ECDE5159281F4BB35EED8D65D3651906217FFC08AFBB075474
  D0F6B7519CE3668090B115A350DC3E90DB350A290822405C7AD6713F3BC29FEE0A4E32F9C85FDB
  232A458F55DB1CA335FC94A472C390A322422CAD609443F5645E6C45238570B689A7AB307B63DB
  B598FCF2EB2A70F6C4C9CB5DC3076938C4D2C400930DC2625285EB4483294509A4B018002B8261
  AEF571B06D8E9BD86E8AA40CFED8E92D055D1F653FF68F2EDF9463796B070A2B366BA274A07CA8
  283B30CF79231CDDE4A2949F47D8C18C1583673FBC5AE18E0A54D32B095322CFF5DF3831F91068
  E9DC713EF1B280D41C4BBEFB26095FCD57A5FF745E0A24C037B8093FFF2E10DA7F6F6A481260D3
  237158CE50618A8BDB1CE1CF5551B4598917E4D40137E67993D96D75D6C3850D92D5373541D7E6
  5E7CCA1478A5F3D117AB8EF2F80F02489E7D9899A46B4B1C30E61D657AED848A144DC24F11A1F7
  18202029C81926AA76D9F7E4B8CDE38848E702EC6841115A0F585334F42445AEAAE787BF272A26
  3594E4F62358E7EDAAAA63028DE788724EE04D1751A59BD95D9DC2F2EDF0256CB44ED3E2210A9B
  AFE82833926ED6DABA60141D740DB0318FDD9A7D3B4CEC8F2C95E3FA6EF6013737F0B1D48D24D6
  FE389C2EF5BD12AD8C6D2ABAF9016EFC7DE8DBDA6FDA21727EF8E007B155D311D7B279757167F4
  D1B2473534C2408E402AA0504F853ACBBB5CEDE208137F2DA6C21230FE2715C45EF003AA9013F8
  54A5534F3AD3F8FF0550BAD3716449DFB3A6A4F460C72EFE3EC5AA220E902C3C9F062E8EB41069
  5B3D602545BBC24D616F0975B16E8C7D3415F792555367704B92CEC9BFD6A851C81F5D9714AF8B
  E6F8C992AB1C13D51F46C5E32F79731EA32D9C526D2AAA0A1584692A024E0F85BF9E1383CDA1C8
  FC6BE36CA3C12E4FF34F11BA62D9596B39836EB59B61BC5F5DA97D803215BA1D4343337FBB5D72
  0CDEA081EC40329FF31057BEA7698AE4DE1F0B75D4D9027F741F587B4B524EB12287DFD0B90AC4
  BEB27538A7855B7966576B68F1682B990CB5FF4BA294F278DC98956C58FACCBAF383B708FE4666
  52761E94BB3E5E65C7E904643D54C68920C0B1072B790AEF99229D1F7745CB403F07C023FA6A30
  E0A00D4ADE7051A8B59ADB29D44130AB03B7FB303650E9EF55C49978A94A583974B6B91A0A4065
  B47DBA34BCEDA19D44A3FD83E7FD23CBEB6D1699023B704B8C0E2FA801CE15A98ECDBB0498BBA2
  23B444C0A75E0E4DD995D40AA4F9F03C0AF85BC5742182D628B3C0D1F76A1A9C7E02CB2295CF26
  A2F73760BC472E2278CAE54D9762FA27A9246965326A0CDBCAE997608D0A1D5326E78B6780E15B
  AE688827665DD786E6275969448E303012486BCBE4130D848B46666D660D0793559AE3E984DDD1
  04C4D56A066787B4AA4E1DE8183B078A8DE42F0663D33D35BACB19A2D82A62C52BE6D3C6EA6C5E
  3DC9C49BB74FB1E430629F437DFE67DB4DAC73590258873B6D808E8DAD4FFFE660F09D5207AA7D
  7F45EEDE6ECC32EA8F8BAA075EF236C72F9759F44F59FDB478EB818768EF740B9C892398B35B89
  C6F44EFA1E3BAF384D4BEC68D817AE7C449DE061D53C7568F2714365D5C807298D6F72E4D5D8AD
  B87ACE19E4057E218811ED12F84906F4FF9BED46607263AF1CE4E4FC1A7D06D59725BFAF9B191C
  17D912C67726D88CE805ECF93081A1BEE281A0364EF0CEFBA92FCD6433B4A44AC83C44935901D9
  2E32184A31FE7661B7636B70FF62D97AE9D7440A3A612A68DFD7176445F07346FD25DA5D910070
  5B7AC6F906BCBCAFE2BB3A3E296D580660B5F7B2B829951D291A759CE5DABC47E9021C14AF80D4
  E259EE13169257EE24C0373A7CAC17B9549A3940FC658BC35FC6366C7A9EADFDB6FF15CFCE038D
  B5F1E0B2A33CB8C45D78CE03E8394E0EA9D67708C11F7E25ADA4298D5C89D977BF17555AC70570
  BE07815C8CD204E3CCCD3E89A6A4B9BB1A05FD6DD4A56DDC0AE56D7F58381246095E86245055B7
  762D09811480E9A1700FB390BBD45FD05F1054EE65A9FCA82B28F1453D719D8EA1E38E1475D94D
  3D1B16F65CC4582CC32CBF5B9DE90E96D92A39F667090B8B47E0EACBBE85F885FB55F83B19B030
  52D4ED552C1CA7780A4ABF0DB02F476D6A494B363998B4BE832CFDBDFB28E0D2F6DBDF04291E53
  F8CEE97D6057E668F359475FA575441BC77FA6FF3170621D1002B1AB40C155B8F40F74DC822B9A
  9CEEF7662C9CECE1082AE269953ACAE2E78E3EB011F721E6D65B897699DF6BE1D143989FE07BE9
  E1EEAC4A7FAB2BB88841E33E9AF0E109A186F72B6D958D2DBD92E070B61FA8AC9DE60D3B0BE089
  50C597D02551B3B10A0E52E40571BF6AF4047B1914FA5651EAF0DE0D332EE959F58F4DDE1D8D4D
  6D847DE50E4A47AC0C2EE73FB67CE7FA22F242D4E69EDF2CC050DADDB25F8959E9060AF0E2ABCD
  2E0225A1B9C4792EE988517B3A567DA09F3E12E052ECDC91A5737C44026513E46D7B0C7399B006
  B1505F3B7F41883A14BA5B180E80C63DD5D37EC5E90C38F46DC88F11FD5C1570455941949606CA
  598CA2010568DC0B49FE5E5EB5DFB7E3AF195A23F51F87F5898D10A34043F23409A95519356617
  073EC83CD312AF6961EEA40377EAB0B0C159C3906F0492E94414ABB8FF34F1FB6D33594DCB5A64
  FAA7A02C749799BC14552F205122E22208EDB633FA50311B398B98EFFC0FEB5CAE8B0953CD1D0F
  05701C2919D5DE58EEA2CA4AEDD06444915B16925504D159F050AAA203473C29805EDF5A71AAD2
  06C601266ED2B909E68887F94B7614E723950EA9818F7793040BB8F7E3500BE44898B92E1BDC97
  BCCF312D35A85E667669F15BDB42884E7A258C36C7CF4947852864FF46EFCD56817C58A7BDF29F
  3111A188A5F9F255FE04255B1427CCD9D0CAF6D9992C6FD493E11AAA81E13FC69C569A573A79CC
  D3D2859B051B7EC7CB55A2929E515FC15B08ADA50369C10808B83EFB6445B4E57E8BBBD75D6A6A
  62F722875C6A65BA355BF24CDDF4F5611D4918ED9DDC52E527C49A2843BA3646F37B0103ED0838
  5D68834783F29C21FC66F55A7B11CDD154810310CB0C05367D2F12D749F5BAFCA86AF16160E90E
  1E6609DBFEB302BB7393237731FF90EF555E1A194F88BB05FCEBB6B057372731CF1D14CB47E47B
  69A3E1158F1741DA4505541A832D0362CD4D16EC54BB16E40CC682CE6132E369C0BAA2ABD7A35F
  C27999881B02D9C22DFDD56CD7520CB83A8CFCB4A17DC799043F25D69BF3460DEEBF18C2579F05
  2B69B9FE5E6B7467A15DAC10F3D3500B7EB0D41E8CBB0D3DD7A69D28458373C681FA763BAFFC57
  24E1B59F21AA8830E7391E8BF8CD649F7F3826264914505A3B36705655AF3C3FF506332A43D753
  D15BF0A415D6C7F8F653EEC0A66840E7B9E78C8AB0556417071CADB861D9CE959CD4641EF2CDEA
  B450587752B4ABE8F1E61732C49C57241746E913B99D23568F627AA7A22B9D3372F24A9F1B8AC3
  427E598809084D4BCDCC8E29B975020E737FBDE1BE1AF74CD02BDD781388F39A189F6583075A57
  A5B21E1A5E93AD170C3767B543BFCC152E326B768D98BDDD403FCAC07EA395A019E645065B0DD8
  DDAD3398299AABE61D20D85E99FB81C63C15212B496A3E23F64F40ABE60BD8527F85A7890BB7C1
  A31F9FAD5776CBF852DDF9099630A0B110DD1FDB87FA074EC5493BB2188940F2979A01C1463ADE
  B688A3C3339293B0E1EA7FEB5203335D2558EBB8BDB65F13DC2EB8EDD6C2784D902D6B20135F7C
  88662991CDC91E2B9980FD68B17B62E44693984B766247A9F121A12E280AEC4D3C765F2857338C
  887102660537AE28EBC7771D402BE381E6AC75D071D6E66BD53CC02EC96851B7F6ECA7A9464834
  70F2AF182592F53FBCF7F3D0878E14BD3A7263346187FB3250F17266F11062BDE774AA3997E810
  2BA9C7BC37A0B69DCD788070725DE7D8DDE804B3B538024F2D67DF7B9E009A20C23FFA5B36CEF1
  F23D7A12F667A1750BBF2B222C8ED82498A9C644AAE7AC259840F3881747F2B4EADE7D961E74EE
  A17863B740E1A672F270972873EF3BCDA4294E7008AE3F470A89159005431D9CBD1BDEB0B34202
  41D418687BD044B9DEA09F4801BF1193B10A6B96478C938AA67CBE3580187F2CC2604912BE6AB1
  CC9D10E15DD2D02C55C6EF824E4E8DCD1C1F92871AAE4A33455F15D71B4359E15CFB29F8FFB1FD
  F088978B92B436A8F42CF8061DC98694A7627EA06872DD24FD5F6CAE4A09106B82AF6D0A4F131C
  1D25A062649FE8B6FA16929384D4C15C301875B05B78481391A497DEF3D6E24776985E7B9D0111
  8452B33EEE084A1A5CEB8866A8E7F7016D82D0588C9EC00671DB79F22BBC904204136F2A97B27D
  B1E20A571A89312F7F1FDAE1F9AA66EEB6C7B473FEC90FFE75EDCBB53CD4F4625D3E09C79AF8A9
  08279757AC4995AB575DC4762B33B6608A8A85D5EB39C52C1CA452047ED183A031142AE061D2C1
  1C8A8FAC48B5239D27E196AD19613158C2B24BF66EF5EB040C571B67791996F18E7C5E4125B9CB
  52591132501D4E3E9A43B111BE76EC06E70867494C4DD27C137E6BE35C32CAE9CA4F5CE3934ADA
  865F18C152697C6B1CF0604517AD8C6D2AF4CC00D3E354E2D285EE2F06237C9FCB02A3A4A60157
  CCB0A0F35915569AAA64A95C7DDA00EE2718E2C6072F7E5D88A88B57021DE4FEC39C4744600073
  B2D81A668109A6516670A1F3EF78BF46518E95D02243089D89A49FDD78A8EE183594EF936F71A1
  8FB5F93318602D6496FF35FFFF79FEAE2236386F07AA84300B067A9ED4FEBF51B69FDFBB973FCA
  62125FEE4463A06B8FFCF5C662984C1CD4CADECC275709268C4FFAE774E12B617973760E369D1B
  8C79F00471310EDBB3569022BE0FAA2E9DEB12E81C40A8ED3803FF3E400933B50905F3EB231547
  157887148738845667817FEBEB00D17698DBA9D1E236D596DDF3EBDF46A3346757CC012657D0E6
  A0DC78399FF4CA83B2545CF3E374F16DB2A5DC36B3DF9AE0FAFEDAC9379F0EEA3FA175CA0E9FD6
  2E11F10369B21FAB99D721EDA9B13519822DF999B512A8061582F7C0E836112D023C4617848C2C
  6F923F8BBE27017DE7CEAB3C857F6A151BD998266DF62D7885A3C38363F5986614191D68C29877
  567B1408D4DA1C5ADA91A75A1A5CB07C7D5843CF7246233BFB323FFF495EEAF72D96A8EDD8C320
  57674536B08E76040742EAF65EB0FEE50D4B0BFC661B1ED5A436D6601A813F360BC1A6C8D8DA34
  DD1560F864868C88A4B72C95C82A0328D416EA6A2A75E5F9AE658D6239E54E7866CF8C7E37F911
  7E9D940F1A2439924EA630C310416D1A1B95C3E8BCBD0F1DA6BB3F5AC9342FAD145EDD96C4250F
  89B5B5E5F1067D4B2E2E52A182FA383AD44BC4DECA1D2074BB6EB1DFBE7DF25AF3B0271B027B11
  BF4B0F1B56E834A0667A8B30C9B61E3B44283D571A11667A4DC10F7B6E3B334764CB10357090B2
  74F7BF6B9A19ECBAEAC0A942F95F82A604C50DD71F2CFE5B1B868E69C077CDDF5C8299CA6C1816
  93AB0E43F89ADBF3BB94E2E3CFB01DE47BEC9FAA59EDC5B6D50765B6EB09995755C6074C2106A6
  FB148FB983CFE06EB4EABE827F98CF158375A7C9C745D3F7907C6952D0CBF28F5F1DDDA31A8BC5
  5A24FA35E5584F61F4ACA25773D86C46B7A042BF003086D8879505FB4E4A88B37724276E5AEE09
  FD82429814C0B601CE29F7681BB3903E64619BA57D4C7399E3BB738105C6404165D1FF2E4DB654
  272C11185886B9F9CBB94FE1D1F7CCBA6E0E4944D6C59EAB5BE7F69FDC1496A779C63391E1FA6A
  38ACD11E86F688600FE1CB3984B527FD856DA02F8F0D1D247DCFC17221139C312498ACF8D9E812
  4A64A511ACB6501EADE9F8790D4F6E9C3B42BC04C23E6AD2A6E6A54178BC38DC684B00FB549A92
  81627056F46B6836A68898211876058394D5BB263201BC69E68F050DA038B7F86EECC117C37C74
  AAB0C9C4F8B4652E2F83F0927ADB2A7BE9033255C631956DDCB17DB2FE375D79BD810AC43A2FE0
  8B51D7BA961935B3D9BBC785B0DED68D84C90D3DC3B22541C2B3C1A53DE99DA16E6EC6D1476CBF
  5514E3BCAD427C9C8875AEC591BB5E21A2CA43C14051D72C18BED73612CE5B88A8A71C114A5623
  7FEFC54583A3041A6E871C8E7DCB4CC457BAE7390DE674992EF2E3DC5ACC808CEF1B6F3D58214C
  F5024417BD901343F2F096157CE31EC0EA6CBE808C8E508E6000F01670E552DE00A4EB4D7BD254
  F840CA6EE6C75BD96E944352D9AEDEE6941CE3EE8DA3E851D811309E3B5ECC610E98DDEE262473
  3D61DB9635312259CFDA8953DF4D01A9B857DB6532CED5DEF2ADB5830ACDAC3BDC89B95834255C
  4413100B19CF49A5475C5C985F82D1C43750E933C59CBC3F92F5785EB54339CF742F44A2B4D77F
  694592CE2F926DAFE1F3D2CE52F43C16A2331E027FF3E24C102D09411B578B143582B55103247F
  7866B1B87127763EAE9BA063746B785E392ED11E8D4A6C25AE39DA7AF6F12506BF9AFCAB89D77E
  14C6757A6E806C0F1A16A0E42EECDCE19996ADEDE43E477B84E503C7ADE84B1D79EAA8C3E0D4CF
  943416B55EACF4D3E62178A29486A8F3119072820F37B204A1BD4825E758650E4B06609B867CDF
  A36E50A8236CB9FC87FD813D8E847294B5B5DD63DB7A553917D58383EAF69BD096ED658536CA9C
  B83DA967ECC467E8329EBFC450FC86C960D23ABFE0A6698287A5405F54083D5C6A949F73C05ECB
  DF521BFD0A3583CD38AD7B2324FE57958212B44EC6CBCFBE6491D5F27F91A7C68BF7AE91239BC1
  06A37D144F728A9F9452A17C3E3C81501E6198BAE958E37C9B50C1AF27C18DFC14579772F9F876
  9D1C4BA1CE86A88B1EB0D5EA9F51DC08DDEB5737ACDD58D856698795B1B3EE25E7BDAC9E50C6C3
  D6CE65FB34AF4C93A49796324B7DB4410A50680392BFA5AADF234DF2586176BC99A04FBA7E2A07
  9F5F79C7D8AD68F93B2F3B7BEAEAC1CD4E4338A9CD0203D1E04BC0FC3165FCA4103EEB71DFD119
  50547340AC83605B885C2F2B235BB1FA1F8FA0CAC2EB64615DF5C24FB2CFA2554B7FC2C5CF7440
  3C5DCEFC22C719E98553B0ECA1D08481A130FDAB6199CFD5FCBF610D4E2F51A17632270A096A70
  F1ED2345E196844CAFAB1A979FA1CBA54518AFFB507C58E86E2CCA4178172B488D7AD610B532E7
  FB106F94E90C062FFD67FDD18A72B3F2652453807901737DB8859035884D289266E402BF8F4718
  53AAB6806BE1BC39FFD97552B02BB080926F9095D56F2EC2CB04980A76F6DED32B9F879034AE2C
  A622E0E2147E33584EDEA5D003AF751255B51959956D1E27CA108C6EDA9CF5CAF53CC464986123
  B9582D0176B6689904D5744B925F12AEE17492ED3FFF048E076119FD1F8FD2A4A1B70A6369312F
  64F44664D1AC519464A0F2ADF3018B39A88AF07C52B3CCBC9DEBD9937FB2330928C1E5FF56BD73
  C4EBB943A3003E42D913C15EFE52EC17F01C7F263F795462BE605A2910CEA79C6B72495CC58F81
  CE83297B2106319EC6097C38A7394378164B7735500453974ABA5E3BE04542893AE15CD5B34AD5
  032B8D1F2AB683C743B7DD3CEA1C39A0014E9264E7655651539003A2BDC587F31B62E3BE1B7F9D
  5F134AE76949F5AA629D5A63FC239920180246EA1FF6176DD482E33AD258B155D55CD66B44A281
  723CD3CCB66A362F11E4D58F9DD006CF1651D6AFD903AF87E72544CD3725670232D7DDA8AB193D
  2C08736A49D1FAAAE861A664A9DA429772947107F2917D7E7717A4535D464D34B3C65B1E77444A
  470EACA68E4DAB122420F01F8A7D213D0041908A864CAA6A621F14C14E407F0BC5CC70CF0BC4FC
  CD2FAF8CD0C5D5FB2080010E038C0F118D762C09898686D8DBFC29CCDD46F08EFD599328101BF5
  16A5736F20ADD4AC1C150BD3BEAD585D1D362261C735F24CFBBD4B64682E34926CB04F9D31E09C
  A6335AEB3C47DE39D1600D7F62213A71C74A0F81965DC5B1B3D7227636690B882F38126D901A9C
  E418BC6D3D923FBB801761FE7B81A55DE3F2E42688246A06441FAE14F23DDB993671901F97450C
  EA6DB10B0DB13A23CE0E21C27C1CD6AB524D25EFC13DAA450FD80BBDC6376065A14D749D48EE1E
  8C83B833B510027F9C89F7319B1509B699162B7F9C5B8A739ACC1006639C297C23B8A66213F47E
  A873F87F1CC19F581EC026DE584BC049C49BDCFE89C001504F41DE17D84F973826886F4E5246BF
  FB87ADF0726CEC7A4F167E0384B91526894C2D0090D38EAB1461C607EF359E74628854DEE1AEC0
  5DA8945995A3D68671E8BDD9946C222294B0C4680EF2FDC224A0C7AFA9E5466C7B1457CE3DC7B8
  7B0C3517DB833EDD302BACF3C37BAE4617BA6206D5D1C77DD53547A7BBE0C948D217246C294C70
  5B254A960CC5C2F5E35120036356D760452887237D70D1E2F3D6B64A0171FC578859ABB62C1444
  D3FE0719DD85E7A8812F7A5C0B8BEA7207E31C7C55280348172DC5EB275898044C00C2D92545A3
  362F7B42E073C75BF179D13B0BE76B4836D069FE01C287B367D02DDCEC9412C2FBEC3D4B327A10
  76586750C8994ACE0DE17327B01F74A3813D3EF9FBB9C9C5414F2E9CC1DD9D06297D174DFD2DE9
  CE7BC95F580B4F3F26832AEE535AC16A087A012DE47BCC692B7C05B6015CEE221323F7EAA191EB
  86FA94DBEACF0996A8C8D013301A7BF64C2436135C3CCF2294B1E2246184261B9A6BD2F4B98A91
  E41EEF9BD07018F5CB9B0060AA76651CE1405E08E455BA689CD2E6A3127007BB4B311C23804689
  ECF60DA7972373D96525042C360F5DE09DCFF940E72CD5DC0A9154B631AC1F2E38AA2B8551BBC9
  AD5CB74CD86F5388AA75B6D92B1E37A4F875A6714908377D78BC96DFAB7EBE047BE4D42C416FDE
  50A33FCA9E65600A2C7A7575D6059082C3FA0DF3C31E82D3FA3969CE43965EA49F0663CF2A2C71
  EE4AD5C7D853B52B6AA0F41AB3D47E510D8BF64AFB1E8B8F782C98CD287DEB9AFED39335520B72
  B8B5CFE2A6BB7C1AB0EB746ECF6F7AF86C183612B0DCD583FAC678D9602957E61C187F39B3A654
  B20C792BDA9D81FA974A9E8864C1A86F9AB72918FEBFE47516299AE1E9B27F46F3C2959C5AAAD0
  A5C3C3065114E89956F5FA36E16174470DB8DB2FE08396EA5ED7D50AF989D8D1433E0DE7115A41
  0115ADE0BA74E8A4DBCE3D9B87CA767AE380280D51FEA9A0F623AB175C3462B9482DF6D0BE8F8D
  420782DBA63D5F43966A88E3752B270048EAFE8BA291E70B8BDF8FB433A5A57C669B4F7D35C8D7
  3C52700DEFBD4CD42E1F2C8E442D19C030CB35AD66AEF7EF0233BB4E08FCB48C872399AF859938
  A02BE5F96391FC64E297AC790D70302D51979CF5459F4DF2A41B27592D0538DBAC394C37ECF0E2
  C116D0A2A2C6ADAB5B0542F86CE5436CF989A869566ADE4D764E423BE583ACB1278C7ED362C023
  F8AC485529006A1893DD5A98D050565543ED6A4F3B03092E27E8913765E5DEC1FFFBA80982340D
  AAADCA7A95A24EB5F392DA99FE3E6C34948DD4CBC469BF2B53A50F162D05963D73E79EC88A9D94
  052099431793CF8A0CCAEA5C95B17460616A13927532043BE9FA79FE0231D57FE861FC0D32DF90
  E9F3EA5D028E06281618E984A169F5006756341C1B2CCB9BB5C6CBD2EDF71A5244EE646DBECD26
  0F547B8CF03F2689EB7FADE56D3643AB8DC7B89A5194419818FB67DD5C66E7866EBB012C365E27
  BD4BEF4A6FA8ABE429BEE38715AF35AA3F2751E0FD980DCF6AF94A8CD6A7694B6FA71F2FC2FE61
  87884D029EA7BB951EC1FEC36C100395943C8A040E5F1325EF8EB668B08999F0431C2B36761FFA
  F6E21790E51113526B92DF76AB22B9761B11A0A6673C8E093ADBEFB1B18FB7CF80F43D1D38F176
  78597B4F6390764D60A1C797DC0926DD01B7D09448C671FA5B51B93A58640EEB62E80C4F3810E9
  9AC99950D8AE3189152BA0AC7D8FA8431DFF1EA3CD4FD07B272A563E67C3FDC3188BD621BCF0BE
  40AEE192A02BA5EC36C5A45E1E16097F4284B74AFCD8690B24ED8C14D25C7EDA7CB639043A2317
  8A58094733FE73887F7FBBC995150B6E54F5CADE65338A12A0F3824984F5B16AA0CBDFF330A408
  7116EFC179DD03CDFC2312EF49FCD501732875A961DFA75DF2AFEC0711DD8A215C69B9EFDE095E
  B03261C63C88B6C66C3DBEDA2223420713192FC38AF0DD9C4E42F3BAD9E1306AC8471AFAB8951C
  10CC3FA51E096AF28D73FAC5CFAF410F83EDC08F7AF86A280A23367743FECA7106EE0D460261C9
  AEDE826D3C1B16DBE4C0DE0EFF9F744CA26246DFF950B0FD6F14602503F58A4F3B776D94E3CF47
  CDA03C04D31E71BD0281C2A66F2D8021A5EB2500A70D73B55519AAB87DFD94143A623FB250D0CD
  31B38D8ED2C5EE5C5A78DB0220CC5A081003F68D8367F350115FDB24F2A191AFE85B9F8C9DA654
  84C3FDC994889F42D561638404CAF88B831E65D6D2623AA8E82A050DA727F886EAA7DBC4012ACA
  51FB15CC48016AAF9F82012ECC6B3A4B5C9F628795858DB725B8397722749C1BF0682683A8CD6C
  55185A30C3A219136C8530CC32C8E57CD3F66677549EF3A9C58B036C2CE21EA3AED58900230176
  8FA1CFEE2A5AF414A09F5DC3CA77C70AC15720BA08B5C498A5C6F6C521C36475DB6E7677819295
  AEEF95E2FC891E1C45CE729C8A1032E02201C1E112DBD74C3203E2FBE389322D266DC2EE15519D
  1E7F0907C615F228733D2427B55C0D3735AF25A15F0EB0A7F3374755454869CF8D825C98B8EFA2
  45A44FA726AC7FDCCA1B8585A6EE64897643137B6568C0D6EC985902C870783F2602D570176590
  0E79FC7BC5A40DC29E96FE65575CC63DF1E4F39425B0EC10CC37045A0B5FAED247C17EF9180492
  4C888A39DAA1D8F28F2A682A9A522D5B8AE6668C02E9E04E2FDD936E2A0CAD1DAC3CCD6E36F0AC
  1D26F9BB256A7ABDD0B532B7B487C1BCB93A6114821A1FC85EA6DAE4FA889F555680A9EB893B2B
  8E60F99734383EA0605A48A2BEA0752D0C7A42C36D0EC252A522E55361BE4409BEDBBC55004289
  ACEFC8E11CC989609521CF8F55612F25030C5A388340FCCA791F1E4C14F2AE3333581B0D81911A
  A06D22E43A5CD564E81EFC098F3D8DCD107DC84B27B6CAADBF6CEB735783CF453943F60897660C
  818E1457017A56512DAD80C6485F6749724B83DDDEEE0DC58A0FFF9EC71F0FCCD93DE9B2DF070C
  766CF1CD3062962CF1AE2299ECD90924A8D7C48641A0764D000DBCFCBEA3205DDFF6465C146EB2
  2E99078EA6CB6F62D687BD731E56EE7081570935FB43F39FEEE8F86EF910FF0B944CEA878990AC
  F46C486B976D8DFE8905BAC6F2B01C6954166F5086C44804C7FF640D689697E1BF6ECD2D6FF20B
  1C695C96C78B923630B8C2064F4CF574249BD8124985ECC0D762ED0BFB52E2042EB900010DAB18
  135274109FA10157710FF3B695FDA0211F2D7E4CF7EA38DBED585FD4A5A6D4FFF460FA2C22AB15
  052D40EF60A35F36265642502FD0C37A2681301C86081A4016E981E3F6A184A5133F4A196F35D6
  23440CFDEA99F58C51A974C15A3A6B96EFCA25D17B0081E6441AB2EDFA2548565B9E71642290BD
  7C1A7077DCB34616A8FFF35EE4EAE3627D2F1DAF52023E17B184EE4F74C2B6FBA63D21FA3433F1
  44B521564B81FC2B20D64236DE7FFC097835AC3F9E32362F04E3061DF88B6A9901C31840E31BC2
  C590706B4B734416543C3B2477E80DC0F4FE95187B36E5EBE02075350FFF86486C485443D48DCD
  1FF4AF1862403011EA630A04034E0A34AA7DCD1926A2A4A1B5160B78B313445161F0A5BA656D0B
  69A25F9CA32BADC2AB0A5076D4C6357C3903A4D45741D44A5E4000F85102FEFF45137595C438B2
  8FC2A5E5EC2A9DF3B48B08A99EC2EA715DE23C37AA603D9FC4FD76AAB1A3583263876544F7AFCB
  9B699CAA51755B1C4871A8746FFB6183339AD853C28CE7207E772F3286F801908795BD8C701030
  0AF15345F574684D87807A8D0BF7B015030E92116E5A09CDB315460BC3B598D59ED7F3B551C1F7
  C96152DFF7BC8FD356B2E391B0CB9270FAFB986E11C8EA2350B672BD6AA36F0967F57DFE98CEBF
  A9ABFBC7B5D2EEEE99539951699BF9EDC5CF21B4E7C66A92E1C48A0220A6DE1DC08435BE94B7EE
  92AD6D4822963FFF8156E9EDF524132C17FD236E35580DD6D81A201BF80F2D893C9D56B536F4CD
  2C063C0AA735CE8441017B49602753B776A28BA50E3342681C66A881BAED494C31D0657049E479
  1C0B18F7190B1CD4FFBD0A045C9704CAEA9292FBA6B62CFA2E5F8674BB14AF84CBCA42FF3DB5CB
  B5A37F20926B170667111616309E2B0A4494AB2F628C9FC0D626F02CC9AA894CD2E6C4FBE40727
  37168091AB9536E3EE6D0D73F551E30538D7BD7F914D9E816044B3C37BB37B22F0221AD5F715B6
  F1288D7E4DF2FE4DAF4C65D097B2A757F0EA97565B8437B42F866FCC1B6EFD2EFDE8AE9D88814B
  5BBDBABAAFB6067F1382ED5A59C803BE5A8F37DDA199177E1AD0EAA48E1249288B65D281DEB21C
  051FBEA7165AE5EE8DA9C35896B5008A683C96ACB41F891DAF6B07ABD8F8CE8C0B60F0244D4F47
  FC30F84AD079795E6C9CD35D5255C60E8E0FF736EE58BBBAC019DDF370992F98D0E595FA92E911
  7659B7667EBC12D2B01158E78231E68936AC8003A1B60B20A85E89F62546110E09A7514B447C74
  447D6C7707FEDA3636F3B00C470CE0D4A23336C56BB8B3532C3D7B9D7EE4A94684DD78B7462634
  1F9683AD4D80A358B684F522E84975D1396F0163A4858FA2C175421977E62EB51E7A733758B76C
  6F378BF235860E808D90433BFFDE01EF094803CDBE5853D6B7A4B30A85E83FEF5F4353FC1F8143
  E13A2556002169F86049446D92C54856D25A90F270EF963627BC7890A0156C21F3A2AFBDC45BD0
  0C7A4BCE6C04BBE19032C9CF72E26395D9A31E3C5DBD061C7108283830D4CB0CEE7D6DEFC0D642
  DE38333BB72132C9E956FD58DF4B48C74BAE5D8E9760ABEA97520994A6F98C42C01760011B19B9
  E3DC79789A9BE75052477C96F781D309C7CA44939A3D0A458EF25D5475F99380492E508CC36D4A
  2BB1AF87B8D7B062750D8FC1F87C774A4CD5EDFA0A7A04E7F9F273F90317E2B0174C398F3E583F
  085AB4E582008470352743572A76A6EAAA2DE3D0FB2517FAA832EEF087721D2092FA43C6165DAB
  F090F59BF9E1DF2EA4717211285B51C7CECF3EDB98B4F417CA0156888F4A95DE67B73219256EF5
  4F553038D4DBDC64DF7B704F2B8EA7A36EA5A4670E3A12CE6E2686DB8EE651C6F5F30871835304
  54CADA03630DBAB407B45723846C399A2E47C9F7EAC95C86F4AD2119D49B616D28205CB8817E47
  4A91CCB58629BC9B2DE0A143E3EA70DE2429FF83A2972ADF4B8CEE0DBF0B22BF47AAE643627DAA
  565FF473C4F1F7BDFD8D320ECE472352BF037152855FB9046705D8319D78C3E8D0D6A095565C4D
  AEB2C2A621EF81616FEA46CF8B51D0B23A9A47A9B6A7046EC2F52E1A9F1EA612576E6B026CDE02
  9CB1A0168DDE4A729DDBDB7D9DDD253500C644E0D4D680F37A079319BDEBFC9C247C675E8202D2
  B09669E3D90F6F2DFC7C6899E8FC9E48167D291BA9D0B33BA0F1F331AB6578734F2A4D27B9BE40
  93C1A1351F950E99A805E2F16C900C61B7A1FCB3B3B66F66C5D07402159BCDBD15F30C59917316
  255B77E0EBAA3B4F81D5AED438B32BF815C94772FDDA123EA4BDF29081422CA934A8BEFBA9FAC9
  3EBA6194265AC59FBE0B5BB3BB056E96055A961D5629D0CA88EE0A672B9946542CA1AE83F1BAD5
  BEEC57336E491E8067EF260EB8BDE634E8163D2A263BC815968DF9EB7770486519C13207E3ADA0
  09A7580055D7E04FB72AE364FA5144122CD7A50AAF1870571A0A7F19B52805956C78062B17FB71
  58A3193F7CEEA96A18A05F6AE2ED484820C402BD0DFDFAEA48238E37F428371FEF79A1B93F1F2B
  BC02F2FDAA126D8904E6E4CEEEADD7F6ED036A2E7D1B6F5DA7F598FDCC7AC7BB175DEC45D4FCDC
  4A86E2E3A9A51D00B33945DC7E38771532F3A75B9017AEBE1FDD745356EEB54C1C310EF6C1B85D
  B0D09B0C61BE3AAB080B58E279383D8627966802686283B507143022BA281165BD9955C833B1FC
  69A3A2071A5F5D664A2E7E9DBDC85B64A48684A2DC6EE9913B5633A98F19A546DCA6727361010F
  217E60ACD1946D0D1A2B0A31A6103D8E7438FAF554341192E2B33FC22C57757680B0C44147AA09
  27CB41E464E94E0E0DD8EBED1873F9FDCA312A4ABF1464822DE5E6CA723B8B2F3B23B7368B1DA2
  DADE8C2B58EF71B068BEBA33DED1B278D3B81D8AD44DFBAB72D4AADBCAC1D01FFA901CC3FDC56D
  DBEF40BDEC4BEAB64916F9CFDF21F5B118433B672BE308267F1A8AAE85EF280834FF8FC6138A2C
  41773FBA3761250AF744BA0686B6BE8DF369748CB2A30EC33448ACB1A704D1BA01C2365FB1207E
  98DEFDCC61CDA54B120A74061F8B3244D12F6B31BEFBE2AC4629E6B8009C8239D427DB2AC9CC5F
  70F54870D58C286C8DCE0DE89B6E2D0B6319AD1A10D91F13C8FE61D7A3B2E1EA19E38F12733BF5
  3732B4F3FC6A8E12FB01C0F03C38F645E81E64E163B4C3E3DB7B6DE0321E78726C0775E3AF0E65
  54B037B3192ABF1D688812BBBD4E643301BFBDFE27DE4C9CED8D9A705C94A22F599CD4AB72D512
  423B3D4396B42C901C42B958C46882672449440F0C78BB33236860770B96008D7863D374D05C79
  B221B20329064613A7B7FE1828E5A80EC45C64EB08563574F992B5673E53456CA3E8D4FDB81E15
  6A83869BA95C8A6E8EAB804438EB5BC5B6B73FD493E18E4C95E217B847E422A947D9ADB14FF0D2
  066F4325A50BA07F68802D86D51653B264832B4D6102107FE04994F8DB0464C37F3B0DC87D45AD
  FCBF95B1BB20620F07AE420AA66D7585EE84A3AB73FC8F1E5FAB3CF2FF384DA9669DA91B0132D6
  9BCA7BC21EB7AFD82902CCD9F642849B0AB620A90B3B57554A57C17EEF51A8312F428022D5EBE0
  F23B52C06A7C3F17D4BC56700C6701F2E003BD1343B416AE36CBE6D6D062EACAE4569FD55B59D1
  55EB2E0801D8C8212113A9BB7BA5BF4AE89D434B2B838C911D84540CAE1E2BC95DD28A278F3570
  404D91D3C18BE468E6F54BA6B84D6307A2DD5587DAD230AB2383E6957E9AC1A75EC6DB0835F248
  C9EE480318E1BFB00AB0ECBB1F160300E0B6B2C562D1B856F549275F98FE1480B9409A26BB55DD
  F5E67AEF16288B3F4C9FEA584A8AA61664B73BEE0A62A5D8BABF1844F97F7ABFB73B3CD19025F9
  FE7C089B9630BF55C22DD14849FB3543122CFB669B51533C29F78E51F53C494B2201CD5FDEA488
  F259C54F7912E765360A0D143B59F49B935006066209D11FF9F9541F11AE4F7C70ECC4FF78FE8E
  0205E1F97D90FAAAD7D12E239C009CB97B1AA7F707B7D018F12563CFF65AC2FB14D7EA63901062
  2D5E3D2A74CB8EFBCA34DB240D10C9FC1F2EDCD48CE098AF1FC01C3FB49A27957405DA89307A1E
  A877E1D4B0AFC98CE0235AC2C21D2D73B5DBAC68A0DD0796ACDA76A1928412EEA5053F1E2EC78C
  65D44277C258A9B211ECB8A3D49C34C89ADA99482ADD3FCF5AC7495AC483F92CC8074AF6B57972
  6B497D5A437E7D37B4CC7913FE23047D886152C041AE3B5D70063649C8AA7335AD3BFC105B9140
  C5C4BEF7DDA3156EB8841A07064AA2A0EA5E7E6828A66CB2284A6D5D4189B6DF9BE74555B881B6
  F826917B2D09DF633FCAFA52B6E3A8B0E670623AE825A746BB7EA9EF3F52EE05F0A7E870A61401
  96D50B0FE206436714B74DC7B3673D9356F885DAA7F79A73676912B84579F0F4978F327CCBE063
  D09D22DB01222AFB4434045C90A17D0B526657958070F7A6AB555961DB6D78F479331E37305D5A
  2072AE199C9C31B12DD61D10E31889E6DE5BFDBB51C90548BF7F501BD33DD33B5F679F8E846007
  BE09C39050AAF03464A57CA70FD083E2EDC2BAF5DD3E0CB375DD3A2782898273518D7AE09B5AFE
  27F2560FD76891282F7B68909C6FB9F549AB9B4E664CA259E0652E66CC58C250D285FD2535660D
  7C9F4EDCFD874F4AFDC67D1B909E0576D159DE69FBB4DA307FE37CCB01E7B7C6682872FAFFD590
  2F31BAC68E68CB3A03BB824B5F35616EC0EB43427BE7B3976906B6E72F9D70B8D69758D4D4ED1B
  D9AB405B0E9E32400EB6C5E7FB006997D5AC5265FB5571DE4D1E3E3123A725F37153C874439407
  8D1786B9C246339903DF1855649FF1B97C919A818A3C986AEF298F2C901F47C44E726BCDD16ADA
  2DE467F348F273364242E82E6C702C771B8B0612380BBDBE29760F190EA7EF8F1C2B9991B701DC
  2D1838AA8282856F3EFCEA274718A393B129C768D50D71B5849ECA68CB1316FA6D1B83CA9FFBAE
  C468178396258E077393F0EA6EFD239C554A72252290EC1CED243062B1C421473185D4E07FFBA4
  11A2AA16A0A64AA3550F97D778BD7FDA6962BDA0BD96F359ECEEDDA3506249FD0795EAD1B4A8D7
  68BFA198955F360BD1F57ED9D936E1A765EB2A13FD7392874D1AFB461600D077BEA83175F7BC4D
  732334CE6F0C8556414C35E3A8F2626ECD852399DFB783520F91807822F34BF1C99AC5A89594E5
  5CE25CA47D9AB411D74C489842C85109C12AB25B0105F6D816CD963AB532323F9239CB3861BA22
  B11139F35A4E9B843D2D9B832DC81CEBBB06405B0F6F19832E97EBD56B58739C83D2B015CED279
  276C9EAC0C1D92B10986ACB410A46D0C3BD16B34B4A48C8E2D5E47461959DB03D0F2D76A375535
  AE8818EAEDEC1EEAD181B1930C5828751FD1002A18087A03D2874E20EB7C49A02901C92973C235
  0901DBD7F2965BB17ED78F3CD12568AF15BF04C9D366380DC3C184A97E4A72E9F8CC02CFB7EE7F
  4956CA929A6E32AA2B2807AF372894AF2E9C37A372F51D9E45E68601FF6F06524210F0567B779C
  976618A30B59D269B808741DDA7B003659072374691101D3D09D505C60ACBAF7C122BF8FD6EAD5
  7328E60B69168080719B6DBFBE65A31C27FA3C456F3CFF4BECD6B32048CB20BE477BFD3371A014
  0C22AEFE9B13B0C7189ABFB43699E43E5B2D4AD7316012F759EE6CD498284C81AA5ABA819CF9F4
  C833C7F62B2AE7794FE888F0CE0F0D7FA21A6C6A8CDB1AAD802FE6D85777ADB6DC1CC95587F2FD
  A84AC265A1849F66873F14BE84753C499562579F2361751FB7AC809107F02CD3D953E47EEFEEDD
  38178FDA90A2FD01B7FAE52395B970AB7B4F923175FAE29828CFDD824E21CE9FCCBDB9DF984B1B
  F640D8995C1D32DC65AF28A899C5E97B828885704E68A0EAF6058191C1F6D7C6687F2019DE8A4F
  B5F65A0469BD823E77E6EF6DF177517AC774DFE568923C474C9E7C5FCEAA7EC1241960093ADC9F
  3ECEFA7B3344F5E064B8FF023E9E1DC18566CB1FF960DFBE470F4222210C5A41EC3E8D4C56CF9C
  B99E68CFB0A26D9D698DBBE95D407FBC77F9AB3E33B94DDD2299CBE40B0F208672AAFBC36ABF07
  F39ECEECE3A2AE0EDA34A78CB38993668B60909FF1A9FB10EE7416D9A16A7711B76B7BA03D010D
  AE04581FE01A379536E4A7C913B741E8A6135B6398300B22B8E07D3B14A93BA76195AC03A1EB1F
  E0FE1DCCCD048D16294F365178FA853BF76E7B92207DF27A4D1EE5873C9A40EBB42E18CB7DE812
  1BA54A479EC96A727EE581DE55F46F536CD947FED706B0C2CBCB2ED4C2399FC8D4B649CA5CB8DD
  6B3D8AD64D6BB395D945E133E24BA57377E4B82B77C729AC7D5EE9153B2E0C1AF4014CDA86476F
  EAF1E56B7D86421814071886EE30DD8E6EF3F31B0B179367F745A5291CC6300A535E82912E84B5
  27A283DD1363C8D6B52CB2FC2FEE59D9509395A38A46F235A1B433843A87C2F07A66BC120066AE
  CD6BC0936806051001BEED1A1359E626D77A9782412197DE172BA23D071E930D13E0DBCF59C3E6
  7967829F6C90B500D2D76AE3FB5E6C9240EEE88AFDE5F2CCB04B036B7C9FAAF679E65C8CC7C013
  339B56BE285D5F985408DAC02AEF10A865ED1FD34CFC03F087C175509B2EEFB3744C580B31B097
  328F360E99A480FBD7A877DDBE758E65749A753ED8801F6450488BB80C5303B05011EF5C6820F5
  008B71DA3E62761B559843C59ABB7E95E413688C40903538F452430B65BC1B9CFDC77051BAAE60
  9C413E0370E64B57C59E7E02B7B07768DA84326221C61E8ADC0B8F7E3B3F02897330F8397BA319
  94A075119999893505F5B665A93498E98C78EFA8AB7B267B99C7E070CE2D26929052498BE336BC
  EE7A81FD448572E302D1779B413A8AAAFC1D005461E3DD63B64ED694CEA82CA9618421FF465B84
  69739A5F2BDD2F80FDCC64A2A6B77B164E8F0490A3FE7197971C0E27BD1459C7CB756B5A3460DB
  F914C8736D7FD74A4371741F670840C7C154D70EBABB2B040DC864483CBA1AE8B630F38699BE8C
  0316BF5E25E81ACE6482B084E70F000D6121F280437EA0E43B3F14B5052A61BF06C3974E753FF7
  557E11F70D70FE2965238AF15DE3A4A9684271358E81347ACDE824480D51006211840661D48E0B
  758662086C5688065A7C5C03217124073495E3E7FED72383FCB8AA246F29739D3A83DAAF8CB964
  A023DFD131F022123BFCC782CC237CD7C8C0611AE1D8FD8CC15211FAEE13D69487F99695FC32FA
  2D2D0EEFA3671F58BE5A10517F787FFBA050B9410D0DE4E4AC2F671A23F1A3730F9E53CE1F073F
  F6D824FD4B742B8509CEC73A8BC3D7901981E5C4606E5DF31CC4208235FA0B0ED784D1B47172F5
  B8BE1AE460FE145F3DAD2835161C29694D087487DB7A23F81A21862609E7567CD922BC4390EB1A
  698F0719AB66EA001E88F9717765164FF582E75B934CF66EBC1921A00DFE652940500C4C58B89D
  B6A3485AD807B9053424966833847B9D9BB309530A81E1EA8180253E108E84EE70FFFE81880870
  EF69908DF92A48030BF62403067494C09D98A896240E848E3DC408FC45D237679F8C715BE9C031
  317DB88A8C1E3985580BEE4B9C1D2094CBB62FE6A5D6C5A37C38F80A410D267D2D0BD502F61C89
  E937C67F142AE87FDB1353CDF29106F432F9DA2410F69BC1B2A9F2F6E56F3BED2C37BAAC4A95BE
  7746A98BD9ADF3F42E81B77C72ABA739195A18852145964A18EEE242F1DB858FB978AEDDEDB5A0
  C735F127E6F26B414672D727FD01754D1F4E6F1F763F6F14380D83BF01BFC4E525A510579C5AB7
  3040F7EFB1BA7E0AF11D81483E295C467F57600D9CEB1C9036513A51DD2D23FE5B461B9A6118F6
  8B506BDD1357FDDB254DCBD2F288B4DE89C305E02B654EF11AA0A8DE529B093BDF75BBF495A574
  FE2273C98036E3D990956C3FB832D8A52E848645F1F3703A907BDFE522A0E40A46F62C661C0B75
  E9266C9DADD811EC8ED6D6751F1DFE4E327CDCB0B3962C6A2B6D5AA780A0FDE819C1870111F788
  018DD53F1A7728B430EAF1D959B3E1A51AF26CCFD26EAE9C4083AAAB283D1BDF94DBFE17255B53
  2EAAFE1A0B9FB9535C3A7612CED818685447D04AD983C299BE0FF10121CB167244AF833BFA84A5
  5853718D75FD51F83EEBB99840701579C8565588C0FB4291B9B5CDDF19AF7B1C6793D74B0DC80E
  468AB356715265055050F4AB55567C69BAFDD7E617E935BF6682F9E2C4CC243244CC2472670174
  6BA3E743A9603C43095BB8E6D98600717D452C5DADB237036889C9778F7BB8BB16D6C27B9D8447
  8E6905B517BBF627455CC21A52452D4D97BCE4CC389922DED1E950C66F833CA1EC4B135CA504A1
  F120995338D0C3A9A81BFC81D63FF9E6C53E4EF6A07C511214F5E4D7BB9DD6032454542AB649F7
  6FF1DA38FFF98F9D104F5E038C2074C2C4D972CF84D813C5D5136AFD204D10CBF2B5865040C03B
  1889ADFD00C8AE361254856476B81FF8704C94D6EDCE7E9C644AD69791D51978F1E18F7D43F320
  00F61B06835233F9EC73AA1EFBB134583C0B2DE39837A5A3B652829CE3E3C4FC29C17C37925658
  CAEEF53D597C675E609C19CB59A05224F47C77D799A7EC5BE0F8EE94271AB4E0B2C55737FE5E35
  6927DFAF2E79F815C2FCB98C194F27612684E4C335B8A95FD79EA9A5C59FCB761A0D85C3D1FE24
  1863FADCB7B832FFF9B3B892A1EE1F00BCBB5242035E40D678F8552AB46105370B5DDC49D30FF1
  E38C3878102499EA9789A5E17670117CD4448E5A04DA68E66705C1B5EFC74B50AB556700834255
  29029CA07D645BEF30A0B14E17398D5BF4FE90A819EA00B07FBDC8454F90220386799C89D3F556
  BD6B0DF31CE7EB6D637BAC5ECEF42D4CBE437CA8C3E9750CFD597CD5A66119AE45DE3418702EB4
  7CD7ECC900E2183E0D3C9C139B8A7551B9D5BDBB4AB17EED765D1CABFA4B3F5134378B30FDF696
  FE060B6D823A7F6D35B866527610B29B5E69D5711FC834E2C60C11857888EBE2AA9DCDB985AD5E
  44007AEB89E11DA08F666B0494ABBEE4C0348692A6A9902BB7E4D1474E48A410928D2155986968
  2B48BAAC10090F2F8585D46BB13612220241763766433A7F23599A462C5E39AEB8DB71299DC8EF
  A268EE3B0B8A522B5A08619483AAD6A04CF107E268DA6751AB04954241CAB87F679FCB04140D1A
  7B4E6EB6A75B76525A86A1E527CE56C546E6DE3F6C42C171537C8C86B046AFA338AA9A76C97FB1
  E7BFB161FA57EE38B3A75C23FDC4B49BBA3C34E3490A0A040E5569E2456AE40D28946784408E6F
  1C75D8BF81319E3D3A946B2867E884B58DCC97F846674AC93F2570126480A0932D1CC3DCB94EC6
  E91AE1DC4C442A56B15BFC0B22AE5E86A403CB8A2E7EAAAC996DA8F8DA5F7D145830C06A7B50E9
  913A8DAF63D596871C232EBAABFD6CBAFC9ADBEDED8C7662EB39BD306A9E38C9CF9F71FD718FAE
  D88B4409E64AFF7B6E07EAD81D3A50712193F9CC234303C55CFDFFB0A3A7829942C4FC55A89697
  79961AC53CF1FB2566A8510AD810989D6CF9067A4D72B20C0EB1E8F440394B71A083F864DEA2B0
  476B807459AEB77D0DC68454F226D04C3D4BEE54C9D1F7F9013A8AE01E37435CB90472F35786E6
  4FBB0771BDB2FCE0AD057F907DEDF18A9D8706A48A288D82A421D126DB42111C7BCA2333C7BA91
  0F79B673AC27DC2B1C0452621F0BC8EAF88C7EDDEE8EA88A31B3BD7AE509D68959102E9FF3CFA3
  CFE81BEDBCCDA6A742C3107D57FDC93D4EFB328C80A5F652B4C5B607A7D3685DA5FDD54F2F0D26
  F2B3D719858E3E902B7FB49E06B1B5DC7A3A3C2CE5DDC471816C739AFE8C5A617F6A109D6D412A
  299B78AF99707A66D58EC406155BF9E1340B0CDC7ECFB4FF1AD3DB0A0D0519FBB5EC6513F98011
  DE0C37C65E97CB7CC6D68C224B1D4AD96EA971270BC9C2306D0FBD61F579DB318289EDCCB6530C
  36834B3960DF38BCD0B7F7239E84A0A64EC64C1C6CCC087AB6858708687C8D008316863917306A
  9ECFBBF7261FCAE77E10AA18112EF3C463CD86A6B8CCBFF9E497C94D142F4441CD30DF0777A115
  6E396EE054B0C30021F3DD9B5CDAEC67564264F3AA2F12A5900F8DAD85542EAE0344B086A6F17D
  28C23FD9CA2FFB0E747B8F7B47AE99469E5AE89BC8D3AF806C37D3EBEE79828CEF262293650372
  83C96428B1A468653C1EC96A31FDE279681371C263AB5A18F0EA86E47111EF072C72AECAC25841
  3FD8E828F5CA38CC3FFFB847148C68DCCA9051CCC5A971C83F30987B874C66424FB910B5588196
  2671960A7A95A0D535D007980A56E5AB2A2CD05E994B2C71556F38964161D4965275E6712338C6
  14D4846FD86BFFAB7AE8D2BE1C58C259D46F7CD47DB33135B37E2CFFA757C976F8617B6BB007B4
  EC39B277958616DAD13C0C9FEFF88F4B0AE1DAF877D71081474DFA48F6F2577340A85EF71C4CD6
  8665D355229E84E308D762243BC0ED385F18AC14EB66FD31AB6F24FD75609F389B07C02FAA2F37
  6A8897C2869F0B4CF1607DE38FD41CFF171B0D4B39CE2A28B2C395A7FCE3E04F0D7AE6F0BB5D23
  9E620DDE79B2CFD5BDCB5540BBF3D2F7C5ABB1F4C376DB2D16BE823DEC48F64BF928EB89F1DFFB
  22845BF97740C01D56B321312F26CE890CFF8985D163F406268AE4318B103125089319287FB192
  3F9FAA877DC3ED863861ADCFCDAE7618FAFFAB358111DE8420A5B6E59CE6A1B487A5EDB28FA813
  6FC573077B8F36FB0017E3119B56023B2E0E0F28F4423C11A264B9BEA5E6446AF7E9099B14FECD
  B29A0F8884A8828087A60CFB69FBF6334C5C6E9D754EDD403BFE0075961AFF6E9745A047F6710E
  4D94E2C43318E6ED0AA680B707C768588A6716660CB66352C8F6E4B8009BB761611D755E72234B
  45BD35D84F57559441A571399830CE485008C2CD35C2F50BE38DE7443FE1862756E6577626E13F
  38B0CFB5E904C6A5117E36A7AEA41A0BDACC25B0DCA61381AAE1359A98D398B8C04ED3060F9E69
  A81640BEE6D2D97C3003069B763C1A024F476C8215576763F4C8EA61D5182AA3E34B03E814C8AA
  18A950C0F9F5E7212BB0823A697709DA6433E9E0FC8D86FFBCE94D8B0E249A605E4F3B38FC049F
  BBF400E9A320ECBE127AC50CAA9FB1F5AC1207A9E6E7BF44DC94D008709E696711B87EF745E17A
  8D5B38611D83E5E26D8720EEDF4AD6455E8794326E3DCCB04167935CB73984C72DCD036B24190F
  2B4FA6896E01B01777DC6032C7017132829FE9B370C49C25620600A999F87F1A7C7790D047D960
  4EC7A0746BFD0D85E02A626D15130921699A33ED39D18634F56FC81402E589E6644D605412E53A
  FB366D5A9977E2204FF7DC949FB7587E76950F0127CEFF8F3CADACD67D3D3B4430E375E80F3E17
  9C31E69D33F2034D62CEF97112A2230A4EAADCA36C7157C4894245C6D60753AAACEA6149F5646D
  BEA6DF57918E3CE20A184D65C22EF37E6C1C7B61845743CF8C52DE42D1216C22870C0E7AA2F5C1
  81F7A15DDC57020A30AFF8D4F6462B38DA7E72C1E29021F0277235F8A199089B5365E7E67E5B0A
  3FA6C22091BA0E96ECF49D7161D134B7FD1701350FBB2F99B54A51B418B567B5647D7F9AD7B4EE
  5DD670DF8469FC18774E8AB4D6EF4B4F5751CF01220AFA5C3DEFA5CFCC29F7C181B667FB9C8632
  5BF4BAC10AF238AB2D2A744A509427F654F9B85FC908FDDA60B31CC92E837A78D38684C84DF38B
  F014430BC49A304457B2E7D9B739B0902D6BEA0492D6C143B7DCB462BDA7DF0C54C3C76A52E355
  4F3A1749656D1520121948102ADE605E6597936D7CCCA51AB7D80A4DAAA09992B905A491099AC7
  120FEDA88CA561A199CAF3ECD6AEC7B99994A8416EEFBBF9A1BDCEC671A6B3FF8DEC59C9DFD795
  DDB249247B918BE637A204C275D43DB5506EE8DC787525B3E679CCCD3ED43B58096281E2BAB358
  C5303465E46DBEF697B5DD33EF8A648DD7053234A53B179539C455EB9E1A17B72F707FE30CB95D
  0C28911F8643389CC6995C58C6B83C88AFD3C594052F37367882C26A8936A479E426997D89FE0C
  3AB9091E480DAF918BC26A87CAEF7BD1C6582C73F75B85D59B708D9C76F953376341CBAFD20F1C
  8876F6EE538F61283D03FDABB3CB2888C5F3942A670517E8DDC98B6204397038B951E023B4651D
  8E3F19733C8D6610827348881B570571FA359C840568DEDBAFE941B9DC7DAD8C3E1B190606420E
  1DACF3965337C51A6BEAF2F2E5EC60CDF839E2DEC9B130C23BEE9F65B46626D20273A3A5BD39E3
  BB247B1DE1CF9295C409B91AF47B38D47200E0DCD317B4DE3ACD751E967AAF9DA7F6C026D01171
  3EE0F875EFD7B31B73ACD66C6B95948492B54A7B9865B3F32DD722913F3D9EFB40E4F03FF9E928
  AAE3AC1C4F239DD88BAD50A2BB442D1A0661B3F47CE2BCCF1A76A8604C7910873BDE2C2EFB4112
  60C98C75198EDF5846EF6EBC1BF94250D34F646A43D00E3A42ACC4E3E1A44A2B0B7FD74003C61F
  00ABC9114B6936A50C67544EF62FFB2F19CD1E5AC55EAEE547C46ED91A13C76025AA7AE95E0B0C
  4D2408E53D7EC48409D21B2DEBB04C7121487C50AC7FA8790A2ED577A9AB6E4063F1DB7BDC77BB
  4542EC15573C3F2E3CB767DE52DE2DCCE04F38A58F06F08F0A541A98D3538CB41AA5DAB04538DC
  EAD1BD6B41C71542ECD834F82184A7F51A4B50B595E50E04A5234094049F10A1E91BCA8C2F7BFA
  AB638BBADF6DD02D49B2CC406E9FD40B734BA772A0429BD99CCD01F112E1EE95CB7E9F48D5A9BA
  584636A03B52F94FBC0724A1ED0E5E0520E5BAA4301773EB98709AB035AF28D615230D3EE0DEDF
  CD33056CE8C22A1FC8B7B3C2256BF7B7C7C8D1CD669AB358E57A1F6A400D18FA59FD5DEB0C2601
  02C59112216BC6E8C0817EB5BE3420BA0C2A4363021E57FF83F09B5026526B949BFA3342A70DC8
  81DD588833BEA53E06D29254B4802018B002B06B63374A6C6F335562479D0347DC7C14E2E3872B
  4C4C55E198EA28B35A3B94CFA88DD3F52C3C192475B6C8B6968B49D2FB1623855E1D166294E1EA
  C8337B3DF9B1B3F28114286FA24C7A56731F05417C40872DF09C55C3E81D93C4DD017BAC9A2CB7
  4ABD13E9622D3C533EC60B4A6C03E253A3E586D831D70E47501A1B521E2DA5D67BB1949503CBC1
  693D693925130928BAEC639F80DB420DF10C8553385E79FF75D8BD970041474757184020FA03C7
  97ECE10C8B54E3AC56F330144F2253B816441D75D0EA55D7342E7CD74B3B5311896B43F4BD1DD3
  82A6A8A0C3799DF24BE4D658E6AA2AAC51215C3495A79CA323927A69034959CB01D5978EE1DA9F
  B298845A4A2B40EFDF7B85996094756C99DDA3C835EAC39826C048FFD5C5C582D8698188048254
  66387EC1CB16BC506533D624BF2333CA56C37295BBD41EA5C87DAEC80C3687C37BC3E514BCE48F
  B4AFE9BB5B16E36321B1C0A29A423AD9ADF15718BC946D720AF5C20C1922A68DA0F36838D02DBF
  7CF4D017BD2CBB96AB1B54BC8B75130109AB57CE4E13712CFB4FF099CBE8282C07D3C614179433
  B263696E7E3E4543E489A9BBDE0AEDE6EC0F1723214AC0C1C8F662DC05586E7564D405DDEA9BB0
  9D727AF5E75D7A5F970FB410E1DAD52BB13E79FBFD73340150E2FA08EBA94C59100D7CC76BE3DC
  5AF4C5811E175E4DA3C857320593C5E38D66E565F1C06FCFE9A1B8C885A01EC3021D4A2E6A7AEC
  24CF832A6E731732835FC0B67E4D726D8F22FBECE5AA64EF972407DB407EC9F9876AAFF2FCAC35
  4BAFE47FF75F06A17D2FC0B05A29ED963C73F0461AA599E0051E47F5854C974724A5A53B738908
  24D0B458A299A994807596DCEF07A1E40C5FE7557E9499D6BFF774B7916F04D584B818F0DA128A
  FF856B494385F9A9B2AEDC4680A6F972E2544CA24E95273D394FD5BE8D9083F9EA81A8FBF44EE2
  94771767D6FAE60617B8997417EC6BC796EB0209E6B8D878DACA641EC329B0AF94E303A0AD611D
  5E2C2C8C900857730D1EF11E218DF7F0EACF7E55F10B5F7C56E6AF414B060453C0EBE48118B964
  56D38C8A923F42AC5797F13C86955F7C1FFE29881AB82449377F3C8E9E08967B6F66FE925E9B7D
  474CF80BF4F9A24E41583484A0AEDB8EDB0075DD3B7569E3261A1706F8A95C6621C61EA99DC672
  7BF50CA75E34A612D004C7CB81941AA450FB826EF9A51AF8D3FA17DF1A184CEFAE33F9C7E63BD7
  04527954200FE436220F2CACF234BB088B5DEFB52B2449238C0875D395F8E22FEAEF096EDBF392
  AFD6FF6C07ED04288FB73C401E29AFC2A76D4C3D02C4F48955A8F32D323857333ABDF3022BAEA0
  AE6E4531C18ACF750416C54C834D25E246333C13456F2B866B958B929ABB8E497917622365B5E3
  86FF235574876767588CB24A8C06FE0D495AA32835CC6365A481788EA24972FB8BE12659ACD8F2
  287C231396647371351498647CEE9F62C2670E8EF48788530BB5B006D93A29CD4A2E354D2C85AA
  0AB2C800AAFC81F24C80A58C6FBBB89A887260D00C59EF402176C80DB3CF44B0A281BC6042BDC3
  3AEE88AD8A57674F65290386C73193346082F9477EB04A921B3EE960349BDAB9E5326B5C57E223
  527B1A3173183393ADF86267F127B52C49320B6ED36285E8ADAD07C0C91E479373698E709A1870
  C3B9F6655DF4E5B96E92D0E2F2A15C5D6F3D88ACAF6F95E9BCC52241799EB711DCE15A68DD5244
  6E832F500873B045AABAB816EB68FAA75E0E18B5F32002F283D6BE121582758CA59A65CA43C28A
  68BB9E407E8F767152A35E8A90E6A6DEECBEFEFA2CE779BCCB97862240FA72B92C2E3428294DC5
  4AD4F7C6611E2D6B25DB3EB4995E894D5A17863D4C88304E77EF696633AE6F224342D391F7E3D8
  2FDC24E2887F43F4834EBEC3F2B32AD1339995822553AC68FDA951DB4BC95B0355A996113E4800
  8A387EB8CDDA0C4D0B2409BF9CEE2B37E1F6F4B55E9BE2096B8DB5A617F1CFE12BF91A21BAC921
  453E42E4DD5ECB5A479078FF8688BCFF56A4CD5047ABE1BB4D3EAA9FA03CD48FB4A283FCE6FFF1
  1885DAE6AFBF1C72E8399988C0EE6010DC41DD596530FA76EAE5662CFFA35146A75E55444049DF
  1B20C6A99D838B6F8C411BA022D50ACC847EF94E52908E83B6293E719C43E2C42C953A7EB1395F
  D52AA1B6E66F7764B77CA3ED37C606EFB9317CD27929413345C76AEA4619C08A4A00EF770200B2
  6BE73815970961AF7F2F7914B64F84A1BD43F9D186ECEA8656B8EBDCC7EFA35AD35D5EBAB0CA02
  A199BF3F7514478D89EBA07B282F00B55BEA90D4E8543FEA7E6D489944054880B09EADA41DB4DB
  0659B8D96CED67C8A7C18DD5C41C50D8149E85A90CC1787E86375ECC386369420DE75AB44AEBC8
  A1D034DC8045479389E231882BE69C17EE57EABE00848F12D404E0C44340E21FCDA95E7A7515D6
  F606C600A488337B4FE30FDE40B19F3294A8102DBF57109F494C2459E9325766DC71375C418B11
  4B00620BB7E2B38CEFA679010069DB5C6B4CEB7D31716AC05E0AB8C411C89918A19F89578D7BC5
  10CA86BA996F4263D2B7C98AB5C8ADE8E7D5B96D467EA484958C8B514E175741AF715187F0E807
  B9C5B19B632BB42B745187681714526877EBFB568B3133F4C86EC3DE0C6D7DAE1660F1E1044521
  CEDE6B8ED3B03C16031A7DFC67C32C87FA83A5E29898375A5A5C3F208BB3CA718AD06D0E7BF2D1
  07E7F67DC639C5D956B79FB22BDC372846646F60760855A4F9F135F6CB1BB0EFEED0033B09FCF3
  A34E1AA76560F361157E0C2A1675BD94E0BDD1C7293E7699516A1304CD3A0DA5646ACCC954856B
  3A62D38EA879EB0B0726447D0E198535124551BF6F9821054D8B845C441A9C2481E1AC3E542AAA
  553691D7D6E4B303859A5086A7ADE18106F174745F38F6E3182F9260FE9E9C19EEF45359D6B9DF
  DD0031D1F87DA89151B1BE4AF54B6670EBD558BB318F2184ECEE9152ACA35E099940F094AA2AC7
  564835E69E5C9C47DC7D9625ACB1D4243FF1D993CF854639C126DD8CE21A0224119ACA731346A6
  4AC8C18AA22FB1A1968B0A6B05CF3A1D5B24D3EAA7C8D2376D422902643D3FAB3F8E7DC8B24161
  3DBABB170238A1A19B4C8A4703E2B0A2A033E71723F557C314DB42B159E784B1822BE1F990D167
  0E522B9FB1B3A602B10AE08A8E7E3B2CFE51236D76B744456E5A68995294758A42F1004E8863CA
  0D3AE455ECAD13501669A1DB41F7E853BB1531A4B949AA5BF0A5E478A5705D5EE45104760C727A
  068E7057A808DDA30CFBC03157E141AC5E9E0A315967C2117EEDB38F9C66A34E138B29E3DE6A03
  C34D0A37740DD04EF8F9D08E545FDEBC571043A02165E6086389DC7BA3BFFA52D94BD4C1A27B85
  9B8ECC67994EBD370270B5998B8F246EA4FE0EA6963AE3E3398845A62856068A8A878B6F894A7D
  28041BD30CF4F0BBB5053AA7DD86A2B94F3794C78F615C669274629F392FB2D320BB82EDA9845A
  66B0EF0384985B938FE8A3F47B00C2DC575949B8B932F3AF423E17F72BC3BB9B63A81945CA133B
  CDA5EBC9CB8B8B969ADB5CE60CA6F746C63DA5C516DB410F86DBF878902E753A338D3FB08C60E9
  41AC304DD767BF47D49BA7FBA110398BE21E0F9F01B6DF4CD3256A7803E5BA935DD6CDE11750D5
  DEE0607C14A9A4DD037B685F830094C5BACD2283D5854F5360ECC924108F4C129176AF6E624458
  BAC41E0436912CC5281EA94AF791219F1D04CA3069F30B50AE79BD8B8576B9AB76E6033787CE32
  3BD25240C00FA03FAA253BD83EFB8FECD2DC45C1FD7CC194FB61CBBEC88047CE8AEDDBD920666B
  C2676E21A3919986FD56AF5440280E7083F04987F0272BEECF8F3B5261007203702C9F82B640AD
  2E6ECF9D0BA81E5DAA95688D654873DC9177A2E7162DD21A7B40CB3C85AB49469ABF8F133F808B
  3C2DA2A5008E25A13A6D0E49FCFFC0C8D3E5A257A8C8D6B1124D7017CC0263CD94F50D32DAE125
  C66A0AA717839BDAFBE889083C01D5E41994B7CD52E63A5FBD4D89631A93B377040DAE99C5BDBF
  68C2142FFF3F2B53DD5E182FF6AD34A0BF6DF19F58E0584501239815495DAD144DCE748744899A
  656000E283A237E74ED58E2452F1B6E73A2DC626C3E52155036822984E5E72C667C2E3D790FFAB
  5C0A4AAE0325872AE9488437762F4C70BC0A369C091EAB8A3E8F404464B99D26D6C35B042E10D8
  97E029A10443074CF73949EAD0DCB7E0B8D39BF3806F39D3E3C204527C17198F21FC76FA5ABD6A
  BAFB21C942146413F03E0CDE247A8CCD7C726E993976F2D730E43054229A45C0FEC09DBCCA98FE
  C2C49B2C6B015D34881254CF11246521D785DA12C48A4731C3AF1353F99B0DB96953F5E42B3C37
  EA460876FD7EB036F7BC5D8630354CA18901C561A46A9E201C30E62F23F3F7B0DDDFF596E13D7E
  00D256E6833495BAFDE723AF59E70D841B5028261FAC723AE4E37ADACB02772DFD6321FEB65729
  D65CCD58B312FA68843ACFAB7EDD78D31ADDB734B647E87C7CE25A0436A0D49499FA272FCC88F2
  E0CE5D7382D8CBF7930467AA3C2B1BF67E683573DEB3EB57D9EEA5E185786DC9721A4B95ACF32F
  09D5AD2C06629198D15A74FD41D8972E1FD77CB71A933D235E37E893E0A4DE1D50717E125365A9
  CBC2B8291D7375AE2340833939BB0F139FA392F293472766A2ED405095BD990660CC6F40954E96
  71F9557D584266C6F3BF41F4FF6E0BB7ABEB272AF99D0A4438BDB4AF6789B90431B7DEDCCB0D5E
  35BF872600670B0F15C19F34BCBFC59C4A2BE3978F6A184DB4A4745B401BACB8C77DB62D3ABB85
  FDA212912325C55C5A6D33A24D76C7BF72A6A710DAA7392A7F7CB0A6339505AC935D346C9B5E2D
  D2E85608392B3A25237337EC8F5856BF3F3ED6E1514053F4FACD12A94DAFD1C12249A67E3F0805
  08CBE6916B2DF3D9478C737A141AF7C54E8832DE822817364EF3609658C65923ED666D86380B99
  ADF7EA02C9DAE111DCF399878CEA60F5D5B7C18D244AE76D6B978BA17DDB71D3DFC12252202B39
  6B03E36E376A54E1305A00D074419A8D04D53C3DA828A36C8F40C439CD7D58A48962E7BE992A9A
  A82EC8537B268AA13FD1B88275D87BF0244D7B61533B16730BB9EFA643A5B96C4E9C10755A85A4
  F4C71AC4C3DDD308DFFA066162B8B7F75F7BEC8DA40C5194B759736381349A621C407A34B9088E
  9EBE34650582CD758E269847328AC43EB79B5725FD7E516B8A974289D8C5BE90C301323DEEFCC0
  A18AF6632AA8B80C8D188CEC275A93F68CF87FB7C6C19BFF2C0703CFD15ECCA16160ACD6E3E16B
  00FBC27616CE003FF9A60569634DF6D43997A4DC23AFAA8C2CE9C446B673581FE9F30A9A2323E4
  C28C7C9FBA27A3B5EAFCCA82D85B05CDB6B39A7C6B3584F48F4E3A1F013ADE47023830E47ED8C9
  5CFF3F648C38BEA1AF9135E16C87A42311995E09E7FB51F06A87102BFA8263C32067B26B0941C8
  4F2F62035D58E9153D89D808AB71545A1BADAD1817D0DC2836C6204A0A0418A2D62EFC2FAA63C7
  A9D0A5CDAA5F0E491269B127B5C716C3D5CEE6BAE7FD8C4F86C0632AE757AEA55F15CC0F95D7CC
  C41EE9B1AD9349C4F81F0998ED10B1F686272E373860AC2EBB986C2558DE989DFAD95DBBF9EB54
  56384A0078C133E91AC9CF5365A1E733834B0701B4FE43964517F0AA1C011BB6A7029F8D5A2333
  B67DA3E019F0D8D7D533AD3291C2CBB1EE920E953128D06BBC517C518AE9A2DD49B933E915AEED
  9810C619035ABF9DC147F653ADB1268169002E032A42501200A685D19070F12F9137BB1D9F2A8A
  45C5B52F5577305AF94D9C511E5E82AC67A22164833471CBB8668DDC88D9C500917183C5E14A82
  F1D9A0AA3DF2D7BE4DE844BEDE55700A2478E121555C7F6529FFBB052026C80776B447F1F5BE0E
  85AAF2CF09BA3B0917252D68D671005D0FA328BD225553D98F2C476E080BE8E03AF4A7651563FB
  FE08C230F3A956F2FAF7ABF868C08CE33A7FEADBB8E6D6AF38A821CCD8B4EFFC02FE23A37C691F
  6927D45F5710DD5FAC7505FB3A0DC31C766842B482BB77DDB3990346F627E0E1657DA8ABC8EA77
  963D6CB838D9C4E58C943C3A272582B3E63771070A6F62BBE7A4B11B8CB550547E17ED5DE6EE16
  1BD9116CBA0E0EEE910F98948F740E7A5430176722BBCDC4AB66BD3541443B096063C839E53B05
  A55E72235BE223D286C4319FD5A516325C8BD480D1867F2013599844FD2478B3B52542815CE945
  FFC8FBEAAF9B072CB4988253EF70E42A1ED315FE2C7571367E5217ADF3AE4FB67575CF49B1A269
  15E653B5A86E3FAE1C7D04E1AC21CA5D7E7BDBEA0F58C9962B40A168FD7A24B4BF109645481EB1
  18D49BB99B3541756E0DAC0E2327D1FACAED9F7A7693FC1A15A5715F1FD1BFBCA7D232FCF9663F
  B0CB352570A5807D170E5B6C6727F7828F87FDC9D9301A842C53A38C62C804CBD611992B3A1C8E
  C7103E76294F7E6A50916B8CEA82BE5B7EB777AB2E7A8C955414C8C61EA330BD18C741D5EB6E15
  A6DA46B30345F4D56CEA595CC4838BBF99339BCE82582316847513CEF43B7DEAAA17C7F3DB82A1
  3471CE81BF7894721B80F8165BCC3F7601D5D3DF17D2F37C58C5E9D87F3990E838E55E8BFF7087
  BB79A1DFC321602B386F98D1D97CBB07F6D7B06F900A77E4847CCD689B23C277E6476300D4D9CE
  2B5BB5CA2062BFF0EF2BB3D4ABE2A9F990DCF74568D7CDB717E4CDB07B97614508EF34EE901BAB
  B477F75C41B2AAEA8F46B218DD0DE5BD82F1717F96E14ADF8D7366274F3C077681E0CF33ADD953
  8922D539077C56431909EE8C1EFF7467C9A5E215350278534E5A92C6BEC72D4C34D8D13CC545BE
  543BBC371443F2D346737A3C390A0F7E284D9C4669D374839D3ED8A4023F1F99FD93598755005B
  C2A34DFCC4D19CBD422ED4E857D419BE3B9E12E01D0327C51D3589E83325896018C9B0417FD876
  0AEBC5E0DC8367CBAB11B2989F4ECC1AEF87D935722912F180A70DFCE940DE3882A416E29BA14A
  9C86E77380CE464583F385FF16F7FBDB607AA7455DA70CD8A0D9714963BF791D2D5E2E550D10DD
  105F88DAB1BC1F688B1EE8B40151E533B6D56FAC3A4A98BAD8801864709AFF6DFB3D3EED5A532B
  83E91CD8125A7A7AB6668F066AB79683C6A3F129C5ADA9431B06ABF37A724380CEA251D67B5FD2
  B9C97334297B9DB8E85CBCCD13911AF8DC2415D1D8E7804838D3D03F9D143B923F5C5B58E28B74
  8238665065A15A54B43CE96089B8E7DB9069B2B53210F5A03D1ECD2F83E1044AA561AE65683A43
  9FFA3E1FB60C1CB64F32FA71E3FB557DF3CABD87FD2F945EB3C6960228808E1F77B23DF8C7B5B1
  889BB4C2738EE5D607759C33D5D6174194AA9F8F90D969EA3DAE834B381A2E08E5DC9EB540679F
  94D490F773A109D262E08CAE60E2E57690E8CF756F9AC112844CACE02AC96F51231FD83BB9FF70
  102FCFE3DCACC8BF9E99BD7A9C9CD9279B64B3602442624EFFA606326BF96DB9EEDD16A515452A
  7F25ED3E78ACE15FEA2CF9F1D3C6A0541D441A9D94ED9FBE947AF35B70B21CDBC02529C265072C
  99642EDC878D92A7664F37F5D9DC173F6C28F900586C48960241E2932F113984BA534FE2457F45
  16E7FEBC7A7673E8BCD4C8B05A8D9C738164A43DB7F581FAA8724D12035573BE800C032AADB23D
  9A277BEC387E29F201E5F4091A4DAA4792ABFFD65762E6637E355B8834791370DB79FFBAE99108
  92036B5713F64A2875092825616C64C6827BFC60F8C0D1EB0FAF0516348A7846B657C809030112
  1FE3B0F1EB992ABE73F0842A5EE10D6436447471044EB7D9247B169C3F7C37B5109A5E7650ADD1
  16E52C21022FC991756B93D210C65F5B7F67CD38B4863F90D3A1742875DF8E6B24D9E27D726521
  432CBD225E0DF36DC33B8E8BED9FE897E77098832B9156725DC38EE82595481A76D166B37055EE
  84EEF1899D249DE4280F7F15C76C044565949E9E4D438F327E05265E34FAF812E661770658F2F2
  BBBFCC933AEDAE7BE17A40880A153409C357F830F1F847D9111135468D7A36BCB1E69CCFF57E26
  20D97D988669D732A9A4F4ED0B1B6B542D729C9D2FE15DD8584ECD458A1305DC729C47714B6DA0
  33A0D0E221570397F61E67C056F66EF50BE591A6DC3E3246908B8EF4973F76C4403B17175B046D
  230F17B98A217D346F0796A77B6F19B4B0889F09A03B4F7BEF3B241218A85B5C34C4420B87F0E8
  AD942D0A232B66FBBE49D2864F7AC2E5652CCE91C0FA6FAE79971F2D00E972151B61191190F9E6
  9CC7A51B7777AF0EFCAE0B2FBB626235D0B942134A85ED0168D2E0E58654D94BCFAD1D0EAADC00
  11939052259F193324DBA479BF57AFDE05237A08444888F08F9BA119175C776402490DB29FA96E
  B0BDC684CAA8E0CB48ECC0F40A0C8F18E37ED04122007CE4E11E1FF389EBC7DE9F07888EC1DEB9
  A5C083E57830C1D303D03473CF649C83D03B17045F3B74A32458FB96C5856F02B72826B64D4866
  13C7F07D2A3441C71542ECC56D65F2A80B5744608D0DCDC14204BC00ED8EFB67F7C31794011C03
  93C64585EC8B7427B82467EA32A902FA1BDE691FC77CC61952C72F86B2FBA240D9D0CC565D8006
  4B0D9525CE09FBC1F7A6104EA5F5AF9CAC4A1C1892BF78ED5500FB5AFEC29532AE7ED991CEC28D
  F9B076E95C64B91E0D262D4EAFE1C27E244C36B527646652F54C23E3BE59E6A0A2B123BB3101FD
  D91BB2F3B313CA0B00B1132A3886172ADA0A234D805CD95B2D
  0000000000000000000000000000000000000000000000000000000000000000
  0000000000000000000000000000000000000000000000000000000000000000
  0000000000000000000000000000000000000000000000000000000000000000
  0000000000000000000000000000000000000000000000000000000000000000
  0000000000000000000000000000000000000000000000000000000000000000
  0000000000000000000000000000000000000000000000000000000000000000
  0000000000000000000000000000000000000000000000000000000000000000
  0000000000000000000000000000000000000000000000000000000000000000
  cleartomark
  %%EndProcSet
  %%BeginProcSet: stones.pfa
  11 dict begin
  /FontInfo 10 dict dup begin
  /version (001.002) readonly def
  /Notice (Copyright (c) 1987, 1990, 1992 Adobe Systems Incorporated.  All Rights Reserved.ITC Stone is a registered trademark of International Typeface Corporation.) readonly def
  /FullName (ITC Stone Sans) readonly def
  /FamilyName (ITC Stone Sans) readonly def
  /Weight (Medium) readonly def
  /isFixedPitch false def
  /ItalicAngle 0 def
  /UnderlinePosition -100 def
  /UnderlineThickness 50 def
  end readonly def
  /FontName /StoneSans def
  /Encoding StandardEncoding def
  /PaintType 0 def
  /FontType 1 def
  /FontMatrix [0.001 0 0 0.001 0 0] readonly def
  /UniqueID 38777 def
  /FontBBox{-179 -250 1297 943}readonly def
  currentdict end
  currentfile eexec
  EB7EEB89BB946F143739A83529DE3381F3784CC049D9A232E7E0884F0F277E8C6E6B0C95F5E3CD
  DFEFF2F460CE06E2FC85C687B2452F666493AB6C55A2075C61F4DAFFB054763B9492E624F5E4A3
  8F11E3BC76EDDAA5C228BCD20F1BF2283E8133F07F5AA91BFF96808985D8C1736E8BC758781338
  F12CC618819D476B7674CBF6A7B3F1025A7291C7C074B3055F282498484C6F0FF8F641D0CF6FF8
  8E1ABD832961B8995838C9C0F6BD075924512885439B9369B37ABD9F474BF8646BF9DAD5C5EC17
  79AB8DE82C3D098E6A6637D9B4CC7174ABDDEFBD3180F0E62E1E650CF2DADAA7C7A6B1991EF9C6
  B5046693AFD8B1CEC70D85407027864F714E599DF9E4E6776CF8467214DAB6902ED5B40FAE4244
  82ED45A7BECB26941727281F8E0B3C15EC045133440070AD72736F4D87A96335CCAF8E6AA38229
  8CB7EDA49F963A9E119CB70B9520E5D7AAEDD5498F0ED1C8B3902637E71734A7D7E2412D5EB792
  B7B60BA9355628BEE3DFDA5E93B3026EC2886D40B22685C8E9BE5E38DE31FAB551A978D095C55C
  E3FEC4D6ED65C708F3676F4CE5F83F614C02C8F109F1A7FE93C6030D303227AF0EF843C45F15B2
  2797852CFEA26D79AE2934E8B683732B306F9125ADAA1A802C8B82605D7395D0F22C77CD1B20E2
  02BC082015E293C8F1D8D78A0E4565540371EB3B51256BA7276B2FABA2CDF47D34C445D0255A4B
  23A88CB443B997813EACEBFF51F5B8C9B1B8EC5968A18CA26BDAE2F00AE034DDBE4DDD598ECE60
  52A9BAEC420FE278B08F64BEF1069BD1FD4AB8B2A13ED3DDCFF8076501BC8A0156715EC132F636
  711EE9D0D8C89C932EE5D16F8096A9C456DCE7F59517F85FA409B6110DFC22A2391A005492BFF0
  C8610A9204D39AEE51271D355CE201A5719842112C88632AFB097C368EAB897DC1957B02962E2B
  3E4732F6527C25BC76AC043B7300CB153F6971C0335FD3C6AE5AF7C5DA5621D03FAEFD3B8ADB98
  8272C6380708210BF140809E4A191193F3547B2E4D43D4E981F7140B94473B939BE458E3B69B89
  33ADBB82DA80BA01B2FF9878BE938D7E1E4A6E79B21C0B53EE510D6377E178E8E3556125E44D97
  32ECF7A7C591AD28B9C651629CC5A56BF611E2C2199DEC57D61C099E5DCEF5527B9B2299FA64DF
  B3410193B77CF603A073D0785E1BA9CB1E3F0AB8859A87278769BB6FCB0C01EBCB40F80BEEC4EE
  0283CB480E2B31863C2128ED5AA95944ED748805F9BBC70FA79F7A40C175F8A655C11C01FA9C2B
  9E0A6A8FE5AF5D6E342ED1504BC332EA0F1788081808AB8A493A078AECABABB7D0D7183AD0ABD6
  576119456D0B50B0AC6C6C3DDD44C64D4D11A76D2C3F5FC53E626B12E92D22B757E89749A1CE26
  2C81F7646D9F24EE0350C309C0D9A65D134FBD216D3ECEB54845BE6FA7D67E2DD6B1F1262AEEF0
  A134A6E639A2E3A6C8110004057BF9DA48728F50D486160122FB7DE6587D432589600363CB7620
  728E10405C9B5CD7520F43F6472F4CF71FDF8CD95E78950422DEA82BBAD2A37EFC01B77C2960ED
  9A6F213334183C34B5BC8F905BF35CA1604F593F1939B7582423B19864F33C720DE6D3B23B3D80
  674761CA59B1561F6094E433714EDB17523D29307950FE67B11FDE2AC1E48303DBFEF06EF1B00B
  57201D7C78CA9EC0797600215132ABC35FC81840920A311E8C7B3B191C20F76D668D0838E5A2BD
  713D8FEAB68CEAC365AFEB987480C5A742B3F85D2C6B3DDC46E2BC1C27B316F6C2E94489E6D6A8
  90A8C22B71A74B897210E143BFD17EFF558BB67EFD214F69BBA2A346AF95338409318A9C95D8F7
  76749854A7CC4AEF404CE41529C318C2165E2820DBA6B20E6C42318396522FAB8027289A93B316
  9FC3ECEAD61D09953D206A81630BF18B6F11E28C748F71B5FD105F913BE26FCE927F0611C7D202
  AABA714B47B754E8E8ACA58CFD7421C5B8793C83236D375EF5EC59BC71B5A63C2D4FD01AB72064
  634A3592BF1214E192F52389F6AB4A89DC4CBC1A9F4B267A0BCB6137487F813EEA0C6310CEECD7
  DAB781A8C18E08A1B20BD2CDF58DC72C9D57EC472254ABFB157EE54C969150DD97A30EC7A78B9C
  F8C163FA6185B1E399CFD0B9316B70FC11A152F71DC4B9C902BD05F1AA7A655ECB1E69FFBF7CED
  71B6640AA8C529AF822FD4D173CACF66DB19F35ABA3AEBCDDCEEEA061B06011553B86A129187F9
  26D18FD644660001C7C1EBB02C3344EF0E88F93ADC8F334EC4ABD15D45C33221A5BBEEC48A3213
  2BEC257F4A154E2B0401454138B8348C9B52789E1ECB5C01F7E8B0EAB2AF39B81FF4A7A0699643
  267D78C1B794243AE7E4A5E5972D2653BE8529FF3ADE15B8D2D9CEDB5B127E8EADD74D2E45FB4B
  4704B2BC7DC6B900A66B5F19F4A92DF92D3433A7104B869E31EED01101DAF9AD5E424A855CBD2A
  9F24042AEF767196166674AEA9B4D8B871F84EA776ECDF5F981AEBB58D139B33F188AB2A99B816
  1EFF8D88E6A57C45956E7ECDFAD1D35D6F51B3BD62F69E15FEA564355A05563A133DAE3E8251AD
  6BBE5C2E59CD006D8F87A51BCE072BC40098DE0BDC3078C1705CA2B52C7A3629762F5997C62EB7
  92AD52E5F51A035A947110B41DAF2C3D40F45E5C7CDE09B53880B161590B706DAFD3A98436F82E
  78E7F7C0DFCB6804B719EF0AE76637C38D02F8075DC63FD48D85AA8D6598DA1D489BDA2BD9137B
  56EFB6BB37221F73DE7BBF07A1E6D4657AC56EE2BCA53565ABB572C84A0D023AC945681EEE5B8F
  56679E554B713EF277D843CD9972AFE851D7A213824FEBCAEF2F159D1D944DEFD0C7F2FF014568
  5A0F7709376FA7755FA0E9E2EAF5827E2F23A452502F0C69C51A92BF01C3CCF947B5604164CEB0
  F6519224017D8F0AC8887C6E83F0FFCBD0DAA57523D209ECDC27C6CDC6A709D384AC24FA3350F2
  72593C5FC05FCFB4F2EB0D5424B958F3E5B83D2462C8E318A994B50C1E2AE1D0FF798837C6E5C8
  23D4D6F8D34043CFB2FE9A942711982BC114D1424B7E358F297B224DDCC63AB1303DC8675F12A7
  B38838D8F3495D20AF3D452026397A002E112B8266AA76AA4C8066DF43647FB2DBF74E8D371466
  EF6C05BB4CFF36C3B46D661BD0BEDCA753CB06DF07EC3E8F2F39488A87A77B9FD0DA47787D4E84
  3905DEAC2A83FEEFAA0C2F8A18D756855B3FF02188FDA6F555140E2235281F1EB0ED0E0F6F2645
  C36A423579A7ED352738AAD1B59FDC7262326E580D3926A6BCFB733DF70FE8A55CB948B7B9CA5D
  FD3ECA598D7238033216C0384018317592F26E170859177D6EC285D368A72620105C4F64753BB3
  CCDDF78133952448DDEAF1D99D413A3192556D5ECDA605FF75ED0635D5874F3DCCA46FCBBDCC46
  B883F716B6C444D78CE26DF742A90D9C8687F4C7B939F46ACCC4D9281C21DC00A5C744CCB54CE5
  9292129F027AE072B48AB2F550C1FA4B36B990180F6EB6EF887660D516A5AD905AAAD94C7E892C
  E8017CAB4108D1FF94010662DED658C6AB7B02600F84FE7D9907DB213C91C324B2515D831F99AE
  5A1E0B8521B9FED12309EA0E6AA13D1CD9A5D6A4943A26473AA23F175349490A4F9DA795ABEE16
  B14F8BAC8A2AD6C6646AE2B482B8B2DC016AB1429DAA697CB315CB15B587A1B4927F345C778631
  99DD342D2E85C218F741AB44B821978AC869DE25347886D163A80CCCE3EBB841B7D66F9F4E1706
  FA90DC2A261ED49D69AA21E95C4F20436359877F390E26ED8E7AFD37163201BE434B89AA7144B8
  3E8977D40D873C15FCD136E711B13292C8FA0B594598ECF8DFF5A696EE868754C626281444C30D
  3167DBF9B9440AE0DB8A937EA6A11834D4726A5C21388C9ABF54DA82FFEDA5B72FA53E6704C916
  387B8EC36085F419A3AC796D4CAF4C321EC5F5BED7612F5C8410F9F4C584E762C4FD61B36965DD
  6D3C4A58F15BFDF83C565F457F56DE3F8BFDE36CFE964A70E8E05D31A6CB87B03A4A8CED980551
  5BC7F8535D23CD753CF9D1CDF90A7142045E5CEEB9D8BC2A8EE2F4B7A49CF6D6A0FFA204BB5788
  F7AC5BA57985BEFAA983150974FC1048E824D87506B7874387FED6820F0E812FA536DF5AF4D780
  449BA54D1B2A4489E0F881557200C80A7E9605F750BFC92A30A38943FF6C4D3972797C97C9327E
  7E4D974D44044794B3667CEF0871CEE807C70C8A727DD93844B4EC636AF2208B1F4F40770F4519
  7C7C3BD36B0E1662FF507E6728E86D3599549839707397E1B6E837FB56E747DE68FF8CCABC8358
  95F95178428D165AFD9E63B4F33277731469C0F3BA2CF304EF696E73347CC336F538581E4E6FD3
  87FFB3A5160704577E0116E5327AF130219ADA85AC52CDE0884F0F73576F1504A020C752F8BF83
  8BCA1C6ED0B14B381FB02CCAE42C64A8A65A82B3C9EC9D8716C086121D8A6B18F0E411BFE177CF
  B18F9B9BCD53C2ACF975A1872CFACAE3089844A8A3B6AE02ED3DE4D2077C7C3776946E2A5D0D3D
  19072DBC148498F04F23F8B17F4B294EC939F36FDE1DE681453B77F7A1BFE2D7840A32481524AB
  3186B06CFEA6D7593557AAA640618F83D8C22F3E05645C4785AEA94A736AC92BA08902FCDD0895
  EBF975371EB7DF013A59E51E333727EA160B5FCCA003E27BE7CF665F4CA4BBE7B14FC75815E053
  20DCEAC6D032D7148B9DBEA9D62724B5C52D499900207DAAADC0AE9B2CCD81B4C99B901B3488BA
  0ECC27514A730AAB58A7A60937B55BE3D29F68B5B9C776DCBF4BC713FEA091BA6083CB20C9C0B0
  18D94C10122DD4CC7C042171B2554A84FD489009B86F080526B82073D98D1D36C411386242D600
  10A5844AF91DD3C955205AB0DFC8CAA1B29C0FBDB0EEBC69815D9D3C72B525582431C700F09579
  90FEC2A06E31679795FF0B0F83AAF834AA24862F0576D306FDC27F90330EB0430548D45EF75CF1
  859BA98439583F9FCDC02DA426C98955D6246E4D5F1471C4AC4FFB1947AC9FF7FC0CA41FBF01D2
  2B828CEAC7030A6F56F8B05764489653A77159ABA4DEE42B2110A6634DA1542188D5E577021950
  694B571AC3550E3BC2CB3A802A2E830A3B5C7DB77516BFAC3A7C827D79ABD75F10B7EA5BCA52B6
  90FD19E0426D2526FC591A3454266B4E38114D0F1651DDDE0995C4CE9A6DF8FB0EF02E74535C34
  F1F563EC948231CD159E2C172A8473E7C08BC59FF3D0810C0EC0D1D9D1038E882F05C7E3A0BE1E
  F98F9DD2A60AF98C2DBF32B9F5003FE3B09BA01A7744BFA8C369B7B7F73CA6915CDEEBA1D71F84
  9DF4DA23FE0195DFB6AA471EA109D6E4D7E801AC77CFF73F4ED589D00906AA0845B84D44D78188
  9B4B5B94758F013EA141171525AE140044C8DCDB37476BFAC92628FA17723CC434C822EF307BE2
  4D72955220B4DABF37959B46AD9C52FC0F5FB3DEC72BE5F5E5F0BC1CFFC09D8DEF5CC6BC94A456
  F37AAAD9A62E705B6DD844C564B2708BD8B7FE5F3C62104B349A2D88FC10EBC1D4900A5EF6C53F
  8C18250DBC4BC51173364B6033E1E5D3543AD95EDC3A07C60273E9B052C600431F63D1E4DE0BFC
  E860537BE0537A0A2C9BC539114BDDB5A3951437D8CCF457DD1EC0B0FFB7B9AFB2405AFFE33AA8
  5F33FD06CD72B382D0A6C6DB40BEDD3A16C68DB98AE6AD82CBB60D1BC20DA932BFA4FA70333459
  A28D3B99966B9B4F2E993E8DE780B890ABEA37F7143F9702E99E1F59F8EE27AB15CCCC0515A2A4
  7DFF56DD8C39E14425FBB2B33115D7865ADB66973CD14446E5350B281CA2D855D2312D3DF5F58E
  69858CBBB058096484ED8CA8DB534EF103834B8EF33834B8179D9A6143B88B244F5F8773728405
  8D35186A83A15CDC9CB32C8A5885B5EBA4F73B81EA4128D24481870B7223A0F0F2888E77DC01B0
  2AC8337846C2A5035724031D7437FD11806260C2BE7EF64409E7A75AD047F7AEB1CE3FCBD53DEB
  0F39BA5A63B6C0EF90C9A3D21683396A250BAA37ED3C81DBDFDB2253EC0B09A188D791168222B6
  6A05F00C133F4220239F65A88112717E8B318E905BF28D58ED1849084719F1FB0176D26C56AC81
  28680D1AD07D3EFC11925DC45CB786E53F135B7DBBF610554B6D9BC0BD36226E55C23FC87351A3
  3C2416C8F2817B3CA69FB0D332CED8C0E33C6F40DBF85DEED10A7E9E2948513F3190DEE93132D5
  32045CBFF6E43DA145CDE2D561E3BA078B72F950A8017025AA5F2FCEE08AB4E79D8D17D422C978
  1656988AD6205DE69035EDBE516D7E52A8249B4FED4E5D177D87188FE3515C51B09E8DA573FC1F
  86B3193EE935CE27E52131720D8264C580AC087218262B37A194EE8589B8AB308545C2E5AE23B1
  BE4EE3BC9E99C8890CD4A17CCCEB740F766D9195DFC958BC4CEBD291D04FE691DCC4BA7DC20CB6
  2938F0AA9C4A51FA7D6E213E1B36B0E319F1E98BBDF2999C9325EAEB86069F3158C2F2E79365F2
  28BEF0D90948D07E53B9C45F826F8A8783F49CF037D4CB2C92F2F6E66C104343A8995A86E3DC0A
  A9A62577FFDECFECA2D7D27833E903FB049B91783E41D35D216DF3697FF03B51EC3ACCA17E9187
  C372377490839E490136CB3343C87D5A04AD6C137A5FCEAA91FCBECA2629C132CB2BABE3909C70
  EC55A8FF1DDA05B8B2A0D2A51BC7411B6A6F35609E6EE0C607DCC6EAF95E43E62F1042DD0DAF91
  E9ABC212D2E2A8FEEAD0D310BC8DF43202891540BF07FCA2EAD1A24BCAE5E4A617E726AC4E9215
  E01F7EA2CF768B7158110E3D16010D27B952E88A32E445743C6BF5984970D518998221CC95A47A
  9F627AF0DE14793C97C1DE55B85A062816ADADF23CEBC43916B1C966EDAA1424B23A552E51504A
  08AFBB8182E9A11124E129244B19C7BAE1CAAE2CE34906075DBF74CC87E478272541DFFFCD32E3
  C07CF960F654F674459FB136FE6D18121FED87B90DC05C2478DBD121D3A48A687DA0BF5A882A00
  1490B83ABC932CC011E458D64A6E3D2CE0F5C9B1D69BC7DE68CA0DF317362FF81BD27F6FD9961F
  93D9B11499B8ECB95428EA007A4649B16033E8D591FFC7B4CB6EE07E6F70687996A3D2E85EDC31
  C1DEEB5D84C169079C16297540CA0CBA130924AA7CB75C357B592E08E47716205CEC9A0178F54C
  928A30CDF5F2E976FF0174012508F26EED03417E397332FD806E11B486649BF17F2EE9A0B860AB
  CA44C31784DF25B56825790847CB9411B2488FBAAF03B0B0FA2CC1B0C5D320B69FF98713A878AB
  3F656AB45FC561F61D0090301FE7CA7CEEE6B76E57AB223D13AFD584384D0BB5F07E6991551E1D
  2B3C5232039377A66F1143DAF25E823774B8689729176CE54F0D53AA21E7BF6457ABDA6710D593
  247E93A5CB23C24D53EB0D6C7FD73E94BA15B6D443B10A838D34D966AEAE81B8A20895E39B8198
  D07DF85FE9D0638B27454E54D849C83E31499C75B2D2E851D5B896608361FB5623FC0FA85C2630
  298B75D3BF1D53D7762119EDACC38EFAE4126DCF29B3D71C0EFC75AA2DF1E95672B6C7D1DF74F9
  388B7CD3CB21FA46F000E330D3A556326A6F37ACDE0045C0D8D00ABE8A868FB4DDC21C3DD9C7D6
  22F0B80165CC4D84227B7AE9927C936DF7FE8F893E319C45BB9F9DC5E61D37AEDF9E522CBBB20C
  2405A137842266B48F2BEDDCB9320664BDD6679B72030E1B01B5E6979C592D649CA2DA56C019BB
  09F6E139803AC012D3293B1E4CC91E86284AA6841B6B9EAD31D672714039D73336E02389732ABD
  ABB8C147DA9CF40711405A1328EE19E0E6E1EA65DFA8921994F2BF310FB85A08F4BAA7FC59DBDD
  350006200DF27C099F2229862CA5E9C0851BE4E32D00475F258334359010D8178CA4DBEE82232C
  D21C3CF666A0EBF4BD20300C0A70016807E42D15F9EE24A194ED04B4C6AED884DC7088B6E37851
  FAFD7ADFCF7FABB0E633946B9029160F10B62613289B8C46B2B74FDD47BD4F4E7B53E96DF8F9C3
  69925508D342E15A4D0943B22365B8D8F9CB8F5D00DE6A42FCF9FF43D364C02DFD2F44F72819E6
  16B788A4DCBEC1B5F9AEBDE4F38A254B4EEA4A34DCAEA85DCB7F9F2BF47BB87E9552402C372628
  956EE58A01E86BAE1E083D7129B7837D6E57B7DE8C179BDDE6524D9F75618725026854C0B1A18F
  A662CD6324285AF65E4D1F8665F1538F2D85FF7D502B3BFD4D310A3088A8EE6780D541D9AC4687
  31A27DD7DA80FEBB6F60C27BBCA02DC98AC540CF45E3B6D52DE46B7C6E98508DDDFCB020AC5533
  12F08C2ABF27B6C34AD9F841EB78373F2F367A28EE3E21D2BCFCE4C14C34C3638978C40B136AC5
  8D747EE06E197AB07ADF3709E73833BC786917D3EC0465EE48948E397F8F7256ED4D261794B28E
  39D6D4EFFCEE6DCF0C14256DF68026BAA0D50A737E303923E6D956DF3FCE2983FF443BC1EE1595
  EC57E86E3770F73B802A152FBCF6B4394EE2DB30DABA69F0124E6A74BFED7715E469150C2553D6
  4FCB56786D334F335F4EC6836A613A261529FA85B53469585A683BB9CCADC24AC57E35BBA6B086
  F3881161327906B185E958E700A70BE82627A8F4F49DA22024BD5F6D0EF3357EAC2414615D4ED2
  130D3D8DF23C52D2B57372BAA68BF1901B863E6A36EA23094971BCE262FDD5A68B0B20F0E9FE0B
  0DAE30CA56FAD94C9CE49875A4D06E774CDC46845866BCD61122887DB85B207E28803535687E39
  028F82D9439FB6B7F34FFF1BD8E3C8E1C7DF03DFF8E3C06028405F2E6AAF97A54075B2A1EBCE61
  3A5CF7C73042D74824A04D5B2066730348B07F188A8725EAB0F076BEF25DA8B82B36B061F866A7
  BF23E609780A8CA6C1E7A52AA2DF4D5EA22E6C6491B5C4A648F37838A7B1F7BDD98840653372A0
  86A7AFD56CE2B973B5FF224E34930ADFA3071DBD339618B245AD27BAFC805BF2A49A4E296F17D9
  EB25700F8E8F0C9E8548FABB23D2CD8CEBE8621DFB66115E60630A1FAE3897FD72269B27503841
  5943D7A2B5729A5DC87E2F8EC82586D2A2979033C3189EE5CECC97C276B751E7A269047C0B4731
  9E38C8A5EFCFB0BD90C545563971F7DDFB76C28DD5D297C7907D20C7D020F04557F557AD66E51F
  9D42F796736997BC648883144CDD9EB477431AB9583C58A94FB7395E5F7CC0FF9434A97F591580
  48509B7008168B6E877CBFE14083C1CC2B197CDCD93068D035102B025D52A8AA4721E019DD02A7
  993E5C74A64CC4D422DC03210A264F7356514F13B555C373566A5D78E627065AD36C26513246E0
  01C9C15952357A8D8E7581ECC8C0A86A880C73AC519BB10C1B9720DF6501FEFDCE55CB1CDBDFAD
  42C3F2148EA35861C391478B9A8D058FA121B4A2639E7A626550F6E18920DA07940F573AA299F7
  043F3ECBFC626C16BEF92D9346946A0E7BCAC528AE264EA379732957AC35E2C7DEFB417FDFBCF4
  B29CAAF11335C1BDAC50D95C0A3F06E367FA0CC48317ACD72DAA35A76CA3A1AC2975BA3E369015
  F4AB8CAAE9B804DC42B7E19EF9B73C3EF3968B4CBF4C7097A4ADDF8359DAB1C6E2C440788F8BCF
  D272D8366C232B70D50E209E766134F0C1F1ECDEF25E05200D9E66FD6D0E6A6DF5CD1A62A4E7FB
  DB54B495CDE5DB0FDA85EDA4D628374E0E6EA451EAE67459D92AC84E38FFB5156D1FC0ED264D9C
  05319276361F5192B3FE3AC052154E2425D77666E387B88841F2AB8062F98CC11AEE58717BE867
  6C26ED1D06839FB862D2D6F14217EDFC44D3628090D4E4AE6D8D08C2925DEC62CC2DEE4CDEDA65
  F1FCB22D50D5734956692CBBAF25A518D2112F54E6D38F9C2B9CD66A38BCA0E82AAE3DDE45C3AC
  E761B9A12B135772589E425A3B4E229E0E8249069328B6A222C46DAF4F7C61FDAC1967C7AF6E13
  C38293F4A0AE3DF700E40C2DE9F8BC802686F239F7F0C7B47E0261F4BE8B5C174EE86AFB248F08
  D0CD94578867F47316170A909C05019915343C6C4CE0C994AA105F70E58E576564A4B2B08944D3
  180CEBE66BE894C842C096F92CA53E6704C916387B8E374D1B71761F3930422B0DF8A4E24785C1
  4EEE920E3C8D697279814A6D0276FECD66EDF127411A07EF9D22EBAFE7AF43C6B6122CB0B14DDC
  D3367C8AAC559AF893AE9BB73F784BB10E6657F344AD69330C24A4E3C446E86E07F5B596D2C984
  4C24CBDF51CCAEEDD4D62FF48C7D9F74C90451FC90F485F2C2F6C125556A5992BAD8C87DFFDD9A
  7C092ADC9AC2220C0ECCBABA1B4C494A4DF40CE6BC412D37D27FAFC83F9554C664B7E15B2C4F9A
  6BCE172FFDC885C8D5A6E4309D47031CC1A57D15CF30F413C700445A1180587836396ECF7A4526
  BB0ACA51F2906CE146F8C84A1B1FE2454EDEE16570D594E79B894CFC3AB160A019E507347E763A
  B6CD3ADF46393E0579BA424DD850246B872E88169EFFD26E590A192EF3535DFFD7C547F2358042
  FC5C9838B3AED01F1096BBFA3565ABFFB6F13DA0880B562662EDDBD14FE710EDBE66A3EA1FD804
  85DA5390D3F9AA7D2FC7A6CE67AD78A181BB8524B7D2243A22D936D631FD3A38B6D7EE4210E3F9
  67E536D724B5E9506F2C2F8ED984D0A76B28CEF61809EF49D7C198BFEBBB91233026504A558CD4
  7B7985A1458B14A570F2B22B196AA0E939D5F8B4439C53D8C17864376C53751328E391BA09D254
  062AA26CBA634DAFD7EAB4A20697D9D66EF59A3718FF3BCA0A69A203EE0A70CC564264EBF4567A
  71A95898634CB768E85C1C94194E6C8B0320735DFDEC860D110A9E0F0F1D0B3528B24DE5C85021
  7F28D4203F560BD19DCF145E8A28F9064C2459D4FC80AAA81AE12DE4BE12420641D1F82D60416C
  DDCFE782984955A10B576FD1A38C1652431FBEA0F6A00C43DEF505B15777DBFFCDCDECBCB846AE
  5701D4F94CBD835CEB98BED6EE73E101CC55501637EF6009357709493A3B3A1092F0AC896369FB
  EEC887B2DC9CF507920634A6A7EA49C5D06D6A73D06FCD850B49375A0C6E94CDEACFE6A345D0F0
  2220E71FD289093B0301CE9D3A00062E1B16825F6B448E2B97631BF7EFE74AFF831571DD8C6D64
  340D2D74983EF1931B0E8B1D1914DBED22638B4202E414BDC090B26BF37E9900D8691CEE82BB15
  CB2FBD7D87120DC1BCE6086E6CBF6E5ECAA3B954D5FB14F987F178A4520F6C0BD631A3C9FC2D7A
  27A87FD6466C71F99093D457B237807480A0BBF9B3E9A932F2B54DDE064DF608855B57293344B6
  EE678188C820AA974CC93CDD19C2AFADAB7109CC357CFB633C3AC6E94C377604A97143B2C46E34
  EBA624F9E8D0EE2F70730931D18EF48BC2E9D89BCCEDF440AD21BA0ABBF07F1F3AEE91C680BB30
  35E117FEA187699C643279553652859B4E4F14F108EC17C13BC4F4F0F1A4F3EB8E107070EDD80B
  654968570D10DD96E3AF3D1CE7E91880119C0C13BA19596B2762F018E4B5131C929C7B210DA2FC
  16100FCD8CDA361DCF91C9431D15CDF19EA61912DB91001A0ABE636DBB31BAEDCB65F8D40C7435
  CE8A188169F00D5CCAB0750EA37D20F18386072B5E053DD1F2C1C815E50430D084D226E108C782
  2BE4025C7B6FAFA4492D1A6B9AEC8CCBAD96398A3A028181059DC32901D9B65A4CBC970C11DEA1
  4564C832F41C5C278D97AAE899FD1581F0295EA908CDC45FBFE469730F76A665705B3FA8AC301B
  4030ADC8B08206693ECCCE509FBC9C40163949E45D2E072BBDF6EC17B56E39B49C5565C4928833
  44F507E92684C64BE24D370FD1BCD2E804FC32C5DC3C6CD2D2C8C4221820E7DBF24285E0DF7663
  A348C7A90BBECBDEF321D9128DCFD1657680C06696084A2D1782CFA4F5F0A82CC85930147ABCF2
  60BC54181A50AB12BDF5249650415A26D09AA1F55A0BADF12B760A333D3D35F15DAE68BE585605
  76DA6E572711F09192B1C50572BEA623EC86E33D2D5158516099230EF8D4A03F4AE29CFE2E419D
  ABE89C2EFF27B79A0117615961F8475F9AD70D2CA6FFD2B8CB629A2166106159095FDA78878083
  38E349CEB72069DAC742FC81267347D088CF9D76C993FE7078C8FCF3672C5688C6F6CADD6C1818
  17EDC6FA67F1D8B6E428608B667BF69C7D3B3E06E762756CD9A205102729A62BD0D065790E4814
  A2BE825BBE29467CF13439AF8DDBD712CAED51AE8023EE2EF3E82A32211C152A3B00FB59E3AD06
  169117FA059995B85827C70736E5C5B92A7A050AF586E4274E2B8EB301B1A44A78BDFB7A1CD5BD
  20419B46A7BAC72D8B76AB79F43DDCF7388CE69953B07229CB08537841753A779F8DB35058BCB7
  9FE0B92C95EF2F5BB4FF92A17CCC17C7547EE812BE02DC87A97B70A07B47F25096CF7FB28EEA95
  93332D8FD4C05499C0F0B5DC16B60486C7945A24C8F5EF24ECF26BE37DC1BD16CE08D9F96BC485
  73C1D7A8872A390A4FD5E23765845C68ED59456D66EB4BE697F454B71BF6E976BFD7C7819BDFA1
  4D8DD7F777B499773AC457902DC130544A32957E723AAF0EE83D46DC6AC1578EE03C55B89F3FDB
  AF60C8ADB5CE10DAB600BDEFB5F793B0AD8A4757A65AA493BBBBB603CFDADB0878CD83043370B5
  7F1C19E02D5EC43D7F2128C8FC9B2AEC4C8CB386DAB602969A06ED499954C0FAAA273BE17C2C70
  59895A7961C9105FECDC152A1CDE6814EBA6E3BFBA8CE110393E1046FD51A103BE194F4B9B5BF7
  12396DBA012BDCA0ED38F61394BDA8862DCD70C820D301A400B57F10F1117A4B09373E9BF4A72B
  E6204C3F56CB9661CD175F72B2351A6CAA6401CB569CE3339429015AB1C6984F518C6C0D6064D7
  A3DAF6EEF949EC633A67070D58707D6E6E01F266D3F552B77721A0D59E8DDC86F98833009D7342
  8FD37CBB0DE9C894E99662819C196E8A9FDCCE47C4A4BA1F1ED1D90DC230A540B26C218B9B30E3
  8C226A23B28823DC6D84D49A6E346CB2F7F9F71FB106A5DFB36C16CDFF1D651A9756BB3B0F00EF
  0A70D28DEC781FED5AD41784469E88ECDB870CF88CE99FF8B8C99478300A31DE8105455CD5A6B7
  6A3DBB519C87C1B61B15EF254B3848288968789C1F5D479B10AD9272FB77435766BA40AC988913
  07D8A40C14ED0B782934491ACC82A284A886D204D45F1D571AD143ACA7C7481FCADC2366F8AA14
  DE19B82574B2FD9EED7153A5B47877D3D579C74F8B91D5155AF0F34882C9E2C7EB3206B1B41209
  9E776DDD4E2E24FDAA98557E7C87347F56E1B1D6DB7861848966B6D0DD232FC2CCF89EBA52600F
  20842317BBF4F8B44AC4ACBFE0A4B777228237E52D22DE4A3B8E3AD3F864567F785750B2064EAB
  FF9657B3622E5D39F6BADFCB6903DD7DA935018CB36C69456D2C82ED6954E406942D0EE310CA34
  803309603D77BD4BA248C02FCE335BA95DEA94FF84DD80542966C5000B610A55918AC2CA86D837
  0C9C9F4B541287555D3B123A27A83545DF28C7970FBBDB7D7214C727AE687D03485EA555B4BEDE
  C4588F41F1195BA7518C66FD454A95DA6BF1444C06BFEAA75470FC5A9196568A9FC73DB2849D98
  871CE0055312847F376D7C105B95FB41AAE629BFE241E52AB913BAA5A4F675CDF2564630041627
  E2A9D8CC14489083864E8121DDF31C6BE9E0C1F28F2E43716B48B2C850A6AE4DEFE4C72B43FFBC
  7ADC307437041F908763BC8762C735AD2854FC4964B8789ED825B468FA72D2AEA6E0FB487E67B0
  8C30119ADD2C0DEDB0739870EA020C3AEFCC306B4657EF727C7B9D44E9EFA9D1E94EF45F0432A0
  1CA34DF372D1286639D3D621BBEA0A279DE17FABACF7C3700EE0AB96B91E9C65D00307AF5B7D3C
  C5FE44E749CC99745EBC1DAD4EE4FA3209A8F6B79D51BCB14D16E716E57349CC7270F7563DD891
  1F61EA3D587E0A7AB6D5F52C51CEEE500E1A5B87E4698F85872A78D268DC589EDF2359559576BE
  6DFC17ACB3AF21CCEDDE9E2EAC577921D4B664CB3A9916214F14E0EE0A5A794F52AEB2A85C1FDC
  75448F6E8B28583C84995D2353459539FDBD3A78704047A9CA4F8BFEE8FC414E6BA85F0DF1D97D
  0234DCE2ED68EE0E96ED572B66D1DAFD2DD2F0FE7BECCB4C851298FDB9F894CAD858AF4968CF9B
  001FA15AE4C7E38FE246039FD834CCEFC94652ED013AE6D4FBF4A419C4D1AEE18AD681E8CC8672
  4B9EB1C5DB13E839B218BF6B71AEF9AB230D37D8494A69705C470ACB47875C3880946546A56944
  981602AC22B37947BCD1A3614F8695DE3147383302C0F1DBD3A41DAD361381E25F51C4922922E6
  4555CA63B2F506E4C1EA7FBCD707A1C2879EE4E9EC48C0AB93FA7C1C9D9940961B6EE73BA29D48
  07CDD8CFE05AAAE724AB718B2F0F3E6C50F5F53D9BA572FC14EC63878AECDAF990A7F50EBC31A7
  163A517F11721CC862F5156A689234860BA2CFF19D6FB30E6272F8AE9925CA6BA95F543233B63F
  2EE746EDD725F5F2F51516F1DF1439F9062A1B2B3204434F2C21888D38A4FF676A6B850E3A6817
  0491F5323116EA11BE10A0490470F592044CD42AEE17491F2574DC22932E7583190E93D182FD72
  5FD6EE01A63BCB014019A690277E8E422CFA4B0A50FAE072E36F4C6F14193D544FBE216A78A3A4
  689A4C6ECB8BB149CB8F6EB6DB0029409A48CB7B454FDD796D638A7EC743A15EB5EE65DD93D6A2
  3DFDA04B8B040B856B766FEA465E7ACD05CAA8A3F13BA4D2B04AE5539D424BFA34227090FD1831
  7EAAA83528B3D40E5C108E39EB2ECFF231DA14E9903EFECE80713FDBCBAC9077344FA86D7F7732
  535A26EBD89A80649B26F247C710D725361278E7731870095AAEBCE9B9C04A73698A28CE509F9D
  A1D88E9A8CECCD0203C3A3B8DBFC56063ECB17DAE60C26A80814F71FE12B23EB15BA5743B4F9E1
  24FCDC99D47D8A449A4E7BBE7DE8CA36D946756DD0B94438EE80A6743E683B57223EC6F2062B31
  042313ECE2A8E646361EE5E278EE597D79CD16DFDC24034C0F2E03C54DDA9132B37AD93D598651
  59DDA793C2CAFC765287F7B943191B068B520CFACC134F47D454121EF1753065678760D9A6B924
  C90D7C9D432967E4DE06BC5AEE12554DBCBE36619C0865B19C9E939F286677D4649C62DC79AAB5
  24AC9B6A8CCA66C46C8EE2E5DDD4E113B8BC0E356867B001AAD992F1C85940CB2573621C9986B6
  2E830E0823FA46FB64AE9EA7A67CEBF0B8AF5D3AD6AB366E52D60B5036222DF65F5078F70236A1
  25A65BFC345F6A400A81DEECD07183FB5D10A2640F6D21D98B8C2E0650C2DDB8AD539B7719D030
  B220B91E17FF3A5FFFDEE4D66D0C4586D9E4EDD15A64393DE612A8A2087991A726CBB59176AE3B
  D48C79F0D7C884E833DAB2944995098257F300D27C4504E3ADA71F4CD9C306D82FA15C11FC7098
  1ECDB59E8DC578788317BBCABEA79DA888290734DCEB8E5ED8F7D51C64104281EE00D95077D4A5
  8CE902A8D3DB6297CFBAB9B4E0EF77DB323E34A52B1A938CE951A1989640EA4935A471D10749EF
  728947386DA5EAA9BE0117E40CFCD805ADC01EF3B152819BCD332DFE5FACE16C23669371E61081
  94783614CD46A6885E543C00355B1B81AC917D05325FD395BF6195876D4F46CF739D7482657607
  C7AE98C7DE6D397F6055DF67F1884836E2D685C8064D834A7718EB41A843D994E070D5488E2842
  3A30068CDF01F84A34EA2C47A4341FA98C9011FAEE51CBD98DAB25C98B78C0957A0FFD022BCC97
  641F858DC445715AB461116AE956953F2048FB1A990D7752D3EF1CB67697583681F96B385FD870
  3CE35EEE611E80DFB0A992F87BEB5B724EAB130B2553F4B0599E795C4743AB312460B65CD53DFC
  648E853C032F0A9D760F241F6174710CD1602CD78DC405316B0DA43D5E2D4EADA1E3688F32C6B9
  4F02EE29ED79848C459891187432957A0F428D256E015E86C12E68696AFA4D890FB842254822E0
  79AA320BC1BD480C0A2F276D833FB3C9D8746B52EEF4D0DC0B63D01F61F9512C0DF6E911A4125A
  CEAEF49AC488F1A395843F760DF01838339AC5B53E760EBE256A04F092CCEBAFD9218ADD4169E1
  82D2F20753200859A776B236E6E5400C4255E7CDD22D1D6135480E16592FB680142E5ABB09BC0D
  7B643BBE0888EE5D5A0008815748B2356E717813AB3AEB20A58C291C4559083EA547E6BDA07521
  342AE1D489F0EC7E9AB4A24AA98CC448AF3A198910E46CF829CB35182DB53CC04EA000E05F44BB
  495A679736E1D3AD78859C18A9C82E9B6DA96ADF439DAC12269DE2B745841525C5B39DEF3FF4DE
  405C7FFA30C29BF9EA979B9741DD9C0720C25BE42DFF13BAD91327D15FCF90E7588201B64C2E73
  DE8138737F1B4740B3C54B78FB4580815C5D47AB1870A548DBC20D118F8A8A7EFA5D5383D7069F
  E0A3F7EDE43AF1E411F3E419F18F347ED5153D9B8AB2EB584DF2A8747060145C074CC2D308FEFB
  B63841EAFE56C905B4A4B13A9FE80E9CBDE42DFCEE6A3F5BC986C2C740401B450939A6EC44E58C
  CBA7955B7A29ED3DD28C7D63FBB04F8FC825A60C6399DA762D045C5182F240A8EE7AF4F4040390
  9942C8F533B3BC5C763B0DC95A834D1E5EF0F90BAD07EC07380E75A95F57B8C1C46A28ED6A455A
  3CDB05C56981DA10068EB0BD9EEF0B3B31A76F660E9D340D377B3D8B6068A7228F7386D8F0D410
  3701DDFCE5F678CBF6E70FDAABAF86B95E2A731487DF06B4D011E38120BECD6B8C9DAE22C98C39
  1FF8D019FAC578069F6F9EAEEBDDC67AABD4126764D16B89E4F8A99C93A961B93122A4D9B389AE
  1C664C3388E1E7F9071321F5A22D91802B5B96BB89AB7D0D853248B01EB77E52B26463AD317F78
  47C62881F21D2578CBB2855AA02A50BEF5579D09AAECAF59835E9E949245A1CF53983E67CD5F7F
  CA5DBA5F4BA741E7E49C406522C380A50A3633342042EC32F80CDCFD725C9072B271AC83722F73
  4B3A98F7C516C7CDA806A1FAF97CE46210C4153A844A352791E6AE594619F51C656CF07B783D61
  64BFFED8809A1E502A533CA3C12727FFF4852C098D1C2F0F925B3A029EFB6FFF80DAB8DCF7C9CA
  FA5F7D958A8504DBE2E7A2C3F261D736CD4894FE0009C6C24BC7F7A9EFD12E6AEB4D1A60AD6257
  4B8F8B7C54954ED1CAE95511F16886E5109A9933D84FF266EC4D94DA89619C82D376A63507CF4E
  233BC70BE0D660B6EB472F4EB6B8D85C96108C5D02D0D39A6D02429D60D010E1C13A81E1AB0012
  9FDDB1C0900EAD7845B30B1CC795520A343E0FAB8BCE4D9F642EC7F51846F5FF3B87EEC40423E1
  A91931FDF73BAFDF383E55B255566679979F37E256D606121F0C3116BEE00897A7C1C2980C785E
  A37E05F2E3070181F17D8DF9C1040221970F628202ADFBCEA6CCECDA61637E40ABAD6B0F639C21
  735298F35EABD37FAD3126247309EF9570AA4D7F2AFF959894C089D77878EB5D3705F8FCB748AC
  00CD77535B672FFD36E162D85370139C0F8E7645A665C1D23C6C45C0CA06A89F2CF2F23C27A5FD
  070F575439A5FF88D9235DF579D854962E025C347077256A5F4DD3C5FAE10A5C2801F93C08E022
  9600CE5CB001CBF71E813E116C56147304976CC25801BC0239EE6D12AF2D2A10E728A4BEC249E0
  BE5342272F6A508264226CA8479BD946E2BED405379D0748D4A707E0EFF6175D5E57117A04FD98
  C03405381AF44333FD7346DD7D46F71CF5AA1A87205EEF8D7B1CCE971F9BDDA467629BE1556CA4
  FE479DD77380F22E93685C12D641EC3227FA98C90D9265D7504B7CDB3CCD092F4AE0487E89CA75
  DC017DAF9C9C94778FDFC7CF2419D317AEF2D70857E527A5F49FA26FF3EE577A0A44EF541C7D64
  062F7DF3EFBBD0FD7BA63F5D4F1FFF4013F149215521F5E91092553F2973E0BE1AFF6B5876EE61
  3A081917A4198292455DF7A337954234E2A441275E5F4A47EB19B3362778BA70878847F478E341
  BE09257DD9823BB058512D588FA8266911C5846EA5AFC886549538721E4775EEB8354F64E20DAD
  4B9129C6E9370241408BA4AE1E09059A0F2C5E4443FAFFC762D2ED2CAC9F6EC244666212178440
  A2D3074A8B5DCBD810FAC51627A81FC9D40FC32581CC1BA438B50865050765EAAE1F1E99C1D89A
  A6CD3838A5459FBF8DEA20C9531801C037D5288F6CE19AB8073B5951D7699D3D3C7F937B5B521A
  35AE12791102871A0C27AAEF9631192182A5C40B9C83959A96207802DEE92611FF3778664DB1AD
  D309BFAF5EBAAE4B8A4FF008C0BE42F1151E9D1F460CCF018C42703E1A2836CCDABF26B4744DEF
  9E111C4FB81FE89B4B9BC15E2880857EB34B21952C55F8C62E8254EC300FCE1CD5D46657B902A1
  D81ACDAE92E4CCDBE4C39DF747BF9CF8B1CFA3314C453FDE23F52E3AB1AFD66AFE12F6DD53FC5A
  F236F1228EEC9DC8C8ADE81733D6BFABA66989EDC6762475F0E70228009D1301DD5AC6583BE108
  37D90EC1D0E4C543DDA6645969FF34C7BA21DF2AD3B9527EB104B70498EE9E61FFFB2FB3843404
  F8DC322C8946359464AC057370C76A90ED3C0254D38EFB516B8B99E1560857EBB5CB88566AD269
  56652F1D334F01FC8F018546A7F49FD17103BB5EF2A6A3B6C26F9CEBFFC7419D71F62AA5B222F9
  93EB5A227C73E310A3F34C19A3F7CE9A10536DE50BD81C4118222C163D0CEB8A16DF6B4EBF2B06
  840DED08106F28DF93E33AC2C4075B43723690F9C890D4F91CF5AC874B4CA7BCE2F2962E532526
  F4DAB744F83CF905AA4377BE6F05758EB44612BCBD52A5692B60BDE10586A1113005D915A74DFB
  5E419210B2E5A86E5814ED34D5DAED6EEC3802851169615B6A2744A5BCBA5B67E933FE2D3D7398
  056D7A316A4C7D0A7790405C7A3D0517E174831AA7983A87FBB4C5D24F2DFFBF8577A8B30A209B
  27466732F600B60FF503AE5BCEF08B29A9715EDD7EBC3DA4E15218B76D8FD60664B61E2B682B1F
  56CE4B5B13AC1B0EA4EDD6AD77244AB166ACC23B103790FCF32F41B7C1E15D786A85BD3B81A44D
  3774387CFBD41B43B4678AF42174ED76B9C70F4BC183D01C525ECA7560A7DC12E0804F8A6FCE05
  760361B90A156915EFB95CFC55AD4DF99D77A6537686A2A60D9F926DD9BA3FBD8B651D5B69BFD5
  ABED7D2C8B32539D75134615761FAF783A6EE4C31B47204808C9156A6EC2D70049DB35A7207447
  B346DA2435DBF46AF7B24C6E4BE1B75B30E5F68683A03052B05BB2DD75A5127CEC4FE11284F03C
  A9C4102A9BB0130EB99933A7479DB597960640A3EB90BF0EDF89D93A8B73921E9E7C4F782EDFB0
  7233772D2343D90E1E581FF20F5181C67E050A14AE40EFAA16FCD62FD9AAD419E301D6893E2291
  8BBA31345A9D947208EA23924B9257EE753A7104E41EA10D72B6E72E507053AE35BC20AE5F369E
  B0D780E537406780A55AE7C113A81F4E1008FAF276F598E276399B4DF11AFE51CF8D22A35B1BCD
  247DA70377CBF7A96E8DCEC19658F88D6A214D3FAD356BADC650A41B36F12B11EC9B149FB6A491
  10DEF203B8F8672FCBA317974F17EBAF2C81CB398A06B62F635EE010E194A38ED4AB30C7E7079C
  AD51EFBA8E069B811A35B459B3537D6801D747BFDEC5F89F465FD296CE396F8944922D5F82A12A
  ADFAE34B6D723828C8A30292E9E8AD8FB8D97ADBD9AB22E5E45523BDFF4C1723688163BC7ECDDF
  44052B696167C0ACA1B4A81135E0B837ACCD22DABB5DFE46765ED4BC0556B7FB27239812FD3089
  FA483EAE60C10CE6D3B8FB0AE33F07022F96E1B95DC818C67AEDA1D41BE11712548D0568A062B5
  26A4569B9BB5F6EAEC2D176F924ABFC9978E3AFC427EB2BA46C768F83E86F3B8178704E6AF4AD2
  EA4DF47E8989F327D85812790EA888CDC920D15B80E51F7CFC44A1189127D2C9468D50231CA805
  03DF2C2007EF27DA9C498C778F3837735EE5EDAC47F4A01C2A391BE023004156652349F062B1EB
  504E5ABC82282A423E47342002009770D646EA50F933F0BC5E6143FA4B1733DFC6DF6ED7DE6DD4
  FB8388C7CA81C9210EA0A98B0275B74A0E0F510C90DF71C93B3A9FDB6A86DFF2921382352C8FEE
  1A0A2E6003B005465C1F31B667F5BDD9ACE74531D0FDD56CEABBBF5E0A55633E28F750A7C2571D
  27FCBE1B01C387F6F36D225A30C68BD185843F487C2E98B5629A6287CBAF2267880B2F48596320
  D7A1EC87DCE5C5283E034AF582F592B7E0B185209AB07480A98E676603F7F92F96F9AE6EBE80A9
  5E625EF7F4B469458B2A7DAA4B8FAE9103652663F353C35F88FFFEC41296809D52104E1D629998
  735E1CA4D36442BB8BD6C02EE6E27374B25CBAE97051FDE7E3EB81EA7F6D8CBDDA45F29232456D
  C1C70B60869D63A509E9AA33DD00187BED5AA122AC8ACAE5B5A02C85A4C0B68193B2F4355EA779
  DF44F488272E92297DF1C8E7FAECC4EFB031E0232EC032F1ECD4F6C37B6707A28F1CF9A2683FC8
  3B9725F1948D020931065CB521B34934D2CEFE9458A1CC7EC5528A183F270AAC08CE8184B90482
  6221CBCA4DAFDCE880D391D6C4D8289BB45ECC73C94DEBAABBCFD529ED9B5FE55E5D6A48EB0969
  EA03E15B8D7DA8D54CB15E0370C8E39CB80158C6B7D40C2951D73345BF3D82E49C976A0E918B10
  1C22FFD551C685A3C7AD17DC9915A80815EB114550E9BADFAC2EAD17C29D0C834871CD88563F9C
  C2CD8B190D02EE346A82C537DF2999722584A95845BB367E4F7D675FD067DC42FED595473C9B55
  1911A54B14DD130BC7CAD78C469DBA966096FA69FB9027C1542B8B95BDA4FC22683DAF22C8EBA8
  E358929EAE6C198C7F9730C5D3BAD63196515C4BEAAD27C26844398BD64D750BB06A240397BC91
  492ACE0DA7F6050BBB15740DCBBFC2DC67CC740AE8EE915192715BD472A45BBF33AA5E3E93FE6F
  6C39E09D8EF3068D3E7D2BE768632B6C2F1F2B0F08844C5BD7AF2EFA6CED285646750F70EA819B
  18B0371B3DF7BC4DA2B90E8FFB9E3DC066B9ECDF01A02BDBD882AB88EFD7FCF2467D4B8CC32024
  1FD68C6C9742C5E250BA662A856DA7194C0ADE36BDFB36562C29132DED3BAA0A87A761669CE3B2
  56E11A6CC42BDC6F0AE09F87C0D7FE688EF8948F69210ACB148A93F59FC2EF5B21B8E81B71D185
  D37E0CF36B2F33BBD77CD36047E9988704B0629FCAA318000ADFC4B370FA5B218A161AE7A8D99B
  88907029BC83134CE9F92B21735BA15F0FE547EA79F5B2D8CC96D10E1B0373A13ED18500EEF460
  DDF2CAECB0F44A4F88A6090D660E879ACC03FD85B4909082DDFB7C90428E2A9FE8B60377DD1ECA
  3D0885C5400473CF212DFC2EF3099C73A37B3886DA8C139FBEFF84911687D1DA963D0E9690BEE3
  F191A5E1F7B9D3FEB0A497ACACE68D42660D94CEA5825A19B65C1A394CAAEB68BED5B886F94D70
  8407C6DFE818448A49AC3A9BE10C8991BFA5DA3C94BF608FECCC0606BF6AA0F1ED1AEFEEADF0A4
  D5226523C4C6A77F0FC9A6C7318826AB8FA286324228ABCD26D1DF2FFF1650BD71879AE5D92337
  EB6EABF9A599308899752219FF8C97CA72C11246DD111F348646F23A62980F6445DCCFE035AA4C
  5B2E973A787EF8EDA260BF8298794B76FEF7F6CF79DCA923F9ADC2B0524D9A2D4D4269EA709C39
  5D75E3F23F92FFDCF7E8BF8691D52DF133297E4AEB9B1668AC097409428411C7887427DE9C03AC
  1F229BB983325258E3D36E93D300F3A31E1B4861A1A31D61731359044FB1076E98C2CAF24C77D2
  459356156E1D9570D9B7F8ED30E14C95D8638AF5410EAE34C41A35E552802248DA923BEAA153B1
  4E62735BD5E09E23E5616F10F5B66FE1D238EA59E293F0459043E42538E17AEC76BB09C4A6353C
  30E4B756A89E40B9D9CA6FE1D40566769CC6FE3B14428997ED4A24B23961EF21A61D879A2967DA
  CFF909180F52604AF8C4BD47F6A9474C42A752861E832B7B93161BC1224B8673A53BDC7F663BCC
  DC71A9ACAA594486607C180C30384881C324554357685C149A0D96AF6A37E4E3D20D5021F11238
  1D4CB1F8674035071FC634638076C2480B0EACD306A62FD22EA859903F2F30F1F99C87F3245DFE
  A4AB5141D280C5EEAE69F44D47D359A011A1D01FE8BEAF3B43478F8B47A4F37508861A2DDD7708
  B9D4742B6FFA156B64EBC0CD8FF5624FB80902DCE59B7806A43C862006869D0CFCA3EB13473952
  492CFDADE1E458A55DB078B1EF58DC5D6C303EAAA415F43DE9F19A508147FABFFBFAB69862E527
  19523DF01BDF22CA779D587055D37539BBF8D8BD6853E4E699E65F7EC6E5D096601D09340BD116
  38544A45AD6E58663A1C495DCC1FA79C8351D69D298B498382AE4725F18F86F315C588BED8BFCC
  6655CF2E4ABB439281D199994BF21E47A2E84DBE37D3637DB32E961B5C40BEDB345C82197D324C
  350BC344F2EF90E6B496BDBC1BB4A359B70633B0A35076FB86BE1343CBD39E6DD77671AF671CF4
  364C1CD9BC7BC151FC0FEDB137911CA590F377B35990099AF3756C1FF218656D1769B2E5ADE7F7
  571E7132CFBEFB6F0BCD9F4164C33738CA62934E138EE5A5FA5E81C3C1E04D1C1ACCAEAD8D15AC
  4FCBB0FFEBE577342272A8BE5FDE606830C0289ADC41418C7282B0CB5234D8B75D668823A32B73
  E140228E8E803115DF38D1D6213718BFBFCB22B0405108A5C8BD3009D60BFEED1B15E7A5D21F11
  98F091E11B839C2BA809A22652F57B3007DEE6827AC22A96556394CF9051B91B1CC42A20EAFB8A
  2D3F95B7090DA79AA3F4342045EDE247AC63D8D8006FE4C2A617C9B0AEBF2753042473762E5050
  20627409AE8F975E0547C07D414105ABFEE496985C3423E1F3AC71076FAAD97783CA4250951AB3
  379B4562F2A7744F41FC40E045A796A3C756981D7F35A38B6A57C12B8F8772EF0753591C65F632
  729732EFE7F053C27A4DAC9907FEBA0403CE8A902F71A278DE9A5616463256914C1BD117A66B8D
  62928A00B7FBB66E33299D673B682BDB6A30790C2A2DD06F3D82E19CF49C1B9C676A4413CD4E70
  718F92FC0089A7257268F75CB3E53F8D4781C37E8D5E37D2C919C619A33B4C7141CA7107D1DAC7
  69016355C89C1DF2DB782723B71357CC0AF674F0F36E18485088AD08B8B995D5A9CDFD5070CEFE
  37424C2909A38BD66DBE6440396D02DC2980F1C013E9C2C161F927C7B803B34EB7C57FB2349FB2
  788515885B7B2E5BCC7001A108FBD473F34810C2774E5493501FA2882BA5985EA9AE84AD076807
  AEFEFC8081AC8B99F8837197EEBD2D734EF78086F020091F44045823CF70462A856C5921583DB6
  B209473494E78D1D81F285B850052B1784373DB62FA6CE8EDFB70EACE4C2A01CCA9BB86EC61E54
  5E4399466233F7714392F53EAF823788E7F475E066E718A3A54A81805058B31244739B9E3D5BAE
  D896901D9F014FF62728847AB719AD2CA332D98F99532D7A93C7030271F5BA5230095BEE8106A7
  D33D16D2D3BD76064AD26431922B7CF433BCF3AF02C53C59D39872478227E645828F2FF1C4B3B5
  9BED9F8061C74F79348AD639C4F3A67E27FF99959B909E3ADDDF985B719359F803938798E36DE5
  655448E65472CCE2D6A7537A5F855A5046C5D7C64D77F636E318592B3040981110E664FABB5FEE
  B9B14C48D74E7A4582274D3BE07E8D67C2F294D2591796A2880C3253060BA26AFF00C503D614DF
  72BF8B91E80E722C5F4F7496A17AD6B5357DE01C5AC8136A3F4B7F722D08EAFB3419CB76638A29
  BDF242BC6ED4FB7127D76F51B8E77850C77A3D9FFD94E814DD072C6AAE901F1CB99961E79324D4
  AD0D97CE00F7A4CDCCBFD7D5A9A82270B2FC7E88757747FEAFE917ACC9C07507F2C87530465B2F
  7BE3B62047F11EEB0FE7513C9A7ECBAEFDB678F295CBF7B55CDD07FDC11A9764A31C1A77887D3C
  F9C13DF7D987E725C4BD1E7F80A8438F54FC3668E2CCAE42A58A08354825BB87BD1424A1919973
  3B49B6A3A5467B3A99F70B63ED38549168DD5FEF0A6620BD5B8050968377C7ECC4DF6A43C852C5
  72339C0E54F99547240AAF9487B748CA87AB2278B162291991556DFDCB595C28DB05D6D5510824
  9613DCAD7144A1EC6DA259E16FDACE7122CE1A171FA0346A9155B25DCA8E6BA7300451891DC21C
  7DB92E3AD2183BB4DDA70C669F1F55FCC191B59823B017E55D15E9C0EB799BBADBB8935AD90CBD
  FBA156CB503A2333A4EBA92CA2DCE92C5B687A4E43F73BB7F09B62FA6BE7E1495318CE4E7BA343
  D08A7CB53E32B05F63D836D8B5629651AA4C2DC68AF2E13F49276450F66B56C1EF299604CF0933
  4C7B154C923D4107D055AC7EF0F28478FD06C54F663B170DD58A41F293904EC7AAF6C8E4DFDCC3
  7B08702BBD8FFB33B007044ACEE7ACE3464D5433A53AFB6B7EE754CED830A1C540EB5778C227C4
  5CC7BFB94850544DE6C0D1960874574284B1D0256BFB7E5483FDEDAF31ACF7822A2B9DD27EA1A2
  BA891D72C9AE28F074211D528758C6E168FBBB1274199289ACA037D1A641ADED7F300A4B27C954
  63BEF8A9BD49D496300655C1ACB70A2A3FF89E065BE79F5F292EC6F6BD6F8987B7A8E2F6642E91
  18ABAB71DC705981C30C51C7FE6A10828A8EFEFC43EFCBB6BCC5A8492E0169F03492968D7F0EA1
  C4339519EE36A1E91034670A85B193F5DB6037C59B5E46183FFE468BDCB794918BBC8AEB2BA715
  0908DA0B63653C0BDCCF80BB64F36D0E5E8D4685B80CFC7E3E6F4DA4FDD4BB8CA8DE4ABF16503B
  D9F6C3C3B6F8F9CB292C9DAEFCC68EFAB16388AFF922B32B5257B033C9D8FC078AD296D49CB8A3
  3A32AF01FC192BA792C3A15E6C5B7A4AFB1C2FB00DF18076229550ADD4A991037C5D91B7CFD4A3
  5D08E8FA85D16CC2C48F3F32BA894CCBA2C6A3F964BDCB8BC4FB9226C7F8899900C267C70E3ED3
  C0797FD7377D3044D43C0E8172BB0FB746A706296D70CD23A5CE25885158C83FA2C9F10AC1E0BD
  8C88DD6D581289CE14AA88B102A47D4E52546EC6FFE7E8450AFE3F01706B2E3AFDDCCE4DAAB431
  5638E28FA4668458CAB2466768C1F3F8881CEA9E9A7ED57AE7AFB53DC590E601AD11ECA0E5CB2E
  4BEA895F6271B875D09EDB9D5B8D92647B67954824F0AD4DF1CC9E82F97DB638BB17322EA26C6E
  C4A5E02433D11B6A37D2AC10DA6D1035B23F1C6C80B7C382F1EFAC4622C040D108EEE91C397CAC
  E1EDC761C1EBDAFFCD6127B48621E666A5A5C33A3BD4F559C7C2CA7FF3C4BDDB288A3043E09441
  D35CB54F1218FFC4097D1FA60911189496A16B40D34EDA64A9225EF00B875885127D2A441DECEC
  B2BF6F14F6A3815A780A4DFCB6227C7355B377EA61F928E94486CDC0D42EE92494D5063ABE2DCD
  4D29E8967835BE5894D38F09399E70418D21DBD8AC679367EA9DEFA70BAF625F94F56CCD1DA6DE
  ACF583E9763BCD0EBCD9EE5810CD9330FEAF5FE60BE3AF8A15A1D58CA2A9B0785BC09ABC53F86A
  66CCBD8815F3F8B9B18396B045DE3B4A00D59D47F52B52DE7A52AB26F5DDA05E3B9751EE11A6F7
  926654FC7F909EBB7423295385044B8C44A2032031D462049FFD77CA8F31787268F64FDF00397A
  A89494308AD9EF15DCEF55BA0C5AC4E4435A52D2225BFEB438C9230CC6912DB18FCD0A6D7D4C89
  BB6B69974B0CDC28D0974C94C05A611EECE866140A00F4BF9828C5363D9A6FA8FC974368370378
  2EEC189B4AB960A8BA75EF432D7F7B8051B2D012FF76F1A55BABA16DB9EE5C9BDD57DA9A87ACD1
  D1872EB5677A14CC20F83739D95AAD0B3F26506976B1C822AA8CB4A96960220CB2453DFBB6EE67
  67FC6C154EA927FA01E697D2FDE73F9840043480A584337E7F466F5248570841A7344A37232CBB
  F088ECBBBA9ADA89A8B8D00EA7AD8FA02A4F79AF21FB8FC487528E3F7B31F11C3F2646FD78155B
  FB10245978554D8C95BA599252815A4995A507026348758626CA386F31748F70C2DF1482B6C987
  5CB7546B3B1B756F3169EA3589A1D0A543FB165795234464243A6DE12AFA76D577EA55A4B764D0
  21BBB4F203ED66A4FEC3B51333A57776A2127DFC59EE28229200C9B93A1FD1E84B9D5BA8A22FC0
  24C844FF8351256EBDA28CD78C9DC782E5BB85D188B4FAE6A427C251BE2C794D8C77CA39296039
  9EBC8BE84DB9C78319BD38A441158A999A74B04C4C5246D6982EF7DCF8D8ADB304A8511267FFAC
  C1ABE46C9EE1CBCAD63665AC606CAC7D56E9BC3609B3EF72176B49B63C90A0130CD183B90A6A40
  796E4CB9091BBA0FFC8D0F8CF2B016800B1B439B5DB6FEA0C399F8C1A22B1896E0487A08476F65
  F505717AE2BCA312EC891BAF95B43F49C5F71C3BF4A8B3E0E37D93A70D06C2FBBBDD77E7A0637E
  BBDA27C27C539EA3AD7936E4544583DCCFBFAF737A61557B0FED52471B5A5733A1558C9B53FD57
  D361306945A6150D1C0FC5EDF521F17F4D724348D5EFB86E8FA808D2CF01977B431D3E9F4E8A3C
  CB1CCB4B1750CA2936A362A610B05C73E382D76118024E58ED512B212B1DABEECDA7196C75BDEF
  3049455278956F60FA00D450729CCD0F01B4A63AD30D92B0C14C158B183647B655AEDEA612CFA0
  BE89F79C22F1F2D6AAB20CC382355B1159D16B7C29EDBF06E6831B395EA7A4102C99E400F911A3
  F306589C5DE6C3FCCD402B4E25E85C65B301C396ADA09D6A4577F38D21EEA6FBA8D50B5FC31C95
  740A9A7446B9FCB5D37ADC301000AABC7D8EA8DD59A63DA0FA8F7038BB1D9B2948635424C80BD1
  CAFCB11FBB85497BC4C3BCAE2A24B9373CBD005681835D6FA7798A45FB01C51DB842B6D4737901
  8349AE7D8C5A4805028B1DB4F634869A3BCA06029E8BEA02832397627DDFE8BAA44B05D5EB55B9
  2655A387E3407308E34AD2038C78037995339E047D9310B8EEA85FE275636D6C5C19586701FA21
  EBB7434A4915CA71BB0E833C16712BC63DE98B5209B0A730180C5D6012FA81EAE001E1C1E14D80
  34CE642A31EFA12B3A15EA53BD89C492CD6670538B7BFDCC629ACBFCAEE4FC4CEA070CCFCB7560
  B4F933E3D9D259F70CC3697901929A1F1605EE8A0E01EE85D4FFFB167DE6D916F2630DEB8CF317
  F494C4CAC3EE73BE392EF96FBD232E4A776022EE04146552F0E1D66B4BC14302986FCEF76F1B7E
  196753A2B4BCA87F804896B7392FF8E5183448899617F020386E688E7E26286CE5D060B00B485D
  ED264D191A5B528A4E516832640354C31D61EC4F7FA70125B5C6349FDE30694E9504C0A080D252
  B922305874F39354A0FC1A196021E29C516D62A783AC2594C28F69F6803314F6745AE6685E381B
  FAF83F14B8464D7DA4198BE48E76011BE6B3171EAD370CA699E7076071B2FF1856F6BDC61F3F01
  034ADDDDF56CC4914AD74282859C632B9B14293CDBBD9FF8FD4403CFDB761D3CBEFF84391E3D5A
  06B5D932DEF0861EBE6DD885C9C31DA765FCF358847333C966FD39E5000E9835A35F3BA93FA20C
  4C459A8F4DAEDE2C99EFBA13EC0B82AB546CFDF7A97879642D97F69C21737B22283B636494C9EA
  129A161BD8C9DD565BFB2A35503B5BF8A95AA69627E2A1BBBBF5BBEAA74A58CCB11F7CFA420B5D
  70B3E392D54A52FE59EC9A3017BD2D83B4E90E24D9FCC6D816E975544B96BB1F4443CDB81918A7
  7FDDAB25D9BF72D20DE17689121EC5757BB18324AC0D5F324DBD89B72F2271FA362BC8CCACFECD
  CC25331BE8AB8FED46A6E691F3AA6B0701F582CA8753F648828CD3FAB6E43CC92A924F245FC608
  350F82CAFF77EC9E2E24F985436ECA4AD84EB24435A5C4B330198B23E825D1ECC7DC5582886E90
  D2EA7CBAC9037B11B156ADB8110B6FB795BFC6D397B39FF79D8FBBD42A00C6020C63B011CDE2DF
  269F4754E89CF3F18F2B9DEBE3850A86AAC0F5006B528CE30BFF055110D8AFA688BA3B9F0D24AE
  50143F09D6EE6926BFA2E460B5B3C486F3810C5CF68F67FE2A9DD7FE9B39BDBB24D6E59D12108C
  5016007BB9FC22791622C044132BE6BB8F7F9C278C755DEF004E310EACD8F39933A6DF56BEBC5F
  B72B4DC33EB255B645CEDFEDB900B6E8B1FAA4ED152222A3E6FEA8D8BFC7C477EF8D7557B70E48
  693F8C0DCD118EF544E782C23DD3AA3D66C90851AC05B5818831E3AAF1C4DE9529275DFACAF48A
  2A87BEBCF4EE948415341227461D8627D2187CC9184DD3343F554DEBB268B65AD8314996BCAD55
  F75B5983F62EFDF10C580AE478B6C3C92595490A9E3AF8D279246AFFFCA3F3F7E79FEDCB652CFC
  57CC31B89E18AA6C5F839DDC3ECCEA0264794CA316EEE24A93A25E2DD12F0115B6CB650227FB26
  30AF4CF55F7AE4701310E11636A39C9FD1D3436524C57AAF409D24276DCC0A5CBE47EAE624D814
  A3A094C5C960C3566778E850BA04CCB58E5016CBE399A201B788A448F9969CB1C89EBD958AD83E
  4E9E2001D5A7120E73DF0D722AA3DC1CD06F11B2F8E911B794E50B50FAA29B49AE01B5C361F08E
  27BFF8DBC16F4E4EC034B3AB15F06C08C9EF4B5B054327BB3A5D25E41F3EDD53E2FF4EF38413EC
  F5E693225C255A9E1F4060B1FFF8E38357D06549C517F458B62A8E123985988726DB8DE3C9DB37
  8480DF0D731B1009516437512F2C7F898628330B0B2B2960CF815AAD9171E8097C933EAFCA026B
  1EDA2FD5E1E5FEA1CD7604124234CD04F50AB59DBFF1318423E4FA6FCC6B7E91E4FBDA149404ED
  E8E13993F65F12ED80B63FB137717990F4502A61C00DABD9345E94F043133ABEE22D2B7FF0DF21
  C4195C3E2F7ABD639941E47882470A6CAAD0B4A8C96B4E4E1DB918B8A926AB40E1859D719FD381
  FDA3F1490076EAF5D17311CBB59A26D198CF036B5D6A551664E2C206C910F8A7369183BB95329C
  097A7DCB992507F479CF546D645D52F2BBB452EBCAB40FD4109464D160B97ACAF226DF763FB024
  9AC97B71F735CBFA56D2E6ACD7710CE9BC2189FE53F5BB41C58C0FF1A1C5442FDC76D21E6273F4
  1896D7394CEA6C7500950AB85FAC5C8D4CF1766680A0CFA243A00B7DE2D180DCD1417CF25D7A30
  5A1B17534FD1D8595FE704A36B402F868E534FE7CACAD039E13CFF4CE59D382C107FB9DD98623A
  0FC04F9337010031AA47B7938F111335EB68AFCC86E477D5E76A1E4758C7319938944850E71333
  0F20E9A9DF969173018CFF594871676420136BB1A3E0CC89C2327F68B0A487D95463D183ECCF07
  4BA6870EA9332FF8B264AA779650A00A04CD5D443CA09453DC961D3193BD222D1F80BA0B9C4162
  D20CB801B1D6E8DD3D97CF05B841BAB3DF22DDBB06DD6A682C6A1E3CE595A28CAAD9840757EC6F
  8BE66D6B9CA3F6EDD5BEB6324873C0EC7B8B108731F3E6BC6588D69E4C7573D47BBDD93D03E050
  076B9A0EEBD7C020BDC64127AB58424291B1BC70A9F3D326C67D93AD24F67CE9AE6BDC829D7DD1
  61EF3C1A47991F54A807C08AE0AF24D6B952E66CB8E9196EA00F3AFDCB1413A33763E24109759B
  CDB59C2257C2864C458719BE17D929911C7FD72148815791A12EC2D2A3DD6407330CE0B4DFC3A2
  440FF0D6974B92B81FBF04B0FC4E4429B009C388FA8FDEA029AAD70151F5BF76B13933D3F55B5A
  C00DFDCEA91ADC73D3DCEF29EC261E07B96421E64865FDE1F8EFB7B5AB1273D5C2BD5261ACEADD
  7851504D19A91F295D664B440AA61636B62D02A341CEF145920C396C42244CF13EBB21D4BC85D9
  95A57563CBA0D4D046AC0B0D1B40D1BCDB26E5AB86A1720005504BE3D73EE22018F3642B1D8CF6
  4596A15ABA888916E9F12BCB15EB823337DE90015FFF5D1B87DE84495F696BA7E1704B428133DB
  54916A4BB7E31BF36CC74AC1B1C1AACC176E44B45CE6864EBF724D28819CA80FCD1BCAC9C6E92C
  E62D304E2D18A3C882074DEAFEDF1C55104F629481E6E42EE45072BBAB3074EB5AA1D4958BFFB6
  E541FC1849E6F5402165F5C4F750F72CFD90BA03CCED7C5014745B0F9642E271FBF6645AF430D0
  E92984BB4F96C993E3186C0D8C2897B692C0A0D198FF9E44C648FC2723F8D8A547F7ED08E89E02
  C00D26A50BC8A1C714BDE534580176C7F5D3153514FCA23C2D9CF3B6EFF7CF683712BB7AB3C7D2
  A3E66427ED0B625C088A2A57EEAA2C467FAF0AC5728495451ACA08AE5506F5410411D2B0912D3A
  F6A391FC7A4D7108C1B2FF0D1F9D09C2396CA85ECB4885B386F5FF5061AB78D9D915B2D3AA05CC
  192CE2751B8E1C99B043B24950F25D58BE9377DC1B9198C5DFB5FD6A0B91EB90A5F01257ABB15D
  DE8B375B0DD55CB18B8A42594724844FBB89FCA2215536BD9CAD8661CA6C92E32AD432F581383A
  90CDE05F34FAA585FDE7DA42889EB34752AB26D21D13918BBADC23D9C35B88C6FDE31EAC2A4295
  F4159CE1CC942B9830129A1B9474F154A175F3A71D86F1BDB4BBF15066948984B4FE902C3F8F3C
  0A46E6A51D86054D683C0A11ED0F151F7905DE73C589339153E8B4708F6D94CE02581C837C41F2
  D65556F5A706C06FFAD43669CCDDB2FFFBE01DCD46380EDC16E08945EBD749AD2AEDD7CBC7C2E2
  E3E4F666AAAE7A718AB5FB6A67297D8F9FF768FD216E4DB4645383EC452F33C1043B23ED9783C5
  C76331017EDEA82E29CCA8F436DB73156A71333E8851CBCAF2A721B7A57800CD72AADF40B6620F
  B932435AFE3FE986720FE713D424A3F0E936168960E171B9B5B8721B699C39B70E42C8E0430E66
  9BDD2870B7C4C66440C106DBDBA7665838F9C6CF6746E15DB725F500AD3D3E2BA2C7997FF0D513
  C91BB5C4824D51B89E7FF3CE26EED35E9A2DDA7420026D89674F7D3184E6C76D4B6D32F28B170C
  A928B58CA925E69F04A22E85E1EBB862C5AB0996F05C62E6DA8DB0B6195B72D473EA23CB8F9900
  3C7F35D51D480D0547BABF993B9235493D447232B362D382FF92BA13559F69A7E95C17976A5A1A
  979EA687227BD969D06E73018FB097319FA62D7CEC8B04419DDB4435972382C04FF9C5705DFBA6
  548561D31CE00457559534E531377193169A844152CD042223B47B7166A6CEED2B746AC21251EB
  900F93FC6F625D8FDE6E1D5374950F4DDD817548EBDDEF20123FCED4C3DF7A7F7CE65E9B5FC3D4
  F079B281D7C03DCBE9B8D87935D42CAE3ECE54EEBE41C00CFC98E64780935AD675962BE9DD9905
  9BC1DB597DE778C168F4492C26167085032E511484ACE6FDC8CF885DE200FF0A990226D0640BF3
  D78F53576875200E856089B11A57A657D37E0BC5B6046670377114396B8C740B5C166E15ADD5F0
  9BDD0CC3BD11C342B69C2D90E5507D83D3F6FD3DC144A2D2C80A02F455143F15949B81374BD436
  0E3591F0EE260233F84B50CAAC5013D6AB612837119AC3ABB6B2DBF0ADC06EB4D4295E48F1B6DF
  60E6C98332A380BB997B769F7C699827A6EACB9E14B79CFBF83E11AA8B96A3EE90A2AED4035296
  05834F1489CCE75443E75382D1B413D8E0AB4F8AA7C69A3E499FC0077DFC9C8AE155F5EB403579
  B6293E80BE372197F33AE16B3F41F75FD0350E3267D963D7D39AAE9F6741EB1D242B3F9CB3997A
  0577421B816164A5259457F56724E7FD562AE67136D5BF75AAE92934F73240C98F289C566B8582
  EFFF34771E9A1C04FA01AA96C258A3C7055087721981F4343CB87F07FD49B9576C4F9429BCECA0
  20027987609F6A49D73984819C940AA1701A6C70086BDE720E1FCB0C6FFF14E15978E462A3D5AB
  4D0F222A990EFB6D09EC67B467EFC88275DF2598F595186DE91F398AD8CA3D232EE6FBBF2B9595
  0735E0F625B709CD4ED126C063894BFA5FAC4F4B7A8091FB9D94D294E3C284781482184D9AABD8
  1F723B1F9D8AB2C7157F8E4A636F253CCE3EAD18A0F7D8C38B76B88913B8E8DF121902BCA1EE8C
  4CA2B05EFB5FFD8C1EE4702885EBE96755A2D581378F71646886DC140216D13AD4C3B3F2C0D2CC
  D8DCD4D9EF6995135D6214EC4E3D653FEB11C22F5EBFF43EE55230A86B8E78E312B7ABAAB7B749
  F7C73718504B28687AEAF731FB83EA4C0B9B5477CC52A5D0BD4252FAB095F558553FAEA5784B94
  1683E0DDE43A3C7B19A6C8A4D39FDFBE50F967095B202F5A184244C31C2149E73CCE7E0D32FEE2
  58425D0BCEDF9BD2FC249608C6ECBAD4B7EAA64D7D01F333AE334D173E859F163396A88A1E09A3
  96F47A3FD445731F18EA7BD26C621E349E314159B99DC4432ABC9FC2E5CBD8E162D9CBFC7F5D8A
  90B7A195A7B517A91BD8AF517EB26A8EBFE30CE667BC376870E405F4DEEA3CF4331B1A89B142A1
  DDF343B52419528628040D173EB0828C7B00BA62BF5DE4956B23FE62F555DC6EADAFE18315F268
  15D3DE1AD5B9808F3A016DB66B1969992BE7CC676EDC26B87A11A89278A82DB04BF41CB21C805F
  2D2CBB9B4E781F6B4DC755880EF054C74870B847332B344DD056F1A3D7319162E782A625E1110A
  C80DE10CB26F7E670BF997EEEBC31C0DC875BA67BF7EE96C70347DFE02FC64F4F7632B2CD1D82D
  026A2D7C14536E7C8ADD18491CF2C03B94BDF4A54511B7C9A515F3EFBF120491113E7EB58FED08
  1F16BE32EE7D1BD64CD134834F206E636F9DA1DF7E393659821490E92A81CAD875736713D6EB26
  93E0906C4347699F5632A7D3FEE62C5BD09564AEBECC0A09500F1216B2BCC8D9ACCE85910BC406
  71670117EC279DD3AE212329B50E55DE1DFA4D34EEEB533AF5407331CE8FCB2D39F2DC59654FBB
  90A8145689145414A95951C2E41A64375B3B7C7EFE850FC152DB2226F511906CB01C4D487DC7D4
  667678482DA2A0B57728BBBE04FD7420C49289831DC8A627C82236B3764DCDA399D5C8EB0E0917
  0A1CA8E43B4CC2C0ABEC5B60A0AEE5DF738B76C08B354372BC28A1E398159B9B6863458EF40BDB
  810731A45996A64EC80889B94A12C6C5E3CFCE7FEE0931AD3BEAD31C60E07B73B1828C86916979
  54602AA6226A830902BBBCC8D25494A7B24A67CE2B258A8050B9659D3FBD3E3B0499A7FAD90851
  0DAA4E0A8FC39BA6A871905BEC3535032BD2FC641F53274ED8A47B8D8F693E722E28480B33AF79
  780F246979C0BA9112071E45C735AC38E0A2FAE61ED8CEC4813065EBD1EB31FB5F0DF37322B3C4
  79D6D8ABE7D3022E1B10991F9DB03D3394BD71AD7763D8A287A2F11A3F4CB87F0A4D1DFC11C936
  7769660BF060965154FBC0255D6CD41E77ABF528922809D141A80678B1F564850937342011C2CD
  A7193A4BDDCA3FB1773FECD40B37F367507EBE2C4F69778BDDE54DF9EF70583DC98F80EE984ECF
  29646467A48115B5B40DC2C725100A5BDCF8524EE61B841A45C1583236ED7BD97F37E0A9486902
  55A78A4563F25BBC1957E267BCC2932B59EE9F62FD7EC053041AE90A165E4DC412F3B5525932A0
  5D1B729EE049E95FD7DDFC41289ED305430CB9A0BA0E2983C4966AD1E4C634E67899C15CAE84D6
  C6A0C2D6A2742D741EE5FB897E004FA6AA48ABA7332FBDF0971A4148FE73AF6D4094889A87AB06
  FEFB97E11ED78C3FAD76376C3620DEEF80BBF7B286290165F59B78E21F96FC2EF036D65B01589C
  14DC300CA2BEF5E5C9414A4B7F4E2434DFCBAE0510C7CAAF5F86A917BDCC85A0C7D0BCA0ACEF48
  E54BE1D943324E826E1E9D3F0A54D36474F74300F94E0D7391A13884440915D1F91F5BAF310230
  9DC18A2A75E87DA722764E799A11CE89833205B9DFF25948E5D1F3A3CB1E611CE299DB7343F320
  00F26A10C4E6358358A5F655D15D381A6D98002D83DE29B1AC943A4C6F428D76E607702B7774CD
  DAA3ED711F352F5A65DF01BCB0B7B25CF801E24A4E3977840D0C6C42D71C75AAA00F265CD259B7
  CA0EC27CF0B120395152F29EC1734FE5F40AEB4BCCB6D9AA0C5D38FE7324FEECAC5013446EB3BC
  E7DD468047D0B7705FEC89870073E5EF829D4B782A8C67E134ACA1FD7FF4405E1D399F876F9361
  4EF88E2F65E13B1CCB0D9149C59129391843150AD4925CD95A3CD05787EDC236B5FB0072DDAB14
  A148053A4E06169980490BA0E5B8BD46DCCD063AEDF19BB4AC6F1396296435C49756D043B11CED
  CE66E71108FB6A5F297A476EF414AF75D812D4E4830A80894809235EF1C43528D0AFE3938728A9
  5685049D31548CB5FBE281C3501D050E8A3EA525A55506FFA31F0164919B30A9B4AFC70225048E
  93517E234B0D671A9F74AE8DD155D35DD72C6C8FD359B5023EF5BC74A59D159E26BA68F3D0D7D1
  D90F1B64A4CD270C1DB67832C814B44AAB2447DCB00F73C1DD5080C7616111ACB6289A0362B5FE
  C39B09D62F924A98C37F1C3D3D18B7018E6F6D6F851436AF6CEB6669143D30C85F958DB2747213
  77B5B73738F9442586008C38B843E9A567F7EA876A3A33E1827F12B67516AB2A678F131D8FAF62
  DF923BD6C4C5C2DE0B9B229541A02E9185AB6C7A56F4DCFB59128881D87C7A8866140AEF0C6C4A
  B253B190E048A310F524CE453EBA70D967627143843FC4D19E4E71CCFD3FA84B72C51BD211B2D6
  E96951EA3AA1E9B66E55E0117A43F0DF8E5CAAFAA6BFD38C71D68AEB84BE2AA3B8C0E451405836
  59703D79568B7DE8D955D1AF3146F514E5D87CCEE9F308ED802B49DAF342F8F4555309BDC09B3B
  9A1D13EF3FE6DB875B775AA3A27B2C1AAF68398D1D7EC8750B7BCEC2B76F27EB16F5E496DF2A24
  D14B6D6C3830616E326BD0C4500DB16474F5703C9556E760E93F7101E251D14F1E425BA8BB73BA
  12F576A778BDEF7742BEB228BAEE59D42E05656281C48E982FD069917825F2A06D917C39A6E990
  60B57037A8798A3C9BBF361C826F6D0E565CD4A465770908259DECA452D45922E87DBCF7CC9687
  AC7A2E57B39B9C916C00EEE3422B79529847A11ED8E3EA4BD652240339959B19961077219C7D3D
  7AA153CE334B9288A4CFC5BD378C8D1AB42E6DA7AFE9A3DA92832A235D615AADB414DF33A7880C
  4757587CCDC298137211644466C077618B6A8B54484D62400B9CFECBEAA1ABCDB7EE78022DF46B
  A3BF4E36DAD7520AC16DBBD895FAA89CE06A3FC283153CC862DF5419ACBC27DF53A1C32B4B50B9
  34DD753227AAD35DAC0F77855524BE8BA3C0C11511E9E85AC4DFC9F4BB97BDA77864B162DBBB36
  2A9C08B76048A88E88FFD0987CD09D166954C59CCB66AC61A651E42DA851D7D7273E60FA8DC330
  D11A6D8087CB2765AF085C09CE05CAE89B110C6AD2C452FD4ED326CB66A48E0F09CD6D0C5287DD
  DFEE9E7368BF41E1935DBA23267C999793F2EF9B8DF8260A73642F322E3BF0C79B1EB998076D09
  DE104F146E6EA6EFEFD842635631AB2AE364615CD32894CADDA2E679354BB4ADEDA35763FCB18A
  2FE174762D316F10790EA888CD76726DA3D13458E7A6689A149B5709B455866567712D21E5819C
  5A7B8C4FD95377A28B73033E10AC486C72076A616813F056B1B39CD9279B64B9A382B506F3F252
  FD0F5107B9CF36D78B5EF60DD9784CA70E0BDEEFF677F50F506EC83EF33F832344AFB67F9AB4D3
  3DB24BE3D7A00B8A60EECC7EB5FC913C05F641C71542ECC9229F67809B8AA0175EF31ECDF682DA
  393A9343FA19C4AAB52E8FD310F1A2EA4987EF6ECA0D6EAFA414545AF99376FB13BD744D1A2ECE
  30E2DD47B5878DE5E6312EA76D699AD6C217BADCF535B46E2EB7800A84D3083A6270BB2C5A5D1C
  0057B424531EB48EEB29E445B1BAB27637FD4955535F62A1ED59C807F3816D46A96AA3B0160190
  5FC7F23AF175CCDBAA060ED6CC1AAE155F18C0FA0D8439BDB73C35BF41571142F8C8A696787041
  99B302C49AF02C4CD929D2CA7F0403BCCB6BA8B3DD12B081A9610487436274F0AC8C21B722C539
  22611009B8581352D989EE065FB2D1A8191C1B0B712C702C4FB566A19F382B4AC8E840DC2DC456
  BD91F7BFE2F1EB225F6AE1562F6DE9D4D6D46BB2426126ABA9E7BBD21F158B3FA9A040A18528D5
  946E6C5B4322070B392403AF18CE0DE9CA09FFCED6F66F7C646C3DF14F5121B34E41DBBA653370
  5497A448C4115DF01E7DF753EF61D9B8618796AA26E0A8E783A6DF
  0000000000000000000000000000000000000000000000000000000000000000
  0000000000000000000000000000000000000000000000000000000000000000
  0000000000000000000000000000000000000000000000000000000000000000
  0000000000000000000000000000000000000000000000000000000000000000
  0000000000000000000000000000000000000000000000000000000000000000
  0000000000000000000000000000000000000000000000000000000000000000
  0000000000000000000000000000000000000000000000000000000000000000
  0000000000000000000000000000000000000000000000000000000000000000
  cleartomark
  %%EndProcSet
  %%BeginProcSet: ppcod.pfa
  
  
  
  % Generated by Fontographer 3.5
  
  % Copyright (c) 1987 Adobe Systems Incorporated.
  
  % ADL: 712 288 0
  
  
  %FontDirectory/PPCode known{/PPCode findfont dup/UniqueID known{dup
  
  %/UniqueID get 4303738 eq exch/FontType get 1 eq and}{pop false}ifelse
  
  %{save true}{false}ifelse}{false}ifelse
  
  17 dict begin
  
  /FontInfo 13 dict dup begin
  
   /version(001.000)readonly def
  
   /Notice(Copyright (c) 1987 Adobe Systems Incorporated.)readonly def
  
   /FullName(PPCode)readonly def
  
   /FamilyName(P)readonly def
  
   /Weight(Medium)readonly def
  
   /isFixedPitch false def
  
   /ItalicAngle 0 def
  
   /UnderlinePosition -90 def
  
   /UnderlineThickness 36 def
  
  end readonly def
  
  /FontName /PPCode def
  
  /Encoding StandardEncoding def
  
  /PaintType 0 def
  
  /FontType 1 def
  
  /StrokeWidth 0 def
  
  /FontMatrix[0.001 0 0 0.001 0 0]readonly def
  
  /UniqueID 4303738 def
  
  /FontBBox{-1 -288 606 1046}readonly def
  
  currentdict end
  
  currentfile eexec
  
  D9D66F633B846A97B686A97E45A3D0AA0525392EECAC163E584A9104D99AD0BC1B1F3F7121D1D0
  
  F2C60DD206B0D3C8C450620B47320CA0AEB8937511E456AADE8E66B301B1E3E9DFE17E2F79ECFE
  
  A709FF3DAE19B4C169DF6773EDA414D02915A6F0FAF8B24FBB0777C697BE8A37D63A390AD9DAE4
  
  95BB7E626721FF2FD3FB147C80D22BEAC37C2624D818D58C8DF0209F5CE76ACDDE57A303D9042B
  
  F0A674D095697F925F532D1814BEA8F8A5B5223A32BC4A95402F2C843181758752FC330970E817
  
  3977418EB4F64FD5E455C3E4165C9AB3D8504D946F6B5C3F4929D463E1D6E6B5810DAD6C7A6529
  
  0CC6DB960A1F943400A8F6364DB3742BE96B5CB4B78CDC5634A9EB3C62FDC481C9C101E045C629
  
  3CD9D491B77482D32797F4CC0BFF20576C2605ECADADD775B2165FEF0FFA0F4D88522D1BFBB05F
  
  BC5062AF54BB3FE2C0B371E8C7BEA0C644A32A3DAFFBC08BB63A97C18A266B310B1C1B92094348
  
  60478D282D394123AE06D8EF457278BD26FD6EEF9B95B5CC7D31E1FE462D8A5FACAF5CE5F42B45
  
  E1395A3DC60F37F5CC752CD81906F28D3953D61F55075081E14745FDD659B5B0A271C8A423A0F6
  
  78B1CE24E573A24B10A5BC378A9E4410298EADD90C159525B358F72149D24291C923F2C91D77A1
  
  32347F5F471F1139B9938E880CC5B3409B33859FE870D28B882B96D8B537BF229EDAFDE8C3F6CE
  
  7CF51F18C5B50E315E93E4896B85D998A43D47BC2560160139FA04813B3CC5C4CAD527A8BF8A21
  
  751D1FF032610410865DC43C499080E3162C1BF74077F8FDD45418BA7D690C23FEBE5E9DBC7DFE
  
  0ABBA430AE206C166FDCCACEA3D4D346F919FF8293111FF626461C28A9EF2072B2957D98A12B7D
  
  4072EA28F07755AE9D83B5D86DF4B2EC81023BDB5DE262D1AF3FD844E9496FBFCB61DA20388909
  
  7CC13CA9BC695FF8EB10B59ADE5384D2FBE0E741F97DD10CFCF168DF343075F34F63C2582A53B9
  
  2CEAC572EDFFEF54B2F8FF5D617ACEDDE59046C4D2D7AAE0F147D8D2FC3769AE15904DEDE6CD4E
  
  1A944E5ABAB181450C36C74B93D8CFFEEB3B5876F9FA7B3530A0E6DF9670E2BA9CE7675F9F1346
  
  EF3F5D38202A50A8CD6AD203250F2932EFC08C8A4F7894A4DC1C80F2B2BB2C71682D218D1481B1
  
  18964F33B16F5BD3522D16F9F3739F063D8D05463037060433CE5F2F84231EBFD1A0524497555E
  
  41856D173C70AE0E3DB9E1BF4C2CCB9458B0C4FF393BF62FBE4E4E78C53F67629ED378ED695916
  
  52083BFD432D05F8FCEA0FAA5BC1B4CE9EF698EC2345871944DF7AA4C4FC3616AD44E9785E2B43
  
  B738159C84261FFD04ABAD0F82033F1D367737F04F70CB2812630D170A08E9D6976F134838E22B
  
  82DC60CB4B93215515DF5AE0BDD7D9F150B1364A49F886F7B196DD4A358715CAD8EC282F9062A0
  
  6D6F2CE0BE1FB718F4F0C0242416FDA7A9CFAD1A67001DF7AB7AC3840F776A47D0519A7116374A
  
  D7620CF527DE6343948A7CE6763311FCE7F3180304C3DF53CCE7DF85E9B21A8A56ED2CB0070C85
  
  56468DC6D6EC4758F34423F6AE9F1F973FEE394769B5ADA4A08C90AABD5D07E0F07E893580137D
  
  09CE94A6CF3B8CD2A650A6F8C42F33A5BF02A2F04CC0DA224FEEDFA59F313E8E5BA98A2B95C59E
  
  081047EA172DA8569345A62FC12ADE17DEE499CBE08ECD7B18A79553B3F391DD7C9699FF209B4B
  
  8174D217DEC328C0A8939197E6C40C6153F6A49E69AD7A7333386B30303FDAD868DB58A9E5A13C
  
  AC55EB76A2D241F93234508B436D0081783E64B9431260115720ECA10156AFC676E012A737EFA5
  
  0EDFEA396E2C125CDB78BEC266F894FE814DDFBD24F2D1DDD68A9773334FD39E7A72C023EBE0CC
  
  A6E5D6E0E3C67F3187B4FAB906302EB810BBC5ACDEBD482E00F281DAC4A87C83FDF08F2E15BD17
  
  8A77A4792F69C23486FED2344DF26043D76F4C9BBF54B2BF425180445D9563D99DD8FEE3F8D2C1
  
  A660AAEBA6E0ACFAB5CAFA7742ABF17244EC9BD43B74E64659D03369F252851340976AA18BEA26
  
  2B9287566460ED054923D82797A31C3E4BD14FCDF9F30C94B50364368C1BB18A10BCF47325D833
  
  F3DDD815725F628E9242CC62155550D54E1B698FE66DF29B79817757E02D05190CEA5B78C35D05
  
  FF87E5B2ACA9E7E91FD5233DAA7F5378919BD11028F25439E1E35A5DDDD8CE710F4DE16C1CC0CF
  
  FB1A9BB9F2B8635609DE6479E83BEE8FAA4DE3E28932BD18E07EDC326B1428901A77A3D23E8B72
  
  66796CDB8B5B180E779FDD9DB73AEE5F45F72FB55CEA6B9E52A2F72497A0D8C12C4E176060F398
  
  7584E5C0A8F6B74935349C153AFC56434F27F0E248CBF9E6009900A7B23315A0D835CA08DD3A34
  
  697F381E3DF8CE655DC3B2D383B002DEB4E87B0B7BE14130F54CC3B433CCCC9034E021709B6F7F
  
  8C25DAAE692BCB399595DCB00978FAE3454D48EA1052369B0FBB4B340D3AC6C3279AABC6526F99
  
  362C7693B0C0167A539CF4C8EE7C4B6FDBE6235D0669FF525E05E127A0E2FBEDAAFAA82E843EE9
  
  0CC32A9A80ED98542E23D7819F5551D8B065628D4532081B00B728CE2C67855045475D9D1432C1
  
  C83F12A3A628D302697B418D6699C9E4380704D05C0270A736015A59B2C4AF2EC384CF0F05496F
  
  01C977FD39C6E778F38D5E438DB5B6B05E333AA6F4D7DEECC6CB4B098E1E5138E9829D93B21F05
  
  FCD3B5A316BB3452C516B2B8935B1BE80E64A7A7227BE6AE842AF11BFAF372AE4E41F8D99D2810
  
  427F709B97E3CC0DE4C8CF59A4B59582F9B9385B4F8E822107A79CA447B9F885477DC4B65B7BAC
  
  30A40B5141A9A3FBAE99F68B27A3CECB7419103BADB770EF627B2AE0C4F6F368B1C5B9AEF0804C
  
  FECD822D6D8EDE9F42E17EE2A6D385FB06EB17C1DFFA25626E6699C4D3B791FD65F2EE5D69DFBF
  
  4CC6E06F7F4EDE642B163699B239830DE0D120E1F496F4026A31D469E86C35B01310D9B521F5D8
  
  614AD281F159E197F8A66C5325A2946216CCCA969C4F6D2FC05080BD50AC3D43026B89C2E640A3
  
  5964555A073495388D487E919C7A40086217B32FE8B5215A212204D44728E1F245C913806693C1
  
  CC8FED12BFAF14C4DE4DE0BA32D76AF52F6B316E9E64538A72BD461DD2E24158C75362031800CA
  
  20F70387543BCFCFEEF0D1B3E7E108E106D8B172B4BC40F83AE4D58CF8CCB1230D6981AF00A712
  
  9FA1ADDC1EEDF23A339DF93DF45A3FBD7829BD840CE86EA2CA24E020A0FDDC24664EA42BD15C32
  
  A2CD1D7C327CF329480B7211926FDF44FF1F73FD248D980956CE170271C77DEE57164BA2FED513
  
  5C3777E10956C9E382D02B888261BA22FBA3D5374BD2130013FF2EAFA4CE4C1235DD5128FDDAB1
  
  63059F4A7B911B96C587526533BE7255749EFB41AD032CC00CAA20C2531E4DC09EAC48AFBE0425
  
  431FC29CA48A3749AC9B012CBB209F77D931599EEC8645EF18793E79D35C63D4F1A7134284BE50
  
  00DFB32EAF9021D3C8DEC2B119E376B3F2E94731B23FDBF8BF6D36AD9174F56756B90207511267
  
  8DB30EF2F34F7921AEEB3A00B6EBE69D18F6D1D10C5B5F5CA5F37FEB97546191F17E1F897637D2
  
  9AC366148A9D7F09B0614F630F829F155ADDA8E704EC5C49F963BAE89A9A6611177655EB85D2CA
  
  0075DF5658FD68641AA7B31B8E1EEC8F715D6DE9D422274BCD8382082D625BC812F5DC3F86EC0A
  
  376BB596C233F01C6F54780909671694E902CC1B96EFB0AAF2B42BC8BCA01FF6DB2348EF7DAD3E
  
  7E9661189FC27D69122447BF81F9466A73EF04D4D4BA628B63BFB84AE88B472965ECAFDD34F7AF
  
  8BCA51077C2CF364F152A65347488BCB948F87E99E10F430B2B0964ED6114CB69AC8186E486D37
  
  6F57C438B8959C360FBC3550A3FC6B973B603F64D2EF99455C82E1107434A0EC3EE4E1FC1129A9
  
  FF12A23246B410C74E13FFB07DFB6A6227A73A0B6B4518A0BA2FB6007B21AA81A7EC747C525F2A
  
  8E6C2569A9E950E0BAA17A5C9D9A1E5155147EEA4DDE831AD8CF69C7814D76B503933D91AA93E9
  
  A97508AAF29839E177898D79BFD277005819AD87D9338CAF02ACAC44F891F92813E7DA69C82D7B
  
  6EA717564BCB1D470B090DDBB1EFB308613AD61F5D27338FDC8172B258009CB7A5FFB872E43C88
  
  20FC3B8DAE2EACF870D7C5A88D4261982800AAB36E94968A4C5C24EC5B0E538170E8C6F9AD61D3
  
  E6C713B6319E8DBE7074CC2228770AE51649228A9FC184AFC1BB7C67628FF30360459352EAD6B4
  
  A2A69A3D39182E56CBB2864A2C1180A7C777E7269C5743D5A739B53D3A2C5BBC9ABE8337C35679
  
  6BDA40101D11EEB43BB8EBFA73E4E7007A2EA443AFEDA678E1B14A2AA2AE6A06D12398E68D6371
  
  A457859C0FF25A81C5DEC3AF48272CC5FAC044AF2E71D510E5BAAAC8A50542D9379880AE7C9D2D
  
  1C822B5477DAF5150B84FB9A1A062C9AEF9C03F89E0269637F056BF65A92CEADE31F2E3D4C9589
  
  0701A4A064605CF79E933A85185B50D14A4766563A952D5A3C99C16CE7A50BA68CED98549DD395
  
  F6698BE4F7976AD5A00E737AA33CA51F4C7308B66B10BF636B3C4DC8866F1509B081B178059340
  
  BD9849AB487CAA004B8E60241125457C922340B1BC817885B703914B0FC58F1391016FE1E3DA04
  
  AB5F2056AE0DC8A681C8DE6CF5FA125D2C7F5967DE841F076AEE8791E6C17D7F698F2052A9C641
  
  04924F9FD85BBAF77D9EE8711F147D730A6F89DB2965CB450F0820402C2E52CB57977BA0A77E0B
  
  7682845F3E4266B77304F163AB2CFD49494917D2C5963A704CFE46C643EA7ECE441F82E272444A
  
  8242BFA6CB813B661CC9431DA9C1E1E9C6A861C6C0EB3053D1D62CB774209A7586F9694B558DCD
  
  625B55A0E9FBCE5C15A9A002BC9478908553E95302BAD1E4DC9C250AEF170495FC898FDEBA345B
  
  B4AF706334CEC5091F8AC4A23821D0FEDC6167A15F45633A30DDA88EC3C8C6E235A5A3C1BF1BBF
  
  03A896CD7804C297D6BAE134DFE4E388872A05B92034AE70DD0CEBCD571655B15078A2719AB32A
  
  528E613F2BE3D5AC5F3C938D23BA20DDFF1422560726B62BCB1B9EA09DA1A28EDB55F5CA2D4E05
  
  50E1231157A81978E7B05FCEBC855E54A936DD4053A42ABABF820E3E4D37278909ED49E49C6213
  
  9575862EDB983BE4EAFFA6B946CF4DE068FEB740927C19935D25DCB15E817847214774F290CF03
  
  E862E76335CD1CE46188CA3969F0B3F9F1DE174C9E480C4782CD5DD6DA4F19B51F5F09B78CCBD3
  
  D5AC80DE849278DD5A84BE0F9D67229113FC4BCC4829F89EF61E8EEB93D48F263098073996CE72
  
  05435589588FBDEA91C18F8BF53C81DCD10C74A6139B5A68ECE7ACD3A485723224DF00177B1D6C
  
  48D7D92D0A5A9E550D5E061765B49616C65305916E9C0C527F6A8EB6CE031EB88311A9686158AA
  
  B526BDC7B0ED01EF2E84E495D10A50C7BF87536C4D4BFAC22CF95C58462A7DEE8E671752E98429
  
  8DED64452AB8463A8D4D98CB7E2121DCE680D13CD52B4CADC738692F6C5C32AB378CB2FE4FFD68
  
  11B2F99A6D0BB9BDEBCDC827DD77603BA5814226F39DB9AA83AE2B91C0C6020E934190DC610136
  
  AC6CFC5B6B5E86A66DA2582406364FD1AFB14360CA16EBD4FEE6DD5B5C42E7ADCDE9B54661CD25
  
  1464D5C7F89B62C99EDAA697A96AE85C1D280BEA6F700110B2E39C0D09BD14A548D2978881EF1A
  
  38DAFB197BD78D62A17C343873F279EA84155D79E17887C8C56B8E7DED38D064EB811A953BECB0
  
  39C9EFA45424D6455B869EEA5A252D940CF0E43D5162EE408E75F2EF0BE2DFCEE6448DDA529BE7
  
  57CE4DE31B80A4676D23FC0E901B89CF02AA0562BE66185F91037B1B56809FF1046A6FC39C9B9B
  
  7EC27BA4ADF238760A575A472273BB64C5E2CB776207F00315B73534A539764009372A74CC7612
  
  9DA6188A383967DC1165C07C7B1F93B39C6C201449106A0EA1276634A6162AAFADD21C61C1D560
  
  1BAA67902785CB90C87B611D3A6A3B947013BAD8C60A3D4D339A3025BEC74B6DD387B7AFAB831A
  
  87B7A71A37D251523C48642B1D479D8368EB31F8BB8355EFCCE5DDD1323FC99A56B1089B752A13
  
  52770BC7E1821A398890B31650E8EE14B0D49BAA92458C15C2941E434787EC4BD034C40BB0E209
  
  6CB29B175387729ABF0962EBD02424F0BB509687B03A39A3BE9658761F0703C5D839B60C4F98FE
  
  FBFBAE07202E2CA22AAEE145DDC10409010E2A59B934401EAF67B8EB499ECB92B375CFE8D54125
  
  CB6B20C9968BAFC45D1A8BC65D98D7B702E624794EBA8C1EFC9433FF2BC3972F57D8FABF27CE44
  
  2FA32AB83AE5DBADAE01EDD183403D272AE3FCD75BCC750C90DF7D0B5255518AAB0C92D30A0164
  
  59D9821BD7E1D4C4F464E19B0AEB78276190D726C1D7674708D0A74CD05920C2A8FCCC8581FEB9
  
  998D735D811623780F129F0AAAF113F75EB28F383C9B8C0C7A2221C3A4BF641961F38DE9DABD33
  
  A803E9436E5B9842503581B3F5445AFA039CB10C936C8B0C08DD49BEAE1190AD611F3F23FA77BD
  
  71A80A1F91B7F3760F5FA35BCD76D8030FAC872C637217B07CAA452C72DE3F805F58820BF1ECCE
  
  231229FC5B68E5F1B20259DC92AF481FDA92D07F276077D783AA45349915B5F81C8C969739DB56
  
  F4522D02D547DC76240D69CCF2D684242020DE60ECA37D7E2846C5045F6B2D105B7D5A3CA5DE6E
  
  73A56715D5DE5F3EEE3559E657A5EA13C9716E3A7AC0DE25E1720D52ECE8A84D5D1AEA04DF0F7D
  
  D846549BAEB5C5032CF3C251A5A63A99DF1A33D0548A72735FD9DA8267BB4B57A5C58D4457BB12
  
  42B5152703E62B64C02AFA682C65C4112B2838D9BD8CEC6BD9D1BEA882E5090046E9F22087E6CA
  
  B69F5325F0C69A4874EE820D18B64DCCAADE6EDBA3AC758E54A7C9B6EDBC40550DBD4758017842
  
  1A8C5B6967D858DB9836184459E26340BCCA7636A84B7B3CC9596A907528455F4646B5BD789E94
  
  9DD0D1F40C0AF21E3971996FAAFFBCC14E19030924D0D38A948EA552971BA65045F2817564D593
  
  4C2990C6CCDE26329F23D8B369F3AAF74A125CA1FD552BC7122D21109FFB36CFE387F22CD09CD3
  
  CCD47EFDF7F671397CDFCB3F457B2E6FD2E2273AA268C4C394B36145131EF2D4D10729F64ABDC5
  
  EBC7B20BD072EC170432982280341735297A7CDDCBDEF8483F34AF7A797160402B10CCA1C78AE3
  
  9AB6170CF6DDA19EF0F22BEB283277E06544881B6B0D525936A84EE91FE0BA8C2985B6E32AF94E
  
  DF33E6CC70408F3BC67070A90E0641BC68B8CE8FDB46BDE2FE80BD7070F0A9505B0959B1509E84
  
  CC666CA7CE4EEB631B6E8D19816611B5ACE957E104CCF3439C2C27741CECA6F2956B0C5E0BD7C2
  
  B417C375B630D4CAEF428A88584A3D1962330A316B9058BB1324FCD908781ADB47B39425A9FEF7
  
  6ADAF499775F68F98F65EAF80BBC9D4015D05E816D2EF9A1FA91B01E05B69B9E1BF75130B4C7D9
  
  AB29D95C07A4C3F2DE00C7C2108F7BDD2F103D8A7BE02AFD12D1ED26A01AEF6B18CD6336765899
  
  805618E0405C18CE7F06EFD796EC9532ECAF6966F76EE335419454FF647FF14162CFE1ACEADC15
  
  A22FD4E6DC78A93D51A6076553C2D707399D27E5AF882813BD3248B9110ABA3CDE8D3E6BCD23F1
  
  DA141BE6D45A9E6E36FAE1DB0C0819270676536536EA13DA4F07D5BB6277F7E4C609E4E16E2EAC
  
  8806F28F4191E71096E2495E64DB238E20E0D1301B3F34D9FB4E6E6106C03B6240E10C0FD01B6C
  
  352E9BB9300C246D0C020F2B418D76A0456784E58A75AA5C725E5F9269392A90D185DBDB5CE2FE
  
  AE31ECDB3B63843AB2958241BBFEC3C04CE0AA147C504A45DBE05503DD493A03857BCD7E4B37AB
  
  E8572892AFF4E271F510C7E0649C58B3E3CF75B8C3BC08EB34AB5F765813E99F99ADE259C45327
  
  2672F9DC25F031797C4269E8CAECBC3E92D1A59FD1285B46500F9A2D679EBECE480945D79A50B9
  
  D5D1AE90727DDFD6F8C5EB03B2EA70C169828FC755BC4193CD027EB52EA2DC7AF09C0865695106
  
  5BD78AF57C289697655A3432A457792BBC88949C40F4BDC071793853F9E8777839C7D7F93639CF
  
  42F1E4520FCBCAEBC3BCC53C83334033C25E50C72A3BE0F337CD14996326C169B3921E3442CCDE
  
  1A444C94AC8D2ECE632908AED4A162A74021555CA73B235715B965CC867727E48C3B6B39B989E5
  
  33B92BAE40A0FADFC8BCE85D2A7EB6A1C4CEE21472345421F9B80C5EE641C91295448A51306CAA
  
  41916DE9DB4A78C7381067314A8B39B13F54022882286724BCA2C10687988E4C4DDBEF5E2D36F4
  
  36C9F6495E0D40AB6F35E7D0D5CB8C2A753B4C355D0CDADF49FBEEBA5239A90A56D826A9BE12BC
  
  62677F07CB1CA5AD3A8A39E10577E5FD95E82F2EECB4D4F7B55DFF835663822851B7B66FB4CA4C
  
  758763437BD7FFA955914B267C18A55D7C913C4B8BBACE885F5806BA7265167003198F3C3236CC
  
  982EBA78D01F4270AF563611B84C839F9F414A0FDB4CE0E3AC0A6629378741B5993B40CA190243
  
  C30C55759CD545B2843404994D02ED271D807B212D4D39067624C5685D04935F7C936EDC0D6F9D
  
  DA112228AF05097780EF6B3F7E3765B7D3B9D9B292400D7E931CF98B84E5AE51D6FD741E6F8401
  
  D026309DFA92510CD2254EB234E6B2A04AECDF39C03227D07096C4BEA57866D91099E8CF5F0E19
  
  A587A498D6BB3B492EDCE600E463A0B6CEDD0C33C270F99FF12906EED6625C61442D7AE3A8060D
  
  85121920E6B940EB9E55037F40D977C675DF6E825CE46FD9A1A3938D9A1476C0E0A575270004D0
  
  B56126C50A62FC211DE28D34C404BE017A823352676609A5000182EFC3DDA67D03A12CBB25C99A
  
  6182C6D3D92CBBB2F3B2D3F3B7FC90DF0C60144A233E71ED22D4113EFD9542081802AA7A678C9A
  
  F6811790ACB3654DFDF82714598756E365182A7BDEE311B7468FE07C2F9B829B65F287D55440FE
  
  32240CCE521E38D71999A84ABD6F6C1FAC23945BDE97D1B2EE8234A2A12F4F61AA9316C7949D74
  
  660C459E2AF21699FD334FB41D5A2CB869A45551BE062EF3363808ACA5B861C5CC05A0F74DC620
  
  B762CF1260100F7AF497555E3A387DA9B836F2B1FA44654CD5B9C3C6F11D5B5552E2D824B7B1ED
  
  9E2597B1849DFAC61041287E996855B0ECFD21EEF4A0AEDB4928569D34613C74B46D7F46B55ED7
  
  5532217BC77B1E075A4B5F782D2FE5748F12B50F7146AEF506A41A6A3364854D8AE4CA18448626
  
  6368E181874148970B89AF75967E61EA7212081F85AB17DFDEDC6F0FAF7F415B3CCDE75688E85C
  
  1DC939D767755DCBA622BDB3631E120BEFBA3733F8BDB0A9D4DF8737240385A6ED642A3B6BFCE2
  
  D3B06B16F994CE49BDDF355A5E8F28C4DCB6AFAF6354A97D490B54B8BFB9EE2CBF5AAE669E3149
  
  4461E70A60156764F25520EA13F12623F3280343822876660A7F6603B59AC39D425B38217AB4BD
  
  E12120EA6119F32E080CDE4AE8DFA21E23DBFAB037421B20C3A51F4AE2FB5DF4585ED289147427
  
  683F43ECC822E0688E6AB47619038D4B9404CBBD9324BF32773E8C95F9CDB0CD68748DF066970C
  
  AD2BF8E4424940CF6C6E41DF2BA07DF4085A0E6DA6080FD43FFEA0A71AA7D00169D8283C910BC6
  
  F00646DC8FA6522C85BF46A863836F64CE73A6FBC0538E30BE63930B0EC1E4AC40A1220A99640C
  
  39F811C42AB78325AF974A27A0C2A1A2785A36EC316048E56867A1F85F78B36171F126B77C114C
  
  B7A8E05AD92DC6860D5893964E898998C63836CB5CACE1EEA1C9C837A1E22AFDC4B35E149FB0E1
  
  BF248A25847604DD6961DF3AECD1A9F61C36E3E1E4AE1B9F28FAF351FDA113664BBFECE0B7C5E2
  
  3183F8425BE6906A56398E33913033E51E06408E001D9C862E36A93039AF47F5F301B6B5F3775B
  
  4B2D4258B866559001066C6EFC48C55F4C3F0CDDD8EF525EDFAD6FC06213819A9BAE2E5577D404
  
  6E4656BA2F34227C5E37F0D77E964779AFDBC6840616CF02936F281FD353F2A5D8E7814AC6B28A
  
  71BB57253F852810B7DDD5590A522C50B56BE251DC7641E0D1E271F8C4CCEBAB65B6E70F86A7C8
  
  32D55AA3E61DCAE504EC4ACDA7C274AFE9BC7E75610C861ACDDFA5DDC4E8EBCA24A771BF0CA3A9
  
  8B88A6ECE52EFA7C8D55CF0EE850A99C9239A4466B558B6D020FBEA8D22BC6AAE4292B90C9A983
  
  6F7F4C5A588E6CC3DA3313F5FEBD4E5D2F7E454EBCC9939742C67E7C01E510D507EC30C6E6D340
  
  510EFF3493B2209A7AC43B484921872315657D3BAF59CAE38DEA48F394E4DF3A8C930C61C54610
  
  300D66A423A4CE2392A7A422883EDF08766119C2D7B7C7384821BD6FCD1B77B1BEC14DB15F1087
  
  E89ADF4672311FF368EAB60CBB6ECEAD34A7507A781B1DAD557ED19C7A5B5E334851268DC21824
  
  53CFB7EF47D15BACA68453301E95125A5CD35FDFF1E6EDB85AE7C228180424A2842ED475B31AF6
  
  240A480B6F6D7D3652808F8872F859843843D862E81E3594AC3AF577E79F647322392E4E63CC08
  
  937C2976FF749E16C58DA39B9035D802D0F0A9D1DDAC1894FA71BA3E41849C133445191D41D25C
  
  B37A8337C876A5973EA13567389FF89C668E0D13E225964DDDC3DBC949B46E0E75A2BABB6E2AF4
  
  53F65ACDCD45A394BF20630802BD9B9418459BC7736E37244F9215F2D6F534FEEBB1F841962737
  
  D48DA7D6B30A71BC4173B6E00ADB4EFBA91CE6332CC517B39701E07670D3D1A9A86A7102E6A80D
  
  C1EC6CD644F5511D0938DA096F80B49CA3444C0D96DD79D3F8832D0410F0430128C6056DD09F34
  
  4CD7E8D743789BF3AEDB8181DEB1A211AA5320FCF790489732CE6A982B1403CC9E2AE6BB9AB5C6
  
  863C320929B3861AC1011FA62C44CA18B10CDD9DEDCEB73E9145B73C471C6F828DD188804F96EF
  
  DC3D226A2A5D7155F7F8BE7821DD39EF450B5DFB14DB6C4F568CADCFED8C702675BA1C04CE6D62
  
  839727FE6F8AEF59693BA38A2B900D0D02C56D2C632833D2D360ADE07ADCD4CBB620517D7D0B28
  
  E3462E6EE2D30856BDA53DF4D97FAB059B0657E815921ACB16E1AB6CC72FBAFB9290A1ED432A32
  
  CEF7D8CA1938582785D12C9D9B108DC564A9F80B8C75B5B02A1E1C9C5B793526CBBAB9042F479D
  
  AB1D9EE9C18184692C81AFE2CDEF26CA418800474E6B742BB45CF02ABCD86C52BE10C777DFF981
  
  464D624A7B6E455F6F8D5B7F84FABE288DE3FC4CE4A23766F3D771463AB1E555F2E1ECB61B6A2C
  
  987B43C53B636DD466B57EFAD09811C728ED313B950789B262A17EA932A745EF43A8EFDA16D05E
  
  9BE49D3B05D7EE630434645AD245BBB5600B8AACE3241F3706A3D5B9EFF0A793C56A8650EC4CC2
  
  55E4A001356BF728103F59890540DB9B3F2CACF788495F63BAF1D36B4FE10B86287F213695E48D
  
  5BE20EE7025222C8AEE4F5A17D7633232460621F7F395A225D994AFF8D06C8351FC83F0C7FBFEE
  
  32352C1A3E35651D219713019CBFF78EBC3B14C5C3E25695BC44582008FC053F6E7FA8359E8554
  
  A7C4EA90632259302ECFB9B5F1F9721A37EDE9B6ACE78BD7C68C73A960346D608CFF7152681EDA
  
  81656541AD4EF64B4B88FBE98106AFF6F2051A871F7AAC5337A8AA2A16F59B10447EADD084FB03
  
  C36E5F0A4781E4D83402944714F176FC9420E21EF3A28FE65CC9CACAE128401BAB4E3322D6301A
  
  18FEC595C05BBF5C44C65D027FC3698F66A07A567937123D59F16B9290B70B838FBD4C6D12C460
  
  69309881DDE50DE0224F10231A0FBBC19F57E7B6B288622F40676D53F4DAE27C6E30DD31759A32
  
  EC0315875DB779486C9B4F7336516C52C537F6F25950DC671AF3C749E2357A48E99D032DAC9F90
  
  25B162D672A01908842B28C2A9E8FB13BC5411CB1375A3B25871E7737C2B1FEE4D43949DB1567D
  
  E2AAE44C1505871690062358088294E4929D552847A6A94A075B7D0B89D7DBA645D26B86F7F7F6
  
  40D7AE4B47956DD5AA054DE194A5756B95122F182D1D02504BEDBEE0ACEDAFCA0DAD84092582FA
  
  0603F025240375B11E8C252A5417FA1AA4C96DD1C4A369C2E594B2089A3EFB9D936224DE25A421
  
  588718E6177C8E320679EA1C639ABD3E4BB653DC17AEE5264E991BFF63769A7C07EEF6B0E6C1A7
  
  371B889B8BDD14DA43EEB252FCD82555752C25DDE92DEA11E3100C8BBB0E2D8D38C29E7ED42338
  
  9811C21E4BD162FD75AB1A0E5A579352CFDE9CC8FCD3A4CC2B5C4D84CB5A6E2E52A52A3D8EF445
  
  37C6F812694DA5119CE9B78A2C5F12454B1BA8AD6BE5D2088906C3A11A4CA80B2120434E92B526
  
  173D07C530EAFF61A2712F7BCE3618197B8B6175CEAE93186B7308CAA90BD20054D9F48D13B40F
  
  2CB81A08D202195F3B03EB7E14A17F5415E44C981D47E4CEBD46FC2CE82B3D0F4EBD242985AE51
  
  0BB6F3C1A702E86ECD278CA322575D75ECD86898F013499D0A7FC1FC127A6A69463BC44097D47E
  
  8ABC50ED36E4EFECB6E5553C35CB6CF6BB4779CF22F5F6970F15F54159FE5BAD7D57B5DD5B5BA2
  
  B2E25069EE77B06977BEFF18D21594E6DDDE2D44C7DF12A80121FB9A23BFA16F4A7EC7AC2B2AA6
  
  DBC7515E18CE39BABC04ACB1CB8C0A01A3AF169181C47AACAA0F0D803EE4C40FF0C0FA10963102
  
  330F0BA056DEEA02A240568D8DFC3F01DBC42DA2AAD17CC9A5F1DF12DA33BF5CAF8B22BD521DE2
  
  EA2B831135417E80412B244644B0E6DA40DD3E5C2A283A75950F686167719EA69AE1DBB00D7356
  
  FAF3310D24066D4941EF70686DC859CD533BEAFE9D5BB4E470F38B09104FD6B63A1BC61CFB27B6
  
  710EF092DEAC78313249BF66608DB507F08D8B9CB55BBEE1CAF79C83D616648163D56DF637E506
  
  D06CB45CB70CDAB90CD87FED934E0AEADC8C56B70C687B44C30B84376A02C04870E0690F7F43C9
  
  6536324092C7F4CF7B64990EA4C5DB456FDD7346FCF55121A5265A4B3169FD5D8ADC14A175F75E
  
  F8E86DAF70FC4F1E7A03181ADC6F0F9CDE42DD2B4A853E81E9A40E17AE8B0B95FC60E635C7B460
  
  477B582E7F45B00D78A4703414A5AB2A33456DAB7247513CACC1370A02D3E0B1BBDF5991385FA2
  
  9E03F7CA21DC18DAF612FCAFA8E35DB3663850181E046954938715B24C4F3F569442B5814F22BE
  
  89C60D912408D5051FAB8C57722FF6942D045A2D62B2A696867DEF3915EE1973561E8ED1654B49
  
  3E99B2775605066B36BD156A1347E06B30DB129214BEBFEED880C0B58290C5F6295D243EC46C6E
  
  122F6E2EEF4C7DB5AD9EFA493CFB01173C8C92A76A5F900DF0203032C490208EE5E8C0088704A6
  
  BC1D69B4CD2FE122FD8DE579801B110C76FD8FAC88C24558B127BB90743DDE71FDE97B1DAC7B96
  
  4C4E5DD8EAD9F0E99D451ED92B4DDDF8B76643727F8D011F3E527A16A703CD8A597F18685AE00C
  
  D44944A77B69D092B3A61EC940DD8F64C1850AF7C8D17B690239707000BA1A0C0C1D23648838A2
  
  1C0BFF9240EBA6DB5832214ACC8CF022BAD305F6594A9C5B7FBFC3881958A170B0267870E4B831
  
  F68951BB9952F79107BCDF24BA4B41EE2FC31C07E4A4A7340B36B1CD121789D633AA958563B80F
  
  A6CB56F11EAC5B468839E95666A96B7DF9D3EB16F56D69BD3DD6DC6D34458B3D56D55EE9BB2E52
  
  EB357887DB2B8C12D064EF31E2B53EC48A4964FEF00DDF0CB26E6B2FFA5F5866649BC3415C0E65
  
  10C09814158C8B391B74A3D7A07EF7385193BCBAAF26ED086191FFB8328BF3511B4CD54C636877
  
  A916866174DF0260801639B3024B9C965116B2A68DEC8E171A620AB471F673391A31B081665F27
  
  826E9AC2A33DCB0565134E407C618715E146CECFD58EAF40D1575A805DF12B71AC3D3BBA4913CA
  
  D84185BB7FDB6A2EDC904EC0FE8D95255FC50174A506DF939FC0FE8C6DD4D27566C32569EA2339
  
  583D4FAA82E00FF9DB8D3235D00AC3C1AC58306D2E02D65D54DEE6DF6ECF33726E2444F60DBFA3
  
  DFF4F6FD4AE88376B507E721C9E9FE030D77B95AB29C6DB703FA45515A424B212ACF9D658D848D
  
  120883DEEE78345A35679BF82D7C26297259D8697A0C221E26C6EABF3A727D951221CEE74DFDF1
  
  5A33360DEA36DD0063515B5DD17C204E0F4D4935FD0BBEE775DBFFAE232AA018A04A5E59EC63DD
  
  DD0B8B11450FFF9DA0D4894778877E0C63C82489D3F7CF67B61EE08A61130FB77E15B50B7E87A4
  
  2F6F837D50FA3665528DF916B187B11955B0424A7603F1F6DC1E2BF41EAC6E98E9F0F5F44580A0
  
  AB8C649EDD4F960F4759CBC2995DB0C0E07A8F773EF9F58EA54429779B7D085FB46A519CA89BCB
  
  0340AF843ECB37A8208B7736AC27481172728C360DB17CFE81E3635794CA918C2BBD6654D2D4B7
  
  4006053EE17D1DD7EFB8EA882CD055BB5FC9BAAAEE63089A6F20BF88ED9EA643AC27DCE9BC1F1A
  
  B9F15B40172C7E4C0602D13D13216CF0F2D57E51B751AFCF8160835FD4E3D21A58898401425961
  
  69271E2DC95D72E6F075F413C96DB7DD17B3FF2608809D0877E212A7D1D17E74CB4FF48B65645C
  
  B8126D05AEBBF1A6EDC704787CCF57F9B7CACD75F748A5A6A1C4EC863CEEB2BB1D9A4A207B4E0B
  
  901060D0E3A9879970AE98464D8D67F9B4D7C6E582F030B8D8D62E15FDDBBA25CCA8A9EFBC02EF
  
  C304CAEE902670819463DCB0414B3D185AA6DD370B81CA9145C75AD4F7A47411F2BD0CA1507488
  
  117868458C0802010078CB4EC2BE0308C9DC22AEF5B2E9294EC00BB5568916164DA18CE69D170F
  
  A3641D29D0DFD08B5AF6E1F1951CD9257C0699B3FC1B6CC19422F433CEBCC7CC1E0D30CCA1C6F2
  
  D3FFB1384F5A1D32681A5DDF49933629F7B044E45DD748DE8509257E688F1CB637FB766269CBFE
  
  E206B2C1560CC3A84470CDCE8FA0C74274DF5094D413D5A51D1ABDFAA66D9C9DD627D72C29A9D2
  
  B0A3552789774110481FF3F7E0CB583C7AC5634F0922C53FD81601497E96B81008D9C5B49F4ED4
  
  01FC2CDC9744C2E31941BB1DA34F6F6CB63DC2C23A4BE17D3D13D413188A2AF77143021D376E61
  
  7EB1B2D30CF5A1C2C76EEDEBEB710C0C4158958C3D2BA289895F79E3DD45B030D90B12640961B5
  
  030D1FFC621B54A8693493B5FBDD1905132ED26F9799370A67B0D90F7F9DFB080E141F643936CF
  
  DA810EE85201704A15B92C4419D65C0BD1ADAC4F157958D52B528A84BCC69F57A25123A04D2202
  
  319067B8B8E80FEA80DDBA9FC075AEDC480E8209111F9444742A8707F576A7C7A1DDB894A33813
  
  C2D6FFA7B08E2DDC1309EE20B1D80BC387F9DF1BB786BF6E82640D775F084ABCB86C07DF15413A
  
  0475F26FF62960ADD1B94F20FFB2A908AAE2C79AC4EC3899425855D80262B2758E76A4488D3A47
  
  0058CE7BBBE7C991183499EBD2C550C2918EDAB5BD9D43273C44DD192024F73468BA0EAD2825D4
  
  99EFF4A9B1C2FC64AE2222A17116C1F8CD61622B08BD573036C48956C3513A6A3B9F066915378C
  
  2A41B3163689952847ADB7F624303785E9F61ADD7C2E647D2A171A5A0471E76C9C6DE4909B015E
  
  3BDFC9836DB884492F5C9CD77F5E29DBBC80F5B836684E82900FACC7A2CC1D20E6FEE60BEEAE93
  
  DB98DE238B66D13BDC858590654F960FD6AAA779F00DB7736C7F18808FFC167AE32421FB975E94
  
  7FC49A2320DDCC4B6841F54EA228A58383D420A25C21E85C99664C8BB20AAC66390BA46B49BA7C
  
  6834E8F18CB31FDB92FCACF11FF1A9C53F06D6992B06BF0C01DA2082E6EA705224841A7C6AD02B
  
  015C2AAD19C8BBF1AE2506B08D57CFBC0B291402BDA5C95693AD65902F96B910D465CB935CCAFA
  
  D731C9F30B40EC59AF12446C1800C80AC60F4D4CE68B8044B5725727B3089ABBC6E9631A4BA5F6
  
  589891A2085C74E31A4A2C4F057380016F5083AFAB6D089E4EDA177045BFDF1682E848BEEF2D1A
  
  FD4F8F9DF6831FCA22CD7C4A351CFE770635DA22FD11B3326FF9AA79DE76EAFE99B699FF1C73C7
  
  12EBFFC1D84B0142914E1DFE990605E73CEE7D0E88B0498604C17966FF23C922FE70C522036200
  
  F5BEA081CDF8BCA8559CB22F108DB527AB6ABAE1B452967E50F712CCCBD11250C55825741F4767
  
  043411EF4D02A1B26E633CBB09E0DC3E68FEA33A257C26BC022769F71F2667776A57887DDC05B0
  
  69C1424F908D8AF85968055739D0E766DA997B2E5C53B9022CFF01B004EB0FDD59BD59A030E6C8
  
  291EE9D771DABBD55EF78B6F2C46B77A7DAF429037B45535865C7F2147D604491D39647E4FCCA1
  
  B5668B1006B0C8F6214D7E5EB5519BE843927C3BE4C3C236F102A1A1EE8B82E5DF34BC8FFDACDB
  
  79B2DB91A52FEE4892F7F2452B903DD6361ECBAB07138F356959B832819C88ABE9A6B999BADA2E
  
  1A3C32B04F731E75C727472E231B1BD79E040BDB72175327250905570FCD9D9D71D627D7914AD4
  
  FA536AA6461D5F512E2E1EB7475AF6A83C10930568DF48BF2794490B1FD7269473E8E56DB81219
  
  5127ED78E500ABCA9D2603EB463248B1B3F6EE7E0C870083849AC7D83B848E819175C4075BDF51
  
  40901761E951EAD19DBE2AB491AD9EB5D124A20CBABBECF05FAC7AD608A1ACBCE7FD1C8848E614
  
  FC989A31D0010EC3A11CD6797EEE941D0546E0A594AAD95738EA0BD0BD7F55CDC0BF8DA082C0E8
  
  CEF349971D13CCE9246B74B6C552479B1E51C7B309AC025897E910B00746C1307BE2C531217E0E
  
  76CE8A47072D08CDA116B65E7568154BBD2D67F5723C187FD46E541977ABBA662BB08079D93BED
  
  78E924C2482B39861FBE1AD338DDF1364736B6030DB2FFF1E8965DD7631276D516A96DDFFC89DD
  
  2D3480422AFB31E9AB81EF1557AC5C723051096C41EA7D40BC7A1A2902E782DF8872DE2F27CC30
  
  0C645D4EF886716F2999815C1AF6372C359BF84C209C42B939185C6CBE14510B9DC029970BFDAD
  
  BFC7E2F4FB0F5060D69CFB0FF71026949BCC15FC179A4DC9BCA64CC4407B694EDBC54720323E4A
  
  271AD388529B07CF23B21886DE7D4CE721BDD11C18C8CD3D1D5261954840E2DEF872F0C711CBAE
  
  5155957BD2E9C4F927B7E8FC19B04608FD411C1301F46092A62F3F0A525436D9918AD9C47A7671
  
  F40AA31896C6DE827DC12FB7E7C7B5A9EAF931BEBF1A4AA4F28F9287C16AB78085A44C56338863
  
  92A9360C188383E33FF598CBCE34703AA4DB85B61B4B79D5387D5576128B22947976617B66FA9E
  
  C3D80E8A0EFE2570FB460060BDFBFD81FFA8A8986F56D26652AB29AD6EB2A4881FC48B023122C9
  
  22DAFA65337110C76490CE3F41BA4AA05F63C6FCB31AA5C399ED01FFF3948AB690BF01A3A1981C
  
  B120DD5BD1C45D2C57297689AEE480685BF23FEDBF665178A1BB54F9A5DA23F72314EC9FD0C697
  
  7CC96078461E48625C87A29D0D144E27A1D4D76E18024D0F6E90DBCEC4A13B7DB75A8E95E715DF
  
  3D73007071FB30FEE9F552D968BEA9B8FB822CCD6DD3383CA9A1E6FE8088C0DCEA9A5D38C0418E
  
  8868115A2BFE6D055580AFEFDF70D512C8488C3C1389F26ADFC767330451F77D20627F9563E919
  
  E5182ED2C8E07DA540EE2C6925D1E5C6AE5D10FAA84DFFE90AD8B882FDD431DDFE36B513614543
  
  18FB47C39FACA4D661785920A8BBEBBD72DBBCAAC1B66C944AEDA018BFF8F15CD5917BE4A1C799
  
  D7F96C69B5B79F11AA36ACFB9A39639D7506E18800A8612D1D2C918F3CD4B977C1FCF1771918CA
  
  7CE4E550A24DC0F9A45971B27AF2D68A8641A4A209B4FD72857710BE6066B5DAB23146AC868043
  
  A04E8152C51CB0FF7DFE41576CFB42998E63F793A33F1B61280BB61597C0E3B176DED299919E72
  
  F6F3FA4C138D20E40B91988EF9DFAF307064C9C307C9F4F2E9AA4D52154E7BDD6196987C6F6E88
  
  0543802347427FAD9EAF1C879928A5404DF240E865383DC007581DC29B28FC18F1E6BA840CB19F
  
  E639C67070A110B07DB6519A5A0729A7DE82A3CDDB03765E1A7C817EC62225A7D2850101E07D22
  
  9C7CBCE0B46A2B335CA90372DADCEE984BD75B0CEF13F1CF7237E15925C7B54B261236E2620874
  
  ACEFB5978C00E066A03A57816A73D8F559FBE006A944E0F026D8CCF319866693B4A62FF4810A2F
  
  D29AC35F429BA0438A7472DA76510937F799B42D962F3F196E15B2335996A92304C4BDDF7127EA
  
  2F09FB7C779525029B0EC86F86C7E415B81D5042714FDFBD2457FDBD5AC6C1D4382D593586E2E2
  
  AE9660529DD0FF72D2C77A9E4B76689F8EE5C9BA72D300271B8CB2BBB36F10F57309344C3114D2
  
  31762FC68BAA5C482B338F847E4EF63F50A9A71BBDD8214C67A9FDCD1CDE72CF070376D80B0BFC
  
  BEFBA9C930942D35E84CA28EA2857ADBA216D89775E45FFB47AC29B41138CA03BD79122A78B991
  
  431714404223B0D01EE8F13800C8346AFFFD8631D4CB1A6AF4653A68819FC2545591D8CBA85E3E
  
  620C816F89B8AA543923139859E0DCF0830C02BEA236E6AC40069CD4BCCED8885CDA68DBDB9071
  
  CE61C61718FE318090B0C2D6CD1058CF9F9A06B81D114215F15D3411327BD48AA846F18E33D9AD
  
  1425CA8487AFB33BF900B4AB8D9DAE545A4EF203F4844F7001C04EB3E5BBF668827A2D12BE4209
  
  31CDE4E81A3AE0501EE4E8E7DA116DB6441152FF89F045150D3EE7929D88E345102EA7F20E714A
  
  0405B415972B1650D5C9202066C813703D202469FD0ED3483875D2CD955E75A892991E446F1418
  
  5558431A076FF440F40CB59D0A9EE40687AEE1CC7336B9D7B9ABF172E4DC863F1591D4D24290AA
  
  8580AF3A3ED5B7E79D8FF6DAB6811B1027FDA887469877304EF1801E8186AF988D0CB892EFF7F0
  
  6A548FF6D5A5A382FFC1A338CFD62DEC1F389A01E26D0F0526AB2B15A7252F1EB03C188D0FE73B
  
  6F4524B4F437840704040AAEA38154526039EFDB651313EFEF1682FD844D6B8126844FD6A19587
  
  A134552833F7AA7E3681EEFFC2589677A4363E8E95469F3C6656E77CF69572D3408E9B6D8436F3
  
  CDB926A3A57EA54276050C4B3CD8964678667AC0785C9E900991117627D435FF038F799DE089E6
  
  DF28E2A40980D7F7256FAA2928EBA12A8D6FDD80551B0CF3AA442D840A11C951B444E519C19F2F
  
  D0F1DE472FAC0E2EA0BA899A3E70313D28B48A6AC362F9C7EA5D5ACF5D04376DE6C88436B760FE
  
  8BF694ECDD6C366AC31D34469000FBF31BAE9C14FB2030F15A2965B917021780EC469F00B0828B
  
  E2FB98E545B2E430921B855036CCFEC6EC9B4FF0EBB69A91495383154AB84F331A3213BDD95158
  
  20BEDEFF4975E076AA8BD9A4899B5BE7ADB271C17823B18488D7B387B1AFC7106C87D219DDF96A
  
  E866F1B06760765BB2AFDDD952FE0BCDBB6318345F8DAD1A782AA536F7148ADC2D3BF5EF6C6A62
  
  9DAC5A49BF18F9F21E9AD7DEBD237C229286FE2370560139569338D455D8D3A913D329E8072E63
  
  A07660176FBEFEB9D88FC1C2D9D76C51CD30781E4EE59F8BF4F436D9AA13A39CED387CB57324D7
  
  26ABDAEB30DB1B1E14769F5F4DC72ADC8BD757906FC443BF6DFDDDF2CDA866402363DFD9BE8B88
  
  A68DA3D0E0B3BAA404A97F551A0B6C90D349FB9F17DE955FF5FCF807C3889FE10DCA11AC73E855
  
  B7D92A26E64BE1971AB93582F7F53F1C7B1FE401D7F0EB0EB121266CFF5E23B3332D8B4102A4CE
  
  F30634C7107FF9780A8BFEFEB13FE5EA78D8E5C9E2E88E22353D24FC45889CA12FFA14D370900F
  
  257B14E761D49C74FC19B97412120E4BE4EAD094398E92BF1DEF4D34E1DC258A85BC623547B871
  
  04FBB02F402204024A66BF66EDA4DB5F667FDFD7C0CB6FFD799288DB110EA1FE7D7C3CF3A130B4
  
  29D2450D87507E68C68F2F130A3414B4478AFB1ED6BD55AF66EC53E627B0F27649D5C5AA59A791
  
  92DE139AAC89A378F0DA22A328BAED591D66035B958B33971B67D736B119732A5244562CE932AD
  
  36ED9C9BF9A0756DD63E909527114D58061879508B9C043A7018AC3F1BCFD070C7C6DB879CBC5F
  
  305BCB24C16F43D8E9B77B5D2A0D3737536E645049A64ED555C99909AF80F60B2F2307EC58EF91
  
  479E1C447A57EFA5AD0652F78F952E6508A768A88F8DDEC8549865B9266B54D03AFB1929F71DD5
  
  177D05DBDB4553A8C3EBA11F284D9F6C8A235372F75C9C06A1359733978AE5F9653F015741E648
  
  26EB92F4AE59D11405A59954475D559ACB8D098CD4C026A95D678AFD85A9F2031F6D242A285486
  
  1385CD2BED55B6E54261AD3A95C6AB4626FBC5D6C4F6A60992976D406FEECDB792211CA133C433
  
  28F8D43FAFAB9A4489DD1E1E8884B4BA0B258660FB8B8BEA218DE0A7D9E5DCEAE8BA1FFA236268
  
  7AE463303E16C6DBAD3E2FBDC0C904B83DBA9134B3C72EC1FCF6855C08E973E00BA8D37E864EF2
  
  0B6748A6625C854116C3E32D5B24F584963D5B492F6666A284D16A2F3E32E5D7792DCC1E5605B4
  
  CDBE4E0D62DFE84B351B24A509A5DC9D1C2132B81C682096DF4ED7CE6A3D6DC517C6FEE8103DA7
  
  3B5D841D2B4BBAADCD7D1316EAC6809F76B99FE16EA92272782AE3930F1A0052078D98AA17367E
  
  7041C383C730EE085D6089164AADC4637D3CC6A61F292E581DB0D37B7D1214A8F12852FFB636D7
  
  2F2FD9E6AB2AE1F967E2A750AC0AD364E64207669A2BAEBD191E494D1B087448F6DBD8B2293A27
  
  C115E34DEEF3DF79AE1AB33201E0AD653ACA72CC06AD15575314DE4B76009F761B8A1C6788A672
  
  2D20DE46026772117F42171B5D09E5414A54EA45D760DD3FD47FB5458A78E5FFC83B59AEE4F8C2
  
  4106E0D76B719F7C1295DCBC71AD46DEF7E2472BE922047D8B633D386102BCBA4964A90A5247C0
  
  D24CCA298D38A3C513D260EE4821B58391984253385BC61429658E328D86DC61B5FE047705C8DE
  
  C93170F92376BB4CE94B4C92B8CE638FEC140832DFD8583430EE39137342CA0F529737A8F9E184
  
  264AE2A1E172377E931C6A8C0141D36F6446011A9715D4B6BBE1DDCA53E3AC72A71F60ED86EC6C
  
  FDA227E05534991E76E9AA48522EA4261F4A5670276C8048A4AB9500719D92F04080D318B156FF
  
  FC216BC1BE00C8E3160752BF5B029BAA85780C51C4CA162C7840E74507D433CC9D71C62B4CAE14
  
  A3AB4ADB2729C7538B2ECBEC4E69A1F77903BBC68CFED0BE0DEE9C690E7CE74B5BB9C27A5F115D
  
  B17015C39A8E60435E00056879745A41552F95F7A540D535A02F29061AE5D30DDEB8D30D9FC2BE
  
  B04CD49DFD2363C4C7FE8384E90F98BA8C26381D9D3428029CBB9933AB471CEF18F3F8EE585309
  
  29731EB100908BBC1F074F399AA39CCF5D12DA38CA38F464C958887C155A4A77A002F91090DDA2
  
  00B815AD1E02C03F44844628BD703E2E0D6AB53C819373A94ADFFFA6579160E69AD0F1EC130930
  
  22F0B4D2F710CFB0F734B01F625E407F9F7E0F143131C1713D770144664EA989BE0B9ECC3B9FB1
  
  45C1043F02B481D8CABCF21DC134553FC4C1D4353E7180EA4CB1FCEABEF74D6FE5BBEAC7F30B08
  
  1D88EB0A0626622A557DF6E860E54537A8FE0D2ED0B974B994406AE52D47E94FB8E29EF6B02DD9
  
  4A37DC770DA855A59B74BAAE1685BA3EAE24FEF55B06A6036A3D4F5109F1ED4B59AA6218629C1F
  
  455145479611A2B9FA83A7AB1C8A80C5BAEDE37E7BE195C68E36FD18E20BEC787BB13B8E1C9806
  
  747D85C64A42181637E86CA28FF135CED22E4D4535CDE74E2AD4CA93F9A30E7940F28DB59AC1A4
  
  1F8CA12CB965E0BB5C45A5F1D0A5DBCDA210433733384A75CBA8EB93BCFF05AEE3444587FF31CF
  
  6495FF8CAB4CECA16FEB0C81EB48571D30040A90CC422043B8EA732A4DAFE4E552374153124B4E
  
  B3D35C56EE5B4A146111BBC6D9630DB2C9E04D26EBDADB46139C259319C7C9A750FF2945134676
  
  87DE68BAB7BA6DECA22FCAF2E5F20867A9C17AB3E3DCAC03A8DB896D2C0243E95652529875518C
  
  CE050A49DE34F59F3A3422C3C6E4A57FB343A0458858C6B676F920857EABD9941924C5710C6768
  
  C5A0081FB8F47E9BC9ECB701BF097F033C4AAC3E18B02EF9222867D25FDA8FD291F930D163F344
  
  5EE38B44FADC0E830F93560E1BA52EB9CE9B375E9F0DFD60627BFC8368BC0B7C4C443D8D91907E
  
  9FDCD0666EE6A9D9642809314652EFD4E5769A164B50DFF8486F208903CE4F5176C86C3642DB60
  
  AC3FA2DE9C104E36BB76D56DA593FB796036C17A04A65F2BE8BB9B37055DCD6F79E18AB00BDCBA
  
  AAF3FA95C49A84A69EF4C11D60658C35205D97D3AC3003B6592EE366A16AA0D1F9D32E9EEB5B88
  
  08AFD6123CF756C524E15C7E5DD0FE7CFEA135BE1BE85201EFEDF61F046C652A48D435A2F6024E
  
  A310E4FD3CBEE0A9C6B1CD02B1F3A1C8C973C5F281C86194501BD03EB5C3E2A30C9EBB8E4EFB16
  
  63EEDC0969C48C6724A5C126E05B9579C0310869DD1EC88A7BF8562EED99C57C115419E6599BA5
  
  8323324867E2BD6E972632380D2D271E332C52E1A87BB45C4F66C9F83693E6A9A25BC0B1BB7570
  
  18FEE261F8D4529D93F23289C0B75CFB0BB6A55545712C945707FBC29CBB70A4C9C3976C1DD0F6
  
  171E579A75FBAB3821A2C5DE45D8C17EA16FA4BE1069D7549E57E5922BFA18286A1BAAD644161A
  
  02AB843CD5626028C3E6A52BD3CDC7599627A49AD4880EA5AB56936656A87BADB828C6C9200E28
  
  270D8041269ED78A655718099F099E9F17FE27A71DF161D4F1606090F192E561ACA5F32B827854
  
  2611632F21CCEB3225334427D9EAF9AD3D9696AB3B0596598D2DA1912EADD2A7D0859AB26D6CFA
  
  2276B79C826353CAA0EA34F690D6396768EFA8BD8A65CAB43232723324CD05FC517F317D8C5E0C
  
  809FFE78C393F7E8BD88141D1AFAE885E02BB0203C7D726310F6EDDDE8B38C1FFFF342D4E81EFC
  
  1CC68D072F68A0FAC14BF5A90EB7F07604479489CC57209796969D62C92134B59ADF264EB1B158
  
  56AF2B32CC769ACA670351EAD8D3E59117E613A4FD5845C38AA0AD375196F2628920F299B94EC2
  
  363847CA4707A9506C8DE4EA9B0C38DA88567FCED40BC94E7465C39D3F627EF70429548C38C2E1
  
  F007005DFE7BAA7701B183A2CFDEB36CF84091242A3CDD8C5947513BCF7FAA462A92F1E84B3196
  
  E3CFB019320485FED7DB231ACBC56C0EEFCF344525F0DE150AA8933A4D1AEFC4C2699C4B1E5FBC
  
  15AA3A894023FD3F0C75D797E710FC1B41C48BAC6F5AA0BB2CB178B705C103B68F7E8436C4DD02
  
  F054C2B4B6C38736D99C5BD8C57AFAE676FC8B4F078DB83EE6FEA0C97BD434061BF572F6615B37
  
  419EF5250E32C4F0F48EE779E500E7E3C4D2AFF699A4077473A29CE8C2A2FB92646107576F42E4
  
  8DE1233ABA4720564DE68990425D6B4990FD198243277457A42693457CC7AAFB358184F6AAA4FA
  
  1FEBC93C5733812A1B308DA509F473760D1F2E846F8EB2D52FD55CB220F4C198204BD21EA2DF0B
  
  31434616F86D529DE5CBCAC53FDB7EEA6972691E9B8981521087C25F1574576BF799569E3699EB
  
  74618DDFCD5F01E6BAB0FF513EC7E2B3003006D96E4095EF5009044A5F1C3B006AEB4D15ECDE5D
  
  53C1C76D35D87AF201BB47C94DAB1BCC182C4F48747AA7E1ED991C4B62D9F9D08D4283EED5D288
  
  7EE21B7DE249F731509FB6B9089543F4791C41F3BC0EEFA197923DA86308DEC8D632BE0221294C
  
  A4AED2F61C297D167045E5E5A3012E223D6C348899712C550638351F12FEB3D67368959EAA8B00
  
  90996E39EDDC5B3B1684E2DF4DFCDBC89A6A6F9B0AFCCB2115217316A48812C168B243734B57B9
  
  CBD7F05A1CCE9E325F0FBDA791EAE7E666D1FD7F2D5F085165D2BB10387513ACF9A900F84934CE
  
  93A66CD1BED3F990714AD938BA8572A71E5B2557C294C1D1A20F27E51B355FB37112345DC33707
  
  73FE750D5C2330781E0A05636DF0F283046B973D1B124D92A21A3E0ACEA879849700D5901093F2
  
  7B3F90460D82194CDB01A2CF38FAEF964374EB11D0E150A2297D8CA4A5A5C55BEA93B00ECC919E
  
  7246C289404CAD3466EF6BF2810CF1EF740D285D3302B5B3363A607491871FCD181E8CED5C0C30
  
  19FA33F165CD9630D130917C2A246F2D5003657DBB2FA8A7E3FA840482CF21E574AB74B9EB5027
  
  387DA40FB3EBBA1894297CD356E20ACF7D956A3E142248A5899FE940A25BD5C812C0E8DC923EFE
  
  27E49644938E3BD99A086AD697F0AC758390B364B52C049BB1B32376F3AEFC15CB4DB333C148BE
  
  9CA5C18DB38B9EB1F39F07C3C2EAE2AFB0238F687583ED7FE04F55632541AC572E0BB7C7659AA3
  
  999D8CA12D6267FDB0F1CD720C174CC28EE37C78CD803B876B8168205F36687C12C0A2D35D1DE4
  
  B86F4E865A741E82EEA9C8E4383AEC599D1DB85C6BF3883C3218BBC0AB643CD51B8D51A34492F0
  
  CB4C1BA4781929C2784C11F84DE699B0C84C35A504C35E672E941F1D6BA54960F6C519F11028DD
  
  CF0E0991E18A77F772C43CE95BDEDDA9C8D85633EA60A7358E0645D4B64F751B11AE8AE27ECB17
  
  CB385DE259BA1FD78EA8A55DBFECC2670DA3C0140479B61ACD99A59ADC50849C6AA787C7A9B975
  
  D84E2A30529AB8FAE0995DD66BBB5C6053E3B96C567156A4696B1736C2F6E1834B8B8EE42CDB90
  
  315692D6BE299D714C6E43CE13DE4282B261C5188ED6C6D875B8D308D844152BEB15A3B15A8B6A
  
  924DCF7285FB858973671B972AEEE6774A57526F21FC7EED805693A007B2B43694D5D30C9DA604
  
  B3FA6278114DD98744698D885FF714743BBE7F81F2FBABE454BFFD74CB601AE106AAE61E099486
  
  1754E4CF312A1DDC7BD0F85D854D15FDBBF296317ABB0D0B2824CECE362E2137A2F5792279EF05
  
  D0FA6B7DDD4FEF69FFF97AD07FA95F3CB393C4B0DB2311596AB63974B6B761CC98407731AFF2DE
  
  1A522753315EDC07F72CC73BF7B55D769E024A09710F141A21BF94E9B71C8812CDD8C7F7C3AC60
  
  618ECCE4AC81F7D86B75E126736A904256F5558ECE41A471E8F77B5FBD1FE2FF4CF0FE56861223
  
  24C1D13CAF1576306ADCAC1927686139882609FCE3367171FBD0F017DCEDFC909B4039643C3FAE
  
  F5946EA31312460BAA458F5AC3A3E57E5247AA390ECA4F29EA32324F06AA3C376CB5C680DD16F3
  
  8434566DC54E7D4C6D6390124BB69EF6D9AB265D1ED2C68335870B09DF57C137E603A0F8D26E77
  
  A4B18B7E7225B0A92AF92C4F22D43AE053EECAEB3F8981A8ED13D504E6467D266BF7244C0A1A30
  
  A59700C1EB9E18131263AF51A9460C1B753316A1BC587FAFE3B5A7EC6E86626D5FBE6BA3113FAD
  
  E67631B83301424CA27AFC6164414F8262E3FE28270F8ADA96AF0232FFAFE64D37F510741EAB4C
  
  116E09780A2C64AB82C655B1EA221EEF257C667938E34A4F956B7DD951D10D2344D228DF2B59CB
  
  E9AB72822ACE270789F972426D56A03686EADE28431C07B3BD73F6BE22FDF7688E3B77128CF74F
  
  DE98734C3390EDB78740F24452ABC545AD08057CEF1323338C0CF3F0210A9D50CF7D4591D22DC4
  
  76E429B462B76E965583146684B0E2A8C6D40AC7F42D595478C94C01F9AFC8A1ADBE2D4B13E02D
  
  D52A19886A3978CCF3C9C9E391FD66039C5622839CC60120408839E5558136C57E4BEA2761F38A
  
  6D00F4951267377F369B7782C92D7BF00C6F812962F86BBDAA43DA7DF4680EE852F4EF9D82BB34
  
  5BC1F8F76A9B7C09820108BFE054C80AB56B88B438489D0CC0972081255C9EFACDAA08BC81E0B7
  
  E04C201A1212D597628BB82894EA711D739161E513994A67C0C63597117736CF1A9048D244E09D
  
  4804C10483D047433F0A69259DCF999558AFFB6739D372221E490EA8B106D0AFC78EAD9BD50E52
  
  FCDACA4C0F3ED13650B73EC4F8D0C6C4B0BE299B4AB253DD4ABCD28A96F762CE45787FEFA89D7D
  
  F5675D0DE092FA7097198538F031A75BFA2E91A64D1206AB59C5FDBC24C80FA54CD168E19541EF
  
  79736FC6D00896D75C64E79D93C6658A002A91B5BAC71583518C604973652220CF1CB626DAD853
  
  8C16645C699F5785A8626BF1A62FEAB57CB263881B102891B5D886B09F678AE801CBFFACA29067
  
  C1126BB0136ACDDE81D07F2F9199FE439D3553A8152E9E2C31EBA2E0754BBBA72DCF525A85B08F
  
  FC52CAB7135E2A3C849DFBCA86FA0C2217B9CFF755542FB4C145A561696D3561B5C53F570F617F
  
  60CBC31A1EE0F570099C4FC2C4703E1B2AE86C72A3EF8A138EE9CCAC2814533DA20E4AB5D170D9
  
  BB2A2A4FE1C14A95E18DBF3EFB0400A835EC1F50004CBDA8FFE73347027B9151C0E00111C3DB3B
  
  15447D000CB0E6FD0FE985AD70AE5243EC8DCCE1E5E70018087A36A725DE1A6B6EA02A9CC323CA
  
  943BCFC546B5FF43D3EC315817DD6593B6AC7C52035E06629509EBE7CF9B5F9B24E291C06952C8
  
  CC8AF9A5FEBDF8D16B22D7BB518E1191A1E0DBA68066F1CE159C5E7609EC3AC7F4A052EBE5E027
  
  07124CDF8418DB9C026563402764B44B0E8AF31F2BD60DA60E42C0B329EE32C0344D409E155FD9
  
  3A6F2995F965DF6855222AB0996B185DEC4790642BA10D3B97B1028D9AE6943B7DE5F2C7A9E15A
  
  D670FD350CB7A63316DF50950773AFBBF7F7BFC8BC910EF3A955708830C13C931E85CF7D165DAB
  
  7A927810963307FCC2254AC2CC9CE5B83293AFDFB9A5DD00800AC68B431C08B2E92BB2BFB6FF55
  
  6D70512CA099BF840CEE70CF163131BAFDC2D36F9089E090DC660A94F170C0ED6F5BB6EE2AD769
  
  BE951B40DC1E46180B2E557289C9F13CBD9D331F208462A20C269629AF7E181B9776335CD34A9E
  
  AB4B1D8196899BBBE946FD56C8180C42C178536E72A131A4D087ACD38B9662CF3E0BC2C04E9384
  
  8263F8D64EDC6B3C511C30EF4A782DA27E530F96AA0E1CA4D28EA1062FF4643065DDF958DD9124
  
  BD975D27D6BC79EA3A1963B9930B5DC0297AB9E3F02745BCFEBF83BB9DAB46E2D3423DEFBF0527
  
  7013D6FCD08EAA5407CCEE0F91B8D6B4DC89E3A467759B81C81379952E3621D57E86B79605EC10
  
  59A9D46BB301EBBECCCB615DF91D7A0A92B17EC4C8716C4F1E67DE7D069F7CA1E4566F6D9DB96A
  
  E3BAABFCB6E2DF6005182B7BBBA7F96F99315CA76E12497BB76B2C94B85543F7F1819D3F53F2CD
  
  B6DABCC5C8E7B80995DCD3D04A5F47EF30D725EB6158A7A32EC17D4970A1159455B23075774DBA
  
  95CF0DF8F15FCB4AADE80C8D0C92762597461A7B04384AC2556486B3A521B44718911083B06224
  
  3BD1D54A4C8CAB43D207FA4661AAC7CF4A0A421C01111A02AEAA3A98EAF39B15298EB75E16C3F6
  
  7BE08948F016C922EF7489B3369817780C7FBA1712B8F1260EFE02F0A7F112DD0E85C62026CF63
  
  C30633F1C55843AB7EBCC38F38E2517E35D257D7220BFF5BE2C6CCE34BB73EC225CAD182E702B3
  
  C03740D558DFCBC5FCED3DB10AEC7AF1E6AE84B54D5D4CA79F56DD690DAFC5AE7F9383EC2232D3
  
  4BBD2B125CB78E2B2012712B3C51849867665C98CA25F3E6B9E02EC89B5B376D7905F7302CD6E2
  
  8C33470C0B343160BF0F1B3A9CA0A47B6065B6537AFEBC1CBCEF795083CBC98CEAF9A60D9CEF8E
  
  E6F487CECD88484BB4F149807CC4B896F511C2C530EF292AA50A9D5E55C935209300AE63A15A7D
  
  7FDD1179B2F57525B70F6EF40036BD66B6C26A998077D5BB50BBC122B806D45AC248B52CAA6E4F
  
  B9E039E30BEB78CDADDE810534751F7A32356A51065CDE5424750CEA579D034A6C6CBCBA2B2638
  
  89B767879DAAA9923F0FA769ADB474373CF8EAEE7CB465F859DFE1E70085F5FC946C31354F1E24
  
  4F31C7E9B5F7903D92D73886ACAE7666F2CDD1CE3AAF67079DC4E919119230DA6B369AADDF240C
  
  E90DBCD8AB3972CE09E5710B95963C6A62EE56E09164EFA77ACA7E0EC5FCEF4D37A2DBC54A9783
  
  DB9E21045860D59321743522C7BDD14F073DD55B613F7F15065EF97456D1C930E6B8FB5D9EC44B
  
  1110AC075443459EF10C48EF8E4FAC4493BE949B75ED0EBBCCB03E091144C18F1EA0239F90FD71
  
  E24B2C06AF13BBDDCD58CEE4C5A2926C873099D187219D067FE727B61C1859716C3DF07CF14CE5
  
  7D6A7925E329840D68F0AD61DB3FEF91B20DA41EB6F28352A9C49F7A141C6F43056A6CFC254E4A
  
  47A3F967AF9714F52459C5039CE105795612155576BE080701A77F0026FDDB2DA5B7F82D1CAC32
  
  C4EF60268870566A6C3CCB2FCCF0E11AB60FD644DACA696895FFA2CF72270C190F482EAE5753B5
  
  BFCD1AD6E2E8B10535DA012954D085C9A14DE998985E08F17446D8159DF61E0CDA6435147D4B6D
  
  8A2D2B115F49D2E10ADDD4EB66CA42161A5E9005A736D954244AB3D6520741CF1E3AC63930F40B
  
  3048F7801E18AFE557DFBF50C6E2C10D4F285F05B2C2C574D327C43A91501E6ACA45048C0DBCCE
  
  E966C28ADE74E461BFF1CF584F406E32BA473E0742B4329A76663D92B680E80A4BAECACCA837A1
  
  8C98D88F12039D80E6A8B7B0B206BFF62B073AB5961BEE45DAADC5493193780DA81792BF4E76B0
  
  A5542E5C973919D0EE1DA1DE5A5FA269862BB0D4694652849B612681CDCC7505CAC95B8FD72E26
  
  51B7E4C955608060FD1B5E4F8AB8ABCA6809FFE151203A5CA905849F629BDDD14899A9BBE3B175
  
  8AFDBFBD82ECA5B35F2C2B35D5C267E82E009CDDC6BE35E99E7918A69F28D1B7738B93916FB7BE
  
  CACB82727E263453F41D1CAE5F38B6C3709F00DE49573135553DEF7699FA6F96416AD567D971B3
  
  1893714A09B5B356D44783393FA1DF7EC6FC33FE5018454EBBD5B2ACF6AA6080565FCE674F3DA1
  
  DBD77DABF0DC6B34E1949BA2C010C5481009DA4337F7383D269DED79711A08E787228E09F0C3DE
  
  98C0EF82715C4FABFBC760775BFD1CEC7CCC8163331341A7D08209D3EDE45D78AB2A05D5726E2B
  
  D669043E02AF274385E1613F6A42E7E9B94B7662A5904C2669C827272ABC96ABE376DF7094ED2C
  
  21EC501CC30E631B2CD3B0F4BAB8C3CF2025130A99B93C704DF2F015A46874B5BCC8E65619FA50
  
  0D1AE2BCBD4C27F92447CD9E423EC5B67E35DF04CE30ACD6628A13FA20C14B518DD0301D3BEADA
  
  0A9C14B8DCB278170C97E107B4BADBA1B25B17F268F8B52B89575627478E28EF59F2D856C8CAA6
  
  0376C53E95BA854FC059EA938575276CE4716B7A19CD980998AAA79EC8ED57D56EE2EA80D2AB7C
  
  9B18100DA2A7EFA70ED40A32AB292129D897ADCD1CEBF6B30BB768ACABACC480AD6BF1E701E332
  
  B1A9746CEDDD127441C695C3A424A6DD84BF684A90B027B68EFBDEC98AA5B9CD97FAFAAAFC195D
  
  DC5468876B28F56E2F3AAB74D97366441B28CBAC0D328EB8FD98DF06E9980E21CA7F62345F00D3
  
  8CA82A1CBFE954CF8C5C77017A5E5CB6ECED90222B5B15D5D7310B3E24A98A64644EEAE0B0CB22
  
  BDC7FCC983CA94104C3AFAE71A75A3510CED1C210379E289C721BD4EFF82673565275826A41EA5
  
  3008BD6C1882E9C82346DA91E8DDBF092E78BFC009A0BCB0097E977881BF3C81BB6DE2784AFEF9
  
  BB0FE52CA91CB1EBBF01024B1EF941144229B0127599284FBF6EA7809BF36FABACFABE3FBA41A6
  
  CCDEEA1FF6656805CD945439E36F771DBF56F85AC6C9759FD7741FCA38CC362811962882428A9A
  
  29F9E788312B6751E4CC6AF15CB517E8F17A320BA4335D4C869C76FCAE7BDE59334C72B578B055
  
  AF5850D19199F26388B46D9E9F2940DAC3D9A43F45C5F7643CBA2D391672509102A883AADB998D
  
  1CBCB888D5BB71D740582F7B2BE1EDE7D6EF4A914DDF5368D547DADA2BE55971619AFE8D3A6728
  
  8C8F0A7FE9EC44E4E016091F7B14F79E81A4CD8C2599F6AE776136D38222AF1F61E18BD8BD6D6D
  
  23191E2D3AA63217C913C8D62A0940516E70996A30473621B8A257465D1E6B2966BAD8B447FA8D
  
  8E2EC2BE15CFAC9637A5BE198D2EFE6D8C204CDDF85399B98CA6911C9C8ED5F248F06CC8E9C27B
  
  6EBCCC8B2E54C4D15CE46A6BF3812CBDD67FFE2C83370EE792FB17C63C4222FB5EA5C363C296C4
  
  F9D174E62A3E8B6B7FE35BF4663E3D83D921486909441F1FDC95990C9189837094455BFAD987D9
  
  220E44CBFF2E4968E3D7D1D77AFCE67966B8E9FD11E13A66DE61C5F23DD00C6C48AE0AD7DE4DEA
  
  0BBB2C604E443FB88448FB6FC61D8AEEBD52C4937F5D28F611A758C111D1D57CBC262DBD0BC8DF
  
  A11E299C28240EDA643CC06A101FC0E45A3518E34F8BEBC4964DD5A84679F1E4C0A29284FD2C9A
  
  87E7DC0D1F3DBF68EB177C9C1CD6781A23372D3FBE655CC4DFEAC5134DEEDCC6F330176765D791
  
  D495ACEE8CB6FC15ED913A28706B538D9F97E986BC628DEEB1EFC820936E431BD5D0914C1E08AF
  
  D179571600350488E4342F7277F789A7BDB974A3D06DD9ACF9BC645FD11C253A92773F95CDF4AF
  
  911A7DD810A717617CEF422F7E2079CA35D7996D5D52A50F220E9B26A65A0A17B7DA4A864FCC2C
  
  DDF5CC26FE1E551A202F625941BAA8093A40E42FEFFB17D0262277AB9A9E41723ABC73817FAB73
  
  A7B59E306C148E2E9865DCA0DE0A03E46EA6938B53E030694F02F1CE0F8AFF7A89FAE33C8C7EA4
  
  72AC3BA8680AC06E61C60026F1C589E8381B3A54A86155156D20332FF2E5573755F0B980967BB6
  
  BE86A858B6EC486862BA702AD117185081B22A0359C811CEFCE9718AC2C3512A65AC63281BC018
  
  88849D996D8E1AA12002732CDEF0B8CF3911F71D905D52D9BEECECFA4A2DF8290C8A47021A6FA1
  
  146FF38E6424E588B4B4E10031F60C512DF082F09B539C18D08F18A4239FA9B64848CE318B0F9C
  
  B9F6A28D6BF1E788C16D6A7FB9201642206044F470D2AEC35DE8562C17DD7F522AB733E796B870
  
  4E05485F865355E55EEECF60E4A2B4E4CFA8E9822685C87A60562AC1459E246C7DA17F174E9E07
  
  2101975144EE4F24CDE6ED9254FB8ADEB415F895D3A71C68972628B39A058803DB85F07BC492A4
  
  72283DD3D27DB2359F881E1038324B38FF7C4EEF91EF1A00B741B51158199736473984D2080099
  
  CE737B03325F39D77EE2D5E7BBF1301207FEB963EDD88B52EAE4920A0CB758FCDCAD0411200A46
  
  48E657C26A41E7577D7E876A6A9DE16B2879A6CC6DBF8940BA4CF861579586F7AB2381F1D24404
  
  90BFD3FF6747FA93F3DED4671AECDF1C40344E75BC741CA78A2079114C7A94ADC560264E79464A
  
  2DDBA4D4E7848A2553FDE1CB51F51F9E6F10AB1AC4AC4D2FDF5D492AB9B8B71C6834F0DC3B239B
  
  E38621785C63DF6038B74D7D537BCB41147EA857BBDBBA40EA5550EA85935456D4BC945C7F56EE
  
  D375E22086CACA75B3E199125114EE9FA656FF5E9029566A72E9BA4C2DB5B83A5CA6CF2E1368B9
  
  B8B2D0B1E2ED6EE8B6EC56E3518019D92B6C062A92F77C09CA192E1E527626EEC78E553876EFAA
  
  0CDF14EAF92512C71FF6F00BBC63D8BC5093C0C343B927A4F233C0A1ED7961426D7B0296698F72
  
  51C051E3F28231FD3021485E3D8228C86299064AB9DAD2E63E59B995A4C6FA0F453114E83232F5
  
  982866D16EA1F35437C64807F8A72FA8DCDA4DC33B31840EDE22CC80F9C32F08F11683EE696204
  
  457280B39A2891ACE3433CCEA80465F0C07BE27115473FBB411CCEB8E3E532E8125AEA0026CE4D
  
  9F5054D296974F2D0A93D2E6526E88C266A54E937097572F03B66DD7F1939A82A8F4775EAB1CB2
  
  47E9DFEAE00C8A859F39103B149CA33BC6F932103736E727420201F3D38959ABAED09D9D0BA171
  
  F16344A49320062D4B0C30B82434A6482E23B0455E822358C76941E2EC6A8F574755551A771786
  
  07011FA2F4D0FFA7ABCA64205B4301CC8C47B1CD035947BAC00C26C1255EC01A6D90C58F760EBE
  
  7D7B40DB25E978CD72CDB8CCD13255D5DEB867043AC221CD32D78F60F8D9ACFC95340546DD7B7E
  
  A6CCFA481052C58BB41B35DD03B8D1ACC9BD8BC0A8C80CA72D9617AA6A151715263574F9665D62
  
  998818D755CD50A2D92DF966C05D28EA03FB5AE5709B93498EF66EA2D96681003E9F3316200A12
  
  DA96964D6B0BB42077A5306B713C46349C18EE4228EC1A9C29C10BA58218DF587BD534F08C044D
  
  6F09A5F103648BEF06337D3834709A69818F3D6234ACCB4A068F96048819D1D7A023A56903F894
  
  D378281BFA2339FE1A7483B72BCA52F6305A74A1421162BBA1253634EB7450149DF2FE3E10C6FA
  
  1235C24F82DACBDAF11986D3657067ACE1A8E2DE104EB4E101B6491FBD67EC70551DA5694BD122
  
  E35443DF164D0BAC413DD3DC1787AB92FDEBF0806942163B26EB3D142B03EEF3581CD3C32E53C3
  
  57205AA5214D723E4CE6939A9A093329C535621AD0E903411F755E71536C7E37A63B9952A9ABE9
  
  E892ACDC24716EC93661BB9F5A327AD098464D92A180475EAE5F209F0EBDFD799F7E9827F657F4
  
  8D39787ABD496491C8893E1C0633E5AC2E4F75A5A960CD535F0FC96E8F4FE555795C96055E05F7
  
  A05E82F5376513452591618FBB94860D90C701BC8525AF9C1967D97B853BA4ED48D095E995F77B
  
  140C4E1569AE44DD12AABC68801C014987F88DCF2B0191AEABCED90CAC275BEA617387D0F7A1AE
  
  58FCDBAB5D752D318EA1482BF580F7EAFD882B6864BF03CB2E4D59C179A0146C1BBC701F78B715
  
  5F3222AD0C1E76868106DCCA0D5DB602D83CD2DC870EE6E41F5610835B8F2FE2EC730EF9DE0BBB
  
  FEF4308A9AA0392BF0DF1C92CDE4F4ADE95DA0D13951476559CD3B4B7DEA14DF44597A9969BEB5
  
  33D87C8C19518219C64767DDFA5FACF173D64CCF96A36F962D53EE1580B823AFCF9E6E290454FD
  
  1C6C31C45DDE4220F04F3D85343A2B34EFEA529364D6CFDE58A5F225F7EF5076EDC22350F86176
  
  60DC8F9D72E7EB826A5E83CD1B2F0DACDF0195C67D4EE726870111F1A8766D73FFC89440046421
  
  958479D56FD0C78CA5EA7801EB645E593229031821AAC4664B5C814A88F58DCBD1CD44F83364C2
  
  2FB9EBEEDA09F97539843F54DB7FFD4AB3216DF6AC305F5D80EC63250C33E403385AE009B5AF1F
  
  5D831549B2ADD5ED946A694091D140F2C024FEA22BEA365E7EF7FF6F60E5F3B3769B667D2EE5A3
  
  358DD5602BCE6196CF32EB0270990FA05D9523712ABC8D8D24B5DBC77F05F5AF74C174D375061E
  
  A5F97DA12FD34223D84D14B547EB49B40CACE1755A4B09AAAE1AC31C5F62B57911DA81BD2C3C47
  
  FADCD221D9D04C2B4947E665A2B3D2A207DCB35213374C103A910DF8505ACECB1CD8349CF17ACB
  
  5EA463F040ED7649C718CEC21C6C82BCA30EE6CEB79C0A6F1FDBE16BA09CFAC34F7333ED1D189C
  
  1C0D872FD3182F329AAE3DF72BA0A0CDBE264DAB1AA8199CF5BC15678DB215657925C69DE05327
  
  102970108B4A5C67C280FD6C50F731E89672BBA79AEEDD3E623745E576452EB6C15733EC62B3C8
  
  D3D56D6FA18B50A21F6F318C2C36B5178E2D7E438D6590DA1C8FCBFDE177AD48E6673E1DAD7B60
  
  F4438F1AB360F2D40F1A30A0F87D7BAF53E6EE78BBF5B5A9565CABAD7E825D03847430C6422E39
  
  9F0858019AEB3056F2294EE96E4E9F182EC45FFC4EA98E0D499987FF218DC95D051EB30D65B088
  
  9CACA6EC7CD83118AF21E4D77E2A25B21F721105960025213131BB9E0BCEFD8DD79ED1BC39B0B9
  
  07A4ED456A9C51DDE3430010EC11D39A5317451B3777CC60CA9E02A50D3F66054DD668D016CD47
  
  C80EDEFD4A2ABE850D4322243FAE5B169CDD09BD253F3F24AB0B69B2DBE9A79E76CD393B71B942
  
  67883E9306E4AC25FC7C9BF66DC685B51348B0382F971242A764758437675D706FDFD6C14C0F0D
  
  DED0A5AACC1A23CF11ACD2F3B3098B3D2B4F0D34B045D78F98874EB2CCB25115CC47672C970844
  
  24C65A68AFDA977DBA9E519F280C3245AF8E89D0A3AEF334480056A1F203E1BFA0208BABD9BBF5
  
  0423E569F49BF4AAB4425E9D7C3C1FF9DCF6E32E53F881F2F880E1C0336D953A0D068B7DA33E16
  
  3E35DA07B9B5A3B5B9CD266B61E1E4423311A03709840309FFDDDFF0D0035E2D4F5793E6E916F3
  
  DBBDEA8E86C8C7381C16CC6901BA6C0D06DD0FF643AE6B59CA5506793D2B012A19CDE7A0D8B81C
  
  2FACEAC32BB2380C115F9A50FEF2E60AF7590E42138599F6E7637902B10571C4159EEA7B058E4D
  
  7392531DD1B2A3B1A5BB178454CF365AEE4997DE8267DAB239A8DDF7AB69F92CE805B56C336860
  
  C26529AC6FB987488B844957870B40E2A8B3B29FC3FCAEF0B3A6C02570F8661F4E4E455AFA1AE2
  
  52316BECB2C88FD34CCD6F6EEC6B703FBFFF5BDC8BAF056E5590F16BF93564722741FFF344CC8C
  
  86A1DE8AFAA4E2F58B5FD916D163D287327553EC1012183C46DCD9200011053ED4DDF774036C1C
  
  5DCF958B8E09B86CAE24E44B4ABCCB05DCACA0CF4B81998FB73E4E43582D2F204CA8D97882DFCE
  
  EEEF643AA39B5D4C9EB3EC3886A9D54E6ADCC2549E53AEBA70CA4CFAB465EC0D336D15870A2738
  
  72810C24C079AAB893AC53C3A2B42F39A4935E10F1B3F299E9BB3486D00ED66A18F03BA2DCBB04
  
  30DEC8D40D0077686CCBE52FC550EA96DA10223D1F1F098449643364615AE98BC26DDAF2D02508
  
  F66AC81C781625A272BC836106422FBC3DA4AC1CBD775E4AC13382DC49FA54445D82E6A16BAF81
  
  4035BD2B0C9F7E5FCDD50E3B8BE0ECEE39C5B983DFE84645392C40EAFCAAE07C10E209FD228380
  
  5CAD7C989BDEE2B3287DB6D725838513F3F95E50D5A09FC34C62285C1AD743F0C9AD485861740F
  
  462AD426D6CC9741CD14D97DF79533032217E213C572AD9D6D2E179FB877FC5CCEE2D16DC40195
  
  E3C8779A89B3164BBEC207F44FF66518E48CF96BCCFAF7A18F5F7E0FBB94E8D4F5F5A74E95F299
  
  101632B5A24EE041175A0725D30CB9D6D5C57CF41465BD63ECB8A65C400445B095D14A1DF726E9
  
  E1FE72F5EB25F426132783984FBA2AAE965106728C99F6B1F7D7BAFCABE55F09C476DA10D2948E
  
  4CF07E65D4B78DA6F9E9BBB5921BD2E753B8B692C315FEB2A10CA117584A65B6162360CFDDCEF9
  
  17EBC862229E2EAA9097AECE9A591E9BADF8C69BC5EC02674D2B58B7BC7F5CFDFDCC7A337BE52F
  
  6CEFAAFDE5D1394A39B1C188F91ADE1ED940F539D5310EBB5F7E1B11E8F2B0522FC676AE772D90
  
  F55C3DB9589466717F3BB1AE6163CCDF77BC0FD61F8BECE7491C13FA6ED8FAB9E02E39E4B4CBB6
  
  3B15E5CCD4381B15899F601210A376C6246484B046B6EE619B43853D7AD133E4252662C6190E20
  
  76AD846146A03CACA144C018C937FDBACDCC6809952FFD94A6F8E0C8042EF060F4182FE779DB01
  
  CF8B80F3545122FF6DB429E6EAAD3BA9A9267A6227D337D60274AB361C082A551B0B7A32EA7C3A
  
  6E371EA6EA9479B4911D5841432E2F75BFF1099272955D7864DDBF4C88C29E33DBA0A90BFE33F4
  
  4EC5C60A07514E78F9A72F8127A3A9EC2B575BCDB2302B9AD6549862C2A1F4FA9925B484D2B1D1
  
  1D5E4600D97A1C64251D00F4DEB37BB96718226A9EFD6E6B07E5808E35E1D10065C6AF64BFDCA5
  
  D413AE31FD92905EF6A15753902837120A1F978EE341910665A15F4DBBD7C06888A11A0C640661
  
  0ACA8E025D381A8FE29323DA62A6D70E8ED434A48FFBDC96CC763664147C3DEEC58440854ADD44
  
  8C4F25033AAC3401589980C968B2AE1896B4C495EF798CB46403F21E1918F2D251666D43D09C9C
  
  3F1A65D08BC55771EB3E6E4082B7F9B42440794240B24AEC9F4B9ECA0D79219C53405917D48123
  
  69588C23133C985984EC4EA17BB0B85EEA7F629BC9E2E10A5E829E770B8810776779A33A833A4D
  
  DD24DE64AB6CD5A089A82E7F293A24874C8C4125CE45E86CE263ACBB108DEF685139208A592A27
  
  774F3D7B92250FEB4A22883CC403C4D97DBA67ED0CEFB246809BAAEF201A54F921D34D222C5685
  
  709ADBFC96A7774037AB2F2995B7C93D2308631281DEFDF6A657BAB09E193D0C9F759B03F3F50B
  
  4A5F4BF39F4118342F5186C4E9DE29DFFCB7A6D63E0C306777BB9243648A1BE25660F9184DF9DD
  
  32D1FBF11D09D09E71899538291790F889E5C7EA2328E5FFD88134D33719BFE0048B80E85C08A0
  
  BF0C513D3FF7B870A67E6D22A06C7BF15F832F01FD8A435074AAA1A3B40B4C4BD374C8F566CC5A
  
  6527A447B0B225C216FD16F4F7402140D09DA108C0FF3DA5B26012B83F1D7083FE273444DE9639
  
  089695BE2017631819961A63563DE94EAAA502461C10766A7CA9474A41E9297AF9C880DCA16E00
  
  1A98170D8D608B6325FE42699CCBFD934B87D2315047964FBF11FAD2FD8A289C11606C25E99022
  
  707C03B0945C407677A712635C3B50D7FFDD7A52DC849AC925D7A9DD636AEA9749678D6AB2274B
  
  6176548E3E7C34BB6CF289849EB77F7E1976291375F04B3FF3AA011F9A0B0A0EC8183A82581BDF
  
  BEA1BE4D6AC556AE8281216EA0A9CDE765E680BB4FCFC077194CEBFB76F60FC4DC37B77FAD7C46
  
  4741E63E673157435FB5DABD170198280A17F4864D92EB0412174427EB7B9CAEFFD7DAF34D2D75
  
  548D35E5783E5560DBBF5DBF736E1C10F24BE83F60A47615C4245A78395E0A83ED0A777DFEDD17
  
  25FF5734167784A1743238FBA588FF933E4ABE573BF17EBAC0132309E4587D242BAE716E093866
  
  5407784400508A0556CE0E23347CEA2BB550039E65E433F5E569D1BFEB47CD0068293924959911
  
  B00641A69EE50D6BACAB05452C6A193C02CC9B36B7FA312AB51794A639DD781F1C8B9E1C0AA995
  
  339C495588D88153661120A9ED50012A656ED0C9FF481639A51EA0A010B1561F92CAE1540C38FF
  
  DB9373A5C83643A135B6571D51287A31616F6AF105BD17C9B64B6A325C88F30E144DCB9D160F1C
  
  26E3DD65A6C3DC155052EBFF51B51381D022AB1DF1C2F34DCADC6561A251BACA0BA18C3B320FAC
  
  5275C70D1B5E13D5719A7BD7D1EAB3ED382EDC5CF062A063ADAEDDD15386BAFEDF60B935F948DE
  
  75064E94322F056395E95FB70980EF8C9ECD27B222A4990859A2B8FAC51F3DE1AC4BF7677CEE26
  
  03269DB448319257794B9AD5E708505D0DA7287D530DDA959E08CD84FB971B99B8D1968806E7B8
  
  B01F228A4E9A8934E661F403B63164A84713B901268C31A8062C005B00E63981E953FA3E6FA0F4
  
  78E9D0B3DDCAEBB0AA0FAE657BE30AEAC18BCE7C83C2C68B0E32CBB159CA25B799304773BF8940
  
  05FB893C1D6298A911B2DF1717A1B92CB7A2ED777070B8E293EEF4C7000E9E496A707000BA1A24
  
  BE0F784FA98BA543585845B09D855C3AEA622714083F0B1F0501AE74A849345CEE19E2B7CD6D07
  
  EA3681F07774F0F8442E7E38040E6E211D693944A30E27D6242181C2626AAA4A8F541215DB185D
  
  56384EB94AB0D4EDB49655D55DAB89F52663088884D24947CDCC0FD81A09AF0450C60FC665C736
  
  49DEE4922E00C3EE943A01FB05F2983367E6BFC4BC418D7A51E14527BD0F5A0A955C9426F0FD56
  
  08C00A464D1AB4B46969558626AF6ACE2D99EBED930628720BDAFDB59E8943B7C9598FF9478269
  
  49D586AAF14F169DFE8EC9DA41582FF4832FF01642BED1EF244D46C308D4687822ACBC3DEB2E11
  
  347473A74CFF5B58BA27D3D3D36AA3543F2DCA041D42B60D8C9D7483F13983B2E372078EBDADBA
  
  265C67A12243E49C35096198B50D1C5D45AAEEA72E4BC6EC92338E01CEB8491B4B72682C35AAFF
  
  935F8EA76C942EE4BBB31C8E45B17B829686C23D68F64442FA935DED175687B5C042857EA07651
  
  324871B7E8EDC589805DF972FBCF79E92AD1CAA1AC6335D91F0119CAB046620A802475FDC75E50
  
  1F2E6B77954BE3EA96F11E17565734A0EA702A4E8189D95795015F8B0F7E9CAC4492BF9B8D0102
  
  556851FD5C68E589F99FCF51B5EA0DBA3D3889EBB2013ADAB0355740C8750B18285328F01D2DBB
  
  1B0768C2F15134BD6D42D43E34A9F0A870636E26F2455E3ED900F66B8255F3AF0A6F221526C277
  
  50DCB86D5C2C9ED7C826B7EF29A11DFE45B0AACD6742081D2D80F769AB8B4638BA71BC4D987600
  
  DD4D04CC52BA26F407441E1ADDF4D7273A7516EE189A2567EC8E55D1D3019CF717FFC996557BC6
  
  1199BDD52F72EF3184698745427378A58C266FFAD746B397F0528C435DDFEE2C61C8E24C6FCBCB
  
  A30CA2C94A8A341E0B8879D6863C7A7FB805F12A2530BC9747B6BFA7EA057DA41AFCD8046ECF04
  
  6C2552DA5E419F15E60339A6EC547383C4B639FC7A7E086EA69BA499F5A953543CE620E159D1A9
  
  1BB2C6AD22D6F9770F9D2CF719D7AD68417C8F38E9C7911330ECA2E34F843BB97E69869316D993
  
  649F91694F8FB9696DF7531F7B3324F9D9BFB52EBC276320C5832ABD9D0A3DA94D8013DB90EA2D
  
  F35D0E1CB37CD7DB05FFC514F510EB8935BF55C0AF6440464BFEA1D92EC44A821DA822E3870538
  
  AECC146D3CDD5CDA324BD82CC9099C90F2D54CD124435E275AEBCCA0838C7FC25028D56DDBFABE
  
  30B0FBB1EB7C8BD6F948D5FA8C4FBA1C10121FB20F490A57C013C6541C56D0882A37339252274A
  
  B2777DCA09CEC4E499911DCE4532A6C4D35464CE5C15853DC1D29F02BBA5667B7AD3CB0518A908
  
  1960356181C42760C10CEDBB46417FE0CFE1B545CA8B129B67F9254683AB5F8F5684B50E702D0B
  
  A293258D81F07557E83F6EDCB5F50B0A9D57F6A802178896383EBB28D2749DB397CFEEA8B3AC7D
  
  1861D489E7D8E02B01B477429D28209A16487327DC3C532E35E4F4AB1D87A0E1A0F8402A067BBB
  
  30D4D992B5F2997445201C78DDBBB31806EE302E96E353DB30E79A341B38AF3242B3EC8701A381
  
  BD4EEDC5654231312D5D4D2555A2E8E2C2FB4C53679581B57EDB6F01C7AEDE0399C4CC5EFEC89D
  
  021301B96B168E3D3BA15E0A2C2516EDDF2E9B78BCE983C8200B18ADEC5CE6BFEA019397525779
  
  2378C8BF841BD3332096891A3F82DE8FD460F43DC75CCC596B82EDF546F8AC025ED30DA6EDDE44
  
  7EBE6A271739B51AAF5AF52460A86942D94F1D91816D2CFA059C04E3E73F278418492D54989EB7
  
  CE1FEC9D311AE6918035144F07BF987909D6BCC2ED889178EAB7F33F589A711CE4928297D9F378
  
  E50775202217EFCE83AA3C83B731C1F98CE4A78816E7F6D9EF2C58AD5CF26A4CDC84075EBF3A5F
  
  D978DAE6E50726670AA683FD3BD51D1F2A66A15D42E3788DF4C53F3CA6E2C59A0F2C1D6BAD369E
  
  2D468A8D5FB8D82C6B95E1DDC75071E563E9B43EB1F2F7B68D76D54E791D81BD11B0D4F88B4E24
  
  B8E08A04350D03F577E228D7319ABCDFA4A29A7FA9FB2D99C5450A69ECF4748F601F15FBD9ED84
  
  5AEFC029565FE3A98857F197E4B4A2C3C77121BA2D78527ADBC50120B99667816FAF5C65D2F0C1
  
  5901B2968DD2DCC5335BD5DC870E637EFCCF3726FBADCF98F72C143909109DB1B89017A026F455
  
  CD37D656C82A0CA07D5E9A31F28BB27E27C65B2B422BD9EC12FD0D6B5046CD8BC7D27604D3D146
  
  C23C4093F6DF9402D31758D677C6BB5BC1F59B0B8A69E295516C640722196052792DC40E4E3C48
  
  03267398D6144CB5C206999107D67F76794AF501D35B8B77482395F72790D788B076A417991BC0
  
  C4A3602F19F2C0431616901DBD72680A9591F30745A6D4F9A8D4B9D69116B4E8CBED2FB8F08243
  
  22156A60CE2FCA834B805E2F867BD06B69B566E09EF21C3B7C2B3E5BA34109C8B64F7B609DF6AF
  
  03C23CEEA4B8CB123BE7C9637AA4619C29348A1E71382C78A76B7D97E1C91E63278D257E2E2EAD
  
  8D16F62BE741D59EFFD606666ADB7BB0A319BBC9450C11EDEBE337C5E053CFC58112F8BE67EBC9
  
  D7E87A768516E1A971E419FD4903143B6E1B5F9CF4755B5B5B9EA2AF6652A376AAB6FD54DD08BD
  
  31D3DA9C0BA7C28801C048B43D4BB689B3E2A7BBCEE9E9D80D3BD78A7D4D94893379A7228EE5CC
  
  932330B51B0DAD909D06DF4B9FF925F875D4EE1EB2692ECF1A0024417273969913AD25DDB8ED11
  
  BA2401E5DA83EC452C78FC49E5BA3AF8EF0AAE2D55DBED6AB21B5C9358B1CE08A45E87C10C6F31
  
  801F823E6BA0AD8806065DECBFE00B9C9AA3F300B2765D4D4E9C5D2AE87AF05FAB207CB5A901D3
  
  DB5B284048A8AA2F0C8F50BC298356444D2672B6E11ADD136E4B6926F470763109FEF3AAF1E210
  
  895CBF77137A6142EEE9583D32C06BD780550212CC9BCA18B494A0B0A095F23E4EC2CA622CD565
  
  49ED8AE9A82B4E60FFD7C73F6D1C462094F4946E16418D023208D8BAF445E27C7ED9F39A7FC11B
  
  D4A58A0BC9967E1C581EC18F866F5AEB8698E710750FF4A0CD695C314CA2483BF3F5DF14888D57
  
  58758788F0D3D3AF357E04FC45DB58EDE15AD64C7F06364E1B2C64DC14CC0346AD2855780A8CE7
  
  FA539AF1728483FFCE82B389C546E554FE631406A791A01A1CF899555E34634B52F039AA95086E
  
  D64B50534DCA54012FDF867A4173D97D420E9F5C970642CB12A9FE90A975EE7C3D27C4357DB9E8
  
  DB9A9AF78DFC5C0543C926856BD4BDA98338875FD95ABADA260C21858B378D0391F6BBF15AB0BD
  
  7025E657588D9E6364DE1EFA088107828FA4250E53E7487F8BF891962F2783FE305002CED03D24
  
  CEFF5F6E9C3E3211E0D40FE7A9E83314FB9F72F1DAA7FD5B87E4475FE78F542CD22ACC4E40933C
  
  15CBF16B240040414AAFF829371A67B3F6DADCB7281410035E7024B56604356F8D24D879CF4B92
  
  C312CE5538C27D326D56CDA2DB52D7BFA0184EABC7C1160DCDE65444A1F3D29387A8E2C41B632E
  
  778813D3F1E335F8A04F277F1416DC304315958E3641A7D7E5ECC68CD3DD54043CAFACB9B307C9
  
  58D6239E6754920A0C80807835A2F137ACB3D1F828ECCBBDD9A55AFC646EF93EAC3AFF1136567E
  
  DA8F741E24604FD4322B20FBA39E03748BE0274DBC6AA8957D30D7853EB96A65A9878DD94E259C
  
  38C3A144E1269CACA56B0B956C5C40A6B596426F495E438ABF3A54B4BBF161299F594EC305F95E
  
  8BFF2FB788E066420B9C6EF72F6C28536D66E6F00309BB69E396FC864626E67E84D88DF4E74422
  
  A846C2987CC18E70A5B41E26B897F2DE79EFDA6CD99F594564DA946EC13972AB6F7DD737DBB14C
  
  940928E7839DFCC0352F7FF60574C4284398159E47D0487D2D94D21E92BA35BFF04FC74C43652B
  
  26405133714CA12AAF211EA2E7C397AF11E9D775C61462A742ECF9992B69FED0C152FED5AA9707
  
  2479F58F8D0E2829A1F79A52EC7A0DA312FAE6B2010BF70D0AF8CB998F626FD26FE3C53FE4DCEC
  
  916DF0E9FADFA2802ABE944F0BBFD166CD39EBAD3FA4CE2C9ABF007893699FF2C2106004F3F477
  
  242068A7FCCAE79B8795F7394102536DDEFC1CBD662514233B5DCEF1C3F715637BD695B1E07136
  
  E40007C7235CCDCA991BAF173D915D5C5F33C4FDF653D51166997B6A14E9D2F1BC288B34E44DDA
  
  A8DE55AA85627374988A08D965A3E1C8487C310AF32D2C0B8E5D377D4B6752954E4DEFE72FD701
  
  1615D7C3EA25A6733EF7EDEAABC9996D7F6C2DD3CA62A247E2E3DA8114AB3630AF8728A9854E84
  
  429A276126D18756E12454095E8D30BEE5D3327AED59C1BFFFCCAEBAB02444A38A89DE6DD3AD89
  
  4ED7E4A5C761C8BB77CA39F4CC3DA7A70852E27E88A4D6200E922AEF593F0912263CF4381A12EB
  
  D8F94AE22EABBD239EC5E7AF03EA9120F4DC2E8253D5551CCE8CA6336714F7B4A4C4B4CE565F71
  
  2685E13676A3B488311729432EF24CCF8BA48265ABEEDB2FBA53FF2087BB9CB9682E9DDC99918C
  
  008FB0EB28EB1B5D9FE67EA9D2D4FDE1A8FE1D87CB82F8125850A60D924161FDD4E7E7DA595430
  
  2339CF6C6194894845CE5ADBC97883CAD7D3695746856ACF2EFA21DA5EAD33D4FF8694298FF8A5
  
  AFE9CBB1C6FF1743179F3EE82ACE5AD2BF86489383A97F05FBB1809889D9EA33544C2632F33EC2
  
  7119B3670824332E7FBCF59C71C080A8E59A3ADCA3925C69D4BF18F1E2B1F7F9C184FAF7B47DF2
  
  1D7905B78EE91A8BD733D755A046626B2586516CD3527B6EC09A90784F5C22BE5465C24961E421
  
  B8F33A14F280CE7BB0B23F9702360F58C37EE4CA98ACB47E3EF8BB1A8A73F9B083586309407BC6
  
  1B34D67A54157E3728EDE5A6A9D2DA811BCA521D97C66FB44C7725B69AAC358528FBDB674B2555
  
  7F02DAA19EB4EFC71423C89F8277372B00DB45E783DB261BDE6A737F6972018E58FC36FAB72B82
  
  E4EB48BA45FBD6DA8078F758FDC1155C06BA7BB4969EB82A5EA607F257B0BB642B9235C414CBC9
  
  DC882E4B0012B9A6024B584FE68ABCB0F60C8BCCF8E181ACB7783DAEC99BC7A3A8AF028BDDCD0F
  
  410C945F07790C06EA63899F2012327AD160562DD0390DE564D90040AC3037598C4443F095FF6A
  
  3F5250D4BE09418EA43158B27661BC2500EA7BBF3B911C47FE854A819213813684DC597FE59AB3
  
  EDB4B29AE1E51AF8DF5A97EA5B2A385B0219CAA2413E77C8FFF0AC117AD07DDD1054474EF08CE2
  
  6986CB7DE00A01089347E16F36C06D6083642EBBDE402A98AB48F87177AF5F6B8F0234E33FC98B
  
  02E3C78C0813A74677AD524A329233A4C89A691D7569BC5E25C5E46D160FCC69D95A9B1BC47CC8
  
  06917EE441546FA3450A9B30CC4C4BB4E7CB461ECFEC7115891A252DEB29F206D1FB73309B5257
  
  6A9C1FFA48C81739167A93394604B1A91E86CBBB6D164E5D76545C75152DE2E0B4B09F65BEF3F3
  
  85B84F29FA7FD0C9434C93533D7ECC4DD8E1AEDAA8B1A231EFF6266B661EE5F4ECD4DEEB154FAD
  
  7026AC8FEE670838AC986D48ADBB160A873F9CC9F687F4F40A5B6A082710A63D10F92391F341D5
  
  11477AFC88994E4016BCF6D1E7600D55AED6E02BF01B5CCFBF0DEFBBBB697FEAB3C9B012882ABE
  
  E024332330DB02CE61EB5C43C5EBDF96FF799249BF64102FF670B8DBA29F4815C1A4FBCCF23B16
  
  5AD9E8E57F596A8BCF4C1DD10EE5A3DD10CA20B1675809A1D28AFF85A5C4E93D5020DC7A45A050
  
  C722AF53D42EEC29DFF0E924F8A54F75F9611D6DF05E1A436AC01BEC09DC0143156FFD47F32265
  
  9E0F6968FE2FD63074EE77BFE8A4A866132833930E128C91B1CCEEC71BC02BAE80DD2598452CB8
  
  4B0D756E8D0DDCA3F64D2E64AB21C482FFED6A859BC3B5D61F1DB812FEE1AF0D482239FCB8A4C9
  
  BEEF632069637AD48050DAE012F91AB4A244751403C980C50EE44BE38D33D766A2424268597BBE
  
  D36E39B595693EFA00CBB6482372B2C20ED89563983C6CEDD5D288196D49D8DFE4670C4B5F457C
  
  21CAF9D89CA7AC9E008B3F867763A0A23494D4F3DE229F983FC9A133525A5BA33BAB184B73AC44
  
  AD85102FF1AA6915D62EF10B992E9B7154A6DCCC474DF36FA6641FE747B1E80FEA80DDBA9FC008
  
  A71E1552A30F87956A6FE298D5737BCE285DAB1F746622B6140E56328DD0B343BB7F6EA4CB73A1
  
  AE1448CCD1BBD1AE7B9F5AEE2A96C55D4B511B2C3489D964F6CAFB705B1587192C1B93613DE261
  
  49F623A979B1FC8F840590CF22DA6BD562E61C116D6C5B5460029CB5F46C2663F814284F51C18C
  
  0AB1F994BEF08CC775B87E0660D8E396E48F754676836176B568034D26B5E32F9C00B5FC06CBE0
  
  0C1005957D22C75DE14C8A65707F8081A12955D4EA5663F6AB823ED3C709627777BB77AACF3E9F
  
  7D44303AE7931A01AC33464911946FA792706A38AAA64502526C06548D2226B10FC45AB3378EF8
  
  A2B7A9E7960E08D72EE08E71E63E149EA56A941ECCA938D7E0E4A9469B85FF3239F20E3FE90A9F
  
  359AAAB7623C8FA21BCED7B41D9397E7C97627C20E229F268D3FCBF543DEC734297153E916574C
  
  C4723CE548DF8CC187A5DF384484C81A921A90E91E6CCA0F9CB1127F03CBC0E018476242812FD4
  
  C75A24E675EAD79F6261504E71CCA3E5235FC7EB47982540AA5A754D1E29621369D1EA8EDF0BE0
  
  8D2094288D03D77CFEA85F04D17B3F41B07E6E576490BF131D3F78227D569F3691F0135FDD6FF2
  
  D2B212D7D41211A1B7EA2C9FE2D2FB79065DB5301498802B6E1E81944C5799AA78E3DC6FC71B99
  
  5A8C569501D4F24437DF3B510A238FBA8120AAFF58227285C6A10D0756F04E51710D34C5B3EC11
  
  632A86BDDDA8AA12A8C5F48948E367FE5EDCD3D8EB85E3D295602DE19BC1F5DAE96E1A7A9CE192
  
  F9F9DAD0B921A9572ED1D92DAA9AFACA5761879400FC1F11F3AC0C1D3EF9BE5EAE7F7BC963CC1F
  
  15A3D36B4A4B2725AA8DBC77C61905EA820AA3CC1EACAFB817CA530C32F6D281F0F9C45F18DE77
  
  09ABF3051B58B5B857350BCF7D83D621B89A6917F2D31FCCA33D7F849A78A02411A16805B542CB
  
  BB9ECA087CF320DC8A4E4EF6A1B1913A543E62D3611FD1194B019987FC1B454037C74773AA5DB8
  
  3A916AFBD587C03CAE2ED7BDE4A738706041B2D2332039A7DCAFCC47DABADFEAD27FCF70713DC1
  
  751AE3681267961EE2CCA1B21599C2BA3F3448DF4BD0BF6D01D8ED2B2B70E6A42586D985DFFD70
  
  A65B65AA2CE5AA16DB6F5B92284449BD7C72D802B384CB63EF7B7AE51ACF16BE575068005EA1C1
  
  2899873E9FA76CBB626632AF47AD7A0FB3AA6499DEFF547629910A1B30078F23C65396446C5399
  
  84BBD0E416430798CEF8196D093E31B5FA6650574F30D3FC479179F00A3507199BDE82BC7173B0
  
  4EC8015675AE42E92E0CC0EF7D9D809EDC6FDB103658DA78DED075FC61CD2CAE4EAFF1458F1261
  
  D9BE261642DF329C0B0DDB57103C38E823E3BF09C59881388AAF7E8E8BE4190B811CFF83AE84B9
  
  664ACB308AAEE24253DB0A595203BD305A19F2A41A054A616CF02850AD4D00045EC034792A7012
  
  6E7F10CD39C919C5E6B77B2F63108266AC3882B6FE5ACD730C4A79EB4549604D31B70BB81F9DA3
  
  B3D8BFAE1C2A7A000A5884CEC025FF417D20362A9374ECF40936E93EB77362CE66370F16927135
  
  74F60E956A69CFBB70BB59A0CC497BDCF9108748B54660ABAF3AF7BC57E70BAB19C4EC67381C0A
  
  36709042AFF9404CD6039CC2077C9BBA55249C65097978D20E5AE9CCE1A27A74752EBCD4C53546
  
  3C74B8D6EA187C2D575E89D5CF9038DABA4E5B6B240C5A826235FDAE0F22E8B4D29E4A8CDF4ED6
  
  A91876FF06F5A901B6F34C9C8132E27AC01B6B57AE1B312FC1C2780E9630286C933FC5AD84BCE2
  
  CFD3DCEA1C7F621A1C9695D65895C32F9226D14EF31B461FBB98D4ED3C2EE62477D665B99993A8
  
  0F42885A12E454CF8F45C96E002BADC7215DE3B1341C11DD5B78167D76D13546307B890F87A199
  
  FC2CDB95064BCED8FC5E0B502E7A589EA6CC36F2B935E05D6B4CBD38E0C3BB71441F05FD1F234C
  
  549054AF7FD8065277AFDB89149FDB6CF64A4E5375D3EA609D90D945E87A8A2AADF7D59667ADD8
  
  16E8C3D9F93B053488F4408177048EA77A05F8B383E249022ED3853D6FAFD875FA39759AD3BE7B
  
  EA6A28C49312D6820EF2BEAAEC2058CF9756C9EAE517FC06BFB98141266D70F1F651B90A069DEB
  
  3A2E6588D9BFCEB3F4B5A8E30C2E82829376BEC979A6BCF3E4DC69A6FE7BBBF05B6639B9719136
  
  1AAA099F4BC409C179E252452E8C802A1517D9C6FDA3FB306ECBBABB2DD07174484776687F4EBF
  
  9A09AB5F3216D9EB85508125B239FA22867D8C47D2919390E6F5606DC9DDAC2A2C4E445FA8FCF7
  
  4E73B06C6C88085B116EE2876E1DA820F2C4A2EC29E036068E5E52BD82FBEE47D671B040D75772
  
  A93314AF9297753A01212FD2A7624DF89A306A194125926626491A3AFB70CCA5ED0FB14F6169A7
  
  34FACC3D1BC693871985D51B09DA75DE927B0F5E5996BB3FE38532250D76A6B87678AF13331A0F
  
  F7A37700BAB3171C511DEC88E998D2500FE0D72D7E63DD35AFA982664065FD2FDC5998C9DF8E51
  
  69C3F035299A5D7C54490B175CA41E43883839A6C8DDEC8210CE131695777A606133E23D36E643
  
  330DE0D7205D53B88D6ECB5BE6D95790CC7EB7A33F545FA2B1B1FCD7E8878CD6CB5E042DEE4FE0
  
  879CBB8F0B21C155588B0672DC6C8F832648E299519258016319B3BE725D58684C4BE5D692FD50
  
  25891223A54FE34F10DE816C40E5B4947006ACD835DC01B2AF84BF4380A2D0D580AC3878F5D476
  
  DE2564F315213F7DCD6678524094E85CA49BA82499A5CD69B597871ECCFB05CCC4791B8BBBE45D
  
  E820E1F402885D947F1AE6225451E5C33C8E65F7D7714C6A6E59131E8599A4B16EBBEFD2A86FE8
  
  E26D9C76E35F85FD9F8DB6ED3760B12224ED38974CA38F894F0322CEF8634FCA6F4C5643B5EAA4
  
  D9E65274BB5A2A381DBE8A128BC88CB4F6E04C2C5C4425F347479D86164BAA3F19000505CBBD28
  
  B52CD3C8A33774F45999129F51A7BF18A54B71738C534C5FAAE501315EA5869C6D1CFC67D0AB9D
  
  584B40294425ABE35F2E923025A7227637876ED3B746B6674D52CC4DA679D5317DEF0ED57B3C4D
  
  930A96C0FB692DDD2CBCD113799FC4C80147197B7BC9F9514AA0A96E078C3601B32A9F690DC3AE
  
  70F481DD4968995AF645FC0E97AAA22C991AC11BF3A58DF46FF84CF8B76E248B23B9985038E737
  
  0FE65E0AE557865F0EEC63ED7F4A9641CF02810E34B87675FD08EBC880368491FC6C7D1C9BD273
  
  5544BDC95CE0DA3FF11BF88E9680A8C8F91EFD65FD04C0094DC94C29D006738CD340EAE0585F0E
  
  658DE2D9907218612B217228CDFB8FB489AEBF7D5C05C5962F67E0A39974C5665B332353FAE341
  
  9B105839849CDB843E908EF184D0DEA3F4B1C7669A97C035A86FBECF2D2DA905E683831319D626
  
  3895DDBE238CD5493C79F9EA19958545FBFF8B088E86F6D85BAB6CD7FA03CB86CB3AB905329B6B
  
  538456A1C68A260C137E497F2D7A627C38D57030271209DBE4BBF2A484745E6FCB9FA930ADBB61
  
  9F64118E77620925449DD6BFA4AD8838AF81BEDD3FE9D0C15E37BA48B33D6201C6710BCC3064B3
  
  16B535E07AFFD6065CD5A2739DFD061C1C464B4AC5526C4E93D4F32B1D09CA4200DACB79DC8DF2
  
  8AEA6C1E9BE2446222E8FE141786FE5146A30801C0449D9E7143226948863D5402710AFEC43F9C
  
  30D85915E0354B96E9BF438E62F9FC3E74B5599555D0C72481FCFBB5136D4C2E064F9079E72552
  
  15C9E4166EE130BAD8EA3159F1558E48A4D998DA8DA1B002C72EFC4F38E8DB7396DE031DE548F9
  
  76DE8E0C11AD4CD396D4A11C5B73C8E04FE0746AC300D2CD04D7E9CEDC1D78FB9E12A84EE2296D
  
  856B8908EAA722DBCD9C7E72A2EA45751FE235B48879BA76129F41231FF3B6A31AA51E0F8FBCD1
  
  65B88DBB7A353F0B04C55729BD3851A4FF32B75AED59CC9AD498511A6C105E49F0DFC5687E8291
  
  C30A6A826DFD3C09A0CA876B4BE48A222CECBBA390C5DD83BF51E6D1C72AE463ACA5AF5DE93DE2
  
  5727A4D70E7A267FB7A0C10D5EC341CDFADBD56905E74BB02F446F9198CC8DC903C51ABABE98F7
  
  6E75857E1D8F1220109A8BC565D2CEB7E3B809E16D89A83DCA2D9DE0A155522502FD36E9DD8CC9
  
  17540D4DEC8CE209F12C6D6078470A6E5D65DC685C30EA581E3AE53AFC872993940F0D0C89FFD4
  
  1F74A8FA730BBA82F0296A9A8F133810B4BDD8903E722C5F95A887B4131E8C6AFCD14F29FF4200
  
  6F04ACD0F2570C103F154DDD4A5CF09169AD56542855195091C05B71352134A655E6BC84F37643
  
  93A106057B73F58D8E7F99DC9B0B16E1BED4845CCFAE63250299F0B456BB2CC8B90999E6073C92
  
  A9EFD24BB2F239844E412A15C7780BE3A60FF2A686779440B11E9DE0C42547B3D89B055629C260
  
  DA798922BAA55FFFF2D1253A85DA9389C9284A2E47B61F9A5CBB20E9E3C906AA94B211677F0716
  
  707C28C39676943314E52FC250DE49E8A3DB1E042443B66568AA37D0709DF04EF1362E5B9BF083
  
  D59CD3BCDFF50BBB26B7C8CE35A8C4DE96F2E40DBD9D3CC04C39841844F30B31DD25829BEBB731
  
  8D2E1DB290960F54D1498095D20C6F05F7DB57A3A9FDCE5D154FFEBF36ED418BF5FC0965BF7BEB
  
  D16AA8DD31E562095B0CD721F8349C1476693D8EE368EE149C3D243698F54FBB5CF83F65A6F169
  
  3BF15017754259994C993C676D5D3B5E0E805ABD5B5175EC55C3D1AEE6EE769BB1C614426D3E2F
  
  2A3167EAF2B0AF5BB68F024C35125487C3AC670227FC4B781BE2C5DDB6310B59817ABD82D5EAFD
  
  5ADD7BA4EC0C89DBC68D03C12EFBFC051218179494B0B01DA523165717D1DEB70656C573BF7002
  
  A66CAE4E69B42AB76D22E6D5C2DA043103604F06A2945930F421AEF9BB28FF1067C297A6D10E56
  
  6208A1E001BC8E2514DC6A94B559039F10381A5B031CFC73B959FE1D270E07FBC2C4D2ACBE88A6
  
  88E1AA4D9F441B831B6E1E83ED4C1001B2F393264948235312E83F12FF24A33AA8A332292EBEF8
  
  95269B793562730486747AFB79938BA78BEF925CE4C994D1D58C5115296D27D7275BC4358A9DA8
  
  C8D521C2B55F5057C2854CBFAE0AD361AED083F8A63723F7E535C84FE255043984D5AC389F6550
  
  20A3FBAE4883366AFFB9DC7D37F4BE42A3A40AA747721D763F3E8209385F823AC1D7076DB81C8A
  
  00A33998CBB2E574D9C65563E4C24429DFFC0B992BF3477A90891AD6C67BF26AC0DA33ED3A26BF
  
  9A523DE4A8A24A4EECA3581BBBA6B182961EB7AF4FC2F56904C27837A00373C0A49F8121B9BD21
  
  97F0BC65592EE0F1EB1DF93E87F4514BC5D760576E3A39B18684682C0DD8496FAF939D5FBC907C
  
  F77683792DDEB86AA902C8B223ED2CD95D9AD9DBD52215AA05E690FA22831EC1E2308C97B882AF
  
  2F10D56DE08EC526B4ED696A160E139B5407268F1E17A710BA4F71A83DF53156A95B1224E5DD16
  
  B4F3EADE07B57D9FA064DD487F4E84EAF04C69CEE2BB8DB8411849B883ED8138E2023B82CCA222
  
  823E24F80B8816935AC30BCE18E9056B4E6098C7A78A252973AA19A6FD0A87D48617291C3E86C3
  
  C6140CD225B139070B2E55F4BF2BD1E752DD2F7C2C0163938B1CADE6B80EE0E4A2AB811639157B
  
  01E8B11BB02F4C3D09F86F6A178D0DE5FDF804F102F48D66F5850CB685748FC3DE7E0A657EB77E
  
  7311E98CA80D96E7D60A6A1921EDE854415C36444FC1C4E90AAA32D675BF6B36EA87818616EA80
  
  0CD1259EACEA4105F1FAF0D38AAFC1BC427A4B3AB9C83FB22ABE8BC2E607C1EE5D38720081EC4A
  
  63A2174E4CDB46EAEDC1D53771E72C763C7EF98F9CE9E6D93BE98E503571CA19910667E9900DC1
  
  65D78EAD10F8748D2C6C7BD9AA5571DF798B626E0CCD391415EF22D78ADFB11AC182147C50A14A
  
  153FB3DCB091D37290891C3D1C44012716E84E7AA39B55089D1337181950DA5BF52E39707E1A75
  
  435818E44FC0269F6FA4E034C18B94CC0C6D4750B4372D28F24B982927E5BCC910C66F8264F6AD
  
  B5DD11AA46534F6F057CCF650EFD8F1E56667C7B9958D5629B227E12037C098C7AB5D5986BC0D1
  
  2AE5AE552981FFBEA1C00CB6CC5EA988A2944C7F3A238886831C48DC81F179B9F8F686D7D0D1AE
  
  436A0897AA6255D3041C1EFE7FC6AEE65AD8608DBACB2C40BA3C8E178E8F0BC04D27343E39C3B5
  
  93498FAC8856ED317A15CEABB1D9880D1A156B4CA0E2AE90D4A42F2383523C21DECE7D1A92EEF2
  
  09E811F44C4701C1737E7C8951C140F446AC0991FCBACB9A5D8A9A36C29A7DF9FCB5405034A98D
  
  556900B7238A29E4D1C46770FB85A1C9D345F54D3F01FA966F6A1DB9213C2142AE6C6E883BA5A6
  
  307D428A5AFC0E09AC26171AE5B358ADD11AE6702095BF832A35C33A26E22C06B60E7B217E4346
  
  0979399270F5559A38EA86986306211BF37D01BC0990C38BC4CEB03C76A9EE984A6BE19E096D33
  
  CD5D1977DD237C9600F18FFED04BBBEFF024BB062C73EC12FB00E5E1D5EA32149093454EF270C1
  
  4F94446B55CE56C9B700A12AE7119E7812A1472BC70B52B67E30608D8DA81331EC9E0F2587A8FB
  
  34F3DF3DF0476046832B371F210F6FC8268C67F07ADEAE026CFC1921BAE4052680CFCB37305806
  
  529EBF63D8327A1D924A7EDEE1955B944510FEC9E243C872F10F5301B1D03C2BA248B57D1E1024
  
  2B266A9A61691E1E9E0421A89E0D267C1C87DEDA11F25EAB86A6920B90DA63DA5245AF639CB69F
  
  C4E8F12C91CAA26610A1B321F91F90C79771C91DC4D2F6887868D82C928E4574C0A395CA1FD582
  
  549D601F9274AE55DD6F146BD2A444088947EE9D191FC5AD9F5CE52D3A267FB165D55BF70A6A82
  
  12343E7328FEFBF3083AF528FEC8396228678AE2153557F93399DE55B880B020A921687B4B4719
  
  DE07EC57F00B2BDFE003A95E3211119BC72F468AED00ED92A1843A28AE104175231F8A246BD8C5
  
  E0F2FEADF643547ED3120BF4950FCB71AB33C590C74006A8F829D43A9C72EADBC7E8A48EE3E4EF
  
  2CE847D275F1D06B305DCA0A7F0234D241A187A3A9D7CCF390EAD305E5D89110B5D0453B2E29DD
  
  2E0E5313F8E5F824DD52DC515C46A4CF4E7E5D622C590A8854C9DFE724CB377F268508677B701F
  
  4CDCFF3502D072E597E3F9D5F3DFED8BCD42AA7EFA96B6A93A42642088203B075EC5CB9732EDCE
  
  4483518EA6BC04A9BD531FA9D0ED65256EA3FAE0B1493FF2CB8FBA4C7E5D8AE1CC244C834E00E5
  
  694594EE9A5A9325C8FE95C2F6FF849446E417918D88E00E86D59664E1D965310D354199BEDBAE
  
  5366C183DF1D5D1CCA5E64A434C50675CA4F1ACA9704215BC5A1FCD4C3A296CD22389DD808CCD0
  
  87AAB921F5ED11F34D2D0334861F214083BAC9541C05D78ABE5AB9DF253E7EC40AB3A8E69CE730
  
  AEAB610EF92AFEB93733C9CD9590B1B1D8A3A5E44D22B9528E429CDE7AC4123C0D7A8739ED8BC6
  
  7C5583EED7903FA0395171EFF44973DB1CF052DFF83B4D7FCB6B9FEF7EF08A4D7C0FAB844F2F90
  
  48513A6A3D39A407C33DD521409724A79F8E88DD6838298E17473829A20495C863867DB9729F83
  
  92CDECD291B601ACB55BCF9BB18D873364ED03F51631EE887246D5480A1B601FC792DA6B6D398F
  
  FB580A32E659BA4B0764654023426E0F5E51045943D2EDF0557DFC8FEF287CB77B8EA3208E2466
  
  330E762C53D8F19E173708FEC484CA6EF090A0A65A190370A8030F84CD4CD698F65E81248ED13F
  
  91A0C21C3B0D7C6337887BBCA9E5D65CA6507C58960367D36810E813B060EF9BE7D34D4AC15774
  
  06E97640F04B87D203DF42BD651229C56681D296DA1BA7C09AF38583C090D0409828F445B6A9DF
  
  429A374CF2DEE68FDB5FA4A2BDD4D2CC25E46FE69AA3C34A592288DA4DC1702592FB052DDF00D1
  
  4AFF4FFCE9E4B74DB410EF990CFF606BEB6B90AD35D3179CDFF285581A3D161D96F4DE69E5D40E
  
  B344E5D23D6F0B47ABA92D0A3EFF67C8F16D33DBA4EFF89C73B34450D13B48B4F04C87D167FA8F
  
  70E9AB17D603C4C1AD07873BF336760E655CBB6AC3A197D62551ADEA5B7C1ED5303D8598000FC4
  
  B9E738E2679F5AA08DF07BA994253000366157FEBCCE0EA475AA022B046461187C1ECD85FDEB97
  
  7B2DF4970EE03C99E8C24804484D7B7A426ACF82B05AFE51D5083CAD68F160ACC9033CB7706CBE
  
  68D44997ED54DD0D7523A032036EDE50B2200CD44F9B89A1DD0F541D977A17AD49E4F82FECB9E5
  
  FF7C525196746E8F49906B9B2014BF6E1A9A6F356DCB5CBDB427394FCAD8588FF2A0ED67430F15
  
  75B2E1617F7F7DD17E5F12E0406834B28002DC7E74C2C4EBAB48AFF4306CFB2D17301CBB238AC3
  
  85A414CA84B988C5EC5AE293F3A6A947E70EC4C7F0956AE123EB78E46C8F9B2E7DFC75DAE6E509
  
  19892249014BEDA7FD06645E6DB918A608EF4C373E7179921DD6FD94832C0FD9C15F56F784694A
  
  7788FB33B9FBA7EB9B1A19CFE576CA993F0FFC31398C89167D5F1D6BD886701B07E787851910D6
  
  B0BF96B51CC1C8BD3D0BBA00FBD00857E4329C1E9092E20E4395909BDBD334B027250BA8597F55
  
  79DFD55CCFB5721FC7A555412ABE49E3DDBF09F722120D681B6B19FA0026CDC30978976DE83887
  
  69C68B3C321B6113D3AE32FD1BDB7C1F1FF8F4DDAE81FFC131AB8316FAB33B6FDEBEEE2F1C496A
  
  805E4B920F3816BDA8E41677DE36EE413E80C500B9FE4E3EEAD0114630BB1A955D0F5C7760183E
  
  68C226060B051729F6E1F46C75168392D0ADFCC3DC52F2903849C5C1F1CC4A39486FD84401112D
  
  C1F94EBEAA3A3BD4F282978AF8C2FDEA3364ACB1121EB5F593F332D8BB3E280530F9B1A58041BE
  
  6350704391190C24BF0DAA05FF8768F084E6870401FF346AC73EAC8A6906290AB2BB58AA7D2C0C
  
  901BFD714C45188C75096057AECE6CF453B98520AA7346E42E449549EBDE4B70B16F66F48655B8
  
  7F0ED4935D108E9349F57C5745EDFA02D83EAA7EE7BE7D7FADBE66D6287A61CAA1F468DE9DF58A
  
  DCD7D4667A341F6748A35C19031767CC2E0B25B6010CDB31DDD3A81410B782B4A6CB5C9DEB3B09
  
  26D2E86C69C63BAF17055ABA5AF39B237C53D3A79C5639C3AC638E1592A5C742B3F7A65C557F76
  
  0CA2E68A0BB27D0DB493DF5353D75849304F3B15D42115F55717203817D1F6CE5567359CCE7085
  
  371BF23A60851B9BC7DEE19BBE40B8BFEEB85D20C7886CB89B21BD4DD57414958ECD3B5CCD40F5
  
  7825372CB8929AD26821F280FC5BF3F909B8454248665F39E87AC12679023561D2E4C17215CC80
  
  163600FBC3B2A3637FE8AEC7E6E9143939A96F9AFF544944EE914BA054D6B5D0070C16C99D3EF1
  
  0A5CA635C83A154D5799B7FDC311827C9E9DD651CBA5DE32A3ECB4327BAF08D924EEDBA059C33B
  
  3E7EDE159E83DE71EE0894C2A7201618AA39F39CC3574DFD644CB41618A668BD8D1BF07FCE3AB2
  
  80E3AACBD9FCB90C4D8A43BE3B72AEB9E6785DEC6E09A6CBDD95A2AC7A0BBD49D86D29B08E8F2B
  
  99137B2C31EDC27DEE6A7F5FAA39D1FAF0BDB9E047C83FE596C958A01F835149369B0641F8EA6F
  
  F0DB303EBE57724E6B1048FFD7F31682DAFEBC1103852273DD19BC98C1C5452F841D5ED7C2F746
  
  6893D23CC5D6DB45B53C9150845D7EB3F4227CB5363E3A3BF5DAFD68D415E2836B4AB53621125F
  
  D7CBD6B551B3D0BD14D6377DACD47787738EF0BE98F687C6CDDCEF0D780A1DD8CE08BC9C018E95
  
  AE44424AF1080F5D245D42A3A4C17D3E19CE340E97C722BD7EC55B09735AACF13FB2FB9906802D
  
  0B34CAB1C02758CB4FE31FCF2758B3A6CF8353E3C51F399AF3ECAC2E109C999BD15DF1148E38D1
  
  A3CEF647225CA8CC45B962A67731C7DABD9B756DAEE7DC5E4074E3DD818E3DE911C1FFA8B6C1A5
  
  4F279C8704A61C629733BBF2F227F171512AD7FB5E72B267EB0A7B6C86C0EE6BECB416A9C4867D
  
  C3716826448DEC3B8B2FC172FEF52C39A0574B976B9F3BFC53422A20313F0B058638EF1870587A
  
  A02D9C4B96AF4F5536562FFF26C1CBDEFAB5A6CE81F25084E902F56B840318847B5E31883647A0
  
  3063673BB2D0A7B2C128AFD261C434D1D4CFB08C50081C216927C28954A79149AF111705E57FFB
  
  F8C8A138AA343F16D540E138ECB9817F91B040FA65D90ADA642DFC98E414D3C909BEBF1A442F68
  
  0AE92F829D0F10BD99BC1F00E7345D05133CA2F3BAEDCC63ED6DD92DA86DF4C85C9D77FB4B1D95
  
  E64492CC0E8F0468D3E55D11D97595876CC2225416EB2D1042FD8FA07A6FDD408F619A0C84B65C
  
  20876A38638DBFE973ED7DCB6A8CE7ECAC0BC71349AB2DFBC8682C1D5E8AC8FAC86BA95A46E391
  
  1135602A147C7205C4B4951998BB1D70BC7D30E7004F3C81CFA4A1364CA1CB728859F57095A068
  
  33FA57B2AE6AE004592AE87D6A57BFEE4BFD39B77C34416E2316A739A27084E2FDB9A9A8A260B1
  
  E928D144FB43AE5A89B05997380E30987D31414EC916E3BD338D0D8997529A17BED8AF01CAD6D1
  
  CD4EE06CB6C0563E91B919903BB5C0EF8C79ACFBA7CD0DB8984603F729672DC47F6D840D911BCC
  
  3FF3F22F561AA5EDA2783B5DFF8DC573A06E8383C1B7420003FEEBD754B62BC461D314B383D483
  
  CB33660B681B6A0424D4C16B730F9759D1C5B8CDC769D96E67817016CA5356C8D45836C297E5C0
  
  CF80818E5DDF6FD6B3D96212A6E3F124AB2B2281C7E32B5A11F737C6CD9A886B2DBCEFCADE6D8A
  
  F8A392705B8EEB3EE7716BE865CA9946158402333E4345A143ABCC24FFB9280D22A2E538FC8C08
  
  14A9F82CCBBB350FDE047DF917E34B7F9A3D520C9776A501225DFB8A5440F91980155C69D69C1E
  
  8B772AC1BEDD870F516A25628445A68793EB46FF327E233DE2EF2428505D78FBCE1E933500BC08
  
  75EF2A659105BFB84D62CD8849B13A0A2AC5D32700C660460BBCBC508A644BC21C02915D44D071
  
  E6997552F1A43E771C41D9A70E52FAFAECD73AF8F50F7F38D85F9E968E178FEE686F76C17B5FB5
  
  C1235E74EC812433155856677C8A01CE329718B01E8469165B54DB6D861658E073D407FA7D295F
  
  69DFBF4CC6E06F7F4EDE5C9FE04907DE0EAF8BBDB73AE24313F1442614FA91CECDD1FEEAA36FEE
  
  969131B200334EEDA47A7B029B872A79EBF7CBD108388C90ACC3A2E0328ED70106CC5D962BA72B
  
  4FA1D5E01B7476375227CAAD08CC669F7EDE398FCD48E4C98A6FE592C60D262D9A814F364871AE
  
  8B9D881029CDEBEA22805E58C1AC88EA3D2A14C06C99A6995236CD5B66759521D1C63CAC33E631
  
  8C9441B20AE51F6C5484CD5C92301CDEDBB6ABD32BECC3273921900D13303220DB46042C720348
  
  F8F5660C96354994A9F4BC8814FD4DE786526E7629D41F523F92E612EDF64C0810600493369F06
  
  32ACE4BABE4488FB2292BF6B5629DF5062FD7D2038CD9856A13430FCF7E9440267AE07A4EDEFA0
  
  03B83DA367DBBC33F449F987AB4C90C6B54F2FB5DC614D50C803E6A85F4BDAD9F31C3C83F8C84D
  
  B51960F42978F59784756FF9D04C14899C601681615360B34077E110C6FB5EB7EEC81FD21C8ADB
  
  F5086B027D11DB853324339403A157DD593C0C482CFD6E41AD59E58C9A9481A391152151C5232F
  
  FC9F164757A08F5DBFD5F239E218915F410197D59AD84B43AA34B577E9EECF694086ADFDB4E8BD
  
  9255550D0E6DCC0F7F22C34E63678545F2B34400ABE7E4E3131D20CF0B01A3A266EC454E3F4D58
  
  24E46732C9B304EB4B7F6AE660A0DEF74EB7A35624C4F8EB8D467A0176DE9AE457EF670B5564C2
  
  749B545B284F63087A2EA02CA97C1142A7E6E81AC7F441D5C4AF68F37E85198CBBA2D509A36A92
  
  95F02A4AB6C08E001E691577FE7512B7AE437BA23D023E26320FDEF262A5B7C32C51AAE5437983
  
  1083D5CB84789619A605ADACB5CD0FA5DBE2A4DBB7A5287C151696D2DEC6BE0AB1122F19C026C8
  
  9FE4A49BA8298C0528677326F0D41CFC2BB67EA9DEF70722D6E3DF3E738668F4A9CB2E6A97E81B
  
  A717B59718A78192C70EE9E7EA06CCDBB40EA7711D05DEE264ECAF9CA47CA542EC5B17D968CF0E
  
  E334272DE264B243DBEC490A3FCC3AA34638DB49C12C2574BE206F53331429E242061F029399D7
  
  4850FAC2B14C69EE8DBB6187D782AA0F9A40C5B4C6E663474E7BF45C32FD4593BAF723BDB8B866
  
  315A898E1D429A9BA89D618836430FF6603137334E7C9F03E7DB7A68CD78A1FF11566D55063A0D
  
  3BF30A87727130E7FB50293794AF5BC45F5818E8949A1F4B806924BF629EC443C5AA6E173BA126
  
  22A346D8B071F91E1D305D1540FA83CA8DEA7F09DC80305B9D392BA31D6E71722D0B947C26F73A
  
  71661F801A9D08A7DE62886A390361FDEA22F1FE67EEC2153F999653DEEC688F25B4B9D58C815C
  
  A456804360DE294BFBBFE5D745B94511C304BD5388FBB84DA4B31E650178CC257316674C5A3EAD
  
  9081770D88683A103CCD12982465A7CAA1C903CEECA6EAA1169637BD370F1900C9143FC32DF44B
  
  BB2D6A4C4C88EDEEC16C598545208401D0985347AE8B2A16F98BF92CB495D0CAA9F137DD534D87
  
  9D8902DF0B44848B3EAC1C381B8A771F9F826A1D33D12FD45C220E94D1C18B630C46D41659F485
  
  16BF6C1A52E1951AED115AE9D4C65BA9F7D436802A5673923E65E8BAB985D09484607D6997929E
  
  09EB1DBA1DFB33BA2999AC6460734312C6827467C70EF061FF8509CD8D79180FA0C92A30B8FF54
  
  59ED13CD5158AF3CB913DAB4CB70ABE18FE0366003499020F996B787FC5BB4A767EF25E3417B4F
  
  C66EC7706E689A551B0E4AA157565C4AC5EA44511D9084CB45B3A5F8EC1C827CA408B1622E5170
  
  3A6720D74D1CB45B5C4EA56076203F3235B5D17E02F195511AC3B1D213C01B604529477E30B1C5
  
  7751808676C3F3103918FA224B3C2C65E0338CC81E11A9ACD2C9F6F995042E654C3DEA26FC3CF0
  
  A094BAF63822CB3004F2786EE74C86FB8FC6542BEF71D96183A1A4C94F01F8CDB0AE1DDAD192D6
  
  1B7AD708D3498B0EE123ED66225976E91267D45C184148C61F99BCFC11DDDFD21ED76D0FC861BF
  
  79
  
  0000000000000000000000000000000000000000000000000000000000000000
  
  0000000000000000000000000000000000000000000000000000000000000000
  
  0000000000000000000000000000000000000000000000000000000000000000
  
  0000000000000000000000000000000000000000000000000000000000000000
  
  0000000000000000000000000000000000000000000000000000000000000000
  
  0000000000000000000000000000000000000000000000000000000000000000
  
  0000000000000000000000000000000000000000000000000000000000000000
  
  0000000000000000000000000000000000000000000000000000000000000000
  
  cleartomark %{restore}if
  
  %%EndProcSet
  %%BeginProcSet: stonessbi.pfa
  11 dict begin
  /FontInfo 10 dict dup begin
  /version (001.002) readonly def
  /Notice (Copyright (c) 1987, 1990, 1992 Adobe Systems Incorporated.  All Rights Reserved.ITC Stone is a registered trademark of International Typeface Corporation.) readonly def
  /FullName (ITC Stone Sans Semibold Italic) readonly def
  /FamilyName (ITC Stone Sans) readonly def
  /Weight (Semibold) readonly def
  /isFixedPitch false def
  /ItalicAngle -12 def
  /UnderlinePosition -100 def
  /UnderlineThickness 50 def
  end readonly def
  /FontName /StoneSans-SemiboldItalic def
  /Encoding StandardEncoding def
  /PaintType 0 def
  /FontType 1 def
  /FontMatrix [0.001 0 0 0.001 0 0] readonly def
  /UniqueID 38795 def
  /FontBBox{-153 -252 1303 950}readonly def
  currentdict end
  currentfile eexec
  A62390F2B60376DE25E6D63CFB2BE19C185EE64A6BAC29C353295355E2953CB3AA6671B8B948FA
  FE62D34F0DC7D617819CCCCFA9D276C723914F28DF9F5A1BBF644109266411A6B99CABC920970F
  EF157AF4F67AFD6B8256D30B6EC249D3D2D31311F781E50A6CF1A677285290833E96072D8D1EED
  B8E7402A588F7818A3DF24AEC6EF5BA6A37D1F478AB266ADC2F139FA5B069ED780AC237BD2D560
  57ADE351BB17DDDA706520BEC386806E3D20ABB33E703B0383CE7EBD20AEA40CD1F3AF80DC63B7
  5672BB9756C84BD572171B717974500FF4A18AEF19B1C787A742E6BD5239D4CE1EA9F43F4881B6
  2A36C01609947E97CEE999B0E57F752F0091BCDDDCE6FACDF38D98728FA069D326B0BF3F03061B
  8FCE80D7B17E69BD16F034750BF510B9D36C193E853643A7968E043A0B6C68348297E52B7194DC
  86390AA0A39414FB9F278A72BB4D38D3DE6F311EE0B4EC0C38AB490D3BAECC5F9C9C3CF970127E
  8C31A6587F7B3A2AC206B60D81BCA82D7BF803849B86D987E5A0F487A25252D9F5F24FF52EB9FA
  E8F5DD1D4F1AE6BCD7F119970D83662824A17F518F3BA7C0E355630ECF16D1B2930AB700F859F5
  F79B58D5AA5AFD043451EF0E21896E9BAC697C99A006F8502AAE0F32557BDF9C3E88B5866BF280
  AFBB6309C4A6C56DDC93CBDA5BAF9D4C9C33CC5CC9614236425B9170151C3BA70FAA2B8822F999
  2902B23E11A8DAE99CA765649FFFEE734CD45A096246CC418F4DA104A0E360D84AF8413AB6315C
  F7B2D93458EFD2CF75CE8E429B4FD9A0D9E2625B56B2307C5BAA8AA4209ADF3AEFF11C2FF9CDC9
  8BC55A81AD0B8975D77B79259ED26DFDB7B48E6AC2BDA8C5DBCD573BE8BF758DCE552BD8D7B9C5
  C3EFFEEC0FEA01A3596C038750DBBDE019DD061AAC75C6DF81EA05D6C6BA940EFEBD0904EA64AD
  CD9A299FC2A677BC166B910146703C4AC77A37D1E35275DF13F0C89B921C2B33905DFB79B21455
  B76CC84D7EFDCCBE9EAD6C4548AFF3EA59A7003A5B0BE359C8B5990DB15451748D00B6658F1C1D
  3C02C9010E586E9EDA7403E03288F939C5A56E56B038BDEA3DBDDEED59953B5D5F3ECDBB9A7B20
  6E97E19EB486E666D22AF8E81C65ECA005599297CC09B83DAE12A4957252A92452C829A33E5864
  3AED6D1A5538BADB723346F28C1FFB55737AAC3B6B95AAB2BFC31B8CFEFC1238F36B24B5E0AF4E
  201DC4B4F8C584CEE2B66A8BFEC755CEFDACC6BD46D1ADC9353BB4CD9F59867A8B9750BA0D836F
  4126BFB96360523DD5EB41BDE2B6442D53B6DB3825AB19A5B8122D39AD6EDDFFDBE959A149E9F6
  5532FC70C32F297A56F4288E355D9E916225C80E4564FF3AFF4E04C65346BF983822CF047F27E9
  58AFE046332F5F8F122A687FD0BDD81032331699C60EFF44DAD7CFDD98EAB24D314013209467D5
  A80786375AB9285D7E4DA5D0B32ACC0AB990B4448822AF1D132563C579C28B38622BCE48919C23
  E4002D6563D365236ACBBC278545CE28ACC29A6DE5A9380A4AF6D2863C0283F75C864A8B5869BB
  FDECA25E17EBF3CE78C0903B393A024C3807236C92B89611B70EBBB96D672132CD28B0A402F98D
  D6475F2F9E471D9CF1D965E56EA4D0D6ED3344120D8D1ABDD8887EB839F7A2A9E0DACBF2555874
  A9200A29C081EB4562F10958353FB72F2E0486F479ADBD4767284E6339BC2DEA6A05556366FAC7
  D8C19CBC7CF415308FC33AC6763E2F450EB9FF4B86CA7ADB2A7BE9033255C445936A2C970D1FA3
  1BBD650E10EEEBB018212EAECC4D4D03046CD14B860BC6BC7FECB4C70BC60456295803399795DA
  D15E5A7F2A3B8EC7BFF9558A0EFDDF178752D7D2BE6DF7CC32212E7F3C632B5ABCF9F440CA4195
  E50F3407DC05ED8EEE3C6EF5D927A304063D2C5927558E212087231C485A118433BEA5D0314C3A
  B3DAA2631617367D5A8B79CF0C1E7982953C575C363FAE2DD20207D5F57398035825BAC5FB0280
  47C7D907B3F9529B9BA37245CA1F50488CB4F3106260D4C324D23E061A2E2E88941D56633B98C8
  75E93770FC0B33209248C5290539C23EC3E072AB079719D3417EFEC7272F496F0CED0AF2A58B93
  45F5A779AA54A0B05F80DB1908F6F4B91C0DF41AB56ECC0B54EA9BDF6929B1C791475CF0864E5B
  A00DCA62280FFE6A4C62629117C989D332FFBC25530BDF4F08592741656B60D82F0CA39A3CF374
  5A626475D1E9783378E940659ABA7211587DE18504C4B300F40434CFE719CA3CDC3D89BB226F5C
  1E345A3C9186716E03C222440EC5A9D9B585F9D10F9DA18A94F927EC32E73E8449FFE392F703B4
  18B525F5F8F765CD63824896DC2F81FA75DB733A417247F990FE6BF0861F1B463EEF1B727085AA
  39E36B48F69CD2AF2F05A3D328B3F0565049C19481287AD0515A52B323C141789D08CE15D0D792
  FF2E8F498BA4DE090B6603D7270D993A152232F4D0E37739FE269E40E8EA92872180B67347522B
  D93ADA3C3B4414004711C25276B1D845571181FFB4EAC47EB2B3E7412593A80D0AB953BBAFEB64
  A0DA73607A207B8E2CF3F1CB47B74F1D31BDFAA5F6E556D270E00DDFEFDFDFCD0BD59CD03C2590
  7A4EB0E2CBDE294AD274F29646BCBCDE44BE8AED41E878557F30E81A0842AB388637F7A212E953
  8AB2119B28C51FBFE4E75EA17AC233949A232B015F748A5C51B30ADB0918D69EC641BBAA574588
  CD45AA7791AF88AEAB4F82FFA0929BA72ADD4EAA58A00EEF780036B65D279A10240515ACBF696B
  90F919ED5D9CD9B65D85450356521278D2F8367228C09507A6B52AE413183521BD2454A755E150
  784E446EAFE3CB12F35A4A92D7F5534260CB84A4D61980C535D23FD091706B2BAFC60047ED1388
  2D3DC00BB1E006A2D678CFB3C2F2921A30A8090F303BAB9225DC241F9CCFDC1860A062EA1FF404
  7A2706F42C1AB7893334548876ECEED621CB105D30E03EF0F5F2701824D1CEB599C47DE9CE2274
  A41E3D4ED68C56D8130877E21EE161E863CF27413FDC0A9FBACC6D518A767CDC7102B786FAA8BE
  413F625031C79934879D9F0D0E82B5339BE5EF972F4B545293743F0E31647B6A022550B1CCEC31
  86297B1E8EF9A0AF76D6B144C84A2FFD5AE4BD4BBE6BE084BDB4E503216837D229CB80E4E2CC6E
  3BA702B3E23BAE1E96309D919A3DBD5F30D78C57598EDC3BEE4A8374E4DB7623E2E6F1C3215B36
  31AE53A2911298A952631D88884A477BA09F526070AEB8E0E9E1FFB8E694DCB2CBBE4E531A7575
  DE9D35B8EB87DD5FE44D4044B674BCEC038F5D4D9324C5DCA1C0505DB20497C28F345A28313B11
  0BE19BF4C12A4242FD01CE385362C273D4A01F234642D9687DC930CD66263344161EC08B49C30A
  0E39176E07272C5FFAD0E3A3489261A070DFEDCE9F27E5DBC8DAF699344C070B6C030339222DEB
  C1F625AF6DB875C69FEDB4D6135811005354B26FAF284CA2B92F7398E24D8887C8E70A151A0538
  9883EC77EAE6F2F7D6CFA77C52D81AC221EB6711EE5F11C621EB3AD2ED5755F7B055C19744B937
  4AF98B9D178FF7AF4EAE1F54F49B4C9B76A3947D647941A5C3FB9C3E5B5C57E4EDEBCE7832B16B
  DFE73FD84582E1AF57A393404FBDB07DF4344FF5837D825804ADBF5BF85682D9C2177ADA261501
  39B05AFE65678753EFFCAD4F871A3C7CDE919F7B677D93ADE141F0778C1DA0D25E4A8367089E09
  8C8E74EBC70BB5CB7B8717A2F23496BC24B00085E830EADA44B528E8A0CEBFA870140598F2F680
  40C237ED915D4E9C5158B1FB5D8ACE3B66E429E6B50C22FBC4D289A15BFF52BBCF71FDD36C6679
  5A9DA5303654B84EDD27CBF199A2C564F080D8F5781D39A32B21BEBBC978FF8C4C3694C4396725
  69811D60A95EC32A232FC0DF1276DA0DD6A2548FFB6CAD2197BA3C704D0A67FB83D05087C9C1F2
  94BBCF0F72EEE91833B9A625C6A749C3666C6A777010E05F26AFCCCC1A6D6CA26EDB8D12A713EA
  43F0CB9692E6AAFB2470787CB207D7F3D297158E4E37CCFB67EF01177C36BACF5512919E62C884
  DA155BFE257B820AB36E88A9F8BD590642E6EE18D295A53B84342E7FCFAC64C21E681D3A974856
  9A1E33FB4633FEB2DE5727872201763A5E649991664C40C76907AC876DF566911F4F151C815091
  BF3116EE7C60CBD379D3737C42FC35CEFFD725492A80FF0AA17FAFCCBE5DBD30B3310319570182
  02E91FF3813E5BF41F7986BB970808FF802C02B31B896CB480A5082334BDF9A390CB20EF03C1BB
  FB64288B244655AB9ECB8BF8B9EA61571AB2FD3B1E2916D38C247C21F4A4AE03F7E1CDD1A28307
  1AE0359B960FD9C45AE39794FCE5D73CA1A507FC6D0EA06CEED17A4083A5B6AD4AC63B9ECC0375
  0B799F3BB6F86E190BFD47CE7A697C6B1C89C3B55C2EC058F3CFEF2EB53B35CDE7749E79531D82
  0A1583DF38B2FC0A4EFDC5C30AA5D1DD77DD8196DE5170101A4AC8C8B9DDFDA93E9FDC07F3F572
  E1577A6E0BB03D5BEDC5B3AFACDE1F015534695942E9FCF6E3C8D7C70BE56738862E3A62922390
  F31AE5391D55D125680F3FC0DC392C7F696CB9CCE6EDFF20A3EA4C38EC16B2D33893E148DD373F
  A3090AA01FFD3A37C1BC80531B4310AA42B7B0FBE02762A656C69A1285003093158CC2D13054D7
  A192DA888380C82D4EC01A77EE962B78D05373B37AC588BD5F8FCCDE19C800D68499E9B07BD329
  70691EB6AB21FF4CEDC94C96E55720728B5D54AE5F8A7905D6B18EBB184992C2D4B4ED1204D6F4
  56AB648076C24864A8A7E3ECA52D5C73E760A442F1D1A162F15593442E0C37855B51FEAACC4B20
  993D9D9B3EF693CC68CA75E449F1E32B00231A484F110AAA2066A4348D8DC5D6AC1FD374E404AB
  96E308BB2A159901B6AAE12E1B5B6674C0D820841B4335CDF20F2C64CCFC7EB064FA0A0F07B125
  8CF9FA6DE9AF57B0ECF09E2DFE96F8F78B83C9F689F1A10D0BD87FE9930701583171FFDC30BB7A
  BADBAB5B079086A7943A3C6EF5C9F652F9BF035916B76764B7B53EEEE54D8A33D5846FC6A6B64E
  99FEF43C7FE90DFEBF83CE4356610C65C771426E7D28BB600E743A575F88E5A3F1A61B5F53D431
  151516B8D247E642574B409CE4191FB6EA040586F49FD9116FCC9B602F76F6298FA74221B350EB
  F69F6854D0E8E2E8BA50D2DCF7C04D3B9B63C7022006371DC3FB8E114F44A501C28A5D63383925
  3896C3CA6A65A9C0B0976A9C5FFF29EE1D27B0B6A1CD2A33928F779CAB654187FF00CAAD0FE27C
  793F5B1A1EAADB7574B2B007D9AC5F341E8AE471088DDFB6CDACD0437D1A75FD7530150DE40419
  E144C7772C5866DD09FFDF928EA4991963E0A5784961B467110E4B126D0F05CACF3AEDCC00B559
  9C789174F96D2018ACC8B58BCBCB827D694B5A4E1F8C4310F7FF5C50FB3E774173D21ECD4D276E
  B02E08A6091D1201FC1176F046466E4D685692D97EABED3699AC741FD506C10B90DCAA6B936E57
  2A4D7E6862198B29AF57010188941CC7668EC6CE860F416D4AB95C44E0B1685804BFB329919D2C
  0AD9837587A380C6FA3F605EE3C84A14F4E8E5702A1F5057317E2C3A70C4DA53FF1703BD88B18A
  07A68C2622BA3AFD610A4C3AF73B7EA0965B34C69AF7216F9E9A00CB609AC4567EFFEAB245AFE9
  02506B811227AF036E8985A0D8931B7DAD9C0DDA01A88BD5E40C6DFE3FAD7D268A41D93EE38D2C
  B5B8ECF6B7F295D107B2217B0555A439E9586B2B2526934DC922C5D75C4A5469F8B3ACB722BE01
  39318429105A4F5AC2657ABB4AF11ED67213AD16120EFC6026480FB15AEC28F3B0C0AC5B82AB55
  322A9E0E6DE39AC103C1B4EE3F6235ED6D9AF0AD4A2949C61C182978D99464DCE81462A75DBE9B
  369F0DAEB667948727B721D4B6C7AEB0E72E86896AC6BE3F8948E5A8C3A2A04FB8867515ADB92A
  B1D0C77B5A29D871B6E3406D44B6C4AF4A2907418BB99FF4912FD5E2171D141B09C3818595070D
  580411ABC386329991F4D86FC7EDAABC817A74BFFE39093115F826345A48E966674B0D3290A6BF
  1B6F634D002F7E17AE7C065DC6FB4A18897E2C25C96B9B34A6BCE88AF1F0D2A83D87C4F7EBECB3
  9F90AC1594D395F785CB0FDA4BCB7E16CC78E582525C5EA073E9611BB5B729A372DBB80ED0A53B
  7D44E35E65BA5B50E383F932F7D0C38B4BCE43C7EEF4CB1DB16AD5C3BB741AE73DD00C0F5F949E
  1C4FE879E7DDDCCD475197917D4DF3CF62CCCFCECB31137B0D807ACA9A0242898FAC954C382214
  66BB36BC54B1DD6B927924A5BE1EF65B6697FC6F0B621AB5499C03CE4AEE3CD7DFD1CA369DFEFA
  F421BA01A8D5794F63B05625CE02513B4C84B8C0189DB3368E7A7568B422DEB07D7E34D10D37A3
  1CF59111FA54E490867BBB45EE635D4E69116F4F008120FEEC6FB7B7FDB5F921381CC520C816D7
  4DC29EBEAF41EA6230982E486E4916B285CC6656EB7EB2A1E13817ED22FE119E49452AA0BEA8CD
  DF0457B8450FAA7CA6863B47B297F00AA6F039941D89626153D5FE7F54ED02FD02BD68EAB40836
  55C11306E38E89F4853E911696896232D12A0800113DC0066AEAC6E10AC5CFD56DBC4BB36BAAEA
  B1A821CD7DD5FEF17884F46BE82040B53705D3541ECFFF57F379E9BE619F52436017F6C677E2A7
  8C105CDC276A7E12224BF30284A8BE1AE06231CEE80398F16040FC720934E33E46F4E4CFB410D6
  2B37C95CCF6A5D0B205865DFD1345204A3D2AF5AABE6C5CFC16E97FC3CF27BAAF54F4F3DCF1388
  1C9916B9BAF8D160DB5573F16C5A1F95DE88F878461BFE98ACF137C14268DD8882B20A0859914C
  DDDE2899CAAA419F561C04FF0DC290F40E319210300E91628801ABBD1DFFBADC685040272DFE90
  7F3DC0C0A5C419FD17FBD4E7B60DC1EC1B69D83F4EDE8B8C6A4DCFD2D419BA88BDB4D9CA0504F6
  DC28F5071E73D2BA95D15B8AF01527B2321837CF1F66DCB58B6071349D5EC951E98B0A3E2945FD
  FA928D6393D852024CE0D9F5AD1C0D4CD275328F1263A965B539F9F77A11D9601C70FEC6109E3D
  525269B54AC7AE10ABD7E9DFE6D2C116ADCA04887F9A61236B2B6CF07BF6629B4F91272921006E
  B73CA6695943828C8B6B6AE6C74DE26D00874B0CAC27B8B6CE2AC29FCEF2DD06520113482B9E97
  B0A65BBE14572E8ED5D698C4B30B31EF4A68659CB178DC79AEB9C37A069280F10E838075F383B3
  E59B8FA6FED1E85AE260C5C9612F65722A6EEA9E0E92188738019A3AAD25E746791DD8FD92AE15
  818BD278F2E27DF6F5E9F410E419935E8829990C1A46BA2912483D48DD5BE54A42FE3360417AC4
  86D19633867EACF8CDE5865F2A5DBCEBEBBBAAEA670AAFC86ECF234FAAE825A47014913BBC29A3
  FE6F4B8AE09F62D2F8B6E54D5D1691D8C1ADE6EBADD268DCFDDC4A58484BA72D6970F4DA7905ED
  8070960225D73B77923C5DBBC359E34822348387C309B17E4F36324A2EA1C2F305D6E2C7573AC6
  63091F2F8396458371BB62B1BA041D418BCC0394B6974AAF6BE37E8E9AA7DA543EDE9F83F6DE06
  177E60C98680B8E4D6DFDCC921B6F044366539BAA9813A6ACD48D0F0229BB93AF244DD191A2B3F
  26FE28BBF4CA9BA5D2E17CE8F45B35D595220E46BDBCC47484911869E700D8229BDE2DD45775C8
  5679A730C00766EB8E69BA8ACD2D903BF01B9F8164E3CC7C9545590C55B5CC1733BCABA7B07A76
  EA61A0315A077A53626EC56D1C2DF338DF09B4DD375FC15260808C2DB4F9659D52F56D474C588E
  0A775743A7238461042BC9C40F1C4F5AC640F5467DF8C171E74FE670B331E57D7799F0A8D519F4
  88BDA299AAD86638A9983172D09EC8ACA7B7C0819CE7528FAF394569E04F54D5A6086E7588FAFB
  65AF7E6904D5409B62DA57A2C3E26184D68D5FFF28E8A0027EB5C128C9C12F1C1CDDF08D8C9D12
  E057AD30CFD90F3A29CEF4525EBA05396370DA91A7802A51E40C331F5DE2DF4A39558CD6682640
  03D174A42C50B6A5B2AB72016B2B5E39FCBBF5029D39712BE03171F1208BE5E1A945AEC3AFCB9A
  7A5E6058F70C3A1C2CDA74DB0C43A09422E11CD2A57CE4CCF0FE58E5E2E7E3051E401C1F34606E
  616FFB4F4442DB141B9BE426BFBD43D14581EA4128D244818F85B6424C800DC117D6B7BD469321
  0D72550340B1DD1C432B05EC414922C899B75559D25A63A44223A149ADB574EA515320E678DF66
  6AA9D619B3C4831B00F96F1C02712C395381CD0383B63BC53C1FA4C5CD4D00862F6819B491D260
  4A4AE4955F7615D87C298396C8278075FDC008CAC25473C9F9CB28A507452B7EADFA56A3DAA7C9
  16AD4F090123C8C885D9D1ECBFF8D074C98BE8F18C0FDC2510A4305E9CC8BA571374BBB7BBF75C
  F1CC9829D5A1A252E4730D1AE3210AB074B67B00C54391328CE1147F205502DFE3A6EC47A4D63A
  B7D2637B2DB121E63FAC1FEC68888A2001840A05AC90B07B577E11D97644517394AEC07CD40D02
  CDB9BE567DA3F4135B0253D503D50EC566F422182DA173AD62E2B94D31A5B4F2099F9FCA252246
  6862BEF6585E1A189565958B38A64CFECA4BE515E6E2BD8BC5EE44FCA593A2B868544321948E7F
  A4AFC1F5A2868CFFE363C7C6E88165444E13C8C47C65E72C9C8B28CA496B49A2E46D81B52B48C5
  7B3C8011BAB8E8DC9A14767153CCD8FF4A2166FB00A60402FE0AE3F0691B572766FA4BCE607508
  3B2B1C3E16CF4C9108462AF1E6A48F4D7A1A41645FA27677281022949500483B46BA23F1755B5F
  EF0578E5F2E5BFCEE2F713B3324A8390ACE191D51408022C3C8F3A207766EACC05A14E3C3EB6E4
  85FF87CE4C62FAE3C6BAD0D26ACC8E7E584A8CD7A25A9AFB42DA6106F07A65C261671202ADAD69
  542EC6D1CC5B1EEB605E474BC949BA7B2E8A64D4F5BD7BBB326C06F9630D4F99B9729CF4205D29
  12BE9CF81FB114541EF8D7D5CE4DD1951CBFBB5B2FF5A9896202D438C7225B8B0F4C985B5A94CA
  09448A46C2E3F04674A59F55BA9851BA61427380930BF2747CCA7CB932388561969DF7F5D9545C
  5195E52A847EF2BF4FE33255606BAF3AD695544CA0FA7681034517640D5611AE1A5F1178CE695C
  223E29C41A4017760F3651122B7BDA4E967BF5D76FB93984A52773C518BBC71DB32FC51FCC2F27
  BF59622C8907241A16D31079AAF1F310041D63C7750872F8FE294C06C483852399414A03D4B684
  44289717B3D097324EA791B963A273D0331714F1F912FD6262B81FC89A5050A5F341E91500CB00
  E970CEE22C6C28ED153A44CF43E9DA55FCFED8B953F9412A1FE477104DB3BC46A897682B4912AF
  1DDE7F20A6B9A4365060CADBE5316B805AD0C5C32D55B8458C47B5D47FC1B4140E0F6B42B78FC0
  BD262313F96DFBEF9EFA5A4F590BCBA3C484A151C05113E4DB9C56FA187CE5D07BFA5DA8EBDE83
  3E75C6AE8D8E651654E11008172BFBEC0C59F83BC1D6AD9C4DE8EEAB779C1F8DC479ED084B76D6
  D582DCFE08BC4397ED71F2562575232D9B41EA2B5F23722DA40231E9AB85677C29A6BC37FC36E4
  DC4414661CC627EBF94AF2B13CA571DBF0105D08632CBF640BE1A6F4B33046238D62D1189692A3
  6EC37D0299B2B43D8DCC06D374EAF0B5D000A8B144A954A37CB7BA6B7ABA3617BE2F719FB95410
  5179899FD2187BC906ED19D54D8BAD2B970E7B62AE8EE1B17989E26F340BDAE188F7FF4213A1ED
  758FEB0DE33A33FCEDD3B874791B6DA5F63B91A2ED5DCD67180D374562A2ADC73359CE9EDF88CE
  824AAC15079441A95D8F0EAAA18E6CFE4016326A75A76C210347ACAFBB90C3E14C7732C8F5CE97
  CC4A9CC6E2F1444DCD170DB12A9BF832CA1A238A29C61E519E9F00F0F5090E84933F35FB7E717B
  B64991ECBE650E4864B24ACA929743EB77591F64487789EBFF2A2BE399C5097D6C673B6C5A2179
  BB3E846F49F2F83F3B1F360FBB2DBA6AA4A516EA1BDED50A497ADF520F2D18846BB30AFA1B732D
  761B6760080B448963D77676D9BACC127E5E033E4F1215F0DFFBF74247404B276201C39D187DB5
  9886A597E04E4CC05DBA500A24C9F2237D5BDD93F9089B92C653E47AF8EF00E62F5F22FF8AADDA
  CCF1CEEE6350F3348792912DC6131FFC1DB93FFCACF5B88C96F5DEE570008CE39B1E002A24BBFD
  C3B0A09767B24644216BF8905E02EC1FE6477575E3C45DA5A05BE475C20DAA7BCABB43B4A9F16E
  6C5FF5483E0F5178E320CA3938736CF32569B61BE5BBC724D2AE0F970AC88A3B4AC2DBA8DE8ED0
  D42D0215D47CB49E69FE1D7D7E40E87D0354C835F45735760AC02A1324ED7816D9838D28578098
  DE0F1C6505133B000164083310573BECAEB20CC880EE592845B6CB4D3F2C94DD06E3AF43242499
  56C2DD51FE2D2208E32FC8A837B4705B71CA68D7214E92F2996066AD6BA8672A2B09652B3E1861
  7F6B1B60CE18F9EE5BEA3616C3EDEB9AB79ED7DBCFF05AE6C5E03F33C4B20C5D2AC8B049B09A80
  1EA83D3E1CC5C3CBF608B39FF2662369B85478EBDD4565AC7E6D79CDCE0A36E913FB6A6A098B4B
  A16EDD7BF1415DBC0A31DE30909DDB588C573FA54C3A7C703D76BE975079B781073CDFD60EAE69
  6BF991B69DB54FE24CDDB02A44CA8C32F0935E77A5B8339F60FC8630A0E921A444643D68501E25
  F64813FD94AF45F9040B148BF0568C1963D9B26D70995169483B011D865DD264225322C45FC65C
  5172DEC70D0B2B792594A9CACB21A225E8D07908A052AE4F0FBD3918F7F9AB0D7D2EBDA5F0E07C
  D043048C5DA8F0A38C225D2C15A5E03689049D80463B7CC35A54E202FB2333707E0A3682B85150
  1BE15715A94AAFDB49BF6BE5F80D83FCAB28B0B800D685E658D41286D4BD421DF10428C40577AC
  36386FC6B76FBB98BFB6A13FB6FA40C6837680CFB1520C0706254FCE622D14AEBF58781E0BF2A6
  222F54C43704D4E370D0AB3C91F4D5501DCF69FCDB8A08CF7706DFA456A11913C42F61A832AEA8
  B189409E146557338AB059AC7BA9CFEEF2AA969C5561B677414A91680649CC3DAFF576FE686F9A
  B9931A749AD17F6C0C90120AF8A9584535F1F0B7C31134C09C8CB07D857395F00D98384D8BFAFA
  FE27566AF9E96915870C87499EBF243D8EE8291E60DC73C8ADC2886E4D9808A39964D24B8EA30E
  F93B04DFBDA5A5B868D29E3945030AC0A394EC4657B4FAD9D2E2C7965DC7EA916A3E20E67BBB7E
  99D52554D224938DEB35B11676F91F5ED24BA6670F574537BFBCD403F09212C3DFC3B8F4DD9EEF
  DE27656AFA41B69D9094FD23779B37D6E54DFB6A654923AA9093006B23CCDD68DE0D6DC6E8B232
  464DF25412DA32486A81887450891CE49172CF0033C3CE0206B02A9BC94FB609491BD3B8F2D7D9
  080102AF684EF93913160A07FE787B1FE843A9064DCE5E29612129DFEE055646FB5BD78019058C
  8E32F297215AC6313022C40FF4BC9A38529CE8F574DBC54DCEC0FB37F1E99A50166F8D7FC40AD9
  283482952E0692D21C6B8FD7592B48D77BD3487EDFF6935DA9F4A926B5CB625C994B2365A39688
  095B9C4663254C7304617D2ED79F333F5769BECCF0B88287F1708FFA7211BC0CF9BB5715EDB733
  6F009A6A797EB3656F8B82AC930695A511B8E45E200BA82B81F3378BBE2196B4B6CFA19B829D8F
  8FDDA6006EE028965C34CFFC5D71ECE1E9864D5C770B66828B9CF8783AC1413371FE27FAFAF46D
  992047F64C1FBCDA55FC6525FE5CF16E681FCB6F35786E262034E1B1B4F09CC4AF3A478A30B408
  498D192C627B06AAF0D88E87D4FE13DC14A9A8A20F9EA404F8DC89C122423FFB5B0E3B88F25C4A
  44C799449D13B169E28A60C86E1738477256CE22E016A0319B60DC8A9D0426BE137616962BC736
  6BE6780942955BDDE4CF4CEF3177E9FCE58E706B3BB8A013BAEE39506E7378A9C5A1F9AACA2EF8
  224186542501B765F002B6B35A79ED7A2A77DE1192250A3D119B687D0AD2CD269348C65075AFAE
  D8DD82ECEF51DCBC18C374D8A092D99BAD3AB5C29A8FD28FB41C02EF3E4D095B7082E6D5EE1A5E
  4306C9E877A7BE348FCA240527B4C349FF7FF84901A5D22428B27AC34B44EC507447644BBD5501
  8FBA01EBA3693418EA2F6906EF3C1577D91B63CD0BD2C519597EE07D98297942D80B0B65C25987
  949083FB0642DFFBBAD74C22C3C10102E57C7AC0DF4099C97873DEF713944BAEB920287B8E093A
  BCE51BD52CE45DB3C6A737A55E1A00AEAB50E71F5D5B0CDFE61551DC7CC3BD03934DF272BE1944
  EEC621EAC02DAAD8E54E04DDD2C3F02CEACC947C799424EFD1A6C75C7A35BDCAD1DBCB9F19BCE4
  12BB019CBC7525536C5CE21E32E9B9AA0685C7D3BFF3D82EEFD684E8D63A526018F4305D137CF4
  6B97BDFFC1E28B7745C808293C24C849C9C61E93CC64D99820FFBC5F1D9F016DDA621C97FA8418
  A0410F78DDF4531885509464E55C2EEBE23AD17C60961699668EE76C6E44E0D0BCC839B808ABDC
  B6FBB586C87A957136216953315981AFB2089C1105EF07DC47E5B3670EC1664CD13718B8DBBC51
  746750AAA374E71D4ABDC31F8E8AC3804E908597CAB8B3E70EB42AC67A0B5B1E2E628796BC3A69
  F3DFB63DB7DE4E40411CDBF98B86688AF4CCD8647AAE4E1D608A00E0834E7D34CFDAD8C95DF21F
  AF62404643BDE3700514BDDC81BB34DF75C7F8EDA704B146D20E14EBC98B9D0A11218EC8578BF5
  239E5633605C769EF3EF6855F48DF16DD8DE5320E1851E7C17311CEB2F9A2811424DDCC0E6BD36
  E45BB5191D890197657B66FEE05B83ACB88E12BE1A48D66949188080A0F2DF71DA7A2E3B072B23
  FE94F176216AD5F8DBACE0791061056E5BA4364BB74273A93B853DB23E396116B8C1C3F3F8C545
  A42F02D45DA7DD2EAD34C01EDE163FC5B9400C0D39BF0CDE1B1FCCBB68D47B44885EB0AB14D205
  A30D1F2E4E1825D9742DA3EBF4E47F6F2F750562400C54330F792A998FFC158650940C0B115282
  D8C22CD34F8CD532ED3B94A5496C33B3802AC5D627B5F0A8706311191EC4252549D813C92A01A9
  804B39402660B489095F9441D958FE3873CD6E6FD3EA91EDFFFFABAF460B71F1C1EB9703A7D9AC
  AAA34337C306B67E7460AEE1AF02E7E2E49A332599BA8CF2309AF2703631B4D91CBED26AF49410
  830CCA7023A7581E2ADB97387A7DBA23189AA993B86BEDEF59A72F246A4F58EBE354992D91514F
  130AB2C167717A97D647A157BB6B1D968AC86C9A97E8FBDE9B2E141DA7A1EFCE2139D13F0B7489
  51CE73B1AE93B19E93B456C491363E045CD5A4C79EAE5174F332A36A9BC1001B793022983DA2A1
  8A8C7FAF236DA88415A4C7A262CA714E373A7333B366AB35B9E39C7389A9D3DC385EE951F66879
  188C6A50C3D9556CF70C19F3308ECAE12009C324F93F69E8208A2A8E9686EDBB141B1010368ADA
  78EBF3E52BF05827E453A9B2318A7A31B681148419434CB738A5A36A9A3905DB00F459B265C793
  41331A9661352E40157221BF0D3EE9A3D7E109BD2FAED3FDFF58C8B17DD8D41EEA780A090B6A61
  E84CC84E0B5A07B7F176E3E3B21FA67A6E51B154DB1422AEBB3F11DE57E3A2928440BDB1005BC8
  58598D8D77F30628DE258F26674CADC2AC1E150981DE5FCDF9A8134859EFC953524A83C1E5F4B7
  0AB82678DA8798AB558C1981DC65545E9669AECC21EFF0F428709FC457833E593AF584435C6D49
  7239E2E6FE9F99A4456AB8CC54056FE1ABB9C591E11B8E1FA72ABD1C07F23BC65D83BDF2914F02
  7711C1B5405FC84371A9050FF9B85F1338CF24D44DB280A284F9DFD368816027C9B21F41BD7B43
  1AA73797585FC93C0A5EF1353B9012FDAB80EA8DA648A32BA684437E904793FA4BA37F83A86CDE
  B9AB4FE06B5DB0172012CF27613FBFEFE108B459EF13ABD1F266E5921B51ADB35235A90B8E646C
  FC94B8A2D25E295055827B734D965E91B5520601415F93BA0CA60767C60AEAAC82678E59BAE9F0
  8C33C925768CDA423369006B6A84E9ECF4A9576C94FBDFDAC3281E13E88603DA9913BA1E148A6F
  9DDCD19E24E39B221001F6C824806A04747CB305F9FB7B22AC6C5EB18E68473959A5DB0FEB5EA4
  38AA8D7292AEAFFEA89E9ADE49034E0F03C2EDDB57D15C1106F2C50FC19E2760B8C8D1F3F21CC2
  306485BF437BAE4B710FC4DA3A7AA53F9A5B0EC13488649448249348B7A1618F5645404E04EB48
  D809DC0BD68CB12AD22F4B46FF2E9B8992B812F2CFC9F6B45FAC4B6180479E76FEAC7946FD6DA3
  965085CAA176FDA9881036220E289F6124632367CF7660E0CF5341E675A3E7914392421C1CA647
  103D4B9DD026337C4FC5A148C39F231151D9E0CD4413DE03379CF0DD10D829B95CFF70A88BF541
  6B6088529B04031C12B75E601BD72A1C1CFC52B5D377C5B80490105A0BDD5B6FE5821FF77E1A74
  DEE5AFA5ADEF8E473975360965C97BF48CFBF7F04DAC7878D0B2190A66596E10934EBC1DA5575B
  B5851D04C34BAB17979B35DF56F5E3DD914D6DE19F22310854513C2766AB6A6C58481B0993CCA8
  95B73C3D45414803FDA3D413F9220AE10097FBE7A9A6CDD150CA0F8575F8806B7F8E35D17DBA0E
  C9B5B827B8B28E634D4DFF5890D40268C96A752A8D03EEB11F06C7736EB608B101C21E71CEEC70
  73B54CB639C23D11344393FA857ABE72BDA7D0B8C1B47C92A18514EA4446E6BCF3C71305E53963
  9A0AE965D8E0E14B51DE79531EA5C3A1C0A9F8B8CBE42A24180E09AC811A85811A536C568DB390
  8F117D5A06C075C452CC2226A9DF157D84570A65DE6119CD69BC0936A0A4E2495330A023EC6C79
  EB8845454A88ADA1D22B3147AD972537CD6C8B7F1D41B4138FD6E89DFB65D12BBAA25C0E182077
  755AF5F0B4147DE8D18C59FF1EB4677FDDCAF2FEFCC49C0B3206BA2616118A86F85FCDE41058CC
  F8BAC9045AECC291C5AFB4B92B067315BBA38295C256FDE9B4D77B99470DBB0B9240E682CE9DFF
  ADC7DEA34BE240F6432DF291C19C1F2A4FFF206C0832BE628EF15672A3091B7AE7967980D10E03
  6EAC6DA540C09501ADDF9860C59E6D721E559F3BF80BDD9ED0F5EE3E95130ACF6C4EC7161B7190
  CA4D9F74FFDC060CC39FA20811C6A1725CDC2F61C080036181AA26C43E056D8FF2660F492C9989
  351B3844CC210FEF0694265282DAFBBB6AABFDFD6148B3F2982992AD34BAF3E34BC1E2DAF2F45A
  BCFF9A9888412158C73F0289F44F7793B09AE11D7788B2DF2539EC09F0FC7EE91DFC836070A38D
  F12DE1B86901966497AE0EFB1C403F81DA5CD37041F0242B55718A9B4855345EAF4DFEB6A0020B
  3996618CEC58C0948B8D68042A87343E81FAA82A20F15AFDCE6856281D80E7082799B654355EB1
  C515B0EDB842F153A30EF109F3280EEAE70BD11079B3F339E218A77A5E73E55F7738A0C81D25FD
  E5A24EA899FAD8D7D5F156BCA8DF019AB31BE0BE898D521D93E02BCA53F7AFCB1825A07BE7675D
  44BB8868354416FA3CB072E032ED4E14397D89689D998AB3540F3851F4D271F0950270A726A885
  5FEB558AD353308D5E1448B3487F895CD02A9F1FCF7164D32747CFBFD7BBFA63470E84A40ECD60
  DDD9D4A140C1818C9B19A67F4BA7D4CC9582445E58F4A9E72BE3FA66F09FEBDDC41AE995525840
  94B372CFF3CCB76A6DECC20991E38C49B70834E1649CADED29C7A3368A93F19D19C8F7BFEE958C
  021F54731E5E6379292C2EE8898058633DF19BC5F7463B48BC12DC2DE92C3AEBE2E7EF273172A6
  B064B6073BA7950D9B203119411494E694098803849CF3A2757ADD758C726291407085D17B054C
  0B5AB36B843AB10E40BC1D556E42F6D12A4934AD98AA1DCE1F3B5E36B3CFE961DE91EF6D242AA1
  93D20582798DE7146964842BA49934D8117536BCDAA1BF4CFD39FAD56FD110128506F3911A2F80
  0CFA2AF2B6F7F931645F8F7A48A29341BD7D503513600E8CE18A086578C158BEF4222141BA1AB9
  748293483AB5BA75094CAC69D6B48D9A598A22843322D71FE4E54D016CBD139F1FB38730A137C2
  B56FDC38FDCF4B911AF65D9666FE871A0184EB3C8677AC77D20B658D211956B101396C72C63821
  5C21FCF514615F7FBE4EEB17DA9E79AA2DDB6BCD486A5B3DB522C49E78154749D9656EBDE63007
  21DDCF2D738EC88B96E2018A76BB47F71ECC6D2EA330796BCE78C1502AE033D1B936ACF4B14FA7
  DA665A97E4FA3AC09F9C269DCD5422C20B8E5E1E45322663041DA01CFA72787E903D4D3974790F
  EE22666ECC6C89AAD89F01E5C683D31B69D298D5C82341E17737413B44B8CDD121705A4BC6BF67
  2CEEEB7C9F8B13E1ECB760A7EFFC1CE62249DAAD1A5F02D65FE2DD8D76B964D1EA8BAF9AA2428A
  020CE6AAA48034D0FCE36CAD982A46428D2A2B2741DEA674C018C12713289A89A60860719463D0
  B35C76FBFF9C39A73B3277B357493C704E1BFBCFB86BF566ADF70F0DDC5D3E01A0413511358924
  2CC8DB3107E229733968608BE00ADC1E0DE80427C65C74F696BD256A9E74731EFA182028D00EF8
  E686A53676FBAE9870E93CDB7C3AE6AC9F4F629E40D209EFBB2961F89ACCDE817C4906DE2050E5
  DE9646B216E31A4FA02F9941A9A104F656807969E5ED4A639000C7BECEA5499B6BED13B00C7FD1
  1473BF322B3A56BBB290C230C67FD50EFAE3DA7C2D8FDA27B0BC66941F8012FD4A40D7E65E7CDD
  4498B63C452F159BA17E2B938BFA3439BB0DC71F4551EB5DD196C8B7C0ADAED1C255883DFBF900
  94740283291693C9DC77C514F450552C6612222538C52B6474C077D71E1369263ECB4948194514
  CDA6A491EBA464C262D90C11FD4706D39EB5F3F4EEF27AAF150DF2EEAD7EA06E99358ADEE0F1D5
  9A24DCED2FB72DB849F4EACD52393C6EC86E9CDB78D36B6B3280BD7B1C3DF08DB3BE73687232DE
  A4B6B585CBC3748164C055F3D7F53C33D9F76B5DC7AD74263EC362D9E2FA9BF9E4247BB900C4DC
  60E9B4898530DDEAFE2E316827E1CB13E9E7CF88D9FE0E5043A55B8A5B10CE654D2D31504135A8
  5EB566691B4812D6E05F34BE2DC6C1BF70CA19A6633000732FEBCE0EBF4E28721B78A12F23F79F
  AF43F2C600D41EB4E3690B7EA24FC1AA3092B5EA5AA8F479F4F54B2C7721351992C114B8A79636
  FD235EE91D6B5B1BD5CD918EB3436C929DC151CB5C42EF4F62D21604F0F1EB3E01AA78487B4B93
  85D0E09B8E2531D936F5D3ED4D8C244B838B8E72416F9D4716C41C89E2980DADA92B50AC976D38
  7F9E320775EC1E9B09AC93914E01A71566CA9343E853CD63F9C0ACE1FFC41E00B5003AC5FB68B8
  0DAE5FBEB6CD8419E2434DBE40D017FBCDF617F3A8B916EE5D8ACD3689A9FA438F54C5AE5C02E1
  CC6604C021400A437E729C6FA9BEF55A049C7056DF91C68DA0C2F7990B97994A10DCD49260FCC8
  BA315238CC2DEFD07651DA975DEC1889723FA502E4BFA7ADDD25138C84BC049E4ED25885B9AA66
  4BA18B23764C3AB41213A43393EEB6FB839AF29F9E4B7AF4317E455C7F37543C668AF9B8B6DAAC
  068370E787B7D64AFD0E8C010CCE9BB2C0D67A6D8CA0CCD2F6DE3FBCDE1BC6CF9F7AE893F93AE2
  9BBE9AE62921C176C9D87DCA4608DAB3A42EE9C2E1F3180D200CFC2CC9706295BF2BC5B41F7641
  1E073C36D501F7B2F2A482D3DE67FE2A65AF72A909539D1109E70800A0126315441464BA5D1685
  0D04455746B4BBDC085E7D15BF2CA5CD8E717DDE8415C1766057473F53F74E544CAFBA17D5A4D3
  F784383FC5CAF153263794C8DEB9C06157407A0D65B0DFDCC20381CA0B54120E874D8154CBC016
  6F015A25CFCDD50A79929B2A9374BB734D3FCE5A72E270089CCF6ECC0FAE93FA7397DB79AC9303
  161BEC51B8C599881706B13A67324F029F62DABE8BD38D6FC5400FE28EB90033CFD5A1C4A2271C
  8375AA995192E491436E96AC474DC3A055E5D0DB75116C88E3E4A25810B15E82CA0FAB77546305
  7AEC6DFDB569A2ABBF5F61EBFB535CFCC451DEDD1001DC891A73BBC3726592543D15A2C90D8744
  01B996B839AF5AFE5AD85A2781A769D69B079486D4B5BDC1019CDB69046E4192EF67EF3004715D
  7E2D48FD1000DA93C2D7A963FB80EF45A0D53E7055D5A8EB872BD9191C8AA544B8BF2FAAD68531
  3909249571656A63EF113AB89AAF3D12F1A2793197962910D41C5C69100348C5B486EA8C35429D
  11225142A70A578B5D4AFEA33D6C6A6C20CEE87CBA9CBC30835067EBD602C4B7EA3C7A41CF8061
  B337EE9C4E279E200C924B1DA0D81C70BE1830487DE961BB8943008D6FBA2F5F5C0A0E319D0EE2
  3C458A69D687FAA5FDDA985B3593CEB75D0998736EF26BE2DC2F7ECF417A5D140A51953D9F06B6
  F7EEFE5EF1B13DC525EAF8A203D4371144548DB8D849005BD175354B9E0834213EBF25581765DF
  7B4D2214568C79A2E0E2DB79B6D9A330B5D58D9323CC21654ECECBDF7BA36ABC9F3025AA414A12
  F4A08034AF437BD4A184811B8C861D21D68C89E1D18E51AC98A308F91D7CDE402449FFFB4D92AA
  7CC3EE25DCD81D03712C0CB1666DAA5669C7552C19679A2F1367A222634A3B3EFF7CB21FBBC0F6
  BC37C62BAC7FC3DA19533344EDB5CE57C8CDD8A6637A75CBBF8100B8049C1F1BDCB695FE052A13
  478D5B16E025975EDA0599E6BE78F345CCF99A3494F610FE4614CF6D7F495167F8624E5A837157
  41C98DCCE432A70222F4BDB2C946E804BF5901E43222D84FDBACB5059DD9BC9A874C498230D3F2
  5699F647C873D6017488990C25F4A84EC4C38ADD46ABAB93A0272201CE3FA3B1CF239FCA8FF519
  8DE7474518CE05F3F0D9E72DA446589CD7C084B3567D23BCE3049FE59F05F542A29728B08A9BD6
  E853F3637A4CC9865196A24C9C6C38B97E2D2005C2CD395E94260AA7530A6C136BBCFEC333D0FE
  74014E6FF97BB72CD076ADA21B960462B0EC7097A7812EE3044B15293A02E3E0C71F76E10ACDA1
  73F29CECD6D9AAB7CFCA3405772463CBE2BA6D23A270755C3C740A5BC4AD27C35B95932BCD8B81
  5F2E8786A8FFA7746DA891C83A962A3D88A7B62C720A0C7360397A4AC79D32EF020C843A1AD856
  14FCEA427D7D452ED6D25227BFD6A7C49340E178906A09D616337FE7A3B44854B7B449A4856F6F
  AD157366517850666FEF127EE87E97234BE5E8059E1975261DAE35308F31C3E14DBAC56FD7C055
  BDEA02837FA4183F158F87150821DA50FE1A57A76484FAB98F808C98BDDD40661FAD8BA00E64C9
  2517E259179EC40DF9EB005F517EE72BE7A3F3F2274C6FFE3712A4BDAA872E19D93D8C01056474
  41D72B163B460947977F93206CDA0282D63F3B5DB0D8911B5F921D5054081B460CF6B213D2547B
  24BC46CCDBFA3E7AFDE74501B68A31BE5ECD011F4CE6CFFD3D762B2D90005BA732F15581AB6EF2
  E99264A0E055EDF3A2D8C9CFCFC0989ABE3B2E9B8FF08A2BA1EAE1FA92D49BDE5C447C5C156CF0
  E5D5EF4A45A1CFA72554B0AD77520C7256FDC2A7056492D52D6CB45FEDD5D627A28956397B0869
  AFBFA53B5D3D113E7ECEA051A0E3FAB7CD8E62BDC94F8B482EDEFE3FCF9D391E59777DE81E5609
  D92EB704435B291E31CAA685E21AF491ADCB2E2CB67E42803B9B84A6479C149206CB57503F6669
  323DBC71800844D05C335D966398B4BAB12079965768236D29994B9B4E3B5794D6A8976D2C87A9
  1AD31BE5D9603A7C3A061C3EC9827E6E48D105F093CF11E188F236815D7D04B879AFCF4536C9D7
  9972181F3B7741E48C7081CFEF5A7CF0E1927E80DD08E3EA3613F5C8671753A00718BE42EA6746
  D9532D5A9C6C705FBA16822E7A847E8B1C178024754B812F6B08CB7B679B5CE29D044E9A2F41E7
  CE6DE6B088B3C1D3CA882EE6692CB18DD9B5070CAC224C95BD3BE0F0FB07218947A9B398C40D55
  D0E09AFC788D43392F122DF3CD74612A2226FBD74A50C53456D344E3725E21DB2E2E196FE1532E
  0EA5CD3772C9A0B3A3AE8C3C64DFEAE4C21D12F570A92A84C75A878084EBFAD870C1A5DA372DEA
  433EAFD79F350EBB0EE20822E5A52C92730FD2A0D08F9A004DD087853A48D49507AA5B1A127D19
  921DBCE86CDD407B5B4358E098AEF334A9FF7E4AB3DE94D3414E47D758A4F37998BA6323A27385
  0DB0D41F9580341570A4CA7149EC6E4F5D952E5DF8024F86D2FB962D7A717AEDB7C95968D3DD41
  DE45F380836F03B9228401B5A0EA8BA64D7AB60C5B45B8A25050B985F63F66BADE6AF149C0BE52
  59D368ED1716D125BF6B5587D443C6D5ED7257C28CAA747120565FDDC0078D4D805BA937244772
  37927A822AB6E08DAD4A672F28C0A1159F061F46E41606A1E00AD0C9BFDC0DB57114083E319A71
  E150F6F2B5AC289425F6A7A440A83202D4AA8B4DE7492A95FD347B281D7EDF6342756511758D6C
  FBAAE5E073F5D15A378F36DD1898ECAE4580C3BF89D6416CB521506F86A2FAFA04A91A93B191B0
  ABD5D7725EEDB2B5983C17333B78D7DC84EBFB7E4A849D3DEB1676A44DF21535931FC16D9D818A
  0C5A8FE5E44279E12BC1CA2E8B2EBF90576CEBA9656E2EBED725643AB26341D9DA080EE57098A3
  26B69EE4CEC5EE684C61D03876FBEEBE651D980738CC23CCCC7376328314F5A6D1083552631627
  1C01A50150FE8547B4BCA181E1D887EEC465E2AF3CA26D4FFA699B0ECB9EAB0DA71A590AA1CECA
  FB8DB0CCDA18AA76335DB7874BDC49224D1DA363011B0F7187D2E0D8FD19189A5C82C4FFAC4CB6
  0FA7B0521BA5194D1222D0779C74EDCE672848C275C8F8E9AF39E0DA3D8BE9B1BD4118D9B11DA9
  D233D9CBE8C5AE5D2A60FFF7D28565A660D27F515D6FA0897CEAD04C6D6E253E0ED5E56DC1F005
  FCE2AD618F79CDA6826875D91262CC6D6A64BFD70E7FDC965CBA9C6BD6F251748A5A42BEE4AB29
  0E0262A4DB580249A00C69D1CBDD49E3AC700CB973BC9358ABEF8A116CB5D8D4668C302EBDF06C
  9504684D7D18E522F7C42EC6A77171552B873E753C1A1888666D23E6F9225D092C6DBF6A0D27C7
  6933632C5F1C5E01C8E139A9EB9BC084828F85095BD9E6EFA0224F86977DCFE653F00AA693623D
  CE04693A7EE2384A285A6BD7AC8767166FDE75194E326CAF447FEBD242CBFC71B637486F9934BD
  1AA8BFE3CB85F3DD258E079EE910AFA64770D5E30CA9B289A4D7FB7CFC48A7040774D36E8CD061
  AB06FCD9234D5032EF68AFC943850E53C1C3980017563C67E89393B8EE4D93585A4EF1533D5F0C
  A40FAB6EBE8721F58D05AA69D6067C2D6CB03FDF0B83DBDB696D4D4AAF3130A98729DA58CCF546
  AB2202D0B4ADE6B4845A1202D3F2456E34A1100FD6D445203153A1D11F3A2511CDA83C936AEF3A
  B05B5FB32B76029153B7FBE02057AF6993F47149E90080A3AF7CB29762148D6F94520A343E525D
  9646C0C79F1C79E75470D232E2B2CCC04AA8990909E0D26DC540582B699A71BB516DC2860CAF4F
  6F0BFC7B5292052DA41DB92BCD030863A117378B93DF7CD9B0252964BB4D80004EF8B3011E9550
  DAAE2D24F2D965E90342D847B3685DB05631D550C1FCD76C3B3903ECEBA1A2496F0DF28F4FA367
  C9A9FDB48E5E1410E815D7E93511EF7C94224686BBE827C833E4C121747AF79C69A27A0DCD982F
  91AF0BAF9EF3F9921B795BF42B817D93DD4D816DC698D063AFB306CC2000B37AE93105AB2E6DAE
  32F9DF44C09E7466A62B2AD48B216374610994CB120724D0000AB54F6837DC64ED4F6CE8684B14
  16D7EDB9D9A399D39274FEE6FD41D8E412B158A26C304FBD7CE0C4F96D01F5AB8A20B1FC4F00A9
  D33AAD2C656B31053198EB4704460D476FF2F505321212903FD21E2059C470643152B99B2E903A
  491E8E394BBCB2C0411D6D86210D5C3A43BFC2E01EAFDEA712F6CCCAA90ADC2A358AC62718D482
  FC31914E0157733283BCD29DF6D2AFF094C2496BAB6AA72265215A4BE34363EB879889E7727AAD
  054F90172C1D6858C8A338DF6C1EFCD64DCA8ACF46038F48392E75DD0BFBCFDE8EE0791CA2C0A2
  8AFD16AE56382ACCAFEE2BDFE97DCF38532C19BC5E36F9E5D82806D26171267BECC9FEAFF3000A
  005686633FE25967BED0096843C464BCA03314F1C5971FDEC8E24B80D0FD97B7E5763B427EBD26
  FD8BD086A2C45FEDF23218CCD381BF364EFCAABE04DA6687241805E37AE866786DF98C62745FCE
  9E0D6332F2BB90C0B2EFF14D08E8EEA6BCDF650D8996F48355D26CFBB859CDB418973A65AE2C3A
  767758AB288A038807F4F6469A823A9EAD746560130A2A5308AD0C3675CA8642B2B9FFCA8382C6
  E61D7959D9BB369AFFAD1C69BE31E00F0B23FB8DF407C5EC68F3BF298A35351844EB9653C83A01
  EDBEE75F792C502DF53257121DC8A8F2670AF1FC747229B53B7100D02E73821E176CF5B7518D53
  B420B1BDA8B70CEAE801D745C66231E62797084CB320DDB021BD5830BA1D3F49E03864E6A6CD35
  34511FBFAE8A4EC4E3EC817228C40F7F87F524790C4A3C4C90C010CD965016345018C27A1325AF
  E7F8F4A0F0342632D1C5F9E6728CF930F789A0F3C740FBE88015E052168A0D722B1621ED710BA6
  6842BE691E91F33EFB0708E3EA188DB42E8F4A54F77D61725731FA2E2D61F245745AC1DBE231B8
  460C3323CEC60BD1CE92CE7D1A2640D1594D24683D5E139164A26568544FD89F144F57905DB9B7
  EF81A36BD91999CCAE2192FC87C88F33B01C609A981D675A3AE8B13DD05E2622808826ECE05EEF
  3A36E25D90EA3723BF34BC6D86CE95EDBC4DD3D088869BDB105A5334B5108FADF1F336605A734F
  17044A5EABF468F4258F9E9A3E69551ECF0A4E8124EDB178B800D2708B95C2882A757568CCCC73
  C40671BA1B7737F55DE6ADACB84E87889738603A6D8BA0DB1D4C5B3730C169DA35017D477758E8
  9A33FCF009BE53F959C3F22973887E920427A968730DB8576A07C801969F89C93338A605B8A961
  54C62036EF908C81E65DBE441031994CACB043755E76A2E55BBAF6628B1AEBFEC81EB727662E1D
  C9DFD4149217DFE632606ADD92D2CA4E14443DC01CFE7EC166A4A2BDE3A06BCDF16500E12CDD2F
  6982F19E9951AD81302D2D0A20F070E75C0A3EDEF40AEB126DAF98250F6F3E38F4BC1B626E99DC
  647644AE6E4EAB48DA046C826AC7FECE466C63F75B872EE71F4F3A2122A383BEFE7103107A6169
  76C4FAECB19EBB850844FBEBBC161506715C357B35B83DEE1852B7268C65F87F4C2F96C3FECE37
  88A902F46571F0994A6586E7E582AACD11EF5EAA69097CAE24C610BEB303387CBBA1DE0D075FF9
  0BD4BE7E07C795A248FE321B468E02B84573D7486D59CCDF8325F94033EC633D2BF2867A42C0D1
  E0B0745EF8D9049D18B2AB3172093793F4CBB9DA888AD43FC22C933FF5C4DEE3D890AE21B280EF
  2DCBDAA03AE4EAB52F81A14412F26D2D3F0D49C8335D8EC4CAA6B3596238A28BD62261094E78DE
  BB0ED51CEBDE25878E1AF705C61D37A71FF60AA47FA39DB6DDB5EBEB281584A5E67B971502716E
  668FCD2A7589DA07917A048F796BD1C8512894F9DABCF712C8CFBD9B5C7760C6CBB3BC6031F288
  235BD791475907E5BCC6B1F300069EBCDAB1C3DC52E49D5C8D95994F880C5415124BFDD673C492
  CB6E77C8C44EFA04F7C5FD357CDAD23CA3642AB4359A52DFD2341072E368CC76125C0BD7607B11
  A7607D35F1A97F0B30BB56D4FBDFC9FF4BB4DCF7D670E7F5615AED6CE0BFF78E3180767C48ABB6
  18F85CF1328ADA21E937FDF0F4BEDF9688870775AD55A0B19B20948BBBA1B75C1DDEF0C2293B4D
  AE1F54F4A99D98F9B40C915990A6A08D5464AFA2F33B186DBD382D01F8B7F4341914311CBE2507
  DA3D40A333890E08236DBB4060CEBEBEE427A4DB8169E748CCE7917C4632FB85434C2AB79DEA36
  5394EA461720AFE26B51367BFBBB310A3CBDF0509EC75C97D6EC15489F3E2AD54D5E76FFAD6809
  C8992975D9C694EEF17EC52E78EFC3669B570D69ACCE61E5A7D6E73FB37823D64CD9A16BDB485B
  9642ACF32BEC3FFC593E03C3CB71867A0CB57DD13A93DCB093276E85D153CD83920D560DA50C21
  443C72B521DA546F12857BCFD5D372E71E0AF1C98EF482F04FE2A1B577505C602F0413A71B070F
  131E9DEF87869FC219DE59A1CC19AE38EFEFDE2B69F52708B60E48EF686EB362C690DE5C031D62
  E9ADA7469297531BD01F6E39DC78B7C6830AAD04277AA98EBA1D82FC0C00F5A6A1E108CD6835F5
  53346E921D728F1B4EC0B9930255A68F3E9031F360CCBDF01C9681D602A5B9F0BE055269D419AD
  73FFF504DBD4953CA30D4CC5B4C57E7921D6E648E57449E189CF7820BAD4274555CA45C66EF0DC
  34DE52D3836812264986B454C9612AE8F4B1A93C86B5E4B7DE304AFBF080BCAEF1C62FE35BB3BD
  335910FFD496760CFFD002A20637C45690466EDE85A4F28965CAC5C66F323D3960DE8389F1A758
  027BD0C3188F249FD61545C1EB9D78A0EBD81E5F5C2C8445EE82C0CB969D788F1FA267B18993FD
  ACE99B21A214C69670C77D920617074059D92819D79FB4BB4497F4E2BE1D8243AE0DFDDA0603EF
  E51D1F3D47135D354D9D7F756CAC72E35BD4E8DECB1ABD53CE2ABA5DC1526A10DA69DA2FBE9328
  A334381E0CB929266765898FD38B74039766985C88C2BB9C448B767264353A0BC63B0FD1645D71
  026DF2C08449A9F32F25C4F432119BD9A7014AE3B43DEBF621C9CB92346ACEEB5C2B599D553708
  2E054C3A5680A08191D7B87991C2ADB192BD11545BA9F5096CAF2DD7B7EB290E70AB4FDD3989A6
  B7CC123DDAE328E922100ED8C7FF95867E9A168F1C9752557AA023C8154E9BA970FA0219A9889A
  5CA8D001AECABC4CA840322BE9EC9F6072E6E7363C258789D3096875DD236CC02B078B22484767
  D7A0CE87394536A796A6498708C287DA9691B1472D4597DBD49F4204A05191265F836EAAC4E5E1
  B1D7687BEC630C3CA744A044993C03D4B935E1CC730FCEA68A2C0F5CCF52FC1A274AA67B3B6177
  F4B87DCED4856E14FF00FBBE8DB4E027751B367722ED0B39CC88216177F2CA955958CCE0A9FE85
  71CF8A1EBF64D2BB3F177F3F0EBA581AF9ED746E16CA9CCC2B5EECED7A0A2254E766B36AB84A25
  4987727F130AA391B5CC2FBB9854AE66876FF09A387F98EEF39D3DDA94CA2DF149EBFB59EA4D4C
  CBA5B5F464C4C094CF7D1F8970F8F5BF27E4C7EC99D5C8DB1CA55DDC6DC5C7DD72B62A7E5C7B17
  D5379A6CD2B6F666FF6CDA9BF690A8839E234EDF6E81BF3969F0DAE3CD69D48A6F5B0E57660BA4
  B57406CE46E3C36C0D348EB44C1116878449F9182F23BCB7F33F944D33D15BE83EF3989FB9909C
  3D5DF3442D7CB7FF592CE9AFCFBF8B1CE63B02309212969E39B9C1A933628FB38AB7565C3362FF
  803A159C82B0FB6D9C8F1E7BCE0DBA8C43C8A269DE2E684C9E20FC4818BEC7F307B6D34661D4AA
  FF8A34AB31A2B3A349D706A34831BC61ADB414C7B75B78D08A6C748715B7B2FC84D94B73EAA2D9
  F1DC97E78A3A4D3375821FCBF80E1D329289CD698DEFE021DC2C620D1558F0D2444AAA9A18419B
  CF2AD07529D307CFB11ACD08EDDF9371DCF540B2B9AB5D005068E50EBB6F9A0FBE98DF6ADE3D4D
  F2F0733C8B094202AE749953495FEB3E9E9A645647CB6755B59E7349A1E338C4FA8E4BFEAF951F
  407EB9F9CF1698C1B253D471FE553D8DA0C21829EC10CBFA7E4411DEC7167531B006BF1DC11E5C
  8BB96793B69BB78081D677DB08C3FA70D050219DE116C05B3FFD88853496D73CA094E3F373C39D
  F8D8F16BBF9F858CE416D17797EE7FFEEBB0428B15EADF7C2DC0DCB6532CEBDA1C07169820170E
  13C5FC90DE91C9D95DCB23831370A5B4B798F0B748C3B80645EC427965D6A24FE712F199405812
  EFEEB8DDBA2AA91AB87EAD349C87248122B510A0DF27EE46408416D8CEDB7E69EE2138DD95E526
  37D44375ABF3B9C266EDDD81C562501AFF0D4241304A04E71346ED178289E1F1CE61772E1C7EC0
  01E94564CD5C9F3ED640D8DAF6C1082CD8844653F78F8000ABBC4F34828085291893D690403573
  888EF8347F6723A5F5B7B49AF74B93F731C83BE6AAB8323D2265932ED00046B5A825E1729FBBB1
  BA18D48413A9ECDA400E75722E01C74D6BE5DF26B17DDF10C370083A20EF2D1080BA9F2C2E71DC
  9C78D0202B9D82EDCC7BA3A8940ABBA51BE105FD8516D8C092EB4BC9297768351FA0BB13722516
  110B2C72FB731641B3B15347CD68C894DCF2281D7A028BEDB6D3001D1D62A00A260989511C8FA8
  0C3F154B12B63BA7B639E6A111504D0B0865B08F0D9973500C3664B374916760F8588C1DA9A6AF
  74E9827194A893D0E419164521AC72B2EF626E544C3461F9A29791BA69814944DDF7032D2D1BD0
  D173D18D3E06BA08C209B20C71BA776B7F44240187996B3F4C42A797CF50F1512047A6359BE499
  F65E639D59877E7263BB0CE25B005E7A387173483CAAFFFA0DA53DDB86CA12DDCAF8E415FFD59D
  1E00855F837CC1087F18471F2146E0E0CC1901F9D1B968C13BA2209DE45FA7FA4863B159EFAC29
  982D64DC60F248DB16FA9F08F9959E6FB01543A77679AFB705B7E03995D309B901BBF9860F96AD
  7715E7E3F0B66395C953DD21380D8CB1B1791F353D06CC045C457AD2FEE593C32D77DFE63FE9E5
  9F25556892714F2C5E319C7FC1051AF2E69A0A557F26C46A9F9B4F176C5CC1B10AA4F00CDCF75B
  3541154818360F6063491BE10311BAECC1E27C38F7349B50ECD72B81F5BDBBE7C2F2994BCF843A
  B06FF3FC7D37D6A5E83FB2B42F884E3BB14D7CE1B181142D558762DD7CA511A79DF94ACE080D91
  A001536BE0848CBB9B54FD29B1AD29AB5C7CAE5257AD8D5462DA2A9D2187267CDC5D71AE4899EC
  FCBD408177396FC553884D50EBB82E5E490A646CE133F06FCA26733A5B8AFC13DE5F3ACBFCD267
  ABE6490790BF990FA258D7B1F5E513A92F5438C99D8158512001538C085259CE8552A617855AFF
  7EBD71DDE3C0C04B15AF98F776E001200DB7E94D50E7812A5D32315AAFEC430EC116CA41489C87
  8E19DE768A2EE390E610F92ECEFEFB5D63113078420EE807194A218DA54D186C412C9906BB725C
  D4380FBD73236A727895C0BE672D5EF49E5C2714454504E87A8D1B2AC808AD09BB47A8165105CA
  27813EC651185F63C5A9EFCC9A7516DF4125E43893622BDBBC8973C8C321824AB1EA53090DA7F1
  B3EF9AC4BD5F4F7D65339D0B32884CC14826EF4860B28E0B1CC119BAFD0EF0BB890A020728DD1E
  EF3D898E25610AAB5FCC83C9FD677387305D4BAF65A7CC9CCFDA17A42E24BA625580F0708FF9B9
  9A87CDF87452E87644CD9F59AF16A8E62A9B76BC3385692D4D3C0294EC71E3B662D53BCC95291C
  3513C55594FAC96ABCF86A421674B92A8610251D3D6E0BCF60738FAFF64D2024538FCC4FBC588B
  843665FC4FC64F6092C6EE7B682A3E5FA272E38C8FAA1CFEA55EF235F5D67D48A46A00FF58E47F
  F96263D4FEF92F333C71AA3D6E0D3D0325DAB33F60234E980A5E0B8DB77F85D628A693C81A532E
  BA7B90C071F8B7BB261947D43D70F7B54EDBD1D6F30B8509035FCF19F1AD8779C9088ECC6F9D1D
  EA48694ED5F7814DFADDC430EB361CB26B9AEB430C31B2D8ECB1D995DCA939E2613CB48C0BF401
  F2369329C215B3814BD135E573471527958A3DD8971694A02B812A33F4F5588F06CB0FE949CB3F
  648475AF8C778DDBEE0A7E522FC9309A6496489856BE72B91D6408CA7F0F388767C8A6B0710069
  23097353EF934B0C6A9646054B06B4FFBA632813676CB24CEEC3E28D3D63C8D13A041DFDCE0158
  72A4E2DE2B4735363CE09E06E4E7F8F6A9ECE06F8BF82937A8D893043B7438832F17F9D5E7B082
  92D68D0E0617B22E126E740E1B67F3595CEAFBA8DF47059EB6AE1FB15F2DA5A8981CC9B8805929
  F1564555CD055614CD94A5DB5487B39636DAC4FFBBDD59665AFDBC5253B475316EEA6888309F27
  AD14C2316F997372D5688DFD804F6B6034B57885B76705D2E3484CAA5078FE95592118C453FA65
  A99BFF295671C1E9BD2E6AABF1F48A71503613D3A98FB047FB5278A456A6FDFE328CED49A2121F
  0D1285701F7400A96D6F11FB99C6A456CF1D792CED72652CACF93B60B273006C83DB3741441BB9
  35A5481CECB254F410103A6DD01882097C8D19EFE4990951CCA88394A0FDEE1D763F6381391C85
  F78B9A2986AE3A4622E9FEB55B38ECF4F0E0F83DAFF187A734C752F579906668A745D4E7DAC7B2
  C7731A61252E51B8FD85E077174BD9E623F7AFB78DC102CC6368E8E115423F4CD2CC4212F4199D
  C5D6AE755191D6E6BC040EFF9DD381C15FC4659992FF8990A4847A4A11B50A241031194229B54F
  00B1DDB9D1AC575529629A161A0F1C98B248C605ED6F85A9EAD6EFB098EEF9810C320AAD530901
  5125E1D5887C25E222450A0C606116F1DC2ED89D3F2D3A6C666171371E59F1DD1D5891DC3AC02E
  572B135BADCC453EF126F15C986499CF1F3DC7B9F7C9AA47399022CF9DFA28899C679F76BE2B00
  1FB281208719E23C5301941786E1873CF7CB4DA0F5F92753624C7D8157683F6E957805EF570618
  6E9EB09162F9AAA04D7907990296F899F1621A4976734F9DCAE11CCD969F9ADA669D86ACF1FD71
  98D23A1BE3915D8ADE29D8CF640D5349FD3799EF45E6BF86FC60A384AC7D6F508CD17A4B274B37
  4B37645B25E34304C2D82B2A31170FBEB0A68966793674C1B3A4B6A117BB2F1E9F7CBD52E590ED
  D32BBE4CC0F75D0861D37651754D3BB1F3FACEBBDA42355D301510C9D1C35B8DB1ACEB5DF35D6F
  76CCFAC79F3BF0C5C7F797C894FED365267B0A33514B8F7600424CC7D6E7FBBE0B0D3C8B6CC8ED
  3CE2B4520E2FBE35A154107E6B84CDF46828D6720F62235AE2457D0DCDCF91010BF15D3CAF95B4
  A236019BE0AE1A2E8F78F5DEA56FBF1016234F75423D307BE491D29F6C27EFDC11BCE180B20F39
  EF0C4A9C72F8ACB61DB425A5376330DCFDAC700910AF3BD767BC87C4B9691C3DAEC8DAC7C226AC
  36AF7E444BD30E11EAFBC8BB77181EEA3264FAB7F63142BECDF37B8A5F63807249E618458D29AD
  0E1FEEE567EAE1B4B513A447E822A688C5D87D64C8ACD804AD1C81815E287F50BF5630CC631A93
  F95C59CBA596DBAE1EE8502E3073D76525FB2D4F94C5203569B02F94593778E8775A87CBAD08C8
  256C51A19CF381C24180D4980EE17E94B01AC761F910D6AAF09C5027B79293FC87A1DC3CB7080F
  6EC0AB763CDF14F6D7B1899D529C42A262B579A3BB96B693BD793F0BF7AFC8D1B60289BF239224
  35CC3DE78EAB44542EDEA0F24828922A702E7A11FCF529925FEAFF53751502F9434B72978AB7A1
  2B64E7BD6DA9917C9196EAACB3999225501410C818472B097C708523C310A3FAC7521BF6AB6A4E
  9E1DB38DF4D93F9C12BAF67BC8B70AFD8D08FD6F898B96629A913DA0DE669678FA1EE7086A1C3C
  0D45AD5C63433C574BDD8BA625897262A06F5AA47FDA71805868B9BBD7914D7BE697BC90C74785
  30DBE5F5576058767B5C302CCF7DC6460D44FB635B5AB595F216C13E7A4D54029C1E9281444B5E
  3B1FB3D8C7D72BA0201C51F4ABEB9CA263D4AED86B5B0CEFD0EB142FADEE40A950CF441F547B7C
  71427C30CA22C161DE130AF5210E5BD0D58AFD748D574B46A2B4EB4D6CCD31F4DAF0CCF94C7DCD
  80B0268DCE4E69D97E6F3CCB731536528B5CFE9AC0133871CEAB7FD6B1EDA4FC19F8B3E7D9A92E
  9DB50F198B792A13986A2368DE33CCE717ADE5B0FC6F76BE8B4EDE6AB157E014C6C48CFAC5D507
  53067E9330A2FE7737A0A8F259E5FFA7A030D85FEB857D785866CA8C6A5043ECE4C1CF30E76C0A
  071FEF8FB30CC9BF26CF5DD8ADB87A0C03494876AA1A2E9AEFAA45A98CD71E78608F7523B6D686
  EBD8048BC96F91397A4CAB1D5A496B43042C5DE6C1C439B8D09F6381E88F825A08E818297AA27C
  1D37FFD541F6A9E5D4B7E8DD8D13F8268C83135C9631A603C69DD22E6D3B76063E5B0BF7158C9A
  BC9FCCB946AC24995228C48BD031D0A959944181482739EFF6CF2330A6A6C6FB906EB123E44488
  F42AC2BE237CB30C441B5051C028B94D9E6B7E57F5A3FF5504756D7EC411CF61073763A5E72FC9
  DDA6E3345F58646B69EA140E1C711D794E083623B84A4FE110256FB8543D32A2D5535B7DA0A73B
  D171049412FED79B84BEB56962E1FFE1A12F9BE4FBC72CFDB9EF92BD60B200AE8D66AEA30B158F
  E9FE278D8833111AC805ECC90D65909787737E1E1FFC88DE07B8D79996C9F5685F57102C65DA61
  97513F85B173200E3222876AAB83941CB066E3C642AD23958B00B17516A2CC8D8BCB0C802CF34F
  A97851C037E656C30C446C740422991832129889EABB35F5661A430E5A503F99F5381C5F26692B
  D8DB7E9F6D312A297B697E93831A06F386AE2BFA2BFD9361F2E366E18EBCEE56B82C16B2DA0017
  95CCD97D67ACCABD22DDF00898B3C39C7442F1488552BA46D4634CB330D428A19351E401F91819
  708A82D856DE3C29180FDC56C6CC7038302E55FAA5B777E8CC6CF4BE2ADBE59BD270658F168C11
  096178AC07B7B830C0E782D41F97EF221B7B91BBCBD1EFE3A7AC3BDC0CD61C74638DF410AA53EB
  AC35A079D6D3914F380F4A376B50892AF20CF28F4FA355C6364C614A9DB092DB38D768211FA16C
  A991684DFC8F257AB0AB3F18F3D7C89934FCCEC089E6709BAD37B935E875E34AE5AF4561138D54
  9A725F4AA92A66364DAD50D00B1E251FDEEA8C145DF1ECF74D59981948C6A393D7DE3EDD731D2F
  EFDE29D89E9A4D94C69835050FC3D8513ED2C39E9FBFFBB741437DFB73277E227523A45E6362D9
  1DD5739D82821CE0DD3963D0A4F01563A82A94BCA4282563F1371322943A286FB67742953B9152
  7B377F49334141DE26AD5D170CAE36767A380A794C755A708E339635DDD2F6E7FEB4DC851502E6
  F4500CC83DE2F216304D0095190E3D405643D609921A6A895DE6F2EDD003CC4D30A5F131803822
  5EE6E072374BF755D5C0D3B59888F5B06D0167BBE0A6C5D8E5504000E4CB71C0F18E01CD5EE76F
  102DC77084D2EFCE8D85A8C2C38867F10C945C8F13B12F1470B0260612C69D494AC06D92DD3EEE
  A0CFE25CFDF09AE8C96ED32836E28E5583D60A8469AC220A4EF63123D4905890EE48B617C6F16A
  7976BC855AE0BA10E37261AB4752C6C9BC43FDC20F2355E07BDFCA70F7F15744A973425A4B7DD2
  26A11FC9D40FC34A38EF3A05FECECB29D1AB4BE73CB14CB3F6D43542D3A4821D626A3D5EA1691D
  C39F4E066C1B6C332E7611F13E27BBB6D7147ACDB573E9BCEBCF7E35FD3149BB0362E701FAC28D
  7F4D114A358D286E750F364CC2FCE36D3E6E9DDF6739FA1D1710439B28F159AD6C53AF63CF1D9B
  43D23CF6B8BA2A6F0EBCE50C5B730CC550ECAC630A328BB269E26DBEDA5FCC6C1AC14FE5485FF1
  8945D6C33657E86812E1483AFDDCCE4DA1F2CCD18703CAE39AFD732A4C26D65E29699848C2E396
  64BC127F88BB774A3088AC0A1414B0E44B194EEBA2055140374AA338D6B9D49B4BBB64FC859031
  9589D4166EF38F1B5DD8E4EEC2B39251FA156B8D00C07353C2B038322D130FC9EFFA6BEFD47BFD
  D6CC1924AE5046C077AAC80B29CFFEEB825187DB1B72BFB4689673F10EB0DA0AB3B63A5E2E8C7B
  39854700F3534AF6854E0C381A051301D24D4182A9FF745437639A4C61AC7C0505D62263A29E5F
  E0C7DD0702459061330FC9F72DF43336BC1F6AA1B5630E74C6F723098DD22B7A1DF9D710C10D3A
  96F90A36693D97F11F285CE3A4C7C799B3C3F28FC99504D54479A6C3D027B48D3B31EF23FA1A11
  24840092A41E72E08C3146E22B110346B2DA7BDB75505658E66F493BCC1250A8A7EB41836A2655
  DA0E9FED1AB3AB8065695873CCB358322BFFE548A17D79FEB4CF4D4E8A12E6ED79CD0065E1804B
  201A45A6F757809D5CE810C02A3EACABC8C28E1C766501B886152AC027E75EFEEA7E1827FF276A
  39ED79181CE3B2D94145710CB53538E8BF3B0DE5CD3EA0EC4F7D2BB917BEB5D8856C935A00A4E3
  4FFB22842279D7B2993B4213B01B71108D2B6516F1C229FE83CEB9D330B64A9CB9884339AD50F2
  14891BB3AA89A6B63193E54F641D0F8416D0D32A1D9E849B51EF1414A7214A65DEAA37C6559CF3
  A8E16299F42EC5CFA325B8B40712516E7C9DD6D9E3E1A62559FAF2A49D5002F6DD4113F5CD58D2
  A03C8DAD6B18960A806A3335B4D2A4A8BD7C09421B7B5DFBBBAA57A10E3B8034768A634565CE44
  B6C0F84FB5AC4DD6C1905F544B830DF14E56E5B8E33CC75917FCA0F4F8C878ABF607E971F8AA6C
  E6BA24E970A7AE710E56331D3F9BB7C2EEFB6C09835DB23F1EE6942E464B7ADB1C9E08CE5194E4
  948223D4C3445D4D91A9D884BC57D305C1E71331FD869E412FBBB3701AB9F114837AEC737C10BA
  624F1B234ABEBCE05B6D7DCF8C4FA44952DBC825FC41A934D71A23B4752DDAD280B5EC799278B0
  AEE5BB83051B5DA60F34951FA7B90189DFC0D53C0D2B7303EF0839EAEF0A096AB442E5176E91EA
  A754466D1807B1290DA0D3B3A675EA2EF9D1AD02D177195D670AB368EBA57C4B75ABCDD4D603B7
  7FF892E2210DDEDD429D6B12FD7078A0A04C02ABCF10B169660D0A7E184CAA2EFCDC98A2212692
  EE0914895248F7FBB690CE2A465AC90971CF57271ED4DE777D8B345259AB02B0DACA97E184E319
  8ABB5DC33E9BC6F92744EAB9DB5C20DFFA36B6C0CE1041ABBA09E50D8BAB6B5B3520FB34DF68EE
  B43B674879201EA95DE7DA8500DEBF253D5A81DD13AD3E7CBCB30200E003C27BEE141ED856C11A
  2210D12B1470804733AE89A0180211F81E25C422A95406C8A8743798B4AF102EFEA47BFC2CC2DC
  349599A4C00037A9EC03D2810B50A52AE9E5CEBEA3E2B4B6EAC0EA06046AF69CD718B57044DBF0
  DF5EA36A9B8DC51037C3396B2D0959DE97AFD35C17503FA02A313F5FFD50BEFB383E9BB672C535
  54154710BCBAD171A654C879F500BB7DAD189B1E307001B046D98C3737F906226342072DA7B7A2
  4FADAB5381426AFE402C42B338627709900EEBC77F90459492BE27041A126AAD9E44A12CE03C83
  09A407163A04F667F256CFB1066BF03F317179E57C2762DE417C5EFAA880B35E7B424BE96CE0A1
  1660F85B8FCBAA45E8F2262814ABC86C58864CF1E843F2733642C72D9AD13718A9A81C1CB4DEEF
  130614E91B8852FC6793BA0F55C42867951A1E39F5DDB1DFD30270438FF363974633862C75335D
  BB602C94FA037434DC319E6A0019350200782CCBDC96910DD18FBA2711A2534B08087E83A96C91
  3CB856FD45AA3658B76CE7041A57D46B019C76B3ECA0D757AFD0534B7C6CEF2939918CEB5DC524
  9B5601CA37D0FBE8D90EA9302DF998E37BAEECE630F4019FA8E602D460D6EB8682D115EB3F2C5C
  8AB39639E1FBBB1109A31DB5A19F116068518C3C98FB4E91144B893A403E6601D4D81DB1C1F00A
  80E837116CE3EDD313100D0B8BFD3193E20CA90AC3CB107733B6499A690F2C8D336FB29E144470
  2A5217E1E91852F5EE0B2F30B61CF661109D0ED6687D7DE2FCE90622DCDB176CBF18C9852FF3C2
  B02F9FD7AAAA692E9162349E766EC29CB98034D3A8731F4912193F1F480B657BA84E282540D2BD
  7AFE547D10936B1739CBFED239A9C3FB8DF52E9BA1F38FF0F34E703B16F87C48EC50662078FAEF
  9FC4EF4526F90740FAD6481AD3B4B5795C9E57DFDE09DF24CE8773B1FB4CEF1C95E73DA6F72018
  CA0E16DB42DDFE16C6697FE4D7E0AB517AB0A93C85EF5E7CE2C44137A6AB15159738728C6FC2A5
  BE3E799D5C832DAC601477C9FE8C24FB368AD1C6092C0DB6F516CC8556A481CDDFF1D26640647D
  01516E38275E27B2013434E4DF83335EB166395405F9DCFBF6C2CE886DD59B1AE605690493CFB3
  708BD1295A114D79A26F74CC11F49EE90EE9A364B514967C0B379E676BE00FF0073CDF0CCB5756
  E66B04AA0FEE5EE376C0258E2841D90176CC6694F5CB6369BFE4453236B4F5ADDF98B86C6C8F0B
  74832F6BB6684050D22CB28CCF9087B59ADB30838930E2BDB1FDB955C560D4D617EAE79064F742
  7F1DF3E2A20E413C7BA3E9AD26CA814295FB331D1080B45F006513F359AB822C8C9AFDE0B2CE30
  8936A66FC5C3033567C489565A58767D251D29DFEE44EEDDC59DEA50457A258FE68F7EA61208C3
  238C7EFD69F09A5C8FCD557380A6B4BD82D659B26CB4DCF180CF0057D120D6A6E0DC291C40DAE2
  833F4E84A18F10F2F32924BD93C5C70C207E5620B60E172E238EAF0198D7A1249FFB788D6C1AAA
  4E7D0B433D58C79AEB3E5CAC751B78B55E2C2F2382F2F04A71C044B98330E16D9B74481FC55496
  AF2FFF408157D99115A38BF0767039211D6841345BE3F6D624EDAEA4602BCBC3A87C8013595D9D
  09E7207197FE87FD585244060418EB2CB09EF369B785EA8B401798695B473AB58965057887EFF0
  A6585B3629E87D700C8E0835F1E35C280D61FB49871EDEC7C4E5C770C3D8DE717FDFAB7EACF7AA
  E78A1A4F0772EE38346482F021A95688E1D3121DD80A88A349258ACCD8D094F403A674E1710F61
  46DE9507C73D51C77354C475B37F3E266ADEF2D739A17EA5E8BA5F65C314D57579BAD77D37E765
  DF196FE16397CC58CD8B21C21BF2E92A0D0A4893D679AC9012757602EE65A70B93CEA9D02F8DA2
  29C783474CCAB3F8D3A06B2DEECCAD27F621D6852932D43FAB8D81167A47D16D86837B68B910FE
  3D97E07239B767FEFE692990A4F3600F7BFC55B7B137073467FB722D45EF59362B11B7AA72C101
  401FF5216F48329E7217AC572CC736B77BAD3B863FD622F46CF547EBAC0ED63BC0AF3DC86B816E
  D1B862A0A172539AFC23ED6201627BD18A317F6A2C5797591EED54D9AC7E5336402DA66965E311
  768EE74D1DBA42FBE2C59848F405DB9CEA39C7AF0D13B6F0CB99160A2CBED0ECE55B21982FDB7D
  59FA99649EF7F00ABFB9AF764DEADD60DC3BEA997C182A9E5857B1A9E3D1305A57F608807A12D9
  045236C18F174A63BB2F66F006915F701A7F6BED3120A63438B5B2EF4F7DF4A5F422FC1E61D395
  88F0A865B710D1E9165CF6D152210C7165B392E35B72D1239A18D59DE31A08676686D4C739D500
  D15D2DBF84C0C18880F41BFD757C3E2D15CF68A2444B863F6FFA3C9765637463FD9212ABFE1B5F
  03A882E46D4236052D3A270D25A26457A4C9F348B6C8F0819F3BB5BA54B09071326369AC2E7CA0
  66D472F6F7DF7D4D1EA9FDDD0717973A72257DED260FCD992C0830581EBFD02CD4941EA7EEC4B8
  5C8ECCDCCA777FEB024288604350D53F97CE23A7C2EC292EB69D3B2B75DA47C65C2C0CFE3BE097
  F9287AF9C926292CE9385A45DCDD0314B2DBDE5AAD2E6A61964D96DCAE2217BC4B5A056AE24FAD
  4A0708F63594BFF486CD18B55C44A8FDA7054B0C9A20F3C3799B8F7647DDD9B1E5A5E6579B95C9
  EA4F3E0DE8556789FB080C7019134841F44B7C9E526EF858F8ED5C0112CFD2E3C1C1F382B766D7
  310529696AA7A533D5B0B5D3532C11B3562C6DA713DEB04A5BF022058772C94CB22BB4FAA3295F
  CCA609D18EA85146A89C046FC60B0DA65A416E2A71AB5CF8D536138F2A85DD04AEDA42AEF41754
  232C92F1F79B303DB4F2ECDD3018D9C683A4BD7D60A158CEAE71D5C231165962BC3E88C2C3C0F2
  9CA2EF9070F8C0E99BC9F3652FD5599BE3911750BCBA6E5C5934EDEB6C85074B11A895A874EBB0
  E59043499D026A6C062B4F86FFD4EAD2C9A31D4E63D09EA1F00C55653A5A68717D0BCDA0961ED7
  608398841C26E307749A5C2766B0D5671AD7407C0696577DC0347FFE8CCE0772750D4D6E13A690
  E4A5EB935FCCBFCBCA751BFED56FE38A181016F87A05B90873FD8C9D843748647894AF1FC2E48F
  E408F7BA4CFC9C1A8898AC99ED230E985173B829DC2FD21F35C50103C053DDCC9F98357191CE1E
  19D6566727996460781069EFF33CA451A1088E81956DEF8E8CF997E292FBC63F99A84AB2C23A52
  09922836B072AFF17EC0343CAD1B847851CC31510C8CA59913CC8DE2B0CDAF99846F7F341E23E1
  C7727550EF11476472B3D082ECC47EA7E2B56A747E6A7777E2E1AD4F4F2209B5329F4111D8F7E5
  383D76382F8B5FA0D65F7DB47A1A080567023EE270833CBD88B00EB79DF491674B5742D27E6875
  D68C127262657624764AAE5B6A8775965A179879D4ECE7EE9D77BA6DC8D917216FADD9A26CAE9F
  9F5B135F6B6AA3DCBC7715B33EAF70717561E6C201513AB2303374
  0000000000000000000000000000000000000000000000000000000000000000
  0000000000000000000000000000000000000000000000000000000000000000
  0000000000000000000000000000000000000000000000000000000000000000
  0000000000000000000000000000000000000000000000000000000000000000
  0000000000000000000000000000000000000000000000000000000000000000
  0000000000000000000000000000000000000000000000000000000000000000
  0000000000000000000000000000000000000000000000000000000000000000
  0000000000000000000000000000000000000000000000000000000000000000
  cleartomark
  %%EndProcSet
  %%BeginProcSet: stonessb.pfa
  11 dict begin
  /FontInfo 10 dict dup begin
  /version (001.002) readonly def
  /Notice (Copyright (c) 1987, 1990, 1992 Adobe Systems Incorporated.  All Rights Reserved.ITC Stone is a registered trademark of International Typeface Corporation.) readonly def
  /FullName (ITC Stone Sans Semibold) readonly def
  /FamilyName (ITC Stone Sans) readonly def
  /Weight (Semibold) readonly def
  /isFixedPitch false def
  /ItalicAngle 0 def
  /UnderlinePosition -100 def
  /UnderlineThickness 50 def
  end readonly def
  /FontName /StoneSans-Semibold def
  /Encoding StandardEncoding def
  /PaintType 0 def
  /FontType 1 def
  /FontMatrix [0.001 0 0 0.001 0 0] readonly def
  /UniqueID 38792 def
  /FontBBox{-179 -250 1405 950}readonly def
  currentdict end
  currentfile eexec
  05D2542F9F75EC0822B36BE6F0DEDFC8DEA486830878B9EFC0865425093E0C2E69D6F33CC9AE23
  DF5EDBC1E5D079FB4764B9F54C1CB100A936A445065CB97D7CE6C0C4370B3ADE577ACD273EAED6
  15C410480C863CB75FFCE0E72EDB5035D97674731BBB8E694C0302E84C5CA55F405C83E06FA42A
  DEAA89CE21DDD2BC9F048F7501C2124566D55A81E16EBD047DA68CCABDA9D52A3880295FD057C8
  C7900A8A31BA7C4990680FF1F74D5699C19DC8359898F7A25196FDBE5DA6A0E5C6DB74B7BBE88C
  542FC0E458D64D52230079CEB32C6644A8809436BD133207FCB1E7165359DEC653C7EE65AE80A1
  92C83B6CF310F74AF760499DD67A4DCE97CCD1DD538308BFA46A992B18C02B8A332869E677523F
  E7C2597865F352B2BEA414020204762126749DC095CC55AA76E9C67A97692D14826DBBBDF5538D
  99E15D4C082726916270333E380EC6C71B2B79A5D15D9B928F63A48C4314E5CC3CE2BD2352533F
  5BBA3DECE7526814138B51B898666E823291D0142ED689AA36B326FB41E67DC29C46A7CBCF563C
  63B52680C9BAEE2BB55409547DCA64033DAF803CCD32E3768FBA08543D80A937F61B8C95927BC2
  A08F4A257D03AEF025F3877B798E55DFEA17A2C3A484BC6C6ABD60A2723446E2C67FE0BA1831E2
  D7D42EF86439263917CA19CD8F5A0A65AA7003345D13743E757A7B1D9BBCEAB6FE0022B4ABC17C
  108C913B1066A7B5218861EE2942E39E1DABCE1D16CB666B14C7421B9A58F1DAA519E6E96570D2
  AC187446F67438F56E1A80DF7A72A6A76CFC27FA07D10B624E8E1C53F71720B3351A9649A6F261
  FCCDE6BC61C0587E7CC6217F98D04986EE9AD86B0BEB09C24BA7A3F4CC66482EC7FD60F4D93D4E
  82272616392166AE09582F1A6146AF9932DF4AD2C45FB468B5D2B9E119E93B4E18EE963DAF1AF6
  FD876B362B31E36BB0A876A49D82AE89E0CAC13DE3DBF29FB96C8788CBC011CCCF04734C1CBA5A
  6C18343EA1B0DCE808382C9FFB44F1A7752C5F9AC6E7DAA59C08130034A8CEDCBA8D48881E79A1
  7BF5749F136078DA9FEC9CCFB09C85C63FD964D722ADB32B1040DB91B1508E460CD08FCB7A9E42
  B74AB09EB3F836CF46648BDD92E8DD2D48F8EE8F80FB1EED24E901DC294DD024D25A72642225D3
  028FF69FBA04392FD415B775F0B132D75D56CDE9C0CEE44C29F8F1692EE002A973C5114B03AAC6
  D1AC009184D50790D83CF803F2B36D94A8D7F3E1C56A0C924447F56925F09395CBB1DE38C5F13C
  1C7D563C43EFF5E8538C2BE12C8E214B774000FE4E2751DC6F3E2CC8DF5E4633E090E4C34C0CC6
  F06BD829B1105B50429205B2C4BA32480035CF513F4039B69EB475F16EA439E277D5CB93D7BA17
  41696ADBA069DF046232169134980DF13D2C75FAF57582B548FE67F7215D7673077168B733DCA1
  51B0A7591C1C2D7B1E93E485F54799AE111F272C49ACFDF6993996A7C5699B250CD2A9D82B7A4F
  60F990865A5A21C394ACC4D61BE0D9DDBF8DC253D156265FAA5E5163DF739F013C1BE519F5A616
  6FCDC3938E14D17D7B4CE878481D5DC2DE545CC29C88CF043EE98C4BFA6E747DC626152B6807A5
  640EA39CE6802541E5B4E80F6AAB41B13F6E8C0906556279570D7B3C5509237EFF4A98680295ED
  7BD3789DD532E12C47E9D26AB9831688E6A9D98715419BBA7AE390D6EEE7E913E98FCBA6B268B6
  C958424D98BAB18372C925ADC53415508AE4AFBF212D66A20066928CD81E5FFE5ABA34802522B8
  C49CD00CD0F7156859F14A254566578BE1E0986A86738BDD7E81EB8249A3C2B4FC522886C22209
  00BDB96EDA972558EF18E9408E6FA8B59B5E557CDBC6B9008E018089976A83157637EBCFB60E46
  0BE12F9E92FA8AE384E2E27B58A4DD46B6AEF078F17410B64296BC43BFF1AA720AC0D575B0A4A4
  685F533A846D1C8E6E3F0A8929DA9A4DD039AEC0908EEE629B28F8516836DDA89AA7E033974759
  7BAC32B7F65A47E875D6575930E4561B1077A8B6D4EBA710A60EBF8BD7F90D5966DDF217676838
  C714B7D0A1013CE649629797335E4F1E736A452FF105F1E31DB1F105F51C5DACFE14DAE5C385B9
  A493AF229268DE313F00275F6EF4E995D8E104133ECD3BCB1378B69FE0DDB100CD4481F3F7FFEB
  6B696096BFDDEEF1268BD9ADF681B57381896F851EB12534FB05EDC89ACE59E7CDBEBCDD622953
  4E12BA0C675260841609CB656B05D37CC7FCCBCC92BEBC4C2C3112AE2CED5590518438B2775DD2
  78DF847B5F3677934099A8D34B98E9F793E6C86C76B1CB0E42EC4EA2E9ACB22EEBC084026DB163
  40F8CD9CE194D2F6EA2403255DA218EC31EF12888D3C4ACE4C84910C6DD17C8321533B65496C0A
  67EF9AB8BB49D8A9DE10694D21FA679AEDFD56DF18C915FD82B3EAC5F279D4CCBF02183DF4EEF6
  11F5266108A01D054321E6F5922F2E1F78D48DA966549F37EA876C71BA109FE81719822315C2D4
  EDDC0B3B0C2564BF6D2E2BC3AA020B462F0A42C562C1FD135DB84A51ED677D2EC962C8A86DF9F1
  2B4487AF45584603D517D6BD04B66659ECDF446CAB71D768A9B4B3F58293A6DDCA895309CC045F
  951AE11077FD1AAF79DC80C0CACD362EAF1744455DB964EAD2D65F03B4F7A01AB2FB41AF084012
  C199738AEF935CF46E659DF852A78D343063014A75399F5FEC92B75DE7E04C6E42DD6D6CF84D35
  820297B7D0A4E072D9F5944E7EDABFD4E309016B6BB3450E2942DD131E7420AA2CA3E766BE9CB9
  44C28330F2DFE1518C2FBEF785AF8D9080EEF0F9E1553C2E855AA68EA71D8F5A16815D1F210430
  25E893E408B006DE432D9A1F5F3E45531785B3F8CE6B175E2F39B99945382E63C3F31C748BFC26
  B7D14060043017B3ED93E27E1728E264303B21BE3F78DF47DAA1395361BA0B84BECF2F8568AD27
  67314C0BC80A9B733D96515CF586CF038630707D2933EAF664665C7692563B2B8707B2C21EAFE7
  33C96C5CBF7970C1310EAE671F9893091706FA128B2DAADA95F26D0EB2999BC294A22A61883E19
  4222815929D7DF0683B5C8056C4D1FA0E3716C155D1ACD225D6B68976EE1A42171592A90EBC10D
  93FD735DE0FAAB691A4098239213F97BF81A8CDDB5880CBA714F22230D208AD96B9B73305B90D6
  C94697D3AE9FEE5A52503D844CDE1FC15112897C62A9C9EFBC3D775C40BAF7844AF7034669B332
  70533EA71BF0A9C27BC03A02D7040926DA1F10906D26E6431606907E8522BF6581A311A1EF1075
  B697053B59020B7FF83D0FCB0BFDF143FA8E645C5340B9226D1FB3D03E892BB24D7F5438D7B87E
  FE337343C1876CC99495707F87D96E1234B58C71A450F62CA5CE3B895B52328AC1739D3967DB01
  26EE475B5A609982C31B8FF352E959E417E907D5B9C076A27018849AC10E6113C1A0F816582683
  727477CBBCDE1222F9EBBB5648D29517E72496D1F0A44CCDB34106A53521EE8F61358A267105EF
  49577892389BFB701520AA73E6B8070DE634B853F3A61818A4B8B33264416C1C3C83FC0C8BE091
  F30252A8691D193456620B3BF471D4CCE9397558C7EAC8104C8C6A13CD716D916211A12C443F2F
  04EF0C31FAAF043729B6159B57826CDBDD6205932B251089385E4E30C4D51744A45D96FC284097
  2007ED353D62D3CDB6FC755C11BE98E8FFBB40560C93CBCECBA7C09692F817DCE1BA4526A81179
  2F2C19A169C91C025938E2B26A803682CD9921844BF9AAB1A14514BD26F046E8769D79B3604ABE
  0B786F60D424B2C6323520A982E906CC3E92D3B52AF04530708DD782134F4052EBF95339F50CF4
  5496B70B52B59CB6F54DF382CD9F4BB11F629861133B4F585B816EF197B60C5A2D9FCF7E20BFEA
  366B42D5F9B2BB0F67B045A5B57C185F621EEC91932855E0C91770A5E4FBDE4ABB9CD137C88B4E
  E499D432FA6DB2B87C71A03AD23BEFBBC5A8FB3E2130F451B0A0DD40E84783C26E573B43B15615
  4F7EEB8B381E1F97C54C48EB5AD4A1545391EC3F6650A0E43F4C23750DD58157AFAC738C07D296
  EB9AFAB0C0FAC38CE8566293C584B2256E79544A5B242834BDB31A8646DEB04C95EE80EBC2F845
  BE0536A629E8A0D23D355CE4D35E5F74A2D4E08CA6D47CFB1E0F4F98EDD2EF3DC779B69BADEEF6
  AF06F1C6CD36EED1C09E800CD723689A001000F4201D365DA557D11F057E858520DE75F5C8F354
  69A9DDF5A29D3651EFFFAF4FDBED2A9C1275DB764ABA6FF74B789DD65C8D082D9A9FC800873132
  FFAC9E782291EE6696D483D41C1398E8C65306DA0D306BB9EC713AFB4C3D55A4C38D865381DFB0
  E630628FBB7CF51922E547D8975301E2A81E0D429FAD1C65993544AA5431B880BE4F314C4981A3
  FEFB2A37BC1BEFB267FEC47737819C14C04486943CC1432135BD844A34617ED7E4140431AAE948
  E989C5C72B6B090AE889B62662E8D30D7C633110F08600F8F3DEBABE1B8272571B1550FE35C252
  818F856FFD8231E801321CFA4E088D1D6A4F56F2CA81A909D0D565B33F5B2574FC52FCA1107E4E
  94E7237D994DCA0E5C13348B6ED835AD7279D78CE290B38FD42876FCE44471AE6E20E6369C638E
  6E4B49B00B68497F912FA6518016ACE6DCA8E865184CD563E1713D7EADF64E52BBD13CE5CE54F1
  9EC5974E9F59D287F76F03F756AB42FA3CDFACA79792679B7ECA516D1532A1BF1AF2B04002A029
  AC8DC0F34527E917D6A559974DFBF9A5E13E2E1ED526F7AE17BEA04640705CAEB05F06544A17F7
  B44BF54B6B80594D71AEDAAD17079CFE2B6C65744655418B1527D51D4C45E5F321D52468C168FC
  A515979287566DFF26C061FFD7039C232FE1ACD9377C58850C99BDAE145F949F4F504D74E4278B
  3CB2EE53252AF7805F3143F0999C8C0D17CCD2E922375E563EAD698D9AE6D0DABAE5A8340497C2
  1238F9FC9FC05B76A47DA0CCFF8D108D1A188F5DB575E5C08219A04CF78E06AF124FB3FC3B4E78
  2677F3C09F9D892AB294B4EA15241CE2899514EB4D1BCF51D294737089EB4AC56AC7852E498217
  7B804241177353670637376D4D1BE4F13A6107A6A6E5A73679E687F5512801B07F67568F737B3E
  00FF13F7F8DE9C73EB3A2865B07094AF6FC8710BCBF6915BE2E2416B9A866BFC513E29E92898FB
  80F81130E4AB9E5C5D559576BEE4AE5B01BD28748240E7B2D7441E57053F934628A99CAC7F4C72
  F0A343B7937E295BBAB9DAE5CEFDD103DFF935B2454E4AE0AF39776A3C0F40701DFECB27C6DDBA
  4D97972C03109A209C6F98C1E6FD3C81AF5CFCF5223866A5E58514FE8D5DEC95945865FB6F6FBC
  51FDDDDADAB1DBC68F35F756426EB29A6A415AEC11D2EC09BC523713ED44466FBA3FDDEA873A14
  85D7C042E490BEA7512D46705A9C77B52BF575BB1C849C76D0E32033A9F59C62D3646725627CB7
  948C2F72EDA3D5D27E83C2F379B12CBB6D7ED2DCF3BDA29728F99126E56A36CC9D7FCD83F2A4FA
  DBD5C188379CC6A56073F57E75221E5BA328E84EBB6ADCD9D258DE03E5ED83123DB1964511B792
  2730D692F96B2E93273AC148ECF069362F5EABBDD6C577D0DD1D724BDBD804250DB2EB3A2B5F44
  E7DFAC5457D117F3A1B132A68C61A35179B3349A1F412C0322CB415256FE517FCB0C206CD576D0
  181CF1ED3A068444F2A19D9EEB5324CE071472AEE02E225C747913392E43331C5DC96BA985E2E1
  605A3BC09FC92CDBE4A516E1BD248D34FD85023F9D738EE10B2DC23ED8A1A2FA207A1A474B94A0
  B78694D7B9C386302B2BC7029442E574B6258F9BAAD8A099C5002BE366649A771A94A533B4D336
  695DDD599DFB4FA963B04628C52D6DD937BBCED417FDFE925CA54B9CCF44EC78D2CEA9AFABBA6A
  8D0D7479EE60204CF38D1E9B425BD3BD37519D0D64E154CC6CAE7CFC7209F4AF4E66A9DFBD1934
  E82D1209E12C44CBDF4C3E902931C6C983E712DA93F45DE79A58BEF6E742EB63D7D0C187D4037B
  9C1FDE3F204509EDCDCAA5075E3B8B4C5E62C18C2FA01040A4D153C58F0D6AA66335ACF7C455F5
  855AB3DB0A1241287856574DB170DA0C55A9AE190FDBF3049987C8CE26C501D0F3A15E9915EB5A
  9AE4A49860DA936CC61228A21C343DF6B0CCE324FA00C32653DE16F9BBAE85E9C7673159434D14
  2E25928D2EAD8021BFB2DB4F0AE93900577C5937A7A0E292546C66D9D30759EF06120604689FAE
  F808522BEC56BA62621F728E9A4A4D31DB7F7D82DDDFAB127E50E72F95EFA44D40ED9A82A1A3D2
  14AE275930F795AD74375A989D78EF0F3B28138D35A20F516C8546081BA4BCD6B493B49FAB5ADB
  C841C48AC8B22EDB9131BBAD00425D3601F4928F72F60AF6BA2845DFF2C1C46C8C0919481C2F02
  6E71627A0EEA7C1233BFC67B16DEA00AD0524FF2FD04E49266652DDA742E2770504C22430004AE
  F8CD94E6E54D1E8989264B7C22D770D9363899F97A900B8637C42CBE9DA0CAF97D69FF39910919
  155CC68FC81208F9C7E9B7B67BBEF02D65930444E9319D98A3C063EE56B907CC5B2B054965BD22
  074FF61F8F74ED5734C46BE532C9BA883C55AA5FAAF5EE80853D1BF06E260679732E7712619C39
  9DFC4225E71B878CB758C6C3DEB5347C5AD64A22F0C6BF2C692F5EC354FE9EFB940AFEDC511F8B
  1A12BD18C1FF14B354748DFA4553A396DD8457234FB1D6BBF2E58ED6A4BE5356E3402E69531BCE
  0D57E7632D2D3D9A7E7B54499CBAB807514330C566D104C48A4FBFD7F3674EDE64D674DF126856
  1145F8D649CFF1C069414667867EA7B65A012658F1376E7EAB4525EE1788B25C348850809E61E8
  CCDD2FF708C1A61EE0E2D6B5D1B85B2095185668B37836FCAEC18D5444D0C00EB6D75E811D3C50
  9DFEEDBE86B8052D0021B187A93D1EA1FE0147D11D75DB5B63536410DD74040D77F930292D00E0
  8351F7DEB63D98D55F11AE5AEEEB05D00D7E7FDD769ED33F1C61BF087C300BF8D5BCE34B479D62
  8231B9ACEF19EFCF675BB4EC2833458A151C340BA5DAB949917CCD8C455D30F4333A834519785B
  53938865FCE3D7D524C7152E03DE2F84D82F6F90682B0198BF688B2A63213CB432297AE92FCB56
  7D0C3EA22C28C373D3448D402719D0C68C3686CBAE4C45A6958D1E89E61EA8FBD3D1F63366AC59
  9490CC2118148017C72FB239F1540216397DDF36E41DC49BE4F3836B09C674454C1044A02704E6
  FF7FCF78AA85B1003C1B0EB2B5021F8F2640A68E4799E75CF40FFFC212AD560131330489555A48
  828EEDD440BDFF3FCBC860080992A3367E850F9D9D20AF1A0055D4AD13505245725BC3DFD7261A
  B7770CC41C6B908872FF99758DF7EA19CCCB8120AEA32C5E5CEACC05A0C40300C8BBA3EA16ACD7
  3C9331026D850FDE83996CA03F642F5DE54818540014EF65571190394D94FC2973A6C92CF674DE
  2AD9DDFEA8B93F556E59B61AE558E6E86824F23F6A0A72FC79A48CD14FD7BCC76011A39D8CC9AE
  F8E72402DB96DF0DF48885881F508C7C59AF6D06102FAC84718630870516EFC9429A3E95376956
  314E65ABA124F92AE11682F9788E493379F83FADF340783150C51739EE87A866D352B99E6C1F4E
  AD8191B7DBF364260CED3274A261C3AAF908D473C2175D15AA932D88DDE57C2EAD27B4D0F05C9E
  5137A409334D0954180CAB64372166266FAA5A22506D85A4928E240AFFF318EF63B45C26D23237
  6C465AC9FCF64D9DCCF13B6D5103C1F66574CCC968EE0F6CCA773B28D53ED94BB7B42287A6D3EC
  102143F52720CC5396EA524575C1CDB437487288B5587D24BFFF1B82ADD45AFECB4D747A628948
  623E61664F3655BBB1DE782B7ACBF256875DF5FCC20BB7506910D12BE7291EA0648298FD361737
  0458AD089170A005942639F7AE5BE8D1FB6B95662FF074FBCF92776E6F4C7D241D1EFAEEE40DDF
  E8D88DC1EDE3D9E0768B8E0FD38BCD9310F8A74CC0C671B0FCD404739FBC68BB02B1D90BC4D91B
  F5C24E72D98D1D36A0611BA9961B74CCE43411DA5BF2659414D74BCFE8E277EEC4A11F71342A97
  6291C52A21737F224178B619F048F2A44E9F42BD5530846E10C4F05624026E355FE623223DBF42
  90DD504ADC56051A92578CA2E00BEC120E0812E0EEEE934FB9E7FEA6B4925B4F5118F30C5BFF35
  F8A1F069B1FCC24694519FD9E817E01799FE1FB9FFBDD28222663A74E9AA253F573FB3631BAFEC
  D327514A43947F04F31BCB22C98CF9E050732BE8574BCEEBFB9938AA74FC68A3B2ECD6ACCDF22D
  E9F46AC3589AAB1C352538DAA0E1CA320694F79D7E5E6934128DE7EE3E3328D4D494B5E85EE40F
  F2032E44AE58770E78188177FCF23CDD200280A39EDB76E4D7BA6F728CE8784507F7DA164F062C
  349E325C145976D0102E65DA171F95A04A3D550EE3DEAA4A564767ECF3E7D0D5D2BD6D06CFABC4
  1D1BE5A5F1C478DE08343F2D9D6A74BEA3DAC953BF38183EB9BF9B188F88459496BC74A3EF6514
  12307AF69D68A1BD9678C642D11B75A7B5C113EA8036580596FA193F2FE45E52274F20583F6D0E
  7D7C17CA09022D07573E33F52394FF499ED067EDDF122A4AA44B9B4CD53C04304BD53BDB734D78
  5866891CFCCB5CC4ABC2EA2BE6EB432BC0EB22D9EC45BD31EC11244F9C7ADF81BCA29A70EEE439
  4A3AC5C2BCBD2E82A26B06A348542A4C56D778D2DFF2944B5EE2B2CC32762FEEA2E95D18075847
  6E18E6596B9ABB3F36745BD8228EC356BD8DFE89F8180277C50DDA883A59F1D9A21704ED019070
  7E87D30672973F4EED6C744C2E71BA35E887C0EA1503A941EA20902177DB1F5054175A215A9D4B
  FEBEC521B22F9A2924F76ACBE573E216B1C97D5D7ED322DFDFBDA1049A219EE3736B9B763538CE
  0B1BE3E253175A515DB0EB877A547C4929C9EFBF4DBC586BB076ECD7575930E4561B10A56E0F92
  165E415F78ACAF1A99AF4A1A8625CF03B6FE564CEAA6CAF2FB247541CABA278DC1966B6DA19A1E
  915024184832E33129DAA8F37C57EA8FA66B1D7C1E03945627F9807513EAA0F87CD55676460692
  E76A71885A1A37BFC0ABFDEDFF655DED8A9FC81F57912EA87ED5FB28E6FBF283FB6832C10704FB
  B1B46D7E1BEC70B5DA8F5CDB58D19E8FAAB5702A3A726EB077895D36CB6338378A3412922016E6
  5C45D77C3D7439705970C5772DEE02821F1BD236AFDB9982C1986DF161665D7A927412507700FA
  B2D873E77BF818713A257FC7FC29DD7D4987249D535E3582812CCEF3CE72B60D23F33436D1DA42
  BA60496719774783F395C42C1B44C77F6A66620F1F92367B56777A57BAC024874680CD1049EE3C
  458B24210627C745559087033EDF0CFE14485FB79D541888D97CBF9AE6BBEF9CE0DC02BBBC83B4
  C2BC26313CCE46371C60BFC33758C6BD3343C0984E58D4CE5133511898D7860DAEF04DABC44731
  7AE3A18BC898833130CF72EDD91A4E42D85F4B897D0F9E9DB4477E73063189161916DE6F34FF73
  11FA695AFA2F897334FD81DFFC505BEA5C13A3AC792569C6935611E95B74D41D9DE36140620979
  205FA7859E1585B1124DFE4B04D880615CC2198A67D47B64851A642F40CC16A8E8AE202EEC55E1
  008E3879241A61E6673C9EDF77EFB2A43F7E85E196BEA0043898FED01FBAAA47894EE7392B1DB5
  2B9433D88980461A7F6BEABE6B752600B758F0F2529EA26D57BF2894910AFC67FC6D190F359058
  517766C9403B404D50865CF632F371AA67319B6262F09A92A65E86AEDEDAC504BA901B8A19FA14
  F7C6659B209845E9665474981EF9513115B93DA16991B5E31A70DF01DB06D47BF089EB184CE039
  3A1C2C08A2B05625CE02513B4C82D026C903DCCB3135FE88A6A4CECFD2D5808CCC99BFFC43DF9C
  FA2EFE9875C3491320D62FA3A54558F298E3854DC3FC8D60EB09C534E6A14102F4953AF79A57E8
  7748A2E01C683B8ECCFE4AA681D943C3758FE70625227DE214CCACD35F15B4782100BA3C0AED4D
  523681438AE195D5B58D4F61B9807EFB12B162FBDEE63C22CE05D99E4E289EF01463DCBD748D9C
  6CA0270DB111495B0E7BA377CB34163DA6E3B7F5FE89FC9FED9960F3EB9FC42F1CD39BFAC8A36B
  F0ED0CB3B6D8503E78432EBF42C0EC6D608241DDAB2F32540AB22CEFDDBBB10077154846AD5253
  835558E1A30C426F9E7A488B88C1699ADDE69F0821342C60042D0CD505799BF1A4D86D94DC49A3
  046236CDF462CA6367220E041FF8EFE18CA65B989E865FD237A7E120EEE95915295F4FB8D0508F
  A98A2B7737D6088047521E6B740311BAA5FF402754CB1193C329B7A74AF5ABD596E5AB66C242C9
  F6F89DA12065DB01AFAE32A7CC6156B8DFF94B72C8A5F415C738963B112DF996165F52CC48C2AE
  FC903178931044B9095A09A9691668AACA9118D67E122B70BC19A511759544CE3A9BFCB73A6504
  D77E24A350FE52FB0107AEE12F59AD32C120B1205B69D0165E7BF98C9F17A04DD46649EF7E363C
  7F52F573A1B99733E5303BED19FA3CF306879C7498B18ED8EE01E8E87715A44DCEC5D259E95767
  0A469D3C4E5EC2043F6EE288ACE1E3B39084529455E1F8389186F7662F96E3E1B053073CF04D2F
  F322CFDB6263588B3802327318A8DCB9A61C9D1B1DD2F8070F214DFB2198650D14A77C14FC1AA4
  06EC487149B86B997DAF22E30CAE968971664A10A0CC346961FA49062E617ED3DD0DF737B41437
  B1DC2B0670890F9ED97E406B46A94B05A538E8240572BCCEFDE21F41A66520CE5ECDD3C0CCDB3F
  19332FD94654A9EB7D7D5175013094AC79B92D1FB0BA86F209A3283DDA9DB25B4F5A0A03E72FFE
  A45F914757E8C50B8F0F8176FA8CF44C271A584F7BE700A0D36572FAE05EF6FF23C8BB33EF6BA3
  3186583E4F55D1256072B53B91047AF7868B31CB6150F5456FD4FFB8B4B2EC3EE1148E8DB34353
  B3BFA4F84B8C3001E575372BA3F7BDF1BB6C4B82C2FAD7575E12E287EB971ED3D91404221137A2
  53026C8989FC472143DDDE9E2D49A413F1D6A409179CDC3CBF544A093FA05985E0BE71CD6018D4
  2127D0AEB4388FA7ABC8558172396885A8A42F0A0C768A4B0EC2B4D1862AFC4FF363F3668A33BB
  6F788A5D9E9CEA2BFADD7A4C611BA217D15A1F6BEB135F8F7C9FB011642B6240181494A6C192A5
  756766F62D7331C142C551AB0E64ED8CBC57EF3C295DDF2DDBD265816761F199ABA1D2E5349684
  94E676D10461C34136FB87B9FDC817DB731419278301DF86C91D21662BFB36615D4F85DF3793E2
  9BB4A86F1AEDC061B1593F59DF133E4C97B744F6AA19EE0E23ED826D0AAB5EC479F2F131DDAE26
  0F4482E8215F2A06C33152F1E26EB4F7EFE862846A37A084D6090216A1A9E111D416629AA37375
  C4924FD96E87673C5B41F627F5C1BF682E6C411725CF5414D7ED4328B94EB8EAD9EA991D0F120E
  872CD1397D36D5C2DB03164F2E5D414519FDB61DDB3E27D5BC7017CABAC9EB67BCB6A5FC451C13
  E7A3B944C1795ADE61894809B085AB4D8C046486714D086043C8E504B57476C5AFFDE8473CB6F2
  2DE06BF6FEFD368D6F8D0E00292B825EEE18F1FD3DB34DA347F1B13ABF19F22F10313E6D646809
  90E4B8D166499128BA14D2F2200C86045C731B8ECFD52B2400C2CE1BDF0958C4FCE83EAC4B757D
  CDE1F5CF4455FCB27259E3AA102E4CA642122D5DB237BE915E606850D47CD77AB07BE7B676DC86
  B5E0CE1FFFB177E2A84023F7845B5B570227433638DA173C086730C2C647096473C22DE7A47F1C
  C33E00434946AD9847A55A6D54295BA6B2F80E80A055A02A8E80D28685FFA0B766430531AE79D5
  BCA0C699624502B43A3EA10D8E3FE63AFFD751828FEE69C0769BD331FF2F4367FC4F8AEB2C06B8
  7CA3D251DBC6E81F7159862845712248FB86A0F73B767EA8784EEDFB538E41334A8F4280B64E34
  9C2260B1917657651DEE10B78C60E941AC56992BD61B84200E942F341C37C7D73D9F2AFEE845A1
  A8ECADF6BF3DD77D17517AA99FD9A0C87E735F998C2B05716746159EFB439B619C7AAB02C607E2
  911A203FA36C15B3ECECC6C72037D49F15E550FDBA5DE6A7BAA71AF83459ED20A331037F0E25D7
  177CD16B4CB572C2257700F150F03FE9EB44E9C840EA81BC1D9B9E6FACF6D05C01C1709E5D78F2
  BFBEBBCE08C5E32067CDC71FD50042FF254BF62E5E3923B66ACBAC43DEB6541EF98E1CD9B122DF
  C371CCB970C345006847880DC6814CCEC5B5955B63786B4EA225CA81C5A19487C518C8FD98568F
  13B79EDEB465CC2B0FFBF5379C4A2C0FCFB018995107224DD43754E55F7017E973F4DDFC2A14D0
  97C8C5DBD92A5D161C25B6488D53E52C4EDAD89203B0A2B5048D55EE9E577FA75E46E7648B5430
  09523BE6D66603F7A2E317FA7AC44E45342A977E76D5384B6763FE2186383F10711F36E5AAB801
  11B02699085C3222F6622C201B1C1F975721CEE86419E9DF365F1603641DF7A5905BEA0C54D3A1
  8BDCE0C892C8CEAAD1F6AE0E727B792AAEDB30390CD4C17D072B82859C0B6E6574E8F2B4F4AE03
  DCFD278B90DED764C0E6F262CCFAD7257C7D2E2733D0E9BEC3C6DF0BF779B516E41506BC084928
  3724C876682C1C6F36340AE8072AFDB1F710C2810E808C8E789DC3962174978E020DBC1A16F129
  AE110E7C701601D120702B0AEA98FE3B9EA28CD175B9E445920BAF32BCBB13652BB33B62147859
  765CD15B51A63FEE61FF92F458AC28849BAB775FD42123658F31F6DC0F896F2E37CB0BD310B098
  E7B1A6F473D0624E3D8EB7BB91E00BD164A088EAC207F0ADE1D9150D546E00F3CD038D792F42D1
  9625A14D30E8B972B263433BCED195E8FE4F200C672A1F167F969B2E067E32B7D69765823620D3
  E68894BD03C3D5E614FAE9B173C21A946453428B22C009E0BD4AD69D94BCE76303775FAF74C151
  A6D0C5A3F8703CD5BDFCA2A469BF6A42A8FA8678390B9BD516C76C2D6F358C0A28BEBF971F4C4D
  1D81CD15D913C4E3C1F934847081BB1897CA19DAF87B9D5EC72A7C26B65563514DC162CC129088
  0CF4FC0C115CF2768075CA07B04340F228E862A40F35AAD4484B109FEE50E26655A8C699205D70
  C2BE4D2368E3F7F927F64DA140F979B299B50DB1B9224E6750A7D1AA909A4921ACBE1F47C8B6B7
  0CD46EC98C9BD56C35D3FB61AE9BCD3CCC39141C92786B8C7CA61E06B88B9A1742EF6D5CD417F4
  282F220212D30EF97DCCB70CB1153E8912131C9E2E89B490BA9967CEDA089AA7D7E2925C4005AD
  5624A294E63F54235F579488A705D0D13BCD668263122CC591D2417CEE1B1C220BF4BE45722F3C
  4891858DCDCD88B67AA9E69D045F25841C0D8A4A8DE5078A22088425A6027A9FD1063F2243600B
  AAB3479833220D38F365C95EAD2B8E37E6784EA29A4D54C4445C52F3939B1A61F05FC9E5DA8FC0
  84B9B5FF7AC76B07EBDFA6EAD5E70210CF795768EA6408DF4E7EEFA5FBEEB3FFF0357F61EA6061
  06619C14EC6E4EA347AC6F96F3C852459965CD29328C3FC164F570A646D514A1FBD9C2E08A4C41
  A0539C8D5C0849A1C6173E4DC9B2B039F7B5AAFB46A98A7A9431D70388D06AB90B58BBAEC86E75
  17F25C7674A633324E1CDBBA4827A775BD6CA1A9A8AC24A51E6FD163CC0B47A00AD11EB05B3AF4
  F9F971F04F4865EABFF9EF599DB3982C62FB91915916D87E40458552EDFD00A10FDC75F86938AD
  E38ECEB82CBF2944ABA9E99BEB9856D58BEC9F1E0F52C64BC2B7B19D9B2999D16CAE02E5D12FBA
  62B9ABDCF95C664FB4550E890AF732E7EF278ADB9A945EAB167FDEE52993986949551159B3FBDC
  E8763E8795989CF46DCE7D53F9CDC713B79DD75F38D26813A6B31FE0E48777401F6FD86DA5DC18
  3F9625DD30EC75282B831CC151F4A90426BDC43EF2CEA37468363519CBC10EEDE7453F7FACA12C
  0F927B78922A81C3E78212D89AEA5006C789425A01A0F382EB35E61A15846A7C934AA1F164D44D
  E80418740CCA9364A9CB96CD01BFC91C4BB35F0F854235E98E8DFEAE7DDD7ABCD18AB84E78C00D
  D39A4F53B52B14E570D9E5377328F43BDD82936E5992A745123B42FFEBBBCF196744F193F57A40
  38B5AF3D5B1769C10EB947B4C2D6FAC578ABE2C4E682F63971EF5346C62DEFE184DFFC039C233D
  AA977CE3224DC9E989E49FFCCC73BADAE85B2A9BFDA4F848009237ABC481993FD7C358AAEB62E5
  2685C4597C9BDDC55C6CEEA1B44A2BC0A27061D08B4EFD8B97664CF2FB251B94D4900F135A952C
  46F5FA13A30F6AA5C1150A186678B610526C764054DDCB5FFAAB0B31A92B8BE1AC60F5829A927F
  006F619D10B59F59F137FA60D01ED6EE71E6544EA7CF8C8F81075767F7F88D7A2402EA33F8DF20
  9A8345776CDFAD3315FAFCF94A9776BB34697262D3856B8F72E238E8331F2CD4EBFA2CD0C2F633
  D67CFE012E32F7E1F199983EDAF394189E72D6398F48B8988668FBE0B6B1F307A9D127AB640767
  69F7856F28B8F979093B752A753AFB5E5371C66192D884FFF00A97B30FED991A46BB7F982B7858
  68BFCCE7593D432861C55AA6C48A2EDA8FAF4F9D23FEB5FD1F477AE532237A372D425664970BD6
  67080775EB9A3D080B10593CBC271FA9D8C95F9A7C89DAA54F7815F7C7126F640CD773E702037B
  2FCFCFF8BE9C6AEBBEF95A50790D25D1B289F25B43B959E9C2F94F2BB66382F299FF5E88AC003F
  2A04095AE808A6FC812C3F488B5783DACB58ABC15F81B8420C37B7797FF551B10DAC03FC1950B1
  734F753A722E9EBAAE5FC6140D800D1E3655D89B89726BB8100C00E57FB85D229E64EEF50CE010
  1699E721B94CFB42F3CCDDFE876B10B49A7A38FE69F8552D631DE6CFA9F0CCE3144AED6AD00214
  36ECD9044A3DF2B9944BE491C3F3282C38AD3839BEEC9485B30582C9D8C20986A9D2DEBA760B14
  6D541841D42FA9F46C329C5679C31BB32F89B7E4FB817A02B1CDC7ECEEEB84818B60540DBCCC0F
  3144C673320E3DDBE6E31F1677479B75C18968B766C924461482B35754DDDB9E43C81D226C91DD
  E21768A54CF64FE29980317C6864FADA228D2A972152ED1412F9498CE60B7C3B50B9890AED723C
  795934409C5EB2C727A8872C6A0DA820CCBB506CF0D78AFAD64C06891A8B570732AF12F60D456E
  17871E5E3ECDD6B3CBD8F86234C38E4FD00CD39457419A169E59EF4EE625DD40748BAE47CDC39A
  9BAAF4B65FC6C5511D9061DA352E981880F6340D6B6A20B839754663D26F6F53EFCD6EA6EC963E
  581E42331B236409F2F98C43445BA0D7D0EAA52150636AF735BFB6C475C904FD4754034ED58E1B
  B4DFAC824B3669D3AC473BD833B3CE889323987BF1EB3CA1A0872ED5388460F360FE9D1400FC8F
  10833946F68832978B0F75CB14E9FF75E7C5B9464512BFD5D5C4BDDD7530FAE0B397948FD5721A
  0D7B38FD5B67CAE166EA2DDCDFA1ABF4F8E1195913D222AC3A7CD5BA9C07304FC477FD91FD35CB
  C784826AFED5D80AB7C968036E868930508F4F1C6D7488094B78990BA4B79384C4E55E09FBD28E
  CAD7764DF404A1832B243EFF8B0F344F46A3D772E6F0507A50CF120C74DD6674DE4A72531A33E6
  28A5B1AC079AE7A41D62C723D90B7A3E999486CDCE2B64BCAF7443BCC37A9445C1B4681BD26DDB
  C451658A1981B327DDF00E3C9AC34735605595466472C34636749C436773BAA155E51ACE57A294
  62812D2F6E396F57E8A6CF5A739308FD478C69528D86B3CC1442761531D6BB1FF48A513DAA1BEB
  617A418AF696988E29538D9EF0DD8E16588D9157E619AE1226F4C2F37146DC6A49685C492578F3
  EED7B8DEE2FCE03460ADDB91C37F7A29E2D3276198740B73C93161A75FE0D83F02ECBF1B5AED93
  086DA0545EF10000706305D2911EE39ADACECBE06C1B5FE941EA8BCC6C2B6E9485674E7DBCEF3A
  65E8FB59E25C291AEC3158AE9D7C2FA661224B2CFB87970A84538F0370ED6DE4AC43BE23F914A4
  D67FC71AD27ADD384CE9099C65AD89980735B046C9F37CDB29BA5BFC3530CB1658DFEA94D70360
  F63781D87F4501875647342791EA609FD1CAC8A338BC25D296A80F4BE0A24A847ABE708BD8B7ED
  150C3E071BF0F8469A994072DCFC16BBA90FB24A71CE8E7F76ECE95DAA5BF3E78D0AFC22435753
  B94EA390CD95C19BE6C739FCB37F7051A879915507F6F4CA85CB9C5C9B1DE6EDC1A59D0463EC09
  EBDAAC2E5969658111004711C2C3769609BE35F8461BA30BD7E68321505A14B30E0BE54B29DDA6
  4ACD1D186E57F16A15A1211EAD0CC317B8B7705060E18140358F950B050A232E2E24FDDF74F90D
  F1D288F3171A38351A141DF305B3FD32F5A47C25337C252140D3D529700A391F5176134F6E4752
  7452F76E16B9D5025A0D9C4BC0A8873A9D8BA4AA0E323E1E635EE715E09E3782A64B1B578C4FB0
  489D594558A9DFDEC479A9898B3D2002EF6A3F0AACEFB4F4CD8261172C27D15D3C8A6D8BBF8550
  B5A72672A513F340492536A1C57EBA1E56138A6EB1FC138BAA1DEE14D8334BA2D8368E1B1BAEDD
  F4413490723E24933659A2C2AA76918B347ADCEA2DA773F4A90399B0D12E6D9697CCA9743D2B9B
  B2E347841AF2FFD3B2ECB2F52C6E84E249A98164940093C6B0F7F3EDC12FDB0E28458321EA539E
  D53AC5A8A6581D13899666E387F45611E6DF6FB6A912DF34837CD02A7CBD449DB6D76AE8E0B9D6
  674A78ED831CC52B501783FF61B3D6012C7FD091F78BE568A2D9CE4F30FC6B5762295DCBDA1F53
  54569F381386187186EEFA58E583D9476A4C2CEDC6B952315BC3AAA66AC4A0FF34DC46268C5B47
  7F98F170B5CA4CE9188FB5A7DE9B6C706F0E13693EDD06B359EF8B71C9CD93A55DFD9E9FFBDE43
  A8992E61E8037865318C26858FD577096730334BF64D160FBAB4B4A5D0E126E1F74F866D5B84DB
  3ED0283CC471ED7420D5C7029417256C39A3DAA6282A87C42EAF85EDED92D9D2C68B7508F9B401
  6C1C52576F20AEBF17D4FAC5D2C26C30E4F0B0DCF82914A294B01A711A06702946A90876AFD511
  E4DA8B1E2DBD6277F42BC77D6E51DCF5F682214D77BDDA36632D7024E05D01A80336C3BBA5D1EE
  6668CE16AC8BC11AC5075376590EC99818AA74958B818247ED7313B3D07D0D5D8C303483F0F0B7
  5B46246F62AEEC7DC00DCE07F5C4659B18BF0D157736575022524B7188F8BF5B5F4615E507C9C6
  8605571DF81A00715BF3D4F9AB6BC5CCFCC10496FD7EAE80D65FC97A9A5A1B82D85BBDEECA1E94
  0ED39A49C5CD3263FF051456CC785663437D56DF6FB1539C46C351FC0FED4F6C3B53E1D6010F91
  2B925DF6E2A25A7FDFEB8BB6F7FC2839467EB15668B2195DE2083B17CFB9A6B1822833DB7BE3A2
  DB6A97DEB48813C13D4BB2D257459FA71A67D1CA5672F01211EF9ABB0C16F378418F20C77F5F76
  2FA56B0F84DA79EBDF728CDB72277CFB44938799CF307E6ADFA8AA564530716D5CA8677C8710EC
  846C6E87E63BC962D59117B661D1EB2B16B8E13484DC1C7E6DF23B21C6AC4C69BF61C41ACF593F
  D36A9119969F5075A5D428BDB46620CB9B3BD16ED48E3E78C8A900FCD978DF20D16E2F895B149A
  53FE7AE1A14B0901BA3A9C2FEA002FAE3DD25BA0C1C1918FCF1C85751C4778B8D4FF71FD4275ED
  9C3E711FA12D503B0C05469AE2F0F82E9D6F7E1CF0AD5BE1BA3985CB588524AE771AD942A6C2BD
  8BBF08E9C77EA4BDD54820BD8A0FCB35A5C93C0E1A3BB507E003DB5941B7950940BBA323E45FDB
  322585D4792B5BFA97BEEC138D4CA56FA3022D3AD99E30F80557D9B531747E9F4429BA9809CB30
  D20005BC24E3A3488178526464E8A950C7D04C787225FB6DF51C3A38229C33FE52848F4DDD9665
  7B61FF9E0690EA6BB963F879D170F2EFD592D12731890BAC9AD2FEA407B161DF19EB30D6B833C2
  7ACBCE55FA0556E2F991564C15ACAE23647C57BF1885C1FD0A80C1A9EF044AF1F6C6C20B3BB5C3
  0B94C38F718696C127F3D0BBFEB64F6D2CDD82620640D7E1A7BC954D97D19B1BAD7B6EA8965E77
  EF54B80632B9CD9F8BB6028DAEE40D5965299407A01E09CCA11CC830B66135F80D5CFE6BB4CB3A
  6C8FDC309EAA940B1401C268C635AF7167B9CCCF3E7BEBA89F73B721000F8B0EC19B0F572A5B6B
  262C8FD862DE10BF92854FE705A5C5911AD6D01E83B9F15A0B7F411FA37DFD64608D0611FA75FA
  355737F0A5F1A2736D071AFBA31A2AC2F41F8748A9AC1D61AA643FF10DF9C7F0310B861F74B504
  C53739BF454C0BFAB07552B85879DBFE4CD367B3E96ADE0C3604A4AC44BA440055D572F06E86E4
  375E88A47DCE391EF8DE0C730D340AAA2BB2A486517D7A30FEF8E49B70094284FB20079BE3C8D5
  049F0B631B76D2DF986520063E0BC6AC94DBBCDEF79ACDFB022CB575C57AF8F4ACA52FD00F08A2
  BEBDDD5C7CE5F0121F2861B95C416F82BE06778D14275D4A486665A639DE1BE871DC7E2F8F0DFA
  340DEBE03F9C33622B0BE67DCD88760CF15732527B29120BAFF09DAA09DA45E32DE6B8A2339D35
  0C94DAA47D0C749C250CE7CB211BB390C521404E68F8FFF10D8CC2EC293A1322A3A6F3E3818D0B
  248A90D38612061328DE74A3D22D0BE467974BB7D3FB9A1937AC08A0955DE27876236AB3FB780C
  CCCBB0419C81982DE65ADCEEEF7230CD442C4C4A9C093AAE35A02797FD96AC49C8694FC72D0C88
  1420112C26FDEBEE7A305AC36D0658F01E1D8E685479AA8924F3FE5088642C02658CE696894DE6
  004CF81CF629C9DBDD43EA44DBC758935838CE09BB1F91250DE21F3B1AD55F3BDC8E6C95271DCB
  7811EFFEBE9CF3382176869B3A618E3B7BBAA72158B6AC5749118DDCF030AF00E74624F17D422A
  969CEFBF127BCA9A3198C2BCA0C8CCA866A809172E90E464733C9A270B1C3D2DFCA7FEC58CD753
  9D077BD744B94C9554453BA9D1BF9E6AAA7005846FD4B55CF15D60C06C3F2445758F28BD335E23
  5556B5C01A38A730607C3517698B63AF6924074CE49F290DF73CF429E6DF2FAE37A2CBC2624F9A
  6D0927C9D450BDB81C352FBE1D31871E7DDDBA1358532FE253371C8D2D8BF8C4CA863676D15E57
  C5321368FE4E7042937EC55138C4A8C27A6EA262CD0D91C0D2C685C0A066C21EC0209E391A5E2D
  49E2C48FC53EE4BBECFF04A7F8766681837A85238EF4B5A9692F28830CC59D70B5FDA03F42E0AC
  58A955D18D3596333C816F59D9E145095A83617021B47057885086A0348B573766CE83A8275C23
  6D0FD66F945C3648A154C23AFBAAA66FADAF1F8FE11921E4917558D001F26F984EFA75A37FCDFF
  CFE38BC3A587D49FDD012653EC979E65B8A52E461772A6F0C50CD9E1948FBFEEB9F3B217B4FF7C
  E5F2C86F011B8CFFA027499E5E2DA96D2C1C83E517B5B6ED1925259E97FCDBCCF1D84D0A63B4F8
  06B3EEBECBF6B25C52F78B81AD948142669990E80047ADDA3CB0B9125F1FC99F141581E0F98FFE
  91006E83866ACEE9BD48C5D79D8476BFE670EA9A60B4713D8FEA9A1A75DBBB3C36C69E2E9EE598
  33458FB987DE5E00733C954D610DA3C504A678DBF248E061FD83DE507D44BAD90D8A4DD5D9D92D
  B0C60AE2A706F7EF6FA4D17E1EE1F47AD5A399D5D53DBFBC651544EED9E39692749EC9D096B7C5
  E461B8AAF039F663B092B4D2E7A36C12A39A419CA6F3EF7F4D1D2AA1387B701030AE94ED8288C3
  BBA3D4514886BEC46BD8A25292A919E9893E7487512DCDF3B8269F6BACB5BB38CCF0801CEA8944
  F38209BBEFE1789B30069280119C67CC9BE0F77B19340466D2A2BA2C4B75F38A4F8AAA832F3063
  D93C514B7E1D22A6D63DA4CD7AEC46DCCF98E787BE93240CBF28E56EB757B3A8AB68486EC15134
  08680E0C765DD06C6339E87F8633653A7581C52FE8D0798664FEE6191F8CB5CBC9258E30FAB211
  6A6373890BB95884DE4BAECD590203EC4D8428007193C1113070C39DACE584F19363CBBF4DB4EC
  D870BA78008B2BA2E5D0124D6EE28AFCAE0097A8C7836DF5F6B2ACE881905C5765C5D7C68FED00
  D71A5C713335947713FDD49E117866F02C1A4588FC1518EF6E1CD9406CFAD6B5A9DCC50514F5BA
  F1B5259C93A8D917EA76E357DEF2B8D27DE40886959220898D59769523A74A73955842C0B44634
  7C9A1F335454A23C72F092DA2AC404CDADA9928530393880988810EEF73F80080011F1E6C3A27E
  E2804DA5CB3E1DD0CEA4D5B484F631F63474BD9EFB277C12A1F92A071A52C5E986E87EE69A567B
  44E6E1288E03D9023BA7A2222168D5FAB8D47211F7C52EE10C5DEABAC98FD192B609073F4225FB
  D035AEFDC4C9C6A042BD0A6D13AF241117E9F20E8E7CB2C068528D21D0F89E342B892A4A72FB18
  195D716AD02571E213373C608E13038D3FB474C0630999338D65C637FECCC5F1AF4ED5F9190894
  585989C690A83C63A0EE07ABCF2215055ED665D5423111218FB924C0BCCAE7BE3D634C9510D118
  E87B8AB3B7D92B8044FF15B7A0C8E1DD8A950D94958CD2082E8101ABA7447B038CF39D3099A952
  7E76B3CD1A5736F76B44FB16DE786063CA53D7F72C17326DA5B257D73B6DB82ED224FBF8CD8AA7
  42B2EA5126072AB706ED6F008DD7B59A274412BCF6DA28F9A3909FBFDAECE3F8BC302A94A6E376
  BDFF98E2B9E5C476C01FCE90A4E92176EC88FDE2A09180E0E1A21F597412480BF19F4D02CFC87D
  95343BDB16F1DA15BADFAE941A331CDADF42D591F0CB59F117DB2A1BB22D7C299936CB6DF37C47
  B37D4570C512142801E810BF82978CCFBA35761C64FB236D7CBA3755ABDB2FF5F94CFD74FF2C58
  E3B9EB02CBDC8EB3D1CF25D1460C3D8AC1FAB52410FBBBC323D2C1A99B54906E7ADCD33749F347
  51B9CACC97269AD7A879C646489A1794657BA4127F94CF8E266289979CDE7A3227742F1F4967F2
  5A49EBAB5E0B3FF4D78D558DC86B446553AFFF75B75590157EF4E4B670D4D5508ED790E39884B8
  9A0881CAF324D84772B53AE4080AC52DEE29C8506FE6F3AFDC9ADC7D1775DC59C83D09D9AEDD9F
  BC849545D80B11FD15A4FDF2ACBC494EE00259AC37FE497C6F35A4EF51B25C67C5212AE50430ED
  8D6BB73FC89E34F2E760296047AFAB9BFE89BD2FAB47E7639F04DEBB92208578E6BA025F180411
  1AE7985966A5D2AA7084640FD7C7F96578321D74E9B508903E6D5D3C16CD3FC9788FF487B31632
  5FE044A262CB14D4B97250A935124F8024D1340F58E6FD6D7B0411E3AD19E62522906BBDC9428F
  E31F00E1A0CD96DBE93F1EE73119AFE7C71F059A90D9DDBAFE00A4173E1FCF74BA97FAE28EC8E2
  45B972AF106D1FC0ED3574D1C713E0E955C4917745DE163E12B345B00A832F7F7B70CFCEB76F1A
  88C0CF050EC5D2C9331BA0D84B9BB9D0ACE85F021553DDB0EF3485B056421587241844DD64623D
  30C7EA91B5685E61D6D713D0867D8FF904E254D89B3A6F6E44239E8AFB210C2A5D741E0976BAC6
  5F07CFF611153E2DD8370D4E924459F571CC9D8B9C4BA56C0BF6BC1F6D20AA042CDB0EDD617148
  22A7A57F3B7030A9D055A8B6D5CEC8E83F471D692278EAA138FC371AD98D772D210B0F874799CC
  9D7F29C2349897B7C77353D86CE4D17F970531A57FDB7E7642702D853AB8DA5F580690262AC019
  BC2672A5238FE43BD2FEFF2D2338D71028EA1DA10A987E610F0C527D6C5E7D0960AAF5D8A77FE9
  88B1C30C6AE41A073DE7DE2053B99031214A3C69E66301B2B2C12770C070F80DC986F255D3C766
  7C4AC0C85FF653193CE6369C8AA8143B99AF8C21F58E08A77CB575369E455EB094F4D180C645C2
  0368477129CAE48C36F4396E82E18903313AD0F39E666479E88C7CA4F99089120135DBCCE047F1
  97FEA92C118A0C3F936E4D12CF469FF2C1546C6559ECDE6BC9ED971CE2ACEEE6B4541B97DB48C1
  491689E0CD883F221B58F2E3C13336176A1D2FD31524E4E56D5DE01527EA3BF596A9EC4163DC9E
  E300D6D8FB2A806A2568FCF190903D5FF08442C191980ABCE30178BBB7A0D51DC2F39850D2CE51
  8F5DAC1055CD93EB1E67AB262460646A235A14B6A2E2DC1FDF9079877D90F1997A01D7ECE1E0AC
  3C69979C7A92D318F6B93051CB55F1992A0A737A3520C553AEABADC17FF5603F23712E31985E40
  167EB338F9F96444B908723C5D906B67556B0DC088E808A239757304673DB8634E5B049A25BA86
  2491EB65EB2FD1AC1793BC94E806B22F06031902BB37F75B16E12FC28593E171F45E8B5C076370
  EB2522791038C864354C495FA67640FAE6296C953A004B68BAFDAD61F9C095768E4496B3120EB7
  718DCFECD3B6D6D506F32561E435FF2AD83FDCBB6CDEA0669F0345F651712FE000D80952151CA8
  CBE574B5828FA7D2599A82BD6B458B4F462A6C09F1D7F335AC4D8919DFC8D2BE73284691A78F83
  605E0E1818030DC666D458E168F389F9DC51A71F232C4BB3F1CEDAC17E9A751D2A496A49BE94A9
  D806656CFD620842FB76BDEE39576136D7D3B2DD8B1D2FF9A6A288EDB4128C71FF0A8BE2D140E7
  B2DE893BD3F1878631401D13156D6992FA8DF287978A8AF5052A33E7FC68EB9D2487D47B0AA43E
  B25625953FED6F4AA641604367E30E94BB66CC4EB3EA2497DFE7CC0874CB031A0635AAB2ACB504
  E70FD9D9C1F1D634D041425688DC6D4669E9ACC514A08BEC99A7F5928E98943CEC9968A09BF757
  38AB42F50308407B95DE4AD69EC9EC52D1E9C589F8B52B52091AE3872812CD55F633DF67209A25
  9FFAB05696B34096EE79AEF64B59B589E2BB49E2908FBA309167DB66F7F5D47C3873E7BD213B1B
  48E966145D40DFC0541FE4F3C382A8E15AE837DD4C7B92C53E7285DB1FE32F605B89AB71DAD229
  D4921534DAB151E4AF32840F33B9C7F3866ECCB6B53D232934CFD94C8C59BA87D62BDA859472D2
  B3CF283E94783B1D3BBD1B35AA9C10974011BA857A8772462F1B2AE8130E1263BFCE41489F5532
  3CF207FC6F8B299AF55E6762CA918374FECCA6B5B55F2732FD908D25AAC3E703A05C0D6A70289E
  ED5329628E968989AB3FE634F471EDECAC8F7056685B61DCEC44772089482AFA3CF96204E0440A
  04E570C105F1A79F592AC40F5559FA0D29178F424C0A051B92E4684B6E90DE462083F33A7A08B4
  63E12BFE98B2DC6021FA61140EB257FBD66F085AAAD4C6FB0C089B1FEF91FA820B7A2DCDA6147F
  AA85C6279992741ECAA61EB6913F437CD0E9D94B54319C12BA6EB71D8791D04D40DD386558FF9E
  DE3883C324528EF3F428D01A175B7DED3A48D184420DB29E352D025FEF804E16396F186FB68775
  5F6C9277A0555B1D4FABAB02A6D40AF88BB5C9D82C32E577CAD2054FDF64ADAC782FBD31593A6A
  65DA02FBD1ABD742C73B7634FE90DCC689489780A297B29BB3C175B3448D331B73F307751CEF96
  BB6C0C48403B1A0C7977AD7839111486EFC50AE2FA28666A0AD657F686018464001811DF596F8C
  E4ADB26B2F717A2C520AA033A184048ABD8C9DB5D0D518B00AEFEC2E6E0507FCAC2D5D09AD941C
  8B04D61233C49770640BEF7CE0B1E1424F191680A0FC4E93B5CE99A406E262D325E952D3F96EE5
  A67E22C686170726A86B6C5C72F8A8511AA6F92BD57C9A7524CE47DB120AE506E577106DACE83C
  52595127133D310397646E3E75A3B9D3B2F49C2E7DB6B0B0BE7F0392B897BDCA28461A272ED2AF
  E554A375CDB58649C07E6FB9ED7EE571FA41B8B0A7A6EE02667449ED8C079B688438BB0FAF2169
  40AA668C7771D84D4FABE67A893048C3EED90182CC236CEB3A2EF960A92EFC282964EFD400EDD4
  DE7B86DF8D18E8100DA9409CE31FE6B7360D9238DAD7590FBDE2E6686CAA620E5B578596E810E6
  AE10CA734AEE65FACEC38270F72A484C6386F37BC9122D036B531682B16CCE84C2038A58324826
  D5FE912EF4A17B59075C8FCB2C949902CBC3D948B1F8EF3EA31F6CE0E4352F3D643DF65116979F
  FB9C6BC403CF123AFD13364947D9C1B95ECA218B17F8C515108B9527E4390BCE3A9AC2C2100707
  6E97A45317B5B56FB1C582985C853A4C0C88FE31BC32E497DE73C57FBEFBE91E549C3BA19486B1
  60B5A5C3E05300E553E8036C4D831F4A65AE9D489BE07EE4BFDCB3543015C173A416B1696093E2
  DCAF9410F4A2DA057162B0193D3C03F600106F767E245191CAFBDBDA048CFE83C441E3DD223EBA
  0863BCAB6A9BB64365CEF19CD8EB1F328B17E2A3536407DB189CB5D4C8FFAB9CBAC077F4041EB9
  A73AECFE166891570C0747E94E4EBFF4914F1B986364817231471AEA4D2136FE16A83BD7CAE91B
  721499F40F7D7AA61FF7864FDC514CE91EC8608A135D8DAB5B0FC96F72362994E5E20E328EBA8E
  58F0DB8835FCD34C1757B99A98202AF46DE08761C367B2C8FFAD3063CE2F1419DF8E01CE2AA8CC
  C7148BA74AFC479746419CAF20E4E195AB8BA6950C24DF0BA732192FD61B2CFB8A65BB9B83A9FE
  9CAC67FF11B57AEB8AA1CF29F05D3A8D5EECD156D6423ADCBE34C2BE9E6E7D6B5F7551763C5DBF
  AFBD02021310B5E3699436F86F449A1B8A9C9E89C39F541FEAA3EF045E2E5088388618DFCF52A5
  7921F88D6C2D2DC2C50274B46EA6900D295720CCA3B23DC55E0B03C30A74CB9C8F77E95A3BEAD8
  8CD80B9118CF0E295CF02AD0CBD484AC35C804735A540E173D4955D033EBF28EF625403505199B
  F1B82F35648B70345550BAC06F01696C4B81C27BAEFA5E7A6A0ACBEEF1D6F83B0707787D8E98FA
  DBF67B75AD26538D7EEFAAC57DEC507158DE3EA39D3C88D3AC9E73AE988B1790C343E49EBF0070
  C3245FA4BE1480DD9E041087F87AD0520791D9BB20AA78FEEEDF0772E1749F5FD4F0FD46265B73
  815CCDA191731F7E973EB698D3FFEABB83956EC55D6A7517643906224EA5C8962DB69EB0EBBD38
  66BC8F4951F9C6CC0C156F514DC6CC91F4E0AD9AFDA4CE3D4A67E1D09D29D9B7AE386CE2428AAE
  6255AC616F9681DAB06ECE72282B0806D82947C2A680E8A3B56B0538A39AB4C55B9DB329697234
  FED1FF4298DDBB758F5B79979109A8A37CE495251311BFFBE9E0660B80C41F9A61CF994F3EDA36
  DBD67A1E44FA9C778A34E5C974E82087958B23817CF594718FFFF3423DB1FE5E7ACD4C4922402E
  2178531BD057406134E8F65CB088C3B9D40DCEA5BE9AAF5CC8E1818226852442A7F9E593688F18
  1CA6651D1073C402EFDB48F0A177E654B9CDF18B3EB01B8B70EB368FA25206DDA4AAD4131503ED
  72F6EF1647101805A062140F08B74794CEA728087D532A5C96B89660E664024D1F0FCF96447261
  32733580D9EAC90466ACAA47F0BA5113B9E462C66F7B17DD46F6EE4E1CC446EF9287A947FEA7C3
  0F4709A72C88E7C9BEAA57FAD2A7FD53EEDCD929D7013803F481F982737A6CC1879E5D3080EF8A
  4B6759E75A56443D49A8F2CA2CC55D1FB2DAD56D5B5A0D7C3C7D0A31BFC7BB377FB52DCE2C8E99
  CD3938DA37177ADE7F069E92A6DF8767377F30213677EF1C20B00A4F5DDF8E12121AA48171F7E8
  DEC03DBED1C65067784A79F0389C1739E633BA9D28EE2CA792314470255BE7248D40E3587C0A0B
  B6DB277A41BE95AE6390273E8A0B07FB13E5B530E27227F48D1298B40ADDE2E7035F94D10A2A50
  AA3A3CEED67AE00BEEAB2D163396F3DA8F68828FAB9D5E9615BD0A302AFE9775E684BC97121D80
  AD3B42C18C37FB1DAD5903B97E892160C7464813D891856E08E1ACD27A40760B7627A49F58F7EE
  8B3D3660C3DB676B6B9B71DF2968750B9F1A80DD62EE3BD32C3B47DCC6C140E5F11B27F60F7927
  F1840E9C6EADB2D6D77A1C4DEB0FA8F892B44EA91AA4094C908250B6F4F6AF2CD54AD502384C9C
  AA119D4D06DA553B03FB85AFB400F78AC92D8788DAA55B1C31944556D5ACF3AE6B4C58066E5CC8
  D618A8A49B984F703C797755145EBC8662AEDF8313522DC68C6F14C053708FA4DDBA689C43C77D
  05056D8E55E4AFFE1896E0A6C26FF013ED34E9FF62AD8C7379F6188CD1EC8AE0EF98FEA0908ABD
  2BB72119EB4D4C747152047E26AD4B14DF75F09AAA6157BFF0FB8AA220D96F2367280FF2BB17C3
  A9A738428BFC2318757A70E80E6FE8570787969C8AEEAC42A75677FDDE995476986E9EC26D17F7
  FB5F3ACBD535FDD13853DB3BAAD3F2E24370A4E8837B3EB483C395945722B35DFD7E2FDB46F2ED
  44909C5DEDA732C2039ED60989264739690320E034B23ECEF5828BB96F8F2BA4397C7B68B7F72F
  F82851184FBD2C4C392F3B5C59E5B4EDD83353CB47FCD432AD7AFC3C7E26B55928F0064993DBFD
  9FA7E89D665C7A041C18E1304D5DE61801A0DCF44D7E317954ABA6C94365661347030CCFCDFE67
  19E6722145F2CD8E1D92AE1D78C60E301EEBF94B631032E0452206B1F478B3363B7B683EEAF821
  3B8156D95EA88CD65E6844AFAE9BF59F61649AFE540A9FDE690FD5F5C328E302C9EB43456AFC10
  7E3296AEF81303FCB9CF186A6C96FDB7513D2F6F84BE3EE195FE18FEA6F2EDC04C44F266D8220C
  C201A5C84B9A81C2437B8D2E85EB7992F9FEE955FB316EA6BD40E7292F6733B9C561BF467FDF52
  B7C54D3B05D6D404F3348748E3D0FA42E5BA7BC2811139A7162181B5B13E9921701C60B0FE3F08
  9EFD39BEF19E4C8216EC556225337CB50701612C86EA1E0B85B9447D30A850D9AF35E039A1177F
  E44023F345DEDEADA693EF0FDC26468411ABAC5EDD43D9B81B42F6E4DAC35F4C68B25096004025
  87F4AD458294720EA0038D75092D449980584FE7136E22F9C170477CCB97E543CB997F84331A0E
  5AB5051B7143E86E80D13F163FE9D0B90EE9C6604B71397210300A1A098E70A27C591941A20463
  C242F2087396954BF9193E634998AAD4EF62C4ECA6A5A6B4FA755E9680F427D86A06BFE58AC515
  ABF75AC0D8F2843B39699850402D84EA6231D69A9F74F7DBB1311358AB6EAF9B965F2135257F26
  A328482E47922F23364FEC67DB123B0732BBAAAA4F88B66D08D6AB23CC9B123AE8B652378741C9
  5DEAAB8C553857883C37890ACDA07DA6996B3BB11E8AAA56F7C0BF9896CE207928BA8478F99ED2
  FF729969504DC5901265184C5606EE177FB5ADEACC7B02388D4E960F0EC674726410D099B490FC
  6B851CF9085D8BD736F82E76DF6DFFFEF79221D00370C6EED9C23EFED4FE3AB85D0A52B32B0C3B
  3FD5987A39B2BF2C89DF867E07A3C767A25F5279136E1F2E0B8636F9ECA61F03789D2ADF3C9739
  5FBA915DA068B96AF8C8F12F1D5E509B873574ACD34F2593EC309CAD1452BDCBCC3C30FAA7D023
  F44F742ED67CDED191B8C6FD26FC85E9263D174B9DE982200E94A6E4F63FB0ED4398D4A3906D70
  796A29649F70D77A8D63B1970D609BC84B93B1E4583FB5D1849C46D6C00B9643ED635626A37088
  36184EF0FB6D0DE5D537CD398F9A9361BB33DDC174E2F9C4C6D8E05648F2DE96FA713D8502678D
  D64FB9B5597F78778A22D1747EF5B40913390ED8D2704A83362AEEFD90AB39396273826BED27D9
  8FF6B4AF9700D3AC5688BC4327C8EB6973B85218C0D00020B59B57DE1735A2815372646625076F
  5278E827179D08372B9BA679ED92F3FD55CFF8B69EBDF7F8093703384E48D974AA64C5CF88C1DB
  103CADE052E80605E70F6ECB32C4639CA413744CA95E29F76DE480F988CF2B52C1DB780593C310
  7A4E8C7914DAFC82B98F853981FBB896DF909BABC9CC1A1C008C3ECFFDDD656D481D7DFEDC42FD
  C71905F15F665F800AAEC67C03403A153D46B305A45A1E05AFE40BF394D3C8A071CD5EEBF305FF
  5A371BD1F117670DF1A49C2B5D1CC83DB21FD5389BDC26601627D729D6D2BB18A843F361CCEC75
  D151A8CADCF2E49A33316165D44EDE2CAFB3179E0E2AB8B5E0A3DC050D986D073BC7413D036AA9
  8962867022EC234CDDF1EB6769054D8A2D165A873164946C614CB9AE481E6B55B2801D9D6114C4
  F3CC16833999E6662FA63B7FFFFFC21BD209B69FCEA1C26B905362105807F12C9E68F9FA012E6D
  C8DDF21969D38A19EAD13C5D49407DB5380AC40902044149070F9D7D251895CC5F8A597F45CF23
  7692FA7FF33355A31E26E7BB97CCF0E0DD2AA36AB210268836E819E45DE8518C8EE54E1719B483
  1FF5D90DE03C4E4C864057144EB4654B908EB052772160C8ECF1F862C3F504504F9E15628A4A4D
  16B01F543C677ADA28A132F8BF5F758CC086DEE7C146B83B4C6476C3A550C6218675F4C33F1ECE
  DCAB0C3112BDCFDD94A3032A73C6124451397A08EAF12937E980425DF411FA762E7817755EB367
  1A999A785D410301145F7DF41CDD1E3C642ED64B3E3A352D1C65ED1E62B2C9F40C9398CB30F77F
  7EA88CDED5A5D51106D81DA03475B3F2525DA1AD4AD55379682868E4B37897D04A8BAE8B474A8C
  60A51695076E91FAF2FD3E6FDAE7A633EC5A83242E224E1546EBD0A6BE6A1C21619A5226BA46DE
  C4A93E212FEA0531C74115BD39C52665E51001D9D0C01AB67FF7E3A25D4D644BABC17EA0300ED6
  70B5BF65DFB5F3DEE45189F185B494498A6C1ED336C60901A8E36AB95F56CB53410928DE6816E3
  CA8FCC48C1C30B86CC6E2B3E265EBD4C5C888574A9987A037053B98BD86AD429CD752C92E38982
  4E9C1E441828C53CC495BEDAB0FCC65612F4BACDF7566DC2D9794275D3C64E88E4A70886FA6C06
  F6E6CDA24F4C5258D56E3E0F647325C176D28287327B6486818334B4BEFC9226FD828184E13A7B
  44CDE166E10D44EC74EB1FC336470717BE9CC57B6DBAEBA117730124DED41270AA7A20D2CC5E82
  6F8E3A56B246E9EF62CACC7E4DFBAE4FC117D6CE6BD747FAF7E65FFAB333BAFC276A8615E36B2F
  9D2C245729CF4F37A85B67CB71C33998503C619321A3F1E965FA60CEB0409780BC2C85E141C044
  1A52DC12D01583932E878BC3898756C8B70615310AB72E0032D58452F0844553D86BC4710BA757
  E0F8B346F08CEF5E11AEACA08ED7923116591DFF79A2004AE9E36476CD523085E52BF5F584E99A
  A8F98416F11E7BE5CF0ED19B9ED53A8F5FACBCFE684C67AA615C58969FC9778C170D5AA4B495C2
  7FCE92D4BBB4A6DDCC03D57FECC625BAE1F8EF1BB450A617828AB945775A9A453CE791D118D7E3
  82DC1777BE65E6E8B7C5D6D53BEA31A4849314E6AD576437AD7BF724CECB0C5F82ED0CCCCE6A2C
  07064D4857001B3BC90DFD3CB563750C1F85E1BEF1D504351E02F136A6846F3E3766CE83A820B9
  B00E4030E0D0AE46D1259ECC0F222FC261A59D458FC690A4F3AA9CF130C75089706BB44D0E11AF
  80AEE0D30AB29AAE0C4F15DC3EACFDB17F2C398B32F1BEF376003ABC5C20A093203D44D3C1D3C9
  6730A0E2DFFDEBA332266CE06F31A3682230593B1441D5293F251509B06F2A623997A6F2E9E4B8
  F98EF0FCEB693AEBA92FE01768EB6417610228D5F164775FC17579D231AC3F37A781B960B2D28D
  F7ACA6DBE948731798A429A8B13A9E50B55A39CFD2538214C79C6A6AEA31B4A6E00CC31A59A772
  2B850CC0E56F624FCC9538EA5536A1129D3AA5A2982D4A09BE412E10263225FDA8EA1F8E42C57F
  0DAB402551A3504DCC450516FC8BE30B4835849A969A30986FA1D70A35159DC3838ED699721F10
  2758530FB4DC7D09F9491D6651755EB0A2297B4ACBD7D39A5FDBB18C09860EBB8B758AEA34934A
  E398402DB1E678368AC44F3EDA1D0D0D9D4F622098A7954DE9AF40A4BB212036DDA8A547883F09
  EB4928ABB2FE16B20AD3C4DA1E433DA1A6A79DAAAF015AC57988E75428D0FA0F2439BAE2D632C2
  46C9518D02D8AFCF2BCD48B6ED4ED70A6E84E3B41C0C4C0A3504BBB7C8B1EBF881211BEB2D6F5B
  821A773211A4275A88ACB6802899EEEE4E749383F4C8B05C364A0FD51C0BD79A29A44D79614CA5
  88142C955394E2E6947EB28568E84EFFBC1E53126B0AA649C5DAB9FD3812A82F36938DB423C744
  787DAF1E3615B14346FC285AFBEFF55619CA9C42FFEF7249E963A4940BA5523B63440014470723
  D98680E944C61D52C24C93D8D310CCCA583AC522257F9FD187239C5CD8F6C8F3ED9147EF975ADA
  69C88A6E9837FC60EBD23BF6353B191B9A60D35E783D9C404F92860FCACCEC13A520D874413DFC
  9E49B9665C6B4E571DA5F798661428A59B3E85DA5C1CF692794A19AE33921341D21BB8D4781D04
  704D31D3698CD619E18F671E767307AAB05095A47BADD8A9F3119A3BCEFCFB96B67F19C285CD45
  04479B251D4C1848636F7AF7E4E2F3450523C66C06ABBF9EBE571BF6079C53ED599684D7017F58
  33CA60357274C5D77BA844613955DC41F1257B8934D89624C66297AAA60FA3D8FE51B8071A55C0
  2B974BF714A4787154E2BE39EEA83C9CCC78E179BEE40491A7B1A69E9769065173C888DA32BAE7
  1C48A75B1ECA34460C5E7FAE5A6A0897C716A938E503D7569EEE2267314934144DED48A7376DC9
  95F1C3B89CE79946A39FF428F16CBF65E8006C9A1CBDF2D7553D4B71F884408415964AE608390B
  CA3901704E39A68928D810C8815CF7A86FA3DE326CA7D506FEE41CAE47731B2834048D25FA5F93
  78F42F336F89062F42FBC4ECE7A2D005A72204F28F0F0DEEFD83A7E2123FD8374E9B24109E00BE
  717395EBCF0692924216E3BF281AFD254E2A68FCE1344196031455C86E3800CF42DB12F84D03BB
  F9DCC70446B94AE2F67CC4847378F33FD748C76BD7D70AE4D03AE6C0230BCA80E436C2126940B5
  CC9AF92BAD3B7D52BB30A24862089644AB0E8815856B4AAE6A930240F8B6E357A040907A3D3F2D
  8DA2BDA625F5D4A2C2D7DCBA663EE58EF285FE140BFA75D28FCFF911E4F19819970268494C8285
  EBB9E85A662302D91D5B5725D508F55C1EFD3090305A904BFC3D9A7CA9D80DFF1EA435A846437F
  86DBCA41BE2F5B4C63588E3FAA3AA34EE18AB77680F551E0E81F94822ED3606A36409FF601B7B1
  2D5893C206B985F234EB22D8144DF148E73081A4EA57308D5CE68061B213862CF80C8798ED436B
  98CEF59156CED23B0718D240B9964074BBCA5EB0BD2A4F16651755078C28851D9575DBB137C2F4
  3B4AFBC5AB51F921BD6D50CA1A12B2F01C0D6501324C929D2D8CB56A83C82FC5041A4277A07EC2
  08612B09BF3D963D3A19CA82822DAA99699CC068284878829A27BE978C031EF4CB21E0F8886FEB
  70BA0EC4A6A906EFB02B9F03D0058ED7518F7343D1A6EDFF6D3912A82939B3CB06BC34F978555E
  749AA8FA24A7F9FC2D594083D139FEE84EC6523D878172D8E65BBF5FAD490090094A49456F4CEA
  EFE5413F93E50ED2AC3CB2FA53E498671F274EDE57B451C541B044282E4AF9A3760762EAEB0835
  7447709C3311E05978E4EE8CFE0802F52ED18C051690F1BDBFB0AB8FD9017FFA728BEDBDB2430A
  147847EC3711232297B0A463A705C53A36D7C6FC08949BDE34D494F550256EB1E083BBE7F5C703
  514B16AFF5D1930B3DACA9FCD03CD06409E51FEA90E950C6D93A8A1E0DC7B2CA228F56EC206860
  C8697516327C9D31D23D59F80FE2E81726DF71B43D67E94D00E841B5BC14445DA2E194700E5A60
  98EFD9983507E8AA4CFCEECC8BB43E41671B0AE88D8B0F5397F2168A2A7F5C9B9F2A4338AC7F88
  701DE489AE5932AF0AE9E4817C4C72ABEA740489E344BDCBD832A3A8B6A9AD5BCFA6A93595D2F8
  E2A784D313E058C60F62535013530C77B8559CE9A91F2F1569ECEB7662C34CB86C0B1579C83A6F
  71B3D80C2FFED3AAB2D76E71EFAF3287AC7710B9879D65298D28CFE6EE1E3714A96259D72ECB44
  838AE9623CA9D4F57CAAFCCC7EBE292C1D2960A51DE1B4AD960650DF179115BBC3B78BF5D90086
  A503818AE875F025BC5026061453503D3AA579CB0E9C809E31E7512480BCE4E0CC1C69EAE3F202
  B2D9DEC3FC0A23D11B906CD73E5B735422371413350FBFAFA051584E1463A94816DB6BB48ADE15
  5D9A1F366D3246E0645BFF4959C6385344A9A9FFD935A413A27BBE68CEF39C66DF14F56E36FC9C
  90DE20E82E1E5AAEBB441EE68CFD766F410C1622F2C1D72CC428F12E99E02D2C733F238B9902F9
  CE1D502D85364A2C4096C4FEB1639CC9D69F92D12C7AEE78D074B8808CD0BAC8086C401B0F4CD5
  0E49304ECA860A49BFF8874F2318561689AB5F7B2E5F1C5272FB75D5ED19E4136A91A3AF905856
  3D4B83865CF15078CB0C2B967E3AA549DB591A3EA0C1521DD7B2E222C171BF8EBE765A32A4A578
  4C611BA2C61B241F2AFA40E49712C919401968D84197A731B799D5397BD2B937329D299C8F0047
  DA451992E606BFE30A8E1814907A87FE84119AFB93703D9787D4C1C413F5A76236B78AECD7CBB5
  90408A312F60BC1BB63423E10312C80A121A154722994138BFB16B0393A07AFEC716EA6977071A
  22AB3ED600A094E5C6DD73F6D7F0AD132355E7AEC4E301E821E11FAAA66D70A8E3AC5253AEE552
  186B6F6378B62C14EC41AC9451513A4B27AEBD66959C41D778F3EE8C6597A0E2A48A4EE9D14F2D
  A3802830D791A3D045E94071071E8BEA8233805BBF35906CE76DD68F0B738A042708D796EB4EDE
  C17CA860D8578157D85F550F31D3BFA8D28B763E9C634F61F42FD978EC125E90C71E2F537EFAF5
  283D4F97E572F1664912F61F69A1BC5314076FA5211C400DEA3C4132AB9CB8192080D78B7EC39D
  14FAAA15298AB6C80A800957B2BDA1B2705FE6EFBA0CE5855F7E746797F964799EEC86675CC0EB
  30B447839C99713D0D4D665D0F1BAC68DAF266267A57AF2CA066FDE9600E4623613B4564C58A6B
  7343AB9DB446DC7FD45795FBAC9E7A7031AEA78EB8507BACADBFD9390EB90FC198391CA7E15CC2
  9B7C7DC6964E210FAD7808E92397B86E25500354FE8F749ED4C9A98A48B6E5BEFF2B2D6D1AE9EE
  19F82E1A144192CE87E28731AF8DF82CDD1953D73B63D54416A87F4FB927F6C99EA8EB5291B10D
  C519E5E60F8C5DB071F46F1A308B8F7DFA353C6CEF2578034B31C3B7537568B4C23657775503CB
  2F9E829D8B5CF892EC4D405F215AB48056C1ADC9E2D7195463DDBCA169F84060C6BA9D89D3CC01
  0A58D845F687B148F35C17CAE7D627E63616C3ED8E3F7FCA1A2A894E0A11918F25C97C608B02C8
  94AECDD3981577E0F550145E18FD99EE2ECDEE940C7166BEFF60771C04C8093A0E74BD30551793
  15358C2203ADD885313B9C4AFE031A15116B4DB5641871F6078BAF130457D50547A0FC4872A9EC
  C4C8BAB98AEE3EADB728523F5A1137DD046CD438E3D6C1DEFDF53C667A76570EC5F2BEC0DBD668
  5E18B204685A3C29826E79CE98555295CD1B17B29B46D52AE264C5D713DF91E38161717BF1BC52
  FCED4EF0F9E8E7384351530E4E1FA42EE19403E64D2B8C335E4585A32FECC7D3860819ECC40484
  EAF73F3CD89A56C7D2EF439C8C4E773C136898AD7492444FDA8FDB8C35223969CBE88BB5998C2B
  B30F46081A706ECA4635B16B0EDE89901B3A7FA30A87AC59F0E3242314229267537F9F4BBFB5B6
  29C9665AE09B0A3BBCDFFEA35422E7ACD6776786BC165811A457AF8FD7BCD4624FCEECC83B2416
  B225A6047E6103BB737A668E6EDBC8825302E013B73543A6114132CFFFEECD1F9A9E2FA449BCF9
  85BCDBFDDB0AF49E2E42AC2511D4767C9C63198F03EF3733F3965A2C057528644179793910DBA4
  E78749FC2D2DEFBA1974E3A16C06B97C32B0DC0BCAC4B76564F7A1E6959B26CA35C806C11B02A9
  8D32629F3CC7C90786DB3E1A70C7F3C43906860630BEBF14CABF8B6D694B27138D633A338BA1A6
  0EF170D8EF499E3FB9D58C3C723A4293D4248AC65741884D5929B77EFCB3568500A991C00B58AD
  2BD6C4D7DD017B05D02FF6E21E1C0FE24824EDF08945C7C6DB0EAF97200D3F0FF3DEB6405A5E9C
  DB4610837769F1DE543A137CB2508051E95C322328E550BEC8E72EF8CEEF6F8EC850326CE919EC
  2D66D961A3A872F086340B00ED43E63D714F2B26BF48D1A934411D909B4C1BF3B5512638036326
  5E2C49843403EBC73B3D5BB924D285E9F4B2DA3ED5D25DF840F95A089ED664C47B4ED2067E7107
  D5A83C5C25E981DECEF5C42FC7E7E210A1415FA477A5BA8DF602E04B026303757CCCFF6C2EAF53
  A95F621469BB567842F70C2D26118A6B017AA2D8DEB49DFBA75E8CDA1A6980408071A8B3152B62
  8B5DB74790313CCD0ECEBA0BD8632C7192853A41BD44759009D034F25EB1AD27A12630128AB4AE
  A7FC3B39B6BA97ADE40DD2B76AB10CADC51978D5F3F366AFCFABFA031AAFABC1B8309571DCE7EE
  20710F7282C77DAD16C1917864109E40D1B789356E45F8180126FC628850A95FAFD346B9B386E2
  C5FDAADB80844361C5D65DAFA9E305136624E7AF744E8A6831639C06C74E1DFEE49E52C3FC77FA
  601F194D97FBF6D8EF0F948F8197854CB5C7509375660EB1AFF2C385966225CD1F7566895033F3
  C4DE4CF0081EE470F4AAD53F3165939CE32132509671FC167E8168C8DEF6B595F7E32CE6EDD833
  976F27556545C800B400F31173570A54E824CA84093346AD43761204C2647F8A105A5646E7A5A4
  0697BEFB5B5E50355A84B9F0AAE34EDDC377F3AB3A6D922E2BCE9CD5420219D0D5DF8B1D26A719
  2E20D7A1CEAA433F058E34879748CF4CBC1E6A6725102D3375EF3D6785A753F73E92F78590015C
  2B3EB46F173A4CAD6E397DB0C30BE0EE57DBF27622A21E6C465C5EEC4B07112FC2D3259214E034
  229E2CAB1076CFA2CFBD0902CCDC5492A3B4C3233CD4FE6786077898E47411256FED19766B5C12
  2EDAF0206AF06CF8158A38BA554C1F1024D781BACABCDA739C87ECAFA132301160822F3C58C3A4
  B760464A89D990AE9CCEA67D3A5406355E5339F699AC6A775F15172914E55E2C8F8BB2EAF2FDA7
  E7D78411DAFE61A15B9858E980183C13F082C69D4E996DC59D5BC53AE66C50B2713510A5346FCE
  DC3A53FF738B3AB8F6E7F12DCE034394CE40490D95FD9F5F484B4E965B1A39996E3F0DD6E5FA6B
  5C238E858B92EB4E9F4FA3310F5E5135E75A7806613414C6EB5191645FDDDE7DA90936E1D4AD4B
  B096E47A5575094AACEDF7A8AE46C1572BF6C273CDC7DCD2E9845AFB9E5531E91C21BA0FD3AFF5
  02155654713ED807AF7D55EF534CAE7456FA608A3C270018A85D80522EEED986BAB71CA2FF56F7
  A5B1DD9205489BD0E19C14C585F56622EFA9DDACDF3D1C956B2BFA7469EB513998DD71B0C8745F
  F8665F2926825FE1
  0000000000000000000000000000000000000000000000000000000000000000
  0000000000000000000000000000000000000000000000000000000000000000
  0000000000000000000000000000000000000000000000000000000000000000
  0000000000000000000000000000000000000000000000000000000000000000
  0000000000000000000000000000000000000000000000000000000000000000
  0000000000000000000000000000000000000000000000000000000000000000
  0000000000000000000000000000000000000000000000000000000000000000
  0000000000000000000000000000000000000000000000000000000000000000
  cleartomark
  %%EndProcSet
  %%BeginProcSet: ppcodbol.pfa
  
  
  
  % Generated by Fontographer 3.5
  
  % Copyright (c) 1987 Adobe Systems Incorporated.
  
  % ADL: 712 288 0
  
  
  %FontDirectory/PPCodeBold known{/PPCodeBold findfont dup/UniqueID known{dup
  
  %/UniqueID get 4303737 eq exch/FontType get 1 eq and}{pop false}ifelse
  
  %{save true}{false}ifelse}{false}ifelse
  
  17 dict begin
  
  /FontInfo 13 dict dup begin
  
   /version(001.000)readonly def
  
   /Notice(Copyright (c) 1987 Adobe Systems Incorporated.)readonly def
  
   /FullName(PPCodeBold)readonly def
  
   /FamilyName(P)readonly def
  
   /Weight(Bold)readonly def
  
   /isFixedPitch false def
  
   /ItalicAngle 0 def
  
   /UnderlinePosition -90 def
  
   /UnderlineThickness 36 def
  
  end readonly def
  
  /FontName /PPCodeBold def
  
  /Encoding StandardEncoding def
  
  /PaintType 0 def
  
  /FontType 1 def
  
  /StrokeWidth 0 def
  
  /FontMatrix[0.001 0 0 0.001 0 0]readonly def
  
  /UniqueID 4303737 def
  
  /FontBBox{-28 -288 631 1046}readonly def
  
  currentdict end
  
  currentfile eexec
  
  D9D66F633B846A97B686A97E45A3D0AA0525392EECAC163E584A9104D99AD0BC1B1F3F7121D1D0
  
  F2C60DD206B0D3C8C450620B47320CA0AEB8937511E456AADE8E66B301B1E3E9DFE17E2F79ECFE
  
  A709FF3DAE19B4C169DF6773EDA414D02915A6F0FAF8B24FBB0777C697BE8A37D63A390AD9DAE4
  
  95BB7E626721FF2FD3FB147C80D22BEAC37C2624D818D58C8DF0209F5CE76ACDDE57A303D9042B
  
  F0A674D095697F925F532D1814BEA8F8A5B5223A32BC4A95402F2C843181776EA6DD8FF9EE5F34
  
  89051FE34AE898ACF3201433CCCE8B93D5627B76114F999C81A0C554599F115C89AFA9221F963B
  
  6A2DA89342621244ABEB0E794C885F335E4EF8188C4B15B1E6630A405DA50578DDB37C96B3C8A5
  
  6A7F70B55BC23606EC03C231B2380A83E0F0467A4C6F858A0548AC5AAC2F1117E7A4EA7A8C52D2
  
  01B33626C2BEBCCA6DD9211D6C88F609BF2C6B133E55FCE6D8860090AFB3C065835D7B4F34AFF9
  
  D8E0F4E0841E4367FF8604092704E1E3626FE8CB4A48EB13E45CBFEECBDFCBFCBE64323566C437
  
  6AF858ACD9ACDC42A1C9285F253C3113122BC9AC460E2473581F9C1F210B6FE7B9D486E6C96BCD
  
  0CF9C52A89D2FA2D30D14D0FCC9A2470A3B91A0CAA9620CB376C417573860071332BF012305488
  
  2289CF2A52934FB7F32BCD94337AD1EFE57BEB43E4A661FF8EF5DBA38FA3C924E8517AEC114103
  
  11E79D6DF861159AC74C9620888EDA3AF4CA08A15623B5F3D1AEDA88B1BCCE8F057173C0337C67
  
  CA2A599F1F4BA039BBB26179F54A57A8797A9C4EFAC228FEDF1E2C50A951EB19770525AF2C6850
  
  5660A6C5F4E7C7AB39D5755DDDEB1BC4D04EB10CC09F907E6BFBB68807A874392E443C9867046F
  
  4B020E5D79BA450B63BDC0FB38AECDEA91251673C5327EEB74821505993A490133B73F7A4D90F9
  
  9D4B3778E50274762FD18E87F7CA1D009DBF4EA8CDFDAC1494B7E78C17B43A9DBCAEE0CD5FFBD0
  
  E0443DB5CB70E71D7C95AA35B42CF90830969A8C84802E49EDA9528B7D0FDD9175A6D41F7E3496
  
  7B2E93815955A9B14B34D2A37E6E88F80C7C11DD39ACDFB1F10A1237A0FCB1BB37221F7160ACA1
  
  9037AF794A3183554C07C03CF9DB3FACE33A2FB584A30A81578E99B6A625861D2D2957D5EB8789
  
  CD0934A41FCA23C935BDB7094848B0FBBC592067A34FB3AD564BE71D20074C2A4B624945ACFC71
  
  131694C4056E464D43E3249BA1FB106DA6E67BBC6DCF542801C73446A921ADABA4B4BCFE6368E4
  
  543739A1AB352A54F734ECD3CDDBC89F014F59682E3C521B33CA0F9FBC23758DCB3446724DC4F2
  
  45B6D123E904451D2030B0BA2FCBB3E58711779949740AED1F2E2B36C78EBBCCFBCBB6FA25EFDD
  
  0A9CA000C67D6BE7B0B3618E10ECF1FA5279A7D16462F5382AF104B5043777194F0138CF09DD2E
  
  F53D8F4735BBA9B1493FB2DEC4D33B35CF18813FF6BF9E9EE78E2AF93566F0FCBF4D6BFA7CA307
  
  E7B29BAF1B4F4743B14074BF91055E3FF84C3AF83C6642271BAD1430C7AFB976832E88471FCD13
  
  ACFD0E867F5BFCE3CEEDBE63EA33A440B1A28111E39EBED5D08BC3957C95C33C2F3BA027005CD6
  
  FDE60CC4471657FF6FADD89450AAB5DC9668195FB9D8F7510F13CC8EEDAA6D0915898CC619DCDE
  
  8BAFD257D6B74F1ECC62599FF345702AEC4EE7BA242C73CF8A361C72595F6824240DB10F50A8A1
  
  2E605636FDD4DEC8C7F7247E1924DD13FE0953677E86CFCB8A10F15E60C79DA019FFE0F748497F
  
  8D7D92B07FD2946BF908AF2B6CA40285C966D7767A14FF85E7F43B49E0F8EE1DA6B4E666347026
  
  4743E0AC871379CF8A079EDC65C1D84896329990B60D9A33C724E01756DDBD8B9906AD18D1E11A
  
  095085675AF9723C0DE46F78E04790916CA89B4DD5EA57619B59E71BA530B694598648D332FC78
  
  EDB34358805B64DF60C5D47AB82F3AC87B5385C39116B03017C3E4BB4556B96DE5F266B379EC69
  
  9F4FC8A9F854C41E8BB03C9BD7C003883A90226992C67B2D02DBA92242B94D21566C83FAC1B4C1
  
  2ADE6FFAA049BF6805AE76A6A6ED48144DACABDC8D2F35CB5C08158A73A0A1006667738CC471E8
  
  29D9487E22DFEC30DB6DD281931E9BE9C84859D6FA932A76F9D85A1E99AFB5F5905BFED6FFD762
  
  5654649757EB640B5B3C0D18019BECD629162091B69154DC0BDA1D08F0727AC851BB43503EE396
  
  D3682541A730EE450C30F663187C3B5004D24173F962CFEA8E04F5DD664D5F6DD515224F7E256A
  
  4EA07B5CA823456D75708998097267BE5D77D20E71BBA0BEA3F327865A7A0C5746289AA653EE2D
  
  2157C2AF3330A45557F5F825A8D75284FC69BC15E1F73AC0F5A11B26D47210D195F557B265E9E3
  
  0F6AC77C5D3AB084743E6B758365757B81D430549EF513E79AEBBA539A745F24D48AE8E728F028
  
  4DF28984F5DB1203F0BD66628756565393F1629191C50347C0A48205DD807B0E6CFD353E22BA43
  
  1CC6ACD8C6B4E97D691F743DAC69CD0881AA81CB3A48A08CAF9C32E4400A77F94A52F9AB18B4EC
  
  ADCA4F073DA5B3BF4079E0125B3064685FB783E1565D4A7779290BAA734052AE798F5CD75C9127
  
  B338A49E2CDFFD9F0A429F662D170AA8851250713E3D19928D974B9A7CE6987DCCB07A53ACC32F
  
  D217991C80C5834BBAA796A7F9B206368542218701D93279E1E197D68CB0FD0313D7672A1327F7
  
  06250FEA4DD4C623CD568F1F6BA0468D5C98B4E9C963E9E9B21BE58922750A5076449C8B9DAEA2
  
  1C46E2384EF871C9456ECC739C1B3CCB5A85CDB66E90108C860B180EC7D4DD769214FA963F26AC
  
  66E28EF2DA1CDE21B3EF93714E42E7AAD53346F23EE3985B1A3F871D49CD56A0F041FD19A4688B
  
  5C18B14C93AC2D30E55B902ACC35DE79C6B3D3BC8DF6EC35570AF34D3472C24EECB4C07AD7DEEC
  
  6429F96942BFACA4B7CFDBBCEE6FCB8D5B542E289599F9FE1C2FE2B1E0E18F135722CB2118933D
  
  7743673DD8ADA0AEAFC20C36E0157B724771B00DC2FCD821C26EADF429ECF0A24CE808ED06CB80
  
  EDDFFDD8300AC5FEB7C1B7CB59054D1A4F04267EFF030E171533ACEA869E8E93792D339FA96C6D
  
  648A9D4CC88C7D0C1B036DA7D452007A50EC5F0CF8F4C622C7078CFA3CF4BA424A63906BD510E0
  
  A580C22AA1F0279F9BE03B7E1B6C714ABFA2FDF4EC8E14714970FAF1BCA49C71C91C46B2F31A8B
  
  C338180AFFE97E0A4FA6BC9FE4750A84620E2CF23AABC6CDC4097140480D2A09C231BD32738D57
  
  26BF12435640C3978CD4C855484D6CCA4482834FD761EA4153B1984D0578B776CDB21D48918012
  
  86B6466492608DE797A7B951A979A2DCBEFFD69297C46F2B372F8ED2CCAE9372BD4AF6455DA71C
  
  65FFAEA6E84523ED098DC49D560C5D6B60BD5C19F0E61BE5F7859665295150E152FC3E885800D8
  
  C832757ED77F7C53B30FD7EFB7C2258DF6EF3AFE23109D7A342F9B348FD6F36EF63C9571A96F6F
  
  8DDA17837E72A6FE0598FFB8E0D5C220DA3D3938510923C93DB72B25726A57885D418E8D6C049A
  
  F6EDE3A1DFCA9B10B28EF6F1D077D4B375D9CB33CCABDBE849FCC158E603ECBE7A90622598C99E
  
  88B32C2DD4DE614CCFBCFD9C2726DC3B26544A3989F1E47398FA46ED9378FB048ADE2A5E4D3620
  
  708AE4B210FB4D97D3D6FA9FA4403515584D86F7C3CBF2F743CF2A63201ACD67E589B6F54BB05A
  
  4EB85B91328B9F2375E571622742681DB4F9447A2E0FBC4B4CB51FD7F8BDE4AD2D5278A472D2BD
  
  B5D88B77982B01786C035B57F85E89DE40E6368728B7283F542F3A93D3F5A7B1F6C982BB43A5B2
  
  FDEEF5BD8C61831865349BD6D41EB3D2B0F94CD10E6D75C370667831119311B9888D0BE9E84BE0
  
  F180960AFDFC65AFADCA3A9C145695CDF8C8AF9150B7BE09E5C0EE64FA511B2C8C6F5C1B206297
  
  E3C7C9733875DD3976A6D7A2CFFA5CAE810C02FCBF2349D346370B5C95F00FC99A7FBC91083A6E
  
  4901E21F99159BCD464196651D39E6209557B52F604FA6144437DACC5DCB92FE8F81913B2EE3F6
  
  B4206E0DA6A01F381D34242902678BC68F4D8B1AE7FA11A799D06C72A376197DB2527F45E2A1D8
  
  50D47D835CEC8F963A6FF0A80778E46917E6DCDD841DDE904E3FA961EDFB8E6A5B7B47275581D4
  
  1EEC0452DB032189B0F40207B11607D1427D50211D76966122832C980F9B9715DF2A25DB8B7940
  
  9783565A3A325C5CA68A248E7148944844EE8A2CDB2ACF7D8A462775555E348914DF3238F0EEA0
  
  657623EE65C29B7AD07C8B6413F78A0A4E9FC5307E427305C95FEF098E53E308703D757F37F193
  
  7489AD1131582087D24BFF50A916A0F8E6E71C335E50B31650CB2FE42388473C55213346737CF0
  
  A5D880D0A56E3E19B753411E92045A0E5C0073F378E9002DDBE0B10EE177F32FD9871B98E023E4
  
  3AA3666F4594591F6AAD8C3FFD37804A451F21C86E794E657FF50F549B9F32E4B0281C36ADEA91
  
  854944606176A6B3B7C55DBCB560D82D57D0AC1341F03240AC56A15D878EDC113A61277C4DFE71
  
  DB85C6D82658105052EF0EC3AF873F5F0D1881B97CAF0CE52167C819FE01E00DE7B448887A30DE
  
  453A38BFE37CFCCA4F41E7EEA5A415F33052FEE64F7D2108C09F79E97DBA6998A3E3D5DC37A352
  
  9333CFB254FBCB62F90A0A80BDB3606FD94A5D69A32A5EA004E94E45976A514BBCAC041DCCD593
  
  CA673BC3EE1B8E4F904C3BBA2E19E1B55518C7D69B662C115859D51137FBF2D3DC019A8CD6E6A0
  
  C14E4311B15FA670091B9CF8ABB1C196B4E0FC824BC2EBA76C62A23FE8C8A38D313F992FFAAB30
  
  594798EE9C5C216D6E95411A825FA4F29AE05E0D883C07D24C4F5108839F131395731DF39486CF
  
  4D8D668B85F7A55DF83F5ED35F9B494B0989878C33A0817B8C7537388C5C6A658014866EC07D54
  
  C89A80AF83A7C4DA21DE447206DD4C2F21A39C8CDDCF3B58A332805714F82B1E966180F5ECA958
  
  27ACDC40A4A6EC8FD9BB024D3068C94FEF25E4D6337E40D2A002494EEDC7905E6BAE38426B344F
  
  5B36EDE8FFE894652422B11A320285916F4EE5D61E5EC9869D49729A0CAB13873BB3E0F20FA518
  
  B812E5D24A641796E38A1766D805A89D9D9FB642143C377B365EC45BA6C193B3124C069C525517
  
  6F35EC85546C1933F25B093DD56C78AD86E502A235D2773ABE3B7BD49E3DC78A6AECF20CE9DA4C
  
  87AD7C7E75BB4AAB78797EB93819A5C8DE68638EFF281B141662A463135DDA0D2D236DF0EEB709
  
  AAD9A549CABBCAC4E577B1955BDD8BEB42650780CE2B1EAA47C35993E1E1F05051145A94C89D2F
  
  4162BFE23A2C91B7844885AD346BB88E9C9F8FAEDD20B6D6E54A9FCFE3C185401EFE58F29CD4AF
  
  8D9DEA6EBFF427E9AE18DDD3D1BFFE2A17A7137B596E239B7426CE38B5C48C81D17FF85462B648
  
  70A3A7C9F2F3AEE9884D03CDF387F90C5CDB807E222A744A617317038707BF3130ECAE267926D1
  
  52154FB423E2FCFC438AB660738148882BC686DB56C50D092D60428D9B0371704D3FB8FBE75D56
  
  9E22B0E9D767A5A8EB7702C34F7320C30FF142DCEB9D9157678645C51391647F9F7329B39C2432
  
  00A8D0527940F8DA37A300C0182CF76F3220B1E62EAC18E8FE0A8C93A0A5A373386E38093B81BD
  
  3EC3CFD5BF2E88C51321D4540733173592661D85F1AFD04739543C397E368C73500456264B2625
  
  37B8EA6D147D264E48E65FC6694D277E5970B0FB471D76280A74008B10CC5A216ED07F21A24BD5
  
  DBCEA5A4E0ADA483F04ACD7697AB7A0A901C0192581D4FABBC24489E3CF535737040B0C15BF2CA
  
  997026FCC37E36088D513CC20B68C8D8709E5D5811B5C510D6193A81323A271620D239CFA32F96
  
  3AF5F3B5857AC680D1491DE3F22A8BBD2952EEE5B49637F24BDE92B5A994CF5E0271CA9ADB47F5
  
  C298A391BFCB60C630312AE893AC48F202568DE1B43DD986A38A0F478AE6465F83B0FD3ABD7FFE
  
  3EE06BF88D5016BEE2E90D4238722A604448708748D608295E3B435BF2B47C91FEF385F2731E95
  
  1F73FABCC88CEB8BA48A087BEA2DFFA9301B60C4AB426BDC104A2411ED838085FC06CE3E4E6906
  
  4D7EF3F301DD3CA3EAEF498E6A7B4B1A36E9790E7F69ECD5E8967050835CE779E3B44014C27AC0
  
  456A96B9E28C71F30031B49FB00DA195A32C4175B6BFB279FE435EE92D4FD5963E42FE99D95438
  
  7400706C17567B1FB65C4E90AAC10CA628032E0493A971BD55D83E1AD70B240BFB6EEDDD625D4E
  
  4CD6D4895668B1446DDD235E8DE44B694F3F93AAC2BC0D04C871FFBF5DBA1C7EEE0BF66C949A58
  
  B16F55497E82ACD40BE356CAD3EBD707C0020ACD410DC6FFC7CC460525C2001A0B4A8B7B114932
  
  3A65FB65BB7C20CBA305E53A312E9719A15C45C39C85A4F1F008C361B1757DC0BD8C10204B0218
  
  AEAE29D3FC55C12E9985EF36A45046F46606924636F7F76480FEF7F8D264C73266C05A6DE699B2
  
  37F6C1DF777306BEF1E0AC48A6B1548ED41B7EDCE706CC8A66B3D9437210C9FCFAC978C8F9FEEB
  
  8E220D024C04DAC2CE62DC8AFBE7AD4540B5ED3668E7B59FBA28A7F8D822DBEF84DFDB72566EC5
  
  D6223A165959443A2F980F6D16C8187AD321C27AACF884336F7D8154D06FA46E3FF51D2DC26313
  
  FA812F9F1507FD75B80411DEF69FE268B9A4587195E45B1FEACB0295C63BA8A4CFD47E7C711511
  
  AEB00E93C0B359EA0DFDAFF5DFC0854E2FC63AEFD37DF473859C040D6E8D82F640C1815D3F9A53
  
  AB3E1D5E1F0B0E125510F2C6D503C4CA518BD36892B83AD31B3734804F72600562F9246FA2B5B8
  
  56BD55212CA27D700A7913AF505BBEB9BC3B2EEC13D7289997ABEC078808C79F65939B07A2619C
  
  0EFDE6FF7BAEAEBB3A4A321846F639A7096E4F7688E523DA1901EA3FFB6A71110B6CA2C45D1FC5
  
  49AC32F03FA5AA7915EF43770A13AA68C43F4FA3DED55D2940F76648076D955B509217254128F7
  
  46C3A2AC47D683FBFBE12057454435941CDE662220AA7B356E4718D591B81A06C04DCA83A814E5
  
  AFBBB758EDF1E8DF1BF622D4E4BB637E017E4E66F6067CEF0650EED31BCBDC6947DADB3982329D
  
  E902E52062CEDBEB77715735E698E40448FEC00842BAE3BAA207D2B28ED3BFE1C1FE428439470F
  
  4E1D8358E35E4B97D61EC6A128B4383EA0276A947BC9D16794C3A3D7DB0BB59FF649875E0AFA43
  
  E6586F8B4CA921C1AAFC0E2D1C970B380977CBA505B3D531F3789282E21D1B5D9D3376EAD7E4E4
  
  00085C47CB858DA960B55BEA07E0B012BE3F5620DBA167C105B95FF9B5FDD28D5354C877E56710
  
  1D45F9AA471D27183A55AB9B34D626815D32CD824A4C46772D8FC4931341E227309E8307835FD2
  
  5359A10F84AD5744B8181DAD59176B6B466595B42331683F57546ACA60106654C9A1E5F1BD47DA
  
  F9F93598E75CF032198D69A1C4B152A29586209903C7BF126BDEE5A3806BA1766BB02F5D75E33D
  
  B2B011106FC3C964F8FAA9E9857BCAF903463FA7FC37294E4F0FF98BEA22FB44F7AE5E6789658B
  
  BAB5C30D6C32D5E24E268B54353D1245ED78D1D7385EBEEA49ECE496A4261F992F67B664776D6E
  
  CA1C8352499BF3CEEF365E152582F98590B8D903867B6557200B1070D91EA32EFDAB0580559EB5
  
  56A835F74BF458693F093389EE1D1B1FC1BD2AC1146EA9C5E4B14BF26AB3EFA0BA0AA1813E6C61
  
  B7011AC330B293A5CCDDB41412F97BA02D38E502D596912D165F6B0300228891210DB700E975BB
  
  47427388D5F3246D80CB9703FE5F2B2CD40873AE0521850D4D656174B52F24C06AF1D9FE4ABBF9
  
  8B432B6150B0725E328E54BE382A16D5DF6C47D9DD14751B96E2DBCAF4C9858336F527238E263C
  
  58730C7E27DA1B21AADBB48154CE5E9C92660394D7282FC07917C91D0E91DAE3FF7DECFD5E8082
  
  563E1673A15CFC069E08D554E3B8DF570209D567C65F3D26F251B405FAE5F6106637728BDEF735
  
  EC2D5E7AA3F00434EB58C3307D221C12FEF6D741ED87081DD6B93D2E9282D09A7262EFFCCAFFDE
  
  CEE8C4E942AFFD8215B84FA57D41F5815F3A3191BC379EDC454252E688EB9788A551A17876AF1B
  
  0A5ED5A62E92E7DE332ED89A9B4F406552F9B706A6FAD59A433F72AB6D4401E25CC37C0FF91713
  
  4C838E5CB3CD5AEB8556443B1BF513900F293B9BCF33F96608D1B108CF9BC7DE95F4B518A86987
  
  28F20729D60E75E53476868220B64E905BBFBE8E26808EAEB0A46A1E096EF868EE4410EBC87D36
  
  46037AFC6D177F42F8DAB8D5C88200AEA14388AF09EAF5CA24D72A172D654BE198CB426949C4E3
  
  D23C7D49F4AEE4D20124B5830480D0A8CD0F7EFCA3FD251C609D124D0BB4E7A6CE89EA7C92E0E7
  
  B9CB870E127E0337A2E645AEC27D1B0D85C57D27F0F7AA1E849CF1F4E9BDF02297C3E61290010D
  
  4EB0F30697D30ECCD1EDE1766BC137F2E2A3D7CED25B1BA259D100BA16AC3D29C01DF83DFE5B24
  
  DCC9FFC2B80F61E91D2E41560241C00E79DA970A09D8AA229CC2F5C114E0713EAAB560442CCE73
  
  993EB9882E7C0292F248C00717E3A1DA46ABF3FC716226EAAE35E8F20726B1A045A20F80B02473
  
  8B7B93D0E79C6FA11780A6C94E64DE53FEAE019E4D838607A05C7746A3385C9728CA29D8F64373
  
  B25307272A77028815D80451061B010EC8E82B0B70243F66B97ABED264F7B53B163DE8204796BC
  
  C593CA9BE3F43E26713DCBD9E3449FD300F6111A50EDD2F9CCBC6D0012A973B5F6A1651074FD14
  
  76BF69456870C5228599FE7CC0959F6804497A28E3AAB129024816FBD3C0101A9B709DDE0A92AB
  
  F0B2948E096624D067F17A8CF2E8251A40969E857D86739883B6B46967EAC2286BD451F26B4A16
  
  026FC5F3A087F4BE21A90D336B69C5117F3AD532AF6E3FE9C8A484D372A1C8C1A342264D3C3782
  
  4F3B582D2885642D2B3442121A7F3BFCBCA35D09DAFC4B8AA8BA4E0C1139E3F29ABEDEA82732D6
  
  3810F7FB2A462E11A32DF2E74904AC7C5704C545FD6D08D6D1F6F07C69BD5418E82F6B33C36A99
  
  5044BA660ADDEB24C7AD10889CB785169960F8E6EEE9A321BAA78794AF0860DB5270193CDC9C0D
  
  5DAC45A1E67FD6063A1998D0624A5DDDEBADC8C42318929535A693677673B24CD2CD2869148DBA
  
  C1EA486DEB1B0D83E7785F1E1EE65B9AE3C839C7427108C13C4B7F657BA9669D1FD3E3BE5FEE50
  
  AA20946EE173BDC0A9B940744AEEA3847D56DE7E86ADDD6F63000CB048407070AF65E4BC097347
  
  CD82F6084D20C529E35490492E5293F97554F9979405CC6FF7F801CC3DEA50DAF9BFEFE8623B2C
  
  8C7560766C4115EEFA40BF980647F6D3187A689294060DFC214E22441044CBFBB2B6274EDD44F5
  
  218057869A46C517138E4F848DAD69F24208896C8DF860F0FF71EF89310F2D82EB7ACE6A72928B
  
  07CC57A2DF6443761D91283B59BD006650CDFDCEF8BD64A0F626CEAD770572D489E916AFA1AC26
  
  8F6D22F3F37B63928472B81EBD287F6619900AB5B291A047906AAEE2CD93F7FDBF1658DFEB8D8C
  
  D7EF987D0D1235FF8DF202F9E83AD154500909996FEDECDE0EBB2F95F69805EF1F774D4D143AAE
  
  9A50B64BD514D83D00F05715F163BC7F64B90663C5971D6A5393C1D6011978EEFFD57A7B93FA57
  
  E6CE1CBBA31DD510696A344EBDFACDB87AFDB6F425BCC13AD245E9264467960F951AD797AE9D9E
  
  631265ED0F12D4ABB0F6189FD9433A236F00D01FA038D5BCFB3DF68397610708A777FC3021B685
  
  448445D326EA7649406A88DA392857FEA6156684E3547E8C757BC38223C0CA2569BE438D03B575
  
  70E815D58BD82C2EEC861020C1DBF073EFD9C8136ABF263461D3AF77D057F50214904DDE51C3A0
  
  61A3A1E1CFE413E9A148F05A8108608EF7FDB96F392E74EEBC5A4D354BA2AE5678D28AEC014979
  
  128630984EF3D5586DB8783F0603D7210782DE979C07BE8DD589C710DD44394569B8BDE770BD90
  
  35FAF3CFA48070C5CDC8CBEA2B5AB2620D4C40818AD740966B733B99E8CBAB4909F5EF5B5575ED
  
  0A8CE4635FBE9D69E57999B2739F281CA4BEED6FF2948B8670446BBB30D0BA6679AA38C2DA2A30
  
  960687F2DCF0C741539102968C8D6582E55974811630B0FD2091B63477747F45CA0ADC23221AB4
  
  C2E94EDAD6F862119F127A79A2BC073254E941B37B830E5FB504B26E580320DCFD5B2D03A5A6BE
  
  3C9350031D7A58F7B351A9F917ADEFA72D81490B325C4C1E39175D1D3F7394A009D04A7B706E1D
  
  3B6F61BEA096CF4DC50E4C72999667EEC869125B3EB152E3E7240968F9B93BDC91CC5E62654D7B
  
  46E2E60A4D2260322B563C543D9E171D5F1E816E73222709A1E2F14112209089554DDEE17CCB1C
  
  F066D0AA1387524FC4B2BB47071407428903A1B9721D6CE4046EC2FE43B9CD9409BAC41B76A27B
  
  8D4CF3DA42F9DD8A8A751DAD103F169A1524D0780022F764C49FE9B44AF80FABFE48BFE40D62D4
  
  1AA0618245AD7BFAD7C105A3C064493B109F765EB06BFF5C1C8138296C635AD6258FB0894C2DDD
  
  BD37C46FD22311D265AE50CF391C85F6ADF59181EEAB5B65D1F81149AA5425B1C11A432032CAA0
  
  3EB2FA8204E9BB6736998DE9B12E9E37EC651560F4E906B342A725E21021B82B84249D5C0F6D96
  
  33C4196279E569DB16585843D65FAD0B5D893BB0A9D381324F76B61DA88DB8188E59C4BA15EE5F
  
  B2892E7260F9EA9861E44921ECC1A27D79B25050615852C838BC3BDB4D9A3B81AB2DFE7667E2AB
  
  0592E4D8AC4172031E12760F14AE1C058F986A22699E024E6C6CB50A43066F1A0304AA67AC44CB
  
  379814C791103B6C2D4C1439FC3046B611F6326A5BBE697384A976D0D01815B933EB4734966D07
  
  E1D509471BFAEEFBD3F9689EAF82B0E9AADC2368AE52AA48F0318AA1BCC81C3F2B89D48C08A1F9
  
  BA4D7CE86C5E913A87A0563D7790C471DD47CBDB273AA37CD4DE6BFDBA407483DE275FF57FAF93
  
  22591A8523E77A3343CB6100AFB6035223E05EF3530313885FFC63A8D72DE099C50A774A603098
  
  59EDCB3C4E424C9073E0B5B32D988FAD04EB486E65A3EA7FF7DB3D2FDFABBC92DF6C742EB6F09D
  
  2A78387DC0CA8561743CB9C8AD949472DAEC66ACADD435C818D28127770A8DA2A5090CECCBE16A
  
  516D7985D7A49C7EE9D08854435008ADF25041E8BA5744591AB7E22D3705EACBD1D9C6378F172D
  
  B82B2C7BC51293F40064306F69103E6A0BC1C1046C2A0AFA2E038550C194354EB8E263085E5390
  
  749E2C98F43EA68D466E40C5FEFE6764939CFF817814B85BA928C5859D20709D78CD50B957E809
  
  0F37CAE36B181C37E80E9E8690D2B9F0C34D204B8E4A5A164CAF2FA4FC6ADCD77509EAA5236233
  
  6E9DBFD1FDA1CF32A9E980DCBF4B7C338CD18399ACE5108435767FEA8414585DE7C3E08590B37C
  
  CA0318A82C69ADDFCEAE156E5D1FE3EF9526515FEFF356E0351CDD1D3AD340E7727A478264DF2D
  
  491259F05A6504093949502E8D10250556B87ACBCA7EB938C62BE0D0DDA4D02A93E18769B895C0
  
  4E5FC1B229FF4A3D7070A0856290BBFF3460C5E1AF92346E7879F27DCCD8A5338791656C376128
  
  421DA4B07A5F96160F0421AE10C1F1675D396A80635B7CD1BFA4CC564263DA5C0C84F3787DC8D0
  
  8ACAEDE11486C155BB1B16806303B9D21974CA19516C63402A8F0067CEDAF682EB2A2127348DBB
  
  5A662B5E87A5375B396B1153B843303501ED93534DF7C7FCA09EFB0261311155FCBA2EA97668A4
  
  65A7751F91BCA566E4946565BA1D664CD8FED19E84E7563205DD7AF77E2A4CBC6846EF5ADBD11F
  
  1958E086FD7673D5AC997867EB0217314F32D60342FAAFFFF957F60D9B0AC57E611137AC695DEF
  
  E313BEB5334B838F83A54C3ED76AC55C67571F367A409DA052A0354837BDEE4D11B426DC9DCC74
  
  61A6F422B95DF3894A002B02BDDFE3FEBA8D8E3BB7556F501A83A10FB0137F428FC522260E0A4B
  
  1655399490DA83CCEACED148AF1F447C9BBFE3B159399C82EAB257BE568A4DAD68A664D7397342
  
  AAE7D38223CD9AEFCFE5E399F1D70404D470A1CE10D46CAFF5D522352C50DB8FABD7348FC6CEC8
  
  34D5A82C04DDA105F85F450E7363E4E989C6725E6BBCF7AA6680C97D128FAAF4D6E3859F03B0F5
  
  A3A8A70E0C9DAEE84BB95F41931A30AA18D6C51D9DD3D3B0ADC7D0B5FF0D0A889A944C4468F96B
  
  9E59515BBA5C86BDC5394BC40B80CBDA19857E9DFF41E75802D2A2C0247122CE94A7D5DD8F5846
  
  27ACA0BE5C042A02FB7362C34614BCD17350AFB1F0EFDB09AE2F1C37FF21E007CD4DF1729AD932
  
  FA20A8F85C06201F9623D959B9E4A90CD04B6E4AE2C1795828B022D990D939D5D1992CB2DB807D
  
  072CEE580FA9A79F07FD6C4980C997EC524B57B350DCE4F9013B5BB07165DD6FA1902868328FA8
  
  0D3CD770B783818DE508E59383C96A05FBBA840831E129F0DBDD7B4AB05801E99E968EEB7A0106
  
  5AF04F11C641CADBE745EB6EA76CEE1AA8524E405F23A9D0683974A78879299600BDD0924FBF18
  
  908625872A63C38B4DDBBC8C764EBD99F0877FADB59B5F1D4FD9FD2FC1FC8C4F068B7B21B3787F
  
  728CD8CF5F52CE4A760746241C4A696F6BDBAD58A4D35041D744FBABDA2F883CB475E5F75D1ECB
  
  9056C3E52878FA0DDDAA30357906543F8440D1FEBC000297676E3C5AD462F825F1D302A2C7021D
  
  5A62595363A791A8EDBB22EDB9DB968BA0EEB4DF66E4622A04EB9FDB041DFB527CD404D62E4898
  
  D5E7ED464B0C24D58DAFCA7E891481363761D803A9457B7A2403E1816FC67167571D44E27469E7
  
  B1BC3AB85CAF808BB4043537D1B80CC490970D87A20857D868CBE901076419436A4E3C95C7C9B6
  
  0E3CEAC7DB19859EDE149FF3F07BA586BE12698F5C0CC9815FF2A6C62F7DD98DAC639084CA7003
  
  C99B9196CE6A6DC59CA0B202C9AF54620E38A0712AAC6E01D2711D40D012F15DCC51647721D4F7
  
  F31E29E6CD7EBB59842B01BFF8C7C424F0E58D4FD15D56DAE60A6450AF2254D368CCD09CC3FA90
  
  123C44ED4DDCD7F09D46C1354E5FC1A6C1901EFBDFBD4D6AD80EE95EA1B726B2309C0720424CD2
  
  5F72D9E5BF38B51271FD23EEA93013114B356370A3C9D438EBFA0590158654E2A3B7D4C887921C
  
  F6538D1BB294CBAC75CA66CCDDF0B7F7DF1748942A908C07EA13E6B809B1350B9D73CECADC98FA
  
  35933A81A34B7A6F8EDC7DC2AF60B2F0632962B401AAFE06CBC8EA4DC636406F2CED5FAE7AD0D9
  
  ED5023813855A83119423E4A114B413C3A016969A7481CE45E4E061ED9980FD961404B895D5A7E
  
  167B4D32E153DC778FCF5DA5EDEDF68D5707671B23DF2871C63FDBD6F9B9BCA9E7BB776B37107C
  
  38484453F24B4A3421A21D8797DB822236CA1A15D8719726C59D51F7332259E7CF23F28F1D903F
  
  100F9B0E8D8DE56CA3A99CA5B40D0622CC4D5AE6BA77112CEA79B10D0D5A808DA20D76B56FC499
  
  206587F6A0EBECA10AF73F8E091D82622BFABC52A28DCC8C295A24041869E6363CF589670D3471
  
  1F3BE64D02C861059FA9D10081FD2A0EA137C39ACFB2A83DCC9486195E40E99C0F28418B2C29C2
  
  9C01A8CE4D98F29A22E58CAA51E9ECAF4CA85FB59E18C2E53873A642E31BE8E47591DA6EC6D7C4
  
  E13055B8D08D6D1F0608A1080A38831280C98D7D47CFEBD3258432AC396BBF95B77E9470BA4B6C
  
  9A052CC8EBD7277C3B78514BDC491570B7D7B473C15CCEECB4D312C775BD8D99E46EBECF6C3533
  
  FFFD3E5BEF8D7B9424447999A91CE1880918D750EA345E6A10771DBEBDB1B4CCCE1474C07A9C4E
  
  A894017BC593024CC16B595DBC835F4EE8D9ADF7FE8671E0BDF36613FE7844C598A789CA784B9C
  
  97AD2361D7CDCB2E9BD45032A38D6B0EFDFC8F67FED8EB3CDE280D81C6DC9348BD48CC580D2958
  
  5658ACD4C3DBF2D7D85A78BCE9512D7F7BC2EDF7B76699545F3B1BCC202F53C8123B15F46D8F88
  
  1070F1232CC8FD212F15785FECFC6B83C0F439716A859B64239C1FA880D32F62376EEB12EC6C00
  
  235C9D550AFE84C981329B4B3DF17BC0E57E72D89058D1D3E6EDA91ECFEC0ECF0B802D41B4AFCC
  
  8DD250C13AECEDEAA1A0A6EE26F3351572849FF5E637A898D7B0A099D87012E274396A27E29A21
  
  DB29584ED72FB614A317E47C6177A9FBB2E5320BCD90CC086B7DCDE6ECEE01F597738AADDC7D9D
  
  33B02A09CECA2A389F16AADCD2FB02EF257BAB1265ECD97E25F0DE1C8E7526FB5F8C328FE37078
  
  A9D0F30D81B90A97A752505C8A2F8C9C7226E248AFC5B4318EB407B6A5DCE33FF5309794073737
  
  F72CB55D73FF66EE1C055B9A3E49302C11D7248F36CE257FB051674274D51CA4C0DE1F927A882D
  
  F54C567B73FF1D38556CD22716A3F269B9FDDD261FBAE4A916E0818EFA5C193AA00456DB6F7845
  
  FE41F715A8C0000E6FA8151895B3F21DD9BEF98D9CF674A60C8A1088502C6E09899D6456F4AEC9
  
  5875068E29E2199ECCB632F7A459324512A3BBE6E65132263EE3A4E2FB4205580F5DEE083FD84D
  
  48ABA8E3CFE81FB1465D3027FC69C260594ED380C47B6AE3DC2E35661906D98C0126FB7A80FA3E
  
  9A2DF727AE36048F6B083D8D8D8B1A8028B073B96CE4B5447050665BD926D5A1151F3E0CD63C60
  
  FA77FF2746D4A9E3E0F295770408CF348672EAC4772458125A8976BAC75469025B5AE8BC55540F
  
  41308CE31D273690C95D1173F05D953FBA2902E364885F821E14FB8153C749EFF100247E4AB315
  
  321D9C192E68B3FD7B51549B2224183195A549016D2A4BF943F37184743D6E5575F5A192E23290
  
  CA227E29F9BF15ABF4FAD388A9FB689A807AADD44048193B5B5B81CA9F9D7195803AE02D1A6A49
  
  00074E47313554A4F3B842F080510CE27645B65B57761A364D0F890115D8834EEBDFA247923AE1
  
  33AEDF8A46F1D1D410296E25E79C01F664136D8D219D324FA9B3349B1D5D180C025481EF9E7BF1
  
  100F242EE16EF433054913E0ECF29C4A0830E93FA9898F7B5505F87BDCC02101531C7C9C107BEB
  
  0BDECAE5A49BEB45D3BC0D869B441BB41A64A229DF5A40CF258B0178203F91318D97D529D922E8
  
  A82D36F34FFF98F0B0DC0984903B9DFE86932D96BC16C766FBAA4EE8449DD1BA7DE9ABEAD68989
  
  8BDC2155360C631458568E63B929DEF983C6E56B563394B25A44B25DFE2CBF86244D266E44B6D2
  
  DA18ACB4B2F537DB64110FC5187ECE20A514CE61209956A6555B35818E40A7036B8402C6E7F957
  
  0BA69BDDFD8CD3C77478ED8491C1B721DC66078C59097F4F328BA45D7711D5F105AB8E5C0D3C5C
  
  F88CC85A2AD9D61B39B7D5BFD41DD227E50AC8244A00D9EFD6C13679B415B0A0DAFEF87F2D0E9C
  
  E1FD835736DF865C151628CD950E7DBC216AB359D4575BC46D610D6D4A0B50351966541D60D075
  
  D98C1E28A0602F0876C3877050292E2469B66C8473420266AA8555F39F01A8C1EA343E3B42E1A8
  
  F362DEC13E6B1CA2150B54A2896D413CBABC37515587400994662F9D892B1ECC5617D309DE995B
  
  F881BB27B0D1EB7EC8318ADC767A76ECE369E01BA8DB3E4797A78FC81A0852DC3FF3758A51589D
  
  BB0C8981CBF74076E83F42109DB8E11C9FA042A13F7866D34137D02681CCC2A8A24BDA46E9DBAC
  
  BF8D771B9EFEA416168992D4A0C5489848C5FCEEB6FEED260DF9D39F576EE08492B5BE18E34D1B
  
  7C4F05A828B2A8205634428F0169B58C95D6019B899FCD1910B4518D0B62861FC1803083617858
  
  3D3273555D54206AB9624DE4658CCAF3FF2DA8DDB07A006F569F05AE0EC5E8BBA69E336B5A1BB0
  
  A62C4DEA0ACFAB694374484EB3F531805445023CCB2A58832AA92DA536F0563AFC31B0C539C566
  
  82633366B4D9DD8AFFD07071B8A172123901EE104E0A6AE2E3FE7AF22F23C3E4420F3B1C26CDFF
  
  255186F1002FA7836BD49637C480DF686F2FCE81C3CAD72EEC91046A3F2573F3A6844418FA4333
  
  96D24B40272E3B580B66EFB2ADA4DEFAB6DAD03B7C2BED09108A353FC68A77014365BCED57FB50
  
  5FC75F59C2402FDC24A886CF7B64B9FA13AB380DDA7DBF27B6B04C7FF37F61C9997B969654F75D
  
  A9929395371BFFB0D5B4FFFAC278C1E3D26E9D02C81891E8FABEFF9935FB2B6EAA225B6A223D0E
  
  D3DA70173215D25D7A3EE298AC98B9B3433A7060B52B9B1783F85E18602832228D139A86B37C3A
  
  FFE85F8552437DDEF469ACB48B86FB731379EB31940B6835CD47C640600082F3EB2E526B22F49C
  
  504721A32906DCF84888E8D0612435994D7475E23B0D6E6F829A5997812E8B53DB03116767DCC1
  
  90F373E1C58A786564AB2846C95CE3A63DA0C9BF7B5F41C2A16201E2F2232BF05E4E7015E0B898
  
  E410C7934616D499B35E96E4FB738165B8ED6708F9028114F3EFBF5B4C9288422F206AD6324AEC
  
  120A3BC0AFB1EBBA7639C8D0209DB2C432155ED7124110F3599D8E6CB9167435A06057308743D7
  
  DB1CB5CA1F1774FD4AA3BE52C7B8B04234CB4B92293DA24ACB5C03E38AD4ACF2D5BF78378A52B1
  
  D0443A548FADE2ACD6ADDCA315674D917CBFFDD48FFD4360721A9F3FA0F9F9EAF194996A33A524
  
  C8B374AACE6A364F15560886F4378F5679AF393C195C56817CFC26ADA9679180274303DDD38A41
  
  820954702774A160227CD496E147859CF2523466F8951D1BDE79AA7D21195BBEBD2DF3DBD12942
  
  2A11241FA8009F43421BF7973045343BC959CFE22530A9C3B9AE5F271BC9273756171B19885793
  
  97D4863133AF782A9B15B2714C77C6FD56077C00902C057184AD01B10B5556A6E07B6B062647AB
  
  22C783519B87E2D9A2BE689E32A95DFBD2865E585CFB0116A4110D40DAFCD0DD87709DDEC40B87
  
  4433B29CF6AA9F9406CE62FFEA07A59AFEF28E49E7BBA32C7F6066995414E9EE5E2048A298177A
  
  13DAC03E5DF94334EB6E124E86E837880746D2E63D2C49B4D0D5872991431447CE8E242A35DE34
  
  6C1D2F3DE7443EA05C2ECAE2518B883A55DDDBF53BD64A7351930C6137D351D4A88908E133A914
  
  4ED0D2001D7BF8F4CAB42242FD0B38BE90FA76816D816797A73D3B9891A0FB1950723BBCB97E15
  
  1116E7DAA5B18FED8DBBBD2FFA0B6115E256EE6755E172DE0C8F2515A494E698CCBDE81D710514
  
  AE7F732992096454BFA76172EA259DD9CB0FA5EC1BE1050C1553B34EE9C206B540DC4F53173C88
  
  B80A88B183B63949CCBCFFC64E0B9C2A9C4BC838DBD2B48AAAA1BA7B40EF4311E0AEA51E8BB2DE
  
  3508BE43E33D63D13BE33FF9546259D0EA541CDCB46321AD22773DE75726823F32EC1D37ED1122
  
  65BFBD416D0EF743B0420B73E0D73E1E8101D53E63279FBCC03B580E00066348440569704E32CF
  
  D40AED353FFC3ED3FE2D0A145867EE27FCB184E4FC03AF5F9F01767F9B2456281D326DB639BCA6
  
  6223ABA7CC63CD678F663F61B0408F1A1976EDE9F96FCCFBCB0AD29C8E27CCD81CC6C5E697B304
  
  97DD51F00F3FE7FE33F931A17FB7540263D7F749A34007D2C7CB2EE57A075C4333E2214B866661
  
  743E487ED761B8774E076ACBF9C2DE66992C70189A1EEB61B49068F413CB3851E1ED18257407B8
  
  ECB78EA381D5E423907B194E7FD9DA950C1A502A0A61ABAA12E71102792F7CF05AE65A7C631A96
  
  37679B2C4BC651E21DEF22EE339204DB722D1FDB119F9798C718E4EC9439C472D89D99612F71C9
  
  F49890C596C28BA324C5A79535AD77A5E36E1841F829DB7477CC63A944DC16DF273D376B230653
  
  C50A97F5B9590DA325210B935B68DB01B80CA6596ED2AC5BB0243FD75EF8F6891EF0A3C01EBF21
  
  FD96DAF4DAA83A5A89485490A6FC9BC693B28B0553EFFFE574A8B3C5BBEC36E657C2CDF4DF45F2
  
  47C59AB1EE5980725C51C43DC289E21FE69791D9436B49DFC122C44BE918733E70E3844CEDE633
  
  4932C5207898D707AFC2BE3AE1322CE0BC8A58F8101166B048CD6E94B392A54BA88115F08C1066
  
  4F417025B8AD2756EA62C9945999E536D1576B5E1D3327D516609D1B371A0E9B0B9FFA934B8578
  
  0D51EA2AD2AEA9FDB6419DD0485B95AF90A38B1EF5F68A1CC5C7319E4A53BD9BDD208FCD59B264
  
  BB05DF3D7E571E81547EA4815683CFF432345F717CAF3E20E627CB39B9C434F659AF97760230C8
  
  4D0C809A9F86EC721FF113D84D94FA2F37ACA9A8C4C6A2763E2F28C9A7C8220FE7F8A99209E094
  
  ED621B684B69FDA9194A7CCCD51FA49933EA157061FA23DD5FB90265E4EC9A818C1379D5E50809
  
  FC7EEE1F12D5B1DB33C6C21DF11F0D9B49A3A2D2A9F39E056B0604B6FE0FAE6F09B18F59B2C197
  
  6592E58B746D3A99AF56B1D5F2AF93A40E43CF30E1CA184D1E898C94802FF9B2365AF38D0CEDEF
  
  638B210931772BC190E4D40F4C5A1212DB95EA596DB64C7C0609C6814459DFA2286EBB5EE178FE
  
  C6AFFC3B9B520DB8DDB4EB5D4222D869799FD198C5D64E4F3887583EDFCA2B8F511F90B0D29FD0
  
  40D1427FF12F09664593E7EF1C0B426DC41061F34ECE69367F852FCD723499E564C77614CE2434
  
  5C0D41011AAE7960ADCD3E2D63EE16177D198975EF288842FA5714AFF9E533597855A0827FA444
  
  CC687E8027EC98CDB3606FEC5A045E2AC87E90EA0050768699C9598057B50310D387E91055E974
  
  AEBB7C9136C6986B279BBE5E05AA3091E97C7104E1EEB0BCE9D3448D86644340A0D11D9AC4B6CB
  
  DB4BE4D6CFF130833FAE4F03249C45298571455480603F5EFE2C1892875737ED1D561C3938689E
  
  7CB30DF5E26D479083CA61017650592ADB01BF6DD12807B65F2BEB6C8FC949AC5A1FFBE8079817
  
  934BC8897E251F4C6B27E7B6B5247F5E48C39C84AB8B70B14A868553B5F205F79B8160DEDE2172
  
  A0FF07AEF0735780736E5EBEF7E8187645578989518E1337D352BDB192AF61858778D21D7B44A9
  
  7C26F44564852788556E84D60619D1CC84E4B4A0F49CAD9B7B713930C957C632117674C503120F
  
  C564A3318560C1C57CC76F78B8E1FCA4E24EFE078FDE51A24D12CE1B799A07230441A08EACF0C7
  
  9D514169E543ADE9B97EEEFBC6C50CEA20D5AF481E8F2D5B623C444B409FCB1CAED7C3EA7754D6
  
  AD14BBE11D707D6FD3A70384E275DD06A809793B873E646BA143BE816971139F62FE007C313F7C
  
  C7370E1A3EFD18FFF7BDD8BCC1C67761A6D1EAECC7D953C58596C0B54113C8EB522FE6FD8068F0
  
  02D60C7EE92491E2F8D509A6EB872197C9FED96D963C65FC98F3DDFA3748D33A2A82C22CA4DFB7
  
  DDD49F7D622E859FE8F0DDF95144E6BBE906167CCED0D65EF05332E59D739066859809F0795E07
  
  DF9064968C5648134F527337CC5F610D5B941F0AA975F6817B920A3118EA63DE7FFF3D59BF1451
  
  E2474BFE57C94E03AC416CFDFCA559481BB587A9F8366260A884A22CE93FA8A172AB770C2DC5B0
  
  0B73C9FD9FDF5E242BA9B845FA4DB9CDCA2149A4479EA77E69E9F3742AB5711517BFCDB1B3C194
  
  7231C437D9E50C42218C3568ACD953D742D9E093DEFD04C07F2D5F151D00B1CAD086EFD5B10446
  
  748524C070123F21A09EEA839E381527DF98DE1B735C1111628A0FCD75AD863AE47A34207DF2C7
  
  8D1A50E7AF312BCC999DE49BE0F54AE7337B2B5D83C4F5507A5355C2CE2900CDE51D25A41B7407
  
  2134074708F558DDC22C14C7424A611E281413FEF9A438C8DE4BBA6BC67A6F26F0E1ED9254513D
  
  20EFE361A7426B2E9BAD4889152298ED397C6AE1B7E0AA1F93A4A717C13439B02399C773DE87E5
  
  A7ADA2B1514424939F44F114E0E663AEFFBF7BAED51670D789A671862566777C93E61E4BB5E744
  
  FBFAED947BD896DA9E1C947A1E9D328D6B2B38B23CF0ED78BFC399B9BC395F08DBF457FAB6E43E
  
  84744858F94A729DE846AA8E888C1A215C23A297C2D7A69F3C60DA53ED12FAE643A7FC15FBB680
  
  3A8ED275DB3D1E0199A71F203C8FE1F58F39289303BF7AEE928C0927EF34F1614C23C89E6FE3FB
  
  13AB6FB91EB3DC4718A8C031D3C7EC111F09AC79AE3F6245D0940A4284FACCEDA645A129A5241D
  
  91E81B627189E1809E4E4CB8690D7D16845C0E97EEFD7F88FEA959FB55F70830659CB2002C6913
  
  7870DA6E061210344B5CC6B9D03AC7B5441BDAA81C25508E3D5DD7645F7FDBE1C0E9D2360045AF
  
  2D76F46EE26CD703717A7C2E83406AF63A4378F1340357735D13B6C6A1E9437087FAE7C42E3CC5
  
  EB89EB2184DA87E6B523163D16CB221FB546C039774F1C7E4C2D19C648FF1D078691CB7A90524F
  
  AE0F1990289F3A01BE5B4BE31544102DB04EB64950A6D633E6DD1E70C1B5B50FE00D1270AF7DA1
  
  C5AE22EE0BC7D63D6ED9EDBBC2DB21A657B7C6E39284551B66E959EF624DAE21EF0598E598E5FA
  
  D8DEEE0B87AE1CA77C8902CC8927E74B0599B8DF867DDB285F30817639243DB7F97191FC15AFCD
  
  34FEF8ACFAF926AE60C13DF70ADEEE70B4D2DEF56DD6890CACA39E94CACB2E01BDCE1A29E96643
  
  CC9329028C931A5F748426032CD586E6D759033F1E46833E93EFCA0AD895CEF1311380B8782B6C
  
  15EDFFC736A939C6CA53BDF65F88484E4053B076358780D1549CD6FD0234587A4616A008E6FAA7
  
  E5D9EC458FB293B143AF0858A8532FC6B9E6F69797CC27548F1961877B9C749362C2E3BD41056B
  
  68E284267156C72A8909A86037F6A755A82DF34999C6957C415212D060C15114D5FDAFDF01B3DD
  
  563428B401E85105D7BDD9AA98E54670561354D082B5AE3C370EF9E2AB1BF8A8E3BF61B4348C0C
  
  C6AD2795B453F8F81D36DBA8847143DD955203C9A0DFA23E32EC2355AFD6678A2B05FE6E46CDAE
  
  3E8E85ADB4AB71B7F84D1266EC92A846F08170694AD6657CA47F560535D0FF5725C41CD0FB3219
  
  B9BCA5F9545658248D79896A8B5DDF1968D4D95A37ECEC7F44F2A4D6888214FB19541ADCA69F72
  
  94BEF62C0520E95CBA4A2B14D12BAD004E6468DC136C89AC5065719B9175B8A1192C83A43595B2
  
  66A196E820EAC6CA3547374FB3BF23CDF14D939B67DFC5DEA9F98D80545BF93CA67240F97A1A5B
  
  CD137F2A42BDEE7552968623E6CA659FA42EC5C2CBBEF2E2706D06E0E2CEA225482214B9B6C45D
  
  97DAF24899EE8BC6D8A980E5621075B9CE837B724340066B74C013E8AD806241DA5A18BC3E9657
  
  EFFD4A1443704B90FEAFE0A407C7C2E880FE970560BAB064935F209B1971E03C33B2B37AFB4428
  
  01A9C4D63A6A93910B607D424416620559E7B95A50E879A8A0607A2CFAB26D40858B955C8CBE4C
  
  C55B6736F20EB7439B1CB96CF00E91690659147C7D1608E5260A2E84D749D90708BFDA92BD5834
  
  FC22619A51764DB4D8CAE6463AAE80503F42CB4E7830BE796E4DCB10A1EADD636C79DD1C174C26
  
  DD44830C38E92BB25DFA70DFCBBB2D0B692D3C5917FB669BB36AB2C2C26ABF2B35C0B581F76D77
  
  64644DF89EE87862DE3D5BC1EDC74912E4F2799836023EF89E5E817DF6252B4F953DA4FD0BC02A
  
  4E22FA762048837FA8C99439BB1FCBF5E215B5B4368575E8D6769E3D01A9A252D7B20327B9B315
  
  95C01BACCB65A38FF04A5613698AF2FA63B36BC6942ED241E1ECEB7A9F2E8E381D300329CBD4E3
  
  1B19BA0AFF6415569F8774B28CF9E6D343413AA0D41DC3C3F686843BB1B7DAA242A635CF345137
  
  B3FD4B6162A9DEEA6BFF1E719DF602A8D79CD5A60BB11F26D437BE8B4A039D6C2D64ABED520C07
  
  F09E8037A8D76D7E3ABB5946D4837F1B12274D0AFAB29A44E027B2A8C81574B846A7BA94756AD8
  
  F33D2B76C79FE4D94CB3749A64ECAD8AE9D4D4EE219D5FE4524EC95CCB89BA3C73F219A88F674B
  
  2D40E2C5B4497903FAEA7BC3C7F22590F8F2D6B62151885382150E9611BBC33D9ADCE695FBF947
  
  2AF79EBEA09169FA0047E09D9499D7A977ED74E4DEE3BFEF1EFE0193AAAF9B8A2E285ACE63FCB0
  
  4DD5AA4FD311EB8005E81DF970D2C3927B9327C4093236BC98FEAC8E130001239A81C426D477C7
  
  B68AAC466820F7E655251550CC979079F3200F12B6DC35C84DC5A19EB0630BBF3CBB2539AED37F
  
  4EABC464CC5A8BFE75593C7F3AA5BEBA6CEE1AA2DC43E40AA823232D66714C058F36A012A922EB
  
  0FA0B58510C1239004B84730C1C69AEB4A38084B6E465D9EA04580B8110C9B1B023CBD1EA44753
  
  F7C87390A884BFAC825D84B93CE4AB5136264B8A1E0C3166E94E8EFA9072A10AFB760FF2265012
  
  A254F0755F81E1E42ACE3CF03D443D81F237D7DD9555F2447155DD76DC076F3BFC492392828705
  
  3EE6BE05DDFE30AF2016FEA53154ACA91A6089E9807455A536753078B7294411751450CE4ED63D
  
  0DA4C9907DA2136DE96A5289B783346CE7E6DD2C1D85395F91373C139B3CFFC5DF1A2C47F32537
  
  232691820BE497E818BCA561345707AD98249DC40062E30D647FA979EFAF4FA50AD9CC270D47ED
  
  68E1E462F54EB69E6D734C6DDB41B5C2B1D6281AD3B9F497B3B96D0C94AF938E9E785A96DE5DEE
  
  9ADFF8340600B3C173B6939B5B06B8F1341276F727EA16933151D7DA8F254786EBD6A0372B10E2
  
  79058D2327F2620B039C9453EFA9B859BB5BD459E7CCCC36B80221932668403F62BD00D1E31758
  
  E647FEC1FB816B6C52451E6FFC50EA8D52277178E3C4AF5B2A59F383B271FD132E216945B69A34
  
  B13650F5EEF129A972A695FF2BA138E10935A564AF918A66C2D51CD942DE7F843127A3DB82875F
  
  1A14662B0C3A15BE4BBE1D875F8CBE54C7488F4131074822FD47C59AA4ACF18DA9714E2619C8D1
  
  8A9EBD5098AAAA1150D83681A6E8CCB070784B128F736BFB43CAF5F239E9934878C02328BD3084
  
  CF52EEB20A26BC36E76A8DFB36C9C1397B16D16224DBB9C64ADED191E0E53C61BE7D056355F20A
  
  1AD4EE38E1EC8C1927C2CAFD36FFAC24240BF07CE01FF3B5CC5866B4A3FED0BEB8695E23C1E16D
  
  6DE2883B8A66A2400313B263EC2EE6348BE002BE0AC2B5B406E392C53FD41A144F7FF24BDE9892
  
  7AED17BDE620D5EE8F0495A9E915FC0F7FC69F8655023F3D00E3309342340AFD3F00CE76D50B48
  
  5E1AF9DCA4D3F2A40F7B02558949DDEB6DD69A5E67B8B5DAA3956EF97E710CC1BAA7476B8B534D
  
  48596240555C7A220CB029664AD274F478903E94AF66026F8562CD6C19837CE9265CB6AE578217
  
  0336FF4C7A0EA5C28E069006CC760D3B535867BD376C0E6BFA43A9DE5F6D888211DB06B6F3E5DD
  
  AA666609CA7E2291EE0596731E4CE79F34FE0559AE8E1C29E8D60015A445C34F8E643B53372EB0
  
  5331E58197096478DFC49B7F092A6209A2D209DC02EEB1B7D7B12E89A0551C06D1C3F3793D745E
  
  BC6D2D6C57628E5BDFAE09936976D7C9AFB653CE4E6E198572CE46180FF9EB009CFE450BA26BB5
  
  705525051655C355B5D61145A7EE06DFA487B311DE72A975945FBB64810434F8D739FE95632601
  
  A46C6C95C8BE365245A89CF7634735DA14CC68E23F4E9E82AC0E0F85ADE8628BA1BA4F9118F800
  
  7237990280C19061A305B87BDE6FBDABE71A72740E338925AA871C918D927F28ABB19FFD2A1261
  
  C82CD3A47B76248828300E14D71C75B777375D2970DF345C37F3BE01E56A047C99D27F41D81DF0
  
  43C1103352FBA194EAAA50055DAB070346A20F39FB007BEBA34627337C1B71465DE82D2221194D
  
  D5A61B666683F09E21F76418A8086FA4B2ADF0C94D5A702A2BE6BBA71D2A9F8767B2A390229450
  
  EB9867BEA6859EAD686C61FB52157036BA8F62468CB934E10DA07C43942B964A92C279E3DF2635
  
  541FF403CC50F7DAF1F1146783B0D2906F674273388085A1F697E6DD821649569B8CEA2920830E
  
  95A966358FC6BD7F8BA0B93495D054967B4DBF8D92EB337F50BE0DD9A03C23D2F5B5D9C73DFA4F
  
  7E01125425EE62ED9CEF7810C88553CC671A7DF9295F50DC482440E40D65D093FB5A39C4084B5A
  
  39A7C13B426BD9BA5E8DE29FEFCF03915C4DF570CFD8546B274B875FD0F80F57F1A0DA69F09DCD
  
  F98D279C0001AE6DEACE32E3B2D3443524C5FE1CD2770D7F873201442B1CC63F3CC33D2EDC0E14
  
  9327AE6C9E9720B346A3D783A0EB6D39E10C6D8C42E310C37AE06BE77056F58ED39D35BB2BE86E
  
  EC0BAABE99682DE457316B7226E0C968807D33772A20D50658353D2A6F0804E6F22584AF5887E3
  
  6AA4E7EF9D470153A11759AD42DA6EB9FC0AB5496547CAD0EB7243D0371AF330E9DEF3BBDE115B
  
  C312D0784932BE630ACF1853BC7CB9724EF91B5BBC42ED211A9FBF9105ED50DBEC61EEA28858E4
  
  B579EF2929F285ACC101311E182A27DC8F05A8BB074C559C37083D5AADA202B0BC3BEAFB7831E8
  
  79916C5FAA116BF4B4DC68DF94403DB1134D96A72A81F70D2F16FAC5768B4BB454C8DCED202A31
  
  221B25B2E3F8DC912C38FC8087F2C88B2A54F9937FD257110AB63FFED01D85D4B1161F08420F22
  
  2725FEC4B5DC4D2AF65A8EDBD3B59E4ADBFC2478E9850B6ABA868553DCB23313BBF6D03D178FF2
  
  FDCF3393B051F799D6C60AB7D57D62FD23A3F076915882B9BE1E3ED0A3DA893D6BB69A9BD15C8C
  
  607F0213D34673F8FEDA8187DF8C28E6E4A7B1FB92B11E92294203A36F95790EAD1B41CC833673
  
  3FB6A0189356C16636BE965A20E8959474834794E4D8363443CA4678901141D8BFDCC31B94BFD3
  
  CF9E54C566723BB52BFC868EC02AE2B96C657FB4FE9FBBAEAB700075588C874F559F3C85E007AD
  
  CF76B3E0372ED97E3E9775CFCE89DB79D3968DE2F396DDF4C6F2B65C909A191431F5E2134BB886
  
  3A620E2D537719D2F82FBD802C388EA66C454B8DEC27B7D6624FFAA31F85C5B13DA941EE9A7C93
  
  A5F9EE3C537B709656696929840CC05D2E60B285CE114018F19D856DE6A1408246C3A2ED085ABE
  
  E10C7B7D1A8080BDE2AAEC62F5D30C6EEDB6733EB97B626435C9CAB5FB56810E3E1924AB170102
  
  AEB24699661DB27C5A92F40E4BD4A88697EA623A3F2F80E3F217D59B50649085753E9F16C55BD1
  
  C45D2C57297689D12F55F62EA348B5FF6580B48DA85B9BA058349024D1DDC77BBA000AC0C2B635
  
  DE122E3A9EEC3434BC9B97B3546BC7850C3A472101002CF05AECED688C38D5AB82966E45AC4CF7
  
  FF266AE0F68669B5EA49C65A65ACDBF9A830988BB625A8263E570EA2C6D6A786277345EE7BD28F
  
  675AA6474ADD78E016D599B415B054F67EB1DE9BE57710DF2122405B482018D248B29619860EA3
  
  A268C586775761E62651D1BCCD3775647DFBE84A97C4EB66D204CE839B6DF81E8970834C193FAB
  
  73FD40FDAD28D249C3A086759D0F7A23457B91240AA045FB450EBF2F5DF24E5123DFFBC7A633EF
  
  723081ACBBEBD8D99C41B7ABD6C1B3CBB52ECA4976F7487AD77808052D81CE6F128109881C32F3
  
  827F5EF59022301AE7917B2D2E5C56FC82386CC1E0684FB6B43A67B51AE8B12E5B82C5214EB798
  
  38A004A4D704E03BA65038B87399EE1F93EA4CDFFD2CBFA0AE1C1E81073BD88202015EB9ED570E
  
  DB33E01777343DE3F8598EBF0CE1C79F8DBF49AC9A6E26ABE56D4E36D7452E6BF7CD81A990B6AB
  
  B05824BA2C2988D509E98E9A9ECCE3F869E1A301E7A8D69C293FC60506C762A65E66A333731BB7
  
  7886E82DFFAB187E264BB8E939125244A658DB0EF727428969C86E4240B8603F6CEF7467BA500B
  
  FB2A0461F8929E652EB7C684B6356A4F1B01317BDE4C0E278BC9C0D19D7F0F1066B7915C15482D
  
  347EA313239390884645B9D9216096257AA199425944B88B8E60D1C9D818E6C7FA57484E573FAF
  
  2681901CFFA7B03837251BDCA42963597D59F5C47CCF4FE61963D6997E88DAA6A80189F54108AD
  
  91A615519EBCAA0294CE0D2A3D6D51BA23AA538561AACB1859F9D8E7C7FBEEDFFA59FDA30C4930
  
  F3C70288AE3B7DB6835613D7975AFBF1254ED80A293C286A400E74816D07AEB927730C397EB1CF
  
  041153FC821EE357CF8D9C1C55CA1B578B603A9946E8B623AB642F227041A18A987C8A826B8E67
  
  7F8DEF5B1A7A896F2D04CA19703A9492C35748A0EB34614843CB6435E36650B1D0311D8862E78F
  
  A870CBCF6A1A6DA31FC1BCBE97B02B9F9D063975A8F4B681CEF8D7170C1D66C41BD8BBED7C4DE4
  
  5ED8EA4D5DDE0FBC9B11349AFFFABF8C7C62CF72064F93CD36EE781E45938513E6517D325137B3
  
  C8B07F6C85CEC99FEE73C19E3319C4DE54973E9F237FD4F5F522A1E247D13A5A3F76D9A223C1DC
  
  05DD98AF2F2870DDEECD1D17816F6362BA4E4C3E767823496297BD60D5AE5F3BB16C47946E1B9D
  
  599EE1945DE81896C20E0E1EE5BCCA3A817F140DAB9106C6A39396356440E28C8C37F09083C2B3
  
  8C0AF322A5A6E9911963BCB674D63BFDF08FE2A7378DFC5292CAF29E29F2C6EFF00299E23673CD
  
  BF97B919E4DEAB76A52BB588CFF489D6C984BE6945121555D2D11D5760935A18C7ED5794A8590C
  
  A9EE7CC716E12E5E50604E4DE26AE7E8198EF72323B8B449C7059831FE2B32C0B7ED4F977D455A
  
  74AC42335F92FABFC69BF798F3505987E10E6EA4B1EBA7DACDF2D8F76A14031698506F920439B5
  
  542E334FB3880BEC75609926EE99529C4E923E39369D453A4C86CAE241DAD49999819B6D3CC8ED
  
  7F99C4816DD01065DD385D47A56B3FED36E1FB26174E0428677D4BC535A2CB35646C17AC6214F9
  
  3C68C7B702D168B4439FD66A44EA76BA805180535EB32DBBFEC29D4B453317C6F35E21CB482490
  
  74F1C89B3DC6A53FE588F8DB408EBA1C60C9F2EA013F1517A8DB3CC9A097A2643C0CE53EFFE5A5
  
  E5B26CF40D3A9324F0BD35B6F526E83D2A381E976E00AF14E7F4FE22ADBB71236A5068E297C7D7
  
  0994672D86FFBDBED454659F54CAF5A364FEC8265ABA8F4F2A047D54B883E81AD48D094DE78A0A
  
  D1389F5F7BD0B36B3FA11F8864D21E57F453ACBE2A892EB6F126C9881799C021502428B0BF483D
  
  304777DC0AFB7BACCFA42AAE43121A245FAD4CE23248102CAF93C72016942B556CE59A2856BDD8
  
  7CAB9A22FC690B30ECF8926699E101D8F74D98F2759E819148E54EED6392F0B22030AFA655E07B
  
  E6B0F6A58266D5AAD8365D279FA51584ED4BDF5E981E31732868789362A13F68D7EEC3ECCF46D9
  
  1857482DCA018944AABF993F90635C6028012240D8C670BE48E4BAD29BBC118DA0B733E2019502
  
  09F2C608798E3FC6CD3699B61D207753A5C7E31D5ADB610F7A9FF36C6E73442569F025EA5E8A4D
  
  FA89E43F10B44C907024316F07B4183B202E8677F4449520CC06361F075BCC065A0C4911373281
  
  88FAC72EC24B9B52500D103737D40A311D5752EBA5F06EB593B56147F708914D474B7E67EC48C7
  
  32D40AB7C8671E0C80295DE3B2CE69C9759B536520EBDA938729214C68FFEFCA119B865C2A4BA5
  
  15986323AD149636791AD00B328E0E2D47AECF406A43D94FC87CD50AC65C5D4E55EB24F48938E2
  
  8305E1DF0C6ADA42CA47691246860F50A2A6292F0590D6F8C4076F3C6325AD25FAA56A361C03C2
  
  03694A39103DD209C04B85E5B740CEC222993C676750BF937448E4B0EFC94903FA04A658951108
  
  DDDC3DECCB7B71B544D030E6DDCDDDD5D8ABBE90862E8CB4E65C298F2AE4D6AB773091F637CF8C
  
  CA75568E46C5C3F6D837954E7C1E4AED3C449FBDC85A31C87D457485D0C1FB4C97957925EABCAF
  
  80AAB9607881FD1EE9DDB9869273A69AE28EE67E694A7AC15B38BCAE76120E84A3A570466AF88A
  
  C140243B90CE2A0A206F726ACA103D4AADEF97E5B5E4C753FB08381820EC8056288BCAF86DD714
  
  BC55BAE80E8670802A30B24361B4830E55563A74E5DB9862CE0C5AE972EF9188A9D961ECA5EFE4
  
  45DD11FF240B19766D261CAC32F2FA24B8DF95DD9A5AE6BC5ABD66E0883DE81DAC808EC9E64D82
  
  06BF34D3D418CD1502C1BF865FB89046BF228323C9B259FEDC44A24B41AFF7D4E6227F33CBC59D
  
  BB33633D31BA0F654F48762DE5D7B0A03079E67206C4661BC410F3D5F46DF102741C5949AF61C8
  
  BDB8552BA01AEEBAA183ED57681FA2FD92DD4C40E8AB10AAD4857888DDEFA5B8490191A629C0DA
  
  6F099607F85ED12417E879D770E016D297ED31E4D36082B67002F833561227A28891B6D2BDC3CA
  
  CF3F6CA3D833E8B1E587B4900F5BCDB295DD1626BFCD5D9BC31B8CA086E264F25599BE42E07D58
  
  ADA6E054970DDBEBA58D7185EB003AAA869138FB31EA477C881E556A0B35841AC095E226523B32
  
  773E128F541068A77B43F61BA7891F37781FC627C39589BA4DBCA4DD98C7BFA311A7CB6EBC7EF0
  
  A2A25393D7BD84D00D951D4CF9D9A1834038838830A50352DF68C9701D0CE7584626BA1ADF1D00
  
  B592F34897EBEC6280DA5223E46A0DB875CB10BB772B7CD16F26AE19CB1F2E554374E89CD4F7F2
  
  7485D9169FD48354317B1646578D956553430BFF2090217B15BAB550A8E0F36DFD6088A5E9D52D
  
  6B5303D9E2C0AEB607749384DF0CE76644334FF36C35387D76FF85B8064460C28FC895AA0B9994
  
  C3670EA26E8335BF331F4B406836CB7EA457258912C6DF48042050C7D333BC02FEE4748909FB45
  
  8DD5D55E7FD04497CE34DBE82E88D6AE641250863B8A57B11624E62CEDD80E05FEBADBA6466363
  
  ECECB921D11DF5939891E5B5CABB36FBDF822EBF17D950EFF3F4E850CEDC5F0FFFC97AA162BFF8
  
  A67CD77EEDDCF5D5FC48A303DEB2EE716B0C6F53469EE23B553D65FC4CDE004A2940C71E4BA72C
  
  1482B2FD2ABFC6E8A877A807486D86DA69611ADFAB9E76527E6AC15006E26DFDCC3314F24D277C
  
  53305160A9EFD4372258C69E8457EB24AE163AE997DA692DDBD6F9F6B4A0A80AC2C2AFEC71BEE1
  
  3C8EDF43F7A622B2BF0C860FCD6405704D60B6C71642F27DDFC08A8A02C6108B9036B5F7CAFBA0
  
  BC0DD2EE4AD2A3D063E2AA078FCE226B11467BAF992719B55DDF5FFCE2B34466D4CBFA8FC5647C
  
  222EBD11EE60BC567F05AA38704DDAFEC8937469A83D09643F7B798EB28E5DA823B9A06B7BC8A5
  
  C05DC705F0A1194FE17D7948940395617AC25BC922B3C838C507C1CAA95B65A2A5F41929D75D3B
  
  1EDC261930CE41163219C8827803ED5AC50BF85AF7C69D57286E5120C0F08114BDC3278FCDF774
  
  3FC7D8D5EA3B4D3F2B2F3B7B6C4D62D20A7D98AABDB9B9DD7739561B15FCEE8139B81EE60331D0
  
  939E99099F2B167A0AAA9E85D803062ECC6ED36916C75EB58243C2825BE97F3021D23D73A15615
  
  12EA904A94924AE1B66F5AA60AFE3E47E5A37E5BC53572BBD578AE923C5465F824056703DD1A1F
  
  5EFADD557CFA322C46BC944199190C9ABB2604DF2A7B55480C5D7035AFB7C7A7459A0A236573B9
  
  91F462ADEF5953AB2F45CD837DB21CADA6D39CFFDBA3554C166BA7F1FD28953FC38B853627FA21
  
  75537144A6627035A512B2D36DA71BDA234132D7C2CEC4F29750C14FB8196D256F05922F26A3DA
  
  E22E4E14B52196F8CF7261CE0CBABDAC1A2C2E0541B0ABBC8E09B1731DDEBDD541D9557AFBD90F
  
  3D84A8789EED596F6DEFD34E4651B7FF9DE1CC419FC7FAF1A3E7D7EE147D60686EFD5F55F5D911
  
  EFDD55C4E0BA647AD599E0CE1405F71669FAB6791F465E7FC1C247AB4E52C64FB2E6A18D4463B9
  
  95CF637998CB91BEB1B68A8C3E4460F8F1E35169F78FAC2D6677E243854D6F6C8685E5199D8FB7
  
  25E383CF338B276FE785954434EE8768FB95311D47FD3273751E4CDECF0CDE3F77A7513B39E319
  
  186B4495016FB97B4D996F4FB86AFD00EC9F54AC44AC519BBA5DEBFD5F39286817B25695750E1A
  
  4F210DC8C06A862F1F88CE3AD7D5764581E588D472B8B407CD074A5CCB39D6E138FC3E58C9C096
  
  4B8C0195847A7BC0E58E796EE60A10FE003F26231EA0F0EB7E100DD6890F6AFB8C2290290A97DE
  
  4EF1F5BFFC07292D2B4D2618A430FF3E115BFB35116835891EEDEF4D9456DCC8A25DF5429BDB52
  
  7151CA42570F44CF36D6FD31A10D58631F5966579495D6217A21DC436B7E26ACE1C03E62CEAEA0
  
  7C09A6711FA6B7F34504C4E0799E797D4D2775FFD0E9C2CED9DCC8F64F8639DF8B20EA979708C5
  
  81BFC54F08BABE9F5384E357885C54AC33E0FED272154843631CE03EFD93DF01D1600BE65877B1
  
  51C41219367641ED0192E12F26F871B13ECB2582F75CA7F1BAB3DF0B89942BAD036E9AC7A4C72D
  
  6EBB0BDDBAF2F6F9AD284CFDDF2934B4EB86E94999D1433EFA2E278394DDF686188AA8E6C15179
  
  AA232AAD24D5036A39A49C84BF33AC864FD76BC91D8E915F0A604B8A4AA99836DEE01D72E06596
  
  88FBD19195D92F5C7FD98C86804E7D3F7E818CC61B377ED48B5DBD744351564FD4E82B6DEB1A73
  
  B964684985FCBAB97AC903DDE810E01B27C44267B9D6C3CFDA7400CB922F6DCC6B711C045C7C1E
  
  BA276EE915936643A0A6CEB49C0DEA87B0D67B4294F21F30FFD59626D777D5E63B5400B1EB92A4
  
  03CB688B5341C40A69C4D413FF4B317750531EADD11F88851F6345669F58C53EC8B764AA666BD6
  
  E54B48E4743B2EEC13D7161C5203433FDADD9A4CB3E69641D3795A2E810A45BDAE3532B97A52C4
  
  9DB552A876C1ABAAB2E3AC102C9879D203D62B1BD4C23BC52E3F0C94A557959C6C575155F7AF65
  
  0542B5C10247CDB5409454C6BD7F56C13230C7F5395E211CF2FCD872FBBC1ACD687206EE59D6BB
  
  4EE63E2441869F875AE35680356EFE5A08AC504CBCF36F97743F06740E5137D17832DA142933F5
  
  709ADF6DF5177A84D22BEDE4CB3E6D30B11B3C91BD0D202352BDC767106C4A8719DA2C75A355C3
  
  53C67CC53775EE192E31554AE02399EC3E5CE779AED77D112F3C7059D3C6A316179EF3C3AE04F2
  
  3ACA411387E1E9D0930E9C1F3752315D631E556936CCC6EFEE77DCB7E705779F8302848EDFFE70
  
  D12A5C7BE23CB6ED65DDD47F0E0F082160A2538E1B032AAE17C97CF7F97217972F997CB20AF71B
  
  897B0CE19C8972A909EF1380692B82E9B09C257A0CA5CE07F272B56BD321D9EAEEDEEBD08634D6
  
  B9EC03320D2CE208D823C0D02D5BCB9A991AF784FD705CA331662621D3D793C8C311F7645FAC00
  
  BC8CAAF74F3FB8D3323639082601587B7816499FA4CD956628B7806CC407815BA0CB9E26145300
  
  A915F7B546222E5B4969BD44D9DF5194D7719A0A7BF72B0FA4DBA8B23BA02DC8441A9E4C57C7DC
  
  CCC2F5BE59786F3D79D070C1F2D02003160BE4B02E6767C5876973C786E10F567A1128C675DEB7
  
  46183DB34DAE298E07F0F78A48FBCBD6EDE2698639ABC2E5A1B2E467D93A69BD2D67F41F62593B
  
  8242C4A4068BEBC4FA7165B60BCD07A8752579FE46CE7D0494B06D0CC2E7568EDED60D0F9CBEC9
  
  D3D4032E650741BC21A83962700144F1CBB68AF25BE0C0D5EAA9DE8DD8A68DA7E0F6AFF1BD8FB2
  
  8278226A2EDDE7E0B33BA6D2A0514D4F90B48FD6300FFA9B7479DC934BF3AAAAB95B2AF9564E9D
  
  6EC39957E772FC5F24816637820B68B880CD84CB0C50B4DA212A20E904D37B360E29DDCA2CFB57
  
  EF239A5FAE7F964C72B1FAF64972E4969337018D26C9CB9D68B6CAC4E3CD2D3893145C9432FC6F
  
  0FF8C062C3F0F1C3AB0ED8D6B5505BD16EE6A15AAE57BCE07333465501867F2DEFBBE0274E4673
  
  8FFE8BD1B4211FEF4A8C28208E98CB4D72DEC559127AADAFEACBC0D98817239180BCB43DD239F6
  
  91A3EEDE515A3370AF5739841AB9C91DB77B91441E4A6F0FE113B4DC509E4BC951C800CE788526
  
  9E836A5AE595A7277AAC851330CD3CDAE4DD4569994E1F4CFCC75E459BC9E1BC7F215BC2D6926F
  
  5DD509A09CF22C506EBF22D2304870C3905D94609F8295D0C55B403A7572FF4C0DA600A74D3641
  
  DE4DC0CF14AE350CE94E713A2AD831422F2171777187840069F414CBD31F3648F88287C50E4277
  
  32054F5DFA1FABEA57EECB8FDC8019D37336D8D0E840FCECD0FDF19E56A386C3521E28726C3F0D
  
  B6DA49210F72C66BCC1E5CAB15FF19A8B25C5442A0F9E0D41FAF824078FC6F6EBB3778C6FFDE69
  
  8EE021C353B2A00F83903E001A1716E75308A08A8A8978CB4A99D379C76629EEFF65B926EE3338
  
  54144F43B04F838AB5003FC36505325D3E4E4B5FB75A1221B32DCAC4CFD3588FE0DA34AF3AAFAC
  
  A3955CAA04856A196ADDA16171AAB7E21C34CC447741E506F153B7F466871342AC72D798B63572
  
  3F4947AF84E679D4A9145EC26064F02388C731B2DADA26977C56FDE09BBDE051AF895A9CC4A80C
  
  E9AAE79F06BF913CBAA69D445B12023AF1A7BFD584D44CCE04F50D77E92F39294AA1BDB08FC656
  
  7218CB7FA34A09E1574F7AE40DE43FFB717625F2C5629AFD71ACD8D80B88832C24D8DF82279D88
  
  32811AFCD634C52E321A4778FF066508A0A63CFB3905EA75F5821DD568B90D1128BBBA44223C7E
  
  75DC8F780568FB2E603962125CB02C1A492FCA0A0096A5BA8B7D0CB1051A94EF617DA1E5771B0F
  
  DACDCD877D0699E01650F8CAE7027A20AC308B7B71F8D2709CED981541B50456D7D1724D28FDC7
  
  4B5FD05BF71A98DBA1B27D269436C9BC668FECBA8D660DDB7CF7F7F961BEF05FA62E49421619C4
  
  4CA720C2426A1D486C95E026416DD8534C85AA200F95B8EBD4A452541629E1FDE2FE11D84D969B
  
  2AA01A9B7F546A64F598183C23E26D38D86F47E29C8289C5ABEAF1D5ACABCE10DE46C50E3D25D9
  
  80D079E8BBA99515AFD9DB25CA8D34984D5D96ABA65E2850482F264D8316ED3868D5357AE02AE7
  
  3CD5282DC1908A666F9EAF15FBB2E19D3EA3509C5781ED0690A20621BDD31AD2D80F7787C5E678
  
  B7171B945C5AED7918DC313E011653D4AB5CA151B48144A0A6B2C2DCFF361F711811DB6F249BE7
  
  6579A43ED363306D6811D6E5801D6A84D4C892956F0D00A98CBF568A4BE481325AC9F0972FBD5B
  
  6CE323B0FC432288501276BDDA4D50505BCEA44A5C7DFFE118F1EA9FB0A01CE3B7D8D042CB8C40
  
  FA31C0C7F5D650D856C6CA864BE3BB46D88752D81EB1500923F9DB47C86B86998C8B1DA70776AF
  
  72BD3CEE2F22FF7F132DEEDF8E1FAD96D242863252F03322B458428A5D996852B1A862C57CF087
  
  C1ADE9803FAF24D25ED54C9CAE1C3175E752EBF0DFDD3DCE002BBEED1A185F2B968F1789645D13
  
  D83E3FB15F24DF44E85B303F32C681762D23ED813ABB75551A32C8D35C60FB3784E926AF187F45
  
  E98DF1FE17EA91AD0A11EBCF14BB22BFF19BB52452E8E06CE322B2959CEAAFD992054CFE95C7F2
  
  45F56ECBAC06595F4202A5272B7AFCD40C99EF3F78DC9FEBD552DD4913570438351CB76ED69147
  
  B46AF589E77DC42EF021804940ABB395F549AE7661B0E28E180C8B24B82BDB77AA17D8FBB1BFBB
  
  B16ADD5B48DA8ACA8321A66B606E67F0D64215BC3E25E74E26E6908DB19E966F94B1F3FF872642
  
  5380FD722B02C251D57E301016F29A98416D90B1945837E265A284FF2B8D655891D769DAAD74B5
  
  EB5A3274FF9140D36EBFD08A5BF579BFE5B3BA96856ABC7C4871A0A8F76D0734725F6F1D42EB9B
  
  B1EC84AE290BBC3DE601801002B8E5F075A15D81F958EA446DD2DB8F5DA10E7729AEFF94D5CDE9
  
  9E4B923722567B86EC81999EFA2F713E597AE8D971586DB1FB89AC63D3D4A6137053B4B9C9186D
  
  29994F5E4C70172153BE37E3AB1B9388A6765ACD2B02EFC8DEB50670EEF79FDBDB3494D32E9687
  
  A193AE6DB2B7B73C43876FF32D8CE6420096D9B7F8A9850812881A1E18054D57B98403A323D05D
  
  DFF6CD7AE59F4EE5FE466CD63C27D7FB6FB63885D05F4AC74951392F0BAA27B08CF886860D4484
  
  415E1DB8EDCAA39CE758F8DCB80F961BD4306E4A462AD7AA3332195002B32D53E5C212C01C9949
  
  FE30E8A3EED6747E7657A567639006F3B411985444AC3E1BD133241D58DD32A27803343E8DA969
  
  60AF85010E9B3B16AC4CFED28F3500D558CEA50C507F7A89A7F069B1FAE873584D6CFA0D4F1C29
  
  C46207EB676782B203C55279B677716D754E0C14F15711975054D94ADC8210EACD30208E0FCE47
  
  F84E120C545DC0F1A4861199D42E5A809B531D42AB092C9C42167DB6303C5A334DE18DDA7E79D8
  
  ADC546A81AF4BF03695662A9CFCFE6FA469DAC6056242A8FEB87929F978909C6D4C93DD2D60BE1
  
  60FEFDAB92638872C3E6518746C1B1DAE17AA967DE79876999615075B2FFDA67EE9B743E2CD560
  
  EBBA5608A98A05DA37D8F21C1618C02D8E978423DA80D7C38CF562610E85DD0F1775D8021C9432
  
  7CBB1F5C20EA41E8CA19A4E6D50A3BD5129E21101E312A9C8F470E1EB12D038E5AE4DE537F4327
  
  B77091667D196C3612BC6925A24E66E2BBCFBF6A4C938457FEE36DC1FF74ED7A9C8F6483C58F2F
  
  27B7065F35663227EE4492E3F06B6071CEA45739ACB943BF0EFFBCB99D03233C5312703E74CFA3
  
  5288182D9F371E3F22257964F86472AAEBA8061BF039C98C0B8DF14C70FC8A313DCDEB943E6253
  
  5234AEE628B9F97660A768CFCD04701A0F4C818BA5C0219E70B37570DB0D625E4DE3F220EEAB0F
  
  A19422A17124B098EB4C9C9E71E2AA0BF536A81161C2788973EB56CA0A8064D6025E64C5726523
  
  265C2E6AECF2E044D0969508CFD4DEA7AAFA7177FB797A5E58205C094BE985FBD4CCD2D249ECF4
  
  B2D76689EC33F64889F2AC40092F47B9BC6D5CEDD1A9F83A0832096B81BF7629E46591C109F57C
  
  4018EAAB78FE716D76EB3C35129BB163C13F3AB7651E389713513BE66A06E082E90FD2BB0C5CCC
  
  51D229B3BE5AFDD175DC9791EAC0C2BA4B32CB0427AA15BB506BD677907CE43D58F929C0E711F6
  
  FC95778515C25FE9B892BCB8448EC6EC0BE48861D1D57E0B36F62CCD687D82404CCD52A38AF266
  
  E42D201953249DD0E84308C0CE4A6056B0952F25084C684D3EF20C608FA6F4C4E3A1A274307747
  
  4E903EC46735429FCE1E1EBA363D509385AC067FEE1027282F6C735768B965F26E542C4A66A62C
  
  C134DFF94C692401FB96E63F3FDFBE3F531A26414275CAAAB1468E2B46049CB39989523D2268DA
  
  DB1B9DF4BFAE94F06F71FB2FBC496A687E62CE86572B9ACED7A6C65F9850DAA52EB296F7DE332E
  
  C44FF1E0EF2E2256A1B53BD9C55E75B81AA96830B1EDDA395C6FA74E0D2D509A5D77204BE7E17F
  
  8E4EE6CB1763728002991C68357AD3882B9C216B8A75746E29680B4A807386364E8E5CE44FD163
  
  4DC1EE5BA8F95AC20135A4344E1A9A367FD474C3572818FF643DBCE8C8D0C00DD800CA9EAC582D
  
  C5EF87C4D13408759DBAB4E8AABE8E77CDE2CA89BB581FF57D7DD284BB8297985444DB074D299B
  
  3B71A8F9B586E153A23F750B66F396B6312CD221F44172A6BA22449582A9294ECDBDFDF0917B66
  
  0A2DFA1E643188A0395C2E73B35FBF25A957A456791AABE4713C2BD33F82E0B3DA41D141FDF28B
  
  94B72AE08A0D3982864E8A565FFE5BF9DB4A49F721ED28CE94DC27DAF503154B2AEF8D4C3B52DE
  
  AFA794FBFA63941E9AA7F14D8FD4A3971D399BDA0797776D69C0F65FDEB09F54FB732C4EB24A1E
  
  74DF30F098C59BD853E4AEF3DD4719D883F38EF4131EAD84DC3E23B7A35825F39F603A1F8F10B6
  
  FB7FCAF52A1A7E315E4A8B9DB9568C2F23482E9641F80073330E8D1B0280AA09793F1D93D8B5CB
  
  7841A1EA9C923275103B63215B439F7C23C2EE2A4CE38DB0B7FBAEABB44123F0FAC8A5FF1DD555
  
  1F4CF7B3313D6A392B58BE872FCE3A867D502834B56AB141814BD0453D048D6D114F938C8514CA
  
  62060978E9B954F45FD68845DADCF5B8992BE49B25022BF659A06B65D4E7182565A3D9009B62E0
  
  D1AF3E897D35CF76F5AC69752DECC7E3AE398832F4EC4208A1249F3175E65964F4E183C8DE2F07
  
  ADF37CC73A111890AA07F12B9E5FA53CC3FEC2AFA98281D95DBBDA5AFE7709857B98F21176C381
  
  5B765AD80E38658EA89A6F88354C3B1C906749F4770F1D97C1785998D591C001C437B231508398
  
  1DD933C182F3FEFE22C6B9817715BD0B0929A1C96EC3342C31A2582B9F900CDD60F0835DB71597
  
  4DD0844893C13D12728093531390082BF3ED1D4C7FF399CAF014BF996745142BB3B49CCE64613E
  
  5274252DD36C90C714EC02E6560E0AD5EFE5412B6784421A7C12A4C0EB9B079E0A2CADB5951A92
  
  A6783053658AD4705F321A326164CFC717A214534EFD49097672A9076B3473560FC6D0BC1DE474
  
  713D41F68B804DF99ADFD2E19382305989E25FDE33356E3D8C4574BA41FE107BE34D322A1C50B7
  
  3B964707DDA438017226D5BB4E2FB498D50C9A7CE93E6D52473681008B733D494BBEC7683FED8D
  
  31F20172314B781FFB9FB79DEA628109340C92ACD967D4673126C95FA8C6E2A8035C919C3DC2CD
  
  A6787DCD041223A1F555BF011BF3A0024D8D3418B4CFA68389FBC545E1B37AA102D91EF40397F4
  
  E2C4564FBD4CC394C0A1153C3A0D51433725D358253B37567EC595609B2BC0FEA0AE65DF4E1D20
  
  73481EAB5035A7B91377E50C19A261EA0AE9BCFE4DCFC78E426646D64A546CC03A8F29B6A513F8
  
  8496EF201D7A9A3345454A497A06F57BCF060C8064472A7A6C156FFB96A9CD663C807F4DFC6B7C
  
  7DF42A95FC91FBEF4E27D1AB6010C76B016AC1EECB98184E501C7750500819FA4A36A50EAAF09C
  
  A8A0282200D23F769418E8421A940B894208860A5FF525EDB804AAA456EEBDCA2D57D5E45EDF16
  
  75B3A693F1D7A6961724420BBA61CE91F5DDC953C698ECF6CD185BB510B05E056F87E6EA729CAB
  
  38168E57A52153A5BB5938C085533E50E6FDF30AE4C5CD5F61B31BA06E5B069D76A95CDCC64E7D
  
  FCB162DFEE4836C38AB16CDCCCFECF1810EE561DAB5F5A9059D6321EF09863A1627F5C3F339A5B
  
  54CF627D5C45B794DAC46B9E57FEA489603A9D2315CB9A42CB24ABB75555BFDD2147E0DB0A7F58
  
  0BDE81C7C70C3FF6FD6CA304D719C189D0D7D991CF3E87E15240411FA94237B9FB145FDD4380FD
  
  3A5EE1843BF55C6C9F640F7B9E42AAF1D96FFC44D53719B83F9C11CFDFFE51BC454F50F20D4F62
  
  5516FE4FFB1EE798C85AFDA53319185A2CE94EB37170BD3B949582ACF20F43B0F1C4211843D50D
  
  4C0FB615107A5985F2CE49CE2F7B159C4E566E617B1C446198F48DEE3D31E9194AFCA71CE2870C
  
  6526AB1B0614C1B894FDC0DB2F2356082B8C311CBBFC4422AE45B90852326DE98A17CA8F5EB9D7
  
  492404916C61367BB9DF4FAAC2FE30C6A739CDD73E0AA1ABD14BB2D7663C86BA2598AF8B553602
  
  DF5A032CF80F79DDD04D3630DED47B48E58EE74EAC81A5BD90236954A02D98A3DB705DFBCBDBD7
  
  598D774A29200632F546A159A2656B85982FFAD6E2668069663CE017D158B7CBC1310BBB867053
  
  B300E8FF4A5BCF286D6D77CE5F5890D3E3FDA72C5DA30D7D72CA3E040DEC3792FEFDA71CEDDBF8
  
  58F17396BD5B8DC99EDC09E9A2B98877AA79665E1E43CFF02030BEFDE9E1497C822AE458BB6B15
  
  0F6AA44D7064E68294BB84CC34535060053D36A75B75B7DE664D281406FF31BFC907174B76FC51
  
  1164602EAEC09AD19A0DD24F003C17FE377B75CDA898A38A4291EE50C5D9C69F4ACDC239477849
  
  C60F0099822EDD6E3BB567ACC171F7AC87C775E56B079147BFCA802075DDD839B869C4A71F63B6
  
  B2C65E4B9EB1CB8BDF55BD6EAAE1F290B52D712C14F365D3805E29A3B5643BB90EA7E1CF8D9B42
  
  FD09FFBA06CE9941885CA6F91F0D1CFE91A94A9BC6164634FD7CA2AB88952FAA0D249FCF47ED81
  
  B9B520ED9A59CEBA8993932D67C4F9ADB27871E711B7F0F3A4845510C423845F396AC3938DE83B
  
  0304054192A788E343D51381E622E5D46FEAD67D853BF1C8C269D90D21B6267409A20E24ECEA5B
  
  1E0838A434585814C7E5128BE6D0C248CAA2014165A8B97AAA6BA8A3BD868361E8AF0C120EADBB
  
  C229EEA78227188AB22D8E85F638373E74CBEA7197BAA9847D8EBF16145726AA706C0BA81EDA7C
  
  FF7E88B39F19609165640246A4A9B7F261A5C93A5AD64D933C4A8EF9D026F2297F0EFAD595D0FC
  
  87C1393EBB9581D91814C47A0A3B06E5CC450CC22EE1B201752258453D4F145567F7D83CD99920
  
  B5C5C19B0C8BCDA6948298B6771A50CAFEC673F44A6080F89880EF0F766DFE9FE1D9C850B0CB7A
  
  6CCCA280698E832649CF604CB549CAEB31CD8356ED106F365321CE6809E2BF26C186497CDF2D18
  
  698762E4749A90F6C1D95B8EA7EC96319113C87116118100FCEA0D550F2832C57A8BF5E1E1C847
  
  F0C90EB114C7CD6C3AC2C2C5D7A7B56598739CD0CEDCF8D069EDC437C7CEAE5C0CDFD46BB57F23
  
  BD0D61B1AC0B9205FF34194628D5FBEA6CF56DDE45943EA188825138341713796874E10896757D
  
  93ED98E7B60AD890DB2AB682330AE8E15572490001C91EB2A8D7B56B33BC7E0599D4DD3A5692DC
  
  D2E05FC5DEFEB9102505392A008ACEE79CE7B2BE2A2B0AB1E783F353183BE0FC9D19C00474E0CB
  
  8817352AD755C63145D7C965C0E742F1909653FAF30C41875C6B7ED342141DB4E74512EFCC5B64
  
  A91468C89A8E692F0EBFBB4BAA6264E31702817C9AD8EB8BF75104E4D4ABDAD1FD5A81166FCB17
  
  A54E71767343F36C47D47FDE07FA3B7F943C2074622BFAFBE75603A0A117C1BD679113900992DE
  
  63C0FFAD063B669BABFF040F372B03A3030D1D1AE05188B73933127E8EE73625FC75DF1138F055
  
  C815FCA4AED0873CB6BC13414731FEFD7EFE52E3EF824C75E0A0561DD0D7BFDC5808F1B78B7D9D
  
  B562B3F0697A11379D087D49CBAEBABFFB60402E35DC6FD4D20D3C2FC88651291C379E4E8F1BC0
  
  924BA435EDE740137583CE6241C8C2FE4DCAA17103C8C8F40A37D27428E81B370788FA30C814BD
  
  1501D07654C470FD5E94CF0C0C52B5FD6E510EAB08D8869B108849B9003E7CFE8A256DF7268EB1
  
  DBF4ADE9FAFA0963B1A6A9B8AD40011E721B992A9FC9C998D26400ABA8C5B9D521C28642728063
  
  D9D0668B2B639E625D4B4F2FA3786E57E7938F995C893E7D332621716C6968004F7C302889C4BE
  
  46046983225AE2D1BC276683744800DF9683E960A8689338789ED2D2FEA1D639804EDD686295D9
  
  0128130940AF251D6B7803F0AD941F3F3D999C5459AAC5765C743BEB8CB02461B54EE0281A6006
  
  3AA762187D3B03EDD3B0B1F4EC416DA20DDD0D89CF302F6377CA73A36FD44E86C4DC6DAE2F5A64
  
  AFAC62536CDBA2C86D6AC1C6AC679E50B557045B2EB802C4C7AEBED40623B17A93ED24B65AFA01
  
  0C3FD297B52B2647355A411ACED255CD4EE2ED397B3DBBA4FC2745960491AE76F826EB9C3442A1
  
  661D656C27C486B3568A63F0D6DB571B17380652333C2D262A69FE1AC016D6D67C854A1AE0D72D
  
  ECA2AA38E6A3A3EF52B4EFA56B1913C0154BC1722016BCB3BE5B4EB5160DC9CBC068BA3EEF1F68
  
  7B663D25789E03D465A88B93A47404AB2CABB24AEA4337A79DED69CECA3E5616F3A1BC6E923B21
  
  2F58DFA41730543D0E484D43621E697DD091D3BE143A85895824C13FE5B2FC2AEC9CE8B4899197
  
  8019B6AA777AB5EB24FA352CA317C7C7F1E9549501DCE4C016AB22CF3FE5F1B911C5FFCBBC7969
  
  2D54AB0B0C92A5DC73A5BEB28FF8D2963CF66AFD981EFFC7A1246653E07A5A071442F0F5F719B8
  
  D60022D82643527C424D74F130544FC363F9D4F771B846337902AAE901C881130559CFEC5630F3
  
  767A1E1200A4DE082427A6D0DFD4CAA59DA510C73F7ED165A7FCAAAE1B541F1778A6B8FE223F28
  
  597743986FF80C2142BB9E347892AF7AEFEDD29ADCEAC1498B31F5FCEE94BB9E48750ECAF7DD52
  
  A39E793D99C03D875B9330FB1BE085B968C3B4EDFA0F050CF84405D3A42EC8732AF0DAC9C86661
  
  337B70929CB485028EEE81C0B465842EB01DF15C1EC0BBA5805FF3E900576E749187C0D94FAEC7
  
  E3F93F1F30D11242E7F65FE0EEF91676419B2E43223C0061E46C41FCF5FC82C011D2490D7A840F
  
  F0A8DD6CD0AB1CA81C273E1604A9F54AC6EA6BE04E6D14FEB14DEB14DC7CDF5878F35224C5EA7D
  
  EC76C8C5CDF816164BB47F9C6020D371F30419198AF45BAD5792D148F915BAF0DD0841169B77E4
  
  5AB50CDF50B98B4C54CD0BF91269D9FA67F74EF71BCC462AB9EC71939D361EC20AB52BD906BDA5
  
  FED00D420E32CF30AFB953C4DAAA807D5A5D3F24A353E9B0EDCACEBFC69A29E65A5CDD1B61FB66
  
  5003FCBF372FAAA06019F9945FBF32D62C461F4F4E89A400F9E0B3A46BDCA99EEA1AEAC92B3ECD
  
  C7B14616345D9A3FD1837FA24F916881004CC27351A131400D7634ECAE7DBFEE4553C86A9B1362
  
  E3BEF463D3B2923B45F5D8241F43533EC0E81168EA76DC28DC20F6A71508EF1C0EB6B946C220DE
  
  FA265F3E8F35EBA374D0865539B3857C9A21B1D43BED4EFF755B1E2C2EBDEF2A3652F19729DBE0
  
  59D94FB5448BE1F8EF205E070199F7C1D55394968A1FF745AE925EFB7237FF79FBAA77731C6C47
  
  F6866815020AA41F7F3051C7ED028518628522AE80FAD972B0A988F5793BE8D421444A2D2C0061
  
  8C6061A4CE81A807ED81987248D637B525C4E2A3D24E8AB6EB11FD36E9BCFE5432E46B89B2192B
  
  AE685D7EEF494C82A45EABA1363D2F4B7973AF5B2050B3F5471B2027511F816F1A3775861673F4
  
  B292E3425234A41A3D270A0D0C0139C105731A6F5F845685B77876B46F5ABB4DD64B669323967E
  
  D11E40E3A1837B060A6685FDCE58D2DD31D0C9A9AC68203E78A787FC6508B4604DF609D14D7AF3
  
  0E0D2CC07A4905339F7AE4522D6061FA6A7E4CB7A5A8B2B5C49D7A72DA46892AB0C82AF7D3AE1E
  
  6D882BDA8C266984230CCCB95AD2F5A0E33685BB93DFA60D8FF703C76887C32D93E53DE648C72F
  
  25128565DF4F410D1B2E8C9D569B706CB99542A27BA685DF09C752286021C18F9BD2B9C582E827
  
  745D6901DD99C4336C0268C0E8A85BE9C523DA1E4D0BA4571EADE80C88A14BF4E7450A1BCEA1BB
  
  FF95BDDF2AF1BEFEBBEE7429A4FFA5F72FD40A7AC1B70F8EDB8325AA8A611E37B0BCDC846C6C13
  
  CAA9A830E1F090059C6E3405378DF90C1AF48288481268DB2AF862AF3AF7A9C71EB60DBE819839
  
  6083CD2F545C7D78A37B90CC3B9F35B30F8D424EAC374DEB8EC893715791EE8B0CF8F899A4582D
  
  C9F2F738232B983AD8A77855D1E61065C4471EF0CDF72C0C8AC6AAAEEE1A767E8F7F0035DC77AB
  
  95BC1E2AD39914DF3E13725D8C3B5DE747B0EDF1FF3F80FD160D9A2055B4F2FF20F4626AB41979
  
  5E1FB1F382A07639342A4439A6E2F18F3832BADDE63DA1D78FB63557261C6C86C6E99FC9D252D8
  
  95A9B653782A4CAE61A6DE512CE97EC46442BE27746A90474800725E95307825739592D585054C
  
  07680680F1B60D37D64A5B0A69C84BFB05CAEFE941AFF94CD357A53C9C3E26FED2205B11F82F79
  
  64DFD8FF16D5A3CE12905945BF41C8A56A599877615B23E436DAEBC71B45BF0163A4E6D13238C0
  
  479C3DB9EC99FF0B74CD22248651F2E1BC7860ED0336E6C078D0ED4FC72F494D3F136528B25CF1
  
  53D41DEAA0761EC1E8F31F90DF1D73EB3A5BA9B52D829EDAE98000B6116072AEFEAE4D861E8928
  
  FF9DE376C856EBAB1A189F4248318A44CC3E073B855A13916073162D7A26C08BB55BB39A12033F
  
  93B55DB97CEAAAB975A7372C15D32D66578A6539ED61097D4E019CAE33119870E96C3E409E44BA
  
  E5F9C92F044BCBBD1B1041C5C68C45B766BC1FE51B57D74C11682E6FB6245DB5B24840FF1AD084
  
  4B98342B17E18B42B9FF61430B3A703D97EF8FC75B5F8462F404CACCDB2E6D947C1FCE7DBB0388
  
  DCEFF510B06216C218BE38F9460726FADC19D133E046C9057198C1C25DF85D45EAE84F3A66D339
  
  D9A1C0CD7FB6A8C706A9BA062E6415BB11BCA1923732B2A9BA984FEA53490547A03063673BB384
  
  D78CF48782AD45111EE91BAEC2128DF1A273F9143A3D28AA3E1F22DB7220092047E22268AEA219
  
  D0037677A57AA98432E3749FD577DA26285AD0E67E231F5E208385F4757D217C7070692E6AEB04
  
  EAD85FC981AD586A35293854C147A62230A8790822589C62C1BC182F9E07B7E0C5B1D02E9A73CE
  
  222AEBDB0AADAACA9685B12D914220637855F928B1C95251080DC17BFE674938D33E6C92C047F1
  
  BDC22EDE502AEEB780D6FE78304E0AEB47F39A7AA01C8B3074FA0A423B603BFB29D99F1C125E41
  
  42D310FFFA16CBF8EC7C2B09E7B088FC222706993BB4EF41C9329CF0AC1EF60DB5BCD8A7FEAC1E
  
  9DC111540A7E1633F36B0D94CB0B15A8E307CA19B3CD877BAC7AB9038CEB293CFA0EDC053AA4CC
  
  5049CF239A0841C6391A1ED537B49655EA5395477646BAAD042A98B61DD270973665497FD5CC42
  
  4B30C3911C5589231559DBD1FB713E1A384DC62A16816558A15CFCA84CF4BAA29835107C113B60
  
  04BD88E1D4B6F0EF035083AE58040791F8249B764C341064E95D788B90695E3FA9E547E456F5D4
  
  7995046BC81D5473E66C374FC360B4410670E527BC95332D6FE7DB8B8DC47AC472F37E83240AFB
  
  3800FCF5AA3279E672B3DA63FD22384CCD852C2516271892E923B9932B6DD432BE49C90DC0B554
  
  23EDEFD604A08963151679A94E3FB3E64340399F075A21DEF7843CBDC9D2D347D59CB072F12962
  
  7BE7828A6E9DF46877235D035DCB1B38BBC44BA3E7E8FCA39B5B34CC649152D23095F93B74BB7A
  
  ECD3BBD7E4087854CB47132679FB573AFE2A091FEC294B2B9E730625F68291EE7DC28C3D554037
  
  F62B30B05121A5A55D37081BA4E6DF3CD6E7347C8072E518250DC7305555487BA229F7A35CAE7A
  
  7E53417AB93E9630F6CED04F3A8C0B3B5417DB9E1D48C63EF34AF5EFD4F13AB7697F7DBB88B437
  
  A26532070E89E418AEB58759CA2EA0403C3D4EE2260F1DBB3CE9F1F06EE4B9147F9DE988324791
  
  E1C111877A6825DD08E8902A9555D2FC7B8B746C4B214AB4721F6A8251CA4D62F8E33CB4A7EB78
  
  C6C55F215314612AD89D5DBD8D5F614C8DF58AA798C7C9324FD435F059A1E94E90B2BD5EDFBDB1
  
  FDC906CEA9F5CC1204A0EE9FB244AC48B3F85593C45FBAC2DB4273AC81C68EBCD7B95E13B3D8D0
  
  87399C5EBAD86963453E54A2DD3BCD91ADEA9F0B13457B456ED9432C9EC1F4A34AB0FA8235C26F
  
  23838D53275CAC1491BD8A45026446F39EAFF0CA3CDF787D3F75EDF0D90260801639B3024B04FB
  
  4D0DA03D4FD56A2C45AA94062D92354212BDB7E62DB57BA0F08EB3727D5452E5B70B6F0FAEB0C5
  
  B8CD99011D992514D5C1D108E7E6E3DEBA9753D96DDE02BD87FCC830DF9AF89D97D6FDD9A6C77C
  
  489EE06A1B453F8A7B3776F11DCB71C9304899A22FF393F8DA55460CDD2EA1C8C70F4931FA109D
  
  5139EDD0FC9E323D0F8E323449D12470316A1D5022DD855EE9357A35C0673A093023DF988F52BD
  
  6438574B5FF0EDFAAFE12DF3747300456ECDE2814B5CB39EBBAC8198B3FD21D1FE47D7E9326A67
  
  99AB4CD5072584F774E95C55EC967AD6EBC94C45E3E2571F982379234E5FBFCAF666ADF6C64763
  
  B99496497A44A1E300928736B77011039A31CE6BA569B19AB447A6F1C95D5CB423D6A6A9FCEB77
  
  4C184F45EE6105F702B25E6586296EE177A97F5C508393206A15C40BF1EE90C1DA654EA12BB4E9
  
  C0F1D8074EBF22BC4FFE94DB00BBC01DA692DC6E72F3976C6184B7F17066B6C0B913577705EFEF
  
  F28C430A0D20E9CFBF3F1BA2F378FDD07CF7C4DAC021FF0A65E82A784F5B4DB061440032007E3C
  
  CBC4919B756235DB7988A17F76C9F16739F3202102D84484CBBFE5BC2927B020CC123121EE247A
  
  A03AC0859B54231C345116314A453E35E1C0E9FD30434915616F1B6CA42073D53EC446F4DE65A0
  
  4060367D2AE61F4B71945D3F00438E98BE840AB4254A55FF730BD897F592C5308A41351EE39650
  
  D71D24B8F2500392B68CF88C25DC357CBF0A515124336BBDFE42A9DA2AE5ADCF5F74B4B6285C0C
  
  6BF38283EC0CB48981C142E7072713506B6A38E991B507DF8F0927CB86CC86C7102446EDBB9DA4
  
  019CA4754FB67324019837E8DB09C4FC33CFE423DA1F2FF32CC343409C2DD71C814B930F59FE25
  
  E81AA8EDC97BCB05C03A51C48438020816EA31E6CEE57E394F6019945ADE3F9BBE5238F5AEE297
  
  82896EAFDB40CB42876BCAB6F37CBF8C05B9A84AE9D7215774682C0F32E23FFE0D61A04CB9E74D
  
  1D04B3AFEAAEF7B94251576B80EB8F15619B409AAD454613FD50AA7D4F3ADFFAB7332595EFACFB
  
  9655039A8D13519DF9E8B259E342F45501FD9414D9A1CE8A1DB2170C0E635497A54BDD296E4414
  
  46DFC16311669B81EAA99EF9E9F9DC6173ADECA4E9FD1D4D924A6FDF1A619D83D5AD745BE22CE0
  
  74AA80A93FB804241573C4AA99B435C0C553B6A34C1CA2420D4AD5AECF101D0C220117F52FEF1E
  
  A6A7C2E6C5ACB12F4CFE0434D38A7B80D457299CAA7BEB22401F6F41BFCFF1B73074DB204AA4F7
  
  4BF21DF02FBCFCED325450A316F3D0E19A9E578EFF6E36AE9B9FA83AC2761D9B0799760774555A
  
  CA3DC87F8FEF04FF41729AC36E78730AA4FDC9B200DD19E55A2EEB2914BC4A7AB668576E842FE2
  
  4BC3171AC6FDE3B12CA0A5CE473CA9B16AAEEF1E038F3CD0CD46FDECE92D31989529AFF640EB74
  
  4534262B1C4E74BE8E23D394A492BDEEFC7CF549C29298CCB93C99F5E7EF12F0F31F94BDD5571F
  
  A1393D675F0F7FD577F13B8A650627B83D1377E1D5BCA502A977CB56B3238D907336D392005BFF
  
  92FC98D953772DCB25A3353D07B7A21E21744A996725EBAA1C4E9359DDB16EA30F8B7B054F4338
  
  D80BC231101800CF513329DF073BEE3A9E99ACC65C4661660AAA6B2466E06BE9C9123A663F9BD0
  
  4705A874392E443C986778FDE4DBB2AB0AA855471E6D01BBE7B21F00725454FE21747084EDDA95
  
  A23AFAB912899C1155F94CDED48C003C3E06755DDDE45BC868865D5B5E6B33F441848EF915146A
  
  843A1B0F83BE8A3BCDEC8F7C33D0A6C80C17A39CFD9E466A4130862C8C9C6213593ED513B82E12
  
  7739B18A26A31884C99E43CB69082E710679FE9EFA6E57ED06B79BE2AD684EA2927843B289A1D5
  
  E54BC9B5C03EA51F5150B1B1E878D467E6062CE785053F1BC01922BFA0EF1527758F2DC5C97E84
  
  D64408424A58B069EC173390844E0DCDE2A14E874BB99D4A237BDEEF2867158C1DC360EE8D1CCA
  
  3578F9434A856C06722CF9FEA30AA6E923EB7FA1E4669732473F04A4F22282782B18B530C50616
  
  807BBB1250E64CE29BC8EAD8023A47DFD73125952ADF218E0503E6B26F09629757773511B97661
  
  28BDB57D2644C1AA9411C2BD09A1C184648ED435E61F0A8E6A3CFE2B19F7756604A32CBD27DE9E
  
  B083BEA7B9E505AB72E8A011BD3B38D71943044D552B8A2C6A9529C74C03461BA230DC1FA15BDF
  
  8EE5E8C00AA2519F2768CB41B29EE521879E4F5D33022E4F44E8BA54D9E952D730C60E283C0456
  
  9B2A7E0293E622DB7AF03759F4F6C873CE2D389C99398524E8A277E0124F42A701EB9748232621
  
  AC50CE70BAF6DEBA4CDFB47332DE090F1E6616D7457AB01CD96029F8E690231882F653F26FB2ED
  
  07DC43E96DEF70FFDDF5FF0802C87F60FDCD5C263A8AACEDD785454C63D7D1E4F0550081B30C1D
  
  460D7E7855548ACD4E31BF10893E793CA56A9E2B36E95C17E7B1ADFB825827FE2A6C00888BF692
  
  FB608A4B5B21ACB5E539667DFA247A7C108118D73E45581E53A30924061EC53D1E8C96527FD228
  
  91040578E10FA9B1B897230214B7224AA95BAFDBA6DB7DA9A65C6D19BB494D4C10E50425E88A05
  
  8DF29637BD37DE8482816F8EA5718639DD5C80671E52B9EE96470204F17C938B861718430AEC84
  
  04A67E719EDC2CFF1996B71FFEBFE745C5A3007545CB68716B04939633B6EADF766BD82AB8AA4A
  
  58917F66B20858E8B824432028EB5D44B20ECF9A394A7D2CF0C0AA6662C93442C8E081852C778C
  
  E8B3EDF6742CBB82412477FCDE7668A431F255A09D89558D6A95DB4C16E4A8EB40421FBA484DDA
  
  6371DFFA62972FEE696BC1C87CBC8A0A7854F9C53B52140C41F3E41A7CA5818821AF96C7DC4194
  
  EC0CBC08B2E7B3457FEA3E52C46467EBB84C739FB61BAFF1EA3341E1CBB563B9B8A31474AA8A0E
  
  AEC04C792AE8C1EDAB97142259FF325918D503A884CDF665D0494FDCD6E8958FA02373AC28AFA2
  
  62EC087EA4E120D22D291092834025B8D5D5B1FE22887017160C00A48BF7EABFBA436E2286EF68
  
  3FD641B1BDEA05A364B62E434B9E28A15FF9BA9EC7EE3E280FFBC79FD45A29F41B40F09CFC29B2
  
  688D662F156261913B3FA356A05EFC9D6CA122FB208B49BB38EC7543754CD60BB69C451E1CEE9C
  
  16A6C8900F6AC44EB8E8956B9E9FC43339F6AB2EFD67CC9943D3E9B957E2AC707FB9C035B89300
  
  81DB24B6A862189ED78C6B265B5BA7E0F4BE520CA0C6D0AA4E2F06F2E3CB1000B62494E924D03D
  
  081FE8FA8041E6455E0D2BE15FD5D9839F8E9D1C449EFBF81340456A7C11D3ACC1F17ECD601AD9
  
  83D228A1442FE934E61F2FEAAEB222A4DC974A49CA8AA64FA58A0E9CC64E1D19E8CBD37EA99E61
  
  CC37399CE7A4B002F36128D90D48DD0D929C150A9B791E1380494723712D4E9627689B21CACFF6
  
  535E6FFAD9CBB45FF42251DBFE4ABC9603ACC441AAA23D6D4CC515928A5B16A8E8EA265A3D50ED
  
  1570D38FA8CF1F52CED44AE32C669A6A334061D4C17EE9594B18EED1CF49C9DC20CE59CF966938
  
  3A6035B828AEDA54CF8EE35AB11ADE0CAA017103EA1A16F8289DC481FE7A027E9D56170F6AB618
  
  81FD9E6315E6F4AD853209C0720140237E3C444B714A417794975B942458C1965BF8BED420FF2E
  
  12C0BB6E977625AF3F10A16250E6033DC439D6962C59C77E5D9B99FAE6BDA21B09B82E4A832BC5
  
  04B4065400697262CD99A9C38259BC9522A66C2E2F4EDC8928CAAF77B9BF050E361DBE9D4DE7E1
  
  77F84C815F668F8BC2EFBD86E4C5C5F55CA9DC514EB07CE415BF56EE372335DE73D12DC9E67BBA
  
  6E5DFBBB7897D4AA214E51FA314E48DEADBA951330CFC54818C0205529520926A2074DF651C200
  
  BAB99792B3FB589FA7A81FBB417F94BB0478FF5A0DCB3CC649C00DF54686D76B6AE61AD0BFFA96
  
  F45EFBDB7EAF8D1CA349243B6126B26A8EFA36BF30904FDDF5D5FF102D67E5520B33989D196D70
  
  03297395971793E0C20A3C12029EB0CFC829D37D775452A9C4479BF6CE9AD9C2552530DE9628AA
  
  6EA46FC1EF19DA37F7EB79DDA088186832C8176864EC7BFC5E18E5E75C57995B77614CA213C0D9
  
  1F618C2B899E8BA93065C470475E0E914D39908C528CA0CFB179F7D88B369B0FE607020B2685FF
  
  308D779F2E22D9291A2B2BB5745E7311841F95DB8F929566A3A7FC36425891AFD5DE997A23F8B9
  
  9DECFAA1EB0A65155677B5EB5133DB8F3DDAD0745DA9BA572519C915B353985676734A828C70A4
  
  6A903A48F92C843C3C6BF42623C4281DB0B4294243A830EBCC4B4C722B9D795F875BDDA31AF7DE
  
  68640730185361F2B704F0C3ACE021A08A13393E95F0C153AC305BD3D6B1F9CD1BFD4E930AE7C6
  
  6D92DBAE21878D307C5B03AD9AC113581E5625A05D195A503F8460C00093AD8AC2155898D64D56
  
  07EF4022640582C97265A2F0D578DC7C33B2A8A28DC11DF55C90F2C39FE6BD29A5E0C2C9CD82A3
  
  136F63E603E53791354EFA93AE3A60903A3B284D0555602352199046F7E6380AD34E593A473D6D
  
  DE2B28CFAD3A75041083AEE4FB12D9EB4B069E405BCFFF5A98E3C2223CAC88F773A5C0ECBB16CF
  
  12A483641862009037D5C54A82FDD90D40D8FD663EBEC7C91B5947DB2FBF4718A627B10C078307
  
  699142374725125BE0A11DF893D8975D43BDF8AFB1476A2DFB2C8381E13CB69A8B494A6A8B0033
  
  9253323E3E285E05A9835FCF4FE2AFCD4D782A03FF8311F15A51E7F50385C4A1EFAA23950E7919
  
  D107F81C9DE9D4A10F64EAFBE8CAD85C0287CC4D4E815B561493D74FC62FEF72B5AE05812035CF
  
  4D8841974D9CE41B711DA438D00EC602C911274F7C7E0DD5F23035C5F1737EB151D12BCC736DCE
  
  4B2ACB25697D79DFD9F594B4DAF1DB7F540E11FA9D4A15C868C595BC35B4F74490624365948143
  
  51A771E4864CEBD6E92378E709463C6FE7BEEBE0F325613BD93094EFEC8BAAC89772FBFE654075
  
  351E62B844B80131E751AC4F39505DB26C8C34422C66A40316AFB198649802319D1FE4E1E66040
  
  1AB234971207ADED6B4A806F0CFE971D3577C7EC801355E5F84ACB3A33CDF296CB33CF42E74ACC
  
  003117D8F700FBD84F34EB9ADA38EE0716E1AC8ACE9882C10BB4B3633A6D877DD6578C1DB035B6
  
  DD9E4E2B2349350085E0428AAAC17759771BC4EDDA1A2D40FE0B15B65A8EBB4C28A526A49C56D0
  
  C24FD235653C78F2C40379AEE793937ED6F0BF8F4CCA825C305C0F3FDEEBDE8ABA6352F1DBF049
  
  55DF7695BFAA59E1894C1C57CBE29E48EC2F44DE77E3C449E13A25359126925E4C6C4649F0436B
  
  0188451E473513DF34C4FB2A9A37141E27811C6B33952D9C3BB0336E622DE192649C5BCB761700
  
  CE9423E9B52B20B7E29B6CA470221D593AC0C5D8951EE2A56FED99A8A3D018473C0CA28E4A4831
  
  D6A861A76C7165314BF7A299DCCB57F7D4CE2AEFD997AD21C55647DBE4F0FBBA1F413667B19604
  
  69FE97B144BF2DD823CF23E22313E8B89AB25CE9C1746F141E2046DE217ADBE18BCC3BBBE0468E
  
  03F277D3F95B56CAF8E2C51A0AAEDCDFA2294666A853088EF97BC279FB51FA78419DA0AA83BF6D
  
  8EACB8118E0462E0401EA83023DBAE6AD5420BBD25E3DEA46FB3B7C9376373C8E362E74B01AE0C
  
  E9D59C6945E108E0E92C23F62661BFA54700E203627BCAD11E7895AD59BE1859A9FFB6F7B01685
  
  23CB111552301916107D7D2A403543CB84AEFE404B8F170EE5B408981A88A65C335B3FC3454C00
  
  153FA92CC442BE0590766F765E30F82FD41499DE688DAE2748D5709BA47A89E825813BEF4DA6FA
  
  EC5D7EF6E9CB0913B5BC6A6776BF9AC7668485DE88E6265F5CDF0A854FC86DEB070E40A41A1251
  
  1291E1A6419C7694ECA5EBAC9DACEAC303C3E9FE8A62A64521E18B49B56B3ECA6EB0FFA148B2F5
  
  E558857426424288BB54DE15453E1B321D4B04C8D728B30B756B0597AE61F92447B3A757131539
  
  8701AA4F8A6B46B4283D50E26F5770EC6427592F16A66CAA8199AF84FF05A24A5FBFD1588B6114
  
  E24CDF39A99E7A6CD0BCD44E0E8776C9465D86CA3E3CDE34B33D317EC75D953411C90450003B0B
  
  941881686C9B4A3260C1DC4FE31F0A53577D4A4750AC7CDD52EB3274B61597DD5C111AF441456F
  
  E090821BC7B29806714CAC0EF5B8DE2DC813D42CDC8530F6EB1DD82657EE1B6DC39B0E2BADC17A
  
  7A13E4EDF2A893B41CDA754D6EB684D6A8D496DF331401FFAFEDAF3FD80BF1A35C2ECA54F42BA4
  
  9DB8C7CD73D81F5F1060515D47E6FC08717B9E9299B255536241DBFBC673945A38839B35D9C8EA
  
  1AA449CDA80805C4B14A54087EAE9E4EBF0E61C83A1BCC6C8243313F5C6FBFFECFC6BDC4368DEE
  
  7AFD489FD48DAFD34C59FA6D2DFAE7E2C8C95BE05D2AABA6D989D41C7F0A4307D118828963F2CF
  
  A652BCFAC33B22991E4F6D80D851C0722205702155EDB00053B5DAEC50744AE55E9184BEADA83B
  
  F76964F7D394FC27AB82DA1A65FDA56D3648D9F5AA1FEFBFA71BDC4B66E8C4A9DE4935F0FCBE47
  
  958493161696480DED3314B7079901FE5AEB10F89D9F153D654A0F0E58D70B922ACB969BD800A0
  
  F3CE421FCE37319D377D903741A60F8D83AE8FAB1C999BD8C391316A1C0CE6B3F181DEA3D2AFBF
  
  02ABE1237934194E9F42A973AB4971D3E3CB63ADDDCFE9A47BE78F24468F83E652E7E67D853F4D
  
  5020D7ACDBED250D1CDBE86D5801CD56913C20F8101F509C90F97263FAC6FFDD6C8705CBA0EFFD
  
  5EEAE1BE11841DC48401A7C41A5F0ED59FAC3CDFB8A2DFD2AC0F3C12CC0E964B25B344E1B6246A
  
  292D4E9EE6FA18BF71F1BB7A91EB5B8F0E20A4FD8593B803335980224D372417E3662D96305524
  
  F200B70168AA3B485BD83DF7A42A5771882FA599F0FAD36C9B4632E56D751FEB579F530A6A4C20
  
  A909765CADF9065E4BC80BC52FDA6A2186E22B2559017A626F230522DE708219012351E9205F6A
  
  45E968D94D4116EF55E13EF921B3740CDF45596206BDA272B14A8B2F6C6ED744BCCC8BFEAB9B50
  
  6088DBB57D8FEC837B4B00F57959EF515CE8A9802F54AF1DE01F071146D9A68BEB382FE03DD7DE
  
  AA00AA32BD552D2FD1B09E92E31E3623434A5A34E702ED0375E1A97F8B09AA52DC4FAB8A15F09F
  
  ABF0BE47AD03D997236B6B556AFA9C4A3E4135DB4956DB38F914446D7E0FC6AA21D4232B0BF5EC
  
  66F43214EEFC8CF98854BBD625668144478959A983A01DCB4FA2BC8FCDE08F3D4DAB474E05C3AA
  
  80B91FE4F53F103EFDFB1A509696E0B66830DE466CFE8243292DE34D4E9AAE50EFD539C120BB3D
  
  C0F7D3EAD1C033EF7EABBE1294276C0F78C7C089C76A1024870EBB09D493D9A4F16A3E65B5C5C9
  
  F380DBF5365BBE83AE13AD4E96C852274FA6CC8370CE8FAD45449D9050E7D2EAF352F169CC7EFA
  
  67B1BBECE485C2DCB608AA7B2B6F2762B7E4682BCC33EA0E305CC395A3D7A2C2F7E0EFCF2B1055
  
  F30E631757BB5BEA22D9074FF2D73588F9E9DD12477D44BEECB9A03DD5439C472CFEEDE2BAED9A
  
  FBD67AFF806759BA0AE34CDCB12CA52332C9328633C42F1894DE5F9EC50136AA1293C9D8937160
  
  0DFB14E2E95490853B0601AC7522BE8E519786C87AA5E1ED2B96CE221009AA9C55BC60AEA4E8CE
  
  FDB977B28F0551C306C22FF4016728BAB789B65CE07F611B9C84808837F8765E5D94B9C867C0E3
  
  AFB0EA4A21A324CC0A3BC3501C39A9BA928B09E9A87408314DE63B783392D5BD9B3ACF56CCD70B
  
  4933C1724732379A616012DFF9A9E14D5A55F50D841333958D6F36B56926228F4796421E470735
  
  4FAB7431899445114BCCE5D27117BFEA65EE1118505765132B7833FE9978899AAA1BE3E3F8AFCF
  
  0E9E1140A26FC9CA154A6BBB84C3E5FD6CD8B82732BE0179DEBACAC5340C79493A18FA2E5DF58A
  
  5F0C6546F5A5836BD61C904A8EBAF16CD933A9BC7FA72FA72F319A0A6EE86AD23C84E672D18CBB
  
  0696F22E1C69ECEFD15FA52706E5DCF3CB5311B28D9A614446CE033547EC0EF5FFAECF2A04F1A6
  
  C3DE91ED2B3FBA94DD7796E45D26AB00B99B3E295751BD6473F0BF36EBCA28FFAB2451E93DF4E0
  
  26BF0844FABC6A12EF15EBA64A5CA0E97C6DD06B94BA1CB29DFCDAD8C203C1CB6F7A1FAF4F3B58
  
  5BDD0BF922549CB45DF8F2196C709F2B9A35A43DB0043E2BD0287A3C313EE3C33F119F09A5619F
  
  B350F4011A93100CEE0847F1BDE12FEE8E323C8FAE34D535DB5A0DC8475DE8299E3C9CD6D8B0CF
  
  D6481619C68E77D92FA10D9EBCC13E474AD22B1F47D3F362FC968CFC1B5B52EC24F19BA894967E
  
  ED811F37525C260AFE0E2F9B302D6FFD019754EBCC14E053A9EED1905F402BA7BD3D8AFB09D2A8
  
  E94D0ADBC3C2ADFAFD2A4052256D58B221D0A20995F9C394F3A3AD6436CFE4F0030C7E8C2094E2
  
  092F5191C2C721CA9433369AFC221D01872BF68298677841A0656772649E7EBAAC8B1B81A38E75
  
  5B02DDA4D08B2F357C0C10E1060632FF74F7EDD5CFE7F9DBB232C3A231D128A3368C4D9872404D
  
  F45719B3EA0455836B893F07E07762F0A2FA9E011010A0872353F0CD2243E1860EC33F72E15EB2
  
  EDEE1A91397FE6D2729FED1B3A66FD009EA8DDDADD1FFDC8CD3603876F8D0C7AD60164A96A6C73
  
  B8A8B50985E1FBDA3ADC50018D341F285036B5EE255D975F6C3B5698AC4A94B2317BAC65889783
  
  4DB7BF52E9B8D20FD4981515FBEF23963A7F8636D0897E7EA88901CFAE1FDD18DA86C246507A34
  
  7672ABB116ED605AC9B4B6E899B9E8F6867140BE89DF5CD52C65C27E860170AEA6CAF303C860A6
  
  80A85394DE6896CF928BED76171F8904C5BBF4196BAD906569AC5C7057ED1201F2AE8393CBF704
  
  009124A6E5231D323C3FCE6C48CA239F169DFF496B951332DEBA5F06CEE48B6BCF824F0FB4BFE5
  
  4C1147BF208C2A9D44132D0895FA7A87F6FAD780DDCF94545F7030EF1808B30EC659FA2B6EA011
  
  A3C06070388BBAEBE45F8EAA75F72BA5B4E56380FB7FC3179BDB55A9A7CAF8D7FB60EAD6DA939B
  
  09E69159432671C88E22B34D115B6DEC54955454D622857094B70C3359D6A22C239FE03853CFD9
  
  9B7FA73D4EE3CD34124486F01F5CF05A423FFD794F577F50DE6776779107BD58808EEFA24DE1BE
  
  94BB27F82A19068D7F9DC695EC8473341F73FED626A4A6E89B58D4ED2024F78AC7678829FA40B7
  
  C8AA7400EE3CEFE125F64E1AB49CE67FA2F2D1B81FC322AA64F16463C134AF51AA9C3A154C7FD4
  
  30BCF4531EA9B6211F92006AC1C61894A7DD5C38E6CB8CC68D6A05BB95B0BDAF66971D357EFCAD
  
  89BCB8109462B796927389567F797E58823706AB224FF927A7616F0E4527D90B0DB9689D850D4B
  
  4F147080CBBF3493E564A1CC43627075E79BF3C3091E4650B8E607F4CCCBCAFCD3F778B7A1464B
  
  14A4E229FD41B5BC4A98880F008ED63FD25AE4504EE8BD38B641F65D0F3F65961AC315F4D68139
  
  7C2470E88813BCFC7E41FDA99AEFE170E274D53DD3D858D8BBDA154BFC93482C65FEAE4AD7E9A4
  
  7AC9530F0A82FF46E8BF22EC64B3A8B69527E92245B3B272C311FCF9946E93476D838EC0AE54EA
  
  8CB899087794A67E6B4E96664AFDD619FC074FA089F83A02FA4FCBB5BE698E508F87BC0F48051A
  
  8AA4DE3EBF3FD93ABCF58C1FB64257027AF8FD69B7CEF07498F48F393B4B4E9BDD6519332A780A
  
  E72152CE168E399E75DB4414618B9EFFB4986B85A94CBD0B912E3D5CDDBA6B784EAC660969A83C
  
  CF3AF928B6E84586B5F1CF353EFDF022DA5DF130E7FFD1698A9A7C26C83F135FC39E9CECB8855D
  
  9601A08D9E5ADC5397EE9E639A198A61A79B3CF5960AFC41584B56B0EF5C604E42BDD021E716B7
  
  3718AA7FA7002D329F22E3898B52F3111E975D5054C8C1BC491EDD67CAF876517901CB7805FA84
  
  4279435B26A2B54C086FE443C079A373B630528664C8F262D147F44F19B3760D4CB4D3A38B8E7B
  
  8492F3FC910E45A201FFBB8B3F06F80CD135C321EF51B7A7C30AFB5A14D5EA851E4B23232B3F0E
  
  272603125DE99C6B1755C9D3E8B9E92D33AA4EEB55D07D06158FFF93BCEE921CBE6A9B6605BE3A
  
  D1C203AB903AED90A1F735D32846EE9BF7ACBD7BC479FDAD8204F0A5601477E2CA092C7CD57671
  
  E2B179B60A72794FB3DEBEBE9E41EF333F97007BFFDC1A1C55C79EB9CF85AC2DCC23700F48D6EE
  
  621D02FAAB7D7E7C512B939362AADB1ACDB25B75FE1B935F15F922AE4E03632EC9AC1CCE112FD7
  
  CC8510B86921209CEF5E66F52CAF4EAFD83E772A653B0B10EA7DE38174A6458228F90146A1C5E5
  
  F057D384CB5CE531C02F7BF2BD20517F182597310157AED68C2325CCABC22F9D38A32AF1575707
  
  DEA5139E0363677162DB6EE9D46619DAC88D9D97902D5C58339FF9B7E3DDBDB7226DED36C1CB51
  
  B50BA744CB2DE5964126918879DBE7D2FA616FBA9D4D2965021EDDA8A88FDFC08853DC1FE99614
  
  15C741B21FA7D79A6F0281BD054E49C6F1893A2A4B3708E7272F42C6AE8A5E7C95CD6879466150
  
  CB99F4110B392DA7DF91419571EE31C926B3571DC0FD7302E271263C4AFCF7553525651D8D5587
  
  7AA4E1333092ED52A9672990BF34A1B60EC243241530E67E9F1D7CCBBA1B511A24793F2511F3E4
  
  763B02D4084CFF099BD83408FEAD0403E33A6BEFBCAD9564232FAB7BABC8BCAF785A6EA74AA882
  
  B74DE229A6C9D140E617F10E988467704D31695637106825DE0F31C3BBAD7EEC317C2CBF7CA7B2
  
  E25A5365C8234B9C57C9E3853C7A581972B3186AA87046C09DAA4429DCC56C7CF7F9750428B974
  
  49E6D9E0EE104BB2E80D05797D61C71F7751C5726E1FD7C441176ABD32613B6D7EA98B4262F9F5
  
  664AA8D4E9422AA0F44C4A1C79C32140F6F38ABD0FE9D7CD85997A357C999A37674F4603609349
  
  BEBA4F86D818290F6D1E75CC70555D68A717EC063B92931F2278E460A24A53377D85322FAC03BA
  
  D008ED6402F3768A75CEEF4EBF73852A2512C1499B3D4502E05E9C4C77D962708DE7FB406265A7
  
  A7B0AE38E879BE8922C585EF4ACDA2A4459C27DEAC5909ABCC15064EB6B974EED95702286F8C04
  
  E59187241E357BF0FA2F1B1D2576366DD96B15E40891041435D3542344DDDCEA9982E7850BCF12
  
  BF60093F0BB91279E8AC2A40DB5C7F0586422A9B7519B5A14F0E5BE49BC0818137D0D512A2BD6E
  
  475855EAFBEF470190721A6E90966CD8F47F801780B6181C92B6D401BB70A64C95B12AE7DDD980
  
  D32323EF569C05105ADC3AB5DE127B421EE1453DF7FC5BE2275E5941FC9C7FEE09F931039DA70B
  
  920604D40703369B47D8014E95F827563234D32A08FCF8B99073FBF7E87A34D7FA1AF9E6B5C5C0
  
  8802250ACB7E943DA108BB2485A41324819CE85AD51CA83FC7575FD5E8EE353AB8C6B9C2F3DB8E
  
  B3DED45F22711190321A2F6F95097DD6A0ED91E0DA54AAFD05A6B9D399239525CD833E9AA6231C
  
  D4F835B730E5459C399DF7693DC4C1CAEFAD6416BC95F8B9F0533C0A27D86B42D8480FC908AA91
  
  C0468F0BF73CC5E260E5F00D82C439E9A581B19A61B5014606D57D186D9F9469217B4472DB1609
  
  FED1949D29FF3E2E3FAAB536FF7949A26042B9FC5408B7B059EE35B0E287F4D8CEE50E540DB716
  
  6802EFBF0FB60F18E5A1FA942A4E3E66EE68EA44B8FF66B3B0669E59A81C6166312987164E6DC4
  
  DB7509B11444287A5BEC5BEA9FF656D5A42C0DCB10F83B14DF02BBFE729E9839E594895DA80448
  
  B760D7AB5E58B675ADA42098929FBED35D62A54737FE6E612569B8DE4EB603F1DD6DBFFE8F79D6
  
  AEA1B0599913AA70083EB94E251DB277BE9F492E4D13B2E42FCCF825B3589EC4F9427BA659A59B
  
  73DACC3C9D2E9CD77267DEFCFDCF2117F5207AEC4198130B1B585875A49B6E01C8A5FE5EBC4678
  
  2BDBC438BE32A1CAF134E9B53D82761E9B682E0A198A812F296E193C296412596978DD3C5EEF0F
  
  BE7B353568C5627BC6467C767F9ED8412EE405C24F6DFE95AF72437D1AD9B992FF30459D232491
  
  645E845FFF03214949D33E1A48EF2A99DB29DE6FF82E72050E0E6E08E863DB570ADF515D82931B
  
  AE70437E49C397767874E34513417A49234BBD89F19FFC3EE3CD9F5BA7112A4BEC07012C709585
  
  97ECA5A501365E3524A500FA8A43A7BA90F91E8CD5825F65940825DE80F5EF11198952A258B5BB
  
  EC5AA244F8674BE1764B526DB6B9D244C886980B25C7EE4ACFEBF79349E26F2D2D65FA2810D1CD
  
  4B39233F9638546A3FF1E8D017EF458F182CF228392AD30A6E7DF715CD0B55FA377DFA6880F554
  
  367A6E3728065DF65CAD30AD927943963973F6596C1C1DD29C2C84B224F81361D4CA2ED2CC6483
  
  A59F833CB8A964C281B0BA2C834783C5752986B8E70583E6C9AA33132BFC67998B992F249D0AD7
  
  6C02BDD2925B39501A69E4E00DD3534C474D0715C913E23660BB765C2E5FE37F445AC605F62DE9
  
  C533EE924EFE205C528C372403696885DDD6BADAF602993F3DF49957E21B2EE409AA6336A8103E
  
  BCC0B33B8FFD8C818F2D25D22E3B0E4E874CF4ADE03F69C1B017DA9CED9EAFC6CBD86780C819A9
  
  CE03C2AA203CABD299251B9090F2659C3245A845B50EB36BCBC07AD6FE0A191D3E8BD0C9B9700A
  
  706EA3028E8055B585A6D8F305C80DD5ADBE1DA433669E1D9F459EA105B5F6D756A9FF3DF71607
  
  9FDA77312E447F764C0F178B7F128DA4ACE17F8D4F213864C2AAFAB0D5BCE40A19AC92FF21D7B1
  
  F1F3CEC338951D7292147937ED0BDB0CEC2578D0BFE12F7F21B4D76ADD1F557E8A5761399591C2
  
  D4A2CB1F0D9564586567AE9165451DFF5D61E08F0421A8606E49A552E19F8CCDC90CA92C4BC2AD
  
  2FC3DC29DFF6E56BA85D8E7B0388962DB5BB107CBAB4FD4170F24C21DFE2A3EF29DDB82C02EF32
  
  4B9DB2AC09C1A5EA7C71B1547573B68FF8C3215B803CD3EDE122DE1D71492BD3B71C5A6DE52D50
  
  8E98676560ED273403B9D655F239579007706C078EA3EDC120EDFECAF4F13379A4526FB3731A08
  
  9690CF6D74F2E95E332D1DDB36DF458771F0F7BF321E524447B6E04AC33011E855A0E25582F104
  
  69F1B6C19089AF013C38F2624826A5730641
  
  0000000000000000000000000000000000000000000000000000000000000000
  
  0000000000000000000000000000000000000000000000000000000000000000
  
  0000000000000000000000000000000000000000000000000000000000000000
  
  0000000000000000000000000000000000000000000000000000000000000000
  
  0000000000000000000000000000000000000000000000000000000000000000
  
  0000000000000000000000000000000000000000000000000000000000000000
  
  0000000000000000000000000000000000000000000000000000000000000000
  
  0000000000000000000000000000000000000000000000000000000000000000
  
  cleartomark %{restore}if
  
  %%EndProcSet
  %%BeginProcSet: texps.pro
  TeXDict begin /rf{findfont dup length 1 add dict begin{1 index /FID ne 2
  index /UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
  exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]/Metrics
  exch def dict begin Encoding{exch dup type /integertype ne{pop pop 1 sub
  dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}
  ifelse}forall Metrics /Metrics currentdict end def[2 index currentdict
  end definefont 3 -1 roll makefont /setfont load]cvx def}def
  /ObliqueSlant{dup sin S cos div neg}B /SlantFont{4 index mul add}def
  /ExtendFont{3 -1 roll mul exch}def /ReEncodeFont{/Encoding exch def}def
  end
  %%EndProcSet
  %%BeginProcSet: special.pro
  TeXDict begin /SDict 200 dict N SDict begin /@SpecialDefaults{/hs 612 N
  /vs 792 N /ho 0 N /vo 0 N /hsc 1 N /vsc 1 N /ang 0 N /CLIP 0 N /rwiSeen
  false N /rhiSeen false N /letter{}N /note{}N /a4{}N /legal{}N}B
  /@scaleunit 100 N /@hscale{@scaleunit div /hsc X}B /@vscale{@scaleunit
  div /vsc X}B /@hsize{/hs X /CLIP 1 N}B /@vsize{/vs X /CLIP 1 N}B /@clip{
  /CLIP 2 N}B /@hoffset{/ho X}B /@voffset{/vo X}B /@angle{/ang X}B /@rwi{
  10 div /rwi X /rwiSeen true N}B /@rhi{10 div /rhi X /rhiSeen true N}B
  /@llx{/llx X}B /@lly{/lly X}B /@urx{/urx X}B /@ury{/ury X}B /magscale
  true def end /@MacSetUp{userdict /md known{userdict /md get type
  /dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup
  length 20 add dict copy def}if end md begin /letter{}N /note{}N /legal{}
  N /od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath
  clippath mark{transform{itransform moveto}}{transform{itransform lineto}
  }{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{
  itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{
  closepath}}pathforall newpath counttomark array astore /gc xdf pop ct 39
  0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}N
  /txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1
  scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get
  ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip
  not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0
  TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{noflips{TR
  pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1
  -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg
  TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg
  sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr
  0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add
  2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N /cp
  {pop pop showpage pm restore}N end}if}if}N /normalscale{Resolution 72
  div VResolution 72 div neg scale magscale{DVImag dup scale}if 0 setgray}
  N /psfts{S 65781.76 div N}N /startTexFig{/psf$SavedState save N userdict
  maxlength dict begin /magscale true def normalscale currentpoint TR
  /psf$ury psfts /psf$urx psfts /psf$lly psfts /psf$llx psfts /psf$y psfts
  /psf$x psfts currentpoint /psf$cy X /psf$cx X /psf$sx psf$x psf$urx
  psf$llx sub div N /psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy
  scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR
  /showpage{}N /erasepage{}N /copypage{}N /p 3 def @MacSetUp}N /doclip{
  psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2
  roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath
  moveto}N /endTexFig{end psf$SavedState restore}N /@beginspecial{SDict
  begin /SpecialSave save N gsave normalscale currentpoint TR
  @SpecialDefaults count /ocount X /dcount countdictstack N}N /@setspecial
  {CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto
  closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx
  sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR
  }{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse
  CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury
  lineto closepath clip}if /showpage{}N /erasepage{}N /copypage{}N newpath
  }N /@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{
  end}repeat grestore SpecialSave restore end}N /@defspecial{SDict begin}
  N /@fedspecial{end}B /li{lineto}B /rl{rlineto}B /rc{rcurveto}B /np{
  /SaveX currentpoint /SaveY X N 1 setlinecap newpath}N /st{stroke SaveX
  SaveY moveto}N /fil{fill SaveX SaveY moveto}N /ellipse{/endangle X
  /startangle X /yrad X /xrad X /savematrix matrix currentmatrix N TR xrad
  yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end
  %%EndProcSet
  %%BeginProcSet: crop.pro
  TeXDict begin /cX 18 def /CM{gsave TR 0 cX neg moveto 0 cX lineto stroke
  cX neg 0 moveto cX 0 lineto stroke grestore}def end /bop-hook{cX dup TR
  gsave .3 setlinewidth 0 0 CM vsize cX 2 mul sub dup hsize cX 2 mul sub
  dup isls{4 2 roll}if 0 CM exch CM 0 exch CM grestore 0 cX -2 mul TR isls
  {cX -2 mul 0 TR}if}def
  %%EndProcSet
  TeXDict begin @defspecial
  
   /arrow { save 4 1 roll 14 dict begin /y exch def /x exch def /D exch
  def currentpoint /b exch def /a exch def /dx x a sub def /dy y b sub
  def /arrowlen dx dup mul dy dup mul add sqrt def /angle dy dx atan
  def 0 setgray a b translate angle rotate /xp arrowlen def /m xp D sub
  def 0.5 setlinewidth [3 1] 0 setdash 0 0 moveto m 0 lineto stroke /back
  D 8 div neg def /up D 4 div def m 0 moveto back up rlineto xp 0 lineto
  closepath fill m 0 moveto back up neg rlineto xp 0 lineto closepath
  fill end restore } def /drawtriangle { -144 72 rlineto 0 -144 rlineto
  closepath fill } def /cropmark { 2 copy moveto 0 -18 rmoveto 0 36 rlineto
  stroke moveto -18 0 rmoveto 36 0 rlineto stroke } def /fillpage { .9
  setgray 0 0 moveto 0 792 rlineto 612 0 rlineto 0 -792 rlineto fill
  0 setgray .25 setlinewidth 18 18 cropmark 18 684 cropmark 549 684 cropmark
  549 17 cropmark } def /showpart { 10 -22 translate /StoneSans-SemiboldItalic
  findfont 140 scalefont setfont dup stringwidth pop /sw exch def sw
  neg -46 moveto 0 setgray dup show sw 4 add neg -42 moveto 0.7 setgray
  show sw neg 0 translate /StoneSans-SemiboldItalic findfont 30 scalefont
  setfont dup stringwidth pop /sw exch def sw neg 0 moveto 0 setgray
  show sw 10 add neg 0 translate -600 10 moveto 12 0 10 arrow } def
   
  @fedspecial end TeXDict begin
  37298252 46178789 1000 600 600 (book.dvi) @start /Fa
  133[33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33
  33 33 33 33 33 33 33 33 33 1[33 33 2[33 33 33 33 33 33
  33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33
  33 33 33 33 1[33 1[33 3[33 33 33 33 33 33 33 33 33 33
  33 33 3[33 33 3[33 36[{.82 ExtendFont TeXBase1Encoding ReEncodeFont }73
  66.666667 /PPCode rf /Fb 1 14 df<000001FFC000000000001FFFFC0000000000FF
  FFFF8000000001FF007FC000000007F00007F00000001F800000FC0000003F0000007E00
  00007C0000001F000000F000000007800001E000000003C00003C000000001E000078000
  000000F00007000000000070000F000000000078001E00000000003C001C00000000001C
  003C00000000001E003800000000000E007800000000000F007000000000000700700000
  0000000700F000000000000780E000000000000380E000000000000380E0000000000003
  80E000000000000380E000000000000380E000000000000380E000000000000380E00000
  0000000380E000000000000380F000000000000780700000000000070070000000000007
  007800000000000F003800000000000E003C00000000001E001C00000000001C001E0000
  0000003C000F000000000078000700000000007000078000000000F00003C000000001E0
  0001E000000003C00000F0000000078000007C0000001F0000003F0000007E0000001F80
  0000FC00000007F00007F000000001FF007FC000000000FFFFFF80000000001FFFFC0000
  00000001FFC000000039357CA842>13 D E /Fc 140[135 6[135
  3[135 3[135 2[135 97[{.82 ExtendFont TeXBase1Encoding ReEncodeFont }5
  274.999988 /PPCode rf /Fd 144[37 2[37 7[37 1[37 98[{
  .82 ExtendFont TeXBase1Encoding ReEncodeFont }4 75.000000
  /PPCodeBold rf /Fe 1 12 df<00003FC000000000FFF800000007E07C0000000F801F
  0000003F001F800C007E000F800C00FC0007C01C01F80007E01803F00007E01807E00003
  E0380FE00003F0300FC00003F0301FC00003F0703F800003F0603F800003F0E07F800003
  F0C07F000003F1C07F000003F1807F000003F380FF000003F300FE000003F700FE000003
  FE00FE000003FC00FE000003FC00FC000003F800FC000003F000FC000003F000FC000003
  F000FC000003F0007E000007F0007E00000FF0003E00001DF8183F000079F8181F0000E1
  F8380F8007C0F83007E03F007CF001FFF8003FC0003FC0000F802E267DA435>11
  D E /Ff 82[28 51[42 42 60 1[46 28 32 32 1[42 37 46 1[23
  37 23 23 1[42 1[32 42 34 38 37 11[65 51 4[65 2[46 5[46
  51 65 17[42 42 49[{ TeXBase1Encoding ReEncodeFont }30
  83.333337 /Palatino-Italic rf /Fg 140[61 2[61 61 61 61
  61 61 2[61 2[61 61 61 1[61 55[61 61 40[{
  .82 ExtendFont TeXBase1Encoding ReEncodeFont }14 124.999997
  /PPCode rf /Fh 134[53 1[53 53 53 53 53 53 1[53 53 53
  53 53 53 1[53 53 53 53 53 53 53 1[53 1[53 11[53 6[53
  29[53 4[53 53 40[{.82 ExtendFont TeXBase1Encoding ReEncodeFont }27
  108.333331 /PPCode rf /Fi 134[37 37 3[37 37 37 1[37 37
  37 37 37 2[37 37 37 37 37 37 37 37 37 1[37 15[37 8[37
  70[{ TeXBase1Encoding ReEncodeFont .167 SlantFont .82 ExtendFont }22
  75.000000 /PPCode rf /Fj 134[43 43 43 43 43 43 43 43
  1[43 43 43 43 43 2[43 43 43 43 43 43 43 43 43 1[43 8[43
  43 2[43 2[43 43 43 43 2[43 2[43 43 1[43 43 43 43 17[43
  6[43 39[{ TeXBase1Encoding ReEncodeFont .167 SlantFont .82 ExtendFont }
  39 87.499997 /PPCode rf /Fk 134[74 80 118 74 86 62 62
  62 88 88 84 88 132 43 84 1[43 88 88 57 76 88 69 89 79
  7[91 98 145 96 96 84 74 89 103 86 103 99 129 74 1[44
  44 101 99 69 74 101 89 89 99 6[42 84 84 84 84 84 84 84
  84 84 84 76 42 46 42 2[59 59 32 39[{ TeXBase1Encoding ReEncodeFont }66
  133.333334 /StoneSans-Bold rf /Fl 82[30 24[46 46 25[51
  47 76 52 55 30 39 36 1[55 50 53 81 27 51 1[27 53 51 30
  44 56 41 51 46 11[71 4[55 3[56 2[31 26[23 1[23 2[30 30
  37[55 2[{ TeXBase1Encoding ReEncodeFont }35 91.666666
  /Palatino-Roman rf /Fm 82[32 3[71 46[48 53 48 80 53 58
  32 42 37 58 58 53 58 85 32 58 32 32 58 53 37 48 58 42
  58 48 8[64 95 74 74 64 58 69 80 58 80 80 95 58 74 37
  37 80 80 53 58 80 69 64 74 6[24 48 48 3[48 2[48 1[28
  24 1[24 4[27 36[58 2[{ TeXBase1Encoding ReEncodeFont }62
  95.833334 /Palatino-Bold rf /Fn 134[138 149 222 139 160
  115 115 115 1[166 158 165 247 80 157 1[80 165 166 106
  142 166 129 166 147 10[180 180 157 139 166 1[161 194
  185 241 138 1[82 82 189 1[129 138 190 166 1[185 19[87
  45[{ TeXBase1Encoding ReEncodeFont }42 249.999994 /StoneSans-Bold
  rf /Fo 134[181 2[181 1[136 149 140 1[218 211 215 319
  94 2[94 1[218 1[191 218 167 217 188 12[207 194 2[207
  3[181 4[266 1[189 263 2[233 65[{ TeXBase1Encoding ReEncodeFont }25
  349.999988 /StoneSans-Semibold rf /Fp 141[25 2[37 38
  55 3[17 1[38 1[31 101[{ TeXBase1Encoding ReEncodeFont }7
  66.666667 /StoneSans-SemiboldItalic rf /Fq 129[37 37
  37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37
  37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37
  37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37
  37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37
  37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37
  37 37 33[{.82 ExtendFont TeXBase1Encoding ReEncodeFont }94
  75.000000 /PPCode rf /Fr 129[43 1[43 1[43 43 43 43 43
  43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
  43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
  43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
  43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
  43 43 43 43 43 43 43 43 43 43 43 43 43 33[{
  .82 ExtendFont TeXBase1Encoding ReEncodeFont }92 87.499997
  /PPCode rf /Fs 82[28 50[42 46 42 69 46 51 28 37 32 51
  51 46 51 74 28 51 28 28 51 46 32 42 51 37 51 42 7[55
  55 83 65 65 55 51 60 69 51 69 69 83 51 65 32 32 69 69
  46 51 69 60 55 65 1[37 4[21 42 42 42 42 42 42 42 42 42
  42 25 21 1[21 2[28 28 23 36[51 2[{ TeXBase1Encoding ReEncodeFont }71
  83.333337 /Palatino-Bold rf /Ft 134[53 57 85 53 61 44
  44 44 1[64 61 63 95 31 60 1[31 63 64 41 55 64 49 64 57
  10[69 69 60 53 64 1[62 74 71 93 53 1[32 32 72 71 50 53
  73 64 64 71 7[60 60 60 60 60 60 60 60 60 60 55 1[33 45[{
   TeXBase1Encoding ReEncodeFont }55 95.833334 /StoneSans-Bold
  rf /Fu 133[62 65 70 104 65 75 54 54 54 77 77 74 77 115
  37 73 1[37 77 77 50 66 77 60 78 69 7[80 86 127 84 84
  73 65 78 1[75 90 86 113 65 82 38 38 88 87 60 65 88 78
  78 86 6[37 73 73 73 73 73 73 73 73 73 73 67 37 41 37
  4[28 39[{ TeXBase1Encoding ReEncodeFont }65 116.666669
  /StoneSans-Bold rf /Fv 134[41 43 65 41 47 29 32 29 50
  50 48 49 74 20 40 1[20 49 49 25 42 49 40 49 42 8[54 77
  49 57 46 43 46 66 45 66 65 77 40 49 23 22 58 61 40 41
  61 57 48 51 6[24 48 48 48 48 48 48 48 48 48 48 32 24
  28 24 2[29 29 17 39[{ TeXBase1Encoding ReEncodeFont }66
  83.333337 /StoneSans rf /Fw 82[28 20[28 83 42 1[42 42
  22[50 1[42 46 43 69 47 50 27 35 33 46 50 45 48 73 24
  46 19 24 48 46 28 40 51 37 46 42 23 42 1[28 1[28 55 55
  55 83 60 65 51 44 55 65 50 65 69 79 51 60 28 28 69 63
  46 51 64 59 51 65 5[21 21 42 42 42 42 42 42 42 42 42
  42 50 21 1[21 50 32 28 28 23 5[23 29[50 50 2[{
   TeXBase1Encoding ReEncodeFont }86 83.333337 /Palatino-Roman
  rf /Fx 173[33 24[25 25 25 25 25 25 25 25 25 25 48[{
   TeXBase1Encoding ReEncodeFont }11 50.000001 /Palatino-Roman
  rf /Fy 82[32 50[42 48 48 69 48 53 32 37 37 44 48 42 53
  74 27 42 27 27 48 48 27 37 48 39 44 42 8[69 90 69 74
  58 53 64 74 58 74 74 90 53 64 1[32 74 69 53 58 74 64
  58 69 6[24 3[48 1[48 1[48 48 1[28 24 1[24 58 1[32 32
  27 74 35[50 2[{ TeXBase1Encoding ReEncodeFont }64 95.833334
  /Palatino-Italic rf /Fz 135[50 1[47 12[23 105[{
   TeXBase1Encoding ReEncodeFont }3 95.833334 /StoneSans
  rf /FA 82[32 20[32 95 48 58 48 48 24[48 53 49 80 54 58
  31 40 38 53 57 52 56 84 28 53 22 28 56 53 32 46 58 42
  53 48 1[48 1[32 58 32 64 64 64 95 69 74 59 50 64 75 58
  75 79 90 58 69 32 32 79 73 53 58 74 68 58 74 71 42 3[24
  24 48 48 48 48 48 48 48 48 48 48 58 24 1[24 1[37 32 32
  27 74 4[27 29[58 58 2[{ TeXBase1Encoding ReEncodeFont }88
  95.833334 /Palatino-Roman rf /FB 134[149 149 2[166 100
  116 116 1[149 133 166 1[83 2[83 149 149 83 116 149 122
  138 133 11[233 183 166 2[183 233 233 1[166 2[100 1[216
  2[233 199 183 216 17[88 47[{ TeXBase1Encoding ReEncodeFont }33
  300.000000 /Palatino-Italic rf /FC 141[42 2[48 2[30 2[30
  3[42 3[48 13[60 11[78 2[84 21[27 46[{ TeXBase1Encoding ReEncodeFont }10
  108.333331 /Palatino-Italic rf /FD 82[36 21[108 29[60
  56 90 61 65 35 46 43 1[65 59 63 95 31 60 1[31 63 60 36
  52 66 48 60 54 19[102 2[36 36 1[82 1[66 22[27 1[27 44[{
   .167 SlantFont TeXBase1Encoding ReEncodeFont }32 108.333331
  /Palatino-Roman rf /FE 171[112 84[{ TeXBase1Encoding ReEncodeFont }1
  183.333331 /Palatino-Italic rf /FF 139[24 32 30 1[45
  1[43 1[22 2[22 1[42 32[42 4[58 7[37 37 6[37 4[19 44[{
   .167 SlantFont TeXBase1Encoding ReEncodeFont }14 75.000000
  /Palatino-Roman rf /FG 1 14 df<00000003FFC00000000000003FFFFC0000000000
  01FFFFFF800000000007FFFFFFE0000000001FFE007FF8000000007FE00007FE00000000
  FF000000FF00000003FC0000003FC0000007F00000000FE000000FC000000003F000001F
  8000000001F800003F0000000000FC00007E00000000007E0000FC00000000003F0000F8
  00000000001F0001F000000000000F8003F000000000000FC003E0000000000007C007C0
  000000000003E00FC0000000000003F00F80000000000001F01F00000000000000F81F00
  000000000000F81E00000000000000783E000000000000007C3E000000000000007C3C00
  0000000000003C7C000000000000003E7C000000000000003E78000000000000001E7800
  0000000000001E78000000000000001EF8000000000000001FF8000000000000001FF000
  0000000000000FF0000000000000000FF0000000000000000FF0000000000000000FF000
  0000000000000FF0000000000000000FF0000000000000000FF0000000000000000FF000
  0000000000000FF0000000000000000FF8000000000000001FF8000000000000001F7800
  0000000000001E78000000000000001E78000000000000001E7C000000000000003E7C00
  0000000000003E3C000000000000003C3E000000000000007C3E000000000000007C1E00
  000000000000781F00000000000000F81F00000000000000F80F80000000000001F00FC0
  000000000003F007C0000000000003E003E0000000000007C003F000000000000FC001F0
  00000000000F8000F800000000001F0000FC00000000003F00007E00000000007E00003F
  0000000000FC00001F8000000001F800000FC000000003F0000007F00000000FE0000003
  FC0000003FC0000000FF000000FF000000007FE00007FE000000001FFE007FF800000000
  07FFFFFFE00000000001FFFFFF8000000000003FFFFC00000000000003FFC0000000484E
  7BBB53>13 D E /FH 82[25 51[37 3[42 25 29 29 2[33 42 1[21
  2[21 1[37 21 29 1[30 35 33 16[46 3[42 7[58 50 67[{
   TeXBase1Encoding ReEncodeFont }20 75.000000 /Palatino-Italic
  rf /FI 82[25 21[75 37 27[37 42 39 62 42 45 24 32 30 42
  45 41 43 66 22 42 17 22 43 42 25 36 46 33 41 37 6[50
  50 50 75 54 58 46 39 50 59 45 59 62 71 46 54 25 25 62
  57 42 46 58 53 46 58 6[19 37 37 37 37 37 37 37 37 37
  37 45 19 1[19 4[21 58 2[37 1[21 29[45 45 2[{
   TeXBase1Encoding ReEncodeFont }75 75.000000 /Palatino-Roman
  rf /FJ 147[26 108[{}1 33.333334 /ZapfDingbats rf /FK
  134[37 39 58 1[43 26 29 26 2[43 44 67 18 36 1[18 44 44
  22 38 44 36 1[37 12[42 39 42 1[40 59 1[69 4[53 2[37 55
  51 43 46 20[21 44[{ TeXBase1Encoding ReEncodeFont }33
  75.000000 /StoneSans rf /FL 134[46 50 2[53 38 38 38 1[55
  53 55 82 27 2[27 55 55 35 47 55 43 55 49 7[57 1[91 2[52
  46 2[54 65 62 1[46 2[27 1[62 43 46 63 55 55 62 7[52 52
  52 52 52 52 52 52 52 52 1[26 29 26 44[{ TeXBase1Encoding ReEncodeFont }
  49 83.333337 /StoneSans-Bold rf /FM 140[63 59 2[82 87
  1[43 83 1[43 87 2[72 1[66 1[75 9[149 2[92 6[141 1[108
  50 4[91 22[37 46[{ TeXBase1Encoding ReEncodeFont }18
  150.000000 /Palatino-Roman rf /FN 135[174 1[194 213 116
  3[213 194 213 310 116 2[116 3[174 1[155 1[174 20[213
  7[290 2[271 65[{ TeXBase1Encoding ReEncodeFont }16 349.999988
  /Palatino-Bold rf /FO 139[89 89 115[{}2 100.000003 /ZapfDingbats
  rf /FP 135[133 1[148 162 88 3[162 148 162 236 88 2[88
  3[133 1[118 1[133 20[162 7[221 2[207 65[{
   TeXBase1Encoding ReEncodeFont }16 266.666669 /Palatino-Bold
  rf /FQ 139[67 67 115[{}2 75.000000 /ZapfDingbats rf end
  %%EndProlog
  %%BeginSetup
  %%Feature: *Resolution 600dpi
  TeXDict begin
  %%PaperSize: Letter
  
  %%EndSetup
  %%Page: 445 1
  445 468 bop 0 0 a @beginspecial @setspecial
   gsave .50 setgray newpath 278 10 moveto 0 100 rlineto 132 0 rlineto
  0 -100 rlineto -132 0 rlineto closepath fill 1 setgray /StoneSans-Bold
  findfont 12 scalefont setfont 296 19 moveto 3 0 (CHAPTER 24) ashow
  grestore
   
  @endspecial
  299 355 a Fn(Parsing)84 b(Command-)299 654 y(Line)g(Options)299
  1557 y Fm(From)21 b(the)f(forthcoming)i(book)f(entitled)f(Linux)h
  (Application)g(Development)f(by)299 1669 y(Michael)35
  b(K.)h(Johnson)h(and)e(Erik)h(W)l(.)g(T)-11 b(roan,)39
  b(copyright)d(\251)g(1998)e(by)i(Addison)299 1781 y(W)-7
  b(esley)38 b(Longman,)43 b(Inc.,)f(to)d(be)f(published)i(in)e(April,)k
  (1998.)77 b(All)38 b(rights)h(re\255)299 1893 y(served.)c(This)24
  b(material)e(is)i(made)g(available)f(with)g(the)h(permission)h(of)f
  (the)f(pub\255)299 2005 y(lisher)-5 b(.)34 b(The)21 b(publisher)5
  b(')-5 b(s)23 b(permission)g(is)g(required)f(for)h(reproduction,)g
  (storage,)299 2117 y(or)h(transmittal)f(of)h(this)g(material.)299
  2329 y(For)g(more)g(information,)g(see)f(http:/)-14 b(/www)-9
  b(.awl.com/cseng/books/lad/.)299 2541 y FA(Most)41 b(Linux)e(pr)n
  (ograms)h(allow)f(the)g(user)g(to)h(specify)h(command\255line)e
  (options.)299 2653 y(Such)23 b(options)h(perform)g(a)f(wide)g(variety)g
  (of)g(functions)g(but)g(ar)n(e)g(fairly)f(uniform)h(in)299
  2765 y(their)31 b(syntax.)60 b Fm(Short)33 b(options)g
  FA(consist)g(of)f(a)g Fr(-)h FA(character)e(followed)h(by)g(a)g(single)
  299 2877 y(alphanumeric)25 b(character)-7 b(.)43 b Fm(Long)28
  b(options)p FA(,)g(common)g(in)e(GNU)h(utilities,)g(consist)299
  2989 y(of)f(two)g Fr(-)g FA(characters)g(followed)g(by)g(a)g(string)g
  (made)g(up)g(of)g(letters,)h(numbers,)f(and)299 3101
  y(hyphens.)34 b(Either)24 b(type)g(of)g(option)g(may)h(be)e(followed)h
  (by)g(an)f(ar)n(gument.)34 b(A)24 b(space)299 3213 y(separates)19
  b(a)f(short)h(option)f(fr)n(om)h(its)g(ar)n(guments;)h(either)d(a)i
  (space)g(or)g(an)f Fr(=)g FA(separates)299 3325 y(a)23
  b(long)h(option)g(fr)n(om)g(an)f(ar)n(gument.)299 3537
  y(Ther)n(e)c(ar)n(e)h(many)g(ways)g(of)h(parsing)f(command\255line)g
  (options.)34 b(The)19 b(most)j(popular)299 3649 y(method)k(is)g
  (parsing)g(the)g Fr(argv)f FA(array)g(by)h(hand.)40 b(The)25
  b Fr(getopt\(\))g FA(and)h Fr(getopt_long\(\))299 3761
  y FA(library)40 b(functions)h(pr)n(ovide)g(some)h(assistance)g(for)f
  (option)h(parsing.)86 b Fr(getopt\(\))299 3873 y FA(is)38
  b(pr)n(ovided)h(by)f(many)f(Unix)h(implementations,)j(but)d(it)f
  (supports)j(only)d(short)299 3985 y(options.)d(The)22
  b Fr(getopt_long\(\))g FA(function)g(is)h(available)e(on)h(Linux)h(and)
  f(allows)h(auto\255)299 4097 y(mated)h(parsing)g(of)f(both)h(short)g
  (and)f(long)h(options.)299 4309 y(A)33 b(library)f(called)h(popt)h
  (exists)g(speci\002cally)f(for)g(option)g(parsing.)62
  b(It)34 b(includes)e(a)299 4421 y(number)22 b(of)i(advantages)g(over)f
  (the)g Fr(getopt\(\))g FA(functions.)3232 4699 y Ft(445)p
  eop
  %%Page: 446 2
  446 469 bop -187 -116 a Ft(446)118 b FL(Chapter)29 b(24)83
  b Fv(Parsing)23 b(Command-Line)f(Options)p -187 -76 3413
  4 v 128 83 a FA(\225)100 b(It)33 b(does)h(not)f(make)h(use)f(of)g
  (global)g(variables,)h(which)e(allows)h(it)g(to)h(be)f(used)286
  195 y(when)22 b(multiple)h(passes)j(ar)n(e)d(needed)g(to)h(parse)g
  Fr(argv)p FA(.)128 407 y(\225)100 b(It)22 b(can)h(parse)f(an)g
  (arbitrary)f(array)g(of)i Fr(argv)p FA(\255style)f(elements.)33
  b(This)22 b(allows)g(popt)286 519 y(to)i(be)f(used)h(for)g(parsing)f
  (command\255line\255style)h(strings)g(fr)n(om)g(any)f(sour)n(ce.)128
  731 y(\225)100 b(It)30 b(pr)n(ovides)h(a)f(standar)n(d)g(method)g(of)g
  (option)g(aliasing.)52 b(Pr)n(ograms)30 b(that)g(use)286
  843 y(popt)c(can)f(easily)g(allow)f(users)h(to)g(add)h(new)e
  (command\255line)h(options,)h(which)286 955 y(ar)n(e)k(de\002ned)g(as)h
  (combinations)f(of)h(alr)n(eady\255existing)e(options.)55
  b(This)30 b(allows)286 1067 y(the)h(user)h(to)h(de\002ne)e(new)-9
  b(,)33 b(complex)h(behaviors)d(or)h(change)f(the)h(default)f(be\255)286
  1179 y(haviors)23 b(of)h(existing)f(options.)111 1453
  y(Like)h Fr(getopt_long\(\))p FA(,)e(the)i(popt)h(library)d(supports)j
  (short)f(and)g(long)f(style)h(options.)111 1665 y(The)29
  b(popt)j(library)d(is)h(highly)f(portable)h(and)g(should)g(work)f(on)h
  (any)g(POSIX)g(plat\255)111 1777 y(form.)68 b(The)34
  b(latest)h(version)g(is)g(always)g(available)e(fr)n(om)i(ftp:/)-14
  b(/ftp.r)n(edhat.com/)111 1889 y(pub/r)n(edhat/code/popt/)111
  2100 y(It)33 b(may)f(be)g(r)n(edistributed)f(under)g(either)g(the)h
  (GNU)g(General)f(Public)g(License)h(or)111 2213 y(the)24
  b(GNU)g(Library)f(General)f(Public)h(License,)h(at)f(the)h(distributor)
  7 b('s)23 b(discr)n(etion.)-187 2541 y Fk(24.1)131 b(Basic)40
  b(popt)j(Usage)p -187 2626 3413 5 v 111 2888 a Fu(24.1.1)59
  b(The)39 b(Option)h(Table)111 3099 y FA(Applications)d(pr)n(ovide)f
  (popt)g(with)f(information)f(on)h(their)f(command\255line)h(op\255)111
  3211 y(tions)24 b(thr)n(ough)f(an)g(array)g(of)h Fr(struct)42
  b(poptOption)23 b FA(str)o(uctur)n(es.)111 3417 y Fq(#include)35
  b(<popt.h>)111 3633 y(struct)h(poptOption)e({)258 3741
  y(const)i(char)g(*)g(longName;)f(/*)h(may)g(be)h(NULL)e(*/)258
  3849 y(char)h(shortName;)292 b(/*)36 b(may)g(be)h('\\0')e(*/)258
  3957 y(int)h(argInfo;)258 4065 y(void)g(*)h(arg;)440
  b(/*)36 b(depends)f(on)i(argInfo)e(*/)258 4172 y(int)h(val;)551
  b(/*)36 b(0)h(means)e(do)i(not)f(return,)f(just)h(update)f(flag)h(*/)
  111 4280 y(};)p eop
  %%Page: 447 3
  447 470 bop 2237 -116 a Fv(24.1)82 b(Basic)23 b(popt)f(Usage)119
  b Ft(447)p 0 -76 3413 4 v 446 71 a FL(Table)27 b(24.1)84
  b Fv(popt)22 b(Argument)i(Types)p 446 103 2820 4 v 446
  120 4 17 v 1167 120 V 2775 120 V 3262 120 V 446 219 4
  100 v 532 190 a Fs(V)-9 b(alue)p 1167 219 V 502 w(Description)p
  2775 219 V 1160 w Fq(arg)20 b Fs(T)-7 b(ype)p 3262 219
  V 446 236 4 17 v 1167 236 V 2775 236 V 3262 236 V 446
  239 2820 4 v 446 246 4 7 v 1167 246 V 2775 246 V 3262
  246 V 446 249 2820 4 v 446 266 4 17 v 1167 266 V 2775
  266 V 3262 266 V 446 365 4 100 v 532 336 a Fq(POPT_ARG_NONE)p
  1167 365 V 240 w Fw(No)21 b(ar)o(gument)f(is)h(expected)p
  2775 365 V 688 w Fq(int)p 3262 365 V 446 465 V 532 436
  a(POPT_ARG_STRING)p 1167 465 V 166 w Fw(No)g(type)g(checking)g(should)h
  (be)e(performed)p 2775 465 V 169 w Fq(char)35 b(*)p 3262
  465 V 446 565 V 532 535 a(POPT_ARG_INT)p 1167 565 V 277
  w Fw(An)21 b(integer)f(ar)o(gument)h(is)g(expected)p
  2775 565 V 410 w Fq(int)p 3262 565 V 446 664 V 532 635
  a(POPT_ARG_LONG)p 1167 664 V 240 w Fw(A)f(long)i(integer)f(is)g
  (expected)p 2775 664 V 652 w Fq(long)p 3262 664 V 446
  681 4 17 v 1167 681 V 2775 681 V 3262 681 V 446 684 2820
  4 v 299 933 a FA(Each)34 b(member)f(of)g(the)g(table)g(de\002nes)g(a)h
  (single)f(option)g(that)g(may)h(be)f(passed)i(to)299
  1045 y(the)29 b(pr)n(ogram.)50 b(Long)30 b(and)e(short)i(options)f(ar)n
  (e)g(consider)n(ed)h(a)f(single)f(option)i(that)299 1157
  y(may)k(occur)g(in)g(two)g(dif)n(fer)n(ent)f(forms.)65
  b(The)33 b(\002rst)h(two)g(members,)i Fr(longName)e FA(and)299
  1269 y Fr(shortName)p FA(,)25 b(de\002ne)g(the)g(names)h(of)f(the)g
  (option;)i(the)e(\002rst)h(is)g(a)g(long)f(name,)g(and)h(the)299
  1381 y(latter)d(is)h(a)g(single)f(character)-7 b(.)299
  1593 y(The)21 b Fr(argInfo)g FA(member)h(tells)g(popt)h(what)e(type)h
  (of)g(ar)n(gument)g(is)g(expected)h(after)e(the)299 1705
  y(ar)n(gument.)33 b(If)23 b(no)g(option)g(is)g(expected,)h
  Fr(POPT_ARG_NONE)d FA(should)i(be)g(used.)34 b(The)22
  b(r)n(est)299 1817 y(of)i(the)f(valid)g(values)h(ar)n(e)f(summarized)g
  (in)h(T)-9 b(able)22 b(24.1.)2355 1783 y Fx(1)299 2029
  y FA(The)j(next)g(element,)g Fr(arg)p FA(,)h(allows)f(popt)i(to)f
  (automatically)f(update)h(pr)n(ogram)g(vari\255)299 2141
  y(ables)21 b(when)g(the)g(option)h(is)g(used.)34 b(If)22
  b Fr(arg)f FA(is)h Fr(NULL)p FA(,)g(it)f(is)i(ignor)n(ed)e(and)h(popt)g
  (takes)h(no)299 2253 y(special)18 b(action.)33 b(Otherwise,)18
  b(it)g(should)g(point)h(to)f(a)g(variable)f(of)h(the)g(type)g
  (indicated)299 2365 y(in)23 b(the)g(right\255most)h(column)g(of)g(T)-9
  b(able)22 b(24.1.)299 2577 y(If)42 b(the)f(option)g(takes)h(no)g(ar)n
  (gument)e(\()p Fr(argInfo)h FA(is)h Fr(POPT_ARG_NONE)p
  FA(\),)e(the)h(variable)299 2689 y(pointed)21 b(to)g(by)f
  Fr(arg)h FA(is)g(set)g(to)g(1)f(when)f(the)h(option)h(is)g(used.)34
  b(If)20 b(the)g(option)h(does)h(take)299 2801 y(an)16
  b(ar)n(gument,)i(the)f(variable)e(that)i Fr(arg)g FA(points)h(to)g(is)f
  (updated)h(to)f(r)n(e\003ect)g(the)g(value)f(of)299 2913
  y(the)23 b(ar)n(gument.)34 b(Any)24 b(string)f(is)i(acceptable)e(for)h
  Fr(POPT_ARG_STRING)e FA(ar)n(guments,)i(but)299 3025
  y Fr(POPT_ARG_INT)19 b FA(and)h Fr(POPT_ARG_LONG)e FA(ar)n(guments)i
  (ar)n(e)g(converted)g(to)g(the)g(appr)n(opriate)299 3137
  y(type,)k(and)f(an)h(err)n(or)f(is)h(r)n(eturned)f(if)g(the)g
  (conversion)h(fails.)299 3349 y(The)33 b(\002nal)g(option,)38
  b Fr(val)p FA(,)e(is)f(the)f(value)f(popt's)j(parsing)e(function)f
  (should)i(r)n(eturn)299 3461 y(when)26 b(the)h(option)h(is)g(encounter)
  n(ed.)45 b(If)27 b(it)h(is)g(0,)g(the)f(parsing)h(function)f(parses)h
  (the)299 3573 y(next)23 b(command\255line)h(ar)n(gument)f(rather)f
  (than)h(r)n(eturn.)299 3785 y(The)c(\002nal)g(str)o(uctur)n(e)h(in)f
  (the)h(table)f(should)h(have)f(all)g(the)h(pointer)g(values)f(set)h(to)
  h Fr(NULL)299 3897 y FA(and)i(all)h(the)f(arithmetic)g(values)g(set)h
  (to)g(0,)g(marking)f(the)g(end)h(of)g(the)f(table.)p
  299 4234 897 5 v 299 4315 a Fw(1.)29 b Fq(getopt\(\))g
  Fw(connoisseurs)j(will)f(note)g(that)f Fq(argInfo)f Fw(is)i(the)f(only)
  i(\002eld)e(of)h Fq(struct)46 b(poptOption)391 4407 y
  Fw(that)29 b(is)g(not)g(dir)o(ectly)f(analogous)i(to)f(a)f(\002eld)h
  (in)g(the)g Fq(getopt_long\(\))d Fw(ar)o(gument)i(table.)53
  b(The)391 4498 y(similarity)22 b(between)e(the)h(two)g(allows)h(for)e
  (easy)h(transitions)h(fr)o(om)e Fq(getopt_long\(\))e
  Fw(to)j(popt.)p eop
  %%Page: 448 4
  448 471 bop -187 -116 a Ft(448)118 b FL(Chapter)29 b(24)83
  b Fv(Parsing)23 b(Command-Line)f(Options)p -187 -76 3413
  4 v 111 85 a Fu(24.1.2)59 b(Creating)39 b(a)f(Context)111
  297 y FA(popt)31 b(can)f(interleave)e(the)h(parsing)g(of)h(multiple)g
  (command\255line)f(sets.)53 b(It)30 b(allows)111 409
  y(this)e(by)g(keeping)g(all)f(the)g(state)i(information)d(for)i(a)g
  (particular)f(set)h(of)g(command\255)111 521 y(line)22
  b(ar)n(guments)h(in)f(a)h Fr(poptContext)e FA(data)i(str)o(uctur)n(e,)g
  (an)f(opaque)h(type)g(that)g(should)111 633 y(not)h(be)f(modi\002ed)i
  (outside)f(the)f(popt)i(library)-11 b(.)111 845 y(New)24
  b(popt)h(contexts)g(ar)n(e)e(cr)n(eated)h(by)g Fr(poptGetContext\(\))p
  FA(.)111 1051 y Fq(#include)35 b(<popt.h>)111 1266 y(poptContext)g
  (poptGetContext\(char)d(*)k(name,)g(int)g(argc,)f(char)h(**)h(argv,)
  1104 1374 y(struct)e(poptOption)g(*)h(options,)f(int)h(flags\);)111
  1586 y FA(The)26 b(\002rst)h(parameter)-7 b(,)26 b Fr(name)p
  FA(,)h(is)g(used)g(only)g(for)f(alias)h(handling)e(\(discussed)j
  (later\).)111 1698 y(It)h(should)f(be)f(the)h(name)f(of)h(the)g
  (application)g(whose)f(options)i(ar)n(e)e(being)g(parsed,)111
  1810 y(or)e(should)f(be)g Fr(NULL)g FA(if)g(no)g(option)h(aliasing)e
  (is)i(desir)n(ed.)36 b(The)24 b(next)g(two)g(ar)n(guments)111
  1922 y(specify)g(the)f(command\255line)g(ar)n(guments)g(to)h(parse.)34
  b(These)22 b(ar)n(e)h(generally)f(passed)111 2034 y(to)37
  b Fr(poptGetContext\(\))e FA(exactly)i(as)g(they)f(wer)n(e)g(passed)i
  (to)f(the)f(pr)n(ogram's)h Fr(main\(\))111 2146 y FA(function.)50
  b(The)29 b Fr(options)f FA(parameter)h(points)h(to)g(the)f(table)f(of)i
  (command\255line)e(op\255)111 2259 y(tions,)33 b(which)d(was)h
  (described)h(in)e(the)h(pr)n(evious)g(section.)56 b(The)30
  b(\002nal)g(parameter)-7 b(,)111 2371 y Fr(flags)p FA(,)21
  b(is)g(not)g(curr)n(ently)e(used)i(but)g(should)f(always)g(be)h
  (speci\002ed)g(as)g(0)f(for)h(compat\255)111 2483 y(ibility)i(with)g
  (futur)n(e)g(versions)h(of)g(the)f(popt)i(library)-11
  b(.)111 2694 y(A)26 b Fr(poptContext)f FA(keeps)h(track)g(of)g(which)e
  (options)j(have)d(alr)n(eady)h(been)g(parsed)h(and)111
  2807 y(which)h(r)n(emain,)i(among)f(other)f(things.)47
  b(If)28 b(a)g(pr)n(ogram)g(wishes)g(to)h(r)n(estart)f(option)111
  2919 y(pr)n(ocessing)23 b(of)f(a)g(set)g(of)g(ar)n(guments,)g(it)f(can)
  h(r)n(eset)g(the)f Fr(poptContext)g FA(by)h(passing)g(the)111
  3031 y(context)j(as)f(the)f(sole)h(ar)n(gument)f(to)h
  Fr(poptResetContext\(\))p FA(.)111 3242 y(When)j(ar)n(gument)g(pr)n
  (ocessing)h(is)g(complete,)h(the)d(pr)n(ocess)j(should)f(fr)n(ee)e(the)
  h Fr(popt-)111 3354 y(Context)22 b FA(as)h(it)f(contains)h(dynamically)
  f(allocated)g(components.)35 b(The)21 b Fr(poptFreeCon-)111
  3467 y(text\(\))32 b FA(function)g(takes)h(a)f Fr(poptContext)g
  FA(as)h(its)g(sole)g(ar)n(gument)e(and)i(fr)n(ees)f(the)g(r)n(e\255)111
  3579 y(sour)n(ces)25 b(the)e(context)i(is)f(using.)111
  3790 y(Her)n(e)g(ar)n(e)f(the)h(pr)n(ototypes)h(of)f(both)f
  Fr(poptResetContext\(\))f FA(and)i Fr(poptFreeContext\(\))p
  FA(.)111 3996 y Fq(#include)35 b(<popt.h>)111 4212 y(void)h
  (poptFreeContext\(poptContext)31 b(con\);)111 4320 y(void)36
  b(poptResetContext\(poptContext)30 b(con\);)p eop
  %%Page: 449 5
  449 472 bop 2237 -116 a Fv(24.1)82 b(Basic)23 b(popt)f(Usage)119
  b Ft(449)p 0 -76 3413 4 v 299 85 a Fu(24.1.3)58 b(Parsing)39
  b(the)h(Command)e(Line)299 297 y FA(After)26 b(an)g(application)h(has)g
  (cr)n(eated)f(a)h Fr(poptContext)p FA(,)f(it)h(may)g(begin)e(parsing)i
  (ar)n(gu\255)299 409 y(ments.)34 b(The)23 b Fr(poptGetNextOpt\(\))f
  FA(performs)i(the)g(actual)f(ar)n(gument)g(parsing.)299
  615 y Fq(#include)35 b(<popt.h>)299 831 y(int)h
  (poptGetNextOpt\(poptContext)31 b(con\);)299 1042 y FA(T)-9
  b(aking)44 b(the)h(context)h(as)g(its)f(sole)h(ar)n(gument,)k(this)45
  b(function)g(parses)h(the)f(next)299 1154 y(command\255line)34
  b(ar)n(gument)f(found.)65 b(After)34 b(\002nding)f(the)h(next)g(ar)n
  (gument)f(in)h(the)299 1266 y(option)29 b(table,)g(the)f(function)g
  (\002lls)g(in)g(the)g(object)i(pointed)e(to)h(by)g(the)f(option)h
  (table)299 1379 y(entry's)18 b Fr(arg)g FA(pointer)h(if)f(it)h(is)g
  (not)f Fr(NULL)p FA(.)g(If)h(the)f Fr(val)h FA(entry)f(for)g(the)g
  (option)h(is)g(non\2550,)g(the)299 1491 y(function)h(then)g(r)n(eturns)
  g(that)g(value.)32 b(Otherwise,)20 b Fr(poptGetNextOpt\(\))f
  FA(continues)i(on)299 1603 y(to)j(the)f(next)h(ar)n(gument.)299
  1814 y Fr(poptGetNextOpt\(\))g FA(r)n(eturns)h(\2551)g(when)f(the)h
  (\002nal)g(ar)n(gument)g(has)h(been)e(parsed,)j(and)299
  1926 y(other)20 b(negative)f(values)h(when)f(err)n(ors)i(occur)-7
  b(.)33 b(This)20 b(makes)h(it)f(a)h(good)g(idea)f(to)h(keep)299
  2039 y(the)i Fr(val)h FA(elements)f(in)g(the)h(options)g(table)f(gr)n
  (eater)g(than)g(0.)299 2250 y(If)48 b(all)f(of)h(the)f(command\255line)
  h(options)g(ar)n(e)g(handled)f(thr)n(ough)g Fr(arg)g
  FA(pointers,)299 2362 y(command\255line)23 b(parsing)h(is)g(r)n(educed)
  g(to)g(the)f(following)g(line)g(of)g(code:)299 2568 y
  Fq(rc)36 b(=)h(poptGetNextOpt\(poptcon\);)299 2780 y
  FA(Many)21 b(applications)g(r)n(equir)n(e)g(mor)n(e)g(complex)h
  (command\255line)f(parsing)g(than)f(this,)299 2892 y(however)-7
  b(,)22 b(and)i(use)f(the)g(following)g(str)o(uctur)n(e.)299
  3097 y Fq(while)35 b(\(\(rc)h(=)h(poptGetNextOpt\(poptcon\)\))31
  b(>)36 b(0\))h({)446 3205 y(switch)e(\(rc\))h({)593 3313
  y(/*)g(specific)f(arguments)g(are)h(handled)f(here)h(*/)446
  3421 y(})299 3529 y(})299 3741 y FA(When)f(r)n(eturned)g(options)i(ar)n
  (e)f(handled,)i(the)e(application)g(needs)g(to)g(know)g(the)299
  3853 y(value)21 b(of)h(any)g(ar)n(guments)g(that)g(wer)n(e)f
  (speci\002ed)i(after)f(the)g(option.)34 b(Ther)n(e)20
  b(ar)n(e)i(two)299 3965 y(ways)d(to)g(discover)g(them.)32
  b(One)18 b(is)i(to)f(ask)g(popt)g(to)h(\002ll)e(in)g(a)g(variable)f
  (with)h(the)g(value)299 4077 y(of)28 b(the)h(option)f(thr)n(ough)g(the)
  g(option)h(table's)f Fr(arg)g FA(elements.)48 b(The)28
  b(other)g(is)h(to)f(use)299 4189 y Fr(poptGetOptArg\(\))p
  FA(.)p eop
  %%Page: 450 6
  450 473 bop -187 -116 a Ft(450)118 b FL(Chapter)29 b(24)83
  b Fv(Parsing)23 b(Command-Line)f(Options)p -187 -76 3413
  4 v 111 170 a Fq(#include)35 b(<popt.h>)111 386 y(char)h(*)h
  (poptGetOptArg\(poptContext)31 b(con\);)111 598 y FA(This)c(function)f
  (r)n(eturns)h(the)g(ar)n(gument)f(given)g(for)h(the)g(\002nal)f(option)
  i(r)n(eturned)e(by)111 710 y Fr(poptGetNextOpt\(\))p
  FA(,)c(or)i(it)g(r)n(eturns)f Fr(NULL)g FA(if)h(no)f(ar)n(gument)g(was)
  h(speci\002ed.)111 1073 y Fu(24.1.4)59 b(Leftover)38
  b(Arguments)111 1285 y FA(Many)24 b(applications)g(take)f(an)h
  (arbitrary)e(number)g(of)i(command\255line)f(ar)n(guments,)111
  1397 y(such)j(as)g(a)g(list)g(of)g(\002le)f(names.)40
  b(When)25 b(popt)i(encounters)e(an)g(ar)n(gument)g(that)g(does)111
  1509 y(not)k(begin)f(with)g(a)h Fr(-)p FA(,)h(it)f(assumes)h(it)f(is)g
  (such)g(an)f(ar)n(gument)g(and)h(adds)h(it)f(to)g(a)g(list)111
  1621 y(of)i(leftover)f(ar)n(guments.)55 b(Thr)n(ee)30
  b(functions)g(allow)g(applications)h(to)h(access)g(such)111
  1733 y(ar)n(guments:)111 2007 y Fr(char)43 b(*)g
  (poptGetArg\(poptContext)d(con\);)411 2119 y FA(This)35
  b(function)f(r)n(eturns)g(the)g(next)h(leftover)f(ar)n(gument)g(and)g
  (marks)i(it)e(as)411 2231 y(pr)n(ocessed.)111 2443 y
  Fr(char)43 b(*)g(poptPeekArg\(poptContext)d(con\);)411
  2555 y FA(The)15 b(next)h(leftover)f(ar)n(gument)g(is)i(r)n(eturned)d
  (but)i(not)g(marked)g(as)g(pr)n(ocessed.)411 2667 y(This)39
  b(allows)g(an)f(application)h(to)h(look)f(ahead)g(into)g(the)f(ar)n
  (gument)h(list,)411 2779 y(without)23 b(modifying)h(the)f(list.)111
  2991 y Fr(char)43 b(**)f(poptGetArgs\(poptContext)f(con\);)411
  3103 y FA(All)16 b(the)g(leftover)f(ar)n(guments)g(ar)n(e)h(r)n
  (eturned)e(in)i(a)f(manner)g(identical)g(to)h Fr(argv)p
  FA(.)411 3215 y(The)j(\002nal)g(element)g(in)g(the)g(r)n(eturned)g
  (array)g(points)h(to)g Fr(NULL)p FA(,)f(indicating)g(the)411
  3327 y(end)24 b(of)g(the)f(ar)n(guments.)-187 3680 y
  Fk(24.2)131 b(Error)41 b(Handling)p -187 3765 3413 5
  v 111 4027 a FA(All)29 b(of)g(the)g(popt)h(functions)e(that)h(can)g(r)n
  (eturn)e(err)n(ors)i(r)n(eturn)f(integers.)49 b(When)28
  b(an)111 4139 y(err)n(or)d(occurs,)i(a)e(negative)f(err)n(or)h(code)h
  (is)f(r)n(eturned.)38 b(T)-9 b(able)24 b(24.2)h(summarizes)g(the)111
  4251 y(err)n(or)f(codes)g(that)g(occur)-7 b(.)34 b(Her)n(e)24
  b(is)g(a)g(mor)n(e)g(detailed)f(discussion)i(of)f(each)f(err)n(or)-7
  b(.)p eop
  %%Page: 451 7
  451 474 bop 2329 -116 a Fv(24.2)82 b(Error)23 b(Handling)118
  b Ft(451)p 0 -76 3413 4 v 421 71 a FL(Table)27 b(24.2)84
  b Fv(popt)22 b(Errors)p 421 103 2870 4 v 421 120 4 17
  v 1399 120 V 3287 120 V 421 219 4 100 v 507 190 a Fs(Error)p
  1399 219 V 785 w(Description)p 3287 219 V 421 236 4 17
  v 1399 236 V 3287 236 V 421 239 2870 4 v 421 246 4 7
  v 1399 246 V 3287 246 V 421 249 2870 4 v 421 266 4 17
  v 1399 266 V 3287 266 V 421 365 4 100 v 507 336 a Fq(POPT_ERROR_NOARG)p
  1399 365 V 386 w Fw(An)f(ar)o(gument)f(is)h(missing)h(for)f(an)g
  (option.)p 3287 365 V 421 465 V 507 436 a Fq(POPT_ERROR_BADOPT)p
  1399 465 V 349 w Fw(An)g(option's)h(ar)o(gument)e(could)h(not)h(be)e
  (parsed.)p 3287 465 V 421 565 V 507 535 a Fq(POPT_ERROR_OPTSTOODEEP)p
  1399 565 V 164 w Fw(Option)i(aliasing)f(is)g(nested)g(too)g(deeply)-9
  b(.)p 3287 565 V 421 664 V 507 635 a Fq(POPT_ERROR_BADQUOTE)p
  1399 664 V 275 w Fw(Quotations)22 b(do)f(not)h(match.)p
  3287 664 V 421 764 V 507 735 a Fq(POPT_ERROR_BADNUMBER)p
  1399 764 V 238 w Fw(An)f(option)h(could)f(not)g(be)g(converted)f(to)h
  (a)f(number)-6 b(.)p 3287 764 V 421 863 V 507 834 a Fq
  (POPT_ERROR_OVERFLOW)p 1399 863 V 275 w Fw(A)21 b(given)g(number)g(was)
  f(too)i(big)f(or)g(too)g(small.)p 3287 863 V 421 880
  4 17 v 1399 880 V 3287 880 V 421 883 2870 4 v 299 1132
  a Fr(POPT_ERROR_NOARG)599 1244 y FA(An)c(option)h(that)f(r)n(equir)n
  (es)h(an)f(ar)n(gument)f(was)i(speci\002ed)g(on)f(the)g(command)599
  1357 y(line,)40 b(but)d(no)g(ar)n(gument)g(was)g(given.)75
  b(This)37 b(can)h(be)f(r)n(eturned)f(only)h(by)599 1469
  y Fr(poptGetNextOpt\(\))p FA(.)299 1680 y Fr(POPT_ERROR_BADOPT)599
  1792 y FA(An)26 b(option)g(was)h(speci\002ed)f(in)g Fr(argv)g
  FA(but)g(is)g(not)g(in)g(the)g(option)g(table.)41 b(This)599
  1905 y(err)n(or)23 b(can)h(be)f(r)n(eturned)g(only)g(fr)n(om)h
  Fr(poptGetNextOpt\(\))p FA(.)299 2116 y Fr(POPT_ERROR_OPTSTOODEEP)599
  2228 y FA(A)f(set)h(of)f(option)g(aliases)g(is)h(nested)f(too)h(deeply)
  -11 b(.)34 b(Curr)n(ently)-11 b(,)22 b(popt)i(follows)599
  2340 y(options)30 b(only)f(10)g(levels)g(to)h(pr)n(event)f(in\002nite)f
  (r)n(ecursion.)50 b(Only)29 b Fr(poptGet-)599 2452 y(NextOpt\(\))23
  b FA(can)g(r)n(eturn)g(this)h(err)n(or)-7 b(.)299 2664
  y Fr(POPT_ERROR_BADQUOTE)599 2776 y FA(A)15 b(parsed)g(string)g(has)g
  (a)g(quotation)g(mismatch)g(\(such)g(as)g(a)g(single)g(quotation)599
  2888 y(mark\).)62 b Fr(poptParseArgvString\(\))p FA(,)33
  b Fr(poptReadConfigFile\(\))p FA(,)g(or)g Fr(poptReadDe-)599
  3000 y(faultConfig\(\))22 b FA(can)i(r)n(eturn)e(this)i(err)n(or)-7
  b(.)299 3212 y Fr(POPT_ERROR_BADNUMBER)599 3324 y FA(A)38
  b(conversion)g(fr)n(om)g(a)g(string)g(to)h(a)f(number)f(\()p
  Fr(int)h FA(or)g Fr(long)p FA(\))f(failed)h(due)599 3436
  y(to)28 b(the)g(string)g(containing)f(nonnumeric)f(characters.)47
  b(This)28 b(occurs)h(when)599 3548 y Fr(poptGetNextOpt\(\))c
  FA(is)j(pr)n(ocessing)g(an)f(ar)n(gument)f(of)h(type)g
  Fr(POPT_ARG_INT)f FA(or)599 3660 y Fr(POPT_ARG_LONG)p
  FA(.)299 3872 y Fr(POPT_ERROR_OVERFLOW)599 3984 y FA(A)g
  (string\255to\255number)f(conversion)g(failed)g(because)h(the)f(number)
  g(was)h(too)599 4096 y(lar)n(ge)41 b(or)h(too)g(small.)88
  b(Like)42 b Fr(POPT_ERROR_BADNUMBER)p FA(,)d(this)j(err)n(or)f(can)h
  (oc\255)599 4208 y(cur)28 b(only)h(when)e Fr(poptGetNextOpt\(\))g
  FA(is)i(pr)n(ocessing)h(an)e(ar)n(gument)g(of)h(type)599
  4320 y Fr(POPT_ARG_INT)22 b FA(or)i Fr(POPT_ARG_LONG)p
  FA(.)p eop
  %%Page: 452 8
  452 475 bop -187 -116 a Ft(452)118 b FL(Chapter)29 b(24)83
  b Fv(Parsing)23 b(Command-Line)f(Options)p -187 -76 3413
  4 v 111 83 a Fr(POPT_ERROR_ERRNO)411 195 y FA(A)36 b(system)g(call)f(r)
  n(eturned)f(with)h(an)f(err)n(or)-7 b(,)37 b(and)e Fr(errno)g
  FA(still)g(contains)g(the)411 307 y(err)n(or)23 b(fr)n(om)h(the)f
  (system)i(call.)34 b(Both)24 b Fr(poptReadConfigFile\(\))d
  FA(and)j Fr(poptRead-)411 419 y(DefaultConfig\(\))f FA(can)g(r)n(eturn)
  g(this)h(err)n(or)-7 b(.)111 656 y(T)e(wo)38 b(functions)f(ar)n(e)h
  (available)e(to)i(make)g(it)f(easy)h(for)g(applications)g(to)g(pr)n
  (ovide)111 768 y(good)25 b(err)n(or)e(messages.)111 1042
  y Fr(const)43 b(char)f(*)h(poptStrerror\(const)e(int)h(error\);)411
  1154 y FA(This)18 b(function)g(takes)h(a)f(popt)h(err)n(or)f(code)h
  (and)g(r)n(eturns)e(a)i(string)f(describing)411 1266
  y(the)24 b(err)n(or)-7 b(,)23 b(just)h(as)g(with)f(the)g(standar)n(d)i
  Fr(strerror\(\))d FA(function.)111 1478 y Fr(char)43
  b(*)g(poptBadOption\(poptContext)d(con,)i(int)h(flags\);)411
  1590 y FA(If)32 b(an)e(err)n(or)g(occurr)n(ed)i(during)e
  Fr(poptGetNextOpt\(\))p FA(,)h(this)g(function)g(r)n(eturns)411
  1702 y(the)38 b(option)g(that)g(caused)h(the)e(err)n(or)-7
  b(.)77 b(If)38 b(the)f Fr(flags)h FA(ar)n(gument)f(is)i(set)f(to)411
  1814 y Fr(POPT_BADOPTION_NOALIAS)p FA(,)e(the)i(outermost)h(option)f
  (is)h(r)n(eturned.)76 b(Other)n(\255)411 1926 y(wise,)31
  b Fr(flags)e FA(should)h(be)f(0,)i(and)e(the)g(option)h(that)f(is)h(r)n
  (eturned)f(may)h(have)411 2038 y(been)23 b(speci\002ed)i(thr)n(ough)d
  (an)i(alias.)111 2275 y(These)16 b(two)h(functions)f(make)h(popt)g(err)
  n(or)f(handling)g(trivial)f(for)i(most)h(applications.)111
  2387 y(When)26 b(an)f(err)n(or)g(is)h(detected)g(fr)n(om)g(most)h(of)f
  (the)f(functions,)h(an)f(err)n(or)g(message)h(is)111
  2499 y(printed)35 b(along)g(with)g(the)g(err)n(or)f(string)i(fr)n(om)f
  Fr(poptStrerror\(\))p FA(.)68 b(When)35 b(an)f(err)n(or)111
  2611 y(occurs)26 b(during)e(ar)n(gument)h(parsing,)g(code)g(similiar)g
  (to)g(the)g(following)f(displays)i(a)111 2723 y(useful)d(err)n(or)g
  (message.)111 2929 y Fq(fprintf\(stderr,)34 b("\045s:)h(\045s\\n",)405
  3037 y(poptBadOption\(optCon,)d(POPT_BADOPTION_NOALIAS\),)405
  3144 y(poptStrerror\(rc\)\);)-187 3475 y Fk(24.3)131
  b(Option)42 b(Aliasing)p -187 3560 3413 5 v 111 3822
  a FA(One)21 b(of)h(the)f(primary)g(bene\002ts)f(of)i(using)f(popt)h
  (over)f Fr(getopt\(\))g FA(is)h(the)f(ability)f(to)i(use)111
  3934 y(option)30 b(aliasing.)49 b(This)29 b(lets)h(the)e(user)h
  (specify)h(options)g(that)f(popt)h(expands)g(into)111
  4046 y(other)22 b(options)g(when)f(they)h(ar)n(e)f(speci\002ed.)35
  b(If)22 b(the)f(standar)n(d)i(gr)n(ep)f(pr)n(ogram)h(made)111
  4158 y(use)j(of)g(popt,)h(users)f(could)h(add)f(a)g Fr(--text)f
  FA(option)h(that)g(expanded)g(to)g Fr(-i)45 b(-n)g(-E)g(-2)111
  4270 y FA(to)25 b(let)e(them)h(mor)n(e)g(easily)f(\002nd)h(information)
  e(in)h(text)h(\002les.)p eop
  %%Page: 453 9
  453 476 bop 2298 -116 a Fv(24.3)81 b(Option)22 b(Aliasing)118
  b Ft(453)p 0 -76 3413 4 v 299 85 a Fu(24.3.1)58 b(Specifying)40
  b(Aliases)299 297 y FA(Aliases)18 b(ar)n(e)e(normally)h(speci\002ed)h
  (in)f(two)g(places:)32 b(/etc/popt)18 b(and)f(the)g(.popt)h(\002le)f
  (in)299 409 y(the)25 b(user)7 b('s)25 b(home)h(dir)n(ectory)f(\(found)g
  (thr)n(ough)g(the)g Fr(HOME)g FA(envir)n(onment)f(variable\).)299
  521 y(Both)33 b(\002les)h(have)e(the)h(same)h(format,)h(an)e(arbitrary)
  f(number)g(of)h(lines)g(formatted)299 633 y(like)23 b(this:)299
  845 y Fj(appname)42 b Fr(alias)g Fj(newoption)g(expansion)299
  1057 y FA(The)24 b Fj(appname)h FA(is)h(the)f(name)g(of)h(the)f
  (application,)h(which)e(must)j(be)e(the)g(same)h(as)g(the)299
  1169 y Fr(name)e FA(parameter)g(passed)i(to)f Fr(poptGetContext\(\))p
  FA(.)36 b(This)24 b(allows)g(each)g(\002le)g(to)i(specify)299
  1281 y(aliases)e(for)h(multiple)f(pr)n(ograms.)37 b(The)24
  b Fr(alias)g FA(keywor)n(d)g(speci\002es)i(that)e(an)g(alias)g(is)299
  1393 y(being)h(de\002ned;)i(curr)n(ently)f(popt)h(con\002guration)e
  (\002les)i(support)g(only)f(aliases,)h(but)299 1505 y(other)i
  (abilities)h(may)g(be)g(added)g(in)g(the)g(futur)n(e.)52
  b(The)29 b(next)h(option)g(is)g(the)g(option)299 1617
  y(that)d(should)h(be)g(aliased,)g(and)g(it)g(may)g(be)f(either)g(a)h
  (short)g(or)f(a)h(long)g(option.)46 b(The)299 1729 y(r)n(est)29
  b(of)h(the)e(line)h(speci\002es)h(the)e(expansion)h(for)g(the)g(alias.)
  50 b(It)30 b(is)f(parsed)h(similarly)299 1841 y(to)f(a)g(shell)f
  (command,)j(which)d(allows)h Fr(\\)p FA(,)h Fr(")p FA(,)g(and)f
  Fr(')g FA(to)g(be)g(used)g(for)g(quoting.)49 b(If)29
  b(a)299 1953 y(backslash)22 b(is)g(the)g(\002nal)f(character)g(on)g(a)h
  (line,)f(the)h(next)f(line)g(in)h(the)f(\002le)g(is)i(assumed)299
  2066 y(to)28 b(be)f(a)g(logical)g(continuation)f(of)i(the)f(line)f
  (containing)h(the)g(backslash,)h(just)g(as)g(in)299 2178
  y(shell.)299 2389 y(The)i(following)g(entry)h(would)f(add)i(a)f
  Fr(--text)g FA(option)g(to)h(the)e Fr(grep)h FA(command,)j(as)299
  2501 y(suggested)24 b(at)g(the)f(beginning)f(of)i(this)g(section.)299
  2713 y Fr(grep)42 b(alias)h(--text)f(-i)h(-n)f(-E)h(-2)299
  3068 y Fu(24.3.2)58 b(Enabling)39 b(Aliases)299 3279
  y FA(An)21 b(application)f(must)i(enable)d(alias)h(expansion)h(for)g(a)
  f Fr(poptContext)g FA(befor)n(e)g(calling)299 3391 y
  Fr(poptGetNextArg\(\))33 b FA(for)i(the)g(\002rst)g(time.)68
  b(Ther)n(e)34 b(ar)n(e)g(thr)n(ee)h(functions)f(that)h(de\002ne)299
  3503 y(aliases)23 b(for)h(a)g(context.)299 3777 y Fr(int)42
  b(poptReadDefaultConfig\(poptContext)e(con,)i(int)h(flags\);)599
  3889 y FA(This)d(function)f(r)n(eads)h(aliases)g(fr)n(om)h(/etc/popt)g
  (and)f(the)g(.popt)h(\002le)f(in)599 4002 y(the)29 b(user)7
  b('s)29 b(home)g(dir)n(ectory)-11 b(.)53 b(Curr)n(ently)-11
  b(,)29 b Fr(flags)g FA(should)h(be)f Fr(NULL)p FA(,)g(as)g(it)h(is)599
  4114 y(pr)n(ovided)24 b(only)g(for)f(futur)n(e)g(expansion.)p
  eop
  %%Page: 454 10
  454 477 bop -187 -116 a Ft(454)118 b FL(Chapter)29 b(24)83
  b Fv(Parsing)23 b(Command-Line)f(Options)p -187 -76 3413
  4 v 111 83 a Fr(int)43 b(poptReadConfigFile\(poptContext)c(con,)k(char)
  f(*)h(fn\);)411 195 y FA(The)17 b(\002le)h(speci\002ed)h(by)f
  Fr(fn)g FA(is)g(opened)g(and)g(parsed)h(as)f(a)g(popt)h
  (con\002guration)411 307 y(\002le.)68 b(This)35 b(allows)f(pr)n(ograms)
  i(to)g(use)f(pr)n(ogram\255speci\002c)h(con\002guration)411
  419 y(\002les.)111 631 y Fr(int)43 b(poptAddAlias\(poptContext)d(con,)j
  (struct)f(poptAlias)g(alias,)g(int)g(flags\);)411 743
  y FA(Occasionally)-11 b(,)37 b(pr)n(ocesses)f(want)d(to)h(specify)g
  (aliases)g(without)f(having)f(to)411 855 y(r)n(ead)24
  b(them)f(fr)n(om)h(a)f(con\002guration)f(\002le.)34 b(This)23
  b(function)f(adds)i(a)g(new)e(alias)411 967 y(to)39 b(a)f(context.)77
  b(The)38 b Fr(flags)f FA(ar)n(gument)h(should)g(be)f(0,)42
  b(as)c(it)g(is)h(curr)n(ently)411 1079 y(r)n(eserved)21
  b(for)g(futur)n(e)e(expansion.)33 b(The)20 b(new)g(alias)h(is)g
  (speci\002ed)g(as)h(a)e Fr(struct)411 1191 y(poptAlias)p
  FA(,)j(which)g(is)h(de\002ned)f(as:)411 1388 y Fq(struct)36
  b(poptAlias)e({)558 1496 y(char)i(*)h(longName;)439 b(/*)36
  b(may)g(be)g(NULL)g(*/)558 1604 y(char)g(shortName;)476
  b(/*)36 b(may)g(be)g('\\0')g(*/)558 1712 y(int)g(argc;)558
  1820 y(char)g(**)h(argv;)550 b(/*)36 b(must)g(be)g(free\(\)able)f(*/)
  411 1927 y(};)411 2139 y FA(The)d(\002rst)h(two)g(elements,)i
  Fr(longName)d FA(and)g Fr(shortName)p FA(,)j(specify)e(the)g(option)411
  2251 y(that)23 b(is)g(aliased.)33 b(The)22 b(\002nal)g(two,)h
  Fr(argc)f FA(and)g Fr(argv)p FA(,)h(de\002ne)f(the)g(expansion)g(to)411
  2363 y(use)i(when)e(the)i(aliases)f(option)h(is)g(encounter)n(ed.)-187
  2716 y Fk(24.4)131 b(Parsing)41 b(Argument)f(Strings)p
  -187 2801 3413 5 v 111 3063 a FA(Although)21 b(popt)i(is)g(usually)e
  (used)h(for)f(parsing)h(ar)n(guments)g(alr)n(eady)f(divided)h(into)111
  3175 y(an)e Fr(argv)p FA(\255style)f(array)-11 b(,)20
  b(some)h(pr)n(ograms)g(need)e(to)h(parse)g(strings)h(that)e(ar)n(e)h
  (formatted)111 3287 y(identically)30 b(to)g(command)h(lines.)52
  b(T)-9 b(o)30 b(facilitate)f(this,)j(popt)f(pr)n(ovides)g(a)f(function)
  111 3399 y(that)f(parses)h(a)g(string)f(into)g(an)g(array)f(of)h
  (string,)i(using)e(r)o(ules)g(similiar)g(to)g(normal)111
  3512 y(shell)24 b(parsing.)111 3717 y Fq(#include)35
  b(<popt.h>)111 3933 y(int)h(poptParseArgvString\(char)31
  b(*)37 b(s,)f(int)g(*)h(argcPtr,)e(char)h(***)g(argvPtr\);)111
  4145 y FA(The)19 b(string)h Fr(s)g FA(is)g(parsed)h(into)f(an)f
  Fr(argv)p FA(\255style)h(array)-11 b(.)32 b(The)19 b(integer)g(pointed)
  h(to)g(by)g(the)111 4257 y(second)33 b(parameter)-7 b(,)32
  b Fr(argcPtr)p FA(,)h(contains)e(the)g(number)g(of)g(elements)g
  (parsed,)j(and)111 4369 y(the)c(pointer)h(pointed)f(to)h(by)g(the)f
  (\002nal)f(parameter)h(is)h(set)g(to)g(point)g(to)g(the)f(newly)p
  eop
  %%Page: 455 11
  455 478 bop 2154 -116 a Fv(24.6)82 b(Sample)23 b(Application)115
  b Ft(455)p 0 -76 3413 4 v 299 83 a FA(cr)n(eated)28 b(array)-11
  b(.)45 b(The)27 b(array)g(is)h(dynamically)g(allocated)f(and)h(should)f
  (be)h Fr(free\(\))p FA(ed)299 195 y(when)22 b(the)i(application)f(is)h
  (\002nished)f(with)g(it.)299 407 y(The)i Fr(argvPtr)h
  FA(cr)n(eated)h(by)f Fr(poptParseArgvString\(\))e FA(is)j(suitable)f
  (to)h(pass)g(dir)n(ectly)g(to)299 519 y Fr(poptGetContext\(\))p
  FA(.)0 838 y Fk(24.5)132 b(Handling)41 b(Extra)f(Arguments)p
  0 923 3413 5 v 299 1185 a FA(Some)33 b(applications)f(implement)h(the)f
  (equivalent)e(of)j(option)f(aliasing)g(but)g(need)299
  1297 y(to)39 b(do)h(so)g(thr)n(ough)e(special)i(logic.)80
  b(The)38 b Fr(poptStuffArgs\(\))g FA(function)g(allows)h(an)299
  1409 y(application)24 b(to)g(insert)f(new)g(ar)n(guments)g(into)h(the)f
  (curr)n(ent)g Fr(poptContext)p FA(.)299 1615 y Fq(#include)35
  b(<popt.h>)299 1831 y(int)h(poptStuffArgs\(poptContext)31
  b(con,)36 b(char)f(**)i(argv\);)299 2042 y FA(The)k(passed)j
  Fr(argv)e FA(must)h(have)f(a)h Fr(NULL)f FA(pointer)g(as)h(its)g
  (\002nal)e(element.)90 b(When)299 2154 y Fr(poptGetNextOpt\(\))39
  b FA(is)j(next)f(called,)k(the)c(\223stuf)n(fed\224)f(ar)n(guments)h
  (ar)n(e)g(the)g(\002rst)g(to)299 2266 y(be)g(parsed.)87
  b(popt)43 b(r)n(eturns)e(to)g(the)g(normal)g(ar)n(guments)g(once)g(all)
  g(the)g(stuf)n(fed)299 2378 y(ar)n(guments)23 b(have)g(been)g
  (exhausted.)0 2707 y Fk(24.6)132 b(Sample)41 b(Application)p
  0 2792 V 299 3054 a FA(Robin,)28 b(the)g(sample)g(application)g(on)g
  (pages)h(274\226281)d(of)i(Chapter)f(15,)i(uses)f(popt)299
  3166 y(for)36 b(its)i(ar)n(gument)e(parsing.)73 b(It)37
  b(pr)n(ovides)h(a)e(good)i(example)f(of)g(how)f(the)g(popt)299
  3278 y(library)22 b(is)i(generally)f(used.)299 3489 y(RPM,)31
  b(a)g(popular)f(Linux)h(package)g(management)f(pr)n(ogram,)k(makes)d
  (heavy)f(use)299 3602 y(of)23 b(popt's)g(featur)n(es.)33
  b(Many)23 b(of)g(its)g(command\255line)f(ar)n(guments)g(ar)n(e)g
  (implemented)299 3714 y(thr)n(ough)30 b(popt)i(aliases,)g(which)e
  (makes)h(RPM)g(an)f(excellent)g(example)h(of)g(how)f(to)299
  3826 y(take)36 b(advantage)g(of)h(the)f(popt)i(library)-11
  b(.)73 b(For)37 b(mor)n(e)g(information)e(on)i(RPM,)f(see)299
  3938 y(http:/)-14 b(/www)-9 b(.rpm.or)n(g)p eop
  %%Trailer
  end
  userdict /end-hook known{end-hook}if
  %%EOF

From ossp-cvs-owner@ossp.org  Wed Jan 30 15:05:33 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 58B5B764D8; Wed, 30 Jan 2002 15:05:33 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/popt Makefile.in README VERSION aclocal.m4 config...
Message-Id: <20020130140533.58B5B764D8@mail.ossp.org>
Date: Wed, 30 Jan 2002 15:05:33 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   30-Jan-2002 15:05:33
  Branch: HEAD                             Handle: 2002013014053200

  Added files:
    ossp-pkg/popt           Makefile.in README VERSION aclocal.m4 configure.ac
                            devtool devtool.conf devtool.func popt-config.in
                            popt_test.c

  Log:
    add devtool based build environment

  Summary:
    Revision    Changes     Path
    1.1         +109 -0     ossp-pkg/popt/Makefile.in
    1.1         +49 -0      ossp-pkg/popt/README
    1.1         +6  -0      ossp-pkg/popt/VERSION
    1.1         +117 -0     ossp-pkg/popt/aclocal.m4
    1.1         +52 -0      ossp-pkg/popt/configure.ac
    1.1         +47 -0      ossp-pkg/popt/devtool
    1.1         +31 -0      ossp-pkg/popt/devtool.conf
    1.1         +72 -0      ossp-pkg/popt/devtool.func
    1.1         +148 -0     ossp-pkg/popt/popt-config.in
    1.1         +8  -0      ossp-pkg/popt/popt_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/popt/Makefile.in
  ============================================================
  $ cvs update -p -r1.1 Makefile.in
  ##
  ##  OSSP popt - Option Parsing Library
  ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  ##
  ##  This file is part of OSSP popt, an option parsing library
  ##  which can be found at http://www.ossp.org/pkg/popt/.
  ##
  ##  This program is free software; you can redistribute it and/or
  ##  modify it under the terms of the GNU General Public  License
  ##  as published by the Free Software Foundation; either version
  ##  2.0 of the License, or (at your option) any later version.
  ##
  ##  This program is distributed in the hope that it will be useful,
  ##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  ##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  ##  General Public License for more details.
  ##
  ##  You should have received a copy of the GNU General Public License
  ##  along with this file; if not, write to the Free Software
  ##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  ##  USA, or contact the OSSP project <ossp@ossp.org>.
  ##
  ##  Makefile.in: make(1) build procedure
  ##
  
  @SET_MAKE@
  
  DESTDIR     =
  prefix      = @prefix@
  exec_prefix = @exec_prefix@
  bindir      = @bindir@
  libdir      = @libdir@
  includedir  = @includedir@
  mandir      = @mandir@
  
  CC          = @CC@
  CPPFLAGS    = @CPPFLAGS@
  CFLAGS      = @DEFS@ @CFLAGS@
  LDFLAGS     = @LDFLAGS@
  LIBS        = @LIBS@
  RM          = rm -f
  RMDIR       = rmdir
  SHTOOL      = ./shtool
  LIBTOOL     = ./libtool
  TRUE        = true
  
  LIB_NAME    = libpopt.la
  LIB_OBJS    = popt.lo
  
  TST_NAME    = popt_test
  TST_OBJS    = popt_test.o
  
  .SUFFIXES:
  .SUFFIXES: .c .o .lo
  
  all: $(LIB_NAME) $(TST_NAME)
  
  .c.o:
  	$(CC) $(CPPFLAGS) $(CFLAGS) -c $<
  
  .c.lo:
  	@$(LIBTOOL) --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS) -c $<
  
  $(LIB_NAME): $(LIB_OBJS)
  	@$(LIBTOOL) --mode=link $(CC) -o $(LIB_NAME) $(LIB_OBJS) -rpath $(libdir) \
  	    -version-info `$(SHTOOL) version -l txt -d libtool VERSION`
  
  $(TST_NAME): $(TST_OBJS) $(LIB_NAME)
  	@$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $(TST_NAME) $(TST_OBJS) $(LIB_NAME) $(LIBS)
  
  check: $(TST_NAME)
  	@$(LIBTOOL) --mode=execute ./$(TST_NAME)
  
  install:
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(includedir)
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libdir)
  	$(SHTOOL) install -c -m 755 popt-config $(DESTDIR)$(bindir)/
  	$(SHTOOL) install -c -m 644 popt.h $(DESTDIR)$(includedir)/
  	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libpopt.la $(DESTDIR)$(libdir)/
  
  uninstall:
  	@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libpopt.la
  	-$(RM) $(DESTDIR)$(includedir)/popt.h
  	-$(RM) $(DESTDIR)$(bindir)/popt-config
  	-$(RMDIR) $(DESTDIR)$(libdir) >/dev/null 2>&1 || $(TRUE)
  	-$(RMDIR) $(DESTDIR)$(includedir) >/dev/null 2>&1 || $(TRUE)
  	-$(RMDIR) $(DESTDIR)$(bindir) >/dev/null 2>&1 || $(TRUE)
  	-$(RMDIR) $(DESTDIR)$(prefix) >/dev/null 2>&1 || $(TRUE)
  
  clean:
  	-$(RM) $(LIB_NAME) $(LIB_OBJS)
  	-$(RM) $(TST_NAME) $(TST_OBJS)
  	-$(RM) -r .libs >/dev/null 2>&1 || $(TRUE)
  	-$(RM) *.o *.lo
  
  distclean: clean
  	-$(RM) config.log config.status config.cache
  	-$(RM) Makefile config.h popt-config
  	-$(RM) libtool
  
  realclean: distclean
  	-$(RM) configure config.h.in
  	-$(RM) shtool
  	-$(RM) ltmain.sh libtool.m4 config.guess config.sub
  
  Index: ossp-pkg/popt/README
  ============================================================
  $ cvs update -p -r1.1 README
     _ __   ___  _ __ | |_ 
    | '_ \ / _ \| '_ \| __|
    | |_) | (_) | |_) | |_ 
    | .__/ \___/| .__/ \__|
    |_|         |_|        
  
    OSSP popt - Option Parsing Library
    Version 0.1.0 (26-Jan-2002)
  
    ABSTRACT
  
    The OSSP popt library is a flexible command line option parsing
    library derived from the original RedHat's popt library.
  
    COPYRIGHT AND LICENSE
  
    Copyright (c) 1998-2002 Red Hat, Inc. <http://www.redhat.com/>
    Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
    Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
    Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  
    This file is part of OSSP popt, an option parsing library which
    can be found at http://www.ossp.org/pkg/popt/.
  
    Permission to use, copy, modify, and distribute this software for
    any purpose with or without fee is hereby granted, provided that
    the above copyright notice and this permission notice appear in all
    copies.
  
    THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
    WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
    IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
    CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
    USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    SUCH DAMAGE.
  
    HOME AND DOCUMENTATION
  
    The documentation and latest release can be found on
  
    o http://www.ossp.org/pkg/popt/
    o  ftp://ftp.ossp.org/pkg/popt/
  
  Index: ossp-pkg/popt/VERSION
  ============================================================
  $ cvs update -p -r1.1 VERSION
  
    VERSION -- Version Information for OSSP popt (syntax: Text)
    [automatically generated and maintained by GNU shtool]
  
    This is OSSP popt, Version 0.1.0 (27-Jan-2002)
  
  Index: ossp-pkg/popt/aclocal.m4
  ============================================================
  $ cvs update -p -r1.1 aclocal.m4
  dnl ##
  dnl ##  SA - OSSP Socket Abstraction Library
  dnl ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  dnl ##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  dnl ##
  dnl ##  This file is part of OSSP SA, a socket abstraction library which
  dnl ##  can be found at http://www.ossp.org/pkg/sa/.
  dnl ##
  dnl ##  Permission to use, copy, modify, and distribute this software for
  dnl ##  any purpose with or without fee is hereby granted, provided that
  dnl ##  the above copyright notice and this permission notice appear in all
  dnl ##  copies.
  dnl ##
  dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  dnl ##  SUCH DAMAGE.
  dnl ##
  dnl ##  aclocal.m4: GNU Autoconf local macro definitions
  dnl ##
  
  dnl ##
  dnl ##  Check whether compiler option works
  dnl ##
  dnl ##  configure.in:
  dnl ##    AC_COMPILER_OPTION(<name>, <display>, <option>,
  dnl ##                       <action-success>, <action-failure>)
  dnl ##
  
  AC_DEFUN(AC_COMPILER_OPTION,[dnl
  AC_MSG_CHECKING(whether compiler option(s) $2 work)
  AC_CACHE_VAL(ac_cv_compiler_option_$1,[
  SAVE_CFLAGS="$CFLAGS"
  CFLAGS="$CFLAGS $3"
  AC_TRY_COMPILE([],[], ac_cv_compiler_option_$1=yes, ac_cv_compiler_option_$1=no)
  CFLAGS="$SAVE_CFLAGS"
  ])dnl
  if test ".$ac_cv_compiler_option_$1" = .yes; then
      ifelse([$4], , :, [$4])
  else
      ifelse([$5], , :, [$5])
  fi
  AC_MSG_RESULT([$ac_cv_compiler_option_$1])
  ])dnl
  
  dnl ##
  dnl ##  Debugging Support
  dnl ##
  dnl ##  configure.in:
  dnl ##    AC_CHECK_DEBUGGING
  dnl ##
  
  AC_DEFUN(AC_CHECK_DEBUGGING,[dnl
  AC_ARG_ENABLE(debug,dnl
  [  --enable-debug          build for debugging (default=no)],
  [dnl
  if test ".$ac_cv_prog_gcc" = ".yes"; then
      case "$CFLAGS" in
          *-O* ) ;;
             * ) CFLAGS="$CFLAGS -O2" ;;
      esac
      case "$CFLAGS" in
          *-g* ) ;;
             * ) CFLAGS="$CFLAGS -g" ;;
      esac
      case "$CFLAGS" in
          *-pipe* ) ;;
                * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
      esac
      AC_COMPILER_OPTION(defdbg, -DDEBUG, -DDEBUG, CFLAGS="$CFLAGS -DDEBUG")
      AC_COMPILER_OPTION(ggdb3, -ggdb3, -ggdb3, CFLAGS="$CFLAGS -ggdb3")
      CFLAGS="$CFLAGS -pedantic"
      CFLAGS="$CFLAGS -Wall"
      WMORE="-Wshadow -Wpointer-arith -Wcast-align -Winline"
      WMORE="$WMORE -Wmissing-prototypes -Wmissing-declarations -Wnested-externs"
      AC_COMPILER_OPTION(wmore, -W<xxx>, $WMORE, CFLAGS="$CFLAGS $WMORE")
      AC_COMPILER_OPTION(wnolonglong, -Wno-long-long, -Wno-long-long, CFLAGS="$CFLAGS -Wno-long-long")
  else
      case "$CFLAGS" in
          *-g* ) ;;
             * ) CFLAGS="$CFLAGS -g" ;;
      esac
  fi
  msg="enabled"
  ],[
  if test ".$ac_cv_prog_gcc" = ".yes"; then
  case "$CFLAGS" in
      *-pipe* ) ;;
            * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
  esac
  fi
  case "$CFLAGS" in
      *-g* ) CFLAGS=`echo "$CFLAGS" |\
                     sed -e 's/ -g / /g' -e 's/ -g$//' -e 's/^-g //g' -e 's/^-g$//'` ;;
  esac
  case "$CXXFLAGS" in
      *-g* ) CXXFLAGS=`echo "$CXXFLAGS" |\
                       sed -e 's/ -g / /g' -e 's/ -g$//' -e 's/^-g //g' -e 's/^-g$//'` ;;
  esac
  msg=disabled
  ])dnl
  AC_MSG_CHECKING(for compilation debug mode)
  AC_MSG_RESULT([$msg])
  if test ".$msg" = .enabled; then
      enable_shared=no
  fi
  ])
  
  Index: ossp-pkg/popt/configure.ac
  ============================================================
  $ cvs update -p -r1.1 configure.ac
  dnl ##
  dnl ##  OSSP popt - Option Parsing Library
  dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  dnl ##
  dnl ##  This file is part of OSSP popt, an option parsing library
  dnl ##  which can be found at http://www.ossp.org/pkg/popt/.
  dnl ##
  dnl ##  This program is free software; you can redistribute it and/or
  dnl ##  modify it under the terms of the GNU General Public  License
  dnl ##  as published by the Free Software Foundation; either version
  dnl ##  2.0 of the License, or (at your option) any later version.
  dnl ##
  dnl ##  This program is distributed in the hope that it will be useful,
  dnl ##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  dnl ##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  dnl ##  General Public License for more details.
  dnl ##
  dnl ##  You should have received a copy of the GNU General Public License
  dnl ##  along with this file; if not, write to the Free Software
  dnl ##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  dnl ##  USA, or contact the OSSP project <ossp@ossp.org>.
  dnl ##
  dnl ##  configure.ac: GNU Autoconf source script
  dnl ##
  
  AC_PREREQ(2.52)
  AC_REVISION(1.0)
  AC_INIT(README)
  
  AC_DIVERT_PUSH(NOTICE)
  V=`./shtool version -l txt -d long VERSION`
  ./shtool echo -e "Configuring %BOSSP popt%b (Option Parsing), Version %B${V}%b"
  AC_DIVERT_POP()
  
  AC_SET_MAKE
  AC_PROG_CC
  AC_CHECK_DEBUGGING
  
  sinclude(libtool.m4)
  AC_PROG_LIBTOOL
  
  sinclude(popt.ac)
  AC_POPT
  
  AC_CONFIG_HEADERS(config.h)
  AC_CONFIG_FILES(Makefile popt-config)
  AC_OUTPUT
  
  chmod a+x popt-config
  
  Index: ossp-pkg/popt/devtool
  ============================================================
  $ cvs update -p -r1.1 devtool
  #!/bin/sh
  ##
  ##  devtool -- Development Tool
  ##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  if [ $# -eq 0 ]; then
      echo "devtool:USAGE: devtool <command> [<arg> ...]" 1>&2
      exit 1
  fi
  
  cmd="$1"
  shift
  
  devtoolfunc="./devtool.func"
  
  if [ ! -f devtool.conf ]; then
      echo "devtool:ERROR: no devtool.conf in current directory" 1>&2
      exit 1
  fi
  
  cmdline=`grep "^%$cmd" devtool.conf`
  if [ ".$cmdline" = . ]; then
      echo "devtool:ERROR: command $cmd not found in devtool.conf" 1>&2
      exit 1
  fi
  
  if [ ".$TMPDIR" != . ]; then
      tmpdir="$TMPDIR"
  elif [ ".$TEMPDIR" != . ]; then
      tmpdir="$TEMPDIR"
  else
      tmpdir="/tmp"
  fi
  tmpfile="$tmpdir/rc.$$.tmp"
  
  rm -f $tmpfile
  touch $tmpfile
  echo ". $devtoolfunc" >>$tmpfile
  ( sed <devtool.conf -e "1,/^%common/d" -e '/^%.*/,$d'
    sed <devtool.conf -e "1,/^%$cmd/d" -e '/^%.*/,$d' ) |\
  sed -e 's;\([ 	]\)@\([a-zA-Z_][a-zA-Z0-9_]*\);\1devtool_\2;' >>$tmpfile
  
  sh $tmpfile "$@"
  
  rm -f $tmpfile >/dev/null 2>&1 || true
  
  Index: ossp-pkg/popt/devtool.conf
  ============================================================
  $ cvs update -p -r1.1 devtool.conf
  ##
  ##  devtool.conf -- Development Tool Configuration
  ##
  
  %autogen
      @autogen shtool   1.5.4 "1.5.*" all
      @autogen libtool  1.4.2 "1.4*"
      @autogen autoconf 2.52  "2.5.*"
  
  %autoclean
      @autoclean shtool
      @autoclean libtool
      @autoclean autoconf
  
  %configure
      ./configure \
          --prefix=/tmp/popt \
          --disable-shared \
          --enable-debug \
          "$@"
  
  %version
      ./shtool version -l txt -n "OSSP popt" -e VERSION
  
  %dist
      make distclean >/dev/null 2>&1
      ./shtool fixperm -v .
      V=`./shtool version -l txt -d short VERSION`
      ./shtool tarball -o popt-${V}.tar.gz -d popt-${V} -u ossp -g ossp \
                       -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf' -c 'gzip --best' .
  
  Index: ossp-pkg/popt/devtool.func
  ============================================================
  $ cvs update -p -r1.1 devtool.func
  ##
  ##  devtool.func -- Development Tool Functions
  ##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  devtool_require () {
      t="$1"; o="$2"; p="$3"; e="$4"; a="$5"
      v=`($t $o | head -1 | awk "{ print \\\$$p; }") 2>/dev/null`
      if [ ".$v" = . ]; then
          echo "devtool:ERROR: unable to determine version of $t" 1>&2
          exit 1
      fi
      case "$v" in
          $e )
              ;;
          $a )
              echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
              ;;
          * )
              echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
              exit 1
              ;;
      esac
      echo "$v"
  }
  
  devtool_autogen () {
      tool=$1
      shift
      case $tool in
          autoconf )
              autoconf_version=`devtool_require autoconf --version 4 "$1" "$2"`
              echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
              autoconf
              autoheader 2>&1 | grep -v "is unchanged"
              ;;
          libtool )
              libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
              echo "generating (GNU Libtool $libtoolize_version): ltmain.sh, libtool.m4, config.guess, config.sub"
              libtoolize --force --copy >/dev/null 2>&1
              cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
                  sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` libtool.m4
              ;;
          shtool )
              shtoolize_version=`devtool_require shtoolize -v 3 "$1" "$2"`
              echo "generating (GNU Shtool $shtoolize_version): shtool"
              shift
              shift
              shtoolize -q "$@"
              ;;
      esac
  }
  
  devtool_autoclean () {
      tool=$1
      shift
      case $tool in
          autoconf )
              echo "removing: configure config.h.in"
              rm -f configure config.h.in
              ;;
          libtool )
              echo "removing: ltmain.sh libtool.m4 config.guess config.sub"
              rm -f ltmain.sh libtool.m4 config.guess config.sub
              ;;
          shtool )
              echo "removing: shtool"
              rm -f shtool
              ;;
      esac
  }
  
  Index: ossp-pkg/popt/popt-config.in
  ============================================================
  $ cvs update -p -r1.1 popt-config.in
  #!/bin/sh
  ##
  ##  OSSP popt - Option Parsing Library
  ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  ##
  ##  This file is part of OSSP popt, an option parsing library
  ##  which can be found at http://www.ossp.org/pkg/popt/.
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  popt-config.in: library build utility
  ##
  
  DIFS=' 
  '
  
  #   tool
  tool_name="popt-config"
  
  #   library version
  lib_name="OSSP popt"
  lib_version="@POPT_VERSION_STR@"
  
  #   build paths
  prefix="@prefix@"
  exec_prefix="@exec_prefix@"
  bindir="@bindir@"
  libdir="@libdir@"
  includedir="@includedir@"
  mandir="@mandir@"
  datadir="@datadir@"
  
  #   build options
  cflags="@CFLAGS@"
  ldflags="@LDFLAGS@"
  libs="@LIBS@"
  
  #   option defaults
  help=no
  version=no
  
  usage="$tool_name"
  usage="$usage [--help] [--version] [--all]"
  usage="$usage [--prefix] [--exec-prefix] [--bindir] [--libdir] [--includedir] [--mandir] [--datadir]"
  usage="$usage [--cflags] [--ldflags] [--libs]"
  if [ $# -eq 0 ]; then
      echo "$tool_name:Error: Invalid option" 1>&2
      echo "$tool_name:Usage: $usage" 1>&2
      exit 1
  fi
  output=''
  output_extra=''
  all=no
  prev=''
  OIFS="$IFS" IFS="$DIFS"
  for option
  do
      if [ ".$prev" != . ]; then
          eval "$prev=\$option"
          prev=''
          continue
      fi
      case "$option" in
          -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
             *) optarg='' ;;
      esac
      case "$option" in
          --help|-h)
              echo "Usage: $usage"
              exit 0
              ;;
          --version|-v)
              echo "$lib_name $lib_version"
              exit 0
              ;;
          --all)
              all=yes
              ;;
          --prefix)
              output="$output $prefix"
              ;;
          --exec-prefix)
              output="$output $exec_prefix"
              ;;
          --bindir)
              output="$output $bindir"
              ;;
          --libdir)
              output="$output $libdir"
              ;;
          --includedir)
              output="$output $includedir"
              ;;
          --mandir)
              output="$output $mandir"
              ;;
          --datadir)
              output="$output $datadir"
              ;;
          --cflags)
              output="$output -I$includedir"
              output_extra="$output_extra $cflags"
              ;;
          --ldflags)
              output="$output -L$libdir"
              output_extra="$output_extra $ldflags"
              ;;
          --libs)
              output="$output -lxds"
              output_extra="$output_extra $libs"
              ;;
          * )
              echo "$tool_name:Error: Invalid option" 1>&2
              echo "$tool_name:Usage: $usage" 1>&2
              exit 1;
              ;;
      esac
  done
  IFS="$OIFS"
  if [ ".$prev" != . ]; then
      echo "$tool_name:Error: missing argument to --`echo $prev | sed 's/_/-/g'`" 1>&2
      exit 1
  fi
  if [ ".$output" != . ]; then
      if [ ".$all" = .yes ]; then
          output="$output $output_extra"
      fi
      echo $output
  fi
  
  Index: ossp-pkg/popt/popt_test.c
  ============================================================
  $ cvs update -p -r1.1 popt_test.c
  
  #include "popt.h"
  
  int main(int argc, char *argv[])
  {
      return 0;
  }
   

From ossp-cvs-owner@ossp.org  Wed Jan 30 15:07:02 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F2368764D8; Wed, 30 Jan 2002 15:07:01 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Message-Id: <20020130140701.F2368764D8@mail.ossp.org>
Date: Wed, 30 Jan 2002 15:07:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: CVSROOT                          Date:   30-Jan-2002 15:07:01
  Branch: HEAD                             Handle: 2002013014070100

  Modified files:
    CVSROOT                 modules

  Log:
    add popt and add it to lmtp2nntp

  Summary:
    Revision    Changes     Path
    1.47        +9  -7      CVSROOT/modules
  ____________________________________________________________________________

  Index: CVSROOT/modules
  ============================================================
  $ cvs diff -u -r1.46 -r1.47 modules
  --- CVSROOT/modules	30 Jan 2002 08:07:23 -0000	1.46
  +++ CVSROOT/modules	30 Jan 2002 14:07:01 -0000	1.47
  @@ -77,6 +77,7 @@
   var             ossp-pkg/var
   xds             ossp-pkg/xds
   ex              ossp-pkg/ex
  +popt            ossp-pkg/popt
   
   #   the OSSP applications
   eperl           ossp-pkg/eperl
  @@ -90,13 +91,14 @@
   petidomo        ossp-pkg/petidomo
   
   #   OSSP lmtp2nntp
  -lmtp2nntp       ossp-pkg/lmtp2nntp &lmtp2nntp_str &lmtp2nntp_l2 &lmtp2nntp_sa &lmtp2nntp_var &lmtp2nntp_val &lmtp2nntp_ex
  -lmtp2nntp_str   -d lib_str ossp-pkg/str
  -lmtp2nntp_l2    -d lib_l2  ossp-pkg/l2
  -lmtp2nntp_sa    -d lib_sa  ossp-pkg/sa
  -lmtp2nntp_var   -d lib_var ossp-pkg/var
  -lmtp2nntp_val   -d lib_val ossp-pkg/val
  -lmtp2nntp_ex    -d lib_ex  ossp-pkg/ex
  +lmtp2nntp       ossp-pkg/lmtp2nntp &lmtp2nntp_str &lmtp2nntp_l2 &lmtp2nntp_sa &lmtp2nntp_var &lmtp2nntp_val &lmtp2nntp_ex &lmtp2nntp_popt
  +lmtp2nntp_str   -d lib_str  ossp-pkg/str
  +lmtp2nntp_l2    -d lib_l2   ossp-pkg/l2
  +lmtp2nntp_sa    -d lib_sa   ossp-pkg/sa
  +lmtp2nntp_var   -d lib_var  ossp-pkg/var
  +lmtp2nntp_val   -d lib_val  ossp-pkg/val
  +lmtp2nntp_ex    -d lib_ex   ossp-pkg/ex
  +lmtp2nntp_popt  -d lib_popt ossp-pkg/popt
   
   #   OSSP rc
   rc              ossp-pkg/rc &rc_str &rc_var

From ossp-cvs-owner@ossp.org  Wed Jan 30 15:20:18 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2709C764D8; Wed, 30 Jan 2002 15:20:18 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/popt .cvsignore
Message-Id: <20020130142018.2709C764D8@mail.ossp.org>
Date: Wed, 30 Jan 2002 15:20:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   30-Jan-2002 15:20:18
  Branch: HEAD                             Handle: 2002013014201700

  Added files:
    ossp-pkg/popt           .cvsignore

  Log:
    ignore generated files

  Summary:
    Revision    Changes     Path
    1.1         +11 -0      ossp-pkg/popt/.cvsignore
  ____________________________________________________________________________

  Index: ossp-pkg/popt/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  Makefile
  config.guess
  config.h
  config.h.in
  config.sub
  configure
  libtool.m4
  ltmain.sh
  popt-config
  popt_test
  shtool

From ossp-cvs-owner@ossp.org  Wed Jan 30 15:22:24 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 35750764D8; Wed, 30 Jan 2002 15:22:24 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp Makefile.in configure.ac devtool.conf l...
Message-Id: <20020130142224.35750764D8@mail.ossp.org>
Date: Wed, 30 Jan 2002 15:22:24 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   30-Jan-2002 15:22:24
  Branch: HEAD                             Handle: 197001010100001012396943

  Modified files:
    ossp-pkg/lmtp2nntp      Makefile.in configure.ac devtool.conf
                            lmtp2nntp_config.c lmtp2nntp_main.c
                            lmtp2nntp_option.c
  Removed files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_popt.c lmtp2nntp_popt.h

  Log:
    Switch from local copy of POPT to our new linked-in child OSSP popt.

  Summary:
    Revision    Changes     Path
    1.44        +7  -8      ossp-pkg/lmtp2nntp/Makefile.in
    1.23        +12 -1      ossp-pkg/lmtp2nntp/configure.ac
    1.4         +7  -0      ossp-pkg/lmtp2nntp/devtool.conf
    1.17        +3  -3      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.11        +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
    1.3         +3  -3      ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
    NONE        +0  -2149   ossp-pkg/lmtp2nntp/lmtp2nntp_popt.c
    NONE        +0  -208    ossp-pkg/lmtp2nntp/lmtp2nntp_popt.h
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.43 -r1.44 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	30 Jan 2002 08:38:23 -0000	1.43
  +++ ossp-pkg/lmtp2nntp/Makefile.in	30 Jan 2002 14:22:23 -0000	1.44
  @@ -44,11 +44,11 @@
   POD2MAN     = pod2man
   
   PROG = lmtp2nntp
  -HDRS = lmtp2nntp_global.h lmtp2nntp_daemon.h lmtp2nntp_lmtp.h lmtp2nntp_nntp.h lmtp2nntp_argz.h lmtp2nntp_shpat.h lmtp2nntp_msg.h lmtp2nntp_popt.h lmtp2nntp_option.h lmtp2nntp_config.h 
  -SRCS = lmtp2nntp_main.c   lmtp2nntp_daemon.c lmtp2nntp_lmtp.c lmtp2nntp_nntp.c lmtp2nntp_argz.c lmtp2nntp_shpat.c lmtp2nntp_msg.c lmtp2nntp_popt.c lmtp2nntp_option.c lmtp2nntp_config.c lmtp2nntp_version.c 
  -OBJS = lmtp2nntp_main.o   lmtp2nntp_daemon.o lmtp2nntp_lmtp.o lmtp2nntp_nntp.o lmtp2nntp_argz.o lmtp2nntp_shpat.o lmtp2nntp_msg.o lmtp2nntp_popt.o lmtp2nntp_option.o lmtp2nntp_config.o lmtp2nntp_version.o
  +HDRS = lmtp2nntp_global.h lmtp2nntp_daemon.h lmtp2nntp_lmtp.h lmtp2nntp_nntp.h lmtp2nntp_argz.h lmtp2nntp_shpat.h lmtp2nntp_msg.h lmtp2nntp_option.h lmtp2nntp_config.h 
  +SRCS = lmtp2nntp_main.c   lmtp2nntp_daemon.c lmtp2nntp_lmtp.c lmtp2nntp_nntp.c lmtp2nntp_argz.c lmtp2nntp_shpat.c lmtp2nntp_msg.c lmtp2nntp_option.c lmtp2nntp_config.c lmtp2nntp_version.c 
  +OBJS = lmtp2nntp_main.o   lmtp2nntp_daemon.o lmtp2nntp_lmtp.o lmtp2nntp_nntp.o lmtp2nntp_argz.o lmtp2nntp_shpat.o lmtp2nntp_msg.o lmtp2nntp_option.o lmtp2nntp_config.o lmtp2nntp_version.o
   
  -SUBDIRS = @SUBDIR_EX@ @SUBDIR_STR@ @SUBDIR_L2@ @SUBDIR_SA@ @SUBDIR_VAR@ @SUBDIR_VAL@
  +SUBDIRS = @SUBDIR_EX@ @SUBDIR_STR@ @SUBDIR_L2@ @SUBDIR_SA@ @SUBDIR_VAR@ @SUBDIR_VAL@ @SUBDIR_POPT@
   
   all: _SUBDIRS_all lmtp2nntp lmtp2nntp.8
   
  @@ -128,14 +128,13 @@
   $(OBJS): Makefile
   
   #   AUTOMATICALLY GENERATED DEPENDENCY LIST - DO NOT EDIT
  -lmtp2nntp_main.o: lmtp2nntp_main.c lmtp2nntp_argz.h lmtp2nntp_shpat.h lmtp2nntp_daemon.h lmtp2nntp_popt.h lmtp2nntp_global.h config.h lmtp2nntp_option.h lmtp2nntp_config.h fixme.h lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_lmtp.h lmtp2nntp_version.c
  +lmtp2nntp_main.o: lmtp2nntp_main.c lmtp2nntp_argz.h lmtp2nntp_shpat.h lmtp2nntp_daemon.h lmtp2nntp_global.h config.h lmtp2nntp_option.h lmtp2nntp_config.h fixme.h lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_lmtp.h lmtp2nntp_version.c
   lmtp2nntp_daemon.o: lmtp2nntp_daemon.c config.h lmtp2nntp_daemon.h
   lmtp2nntp_lmtp.o: lmtp2nntp_lmtp.c lmtp2nntp_lmtp.h config.h
   lmtp2nntp_nntp.o: lmtp2nntp_nntp.c lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_global.h config.h fixme.h
   lmtp2nntp_argz.o: lmtp2nntp_argz.c lmtp2nntp_argz.h config.h
   lmtp2nntp_shpat.o: lmtp2nntp_shpat.c config.h lmtp2nntp_shpat.h
   lmtp2nntp_msg.o: lmtp2nntp_msg.c lmtp2nntp_msg.h lmtp2nntp_global.h config.h lmtp2nntp_argz.h 
  -lmtp2nntp_popt.o: lmtp2nntp_popt.c config.h lmtp2nntp_popt.h
  -lmtp2nntp_option.o: lmtp2nntp_option.c lmtp2nntp_argz.h lmtp2nntp_popt.h lmtp2nntp_global.h config.h lmtp2nntp_option.h lmtp2nntp_config.h fixme.h lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_lmtp.h lmtp2nntp_version.c
  -lmtp2nntp_config.o: lmtp2nntp_config.c lmtp2nntp_argz.h lmtp2nntp_popt.h lmtp2nntp_global.h config.h lmtp2nntp_option.h lmtp2nntp_config.h fixme.h lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_lmtp.h lmtp2nntp_version.c
  +lmtp2nntp_option.o: lmtp2nntp_option.c lmtp2nntp_argz.h lmtp2nntp_global.h config.h lmtp2nntp_option.h lmtp2nntp_config.h fixme.h lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_lmtp.h lmtp2nntp_version.c
  +lmtp2nntp_config.o: lmtp2nntp_config.c lmtp2nntp_argz.h lmtp2nntp_global.h config.h lmtp2nntp_option.h lmtp2nntp_config.h fixme.h lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_lmtp.h lmtp2nntp_version.c
   lmtp2nntp_version.o: lmtp2nntp_version.c lmtp2nntp_version.c
  Index: ossp-pkg/lmtp2nntp/configure.ac
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 configure.ac
  --- ossp-pkg/lmtp2nntp/configure.ac	30 Jan 2002 08:38:23 -0000	1.22
  +++ ossp-pkg/lmtp2nntp/configure.ac	30 Jan 2002 14:22:23 -0000	1.23
  @@ -117,6 +117,17 @@
                    LIBS_EXTRA="$LIBS_EXTRA -lval"])
   AC_SUBST(SUBDIR_VAL)
   
  +dnl #   check for OSSP popt library
  +AC_CHECK_EXTLIB([OSSP popt], 
  +                popt, popt_getcontext, popt.h, 
  +                [SUBDIR_POPT=""], 
  +                [SUBDIR_POPT="lib_popt"
  +                 CPPFLAGS="$CPPFLAGS -Ilib_popt"
  +                 CFLAGS="$CFLAGS -Ilib_popt"
  +                 LDFLAGS="$LDFLAGS -Llib_popt/.libs"
  +                 LIBS_EXTRA="$LIBS_EXTRA -lpopt"])
  +AC_SUBST(SUBDIR_POPT)
  +
   dnl #   check for external Dmalloc library
   AC_CHECK_EXTLIB([Dmalloc], dmalloc, dmalloc_debug, dmalloc.h, AC_DEFINE(DMALLOC))
   
  @@ -127,7 +138,7 @@
   export enable_shared
   enable_headline=no
   export enable_headline
  -AC_CONFIG_SUBDIRS([$SUBDIR_EX $SUBDIR_STR $SUBDIR_L2 $SUBDIR_SA $SUBDIR_VAR $SUBDIR_VAL])
  +AC_CONFIG_SUBDIRS([$SUBDIR_EX $SUBDIR_STR $SUBDIR_L2 $SUBDIR_SA $SUBDIR_VAR $SUBDIR_VAL $SUBDIR_POPT])
   
   dnl #   standard output generation
   AC_CONFIG_HEADERS(config.h)
  Index: ossp-pkg/lmtp2nntp/devtool.conf
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.conf
  --- ossp-pkg/lmtp2nntp/devtool.conf	30 Jan 2002 08:38:23 -0000	1.3
  +++ ossp-pkg/lmtp2nntp/devtool.conf	30 Jan 2002 14:22:23 -0000	1.4
  @@ -24,6 +24,9 @@
       echo "===> lib_val (devtool autogen)"
       (cd lib_val && ./devtool autogen)
       echo "<=== lib_val"
  +    echo "===> lib_popt (devtool autogen)"
  +    (cd lib_popt && ./devtool autogen)
  +    echo "<=== lib_popt"
   
   %autoclean
       @autoclean shtool
  @@ -47,9 +50,13 @@
       echo "===> lib_val (devtool autoclean)"
       (cd lib_val && ./devtool autoclean)
       echo "<=== lib_val"
  +    echo "===> lib_popt (devtool autoclean)"
  +    (cd lib_popt && ./devtool autoclean)
  +    echo "<=== lib_popt"
   
   %configure
       ./configure \
  +        --cache-file=config.cache \
           --prefix=/tmp/lmtp2nntp \
           --disable-shared \
           --enable-maintainer \
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	24 Jan 2002 16:25:54 -0000	1.16
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	30 Jan 2002 14:22:23 -0000	1.17
  @@ -31,11 +31,11 @@
   
   /* third party (included) */
   #include "lmtp2nntp_argz.h"
  -#include "lmtp2nntp_popt.h"
   
   /* third party (linked in) */
  -#include <str.h>
  -#include <val.h>
  +#include "str.h"
  +#include "val.h"
  +#include "popt.h"
   
   /* library version check (compile-time) */
   #define STR_VERSION_HEX_REQ 0x009206
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	30 Jan 2002 08:38:23 -0000	1.10
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	30 Jan 2002 14:22:23 -0000	1.11
  @@ -42,7 +42,6 @@
   #include "lmtp2nntp_argz.h"
   #include "lmtp2nntp_shpat.h"
   #include "lmtp2nntp_daemon.h"
  -#include "lmtp2nntp_popt.h"
   
   /* third party (linked in) */
   #include "ex.h"
  @@ -51,6 +50,7 @@
   #include "sa.h"
   #include "var.h"
   #include "val.h"
  +#include "popt.h"
   
   /* library version check (compile-time) */
   #define  L2_VERSION_HEX_REQ 0x001200
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 lmtp2nntp_option.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	24 Jan 2002 16:25:54 -0000	1.2
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	30 Jan 2002 14:22:23 -0000	1.3
  @@ -30,11 +30,11 @@
   
   /* third party (included) */
   #include "lmtp2nntp_argz.h"
  -#include "lmtp2nntp_popt.h"
   
   /* third party (linked in) */
  -#include <str.h>
  -#include <val.h>
  +#include "str.h"
  +#include "val.h"
  +#include "popt.h"
   
   /* library version check (compile-time) */
   #define STR_VERSION_HEX_REQ 0x009206
    

From ossp-cvs-owner@ossp.org  Wed Jan 30 16:42:44 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 980DF764D8; Wed, 30 Jan 2002 16:42:44 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.h.in
Message-Id: <20020130154244.980DF764D8@mail.ossp.org>
Date: Wed, 30 Jan 2002 16:42:44 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   30-Jan-2002 16:42:44
  Branch: HEAD                             Handle: 2002013015424400

  Modified files:
    ossp-pkg/l2             l2.h.in

  Log:
    make logX utility macros public

  Summary:
    Revision    Changes     Path
    1.28        +8  -1      ossp-pkg/l2/l2.h.in
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2.h.in
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 l2.h.in
  --- ossp-pkg/l2/l2.h.in	2 Jan 2002 17:07:38 -0000	1.27
  +++ ossp-pkg/l2/l2.h.in	30 Jan 2002 15:42:44 -0000	1.28
  @@ -99,9 +99,16 @@
   /* macro describing all levels */
   #define L2_LEVEL_ALL ((1 << (8+9+1))-1)
   
  -/* macr describing all levels from highest (PANIC) 
  +/* macro describing all levels from highest (PANIC) 
      to and including a particular low level */
   #define L2_LEVEL_UPTO(level) (((level)-1)|(level))
  +
  +/* macros for easy logging */
  +#define log0(ctx,level,msg)             l2_channel_log((ctx)->l2, L2_LEVEL_##level, "%P" msg)
  +#define log1(ctx,level,msg,a1)          l2_channel_log((ctx)->l2, L2_LEVEL_##level, "%P" msg, a1)
  +#define log2(ctx,level,msg,a1,a2)       l2_channel_log((ctx)->l2, L2_LEVEL_##level, "%P" msg, a1, a2)
  +#define log3(ctx,level,msg,a1,a2,a3)    l2_channel_log((ctx)->l2, L2_LEVEL_##level, "%P" msg, a1, a2, a3)
  +#define log4(ctx,level,msg,a1,a2,a3,a4) l2_channel_log((ctx)->l2, L2_LEVEL_##level, "%P" msg, a1, a2, a3, a4)
   
   /* list of return values */
   typedef enum {

From ossp-cvs-owner@ossp.org  Wed Jan 30 17:41:03 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2AFA6764D8; Wed, 30 Jan 2002 17:41:03 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp example.conf fixme.h lmtp2nntp_config.c...
Message-Id: <20020130164103.2AFA6764D8@mail.ossp.org>
Date: Wed, 30 Jan 2002 17:41:03 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   30-Jan-2002 17:41:03
  Branch: HEAD                             Handle: 2002013016410200

  Modified files:
    ossp-pkg/lmtp2nntp      example.conf fixme.h lmtp2nntp_config.c
                            lmtp2nntp_global.h lmtp2nntp_main.c
                            lmtp2nntp_option.c lmtp2nntp_option.h

  Log:
    flush. first options moved. introduced exception handling.

  Summary:
    Revision    Changes     Path
    1.7         +6  -3      ossp-pkg/lmtp2nntp/example.conf
    1.2         +5  -2      ossp-pkg/lmtp2nntp/fixme.h
    1.18        +192 -10    ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.4         +3  -11     ossp-pkg/lmtp2nntp/lmtp2nntp_global.h
    1.12        +0  -157    ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
    1.4         +23 -21     ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
    1.3         +1  -3      ossp-pkg/lmtp2nntp/lmtp2nntp_option.h
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/example.conf
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 example.conf
  --- ossp-pkg/lmtp2nntp/example.conf	23 Jan 2002 15:55:21 -0000	1.6
  +++ ossp-pkg/lmtp2nntp/example.conf	30 Jan 2002 16:41:02 -0000	1.7
  @@ -28,9 +28,12 @@
   #include         "sampleconfig.two"             #    -i aka --include
                                                   #    -l is obsolete since v1.2, see l2spec
   
  -l2spec          prefix(prefix="%%b %%d %%H:%%M:%%S <%%L> lmtp2nntp[%%P]: ",timezone=local) \
  -                   -> buffer(size=65536) \
  -                   -> file(path=%s,append=1,perm=%d) \
  +l2spec          ' \
  +                debug: prefix(prefix="%%b %%d %%H:%%M:%%S <%%L> lmtp2nntp[%%P]: ",timezone=local) \
  +                -> file(path="2log",append=0,perm=432) \
  +                '
  +               #    -> file(path="2log",append=0,perm=0666) FIXME l2 should support octal notation
  +               #'  #-> buffer(size=65536) \     #add this after prefix for log buffering
                                                   #    -l aka --l2spec
   
   mailfrom        "any.*@example\.org"            #see -m aka --mailfrom
  Index: ossp-pkg/lmtp2nntp/fixme.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 fixme.h
  --- ossp-pkg/lmtp2nntp/fixme.h	24 Jan 2002 12:07:13 -0000	1.1
  +++ ossp-pkg/lmtp2nntp/fixme.h	30 Jan 2002 16:41:02 -0000	1.2
  @@ -36,7 +36,7 @@
       l2_context_t    ctx;
       val_t          *val;
       char           *progname;
  -    char           *option_logfile;
  +    /*FIXME obsolete char           *option_logfile; */
       int             option_groupmode;
       int             option_operationmode;
       char           *option_operationmodefakestatus;
  @@ -52,7 +52,7 @@
       int             option_timeout_nntp_write;
       char           *option_mailfrom;
       char           *option_restrictheader;
  -    unsigned int    option_levelmask;
  +    /*FIXME obsolete unsigned int    option_levelmask; */
       char           *option_pidfile;
       int             option_killflag;
       uid_t           option_uid;
  @@ -82,5 +82,8 @@
       msg_t          *msg;
       struct utsname  uname;
   } lmtp2nntp_t;
  +
  +#define ERR_EXECUTION 1
  +#define ERR_DELIVERY -2
   
   #endif /* __FIXME_H__ */
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	30 Jan 2002 14:22:23 -0000	1.17
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	30 Jan 2002 16:41:02 -0000	1.18
  @@ -28,6 +28,7 @@
   #include <stdlib.h>
   #include <stdio.h>
   #include <sys/stat.h>
  +#include <errno.h>
   
   /* third party (included) */
   #include "lmtp2nntp_argz.h"
  @@ -36,6 +37,7 @@
   #include "str.h"
   #include "val.h"
   #include "popt.h"
  +#include "l2.h"
   
   /* library version check (compile-time) */
   #define STR_VERSION_HEX_REQ 0x009206
  @@ -75,20 +77,200 @@
   #define NUL '\0'
   #endif
   
  +static l2_result_t 
  +formatter_prefix(l2_context_t *_ctx, const char id, const char *param,
  +          char *bufptr, size_t bufsize, size_t *buflen, va_list *ap)
  +{
  +    lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx->vp;
  +            
  +    if ((ctx->msg != NULL) && (ctx->msg->cpFid != NULL)) {
  +        sprintf(bufptr, "%s: ", ctx->msg->cpFid);
  +        *buflen = strlen(bufptr);
  +    }
  +    else
  +        *buflen = 0;
  +    return L2_OK;
  +}
  +
  +static l2_result_t 
  +formatter_errno(l2_context_t *_ctx, const char id, const char *param,
  +          char *bufptr, size_t bufsize, size_t *buflen, va_list *ap)
  +{
  +    sprintf(bufptr, "(%d) %s", errno, strerror(errno));
  +    *buflen = strlen(bufptr);
  +    return L2_OK;
  +}
  +
   void config_context(lmtp2nntp_t *ctx)
   {
  +    ex_t ex;
       optionval_t *ov;
  -    char *cp;
  +    //char *cp;
  +    int rc;
  +
  +    /* create L2 environment */
  +    if (l2_env_create(&ctx->l2_env) != L2_OK) {
  +        fprintf(stderr, "%s:Error: failed to create L2 environment\n", ctx->progname);
  +        CU(ERR_EXECUTION);
  +    }
  +    if (l2_env_formatter(ctx->l2_env, 'P', formatter_prefix, &ctx->ctx) != L2_OK) {
  +        fprintf(stderr, "%s:Error: logging failed to register prefix formatter\n", ctx->progname);
  +        CU(ERR_EXECUTION);
  +    }
  +    if (l2_env_formatter(ctx->l2_env, 'D', l2_util_fmt_dump, NULL) != L2_OK) {
  +        fprintf(stderr, "%s:Error: logging failed to register dump formatter\n", ctx->progname);
  +        CU(ERR_EXECUTION);
  +    }
  +    if (l2_env_formatter(ctx->l2_env, 'S', l2_util_fmt_string, NULL) != L2_OK) {
  +        fprintf(stderr, "%s:Error: logging failed to register string formatter\n", ctx->progname);
  +        CU(ERR_EXECUTION);
  +    }
  +    if (l2_env_formatter(ctx->l2_env, 'm', formatter_errno, NULL) != L2_OK) {
  +        fprintf(stderr, "%s:Error: logging failed to register errno formatter\n", ctx->progname);
  +        CU(ERR_EXECUTION);
  +    }
  +    if (val_get(ctx->val, "option.l2spec", &ov) != VAL_OK) {
  +        fprintf(stderr, "%s:Error: (internal) config did not register 'l2spec' option\n", ctx->progname);
  +        CU(ERR_EXECUTION);
  +    }
  +    if (ov->data.s != NULL) {
  +        if ((rc = l2_spec(&ctx->l2, ctx->l2_env, ov->data.s)) != L2_OK) {
  +            fprintf(stderr, "%s:Error: logging failed to create stream\n", ctx->progname);
  +            CU(ERR_EXECUTION);
  +        }
  +        if (l2_channel_levels(ctx->l2, L2_LEVEL_ALL, L2_LEVEL_NONE) != L2_OK) { /* FIXME should this globalmask and flushmask be user-configurable? */
  +            fprintf(stderr, "%s:Error: logging failed to set global logging level\n", ctx->progname);
  +            CU(ERR_EXECUTION);
  +        }
  +        if (l2_channel_open(ctx->l2) != L2_OK) {
  +            fprintf(stderr, "%s:Error: logging failed to open channel stream\n", ctx->progname);
  +            CU(ERR_EXECUTION);
  +        }
  +    }
  +    /* from this point on logging is up and running and fprintf(stderr, ...)
  +     * should not be used in the remainder of the program flow.
  +     */
  +    log1(ctx, NOTICE, "startup, version %s", lmtp2nntp_version.v_gnu);
  +
  +    /* --childsmax SINGLE */
  +    try {
  +        if (   (val_get(ctx->val, "option.childsmax", &ov) != VAL_OK)
  +            || (ov->ndata != 1)
  +            || (ov->data.s == NULL)
  +              ) throw(0,0,0);
  +        log1(ctx, TRACE, "--childsmax = \"%s\"", ov->data.s);
  +        if ((ctx->option_childsmax = atoi(ov->data.s)) <= 0) {
  +            log1(ctx, ERROR, "number (%d) out of range for option --childsmax\n", ctx->option_childsmax);
  +            throw(0,0,0);
  +        }
  +    }
  +    catch (ex) {
  +        log1(ctx, ERROR, "caught class  %s\n", ex.ex_class  == NULL ? "N/A" : (char *)ex.ex_class );
  +        log1(ctx, ERROR, "caught object %s\n", ex.ex_object == NULL ? "N/A" : (char *)ex.ex_object);
  +        log1(ctx, ERROR, "caught value  %s\n", ex.ex_value  == NULL ? "N/A" : (char *)ex.ex_value );
  +        rethrow;
  +    }
   
  -    printf("DEBUG: Hello, World!\n");
  -    //case 'C': /*POD [B<-C> I<childsmax>] */
  -    if (val_get(ctx->val, "option.childsmax", &ov) != VAL_OK)
  -        fprintf(stderr, "%s:Error: (internal) config did not register 'childsmax' option\n", ctx->progname);
  -    printf("DEBUG: option_childsmax %d = \"%s\"\n", ov->ndata, ov->data.s);
  -    ctx->option_childsmax = atoi(ov->data.s);
  -    if (ctx->option_childsmax <= 0) {
  -        fprintf(stderr, "%s:Error: Invalid number (%d) to option -C\n", ctx->progname, ctx->option_childsmax);
  -        return; //FIXME CU(ERR_EXECUTION);
  +    /* --daemonize FLAG */
  +    try {
  +        if (   (val_get(ctx->val, "option.daemonize", &ov) != VAL_OK)
  +            || (ov->ndata != 1)
  +            || (ov->data.f != 1)
  +              ) throw(0,0,0);
  +        log1(ctx, TRACE, "--daemonize = %d", ov->data.f);
  +        ctx->option_daemon = TRUE;
       }
  +    catch (ex)
  +        rethrow;
  +
  +    /* --kill FLAG */
  +    try {
  +        if (   (val_get(ctx->val, "option.kill", &ov) != VAL_OK)
  +            || (ov->ndata != 1)
  +            || (ov->data.f != 1)
  +              ) throw(0,0,0);
  +        log1(ctx, TRACE, "--kill = %d", ov->data.f);
  +        ctx->option_killflag = TRUE;
  +    }
  +    catch (ex)
  +        rethrow;
  +
  +    /* --pidfile SINGLE */
  +    try {
  +        if (   (val_get(ctx->val, "option.pidfile", &ov) != VAL_OK)
  +            || (ov->ndata != 1)
  +            || (ov->data.s == NULL)
  +              ) throw(0,0,0);
  +        log1(ctx, TRACE, "--pidfile = \"%s\"", ov->data.s);
  +        ctx->option_pidfile = ov->data.s;
  +    }
  +    catch (ex)
  +        rethrow;
  +
  +    /* --acl MULTI */
  +    try {
  +        int i;
  +        char *cp;
  +        struct acl *acl;
  +
  +        if (   (val_get(ctx->val, "option.acl", &ov) != VAL_OK)
  +            || ((ov->ndata >= 1) && (ov->data.m == NULL))
  +              ) throw(0,0,0);
  +        for (i = 0; i < ov->ndata; i++)
  +            log2(ctx, TRACE, "--acl[%d] = \"%s\"", i, (ov->data.m)[i]);
  +        log1(ctx, DEBUG, "ov->ndata = %d", ov->ndata);
  +        if ((acl = (struct acl *)malloc(ov->ndata * sizeof(struct acl))) == NULL) throw(0,0,0);
  +        for (i = 0; i < ov->ndata; i++) {
  +            cp = (ov->data.m)[i];
  +            log2(ctx, DEBUG, "cp = (data.m)[%d] = \"%s\"", i, cp);
  +            //ctx->option_acl[ctx->option_aclc].acl = strdup(cp);
  +        }
  +
  +    }
  +    catch (ex)
  +        rethrow;
  +#if 0
  +
  +                if (argz_create_sep(optarg, ',', &azACL, &asACL) != 0)
  +                    CU(ERR_EXECUTION);
  +                cp = NULL;
  +                while ((cp = argz_next(azACL, asACL, cp)) != NULL) {
  +                    if (ctx->option_aclc >= MAXACLS) {
  +                        fprintf(stderr, "%s:Error: Too many ACL (%d) using option -a\n", ctx->progname, ctx->option_aclc);
  +                        CU(ERR_EXECUTION);
  +                    }
  +
  +
  +
  +                    ctx->option_acl[ctx->option_aclc].acl = strdup(cp);
  +                    if (cp[0] == '!') {
  +                        ctx->option_acl[ctx->option_aclc].not = TRUE;
  +                        cpAddr = strdup(cp+1);
  +                    }
  +                    else {
  +                        cpAddr = strdup(cp);
  +                    }
  +                    if ((cpPrefixLen = strrchr(cpAddr, '/')) != NULL)
  +                        *cpPrefixLen++ = NUL;
  +                    else
  +                        cpPrefixLen = "-1";
  +                    ctx->option_acl[ctx->option_aclc].prefixlen = atoi(cpPrefixLen);
  +                    if ((rc = sa_addr_create(&ctx->option_acl[ctx->option_aclc].saa)) != SA_OK) {
  +                        fprintf(stderr, "%s:Error: Creating address failed for -a option (%d)\n", 
  +                                ctx->progname, rc);
  +                    }
  +                    if ((rc = sa_addr_u2a(ctx->option_acl[ctx->option_aclc].saa, "inet://%s:0", cpAddr)) != SA_OK) {
  +                        fprintf(stderr, "%s:Error: Parsing host address failed for \"%s:0\" (%d)\n", 
  +                                ctx->progname, cpAddr, rc);
  +                        CU(ERR_EXECUTION);
  +                    }
  +                    ctx->option_aclc++;
  +                    free(cpAddr);
  +                }
  +                free(azACL);
  +#endif
  +
  +
  +CUS:
       return;
   }
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_global.h
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 lmtp2nntp_global.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_global.h	17 Jan 2002 17:01:55 -0000	1.3
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_global.h	30 Jan 2002 16:41:02 -0000	1.4
  @@ -34,17 +34,6 @@
   #include "dmalloc.h"
   #endif
   
  -#define log0(ctx,level,msg) \
  -    l2_channel_log((ctx)->l2, L2_LEVEL_##level, "%P" msg)
  -#define log1(ctx,level,msg,a1) \
  -    l2_channel_log((ctx)->l2, L2_LEVEL_##level, "%P" msg, a1)
  -#define log2(ctx,level,msg,a1,a2) \
  -    l2_channel_log((ctx)->l2, L2_LEVEL_##level, "%P" msg, a1, a2)
  -#define log3(ctx,level,msg,a1,a2,a3) \
  -    l2_channel_log((ctx)->l2, L2_LEVEL_##level, "%P" msg, a1, a2, a3)
  -#define log4(ctx,level,msg,a1,a2,a3,a4) \
  -    l2_channel_log((ctx)->l2, L2_LEVEL_##level, "%P" msg, a1, a2, a3, a4)
  -
   #define STMT(stuff) do { stuff } while (0)
   #define CU(returncode) STMT( rc = returncode; goto CUS; )
   #define VCU STMT( goto CUS; )
  @@ -53,5 +42,8 @@
       size_t  as;
       char   *az;
   } argz_t;
  +
  +#define __EX_NS_USE_CXX__
  +#include <ex.h>
   
   #endif /* __LMTP2NNTP_H__ */
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	30 Jan 2002 14:22:23 -0000	1.11
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	30 Jan 2002 16:41:02 -0000	1.12
  @@ -98,9 +98,6 @@
   #define NUL '\0'
   #endif
   
  -#define ERR_EXECUTION 1
  -#define ERR_DELIVERY -2
  -
   #define STDSTRLEN 512
   
   static lmtp_rc_t lmtp_cb_lhlo(lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *ctx);
  @@ -321,30 +318,6 @@
       return rc;
   }
   
  -static l2_result_t 
  -formatter_prefix(l2_context_t *_ctx, const char id, const char *param,
  -          char *bufptr, size_t bufsize, size_t *buflen, va_list *ap)
  -{
  -    lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx->vp;
  -            
  -    if ((ctx->msg != NULL) && (ctx->msg->cpFid != NULL)) {
  -        sprintf(bufptr, "%s: ", ctx->msg->cpFid);
  -        *buflen = strlen(bufptr);
  -    }
  -    else
  -        *buflen = 0;
  -    return L2_OK;
  -}
  -
  -static l2_result_t 
  -formatter_errno(l2_context_t *_ctx, const char id, const char *param,
  -          char *bufptr, size_t bufsize, size_t *buflen, va_list *ap)
  -{
  -    sprintf(bufptr, "(%d) %s", errno, strerror(errno));
  -    *buflen = strlen(bufptr);
  -    return L2_OK;
  -}
  -
   static void catchsignal(int sig, ...)
   {
       va_list ap;
  @@ -435,7 +408,6 @@
       ctx->val = NULL;
       ctx->progname = NULL;
       ctx->option_childsmax = 10;
  -    ctx->option_logfile = NULL;
       ctx->option_groupmode = GROUPMODE_ARG;
       ctx->option_operationmode = OPERATIONMODE_FAKE;
       ctx->option_operationmodefakestatus = "553";   /* Requested action not taken: mailbox name not allowed */
  @@ -451,7 +423,6 @@
       ctx->option_timeout_nntp_write = 60;
       ctx->option_mailfrom = NULL;
       ctx->option_restrictheader = NULL;
  -    ctx->option_levelmask = L2_LEVEL_NONE;
       ctx->option_pidfile = NULL;
       ctx->option_killflag = FALSE;
       ctx->option_uid = getuid();
  @@ -516,54 +487,6 @@
       /* read in the arguments */
       while ((i = getopt(argc, argv, "C:DKP:Va:b:c:d:g:h:l:m:n:o:r:s:t:u:v")) != -1) {
           switch (i) {
  -            case 'D': /*POD [B<-D>] */
  -                ctx->option_daemon = TRUE;
  -                break;
  -            case 'K': /*POD [B<-K>] */
  -                ctx->option_killflag = TRUE;
  -                break;
  -            case 'P': /*POD [B<-P> I<pidfile>] */
  -                ctx->option_pidfile = strdup(optarg);
  -                break;
  -            case 'V': /*POD [B<-V>] */
  -                ctx->option_veryverbose = TRUE;
  -                break;
  -            case 'a': /*POD [B<-a> I<addr>/I<mask>[,I<addr>/I<mask>[,...]] */
  -                if (argz_create_sep(optarg, ',', &azACL, &asACL) != 0)
  -                    CU(ERR_EXECUTION);
  -                cp = NULL;
  -                while ((cp = argz_next(azACL, asACL, cp)) != NULL) {
  -                    if (ctx->option_aclc >= MAXACLS) {
  -                        fprintf(stderr, "%s:Error: Too many ACL (%d) using option -a\n", ctx->progname, ctx->option_aclc);
  -                        CU(ERR_EXECUTION);
  -                    }
  -                    ctx->option_acl[ctx->option_aclc].acl = strdup(cp);
  -                    if (cp[0] == '!') {
  -                        ctx->option_acl[ctx->option_aclc].not = TRUE;
  -                        cpAddr = strdup(cp+1);
  -                    }
  -                    else {
  -                        cpAddr = strdup(cp);
  -                    }
  -                    if ((cpPrefixLen = strrchr(cpAddr, '/')) != NULL)
  -                        *cpPrefixLen++ = NUL;
  -                    else
  -                        cpPrefixLen = "-1";
  -                    ctx->option_acl[ctx->option_aclc].prefixlen = atoi(cpPrefixLen);
  -                    if ((rc = sa_addr_create(&ctx->option_acl[ctx->option_aclc].saa)) != SA_OK) {
  -                        fprintf(stderr, "%s:Error: Creating address failed for -a option (%d)\n", 
  -                                ctx->progname, rc);
  -                    }
  -                    if ((rc = sa_addr_u2a(ctx->option_acl[ctx->option_aclc].saa, "inet://%s:0", cpAddr)) != SA_OK) {
  -                        fprintf(stderr, "%s:Error: Parsing host address failed for \"%s:0\" (%d)\n", 
  -                                ctx->progname, cpAddr, rc);
  -                        CU(ERR_EXECUTION);
  -                    }
  -                    ctx->option_aclc++;
  -                    free(cpAddr);
  -                }
  -                free(azACL);
  -                break;
               case 'b': /*POD [B<-b> I<addr>[I<:port>]|C<->|I<path>[:perms]] */
                   if (strcmp(optarg, "-") != 0) {
                       if ((rc = sa_create(&ctx->saAltio)) != SA_OK) {
  @@ -737,25 +660,6 @@
                   free(cpHeadervalue);
                   free(cpHeadername);
                   break;
  -            case 'l': /*POD [B<-l> I<level>[:I<logfile>]] */
  -                if ((cp = strrchr(optarg, ':')) != NULL) {
  -                    *cp++ = NUL;
  -                    if (*cp == NUL) {
  -                        fprintf(stderr, "%s:Error: empty logfile to option -l\n", ctx->progname);
  -                        CU(ERR_EXECUTION);
  -                    }
  -                    else
  -                        ctx->option_logfile = strdup(cp);
  -                }
  -                else
  -                    ctx->option_logfile = strdup("logfile");
  -
  -                if (l2_util_s2l(optarg, strlen(optarg), ',', &ctx->option_levelmask) != L2_OK) {
  -                    fprintf(stderr, "%s:Error: invalid level \"%s\" to option -l\n", ctx->progname, optarg);
  -                    CU(ERR_EXECUTION);
  -                }
  -                ctx->option_levelmask = L2_LEVEL_UPTO(ctx->option_levelmask);
  -                break;
               case 'm': /*POD [B<-m> I<mailfrom>] */
                   ctx->option_mailfrom = strdup(optarg);
                   /* protect ourselfs from the substitution of backreferences.
  @@ -975,65 +879,6 @@
           }
       }
   
  -    /* create L2 environment */
  -    if (l2_env_create(&ctx->l2_env) != L2_OK) {
  -        fprintf(stderr, "%s:Error: failed to create L2 environment\n", ctx->progname);
  -        CU(ERR_EXECUTION);
  -    }
  -
  -    /* register custom L2 formatters */
  -    if (l2_env_formatter(ctx->l2_env, 'P', formatter_prefix, &ctx->ctx) != L2_OK) {
  -        fprintf(stderr, "%s:Error: logging failed to register prefix formatter\n", ctx->progname);
  -        CU(ERR_EXECUTION);
  -    }
  -    if (l2_env_formatter(ctx->l2_env, 'D', l2_util_fmt_dump, NULL) != L2_OK) {
  -        fprintf(stderr, "%s:Error: logging failed to register dump formatter\n", ctx->progname);
  -        CU(ERR_EXECUTION);
  -    }
  -    if (l2_env_formatter(ctx->l2_env, 'S', l2_util_fmt_string, NULL) != L2_OK) {
  -        fprintf(stderr, "%s:Error: logging failed to register string formatter\n", ctx->progname);
  -        CU(ERR_EXECUTION);
  -    }
  -    if (l2_env_formatter(ctx->l2_env, 'm', formatter_errno, NULL) != L2_OK) {
  -        fprintf(stderr, "%s:Error: logging failed to register errno formatter\n", ctx->progname);
  -        CU(ERR_EXECUTION);
  -    }
  -
  -    /* create channel stream */
  -    if (ctx->option_levelmask != L2_LEVEL_NONE && ctx->option_logfile != NULL) {
  -        if (ctx->option_veryverbose)
  -            rc = l2_spec(&ctx->l2, ctx->l2_env, 
  -                         "prefix(prefix=\"%%b %%d %%H:%%M:%%S <%%L> lmtp2nntp[%%P]: \",timezone=local)"
  -                         "  -> buffer(size=65536)"
  -                         "  -> file(path=%s,append=1,perm=%d)",
  -                         ctx->option_logfile, 0644);
  -        else
  -            rc = l2_spec(&ctx->l2, ctx->l2_env, 
  -                         "prefix(prefix=\"%%b %%d %%H:%%M:%%S <%%L> lmtp2nntp[%%P]: \",timezone=local)"
  -                         "  -> file(path=%s,append=1,perm=%d)",
  -                         ctx->option_logfile, 0644);
  -        if (rc != L2_OK) {
  -            fprintf(stderr, "%s:Error: logging failed to create stream\n", ctx->progname);
  -            CU(ERR_EXECUTION);
  -        }
  -        if (l2_channel_levels(ctx->l2, ctx->option_levelmask, L2_LEVEL_NONE) != L2_OK) {
  -            fprintf(stderr, "%s:Error: logging failed to set global logging level\n", ctx->progname);
  -            CU(ERR_EXECUTION);
  -        }
  -        if (l2_channel_open(ctx->l2) != L2_OK) {
  -            fprintf(stderr, "%s:Error: logging failed to open channel stream\n", ctx->progname);
  -            CU(ERR_EXECUTION);
  -        }
  -    }
  -
  -    /* from this point on logging is up and running and fprintf(stderr, ...)
  -     * should not be used in the remainder of the code
  -     */
  -
  -    log1(ctx, NOTICE, "startup, version %s", lmtp2nntp_version.v_gnu);
  -    if (ctx->option_veryverbose)
  -        log0(ctx, NOTICE, "logging very verbose (unbuffered)");
  -
       if ((ctx->option_pidfile != NULL) && ctx->option_killflag) {
           if ((fd = fopen(ctx->option_pidfile, "r")) == NULL)
               log1(ctx, ERROR, "cannot open pidfile \"%s\" for reading %m", ctx->option_pidfile);
  @@ -1267,8 +1112,6 @@
           free(ctx->azHeaderValuePairs);
       if (ctx->option_pidfile != NULL)
           free(ctx->option_pidfile);
  -    if (ctx->option_logfile != NULL)
  -        free(ctx->option_logfile);
       if (ctx->progname != NULL)
           free(ctx->progname);
       if (ctx->azGroupargs != NULL)
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 lmtp2nntp_option.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	30 Jan 2002 14:22:23 -0000	1.3
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	30 Jan 2002 16:41:02 -0000	1.4
  @@ -73,12 +73,7 @@
   #define NUL '\0'
   #endif
   
  -static void die(char *msg)
  -{
  -    printf("ERROR: %s\n", msg);
  -    exit(-1);
  -}
  -
  +#if 0
   static val_rc_t dumper(void *ctx, const char *name, int type, const char *desc, void *data)
   {
       optionval_t *oc;
  @@ -98,7 +93,6 @@
           case OPT_MULTI:
               printf("DEBUG: <%5s>, name=<%20s>, OPT_MULTI,  desc=<%20s>, data@%.8lx->[%d]%.8lx\n",  (char *)ctx, name, desc, (long)oc, oc->ndata, (long)oc->data.m);
               for (i = 0; i < oc->ndata; i++) {
  -#if 0
                   {
                       int j;
                       printf("DEBUG: ");
  @@ -107,7 +101,6 @@
                       for (j=0; j<8; j++) printf("%c", isprint(oc->data.m[i][j]) ? oc->data.m[i][j] : '.');
                       printf(" ");
                   }
  -#endif
                   printf("DEBUG: [%3d] %.8lx \"%s\"\n", i, (long)oc->data.m[i], oc->data.m[i]);
               }
               break;
  @@ -116,7 +109,8 @@
       }
       return VAL_OK;
   }
  -//lmtp2nntp_option_rc_t option_find(lmtp2nntp_option_t *o, int number, optionval_t **ocp);
  +#endif
  +
   static lmtp2nntp_option_rc_t option_find(lmtp2nntp_option_t *o, int number, optionval_t **ocp)
   {
       lmtp2nntp_option_rc_t rc = VAL_OK;
  @@ -466,7 +460,7 @@
   static lmtp2nntp_option_rc_t includeit(optionval_t *oc, char *arg, char *cbctx)
   {
       lmtp2nntp_option_t *o;
  -    char *cpBuf = NULL;
  +    volatile char *cpBuf = NULL;
       int argc = 0;
       char **argv = NULL;
   
  @@ -480,15 +474,23 @@
       {
           const char *filename = arg;
           struct stat sb;
  -        int fd;
  +        volatile int fd = -1;
  +        ex_t ex;
   
  -        if (stat(filename, &sb) == -1) die("stat");
  -        if ((cpBuf = (char *)malloc((size_t)sb.st_size + 1)) == NULL) die("malloc");
  -        if ((fd = open(filename, O_RDONLY)) == -1) die("open");
  -        if (read(fd, (void *)cpBuf, (size_t)sb.st_size) != (ssize_t)sb.st_size) die("read");
  -        cpBuf[(int)sb.st_size] = '\0';
  -        if (close(fd) == -1)
  -            die("close");
  +        try {
  +            if (stat(filename, &sb) == -1) throw(0, 0, "stat");
  +            if ((cpBuf = (char *)malloc((size_t)sb.st_size + 1)) == NULL) throw(0, 0, "malloc");
  +            if ((fd = open(filename, O_RDONLY)) == -1) throw(0, 0, "open");
  +            if (read(fd, (void *)cpBuf, (size_t)sb.st_size) != (ssize_t)sb.st_size) throw(0, 0, "read");
  +            cpBuf[(int)sb.st_size] = '\0';
  +        }
  +        cleanup {
  +            if (fd != -1) close(fd);
  +        }
  +        catch (ex) {
  +            fprintf(stderr, "ERROR: caught %s\n", ex.ex_value == NULL ? "N/A" : (char *)ex.ex_value);
  +            rethrow;
  +        }
       }
       //printf("DEBUG: *** 2 *** file as it was just read in ***\n%s***\n", cpBuf);
   
  @@ -504,8 +506,8 @@
           char p;     /* previous character */
           int eof;    /* flag signaling end of file detected */
   
  -        cpI = cpBuf;
  -        cpO = cpBuf;
  +        cpI = (char *)cpBuf;
  +        cpO = (char *)cpBuf;
           eof = FALSE;
           pline = 1;
           p = NUL;
  @@ -621,7 +623,7 @@
       (void)option_register(o, "mailfrom",           'm', OPT_SINGLE, &stdsyntax, "m/.*/",     "foo20", "regex" );
       (void)option_register(o, "nodename",           'n', OPT_SINGLE, &stdsyntax, "m/.*/",     "foo21", "nodename" );
       (void)option_register(o, "operationmode",      'o', OPT_SINGLE, &stdsyntax, "m/.*/",     "foo22", "post|feed" );
  -    (void)option_register(o, "l2spec",             'l', OPT_SINGLE, &stdsyntax, "m/.*/",     "foo23", "spec" );
  +    (void)option_register(o, "l2spec",             'l', OPT_SINGLE, &stdsyntax, "m/.*/",     "L2 channel tree textual specification", "l2spec" );
       (void)option_register(o, "uid",                'u', OPT_SINGLE, &stdsyntax, "m/.*/",     "foo24", "number|name" );
       (void)option_register(o, "restrictheader",     'r', OPT_MULTI,  &stdsyntax, "m/.*/",     "foo25", "regex" );
       (void)option_register(o, "newsgroup",          NUL, OPT_MULTI,  &stdsyntax, "m/.*/",     "foo26", "newsgroup");
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_option.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 lmtp2nntp_option.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_option.h	24 Jan 2002 16:25:54 -0000	1.2
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_option.h	30 Jan 2002 16:41:02 -0000	1.3
  @@ -96,11 +96,9 @@
       val_t              *val;            /* val we are registered under */
                       /**/
       int                 number;         /* number of this option for popt */
  -    struct {                             /* option data as read from configuration */
  +    union {                             /* option data as read from configuration */
           int f;                          /* OPT_FLAG */
  -        void *foo1, *foo2, *foo3, *foo4, *foo5, *foo6, *foo7, *foo8, *foo9; 
           char *s;                        /* OPT_SINGLE */
  -        void *bar1, *bar2, *bar3, *bar4, *bar5, *bar6, *bar7, *bar8, *bar9; 
           char **m;                       /* OPT_MULTI */
       } data;
       int ndata;

From ossp-cvs-owner@ossp.org  Wed Jan 30 17:43:01 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2B570764D8; Wed, 30 Jan 2002 17:43:01 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa acconfig.h aclocal.m4 configure.ac sa.c sa.h s...
Message-Id: <20020130164301.2B570764D8@mail.ossp.org>
Date: Wed, 30 Jan 2002 17:43:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   30-Jan-2002 17:43:01
  Branch: HEAD                             Handle: 2002013016430000

  Modified files:
    ossp-pkg/sa             acconfig.h aclocal.m4 configure.ac sa.c sa.h
                            sa_test.c

  Log:
    add optional OSSP ex based exception handling support

  Summary:
    Revision    Changes     Path
    1.4         +4  -0      ossp-pkg/sa/acconfig.h
    1.4         +112 -0     ossp-pkg/sa/aclocal.m4
    1.8         +2  -0      ossp-pkg/sa/configure.ac
    1.55        +140 -127   ossp-pkg/sa/sa.c
    1.29        +3  -0      ossp-pkg/sa/sa.h
    1.14        +33 -0      ossp-pkg/sa/sa_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/acconfig.h
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 acconfig.h
  --- ossp-pkg/sa/acconfig.h	24 Oct 2001 13:34:27 -0000	1.3
  +++ ossp-pkg/sa/acconfig.h	30 Jan 2002 16:43:00 -0000	1.4
  @@ -4,3 +4,7 @@
   
   /* whether ssize_t exists */
   #undef HAVE_SSIZE_T
  +
  +/* whether to use OSSP ex */
  +#undef WITH_EX
  +
  Index: ossp-pkg/sa/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 aclocal.m4
  --- ossp-pkg/sa/aclocal.m4	2 Jan 2002 12:43:50 -0000	1.3
  +++ ossp-pkg/sa/aclocal.m4	30 Jan 2002 16:43:00 -0000	1.4
  @@ -115,3 +115,115 @@
   fi
   ])
   
  +dnl ##
  +dnl ##  Check for an external/extension library.
  +dnl ##  - is aware of <libname>-config style scripts
  +dnl ##  - searches under standard paths include, lib, etc.
  +dnl ##  - searches under subareas like .libs, etc.
  +dnl ##
  +dnl ##  configure.in:
  +dnl ##      AC_CHECK_EXTLIB(<realname>, <libname>, <func>, <header>,
  +dnl ##                      [<success-action> [, <fail-action>]])
  +dnl ##  Makefile.in:
  +dnl ##      CFLAGS  = @CFLAGS@
  +dnl ##      LDFLAGS = @LDFLAGS@
  +dnl ##      LIBS    = @LIBS@
  +dnl ##  shell:
  +dnl ##      $ ./configure --with-<libname>[=DIR]
  +dnl ##
  +
  +AC_DEFUN(AC_CHECK_EXTLIB,[dnl
  +AC_ARG_WITH($2, [dnl
  +[  --with-]m4_substr([$2[[=DIR]]                     ], 0, 19)[build with external $1 library (default=no)]], [dnl
  +    if test ".$with_$2" = .yes; then
  +        #   via config script in PATH
  +        $2_version=`($2-config --version) 2>/dev/null`
  +        if test ".$$2_version" != .; then
  +            CPPFLAGS="$CPPFLAGS `$2-config --cflags`"
  +            CFLAGS="$CFLAGS `$2-config --cflags`"
  +            LDFLAGS="$LDFLAGS `$2-config --ldflags`"
  +        fi
  +    else
  +        if test -d "$with_$2"; then
  +            found=0
  +            #   via config script
  +            for dir in $with_$2/bin $with_$2; do
  +                if test -f "$dir/$2-config" && test ! -f "$dir/$2-config.in"; then
  +                    $2_version=`($dir/$2-config --version) 2>/dev/null`
  +                    if test ".$$2_version" != .; then
  +                        CPPFLAGS="$CPPFLAGS `$dir/$2-config --cflags`"
  +                        CFLAGS="$CFLAGS `$dir/$2-config --cflags`"
  +                        LDFLAGS="$LDFLAGS `$dir/$2-config --ldflags`"
  +                        found=1
  +                        break
  +                    fi
  +                fi
  +            done
  +            #   in standard sub-areas
  +            if test ".$found" = .0; then
  +                for dir in $with_$2/include/$2 $with_$2/include $with_$2; do
  +                    if test -f "$dir/$4"; then
  +                        CPPFLAGS="$CPPFLAGS -I$dir"
  +                        CFLAGS="$CFLAGS -I$dir"
  +                        found=1
  +                        break
  +                    fi
  +                done
  +                for dir in $with_$2/lib/$2 $with_$2/lib $with_$2; do
  +                    if test -f "$dir/lib$2.la" && test -d "$dir/.libs"; then
  +                        LDFLAGS="$LDFLAGS -L$dir -L$dir/.libs"
  +                        found=1
  +                        break
  +                    elif test -f "$dir/lib$2.a" || test -f "$dir/lib$2.so"; then
  +                        LDFLAGS="$LDFLAGS -L$dir"
  +                        found=1
  +                        break
  +                    fi
  +                done
  +            fi
  +            #   in any sub-area
  +            if test ".$found" = .0; then
  +changequote(, )dnl
  +                for file in x `find $with_$2 -name "$4" -type f -print`; do
  +                    test .$file = .x && continue
  +                    dir=`echo $file | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;'`
  +                    CPPFLAGS="$CPPFLAGS -I$dir"
  +                    CFLAGS="$CFLAGS -I$dir"
  +                done
  +                for file in x `find $with_$2 -name "lib$2.[aso]" -type f -print`; do
  +                    test .$file = .x && continue
  +                    dir=`echo $file | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;'`
  +                    LDFLAGS="$LDFLAGS -L$dir"
  +                done
  +changequote([, ])dnl
  +            fi
  +        fi
  +    fi
  +    AC_HAVE_HEADERS($4)
  +    AC_CHECK_LIB($2, $3)
  +    with_$2=yes
  +    ac_var="ac_cv_header_`echo $4 | sed 'y%./+-%__p_%'`"
  +    eval "ac_val=\$$ac_var"
  +    if test ".$ac_val" != .yes; then
  +        with_$2=no
  +    fi
  +    if test ".$ac_cv_lib_$2_$3" != .yes; then
  +        with_$2=no
  +    fi
  +    if test ".$with_$2" = .no; then
  +        AC_ERROR([Unable to find $1 library])
  +    fi
  +    ], [dnl
  +if test ".$with_$2" = .; then
  +    with_$2=no
  +fi
  +    ])dnl
  +AC_MSG_CHECKING(whether to build against external $1 library)
  +if test ".$with_$2" = .yes; then
  +    ifelse([$5], , :, [$5])
  +else
  +    ifelse([$6], , :, [$6])
  +fi
  +AC_MSG_RESULT([$with_$2])
  +])dnl
  +
  Index: ossp-pkg/sa/configure.ac
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 configure.ac
  --- ossp-pkg/sa/configure.ac	31 Oct 2001 19:58:00 -0000	1.7
  +++ ossp-pkg/sa/configure.ac	30 Jan 2002 16:43:00 -0000	1.8
  @@ -47,6 +47,8 @@
   sinclude(sa.ac)
   SA_CHECK_ALL
   
  +AC_CHECK_EXTLIB([OSSP ex], ex, __ex_ctx, ex.h, [AC_DEFINE(WITH_EX)])
  +
   AC_CONFIG_HEADERS(config.h)
   AC_CONFIG_FILES(Makefile sa-config)
   AC_OUTPUT
  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.54 -r1.55 sa.c
  --- ossp-pkg/sa/sa.c	29 Jan 2002 12:48:28 -0000	1.54
  +++ ossp-pkg/sa/sa.c	30 Jan 2002 16:43:00 -0000	1.55
  @@ -53,6 +53,19 @@
   /* include own API header */
   #include "sa.h"
   
  +/* unique library identifier */
  +const char sa_id[] = "OSSP sa";
  +
  +/* support for OSSP ex based exception throwing */
  +#ifdef WITH_EX
  +#include "ex.h"
  +#define SA_RC(rv) \
  +    (  (rv) != SA_OK && (ex_catching && !ex_shielding) \
  +     ? (ex_throw(sa_id, NULL, (rv)), (rv)) : (rv) )
  +#else
  +#define SA_RC(rv) (rv)
  +#endif /* WITH_EX */
  +
   /* boolean values */
   #ifndef FALSE
   #define FALSE (0)
  @@ -400,11 +413,11 @@
   
       /* argument sanity check(s) */
       if (saap == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* allocate and initialize new address object */
       if ((saa = (sa_addr_t *)malloc(sizeof(sa_addr_t))) == NULL)
  -        return SA_ERR_MEM;
  +        return SA_RC(SA_ERR_MEM);
       saa->nFamily = 0;
       saa->saBuf   = NULL;
       saa->slBuf   = 0;
  @@ -420,7 +433,7 @@
   {
       /* argument sanity check(s) */
       if (saa == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* free address objects and sub-object(s) */
       if (saa->saBuf != NULL)
  @@ -458,7 +471,7 @@
   
       /* argument sanity check(s) */
       if (saa == NULL || uri == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* on-the-fly create or just take over URI */
       va_start(ap, uri);
  @@ -485,12 +498,12 @@
           /* fill-in socket address structure */
           n = strlen(cpPath);
           if (n == 0)
  -            return SA_ERR_ARG;
  +            return SA_RC(SA_ERR_ARG);
           if ((n+1) > sizeof(un.sun_path))
  -            return SA_ERR_MEM;
  +            return SA_RC(SA_ERR_MEM);
           if (cpPath[0] != '/') {
               if (getcwd(un.sun_path, sizeof(un.sun_path)-(n+1)) == NULL)
  -                return SA_ERR_MEM;
  +                return SA_RC(SA_ERR_MEM);
               cp = un.sun_path + strlen(un.sun_path);
           }
           else
  @@ -510,22 +523,22 @@
           if (cpHost[0] == '[') {
               /* IPv6 address (see RFC2732) */
   #ifndef AF_INET6
  -            return SA_ERR_IMP;
  +            return SA_RC(SA_ERR_IMP);
   #else
               bIPv6 = TRUE;
               cpHost++;
               if ((cp = strchr(cpHost, ']')) == NULL)
  -                return SA_ERR_ARG;
  +                return SA_RC(SA_ERR_ARG);
               *cp++ = '\0';
               if (*cp != ':')
  -                return SA_ERR_ARG;
  +                return SA_RC(SA_ERR_ARG);
               cp++;
   #endif
           }
           else {
               /* IPv4 address or hostname */
               if ((cp = strrchr(cpHost, ':')) == NULL)
  -                return SA_ERR_ARG;
  +                return SA_RC(SA_ERR_ARG);
               *cp++ = '\0';
           }
           cpPort = cp;
  @@ -548,7 +561,7 @@
               nPort = (unsigned int)atoi(cpPort);
           else {
               if ((se = getservbyname(cpPort, cpProto)) == NULL)
  -                return SA_ERR_SYS;
  +                return SA_RC(SA_ERR_SYS);
               nPort = ntohs(se->s_port);
           }
   
  @@ -598,19 +611,19 @@
               }
   #endif
               else
  -                return SA_ERR_ARG;
  +                return SA_RC(SA_ERR_ARG);
           }
           else
  -            return SA_ERR_ARG;
  +            return SA_RC(SA_ERR_ARG);
       }
       else
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* fill-in result address structure */
       if (saa->saBuf != NULL)
           free(saa->saBuf);
       if ((saa->saBuf = (struct sockaddr *)malloc(sl)) == NULL)
  -        return SA_ERR_MEM;
  +        return SA_RC(SA_ERR_MEM);
       memcpy(saa->saBuf, sa, sl);
       saa->slBuf = sl;
       saa->nFamily = sf;
  @@ -623,7 +636,7 @@
   {
       /* argument sanity check(s) */
       if (saa == NULL || sabuf == NULL || salen == 0)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* make sure we import only supported addresses */
       if (!(   sabuf->sa_family == AF_LOCAL
  @@ -632,13 +645,13 @@
             || sabuf->sa_family == AF_INET6
   #endif
            ))
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* create result address structure */
       if (saa->saBuf != NULL)
           free(saa->saBuf);
       if ((saa->saBuf = (struct sockaddr *)malloc(salen)) == NULL)
  -        return SA_ERR_MEM;
  +        return SA_RC(SA_ERR_MEM);
       memcpy(saa->saBuf, sabuf, salen);
       saa->slBuf = salen;
   
  @@ -662,7 +675,7 @@
   
       /* argument sanity check(s) */
       if (saa == NULL || uri == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* export object contents */
       if (saa->nFamily == AF_LOCAL) {
  @@ -693,7 +706,7 @@
       }
   #endif
       else
  -        return SA_ERR_INT;
  +        return SA_RC(SA_ERR_INT);
   
       /* pass result to caller */
       *uri = strdup(uribuf);
  @@ -706,11 +719,11 @@
   {
       /* argument sanity check(s) */
       if (saa == NULL || sabuf == NULL || salen == 0)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* export underlying address structure */
       if ((*sabuf = (struct sockaddr *)malloc(saa->slBuf)) == NULL)
  -        return SA_ERR_MEM;
  +        return SA_RC(SA_ERR_MEM);
       memmove(*sabuf, saa->saBuf, saa->slBuf);
       *salen = saa->slBuf;
   
  @@ -733,7 +746,7 @@
   
       /* argument sanity check(s) */
       if (saa1 == NULL || saa2 == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* short circuiting for wildcard matching */
       if (prefixlen == 0)
  @@ -749,12 +762,12 @@
           l2 = strlen(((struct sockaddr_un *)saa2->saBuf)->sun_path) * 8;
           if (prefixlen < 0) {
               if (l1 != l2)
  -                return SA_ERR_MTC;
  +                return SA_RC(SA_ERR_MTC);
               nBits = l1;
           }
           else {
               if (l1 < prefixlen || l2 < prefixlen)
  -                return SA_ERR_MTC;
  +                return SA_RC(SA_ERR_MTC);
               nBits = prefixlen;
           }
       }
  @@ -781,9 +794,9 @@
           }
           for (i = 0; i < 10; i++)
               if (ucp0[i] != 0x00)
  -                return SA_ERR_MTC;
  +                return SA_RC(SA_ERR_MTC);
           if (!(ucp0[10] == 0xFF && ucp0[11] == 0xFF))
  -            return SA_ERR_MTC;
  +            return SA_RC(SA_ERR_MTC);
           nBits = 32;
       }
   #endif
  @@ -804,11 +817,11 @@
   #endif
       }
       else
  -        return SA_ERR_INT;
  +        return SA_RC(SA_ERR_INT);
   
       /* make sure we do not compare than possible */
       if (prefixlen > (nBits+1))
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* support equal matching (= all bits plus optionally port) */
       bMatchPort = FALSE;
  @@ -824,20 +837,20 @@
       nBits  = (prefixlen % 8);
       if (nBytes > 0) {
           if (memcmp(ucp1, ucp2, nBytes) != 0)
  -            return SA_ERR_MTC;
  +            return SA_RC(SA_ERR_MTC);
       }
       if (nBits > 0) {
           uc1 = ucp1[nBytes];
           uc2 = ucp2[nBytes];
           mask = (0xFF << (8-nBits)) & 0xFF;
           if ((uc1 & mask) != (uc2 & mask))
  -            return SA_ERR_MTC;
  +            return SA_RC(SA_ERR_MTC);
       }
   
       /* optionally perform additional port matching */
       if (bMatchPort)
           if (np1 != np2)
  -            return SA_ERR_MTC;
  +            return SA_RC(SA_ERR_MTC);
   
       return SA_OK;
   }
  @@ -851,13 +864,13 @@
               if (setsockopt(sa->fdSocket, SOL_SOCKET, SO_RCVTIMEO,
                              &sa->tvTimeout[SA_TIMEOUT_READ],
                              sizeof(sa->tvTimeout[SA_TIMEOUT_READ])) < 0)
  -                return SA_ERR_SYS;
  +                return SA_RC(SA_ERR_SYS);
           }
           if (SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_WRITE])) {
               if (setsockopt(sa->fdSocket, SOL_SOCKET, SO_SNDTIMEO,
                              &sa->tvTimeout[SA_TIMEOUT_WRITE],
                              sizeof(sa->tvTimeout[SA_TIMEOUT_WRITE])) < 0)
  -                return SA_ERR_SYS;
  +                return SA_RC(SA_ERR_SYS);
           }
       }
   #endif
  @@ -875,11 +888,11 @@
   
       /* argument sanity check(s) */
       if (sa == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* only perform operation if socket still does not exist */
       if (sa->fdSocket != -1)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* determine socket type */
       if (sa->eType == SA_TYPE_STREAM)
  @@ -887,7 +900,7 @@
       else if (sa->eType == SA_TYPE_DATAGRAM)
           nType = SOCK_DGRAM;
       else
  -        return SA_ERR_INT;
  +        return SA_RC(SA_ERR_INT);
   
       /* determine socket protocol */
       if (nFamily == AF_LOCAL) 
  @@ -903,25 +916,25 @@
           else if (nType == SOCK_DGRAM)
               nProto = IPPROTO_UDP;
           else
  -            return SA_ERR_INT;
  +            return SA_RC(SA_ERR_INT);
   #else
           if (nType == SOCK_STREAM)
               pe = getprotobyname("tcp");
           else if (nType == SOCK_DGRAM)
               pe = getprotobyname("udp");
           else
  -            return SA_ERR_INT;
  +            return SA_RC(SA_ERR_INT);
           if (pe == NULL)
  -            return SA_ERR_SYS;
  +            return SA_RC(SA_ERR_SYS);
           nProto = pe->p_proto;
   #endif
       }
       else
  -        return SA_ERR_INT;
  +        return SA_RC(SA_ERR_INT);
   
       /* create the underlying socket */
       if ((sa->fdSocket = socket(nFamily, nType, nProto)) == -1)
  -        return SA_ERR_SYS;
  +        return SA_RC(SA_ERR_SYS);
   
       /* optionally set kernel timeouts */
       sa_socket_settimeouts(sa);
  @@ -934,11 +947,11 @@
   {
       /* argument sanity check(s) */
       if (sa == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* check context */
       if (sa->fdSocket == -1)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* close socket */
       close(sa->fdSocket);
  @@ -955,11 +968,11 @@
   
       /* argument sanity check(s) */
       if (sap == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* allocate and initialize socket object */
       if ((sa = (sa_t *)malloc(sizeof(sa_t))) == NULL)
  -        return SA_ERR_MEM;
  +        return SA_RC(SA_ERR_MEM);
   
       /* init object attributes */
       sa->eType          = SA_TYPE_STREAM;
  @@ -997,7 +1010,7 @@
   {
       /* argument sanity check(s) */
       if (sa == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* kill underlying socket */
       sa_socket_kill(sa);
  @@ -1017,9 +1030,9 @@
   {
       /* argument sanity check(s) */
       if (sa == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
       if (!(type == SA_TYPE_STREAM || type == SA_TYPE_DATAGRAM))
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* kill underlying socket if type changes */
       if (sa->eType != type)
  @@ -1038,7 +1051,7 @@
   
       /* argument sanity check(s) */
       if (sa == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       if (id == SA_TIMEOUT_ALL) {
           for (i = 0; i < (sizeof(sa->tvTimeout)/sizeof(sa->tvTimeout[0])); i++) {
  @@ -1064,19 +1077,19 @@
   
       /* argument sanity check(s) */
       if (sa == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       if (id == SA_BUFFER_READ) {
           /* configure read/incoming buffer */
           if (sa->nReadLen > size)
  -            return SA_ERR_USE;
  +            return SA_RC(SA_ERR_USE);
           if (size > 0) {
               if (sa->cpReadBuf == NULL)
                   cp = (char *)malloc(size);
               else
                   cp = (char *)realloc(sa->cpReadBuf, size);
               if (cp == NULL)
  -                return SA_ERR_SYS;
  +                return SA_RC(SA_ERR_SYS);
               sa->cpReadBuf = cp;
               sa->nReadSize = size;
           }
  @@ -1090,14 +1103,14 @@
       else if (id == SA_BUFFER_WRITE) {
           /* configure write/outgoing buffer */
           if (sa->nWriteLen > size)
  -            return SA_ERR_USE;
  +            return SA_RC(SA_ERR_USE);
           if (size > 0) {
               if (sa->cpWriteBuf == NULL)
                   cp = (char *)malloc(size);
               else
                   cp = (char *)realloc(sa->cpWriteBuf, size);
               if (cp == NULL)
  -                return SA_ERR_SYS;
  +                return SA_RC(SA_ERR_SYS);
               sa->cpWriteBuf = cp;
               sa->nWriteSize = size;
           }
  @@ -1109,7 +1122,7 @@
           }
       }
       else
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       return SA_OK;
   }
  @@ -1122,7 +1135,7 @@
   
       /* argument sanity check(s) */
       if (sa == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* process option */
       rv = SA_OK;
  @@ -1209,7 +1222,7 @@
       }
       va_end(ap);
   
  -    return rv;
  +    return SA_RC(rv);
   }
   
   /* override system call */
  @@ -1219,7 +1232,7 @@
   
       /* argument sanity check(s) */
       if (sa == NULL || fptr == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* assign system call */
       rv = SA_OK;
  @@ -1234,7 +1247,7 @@
           default: rv = SA_ERR_ARG; 
       }
   
  -    return rv;
  +    return SA_RC(rv);
   }
   
   /* bind socket to a local address */
  @@ -1245,12 +1258,12 @@
   
       /* argument sanity check(s) */
       if (sa == NULL || laddr == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* lazy creation of underlying socket */
       if (sa->fdSocket == -1)
           if ((rv = sa_socket_init(sa, laddr->nFamily)) != SA_OK)
  -            return rv;
  +            return SA_RC(rv);
   
       /* remove a possibly existing old Unix Domain socket on filesystem */
       if (laddr->nFamily == AF_LOCAL) {
  @@ -1260,7 +1273,7 @@
   
       /* perform bind operation on underlying socket */
       if (bind(sa->fdSocket, laddr->saBuf, laddr->slBuf) == -1)
  -        return SA_ERR_SYS;
  +        return SA_RC(SA_ERR_SYS);
   
       return SA_OK;
   }
  @@ -1275,16 +1288,16 @@
   
       /* argument sanity check(s) */
       if (sa == NULL || raddr == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* connecting is only possible for stream communication */ 
       if (sa->eType != SA_TYPE_STREAM)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* lazy creation of underlying socket */
       if (sa->fdSocket == -1)
           if ((rv = sa_socket_init(sa, raddr->nFamily)) != SA_OK)
  -            return rv;
  +            return SA_RC(rv);
   
       rv = SA_OK;
       if (SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_CONNECT])) {
  @@ -1352,7 +1365,7 @@
               rv = SA_ERR_SYS;
           }
       }
  -    return rv;
  +    return SA_RC(rv);
   }
   
   /* listen on socket for connections */
  @@ -1360,19 +1373,19 @@
   {
       /* argument sanity check(s) */
       if (sa == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* listening is only possible for stream communication */ 
       if (sa->eType != SA_TYPE_STREAM)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* at least sa_bind() has to be already performed */
       if (sa->fdSocket == -1)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* perform listen operation on underlying socket */
       if (listen(sa->fdSocket, backlog) == -1)
  -        return SA_ERR_SYS;
  +        return SA_RC(SA_ERR_SYS);
   
       return SA_OK;
   }
  @@ -1396,15 +1409,15 @@
   
       /* argument sanity check(s) */
       if (sa == NULL || caddr == NULL || csa == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* accepting connections is only possible for stream communication */ 
       if (sa->eType != SA_TYPE_STREAM)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* at least sa_listen() has to be already performed */
       if (sa->fdSocket == -1)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* if timeout is enabled, perform a smart-blocking wait */
       if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_ACCEPT])) {
  @@ -1415,28 +1428,28 @@
                                &sa->tvTimeout[SA_TIMEOUT_ACCEPT]);
           } while (n == -1 && errno == EINTR);
           if (n == 0) 
  -            return SA_ERR_TMT;
  +            return SA_RC(SA_ERR_TMT);
           if (n <= 0)
  -            return SA_ERR_SYS;
  +            return SA_RC(SA_ERR_SYS);
       }
   
       /* perform accept operation on underlying socket */
       sa_len = sizeof(sa_buf);
       if ((s = SA_SC_CALL_3(sa, accept, sa->fdSocket, (struct sockaddr *)&sa_buf, &sa_len)) == -1)
  -        return SA_ERR_SYS;
  +        return SA_RC(SA_ERR_SYS);
   
       /* create result address object */
       if ((rv = sa_addr_create(caddr)) != SA_OK)
  -        return rv;
  +        return SA_RC(rv);
       if ((rv = sa_addr_s2a(*caddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK) {
           sa_addr_destroy(*caddr);
  -        return rv;
  +        return SA_RC(rv);
       }
   
       /* create result socket object */
       if ((rv = sa_create(csa)) != SA_OK) {
           sa_addr_destroy(*caddr);
  -        return rv;
  +        return SA_RC(rv);
       }
   
       /* fill-in child socket */
  @@ -1474,27 +1487,27 @@
   
       /* argument sanity check(s) */
       if (sa == NULL || raddr == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* peers exist only for stream communication */ 
       if (sa->eType != SA_TYPE_STREAM)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* at least sa_connect() or sa_accept() has to be already performed */
       if (sa->fdSocket == -1)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* determine remote address of underlying socket */
       sa_len = sizeof(sa_buf);
       if (getpeername(sa->fdSocket, (struct sockaddr *)&sa_buf, &sa_len) < 0)
  -        return SA_ERR_SYS;
  +        return SA_RC(SA_ERR_SYS);
   
       /* create result address object */
       if ((rv = sa_addr_create(raddr)) != SA_OK)
  -        return rv;
  +        return SA_RC(rv);
       if ((rv = sa_addr_s2a(*raddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK) {
           sa_addr_destroy(*raddr);
  -        return rv;
  +        return SA_RC(rv);
       }
   
       return SA_OK;
  @@ -1514,23 +1527,23 @@
   
       /* argument sanity check(s) */
       if (sa == NULL || laddr == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* at least sa_bind() has to be already performed */
       if (sa->fdSocket == -1)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* determine local address of underlying socket */
       sa_len = sizeof(sa_buf);
       if (getsockname(sa->fdSocket, (struct sockaddr *)&sa_buf, &sa_len) < 0)
  -        return SA_ERR_SYS;
  +        return SA_RC(SA_ERR_SYS);
   
       /* create result address object */
       if ((rv = sa_addr_create(laddr)) != SA_OK)
  -        return rv;
  +        return SA_RC(rv);
       if ((rv = sa_addr_s2a(*laddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK) {
           sa_addr_destroy(*laddr);
  -        return rv;
  +        return SA_RC(rv);
       }
   
       return SA_OK;
  @@ -1541,11 +1554,11 @@
   {
       /* argument sanity check(s) */
       if (sa == NULL || fd == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* if still no socket exists, say this explicitly */
       if (sa->fdSocket == -1)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* pass socket to caller */
       *fd = sa->fdSocket;
  @@ -1600,15 +1613,15 @@
   
       /* argument sanity check(s) */
       if (sa == NULL || cpBuf == NULL || nBufReq == 0)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* reading is only possible for stream communication */ 
       if (sa->eType != SA_TYPE_STREAM)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* at least a connection has to exist */
       if (sa->fdSocket == -1)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* perform read operation */
       rv = SA_OK;
  @@ -1684,7 +1697,7 @@
       if (nBufRes != NULL)
           *nBufRes = (size_t)res;
   
  -    return rv;
  +    return SA_RC(rv);
   }
   
   /* read data from socket until [CR]LF (convinience function) */
  @@ -1697,15 +1710,15 @@
   
       /* argument sanity check(s) */
       if (sa == NULL || cpBuf == NULL || nBufReq == 0)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* reading is only possible for stream communication */ 
       if (sa->eType != SA_TYPE_STREAM)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* at least a connection has to exist */
       if (sa->fdSocket == -1)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* we just perform a plain sa_read() per character, because if
          buffers are enabled, this is not as stupid as it looks at the first
  @@ -1729,7 +1742,7 @@
       if (nBufRes != NULL)
           *nBufRes = res;
   
  -    return rv;
  +    return SA_RC(rv);
   }
   
   /* internal raw write operation */
  @@ -1779,15 +1792,15 @@
   
       /* argument sanity check(s) */
       if (sa == NULL || cpBuf == NULL || nBufReq == 0)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* writing is only possible for stream communication */ 
       if (sa->eType != SA_TYPE_STREAM)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* at least a connection has to exist */
       if (sa->fdSocket == -1)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       rv = SA_OK;
       if (sa->nWriteSize == 0) {
  @@ -1832,7 +1845,7 @@
       if (nBufRes != NULL)
           *nBufRes = (size_t)res;
   
  -    return rv;
  +    return SA_RC(rv);
   }
   
   /* output callback function context for sa_writef() */
  @@ -1861,15 +1874,15 @@
   
       /* argument sanity check(s) */
       if (sa == NULL || cpFmt == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* writing is only possible for stream communication */ 
       if (sa->eType != SA_TYPE_STREAM)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* at least a connection has to exist */
       if (sa->fdSocket == -1)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* format string into temporary buffer */
       va_start(ap, cpFmt);
  @@ -1889,15 +1902,15 @@
   
       /* argument sanity check(s) */
       if (sa == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* flushing is only possible for stream communication */ 
       if (sa->eType != SA_TYPE_STREAM)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* at least a connection has to exist */
       if (sa->fdSocket == -1)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* try to flush buffer */
       rv = SA_OK;
  @@ -1915,7 +1928,7 @@
           }
           sa->nWriteLen = 0;
       }
  -    return rv;
  +    return SA_RC(rv);
   }
   
   /* shutdown a socket connection */
  @@ -1925,15 +1938,15 @@
   
       /* argument sanity check(s) */
       if (sa == NULL || flags == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* shutdown is only possible for stream communication */ 
       if (sa->eType != SA_TYPE_STREAM)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* at least a connection has to exist */
       if (sa->fdSocket == -1)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* determine flags for shutdown(2) */
       how = 0;
  @@ -1944,11 +1957,11 @@
       else if (strcmp(flags, "rw") == 0)
           how = SHUT_RDWR;
       else
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* perform shutdown operation on underlying socket */
       if (shutdown(sa->fdSocket, how) == -1)
  -        return SA_ERR_SYS;
  +        return SA_RC(SA_ERR_SYS);
   
       return SA_OK;
   }
  @@ -1969,15 +1982,15 @@
   
       /* argument sanity check(s) */
       if (sa == NULL || buf == NULL || buflen == 0 || raddr == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* receiving is only possible for datagram communication */ 
       if (sa->eType != SA_TYPE_DATAGRAM)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* at least a sa_bind() has to be performed */
       if (sa->fdSocket == -1)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* if timeout is enabled, perform explicit/smart blocking instead 
          of implicitly/hard blocking in the recvfrom(2) system call */
  @@ -1991,14 +2004,14 @@
           if (n == 0) 
               errno = ETIMEDOUT;
           if (n <= 0)
  -            return SA_ERR_SYS;
  +            return SA_RC(SA_ERR_SYS);
       }
   
       /* perform receive operation on underlying socket */
       sa_len = sizeof(sa_buf);
       if ((n = SA_SC_CALL_6(sa, recvfrom, sa->fdSocket, buf, buflen, 0, 
                             (struct sockaddr *)&sa_buf, &sa_len)) == -1)
  -        return SA_ERR_SYS;
  +        return SA_RC(SA_ERR_SYS);
   
       /* create result address object */
       if ((rv = sa_addr_create(raddr)) != SA_OK)
  @@ -2024,11 +2037,11 @@
   
       /* argument sanity check(s) */
       if (sa == NULL || buf == NULL || buflen == 0 || raddr == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* sending is only possible for datagram communication */ 
       if (sa->eType != SA_TYPE_DATAGRAM)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* lazy creation of underlying socket */
       if (sa->fdSocket == -1)
  @@ -2047,12 +2060,12 @@
           if (n == 0) 
               errno = ETIMEDOUT;
           if (n <= 0)
  -            return SA_ERR_SYS;
  +            return SA_RC(SA_ERR_SYS);
       }
   
       /* perform send operation on underlying socket */
       if ((n = SA_SC_CALL_6(sa, sendto, sa->fdSocket, buf, buflen, 0, raddr->saBuf, raddr->slBuf)) == -1)
  -        return SA_ERR_SYS;
  +        return SA_RC(SA_ERR_SYS);
   
       /* pass actual number of sent bytes to caller */
       if (bufdone != NULL)
  Index: ossp-pkg/sa/sa.h
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 sa.h
  --- ossp-pkg/sa/sa.h	2 Jan 2002 13:44:48 -0000	1.28
  +++ ossp-pkg/sa/sa.h	30 Jan 2002 16:43:00 -0000	1.29
  @@ -155,6 +155,9 @@
       SA_SYSCALL_SENDTO
   } sa_syscall_t;
   
  +/* unique library identifier */
  +extern const char sa_id[];
  +
   /* address object operations */
   sa_rc_t sa_addr_create  (sa_addr_t **saa);
   sa_rc_t sa_addr_destroy (sa_addr_t *saa);
  Index: ossp-pkg/sa/sa_test.c
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 sa_test.c
  --- ossp-pkg/sa/sa_test.c	2 Jan 2002 12:43:50 -0000	1.13
  +++ ossp-pkg/sa/sa_test.c	30 Jan 2002 16:43:00 -0000	1.14
  @@ -28,6 +28,10 @@
   **  sa_test.c: socket abstraction library test suite
   */
   
  +#ifdef HAVE_CONFIG_H
  +#include "config.h"
  +#endif
  +
   #include <stdio.h>
   #include <stdlib.h>
   #include <stdarg.h>
  @@ -145,6 +149,32 @@
       /* FIXME */
   }
   
  +/* test: exception handling */
  +#ifdef WITH_EX
  +#include "ex.h"
  +TS_TEST(test_sa_ex)
  +{
  +    sa_addr_t *saa;
  +    ex_t ex;
  +    int caught;
  +
  +    ts_test_check(TS_CTX, "exception handling");
  +    caught = 0;
  +    ex_try {
  +        sa_addr_create(&saa);
  +        sa_addr_u2a(saa, "inet:DUMMY");
  +        sa_addr_destroy(saa);
  +    }
  +    ex_catch (ex) {
  +        if ((sa_rc_t)ex.ex_value != SA_ERR_ARG)
  +            ts_test_fail(TS_CTX, "unexpected exception: %d\n", (sa_rc_t)ex.ex_value);
  +        caught = 1;
  +    }
  +    if (!caught)
  +        ts_test_fail(TS_CTX, "expected exception not caught\n");
  +}
  +#endif
  +
   int main(int argc, char *argv[])
   {
       ts_suite_t *ts;
  @@ -155,6 +185,9 @@
       ts_suite_test(ts, test_saa_match,   "socket address abstraction matching");
       ts_suite_test(ts, test_sa_stream,   "socket abstraction stream communication");
       ts_suite_test(ts, test_sa_datagram, "socket abstraction datagram communication");
  +#ifdef WITH_EX
  +    ts_suite_test(ts, test_sa_ex,       "exception handling");
  +#endif
       n = ts_suite_run(ts);
       ts_suite_free(ts);
       return n;

From ossp-cvs-owner@ossp.org  Wed Jan 30 18:29:16 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 846A3764D8; Wed, 30 Jan 2002 18:29:16 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc 00TODO Makefile.in configure.in devtool.conf r...
Message-Id: <20020130172916.846A3764D8@mail.ossp.org>
Date: Wed, 30 Jan 2002 18:29:16 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   30-Jan-2002 18:29:16
  Branch: HEAD                             Handle: 2002013017291500

  Modified files:
    ossp-pkg/rc             00TODO Makefile.in configure.in devtool.conf rc.c
                            rc_test.sh

  Log:
    Refresh current project state, add OSSP ex library, corrections.

  Summary:
    Revision    Changes     Path
    1.12        +30 -10     ossp-pkg/rc/00TODO
    1.2         +1  -1      ossp-pkg/rc/Makefile.in
    1.5         +14 -3      ossp-pkg/rc/configure.in
    1.4         +20 -0      ossp-pkg/rc/devtool.conf
    1.3         +5  -1      ossp-pkg/rc/rc.c
    1.3         +0  -18     ossp-pkg/rc/rc_test.sh
  ____________________________________________________________________________

  Index: ossp-pkg/rc/00TODO
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 00TODO
  --- ossp-pkg/rc/00TODO	30 Jan 2002 07:53:24 -0000	1.11
  +++ ossp-pkg/rc/00TODO	30 Jan 2002 17:29:15 -0000	1.12
  @@ -1,30 +1,50 @@
   00TODO: Tasks left to accomplish before rc is complete
   
  +Spec fehlt
  +  Security
  +    Off switch
  +  Command interpreter
  +    Beispiel
  +    Default
  +    Error
  +  Inconsistent
  +    rc.conf rc.config rc.env
  +    package command program section rcfile rc.file
  +    runcommand run command (run-command?)
  +  Environment
  +    Genaue wie comline- und rc.conf Optionen
  +    Ausname drei schon stehen
  +
   Consider
     Make return code and error definitions unique to OSSP rc.
     Offer include directive in config file.
  -  Standardize rc.conf.
  -    Rename rc.conf to rc.config.
  -    New rc.conf specifies options like syslog.conf or resolv.conf does.
   
   Must do
  +  Strip local popt code, and move in OSSP popt library.
     Translate rc bourne shell script to ANSI C.
     Finish man page. Start latex or Docbook guide.
     If a variable is defined for which no default exists, warn user (Scholli.)
     Avoid a silent failure when giving non-existent run commands (Marcus.)
   
  -Possible problems
  -  Abstract syntax of rc.file identifiers
  -    Need to recognize language syntax, i.e. set, block von XML?
  -    Is a regex enough to describe a syntax or do we need more?
  -    Cases XML, M4, asn.1, ...
  -
   Automated environment
     Stock rc.func includes AddPath, DelPath, PermMask.
  -  Reccommended .bashrc includes rcEnter() and rcExit().
   
   Error handling
     Classic error, give 'restart' command in place of 'start' to stopped prog
  +
  +        /-------------------OSSP rc Inhalt------------------\
  +        | Manpage                                           |
  +        |   rc.1          Section 1 oder 8-Konflict?        |
  +        |   rc-sample.5   Vielleicht umnennen rc.usecases.5 |
  +        |   rc.conf.5     Beschreibung aber kein Beispiel   |
  +        |                                                   |
  +        | Geliefert                                         |
  +        |   rc.env        Leer                              |
  +        |   rc.conf       Ausgekommentet Beispiel           |
  +        |                                                   |
  +        | Beispiele                                         |
  +        |   rc.example    Soll rc.fooboar umgenannt werden  |
  +        \---------------------------------------------------/
   
   Pseudocode
                   ***********************************
  Index: ossp-pkg/rc/Makefile.in
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 Makefile.in
  --- ossp-pkg/rc/Makefile.in	24 Jan 2002 17:47:47 -0000	1.1
  +++ ossp-pkg/rc/Makefile.in	30 Jan 2002 17:29:15 -0000	1.2
  @@ -60,7 +60,7 @@
   PROG_OBJS       = rc.o
   TST_OBJS        = rc_test.o
   
  -SUBDIRS         = @SUBDIR_VAR@ @SUBDIR_STR@
  +SUBDIRS         = @SUBDIR_EX@ @SUBDIR_VAR@ @SUBDIR_STR@
   
   all:            $(SUBDIRS) $(TARGET)
   
  Index: ossp-pkg/rc/configure.in
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 configure.in
  --- ossp-pkg/rc/configure.in	25 Jan 2002 16:02:42 -0000	1.4
  +++ ossp-pkg/rc/configure.in	30 Jan 2002 17:29:15 -0000	1.5
  @@ -68,7 +68,18 @@
                   dmalloc, dmalloc_debug, dmalloc.h,
                   AC_DEFINE(DMALLOC))
   
  -dnl Check for OSSP Str library
  +dnl Check for OSSP ex library
  +AC_CHECK_EXTLIB([OSSP ex],
  +                ex, __ex_ctx, ex.h,
  +                [SUBDIR_EX=""],
  +                [SUBDIR_EX="lib_ex"
  +                 CPPFLAGS="$CPPFLAGS -Ilib_ex"
  +                 CFLAGS="$CFLAGS -Ilib_ex"
  +                 LDFLAGS="$LDFLAGS -Llib_ex/.libs"
  +                 LIBS_EXTRA="$LIBS_EXTRA -lex"])
  +AC_SUBST(SUBDIR_EX)
  +
  +dnl Check for OSSP str library
   AC_CHECK_EXTLIB([OSSP Str],
                   str, str_parse, str.h,
                   [SUBDIR_STR=""],
  @@ -79,7 +90,7 @@
                    LIBS_EXTRA="$LIBS_EXTRA -lstr"])
   AC_SUBST(SUBDIR_STR)
   
  -dnl Check for OSSP Var library
  +dnl Check for OSSP var library
   AC_CHECK_EXTLIB([OSSP Var],
                   var, var_expand, var.h,
                   [SUBDIR_VAR=""],
  @@ -94,7 +105,7 @@
   LIBS="$LIBS $LIBS_EXTRA"
   
   dnl Call other configure scripts
  -AC_CONFIG_SUBDIRS([$SUBDIR_STR $SUBDIR_VAR])
  +AC_CONFIG_SUBDIRS([@SUBDIR_EX@ $SUBDIR_STR $SUBDIR_VAR])
   
   dnl Make all the necessary Makefiles
   #AC_CONFIG_FILES(Makefile)
  Index: ossp-pkg/rc/devtool.conf
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.conf
  --- ossp-pkg/rc/devtool.conf	23 Jan 2002 16:51:54 -0000	1.3
  +++ ossp-pkg/rc/devtool.conf	30 Jan 2002 17:29:15 -0000	1.4
  @@ -7,10 +7,30 @@
       @autogen libtool  1.4.2 "1.4*"
       @autogen autoconf 2.52  "2.5.*"
   
  +    echo "===> lib_ex (devtool autogen)"
  +    (cd lib_ex && ./devtool autogen)
  +    echo "<=== lib_ex"
  +    echo "===> lib_str (devtool autogen)"
  +    (cd lib_str && ./devtool autogen)
  +    echo "<=== lib_str"
  +    echo "===> lib_var (devtool autogen)"
  +    (cd lib_var && ./devtool autogen)
  +    echo "<=== lib_var"
  +
   %autoclean
       @autoclean shtool
       @autoclean libtool
       @autoclean autoconf
  +
  +    echo "===> lib_ex (devtool autoclean)"
  +    (cd lib_ex && ./devtool autoclean)
  +    echo "<=== lib_ex"
  +    echo "===> lib_str (devtool autoclean)"
  +    (cd lib_str && ./devtool autoclean)
  +    echo "<=== lib_str"
  +    echo "===> lib_var (devtool autoclean)"
  +    (cd lib_var && ./devtool autoclean)
  +    echo "<=== lib_var"
   
   %configure
       ./configure \
  Index: ossp-pkg/rc/rc.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 rc.c
  --- ossp-pkg/rc/rc.c	8 Jan 2002 15:49:02 -0000	1.2
  +++ ossp-pkg/rc/rc.c	30 Jan 2002 17:29:15 -0000	1.3
  @@ -30,7 +30,11 @@
   #include <stdio.h>
   #include <unistd.h>
   #include <fcntl.h>
  -#include <rc.h>
  +
  +#include "rc.h"
  +#include "ex.h"     /* OSSP ex exception library */
  +#include "str.h"    /* OSSP str string library   */
  +#include "var.h"    /* OSSP var variable library */
   
   
   void usage(char *szProgname)
  Index: ossp-pkg/rc/rc_test.sh
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 rc_test.sh
  --- ossp-pkg/rc/rc_test.sh	29 Jan 2002 08:48:13 -0000	1.2
  +++ ossp-pkg/rc/rc_test.sh	30 Jan 2002 17:29:15 -0000	1.3
  @@ -50,21 +50,3 @@
   #
   #Procedure:
   #
  -#foreach sec in <section> [<section> ...] {
  -#    foreach dir in --dir=dir1:dir2:.. {
  -#        search for --rcfile where %s is <package>
  -#        parse rcfile into blocks according to --regex-section/etc.
  -#        remember common/<section> into list
  -#    }
  -#    // we now have an unsorted list of common/<section>
  -#    sort list of common/<section> according to their priority (see --regex-param)
  -#
  -#    // execution
  -#    forearch common/<section> in list {
  -#        prepend config section
  -#        prepend common section
  -#        expand references accordingf to --regex-reference
  -#        execute result as user/group (see --regex-param) with interpreter (see --regex-param)
  -#    }
  -#}
  -#

From ossp-cvs-owner@ossp.org  Wed Jan 30 19:46:01 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3A27E764D8; Wed, 30 Jan 2002 19:46:01 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val val_test.c
Message-Id: <20020130184601.3A27E764D8@mail.ossp.org>
Date: Wed, 30 Jan 2002 19:46:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   30-Jan-2002 19:46:01
  Branch: HEAD                             Handle: 2002013018460000

  Modified files:
    ossp-pkg/val            val_test.c

  Log:
    fix style

  Summary:
    Revision    Changes     Path
    1.5         +2  -3      ossp-pkg/val/val_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/val/val_test.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 val_test.c
  --- ossp-pkg/val/val_test.c	24 Jan 2002 15:29:17 -0000	1.4
  +++ ossp-pkg/val/val_test.c	30 Jan 2002 18:46:00 -0000	1.5
  @@ -34,8 +34,8 @@
   
   static void die(char *msg)
   {
  -        fprintf(stderr, "ERROR: %s\n", msg);
  -            exit(-1);
  +    fprintf(stderr, "ERROR: %s\n", msg);
  +    exit(-1);
   }
   
   static val_rc_t dumper(void *ctx, const char *name, int type, const char *desc, void *data)
  @@ -178,7 +178,6 @@
       /* comparison */
       if (testint != testintout)
           die("testint/testintout compare #3");
  -
   
       /* work with testintout2 */
       testintout--;

From ossp-cvs-owner@ossp.org  Wed Jan 30 19:55:24 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 84F33764D8; Wed, 30 Jan 2002 19:55:24 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val acconfig.h aclocal.m4 configure.ac val.c val....
Message-Id: <20020130185524.84F33764D8@mail.ossp.org>
Date: Wed, 30 Jan 2002 19:55:24 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   30-Jan-2002 19:55:24
  Branch: HEAD                             Handle: 2002013018552300

  Added files:
    ossp-pkg/val            acconfig.h
  Modified files:
    ossp-pkg/val            aclocal.m4 configure.ac val.c val.h

  Log:
    add optional OSSP ex based exception handling support

  Summary:
    Revision    Changes     Path
    1.1         +4  -0      ossp-pkg/val/acconfig.h
    1.4         +113 -0     ossp-pkg/val/aclocal.m4
    1.2         +2  -0      ossp-pkg/val/configure.ac
    1.9         +51 -38     ossp-pkg/val/val.c
    1.6         +3  -0      ossp-pkg/val/val.h
  ____________________________________________________________________________

  Index: ossp-pkg/val/acconfig.h
  ============================================================
  $ cvs update -p -r1.1 acconfig.h
  
  /* whether to use OSSP ex */
  #undef WITH_EX
  
  Index: ossp-pkg/val/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 aclocal.m4
  --- ossp-pkg/val/aclocal.m4	16 Jan 2002 14:09:18 -0000	1.3
  +++ ossp-pkg/val/aclocal.m4	30 Jan 2002 18:55:23 -0000	1.4
  @@ -115,3 +115,116 @@
   fi
   ])
   
  +dnl ##
  +dnl ##  Check for an external/extension library.
  +dnl ##  - is aware of <libname>-config style scripts
  +dnl ##  - searches under standard paths include, lib, etc.
  +dnl ##  - searches under subareas like .libs, etc.
  +dnl ##
  +dnl ##  configure.in:
  +dnl ##      AC_CHECK_EXTLIB(<realname>, <libname>, <func>, <header>,
  +dnl ##                      [<success-action> [, <fail-action>]])
  +dnl ##  Makefile.in:
  +dnl ##      CFLAGS  = @CFLAGS@
  +dnl ##      LDFLAGS = @LDFLAGS@
  +dnl ##      LIBS    = @LIBS@
  +dnl ##  shell:
  +dnl ##      $ ./configure --with-<libname>[=DIR]
  +dnl ##
  +
  +AC_DEFUN(AC_CHECK_EXTLIB,[dnl
  +AC_ARG_WITH($2, [dnl
  +[  --with-]m4_substr([$2[[=DIR]]                     ], 0, 19)[build with external $1 library (default=no)]], [dnl
  +    if test ".$with_$2" = .yes; then
  +        #   via config script in PATH
  +        $2_version=`($2-config --version) 2>/dev/null`
  +        if test ".$$2_version" != .; then
  +            CPPFLAGS="$CPPFLAGS `$2-config --cflags`"
  +            CFLAGS="$CFLAGS `$2-config --cflags`"
  +            LDFLAGS="$LDFLAGS `$2-config --ldflags`"
  +        fi
  +    else
  +        if test -d "$with_$2"; then
  +            found=0
  +            #   via config script
  +            for dir in $with_$2/bin $with_$2; do
  +                if test -f "$dir/$2-config" && test ! -f "$dir/$2-config.in"; then
  +                    $2_version=`($dir/$2-config --version) 2>/dev/null`
  +                    if test ".$$2_version" != .; then
  +                        CPPFLAGS="$CPPFLAGS `$dir/$2-config --cflags`"
  +                        CFLAGS="$CFLAGS `$dir/$2-config --cflags`"
  +                        LDFLAGS="$LDFLAGS `$dir/$2-config --ldflags`"
  +                        found=1
  +                        break
  +                    fi
  +                fi
  +            done
  +            #   in standard sub-areas
  +            if test ".$found" = .0; then
  +                for dir in $with_$2/include/$2 $with_$2/include $with_$2; do
  +                    if test -f "$dir/$4"; then
  +                        CPPFLAGS="$CPPFLAGS -I$dir"
  +                        CFLAGS="$CFLAGS -I$dir"
  +                        found=1
  +                        break
  +                    fi
  +                done
  +                for dir in $with_$2/lib/$2 $with_$2/lib $with_$2; do
  +                    if test -f "$dir/lib$2.la" && test -d "$dir/.libs"; then
  +                        LDFLAGS="$LDFLAGS -L$dir -L$dir/.libs"
  +                        found=1
  +                        break
  +                    elif test -f "$dir/lib$2.a" || test -f "$dir/lib$2.so"; then
  +                        LDFLAGS="$LDFLAGS -L$dir"
  +                        found=1
  +                        break
  +                    fi
  +                done
  +            fi
  +            #   in any sub-area
  +            if test ".$found" = .0; then
  +changequote(, )dnl
  +                for file in x `find $with_$2 -name "$4" -type f -print`; do
  +                    test .$file = .x && continue
  +                    dir=`echo $file | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;'`
  +                    CPPFLAGS="$CPPFLAGS -I$dir"
  +                    CFLAGS="$CFLAGS -I$dir"
  +                done
  +                for file in x `find $with_$2 -name "lib$2.[aso]" -type f -print`; do
  +                    test .$file = .x && continue
  +                    dir=`echo $file | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;'`
  +                    LDFLAGS="$LDFLAGS -L$dir"
  +                done
  +changequote([, ])dnl
  +            fi
  +        fi
  +    fi
  +    AC_HAVE_HEADERS($4)
  +    AC_CHECK_LIB($2, $3)
  +    with_$2=yes
  +    ac_var="ac_cv_header_`echo $4 | sed 'y%./+-%__p_%'`"
  +    eval "ac_val=\$$ac_var"
  +    if test ".$ac_val" != .yes; then
  +        with_$2=no
  +    fi
  +    if test ".$ac_cv_lib_$2_$3" != .yes; then
  +        with_$2=no
  +    fi
  +    if test ".$with_$2" = .no; then
  +        AC_ERROR([Unable to find $1 library])
  +    fi
  +    ], [dnl
  +if test ".$with_$2" = .; then
  +    with_$2=no
  +fi
  +    ])dnl
  +AC_MSG_CHECKING(whether to build against external $1 library)
  +if test ".$with_$2" = .yes; then
  +    ifelse([$5], , :, [$5])
  +else
  +    ifelse([$6], , :, [$6])
  +fi
  +AC_MSG_RESULT([$with_$2])
  +])dnl
  +
  +
  Index: ossp-pkg/val/configure.ac
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 configure.ac
  --- ossp-pkg/val/configure.ac	9 Jan 2002 10:44:28 -0000	1.1
  +++ ossp-pkg/val/configure.ac	30 Jan 2002 18:55:23 -0000	1.2
  @@ -44,6 +44,8 @@
   sinclude(libtool.m4)
   AC_PROG_LIBTOOL
   
  +AC_CHECK_EXTLIB([OSSP ex], ex, __ex_ctx, ex.h, [AC_DEFINE(WITH_EX)])
  +
   AC_CONFIG_HEADERS(config.h)
   AC_CONFIG_FILES(Makefile val-config)
   AC_OUTPUT
  Index: ossp-pkg/val/val.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 val.c
  --- ossp-pkg/val/val.c	24 Jan 2002 15:30:58 -0000	1.8
  +++ ossp-pkg/val/val.c	30 Jan 2002 18:55:23 -0000	1.9
  @@ -50,6 +50,19 @@
   #define TRUE  (!FALSE)
   #endif
   
  +/* unique library identifier */
  +const char val_id[] = "OSSP sa";
  +
  +/* support for OSSP ex based exception throwing */
  +#ifdef WITH_EX
  +#include "ex.h"
  +#define VAL_RC(rv) \
  +    (  (rv) != VAL_OK && (ex_catching && !ex_shielding) \
  +     ? (ex_throw(val_id, NULL, (rv)), (rv)) : (rv) )
  +#else
  +#define VAL_RC(rv) (rv)
  +#endif /* WITH_EX */
  +
   /*
   **  ____                            ____
   **  ____ LINEAR HASHING SUB-LIBRARY ____
  @@ -629,16 +642,16 @@
   
       /* argument consistency check */
       if (pval == NULL)
  -        return VAL_ERR_ARG;
  +        return VAL_RC(VAL_ERR_ARG);
   
       /* create top-level structure */
       if ((val = (val_t *)malloc(sizeof(val_t))) == NULL)
  -        return VAL_ERR_SYS;
  +        return VAL_RC(VAL_ERR_SYS);
   
       /* create hash table */
       if ((val->lh = lh_create()) == NULL) {
           free(val);
  -        return VAL_ERR_SYS;
  +        return VAL_RC(VAL_ERR_SYS);
       }
   
       /* pass result to caller */
  @@ -667,14 +680,14 @@
   {
       /* argument consistency check */
       if (val == NULL)
  -        return VAL_ERR_ARG;
  +        return VAL_RC(VAL_ERR_ARG);
   
       /* destroy all hash table elements */
       lh_apply(val->lh, val_destroy_cb, NULL);
   
       /* destroy hash table */
       if (!lh_destroy(val->lh))
  -        return VAL_ERR_SYS;
  +        return VAL_RC(VAL_ERR_SYS);
   
       /* destroy top-level structure */
       free(val);
  @@ -692,14 +705,14 @@
   
       /* argument consistency check */
       if (val == NULL || name == NULL || type == 0)
  -        return VAL_ERR_ARG;
  +        return VAL_RC(VAL_ERR_ARG);
   
       /* recursive step-down on structured name */
       if ((cp = strchr(name, '.')) != NULL) {
           if (!lh_lookup(val->lh, name, cp-name, (void **)&obj, NULL))
  -            return VAL_ERR_ARG;
  +            return VAL_RC(VAL_ERR_ARG);
           if (!(obj->type & VAL_TYPE_VAL))
  -            return VAL_ERR_USE;
  +            return VAL_RC(VAL_ERR_USE);
           child = *(val_t **)(val_storage(obj));
           return val_reg(child, cp+1, type, desc, storage);
       }
  @@ -720,7 +733,7 @@
   
       /* insert value into hash table */
       if (!lh_insert(val->lh, name, strlen(name), &newobj, sizeof(newobj), 1))
  -        return VAL_ERR_HSH;
  +        return VAL_RC(VAL_ERR_HSH);
   
       return VAL_OK;
   }
  @@ -733,21 +746,21 @@
   
       /* argument consistency check */
       if (val == NULL || name == NULL)
  -        return VAL_ERR_ARG;
  +        return VAL_RC(VAL_ERR_ARG);
   
       /* recursive step-down on structured name */
       if ((cp = strchr(name, '.')) != NULL) {
           if (!lh_lookup(val->lh, name, cp-name, (void **)&obj, NULL))
  -            return VAL_ERR_ARG;
  +            return VAL_RC(VAL_ERR_ARG);
           if (!(obj->type & VAL_TYPE_VAL))
  -            return VAL_ERR_USE;
  +            return VAL_RC(VAL_ERR_USE);
           child = *(val_t **)(val_storage(obj));
           return val_unreg(child, cp+1);
       }
   
       /* try to lookup object in hash table */
       if (!lh_lookup(val->lh, name, strlen(name), (void **)&obj, NULL))
  -        return VAL_ERR_ARG;
  +        return VAL_RC(VAL_ERR_ARG);
   
       /* destroy value object */
       if (obj->desc != NULL)
  @@ -755,7 +768,7 @@
   
       /* delete value from hash table */
       if (!lh_delete(val->lh, name, strlen(name)))
  -        return VAL_ERR_HSH;
  +        return VAL_RC(VAL_ERR_HSH);
   
       return VAL_OK;
   }
  @@ -770,21 +783,21 @@
   
       /* argument consistency check */
       if (val == NULL || name == NULL)
  -        return VAL_ERR_ARG;
  +        return VAL_RC(VAL_ERR_ARG);
   
       /* recursive step-down on structured name */
       if ((cp = strchr(name, '.')) != NULL) {
           if (!lh_lookup(val->lh, name, cp-name, (void **)&obj, NULL))
  -            return VAL_ERR_ARG;
  +            return VAL_RC(VAL_ERR_ARG);
           if (!(obj->type & VAL_TYPE_VAL))
  -            return VAL_ERR_USE;
  +            return VAL_RC(VAL_ERR_USE);
           child = *(val_t **)(val_storage(obj));
           return val_query(child, cp+1, ptype, pdesc, pstorage);
       }
   
       /* try to lookup object in hash table */
       if (!lh_lookup(val->lh, name, strlen(name), (void **)&obj, NULL))
  -        return VAL_ERR_ARG;
  +        return VAL_RC(VAL_ERR_ARG);
   
       /* pass queried information to caller */
       if (ptype != NULL)
  @@ -807,25 +820,25 @@
   
       /* argument consistency check */
       if (val == NULL || name == NULL || ap == NULL)
  -        return VAL_ERR_ARG;
  +        return VAL_RC(VAL_ERR_ARG);
   
       /* recursive step-down on structured name */
       if ((cp = strchr(name, '.')) != NULL) {
           if (!lh_lookup(val->lh, name, cp-name, (void **)&obj, NULL))
  -            return VAL_ERR_ARG;
  +            return VAL_RC(VAL_ERR_ARG);
           if (!(obj->type & VAL_TYPE_VAL))
  -            return VAL_ERR_USE;
  +            return VAL_RC(VAL_ERR_USE);
           child = *(val_t **)(val_storage(obj));
           return val_vset(child, cp+1, ap);
       }
   
       /* try to lookup object in hash table */
       if (!lh_lookup(val->lh, name, strlen(name), (void **)&obj, NULL))
  -        return VAL_ERR_ARG;
  +        return VAL_RC(VAL_ERR_ARG);
   
       /* determine value storage */
       if ((storage = val_storage(obj)) == NULL)
  -        return VAL_ERR_INT;
  +        return VAL_RC(VAL_ERR_INT);
   
       /* copy value from variable argument into storage location */
       switch (obj->type & ~VAL_INLINE) {
  @@ -851,14 +864,14 @@
   
       /* argument consistency check */
       if (val == NULL || name == NULL)
  -        return VAL_ERR_ARG;
  +        return VAL_RC(VAL_ERR_ARG);
   
       /* just pass-through to va_list variant */
       va_start(ap, name);
       rc = val_vset(val, name, ap);
       va_end(ap);
   
  -    return rc;
  +    return VAL_RC(rc);
   }
   
   /* get a value (va_list variant) */
  @@ -871,25 +884,25 @@
   
       /* argument consistency check */
       if (val == NULL || name == NULL || ap == NULL)
  -        return VAL_ERR_ARG;
  +        return VAL_RC(VAL_ERR_ARG);
       
       /* recursive step-down on structured name */
       if ((cp = strchr(name, '.')) != NULL) {
           if (!lh_lookup(val->lh, name, cp-name, (void **)&obj, NULL))
  -            return VAL_ERR_ARG;
  +            return VAL_RC(VAL_ERR_ARG);
           if (!(obj->type & VAL_TYPE_VAL))
  -            return VAL_ERR_USE;
  +            return VAL_RC(VAL_ERR_USE);
           child = *(val_t **)(val_storage(obj));
           return val_vget(child, cp+1, ap);
       }
   
       /* try to lookup object in hash table */
       if (!lh_lookup(val->lh, name, strlen(name), (void **)&obj, NULL))
  -        return VAL_ERR_ARG;
  +        return VAL_RC(VAL_ERR_ARG);
   
       /* determine value storage */
       if ((storage = val_storage(obj)) == NULL)
  -        return VAL_ERR_INT;
  +        return VAL_RC(VAL_ERR_INT);
   
       /* copy value from storage location into variable argument pointer location */
       switch (obj->type & ~VAL_INLINE) {
  @@ -915,14 +928,14 @@
   
       /* argument consistency check */
       if (val == NULL || name == NULL)
  -        return VAL_ERR_ARG;
  +        return VAL_RC(VAL_ERR_ARG);
       
       /* just pass-through to va_list variant */
       va_start(ap, name);
       rc = val_vget(val, name, ap);
       va_end(ap);
   
  -    return rc;
  +    return VAL_RC(rc);
   }
   
   /* internal lh_apply() recursion callback context structure */
  @@ -991,15 +1004,15 @@
           val_ctx.ctx       = ctx;
           val_ctx.rc        = VAL_OK;
           if (!lh_apply(val->lh, val_apply_cb, &val_ctx))
  -            return VAL_ERR_SYS;
  +            return VAL_RC(VAL_ERR_SYS);
       }
       else if ((cp = strchr(name+prefixlen, '.')) != NULL) {
           /* CASE 2: still stepping-down for structured name
              prefix="foo.bar.", remainder="quux.baz" */
           if (!lh_lookup(val->lh, name+prefixlen, cp-(name+prefixlen), (void **)&obj, NULL))
  -            return VAL_ERR_ARG;
  +            return VAL_RC(VAL_ERR_ARG);
           if (!(obj->type & VAL_TYPE_VAL))
  -            return VAL_ERR_USE;
  +            return VAL_RC(VAL_ERR_USE);
           child = *(val_t **)(val_storage(obj));
           if (depth == 0)
               return VAL_OK;
  @@ -1008,10 +1021,10 @@
           /* CASE 3: reached last component of structured name
              prefix="foo.bar.quux.", remainder="baz" */
           if (!lh_lookup(val->lh, name+prefixlen, strlen(name+prefixlen), (void **)&obj, NULL))
  -            return VAL_ERR_ARG;
  +            return VAL_RC(VAL_ERR_ARG);
           if ((rc = cb(ctx, name, (obj->type & ~VAL_INLINE), 
                        obj->desc, val_storage(obj))) != VAL_OK)
  -            return rc;
  +            return VAL_RC(rc);
           if (obj->type & VAL_TYPE_VAL) {
               if (depth == 0)
                   return VAL_OK;
  @@ -1027,7 +1040,7 @@
   {
       /* argument consistency check */
       if (val == NULL || name == NULL || depth < 0 || cb == NULL)
  -        return VAL_ERR_ARG;
  +        return VAL_RC(VAL_ERR_ARG);
   
       /* just pass-through to internal API-extended variant */
       return val_apply_internal(val, name, 0, depth, cb, ctx);
  Index: ossp-pkg/val/val.h
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 val.h
  --- ossp-pkg/val/val.h	17 Jan 2002 12:19:09 -0000	1.5
  +++ ossp-pkg/val/val.h	30 Jan 2002 18:55:23 -0000	1.6
  @@ -66,6 +66,9 @@
   /* function type for use with val_apply() */
   typedef val_rc_t (*val_cb_t)(void *, const char *, int, const char *, void *);
   
  +/* unique library identifier */
  +extern const char val_id[];
  +
   /* set of API functions */
   val_rc_t val_create  (val_t **);
   val_rc_t val_destroy (val_t *);

From ossp-cvs-owner@ossp.org  Wed Jan 30 20:28:43 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5D1F1764D8; Wed, 30 Jan 2002 20:28:43 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 configure.ac
Message-Id: <20020130192843.5D1F1764D8@mail.ossp.org>
Date: Wed, 30 Jan 2002 20:28:43 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   30-Jan-2002 20:28:43
  Branch: HEAD                             Handle: 2002013019284200

  Modified files:
    ossp-pkg/l2             configure.ac

  Log:
    fix name

  Summary:
    Revision    Changes     Path
    1.19        +1  -1      ossp-pkg/l2/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/l2/configure.ac
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 configure.ac
  --- ossp-pkg/l2/configure.ac	3 Jan 2002 16:12:51 -0000	1.18
  +++ ossp-pkg/l2/configure.ac	30 Jan 2002 19:28:42 -0000	1.19
  @@ -32,7 +32,7 @@
   
   AC_INIT(README)
   AC_HEADLINE(dnl
  -L2, Logging Library, dnl
  +OSSP l2, Logging Library, dnl
   L2_VERSION, l2_version.c, dnl
   [Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)])

From ossp-cvs-owner@ossp.org  Wed Jan 30 20:31:33 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E5176764D8; Wed, 30 Jan 2002 20:31:32 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val val.c
Message-Id: <20020130193132.E5176764D8@mail.ossp.org>
Date: Wed, 30 Jan 2002 20:31:32 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   30-Jan-2002 20:31:32
  Branch: HEAD                             Handle: 2002013019313200

  Modified files:
    ossp-pkg/val            val.c

  Log:
    fix name

  Summary:
    Revision    Changes     Path
    1.10        +1  -1      ossp-pkg/val/val.c
  ____________________________________________________________________________

  Index: ossp-pkg/val/val.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 val.c
  --- ossp-pkg/val/val.c	30 Jan 2002 18:55:23 -0000	1.9
  +++ ossp-pkg/val/val.c	30 Jan 2002 19:31:32 -0000	1.10
  @@ -51,7 +51,7 @@
   #endif
   
   /* unique library identifier */
  -const char val_id[] = "OSSP sa";
  +const char val_id[] = "OSSP val";
   
   /* support for OSSP ex based exception throwing */
   #ifdef WITH_EX

From ossp-cvs-owner@ossp.org  Wed Jan 30 20:37:15 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 98AD4764D8; Wed, 30 Jan 2002 20:37:15 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var acconfig.h aclocal.m4 configure.ac var.c var....
Message-Id: <20020130193715.98AD4764D8@mail.ossp.org>
Date: Wed, 30 Jan 2002 20:37:15 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   30-Jan-2002 20:37:15
  Branch: HEAD                             Handle: 2002013019371400

  Added files:
    ossp-pkg/var            acconfig.h aclocal.m4
  Modified files:
    ossp-pkg/var            configure.ac var.c var.h

  Log:
    add optional OSSP ex based exception handling support

  Summary:
    Revision    Changes     Path
    1.1         +4  -0      ossp-pkg/var/acconfig.h
    1.1         +230 -0     ossp-pkg/var/aclocal.m4
    1.4         +4  -1      ossp-pkg/var/configure.ac
    1.60        +26 -8      ossp-pkg/var/var.c
    1.22        +4  -1      ossp-pkg/var/var.h
  ____________________________________________________________________________

  Index: ossp-pkg/var/acconfig.h
  ============================================================
  $ cvs update -p -r1.1 acconfig.h
  
  /* whether to use OSSP ex */
  #undef WITH_EX
  
  Index: ossp-pkg/var/aclocal.m4
  ============================================================
  $ cvs update -p -r1.1 aclocal.m4
  dnl ##
  dnl ##  val - OSSP Value Library
  dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  dnl ##
  dnl ##  This file is part of OSSP val, a Value library which
  dnl ##  can be found at http://www.ossp.org/pkg/val/.
  dnl ##
  dnl ##  Permission to use, copy, modify, and distribute this software for
  dnl ##  any purpose with or without fee is hereby granted, provided that
  dnl ##  the above copyright notice and this permission notice appear in all
  dnl ##  copies.
  dnl ##
  dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  dnl ##  SUCH DAMAGE.
  dnl ##
  dnl ##  aclocal.m4: GNU Autoconf local macro definitions
  dnl ##
  
  dnl ##
  dnl ##  Check whether compiler option works
  dnl ##
  dnl ##  configure.in:
  dnl ##    AC_COMPILER_OPTION(<name>, <display>, <option>,
  dnl ##                       <action-success>, <action-failure>)
  dnl ##
  
  AC_DEFUN(AC_COMPILER_OPTION,[dnl
  AC_MSG_CHECKING(whether compiler option(s) $2 work)
  AC_CACHE_VAL(ac_cv_compiler_option_$1,[
  SAVE_CFLAGS="$CFLAGS"
  CFLAGS="$CFLAGS $3"
  AC_TRY_COMPILE([],[], ac_cv_compiler_option_$1=yes, ac_cv_compiler_option_$1=no)
  CFLAGS="$SAVE_CFLAGS"
  ])dnl
  if test ".$ac_cv_compiler_option_$1" = .yes; then
      ifelse([$4], , :, [$4])
  else
      ifelse([$5], , :, [$5])
  fi
  AC_MSG_RESULT([$ac_cv_compiler_option_$1])
  ])dnl
  
  dnl ##
  dnl ##  Debugging Support
  dnl ##
  dnl ##  configure.in:
  dnl ##    AC_CHECK_DEBUGGING
  dnl ##
  
  AC_DEFUN(AC_CHECK_DEBUGGING,[dnl
  AC_ARG_ENABLE(debug,dnl
  [  --enable-debug          build for debugging (default=no)],
  [dnl
  if test ".$ac_cv_prog_gcc" = ".yes"; then
      case "$CFLAGS" in
          *-O* ) ;;
             * ) CFLAGS="$CFLAGS -O2" ;;
      esac
      case "$CFLAGS" in
          *-g* ) ;;
             * ) CFLAGS="$CFLAGS -g" ;;
      esac
      case "$CFLAGS" in
          *-pipe* ) ;;
                * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
      esac
      AC_COMPILER_OPTION(defdbg, -DDEBUG, -DDEBUG, CFLAGS="$CFLAGS -DDEBUG")
      AC_COMPILER_OPTION(ggdb3, -ggdb3, -ggdb3, CFLAGS="$CFLAGS -ggdb3")
      CFLAGS="$CFLAGS -pedantic"
      CFLAGS="$CFLAGS -Wall"
      WMORE="-Wshadow -Wpointer-arith -Wcast-align -Winline"
      WMORE="$WMORE -Wmissing-prototypes -Wmissing-declarations -Wnested-externs"
      AC_COMPILER_OPTION(wmore, -W<xxx>, $WMORE, CFLAGS="$CFLAGS $WMORE")
      AC_COMPILER_OPTION(wnolonglong, -Wno-long-long, -Wno-long-long, CFLAGS="$CFLAGS -Wno-long-long")
  else
      case "$CFLAGS" in
          *-g* ) ;;
             * ) CFLAGS="$CFLAGS -g" ;;
      esac
  fi
  msg="enabled"
  ],[
  if test ".$ac_cv_prog_gcc" = ".yes"; then
  case "$CFLAGS" in
      *-pipe* ) ;;
            * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
  esac
  fi
  case "$CFLAGS" in
      *-g* ) CFLAGS=`echo "$CFLAGS" |\
                     sed -e 's/ -g / /g' -e 's/ -g$//' -e 's/^-g //g' -e 's/^-g$//'` ;;
  esac
  case "$CXXFLAGS" in
      *-g* ) CXXFLAGS=`echo "$CXXFLAGS" |\
                       sed -e 's/ -g / /g' -e 's/ -g$//' -e 's/^-g //g' -e 's/^-g$//'` ;;
  esac
  msg=disabled
  ])dnl
  AC_MSG_CHECKING(for compilation debug mode)
  AC_MSG_RESULT([$msg])
  if test ".$msg" = .enabled; then
      enable_shared=no
  fi
  ])
  
  dnl ##
  dnl ##  Check for an external/extension library.
  dnl ##  - is aware of <libname>-config style scripts
  dnl ##  - searches under standard paths include, lib, etc.
  dnl ##  - searches under subareas like .libs, etc.
  dnl ##
  dnl ##  configure.in:
  dnl ##      AC_CHECK_EXTLIB(<realname>, <libname>, <func>, <header>,
  dnl ##                      [<success-action> [, <fail-action>]])
  dnl ##  Makefile.in:
  dnl ##      CFLAGS  = @CFLAGS@
  dnl ##      LDFLAGS = @LDFLAGS@
  dnl ##      LIBS    = @LIBS@
  dnl ##  shell:
  dnl ##      $ ./configure --with-<libname>[=DIR]
  dnl ##
  
  AC_DEFUN(AC_CHECK_EXTLIB,[dnl
  AC_ARG_WITH($2, [dnl
  [  --with-]m4_substr([$2[[=DIR]]                     ], 0, 19)[build with external $1 library (default=no)]], [dnl
      if test ".$with_$2" = .yes; then
          #   via config script in PATH
          $2_version=`($2-config --version) 2>/dev/null`
          if test ".$$2_version" != .; then
              CPPFLAGS="$CPPFLAGS `$2-config --cflags`"
              CFLAGS="$CFLAGS `$2-config --cflags`"
              LDFLAGS="$LDFLAGS `$2-config --ldflags`"
          fi
      else
          if test -d "$with_$2"; then
              found=0
              #   via config script
              for dir in $with_$2/bin $with_$2; do
                  if test -f "$dir/$2-config" && test ! -f "$dir/$2-config.in"; then
                      $2_version=`($dir/$2-config --version) 2>/dev/null`
                      if test ".$$2_version" != .; then
                          CPPFLAGS="$CPPFLAGS `$dir/$2-config --cflags`"
                          CFLAGS="$CFLAGS `$dir/$2-config --cflags`"
                          LDFLAGS="$LDFLAGS `$dir/$2-config --ldflags`"
                          found=1
                          break
                      fi
                  fi
              done
              #   in standard sub-areas
              if test ".$found" = .0; then
                  for dir in $with_$2/include/$2 $with_$2/include $with_$2; do
                      if test -f "$dir/$4"; then
                          CPPFLAGS="$CPPFLAGS -I$dir"
                          CFLAGS="$CFLAGS -I$dir"
                          found=1
                          break
                      fi
                  done
                  for dir in $with_$2/lib/$2 $with_$2/lib $with_$2; do
                      if test -f "$dir/lib$2.la" && test -d "$dir/.libs"; then
                          LDFLAGS="$LDFLAGS -L$dir -L$dir/.libs"
                          found=1
                          break
                      elif test -f "$dir/lib$2.a" || test -f "$dir/lib$2.so"; then
                          LDFLAGS="$LDFLAGS -L$dir"
                          found=1
                          break
                      fi
                  done
              fi
              #   in any sub-area
              if test ".$found" = .0; then
  changequote(, )dnl
                  for file in x `find $with_$2 -name "$4" -type f -print`; do
                      test .$file = .x && continue
                      dir=`echo $file | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;'`
                      CPPFLAGS="$CPPFLAGS -I$dir"
                      CFLAGS="$CFLAGS -I$dir"
                  done
                  for file in x `find $with_$2 -name "lib$2.[aso]" -type f -print`; do
                      test .$file = .x && continue
                      dir=`echo $file | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;'`
                      LDFLAGS="$LDFLAGS -L$dir"
                  done
  changequote([, ])dnl
              fi
          fi
      fi
      AC_HAVE_HEADERS($4)
      AC_CHECK_LIB($2, $3)
      with_$2=yes
      ac_var="ac_cv_header_`echo $4 | sed 'y%./+-%__p_%'`"
      eval "ac_val=\$$ac_var"
      if test ".$ac_val" != .yes; then
          with_$2=no
      fi
      if test ".$ac_cv_lib_$2_$3" != .yes; then
          with_$2=no
      fi
      if test ".$with_$2" = .no; then
          AC_ERROR([Unable to find $1 library])
      fi
      ], [dnl
  if test ".$with_$2" = .; then
      with_$2=no
  fi
      ])dnl
  AC_MSG_CHECKING(whether to build against external $1 library)
  if test ".$with_$2" = .yes; then
      ifelse([$5], , :, [$5])
  else
      ifelse([$6], , :, [$6])
  fi
  AC_MSG_RESULT([$with_$2])
  ])dnl
  
  
  Index: ossp-pkg/var/configure.ac
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 configure.ac
  --- ossp-pkg/var/configure.ac	2 Jan 2002 17:12:18 -0000	1.3
  +++ ossp-pkg/var/configure.ac	30 Jan 2002 19:37:14 -0000	1.4
  @@ -33,14 +33,17 @@
   
   AC_DIVERT_PUSH(NOTICE)
   V=`./shtool version -l txt -d long VERSION`
  -./shtool echo -e "Configuring %BOSSP Var%b (Variable Expansion), Version %B${V}%b"
  +./shtool echo -e "Configuring %BOSSP var%b (Variable Expansion Library), Version %B${V}%b"
   AC_DIVERT_POP()
   
   AC_SET_MAKE
   AC_PROG_CC
  +AC_CHECK_DEBUGGING
   
   sinclude(libtool.m4)
   AC_PROG_LIBTOOL
  +
  +AC_CHECK_EXTLIB([OSSP ex], ex, __ex_ctx, ex.h, [AC_DEFINE(WITH_EX)])
   
   AC_CONFIG_HEADERS(config.h)
   AC_CONFIG_FILES(Makefile var-config)
  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.59 -r1.60 var.c
  --- ossp-pkg/var/var.c	9 Jan 2002 11:27:07 -0000	1.59
  +++ ossp-pkg/var/var.c	30 Jan 2002 19:37:14 -0000	1.60
  @@ -27,6 +27,10 @@
   **  var.c: VAR library implementation.
   */
   
  +#ifdef HAVE_CONFIG_H
  +#include "config.h"
  +#endif
  +
   #include <ctype.h>
   #include <string.h>
   #include <stdio.h>
  @@ -39,6 +43,19 @@
   #endif
   #include "var.h"
   
  +/* unique library identifier */
  +const char var_id[] = "OSSP var";
  +        
  +/* support for OSSP ex based exception throwing */
  +#ifdef WITH_EX
  +#include "ex.h"
  +#define VAR_RC(rv) \
  +    (  (rv) != VAR_OK && (ex_catching && !ex_shielding) \
  +     ? (ex_throw(var_id, NULL, (rv)), (rv)) : (rv) )
  +#else
  +#define VAR_RC(rv) (rv)
  +#endif /* WITH_EX */
  +
   /* The default configuration for the parser. */
   
   const var_config_t var_config_default = {
  @@ -54,7 +71,7 @@
   
   /* The var_strerror() routine will map a var_rc_t into a text message. */
   
  -const char* var_strerror(var_rc_t rc)
  +const char *var_strerror(var_rc_t rc)
   {
       static char *var_errors[] = {
           "OK",                                                                   /* VAR_OK = 0 */
  @@ -377,7 +394,7 @@
       while (src < end) {
           if (*src == '\\') {
               if (++src == end)
  -                return VAR_ERR_INCOMPLETE_NAMED_CHARACTER;
  +                return VAR_RC(VAR_ERR_INCOMPLETE_NAMED_CHARACTER);
               switch (*src) {
               case '\\':
                   if (!unescape_all) {
  @@ -397,7 +414,7 @@
               case 'x':
                   ++src;
                   if ((rc = expand_hex(&src, &dst, end)) != VAR_OK)
  -                    return rc;
  +                    return VAR_RC(rc);
                   break;
               case '0':
               case '1':
  @@ -411,7 +428,7 @@
               case '9':
                   if (end - src >= 3 && isdigit((int)src[1]) && isdigit((int)src[2])) {
                       if ((rc = expand_octal(&src, &dst, end)) != 0)
  -                        return rc;
  +                        return VAR_RC(rc);
                       break;
                   }
               default:
  @@ -2038,7 +2055,7 @@
       if (input_buf == NULL || input_len == 0 ||
           result == NULL ||
           lookup == NULL)
  -        return VAR_ERR_INVALID_ARGUMENT;
  +        return VAR_RC(VAR_ERR_INVALID_ARGUMENT);
   
       /* Optionally use default configuration */
       if (config == NULL)
  @@ -2050,7 +2067,7 @@
   
       /* Expand the class description for valid variable names. */
       if ((rc = expand_character_class(config->namechars, nameclass)) != VAR_OK)
  -        return rc;
  +        return VAR_RC(rc);
   
       /* Make sure that the specials defined in the configuration do not
          appear in the character name class. */
  @@ -2058,7 +2075,7 @@
           nameclass[(int)config->startdelim] ||
           nameclass[(int)config->enddelim] ||
           nameclass[(int)config->escape])
  -        return VAR_ERR_INVALID_CONFIGURATION;
  +        return VAR_RC(VAR_ERR_INVALID_CONFIGURATION);
   
       /* Call the parser. */
       tokenbuf_init(&output);
  @@ -2089,5 +2106,6 @@
               *result_len = output.end - output.begin;
       }
   
  -    return rc;
  +    return VAR_RC(rc);
   }
  +
  Index: ossp-pkg/var/var.h
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 var.h
  --- ossp-pkg/var/var.h	2 Jan 2002 17:12:18 -0000	1.21
  +++ ossp-pkg/var/var.h	30 Jan 2002 19:37:14 -0000	1.22
  @@ -116,7 +116,10 @@
   
   /* Map an error code to a text message. */
   
  -const char* var_strerror(var_rc_t rc);
  +const char *var_strerror(var_rc_t rc);
  +
  +/* unique library identifier */
  +extern const char var_id[];
   
   #endif /* __VAR_H__ */
   

From ossp-cvs-owner@ossp.org  Wed Jan 30 23:55:27 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2607D764E3; Wed, 30 Jan 2002 23:55:27 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc 00TODO rc-sample.pod rc.example rc.pod
Message-Id: <20020130225527.2607D764E3@mail.ossp.org>
Date: Wed, 30 Jan 2002 23:55:27 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   30-Jan-2002 23:55:27
  Branch: HEAD                             Handle: 2002013022552600

  Modified files:
    ossp-pkg/rc             00TODO rc-sample.pod rc.example rc.pod

  Log:
    Add ASN.1 example, revise and correct manpages, update todo list.

  Summary:
    Revision    Changes     Path
    1.13        +11 -15     ossp-pkg/rc/00TODO
    1.6         +1  -1      ossp-pkg/rc/rc-sample.pod
    1.3         +71 -6      ossp-pkg/rc/rc.example
    1.24        +71 -50     ossp-pkg/rc/rc.pod
  ____________________________________________________________________________

  Index: ossp-pkg/rc/00TODO
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 00TODO
  --- ossp-pkg/rc/00TODO	30 Jan 2002 17:29:15 -0000	1.12
  +++ ossp-pkg/rc/00TODO	30 Jan 2002 22:55:26 -0000	1.13
  @@ -3,34 +3,30 @@
   Spec fehlt
     Security
       Off switch
  -  Command interpreter
  +  Command interpreter (probably goes in rc.usecase.pod)
       Beispiel
       Default
       Error
  -  Inconsistent
  -    rc.conf rc.config rc.env
  -    package command program section rcfile rc.file
  -    runcommand run command (run-command?)
  -  Environment
  -    Genaue wie comline- und rc.conf Optionen
  -    Ausname drei schon stehen
  +  Section arguments (rc sshd restart 2)
  +  Control flow
  +    Errors during execution
  +      Multiple sections given
  +      Wildcard 'all' given
  +      Both wildcard and multiple sections
  +    Avoid a silent failure when giving non-existent run commands (Marcus.)
  +    Use case - give 'restart' command in place of 'start' to stopped prog
  +      User assumes stop implicitly dropped if program not running
   
   Consider
     Make return code and error definitions unique to OSSP rc.
     Offer include directive in config file.
  +  Environment of manpage has redundant text.
   
   Must do
     Strip local popt code, and move in OSSP popt library.
     Translate rc bourne shell script to ANSI C.
     Finish man page. Start latex or Docbook guide.
     If a variable is defined for which no default exists, warn user (Scholli.)
  -  Avoid a silent failure when giving non-existent run commands (Marcus.)
  -
  -Automated environment
  -  Stock rc.func includes AddPath, DelPath, PermMask.
  -
  -Error handling
  -  Classic error, give 'restart' command in place of 'start' to stopped prog
   
           /-------------------OSSP rc Inhalt------------------\
           | Manpage                                           |
  Index: ossp-pkg/rc/rc-sample.pod
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 rc-sample.pod
  --- ossp-pkg/rc/rc-sample.pod	30 Jan 2002 08:00:04 -0000	1.5
  +++ ossp-pkg/rc/rc-sample.pod	30 Jan 2002 22:55:26 -0000	1.6
  @@ -124,7 +124,7 @@
   
   =back
   
  -With this setup, the following use cases are possible:
  +With this setup, the following transactions are possible:
   
    $ /cw/etc/rc --query "foo enabled: %{foo_enable}"
    foo enabled: yes
  Index: ossp-pkg/rc/rc.example
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 rc.example
  --- ossp-pkg/rc/rc.example	25 Jan 2002 16:04:41 -0000	1.2
  +++ ossp-pkg/rc/rc.example	30 Jan 2002 22:55:26 -0000	1.3
  @@ -1,9 +1,22 @@
   ##
   ##  rc.example
   ##
  +##  Examines different ways of writing run commands for a program.
  +##  If used in production, this file would be different. It would
  +##  have a name like 'rc.helloworld' and contain run commands for
  +##  the 'helloworld' program. It would also have only one notation.
  +##  A sample is repeated in this document using rc (native), XML,
  +##  and ASN.1 notation. The same rcfile semantics are repeated only
  +##  to show what is possible through the abstract syntax offered by
  +##  OSSP rc.
  +##
  +##  To learn what regular expressions must be used with the example
  +##  example syntaxes in this document, refer to the rc.conf file
  +##  included with the original OSSP rc distribution. It has the
  +##  corresponding regular expressions settings.
   
  -#  Generic run commands for example daemon. Using #
  -#  default symbols and conventional identifiers.  #
  +# Generic run commands for example daemon. Using native #
  +# rc default symbols and conventional identifiers.      #
   
   %confvars
       sftpd_enable="yes"
  @@ -29,8 +42,8 @@
       print STDERR "Sftpd status report";
       for ...
   
  -#  Generic run commands for example daemon. Using   #
  -#  custom symbols and unconventional identifiers.   #
  +# Generic run commands for example daemon. Using #
  +# custom symbols and unconventional identifiers. #
   
   !confvars
       sftpd_enable="yes"
  @@ -56,8 +69,8 @@
       print STDERR "Sftpd status report";
       for ...
   
  -#  Generic run commands for example daemon. Using #
  -#  abstract syntax and conventional identifiers.  #
  +# Generic run commands for example daemon. Using an #
  +# XML-like syntax and conventional identifiers.     #
   
   <config>
       <set name=sftpd_enable>"yes"</set>
  @@ -88,3 +101,55 @@
       print STDERR "Sftpd status report";
       for ...
   </status>
  +
  +# Generic run commands for example daemon. Using a #
  +# ASN.1-like syntax and conventional identifiers.  #
  +
  +config CONFIG
  +    BEGIN
  +        sftpd_enable STRING ::= "yes"
  +        sftpd_interpreter STRING ::= "/usr/bin/sh"
  +        sftpd_anonymous STRING ::= "yes"
  +        sftpd_flags STRING ::= ""
  +    END
  +
  +start SECTION ::= {
  +    priority INTEGER ::= 200
  +    user STRING ::= "root"
  +}
  +    BEGIN
  +        /usr/local/sbin/sftpd -c
  +    END
  +
  +stop SECTION ::= {
  +    priority INTEGER ::= 200
  +    user STRING ::= "root"
  +}
  +    BEGIN
  +        kill -TERM `cat /var/sftp/run/sftpd.pid` 
  +    END
  +
  +reload SECTION ::= {
  +    user STRING ::= "root"
  +}
  +    BEGIN
  +        kill -HUP `cat /var/sftp/run/sftpd.pid` 
  +    END
  +
  +restart SECTION ::= {
  +    user STRING ::= "root"
  +}
  +    BEGIN
  +        stop REFER      # reference to term section
  +        sleep 2
  +        start REFER     # reference to start section
  +    END
  +
  +restart SECTION ::= {
  +    priority INTEGER ::= 100
  +    interpreter STRING ::= "/usr/bin/perl"
  +}
  +    BEGIN
  +        print STDERR "Sftpd status report";
  +        for ...
  +    END
  Index: ossp-pkg/rc/rc.pod
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 rc.pod
  --- ossp-pkg/rc/rc.pod	29 Jan 2002 15:35:05 -0000	1.23
  +++ ossp-pkg/rc/rc.pod	30 Jan 2002 22:55:26 -0000	1.24
  @@ -1,5 +1,5 @@
   ##
  -##  rc.pod -- OSSP Run Command Processor (Manual Page)
  +##  rc.pod -- OSSP Runcommand Processor (Manual Page)
   ##  Copyright (c) 2000-2002 Cable & Wireless Deutschland GmbH
   ##  Copyright (c) 2000-2002 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>
  @@ -29,7 +29,7 @@
   
   =over 4
   
  -B<rc> - OSSP Run Command Processor
  +B<rc> - OSSP Runcommand Processor
   
   =back 4
   
  @@ -71,24 +71,23 @@
   
   =over 4
   
  -OSSP rc is a run command processor. It's primary function is to  scan
  -F<rcfile> script files for B<section>(s) and run the commands listed in the
  -section(s).
  +OSSP rc is a runcommand processor. Its primary function is to scan F<rcfile>
  +script files for B<section>(s) and run the commands listed in the section(s).
   
  -The run command processor can alternatively print the commands in human
  +The runcommand processor can alternatively print the commands in human
   readable format or reformat them for shell C<eval> input without executing
   them. The F<rcfile> files contain variables and the command processor has
   functionality to query their default, set and effective values.
   
   The structure of the F<rcfile>s is simple but the syntax is highly
  -configurable.  A F<rcfile> is divided into B<section>s and each of them is
  -identified by a label build from the B<section> name.  The distribution
  +configurable. A F<rcfile> is divided into B<section>s and each of them is
  +identified by a label build from the B<section> name. The distribution
   contains various examples.
   
   With a single call to rc usually one F<rcfile> may be processed at, although
  -many sections can be passed which are executed in given order.  The only
  -exception to this rule is when the reserved keyword `all' is used as F<rcfile>
  -meaning `all F<rcfile>s.'
  +many B<sections> can be passed which are executed in given order. The only
  +exception to this rule is when the reserved keyword 'all' is used as F<rcfile>
  +meaning 'all F<rcfile>s.'
   
   =back 4
   
  @@ -106,8 +105,8 @@
   =item B<-L>|B<--locate> I<file>[C<:>I<part>]
   
   locations to search for F<rcfile>s where I<file> can contain regex patterns to
  -filter files and the optional part is a regex to filter out parts of a file.
  -This option can be specified more than once.
  +filter files. The trailing part (after the ':') is a regex filter used to
  +ignore parts of a file. This option can be specified more than once.
   
   =item B<-V>|B<--version>
   
  @@ -115,8 +114,10 @@
   
   =item B<-c>|B<--conf> I<file>[C<:>I<file>[...]]
   
  -specify the location of the configuration file.  If omitted, the fallback is
  -to look for C<$OSSP_RC_CONF>, and "@l_prefix@/etc/rc.conf", in that order.
  +specify the location of the configuration file. If omitted, C<$OSSP_RC_CONF>
  +will be examined. If absent, F<@l_prefix@/etc/rc.conf> will be used. If no
  +F<rc.conf> exists at all, then only command line and environment specified
  +options will override the defaults built-in to OSSP rc.
   
   =item B<-e>|B<--eval>
   
  @@ -151,9 +152,9 @@
   
   =item B<-r>|B<--raw>
   
  -output text using no terminal control sequences.  The rc facility usually
  +output text using no terminal control sequences. The rc facility usually
   tries to improve output text for human readability using terminal control
  -sequences for color, bold and italic rendering.  The default is determines at
  +sequences for color, bold and italic rendering. The default is determines at
   runtime and is automagically disabled if stdout is detached from a terminal.
   
   =item B<-s>|B<--silent>
  @@ -162,7 +163,7 @@
   
   =item B<-t>|B<--tmp> I<dir>
   
  -specify the location of the temporary directory.  If omitted, the fallback is
  +specify the location of the temporary directory. If omitted, the fallback is
   to look for C<$TMPDIR>, C<$TMPDIR>, try using C<~/tmp> and C</tmp>, in that
   order.
   
  @@ -206,13 +207,20 @@
   
   =back 4
   
  +Every command line longoption corresponds to a keyword in the F<rc.conf> file.
  +When prefixed with 'OSSP_RC_' and its name in upper case, an option can be set
  +as an environment variable. First, options from the F<rc.conf> file are read.
  +Then, options from the environment are read. Last, options from the command
  +line are read. This allows for flexibility when wishing to set a standard set
  +of OSSP rc options, and override them conditionally.
  +
   =head1 ENVIRONMENT
   
   =over 4
   
  -Every command line longoption is also a keyword in the F<rc.conf> file and,
  -prefixed with "OSSP_RC_" and it's name in upper case, also available as an
  -environment variable.
  +The environment contains options just as the command line and F<rc.conf> file
  +does. An option's corresponding environment variable name must start with
  +'OSSP_RC_' and be all upper case.
   
   =back 4
   
  @@ -228,55 +236,68 @@
   
   =head1 EXAMPLES
   
  -=over 4
  -
  -Some short one line examples include the following. Note that a run command
  -consists of a single program name and one or more sections. The wildcard `all'
  -can be given in place of a program name to denote all programs with entries in
  -the rc registry F<$OSSP_RC_ROOT/rc.d>.
  +A runcommand consists of a single program name and one or more sections. The
  +wildcard 'all' can be given in place of a program name to denote all programs
  +with entries in the rc registry F<$OSSP_RC_ROOT/rc.d>. The following are
  +one-line examples of commonly used rc commands.
   
     /usr/local/bin/rc --info
  -  /etc/rc --query lmtp2nntp
  -  /mybin/rc sshd start
  -  /etc/rc lmtp2nntp start
  -  /sfw/etc/rc --conf /etc/rc.conf --debug smtpd stop
  +  /sbin/rc --query lmtp2nntp
  +  /cw/etc/rc --conf /etc/rc.conf --debug smtpd stop
  +  /mybin/rc sshd start LOG_USER  # calls logger(1) and passes LOG_USER
  +  /etc/rc lmtp2nntp start 2      # sleep for 2 seconds before returning
     /sfw/etc/rc --silent ntpd start sync stop start
  -  /usr/local/bin/rc httpd restart
  +  /usr/local/bin/rc httpd reload # sends a HUP signal
  +  /etc/rc.d/rc.rsyncd restart 4  # leave a 4 second pause between start and stop
  +  /cw/etc/rc.d/rc.ftpd start 32  # a maximum of 32 users can connect
   
  -To evaluate a run command for all programs with an identical section name, a
  +To evaluate a runcommand for all programs with an identical section name, a
   short expression can be written into a F<.profile> file. When the shell
  -initializes itself, the run commands will execute according to the C<eval>
  +initializes itself, the runcommands will execute according to the C<eval(1)>
   command. This is often seen when importing the environment of packages of an
  -B<OpenPKG> hierarchy.
  +B<OpenPKG> hierarchy, but is always a custom modification made by the user.
  +
  +  $ eval `@l_prefix@/etc/rc --eval all env`
   
   =head1 FILES
   
  -F<rc.conf>          - Master configuration file
  -F<rc.func>          - User defined functions library
  -F<rc.env>           - Postprocess variable declaration file
  -F<rc.foo>           - Run commands for "foo" application
  +=over 4
  +
  +F<rc.conf> - Master configuration file
  +F<rc.func> - User defined functions library
  +F<rc.env>  - Postprocess variable declaration file
  +F<rc.foo>  - Runcommands for 'foo' application
  +
  +=back 4
   
   =head1 SEE ALSO
   
  -OSSP rc integrates concepts taken from other run command architectures. For
  -more information, inspect the /etc/rc structures provided by FreeBSD, Solaris,
  -and Red Hat distributions.
  +=over 4
   
  -rc.conf(1), rc.func(1), rc.env(1), rcfile(1), and rc-sample(1).
  +OSSP rc integrates concepts taken from other runcommand architectures. For
  +more information, inspect the /etc/rc structures provided by the FreeBSD,
  +Solaris, and Red Hat distributions.
  +
  +rc-sample(5), rc.conf(1), and rcfile(1).
  +
  +=back 4
   
   =head1 AUTHORS
   
  -Ralf S. Engelschall
  +=over 4
   
  +Ralf S. Engelschall
   Michael Schloh von Bennewitz
   
  +=back 4
  +
   =head1 HISTORY
   
  -B<OSSP rc> is a replacement for the prototype run command facility used in the
  -OpenPKG project (http://www.openpkg.org/). The prototype was a slow and less
  -robust Bourne shell script. B<OSSP rc> is intended to faster, more robust, and
  -more flexible. This flexibility allows for wider range of use, however. B<OSSP
  -rc> can therefore be used in a variety of situations, and is no longer
  -exclusive to the OpenPKG project.
  +B<OSSP rc> is a drop-in replacement for the prototype runcommand facility used
  +in OpenPKG (http://www.openpkg.org/). The prototype was a slow and less robust
  +Bourne shell script. B<OSSP rc> is comparitively faster, more robust, and more
  +flexible. This flexibility allows for wider range of use, and B<OSSP rc> can
  +therefore be used in a variety of situations. It is no longer exclusive to the
  +OpenPKG project.
   
   =cut

From ossp-cvs-owner@ossp.org  Thu Jan 31 10:04:00 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B987E764FF; Thu, 31 Jan 2002 10:03:59 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp example.conf fixme.h lmtp2nntp_config.c...
Message-Id: <20020131090359.B987E764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 10:03:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   31-Jan-2002 10:03:59
  Branch: HEAD                             Handle: 2002013109035800

  Modified files:
    ossp-pkg/lmtp2nntp      example.conf fixme.h lmtp2nntp_config.c
                            lmtp2nntp_main.c

  Log:
    moved --acl option

  Summary:
    Revision    Changes     Path
    1.8         +3  -3      ossp-pkg/lmtp2nntp/example.conf
    1.3         +6  -0      ossp-pkg/lmtp2nntp/fixme.h
    1.19        +37 -51     ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.13        +34 -39     ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/example.conf
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 example.conf
  --- ossp-pkg/lmtp2nntp/example.conf	30 Jan 2002 16:41:02 -0000	1.7
  +++ ossp-pkg/lmtp2nntp/example.conf	31 Jan 2002 09:03:58 -0000	1.8
  @@ -12,9 +12,9 @@
   veryverbose                                     #see -V aka --veryverbose
                                                   #           obsolete since v1.2
                                                   #           remove the "buffer" channel from l2spec
  -acl             10/8                            #see -a aka --acl
  -acl             172.16/12
  -acl             192.168/16
  +acl             10.0.0.0/8                      #see -a aka --acl
  +acl             172.16.0.0/12
  +acl             192.168.0.0/16
   acl             127.0.0.1/32     
   bind            127.0.0.1:12345                 #see -b aka --bind, use IPv4:port
   #bind           "/tmp/uds:600"                  #    UNIX domain socket path:permissions 
  Index: ossp-pkg/lmtp2nntp/fixme.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 fixme.h
  --- ossp-pkg/lmtp2nntp/fixme.h	30 Jan 2002 16:41:02 -0000	1.2
  +++ ossp-pkg/lmtp2nntp/fixme.h	31 Jan 2002 09:03:58 -0000	1.3
  @@ -57,8 +57,14 @@
       int             option_killflag;
       uid_t           option_uid;
       int             option_daemon;
  +
  +    /*FIXME replaced by following
       int             option_aclc;
       struct acl      option_acl[MAXACLS];
  +    */
  +    int             nacl;
  +    struct acl     *pacl;
  +
       int             option_veryverbose;
       int             option_childsmax;
       int             active_childs;
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	30 Jan 2002 16:41:02 -0000	1.18
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	31 Jan 2002 09:03:58 -0000	1.19
  @@ -159,15 +159,14 @@
               || (ov->data.s == NULL)
                 ) throw(0,0,0);
           log1(ctx, TRACE, "--childsmax = \"%s\"", ov->data.s);
  +
           if ((ctx->option_childsmax = atoi(ov->data.s)) <= 0) {
  -            log1(ctx, ERROR, "number (%d) out of range for option --childsmax\n", ctx->option_childsmax);
  +            log1(ctx, ERROR, "option --childsmax, number (%d) out of range",
  +                 ctx->option_childsmax);
               throw(0,0,0);
           }
       }
       catch (ex) {
  -        log1(ctx, ERROR, "caught class  %s\n", ex.ex_class  == NULL ? "N/A" : (char *)ex.ex_class );
  -        log1(ctx, ERROR, "caught object %s\n", ex.ex_object == NULL ? "N/A" : (char *)ex.ex_object);
  -        log1(ctx, ERROR, "caught value  %s\n", ex.ex_value  == NULL ? "N/A" : (char *)ex.ex_value );
           rethrow;
       }
   
  @@ -178,6 +177,7 @@
               || (ov->data.f != 1)
                 ) throw(0,0,0);
           log1(ctx, TRACE, "--daemonize = %d", ov->data.f);
  +
           ctx->option_daemon = TRUE;
       }
       catch (ex)
  @@ -190,6 +190,7 @@
               || (ov->data.f != 1)
                 ) throw(0,0,0);
           log1(ctx, TRACE, "--kill = %d", ov->data.f);
  +
           ctx->option_killflag = TRUE;
       }
       catch (ex)
  @@ -202,6 +203,7 @@
               || (ov->data.s == NULL)
                 ) throw(0,0,0);
           log1(ctx, TRACE, "--pidfile = \"%s\"", ov->data.s);
  +
           ctx->option_pidfile = ov->data.s;
       }
       catch (ex)
  @@ -209,67 +211,51 @@
   
       /* --acl MULTI */
       try {
  -        int i;
           char *cp;
  -        struct acl *acl;
  +        int i;
   
           if (   (val_get(ctx->val, "option.acl", &ov) != VAL_OK)
               || ((ov->ndata >= 1) && (ov->data.m == NULL))
                 ) throw(0,0,0);
  +        log1(ctx, DEBUG, "ov->ndata = %d", ov->ndata);
           for (i = 0; i < ov->ndata; i++)
               log2(ctx, TRACE, "--acl[%d] = \"%s\"", i, (ov->data.m)[i]);
  -        log1(ctx, DEBUG, "ov->ndata = %d", ov->ndata);
  -        if ((acl = (struct acl *)malloc(ov->ndata * sizeof(struct acl))) == NULL) throw(0,0,0);
  +
  +        if ((ctx->pacl = (struct acl *)malloc(ov->ndata * sizeof(struct acl))) == NULL) throw(0,0,0);
           for (i = 0; i < ov->ndata; i++) {
               cp = (ov->data.m)[i];
               log2(ctx, DEBUG, "cp = (data.m)[%d] = \"%s\"", i, cp);
  -            //ctx->option_acl[ctx->option_aclc].acl = strdup(cp);
  +            if (cp[0] == '!') {
  +                ctx->pacl[i].acl = strdup(cp + 1);
  +                ctx->pacl[i].not = TRUE;
  +            }
  +            else {
  +                ctx->pacl[i].acl = strdup(cp);
  +                ctx->pacl[i].not = TRUE;
  +            }
  +            log2(ctx, DEBUG, "ctx->pacl[%d].not = %s", i, ctx->pacl[i].not == TRUE ? "TRUE" : "FALSE");
  +            log2(ctx, DEBUG, "ctx->pacl[%d].acl = %s", i, ctx->pacl[i].acl);
  +            if ((cp = strrchr(ctx->pacl[i].acl, '/')) != NULL)
  +                *cp++ = NUL;
  +            else
  +                cp = "-1";
  +            ctx->pacl[i].prefixlen = atoi(cp);
  +            log2(ctx, DEBUG, "ctx->pacl[%d].prefixlen = %d", i, ctx->pacl[i].prefixlen);
  +            if ((rc = sa_addr_create(&(ctx->pacl[i].saa))) != SA_OK) {
  +                log1(ctx, ERROR, "option --acl, create address (internal) failed with \"%s\"",
  +                     sa_error(rc));
  +                throw(0,0,0);
  +                }
  +            if ((rc = sa_addr_u2a(ctx->pacl[i].saa, "inet://%s:0", ctx->pacl[i].acl)) != SA_OK) {
  +                log2(ctx, ERROR, "option --acl, parsing address (%s) failed with \"%s\"",
  +                     ctx->pacl[i].acl, sa_error(rc));
  +                throw(0,0,0);
  +                }
           }
  -
  +        ctx->nacl = i;
       }
       catch (ex)
           rethrow;
  -#if 0
  -
  -                if (argz_create_sep(optarg, ',', &azACL, &asACL) != 0)
  -                    CU(ERR_EXECUTION);
  -                cp = NULL;
  -                while ((cp = argz_next(azACL, asACL, cp)) != NULL) {
  -                    if (ctx->option_aclc >= MAXACLS) {
  -                        fprintf(stderr, "%s:Error: Too many ACL (%d) using option -a\n", ctx->progname, ctx->option_aclc);
  -                        CU(ERR_EXECUTION);
  -                    }
  -
  -
  -
  -                    ctx->option_acl[ctx->option_aclc].acl = strdup(cp);
  -                    if (cp[0] == '!') {
  -                        ctx->option_acl[ctx->option_aclc].not = TRUE;
  -                        cpAddr = strdup(cp+1);
  -                    }
  -                    else {
  -                        cpAddr = strdup(cp);
  -                    }
  -                    if ((cpPrefixLen = strrchr(cpAddr, '/')) != NULL)
  -                        *cpPrefixLen++ = NUL;
  -                    else
  -                        cpPrefixLen = "-1";
  -                    ctx->option_acl[ctx->option_aclc].prefixlen = atoi(cpPrefixLen);
  -                    if ((rc = sa_addr_create(&ctx->option_acl[ctx->option_aclc].saa)) != SA_OK) {
  -                        fprintf(stderr, "%s:Error: Creating address failed for -a option (%d)\n", 
  -                                ctx->progname, rc);
  -                    }
  -                    if ((rc = sa_addr_u2a(ctx->option_acl[ctx->option_aclc].saa, "inet://%s:0", cpAddr)) != SA_OK) {
  -                        fprintf(stderr, "%s:Error: Parsing host address failed for \"%s:0\" (%d)\n", 
  -                                ctx->progname, cpAddr, rc);
  -                        CU(ERR_EXECUTION);
  -                    }
  -                    ctx->option_aclc++;
  -                    free(cpAddr);
  -                }
  -                free(azACL);
  -#endif
  -
   
   CUS:
       return;
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	30 Jan 2002 16:41:02 -0000	1.12
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	31 Jan 2002 09:03:58 -0000	1.13
  @@ -447,13 +447,8 @@
           ctx->ns[i].rc = LMTP_ERR_UNKNOWN;
           ctx->ns[i].l2 = NULL;
       }
  -    ctx->option_aclc = 0;
  -    for (i = 0; i < MAXACLS; i++) {
  -        ctx->option_acl[i].acl = NULL;
  -        ctx->option_acl[i].not = FALSE;
  -        ctx->option_acl[i].saa = NULL;
  -        ctx->option_acl[i].prefixlen = 0;
  -    }
  +    ctx->nacl = 0;
  +    ctx->pacl = NULL;
       ctx->azGroupargs = NULL;
       ctx->asGroupargs = 0;
       initsession(&ctx->session);
  @@ -824,51 +819,51 @@
   
       /* if no positive ACL exists (option -a) add a wildcard match-all for IPv4 and IPv6 */
       bOk = FALSE;
  -    for (i = 0; i < ctx->option_aclc; i++) {
  -        if (!ctx->option_acl[i].not) {
  +    for (i = 0; i < ctx->nacl; i++) {
  +        if (!ctx->pacl[i].not) {
               bOk = TRUE;
               break;
           }
       }
       if (!bOk) {
  -        if (ctx->option_aclc >= MAXACLS) {
  -            fprintf(stderr, "%s:Error: Too many ACL (%d) using option -a (no space for additional fake IPv4 ACL)\n", ctx->progname, ctx->option_aclc);
  +        if (ctx->nacl >= MAXACLS) {
  +            fprintf(stderr, "%s:Error: Too many ACL (%d) using option -a (no space for additional fake IPv4 ACL)\n", ctx->progname, ctx->nacl);
               CU(ERR_EXECUTION);
           }
  -        ctx->option_acl[ctx->option_aclc].acl = "0.0.0.0";
  -        ctx->option_acl[ctx->option_aclc].not = FALSE;
  -        ctx->option_acl[ctx->option_aclc].prefixlen = 0;
  -        if ((rc = sa_addr_create(&ctx->option_acl[ctx->option_aclc].saa)) != SA_OK) {
  +        ctx->pacl[ctx->nacl].acl = "0.0.0.0";
  +        ctx->pacl[ctx->nacl].not = FALSE;
  +        ctx->pacl[ctx->nacl].prefixlen = 0;
  +        if ((rc = sa_addr_create(&ctx->pacl[ctx->nacl].saa)) != SA_OK) {
               fprintf(stderr, "%s:Error: Creating fake address failed for -a option (%d)\n", 
                       ctx->progname, rc);
           }
  -        if ((rc = sa_addr_u2a(ctx->option_acl[ctx->option_aclc].saa, "inet://%s:0", ctx->option_acl[ctx->option_aclc].acl)) != SA_OK) {
  +        if ((rc = sa_addr_u2a(ctx->pacl[ctx->nacl].saa, "inet://%s:0", ctx->pacl[ctx->nacl].acl)) != SA_OK) {
               fprintf(stderr, "%s:Error: Parsing host address failed for \"%s:0\" (%s)\n", 
  -                    ctx->progname, ctx->option_acl[ctx->option_aclc].acl,
  +                    ctx->progname, ctx->pacl[ctx->nacl].acl,
                       sa_error(rc));
               CU(ERR_EXECUTION);
           }
  -        ctx->option_aclc++;
  +        ctx->nacl++;
       }
       if (!bOk) {
  -        if (ctx->option_aclc >= MAXACLS) {
  -            fprintf(stderr, "%s:Error: Too many ACL (%d) using option -a (no space for additional fake IPv6 ACL)\n", ctx->progname, ctx->option_aclc);
  +        if (ctx->nacl >= MAXACLS) {
  +            fprintf(stderr, "%s:Error: Too many ACL (%d) using option -a (no space for additional fake IPv6 ACL)\n", ctx->progname, ctx->nacl);
               CU(ERR_EXECUTION);
           }
  -        ctx->option_acl[ctx->option_aclc].acl = "[::]";
  -        ctx->option_acl[ctx->option_aclc].not = FALSE;
  -        ctx->option_acl[ctx->option_aclc].prefixlen = 0;
  -        if ((rc = sa_addr_create(&ctx->option_acl[ctx->option_aclc].saa)) != SA_OK) {
  +        ctx->pacl[ctx->nacl].acl = "[::]";
  +        ctx->pacl[ctx->nacl].not = FALSE;
  +        ctx->pacl[ctx->nacl].prefixlen = 0;
  +        if ((rc = sa_addr_create(&ctx->pacl[ctx->nacl].saa)) != SA_OK) {
               fprintf(stderr, "%s:Error: Creating fake address failed for -a option (%d)\n", 
                       ctx->progname, rc);
           }
  -        if ((rc = sa_addr_u2a(ctx->option_acl[ctx->option_aclc].saa, "inet://%s:0", ctx->option_acl[ctx->option_aclc].acl)) != SA_OK) {
  +        if ((rc = sa_addr_u2a(ctx->pacl[ctx->nacl].saa, "inet://%s:0", ctx->pacl[ctx->nacl].acl)) != SA_OK) {
               fprintf(stderr, "%s:Error: Parsing host address failed for \"%s:0\" (%s)\n", 
  -                    ctx->progname, ctx->option_acl[ctx->option_aclc].acl,
  +                    ctx->progname, ctx->pacl[ctx->nacl].acl,
                       sa_error(rc));
               CU(ERR_EXECUTION);
           }
  -        ctx->option_aclc++;
  +        ctx->nacl++;
       }
   
       if (getuid() != ctx->option_uid) {
  @@ -987,38 +982,38 @@
               /* Access Control List */
               bOk = FALSE;
               /* check positive matches */
  -            for (i = 0; i < ctx->option_aclc; i++) {
  +            for (i = 0; i < ctx->nacl; i++) {
                   char *cpA1;
                   char *cpA2;
  -                if (ctx->option_acl[i].not)
  +                if (ctx->pacl[i].not)
                       continue;
  -                sa_addr_a2u(ctx->option_acl[i].saa, &cpA1);
  +                sa_addr_a2u(ctx->pacl[i].saa, &cpA1);
                   sa_addr_a2u(ctx->saaIO, &cpA2);
  -                if (sa_addr_match(ctx->saaIO, ctx->option_acl[i].saa, ctx->option_acl[i].prefixlen) == SA_OK) {
  -                    log4(ctx, TRACE, "positive/inclusive ACL \"%s\" (%s/%d) matches %s: YES (stop comparison)", ctx->option_acl[i].acl, cpA1, ctx->option_acl[i].prefixlen, cpA2);
  +                if (sa_addr_match(ctx->saaIO, ctx->pacl[i].saa, ctx->pacl[i].prefixlen) == SA_OK) {
  +                    log4(ctx, TRACE, "positive/inclusive ACL \"%s\" (%s/%d) matches %s: YES (stop comparison)", ctx->pacl[i].acl, cpA1, ctx->pacl[i].prefixlen, cpA2);
                       bOk = TRUE;
                       break;
                   }
                   else
  -                    log4(ctx, TRACE, "positive/inclusive ACL \"%s\" (%s/%d) matches %s: NO", ctx->option_acl[i].acl, cpA1, ctx->option_acl[i].prefixlen, cpA2);
  +                    log4(ctx, TRACE, "positive/inclusive ACL \"%s\" (%s/%d) matches %s: NO", ctx->pacl[i].acl, cpA1, ctx->pacl[i].prefixlen, cpA2);
                   free(cpA1);
                   free(cpA2);
               }
               /* check negative matches */
  -            for (i = 0; i < ctx->option_aclc; i++) {
  +            for (i = 0; i < ctx->nacl; i++) {
                   char *cpA1;
                   char *cpA2;
  -                if (!ctx->option_acl[i].not)
  +                if (!ctx->pacl[i].not)
                       continue;
  -                sa_addr_a2u(ctx->option_acl[i].saa, &cpA1);
  +                sa_addr_a2u(ctx->pacl[i].saa, &cpA1);
                   sa_addr_a2u(ctx->saaIO, &cpA2);
  -                if (sa_addr_match(ctx->saaIO, ctx->option_acl[i].saa, ctx->option_acl[i].prefixlen) == SA_OK) {
  -                    log4(ctx, TRACE, "negative/exclusive ACL \"%s\" (not %s/%d) matches %s: YES (stop comparison)", ctx->option_acl[i].acl, cpA1, ctx->option_acl[i].prefixlen, cpA2);
  +                if (sa_addr_match(ctx->saaIO, ctx->pacl[i].saa, ctx->pacl[i].prefixlen) == SA_OK) {
  +                    log4(ctx, TRACE, "negative/exclusive ACL \"%s\" (not %s/%d) matches %s: YES (stop comparison)", ctx->pacl[i].acl, cpA1, ctx->pacl[i].prefixlen, cpA2);
                       bOk = FALSE;
                       break;
                   }
                   else {
  -                    log4(ctx, TRACE, "negative/exclusive ACL \"%s\" (not %s/%d) matches %s: NO", ctx->option_acl[i].acl, cpA1, ctx->option_acl[i].prefixlen, cpA2);
  +                    log4(ctx, TRACE, "negative/exclusive ACL \"%s\" (not %s/%d) matches %s: NO", ctx->pacl[i].acl, cpA1, ctx->pacl[i].prefixlen, cpA2);
                   }
               }
               if (bOk) {

From ossp-cvs-owner@ossp.org  Thu Jan 31 10:09:01 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6BCAF764FF; Thu, 31 Jan 2002 10:09:01 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/xds configure.ac
Message-Id: <20020131090901.6BCAF764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 10:09:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Jan-2002 10:09:01
  Branch: HEAD                             Handle: 2002013109090100

  Modified files:
    ossp-pkg/xds            configure.ac

  Log:
    fix naming

  Summary:
    Revision    Changes     Path
    1.24        +1  -1      ossp-pkg/xds/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/xds/configure.ac
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 configure.ac
  --- ossp-pkg/xds/configure.ac	2 Jan 2002 17:13:44 -0000	1.23
  +++ ossp-pkg/xds/configure.ac	31 Jan 2002 09:09:01 -0000	1.24
  @@ -32,7 +32,7 @@
   AC_INIT(xds.h.in)
   
   AC_HEADLINE(dnl
  -XDS, eXtensible Data Serialization, dnl
  +OSSP xds, eXtensible Data Serialization, dnl
   XDS_VERSION, xds_version.c, dnl
   [Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)])

From ossp-cvs-owner@ossp.org  Thu Jan 31 10:09:32 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 224F5764FF; Thu, 31 Jan 2002 10:09:32 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var configure.ac
Message-Id: <20020131090932.224F5764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 10:09:32 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Jan-2002 10:09:32
  Branch: HEAD                             Handle: 2002013109093100

  Modified files:
    ossp-pkg/var            configure.ac

  Log:
    fix naming

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-pkg/var/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/var/configure.ac
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 configure.ac
  --- ossp-pkg/var/configure.ac	30 Jan 2002 19:37:14 -0000	1.4
  +++ ossp-pkg/var/configure.ac	31 Jan 2002 09:09:31 -0000	1.5
  @@ -33,7 +33,7 @@
   
   AC_DIVERT_PUSH(NOTICE)
   V=`./shtool version -l txt -d long VERSION`
  -./shtool echo -e "Configuring %BOSSP var%b (Variable Expansion Library), Version %B${V}%b"
  +./shtool echo -e "Configuring %BOSSP var%b (Variable Expansion), Version %B${V}%b"
   AC_DIVERT_POP()
   
   AC_SET_MAKE

From ossp-cvs-owner@ossp.org  Thu Jan 31 10:09:43 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8A58B76522; Thu, 31 Jan 2002 10:09:43 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val configure.ac
Message-Id: <20020131090943.8A58B76522@mail.ossp.org>
Date: Thu, 31 Jan 2002 10:09:43 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Jan-2002 10:09:43
  Branch: HEAD                             Handle: 2002013109094300

  Modified files:
    ossp-pkg/val            configure.ac

  Log:
    fix naming

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/val/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/val/configure.ac
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 configure.ac
  --- ossp-pkg/val/configure.ac	30 Jan 2002 18:55:23 -0000	1.2
  +++ ossp-pkg/val/configure.ac	31 Jan 2002 09:09:43 -0000	1.3
  @@ -34,7 +34,7 @@
   
   AC_DIVERT_PUSH(NOTICE)
   V=`./shtool version -l txt -d long VERSION`
  -./shtool echo -e "Configuring %BOSSP val%b (Value Library), Version %B${V}%b"
  +./shtool echo -e "Configuring %BOSSP val%b (Value Access), Version %B${V}%b"
   AC_DIVERT_POP()
   
   AC_SET_MAKE

From ossp-cvs-owner@ossp.org  Thu Jan 31 10:09:56 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4162C76535; Thu, 31 Jan 2002 10:09:56 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa configure.ac
Message-Id: <20020131090956.4162C76535@mail.ossp.org>
Date: Thu, 31 Jan 2002 10:09:56 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Jan-2002 10:09:56
  Branch: HEAD                             Handle: 2002013109095500

  Modified files:
    ossp-pkg/sa             configure.ac

  Log:
    fix naming

  Summary:
    Revision    Changes     Path
    1.9         +1  -1      ossp-pkg/sa/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/sa/configure.ac
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 configure.ac
  --- ossp-pkg/sa/configure.ac	30 Jan 2002 16:43:00 -0000	1.8
  +++ ossp-pkg/sa/configure.ac	31 Jan 2002 09:09:55 -0000	1.9
  @@ -34,7 +34,7 @@
   
   AC_DIVERT_PUSH(NOTICE)
   V=`./shtool version -l txt -d long VERSION`
  -./shtool echo -e "Configuring %BOSSP SA%b (Socket Abstraction), Version %B${V}%b"
  +./shtool echo -e "Configuring %BOSSP sa%b (Socket Abstraction), Version %B${V}%b"
   AC_DIVERT_POP()
   
   AC_SET_MAKE

From ossp-cvs-owner@ossp.org  Thu Jan 31 10:10:06 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5D9E9764FF; Thu, 31 Jan 2002 10:10:06 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/path configure.ac
Message-Id: <20020131091006.5D9E9764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 10:10:06 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Jan-2002 10:10:06
  Branch: HEAD                             Handle: 2002013109100500

  Modified files:
    ossp-pkg/path           configure.ac

  Log:
    fix naming

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/path/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/path/configure.ac
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 configure.ac
  --- ossp-pkg/path/configure.ac	21 Jan 2002 13:32:35 -0000	1.1.1.1
  +++ ossp-pkg/path/configure.ac	31 Jan 2002 09:10:05 -0000	1.2
  @@ -34,7 +34,7 @@
   
   AC_DIVERT_PUSH(NOTICE)
   V=`./shtool version -l txt -d long VERSION`
  -./shtool echo -e "Configuring %BOSSP path%b (Filesystem Path Library), Version %B${V}%b"
  +./shtool echo -e "Configuring %BOSSP path%b (Filesystem Path Manipulations), Version %B${V}%b"
   AC_DIVERT_POP()
   
   AC_SET_MAKE

From ossp-cvs-owner@ossp.org  Thu Jan 31 10:32:33 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4277D764FF; Thu, 31 Jan 2002 10:32:33 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO
Message-Id: <20020131093233.4277D764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 10:32:33 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   31-Jan-2002 10:32:33
  Branch: HEAD                             Handle: 2002013109323200

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO

  Log:
    don't forget

  Summary:
    Revision    Changes     Path
    1.50        +6  -0      ossp-pkg/lmtp2nntp/00TODO
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.49 -r1.50 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	31 Dec 2001 11:30:17 -0000	1.49
  +++ ossp-pkg/lmtp2nntp/00TODO	31 Jan 2002 09:32:32 -0000	1.50
  @@ -1,4 +1,10 @@
   
  +  before release, check for
  +  - FIXME
  +  - foo
  +  - strdup
  +  --------------------------------------------------------------------------------
  +
     o split already too large lmtp2nntp_main.c into smaller chunks (3-4 files)
     o move already too complex and intermixed option parsing and processing into
       two parts (1: parsing, 2: processing)

From ossp-cvs-owner@ossp.org  Thu Jan 31 10:47:32 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8D91E764FF; Thu, 31 Jan 2002 10:47:32 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO
Message-Id: <20020131094732.8D91E764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 10:47:32 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   31-Jan-2002 10:47:32
  Branch: HEAD                             Handle: 2002013109473200

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO

  Log:
    don't forget

  Summary:
    Revision    Changes     Path
    1.51        +2  -0      ossp-pkg/lmtp2nntp/00TODO
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.50 -r1.51 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	31 Jan 2002 09:32:32 -0000	1.50
  +++ ossp-pkg/lmtp2nntp/00TODO	31 Jan 2002 09:47:32 -0000	1.51
  @@ -3,6 +3,8 @@
     - FIXME
     - foo
     - strdup
  +  - check printf/log for consistent look and feel
  +  - check printf/log for consistent usage of strerr()/XXX_error()
     --------------------------------------------------------------------------------
   
     o split already too large lmtp2nntp_main.c into smaller chunks (3-4 files)

From ossp-cvs-owner@ossp.org  Thu Jan 31 10:48:26 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 212DD764FF; Thu, 31 Jan 2002 10:48:26 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO
Message-Id: <20020131094826.212DD764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 10:48:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   31-Jan-2002 10:48:26
  Branch: HEAD                             Handle: 2002013109482500

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO

  Log:
    don't forget

  Summary:
    Revision    Changes     Path
    1.52        +1  -1      ossp-pkg/lmtp2nntp/00TODO
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.51 -r1.52 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	31 Jan 2002 09:47:32 -0000	1.51
  +++ ossp-pkg/lmtp2nntp/00TODO	31 Jan 2002 09:48:25 -0000	1.52
  @@ -3,7 +3,7 @@
     - FIXME
     - foo
     - strdup
  -  - check printf/log for consistent look and feel
  +  - check printf/log for consistent look'n'feel and uniqness
     - check printf/log for consistent usage of strerr()/XXX_error()
     --------------------------------------------------------------------------------
   

From ossp-cvs-owner@ossp.org  Thu Jan 31 11:11:43 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 86528764FF; Thu, 31 Jan 2002 11:11:43 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc 00TODO rc.pod
Message-Id: <20020131101143.86528764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 11:11:43 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   31-Jan-2002 11:11:43
  Branch: HEAD                             Handle: 2002013110114300

  Modified files:
    ossp-pkg/rc             00TODO rc.pod

  Log:
    Add text on section arguments and OSSP_RC_DEACT, improve examples, line up
    text, remove unneeded =over and =back tags. Prepare for description of control
    flow and command interpreter logic.

  Summary:
    Revision    Changes     Path
    1.14        +2  -3      ossp-pkg/rc/00TODO
    1.25        +29 -53     ossp-pkg/rc/rc.pod
  ____________________________________________________________________________

  Index: ossp-pkg/rc/00TODO
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 00TODO
  --- ossp-pkg/rc/00TODO	30 Jan 2002 22:55:26 -0000	1.13
  +++ ossp-pkg/rc/00TODO	31 Jan 2002 10:11:43 -0000	1.14
  @@ -1,13 +1,10 @@
   00TODO: Tasks left to accomplish before rc is complete
   
   Spec fehlt
  -  Security
  -    Off switch
     Command interpreter (probably goes in rc.usecase.pod)
       Beispiel
       Default
       Error
  -  Section arguments (rc sshd restart 2)
     Control flow
       Errors during execution
         Multiple sections given
  @@ -18,8 +15,10 @@
         User assumes stop implicitly dropped if program not running
   
   Consider
  +  Removing the OSSP_RC_DEACT deactivation feature (thl.)
     Make return code and error definitions unique to OSSP rc.
     Offer include directive in config file.
  +  Dynamic handling of command interpreter option.
     Environment of manpage has redundant text.
   
   Must do
  Index: ossp-pkg/rc/rc.pod
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 rc.pod
  --- ossp-pkg/rc/rc.pod	30 Jan 2002 22:55:26 -0000	1.24
  +++ ossp-pkg/rc/rc.pod	31 Jan 2002 10:11:43 -0000	1.25
  @@ -27,17 +27,11 @@
   
   =head1 NAME
   
  -=over 4
  -
   B<rc> - OSSP Runcommand Processor
   
  -=back 4
  -
   =head1 SYNOPSIS
   
  -=over 4
  -
  -@l_prefix@/etc/rc
  +B<rc>
   [B<-?>|B<--usage>]
   [B<-D>|B<--debug>] 
   [B<-L>|B<--locate> I<dir>[C<:>I<dir>[...]]]
  @@ -65,12 +59,8 @@
   I<rcfile>
   I<section>
   
  -=back 4
  -
   =head1 DESCRIPTION
   
  -=over 4
  -
   OSSP rc is a runcommand processor. Its primary function is to scan F<rcfile>
   script files for B<section>(s) and run the commands listed in the section(s).
   
  @@ -89,11 +79,8 @@
   exception to this rule is when the reserved keyword 'all' is used as F<rcfile>
   meaning 'all F<rcfile>s.'
   
  -=back 4
  -
   =head1 OPTIONS
   
  -=over 4
   =item B<-?>|B<--usage>
   
   print short usage summary, then exit.
  @@ -205,8 +192,6 @@
   
   name of the common section, defaults to %common.
   
  -=back 4
  -
   Every command line longoption corresponds to a keyword in the F<rc.conf> file.
   When prefixed with 'OSSP_RC_' and its name in upper case, an option can be set
   as an environment variable. First, options from the F<rc.conf> file are read.
  @@ -216,40 +201,42 @@
   
   =head1 ENVIRONMENT
   
  -=over 4
  -
   The environment contains options just as the command line and F<rc.conf> file
   does. An option's corresponding environment variable name must start with
  -'OSSP_RC_' and be all upper case.
  +'OSSP_RC_' and be all upper case. As a security measure, one environment
  +variable exists that is not found as an option elsewhere. This variable
  +deactivates B<OSSP rc>, and each subsequent usage will return success and
  +print a 'No commands run: OSSP_RC_DEACT set to yes' error message to the
  +standard output.
   
  -=back 4
  +B<OSSP_RC_DEACT> - Set to 'yes' or 'true' to totally deactivate B<OSSP rc>
   
   =head1 RETURN VALUE
   
  -=over 4
  -
   -1 Error in rc
    0 Success
    1 Error in command executed by rc
   
  -=back 4
  -
   =head1 EXAMPLES
   
   A runcommand consists of a single program name and one or more sections. The
   wildcard 'all' can be given in place of a program name to denote all programs
   with entries in the rc registry F<$OSSP_RC_ROOT/rc.d>. The following are
  -one-line examples of commonly used rc commands.
  +one-line examples of commonly used rc commands with no arguments.
   
  -  /usr/local/bin/rc --info
  -  /sbin/rc --query lmtp2nntp
  -  /cw/etc/rc --conf /etc/rc.conf --debug smtpd stop
  -  /mybin/rc sshd start LOG_USER  # calls logger(1) and passes LOG_USER
  -  /etc/rc lmtp2nntp start 2      # sleep for 2 seconds before returning
  -  /sfw/etc/rc --silent ntpd start sync stop start
  -  /usr/local/bin/rc httpd reload # sends a HUP signal
  -  /etc/rc.d/rc.rsyncd restart 4  # leave a 4 second pause between start and stop
  -  /cw/etc/rc.d/rc.ftpd start 32  # a maximum of 32 users can connect
  + /usr/local/bin/rc --info
  + /sbin/rc --query lmtp2nntp
  + /cw/etc/rc --conf /etc/rc.conf --debug smtpd stop
  + /sfw/etc/rc --silent ntpd start sync stop start
  + /usr/local/bin/rc httpd reload # sends a HUP signal
  +
  +Arguments may also be passed in to B<OSSP rc>, which will forward them to each
  +section as it is called.
  +
  + /mybin/rc sshd start LOG_USER  # calls logger(1) and passes LOG_USER
  + /etc/rc lmtp2nntp start 2      # sleep for 2 seconds before returning
  + /etc/rc.d/rc.rsyncd restart 4  # leave a 4 second pause between start and stop
  + /cw/etc/rc.d/rc.ftpd start 32  # a maximum of 32 users can connect
   
   To evaluate a runcommand for all programs with an identical section name, a
   short expression can be written into a F<.profile> file. When the shell
  @@ -257,39 +244,28 @@
   command. This is often seen when importing the environment of packages of an
   B<OpenPKG> hierarchy, but is always a custom modification made by the user.
   
  -  $ eval `@l_prefix@/etc/rc --eval all env`
  + $ eval `@l_prefix@/etc/rc --eval all env`
   
   =head1 FILES
   
  -=over 4
  -
  -F<rc.conf> - Master configuration file
  -F<rc.func> - User defined functions library
  -F<rc.env>  - Postprocess variable declaration file
  -F<rc.foo>  - Runcommands for 'foo' application
  -
  -=back 4
  + F<rc.conf> - Master configuration file
  + F<rc.func> - User defined functions library
  + F<rc.env>  - Postprocess variable declaration file
  + F<rc.foo>  - Runcommands for 'foo' application
   
   =head1 SEE ALSO
   
  -=over 4
  -
   OSSP rc integrates concepts taken from other runcommand architectures. For
   more information, inspect the /etc/rc structures provided by the FreeBSD,
   Solaris, and Red Hat distributions.
   
   rc-sample(5), rc.conf(1), and rcfile(1).
   
  -=back 4
  -
   =head1 AUTHORS
   
  -=over 4
  -
  -Ralf S. Engelschall
  -Michael Schloh von Bennewitz
  -
  -=back 4
  + Ralf S. Engelschall
  + Michael Schloh von Bennewitz
  + Thomas Lotterer
   
   =head1 HISTORY
   

From ossp-cvs-owner@ossp.org  Thu Jan 31 11:14:55 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 45044764FF; Thu, 31 Jan 2002 11:14:55 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp fixme.h lmtp2nntp_config.c lmtp2nntp_ma...
Message-Id: <20020131101455.45044764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 11:14:55 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   31-Jan-2002 11:14:55
  Branch: HEAD                             Handle: 2002013110145400

  Modified files:
    ossp-pkg/lmtp2nntp      fixme.h lmtp2nntp_config.c lmtp2nntp_main.c

  Log:
    moved --bind option

  Summary:
    Revision    Changes     Path
    1.4         +10 -4      ossp-pkg/lmtp2nntp/fixme.h
    1.20        +102 -0     ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.14        +14 -97     ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/fixme.h
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 fixme.h
  --- ossp-pkg/lmtp2nntp/fixme.h	31 Jan 2002 09:03:58 -0000	1.3
  +++ ossp-pkg/lmtp2nntp/fixme.h	31 Jan 2002 10:14:54 -0000	1.4
  @@ -58,24 +58,30 @@
       uid_t           option_uid;
       int             option_daemon;
   
  -    /*FIXME replaced by following
  +    /*
       int             option_aclc;
       struct acl      option_acl[MAXACLS];
  -    */
  -    int             nacl;
  -    struct acl     *pacl;
  +    FIXME replaced by following */
  +    int             nacl; /* number of acl structures found at pacl */
  +    struct acl     *pacl; /* pointer to an array of acl structures */
   
       int             option_veryverbose;
       int             option_childsmax;
       int             active_childs;
       l2_env_t       *l2_env;
       l2_channel_t   *l2;
  +    /*
       sa_addr_t      *saaAltio;
       sa_t           *saAltio;
  +    FIXME replaced by following */
  +    sa_addr_t      *saaServerbind;
  +    sa_t           *saServerbind;
  +
       char           *cpBindh;
       char           *cpBindp;
       sa_addr_t      *saaBind;
       sa_t           *saBind;
  +
       sa_addr_t      *saaIO;
       sa_t           *saIO;
       int             fdIOi;
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	31 Jan 2002 09:03:58 -0000	1.19
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	31 Jan 2002 10:14:54 -0000	1.20
  @@ -257,6 +257,108 @@
       catch (ex)
           rethrow;
   
  +    /* --bind SINGLE */
  +    try {
  +        if (   (val_get(ctx->val, "option.bind", &ov) != VAL_OK)
  +            || (ov->ndata != 1)
  +            || (ov->data.s == NULL)
  +              ) throw(0,0,0);
  +        log1(ctx, TRACE, "--bind = \"%s\"", ov->data.s);
  +
  +        /* dash means stdio */
  +        if (strcmp(ov->data.s, "-") != 0) { //FIXME does this work with popt()?
  +            if ((rc = sa_create(&ctx->saServerbind)) != SA_OK) {
  +                log1(ctx, ERROR, "option --bind, creating TCP socket (internal) failed with \"%s\"",
  +                     sa_error(rc));
  +                throw(0,0,0);
  +            }
  +            if ((rc = sa_addr_create(&ctx->saaServerbind)) != SA_OK) {
  +                log1(ctx, ERROR, "option --bind, create address (internal) failed with \"%s\"",
  +                     sa_error(rc));
  +                throw(0,0,0);
  +            }
  +        /* slash means UNIX socket */
  +            if (ov->data.s[0] == '/') {
  +                char *cpPath;
  +                char *cpPerm;
  +                int nPerm;
  +                int n;
  +                int i;
  +
  +                cpPath = strdup(optarg);
  +                cpPerm = NULL;
  +                nPerm  = -1;
  +                if ((cpPerm = strrchr(cpPath, ':')) != NULL) {
  +                    *cpPerm++ = '\0';
  +                    nPerm = 0;
  +                    for (i = 0; i < 4 && cpPerm[i] != '\0'; i++) {
  +                        if (!isdigit((int)cpPerm[i])) {
  +                            nPerm = -1;
  +                            break;
  +                        }
  +                        n = cpPerm[i] - '0';
  +                        if (n > 7) {
  +                            nPerm = -1;
  +                            break;
  +                        }
  +                        nPerm = ((nPerm << 3) | n);
  +                    }
  +                    if (nPerm == -1 || cpPerm[i] != '\0') {
  +                        log1(ctx, ERROR, "option --bind, invalid permissions \"%s\"",
  +                             cpPerm);
  +                        throw(0,0,0);
  +                    }
  +                }
  +                if ((rc = sa_addr_u2a(ctx->saaServerbind, "unix:%s", cpPath)) != SA_OK) {
  +                    log2(ctx, ERROR, "option --bind, parsing alternate IO guessing UNIX socket (%s) failed with \"%s\"",
  +                         cpPath, sa_error(rc));
  +                    throw(0,0,0);
  +                }
  +                if ((rc = sa_bind(ctx->saServerbind, ctx->saaServerbind)) != SA_OK) {
  +                    log2(ctx, ERROR, "option --bind, bind (%s) failed with \"%s\"",
  +                         cpPath, sa_error(rc));
  +                    throw(0,0,0);
  +                }
  +                if (nPerm != -1) {
  +                    if (chmod(cpPath, nPerm) == -1) {
  +                        log3(ctx, ERROR, "option --bind, chmod (%s, 0%o) failed with \"%s\"",
  +                             cpPath, nPerm, strerror(errno));
  +                        throw(0,0,0);
  +                    }
  +                }
  +                if (getuid() == 0 && getuid() != ctx->option_uid) {
  +                    if (chown(cpPath, ctx->option_uid, -1) == -1) {
  +                        log3(ctx, ERROR, "option --bind, chown (%s, %d) failed with \"%s\"",
  +                             cpPath, ctx->option_uid, strerror(errno));
  +                        throw(0,0,0);
  +                    }
  +                }
  +                free(cpPath);
  +            }
  +        /* otherwise assume INET socket */
  +            else {
  +                if ((rc = sa_addr_u2a(ctx->saaServerbind, "inet://%s", ov->data.s)) != SA_OK) {
  +                    log2(ctx, ERROR, "option --bind, parsing alternate IO guessing INET socket (%s) failed with \"%s\"",
  +                         ov->data.s, sa_error(rc));
  +                    throw(0,0,0);
  +                }
  +                if ((rc = sa_bind(ctx->saServerbind, ctx->saaServerbind)) != SA_OK) {
  +                    log2(ctx, ERROR, "option --bind, bind (%s) failed with \"%s\"",
  +                         ov->data.s, sa_error(rc));
  +                    throw(0,0,0);
  +                }
  +            }
  +        /* for either sockets */
  +            if ((rc = sa_listen(ctx->saServerbind, -1)) != SA_OK) {
  +                    log2(ctx, ERROR, "option --bind, listen (%s) failed with \"%s\"",
  +                         ov->data.s, sa_error(rc));
  +                    throw(0,0,0);
  +            }
  +        }
  +    }
  +    catch (ex)
  +        rethrow;
  +
   CUS:
       return;
   }
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	31 Jan 2002 09:03:58 -0000	1.13
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	31 Jan 2002 10:14:54 -0000	1.14
  @@ -431,8 +431,8 @@
       ctx->active_childs = 0;
       ctx->l2_env = NULL;
       ctx->l2 = NULL;
  -    ctx->saaAltio = NULL;
  -    ctx->saAltio = NULL;
  +    ctx->saaServerbind = NULL;
  +    ctx->saServerbind = NULL;
       ctx->cpBindh = NULL;
       ctx->cpBindp = NULL;
       ctx->saaBind = NULL;
  @@ -482,89 +482,6 @@
       /* read in the arguments */
       while ((i = getopt(argc, argv, "C:DKP:Va:b:c:d:g:h:l:m:n:o:r:s:t:u:v")) != -1) {
           switch (i) {
  -            case 'b': /*POD [B<-b> I<addr>[I<:port>]|C<->|I<path>[:perms]] */
  -                if (strcmp(optarg, "-") != 0) {
  -                    if ((rc = sa_create(&ctx->saAltio)) != SA_OK) {
  -                        fprintf(stderr, "%s:Error: Creating TCP socket failed for \"%s\": %s\n", 
  -                                ctx->progname, optarg, strerror(errno));
  -                        CU(ERR_EXECUTION);
  -                    }
  -                    if ((rc = sa_addr_create(&ctx->saaAltio)) != SA_OK) {
  -                        fprintf(stderr, "%s:Error: Creating address failed for -b option (%d)\n", 
  -                                ctx->progname, rc);
  -                    }
  -                    if (optarg[0] == '/') {
  -                        char *cpPath;
  -                        char *cpPerm;
  -                        int nPerm;
  -                        int n;
  -
  -                        cpPath = strdup(optarg);
  -                        cpPerm = NULL;
  -                        nPerm  = -1;
  -                        if ((cpPerm = strrchr(cpPath, ':')) != NULL) {
  -                            *cpPerm++ = '\0';
  -                            nPerm = 0;
  -                            for (i = 0; i < 4 && cpPerm[i] != '\0'; i++) {
  -                                if (!isdigit((int)cpPerm[i])) {
  -                                    nPerm = -1;
  -                                    break;
  -                                }
  -                                n = cpPerm[i] - '0';
  -                                if (n > 7) {
  -                                    nPerm = -1;
  -                                    break;
  -                                }
  -                                nPerm = ((nPerm << 3) | n);
  -                            }
  -                            if (nPerm == -1 || cpPerm[i] != '\0') {
  -                                fprintf(stderr, "%s:Error: Invalid permissions \"%s\"\n", ctx->progname, cpPerm);
  -                                CU(ERR_EXECUTION);
  -                            }
  -                        }
  -                        if ((rc = sa_addr_u2a(ctx->saaAltio, "unix:%s", cpPath)) != SA_OK) {
  -                            fprintf(stderr, "%s:Error: Parsing alternate IO guessing UNIX domain socket failed for \"%s\" (%d)\n", 
  -                                    ctx->progname, cpPath, rc);
  -                            CU(ERR_EXECUTION);
  -                        }
  -                        if ((rc = sa_bind(ctx->saAltio, ctx->saaAltio)) != SA_OK) {
  -                            fprintf(stderr, "%s:Error: Bind failed for \"%s\": %s\n", 
  -                                    ctx->progname, cpPath, strerror(errno));
  -                            CU(ERR_EXECUTION);
  -                        }
  -                        if (nPerm != -1) {
  -                            if (chmod(cpPath, nPerm) == -1) {
  -                                fprintf(stderr, "%s:Error: chmod failed for \"%s\": %s\n", ctx->progname, cpPath, strerror(errno));
  -                                CU(ERR_EXECUTION);
  -                            }
  -                        }
  -                        if (getuid() == 0 && getuid() != ctx->option_uid) {
  -                            if (chown(cpPath, ctx->option_uid, -1) == -1) {
  -                                fprintf(stderr, "%s:Error: chown failed for \"%s\": %s\n", ctx->progname, cpPath, strerror(errno));
  -                                CU(ERR_EXECUTION);
  -                            }
  -                        }
  -                        free(cpPath);
  -                    }
  -                    else {
  -                        if ((rc = sa_addr_u2a(ctx->saaAltio, "inet://%s", optarg)) != SA_OK) {
  -                            fprintf(stderr, "%s:Error: Parsing alternate IO guessing INET socket failed for \"%s\" (%d)\n", 
  -                                    ctx->progname, optarg, rc);
  -                            CU(ERR_EXECUTION);
  -                        }
  -                        if ((rc = sa_bind(ctx->saAltio, ctx->saaAltio)) != SA_OK) {
  -                            fprintf(stderr, "%s:Error: Bind failed for \"%s\": %s\n", 
  -                                    ctx->progname, optarg, strerror(errno));
  -                            CU(ERR_EXECUTION);
  -                        }
  -                    }
  -                    if ((rc = sa_listen(ctx->saAltio, -1)) != SA_OK) {
  -                        fprintf(stderr, "%s:Error: Listen to failed for \"%s\": %s\n", 
  -                                ctx->progname, optarg, strerror(errno));
  -                        CU(ERR_EXECUTION);
  -                    }
  -                }
  -                break;
               case 'c': /*POD [B<-c> I<addr>[I<:port>]] */
                   ctx->cpBindh = strdup(optarg);
                   if ((ctx->cpBindp = strrchr(ctx->cpBindh, ':')) != NULL) {
  @@ -908,7 +825,7 @@
       signal(SIGUSR2,            SIG_IGN    );
   
       /* loop for LMTP protocol with support for alternate io through daemon */
  -    if (ctx->saAltio == NULL) {
  +    if (ctx->saServerbind == NULL) {
           /* initialize LMTP context */
           ctx->fdIOi = STDIN_FILENO;
           ctx->fdIOo = STDOUT_FILENO;
  @@ -960,17 +877,17 @@
               }
           }
   
  -        sa_timeout(ctx->saAltio, SA_TIMEOUT_ALL,    0, 0);
  -        sa_timeout(ctx->saAltio, SA_TIMEOUT_ACCEPT, ctx->option_timeout_lmtp_accept, 0);
  -        sa_timeout(ctx->saAltio, SA_TIMEOUT_READ,   ctx->option_timeout_lmtp_read,   0);
  -        sa_timeout(ctx->saAltio, SA_TIMEOUT_WRITE,  ctx->option_timeout_lmtp_write,  0);
  +        sa_timeout(ctx->saServerbind, SA_TIMEOUT_ALL,    0, 0);
  +        sa_timeout(ctx->saServerbind, SA_TIMEOUT_ACCEPT, ctx->option_timeout_lmtp_accept, 0);
  +        sa_timeout(ctx->saServerbind, SA_TIMEOUT_READ,   ctx->option_timeout_lmtp_read,   0);
  +        sa_timeout(ctx->saServerbind, SA_TIMEOUT_WRITE,  ctx->option_timeout_lmtp_write,  0);
           while (1) {
               while (ctx->active_childs >= ctx->option_childsmax) {
                   log1(ctx, ERROR, "maximum number of childs (%d) reached - waiting (1s)", ctx->option_childsmax);
                   sleep(1);
               }
   
  -            if ((rc = sa_accept(ctx->saAltio, &ctx->saaIO, &ctx->saIO)) != SA_OK) {
  +            if ((rc = sa_accept(ctx->saServerbind, &ctx->saaIO, &ctx->saIO)) != SA_OK) {
                   if (rc == SA_ERR_SYS)
                       log3(ctx, ERROR, "accept failed: %s: (%d) %s", sa_error(rc), errno, strerror(errno));
                   else
  @@ -1050,8 +967,8 @@
               log1(ctx, NOTICE, "startup new child process, parent pid[%d]", getppid());
   
               /* child must close listening socket */
  -            sa_destroy(ctx->saAltio);
  -            ctx->saAltio = NULL; /* prevent cleanup from free'ing this again */
  +            sa_destroy(ctx->saServerbind);
  +            ctx->saServerbind = NULL; /* prevent cleanup from free'ing this again */
               
               /* initialize LMTP context */
               lmtp_io.ctx    = ctx;
  @@ -1097,10 +1014,10 @@
       log0(ctx, NOTICE, "graceful shutdown shortly before exit - no more logging");
       l2_channel_destroy(ctx->l2);
       l2_env_destroy(ctx->l2_env);
  -    if (ctx->saAltio)
  -        sa_destroy(ctx->saAltio);
  -    if (ctx->saaAltio)
  -        sa_addr_destroy(ctx->saaAltio);
  +    if (ctx->saServerbind)
  +        sa_destroy(ctx->saServerbind);
  +    if (ctx->saaServerbind)
  +        sa_addr_destroy(ctx->saaServerbind);
       if (ctx->option_restrictheader != NULL)
           free(ctx->option_restrictheader);
       if (ctx->azHeaderValuePairs != NULL)

From ossp-cvs-owner@ossp.org  Thu Jan 31 11:40:08 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8256E764FF; Thu, 31 Jan 2002 11:40:08 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp example.conf fixme.h lmtp2nntp_config.c...
Message-Id: <20020131104008.8256E764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 11:40:08 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   31-Jan-2002 11:40:08
  Branch: HEAD                             Handle: 2002013110400700

  Modified files:
    ossp-pkg/lmtp2nntp      example.conf fixme.h lmtp2nntp_config.c
                            lmtp2nntp_main.c

  Log:
    moved --client option

  Summary:
    Revision    Changes     Path
    1.9         +1  -1      ossp-pkg/lmtp2nntp/example.conf
    1.5         +6  -2      ossp-pkg/lmtp2nntp/fixme.h
    1.21        +22 -0      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.15        +10 -34     ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/example.conf
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 example.conf
  --- ossp-pkg/lmtp2nntp/example.conf	31 Jan 2002 09:03:58 -0000	1.8
  +++ ossp-pkg/lmtp2nntp/example.conf	31 Jan 2002 10:40:07 -0000	1.9
  @@ -21,7 +21,7 @@
   
           ### GATEWAY ###
   
  -client          127.0.0.2                       #see -c aka --client
  +client          127.0.0.1:45678                 #see -c aka --client
   destination     news.example.com                #see -d aka --destination
   groupmode       envelope                        #see -g aka --groupmode
   headervalue     X-gateway "lmtp2nntp gateway"   #see -h aka --headervalue
  Index: ossp-pkg/lmtp2nntp/fixme.h
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 fixme.h
  --- ossp-pkg/lmtp2nntp/fixme.h	31 Jan 2002 10:14:54 -0000	1.4
  +++ ossp-pkg/lmtp2nntp/fixme.h	31 Jan 2002 10:40:07 -0000	1.5
  @@ -77,10 +77,14 @@
       sa_addr_t      *saaServerbind;
       sa_t           *saServerbind;
   
  -    char           *cpBindh;
  -    char           *cpBindp;
  +    /*FIXME obsolete char           *cpBindh; */
  +    /*FIXME obsolete char           *cpBindp; */
  +    /*
       sa_addr_t      *saaBind;
       sa_t           *saBind;
  +    FIXME replaced by following */
  +    sa_addr_t      *saaClientbind;
  +    sa_t           *saClientbind;
   
       sa_addr_t      *saaIO;
       sa_t           *saIO;
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	31 Jan 2002 10:14:54 -0000	1.20
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	31 Jan 2002 10:40:07 -0000	1.21
  @@ -359,6 +359,28 @@
       catch (ex)
           rethrow;
   
  +    /* --client SINGLE */
  +    try {
  +        if (   (val_get(ctx->val, "option.client", &ov) != VAL_OK)
  +            || (ov->ndata != 1)
  +            || (ov->data.s == NULL)
  +              ) throw(0,0,0);
  +        log1(ctx, TRACE, "--client = \"%s\"", ov->data.s);
  +
  +        if ((rc = sa_addr_create(&ctx->saaClientbind)) != SA_OK) {
  +            log1(ctx, ERROR, "option --client, create address (internal) failed with \"%s\"",
  +                 sa_error(rc));
  +            throw(0,0,0);
  +        }
  +        if ((rc = sa_addr_u2a(ctx->saaClientbind, "inet://%s", ov->data.s)) != SA_OK) {
  +            log2(ctx, ERROR, "option --client, parsing alternate IO guessing INET socket (%s) failed with \"%s\"",
  +                 ov->data.s, sa_error(rc));
  +            throw(0,0,0);
  +        }
  +    }
  +    catch (ex)
  +        rethrow;
  +
   CUS:
       return;
   }
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	31 Jan 2002 10:14:54 -0000	1.14
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	31 Jan 2002 10:40:07 -0000	1.15
  @@ -433,10 +433,8 @@
       ctx->l2 = NULL;
       ctx->saaServerbind = NULL;
       ctx->saServerbind = NULL;
  -    ctx->cpBindh = NULL;
  -    ctx->cpBindp = NULL;
  -    ctx->saaBind = NULL;
  -    ctx->saBind = NULL;
  +    ctx->saaClientbind = NULL;
  +    ctx->saClientbind = NULL;
       ctx->nsc = 0;
       for (i=0; i < MAXNEWSSERVICES; i++) {
           ctx->ns[i].h = NULL;
  @@ -482,24 +480,6 @@
       /* read in the arguments */
       while ((i = getopt(argc, argv, "C:DKP:Va:b:c:d:g:h:l:m:n:o:r:s:t:u:v")) != -1) {
           switch (i) {
  -            case 'c': /*POD [B<-c> I<addr>[I<:port>]] */
  -                ctx->cpBindh = strdup(optarg);
  -                if ((ctx->cpBindp = strrchr(ctx->cpBindh, ':')) != NULL) {
  -                    *ctx->cpBindp++ = NUL;
  -                    ctx->cpBindp = strdup(ctx->cpBindp);
  -                }
  -                else 
  -                    ctx->cpBindp = strdup("0");
  -                if ((rc = sa_addr_create(&ctx->saaBind)) != SA_OK) {
  -                    fprintf(stderr, "%s:Error: Creating address failed for -c option (%d)\n", 
  -                            ctx->progname, rc);
  -                }
  -                if ((rc = sa_addr_u2a(ctx->saaBind, "inet://%s:%s", ctx->cpBindh, ctx->cpBindp)) != SA_OK) {
  -                    fprintf(stderr, "%s:Error: Parsing bind address failed for \"%s:%s\" (%d)\n", 
  -                            ctx->progname, ctx->cpBindh, ctx->cpBindp, rc);
  -                    CU(ERR_EXECUTION);
  -                }
  -                break;
               case 'd': /*POD [B<-d> I<addr>[I<:port>][,I<addr>[I<:port>], ...]] */
                   if (argz_create_sep(optarg, ',', &azHosts, &asHosts) != 0)
                       CU(ERR_EXECUTION);
  @@ -1133,11 +1113,11 @@
   
           ctx->ns[i].l2 = ctx->l2;
   
  -        if (bOk && (ctx->saaBind != NULL)) {
  -            log2(ctx, DEBUG, "bind local socket to %s:%s", ctx->cpBindh, ctx->cpBindp);
  -            if (sa_bind(ctx->ns[i].sa, ctx->saaBind) != SA_OK) {
  +        if (bOk && (ctx->saaClientbind != NULL)) {
  +            log0(ctx, DEBUG, "bind local socket to ${option.clientbind}"); //FIXME
  +            if (sa_bind(ctx->ns[i].sa, ctx->saaClientbind) != SA_OK) {
                   bOk = FALSE;
  -                log2(ctx, ERROR, "binding NNTP client to local address %s:%s failed, %m", ctx->cpBindh, ctx->cpBindp);
  +                log0(ctx, ERROR, "binding NNTP client to local address ${option.clientbind} failed, %m"); //FIXME
               }
           }
   
  @@ -1263,14 +1243,10 @@
   
       if (ctx->option_mailfrom != NULL)
           free(ctx->option_mailfrom);
  -    if (ctx->cpBindh != NULL)
  -        free(ctx->cpBindh);
  -    if (ctx->cpBindp != NULL)
  -        free(ctx->cpBindp);
  -    if (ctx->saBind != NULL)
  -        sa_destroy(ctx->saBind);
  -    if (ctx->saaBind != NULL)
  -        sa_addr_destroy(ctx->saaBind);
  +    if (ctx->saClientbind != NULL)
  +        sa_destroy(ctx->saClientbind);
  +    if (ctx->saaClientbind != NULL)
  +        sa_addr_destroy(ctx->saaClientbind);
   }
   
   static int helo_rfc0821domain(char *msg, char **domain)

From ossp-cvs-owner@ossp.org  Thu Jan 31 11:42:02 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EF434764FF; Thu, 31 Jan 2002 11:42:01 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_main.c
Message-Id: <20020131104201.EF434764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 11:42:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   31-Jan-2002 11:42:01
  Branch: HEAD                             Handle: 2002013110420100

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_main.c

  Log:
    removed unused variables

  Summary:
    Revision    Changes     Path
    1.16        +0  -4      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	31 Jan 2002 10:40:07 -0000	1.15
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	31 Jan 2002 10:42:01 -0000	1.16
  @@ -372,8 +372,6 @@
       size_t        asHosts;
       char         *azTimeout;
       size_t        asTimeout;
  -    char         *azACL;
  -    size_t        asACL;
       char         *cpHost;
       char         *cpPort;
       pid_t         pid;
  @@ -381,8 +379,6 @@
       char         *cpName;
       char         *cpValue;
       int           nValue;
  -    char         *cpAddr;
  -    char         *cpPrefixLen;
       struct passwd *sPasswd;
       char         *cpHeadername;
       char         *cpHeadervalue;

From ossp-cvs-owner@ossp.org  Thu Jan 31 14:34:14 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 33192764FF; Thu, 31 Jan 2002 14:34:14 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str Makefile.in str_basic.c
Message-Id: <20020131133414.33192764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 14:34:14 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   31-Jan-2002 14:34:14
  Branch: HEAD                             Handle: 2002013113341300

  Modified files:
    ossp-pkg/str            Makefile.in str_basic.c

  Log:
    str_concat included the terminating NUL in copy and added a useless NUL

  Summary:
    Revision    Changes     Path
    1.41        +1  -1      ossp-pkg/str/Makefile.in
    1.10        +6  -6      ossp-pkg/str/str_basic.c
  ____________________________________________________________________________

  Index: ossp-pkg/str/Makefile.in
  ============================================================
  $ cvs diff -u -r1.40 -r1.41 Makefile.in
  --- ossp-pkg/str/Makefile.in	2 Jan 2002 17:09:13 -0000	1.40
  +++ ossp-pkg/str/Makefile.in	31 Jan 2002 13:34:13 -0000	1.41
  @@ -189,7 +189,7 @@
   $(OBJS): Makefile
   
   #   AUTOMATICALLY GENERATED DEPENDENCY LIST - DO NOT EDIT
  -str_pcre.o: str_pcre.c str_pcre.h str_pcre_tab.c
  +str_pcre.o: str_pcre.c str_pcre.h str_pcre.tab
   str_memory.o: str_memory.c str_p.h str.h str_config.h str_pcre.h
   str_basic.o: str_basic.c str_p.h str.h str_config.h str_pcre.h
   str_search.o: str_search.c str_p.h str.h str_config.h str_pcre.h
  Index: ossp-pkg/str/str_basic.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 str_basic.c
  --- ossp-pkg/str/str_basic.c	2 Jan 2002 17:09:13 -0000	1.9
  +++ ossp-pkg/str/str_basic.c	31 Jan 2002 13:34:13 -0000	1.10
  @@ -144,12 +144,12 @@
   
       /* concatenate the strings */
       ds = rv;
  -    while ((*ds++ = *s++) != NUL)
  -        /*nop*/;
  -    while ((cp = va_arg(ap, char *)) != NULL)
  -        while ((*ds++ = *cp++) != NUL)
  -            /*nop*/;
  -    *ds = NUL;
  +    while ((*ds = *s++) != NUL)
  +        ds++;
  +    while ((cp = va_arg(ap, char *)) != NULL) {
  +        while ((*ds = *cp++) != NUL)
  +            ds++;
  +    }
   
       /* return target string */
       return rv;

From ossp-cvs-owner@ossp.org  Thu Jan 31 14:35:40 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 07218764FF; Thu, 31 Jan 2002 14:35:39 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str str.pod
Message-Id: <20020131133539.07218764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 14:35:39 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   31-Jan-2002 14:35:39
  Branch: HEAD                             Handle: 2002013113353900

  Modified files:
    ossp-pkg/str            str.pod

  Log:
    typo

  Summary:
    Revision    Changes     Path
    1.32        +1  -1      ossp-pkg/str/str.pod
  ____________________________________________________________________________

  Index: ossp-pkg/str/str.pod
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 str.pod
  --- ossp-pkg/str/str.pod	2 Jan 2002 17:09:13 -0000	1.31
  +++ ossp-pkg/str/str.pod	31 Jan 2002 13:35:39 -0000	1.32
  @@ -130,7 +130,7 @@
   allocated string and returns this new string.  If I<s> is C<NULL> the function
   returns C<NULL>. Else it returns the pointer to the written final
   C<NUL>-terminating character in I<s>. The returned string later has to be
  -deallicated with free(3).
  +deallocated with free(3).
   
   =item char *B<str_splice>(char *I<s>, str_size_t I<off>, str_size_t I<n>, char *I<t>, str_size_t I<m>);
   

From ossp-cvs-owner@ossp.org  Thu Jan 31 14:44:06 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E6142764FF; Thu, 31 Jan 2002 14:44:05 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp example.conf fixme.h lmtp2nntp_config.c...
Message-Id: <20020131134405.E6142764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 14:44:05 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   31-Jan-2002 14:44:05
  Branch: HEAD                             Handle: 2002013113440500

  Modified files:
    ossp-pkg/lmtp2nntp      example.conf fixme.h lmtp2nntp_config.c
                            lmtp2nntp_main.c

  Log:
    moved --destination option

  Summary:
    Revision    Changes     Path
    1.10        +1  -1      ossp-pkg/lmtp2nntp/example.conf
    1.6         +7  -2      ossp-pkg/lmtp2nntp/fixme.h
    1.22        +42 -0      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.17        +11 -69     ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/example.conf
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 example.conf
  --- ossp-pkg/lmtp2nntp/example.conf	31 Jan 2002 10:40:07 -0000	1.9
  +++ ossp-pkg/lmtp2nntp/example.conf	31 Jan 2002 13:44:05 -0000	1.10
  @@ -22,7 +22,7 @@
           ### GATEWAY ###
   
   client          127.0.0.1:45678                 #see -c aka --client
  -destination     news.example.com                #see -d aka --destination
  +destination     127.0.0.1:nntp                  #see -d aka --destination
   groupmode       envelope                        #see -g aka --groupmode
   headervalue     X-gateway "lmtp2nntp gateway"   #see -h aka --headervalue
   #include         "sampleconfig.two"             #    -i aka --include
  Index: ossp-pkg/lmtp2nntp/fixme.h
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 fixme.h
  --- ossp-pkg/lmtp2nntp/fixme.h	31 Jan 2002 10:40:07 -0000	1.5
  +++ ossp-pkg/lmtp2nntp/fixme.h	31 Jan 2002 13:44:05 -0000	1.6
  @@ -19,8 +19,8 @@
   typedef struct nntp_st nntp_t;
   #include "lmtp2nntp_nntp.h"
   struct ns {
  -    char           *h;    /* host */
  -    char           *p;    /* port */
  +    /*FIXME obsolete char           *h;    * host */
  +    /*FIXME obsolete char           *p;    * port */
       sa_addr_t      *saa;  /* socket address abstraction */
       sa_t           *sa;   /* socket abstraction */
       nntp_t         *nntp;
  @@ -90,8 +90,13 @@
       sa_t           *saIO;
       int             fdIOi;
       int             fdIOo;
  +
       int             nsc;
       struct ns       ns[MAXNEWSSERVICES];
  +    /*FIXME replaced by following */
  +    int             nns; /* number of ns structures found at pns */
  +    struct ns      *pns; /* pointer to an array of ns structures */
  +
       char           *azGroupargs;
       size_t          asGroupargs;
       struct          session session;
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	31 Jan 2002 10:40:07 -0000	1.21
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	31 Jan 2002 13:44:05 -0000	1.22
  @@ -381,6 +381,48 @@
       catch (ex)
           rethrow;
   
  +    /* --destination MULTI */
  +    try {
  +        char *cp;
  +        int i;
  +
  +        if (   (val_get(ctx->val, "option.destination", &ov) != VAL_OK)
  +            || ((ov->ndata >= 1) && (ov->data.m == NULL))
  +              ) throw(0,0,0);
  +        log1(ctx, DEBUG, "ov->ndata = %d", ov->ndata);
  +        for (i = 0; i < ov->ndata; i++)
  +            log2(ctx, TRACE, "--destination[%d] = \"%s\"", i, (ov->data.m)[i]);
  +
  +        if ((ctx->pacl = (struct acl *)malloc(ov->ndata * sizeof(struct acl))) == NULL) throw(0,0,0);
  +        for (i = 0; i < ov->ndata; i++) {
  +            cp = (ov->data.m)[i];
  +            log2(ctx, DEBUG, "cp = (data.m)[%d] = \"%s\"", i, cp);
  +            if (strrchr(cp, ':') == NULL)
  +                cp = str_concat(cp, ":nntp", NULL); //FIXME is this a config var/val?
  +            else
  +                cp = str_concat(cp, NULL); /* prepare for free() */
  +            log1(ctx, DEBUG, "cp = \"%s\"", cp);
  +            if ((rc = sa_addr_create(&ctx->ns[i].saa)) != SA_OK) {
  +                log1(ctx, ERROR, "option --destination, create address (internal) failed with \"%s\"",
  +                     sa_error(rc));
  +                throw(0,0,0);
  +            }
  +            if ((rc = sa_addr_u2a(ctx->ns[i].saa, "inet://%s", cp)) != SA_OK) {
  +                log2(ctx, ERROR, "option --destination, parsing host address (%s) failed with \"%s\"",
  +                     cp /*FIXME again, option vs. config */, sa_error(rc));
  +                throw(0,0,0);
  +            }
  +            if ((rc = sa_create(&ctx->ns[i].sa)) != SA_OK) {
  +                log2(ctx, ERROR, "option --destination, creating TCP socket (%s) failed with \"%s\"",
  +                     cp /*FIXME again, option vs. config */, sa_error(rc));
  +                throw(0,0,0);
  +            }
  +            free(cp);
  +        }
  +        ctx->nns = i;
  +    }
  +    catch (ex)
  +        rethrow;
   CUS:
       return;
   }
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	31 Jan 2002 10:42:01 -0000	1.16
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	31 Jan 2002 13:44:05 -0000	1.17
  @@ -368,12 +368,8 @@
       int           bOk;
       int           i;             /* general purpose scratch int, index ... */
       char         *cp;            /* general purpose character pointer */
  -    char         *azHosts;
  -    size_t        asHosts;
       char         *azTimeout;
       size_t        asTimeout;
  -    char         *cpHost;
  -    char         *cpPort;
       pid_t         pid;
       FILE         *fd;
       char         *cpName;
  @@ -431,16 +427,8 @@
       ctx->saServerbind = NULL;
       ctx->saaClientbind = NULL;
       ctx->saClientbind = NULL;
  -    ctx->nsc = 0;
  -    for (i=0; i < MAXNEWSSERVICES; i++) {
  -        ctx->ns[i].h = NULL;
  -        ctx->ns[i].p = NULL;
  -        ctx->ns[i].saa = NULL;
  -        ctx->ns[i].sa = NULL;
  -        ctx->ns[i].nntp = NULL;
  -        ctx->ns[i].rc = LMTP_ERR_UNKNOWN;
  -        ctx->ns[i].l2 = NULL;
  -    }
  +    ctx->nns = 0;
  +    ctx->pns = NULL;
       ctx->nacl = 0;
       ctx->pacl = NULL;
       ctx->azGroupargs = NULL;
  @@ -476,44 +464,6 @@
       /* read in the arguments */
       while ((i = getopt(argc, argv, "C:DKP:Va:b:c:d:g:h:l:m:n:o:r:s:t:u:v")) != -1) {
           switch (i) {
  -            case 'd': /*POD [B<-d> I<addr>[I<:port>][,I<addr>[I<:port>], ...]] */
  -                if (argz_create_sep(optarg, ',', &azHosts, &asHosts) != 0)
  -                    CU(ERR_EXECUTION);
  -                cp = NULL;
  -                while ((cp = argz_next(azHosts, asHosts, cp)) != NULL) {
  -                    if (ctx->nsc >= MAXNEWSSERVICES) {
  -                        fprintf(stderr, "%s:Error: Too many services (%d) using option -d\n", ctx->progname, ctx->nsc);
  -                        CU(ERR_EXECUTION);
  -                    }
  -                    cpHost = strdup(cp);
  -                    if ((cpPort = strrchr(cpHost, ':')) != NULL) {
  -                        *cpPort++ = NUL;
  -                        cpPort = strdup(cpPort);
  -                    }
  -                    else 
  -                        cpPort = strdup("nntp");
  -                    ctx->ns[ctx->nsc].h = cpHost;
  -                    ctx->ns[ctx->nsc].p = cpPort;
  -                    if ((rc = sa_addr_create(&ctx->ns[ctx->nsc].saa)) != SA_OK) {
  -                        fprintf(stderr, "%s:Error: Creating address failed for -d option (%d)\n", 
  -                            ctx->progname, rc);
  -                    }
  -                    if ((rc = sa_addr_u2a(ctx->ns[ctx->nsc].saa, "inet://%s:%s", 
  -                                     ctx->ns[ctx->nsc].h, ctx->ns[ctx->nsc].p)) != SA_OK) {
  -                        fprintf(stderr, "%s:Error: Parsing host address failed for \"%s:%s\" (%d)\n", 
  -                                ctx->progname, ctx->ns[ctx->nsc].h, ctx->ns[ctx->nsc].p, rc);
  -                        CU(ERR_EXECUTION);
  -                    }
  -                    if ((rc = sa_create(&ctx->ns[ctx->nsc].sa)) != SA_OK) {
  -                        fprintf(stderr, "%s:Error: Creating TCP socket failed for \"%s:%s\": %s\n", 
  -                                ctx->progname, ctx->ns[ctx->nsc].h, ctx->ns[ctx->nsc].p, strerror(errno));
  -                        CU(ERR_EXECUTION);
  -                    }
  -                    ctx->ns[ctx->nsc].nntp = NULL;
  -                    ctx->nsc++;
  -                }
  -                free(azHosts);
  -                break;
               case 'g': /*POD [B<-g> I<groupmode>] */
                   if      (strcasecmp(optarg, "arg") == 0)
                       ctx->option_groupmode = GROUPMODE_ARG;
  @@ -1105,7 +1055,7 @@
       do {
           log1(ctx, DEBUG, "trying ns[%d]", i);
           bOk = TRUE;
  -        log2(ctx, TRACE, "try %s:%s", ctx->ns[i].h, ctx->ns[i].p);
  +        log1(ctx, TRACE, "try ${option.destination}[${i}]", i); //FIXME
   
           ctx->ns[i].l2 = ctx->l2;
   
  @@ -1126,8 +1076,7 @@
               log0(ctx, DEBUG, "connect");
               if (sa_connect(ctx->ns[i].sa, ctx->ns[i].saa) != SA_OK) {
                   bOk = FALSE;
  -                log2(ctx, WARNING, "connect to %s:%s failed, %m",
  -                     ctx->ns[i].h, ctx->ns[i].p);
  +                log1(ctx, WARNING, "connect to ${option.destination}[${i}] failed, %m", i); //FIXME
               }
           }
   
  @@ -1151,11 +1100,11 @@
           }
   
           if (bOk) {
  -            log2(ctx, INFO, "NNTP session to %s:%s successfully established", ctx->ns[i].h, ctx->ns[i].p);
  +            log1(ctx, INFO, "NNTP session to ${option.destination}[${i}] successfully established", i); //FIXME
               i++;
           }
           else {
  -            log2(ctx, WARNING, "NNTP session establishment to %s:%s failed", ctx->ns[i].h, ctx->ns[i].p);
  +            log1(ctx, WARNING, "NNTP session establishment to ${option.destination}[${i}] failed", i); //FIXME
               log1(ctx, DEBUG, "removing ns[%d] from list", i);
               lmtp_gfs_ns(&ctx->ns[i]);
               if (i < --ctx->nsc) {
  @@ -1218,14 +1167,6 @@
           sa_addr_destroy(ns->saa);
           ns->saa = NULL;
       }
  -    if (ns->p != NULL) {
  -        free(ns->p);
  -        ns->p = NULL;
  -    }
  -    if (ns->h != NULL) {
  -        free(ns->h);
  -        ns->h = NULL;
  -    }
   }
   
   static void lmtp_gfs_lhlo(lmtp2nntp_t *ctx)
  @@ -1937,10 +1878,11 @@
           for (i = 0; i < ctx->nsc; i++) {
               if (ctx->ns[i].rc != NNTP_OK) {
                   str_format(errorstring, sizeof(errorstring), 
  -                "%s:%s returned %s\n"
  -                "%s:%s lastresp \"%s\"", 
  -                ctx->ns[i].h, ctx->ns[i].p, nntp_error(ctx->ns[i].rc), 
  -                ctx->ns[i].h, ctx->ns[i].p, nntp_lastresp(ctx->ns[i].nntp));
  +                "${option.destination}[${i}] returned %s\n" /*FIXME*/
  +                "${option.destination}[${i}] lastresp \"%s\"",  /*FIXME*/
  +                i,
  +                nntp_error(ctx->ns[i].rc), 
  +                nntp_lastresp(ctx->ns[i].nntp));
                   argz_add(&azErr, &asErr, errorstring);
               }
           }

From ossp-cvs-owner@ossp.org  Thu Jan 31 14:48:28 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 34631764FF; Thu, 31 Jan 2002 14:48:28 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c
Message-Id: <20020131134828.34631764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 14:48:28 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   31-Jan-2002 14:48:28
  Branch: HEAD                             Handle: 2002013113482700

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c

  Log:
    use one line for a log, no matter how large

  Summary:
    Revision    Changes     Path
    1.23        +18 -37     ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	31 Jan 2002 13:44:05 -0000	1.22
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	31 Jan 2002 13:48:27 -0000	1.23
  @@ -161,8 +161,7 @@
           log1(ctx, TRACE, "--childsmax = \"%s\"", ov->data.s);
   
           if ((ctx->option_childsmax = atoi(ov->data.s)) <= 0) {
  -            log1(ctx, ERROR, "option --childsmax, number (%d) out of range",
  -                 ctx->option_childsmax);
  +            log1(ctx, ERROR, "option --childsmax, number (%d) out of range", ctx->option_childsmax);
               throw(0,0,0);
           }
       }
  @@ -242,13 +241,11 @@
               ctx->pacl[i].prefixlen = atoi(cp);
               log2(ctx, DEBUG, "ctx->pacl[%d].prefixlen = %d", i, ctx->pacl[i].prefixlen);
               if ((rc = sa_addr_create(&(ctx->pacl[i].saa))) != SA_OK) {
  -                log1(ctx, ERROR, "option --acl, create address (internal) failed with \"%s\"",
  -                     sa_error(rc));
  +                log1(ctx, ERROR, "option --acl, create address (internal) failed with \"%s\"", sa_error(rc));
                   throw(0,0,0);
                   }
               if ((rc = sa_addr_u2a(ctx->pacl[i].saa, "inet://%s:0", ctx->pacl[i].acl)) != SA_OK) {
  -                log2(ctx, ERROR, "option --acl, parsing address (%s) failed with \"%s\"",
  -                     ctx->pacl[i].acl, sa_error(rc));
  +                log2(ctx, ERROR, "option --acl, parsing address (%s) failed with \"%s\"", ctx->pacl[i].acl, sa_error(rc));
                   throw(0,0,0);
                   }
           }
  @@ -268,13 +265,11 @@
           /* dash means stdio */
           if (strcmp(ov->data.s, "-") != 0) { //FIXME does this work with popt()?
               if ((rc = sa_create(&ctx->saServerbind)) != SA_OK) {
  -                log1(ctx, ERROR, "option --bind, creating TCP socket (internal) failed with \"%s\"",
  -                     sa_error(rc));
  +                log1(ctx, ERROR, "option --bind, creating TCP socket (internal) failed with \"%s\"", sa_error(rc));
                   throw(0,0,0);
               }
               if ((rc = sa_addr_create(&ctx->saaServerbind)) != SA_OK) {
  -                log1(ctx, ERROR, "option --bind, create address (internal) failed with \"%s\"",
  -                     sa_error(rc));
  +                log1(ctx, ERROR, "option --bind, create address (internal) failed with \"%s\"", sa_error(rc));
                   throw(0,0,0);
               }
           /* slash means UNIX socket */
  @@ -304,32 +299,27 @@
                           nPerm = ((nPerm << 3) | n);
                       }
                       if (nPerm == -1 || cpPerm[i] != '\0') {
  -                        log1(ctx, ERROR, "option --bind, invalid permissions \"%s\"",
  -                             cpPerm);
  +                        log1(ctx, ERROR, "option --bind, invalid permissions \"%s\"", cpPerm);
                           throw(0,0,0);
                       }
                   }
                   if ((rc = sa_addr_u2a(ctx->saaServerbind, "unix:%s", cpPath)) != SA_OK) {
  -                    log2(ctx, ERROR, "option --bind, parsing alternate IO guessing UNIX socket (%s) failed with \"%s\"",
  -                         cpPath, sa_error(rc));
  +                    log2(ctx, ERROR, "option --bind, parsing alternate IO guessing UNIX socket (%s) failed with \"%s\"", cpPath, sa_error(rc));
                       throw(0,0,0);
                   }
                   if ((rc = sa_bind(ctx->saServerbind, ctx->saaServerbind)) != SA_OK) {
  -                    log2(ctx, ERROR, "option --bind, bind (%s) failed with \"%s\"",
  -                         cpPath, sa_error(rc));
  +                    log2(ctx, ERROR, "option --bind, bind (%s) failed with \"%s\"", cpPath, sa_error(rc));
                       throw(0,0,0);
                   }
                   if (nPerm != -1) {
                       if (chmod(cpPath, nPerm) == -1) {
  -                        log3(ctx, ERROR, "option --bind, chmod (%s, 0%o) failed with \"%s\"",
  -                             cpPath, nPerm, strerror(errno));
  +                        log3(ctx, ERROR, "option --bind, chmod (%s, 0%o) failed with \"%s\"", cpPath, nPerm, strerror(errno));
                           throw(0,0,0);
                       }
                   }
                   if (getuid() == 0 && getuid() != ctx->option_uid) {
                       if (chown(cpPath, ctx->option_uid, -1) == -1) {
  -                        log3(ctx, ERROR, "option --bind, chown (%s, %d) failed with \"%s\"",
  -                             cpPath, ctx->option_uid, strerror(errno));
  +                        log3(ctx, ERROR, "option --bind, chown (%s, %d) failed with \"%s\"", cpPath, ctx->option_uid, strerror(errno));
                           throw(0,0,0);
                       }
                   }
  @@ -338,20 +328,17 @@
           /* otherwise assume INET socket */
               else {
                   if ((rc = sa_addr_u2a(ctx->saaServerbind, "inet://%s", ov->data.s)) != SA_OK) {
  -                    log2(ctx, ERROR, "option --bind, parsing alternate IO guessing INET socket (%s) failed with \"%s\"",
  -                         ov->data.s, sa_error(rc));
  +                    log2(ctx, ERROR, "option --bind, parsing alternate IO guessing INET socket (%s) failed with \"%s\"", ov->data.s, sa_error(rc));
                       throw(0,0,0);
                   }
                   if ((rc = sa_bind(ctx->saServerbind, ctx->saaServerbind)) != SA_OK) {
  -                    log2(ctx, ERROR, "option --bind, bind (%s) failed with \"%s\"",
  -                         ov->data.s, sa_error(rc));
  +                    log2(ctx, ERROR, "option --bind, bind (%s) failed with \"%s\"", ov->data.s, sa_error(rc));
                       throw(0,0,0);
                   }
               }
           /* for either sockets */
               if ((rc = sa_listen(ctx->saServerbind, -1)) != SA_OK) {
  -                    log2(ctx, ERROR, "option --bind, listen (%s) failed with \"%s\"",
  -                         ov->data.s, sa_error(rc));
  +                    log2(ctx, ERROR, "option --bind, listen (%s) failed with \"%s\"", ov->data.s, sa_error(rc));
                       throw(0,0,0);
               }
           }
  @@ -368,13 +355,11 @@
           log1(ctx, TRACE, "--client = \"%s\"", ov->data.s);
   
           if ((rc = sa_addr_create(&ctx->saaClientbind)) != SA_OK) {
  -            log1(ctx, ERROR, "option --client, create address (internal) failed with \"%s\"",
  -                 sa_error(rc));
  +            log1(ctx, ERROR, "option --client, create address (internal) failed with \"%s\"", sa_error(rc));
               throw(0,0,0);
           }
           if ((rc = sa_addr_u2a(ctx->saaClientbind, "inet://%s", ov->data.s)) != SA_OK) {
  -            log2(ctx, ERROR, "option --client, parsing alternate IO guessing INET socket (%s) failed with \"%s\"",
  -                 ov->data.s, sa_error(rc));
  +            log2(ctx, ERROR, "option --client, parsing alternate IO guessing INET socket (%s) failed with \"%s\"", ov->data.s, sa_error(rc));
               throw(0,0,0);
           }
       }
  @@ -401,20 +386,16 @@
                   cp = str_concat(cp, ":nntp", NULL); //FIXME is this a config var/val?
               else
                   cp = str_concat(cp, NULL); /* prepare for free() */
  -            log1(ctx, DEBUG, "cp = \"%s\"", cp);
               if ((rc = sa_addr_create(&ctx->ns[i].saa)) != SA_OK) {
  -                log1(ctx, ERROR, "option --destination, create address (internal) failed with \"%s\"",
  -                     sa_error(rc));
  +                log1(ctx, ERROR, "option --destination, create address (internal) failed with \"%s\"", sa_error(rc));
                   throw(0,0,0);
               }
               if ((rc = sa_addr_u2a(ctx->ns[i].saa, "inet://%s", cp)) != SA_OK) {
  -                log2(ctx, ERROR, "option --destination, parsing host address (%s) failed with \"%s\"",
  -                     cp /*FIXME again, option vs. config */, sa_error(rc));
  +                log2(ctx, ERROR, "option --destination, parsing host address (%s) failed with \"%s\"", cp /*FIXME again, option vs. config */, sa_error(rc));
                   throw(0,0,0);
               }
               if ((rc = sa_create(&ctx->ns[i].sa)) != SA_OK) {
  -                log2(ctx, ERROR, "option --destination, creating TCP socket (%s) failed with \"%s\"",
  -                     cp /*FIXME again, option vs. config */, sa_error(rc));
  +                log2(ctx, ERROR, "option --destination, creating TCP socket (%s) failed with \"%s\"", cp /*FIXME again, option vs. config */, sa_error(rc));
                   throw(0,0,0);
               }
               free(cp);

From ossp-cvs-owner@ossp.org  Thu Jan 31 14:54:22 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 07272764FF; Thu, 31 Jan 2002 14:54:21 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp fixme.h lmtp2nntp_config.c lmtp2nntp_ma...
Message-Id: <20020131135421.07272764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 14:54:21 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   31-Jan-2002 14:54:21
  Branch: HEAD                             Handle: 2002013113542100

  Modified files:
    ossp-pkg/lmtp2nntp      fixme.h lmtp2nntp_config.c lmtp2nntp_main.c

  Log:
    moved --groupmode option

  Summary:
    Revision    Changes     Path
    1.7         +6  -0      ossp-pkg/lmtp2nntp/fixme.h
    1.24        +22 -0      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.18        +0  -18     ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/fixme.h
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 fixme.h
  --- ossp-pkg/lmtp2nntp/fixme.h	31 Jan 2002 13:44:05 -0000	1.6
  +++ ossp-pkg/lmtp2nntp/fixme.h	31 Jan 2002 13:54:21 -0000	1.7
  @@ -107,4 +107,10 @@
   #define ERR_EXECUTION 1
   #define ERR_DELIVERY -2
   
  +enum {
  +    GROUPMODE_ARG,
  +    GROUPMODE_ENVELOPE,
  +    GROUPMODE_HEADER
  +};
  +
   #endif /* __FIXME_H__ */
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	31 Jan 2002 13:48:27 -0000	1.23
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	31 Jan 2002 13:54:21 -0000	1.24
  @@ -404,6 +404,28 @@
       }
       catch (ex)
           rethrow;
  +
  +    /* --groupmode SINGLE */
  +    try {
  +        if (   (val_get(ctx->val, "option.groupmode", &ov) != VAL_OK)
  +            || (ov->ndata != 1)
  +            || (ov->data.s == NULL)
  +              ) throw(0,0,0);
  +        log1(ctx, TRACE, "--groupmode = \"%s\"", ov->data.s);
  +
  +        if      (strcasecmp(ov->data.s, "arg") == 0)
  +            ctx->option_groupmode = GROUPMODE_ARG;
  +        else if (strcasecmp(ov->data.s, "envelope") == 0)
  +            ctx->option_groupmode = GROUPMODE_ENVELOPE;
  +        else if (strcasecmp(ov->data.s, "header") == 0)
  +            ctx->option_groupmode = GROUPMODE_HEADER;
  +        else {
  +            log1(ctx, ERROR, "option --groupmode, invalid mode (%s)", ov->data.s);
  +            throw(0,0,0);
  +        }
  +    }
  +    catch (ex)
  +        rethrow;
   CUS:
       return;
   }
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	31 Jan 2002 13:44:05 -0000	1.17
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	31 Jan 2002 13:54:21 -0000	1.18
  @@ -190,12 +190,6 @@
   static void lmtp_gfs_quit(lmtp2nntp_t *);
   
   enum {
  -    GROUPMODE_ARG,
  -    GROUPMODE_ENVELOPE,
  -    GROUPMODE_HEADER
  -};
  -
  -enum {
       OPERATIONMODE_FAKE,
       OPERATIONMODE_POST,
       OPERATIONMODE_FEED
  @@ -464,18 +458,6 @@
       /* read in the arguments */
       while ((i = getopt(argc, argv, "C:DKP:Va:b:c:d:g:h:l:m:n:o:r:s:t:u:v")) != -1) {
           switch (i) {
  -            case 'g': /*POD [B<-g> I<groupmode>] */
  -                if      (strcasecmp(optarg, "arg") == 0)
  -                    ctx->option_groupmode = GROUPMODE_ARG;
  -                else if (strcasecmp(optarg, "envelope") == 0)
  -                    ctx->option_groupmode = GROUPMODE_ENVELOPE;
  -                else if (strcasecmp(optarg, "header") == 0)
  -                    ctx->option_groupmode = GROUPMODE_HEADER;
  -                else {
  -                    fprintf(stderr, "%s:Error: Invalid mode \"%s\" to option -g\n", ctx->progname, optarg);
  -                    CU(ERR_EXECUTION);
  -                }
  -                break;
               case 'h': /*POD [B<-h> I<header>:<value>] */
                   cpHeadername = strdup(optarg);
                   if ((cp = strchr(cpHeadername, ':')) == NULL) {

From ossp-cvs-owner@ossp.org  Thu Jan 31 15:20:09 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B6FE9764FF; Thu, 31 Jan 2002 15:20:09 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp example.conf lmtp2nntp_config.c lmtp2nn...
Message-Id: <20020131142009.B6FE9764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 15:20:09 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   31-Jan-2002 15:20:09
  Branch: HEAD                             Handle: 2002013114200900

  Modified files:
    ossp-pkg/lmtp2nntp      example.conf lmtp2nntp_config.c lmtp2nntp_main.c

  Log:
    moved --headervalue option

  Summary:
    Revision    Changes     Path
    1.11        +1  -1      ossp-pkg/lmtp2nntp/example.conf
    1.25        +43 -0      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.19        +0  -24     ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/example.conf
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 example.conf
  --- ossp-pkg/lmtp2nntp/example.conf	31 Jan 2002 13:44:05 -0000	1.10
  +++ ossp-pkg/lmtp2nntp/example.conf	31 Jan 2002 14:20:09 -0000	1.11
  @@ -24,7 +24,7 @@
   client          127.0.0.1:45678                 #see -c aka --client
   destination     127.0.0.1:nntp                  #see -d aka --destination
   groupmode       envelope                        #see -g aka --groupmode
  -headervalue     X-gateway "lmtp2nntp gateway"   #see -h aka --headervalue
  +headervalue     'X-gateway: lmtp2nntp gateway'  #see -h aka --headervalue
   #include         "sampleconfig.two"             #    -i aka --include
                                                   #    -l is obsolete since v1.2, see l2spec
   
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	31 Jan 2002 13:54:21 -0000	1.24
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	31 Jan 2002 14:20:09 -0000	1.25
  @@ -426,6 +426,49 @@
       }
       catch (ex)
           rethrow;
  +
  +    /* --headervalue MULTI */
  +    try {
  +        char *cp;
  +        int i;
  +        char *cpHeader;
  +        char *cpValue;
  +
  +        if (   (val_get(ctx->val, "option.headervalue", &ov) != VAL_OK)
  +            || ((ov->ndata >= 1) && (ov->data.m == NULL))
  +              ) throw(0,0,0);
  +        log1(ctx, DEBUG, "ov->ndata = %d", ov->ndata);
  +        for (i = 0; i < ov->ndata; i++)
  +            log2(ctx, TRACE, "--headervalue[%d] = \"%s\"", i, (ov->data.m)[i]);
  +
  +        if ((ctx->pacl = (struct acl *)malloc(ov->ndata * sizeof(struct acl))) == NULL) throw(0,0,0);
  +        for (i = 0; i < ov->ndata; i++) {
  +            cp = (ov->data.m)[i];
  +            log2(ctx, DEBUG, "cp = (data.m)[%d] = \"%s\"", i, cp);
  +            cpHeader = strdup(cp);
  +            if ((cp = strchr(cpHeader, ':')) == NULL) {
  +                log1(ctx, ERROR, "option --headervalue, header (%s) terminating colon missing", (ov->data.m)[i]);
  +                throw(0,0,0);
  +            }
  +            *cp = NUL;
  +            log2(ctx, DEBUG, "header[%d] = \"%s\"", i, cpHeader);
  +            cp++;
  +            while (*cp == ' ') cp++; //FIXME note this in NEWS
  +            if (*cp == NUL) {
  +                log1(ctx, ERROR, "option --headervalue, value (%s) missing", (ov->data.m)[i]);
  +                throw(0,0,0);
  +            }
  +            cpValue = strdup(cp);
  +            log2(ctx, DEBUG, " value[%d] = \"%s\"", i, cpValue);
  +            argz_add(&ctx->azHeaderValuePairs, &ctx->asHeaderValuePairs, cpHeader);
  +            argz_add(&ctx->azHeaderValuePairs, &ctx->asHeaderValuePairs, cpValue);
  +            free(cpHeader);
  +            free(cpValue);
  +        }
  +    }
  +    catch (ex)
  +        rethrow;
  +
   CUS:
       return;
   }
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	31 Jan 2002 13:54:21 -0000	1.18
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	31 Jan 2002 14:20:09 -0000	1.19
  @@ -370,8 +370,6 @@
       char         *cpValue;
       int           nValue;
       struct passwd *sPasswd;
  -    char         *cpHeadername;
  -    char         *cpHeadervalue;
   
       /* drop effective uid/gid priviledges */
       seteuid(getuid());
  @@ -458,28 +456,6 @@
       /* read in the arguments */
       while ((i = getopt(argc, argv, "C:DKP:Va:b:c:d:g:h:l:m:n:o:r:s:t:u:v")) != -1) {
           switch (i) {
  -            case 'h': /*POD [B<-h> I<header>:<value>] */
  -                cpHeadername = strdup(optarg);
  -                if ((cp = strchr(cpHeadername, ':')) == NULL) {
  -                    free(cpHeadername);
  -                    fprintf(stderr, "%s:Error: header \"%s\" for -h option not terminated with colon\n", 
  -                            ctx->progname, cpHeadername);
  -                    CU(ERR_EXECUTION);
  -                }
  -                cp++;
  -                if (*cp == NUL) {
  -                    free(cpHeadername);
  -                    fprintf(stderr, "%s:Error: header \"%s\" for -h option has no value\n", 
  -                            ctx->progname, cpHeadername);
  -                    CU(ERR_EXECUTION);
  -                }
  -                cpHeadervalue = strdup(cp);
  -                *cp = NUL;
  -                argz_add(&ctx->azHeaderValuePairs, &ctx->asHeaderValuePairs, cpHeadername);
  -                argz_add(&ctx->azHeaderValuePairs, &ctx->asHeaderValuePairs, cpHeadervalue);
  -                free(cpHeadervalue);
  -                free(cpHeadername);
  -                break;
               case 'm': /*POD [B<-m> I<mailfrom>] */
                   ctx->option_mailfrom = strdup(optarg);
                   /* protect ourselfs from the substitution of backreferences.

From ossp-cvs-owner@ossp.org  Thu Jan 31 15:43:53 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 44C07764FF; Thu, 31 Jan 2002 15:43:53 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c lmtp2nntp_main.c
Message-Id: <20020131144353.44C07764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 15:43:53 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   31-Jan-2002 15:43:53
  Branch: HEAD                             Handle: 2002013114435200

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c lmtp2nntp_main.c

  Log:
    moved --mailfrom option

  Summary:
    Revision    Changes     Path
    1.26        +27 -0      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.20        +0  -16     ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	31 Jan 2002 14:20:09 -0000	1.25
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	31 Jan 2002 14:43:52 -0000	1.26
  @@ -469,6 +469,33 @@
       catch (ex)
           rethrow;
   
  +    /* --mailfrom SINGLE */
  +    try {
  +        char *cp;
  +
  +        if (   (val_get(ctx->val, "option.mailfrom", &ov) != VAL_OK)
  +            || (ov->ndata != 1)
  +            || (ov->data.s == NULL)
  +              ) throw(0,0,0);
  +        log1(ctx, TRACE, "--mailfrom = \"%s\"", ov->data.s);
  +
  +        ctx->option_mailfrom = strdup(ov->data.s);
  +        /* protect ourselfs from the substitution of backreferences.
  +         * Missing varargs would cause segfaults.  Rewrite capturing
  +         * brackets to clustering syntax. Use poor man's s///g
  +         * simulator as current str library doesn't support global
  +         * substitution */
  +        while (str_parse(ctx->option_mailfrom, "s/(.*?)\\((?!\\?:)(.*)/$1(?:$2/", &cp) > 0) {
  +            free(ctx->option_mailfrom);
  +            ctx->option_mailfrom = cp;
  +        }
  +        if (str_parse("<>", ctx->option_mailfrom) == -1) {
  +            log1(ctx, ERROR, "option --mailfrom, illegal regex (%s)", ctx->option_mailfrom);
  +            throw(0,0,0);
  +        }
  +    }
  +    catch (ex)
  +        rethrow;
   CUS:
       return;
   }
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	31 Jan 2002 14:20:09 -0000	1.19
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	31 Jan 2002 14:43:52 -0000	1.20
  @@ -456,22 +456,6 @@
       /* read in the arguments */
       while ((i = getopt(argc, argv, "C:DKP:Va:b:c:d:g:h:l:m:n:o:r:s:t:u:v")) != -1) {
           switch (i) {
  -            case 'm': /*POD [B<-m> I<mailfrom>] */
  -                ctx->option_mailfrom = strdup(optarg);
  -                /* protect ourselfs from the substitution of backreferences.
  -                 * Missing varargs would cause segfaults.  Rewrite capturing
  -                 * brackets to clustering syntax. Use poor man's s///g
  -                 * simulator as current str library doesn't support global
  -                 * substitution */
  -                while (str_parse(ctx->option_mailfrom, "s/(.*?)\\((?!\\?:)(.*)/$1(?:$2/", &cp) > 0) {
  -                    free(ctx->option_mailfrom);
  -                    ctx->option_mailfrom = cp;
  -                }
  -                if (str_parse("<>", ctx->option_mailfrom) == -1) {
  -                    fprintf(stderr, "%s:Error: illegal regex \"%s\" to option -m.\n", ctx->progname, ctx->option_mailfrom);
  -                    CU(ERR_EXECUTION);
  -                }
  -                break;
               case 'n': /*POD [B<-n> I<nodename>] */
                   if (strlen(optarg) > sizeof(ctx->uname.nodename)-1) {
                           fprintf(stderr, "%s:Error: nodename \"%s\" to long to option -n.\n", ctx->progname, optarg);

From ossp-cvs-owner@ossp.org  Thu Jan 31 15:47:14 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EE5E3764FF; Thu, 31 Jan 2002 15:47:13 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c lmtp2nntp_main.c
Message-Id: <20020131144713.EE5E3764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 15:47:13 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   31-Jan-2002 15:47:13
  Branch: HEAD                             Handle: 2002013114471300

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c lmtp2nntp_main.c

  Log:
    moved --nodename option

  Summary:
    Revision    Changes     Path
    1.27        +17 -0      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.21        +0  -7      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	31 Jan 2002 14:43:52 -0000	1.26
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	31 Jan 2002 14:47:13 -0000	1.27
  @@ -496,6 +496,23 @@
       }
       catch (ex)
           rethrow;
  +
  +    /* --nodename SINGLE */
  +    try {
  +        if (   (val_get(ctx->val, "option.nodename", &ov) != VAL_OK)
  +            || (ov->ndata != 1)
  +            || (ov->data.s == NULL)
  +              ) throw(0,0,0);
  +        log1(ctx, TRACE, "--nodename = \"%s\"", ov->data.s);
  +
  +        if (strlen(optarg) > sizeof(ctx->uname.nodename)-1) {
  +            log1(ctx, ERROR, "option --nodename, name (%s) too long", ov->data.s);
  +            throw(0,0,0);
  +        }
  +        strcpy(ctx->uname.nodename, ov->data.s);
  +    }
  +    catch (ex)
  +        rethrow;
   CUS:
       return;
   }
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	31 Jan 2002 14:43:52 -0000	1.20
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	31 Jan 2002 14:47:13 -0000	1.21
  @@ -456,13 +456,6 @@
       /* read in the arguments */
       while ((i = getopt(argc, argv, "C:DKP:Va:b:c:d:g:h:l:m:n:o:r:s:t:u:v")) != -1) {
           switch (i) {
  -            case 'n': /*POD [B<-n> I<nodename>] */
  -                if (strlen(optarg) > sizeof(ctx->uname.nodename)-1) {
  -                        fprintf(stderr, "%s:Error: nodename \"%s\" to long to option -n.\n", ctx->progname, optarg);
  -                        CU(ERR_EXECUTION);
  -                }
  -                strcpy(ctx->uname.nodename, optarg);
  -                break;
               case 'o': /*POD [B<-o> I<operationmode>] */
                   if      (strcasecmp(optarg, "post") == 0)
                       ctx->option_operationmode = OPERATIONMODE_POST;

From ossp-cvs-owner@ossp.org  Thu Jan 31 16:03:24 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 48678764FF; Thu, 31 Jan 2002 16:03:24 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp fixme.h lmtp2nntp_config.c lmtp2nntp_ma...
Message-Id: <20020131150324.48678764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 16:03:24 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   31-Jan-2002 16:03:24
  Branch: HEAD                             Handle: 2002013115032300

  Modified files:
    ossp-pkg/lmtp2nntp      fixme.h lmtp2nntp_config.c lmtp2nntp_main.c

  Log:
    moved --operationmode option

  Summary:
    Revision    Changes     Path
    1.8         +6  -0      ossp-pkg/lmtp2nntp/fixme.h
    1.28        +51 -0      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.22        +0  -46     ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/fixme.h
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 fixme.h
  --- ossp-pkg/lmtp2nntp/fixme.h	31 Jan 2002 13:54:21 -0000	1.7
  +++ ossp-pkg/lmtp2nntp/fixme.h	31 Jan 2002 15:03:23 -0000	1.8
  @@ -113,4 +113,10 @@
       GROUPMODE_HEADER
   };
   
  +enum {
  +    OPERATIONMODE_FAKE,
  +    OPERATIONMODE_POST,
  +    OPERATIONMODE_FEED
  +};
  +
   #endif /* __FIXME_H__ */
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	31 Jan 2002 14:47:13 -0000	1.27
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	31 Jan 2002 15:03:23 -0000	1.28
  @@ -513,6 +513,57 @@
       }
       catch (ex)
           rethrow;
  +
  +    /* --operationmode SINGLE */
  +    try {
  +        char *cp;
  +
  +        if (   (val_get(ctx->val, "option.operationmode", &ov) != VAL_OK)
  +            || (ov->ndata != 1)
  +            || (ov->data.s == NULL)
  +              ) throw(0,0,0);
  +        log1(ctx, TRACE, "--operationmode = \"%s\"", ov->data.s);
  +
  +        cp = strdup(ov->data.s);
  +        if      (strcasecmp(cp, "post") == 0)
  +            ctx->option_operationmode = OPERATIONMODE_POST;
  +        else if (strcasecmp(cp, "feed") == 0)
  +            ctx->option_operationmode = OPERATIONMODE_FEED;
  +        else {
  +            if (strlen(cp) != 9) {
  +                log1(ctx, ERROR, "option --operationmode, invalid length (%s)", cp);
  +                throw(0,0,0);
  +            }
  +            if (cp[3] != '/') {
  +                log1(ctx, ERROR, "option --operationmode, missing slash (%s)", cp);
  +                throw(0,0,0);
  +            }
  +            cp[3] = NUL;
  +            ctx->option_operationmodefakestatus = &cp[0];
  +            ctx->option_operationmodefakedsn    = &cp[4];
  +            if (   strlen(ctx->option_operationmodefakestatus) != 3
  +                || !isdigit((int)ctx->option_operationmodefakestatus[0])
  +                || !isdigit((int)ctx->option_operationmodefakestatus[1])
  +                || !isdigit((int)ctx->option_operationmodefakestatus[2])
  +                  ) {
  +                log1(ctx, ERROR, "option --operationmode, invalid status code (%s)", cp);
  +                throw(0,0,0);
  +            }
  +            if (   (strlen(ctx->option_operationmodefakedsn) != 5)
  +                || !isdigit((int)ctx->option_operationmodefakedsn[0])
  +                || (ctx->option_operationmodefakedsn[1] != '.')
  +                || !isdigit((int)ctx->option_operationmodefakedsn[2])
  +                || (ctx->option_operationmodefakedsn[3] != '.')
  +                || !isdigit((int)ctx->option_operationmodefakedsn[4])
  +                || (ctx->option_operationmodefakedsn[0] != ctx->option_operationmodefakestatus[0])
  +                  ) {
  +                log1(ctx, ERROR, "option --operationmode, invalid dsn code (%s)", cp);
  +                throw(0,0,0);
  +            }
  +        }
  +    }
  +    catch (ex)
  +        rethrow;
   CUS:
       return;
   }
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	31 Jan 2002 14:47:13 -0000	1.21
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	31 Jan 2002 15:03:23 -0000	1.22
  @@ -189,12 +189,6 @@
   static void lmtp_gfs_rset(lmtp2nntp_t *);
   static void lmtp_gfs_quit(lmtp2nntp_t *);
   
  -enum {
  -    OPERATIONMODE_FAKE,
  -    OPERATIONMODE_POST,
  -    OPERATIONMODE_FEED
  -};
  -
   /*
    * print usage information
    */
  @@ -456,46 +450,6 @@
       /* read in the arguments */
       while ((i = getopt(argc, argv, "C:DKP:Va:b:c:d:g:h:l:m:n:o:r:s:t:u:v")) != -1) {
           switch (i) {
  -            case 'o': /*POD [B<-o> I<operationmode>] */
  -                if      (strcasecmp(optarg, "post") == 0)
  -                    ctx->option_operationmode = OPERATIONMODE_POST;
  -                else if (strcasecmp(optarg, "feed") == 0)
  -                    ctx->option_operationmode = OPERATIONMODE_FEED;
  -                else {
  -                    if (strlen(optarg) != 9) {
  -                        fprintf(stderr, "%s:Error: Invalid format or length \"%s\" to option -o\n", ctx->progname, optarg);
  -                        CU(ERR_EXECUTION);
  -                    }
  -
  -                    if (optarg[3] != '/') {
  -                        fprintf(stderr, "%s:Error: Invalid format or missing slash \"%s\" to option -o\n", ctx->progname, optarg);
  -                        CU(ERR_EXECUTION);
  -                    }
  -
  -                    optarg[3] = NUL;
  -                    ctx->option_operationmodefakestatus = &optarg[0];
  -                    ctx->option_operationmodefakedsn    = &optarg[4];
  -
  -                    if (   strlen(ctx->option_operationmodefakestatus) != 3
  -                        || !isdigit((int)ctx->option_operationmodefakestatus[0])
  -                        || !isdigit((int)ctx->option_operationmodefakestatus[1])
  -                        || !isdigit((int)ctx->option_operationmodefakestatus[2])) {
  -                            fprintf(stderr, "%s:Error: Invalid status in format \"%s\" to option -o\n", ctx->progname, optarg);
  -                            CU(ERR_EXECUTION);
  -                        }
  -
  -                    if (   (strlen(ctx->option_operationmodefakedsn) != 5)
  -                        || !isdigit((int)ctx->option_operationmodefakedsn[0])
  -                        || (ctx->option_operationmodefakedsn[1] != '.')
  -                        || !isdigit((int)ctx->option_operationmodefakedsn[2])
  -                        || (ctx->option_operationmodefakedsn[3] != '.')
  -                        || !isdigit((int)ctx->option_operationmodefakedsn[4])
  -                        || (ctx->option_operationmodefakedsn[0] != ctx->option_operationmodefakestatus[0])) {
  -                            fprintf(stderr, "%s:Error: Invalid dsn in format \"%s\" to option -o\n", ctx->progname, optarg);
  -                            CU(ERR_EXECUTION);
  -                        }
  -                    }
  -                break;
               case 'r': /*POD [B<-r> I<restrictheader>] */
                   ctx->option_restrictheader = strdup(optarg);
                   /* protect ourselfs from the substitution of backreferences.

From ossp-cvs-owner@ossp.org  Thu Jan 31 16:03:52 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 198CA764F3; Thu, 31 Jan 2002 16:03:52 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c
Message-Id: <20020131150352.198CA764F3@mail.ossp.org>
Date: Thu, 31 Jan 2002 16:03:52 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   31-Jan-2002 16:03:52
  Branch: HEAD                             Handle: 2002013115035100

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c

  Log:
    bugfix

  Summary:
    Revision    Changes     Path
    1.29        +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	31 Jan 2002 15:03:23 -0000	1.28
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	31 Jan 2002 15:03:51 -0000	1.29
  @@ -505,7 +505,7 @@
                 ) throw(0,0,0);
           log1(ctx, TRACE, "--nodename = \"%s\"", ov->data.s);
   
  -        if (strlen(optarg) > sizeof(ctx->uname.nodename)-1) {
  +        if (strlen(ov->data.s) > sizeof(ctx->uname.nodename)-1) {
               log1(ctx, ERROR, "option --nodename, name (%s) too long", ov->data.s);
               throw(0,0,0);
           }

From ossp-cvs-owner@ossp.org  Thu Jan 31 16:09:26 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 309A8764FF; Thu, 31 Jan 2002 16:09:26 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c lmtp2nntp_main.c lmt...
Message-Id: <20020131150926.309A8764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 16:09:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   31-Jan-2002 16:09:26
  Branch: HEAD                             Handle: 2002013115092500

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c lmtp2nntp_main.c
                            lmtp2nntp_option.c

  Log:
    moved --restrictheader option

  Summary:
    Revision    Changes     Path
    1.30        +28 -0      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.23        +0  -16     ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
    1.5         +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	31 Jan 2002 15:03:51 -0000	1.29
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	31 Jan 2002 15:09:25 -0000	1.30
  @@ -564,6 +564,34 @@
       }
       catch (ex)
           rethrow;
  +
  +    /* --restrictheader SINGLE */
  +    try {
  +        char *cp;
  +
  +        if (   (val_get(ctx->val, "option.restrictheader", &ov) != VAL_OK)
  +            || (ov->ndata != 1)
  +            || (ov->data.s == NULL)
  +              ) throw(0,0,0);
  +        log1(ctx, TRACE, "--restrictheader = \"%s\"", ov->data.s);
  +
  +        ctx->option_restrictheader = strdup(ov->data.s);
  +        /* protect ourselfs from the substitution of backreferences.
  +         * Missing varargs would cause segfaults.  Rewrite capturing
  +         * brackets to clustering syntax. Use poor man's s///g
  +         * simulator as current str library doesn't support global
  +         * substitution */
  +        while (str_parse(ctx->option_restrictheader, "s/(.*?)\\((?!\\?:)(.*)/$1(?:$2/", &cp) > 0) {
  +            free(ctx->option_restrictheader);
  +            ctx->option_restrictheader = cp;
  +        }
  +        if (str_parse("<>", ctx->option_restrictheader) == -1) {
  +            log1(ctx, ERROR, "option --restrictheader, illegal regex (%s)", ctx->option_restrictheader);
  +            throw(0,0,0);
  +        }
  +    }
  +    catch (ex)
  +        rethrow;
   CUS:
       return;
   }
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	31 Jan 2002 15:03:23 -0000	1.22
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	31 Jan 2002 15:09:25 -0000	1.23
  @@ -450,22 +450,6 @@
       /* read in the arguments */
       while ((i = getopt(argc, argv, "C:DKP:Va:b:c:d:g:h:l:m:n:o:r:s:t:u:v")) != -1) {
           switch (i) {
  -            case 'r': /*POD [B<-r> I<restrictheader>] */
  -                ctx->option_restrictheader = strdup(optarg);
  -                /* protect ourselfs from the substitution of backreferences.
  -                 * Missing varargs would cause segfaults.  Rewrite capturing
  -                 * brackets to clustering syntax. Use poor man's s///g
  -                 * simulator as current str library doesn't support global
  -                 * substitution */
  -                while (str_parse(ctx->option_restrictheader, "s/(.*?)\\((?!\\?:)(.*)/$1(?:$2/", &cp) > 0) {
  -                    free(ctx->option_restrictheader);
  -                    ctx->option_restrictheader = cp;
  -                }
  -                if (str_parse("<>", ctx->option_restrictheader) == -1) {
  -                    fprintf(stderr, "%s:Error: illegal regex \"%s\" to option -r.\n", ctx->progname, ctx->option_restrictheader);
  -                    CU(ERR_EXECUTION);
  -                }
  -                break;
               case 's': /*POD [B<-s> I<size>] */
                   ctx->option_maxmessagesize = atoi(optarg);
                   if(ctx->option_maxmessagesize < 64) {
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 lmtp2nntp_option.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	30 Jan 2002 16:41:02 -0000	1.4
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	31 Jan 2002 15:09:25 -0000	1.5
  @@ -625,7 +625,7 @@
       (void)option_register(o, "operationmode",      'o', OPT_SINGLE, &stdsyntax, "m/.*/",     "foo22", "post|feed" );
       (void)option_register(o, "l2spec",             'l', OPT_SINGLE, &stdsyntax, "m/.*/",     "L2 channel tree textual specification", "l2spec" );
       (void)option_register(o, "uid",                'u', OPT_SINGLE, &stdsyntax, "m/.*/",     "foo24", "number|name" );
  -    (void)option_register(o, "restrictheader",     'r', OPT_MULTI,  &stdsyntax, "m/.*/",     "foo25", "regex" );
  +    (void)option_register(o, "restrictheader",     'r', OPT_SINGLE, &stdsyntax, "m/.*/",     "foo25", "regex" );
       (void)option_register(o, "newsgroup",          NUL, OPT_MULTI,  &stdsyntax, "m/.*/",     "foo26", "newsgroup");
   
   #if 0

From ossp-cvs-owner@ossp.org  Thu Jan 31 16:13:17 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0FEDB764FF; Thu, 31 Jan 2002 16:13:17 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.pod lmtp2nntp_config.c lmtp2n...
Message-Id: <20020131151317.0FEDB764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 16:13:17 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   31-Jan-2002 16:13:16
  Branch: HEAD                             Handle: 2002013115131600

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.pod lmtp2nntp_config.c lmtp2nntp_main.c

  Log:
    moved --size option

  Summary:
    Revision    Changes     Path
    1.36        +1  -2      ossp-pkg/lmtp2nntp/lmtp2nntp.pod
    1.31        +17 -0      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.24        +0  -7      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ============================================================
  $ cvs diff -u -r1.35 -r1.36 lmtp2nntp.pod
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.pod	9 Jan 2002 13:51:59 -0000	1.35
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.pod	31 Jan 2002 15:13:16 -0000	1.36
  @@ -209,8 +209,7 @@
   
   =item B<-s> I<size>
   
  -Size limitation on message in bytes. Default is 8388608 (8M). Values below 64
  -are considered unacceptable small.
  +Size limitation on message in bytes. Default is 8388608 (8M).
   
   =item B<-t> I<name>=I<sec>[,I<name>=I<sec>[,...]
   
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	31 Jan 2002 15:09:25 -0000	1.30
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	31 Jan 2002 15:13:16 -0000	1.31
  @@ -592,6 +592,23 @@
       }
       catch (ex)
           rethrow;
  +
  +    /* --size SINGLE */
  +    try {
  +        if (   (val_get(ctx->val, "option.size", &ov) != VAL_OK)
  +            || (ov->ndata != 1)
  +            || (ov->data.s == NULL)
  +              ) throw(0,0,0);
  +        log1(ctx, TRACE, "--size = \"%s\"", ov->data.s);
  +
  +        if ((ctx->option_maxmessagesize = atoi(ov->data.s)) <= 0) {
  +            log1(ctx, ERROR, "option --size, number (%d) out of range", ctx->option_maxmessagesize);
  +            throw(0,0,0);
  +        }
  +    }
  +    catch (ex)
  +        rethrow;
  +
   CUS:
       return;
   }
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	31 Jan 2002 15:09:25 -0000	1.23
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	31 Jan 2002 15:13:16 -0000	1.24
  @@ -450,13 +450,6 @@
       /* read in the arguments */
       while ((i = getopt(argc, argv, "C:DKP:Va:b:c:d:g:h:l:m:n:o:r:s:t:u:v")) != -1) {
           switch (i) {
  -            case 's': /*POD [B<-s> I<size>] */
  -                ctx->option_maxmessagesize = atoi(optarg);
  -                if(ctx->option_maxmessagesize < 64) {
  -                    fprintf(stderr, "%s:Error: maximum message size is unacceptable small.\n", ctx->progname);
  -                    CU(ERR_EXECUTION);
  -                }
  -                break;
               case 't': /*POD [B<-t> I<name>=I<sec>[,I<name>=I<sec>[,...]] */
                   if (argz_create_sep(optarg, ',', &azTimeout, &asTimeout) != 0)
                       CU(ERR_EXECUTION);

From ossp-cvs-owner@ossp.org  Thu Jan 31 16:32:52 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 97A0F764FF; Thu, 31 Jan 2002 16:32:52 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp example.conf lmtp2nntp_config.c lmtp2nn...
Message-Id: <20020131153252.97A0F764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 16:32:52 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   31-Jan-2002 16:32:52
  Branch: HEAD                             Handle: 2002013115325100

  Modified files:
    ossp-pkg/lmtp2nntp      example.conf lmtp2nntp_config.c lmtp2nntp_main.c
                            lmtp2nntp_option.c

  Log:
    moved --timeout_XXX options

  Summary:
    Revision    Changes     Path
    1.12        +2  -0      ossp-pkg/lmtp2nntp/example.conf
    1.32        +138 -0     ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.25        +0  -52     ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
    1.6         +4  -2      ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/example.conf
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 example.conf
  --- ossp-pkg/lmtp2nntp/example.conf	31 Jan 2002 14:20:09 -0000	1.11
  +++ ossp-pkg/lmtp2nntp/example.conf	31 Jan 2002 15:32:51 -0000	1.12
  @@ -41,9 +41,11 @@
   operationmode   post                            #see -o aka --operationmode
   restrictheader  "Cc: j\.doe@example\.org"       #see -r aka --restrictheader
   size            555000                          #see -s aka --size
  +timeoutlmtp        0                            #see        --timeoutlmtp, default for accept, read, write
   timeoutlmtpaccept  0                            #see        --timeoutlmtpaccept
   timeoutlmtpread    10                           #see        --timeoutlmtpread
   timeoutlmtpwrite   10                           #see        --timeoutlmtpwrite
  +timeoutnntp        30                           #see        --timeoutnntp, default for connect, read, write
   timeoutnntpconnect 360                          #see        --timeoutnntpconnect
   timeoutnntpread    60                           #see        --timeoutnntpread
   timeoutnntpwrite   60                           #see        --timeoutnntpwrite
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	31 Jan 2002 15:13:16 -0000	1.31
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	31 Jan 2002 15:32:51 -0000	1.32
  @@ -609,6 +609,144 @@
       catch (ex)
           rethrow;
   
  +    /* --timeoutlmtp SINGLE */
  +    try {
  +        int i;
  +
  +        if (   (val_get(ctx->val, "option.timeoutlmtp", &ov) != VAL_OK)
  +            || (ov->ndata != 1)
  +            || (ov->data.s == NULL)
  +              ) throw(0,0,0);
  +        log1(ctx, TRACE, "--timeoutlmtp= \"%s\"", ov->data.s);
  +
  +        if ((i = atoi(ov->data.s)) < 0) {
  +            log1(ctx, ERROR, "option --timeoutlmtp, number (%d) out of range", i);
  +            throw(0,0,0);
  +        }
  +        ctx->option_timeout_lmtp_accept = i;
  +        ctx->option_timeout_lmtp_read = i;
  +        ctx->option_timeout_lmtp_write = i;
  +    }
  +    catch (ex)
  +        rethrow;
  +
  +    /* --timeoutlmtpaccept SINGLE */
  +    try {
  +        if (   (val_get(ctx->val, "option.timeoutlmtpaccept", &ov) != VAL_OK)
  +            || (ov->ndata != 1)
  +            || (ov->data.s == NULL)
  +              ) throw(0,0,0);
  +        log1(ctx, TRACE, "--timeoutlmtpaccept = \"%s\"", ov->data.s);
  +
  +        if ((ctx->option_timeout_lmtp_accept = atoi(ov->data.s)) < 0) {
  +            log1(ctx, ERROR, "option --timeoutlmtpaccept, number (%d) out of range", ctx->option_timeout_lmtp_accept);
  +            throw(0,0,0);
  +        }
  +    }
  +    catch (ex)
  +        rethrow;
  +
  +    /* --timeoutlmtpread SINGLE */
  +    try {
  +        if (   (val_get(ctx->val, "option.timeoutlmtpread", &ov) != VAL_OK)
  +            || (ov->ndata != 1)
  +            || (ov->data.s == NULL)
  +              ) throw(0,0,0);
  +        log1(ctx, TRACE, "--timeoutlmtpread = \"%s\"", ov->data.s);
  +
  +        if ((ctx->option_timeout_lmtp_read = atoi(ov->data.s)) < 0) {
  +            log1(ctx, ERROR, "option --timeoutlmtpread, number (%d) out of range", ctx->option_timeout_lmtp_read);
  +            throw(0,0,0);
  +        }
  +    }
  +    catch (ex)
  +        rethrow;
  +
  +    /* --timeoutlmtpwrite SINGLE */
  +    try {
  +        if (   (val_get(ctx->val, "option.timeoutlmtpwrite", &ov) != VAL_OK)
  +            || (ov->ndata != 1)
  +            || (ov->data.s == NULL)
  +              ) throw(0,0,0);
  +        log1(ctx, TRACE, "--timeoutlmtpwrite = \"%s\"", ov->data.s);
  +
  +        if ((ctx->option_timeout_lmtp_write = atoi(ov->data.s)) < 0) {
  +            log1(ctx, ERROR, "option --timeoutlmtpwrite, number (%d) out of range", ctx->option_timeout_lmtp_write);
  +            throw(0,0,0);
  +        }
  +    }
  +    catch (ex)
  +        rethrow;
  +
  +    /* --timeoutnntp SINGLE */
  +    try {
  +        int i;
  +
  +        if (   (val_get(ctx->val, "option.timeoutnntp", &ov) != VAL_OK)
  +            || (ov->ndata != 1)
  +            || (ov->data.s == NULL)
  +              ) throw(0,0,0);
  +        log1(ctx, TRACE, "--timeoutnntp= \"%s\"", ov->data.s);
  +
  +        if ((i = atoi(ov->data.s)) < 0) {
  +            log1(ctx, ERROR, "option --timeoutnntp, number (%d) out of range", i);
  +            throw(0,0,0);
  +        }
  +        ctx->option_timeout_nntp_connect = i;
  +        ctx->option_timeout_nntp_read = i;
  +        ctx->option_timeout_nntp_write = i;
  +    }
  +    catch (ex)
  +        rethrow;
  +
  +    /* --timeoutnntpconnect SINGLE */
  +    try {
  +        if (   (val_get(ctx->val, "option.timeoutnntpconnect", &ov) != VAL_OK)
  +            || (ov->ndata != 1)
  +            || (ov->data.s == NULL)
  +              ) throw(0,0,0);
  +        log1(ctx, TRACE, "--timeoutnntpconnect = \"%s\"", ov->data.s);
  +
  +        if ((ctx->option_timeout_nntp_connect = atoi(ov->data.s)) < 0) {
  +            log1(ctx, ERROR, "option --timeoutnntpconnect, number (%d) out of range", ctx->option_timeout_nntp_connect);
  +            throw(0,0,0);
  +        }
  +    }
  +    catch (ex)
  +        rethrow;
  +
  +    /* --timeoutnntpread SINGLE */
  +    try {
  +        if (   (val_get(ctx->val, "option.timeoutnntpread", &ov) != VAL_OK)
  +            || (ov->ndata != 1)
  +            || (ov->data.s == NULL)
  +              ) throw(0,0,0);
  +        log1(ctx, TRACE, "--timeoutnntpread = \"%s\"", ov->data.s);
  +
  +        if ((ctx->option_timeout_nntp_read = atoi(ov->data.s)) < 0) {
  +            log1(ctx, ERROR, "option --timeoutnntpread, number (%d) out of range", ctx->option_timeout_nntp_read);
  +            throw(0,0,0);
  +        }
  +    }
  +    catch (ex)
  +        rethrow;
  +
  +    /* --timeoutnntpwrite SINGLE */
  +    try {
  +        if (   (val_get(ctx->val, "option.timeoutnntpwrite", &ov) != VAL_OK)
  +            || (ov->ndata != 1)
  +            || (ov->data.s == NULL)
  +              ) throw(0,0,0);
  +        log1(ctx, TRACE, "--timeoutnntpwrite = \"%s\"", ov->data.s);
  +
  +        if ((ctx->option_timeout_nntp_write = atoi(ov->data.s)) < 0) {
  +            log1(ctx, ERROR, "option --timeoutnntpwrite, number (%d) out of range", ctx->option_timeout_nntp_write);
  +            throw(0,0,0);
  +        }
  +    }
  +    catch (ex)
  +        rethrow;
  +
   CUS:
       return;
   }
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	31 Jan 2002 15:13:16 -0000	1.24
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	31 Jan 2002 15:32:51 -0000	1.25
  @@ -355,14 +355,8 @@
       lmtp2nntp_t  *ctx = NULL;
       int           bOk;
       int           i;             /* general purpose scratch int, index ... */
  -    char         *cp;            /* general purpose character pointer */
  -    char         *azTimeout;
  -    size_t        asTimeout;
       pid_t         pid;
       FILE         *fd;
  -    char         *cpName;
  -    char         *cpValue;
  -    int           nValue;
       struct passwd *sPasswd;
   
       /* drop effective uid/gid priviledges */
  @@ -450,52 +444,6 @@
       /* read in the arguments */
       while ((i = getopt(argc, argv, "C:DKP:Va:b:c:d:g:h:l:m:n:o:r:s:t:u:v")) != -1) {
           switch (i) {
  -            case 't': /*POD [B<-t> I<name>=I<sec>[,I<name>=I<sec>[,...]] */
  -                if (argz_create_sep(optarg, ',', &azTimeout, &asTimeout) != 0)
  -                    CU(ERR_EXECUTION);
  -                cp = NULL;
  -                while ((cp = argz_next(azTimeout, asTimeout, cp)) != NULL) {
  -                    cpName = strdup(cp);
  -                    if ((cpValue = strrchr(cpName, '=')) == NULL) {
  -                        fprintf(stderr, "%s:Error: comma-seperated argument %s to option -t have to be name=value.\n", ctx->progname, cp);
  -                        CU(ERR_EXECUTION);
  -                    }
  -                    *cpValue++ = NUL;
  -                    nValue = atoi(cpValue);
  -                    if (nValue < 0) {
  -                        fprintf(stderr, "%s:Error: timeout %s=%d to option -t must be a positive integer.\n", ctx->progname, cpName, nValue);
  -                        CU(ERR_EXECUTION);
  -                    }
  -                    if (strcmp(cpName, "lmtp") == 0) {
  -                        ctx->option_timeout_lmtp_accept = nValue;
  -                        ctx->option_timeout_lmtp_read = nValue;
  -                        ctx->option_timeout_lmtp_write = nValue;
  -                    }
  -                    else if (strcmp(cpName, "lmtp:accept") == 0)
  -                        ctx->option_timeout_lmtp_accept = nValue;
  -                    else if (strcmp(cpName, "lmtp:read") == 0)
  -                        ctx->option_timeout_lmtp_read = nValue;
  -                    else if (strcmp(cpName, "lmtp:write") == 0)
  -                        ctx->option_timeout_lmtp_write = nValue;
  -                    else if (strcmp(cpName, "nntp") == 0) {
  -                        ctx->option_timeout_nntp_connect = nValue;
  -                        ctx->option_timeout_nntp_read = nValue;
  -                        ctx->option_timeout_nntp_write = nValue;
  -                    }
  -                    else if (strcmp(cpName, "nntp:connect") == 0)
  -                        ctx->option_timeout_nntp_connect = nValue;
  -                    else if (strcmp(cpName, "nntp:read") == 0)
  -                        ctx->option_timeout_nntp_read = nValue;
  -                    else if (strcmp(cpName, "nntp:write") == 0)
  -                        ctx->option_timeout_nntp_write = nValue;
  -                    else {
  -                        fprintf(stderr, "%s:Error: unknown timeout %s to option -t.\n", ctx->progname, cpName);
  -                        CU(ERR_EXECUTION);
  -                    }
  -                    free(cpName);
  -                }
  -                free(azTimeout);
  -                break;
               case 'u': /*POD [B<-u> I<uid>] */
                   if (isdigit((int)optarg[0])) {
                       if ((sPasswd = getpwuid((uid_t)atoi(optarg))) == NULL) {
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 lmtp2nntp_option.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	31 Jan 2002 15:09:25 -0000	1.5
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	31 Jan 2002 15:32:51 -0000	1.6
  @@ -614,10 +614,12 @@
       (void)option_register(o, "headervalue",        'h', OPT_MULTI,  &stdsyntax, "m/.*/",     "foo11", "header: value" );
       (void)option_register(o, "include",            'i', OPT_MULTI,  &includeit, "m/.*/",     "foo12", "configfile" );
       (void)option_register(o, "size",               's', OPT_SINGLE, &stdsyntax, "m/.*/",     "foo13", "bytes" );
  -    (void)option_register(o, "timeoutlmtpaccept",  NUL, OPT_SINGLE, &stdsyntax, "m/.*/",     "foo14", "sec" );
  +    (void)option_register(o, "timeoutlmtp",        NUL, OPT_SINGLE, &stdsyntax, "m/.*/",     "foo14", "sec" );
  +    (void)option_register(o, "timeoutlmtpaccept",  NUL, OPT_SINGLE, &stdsyntax, "m/.*/",     "fo14a", "sec" );
       (void)option_register(o, "timeoutlmtpread",    NUL, OPT_SINGLE, &stdsyntax, "m/.*/",     "foo15", "sec" );
       (void)option_register(o, "timeoutlmtpwrite",   NUL, OPT_SINGLE, &stdsyntax, "m/.*/",     "foo16", "sec" );
  -    (void)option_register(o, "timeoutnntpconnect", NUL, OPT_SINGLE, &stdsyntax, "m/.*/",     "foo17", "sec" );
  +    (void)option_register(o, "timeoutnntp",        NUL, OPT_SINGLE, &stdsyntax, "m/.*/",     "foo17", "sec" );
  +    (void)option_register(o, "timeoutnntpconnect", NUL, OPT_SINGLE, &stdsyntax, "m/.*/",     "fo17a", "sec" );
       (void)option_register(o, "timeoutnntpread",    NUL, OPT_SINGLE, &stdsyntax, "m/.*/",     "foo18", "sec" );
       (void)option_register(o, "timeoutnntpwrite",   NUL, OPT_SINGLE, &stdsyntax, "m/.*/",     "foo19", "sec" );
       (void)option_register(o, "mailfrom",           'm', OPT_SINGLE, &stdsyntax, "m/.*/",     "foo20", "regex" );

From ossp-cvs-owner@ossp.org  Thu Jan 31 16:42:32 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 75547764FF; Thu, 31 Jan 2002 16:42:32 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp example.conf lmtp2nntp_config.c lmtp2nn...
Message-Id: <20020131154232.75547764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 16:42:32 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   31-Jan-2002 16:42:32
  Branch: HEAD                             Handle: 2002013115423100

  Modified files:
    ossp-pkg/lmtp2nntp      example.conf lmtp2nntp_config.c lmtp2nntp_main.c
                            lmtp2nntp_option.c

  Log:
    moved --user option

  Summary:
    Revision    Changes     Path
    1.13        +1  -1      ossp-pkg/lmtp2nntp/example.conf
    1.33        +27 -0      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.26        +0  -17     ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
    1.7         +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/example.conf
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 example.conf
  --- ossp-pkg/lmtp2nntp/example.conf	31 Jan 2002 15:32:51 -0000	1.12
  +++ ossp-pkg/lmtp2nntp/example.conf	31 Jan 2002 15:42:31 -0000	1.13
  @@ -49,7 +49,7 @@
   timeoutnntpconnect 360                          #see        --timeoutnntpconnect
   timeoutnntpread    60                           #see        --timeoutnntpread
   timeoutnntpwrite   60                           #see        --timeoutnntpwrite
  -uid             gate                            #see -u aka --uid
  +user            gate                            #see -u aka --user
                                                   #    -v aka --version is not available in the configfile
   newsgroup       "test"
   newsgroup       "alt.test"                      #see man page for information about newsgroup
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.32 -r1.33 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	31 Jan 2002 15:32:51 -0000	1.32
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	31 Jan 2002 15:42:31 -0000	1.33
  @@ -29,6 +29,7 @@
   #include <stdio.h>
   #include <sys/stat.h>
   #include <errno.h>
  +#include <pwd.h>
   
   /* third party (included) */
   #include "lmtp2nntp_argz.h"
  @@ -747,6 +748,32 @@
       catch (ex)
           rethrow;
   
  +    /* --user SINGLE */
  +    try {
  +        struct passwd *sPasswd;
  +
  +        if (   (val_get(ctx->val, "option.user", &ov) != VAL_OK)
  +            || (ov->ndata != 1)
  +            || (ov->data.s == NULL)
  +              ) throw(0,0,0);
  +        log1(ctx, TRACE, "--user = \"%s\"", ov->data.s);
  +
  +        if (isdigit((int)ov->data.s[0])) {
  +            if ((sPasswd = getpwuid((uid_t)atoi(ov->data.s))) == NULL) {
  +                log1(ctx, ERROR, "option --user, uid (%s) not found", ov->data.s);
  +                throw(0,0,0);
  +            }
  +        }
  +        else {
  +            if ((sPasswd = getpwnam(optarg)) == NULL) {
  +                log1(ctx, ERROR, "option --user, name (%s) not found", ov->data.s);
  +                throw(0,0,0);
  +            }
  +        }
  +        ctx->option_uid = sPasswd->pw_uid;
  +    }
  +    catch (ex)
  +        rethrow;
   CUS:
       return;
   }
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	31 Jan 2002 15:32:51 -0000	1.25
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	31 Jan 2002 15:42:31 -0000	1.26
  @@ -36,7 +36,6 @@
   #include <sys/wait.h>
   #include <sys/stat.h>
   #include <signal.h>
  -#include <pwd.h>
   
   /* third party (included) */
   #include "lmtp2nntp_argz.h"
  @@ -357,7 +356,6 @@
       int           i;             /* general purpose scratch int, index ... */
       pid_t         pid;
       FILE         *fd;
  -    struct passwd *sPasswd;
   
       /* drop effective uid/gid priviledges */
       seteuid(getuid());
  @@ -444,21 +442,6 @@
       /* read in the arguments */
       while ((i = getopt(argc, argv, "C:DKP:Va:b:c:d:g:h:l:m:n:o:r:s:t:u:v")) != -1) {
           switch (i) {
  -            case 'u': /*POD [B<-u> I<uid>] */
  -                if (isdigit((int)optarg[0])) {
  -                    if ((sPasswd = getpwuid((uid_t)atoi(optarg))) == NULL) {
  -                        fprintf(stderr, "%s:Error: uid \"%s\" not found for -u option.\n", ctx->progname, optarg);
  -                        CU(ERR_EXECUTION);
  -                    }
  -                }
  -                else {
  -                    if ((sPasswd = getpwnam(optarg)) == NULL) {
  -                        fprintf(stderr, "%s:Error: loginname \"%s\" not found for -u option.\n", ctx->progname, optarg);
  -                        CU(ERR_EXECUTION);
  -                    }
  -                }
  -                ctx->option_uid = sPasswd->pw_uid;
  -                break;
               case 'v': /*POD [B<-v>] (version)*/
                   fprintf(stdout, "%s\n", lmtp2nntp_version.v_gnu);
                   CU(0);
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 lmtp2nntp_option.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	31 Jan 2002 15:32:51 -0000	1.6
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	31 Jan 2002 15:42:31 -0000	1.7
  @@ -626,7 +626,7 @@
       (void)option_register(o, "nodename",           'n', OPT_SINGLE, &stdsyntax, "m/.*/",     "foo21", "nodename" );
       (void)option_register(o, "operationmode",      'o', OPT_SINGLE, &stdsyntax, "m/.*/",     "foo22", "post|feed" );
       (void)option_register(o, "l2spec",             'l', OPT_SINGLE, &stdsyntax, "m/.*/",     "L2 channel tree textual specification", "l2spec" );
  -    (void)option_register(o, "uid",                'u', OPT_SINGLE, &stdsyntax, "m/.*/",     "foo24", "number|name" );
  +    (void)option_register(o, "user",               'u', OPT_SINGLE, &stdsyntax, "m/.*/",     "foo24", "uid|name" );
       (void)option_register(o, "restrictheader",     'r', OPT_SINGLE, &stdsyntax, "m/.*/",     "foo25", "regex" );
       (void)option_register(o, "newsgroup",          NUL, OPT_MULTI,  &stdsyntax, "m/.*/",     "foo26", "newsgroup");
   

From ossp-cvs-owner@ossp.org  Thu Jan 31 16:53:44 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 52119764FF; Thu, 31 Jan 2002 16:53:44 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp example.conf lmtp2nntp_config.c lmtp2nn...
Message-Id: <20020131155344.52119764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 16:53:44 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   31-Jan-2002 16:53:44
  Branch: HEAD                             Handle: 2002013115534300

  Modified files:
    ossp-pkg/lmtp2nntp      example.conf lmtp2nntp_config.c lmtp2nntp_main.c
                            lmtp2nntp_option.c

  Log:
    moved --version option

  Summary:
    Revision    Changes     Path
    1.14        +1  -1      ossp-pkg/lmtp2nntp/example.conf
    1.34        +15 -0      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.27        +0  -4      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
    1.8         +1  -0      ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/example.conf
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 example.conf
  --- ossp-pkg/lmtp2nntp/example.conf	31 Jan 2002 15:42:31 -0000	1.13
  +++ ossp-pkg/lmtp2nntp/example.conf	31 Jan 2002 15:53:43 -0000	1.14
  @@ -50,6 +50,6 @@
   timeoutnntpread    60                           #see        --timeoutnntpread
   timeoutnntpwrite   60                           #see        --timeoutnntpwrite
   user            gate                            #see -u aka --user
  -                                                #    -v aka --version is not available in the configfile
  +version                                         #see -v aka --version
   newsgroup       "test"
   newsgroup       "alt.test"                      #see man page for information about newsgroup
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.33 -r1.34 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	31 Jan 2002 15:42:31 -0000	1.33
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	31 Jan 2002 15:53:43 -0000	1.34
  @@ -774,6 +774,21 @@
       }
       catch (ex)
           rethrow;
  +
  +    /* --version FLAG */
  +    try {
  +        if (   (val_get(ctx->val, "option.version", &ov) != VAL_OK)
  +            || (ov->ndata != 1)
  +            || (ov->data.f != 1)
  +              ) throw(0,0,0);
  +        log1(ctx, TRACE, "--version = %d", ov->data.f);
  +
  +        log1(ctx, INFO, "program version %s", lmtp2nntp_version.v_gnu);
  +        fprintf(stdout, "%s\n", lmtp2nntp_version.v_gnu); //FIXME is fprintf really the way to go?
  +
  +    }
  +    catch (ex)
  +        rethrow;
   CUS:
       return;
   }
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	31 Jan 2002 15:42:31 -0000	1.26
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	31 Jan 2002 15:53:43 -0000	1.27
  @@ -442,10 +442,6 @@
       /* read in the arguments */
       while ((i = getopt(argc, argv, "C:DKP:Va:b:c:d:g:h:l:m:n:o:r:s:t:u:v")) != -1) {
           switch (i) {
  -            case 'v': /*POD [B<-v>] (version)*/
  -                fprintf(stdout, "%s\n", lmtp2nntp_version.v_gnu);
  -                CU(0);
  -                break;
               case '?':
               default:
                   usage(ctx->progname);
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 lmtp2nntp_option.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	31 Jan 2002 15:42:31 -0000	1.7
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	31 Jan 2002 15:53:43 -0000	1.8
  @@ -627,6 +627,7 @@
       (void)option_register(o, "operationmode",      'o', OPT_SINGLE, &stdsyntax, "m/.*/",     "foo22", "post|feed" );
       (void)option_register(o, "l2spec",             'l', OPT_SINGLE, &stdsyntax, "m/.*/",     "L2 channel tree textual specification", "l2spec" );
       (void)option_register(o, "user",               'u', OPT_SINGLE, &stdsyntax, "m/.*/",     "foo24", "uid|name" );
  +    (void)option_register(o, "version",            'v', OPT_FLAG,   &stdsyntax, NULL,        "fo24a", NULL );
       (void)option_register(o, "restrictheader",     'r', OPT_SINGLE, &stdsyntax, "m/.*/",     "foo25", "regex" );
       (void)option_register(o, "newsgroup",          NUL, OPT_MULTI,  &stdsyntax, "m/.*/",     "foo26", "newsgroup");
   

From ossp-cvs-owner@ossp.org  Thu Jan 31 16:54:53 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C4E1F764FF; Thu, 31 Jan 2002 16:54:53 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp example.conf lmtp2nntp_config.c
Message-Id: <20020131155453.C4E1F764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 16:54:53 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   31-Jan-2002 16:54:53
  Branch: HEAD                             Handle: 2002013115545300

  Modified files:
    ossp-pkg/lmtp2nntp      example.conf lmtp2nntp_config.c

  Log:
    bugfix

  Summary:
    Revision    Changes     Path
    1.15        +1  -1      ossp-pkg/lmtp2nntp/example.conf
    1.35        +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/example.conf
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 example.conf
  --- ossp-pkg/lmtp2nntp/example.conf	31 Jan 2002 15:53:43 -0000	1.14
  +++ ossp-pkg/lmtp2nntp/example.conf	31 Jan 2002 15:54:53 -0000	1.15
  @@ -49,7 +49,7 @@
   timeoutnntpconnect 360                          #see        --timeoutnntpconnect
   timeoutnntpread    60                           #see        --timeoutnntpread
   timeoutnntpwrite   60                           #see        --timeoutnntpwrite
  -user            gate                            #see -u aka --user
  +user            nobody                          #see -u aka --user
   version                                         #see -v aka --version
   newsgroup       "test"
   newsgroup       "alt.test"                      #see man page for information about newsgroup
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.34 -r1.35 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	31 Jan 2002 15:53:43 -0000	1.34
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	31 Jan 2002 15:54:53 -0000	1.35
  @@ -765,7 +765,7 @@
               }
           }
           else {
  -            if ((sPasswd = getpwnam(optarg)) == NULL) {
  +            if ((sPasswd = getpwnam(ov->data.s)) == NULL) {
                   log1(ctx, ERROR, "option --user, name (%s) not found", ov->data.s);
                   throw(0,0,0);
               }

From ossp-cvs-owner@ossp.org  Thu Jan 31 16:59:13 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0E6C3764FF; Thu, 31 Jan 2002 16:59:13 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c lmtp2nntp_main.c
Message-Id: <20020131155913.0E6C3764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 16:59:13 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   31-Jan-2002 16:59:12
  Branch: HEAD                             Handle: 2002013115591200

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c lmtp2nntp_main.c

  Log:
    moved/added --newsgroup option

  Summary:
    Revision    Changes     Path
    1.36        +22 -0      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.28        +0  -4      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.35 -r1.36 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	31 Jan 2002 15:54:53 -0000	1.35
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	31 Jan 2002 15:59:12 -0000	1.36
  @@ -789,6 +789,28 @@
       }
       catch (ex)
           rethrow;
  +
  +    /* --newsgroup MULTI */
  +    try {
  +        char *cp;
  +        int i;
  +
  +        if (   (val_get(ctx->val, "option.newsgroup", &ov) != VAL_OK)
  +            || ((ov->ndata >= 1) && (ov->data.m == NULL))
  +              ) throw(0,0,0);
  +        log1(ctx, DEBUG, "ov->ndata = %d", ov->ndata);
  +        for (i = 0; i < ov->ndata; i++)
  +            log2(ctx, TRACE, "--newsgroup[%d] = \"%s\"", i, (ov->data.m)[i]);
  +
  +        for (i = 0; i < ov->ndata; i++) {
  +            cp = (ov->data.m)[i];
  +            log2(ctx, DEBUG, "cp = (data.m)[%d] = \"%s\"", i, cp);
  +            argz_add(&ctx->azGroupargs, &ctx->asGroupargs, cp);
  +        }
  +    }
  +    catch (ex)
  +        rethrow;
  +
   CUS:
       return;
   }
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	31 Jan 2002 15:53:43 -0000	1.27
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	31 Jan 2002 15:59:12 -0000	1.28
  @@ -448,10 +448,6 @@
                   CU(ERR_EXECUTION);
           }
       }
  -    /*POD I<newsgroup> [I<newsgroup> ...] */
  -    for (i = optind; i < argc; i++) {
  -        argz_add(&ctx->azGroupargs, &ctx->asGroupargs, argv[i]);
  -    }
   
       /* if no positive ACL exists (option -a) add a wildcard match-all for IPv4 and IPv6 */
       bOk = FALSE;

From ossp-cvs-owner@ossp.org  Thu Jan 31 16:59:54 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E948A764FF; Thu, 31 Jan 2002 16:59:53 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_main.c
Message-Id: <20020131155953.E948A764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 16:59:53 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   31-Jan-2002 16:59:53
  Branch: HEAD                             Handle: 2002013115595300

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_main.c

  Log:
    moved/added --newsgroup option

  Summary:
    Revision    Changes     Path
    1.29        +1  -17     ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	31 Jan 2002 15:59:12 -0000	1.28
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	31 Jan 2002 15:59:53 -0000	1.29
  @@ -423,6 +423,7 @@
       }
       ctx->progname = strdup(argv[0]);
   
  +    /* read in the arguments */
   {
   lmtp2nntp_option_t *o;
   (void)option_create(&o, ctx->val); /* FIXME */
  @@ -431,23 +432,6 @@
   (void)option_destroy(o);
   return 0;
   }
  -
  -    /*POD B<lmtp2nntp> */
  -
  -    /*  use
  -     *  perl <lmtp2nntp.c -e 'while (<>) { if(m/\/\*POD (.*) .*\*\//) { $_=$1; print "$_\n" };}'
  -     *  to pull the POD SYNOPSIS header directly out of this source
  -     */
  -
  -    /* read in the arguments */
  -    while ((i = getopt(argc, argv, "C:DKP:Va:b:c:d:g:h:l:m:n:o:r:s:t:u:v")) != -1) {
  -        switch (i) {
  -            case '?':
  -            default:
  -                usage(ctx->progname);
  -                CU(ERR_EXECUTION);
  -        }
  -    }
   
       /* if no positive ACL exists (option -a) add a wildcard match-all for IPv4 and IPv6 */
       bOk = FALSE;

From ossp-cvs-owner@ossp.org  Thu Jan 31 17:01:01 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6F457764FF; Thu, 31 Jan 2002 17:01:01 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_main.c
Message-Id: <20020131160101.6F457764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 17:01:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   31-Jan-2002 17:01:01
  Branch: HEAD                             Handle: 2002013116010100

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_main.c

  Log:
    remove obsolete usage()

  Summary:
    Revision    Changes     Path
    1.30        +0  -38     ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	31 Jan 2002 15:59:53 -0000	1.29
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	31 Jan 2002 16:01:01 -0000	1.30
  @@ -188,44 +188,6 @@
   static void lmtp_gfs_rset(lmtp2nntp_t *);
   static void lmtp_gfs_quit(lmtp2nntp_t *);
   
  -/*
  - * print usage information
  - */
  -static void usage(char *command)
  -{
  -    /*  use
  -     *  perl <lmtp2nntp.c -e 'while (<>) { if(m/\/\*POD (.*) .*\*\//) { $_=$1; s/.<(.*?)>/$1/g ; print "\"$_ \"\n" };}'
  -     *  to pull the USAGE string out of this source
  -     */
  -    fprintf(stderr, 
  -            "USAGE: %s "
  -            "[-C childsmax] "
  -            "[-D] "
  -            "[-K] "
  -            "[-P pidfile] "
  -            "[-V] "
  -            "[-a addr/mask[,addr/mask[,...]] "
  -            "[-b addr[:port]|-|path[:perms]] "
  -            "[-c addr[:port]] "
  -            "[-d addr[:port][,addr[:port], ...]] "
  -            "[-f configfile] "
  -            "[-g groupmode] "
  -            "[-h header:value] "
  -            "[-l level[:logfile]] "
  -            "[-m mailfrom] "
  -            "[-n nodename] "
  -            "[-o operationmode] "
  -            "[-r restrictheader] "
  -            "[-s size] "
  -            "[-t name=sec[,name=sec[,...]] "
  -            "[-u uid] "
  -            "[-v] "
  -            "newsgroup [newsgroup ...] "
  -            "\n",
  -            command);
  -    return;
  -}
  -
   static ssize_t hook_lmtp_read(void *_ctx, void *buf, size_t nbytes)
   {
       lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx;

From ossp-cvs-owner@ossp.org  Thu Jan 31 17:04:52 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 68115764FF; Thu, 31 Jan 2002 17:04:52 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_main.c
Message-Id: <20020131160452.68115764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 17:04:52 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   31-Jan-2002 17:04:52
  Branch: HEAD                             Handle: 2002013116045100

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_main.c

  Log:
    mounted new option handling

  Summary:
    Revision    Changes     Path
    1.31        +6  -9      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	31 Jan 2002 16:01:01 -0000	1.30
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	31 Jan 2002 16:04:51 -0000	1.31
  @@ -318,6 +318,7 @@
       int           i;             /* general purpose scratch int, index ... */
       pid_t         pid;
       FILE         *fd;
  +    lmtp2nntp_option_t *o;
   
       /* drop effective uid/gid priviledges */
       seteuid(getuid());
  @@ -386,14 +387,9 @@
       ctx->progname = strdup(argv[0]);
   
       /* read in the arguments */
  -{
  -lmtp2nntp_option_t *o;
  -(void)option_create(&o, ctx->val); /* FIXME */
  -(void)option_parse(o, argc, argv);
  -(void)config_context(ctx);
  -(void)option_destroy(o);
  -return 0;
  -}
  +    (void)option_create(&o, ctx->val); /* FIXME */
  +    (void)option_parse(o, argc, argv);
  +    (void)config_context(ctx);
   
       /* if no positive ACL exists (option -a) add a wildcard match-all for IPv4 and IPv6 */
       bOk = FALSE;
  @@ -692,7 +688,8 @@
       if (ctx != NULL)
           free(ctx);
       str_parse(NULL, NULL);
  -    /*FIXME option_destroy(o); */
  +    if (o != NULL)
  +        (void)option_destroy(o);
   
       return rc;
   }

From ossp-cvs-owner@ossp.org  Thu Jan 31 17:31:25 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5FC9C764FF; Thu, 31 Jan 2002 17:31:25 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.example
Message-Id: <20020131163125.5FC9C764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 17:31:25 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   31-Jan-2002 17:31:25
  Branch: HEAD                             Handle: 2002013116312400

  Modified files:
    ossp-pkg/rc             rc.example

  Log:
    Added common section, but mostly cleanup work.

  Summary:
    Revision    Changes     Path
    1.4         +56 -37     ossp-pkg/rc/rc.example
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.example
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 rc.example
  --- ossp-pkg/rc/rc.example	30 Jan 2002 22:55:26 -0000	1.3
  +++ ossp-pkg/rc/rc.example	31 Jan 2002 16:31:24 -0000	1.4
  @@ -1,29 +1,32 @@
   ##
  -##  rc.example
  +##  rc.example - rcfile template
   ##
  -##  Examines different ways of writing run commands for a program.
  -##  If used in production, this file would be different. It would
  -##  have a name like 'rc.helloworld' and contain run commands for
  -##  the 'helloworld' program. It would also have only one notation.
  -##  A sample is repeated in this document using rc (native), XML,
  -##  and ASN.1 notation. The same rcfile semantics are repeated only
  -##  to show what is possible through the abstract syntax offered by
  -##  OSSP rc.
  -##
  -##  To learn what regular expressions must be used with the example
  -##  example syntaxes in this document, refer to the rc.conf file
  -##  included with the original OSSP rc distribution. It has the
  -##  corresponding regular expressions settings.
  +##  This file examines different ways of writing runcommands for a     ##
  +##  program.  If used in production, this file would be different.  It ##
  +##  would have a name like 'rc.helloworld' and contain runcommands     ##
  +##  for the 'helloworld' program. It would also have only one          ##
  +##  notation. A sample is repeated in this document using rc (native), ##
  +##  XML, and ASN.1 notation. The same rcfile semantics are repeated    ##
  +##  only to show what is possible through the abstract syntax offered  ##
  +##  by OSSP rc.                                                        ##
  +##                                                                     ##
  +##  To learn what regular expressions to use with the example          ##
  +##  example syntaxes in this document, refer to the rc.conf file       ##
  +##  included with the original OSSP rc distribution. It has the        ##
  +##  corresponding regular expressions settings.                        ##
  +##                                                                     ##
   
  -# Generic run commands for example daemon. Using native #
  -# rc default symbols and conventional identifiers.      #
  +# Generic runcommands for example daemon. Using #
  +# default symbols and conventional identifiers. #
   
   %confvars
       sftpd_enable="yes"
  -    sftpd_interpreter="/usr/bin/sh"
       sftpd_anonymous="yes"
       sftpd_flags=""
   
  +%common
  +    timeStamp   # Function from rc.func library
  +
   %start -p 200 -u root
       /usr/local/sbin/sftpd -c
   
  @@ -34,24 +37,28 @@
       kill -HUP `cat /var/sftp/run/sftpd.pid` 
   
   %restart -u root
  -    @stop       # reference to term section
  +    @stop       # Reference to term section
       sleep 2
  -    @start      # reference to start section
  +    @start      # Reference to start section
   
   %status -c /usr/bin/perl
       print STDERR "Sftpd status report";
       for ...
  +# End stock syntax example rcfile
  +
   
  -# Generic run commands for example daemon. Using #
  +# Generic runcommands for example daemon. Using  #
   # custom symbols and unconventional identifiers. #
   
   !confvars
       sftpd_enable="yes"
  -    sftpd_interpreter="/usr/bin/sh"
       sftpd_anonymous="yes"
       sftpd_flags=""
   
  -!start -p 200 -u root
  +!prependwith
  +    timeStamp   # Function from rc.func library
  +
  +!run -p 200 -u root
       /usr/local/sbin/sftpd -c
   
   !term -p 200 -u root
  @@ -60,25 +67,30 @@
   !hangup -u root
       kill -HUP `cat /var/sftp/run/sftpd.pid` 
   
  -!restart -u root
  -    &term       # reference to term section
  +!termrun -u root
  +    &term       # Reference to term section
       sleep 2
  -    &start      # reference to start section
  +    &start      # Reference to start section
   
  -!status -c /usr/bin/perl
  +!printstat -c /usr/bin/perl
       print STDERR "Sftpd status report";
       for ...
  +# End custom syntax example rcfile
  +
   
  -# Generic run commands for example daemon. Using an #
  -# XML-like syntax and conventional identifiers.     #
  +# Generic runcommands for example daemon. Using an #
  +# XML-like syntax and conventional identifiers.    #
   
   <config>
       <set name=sftpd_enable>"yes"</set>
  -    <set name=sftpd_interpreter>"/usr/bin/sh"</set>
       <set name=sftpd_anonymous>"yes"</set>
       <set name=sftpd_flags>""</set>
   </config>
   
  +<common>
  +    timeStamp   # Function from rc.func library
  +</common>
  +
   <start pri=200 user=root>
       /usr/local/sbin/sftpd -c
   </start>
  @@ -92,27 +104,33 @@
   </reload>
   
   <restart user=root>
  -    <refer name=stop>   # reference to term section
  +    <refer name=stop>   # Reference to term section
       sleep 2
  -    <refer name=start>  # reference to start section
  +    <refer name=start>  # Reference to start section
   </restart>
   
   <status pri=100 interpreter=/usr/bin/perl>
       print STDERR "Sftpd status report";
       for ...
   </status>
  +# End XML-like syntax example rcfile
   
  -# Generic run commands for example daemon. Using a #
  -# ASN.1-like syntax and conventional identifiers.  #
  +
  +# Generic runcommands for example daemon. Using a #
  +# ASN.1-like syntax and conventional identifiers. #
   
   config CONFIG
       BEGIN
           sftpd_enable STRING ::= "yes"
  -        sftpd_interpreter STRING ::= "/usr/bin/sh"
           sftpd_anonymous STRING ::= "yes"
           sftpd_flags STRING ::= ""
       END
   
  +common COMMON
  +    BEGIN
  +        timeStamp   # Function from rc.func library
  +    END
  +
   start SECTION ::= {
       priority INTEGER ::= 200
       user STRING ::= "root"
  @@ -140,12 +158,12 @@
       user STRING ::= "root"
   }
       BEGIN
  -        stop REFER      # reference to term section
  +        stop REFER  # Reference to term section
           sleep 2
  -        start REFER     # reference to start section
  +        start REFER # Reference to start section
       END
   
  -restart SECTION ::= {
  +status SECTION ::= {
       priority INTEGER ::= 100
       interpreter STRING ::= "/usr/bin/perl"
   }
  @@ -153,3 +171,4 @@
           print STDERR "Sftpd status report";
           for ...
       END
  +# End ASN.1-like syntax example rcfile

From ossp-cvs-owner@ossp.org  Thu Jan 31 17:38:01 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8820B764FF; Thu, 31 Jan 2002 17:38:01 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.example
Message-Id: <20020131163801.8820B764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 17:38:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   31-Jan-2002 17:38:01
  Branch: HEAD                             Handle: 2002013116380100

  Modified files:
    ossp-pkg/rc             rc.example

  Log:
    Add 'error' section for generic rcfile error handling. Add 'default' section
    (modeled after the 'switch' C statement) for user-level processing in case a
    section label is missing. Please review.

  Summary:
    Revision    Changes     Path
    1.5         +62 -0      ossp-pkg/rc/rc.example
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.example
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 rc.example
  --- ossp-pkg/rc/rc.example	31 Jan 2002 16:31:24 -0000	1.4
  +++ ossp-pkg/rc/rc.example	31 Jan 2002 16:38:01 -0000	1.5
  @@ -44,6 +44,20 @@
   %status -c /usr/bin/perl
       print STDERR "Sftpd status report";
       for ...
  +
  +%error # We have a rc (not user-level) error
  +# Very rough representation of built-in rc language
  +    +syslogit DAEMON CRITICAL;
  +    +if ${sftpd_error}
  +        +outconsole ${sftpd_error};
  +    +outconsole "Runcommand-level error in line ";
  +    +lineno SCRIPT; # Not +lineno ABSOLUTE;
  +    +outconsole " of rcfile ";
  +    +rcfilename;
  +
  +%default # Gets hit if no other section label matches
  +    $HOME/bin/popup "Missing section in rc.sftpd!" # Run custom app
  +    @error  # Reference to error section
   # End stock syntax example rcfile
   
   
  @@ -75,6 +89,20 @@
   !printstat -c /usr/bin/perl
       print STDERR "Sftpd status report";
       for ...
  +
  +!problem # We have a rc (not user-level) error
  +# Very rough representation of built-in rc language
  +    +syslogit DAEMON CRITICAL;
  +    +if ${sftpd_error}
  +        +outconsole ${sftpd_error};
  +    +outconsole "Runcommand-level error in line ";
  +    +lineno SCRIPT; # Not +lineno ABSOLUTE;
  +    +outconsole " of rcfile ";
  +    +rcfilename;
  +
  +!missing # Gets hit if no other section label matches
  +    $HOME/bin/popup "Missing section in rc.sftpd!" # Run custom app
  +    @error  # Reference to error section
   # End custom syntax example rcfile
   
   
  @@ -113,6 +141,22 @@
       print STDERR "Sftpd status report";
       for ...
   </status>
  +
  +<error> # We have a rc (not user-level) error
  +# Very rough representation of built-in rc language
  +    +syslogit DAEMON CRITICAL;
  +    +if ${sftpd_error}
  +        +outconsole ${sftpd_error};
  +    +outconsole "Runcommand-level error in line ";
  +    +lineno SCRIPT; # Not +lineno ABSOLUTE;
  +    +outconsole " of rcfile ";
  +    +rcfilename;
  +</error>
  +
  +<default> # Gets hit if no other section label matches
  +    $HOME/bin/popup "Missing section in rc.sftpd!" # Run custom app
  +    <refer name=error>  # Reference to error section
  +</default>
   # End XML-like syntax example rcfile
   
   
  @@ -170,5 +214,23 @@
       BEGIN
           print STDERR "Sftpd status report";
           for ...
  +    END
  +
  +error ERROR # We have a rc (not user-level) error
  +# Very rough representation of built-in rc language
  +    BEGIN
  +        +syslogit DAEMON CRITICAL;
  +        +if ${sftpd_error}
  +            +outconsole ${sftpd_error};
  +        +outconsole "Runcommand-level error in line ";
  +        +lineno SCRIPT; # Not +lineno ABSOLUTE;
  +        +outconsole " of rcfile ";
  +        +rcfilename;
  +    END
  +
  +default DEFAULT # Gets hit if no other section label matches
  +    BEGIN
  +        $HOME/bin/popup "Missing section in rc.sftpd!" # Run custom app
  +        error REFER # Reference to error section
       END
   # End ASN.1-like syntax example rcfile

From ossp-cvs-owner@ossp.org  Thu Jan 31 20:34:54 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2338B764FF; Thu, 31 Jan 2002 20:34:54 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.example
Message-Id: <20020131193454.2338B764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 20:34:54 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   31-Jan-2002 20:34:53
  Branch: HEAD                             Handle: 2002013119345300

  Modified files:
    ossp-pkg/rc             rc.example

  Log:
    Add passed-in arguments, rc_errstring and rc_errcode, section aliases, and
    empty section bodies.

  Summary:
    Revision    Changes     Path
    1.6         +46 -23     ossp-pkg/rc/rc.example
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.example
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 rc.example
  --- ossp-pkg/rc/rc.example	31 Jan 2002 16:38:01 -0000	1.5
  +++ ossp-pkg/rc/rc.example	31 Jan 2002 19:34:53 -0000	1.6
  @@ -37,19 +37,23 @@
       kill -HUP `cat /var/sftp/run/sftpd.pid` 
   
   %restart -u root
  -    @stop       # Reference to term section
  -    sleep 2
  -    @start      # Reference to start section
  +    @stop           # Reference to term section
  +    sleep ${nSleep} # Variable nSleep defined at the command line
  +    @start          # Reference to start section
   
   %status -c /usr/bin/perl
       print STDERR "Sftpd status report";
       for ...
   
  -%error # We have a rc (not user-level) error
  +%init   # Empty section body to prevent %default from running, in
  +        # case the user types rc 'rcfile' 'init' on the command line
  +%go -u root
  +    @start  # A section with just one reference is an alias
  +
  +%error  # We have a rc (not user-level) error
   # Very rough representation of built-in rc language
  -    +syslogit DAEMON CRITICAL;
  -    +if ${sftpd_error}
  -        +outconsole ${sftpd_error};
  +    +logit DAEMON CRITICAL;
  +    +outconsole ${rc_errstring}; # rc_errcode is also available
       +outconsole "Runcommand-level error in line ";
       +lineno SCRIPT; # Not +lineno ABSOLUTE;
       +outconsole " of rcfile ";
  @@ -82,19 +86,23 @@
       kill -HUP `cat /var/sftp/run/sftpd.pid` 
   
   !termrun -u root
  -    &term       # Reference to term section
  -    sleep 2
  -    &start      # Reference to start section
  +    &term           # Reference to term section
  +    sleep ${nSleep} # Variable nSleep defined at the command line
  +    &start          # Reference to start section
   
   !printstat -c /usr/bin/perl
       print STDERR "Sftpd status report";
       for ...
   
  +!runit  # Empty section body to prevent !missing from running, in
  +        # case the user types rc 'rcfile' 'runit' on the command line
  +!doit -u root
  +    &run    # A section with just one reference is an alias
  +
   !problem # We have a rc (not user-level) error
   # Very rough representation of built-in rc language
  -    +syslogit DAEMON CRITICAL;
  -    +if ${sftpd_error}
  -        +outconsole ${sftpd_error};
  +    +logit DAEMON CRITICAL;
  +    +outconsole ${rc_errstring}; # rc_errcode is also available
       +outconsole "Runcommand-level error in line ";
       +lineno SCRIPT; # Not +lineno ABSOLUTE;
       +outconsole " of rcfile ";
  @@ -133,7 +141,7 @@
   
   <restart user=root>
       <refer name=stop>   # Reference to term section
  -    sleep 2
  +    sleep ${nSleep}     # Variable nSleep defined at the command line
       <refer name=start>  # Reference to start section
   </restart>
   
  @@ -142,11 +150,16 @@
       for ...
   </status>
   
  +<init user=root> # Empty section body to prevent <default> from running, in
  +                 # case the user types rc 'rcfile' 'init' on the command line
  +<go user=root>
  +    <refer name=start> # A section with just one reference is an alias
  +</go>
  +
   <error> # We have a rc (not user-level) error
   # Very rough representation of built-in rc language
  -    +syslogit DAEMON CRITICAL;
  -    +if ${sftpd_error}
  -        +outconsole ${sftpd_error};
  +    +logit DAEMON CRITICAL;
  +    +outconsole ${rc_errstring}; # rc_errcode is also available
       +outconsole "Runcommand-level error in line ";
       +lineno SCRIPT; # Not +lineno ABSOLUTE;
       +outconsole " of rcfile ";
  @@ -202,9 +215,9 @@
       user STRING ::= "root"
   }
       BEGIN
  -        stop REFER  # Reference to term section
  -        sleep 2
  -        start REFER # Reference to start section
  +        stop REFER      # Reference to term section
  +        sleep ${nSleep} # Variable nSleep defined at the command line
  +        start REFER     # Reference to start section
       END
   
   status SECTION ::= {
  @@ -216,12 +229,22 @@
           for ...
       END
   
  +init SECTION ::= {} # Empty section body to prevent default from running, in
  +    BEGIN           # case the user types rc 'rcfile' 'init' on the command line
  +    END
  +
  +go SECTION ::= {
  +    user STRING ::= "root"
  +}
  +    BEGIN
  +        start REFER # A section with just one reference is an alias
  +    END
  +
   error ERROR # We have a rc (not user-level) error
   # Very rough representation of built-in rc language
       BEGIN
  -        +syslogit DAEMON CRITICAL;
  -        +if ${sftpd_error}
  -            +outconsole ${sftpd_error};
  +        +logit DAEMON CRITICAL;
  +        +outconsole ${rc_errstring}; # rc_errcode is also available
           +outconsole "Runcommand-level error in line ";
           +lineno SCRIPT; # Not +lineno ABSOLUTE;
           +outconsole " of rcfile ";

From ossp-cvs-owner@ossp.org  Thu Jan 31 20:54:05 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 83CC5764FF; Thu, 31 Jan 2002 20:54:05 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex ex.h
Message-Id: <20020131195405.83CC5764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 20:54:05 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Jan-2002 20:54:05
  Branch: HEAD                             Handle: 2002013119540500

  Modified files:
    ossp-pkg/ex             ex.h

  Log:
    remove USE in macro names. It is already clear without this.

  Summary:
    Revision    Changes     Path
    1.14        +5  -5      ossp-pkg/ex/ex.h
  ____________________________________________________________________________

  Index: ossp-pkg/ex/ex.h
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 ex.h
  --- ossp-pkg/ex/ex.h	30 Jan 2002 10:37:55 -0000	1.13
  +++ ossp-pkg/ex/ex.h	31 Jan 2002 19:54:05 -0000	1.14
  @@ -54,21 +54,21 @@
   #endif
   
   /* the machine context */
  -#if defined(__EX_MCTX_USE_MCSC__)
  +#if defined(__EX_MCTX_MCSC__)
   #include <ucontext.h>            /* POSIX.1 ucontext(3) */
   #define __ex_mctx_struct         ucontext_t uc; 
   #define __ex_mctx_save(mctx)     (getcontext(&(mctx)->uc) == 0)
   #define __ex_mctx_restored(mctx) /* noop */
   #define __ex_mctx_restore(mctx)  (void)setcontext(&(mctx)->uc)
   
  -#elif defined(__EX_MCTX_USE_SSJLJ__)
  +#elif defined(__EX_MCTX_SSJLJ__)
   #include <setjmp.h>              /* POSIX.1 sigjmp_buf(3) */
   #define __ex_mctx_struct         sigjmp_buf jb;
   #define __ex_mctx_save(mctx)     (sigsetjmp((mctx)->jb, 1) == 0)
   #define __ex_mctx_restored(mctx) /* noop */
   #define __ex_mctx_restore(mctx)  (void)siglongjmp((mctx)->jb, 1)
   
  -#elif defined(__EX_MCTX_USE_SJLJ__) || !defined(__EX_MCTX_USE_CUSTOM__)
  +#elif defined(__EX_MCTX_SJLJ__) || !defined(__EX_MCTX_CUSTOM__)
   #include <setjmp.h>              /* ISO C jmp_buf(3) */
   #define __ex_mctx_struct         jmp_buf jb;
   #define __ex_mctx_save(mctx)     (setjmp((mctx)->jb) == 0)
  @@ -207,14 +207,14 @@
       (__ex_ctx()->ctx_disabled)
   
   /* optional namespace mapping */
  -#if defined(__EX_NS_USE_UCCXX__)
  +#if defined(__EX_NS_UCCXX__)
   #define Try      ex_try
   #define Cleanup  ex_cleanup
   #define Catch    ex_catch
   #define Throw    ex_throw
   #define Rethrow  ex_rethrow
   #define Shield   ex_shield
  -#elif defined(__EX_NS_USE_CXX__) || (!defined(__cplusplus) && !defined(__EX_NS_USE_CUSTOM__))
  +#elif defined(__EX_NS_CXX__) || (!defined(__cplusplus) && !defined(__EX_NS_CUSTOM__))
   #define try      ex_try
   #define cleanup  ex_cleanup
   #define catch    ex_catch

From ossp-cvs-owner@ossp.org  Thu Jan 31 21:00:55 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CCF4B764FF; Thu, 31 Jan 2002 21:00:54 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc-sample.pod
Message-Id: <20020131200054.CCF4B764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 21:00:54 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   31-Jan-2002 21:00:54
  Branch: HEAD                             Handle: 2002013120005400

  Modified files:
    ossp-pkg/rc             rc-sample.pod

  Log:
    General edits, added new %default and %error sections.

  Summary:
    Revision    Changes     Path
    1.7         +10 -9      ossp-pkg/rc/rc-sample.pod
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc-sample.pod
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 rc-sample.pod
  --- ossp-pkg/rc/rc-sample.pod	30 Jan 2002 22:55:26 -0000	1.6
  +++ ossp-pkg/rc/rc-sample.pod	31 Jan 2002 20:00:54 -0000	1.7
  @@ -9,10 +9,10 @@
   
   This documents typical use cases for B<OSSP rc>.
   
  -=head1 USE CASE: OpenPKG Run-Command Facility
  +=head1 USE CASE: OpenPKG Runcommand Facility
   
   This describes how B<OSSP rc> is used as the B<OpenPKG>
  -(http://www.openpkg.org/) run-command facility. 
  +(http://www.openpkg.org/) runcommand facility. 
   
   First, the involved files:
   
  @@ -24,7 +24,7 @@
   
   =item F</cw/etc/rc.cf> 
   
  -This is the B<OSSP rc> configuration file, hard-coded into
  +This is the B<OSSP rc> configuration file, hardcoded into
   F</cw/etc/rc> at configure/build time with the Autoconf option
   C<--with-config=/cw/etc/rc.cf>. It is installed at B<OpenPKG>
   bootstrap time and used read-only.
  @@ -39,13 +39,14 @@
    RequireGroup      cw
   
    #   how to parse RC files
  - ParseEnvDef       (?<=^\s*)([a-zA-Z_][a-zA-Z_0-9]*)=(?:"([^"]*)"|'([^']*)'|(\S+))
  + ParseEnvAss       (?<=^\s*)([a-zA-Z_][a-zA-Z_0-9]*)=(?:"([^"]*)"|'([^']*)'|(\S+))
    ParseSectionDef   (?<=^|\n)%([a-zA-Z][a-zA-Z0-9]*)(\s+-[a-zA-Z]\s*\S+)*\s*\n(.+?)(?=\n%%\S+|$)
  + ParseSectionRef   (?<=^\s*|;\s*)@([a-zA-Z][a-zA-Z0-9]*)(\s+[^\n]+)?
    ParseSectionParam (?<=^|\s)-([a-zA-Z])\s*(\S+)
  - ParseSectionRef   (?<=^\s*|;\s*)%([a-zA-Z][a-zA-Z0-9]*)(\s+[^\n]+)?
  - ParseParamRef     \$([0-9])
    NameConfig        config
    NameCommon        common
  + NameDefault       default
  + NameError         error
   
    Execute           root  %s
    Execute           !root sudo %s
  @@ -53,7 +54,7 @@
   
   =item F</cw/etc/rc.func> (C<%common> extensions)
   
  -This is the B<OpenPKG> Bourne-Shell script providing a set of reusable
  +This is the B<OpenPKG> Bourne shell script providing a set of reusable
   functions. It is installed at B<OpenPKG> bootstrap time and used
   read-only.
   
  @@ -85,7 +86,7 @@
   This is the B<OpenPKG> configuration script where the administrator
   overrides the variables from the script's C<%config> sections. It it
   generated (as an empty file) on B<OpenPKG> bootstrap time and manually
  -edited later to influence the behaviours of the package's run-command
  +edited later to influence the behaviours of the package's runcommand
   scripts (here F</cw/etc/rc.d/rc.foo>).
   
    foo_enable=yes
  @@ -93,7 +94,7 @@
   
   =item F</cw/etc/rc.d/rc.foo> 
   
  -This is the example run-command script of an B<OpenPKG> package C<foo>.
  +This is the example runcommand script of an B<OpenPKG> package C<foo>.
   It is installed by package C<foo> and used read-only.
   
    #!/cw/etc/rc

From ossp-cvs-owner@ossp.org  Thu Jan 31 21:22:04 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 20259764FF; Thu, 31 Jan 2002 21:22:04 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex ex.pod
Message-Id: <20020131202204.20259764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 21:22:04 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Jan-2002 21:22:03
  Branch: HEAD                             Handle: 2002013120220300

  Modified files:
    ossp-pkg/ex             ex.pod

  Log:
    final polishing

  Summary:
    Revision    Changes     Path
    1.17        +196 -205   ossp-pkg/ex/ex.pod
  ____________________________________________________________________________

  Index: ossp-pkg/ex/ex.pod
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 ex.pod
  --- ossp-pkg/ex/ex.pod	30 Jan 2002 13:39:41 -0000	1.16
  +++ ossp-pkg/ex/ex.pod	31 Jan 2002 20:22:03 -0000	1.17
  @@ -53,23 +53,24 @@
   B<OSSP ex> is a small B<ISO-C++> style exception handling library for
   use in the B<ISO-C> language. It allows you to use the paradigm of
   throwing and catching exceptions in order to reduce the amount of error
  -handling code without making your program less robust. This is achieved
  -by directly transferring exceptional return codes (and the program
  -control flow) from the location where the exception is raised (throw
  -point) to the location where it is handled (catch point) -- usually
  -from a deeply nested sub-routine to a parent routine. All intermediate
  -routines no longer have to make sure that the exceptional return codes
  -from sub-routines are correctly passed back to the parent.
  +handling code without making your program less robust. 
  +
  +This is achieved by directly transferring exceptional return codes (and
  +the program control flow) from the location where the exception is
  +raised (throw point) to the location where it is handled (catch point)
  +-- usually from a deeply nested sub-routine to a parent routine. All
  +intermediate routines no longer have to make sure that the exceptional
  +return codes from sub-routines are correctly passed back to the parent.
   
   =head2 EXCEPTIONS
   
  -An exception is a triple E<lt>I<class>,I<object>,I<value>E<gt> where
  -I<class> identifies the class of the exception thrower, I<object>
  -identifies the particular class instance of the exception thrower, and
  -I<value> is the exceptional return code value the thrower wants to send
  -to the catcher. All three parts are of type "C<void *>" internally,
  -but every value can be used which can be (automatically) casted to the
  -B<ISO-C> type "C<void *>". Exceptions are created on-the-fly by the
  +An B<OSSP ex> exception is a triple
  +E<lt>I<class>,I<object>,I<value>E<gt> where I<class> identifies the
  +class of the exception thrower, I<object> identifies the particular
  +class instance of the exception thrower, and I<value> is the exceptional
  +return code value the thrower wants to communicate. All three parts are
  +of type "C<void *>" internally, but every value is useable which can
  +be lossless casted this type. Exceptions are created on-the-fly by the
   B<ex_throw> command.
   
   =head2 APPLICATION PROGRAMMER INTERFACE (API)
  @@ -81,8 +82,8 @@
   =item B<ex_t> I<variable>;
   
   This is the declaration of an exception variable. It is usually never
  -initialized manually. Instead it is initialized by an B<ex_catch> block
  -and just used read-only inside the block. Such a variable of type
  +initialized manually. Instead it is initialized by an B<ex_catch> clause
  +and just used read-only inside its block. Such a variable of type
   B<ex_t> consists of six attributes:
   
   =over 2
  @@ -90,108 +91,111 @@
   =item C<void *>I<ex_class>
   
   This is the I<class> argument of the B<ex_throw> call which created
  -the exception. This globally and uniquely identifies the class of
  +the exception. This should globally and uniquely identify the class of
   I<ex_value>. Usually this is a pointer to a static object (variable,
  -structure or function) which identifies the thrower.
  +structure or function) which identifies the class of the thrower and
  +allows the catcher to correctly handle I<ex_value>.
   
   =item C<void *>I<ex_object>
   
   This is the I<object> argument of the B<ex_throw> call which created
  -the exception. This globally and uniquely identifies the class instance
  -of I<ex_value> (in case multiple instances exists). Usually this a
  -pointer to a dynamic object (structure) which identifiers the particular
  -instance of the thrower.
  +the exception. This should globally and uniquely identify the class
  +instance of I<ex_value> (in case multiple instances exists at all).
  +Usually this a pointer to a dynamic object (structure) which identifiers
  +the particular instance of the thrower. It is usually just an additional
  +information to I<ex_value>.
   
   =item C<void *>I<ex_value>
   
  -This is the I<value> argument of the B<ex_throw> call which created the
  -exception. This is the exceptional return code which uniquely identifies
  -the type of exception. Usually this is the value which is C<return>ed
  -if no exceptions would be thrown. In the simple case this is just a
  -numerical return code. In the complex case this can be a pointer to an
  -arbitrary complex data structure describing the exception.
  +This is the I<value> argument of the B<ex_throw> call which created
  +the exception. This is the exceptional return code value which has to
  +uniquely identify the type of exception. Usually this is the value which
  +is C<return>ed if no exceptions would be thrown. In the simple case
  +this is just a numerical return code. In the complex case this can be a
  +pointer to an arbitrary complex data structure describing the exception.
   
   =item C<char *>I<ex_file> 
   
  -This is the file name of the source where the B<ex_throw> call
  -was performed. It is provided as an additional information about
  -the throw point and is intended mainly for tracing and debugging
  -purposes.
  +This is the file name of the B<ISO-C> source where the B<ex_throw> call
  +was performed. It is provided as an additional information about the
  +throw point and is intended mainly for tracing and debugging purposes.
   
   =item C<int> I<ex_line>
   
  -This is the line number inside the source file name where the
  -B<ex_throw> call was performed. It is provided as an additional
  +This is the line number inside the B<ISO-C> source file name where
  +the B<ex_throw> call was performed. It is provided as an additional
   information about the throw point and is intended mainly for tracing and
   debugging purposes.
   
   =item C<char *>I<ex_func>
   
  -This is the function name (if determinable, else "C<#NA#>") inside
  -the source file name where the B<ex_throw> call was performed. It is
  -provided as an additional information about the throw point and is
  +This is the function name (if determinable, else "C<#NA#>") inside the
  +B<ISO-C> source file name where the B<ex_throw> call was performed. It
  +is provided as an additional information about the throw point and is
   intended mainly for tracing and debugging purposes.
   
   =back
   
   =item B<ex_try> I<BLOCK1> [B<ex_cleanup> I<BLOCK2>] B<ex_catch> (I<variable>) I<BLOCK3>
   
  -This is the main construct provided by B<OSSP ex>. It is modeled after
  -the B<ISO-C++> C<try>-C<catch> clause which in turn is very similar to
  -an B<ISO-C> C<if>-C<else> clause. It consists of an B<ex_try> block
  -I<BLOCK1> which forms the dynamic scope of the exception handling (i.e.
  -exceptions directly thrown there or thrown from its sub-routines are
  -catched), an optional B<ex_cleanup> block I<BLOCK2> for performing
  -cleanup operations and an B<ex_catch> block I<BLOCK3> where the caught
  -exceptions are handled.
  +This is the primary syntactical construct provided by B<OSSP ex>. It
  +is modeled after the B<ISO-C++> C<try>-C<catch> clause which in turn
  +is very similar to an B<ISO-C> C<if>-C<else> clause. It consists of an
  +B<ex_try> block I<BLOCK1> which forms the dynamic scope for exception
  +handling (i.e. exceptions directly thrown there or thrown from its
  +sub-routines are caught), an optional B<ex_cleanup> block I<BLOCK2> for
  +performing cleanup operations and an B<ex_catch> block I<BLOCK3> where
  +the caught exceptions are handled.
   
   The control flow in case no exception is thrown is simply I<BLOCK1>,
  -optionally followed by I<BLOCK2>. I<BLOCK3> is skipped. The control flow
  -in case an exception is thrown is: I<BLOCK1> (up to the statement where
  -the exception is thrown), optionally followed by I<BLOCK2>, followed by
  -I<BLOCK3>.
  +optionally followed by I<BLOCK2>; I<BLOCK3> is skipped. The control
  +flow in case an exception is thrown is: I<BLOCK1> (up to the statement
  +where the exception is thrown only), optionally followed by I<BLOCK2>,
  +followed by I<BLOCK3>.
       
  -The B<ex_try>, B<ex_cleanup> and B<ex_catch> cannot be used seperately,
  -they work only in combination. And in contrast to B<ISO-C++> there
  -is only one B<ex_catch> block and not multiple ones (all B<OSSP ex>
  -exceptions are of the same B<ISO-C> type B<ex_t>). If an exception is
  -caught, it is stored in I<variable> for inspection (or re-throwing)
  -inside the B<ex_catch> block. Although declared outside, the I<variable>
  -is only valid within the B<ex_catch> block. But it can be re-used in
  -following B<ex_try>/B<ex_catch> constructs, of course.
  -
  -The B<ex_try> block is a regular B<ISO-C> language block of
  -statement(s), but it is not allowed to jump into it via C<goto> or
  -C<longjmp>(3) or out of it via C<return>, C<goto> or C<longjmp>(3)
  -because there is some hidden setup and cleanup that needs to be done by
  -B<OSSP ex> regardless of whether an exception is caught. Jumping into
  -an B<ex_try> clause would avoid doing the setup, and jumping out of it
  -would avoid doing the cleanup. In both cases the result is a broken
  -exception facility. Nevertheless you are allowed to nest B<ex_try>
  +The B<ex_try>, B<ex_cleanup> and B<ex_catch> cannot be used separately,
  +they work only in combination because they form a language clause
  +as a whole. In contrast to B<ISO-C++> there is only one B<ex_catch>
  +block and not multiple ones (all B<OSSP ex> exceptions are of the same
  +B<ISO-C> type B<ex_t>). If an exception is caught, it is stored in
  +I<variable> for inspection inside the B<ex_catch> block. Although having
  +to be declared outside, the I<variable> value is only valid within
  +the B<ex_catch> block. But the variable can be re-used in subsequent
  +B<ex_catch> clauses, of course.
  +
  +The B<ex_try> block is a regular B<ISO-C> language statement block, but
  +it is not allowed to jump into it via C<goto> or C<longjmp>(3) or out
  +of it via C<break>, C<return>, C<goto> or C<longjmp>(3) because there
  +is some hidden setup and cleanup that needs to be done by B<OSSP ex>
  +regardless of whether an exception is caught. Jumping into an B<ex_try>
  +clause would avoid doing the setup, and jumping out of it would avoid
  +doing the cleanup. In both cases the result is a broken exception
  +handling facility. Nevertheless you are allowed to nest B<ex_try>
   clauses.
   
   The B<ex_cleanup> and B<ex_catch> blocks are regular B<ISO-C> language
  -block of statement(s) without any restrictions. You are even allowed to
  -throw (and in the B<ex_catch> block to re-throw) an exception.
  +statement blocks without any restrictions. You are even allowed to throw
  +(and in the B<ex_catch> block to re-throw) an exception.
   
   There is just one subtle portability detail you have to remember about
   B<ex_try> blocks: all accessible B<ISO-C> objects have the (expected)
  -values as of the time B<ex_throw> was called, except that the values of
  -objects of automatic storage invocation duration that do not have the
  -C<volatile> storage class I<and> have been changed between the B<ex_try>
  -invocation and B<ex_throw> are indeterminate. This is both because
  -you usually do not know which commands in the B<ex_try> were already
  -successful before the exception was thrown and because the underlying
  -B<ISO-C> setjmp(3) facility applies those restrictions.
  +values as of the time B<ex_throw> was called, except that the values
  +of objects of automatic storage invocation duration that do not have
  +the C<volatile> storage class I<and> have been changed between the
  +B<ex_try> invocation and B<ex_throw> are indeterminate. This is because
  +both you usually do not know which commands in the B<ex_try> were
  +already successful before the exception was thrown (logically speaking)
  +and because the underlying B<ISO-C> setjmp(3) facility applies those
  +restrictions (technically speaking).
   
   =item B<ex_throw>(I<class>, I<object>, I<value>);
   
  -This is second main construct. It builds an exception from the supplied
  -arguments and throws it. If an B<ex_try>/B<ex_catch> clause exists in
  -the dynamic scope of the B<ex_throw> call, this exception is copied into
  -the I<variable> of B<ex_catch> and the program control flow is continued
  -in the B<ex_catch> block. If no B<ex_try>/B<ex_catch> clause exists in
  -the dynamic scope of the B<ex_throw> call, the program C<abort>(3)s. The
  +This builds an exception from the supplied arguments and throws it.
  +If an B<ex_try>/B<ex_catch> clause formed the dynamic scope of the
  +B<ex_throw> call, this exception is copied into the I<variable> of its
  +B<ex_catch> clause and the program control flow is continued in the
  +B<ex_catch> block. If no B<ex_try>/B<ex_catch> clause exists in the
  +dynamic scope of the B<ex_throw> call, the program C<abort>(3)s. The
   B<ex_throw> can be performed everywhere, including inside B<ex_try> and
   B<ex_catch> blocks.
   
  @@ -200,26 +204,27 @@
   This is only valid within an B<ex_catch> block and re-throws
   the current exception (in I<variable>). It is similar to the
   call B<ex_throw>(I<variable>.ex_class, I<variable>.ex_object,
  -I<variable>.ex_value) but with the difference that the C<ex_file>,
  -C<ex_line> and C<ex_func> elements of the thrown exception are kept.
  +I<variable>.ex_value) except for the difference that the C<ex_file>,
  +C<ex_line> and C<ex_func> elements of the caught exception are passed
  +through as it would have been never caught.
   
   =item B<ex_shield> I<BLOCK>
   
   This directive executes I<BLOCK> while shielding it against the throwing
   of exceptions, i.e., inside the dynamic scope of B<ex_shield> all
  -B<ex_throw> operations are ignored.
  +B<ex_throw> operations are silently ignored.
   
   =item B<ex_catching>
   
  -This is a boolean flag which can be tested inside a block to test
  -whether the current scope is exception catching (by B<ex_catch>
  -somewhere in the dynamic scope) or not.
  +This is a boolean flag which can be checked inside the dynamic scope
  +of an B<ex_try> clause to test whether the current scope is exception
  +catching. 
   
   =item B<ex_shielding>
   
  -This is a boolean flag which can be tested inside a block to test
  -whether the current scope is exception shielding (by B<ex_shield>
  -somewhere in the dynamic scope) or not.
  +This is a boolean flag which can be checked inside the dynamic scope of
  +an B<ex_shield> clause to test whether the current scope is exception
  +shielding.
   
   =back
   
  @@ -239,23 +244,25 @@
   
   =item B<__ex_mctx_struct>
   
  -This is the contents of the machine context structure. A pointer to such
  -a machine context is passed to the following macros as I<mctx>. 
  +This holds the contents of the machine context structure. A pointer to
  +such a machine context is passed to the following macros as I<mctx>.
   
  -=item B<__ex_mctx_save>(I<mctx>)
  +=item B<__ex_mctx_save>(__ex_mctx_struct *I<mctx>)
   
   This is called by the prolog of B<ex_try> to save the current machine
   context in I<mctx>. This function has to return true (not C<0>) after
   saving. If the machine context is restored (by B<__ex_mctx_restore>) it
  -has to return false (C<0>).
  +has to return false (C<0>). In other words, this function has to return
  +twice and indicate the particular situation with the provided return
  +code.
   
  -=item B<__ex_mctx_restored>(I<mctx>)
  +=item B<__ex_mctx_restored>(__ex_mctx_struct *I<mctx>)
   
   This is called by the epilog of B<ex_try> to perform additional
   operations at the new (restored) machine context after an exception was
   caught. Usually this is a no-operation macro.
   
  -=item B<__ex_mctx_restore>(I<mctx>)
  +=item B<__ex_mctx_restore>(__ex_mctx_struct *I<mctx>)
   
   This is called by B<ex_throw> at the old machine context in order to
   restore the machine context of the B<ex_try>/B<ex_catch> clause which
  @@ -263,66 +270,69 @@
   
   =back
   
  -The default implementation (define C<__EX_MCTX_USE_SJLJ__> or as long
  -C<__EX_MCTX_USE_CUSTOM__> is not defined) uses B<ISO-C> jmp_buf(3):
  +The default implementation (define C<__EX_MCTX_SJLJ__> or as long
  +C<__EX_MCTX_CUSTOM__> is not defined) uses the B<ISO-C> jmp_buf(3)
  +facility:
   
    #define __ex_mctx_struct         jmp_buf jb;
    #define __ex_mctx_save(mctx)     (setjmp((mctx)->jb) == 0)
    #define __ex_mctx_restored(mctx) /* noop */
    #define __ex_mctx_restore(mctx)  (void)longjmp((mctx)->jb, 1)
   
  -Alternatively one can define C<__EX_MCTX_USE_SSJLJ__> to use B<POSIX.1>
  -sigjmp_buf(3) and C<__EX_MCTX_USE_MCSC__> to use B<POSIX.1> ucontext(3).
  -For using a custom implementation define C<__EX_MCTX_USE_CUSTOM__> and
  -provide own macro definitions for the four B<__ex_mctx_xxxx>.
  +Alternatively, you can define C<__EX_MCTX_SSJLJ__> to use B<POSIX.1>
  +sigjmp_buf(3) or C<__EX_MCTX_MCSC__> to use B<POSIX.1> ucontext(3). For
  +using a custom implementation define C<__EX_MCTX_CUSTOM__> and provide
  +own definitions for the four B<__ex_mctx_xxxx> macros.
   
   =head2 Exception Context
   
   In order to maintain the exception catching stack and for passing the
   exception between the throw and the catch point, B<OSSP ex> uses a
  -global exception context, returned on-the-fly by the callback "ex_ctx_t
  -*(*B<__ex_ctx>)(void)".
  +global exception context, returned on-the-fly by the callback "C<ex_ctx_t
  +*(*>B<__ex_ctx>C<)(void)>".
   
  -The default B<__ex_ctx> (B<__ex_ctx_default> as provided by F<libex>)
  -returns a pointer to a static B<ex_ctx_t> context. For use in
  -multi-threading environments, this should be overwritten with a
  -per-thread context structure.
  +By default, B<__ex_ctx> (which is B<__ex_ctx_default> as provided by
  +F<libex>) returns a pointer to a static C<ex_ctx_t> context. For use in
  +multi-threading environments, this should be overwritten with a callback
  +function returning a per-thread context structure.
   
   To initialize an exception context structure there are two macros
  -defined: B<EX_CTX_INITIALIZER> for static initialization and
  -B<EX_CTX_INITIALIZE>(B<ex_ctx_t *>I<ctx>) for dynamic initialization.
  +defined: "B<EX_CTX_INITIALIZER>" for static initialization and
  +"C<void >B<EX_CTX_INITIALIZE>C<(ex_ctx_t *)>" for dynamic
  +initialization.
   
   =head2 Termination Handler
   
   In case there is an exception thrown which is not caught by any
  -B<ex_try>/B<ex_catch> clauses, B<OSSP ex> calls the callback "void
  -(*B<__ex_terminate>)(C<ex_t *>)". It receives a pointer to the exception
  -object which should have been thrown.
  -
  -The default B<__ex_terminate> (B<__ex_terminate_default> as provided by
  -F<libex>) this prints a message of the form "C<**EX: UNCAUGHT EXCEPTION:
  -class=0xXXXXXXXX object=0xXXXXXXXX value=0xXXXXXXX [file:123:func]>" to
  -F<stderr> and then calls abort(3) in order to terminate the application.
  -For use in multi-threading environments, this should be overwritten with
  -a callback function which terminates only the current thread.
  +B<ex_try>/B<ex_catch> clauses, B<OSSP ex> calls the callback "C<void
  +(*>B<__ex_terminate>C<)(ex_t *)>". It receives a pointer to the
  +exception object which should have been thrown.
  +
  +By default, B<__ex_terminate> (which is B<__ex_terminate_default>
  +as provided by F<libex>) prints a message of the form "C<**EX:
  +UNCAUGHT EXCEPTION: class=0xXXXXXXXX object=0xXXXXXXXX value=0xXXXXXXX
  +[xxxx:NNN:xxxx]>" to F<stderr> and then calls abort(3) in order to
  +terminate the application. For use in multi-threading environments, this
  +should be overwritten with a callback function which terminates only the
  +current thread.
   
   =head2 Namespace Mapping
   
  -B<OSSP ex> implementation consistently uses the B<ex_>, B<__ex_>
  -and B<__EX_> prefixes for namespace protection. But at least the
  -B<ex_> prefix for the API macros B<ex_try>, B<ex_cleanup>, B<ex_catch>,
  -B<ex_throw>, B<ex_rethrow> and B<ex_shield> sometimes have a unpleasant
  -optical appearance. Especially because B<OSSP rc> is modeled after the
  -exception facility in B<ISO-C++> where there is no such prefix on the
  -directives.
  -
  -For this B<OSSP ex> optionally provides the ability to provide
  -additional namespace mappings for those API macros. By default (define
  -C<__EX_NS_USE_CXX__> or as long as C<__EX_NS_USE_CUSTOM__> and
  -C<__cplusplus> is not defined) you can additional C++ style macros
  -named B<catch>, B<cleanup>, B<throw>, B<rethrow> and B<shield>. As an
  -alternative you can define C<__EX_NS_USE_UCCXX__> to get the same but
  -with an (more namespace safe) upper case first letter.
  +The B<OSSP ex> implementation consistently uses the "C<ex_>", "C<__ex_>"
  +and "C<__EX_>" prefixes for namespace protection. But at least
  +the "C<ex_>" prefix for the API macros B<ex_try>, B<ex_cleanup>,
  +B<ex_catch>, B<ex_throw>, B<ex_rethrow> and B<ex_shield> sometimes have
  +an unpleasant optical appearance. Especially because B<OSSP ex> is
  +modeled after the exception facility of B<ISO-C++> where there is no
  +such prefix on the language directives, of course.
  +
  +For this, B<OSSP ex> optionally provides the ability to provide
  +additional namespace mappings for those API elements. By default (define
  +C<__EX_NS_CXX__> or as long as C<__EX_NS_CUSTOM__> and C<__cplusplus>
  +is not defined) you can additionally use the B<ISO-C++> style names
  +B<catch>, B<cleanup>, B<throw>, B<rethrow> and B<shield>. As an
  +alternative you can define C<__EX_NS_UCCXX__> to get the same but with a
  +more namespace safe upper case first letter.
   
   =head1 MULTITHREADING ENVIRONMENTS
   
  @@ -331,26 +341,29 @@
   only. But it is easy to configure B<OSSP ex> to work correctly in a
   multi-threading environment like B<POSIX pthreads> or B<GNU pth>.
   
  -There are two issues: which machine context to use and where to
  +There are only two issues: which machine context to use and where to
   store the exception context to make sure exception throwing happens
   only within a thread and does not conflict with the regular thread
  -dispatching.
  +dispatching mechanism.
   
   =head2 GNU pth
   
  -Using B<OSSP ex> with B<GNU pth> is straight-forward, because B<GNU pth>
  -1.5 (or higher) already has support for B<OSSP ex> built-in. All which
  -is needed is that B<GNU pth> is configured with the Autoconf option
  -C<--with-ex>. Then each thread has its own B<OSSP ex> exception context.
  +Using B<OSSP ex> together with B<GNU pth> is straight-forward, because
  +B<GNU pth> 1.5 (and higher) already has support for B<OSSP ex> built-in.
  +All which is needed is that B<GNU pth> is configured with the B<GNU
  +Autoconf> option C<--with-ex>. Then each B<GNU pth> user-space thread
  +has its own B<OSSP ex> exception context automatically. The default
  +of using B<ISO-C> jmp_buf(3) does not conflict with the thread
  +dispatching mechanisms used by B<GNU pth>.
   
   =head2 POSIX pthreads
   
  -Using B<OSSP ex> inside a standard B<POSIX pthreads> environment is
  -also straight-forward, although it requires additional coding. What
  -you basically have to do is to make sure that the B<__ex_ctx> becomes
  -a per-thread context and that B<__ex_terminate> terminates only the
  -current thread. To get an impression, a small utility library for this
  -follows:
  +Using B<OSSP ex> inside an arbitrary B<POSIX pthreads> standard
  +compliant environment is also straight-forward, although it requires
  +extra coding. What you basically have to do is to make sure that the
  +B<__ex_ctx> becomes a per-thread context and that B<__ex_terminate>
  +terminates only the current thread. To get an impression, a small
  +utility library for this follows:
   
   =over 4
   
  @@ -362,7 +375,7 @@
   #include <pthread.h>
   
   int pthread_init_ex   (void);
  -int pthread_create_ex (pthread_t *thread, const pthread_attr_t *attr, void *(*entry)(void *), void *arg);
  +int pthread_create_ex (pthread_t *, const pthread_attr_t *, void *(*)(void *), void *);
   
   #ifndef PTHREAD_EX_INTERNAL
   #define pthread_init   pthread_init_ex
  @@ -451,13 +464,13 @@
   
   =back
   
  -Now all which is required is that you include F<pthread_ex.h> after
  -the standard F<pthread.h> header and to call B<pthread_init>() once at
  -startup of your program.
  +Now all which is required is that you include F<pthread_ex.h> after the
  +standard F<pthread.h> header and to call B<pthread_init> once at startup
  +of your program.
   
   =head1 EXAMPLES
   
  -As a full real-life example we will look how you can add optional B<OSSP
  +As a real-life example we will look how you can add optional B<OSSP
   ex> based exception handling support to a library B<foo>. The original
   library looks like this:
   
  @@ -555,72 +568,49 @@
   =item F<foo.h>
   
    ...
  - foo_rc_t foo_ex(foo_t *foo, int use);
  + extern const char foo_id[];
    ...
   
   =item F<foo.c>
   
    #include "foo.h"
   
  + const char foo_id[] = "foo 1.0";
  + 
    #ifdef WITH_EX
    #include "ex.h"
  - char foo_ex_class = "foo"; /* class identifier */
  - int  foo_ex_use   = 0;     /* class disable flag */
  + #define FOO_RC(rv) \
  +     (  (rv) != FOO_OK && (ex_catching && !ex_shielding) \
  +      ? (ex_throw(foo_id, NULL, (rv)), (rv)) : (rv) )
  + #else
  + #define FOO_RC(rv) (rv)
    #endif
  - 
  +
    struct foo_st {
  - #ifdef WITH_EX
  -     int ex_use; /* object disable flag */
  - #endif
        ...
    }
   
  - #ifdef WITH_EX
  - #define FOO_ERR(ctx,err) \
  -     ((   ex_shielding \
  -       || !foo_ex_use \
  -       || ((ctx) != NULL && !(ctx)->ex_use)) 
  -      ? FOO_ERR_##err \
  -      : ex_throw(&foo_ex_class, ctx, FOO_ERR_##err))
  - #else
  - #define FOO_ERR(ctx,err) \
  -      (FOO_ERR_##err)
  - #endif
  -
    foo_rc_t foo_create(foo_t **foo)
    {
        if ((*foo = (foo_t)malloc(sizeof(foo))) == NULL)
  -         return FOO_ERR(NULL, SYS);
  -     (*foo)->ex_use = 0;
  +         return FOO_RC(FOO_ERR_SYS);
        (*foo)->... = ...
        return FOO_OK;
    }
   
  - foo_rc_t foo_ex(foo_t *foo, int use)
  - {
  -     if (foo == NULL)
  -         return FOO_ERR(foo, ARG);
  -#ifndef WITH_EX
  -     return FOO_ERR_IMP;
  -#else
  -     foo->ex_use = use;
  -     return FOO_OK;
  -#endif
  - }
  -
    foo_rc_t foo_perform(foo_t *foo)
    {
        if (foo == NULL)
  -         return FOO_ERR(foo, ARG);
  +         return FOO_RC(FOO_ERR_ARG);
        if (...)
  -         return FOO_ERR(foo, XXX);
  +         return FOO_RC(FOO_ERR_XXX);
        return FOO_OK;
    }
   
    foo_rc_t foo_destroy(foo_t *foo)
    {
        if (foo == NULL)
  -         return FOO_ERR(foo, ARG);
  +         return FOO_RC(FOO_ERR_ARG);
        free(foo);
        return FOO_OK;
    }
  @@ -628,29 +618,30 @@
   =back
   
   This way the library by default is still exactly the same. If you now
  -compile it with C<-DWITH_EX> you build optional exception handling
  -support into it, although it is still disabled and the library behaviour
  -is the same. But if you now enable execptions via C<foo_ex(foo, 1);>
  -the library throws exceptions where C<ex_value> is the C<foo_rc_t>
  -instead of returning this value. Notice that in our example we allow the
  -enabling/disabling also on a per object basis, i.e., some B<foo> objects
  -could have exception handling enabled and others not.
  +compile it with C<-DWITH_EX> you activate exception handling support.
  +This means that all API functions throw exceptions where C<ex_value> is
  +the C<foo_rc_t> instead of returning this value.
   
   =head1 SEE ALSO
   
  -C++ try/catch/throw language directives;
  -setjmp(3), longjmp(3), sigsetjmp(3), siglongjmp(3).
  +B<ISO-C++> C<try>/C<catch>/C<throw>;
  +B<Java> C<try>/C<catch>/C<finally>/C<throw>;
  +B<ISO-C> jmp_buf(3)/setjmp(3)/longjmp(3);
  +B<POSIX.1> sigjmp_buf(3)/sigsetjmp(3)/siglongjump(3);
  +B<POSIX.1> ucontext(3)/setcontext(3)/getcontext(3).
   
   =head1 HISTORY
   
  -B<OSSP ex> was invented in January 2002 by Ralf S. Engelschall for use
  -inside the OSSP project. Its creation was prompted by the requirement
  -to reduce the error handling inside B<OSSP lmtp2nntp>. The core
  -B<try>/B<catch> clause is inspired by B<ISO-C++> and the implementation
  -is derived from B<cexcept> 2.0.0, a similar library written 2000
  -by Adam M. Costello E<lt>amc@cs.berkeley.eduE<gt> and Cosmin Truta
  -E<lt>cosmin@cs.toronto.eduE<gt>. The B<cleanup> clause is inspired by
  -the B<Java> C<finally> clause.
  +B<OSSP ex> was invented in January 2002 by Ralf S. Engelschall
  +E<lt>rse@engelschall.comE<gt> for use inside the B<OSSP> project.
  +Its creation was prompted by the requirement to reduce the error
  +handling inside B<OSSP lmtp2nntp>. The core B<try>/B<catch> clause
  +was inspired by B<ISO-C++> and the implementation was partly
  +derived from B<cexcept> 2.0.0, a similar library written 2000 by
  +Adam M. Costello E<lt>amc@cs.berkeley.eduE<gt> and Cosmin Truta
  +E<lt>cosmin@cs.toronto.eduE<gt>. The B<cleanup> clause was inspired by
  +the B<Java> C<finally> clause. The B<shield> feature was inspired by an
  +C<errno> shielding facility used in the B<GNU pth> implementation.
   
   =head1 AUTHORS
   

From ossp-cvs-owner@ossp.org  Thu Jan 31 21:23:06 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 697DC764FF; Thu, 31 Jan 2002 21:23:06 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex ex.pod
Message-Id: <20020131202306.697DC764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 21:23:06 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Jan-2002 21:23:06
  Branch: HEAD                             Handle: 2002013120230600

  Modified files:
    ossp-pkg/ex             ex.pod

  Log:
    fix copyright

  Summary:
    Revision    Changes     Path
    1.18        +4  -2      ossp-pkg/ex/ex.pod
  ____________________________________________________________________________

  Index: ossp-pkg/ex/ex.pod
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 ex.pod
  --- ossp-pkg/ex/ex.pod	31 Jan 2002 20:22:03 -0000	1.17
  +++ ossp-pkg/ex/ex.pod	31 Jan 2002 20:23:06 -0000	1.18
  @@ -1,6 +1,8 @@
   ##
  -##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  OSSP ex - Exception Handling Library
  +##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP ex, an exception library
   ##  which can be found at http://www.ossp.org/pkg/ex/.

From ossp-cvs-owner@ossp.org  Thu Jan 31 21:27:44 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C0B77764FF; Thu, 31 Jan 2002 21:27:44 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex TODO
Message-Id: <20020131202744.C0B77764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 21:27:44 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Jan-2002 21:27:44
  Branch: HEAD                             Handle: 1970010101000000

  Removed files:
    ossp-pkg/ex             TODO

  Log:
    remove TODO

  Summary:
    Revision    Changes     Path
    NONE        +0  -1      ossp-pkg/ex/TODO
  ____________________________________________________________________________

  

From ossp-cvs-owner@ossp.org  Thu Jan 31 21:31:48 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 32DB3764FF; Thu, 31 Jan 2002 21:31:48 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex README VERSION devtool.conf
Message-Id: <20020131203148.32DB3764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 21:31:48 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Jan-2002 21:31:48
  Branch: HEAD                             Handle: 2002013120314700

  Modified files:
    ossp-pkg/ex             README VERSION devtool.conf

  Log:
    bump release number

  Summary:
    Revision    Changes     Path
    1.3         +13 -12     ossp-pkg/ex/README
    1.2         +1  -1      ossp-pkg/ex/VERSION
    1.2         +3  -0      ossp-pkg/ex/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/ex/README
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 README
  --- ossp-pkg/ex/README	26 Jan 2002 20:12:19 -0000	1.2
  +++ ossp-pkg/ex/README	31 Jan 2002 20:31:47 -0000	1.3
  @@ -4,21 +4,22 @@
     \___/_/\_\
                  
     OSSP ex - Exception Handling Library
  -  Version 0.1.0 (26-Jan-2002)
  +  Version 0.9.0 (31-Jan-2002)
   
     ABSTRACT
   
  -  The OSSP ex library is a small ISO-C++ style exception handling
  -  library for use in the ISO-C language. It allows you to use the
  -  paradigm of throwing and catching exceptions in order to reduce the
  -  amount of error handling code in without making your program less
  -  robust. This is achieved by directly transferring exceptional return
  -  codes (and the program control flow) from the location where it was
  -  raised (throw point) to the location where it is handled (catch point)
  -  - usually from a deeply nested sub-routine to a parent routine. All
  -  intermediate routines no longer have to make sure that the exceptional
  -  return codes from sub-routines are correctly passed back to the
  -  parent.
  +  OSSP ex is a small ISO-C++ style exception handling library for use in
  +  the ISO-C language. It allows you to use the paradigm of throwing and
  +  catching exceptions in order to reduce the amount of error handling
  +  code without making your program less robust.
  +
  +  This is achieved by directly transferring exceptional return codes
  +  (and the program control flow) from the location where the exception
  +  is raised (throw point) to the location where it is handled (catch
  +  point) -- usually from a deeply nested sub-routine to a parent
  +  routine. All intermediate routines no longer have to make sure that
  +  the exceptional return codes from sub-routines are correctly passed
  +  back to the parent.
   
     COPYRIGHT AND LICENSE
   
  Index: ossp-pkg/ex/VERSION
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 VERSION
  --- ossp-pkg/ex/VERSION	26 Jan 2002 20:12:19 -0000	1.1
  +++ ossp-pkg/ex/VERSION	31 Jan 2002 20:31:47 -0000	1.2
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP ex (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP ex, Version 0.1.0 (26-Jan-2002)
  +  This is OSSP ex, Version 0.9.0 (31-Jan-2002)
   
  Index: ossp-pkg/ex/devtool.conf
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.conf
  --- ossp-pkg/ex/devtool.conf	26 Jan 2002 20:12:19 -0000	1.1
  +++ ossp-pkg/ex/devtool.conf	31 Jan 2002 20:31:47 -0000	1.2
  @@ -21,6 +21,9 @@
   
   %version
       ./shtool version -l txt -n "OSSP ex" -e VERSION
  +    V=`./shtool version -l txt -d long VERSION`
  +    sed -e "s/Version .*(.*)/Version $V/g" <README >README.n 
  +    mv README.n README
   
   %dist
       make distclean >/dev/null 2>&1

From ossp-cvs-owner@ossp.org  Thu Jan 31 21:35:44 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0C62C764FF; Thu, 31 Jan 2002 21:35:44 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex configure.ac devtool.conf
Message-Id: <20020131203544.0C62C764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 21:35:44 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Jan-2002 21:35:43
  Branch: HEAD                             Handle: 2002013120354300

  Modified files:
    ossp-pkg/ex             configure.ac devtool.conf

  Log:
    provide version in ex-config and fix devtool dist

  Summary:
    Revision    Changes     Path
    1.2         +3  -2      ossp-pkg/ex/configure.ac
    1.3         +1  -1      ossp-pkg/ex/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/ex/configure.ac
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 configure.ac
  --- ossp-pkg/ex/configure.ac	26 Jan 2002 20:12:19 -0000	1.1
  +++ ossp-pkg/ex/configure.ac	31 Jan 2002 20:35:43 -0000	1.2
  @@ -30,8 +30,9 @@
   AC_INIT(README)
   
   AC_DIVERT_PUSH(NOTICE)
  -V=`./shtool version -l txt -d long VERSION`
  -./shtool echo -e "Configuring %BOSSP ex%b (Exception Handling), Version %B${V}%b"
  +EX_VERSION_STR=`./shtool version -l txt -d long VERSION`
  +./shtool echo -e "Configuring %BOSSP ex%b (Exception Handling), Version %B${EX_VERSION_STR}%b"
  +AC_SUBST(EX_VERSION_STR)
   AC_DIVERT_POP()
   
   AC_SET_MAKE
  Index: ossp-pkg/ex/devtool.conf
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.conf
  --- ossp-pkg/ex/devtool.conf	31 Jan 2002 20:31:47 -0000	1.2
  +++ ossp-pkg/ex/devtool.conf	31 Jan 2002 20:35:43 -0000	1.3
  @@ -30,5 +30,5 @@
       ./shtool fixperm -v .
       V=`./shtool version -l txt -d short VERSION`
       ./shtool tarball -o ex-${V}.tar.gz -d ex-${V} -u ossp -g ossp \
  -                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf' -c 'gzip --best' .
  +                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool*' -c 'gzip --best' .
   

From ossp-cvs-owner@ossp.org  Thu Jan 31 21:48:06 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 47113764FF; Thu, 31 Jan 2002 21:48:06 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex .cvsignore Makefile.in ex.pod
Message-Id: <20020131204806.47113764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 21:48:06 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Jan-2002 21:48:06
  Branch: HEAD                             Handle: 2002013120480500

  Modified files:
    ossp-pkg/ex             .cvsignore Makefile.in ex.pod

  Log:
    add ex.3 generation

  Summary:
    Revision    Changes     Path
    1.4         +7  -6      ossp-pkg/ex/.cvsignore
    1.2         +15 -0      ossp-pkg/ex/Makefile.in
    1.19        +5  -1      ossp-pkg/ex/ex.pod
  ____________________________________________________________________________

  Index: ossp-pkg/ex/.cvsignore
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 .cvsignore
  --- ossp-pkg/ex/.cvsignore	26 Jan 2002 22:29:59 -0000	1.3
  +++ ossp-pkg/ex/.cvsignore	31 Jan 2002 20:48:05 -0000	1.4
  @@ -1,11 +1,12 @@
  -shtool
  +Makefile
   config.guess
  +config.h
  +config.h.in
   config.sub
  -ltmain.sh
  -libtool.m4
   configure
  -config.h.in
   ex-config
  -config.h
  +ex.3
   ex_test
  -Makefile
  +libtool.m4
  +ltmain.sh
  +shtool
  Index: ossp-pkg/ex/Makefile.in
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 Makefile.in
  --- ossp-pkg/ex/Makefile.in	26 Jan 2002 20:12:19 -0000	1.1
  +++ ossp-pkg/ex/Makefile.in	31 Jan 2002 20:48:05 -0000	1.2
  @@ -45,6 +45,7 @@
   SHTOOL      = ./shtool
   LIBTOOL     = ./libtool
   TRUE        = true
  +POD2MAN     = pod2man
   
   LIB_NAME    = libex.la
   LIB_OBJS    = ex.lo
  @@ -70,6 +71,15 @@
   $(TST_NAME): $(TST_OBJS) $(LIB_NAME)
   	@$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $(TST_NAME) $(TST_OBJS) $(LIB_NAME) $(LIBS)
   
  +ex.3: ex.pod
  +	V1=`$(SHTOOL) version -l txt -d short VERSION`; \
  +	V2=`$(SHTOOL) version -l txt -d long VERSION`; \
  +	D=`$(SHTOOL) version -l txt -d long VERSION | sed -e 's;.*(;;' -e 's;).*;;'`; \
  +	$(POD2MAN) --quotes=none \
  +	           --section=3 --center="Exception Handling" \
  +	           --release="$$D" --date="OSSP ex $$V1" ex.pod | \
  +	sed -e "s;EX_VERSION_STR;$$V2;" >ex.3
  +
   check: $(TST_NAME)
   	@$(LIBTOOL) --mode=execute ./$(TST_NAME)
   
  @@ -78,14 +88,18 @@
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(includedir)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libdir)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)
   	$(SHTOOL) install -c -m 755 ex-config $(DESTDIR)$(bindir)/
   	$(SHTOOL) install -c -m 644 ex.h $(DESTDIR)$(includedir)/
   	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libex.la $(DESTDIR)$(libdir)/
  +	$(SHTOOL) install -c -m 644 ex.3 $(DESTDIR)$(mandir)/man3/
   
   uninstall:
  +	-$(RM) $(DESTDIR)$(mandir)/man3/ex.3
   	@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libex.la
   	-$(RM) $(DESTDIR)$(includedir)/ex.h
   	-$(RM) $(DESTDIR)$(bindir)/ex-config
  +	-$(RMDIR) $(DESTDIR)$(mandir) >/dev/null 2>&1 || $(TRUE)
   	-$(RMDIR) $(DESTDIR)$(libdir) >/dev/null 2>&1 || $(TRUE)
   	-$(RMDIR) $(DESTDIR)$(includedir) >/dev/null 2>&1 || $(TRUE)
   	-$(RMDIR) $(DESTDIR)$(bindir) >/dev/null 2>&1 || $(TRUE)
  @@ -103,6 +117,7 @@
   	-$(RM) libtool
   
   realclean: distclean
  +	-$(RM) ex.3
   	-$(RM) configure config.h.in
   	-$(RM) shtool
   	-$(RM) ltmain.sh libtool.m4 config.guess config.sub
  Index: ossp-pkg/ex/ex.pod
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 ex.pod
  --- ossp-pkg/ex/ex.pod	31 Jan 2002 20:23:06 -0000	1.18
  +++ ossp-pkg/ex/ex.pod	31 Jan 2002 20:48:05 -0000	1.19
  @@ -32,7 +32,11 @@
   
   =head1 NAME
   
  -B<OSSP ex> - Exception Library
  +B<OSSP ex> - Exception Handling
  +
  +=head1 VERSION
  +
  +B<OSSP ex EX_VERSION_STR>
   
   =head1 SYNOPSIS
   

From ossp-cvs-owner@ossp.org  Thu Jan 31 22:03:40 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C9C21764FF; Thu, 31 Jan 2002 22:03:39 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex INSTALL Makefile.in devtool.conf
Message-Id: <20020131210339.C9C21764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 22:03:39 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Jan-2002 22:03:39
  Branch: HEAD                             Handle: 2002013121033900

  Added files:
    ossp-pkg/ex             INSTALL
  Modified files:
    ossp-pkg/ex             Makefile.in devtool.conf

  Log:
    final polishing for release

  Summary:
    Revision    Changes     Path
    1.1         +17 -0      ossp-pkg/ex/INSTALL
    1.3         +5  -3      ossp-pkg/ex/Makefile.in
    1.4         +15 -2      ossp-pkg/ex/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/ex/INSTALL
  ============================================================
  $ cvs update -p -r1.1 INSTALL
     _____  __
    / _ \ \/ /
   |  __/>  < 
    \___/_/\_\
                 
    OSSP ex - Exception Handling Library
  
    INSTALLATION
  
    To install OSSP ex into /path/to/ex/ perform
    the following steps in your shell:
        
      $ ./configure --prefix=/path/to/ex
      $ make
      $ make check
      $ make install
  
  Index: ossp-pkg/ex/Makefile.in
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 Makefile.in
  --- ossp-pkg/ex/Makefile.in	31 Jan 2002 20:48:05 -0000	1.2
  +++ ossp-pkg/ex/Makefile.in	31 Jan 2002 21:03:39 -0000	1.3
  @@ -71,6 +71,7 @@
   $(TST_NAME): $(TST_OBJS) $(LIB_NAME)
   	@$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $(TST_NAME) $(TST_OBJS) $(LIB_NAME) $(LIBS)
   
  +man: ex.3
   ex.3: ex.pod
   	V1=`$(SHTOOL) version -l txt -d short VERSION`; \
   	V2=`$(SHTOOL) version -l txt -d long VERSION`; \
  @@ -88,17 +89,18 @@
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(includedir)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libdir)
  -	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man3
   	$(SHTOOL) install -c -m 755 ex-config $(DESTDIR)$(bindir)/
   	$(SHTOOL) install -c -m 644 ex.h $(DESTDIR)$(includedir)/
  -	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libex.la $(DESTDIR)$(libdir)/
   	$(SHTOOL) install -c -m 644 ex.3 $(DESTDIR)$(mandir)/man3/
  +	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libex.la $(DESTDIR)$(libdir)/
   
   uninstall:
  -	-$(RM) $(DESTDIR)$(mandir)/man3/ex.3
   	@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libex.la
  +	-$(RM) $(DESTDIR)$(mandir)/man3/ex.3
   	-$(RM) $(DESTDIR)$(includedir)/ex.h
   	-$(RM) $(DESTDIR)$(bindir)/ex-config
  +	-$(RMDIR) $(DESTDIR)$(mandir)/man3 >/dev/null 2>&1 || $(TRUE)
   	-$(RMDIR) $(DESTDIR)$(mandir) >/dev/null 2>&1 || $(TRUE)
   	-$(RMDIR) $(DESTDIR)$(libdir) >/dev/null 2>&1 || $(TRUE)
   	-$(RMDIR) $(DESTDIR)$(includedir) >/dev/null 2>&1 || $(TRUE)
  Index: ossp-pkg/ex/devtool.conf
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.conf
  --- ossp-pkg/ex/devtool.conf	31 Jan 2002 20:35:43 -0000	1.3
  +++ ossp-pkg/ex/devtool.conf	31 Jan 2002 21:03:39 -0000	1.4
  @@ -26,9 +26,22 @@
       mv README.n README
   
   %dist
  -    make distclean >/dev/null 2>&1
  +    echo "+++ generating"
  +    ./devtool autoclean
  +    ./devtool autogen
  +    echo "+++ configuring"
  +    ./configure
  +    echo "+++ building"
  +    make clean all man
  +    echo "+++ cleaning"
  +    make distclean
  +    echo "+++ fixing"
       ./shtool fixperm -v .
  +    echo "+++ rolling"
       V=`./shtool version -l txt -d short VERSION`
       ./shtool tarball -o ex-${V}.tar.gz -d ex-${V} -u ossp -g ossp \
  -                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool*' -c 'gzip --best' .
  +                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool*,*.tar.gz' -c 'gzip --best' .
  +    ls -l ex-${V}.tar.gz
  +    echo "+++ testing"
  +    gunzip <ex-${V}.tar.gz | tar tvf -
   

From ossp-cvs-owner@ossp.org  Thu Jan 31 22:07:26 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6CD97764FF; Thu, 31 Jan 2002 22:07:26 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex devtool.conf
Message-Id: <20020131210726.6CD97764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 22:07:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Jan-2002 22:07:26
  Branch: HEAD                             Handle: 2002013121072600

  Modified files:
    ossp-pkg/ex             devtool.conf

  Log:
    add %release shortcut

  Summary:
    Revision    Changes     Path
    1.5         +4  -0      ossp-pkg/ex/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/ex/devtool.conf
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 devtool.conf
  --- ossp-pkg/ex/devtool.conf	31 Jan 2002 21:03:39 -0000	1.4
  +++ ossp-pkg/ex/devtool.conf	31 Jan 2002 21:07:26 -0000	1.5
  @@ -45,3 +45,7 @@
       echo "+++ testing"
       gunzip <ex-${V}.tar.gz | tar tvf -
   
  +%release
  +    echo "+++ copying to ftp://ftp.ossp.org/pkg/ex/"
  +    scp ex-*.tar.gz master.ossp.org:/e/ossp/ftp/pkg/ex/
  +

From ossp-cvs-owner@ossp.org  Thu Jan 31 22:14:11 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E14E0764FF; Thu, 31 Jan 2002 22:14:10 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc 00TODO AUTHORS rc.pod
Message-Id: <20020131211410.E14E0764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 22:14:10 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   31-Jan-2002 22:14:10
  Branch: HEAD                             Handle: 2002013121141000

  Modified files:
    ossp-pkg/rc             00TODO AUTHORS rc.pod

  Log:
    Corrections, additions, and moving items from 00TODO to rc.pod.

  Summary:
    Revision    Changes     Path
    1.15        +100 -57    ossp-pkg/rc/00TODO
    1.2         +3  -3      ossp-pkg/rc/AUTHORS
    1.26        +81 -13     ossp-pkg/rc/rc.pod
  ____________________________________________________________________________

  Index: ossp-pkg/rc/00TODO
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 00TODO
  --- ossp-pkg/rc/00TODO	31 Jan 2002 10:11:43 -0000	1.14
  +++ ossp-pkg/rc/00TODO	31 Jan 2002 21:14:10 -0000	1.15
  @@ -1,18 +1,12 @@
   00TODO: Tasks left to accomplish before rc is complete
   
  -Spec fehlt
  -  Command interpreter (probably goes in rc.usecase.pod)
  -    Beispiel
  -    Default
  -    Error
  +Unfinished business
  +  What when multiple command interpreters and one --print or --eval given?
  +  File rc.func totally undocumented, but logic should be clear.
     Control flow
  -    Errors during execution
  -      Multiple sections given
  -      Wildcard 'all' given
  -      Both wildcard and multiple sections
  -    Avoid a silent failure when giving non-existent run commands (Marcus.)
  -    Use case - give 'restart' command in place of 'start' to stopped prog
  -      User assumes stop implicitly dropped if program not running
  +    Explain logical ordering of multiple section spanning multiple rcfiles.
  +    Give example semantics of a common scenario.
  +    No error semantics in pseudocode.
   
   Consider
     Removing the OSSP_RC_DEACT deactivation feature (thl.)
  @@ -20,17 +14,50 @@
     Offer include directive in config file.
     Dynamic handling of command interpreter option.
     Environment of manpage has redundant text.
  +  Interpreter option irgendwo dass hat global scope.
  +    Als variable in %config Section?
   
   Must do
  -  Strip local popt code, and move in OSSP popt library.
  +  Strip local getopt and popt code, and use OSSP popt library.
     Translate rc bourne shell script to ANSI C.
     Finish man page. Start latex or Docbook guide.
     If a variable is defined for which no default exists, warn user (Scholli.)
   
  +Detailed ;-) project plan
  +-------------------------
  +Release v0.8
  +  Milestone 1, Drop in replacement for OpenPKG.
  +Release v0.9
  +  Milestone 2, Additional features in build.
  +Release v1.0
  +  Milestone 3, Cleanup and bugfix.
  +Release v1.2
  +  Milestone 4, Krasse L2 Logging und eigene Sprache
  +
  +Dreams
  +  Log to an L2 channel
  +    Channel specification could go in rc.conf
  +  Processing language
  +    !if !else    (conditional processing can cross-reference local config vars)
  +    !print <var> (print something to stdout)
  +    !logit <var> (log something, mstone1-3 to syslog, mstone4 to L2)
  +    !lineno [LAST] (the current line number or last successful command)
  +    !rcfile [EXISTS|ABSOLUTE] (info about an rcfile)
  +
  +    # Is there a way to merge rcfile and rc processor contexts?
  +    !envarpush <string> (push an environment variable on the rc stack)
  +    !envarpop (pop an environment variable from the rc stack)
  +
  +    !throw  [var] (returns var to rc processor and ask rc to return -1)
  +    !exit [var] (returns var to the rc processor and asks rc to abort execution)
  +    !return <var> (signals end of section and returns var to rc processor)
  +    ...
  +
  +
           /-------------------OSSP rc Inhalt------------------\
           | Manpage                                           |
           |   rc.1          Section 1 oder 8-Konflict?        |
  -        |   rc-sample.5   Vielleicht umnennen rc.usecases.5 |
  +        |   rc-sample.5   Vielleicht umnennen rc.samples.5  |
           |   rc.conf.5     Beschreibung aber kein Beispiel   |
           |                                                   |
           | Geliefert                                         |
  @@ -38,7 +65,7 @@
           |   rc.conf       Ausgekommentet Beispiel           |
           |                                                   |
           | Beispiele                                         |
  -        |   rc.example    Soll rc.fooboar umgenannt werden  |
  +        |   rc.example    Soll rc.foo umgenannt werden      |
           \---------------------------------------------------/
   
   Pseudocode
  @@ -46,64 +73,80 @@
                   * psoudocode implementation of rc *
                   ***********************************
   
  -parse options
  -read and merge all "rc.conf" files
  -
  -parse "Locate"
  -
  - Locate        /cw/etc/rc.d/rc.%{RCFILE:s/^all$/*/}
  - Locate        /cw/local/etc/rc.d/rc.%{RCFILE:s/^all$/*/}
  - Locate        %{RCFILE}/.duerc
  - Locate        ${HOME}/.duerc:m/^<dir path="%{RCFILE}">(.*)<\/dir>/i
  - Locate        ${HOME}/.duerc.%{RCFILE:s/^\///:s/[\/]/-/g}
  - Locate        path/file/regex:regex_inside_file
  -
  -foreach locate {
  -    for each (locate all possible rcfiles after variable expansion and shell globbing) {
  -        continue if (absolute path seen previously) //avoid duplicates
  -        if (filename matches given rcfile && securitycheck(RequireUmask, RequireOwner, RequireGroup))
  -            load file and grab only a part of the file according to info after colon given in "locate"
  +parse command line
  +merge all 'rc.conf' files
  +read environment variables
  +build option table
  +
  +parse 'Locate'
  +  Locate  /cw/etc/rc.d/rc.%{RCFILE:s/^all$/*/}
  +  Locate  /cw/local/etc/rc.d/rc.%{RCFILE:s/^all$/*/}
  +  Locate  %{RCFILE}/.duerc
  +  Locate  ${HOME}/.duerc:m/^<dir path="%{RCFILE}">(.*)<\/dir>/i
  +  Locate  ${HOME}/.duerc.%{RCFILE:s/^\///:s/[\/]/-/g}
  +  Locate  path/file/regex:regex_inside_file
  +
  +for each 'Locate' {
  +    for each (all rcfiles after variable expansion and shell globbing) {
  +        apply path conversion to rcfilename
  +        continue if (absolute path seen previously) // avoid duplicates
  +        if (filename matches given rcfile)
  +            if (securitycheck(RequireUmask, RequireOwner, RequireGroup))
  +                read and strip file ('Locate' regex, after colon)
       }
   }
   
  -foreach located_rcfile_fraction {
  -        parse rcfile into blocks according to --ParseSectionDef
  -        take out %config section according to --NameConfig
  -        take out %common section according to --NameCommon
  -        take out any sections given on command line
  +for each rcfile_fraction {
  +    parse into blocks according to --ParseSectionDef
  +    take out %config section according to --NameConfig
  +    take out %common section according to --NameCommon
  +    take out %error section according to --NameError
  +    take out %default section according to --NameDefault
  +    app.mapSections; // create the section map
   }
   
  -foreach section {
  +mapSections () // Map nonexisting %sections to %default
  +{              // from now on, 'section' implies 'section->lookupMapval'
  +    while (tempSection := ParsedCLI->nextSection) // CLI = command line iface
  +    if (rcfile_fraction->has(tempSection))
  +        rcfile_fraction->sectionNames += tempSection;
  +    else if (rcfile_fraction->has(%default))
  +        rcfile_fraction->sectionNames += %default;
  +    else handle error
  +}
  +
  +for each section on command line {
       if (multiple rcfiles, i.e. all)
  -        sort rcfiles by section priority.
  -    foreach rcfile {
  +        sort rcfiles by section priority (%defaults are last)
  +    for each rcfile {
           script = "";
           script += %config from rcfile
  -        script += rc.env and override it
  -        create_script_for_rcfile(script, section, parent=no)
  -        expand our internal variables
  -        execute, print or printeval script with user & group priveleges
  +        script += rc.env (overriding any duplicate values)
  +        create_rcfile_script(script, section, recurse=no)
  +        expand internal variables
  +        execute, print, or printeval script with user & group priveleges
               and command interpreter according to options or section header
       }
   }
   EXIT
   
  -
  -create_script_for_rcfile(script, section, parent)
  +create_rcfile_script(script, section, recurse)
   {
  -    script += "${body}" //start with a pseudo value
  +    script += "${body}" // start with a pseudo value
   
  -    if (!parent) { //only one rc.func!?
  -        replace ${body} with %common from rc.func
  -        if no ${body} assume prepend
  +    if (!recurse) {     // only one rc.func is possible
  +        if no ${body} in rc.func->%common prepend ${body} to rc.func->%common
  +        replace script->${body} with rc.func->%common
       }
  -    replace ${body} with %common from rcfile
  -    if no ${body} assume prepend
  -    if (!parent) { //only one rc.func!?
  -        replace ${body} with %section from rc.func
  -        if no ${body} assume prepend
  +
  +    if no ${body} in rcfile->%common prepend ${body} to rcfile->%common
  +    replace script->${body} with rcfile->%common
  +    if (!recurse) { // only one rc.func is possible
  +        if no ${body} in rc.func->%section prepend ${body} to rc.func->%section
  +        replace script->${body} with rc.func->%section
       }
  -    replace ${body} with %section from rcfile
  +    replace script->${body} with rcfile->%section
   
  -    expand references using --ParseSectionRef and calling create_script_for_rcfile(section, parent=yes);
  +    while (ref := ParseSectionRef(script))
  +        ref->create_rcfile_script(recurse=yes);
   }
  Index: ossp-pkg/rc/AUTHORS
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 AUTHORS
  --- ossp-pkg/rc/AUTHORS	8 Jan 2002 15:47:11 -0000	1.1
  +++ ossp-pkg/rc/AUTHORS	31 Jan 2002 21:14:10 -0000	1.2
  @@ -2,7 +2,7 @@
   =======
   
   This is a list of the authors who have written
  -or edited major parts of the OSSP RC source code.
  +or edited major parts of the OSSP rc source code.
   
  -Ralf S. Engelschall  <rse@engelschall.com>
  -Michael Schloh       <michael.schloh@cw.com>
  +Ralf S. Engelschall             <ralf.engelschall@cw.com>
  +Michael Schloh von Bennewitz    <michael.schloh@cw.com>
  Index: ossp-pkg/rc/rc.pod
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 rc.pod
  --- ossp-pkg/rc/rc.pod	31 Jan 2002 10:11:43 -0000	1.25
  +++ ossp-pkg/rc/rc.pod	31 Jan 2002 21:14:10 -0000	1.26
  @@ -52,10 +52,15 @@
   [B<--RequireUmask umask>]
   [B<--RequireOwner uid|name>]
   [B<--RequireGroup gid|name>]
  +[B<--ParseEnvAss regex>]
   [B<--ParseSectionDef regex>]
   [B<--ParseSectionRef regex>]
  +[B<--ParseSectionParam regex>]
  +[B<--ParseTerminal regex>]
   [B<--NameConfig> name]
   [B<--NameCommon> name]
  +[B<--NameDefault> name]
  +[B<--NameError> name]
   I<rcfile>
   I<section>
   
  @@ -176,13 +181,25 @@
   
   group of the F<rcfile> must match gid|name, otherwise it's ignored.
   
  +=item B<--ParseConfigAss regex>
  +
  +regex matching the variable assignments in a F<rcfile>.
  +
   =item B<--ParseSectionDef regex>
   
  -regex matching a section within a F<rcfile>.
  +regex matching a section label in a F<rcfile>.
   
   =item B<--ParseSectionRef regex>
   
  -regex matching a reference within a F<rcfile>.
  +regex matching a reference in a F<rcfile>.
  +
  +=item B<--ParseSectionParam regex>
  +
  +regex matching a section parameter in a F<rcfile>.
  +
  +=item B<--ParseTerminal regex>
  +
  +regex matching a terminal symbol in a F<rcfile>. See LANGUAGE.
   
   =item B<--NameConfig> name
   
  @@ -192,6 +209,14 @@
   
   name of the common section, defaults to %common.
   
  +=item B<--NameDefault> name
  +
  +name of the default section, defaults to %default.
  +
  +=item B<--NameError> name
  +
  +name of the error section, defaults to %error.
  +
   Every command line longoption corresponds to a keyword in the F<rc.conf> file.
   When prefixed with 'OSSP_RC_' and its name in upper case, an option can be set
   as an environment variable. First, options from the F<rc.conf> file are read.
  @@ -206,17 +231,54 @@
   'OSSP_RC_' and be all upper case. As a security measure, one environment
   variable exists that is not found as an option elsewhere. This variable
   deactivates B<OSSP rc>, and each subsequent usage will return success and
  -print a 'No commands run: OSSP_RC_DEACT set to yes' error message to the
  -standard output.
  +write 'No commands run: OSSP_RC_DEACT set to yes' to the console and syslog
  +with LOG_USER and LOG_ERR (see syslog(3)).
   
   B<OSSP_RC_DEACT> - Set to 'yes' or 'true' to totally deactivate B<OSSP rc>
   
  +=head1 COMMAND INTERPRETER
  +
  +As long as a valid interpreter path is specified in the section labels of a
  +F<rcfile>, the runcommands resulting from a --eval, --exec, or --print
  +operation can be written in any runtime-interpreted language. This means that
  +a perl programmer can write runcommands in perl, and specify the perl
  +interpreter path in the corresponding section label of the F<rcfile>. A
  +different programming language can be used for each section, even though this
  +would complicate inclusion of script from the B<%common> section and
  +F<rc.func> sections (because each section is associated with only one
  +interpreter). If the command interpreter in a section label is not specified,
  +then the Bourne shell will be used by default. See FILES/rc.foo for details.
  +
   =head1 RETURN VALUE
   
   -1 Error in rc
    0 Success
    1 Error in command executed by rc
   
  +=head1 ERROR HANDLING
  +
  +Rich and fine-tuned error handling is possible by writing one or both of the
  +following sections into F<rcfile>(s). These sections typically reference the
  +local F<rcfile>'s variables ${rc_errcode} and ${rc_errstring} for more
  +information about which error was encountered and its text.
  +
  +=item B<%error>
  +
  +If an error condition arises during an F<rcfile>'s processing, control will
  +pass to the B<%error> section whose commands will begin to run. Should no such
  +B<%error> section exist, rc will stop any rcfile processing and write error
  +strings to the console and syslog using LOG_USER and LOG_ERR (see syslog(3)).
  +An empty B<%error> section in each F<rcfile> is synonymous to a
  +C<IgnoreAllErrors> option (which doesn't exist).
  +
  +=item B<%default>
  +
  +The commands in the B<%default> section are run when the corresponding
  +F<rcfile> contains no section label matching the one(s) specified on the
  +command line. If the appropriate section label doesn't exist and neither does
  +B<%default>, then an error is assumed and control flows to the B<%error>
  +section.
  +
   =head1 EXAMPLES
   
   A runcommand consists of a single program name and one or more sections. The
  @@ -227,16 +289,22 @@
    /usr/local/bin/rc --info
    /sbin/rc --query lmtp2nntp
    /cw/etc/rc --conf /etc/rc.conf --debug smtpd stop
  - /sfw/etc/rc --silent ntpd start sync stop start
  + /sfw/etc/rc.d/rc.ntpd --silent start sync stop start
    /usr/local/bin/rc httpd reload # sends a HUP signal
   
  -Arguments may also be passed in to B<OSSP rc>, which will forward them to each
  -section as it is called.
  -
  - /mybin/rc sshd start LOG_USER  # calls logger(1) and passes LOG_USER
  - /etc/rc lmtp2nntp start 2      # sleep for 2 seconds before returning
  - /etc/rc.d/rc.rsyncd restart 4  # leave a 4 second pause between start and stop
  - /cw/etc/rc.d/rc.ftpd start 32  # a maximum of 32 users can connect
  +Arguments in the form of name=value pairs may be passed to the section(s)
  +given on the command line. In the F<rcfile>, such arguments will appear as
  +normal configuration variables. They can be referenced as such (by default as
  +${myarg}). On the command line, the arguments following a section will be
  +local to the section and unusable by the others. If a argument is needed by
  +more than one section, then repeat its definition after each section given on
  +the command line.
  +
  + /mybin/rc all start sFac="LOG_USER"  # pass LOG_USER as an argument to 'start'
  + /etc/rc lmtp2nntp start nSleep=2     # sleep for 2 seconds before returning
  + /etc/rc.d/rc.rsyncd restart nSleep=4 # pause 4 seconds between start and stop
  + /cw/etc/rc.d/rc.ftpd start nMax=32   # a maximum of 32 users can connect
  + rc -rdv all stop nSleep=2 start nSleep=4 sLevel="LOG_INFO" bQuiet=1
   
   To evaluate a runcommand for all programs with an identical section name, a
   short expression can be written into a F<.profile> file. When the shell
  @@ -259,7 +327,7 @@
   more information, inspect the /etc/rc structures provided by the FreeBSD,
   Solaris, and Red Hat distributions.
   
  -rc-sample(5), rc.conf(1), and rcfile(1).
  +rc-sample(5).
   
   =head1 AUTHORS
   

From ossp-cvs-owner@ossp.org  Thu Jan 31 22:17:50 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AC79A764FF; Thu, 31 Jan 2002 22:17:50 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa_test.c
Message-Id: <20020131211750.AC79A764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 22:17:50 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Jan-2002 22:17:50
  Branch: HEAD                             Handle: 2002013121175000

  Modified files:
    ossp-pkg/sa             sa_test.c

  Log:
    fix name

  Summary:
    Revision    Changes     Path
    1.15        +1  -1      ossp-pkg/sa/sa_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa_test.c
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 sa_test.c
  --- ossp-pkg/sa/sa_test.c	30 Jan 2002 16:43:00 -0000	1.14
  +++ ossp-pkg/sa/sa_test.c	31 Jan 2002 21:17:50 -0000	1.15
  @@ -180,7 +180,7 @@
       ts_suite_t *ts;
       int n;
   
  -    ts = ts_suite_new("OSSP SA (Socket Abstraction Library)");
  +    ts = ts_suite_new("OSSP sa (Socket Abstraction)");
       ts_suite_test(ts, test_saa_impexp,  "socket address abstraction import/export");
       ts_suite_test(ts, test_saa_match,   "socket address abstraction matching");
       ts_suite_test(ts, test_sa_stream,   "socket abstraction stream communication");

From ossp-cvs-owner@ossp.org  Thu Jan 31 22:20:45 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 54431764FF; Thu, 31 Jan 2002 22:20:45 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex Makefile.in configure.ac
Message-Id: <20020131212045.54431764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 22:20:45 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Jan-2002 22:20:45
  Branch: HEAD                             Handle: 2002013121204400

  Modified files:
    ossp-pkg/ex             Makefile.in configure.ac

  Log:
    fix licenses

  Summary:
    Revision    Changes     Path
    1.4         +16 -13     ossp-pkg/ex/Makefile.in
    1.3         +16 -13     ossp-pkg/ex/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/ex/Makefile.in
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 Makefile.in
  --- ossp-pkg/ex/Makefile.in	31 Jan 2002 21:03:39 -0000	1.3
  +++ ossp-pkg/ex/Makefile.in	31 Jan 2002 21:20:44 -0000	1.4
  @@ -7,20 +7,23 @@
   ##  This file is part of OSSP ex, an exception handling library
   ##  which can be found at http://www.ossp.org/pkg/ex/.
   ##
  -##  This program is free software; you can redistribute it and/or
  -##  modify it under the terms of the GNU General Public  License
  -##  as published by the Free Software Foundation; either version
  -##  2.0 of the License, or (at your option) any later version.
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
   ##
  -##  This program is distributed in the hope that it will be useful,
  -##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  -##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  -##  General Public License for more details.
  -##
  -##  You should have received a copy of the GNU General Public License
  -##  along with this file; if not, write to the Free Software
  -##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  -##  USA, or contact the OSSP project <ossp@ossp.org>.
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
   ##
   ##  Makefile.in: make(1) build procedure
   ##
  Index: ossp-pkg/ex/configure.ac
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 configure.ac
  --- ossp-pkg/ex/configure.ac	31 Jan 2002 20:35:43 -0000	1.2
  +++ ossp-pkg/ex/configure.ac	31 Jan 2002 21:20:44 -0000	1.3
  @@ -7,20 +7,23 @@
   dnl ##  This file is part of OSSP ex, an exception handling library
   dnl ##  which can be found at http://www.ossp.org/pkg/ex/.
   dnl ##
  -dnl ##  This program is free software; you can redistribute it and/or
  -dnl ##  modify it under the terms of the GNU General Public  License
  -dnl ##  as published by the Free Software Foundation; either version
  -dnl ##  2.0 of the License, or (at your option) any later version.
  +dnl ##  Permission to use, copy, modify, and distribute this software for
  +dnl ##  any purpose with or without fee is hereby granted, provided that
  +dnl ##  the above copyright notice and this permission notice appear in all
  +dnl ##  copies.
   dnl ##
  -dnl ##  This program is distributed in the hope that it will be useful,
  -dnl ##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  -dnl ##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  -dnl ##  General Public License for more details.
  -dnl ##
  -dnl ##  You should have received a copy of the GNU General Public License
  -dnl ##  along with this file; if not, write to the Free Software
  -dnl ##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  -dnl ##  USA, or contact the OSSP project <ossp@ossp.org>.
  +dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +dnl ##  SUCH DAMAGE.
   dnl ##
   dnl ##  configure.ac: GNU Autoconf source script
   dnl ##

From ossp-cvs-owner@ossp.org  Thu Jan 31 22:35:14 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E9ECB764FF; Thu, 31 Jan 2002 22:35:13 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa .cvsignore INSTALL Makefile.in README VERSION ...
Message-Id: <20020131213513.E9ECB764FF@mail.ossp.org>
Date: Thu, 31 Jan 2002 22:35:13 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   31-Jan-2002 22:35:13
  Branch: HEAD                             Handle: 2002013121351300

  Added files:
    ossp-pkg/sa             INSTALL
  Modified files:
    ossp-pkg/sa             .cvsignore Makefile.in README VERSION configure.ac
                            devtool.conf sa-config.in sa.pod

  Log:
    final polishing for release

  Summary:
    Revision    Changes     Path
    1.5         +8  -7      ossp-pkg/sa/.cvsignore
    1.1         +17 -0      ossp-pkg/sa/INSTALL
    1.12        +17 -0      ossp-pkg/sa/Makefile.in
    1.4         +8  -7      ossp-pkg/sa/README
    1.2         +2  -2      ossp-pkg/sa/VERSION
    1.10        +3  -2      ossp-pkg/sa/configure.ac
    1.6         +23 -3      ossp-pkg/sa/devtool.conf
    1.3         +1  -1      ossp-pkg/sa/sa-config.in
    1.24        +12 -7      ossp-pkg/sa/sa.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sa/.cvsignore
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 .cvsignore
  --- ossp-pkg/sa/.cvsignore	8 Oct 2001 14:47:30 -0000	1.4
  +++ ossp-pkg/sa/.cvsignore	31 Jan 2002 21:35:13 -0000	1.5
  @@ -1,12 +1,13 @@
  +Makefile
   config.guess
  +config.h
  +config.h.in
   config.sub
  -ltmain.sh
  -libtool.m4
  -shtool
   configure
  -config.h.in
  -Makefile
  -config.h
  -sa_test
  +libtool.m4
  +ltmain.sh
   sa-config
  +sa.3
   sa.h
  +sa_test
  +shtool
  Index: ossp-pkg/sa/INSTALL
  ============================================================
  $ cvs update -p -r1.1 INSTALL
     ___  __ _ 
    / __|/ _` |
    \__ \ (_| |
    |___/\__,_|
  
    OSSP sa -- Socket Abstraction Library
  
    INSTALLATION
  
    To install OSSP sa into /path/to/sa/ perform
    the following steps in your shell:
        
      $ ./configure --prefix=/path/to/sa
      $ make
      $ make check
      $ make install
  
  Index: ossp-pkg/sa/Makefile.in
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 Makefile.in
  --- ossp-pkg/sa/Makefile.in	2 Jan 2002 12:43:50 -0000	1.11
  +++ ossp-pkg/sa/Makefile.in	31 Jan 2002 21:35:13 -0000	1.12
  @@ -48,6 +48,7 @@
   SHTOOL      = ./shtool
   LIBTOOL     = ./libtool
   TRUE        = true
  +POD2MAN     = pod2man
   
   LIB_NAME    = libsa.la
   LIB_OBJS    = sa.lo
  @@ -73,6 +74,16 @@
   $(TST_NAME): $(TST_OBJS) $(LIB_NAME)
   	@$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $(TST_NAME) $(TST_OBJS) $(LIB_NAME) $(LIBS)
   
  +man: sa.3
  +sa.3: sa.pod
  +	V1=`$(SHTOOL) version -l txt -d short VERSION`; \
  +	V2=`$(SHTOOL) version -l txt -d long VERSION`; \
  +	D=`$(SHTOOL) version -l txt -d long VERSION | sed -e 's;.*(;;' -e 's;).*;;'`; \
  +	$(POD2MAN) --quotes=none \
  +	           --section=3 --center="Socket Abstraction" \
  +	           --release="$$D" --date="OSSP sa $$V1" sa.pod | \
  +	sed -e "s;SA_VERSION_STR;$$V2;" >sa.3
  +
   check: $(TST_NAME)
   	@$(LIBTOOL) --mode=execute ./$(TST_NAME)
   
  @@ -81,14 +92,19 @@
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(includedir)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libdir)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man3
   	$(SHTOOL) install -c -m 755 sa-config $(DESTDIR)$(bindir)/
   	$(SHTOOL) install -c -m 644 sa.h $(DESTDIR)$(includedir)/
  +	$(SHTOOL) install -c -m 644 sa.3 $(DESTDIR)$(mandir)/man3/
   	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libsa.la $(DESTDIR)$(libdir)/
   
   uninstall:
   	@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libsa.la
  +	-$(RM) $(DESTDIR)$(mandir)/man3/sa.3
   	-$(RM) $(DESTDIR)$(includedir)/sa.h
   	-$(RM) $(DESTDIR)$(bindir)/sa-config
  +	-$(RMDIR) $(DESTDIR)$(mandir)/man3 >/dev/null 2>&1 || $(TRUE)
  +	-$(RMDIR) $(DESTDIR)$(mandir) >/dev/null 2>&1 || $(TRUE)
   	-$(RMDIR) $(DESTDIR)$(libdir) >/dev/null 2>&1 || $(TRUE)
   	-$(RMDIR) $(DESTDIR)$(includedir) >/dev/null 2>&1 || $(TRUE)
   	-$(RMDIR) $(DESTDIR)$(bindir) >/dev/null 2>&1 || $(TRUE)
  @@ -106,6 +122,7 @@
   	-$(RM) libtool
   
   realclean: distclean
  +	-$(RM) ex.3
   	-$(RM) configure config.h.in
   	-$(RM) shtool
   	-$(RM) ltmain.sh libtool.m4 config.guess config.sub
  Index: ossp-pkg/sa/README
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 README
  --- ossp-pkg/sa/README	2 Jan 2002 12:43:50 -0000	1.3
  +++ ossp-pkg/sa/README	31 Jan 2002 21:35:13 -0000	1.4
  @@ -3,16 +3,17 @@
     \__ \ (_| |
     |___/\__,_|
   
  -  SA - Socket Abstraction Library
  -  Version 0.1.0 (13-Sep-2001)
  +  OSSP sa -- Socket Abstraction Library
  +  Version 0.9.0 (31-Jan-2002)
   
     ABSTRACT
   
  -  The OSSP SA library is an abstraction library for the Unix socket
  -  interface featuring stream and datagram oriented communication over
  -  Unix Domain and Internet Domain sockets. It provides the following key
  -  features: address abstraction, type abstraction, I/O timeouts, I/O
  -  stream buffering and convinience I/O functions.
  +  OSSP sa is an abstraction library for the Unix socket application
  +  programming interface (API) featuring stream and datagram oriented
  +  communication over Unix Domain and Internet Domain (TCP and UDP)
  +  sockets. It provides the following key features: address abstraction
  +  (local, IPv4, and IPv6), type abstraction, I/O timeouts, I/O stream
  +  buffering and convenience I/O functions.
   
     COPYRIGHT AND LICENSE
   
  Index: ossp-pkg/sa/VERSION
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 VERSION
  --- ossp-pkg/sa/VERSION	8 Oct 2001 11:43:25 -0000	1.1
  +++ ossp-pkg/sa/VERSION	31 Jan 2002 21:35:13 -0000	1.2
  @@ -1,6 +1,6 @@
   
  -  VERSION -- Version Information for OSSP SA (syntax: Text)
  +  VERSION -- Version Information for OSSP sa (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP SA, Version 0.1.0 (08-Oct-2001)
  +  This is OSSP sa, Version 0.9.0 (31-Jan-2002)
   
  Index: ossp-pkg/sa/configure.ac
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 configure.ac
  --- ossp-pkg/sa/configure.ac	31 Jan 2002 09:09:55 -0000	1.9
  +++ ossp-pkg/sa/configure.ac	31 Jan 2002 21:35:13 -0000	1.10
  @@ -33,8 +33,9 @@
   AC_INIT(README)
   
   AC_DIVERT_PUSH(NOTICE)
  -V=`./shtool version -l txt -d long VERSION`
  -./shtool echo -e "Configuring %BOSSP sa%b (Socket Abstraction), Version %B${V}%b"
  +SA_VERSION_STR=`./shtool version -l txt -d long VERSION`
  +./shtool echo -e "Configuring %BOSSP sa%b (Socket Abstraction), Version %B${SA_VERSION_STR}%b"
  +AC_SUBST(SA_VERSION_STR)
   AC_DIVERT_POP()
   
   AC_SET_MAKE
  Index: ossp-pkg/sa/devtool.conf
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 devtool.conf
  --- ossp-pkg/sa/devtool.conf	31 Oct 2001 19:58:22 -0000	1.5
  +++ ossp-pkg/sa/devtool.conf	31 Jan 2002 21:35:13 -0000	1.6
  @@ -20,12 +20,32 @@
           "$@"
   
   %version
  -    ./shtool version -l txt -n "OSSP SA" -e VERSION
  +    ./shtool version -l txt -n "OSSP sa" -e VERSION
  +    V=`./shtool version -l txt -d long VERSION`
  +    sed -e "s/Version .*(.*)/Version $V/g" <README >README.n 
  +    mv README.n README
   
   %dist
  -    make distclean >/dev/null 2>&1
  +    echo "+++ generating"
  +    ./devtool autoclean
  +    ./devtool autogen
  +    echo "+++ configuring"
  +    ./configure
  +    echo "+++ building"
  +    make clean all man
  +    echo "+++ cleaning"
  +    make distclean
  +    echo "+++ fixing"
       ./shtool fixperm -v .
  +    echo "+++ rolling"
       V=`./shtool version -l txt -d short VERSION`
       ./shtool tarball -o sa-${V}.tar.gz -d sa-${V} -u ossp -g ossp \
  -                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf' -c 'gzip --best' .
  +                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool*,*.tar.gz' -c 'gzip --best' .
  +    ls -l sa-${V}.tar.gz
  +    echo "+++ testing"
  +    gunzip <sa-${V}.tar.gz | tar tvf -
  +
  +%release
  +    echo "+++ copying to ftp://ftp.ossp.org/pkg/sa/"
  +    scp sa-*.tar.gz master.ossp.org:/e/ossp/ftp/pkg/sa/
   
  Index: ossp-pkg/sa/sa-config.in
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 sa-config.in
  --- ossp-pkg/sa/sa-config.in	2 Jan 2002 12:43:50 -0000	1.2
  +++ ossp-pkg/sa/sa-config.in	31 Jan 2002 21:35:13 -0000	1.3
  @@ -82,7 +82,7 @@
               exit 0
               ;;
           --version|-v)
  -            echo "OSSP SA $sa_version"
  +            echo "OSSP sa $sa_version"
               exit 0
               ;;
           --all)
  Index: ossp-pkg/sa/sa.pod
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 sa.pod
  --- ossp-pkg/sa/sa.pod	2 Jan 2002 14:41:07 -0000	1.23
  +++ ossp-pkg/sa/sa.pod	31 Jan 2002 21:35:13 -0000	1.24
  @@ -32,7 +32,11 @@
   
   =head1 NAME
   
  -B<OSSP sa> - Socket Abstraction Library
  +B<OSSP sa> - Socket Abstraction
  +
  +=head1 VERSION
  +
  +B<OSSP sa SA_VERSION_STR>
   
   =head1 SYNOPSIS
   
  @@ -438,7 +442,7 @@
   (I<yesno>=C<1>) or disabling (I<yesno>=C<0>) Nagle's Algorithm
   (see RFC898); C<SA_OPTION_LINGER> (C<struct linger *>I<linger>) for enabling
   (C<linger-E<gt>l_onoff>=C<1>) or disabling (C<linger-E<gt>l_onoff>=C<0>
  -and C<linger-E<gt>l_linger=I<seconds>) lingering on close (see
  +and C<linger-E<gt>l_linger=>I<seconds>) lingering on close (see
   C<struct linger> in F<sys/socket.h>); C<SA_OPTION_REUSEADDR> (C<int>
   I<yesno>) for enabling (I<yesno>=C<1>) or disabling (I<yesno>=C<0>)
   the reusability of the address on binding (see C<SO_REUSEADDR>
  @@ -670,11 +674,12 @@
   
   =head1 HISTORY
   
  -B<OSSP sa> was invented in August 2001 by Ralf S. Engelschall for use
  -inside the OSSP project. Its creation was prompted by the requirement
  -to implement an SMTP logging channel for B<OSSP l2> (logging library).
  -Its initial code was derived from a predecessor sub-library originally
  -written for socket address abstraction inside B<OSSP lmtp2nntp>.
  +B<OSSP sa> was invented in August 2001 by Ralf S. Engelschall
  +E<lt>rse@engelschall.comE<gt> for use inside the OSSP project. Its
  +creation was prompted by the requirement to implement an SMTP logging
  +channel for B<OSSP l2> (logging library). Its initial code was derived
  +from a predecessor sub-library originally written for socket address
  +abstraction inside B<OSSP lmtp2nntp>.
   
   =head1 AUTHORS
   

From ossp-cvs-owner@ossp.org  Fri Feb  1 15:42:35 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8A6277651B; Fri,  1 Feb 2002 15:42:35 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool ChangeLog
Message-Id: <20020201144235.8A6277651B@mail.ossp.org>
Date: Fri,  1 Feb 2002 15:42:35 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   01-Feb-2002 15:42:35
  Branch: HEAD                             Handle: 2002020114423400

  Modified files:
    ossp-pkg/shtool         ChangeLog

  Log:
    fix date

  Summary:
    Revision    Changes     Path
    1.165       +1  -1      ossp-pkg/shtool/ChangeLog
  ____________________________________________________________________________

  Index: ossp-pkg/shtool/ChangeLog
  ============================================================
  $ cvs diff -u -r1.164 -r1.165 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	31 Dec 2001 15:06:04 -0000	1.164
  +++ ossp-pkg/shtool/ChangeLog	1 Feb 2002 14:42:34 -0000	1.165
  @@ -9,7 +9,7 @@
   
    ChangeLog
   
  - Changes between 1.5.4 and 1.6.0 (14-Jun-2001 to xx-Jan-2002):
  + Changes between 1.5.4 and 1.6.0 (14-Jun-2001 to 01-Feb-2002):
   
      *) Added new command `shtool rotate `[-v|--verbose] [-t|--trace]
         [-f|--force] [-n|--num-files <count>] [-s|--min-size <size>]

From ossp-cvs-owner@ossp.org  Fri Feb  1 15:44:07 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 176387651B; Fri,  1 Feb 2002 15:44:07 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool README VERSION
Message-Id: <20020201144407.176387651B@mail.ossp.org>
Date: Fri,  1 Feb 2002 15:44:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   01-Feb-2002 15:44:07
  Branch: HEAD                             Handle: 2002020114440600

  Modified files:
    ossp-pkg/shtool         README VERSION

  Log:
    update version date

  Summary:
    Revision    Changes     Path
    1.84        +1  -1      ossp-pkg/shtool/README
    1.62        +1  -1      ossp-pkg/shtool/VERSION
  ____________________________________________________________________________

  Index: ossp-pkg/shtool/README
  ============================================================
  $ cvs diff -u -r1.83 -r1.84 README
  --- ossp-pkg/shtool/README	31 Dec 2001 15:06:04 -0000	1.83
  +++ ossp-pkg/shtool/README	1 Feb 2002 14:44:06 -0000	1.84
  @@ -10,7 +10,7 @@
     http://www.gnu.org/software/shtool/
     ftp://ftp.gnu.org/gnu/shtool/
   
  -  Version 1.6.0 (23-Sep-2001)
  +  Version 1.6.0 (01-Feb-2002)
   
     The GNU shtool program is a compilation of small but very stable and
     portable shell scripts into a single shell tool. All ingredients
  Index: ossp-pkg/shtool/VERSION
  ============================================================
  $ cvs diff -u -r1.61 -r1.62 VERSION
  --- ossp-pkg/shtool/VERSION	23 Sep 2001 10:27:52 -0000	1.61
  +++ ossp-pkg/shtool/VERSION	1 Feb 2002 14:44:06 -0000	1.62
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for GNU shtool (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is GNU shtool, Version 1.6.0 (23-Sep-2001)
  +  This is GNU shtool, Version 1.6.0 (01-Feb-2002)
   

From ossp-cvs-owner@ossp.org  Fri Feb  1 15:51:06 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CAD2E7651B; Fri,  1 Feb 2002 15:51:05 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool shtool.spec
Message-Id: <20020201145105.CAD2E7651B@mail.ossp.org>
Date: Fri,  1 Feb 2002 15:51:05 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   01-Feb-2002 15:51:05
  Branch: HEAD                             Handle: 2002020114510500

  Modified files:
    ossp-pkg/shtool         shtool.spec

  Log:
    fix .spec

  Summary:
    Revision    Changes     Path
    1.14        +1  -1      ossp-pkg/shtool/shtool.spec
  ____________________________________________________________________________

  Index: ossp-pkg/shtool/shtool.spec
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 shtool.spec
  --- ossp-pkg/shtool/shtool.spec	31 Dec 2001 15:06:04 -0000	1.13
  +++ ossp-pkg/shtool/shtool.spec	1 Feb 2002 14:51:05 -0000	1.14
  @@ -37,7 +37,7 @@
   Version:    %{ver}
   Release:    %{rel}
   Group:      Development/Tools
  -Copyright:  GPL
  +License:    GPL
   URL:        http://www.gnu.org/software/shtool/
   Summary:    GNU shtool, The GNU Portable Shell Tool
   

From ossp-cvs-owner@ossp.org  Fri Feb  1 15:51:22 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D04EB76532; Fri,  1 Feb 2002 15:51:21 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool ChangeLog configure configure.ac configure...
Message-Id: <20020201145121.D04EB76532@mail.ossp.org>
Date: Fri,  1 Feb 2002 15:51:21 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   01-Feb-2002 15:51:21
  Branch: HEAD                             Handle: 197001010100001012571481

  Added files:
    ossp-pkg/shtool         configure.ac
  Modified files:
    ossp-pkg/shtool         ChangeLog
  Removed files:
    ossp-pkg/shtool         configure configure.in

  Log:
    switch to Autoconf 2.52

  Summary:
    Revision    Changes     Path
    1.166       +6  -0      ossp-pkg/shtool/ChangeLog
    NONE        +0  -838    ossp-pkg/shtool/configure
    1.1         +57 -0      ossp-pkg/shtool/configure.ac
    NONE        +0  -59     ossp-pkg/shtool/configure.in
  ____________________________________________________________________________

  Index: ossp-pkg/shtool/ChangeLog
  ============================================================
  $ cvs diff -u -r1.165 -r1.166 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	1 Feb 2002 14:42:34 -0000	1.165
  +++ ossp-pkg/shtool/ChangeLog	1 Feb 2002 14:51:21 -0000	1.166
  @@ -11,6 +11,12 @@
   
    Changes between 1.5.4 and 1.6.0 (14-Jun-2001 to 01-Feb-2002):
   
  +   *) Upgraded to GNU Autoconf 2.52 environment.
  +      [Ralf S. Engelschall]
  +
  +   *) Fixed contained RPM specification (shtool.spec)
  +      [Ralf S. Engelschall]
  +
      *) Added new command `shtool rotate `[-v|--verbose] [-t|--trace]
         [-f|--force] [-n|--num-files <count>] [-s|--min-size <size>]
         [-c|--copy] [-r|--remove] [-a|--archive-dir <dir>] [-z|--compress
    Index: ossp-pkg/shtool/configure.ac
  ============================================================
  $ cvs update -p -r1.1 configure.ac
  dnl ##
  dnl ##  configure.ac -- Autoconf source for GNU shtool
  dnl ##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  dnl ##
  dnl ##  This file is part of shtool and free software; you can redistribute
  dnl ##  it and/or modify it under the terms of the GNU General Public
  dnl ##  License as published by the Free Software Foundation; either version
  dnl ##  2 of the License, or (at your option) any later version.
  dnl ##
  dnl ##  This file is distributed in the hope that it will be useful,
  dnl ##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  dnl ##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  dnl ##  General Public License for more details.
  dnl ##
  dnl ##  You should have received a copy of the GNU General Public License
  dnl ##  along with this program; if not, write to the Free Software
  dnl ##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  dnl ##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  dnl ##
  
  AC_PREREQ(2.52)
  AC_REVISION($1.0$)
  AC_INIT(README)
  
  AC_DIVERT_PUSH(NOTICE)
  SHTOOL_VERSION_STR="`sh sh.version -l txt -d long VERSION`"
  sh sh.echo -e "Configuring %BGNU shtool%b (Portable Shell Tool), version %B${SHTOOL_VERSION_STR}%b"
  echo "Copyright (c) 1994-2002 Ralf S. Engelschall <rse@engelschall.com>"
  AC_SUBST(SHTOOL_VERSION_STR)
  AC_DIVERT_POP()
  
  AC_PREFIX_DEFAULT(/usr/local)
  AC_SET_MAKE
  
  AC_MSG_CHECKING(for perl interpreter)
  PERL=`sh sh.path -m perl`
  AC_SUBST(PERL)
  AC_MSG_RESULT($PERL)
  if test ".$PERL" = .; then
      echo "$0:Error: no perl interpreter found" 1>&2
      exit 1
  fi
  
  AC_MSG_CHECKING(for pod2man conversion tool)
  perldir=`sh sh.path -d $PERL`
  POD2MAN=`sh sh.path -m -p "${perldir}:${PATH}" pod2man`
  AC_SUBST(POD2MAN)
  AC_MSG_RESULT($POD2MAN)
  if test ".$POD2MAN" = .; then
      echo "$0:Error: no pod2man tool found" 1>&2
      exit 1
  fi
  
  AC_CONFIG_FILES(Makefile shtoolize)
  AC_OUTPUT
  chmod a+x shtoolize
  
  

From ossp-cvs-owner@ossp.org  Fri Feb  1 15:58:05 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0E6E87651B; Fri,  1 Feb 2002 15:58:05 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool .configure .cvsignore Makefile.in devtool ...
Message-Id: <20020201145805.0E6E87651B@mail.ossp.org>
Date: Fri,  1 Feb 2002 15:58:05 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   01-Feb-2002 15:58:04
  Branch: HEAD                             Handle: 197001010100001012571884

  Added files:
    ossp-pkg/shtool         devtool devtool.conf devtool.func
  Modified files:
    ossp-pkg/shtool         .cvsignore Makefile.in
  Removed files:
    ossp-pkg/shtool         .configure

  Log:
    switch to devtool environment

  Summary:
    Revision    Changes     Path
    NONE        +0  -2      ossp-pkg/shtool/.configure
    1.4         +4  -3      ossp-pkg/shtool/.cvsignore
    1.46        +0  -47     ossp-pkg/shtool/Makefile.in
    1.1         +47 -0      ossp-pkg/shtool/devtool
    1.1         +42 -0      ossp-pkg/shtool/devtool.conf
    1.1         +71 -0      ossp-pkg/shtool/devtool.func
  ____________________________________________________________________________

    Index: ossp-pkg/shtool/.cvsignore
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 .cvsignore
  --- ossp-pkg/shtool/.cvsignore	7 Jul 1999 06:43:03 -0000	1.3
  +++ ossp-pkg/shtool/.cvsignore	1 Feb 2002 14:58:04 -0000	1.4
  @@ -1,8 +1,9 @@
   Makefile
  +config.cache
  +config.log
  +config.status
  +configure
   shtool
   shtool.1
   shtoolize
   shtoolize.1
  -config.log
  -config.cache
  -config.status
  Index: ossp-pkg/shtool/Makefile.in
  ============================================================
  $ cvs diff -u -r1.45 -r1.46 Makefile.in
  --- ossp-pkg/shtool/Makefile.in	31 Dec 2001 15:06:04 -0000	1.45
  +++ ossp-pkg/shtool/Makefile.in	1 Feb 2002 14:58:04 -0000	1.46
  @@ -40,9 +40,6 @@
   CP          = cp
   LS          = ls
   
  -USER_NAME   = gnu
  -GROUP_NAME  = shtool
  -
   SCRIPTS = \
    sh.echo \
    sh.mdate \
  @@ -133,48 +130,4 @@
   distclean: clean
   	$(RM) Makefile shtoolize
   	$(RM) config.cache config.status config.log
  -
  -#   (not intended to be run by end users)
  -dist: distclean
  -	$(SHELL) sh.fixperm -v *; \
  -	V=`$(SHELL) sh.version -l txt -d short VERSION`; \
  -	$(SHELL) sh.tarball -o shtool-$${V}.tar.gz -d shtool-$${V} \
  -	                    -u $(USER_NAME) -g $(GROUP_NAME) \
  -	                    -e 'CVS,\.cvsignore,\.[ao]$$,^\.' \
  -	                    -c 'gzip --best' .; \
  -	$(LS) -l shtool-$$V.tar.gz
  -
  -#   (not intended to be run by end users)
  -snap: distclean
  -	@$(SHELL) sh.fixperm -v *; \
  -	V=`$(SHELL) sh.version -l txt -d short VERSION`; \
  -	$(SHELL) sh.tarball -o shtool-$${V}-SNAP.tar.gz -d shtool-$${V}-SNAP \
  -	                    -u $(USER_NAME) -g $(GROUP_NAME) \
  -	                    -e 'CVS,\.cvsignore,\.[ao]$$,^\.' \
  -	                    -c 'gzip --best' .; \
  -	$(LS) -l shtool-$$V-SNAP.tar.gz
  -
  -#   (not intended to be run by end users)
  -new-version:
  -	@echo "Setting new version information:"; \
  -	V="$(VERSION)"; \
  -	if [ ".$$V" != . ]; then \
  -		OPT="-s$$V"; \
  -	else \
  -		OPT="-e"; \
  -	fi; \
  -	$(SHELL) ./sh.version -l txt -n "GNU shtool" -p shtool $$OPT VERSION; \
  -	V=`$(SHELL) ./sh.version -l txt -d long VERSION`; \
  -	sed -e "s/Version .*(.*)/Version $$V/g" <README >README.n && mv README.n README; \
  -	V=`$(SHELL) ./sh.version -l txt -d short VERSION`; \
  -	sed -e "s/%define ver .*/%define ver $$V/g" <shtool.spec >shtool.spec.n && mv shtool.spec.n shtool.spec
  -
  -update-version:
  -	@echo "Updating date in version information"; \
  -	V=`$(SHELL) ./sh.version -l txt -d short VERSION`;\
  -	$(SHELL) ./sh.version -l txt -n "GNU shtool" -p shtool -s $$V VERSION;\
  -	V=`$(SHELL) ./sh.version -l txt -d long VERSION`;\
  -	sed -e "s/Version .*(.*)/Version $$V/g" <README >README.n && mv README.n README;\
  -	V=`$(SHELL) ./sh.version -l txt -d short VERSION`;\
  -	sed -e "s/%define ver .*/%define ver $$V/g" <shtool.spec >shtool.spec.n && mv shtool.spec.n shtool.spec
   
  Index: ossp-pkg/shtool/devtool
  ============================================================
  $ cvs update -p -r1.1 devtool
  #!/bin/sh
  ##
  ##  devtool -- Development Tool
  ##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  if [ $# -eq 0 ]; then
      echo "devtool:USAGE: devtool <command> [<arg> ...]" 1>&2
      exit 1
  fi
  
  cmd="$1"
  shift
  
  devtoolfunc="./devtool.func"
  
  if [ ! -f devtool.conf ]; then
      echo "devtool:ERROR: no devtool.conf in current directory" 1>&2
      exit 1
  fi
  
  cmdline=`grep "^%$cmd" devtool.conf`
  if [ ".$cmdline" = . ]; then
      echo "devtool:ERROR: command $cmd not found in devtool.conf" 1>&2
      exit 1
  fi
  
  if [ ".$TMPDIR" != . ]; then
      tmpdir="$TMPDIR"
  elif [ ".$TEMPDIR" != . ]; then
      tmpdir="$TEMPDIR"
  else
      tmpdir="/tmp"
  fi
  tmpfile="$tmpdir/rc.$$.tmp"
  
  rm -f $tmpfile
  touch $tmpfile
  echo ". $devtoolfunc" >>$tmpfile
  ( sed <devtool.conf -e "1,/^%common/d" -e '/^%.*/,$d'
    sed <devtool.conf -e "1,/^%$cmd/d" -e '/^%.*/,$d' ) |\
  sed -e 's;\([ 	]\)@\([a-zA-Z_][a-zA-Z0-9_]*\);\1devtool_\2;' >>$tmpfile
  
  sh $tmpfile "$@"
  
  rm -f $tmpfile >/dev/null 2>&1 || true
  
  Index: ossp-pkg/shtool/devtool.conf
  ============================================================
  $ cvs update -p -r1.1 devtool.conf
  ##
  ##  devtool.conf -- Development Tool Configuration
  ##
  
  %autogen
      @autogen autoconf 2.52 "2.5.*"
  
  %autoclean
      @autoclean autoconf
  
  %configure
      ./configure --prefix=/tmp/shtool "$@"
  
  %version
      sh sh.version -l txt -n "GNU shtool" -e VERSION
      V=`sh sh.version -l txt -d long VERSION`
      sed -e "s/Version .*(.*)/Version $V/g" <README >README.n 
      mv README.n README
      V=`sh sh.version -l txt -d short VERSION`
      sed -e "s/%define ver .*/%define ver $V/g" <shtool.spec >shtool.spec.n
      mv shtool.spec.n shtool.spec
  
  %dist
      echo "+++ generating"
      ./devtool autoclean
      ./devtool autogen
      echo "+++ configuring"
      ./configure
      echo "+++ building"
      make clean all
      echo "+++ cleaning"
      make distclean
      echo "+++ fixing"
      sh sh.fixperm -v .
      echo "+++ rolling"
      V=`sh sh.version -l txt -d short VERSION`
      sh sh.tarball -o shtool-${V}.tar.gz -d shtool-${V} -u gnu -g shtool \
                       -e 'CVS,\.cvsignore,\.[ao],^\.,devtool*,*.tar.gz' -c 'gzip --best' .
      ls -l shtool-${V}.tar.gz
      echo "+++ testing"
      gunzip <shtool-${V}.tar.gz | tar tvf -
  
  Index: ossp-pkg/shtool/devtool.func
  ============================================================
  $ cvs update -p -r1.1 devtool.func
  ##
  ##  devtool.func -- Development Tool Functions
  ##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  devtool_require () {
      t="$1"; o="$2"; p="$3"; e="$4"; a="$5"
      v=`($t $o | head -1 | awk "{ print \\\$$p; }") 2>/dev/null`
      if [ ".$v" = . ]; then
          echo "devtool:ERROR: unable to determine version of $t" 1>&2
          exit 1
      fi
      case "$v" in
          $e )
              ;;
          $a )
              echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
              ;;
          * )
              echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
              exit 1
              ;;
      esac
      echo "$v"
  }
  
  devtool_autogen () {
      tool=$1
      shift
      case $tool in
          autoconf )
              autoconf_version=`devtool_require autoconf --version 4 "$1" "$2"`
              echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
              autoconf
              ;;
          libtool )
              libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
              echo "generating (GNU Libtool $libtoolize_version): ltmain.sh, libtool.m4, config.guess, config.sub"
              libtoolize --force --copy >/dev/null 2>&1
              cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
                  sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` libtool.m4
              ;;
          shtool )
              shtoolize_version=`devtool_require shtoolize -v 3 "$1" "$2"`
              echo "generating (GNU Shtool $shtoolize_version): shtool"
              shift
              shift
              shtoolize -q "$@"
              ;;
      esac
  }
  
  devtool_autoclean () {
      tool=$1
      shift
      case $tool in
          autoconf )
              echo "removing: configure config.h.in"
              rm -f configure config.h.in
              ;;
          libtool )
              echo "removing: ltmain.sh libtool.m4 config.guess config.sub"
              rm -f ltmain.sh libtool.m4 config.guess config.sub
              ;;
          shtool )
              echo "removing: shtool"
              rm -f shtool
              ;;
      esac
  }
  

From ossp-cvs-owner@ossp.org  Fri Feb  1 16:00:09 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8AD317651B; Fri,  1 Feb 2002 16:00:09 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool devtool.conf
Message-Id: <20020201150009.8AD317651B@mail.ossp.org>
Date: Fri,  1 Feb 2002 16:00:09 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   01-Feb-2002 16:00:09
  Branch: HEAD                             Handle: 2002020115000900

  Modified files:
    ossp-pkg/shtool         devtool.conf

  Log:
    fix rolling

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/shtool/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/shtool/devtool.conf
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.conf
  --- ossp-pkg/shtool/devtool.conf	1 Feb 2002 14:58:04 -0000	1.1
  +++ ossp-pkg/shtool/devtool.conf	1 Feb 2002 15:00:09 -0000	1.2
  @@ -35,7 +35,7 @@
       echo "+++ rolling"
       V=`sh sh.version -l txt -d short VERSION`
       sh sh.tarball -o shtool-${V}.tar.gz -d shtool-${V} -u gnu -g shtool \
  -                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool*,*.tar.gz' -c 'gzip --best' .
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*,*.tar.gz' -c 'gzip --best' .
       ls -l shtool-${V}.tar.gz
       echo "+++ testing"
       gunzip <shtool-${V}.tar.gz | tar tvf -

From ossp-cvs-owner@ossp.org  Fri Feb  1 16:01:13 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 184CB7651B; Fri,  1 Feb 2002 16:01:13 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool NEWS
Message-Id: <20020201150113.184CB7651B@mail.ossp.org>
Date: Fri,  1 Feb 2002 16:01:13 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   01-Feb-2002 16:01:13
  Branch: HEAD                             Handle: 2002020115011200

  Modified files:
    ossp-pkg/shtool         NEWS

  Log:
    fix date

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/shtool/NEWS
  ____________________________________________________________________________

  Index: ossp-pkg/shtool/NEWS
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 NEWS
  --- ossp-pkg/shtool/NEWS	31 Dec 2001 15:11:53 -0000	1.2
  +++ ossp-pkg/shtool/NEWS	1 Feb 2002 15:01:12 -0000	1.3
  @@ -9,7 +9,7 @@
     This is a list of user-visible and/or major changes to GNU shtool.
     For more details please have a look at the ChangeLog file.
   
  -  Changes between 1.5 and 1.6 (14-Jun-2001 to xx-Jan-2002)
  +  Changes between 1.5 and 1.6 (14-Jun-2001 to 01-Feb-2002)
   
      *) Added new `shtool subst' command.
      *) Added new `shtool rotate' command.

From ossp-cvs-owner@ossp.org  Sat Feb  2 19:47:30 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2D8B3764E8; Sat,  2 Feb 2002 19:47:30 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool ChangeLog THANKS shtool.pod
Message-Id: <20020202184730.2D8B3764E8@mail.ossp.org>
Date: Sat,  2 Feb 2002 19:47:30 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   02-Feb-2002 19:47:30
  Branch: HEAD                             Handle: 2002020218472900

  Modified files:
    ossp-pkg/shtool         ChangeLog THANKS shtool.pod

  Log:
    Fixed various typos in shtool.pod.
    
    Submitted by: Liones <liones@myrealbox.com>

  Summary:
    Revision    Changes     Path
    1.167       +5  -0      ossp-pkg/shtool/ChangeLog
    1.21        +1  -0      ossp-pkg/shtool/THANKS
    1.58        +7  -7      ossp-pkg/shtool/shtool.pod
  ____________________________________________________________________________

  Index: ossp-pkg/shtool/ChangeLog
  ============================================================
  $ cvs diff -u -r1.166 -r1.167 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	1 Feb 2002 14:51:21 -0000	1.166
  +++ ossp-pkg/shtool/ChangeLog	2 Feb 2002 18:47:29 -0000	1.167
  @@ -9,6 +9,11 @@
   
    ChangeLog
   
  + Changes between 1.6.0 and 1.6.1 (01-Feb-2002 to xx-Feb-2002):
  +
  +   *) Fixed various typos in shtool.pod.
  +      [Ralf S. Engelschall, Liones <liones@myrealbox.com>]
  +
    Changes between 1.5.4 and 1.6.0 (14-Jun-2001 to 01-Feb-2002):
   
      *) Upgraded to GNU Autoconf 2.52 environment.
  Index: ossp-pkg/shtool/THANKS
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 THANKS
  --- ossp-pkg/shtool/THANKS	14 Jun 2001 14:24:16 -0000	1.20
  +++ ossp-pkg/shtool/THANKS	2 Feb 2002 18:47:29 -0000	1.21
  @@ -19,6 +19,7 @@
     o Lars Hecking             <lhecking@nmrc.ucc.ie>
     o Jim Jagielski            <jim@jaguNET.com>
     o Martin Kraemer           <Martin.Kraemer@MchP.Siemens.De>
  +  o Liones                   <liones@myrealbox.com>
     o Markus F.X.J. Oberhumer  <markus.oberhumer@jk.uni-linz.ac.at>
     o Benjamin Saller          <case@appliedtheory.com>
     o Christoph Schug          <chris@schug.net>
  Index: ossp-pkg/shtool/shtool.pod
  ============================================================
  $ cvs diff -u -r1.57 -r1.58 shtool.pod
  --- ossp-pkg/shtool/shtool.pod	31 Dec 2001 15:06:04 -0000	1.57
  +++ ossp-pkg/shtool/shtool.pod	2 Feb 2002 18:47:29 -0000	1.58
  @@ -213,7 +213,7 @@
   
   =item B<table>
   
  -Pretty-prints a field-sperarated list as a table.
  +Pretty-prints a field-separately list as a table.
   
   =item B<prop>
   
  @@ -353,7 +353,7 @@
   
   =item B<table> [B<-F>|B<--field-sep> I<sep>] [B<-w>|B<--width> I<width>] [B<-c>|B<--columns> I<cols>] [B<-s>|B<--strip> I<strip>] I<str>B<sep>I<str>...
   
  -This pretty-prints a I<sep>-sperarated list of I<str>ings as a table.  Per
  +This pretty-prints a I<sep>-separated list of I<str>ings as a table.  Per
   default a colon-separated list (I<sep>=":") is pretty printed as a
   three-column (<cols>=3) table no longer than 79 chars (I<strip>=79) is
   generated where each column is 15 characters wide (I<width>=15).
  @@ -395,7 +395,7 @@
   useful for renaming multiple files at once.  Second, if option ``B<-p>''
   (for `preserve') is used and I<src-file> and I<dst-file> are byte-wise the
   same it just deletes I<src-file>. The intention is that the permissions and
  -time stamps on I<dst> are't changed which is important if I<dst-file> is
  +time stamps on I<dst> aren't changed which is important if I<dst-file> is
   used in conjunction with Makefiles.  Option ``B<-v>'' (verbose) can be used to
   enable the output of extra processing information. Option ``B<-t>'' (trace)
   can be used to enable the output of the essential shell commands which are
  @@ -520,7 +520,7 @@
   information.  Option ``B<-t>'' (trace) can be used to enable the output of the
   essential shell commands which are executed.
   
  -The trick is that this is more convinient that having to set the permissions
  +The trick is that this is more convenient that having to set the permissions
   manually or with a large file list.
   
   Example:
  @@ -554,7 +554,7 @@
   0 opened and usually has to reopen the new I<file>, while in the second
   case the application can keep its open file handles to I<file>. The
   drawback of the second approach is that logfile entries are lost when
  -they are written to I<file> between the executation of the copy and the
  +they are written to I<file> between the execution of the copy and the
   subsequent truncation operation.
   
   Option ``B<-r>'' removes I<file> after rotation instead of providing a
  @@ -711,7 +711,7 @@
   =item B<slo> [B<-p>|B<--prefix> I<str>] -- B<-L>I<dir> B<-l>I<lib> [ B<-L>I<dir> B<-l>I<lib> ... ]
   
   This command separates the linker options ``B<-L>'' and ``B<-l>'' by library
  -class. It's argument line can actually be an abitrary command line where those
  +class. It's argument line can actually be an arbitrary command line where those
   options are contained. B<slo> parses these two options only and ignores the
   remaining contents. The result is a trivial shell script on C<stdout> which
   defines six variables containing the ``B<-L>'' and ``B<-l>'' options sorted by
  @@ -842,7 +842,7 @@
   Unless option ``B<-e>'', ``B<-i>'' or ``B<-s>'' is specified, the performed
   action is to display the current version.  Option ``B<-d>'' then can be used
   to control the display type: "C<short>" for a short version display, "C<long>"
  -for a longer version display, "C<hex>" for a hexadecial display of the version
  +for a longer version display, "C<hex>" for a hexadecimal display of the version
   and "C<libtool>" for a format suitable for use with GNU libtool.
   
   The hexadecimal format for a version C<v.rtl> is C<VVRRTLL> where C<VV>

From ossp-cvs-owner@ossp.org  Mon Feb  4 14:08:10 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id ED7CF7650C; Mon,  4 Feb 2002 14:08:09 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Message-Id: <20020204130809.ED7CF7650C@mail.ossp.org>
Date: Mon,  4 Feb 2002 14:08:09 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: CVSROOT                          Date:   04-Feb-2002 14:08:09
  Branch: HEAD                             Handle: 2002020413080900

  Modified files:
    CVSROOT                 modules

  Log:
    Added OSSP popt alias module to OSSP rc.

  Summary:
    Revision    Changes     Path
    1.48        +4  -3      CVSROOT/modules
  ____________________________________________________________________________

  Index: CVSROOT/modules
  ============================================================
  $ cvs diff -u -r1.47 -r1.48 modules
  --- CVSROOT/modules	30 Jan 2002 14:07:01 -0000	1.47
  +++ CVSROOT/modules	4 Feb 2002 13:08:09 -0000	1.48
  @@ -101,7 +101,8 @@
   lmtp2nntp_popt  -d lib_popt ossp-pkg/popt
   
   #   OSSP rc
  -rc              ossp-pkg/rc &rc_str &rc_var
  -rc_str          -d rc_str ossp-pkg/str
  -rc_var          -d rc_var ossp-pkg/var
  +rc              ossp-pkg/rc &rc_str &rc_var &rc_popt
  +rc_str          -d rc_str  ossp-pkg/str
  +rc_var          -d rc_var  ossp-pkg/var
  +rc_popt         -d rc_popt ossp-pkg/popt
   

From ossp-cvs-owner@ossp.org  Mon Feb  4 14:16:26 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CA2057650C; Mon,  4 Feb 2002 14:16:25 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Message-Id: <20020204131625.CA2057650C@mail.ossp.org>
Date: Mon,  4 Feb 2002 14:16:25 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: CVSROOT                          Date:   04-Feb-2002 14:16:25
  Branch: HEAD                             Handle: 2002020413162500

  Modified files:
    CVSROOT                 modules

  Log:
    Added OSSP ex alias module to OSSP ex.

  Summary:
    Revision    Changes     Path
    1.49        +2  -1      CVSROOT/modules
  ____________________________________________________________________________

  Index: CVSROOT/modules
  ============================================================
  $ cvs diff -u -r1.48 -r1.49 modules
  --- CVSROOT/modules	4 Feb 2002 13:08:09 -0000	1.48
  +++ CVSROOT/modules	4 Feb 2002 13:16:25 -0000	1.49
  @@ -101,8 +101,9 @@
   lmtp2nntp_popt  -d lib_popt ossp-pkg/popt
   
   #   OSSP rc
  -rc              ossp-pkg/rc &rc_str &rc_var &rc_popt
  +rc              ossp-pkg/rc &rc_str &rc_var &rc_popt &rc_ex
   rc_str          -d rc_str  ossp-pkg/str
   rc_var          -d rc_var  ossp-pkg/var
   rc_popt         -d rc_popt ossp-pkg/popt
  +rc_ex           -d rc_ex   ossp-pkg/ex
   

From ossp-cvs-owner@ossp.org  Mon Feb  4 14:52:15 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B14E67650C; Mon,  4 Feb 2002 14:52:15 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp fixme.h lmtp2nntp_config.c lmtp2nntp_ma...
Message-Id: <20020204135215.B14E67650C@mail.ossp.org>
Date: Mon,  4 Feb 2002 14:52:15 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   04-Feb-2002 14:52:15
  Branch: HEAD                             Handle: 2002020413521401

  Modified files:
    ossp-pkg/lmtp2nntp      fixme.h lmtp2nntp_config.c lmtp2nntp_main.c
                            lmtp2nntp_option.c lmtp2nntp_option.h

  Log:
    application defaults now set through option_register()

  Summary:
    Revision    Changes     Path
    1.9         +2  -0      ossp-pkg/lmtp2nntp/fixme.h
    1.37        +2  -0      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.32        +17 -13     ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
    1.9         +37 -35     ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
    1.4         +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_option.h
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/fixme.h
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 fixme.h
  --- ossp-pkg/lmtp2nntp/fixme.h	31 Jan 2002 15:03:23 -0000	1.8
  +++ ossp-pkg/lmtp2nntp/fixme.h	4 Feb 2002 13:52:14 -0000	1.9
  @@ -108,12 +108,14 @@
   #define ERR_DELIVERY -2
   
   enum {
  +    GROUPMODE_UNDEF = 0,
       GROUPMODE_ARG,
       GROUPMODE_ENVELOPE,
       GROUPMODE_HEADER
   };
   
   enum {
  +    OPERATIONMODE_UNDEF = 0,
       OPERATIONMODE_FAKE,
       OPERATIONMODE_POST,
       OPERATIONMODE_FEED
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.36 -r1.37 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	31 Jan 2002 15:59:12 -0000	1.36
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	4 Feb 2002 13:52:14 -0000	1.37
  @@ -109,6 +109,8 @@
       //char *cp;
       int rc;
   
  +    fprintf(stderr, "Hello, World!\n"); //FIXME
  +
       /* create L2 environment */
       if (l2_env_create(&ctx->l2_env) != L2_OK) {
           fprintf(stderr, "%s:Error: failed to create L2 environment\n", ctx->progname);
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	31 Jan 2002 16:04:51 -0000	1.31
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	4 Feb 2002 13:52:15 -0000	1.32
  @@ -334,26 +334,30 @@
           CU(ERR_EXECUTION);
       }
   
  -    /* create application context */
  +    /* create application context. fields are initialized to values that allow
  +     * detection of dynamic allocated resources which must be freed up for
  +     * graceful cleanup. These values are not necessarily useful application
  +     * defaults. Those defaults must be configured in lmtp2nntp_option.c
  +     * through option_register() calls */
       if ((ctx = (lmtp2nntp_t *)malloc(sizeof(lmtp2nntp_t))) == NULL)
           CU(ERR_EXECUTION);
       ctx->ctx.vp = ctx;
       ctx->val = NULL;
       ctx->progname = NULL;
  -    ctx->option_childsmax = 10;
  -    ctx->option_groupmode = GROUPMODE_ARG;
  -    ctx->option_operationmode = OPERATIONMODE_FAKE;
  -    ctx->option_operationmodefakestatus = "553";   /* Requested action not taken: mailbox name not allowed */
  -    ctx->option_operationmodefakedsn    = "5.7.1"; /* Delivery not authorized, message refused */
  -    ctx->option_maxmessagesize = 8 * 1024 * 1024;
  +    ctx->option_childsmax = 0;
  +    ctx->option_groupmode = GROUPMODE_UNDEF;
  +    ctx->option_operationmode = OPERATIONMODE_UNDEF;
  +    ctx->option_operationmodefakestatus = NULL;
  +    ctx->option_operationmodefakedsn    = NULL;
  +    ctx->option_maxmessagesize = 0;
       ctx->azHeaderValuePairs = NULL;
       ctx->asHeaderValuePairs = 0;
  -    ctx->option_timeout_lmtp_accept = 0;
  -    ctx->option_timeout_lmtp_read = 10;
  -    ctx->option_timeout_lmtp_write = 10;
  -    ctx->option_timeout_nntp_connect = 360;
  -    ctx->option_timeout_nntp_read = 60;
  -    ctx->option_timeout_nntp_write = 60;
  +    ctx->option_timeout_lmtp_accept  = 0;
  +    ctx->option_timeout_lmtp_read    = 0;
  +    ctx->option_timeout_lmtp_write   = 0;
  +    ctx->option_timeout_nntp_connect = 0;
  +    ctx->option_timeout_nntp_read    = 0;
  +    ctx->option_timeout_nntp_write   = 0;
       ctx->option_mailfrom = NULL;
       ctx->option_restrictheader = NULL;
       ctx->option_pidfile = NULL;
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 lmtp2nntp_option.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	31 Jan 2002 15:53:43 -0000	1.8
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	4 Feb 2002 13:52:15 -0000	1.9
  @@ -126,7 +126,7 @@
   }
   
   
  -lmtp2nntp_option_rc_t option_register(lmtp2nntp_option_t *o, char *longname, char shortname, optiontype_t type, optionloop_cb_t *cb, char *cbctx, char *descrip, char *argdescrip)
  +lmtp2nntp_option_rc_t option_register(lmtp2nntp_option_t *o, char *longname, char shortname, optiontype_t type, char *def, char *descrip, char *argdescrip, optionloop_cb_t *cb, char *cbctx)
   {
       lmtp2nntp_option_rc_t rc = VAL_OK;
       optionval_t *oc;
  @@ -151,10 +151,12 @@
       oc->cbctx        = cbctx;
       oc->val          = o->vo;
       oc->number       = o->pi + 1; /* 0 is a reserved val in popt, so offset 1 */
  -    oc->data.f       = 0;
  -    oc->data.s       = NULL; /* just in case a pointer is larger than int */
  -    oc->data.m       = NULL;
  -    oc->ndata        = 0;
  +    switch (type) {
  +        case OPT_FLAG:   oc->data.f       = 0;    break;
  +        case OPT_SINGLE: oc->data.s       = def;  break;
  +        case OPT_MULTI:  oc->data.m       = NULL; break;
  +    }
  +    oc->ndata        = (type == OPT_SINGLE && def != NULL) ? 1 : 0;
       if (   (                      oc->longname   == NULL)
           || (descrip    != NULL && oc->descrip    == NULL)
           || (argdescrip != NULL && oc->argdescrip == NULL)
  @@ -601,41 +603,41 @@
       if (o == NULL)
           return OPTION_ERR_ARG;
   
  -    (void)option_register(o, "childsmax",          'C', OPT_SINGLE, &stdsyntax, "m/[0-9]+/", "foo01", "childsmax" );
  -    (void)option_register(o, "daemonize",          'D', OPT_FLAG,   &stdsyntax, NULL,        "foo02", NULL );
  -    (void)option_register(o, "kill",               'K', OPT_FLAG,   &stdsyntax, NULL,        "foo03", NULL );
  -    (void)option_register(o, "pidfile",            'P', OPT_SINGLE, &stdsyntax, "m/.*/",     "foo04", "pidfile" );
  -    (void)option_register(o, "veryverbose",        'V', OPT_FLAG,   &stdsyntax, NULL,        "foo05", NULL );
  -    (void)option_register(o, "acl",                'a', OPT_MULTI,  &stdsyntax, "m/.*/",     "foo06", "addr[/mask]" );
  -    (void)option_register(o, "bind",               'b', OPT_SINGLE, &stdsyntax, "m/.*/",     "foo07", "addr[:port]|-|path[:perms]" );
  -    (void)option_register(o, "client",             'c', OPT_SINGLE, &stdsyntax, "m/.*/",     "foo08", "addr[:port]" );
  -    (void)option_register(o, "destination",        'd', OPT_MULTI,  &stdsyntax, "m/.*/",     "foo09", "addr[:port]" );
  -    (void)option_register(o, "groupmode",          'g', OPT_SINGLE, &stdsyntax, "m/.*/",     "foo10", "groupmode" );
  -    (void)option_register(o, "headervalue",        'h', OPT_MULTI,  &stdsyntax, "m/.*/",     "foo11", "header: value" );
  -    (void)option_register(o, "include",            'i', OPT_MULTI,  &includeit, "m/.*/",     "foo12", "configfile" );
  -    (void)option_register(o, "size",               's', OPT_SINGLE, &stdsyntax, "m/.*/",     "foo13", "bytes" );
  -    (void)option_register(o, "timeoutlmtp",        NUL, OPT_SINGLE, &stdsyntax, "m/.*/",     "foo14", "sec" );
  -    (void)option_register(o, "timeoutlmtpaccept",  NUL, OPT_SINGLE, &stdsyntax, "m/.*/",     "fo14a", "sec" );
  -    (void)option_register(o, "timeoutlmtpread",    NUL, OPT_SINGLE, &stdsyntax, "m/.*/",     "foo15", "sec" );
  -    (void)option_register(o, "timeoutlmtpwrite",   NUL, OPT_SINGLE, &stdsyntax, "m/.*/",     "foo16", "sec" );
  -    (void)option_register(o, "timeoutnntp",        NUL, OPT_SINGLE, &stdsyntax, "m/.*/",     "foo17", "sec" );
  -    (void)option_register(o, "timeoutnntpconnect", NUL, OPT_SINGLE, &stdsyntax, "m/.*/",     "fo17a", "sec" );
  -    (void)option_register(o, "timeoutnntpread",    NUL, OPT_SINGLE, &stdsyntax, "m/.*/",     "foo18", "sec" );
  -    (void)option_register(o, "timeoutnntpwrite",   NUL, OPT_SINGLE, &stdsyntax, "m/.*/",     "foo19", "sec" );
  -    (void)option_register(o, "mailfrom",           'm', OPT_SINGLE, &stdsyntax, "m/.*/",     "foo20", "regex" );
  -    (void)option_register(o, "nodename",           'n', OPT_SINGLE, &stdsyntax, "m/.*/",     "foo21", "nodename" );
  -    (void)option_register(o, "operationmode",      'o', OPT_SINGLE, &stdsyntax, "m/.*/",     "foo22", "post|feed" );
  -    (void)option_register(o, "l2spec",             'l', OPT_SINGLE, &stdsyntax, "m/.*/",     "L2 channel tree textual specification", "l2spec" );
  -    (void)option_register(o, "user",               'u', OPT_SINGLE, &stdsyntax, "m/.*/",     "foo24", "uid|name" );
  -    (void)option_register(o, "version",            'v', OPT_FLAG,   &stdsyntax, NULL,        "fo24a", NULL );
  -    (void)option_register(o, "restrictheader",     'r', OPT_SINGLE, &stdsyntax, "m/.*/",     "foo25", "regex" );
  -    (void)option_register(o, "newsgroup",          NUL, OPT_MULTI,  &stdsyntax, "m/.*/",     "foo26", "newsgroup");
  +    (void)option_register(o, "childsmax",          'C', OPT_SINGLE,  "10",        "childs to spawn at max",            "childsmax",                  &stdsyntax, "m/.*/" ); //"m/[0-9]+/" );
  +    (void)option_register(o, "daemonize",          'D', OPT_FLAG,    NULL,        "detach from terminal",              NULL,                         &stdsyntax, NULL );
  +    (void)option_register(o, "kill",               'K', OPT_FLAG,    NULL,        "kill a previously run daemon",      NULL,                         &stdsyntax, NULL );
  +    (void)option_register(o, "pidfile",            'P', OPT_SINGLE,  NULL,        "file containing pid",               "pidfile",                    &stdsyntax, "m/.*/" );
  +    (void)option_register(o, "veryverbose",        'V', OPT_FLAG,    NULL,        "FIXME",                             NULL,                         &stdsyntax, NULL );
  +    (void)option_register(o, "acl",                'a', OPT_MULTI,   NULL,        "LMTP server access control list",   "addr[/mask]",                &stdsyntax, "m/.*/" );
  +    (void)option_register(o, "bind",               'b', OPT_SINGLE,  NULL,        "LMTP server bind",                  "addr[:port]|-|path[:perms]", &stdsyntax, "m/.*/" );
  +    (void)option_register(o, "client",             'c', OPT_SINGLE,  NULL,        "NNTP client bind",                  "addr[:port]",                &stdsyntax, "m/.*/" );
  +    (void)option_register(o, "destination",        'd', OPT_MULTI,   NULL,        "NNTP client destination",           "addr[:port]",                &stdsyntax, "m/.*/" );
  +    (void)option_register(o, "groupmode",          'g', OPT_SINGLE,  "arg",       "arg|envelope|header",               "groupmode",                  &stdsyntax, "m/.*/" ); //"m/(arg|envelope|header)/" );
  +    (void)option_register(o, "headervalue",        'h', OPT_MULTI,   NULL,        "header/ value added to message",    "header: value",              &stdsyntax, "m/.*/" );
  +    (void)option_register(o, "include",            'i', OPT_MULTI,   NULL,        "configfile to include",             "configfile",                 &includeit, "m/.*/" );
  +    (void)option_register(o, "size",               's', OPT_SINGLE,  "8388608",   "maximum message size",              "bytes",                      &stdsyntax, "m/.*/" ); //"m/[0-9]+/" );
  +    (void)option_register(o, "timeoutlmtp",        NUL, OPT_SINGLE,  NULL,        "LMTP server default timeout",       "sec",                        &stdsyntax, "m/.*/" );
  +    (void)option_register(o, "timeoutlmtpaccept",  NUL, OPT_SINGLE,  "0",         "LMTP server accept timeout",        "sec",                        &stdsyntax, "m/.*/" );
  +    (void)option_register(o, "timeoutlmtpread",    NUL, OPT_SINGLE,  "10",        "LMTP server read timeout",          "sec",                        &stdsyntax, "m/.*/" );
  +    (void)option_register(o, "timeoutlmtpwrite",   NUL, OPT_SINGLE,  "10",        "LMTP server write timeout",         "sec",                        &stdsyntax, "m/.*/" );
  +    (void)option_register(o, "timeoutnntp",        NUL, OPT_SINGLE,  NULL,        "NNTP client default timeout",       "sec",                        &stdsyntax, "m/.*/" );
  +    (void)option_register(o, "timeoutnntpconnect", NUL, OPT_SINGLE,  "360",       "NNTP client connect timeout",       "sec",                        &stdsyntax, "m/.*/" );
  +    (void)option_register(o, "timeoutnntpread",    NUL, OPT_SINGLE,  "60",        "NNTP client read timeout",          "sec",                        &stdsyntax, "m/.*/" );
  +    (void)option_register(o, "timeoutnntpwrite",   NUL, OPT_SINGLE,  "60",        "NNTP client write timeout",         "sec",                        &stdsyntax, "m/.*/" );
  +    (void)option_register(o, "mailfrom",           'm', OPT_SINGLE,  NULL,        "mail from envelope restriction",    "regex",                      &stdsyntax, "m/.*/" );
  +    (void)option_register(o, "nodename",           'n', OPT_SINGLE,  NULL,        "nodename",                          "name",                       &stdsyntax, "m/.*/" );
  +    (void)option_register(o, "operationmode",      'o', OPT_SINGLE,  "553/5.7.1", "fakestatus or operationmode",       "abc/a.d.e|post|feed",        &stdsyntax, "m/.*/" ); //"m/([0-9]{3}\\/[0-9]\\.[0-9]\\.[0-9]|post|feed)/" ); /* 553 = Requested action not taken: mailbox name not allowed, 5.7.1 =  Delivery not authorized, message refused */
  +    (void)option_register(o, "l2spec",             'l', OPT_SINGLE,  NULL,        "L2 channel tree specification",     "l2spec",                     &stdsyntax, "m/.*/" );
  +    (void)option_register(o, "user",               'u', OPT_SINGLE,  NULL,        "user",                              "uid|name",                   &stdsyntax, "m/.*/" );
  +    (void)option_register(o, "version",            'v', OPT_FLAG,    NULL,        "print version",                     NULL,                         &stdsyntax, NULL );
  +    (void)option_register(o, "restrictheader",     'r', OPT_SINGLE,  NULL,        "header restriction",                "regex",                      &stdsyntax, "m/.*/" );
  +    (void)option_register(o, "newsgroup",          NUL, OPT_MULTI,   NULL,        "article destination",               "newsgroup",                  &stdsyntax, "m/.*/" );
   
   #if 0
       {
           int i;
   
  -        for (i=0; i<26; i++) {
  +        for (i=0; i<29; i++) {
               printf("DEBUG: o->pt[%3d].longName   = %s   \n", i,       o->pt[i].longName  );
               printf("DEBUG: o->pt[%3d].shortName  = %c   \n", i,       o->pt[i].shortName );
               printf("DEBUG: o->pt[%3d].argInfo    = %d   \n", i,       o->pt[i].argInfo   );
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_option.h
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 lmtp2nntp_option.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_option.h	30 Jan 2002 16:41:02 -0000	1.3
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_option.h	4 Feb 2002 13:52:15 -0000	1.4
  @@ -105,6 +105,6 @@
   };
   
   lmtp2nntp_option_rc_t option_create  (lmtp2nntp_option_t **, val_t *);
  -lmtp2nntp_option_rc_t option_register(lmtp2nntp_option_t *, char *, char, optiontype_t, optionloop_cb_t *, char *, char *, char *);
  +lmtp2nntp_option_rc_t option_register(lmtp2nntp_option_t *, char *, char, optiontype_t, char *, char *, char *, optionloop_cb_t *, char *);
   lmtp2nntp_option_rc_t option_parse   (lmtp2nntp_option_t *, int, char **);
   lmtp2nntp_option_rc_t option_destroy (lmtp2nntp_option_t *);

From ossp-cvs-owner@ossp.org  Mon Feb  4 15:48:31 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5B0747650C; Mon,  4 Feb 2002 15:48:31 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c lmtp2nntp_main.c
Message-Id: <20020204144831.5B0747650C@mail.ossp.org>
Date: Mon,  4 Feb 2002 15:48:31 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   04-Feb-2002 15:48:31
  Branch: HEAD                             Handle: 2002020414483000

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c lmtp2nntp_main.c

  Log:
    options are optional now ;-)

  Summary:
    Revision    Changes     Path
    1.38        +400 -335   ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.33        +1  -0      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.37 -r1.38 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	4 Feb 2002 13:52:14 -0000	1.37
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	4 Feb 2002 14:48:30 -0000	1.38
  @@ -109,8 +109,6 @@
       //char *cp;
       int rc;
   
  -    fprintf(stderr, "Hello, World!\n"); //FIXME
  -
       /* create L2 environment */
       if (l2_env_create(&ctx->l2_env) != L2_OK) {
           fprintf(stderr, "%s:Error: failed to create L2 environment\n", ctx->progname);
  @@ -158,15 +156,17 @@
       /* --childsmax SINGLE */
       try {
           if (   (val_get(ctx->val, "option.childsmax", &ov) != VAL_OK)
  -            || (ov->ndata != 1)
  -            || (ov->data.s == NULL)
  +            || (ov->ndata <  0)
  +            || (ov->ndata == 1 && ov->data.s == NULL)
  +            || (ov->ndata >  1)
                 ) throw(0,0,0);
           log1(ctx, TRACE, "--childsmax = \"%s\"", ov->data.s);
   
  -        if ((ctx->option_childsmax = atoi(ov->data.s)) <= 0) {
  -            log1(ctx, ERROR, "option --childsmax, number (%d) out of range", ctx->option_childsmax);
  -            throw(0,0,0);
  -        }
  +        if (ov->ndata == 1)
  +            if ((ctx->option_childsmax = atoi(ov->data.s)) <= 0) {
  +                log1(ctx, ERROR, "option --childsmax, number (%d) out of range", ctx->option_childsmax);
  +                throw(0,0,0);
  +            }
       }
       catch (ex) {
           rethrow;
  @@ -175,12 +175,14 @@
       /* --daemonize FLAG */
       try {
           if (   (val_get(ctx->val, "option.daemonize", &ov) != VAL_OK)
  -            || (ov->ndata != 1)
  -            || (ov->data.f != 1)
  +            || (ov->ndata <  0)
  +            || (ov->ndata == 1 && ov->data.f < 0)
  +            || (ov->ndata == 1 && ov->data.f > 1)
  +            || (ov->ndata >  1)
                 ) throw(0,0,0);
           log1(ctx, TRACE, "--daemonize = %d", ov->data.f);
   
  -        ctx->option_daemon = TRUE;
  +        ctx->option_daemon = ov->data.f == 1 ? TRUE : FALSE;
       }
       catch (ex)
           rethrow;
  @@ -188,12 +190,14 @@
       /* --kill FLAG */
       try {
           if (   (val_get(ctx->val, "option.kill", &ov) != VAL_OK)
  -            || (ov->ndata != 1)
  -            || (ov->data.f != 1)
  +            || (ov->ndata <  0)
  +            || (ov->ndata == 1 && ov->data.f < 0)
  +            || (ov->ndata == 1 && ov->data.f > 1)
  +            || (ov->ndata >  1)
                 ) throw(0,0,0);
           log1(ctx, TRACE, "--kill = %d", ov->data.f);
   
  -        ctx->option_killflag = TRUE;
  +        ctx->option_killflag = ov->data.f == 1 ? TRUE : FALSE;
       }
       catch (ex)
           rethrow;
  @@ -201,12 +205,14 @@
       /* --pidfile SINGLE */
       try {
           if (   (val_get(ctx->val, "option.pidfile", &ov) != VAL_OK)
  -            || (ov->ndata != 1)
  -            || (ov->data.s == NULL)
  +            || (ov->ndata <  0)
  +            || (ov->ndata == 1 && ov->data.s == NULL)
  +            || (ov->ndata >  1)
                 ) throw(0,0,0);
           log1(ctx, TRACE, "--pidfile = \"%s\"", ov->data.s);
   
  -        ctx->option_pidfile = ov->data.s;
  +        if (ov->ndata == 1)
  +            ctx->option_pidfile = ov->data.s;
       }
       catch (ex)
           rethrow;
  @@ -217,42 +223,45 @@
           int i;
   
           if (   (val_get(ctx->val, "option.acl", &ov) != VAL_OK)
  -            || ((ov->ndata >= 1) && (ov->data.m == NULL))
  +            || (ov->ndata <  0)
  +            || (ov->ndata >= 1 && ov->data.m == NULL)
                 ) throw(0,0,0);
           log1(ctx, DEBUG, "ov->ndata = %d", ov->ndata);
           for (i = 0; i < ov->ndata; i++)
               log2(ctx, TRACE, "--acl[%d] = \"%s\"", i, (ov->data.m)[i]);
   
  -        if ((ctx->pacl = (struct acl *)malloc(ov->ndata * sizeof(struct acl))) == NULL) throw(0,0,0);
  -        for (i = 0; i < ov->ndata; i++) {
  -            cp = (ov->data.m)[i];
  -            log2(ctx, DEBUG, "cp = (data.m)[%d] = \"%s\"", i, cp);
  -            if (cp[0] == '!') {
  -                ctx->pacl[i].acl = strdup(cp + 1);
  -                ctx->pacl[i].not = TRUE;
  -            }
  -            else {
  -                ctx->pacl[i].acl = strdup(cp);
  -                ctx->pacl[i].not = TRUE;
  -            }
  -            log2(ctx, DEBUG, "ctx->pacl[%d].not = %s", i, ctx->pacl[i].not == TRUE ? "TRUE" : "FALSE");
  -            log2(ctx, DEBUG, "ctx->pacl[%d].acl = %s", i, ctx->pacl[i].acl);
  -            if ((cp = strrchr(ctx->pacl[i].acl, '/')) != NULL)
  -                *cp++ = NUL;
  -            else
  -                cp = "-1";
  -            ctx->pacl[i].prefixlen = atoi(cp);
  -            log2(ctx, DEBUG, "ctx->pacl[%d].prefixlen = %d", i, ctx->pacl[i].prefixlen);
  -            if ((rc = sa_addr_create(&(ctx->pacl[i].saa))) != SA_OK) {
  -                log1(ctx, ERROR, "option --acl, create address (internal) failed with \"%s\"", sa_error(rc));
  -                throw(0,0,0);
  +        if (ov->ndata >= 1) {
  +            if ((ctx->pacl = (struct acl *)malloc(ov->ndata * sizeof(struct acl))) == NULL) throw(0,0,0);
  +            for (i = 0; i < ov->ndata; i++) {
  +                cp = (ov->data.m)[i];
  +                log2(ctx, DEBUG, "cp = (data.m)[%d] = \"%s\"", i, cp);
  +                if (cp[0] == '!') {
  +                    ctx->pacl[i].acl = strdup(cp + 1);
  +                    ctx->pacl[i].not = TRUE;
                   }
  -            if ((rc = sa_addr_u2a(ctx->pacl[i].saa, "inet://%s:0", ctx->pacl[i].acl)) != SA_OK) {
  -                log2(ctx, ERROR, "option --acl, parsing address (%s) failed with \"%s\"", ctx->pacl[i].acl, sa_error(rc));
  -                throw(0,0,0);
  +                else {
  +                    ctx->pacl[i].acl = strdup(cp);
  +                    ctx->pacl[i].not = TRUE;
                   }
  +                log2(ctx, DEBUG, "ctx->pacl[%d].not = %s", i, ctx->pacl[i].not == TRUE ? "TRUE" : "FALSE");
  +                log2(ctx, DEBUG, "ctx->pacl[%d].acl = %s", i, ctx->pacl[i].acl);
  +                if ((cp = strrchr(ctx->pacl[i].acl, '/')) != NULL)
  +                    *cp++ = NUL;
  +                else
  +                    cp = "-1";
  +                ctx->pacl[i].prefixlen = atoi(cp);
  +                log2(ctx, DEBUG, "ctx->pacl[%d].prefixlen = %d", i, ctx->pacl[i].prefixlen);
  +                if ((rc = sa_addr_create(&(ctx->pacl[i].saa))) != SA_OK) {
  +                    log1(ctx, ERROR, "option --acl, create address (internal) failed with \"%s\"", sa_error(rc));
  +                    throw(0,0,0);
  +                    }
  +                if ((rc = sa_addr_u2a(ctx->pacl[i].saa, "inet://%s:0", ctx->pacl[i].acl)) != SA_OK) {
  +                    log2(ctx, ERROR, "option --acl, parsing address (%s) failed with \"%s\"", ctx->pacl[i].acl, sa_error(rc));
  +                    throw(0,0,0);
  +                    }
  +            }
  +            ctx->nacl = i;
           }
  -        ctx->nacl = i;
       }
       catch (ex)
           rethrow;
  @@ -260,90 +269,93 @@
       /* --bind SINGLE */
       try {
           if (   (val_get(ctx->val, "option.bind", &ov) != VAL_OK)
  -            || (ov->ndata != 1)
  -            || (ov->data.s == NULL)
  +            || (ov->ndata <  0)
  +            || (ov->ndata == 1 && ov->data.s == NULL)
  +            || (ov->ndata >  1)
                 ) throw(0,0,0);
           log1(ctx, TRACE, "--bind = \"%s\"", ov->data.s);
   
  -        /* dash means stdio */
  -        if (strcmp(ov->data.s, "-") != 0) { //FIXME does this work with popt()?
  -            if ((rc = sa_create(&ctx->saServerbind)) != SA_OK) {
  -                log1(ctx, ERROR, "option --bind, creating TCP socket (internal) failed with \"%s\"", sa_error(rc));
  -                throw(0,0,0);
  -            }
  -            if ((rc = sa_addr_create(&ctx->saaServerbind)) != SA_OK) {
  -                log1(ctx, ERROR, "option --bind, create address (internal) failed with \"%s\"", sa_error(rc));
  -                throw(0,0,0);
  -            }
  -        /* slash means UNIX socket */
  -            if (ov->data.s[0] == '/') {
  -                char *cpPath;
  -                char *cpPerm;
  -                int nPerm;
  -                int n;
  -                int i;
  -
  -                cpPath = strdup(optarg);
  -                cpPerm = NULL;
  -                nPerm  = -1;
  -                if ((cpPerm = strrchr(cpPath, ':')) != NULL) {
  -                    *cpPerm++ = '\0';
  -                    nPerm = 0;
  -                    for (i = 0; i < 4 && cpPerm[i] != '\0'; i++) {
  -                        if (!isdigit((int)cpPerm[i])) {
  -                            nPerm = -1;
  -                            break;
  +        if (ov->ndata == 1) {
  +            /* dash means stdio */
  +            if (strcmp(ov->data.s, "-") != 0) { //FIXME does this work with popt()?
  +                if ((rc = sa_create(&ctx->saServerbind)) != SA_OK) {
  +                    log1(ctx, ERROR, "option --bind, creating TCP socket (internal) failed with \"%s\"", sa_error(rc));
  +                    throw(0,0,0);
  +                }
  +                if ((rc = sa_addr_create(&ctx->saaServerbind)) != SA_OK) {
  +                    log1(ctx, ERROR, "option --bind, create address (internal) failed with \"%s\"", sa_error(rc));
  +                    throw(0,0,0);
  +                }
  +            /* slash means UNIX socket */
  +                if (ov->data.s[0] == '/') {
  +                    char *cpPath;
  +                    char *cpPerm;
  +                    int nPerm;
  +                    int n;
  +                    int i;
  +
  +                    cpPath = strdup(optarg);
  +                    cpPerm = NULL;
  +                    nPerm  = -1;
  +                    if ((cpPerm = strrchr(cpPath, ':')) != NULL) {
  +                        *cpPerm++ = '\0';
  +                        nPerm = 0;
  +                        for (i = 0; i < 4 && cpPerm[i] != '\0'; i++) {
  +                            if (!isdigit((int)cpPerm[i])) {
  +                                nPerm = -1;
  +                                break;
  +                            }
  +                            n = cpPerm[i] - '0';
  +                            if (n > 7) {
  +                                nPerm = -1;
  +                                break;
  +                            }
  +                            nPerm = ((nPerm << 3) | n);
                           }
  -                        n = cpPerm[i] - '0';
  -                        if (n > 7) {
  -                            nPerm = -1;
  -                            break;
  +                        if (nPerm == -1 || cpPerm[i] != '\0') {
  +                            log1(ctx, ERROR, "option --bind, invalid permissions \"%s\"", cpPerm);
  +                            throw(0,0,0);
                           }
  -                        nPerm = ((nPerm << 3) | n);
                       }
  -                    if (nPerm == -1 || cpPerm[i] != '\0') {
  -                        log1(ctx, ERROR, "option --bind, invalid permissions \"%s\"", cpPerm);
  +                    if ((rc = sa_addr_u2a(ctx->saaServerbind, "unix:%s", cpPath)) != SA_OK) {
  +                        log2(ctx, ERROR, "option --bind, parsing alternate IO guessing UNIX socket (%s) failed with \"%s\"", cpPath, sa_error(rc));
                           throw(0,0,0);
                       }
  -                }
  -                if ((rc = sa_addr_u2a(ctx->saaServerbind, "unix:%s", cpPath)) != SA_OK) {
  -                    log2(ctx, ERROR, "option --bind, parsing alternate IO guessing UNIX socket (%s) failed with \"%s\"", cpPath, sa_error(rc));
  -                    throw(0,0,0);
  -                }
  -                if ((rc = sa_bind(ctx->saServerbind, ctx->saaServerbind)) != SA_OK) {
  -                    log2(ctx, ERROR, "option --bind, bind (%s) failed with \"%s\"", cpPath, sa_error(rc));
  -                    throw(0,0,0);
  -                }
  -                if (nPerm != -1) {
  -                    if (chmod(cpPath, nPerm) == -1) {
  -                        log3(ctx, ERROR, "option --bind, chmod (%s, 0%o) failed with \"%s\"", cpPath, nPerm, strerror(errno));
  +                    if ((rc = sa_bind(ctx->saServerbind, ctx->saaServerbind)) != SA_OK) {
  +                        log2(ctx, ERROR, "option --bind, bind (%s) failed with \"%s\"", cpPath, sa_error(rc));
                           throw(0,0,0);
                       }
  +                    if (nPerm != -1) {
  +                        if (chmod(cpPath, nPerm) == -1) {
  +                            log3(ctx, ERROR, "option --bind, chmod (%s, 0%o) failed with \"%s\"", cpPath, nPerm, strerror(errno));
  +                            throw(0,0,0);
  +                        }
  +                    }
  +                    if (getuid() == 0 && getuid() != ctx->option_uid) {
  +                        if (chown(cpPath, ctx->option_uid, -1) == -1) {
  +                            log3(ctx, ERROR, "option --bind, chown (%s, %d) failed with \"%s\"", cpPath, ctx->option_uid, strerror(errno));
  +                            throw(0,0,0);
  +                        }
  +                    }
  +                    free(cpPath);
                   }
  -                if (getuid() == 0 && getuid() != ctx->option_uid) {
  -                    if (chown(cpPath, ctx->option_uid, -1) == -1) {
  -                        log3(ctx, ERROR, "option --bind, chown (%s, %d) failed with \"%s\"", cpPath, ctx->option_uid, strerror(errno));
  +            /* otherwise assume INET socket */
  +                else {
  +                    if ((rc = sa_addr_u2a(ctx->saaServerbind, "inet://%s", ov->data.s)) != SA_OK) {
  +                        log2(ctx, ERROR, "option --bind, parsing alternate IO guessing INET socket (%s) failed with \"%s\"", ov->data.s, sa_error(rc));
  +                        throw(0,0,0);
  +                    }
  +                    if ((rc = sa_bind(ctx->saServerbind, ctx->saaServerbind)) != SA_OK) {
  +                        log2(ctx, ERROR, "option --bind, bind (%s) failed with \"%s\"", ov->data.s, sa_error(rc));
                           throw(0,0,0);
                       }
                   }
  -                free(cpPath);
  -            }
  -        /* otherwise assume INET socket */
  -            else {
  -                if ((rc = sa_addr_u2a(ctx->saaServerbind, "inet://%s", ov->data.s)) != SA_OK) {
  -                    log2(ctx, ERROR, "option --bind, parsing alternate IO guessing INET socket (%s) failed with \"%s\"", ov->data.s, sa_error(rc));
  -                    throw(0,0,0);
  -                }
  -                if ((rc = sa_bind(ctx->saServerbind, ctx->saaServerbind)) != SA_OK) {
  -                    log2(ctx, ERROR, "option --bind, bind (%s) failed with \"%s\"", ov->data.s, sa_error(rc));
  -                    throw(0,0,0);
  +            /* for either sockets */
  +                if ((rc = sa_listen(ctx->saServerbind, -1)) != SA_OK) {
  +                        log2(ctx, ERROR, "option --bind, listen (%s) failed with \"%s\"", ov->data.s, sa_error(rc));
  +                        throw(0,0,0);
                   }
               }
  -        /* for either sockets */
  -            if ((rc = sa_listen(ctx->saServerbind, -1)) != SA_OK) {
  -                    log2(ctx, ERROR, "option --bind, listen (%s) failed with \"%s\"", ov->data.s, sa_error(rc));
  -                    throw(0,0,0);
  -            }
           }
       }
       catch (ex)
  @@ -352,18 +364,21 @@
       /* --client SINGLE */
       try {
           if (   (val_get(ctx->val, "option.client", &ov) != VAL_OK)
  -            || (ov->ndata != 1)
  -            || (ov->data.s == NULL)
  +            || (ov->ndata <  0)
  +            || (ov->ndata == 1 && ov->data.s == NULL)
  +            || (ov->ndata >  1)
                 ) throw(0,0,0);
           log1(ctx, TRACE, "--client = \"%s\"", ov->data.s);
   
  -        if ((rc = sa_addr_create(&ctx->saaClientbind)) != SA_OK) {
  -            log1(ctx, ERROR, "option --client, create address (internal) failed with \"%s\"", sa_error(rc));
  -            throw(0,0,0);
  -        }
  -        if ((rc = sa_addr_u2a(ctx->saaClientbind, "inet://%s", ov->data.s)) != SA_OK) {
  -            log2(ctx, ERROR, "option --client, parsing alternate IO guessing INET socket (%s) failed with \"%s\"", ov->data.s, sa_error(rc));
  -            throw(0,0,0);
  +        if (ov->ndata == 1) {
  +            if ((rc = sa_addr_create(&ctx->saaClientbind)) != SA_OK) {
  +                log1(ctx, ERROR, "option --client, create address (internal) failed with \"%s\"", sa_error(rc));
  +                throw(0,0,0);
  +            }
  +            if ((rc = sa_addr_u2a(ctx->saaClientbind, "inet://%s", ov->data.s)) != SA_OK) {
  +                log2(ctx, ERROR, "option --client, parsing alternate IO guessing INET socket (%s) failed with \"%s\"", ov->data.s, sa_error(rc));
  +                throw(0,0,0);
  +            }
           }
       }
       catch (ex)
  @@ -375,35 +390,38 @@
           int i;
   
           if (   (val_get(ctx->val, "option.destination", &ov) != VAL_OK)
  -            || ((ov->ndata >= 1) && (ov->data.m == NULL))
  +            || (ov->ndata <  0)
  +            || (ov->ndata >= 1 && ov->data.m == NULL)
                 ) throw(0,0,0);
           log1(ctx, DEBUG, "ov->ndata = %d", ov->ndata);
           for (i = 0; i < ov->ndata; i++)
               log2(ctx, TRACE, "--destination[%d] = \"%s\"", i, (ov->data.m)[i]);
   
  -        if ((ctx->pacl = (struct acl *)malloc(ov->ndata * sizeof(struct acl))) == NULL) throw(0,0,0);
  -        for (i = 0; i < ov->ndata; i++) {
  -            cp = (ov->data.m)[i];
  -            log2(ctx, DEBUG, "cp = (data.m)[%d] = \"%s\"", i, cp);
  -            if (strrchr(cp, ':') == NULL)
  -                cp = str_concat(cp, ":nntp", NULL); //FIXME is this a config var/val?
  -            else
  -                cp = str_concat(cp, NULL); /* prepare for free() */
  -            if ((rc = sa_addr_create(&ctx->ns[i].saa)) != SA_OK) {
  -                log1(ctx, ERROR, "option --destination, create address (internal) failed with \"%s\"", sa_error(rc));
  -                throw(0,0,0);
  -            }
  -            if ((rc = sa_addr_u2a(ctx->ns[i].saa, "inet://%s", cp)) != SA_OK) {
  -                log2(ctx, ERROR, "option --destination, parsing host address (%s) failed with \"%s\"", cp /*FIXME again, option vs. config */, sa_error(rc));
  -                throw(0,0,0);
  -            }
  -            if ((rc = sa_create(&ctx->ns[i].sa)) != SA_OK) {
  -                log2(ctx, ERROR, "option --destination, creating TCP socket (%s) failed with \"%s\"", cp /*FIXME again, option vs. config */, sa_error(rc));
  -                throw(0,0,0);
  +        if (ov->ndata >= 1) {
  +            if ((ctx->pacl = (struct acl *)malloc(ov->ndata * sizeof(struct acl))) == NULL) throw(0,0,0);
  +            for (i = 0; i < ov->ndata; i++) {
  +                cp = (ov->data.m)[i];
  +                log2(ctx, DEBUG, "cp = (data.m)[%d] = \"%s\"", i, cp);
  +                if (strrchr(cp, ':') == NULL)
  +                    cp = str_concat(cp, ":nntp", NULL); //FIXME is this a config var/val?
  +                else
  +                    cp = str_concat(cp, NULL); /* prepare for free() */
  +                if ((rc = sa_addr_create(&ctx->ns[i].saa)) != SA_OK) {
  +                    log1(ctx, ERROR, "option --destination, create address (internal) failed with \"%s\"", sa_error(rc));
  +                    throw(0,0,0);
  +                }
  +                if ((rc = sa_addr_u2a(ctx->ns[i].saa, "inet://%s", cp)) != SA_OK) {
  +                    log2(ctx, ERROR, "option --destination, parsing host address (%s) failed with \"%s\"", cp /*FIXME again, option vs. config */, sa_error(rc));
  +                    throw(0,0,0);
  +                }
  +                if ((rc = sa_create(&ctx->ns[i].sa)) != SA_OK) {
  +                    log2(ctx, ERROR, "option --destination, creating TCP socket (%s) failed with \"%s\"", cp /*FIXME again, option vs. config */, sa_error(rc));
  +                    throw(0,0,0);
  +                }
  +                free(cp);
               }
  -            free(cp);
  +            ctx->nns = i;
           }
  -        ctx->nns = i;
       }
       catch (ex)
           rethrow;
  @@ -411,20 +429,23 @@
       /* --groupmode SINGLE */
       try {
           if (   (val_get(ctx->val, "option.groupmode", &ov) != VAL_OK)
  -            || (ov->ndata != 1)
  -            || (ov->data.s == NULL)
  +            || (ov->ndata <  0)
  +            || (ov->ndata == 1 && ov->data.s == NULL)
  +            || (ov->ndata >  1)
                 ) throw(0,0,0);
           log1(ctx, TRACE, "--groupmode = \"%s\"", ov->data.s);
   
  -        if      (strcasecmp(ov->data.s, "arg") == 0)
  -            ctx->option_groupmode = GROUPMODE_ARG;
  -        else if (strcasecmp(ov->data.s, "envelope") == 0)
  -            ctx->option_groupmode = GROUPMODE_ENVELOPE;
  -        else if (strcasecmp(ov->data.s, "header") == 0)
  -            ctx->option_groupmode = GROUPMODE_HEADER;
  -        else {
  -            log1(ctx, ERROR, "option --groupmode, invalid mode (%s)", ov->data.s);
  -            throw(0,0,0);
  +        if (ov->ndata == 1) {
  +            if      (strcasecmp(ov->data.s, "arg") == 0)
  +                ctx->option_groupmode = GROUPMODE_ARG;
  +            else if (strcasecmp(ov->data.s, "envelope") == 0)
  +                ctx->option_groupmode = GROUPMODE_ENVELOPE;
  +            else if (strcasecmp(ov->data.s, "header") == 0)
  +                ctx->option_groupmode = GROUPMODE_HEADER;
  +            else {
  +                log1(ctx, ERROR, "option --groupmode, invalid mode (%s)", ov->data.s);
  +                throw(0,0,0);
  +            }
           }
       }
       catch (ex)
  @@ -438,35 +459,38 @@
           char *cpValue;
   
           if (   (val_get(ctx->val, "option.headervalue", &ov) != VAL_OK)
  -            || ((ov->ndata >= 1) && (ov->data.m == NULL))
  +            || (ov->ndata <  0)
  +            || (ov->ndata >= 1 && ov->data.m == NULL)
                 ) throw(0,0,0);
           log1(ctx, DEBUG, "ov->ndata = %d", ov->ndata);
           for (i = 0; i < ov->ndata; i++)
               log2(ctx, TRACE, "--headervalue[%d] = \"%s\"", i, (ov->data.m)[i]);
   
  -        if ((ctx->pacl = (struct acl *)malloc(ov->ndata * sizeof(struct acl))) == NULL) throw(0,0,0);
  -        for (i = 0; i < ov->ndata; i++) {
  -            cp = (ov->data.m)[i];
  -            log2(ctx, DEBUG, "cp = (data.m)[%d] = \"%s\"", i, cp);
  -            cpHeader = strdup(cp);
  -            if ((cp = strchr(cpHeader, ':')) == NULL) {
  -                log1(ctx, ERROR, "option --headervalue, header (%s) terminating colon missing", (ov->data.m)[i]);
  -                throw(0,0,0);
  -            }
  -            *cp = NUL;
  -            log2(ctx, DEBUG, "header[%d] = \"%s\"", i, cpHeader);
  -            cp++;
  -            while (*cp == ' ') cp++; //FIXME note this in NEWS
  -            if (*cp == NUL) {
  -                log1(ctx, ERROR, "option --headervalue, value (%s) missing", (ov->data.m)[i]);
  -                throw(0,0,0);
  -            }
  -            cpValue = strdup(cp);
  -            log2(ctx, DEBUG, " value[%d] = \"%s\"", i, cpValue);
  -            argz_add(&ctx->azHeaderValuePairs, &ctx->asHeaderValuePairs, cpHeader);
  -            argz_add(&ctx->azHeaderValuePairs, &ctx->asHeaderValuePairs, cpValue);
  -            free(cpHeader);
  -            free(cpValue);
  +        if (ov->ndata >= 1) {
  +            if ((ctx->pacl = (struct acl *)malloc(ov->ndata * sizeof(struct acl))) == NULL) throw(0,0,0);
  +            for (i = 0; i < ov->ndata; i++) {
  +                cp = (ov->data.m)[i];
  +                log2(ctx, DEBUG, "cp = (data.m)[%d] = \"%s\"", i, cp);
  +                cpHeader = strdup(cp);
  +                if ((cp = strchr(cpHeader, ':')) == NULL) {
  +                    log1(ctx, ERROR, "option --headervalue, header (%s) terminating colon missing", (ov->data.m)[i]);
  +                    throw(0,0,0);
  +                }
  +                *cp = NUL;
  +                log2(ctx, DEBUG, "header[%d] = \"%s\"", i, cpHeader);
  +                cp++;
  +                while (*cp == ' ') cp++; //FIXME note this in NEWS
  +                if (*cp == NUL) {
  +                    log1(ctx, ERROR, "option --headervalue, value (%s) missing", (ov->data.m)[i]);
  +                    throw(0,0,0);
  +                }
  +                cpValue = strdup(cp);
  +                log2(ctx, DEBUG, " value[%d] = \"%s\"", i, cpValue);
  +                argz_add(&ctx->azHeaderValuePairs, &ctx->asHeaderValuePairs, cpHeader);
  +                argz_add(&ctx->azHeaderValuePairs, &ctx->asHeaderValuePairs, cpValue);
  +                free(cpHeader);
  +                free(cpValue);
  +            }
           }
       }
       catch (ex)
  @@ -477,24 +501,27 @@
           char *cp;
   
           if (   (val_get(ctx->val, "option.mailfrom", &ov) != VAL_OK)
  -            || (ov->ndata != 1)
  -            || (ov->data.s == NULL)
  +            || (ov->ndata <  0)
  +            || (ov->ndata == 1 && ov->data.s == NULL)
  +            || (ov->ndata >  1)
                 ) throw(0,0,0);
           log1(ctx, TRACE, "--mailfrom = \"%s\"", ov->data.s);
   
  -        ctx->option_mailfrom = strdup(ov->data.s);
  -        /* protect ourselfs from the substitution of backreferences.
  -         * Missing varargs would cause segfaults.  Rewrite capturing
  -         * brackets to clustering syntax. Use poor man's s///g
  -         * simulator as current str library doesn't support global
  -         * substitution */
  -        while (str_parse(ctx->option_mailfrom, "s/(.*?)\\((?!\\?:)(.*)/$1(?:$2/", &cp) > 0) {
  -            free(ctx->option_mailfrom);
  -            ctx->option_mailfrom = cp;
  -        }
  -        if (str_parse("<>", ctx->option_mailfrom) == -1) {
  -            log1(ctx, ERROR, "option --mailfrom, illegal regex (%s)", ctx->option_mailfrom);
  -            throw(0,0,0);
  +        if (ov->ndata == 1) {
  +            ctx->option_mailfrom = strdup(ov->data.s);
  +            /* protect ourselfs from the substitution of backreferences.
  +             * Missing varargs would cause segfaults.  Rewrite capturing
  +             * brackets to clustering syntax. Use poor man's s///g
  +             * simulator as current str library doesn't support global
  +             * substitution */
  +            while (str_parse(ctx->option_mailfrom, "s/(.*?)\\((?!\\?:)(.*)/$1(?:$2/", &cp) > 0) {
  +                free(ctx->option_mailfrom);
  +                ctx->option_mailfrom = cp;
  +            }
  +            if (str_parse("<>", ctx->option_mailfrom) == -1) {
  +                log1(ctx, ERROR, "option --mailfrom, illegal regex (%s)", ctx->option_mailfrom);
  +                throw(0,0,0);
  +            }
           }
       }
       catch (ex)
  @@ -503,16 +530,19 @@
       /* --nodename SINGLE */
       try {
           if (   (val_get(ctx->val, "option.nodename", &ov) != VAL_OK)
  -            || (ov->ndata != 1)
  -            || (ov->data.s == NULL)
  +            || (ov->ndata <  0)
  +            || (ov->ndata == 1 && ov->data.s == NULL)
  +            || (ov->ndata >  1)
                 ) throw(0,0,0);
           log1(ctx, TRACE, "--nodename = \"%s\"", ov->data.s);
   
  -        if (strlen(ov->data.s) > sizeof(ctx->uname.nodename)-1) {
  -            log1(ctx, ERROR, "option --nodename, name (%s) too long", ov->data.s);
  -            throw(0,0,0);
  +        if (ov->ndata == 1) {
  +            if (strlen(ov->data.s) > sizeof(ctx->uname.nodename)-1) {
  +                log1(ctx, ERROR, "option --nodename, name (%s) too long", ov->data.s);
  +                throw(0,0,0);
  +            }
  +            strcpy(ctx->uname.nodename, ov->data.s);
           }
  -        strcpy(ctx->uname.nodename, ov->data.s);
       }
       catch (ex)
           rethrow;
  @@ -522,46 +552,49 @@
           char *cp;
   
           if (   (val_get(ctx->val, "option.operationmode", &ov) != VAL_OK)
  -            || (ov->ndata != 1)
  -            || (ov->data.s == NULL)
  +            || (ov->ndata <  0)
  +            || (ov->ndata == 1 && ov->data.s == NULL)
  +            || (ov->ndata >  1)
                 ) throw(0,0,0);
           log1(ctx, TRACE, "--operationmode = \"%s\"", ov->data.s);
   
  -        cp = strdup(ov->data.s);
  -        if      (strcasecmp(cp, "post") == 0)
  -            ctx->option_operationmode = OPERATIONMODE_POST;
  -        else if (strcasecmp(cp, "feed") == 0)
  -            ctx->option_operationmode = OPERATIONMODE_FEED;
  -        else {
  -            if (strlen(cp) != 9) {
  -                log1(ctx, ERROR, "option --operationmode, invalid length (%s)", cp);
  -                throw(0,0,0);
  -            }
  -            if (cp[3] != '/') {
  -                log1(ctx, ERROR, "option --operationmode, missing slash (%s)", cp);
  -                throw(0,0,0);
  -            }
  -            cp[3] = NUL;
  -            ctx->option_operationmodefakestatus = &cp[0];
  -            ctx->option_operationmodefakedsn    = &cp[4];
  -            if (   strlen(ctx->option_operationmodefakestatus) != 3
  -                || !isdigit((int)ctx->option_operationmodefakestatus[0])
  -                || !isdigit((int)ctx->option_operationmodefakestatus[1])
  -                || !isdigit((int)ctx->option_operationmodefakestatus[2])
  -                  ) {
  -                log1(ctx, ERROR, "option --operationmode, invalid status code (%s)", cp);
  -                throw(0,0,0);
  -            }
  -            if (   (strlen(ctx->option_operationmodefakedsn) != 5)
  -                || !isdigit((int)ctx->option_operationmodefakedsn[0])
  -                || (ctx->option_operationmodefakedsn[1] != '.')
  -                || !isdigit((int)ctx->option_operationmodefakedsn[2])
  -                || (ctx->option_operationmodefakedsn[3] != '.')
  -                || !isdigit((int)ctx->option_operationmodefakedsn[4])
  -                || (ctx->option_operationmodefakedsn[0] != ctx->option_operationmodefakestatus[0])
  -                  ) {
  -                log1(ctx, ERROR, "option --operationmode, invalid dsn code (%s)", cp);
  -                throw(0,0,0);
  +        if (ov->ndata == 1) {
  +            cp = strdup(ov->data.s);
  +            if      (strcasecmp(cp, "post") == 0)
  +                ctx->option_operationmode = OPERATIONMODE_POST;
  +            else if (strcasecmp(cp, "feed") == 0)
  +                ctx->option_operationmode = OPERATIONMODE_FEED;
  +            else {
  +                if (strlen(cp) != 9) {
  +                    log1(ctx, ERROR, "option --operationmode, invalid length (%s)", cp);
  +                    throw(0,0,0);
  +                }
  +                if (cp[3] != '/') {
  +                    log1(ctx, ERROR, "option --operationmode, missing slash (%s)", cp);
  +                    throw(0,0,0);
  +                }
  +                cp[3] = NUL;
  +                ctx->option_operationmodefakestatus = &cp[0];
  +                ctx->option_operationmodefakedsn    = &cp[4];
  +                if (   strlen(ctx->option_operationmodefakestatus) != 3
  +                    || !isdigit((int)ctx->option_operationmodefakestatus[0])
  +                    || !isdigit((int)ctx->option_operationmodefakestatus[1])
  +                    || !isdigit((int)ctx->option_operationmodefakestatus[2])
  +                      ) {
  +                    log1(ctx, ERROR, "option --operationmode, invalid status code (%s)", cp);
  +                    throw(0,0,0);
  +                }
  +                if (   (strlen(ctx->option_operationmodefakedsn) != 5)
  +                    || !isdigit((int)ctx->option_operationmodefakedsn[0])
  +                    || (ctx->option_operationmodefakedsn[1] != '.')
  +                    || !isdigit((int)ctx->option_operationmodefakedsn[2])
  +                    || (ctx->option_operationmodefakedsn[3] != '.')
  +                    || !isdigit((int)ctx->option_operationmodefakedsn[4])
  +                    || (ctx->option_operationmodefakedsn[0] != ctx->option_operationmodefakestatus[0])
  +                      ) {
  +                    log1(ctx, ERROR, "option --operationmode, invalid dsn code (%s)", cp);
  +                    throw(0,0,0);
  +                }
               }
           }
       }
  @@ -573,24 +606,27 @@
           char *cp;
   
           if (   (val_get(ctx->val, "option.restrictheader", &ov) != VAL_OK)
  -            || (ov->ndata != 1)
  -            || (ov->data.s == NULL)
  +            || (ov->ndata <  0)
  +            || (ov->ndata == 1 && ov->data.s == NULL)
  +            || (ov->ndata >  1)
                 ) throw(0,0,0);
           log1(ctx, TRACE, "--restrictheader = \"%s\"", ov->data.s);
   
  -        ctx->option_restrictheader = strdup(ov->data.s);
  -        /* protect ourselfs from the substitution of backreferences.
  -         * Missing varargs would cause segfaults.  Rewrite capturing
  -         * brackets to clustering syntax. Use poor man's s///g
  -         * simulator as current str library doesn't support global
  -         * substitution */
  -        while (str_parse(ctx->option_restrictheader, "s/(.*?)\\((?!\\?:)(.*)/$1(?:$2/", &cp) > 0) {
  -            free(ctx->option_restrictheader);
  -            ctx->option_restrictheader = cp;
  -        }
  -        if (str_parse("<>", ctx->option_restrictheader) == -1) {
  -            log1(ctx, ERROR, "option --restrictheader, illegal regex (%s)", ctx->option_restrictheader);
  -            throw(0,0,0);
  +        if (ov->ndata == 1) {
  +            ctx->option_restrictheader = strdup(ov->data.s);
  +            /* protect ourselfs from the substitution of backreferences.
  +             * Missing varargs would cause segfaults.  Rewrite capturing
  +             * brackets to clustering syntax. Use poor man's s///g
  +             * simulator as current str library doesn't support global
  +             * substitution */
  +            while (str_parse(ctx->option_restrictheader, "s/(.*?)\\((?!\\?:)(.*)/$1(?:$2/", &cp) > 0) {
  +                free(ctx->option_restrictheader);
  +                ctx->option_restrictheader = cp;
  +            }
  +            if (str_parse("<>", ctx->option_restrictheader) == -1) {
  +                log1(ctx, ERROR, "option --restrictheader, illegal regex (%s)", ctx->option_restrictheader);
  +                throw(0,0,0);
  +            }
           }
       }
       catch (ex)
  @@ -599,15 +635,17 @@
       /* --size SINGLE */
       try {
           if (   (val_get(ctx->val, "option.size", &ov) != VAL_OK)
  -            || (ov->ndata != 1)
  -            || (ov->data.s == NULL)
  +            || (ov->ndata <  0)
  +            || (ov->ndata == 1 && ov->data.s == NULL)
  +            || (ov->ndata >  1)
                 ) throw(0,0,0);
           log1(ctx, TRACE, "--size = \"%s\"", ov->data.s);
   
  -        if ((ctx->option_maxmessagesize = atoi(ov->data.s)) <= 0) {
  -            log1(ctx, ERROR, "option --size, number (%d) out of range", ctx->option_maxmessagesize);
  -            throw(0,0,0);
  -        }
  +        if (ov->ndata == 1)
  +            if ((ctx->option_maxmessagesize = atoi(ov->data.s)) <= 0) {
  +                log1(ctx, ERROR, "option --size, number (%d) out of range", ctx->option_maxmessagesize);
  +                throw(0,0,0);
  +            }
       }
       catch (ex)
           rethrow;
  @@ -617,18 +655,21 @@
           int i;
   
           if (   (val_get(ctx->val, "option.timeoutlmtp", &ov) != VAL_OK)
  -            || (ov->ndata != 1)
  -            || (ov->data.s == NULL)
  +            || (ov->ndata <  0)
  +            || (ov->ndata == 1 && ov->data.s == NULL)
  +            || (ov->ndata >  1)
                 ) throw(0,0,0);
           log1(ctx, TRACE, "--timeoutlmtp= \"%s\"", ov->data.s);
  -
  -        if ((i = atoi(ov->data.s)) < 0) {
  -            log1(ctx, ERROR, "option --timeoutlmtp, number (%d) out of range", i);
  -            throw(0,0,0);
  -        }
  -        ctx->option_timeout_lmtp_accept = i;
  -        ctx->option_timeout_lmtp_read = i;
  -        ctx->option_timeout_lmtp_write = i;
  + 
  +        if (ov->ndata == 1) {
  +            if ((i = atoi(ov->data.s)) < 0) {
  +                log1(ctx, ERROR, "option --timeoutlmtp, number (%d) out of range", i);
  +                throw(0,0,0);
  +            }
  +            ctx->option_timeout_lmtp_accept = i;
  +            ctx->option_timeout_lmtp_read = i;
  +            ctx->option_timeout_lmtp_write = i;
  +        }
       }
       catch (ex)
           rethrow;
  @@ -636,15 +677,17 @@
       /* --timeoutlmtpaccept SINGLE */
       try {
           if (   (val_get(ctx->val, "option.timeoutlmtpaccept", &ov) != VAL_OK)
  -            || (ov->ndata != 1)
  -            || (ov->data.s == NULL)
  +            || (ov->ndata <  0)
  +            || (ov->ndata == 1 && ov->data.s == NULL)
  +            || (ov->ndata >  1)
                 ) throw(0,0,0);
           log1(ctx, TRACE, "--timeoutlmtpaccept = \"%s\"", ov->data.s);
   
  -        if ((ctx->option_timeout_lmtp_accept = atoi(ov->data.s)) < 0) {
  -            log1(ctx, ERROR, "option --timeoutlmtpaccept, number (%d) out of range", ctx->option_timeout_lmtp_accept);
  -            throw(0,0,0);
  -        }
  +        if (ov->ndata == 1)
  +            if ((ctx->option_timeout_lmtp_accept = atoi(ov->data.s)) < 0) {
  +                log1(ctx, ERROR, "option --timeoutlmtpaccept, number (%d) out of range", ctx->option_timeout_lmtp_accept);
  +                throw(0,0,0);
  +            }
       }
       catch (ex)
           rethrow;
  @@ -652,15 +695,17 @@
       /* --timeoutlmtpread SINGLE */
       try {
           if (   (val_get(ctx->val, "option.timeoutlmtpread", &ov) != VAL_OK)
  -            || (ov->ndata != 1)
  -            || (ov->data.s == NULL)
  +            || (ov->ndata <  0)
  +            || (ov->ndata == 1 && ov->data.s == NULL)
  +            || (ov->ndata >  1)
                 ) throw(0,0,0);
           log1(ctx, TRACE, "--timeoutlmtpread = \"%s\"", ov->data.s);
   
  -        if ((ctx->option_timeout_lmtp_read = atoi(ov->data.s)) < 0) {
  -            log1(ctx, ERROR, "option --timeoutlmtpread, number (%d) out of range", ctx->option_timeout_lmtp_read);
  -            throw(0,0,0);
  -        }
  +        if (ov->ndata == 1)
  +            if ((ctx->option_timeout_lmtp_read = atoi(ov->data.s)) < 0) {
  +                log1(ctx, ERROR, "option --timeoutlmtpread, number (%d) out of range", ctx->option_timeout_lmtp_read);
  +                throw(0,0,0);
  +            }
       }
       catch (ex)
           rethrow;
  @@ -668,15 +713,17 @@
       /* --timeoutlmtpwrite SINGLE */
       try {
           if (   (val_get(ctx->val, "option.timeoutlmtpwrite", &ov) != VAL_OK)
  -            || (ov->ndata != 1)
  -            || (ov->data.s == NULL)
  +            || (ov->ndata <  0)
  +            || (ov->ndata == 1 && ov->data.s == NULL)
  +            || (ov->ndata >  1)
                 ) throw(0,0,0);
           log1(ctx, TRACE, "--timeoutlmtpwrite = \"%s\"", ov->data.s);
   
  -        if ((ctx->option_timeout_lmtp_write = atoi(ov->data.s)) < 0) {
  -            log1(ctx, ERROR, "option --timeoutlmtpwrite, number (%d) out of range", ctx->option_timeout_lmtp_write);
  -            throw(0,0,0);
  -        }
  +        if (ov->ndata == 1)
  +            if ((ctx->option_timeout_lmtp_write = atoi(ov->data.s)) < 0) {
  +                log1(ctx, ERROR, "option --timeoutlmtpwrite, number (%d) out of range", ctx->option_timeout_lmtp_write);
  +                throw(0,0,0);
  +            }
       }
       catch (ex)
           rethrow;
  @@ -686,18 +733,21 @@
           int i;
   
           if (   (val_get(ctx->val, "option.timeoutnntp", &ov) != VAL_OK)
  -            || (ov->ndata != 1)
  -            || (ov->data.s == NULL)
  +            || (ov->ndata <  0)
  +            || (ov->ndata == 1 && ov->data.s == NULL)
  +            || (ov->ndata >  1)
                 ) throw(0,0,0);
           log1(ctx, TRACE, "--timeoutnntp= \"%s\"", ov->data.s);
   
  -        if ((i = atoi(ov->data.s)) < 0) {
  -            log1(ctx, ERROR, "option --timeoutnntp, number (%d) out of range", i);
  -            throw(0,0,0);
  -        }
  -        ctx->option_timeout_nntp_connect = i;
  -        ctx->option_timeout_nntp_read = i;
  -        ctx->option_timeout_nntp_write = i;
  +        if (ov->ndata == 1) {
  +            if ((i = atoi(ov->data.s)) < 0) {
  +                log1(ctx, ERROR, "option --timeoutnntp, number (%d) out of range", i);
  +                throw(0,0,0);
  +            }
  +            ctx->option_timeout_nntp_connect = i;
  +            ctx->option_timeout_nntp_read = i;
  +            ctx->option_timeout_nntp_write = i;
  +        }
       }
       catch (ex)
           rethrow;
  @@ -705,15 +755,17 @@
       /* --timeoutnntpconnect SINGLE */
       try {
           if (   (val_get(ctx->val, "option.timeoutnntpconnect", &ov) != VAL_OK)
  -            || (ov->ndata != 1)
  -            || (ov->data.s == NULL)
  +            || (ov->ndata <  0)
  +            || (ov->ndata == 1 && ov->data.s == NULL)
  +            || (ov->ndata >  1)
                 ) throw(0,0,0);
           log1(ctx, TRACE, "--timeoutnntpconnect = \"%s\"", ov->data.s);
   
  -        if ((ctx->option_timeout_nntp_connect = atoi(ov->data.s)) < 0) {
  -            log1(ctx, ERROR, "option --timeoutnntpconnect, number (%d) out of range", ctx->option_timeout_nntp_connect);
  -            throw(0,0,0);
  -        }
  +        if (ov->ndata == 1)
  +            if ((ctx->option_timeout_nntp_connect = atoi(ov->data.s)) < 0) {
  +                log1(ctx, ERROR, "option --timeoutnntpconnect, number (%d) out of range", ctx->option_timeout_nntp_connect);
  +                throw(0,0,0);
  +            }
       }
       catch (ex)
           rethrow;
  @@ -721,15 +773,17 @@
       /* --timeoutnntpread SINGLE */
       try {
           if (   (val_get(ctx->val, "option.timeoutnntpread", &ov) != VAL_OK)
  -            || (ov->ndata != 1)
  -            || (ov->data.s == NULL)
  +            || (ov->ndata <  0)
  +            || (ov->ndata == 1 && ov->data.s == NULL)
  +            || (ov->ndata >  1)
                 ) throw(0,0,0);
           log1(ctx, TRACE, "--timeoutnntpread = \"%s\"", ov->data.s);
   
  -        if ((ctx->option_timeout_nntp_read = atoi(ov->data.s)) < 0) {
  -            log1(ctx, ERROR, "option --timeoutnntpread, number (%d) out of range", ctx->option_timeout_nntp_read);
  -            throw(0,0,0);
  -        }
  +        if (ov->ndata == 1)
  +            if ((ctx->option_timeout_nntp_read = atoi(ov->data.s)) < 0) {
  +                log1(ctx, ERROR, "option --timeoutnntpread, number (%d) out of range", ctx->option_timeout_nntp_read);
  +                throw(0,0,0);
  +            }
       }
       catch (ex)
           rethrow;
  @@ -737,15 +791,17 @@
       /* --timeoutnntpwrite SINGLE */
       try {
           if (   (val_get(ctx->val, "option.timeoutnntpwrite", &ov) != VAL_OK)
  -            || (ov->ndata != 1)
  -            || (ov->data.s == NULL)
  +            || (ov->ndata <  0)
  +            || (ov->ndata == 1 && ov->data.s == NULL)
  +            || (ov->ndata >  1)
                 ) throw(0,0,0);
           log1(ctx, TRACE, "--timeoutnntpwrite = \"%s\"", ov->data.s);
   
  -        if ((ctx->option_timeout_nntp_write = atoi(ov->data.s)) < 0) {
  -            log1(ctx, ERROR, "option --timeoutnntpwrite, number (%d) out of range", ctx->option_timeout_nntp_write);
  -            throw(0,0,0);
  -        }
  +        if (ov->ndata == 1)
  +            if ((ctx->option_timeout_nntp_write = atoi(ov->data.s)) < 0) {
  +                log1(ctx, ERROR, "option --timeoutnntpwrite, number (%d) out of range", ctx->option_timeout_nntp_write);
  +                throw(0,0,0);
  +            }
       }
       catch (ex)
           rethrow;
  @@ -755,24 +811,27 @@
           struct passwd *sPasswd;
   
           if (   (val_get(ctx->val, "option.user", &ov) != VAL_OK)
  -            || (ov->ndata != 1)
  -            || (ov->data.s == NULL)
  +            || (ov->ndata <  0)
  +            || (ov->ndata == 1 && ov->data.s == NULL)
  +            || (ov->ndata >  1)
                 ) throw(0,0,0);
           log1(ctx, TRACE, "--user = \"%s\"", ov->data.s);
   
  -        if (isdigit((int)ov->data.s[0])) {
  -            if ((sPasswd = getpwuid((uid_t)atoi(ov->data.s))) == NULL) {
  -                log1(ctx, ERROR, "option --user, uid (%s) not found", ov->data.s);
  -                throw(0,0,0);
  +        if (ov->ndata == 1) {
  +            if (isdigit((int)ov->data.s[0])) {
  +                if ((sPasswd = getpwuid((uid_t)atoi(ov->data.s))) == NULL) {
  +                    log1(ctx, ERROR, "option --user, uid (%s) not found", ov->data.s);
  +                    throw(0,0,0);
  +                }
               }
  -        }
  -        else {
  -            if ((sPasswd = getpwnam(ov->data.s)) == NULL) {
  -                log1(ctx, ERROR, "option --user, name (%s) not found", ov->data.s);
  -                throw(0,0,0);
  +            else {
  +                if ((sPasswd = getpwnam(ov->data.s)) == NULL) {
  +                    log1(ctx, ERROR, "option --user, name (%s) not found", ov->data.s);
  +                    throw(0,0,0);
  +                }
               }
  +            ctx->option_uid = sPasswd->pw_uid;
           }
  -        ctx->option_uid = sPasswd->pw_uid;
       }
       catch (ex)
           rethrow;
  @@ -780,14 +839,17 @@
       /* --version FLAG */
       try {
           if (   (val_get(ctx->val, "option.version", &ov) != VAL_OK)
  -            || (ov->ndata != 1)
  -            || (ov->data.f != 1)
  +            || (ov->ndata <  0)
  +            || (ov->ndata == 1 && ov->data.f < 0)
  +            || (ov->ndata == 1 && ov->data.f > 1)
  +            || (ov->ndata >  1)
                 ) throw(0,0,0);
           log1(ctx, TRACE, "--version = %d", ov->data.f);
   
  -        log1(ctx, INFO, "program version %s", lmtp2nntp_version.v_gnu);
  -        fprintf(stdout, "%s\n", lmtp2nntp_version.v_gnu); //FIXME is fprintf really the way to go?
  -
  +        if (ov->data.f == 1) {
  +            log1(ctx, INFO, "program version %s", lmtp2nntp_version.v_gnu);
  +            fprintf(stdout, "%s\n", lmtp2nntp_version.v_gnu); //FIXME is fprintf really the way to go?
  +        }
       }
       catch (ex)
           rethrow;
  @@ -798,16 +860,19 @@
           int i;
   
           if (   (val_get(ctx->val, "option.newsgroup", &ov) != VAL_OK)
  -            || ((ov->ndata >= 1) && (ov->data.m == NULL))
  +            || (ov->ndata <  0)
  +            || (ov->ndata >= 1 && ov->data.m == NULL)
                 ) throw(0,0,0);
           log1(ctx, DEBUG, "ov->ndata = %d", ov->ndata);
           for (i = 0; i < ov->ndata; i++)
               log2(ctx, TRACE, "--newsgroup[%d] = \"%s\"", i, (ov->data.m)[i]);
   
  -        for (i = 0; i < ov->ndata; i++) {
  -            cp = (ov->data.m)[i];
  -            log2(ctx, DEBUG, "cp = (data.m)[%d] = \"%s\"", i, cp);
  -            argz_add(&ctx->azGroupargs, &ctx->asGroupargs, cp);
  +        if (ov->ndata >= 1) {
  +            for (i = 0; i < ov->ndata; i++) {
  +                cp = (ov->data.m)[i];
  +                log2(ctx, DEBUG, "cp = (data.m)[%d] = \"%s\"", i, cp);
  +                argz_add(&ctx->azGroupargs, &ctx->asGroupargs, cp);
  +            }
           }
       }
       catch (ex)
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.32 -r1.33 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	4 Feb 2002 13:52:15 -0000	1.32
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	4 Feb 2002 14:48:30 -0000	1.33
  @@ -394,6 +394,7 @@
       (void)option_create(&o, ctx->val); /* FIXME */
       (void)option_parse(o, argc, argv);
       (void)config_context(ctx);
  +    printf("DEBUG: trace #1\n");
   
       /* if no positive ACL exists (option -a) add a wildcard match-all for IPv4 and IPv6 */
       bOk = FALSE;

From ossp-cvs-owner@ossp.org  Mon Feb  4 16:11:32 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 54DAF7650C; Mon,  4 Feb 2002 16:11:32 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc 00TODO
Message-Id: <20020204151132.54DAF7650C@mail.ossp.org>
Date: Mon,  4 Feb 2002 16:11:32 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   04-Feb-2002 16:11:32
  Branch: HEAD                             Handle: 2002020415113100

  Modified files:
    ossp-pkg/rc             00TODO

  Log:
    Remember to fix manpage later, wrong option info for rc.func given.

  Summary:
    Revision    Changes     Path
    1.16        +4  -0      ossp-pkg/rc/00TODO
  ____________________________________________________________________________

  Index: ossp-pkg/rc/00TODO
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 00TODO
  --- ossp-pkg/rc/00TODO	31 Jan 2002 21:14:10 -0000	1.15
  +++ ossp-pkg/rc/00TODO	4 Feb 2002 15:11:31 -0000	1.16
  @@ -1,6 +1,7 @@
   00TODO: Tasks left to accomplish before rc is complete
   
   Unfinished business
  +  Manpage options incorrectly specifies multiple rc.funcs.
     What when multiple command interpreters and one --print or --eval given?
     File rc.func totally undocumented, but logic should be clear.
     Control flow
  @@ -22,6 +23,9 @@
     Translate rc bourne shell script to ANSI C.
     Finish man page. Start latex or Docbook guide.
     If a variable is defined for which no default exists, warn user (Scholli.)
  +
  +Document
  +  Refs, pri, user, group, ci, go only in normal (not special) sections.
   
   Detailed ;-) project plan
   -------------------------

From ossp-cvs-owner@ossp.org  Mon Feb  4 16:43:02 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DD1417650C; Mon,  4 Feb 2002 16:43:01 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp fixme.h lmtp2nntp_config.c lmtp2nntp_ma...
Message-Id: <20020204154301.DD1417650C@mail.ossp.org>
Date: Mon,  4 Feb 2002 16:43:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   04-Feb-2002 16:43:01
  Branch: HEAD                             Handle: 2002020415430100

  Modified files:
    ossp-pkg/lmtp2nntp      fixme.h lmtp2nntp_config.c lmtp2nntp_main.c

  Log:
    merged new --acl option with obsolete post-option processing

  Summary:
    Revision    Changes     Path
    1.10        +1  -1      ossp-pkg/lmtp2nntp/fixme.h
    1.39        +53 -2      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.34        +0  -50     ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/fixme.h
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 fixme.h
  --- ossp-pkg/lmtp2nntp/fixme.h	4 Feb 2002 13:52:14 -0000	1.9
  +++ ossp-pkg/lmtp2nntp/fixme.h	4 Feb 2002 15:43:01 -0000	1.10
  @@ -6,7 +6,7 @@
   #define __FIXME_H__
   
   #include <val.h>
  -#define MAXACLS 32
  +/*FIXME obsolete #define MAXACLS 32 */
   #include <sa.h>
   struct acl {
       char      *acl;
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.38 -r1.39 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	4 Feb 2002 14:48:30 -0000	1.38
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	4 Feb 2002 15:43:01 -0000	1.39
  @@ -221,6 +221,7 @@
       try {
           char *cp;
           int i;
  +        int somepass;
   
           if (   (val_get(ctx->val, "option.acl", &ov) != VAL_OK)
               || (ov->ndata <  0)
  @@ -230,8 +231,22 @@
           for (i = 0; i < ov->ndata; i++)
               log2(ctx, TRACE, "--acl[%d] = \"%s\"", i, (ov->data.m)[i]);
   
  +        /* check if only blocking ACLs exist */
  +        somepass = FALSE;
  +        if (ov->ndata >= 1) {
  +            for (i = 0; i < ov->ndata; i++) {
  +                cp = (ov->data.m)[i];
  +                if (cp[0] != '!') {
  +                    somepass = TRUE;
  +                    break;
  +                }
  +            }
  +        }
  +
  +        /* if only blocking ACLs exist, reserve space for two additional pass-through wildcards */
  +        if ((ctx->pacl = (struct acl *)malloc((ov->ndata + somepass ? 0 : 2 ) * sizeof(struct acl))) == NULL) throw(0,0,0);
  +
           if (ov->ndata >= 1) {
  -            if ((ctx->pacl = (struct acl *)malloc(ov->ndata * sizeof(struct acl))) == NULL) throw(0,0,0);
               for (i = 0; i < ov->ndata; i++) {
                   cp = (ov->data.m)[i];
                   log2(ctx, DEBUG, "cp = (data.m)[%d] = \"%s\"", i, cp);
  @@ -241,7 +256,7 @@
                   }
                   else {
                       ctx->pacl[i].acl = strdup(cp);
  -                    ctx->pacl[i].not = TRUE;
  +                    ctx->pacl[i].not = FALSE;
                   }
                   log2(ctx, DEBUG, "ctx->pacl[%d].not = %s", i, ctx->pacl[i].not == TRUE ? "TRUE" : "FALSE");
                   log2(ctx, DEBUG, "ctx->pacl[%d].acl = %s", i, ctx->pacl[i].acl);
  @@ -260,6 +275,42 @@
                       throw(0,0,0);
                       }
               }
  +            ctx->nacl = i;
  +        }
  +
  +        /* if only blocking ACLs exist, append a wildcard pass-through for IPv4 */
  +        if (!somepass) {
  +            i = ctx->nacl;
  +            ctx->pacl[i].acl = "0.0.0.0";
  +            ctx->pacl[i].not = FALSE;
  +            ctx->pacl[i].prefixlen = 0;
  +            if ((rc = sa_addr_create(&ctx->pacl[i].saa)) != SA_OK) {
  +                log1(ctx, ERROR, "option --acl, create IPv4 pass-through address (internal) failed with \"%s\"", sa_error(rc));
  +                throw(0,0,0);
  +            }
  +            if ((rc = sa_addr_u2a(ctx->pacl[i].saa, "inet://%s:0", ctx->pacl[i].acl)) != SA_OK) {
  +                log2(ctx, ERROR, "option --acl, parsing IPv4 pass-through address (%s) failed with \"%s\"", ctx->pacl[i].acl, sa_error(rc));
  +                throw(0,0,0);
  +            }
  +            i++;
  +            ctx->nacl = i;
  +        }
  +
  +        /* if only blocking ACLs exist, append a wildcard pass-through for IPv6 */
  +        if (!somepass) {
  +            i = ctx->nacl;
  +            ctx->pacl[i].acl = "[::]";
  +            ctx->pacl[i].not = FALSE;
  +            ctx->pacl[i].prefixlen = 0;
  +            if ((rc = sa_addr_create(&ctx->pacl[i].saa)) != SA_OK) {
  +                log1(ctx, ERROR, "option --acl, create IPv6 pass-through address (internal) failed with \"%s\"", sa_error(rc));
  +                throw(0,0,0);
  +            }
  +            if ((rc = sa_addr_u2a(ctx->pacl[i].saa, "inet://%s:0", ctx->pacl[i].acl)) != SA_OK) {
  +                log2(ctx, ERROR, "option --acl, parsing IPv6 pass-through address (%s) failed with \"%s\"", ctx->pacl[i].acl, sa_error(rc));
  +                throw(0,0,0);
  +            }
  +            i++;
               ctx->nacl = i;
           }
       }
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.33 -r1.34 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	4 Feb 2002 14:48:30 -0000	1.33
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	4 Feb 2002 15:43:01 -0000	1.34
  @@ -394,56 +394,6 @@
       (void)option_create(&o, ctx->val); /* FIXME */
       (void)option_parse(o, argc, argv);
       (void)config_context(ctx);
  -    printf("DEBUG: trace #1\n");
  -
  -    /* if no positive ACL exists (option -a) add a wildcard match-all for IPv4 and IPv6 */
  -    bOk = FALSE;
  -    for (i = 0; i < ctx->nacl; i++) {
  -        if (!ctx->pacl[i].not) {
  -            bOk = TRUE;
  -            break;
  -        }
  -    }
  -    if (!bOk) {
  -        if (ctx->nacl >= MAXACLS) {
  -            fprintf(stderr, "%s:Error: Too many ACL (%d) using option -a (no space for additional fake IPv4 ACL)\n", ctx->progname, ctx->nacl);
  -            CU(ERR_EXECUTION);
  -        }
  -        ctx->pacl[ctx->nacl].acl = "0.0.0.0";
  -        ctx->pacl[ctx->nacl].not = FALSE;
  -        ctx->pacl[ctx->nacl].prefixlen = 0;
  -        if ((rc = sa_addr_create(&ctx->pacl[ctx->nacl].saa)) != SA_OK) {
  -            fprintf(stderr, "%s:Error: Creating fake address failed for -a option (%d)\n", 
  -                    ctx->progname, rc);
  -        }
  -        if ((rc = sa_addr_u2a(ctx->pacl[ctx->nacl].saa, "inet://%s:0", ctx->pacl[ctx->nacl].acl)) != SA_OK) {
  -            fprintf(stderr, "%s:Error: Parsing host address failed for \"%s:0\" (%s)\n", 
  -                    ctx->progname, ctx->pacl[ctx->nacl].acl,
  -                    sa_error(rc));
  -            CU(ERR_EXECUTION);
  -        }
  -        ctx->nacl++;
  -    }
  -    if (!bOk) {
  -        if (ctx->nacl >= MAXACLS) {
  -            fprintf(stderr, "%s:Error: Too many ACL (%d) using option -a (no space for additional fake IPv6 ACL)\n", ctx->progname, ctx->nacl);
  -            CU(ERR_EXECUTION);
  -        }
  -        ctx->pacl[ctx->nacl].acl = "[::]";
  -        ctx->pacl[ctx->nacl].not = FALSE;
  -        ctx->pacl[ctx->nacl].prefixlen = 0;
  -        if ((rc = sa_addr_create(&ctx->pacl[ctx->nacl].saa)) != SA_OK) {
  -            fprintf(stderr, "%s:Error: Creating fake address failed for -a option (%d)\n", 
  -                    ctx->progname, rc);
  -        }
  -        if ((rc = sa_addr_u2a(ctx->pacl[ctx->nacl].saa, "inet://%s:0", ctx->pacl[ctx->nacl].acl)) != SA_OK) {
  -            fprintf(stderr, "%s:Error: Parsing host address failed for \"%s:0\" (%s)\n", 
  -                    ctx->progname, ctx->pacl[ctx->nacl].acl,
  -                    sa_error(rc));
  -            CU(ERR_EXECUTION);
  -        }
  -        ctx->nacl++;
  -    }
   
       if (getuid() != ctx->option_uid) {
           if (setuid(ctx->option_uid) == -1) {

From ossp-cvs-owner@ossp.org  Mon Feb  4 22:46:01 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 403BB7650C; Mon,  4 Feb 2002 22:46:01 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc Makefile.in configure.in devtool.func rc_pcre....
Message-Id: <20020204214601.403BB7650C@mail.ossp.org>
Date: Mon,  4 Feb 2002 22:46:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   04-Feb-2002 22:46:01
  Branch: HEAD                             Handle: 2002020421460000

  Modified files:
    ossp-pkg/rc             Makefile.in configure.in devtool.func rc_pcre.c

  Log:
    Changed to rc_config.h.in and some other build configuration corrections.

  Summary:
    Revision    Changes     Path
    1.3         +2  -2      ossp-pkg/rc/Makefile.in
    1.6         +17 -6      ossp-pkg/rc/configure.in
    1.4         +3  -3      ossp-pkg/rc/devtool.func
    1.2         +1  -1      ossp-pkg/rc/rc_pcre.c
  ____________________________________________________________________________

  Index: ossp-pkg/rc/Makefile.in
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 Makefile.in
  --- ossp-pkg/rc/Makefile.in	30 Jan 2002 17:29:15 -0000	1.2
  +++ ossp-pkg/rc/Makefile.in	4 Feb 2002 21:46:00 -0000	1.3
  @@ -87,11 +87,11 @@
   
   distclean: clean
   	-$(RM) config.log config.status config.cache
  -	-$(RM) Makefile config.h
  +	-$(RM) Makefile rc_config.h
   	-$(RM) libtool
   
   realclean: distclean
  -	-$(RM) configure config.h.in
  +	-$(RM) configure rc_config.h.in
   	-$(RM) shtool
   	-$(RM) ltmain.sh libtool.m4 config.guess config.sub
   
  Index: ossp-pkg/rc/configure.in
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 configure.in
  --- ossp-pkg/rc/configure.in	30 Jan 2002 17:29:15 -0000	1.5
  +++ ossp-pkg/rc/configure.in	4 Feb 2002 21:46:00 -0000	1.6
  @@ -42,7 +42,7 @@
   
   dnl Process this file with autoconf
   AC_INIT(rc.h)
  -AC_CONFIG_HEADER(config.h)
  +AC_CONFIG_HEADER(rc_config.h)
   AC_LANG_C
   
   dnl Checks basic requirements
  @@ -68,14 +68,25 @@
                   dmalloc, dmalloc_debug, dmalloc.h,
                   AC_DEFINE(DMALLOC))
   
  +dnl Check for OSSP popt library
  +AC_CHECK_EXTLIB([OSSP popt],
  +                popt, popt_getcontext, popt.h,
  +                [SUBDIR_POPT=""],
  +                [SUBDIR_POPT="rc_popt"
  +                 CPPFLAGS="$CPPFLAGS -Irc_popt"
  +                 CFLAGS="$CFLAGS -Irc_popt"
  +                 LDFLAGS="$LDFLAGS -Lrc_popt/.libs"
  +                 LIBS_EXTRA="$LIBS_EXTRA -lpopt"])
  +AC_SUBST(SUBDIR_EX)
  +
   dnl Check for OSSP ex library
   AC_CHECK_EXTLIB([OSSP ex],
                   ex, __ex_ctx, ex.h,
                   [SUBDIR_EX=""],
  -                [SUBDIR_EX="lib_ex"
  -                 CPPFLAGS="$CPPFLAGS -Ilib_ex"
  -                 CFLAGS="$CFLAGS -Ilib_ex"
  -                 LDFLAGS="$LDFLAGS -Llib_ex/.libs"
  +                [SUBDIR_EX="rc_ex"
  +                 CPPFLAGS="$CPPFLAGS -Irc_ex"
  +                 CFLAGS="$CFLAGS -Irc_ex"
  +                 LDFLAGS="$LDFLAGS -Lrc_ex/.libs"
                    LIBS_EXTRA="$LIBS_EXTRA -lex"])
   AC_SUBST(SUBDIR_EX)
   
  @@ -105,7 +116,7 @@
   LIBS="$LIBS $LIBS_EXTRA"
   
   dnl Call other configure scripts
  -AC_CONFIG_SUBDIRS([@SUBDIR_EX@ $SUBDIR_STR $SUBDIR_VAR])
  +AC_CONFIG_SUBDIRS([$SUBDIR_EX $SUBDIR_STR $SUBDIR_VAR $SUBDIR_POPT])
   
   dnl Make all the necessary Makefiles
   #AC_CONFIG_FILES(Makefile)
  Index: ossp-pkg/rc/devtool.func
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.func
  --- ossp-pkg/rc/devtool.func	23 Jan 2002 16:51:54 -0000	1.3
  +++ ossp-pkg/rc/devtool.func	4 Feb 2002 21:46:00 -0000	1.4
  @@ -30,7 +30,7 @@
       case $tool in
           autoconf )
               autoconf_version=`devtool_require autoconf --version 4 "$1" "$2"`
  -            echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
  +            echo "generating (GNU Autoconf $autoconf_version): configure rc_config.h.in"
               autoconf
               autoheader 2>&1 | grep -v "is unchanged"
               ;;
  @@ -56,8 +56,8 @@
       shift
       case $tool in
           autoconf )
  -            echo "removing: configure config.h.in"
  -            rm -f configure config.h.in
  +            echo "removing: configure rc_config.h.in"
  +            rm -f configure rc_config.h.in
               ;;
           libtool )
               echo "removing: ltmain.sh libtool.m4 config.guess config.sub"
  Index: ossp-pkg/rc/rc_pcre.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 rc_pcre.c
  --- ossp-pkg/rc/rc_pcre.c	28 Jan 2002 20:58:37 -0000	1.1
  +++ ossp-pkg/rc/rc_pcre.c	4 Feb 2002 21:46:00 -0000	1.2
  @@ -42,7 +42,7 @@
      ----------------------------------------------------------------------------- */
   
   #ifdef HAVE_CONFIG_H
  -#include "config.h"
  +#include "rc_config.h"
   #endif
   
   #include <ctype.h>

From ossp-cvs-owner@ossp.org  Mon Feb  4 22:46:58 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0F6007650C; Mon,  4 Feb 2002 22:46:58 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc devtool.conf
Message-Id: <20020204214658.0F6007650C@mail.ossp.org>
Date: Mon,  4 Feb 2002 22:46:58 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   04-Feb-2002 22:46:57
  Branch: HEAD                             Handle: 2002020421465700

  Modified files:
    ossp-pkg/rc             devtool.conf

  Log:
    Library name corrections.

  Summary:
    Revision    Changes     Path
    1.5         +22 -18     ossp-pkg/rc/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/rc/devtool.conf
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 devtool.conf
  --- ossp-pkg/rc/devtool.conf	30 Jan 2002 17:29:15 -0000	1.4
  +++ ossp-pkg/rc/devtool.conf	4 Feb 2002 21:46:57 -0000	1.5
  @@ -7,33 +7,37 @@
       @autogen libtool  1.4.2 "1.4*"
       @autogen autoconf 2.52  "2.5.*"
   
  -    echo "===> lib_ex (devtool autogen)"
  -    (cd lib_ex && ./devtool autogen)
  -    echo "<=== lib_ex"
  -    echo "===> lib_str (devtool autogen)"
  -    (cd lib_str && ./devtool autogen)
  -    echo "<=== lib_str"
  -    echo "===> lib_var (devtool autogen)"
  -    (cd lib_var && ./devtool autogen)
  -    echo "<=== lib_var"
  +    echo "===> rc_ex (devtool autogen)"
  +    (cd rc_ex && ./devtool autogen)
  +    echo "<=== rc_ex"
  +    echo "===> rc_str (devtool autogen)"
  +    (cd rc_str && ./devtool autogen)
  +    echo "<=== rc_str"
  +    echo "===> rc_popt (devtool autogen)"
  +    (cd rc_popt && ./devtool autogen)
  +    echo "<=== rc_popt"
  +    echo "===> rc_var (devtool autogen)"
  +    (cd rc_var && ./devtool autogen)
  +    echo "<=== rc_var"
   
   %autoclean
       @autoclean shtool
       @autoclean libtool
       @autoclean autoconf
   
  -    echo "===> lib_ex (devtool autoclean)"
  -    (cd lib_ex && ./devtool autoclean)
  -    echo "<=== lib_ex"
  -    echo "===> lib_str (devtool autoclean)"
  -    (cd lib_str && ./devtool autoclean)
  -    echo "<=== lib_str"
  -    echo "===> lib_var (devtool autoclean)"
  -    (cd lib_var && ./devtool autoclean)
  -    echo "<=== lib_var"
  +    echo "===> rc_ex (devtool autoclean)"
  +    (cd rc_ex && ./devtool autoclean)
  +    echo "<=== rc_ex"
  +    echo "===> rc_str (devtool autoclean)"
  +    (cd rc_str && ./devtool autoclean)
  +    echo "<=== rc_str"
  +    echo "===> rc_var (devtool autoclean)"
  +    (cd rc_var && ./devtool autoclean)
  +    echo "<=== rc_var"
   
   %configure
       ./configure \
  +        --cache-file=config.cache \
           --prefix=/tmp/rc \
           "$@"
   

From ossp-cvs-owner@ossp.org  Mon Feb  4 22:48:23 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E30897650C; Mon,  4 Feb 2002 22:48:22 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.c rc.h rc_p.h rc_strings.h
Message-Id: <20020204214822.E30897650C@mail.ossp.org>
Date: Mon,  4 Feb 2002 22:48:22 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   04-Feb-2002 22:48:22
  Branch: HEAD                             Handle: 2002020421482200

  Added files:
    ossp-pkg/rc             rc_strings.h
  Modified files:
    ossp-pkg/rc             rc.c rc.h rc_p.h

  Log:
    First cut at a popt enabled configuration.

  Summary:
    Revision    Changes     Path
    1.4         +127 -47    ossp-pkg/rc/rc.c
    1.4         +13 -2      ossp-pkg/rc/rc.h
    1.2         +31 -0      ossp-pkg/rc/rc_p.h
    1.1         +66 -0      ossp-pkg/rc/rc_strings.h
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 rc.c
  --- ossp-pkg/rc/rc.c	30 Jan 2002 17:29:15 -0000	1.3
  +++ ossp-pkg/rc/rc.c	4 Feb 2002 21:48:22 -0000	1.4
  @@ -28,70 +28,150 @@
   */
   
   #include <stdio.h>
  -#include <unistd.h>
  -#include <fcntl.h>
   
   #include "rc.h"
  -#include "ex.h"     /* OSSP ex exception library */
  -#include "str.h"    /* OSSP str string library   */
  -#include "var.h"    /* OSSP var variable library */
  +#include "rc_p.h"       /* FIXME, remove when options moves */
  +#include "rc_strings.h" /* FIXME, remove when options moves */
   
  +/* Third party headers for libraries linked in */
  +#include "ex.h"         /* OSSP ex exception library */
  +#include "str.h"        /* OSSP str string library   */
  +#include "var.h"        /* OSSP var variable library */
  +#include "popt.h"       /* OSSP popt options library */
   
  -void usage(char *szProgname)
  +
  +static void die(rc_return_t rv)
  +{
  +    fprintf(stderr, "OSSP rc: Error, dying.\n");
  +    exit((int)rv);
  +}
  +
  +void usage(popt_context optCon, rc_return_t rv, char *szError)
  +{
  +    popt_printusage(optCon, stderr, 0);
  +    if (szError)
  +        fprintf(stderr, "%s\n", szError);
  +    exit((int)rv);
  +}
  +
  +/*void usage(char *szProgname)
   {
  +    popt_peekarg(optCon) == NULL;
       fprintf(stdout, "Usage: %s [-v|--verbose] [-h|--help]\n\
                        [-p|--print] [-e|--eval] [-c|--config]\
                        [-q|--query] [-r|--raw]\n<package>\
                        <command> [<command> ...]", szProgname);
  -}
  -
  -int main(int argc, char *argv[])
  -{
  -    int nOpt      = 0; /* holds getopt(3) return value */
  -    int nFile     = 0; /* for checking file existence  */
  +}*/
   
  -    int bVerbose = 0; /* v */
  -    int bHelp    = 0; /* h */
  -    int bPrint   = 0; /* p */
  -    int bEval    = 0; /* e */
  -    int bConfig  = 0; /* c */
  -    int bQuery   = 0; /* q */
  -    int bRaw     = 0; /* r */
  -
  -    while ((nOpt = getopt(argc, argv, "vhpecqr:")) != -1)
  -        switch (nOpt) {
  -            case 'v':
  -                bVerbose = TRUE;
  -                break;
  +int main(int argc, char *argv[]) {
  +    char cOpt;           /* For argument parsing            */
  +    int  iBufpos = 0;    /* For tracking options            */
  +    char *szCLIBuf;    
  +    char szFuncfile;     /* Rc.func file name and location  */
  +    int  nIter;
  +    char pcBuf[BUFSIZ+1];
  +    popt_context optCon; /* Context for parsing options     */
  +    rc_return_t nRet;
  +
  +    struct popt_option optionsTable[] = {
  +        /* Long options with short keys but no arguments */
  +        { "usage",   '?', POPT_ARG_NONE,   0, RC_USE_VAL, RC_USE_DESC, NULL },
  +        { "debug",   'd', POPT_ARG_NONE,   0, RC_DBG_VAL, RC_DBG_DESC, NULL },
  +        { "version", 'V', POPT_ARG_NONE,   0, RC_VER_VAL, RC_VER_DESC, NULL },
  +        { "eval",    'e', POPT_ARG_NONE,   0, RC_EVL_VAL, RC_EVL_DESC, NULL },
  +        { "help",    'h', POPT_ARG_NONE,   0, RC_HLP_VAL, RC_HLP_DESC, NULL },
  +        { "info",    'i', POPT_ARG_NONE,   0, RC_INF_VAL, RC_INF_DESC, NULL },
  +        { "labels",  'l', POPT_ARG_NONE,   0, RC_LBL_VAL, RC_LBL_DESC, NULL },
  +        { "print",   'p', POPT_ARG_NONE,   0, RC_PRN_VAL, RC_PRN_DESC, NULL },
  +        { "silent",  's', POPT_ARG_NONE,   0, RC_SIL_VAL, RC_SIL_DESC, NULL },
  +        { "raw",     'r', POPT_ARG_NONE,   0, RC_RAW_VAL, RC_RAW_DESC, NULL },
  +        { "verbose", 'v', POPT_ARG_NONE,   0, RC_VRB_VAL, RC_VRB_DESC, NULL },
  +        { "exec",    'x', POPT_ARG_NONE,   0, RC_EXC_VAL, RC_EXC_DESC, NULL },
  +                                              
  +        /* Single argument long options with short keys */
  +        { "locate",  'L', POPT_ARG_STRING, 0, RC_LOC_VAL, RC_LOC_DESC, "regx" },
  +        { "conf",    'c', POPT_ARG_STRING, 0, RC_CNF_VAL, RC_CNF_DESC, "path" },
  +        { "func",    'f', POPT_ARG_STRING, 0, RC_FNC_VAL, RC_FNC_DESC, "path" },
  +        { "query",   'q', POPT_ARG_STRING, 0, RC_QRY_VAL, RC_QRY_DESC, "varx" },
  +        { "tmp",     't', POPT_ARG_STRING, 0, RC_TMP_VAL, RC_TMP_DESC, "path" },
  +
  +        /* Single argument long options without short keys */
  +        { "RequireOwner",      0, POPT_ARG_STRING, 0,\
  +            RC_OWN_VAL, RC_OWN_DESC, "user"  },
  +        { "RequireGroup",      0, POPT_ARG_STRING, 0,\
  +            RC_GRP_VAL, RC_GRP_DESC, "group" },
  +        { "RequireUmask",      0, POPT_ARG_INT,    0,\
  +            RC_MSK_VAL, RC_MSK_DESC, "umask" },
  +        { "ParseEnvAss",       0, POPT_ARG_STRING, 0,\
  +            RC_ASS_VAL, RC_ASS_DESC, "regx" },
  +        { "ParseSectionDef",   0, POPT_ARG_STRING, 0,\
  +            RC_DEF_VAL, RC_DEF_DESC, "regx" },
  +        { "ParseSectionRef",   0, POPT_ARG_STRING, 0,\
  +            RC_REF_VAL, RC_REF_DESC, "regx" },
  +        { "ParseSectionParam", 0, POPT_ARG_STRING, 0,\
  +            RC_PRM_VAL, RC_PRM_DESC, "regx" },
  +        { "ParseTerminal",     0, POPT_ARG_STRING, 0,\
  +            RC_TRM_VAL, RC_TRM_DESC, "regx" },
  +        { "NameConfig",        0, POPT_ARG_STRING, 0,\
  +            RC_NCF_VAL, RC_NCF_DESC, "name" },
  +        { "NameCommon",        0, POPT_ARG_STRING, 0,\
  +            RC_CMN_VAL, RC_CMN_DESC, "name" },
  +        { "NameDefault",       0, POPT_ARG_STRING, 0,\
  +            RC_DFL_VAL, RC_DFL_DESC, "name" },
  +        { "NameError",         0, POPT_ARG_STRING, 0,\
  +            RC_ERR_VAL, RC_ERR_DESC, "name" },
  +
  +        POPT_AUTOHELP
  +        { NULL, 0, 0, NULL, 0 }
  +    };
  +
  +    optCon = popt_getcontext(NULL, argc, (const char **)argv, optionsTable, 0);
  +    popt_setotheroptionhelp(optCon,
  +        "[OPTIONS]* [rcfile] [[section [args]] ...]");
  +
  +    if (argc < 2) {
  +        popt_printusage(optCon, stderr, 0);
  +        exit(1);
  +    }
  +
  +    /* Now do options processing */
  +    while ((cOpt = popt_getnextopt(optCon)) >= 0) {
  +        switch (cOpt) {
               case 'h':
  -                bHelp    = TRUE;
  +                pcBuf[iBufpos++] = 'h';
                   break;
  -            case 'p':
  -                bPrint   = TRUE;
  +            case 'V':
  +                pcBuf[iBufpos++] = 'V';
                   break;
  -            case 'e':
  -                bEval    = TRUE;
  -                break;
  -            case 'c':
  -                bConfig  = TRUE;
  +            case 'i':
  +                pcBuf[iBufpos++] = 'i';
                   break;
               case 'q':
  -                bQuery   = TRUE;
  -                break;
  -            case 'r':
  -                bRaw     = TRUE;
  +                pcBuf[iBufpos++] = 'q';
                   break;
  -            case '?':
  -            default:
  -                usage(*argv);
           }
  +    }
   
  -    argc -= optind;
  -    argv += optind;
  -
  -    /* check existence of file input to the run-command */
  -    if ((nFile = open(optarg, O_RDONLY, 0)) < 0)
  -        err(1, "%s", optarg);
  +    szCLIBuf = (char *)popt_getarg(optCon);
  +    if ((szCLIBuf == NULL))
  +        usage(optCon, RC_ERR_ARG, "Specify at least one rcfile and section.");
  +
  +    if (cOpt < -1) {
  +        /* An error occurred during option processing */
  +        fprintf(stderr, "%s: %s\n",
  +            popt_badoption(optCon, POPT_BADOPTION_NOALIAS),
  +            popt_strerror(cOpt));
  +        die(nRet);
  +    }
  +
  +    /* Print out options, szCLIBuf chosen */
  +    printf("Options chosen: ");
  +    for (nIter = 0; nIter < iBufpos ; nIter++)
  +        printf("-%c ", pcBuf[nIter]);
  +    if (szFuncfile)
  +        fprintf(stderr, "-f %s ", szFuncfile);
  +    fprintf(stderr, "\nRun these commands: %s\n", szCLIBuf);
   
  -    return 0; /* success */
  +    popt_freecontext(optCon);
  +    exit(0);
   }
  Index: ossp-pkg/rc/rc.h
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 rc.h
  --- ossp-pkg/rc/rc.h	22 Jan 2002 22:53:47 -0000	1.3
  +++ ossp-pkg/rc/rc.h	4 Feb 2002 21:48:22 -0000	1.4
  @@ -43,8 +43,19 @@
   #define TRUE (!FALSE)
   #endif
   
  +/* RC return codes */
  +typedef enum {
  +    RC_OK,      /* Success                  */
  +    RC_ERR_ARG, /* Argument error           */
  +    RC_ERR_USE, /* Usage error              */
  +    RC_ERR_MEM, /* Memory error             */
  +    RC_ERR_SYS, /* System error (see errno) */
  +    RC_ERR_IO,  /* Input/output error       */
  +    RC_ERR_FMT, /* Formatting error         */
  +    RC_ERR_INT, /* Internal error           */
  +} rc_return_t;
   
  -rc_result_t rc_Err              (void);
  +/*rc_result_t rc_Err              (void);
   rc_result_t rc_Warn             (void);
   rc_result_t rc_PathAppend       (int bExists, char **pszPaths);
   rc_result_t rc_PathPrepend      (int bExists, char **pszPaths);
  @@ -53,6 +64,6 @@
   rc_result_t rc_ServiceState     (char *szService, char **pszServState);
   rc_result_t rc_TmpDirGen        (char *szProgram);
   rc_result_t rc_TmpDirFile       (char *szProgram, char *szFilename, *szVar);
  -rc_result_t rc_TmpDirDel        (char *szProgram);
  +rc_result_t rc_TmpDirDel        (char *szProgram);*/
   
   #endif /* __OSSPRC_H__ */
  Index: ossp-pkg/rc/rc_p.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 rc_p.h
  --- ossp-pkg/rc/rc_p.h	8 Jan 2002 15:47:11 -0000	1.1
  +++ ossp-pkg/rc/rc_p.h	4 Feb 2002 21:48:22 -0000	1.2
  @@ -36,4 +36,35 @@
   #include <sys/time.h>
   #endif
   
  +/* Option values used with popt */
  +#define RC_USE_VAL  32
  +#define RC_DBG_VAL  33
  +#define RC_VER_VAL  34
  +#define RC_EVL_VAL  35
  +#define RC_HLP_VAL  36
  +#define RC_INF_VAL  37
  +#define RC_LBL_VAL  38
  +#define RC_PRN_VAL  39
  +#define RC_SIL_VAL  40
  +#define RC_RAW_VAL  41
  +#define RC_VRB_VAL  42
  +#define RC_EXC_VAL  43
  +#define RC_LOC_VAL  44
  +#define RC_CNF_VAL  45
  +#define RC_FNC_VAL  46
  +#define RC_QRY_VAL  47
  +#define RC_TMP_VAL  48
  +#define RC_OWN_VAL  49
  +#define RC_GRP_VAL  50
  +#define RC_MSK_VAL  51
  +#define RC_ASS_VAL  52
  +#define RC_DEF_VAL  53
  +#define RC_REF_VAL  54
  +#define RC_PRM_VAL  55
  +#define RC_TRM_VAL  56
  +#define RC_NCF_VAL  57
  +#define RC_CMN_VAL  58
  +#define RC_DFL_VAL  59
  +#define RC_ERR_VAL  60
  +
   #endif /* __OSSPRC_P_H__ */
  Index: ossp-pkg/rc/rc_strings.h
  ============================================================
  $ cvs update -p -r1.1 rc_strings.h
  /*  rc - OSSP Run-command processor
  **  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2002 Ralf S. Engelschall
  **
  **  This file is part of OSSP rc, a portable Run-command processor
  **  which can be found at http://www.ossp.org/pkg/rc/
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  rc_strings.h: Run-command processor ANSI C public header file
  */
  
  #ifndef __OSSPRC_STRINGS_H__
  #define __OSSPRC_STRINGS_H__
  
  /* Option descriptions used with popt */
  #define RC_USE_DESC "Print a short usage summary, then exit."
  #define RC_DBG_DESC "Don't remove temporary files, and write debug messages to stderr."
  #define RC_VER_DESC "Print the version and copyright, then exit."
  #define RC_EVL_DESC "Output the command(s) in a format suitable for shell evaluation, but do not run them."
  #define RC_HLP_DESC "Print this help, then exit."
  #define RC_INF_DESC "Print a comprehensive summary of the rc environment."
  #define RC_LBL_DESC "Learn what section labels a rcfile has."
  #define RC_PRN_DESC "Output the command(s) in a format suitable for human reading, but do not run them."
  #define RC_SIL_DESC "Be silent, and disable output to stdout."
  #define RC_RAW_DESC "Output text using no terminal control sequences."
  #define RC_VRB_DESC "Output text verbosely."
  #define RC_EXC_DESC "Execute the commands through an interpreter."
  
  #define RC_LOC_DESC "Specifiy the location(s) to search for rcfiles, and ignore parts according to the regex."
  #define RC_CNF_DESC "Specify the location(s) of the configuration files."
  #define RC_FNC_DESC "Specify the single location of the extra functions file."
  #define RC_QRY_DESC "Query the effective value of configuration variables."
  #define RC_TMP_DESC "Specify the single location for temporary files."
  
  #define RC_OWN_DESC "Username used to verify run command rights at runtime."
  #define RC_GRP_DESC "Group name used to verify run command rights at runtime."
  #define RC_MSK_DESC "Umask used to verify run command rights at runtime."
  #define RC_ASS_DESC "Regex used to match name value assignments in a rcfile."
  #define RC_DEF_DESC "Regex used to match a section label in a rcfile."
  #define RC_REF_DESC "Regex used to match a section reference in a rcfile."
  #define RC_PRM_DESC "Regex used to match the parameter(s) of a section label."
  #define RC_TRM_DESC "Regex used to match the terminal(s) in a rcfile."
  #define RC_NCF_DESC "Name of the config section in a rcfile."
  #define RC_CMN_DESC "Name of the common section in a rcfile."
  #define RC_DFL_DESC "Name of the default section in a rcfile."
  #define RC_ERR_DESC "Name of the error section in a rcfile."
  
  #endif /* __OSSPRC_STRINGS_H__ */

From ossp-cvs-owner@ossp.org  Mon Feb  4 22:52:33 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 550E67650C; Mon,  4 Feb 2002 22:52:32 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc_design.ps rc_design.xmi
Message-Id: <20020204215232.550E67650C@mail.ossp.org>
Date: Mon,  4 Feb 2002 22:52:32 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   04-Feb-2002 22:52:32
  Branch: HEAD                             Handle: 2002020421523100

  Added files:
    ossp-pkg/rc             rc_design.ps rc_design.xmi

  Log:
    UML model for rc design.

  Summary:
    Revision    Changes     Path
    1.1         +1359 -0    ossp-pkg/rc/rc_design.ps
    1.1         +1337 -0    ossp-pkg/rc/rc_design.xmi
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc_design.ps
  ============================================================
  $ cvs update -p -r1.1 rc_design.ps
  %!PS-Adobe-3.0
  %%Pages: (atend)
  %%BoundingBox: 33 519 565 802
  %%HiResBoundingBox: 33.611426 519.249170 564.928076 801.482349
  %...................................
  %%Creator: AFPL Ghostscript 650 (pswrite)
  %%CreationDate: 2002/02/04 15:40:40
  %%DocumentData: Clean7Bit
  %%LanguageLevel: 2
  %%EndComments
  %%BeginProlog
  % This copyright applies to everything between here and the %%EndProlog:
  % Copyright (C) 2000 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
  %%BeginResource: procset GS_pswrite_2_0_1001
  /GS_pswrite_2_0_1001 80 dict dup begin
  /setpagesize{1 index where{pop cvx exec pop pop}{pop /setpagedevice where
  {pop 2 array astore 1 dict dup/PageSize 4 -1 roll put setpagedevice}
  {pop/setpage where{pop pageparams 3{exch pop}repeat setpage}
  {pop pop}ifelse}ifelse}ifelse}bind def
  /!{bind def}bind def/#{load def}!/N/counttomark #
  /rG{3{3 -1 roll 255 div}repeat setrgbcolor}!/G{255 div setgray}!/K{0 G}!
  /r6{dup 3 -1 roll rG}!/r5{dup 3 1 roll rG}!/r3{dup rG}!
  /w/setlinewidth #/J/setlinecap #
  /j/setlinejoin #/M/setmiterlimit #/d/setdash #/i/setflat #
  /m/moveto #/l/lineto #/c/rcurveto #/h{p closepath}!/H{P closepath}!
  /lx{0 rlineto}!/ly{0 exch rlineto}!/v{0 0 6 2 roll c}!/y{2 copy c}!
  /re{4 -2 roll m exch dup lx exch ly neg lx h}!
  /^{3 index neg 3 index neg}!
  /P{N 0 gt{N -2 roll moveto p}if}!
  /p{N 2 idiv{N -2 roll rlineto}repeat}!
  /f{P fill}!/f*{P eofill}!/s{H stroke}!/S{P stroke}!
  /q/gsave #/Q/grestore #/rf{re fill}!
  /Y{P clip newpath}!/Y*{P eoclip newpath}!/rY{re Y}!
  /|={pop exch 4 1 roll 3 array astore cvx exch 1 index def exec}!
  /|{exch string readstring |=}!
  /+{dup type/nametype eq{2 index 7 add -3 bitshift 2 index mul}if}!
  /@/currentfile #/${+ @ |}!
  /B{{2 copy string{readstring pop}aload pop 4 array astore cvx
  3 1 roll}repeat pop pop true}!
  /Ix{[1 0 0 1 11 -2 roll exch neg exch neg]exch}!
  /,{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
  /Ic{exch Ix false 3 colorimage}!
  /F{/Columns counttomark 3 add -2 roll/Rows exch/K -1/BlackIs1 true>>
  /CCITTFaxDecode filter}!/FX{<</EndOfBlock false F}!
  /X{/ASCII85Decode filter}!/@X{@ X}!/&2{2 index 2 index}!
  /@F{@ &2<<F}!/@C{@X &2 FX}!
  /$X{+ @X |}!/&4{4 index 4 index}!/$F{+ @ &4<<F |}!/$C{+ @X &4 FX |}!
  /IC{3 1 roll 10 dict begin 1{/ImageType/Interpolate/Decode/DataSource
  /ImageMatrix/BitsPerComponent/Height/Width}{exch def}forall
  currentdict end image}!
  end readonly def
  %%EndResource
  /pagesave null def
  %%EndProlog
  %%Page: 1 1
  %%BeginPageSetup
  GS_pswrite_2_0_1001 begin
  595 842 /a4 setpagesize
  /pagesave save store 100 dict begin
  0.1 0.1 scale
  %%EndPageSetup
  gsave mark
  Q q
  320 5176.38 5345.4 2896 re
  Y
  255 G
  3358.73 7736.27 441.996 271.644 re
  f*
  4.60413 w
  K
  3358.73 7736.27 441.996 271.644 re
  S
  255 G
  3358.73 7915.83 441.996 92.0825 re
  f*
  K
  3358.73 7915.83 441.996 92.0825 re
  S
  3551 7948 24 30 /5U
  $C
  -EQK^f3eRXs0)HUZ/L)9"6%#gs8W,&pe)@'-i~>
  ,
  3579 7947 26 32 /1F
  $C
  1_L@A*$RLi6+RBfhO_2[^X36)s8Vi^bticdXgG4,@>1se'JQ0~>
  ,
  255 G
  3358.73 7823.75 441.996 92.0825 re
  f*
  K
  3358.73 7823.75 441.996 92.0825 re
  S
  255 G
  3358.73 7731.67 441.996 92.0825 re
  f*
  K
  3358.73 7731.67 441.996 92.0825 re
  S
  255 G
  4611.05 7639.59 704.432 345.31 re
  f*
  K
  4611.05 7639.59 704.432 345.31 re
  S
  255 G
  4611.05 7911.23 704.432 73.666 re
  f*
  K
  4611.05 7911.23 704.432 73.666 re
  S
  4811 7925 20 20 /5Y
  $C
  $47In";DtTJq=.l@;`p!%N'.miJ.gqE8eS~>
  ,
  4835 7925 5Y ,
  4859 7924 24 32 /1J
  $C
  4q\EK*$RRk60SU<>sJ@HKV;rXB>NO1#Sdo(8Q:<<3^<X[HJ7"ZQ&;sX'E~>
  ,
  4887 7925 4 30 /6C
  $X
  nF5r:nF5r:nF5r:nF5r:nF5r:nF-DX!!$tWE,Y~>
  ,
  4897 7925 17 23 /1N
  $C
  -EPVps8W-!s8V!VCC#tIj6]5gTE~>
  ,
  4918 7916 20 32 /6G
  $C
  3$ef)M;t7]p@ZGO((bd1-$W1g:;)/Ws7a;%Y,jHgm!B+U~>
  ,
  4943 7925 4 30 /1R
  $X
  nF5r:nF5r:nF5r:nF5r:nF5r:nF5r:nF5r:nF-~>
  ,
  4951 7924 21 24 /6K
  $C
  4ubjWU/pJ)o^nXGa4DK=eutC#s8-MICbV-3[1"G~>
  ,
  4973 7924 11 29 /1V
  $X
  #J^l.+5e1?*WR5]*WR5]*WR5]*WR5]*WR5]*WR5]*WR5]*WR5]s5<q8s54pu*WR5]*WR5]*WQ~>
  ,
  4985 7924 20 24 /6O
  $C
  4=hW>d49H-])$a1e,TIHYJ"k_Q*@\He1dN~>
  ,
  5010 7925 1N ,
  5032 7924 21 21 /1Z
  $C
  P@"QM@,SqW*#LYD_[IM5,mY2-TRqh(&6LJ7-i~>
  ,
  5056 7924 1Z ,
  255 G
  4611.05 7819.15 704.432 92.0825 re
  f*
  K
  4611.05 7819.15 704.432 92.0825 re
  S
  4825 7850 1F ,
  4854 7850 6O ,
  4879 7851 1N ,
  4899 7851 11 30 /6S
  $X
  *WR5]*WR5]*WR5]*WR5]*WR5]*WR5]*WR5]*WR5]*WR5]*WZ5us5<q8*WR5]*WR5]*rmD@&)[QJ~>
  ,
  4912 7851 6C ,
  4921 7842 6G ,
  4945 7850 18 23 /2D
  $C
  2E4CB:IK.]62.SWs8W-!s8W*~>
  ,
  4969 7851 11 23 /6W
  $X
  n,VqXn,VqXn,VqXn,VqXn,VqXn,VqXn,VqXn,W4`p]13ls1nBepYbZ$!Pe~>
  ,
  4981 7850 20 24 /2H
  $C
  2Fj-#WbRAmKqS9ks51Q3Qa+HP_FS<b*r#\MCaESqTr7~>
  ,
  5002 7850 1V ,
  5016 7851 6C ,
  5024 7850 6O ,
  5049 7851 1N ,
  255 G
  4615.65 7902.02 695.224 13.8123 re
  f*
  4615.65 7902.02 695.224 13.8123 re
  S
  4611.05 7727.07 704.432 92.0825 re
  f*
  K
  4611.05 7727.07 704.432 92.0825 re
  S
  4631 7769 10 3 /7A
  $X
  s1nZMs1e~>
  ,
  4645 7758 2D ,
  4669 7759 1N ,
  4691 7759 6C ,
  4700 7750 20 32 /2L
  $C
  2*_,e%ghLaQ&Pngl.>c]s8TM$m9A<Q'+YOg-N~>
  ,
  4724 7758 2D ,
  4746 7758 6K ,
  4772 7759 4 30 /7E
  $X
  nF5r:nF5r:nF5r:nF5r:nF5r:nF5r:nF5r:nF-~>
  ,
  4782 7759 1N ,
  4803 7758 18 24 /2P
  $C
  3%Q3:d49H-[<g^F$@F*3TW!c*$O`D/GQ-5e`EKY~>
  ,
  4823 7758 1V ,
  4836 7758 2H ,
  4860 7759 1N ,
  4882 7758 19 24 /7I
  $C
  4=hjTM-Ih+f@+NcEW?'EHM=8Mg=o6=>-OY~>
  ,
  4902 7758 6K ,
  4941 7759 4 22 /2V
  $X
  nF5r:zzz!!)NXnF-~>
  ,
  4961 7758 1F ,
  4990 7758 6O ,
  5015 7759 1N ,
  5035 7759 6S ,
  5048 7759 6C ,
  5057 7750 6G ,
  5081 7758 2D ,
  5105 7759 6W ,
  5117 7758 2H ,
  5138 7758 1V ,
  5152 7759 6C ,
  5160 7758 6O ,
  5185 7759 1N ,
  255 G
  4611.05 7634.98 704.432 92.0825 re
  f*
  K
  4611.05 7634.98 704.432 92.0825 re
  S
  4631 7666 20 21 /7O
  $C
  1r'(jjO?#3V>pSq~>
  ,
  4656 7666 1F ,
  4685 7666 6O ,
  4710 7667 1N ,
  4730 7667 6S ,
  4743 7667 6C ,
  4751 7658 6G ,
  4775 7666 2D ,
  4799 7667 6W ,
  4812 7666 2H ,
  4833 7666 1V ,
  4847 7667 6C ,
  4855 7666 6O ,
  4880 7667 1N ,
  4903 7658 9 39 /2Z
  $X
  !It7P#6556%KIOM)ur)$49.>@GQ;sgGQ;sgp]0d`n,VqXn,VqXn,VqXn,VqXp]1'hGQ;sgGQ9]'
  49.JD)uq#[%KHt=#64i+"+U~>
  ,
  4915 7658 10 39 /0D
  $X
  ?iY-G2uko<)uprY*WQZM%fd+?#65!Z#Cm&0#J^GW"2G#S"2G#S"2G#S"2G#S#J^S[#Cm&0#Cm$Z
  %fd+?%KIOM)uqqu2ummt?iU~>
  ,
  255 G
  4053.95 7114.72 441.996 271.644 re
  f*
  K
  4053.95 7114.72 441.996 271.644 re
  S
  255 G
  4053.95 7294.28 441.996 92.0825 re
  f*
  K
  4053.95 7294.28 441.996 92.0825 re
  S
  4173 7327 20 30 /3D
  $C
  -EmILs8W'`L]1Rds8W'c6*Ge~>
  ,
  4196 7327 6C ,
  4207 7327 1R ,
  4214 7326 6K ,
  4238 7326 29 32 /0H
  $C
  -P?\G%Z'Z%+Pe0r-e!4O5O3I\s8Vf,p&2#YCMbS1.g?Wk<YQBI~>
  ,
  4270 7318 20 32 /3H
  $C
  -EmILr4r.>VhqP75As?dl2Ue_fD=4g/Z"amq[8.O~>
  ,
  4291 7326 1V ,
  4305 7327 6C ,
  4313 7326 6O ,
  4338 7327 1N ,
  255 G
  4053.95 7202.19 441.996 92.0825 re
  f*
  K
  4053.95 7202.19 441.996 92.0825 re
  S
  255 G
  4053.95 7110.11 441.996 92.0825 re
  f*
  K
  4053.95 7110.11 441.996 92.0825 re
  S
  255 G
  4611.05 7114.72 441.996 271.644 re
  f*
  K
  4611.05 7114.72 441.996 271.644 re
  S
  255 G
  4611.05 7294.28 441.996 92.0825 re
  f*
  K
  4611.05 7294.28 441.996 92.0825 re
  S
  4633 7327 22 30 /0L
  $C
  -D98XVuQesr^0'Q/O0:8s,bkthu~>
  ,
  4660 7327 1N ,
  4680 7327 20 22 /3L
  $C
  1N`Ypo#K1np?@(odeip<p?V&3Xo~>
  ,
  4703 7327 6C ,
  4713 7327 6W ,
  4725 7326 6O ,
  4750 7327 1N ,
  4773 7327 29 23 /0P
  $C
  -EPI\5QCc`s8W-!s8W,un+F'b5`"u5+ui%UdnsO-TE~>
  ,
  4805 7326 6K ,
  4830 7327 1N ,
  4851 7326 1V ,
  4864 7326 0H ,
  4896 7318 3H ,
  4917 7326 1V ,
  4931 7327 6C ,
  4939 7326 6O ,
  4964 7327 1N ,
  255 G
  4611.05 7202.19 441.996 92.0825 re
  f*
  K
  4611.05 7202.19 441.996 92.0825 re
  S
  255 G
  4611.05 7110.11 441.996 92.0825 re
  f*
  K
  4611.05 7110.11 441.996 92.0825 re
  S
  255 G
  5163.55 7114.72 483.434 271.644 re
  f*
  K
  5163.55 7114.72 483.434 271.644 re
  S
  255 G
  5163.55 7294.28 483.434 92.0825 re
  f*
  K
  5163.55 7294.28 483.434 92.0825 re
  S
  5184 7326 1F ,
  5213 7326 6O ,
  5238 7327 0P ,
  5272 7327 0P ,
  5306 7326 2H ,
  5330 7327 1N ,
  5351 7326 20 31 /3P
  $C
  4?-$H:IM:'K<J%be,TIHYJ4i0@9AnD=CG_>p]~>
  ,
  5376 7327 19 30 /0T
  $C
  -D@'nli7"bs8W-!s8Vi~>
  ,
  5398 7327 6C ,
  5408 7327 1N ,
  5429 7326 6K ,
  5453 7326 0H ,
  5486 7318 3H ,
  5507 7326 1V ,
  5520 7327 6C ,
  5528 7326 6O ,
  5553 7327 1N ,
  255 G
  5163.55 7202.19 483.434 92.0825 re
  f*
  K
  5163.55 7202.19 483.434 92.0825 re
  S
  255 G
  5163.55 7110.11 483.434 92.0825 re
  f*
  K
  5163.55 7110.11 483.434 92.0825 re
  S
  255 G
  4611.05 6525.39 441.996 271.644 re
  f*
  K
  4611.05 6525.39 441.996 271.644 re
  S
  255 G
  4611.05 6704.95 441.996 92.0825 re
  f*
  K
  4611.05 6704.95 441.996 92.0825 re
  S
  4767 6736 30 32 /3W
  $C
  1D16Y:5JC##TKQYds?>Lmn`r?s1@+e^&-](Df%"QL(^`-:rQUj$3~>
  ,
  4795 6728 24 32 /1A
  $C
  -El<Vqg?3U&#Y8-lmDA^Ibk&$hqS2"^"2KX/m.,CC@+7~>
  ,
  4822 6736 11 29 /4A
  $X
  HiX-GrW)Efn,VqXn,RD-GQ;sgGQ;sg49.JD49.JD49-E&*WR5]s58CbJ)Ch;%fd+?#65!Z#64~>
  ,
  4833 6737 10 30 /1E
  $X
  n,VqXn,VqXn,R\5GQ;sgGQ9]'49.JD49.JD)uq#[*WR5]*WQ]N%fd(>zz#Cm&0"+UKh~>
  ,
  4842 6736 21 24 /4E
  $C
  3&j4QU/pc9F`1"S\,YmPs4dL[]t1Gb<[uTV~>
  ,
  4865 6737 21 23 /1I
  $C
  -ENd<s0hq,s4_JlrVa5"hV,dXg=[H!C*BM~>
  ,
  255 G
  4611.05 6612.87 441.996 92.0825 re
  f*
  K
  4611.05 6612.87 441.996 92.0825 re
  S
  255 G
  4611.05 6520.78 441.996 92.0825 re
  f*
  K
  4611.05 6520.78 441.996 92.0825 re
  S
  255 G
  3358.73 7068.68 441.996 345.31 re
  f*
  K
  3358.73 7068.68 441.996 345.31 re
  S
  255 G
  3358.73 7340.32 441.996 73.666 re
  f*
  K
  3358.73 7340.32 441.996 73.666 re
  S
  3444 7354 5Y ,
  3468 7354 5Y ,
  3491 7354 26 30 /4J
  $C
  -EPdJF`lSflb<%Qg<6C:J$/):>BTqRlhKjq?bc~>
  ,
  3519 7353 3P ,
  3543 7353 2H ,
  3566 7345 3H ,
  3587 7353 1V ,
  3599 7353 6K ,
  3624 7354 6W ,
  3637 7353 1Z ,
  3661 7353 1Z ,
  255 G
  3358.73 7248.24 441.996 92.0825 re
  f*
  K
  3358.73 7248.24 441.996 92.0825 re
  S
  3509 7280 0T ,
  3530 7279 6O ,
  3553 7271 6G ,
  3576 7271 6G ,
  3599 7279 6K ,
  3624 7280 6W ,
  255 G
  3363.33 7331.11 432.788 13.8123 re
  f*
  3363.33 7331.11 432.788 13.8123 re
  S
  3358.73 7156.15 441.996 92.0825 re
  f*
  K
  3358.73 7156.15 441.996 92.0825 re
  S
  255 G
  3358.73 7064.07 441.996 92.0825 re
  f*
  K
  3358.73 7064.07 441.996 92.0825 re
  S
  255 G
  2106.4 7639.59 441.996 345.31 re
  f*
  K
  2106.4 7639.59 441.996 345.31 re
  S
  255 G
  2106.4 7911.23 441.996 73.666 re
  f*
  K
  2106.4 7911.23 441.996 73.666 re
  S
  2164 7925 5Y ,
  2188 7925 5Y ,
  2214 7925 7E ,
  2225 7925 1N ,
  2245 7924 1V ,
  2257 7924 6K ,
  2282 7925 6W ,
  2295 7916 3H ,
  2319 7925 6W ,
  2331 7924 6K ,
  2353 7924 1V ,
  2365 7924 6K ,
  2390 7925 6W ,
  2403 7924 1Z ,
  2427 7924 1Z ,
  255 G
  2106.4 7819.15 441.996 92.0825 re
  f*
  K
  2106.4 7819.15 441.996 92.0825 re
  S
  2226 7851 22 30 /1N
  $C
  -EmILs8VWuA`;aC_gT;Ws'O45EE^50~>
  ,
  2252 7851 6W ,
  2264 7850 6O ,
  2287 7850 7I ,
  2308 7850 6K ,
  2331 7850 2P ,
  2351 7850 2P ,
  2372 7850 6O ,
  2397 7851 6W ,
  255 G
  2111.01 7902.02 432.788 13.8123 re
  f*
  2111.01 7902.02 432.788 13.8123 re
  S
  2106.4 7727.07 441.996 92.0825 re
  f*
  K
  2106.4 7727.07 441.996 92.0825 re
  S
  255 G
  2106.4 7634.98 441.996 92.0825 re
  f*
  K
  2106.4 7634.98 441.996 92.0825 re
  S
  255 G
  1553.91 7114.72 460.413 271.644 re
  f*
  K
  1553.91 7114.72 460.413 271.644 re
  S
  255 G
  1553.91 7294.28 460.413 92.0825 re
  f*
  K
  1553.91 7294.28 460.413 92.0825 re
  S
  1726 7326 1J ,
  1753 7326 7I ,
  1776 7327 6W ,
  1788 7327 6C ,
  1798 7318 3H ,
  1819 7326 1V ,
  255 G
  1553.91 7202.19 460.413 92.0825 re
  f*
  K
  1553.91 7202.19 460.413 92.0825 re
  S
  1574 7244 7A ,
  1587 7233 6K ,
  1612 7234 0T ,
  1634 7233 2H ,
  1658 7234 17 23 /1N
  $C
  -EPVps8W-!s8V!VCC#tIj6]5gTE~>
  ,
  1679 7225 6G ,
  1718 7234 2V ,
  1737 7233 6K ,
  1762 7234 1N ,
  1784 7233 2D ,
  1808 7234 0P ,
  1853 7239 20 10 /1P
  $C
  -D@3UJDZPedGP~>
  ,
  1889 7233 19 30 /4P
  $C
  4?-*-:)sHVXm,jiqLAPFs8TM+YO-71@;JrB@6a~>
  ,
  255 G
  1553.91 7110.11 460.413 92.0825 re
  f*
  K
  1553.91 7110.11 460.413 92.0825 re
  S
  255 G
  2106.4 7050.26 441.996 345.31 re
  f*
  K
  2106.4 7050.26 441.996 345.31 re
  S
  255 G
  2106.4 7321.9 441.996 73.666 re
  f*
  K
  2106.4 7321.9 441.996 73.666 re
  S
  2200 7336 5Y ,
  2225 7336 5Y ,
  2251 7336 7E ,
  2258 7335 1V ,
  2271 7335 6K ,
  2296 7336 6W ,
  2309 7335 2H ,
  2330 7335 1V ,
  2342 7335 6O ,
  2367 7336 6W ,
  2380 7335 1Z ,
  2404 7335 1Z ,
  255 G
  2106.4 7229.82 441.996 92.0825 re
  f*
  K
  2106.4 7229.82 441.996 92.0825 re
  S
  2262 7262 5U ,
  2290 7261 1F ,
  2322 7262 3D ,
  2345 7262 6C ,
  2356 7262 1R ,
  2363 7261 6K ,
  255 G
  2111.01 7312.69 432.788 13.8123 re
  f*
  2111.01 7312.69 432.788 13.8123 re
  S
  2106.4 7137.74 441.996 92.0825 re
  f*
  K
  2106.4 7137.74 441.996 92.0825 re
  S
  255 G
  2106.4 7045.65 441.996 92.0825 re
  f*
  K
  2106.4 7045.65 441.996 92.0825 re
  S
  255 G
  2658.9 7050.26 441.996 345.31 re
  f*
  K
  2658.9 7050.26 441.996 345.31 re
  S
  255 G
  2658.9 7321.9 441.996 73.666 re
  f*
  K
  2658.9 7321.9 441.996 73.666 re
  S
  2753 7336 5Y ,
  2777 7336 5Y ,
  2803 7336 7E ,
  2811 7335 1V ,
  2823 7335 6K ,
  2848 7336 6W ,
  2861 7335 2H ,
  2882 7335 1V ,
  2895 7335 6O ,
  2920 7336 6W ,
  2933 7335 1Z ,
  2957 7335 1Z ,
  255 G
  2658.9 7229.82 441.996 92.0825 re
  f*
  K
  2658.9 7229.82 441.996 92.0825 re
  S
  2796 7262 3D ,
  2820 7261 2D ,
  2844 7262 1N ,
  2865 7261 7I ,
  2889 7262 3D ,
  2912 7262 6C ,
  2922 7262 1R ,
  2929 7261 6K ,
  255 G
  2663.5 7312.69 432.788 13.8123 re
  f*
  2663.5 7312.69 432.788 13.8123 re
  S
  2658.9 7137.74 441.996 92.0825 re
  f*
  K
  2658.9 7137.74 441.996 92.0825 re
  S
  255 G
  2658.9 7045.65 441.996 92.0825 re
  f*
  K
  2658.9 7045.65 441.996 92.0825 re
  S
  255 G
  2401.07 6451.72 441.996 271.644 re
  f*
  K
  2401.07 6451.72 441.996 271.644 re
  S
  255 G
  2401.07 6631.28 441.996 92.0825 re
  f*
  K
  2401.07 6631.28 441.996 92.0825 re
  S
  2589 6664 27 30 /1U
  $C
  -EmCFs1A=*A-hXL0qJ@#s7m+V^OQ~>
  ,
  2614 6664 1E ,
  2623 6664 10 30 /4U
  $X
  n,VqXn,VqXDub+_GQ;sgGQ9i+49.JD49-?$*WR5]*WR5]%KI">%fd+?%fcib#Cm&0#Clo,"2G#S~>
  ,
  2632 6663 21 24 /1Y
  $C
  3%YA1M;+\UFaZ4+O806>YKJ-ImHq%+L).`q:r7_~>
  ,
  255 G
  2401.07 6539.2 441.996 92.0825 re
  f*
  K
  2401.07 6539.2 441.996 92.0825 re
  S
  2421 6581 7A ,
  2434 6589 13 12 /4Z
  $X
  &3q(?4R`ls&&8^kJ,"NgF#X7%#64u/~>
  ,
  2450 6570 2P ,
  2471 6571 18 22 /2D
  $C
  -D3l7_n1-%Dg(O)h7_RV\JuIU~>
  ,
  2494 6571 24 30 /5D
  $C
  -EQKYrjr)e+9%V1f;7g+l$qrD?i"*D?C1Rk?e8Y8~>
  ,
  2523 6570 2H ,
  2547 6571 0P ,
  2579 6570 6K ,
  2618 6571 2V ,
  2637 6570 7I ,
  2660 6571 17 30 /2H
  $C
  -EPVps8W-!s8V!VCCMi"a4fl45QCW~>
  ,
  2682 6570 20 24 /2H
  $C
  2Fj-#WbRAmKqS9ks51Q3Qa+HP_FS<b*r#\MCaESqTr7~>
  ,
  2706 6571 6W ,
  255 G
  2401.07 6447.12 441.996 92.0825 re
  f*
  K
  2401.07 6447.12 441.996 92.0825 re
  S
  255 G
  743.58 5788.73 441.996 271.644 re
  f*
  K
  743.58 5788.73 441.996 271.644 re
  S
  255 G
  743.58 5968.29 441.996 92.0825 re
  f*
  K
  743.58 5968.29 441.996 92.0825 re
  S
  819 6000 1F ,
  848 6000 6O ,
  873 6001 1N ,
  893 6001 6S ,
  907 6001 6C ,
  915 5992 6G ,
  939 6000 1J ,
  966 6000 6K ,
  989 6000 7I ,
  1008 6000 1V ,
  1022 6001 6C ,
  1030 6000 6O ,
  1055 6001 1N ,
  255 G
  743.58 5876.21 441.996 92.0825 re
  f*
  K
  743.58 5876.21 441.996 92.0825 re
  S
  255 G
  743.58 5784.12 441.996 92.0825 re
  f*
  K
  743.58 5784.12 441.996 92.0825 re
  S
  255 G
  1296.08 5788.73 441.996 271.644 re
  f*
  K
  1296.08 5788.73 441.996 271.644 re
  S
  255 G
  1296.08 5968.29 441.996 92.0825 re
  f*
  K
  1296.08 5968.29 441.996 92.0825 re
  S
  1365 6001 24 30 /2J
  $C
  -D8'oo'#j-g[FUGrU9dds8)b$I<Fdn9,4NV~>
  ,
  1391 6000 6K ,
  1413 6001 6S ,
  1427 6000 2H ,
  1450 6000 18 23 /2D
  $C
  2E4CB:IK.]62.SWs8W-!s8W*~>
  ,
  1474 6001 1R ,
  1480 6000 1V ,
  1494 6000 1J ,
  1520 6000 6K ,
  1543 6000 7I ,
  1563 6000 1V ,
  1577 6001 6C ,
  1585 6000 6O ,
  1610 6001 1N ,
  255 G
  1296.08 5876.21 441.996 92.0825 re
  f*
  K
  1296.08 5876.21 441.996 92.0825 re
  S
  255 G
  1296.08 5784.12 441.996 92.0825 re
  f*
  K
  1296.08 5784.12 441.996 92.0825 re
  S
  255 G
  1848.57 5788.73 441.996 271.644 re
  f*
  K
  1848.57 5788.73 441.996 271.644 re
  S
  255 G
  1848.57 5968.29 441.996 92.0825 re
  f*
  K
  1848.57 5968.29 441.996 92.0825 re
  S
  1945 6001 0L ,
  1971 6001 6W ,
  1985 6001 6W ,
  1997 6000 6O ,
  2022 6001 6W ,
  2035 6000 1J ,
  2061 6000 6K ,
  2084 6000 7I ,
  2104 6000 1V ,
  2118 6001 6C ,
  2126 6000 6O ,
  2151 6001 1N ,
  255 G
  1848.57 5876.21 441.996 92.0825 re
  f*
  K
  1848.57 5876.21 441.996 92.0825 re
  S
  255 G
  1848.57 5784.12 441.996 92.0825 re
  f*
  K
  1848.57 5784.12 441.996 92.0825 re
  S
  255 G
  2401.07 5788.73 441.996 271.644 re
  f*
  K
  2401.07 5788.73 441.996 271.644 re
  S
  255 G
  2401.07 5968.29 441.996 92.0825 re
  f*
  K
  2401.07 5968.29 441.996 92.0825 re
  S
  2449 6000 1F ,
  2478 6000 6O ,
  2503 6001 0P ,
  2538 6001 0P ,
  2570 6000 6O ,
  2595 6001 1N ,
  2617 6000 1J ,
  2644 6000 6K ,
  2667 6000 7I ,
  2687 6000 1V ,
  2700 6001 6C ,
  2708 6000 6O ,
  2733 6001 1N ,
  255 G
  2401.07 5876.21 441.996 92.0825 re
  f*
  K
  2401.07 5876.21 441.996 92.0825 re
  S
  255 G
  2401.07 5784.12 441.996 92.0825 re
  f*
  K
  2401.07 5784.12 441.996 92.0825 re
  S
  255 G
  2953.56 5788.73 460.413 271.644 re
  f*
  K
  2953.56 5788.73 460.413 271.644 re
  S
  255 G
  2953.56 5968.29 460.413 92.0825 re
  f*
  K
  2953.56 5968.29 460.413 92.0825 re
  S
  3058 6000 24 31 /2L
  $C
  4q\EGSIog'&:.(!Ds@<%s8W-!s8W-!s1e~>
  ,
  3086 6000 2P ,
  3106 6000 6K ,
  3132 6001 6W ,
  3144 6000 1J ,
  3171 6000 6K ,
  3194 6000 7I ,
  3214 6000 1V ,
  3227 6001 6C ,
  3235 6000 6O ,
  3260 6001 1N ,
  255 G
  2953.56 5876.21 460.413 92.0825 re
  f*
  K
  2953.56 5876.21 460.413 92.0825 re
  S
  2974 5918 7A ,
  2987 5907 6K ,
  3012 5908 0T ,
  3034 5907 2H ,
  3058 5908 1N ,
  3079 5899 6G ,
  3117 5908 2V ,
  3137 5907 6K ,
  3162 5908 1N ,
  3184 5907 2D ,
  3208 5908 0P ,
  3253 5913 1P ,
  3288 5907 4P ,
  255 G
  2953.56 5784.12 460.413 92.0825 re
  f*
  K
  2953.56 5784.12 460.413 92.0825 re
  S
  255 G
  1848.57 5199.4 441.996 271.644 re
  f*
  K
  1848.57 5199.4 441.996 271.644 re
  S
  255 G
  1848.57 5378.96 441.996 92.0825 re
  f*
  K
  1848.57 5378.96 441.996 92.0825 re
  S
  1995 5410 26 32 /5M
  $C
  3"cdE*>.>J"*JNJ^\7^&X^IA+R=i?`JP[g@WYW.rp>;ot%4_i5@]`!)~>
  ,
  2022 5410 1Y ,
  2045 5410 20 24 /2Q
  $C
  2D#//M*o,he\+3EI"0uO_-LttD-KWO>)&[~>
  ,
  2067 5410 4A ,
  2077 5411 1E ,
  2086 5410 4E ,
  2109 5411 1I ,
  255 G
  1848.57 5286.88 441.996 92.0825 re
  f*
  K
  1848.57 5286.88 441.996 92.0825 re
  S
  255 G
  1848.57 5194.79 441.996 92.0825 re
  f*
  K
  1848.57 5194.79 441.996 92.0825 re
  S
  255 G
  633.081 7740.88 441.996 271.644 re
  f*
  K
  633.081 7740.88 441.996 271.644 re
  S
  255 G
  633.081 7920.44 441.996 92.0825 re
  f*
  K
  633.081 7920.44 441.996 92.0825 re
  S
  749 7953 24 30 /5R
  $C
  -\)0rs8W-!s8W,@W#+q~>
  ,
  777 7953 6W ,
  789 7952 2H ,
  813 7953 1N ,
  834 7952 2P ,
  857 7953 1R ,
  865 7952 2H ,
  886 7952 1V ,
  899 7952 6O ,
  924 7953 6W ,
  255 G
  633.081 7828.36 441.996 92.0825 re
  f*
  K
  633.081 7828.36 441.996 92.0825 re
  S
  255 G
  633.081 7736.27 441.996 92.0825 re
  f*
  K
  633.081 7736.27 441.996 92.0825 re
  S
  255 G
  890.912 7114.72 441.996 271.644 re
  f*
  K
  890.912 7114.72 441.996 271.644 re
  S
  255 G
  890.912 7294.28 441.996 92.0825 re
  f*
  K
  890.912 7294.28 441.996 92.0825 re
  S
  994 7326 1J ,
  1021 7318 19 31 /2V
  $C
  ,G+XomOrMUI\694U>>j_/,sLRrnT7+\mP>B~>
  ,
  1044 7327 1N ,
  1064 7326 1V ,
  1077 7326 2H ,
  1099 7327 19 22 /5V
  $C
  -ENcmqGu%RoW=s.Z!+l@mY`/ZqfJEpp??[gJ,~>
  ,
  1120 7327 5R ,
  1147 7327 6W ,
  1159 7326 6K ,
  1182 7326 6K ,
  255 G
  890.912 7202.19 441.996 92.0825 re
  f*
  K
  890.912 7202.19 441.996 92.0825 re
  S
  255 G
  890.912 7110.11 441.996 92.0825 re
  f*
  K
  890.912 7110.11 441.996 92.0825 re
  S
  255 G
  338.416 7114.72 441.996 271.644 re
  f*
  K
  338.416 7114.72 441.996 271.644 re
  S
  255 G
  338.416 7294.28 441.996 92.0825 re
  f*
  K
  338.416 7294.28 441.996 92.0825 re
  S
  423 7326 1J ,
  450 7318 2V ,
  473 7327 0P ,
  506 7326 20 31 /2Z
  $C
  4ukK7oH#?gK`/SK](c7)qd8Z)['mMTMX>R'+92<~>
  ,
  528 7326 6O ,
  553 7327 1R ,
  560 7327 5R ,
  587 7326 2H ,
  610 7326 2Z ,
  634 7327 1R ,
  641 7326 6K ,
  255 G
  338.416 7202.19 441.996 92.0825 re
  f*
  K
  338.416 7202.19 441.996 92.0825 re
  S
  255 G
  338.416 7110.11 441.996 92.0825 re
  f*
  K
  338.416 7110.11 441.996 92.0825 re
  S
  4832.05 7386.36 0 257.83 S
  255 G
  4832.05 7639.59 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
  K
  4832.05 7639.59 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
  S
  4871 7404 4P ,
  4896 7405 4 4 /5Z
  $X
  nF5r:~>
  ,
  4907 7405 5Z ,
  4919 7405 11 30 /3D
  $X
  !T4":!T4":!T4":!T4":!T4":!T4":!T4":!T4":!T4":!T4":!T="9s5<q8&)[QJ!T4":!8mk8~>
  ,
  4279.55 7386.36 0 147.33 552.5 0 0 110.5 S
  255 G
  4832.05 7639.59 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
  K
  4832.05 7639.59 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
  S
  4300 7418 4P ,
  4325 7419 5Z ,
  4337 7419 5Z ,
  4348 7419 3D ,
  5384.54 7386.36 0 147.33 -552.5 0 0 119.71 S
  255 G
  4832.05 7648.8 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
  K
  4832.05 7648.8 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
  S
  5423 7408 4P ,
  5448 7409 5Z ,
  5460 7409 5Z ,
  5471 7409 3D ,
  4832.05 7110.11 0 -313.08 S
  255 G
  4832.05 6801.64 -32.23 55.25 64.46 0 f*
  K
  4832.05 6801.64 -32.23 55.25 64.46 0 H
  S
  4279.55 7110.11 0 -165.75 552.5 0 0 -147.33 S
  255 G
  4832.05 6801.64 -32.23 55.25 64.46 0 f*
  K
  4832.05 6801.64 -32.23 55.25 64.46 0 H
  S
  5384.54 7110.11 0 -165.75 -552.5 0 0 -147.33 S
  255 G
  4832.05 6801.64 -32.23 55.25 64.46 0 f*
  K
  4832.05 6801.64 -32.23 55.25 64.46 0 H
  S
  3805.33 7902.02 805.72 0 S
  255 G
  3805.33 7902.02 46.04 23.02 46.04 -23.02 -46.04 -23.02 f*
  K
  3805.33 7902.02 46.04 23.02 46.04 -23.02 -46.04 -23.02 H
  S
  3579.72 7413.98 0 317.68 S
  2553 7902.02 805.72 0 S
  255 G
  3354.12 7902.02 -46.04 -23.02 -46.04 23.02 46.04 23.02 f*
  K
  3354.12 7902.02 -46.04 -23.02 -46.04 23.02 46.04 23.02 H
  S
  2578 7924 4P ,
  2603 7925 5Z ,
  2615 7925 5Z ,
  2626 7925 3D ,
  2327.4 7054.86 0 -147.33 294.66 0 0 -184.17 S
  255 G
  2622.06 6727.97 -32.23 55.25 64.46 0 f*
  K
  2622.06 6727.97 -32.23 55.25 64.46 0 H
  S
  2879.9 7045.65 0 -138.12 -257.83 0 0 -184.17 S
  255 G
  2622.06 6727.97 -32.23 55.25 64.46 0 f*
  K
  2622.06 6727.97 -32.23 55.25 64.46 0 H
  S
  2327.4 7404.78 0 239.41 S
  255 G
  2327.4 7639.59 23.02 -46.04 -23.02 -46.04 ^ f*
  K
  2327.4 7639.59 23.02 -46.04 -23.02 -46.04 ^ H
  S
  2373 7437 3D ,
  2396 7437 5Z ,
  2407 7437 5Z ,
  2416 7455 4Z ,
  1774.91 7386.36 0 147.33 552.5 0 0 110.5 S
  255 G
  2327.4 7639.59 23.02 -46.04 -23.02 -46.04 ^ f*
  K
  2327.4 7639.59 23.02 -46.04 -23.02 -46.04 ^ H
  S
  1802 7423 3D ,
  1825 7423 5Z ,
  1836 7423 5Z ,
  1845 7441 4Z ,
  2879.9 7395.57 0 138.12 -552.5 0 0 101.29 S
  255 G
  2327.4 7630.38 23.02 -46.04 -23.02 -46.04 ^ f*
  K
  2327.4 7630.38 23.02 -46.04 -23.02 -46.04 ^ H
  S
  2905 7413 4P ,
  2930 7414 5Z ,
  2941 7414 5Z ,
  2953 7414 3D ,
  2069.57 5784.12 0 -313.08 S
  255 G
  2069.57 5475.65 -32.23 55.25 64.46 0 f*
  K
  2069.57 5475.65 -32.23 55.25 64.46 0 H
  S
  1517.07 5784.12 0 -165.75 552.5 0 0 -147.33 S
  255 G
  2069.57 5475.65 -32.23 55.25 64.46 0 f*
  K
  2069.57 5475.65 -32.23 55.25 64.46 0 H
  S
  964.58 5784.12 0 -165.75 1104.99 0 0 -147.33 S
  255 G
  2069.57 5475.65 -32.23 55.25 64.46 0 f*
  K
  2069.57 5475.65 -32.23 55.25 64.46 0 H
  S
  2622.06 5784.12 0 -165.75 -552.5 0 0 -147.33 S
  255 G
  2069.57 5475.65 -32.23 55.25 64.46 0 f*
  K
  2069.57 5475.65 -32.23 55.25 64.46 0 H
  S
  3174.56 5784.12 0 -165.75 -1104.99 0 0 -147.33 S
  255 G
  2069.57 5475.65 -32.23 55.25 64.46 0 f*
  K
  2069.57 5475.65 -32.23 55.25 64.46 0 H
  S
  2622.06 6060.37 0 386.75 S
  2622.06 6442.51 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
  2622.06 6442.51 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
  S
  2661 6073 4P ,
  2686 6074 5Z ,
  2697 6074 5Z ,
  2709 6074 3D ,
  3174.56 6060.37 0 147.33 -552.5 0 0 239.41 S
  2622.06 6442.51 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
  2622.06 6442.51 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
  S
  3213 6069 4P ,
  3238 6070 5Z ,
  3250 6070 5Z ,
  3258 6088 4Z ,
  1111.91 7386.36 0 147.33 -257.83 0 0 202.58 S
  854.08 7731.67 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
  854.08 7731.67 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
  S
  1079.68 7902.02 1026.72 0 S
  255 G
  2101.8 7902.02 -46.04 -23.02 -46.04 23.02 46.04 23.02 f*
  K
  2101.8 7902.02 -46.04 -23.02 -46.04 23.02 46.04 23.02 H
  S
  1123 7924 4P ,
  1148 7925 5Z ,
  1160 7925 5Z ,
  1171 7925 3D ,
  559.41 7386.36 0 147.33 294.66 0 0 202.58 S
  854.08 7731.67 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
  854.08 7731.67 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
  S
  2216.9 6060.37 0 994.49 S
  2216.9 7050.26 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
  2216.9 7050.26 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
  S
  1517.07 6060.37 0 184.17 699.83 0 0 810.33 S
  2216.9 7050.26 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
  2216.9 7050.26 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
  S
  964.58 6060.37 0 184.17 1252.32 0 0 810.33 S
  2216.9 7050.26 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
  2216.9 7050.26 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
  S
  2578 7924 4P ,
  2603 7925 5Z ,
  2615 7925 5Z ,
  2626 7925 3D ,
  2905 7413 4P ,
  2930 7414 5Z ,
  2941 7414 5Z ,
  2953 7414 3D ,
  cleartomark end end pagesave restore showpage
  %%PageTrailer
  %%Trailer
  %%Pages: 1
  %%EOF
  Index: ossp-pkg/rc/rc_design.xmi
  ============================================================
  $ cvs update -p -r1.1 rc_design.xmi
  <?xml version="1.0" encoding="UTF-8"?>
  <XMI xmi.version="1.0">
    <XMI.header>
      <XMI.documentation>
        <XMI.exporter>Novosoft UML Library</XMI.exporter>
        <XMI.exporterVersion>0.4.19</XMI.exporterVersion>
      </XMI.documentation>
      <XMI.metamodel xmi.name="UML" xmi.version="1.3"/>
    </XMI.header>
    <XMI.content>
      <Model_Management.Model xmi.id="xmi.1" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-8000">
        <Foundation.Core.ModelElement.name>OSSPRC</Foundation.Core.ModelElement.name>
        <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
        <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
        <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
        <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
        <Foundation.Core.Namespace.ownedElement>
          <Foundation.Core.Class xmi.id="xmi.2" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fff">
            <Foundation.Core.ModelElement.name>RC</Foundation.Core.ModelElement.name>
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.Class.isActive xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
          </Foundation.Core.Class>
          <Foundation.Core.Class xmi.id="xmi.3" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ffd">
            <Foundation.Core.ModelElement.name>Configuration</Foundation.Core.ModelElement.name>
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.Class.isActive xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
          </Foundation.Core.Class>
          <Foundation.Core.Class xmi.id="xmi.4" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ffc">
            <Foundation.Core.ModelElement.name>FileOption</Foundation.Core.ModelElement.name>
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.Class.isActive xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.GeneralizableElement.generalization>
              <Foundation.Core.Generalization xmi.idref="xmi.5"/>
            </Foundation.Core.GeneralizableElement.generalization>
          </Foundation.Core.Class>
          <Foundation.Core.Class xmi.id="xmi.6" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ffb">
            <Foundation.Core.ModelElement.name>EnvironmentOption</Foundation.Core.ModelElement.name>
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.Class.isActive xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.GeneralizableElement.generalization>
              <Foundation.Core.Generalization xmi.idref="xmi.7"/>
            </Foundation.Core.GeneralizableElement.generalization>
          </Foundation.Core.Class>
          <Foundation.Core.Class xmi.id="xmi.8" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ffa">
            <Foundation.Core.ModelElement.name>CommandLineOption</Foundation.Core.ModelElement.name>
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.Class.isActive xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.GeneralizableElement.generalization>
              <Foundation.Core.Generalization xmi.idref="xmi.9"/>
            </Foundation.Core.GeneralizableElement.generalization>
          </Foundation.Core.Class>
          <Foundation.Core.Class xmi.id="xmi.10" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ff9">
            <Foundation.Core.ModelElement.name>Option</Foundation.Core.ModelElement.name>
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.Class.isActive xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.GeneralizableElement.specialization>
              <Foundation.Core.Generalization xmi.idref="xmi.7"/>
              <Foundation.Core.Generalization xmi.idref="xmi.5"/>
              <Foundation.Core.Generalization xmi.idref="xmi.9"/>
            </Foundation.Core.GeneralizableElement.specialization>
          </Foundation.Core.Class>
          <Foundation.Core.Association xmi.id="xmi.11" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ff5">
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.Association.connection>
              <Foundation.Core.AssociationEnd xmi.id="xmi.12">
                <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
                <Foundation.Core.AssociationEnd.multiplicity>
                  <Foundation.Data_Types.Multiplicity xmi.id="xmi.13">
                    <Foundation.Data_Types.Multiplicity.range>
                      <Foundation.Data_Types.MultiplicityRange xmi.id="xmi.14">
                        <Foundation.Data_Types.MultiplicityRange.lower>0</Foundation.Data_Types.MultiplicityRange.lower>
                        <Foundation.Data_Types.MultiplicityRange.upper>1</Foundation.Data_Types.MultiplicityRange.upper>
                      </Foundation.Data_Types.MultiplicityRange>
                    </Foundation.Data_Types.Multiplicity.range>
                  </Foundation.Data_Types.Multiplicity>
                </Foundation.Core.AssociationEnd.multiplicity>
                <Foundation.Core.AssociationEnd.association>
                  <Foundation.Core.Association xmi.idref="xmi.11"/>
                </Foundation.Core.AssociationEnd.association>
                <Foundation.Core.AssociationEnd.type>
                  <Foundation.Core.Classifier xmi.idref="xmi.6"/>
                </Foundation.Core.AssociationEnd.type>
              </Foundation.Core.AssociationEnd>
              <Foundation.Core.AssociationEnd xmi.id="xmi.15">
                <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
                <Foundation.Core.AssociationEnd.association>
                  <Foundation.Core.Association xmi.idref="xmi.11"/>
                </Foundation.Core.AssociationEnd.association>
                <Foundation.Core.AssociationEnd.type>
                  <Foundation.Core.Classifier xmi.idref="xmi.3"/>
                </Foundation.Core.AssociationEnd.type>
              </Foundation.Core.AssociationEnd>
            </Foundation.Core.Association.connection>
          </Foundation.Core.Association>
          <Foundation.Core.Association xmi.id="xmi.16" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ff4">
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.Association.connection>
              <Foundation.Core.AssociationEnd xmi.id="xmi.17">
                <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
                <Foundation.Core.AssociationEnd.multiplicity>
                  <Foundation.Data_Types.Multiplicity xmi.idref="xmi.13"/>
                </Foundation.Core.AssociationEnd.multiplicity>
                <Foundation.Core.AssociationEnd.association>
                  <Foundation.Core.Association xmi.idref="xmi.16"/>
                </Foundation.Core.AssociationEnd.association>
                <Foundation.Core.AssociationEnd.type>
                  <Foundation.Core.Classifier xmi.idref="xmi.4"/>
                </Foundation.Core.AssociationEnd.type>
              </Foundation.Core.AssociationEnd>
              <Foundation.Core.AssociationEnd xmi.id="xmi.18">
                <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
                <Foundation.Core.AssociationEnd.multiplicity>
                  <Foundation.Data_Types.Multiplicity xmi.id="xmi.19">
                    <Foundation.Data_Types.Multiplicity.range>
                      <Foundation.Data_Types.MultiplicityRange xmi.id="xmi.20">
                        <Foundation.Data_Types.MultiplicityRange.lower>1</Foundation.Data_Types.MultiplicityRange.lower>
                        <Foundation.Data_Types.MultiplicityRange.upper>1</Foundation.Data_Types.MultiplicityRange.upper>
                      </Foundation.Data_Types.MultiplicityRange>
                    </Foundation.Data_Types.Multiplicity.range>
                  </Foundation.Data_Types.Multiplicity>
                </Foundation.Core.AssociationEnd.multiplicity>
                <Foundation.Core.AssociationEnd.association>
                  <Foundation.Core.Association xmi.idref="xmi.16"/>
                </Foundation.Core.AssociationEnd.association>
                <Foundation.Core.AssociationEnd.type>
                  <Foundation.Core.Classifier xmi.idref="xmi.3"/>
                </Foundation.Core.AssociationEnd.type>
              </Foundation.Core.AssociationEnd>
            </Foundation.Core.Association.connection>
          </Foundation.Core.Association>
          <Foundation.Core.Association xmi.id="xmi.21" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ff3">
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.Association.connection>
              <Foundation.Core.AssociationEnd xmi.id="xmi.22">
                <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
                <Foundation.Core.AssociationEnd.multiplicity>
                  <Foundation.Data_Types.Multiplicity xmi.idref="xmi.13"/>
                </Foundation.Core.AssociationEnd.multiplicity>
                <Foundation.Core.AssociationEnd.association>
                  <Foundation.Core.Association xmi.idref="xmi.21"/>
                </Foundation.Core.AssociationEnd.association>
                <Foundation.Core.AssociationEnd.type>
                  <Foundation.Core.Classifier xmi.idref="xmi.8"/>
                </Foundation.Core.AssociationEnd.type>
              </Foundation.Core.AssociationEnd>
              <Foundation.Core.AssociationEnd xmi.id="xmi.23">
                <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
                <Foundation.Core.AssociationEnd.association>
                  <Foundation.Core.Association xmi.idref="xmi.21"/>
                </Foundation.Core.AssociationEnd.association>
                <Foundation.Core.AssociationEnd.type>
                  <Foundation.Core.Classifier xmi.idref="xmi.3"/>
                </Foundation.Core.AssociationEnd.type>
              </Foundation.Core.AssociationEnd>
            </Foundation.Core.Association.connection>
          </Foundation.Core.Association>
          <Foundation.Core.Generalization xmi.id="xmi.7" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ff1">
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.Generalization.child>
              <Foundation.Core.GeneralizableElement xmi.idref="xmi.6"/>
            </Foundation.Core.Generalization.child>
            <Foundation.Core.Generalization.parent>
              <Foundation.Core.GeneralizableElement xmi.idref="xmi.10"/>
            </Foundation.Core.Generalization.parent>
          </Foundation.Core.Generalization>
          <Foundation.Core.Generalization xmi.id="xmi.5" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ff0">
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.Generalization.child>
              <Foundation.Core.GeneralizableElement xmi.idref="xmi.4"/>
            </Foundation.Core.Generalization.child>
            <Foundation.Core.Generalization.parent>
              <Foundation.Core.GeneralizableElement xmi.idref="xmi.10"/>
            </Foundation.Core.Generalization.parent>
          </Foundation.Core.Generalization>
          <Foundation.Core.Generalization xmi.id="xmi.9" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fef">
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.Generalization.child>
              <Foundation.Core.GeneralizableElement xmi.idref="xmi.8"/>
            </Foundation.Core.Generalization.child>
            <Foundation.Core.Generalization.parent>
              <Foundation.Core.GeneralizableElement xmi.idref="xmi.10"/>
            </Foundation.Core.Generalization.parent>
          </Foundation.Core.Generalization>
          <Foundation.Core.Association xmi.id="xmi.24" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fed">
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.Association.connection>
              <Foundation.Core.AssociationEnd xmi.id="xmi.25">
                <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
                <Foundation.Core.AssociationEnd.association>
                  <Foundation.Core.Association xmi.idref="xmi.24"/>
                </Foundation.Core.AssociationEnd.association>
                <Foundation.Core.AssociationEnd.type>
                  <Foundation.Core.Classifier xmi.idref="xmi.2"/>
                </Foundation.Core.AssociationEnd.type>
              </Foundation.Core.AssociationEnd>
              <Foundation.Core.AssociationEnd xmi.id="xmi.26">
                <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
                <Foundation.Core.AssociationEnd.multiplicity>
                  <Foundation.Data_Types.Multiplicity xmi.idref="xmi.19"/>
                </Foundation.Core.AssociationEnd.multiplicity>
                <Foundation.Core.AssociationEnd.association>
                  <Foundation.Core.Association xmi.idref="xmi.24"/>
                </Foundation.Core.AssociationEnd.association>
                <Foundation.Core.AssociationEnd.type>
                  <Foundation.Core.Classifier xmi.idref="xmi.3"/>
                </Foundation.Core.AssociationEnd.type>
              </Foundation.Core.AssociationEnd>
            </Foundation.Core.Association.connection>
          </Foundation.Core.Association>
          <Foundation.Core.Class xmi.id="xmi.27" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fec">
            <Foundation.Core.ModelElement.name>Logger</Foundation.Core.ModelElement.name>
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.Class.isActive xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
          </Foundation.Core.Class>
          <Foundation.Core.Association xmi.id="xmi.28" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fea">
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.Association.connection>
              <Foundation.Core.AssociationEnd xmi.id="xmi.29">
                <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
                <Foundation.Core.AssociationEnd.association>
                  <Foundation.Core.Association xmi.idref="xmi.28"/>
                </Foundation.Core.AssociationEnd.association>
                <Foundation.Core.AssociationEnd.type>
                  <Foundation.Core.Classifier xmi.idref="xmi.27"/>
                </Foundation.Core.AssociationEnd.type>
              </Foundation.Core.AssociationEnd>
              <Foundation.Core.AssociationEnd xmi.id="xmi.30">
                <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
                <Foundation.Core.AssociationEnd.association>
                  <Foundation.Core.Association xmi.idref="xmi.28"/>
                </Foundation.Core.AssociationEnd.association>
                <Foundation.Core.AssociationEnd.type>
                  <Foundation.Core.Classifier xmi.idref="xmi.2"/>
                </Foundation.Core.AssociationEnd.type>
              </Foundation.Core.AssociationEnd>
            </Foundation.Core.Association.connection>
          </Foundation.Core.Association>
          <Foundation.Core.Class xmi.id="xmi.31" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe9">
            <Foundation.Core.ModelElement.name>Processor</Foundation.Core.ModelElement.name>
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.Class.isActive xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
          </Foundation.Core.Class>
          <Foundation.Core.Association xmi.id="xmi.32" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe8">
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.Association.connection>
              <Foundation.Core.AssociationEnd xmi.id="xmi.33">
                <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
                <Foundation.Core.AssociationEnd.multiplicity>
                  <Foundation.Data_Types.Multiplicity xmi.idref="xmi.13"/>
                </Foundation.Core.AssociationEnd.multiplicity>
                <Foundation.Core.AssociationEnd.association>
                  <Foundation.Core.Association xmi.idref="xmi.32"/>
                </Foundation.Core.AssociationEnd.association>
                <Foundation.Core.AssociationEnd.type>
                  <Foundation.Core.Classifier xmi.idref="xmi.31"/>
                </Foundation.Core.AssociationEnd.type>
              </Foundation.Core.AssociationEnd>
              <Foundation.Core.AssociationEnd xmi.id="xmi.34">
                <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
                <Foundation.Core.AssociationEnd.multiplicity>
                  <Foundation.Data_Types.Multiplicity xmi.idref="xmi.19"/>
                </Foundation.Core.AssociationEnd.multiplicity>
                <Foundation.Core.AssociationEnd.association>
                  <Foundation.Core.Association xmi.idref="xmi.32"/>
                </Foundation.Core.AssociationEnd.association>
                <Foundation.Core.AssociationEnd.type>
                  <Foundation.Core.Classifier xmi.idref="xmi.2"/>
                </Foundation.Core.AssociationEnd.type>
              </Foundation.Core.AssociationEnd>
            </Foundation.Core.Association.connection>
          </Foundation.Core.Association>
          <Foundation.Core.Class xmi.id="xmi.35" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe7">
            <Foundation.Core.ModelElement.name>Script</Foundation.Core.ModelElement.name>
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.Class.isActive xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.Classifier.feature>
              <Foundation.Core.Attribute xmi.id="xmi.36">
                <Foundation.Core.ModelElement.name>eLang</Foundation.Core.ModelElement.name>
                <Foundation.Core.ModelElement.visibility xmi.value="private"/>
                <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                <Foundation.Core.Attribute.initialValue>
                  <Foundation.Data_Types.Expression xmi.id="xmi.37">
                    <Foundation.Data_Types.Expression.language>Java</Foundation.Data_Types.Expression.language>
                    <Foundation.Data_Types.Expression.body>0</Foundation.Data_Types.Expression.body>
                  </Foundation.Data_Types.Expression>
                </Foundation.Core.Attribute.initialValue>
                <Foundation.Core.Feature.owner>
                  <Foundation.Core.Classifier xmi.idref="xmi.35"/>
                </Foundation.Core.Feature.owner>
                <Foundation.Core.StructuralFeature.type>
                  <Foundation.Core.Classifier xmi.idref="xmi.38"/>
                </Foundation.Core.StructuralFeature.type>
              </Foundation.Core.Attribute>
            </Foundation.Core.Classifier.feature>
          </Foundation.Core.Class>
          <Foundation.Core.Class xmi.id="xmi.39" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe6">
            <Foundation.Core.ModelElement.name>RCFile</Foundation.Core.ModelElement.name>
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.Class.isActive xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.GeneralizableElement.generalization>
              <Foundation.Core.Generalization xmi.idref="xmi.40"/>
            </Foundation.Core.GeneralizableElement.generalization>
          </Foundation.Core.Class>
          <Foundation.Core.Class xmi.id="xmi.41" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe5">
            <Foundation.Core.ModelElement.name>FuncFile</Foundation.Core.ModelElement.name>
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.Class.isActive xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.GeneralizableElement.generalization>
              <Foundation.Core.Generalization xmi.idref="xmi.42"/>
            </Foundation.Core.GeneralizableElement.generalization>
          </Foundation.Core.Class>
          <Foundation.Core.Class xmi.id="xmi.43" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe4">
            <Foundation.Core.ModelElement.name>File</Foundation.Core.ModelElement.name>
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.Class.isActive xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.GeneralizableElement.specialization>
              <Foundation.Core.Generalization xmi.idref="xmi.40"/>
              <Foundation.Core.Generalization xmi.idref="xmi.42"/>
            </Foundation.Core.GeneralizableElement.specialization>
            <Foundation.Core.Classifier.feature>
              <Foundation.Core.Attribute xmi.id="xmi.44">
                <Foundation.Core.ModelElement.name>*szName</Foundation.Core.ModelElement.name>
                <Foundation.Core.ModelElement.visibility xmi.value="private"/>
                <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                <Foundation.Core.Feature.owner>
                  <Foundation.Core.Classifier xmi.idref="xmi.43"/>
                </Foundation.Core.Feature.owner>
                <Foundation.Core.StructuralFeature.type>
                  <Foundation.Core.Classifier xmi.idref="xmi.45"/>
                </Foundation.Core.StructuralFeature.type>
              </Foundation.Core.Attribute>
            </Foundation.Core.Classifier.feature>
          </Foundation.Core.Class>
          <Foundation.Core.Generalization xmi.id="xmi.40" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe2">
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.Generalization.child>
              <Foundation.Core.GeneralizableElement xmi.idref="xmi.39"/>
            </Foundation.Core.Generalization.child>
            <Foundation.Core.Generalization.parent>
              <Foundation.Core.GeneralizableElement xmi.idref="xmi.43"/>
            </Foundation.Core.Generalization.parent>
          </Foundation.Core.Generalization>
          <Foundation.Core.Generalization xmi.id="xmi.42" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe1">
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.Generalization.child>
              <Foundation.Core.GeneralizableElement xmi.idref="xmi.41"/>
            </Foundation.Core.Generalization.child>
            <Foundation.Core.Generalization.parent>
              <Foundation.Core.GeneralizableElement xmi.idref="xmi.43"/>
            </Foundation.Core.Generalization.parent>
          </Foundation.Core.Generalization>
          <Foundation.Core.Association xmi.id="xmi.46" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fdf">
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.Association.connection>
              <Foundation.Core.AssociationEnd xmi.id="xmi.47">
                <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
                <Foundation.Core.AssociationEnd.multiplicity>
                  <Foundation.Data_Types.Multiplicity xmi.id="xmi.48">
                    <Foundation.Data_Types.Multiplicity.range>
                      <Foundation.Data_Types.MultiplicityRange xmi.id="xmi.49">
                        <Foundation.Data_Types.MultiplicityRange.lower>1</Foundation.Data_Types.MultiplicityRange.lower>
                        <Foundation.Data_Types.MultiplicityRange.upper>-1</Foundation.Data_Types.MultiplicityRange.upper>
                      </Foundation.Data_Types.MultiplicityRange>
                    </Foundation.Data_Types.Multiplicity.range>
                  </Foundation.Data_Types.Multiplicity>
                </Foundation.Core.AssociationEnd.multiplicity>
                <Foundation.Core.AssociationEnd.association>
                  <Foundation.Core.Association xmi.idref="xmi.46"/>
                </Foundation.Core.AssociationEnd.association>
                <Foundation.Core.AssociationEnd.type>
                  <Foundation.Core.Classifier xmi.idref="xmi.39"/>
                </Foundation.Core.AssociationEnd.type>
              </Foundation.Core.AssociationEnd>
              <Foundation.Core.AssociationEnd xmi.id="xmi.50">
                <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
                <Foundation.Core.AssociationEnd.association>
                  <Foundation.Core.Association xmi.idref="xmi.46"/>
                </Foundation.Core.AssociationEnd.association>
                <Foundation.Core.AssociationEnd.type>
                  <Foundation.Core.Classifier xmi.idref="xmi.31"/>
                </Foundation.Core.AssociationEnd.type>
              </Foundation.Core.AssociationEnd>
            </Foundation.Core.Association.connection>
          </Foundation.Core.Association>
          <Foundation.Core.Association xmi.id="xmi.51" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fde">
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.Association.connection>
              <Foundation.Core.AssociationEnd xmi.id="xmi.52">
                <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
                <Foundation.Core.AssociationEnd.multiplicity>
                  <Foundation.Data_Types.Multiplicity xmi.idref="xmi.48"/>
                </Foundation.Core.AssociationEnd.multiplicity>
                <Foundation.Core.AssociationEnd.association>
                  <Foundation.Core.Association xmi.idref="xmi.51"/>
                </Foundation.Core.AssociationEnd.association>
                <Foundation.Core.AssociationEnd.type>
                  <Foundation.Core.Classifier xmi.idref="xmi.35"/>
                </Foundation.Core.AssociationEnd.type>
              </Foundation.Core.AssociationEnd>
              <Foundation.Core.AssociationEnd xmi.id="xmi.53">
                <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
                <Foundation.Core.AssociationEnd.association>
                  <Foundation.Core.Association xmi.idref="xmi.51"/>
                </Foundation.Core.AssociationEnd.association>
                <Foundation.Core.AssociationEnd.type>
                  <Foundation.Core.Classifier xmi.idref="xmi.31"/>
                </Foundation.Core.AssociationEnd.type>
              </Foundation.Core.AssociationEnd>
            </Foundation.Core.Association.connection>
          </Foundation.Core.Association>
          <Foundation.Core.Association xmi.id="xmi.54" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fdd">
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.Association.connection>
              <Foundation.Core.AssociationEnd xmi.id="xmi.55">
                <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
                <Foundation.Core.AssociationEnd.multiplicity>
                  <Foundation.Data_Types.Multiplicity xmi.idref="xmi.13"/>
                </Foundation.Core.AssociationEnd.multiplicity>
                <Foundation.Core.AssociationEnd.association>
                  <Foundation.Core.Association xmi.idref="xmi.54"/>
                </Foundation.Core.AssociationEnd.association>
                <Foundation.Core.AssociationEnd.type>
                  <Foundation.Core.Classifier xmi.idref="xmi.41"/>
                </Foundation.Core.AssociationEnd.type>
              </Foundation.Core.AssociationEnd>
              <Foundation.Core.AssociationEnd xmi.id="xmi.56">
                <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
                <Foundation.Core.AssociationEnd.association>
                  <Foundation.Core.Association xmi.idref="xmi.54"/>
                </Foundation.Core.AssociationEnd.association>
                <Foundation.Core.AssociationEnd.type>
                  <Foundation.Core.Classifier xmi.idref="xmi.31"/>
                </Foundation.Core.AssociationEnd.type>
              </Foundation.Core.AssociationEnd>
            </Foundation.Core.Association.connection>
          </Foundation.Core.Association>
          <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.57">
            <Foundation.Core.ModelElement.name></Foundation.Core.ModelElement.name>
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Extension_Mechanisms.Stereotype.extendedElement>
              <Foundation.Core.ModelElement xmi.idref="xmi.43"/>
              <Foundation.Core.ModelElement xmi.idref="xmi.40"/>
              <Foundation.Core.ModelElement xmi.idref="xmi.42"/>
              <Foundation.Core.ModelElement xmi.idref="xmi.5"/>
              <Foundation.Core.ModelElement xmi.idref="xmi.7"/>
              <Foundation.Core.ModelElement xmi.idref="xmi.9"/>
              <Foundation.Core.ModelElement xmi.idref="xmi.58"/>
              <Foundation.Core.ModelElement xmi.idref="xmi.59"/>
              <Foundation.Core.ModelElement xmi.idref="xmi.60"/>
              <Foundation.Core.ModelElement xmi.idref="xmi.61"/>
              <Foundation.Core.ModelElement xmi.idref="xmi.62"/>
            </Foundation.Extension_Mechanisms.Stereotype.extendedElement>
          </Foundation.Extension_Mechanisms.Stereotype>
          <Foundation.Core.Class xmi.id="xmi.63" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fdc">
            <Foundation.Core.ModelElement.name>ConfigSection</Foundation.Core.ModelElement.name>
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.Class.isActive xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.GeneralizableElement.generalization>
              <Foundation.Core.Generalization xmi.idref="xmi.58"/>
            </Foundation.Core.GeneralizableElement.generalization>
          </Foundation.Core.Class>
          <Foundation.Core.Class xmi.id="xmi.64" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fdb">
            <Foundation.Core.ModelElement.name>DefaultSection</Foundation.Core.ModelElement.name>
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.Class.isActive xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.GeneralizableElement.generalization>
              <Foundation.Core.Generalization xmi.idref="xmi.59"/>
            </Foundation.Core.GeneralizableElement.generalization>
          </Foundation.Core.Class>
          <Foundation.Core.Class xmi.id="xmi.65" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fda">
            <Foundation.Core.ModelElement.name>ErrorSection</Foundation.Core.ModelElement.name>
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.Class.isActive xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.GeneralizableElement.generalization>
              <Foundation.Core.Generalization xmi.idref="xmi.61"/>
            </Foundation.Core.GeneralizableElement.generalization>
          </Foundation.Core.Class>
          <Foundation.Core.Class xmi.id="xmi.66" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fd9">
            <Foundation.Core.ModelElement.name>CommonSection</Foundation.Core.ModelElement.name>
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.Class.isActive xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.GeneralizableElement.generalization>
              <Foundation.Core.Generalization xmi.idref="xmi.62"/>
            </Foundation.Core.GeneralizableElement.generalization>
          </Foundation.Core.Class>
          <Foundation.Core.Class xmi.id="xmi.67" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fd8">
            <Foundation.Core.ModelElement.name>UserSection</Foundation.Core.ModelElement.name>
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.Class.isActive xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.GeneralizableElement.generalization>
              <Foundation.Core.Generalization xmi.idref="xmi.60"/>
            </Foundation.Core.GeneralizableElement.generalization>
            <Foundation.Core.Classifier.feature>
              <Foundation.Core.Attribute xmi.id="xmi.68">
                <Foundation.Core.ModelElement.name>eLang</Foundation.Core.ModelElement.name>
                <Foundation.Core.ModelElement.visibility xmi.value="private"/>
                <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                <Foundation.Core.Attribute.initialValue>
                  <Foundation.Data_Types.Expression xmi.id="xmi.69">
                    <Foundation.Data_Types.Expression.language>Java</Foundation.Data_Types.Expression.language>
                    <Foundation.Data_Types.Expression.body>0</Foundation.Data_Types.Expression.body>
                  </Foundation.Data_Types.Expression>
                </Foundation.Core.Attribute.initialValue>
                <Foundation.Core.Feature.owner>
                  <Foundation.Core.Classifier xmi.idref="xmi.67"/>
                </Foundation.Core.Feature.owner>
                <Foundation.Core.StructuralFeature.type>
                  <Foundation.Core.Classifier xmi.idref="xmi.38"/>
                </Foundation.Core.StructuralFeature.type>
              </Foundation.Core.Attribute>
            </Foundation.Core.Classifier.feature>
          </Foundation.Core.Class>
          <Foundation.Core.Class xmi.id="xmi.70" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fd7">
            <Foundation.Core.ModelElement.name>Section</Foundation.Core.ModelElement.name>
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.Class.isActive xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.GeneralizableElement.specialization>
              <Foundation.Core.Generalization xmi.idref="xmi.61"/>
              <Foundation.Core.Generalization xmi.idref="xmi.59"/>
              <Foundation.Core.Generalization xmi.idref="xmi.58"/>
              <Foundation.Core.Generalization xmi.idref="xmi.62"/>
              <Foundation.Core.Generalization xmi.idref="xmi.60"/>
            </Foundation.Core.GeneralizableElement.specialization>
          </Foundation.Core.Class>
          <Foundation.Core.Generalization xmi.id="xmi.61" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fd0">
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.Generalization.child>
              <Foundation.Core.GeneralizableElement xmi.idref="xmi.65"/>
            </Foundation.Core.Generalization.child>
            <Foundation.Core.Generalization.parent>
              <Foundation.Core.GeneralizableElement xmi.idref="xmi.70"/>
            </Foundation.Core.Generalization.parent>
          </Foundation.Core.Generalization>
          <Foundation.Core.Generalization xmi.id="xmi.59" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fcf">
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.Generalization.child>
              <Foundation.Core.GeneralizableElement xmi.idref="xmi.64"/>
            </Foundation.Core.Generalization.child>
            <Foundation.Core.Generalization.parent>
              <Foundation.Core.GeneralizableElement xmi.idref="xmi.70"/>
            </Foundation.Core.Generalization.parent>
          </Foundation.Core.Generalization>
          <Foundation.Core.Generalization xmi.id="xmi.58" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fce">
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.Generalization.child>
              <Foundation.Core.GeneralizableElement xmi.idref="xmi.63"/>
            </Foundation.Core.Generalization.child>
            <Foundation.Core.Generalization.parent>
              <Foundation.Core.GeneralizableElement xmi.idref="xmi.70"/>
            </Foundation.Core.Generalization.parent>
          </Foundation.Core.Generalization>
          <Foundation.Core.Generalization xmi.id="xmi.62" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fcd">
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.Generalization.child>
              <Foundation.Core.GeneralizableElement xmi.idref="xmi.66"/>
            </Foundation.Core.Generalization.child>
            <Foundation.Core.Generalization.parent>
              <Foundation.Core.GeneralizableElement xmi.idref="xmi.70"/>
            </Foundation.Core.Generalization.parent>
          </Foundation.Core.Generalization>
          <Foundation.Core.Generalization xmi.id="xmi.60" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fcc">
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.Generalization.child>
              <Foundation.Core.GeneralizableElement xmi.idref="xmi.67"/>
            </Foundation.Core.Generalization.child>
            <Foundation.Core.Generalization.parent>
              <Foundation.Core.GeneralizableElement xmi.idref="xmi.70"/>
            </Foundation.Core.Generalization.parent>
          </Foundation.Core.Generalization>
          <Foundation.Core.Association xmi.id="xmi.71" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fc3">
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.Association.connection>
              <Foundation.Core.AssociationEnd xmi.id="xmi.72">
                <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
                <Foundation.Core.AssociationEnd.multiplicity>
                  <Foundation.Data_Types.Multiplicity xmi.idref="xmi.13"/>
                </Foundation.Core.AssociationEnd.multiplicity>
                <Foundation.Core.AssociationEnd.association>
                  <Foundation.Core.Association xmi.idref="xmi.71"/>
                </Foundation.Core.AssociationEnd.association>
                <Foundation.Core.AssociationEnd.type>
                  <Foundation.Core.Classifier xmi.idref="xmi.66"/>
                </Foundation.Core.AssociationEnd.type>
              </Foundation.Core.AssociationEnd>
              <Foundation.Core.AssociationEnd xmi.id="xmi.73">
                <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                <Foundation.Core.AssociationEnd.aggregation xmi.value="composite"/>
                <Foundation.Core.AssociationEnd.association>
                  <Foundation.Core.Association xmi.idref="xmi.71"/>
                </Foundation.Core.AssociationEnd.association>
                <Foundation.Core.AssociationEnd.type>
                  <Foundation.Core.Classifier xmi.idref="xmi.43"/>
                </Foundation.Core.AssociationEnd.type>
              </Foundation.Core.AssociationEnd>
            </Foundation.Core.Association.connection>
          </Foundation.Core.Association>
          <Foundation.Core.Association xmi.id="xmi.74" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fc1">
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.Association.connection>
              <Foundation.Core.AssociationEnd xmi.id="xmi.75">
                <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
                <Foundation.Core.AssociationEnd.multiplicity>
                  <Foundation.Data_Types.Multiplicity xmi.id="xmi.76">
                    <Foundation.Data_Types.Multiplicity.range>
                      <Foundation.Data_Types.MultiplicityRange xmi.id="xmi.77">
                        <Foundation.Data_Types.MultiplicityRange.lower>0</Foundation.Data_Types.MultiplicityRange.lower>
                        <Foundation.Data_Types.MultiplicityRange.upper>-1</Foundation.Data_Types.MultiplicityRange.upper>
                      </Foundation.Data_Types.MultiplicityRange>
                    </Foundation.Data_Types.Multiplicity.range>
                  </Foundation.Data_Types.Multiplicity>
                </Foundation.Core.AssociationEnd.multiplicity>
                <Foundation.Core.AssociationEnd.association>
                  <Foundation.Core.Association xmi.idref="xmi.74"/>
                </Foundation.Core.AssociationEnd.association>
                <Foundation.Core.AssociationEnd.type>
                  <Foundation.Core.Classifier xmi.idref="xmi.67"/>
                </Foundation.Core.AssociationEnd.type>
              </Foundation.Core.AssociationEnd>
              <Foundation.Core.AssociationEnd xmi.id="xmi.78">
                <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                <Foundation.Core.AssociationEnd.aggregation xmi.value="composite"/>
                <Foundation.Core.AssociationEnd.association>
                  <Foundation.Core.Association xmi.idref="xmi.74"/>
                </Foundation.Core.AssociationEnd.association>
                <Foundation.Core.AssociationEnd.type>
                  <Foundation.Core.Classifier xmi.idref="xmi.43"/>
                </Foundation.Core.AssociationEnd.type>
              </Foundation.Core.AssociationEnd>
            </Foundation.Core.Association.connection>
          </Foundation.Core.Association>
          <Foundation.Core.Class xmi.id="xmi.79" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fbd">
            <Foundation.Core.ModelElement.name>Translator</Foundation.Core.ModelElement.name>
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.Class.isActive xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
          </Foundation.Core.Class>
          <Foundation.Core.Class xmi.id="xmi.80" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fbc">
            <Foundation.Core.ModelElement.name>SyntaxTree</Foundation.Core.ModelElement.name>
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.Class.isActive xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
          </Foundation.Core.Class>
          <Foundation.Core.Class xmi.id="xmi.81" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fbb">
            <Foundation.Core.ModelElement.name>SymbolTable</Foundation.Core.ModelElement.name>
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.Class.isActive xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
          </Foundation.Core.Class>
          <Foundation.Core.Association xmi.id="xmi.82" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fb7">
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.Association.connection>
              <Foundation.Core.AssociationEnd xmi.id="xmi.83">
                <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
                <Foundation.Core.AssociationEnd.association>
                  <Foundation.Core.Association xmi.idref="xmi.82"/>
                </Foundation.Core.AssociationEnd.association>
                <Foundation.Core.AssociationEnd.type>
                  <Foundation.Core.Classifier xmi.idref="xmi.80"/>
                </Foundation.Core.AssociationEnd.type>
              </Foundation.Core.AssociationEnd>
              <Foundation.Core.AssociationEnd xmi.id="xmi.84">
                <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                <Foundation.Core.AssociationEnd.aggregation xmi.value="composite"/>
                <Foundation.Core.AssociationEnd.association>
                  <Foundation.Core.Association xmi.idref="xmi.82"/>
                </Foundation.Core.AssociationEnd.association>
                <Foundation.Core.AssociationEnd.type>
                  <Foundation.Core.Classifier xmi.idref="xmi.79"/>
                </Foundation.Core.AssociationEnd.type>
              </Foundation.Core.AssociationEnd>
            </Foundation.Core.Association.connection>
          </Foundation.Core.Association>
          <Foundation.Core.Association xmi.id="xmi.85" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fb6">
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.Association.connection>
              <Foundation.Core.AssociationEnd xmi.id="xmi.86">
                <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
                <Foundation.Core.AssociationEnd.multiplicity>
                  <Foundation.Data_Types.Multiplicity xmi.idref="xmi.13"/>
                </Foundation.Core.AssociationEnd.multiplicity>
                <Foundation.Core.AssociationEnd.association>
                  <Foundation.Core.Association xmi.idref="xmi.85"/>
                </Foundation.Core.AssociationEnd.association>
                <Foundation.Core.AssociationEnd.type>
                  <Foundation.Core.Classifier xmi.idref="xmi.79"/>
                </Foundation.Core.AssociationEnd.type>
              </Foundation.Core.AssociationEnd>
              <Foundation.Core.AssociationEnd xmi.id="xmi.87">
                <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
                <Foundation.Core.AssociationEnd.multiplicity>
                  <Foundation.Data_Types.Multiplicity xmi.idref="xmi.19"/>
                </Foundation.Core.AssociationEnd.multiplicity>
                <Foundation.Core.AssociationEnd.association>
                  <Foundation.Core.Association xmi.idref="xmi.85"/>
                </Foundation.Core.AssociationEnd.association>
                <Foundation.Core.AssociationEnd.type>
                  <Foundation.Core.Classifier xmi.idref="xmi.31"/>
                </Foundation.Core.AssociationEnd.type>
              </Foundation.Core.AssociationEnd>
            </Foundation.Core.Association.connection>
          </Foundation.Core.Association>
          <Foundation.Core.Association xmi.id="xmi.88" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fb5">
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.Association.connection>
              <Foundation.Core.AssociationEnd xmi.id="xmi.89">
                <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
                <Foundation.Core.AssociationEnd.association>
                  <Foundation.Core.Association xmi.idref="xmi.88"/>
                </Foundation.Core.AssociationEnd.association>
                <Foundation.Core.AssociationEnd.type>
                  <Foundation.Core.Classifier xmi.idref="xmi.81"/>
                </Foundation.Core.AssociationEnd.type>
              </Foundation.Core.AssociationEnd>
              <Foundation.Core.AssociationEnd xmi.id="xmi.90">
                <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                <Foundation.Core.AssociationEnd.aggregation xmi.value="composite"/>
                <Foundation.Core.AssociationEnd.multiplicity>
                  <Foundation.Data_Types.Multiplicity xmi.idref="xmi.19"/>
                </Foundation.Core.AssociationEnd.multiplicity>
                <Foundation.Core.AssociationEnd.association>
                  <Foundation.Core.Association xmi.idref="xmi.88"/>
                </Foundation.Core.AssociationEnd.association>
                <Foundation.Core.AssociationEnd.type>
                  <Foundation.Core.Classifier xmi.idref="xmi.79"/>
                </Foundation.Core.AssociationEnd.type>
              </Foundation.Core.AssociationEnd>
            </Foundation.Core.Association.connection>
          </Foundation.Core.Association>
          <Foundation.Core.Association xmi.id="xmi.91" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fb2">
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.Association.connection>
              <Foundation.Core.AssociationEnd xmi.id="xmi.92">
                <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
                <Foundation.Core.AssociationEnd.association>
                  <Foundation.Core.Association xmi.idref="xmi.91"/>
                </Foundation.Core.AssociationEnd.association>
                <Foundation.Core.AssociationEnd.type>
                  <Foundation.Core.Classifier xmi.idref="xmi.65"/>
                </Foundation.Core.AssociationEnd.type>
              </Foundation.Core.AssociationEnd>
              <Foundation.Core.AssociationEnd xmi.id="xmi.93">
                <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                <Foundation.Core.AssociationEnd.aggregation xmi.value="composite"/>
                <Foundation.Core.AssociationEnd.association>
                  <Foundation.Core.Association xmi.idref="xmi.91"/>
                </Foundation.Core.AssociationEnd.association>
                <Foundation.Core.AssociationEnd.type>
                  <Foundation.Core.Classifier xmi.idref="xmi.39"/>
                </Foundation.Core.AssociationEnd.type>
              </Foundation.Core.AssociationEnd>
            </Foundation.Core.Association.connection>
          </Foundation.Core.Association>
          <Foundation.Core.Association xmi.id="xmi.94" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fb1">
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.Association.connection>
              <Foundation.Core.AssociationEnd xmi.id="xmi.95">
                <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
                <Foundation.Core.AssociationEnd.association>
                  <Foundation.Core.Association xmi.idref="xmi.94"/>
                </Foundation.Core.AssociationEnd.association>
                <Foundation.Core.AssociationEnd.type>
                  <Foundation.Core.Classifier xmi.idref="xmi.64"/>
                </Foundation.Core.AssociationEnd.type>
              </Foundation.Core.AssociationEnd>
              <Foundation.Core.AssociationEnd xmi.id="xmi.96">
                <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                <Foundation.Core.AssociationEnd.aggregation xmi.value="composite"/>
                <Foundation.Core.AssociationEnd.association>
                  <Foundation.Core.Association xmi.idref="xmi.94"/>
                </Foundation.Core.AssociationEnd.association>
                <Foundation.Core.AssociationEnd.type>
                  <Foundation.Core.Classifier xmi.idref="xmi.39"/>
                </Foundation.Core.AssociationEnd.type>
              </Foundation.Core.AssociationEnd>
            </Foundation.Core.Association.connection>
          </Foundation.Core.Association>
          <Foundation.Core.Association xmi.id="xmi.97" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fb0">
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.Association.connection>
              <Foundation.Core.AssociationEnd xmi.id="xmi.98">
                <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
                <Foundation.Core.AssociationEnd.association>
                  <Foundation.Core.Association xmi.idref="xmi.97"/>
                </Foundation.Core.AssociationEnd.association>
                <Foundation.Core.AssociationEnd.type>
                  <Foundation.Core.Classifier xmi.idref="xmi.63"/>
                </Foundation.Core.AssociationEnd.type>
              </Foundation.Core.AssociationEnd>
              <Foundation.Core.AssociationEnd xmi.id="xmi.99">
                <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                <Foundation.Core.AssociationEnd.aggregation xmi.value="composite"/>
                <Foundation.Core.AssociationEnd.association>
                  <Foundation.Core.Association xmi.idref="xmi.97"/>
                </Foundation.Core.AssociationEnd.association>
                <Foundation.Core.AssociationEnd.type>
                  <Foundation.Core.Classifier xmi.idref="xmi.39"/>
                </Foundation.Core.AssociationEnd.type>
              </Foundation.Core.AssociationEnd>
            </Foundation.Core.Association.connection>
          </Foundation.Core.Association>
          <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.100">
            <Foundation.Core.ModelElement.name>Mediator</Foundation.Core.ModelElement.name>
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Extension_Mechanisms.Stereotype.extendedElement>
              <Foundation.Core.ModelElement xmi.idref="xmi.2"/>
            </Foundation.Extension_Mechanisms.Stereotype.extendedElement>
          </Foundation.Extension_Mechanisms.Stereotype>
          <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.101">
            <Foundation.Core.ModelElement.name>Singleton</Foundation.Core.ModelElement.name>
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Extension_Mechanisms.Stereotype.extendedElement>
              <Foundation.Core.ModelElement xmi.idref="xmi.3"/>
            </Foundation.Extension_Mechanisms.Stereotype.extendedElement>
          </Foundation.Extension_Mechanisms.Stereotype>
          <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.102">
            <Foundation.Core.ModelElement.name>Interpreter</Foundation.Core.ModelElement.name>
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
          </Foundation.Extension_Mechanisms.Stereotype>
          <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.103">
            <Foundation.Core.ModelElement.name>Interpreter</Foundation.Core.ModelElement.name>
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Extension_Mechanisms.Stereotype.extendedElement>
              <Foundation.Core.ModelElement xmi.idref="xmi.31"/>
            </Foundation.Extension_Mechanisms.Stereotype.extendedElement>
          </Foundation.Extension_Mechanisms.Stereotype>
          <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.104">
            <Foundation.Core.ModelElement.name>Iterator</Foundation.Core.ModelElement.name>
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Extension_Mechanisms.Stereotype.extendedElement>
              <Foundation.Core.ModelElement xmi.idref="xmi.39"/>
              <Foundation.Core.ModelElement xmi.idref="xmi.41"/>
            </Foundation.Extension_Mechanisms.Stereotype.extendedElement>
          </Foundation.Extension_Mechanisms.Stereotype>
          <Behavioral_Elements.Use_Cases.Actor xmi.id="xmi.105" xmi.uuid="-64--88-100-101-357e9a:ebcd920152:-7ffb">
            <Foundation.Core.ModelElement.name>OpenPKG</Foundation.Core.ModelElement.name>
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
          </Behavioral_Elements.Use_Cases.Actor>
          <Behavioral_Elements.Use_Cases.UseCase xmi.id="xmi.106" xmi.uuid="-64--88-100-101-357e9a:ebcd920152:-7ff8">
            <Foundation.Core.ModelElement.name>ReadConfig</Foundation.Core.ModelElement.name>
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.GeneralizableElement.specialization>
              <Foundation.Core.Generalization xmi.idref="xmi.107"/>
            </Foundation.Core.GeneralizableElement.specialization>
          </Behavioral_Elements.Use_Cases.UseCase>
          <Behavioral_Elements.Use_Cases.UseCase xmi.id="xmi.108" xmi.uuid="-64--88-100-101-357e9a:ebcd920152:-7ff7">
            <Foundation.Core.ModelElement.name>RunCommands</Foundation.Core.ModelElement.name>
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.GeneralizableElement.generalization>
              <Foundation.Core.Generalization xmi.idref="xmi.107"/>
            </Foundation.Core.GeneralizableElement.generalization>
          </Behavioral_Elements.Use_Cases.UseCase>
          <Foundation.Core.Generalization xmi.id="xmi.107" xmi.uuid="-64--88-100-101-357e9a:ebcd920152:-7ff6">
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.Generalization.child>
              <Foundation.Core.GeneralizableElement xmi.idref="xmi.108"/>
            </Foundation.Core.Generalization.child>
            <Foundation.Core.Generalization.parent>
              <Foundation.Core.GeneralizableElement xmi.idref="xmi.106"/>
            </Foundation.Core.Generalization.parent>
          </Foundation.Core.Generalization>
          <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.109">
            <Foundation.Core.ModelElement.name>include</Foundation.Core.ModelElement.name>
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Extension_Mechanisms.Stereotype.extendedElement>
              <Foundation.Core.ModelElement xmi.idref="xmi.107"/>
            </Foundation.Extension_Mechanisms.Stereotype.extendedElement>
          </Foundation.Extension_Mechanisms.Stereotype>
          <Foundation.Core.Association xmi.id="xmi.110" xmi.uuid="-64--88-100-101-357e9a:ebcd920152:-7ff5">
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
            <Foundation.Core.Association.connection>
              <Foundation.Core.AssociationEnd xmi.id="xmi.111">
                <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
                <Foundation.Core.AssociationEnd.association>
                  <Foundation.Core.Association xmi.idref="xmi.110"/>
                </Foundation.Core.AssociationEnd.association>
                <Foundation.Core.AssociationEnd.type>
                  <Foundation.Core.Classifier xmi.idref="xmi.105"/>
                </Foundation.Core.AssociationEnd.type>
              </Foundation.Core.AssociationEnd>
              <Foundation.Core.AssociationEnd xmi.id="xmi.112">
                <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
                <Foundation.Core.AssociationEnd.association>
                  <Foundation.Core.Association xmi.idref="xmi.110"/>
                </Foundation.Core.AssociationEnd.association>
                <Foundation.Core.AssociationEnd.type>
                  <Foundation.Core.Classifier xmi.idref="xmi.108"/>
                </Foundation.Core.AssociationEnd.type>
              </Foundation.Core.AssociationEnd>
            </Foundation.Core.Association.connection>
          </Foundation.Core.Association>
          <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.113">
            <Foundation.Core.ModelElement.name>extend</Foundation.Core.ModelElement.name>
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
          </Foundation.Extension_Mechanisms.Stereotype>
          <Foundation.Core.Class xmi.id="xmi.114">
            <Foundation.Core.ModelElement.name>int</Foundation.Core.ModelElement.name>
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.Class.isActive xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
          </Foundation.Core.Class>
          <Foundation.Core.Class xmi.id="xmi.45">
            <Foundation.Core.ModelElement.name>char</Foundation.Core.ModelElement.name>
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.Class.isActive xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
          </Foundation.Core.Class>
          <Foundation.Core.Class xmi.id="xmi.38">
            <Foundation.Core.ModelElement.name>enum</Foundation.Core.ModelElement.name>
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.Class.isActive xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
          </Foundation.Core.Class>
          <Foundation.Core.Class xmi.id="xmi.115">
            <Foundation.Core.ModelElement.name>void</Foundation.Core.ModelElement.name>
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            <Foundation.Core.Class.isActive xmi.value="false"/>
            <Foundation.Core.ModelElement.namespace>
              <Foundation.Core.Namespace xmi.idref="xmi.1"/>
            </Foundation.Core.ModelElement.namespace>
          </Foundation.Core.Class>
        </Foundation.Core.Namespace.ownedElement>
      </Model_Management.Model>
    </XMI.content>

From ossp-cvs-owner@ossp.org  Mon Feb  4 22:57:10 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1AA777650C; Mon,  4 Feb 2002 22:57:10 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc 00TODO
Message-Id: <20020204215710.1AA777650C@mail.ossp.org>
Date: Mon,  4 Feb 2002 22:57:10 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   04-Feb-2002 22:57:10
  Branch: HEAD                             Handle: 2002020421570900

  Modified files:
    ossp-pkg/rc             00TODO

  Log:
    Try to figure out why autoconf is not using external libraries, but do it
    tomorrow ;-)

  Summary:
    Revision    Changes     Path
    1.17        +9  -0      ossp-pkg/rc/00TODO
  ____________________________________________________________________________

  Index: ossp-pkg/rc/00TODO
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 00TODO
  --- ossp-pkg/rc/00TODO	4 Feb 2002 15:11:31 -0000	1.16
  +++ ossp-pkg/rc/00TODO	4 Feb 2002 21:57:09 -0000	1.17
  @@ -1,5 +1,14 @@
   00TODO: Tasks left to accomplish before rc is complete
   
  +!PROBLEMA!
  +$ ./configure
  +checking whether to build against external Dmalloc library... no
  +checking whether to build against external OSSP popt library... no
  +checking whether to build against external OSSP ex library... no
  +checking whether to build against external OSSP Str library... no
  +checking whether to build against external OSSP Var library... no
  +configure: creating ./config.status
  +
   Unfinished business
     Manpage options incorrectly specifies multiple rc.funcs.
     What when multiple command interpreters and one --print or --eval given?

From ossp-cvs-owner@ossp.org  Mon Feb  4 23:03:37 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 16BCE7650C; Mon,  4 Feb 2002 23:03:37 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc .cvsignore
Message-Id: <20020204220337.16BCE7650C@mail.ossp.org>
Date: Mon,  4 Feb 2002 23:03:37 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   04-Feb-2002 23:03:37
  Branch: HEAD                             Handle: 2002020422033600

  Modified files:
    ossp-pkg/rc             .cvsignore

  Log:
    Ignore the newborn generation (?)

  Summary:
    Revision    Changes     Path
    1.2         +3  -1      ossp-pkg/rc/.cvsignore
  ____________________________________________________________________________

  Index: ossp-pkg/rc/.cvsignore
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 .cvsignore
  --- ossp-pkg/rc/.cvsignore	8 Jan 2002 15:56:13 -0000	1.1
  +++ ossp-pkg/rc/.cvsignore	4 Feb 2002 22:03:36 -0000	1.2
  @@ -5,7 +5,9 @@
   config.cache
   config.guess
   config.sub
  -config.h
  +rc_config.h.in
  +rc_config.h
   libtool.m4
  +rc-sample.5
   shtool
   rc.1

From ossp-cvs-owner@ossp.org  Mon Feb  4 23:19:30 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E96E57650C; Mon,  4 Feb 2002 23:19:29 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc .cvsignore Makefile.in configure.in
Message-Id: <20020204221929.E96E57650C@mail.ossp.org>
Date: Mon,  4 Feb 2002 23:19:29 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   04-Feb-2002 23:19:29
  Branch: HEAD                             Handle: 2002020422192900

  Modified files:
    ossp-pkg/rc             .cvsignore Makefile.in configure.in

  Log:
    More configuration changes, trying to fix the build.

  Summary:
    Revision    Changes     Path
    1.3         +1  -0      ossp-pkg/rc/.cvsignore
    1.4         +22 -15     ossp-pkg/rc/Makefile.in
    1.7         +1  -1      ossp-pkg/rc/configure.in
  ____________________________________________________________________________

  Index: ossp-pkg/rc/.cvsignore
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 .cvsignore
  --- ossp-pkg/rc/.cvsignore	4 Feb 2002 22:03:36 -0000	1.2
  +++ ossp-pkg/rc/.cvsignore	4 Feb 2002 22:19:29 -0000	1.3
  @@ -9,5 +9,6 @@
   rc_config.h
   libtool.m4
   rc-sample.5
  +ltmain.sh
   shtool
   rc.1
  Index: ossp-pkg/rc/Makefile.in
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 Makefile.in
  --- ossp-pkg/rc/Makefile.in	4 Feb 2002 21:46:00 -0000	1.3
  +++ ossp-pkg/rc/Makefile.in	4 Feb 2002 22:19:29 -0000	1.4
  @@ -52,35 +52,40 @@
   POD2MAN         = pod2man
   TRUE            = true
   
  -TARGET          = $(TARGET_PROGS) $(TARGET_MANS) $(TARGET_TESTS)
  +TARGET          = $(TARGET_PROGS) $(TARGET_MANS)
   TARGET_PROGS    = rc
  -TARGET_MANS     = rc.1
  -TARGET_TESTS    = rc_test
  +TARGET_MANS     = rc.1 rc-sample.5
   
  -PROG_OBJS       = rc.o
  -TST_OBJS        = rc_test.o
  +PROG_OBJS       = rc.o rc_version.o
   
  -SUBDIRS         = @SUBDIR_EX@ @SUBDIR_VAR@ @SUBDIR_STR@
  +SUBDIRS         = @SUBDIR_EX@ @SUBDIR_VAR@ @SUBDIR_STR@ @SUBDIR_POPT@
   
   all:            $(SUBDIRS) $(TARGET)
   
   .c.o:
   	$(CC) $(CPPFLAGS) $(CFLAGS) -c $<
   
  -$(TARGET_TEST): $(TST_OBJS)
  -	@$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $(TST_NAME) $(TST_OBJS) $(LIB_NAME) $(LIBS)
  +$(PROG): Makefile $(OBJS) $(HDRS)
  +	$(CC) $(LDFLAGS) -o $(PROG) $(OBJS) $(LIBS)
   
  -check: $(TARGET_TEST)
  -	@$(LIBTOOL) --mode=execute ./$(TST_NAME)
  +rc.1: rc.pod
  +	VS=`$(SHTOOL) version -lc -dshort rc_version.c`; \
  +	VL=`$(SHTOOL) version -lc -dlong rc_version.c`; \
  +	$(POD2MAN) --section=5 --center="OSSP Run-command processor" \
  +               --release="$$VS" --date="$$VL" \
  +               rc.pod >rc.1
  +
  +rc-sample.5: rc-sample.pod
  +	VS=`$(SHTOOL) version -lc -dshort rc_version.c`; \
  +	VL=`$(SHTOOL) version -lc -dlong rc_version.c`; \
  +	$(POD2MAN) --section=5 --center="OSSP Run-command processor samples" \
  +               --release="$$VS" --date="$$VL" \
  +               rc-sample.pod >rc-sample.5
   
  -install:
  +install: all
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
   
  -uninstall:
  -	-$(RMDIR) $(DESTDIR)$(bindir) >/dev/null 2>&1 || $(TRUE)
  -	-$(RMDIR) $(DESTDIR)$(prefix) >/dev/null 2>&1 || $(TRUE)
  -
   clean:
   	-$(RM) $(TARGET_PROG) $(PROG_OBJS)
   	-$(RM) $(TARGET_TST) $(TST_OBJS)
  @@ -95,3 +100,5 @@
   	-$(RM) shtool
   	-$(RM) ltmain.sh libtool.m4 config.guess config.sub
   
  +check: rc
  +	@./test.sh
  Index: ossp-pkg/rc/configure.in
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 configure.in
  --- ossp-pkg/rc/configure.in	4 Feb 2002 21:46:00 -0000	1.6
  +++ ossp-pkg/rc/configure.in	4 Feb 2002 22:19:29 -0000	1.7
  @@ -77,7 +77,7 @@
                    CFLAGS="$CFLAGS -Irc_popt"
                    LDFLAGS="$LDFLAGS -Lrc_popt/.libs"
                    LIBS_EXTRA="$LIBS_EXTRA -lpopt"])
  -AC_SUBST(SUBDIR_EX)
  +AC_SUBST(SUBDIR_POPT)
   
   dnl Check for OSSP ex library
   AC_CHECK_EXTLIB([OSSP ex],

From ossp-cvs-owner@ossp.org  Mon Feb  4 23:23:27 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7A7707650C; Mon,  4 Feb 2002 23:23:27 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc_design.ps
Message-Id: <20020204222327.7A7707650C@mail.ossp.org>
Date: Mon,  4 Feb 2002 23:23:27 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   04-Feb-2002 23:23:27
  Branch: HEAD                             Handle: 2002020422232600

  Modified files:
    ossp-pkg/rc             rc_design.ps

  Log:
    Fixed some patterns and changed File aggregation, but still partially wrong.

  Summary:
    Revision    Changes     Path
    1.2         +889 -712   ossp-pkg/rc/rc_design.ps
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc_design.ps
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 rc_design.ps
  --- ossp-pkg/rc/rc_design.ps	4 Feb 2002 21:52:31 -0000	1.1
  +++ ossp-pkg/rc/rc_design.ps	4 Feb 2002 22:23:26 -0000	1.2
  @@ -1,10 +1,10 @@
   %!PS-Adobe-3.0
   %%Pages: (atend)
  -%%BoundingBox: 33 519 565 802
  -%%HiResBoundingBox: 33.611426 519.249170 564.928076 801.482349
  +%%BoundingBox: 33 511 565 806
  +%%HiResBoundingBox: 33.611426 511.882544 564.928076 805.165649
   %...................................
   %%Creator: AFPL Ghostscript 650 (pswrite)
  -%%CreationDate: 2002/02/04 15:40:40
  +%%CreationDate: 2002/02/04 20:37:26
   %%DocumentData: Clean7Bit
   %%LanguageLevel: 2
   %%EndComments
  @@ -61,519 +61,572 @@
   %%EndPageSetup
   gsave mark
   Q q
  -320 5176.38 5345.4 2896 re
  +320 5102.71 5345.4 2969.66 re
   Y
   255 G
  -3358.73 7736.27 441.996 271.644 re
  +3358.73 7773.11 441.996 271.644 re
   f*
   4.60413 w
   K
  -3358.73 7736.27 441.996 271.644 re
  +3358.73 7773.11 441.996 271.644 re
   S
   255 G
  -3358.73 7915.83 441.996 92.0825 re
  +3358.73 7952.67 441.996 92.0825 re
   f*
   K
  -3358.73 7915.83 441.996 92.0825 re
  +3358.73 7952.67 441.996 92.0825 re
   S
  -3551 7948 24 30 /5U
  +3551 7985 24 30 /5U
   $C
   -EQK^f3eRXs0)HUZ/L)9"6%#gs8W,&pe)@'-i~>
   ,
  -3579 7947 26 32 /1F
  +3579 7984 26 32 /1F
   $C
   1_L@A*$RLi6+RBfhO_2[^X36)s8Vi^bticdXgG4,@>1se'JQ0~>
   ,
   255 G
  -3358.73 7823.75 441.996 92.0825 re
  +3358.73 7860.59 441.996 92.0825 re
   f*
   K
  -3358.73 7823.75 441.996 92.0825 re
  +3358.73 7860.59 441.996 92.0825 re
   S
   255 G
  -3358.73 7731.67 441.996 92.0825 re
  +3358.73 7768.5 441.996 92.0825 re
   f*
   K
  -3358.73 7731.67 441.996 92.0825 re
  +3358.73 7768.5 441.996 92.0825 re
   S
   255 G
  -4611.05 7639.59 704.432 345.31 re
  +4500.55 7658 704.432 382.143 re
   f*
   K
  -4611.05 7639.59 704.432 345.31 re
  +4500.55 7658 704.432 382.143 re
   S
   255 G
  -4611.05 7911.23 704.432 73.666 re
  +4500.55 7966.48 704.432 73.666 re
   f*
   K
  -4611.05 7911.23 704.432 73.666 re
  +4500.55 7966.48 704.432 73.666 re
   S
  -4811 7925 20 20 /5Y
  +4701 7980 20 20 /5Y
   $C
   $47In";DtTJq=.l@;`p!%N'.miJ.gqE8eS~>
   ,
  -4835 7925 5Y ,
  -4859 7924 24 32 /1J
  +4725 7980 5Y ,
  +4749 7979 24 32 /1J
   $C
   4q\EK*$RRk60SU<>sJ@HKV;rXB>NO1#Sdo(8Q:<<3^<X[HJ7"ZQ&;sX'E~>
   ,
  -4887 7925 4 30 /6C
  +4777 7980 4 30 /6C
   $X
   nF5r:nF5r:nF5r:nF5r:nF5r:nF-DX!!$tWE,Y~>
   ,
  -4897 7925 17 23 /1N
  +4787 7980 17 23 /1N
   $C
   -EPVps8W-!s8V!VCC#tIj6]5gTE~>
   ,
  -4918 7916 20 32 /6G
  +4808 7971 20 32 /6G
   $C
   3$ef)M;t7]p@ZGO((bd1-$W1g:;)/Ws7a;%Y,jHgm!B+U~>
   ,
  -4943 7925 4 30 /1R
  +4833 7980 4 30 /1R
   $X
   nF5r:nF5r:nF5r:nF5r:nF5r:nF5r:nF5r:nF-~>
   ,
  -4951 7924 21 24 /6K
  +4840 7979 21 24 /6K
   $C
   4ubjWU/pJ)o^nXGa4DK=eutC#s8-MICbV-3[1"G~>
   ,
  -4973 7924 11 29 /1V
  +4862 7979 11 29 /1V
   $X
   #J^l.+5e1?*WR5]*WR5]*WR5]*WR5]*WR5]*WR5]*WR5]*WR5]s5<q8s54pu*WR5]*WR5]*WQ~>
   ,
  -4985 7924 20 24 /6O
  +4875 7979 20 24 /6O
   $C
   4=hW>d49H-])$a1e,TIHYJ"k_Q*@\He1dN~>
   ,
  -5010 7925 1N ,
  -5032 7924 21 21 /1Z
  +4900 7980 1N ,
  +4922 7979 21 21 /1Z
   $C
   P@"QM@,SqW*#LYD_[IM5,mY2-TRqh(&6LJ7-i~>
   ,
  -5056 7924 1Z ,
  +4946 7979 1Z ,
   255 G
  -4611.05 7819.15 704.432 92.0825 re
  +4500.55 7874.4 704.432 92.0825 re
   f*
   K
  -4611.05 7819.15 704.432 92.0825 re
  +4500.55 7874.4 704.432 92.0825 re
   S
  -4825 7850 1F ,
  -4854 7850 6O ,
  -4879 7851 1N ,
  -4899 7851 11 30 /6S
  +4714 7906 1F ,
  +4743 7906 6O ,
  +4768 7907 1N ,
  +4788 7907 11 30 /6S
   $X
   *WR5]*WR5]*WR5]*WR5]*WR5]*WR5]*WR5]*WR5]*WR5]*WZ5us5<q8*WR5]*WR5]*rmD@&)[QJ~>
   ,
  -4912 7851 6C ,
  -4921 7842 6G ,
  -4945 7850 18 23 /2D
  +4802 7907 6C ,
  +4810 7898 6G ,
  +4834 7906 18 23 /2D
   $C
   2E4CB:IK.]62.SWs8W-!s8W*~>
   ,
  -4969 7851 11 23 /6W
  +4858 7907 11 23 /6W
   $X
   n,VqXn,VqXn,VqXn,VqXn,VqXn,VqXn,VqXn,W4`p]13ls1nBepYbZ$!Pe~>
   ,
  -4981 7850 20 24 /2H
  +4871 7906 20 24 /2H
   $C
   2Fj-#WbRAmKqS9ks51Q3Qa+HP_FS<b*r#\MCaESqTr7~>
   ,
  -5002 7850 1V ,
  -5016 7851 6C ,
  -5024 7850 6O ,
  -5049 7851 1N ,
  +4892 7906 1V ,
  +4905 7907 6C ,
  +4914 7906 6O ,
  +4939 7907 1N ,
   255 G
  -4615.65 7902.02 695.224 13.8123 re
  +4505.15 7957.27 695.224 13.8123 re
   f*
  -4615.65 7902.02 695.224 13.8123 re
  +4505.15 7957.27 695.224 13.8123 re
   S
  -4611.05 7727.07 704.432 92.0825 re
  +4500.55 7782.32 704.432 92.0825 re
   f*
   K
  -4611.05 7727.07 704.432 92.0825 re
  +4500.55 7782.32 704.432 92.0825 re
   S
  -4631 7769 10 3 /7A
  +4521 7825 10 3 /7A
   $X
   s1nZMs1e~>
   ,
  -4645 7758 2D ,
  -4669 7759 1N ,
  -4691 7759 6C ,
  -4700 7750 20 32 /2L
  -$C
  -2*_,e%ghLaQ&Pngl.>c]s8TM$m9A<Q'+YOg-N~>
  -,
  -4724 7758 2D ,
  -4746 7758 6K ,
  -4772 7759 4 30 /7E
  -$X
  -nF5r:nF5r:nF5r:nF5r:nF5r:nF5r:nF5r:nF-~>
  -,
  -4782 7759 1N ,
  -4803 7758 18 24 /2P
  +4534 7814 18 24 /2L
   $C
   3%Q3:d49H-[<g^F$@F*3TW!c*$O`D/GQ-5e`EKY~>
   ,
  -4823 7758 1V ,
  -4836 7758 2H ,
  -4860 7759 1N ,
  -4882 7758 19 24 /7I
  +4552 7808 25 2 /7E
   $C
  -4=hjTM-Ih+f@+NcEW?'EHM=8Mg=o6=>-OY~>
  +-D4i~>
   ,
  -4902 7758 6K ,
  -4941 7759 4 22 /2V
  +4581 7815 4 30 /2P
   $X
  -nF5r:zzz!!)NXnF-~>
  +nF5r:nF5r:nF5r:nF5r:nF5r:nF5r:nF5r:nF-~>
   ,
  -4961 7758 1F ,
  -4990 7758 6O ,
  -5015 7759 1N ,
  -5035 7759 6S ,
  -5048 7759 6C ,
  -5057 7750 6G ,
  -5081 7758 2D ,
  -5105 7759 6W ,
  -5117 7758 2H ,
  -5138 7758 1V ,
  -5152 7759 6C ,
  -5160 7758 6O ,
  -5185 7759 1N ,
  -255 G
  -4611.05 7634.98 704.432 92.0825 re
  -f*
  -K
  -4611.05 7634.98 704.432 92.0825 re
  -S
  -4631 7666 20 21 /7O
  +4591 7815 1N ,
  +4612 7814 2L ,
  +4632 7814 1V ,
  +4645 7814 2H ,
  +4669 7815 1N ,
  +4690 7814 19 24 /7I
   $C
  -1r'(jjO?#3V>pSq~>
  +4=hjTM-Ih+f@+NcEW?'EHM=8Mg=o6=>-OY~>
  +,
  +4711 7814 6K ,
  +4750 7815 4 22 /2V
  +$X
  +nF5r:zzz!!)NXnF-~>
   ,
  -4656 7666 1F ,
  -4685 7666 6O ,
  -4710 7667 1N ,
  -4730 7667 6S ,
  -4743 7667 6C ,
  -4751 7658 6G ,
  -4775 7666 2D ,
  -4799 7667 6W ,
  -4812 7666 2H ,
  -4833 7666 1V ,
  -4847 7667 6C ,
  -4855 7666 6O ,
  -4880 7667 1N ,
  -4903 7658 9 39 /2Z
  +4770 7814 1F ,
  +4799 7814 6O ,
  +4824 7815 1N ,
  +4844 7815 6S ,
  +4857 7815 6C ,
  +4865 7806 6G ,
  +4889 7814 2D ,
  +4914 7815 6W ,
  +4926 7814 2H ,
  +4947 7814 1V ,
  +4961 7815 6C ,
  +4969 7814 6O ,
  +4994 7815 1N ,
  +255 G
  +4500.55 7653.4 704.432 128.916 re
  +f*
  +K
  +4500.55 7653.4 704.432 128.916 re
  +S
  +4519 7721 23 30 /7O
  +$C
  +0[7?3^&NTZr_5amo8Mf.rqHH*\8:d'g[G%=p]%l~>
  +,
  +4544 7721 1F ,
  +4573 7721 6O ,
  +4598 7722 1N ,
  +4618 7722 6S ,
  +4632 7722 6C ,
  +4640 7713 6G ,
  +4664 7721 2D ,
  +4688 7722 6W ,
  +4701 7721 2H ,
  +4722 7721 1V ,
  +4735 7722 6C ,
  +4743 7721 6O ,
  +4768 7722 1N ,
  +4791 7713 9 39 /2Z
   $X
   !It7P#6556%KIOM)ur)$49.>@GQ;sgGQ;sgp]0d`n,VqXn,VqXn,VqXn,VqXp]1'hGQ;sgGQ9]'
   49.JD)uq#[%KHt=#64i+"+U~>
   ,
  -4915 7658 10 39 /0D
  +4803 7713 10 39 /0D
   $X
   ?iY-G2uko<)uprY*WQZM%fd+?#65!Z#Cm&0#J^GW"2G#S"2G#S"2G#S"2G#S#J^S[#Cm&0#Cm$Z
   %fd+?%KIOM)uqqu2ummt?iU~>
   ,
  +4521 7666 20 21 /3D
  +$C
  +1r'(jjO?#3V>pSq~>
  +,
  +4544 7658 6G ,
  +4567 7666 6K ,
  +4589 7666 1V ,
  +4605 7667 2P ,
  +4615 7667 1N ,
  +4636 7666 2L ,
  +4656 7666 1V ,
  +4670 7666 2H ,
  +4694 7667 1N ,
  +4715 7666 7I ,
  +4735 7666 6K ,
  +4760 7658 2Z ,
  +4772 7658 0D ,
   255 G
  -4053.95 7114.72 441.996 271.644 re
  +4053.95 6746.39 441.996 547.891 re
   f*
   K
  -4053.95 7114.72 441.996 271.644 re
  +4053.95 6746.39 441.996 547.891 re
   S
   255 G
  -4053.95 7294.28 441.996 92.0825 re
  +4053.95 7220.61 441.996 73.666 re
   f*
   K
  -4053.95 7294.28 441.996 92.0825 re
  +4053.95 7220.61 441.996 73.666 re
   S
  -4173 7327 20 30 /3D
  -$C
  --EmILs8W'`L]1Rds8W'c6*Ge~>
  -,
  -4196 7327 6C ,
  -4207 7327 1R ,
  -4214 7326 6K ,
  -4238 7326 29 32 /0H
  -$C
  --P?\G%Z'Z%+Pe0r-e!4O5O3I\s8Vf,p&2#YCMbS1.g?Wk<YQBI~>
  -,
  -4270 7318 20 32 /3H
  -$C
  --EmILr4r.>VhqP75As?dl2Ue_fD=4g/Z"amq[8.O~>
  -,
  -4291 7326 1V ,
  -4305 7327 6C ,
  -4313 7326 6O ,
  -4338 7327 1N ,
  +4148 7234 5Y ,
  +4172 7234 5Y ,
  +4198 7234 2P ,
  +4206 7233 1V ,
  +4218 7233 6K ,
  +4244 7234 6W ,
  +4256 7233 2H ,
  +4277 7233 1V ,
  +4290 7233 6O ,
  +4315 7234 6W ,
  +4328 7233 1Z ,
  +4352 7233 1Z ,
   255 G
  -4053.95 7202.19 441.996 92.0825 re
  +4053.95 7128.53 441.996 92.0825 re
   f*
   K
  -4053.95 7202.19 441.996 92.0825 re
  +4053.95 7128.53 441.996 92.0825 re
   S
  +4173 7161 20 30 /0H
  +$C
  +-EmILs8W'`L]1Rds8W'c6*Ge~>
  +,
  +4196 7161 6C ,
  +4207 7161 1R ,
  +4214 7160 6K ,
  +4238 7160 1F ,
  +4267 7160 6O ,
  +4292 7161 1N ,
  +4312 7161 6S ,
  +4325 7161 6C ,
  +4334 7152 6G ,
   255 G
  -4053.95 7110.11 441.996 92.0825 re
  +4058.55 7211.4 432.788 13.8123 re
   f*
  -K
  -4053.95 7110.11 441.996 92.0825 re
  +4058.55 7211.4 432.788 13.8123 re
   S
  -255 G
  -4611.05 7114.72 441.996 271.644 re
  +4053.95 7036.45 441.996 92.0825 re
   f*
   K
  -4611.05 7114.72 441.996 271.644 re
  +4053.95 7036.45 441.996 92.0825 re
   S
   255 G
  -4611.05 7294.28 441.996 92.0825 re
  +4053.95 6741.78 441.996 294.664 re
   f*
   K
  -4611.05 7294.28 441.996 92.0825 re
  +4053.95 6741.78 441.996 294.664 re
   S
  -4633 7327 22 30 /0L
  +4074 6976 3D ,
  +4099 6976 1J ,
  +4124 6976 1V ,
  +4138 6976 2H ,
  +4162 6977 6W ,
  +4173 6976 1V ,
  +4187 6968 2Z ,
  +4199 6968 0D ,
  +4074 6920 3D ,
  +4100 6921 24 30 /3H
  +$C
  +-EQKYrjr)e+9%V1f;7g+l$qrD?i"*D?C1Rk?e8Y8~>
  +,
  +4127 6920 6K ,
  +4151 6921 19 22 /0L
  +$C
  +-ENcmqGu%RoW=s.Z!+l@mY`/ZqfJEpp??[gJ,~>
  +,
  +4170 6920 1V ,
  +4185 6912 2Z ,
  +4197 6912 0D ,
  +4074 6865 3D ,
  +4101 6866 2P ,
  +4109 6865 2L ,
  +4133 6866 22 30 /3L
   $C
   -D98XVuQesr^0'Q/O0:8s,bkthu~>
   ,
  -4660 7327 1N ,
  -4680 7327 20 22 /3L
  +4159 6866 1N ,
  +4180 6865 20 31 /0P
   $C
  -1N`Ypo#K1np?@(odeip<p?V&3Xo~>
  +4?-$H:IM:'K<J%be,TIHYJ4i0@9AnD=CG_>p]~>
   ,
  -4703 7327 6C ,
  -4713 7327 6W ,
  -4725 7326 6O ,
  -4750 7327 1N ,
  -4773 7327 29 23 /0P
  +4206 6857 2Z ,
  +4217 6857 0D ,
  +4074 6810 3D ,
  +4099 6810 1F ,
  +4128 6810 2D ,
  +4153 6811 6W ,
  +4166 6811 6W ,
  +4178 6810 6K ,
  +4203 6811 1N ,
  +4223 6810 1V ,
  +4238 6802 2Z ,
  +4250 6802 0D ,
  +4074 6755 3D ,
  +4101 6756 22 30 /3P
   $C
  --EPI\5QCc`s8W-!s8W,un+F'b5`"u5+ui%UdnsO-TE~>
  +-EmILs8VWuA`;aC_gT;Ws'O45EE^50~>
   ,
  -4805 7326 6K ,
  -4830 7327 1N ,
  -4851 7326 1V ,
  -4864 7326 0H ,
  -4896 7318 3H ,
  -4917 7326 1V ,
  -4931 7327 6C ,
  -4939 7326 6O ,
  -4964 7327 1N ,
  -255 G
  -4611.05 7202.19 441.996 92.0825 re
  -f*
  -K
  -4611.05 7202.19 441.996 92.0825 re
  -S
  +4126 6755 2H ,
  +4150 6756 6W ,
  +4162 6755 2L ,
  +4183 6755 6K ,
  +4208 6747 2Z ,
  +4220 6747 0D ,
   255 G
  -4611.05 7110.11 441.996 92.0825 re
  +4611.05 6948.97 441.996 345.31 re
   f*
   K
  -4611.05 7110.11 441.996 92.0825 re
  +4611.05 6948.97 441.996 345.31 re
   S
   255 G
  -5163.55 7114.72 483.434 271.644 re
  +4611.05 7220.61 441.996 73.666 re
   f*
   K
  -5163.55 7114.72 483.434 271.644 re
  +4611.05 7220.61 441.996 73.666 re
   S
  +4705 7234 5Y ,
  +4729 7234 5Y ,
  +4756 7234 2P ,
  +4763 7233 1V ,
  +4776 7233 6K ,
  +4801 7234 6W ,
  +4813 7233 2H ,
  +4834 7233 1V ,
  +4847 7233 6O ,
  +4872 7234 6W ,
  +4885 7233 1Z ,
  +4909 7233 1Z ,
   255 G
  -5163.55 7294.28 483.434 92.0825 re
  +4611.05 7128.53 441.996 92.0825 re
   f*
   K
  -5163.55 7294.28 483.434 92.0825 re
  +4611.05 7128.53 441.996 92.0825 re
   S
  -5184 7326 1F ,
  -5213 7326 6O ,
  -5238 7327 0P ,
  -5272 7327 0P ,
  -5306 7326 2H ,
  -5330 7327 1N ,
  -5351 7326 20 31 /3P
  +4633 7161 3L ,
  +4660 7161 1N ,
  +4680 7161 20 22 /0T
   $C
  -4?-$H:IM:'K<J%be,TIHYJ4i0@9AnD=CG_>p]~>
  +1N`Ypo#K1np?@(odeip<p?V&3Xo~>
   ,
  -5376 7327 19 30 /0T
  +4703 7161 6C ,
  +4713 7161 6W ,
  +4725 7160 6O ,
  +4750 7161 1N ,
  +4773 7161 29 23 /3T
   $C
  --D@'nli7"bs8W-!s8Vi~>
  +-EPI\5QCc`s8W-!s8W,un+F'b5`"u5+ui%UdnsO-TE~>
  +,
  +4805 7160 6K ,
  +4830 7161 1N ,
  +4851 7160 1V ,
  +4864 7160 29 32 /0X
  +$C
  +-P?\G%Z'Z%+Pe0r-e!4O5O3I\s8Vf,p&2#YCMbS1.g?Wk<YQBI~>
   ,
  -5398 7327 6C ,
  -5408 7327 1N ,
  -5429 7326 6K ,
  -5453 7326 0H ,
  -5486 7318 3H ,
  -5507 7326 1V ,
  -5520 7327 6C ,
  -5528 7326 6O ,
  -5553 7327 1N ,
  +4896 7152 20 32 /3X
  +$C
  +-EmILr4r.>VhqP75As?dl2Ue_fD=4g/Z"amq[8.O~>
  +,
  +4917 7160 1V ,
  +4931 7161 6C ,
  +4939 7160 6O ,
  +4964 7161 1N ,
  +255 G
  +4615.65 7211.4 432.788 13.8123 re
  +f*
  +4615.65 7211.4 432.788 13.8123 re
  +S
  +4611.05 7036.45 441.996 92.0825 re
  +f*
  +K
  +4611.05 7036.45 441.996 92.0825 re
  +S
   255 G
  -5163.55 7202.19 483.434 92.0825 re
  +4611.05 6944.36 441.996 92.0825 re
   f*
   K
  -5163.55 7202.19 483.434 92.0825 re
  +4611.05 6944.36 441.996 92.0825 re
   S
   255 G
  -5163.55 7110.11 483.434 92.0825 re
  +5163.55 6948.97 483.434 345.31 re
   f*
   K
  -5163.55 7110.11 483.434 92.0825 re
  +5163.55 6948.97 483.434 345.31 re
   S
   255 G
  -4611.05 6525.39 441.996 271.644 re
  +5163.55 7220.61 483.434 73.666 re
   f*
   K
  -4611.05 6525.39 441.996 271.644 re
  +5163.55 7220.61 483.434 73.666 re
   S
  +5276 7234 5Y ,
  +5300 7234 5Y ,
  +5326 7234 2P ,
  +5334 7233 1V ,
  +5346 7233 6K ,
  +5372 7234 6W ,
  +5384 7233 2H ,
  +5405 7233 1V ,
  +5418 7233 6O ,
  +5443 7234 6W ,
  +5456 7233 1Z ,
  +5480 7233 1Z ,
   255 G
  -4611.05 6704.95 441.996 92.0825 re
  +5163.55 7128.53 483.434 92.0825 re
   f*
   K
  -4611.05 6704.95 441.996 92.0825 re
  +5163.55 7128.53 483.434 92.0825 re
   S
  -4767 6736 30 32 /3W
  +5184 7160 1F ,
  +5213 7160 6O ,
  +5238 7161 3T ,
  +5272 7161 3T ,
  +5306 7160 2H ,
  +5330 7161 1N ,
  +5351 7160 0P ,
  +5376 7161 19 30 /1B
   $C
  -1D16Y:5JC##TKQYds?>Lmn`r?s1@+e^&-](Df%"QL(^`-:rQUj$3~>
  -,
  -4795 6728 24 32 /1A
  -$C
  --El<Vqg?3U&#Y8-lmDA^Ibk&$hqS2"^"2KX/m.,CC@+7~>
  -,
  -4822 6736 11 29 /4A
  -$X
  -HiX-GrW)Efn,VqXn,RD-GQ;sgGQ;sg49.JD49.JD49-E&*WR5]s58CbJ)Ch;%fd+?#65!Z#64~>
  -,
  -4833 6737 10 30 /1E
  -$X
  -n,VqXn,VqXn,R\5GQ;sgGQ9]'49.JD49.JD)uq#[*WR5]*WQ]N%fd(>zz#Cm&0"+UKh~>
  -,
  -4842 6736 21 24 /4E
  -$C
  -3&j4QU/pc9F`1"S\,YmPs4dL[]t1Gb<[uTV~>
  -,
  -4865 6737 21 23 /1I
  -$C
  --ENd<s0hq,s4_JlrVa5"hV,dXg=[H!C*BM~>
  +-D@'nli7"bs8W-!s8Vi~>
   ,
  +5398 7161 6C ,
  +5408 7161 1N ,
  +5429 7160 6K ,
  +5453 7160 0X ,
  +5486 7152 3X ,
  +5507 7160 1V ,
  +5520 7161 6C ,
  +5528 7160 6O ,
  +5553 7161 1N ,
   255 G
  -4611.05 6612.87 441.996 92.0825 re
  +5168.15 7211.4 474.225 13.8123 re
  +f*
  +5168.15 7211.4 474.225 13.8123 re
  +S
  +5163.55 7036.45 483.434 92.0825 re
   f*
   K
  -4611.05 6612.87 441.996 92.0825 re
  +5163.55 7036.45 483.434 92.0825 re
   S
   255 G
  -4611.05 6520.78 441.996 92.0825 re
  +5163.55 6944.36 483.434 92.0825 re
   f*
   K
  -4611.05 6520.78 441.996 92.0825 re
  +5163.55 6944.36 483.434 92.0825 re
   S
   255 G
  -3358.73 7068.68 441.996 345.31 re
  +3358.73 7013.43 441.996 345.31 re
   f*
   K
  -3358.73 7068.68 441.996 345.31 re
  +3358.73 7013.43 441.996 345.31 re
   S
   255 G
  -3358.73 7340.32 441.996 73.666 re
  +3358.73 7285.07 441.996 73.666 re
   f*
   K
  -3358.73 7340.32 441.996 73.666 re
  +3358.73 7285.07 441.996 73.666 re
   S
  -3444 7354 5Y ,
  -3468 7354 5Y ,
  -3491 7354 26 30 /4J
  +3444 7299 5Y ,
  +3468 7299 5Y ,
  +3491 7299 26 30 /4B
   $C
   -EPdJF`lSflb<%Qg<6C:J$/):>BTqRlhKjq?bc~>
   ,
  -3519 7353 3P ,
  -3543 7353 2H ,
  -3566 7345 3H ,
  -3587 7353 1V ,
  -3599 7353 6K ,
  -3624 7354 6W ,
  -3637 7353 1Z ,
  -3661 7353 1Z ,
  +3519 7298 0P ,
  +3543 7298 2H ,
  +3566 7290 3X ,
  +3587 7298 1V ,
  +3599 7298 6K ,
  +3624 7299 6W ,
  +3637 7298 1Z ,
  +3661 7298 1Z ,
   255 G
  -3358.73 7248.24 441.996 92.0825 re
  +3358.73 7192.99 441.996 92.0825 re
   f*
   K
  -3358.73 7248.24 441.996 92.0825 re
  +3358.73 7192.99 441.996 92.0825 re
   S
  -3509 7280 0T ,
  -3530 7279 6O ,
  -3553 7271 6G ,
  -3576 7271 6G ,
  -3599 7279 6K ,
  -3624 7280 6W ,
  +3509 7225 1B ,
  +3530 7224 6O ,
  +3553 7216 6G ,
  +3576 7216 6G ,
  +3599 7224 6K ,
  +3624 7225 6W ,
   255 G
  -3363.33 7331.11 432.788 13.8123 re
  +3363.33 7275.86 432.788 13.8123 re
   f*
  -3363.33 7331.11 432.788 13.8123 re
  +3363.33 7275.86 432.788 13.8123 re
   S
  -3358.73 7156.15 441.996 92.0825 re
  +3358.73 7100.9 441.996 92.0825 re
   f*
   K
  -3358.73 7156.15 441.996 92.0825 re
  +3358.73 7100.9 441.996 92.0825 re
   S
   255 G
  -3358.73 7064.07 441.996 92.0825 re
  +3358.73 7008.82 441.996 92.0825 re
   f*
   K
  -3358.73 7064.07 441.996 92.0825 re
  +3358.73 7008.82 441.996 92.0825 re
   S
   255 G
  -2106.4 7639.59 441.996 345.31 re
  +2106.4 7773.11 441.996 271.644 re
   f*
   K
  -2106.4 7639.59 441.996 345.31 re
  +2106.4 7773.11 441.996 271.644 re
   S
   255 G
  -2106.4 7911.23 441.996 73.666 re
  +2106.4 7952.67 441.996 92.0825 re
   f*
   K
  -2106.4 7911.23 441.996 73.666 re
  +2106.4 7952.67 441.996 92.0825 re
   S
  -2164 7925 5Y ,
  -2188 7925 5Y ,
  -2214 7925 7E ,
  -2225 7925 1N ,
  -2245 7924 1V ,
  -2257 7924 6K ,
  -2282 7925 6W ,
  -2295 7916 3H ,
  -2319 7925 6W ,
  -2331 7924 6K ,
  -2353 7924 1V ,
  -2365 7924 6K ,
  -2390 7925 6W ,
  -2403 7924 1Z ,
  -2427 7924 1Z ,
  +2226 7985 3P ,
  +2252 7985 6W ,
  +2264 7984 6O ,
  +2287 7984 7I ,
  +2308 7984 6K ,
  +2331 7984 2L ,
  +2351 7984 2L ,
  +2372 7984 6O ,
  +2397 7985 6W ,
   255 G
  -2106.4 7819.15 441.996 92.0825 re
  +2106.4 7860.59 441.996 92.0825 re
   f*
   K
  -2106.4 7819.15 441.996 92.0825 re
  +2106.4 7860.59 441.996 92.0825 re
   S
  -2226 7851 22 30 /1N
  -$C
  --EmILs8VWuA`;aC_gT;Ws'O45EE^50~>
  -,
  -2252 7851 6W ,
  -2264 7850 6O ,
  -2287 7850 7I ,
  -2308 7850 6K ,
  -2331 7850 2P ,
  -2351 7850 2P ,
  -2372 7850 6O ,
  -2397 7851 6W ,
   255 G
  -2111.01 7902.02 432.788 13.8123 re
  -f*
  -2111.01 7902.02 432.788 13.8123 re
  -S
  -2106.4 7727.07 441.996 92.0825 re
  +2106.4 7768.5 441.996 92.0825 re
   f*
   K
  -2106.4 7727.07 441.996 92.0825 re
  -S
  -255 G
  -2106.4 7634.98 441.996 92.0825 re
  -f*
  -K
  -2106.4 7634.98 441.996 92.0825 re
  +2106.4 7768.5 441.996 92.0825 re
   S
   255 G
   1553.91 7114.72 460.413 271.644 re
  @@ -591,7 +644,7 @@
   1753 7326 7I ,
   1776 7327 6W ,
   1788 7327 6C ,
  -1798 7318 3H ,
  +1798 7318 3X ,
   1819 7326 1V ,
   255 G
   1553.91 7202.19 460.413 92.0825 re
  @@ -601,23 +654,20 @@
   S
   1574 7244 7A ,
   1587 7233 6K ,
  -1612 7234 0T ,
  +1612 7234 1B ,
   1634 7233 2H ,
  -1658 7234 17 23 /1N
  -$C
  --EPVps8W-!s8V!VCC#tIj6]5gTE~>
  -,
  +1658 7234 1N ,
   1679 7225 6G ,
   1718 7234 2V ,
   1737 7233 6K ,
   1762 7234 1N ,
   1784 7233 2D ,
  -1808 7234 0P ,
  -1853 7239 20 10 /1P
  +1808 7234 3T ,
  +1853 7239 20 10 /1F
   $C
   -D@3UJDZPedGP~>
   ,
  -1889 7233 19 30 /4P
  +1889 7233 19 30 /4F
   $C
   4?-*-:)sHVXm,jiqLAPFs8TM+YO-71@;JrB@6a~>
   ,
  @@ -628,454 +678,426 @@
   1553.91 7110.11 460.413 92.0825 re
   S
   255 G
  -2106.4 7050.26 441.996 345.31 re
  -f*
  -K
  -2106.4 7050.26 441.996 345.31 re
  -S
  -255 G
  -2106.4 7321.9 441.996 73.666 re
  +2106.4 7110.11 441.996 271.644 re
   f*
   K
  -2106.4 7321.9 441.996 73.666 re
  +2106.4 7110.11 441.996 271.644 re
   S
  -2200 7336 5Y ,
  -2225 7336 5Y ,
  -2251 7336 7E ,
  -2258 7335 1V ,
  -2271 7335 6K ,
  -2296 7336 6W ,
  -2309 7335 2H ,
  -2330 7335 1V ,
  -2342 7335 6O ,
  -2367 7336 6W ,
  -2380 7335 1Z ,
  -2404 7335 1Z ,
   255 G
  -2106.4 7229.82 441.996 92.0825 re
  +2106.4 7289.67 441.996 92.0825 re
   f*
   K
  -2106.4 7229.82 441.996 92.0825 re
  +2106.4 7289.67 441.996 92.0825 re
   S
  -2262 7262 5U ,
  -2290 7261 1F ,
  -2322 7262 3D ,
  -2345 7262 6C ,
  -2356 7262 1R ,
  -2363 7261 6K ,
  +2262 7322 5U ,
  +2290 7321 26 32 /5W
  +$C
  +1_L@A*$RLi6+RBfhO_2[^X36)s8Vi^bticdXgG4,@>1se'JQ0~>
  +,
  +2322 7322 0H ,
  +2345 7322 6C ,
  +2356 7322 1R ,
  +2363 7321 6K ,
   255 G
  -2111.01 7312.69 432.788 13.8123 re
  -f*
  -2111.01 7312.69 432.788 13.8123 re
  -S
  -2106.4 7137.74 441.996 92.0825 re
  +2106.4 7197.59 441.996 92.0825 re
   f*
   K
  -2106.4 7137.74 441.996 92.0825 re
  +2106.4 7197.59 441.996 92.0825 re
   S
   255 G
  -2106.4 7045.65 441.996 92.0825 re
  +2106.4 7105.51 441.996 92.0825 re
   f*
   K
  -2106.4 7045.65 441.996 92.0825 re
  +2106.4 7105.51 441.996 92.0825 re
   S
   255 G
  -2658.9 7050.26 441.996 345.31 re
  +2658.9 7110.11 441.996 271.644 re
   f*
   K
  -2658.9 7050.26 441.996 345.31 re
  +2658.9 7110.11 441.996 271.644 re
   S
   255 G
  -2658.9 7321.9 441.996 73.666 re
  +2658.9 7289.67 441.996 92.0825 re
   f*
   K
  -2658.9 7321.9 441.996 73.666 re
  +2658.9 7289.67 441.996 92.0825 re
   S
  -2753 7336 5Y ,
  -2777 7336 5Y ,
  -2803 7336 7E ,
  -2811 7335 1V ,
  -2823 7335 6K ,
  -2848 7336 6W ,
  -2861 7335 2H ,
  -2882 7335 1V ,
  -2895 7335 6O ,
  -2920 7336 6W ,
  -2933 7335 1Z ,
  -2957 7335 1Z ,
  +2796 7322 0H ,
  +2820 7321 2D ,
  +2844 7322 1N ,
  +2865 7321 7I ,
  +2889 7322 0H ,
  +2912 7322 6C ,
  +2922 7322 1R ,
  +2929 7321 6K ,
   255 G
  -2658.9 7229.82 441.996 92.0825 re
  +2658.9 7197.59 441.996 92.0825 re
   f*
   K
  -2658.9 7229.82 441.996 92.0825 re
  +2658.9 7197.59 441.996 92.0825 re
   S
  -2796 7262 3D ,
  -2820 7261 2D ,
  -2844 7262 1N ,
  -2865 7261 7I ,
  -2889 7262 3D ,
  -2912 7262 6C ,
  -2922 7262 1R ,
  -2929 7261 6K ,
   255 G
  -2663.5 7312.69 432.788 13.8123 re
  -f*
  -2663.5 7312.69 432.788 13.8123 re
  -S
  -2658.9 7137.74 441.996 92.0825 re
  +2658.9 7105.51 441.996 92.0825 re
   f*
   K
  -2658.9 7137.74 441.996 92.0825 re
  +2658.9 7105.51 441.996 92.0825 re
   S
   255 G
  -2658.9 7045.65 441.996 92.0825 re
  +2401.07 6410.28 441.996 271.644 re
   f*
   K
  -2658.9 7045.65 441.996 92.0825 re
  +2401.07 6410.28 441.996 271.644 re
   S
   255 G
  -2401.07 6451.72 441.996 271.644 re
  +2401.07 6589.85 441.996 92.0825 re
   f*
   K
  -2401.07 6451.72 441.996 271.644 re
  +2401.07 6589.85 441.996 92.0825 re
   S
  -255 G
  -2401.07 6631.28 441.996 92.0825 re
  -f*
  -K
  -2401.07 6631.28 441.996 92.0825 re
  -S
  -2589 6664 27 30 /1U
  +2589 6622 27 30 /4K
   $C
   -EmCFs1A=*A-hXL0qJ@#s7m+V^OQ~>
   ,
  -2614 6664 1E ,
  -2623 6664 10 30 /4U
  +2614 6622 10 30 /1O
  +$X
  +n,VqXn,VqXn,R\5GQ;sgGQ9]'49.JD49.JD)uq#[*WR5]*WQ]N%fd(>zz#Cm&0"+UKh~>
  +,
  +2623 6622 10 30 /4O
   $X
   n,VqXn,VqXDub+_GQ;sgGQ9i+49.JD49-?$*WR5]*WR5]%KI">%fd+?%fcib#Cm&0#Clo,"2G#S~>
   ,
  -2632 6663 21 24 /1Y
  +2632 6621 21 24 /1S
   $C
   3%YA1M;+\UFaZ4+O806>YKJ-ImHq%+L).`q:r7_~>
   ,
   255 G
  -2401.07 6539.2 441.996 92.0825 re
  +2401.07 6497.76 441.996 92.0825 re
   f*
   K
  -2401.07 6539.2 441.996 92.0825 re
  +2401.07 6497.76 441.996 92.0825 re
   S
  -2421 6581 7A ,
  -2434 6589 13 12 /4Z
  +2421 6540 7A ,
  +2434 6548 13 12 /4T
   $X
   &3q(?4R`ls&&8^kJ,"NgF#X7%#64u/~>
   ,
  -2450 6570 2P ,
  -2471 6571 18 22 /2D
  +2450 6529 2L ,
  +2471 6530 18 22 /1X
   $C
   -D3l7_n1-%Dg(O)h7_RV\JuIU~>
   ,
  -2494 6571 24 30 /5D
  -$C
  --EQKYrjr)e+9%V1f;7g+l$qrD?i"*D?C1Rk?e8Y8~>
  -,
  -2523 6570 2H ,
  -2547 6571 0P ,
  -2579 6570 6K ,
  -2618 6571 2V ,
  -2637 6570 7I ,
  -2660 6571 17 30 /2H
  +2494 6530 3H ,
  +2523 6529 2H ,
  +2547 6530 3T ,
  +2579 6529 6K ,
  +2618 6530 2V ,
  +2637 6529 7I ,
  +2660 6530 17 30 /4X
   $C
   -EPVps8W-!s8V!VCCMi"a4fl45QCW~>
   ,
  -2682 6570 20 24 /2H
  -$C
  -2Fj-#WbRAmKqS9ks51Q3Qa+HP_FS<b*r#\MCaESqTr7~>
  -,
  -2706 6571 6W ,
  +2682 6529 2H ,
  +2706 6530 6W ,
   255 G
  -2401.07 6447.12 441.996 92.0825 re
  +2401.07 6405.68 441.996 92.0825 re
   f*
   K
  -2401.07 6447.12 441.996 92.0825 re
  +2401.07 6405.68 441.996 92.0825 re
   S
  +2421 6437 3D ,
  +2445 6429 6G ,
  +2468 6437 6K ,
  +2490 6437 1V ,
  +2504 6438 3H ,
  +2533 6437 2H ,
  +2557 6438 3T ,
  +2590 6437 6K ,
  +2615 6429 2Z ,
  +2627 6429 0D ,
   255 G
  -743.58 5788.73 441.996 271.644 re
  +1296.08 5751.89 441.996 271.644 re
   f*
   K
  -743.58 5788.73 441.996 271.644 re
  +1296.08 5751.89 441.996 271.644 re
   S
   255 G
  -743.58 5968.29 441.996 92.0825 re
  +1296.08 5931.45 441.996 92.0825 re
   f*
   K
  -743.58 5968.29 441.996 92.0825 re
  +1296.08 5931.45 441.996 92.0825 re
   S
  -819 6000 1F ,
  -848 6000 6O ,
  -873 6001 1N ,
  -893 6001 6S ,
  -907 6001 6C ,
  -915 5992 6G ,
  -939 6000 1J ,
  -966 6000 6K ,
  -989 6000 7I ,
  -1008 6000 1V ,
  -1022 6001 6C ,
  -1030 6000 6O ,
  -1055 6001 1N ,
  +1372 5963 5W ,
  +1401 5963 6O ,
  +1426 5964 1N ,
  +1446 5964 6S ,
  +1459 5964 6C ,
  +1467 5955 6G ,
  +1491 5963 1J ,
  +1518 5963 6K ,
  +1541 5963 7I ,
  +1561 5963 1V ,
  +1574 5964 6C ,
  +1583 5963 6O ,
  +1608 5964 1N ,
   255 G
  -743.58 5876.21 441.996 92.0825 re
  +1296.08 5839.37 441.996 92.0825 re
   f*
   K
  -743.58 5876.21 441.996 92.0825 re
  +1296.08 5839.37 441.996 92.0825 re
   S
   255 G
  -743.58 5784.12 441.996 92.0825 re
  +1296.08 5747.29 441.996 92.0825 re
   f*
   K
  -743.58 5784.12 441.996 92.0825 re
  +1296.08 5747.29 441.996 92.0825 re
   S
   255 G
  -1296.08 5788.73 441.996 271.644 re
  +1848.57 5751.89 441.996 271.644 re
   f*
   K
  -1296.08 5788.73 441.996 271.644 re
  +1848.57 5751.89 441.996 271.644 re
   S
   255 G
  -1296.08 5968.29 441.996 92.0825 re
  +1848.57 5931.45 441.996 92.0825 re
   f*
   K
  -1296.08 5968.29 441.996 92.0825 re
  +1848.57 5931.45 441.996 92.0825 re
   S
  -1365 6001 24 30 /2J
  +1917 5964 24 30 /2B
   $C
   -D8'oo'#j-g[FUGrU9dds8)b$I<Fdn9,4NV~>
   ,
  -1391 6000 6K ,
  -1413 6001 6S ,
  -1427 6000 2H ,
  -1450 6000 18 23 /2D
  -$C
  -2E4CB:IK.]62.SWs8W-!s8W*~>
  -,
  -1474 6001 1R ,
  -1480 6000 1V ,
  -1494 6000 1J ,
  -1520 6000 6K ,
  -1543 6000 7I ,
  -1563 6000 1V ,
  -1577 6001 6C ,
  -1585 6000 6O ,
  -1610 6001 1N ,
  +1944 5963 6K ,
  +1966 5964 6S ,
  +1980 5963 2H ,
  +2003 5963 2D ,
  +2027 5964 1R ,
  +2033 5963 1V ,
  +2046 5963 1J ,
  +2073 5963 6K ,
  +2096 5963 7I ,
  +2116 5963 1V ,
  +2129 5964 6C ,
  +2137 5963 6O ,
  +2162 5964 1N ,
   255 G
  -1296.08 5876.21 441.996 92.0825 re
  +1848.57 5839.37 441.996 92.0825 re
   f*
   K
  -1296.08 5876.21 441.996 92.0825 re
  +1848.57 5839.37 441.996 92.0825 re
   S
   255 G
  -1296.08 5784.12 441.996 92.0825 re
  +1848.57 5747.29 441.996 92.0825 re
   f*
   K
  -1296.08 5784.12 441.996 92.0825 re
  +1848.57 5747.29 441.996 92.0825 re
   S
   255 G
  -1848.57 5788.73 441.996 271.644 re
  +2401.07 5751.89 441.996 271.644 re
   f*
   K
  -1848.57 5788.73 441.996 271.644 re
  +2401.07 5751.89 441.996 271.644 re
   S
   255 G
  -1848.57 5968.29 441.996 92.0825 re
  +2401.07 5931.45 441.996 92.0825 re
   f*
   K
  -1848.57 5968.29 441.996 92.0825 re
  +2401.07 5931.45 441.996 92.0825 re
   S
  -1945 6001 0L ,
  -1971 6001 6W ,
  -1985 6001 6W ,
  -1997 6000 6O ,
  -2022 6001 6W ,
  -2035 6000 1J ,
  -2061 6000 6K ,
  -2084 6000 7I ,
  -2104 6000 1V ,
  -2118 6001 6C ,
  -2126 6000 6O ,
  -2151 6001 1N ,
  +2497 5964 3L ,
  +2524 5964 6W ,
  +2538 5964 6W ,
  +2549 5963 6O ,
  +2574 5964 6W ,
  +2587 5963 1J ,
  +2614 5963 6K ,
  +2637 5963 7I ,
  +2657 5963 1V ,
  +2670 5964 6C ,
  +2678 5963 6O ,
  +2703 5964 1N ,
   255 G
  -1848.57 5876.21 441.996 92.0825 re
  +2401.07 5839.37 441.996 92.0825 re
   f*
   K
  -1848.57 5876.21 441.996 92.0825 re
  +2401.07 5839.37 441.996 92.0825 re
   S
   255 G
  -1848.57 5784.12 441.996 92.0825 re
  +2401.07 5747.29 441.996 92.0825 re
   f*
   K
  -1848.57 5784.12 441.996 92.0825 re
  +2401.07 5747.29 441.996 92.0825 re
   S
   255 G
  -2401.07 5788.73 441.996 271.644 re
  +2953.56 5751.89 441.996 271.644 re
   f*
   K
  -2401.07 5788.73 441.996 271.644 re
  +2953.56 5751.89 441.996 271.644 re
   S
   255 G
  -2401.07 5968.29 441.996 92.0825 re
  +2953.56 5931.45 441.996 92.0825 re
   f*
   K
  -2401.07 5968.29 441.996 92.0825 re
  +2953.56 5931.45 441.996 92.0825 re
   S
  -2449 6000 1F ,
  -2478 6000 6O ,
  -2503 6001 0P ,
  -2538 6001 0P ,
  -2570 6000 6O ,
  -2595 6001 1N ,
  -2617 6000 1J ,
  -2644 6000 6K ,
  -2667 6000 7I ,
  -2687 6000 1V ,
  -2700 6001 6C ,
  -2708 6000 6O ,
  -2733 6001 1N ,
  +3002 5963 5W ,
  +3031 5963 6O ,
  +3056 5964 3T ,
  +3090 5964 3T ,
  +3123 5963 6O ,
  +3148 5964 1N ,
  +3170 5963 1J ,
  +3196 5963 6K ,
  +3219 5963 7I ,
  +3239 5963 1V ,
  +3253 5964 6C ,
  +3261 5963 6O ,
  +3286 5964 1N ,
   255 G
  -2401.07 5876.21 441.996 92.0825 re
  +2953.56 5839.37 441.996 92.0825 re
   f*
   K
  -2401.07 5876.21 441.996 92.0825 re
  +2953.56 5839.37 441.996 92.0825 re
   S
   255 G
  -2401.07 5784.12 441.996 92.0825 re
  +2953.56 5747.29 441.996 92.0825 re
   f*
   K
  -2401.07 5784.12 441.996 92.0825 re
  +2953.56 5747.29 441.996 92.0825 re
   S
   255 G
  -2953.56 5788.73 460.413 271.644 re
  +3506.06 5751.89 460.413 271.644 re
   f*
   K
  -2953.56 5788.73 460.413 271.644 re
  +3506.06 5751.89 460.413 271.644 re
   S
   255 G
  -2953.56 5968.29 460.413 92.0825 re
  +3506.06 5931.45 460.413 92.0825 re
   f*
   K
  -2953.56 5968.29 460.413 92.0825 re
  +3506.06 5931.45 460.413 92.0825 re
   S
  -3058 6000 24 31 /2L
  +3610 5963 24 31 /5B
   $C
   4q\EGSIog'&:.(!Ds@<%s8W-!s8W-!s1e~>
   ,
  -3086 6000 2P ,
  -3106 6000 6K ,
  -3132 6001 6W ,
  -3144 6000 1J ,
  -3171 6000 6K ,
  -3194 6000 7I ,
  -3214 6000 1V ,
  -3227 6001 6C ,
  -3235 6000 6O ,
  -3260 6001 1N ,
  +3638 5963 2L ,
  +3659 5963 6K ,
  +3684 5964 6W ,
  +3697 5963 1J ,
  +3723 5963 6K ,
  +3747 5963 7I ,
  +3766 5963 1V ,
  +3780 5964 6C ,
  +3788 5963 6O ,
  +3813 5964 1N ,
   255 G
  -2953.56 5876.21 460.413 92.0825 re
  +3506.06 5839.37 460.413 92.0825 re
   f*
   K
  -2953.56 5876.21 460.413 92.0825 re
  +3506.06 5839.37 460.413 92.0825 re
   S
  -2974 5918 7A ,
  -2987 5907 6K ,
  -3012 5908 0T ,
  -3034 5907 2H ,
  -3058 5908 1N ,
  -3079 5899 6G ,
  -3117 5908 2V ,
  -3137 5907 6K ,
  -3162 5908 1N ,
  -3184 5907 2D ,
  -3208 5908 0P ,
  -3253 5913 1P ,
  -3288 5907 4P ,
  +3526 5882 7A ,
  +3539 5871 6K ,
  +3564 5872 1B ,
  +3586 5871 2H ,
  +3610 5872 1N ,
  +3631 5863 6G ,
  +3670 5872 2V ,
  +3689 5871 6K ,
  +3714 5872 1N ,
  +3736 5871 2D ,
  +3760 5872 3T ,
  +3805 5877 1F ,
  +3841 5871 4F ,
   255 G
  -2953.56 5784.12 460.413 92.0825 re
  +3506.06 5747.29 460.413 92.0825 re
   f*
   K
  -2953.56 5784.12 460.413 92.0825 re
  +3506.06 5747.29 460.413 92.0825 re
   S
   255 G
  -1848.57 5199.4 441.996 271.644 re
  +2401.07 5125.73 441.996 271.644 re
   f*
   K
  -1848.57 5199.4 441.996 271.644 re
  +2401.07 5125.73 441.996 271.644 re
   S
   255 G
  -1848.57 5378.96 441.996 92.0825 re
  +2401.07 5305.29 441.996 92.0825 re
   f*
   K
  -1848.57 5378.96 441.996 92.0825 re
  +2401.07 5305.29 441.996 92.0825 re
   S
  -1995 5410 26 32 /5M
  +2548 5337 26 32 /2G
   $C
   3"cdE*>.>J"*JNJ^\7^&X^IA+R=i?`JP[g@WYW.rp>;ot%4_i5@]`!)~>
   ,
  -2022 5410 1Y ,
  -2045 5410 20 24 /2Q
  +2574 5337 1S ,
  +2597 5337 20 24 /5G
   $C
   2D#//M*o,he\+3EI"0uO_-LttD-KWO>)&[~>
   ,
  -2067 5410 4A ,
  -2077 5411 1E ,
  -2086 5410 4E ,
  -2109 5411 1I ,
  +2619 5337 11 29 /2K
  +$X
  +HiX-GrW)Efn,VqXn,RD-GQ;sgGQ;sg49.JD49.JD49-E&*WR5]s58CbJ)Ch;%fd+?#65!Z#64~>
  +,
  +2630 5338 1O ,
  +2639 5337 21 24 /5K
  +$C
  +3&j4QU/pc9F`1"S\,YmPs4dL[]t1Gb<[uTV~>
  +,
  +2662 5338 21 23 /2O
  +$C
  +-ENd<s0hq,s4_JlrVa5"hV,dXg=[H!C*BM~>
  +,
   255 G
  -1848.57 5286.88 441.996 92.0825 re
  +2401.07 5213.21 441.996 92.0825 re
   f*
   K
  -1848.57 5286.88 441.996 92.0825 re
  +2401.07 5213.21 441.996 92.0825 re
   S
   255 G
  -1848.57 5194.79 441.996 92.0825 re
  +2401.07 5121.13 441.996 92.0825 re
   f*
   K
  -1848.57 5194.79 441.996 92.0825 re
  +2401.07 5121.13 441.996 92.0825 re
   S
   255 G
  -633.081 7740.88 441.996 271.644 re
  +633.081 7777.71 441.996 271.644 re
   f*
   K
  -633.081 7740.88 441.996 271.644 re
  +633.081 7777.71 441.996 271.644 re
   S
   255 G
  -633.081 7920.44 441.996 92.0825 re
  +633.081 7957.27 441.996 92.0825 re
   f*
   K
  -633.081 7920.44 441.996 92.0825 re
  +633.081 7957.27 441.996 92.0825 re
   S
  -749 7953 24 30 /5R
  +749 7990 24 30 /5P
   $C
   -\)0rs8W-!s8W,@W#+q~>
   ,
  -777 7953 6W ,
  -789 7952 2H ,
  -813 7953 1N ,
  -834 7952 2P ,
  -857 7953 1R ,
  -865 7952 2H ,
  -886 7952 1V ,
  -899 7952 6O ,
  -924 7953 6W ,
  +777 7990 6W ,
  +789 7989 2H ,
  +813 7990 1N ,
  +834 7989 2L ,
  +857 7990 1R ,
  +865 7989 2H ,
  +886 7989 1V ,
  +899 7989 6O ,
  +924 7990 6W ,
   255 G
  -633.081 7828.36 441.996 92.0825 re
  +633.081 7865.19 441.996 92.0825 re
   f*
   K
  -633.081 7828.36 441.996 92.0825 re
  +633.081 7865.19 441.996 92.0825 re
   S
   255 G
  -633.081 7736.27 441.996 92.0825 re
  +633.081 7773.11 441.996 92.0825 re
   f*
   K
  -633.081 7736.27 441.996 92.0825 re
  +633.081 7773.11 441.996 92.0825 re
   S
   255 G
   890.912 7114.72 441.996 271.644 re
  @@ -1090,18 +1112,15 @@
   890.912 7294.28 441.996 92.0825 re
   S
   994 7326 1J ,
  -1021 7318 19 31 /2V
  +1021 7318 19 31 /2T
   $C
   ,G+XomOrMUI\694U>>j_/,sLRrnT7+\mP>B~>
   ,
   1044 7327 1N ,
   1064 7326 1V ,
   1077 7326 2H ,
  -1099 7327 19 22 /5V
  -$C
  --ENcmqGu%RoW=s.Z!+l@mY`/ZqfJEpp??[gJ,~>
  -,
  -1120 7327 5R ,
  +1099 7327 0L ,
  +1120 7327 5P ,
   1147 7327 6W ,
   1159 7326 6K ,
   1182 7326 6K ,
  @@ -1130,17 +1149,17 @@
   338.416 7294.28 441.996 92.0825 re
   S
   423 7326 1J ,
  -450 7318 2V ,
  -473 7327 0P ,
  -506 7326 20 31 /2Z
  +450 7318 2T ,
  +473 7327 3T ,
  +506 7326 20 31 /5T
   $C
   4ukK7oH#?gK`/SK](c7)qd8Z)['mMTMX>R'+92<~>
   ,
   528 7326 6O ,
   553 7327 1R ,
  -560 7327 5R ,
  +560 7327 5P ,
   587 7326 2H ,
  -610 7326 2Z ,
  +610 7326 5T ,
   634 7327 1R ,
   641 7326 6K ,
   255 G
  @@ -1155,168 +1174,246 @@
   K
   338.416 7110.11 441.996 92.0825 re
   S
  -4832.05 7386.36 0 257.83 S
   255 G
  -4832.05 7639.59 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
  +4647.88 6028.14 418.976 400.559 re
  +f*
  +K
  +4647.88 6028.14 418.976 400.559 re
  +S
  +255 G
  +4647.88 6336.62 418.976 92.0825 re
  +f*
   K
  -4832.05 7639.59 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
  +4647.88 6336.62 418.976 92.0825 re
  +S
  +4751 6368 0X ,
  +4783 6360 3X ,
  +4804 6368 1V ,
  +4818 6369 6C ,
  +4826 6368 6O ,
  +4851 6369 1N ,
  +4874 6369 1B ,
  +4896 6369 6C ,
  +4904 6368 2L ,
  +4924 6368 1V ,
  +255 G
  +4647.88 6207.7 418.976 128.916 re
  +f*
  +K
  +4647.88 6207.7 418.976 128.916 re
  +S
  +4668 6287 7A ,
  +4683 6277 1N ,
  +4705 6276 5W ,
  +4734 6276 6O ,
  +4758 6276 2D ,
  +4782 6277 1N ,
  +4802 6276 1V ,
  +4830 6277 2V ,
  +4850 6277 6C ,
  +4860 6277 1N ,
  +4880 6276 1V ,
  +4668 6232 7A ,
  +4681 6240 4T ,
  +4698 6213 3X ,
  +4719 6222 0T ,
  +4744 6222 3L ,
  +4771 6222 1R ,
  +4778 6221 6K ,
  +4803 6222 3T ,
  +4835 6221 6K ,
  +4860 6222 1N ,
  +4880 6221 1V ,
  +4908 6222 2V ,
  +4927 6222 0T ,
  +4948 6221 6O ,
  +4972 6222 6C ,
  +4980 6221 0P ,
  +255 G
  +4647.88 6023.54 418.976 184.165 re
  +f*
  +K
  +4647.88 6023.54 418.976 184.165 re
  +S
  +4668 6147 3D ,
  +4692 6147 2H ,
  +4715 6147 0P ,
  +4738 6147 0P ,
  +4764 6148 3L ,
  +4790 6148 1R ,
  +4797 6147 6K ,
  +4822 6148 3T ,
  +4855 6147 6K ,
  +4880 6148 1N ,
  +4900 6147 1V ,
  +4915 6139 2Z ,
  +4926 6139 0D ,
  +4668 6092 3D ,
  +4691 6092 0P ,
  +4715 6092 6K ,
  +4740 6093 1R ,
  +4750 6093 3L ,
  +4776 6093 1R ,
  +4784 6092 6K ,
  +4809 6093 3T ,
  +4841 6092 6K ,
  +4866 6093 1N ,
  +4886 6092 1V ,
  +4901 6084 2Z ,
  +4913 6084 0D ,
  +4668 6036 3D ,
  +4691 6028 6G ,
  +4715 6036 6K ,
  +4737 6036 1V ,
  +4750 6036 5W ,
  +4779 6036 6O ,
  +4803 6036 2D ,
  +4827 6037 1N ,
  +4847 6036 1V ,
  +4862 6028 2Z ,
  +4873 6028 0D ,
  +4832.05 7303.49 0 359.12 S
  +255 G
  +4832.05 7658 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
  +K
  +4832.05 7658 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
   S
  -4871 7404 4P ,
  -4896 7405 4 4 /5Z
  +4871 7344 4F ,
  +4896 7345 4 4 /2X
   $X
   nF5r:~>
   ,
  -4907 7405 5Z ,
  -4919 7405 11 30 /3D
  +4907 7345 2X ,
  +4919 7345 11 30 /5X
   $X
   !T4":!T4":!T4":!T4":!T4":!T4":!T4":!T4":!T4":!T4":!T="9s5<q8&)[QJ!T4":!8mk8~>
   ,
  -4279.55 7386.36 0 147.33 552.5 0 0 110.5 S
  -255 G
  -4832.05 7639.59 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
  -K
  -4832.05 7639.59 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
  -S
  -4300 7418 4P ,
  -4325 7419 5Z ,
  -4337 7419 5Z ,
  -4348 7419 3D ,
  -5384.54 7386.36 0 147.33 -552.5 0 0 119.71 S
  +4279.55 7294.28 0 202.58 552.5 0 0 156.54 S
   255 G
   4832.05 7648.8 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
   K
   4832.05 7648.8 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
   S
  -5423 7408 4P ,
  -5448 7409 5Z ,
  -5460 7409 5Z ,
  -5471 7409 3D ,
  -4832.05 7110.11 0 -313.08 S
  -255 G
  -4832.05 6801.64 -32.23 55.25 64.46 0 f*
  -K
  -4832.05 6801.64 -32.23 55.25 64.46 0 H
  -S
  -4279.55 7110.11 0 -165.75 552.5 0 0 -147.33 S
  -255 G
  -4832.05 6801.64 -32.23 55.25 64.46 0 f*
  -K
  -4832.05 6801.64 -32.23 55.25 64.46 0 H
  -S
  -5384.54 7110.11 0 -165.75 -552.5 0 0 -147.33 S
  -255 G
  -4832.05 6801.64 -32.23 55.25 64.46 0 f*
  -K
  -4832.05 6801.64 -32.23 55.25 64.46 0 H
  -S
  -3805.33 7902.02 805.72 0 S
  +4314 7330 4F ,
  +4339 7331 2X ,
  +4350 7331 2X ,
  +4362 7331 5X ,
  +5384.54 7303.49 0 193.37 -552.5 0 0 165.75 S
  +255 G
  +4832.05 7658 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
  +K
  +4832.05 7658 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
  +S
  +5414 7330 4F ,
  +5439 7331 2X ,
  +5451 7331 2X ,
  +5462 7331 5X ,
  +3805.33 7902.02 695.22 0 S
   255 G
   3805.33 7902.02 46.04 23.02 46.04 -23.02 -46.04 -23.02 f*
   K
   3805.33 7902.02 46.04 23.02 46.04 -23.02 -46.04 -23.02 H
   S
  -3579.72 7413.98 0 317.68 S
  +3579.72 7367.94 0 400.56 S
   2553 7902.02 805.72 0 S
   255 G
   3354.12 7902.02 -46.04 -23.02 -46.04 23.02 46.04 23.02 f*
   K
   3354.12 7902.02 -46.04 -23.02 -46.04 23.02 46.04 23.02 H
   S
  -2578 7924 4P ,
  -2603 7925 5Z ,
  -2615 7925 5Z ,
  -2626 7925 3D ,
  -2327.4 7054.86 0 -147.33 294.66 0 0 -184.17 S
  +2587 7924 4F ,
  +2612 7925 2X ,
  +2624 7925 2X ,
  +2635 7925 5X ,
  +2327.4 7105.51 0 -197.98 294.66 0 0 -225.6 S
   255 G
  -2622.06 6727.97 -32.23 55.25 64.46 0 f*
  +2622.06 6686.53 -32.23 55.25 64.46 0 f*
   K
  -2622.06 6727.97 -32.23 55.25 64.46 0 H
  +2622.06 6686.53 -32.23 55.25 64.46 0 H
   S
  -2879.9 7045.65 0 -138.12 -257.83 0 0 -184.17 S
  +2327.4 7381.76 0 386.75 S
   255 G
  -2622.06 6727.97 -32.23 55.25 64.46 0 f*
  +2327.4 7763.9 23.02 -46.04 -23.02 -46.04 ^ f*
   K
  -2622.06 6727.97 -32.23 55.25 64.46 0 H
  +2327.4 7763.9 23.02 -46.04 -23.02 -46.04 ^ H
   S
  -2327.4 7404.78 0 239.41 S
  +2364 7419 5X ,
  +2387 7419 2X ,
  +2398 7419 2X ,
  +2407 7437 4T ,
  +1774.91 7386.36 0 147.33 552.5 0 0 234.81 S
   255 G
  -2327.4 7639.59 23.02 -46.04 -23.02 -46.04 ^ f*
  +2327.4 7763.9 23.02 -46.04 -23.02 -46.04 ^ f*
   K
  -2327.4 7639.59 23.02 -46.04 -23.02 -46.04 ^ H
  +2327.4 7763.9 23.02 -46.04 -23.02 -46.04 ^ H
   S
  -2373 7437 3D ,
  -2396 7437 5Z ,
  -2407 7437 5Z ,
  -2416 7455 4Z ,
  -1774.91 7386.36 0 147.33 552.5 0 0 110.5 S
  +1802 7419 5X ,
  +1825 7419 2X ,
  +1836 7419 2X ,
  +1845 7437 4T ,
  +2879.9 7381.76 0 151.94 -552.5 0 0 234.81 S
   255 G
  -2327.4 7639.59 23.02 -46.04 -23.02 -46.04 ^ f*
  +2327.4 7763.9 23.02 -46.04 -23.02 -46.04 ^ f*
   K
  -2327.4 7639.59 23.02 -46.04 -23.02 -46.04 ^ H
  +2327.4 7763.9 23.02 -46.04 -23.02 -46.04 ^ H
   S
  -1802 7423 3D ,
  -1825 7423 5Z ,
  -1836 7423 5Z ,
  -1845 7441 4Z ,
  -2879.9 7395.57 0 138.12 -552.5 0 0 101.29 S
  +2919 7399 4F ,
  +2944 7400 2X ,
  +2955 7400 2X ,
  +2967 7400 5X ,
  +2622.06 5747.29 0 -349.91 S
   255 G
  -2327.4 7630.38 23.02 -46.04 -23.02 -46.04 ^ f*
  +2622.06 5401.98 -32.23 55.25 64.46 0 f*
   K
  -2327.4 7630.38 23.02 -46.04 -23.02 -46.04 ^ H
  +2622.06 5401.98 -32.23 55.25 64.46 0 H
   S
  -2905 7413 4P ,
  -2930 7414 5Z ,
  -2941 7414 5Z ,
  -2953 7414 3D ,
  -2069.57 5784.12 0 -313.08 S
  +2069.57 5747.29 0 -165.75 552.5 0 0 -184.17 S
   255 G
  -2069.57 5475.65 -32.23 55.25 64.46 0 f*
  +2622.06 5401.98 -32.23 55.25 64.46 0 f*
   K
  -2069.57 5475.65 -32.23 55.25 64.46 0 H
  +2622.06 5401.98 -32.23 55.25 64.46 0 H
   S
  -1517.07 5784.12 0 -165.75 552.5 0 0 -147.33 S
  +1517.07 5747.29 0 -165.75 1104.99 0 0 -184.17 S
   255 G
  -2069.57 5475.65 -32.23 55.25 64.46 0 f*
  +2622.06 5401.98 -32.23 55.25 64.46 0 f*
   K
  -2069.57 5475.65 -32.23 55.25 64.46 0 H
  +2622.06 5401.98 -32.23 55.25 64.46 0 H
   S
  -964.58 5784.12 0 -165.75 1104.99 0 0 -147.33 S
  +3174.56 5747.29 0 -165.75 -552.5 0 0 -184.17 S
   255 G
  -2069.57 5475.65 -32.23 55.25 64.46 0 f*
  +2622.06 5401.98 -32.23 55.25 64.46 0 f*
   K
  -2069.57 5475.65 -32.23 55.25 64.46 0 H
  +2622.06 5401.98 -32.23 55.25 64.46 0 H
   S
  -2622.06 5784.12 0 -165.75 -552.5 0 0 -147.33 S
  +3727.06 5747.29 0 -165.75 -1104.99 0 0 -184.17 S
   255 G
  -2069.57 5475.65 -32.23 55.25 64.46 0 f*
  +2622.06 5401.98 -32.23 55.25 64.46 0 f*
   K
  -2069.57 5475.65 -32.23 55.25 64.46 0 H
  +2622.06 5401.98 -32.23 55.25 64.46 0 H
   S
  -3174.56 5784.12 0 -165.75 -1104.99 0 0 -147.33 S
  +3174.56 6023.54 0 184.17 -552.5 0 0 197.98 S
   255 G
  -2069.57 5475.65 -32.23 55.25 64.46 0 f*
  +2622.06 6401.08 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
   K
  -2069.57 5475.65 -32.23 55.25 64.46 0 H
  -S
  -2622.06 6060.37 0 386.75 S
  -2622.06 6442.51 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
  -2622.06 6442.51 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
  +2622.06 6401.08 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
   S
  -2661 6073 4P ,
  -2686 6074 5Z ,
  -2697 6074 5Z ,
  -2709 6074 3D ,
  -3174.56 6060.37 0 147.33 -552.5 0 0 239.41 S
  -2622.06 6442.51 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
  -2622.06 6442.51 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
  +3204 6050 4F ,
  +3229 6051 2X ,
  +3241 6051 2X ,
  +3252 6051 5X ,
  +3727.06 6023.54 0 184.17 -1104.99 0 0 197.98 S
  +255 G
  +2622.06 6401.08 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
  +K
  +2622.06 6401.08 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
   S
  -3213 6069 4P ,
  -3238 6070 5Z ,
  -3250 6070 5Z ,
  -3258 6088 4Z ,
  -1111.91 7386.36 0 147.33 -257.83 0 0 202.58 S
  -854.08 7731.67 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
  -854.08 7731.67 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
  +3743 6046 4F ,
  +3768 6047 2X ,
  +3779 6047 2X ,
  +3788 6065 4T ,
  +1111.91 7386.36 0 147.33 -257.83 0 0 239.41 S
  +854.08 7768.5 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
  +854.08 7768.5 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
   S
   1079.68 7902.02 1026.72 0 S
   255 G
  @@ -1324,34 +1421,114 @@
   K
   2101.8 7902.02 -46.04 -23.02 -46.04 23.02 46.04 23.02 H
   S
  -1123 7924 4P ,
  -1148 7925 5Z ,
  -1160 7925 5Z ,
  -1171 7925 3D ,
  -559.41 7386.36 0 147.33 294.66 0 0 202.58 S
  -854.08 7731.67 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
  -854.08 7731.67 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
  -S
  -2216.9 6060.37 0 994.49 S
  -2216.9 7050.26 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
  -2216.9 7050.26 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
  -S
  -1517.07 6060.37 0 184.17 699.83 0 0 810.33 S
  -2216.9 7050.26 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
  -2216.9 7050.26 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
  -S
  -964.58 6060.37 0 184.17 1252.32 0 0 810.33 S
  -2216.9 7050.26 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
  -2216.9 7050.26 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
  -S
  -2578 7924 4P ,
  -2603 7925 5Z ,
  -2615 7925 5Z ,
  -2626 7925 3D ,
  -2905 7413 4P ,
  -2930 7414 5Z ,
  -2941 7414 5Z ,
  -2953 7414 3D ,
  +1123 7924 4F ,
  +1148 7925 2X ,
  +1160 7925 2X ,
  +1171 7925 5X ,
  +559.41 7386.36 0 147.33 294.66 0 0 239.41 S
  +255 G
  +854.08 7768.5 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
  +K
  +854.08 7768.5 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
  +S
  +4832.05 6428.7 0 524.87 S
  +255 G
  +4832.05 6948.97 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
  +K
  +4832.05 6948.97 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
  +S
  +4832.05 6428.7 0 147.33 -552.5 0 0 165.75 S
  +255 G
  +4279.55 6737.18 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
  +K
  +4279.55 6737.18 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
  +S
  +4832.05 6428.7 0 147.33 552.5 0 0 377.54 S
  +255 G
  +5384.54 6948.97 23.02 -46.04 -23.02 -46.04 ^ f*
  +K
  +5384.54 6948.97 23.02 -46.04 -23.02 -46.04 ^ H
  +S
  +4314 7330 4F ,
  +4339 7331 2X ,
  +4350 7331 2X ,
  +4362 7331 5X ,
  +2622.06 6023.54 0 382.14 S
  +255 G
  +2622.06 6401.08 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
  +K
  +2622.06 6401.08 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
  +S
  +2666 6046 4F ,
  +2691 6047 2X ,
  +2702 6047 2X ,
  +2714 6047 5X ,
  +2069.57 6023.54 0 184.17 552.5 0 0 197.98 S
  +255 G
  +2622.06 6401.08 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
  +K
  +2622.06 6401.08 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
  +S
  +2118 6050 4F ,
  +2143 6051 2X ,
  +2154 6051 2X ,
  +2166 6051 5X ,
  +1517.07 6023.54 0 184.17 1104.99 0 0 197.98 S
  +255 G
  +2622.06 6401.08 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
  +K
  +2622.06 6401.08 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
  +S
  +1551 6050 4F ,
  +1576 6051 2X ,
  +1588 6051 2X ,
  +1599 6051 5X ,
  +2879.9 7105.51 0 -197.98 -257.83 0 0 -225.6 S
  +255 G
  +2622.06 6686.53 -32.23 55.25 64.46 0 f*
  +K
  +2622.06 6686.53 -32.23 55.25 64.46 0 H
  +S
  +3204 6050 4F ,
  +3229 6051 2X ,
  +3241 6051 2X ,
  +3252 6051 5X ,
  +3743 6046 4F ,
  +3768 6047 2X ,
  +3779 6047 2X ,
  +3788 6065 4T ,
  +2666 6046 4F ,
  +2691 6047 2X ,
  +2702 6047 2X ,
  +2714 6047 5X ,
  +2118 6050 4F ,
  +2143 6051 2X ,
  +2154 6051 2X ,
  +2166 6051 5X ,
  +1551 6050 4F ,
  +1576 6051 2X ,
  +1588 6051 2X ,
  +1599 6051 5X ,
  +2587 7924 4F ,
  +2612 7925 2X ,
  +2624 7925 2X ,
  +2635 7925 5X ,
  +2364 7419 5X ,
  +2387 7419 2X ,
  +2398 7419 2X ,
  +2407 7437 4T ,
  +1802 7419 5X ,
  +1825 7419 2X ,
  +1836 7419 2X ,
  +1845 7437 4T ,
  +2919 7399 4F ,
  +2944 7400 2X ,
  +2955 7400 2X ,
  +2967 7400 5X ,
  +1123 7924 4F ,
  +1148 7925 2X ,
  +1160 7925 2X ,
  +1171 7925 5X ,
   cleartomark end end pagesave restore showpage
   %%PageTrailer
   %%Trailer

From ossp-cvs-owner@ossp.org  Mon Feb  4 23:35:21 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 75B337650C; Mon,  4 Feb 2002 23:35:21 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc Makefile.in README aclocal.m4 configure.in rc-...
Message-Id: <20020204223521.75B337650C@mail.ossp.org>
Date: Mon,  4 Feb 2002 23:35:21 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   04-Feb-2002 23:35:21
  Branch: HEAD                             Handle: 2002020422352000

  Modified files:
    ossp-pkg/rc             Makefile.in README aclocal.m4 configure.in
                            rc-sample.pod rc.c rc.conf rc.example rc.h rc.pod
                            rc_p.h rc_test.sh

  Log:
    Fixed copyright.

  Summary:
    Revision    Changes     Path
    1.5         +2  -2      ossp-pkg/rc/Makefile.in
    1.3         +3  -3      ossp-pkg/rc/README
    1.5         +2  -2      ossp-pkg/rc/aclocal.m4
    1.8         +2  -2      ossp-pkg/rc/configure.in
    1.8         +25 -0      ossp-pkg/rc/rc-sample.pod
    1.5         +3  -3      ossp-pkg/rc/rc.c
    1.6         +0  -4      ossp-pkg/rc/rc.conf
    1.7         +10 -10     ossp-pkg/rc/rc.example
    1.5         +3  -3      ossp-pkg/rc/rc.h
    1.27        +1  -1      ossp-pkg/rc/rc.pod
    1.3         +3  -3      ossp-pkg/rc/rc_p.h
    1.4         +3  -3      ossp-pkg/rc/rc_test.sh
  ____________________________________________________________________________

  Index: ossp-pkg/rc/Makefile.in
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 Makefile.in
  --- ossp-pkg/rc/Makefile.in	4 Feb 2002 22:19:29 -0000	1.4
  +++ ossp-pkg/rc/Makefile.in	4 Feb 2002 22:35:20 -0000	1.5
  @@ -1,10 +1,10 @@
   ##
  -##  rc - OSSP Runcommand processor
  +##  rc - OSSP Run-command processor
   ##  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
   ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2002 Ralf S. Engelschall
   ##
  -##  This file is part of OSSP rc, a portable Runcommand processor
  +##  This file is part of OSSP rc, a portable Run-command processor
   ##  which can be found at http://www.ossp.org/pkg/rc/
   ##
   ##  Permission to use, copy, modify, and distribute this software for
  Index: ossp-pkg/rc/README
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 README
  --- ossp-pkg/rc/README	10 Jan 2002 10:29:37 -0000	1.2
  +++ ossp-pkg/rc/README	4 Feb 2002 22:35:20 -0000	1.3
  @@ -3,12 +3,12 @@
     | | | (__ 
     |_|  \___|
   
  -  OSSP rc - Runcommand processor
  +  OSSP rc - Run-command processor
     Version 0.1.0 (00-Duc-2002)
   
     ABSTRACT
   
  -  The OSSP Runcommand processor is a Duc.
  +  The OSSP Run-command processor is a Duc.
   
     COPYRIGHT AND LICENSE
   
  @@ -16,7 +16,7 @@
     Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
     Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   
  -  This file is part of OSSP rc, a Runcommand processor which
  +  This file is part of OSSP rc, a Run-command processor which
     can be found at http://www.ossp.org/pkg/rc/.
   
     Permission to use, copy, modify, and distribute this software for
  Index: ossp-pkg/rc/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 aclocal.m4
  --- ossp-pkg/rc/aclocal.m4	29 Jan 2002 17:00:17 -0000	1.4
  +++ ossp-pkg/rc/aclocal.m4	4 Feb 2002 22:35:20 -0000	1.5
  @@ -1,10 +1,10 @@
   dnl ##
  -dnl ##  OSSP rc - Runcommand processor
  +dnl ##  OSSP rc - Run-command processor
   dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
   dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
   dnl ##  Copyright (c) 2002 Ralf S. Engelschall
   dnl ##
  -dnl ##  This file is part of OSSP rc, a portable Runcommand processor
  +dnl ##  This file is part of OSSP rc, a portable Run-command processor
   dnl ##  which can be found at http://www.ossp.org/pkg/rc/
   dnl ##
   dnl ##  Permission to use, copy, modify, and distribute this software for
  Index: ossp-pkg/rc/configure.in
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 configure.in
  --- ossp-pkg/rc/configure.in	4 Feb 2002 22:19:29 -0000	1.7
  +++ ossp-pkg/rc/configure.in	4 Feb 2002 22:35:20 -0000	1.8
  @@ -1,10 +1,10 @@
   dnl ##
  -dnl ##  OSSP rc - Runcommand processor
  +dnl ##  OSSP rc - Run-command processor
   dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
   dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
   dnl ##  Copyright (c) 2002 Ralf S. Engelschall
   dnl ##
  -dnl ##  This file is part of OSSP rc, a portable Runcommand processor
  +dnl ##  This file is part of OSSP rc, a portable Run-command processor
   dnl ##  which can be found at http://www.ossp.org/pkg/rc/
   dnl ##
   dnl ##  Permission to use, copy, modify, and distribute this software for
  Index: ossp-pkg/rc/rc-sample.pod
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 rc-sample.pod
  --- ossp-pkg/rc/rc-sample.pod	31 Jan 2002 20:00:54 -0000	1.7
  +++ ossp-pkg/rc/rc-sample.pod	4 Feb 2002 22:35:20 -0000	1.8
  @@ -1,3 +1,28 @@
  +##
  +##  rc-sample.pod -- OSSP Run-command processor samples (manual page)
  +##  Copyright (c) 2000-2002 Cable & Wireless Deutschland GmbH
  +##  Copyright (c) 2000-2002 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +
   
   =pod
   
  Index: ossp-pkg/rc/rc.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 rc.c
  --- ossp-pkg/rc/rc.c	4 Feb 2002 21:48:22 -0000	1.4
  +++ ossp-pkg/rc/rc.c	4 Feb 2002 22:35:20 -0000	1.5
  @@ -1,9 +1,9 @@
  -/*  rc - OSSP Runcommand processor
  +/*  rc - OSSP Run-command processor
   **  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
   **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
   **  Copyright (c) 2002 Ralf S. Engelschall
   **
  -**  This file is part of OSSP rc, a portable Runcommand processor
  +**  This file is part of OSSP rc, a portable Run-command processor
   **  which can be found at http://www.ossp.org/pkg/rc/
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -24,7 +24,7 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  rc.c: Runcommand processor ANSI C source file
  +**  rc.c: Run-command processor ANSI C source file
   */
   
   #include <stdio.h>
  Index: ossp-pkg/rc/rc.conf
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 rc.conf
  --- ossp-pkg/rc/rc.conf	30 Jan 2002 07:55:32 -0000	1.5
  +++ ossp-pkg/rc/rc.conf	4 Feb 2002 22:35:20 -0000	1.6
  @@ -26,9 +26,6 @@
   
   
   
  -
  -
  -
   regexsection   '(?<=^|\n)%%%s\s*\n(.+?)(?=\n%\S+|$)'
   
   usage       #flag
  @@ -51,4 +48,3 @@
   tmp         /var/tmp
   verbose     #flag
   exec        #flag
  -
  Index: ossp-pkg/rc/rc.example
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 rc.example
  --- ossp-pkg/rc/rc.example	31 Jan 2002 19:34:53 -0000	1.6
  +++ ossp-pkg/rc/rc.example	4 Feb 2002 22:35:20 -0000	1.7
  @@ -1,9 +1,9 @@
   ##
   ##  rc.example - rcfile template
   ##
  -##  This file examines different ways of writing runcommands for a     ##
  +##  This file examines different ways of writing run commands for a    ##
   ##  program.  If used in production, this file would be different.  It ##
  -##  would have a name like 'rc.helloworld' and contain runcommands     ##
  +##  would have a name like 'rc.helloworld' and contain run commands    ##
   ##  for the 'helloworld' program. It would also have only one          ##
   ##  notation. A sample is repeated in this document using rc (native), ##
   ##  XML, and ASN.1 notation. The same rcfile semantics are repeated    ##
  @@ -16,8 +16,8 @@
   ##  corresponding regular expressions settings.                        ##
   ##                                                                     ##
   
  -# Generic runcommands for example daemon. Using #
  -# default symbols and conventional identifiers. #
  +# Generic run commands for example daemon. Using #
  +# default symbols and conventional identifiers.  #
   
   %confvars
       sftpd_enable="yes"
  @@ -65,8 +65,8 @@
   # End stock syntax example rcfile
   
   
  -# Generic runcommands for example daemon. Using  #
  -# custom symbols and unconventional identifiers. #
  +# Generic run commands for example daemon. Using  #
  +# custom symbols and unconventional identifiers.  #
   
   !confvars
       sftpd_enable="yes"
  @@ -114,8 +114,8 @@
   # End custom syntax example rcfile
   
   
  -# Generic runcommands for example daemon. Using an #
  -# XML-like syntax and conventional identifiers.    #
  +# Generic run commands for example daemon. Using an #
  +# XML-like syntax and conventional identifiers.     #
   
   <config>
       <set name=sftpd_enable>"yes"</set>
  @@ -173,8 +173,8 @@
   # End XML-like syntax example rcfile
   
   
  -# Generic runcommands for example daemon. Using a #
  -# ASN.1-like syntax and conventional identifiers. #
  +# Generic run commands for example daemon. Using a #
  +# ASN.1-like syntax and conventional identifiers.  #
   
   config CONFIG
       BEGIN
  Index: ossp-pkg/rc/rc.h
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 rc.h
  --- ossp-pkg/rc/rc.h	4 Feb 2002 21:48:22 -0000	1.4
  +++ ossp-pkg/rc/rc.h	4 Feb 2002 22:35:20 -0000	1.5
  @@ -1,9 +1,9 @@
  -/*  rc - OSSP Runcommand processor
  +/*  rc - OSSP Run-command processor
   **  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
   **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
   **  Copyright (c) 2002 Ralf S. Engelschall
   **
  -**  This file is part of OSSP rc, a portable Runcommand processor
  +**  This file is part of OSSP rc, a portable Run-command processor
   **  which can be found at http://www.ossp.org/pkg/rc/
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -24,7 +24,7 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  rc.h: Runcommand processor ANSI C public header file
  +**  rc.h: Run-command processor ANSI C public header file
   */
   
   #ifndef __OSSPRC_H__
  Index: ossp-pkg/rc/rc.pod
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 rc.pod
  --- ossp-pkg/rc/rc.pod	31 Jan 2002 21:14:10 -0000	1.26
  +++ ossp-pkg/rc/rc.pod	4 Feb 2002 22:35:20 -0000	1.27
  @@ -1,5 +1,5 @@
   ##
  -##  rc.pod -- OSSP Runcommand Processor (Manual Page)
  +##  rc.pod -- OSSP Run-command processor (manual page)
   ##  Copyright (c) 2000-2002 Cable & Wireless Deutschland GmbH
   ##  Copyright (c) 2000-2002 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>
  Index: ossp-pkg/rc/rc_p.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 rc_p.h
  --- ossp-pkg/rc/rc_p.h	4 Feb 2002 21:48:22 -0000	1.2
  +++ ossp-pkg/rc/rc_p.h	4 Feb 2002 22:35:20 -0000	1.3
  @@ -1,9 +1,9 @@
  -/*  rc - OSSP Runcommand processor
  +/*  rc - OSSP Run-command processor
   **  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
   **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
   **  Copyright (c) 2002 Ralf S. Engelschall
   **
  -**  This file is part of OSSP rc, a portable Runcommand processor
  +**  This file is part of OSSP rc, a portable Run-command processor
   **  which can be found at http://www.ossp.org/pkg/rc/
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -24,7 +24,7 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  rc_p.h: Runcommand processor ANSI C private API header file
  +**  rc_p.h: Run-command processor ANSI C private API header file
   */
   
   #ifndef __OSSPRC_P_H__
  Index: ossp-pkg/rc/rc_test.sh
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 rc_test.sh
  --- ossp-pkg/rc/rc_test.sh	30 Jan 2002 17:29:15 -0000	1.3
  +++ ossp-pkg/rc/rc_test.sh	4 Feb 2002 22:35:20 -0000	1.4
  @@ -1,10 +1,10 @@
   #! /bin/sh
  -#  rc - OSSP Runcommand processor
  +#  rc - OSSP Run-command processor
   #  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
   #  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
   #  Copyright (c) 2002 Ralf S. Engelschall
   #
  -#  This file is part of OSSP rc, a portable Runcommand processor
  +#  This file is part of OSSP rc, a portable Run-command processor
   #  which can be found at http://www.ossp.org/pkg/rc/
   #
   #  Permission to use, copy, modify, and distribute this software for
  @@ -25,7 +25,7 @@
   #  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   #  SUCH DAMAGE.
   #
  -#  test_rc.sh: Runcommand processor test script
  +#  test_rc.sh: Run-command processor test script
   
   #Pre:
   #tar zxvf ossprc-0.9.tar.gz

From ossp-cvs-owner@ossp.org  Tue Feb  5 11:40:52 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CE56F764F8; Tue,  5 Feb 2002 11:40:51 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp fixme.h lmtp2nntp_config.c lmtp2nntp_ma...
Message-Id: <20020205104051.CE56F764F8@mail.ossp.org>
Date: Tue,  5 Feb 2002 11:40:51 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   05-Feb-2002 11:40:51
  Branch: HEAD                             Handle: 2002020510405100

  Modified files:
    ossp-pkg/lmtp2nntp      fixme.h lmtp2nntp_config.c lmtp2nntp_main.c

  Log:
    moved --destination from nsc/ns to nns/pns and fixed a copynpaste bug

  Summary:
    Revision    Changes     Path
    1.11        +2  -1      ossp-pkg/lmtp2nntp/fixme.h
    1.40        +4  -4      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.35        +30 -30     ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/fixme.h
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 fixme.h
  --- ossp-pkg/lmtp2nntp/fixme.h	4 Feb 2002 15:43:01 -0000	1.10
  +++ ossp-pkg/lmtp2nntp/fixme.h	5 Feb 2002 10:40:51 -0000	1.11
  @@ -91,9 +91,10 @@
       int             fdIOi;
       int             fdIOo;
   
  +    /*
       int             nsc;
       struct ns       ns[MAXNEWSSERVICES];
  -    /*FIXME replaced by following */
  +    FIXME replaced by following */
       int             nns; /* number of ns structures found at pns */
       struct ns      *pns; /* pointer to an array of ns structures */
   
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.39 -r1.40 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	4 Feb 2002 15:43:01 -0000	1.39
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	5 Feb 2002 10:40:51 -0000	1.40
  @@ -449,7 +449,7 @@
               log2(ctx, TRACE, "--destination[%d] = \"%s\"", i, (ov->data.m)[i]);
   
           if (ov->ndata >= 1) {
  -            if ((ctx->pacl = (struct acl *)malloc(ov->ndata * sizeof(struct acl))) == NULL) throw(0,0,0);
  +            if ((ctx->pns = (struct ns *)malloc(ov->ndata * sizeof(struct ns))) == NULL) throw(0,0,0);
               for (i = 0; i < ov->ndata; i++) {
                   cp = (ov->data.m)[i];
                   log2(ctx, DEBUG, "cp = (data.m)[%d] = \"%s\"", i, cp);
  @@ -457,15 +457,15 @@
                       cp = str_concat(cp, ":nntp", NULL); //FIXME is this a config var/val?
                   else
                       cp = str_concat(cp, NULL); /* prepare for free() */
  -                if ((rc = sa_addr_create(&ctx->ns[i].saa)) != SA_OK) {
  +                if ((rc = sa_addr_create(&ctx->pns[i].saa)) != SA_OK) {
                       log1(ctx, ERROR, "option --destination, create address (internal) failed with \"%s\"", sa_error(rc));
                       throw(0,0,0);
                   }
  -                if ((rc = sa_addr_u2a(ctx->ns[i].saa, "inet://%s", cp)) != SA_OK) {
  +                if ((rc = sa_addr_u2a(ctx->pns[i].saa, "inet://%s", cp)) != SA_OK) {
                       log2(ctx, ERROR, "option --destination, parsing host address (%s) failed with \"%s\"", cp /*FIXME again, option vs. config */, sa_error(rc));
                       throw(0,0,0);
                   }
  -                if ((rc = sa_create(&ctx->ns[i].sa)) != SA_OK) {
  +                if ((rc = sa_create(&ctx->pns[i].sa)) != SA_OK) {
                       log2(ctx, ERROR, "option --destination, creating TCP socket (%s) failed with \"%s\"", cp /*FIXME again, option vs. config */, sa_error(rc));
                       throw(0,0,0);
                   }
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.34 -r1.35 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	4 Feb 2002 15:43:01 -0000	1.34
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	5 Feb 2002 10:40:51 -0000	1.35
  @@ -727,7 +727,7 @@
        */
       if (ctx->option_operationmode != OPERATIONMODE_FAKE) {
           log0(ctx, TRACE, "check if at least one NNTP service was successfully configured");
  -        if (ctx->nsc == 0) {
  +        if (ctx->nns == 0) {
               res.statuscode = "451";
               res.dsncode    = "4.3.5";
               res.statusmsg  = "No valid NNTP services configured.";
  @@ -744,24 +744,24 @@
           bOk = TRUE;
           log1(ctx, TRACE, "try ${option.destination}[${i}]", i); //FIXME
   
  -        ctx->ns[i].l2 = ctx->l2;
  +        ctx->pns[i].l2 = ctx->l2;
   
           if (bOk && (ctx->saaClientbind != NULL)) {
               log0(ctx, DEBUG, "bind local socket to ${option.clientbind}"); //FIXME
  -            if (sa_bind(ctx->ns[i].sa, ctx->saaClientbind) != SA_OK) {
  +            if (sa_bind(ctx->pns[i].sa, ctx->saaClientbind) != SA_OK) {
                   bOk = FALSE;
                   log0(ctx, ERROR, "binding NNTP client to local address ${option.clientbind} failed, %m"); //FIXME
               }
           }
   
  -        sa_timeout(ctx->ns[i].sa, SA_TIMEOUT_ALL, 0, 0);
  -        sa_timeout(ctx->ns[i].sa, SA_TIMEOUT_CONNECT, ctx->option_timeout_nntp_connect, 0);
  -        sa_timeout(ctx->ns[i].sa, SA_TIMEOUT_READ,    ctx->option_timeout_nntp_read,    0);
  -        sa_timeout(ctx->ns[i].sa, SA_TIMEOUT_WRITE,   ctx->option_timeout_nntp_read,    0);
  +        sa_timeout(ctx->pns[i].sa, SA_TIMEOUT_ALL, 0, 0);
  +        sa_timeout(ctx->pns[i].sa, SA_TIMEOUT_CONNECT, ctx->option_timeout_nntp_connect, 0);
  +        sa_timeout(ctx->pns[i].sa, SA_TIMEOUT_READ,    ctx->option_timeout_nntp_read,    0);
  +        sa_timeout(ctx->pns[i].sa, SA_TIMEOUT_WRITE,   ctx->option_timeout_nntp_read,    0);
   
           if (bOk) {
               log0(ctx, DEBUG, "connect");
  -            if (sa_connect(ctx->ns[i].sa, ctx->ns[i].saa) != SA_OK) {
  +            if (sa_connect(ctx->pns[i].sa, ctx->pns[i].saa) != SA_OK) {
                   bOk = FALSE;
                   log1(ctx, WARNING, "connect to ${option.destination}[${i}] failed, %m", i); //FIXME
               }
  @@ -769,10 +769,10 @@
   
           if (bOk) {
               log0(ctx, DEBUG, "nntp_create");
  -            nntp_io.ctx    = &ctx->ns[i];
  +            nntp_io.ctx    = &ctx->pns[i];
               nntp_io.read   = hook_nntp_read;
               nntp_io.write  = hook_nntp_write;
  -            if ((ctx->ns[i].nntp = nntp_create(&nntp_io)) == NULL) {
  +            if ((ctx->pns[i].nntp = nntp_create(&nntp_io)) == NULL) {
                   bOk = FALSE;
                   log0(ctx, ERROR, "creation of NNTP context failed");
               }
  @@ -780,7 +780,7 @@
   
           if (bOk) {
               log0(ctx, DEBUG, "nntp_init");
  -            if ((rc = nntp_init(ctx->ns[i].nntp)) != NNTP_OK) {
  +            if ((rc = nntp_init(ctx->pns[i].nntp)) != NNTP_OK) {
                   bOk = FALSE;
                   log2(ctx, ERROR, "initialization of NNTP context failed, (%d) %s", rc, nntp_error(rc));
               }
  @@ -793,15 +793,15 @@
           else {
               log1(ctx, WARNING, "NNTP session establishment to ${option.destination}[${i}] failed", i); //FIXME
               log1(ctx, DEBUG, "removing ns[%d] from list", i);
  -            lmtp_gfs_ns(&ctx->ns[i]);
  -            if (i < --ctx->nsc) {
  -                memcpy(&ctx->ns[i], &ctx->ns[i+1], (ctx->nsc - i ) * sizeof(struct ns));
  +            lmtp_gfs_ns(&ctx->pns[i]);
  +            if (i < --ctx->nns) {
  +                memcpy(&ctx->pns[i], &ctx->pns[i+1], (ctx->nns - i ) * sizeof(struct ns));
               }
           }
  -    } while (i < ctx->nsc);
  +    } while (i < ctx->nns);
   
       if (ctx->option_operationmode == OPERATIONMODE_FAKE)
  -        log1(ctx, NOTICE, "NNTP running in fake mode, network connections successfully established=%d but ignored", ctx->nsc);
  +        log1(ctx, NOTICE, "NNTP running in fake mode, network connections successfully established=%d but ignored", ctx->nns);
       else
       {
           /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   421 <domain> Service not available
  @@ -809,7 +809,7 @@
            *  RFC1893 3.5 Network and Routing Status          X.4.1   No answer from host
            */
           log0(ctx, DEBUG, "check if at least one NNTP session successfully established");
  -        if (ctx->nsc == 0) {
  +        if (ctx->nns == 0) {
               log0(ctx, ERROR, "no NNTP session established");
               res.statuscode = "421";
               res.dsncode    = "4.4.1";
  @@ -862,8 +862,8 @@
   
       log0(ctx, TRACE, "LMTP service LHLO command - graceful shutdown");
   
  -    for (i = 0; i < ctx->nsc; i++)
  -            lmtp_gfs_ns(&ctx->ns[i]);
  +    for (i = 0; i < ctx->nns; i++)
  +            lmtp_gfs_ns(&ctx->pns[i]);
   
       if (ctx->option_mailfrom != NULL)
           free(ctx->option_mailfrom);
  @@ -1462,24 +1462,24 @@
   
       log0(ctx, TRACE, "deliver message");
       bSuccess = NNTP_ERR_DELIVERY; /* assume a hard error for the worst case */
  -    for (i = 0; i < ctx->nsc; i++) {
  +    for (i = 0; i < ctx->nns; i++) {
           switch (ctx->option_operationmode) {
               case OPERATIONMODE_FAKE:
  -                ctx->ns[i].rc = NNTP_FAKE;
  +                ctx->pns[i].rc = NNTP_FAKE;
                   break;
               case OPERATIONMODE_POST:
  -                ctx->ns[i].rc = nntp_post(ctx->ns[i].nntp, ctx->msg);
  +                ctx->pns[i].rc = nntp_post(ctx->pns[i].nntp, ctx->msg);
                   break;
               case OPERATIONMODE_FEED:
  -                ctx->ns[i].rc = nntp_feed(ctx->ns[i].nntp, ctx->msg);
  +                ctx->pns[i].rc = nntp_feed(ctx->pns[i].nntp, ctx->msg);
                   break;
           }
  -        if (ctx->ns[i].rc == NNTP_OK)
  +        if (ctx->pns[i].rc == NNTP_OK)
               bSuccess = NNTP_OK;
           if (   bSuccess != NNTP_OK
               && (
  -                   (ctx->ns[i].rc == NNTP_ERR_SYSTEM)
  -                || (ctx->ns[i].rc == NNTP_DEFER)
  +                   (ctx->pns[i].rc == NNTP_ERR_SYSTEM)
  +                || (ctx->pns[i].rc == NNTP_DEFER)
                     )
                 )
               bSuccess = NNTP_DEFER;
  @@ -1562,14 +1562,14 @@
           azErr = NULL;
           asErr = 0;
           argz_add(&azErr, &asErr, errorstring);
  -        for (i = 0; i < ctx->nsc; i++) {
  -            if (ctx->ns[i].rc != NNTP_OK) {
  +        for (i = 0; i < ctx->nns; i++) {
  +            if (ctx->pns[i].rc != NNTP_OK) {
                   str_format(errorstring, sizeof(errorstring), 
                   "${option.destination}[${i}] returned %s\n" /*FIXME*/
                   "${option.destination}[${i}] lastresp \"%s\"",  /*FIXME*/
                   i,
  -                nntp_error(ctx->ns[i].rc), 
  -                nntp_lastresp(ctx->ns[i].nntp));
  +                nntp_error(ctx->pns[i].rc), 
  +                nntp_lastresp(ctx->pns[i].nntp));
                   argz_add(&azErr, &asErr, errorstring);
               }
           }

From ossp-cvs-owner@ossp.org  Tue Feb  5 11:42:40 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 79587764F8; Tue,  5 Feb 2002 11:42:40 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp fixme.h lmtp2nntp_main.c lmtp2nntp_opti...
Message-Id: <20020205104240.79587764F8@mail.ossp.org>
Date: Tue,  5 Feb 2002 11:42:40 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   05-Feb-2002 11:42:40
  Branch: HEAD                             Handle: 2002020510423900

  Modified files:
    ossp-pkg/lmtp2nntp      fixme.h lmtp2nntp_main.c lmtp2nntp_option.c

  Log:
    removed obsolete --veryverbose

  Summary:
    Revision    Changes     Path
    1.12        +1  -1      ossp-pkg/lmtp2nntp/fixme.h
    1.36        +0  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
    1.10        +0  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/fixme.h
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 fixme.h
  --- ossp-pkg/lmtp2nntp/fixme.h	5 Feb 2002 10:40:51 -0000	1.11
  +++ ossp-pkg/lmtp2nntp/fixme.h	5 Feb 2002 10:42:39 -0000	1.12
  @@ -65,7 +65,7 @@
       int             nacl; /* number of acl structures found at pacl */
       struct acl     *pacl; /* pointer to an array of acl structures */
   
  -    int             option_veryverbose;
  +    /*FIXME obsolete int             option_veryverbose; */
       int             option_childsmax;
       int             active_childs;
       l2_env_t       *l2_env;
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.35 -r1.36 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	5 Feb 2002 10:40:51 -0000	1.35
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	5 Feb 2002 10:42:39 -0000	1.36
  @@ -364,7 +364,6 @@
       ctx->option_killflag = FALSE;
       ctx->option_uid = getuid();
       ctx->option_daemon = FALSE;
  -    ctx->option_veryverbose = FALSE;
       ctx->active_childs = 0;
       ctx->l2_env = NULL;
       ctx->l2 = NULL;
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 lmtp2nntp_option.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	4 Feb 2002 13:52:15 -0000	1.9
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	5 Feb 2002 10:42:39 -0000	1.10
  @@ -607,7 +607,6 @@
       (void)option_register(o, "daemonize",          'D', OPT_FLAG,    NULL,        "detach from terminal",              NULL,                         &stdsyntax, NULL );
       (void)option_register(o, "kill",               'K', OPT_FLAG,    NULL,        "kill a previously run daemon",      NULL,                         &stdsyntax, NULL );
       (void)option_register(o, "pidfile",            'P', OPT_SINGLE,  NULL,        "file containing pid",               "pidfile",                    &stdsyntax, "m/.*/" );
  -    (void)option_register(o, "veryverbose",        'V', OPT_FLAG,    NULL,        "FIXME",                             NULL,                         &stdsyntax, NULL );
       (void)option_register(o, "acl",                'a', OPT_MULTI,   NULL,        "LMTP server access control list",   "addr[/mask]",                &stdsyntax, "m/.*/" );
       (void)option_register(o, "bind",               'b', OPT_SINGLE,  NULL,        "LMTP server bind",                  "addr[:port]|-|path[:perms]", &stdsyntax, "m/.*/" );
       (void)option_register(o, "client",             'c', OPT_SINGLE,  NULL,        "NNTP client bind",                  "addr[:port]",                &stdsyntax, "m/.*/" );

From ossp-cvs-owner@ossp.org  Tue Feb  5 15:11:52 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C1062764F8; Tue,  5 Feb 2002 15:11:52 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc Makefile.in devtool.conf
Message-Id: <20020205141152.C1062764F8@mail.ossp.org>
Date: Tue,  5 Feb 2002 15:11:52 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   05-Feb-2002 15:11:52
  Branch: HEAD                             Handle: 2002020514115200

  Modified files:
    ossp-pkg/rc             Makefile.in devtool.conf

  Log:
    Remove libtool and fix the build some more.

  Summary:
    Revision    Changes     Path
    1.6         +50 -18     ossp-pkg/rc/Makefile.in
    1.6         +0  -2      ossp-pkg/rc/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/rc/Makefile.in
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 Makefile.in
  --- ossp-pkg/rc/Makefile.in	4 Feb 2002 22:35:20 -0000	1.5
  +++ ossp-pkg/rc/Makefile.in	5 Feb 2002 14:11:52 -0000	1.6
  @@ -48,7 +48,6 @@
   RM              = rm -f
   RMDIR           = rmdir
   SHTOOL          = ./shtool
  -LIBTOOL         = ./libtool
   POD2MAN         = pod2man
   TRUE            = true
   
  @@ -56,49 +55,82 @@
   TARGET_PROGS    = rc
   TARGET_MANS     = rc.1 rc-sample.5
   
  -PROG_OBJS       = rc.o rc_version.o
  +SRCS            = rc.c rc_version.c rc_pcre.c
  +OBJS            = rc.o rc_version.o rc_pcre.lo
   
   SUBDIRS         = @SUBDIR_EX@ @SUBDIR_VAR@ @SUBDIR_STR@ @SUBDIR_POPT@
   
  -all:            $(SUBDIRS) $(TARGET)
  -
  +.SUFFIXES:
  +.SUFFIXES: .c .cc .cpp .o
   .c.o:
  -	$(CC) $(CPPFLAGS) $(CFLAGS) -c $<
  +	$(CC) -c $(CPPFLAGS) $(CFLAGS) $<
  +
  +all:            _SUBDIRS_all $(TARGET)
   
  -$(PROG): Makefile $(OBJS) $(HDRS)
  -	$(CC) $(LDFLAGS) -o $(PROG) $(OBJS) $(LIBS)
  +# Convinience rule calls _SUBDIRS with various make targets
  +_SUBDIRS_all _SUBDIRS_check _SUBDIRS_install _SUBDIRS_uninstall _SUBDIRS_clean \
  +_SUBDIRS_distclean _SUBDIRS_realclean _SUBDIRS_depend:
  +	@$(MAKE) $(MFLAGS) \
  +	         _SUBDIRS_TARGET=`echo $@ | sed -e 's/^_SUBDIRS_//'` \
  +	         _SUBDIRS_STEPDOWN 
  +
  +# Nonrecursive rule makes the subdirs
  +_SUBDIRS_STEPDOWN:
  +	@for subdir in $(SUBDIRS); do \
  +	    test ! -f "$$subdir/Makefile" && continue; \
  +	    echo "===> $(_SUBDIRS_DP)$$subdir ($(_SUBDIRS_TARGET))"; \
  +	    (cd $$subdir; \
  +	     $(MAKE) $(MFLAGS) \
  +	             _SUBDIRS_DP="$(_SUBDIRS_DP)$$subdir/" \
  +	             $(_SUBDIRS_TARGET) || exit 1) || exit 1; \
  +	    echo "<=== $(_SUBDIRS_DP)$$subdir"; \
  +	done
  +
  +$(TARGET_PROGS): Makefile $(OBJS)
  +	$(CC) $(LDFLAGS) -o $(TARGET_PROGS) $(OBJS) $(LIBS)
  +
  +$(OBJS): Makefile
  +
  +# Build pcre regex library
  +rc_pcre.lo: rc_pcre.tab rc_pcre.c
  +rc_pcre.tab: rc_pcre.c
  +	$(CC) $(CFLAGS) -DRC_PCRE_TAB $(LDFLAGS) -o rc_pcre.gen rc_pcre.c $(LIBS)
  +	./rc_pcre.gen >rc_pcre.tab
  +	$(RM) rc_pcre.gen
   
   rc.1: rc.pod
   	VS=`$(SHTOOL) version -lc -dshort rc_version.c`; \
   	VL=`$(SHTOOL) version -lc -dlong rc_version.c`; \
  -	$(POD2MAN) --section=5 --center="OSSP Run-command processor" \
  +	$(POD2MAN) --section=5 --center="Run-command processor" \
                  --release="$$VS" --date="$$VL" \
                  rc.pod >rc.1
   
   rc-sample.5: rc-sample.pod
   	VS=`$(SHTOOL) version -lc -dshort rc_version.c`; \
   	VL=`$(SHTOOL) version -lc -dlong rc_version.c`; \
  -	$(POD2MAN) --section=5 --center="OSSP Run-command processor samples" \
  +	$(POD2MAN) --section=5 --center="Run-command processor samples" \
                  --release="$$VS" --date="$$VL" \
                  rc-sample.pod >rc-sample.5
   
   install: all
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man1
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man5
  +	$(SHTOOL) install -c -m 644 rc.1 $(mandir)/man1/rc.1
  +	$(SHTOOL) install -c -m 644 rc-sample.5 $(mandir)/man5/rc-sample.5
   
   clean:
  -	-$(RM) $(TARGET_PROG) $(PROG_OBJS)
  -	-$(RM) $(TARGET_TST) $(TST_OBJS)
  +	$(RM) $(TARGET) $(OBJS)
   
   distclean: clean
  -	-$(RM) config.log config.status config.cache
  -	-$(RM) Makefile rc_config.h
  -	-$(RM) libtool
  +	$(RM) config.log config.status config.cache
  +	$(RM) Makefile rc_config.h rc_pcre.tab
   
   realclean: distclean
  -	-$(RM) configure rc_config.h.in
  -	-$(RM) shtool
  -	-$(RM) ltmain.sh libtool.m4 config.guess config.sub
  +	$(RM) configure rc_config.h.in
  +	$(RM) shtool
   
  -check: rc
  +check: test
  +test: rc
   	@./test.sh
  Index: ossp-pkg/rc/devtool.conf
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 devtool.conf
  --- ossp-pkg/rc/devtool.conf	4 Feb 2002 21:46:57 -0000	1.5
  +++ ossp-pkg/rc/devtool.conf	5 Feb 2002 14:11:52 -0000	1.6
  @@ -4,7 +4,6 @@
   
   %autogen
       @autogen shtool   1.5.4 "1.5.*" all
  -    @autogen libtool  1.4.2 "1.4*"
       @autogen autoconf 2.52  "2.5.*"
   
       echo "===> rc_ex (devtool autogen)"
  @@ -22,7 +21,6 @@
   
   %autoclean
       @autoclean shtool
  -    @autoclean libtool
       @autoclean autoconf
   
       echo "===> rc_ex (devtool autoclean)"

From ossp-cvs-owner@ossp.org  Tue Feb  5 15:14:54 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A64C6764F8; Tue,  5 Feb 2002 15:14:54 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c lmtp2nntp_option.c t...
Message-Id: <20020205141454.A64C6764F8@mail.ossp.org>
Date: Tue,  5 Feb 2002 15:14:54 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   05-Feb-2002 15:14:54
  Branch: HEAD                             Handle: 2002020514145400

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c lmtp2nntp_option.c test.sh

  Log:
    --version should print then exit the program. It's use is mutually exclusive
    and it should be checked very soon in the config process. Fixed a bug in
    --childsmax where sa_addr_u2a expects a colon. Started to work on testsuite
    which needs major corrections and exhibits lots of bugs in lmtp2nntp. Found a
    bug where --l2spec does not work when specified on command line.

  Summary:
    Revision    Changes     Path
    1.41        +22 -19     ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.11        +3  -3      ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
    1.9         +51 -12     ossp-pkg/lmtp2nntp/test.sh
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.40 -r1.41 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	5 Feb 2002 10:40:51 -0000	1.40
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	5 Feb 2002 14:14:54 -0000	1.41
  @@ -135,6 +135,7 @@
           CU(ERR_EXECUTION);
       }
       if (ov->data.s != NULL) {
  +        //FIXME this is cut off on command line!? fprintf(stderr, "DEBUG: ov->data.s = \"%s\"\n", ov->data.s);
           if ((rc = l2_spec(&ctx->l2, ctx->l2_env, ov->data.s)) != L2_OK) {
               fprintf(stderr, "%s:Error: logging failed to create stream\n", ctx->progname);
               CU(ERR_EXECUTION);
  @@ -153,6 +154,24 @@
        */
       log1(ctx, NOTICE, "startup, version %s", lmtp2nntp_version.v_gnu);
   
  +    /* --version FLAG */
  +    try {
  +        if (   (val_get(ctx->val, "option.version", &ov) != VAL_OK)
  +            || (ov->ndata <  0)
  +            || (ov->ndata == 1 && ov->data.f < 0)
  +            || (ov->ndata == 1 && ov->data.f > 1)
  +            || (ov->ndata >  1)
  +              ) throw(0,0,0);
  +        log1(ctx, TRACE, "--version = %d", ov->data.f);
  +
  +        if (ov->data.f == 1) {
  +            fprintf(stdout, "%s\n", lmtp2nntp_version.v_gnu);
  +            exit(0); //FIXME
  +        }
  +    }
  +    catch (ex)
  +        rethrow;
  +
       /* --childsmax SINGLE */
       try {
           if (   (val_get(ctx->val, "option.childsmax", &ov) != VAL_OK)
  @@ -426,7 +445,9 @@
                   log1(ctx, ERROR, "option --client, create address (internal) failed with \"%s\"", sa_error(rc));
                   throw(0,0,0);
               }
  -            if ((rc = sa_addr_u2a(ctx->saaClientbind, "inet://%s", ov->data.s)) != SA_OK) {
  +            if ((rc = sa_addr_u2a(ctx->saaClientbind, 
  +                                  (strchr(ov->data.s, ':') == NULL) ?  "inet://%s:0" : "inet://%s", 
  +                                  ov->data.s)) != SA_OK) {
                   log2(ctx, ERROR, "option --client, parsing alternate IO guessing INET socket (%s) failed with \"%s\"", ov->data.s, sa_error(rc));
                   throw(0,0,0);
               }
  @@ -882,24 +903,6 @@
                   }
               }
               ctx->option_uid = sPasswd->pw_uid;
  -        }
  -    }
  -    catch (ex)
  -        rethrow;
  -
  -    /* --version FLAG */
  -    try {
  -        if (   (val_get(ctx->val, "option.version", &ov) != VAL_OK)
  -            || (ov->ndata <  0)
  -            || (ov->ndata == 1 && ov->data.f < 0)
  -            || (ov->ndata == 1 && ov->data.f > 1)
  -            || (ov->ndata >  1)
  -              ) throw(0,0,0);
  -        log1(ctx, TRACE, "--version = %d", ov->data.f);
  -
  -        if (ov->data.f == 1) {
  -            log1(ctx, INFO, "program version %s", lmtp2nntp_version.v_gnu);
  -            fprintf(stdout, "%s\n", lmtp2nntp_version.v_gnu); //FIXME is fprintf really the way to go?
           }
       }
       catch (ex)
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 lmtp2nntp_option.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	5 Feb 2002 10:42:39 -0000	1.10
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	5 Feb 2002 14:14:54 -0000	1.11
  @@ -614,7 +614,6 @@
       (void)option_register(o, "groupmode",          'g', OPT_SINGLE,  "arg",       "arg|envelope|header",               "groupmode",                  &stdsyntax, "m/.*/" ); //"m/(arg|envelope|header)/" );
       (void)option_register(o, "headervalue",        'h', OPT_MULTI,   NULL,        "header/ value added to message",    "header: value",              &stdsyntax, "m/.*/" );
       (void)option_register(o, "include",            'i', OPT_MULTI,   NULL,        "configfile to include",             "configfile",                 &includeit, "m/.*/" );
  -    (void)option_register(o, "size",               's', OPT_SINGLE,  "8388608",   "maximum message size",              "bytes",                      &stdsyntax, "m/.*/" ); //"m/[0-9]+/" );
       (void)option_register(o, "timeoutlmtp",        NUL, OPT_SINGLE,  NULL,        "LMTP server default timeout",       "sec",                        &stdsyntax, "m/.*/" );
       (void)option_register(o, "timeoutlmtpaccept",  NUL, OPT_SINGLE,  "0",         "LMTP server accept timeout",        "sec",                        &stdsyntax, "m/.*/" );
       (void)option_register(o, "timeoutlmtpread",    NUL, OPT_SINGLE,  "10",        "LMTP server read timeout",          "sec",                        &stdsyntax, "m/.*/" );
  @@ -623,13 +622,14 @@
       (void)option_register(o, "timeoutnntpconnect", NUL, OPT_SINGLE,  "360",       "NNTP client connect timeout",       "sec",                        &stdsyntax, "m/.*/" );
       (void)option_register(o, "timeoutnntpread",    NUL, OPT_SINGLE,  "60",        "NNTP client read timeout",          "sec",                        &stdsyntax, "m/.*/" );
       (void)option_register(o, "timeoutnntpwrite",   NUL, OPT_SINGLE,  "60",        "NNTP client write timeout",         "sec",                        &stdsyntax, "m/.*/" );
  +    (void)option_register(o, "l2spec",             'l', OPT_SINGLE,  NULL,        "L2 channel tree specification",     "l2spec",                     &stdsyntax, "m/.*/" );
       (void)option_register(o, "mailfrom",           'm', OPT_SINGLE,  NULL,        "mail from envelope restriction",    "regex",                      &stdsyntax, "m/.*/" );
       (void)option_register(o, "nodename",           'n', OPT_SINGLE,  NULL,        "nodename",                          "name",                       &stdsyntax, "m/.*/" );
       (void)option_register(o, "operationmode",      'o', OPT_SINGLE,  "553/5.7.1", "fakestatus or operationmode",       "abc/a.d.e|post|feed",        &stdsyntax, "m/.*/" ); //"m/([0-9]{3}\\/[0-9]\\.[0-9]\\.[0-9]|post|feed)/" ); /* 553 = Requested action not taken: mailbox name not allowed, 5.7.1 =  Delivery not authorized, message refused */
  -    (void)option_register(o, "l2spec",             'l', OPT_SINGLE,  NULL,        "L2 channel tree specification",     "l2spec",                     &stdsyntax, "m/.*/" );
  +    (void)option_register(o, "restrictheader",     'r', OPT_SINGLE,  NULL,        "header restriction",                "regex",                      &stdsyntax, "m/.*/" );
  +    (void)option_register(o, "size",               's', OPT_SINGLE,  "8388608",   "maximum message size",              "bytes",                      &stdsyntax, "m/.*/" ); //"m/[0-9]+/" );
       (void)option_register(o, "user",               'u', OPT_SINGLE,  NULL,        "user",                              "uid|name",                   &stdsyntax, "m/.*/" );
       (void)option_register(o, "version",            'v', OPT_FLAG,    NULL,        "print version",                     NULL,                         &stdsyntax, NULL );
  -    (void)option_register(o, "restrictheader",     'r', OPT_SINGLE,  NULL,        "header restriction",                "regex",                      &stdsyntax, "m/.*/" );
       (void)option_register(o, "newsgroup",          NUL, OPT_MULTI,   NULL,        "article destination",               "newsgroup",                  &stdsyntax, "m/.*/" );
   
   #if 0
  Index: ossp-pkg/lmtp2nntp/test.sh
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 test.sh
  --- ossp-pkg/lmtp2nntp/test.sh	14 Nov 2001 14:22:25 -0000	1.8
  +++ ossp-pkg/lmtp2nntp/test.sh	5 Feb 2002 14:14:54 -0000	1.9
  @@ -16,10 +16,10 @@
   Message-Id: <200108141251.f7ECpmn74812@dev.de.cw.net>
   From: Thomas Lotterer <Thomas.Lotterer@example.com>
   Received: from cw.example.com (cw.example.com [10.1.1.32])
  -    by gateway.example.com (8.9.2/8.9.2/$Revision: 1.8 $) with SMTP id NAA08840
  +    by gateway.example.com (8.9.2/8.9.2/$Revision: 1.9 $) with SMTP id NAA08840
       for <thomas.lotterer@gateway.example.com>; Mon, 2 Apr 2001 13:20:25 +0200 (MET DST)
   Received: from history (history.example.org [195.143.102.41])
  -    by cw.example.com (8.11.0/8.11.0/$Revision: 1.8 $) with ESMTP id f32BKPb12235
  +    by cw.example.com (8.11.0/8.11.0/$Revision: 1.9 $) with ESMTP id f32BKPb12235
       for <thomas.lotterer@example.com>; Mon, 2 Apr 2001 13:20:25 +0200
   Received: from example.org (littlemua.example.org [195.143.103.160])
   	by history (8.8.8/8.8.8) with ESMTP id LAA12678;
  @@ -77,8 +77,12 @@
   TMPFILE="${PREFIX}tmp"
   DMALLOC="${PREFIX}dmalloc.log"
   
  -    LOG="debug"
  -   FILE="${PREFIX}stdlog"
  + L2CONF="${PREFIX}logspec"
  + L2FILE="${PREFIX}log"
  + L2SPEC="'debug: prefix(prefix=\"%%b %%d %%H:%%M:%%S <%%L> lmtp2nntp[%%P]: \",timezone=local) -> file(path=\"${L2FILE}\",append=0,perm=432)'" 
  + echo >${L2CONF} "l2spec ${L2SPEC}"
  +    LOG="-i ${L2CONF}"
  +
     STDIN="${PREFIX}stdin"
    STDOUT="${PREFIX}stdout"
    STDERR="${PREFIX}stderr"
  @@ -108,8 +112,38 @@
   prolog
   newmsg
   ./lmtp2nntp -? >${STDOUT} 2>${STDERR}
  -RC=`cat ${STDERR} | egrep -- '-C.*-D.*-K.*-P.*-V.*-a.*-b.*-d.*-g.*-h.*-l.*-m.*-n.*-o.*-r.*-s.*-t.*-v.*newsgroup' | wc -l`
  -if [ ${RC} -ne 1 -o -s ${STDOUT} ]; then
  +RC="";
  +if [ 1 -eq `egrep <${STDOUT} -- '-C.*--childsmax'       | wc -l` ]; then RC="${RC}-C "; fi
  +if [ 1 -eq `egrep <${STDOUT} -- '-D.*--daemonize'       | wc -l` ]; then RC="${RC}-D "; fi
  +if [ 1 -eq `egrep <${STDOUT} -- '-K.*--kill'            | wc -l` ]; then RC="${RC}-K "; fi
  +if [ 1 -eq `egrep <${STDOUT} -- '-P.*--pidfile'         | wc -l` ]; then RC="${RC}-P "; fi
  +if [ 1 -eq `egrep <${STDOUT} -- '-a.*--acl'             | wc -l` ]; then RC="${RC}-a "; fi
  +if [ 1 -eq `egrep <${STDOUT} -- '-b.*--bind'            | wc -l` ]; then RC="${RC}-b "; fi
  +if [ 1 -eq `egrep <${STDOUT} -- '-c.*--client'          | wc -l` ]; then RC="${RC}-c "; fi
  +if [ 1 -eq `egrep <${STDOUT} -- '-d.*--destination'     | wc -l` ]; then RC="${RC}-d "; fi
  +if [ 1 -eq `egrep <${STDOUT} -- '-g.*--groupmode'       | wc -l` ]; then RC="${RC}-g "; fi
  +if [ 1 -eq `egrep <${STDOUT} -- '-h.*--headervalue'     | wc -l` ]; then RC="${RC}-h "; fi
  +if [ 1 -eq `egrep <${STDOUT} -- '-i.*--include'         | wc -l` ]; then RC="${RC}-i "; fi
  +if [ 1 -eq `egrep <${STDOUT} -- '--timeoutlmtp'         | wc -l` ]; then RC="${RC}--timeoutlmtp "; fi
  +if [ 1 -eq `egrep <${STDOUT} -- '--timeoutlmtpaccept'   | wc -l` ]; then RC="${RC}--timeoutlmtpaccept "; fi
  +if [ 1 -eq `egrep <${STDOUT} -- '--timeoutlmtpread'     | wc -l` ]; then RC="${RC}--timeoutlmtpread "; fi
  +if [ 1 -eq `egrep <${STDOUT} -- '--timeoutlmtpwrite'    | wc -l` ]; then RC="${RC}--timeoutlmtpwrite "; fi
  +if [ 1 -eq `egrep <${STDOUT} -- '--timeoutnntp'         | wc -l` ]; then RC="${RC}--timeoutnntp "; fi
  +if [ 1 -eq `egrep <${STDOUT} -- '--timeoutnntpconnect'  | wc -l` ]; then RC="${RC}--timeoutnntpconnect "; fi
  +if [ 1 -eq `egrep <${STDOUT} -- '--timeoutnntpread'     | wc -l` ]; then RC="${RC}--timeoutnntpread "; fi
  +if [ 1 -eq `egrep <${STDOUT} -- '--timeoutnntpwrite'    | wc -l` ]; then RC="${RC}--timeoutnntpwrite "; fi
  +if [ 1 -eq `egrep <${STDOUT} -- '-l.*--l2spec'          | wc -l` ]; then RC="${RC}-l "; fi
  +if [ 1 -eq `egrep <${STDOUT} -- '-m.*--mailfrom'        | wc -l` ]; then RC="${RC}-m "; fi
  +if [ 1 -eq `egrep <${STDOUT} -- '-n.*--nodename'        | wc -l` ]; then RC="${RC}-n "; fi
  +if [ 1 -eq `egrep <${STDOUT} -- '-o.*--operationmode'   | wc -l` ]; then RC="${RC}-o "; fi
  +if [ 1 -eq `egrep <${STDOUT} -- '-r.*--restrictheader'  | wc -l` ]; then RC="${RC}-r "; fi
  +if [ 1 -eq `egrep <${STDOUT} -- '-s.*--size'            | wc -l` ]; then RC="${RC}-s "; fi
  +if [ 1 -eq `egrep <${STDOUT} -- '-u.*--user'            | wc -l` ]; then RC="${RC}-u "; fi
  +if [ 1 -eq `egrep <${STDOUT} -- '-v.*--version'         | wc -l` ]; then RC="${RC}-v "; fi
  +if [ 1 -eq `egrep <${STDOUT} -- '--newsgroup'           | wc -l` ]; then RC="${RC}--newsgroup "; fi
  +if [ 1 -eq `egrep <${STDOUT} -- '-?.*--help'            | wc -l` ]; then RC="${RC}-? "; fi
  +if [ 1 -eq `egrep <${STDOUT} -- '--usage'               | wc -l` ]; then RC="${RC}--usage "; fi
  +if [ "${RC}" != "-C -D -K -P -a -b -c -d -g -h -i --timeoutlmtpaccept --timeoutlmtpread --timeoutlmtpwrite --timeoutnntpconnect --timeoutnntpread --timeoutnntpwrite -l -m -n -o -r -s -u -v --newsgroup -? --usage " ]; then
       echo "NO (got ${RC})"
       exit 1;
   fi
  @@ -118,7 +152,8 @@
   echon "checking whether a valid fake posting succeeds ... "
   prolog
   newmsg
  -./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 1500 -t nntp:connect=1 ${GROUP} >${STDOUT} 2>${STDERR} ; RC=$
  +echo ./lmtp2nntp ${STDIN} -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 -t nntp:connect=1 ${GROUP} ${STDOUT} 2${STDERR} ; RC=$
  +./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 -t nntp:connect=1 ${GROUP} >${STDOUT} 2>${STDERR} ; RC=$
   RC="";
   if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
   if [ 1 -eq `egrep <${STDOUT} '^250[- ].*pleased to meet you'    | wc -l` ]; then RC="${RC}LHLO "; fi
  @@ -129,6 +164,10 @@
   if [ 1 -eq `egrep <${STDOUT} '^221[- ]2.0.0.+closing.+channel'  | wc -l` ]; then RC="${RC}QUIT "; fi
   if [ "${RC}" != "init LHLO MAIL RCPT DATA post QUIT " ]; then
       echo "NO (got ${RC})"
  +    echo STDIN  cat ${STDIN}
  +    echo STDOUT cat ${STDOUT}
  +    echo STDERR cat ${STDERR}
  +    echo LOG    cat ${L2FILE}
       exit 1;
   fi
   echo "yes"
  @@ -136,7 +175,7 @@
   echon "checking whether -m option blocks invalid sender ... "
   prolog
   newmsg
  -( MFILT=".*@is.invalid" ; ./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 1500 -t nntp:connect=1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
  +( MFILT=".*@is.invalid" ; ./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 -t nntp:connect=1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
   RC="";
   if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
   if [ 1 -eq `egrep <${STDOUT} '^250[- ].+pleased to meet you'    | wc -l` ]; then RC="${RC}LHLO "; fi
  @@ -154,7 +193,7 @@
   echon "checking whether -s option rejects article with invalid size ... "
   prolog
   newmsg
  -./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 100 -t nntp:connect=1 ${GROUP} >${STDOUT} 2>${STDERR} ; RC=$?
  +./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} ${LOG} -m "${MFILT}" -n ${NODE} -s 100 -t nntp:connect=1 ${GROUP} >${STDOUT} 2>${STDERR} ; RC=$?
   RC="";
   if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
   if [ 1 -eq `egrep <${STDOUT} '^250[- ].*pleased to meet you'    | wc -l` ]; then RC="${RC}LHLO "; fi
  @@ -172,7 +211,7 @@
   echon "checking whether -c option fails on invalid local host address ... "
   prolog
   newmsg
  -( LOCAL="10.255.255.255" ; ./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 1500 -t nntp:connect=1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
  +( LOCAL="10.255.255.255" ; ./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 -t nntp:connect=1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
   RC="";
   if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
   if [ 1 -eq `egrep <${FILE}   'error.+binding'                   | wc -l` ]; then RC="${RC}bind "; fi
  @@ -185,7 +224,7 @@
   echon "checking whether -g envelope option blocks invalid group ... "
   prolog
   newmsg
  -( GROUP="foo.*" ; ./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g envelope -d ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 1500 -t nntp:connect=1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
  +( GROUP="foo.*" ; ./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g envelope -d ${HOST} ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 -t nntp:connect=1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
   RC="";
   if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
   if [ 1 -eq `egrep <${STDOUT} '^250[- ].*pleased to meet you'    | wc -l` ]; then RC="${RC}LHLO "; fi
  @@ -204,7 +243,7 @@
   echon "checking whether -d option times out for invalid host ... "
   prolog
   newmsg
  -( HOST="10.255.255.255" ; ./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} -l ${LOG}:${FILE} -m "${MFILT}" -n ${NODE} -s 1500 -t nntp:connect=1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
  +( HOST="10.255.255.255" ; ./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 -t nntp:connect=1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
   RC="";
   if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
   if [ 1 -eq `egrep <${FILE}   'warning.+connect.+failed'         | wc -l` ]; then RC="${RC}conn "; fi

From ossp-cvs-owner@ossp.org  Tue Feb  5 15:56:48 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 90CE0764F8; Tue,  5 Feb 2002 15:56:48 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c lmtp2nntp_main.c lmt...
Message-Id: <20020205145648.90CE0764F8@mail.ossp.org>
Date: Tue,  5 Feb 2002 15:56:48 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   05-Feb-2002 15:56:48
  Branch: HEAD                             Handle: 2002020514564700

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c lmtp2nntp_main.c
                            lmtp2nntp_option.c test.sh

  Log:
    "make check" works again!  --operationmode now correctly sets
    OPERATIONMODE_FAKE and detects internal error when this mandatory option was
    neither given nor preset through option_register().  Found missing
    functionality where option_parse_internal() does not fail on syntax errors or
    unknown options. Corrected --timeout* options in "test.sh".

  Summary:
    Revision    Changes     Path
    1.42        +5  -0      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.37        +1  -0      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
    1.12        +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
    1.10        +42 -15     ossp-pkg/lmtp2nntp/test.sh
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.41 -r1.42 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	5 Feb 2002 14:14:54 -0000	1.41
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	5 Feb 2002 14:56:47 -0000	1.42
  @@ -637,6 +637,7 @@
               else if (strcasecmp(cp, "feed") == 0)
                   ctx->option_operationmode = OPERATIONMODE_FEED;
               else {
  +                ctx->option_operationmode = OPERATIONMODE_FAKE;
                   if (strlen(cp) != 9) {
                       log1(ctx, ERROR, "option --operationmode, invalid length (%s)", cp);
                       throw(0,0,0);
  @@ -668,6 +669,10 @@
                       throw(0,0,0);
                   }
               }
  +        }
  +        else {
  +            log0(ctx, ERROR, "option --operationmode, is mandatory but neither given nor preset (internal)");
  +            throw(0,0,0);
           }
       }
       catch (ex)
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.36 -r1.37 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	5 Feb 2002 10:42:39 -0000	1.36
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	5 Feb 2002 14:56:47 -0000	1.37
  @@ -1531,6 +1531,7 @@
        */
       rcpt = NULL;
       while ((rcpt = argz_next(ctx->msg->azRcpt, ctx->msg->asRcpt, rcpt)) != NULL) {
  +        log1(ctx, DEBUG, "ctx->option_operationmode=%d", ctx->option_operationmode);
           if (ctx->option_operationmode == OPERATIONMODE_FAKE) {
                       res.statuscode = ctx->option_operationmodefakestatus;
                       res.dsncode    = ctx->option_operationmodefakedsn;
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 lmtp2nntp_option.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	5 Feb 2002 14:14:54 -0000	1.11
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	5 Feb 2002 14:56:47 -0000	1.12
  @@ -649,7 +649,7 @@
   #endif
   
       //val_apply(o->vo, "", 9, dumper, "vorher" );
  -    rc = option_parse_internal(o, argc, argv);
  +    rc = option_parse_internal(o, argc, argv); //FIXME should fail for syntax errors and unknown options
       //val_apply(o->vo, "", 9, dumper, "nachher" );
       return rc;
   }
  Index: ossp-pkg/lmtp2nntp/test.sh
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 test.sh
  --- ossp-pkg/lmtp2nntp/test.sh	5 Feb 2002 14:14:54 -0000	1.9
  +++ ossp-pkg/lmtp2nntp/test.sh	5 Feb 2002 14:56:47 -0000	1.10
  @@ -16,10 +16,10 @@
   Message-Id: <200108141251.f7ECpmn74812@dev.de.cw.net>
   From: Thomas Lotterer <Thomas.Lotterer@example.com>
   Received: from cw.example.com (cw.example.com [10.1.1.32])
  -    by gateway.example.com (8.9.2/8.9.2/$Revision: 1.9 $) with SMTP id NAA08840
  +    by gateway.example.com (8.9.2/8.9.2/$Revision: 1.10 $) with SMTP id NAA08840
       for <thomas.lotterer@gateway.example.com>; Mon, 2 Apr 2001 13:20:25 +0200 (MET DST)
   Received: from history (history.example.org [195.143.102.41])
  -    by cw.example.com (8.11.0/8.11.0/$Revision: 1.9 $) with ESMTP id f32BKPb12235
  +    by cw.example.com (8.11.0/8.11.0/$Revision: 1.10 $) with ESMTP id f32BKPb12235
       for <thomas.lotterer@example.com>; Mon, 2 Apr 2001 13:20:25 +0200
   Received: from example.org (littlemua.example.org [195.143.103.160])
   	by history (8.8.8/8.8.8) with ESMTP id LAA12678;
  @@ -103,6 +103,10 @@
   RC=`cat ${STDOUT} | egrep 'lmtp2nntp[ ]+[0-9]+\.[0-9]+[ab\.][0-9]+[ ]+\([0-9]+-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-[0-9]+\)' | wc -l`
   if [ ${RC} -ne 1 -o ".`cat ${STDERR}`" != . ]; then
       echo "NO (got ${RC})"
  +    echo "STDIN  cat ${STDIN}"
  +    echo "STDOUT cat ${STDOUT}"
  +    echo "STDERR cat ${STDERR}"
  +    echo "LOG    cat ${L2FILE}"
       exit 1;
   fi
   echo "yes"
  @@ -145,6 +149,10 @@
   if [ 1 -eq `egrep <${STDOUT} -- '--usage'               | wc -l` ]; then RC="${RC}--usage "; fi
   if [ "${RC}" != "-C -D -K -P -a -b -c -d -g -h -i --timeoutlmtpaccept --timeoutlmtpread --timeoutlmtpwrite --timeoutnntpconnect --timeoutnntpread --timeoutnntpwrite -l -m -n -o -r -s -u -v --newsgroup -? --usage " ]; then
       echo "NO (got ${RC})"
  +    echo "STDIN  cat ${STDIN}"
  +    echo "STDOUT cat ${STDOUT}"
  +    echo "STDERR cat ${STDERR}"
  +    echo "LOG    cat ${L2FILE}"
       exit 1;
   fi
   echo "yes"
  @@ -152,8 +160,7 @@
   echon "checking whether a valid fake posting succeeds ... "
   prolog
   newmsg
  -echo ./lmtp2nntp ${STDIN} -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 -t nntp:connect=1 ${GROUP} ${STDOUT} 2${STDERR} ; RC=$
  -./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 -t nntp:connect=1 ${GROUP} >${STDOUT} 2>${STDERR} ; RC=$
  +./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 --timeoutnntpconnect=1 ${GROUP} >${STDOUT} 2>${STDERR} ; RC=$
   RC="";
   if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
   if [ 1 -eq `egrep <${STDOUT} '^250[- ].*pleased to meet you'    | wc -l` ]; then RC="${RC}LHLO "; fi
  @@ -164,10 +171,10 @@
   if [ 1 -eq `egrep <${STDOUT} '^221[- ]2.0.0.+closing.+channel'  | wc -l` ]; then RC="${RC}QUIT "; fi
   if [ "${RC}" != "init LHLO MAIL RCPT DATA post QUIT " ]; then
       echo "NO (got ${RC})"
  -    echo STDIN  cat ${STDIN}
  -    echo STDOUT cat ${STDOUT}
  -    echo STDERR cat ${STDERR}
  -    echo LOG    cat ${L2FILE}
  +    echo "STDIN  cat ${STDIN}"
  +    echo "STDOUT cat ${STDOUT}"
  +    echo "STDERR cat ${STDERR}"
  +    echo "LOG    cat ${L2FILE}"
       exit 1;
   fi
   echo "yes"
  @@ -175,7 +182,7 @@
   echon "checking whether -m option blocks invalid sender ... "
   prolog
   newmsg
  -( MFILT=".*@is.invalid" ; ./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 -t nntp:connect=1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
  +( MFILT=".*@is.invalid" ; ./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 --timeoutnntpconnect=1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
   RC="";
   if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
   if [ 1 -eq `egrep <${STDOUT} '^250[- ].+pleased to meet you'    | wc -l` ]; then RC="${RC}LHLO "; fi
  @@ -186,6 +193,10 @@
   if [ 1 -eq `egrep <${STDOUT} '^221[- ]2.0.0.+closing.+channel'  | wc -l` ]; then RC="${RC}QUIT "; fi
   if [ "${RC}" != "init LHLO MAIL RCPT DATA post QUIT " ]; then
       echo "NO (got ${RC})"
  +    echo "STDIN  cat ${STDIN}"
  +    echo "STDOUT cat ${STDOUT}"
  +    echo "STDERR cat ${STDERR}"
  +    echo "LOG    cat ${L2FILE}"
       exit 1;
   fi
   echo "yes"
  @@ -193,7 +204,7 @@
   echon "checking whether -s option rejects article with invalid size ... "
   prolog
   newmsg
  -./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} ${LOG} -m "${MFILT}" -n ${NODE} -s 100 -t nntp:connect=1 ${GROUP} >${STDOUT} 2>${STDERR} ; RC=$?
  +./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} ${LOG} -m "${MFILT}" -n ${NODE} -s 100 --timeoutnntpconnect=1 ${GROUP} >${STDOUT} 2>${STDERR} ; RC=$?
   RC="";
   if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
   if [ 1 -eq `egrep <${STDOUT} '^250[- ].*pleased to meet you'    | wc -l` ]; then RC="${RC}LHLO "; fi
  @@ -204,6 +215,10 @@
   if [ 1 -eq `egrep <${STDOUT} '^221[- ]2.0.0.+closing.+channel'  | wc -l` ]; then RC="${RC}QUIT "; fi
   if [ "${RC}" != "init LHLO MAIL RCPT DATA post QUIT " ]; then
       echo "NO (got ${RC})"
  +    echo "STDIN  cat ${STDIN}"
  +    echo "STDOUT cat ${STDOUT}"
  +    echo "STDERR cat ${STDERR}"
  +    echo "LOG    cat ${L2FILE}"
       exit 1;
   fi
   echo "yes"
  @@ -211,12 +226,16 @@
   echon "checking whether -c option fails on invalid local host address ... "
   prolog
   newmsg
  -( LOCAL="10.255.255.255" ; ./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 -t nntp:connect=1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
  +( LOCAL="10.255.255.255" ; ./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 --timeoutnntpconnect=1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
   RC="";
   if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
  -if [ 1 -eq `egrep <${FILE}   'error.+binding'                   | wc -l` ]; then RC="${RC}bind "; fi
  +if [ 1 -eq `egrep <${L2FILE} 'error.+binding'                   | wc -l` ]; then RC="${RC}bind "; fi
   if [ "${RC}" != "init bind " ]; then
       echo "NO (got ${RC})"
  +    echo "STDIN  cat ${STDIN}"
  +    echo "STDOUT cat ${STDOUT}"
  +    echo "STDERR cat ${STDERR}"
  +    echo "LOG    cat ${L2FILE}"
       exit 1;
   fi
   echo "yes"
  @@ -224,7 +243,7 @@
   echon "checking whether -g envelope option blocks invalid group ... "
   prolog
   newmsg
  -( GROUP="foo.*" ; ./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g envelope -d ${HOST} ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 -t nntp:connect=1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
  +( GROUP="foo.*" ; ./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g envelope -d ${HOST} ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 --timeoutnntpconnect=1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
   RC="";
   if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
   if [ 1 -eq `egrep <${STDOUT} '^250[- ].*pleased to meet you'    | wc -l` ]; then RC="${RC}LHLO "; fi
  @@ -236,6 +255,10 @@
   if [ 1 -eq `egrep <${STDOUT} '^221[- ]2.0.0.+closing.+channel'  | wc -l` ]; then RC="${RC}QUIT "; fi
   if [ "${RC}" != "init LHLO MAIL RCPT RCPT DATA post QUIT " ]; then
       echo "NO (got ${RC})"
  +    echo "STDIN  cat ${STDIN}"
  +    echo "STDOUT cat ${STDOUT}"
  +    echo "STDERR cat ${STDERR}"
  +    echo "LOG    cat ${L2FILE}"
       exit 1;
   fi
   echo "yes"
  @@ -243,12 +266,16 @@
   echon "checking whether -d option times out for invalid host ... "
   prolog
   newmsg
  -( HOST="10.255.255.255" ; ./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 -t nntp:connect=1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
  +( HOST="10.255.255.255" ; ./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 --timeoutnntpconnect=1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
   RC="";
   if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
  -if [ 1 -eq `egrep <${FILE}   'warning.+connect.+failed'         | wc -l` ]; then RC="${RC}conn "; fi
  +if [ 1 -eq `egrep <${L2FILE} 'warning.+connect.+failed'         | wc -l` ]; then RC="${RC}conn "; fi
   if [ "${RC}" != "init conn " ]; then
       echo "NO (got ${RC})"
  +    echo "STDIN  cat ${STDIN}"
  +    echo "STDOUT cat ${STDOUT}"
  +    echo "STDERR cat ${STDERR}"
  +    echo "LOG    cat ${L2FILE}"
       exit 1;
   fi
   echo "yes"

From ossp-cvs-owner@ossp.org  Tue Feb  5 16:58:22 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F1D60764F8; Tue,  5 Feb 2002 16:58:21 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c
Message-Id: <20020205155821.F1D60764F8@mail.ossp.org>
Date: Tue,  5 Feb 2002 16:58:21 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   05-Feb-2002 16:58:21
  Branch: HEAD                             Handle: 2002020515582100

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c

  Log:
    yes popt supports dash optargs. Bugfix optarg.

  Summary:
    Revision    Changes     Path
    1.43        +2  -2      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.42 -r1.43 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	5 Feb 2002 14:56:47 -0000	1.42
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	5 Feb 2002 15:58:21 -0000	1.43
  @@ -347,7 +347,7 @@
   
           if (ov->ndata == 1) {
               /* dash means stdio */
  -            if (strcmp(ov->data.s, "-") != 0) { //FIXME does this work with popt()?
  +            if (strcmp(ov->data.s, "-") != 0) {
                   if ((rc = sa_create(&ctx->saServerbind)) != SA_OK) {
                       log1(ctx, ERROR, "option --bind, creating TCP socket (internal) failed with \"%s\"", sa_error(rc));
                       throw(0,0,0);
  @@ -364,7 +364,7 @@
                       int n;
                       int i;
   
  -                    cpPath = strdup(optarg);
  +                    cpPath = strdup(ov->data.s);
                       cpPerm = NULL;
                       nPerm  = -1;
                       if ((cpPerm = strrchr(cpPath, ':')) != NULL) {

From ossp-cvs-owner@ossp.org  Tue Feb  5 17:14:29 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D6F9C764F8; Tue,  5 Feb 2002 17:14:28 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str Makefile.in
Message-Id: <20020205161428.D6F9C764F8@mail.ossp.org>
Date: Tue,  5 Feb 2002 17:14:28 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   05-Feb-2002 17:14:28
  Branch: HEAD                             Handle: 2002020516142800

  Modified files:
    ossp-pkg/str            Makefile.in

  Log:
    Conform building across all OSSP rc included libraries. Please review, as OSSP
    doesn't have a build standard (and other libraries are also out of
    conformance.)

  Summary:
    Revision    Changes     Path
    1.42        +0  -2      ossp-pkg/str/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/str/Makefile.in
  ============================================================
  $ cvs diff -u -r1.41 -r1.42 Makefile.in
  --- ossp-pkg/str/Makefile.in	31 Jan 2002 13:34:13 -0000	1.41
  +++ ossp-pkg/str/Makefile.in	5 Feb 2002 16:14:28 -0000	1.42
  @@ -186,8 +186,6 @@
   	&& cp Makefile.new Makefile.in
   	&& rm -f Makefile.new
   
  -$(OBJS): Makefile
  -
   #   AUTOMATICALLY GENERATED DEPENDENCY LIST - DO NOT EDIT
   str_pcre.o: str_pcre.c str_pcre.h str_pcre.tab
   str_memory.o: str_memory.c str_p.h str.h str_config.h str_pcre.h

From ossp-cvs-owner@ossp.org  Tue Feb  5 18:29:18 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8CFEB764F8; Tue,  5 Feb 2002 18:29:18 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc Makefile.in configure.in devtool.conf rc.c rc....
Message-Id: <20020205172918.8CFEB764F8@mail.ossp.org>
Date: Tue,  5 Feb 2002 18:29:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   05-Feb-2002 18:29:18
  Branch: HEAD                             Handle: 2002020517291700

  Modified files:
    ossp-pkg/rc             Makefile.in configure.in devtool.conf rc.c rc.h

  Log:
    Transition flush.

  Summary:
    Revision    Changes     Path
    1.7         +16 -7      ossp-pkg/rc/Makefile.in
    1.9         +4  -1      ossp-pkg/rc/configure.in
    1.7         +6  -1      ossp-pkg/rc/devtool.conf
    1.6         +9  -9      ossp-pkg/rc/rc.c
    1.6         +8  -1      ossp-pkg/rc/rc.h
  ____________________________________________________________________________

  Index: ossp-pkg/rc/Makefile.in
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 Makefile.in
  --- ossp-pkg/rc/Makefile.in	5 Feb 2002 14:11:52 -0000	1.6
  +++ ossp-pkg/rc/Makefile.in	5 Feb 2002 17:29:17 -0000	1.7
  @@ -48,9 +48,12 @@
   RM              = rm -f
   RMDIR           = rmdir
   SHTOOL          = ./shtool
  +LIBTOOL         = ./libtool
   POD2MAN         = pod2man
   TRUE            = true
   
  +PROG_NAME       = rc
  +
   TARGET          = $(TARGET_PROGS) $(TARGET_MANS)
   TARGET_PROGS    = rc
   TARGET_MANS     = rc.1 rc-sample.5
  @@ -61,9 +64,11 @@
   SUBDIRS         = @SUBDIR_EX@ @SUBDIR_VAR@ @SUBDIR_STR@ @SUBDIR_POPT@
   
   .SUFFIXES:
  -.SUFFIXES: .c .cc .cpp .o
  +.SUFFIXES: .c .cc .cpp .o .lo
   .c.o:
   	$(CC) -c $(CPPFLAGS) $(CFLAGS) $<
  +.c.lo:
  +	$(LIBTOOL) --mode=compile --quiet $(CC) -c $(CPPFLAGS) $(CFLAGS) $<
   
   all:            _SUBDIRS_all $(TARGET)
   
  @@ -86,18 +91,18 @@
   	    echo "<=== $(_SUBDIRS_DP)$$subdir"; \
   	done
   
  -$(TARGET_PROGS): Makefile $(OBJS)
  -	$(CC) $(LDFLAGS) -o $(TARGET_PROGS) $(OBJS) $(LIBS)
  -
  -$(OBJS): Makefile
  -
   # Build pcre regex library
   rc_pcre.lo: rc_pcre.tab rc_pcre.c
   rc_pcre.tab: rc_pcre.c
  -	$(CC) $(CFLAGS) -DRC_PCRE_TAB $(LDFLAGS) -o rc_pcre.gen rc_pcre.c $(LIBS)
  +#	$(CC) $(CFLAGS) -DRC_PCRE_TAB $(LDFLAGS) -o rc_pcre.gen rc_pcre.c $(LIBS)
  +	$(CC) $(CFLAGS) -DRC_PCRE_TAB $(LDFLAGS) -o rc_pcre.gen rc_pcre.c
   	./rc_pcre.gen >rc_pcre.tab
   	$(RM) rc_pcre.gen
   
  +$(PROG_NAME): $(OBJS)
  +#	$(LIBTOOL) --mode=link --quiet $(CC) $(LDFLAGS) -o $(PROG_NAME) $(OBJS) $(LIBS)
  +	$(CC) $(LDFLAGS) -o $(PROG_NAME) $(OBJS) $(LIBS)
  +
   rc.1: rc.pod
   	VS=`$(SHTOOL) version -lc -dshort rc_version.c`; \
   	VL=`$(SHTOOL) version -lc -dlong rc_version.c`; \
  @@ -126,8 +131,12 @@
   distclean: clean
   	$(RM) config.log config.status config.cache
   	$(RM) Makefile rc_config.h rc_pcre.tab
  +	$(RM) config.log config.status config.cache
  +	$(RM) Makefile rc_config.h
  +	$(RM) libtool
   
   realclean: distclean
  +	$(RM) ltmain.sh libtool.m4 config.guess config.sub
   	$(RM) configure rc_config.h.in
   	$(RM) shtool
   
  Index: ossp-pkg/rc/configure.in
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 configure.in
  --- ossp-pkg/rc/configure.in	4 Feb 2002 22:35:20 -0000	1.8
  +++ ossp-pkg/rc/configure.in	5 Feb 2002 17:29:17 -0000	1.9
  @@ -34,7 +34,7 @@
   
   dnl Announce the product and version
   AC_DIVERT_PUSH(NOTICE)
  -V=`./shtool version -lc -dlong version.c`
  +V=`./shtool version -lc -dlong rc_version.c`
   ./shtool echo -e "Configuring %BOSSP rc%b, Version %B${V}%b"
   echo "Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>"
   echo "Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>"
  @@ -51,6 +51,9 @@
   AC_PROG_CC_STDC
   AC_HEADER_STDC
   AC_PROG_INSTALL
  +
  +sinclude(libtool.m4)
  +AC_PROG_LIBTOOL
   
   dnl Check other requirements
   AC_SET_MAKE
  Index: ossp-pkg/rc/devtool.conf
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 devtool.conf
  --- ossp-pkg/rc/devtool.conf	5 Feb 2002 14:11:52 -0000	1.6
  +++ ossp-pkg/rc/devtool.conf	5 Feb 2002 17:29:17 -0000	1.7
  @@ -4,6 +4,7 @@
   
   %autogen
       @autogen shtool   1.5.4 "1.5.*" all
  +    @autogen libtool  1.4.2 "1.4*"
       @autogen autoconf 2.52  "2.5.*"
   
       echo "===> rc_ex (devtool autogen)"
  @@ -21,6 +22,7 @@
   
   %autoclean
       @autoclean shtool
  +    @autoclean libtool
       @autoclean autoconf
   
       echo "===> rc_ex (devtool autoclean)"
  @@ -36,11 +38,14 @@
   %configure
       ./configure \
           --cache-file=config.cache \
  +        --enable-maintainer \
  +        --disable-shared \
           --prefix=/tmp/rc \
  +        --enable-debug
           "$@"
   
   %version
  -    ./shtool version -l txt -n "OSSP rc" -p "rc_" -e VERSION
  +    ./shtool version -l c -n "OSSP rc" -p "rc_" -e rc_version.c
   
   %dist
       make distclean >/dev/null 2>&1
  Index: ossp-pkg/rc/rc.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 rc.c
  --- ossp-pkg/rc/rc.c	4 Feb 2002 22:35:20 -0000	1.5
  +++ ossp-pkg/rc/rc.c	5 Feb 2002 17:29:17 -0000	1.6
  @@ -63,15 +63,15 @@
                        <command> [<command> ...]", szProgname);
   }*/
   
  -int main(int argc, char *argv[]) {
  -    char cOpt;           /* For argument parsing            */
  -    int  iBufpos = 0;    /* For tracking options            */
  -    char *szCLIBuf;    
  -    char szFuncfile;     /* Rc.func file name and location  */
  -    int  nIter;
  +int main(int argc, char *argv[])
  +{
  +    char cOpt = 0;              /* For argument parsing           */
  +    int  iBufpos = 0;           /* For tracking options           */
  +    char *szCLIBuf = NULL;    
  +    char *szFuncfile = NULL;    /* Rc.func file name and location */
  +    int  nIter = 0;
       char pcBuf[BUFSIZ+1];
  -    popt_context optCon; /* Context for parsing options     */
  -    rc_return_t nRet;
  +    popt_context optCon;        /* Context for parsing options    */
   
       struct popt_option optionsTable[] = {
           /* Long options with short keys but no arguments */
  @@ -161,7 +161,7 @@
           fprintf(stderr, "%s: %s\n",
               popt_badoption(optCon, POPT_BADOPTION_NOALIAS),
               popt_strerror(cOpt));
  -        die(nRet);
  +        die(RC_ERR_INT);
       }
   
       /* Print out options, szCLIBuf chosen */
  Index: ossp-pkg/rc/rc.h
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 rc.h
  --- ossp-pkg/rc/rc.h	4 Feb 2002 22:35:20 -0000	1.5
  +++ ossp-pkg/rc/rc.h	5 Feb 2002 17:29:17 -0000	1.6
  @@ -43,6 +43,9 @@
   #define TRUE (!FALSE)
   #endif
   
  +#include "popt.h"
  +
  +
   /* RC return codes */
   typedef enum {
       RC_OK,      /* Success                  */
  @@ -52,8 +55,12 @@
       RC_ERR_SYS, /* System error (see errno) */
       RC_ERR_IO,  /* Input/output error       */
       RC_ERR_FMT, /* Formatting error         */
  -    RC_ERR_INT, /* Internal error           */
  +    RC_ERR_INT  /* Internal error           */
   } rc_return_t;
  +
  +/* Function prototypes */
  +static void die(rc_return_t);
  +void usage(popt_context, rc_return_t, char *);
   
   /*rc_result_t rc_Err              (void);
   rc_result_t rc_Warn             (void);

From ossp-cvs-owner@ossp.org  Tue Feb  5 20:11:46 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C2478764F8; Tue,  5 Feb 2002 20:11:45 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc .cvsignore Makefile.in configure.in devtool.co...
Message-Id: <20020205191145.C2478764F8@mail.ossp.org>
Date: Tue,  5 Feb 2002 20:11:45 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   05-Feb-2002 20:11:45
  Branch: HEAD                             Handle: 2002020519114500

  Modified files:
    ossp-pkg/rc             .cvsignore Makefile.in configure.in devtool.conf

  Log:
    Rc can build again, at least with static library linking.

  Summary:
    Revision    Changes     Path
    1.4         +10 -8      ossp-pkg/rc/.cvsignore
    1.8         +8  -15     ossp-pkg/rc/Makefile.in
    1.10        +4  -3      ossp-pkg/rc/configure.in
    1.8         +0  -2      ossp-pkg/rc/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/rc/.cvsignore
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 .cvsignore
  --- ossp-pkg/rc/.cvsignore	4 Feb 2002 22:19:29 -0000	1.3
  +++ ossp-pkg/rc/.cvsignore	5 Feb 2002 19:11:45 -0000	1.4
  @@ -1,14 +1,16 @@
  -Makefile
  -configure
  -config.status
  -config.log
   config.cache
  +config.log
   config.guess
   config.sub
  -rc_config.h.in
  -rc_config.h
  +config.status
  +configure
   libtool.m4
  -rc-sample.5
   ltmain.sh
  -shtool
  +Makefile
  +rc
   rc.1
  +rc_config.h
  +rc_config.h.in
  +rc_pcre.tab
  +rc-sample.5
  +shtool
  Index: ossp-pkg/rc/Makefile.in
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 Makefile.in
  --- ossp-pkg/rc/Makefile.in	5 Feb 2002 17:29:17 -0000	1.7
  +++ ossp-pkg/rc/Makefile.in	5 Feb 2002 19:11:45 -0000	1.8
  @@ -48,7 +48,6 @@
   RM              = rm -f
   RMDIR           = rmdir
   SHTOOL          = ./shtool
  -LIBTOOL         = ./libtool
   POD2MAN         = pod2man
   TRUE            = true
   
  @@ -59,16 +58,14 @@
   TARGET_MANS     = rc.1 rc-sample.5
   
   SRCS            = rc.c rc_version.c rc_pcre.c
  -OBJS            = rc.o rc_version.o rc_pcre.lo
  +OBJS            = rc.o rc_version.o rc_pcre.o
   
   SUBDIRS         = @SUBDIR_EX@ @SUBDIR_VAR@ @SUBDIR_STR@ @SUBDIR_POPT@
   
   .SUFFIXES:
  -.SUFFIXES: .c .cc .cpp .o .lo
  +.SUFFIXES: .c .cc .cpp .o
   .c.o:
   	$(CC) -c $(CPPFLAGS) $(CFLAGS) $<
  -.c.lo:
  -	$(LIBTOOL) --mode=compile --quiet $(CC) -c $(CPPFLAGS) $(CFLAGS) $<
   
   all:            _SUBDIRS_all $(TARGET)
   
  @@ -92,7 +89,7 @@
   	done
   
   # Build pcre regex library
  -rc_pcre.lo: rc_pcre.tab rc_pcre.c
  +rc_pcre.o: rc_pcre.tab rc_pcre.c
   rc_pcre.tab: rc_pcre.c
   #	$(CC) $(CFLAGS) -DRC_PCRE_TAB $(LDFLAGS) -o rc_pcre.gen rc_pcre.c $(LIBS)
   	$(CC) $(CFLAGS) -DRC_PCRE_TAB $(LDFLAGS) -o rc_pcre.gen rc_pcre.c
  @@ -126,20 +123,16 @@
   	$(SHTOOL) install -c -m 644 rc-sample.5 $(mandir)/man5/rc-sample.5
   
   clean:
  -	$(RM) $(TARGET) $(OBJS)
  +	$(RM) $(TARGET) $(OBJS) $(PROG_NAME).core
   
   distclean: clean
  -	$(RM) config.log config.status config.cache
  -	$(RM) Makefile rc_config.h rc_pcre.tab
  -	$(RM) config.log config.status config.cache
  -	$(RM) Makefile rc_config.h
  -	$(RM) libtool
  +	$(RM) config.log config.status config.cache # Generated by ./configure
  +	$(RM) Makefile rc_config.h # Generated by ./configure
   
   realclean: distclean
  -	$(RM) ltmain.sh libtool.m4 config.guess config.sub
  -	$(RM) configure rc_config.h.in
  +	$(RM) configure rc_config.h.in # Generated by Autoconf
   	$(RM) shtool
   
   check: test
   test: rc
  -	@./test.sh
  +	./test.sh
  Index: ossp-pkg/rc/configure.in
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 configure.in
  --- ossp-pkg/rc/configure.in	5 Feb 2002 17:29:17 -0000	1.9
  +++ ossp-pkg/rc/configure.in	5 Feb 2002 19:11:45 -0000	1.10
  @@ -52,9 +52,6 @@
   AC_HEADER_STDC
   AC_PROG_INSTALL
   
  -sinclude(libtool.m4)
  -AC_PROG_LIBTOOL
  -
   dnl Check other requirements
   AC_SET_MAKE
   AC_PROG_CC
  @@ -118,6 +115,10 @@
   dnl Extra library handling
   LIBS="$LIBS $LIBS_EXTRA"
   
  +enable_shared=no
  +export enable_shared
  +enable_headline=no
  +export enable_headline
   dnl Call other configure scripts
   AC_CONFIG_SUBDIRS([$SUBDIR_EX $SUBDIR_STR $SUBDIR_VAR $SUBDIR_POPT])
   
  Index: ossp-pkg/rc/devtool.conf
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 devtool.conf
  --- ossp-pkg/rc/devtool.conf	5 Feb 2002 17:29:17 -0000	1.7
  +++ ossp-pkg/rc/devtool.conf	5 Feb 2002 19:11:45 -0000	1.8
  @@ -4,7 +4,6 @@
   
   %autogen
       @autogen shtool   1.5.4 "1.5.*" all
  -    @autogen libtool  1.4.2 "1.4*"
       @autogen autoconf 2.52  "2.5.*"
   
       echo "===> rc_ex (devtool autogen)"
  @@ -22,7 +21,6 @@
   
   %autoclean
       @autoclean shtool
  -    @autoclean libtool
       @autoclean autoconf
   
       echo "===> rc_ex (devtool autoclean)"

From ossp-cvs-owner@ossp.org  Tue Feb  5 20:12:25 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4DE0D76500; Tue,  5 Feb 2002 20:12:25 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.c rc_version.c
Message-Id: <20020205191225.4DE0D76500@mail.ossp.org>
Date: Tue,  5 Feb 2002 20:12:25 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   05-Feb-2002 20:12:25
  Branch: HEAD                             Handle: 2002020519122400

  Added files:
    ossp-pkg/rc             rc_version.c
  Modified files:
    ossp-pkg/rc             rc.c

  Log:
    Popt option parsing works fundementally.

  Summary:
    Revision    Changes     Path
    1.7         +5  -4      ossp-pkg/rc/rc.c
    1.1         +0  -0      ossp-pkg/rc/rc_version.c
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 rc.c
  --- ossp-pkg/rc/rc.c	5 Feb 2002 17:29:17 -0000	1.6
  +++ ossp-pkg/rc/rc.c	5 Feb 2002 19:12:24 -0000	1.7
  @@ -91,7 +91,8 @@
           /* Single argument long options with short keys */
           { "locate",  'L', POPT_ARG_STRING, 0, RC_LOC_VAL, RC_LOC_DESC, "regx" },
           { "conf",    'c', POPT_ARG_STRING, 0, RC_CNF_VAL, RC_CNF_DESC, "path" },
  -        { "func",    'f', POPT_ARG_STRING, 0, RC_FNC_VAL, RC_FNC_DESC, "path" },
  +        { "func",    'f', POPT_ARG_STRING, &szFuncfile,\
  +            RC_FNC_VAL, RC_FNC_DESC, "path" },
           { "query",   'q', POPT_ARG_STRING, 0, RC_QRY_VAL, RC_QRY_DESC, "varx" },
           { "tmp",     't', POPT_ARG_STRING, 0, RC_TMP_VAL, RC_TMP_DESC, "path" },
   
  @@ -161,13 +162,13 @@
           fprintf(stderr, "%s: %s\n",
               popt_badoption(optCon, POPT_BADOPTION_NOALIAS),
               popt_strerror(cOpt));
  -        die(RC_ERR_INT);
  +        die(RC_ERR_ARG);
       }
   
       /* Print out options, szCLIBuf chosen */
  -    printf("Options chosen: ");
  +    fprintf(stderr, "Options chosen: ");
       for (nIter = 0; nIter < iBufpos ; nIter++)
  -        printf("-%c ", pcBuf[nIter]);
  +        fprintf(stderr, "-%c ", pcBuf[nIter]);
       if (szFuncfile)
           fprintf(stderr, "-f %s ", szFuncfile);
       fprintf(stderr, "\nRun these commands: %s\n", szCLIBuf);
  Index: ossp-pkg/rc/rc_version.c
  ============================================================
  $ cvs update -p -r1.1 rc_version.c
  /*
  **  rc_version.c -- Version Information for OSSP rc (syntax: C/C++)
  **  [automatically generated and maintained by GNU shtool]
  */
  
  #ifdef _RC_VERSION_C_AS_HEADER_
  
  #ifndef _RC_VERSION_C_
  #define _RC_VERSION_C_
  
  #define RC_VERSION 0x001201
  
  typedef struct {
      const int   v_hex;
      const char *v_short;
      const char *v_long;
      const char *v_tex;
      const char *v_gnu;
      const char *v_web;
      const char *v_sccs;
      const char *v_rcs;
  } rc_version_t;
  
  extern rc_version_t rc_version;
  
  #endif /* _RC_VERSION_C_ */
  
  #else /* _RC_VERSION_C_AS_HEADER_ */
  
  #define _RC_VERSION_C_AS_HEADER_
  #include "rc_version.c"
  #undef  _RC_VERSION_C_AS_HEADER_
  
  rc_version_t rc_version = {
      0x001201,
      "0.1.1",
      "0.1.1 (05-Feb-2002)",
      "This is OSSP rc, Version 0.1.1 (05-Feb-2002)",
      "OSSP rc 0.1.1 (05-Feb-2002)",
      "OSSP rc/0.1.1",
      "@(#)OSSP rc 0.1.1 (05-Feb-2002)",
      "$Id: rc_version.c,v 1.1 2002/02/05 19:12:24 ossp-cvs Exp $"
  };
  
  #endif /* _RC_VERSION_C_AS_HEADER_ */
  

From ossp-cvs-owner@ossp.org  Tue Feb  5 20:52:25 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2E7B1764F8; Tue,  5 Feb 2002 20:52:25 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex Makefile.in
Message-Id: <20020205195225.2E7B1764F8@mail.ossp.org>
Date: Tue,  5 Feb 2002 20:52:25 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   05-Feb-2002 20:52:25
  Branch: HEAD                             Handle: 2002020519522400

  Modified files:
    ossp-pkg/ex             Makefile.in

  Log:
    Force new object file generation if the Makefile changed.

  Summary:
    Revision    Changes     Path
    1.5         +3  -0      ossp-pkg/ex/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/ex/Makefile.in
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 Makefile.in
  --- ossp-pkg/ex/Makefile.in	31 Jan 2002 21:20:44 -0000	1.4
  +++ ossp-pkg/ex/Makefile.in	5 Feb 2002 19:52:24 -0000	1.5
  @@ -67,6 +67,9 @@
   .c.lo:
   	@$(LIBTOOL) --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS) -c $<
   
  +$(LIB_OBJS): Makefile
  +$(TST_OBJS): Makefile
  +
   $(LIB_NAME): $(LIB_OBJS)
   	@$(LIBTOOL) --mode=link $(CC) -o $(LIB_NAME) $(LIB_OBJS) -rpath $(libdir) \
   	    -version-info `$(SHTOOL) version -l txt -d libtool VERSION`

From ossp-cvs-owner@ossp.org  Tue Feb  5 20:53:31 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 62D07764F8; Tue,  5 Feb 2002 20:53:31 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/popt Makefile.in
Message-Id: <20020205195331.62D07764F8@mail.ossp.org>
Date: Tue,  5 Feb 2002 20:53:31 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   05-Feb-2002 20:53:31
  Branch: HEAD                             Handle: 2002020519533100

  Modified files:
    ossp-pkg/popt           Makefile.in

  Log:
    Force new object file generation if the Makefile changed.

  Summary:
    Revision    Changes     Path
    1.2         +3  -0      ossp-pkg/popt/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/popt/Makefile.in
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 Makefile.in
  --- ossp-pkg/popt/Makefile.in	30 Jan 2002 14:05:32 -0000	1.1
  +++ ossp-pkg/popt/Makefile.in	5 Feb 2002 19:53:31 -0000	1.2
  @@ -63,6 +63,9 @@
   .c.lo:
   	@$(LIBTOOL) --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS) -c $<
   
  +$(LIB_OBJS): Makefile
  +$(TST_OBJS): Makefile
  +
   $(LIB_NAME): $(LIB_OBJS)
   	@$(LIBTOOL) --mode=link $(CC) -o $(LIB_NAME) $(LIB_OBJS) -rpath $(libdir) \
   	    -version-info `$(SHTOOL) version -l txt -d libtool VERSION`

From ossp-cvs-owner@ossp.org  Tue Feb  5 20:54:21 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 64C7776500; Tue,  5 Feb 2002 20:54:21 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str Makefile.in
Message-Id: <20020205195421.64C7776500@mail.ossp.org>
Date: Tue,  5 Feb 2002 20:54:21 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   05-Feb-2002 20:54:21
  Branch: HEAD                             Handle: 2002020519542100

  Modified files:
    ossp-pkg/str            Makefile.in

  Log:
    Force new object file generation if the Makefile changed.

  Summary:
    Revision    Changes     Path
    1.43        +2  -0      ossp-pkg/str/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/str/Makefile.in
  ============================================================
  $ cvs diff -u -r1.42 -r1.43 Makefile.in
  --- ossp-pkg/str/Makefile.in	5 Feb 2002 16:14:28 -0000	1.42
  +++ ossp-pkg/str/Makefile.in	5 Feb 2002 19:54:21 -0000	1.43
  @@ -97,6 +97,8 @@
   
   all: libstr.la str_test str.3 str-config.1
   
  +$(OBJS): Makefile
  +
   libstr.la: $(OBJS) 
   	$(LIBTOOL) --mode=link --quiet $(CC) -o libstr.la $(OBJS) -rpath $(libdir) \
   	-version-info `$(SHTOOL) version -l c -d libtool str_version.c`

From ossp-cvs-owner@ossp.org  Tue Feb  5 20:55:42 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 99A34764F8; Tue,  5 Feb 2002 20:55:42 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var Makefile.in
Message-Id: <20020205195542.99A34764F8@mail.ossp.org>
Date: Tue,  5 Feb 2002 20:55:42 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   05-Feb-2002 20:55:42
  Branch: HEAD                             Handle: 2002020519554200

  Modified files:
    ossp-pkg/var            Makefile.in

  Log:
    Force new object file generation if the Makefile changed.

  Summary:
    Revision    Changes     Path
    1.3         +3  -0      ossp-pkg/var/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/var/Makefile.in
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 Makefile.in
  --- ossp-pkg/var/Makefile.in	2 Jan 2002 17:12:18 -0000	1.2
  +++ ossp-pkg/var/Makefile.in	5 Feb 2002 19:55:42 -0000	1.3
  @@ -75,6 +75,9 @@
   .c.lo:
   	@$(LIBTOOL) --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS) -c $<
   
  +$(LIB_OBJS): Makefile
  +$(TST_OBJS): Makefile
  +
   $(LIB_NAME): $(LIB_OBJS)
   	@$(LIBTOOL) --mode=link $(CC) -o $(LIB_NAME) $(LIB_OBJS) -rpath $(libdir) \
   	    -version-info `$(SHTOOL) version -l txt -d libtool VERSION`

From ossp-cvs-owner@ossp.org  Tue Feb  5 21:37:35 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CA3FB764F8; Tue,  5 Feb 2002 21:37:34 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc 00TODO rc.c rc.h rc_p.h rc_strings.h
Message-Id: <20020205203734.CA3FB764F8@mail.ossp.org>
Date: Tue,  5 Feb 2002 21:37:34 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   05-Feb-2002 21:37:34
  Branch: HEAD                             Handle: 2002020520373400

  Modified files:
    ossp-pkg/rc             00TODO rc.c rc.h rc_p.h rc_strings.h

  Log:
    Fixed copyright and updated the todo list.

  Summary:
    Revision    Changes     Path
    1.18        +4  -15     ossp-pkg/rc/00TODO
    1.8         +1  -1      ossp-pkg/rc/rc.c
    1.7         +1  -1      ossp-pkg/rc/rc.h
    1.4         +1  -1      ossp-pkg/rc/rc_p.h
    1.2         +1  -1      ossp-pkg/rc/rc_strings.h
  ____________________________________________________________________________

  Index: ossp-pkg/rc/00TODO
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 00TODO
  --- ossp-pkg/rc/00TODO	4 Feb 2002 21:57:09 -0000	1.17
  +++ ossp-pkg/rc/00TODO	5 Feb 2002 20:37:34 -0000	1.18
  @@ -1,14 +1,5 @@
   00TODO: Tasks left to accomplish before rc is complete
   
  -!PROBLEMA!
  -$ ./configure
  -checking whether to build against external Dmalloc library... no
  -checking whether to build against external OSSP popt library... no
  -checking whether to build against external OSSP ex library... no
  -checking whether to build against external OSSP Str library... no
  -checking whether to build against external OSSP Var library... no
  -configure: creating ./config.status
  -
   Unfinished business
     Manpage options incorrectly specifies multiple rc.funcs.
     What when multiple command interpreters and one --print or --eval given?
  @@ -18,9 +9,11 @@
       Give example semantics of a common scenario.
       No error semantics in pseudocode.
   
  +Document
  +  Refs, pri, user, group, ci, go only in normal (not special) sections.
  +
   Consider
     Removing the OSSP_RC_DEACT deactivation feature (thl.)
  -  Make return code and error definitions unique to OSSP rc.
     Offer include directive in config file.
     Dynamic handling of command interpreter option.
     Environment of manpage has redundant text.
  @@ -28,13 +21,9 @@
       Als variable in %config Section?
   
   Must do
  -  Strip local getopt and popt code, and use OSSP popt library.
  -  Translate rc bourne shell script to ANSI C.
  +  Translate rc bourne shell script to ISO C.
     Finish man page. Start latex or Docbook guide.
     If a variable is defined for which no default exists, warn user (Scholli.)
  -
  -Document
  -  Refs, pri, user, group, ci, go only in normal (not special) sections.
   
   Detailed ;-) project plan
   -------------------------
  Index: ossp-pkg/rc/rc.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 rc.c
  --- ossp-pkg/rc/rc.c	5 Feb 2002 19:12:24 -0000	1.7
  +++ ossp-pkg/rc/rc.c	5 Feb 2002 20:37:34 -0000	1.8
  @@ -24,7 +24,7 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  rc.c: Run-command processor ANSI C source file
  +**  rc.c: Run-command processor ISO C source file
   */
   
   #include <stdio.h>
  Index: ossp-pkg/rc/rc.h
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 rc.h
  --- ossp-pkg/rc/rc.h	5 Feb 2002 17:29:17 -0000	1.6
  +++ ossp-pkg/rc/rc.h	5 Feb 2002 20:37:34 -0000	1.7
  @@ -24,7 +24,7 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  rc.h: Run-command processor ANSI C public header file
  +**  rc.h: Run-command processor ISO C public header file
   */
   
   #ifndef __OSSPRC_H__
  Index: ossp-pkg/rc/rc_p.h
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 rc_p.h
  --- ossp-pkg/rc/rc_p.h	4 Feb 2002 22:35:20 -0000	1.3
  +++ ossp-pkg/rc/rc_p.h	5 Feb 2002 20:37:34 -0000	1.4
  @@ -24,7 +24,7 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  rc_p.h: Run-command processor ANSI C private API header file
  +**  rc_p.h: Run-command processor ISO C private API header file
   */
   
   #ifndef __OSSPRC_P_H__
  Index: ossp-pkg/rc/rc_strings.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 rc_strings.h
  --- ossp-pkg/rc/rc_strings.h	4 Feb 2002 21:48:22 -0000	1.1
  +++ ossp-pkg/rc/rc_strings.h	5 Feb 2002 20:37:34 -0000	1.2
  @@ -24,7 +24,7 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  rc_strings.h: Run-command processor ANSI C public header file
  +**  rc_strings.h: Run-command processor ISO C public header file
   */
   
   #ifndef __OSSPRC_STRINGS_H__

From ossp-cvs-owner@ossp.org  Tue Feb  5 21:48:27 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1243D764F8; Tue,  5 Feb 2002 21:48:27 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc Makefile.in
Message-Id: <20020205204827.1243D764F8@mail.ossp.org>
Date: Tue,  5 Feb 2002 21:48:27 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   05-Feb-2002 21:48:27
  Branch: HEAD                             Handle: 2002020520482600

  Modified files:
    ossp-pkg/rc             Makefile.in

  Log:
    One last cleaning detail.

  Summary:
    Revision    Changes     Path
    1.9         +1  -1      ossp-pkg/rc/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/rc/Makefile.in
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 Makefile.in
  --- ossp-pkg/rc/Makefile.in	5 Feb 2002 19:11:45 -0000	1.8
  +++ ossp-pkg/rc/Makefile.in	5 Feb 2002 20:48:26 -0000	1.9
  @@ -123,7 +123,7 @@
   	$(SHTOOL) install -c -m 644 rc-sample.5 $(mandir)/man5/rc-sample.5
   
   clean:
  -	$(RM) $(TARGET) $(OBJS) $(PROG_NAME).core
  +	$(RM) $(TARGET) $(OBJS) $(PROG_NAME).core rc_pcre.tab
   
   distclean: clean
   	$(RM) config.log config.status config.cache # Generated by ./configure

From ossp-cvs-owner@ossp.org  Wed Feb  6 14:51:39 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2A524764FC; Wed,  6 Feb 2002 14:51:38 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c lmtp2nntp_main.c lmt...
Message-Id: <20020206135138.2A524764FC@mail.ossp.org>
Date: Wed,  6 Feb 2002 14:51:38 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   06-Feb-2002 14:51:38
  Branch: HEAD                             Handle: 2002020613513800

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c lmtp2nntp_main.c
                            lmtp2nntp_option.c test.sh

  Log:
    Fixed bug in --destionation and main() not initializing data correctly causing
    segfaults.  Deactivated leftover code from the static ns array with nsc
    counter where memcpy segfaults.  Fixed bug in option_register() not
    strdup()ing the default value causing free() to fail on cleanup.  Added '-b -'
    to test.sh cause defaultng to stdio does not currenly work.  Deactivated
    l2_channel_destroy() because it's cleanup fails and it hangs in a infinite
    loop in user space.

  Summary:
    Revision    Changes     Path
    1.44        +4  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.38        +14 -5      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
    1.13        +12 -7      ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
    1.11        +8  -8      ossp-pkg/lmtp2nntp/test.sh
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.43 -r1.44 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	5 Feb 2002 15:58:21 -0000	1.43
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	6 Feb 2002 13:51:38 -0000	1.44
  @@ -490,9 +490,12 @@
                       log2(ctx, ERROR, "option --destination, creating TCP socket (%s) failed with \"%s\"", cp /*FIXME again, option vs. config */, sa_error(rc));
                       throw(0,0,0);
                   }
  +                ctx->pns[i].nntp = NULL;
  +                ctx->pns[i].rc = NNTP_OK;
  +                ctx->pns[i].l2 = ctx->l2;
                   free(cp);
  +                ctx->nns = i;
               }
  -            ctx->nns = i;
           }
       }
       catch (ex)
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.37 -r1.38 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	5 Feb 2002 14:56:47 -0000	1.37
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	6 Feb 2002 13:51:38 -0000	1.38
  @@ -344,7 +344,6 @@
       ctx->ctx.vp = ctx;
       ctx->val = NULL;
       ctx->progname = NULL;
  -    ctx->option_childsmax = 0;
       ctx->option_groupmode = GROUPMODE_UNDEF;
       ctx->option_operationmode = OPERATIONMODE_UNDEF;
       ctx->option_operationmodefakestatus = NULL;
  @@ -364,6 +363,9 @@
       ctx->option_killflag = FALSE;
       ctx->option_uid = getuid();
       ctx->option_daemon = FALSE;
  +    ctx->nacl = 0;
  +    ctx->pacl = NULL;
  +    ctx->option_childsmax = 0;
       ctx->active_childs = 0;
       ctx->l2_env = NULL;
       ctx->l2 = NULL;
  @@ -371,14 +373,17 @@
       ctx->saServerbind = NULL;
       ctx->saaClientbind = NULL;
       ctx->saClientbind = NULL;
  +    ctx->saaIO = NULL;
  +    ctx->saIO = NULL;
  +    ctx->fdIOi = -1;
  +    ctx->fdIOo = -1;
       ctx->nns = 0;
       ctx->pns = NULL;
  -    ctx->nacl = 0;
  -    ctx->pacl = NULL;
       ctx->azGroupargs = NULL;
       ctx->asGroupargs = 0;
       initsession(&ctx->session);
       ctx->msg = NULL;
  +    memset(&ctx->uname, 0, sizeof(struct utsname));
       
       /* fill in application context */
       if (val_create(&ctx->val) != VAL_OK)
  @@ -623,7 +628,7 @@
       /* graceful shutdown */
       CUS:
       log0(ctx, NOTICE, "graceful shutdown shortly before exit - no more logging");
  -    l2_channel_destroy(ctx->l2);
  +    //l2_channel_destroy(ctx->l2);
       l2_env_destroy(ctx->l2_env);
       if (ctx->saServerbind)
           sa_destroy(ctx->saServerbind);
  @@ -791,11 +796,15 @@
           }
           else {
               log1(ctx, WARNING, "NNTP session establishment to ${option.destination}[${i}] failed", i); //FIXME
  -            log1(ctx, DEBUG, "removing ns[%d] from list", i);
  +            log1(ctx, DEBUG, "FIXME-CURRENTLY-NOT removing ns[%d] from list", i);
               lmtp_gfs_ns(&ctx->pns[i]);
  +            /*FIXME #1 this code is a leftover from the static ns array with nsc counter
  +              FIXME #2 this code removes the newsservice forever!? What is the scope, what should the scope be - gateway, child process, session, posting lifetime? What is the intention of the user?
               if (i < --ctx->nns) {
                   memcpy(&ctx->pns[i], &ctx->pns[i+1], (ctx->nns - i ) * sizeof(struct ns));
               }
  +            */
  +            i++; //FIXME this is just to avoid infinite loop
           }
       } while (i < ctx->nns);
   
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 lmtp2nntp_option.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	5 Feb 2002 14:56:47 -0000	1.12
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	6 Feb 2002 13:51:38 -0000	1.13
  @@ -152,14 +152,18 @@
       oc->val          = o->vo;
       oc->number       = o->pi + 1; /* 0 is a reserved val in popt, so offset 1 */
       switch (type) {
  -        case OPT_FLAG:   oc->data.f       = 0;    break;
  -        case OPT_SINGLE: oc->data.s       = def;  break;
  -        case OPT_MULTI:  oc->data.m       = NULL; break;
  +        case OPT_FLAG:   oc->data.f       = 0;
  +            break;
  +        case OPT_SINGLE: oc->data.s       = def == NULL ? NULL : strdup(def);
  +            break;
  +        case OPT_MULTI:  oc->data.m       = NULL;
  +            break;
       }
       oc->ndata        = (type == OPT_SINGLE && def != NULL) ? 1 : 0;
  -    if (   (                      oc->longname   == NULL)
  -        || (descrip    != NULL && oc->descrip    == NULL)
  -        || (argdescrip != NULL && oc->argdescrip == NULL)
  +    if (   (                                            oc->longname   == NULL)
  +        || (                      descrip    != NULL && oc->descrip    == NULL)
  +        || (                      argdescrip != NULL && oc->argdescrip == NULL)
  +        || (type == OPT_SINGLE && def        != NULL && oc->data.s     == NULL)
             )
           CU(OPTION_ERR_MEM);
   
  @@ -666,8 +670,9 @@
   
       oc = o->first;
       while (oc != NULL) {
  -        if (oc->type == OPT_SINGLE && oc->data.s != NULL)
  +        if (oc->type == OPT_SINGLE && oc->data.s != NULL) {
               free(oc->data.s);
  +        }
           if (oc->type == OPT_MULTI  && oc->data.m != NULL) {
               for (i = 0; i < oc->ndata; i++)
                   if (oc->data.m[i] == NULL)
  Index: ossp-pkg/lmtp2nntp/test.sh
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 test.sh
  --- ossp-pkg/lmtp2nntp/test.sh	5 Feb 2002 14:56:47 -0000	1.10
  +++ ossp-pkg/lmtp2nntp/test.sh	6 Feb 2002 13:51:38 -0000	1.11
  @@ -16,10 +16,10 @@
   Message-Id: <200108141251.f7ECpmn74812@dev.de.cw.net>
   From: Thomas Lotterer <Thomas.Lotterer@example.com>
   Received: from cw.example.com (cw.example.com [10.1.1.32])
  -    by gateway.example.com (8.9.2/8.9.2/$Revision: 1.10 $) with SMTP id NAA08840
  +    by gateway.example.com (8.9.2/8.9.2/$Revision: 1.11 $) with SMTP id NAA08840
       for <thomas.lotterer@gateway.example.com>; Mon, 2 Apr 2001 13:20:25 +0200 (MET DST)
   Received: from history (history.example.org [195.143.102.41])
  -    by cw.example.com (8.11.0/8.11.0/$Revision: 1.10 $) with ESMTP id f32BKPb12235
  +    by cw.example.com (8.11.0/8.11.0/$Revision: 1.11 $) with ESMTP id f32BKPb12235
       for <thomas.lotterer@example.com>; Mon, 2 Apr 2001 13:20:25 +0200
   Received: from example.org (littlemua.example.org [195.143.103.160])
   	by history (8.8.8/8.8.8) with ESMTP id LAA12678;
  @@ -160,7 +160,7 @@
   echon "checking whether a valid fake posting succeeds ... "
   prolog
   newmsg
  -./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 --timeoutnntpconnect=1 ${GROUP} >${STDOUT} 2>${STDERR} ; RC=$
  +./lmtp2nntp <${STDIN} -b - -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 --timeoutnntpconnect=1 ${GROUP} >${STDOUT} 2>${STDERR} ; RC=$
   RC="";
   if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
   if [ 1 -eq `egrep <${STDOUT} '^250[- ].*pleased to meet you'    | wc -l` ]; then RC="${RC}LHLO "; fi
  @@ -182,7 +182,7 @@
   echon "checking whether -m option blocks invalid sender ... "
   prolog
   newmsg
  -( MFILT=".*@is.invalid" ; ./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 --timeoutnntpconnect=1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
  +( MFILT=".*@is.invalid" ; ./lmtp2nntp <${STDIN} -b - -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 --timeoutnntpconnect=1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
   RC="";
   if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
   if [ 1 -eq `egrep <${STDOUT} '^250[- ].+pleased to meet you'    | wc -l` ]; then RC="${RC}LHLO "; fi
  @@ -204,7 +204,7 @@
   echon "checking whether -s option rejects article with invalid size ... "
   prolog
   newmsg
  -./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} ${LOG} -m "${MFILT}" -n ${NODE} -s 100 --timeoutnntpconnect=1 ${GROUP} >${STDOUT} 2>${STDERR} ; RC=$?
  +./lmtp2nntp <${STDIN} -b - -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} ${LOG} -m "${MFILT}" -n ${NODE} -s 100 --timeoutnntpconnect=1 ${GROUP} >${STDOUT} 2>${STDERR} ; RC=$?
   RC="";
   if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
   if [ 1 -eq `egrep <${STDOUT} '^250[- ].*pleased to meet you'    | wc -l` ]; then RC="${RC}LHLO "; fi
  @@ -226,7 +226,7 @@
   echon "checking whether -c option fails on invalid local host address ... "
   prolog
   newmsg
  -( LOCAL="10.255.255.255" ; ./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 --timeoutnntpconnect=1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
  +( LOCAL="10.255.255.255" ; ./lmtp2nntp <${STDIN} -b - -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 --timeoutnntpconnect=1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
   RC="";
   if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
   if [ 1 -eq `egrep <${L2FILE} 'error.+binding'                   | wc -l` ]; then RC="${RC}bind "; fi
  @@ -243,7 +243,7 @@
   echon "checking whether -g envelope option blocks invalid group ... "
   prolog
   newmsg
  -( GROUP="foo.*" ; ./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g envelope -d ${HOST} ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 --timeoutnntpconnect=1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
  +( GROUP="foo.*" ; ./lmtp2nntp <${STDIN} -b - -c ${LOCAL} -o 250/2.0.0 -g envelope -d ${HOST} ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 --timeoutnntpconnect=1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
   RC="";
   if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
   if [ 1 -eq `egrep <${STDOUT} '^250[- ].*pleased to meet you'    | wc -l` ]; then RC="${RC}LHLO "; fi
  @@ -266,7 +266,7 @@
   echon "checking whether -d option times out for invalid host ... "
   prolog
   newmsg
  -( HOST="10.255.255.255" ; ./lmtp2nntp <${STDIN} -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 --timeoutnntpconnect=1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
  +( HOST="10.255.255.255" ; ./lmtp2nntp <${STDIN} -b - -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 --timeoutnntpconnect=1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
   RC="";
   if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
   if [ 1 -eq `egrep <${L2FILE} 'warning.+connect.+failed'         | wc -l` ]; then RC="${RC}conn "; fi

From ossp-cvs-owner@ossp.org  Wed Feb  6 17:56:34 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 40CC6764FC; Wed,  6 Feb 2002 17:56:34 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc Makefile.in acconfig.h aclocal.m4 configure.in
Message-Id: <20020206165634.40CC6764FC@mail.ossp.org>
Date: Wed,  6 Feb 2002 17:56:34 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   06-Feb-2002 17:56:34
  Branch: HEAD                             Handle: 2002020616563300

  Modified files:
    ossp-pkg/rc             Makefile.in acconfig.h aclocal.m4 configure.in

  Log:
    Small build configuration changes, including some building with OSSP ex.

  Summary:
    Revision    Changes     Path
    1.10        +8  -2      ossp-pkg/rc/Makefile.in
    1.2         +3  -0      ossp-pkg/rc/acconfig.h
    1.6         +1  -1      ossp-pkg/rc/aclocal.m4
    1.11        +6  -2      ossp-pkg/rc/configure.in
  ____________________________________________________________________________

  Index: ossp-pkg/rc/Makefile.in
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 Makefile.in
  --- ossp-pkg/rc/Makefile.in	5 Feb 2002 20:48:26 -0000	1.9
  +++ ossp-pkg/rc/Makefile.in	6 Feb 2002 16:56:33 -0000	1.10
  @@ -119,8 +119,14 @@
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man1
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man5
  -	$(SHTOOL) install -c -m 644 rc.1 $(mandir)/man1/rc.1
  -	$(SHTOOL) install -c -m 644 rc-sample.5 $(mandir)/man5/rc-sample.5
  +	$(SHTOOL) install -c -m 644 rc $(DESTDIR)$(bindir)/rc
  +	$(SHTOOL) install -c -m 644 rc.1 $(DESTDIR)$(mandir)/man1/rc.1
  +	$(SHTOOL) install -c -m 644 rc-sample.5 $(DESTDIR)$(mandir)/man5/rc-sample.5
  +
  +uninstall:
  +	$(RM) $(DESTDIR)$(DESTDIR)$(bindir)/rc
  +	$(RM) $(DESTDIR)$(DESTDIR)$(mandir)/man1/rc.1
  +	$(RM) $(DESTDIR)$(DESTDIR)$(mandir)/man5/rc-sample.5
   
   clean:
   	$(RM) $(TARGET) $(OBJS) $(PROG_NAME).core rc_pcre.tab
  Index: ossp-pkg/rc/acconfig.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 acconfig.h
  --- ossp-pkg/rc/acconfig.h	25 Jan 2002 16:02:42 -0000	1.1
  +++ ossp-pkg/rc/acconfig.h	6 Feb 2002 16:56:33 -0000	1.2
  @@ -1 +1,4 @@
  +/* whether to use OSSP ex */
  +#undef WITH_EX
  +/* whether to use dmalloc */
   #undef DMALLOC
  Index: ossp-pkg/rc/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 aclocal.m4
  --- ossp-pkg/rc/aclocal.m4	4 Feb 2002 22:35:20 -0000	1.5
  +++ ossp-pkg/rc/aclocal.m4	6 Feb 2002 16:56:33 -0000	1.6
  @@ -25,7 +25,7 @@
   dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   dnl ##  SUCH DAMAGE.
   dnl ##
  -dnl ##  aclocal.m4: GNU Autoconf local macros
  +dnl ##  aclocal.m4: GNU Autoconf local macro definitions
   dnl ##
   
   dnl ##
  Index: ossp-pkg/rc/configure.in
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 configure.in
  --- ossp-pkg/rc/configure.in	5 Feb 2002 19:11:45 -0000	1.10
  +++ ossp-pkg/rc/configure.in	6 Feb 2002 16:56:33 -0000	1.11
  @@ -36,8 +36,8 @@
   AC_DIVERT_PUSH(NOTICE)
   V=`./shtool version -lc -dlong rc_version.c`
   ./shtool echo -e "Configuring %BOSSP rc%b, Version %B${V}%b"
  -echo "Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>"
  -echo "Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>"
  +echo "Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>"
  +echo "Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>"
   AC_DIVERT_POP()
   
   dnl Process this file with autoconf
  @@ -51,6 +51,10 @@
   AC_PROG_CC_STDC
   AC_HEADER_STDC
   AC_PROG_INSTALL
  +
  +dnl Check for libtool
  +dnl sinclude(libtool.m4)
  +dnl AC_PROG_LIBTOOL
   
   dnl Check other requirements
   AC_SET_MAKE

From ossp-cvs-owner@ossp.org  Wed Feb  6 19:16:10 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 71C40764FC; Wed,  6 Feb 2002 19:16:09 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc_design.xmi
Message-Id: <20020206181609.71C40764FC@mail.ossp.org>
Date: Wed,  6 Feb 2002 19:16:09 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   06-Feb-2002 19:16:09
  Branch: HEAD                             Handle: 2002020618160800

  Modified files:
    ossp-pkg/rc             rc_design.xmi

  Log:
    Design corrections.

  Summary:
    Revision    Changes     Path
    1.2         +1042 -380  ossp-pkg/rc/rc_design.xmi
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc_design.xmi
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 rc_design.xmi
  --- ossp-pkg/rc/rc_design.xmi	4 Feb 2002 21:52:31 -0000	1.1
  +++ ossp-pkg/rc/rc_design.xmi	6 Feb 2002 18:16:08 -0000	1.2
  @@ -17,6 +17,7 @@
         <Foundation.Core.Namespace.ownedElement>
           <Foundation.Core.Class xmi.id="xmi.2" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fff">
             <Foundation.Core.ModelElement.name>RC</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  @@ -28,6 +29,7 @@
           </Foundation.Core.Class>
           <Foundation.Core.Class xmi.id="xmi.3" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ffd">
             <Foundation.Core.ModelElement.name>Configuration</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  @@ -36,9 +38,120 @@
             <Foundation.Core.ModelElement.namespace>
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Classifier.feature>
  +            <Foundation.Core.Attribute xmi.id="xmi.4" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fd6">
  +              <Foundation.Core.ModelElement.name>s_Instance</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="private"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="classifier"/>
  +              <Foundation.Core.Attribute.initialValue>
  +                <Foundation.Data_Types.Expression xmi.id="xmi.5">
  +                  <Foundation.Data_Types.Expression.language>Java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.Expression>
  +              </Foundation.Core.Attribute.initialValue>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.3"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.StructuralFeature.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.3"/>
  +              </Foundation.Core.StructuralFeature.type>
  +            </Foundation.Core.Attribute>
  +            <Foundation.Core.Operation xmi.id="xmi.6" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fd5">
  +              <Foundation.Core.ModelElement.name>Configuration</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="protected"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="classifier"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.3"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.7"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.8" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fd4">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.6"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.7">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.10">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.3"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.6"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.11" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ffb">
  +              <Foundation.Core.ModelElement.name>getInstance</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="classifier"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.3"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.12"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.13" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ffa">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.11"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.12">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.14">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.3"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.11"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +          </Foundation.Core.Classifier.feature>
           </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.4" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ffc">
  +        <Foundation.Core.Class xmi.id="xmi.15" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ffc">
             <Foundation.Core.ModelElement.name>FileOption</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  @@ -47,12 +160,237 @@
             <Foundation.Core.ModelElement.namespace>
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.GeneralizableElement.generalization>
  -            <Foundation.Core.Generalization xmi.idref="xmi.5"/>
  -          </Foundation.Core.GeneralizableElement.generalization>
  +          <Foundation.Core.Classifier.feature>
  +            <Foundation.Core.Operation xmi.id="xmi.16" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ff9">
  +              <Foundation.Core.ModelElement.name>Start</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.17"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.18" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ff8">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.16"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.17">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.19">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.16"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.20" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ff7">
  +              <Foundation.Core.ModelElement.name>Next</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.21"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.22" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ff6">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.20"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.21">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.23">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.20"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.24" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ff5">
  +              <Foundation.Core.ModelElement.name>IsEnd</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.25"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.26" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ff4">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.24"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.25">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.27">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.24"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.28" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ff3">
  +              <Foundation.Core.ModelElement.name>Current</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.29"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.30" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ff2">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.28"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.29">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.31">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.28"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.32" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ff1">
  +              <Foundation.Core.ModelElement.name>Parse</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.33"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.34" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ff0">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.32"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.33">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.35">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.32"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +          </Foundation.Core.Classifier.feature>
           </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.6" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ffb">
  +        <Foundation.Core.Class xmi.id="xmi.36" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ffb">
             <Foundation.Core.ModelElement.name>EnvironmentOption</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  @@ -61,12 +399,10 @@
             <Foundation.Core.ModelElement.namespace>
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.GeneralizableElement.generalization>
  -            <Foundation.Core.Generalization xmi.idref="xmi.7"/>
  -          </Foundation.Core.GeneralizableElement.generalization>
           </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.8" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ffa">
  +        <Foundation.Core.Class xmi.id="xmi.37" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ffa">
             <Foundation.Core.ModelElement.name>CommandLineOption</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  @@ -75,12 +411,10 @@
             <Foundation.Core.ModelElement.namespace>
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.GeneralizableElement.generalization>
  -            <Foundation.Core.Generalization xmi.idref="xmi.9"/>
  -          </Foundation.Core.GeneralizableElement.generalization>
           </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.10" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ff9">
  +        <Foundation.Core.Class xmi.id="xmi.38" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ff9">
             <Foundation.Core.ModelElement.name>Option</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  @@ -89,13 +423,169 @@
             <Foundation.Core.ModelElement.namespace>
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.GeneralizableElement.specialization>
  -            <Foundation.Core.Generalization xmi.idref="xmi.7"/>
  -            <Foundation.Core.Generalization xmi.idref="xmi.5"/>
  -            <Foundation.Core.Generalization xmi.idref="xmi.9"/>
  -          </Foundation.Core.GeneralizableElement.specialization>
  +          <Foundation.Core.Classifier.feature>
  +            <Foundation.Core.Attribute xmi.id="xmi.39" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe5">
  +              <Foundation.Core.ModelElement.name>nCount</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="private"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.StructuralFeature.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.40"/>
  +              </Foundation.Core.StructuralFeature.type>
  +            </Foundation.Core.Attribute>
  +            <Foundation.Core.Attribute xmi.id="xmi.41" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe4">
  +              <Foundation.Core.ModelElement.name>*pvElement</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="private"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.StructuralFeature.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  +              </Foundation.Core.StructuralFeature.type>
  +            </Foundation.Core.Attribute>
  +            <Foundation.Core.Operation xmi.id="xmi.42" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe3">
  +              <Foundation.Core.ModelElement.name>addElement</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.43"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.44" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe2">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.42"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.43">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.45">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.42"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.46" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe1">
  +              <Foundation.Core.ModelElement.name>delElement</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.47"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.48" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe0">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.46"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.47">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.49">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.46"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.50" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fdf">
  +              <Foundation.Core.ModelElement.name>getCount</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.51"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.52" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fde">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.50"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.51">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.53">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.50"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +          </Foundation.Core.Classifier.feature>
           </Foundation.Core.Class>
  -        <Foundation.Core.Association xmi.id="xmi.11" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ff5">
  +        <Foundation.Core.Association xmi.id="xmi.54" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ff5">
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  @@ -104,14 +594,14 @@
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
             <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.12">
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.55" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ffa">
                 <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                 <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                 <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
                 <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.id="xmi.13">
  +                <Foundation.Data_Types.Multiplicity xmi.id="xmi.56">
                     <Foundation.Data_Types.Multiplicity.range>
  -                    <Foundation.Data_Types.MultiplicityRange xmi.id="xmi.14">
  +                    <Foundation.Data_Types.MultiplicityRange xmi.id="xmi.57">
                         <Foundation.Data_Types.MultiplicityRange.lower>0</Foundation.Data_Types.MultiplicityRange.lower>
                         <Foundation.Data_Types.MultiplicityRange.upper>1</Foundation.Data_Types.MultiplicityRange.upper>
                       </Foundation.Data_Types.MultiplicityRange>
  @@ -119,18 +609,18 @@
                   </Foundation.Data_Types.Multiplicity>
                 </Foundation.Core.AssociationEnd.multiplicity>
                 <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.11"/>
  +                <Foundation.Core.Association xmi.idref="xmi.54"/>
                 </Foundation.Core.AssociationEnd.association>
                 <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.6"/>
  +                <Foundation.Core.Classifier xmi.idref="xmi.36"/>
                 </Foundation.Core.AssociationEnd.type>
               </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.15">
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.58" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff9">
                 <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                 <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                 <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
                 <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.11"/>
  +                <Foundation.Core.Association xmi.idref="xmi.54"/>
                 </Foundation.Core.AssociationEnd.association>
                 <Foundation.Core.AssociationEnd.type>
                   <Foundation.Core.Classifier xmi.idref="xmi.3"/>
  @@ -138,7 +628,7 @@
               </Foundation.Core.AssociationEnd>
             </Foundation.Core.Association.connection>
           </Foundation.Core.Association>
  -        <Foundation.Core.Association xmi.id="xmi.16" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ff4">
  +        <Foundation.Core.Association xmi.id="xmi.59" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ff4">
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  @@ -147,28 +637,29 @@
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
             <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.17">
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.60" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff8">
  +              <Foundation.Core.ModelElement.name></Foundation.Core.ModelElement.name>
                 <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                 <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                 <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
                 <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.13"/>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.56"/>
                 </Foundation.Core.AssociationEnd.multiplicity>
                 <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.16"/>
  +                <Foundation.Core.Association xmi.idref="xmi.59"/>
                 </Foundation.Core.AssociationEnd.association>
                 <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.4"/>
  +                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
                 </Foundation.Core.AssociationEnd.type>
               </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.18">
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.61" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff7">
                 <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                 <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                 <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
                 <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.id="xmi.19">
  +                <Foundation.Data_Types.Multiplicity xmi.id="xmi.62">
                     <Foundation.Data_Types.Multiplicity.range>
  -                    <Foundation.Data_Types.MultiplicityRange xmi.id="xmi.20">
  +                    <Foundation.Data_Types.MultiplicityRange xmi.id="xmi.63">
                         <Foundation.Data_Types.MultiplicityRange.lower>1</Foundation.Data_Types.MultiplicityRange.lower>
                         <Foundation.Data_Types.MultiplicityRange.upper>1</Foundation.Data_Types.MultiplicityRange.upper>
                       </Foundation.Data_Types.MultiplicityRange>
  @@ -176,7 +667,7 @@
                   </Foundation.Data_Types.Multiplicity>
                 </Foundation.Core.AssociationEnd.multiplicity>
                 <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.16"/>
  +                <Foundation.Core.Association xmi.idref="xmi.59"/>
                 </Foundation.Core.AssociationEnd.association>
                 <Foundation.Core.AssociationEnd.type>
                   <Foundation.Core.Classifier xmi.idref="xmi.3"/>
  @@ -184,7 +675,7 @@
               </Foundation.Core.AssociationEnd>
             </Foundation.Core.Association.connection>
           </Foundation.Core.Association>
  -        <Foundation.Core.Association xmi.id="xmi.21" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ff3">
  +        <Foundation.Core.Association xmi.id="xmi.64" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ff3">
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  @@ -193,26 +684,26 @@
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
             <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.22">
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.65" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff6">
                 <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                 <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                 <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
                 <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.13"/>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.56"/>
                 </Foundation.Core.AssociationEnd.multiplicity>
                 <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.21"/>
  +                <Foundation.Core.Association xmi.idref="xmi.64"/>
                 </Foundation.Core.AssociationEnd.association>
                 <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.8"/>
  +                <Foundation.Core.Classifier xmi.idref="xmi.37"/>
                 </Foundation.Core.AssociationEnd.type>
               </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.23">
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.66" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff5">
                 <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                 <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                 <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
                 <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.21"/>
  +                <Foundation.Core.Association xmi.idref="xmi.64"/>
                 </Foundation.Core.AssociationEnd.association>
                 <Foundation.Core.AssociationEnd.type>
                   <Foundation.Core.Classifier xmi.idref="xmi.3"/>
  @@ -220,43 +711,7 @@
               </Foundation.Core.AssociationEnd>
             </Foundation.Core.Association.connection>
           </Foundation.Core.Association>
  -        <Foundation.Core.Generalization xmi.id="xmi.7" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ff1">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Generalization.child>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.6"/>
  -          </Foundation.Core.Generalization.child>
  -          <Foundation.Core.Generalization.parent>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.10"/>
  -          </Foundation.Core.Generalization.parent>
  -        </Foundation.Core.Generalization>
  -        <Foundation.Core.Generalization xmi.id="xmi.5" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ff0">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Generalization.child>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.4"/>
  -          </Foundation.Core.Generalization.child>
  -          <Foundation.Core.Generalization.parent>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.10"/>
  -          </Foundation.Core.Generalization.parent>
  -        </Foundation.Core.Generalization>
  -        <Foundation.Core.Generalization xmi.id="xmi.9" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fef">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Generalization.child>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.8"/>
  -          </Foundation.Core.Generalization.child>
  -          <Foundation.Core.Generalization.parent>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.10"/>
  -          </Foundation.Core.Generalization.parent>
  -        </Foundation.Core.Generalization>
  -        <Foundation.Core.Association xmi.id="xmi.24" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fed">
  +        <Foundation.Core.Association xmi.id="xmi.67" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fed">
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  @@ -265,26 +720,26 @@
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
             <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.25">
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.68" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff4">
                 <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                 <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                 <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
                 <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.24"/>
  +                <Foundation.Core.Association xmi.idref="xmi.67"/>
                 </Foundation.Core.AssociationEnd.association>
                 <Foundation.Core.AssociationEnd.type>
                   <Foundation.Core.Classifier xmi.idref="xmi.2"/>
                 </Foundation.Core.AssociationEnd.type>
               </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.26">
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.69" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff3">
                 <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                 <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                 <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
                 <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.19"/>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
                 </Foundation.Core.AssociationEnd.multiplicity>
                 <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.24"/>
  +                <Foundation.Core.Association xmi.idref="xmi.67"/>
                 </Foundation.Core.AssociationEnd.association>
                 <Foundation.Core.AssociationEnd.type>
                   <Foundation.Core.Classifier xmi.idref="xmi.3"/>
  @@ -292,8 +747,9 @@
               </Foundation.Core.AssociationEnd>
             </Foundation.Core.Association.connection>
           </Foundation.Core.Association>
  -        <Foundation.Core.Class xmi.id="xmi.27" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fec">
  +        <Foundation.Core.Class xmi.id="xmi.70" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fec">
             <Foundation.Core.ModelElement.name>Logger</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  @@ -303,7 +759,7 @@
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
           </Foundation.Core.Class>
  -        <Foundation.Core.Association xmi.id="xmi.28" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fea">
  +        <Foundation.Core.Association xmi.id="xmi.71" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fea">
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  @@ -312,23 +768,23 @@
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
             <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.29">
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.72" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff2">
                 <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                 <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                 <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
                 <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.28"/>
  +                <Foundation.Core.Association xmi.idref="xmi.71"/>
                 </Foundation.Core.AssociationEnd.association>
                 <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.27"/>
  +                <Foundation.Core.Classifier xmi.idref="xmi.70"/>
                 </Foundation.Core.AssociationEnd.type>
               </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.30">
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.73" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff1">
                 <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                 <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                 <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
                 <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.28"/>
  +                <Foundation.Core.Association xmi.idref="xmi.71"/>
                 </Foundation.Core.AssociationEnd.association>
                 <Foundation.Core.AssociationEnd.type>
                   <Foundation.Core.Classifier xmi.idref="xmi.2"/>
  @@ -336,8 +792,9 @@
               </Foundation.Core.AssociationEnd>
             </Foundation.Core.Association.connection>
           </Foundation.Core.Association>
  -        <Foundation.Core.Class xmi.id="xmi.31" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe9">
  +        <Foundation.Core.Class xmi.id="xmi.74" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe9">
             <Foundation.Core.ModelElement.name>Processor</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  @@ -347,7 +804,7 @@
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
           </Foundation.Core.Class>
  -        <Foundation.Core.Association xmi.id="xmi.32" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe8">
  +        <Foundation.Core.Association xmi.id="xmi.75" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe8">
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  @@ -356,29 +813,29 @@
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
             <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.33">
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.76" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff0">
                 <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                 <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                 <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
                 <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.13"/>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.56"/>
                 </Foundation.Core.AssociationEnd.multiplicity>
                 <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.32"/>
  +                <Foundation.Core.Association xmi.idref="xmi.75"/>
                 </Foundation.Core.AssociationEnd.association>
                 <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.31"/>
  +                <Foundation.Core.Classifier xmi.idref="xmi.74"/>
                 </Foundation.Core.AssociationEnd.type>
               </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.34">
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.77" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fef">
                 <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                 <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                 <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
                 <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.19"/>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
                 </Foundation.Core.AssociationEnd.multiplicity>
                 <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.32"/>
  +                <Foundation.Core.Association xmi.idref="xmi.75"/>
                 </Foundation.Core.AssociationEnd.association>
                 <Foundation.Core.AssociationEnd.type>
                   <Foundation.Core.Classifier xmi.idref="xmi.2"/>
  @@ -386,8 +843,9 @@
               </Foundation.Core.AssociationEnd>
             </Foundation.Core.Association.connection>
           </Foundation.Core.Association>
  -        <Foundation.Core.Class xmi.id="xmi.35" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe7">
  +        <Foundation.Core.Class xmi.id="xmi.78" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe7">
             <Foundation.Core.ModelElement.name>Script</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  @@ -397,27 +855,28 @@
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
             <Foundation.Core.Classifier.feature>
  -            <Foundation.Core.Attribute xmi.id="xmi.36">
  +            <Foundation.Core.Attribute xmi.id="xmi.79" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ffd">
                 <Foundation.Core.ModelElement.name>eLang</Foundation.Core.ModelElement.name>
                 <Foundation.Core.ModelElement.visibility xmi.value="private"/>
                 <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                 <Foundation.Core.Attribute.initialValue>
  -                <Foundation.Data_Types.Expression xmi.id="xmi.37">
  +                <Foundation.Data_Types.Expression xmi.id="xmi.80">
                     <Foundation.Data_Types.Expression.language>Java</Foundation.Data_Types.Expression.language>
                     <Foundation.Data_Types.Expression.body>0</Foundation.Data_Types.Expression.body>
                   </Foundation.Data_Types.Expression>
                 </Foundation.Core.Attribute.initialValue>
                 <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.35"/>
  +                <Foundation.Core.Classifier xmi.idref="xmi.78"/>
                 </Foundation.Core.Feature.owner>
                 <Foundation.Core.StructuralFeature.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  +                <Foundation.Core.Classifier xmi.idref="xmi.81"/>
                 </Foundation.Core.StructuralFeature.type>
               </Foundation.Core.Attribute>
             </Foundation.Core.Classifier.feature>
           </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.39" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe6">
  +        <Foundation.Core.Class xmi.id="xmi.82" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe6">
             <Foundation.Core.ModelElement.name>RCFile</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  @@ -427,11 +886,12 @@
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
             <Foundation.Core.GeneralizableElement.generalization>
  -            <Foundation.Core.Generalization xmi.idref="xmi.40"/>
  +            <Foundation.Core.Generalization xmi.idref="xmi.83"/>
             </Foundation.Core.GeneralizableElement.generalization>
           </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.41" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe5">
  +        <Foundation.Core.Class xmi.id="xmi.84" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe5">
             <Foundation.Core.ModelElement.name>FuncFile</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  @@ -441,62 +901,108 @@
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
             <Foundation.Core.GeneralizableElement.generalization>
  -            <Foundation.Core.Generalization xmi.idref="xmi.42"/>
  +            <Foundation.Core.Generalization xmi.idref="xmi.85"/>
             </Foundation.Core.GeneralizableElement.generalization>
           </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.43" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe4">
  +        <Foundation.Core.Class xmi.id="xmi.86" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe4">
             <Foundation.Core.ModelElement.name>File</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="true"/>
             <Foundation.Core.Class.isActive xmi.value="false"/>
             <Foundation.Core.ModelElement.namespace>
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
             <Foundation.Core.GeneralizableElement.specialization>
  -            <Foundation.Core.Generalization xmi.idref="xmi.40"/>
  -            <Foundation.Core.Generalization xmi.idref="xmi.42"/>
  +            <Foundation.Core.Generalization xmi.idref="xmi.83"/>
  +            <Foundation.Core.Generalization xmi.idref="xmi.85"/>
             </Foundation.Core.GeneralizableElement.specialization>
             <Foundation.Core.Classifier.feature>
  -            <Foundation.Core.Attribute xmi.id="xmi.44">
  +            <Foundation.Core.Attribute xmi.id="xmi.87" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ffc">
                 <Foundation.Core.ModelElement.name>*szName</Foundation.Core.ModelElement.name>
                 <Foundation.Core.ModelElement.visibility xmi.value="private"/>
                 <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                 <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.43"/>
  +                <Foundation.Core.Classifier xmi.idref="xmi.86"/>
                 </Foundation.Core.Feature.owner>
                 <Foundation.Core.StructuralFeature.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.45"/>
  +                <Foundation.Core.Classifier xmi.idref="xmi.88"/>
                 </Foundation.Core.StructuralFeature.type>
               </Foundation.Core.Attribute>
  +            <Foundation.Core.Operation xmi.id="xmi.89" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ffd">
  +              <Foundation.Core.ModelElement.name>getName</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.86"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.90"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.91" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ffc">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.89"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.90">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.92">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.86"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.89"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
             </Foundation.Core.Classifier.feature>
           </Foundation.Core.Class>
  -        <Foundation.Core.Generalization xmi.id="xmi.40" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe2">
  +        <Foundation.Core.Generalization xmi.id="xmi.83" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe2">
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.ModelElement.namespace>
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
             <Foundation.Core.Generalization.child>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.39"/>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.82"/>
             </Foundation.Core.Generalization.child>
             <Foundation.Core.Generalization.parent>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.43"/>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.86"/>
             </Foundation.Core.Generalization.parent>
           </Foundation.Core.Generalization>
  -        <Foundation.Core.Generalization xmi.id="xmi.42" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe1">
  +        <Foundation.Core.Generalization xmi.id="xmi.85" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe1">
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.ModelElement.namespace>
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
             <Foundation.Core.Generalization.child>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.41"/>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.84"/>
             </Foundation.Core.Generalization.child>
             <Foundation.Core.Generalization.parent>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.43"/>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.86"/>
             </Foundation.Core.Generalization.parent>
           </Foundation.Core.Generalization>
  -        <Foundation.Core.Association xmi.id="xmi.46" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fdf">
  +        <Foundation.Core.Association xmi.id="xmi.93" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fdf">
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  @@ -505,14 +1011,14 @@
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
             <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.47">
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.94" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fee">
                 <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                 <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                 <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
                 <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.id="xmi.48">
  +                <Foundation.Data_Types.Multiplicity xmi.id="xmi.95">
                     <Foundation.Data_Types.Multiplicity.range>
  -                    <Foundation.Data_Types.MultiplicityRange xmi.id="xmi.49">
  +                    <Foundation.Data_Types.MultiplicityRange xmi.id="xmi.96">
                         <Foundation.Data_Types.MultiplicityRange.lower>1</Foundation.Data_Types.MultiplicityRange.lower>
                         <Foundation.Data_Types.MultiplicityRange.upper>-1</Foundation.Data_Types.MultiplicityRange.upper>
                       </Foundation.Data_Types.MultiplicityRange>
  @@ -520,26 +1026,26 @@
                   </Foundation.Data_Types.Multiplicity>
                 </Foundation.Core.AssociationEnd.multiplicity>
                 <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.46"/>
  +                <Foundation.Core.Association xmi.idref="xmi.93"/>
                 </Foundation.Core.AssociationEnd.association>
                 <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.39"/>
  +                <Foundation.Core.Classifier xmi.idref="xmi.82"/>
                 </Foundation.Core.AssociationEnd.type>
               </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.50">
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.97" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fed">
                 <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                 <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                 <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
                 <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.46"/>
  +                <Foundation.Core.Association xmi.idref="xmi.93"/>
                 </Foundation.Core.AssociationEnd.association>
                 <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.31"/>
  +                <Foundation.Core.Classifier xmi.idref="xmi.74"/>
                 </Foundation.Core.AssociationEnd.type>
               </Foundation.Core.AssociationEnd>
             </Foundation.Core.Association.connection>
           </Foundation.Core.Association>
  -        <Foundation.Core.Association xmi.id="xmi.51" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fde">
  +        <Foundation.Core.Association xmi.id="xmi.98" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fde">
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  @@ -548,34 +1054,34 @@
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
             <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.52">
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.99" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fec">
                 <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                 <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                 <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
                 <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.48"/>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.95"/>
                 </Foundation.Core.AssociationEnd.multiplicity>
                 <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.51"/>
  +                <Foundation.Core.Association xmi.idref="xmi.98"/>
                 </Foundation.Core.AssociationEnd.association>
                 <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.35"/>
  +                <Foundation.Core.Classifier xmi.idref="xmi.78"/>
                 </Foundation.Core.AssociationEnd.type>
               </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.53">
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.100" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7feb">
                 <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                 <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                 <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
                 <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.51"/>
  +                <Foundation.Core.Association xmi.idref="xmi.98"/>
                 </Foundation.Core.AssociationEnd.association>
                 <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.31"/>
  +                <Foundation.Core.Classifier xmi.idref="xmi.74"/>
                 </Foundation.Core.AssociationEnd.type>
               </Foundation.Core.AssociationEnd>
             </Foundation.Core.Association.connection>
           </Foundation.Core.Association>
  -        <Foundation.Core.Association xmi.id="xmi.54" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fdd">
  +        <Foundation.Core.Association xmi.id="xmi.101" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fdd">
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  @@ -584,35 +1090,35 @@
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
             <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.55">
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.102" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fea">
                 <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                 <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                 <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
                 <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.13"/>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.56"/>
                 </Foundation.Core.AssociationEnd.multiplicity>
                 <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.54"/>
  +                <Foundation.Core.Association xmi.idref="xmi.101"/>
                 </Foundation.Core.AssociationEnd.association>
                 <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.41"/>
  +                <Foundation.Core.Classifier xmi.idref="xmi.84"/>
                 </Foundation.Core.AssociationEnd.type>
               </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.56">
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.103" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe9">
                 <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                 <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                 <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
                 <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.54"/>
  +                <Foundation.Core.Association xmi.idref="xmi.101"/>
                 </Foundation.Core.AssociationEnd.association>
                 <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.31"/>
  +                <Foundation.Core.Classifier xmi.idref="xmi.74"/>
                 </Foundation.Core.AssociationEnd.type>
               </Foundation.Core.AssociationEnd>
             </Foundation.Core.Association.connection>
           </Foundation.Core.Association>
  -        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.57">
  -          <Foundation.Core.ModelElement.name></Foundation.Core.ModelElement.name>
  +        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.104">
  +          <Foundation.Core.ModelElement.name>Adapter</Foundation.Core.ModelElement.name>
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  @@ -621,21 +1127,12 @@
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
             <Foundation.Extension_Mechanisms.Stereotype.extendedElement>
  -            <Foundation.Core.ModelElement xmi.idref="xmi.43"/>
  -            <Foundation.Core.ModelElement xmi.idref="xmi.40"/>
  -            <Foundation.Core.ModelElement xmi.idref="xmi.42"/>
  -            <Foundation.Core.ModelElement xmi.idref="xmi.5"/>
  -            <Foundation.Core.ModelElement xmi.idref="xmi.7"/>
  -            <Foundation.Core.ModelElement xmi.idref="xmi.9"/>
  -            <Foundation.Core.ModelElement xmi.idref="xmi.58"/>
  -            <Foundation.Core.ModelElement xmi.idref="xmi.59"/>
  -            <Foundation.Core.ModelElement xmi.idref="xmi.60"/>
  -            <Foundation.Core.ModelElement xmi.idref="xmi.61"/>
  -            <Foundation.Core.ModelElement xmi.idref="xmi.62"/>
  +            <Foundation.Core.ModelElement xmi.idref="xmi.70"/>
             </Foundation.Extension_Mechanisms.Stereotype.extendedElement>
           </Foundation.Extension_Mechanisms.Stereotype>
  -        <Foundation.Core.Class xmi.id="xmi.63" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fdc">
  +        <Foundation.Core.Class xmi.id="xmi.105" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fdc">
             <Foundation.Core.ModelElement.name>ConfigSection</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  @@ -645,11 +1142,12 @@
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
             <Foundation.Core.GeneralizableElement.generalization>
  -            <Foundation.Core.Generalization xmi.idref="xmi.58"/>
  +            <Foundation.Core.Generalization xmi.idref="xmi.106"/>
             </Foundation.Core.GeneralizableElement.generalization>
           </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.64" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fdb">
  +        <Foundation.Core.Class xmi.id="xmi.107" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fdb">
             <Foundation.Core.ModelElement.name>DefaultSection</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  @@ -659,11 +1157,12 @@
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
             <Foundation.Core.GeneralizableElement.generalization>
  -            <Foundation.Core.Generalization xmi.idref="xmi.59"/>
  +            <Foundation.Core.Generalization xmi.idref="xmi.108"/>
             </Foundation.Core.GeneralizableElement.generalization>
           </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.65" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fda">
  +        <Foundation.Core.Class xmi.id="xmi.109" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fda">
             <Foundation.Core.ModelElement.name>ErrorSection</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  @@ -673,11 +1172,12 @@
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
             <Foundation.Core.GeneralizableElement.generalization>
  -            <Foundation.Core.Generalization xmi.idref="xmi.61"/>
  +            <Foundation.Core.Generalization xmi.idref="xmi.110"/>
             </Foundation.Core.GeneralizableElement.generalization>
           </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.66" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fd9">
  +        <Foundation.Core.Class xmi.id="xmi.111" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fd9">
             <Foundation.Core.ModelElement.name>CommonSection</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  @@ -687,11 +1187,12 @@
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
             <Foundation.Core.GeneralizableElement.generalization>
  -            <Foundation.Core.Generalization xmi.idref="xmi.62"/>
  +            <Foundation.Core.Generalization xmi.idref="xmi.112"/>
             </Foundation.Core.GeneralizableElement.generalization>
           </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.67" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fd8">
  +        <Foundation.Core.Class xmi.id="xmi.113" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fd8">
             <Foundation.Core.ModelElement.name>UserSection</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  @@ -701,107 +1202,108 @@
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
             <Foundation.Core.GeneralizableElement.generalization>
  -            <Foundation.Core.Generalization xmi.idref="xmi.60"/>
  +            <Foundation.Core.Generalization xmi.idref="xmi.114"/>
             </Foundation.Core.GeneralizableElement.generalization>
             <Foundation.Core.Classifier.feature>
  -            <Foundation.Core.Attribute xmi.id="xmi.68">
  +            <Foundation.Core.Attribute xmi.id="xmi.115" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ffb">
                 <Foundation.Core.ModelElement.name>eLang</Foundation.Core.ModelElement.name>
                 <Foundation.Core.ModelElement.visibility xmi.value="private"/>
                 <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                 <Foundation.Core.Attribute.initialValue>
  -                <Foundation.Data_Types.Expression xmi.id="xmi.69">
  +                <Foundation.Data_Types.Expression xmi.id="xmi.116">
                     <Foundation.Data_Types.Expression.language>Java</Foundation.Data_Types.Expression.language>
                     <Foundation.Data_Types.Expression.body>0</Foundation.Data_Types.Expression.body>
                   </Foundation.Data_Types.Expression>
                 </Foundation.Core.Attribute.initialValue>
                 <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.67"/>
  +                <Foundation.Core.Classifier xmi.idref="xmi.113"/>
                 </Foundation.Core.Feature.owner>
                 <Foundation.Core.StructuralFeature.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  +                <Foundation.Core.Classifier xmi.idref="xmi.81"/>
                 </Foundation.Core.StructuralFeature.type>
               </Foundation.Core.Attribute>
             </Foundation.Core.Classifier.feature>
           </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.70" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fd7">
  +        <Foundation.Core.Class xmi.id="xmi.117" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fd7">
             <Foundation.Core.ModelElement.name>Section</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="true"/>
             <Foundation.Core.Class.isActive xmi.value="false"/>
             <Foundation.Core.ModelElement.namespace>
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
             <Foundation.Core.GeneralizableElement.specialization>
  -            <Foundation.Core.Generalization xmi.idref="xmi.61"/>
  -            <Foundation.Core.Generalization xmi.idref="xmi.59"/>
  -            <Foundation.Core.Generalization xmi.idref="xmi.58"/>
  -            <Foundation.Core.Generalization xmi.idref="xmi.62"/>
  -            <Foundation.Core.Generalization xmi.idref="xmi.60"/>
  +            <Foundation.Core.Generalization xmi.idref="xmi.110"/>
  +            <Foundation.Core.Generalization xmi.idref="xmi.108"/>
  +            <Foundation.Core.Generalization xmi.idref="xmi.106"/>
  +            <Foundation.Core.Generalization xmi.idref="xmi.112"/>
  +            <Foundation.Core.Generalization xmi.idref="xmi.114"/>
             </Foundation.Core.GeneralizableElement.specialization>
           </Foundation.Core.Class>
  -        <Foundation.Core.Generalization xmi.id="xmi.61" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fd0">
  +        <Foundation.Core.Generalization xmi.id="xmi.110" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fd0">
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.ModelElement.namespace>
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
             <Foundation.Core.Generalization.child>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.65"/>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.109"/>
             </Foundation.Core.Generalization.child>
             <Foundation.Core.Generalization.parent>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.70"/>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.117"/>
             </Foundation.Core.Generalization.parent>
           </Foundation.Core.Generalization>
  -        <Foundation.Core.Generalization xmi.id="xmi.59" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fcf">
  +        <Foundation.Core.Generalization xmi.id="xmi.108" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fcf">
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.ModelElement.namespace>
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
             <Foundation.Core.Generalization.child>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.64"/>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.107"/>
             </Foundation.Core.Generalization.child>
             <Foundation.Core.Generalization.parent>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.70"/>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.117"/>
             </Foundation.Core.Generalization.parent>
           </Foundation.Core.Generalization>
  -        <Foundation.Core.Generalization xmi.id="xmi.58" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fce">
  +        <Foundation.Core.Generalization xmi.id="xmi.106" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fce">
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.ModelElement.namespace>
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
             <Foundation.Core.Generalization.child>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.63"/>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.105"/>
             </Foundation.Core.Generalization.child>
             <Foundation.Core.Generalization.parent>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.70"/>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.117"/>
             </Foundation.Core.Generalization.parent>
           </Foundation.Core.Generalization>
  -        <Foundation.Core.Generalization xmi.id="xmi.62" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fcd">
  +        <Foundation.Core.Generalization xmi.id="xmi.112" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fcd">
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.ModelElement.namespace>
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
             <Foundation.Core.Generalization.child>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.66"/>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.111"/>
             </Foundation.Core.Generalization.child>
             <Foundation.Core.Generalization.parent>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.70"/>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.117"/>
             </Foundation.Core.Generalization.parent>
           </Foundation.Core.Generalization>
  -        <Foundation.Core.Generalization xmi.id="xmi.60" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fcc">
  +        <Foundation.Core.Generalization xmi.id="xmi.114" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fcc">
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.ModelElement.namespace>
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
             <Foundation.Core.Generalization.child>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.67"/>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.113"/>
             </Foundation.Core.Generalization.child>
             <Foundation.Core.Generalization.parent>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.70"/>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.117"/>
             </Foundation.Core.Generalization.parent>
           </Foundation.Core.Generalization>
  -        <Foundation.Core.Association xmi.id="xmi.71" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fc3">
  +        <Foundation.Core.Association xmi.id="xmi.118" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fc3">
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  @@ -810,34 +1312,34 @@
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
             <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.72">
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.119" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe8">
                 <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                 <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                 <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
                 <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.13"/>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.56"/>
                 </Foundation.Core.AssociationEnd.multiplicity>
                 <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.71"/>
  +                <Foundation.Core.Association xmi.idref="xmi.118"/>
                 </Foundation.Core.AssociationEnd.association>
                 <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.66"/>
  +                <Foundation.Core.Classifier xmi.idref="xmi.111"/>
                 </Foundation.Core.AssociationEnd.type>
               </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.73">
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.120" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe7">
                 <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                 <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="composite"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
                 <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.71"/>
  +                <Foundation.Core.Association xmi.idref="xmi.118"/>
                 </Foundation.Core.AssociationEnd.association>
                 <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.43"/>
  +                <Foundation.Core.Classifier xmi.idref="xmi.86"/>
                 </Foundation.Core.AssociationEnd.type>
               </Foundation.Core.AssociationEnd>
             </Foundation.Core.Association.connection>
           </Foundation.Core.Association>
  -        <Foundation.Core.Association xmi.id="xmi.74" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fc1">
  +        <Foundation.Core.Association xmi.id="xmi.121" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fc1">
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  @@ -846,14 +1348,14 @@
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
             <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.75">
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.122" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe6">
                 <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                 <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                 <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
                 <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.id="xmi.76">
  +                <Foundation.Data_Types.Multiplicity xmi.id="xmi.123">
                     <Foundation.Data_Types.Multiplicity.range>
  -                    <Foundation.Data_Types.MultiplicityRange xmi.id="xmi.77">
  +                    <Foundation.Data_Types.MultiplicityRange xmi.id="xmi.124">
                         <Foundation.Data_Types.MultiplicityRange.lower>0</Foundation.Data_Types.MultiplicityRange.lower>
                         <Foundation.Data_Types.MultiplicityRange.upper>-1</Foundation.Data_Types.MultiplicityRange.upper>
                       </Foundation.Data_Types.MultiplicityRange>
  @@ -861,27 +1363,28 @@
                   </Foundation.Data_Types.Multiplicity>
                 </Foundation.Core.AssociationEnd.multiplicity>
                 <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.74"/>
  +                <Foundation.Core.Association xmi.idref="xmi.121"/>
                 </Foundation.Core.AssociationEnd.association>
                 <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.67"/>
  +                <Foundation.Core.Classifier xmi.idref="xmi.113"/>
                 </Foundation.Core.AssociationEnd.type>
               </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.78">
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.125" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe5">
                 <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                 <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="composite"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
                 <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.74"/>
  +                <Foundation.Core.Association xmi.idref="xmi.121"/>
                 </Foundation.Core.AssociationEnd.association>
                 <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.43"/>
  +                <Foundation.Core.Classifier xmi.idref="xmi.86"/>
                 </Foundation.Core.AssociationEnd.type>
               </Foundation.Core.AssociationEnd>
             </Foundation.Core.Association.connection>
           </Foundation.Core.Association>
  -        <Foundation.Core.Class xmi.id="xmi.79" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fbd">
  +        <Foundation.Core.Class xmi.id="xmi.126" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fbd">
             <Foundation.Core.ModelElement.name>Translator</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  @@ -891,8 +1394,9 @@
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
           </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.80" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fbc">
  +        <Foundation.Core.Class xmi.id="xmi.127" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fbc">
             <Foundation.Core.ModelElement.name>SyntaxTree</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  @@ -902,8 +1406,9 @@
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
           </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.81" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fbb">
  +        <Foundation.Core.Class xmi.id="xmi.128" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fbb">
             <Foundation.Core.ModelElement.name>SymbolTable</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  @@ -913,7 +1418,7 @@
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
           </Foundation.Core.Class>
  -        <Foundation.Core.Association xmi.id="xmi.82" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fb7">
  +        <Foundation.Core.Association xmi.id="xmi.129" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fb7">
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  @@ -922,31 +1427,31 @@
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
             <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.83">
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.130" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe4">
                 <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                 <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                 <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
                 <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.82"/>
  +                <Foundation.Core.Association xmi.idref="xmi.129"/>
                 </Foundation.Core.AssociationEnd.association>
                 <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.80"/>
  +                <Foundation.Core.Classifier xmi.idref="xmi.127"/>
                 </Foundation.Core.AssociationEnd.type>
               </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.84">
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.131" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe3">
                 <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                 <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="composite"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
                 <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.82"/>
  +                <Foundation.Core.Association xmi.idref="xmi.129"/>
                 </Foundation.Core.AssociationEnd.association>
                 <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.79"/>
  +                <Foundation.Core.Classifier xmi.idref="xmi.126"/>
                 </Foundation.Core.AssociationEnd.type>
               </Foundation.Core.AssociationEnd>
             </Foundation.Core.Association.connection>
           </Foundation.Core.Association>
  -        <Foundation.Core.Association xmi.id="xmi.85" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fb6">
  +        <Foundation.Core.Association xmi.id="xmi.132" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fb6">
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  @@ -955,37 +1460,37 @@
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
             <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.86">
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.133" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe2">
                 <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                 <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                 <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
                 <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.13"/>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.56"/>
                 </Foundation.Core.AssociationEnd.multiplicity>
                 <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.85"/>
  +                <Foundation.Core.Association xmi.idref="xmi.132"/>
                 </Foundation.Core.AssociationEnd.association>
                 <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.79"/>
  +                <Foundation.Core.Classifier xmi.idref="xmi.126"/>
                 </Foundation.Core.AssociationEnd.type>
               </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.87">
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.134" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe1">
                 <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                 <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                 <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
                 <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.19"/>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
                 </Foundation.Core.AssociationEnd.multiplicity>
                 <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.85"/>
  +                <Foundation.Core.Association xmi.idref="xmi.132"/>
                 </Foundation.Core.AssociationEnd.association>
                 <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.31"/>
  +                <Foundation.Core.Classifier xmi.idref="xmi.74"/>
                 </Foundation.Core.AssociationEnd.type>
               </Foundation.Core.AssociationEnd>
             </Foundation.Core.Association.connection>
           </Foundation.Core.Association>
  -        <Foundation.Core.Association xmi.id="xmi.88" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fb5">
  +        <Foundation.Core.Association xmi.id="xmi.135" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fb5">
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  @@ -994,133 +1499,34 @@
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
             <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.89">
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.136" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe0">
                 <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                 <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                 <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
                 <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.88"/>
  +                <Foundation.Core.Association xmi.idref="xmi.135"/>
                 </Foundation.Core.AssociationEnd.association>
                 <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.81"/>
  +                <Foundation.Core.Classifier xmi.idref="xmi.128"/>
                 </Foundation.Core.AssociationEnd.type>
               </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.90">
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.137" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fdf">
                 <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                 <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="composite"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
                 <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.19"/>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
                 </Foundation.Core.AssociationEnd.multiplicity>
                 <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.88"/>
  +                <Foundation.Core.Association xmi.idref="xmi.135"/>
                 </Foundation.Core.AssociationEnd.association>
                 <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.79"/>
  +                <Foundation.Core.Classifier xmi.idref="xmi.126"/>
                 </Foundation.Core.AssociationEnd.type>
               </Foundation.Core.AssociationEnd>
             </Foundation.Core.Association.connection>
           </Foundation.Core.Association>
  -        <Foundation.Core.Association xmi.id="xmi.91" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fb2">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.92">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.91"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.65"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.93">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="composite"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.91"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.39"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Core.Association xmi.id="xmi.94" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fb1">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.95">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.94"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.64"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.96">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="composite"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.94"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.39"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Core.Association xmi.id="xmi.97" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fb0">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.98">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.97"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.63"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.99">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="composite"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.97"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.39"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.100">
  +        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.138">
             <Foundation.Core.ModelElement.name>Mediator</Foundation.Core.ModelElement.name>
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  @@ -1129,11 +1535,8 @@
             <Foundation.Core.ModelElement.namespace>
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Extension_Mechanisms.Stereotype.extendedElement>
  -            <Foundation.Core.ModelElement xmi.idref="xmi.2"/>
  -          </Foundation.Extension_Mechanisms.Stereotype.extendedElement>
           </Foundation.Extension_Mechanisms.Stereotype>
  -        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.101">
  +        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.139">
             <Foundation.Core.ModelElement.name>Singleton</Foundation.Core.ModelElement.name>
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  @@ -1146,7 +1549,7 @@
               <Foundation.Core.ModelElement xmi.idref="xmi.3"/>
             </Foundation.Extension_Mechanisms.Stereotype.extendedElement>
           </Foundation.Extension_Mechanisms.Stereotype>
  -        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.102">
  +        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.140">
             <Foundation.Core.ModelElement.name>Interpreter</Foundation.Core.ModelElement.name>
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  @@ -1156,7 +1559,7 @@
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
           </Foundation.Extension_Mechanisms.Stereotype>
  -        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.103">
  +        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.141">
             <Foundation.Core.ModelElement.name>Interpreter</Foundation.Core.ModelElement.name>
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  @@ -1165,11 +1568,8 @@
             <Foundation.Core.ModelElement.namespace>
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Extension_Mechanisms.Stereotype.extendedElement>
  -            <Foundation.Core.ModelElement xmi.idref="xmi.31"/>
  -          </Foundation.Extension_Mechanisms.Stereotype.extendedElement>
           </Foundation.Extension_Mechanisms.Stereotype>
  -        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.104">
  +        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.142">
             <Foundation.Core.ModelElement.name>Iterator</Foundation.Core.ModelElement.name>
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  @@ -1179,11 +1579,12 @@
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
             <Foundation.Extension_Mechanisms.Stereotype.extendedElement>
  -            <Foundation.Core.ModelElement xmi.idref="xmi.39"/>
  -            <Foundation.Core.ModelElement xmi.idref="xmi.41"/>
  +            <Foundation.Core.ModelElement xmi.idref="xmi.36"/>
  +            <Foundation.Core.ModelElement xmi.idref="xmi.15"/>
  +            <Foundation.Core.ModelElement xmi.idref="xmi.37"/>
             </Foundation.Extension_Mechanisms.Stereotype.extendedElement>
           </Foundation.Extension_Mechanisms.Stereotype>
  -        <Behavioral_Elements.Use_Cases.Actor xmi.id="xmi.105" xmi.uuid="-64--88-100-101-357e9a:ebcd920152:-7ffb">
  +        <Behavioral_Elements.Use_Cases.Actor xmi.id="xmi.143" xmi.uuid="-64--88-100-101-357e9a:ebcd920152:-7ffb">
             <Foundation.Core.ModelElement.name>OpenPKG</Foundation.Core.ModelElement.name>
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  @@ -1193,7 +1594,7 @@
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
           </Behavioral_Elements.Use_Cases.Actor>
  -        <Behavioral_Elements.Use_Cases.UseCase xmi.id="xmi.106" xmi.uuid="-64--88-100-101-357e9a:ebcd920152:-7ff8">
  +        <Behavioral_Elements.Use_Cases.UseCase xmi.id="xmi.144" xmi.uuid="-64--88-100-101-357e9a:ebcd920152:-7ff8">
             <Foundation.Core.ModelElement.name>ReadConfig</Foundation.Core.ModelElement.name>
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  @@ -1203,10 +1604,10 @@
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
             <Foundation.Core.GeneralizableElement.specialization>
  -            <Foundation.Core.Generalization xmi.idref="xmi.107"/>
  +            <Foundation.Core.Generalization xmi.idref="xmi.145"/>
             </Foundation.Core.GeneralizableElement.specialization>
           </Behavioral_Elements.Use_Cases.UseCase>
  -        <Behavioral_Elements.Use_Cases.UseCase xmi.id="xmi.108" xmi.uuid="-64--88-100-101-357e9a:ebcd920152:-7ff7">
  +        <Behavioral_Elements.Use_Cases.UseCase xmi.id="xmi.146" xmi.uuid="-64--88-100-101-357e9a:ebcd920152:-7ff7">
             <Foundation.Core.ModelElement.name>RunCommands</Foundation.Core.ModelElement.name>
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  @@ -1216,22 +1617,22 @@
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
             <Foundation.Core.GeneralizableElement.generalization>
  -            <Foundation.Core.Generalization xmi.idref="xmi.107"/>
  +            <Foundation.Core.Generalization xmi.idref="xmi.145"/>
             </Foundation.Core.GeneralizableElement.generalization>
           </Behavioral_Elements.Use_Cases.UseCase>
  -        <Foundation.Core.Generalization xmi.id="xmi.107" xmi.uuid="-64--88-100-101-357e9a:ebcd920152:-7ff6">
  +        <Foundation.Core.Generalization xmi.id="xmi.145" xmi.uuid="-64--88-100-101-357e9a:ebcd920152:-7ff6">
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.ModelElement.namespace>
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
             <Foundation.Core.Generalization.child>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.108"/>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.146"/>
             </Foundation.Core.Generalization.child>
             <Foundation.Core.Generalization.parent>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.106"/>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.144"/>
             </Foundation.Core.Generalization.parent>
           </Foundation.Core.Generalization>
  -        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.109">
  +        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.147">
             <Foundation.Core.ModelElement.name>include</Foundation.Core.ModelElement.name>
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  @@ -1240,11 +1641,8 @@
             <Foundation.Core.ModelElement.namespace>
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Extension_Mechanisms.Stereotype.extendedElement>
  -            <Foundation.Core.ModelElement xmi.idref="xmi.107"/>
  -          </Foundation.Extension_Mechanisms.Stereotype.extendedElement>
           </Foundation.Extension_Mechanisms.Stereotype>
  -        <Foundation.Core.Association xmi.id="xmi.110" xmi.uuid="-64--88-100-101-357e9a:ebcd920152:-7ff5">
  +        <Foundation.Core.Association xmi.id="xmi.148" xmi.uuid="-64--88-100-101-357e9a:ebcd920152:-7ff5">
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  @@ -1253,31 +1651,31 @@
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
             <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.111">
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.149" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fd8">
                 <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                 <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                 <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
                 <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.110"/>
  +                <Foundation.Core.Association xmi.idref="xmi.148"/>
                 </Foundation.Core.AssociationEnd.association>
                 <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.105"/>
  +                <Foundation.Core.Classifier xmi.idref="xmi.143"/>
                 </Foundation.Core.AssociationEnd.type>
               </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.112">
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.150" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fd7">
                 <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
                 <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
                 <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
                 <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.110"/>
  +                <Foundation.Core.Association xmi.idref="xmi.148"/>
                 </Foundation.Core.AssociationEnd.association>
                 <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.108"/>
  +                <Foundation.Core.Classifier xmi.idref="xmi.146"/>
                 </Foundation.Core.AssociationEnd.type>
               </Foundation.Core.AssociationEnd>
             </Foundation.Core.Association.connection>
           </Foundation.Core.Association>
  -        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.113">
  +        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.151">
             <Foundation.Core.ModelElement.name>extend</Foundation.Core.ModelElement.name>
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  @@ -1287,7 +1685,7 @@
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
           </Foundation.Extension_Mechanisms.Stereotype>
  -        <Foundation.Core.Class xmi.id="xmi.114">
  +        <Foundation.Core.Class xmi.id="xmi.40">
             <Foundation.Core.ModelElement.name>int</Foundation.Core.ModelElement.name>
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  @@ -1298,7 +1696,7 @@
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
           </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.45">
  +        <Foundation.Core.Class xmi.id="xmi.88">
             <Foundation.Core.ModelElement.name>char</Foundation.Core.ModelElement.name>
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  @@ -1309,7 +1707,7 @@
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
           </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.38">
  +        <Foundation.Core.Class xmi.id="xmi.81">
             <Foundation.Core.ModelElement.name>enum</Foundation.Core.ModelElement.name>
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  @@ -1320,7 +1718,7 @@
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
           </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.115">
  +        <Foundation.Core.Class xmi.id="xmi.9">
             <Foundation.Core.ModelElement.name>void</Foundation.Core.ModelElement.name>
             <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
             <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  @@ -1331,6 +1729,270 @@
               <Foundation.Core.Namespace xmi.idref="xmi.1"/>
             </Foundation.Core.ModelElement.namespace>
           </Foundation.Core.Class>
  +        <Foundation.Core.Association xmi.id="xmi.152" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fee">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.153" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fed">
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.ordering xmi.value="unordered"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.targetScope xmi.value="instance"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.changeability xmi.value="changeable"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.152"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.154" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fec">
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.152"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.36"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Core.Association xmi.id="xmi.155" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7feb">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.156" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fea">
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.ordering xmi.value="unordered"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.targetScope xmi.value="instance"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.changeability xmi.value="changeable"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.155"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.157" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe9">
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.155"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Core.Association xmi.id="xmi.158" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe8">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.159" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe7">
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.ordering xmi.value="unordered"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.targetScope xmi.value="instance"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.changeability xmi.value="changeable"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.158"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.160" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe6">
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.158"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.37"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Core.Association xmi.id="xmi.161" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fda">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.162" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fd9">
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.ordering xmi.value="unordered"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.targetScope xmi.value="instance"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.56"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.changeability xmi.value="changeable"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.161"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.109"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.163" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fd8">
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.161"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.86"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Core.Association xmi.id="xmi.164" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fd4">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.165" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fd3">
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.ordering xmi.value="unordered"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.targetScope xmi.value="instance"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.56"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.changeability xmi.value="changeable"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.164"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.107"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.166" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fd2">
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.164"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.86"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Core.Association xmi.id="xmi.167" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fd1">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.168" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fd0">
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.ordering xmi.value="unordered"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.targetScope xmi.value="instance"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.56"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.changeability xmi.value="changeable"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.167"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.105"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.169" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fcf">
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.167"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.86"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
         </Foundation.Core.Namespace.ownedElement>
       </Model_Management.Model>
     </XMI.content>

From ossp-cvs-owner@ossp.org  Wed Feb  6 19:16:41 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5A5F676523; Wed,  6 Feb 2002 19:16:41 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.c rc.h
Message-Id: <20020206181641.5A5F676523@mail.ossp.org>
Date: Wed,  6 Feb 2002 19:16:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   06-Feb-2002 19:16:41
  Branch: HEAD                             Handle: 2002020618164000

  Modified files:
    ossp-pkg/rc             rc.c rc.h

  Log:
    Add exception handling.

  Summary:
    Revision    Changes     Path
    1.9         +50 -35     ossp-pkg/rc/rc.c
    1.8         +2  -2      ossp-pkg/rc/rc.h
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 rc.c
  --- ossp-pkg/rc/rc.c	5 Feb 2002 20:37:34 -0000	1.8
  +++ ossp-pkg/rc/rc.c	6 Feb 2002 18:16:40 -0000	1.9
  @@ -33,12 +33,25 @@
   #include "rc_p.h"       /* FIXME, remove when options moves */
   #include "rc_strings.h" /* FIXME, remove when options moves */
   
  +#ifdef HAVE_CONFIG_H
  +#include "rc_config.h"
  +#endif
  +
   /* Third party headers for libraries linked in */
   #include "ex.h"         /* OSSP ex exception library */
   #include "str.h"        /* OSSP str string library   */
   #include "var.h"        /* OSSP var variable library */
   #include "popt.h"       /* OSSP popt options library */
   
  +/* FIXME if we only catch exceptions we might not need the following */
  +/* Catch OSSP ex based exceptions */
  +#define RC_THROW(rv) \
  +    (  (rv) != RC_OK && (ex_catching && !ex_shielding) \
  +     ? (ex_throw(ossprc_id, NULL, (rv)), (rv)) : (rv))
  +
  +/* Unique identifier to use with OSSP ex library */
  +const char ossprc_id[] = "OSSP rc";
  +
   
   static void die(rc_return_t rv)
   {
  @@ -46,28 +59,11 @@
       exit((int)rv);
   }
   
  -void usage(popt_context optCon, rc_return_t rv, char *szError)
  -{
  -    popt_printusage(optCon, stderr, 0);
  -    if (szError)
  -        fprintf(stderr, "%s\n", szError);
  -    exit((int)rv);
  -}
  -
  -/*void usage(char *szProgname)
  -{
  -    popt_peekarg(optCon) == NULL;
  -    fprintf(stdout, "Usage: %s [-v|--verbose] [-h|--help]\n\
  -                     [-p|--print] [-e|--eval] [-c|--config]\
  -                     [-q|--query] [-r|--raw]\n<package>\
  -                     <command> [<command> ...]", szProgname);
  -}*/
  -
   int main(int argc, char *argv[])
   {
       char cOpt = 0;              /* For argument parsing           */
       int  iBufpos = 0;           /* For tracking options           */
  -    char *szCLIBuf = NULL;    
  +    char *szCLIBuf = NULL;
       char *szFuncfile = NULL;    /* Rc.func file name and location */
       int  nIter = 0;
       char pcBuf[BUFSIZ+1];
  @@ -138,31 +134,50 @@
       /* Now do options processing */
       while ((cOpt = popt_getnextopt(optCon)) >= 0) {
           switch (cOpt) {
  -            case 'h':
  -                pcBuf[iBufpos++] = 'h';
  -                break;
  -            case 'V':
  -                pcBuf[iBufpos++] = 'V';
  -                break;
  -            case 'i':
  -                pcBuf[iBufpos++] = 'i';
  -                break;
  -            case 'q':
  -                pcBuf[iBufpos++] = 'q';
  -                break;
  +        case 'h':
  +            pcBuf[iBufpos++] = 'h';
  +            break;
  +        case 'V':
  +            pcBuf[iBufpos++] = 'V';
  +            break;
  +        case 'i':
  +            pcBuf[iBufpos++] = 'i';
  +            break;
  +        case 'q':
  +            pcBuf[iBufpos++] = 'q';
  +            break;
           }
       }
   
  +    {   /* FIXME Code snippet to use with throwable library calls FIXME */
  +        ex_t Except;
  +        int bCaught = 0;
  +
  +        ex_try { /* OSSP exception-enabled library calls go here */
  +        }
  +        ex_catch(Except) {
  +            if ((rc_return_t)Except.ex_value != RC_ERR_USE)
  +                fprintf(stderr, "Nonusage exception: %d\n",\
  +                    (rc_return_t)Except.ex_value);
  +            bCaught = 1;
  +        }
  +        if (!bCaught)
  +            fprintf(stderr, "Great, we can keep executing exceptionless.\n");
  +    }   /* FIXME Code snippet to use with throwable library calls FIXME */
  +
       szCLIBuf = (char *)popt_getarg(optCon);
  -    if ((szCLIBuf == NULL))
  -        usage(optCon, RC_ERR_ARG, "Specify at least one rcfile and section.");
  +    if ((szCLIBuf == NULL)) {
  +        fprintf(stderr, "Please specify at least one rcfile and section.\n");
  +        popt_printusage(optCon, stderr, 0);
  +        die(RC_THROW(RC_ERR_USE)); /* FIXME Vielleicht muss local = */
  +    } /* (int)RC_THROW(RC_ERR_USE));die(local); oder etwas so FIXME */
   
       if (cOpt < -1) {
           /* An error occurred during option processing */
           fprintf(stderr, "%s: %s\n",
  -            popt_badoption(optCon, POPT_BADOPTION_NOALIAS),
  -            popt_strerror(cOpt));
  -        die(RC_ERR_ARG);
  +                popt_badoption(optCon, POPT_BADOPTION_NOALIAS),
  +                popt_strerror(cOpt));
  +        die(RC_THROW(RC_ERR_INT)); /* FIXME Ebenso als vorherige Merkung */
       }
   
       /* Print out options, szCLIBuf chosen */
  Index: ossp-pkg/rc/rc.h
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 rc.h
  --- ossp-pkg/rc/rc.h	5 Feb 2002 20:37:34 -0000	1.7
  +++ ossp-pkg/rc/rc.h	6 Feb 2002 18:16:40 -0000	1.8
  @@ -43,8 +43,9 @@
   #define TRUE (!FALSE)
   #endif
   
  -#include "popt.h"
   
  +/* Unique identifier to use with OSSP ex library */
  +extern const char ossprc_id[];
   
   /* RC return codes */
   typedef enum {
  @@ -60,7 +61,6 @@
   
   /* Function prototypes */
   static void die(rc_return_t);
  -void usage(popt_context, rc_return_t, char *);
   
   /*rc_result_t rc_Err              (void);
   rc_result_t rc_Warn             (void);

From ossp-cvs-owner@ossp.org  Thu Feb  7 09:59:45 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B2176764F8; Thu,  7 Feb 2002 09:59:44 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp fixme.h
Message-Id: <20020207085944.B2176764F8@mail.ossp.org>
Date: Thu,  7 Feb 2002 09:59:44 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   07-Feb-2002 09:59:44
  Branch: HEAD                             Handle: 2002020708594400

  Modified files:
    ossp-pkg/lmtp2nntp      fixme.h

  Log:
    throw out a bunch of obsolete stuff

  Summary:
    Revision    Changes     Path
    1.13        +3  -33     ossp-pkg/lmtp2nntp/fixme.h
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/fixme.h
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 fixme.h
  --- ossp-pkg/lmtp2nntp/fixme.h	5 Feb 2002 10:42:39 -0000	1.12
  +++ ossp-pkg/lmtp2nntp/fixme.h	7 Feb 2002 08:59:44 -0000	1.13
  @@ -6,23 +6,20 @@
   #define __FIXME_H__
   
   #include <val.h>
  -/*FIXME obsolete #define MAXACLS 32 */
   #include <sa.h>
   struct acl {
       char      *acl;
       int        not;
  -    sa_addr_t *saa;
       size_t     prefixlen;
  +    sa_addr_t *saa;
   };
   #define MAXNEWSSERVICES 16
   struct nntp_st;
   typedef struct nntp_st nntp_t;
   #include "lmtp2nntp_nntp.h"
   struct ns {
  -    /*FIXME obsolete char           *h;    * host */
  -    /*FIXME obsolete char           *p;    * port */
  -    sa_addr_t      *saa;  /* socket address abstraction */
  -    sa_t           *sa;   /* socket abstraction */
  +    sa_addr_t      *saa;
  +    sa_t           *sa;
       nntp_t         *nntp;
       nntp_rc_t       rc;
       l2_channel_t   *l2;
  @@ -36,7 +33,6 @@
       l2_context_t    ctx;
       val_t          *val;
       char           *progname;
  -    /*FIXME obsolete char           *option_logfile; */
       int             option_groupmode;
       int             option_operationmode;
       char           *option_operationmodefakestatus;
  @@ -52,52 +48,26 @@
       int             option_timeout_nntp_write;
       char           *option_mailfrom;
       char           *option_restrictheader;
  -    /*FIXME obsolete unsigned int    option_levelmask; */
       char           *option_pidfile;
       int             option_killflag;
       uid_t           option_uid;
       int             option_daemon;
  -
  -    /*
  -    int             option_aclc;
  -    struct acl      option_acl[MAXACLS];
  -    FIXME replaced by following */
       int             nacl; /* number of acl structures found at pacl */
       struct acl     *pacl; /* pointer to an array of acl structures */
  -
  -    /*FIXME obsolete int             option_veryverbose; */
       int             option_childsmax;
       int             active_childs;
       l2_env_t       *l2_env;
       l2_channel_t   *l2;
  -    /*
  -    sa_addr_t      *saaAltio;
  -    sa_t           *saAltio;
  -    FIXME replaced by following */
       sa_addr_t      *saaServerbind;
       sa_t           *saServerbind;
  -
  -    /*FIXME obsolete char           *cpBindh; */
  -    /*FIXME obsolete char           *cpBindp; */
  -    /*
  -    sa_addr_t      *saaBind;
  -    sa_t           *saBind;
  -    FIXME replaced by following */
       sa_addr_t      *saaClientbind;
       sa_t           *saClientbind;
  -
       sa_addr_t      *saaIO;
       sa_t           *saIO;
       int             fdIOi;
       int             fdIOo;
  -
  -    /*
  -    int             nsc;
  -    struct ns       ns[MAXNEWSSERVICES];
  -    FIXME replaced by following */
       int             nns; /* number of ns structures found at pns */
       struct ns      *pns; /* pointer to an array of ns structures */
  -
       char           *azGroupargs;
       size_t          asGroupargs;
       struct          session session;

From ossp-cvs-owner@ossp.org  Thu Feb  7 10:01:05 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F26CB764F8; Thu,  7 Feb 2002 10:01:04 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c
Message-Id: <20020207090104.F26CB764F8@mail.ossp.org>
Date: Thu,  7 Feb 2002 10:01:04 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   07-Feb-2002 10:01:04
  Branch: HEAD                             Handle: 2002020709010400

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c

  Log:
    eliminate a nasty copy'n'paste bug which caused segfaults

  Summary:
    Revision    Changes     Path
    1.45        +0  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.44 -r1.45 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	6 Feb 2002 13:51:38 -0000	1.44
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	7 Feb 2002 09:01:04 -0000	1.45
  @@ -542,7 +542,6 @@
               log2(ctx, TRACE, "--headervalue[%d] = \"%s\"", i, (ov->data.m)[i]);
   
           if (ov->ndata >= 1) {
  -            if ((ctx->pacl = (struct acl *)malloc(ov->ndata * sizeof(struct acl))) == NULL) throw(0,0,0);
               for (i = 0; i < ov->ndata; i++) {
                   cp = (ov->data.m)[i];
                   log2(ctx, DEBUG, "cp = (data.m)[%d] = \"%s\"", i, cp);

From ossp-cvs-owner@ossp.org  Thu Feb  7 13:35:26 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DDAEA764F8; Thu,  7 Feb 2002 13:35:25 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc_const.h rc_p.h rc_private.h rc_strings.h
Message-Id: <20020207123525.DDAEA764F8@mail.ossp.org>
Date: Thu,  7 Feb 2002 13:35:25 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   07-Feb-2002 13:35:25
  Branch: HEAD                             Handle: 197001010100001013081725

  Added files:
    ossp-pkg/rc             rc_const.h rc_private.h
  Removed files:
    ossp-pkg/rc             rc_p.h rc_strings.h

  Log:
    Filename changes.

  Summary:
    Revision    Changes     Path
    1.1         +66 -0      ossp-pkg/rc/rc_const.h
    NONE        +0  -70     ossp-pkg/rc/rc_p.h
    1.1         +39 -0      ossp-pkg/rc/rc_private.h
    NONE        +0  -66     ossp-pkg/rc/rc_strings.h
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc_const.h
  ============================================================
  $ cvs update -p -r1.1 rc_const.h
  /*  rc - OSSP Run-command processor
  **  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2002 Ralf S. Engelschall
  **
  **  This file is part of OSSP rc, a portable Run-command processor
  **  which can be found at http://www.ossp.org/pkg/rc/
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  rc_const.h: Run-command processor ISO C public header file
  */
  
  #ifndef __OSSPRC_CONST_H__
  #define __OSSPRC_CONST_H__
  
  /* Option descriptions used with popt */
  #define RC_USE_DESC "Print a short usage summary, then exit."
  #define RC_DBG_DESC "Don't remove temporary files, and write debug messages to stderr."
  #define RC_VER_DESC "Print the version and copyright, then exit."
  #define RC_EVL_DESC "Output the command(s) in a format suitable for shell evaluation, but do not run them."
  #define RC_HLP_DESC "Print this help, then exit."
  #define RC_INF_DESC "Print a comprehensive summary of the rc environment."
  #define RC_LBL_DESC "Learn what section labels a rcfile has."
  #define RC_PRN_DESC "Output the command(s) in a format suitable for human reading, but do not run them."
  #define RC_SIL_DESC "Be silent, and disable output to stdout."
  #define RC_RAW_DESC "Output text using no terminal control sequences."
  #define RC_VRB_DESC "Output text verbosely."
  #define RC_EXC_DESC "Execute the commands through an interpreter."
  
  #define RC_LOC_DESC "Specifiy the location(s) to search for rcfiles, and ignore parts according to the regex."
  #define RC_CNF_DESC "Specify the location(s) of the configuration files."
  #define RC_FNC_DESC "Specify the single location of the extra functions file."
  #define RC_QRY_DESC "Query the effective value of configuration variables."
  #define RC_TMP_DESC "Specify the single location for temporary files."
  
  #define RC_OWN_DESC "Username used to verify run command rights at runtime."
  #define RC_GRP_DESC "Group name used to verify run command rights at runtime."
  #define RC_MSK_DESC "Umask used to verify run command rights at runtime."
  #define RC_ASS_DESC "Regex used to match name value assignments in a rcfile."
  #define RC_DEF_DESC "Regex used to match a section label in a rcfile."
  #define RC_REF_DESC "Regex used to match a section reference in a rcfile."
  #define RC_PRM_DESC "Regex used to match the parameter(s) of a section label."
  #define RC_TRM_DESC "Regex used to match the terminal(s) in a rcfile."
  #define RC_NCF_DESC "Name of the config section in a rcfile."
  #define RC_CMN_DESC "Name of the common section in a rcfile."
  #define RC_DFL_DESC "Name of the default section in a rcfile."
  #define RC_ERR_DESC "Name of the error section in a rcfile."
  
  #endif /* __OSSPRC_CONST_H__ */
    Index: ossp-pkg/rc/rc_private.h
  ============================================================
  $ cvs update -p -r1.1 rc_private.h
  /*  rc - OSSP Run-command processor
  **  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2002 Ralf S. Engelschall
  **
  **  This file is part of OSSP rc, a portable Run-command processor
  **  which can be found at http://www.ossp.org/pkg/rc/
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  rc_private.h: Run-command processor ISO C private API header file
  */
  
  #ifndef __OSSPRC_P_H__
  #define __OSSPRC_P_H__
  
  #include "rc_config.h"
  
  #ifdef HAVE_SYS_TIME_H /* must come after include rc_config.h */
  #include <sys/time.h>
  #endif
  
  #endif /* __OSSPRC_P_H__ */
  

From ossp-cvs-owner@ossp.org  Thu Feb  7 13:38:34 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A620676598; Thu,  7 Feb 2002 13:38:33 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc Makefile.in rc.c rc.h rc_option.c rc_option.h
Message-Id: <20020207123833.A620676598@mail.ossp.org>
Date: Thu,  7 Feb 2002 13:38:33 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   07-Feb-2002 13:38:33
  Branch: HEAD                             Handle: 2002020712383200

  Added files:
    ossp-pkg/rc             rc_option.c rc_option.h
  Modified files:
    ossp-pkg/rc             Makefile.in rc.c rc.h

  Log:
    Abstract rc's config according to design.

  Summary:
    Revision    Changes     Path
    1.11        +4  -4      ossp-pkg/rc/Makefile.in
    1.10        +19 -146    ossp-pkg/rc/rc.c
    1.9         +1  -2      ossp-pkg/rc/rc.h
    1.1         +167 -0     ossp-pkg/rc/rc_option.c
    1.1         +30 -0      ossp-pkg/rc/rc_option.h
  ____________________________________________________________________________

  Index: ossp-pkg/rc/Makefile.in
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 Makefile.in
  --- ossp-pkg/rc/Makefile.in	6 Feb 2002 16:56:33 -0000	1.10
  +++ ossp-pkg/rc/Makefile.in	7 Feb 2002 12:38:32 -0000	1.11
  @@ -57,8 +57,8 @@
   TARGET_PROGS    = rc
   TARGET_MANS     = rc.1 rc-sample.5
   
  -SRCS            = rc.c rc_version.c rc_pcre.c
  -OBJS            = rc.o rc_version.o rc_pcre.o
  +SRCS            = rc.c rc_option.c rc_version.c rc_pcre.c
  +OBJS            = rc.o rc_option.o rc_version.o rc_pcre.o
   
   SUBDIRS         = @SUBDIR_EX@ @SUBDIR_VAR@ @SUBDIR_STR@ @SUBDIR_POPT@
   
  @@ -133,10 +133,10 @@
   
   distclean: clean
   	$(RM) config.log config.status config.cache # Generated by ./configure
  -	$(RM) Makefile rc_config.h # Generated by ./configure
  +	$(RM) Makefile rc_config.h                  # Generated by ./configure
   
   realclean: distclean
  -	$(RM) configure rc_config.h.in # Generated by Autoconf
  +	$(RM) configure rc_config.h.in              # Generated by Autoconf
   	$(RM) shtool
   
   check: test
  Index: ossp-pkg/rc/rc.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 rc.c
  --- ossp-pkg/rc/rc.c	6 Feb 2002 18:16:40 -0000	1.9
  +++ ossp-pkg/rc/rc.c	7 Feb 2002 12:38:32 -0000	1.10
  @@ -30,164 +30,37 @@
   #include <stdio.h>
   
   #include "rc.h"
  -#include "rc_p.h"       /* FIXME, remove when options moves */
  -#include "rc_strings.h" /* FIXME, remove when options moves */
   
   #ifdef HAVE_CONFIG_H
   #include "rc_config.h"
   #endif
   
  -/* Third party headers for libraries linked in */
  +/* Third party headers for libraries linked in       */
   #include "ex.h"         /* OSSP ex exception library */
  -#include "str.h"        /* OSSP str string library   */
  -#include "var.h"        /* OSSP var variable library */
  -#include "popt.h"       /* OSSP popt options library */
   
  -/* FIXME if we only catch exceptions we might not need the following */
  -/* Catch OSSP ex based exceptions */
  -#define RC_THROW(rv) \
  -    (  (rv) != RC_OK && (ex_catching && !ex_shielding) \
  -     ? (ex_throw(ossprc_id, NULL, (rv)), (rv)) : (rv))
  -
  -/* Unique identifier to use with OSSP ex library */
  -const char ossprc_id[] = "OSSP rc";
  -
  -
  -static void die(rc_return_t rv)
  -{
  -    fprintf(stderr, "OSSP rc: Error, dying.\n");
  -    exit((int)rv);
  -}
   
   int main(int argc, char *argv[])
   {
  -    char cOpt = 0;              /* For argument parsing           */
  -    int  iBufpos = 0;           /* For tracking options           */
  -    char *szCLIBuf = NULL;
  -    char *szFuncfile = NULL;    /* Rc.func file name and location */
  -    int  nIter = 0;
  -    char pcBuf[BUFSIZ+1];
  -    popt_context optCon;        /* Context for parsing options    */
  -
  -    struct popt_option optionsTable[] = {
  -        /* Long options with short keys but no arguments */
  -        { "usage",   '?', POPT_ARG_NONE,   0, RC_USE_VAL, RC_USE_DESC, NULL },
  -        { "debug",   'd', POPT_ARG_NONE,   0, RC_DBG_VAL, RC_DBG_DESC, NULL },
  -        { "version", 'V', POPT_ARG_NONE,   0, RC_VER_VAL, RC_VER_DESC, NULL },
  -        { "eval",    'e', POPT_ARG_NONE,   0, RC_EVL_VAL, RC_EVL_DESC, NULL },
  -        { "help",    'h', POPT_ARG_NONE,   0, RC_HLP_VAL, RC_HLP_DESC, NULL },
  -        { "info",    'i', POPT_ARG_NONE,   0, RC_INF_VAL, RC_INF_DESC, NULL },
  -        { "labels",  'l', POPT_ARG_NONE,   0, RC_LBL_VAL, RC_LBL_DESC, NULL },
  -        { "print",   'p', POPT_ARG_NONE,   0, RC_PRN_VAL, RC_PRN_DESC, NULL },
  -        { "silent",  's', POPT_ARG_NONE,   0, RC_SIL_VAL, RC_SIL_DESC, NULL },
  -        { "raw",     'r', POPT_ARG_NONE,   0, RC_RAW_VAL, RC_RAW_DESC, NULL },
  -        { "verbose", 'v', POPT_ARG_NONE,   0, RC_VRB_VAL, RC_VRB_DESC, NULL },
  -        { "exec",    'x', POPT_ARG_NONE,   0, RC_EXC_VAL, RC_EXC_DESC, NULL },
  -                                              
  -        /* Single argument long options with short keys */
  -        { "locate",  'L', POPT_ARG_STRING, 0, RC_LOC_VAL, RC_LOC_DESC, "regx" },
  -        { "conf",    'c', POPT_ARG_STRING, 0, RC_CNF_VAL, RC_CNF_DESC, "path" },
  -        { "func",    'f', POPT_ARG_STRING, &szFuncfile,\
  -            RC_FNC_VAL, RC_FNC_DESC, "path" },
  -        { "query",   'q', POPT_ARG_STRING, 0, RC_QRY_VAL, RC_QRY_DESC, "varx" },
  -        { "tmp",     't', POPT_ARG_STRING, 0, RC_TMP_VAL, RC_TMP_DESC, "path" },
  -
  -        /* Single argument long options without short keys */
  -        { "RequireOwner",      0, POPT_ARG_STRING, 0,\
  -            RC_OWN_VAL, RC_OWN_DESC, "user"  },
  -        { "RequireGroup",      0, POPT_ARG_STRING, 0,\
  -            RC_GRP_VAL, RC_GRP_DESC, "group" },
  -        { "RequireUmask",      0, POPT_ARG_INT,    0,\
  -            RC_MSK_VAL, RC_MSK_DESC, "umask" },
  -        { "ParseEnvAss",       0, POPT_ARG_STRING, 0,\
  -            RC_ASS_VAL, RC_ASS_DESC, "regx" },
  -        { "ParseSectionDef",   0, POPT_ARG_STRING, 0,\
  -            RC_DEF_VAL, RC_DEF_DESC, "regx" },
  -        { "ParseSectionRef",   0, POPT_ARG_STRING, 0,\
  -            RC_REF_VAL, RC_REF_DESC, "regx" },
  -        { "ParseSectionParam", 0, POPT_ARG_STRING, 0,\
  -            RC_PRM_VAL, RC_PRM_DESC, "regx" },
  -        { "ParseTerminal",     0, POPT_ARG_STRING, 0,\
  -            RC_TRM_VAL, RC_TRM_DESC, "regx" },
  -        { "NameConfig",        0, POPT_ARG_STRING, 0,\
  -            RC_NCF_VAL, RC_NCF_DESC, "name" },
  -        { "NameCommon",        0, POPT_ARG_STRING, 0,\
  -            RC_CMN_VAL, RC_CMN_DESC, "name" },
  -        { "NameDefault",       0, POPT_ARG_STRING, 0,\
  -            RC_DFL_VAL, RC_DFL_DESC, "name" },
  -        { "NameError",         0, POPT_ARG_STRING, 0,\
  -            RC_ERR_VAL, RC_ERR_DESC, "name" },
  -
  -        POPT_AUTOHELP
  -        { NULL, 0, 0, NULL, 0 }
  -    };
  -
  -    optCon = popt_getcontext(NULL, argc, (const char **)argv, optionsTable, 0);
  -    popt_setotheroptionhelp(optCon,
  -        "[OPTIONS]* [rcfile] [[section [args]] ...]");
  -
  -    if (argc < 2) {
  -        popt_printusage(optCon, stderr, 0);
  -        exit(1);
  -    }
  +    ex_t Except;
  +    int bCaught = 0;
   
  -    /* Now do options processing */
  -    while ((cOpt = popt_getnextopt(optCon)) >= 0) {
  -        switch (cOpt) {
  -        case 'h':
  -            pcBuf[iBufpos++] = 'h';
  -            break;
  -        case 'V':
  -            pcBuf[iBufpos++] = 'V';
  -            break;
  -        case 'i':
  -            pcBuf[iBufpos++] = 'i';
  -            break;
  -        case 'q':
  -            pcBuf[iBufpos++] = 'q';
  -            break;
  -        }
  +    ex_try {
  +        parseopts(argc, argv);
       }
  -
  -    {   /* FIXME Code snippet to use with throwable library calls FIXME */
  -        ex_t Except;
  -        int bCaught = 0;
  -
  -        ex_try { /* OSSP exception-enabled library calls go here */
  -        }
  -        ex_catch(Except) {
  -            if ((rc_return_t)Except.ex_value != RC_ERR_USE)
  -                fprintf(stderr, "Nonusage exception: %d\n",\
  -                    (rc_return_t)Except.ex_value);
  -            bCaught = 1;
  -        }
  -        if (!bCaught)
  -            fprintf(stderr, "Great, we can keep executing exceptionless.\n");
  -    }   /* FIXME Code snippet to use with throwable library calls FIXME */
  -
  -    szCLIBuf = (char *)popt_getarg(optCon);
  -    if ((szCLIBuf == NULL)) {
  -        fprintf(stderr, "Please specify at least one rcfile and section.\n");
  -        popt_printusage(optCon, stderr, 0);
  -        die(RC_THROW(RC_ERR_USE)); /* FIXME Vielleicht muss local = */
  -    } /* (int)RC_THROW(RC_ERR_USE));die(local); oder etwas so FIXME */
  -
  -    if (cOpt < -1) {
  -        /* An error occurred during option processing */
  -        fprintf(stderr, "%s: %s\n",
  -                popt_badoption(optCon, POPT_BADOPTION_NOALIAS),
  -                popt_strerror(cOpt));
  -        die(RC_THROW(RC_ERR_INT)); /* FIXME Ebenso als vorherige Merkung */
  +    ex_catch(Except) {
  +        if ((rc_return_t)Except.ex_value != RC_ERR_USE)
  +            fprintf(stderr, "Nonusage exception: %d\n",\
  +                (rc_return_t)Except.ex_value);
  +        bCaught = 1;
       }
  +    if (!bCaught) {
  +        fprintf(stderr, "No exceptions caught.\n");
  +        exit(0); /* Success */
  +    }
  +    else
  +        fprintf(stderr, "Class '%s' threw exception %d in %s:%s():%d.\n",\
  +                (char *)Except.ex_class, *(int *)Except.ex_value,\
  +                Except.ex_file, Except.ex_func, Except.ex_line);
   
  -    /* Print out options, szCLIBuf chosen */
  -    fprintf(stderr, "Options chosen: ");
  -    for (nIter = 0; nIter < iBufpos ; nIter++)
  -        fprintf(stderr, "-%c ", pcBuf[nIter]);
  -    if (szFuncfile)
  -        fprintf(stderr, "-f %s ", szFuncfile);
  -    fprintf(stderr, "\nRun these commands: %s\n", szCLIBuf);
  -
  -    popt_freecontext(optCon);
  -    exit(0);
  +    exit(1); /* Failure */
   }
  Index: ossp-pkg/rc/rc.h
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 rc.h
  --- ossp-pkg/rc/rc.h	6 Feb 2002 18:16:40 -0000	1.8
  +++ ossp-pkg/rc/rc.h	7 Feb 2002 12:38:32 -0000	1.9
  @@ -50,7 +50,6 @@
   /* RC return codes */
   typedef enum {
       RC_OK,      /* Success                  */
  -    RC_ERR_ARG, /* Argument error           */
       RC_ERR_USE, /* Usage error              */
       RC_ERR_MEM, /* Memory error             */
       RC_ERR_SYS, /* System error (see errno) */
  @@ -60,7 +59,7 @@
   } rc_return_t;
   
   /* Function prototypes */
  -static void die(rc_return_t);
  +rc_return_t parseopts(int, char **);
   
   /*rc_result_t rc_Err              (void);
   rc_result_t rc_Warn             (void);
  Index: ossp-pkg/rc/rc_option.c
  ============================================================
  $ cvs update -p -r1.1 rc_option.c
  /*  rc - OSSP Run-command processor
  **  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2002 Ralf S. Engelschall
  **
  **  This file is part of OSSP rc, a portable Run-command processor
  **  which can be found at http://www.ossp.org/pkg/rc/
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  rc_option.c: Run-command processor ISO C source file
  */
  
  #include <stdio.h>
  
  #include "rc.h"
  #include "rc_option.h"  /* Values and other for popt   */
  #include "rc_const.h"   /* Strings and other constants */
  
  #ifdef HAVE_CONFIG_H
  #include "rc_config.h"
  #endif
  
  /* Third party headers for libraries linked in       */
  #include "ex.h"         /* OSSP ex exception library */
  #include "popt.h"       /* OSSP popt options library */
  
  /* Define the ability to throw OSSP ex exceptions    */
  #define RC_THROW(rv) \
      (  (rv) != RC_OK && (ex_catching && !ex_shielding) \
       ? (ex_throw(ossprc_id, NULL, (rv)), (rv)) : (rv))
  
  /* Unique identifier to use with OSSP ex library     */
  const char ossprc_id[] = "OSSP rc";
  
  
  rc_return_t parseopts(int argc, char *argv[])
  {
      char cOpt = 0;              /* For argument parsing           */
      int  iBufpos = 0;           /* For tracking options           */
      char *szCLIBuf = NULL;
      char *szFuncfile = NULL;    /* Rc.func file name and location */
      int  nIter = 0;
      char pcBuf[BUFSIZ+1];
      popt_context optCon;        /* Context for parsing options    */
  
      struct popt_option optionsTable[] = {
          /* Long options with short keys but no arguments */
          { "usage",   '?', POPT_ARG_NONE,   0, RC_USE_VAL, RC_USE_DESC, NULL },
          { "debug",   'd', POPT_ARG_NONE,   0, RC_DBG_VAL, RC_DBG_DESC, NULL },
          { "version", 'V', POPT_ARG_NONE,   0, RC_VER_VAL, RC_VER_DESC, NULL },
          { "eval",    'e', POPT_ARG_NONE,   0, RC_EVL_VAL, RC_EVL_DESC, NULL },
          { "help",    'h', POPT_ARG_NONE,   0, RC_HLP_VAL, RC_HLP_DESC, NULL },
          { "info",    'i', POPT_ARG_NONE,   0, RC_INF_VAL, RC_INF_DESC, NULL },
          { "labels",  'l', POPT_ARG_NONE,   0, RC_LBL_VAL, RC_LBL_DESC, NULL },
          { "print",   'p', POPT_ARG_NONE,   0, RC_PRN_VAL, RC_PRN_DESC, NULL },
          { "silent",  's', POPT_ARG_NONE,   0, RC_SIL_VAL, RC_SIL_DESC, NULL },
          { "raw",     'r', POPT_ARG_NONE,   0, RC_RAW_VAL, RC_RAW_DESC, NULL },
          { "verbose", 'v', POPT_ARG_NONE,   0, RC_VRB_VAL, RC_VRB_DESC, NULL },
          { "exec",    'x', POPT_ARG_NONE,   0, RC_EXC_VAL, RC_EXC_DESC, NULL },
                                                
          /* Single argument long options with short keys */
          { "locate",  'L', POPT_ARG_STRING, 0, RC_LOC_VAL, RC_LOC_DESC, "regx" },
          { "conf",    'c', POPT_ARG_STRING, 0, RC_CNF_VAL, RC_CNF_DESC, "path" },
          { "func",    'f', POPT_ARG_STRING, &szFuncfile,\
              RC_FNC_VAL, RC_FNC_DESC, "path" },
          { "query",   'q', POPT_ARG_STRING, 0, RC_QRY_VAL, RC_QRY_DESC, "varx" },
          { "tmp",     't', POPT_ARG_STRING, 0, RC_TMP_VAL, RC_TMP_DESC, "path" },
  
          /* Single argument long options without short keys */
          { "RequireOwner",      0, POPT_ARG_STRING, 0,\
              RC_OWN_VAL, RC_OWN_DESC, "user"  },
          { "RequireGroup",      0, POPT_ARG_STRING, 0,\
              RC_GRP_VAL, RC_GRP_DESC, "group" },
          { "RequireUmask",      0, POPT_ARG_INT,    0,\
              RC_MSK_VAL, RC_MSK_DESC, "umask" },
          { "ParseEnvAss",       0, POPT_ARG_STRING, 0,\
              RC_ASS_VAL, RC_ASS_DESC, "regx" },
          { "ParseSectionDef",   0, POPT_ARG_STRING, 0,\
              RC_DEF_VAL, RC_DEF_DESC, "regx" },
          { "ParseSectionRef",   0, POPT_ARG_STRING, 0,\
              RC_REF_VAL, RC_REF_DESC, "regx" },
          { "ParseSectionParam", 0, POPT_ARG_STRING, 0,\
              RC_PRM_VAL, RC_PRM_DESC, "regx" },
          { "ParseTerminal",     0, POPT_ARG_STRING, 0,\
              RC_TRM_VAL, RC_TRM_DESC, "regx" },
          { "NameConfig",        0, POPT_ARG_STRING, 0,\
              RC_NCF_VAL, RC_NCF_DESC, "name" },
          { "NameCommon",        0, POPT_ARG_STRING, 0,\
              RC_CMN_VAL, RC_CMN_DESC, "name" },
          { "NameDefault",       0, POPT_ARG_STRING, 0,\
              RC_DFL_VAL, RC_DFL_DESC, "name" },
          { "NameError",         0, POPT_ARG_STRING, 0,\
              RC_ERR_VAL, RC_ERR_DESC, "name" },
  
          POPT_AUTOHELP
          { NULL, 0, 0, NULL, 0 }
      };
  
      optCon = popt_getcontext(NULL, argc, (const char **)argv, optionsTable, 0);
      popt_setotheroptionhelp(optCon, "[options] <rcfile> <sections [args]>");
  
      if (argc < 2) {
          popt_printusage(optCon, stderr, 0);
          return(RC_THROW(RC_ERR_USE));
      }
  
      /* Now do options processing */
      while ((cOpt = popt_getnextopt(optCon)) >= 0) {
          switch (cOpt) {
          case 'h':
              pcBuf[iBufpos++] = 'h';
              break;
          case 'V':
              pcBuf[iBufpos++] = 'V';
              break;
          case 'i':
              pcBuf[iBufpos++] = 'i';
              break;
          case 'q':
              pcBuf[iBufpos++] = 'q';
              break;
          }
      }
  
      szCLIBuf = (char *)popt_getarg(optCon);
      if ((szCLIBuf == NULL)) {
          fprintf(stderr, "Please specify at least one rcfile and section.\n");
          popt_printusage(optCon, stderr, 0);
          return(RC_THROW(RC_ERR_USE));
      }
  
      if (cOpt < -1) {
          /* An error occurred during option processing */
          fprintf(stderr, "%s: %s\n",
                  popt_badoption(optCon, POPT_BADOPTION_NOALIAS),
                  popt_strerror(cOpt));
          return(RC_THROW(RC_ERR_INT));
      }
  
      /* Print out options, szCLIBuf chosen */
      fprintf(stderr, "Options chosen: ");
      for (nIter = 0; nIter < iBufpos ; nIter++)
          fprintf(stderr, "-%c ", pcBuf[nIter]);
      if (szFuncfile)
          fprintf(stderr, "-f %s ", szFuncfile);
      fprintf(stderr, "\nRun these commands: %s\n", szCLIBuf);
  
      popt_freecontext(optCon);
      return(RC_THROW(RC_OK));
  }
  Index: ossp-pkg/rc/rc_option.h
  ============================================================
  $ cvs update -p -r1.1 rc_option.h
  /* Option values used with popt */
  #define RC_USE_VAL  32
  #define RC_DBG_VAL  33
  #define RC_VER_VAL  34
  #define RC_EVL_VAL  35
  #define RC_HLP_VAL  36
  #define RC_INF_VAL  37
  #define RC_LBL_VAL  38
  #define RC_PRN_VAL  39
  #define RC_SIL_VAL  40
  #define RC_RAW_VAL  41
  #define RC_VRB_VAL  42
  #define RC_EXC_VAL  43
  #define RC_LOC_VAL  44
  #define RC_CNF_VAL  45
  #define RC_FNC_VAL  46
  #define RC_QRY_VAL  47
  #define RC_TMP_VAL  48
  #define RC_OWN_VAL  49
  #define RC_GRP_VAL  50
  #define RC_MSK_VAL  51
  #define RC_ASS_VAL  52
  #define RC_DEF_VAL  53
  #define RC_REF_VAL  54
  #define RC_PRM_VAL  55
  #define RC_TRM_VAL  56
  #define RC_NCF_VAL  57
  #define RC_CMN_VAL  58
  #define RC_DFL_VAL  59
  #define RC_ERR_VAL  60

From ossp-cvs-owner@ossp.org  Thu Feb  7 13:53:46 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E7A4E765B1; Thu,  7 Feb 2002 13:53:45 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c
Message-Id: <20020207125345.E7A4E765B1@mail.ossp.org>
Date: Thu,  7 Feb 2002 13:53:45 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   07-Feb-2002 13:53:45
  Branch: HEAD                             Handle: 2002020712534500

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c

  Log:
    fix to calculate nns correctly

  Summary:
    Revision    Changes     Path
    1.46        +2  -2      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.45 -r1.46 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	7 Feb 2002 09:01:04 -0000	1.45
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	7 Feb 2002 12:53:45 -0000	1.46
  @@ -471,7 +471,7 @@
   
           if (ov->ndata >= 1) {
               if ((ctx->pns = (struct ns *)malloc(ov->ndata * sizeof(struct ns))) == NULL) throw(0,0,0);
  -            for (i = 0; i < ov->ndata; i++) {
  +            for (i = 0; i < ov->ndata;) {
                   cp = (ov->data.m)[i];
                   log2(ctx, DEBUG, "cp = (data.m)[%d] = \"%s\"", i, cp);
                   if (strrchr(cp, ':') == NULL)
  @@ -494,7 +494,7 @@
                   ctx->pns[i].rc = NNTP_OK;
                   ctx->pns[i].l2 = ctx->l2;
                   free(cp);
  -                ctx->nns = i;
  +                ctx->nns = ++i;
               }
           }
       }

From ossp-cvs-owner@ossp.org  Thu Feb  7 13:54:05 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7D3F176556; Thu,  7 Feb 2002 13:54:05 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO
Message-Id: <20020207125405.7D3F176556@mail.ossp.org>
Date: Thu,  7 Feb 2002 13:54:05 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   07-Feb-2002 13:54:05
  Branch: HEAD                             Handle: 2002020712540400

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO

  Log:
    remember issue regarding newsserver fallback

  Summary:
    Revision    Changes     Path
    1.53        +4  -0      ossp-pkg/lmtp2nntp/00TODO
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.52 -r1.53 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	31 Jan 2002 09:48:25 -0000	1.52
  +++ ossp-pkg/lmtp2nntp/00TODO	7 Feb 2002 12:54:04 -0000	1.53
  @@ -15,6 +15,10 @@
   
     --------------------------------------------------------------------------------
   
  +  newsserver fallback: when a server does not respond, mark it "disabled" for
  +  a specified time. Until the time is expired, ignore this server. However, if
  +  all others fail, ignore the timestamp.
  +
     use sa_buffer (where sa_timeout is called)
   
     option -U currently has to be specified before option -b in order to set the

From ossp-cvs-owner@ossp.org  Thu Feb  7 14:36:17 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6560D7659A; Thu,  7 Feb 2002 14:36:17 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c
Message-Id: <20020207133617.6560D7659A@mail.ossp.org>
Date: Thu,  7 Feb 2002 14:36:17 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   07-Feb-2002 14:36:17
  Branch: HEAD                             Handle: 2002020713361600

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c

  Log:
    keep the colon

  Summary:
    Revision    Changes     Path
    1.47        +1  -0      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.46 -r1.47 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	7 Feb 2002 12:53:45 -0000	1.46
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	7 Feb 2002 13:36:16 -0000	1.47
  @@ -550,6 +550,7 @@
                       log1(ctx, ERROR, "option --headervalue, header (%s) terminating colon missing", (ov->data.m)[i]);
                       throw(0,0,0);
                   }
  +                cp++;
                   *cp = NUL;
                   log2(ctx, DEBUG, "header[%d] = \"%s\"", i, cpHeader);
                   cp++;

From ossp-cvs-owner@ossp.org  Thu Feb  7 14:38:09 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4049A7656D; Thu,  7 Feb 2002 14:38:09 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_main.c
Message-Id: <20020207133809.4049A7656D@mail.ossp.org>
Date: Thu,  7 Feb 2002 14:38:09 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   07-Feb-2002 14:38:09
  Branch: HEAD                             Handle: 2002020713380800

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_main.c

  Log:
    The '& 1' check is wrong as argz counts the characters not the pairs.  The
    wholly check is not needed at all because while would skip empty pairs anyway.

  Summary:
    Revision    Changes     Path
    1.39        +12 -13     ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.38 -r1.39 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	6 Feb 2002 13:51:38 -0000	1.38
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	7 Feb 2002 13:38:08 -0000	1.39
  @@ -1435,20 +1435,19 @@
       /* Optionally add command line specified Header/Value Pairs
        */
       log0(ctx, TRACE, "adding header/value pairs");
  -    if ((ctx->asHeaderValuePairs >= 1) && ((ctx->asHeaderValuePairs & 1) == 0)) {
  -        cp = NULL;
  -        while ((cp = argz_next(ctx->azHeaderValuePairs, ctx->asHeaderValuePairs, cp)) != NULL) {
  -            var_rc_t var_rc;
  -            char *res_ptr;
  -            if ((var_rc = var_expand(cp, strlen(cp), &res_ptr, NULL,
  -                                     ctx_lookup, ctx, &ctx_lookup_cfg, TRUE)) != VAR_OK) {
  -                log2(ctx, ERROR, "expansion of '%s' failed: %s", cp, var_strerror(var_rc));
  -                continue;
  -            }
  -            log1(ctx, DEBUG, "adding expanded header: \"%s\"", res_ptr);
  -            argz_add(&ctx->msg->azHeaders, &ctx->msg->asHeaders, res_ptr);
  -            free(res_ptr);
  +
  +    cp = NULL;
  +    while ((cp = argz_next(ctx->azHeaderValuePairs, ctx->asHeaderValuePairs, cp)) != NULL) {
  +        var_rc_t var_rc;
  +        char *res_ptr;
  +        if ((var_rc = var_expand(cp, strlen(cp), &res_ptr, NULL,
  +                                 ctx_lookup, ctx, &ctx_lookup_cfg, TRUE)) != VAR_OK) {
  +            log2(ctx, ERROR, "expansion of '%s' failed: %s", cp, var_strerror(var_rc));
  +            continue;
           }
  +        log1(ctx, DEBUG, "adding expanded header: \"%s\"", res_ptr);
  +        argz_add(&ctx->msg->azHeaders, &ctx->msg->asHeaders, res_ptr);
  +        free(res_ptr);
       }
   
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   554 Transaction failed

From ossp-cvs-owner@ossp.org  Thu Feb  7 14:39:39 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 08DAF7655B; Thu,  7 Feb 2002 14:39:38 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp test.sh
Message-Id: <20020207133938.08DAF7655B@mail.ossp.org>
Date: Thu,  7 Feb 2002 14:39:38 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   07-Feb-2002 14:39:38
  Branch: HEAD                             Handle: 2002020713393800

  Modified files:
    ossp-pkg/lmtp2nntp      test.sh

  Log:
    added test suite for --headervalue and --restrictheader

  Summary:
    Revision    Changes     Path
    1.12        +37 -2      ossp-pkg/lmtp2nntp/test.sh
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/test.sh
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 test.sh
  --- ossp-pkg/lmtp2nntp/test.sh	6 Feb 2002 13:51:38 -0000	1.11
  +++ ossp-pkg/lmtp2nntp/test.sh	7 Feb 2002 13:39:38 -0000	1.12
  @@ -16,10 +16,10 @@
   Message-Id: <200108141251.f7ECpmn74812@dev.de.cw.net>
   From: Thomas Lotterer <Thomas.Lotterer@example.com>
   Received: from cw.example.com (cw.example.com [10.1.1.32])
  -    by gateway.example.com (8.9.2/8.9.2/$Revision: 1.11 $) with SMTP id NAA08840
  +    by gateway.example.com (8.9.2/8.9.2/$Revision: 1.12 $) with SMTP id NAA08840
       for <thomas.lotterer@gateway.example.com>; Mon, 2 Apr 2001 13:20:25 +0200 (MET DST)
   Received: from history (history.example.org [195.143.102.41])
  -    by cw.example.com (8.11.0/8.11.0/$Revision: 1.11 $) with ESMTP id f32BKPb12235
  +    by cw.example.com (8.11.0/8.11.0/$Revision: 1.12 $) with ESMTP id f32BKPb12235
       for <thomas.lotterer@example.com>; Mon, 2 Apr 2001 13:20:25 +0200
   Received: from example.org (littlemua.example.org [195.143.103.160])
   	by history (8.8.8/8.8.8) with ESMTP id LAA12678;
  @@ -280,6 +280,41 @@
   fi
   echo "yes"
   
  +echon "checking whether -h option adds header/value pair ... "
  +prolog
  +newmsg
  +./lmtp2nntp <${STDIN} -b - -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} -h "X-Gateway: added it!" ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 --timeoutnntpconnect=1 ${GROUP} >${STDOUT} 2>${STDERR}
  +RC="";
  +if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
  +if [ 1 -eq `egrep <${L2FILE} 'adding.*header: "X-Gateway:"'     | wc -l` ]; then RC="${RC}head "; fi
  +if [ 1 -eq `egrep <${L2FILE} 'adding.*header: "added it!"'      | wc -l` ]; then RC="${RC}val. "; fi
  +if [ 1 -eq `egrep <${L2FILE} 'verbatim.*"X-Gateway: added it!"' | wc -l` ]; then RC="${RC}pair "; fi
  +if [ "${RC}" != "init head val. pair " ]; then
  +    echo "NO (got ${RC})"
  +    echo "STDIN  cat ${STDIN}"
  +    echo "STDOUT cat ${STDOUT}"
  +    echo "STDERR cat ${STDERR}"
  +    echo "LOG    cat ${L2FILE}"
  +    exit 1;
  +fi
  +echo "yes"
  +
  +echon "checking whether -r option rejects headers ... "
  +prolog
  +newmsg
  +./lmtp2nntp <${STDIN} -b - -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} -r'^X-Linefoldingtest:.*begun.$' ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 --timeoutnntpconnect=1 ${GROUP} >${STDOUT} 2>${STDERR}
  +RC="";
  +if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
  +if [ 1 -eq `egrep <${L2FILE} 'restricted header found'          | wc -l` ]; then RC="${RC}rest "; fi
  +if [ "${RC}" != "init rest " ]; then
  +    echo "NO (got ${RC})"
  +    echo "STDIN  cat ${STDIN}"
  +    echo "STDOUT cat ${STDOUT}"
  +    echo "STDERR cat ${STDERR}"
  +    echo "LOG    cat ${L2FILE}"
  +    exit 1;
  +fi
  +echo "yes"
   echo "CHECK COMPLETE AND PASSED"
   #epilog
   exit 0

From ossp-cvs-owner@ossp.org  Thu Feb  7 16:34:41 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6D06B764F8; Thu,  7 Feb 2002 16:34:40 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc_design.ps rc_design.xmi
Message-Id: <20020207153440.6D06B764F8@mail.ossp.org>
Date: Thu,  7 Feb 2002 16:34:40 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   07-Feb-2002 16:34:40
  Branch: HEAD                             Handle: 2002020715343900

  Modified files:
    ossp-pkg/rc             rc_design.ps rc_design.xmi

  Log:
    Clean up the looking design docs.

  Summary:
    Revision    Changes     Path
    1.3         +967 -930   ossp-pkg/rc/rc_design.ps
    1.3         +1998 -1998 ossp-pkg/rc/rc_design.xmi
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc_design.ps
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 rc_design.ps
  --- ossp-pkg/rc/rc_design.ps	4 Feb 2002 22:23:26 -0000	1.2
  +++ ossp-pkg/rc/rc_design.ps	7 Feb 2002 15:34:39 -0000	1.3
  @@ -1,10 +1,10 @@
   %!PS-Adobe-3.0
   %%Pages: (atend)
  -%%BoundingBox: 33 511 565 806
  -%%HiResBoundingBox: 33.611426 511.882544 564.928076 805.165649
  +%%BoundingBox: 33 514 565 802
  +%%HiResBoundingBox: 33.578833 514.306543 564.970020 801.654712
   %...................................
   %%Creator: AFPL Ghostscript 650 (pswrite)
  -%%CreationDate: 2002/02/04 20:37:26
  +%%CreationDate: 2002/02/06 18:40:57
   %%DocumentData: Clean7Bit
   %%LanguageLevel: 2
   %%EndComments
  @@ -61,1474 +61,1511 @@
   %%EndPageSetup
   gsave mark
   Q q
  -320 5102.71 5345.4 2969.66 re
  +320 5127.28 5345.49 2945.66 re
   Y
   255 G
  -3358.73 7773.11 441.996 271.644 re
  +3333.32 7743.63 433.052 266.146 re
   f*
  -4.60413 w
  +4.51096 w
   K
  -3358.73 7773.11 441.996 271.644 re
  +3333.32 7743.63 433.052 266.146 re
   S
   255 G
  -3358.73 7952.67 441.996 92.0825 re
  +3333.32 7919.56 433.052 90.219 re
   f*
   K
  -3358.73 7952.67 441.996 92.0825 re
  +3333.32 7919.56 433.052 90.219 re
   S
  -3551 7985 24 30 /5U
  +3522 7950 24 30 /5U
   $C
  --EQK^f3eRXs0)HUZ/L)9"6%#gs8W,&pe)@'-i~>
  +-EQKY?GHO?s7QB(-'&FZBRDc-^]4?,oto^rK`~>
   ,
  -3579 7984 26 32 /1F
  +3550 7949 26 32 /1F
   $C
  -1_L@A*$RLi6+RBfhO_2[^X36)s8Vi^bticdXgG4,@>1se'JQ0~>
  +1_L@=SIsnT6+o3Kl["'3reN8cs8TiT;uYA@D0D2PYejEje1dN~>
   ,
   255 G
  -3358.73 7860.59 441.996 92.0825 re
  +3333.32 7829.34 433.052 90.219 re
   f*
   K
  -3358.73 7860.59 441.996 92.0825 re
  +3333.32 7829.34 433.052 90.219 re
   S
   255 G
  -3358.73 7768.5 441.996 92.0825 re
  +3333.32 7739.12 433.052 90.219 re
   f*
   K
  -3358.73 7768.5 441.996 92.0825 re
  +3333.32 7739.12 433.052 90.219 re
   S
   255 G
  -4500.55 7658 704.432 382.143 re
  +4524.22 7603.79 690.177 374.41 re
   f*
   K
  -4500.55 7658 704.432 382.143 re
  +4524.22 7603.79 690.177 374.41 re
   S
   255 G
  -4500.55 7966.48 704.432 73.666 re
  +4524.22 7906.03 690.177 72.1753 re
   f*
   K
  -4500.55 7966.48 704.432 73.666 re
  +4524.22 7906.03 690.177 72.1753 re
   S
  -4701 7980 20 20 /5Y
  +4720 7919 20 19 /5Y
   $C
  -$47In";DtTJq=.l@;`p!%N'.miJ.gqE8eS~>
  +"UYqT:kF9+&1Bh@/T/DB%La=2iIcbk_8$~>
   ,
  -4725 7980 5Y ,
  -4749 7979 24 32 /1J
  +4744 7919 5Y ,
  +4768 7918 23 32 /1J
   $C
  -4q\EK*$RRk60SU<>sJ@HKV;rXB>NO1#Sdo(8Q:<<3^<X[HJ7"ZQ&;sX'E~>
  +4q\EGSIsnTJ\3A4e,T3C;AbKfGTIDq6I?B45dda^J,]>A[BRMK.b$/F~>
   ,
  -4777 7980 4 30 /6C
  +4796 7919 3 30 /6C
   $X
  -nF5r:nF5r:nF5r:nF5r:nF5r:nF-DX!!$tWE,Y~>
  +i8EPOi8EPOi8EPOi8EPOi8EPOi8=S8!!(s8i8=~>
   ,
  -4787 7980 17 23 /1N
  +4805 7919 17 22 /1N
   $C
  --EPVps8W-!s8V!VCC#tIj6]5gTE~>
  +-Eo0's8W-!s53\1$nT;Rm6iY$~>
   ,
  -4808 7971 20 32 /6G
  +4825 7910 19 31 /6G
   $C
  -3$ef)M;t7]p@ZGO((bd1-$W1g:;)/Ws7a;%Y,jHgm!B+U~>
  +3%YA1M;t7]J(%o!/17?i<]Ej<f!"cHs537R[]n;=LUDjP~>
   ,
  -4833 7980 4 30 /1R
  +4850 7919 3 30 /1R
   $X
  -nF5r:nF5r:nF5r:nF5r:nF5r:nF5r:nF5r:nF-~>
  +i8EPOi8EPOi8EPOi8EPOi8EPOi8EPOi8EPOi8=~>
   ,
  -4840 7979 21 24 /6K
  +4857 7918 20 23 /6K
   $C
  -4ubjWU/pJ)o^nXGa4DK=eutC#s8-MICbV-3[1"G~>
  +4ubjWU3>c+dr`>#)WW^nq^iog.t5pT(<'I3'E~>
   ,
  -4862 7979 11 29 /1V
  +4878 7918 11 28 /1V
   $X
  -#J^l.+5e1?*WR5]*WR5]*WR5]*WR5]*WR5]*WR5]*WR5]*WR5]s5<q8s54pu*WR5]*WR5]*WQ~>
  +#J^l.&)[ot%KHt=%KHt=%KHt=%KHt=%KHt=%KHt=%KHt=%KQOes5<q8%KHt=%KHt=%KHt=~>
   ,
  -4875 7979 20 24 /6O
  +4892 7918 18 23 /6O
   $C
  -4=hW>d49H-])$a1e,TIHYJ"k_Q*@\He1dN~>
  +4?-*,'=U73s%0u's8VuhlJL11$!=6/'E~>
   ,
  -4900 7980 1N ,
  -4922 7979 21 21 /1Z
  +4915 7919 1N ,
  +4937 7918 20 20 /1Z
   $C
  -P@"QM@,SqW*#LYD_[IM5,mY2-TRqh(&6LJ7-i~>
  +P@"QM@,SqW*#LYD_7'aaJcuE.+JAk0YZO^~>
   ,
  -4946 7979 1Z ,
  +4961 7918 1Z ,
   255 G
  -4500.55 7874.4 704.432 92.0825 re
  +4524.22 7815.81 690.177 90.219 re
   f*
   K
  -4500.55 7874.4 704.432 92.0825 re
  +4524.22 7815.81 690.177 90.219 re
   S
  -4714 7906 1F ,
  -4743 7906 6O ,
  -4768 7907 1N ,
  -4788 7907 11 30 /6S
  +4734 7845 1F ,
  +4763 7845 6O ,
  +4787 7846 1N ,
  +4806 7846 11 30 /6S
   $X
  -*WR5]*WR5]*WR5]*WR5]*WR5]*WR5]*WR5]*WR5]*WR5]*WZ5us5<q8*WR5]*WR5]*rmD@&)[QJ~>
  +%KHt=%KHt=%KHt=%KHt=%KHt=%KHt=%KHt=%KHt=%KHt=s5<q8s54@e%KHt=%KHt=%fd-u#N,^"~>
   ,
  -4802 7907 6C ,
  -4810 7898 6G ,
  -4834 7906 18 23 /2D
  -$C
  -2E4CB:IK.]62.SWs8W-!s8W*~>
  +4820 7846 6C ,
  +4827 7837 6G ,
  +4852 7845 16 22 /2D
  +$X
  ++2C,4J,B"jn/pR!i"+`Vi!80Fi!80Fi!80Fi!80Fi!80Fi!80Fi!80F~>
   ,
  -4858 7907 11 23 /6W
  +4875 7846 10 22 /6W
   $X
  -n,VqXn,VqXn,VqXn,VqXn,VqXn,VqXn,VqXn,W4`p]13ls1nBepYbZ$!Pe~>
  +huM[8huM[8huM[8huM[8huM[8huM[8huM[8n,VqXp]13ln%eD-kJ.28~>
   ,
  -4871 7906 20 24 /2H
  +4887 7845 20 23 /2H
   $C
  -2Fj-#WbRAmKqS9ks51Q3Qa+HP_FS<b*r#\MCaESqTr7~>
  +0Je`A9g'0+"eb^@s51Q38D)n^j..hJhYt#nCfREB5Q~>
   ,
  -4892 7906 1V ,
  -4905 7907 6C ,
  -4914 7906 6O ,
  -4939 7907 1N ,
  +4908 7845 1V ,
  +4922 7846 6C ,
  +4930 7845 6O ,
  +4954 7846 1N ,
   255 G
  -4505.15 7957.27 695.224 13.8123 re
  +4528.73 7897.01 681.155 13.5327 re
   f*
  -4505.15 7957.27 695.224 13.8123 re
  +4528.73 7897.01 681.155 13.5327 re
   S
  -4500.55 7782.32 704.432 92.0825 re
  +4524.22 7725.59 690.177 90.219 re
   f*
   K
  -4500.55 7782.32 704.432 92.0825 re
  +4524.22 7725.59 690.177 90.219 re
   S
  -4521 7825 10 3 /7A
  +4544 7766 10 3 /7A
   $X
   s1nZMs1e~>
   ,
  -4534 7814 18 24 /2L
  +4557 7755 17 23 /2L
   $C
  -3%Q3:d49H-[<g^F$@F*3TW!c*$O`D/GQ-5e`EKY~>
  +3%Q3:d4=/[ea%T^'_"Xc&6U""/1tXdCLO@qe27~>
   ,
  -4552 7808 25 2 /7E
  +4575 7749 25 2 /7E
   $C
   -D4i~>
   ,
  -4581 7815 4 30 /2P
  +4603 7756 4 30 /2P
   $X
   nF5r:nF5r:nF5r:nF5r:nF5r:nF5r:nF5r:nF-~>
   ,
  -4591 7815 1N ,
  -4612 7814 2L ,
  -4632 7814 1V ,
  -4645 7814 2H ,
  -4669 7815 1N ,
  -4690 7814 19 24 /7I
  +4613 7756 1N ,
  +4634 7755 2L ,
  +4653 7755 1V ,
  +4666 7755 2H ,
  +4690 7756 1N ,
  +4711 7755 18 23 /7I
   $C
  -4=hjTM-Ih+f@+NcEW?'EHM=8Mg=o6=>-OY~>
  +3'%P?'=U7dVm"uZSO7o,^1dOblX?W!X]SC~>
   ,
  -4711 7814 6K ,
  -4750 7815 4 22 /2V
  +4731 7755 6K ,
  +4768 7756 4 21 /2V
   $X
  -nF5r:zzz!!)NXnF-~>
  +nF5r:zzz!:]LIn,~>
   ,
  -4770 7814 1F ,
  -4799 7814 6O ,
  -4824 7815 1N ,
  -4844 7815 6S ,
  -4857 7815 6C ,
  -4865 7806 6G ,
  -4889 7814 2D ,
  -4914 7815 6W ,
  -4926 7814 2H ,
  -4947 7814 1V ,
  -4961 7815 6C ,
  -4969 7814 6O ,
  -4994 7815 1N ,
  -255 G
  -4500.55 7653.4 704.432 128.916 re
  -f*
  -K
  -4500.55 7653.4 704.432 128.916 re
  -S
  -4519 7721 23 30 /7O
  -$C
  -0[7?3^&NTZr_5amo8Mf.rqHH*\8:d'g[G%=p]%l~>
  -,
  -4544 7721 1F ,
  -4573 7721 6O ,
  -4598 7722 1N ,
  -4618 7722 6S ,
  -4632 7722 6C ,
  -4640 7713 6G ,
  -4664 7721 2D ,
  -4688 7722 6W ,
  -4701 7721 2H ,
  -4722 7721 1V ,
  -4735 7722 6C ,
  -4743 7721 6O ,
  -4768 7722 1N ,
  -4791 7713 9 39 /2Z
  +4788 7755 1F ,
  +4817 7755 6O ,
  +4841 7756 1N ,
  +4860 7756 6S ,
  +4875 7756 6C ,
  +4882 7747 6G ,
  +4906 7755 2D ,
  +4929 7756 6W ,
  +4941 7755 2H ,
  +4962 7755 1V ,
  +4976 7756 6C ,
  +4984 7755 6O ,
  +5008 7756 1N ,
  +255 G
  +4524.22 7599.28 690.177 126.307 re
  +f*
  +K
  +4524.22 7599.28 690.177 126.307 re
  +S
  +4542 7665 22 30 /7O
  +$C
  +0[7B,^]/Z\hG$@Mo8MH&hu<AnL6"P=HiMt&rU7,C~>
  +,
  +4567 7665 1F ,
  +4596 7665 6O ,
  +4620 7666 1N ,
  +4639 7666 6S ,
  +4654 7666 6C ,
  +4661 7657 6G ,
  +4685 7665 2D ,
  +4708 7666 6W ,
  +4720 7665 2H ,
  +4741 7665 1V ,
  +4755 7666 6C ,
  +4763 7665 6O ,
  +4787 7666 1N ,
  +4809 7657 9 39 /2Z
   $X
  -!It7P#6556%KIOM)ur)$49.>@GQ;sgGQ;sgp]0d`n,VqXn,VqXn,VqXn,VqXp]1'hGQ;sgGQ9]'
  -49.JD)uq#[%KHt=#64i+"+U~>
  +!<<4P#6556%KIIK)uqqu2uko<GQ;[_DufA-n,VAHhuM[8huM[8huM[8huM[8n,VqXDuahWDu_it
  +2uko<)uprY%KHt="onl."+U~>
   ,
  -4803 7713 10 39 /0D
  +4821 7657 9 39 /0D
   $X
  -?iY-G2uko<)uprY*WQZM%fd+?#65!Z#Cm&0#J^GW"2G#S"2G#S"2G#S"2G#S#J^S[#Cm&0#Cm$Z
  -%fd+?%KIOM)uqqu2ummt?iU~>
  +?iY-G0E='4(]YNU)upHK%KI">#64u/#65!Z#Clo,"+UK("+UK("+UK("+UK(#Cm&0#64u/#6587
  +%KHt=)uprY)uqqu0E?%l?iU~>
   ,
  -4521 7666 20 21 /3D
  +4544 7611 20 20 /3D
   $C
  -1r'(jjO?#3V>pSq~>
  +1V`tijO?#3ScA`b~>
   ,
  -4544 7658 6G ,
  -4567 7666 6K ,
  -4589 7666 1V ,
  -4605 7667 2P ,
  -4615 7667 1N ,
  -4636 7666 2L ,
  -4656 7666 1V ,
  -4670 7666 2H ,
  -4694 7667 1N ,
  -4715 7666 7I ,
  -4735 7666 6K ,
  -4760 7658 2Z ,
  -4772 7658 0D ,
  +4567 7603 6G ,
  +4590 7611 6K ,
  +4611 7611 1V ,
  +4626 7612 2P ,
  +4637 7612 1N ,
  +4657 7611 2L ,
  +4677 7611 1V ,
  +4690 7611 2H ,
  +4713 7612 1N ,
  +4735 7611 7I ,
  +4754 7611 6K ,
  +4779 7603 2Z ,
  +4790 7603 0D ,
   255 G
  -4053.95 6746.39 441.996 547.891 re
  +4086.65 6647.47 433.052 536.804 re
   f*
   K
  -4053.95 6746.39 441.996 547.891 re
  +4086.65 6647.47 433.052 536.804 re
   S
   255 G
  -4053.95 7220.61 441.996 73.666 re
  +4086.65 7112.1 433.052 72.1753 re
   f*
   K
  -4053.95 7220.61 441.996 73.666 re
  +4086.65 7112.1 433.052 72.1753 re
   S
  -4148 7234 5Y ,
  -4172 7234 5Y ,
  -4198 7234 2P ,
  -4206 7233 1V ,
  -4218 7233 6K ,
  -4244 7234 6W ,
  -4256 7233 2H ,
  -4277 7233 1V ,
  -4290 7233 6O ,
  -4315 7234 6W ,
  -4328 7233 1Z ,
  -4352 7233 1Z ,
  +4179 7125 5Y ,
  +4203 7125 5Y ,
  +4228 7125 2P ,
  +4236 7124 1V ,
  +4248 7124 6K ,
  +4272 7125 6W ,
  +4285 7124 2H ,
  +4306 7124 1V ,
  +4319 7124 6O ,
  +4342 7125 6W ,
  +4355 7124 1Z ,
  +4379 7124 1Z ,
   255 G
  -4053.95 7128.53 441.996 92.0825 re
  +4086.65 7021.88 433.052 90.219 re
   f*
   K
  -4053.95 7128.53 441.996 92.0825 re
  +4086.65 7021.88 433.052 90.219 re
   S
  -4173 7161 20 30 /0H
  +4203 7052 20 30 /0H
   $C
   -EmILs8W'`L]1Rds8W'c6*Ge~>
   ,
  -4196 7161 6C ,
  -4207 7161 1R ,
  -4214 7160 6K ,
  -4238 7160 1F ,
  -4267 7160 6O ,
  -4292 7161 1N ,
  -4312 7161 6S ,
  -4325 7161 6C ,
  -4334 7152 6G ,
  +4227 7052 6C ,
  +4236 7052 1R ,
  +4243 7051 6K ,
  +4266 7051 29 32 /3H
  +$C
  +-P?tM:5JGe5huS!-M6uE4`BTbs8VJ7l[N,]FLJUr<Z!,lTnNn'~>
  +,
  +4298 7043 19 31 /0L
  +$C
  +-Fa$Tq6Jrae&8b@6+oIOs/5ns[JmVH>VMIP`HJb"5Q~>
  +,
  +4319 7051 1V ,
  +4333 7052 6C ,
  +4341 7051 6O ,
  +4365 7052 1N ,
   255 G
  -4058.55 7211.4 432.788 13.8123 re
  +4091.16 7103.08 424.03 13.5327 re
   f*
  -4058.55 7211.4 432.788 13.8123 re
  +4091.16 7103.08 424.03 13.5327 re
   S
  -4053.95 7036.45 441.996 92.0825 re
  +4086.65 6931.66 433.052 90.219 re
   f*
   K
  -4053.95 7036.45 441.996 92.0825 re
  +4086.65 6931.66 433.052 90.219 re
   S
   255 G
  -4053.95 6741.78 441.996 294.664 re
  +4086.65 6642.96 433.052 288.701 re
   f*
   K
  -4053.95 6741.78 441.996 294.664 re
  +4086.65 6642.96 433.052 288.701 re
   S
  -4074 6976 3D ,
  -4099 6976 1J ,
  -4124 6976 1V ,
  -4138 6976 2H ,
  -4162 6977 6W ,
  -4173 6976 1V ,
  -4187 6968 2Z ,
  -4199 6968 0D ,
  -4074 6920 3D ,
  -4100 6921 24 30 /3H
  +4107 6871 3D ,
  +4130 6871 1J ,
  +4155 6871 1V ,
  +4169 6871 2H ,
  +4192 6872 6W ,
  +4203 6871 1V ,
  +4217 6863 2Z ,
  +4229 6863 0D ,
  +4107 6817 3D ,
  +4131 6818 23 30 /3L
   $C
  --EQKYrjr)e+9%V1f;7g+l$qrD?i"*D?C1Rk?e8Y8~>
  +-F'Q9YNrACI_M0#YGM8ql$qrD?i")qrg+AuIpIL~>
   ,
  -4127 6920 6K ,
  -4151 6921 19 22 /0L
  +4159 6817 6K ,
  +4181 6818 18 21 /0P
   $C
  --ENcmqGu%RoW=s.Z!+l@mY`/ZqfJEpp??[gJ,~>
  +-ENcHQgLVd0AB+<?WOj$H"6)E-L!Jc:"!h~>
   ,
  -4170 6920 1V ,
  -4185 6912 2Z ,
  -4197 6912 0D ,
  -4074 6865 3D ,
  -4101 6866 2P ,
  -4109 6865 2L ,
  -4133 6866 22 30 /3L
  +4201 6817 1V ,
  +4215 6809 2Z ,
  +4226 6809 0D ,
  +4107 6763 3D ,
  +4132 6764 2P ,
  +4141 6763 2L ,
  +4164 6764 21 30 /3P
   $C
  --D98XVuQesr^0'Q/O0:8s,bkthu~>
  +-D@d-fDkmNr.]e&QXBdms,bSlhu~>
   ,
  -4159 6866 1N ,
  -4180 6865 20 31 /0P
  +4190 6764 1N ,
  +4211 6763 19 31 /0T
   $C
  -4?-$H:IM:'K<J%be,TIHYJ4i0@9AnD=CG_>p]~>
  +4?-"L4VG#mK@`l5e,TI%qt@J"2.C"]@B=tY^]~>
   ,
  -4206 6857 2Z ,
  -4217 6857 0D ,
  -4074 6810 3D ,
  -4099 6810 1F ,
  -4128 6810 2D ,
  -4153 6811 6W ,
  -4166 6811 6W ,
  -4178 6810 6K ,
  -4203 6811 1N ,
  -4223 6810 1V ,
  -4238 6802 2Z ,
  -4250 6802 0D ,
  -4074 6755 3D ,
  -4101 6756 22 30 /3P
  +4235 6755 2Z ,
  +4247 6755 0D ,
  +4107 6709 3D ,
  +4130 6709 1F ,
  +4161 6709 2D ,
  +4183 6710 6W ,
  +4197 6710 6W ,
  +4208 6709 6K ,
  +4233 6710 1N ,
  +4252 6709 1V ,
  +4267 6701 2Z ,
  +4278 6701 0D ,
  +4107 6654 3D ,
  +4132 6655 21 30 /3T
   $C
  --EmILs8VWuA`;aC_gT;Ws'O45EE^50~>
  +-EmILs8VWu?10?5LAuc'fCZZ6[=n~>
   ,
  -4126 6755 2H ,
  -4150 6756 6W ,
  -4162 6755 2L ,
  -4183 6755 6K ,
  -4208 6747 2Z ,
  -4220 6747 0D ,
  +4157 6654 2H ,
  +4181 6655 6W ,
  +4193 6654 2L ,
  +4213 6654 6K ,
  +4237 6646 2Z ,
  +4249 6646 0D ,
   255 G
  -4611.05 6948.97 441.996 345.31 re
  +4632.48 6845.95 433.052 338.322 re
   f*
   K
  -4611.05 6948.97 441.996 345.31 re
  +4632.48 6845.95 433.052 338.322 re
   S
   255 G
  -4611.05 7220.61 441.996 73.666 re
  +4632.48 7112.1 433.052 72.1753 re
   f*
   K
  -4611.05 7220.61 441.996 73.666 re
  +4632.48 7112.1 433.052 72.1753 re
   S
  -4705 7234 5Y ,
  -4729 7234 5Y ,
  -4756 7234 2P ,
  -4763 7233 1V ,
  -4776 7233 6K ,
  -4801 7234 6W ,
  -4813 7233 2H ,
  -4834 7233 1V ,
  -4847 7233 6O ,
  -4872 7234 6W ,
  -4885 7233 1Z ,
  -4909 7233 1Z ,
  +4725 7125 5Y ,
  +4748 7125 5Y ,
  +4774 7125 2P ,
  +4781 7124 1V ,
  +4794 7124 6K ,
  +4818 7125 6W ,
  +4831 7124 2H ,
  +4851 7124 1V ,
  +4865 7124 6O ,
  +4888 7125 6W ,
  +4901 7124 1Z ,
  +4924 7124 1Z ,
   255 G
  -4611.05 7128.53 441.996 92.0825 re
  +4632.48 7021.88 433.052 90.219 re
   f*
   K
  -4611.05 7128.53 441.996 92.0825 re
  +4632.48 7021.88 433.052 90.219 re
   S
  -4633 7161 3L ,
  -4660 7161 1N ,
  -4680 7161 20 22 /0T
  +4655 7052 3P ,
  +4681 7052 1N ,
  +4700 7052 20 21 /0X
   $C
  -1N`Ypo#K1np?@(odeip<p?V&3Xo~>
  +1NhN&kdUHf-hmI3s7DfZ>M&_[~>
   ,
  -4703 7161 6C ,
  -4713 7161 6W ,
  -4725 7160 6O ,
  -4750 7161 1N ,
  -4773 7161 29 23 /3T
  +4723 7052 6C ,
  +4732 7052 6W ,
  +4745 7051 6O ,
  +4769 7052 1N ,
  +4791 7052 28 22 /3X
   $C
  --EPI\5QCc`s8W-!s8W,un+F'b5`"u5+ui%UdnsO-TE~>
  +-F'?Ss8W-!s8W-!s8VhCXf'k]/.ijN*%u$)[+#~>
   ,
  -4805 7160 6K ,
  -4830 7161 1N ,
  -4851 7160 1V ,
  -4864 7160 29 32 /0X
  -$C
  --P?\G%Z'Z%+Pe0r-e!4O5O3I\s8Vf,p&2#YCMbS1.g?Wk<YQBI~>
  -,
  -4896 7152 20 32 /3X
  -$C
  --EmILr4r.>VhqP75As?dl2Ue_fD=4g/Z"amq[8.O~>
  -,
  -4917 7160 1V ,
  -4931 7161 6C ,
  -4939 7160 6O ,
  -4964 7161 1N ,
  +4823 7051 6K ,
  +4848 7052 1N ,
  +4867 7051 1V ,
  +4879 7051 3H ,
  +4912 7043 0L ,
  +4933 7051 1V ,
  +4947 7052 6C ,
  +4955 7051 6O ,
  +4978 7052 1N ,
   255 G
  -4615.65 7211.4 432.788 13.8123 re
  +4636.99 7103.08 424.03 13.5327 re
   f*
  -4615.65 7211.4 432.788 13.8123 re
  +4636.99 7103.08 424.03 13.5327 re
   S
  -4611.05 7036.45 441.996 92.0825 re
  +4632.48 6931.66 433.052 90.219 re
   f*
   K
  -4611.05 7036.45 441.996 92.0825 re
  +4632.48 6931.66 433.052 90.219 re
   S
   255 G
  -4611.05 6944.36 441.996 92.0825 re
  +4632.48 6841.44 433.052 90.219 re
   f*
   K
  -4611.05 6944.36 441.996 92.0825 re
  +4632.48 6841.44 433.052 90.219 re
   S
   255 G
  -5163.55 6948.97 483.434 345.31 re
  +5173.79 6845.95 473.651 338.322 re
   f*
   K
  -5163.55 6948.97 483.434 345.31 re
  +5173.79 6845.95 473.651 338.322 re
   S
   255 G
  -5163.55 7220.61 483.434 73.666 re
  +5173.79 7112.1 473.651 72.1753 re
   f*
   K
  -5163.55 7220.61 483.434 73.666 re
  +5173.79 7112.1 473.651 72.1753 re
   S
  -5276 7234 5Y ,
  -5300 7234 5Y ,
  -5326 7234 2P ,
  -5334 7233 1V ,
  -5346 7233 6K ,
  -5372 7234 6W ,
  -5384 7233 2H ,
  -5405 7233 1V ,
  -5418 7233 6O ,
  -5443 7234 6W ,
  -5456 7233 1Z ,
  -5480 7233 1Z ,
  +5284 7125 5Y ,
  +5308 7125 5Y ,
  +5333 7125 2P ,
  +5341 7124 1V ,
  +5353 7124 6K ,
  +5378 7125 6W ,
  +5390 7124 2H ,
  +5411 7124 1V ,
  +5424 7124 6O ,
  +5448 7125 6W ,
  +5460 7124 1Z ,
  +5484 7124 1Z ,
   255 G
  -5163.55 7128.53 483.434 92.0825 re
  +5173.79 7021.88 473.651 90.219 re
   f*
   K
  -5163.55 7128.53 483.434 92.0825 re
  +5173.79 7021.88 473.651 90.219 re
   S
  -5184 7160 1F ,
  -5213 7160 6O ,
  -5238 7161 3T ,
  -5272 7161 3T ,
  -5306 7160 2H ,
  -5330 7161 1N ,
  -5351 7160 0P ,
  -5376 7161 19 30 /1B
  +5194 7051 1F ,
  +5223 7051 6O ,
  +5247 7052 3X ,
  +5281 7052 3X ,
  +5313 7051 2H ,
  +5337 7052 1N ,
  +5358 7051 0T ,
  +5382 7052 19 30 /1B
   $C
   -D@'nli7"bs8W-!s8Vi~>
   ,
  -5398 7161 6C ,
  -5408 7161 1N ,
  -5429 7160 6K ,
  -5453 7160 0X ,
  -5486 7152 3X ,
  -5507 7160 1V ,
  -5520 7161 6C ,
  -5528 7160 6O ,
  -5553 7161 1N ,
  +5405 7052 6C ,
  +5414 7052 1N ,
  +5434 7051 6K ,
  +5457 7051 3H ,
  +5489 7043 0L ,
  +5510 7051 1V ,
  +5524 7052 6C ,
  +5532 7051 6O ,
  +5556 7052 1N ,
  +255 G
  +5178.3 7103.08 464.629 13.5327 re
  +f*
  +5178.3 7103.08 464.629 13.5327 re
  +S
  +5173.79 6931.66 473.651 90.219 re
  +f*
  +K
  +5173.79 6931.66 473.651 90.219 re
  +S
   255 G
  -5168.15 7211.4 474.225 13.8123 re
  +5173.79 6841.44 473.651 90.219 re
   f*
  -5168.15 7211.4 474.225 13.8123 re
  +K
  +5173.79 6841.44 473.651 90.219 re
   S
  -5163.55 7036.45 483.434 92.0825 re
  +255 G
  +4632.48 5853.54 433.052 392.453 re
   f*
   K
  -5163.55 7036.45 483.434 92.0825 re
  +4632.48 5853.54 433.052 392.453 re
   S
   255 G
  -5163.55 6944.36 483.434 92.0825 re
  +4632.48 6155.78 433.052 90.219 re
   f*
   K
  -5163.55 6944.36 483.434 92.0825 re
  +4632.48 6155.78 433.052 90.219 re
   S
  +4782 6185 3H ,
  +4815 6177 0L ,
  +4835 6185 1V ,
  +4850 6186 6C ,
  +4858 6185 6O ,
  +4881 6186 1N ,
   255 G
  -3358.73 7013.43 441.996 345.31 re
  +4632.48 6029.47 433.052 126.307 re
   f*
   K
  -3358.73 7013.43 441.996 345.31 re
  +4632.48 6029.47 433.052 126.307 re
   S
  +4653 6106 7A ,
  +4667 6096 1N ,
  +4689 6095 1F ,
  +4718 6095 6O ,
  +4741 6095 2D ,
  +4764 6096 1N ,
  +4784 6095 1V ,
  +4811 6096 2V ,
  +4832 6096 6C ,
  +4841 6096 1N ,
  +4860 6095 1V ,
  +4653 6052 7A ,
  +4665 6060 13 12 /4B
  +$X
  +(dL(=*T.ID#Co%sJ,"M<7h>n*#64u/~>
  +,
  +4682 6033 0L ,
  +4702 6042 0X ,
  +4727 6042 3P ,
  +4753 6042 1R ,
  +4760 6041 6K ,
  +4784 6042 3X ,
  +4816 6041 6K ,
  +4841 6042 1N ,
  +4860 6041 1V ,
  +4888 6042 2V ,
  +4905 6042 0X ,
  +4928 6041 6O ,
  +4951 6042 6C ,
  +4958 6041 0T ,
   255 G
  -3358.73 7285.07 441.996 73.666 re
  +4632.48 5849.03 433.052 180.438 re
   f*
   K
  -3358.73 7285.07 441.996 73.666 re
  +4632.48 5849.03 433.052 180.438 re
   S
  -3444 7299 5Y ,
  -3468 7299 5Y ,
  -3491 7299 26 30 /4B
  +4653 5969 3D ,
  +4676 5969 2H ,
  +4698 5969 0T ,
  +4720 5969 0T ,
  +4746 5970 3P ,
  +4772 5970 1R ,
  +4779 5969 6K ,
  +4804 5970 3X ,
  +4835 5969 6K ,
  +4860 5970 1N ,
  +4880 5969 1V ,
  +4894 5961 2Z ,
  +4905 5961 0D ,
  +4653 5915 3D ,
  +4675 5915 0T ,
  +4698 5915 6K ,
  +4722 5916 1R ,
  +4732 5916 3P ,
  +4758 5916 1R ,
  +4765 5915 6K ,
  +4790 5916 3X ,
  +4822 5915 6K ,
  +4846 5916 1N ,
  +4866 5915 1V ,
  +4880 5907 2Z ,
  +4892 5907 0D ,
  +4653 5861 3D ,
  +4675 5853 6G ,
  +4698 5861 6K ,
  +4719 5861 1V ,
  +4733 5861 1F ,
  +4762 5861 6O ,
  +4786 5861 2D ,
  +4808 5862 1N ,
  +4828 5861 1V ,
  +4842 5853 2Z ,
  +4853 5853 0D ,
  +255 G
  +3333.32 7080.52 433.052 338.322 re
  +f*
  +K
  +3333.32 7080.52 433.052 338.322 re
  +S
  +255 G
  +3333.32 7346.67 433.052 72.1753 re
  +f*
  +K
  +3333.32 7346.67 433.052 72.1753 re
  +S
  +3417 7359 5Y ,
  +3440 7359 5Y ,
  +3463 7359 26 30 /1F
   $C
  --EPdJF`lSflb<%Qg<6C:J$/):>BTqRlhKjq?bc~>
  +-EPdHD/We8hS3oI?MS\M[_B6,I;c^ng>DR5f=mm~>
   ,
  -3519 7298 0P ,
  -3543 7298 2H ,
  -3566 7290 3X ,
  -3587 7298 1V ,
  -3599 7298 6K ,
  -3624 7299 6W ,
  -3637 7298 1Z ,
  -3661 7298 1Z ,
  +3490 7358 0T ,
  +3514 7358 2H ,
  +3536 7350 0L ,
  +3557 7358 1V ,
  +3569 7358 6K ,
  +3594 7359 6W ,
  +3606 7358 1Z ,
  +3630 7358 1Z ,
   255 G
  -3358.73 7192.99 441.996 92.0825 re
  +3333.32 7256.45 433.052 90.219 re
   f*
   K
  -3358.73 7192.99 441.996 92.0825 re
  +3333.32 7256.45 433.052 90.219 re
   S
  -3509 7225 1B ,
  -3530 7224 6O ,
  -3553 7216 6G ,
  -3576 7216 6G ,
  -3599 7224 6K ,
  -3624 7225 6W ,
  +3481 7287 1B ,
  +3502 7286 6O ,
  +3524 7278 6G ,
  +3546 7278 6G ,
  +3569 7286 6K ,
  +3594 7287 6W ,
   255 G
  -3363.33 7275.86 432.788 13.8123 re
  +3337.83 7337.65 424.03 13.5327 re
   f*
  -3363.33 7275.86 432.788 13.8123 re
  +3337.83 7337.65 424.03 13.5327 re
   S
  -3358.73 7100.9 441.996 92.0825 re
  +3333.32 7166.23 433.052 90.219 re
   f*
   K
  -3358.73 7100.9 441.996 92.0825 re
  +3333.32 7166.23 433.052 90.219 re
   S
   255 G
  -3358.73 7008.82 441.996 92.0825 re
  +3333.32 7076.01 433.052 90.219 re
   f*
   K
  -3358.73 7008.82 441.996 92.0825 re
  +3333.32 7076.01 433.052 90.219 re
   S
   255 G
  -2106.4 7773.11 441.996 271.644 re
  +2070.25 7675.97 433.052 338.322 re
   f*
   K
  -2106.4 7773.11 441.996 271.644 re
  +2070.25 7675.97 433.052 338.322 re
   S
   255 G
  -2106.4 7952.67 441.996 92.0825 re
  +2070.25 7942.12 433.052 72.1753 re
   f*
   K
  -2106.4 7952.67 441.996 92.0825 re
  +2070.25 7942.12 433.052 72.1753 re
   S
  -2226 7985 3P ,
  -2252 7985 6W ,
  -2264 7984 6O ,
  -2287 7984 7I ,
  -2308 7984 6K ,
  -2331 7984 2L ,
  -2351 7984 2L ,
  -2372 7984 6O ,
  -2397 7985 6W ,
  +2126 7955 5Y ,
  +2150 7955 5Y ,
  +2176 7955 2P ,
  +2186 7955 1N ,
  +2206 7954 1V ,
  +2218 7954 6K ,
  +2243 7955 6W ,
  +2255 7946 0L ,
  +2279 7955 6W ,
  +2290 7954 6K ,
  +2312 7954 1V ,
  +2324 7954 6K ,
  +2349 7955 6W ,
  +2361 7954 1Z ,
  +2385 7954 1Z ,
   255 G
  -2106.4 7860.59 441.996 92.0825 re
  +2070.25 7851.9 433.052 90.219 re
   f*
   K
  -2106.4 7860.59 441.996 92.0825 re
  +2070.25 7851.9 433.052 90.219 re
   S
  +2187 7882 3T ,
  +2213 7882 6W ,
  +2226 7881 6O ,
  +2248 7881 7I ,
  +2267 7881 6K ,
  +2290 7881 2L ,
  +2310 7881 2L ,
  +2332 7881 6O ,
  +2355 7882 6W ,
   255 G
  -2106.4 7768.5 441.996 92.0825 re
  +2074.76 7933.09 424.03 13.5327 re
  +f*
  +2074.76 7933.09 424.03 13.5327 re
  +S
  +2070.25 7761.68 433.052 90.219 re
  +f*
  +K
  +2070.25 7761.68 433.052 90.219 re
  +S
  +255 G
  +2070.25 7671.46 433.052 90.219 re
   f*
   K
  -2106.4 7768.5 441.996 92.0825 re
  +2070.25 7671.46 433.052 90.219 re
   S
   255 G
  -1553.91 7114.72 460.413 271.644 re
  +1528.94 7134.65 451.096 266.146 re
   f*
   K
  -1553.91 7114.72 460.413 271.644 re
  +1528.94 7134.65 451.096 266.146 re
   S
   255 G
  -1553.91 7294.28 460.413 92.0825 re
  +1528.94 7310.58 451.096 90.219 re
   f*
   K
  -1553.91 7294.28 460.413 92.0825 re
  +1528.94 7310.58 451.096 90.219 re
   S
  -1726 7326 1J ,
  -1753 7326 7I ,
  -1776 7327 6W ,
  -1788 7327 6C ,
  -1798 7318 3X ,
  -1819 7326 1V ,
  +1698 7340 1J ,
  +1725 7340 7I ,
  +1746 7341 6W ,
  +1760 7341 6C ,
  +1768 7332 0L ,
  +1788 7340 1V ,
   255 G
  -1553.91 7202.19 460.413 92.0825 re
  +1528.94 7220.36 451.096 90.219 re
   f*
   K
  -1553.91 7202.19 460.413 92.0825 re
  +1528.94 7220.36 451.096 90.219 re
   S
  -1574 7244 7A ,
  -1587 7233 6K ,
  -1612 7234 1B ,
  -1634 7233 2H ,
  -1658 7234 1N ,
  -1679 7225 6G ,
  -1718 7234 2V ,
  -1737 7233 6K ,
  -1762 7234 1N ,
  -1784 7233 2D ,
  -1808 7234 3T ,
  -1853 7239 20 10 /1F
  +1549 7261 7A ,
  +1562 7250 6K ,
  +1586 7251 1B ,
  +1608 7250 2H ,
  +1631 7251 1N ,
  +1652 7242 6G ,
  +1690 7251 2V ,
  +1708 7250 6K ,
  +1733 7251 1N ,
  +1755 7250 2D ,
  +1778 7251 3X ,
  +1822 7255 20 10 /4F
   $C
   -D@3UJDZPedGP~>
   ,
  -1889 7233 19 30 /4F
  +1857 7250 19 30 /1J
   $C
  -4?-*-:)sHVXm,jiqLAPFs8TM+YO-71@;JrB@6a~>
  +4?-*,'=XXj0=Uf8e,TIJs8B-&s0Sr=BiqE4_LM~>
   ,
   255 G
  -1553.91 7110.11 460.413 92.0825 re
  +1528.94 7130.14 451.096 90.219 re
   f*
   K
  -1553.91 7110.11 460.413 92.0825 re
  +1528.94 7130.14 451.096 90.219 re
   S
   255 G
  -2106.4 7110.11 441.996 271.644 re
  +2070.25 7139.17 433.052 266.146 re
   f*
   K
  -2106.4 7110.11 441.996 271.644 re
  +2070.25 7139.17 433.052 266.146 re
   S
   255 G
  -2106.4 7289.67 441.996 92.0825 re
  +2070.25 7315.09 433.052 90.219 re
   f*
   K
  -2106.4 7289.67 441.996 92.0825 re
  +2070.25 7315.09 433.052 90.219 re
   S
  -2262 7322 5U ,
  -2290 7321 26 32 /5W
  +2223 7346 5U ,
  +2250 7345 26 32 /1F
   $C
  -1_L@A*$RLi6+RBfhO_2[^X36)s8Vi^bticdXgG4,@>1se'JQ0~>
  +1_L@=SIsnT6+o3Kl["'3reN8cs8TiT;uYA@D0D2PYejEje1dN~>
   ,
  -2322 7322 0H ,
  -2345 7322 6C ,
  -2356 7322 1R ,
  -2363 7321 6K ,
  +2282 7346 0H ,
  +2306 7346 6C ,
  +2315 7346 1R ,
  +2322 7345 6K ,
   255 G
  -2106.4 7197.59 441.996 92.0825 re
  +2070.25 7224.87 433.052 90.219 re
   f*
   K
  -2106.4 7197.59 441.996 92.0825 re
  +2070.25 7224.87 433.052 90.219 re
   S
   255 G
  -2106.4 7105.51 441.996 92.0825 re
  +2070.25 7134.65 433.052 90.219 re
   f*
   K
  -2106.4 7105.51 441.996 92.0825 re
  +2070.25 7134.65 433.052 90.219 re
   S
   255 G
  -2658.9 7110.11 441.996 271.644 re
  +2611.57 7139.17 433.052 266.146 re
   f*
   K
  -2658.9 7110.11 441.996 271.644 re
  +2611.57 7139.17 433.052 266.146 re
   S
   255 G
  -2658.9 7289.67 441.996 92.0825 re
  +2611.57 7315.09 433.052 90.219 re
   f*
   K
  -2658.9 7289.67 441.996 92.0825 re
  +2611.57 7315.09 433.052 90.219 re
   S
  -2796 7322 0H ,
  -2820 7321 2D ,
  -2844 7322 1N ,
  -2865 7321 7I ,
  -2889 7322 0H ,
  -2912 7322 6C ,
  -2922 7322 1R ,
  -2929 7321 6K ,
  +2746 7346 0H ,
  +2770 7345 2D ,
  +2793 7346 1N ,
  +2814 7345 7I ,
  +2837 7346 0H ,
  +2860 7346 6C ,
  +2869 7346 1R ,
  +2876 7345 6K ,
   255 G
  -2658.9 7197.59 441.996 92.0825 re
  +2611.57 7224.87 433.052 90.219 re
   f*
   K
  -2658.9 7197.59 441.996 92.0825 re
  +2611.57 7224.87 433.052 90.219 re
   S
   255 G
  -2658.9 7105.51 441.996 92.0825 re
  +2611.57 7134.65 433.052 90.219 re
   f*
   K
  -2658.9 7105.51 441.996 92.0825 re
  +2611.57 7134.65 433.052 90.219 re
   S
   255 G
  -2401.07 6410.28 441.996 271.644 re
  +2358.95 6480.57 433.052 266.146 re
   f*
   K
  -2401.07 6410.28 441.996 271.644 re
  +2358.95 6480.57 433.052 266.146 re
   S
   255 G
  -2401.07 6589.85 441.996 92.0825 re
  +2358.95 6656.49 433.052 90.219 re
   f*
   K
  -2401.07 6589.85 441.996 92.0825 re
  +2358.95 6656.49 433.052 90.219 re
   S
  -2589 6622 27 30 /4K
  +2542 6687 27 30 /1O
   $C
  --EmCFs1A=*A-hXL0qJ@#s7m+V^OQ~>
  +,JX6Hs5!_N%/BiRA`*O"s,bSj\,~>
   ,
  -2614 6622 10 30 /1O
  +2566 6687 11 30 /4O
   $X
  -n,VqXn,VqXn,R\5GQ;sgGQ9]'49.JD49.JD)uq#[*WR5]*WQ]N%fd(>zz#Cm&0"+UKh~>
  +Dub+_GQ;sgGQ9]'49.JD49.JD*WR5]*WR5]%KI">%fd+?%fch7#Cm$Zzz"2G#S"2FrQ~>
   ,
  -2623 6622 10 30 /4O
  +2576 6687 10 30 /1S
   $X
  -n,VqXn,VqXDub+_GQ;sgGQ9i+49.JD49-?$*WR5]*WR5]%KI">%fd+?%fcib#Cm&0#Clo,"2G#S~>
  +huN6Hn,VqXDub+_GQ;sgGQ9]'49.JD49.JD)uq#[*WR5]*WQZM%fd+?%fd+?#Cm&0#Cm&0"+UKh~>
   ,
  -2632 6621 21 24 /1S
  +2585 6686 21 23 /4S
   $C
  -3%YA1M;+\UFaZ4+O806>YKJ-ImHq%+L).`q:r7_~>
  +3'%N\Grp*ZHFKdMEVU%GpWF`:rU-fS0U7O'$n)~>
   ,
   255 G
  -2401.07 6497.76 441.996 92.0825 re
  +2358.95 6566.27 433.052 90.219 re
   f*
   K
  -2401.07 6497.76 441.996 92.0825 re
  +2358.95 6566.27 433.052 90.219 re
   S
  -2421 6540 7A ,
  -2434 6548 13 12 /4T
  -$X
  -&3q(?4R`ls&&8^kJ,"NgF#X7%#64u/~>
  -,
  -2450 6529 2L ,
  -2471 6530 18 22 /1X
  +2379 6607 7A ,
  +2392 6615 4B ,
  +2407 6596 2L ,
  +2428 6597 18 21 /1X
   $C
  --D3l7_n1-%Dg(O)h7_RV\JuIU~>
  +-D3l7_n4[4DV`'Fh7Ik!,D,s2~>
   ,
  -2494 6530 3H ,
  -2523 6529 2H ,
  -2547 6530 3T ,
  -2579 6529 6K ,
  -2618 6530 2V ,
  -2637 6529 7I ,
  -2660 6530 17 30 /4X
  +2450 6597 3L ,
  +2478 6596 2H ,
  +2502 6597 3X ,
  +2534 6596 6K ,
  +2571 6597 2V ,
  +2591 6596 7I ,
  +2612 6597 17 30 /4X
   $C
  --EPVps8W-!s8V!VCCMi"a4fl45QCW~>
  +-Eo0's8W-!s53\,_c_a0g>T2!s8RT~>
   ,
  -2682 6529 2H ,
  -2706 6530 6W ,
  +2634 6596 2H ,
  +2657 6597 6W ,
   255 G
  -2401.07 6405.68 441.996 92.0825 re
  +2358.95 6476.05 433.052 90.219 re
   f*
   K
  -2401.07 6405.68 441.996 92.0825 re
  +2358.95 6476.05 433.052 90.219 re
   S
  -2421 6437 3D ,
  -2445 6429 6G ,
  -2468 6437 6K ,
  -2490 6437 1V ,
  -2504 6438 3H ,
  -2533 6437 2H ,
  -2557 6438 3T ,
  -2590 6437 6K ,
  -2615 6429 2Z ,
  -2627 6429 0D ,
  +2379 6506 3D ,
  +2402 6498 6G ,
  +2424 6506 6K ,
  +2446 6506 1V ,
  +2460 6507 3L ,
  +2488 6506 2H ,
  +2512 6507 3X ,
  +2544 6506 6K ,
  +2568 6498 2Z ,
  +2580 6498 0D ,
   255 G
  -1296.08 5751.89 441.996 271.644 re
  +1276.32 5763.32 433.052 266.146 re
   f*
   K
  -1296.08 5751.89 441.996 271.644 re
  +1276.32 5763.32 433.052 266.146 re
   S
   255 G
  -1296.08 5931.45 441.996 92.0825 re
  +1276.32 5939.25 433.052 90.219 re
   f*
   K
  -1296.08 5931.45 441.996 92.0825 re
  +1276.32 5939.25 433.052 90.219 re
   S
  -1372 5963 5W ,
  -1401 5963 6O ,
  -1426 5964 1N ,
  -1446 5964 6S ,
  -1459 5964 6C ,
  -1467 5955 6G ,
  -1491 5963 1J ,
  -1518 5963 6K ,
  -1541 5963 7I ,
  -1561 5963 1V ,
  -1574 5964 6C ,
  -1583 5963 6O ,
  -1608 5964 1N ,
  +1350 5969 1F ,
  +1380 5969 6O ,
  +1403 5970 1N ,
  +1423 5970 6S ,
  +1437 5970 6C ,
  +1444 5961 6G ,
  +1468 5969 23 32 /6A
  +$C
  +4q\EGSIsnTJ\3A4e,T3C;AbKfGTIDq6I?B45dda^J,]>A[BRMK.b$/F~>
  +,
  +1494 5969 6K ,
  +1517 5969 7I ,
  +1536 5969 1V ,
  +1550 5970 6C ,
  +1558 5969 6O ,
  +1582 5970 1N ,
   255 G
  -1296.08 5839.37 441.996 92.0825 re
  +1276.32 5849.03 433.052 90.219 re
   f*
   K
  -1296.08 5839.37 441.996 92.0825 re
  +1276.32 5849.03 433.052 90.219 re
   S
   255 G
  -1296.08 5747.29 441.996 92.0825 re
  +1276.32 5758.81 433.052 90.219 re
   f*
   K
  -1296.08 5747.29 441.996 92.0825 re
  +1276.32 5758.81 433.052 90.219 re
   S
   255 G
  -1848.57 5751.89 441.996 271.644 re
  +1817.64 5763.32 433.052 266.146 re
   f*
   K
  -1848.57 5751.89 441.996 271.644 re
  +1817.64 5763.32 433.052 266.146 re
   S
   255 G
  -1848.57 5931.45 441.996 92.0825 re
  +1817.64 5939.25 433.052 90.219 re
   f*
   K
  -1848.57 5931.45 441.996 92.0825 re
  +1817.64 5939.25 433.052 90.219 re
   S
  -1917 5964 24 30 /2B
  +1885 5970 23 30 /4Z
   $C
  --D8'oo'#j-g[FUGrU9dds8)b$I<Fdn9,4NV~>
  +-D?A]jjESTDn"X's*t(Ks4@,I9<V!AZ!,"p~>
   ,
  -1944 5963 6K ,
  -1966 5964 6S ,
  -1980 5963 2H ,
  -2003 5963 2D ,
  -2027 5964 1R ,
  -2033 5963 1V ,
  -2046 5963 1J ,
  -2073 5963 6K ,
  -2096 5963 7I ,
  -2116 5963 1V ,
  -2129 5964 6C ,
  -2137 5963 6O ,
  -2162 5964 1N ,
  +1911 5969 6K ,
  +1933 5970 6S ,
  +1946 5969 2H ,
  +1970 5969 2D ,
  +1992 5970 1R ,
  +1998 5969 1V ,
  +2011 5969 6A ,
  +2037 5969 6K ,
  +2061 5969 7I ,
  +2079 5969 1V ,
  +2094 5970 6C ,
  +2102 5969 6O ,
  +2125 5970 1N ,
   255 G
  -1848.57 5839.37 441.996 92.0825 re
  +1817.64 5849.03 433.052 90.219 re
   f*
   K
  -1848.57 5839.37 441.996 92.0825 re
  +1817.64 5849.03 433.052 90.219 re
   S
   255 G
  -1848.57 5747.29 441.996 92.0825 re
  +1817.64 5758.81 433.052 90.219 re
   f*
   K
  -1848.57 5747.29 441.996 92.0825 re
  +1817.64 5758.81 433.052 90.219 re
   S
   255 G
  -2401.07 5751.89 441.996 271.644 re
  +2358.95 5763.32 433.052 266.146 re
   f*
   K
  -2401.07 5751.89 441.996 271.644 re
  +2358.95 5763.32 433.052 266.146 re
   S
   255 G
  -2401.07 5931.45 441.996 92.0825 re
  +2358.95 5939.25 433.052 90.219 re
   f*
   K
  -2401.07 5931.45 441.996 92.0825 re
  +2358.95 5939.25 433.052 90.219 re
   S
  -2497 5964 3L ,
  -2524 5964 6W ,
  -2538 5964 6W ,
  -2549 5963 6O ,
  -2574 5964 6W ,
  -2587 5963 1J ,
  -2614 5963 6K ,
  -2637 5963 7I ,
  -2657 5963 1V ,
  -2670 5964 6C ,
  -2678 5963 6O ,
  -2703 5964 1N ,
  +2453 5970 3P ,
  +2479 5970 6W ,
  +2493 5970 6W ,
  +2505 5969 6O ,
  +2529 5970 6W ,
  +2541 5969 6A ,
  +2567 5969 6K ,
  +2591 5969 7I ,
  +2609 5969 1V ,
  +2624 5970 6C ,
  +2632 5969 6O ,
  +2655 5970 1N ,
   255 G
  -2401.07 5839.37 441.996 92.0825 re
  +2358.95 5849.03 433.052 90.219 re
   f*
   K
  -2401.07 5839.37 441.996 92.0825 re
  +2358.95 5849.03 433.052 90.219 re
   S
   255 G
  -2401.07 5747.29 441.996 92.0825 re
  +2358.95 5758.81 433.052 90.219 re
   f*
   K
  -2401.07 5747.29 441.996 92.0825 re
  +2358.95 5758.81 433.052 90.219 re
   S
   255 G
  -2953.56 5751.89 441.996 271.644 re
  +2900.27 5763.32 433.052 266.146 re
   f*
   K
  -2953.56 5751.89 441.996 271.644 re
  +2900.27 5763.32 433.052 266.146 re
   S
   255 G
  -2953.56 5931.45 441.996 92.0825 re
  +2900.27 5939.25 433.052 90.219 re
   f*
   K
  -2953.56 5931.45 441.996 92.0825 re
  +2900.27 5939.25 433.052 90.219 re
   S
  -3002 5963 5W ,
  -3031 5963 6O ,
  -3056 5964 3T ,
  -3090 5964 3T ,
  -3123 5963 6O ,
  -3148 5964 1N ,
  -3170 5963 1J ,
  -3196 5963 6K ,
  -3219 5963 7I ,
  -3239 5963 1V ,
  -3253 5964 6C ,
  -3261 5963 6O ,
  -3286 5964 1N ,
  +2947 5969 1F ,
  +2977 5969 6O ,
  +3000 5970 3X ,
  +3034 5970 3X ,
  +3067 5969 6O ,
  +3090 5970 1N ,
  +3112 5969 6A ,
  +3138 5969 6K ,
  +3162 5969 7I ,
  +3180 5969 1V ,
  +3194 5970 6C ,
  +3202 5969 6O ,
  +3226 5970 1N ,
   255 G
  -2953.56 5839.37 441.996 92.0825 re
  +2900.27 5849.03 433.052 90.219 re
   f*
   K
  -2953.56 5839.37 441.996 92.0825 re
  +2900.27 5849.03 433.052 90.219 re
   S
   255 G
  -2953.56 5747.29 441.996 92.0825 re
  +2900.27 5758.81 433.052 90.219 re
   f*
   K
  -2953.56 5747.29 441.996 92.0825 re
  +2900.27 5758.81 433.052 90.219 re
   S
   255 G
  -3506.06 5751.89 460.413 271.644 re
  +3441.58 5763.32 451.096 266.146 re
   f*
   K
  -3506.06 5751.89 460.413 271.644 re
  +3441.58 5763.32 451.096 266.146 re
   S
   255 G
  -3506.06 5931.45 460.413 92.0825 re
  +3441.58 5939.25 451.096 90.219 re
   f*
   K
  -3506.06 5931.45 460.413 92.0825 re
  +3441.58 5939.25 451.096 90.219 re
   S
  -3610 5963 24 31 /5B
  +3544 5969 23 31 /2D
   $C
  -4q\EGSIog'&:.(!Ds@<%s8W-!s8W-!s1e~>
  +4sV7iSIsnTJ\=2sqLAPFs8W-!s8W-!n,~>
   ,
  -3638 5963 2L ,
  -3659 5963 6K ,
  -3684 5964 6W ,
  -3697 5963 1J ,
  -3723 5963 6K ,
  -3747 5963 7I ,
  -3766 5963 1V ,
  -3780 5964 6C ,
  -3788 5963 6O ,
  -3813 5964 1N ,
  +3571 5969 2L ,
  +3591 5969 6K ,
  +3616 5970 6W ,
  +3629 5969 6A ,
  +3655 5969 6K ,
  +3678 5969 7I ,
  +3696 5969 1V ,
  +3711 5970 6C ,
  +3719 5969 6O ,
  +3742 5970 1N ,
   255 G
  -3506.06 5839.37 460.413 92.0825 re
  +3441.58 5849.03 451.096 90.219 re
   f*
   K
  -3506.06 5839.37 460.413 92.0825 re
  +3441.58 5849.03 451.096 90.219 re
   S
  -3526 5882 7A ,
  -3539 5871 6K ,
  -3564 5872 1B ,
  -3586 5871 2H ,
  -3610 5872 1N ,
  -3631 5863 6G ,
  -3670 5872 2V ,
  -3689 5871 6K ,
  -3714 5872 1N ,
  -3736 5871 2D ,
  -3760 5872 3T ,
  -3805 5877 1F ,
  -3841 5871 4F ,
  +3462 5890 7A ,
  +3474 5879 6K ,
  +3499 5880 1B ,
  +3520 5879 2H ,
  +3544 5880 1N ,
  +3564 5871 6G ,
  +3602 5880 2V ,
  +3621 5879 6K ,
  +3645 5880 1N ,
  +3668 5879 16 22 /2D
  +$X
  ++2C,4J,B"jn/pR!i"+`Vi!80Fi!80Fi!80Fi!80Fi!80Fi!80Fi!80F~>
  +,
  +3691 5880 3X ,
  +3735 5884 4F ,
  +3770 5879 1J ,
   255 G
  -3506.06 5747.29 460.413 92.0825 re
  +3441.58 5758.81 451.096 90.219 re
   f*
   K
  -3506.06 5747.29 460.413 92.0825 re
  +3441.58 5758.81 451.096 90.219 re
   S
   255 G
  -2401.07 5125.73 441.996 271.644 re
  +2358.95 5149.83 433.052 266.146 re
   f*
   K
  -2401.07 5125.73 441.996 271.644 re
  +2358.95 5149.83 433.052 266.146 re
   S
   255 G
  -2401.07 5305.29 441.996 92.0825 re
  +2358.95 5325.76 433.052 90.219 re
   f*
   K
  -2401.07 5305.29 441.996 92.0825 re
  +2358.95 5325.76 433.052 90.219 re
   S
  -2548 5337 26 32 /2G
  +2502 5355 26 32 /2G
   $C
  -3"cdE*>.>J"*JNJ^\7^&X^IA+R=i?`JP[g@WYW.rp>;ot%4_i5@]`!)~>
  +4;&3EK;(PS5i!gTlg=]L<j51(1C&RJ&>t,Q>1Yf"DmaM#.h!_5X[<E~>
   ,
  -2574 5337 1S ,
  -2597 5337 20 24 /5G
  +2529 5355 4S ,
  +2551 5355 20 23 /5G
   $C
  -2D#//M*o,he\+3EI"0uO_-LttD-KWO>)&[~>
  +2D#//M;-BpYGV?WO5I^\:AqoWL6[XNTr7~>
   ,
  -2619 5337 11 29 /2K
  +2573 5355 11 28 /2K
   $X
  -HiX-GrW)Efn,VqXn,RD-GQ;sgGQ;sg49.JD49.JD49-E&*WR5]s58CbJ)Ch;%fd+?#65!Z#64~>
  +HiX-GrW)Efn,VqXn,RD-GQ;sgGQ;sg2ul&@49.JD)uq#[*WZ5us58Cb%fd+?%fd+?#65!Z~>
   ,
  -2630 5338 1O ,
  -2639 5337 21 24 /5K
  +2582 5356 4O ,
  +2592 5355 21 23 /5K
   $C
  -3&j4QU/pc9F`1"S\,YmPs4dL[]t1Gb<[uTV~>
  +3&j4QU/pJ#heuk?rP.dVs4dL[DQq"1W+m/G~>
   ,
  -2662 5338 21 23 /2O
  +2615 5356 21 22 /2O
   $C
  --ENd<s0hq,s4_JlrVa5"hV,dXg=[H!C*BM~>
  +-EPVhp\Xjbqu-K.^YdfGGA>#uLD@*S8;<c~>
   ,
   255 G
  -2401.07 5213.21 441.996 92.0825 re
  +2358.95 5235.54 433.052 90.219 re
   f*
   K
  -2401.07 5213.21 441.996 92.0825 re
  +2358.95 5235.54 433.052 90.219 re
   S
   255 G
  -2401.07 5121.13 441.996 92.0825 re
  +2358.95 5145.32 433.052 90.219 re
   f*
   K
  -2401.07 5121.13 441.996 92.0825 re
  +2358.95 5145.32 433.052 90.219 re
   S
   255 G
  -633.081 7777.71 441.996 271.644 re
  +626.745 7748.15 433.052 266.146 re
   f*
   K
  -633.081 7777.71 441.996 271.644 re
  +626.745 7748.15 433.052 266.146 re
   S
   255 G
  -633.081 7957.27 441.996 92.0825 re
  +626.745 7924.07 433.052 90.219 re
   f*
   K
  -633.081 7957.27 441.996 92.0825 re
  +626.745 7924.07 433.052 90.219 re
   S
  -749 7990 24 30 /5P
  +741 7955 23 30 /5P
   $C
  --\)0rs8W-!s8W,@W#+q~>
  +1k5Q*s8W-!s8W,@W$q-~>
   ,
  -777 7990 6W ,
  -789 7989 2H ,
  -813 7990 1N ,
  -834 7989 2L ,
  -857 7990 1R ,
  -865 7989 2H ,
  -886 7989 1V ,
  -899 7989 6O ,
  -924 7990 6W ,
  +767 7955 6W ,
  +780 7954 2H ,
  +803 7955 1N ,
  +824 7954 2L ,
  +846 7955 1R ,
  +854 7954 2H ,
  +875 7954 1V ,
  +888 7954 6O ,
  +912 7955 6W ,
   255 G
  -633.081 7865.19 441.996 92.0825 re
  +626.745 7833.85 433.052 90.219 re
   f*
   K
  -633.081 7865.19 441.996 92.0825 re
  +626.745 7833.85 433.052 90.219 re
   S
   255 G
  -633.081 7773.11 441.996 92.0825 re
  +626.745 7743.63 433.052 90.219 re
   f*
   K
  -633.081 7773.11 441.996 92.0825 re
  +626.745 7743.63 433.052 90.219 re
   S
   255 G
  -890.912 7114.72 441.996 271.644 re
  +879.359 7134.65 433.052 266.146 re
   f*
   K
  -890.912 7114.72 441.996 271.644 re
  +879.359 7134.65 433.052 266.146 re
   S
   255 G
  -890.912 7294.28 441.996 92.0825 re
  +879.359 7310.58 433.052 90.219 re
   f*
   K
  -890.912 7294.28 441.996 92.0825 re
  +879.359 7310.58 433.052 90.219 re
   S
  -994 7326 1J ,
  -1021 7318 19 31 /2T
  +981 7340 6A ,
  +1007 7332 19 30 /2T
   $C
  -,G+XomOrMUI\694U>>j_/,sLRrnT7+\mP>B~>
  +,G+XomOs"cI_5:0@J+R8lJM7,^Zi?0Uu21~>
   ,
  -1044 7327 1N ,
  -1064 7326 1V ,
  -1077 7326 2H ,
  -1099 7327 0L ,
  -1120 7327 5P ,
  -1147 7327 6W ,
  -1159 7326 6K ,
  -1182 7326 6K ,
  +1029 7341 1N ,
  +1049 7340 1V ,
  +1062 7340 2H ,
  +1083 7341 0P ,
  +1104 7341 5P ,
  +1131 7341 6W ,
  +1142 7340 6K ,
  +1165 7340 6K ,
   255 G
  -890.912 7202.19 441.996 92.0825 re
  +879.359 7220.36 433.052 90.219 re
   f*
   K
  -890.912 7202.19 441.996 92.0825 re
  +879.359 7220.36 433.052 90.219 re
   S
   255 G
  -890.912 7110.11 441.996 92.0825 re
  +879.359 7130.14 433.052 90.219 re
   f*
   K
  -890.912 7110.11 441.996 92.0825 re
  +879.359 7130.14 433.052 90.219 re
   S
   255 G
  -338.416 7114.72 441.996 271.644 re
  +338.044 7134.65 433.052 266.146 re
   f*
   K
  -338.416 7114.72 441.996 271.644 re
  +338.044 7134.65 433.052 266.146 re
   S
   255 G
  -338.416 7294.28 441.996 92.0825 re
  +338.044 7310.58 433.052 90.219 re
   f*
   K
  -338.416 7294.28 441.996 92.0825 re
  +338.044 7310.58 433.052 90.219 re
   S
  -423 7326 1J ,
  -450 7318 2T ,
  -473 7327 3T ,
  -506 7326 20 31 /5T
  +421 7340 6A ,
  +447 7332 2T ,
  +470 7341 3X ,
  +502 7340 19 31 /5T
   $C
  -4ukK7oH#?gK`/SK](c7)qd8Z)['mMTMX>R'+92<~>
  +4?59\I6:/XKH&D)rV\t\rNH0r[DN;_**6p1(E`\W^]~>
   ,
  -528 7326 6O ,
  -553 7327 1R ,
  -560 7327 5P ,
  -587 7326 2H ,
  -610 7326 5T ,
  -634 7327 1R ,
  -641 7326 6K ,
  +525 7340 6O ,
  +549 7341 1R ,
  +556 7341 5P ,
  +581 7340 2H ,
  +604 7340 5T ,
  +628 7341 1R ,
  +635 7340 6K ,
   255 G
  -338.416 7202.19 441.996 92.0825 re
  +338.044 7220.36 433.052 90.219 re
   f*
   K
  -338.416 7202.19 441.996 92.0825 re
  +338.044 7220.36 433.052 90.219 re
   S
   255 G
  -338.416 7110.11 441.996 92.0825 re
  +338.044 7130.14 433.052 90.219 re
   f*
   K
  -338.416 7110.11 441.996 92.0825 re
  +338.044 7130.14 433.052 90.219 re
   S
  +4849 7184.27 0 415.01 S
   255 G
  -4647.88 6028.14 418.976 400.559 re
  -f*
  +4849 7594.77 22.55 -45.11 -22.55 -45.11 -22.55 45.11 f*
   K
  -4647.88 6028.14 418.976 400.559 re
  +4849 7594.77 22.55 -45.11 -22.55 -45.11 -22.55 45.11 H
   S
  -255 G
  -4647.88 6336.62 418.976 92.0825 re
  -f*
  -K
  -4647.88 6336.62 418.976 92.0825 re
  -S
  -4751 6368 0X ,
  -4783 6360 3X ,
  -4804 6368 1V ,
  -4818 6369 6C ,
  -4826 6368 6O ,
  -4851 6369 1N ,
  -4874 6369 1B ,
  -4896 6369 6C ,
  -4904 6368 2L ,
  -4924 6368 1V ,
  -255 G
  -4647.88 6207.7 418.976 128.916 re
  -f*
  -K
  -4647.88 6207.7 418.976 128.916 re
  -S
  -4668 6287 7A ,
  -4683 6277 1N ,
  -4705 6276 5W ,
  -4734 6276 6O ,
  -4758 6276 2D ,
  -4782 6277 1N ,
  -4802 6276 1V ,
  -4830 6277 2V ,
  -4850 6277 6C ,
  -4860 6277 1N ,
  -4880 6276 1V ,
  -4668 6232 7A ,
  -4681 6240 4T ,
  -4698 6213 3X ,
  -4719 6222 0T ,
  -4744 6222 3L ,
  -4771 6222 1R ,
  -4778 6221 6K ,
  -4803 6222 3T ,
  -4835 6221 6K ,
  -4860 6222 1N ,
  -4880 6221 1V ,
  -4908 6222 2V ,
  -4927 6222 0T ,
  -4948 6221 6O ,
  -4972 6222 6C ,
  -4980 6221 0P ,
  -255 G
  -4647.88 6023.54 418.976 184.165 re
  -f*
  -K
  -4647.88 6023.54 418.976 184.165 re
  -S
  -4668 6147 3D ,
  -4692 6147 2H ,
  -4715 6147 0P ,
  -4738 6147 0P ,
  -4764 6148 3L ,
  -4790 6148 1R ,
  -4797 6147 6K ,
  -4822 6148 3T ,
  -4855 6147 6K ,
  -4880 6148 1N ,
  -4900 6147 1V ,
  -4915 6139 2Z ,
  -4926 6139 0D ,
  -4668 6092 3D ,
  -4691 6092 0P ,
  -4715 6092 6K ,
  -4740 6093 1R ,
  -4750 6093 3L ,
  -4776 6093 1R ,
  -4784 6092 6K ,
  -4809 6093 3T ,
  -4841 6092 6K ,
  -4866 6093 1N ,
  -4886 6092 1V ,
  -4901 6084 2Z ,
  -4913 6084 0D ,
  -4668 6036 3D ,
  -4691 6028 6G ,
  -4715 6036 6K ,
  -4737 6036 1V ,
  -4750 6036 5W ,
  -4779 6036 6O ,
  -4803 6036 2D ,
  -4827 6037 1N ,
  -4847 6036 1V ,
  -4862 6028 2Z ,
  -4873 6028 0D ,
  -4832.05 7303.49 0 359.12 S
  -255 G
  -4832.05 7658 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
  -K
  -4832.05 7658 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
  -S
  -4871 7344 4F ,
  -4896 7345 4 4 /2X
  +4887 7205 1J ,
  +4912 7206 4 4 /2X
   $X
   nF5r:~>
   ,
  -4907 7345 2X ,
  -4919 7345 11 30 /5X
  +4923 7206 2X ,
  +4934 7206 10 29 /5X
   $X
  -!T4":!T4":!T4":!T4":!T4":!T4":!T4":!T4":!T4":!T4":!T="9s5<q8&)[QJ!T4":!8mk8~>
  +!Pe`O!Pe`O!Pe`O!Pe`O!Pe`O!Pe`O!Pe`O!Pe`O!Pe`O!Pe`Os1nZMs1gk7#J^GW!Pe`O!Pe~>
   ,
  -4279.55 7294.28 0 202.58 552.5 0 0 156.54 S
  +4307.69 7184.27 0 216.53 541.32 0 0 198.48 S
   255 G
  -4832.05 7648.8 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
  +4849 7594.77 22.55 -45.11 -22.55 -45.11 -22.55 45.11 f*
   K
  -4832.05 7648.8 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
  +4849 7594.77 22.55 -45.11 -22.55 -45.11 -22.55 45.11 H
   S
  -4314 7330 4F ,
  -4339 7331 2X ,
  -4350 7331 2X ,
  -4362 7331 5X ,
  -5384.54 7303.49 0 193.37 -552.5 0 0 165.75 S
  +4341 7205 1J ,
  +4366 7206 2X ,
  +4377 7206 2X ,
  +4388 7206 5X ,
  +5390.32 7184.27 0 216.53 -541.32 0 0 198.48 S
   255 G
  -4832.05 7658 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
  +4849 7594.77 22.55 -45.11 -22.55 -45.11 -22.55 45.11 f*
   K
  -4832.05 7658 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
  +4849 7594.77 22.55 -45.11 -22.55 -45.11 -22.55 45.11 H
   S
  -5414 7330 4F ,
  -5439 7331 2X ,
  -5451 7331 2X ,
  -5462 7331 5X ,
  -3805.33 7902.02 695.22 0 S
  +5433 7205 1J ,
  +5457 7206 2X ,
  +5469 7206 2X ,
  +5480 7206 5X ,
  +3770.89 7906.03 753.33 0 S
   255 G
  -3805.33 7902.02 46.04 23.02 46.04 -23.02 -46.04 -23.02 f*
  +3770.89 7906.03 45.11 22.55 45.11 -22.55 -45.11 -22.55 f*
   K
  -3805.33 7902.02 46.04 23.02 46.04 -23.02 -46.04 -23.02 H
  +3770.89 7906.03 45.11 22.55 45.11 -22.55 -45.11 -22.55 H
   S
  -3579.72 7367.94 0 400.56 S
  -2553 7902.02 805.72 0 S
  +3549.85 7418.84 0 320.28 S
  +2507.82 7906.03 825.51 0 S
   255 G
  -3354.12 7902.02 -46.04 -23.02 -46.04 23.02 46.04 23.02 f*
  +3328.81 7906.03 -45.11 -22.55 -45.11 22.55 45.11 22.55 f*
   K
  -3354.12 7902.02 -46.04 -23.02 -46.04 23.02 46.04 23.02 H
  +3328.81 7906.03 -45.11 -22.55 -45.11 22.55 45.11 22.55 H
   S
  -2587 7924 4F ,
  -2612 7925 2X ,
  -2624 7925 2X ,
  -2635 7925 5X ,
  -2327.4 7105.51 0 -197.98 294.66 0 0 -225.6 S
  +2532 7927 1J ,
  +2557 7928 2X ,
  +2568 7928 2X ,
  +2580 7928 5X ,
  +2286.78 7134.65 0 -202.99 288.7 0 0 -184.95 S
   255 G
  -2622.06 6686.53 -32.23 55.25 64.46 0 f*
  +2575.48 6751.22 -31.58 54.13 63.15 0 f*
   K
  -2622.06 6686.53 -32.23 55.25 64.46 0 H
  +2575.48 6751.22 -31.58 54.13 63.15 0 H
   S
  -2327.4 7381.76 0 386.75 S
  +2828.09 7134.65 0 -202.99 -252.61 0 0 -184.95 S
   255 G
  -2327.4 7763.9 23.02 -46.04 -23.02 -46.04 ^ f*
  +2575.48 6751.22 -31.58 54.13 63.15 0 f*
   K
  -2327.4 7763.9 23.02 -46.04 -23.02 -46.04 ^ H
  +2575.48 6751.22 -31.58 54.13 63.15 0 H
   S
  -2364 7419 5X ,
  -2387 7419 2X ,
  -2398 7419 2X ,
  -2407 7437 4T ,
  -1774.91 7386.36 0 147.33 552.5 0 0 234.81 S
  +2286.78 7405.31 0 266.15 S
   255 G
  -2327.4 7763.9 23.02 -46.04 -23.02 -46.04 ^ f*
  +2286.78 7666.95 22.55 -45.11 -22.55 -45.11 -22.55 45.11 f*
   K
  -2327.4 7763.9 23.02 -46.04 -23.02 -46.04 ^ H
  +2286.78 7666.95 22.55 -45.11 -22.55 -45.11 -22.55 45.11 H
   S
  -1802 7419 5X ,
  -1825 7419 2X ,
  -1836 7419 2X ,
  -1845 7437 4T ,
  -2879.9 7381.76 0 151.94 -552.5 0 0 234.81 S
  +2309 7427 5X ,
  +2331 7427 2X ,
  +2343 7427 2X ,
  +2351 7445 4B ,
  +1745.46 7400.8 0 144.35 541.32 0 0 126.31 S
   255 G
  -2327.4 7763.9 23.02 -46.04 -23.02 -46.04 ^ f*
  +2286.78 7666.95 22.55 -45.11 -22.55 -45.11 -22.55 45.11 f*
   K
  -2327.4 7763.9 23.02 -46.04 -23.02 -46.04 ^ H
  +2286.78 7666.95 22.55 -45.11 -22.55 -45.11 -22.55 45.11 H
   S
  -2919 7399 4F ,
  -2944 7400 2X ,
  -2955 7400 2X ,
  -2967 7400 5X ,
  -2622.06 5747.29 0 -349.91 S
  +1768 7422 5X ,
  +1790 7422 2X ,
  +1801 7422 2X ,
  +1810 7440 4B ,
  +2828.09 7405.31 0 139.84 -541.32 0 0 126.31 S
   255 G
  -2622.06 5401.98 -32.23 55.25 64.46 0 f*
  +2286.78 7666.95 22.55 -45.11 -22.55 -45.11 -22.55 45.11 f*
   K
  -2622.06 5401.98 -32.23 55.25 64.46 0 H
  +2286.78 7666.95 22.55 -45.11 -22.55 -45.11 -22.55 45.11 H
   S
  -2069.57 5747.29 0 -165.75 552.5 0 0 -184.17 S
  +2853 7426 1J ,
  +2877 7427 2X ,
  +2889 7427 2X ,
  +2900 7427 5X ,
  +2575.48 5758.81 0 -342.83 S
   255 G
  -2622.06 5401.98 -32.23 55.25 64.46 0 f*
  +2575.48 5420.49 -31.58 54.13 63.15 0 f*
   K
  -2622.06 5401.98 -32.23 55.25 64.46 0 H
  +2575.48 5420.49 -31.58 54.13 63.15 0 H
   S
  -1517.07 5747.29 0 -165.75 1104.99 0 0 -184.17 S
  +2034.17 5758.81 0 -162.39 541.32 0 0 -180.44 S
   255 G
  -2622.06 5401.98 -32.23 55.25 64.46 0 f*
  +2575.48 5420.49 -31.58 54.13 63.15 0 f*
   K
  -2622.06 5401.98 -32.23 55.25 64.46 0 H
  +2575.48 5420.49 -31.58 54.13 63.15 0 H
   S
  -3174.56 5747.29 0 -165.75 -552.5 0 0 -184.17 S
  +1492.85 5758.81 0 -162.39 1082.63 0 0 -180.44 S
   255 G
  -2622.06 5401.98 -32.23 55.25 64.46 0 f*
  +2575.48 5420.49 -31.58 54.13 63.15 0 f*
   K
  -2622.06 5401.98 -32.23 55.25 64.46 0 H
  +2575.48 5420.49 -31.58 54.13 63.15 0 H
   S
  -3727.06 5747.29 0 -165.75 -1104.99 0 0 -184.17 S
  +3116.8 5758.81 0 -162.39 -541.32 0 0 -180.44 S
   255 G
  -2622.06 5401.98 -32.23 55.25 64.46 0 f*
  +2575.48 5420.49 -31.58 54.13 63.15 0 f*
   K
  -2622.06 5401.98 -32.23 55.25 64.46 0 H
  +2575.48 5420.49 -31.58 54.13 63.15 0 H
   S
  -3174.56 6023.54 0 184.17 -552.5 0 0 197.98 S
  +3658.11 5758.81 0 -162.39 -1082.63 0 0 -180.44 S
   255 G
  -2622.06 6401.08 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
  +2575.48 5420.49 -31.58 54.13 63.15 0 f*
   K
  -2622.06 6401.08 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
  +2575.48 5420.49 -31.58 54.13 63.15 0 H
   S
  -3204 6050 4F ,
  -3229 6051 2X ,
  -3241 6051 2X ,
  -3252 6051 5X ,
  -3727.06 6023.54 0 184.17 -1104.99 0 0 197.98 S
  +3116.8 6029.47 0 216.53 -541.32 0 0 230.06 S
   255 G
  -2622.06 6401.08 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
  +2575.48 6471.54 22.55 -45.11 -22.55 -45.11 -22.55 45.11 f*
   K
  -2622.06 6401.08 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
  +2575.48 6471.54 22.55 -45.11 -22.55 -45.11 -22.55 45.11 H
   S
  -3743 6046 4F ,
  -3768 6047 2X ,
  -3779 6047 2X ,
  -3788 6065 4T ,
  -1111.91 7386.36 0 147.33 -257.83 0 0 239.41 S
  -854.08 7768.5 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
  -854.08 7768.5 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
  +3155 6050 1J ,
  +3179 6051 2X ,
  +3191 6051 2X ,
  +3202 6051 5X ,
  +3658.11 6029.47 0 216.53 -1082.63 0 0 230.06 S
  +255 G
  +2575.48 6471.54 22.55 -45.11 -22.55 -45.11 -22.55 45.11 f*
  +K
  +2575.48 6471.54 22.55 -45.11 -22.55 -45.11 -22.55 45.11 H
   S
  -1079.68 7902.02 1026.72 0 S
  +3701 6050 1J ,
  +3725 6051 2X ,
  +3737 6051 2X ,
  +3745 6069 4B ,
  +1095.89 7400.8 0 144.35 -252.61 0 0 198.48 S
   255 G
  -2101.8 7902.02 -46.04 -23.02 -46.04 23.02 46.04 23.02 f*
  +843.27 7739.12 22.55 -45.11 -22.55 -45.11 -22.55 45.11 f*
   K
  -2101.8 7902.02 -46.04 -23.02 -46.04 23.02 46.04 23.02 H
  +843.27 7739.12 22.55 -45.11 -22.55 -45.11 -22.55 45.11 H
   S
  -1123 7924 4F ,
  -1148 7925 2X ,
  -1160 7925 2X ,
  -1171 7925 5X ,
  -559.41 7386.36 0 147.33 294.66 0 0 239.41 S
  +1064.31 7906.03 1005.94 0 S
   255 G
  -854.08 7768.5 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
  +2065.74 7906.03 -45.11 -22.55 -45.11 22.55 45.11 22.55 f*
   K
  -854.08 7768.5 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
  +2065.74 7906.03 -45.11 -22.55 -45.11 22.55 45.11 22.55 H
   S
  -4832.05 6428.7 0 524.87 S
  +1107 7927 1J ,
  +1131 7928 2X ,
  +1143 7928 2X ,
  +1154 7928 5X ,
  +554.57 7400.8 0 144.35 288.7 0 0 198.48 S
   255 G
  -4832.05 6948.97 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
  +843.27 7739.12 22.55 -45.11 -22.55 -45.11 -22.55 45.11 f*
   K
  -4832.05 6948.97 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
  +843.27 7739.12 22.55 -45.11 -22.55 -45.11 -22.55 45.11 H
   S
  -4832.05 6428.7 0 147.33 -552.5 0 0 165.75 S
  +4849 6246 0 595.45 S
   255 G
  -4279.55 6737.18 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
  +4849 6836.93 22.55 -45.11 -22.55 -45.11 -22.55 45.11 f*
   K
  -4279.55 6737.18 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
  +4849 6836.93 22.55 -45.11 -22.55 -45.11 -22.55 45.11 H
   S
  -4832.05 6428.7 0 147.33 552.5 0 0 377.54 S
  +4849 6246 0 216.53 -577.4 0 0 180.44 S
   255 G
  -5384.54 6948.97 23.02 -46.04 -23.02 -46.04 ^ f*
  +4271.6 6638.45 22.55 -45.11 -22.55 -45.11 -22.55 45.11 f*
   K
  -5384.54 6948.97 23.02 -46.04 -23.02 -46.04 ^ H
  +4271.6 6638.45 22.55 -45.11 -22.55 -45.11 -22.55 45.11 H
   S
  -4314 7330 4F ,
  -4339 7331 2X ,
  -4350 7331 2X ,
  -4362 7331 5X ,
  -2622.06 6023.54 0 382.14 S
  +4849 6246 0 216.53 577.4 0 0 378.92 S
   255 G
  -2622.06 6401.08 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
  +5426.41 6836.93 22.55 -45.11 -22.55 -45.11 -22.55 45.11 f*
   K
  -2622.06 6401.08 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
  +5426.41 6836.93 22.55 -45.11 -22.55 -45.11 -22.55 45.11 H
   S
  -2666 6046 4F ,
  -2691 6047 2X ,
  -2702 6047 2X ,
  -2714 6047 5X ,
  -2069.57 6023.54 0 184.17 552.5 0 0 197.98 S
  +5433 7205 1J ,
  +5457 7206 2X ,
  +5469 7206 2X ,
  +5480 7206 5X ,
  +4887 7205 1J ,
  +4912 7206 2X ,
  +4923 7206 2X ,
  +4934 7206 5X ,
  +4341 7205 1J ,
  +4366 7206 2X ,
  +4377 7206 2X ,
  +4388 7206 5X ,
  +2532 7927 1J ,
  +2557 7928 2X ,
  +2568 7928 2X ,
  +2580 7928 5X ,
  +1107 7927 1J ,
  +1131 7928 2X ,
  +1143 7928 2X ,
  +1154 7928 5X ,
  +1768 7422 5X ,
  +1790 7422 2X ,
  +1801 7422 2X ,
  +1810 7440 4B ,
  +2853 7426 1J ,
  +2877 7427 2X ,
  +2889 7427 2X ,
  +2900 7427 5X ,
  +2309 7427 5X ,
  +2331 7427 2X ,
  +2343 7427 2X ,
  +2351 7445 4B ,
  +2575.48 6029.47 0 446.58 S
   255 G
  -2622.06 6401.08 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
  +2575.48 6471.54 22.55 -45.11 -22.55 -45.11 -22.55 45.11 f*
   K
  -2622.06 6401.08 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
  +2575.48 6471.54 22.55 -45.11 -22.55 -45.11 -22.55 45.11 H
   S
  -2118 6050 4F ,
  -2143 6051 2X ,
  -2154 6051 2X ,
  -2166 6051 5X ,
  -1517.07 6023.54 0 184.17 1104.99 0 0 197.98 S
  +2618 6050 1J ,
  +2643 6051 2X ,
  +2654 6051 2X ,
  +2665 6051 5X ,
  +2034.17 6029.47 0 216.53 541.32 0 0 230.06 S
   255 G
  -2622.06 6401.08 23.02 -46.04 -23.02 -46.04 -23.02 46.04 f*
  +2575.48 6471.54 22.55 -45.11 -22.55 -45.11 -22.55 45.11 f*
   K
  -2622.06 6401.08 23.02 -46.04 -23.02 -46.04 -23.02 46.04 H
  +2575.48 6471.54 22.55 -45.11 -22.55 -45.11 -22.55 45.11 H
   S
  -1551 6050 4F ,
  -1576 6051 2X ,
  -1588 6051 2X ,
  -1599 6051 5X ,
  -2879.9 7105.51 0 -197.98 -257.83 0 0 -225.6 S
  +2081 6050 1J ,
  +2106 6051 2X ,
  +2117 6051 2X ,
  +2128 6051 5X ,
  +1492.85 6029.47 0 216.53 1082.63 0 0 230.06 S
   255 G
  -2622.06 6686.53 -32.23 55.25 64.46 0 f*
  +2575.48 6471.54 22.55 -45.11 -22.55 -45.11 -22.55 45.11 f*
   K
  -2622.06 6686.53 -32.23 55.25 64.46 0 H
  +2575.48 6471.54 22.55 -45.11 -22.55 -45.11 -22.55 45.11 H
   S
  -3204 6050 4F ,
  -3229 6051 2X ,
  -3241 6051 2X ,
  -3252 6051 5X ,
  -3743 6046 4F ,
  -3768 6047 2X ,
  -3779 6047 2X ,
  -3788 6065 4T ,
  -2666 6046 4F ,
  -2691 6047 2X ,
  -2702 6047 2X ,
  -2714 6047 5X ,
  -2118 6050 4F ,
  -2143 6051 2X ,
  -2154 6051 2X ,
  -2166 6051 5X ,
  -1551 6050 4F ,
  -1576 6051 2X ,
  -1588 6051 2X ,
  -1599 6051 5X ,
  -2587 7924 4F ,
  -2612 7925 2X ,
  -2624 7925 2X ,
  -2635 7925 5X ,
  -2364 7419 5X ,
  -2387 7419 2X ,
  -2398 7419 2X ,
  -2407 7437 4T ,
  -1802 7419 5X ,
  -1825 7419 2X ,
  -1836 7419 2X ,
  -1845 7437 4T ,
  -2919 7399 4F ,
  -2944 7400 2X ,
  -2955 7400 2X ,
  -2967 7400 5X ,
  -1123 7924 4F ,
  -1148 7925 2X ,
  -1160 7925 2X ,
  -1171 7925 5X ,
  +1535 6050 1J ,
  +1560 6051 2X ,
  +1571 6051 2X ,
  +1583 6051 5X ,
  +2618 6050 1J ,
  +2643 6051 2X ,
  +2654 6051 2X ,
  +2665 6051 5X ,
  +3155 6050 1J ,
  +3179 6051 2X ,
  +3191 6051 2X ,
  +3202 6051 5X ,
  +3701 6050 1J ,
  +3725 6051 2X ,
  +3737 6051 2X ,
  +3745 6069 4B ,
  +2081 6050 1J ,
  +2106 6051 2X ,
  +2117 6051 2X ,
  +2128 6051 5X ,
  +1535 6050 1J ,
  +1560 6051 2X ,
  +1571 6051 2X ,
  +1583 6051 5X ,
   cleartomark end end pagesave restore showpage
   %%PageTrailer
   %%Trailer
  Index: ossp-pkg/rc/rc_design.xmi
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 rc_design.xmi
  --- ossp-pkg/rc/rc_design.xmi	6 Feb 2002 18:16:08 -0000	1.2
  +++ ossp-pkg/rc/rc_design.xmi	7 Feb 2002 15:34:39 -0000	1.3
  @@ -1,1999 +1,1999 @@
  -<?xml version="1.0" encoding="UTF-8"?>
  -<XMI xmi.version="1.0">
  -  <XMI.header>
  -    <XMI.documentation>
  -      <XMI.exporter>Novosoft UML Library</XMI.exporter>
  -      <XMI.exporterVersion>0.4.19</XMI.exporterVersion>
  -    </XMI.documentation>
  -    <XMI.metamodel xmi.name="UML" xmi.version="1.3"/>
  -  </XMI.header>
  -  <XMI.content>
  -    <Model_Management.Model xmi.id="xmi.1" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-8000">
  -      <Foundation.Core.ModelElement.name>OSSPRC</Foundation.Core.ModelElement.name>
  -      <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -      <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -      <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -      <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -      <Foundation.Core.Namespace.ownedElement>
  -        <Foundation.Core.Class xmi.id="xmi.2" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fff">
  -          <Foundation.Core.ModelElement.name>RC</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.3" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ffd">
  -          <Foundation.Core.ModelElement.name>Configuration</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Classifier.feature>
  -            <Foundation.Core.Attribute xmi.id="xmi.4" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fd6">
  -              <Foundation.Core.ModelElement.name>s_Instance</Foundation.Core.ModelElement.name>
  -              <Foundation.Core.ModelElement.visibility xmi.value="private"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.Feature.ownerScope xmi.value="classifier"/>
  -              <Foundation.Core.Attribute.initialValue>
  -                <Foundation.Data_Types.Expression xmi.id="xmi.5">
  -                  <Foundation.Data_Types.Expression.language>Java</Foundation.Data_Types.Expression.language>
  -                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  -                </Foundation.Data_Types.Expression>
  -              </Foundation.Core.Attribute.initialValue>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.3"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.StructuralFeature.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.3"/>
  -              </Foundation.Core.StructuralFeature.type>
  -            </Foundation.Core.Attribute>
  -            <Foundation.Core.Operation xmi.id="xmi.6" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fd5">
  -              <Foundation.Core.ModelElement.name>Configuration</Foundation.Core.ModelElement.name>
  -              <Foundation.Core.ModelElement.visibility xmi.value="protected"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.Feature.ownerScope xmi.value="classifier"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  -              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  -              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.3"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Operation.method>
  -                <Foundation.Core.Method xmi.idref="xmi.7"/>
  -              </Foundation.Core.Operation.method>
  -              <Foundation.Core.BehavioralFeature.parameter>
  -                <Foundation.Core.Parameter xmi.id="xmi.8" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fd4">
  -                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  -                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  -                  <Foundation.Core.Parameter.behavioralFeature>
  -                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.6"/>
  -                  </Foundation.Core.Parameter.behavioralFeature>
  -                  <Foundation.Core.Parameter.type>
  -                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  -                  </Foundation.Core.Parameter.type>
  -                </Foundation.Core.Parameter>
  -              </Foundation.Core.BehavioralFeature.parameter>
  -            </Foundation.Core.Operation>
  -            <Foundation.Core.Method xmi.id="xmi.7">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Method.body>
  -                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.10">
  -                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  -                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  -                </Foundation.Data_Types.ProcedureExpression>
  -              </Foundation.Core.Method.body>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.3"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Method.specification>
  -                <Foundation.Core.Operation xmi.idref="xmi.6"/>
  -              </Foundation.Core.Method.specification>
  -            </Foundation.Core.Method>
  -            <Foundation.Core.Operation xmi.id="xmi.11" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ffb">
  -              <Foundation.Core.ModelElement.name>getInstance</Foundation.Core.ModelElement.name>
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.Feature.ownerScope xmi.value="classifier"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  -              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  -              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.3"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Operation.method>
  -                <Foundation.Core.Method xmi.idref="xmi.12"/>
  -              </Foundation.Core.Operation.method>
  -              <Foundation.Core.BehavioralFeature.parameter>
  -                <Foundation.Core.Parameter xmi.id="xmi.13" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ffa">
  -                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  -                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  -                  <Foundation.Core.Parameter.behavioralFeature>
  -                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.11"/>
  -                  </Foundation.Core.Parameter.behavioralFeature>
  -                  <Foundation.Core.Parameter.type>
  -                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  -                  </Foundation.Core.Parameter.type>
  -                </Foundation.Core.Parameter>
  -              </Foundation.Core.BehavioralFeature.parameter>
  -            </Foundation.Core.Operation>
  -            <Foundation.Core.Method xmi.id="xmi.12">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Method.body>
  -                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.14">
  -                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  -                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  -                </Foundation.Data_Types.ProcedureExpression>
  -              </Foundation.Core.Method.body>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.3"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Method.specification>
  -                <Foundation.Core.Operation xmi.idref="xmi.11"/>
  -              </Foundation.Core.Method.specification>
  -            </Foundation.Core.Method>
  -          </Foundation.Core.Classifier.feature>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.15" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ffc">
  -          <Foundation.Core.ModelElement.name>FileOption</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Classifier.feature>
  -            <Foundation.Core.Operation xmi.id="xmi.16" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ff9">
  -              <Foundation.Core.ModelElement.name>Start</Foundation.Core.ModelElement.name>
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  -              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  -              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Operation.method>
  -                <Foundation.Core.Method xmi.idref="xmi.17"/>
  -              </Foundation.Core.Operation.method>
  -              <Foundation.Core.BehavioralFeature.parameter>
  -                <Foundation.Core.Parameter xmi.id="xmi.18" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ff8">
  -                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  -                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  -                  <Foundation.Core.Parameter.behavioralFeature>
  -                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.16"/>
  -                  </Foundation.Core.Parameter.behavioralFeature>
  -                  <Foundation.Core.Parameter.type>
  -                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  -                  </Foundation.Core.Parameter.type>
  -                </Foundation.Core.Parameter>
  -              </Foundation.Core.BehavioralFeature.parameter>
  -            </Foundation.Core.Operation>
  -            <Foundation.Core.Method xmi.id="xmi.17">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Method.body>
  -                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.19">
  -                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  -                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  -                </Foundation.Data_Types.ProcedureExpression>
  -              </Foundation.Core.Method.body>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Method.specification>
  -                <Foundation.Core.Operation xmi.idref="xmi.16"/>
  -              </Foundation.Core.Method.specification>
  -            </Foundation.Core.Method>
  -            <Foundation.Core.Operation xmi.id="xmi.20" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ff7">
  -              <Foundation.Core.ModelElement.name>Next</Foundation.Core.ModelElement.name>
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  -              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  -              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Operation.method>
  -                <Foundation.Core.Method xmi.idref="xmi.21"/>
  -              </Foundation.Core.Operation.method>
  -              <Foundation.Core.BehavioralFeature.parameter>
  -                <Foundation.Core.Parameter xmi.id="xmi.22" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ff6">
  -                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  -                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  -                  <Foundation.Core.Parameter.behavioralFeature>
  -                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.20"/>
  -                  </Foundation.Core.Parameter.behavioralFeature>
  -                  <Foundation.Core.Parameter.type>
  -                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  -                  </Foundation.Core.Parameter.type>
  -                </Foundation.Core.Parameter>
  -              </Foundation.Core.BehavioralFeature.parameter>
  -            </Foundation.Core.Operation>
  -            <Foundation.Core.Method xmi.id="xmi.21">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Method.body>
  -                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.23">
  -                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  -                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  -                </Foundation.Data_Types.ProcedureExpression>
  -              </Foundation.Core.Method.body>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Method.specification>
  -                <Foundation.Core.Operation xmi.idref="xmi.20"/>
  -              </Foundation.Core.Method.specification>
  -            </Foundation.Core.Method>
  -            <Foundation.Core.Operation xmi.id="xmi.24" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ff5">
  -              <Foundation.Core.ModelElement.name>IsEnd</Foundation.Core.ModelElement.name>
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  -              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  -              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Operation.method>
  -                <Foundation.Core.Method xmi.idref="xmi.25"/>
  -              </Foundation.Core.Operation.method>
  -              <Foundation.Core.BehavioralFeature.parameter>
  -                <Foundation.Core.Parameter xmi.id="xmi.26" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ff4">
  -                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  -                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  -                  <Foundation.Core.Parameter.behavioralFeature>
  -                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.24"/>
  -                  </Foundation.Core.Parameter.behavioralFeature>
  -                  <Foundation.Core.Parameter.type>
  -                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  -                  </Foundation.Core.Parameter.type>
  -                </Foundation.Core.Parameter>
  -              </Foundation.Core.BehavioralFeature.parameter>
  -            </Foundation.Core.Operation>
  -            <Foundation.Core.Method xmi.id="xmi.25">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Method.body>
  -                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.27">
  -                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  -                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  -                </Foundation.Data_Types.ProcedureExpression>
  -              </Foundation.Core.Method.body>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Method.specification>
  -                <Foundation.Core.Operation xmi.idref="xmi.24"/>
  -              </Foundation.Core.Method.specification>
  -            </Foundation.Core.Method>
  -            <Foundation.Core.Operation xmi.id="xmi.28" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ff3">
  -              <Foundation.Core.ModelElement.name>Current</Foundation.Core.ModelElement.name>
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  -              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  -              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Operation.method>
  -                <Foundation.Core.Method xmi.idref="xmi.29"/>
  -              </Foundation.Core.Operation.method>
  -              <Foundation.Core.BehavioralFeature.parameter>
  -                <Foundation.Core.Parameter xmi.id="xmi.30" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ff2">
  -                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  -                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  -                  <Foundation.Core.Parameter.behavioralFeature>
  -                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.28"/>
  -                  </Foundation.Core.Parameter.behavioralFeature>
  -                  <Foundation.Core.Parameter.type>
  -                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  -                  </Foundation.Core.Parameter.type>
  -                </Foundation.Core.Parameter>
  -              </Foundation.Core.BehavioralFeature.parameter>
  -            </Foundation.Core.Operation>
  -            <Foundation.Core.Method xmi.id="xmi.29">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Method.body>
  -                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.31">
  -                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  -                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  -                </Foundation.Data_Types.ProcedureExpression>
  -              </Foundation.Core.Method.body>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Method.specification>
  -                <Foundation.Core.Operation xmi.idref="xmi.28"/>
  -              </Foundation.Core.Method.specification>
  -            </Foundation.Core.Method>
  -            <Foundation.Core.Operation xmi.id="xmi.32" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ff1">
  -              <Foundation.Core.ModelElement.name>Parse</Foundation.Core.ModelElement.name>
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  -              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  -              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Operation.method>
  -                <Foundation.Core.Method xmi.idref="xmi.33"/>
  -              </Foundation.Core.Operation.method>
  -              <Foundation.Core.BehavioralFeature.parameter>
  -                <Foundation.Core.Parameter xmi.id="xmi.34" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ff0">
  -                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  -                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  -                  <Foundation.Core.Parameter.behavioralFeature>
  -                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.32"/>
  -                  </Foundation.Core.Parameter.behavioralFeature>
  -                  <Foundation.Core.Parameter.type>
  -                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  -                  </Foundation.Core.Parameter.type>
  -                </Foundation.Core.Parameter>
  -              </Foundation.Core.BehavioralFeature.parameter>
  -            </Foundation.Core.Operation>
  -            <Foundation.Core.Method xmi.id="xmi.33">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Method.body>
  -                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.35">
  -                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  -                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  -                </Foundation.Data_Types.ProcedureExpression>
  -              </Foundation.Core.Method.body>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Method.specification>
  -                <Foundation.Core.Operation xmi.idref="xmi.32"/>
  -              </Foundation.Core.Method.specification>
  -            </Foundation.Core.Method>
  -          </Foundation.Core.Classifier.feature>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.36" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ffb">
  -          <Foundation.Core.ModelElement.name>EnvironmentOption</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.37" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ffa">
  -          <Foundation.Core.ModelElement.name>CommandLineOption</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.38" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ff9">
  -          <Foundation.Core.ModelElement.name>Option</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Classifier.feature>
  -            <Foundation.Core.Attribute xmi.id="xmi.39" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe5">
  -              <Foundation.Core.ModelElement.name>nCount</Foundation.Core.ModelElement.name>
  -              <Foundation.Core.ModelElement.visibility xmi.value="private"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.StructuralFeature.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.40"/>
  -              </Foundation.Core.StructuralFeature.type>
  -            </Foundation.Core.Attribute>
  -            <Foundation.Core.Attribute xmi.id="xmi.41" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe4">
  -              <Foundation.Core.ModelElement.name>*pvElement</Foundation.Core.ModelElement.name>
  -              <Foundation.Core.ModelElement.visibility xmi.value="private"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.StructuralFeature.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  -              </Foundation.Core.StructuralFeature.type>
  -            </Foundation.Core.Attribute>
  -            <Foundation.Core.Operation xmi.id="xmi.42" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe3">
  -              <Foundation.Core.ModelElement.name>addElement</Foundation.Core.ModelElement.name>
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  -              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  -              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Operation.method>
  -                <Foundation.Core.Method xmi.idref="xmi.43"/>
  -              </Foundation.Core.Operation.method>
  -              <Foundation.Core.BehavioralFeature.parameter>
  -                <Foundation.Core.Parameter xmi.id="xmi.44" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe2">
  -                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  -                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  -                  <Foundation.Core.Parameter.behavioralFeature>
  -                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.42"/>
  -                  </Foundation.Core.Parameter.behavioralFeature>
  -                  <Foundation.Core.Parameter.type>
  -                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  -                  </Foundation.Core.Parameter.type>
  -                </Foundation.Core.Parameter>
  -              </Foundation.Core.BehavioralFeature.parameter>
  -            </Foundation.Core.Operation>
  -            <Foundation.Core.Method xmi.id="xmi.43">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Method.body>
  -                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.45">
  -                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  -                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  -                </Foundation.Data_Types.ProcedureExpression>
  -              </Foundation.Core.Method.body>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Method.specification>
  -                <Foundation.Core.Operation xmi.idref="xmi.42"/>
  -              </Foundation.Core.Method.specification>
  -            </Foundation.Core.Method>
  -            <Foundation.Core.Operation xmi.id="xmi.46" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe1">
  -              <Foundation.Core.ModelElement.name>delElement</Foundation.Core.ModelElement.name>
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  -              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  -              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Operation.method>
  -                <Foundation.Core.Method xmi.idref="xmi.47"/>
  -              </Foundation.Core.Operation.method>
  -              <Foundation.Core.BehavioralFeature.parameter>
  -                <Foundation.Core.Parameter xmi.id="xmi.48" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe0">
  -                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  -                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  -                  <Foundation.Core.Parameter.behavioralFeature>
  -                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.46"/>
  -                  </Foundation.Core.Parameter.behavioralFeature>
  -                  <Foundation.Core.Parameter.type>
  -                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  -                  </Foundation.Core.Parameter.type>
  -                </Foundation.Core.Parameter>
  -              </Foundation.Core.BehavioralFeature.parameter>
  -            </Foundation.Core.Operation>
  -            <Foundation.Core.Method xmi.id="xmi.47">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Method.body>
  -                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.49">
  -                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  -                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  -                </Foundation.Data_Types.ProcedureExpression>
  -              </Foundation.Core.Method.body>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Method.specification>
  -                <Foundation.Core.Operation xmi.idref="xmi.46"/>
  -              </Foundation.Core.Method.specification>
  -            </Foundation.Core.Method>
  -            <Foundation.Core.Operation xmi.id="xmi.50" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fdf">
  -              <Foundation.Core.ModelElement.name>getCount</Foundation.Core.ModelElement.name>
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  -              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  -              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Operation.method>
  -                <Foundation.Core.Method xmi.idref="xmi.51"/>
  -              </Foundation.Core.Operation.method>
  -              <Foundation.Core.BehavioralFeature.parameter>
  -                <Foundation.Core.Parameter xmi.id="xmi.52" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fde">
  -                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  -                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  -                  <Foundation.Core.Parameter.behavioralFeature>
  -                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.50"/>
  -                  </Foundation.Core.Parameter.behavioralFeature>
  -                  <Foundation.Core.Parameter.type>
  -                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  -                  </Foundation.Core.Parameter.type>
  -                </Foundation.Core.Parameter>
  -              </Foundation.Core.BehavioralFeature.parameter>
  -            </Foundation.Core.Operation>
  -            <Foundation.Core.Method xmi.id="xmi.51">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Method.body>
  -                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.53">
  -                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  -                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  -                </Foundation.Data_Types.ProcedureExpression>
  -              </Foundation.Core.Method.body>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Method.specification>
  -                <Foundation.Core.Operation xmi.idref="xmi.50"/>
  -              </Foundation.Core.Method.specification>
  -            </Foundation.Core.Method>
  -          </Foundation.Core.Classifier.feature>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Association xmi.id="xmi.54" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ff5">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.55" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ffa">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.id="xmi.56">
  -                  <Foundation.Data_Types.Multiplicity.range>
  -                    <Foundation.Data_Types.MultiplicityRange xmi.id="xmi.57">
  -                      <Foundation.Data_Types.MultiplicityRange.lower>0</Foundation.Data_Types.MultiplicityRange.lower>
  -                      <Foundation.Data_Types.MultiplicityRange.upper>1</Foundation.Data_Types.MultiplicityRange.upper>
  -                    </Foundation.Data_Types.MultiplicityRange>
  -                  </Foundation.Data_Types.Multiplicity.range>
  -                </Foundation.Data_Types.Multiplicity>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.54"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.36"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.58" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff9">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.54"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.3"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Core.Association xmi.id="xmi.59" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ff4">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.60" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff8">
  -              <Foundation.Core.ModelElement.name></Foundation.Core.ModelElement.name>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.56"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.59"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.61" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff7">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.id="xmi.62">
  -                  <Foundation.Data_Types.Multiplicity.range>
  -                    <Foundation.Data_Types.MultiplicityRange xmi.id="xmi.63">
  -                      <Foundation.Data_Types.MultiplicityRange.lower>1</Foundation.Data_Types.MultiplicityRange.lower>
  -                      <Foundation.Data_Types.MultiplicityRange.upper>1</Foundation.Data_Types.MultiplicityRange.upper>
  -                    </Foundation.Data_Types.MultiplicityRange>
  -                  </Foundation.Data_Types.Multiplicity.range>
  -                </Foundation.Data_Types.Multiplicity>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.59"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.3"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Core.Association xmi.id="xmi.64" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ff3">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.65" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff6">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.56"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.64"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.37"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.66" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff5">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.64"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.3"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Core.Association xmi.id="xmi.67" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fed">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.68" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff4">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.67"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.2"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.69" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff3">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.67"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.3"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Core.Class xmi.id="xmi.70" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fec">
  -          <Foundation.Core.ModelElement.name>Logger</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Association xmi.id="xmi.71" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fea">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.72" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff2">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.71"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.70"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.73" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff1">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.71"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.2"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Core.Class xmi.id="xmi.74" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe9">
  -          <Foundation.Core.ModelElement.name>Processor</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Association xmi.id="xmi.75" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe8">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.76" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff0">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.56"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.75"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.74"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.77" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fef">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.75"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.2"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Core.Class xmi.id="xmi.78" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe7">
  -          <Foundation.Core.ModelElement.name>Script</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Classifier.feature>
  -            <Foundation.Core.Attribute xmi.id="xmi.79" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ffd">
  -              <Foundation.Core.ModelElement.name>eLang</Foundation.Core.ModelElement.name>
  -              <Foundation.Core.ModelElement.visibility xmi.value="private"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.Attribute.initialValue>
  -                <Foundation.Data_Types.Expression xmi.id="xmi.80">
  -                  <Foundation.Data_Types.Expression.language>Java</Foundation.Data_Types.Expression.language>
  -                  <Foundation.Data_Types.Expression.body>0</Foundation.Data_Types.Expression.body>
  -                </Foundation.Data_Types.Expression>
  -              </Foundation.Core.Attribute.initialValue>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.78"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.StructuralFeature.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.81"/>
  -              </Foundation.Core.StructuralFeature.type>
  -            </Foundation.Core.Attribute>
  -          </Foundation.Core.Classifier.feature>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.82" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe6">
  -          <Foundation.Core.ModelElement.name>RCFile</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.GeneralizableElement.generalization>
  -            <Foundation.Core.Generalization xmi.idref="xmi.83"/>
  -          </Foundation.Core.GeneralizableElement.generalization>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.84" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe5">
  -          <Foundation.Core.ModelElement.name>FuncFile</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.GeneralizableElement.generalization>
  -            <Foundation.Core.Generalization xmi.idref="xmi.85"/>
  -          </Foundation.Core.GeneralizableElement.generalization>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.86" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe4">
  -          <Foundation.Core.ModelElement.name>File</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="true"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.GeneralizableElement.specialization>
  -            <Foundation.Core.Generalization xmi.idref="xmi.83"/>
  -            <Foundation.Core.Generalization xmi.idref="xmi.85"/>
  -          </Foundation.Core.GeneralizableElement.specialization>
  -          <Foundation.Core.Classifier.feature>
  -            <Foundation.Core.Attribute xmi.id="xmi.87" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ffc">
  -              <Foundation.Core.ModelElement.name>*szName</Foundation.Core.ModelElement.name>
  -              <Foundation.Core.ModelElement.visibility xmi.value="private"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.86"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.StructuralFeature.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.88"/>
  -              </Foundation.Core.StructuralFeature.type>
  -            </Foundation.Core.Attribute>
  -            <Foundation.Core.Operation xmi.id="xmi.89" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ffd">
  -              <Foundation.Core.ModelElement.name>getName</Foundation.Core.ModelElement.name>
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  -              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  -              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.86"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Operation.method>
  -                <Foundation.Core.Method xmi.idref="xmi.90"/>
  -              </Foundation.Core.Operation.method>
  -              <Foundation.Core.BehavioralFeature.parameter>
  -                <Foundation.Core.Parameter xmi.id="xmi.91" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ffc">
  -                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  -                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  -                  <Foundation.Core.Parameter.behavioralFeature>
  -                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.89"/>
  -                  </Foundation.Core.Parameter.behavioralFeature>
  -                  <Foundation.Core.Parameter.type>
  -                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  -                  </Foundation.Core.Parameter.type>
  -                </Foundation.Core.Parameter>
  -              </Foundation.Core.BehavioralFeature.parameter>
  -            </Foundation.Core.Operation>
  -            <Foundation.Core.Method xmi.id="xmi.90">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Method.body>
  -                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.92">
  -                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  -                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  -                </Foundation.Data_Types.ProcedureExpression>
  -              </Foundation.Core.Method.body>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.86"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Method.specification>
  -                <Foundation.Core.Operation xmi.idref="xmi.89"/>
  -              </Foundation.Core.Method.specification>
  -            </Foundation.Core.Method>
  -          </Foundation.Core.Classifier.feature>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Generalization xmi.id="xmi.83" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe2">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Generalization.child>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.82"/>
  -          </Foundation.Core.Generalization.child>
  -          <Foundation.Core.Generalization.parent>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.86"/>
  -          </Foundation.Core.Generalization.parent>
  -        </Foundation.Core.Generalization>
  -        <Foundation.Core.Generalization xmi.id="xmi.85" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe1">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Generalization.child>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.84"/>
  -          </Foundation.Core.Generalization.child>
  -          <Foundation.Core.Generalization.parent>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.86"/>
  -          </Foundation.Core.Generalization.parent>
  -        </Foundation.Core.Generalization>
  -        <Foundation.Core.Association xmi.id="xmi.93" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fdf">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.94" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fee">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.id="xmi.95">
  -                  <Foundation.Data_Types.Multiplicity.range>
  -                    <Foundation.Data_Types.MultiplicityRange xmi.id="xmi.96">
  -                      <Foundation.Data_Types.MultiplicityRange.lower>1</Foundation.Data_Types.MultiplicityRange.lower>
  -                      <Foundation.Data_Types.MultiplicityRange.upper>-1</Foundation.Data_Types.MultiplicityRange.upper>
  -                    </Foundation.Data_Types.MultiplicityRange>
  -                  </Foundation.Data_Types.Multiplicity.range>
  -                </Foundation.Data_Types.Multiplicity>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.93"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.82"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.97" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fed">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.93"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.74"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Core.Association xmi.id="xmi.98" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fde">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.99" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fec">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.95"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.98"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.78"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.100" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7feb">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.98"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.74"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Core.Association xmi.id="xmi.101" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fdd">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.102" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fea">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.56"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.101"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.84"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.103" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe9">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.101"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.74"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.104">
  -          <Foundation.Core.ModelElement.name>Adapter</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Extension_Mechanisms.Stereotype.extendedElement>
  -            <Foundation.Core.ModelElement xmi.idref="xmi.70"/>
  -          </Foundation.Extension_Mechanisms.Stereotype.extendedElement>
  -        </Foundation.Extension_Mechanisms.Stereotype>
  -        <Foundation.Core.Class xmi.id="xmi.105" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fdc">
  -          <Foundation.Core.ModelElement.name>ConfigSection</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.GeneralizableElement.generalization>
  -            <Foundation.Core.Generalization xmi.idref="xmi.106"/>
  -          </Foundation.Core.GeneralizableElement.generalization>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.107" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fdb">
  -          <Foundation.Core.ModelElement.name>DefaultSection</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.GeneralizableElement.generalization>
  -            <Foundation.Core.Generalization xmi.idref="xmi.108"/>
  -          </Foundation.Core.GeneralizableElement.generalization>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.109" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fda">
  -          <Foundation.Core.ModelElement.name>ErrorSection</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.GeneralizableElement.generalization>
  -            <Foundation.Core.Generalization xmi.idref="xmi.110"/>
  -          </Foundation.Core.GeneralizableElement.generalization>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.111" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fd9">
  -          <Foundation.Core.ModelElement.name>CommonSection</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.GeneralizableElement.generalization>
  -            <Foundation.Core.Generalization xmi.idref="xmi.112"/>
  -          </Foundation.Core.GeneralizableElement.generalization>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.113" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fd8">
  -          <Foundation.Core.ModelElement.name>UserSection</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.GeneralizableElement.generalization>
  -            <Foundation.Core.Generalization xmi.idref="xmi.114"/>
  -          </Foundation.Core.GeneralizableElement.generalization>
  -          <Foundation.Core.Classifier.feature>
  -            <Foundation.Core.Attribute xmi.id="xmi.115" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ffb">
  -              <Foundation.Core.ModelElement.name>eLang</Foundation.Core.ModelElement.name>
  -              <Foundation.Core.ModelElement.visibility xmi.value="private"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.Attribute.initialValue>
  -                <Foundation.Data_Types.Expression xmi.id="xmi.116">
  -                  <Foundation.Data_Types.Expression.language>Java</Foundation.Data_Types.Expression.language>
  -                  <Foundation.Data_Types.Expression.body>0</Foundation.Data_Types.Expression.body>
  -                </Foundation.Data_Types.Expression>
  -              </Foundation.Core.Attribute.initialValue>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.113"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.StructuralFeature.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.81"/>
  -              </Foundation.Core.StructuralFeature.type>
  -            </Foundation.Core.Attribute>
  -          </Foundation.Core.Classifier.feature>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.117" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fd7">
  -          <Foundation.Core.ModelElement.name>Section</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="true"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.GeneralizableElement.specialization>
  -            <Foundation.Core.Generalization xmi.idref="xmi.110"/>
  -            <Foundation.Core.Generalization xmi.idref="xmi.108"/>
  -            <Foundation.Core.Generalization xmi.idref="xmi.106"/>
  -            <Foundation.Core.Generalization xmi.idref="xmi.112"/>
  -            <Foundation.Core.Generalization xmi.idref="xmi.114"/>
  -          </Foundation.Core.GeneralizableElement.specialization>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Generalization xmi.id="xmi.110" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fd0">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Generalization.child>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.109"/>
  -          </Foundation.Core.Generalization.child>
  -          <Foundation.Core.Generalization.parent>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.117"/>
  -          </Foundation.Core.Generalization.parent>
  -        </Foundation.Core.Generalization>
  -        <Foundation.Core.Generalization xmi.id="xmi.108" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fcf">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Generalization.child>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.107"/>
  -          </Foundation.Core.Generalization.child>
  -          <Foundation.Core.Generalization.parent>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.117"/>
  -          </Foundation.Core.Generalization.parent>
  -        </Foundation.Core.Generalization>
  -        <Foundation.Core.Generalization xmi.id="xmi.106" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fce">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Generalization.child>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.105"/>
  -          </Foundation.Core.Generalization.child>
  -          <Foundation.Core.Generalization.parent>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.117"/>
  -          </Foundation.Core.Generalization.parent>
  -        </Foundation.Core.Generalization>
  -        <Foundation.Core.Generalization xmi.id="xmi.112" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fcd">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Generalization.child>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.111"/>
  -          </Foundation.Core.Generalization.child>
  -          <Foundation.Core.Generalization.parent>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.117"/>
  -          </Foundation.Core.Generalization.parent>
  -        </Foundation.Core.Generalization>
  -        <Foundation.Core.Generalization xmi.id="xmi.114" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fcc">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Generalization.child>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.113"/>
  -          </Foundation.Core.Generalization.child>
  -          <Foundation.Core.Generalization.parent>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.117"/>
  -          </Foundation.Core.Generalization.parent>
  -        </Foundation.Core.Generalization>
  -        <Foundation.Core.Association xmi.id="xmi.118" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fc3">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.119" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe8">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.56"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.118"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.111"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.120" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe7">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.118"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.86"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Core.Association xmi.id="xmi.121" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fc1">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.122" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe6">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.id="xmi.123">
  -                  <Foundation.Data_Types.Multiplicity.range>
  -                    <Foundation.Data_Types.MultiplicityRange xmi.id="xmi.124">
  -                      <Foundation.Data_Types.MultiplicityRange.lower>0</Foundation.Data_Types.MultiplicityRange.lower>
  -                      <Foundation.Data_Types.MultiplicityRange.upper>-1</Foundation.Data_Types.MultiplicityRange.upper>
  -                    </Foundation.Data_Types.MultiplicityRange>
  -                  </Foundation.Data_Types.Multiplicity.range>
  -                </Foundation.Data_Types.Multiplicity>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.121"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.113"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.125" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe5">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.121"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.86"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Core.Class xmi.id="xmi.126" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fbd">
  -          <Foundation.Core.ModelElement.name>Translator</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.127" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fbc">
  -          <Foundation.Core.ModelElement.name>SyntaxTree</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.128" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fbb">
  -          <Foundation.Core.ModelElement.name>SymbolTable</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Association xmi.id="xmi.129" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fb7">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.130" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe4">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.129"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.127"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.131" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe3">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.129"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.126"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Core.Association xmi.id="xmi.132" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fb6">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.133" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe2">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.56"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.132"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.126"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.134" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe1">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.132"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.74"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Core.Association xmi.id="xmi.135" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fb5">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.136" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe0">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.135"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.128"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.137" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fdf">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.135"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.126"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.138">
  -          <Foundation.Core.ModelElement.name>Mediator</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -        </Foundation.Extension_Mechanisms.Stereotype>
  -        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.139">
  -          <Foundation.Core.ModelElement.name>Singleton</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Extension_Mechanisms.Stereotype.extendedElement>
  -            <Foundation.Core.ModelElement xmi.idref="xmi.3"/>
  -          </Foundation.Extension_Mechanisms.Stereotype.extendedElement>
  -        </Foundation.Extension_Mechanisms.Stereotype>
  -        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.140">
  -          <Foundation.Core.ModelElement.name>Interpreter</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -        </Foundation.Extension_Mechanisms.Stereotype>
  -        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.141">
  -          <Foundation.Core.ModelElement.name>Interpreter</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -        </Foundation.Extension_Mechanisms.Stereotype>
  -        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.142">
  -          <Foundation.Core.ModelElement.name>Iterator</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Extension_Mechanisms.Stereotype.extendedElement>
  -            <Foundation.Core.ModelElement xmi.idref="xmi.36"/>
  -            <Foundation.Core.ModelElement xmi.idref="xmi.15"/>
  -            <Foundation.Core.ModelElement xmi.idref="xmi.37"/>
  -          </Foundation.Extension_Mechanisms.Stereotype.extendedElement>
  -        </Foundation.Extension_Mechanisms.Stereotype>
  -        <Behavioral_Elements.Use_Cases.Actor xmi.id="xmi.143" xmi.uuid="-64--88-100-101-357e9a:ebcd920152:-7ffb">
  -          <Foundation.Core.ModelElement.name>OpenPKG</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -        </Behavioral_Elements.Use_Cases.Actor>
  -        <Behavioral_Elements.Use_Cases.UseCase xmi.id="xmi.144" xmi.uuid="-64--88-100-101-357e9a:ebcd920152:-7ff8">
  -          <Foundation.Core.ModelElement.name>ReadConfig</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.GeneralizableElement.specialization>
  -            <Foundation.Core.Generalization xmi.idref="xmi.145"/>
  -          </Foundation.Core.GeneralizableElement.specialization>
  -        </Behavioral_Elements.Use_Cases.UseCase>
  -        <Behavioral_Elements.Use_Cases.UseCase xmi.id="xmi.146" xmi.uuid="-64--88-100-101-357e9a:ebcd920152:-7ff7">
  -          <Foundation.Core.ModelElement.name>RunCommands</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.GeneralizableElement.generalization>
  -            <Foundation.Core.Generalization xmi.idref="xmi.145"/>
  -          </Foundation.Core.GeneralizableElement.generalization>
  -        </Behavioral_Elements.Use_Cases.UseCase>
  -        <Foundation.Core.Generalization xmi.id="xmi.145" xmi.uuid="-64--88-100-101-357e9a:ebcd920152:-7ff6">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Generalization.child>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.146"/>
  -          </Foundation.Core.Generalization.child>
  -          <Foundation.Core.Generalization.parent>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.144"/>
  -          </Foundation.Core.Generalization.parent>
  -        </Foundation.Core.Generalization>
  -        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.147">
  -          <Foundation.Core.ModelElement.name>include</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -        </Foundation.Extension_Mechanisms.Stereotype>
  -        <Foundation.Core.Association xmi.id="xmi.148" xmi.uuid="-64--88-100-101-357e9a:ebcd920152:-7ff5">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.149" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fd8">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.148"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.143"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.150" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fd7">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.148"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.146"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.151">
  -          <Foundation.Core.ModelElement.name>extend</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -        </Foundation.Extension_Mechanisms.Stereotype>
  -        <Foundation.Core.Class xmi.id="xmi.40">
  -          <Foundation.Core.ModelElement.name>int</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.88">
  -          <Foundation.Core.ModelElement.name>char</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.81">
  -          <Foundation.Core.ModelElement.name>enum</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.9">
  -          <Foundation.Core.ModelElement.name>void</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Association xmi.id="xmi.152" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fee">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.153" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fed">
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.ordering xmi.value="unordered"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.targetScope xmi.value="instance"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.changeability xmi.value="changeable"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.152"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.154" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fec">
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.152"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.36"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Core.Association xmi.id="xmi.155" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7feb">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.156" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fea">
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.ordering xmi.value="unordered"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.targetScope xmi.value="instance"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.changeability xmi.value="changeable"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.155"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.157" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe9">
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.155"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Core.Association xmi.id="xmi.158" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe8">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.159" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe7">
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.ordering xmi.value="unordered"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.targetScope xmi.value="instance"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.changeability xmi.value="changeable"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.158"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.160" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe6">
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.158"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.37"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Core.Association xmi.id="xmi.161" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fda">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.162" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fd9">
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.ordering xmi.value="unordered"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.targetScope xmi.value="instance"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.56"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.changeability xmi.value="changeable"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.161"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.109"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.163" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fd8">
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.161"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.86"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Core.Association xmi.id="xmi.164" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fd4">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.165" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fd3">
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.ordering xmi.value="unordered"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.targetScope xmi.value="instance"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.56"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.changeability xmi.value="changeable"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.164"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.107"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.166" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fd2">
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.164"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.86"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Core.Association xmi.id="xmi.167" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fd1">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.168" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fd0">
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.ordering xmi.value="unordered"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.targetScope xmi.value="instance"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.56"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.changeability xmi.value="changeable"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.167"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.105"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.169" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fcf">
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.167"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.86"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -      </Foundation.Core.Namespace.ownedElement>
  -    </Model_Management.Model>
  -  </XMI.content>
  +<?xml version="1.0" encoding="UTF-8"?>
  +<XMI xmi.version="1.0">
  +  <XMI.header>
  +    <XMI.documentation>
  +      <XMI.exporter>Novosoft UML Library</XMI.exporter>
  +      <XMI.exporterVersion>0.4.19</XMI.exporterVersion>
  +    </XMI.documentation>
  +    <XMI.metamodel xmi.name="UML" xmi.version="1.3"/>
  +  </XMI.header>
  +  <XMI.content>
  +    <Model_Management.Model xmi.id="xmi.1" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-8000">
  +      <Foundation.Core.ModelElement.name>OSSPRC</Foundation.Core.ModelElement.name>
  +      <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +      <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +      <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +      <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +      <Foundation.Core.Namespace.ownedElement>
  +        <Foundation.Core.Class xmi.id="xmi.2" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fff">
  +          <Foundation.Core.ModelElement.name>RC</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Class xmi.id="xmi.3" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ffd">
  +          <Foundation.Core.ModelElement.name>Configuration</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Classifier.feature>
  +            <Foundation.Core.Attribute xmi.id="xmi.4" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fd6">
  +              <Foundation.Core.ModelElement.name>s_Instance</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="private"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="classifier"/>
  +              <Foundation.Core.Attribute.initialValue>
  +                <Foundation.Data_Types.Expression xmi.id="xmi.5">
  +                  <Foundation.Data_Types.Expression.language>Java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.Expression>
  +              </Foundation.Core.Attribute.initialValue>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.3"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.StructuralFeature.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.3"/>
  +              </Foundation.Core.StructuralFeature.type>
  +            </Foundation.Core.Attribute>
  +            <Foundation.Core.Operation xmi.id="xmi.6" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fd5">
  +              <Foundation.Core.ModelElement.name>Configuration</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="protected"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="classifier"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.3"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.7"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.8" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fd4">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.6"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.7">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.10">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.3"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.6"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.11" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ffb">
  +              <Foundation.Core.ModelElement.name>getInstance</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="classifier"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.3"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.12"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.13" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ffa">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.11"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.12">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.14">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.3"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.11"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +          </Foundation.Core.Classifier.feature>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Class xmi.id="xmi.15" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ffc">
  +          <Foundation.Core.ModelElement.name>FileOption</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Classifier.feature>
  +            <Foundation.Core.Operation xmi.id="xmi.16" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ff9">
  +              <Foundation.Core.ModelElement.name>Start</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.17"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.18" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ff8">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.16"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.17">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.19">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.16"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.20" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ff7">
  +              <Foundation.Core.ModelElement.name>Next</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.21"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.22" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ff6">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.20"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.21">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.23">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.20"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.24" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ff5">
  +              <Foundation.Core.ModelElement.name>IsEnd</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.25"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.26" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ff4">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.24"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.25">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.27">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.24"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.28" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ff3">
  +              <Foundation.Core.ModelElement.name>Current</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.29"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.30" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ff2">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.28"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.29">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.31">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.28"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.32" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ff1">
  +              <Foundation.Core.ModelElement.name>Parse</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.33"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.34" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ff0">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.32"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.33">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.35">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.32"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +          </Foundation.Core.Classifier.feature>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Class xmi.id="xmi.36" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ffb">
  +          <Foundation.Core.ModelElement.name>EnvironmentOption</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Class xmi.id="xmi.37" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ffa">
  +          <Foundation.Core.ModelElement.name>CommandLineOption</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Class xmi.id="xmi.38" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ff9">
  +          <Foundation.Core.ModelElement.name>Option</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Classifier.feature>
  +            <Foundation.Core.Attribute xmi.id="xmi.39" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe5">
  +              <Foundation.Core.ModelElement.name>nCount</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="private"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.StructuralFeature.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.40"/>
  +              </Foundation.Core.StructuralFeature.type>
  +            </Foundation.Core.Attribute>
  +            <Foundation.Core.Attribute xmi.id="xmi.41" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe4">
  +              <Foundation.Core.ModelElement.name>*pvElement</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="private"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.StructuralFeature.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  +              </Foundation.Core.StructuralFeature.type>
  +            </Foundation.Core.Attribute>
  +            <Foundation.Core.Operation xmi.id="xmi.42" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe3">
  +              <Foundation.Core.ModelElement.name>addElement</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.43"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.44" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe2">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.42"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.43">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.45">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.42"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.46" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe1">
  +              <Foundation.Core.ModelElement.name>delElement</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.47"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.48" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe0">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.46"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.47">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.49">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.46"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.50" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fdf">
  +              <Foundation.Core.ModelElement.name>getCount</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.51"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.52" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fde">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.50"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.51">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.53">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.50"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +          </Foundation.Core.Classifier.feature>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Association xmi.id="xmi.54" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ff5">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.55" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ffa">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.id="xmi.56">
  +                  <Foundation.Data_Types.Multiplicity.range>
  +                    <Foundation.Data_Types.MultiplicityRange xmi.id="xmi.57">
  +                      <Foundation.Data_Types.MultiplicityRange.lower>0</Foundation.Data_Types.MultiplicityRange.lower>
  +                      <Foundation.Data_Types.MultiplicityRange.upper>1</Foundation.Data_Types.MultiplicityRange.upper>
  +                    </Foundation.Data_Types.MultiplicityRange>
  +                  </Foundation.Data_Types.Multiplicity.range>
  +                </Foundation.Data_Types.Multiplicity>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.54"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.36"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.58" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff9">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.54"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.3"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Core.Association xmi.id="xmi.59" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ff4">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.60" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff8">
  +              <Foundation.Core.ModelElement.name></Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.56"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.59"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.61" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff7">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.id="xmi.62">
  +                  <Foundation.Data_Types.Multiplicity.range>
  +                    <Foundation.Data_Types.MultiplicityRange xmi.id="xmi.63">
  +                      <Foundation.Data_Types.MultiplicityRange.lower>1</Foundation.Data_Types.MultiplicityRange.lower>
  +                      <Foundation.Data_Types.MultiplicityRange.upper>1</Foundation.Data_Types.MultiplicityRange.upper>
  +                    </Foundation.Data_Types.MultiplicityRange>
  +                  </Foundation.Data_Types.Multiplicity.range>
  +                </Foundation.Data_Types.Multiplicity>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.59"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.3"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Core.Association xmi.id="xmi.64" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ff3">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.65" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff6">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.56"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.64"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.37"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.66" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff5">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.64"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.3"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Core.Association xmi.id="xmi.67" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fed">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.68" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff4">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.67"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.2"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.69" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff3">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.67"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.3"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Core.Class xmi.id="xmi.70" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fec">
  +          <Foundation.Core.ModelElement.name>Logger</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Association xmi.id="xmi.71" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fea">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.72" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff2">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.71"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.70"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.73" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff1">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.71"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.2"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Core.Class xmi.id="xmi.74" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe9">
  +          <Foundation.Core.ModelElement.name>Processor</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Association xmi.id="xmi.75" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe8">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.76" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff0">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.56"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.75"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.74"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.77" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fef">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.75"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.2"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Core.Class xmi.id="xmi.78" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe7">
  +          <Foundation.Core.ModelElement.name>Script</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Classifier.feature>
  +            <Foundation.Core.Attribute xmi.id="xmi.79" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ffd">
  +              <Foundation.Core.ModelElement.name>eLang</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="private"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Attribute.initialValue>
  +                <Foundation.Data_Types.Expression xmi.id="xmi.80">
  +                  <Foundation.Data_Types.Expression.language>Java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body>0</Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.Expression>
  +              </Foundation.Core.Attribute.initialValue>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.78"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.StructuralFeature.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.81"/>
  +              </Foundation.Core.StructuralFeature.type>
  +            </Foundation.Core.Attribute>
  +          </Foundation.Core.Classifier.feature>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Class xmi.id="xmi.82" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe6">
  +          <Foundation.Core.ModelElement.name>RCFile</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.GeneralizableElement.generalization>
  +            <Foundation.Core.Generalization xmi.idref="xmi.83"/>
  +          </Foundation.Core.GeneralizableElement.generalization>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Class xmi.id="xmi.84" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe5">
  +          <Foundation.Core.ModelElement.name>FuncFile</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.GeneralizableElement.generalization>
  +            <Foundation.Core.Generalization xmi.idref="xmi.85"/>
  +          </Foundation.Core.GeneralizableElement.generalization>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Class xmi.id="xmi.86" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe4">
  +          <Foundation.Core.ModelElement.name>File</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="true"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.GeneralizableElement.specialization>
  +            <Foundation.Core.Generalization xmi.idref="xmi.83"/>
  +            <Foundation.Core.Generalization xmi.idref="xmi.85"/>
  +          </Foundation.Core.GeneralizableElement.specialization>
  +          <Foundation.Core.Classifier.feature>
  +            <Foundation.Core.Attribute xmi.id="xmi.87" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ffc">
  +              <Foundation.Core.ModelElement.name>*szName</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="private"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.86"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.StructuralFeature.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.88"/>
  +              </Foundation.Core.StructuralFeature.type>
  +            </Foundation.Core.Attribute>
  +            <Foundation.Core.Operation xmi.id="xmi.89" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ffd">
  +              <Foundation.Core.ModelElement.name>getName</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.86"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.90"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.91" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ffc">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.89"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.90">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.92">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.86"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.89"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +          </Foundation.Core.Classifier.feature>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Generalization xmi.id="xmi.83" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe2">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Generalization.child>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.82"/>
  +          </Foundation.Core.Generalization.child>
  +          <Foundation.Core.Generalization.parent>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.86"/>
  +          </Foundation.Core.Generalization.parent>
  +        </Foundation.Core.Generalization>
  +        <Foundation.Core.Generalization xmi.id="xmi.85" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe1">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Generalization.child>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.84"/>
  +          </Foundation.Core.Generalization.child>
  +          <Foundation.Core.Generalization.parent>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.86"/>
  +          </Foundation.Core.Generalization.parent>
  +        </Foundation.Core.Generalization>
  +        <Foundation.Core.Association xmi.id="xmi.93" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fdf">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.94" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fee">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.id="xmi.95">
  +                  <Foundation.Data_Types.Multiplicity.range>
  +                    <Foundation.Data_Types.MultiplicityRange xmi.id="xmi.96">
  +                      <Foundation.Data_Types.MultiplicityRange.lower>1</Foundation.Data_Types.MultiplicityRange.lower>
  +                      <Foundation.Data_Types.MultiplicityRange.upper>-1</Foundation.Data_Types.MultiplicityRange.upper>
  +                    </Foundation.Data_Types.MultiplicityRange>
  +                  </Foundation.Data_Types.Multiplicity.range>
  +                </Foundation.Data_Types.Multiplicity>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.93"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.82"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.97" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fed">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.93"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.74"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Core.Association xmi.id="xmi.98" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fde">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.99" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fec">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.95"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.98"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.78"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.100" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7feb">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.98"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.74"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Core.Association xmi.id="xmi.101" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fdd">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.102" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fea">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.56"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.101"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.84"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.103" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe9">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.101"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.74"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.104">
  +          <Foundation.Core.ModelElement.name>Adapter</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Extension_Mechanisms.Stereotype.extendedElement>
  +            <Foundation.Core.ModelElement xmi.idref="xmi.70"/>
  +          </Foundation.Extension_Mechanisms.Stereotype.extendedElement>
  +        </Foundation.Extension_Mechanisms.Stereotype>
  +        <Foundation.Core.Class xmi.id="xmi.105" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fdc">
  +          <Foundation.Core.ModelElement.name>ConfigSection</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.GeneralizableElement.generalization>
  +            <Foundation.Core.Generalization xmi.idref="xmi.106"/>
  +          </Foundation.Core.GeneralizableElement.generalization>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Class xmi.id="xmi.107" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fdb">
  +          <Foundation.Core.ModelElement.name>DefaultSection</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.GeneralizableElement.generalization>
  +            <Foundation.Core.Generalization xmi.idref="xmi.108"/>
  +          </Foundation.Core.GeneralizableElement.generalization>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Class xmi.id="xmi.109" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fda">
  +          <Foundation.Core.ModelElement.name>ErrorSection</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.GeneralizableElement.generalization>
  +            <Foundation.Core.Generalization xmi.idref="xmi.110"/>
  +          </Foundation.Core.GeneralizableElement.generalization>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Class xmi.id="xmi.111" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fd9">
  +          <Foundation.Core.ModelElement.name>CommonSection</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.GeneralizableElement.generalization>
  +            <Foundation.Core.Generalization xmi.idref="xmi.112"/>
  +          </Foundation.Core.GeneralizableElement.generalization>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Class xmi.id="xmi.113" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fd8">
  +          <Foundation.Core.ModelElement.name>UserSection</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.GeneralizableElement.generalization>
  +            <Foundation.Core.Generalization xmi.idref="xmi.114"/>
  +          </Foundation.Core.GeneralizableElement.generalization>
  +          <Foundation.Core.Classifier.feature>
  +            <Foundation.Core.Attribute xmi.id="xmi.115" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ffb">
  +              <Foundation.Core.ModelElement.name>eLang</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="private"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Attribute.initialValue>
  +                <Foundation.Data_Types.Expression xmi.id="xmi.116">
  +                  <Foundation.Data_Types.Expression.language>Java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body>0</Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.Expression>
  +              </Foundation.Core.Attribute.initialValue>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.113"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.StructuralFeature.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.81"/>
  +              </Foundation.Core.StructuralFeature.type>
  +            </Foundation.Core.Attribute>
  +          </Foundation.Core.Classifier.feature>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Class xmi.id="xmi.117" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fd7">
  +          <Foundation.Core.ModelElement.name>Section</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="true"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.GeneralizableElement.specialization>
  +            <Foundation.Core.Generalization xmi.idref="xmi.110"/>
  +            <Foundation.Core.Generalization xmi.idref="xmi.108"/>
  +            <Foundation.Core.Generalization xmi.idref="xmi.106"/>
  +            <Foundation.Core.Generalization xmi.idref="xmi.112"/>
  +            <Foundation.Core.Generalization xmi.idref="xmi.114"/>
  +          </Foundation.Core.GeneralizableElement.specialization>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Generalization xmi.id="xmi.110" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fd0">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Generalization.child>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.109"/>
  +          </Foundation.Core.Generalization.child>
  +          <Foundation.Core.Generalization.parent>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.117"/>
  +          </Foundation.Core.Generalization.parent>
  +        </Foundation.Core.Generalization>
  +        <Foundation.Core.Generalization xmi.id="xmi.108" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fcf">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Generalization.child>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.107"/>
  +          </Foundation.Core.Generalization.child>
  +          <Foundation.Core.Generalization.parent>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.117"/>
  +          </Foundation.Core.Generalization.parent>
  +        </Foundation.Core.Generalization>
  +        <Foundation.Core.Generalization xmi.id="xmi.106" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fce">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Generalization.child>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.105"/>
  +          </Foundation.Core.Generalization.child>
  +          <Foundation.Core.Generalization.parent>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.117"/>
  +          </Foundation.Core.Generalization.parent>
  +        </Foundation.Core.Generalization>
  +        <Foundation.Core.Generalization xmi.id="xmi.112" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fcd">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Generalization.child>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.111"/>
  +          </Foundation.Core.Generalization.child>
  +          <Foundation.Core.Generalization.parent>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.117"/>
  +          </Foundation.Core.Generalization.parent>
  +        </Foundation.Core.Generalization>
  +        <Foundation.Core.Generalization xmi.id="xmi.114" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fcc">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Generalization.child>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.113"/>
  +          </Foundation.Core.Generalization.child>
  +          <Foundation.Core.Generalization.parent>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.117"/>
  +          </Foundation.Core.Generalization.parent>
  +        </Foundation.Core.Generalization>
  +        <Foundation.Core.Association xmi.id="xmi.118" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fc3">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.119" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe8">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.56"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.118"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.111"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.120" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe7">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.118"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.86"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Core.Association xmi.id="xmi.121" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fc1">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.122" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe6">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.id="xmi.123">
  +                  <Foundation.Data_Types.Multiplicity.range>
  +                    <Foundation.Data_Types.MultiplicityRange xmi.id="xmi.124">
  +                      <Foundation.Data_Types.MultiplicityRange.lower>0</Foundation.Data_Types.MultiplicityRange.lower>
  +                      <Foundation.Data_Types.MultiplicityRange.upper>-1</Foundation.Data_Types.MultiplicityRange.upper>
  +                    </Foundation.Data_Types.MultiplicityRange>
  +                  </Foundation.Data_Types.Multiplicity.range>
  +                </Foundation.Data_Types.Multiplicity>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.121"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.113"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.125" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe5">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.121"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.86"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Core.Class xmi.id="xmi.126" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fbd">
  +          <Foundation.Core.ModelElement.name>Translator</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Class xmi.id="xmi.127" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fbc">
  +          <Foundation.Core.ModelElement.name>SyntaxTree</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Class xmi.id="xmi.128" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fbb">
  +          <Foundation.Core.ModelElement.name>SymbolTable</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Association xmi.id="xmi.129" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fb7">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.130" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe4">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.129"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.127"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.131" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe3">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.129"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.126"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Core.Association xmi.id="xmi.132" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fb6">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.133" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe2">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.56"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.132"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.126"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.134" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe1">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.132"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.74"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Core.Association xmi.id="xmi.135" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fb5">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.136" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe0">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.135"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.128"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.137" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fdf">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.135"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.126"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.138">
  +          <Foundation.Core.ModelElement.name>Mediator</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +        </Foundation.Extension_Mechanisms.Stereotype>
  +        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.139">
  +          <Foundation.Core.ModelElement.name>Singleton</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Extension_Mechanisms.Stereotype.extendedElement>
  +            <Foundation.Core.ModelElement xmi.idref="xmi.3"/>
  +          </Foundation.Extension_Mechanisms.Stereotype.extendedElement>
  +        </Foundation.Extension_Mechanisms.Stereotype>
  +        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.140">
  +          <Foundation.Core.ModelElement.name>Interpreter</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +        </Foundation.Extension_Mechanisms.Stereotype>
  +        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.141">
  +          <Foundation.Core.ModelElement.name>Interpreter</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +        </Foundation.Extension_Mechanisms.Stereotype>
  +        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.142">
  +          <Foundation.Core.ModelElement.name>Iterator</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Extension_Mechanisms.Stereotype.extendedElement>
  +            <Foundation.Core.ModelElement xmi.idref="xmi.36"/>
  +            <Foundation.Core.ModelElement xmi.idref="xmi.15"/>
  +            <Foundation.Core.ModelElement xmi.idref="xmi.37"/>
  +          </Foundation.Extension_Mechanisms.Stereotype.extendedElement>
  +        </Foundation.Extension_Mechanisms.Stereotype>
  +        <Behavioral_Elements.Use_Cases.Actor xmi.id="xmi.143" xmi.uuid="-64--88-100-101-357e9a:ebcd920152:-7ffb">
  +          <Foundation.Core.ModelElement.name>OpenPKG</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +        </Behavioral_Elements.Use_Cases.Actor>
  +        <Behavioral_Elements.Use_Cases.UseCase xmi.id="xmi.144" xmi.uuid="-64--88-100-101-357e9a:ebcd920152:-7ff8">
  +          <Foundation.Core.ModelElement.name>ReadConfig</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.GeneralizableElement.specialization>
  +            <Foundation.Core.Generalization xmi.idref="xmi.145"/>
  +          </Foundation.Core.GeneralizableElement.specialization>
  +        </Behavioral_Elements.Use_Cases.UseCase>
  +        <Behavioral_Elements.Use_Cases.UseCase xmi.id="xmi.146" xmi.uuid="-64--88-100-101-357e9a:ebcd920152:-7ff7">
  +          <Foundation.Core.ModelElement.name>RunCommands</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.GeneralizableElement.generalization>
  +            <Foundation.Core.Generalization xmi.idref="xmi.145"/>
  +          </Foundation.Core.GeneralizableElement.generalization>
  +        </Behavioral_Elements.Use_Cases.UseCase>
  +        <Foundation.Core.Generalization xmi.id="xmi.145" xmi.uuid="-64--88-100-101-357e9a:ebcd920152:-7ff6">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Generalization.child>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.146"/>
  +          </Foundation.Core.Generalization.child>
  +          <Foundation.Core.Generalization.parent>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.144"/>
  +          </Foundation.Core.Generalization.parent>
  +        </Foundation.Core.Generalization>
  +        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.147">
  +          <Foundation.Core.ModelElement.name>include</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +        </Foundation.Extension_Mechanisms.Stereotype>
  +        <Foundation.Core.Association xmi.id="xmi.148" xmi.uuid="-64--88-100-101-357e9a:ebcd920152:-7ff5">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.149" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fd8">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.148"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.143"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.150" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fd7">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.148"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.146"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.151">
  +          <Foundation.Core.ModelElement.name>extend</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +        </Foundation.Extension_Mechanisms.Stereotype>
  +        <Foundation.Core.Class xmi.id="xmi.40">
  +          <Foundation.Core.ModelElement.name>int</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Class xmi.id="xmi.88">
  +          <Foundation.Core.ModelElement.name>char</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Class xmi.id="xmi.81">
  +          <Foundation.Core.ModelElement.name>enum</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Class xmi.id="xmi.9">
  +          <Foundation.Core.ModelElement.name>void</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Association xmi.id="xmi.152" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fee">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.153" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fed">
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.ordering xmi.value="unordered"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.targetScope xmi.value="instance"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.changeability xmi.value="changeable"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.152"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.154" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fec">
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.152"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.36"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Core.Association xmi.id="xmi.155" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7feb">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.156" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fea">
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.ordering xmi.value="unordered"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.targetScope xmi.value="instance"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.changeability xmi.value="changeable"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.155"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.157" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe9">
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.155"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Core.Association xmi.id="xmi.158" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe8">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.159" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe7">
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.ordering xmi.value="unordered"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.targetScope xmi.value="instance"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.changeability xmi.value="changeable"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.158"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.160" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe6">
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.158"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.37"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Core.Association xmi.id="xmi.161" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fda">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.162" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fd9">
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.ordering xmi.value="unordered"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.targetScope xmi.value="instance"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.56"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.changeability xmi.value="changeable"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.161"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.109"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.163" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fd8">
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.161"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.86"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Core.Association xmi.id="xmi.164" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fd4">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.165" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fd3">
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.ordering xmi.value="unordered"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.targetScope xmi.value="instance"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.56"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.changeability xmi.value="changeable"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.164"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.107"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.166" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fd2">
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.164"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.86"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Core.Association xmi.id="xmi.167" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fd1">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.168" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fd0">
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.ordering xmi.value="unordered"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.targetScope xmi.value="instance"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.56"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.changeability xmi.value="changeable"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.167"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.105"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.169" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fcf">
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.167"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.86"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +      </Foundation.Core.Namespace.ownedElement>
  +    </Model_Management.Model>
  +  </XMI.content>
   </XMI>

From ossp-cvs-owner@ossp.org  Thu Feb  7 16:36:26 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7BE35764F8; Thu,  7 Feb 2002 16:36:26 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc 00TODO rc_test.sh
Message-Id: <20020207153626.7BE35764F8@mail.ossp.org>
Date: Thu,  7 Feb 2002 16:36:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   07-Feb-2002 16:36:26
  Branch: HEAD                             Handle: 2002020715362600

  Modified files:
    ossp-pkg/rc             00TODO rc_test.sh

  Log:
    Move test cases out of test script and into 00TODO, write real test scripts.

  Summary:
    Revision    Changes     Path
    1.19        +27 -1      ossp-pkg/rc/00TODO
    1.5         +52 -23     ossp-pkg/rc/rc_test.sh
  ____________________________________________________________________________

  Index: ossp-pkg/rc/00TODO
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 00TODO
  --- ossp-pkg/rc/00TODO	5 Feb 2002 20:37:34 -0000	1.18
  +++ ossp-pkg/rc/00TODO	7 Feb 2002 15:36:26 -0000	1.19
  @@ -2,6 +2,7 @@
   
   Unfinished business
     Manpage options incorrectly specifies multiple rc.funcs.
  +  Manpage reorganization lacks important option combination info.
     What when multiple command interpreters and one --print or --eval given?
     File rc.func totally undocumented, but logic should be clear.
     Control flow
  @@ -16,7 +17,6 @@
     Removing the OSSP_RC_DEACT deactivation feature (thl.)
     Offer include directive in config file.
     Dynamic handling of command interpreter option.
  -  Environment of manpage has redundant text.
     Interpreter option irgendwo dass hat global scope.
       Als variable in %config Section?
   
  @@ -152,3 +152,29 @@
       while (ref := ParseSectionRef(script))
           ref->create_rcfile_script(recurse=yes);
   }
  +
  +Test cases
  +                *********************
  +                * Test cases for rc *
  +                *********************
  +
  +Pre:
  +tar zxvf ossprc-0.9.tar.gz
  +cd ossprc-0.9
  +./configure
  +make
  +su
  +make install
  +export OSSP_RC_ROOT=/etc/ossprc/
  +
  +Assume:
  +Installed program 'mycom' in /usr/local/bin/mycom
  +Valid OSSP run command file rc.mycom in /etc/ossprc/rc.d
  +File rc.mycom contains the sections start, sync, and restart
  +
  +Begin:
  +$ rc mycom start sync restart
  +
  +Output:
  +Post:
  +Procedure:
  Index: ossp-pkg/rc/rc_test.sh
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 rc_test.sh
  --- ossp-pkg/rc/rc_test.sh	4 Feb 2002 22:35:20 -0000	1.4
  +++ ossp-pkg/rc/rc_test.sh	7 Feb 2002 15:36:26 -0000	1.5
  @@ -27,26 +27,55 @@
   #
   #  test_rc.sh: Run-command processor test script
   
  -#Pre:
  -#tar zxvf ossprc-0.9.tar.gz
  -#cd ossprc-0.9
  -#./configure
  -#make
  -#su
  -#make install
  -#export OSSP_RC_ROOT=/etc/ossprc/
  -#
  -#Assume:
  -#Installed program 'mycom' in /usr/local/bin/mycom
  -#Valid OSSP run command file rc.mycom in /etc/ossprc/rc.d
  -#File rc.mycom contains the sections start, sync, and restart
  -#
  -#Begin:
  -#$ rc mycom start sync restart
  -#
  -#Output:
  -#
  -#Post:
  -#
  -#Procedure:
  -#
  +# Test short options, should fail for false combination usage
  +./rc -dVehilpsrvxLcfqt samba start sleep=2 restart
  +echo
  +
  +# Test short options, should succeed
  +./rc -derv -L /sfw/etc/rc.d/rc.%{RCFILE:s/^all$/*/} -c /sfw/etc/rc.conf -f /sfw/etc/rc.func -t /tmp openssh stop sleep=4 start daily minsize=2097152
  +echo
  +
  +# Test some long options, should fail for false combination usage
  +./rc --verbose --silent uucp stop sleep=6 start
  +echo
  +./rc --query --silent zebra bing bang
  +echo
  +./rc --conf /sfw/rc.conf --locate /sfw/etc/rc.d --query what to enter here
  +echo
  +
  +# Test minimal set of long options, should succeed
  +./rc --debug --version rsyncd nothing matters but the version
  +echo
  +
  +# FIXME these cases are not handled yet by our configuration FIXME #
  +#./rc --debug --version
  +#echo
  +#./rc --debug --help
  +#echo
  +#./rc --debug --info --verbose
  +#echo
  +#./rc --conf /etc/rc.conf --debug --info --raw
  +#echo
  +#./rc --conf /sfw/rc.conf --tmp /sfw/RPM/TMP --debug --labels rsyncd
  +#echo
  +# FIXME these cases are not handled yet by our configuration FIXME #
  +
  +./rc --func /sfw/etc/rc.func --print --verbose openssh stop sleep=4 start
  +echo
  +./rc --func /sfw/etc/rc.func --debug --eval uucp restart
  +echo
  +./rc --conf ./myrc --func /sfw/etc/rc.func --tmp /tmp --debug --silent --exec uucp start
  +
  +# Next milestone
  +#RequireOwner
  +#RequireGroup
  +#RequireUmask
  +#ParseEnvAss
  +#ParseSectionDef
  +#ParseSectionRef
  +#ParseSectionParam
  +#ParseTerminal
  +#NameConfig
  +#NameCommon
  +#NameDefault
  +#NameError

From ossp-cvs-owner@ossp.org  Thu Feb  7 16:37:10 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E950376507; Thu,  7 Feb 2002 16:37:09 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc Makefile.in configure.in
Message-Id: <20020207153709.E950376507@mail.ossp.org>
Date: Thu,  7 Feb 2002 16:37:09 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   07-Feb-2002 16:37:09
  Branch: HEAD                             Handle: 2002020715370900

  Modified files:
    ossp-pkg/rc             Makefile.in configure.in

  Log:
    Fix build configuration.

  Summary:
    Revision    Changes     Path
    1.12        +3  -1      ossp-pkg/rc/Makefile.in
    1.12        +0  -2      ossp-pkg/rc/configure.in
  ____________________________________________________________________________

  Index: ossp-pkg/rc/Makefile.in
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 Makefile.in
  --- ossp-pkg/rc/Makefile.in	7 Feb 2002 12:38:32 -0000	1.11
  +++ ossp-pkg/rc/Makefile.in	7 Feb 2002 15:37:09 -0000	1.12
  @@ -46,6 +46,7 @@
   LIBS            = @LIBS@
   
   RM              = rm -f
  +CHMOD           = chmod
   RMDIR           = rmdir
   SHTOOL          = ./shtool
   POD2MAN         = pod2man
  @@ -141,4 +142,5 @@
   
   check: test
   test: rc
  -	./test.sh
  +	$(CHMOD) 755 rc_test.sh > /dev/null 2>&1
  +	./rc_test.sh
  Index: ossp-pkg/rc/configure.in
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 configure.in
  --- ossp-pkg/rc/configure.in	6 Feb 2002 16:56:33 -0000	1.11
  +++ ossp-pkg/rc/configure.in	7 Feb 2002 15:37:09 -0000	1.12
  @@ -58,8 +58,6 @@
   
   dnl Check other requirements
   AC_SET_MAKE
  -AC_PROG_CC
  -AC_PROG_CPP
   AC_CHECK_DEBUGGING
   AC_CHECK_LIB(socket, getprotobyname)
   AC_CHECK_LIB(nsl, gethostbyname)

From ossp-cvs-owner@ossp.org  Thu Feb  7 16:37:55 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3F395764F8; Thu,  7 Feb 2002 16:37:55 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.c
Message-Id: <20020207153755.3F395764F8@mail.ossp.org>
Date: Thu,  7 Feb 2002 16:37:55 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   07-Feb-2002 16:37:55
  Branch: HEAD                             Handle: 2002020715375400

  Modified files:
    ossp-pkg/rc             rc.c

  Log:
    Stop missing stdlib complaining.

  Summary:
    Revision    Changes     Path
    1.11        +1  -0      ossp-pkg/rc/rc.c
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 rc.c
  --- ossp-pkg/rc/rc.c	7 Feb 2002 12:38:32 -0000	1.10
  +++ ossp-pkg/rc/rc.c	7 Feb 2002 15:37:54 -0000	1.11
  @@ -28,6 +28,7 @@
   */
   
   #include <stdio.h>
  +#include <stdlib.h>
   
   #include "rc.h"
   

From ossp-cvs-owner@ossp.org  Fri Feb  8 12:47:58 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5B23A76503; Fri,  8 Feb 2002 12:47:57 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Message-Id: <20020208114757.5B23A76503@mail.ossp.org>
Date: Fri,  8 Feb 2002 12:47:57 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: CVSROOT                          Date:   08-Feb-2002 12:47:57
  Branch: HEAD                             Handle: 2002020811475600

  Modified files:
    CVSROOT                 modules

  Log:
    Add OSSP val alias to OSSP rc repository.

  Summary:
    Revision    Changes     Path
    1.50        +1  -0      CVSROOT/modules
  ____________________________________________________________________________

  Index: CVSROOT/modules
  ============================================================
  $ cvs diff -u -r1.49 -r1.50 modules
  --- CVSROOT/modules	4 Feb 2002 13:16:25 -0000	1.49
  +++ CVSROOT/modules	8 Feb 2002 11:47:56 -0000	1.50
  @@ -104,6 +104,7 @@
   rc              ossp-pkg/rc &rc_str &rc_var &rc_popt &rc_ex
   rc_str          -d rc_str  ossp-pkg/str
   rc_var          -d rc_var  ossp-pkg/var
  +rc_val          -d rc_val  ossp-pkg/val
   rc_popt         -d rc_popt ossp-pkg/popt
   rc_ex           -d rc_ex   ossp-pkg/ex
   

From ossp-cvs-owner@ossp.org  Fri Feb  8 12:50:47 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9722F76503; Fri,  8 Feb 2002 12:50:47 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Message-Id: <20020208115047.9722F76503@mail.ossp.org>
Date: Fri,  8 Feb 2002 12:50:47 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: CVSROOT                          Date:   08-Feb-2002 12:50:47
  Branch: HEAD                             Handle: 2002020811504700

  Modified files:
    CVSROOT                 modules

  Log:
    Finish incomplete rc alias addition.

  Summary:
    Revision    Changes     Path
    1.51        +1  -1      CVSROOT/modules
  ____________________________________________________________________________

  Index: CVSROOT/modules
  ============================================================
  $ cvs diff -u -r1.50 -r1.51 modules
  --- CVSROOT/modules	8 Feb 2002 11:47:56 -0000	1.50
  +++ CVSROOT/modules	8 Feb 2002 11:50:47 -0000	1.51
  @@ -101,7 +101,7 @@
   lmtp2nntp_popt  -d lib_popt ossp-pkg/popt
   
   #   OSSP rc
  -rc              ossp-pkg/rc &rc_str &rc_var &rc_popt &rc_ex
  +rc              ossp-pkg/rc &rc_str &rc_var &rc_val &rc_popt &rc_ex
   rc_str          -d rc_str  ossp-pkg/str
   rc_var          -d rc_var  ossp-pkg/var
   rc_val          -d rc_val  ossp-pkg/val

From ossp-cvs-owner@ossp.org  Fri Feb  8 19:31:57 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7C7E676503; Fri,  8 Feb 2002 19:31:57 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val Makefile.in
Message-Id: <20020208183157.7C7E676503@mail.ossp.org>
Date: Fri,  8 Feb 2002 19:31:57 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   08-Feb-2002 19:31:57
  Branch: HEAD                             Handle: 2002020818315700

  Modified files:
    ossp-pkg/val            Makefile.in

  Log:
    Object files depend on the makefile.

  Summary:
    Revision    Changes     Path
    1.3         +3  -0      ossp-pkg/val/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/val/Makefile.in
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 Makefile.in
  --- ossp-pkg/val/Makefile.in	21 Jan 2002 13:23:35 -0000	1.2
  +++ ossp-pkg/val/Makefile.in	8 Feb 2002 18:31:57 -0000	1.3
  @@ -66,6 +66,9 @@
   .c.lo:
   	@$(LIBTOOL) --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS) -c $<
   
  +$(LIB_OBJS): Makefile
  +$(TST_OBJS): Makefile
  +
   $(LIB_NAME): $(LIB_OBJS)
   	@$(LIBTOOL) --mode=link $(CC) -o $(LIB_NAME) $(LIB_OBJS) -rpath $(libdir) \
   	    -version-info `$(SHTOOL) version -l txt -d libtool VERSION`

From ossp-cvs-owner@ossp.org  Fri Feb  8 19:35:04 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 224A876503; Fri,  8 Feb 2002 19:35:04 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc 00TODO Makefile.in configure.in devtool.conf d...
Message-Id: <20020208183504.224A876503@mail.ossp.org>
Date: Fri,  8 Feb 2002 19:35:04 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   08-Feb-2002 19:35:04
  Branch: HEAD                             Handle: 2002020818350300

  Modified files:
    ossp-pkg/rc             00TODO Makefile.in configure.in devtool.conf
                            devtool.func

  Log:
    Use OSSP val library.

  Summary:
    Revision    Changes     Path
    1.20        +1  -0      ossp-pkg/rc/00TODO
    1.13        +8  -5      ossp-pkg/rc/Makefile.in
    1.13        +13 -2      ossp-pkg/rc/configure.in
    1.9         +6  -0      ossp-pkg/rc/devtool.conf
    1.5         +3  -3      ossp-pkg/rc/devtool.func
  ____________________________________________________________________________

  Index: ossp-pkg/rc/00TODO
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 00TODO
  --- ossp-pkg/rc/00TODO	7 Feb 2002 15:36:26 -0000	1.19
  +++ ossp-pkg/rc/00TODO	8 Feb 2002 18:35:03 -0000	1.20
  @@ -14,6 +14,7 @@
     Refs, pri, user, group, ci, go only in normal (not special) sections.
   
   Consider
  +  Nice to have feature for ex, a pEx->pObj->strErr(pEx->Value);
     Removing the OSSP_RC_DEACT deactivation feature (thl.)
     Offer include directive in config file.
     Dynamic handling of command interpreter option.
  Index: ossp-pkg/rc/Makefile.in
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 Makefile.in
  --- ossp-pkg/rc/Makefile.in	7 Feb 2002 15:37:09 -0000	1.12
  +++ ossp-pkg/rc/Makefile.in	8 Feb 2002 18:35:03 -0000	1.13
  @@ -58,10 +58,13 @@
   TARGET_PROGS    = rc
   TARGET_MANS     = rc.1 rc-sample.5
   
  -SRCS            = rc.c rc_option.c rc_version.c rc_pcre.c
  -OBJS            = rc.o rc_option.o rc_version.o rc_pcre.o
  +SRCS            = rc.c rc_config.c rc_option.c rc_version.c\
  +                  rc_pcre.c rc_util.c
   
  -SUBDIRS         = @SUBDIR_EX@ @SUBDIR_VAR@ @SUBDIR_STR@ @SUBDIR_POPT@
  +OBJS            = rc.o rc_config.o rc_option.o rc_version.o\
  +                  rc_pcre.o rc_util.o
  +
  +SUBDIRS         = @SUBDIR_EX@ @SUBDIR_VAR@ @SUBDIR_VAL@ @SUBDIR_STR@ @SUBDIR_POPT@
   
   .SUFFIXES:
   .SUFFIXES: .c .cc .cpp .o
  @@ -134,10 +137,10 @@
   
   distclean: clean
   	$(RM) config.log config.status config.cache # Generated by ./configure
  -	$(RM) Makefile rc_config.h                  # Generated by ./configure
  +	$(RM) Makefile ac_config.h                  # Generated by ./configure
   
   realclean: distclean
  -	$(RM) configure rc_config.h.in              # Generated by Autoconf
  +	$(RM) configure ac_config.h.in              # Generated by Autoconf
   	$(RM) shtool
   
   check: test
  Index: ossp-pkg/rc/configure.in
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 configure.in
  --- ossp-pkg/rc/configure.in	7 Feb 2002 15:37:09 -0000	1.12
  +++ ossp-pkg/rc/configure.in	8 Feb 2002 18:35:03 -0000	1.13
  @@ -42,7 +42,7 @@
   
   dnl Process this file with autoconf
   AC_INIT(rc.h)
  -AC_CONFIG_HEADER(rc_config.h)
  +AC_CONFIG_HEADER(ac_config.h)
   AC_LANG_C
   
   dnl Checks basic requirements
  @@ -114,6 +114,17 @@
                    LIBS_EXTRA="$LIBS_EXTRA -lvar"])
   AC_SUBST(SUBDIR_VAR)
   
  +dnl Check for OSSP val library
  +AC_CHECK_EXTLIB([OSSP Val],
  +                val, val_expand, val.h,
  +                [SUBDIR_VAL=""],
  +                [SUBDIR_VAL="rc_val"
  +                 CPPFLAGS="$CPPFLAGS -Irc_val"
  +                 CFLAGS="$CFLAGS -Irc_val"
  +                 LDFLAGS="$LDFLAGS -Lrc_val/.libs"
  +                 LIBS_EXTRA="$LIBS_EXTRA -lval"])
  +AC_SUBST(SUBDIR_VAL)
  +
   dnl Extra library handling
   LIBS="$LIBS $LIBS_EXTRA"
   
  @@ -122,7 +133,7 @@
   enable_headline=no
   export enable_headline
   dnl Call other configure scripts
  -AC_CONFIG_SUBDIRS([$SUBDIR_EX $SUBDIR_STR $SUBDIR_VAR $SUBDIR_POPT])
  +AC_CONFIG_SUBDIRS([$SUBDIR_EX $SUBDIR_STR $SUBDIR_VAR $SUBDIR_VAL $SUBDIR_POPT])
   
   dnl Make all the necessary Makefiles
   #AC_CONFIG_FILES(Makefile)
  Index: ossp-pkg/rc/devtool.conf
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 devtool.conf
  --- ossp-pkg/rc/devtool.conf	5 Feb 2002 19:11:45 -0000	1.8
  +++ ossp-pkg/rc/devtool.conf	8 Feb 2002 18:35:03 -0000	1.9
  @@ -18,6 +18,9 @@
       echo "===> rc_var (devtool autogen)"
       (cd rc_var && ./devtool autogen)
       echo "<=== rc_var"
  +    echo "===> rc_val (devtool autogen)"
  +    (cd rc_val && ./devtool autogen)
  +    echo "<=== rc_val"
   
   %autoclean
       @autoclean shtool
  @@ -32,6 +35,9 @@
       echo "===> rc_var (devtool autoclean)"
       (cd rc_var && ./devtool autoclean)
       echo "<=== rc_var"
  +    echo "===> rc_val (devtool autoclean)"
  +    (cd rc_val && ./devtool autoclean)
  +    echo "<=== rc_val"
   
   %configure
       ./configure \
  Index: ossp-pkg/rc/devtool.func
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 devtool.func
  --- ossp-pkg/rc/devtool.func	4 Feb 2002 21:46:00 -0000	1.4
  +++ ossp-pkg/rc/devtool.func	8 Feb 2002 18:35:03 -0000	1.5
  @@ -30,7 +30,7 @@
       case $tool in
           autoconf )
               autoconf_version=`devtool_require autoconf --version 4 "$1" "$2"`
  -            echo "generating (GNU Autoconf $autoconf_version): configure rc_config.h.in"
  +            echo "generating (GNU Autoconf $autoconf_version): configure ac_config.h.in"
               autoconf
               autoheader 2>&1 | grep -v "is unchanged"
               ;;
  @@ -56,8 +56,8 @@
       shift
       case $tool in
           autoconf )
  -            echo "removing: configure rc_config.h.in"
  -            rm -f configure rc_config.h.in
  +            echo "removing: configure ac_config.h.in"
  +            rm -f configure ac_config.h.in
               ;;
           libtool )
               echo "removing: ltmain.sh libtool.m4 config.guess config.sub"

From ossp-cvs-owner@ossp.org  Fri Feb  8 19:36:41 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 379D976503; Fri,  8 Feb 2002 19:36:41 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.c rc.h rc_config.c rc_const.h rc_option.c r...
Message-Id: <20020208183641.379D976503@mail.ossp.org>
Date: Fri,  8 Feb 2002 19:36:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   08-Feb-2002 19:36:41
  Branch: HEAD                             Handle: 2002020818364000

  Added files:
    ossp-pkg/rc             rc_config.c rc_util.c
  Modified files:
    ossp-pkg/rc             rc.c rc.h rc_const.h rc_option.c rc_option.h
                            rc_pcre.c

  Log:
    Further abstraction and building in of the configuration logic. We now store
    configuration variables using OSSP val, also.

  Summary:
    Revision    Changes     Path
    1.12        +13 -20     ossp-pkg/rc/rc.c
    1.10        +14 -3      ossp-pkg/rc/rc.h
    1.1         +106 -0     ossp-pkg/rc/rc_config.c
    1.2         +40 -0      ossp-pkg/rc/rc_const.h
    1.2         +78 -73     ossp-pkg/rc/rc_option.c
    1.2         +34 -0      ossp-pkg/rc/rc_option.h
    1.3         +1  -1      ossp-pkg/rc/rc_pcre.c
    1.1         +43 -0      ossp-pkg/rc/rc_util.c
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 rc.c
  --- ossp-pkg/rc/rc.c	7 Feb 2002 15:37:54 -0000	1.11
  +++ ossp-pkg/rc/rc.c	8 Feb 2002 18:36:40 -0000	1.12
  @@ -31,37 +31,30 @@
   #include <stdlib.h>
   
   #include "rc.h"
  -
  -#ifdef HAVE_CONFIG_H
  -#include "rc_config.h"
  -#endif
  -
  -/* Third party headers for libraries linked in       */
  -#include "ex.h"         /* OSSP ex exception library */
  +#include "rc_private.h"
   
   
   int main(int argc, char *argv[])
   {
       ex_t Except;
       int bCaught = 0;
  +    rc_config_t *pConf = NULL;
   
       ex_try {
  -        parseopts(argc, argv);
  +        configInit(&pConf);
  +        configFill(pConf, argc, argv);
       }
       ex_catch(Except) {
  -        if ((rc_return_t)Except.ex_value != RC_ERR_USE)
  -            fprintf(stderr, "Nonusage exception: %d\n",\
  -                (rc_return_t)Except.ex_value);
           bCaught = 1;
  +        fprintf(stderr, "Class '%s' threw exception %s in %s:%s():%d.\n",\
  +               (char *)Except.ex_class, *(int *)Except.ex_value,\
  +               Except.ex_file, Except.ex_func, Except.ex_line);
  +        exit(1);    /* Failure */
       }
  -    if (!bCaught) {
  -        fprintf(stderr, "No exceptions caught.\n");
  -        exit(0); /* Success */
  -    }
  -    else
  -        fprintf(stderr, "Class '%s' threw exception %d in %s:%s():%d.\n",\
  -                (char *)Except.ex_class, *(int *)Except.ex_value,\
  -                Except.ex_file, Except.ex_func, Except.ex_line);
  +    if (!bCaught)
  +        fprintf(stderr, "main: No exceptions caught.\n");
   
  -    exit(1); /* Failure */
  +    if (pConf)      /* If a configuration exists, then burn it */
  +        configDestruct(pConf);
  +    exit(0);        /* Success */
   }
  Index: ossp-pkg/rc/rc.h
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 rc.h
  --- ossp-pkg/rc/rc.h	7 Feb 2002 12:38:32 -0000	1.9
  +++ ossp-pkg/rc/rc.h	8 Feb 2002 18:36:40 -0000	1.10
  @@ -43,6 +43,7 @@
   #define TRUE (!FALSE)
   #endif
   
  +#include "rc_private.h"
   
   /* Unique identifier to use with OSSP ex library */
   extern const char ossprc_id[];
  @@ -54,12 +55,22 @@
       RC_ERR_MEM, /* Memory error             */
       RC_ERR_SYS, /* System error (see errno) */
       RC_ERR_IO,  /* Input/output error       */
  -    RC_ERR_FMT, /* Formatting error         */
       RC_ERR_INT  /* Internal error           */
   } rc_return_t;
   
  -/* Function prototypes */
  -rc_return_t parseopts(int, char **);
  +/* Option function prototypes */
  +rc_return_t parseOpts(int, char **);
  +rc_return_t procOpts(char, char *);
  +
  +/* Config function prototypes */
  +rc_return_t configInit(rc_config_t **);
  +rc_return_t configFill(rc_config_t *, int, char **);
  +rc_return_t configDestruct(rc_config_t *);
  +
  +/* Util function prototypes   */
  +char *strErr(rc_return_t);
  +
  +/* Other function prototypes  */
   
   /*rc_result_t rc_Err              (void);
   rc_result_t rc_Warn             (void);
  Index: ossp-pkg/rc/rc_config.c
  ============================================================
  $ cvs update -p -r1.1 rc_config.c
  /*  rc - OSSP Run-command processor
  **  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2002 Ralf S. Engelschall
  **
  **  This file is part of OSSP rc, a portable Run-command processor
  **  which can be found at http://www.ossp.org/pkg/rc/
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  rc_config.c: Run-command processor ISO C source file
  */
  
  #include <stdio.h>
  #include <stdlib.h>
  #include <assert.h>
  
  #include "rc.h"
  #include "rc_private.h"
  #include "rc_const.h"   /* String constants               */
  #include "rc_option.h"  /* Option operations rely on popt */
  #include "val.h"        /* OSSP val library holds config  */
  
  
  /***************************************
  * configInit(rc_config_t)              *
  * Initialize a configuration           *
  ***************************************/
  rc_return_t configInit(rc_config_t **ppConfig)
  {
      ex_t Except;
  
      *ppConfig = malloc(sizeof(rc_config_t));
      if (!*ppConfig)
          return(RC_THROW(RC_ERR_MEM));
  
      ex_try {
          val_create(&(*ppConfig)->pVal);
      }
      ex_catch(Except) {
          rethrow;
      }
  
      return(RC_THROW(RC_OK));
  }
  
  /************************************************
  * configFill(rc_config_t, int, char **)         *
  * Fill a configuration                          *
  ************************************************/
  rc_return_t configFill(rc_config_t *pConfig, int argc, char *argv[])
  {
      ex_t Except;
      char *pTestopt = NULL;
      const char *pFuncpath = "/sfw/etc/rc.func";
  
      ex_try {
          val_reg(pConfig->pVal, RC_FNC_NAME, VAL_TYPE_PTR, RC_FNC_DESC, NULL);
          val_set(pConfig->pVal, RC_FNC_NAME, pFuncpath);
          val_get(pConfig->pVal, RC_FNC_NAME, &pTestopt);
          fprintf(stderr, "%s\n", pTestopt);
      }
      ex_catch(Except) {
          rethrow;
      }
  
      return(RC_THROW(RC_OK));
  }
  
  /***************************************
  * configDestruct(rc_config_t)          *
  * Destruct a configuration             *
  ***************************************/
  rc_return_t configDestruct(rc_config_t *pConfig)
  {
      ex_t Except;
  
      assert(pConfig);
      free(pConfig);
  
      ex_try {
          val_destroy(pConfig->pVal);
      }
      ex_catch(Except) {
          rethrow;
          return(RC_THROW(RC_ERR_INT));
      }
  
      return(RC_THROW(RC_OK));
  }
  Index: ossp-pkg/rc/rc_const.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 rc_const.h
  --- ossp-pkg/rc/rc_const.h	7 Feb 2002 12:35:25 -0000	1.1
  +++ ossp-pkg/rc/rc_const.h	8 Feb 2002 18:36:40 -0000	1.2
  @@ -63,4 +63,44 @@
   #define RC_DFL_DESC "Name of the default section in a rcfile."
   #define RC_ERR_DESC "Name of the error section in a rcfile."
   
  +#define RC_USE_NAME "usage"
  +#define RC_DBG_NAME "debug"
  +#define RC_VER_NAME "version"
  +#define RC_EVL_NAME "eval"
  +#define RC_HLP_NAME "help"
  +#define RC_INF_NAME "info"
  +#define RC_LBL_NAME "labels"
  +#define RC_PRN_NAME "print"
  +#define RC_SIL_NAME "silent"
  +#define RC_RAW_NAME "raw"
  +#define RC_VRB_NAME "verbose"
  +#define RC_EXC_NAME "exec"
  +                             
  +#define RC_LOC_NAME "locate"
  +#define RC_CNF_NAME "conf"
  +#define RC_FNC_NAME "func"
  +#define RC_QRY_NAME "query"
  +#define RC_TMP_NAME "tmp"
  +                    
  +#define RC_OWN_NAME "RequireOwner"
  +#define RC_GRP_NAME "RequireGroup"      
  +#define RC_MSK_NAME "RequireUmask"      
  +#define RC_ASS_NAME "ParseEnvAss"       
  +#define RC_DEF_NAME "ParseSectionDef"   
  +#define RC_REF_NAME "ParseSectionRef"   
  +#define RC_PRM_NAME "ParseSectionParam" 
  +#define RC_TRM_NAME "ParseTerminal"     
  +#define RC_NCF_NAME "NameConfig"        
  +#define RC_CMN_NAME "NameCommon"        
  +#define RC_DFL_NAME "NameDefault"       
  +#define RC_ERR_NAME "NameError"
  +
  +#define RC_ERRSTR_OK  "Okay"
  +#define RC_ERRSTR_USE "Usage"
  +#define RC_ERRSTR_MEM "Memory"
  +#define RC_ERRSTR_SYS "System"
  +#define RC_ERRSTR_IO  "Input/Output"
  +#define RC_ERRSTR_INT "Internal"
  +#define RC_ERRSTR_UNK "Unrecognized"
  +
   #endif /* __OSSPRC_CONST_H__ */
  Index: ossp-pkg/rc/rc_option.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 rc_option.c
  --- ossp-pkg/rc/rc_option.c	7 Feb 2002 12:38:32 -0000	1.1
  +++ ossp-pkg/rc/rc_option.c	8 Feb 2002 18:36:40 -0000	1.2
  @@ -30,84 +30,90 @@
   #include <stdio.h>
   
   #include "rc.h"
  -#include "rc_option.h"  /* Values and other for popt   */
  -#include "rc_const.h"   /* Strings and other constants */
  -
  -#ifdef HAVE_CONFIG_H
  -#include "rc_config.h"
  -#endif
  +#include "rc_private.h"
  +#include "rc_option.h"  /* Option operations rely on popt */
  +#include "rc_const.h"   /* Strings and other constants    */
   
   /* Third party headers for libraries linked in       */
  -#include "ex.h"         /* OSSP ex exception library */
   #include "popt.h"       /* OSSP popt options library */
   
  -/* Define the ability to throw OSSP ex exceptions    */
  -#define RC_THROW(rv) \
  -    (  (rv) != RC_OK && (ex_catching && !ex_shielding) \
  -     ? (ex_throw(ossprc_id, NULL, (rv)), (rv)) : (rv))
  -
   /* Unique identifier to use with OSSP ex library     */
   const char ossprc_id[] = "OSSP rc";
   
   
  -rc_return_t parseopts(int argc, char *argv[])
  +/* Loops through available options and fills a configuration if encountered */
  +rc_return_t procOpts(char cOpt, char *pcCLI)
  +{
  +    int  nPos = 0;  /* For tracking options */
  +
  +    switch (cOpt) {
  +    case 'h':
  +        pcCLI[nPos++] = 'h';
  +        break;
  +    case 'V':
  +        pcCLI[nPos++] = 'V';
  +        break;
  +    case 'i':
  +        pcCLI[nPos++] = 'i';
  +        break;
  +    case 'q':
  +        pcCLI[nPos++] = 'q';
  +        break;
  +    }
  +
  +    return(RC_THROW(RC_OK));
  +}
  +
  +rc_return_t parseOpts(int argc, char *argv[])
   {
  +    ex_t Except;
  +    int  bCaught = 0;
  +    char pcBuf[BUFSIZ+1];
  +    int  nBufpos = 0;           /* For tracking options           */
       char cOpt = 0;              /* For argument parsing           */
  -    int  iBufpos = 0;           /* For tracking options           */
       char *szCLIBuf = NULL;
       char *szFuncfile = NULL;    /* Rc.func file name and location */
       int  nIter = 0;
  -    char pcBuf[BUFSIZ+1];
       popt_context optCon;        /* Context for parsing options    */
   
       struct popt_option optionsTable[] = {
           /* Long options with short keys but no arguments */
  -        { "usage",   '?', POPT_ARG_NONE,   0, RC_USE_VAL, RC_USE_DESC, NULL },
  -        { "debug",   'd', POPT_ARG_NONE,   0, RC_DBG_VAL, RC_DBG_DESC, NULL },
  -        { "version", 'V', POPT_ARG_NONE,   0, RC_VER_VAL, RC_VER_DESC, NULL },
  -        { "eval",    'e', POPT_ARG_NONE,   0, RC_EVL_VAL, RC_EVL_DESC, NULL },
  -        { "help",    'h', POPT_ARG_NONE,   0, RC_HLP_VAL, RC_HLP_DESC, NULL },
  -        { "info",    'i', POPT_ARG_NONE,   0, RC_INF_VAL, RC_INF_DESC, NULL },
  -        { "labels",  'l', POPT_ARG_NONE,   0, RC_LBL_VAL, RC_LBL_DESC, NULL },
  -        { "print",   'p', POPT_ARG_NONE,   0, RC_PRN_VAL, RC_PRN_DESC, NULL },
  -        { "silent",  's', POPT_ARG_NONE,   0, RC_SIL_VAL, RC_SIL_DESC, NULL },
  -        { "raw",     'r', POPT_ARG_NONE,   0, RC_RAW_VAL, RC_RAW_DESC, NULL },
  -        { "verbose", 'v', POPT_ARG_NONE,   0, RC_VRB_VAL, RC_VRB_DESC, NULL },
  -        { "exec",    'x', POPT_ARG_NONE,   0, RC_EXC_VAL, RC_EXC_DESC, NULL },
  +        { RC_USE_NAME, '?', POPT_ARG_NONE,   0, RC_USE_VAL, RC_USE_DESC, NULL },
  +        { RC_DBG_NAME, 'd', POPT_ARG_NONE,   0, RC_DBG_VAL, RC_DBG_DESC, NULL },
  +        { RC_VER_NAME, 'V', POPT_ARG_NONE,   0, RC_VER_VAL, RC_VER_DESC, NULL },
  +        { RC_EVL_NAME, 'e', POPT_ARG_NONE,   0, RC_EVL_VAL, RC_EVL_DESC, NULL },
  +        { RC_HLP_NAME, 'h', POPT_ARG_NONE,   0, RC_HLP_VAL, RC_HLP_DESC, NULL },
  +        { RC_INF_NAME, 'i', POPT_ARG_NONE,   0, RC_INF_VAL, RC_INF_DESC, NULL },
  +        { RC_LBL_NAME, 'l', POPT_ARG_NONE,   0, RC_LBL_VAL, RC_LBL_DESC, NULL },
  +        { RC_PRN_NAME, 'p', POPT_ARG_NONE,   0, RC_PRN_VAL, RC_PRN_DESC, NULL },
  +        { RC_SIL_NAME, 's', POPT_ARG_NONE,   0, RC_SIL_VAL, RC_SIL_DESC, NULL },
  +        { RC_RAW_NAME, 'r', POPT_ARG_NONE,   0, RC_RAW_VAL, RC_RAW_DESC, NULL },
  +        { RC_VRB_NAME, 'v', POPT_ARG_NONE,   0, RC_VRB_VAL, RC_VRB_DESC, NULL },
  +        { RC_EXC_NAME, 'x', POPT_ARG_NONE,   0, RC_EXC_VAL, RC_EXC_DESC, NULL },
                                                 
           /* Single argument long options with short keys */
  -        { "locate",  'L', POPT_ARG_STRING, 0, RC_LOC_VAL, RC_LOC_DESC, "regx" },
  -        { "conf",    'c', POPT_ARG_STRING, 0, RC_CNF_VAL, RC_CNF_DESC, "path" },
  -        { "func",    'f', POPT_ARG_STRING, &szFuncfile,\
  -            RC_FNC_VAL, RC_FNC_DESC, "path" },
  -        { "query",   'q', POPT_ARG_STRING, 0, RC_QRY_VAL, RC_QRY_DESC, "varx" },
  -        { "tmp",     't', POPT_ARG_STRING, 0, RC_TMP_VAL, RC_TMP_DESC, "path" },
  +        {RC_LOC_NAME, 'L', POPT_ARG_STRING, 0, RC_LOC_VAL, RC_LOC_DESC, "regx"},
  +        {RC_CNF_NAME, 'c', POPT_ARG_STRING, 0, RC_CNF_VAL, RC_CNF_DESC, "path"},
  +
  +        {RC_FNC_NAME, 'f', POPT_ARG_STRING, &szFuncfile,\
  +           RC_FNC_VAL, RC_FNC_DESC, "path"},
  +
  +        {RC_QRY_NAME, 'q', POPT_ARG_STRING, 0, RC_QRY_VAL, RC_QRY_DESC, "varx"},
  +        {RC_TMP_NAME, 't', POPT_ARG_STRING, 0, RC_TMP_VAL, RC_TMP_DESC, "path"},
   
           /* Single argument long options without short keys */
  -        { "RequireOwner",      0, POPT_ARG_STRING, 0,\
  -            RC_OWN_VAL, RC_OWN_DESC, "user"  },
  -        { "RequireGroup",      0, POPT_ARG_STRING, 0,\
  -            RC_GRP_VAL, RC_GRP_DESC, "group" },
  -        { "RequireUmask",      0, POPT_ARG_INT,    0,\
  -            RC_MSK_VAL, RC_MSK_DESC, "umask" },
  -        { "ParseEnvAss",       0, POPT_ARG_STRING, 0,\
  -            RC_ASS_VAL, RC_ASS_DESC, "regx" },
  -        { "ParseSectionDef",   0, POPT_ARG_STRING, 0,\
  -            RC_DEF_VAL, RC_DEF_DESC, "regx" },
  -        { "ParseSectionRef",   0, POPT_ARG_STRING, 0,\
  -            RC_REF_VAL, RC_REF_DESC, "regx" },
  -        { "ParseSectionParam", 0, POPT_ARG_STRING, 0,\
  -            RC_PRM_VAL, RC_PRM_DESC, "regx" },
  -        { "ParseTerminal",     0, POPT_ARG_STRING, 0,\
  -            RC_TRM_VAL, RC_TRM_DESC, "regx" },
  -        { "NameConfig",        0, POPT_ARG_STRING, 0,\
  -            RC_NCF_VAL, RC_NCF_DESC, "name" },
  -        { "NameCommon",        0, POPT_ARG_STRING, 0,\
  -            RC_CMN_VAL, RC_CMN_DESC, "name" },
  -        { "NameDefault",       0, POPT_ARG_STRING, 0,\
  -            RC_DFL_VAL, RC_DFL_DESC, "name" },
  -        { "NameError",         0, POPT_ARG_STRING, 0,\
  -            RC_ERR_VAL, RC_ERR_DESC, "name" },
  +        { RC_OWN_NAME, 0, POPT_ARG_STRING, 0, RC_OWN_VAL, RC_OWN_DESC, "user" },
  +        { RC_GRP_NAME, 0, POPT_ARG_STRING, 0, RC_GRP_VAL, RC_GRP_DESC, "group"},
  +        { RC_MSK_NAME, 0, POPT_ARG_INT,    0, RC_MSK_VAL, RC_MSK_DESC, "umask"},
  +        { RC_ASS_NAME, 0, POPT_ARG_STRING, 0, RC_ASS_VAL, RC_ASS_DESC, "regx" },
  +        { RC_DEF_NAME, 0, POPT_ARG_STRING, 0, RC_DEF_VAL, RC_DEF_DESC, "regx" },
  +        { RC_REF_NAME, 0, POPT_ARG_STRING, 0, RC_REF_VAL, RC_REF_DESC, "regx" },
  +        { RC_PRM_NAME, 0, POPT_ARG_STRING, 0, RC_PRM_VAL, RC_PRM_DESC, "regx" },
  +        { RC_TRM_NAME, 0, POPT_ARG_STRING, 0, RC_TRM_VAL, RC_TRM_DESC, "regx" },
  +        { RC_NCF_NAME, 0, POPT_ARG_STRING, 0, RC_NCF_VAL, RC_NCF_DESC, "name" },
  +        { RC_CMN_NAME, 0, POPT_ARG_STRING, 0, RC_CMN_VAL, RC_CMN_DESC, "name" },
  +        { RC_DFL_NAME, 0, POPT_ARG_STRING, 0, RC_DFL_VAL, RC_DFL_DESC, "name" },
  +        { RC_ERR_NAME, 0, POPT_ARG_STRING, 0, RC_ERR_VAL, RC_ERR_DESC, "name" },
   
           POPT_AUTOHELP
           { NULL, 0, 0, NULL, 0 }
  @@ -122,22 +128,21 @@
       }
   
       /* Now do options processing */
  -    while ((cOpt = popt_getnextopt(optCon)) >= 0) {
  -        switch (cOpt) {
  -        case 'h':
  -            pcBuf[iBufpos++] = 'h';
  -            break;
  -        case 'V':
  -            pcBuf[iBufpos++] = 'V';
  -            break;
  -        case 'i':
  -            pcBuf[iBufpos++] = 'i';
  -            break;
  -        case 'q':
  -            pcBuf[iBufpos++] = 'q';
  -            break;
  -        }
  +    while ((cOpt = popt_getnextopt(optCon)) >= 0)
  +    ex_try {
  +        procOpts(cOpt, pcBuf);
  +    }
  +    ex_catch(Except) {
  +        if ((rc_return_t)Except.ex_value != RC_ERR_USE)
  +            fprintf(stderr, "Nonusage exception: %d\n",\
  +                (rc_return_t)Except.ex_value);
  +        bCaught = 1;
  +        fprintf(stderr, "Class '%s' threw exception %d in %s:%s():%d.\n",\
  +                (char *)Except.ex_class, *(int *)Except.ex_value,\
  +                Except.ex_file, Except.ex_func, Except.ex_line);
       }
  +    if (!bCaught)
  +        fprintf(stderr, "parseOpts: No exceptions caught.\n");
   
       szCLIBuf = (char *)popt_getarg(optCon);
       if ((szCLIBuf == NULL)) {
  @@ -156,7 +161,7 @@
   
       /* Print out options, szCLIBuf chosen */
       fprintf(stderr, "Options chosen: ");
  -    for (nIter = 0; nIter < iBufpos ; nIter++)
  +    for (nIter = 0; nIter < nBufpos ; nIter++)
           fprintf(stderr, "-%c ", pcBuf[nIter]);
       if (szFuncfile)
           fprintf(stderr, "-f %s ", szFuncfile);
  Index: ossp-pkg/rc/rc_option.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 rc_option.h
  --- ossp-pkg/rc/rc_option.h	7 Feb 2002 12:38:32 -0000	1.1
  +++ ossp-pkg/rc/rc_option.h	8 Feb 2002 18:36:40 -0000	1.2
  @@ -1,3 +1,35 @@
  +/*  rc - OSSP Run-command processor
  +**  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002 Ralf S. Engelschall
  +**
  +**  This file is part of OSSP rc, a portable Run-command processor
  +**  which can be found at http://www.ossp.org/pkg/rc/
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  rc_option.h: Run-command processor ISO C public header file
  +*/
  +
  +#ifndef __OSSPRC_OPTION_H__
  +#define __OSSPRC_OPTION_H__
  +
   /* Option values used with popt */
   #define RC_USE_VAL  32
   #define RC_DBG_VAL  33
  @@ -28,3 +60,5 @@
   #define RC_CMN_VAL  58
   #define RC_DFL_VAL  59
   #define RC_ERR_VAL  60
  +
  +#endif /* __OSSPRC_OPTION_H__ */
  Index: ossp-pkg/rc/rc_pcre.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 rc_pcre.c
  --- ossp-pkg/rc/rc_pcre.c	4 Feb 2002 21:46:00 -0000	1.2
  +++ ossp-pkg/rc/rc_pcre.c	8 Feb 2002 18:36:40 -0000	1.3
  @@ -42,7 +42,7 @@
      ----------------------------------------------------------------------------- */
   
   #ifdef HAVE_CONFIG_H
  -#include "rc_config.h"
  +#include "ac_config.h"
   #endif
   
   #include <ctype.h>
  Index: ossp-pkg/rc/rc_util.c
  ============================================================
  $ cvs update -p -r1.1 rc_util.c
  /*  rc - OSSP Run-command processor
  **  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2002 Ralf S. Engelschall
  **
  **  This file is part of OSSP rc, a portable Run-command processor
  **  which can be found at http://www.ossp.org/pkg/rc/
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  rc_util.c: Run-command processor ISO C source file
  */
  
  #include "rc.h"         /* Error definitions  */
  #include "rc_const.h"   /* String definitions */
  
  /* Translate an error code to a string */
  char *strErr(rc_return_t rv)
  {
      if      (rv == RC_OK)      return RC_ERRSTR_OK;
      else if (rv == RC_ERR_USE) return RC_ERRSTR_USE;
      else if (rv == RC_ERR_MEM) return RC_ERRSTR_MEM;
      else if (rv == RC_ERR_SYS) return RC_ERRSTR_SYS;
      else if (rv == RC_ERR_IO)  return RC_ERRSTR_IO;
      else if (rv == RC_ERR_INT) return RC_ERRSTR_INT;
      else                       return RC_ERRSTR_UNK;
  }

From ossp-cvs-owner@ossp.org  Fri Feb  8 21:27:34 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4435676503; Fri,  8 Feb 2002 21:27:34 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cache configure.ac
Message-Id: <20020208202734.4435676503@mail.ossp.org>
Date: Fri,  8 Feb 2002 21:27:34 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   08-Feb-2002 21:27:34
  Branch: HEAD                             Handle: 2002020820273300

  Modified files:
    ossp-pkg/cache          configure.ac

  Log:
    fix naming

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/cache/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/cache/configure.ac
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 configure.ac
  --- ossp-pkg/cache/configure.ac	9 Jan 2002 10:44:28 -0000	1.1
  +++ ossp-pkg/cache/configure.ac	8 Feb 2002 20:27:33 -0000	1.2
  @@ -34,7 +34,7 @@
   
   AC_DIVERT_PUSH(NOTICE)
   V=`./shtool version -l txt -d long VERSION`
  -./shtool echo -e "Configuring %BOSSP cache%b (Caching Library), Version %B${V}%b"
  +./shtool echo -e "Configuring %BOSSP cache%b (Caching), Version %B${V}%b"
   AC_DIVERT_POP()
   
   AC_SET_MAKE

From ossp-cvs-owner@ossp.org  Fri Feb  8 21:27:44 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4D65E76526; Fri,  8 Feb 2002 21:27:44 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cache .cvsignore
Message-Id: <20020208202744.4D65E76526@mail.ossp.org>
Date: Fri,  8 Feb 2002 21:27:44 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   08-Feb-2002 21:27:44
  Branch: HEAD                             Handle: 2002020820274300

  Added files:
    ossp-pkg/cache          .cvsignore

  Log:
    ignore generated files

  Summary:
    Revision    Changes     Path
    1.1         +11 -0      ossp-pkg/cache/.cvsignore
  ____________________________________________________________________________

  Index: ossp-pkg/cache/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  Makefile
  cache-config
  cache_test
  config.guess
  config.h
  config.h.in
  config.sub
  configure
  libtool.m4
  ltmain.sh
  shtool

From ossp-cvs-owner@ossp.org  Mon Feb 11 13:34:30 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 79A9B764F3; Mon, 11 Feb 2002 13:34:30 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc_private.h
Message-Id: <20020211123430.79A9B764F3@mail.ossp.org>
Date: Mon, 11 Feb 2002 13:34:30 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   11-Feb-2002 13:34:30
  Branch: HEAD                             Handle: 2002021112342900

  Modified files:
    ossp-pkg/rc             rc_private.h

  Log:
    Added debugging support and made a few corrections.

  Summary:
    Revision    Changes     Path
    1.2         +33 -6      ossp-pkg/rc/rc_private.h
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc_private.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 rc_private.h
  --- ossp-pkg/rc/rc_private.h	7 Feb 2002 12:35:25 -0000	1.1
  +++ ossp-pkg/rc/rc_private.h	11 Feb 2002 12:34:29 -0000	1.2
  @@ -27,13 +27,40 @@
   **  rc_private.h: Run-command processor ISO C private API header file
   */
   
  -#ifndef __OSSPRC_P_H__
  -#define __OSSPRC_P_H__
  +#ifndef __OSSPRC_PRIVATE_H__
  +#define __OSSPRC_PRIVATE_H__
   
  -#include "rc_config.h"
  +#ifdef HAVE_CONFIG_H
  +#include "ac_config.h"
  +#endif
  +
  +/* Assertion and tracing support */
  +#include <assert.h>
  +#ifndef DEBUG
  +#define NDEBUG
  +#define TRACE(expr) ((void)0)
  +#else
  +#define TRACE(str)  fprintf(stderr, "%s:%d: %s\n", __FILE__, __LINE__, str)
  +#endif
   
  -#ifdef HAVE_SYS_TIME_H /* must come after include rc_config.h */
  -#include <sys/time.h>
  +/* Memory debugging support */
  +#if defined(HAVE_DMALLOC_H) && defined(WITH_DMALLOC)
  +#include "dmalloc.h"
   #endif
   
  -#endif /* __OSSPRC_P_H__ */
  +/* Define the ability to throw OSSP ex exceptions       */
  +#include "ex.h" /* OSSP ex exception handling library   */
  +#define RC_THROW(rv) \
  +    (  (rv) != RC_OK && (ex_catching && !ex_shielding) \
  +     ? (ex_throw(ossprc_id, NULL, (rv)), (rv)) : (rv))
  +
  +#include "val.h"
  +
  +
  +/* Main rc configuration storage */
  +typedef struct {
  +    void *pvCtx;
  +    val_t *pVal;
  +} rc_config_t;
  +
  +#endif /* __OSSPRC_PRIVATE_H__ */

From ossp-cvs-owner@ossp.org  Tue Feb 12 18:59:51 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F095376503; Tue, 12 Feb 2002 18:59:50 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc Makefile.in configure.in rc-sample.pod rc.exam...
Message-Id: <20020212175950.F095376503@mail.ossp.org>
Date: Tue, 12 Feb 2002 18:59:50 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   12-Feb-2002 18:59:50
  Branch: HEAD                             Handle: 2002021217595000

  Modified files:
    ossp-pkg/rc             Makefile.in configure.in rc-sample.pod rc.example

  Log:
    Cleanup.

  Summary:
    Revision    Changes     Path
    1.14        +6  -3      ossp-pkg/rc/Makefile.in
    1.14        +3  -3      ossp-pkg/rc/configure.in
    1.9         +1  -1      ossp-pkg/rc/rc-sample.pod
    1.8         +9  -5      ossp-pkg/rc/rc.example
  ____________________________________________________________________________

  Index: ossp-pkg/rc/Makefile.in
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 Makefile.in
  --- ossp-pkg/rc/Makefile.in	8 Feb 2002 18:35:03 -0000	1.13
  +++ ossp-pkg/rc/Makefile.in	12 Feb 2002 17:59:50 -0000	1.14
  @@ -46,6 +46,7 @@
   LIBS            = @LIBS@
   
   RM              = rm -f
  +STRIP           = strip
   CHMOD           = chmod
   RMDIR           = rmdir
   SHTOOL          = ./shtool
  @@ -101,8 +102,8 @@
   	$(RM) rc_pcre.gen
   
   $(PROG_NAME): $(OBJS)
  -#	$(LIBTOOL) --mode=link --quiet $(CC) $(LDFLAGS) -o $(PROG_NAME) $(OBJS) $(LIBS)
  -	$(CC) $(LDFLAGS) -o $(PROG_NAME) $(OBJS) $(LIBS)
  +#	$(LIBTOOL) --mode=link --quiet $(CC) $(LDFLAGS) -o $@ $+ $(LIBS)
  +	$(CC) $(LDFLAGS) -o $@ $+ $(LIBS)
   
   rc.1: rc.pod
   	VS=`$(SHTOOL) version -lc -dshort rc_version.c`; \
  @@ -118,7 +119,7 @@
                  --release="$$VS" --date="$$VL" \
                  rc-sample.pod >rc-sample.5
   
  -install: all
  +install:
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man1
  @@ -147,3 +148,5 @@
   test: rc
   	$(CHMOD) 755 rc_test.sh > /dev/null 2>&1
   	./rc_test.sh
  +
  +.PHONY: install uninstall clean distclean realclean check test
  Index: ossp-pkg/rc/configure.in
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 configure.in
  --- ossp-pkg/rc/configure.in	8 Feb 2002 18:35:03 -0000	1.13
  +++ ossp-pkg/rc/configure.in	12 Feb 2002 17:59:50 -0000	1.14
  @@ -93,7 +93,7 @@
   AC_SUBST(SUBDIR_EX)
   
   dnl Check for OSSP str library
  -AC_CHECK_EXTLIB([OSSP Str],
  +AC_CHECK_EXTLIB([OSSP str],
                   str, str_parse, str.h,
                   [SUBDIR_STR=""],
                   [SUBDIR_STR="rc_str"
  @@ -104,7 +104,7 @@
   AC_SUBST(SUBDIR_STR)
   
   dnl Check for OSSP var library
  -AC_CHECK_EXTLIB([OSSP Var],
  +AC_CHECK_EXTLIB([OSSP var],
                   var, var_expand, var.h,
                   [SUBDIR_VAR=""],
                   [SUBDIR_VAR="rc_var"
  @@ -115,7 +115,7 @@
   AC_SUBST(SUBDIR_VAR)
   
   dnl Check for OSSP val library
  -AC_CHECK_EXTLIB([OSSP Val],
  +AC_CHECK_EXTLIB([OSSP val],
                   val, val_expand, val.h,
                   [SUBDIR_VAL=""],
                   [SUBDIR_VAL="rc_val"
  Index: ossp-pkg/rc/rc-sample.pod
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 rc-sample.pod
  --- ossp-pkg/rc/rc-sample.pod	4 Feb 2002 22:35:20 -0000	1.8
  +++ ossp-pkg/rc/rc-sample.pod	12 Feb 2002 17:59:50 -0000	1.9
  @@ -122,7 +122,7 @@
   This is the example runcommand script of an B<OpenPKG> package C<foo>.
   It is installed by package C<foo> and used read-only.
   
  - #!/cw/etc/rc
  + #! /cw/etc/rc
    %config
        foo_enable=yes
        foo_flags=""
  Index: ossp-pkg/rc/rc.example
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 rc.example
  --- ossp-pkg/rc/rc.example	4 Feb 2002 22:35:20 -0000	1.7
  +++ ossp-pkg/rc/rc.example	12 Feb 2002 17:59:50 -0000	1.8
  @@ -50,7 +50,8 @@
   %go -u root
       @start  # A section with just one reference is an alias
   
  -%error  # We have a rc (not user-level) error
  +%error  # We have a rc error
  +    logger -p local0.notice "OSSP rc error"
   # Very rough representation of built-in rc language
       +logit DAEMON CRITICAL;
       +outconsole ${rc_errstring}; # rc_errcode is also available
  @@ -99,7 +100,8 @@
   !doit -u root
       &run    # A section with just one reference is an alias
   
  -!problem # We have a rc (not user-level) error
  +!problem # We have a rc error
  +    logger -p local0.notice "OSSP rc error"
   # Very rough representation of built-in rc language
       +logit DAEMON CRITICAL;
       +outconsole ${rc_errstring}; # rc_errcode is also available
  @@ -156,7 +158,8 @@
       <refer name=start> # A section with just one reference is an alias
   </go>
   
  -<error> # We have a rc (not user-level) error
  +<error> # We have a rc error
  +    logger -p local0.notice "OSSP rc error"
   # Very rough representation of built-in rc language
       +logit DAEMON CRITICAL;
       +outconsole ${rc_errstring}; # rc_errcode is also available
  @@ -240,9 +243,10 @@
           start REFER # A section with just one reference is an alias
       END
   
  -error ERROR # We have a rc (not user-level) error
  -# Very rough representation of built-in rc language
  +error ERROR # We have a rc error
       BEGIN
  +        logger -p local0.notice "OSSP rc error"
  +    # Very rough representation of built-in rc language
           +logit DAEMON CRITICAL;
           +outconsole ${rc_errstring}; # rc_errcode is also available
           +outconsole "Runcommand-level error in line ";

From ossp-cvs-owner@ossp.org  Wed Feb 13 14:04:14 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 861EB764F3; Wed, 13 Feb 2002 14:04:14 +0100 (CET)
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Message-Id: <20020213130414.861EB764F3@mail.ossp.org>
Date: Wed, 13 Feb 2002 14:04:14 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   OSSP Project Master
  Root:   /e/ossp/cvs                      Email:  ossp@ossp.org
  Module: CVSROOT                          Date:   13-Feb-2002 14:04:14
  Branch: HEAD                             Handle: 2002021313041400

  Modified files:
    CVSROOT                 modules

  Log:
    add pcre to lmtp2nntp

  Summary:
    Revision    Changes     Path
    1.52        +2  -1      CVSROOT/modules
  ____________________________________________________________________________

  Index: CVSROOT/modules
  ============================================================
  $ cvs diff -u -r1.51 -r1.52 modules
  --- CVSROOT/modules	8 Feb 2002 11:50:47 -0000	1.51
  +++ CVSROOT/modules	13 Feb 2002 13:04:14 -0000	1.52
  @@ -91,7 +91,7 @@
   petidomo        ossp-pkg/petidomo
   
   #   OSSP lmtp2nntp
  -lmtp2nntp       ossp-pkg/lmtp2nntp &lmtp2nntp_str &lmtp2nntp_l2 &lmtp2nntp_sa &lmtp2nntp_var &lmtp2nntp_val &lmtp2nntp_ex &lmtp2nntp_popt
  +lmtp2nntp       ossp-pkg/lmtp2nntp &lmtp2nntp_str &lmtp2nntp_l2 &lmtp2nntp_sa &lmtp2nntp_var &lmtp2nntp_val &lmtp2nntp_ex &lmtp2nntp_popt &lmtp2nntp_pcre
   lmtp2nntp_str   -d lib_str  ossp-pkg/str
   lmtp2nntp_l2    -d lib_l2   ossp-pkg/l2
   lmtp2nntp_sa    -d lib_sa   ossp-pkg/sa
  @@ -99,6 +99,7 @@
   lmtp2nntp_val   -d lib_val  ossp-pkg/val
   lmtp2nntp_ex    -d lib_ex   ossp-pkg/ex
   lmtp2nntp_popt  -d lib_popt ossp-pkg/popt
  +lmtp2nntp_pcre  -d lib_pcre ossp-pkg/pcre
   
   #   OSSP rc
   rc              ossp-pkg/rc &rc_str &rc_var &rc_val &rc_popt &rc_ex

From ossp-cvs-owner@ossp.org  Wed Feb 13 14:18:26 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2BB7B764F3; Wed, 13 Feb 2002 14:18:26 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp Makefile.in configure.ac devtool.conf
Message-Id: <20020213131826.2BB7B764F3@mail.ossp.org>
Date: Wed, 13 Feb 2002 14:18:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   13-Feb-2002 14:18:26
  Branch: HEAD                             Handle: 2002021313182500

  Modified files:
    ossp-pkg/lmtp2nntp      Makefile.in configure.ac devtool.conf

  Log:
    absorb pcre

  Summary:
    Revision    Changes     Path
    1.45        +1  -1      ossp-pkg/lmtp2nntp/Makefile.in
    1.24        +12 -1      ossp-pkg/lmtp2nntp/configure.ac
    1.5         +6  -0      ossp-pkg/lmtp2nntp/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.44 -r1.45 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	30 Jan 2002 14:22:23 -0000	1.44
  +++ ossp-pkg/lmtp2nntp/Makefile.in	13 Feb 2002 13:18:25 -0000	1.45
  @@ -48,7 +48,7 @@
   SRCS = lmtp2nntp_main.c   lmtp2nntp_daemon.c lmtp2nntp_lmtp.c lmtp2nntp_nntp.c lmtp2nntp_argz.c lmtp2nntp_shpat.c lmtp2nntp_msg.c lmtp2nntp_option.c lmtp2nntp_config.c lmtp2nntp_version.c 
   OBJS = lmtp2nntp_main.o   lmtp2nntp_daemon.o lmtp2nntp_lmtp.o lmtp2nntp_nntp.o lmtp2nntp_argz.o lmtp2nntp_shpat.o lmtp2nntp_msg.o lmtp2nntp_option.o lmtp2nntp_config.o lmtp2nntp_version.o
   
  -SUBDIRS = @SUBDIR_EX@ @SUBDIR_STR@ @SUBDIR_L2@ @SUBDIR_SA@ @SUBDIR_VAR@ @SUBDIR_VAL@ @SUBDIR_POPT@
  +SUBDIRS = @SUBDIR_EX@ @SUBDIR_STR@ @SUBDIR_L2@ @SUBDIR_SA@ @SUBDIR_VAR@ @SUBDIR_VAL@ @SUBDIR_POPT@ @SUBDIR_PCRE@
   
   all: _SUBDIRS_all lmtp2nntp lmtp2nntp.8
   
  Index: ossp-pkg/lmtp2nntp/configure.ac
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 configure.ac
  --- ossp-pkg/lmtp2nntp/configure.ac	30 Jan 2002 14:22:23 -0000	1.23
  +++ ossp-pkg/lmtp2nntp/configure.ac	13 Feb 2002 13:18:25 -0000	1.24
  @@ -128,6 +128,17 @@
                    LIBS_EXTRA="$LIBS_EXTRA -lpopt"])
   AC_SUBST(SUBDIR_POPT)
   
  +dnl #   check for OSSP pcre library
  +AC_CHECK_EXTLIB([OSSP pcre], 
  +                pcre, pcre_compile, pcre.h, 
  +                [SUBDIR_PCRE=""], 
  +                [SUBDIR_PCRE="lib_pcre"
  +                 CPPFLAGS="$CPPFLAGS -Ilib_pcre"
  +                 CFLAGS="$CFLAGS -Ilib_pcre"
  +                 LDFLAGS="$LDFLAGS -Llib_pcre/.libs"
  +                 LIBS_EXTRA="$LIBS_EXTRA -lpcre"])
  +AC_SUBST(SUBDIR_PCRE)
  +
   dnl #   check for external Dmalloc library
   AC_CHECK_EXTLIB([Dmalloc], dmalloc, dmalloc_debug, dmalloc.h, AC_DEFINE(DMALLOC))
   
  @@ -138,7 +149,7 @@
   export enable_shared
   enable_headline=no
   export enable_headline
  -AC_CONFIG_SUBDIRS([$SUBDIR_EX $SUBDIR_STR $SUBDIR_L2 $SUBDIR_SA $SUBDIR_VAR $SUBDIR_VAL $SUBDIR_POPT])
  +AC_CONFIG_SUBDIRS([$SUBDIR_EX $SUBDIR_STR $SUBDIR_L2 $SUBDIR_SA $SUBDIR_VAR $SUBDIR_VAL $SUBDIR_POPT $SUBDIR_PCRE])
   
   dnl #   standard output generation
   AC_CONFIG_HEADERS(config.h)
  Index: ossp-pkg/lmtp2nntp/devtool.conf
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 devtool.conf
  --- ossp-pkg/lmtp2nntp/devtool.conf	30 Jan 2002 14:22:23 -0000	1.4
  +++ ossp-pkg/lmtp2nntp/devtool.conf	13 Feb 2002 13:18:25 -0000	1.5
  @@ -27,6 +27,9 @@
       echo "===> lib_popt (devtool autogen)"
       (cd lib_popt && ./devtool autogen)
       echo "<=== lib_popt"
  +    echo "===> lib_pcre (devtool autogen)"
  +    (cd lib_pcre && ./devtool autogen)
  +    echo "<=== lib_pcre"
   
   %autoclean
       @autoclean shtool
  @@ -53,6 +56,9 @@
       echo "===> lib_popt (devtool autoclean)"
       (cd lib_popt && ./devtool autoclean)
       echo "<=== lib_popt"
  +    echo "===> lib_pcre (devtool autoclean)"
  +    (cd lib_pcre && ./devtool autoclean)
  +    echo "<=== lib_pcre"
   
   %configure
       ./configure \

From ossp-cvs-owner@ossp.org  Wed Feb 13 14:46:59 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 32455764F3; Wed, 13 Feb 2002 14:46:59 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO
Message-Id: <20020213134659.32455764F3@mail.ossp.org>
Date: Wed, 13 Feb 2002 14:46:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   13-Feb-2002 14:46:59
  Branch: HEAD                             Handle: 2002021313465800

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO

  Log:
    brainstorming

  Summary:
    Revision    Changes     Path
    1.54        +48 -0      ossp-pkg/lmtp2nntp/00TODO
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.53 -r1.54 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	7 Feb 2002 12:54:04 -0000	1.53
  +++ ossp-pkg/lmtp2nntp/00TODO	13 Feb 2002 13:46:58 -0000	1.54
  @@ -95,3 +95,51 @@
       crossposting problem                          -h [Newsgroups:see perl example above and use feature 2.)\n]
       potential to merge post/header modes          -h [Newsgroups:${_EnvelopeRCPT}\n]
   
  +  **** DETAILS ****
  +
  +  create an array with columns for "header" and every value, index is "header";
  +
  +  -h [priority]:[regex]:header:[value]
  +
  +  # merge values from duplicate headers and separte them with "comma space"
  +  -h :(Reply-To|To|Cc|Bcc):$0: [%{$0[#]}%{$0[#+1]:+, }]
  +
  +  # keep only first value from duplicate headers
  +  -h :(X-Firstonly):$0: %{$0[0]}
  +
  +  # replace empty Subject with text "None"
  +  -h :Subject: %{$Subject:-None}
  +
  +  # create Message-ID if omitted or illegal (<> single @)
  +  -h :Messageid: %{messagid:s/^([^@+@[^@]+)$/<$1/:s/^[^<].*$/%{tool.createmessageid}/}
  +
  +  # append a header
  +  -h ::X-Append: Tail
  +
  +  # remove a header (empty value)
  +  -h ::X-Delete:
  +
  +  foreach rule {
  +      if (rule has regex) {
  +          foreach header {
  +              if (regex matches) {
  +                  createheader
  +                  substitutevalue
  +                  writeheader(overwrite_if_existing)
  +              }
  +          }
  +      }
  +      else { /* rule has no regex */
  +          createheader
  +          substitutevalue
  +          writeheader(overwrite_if_existing)
  +      }
  +  }
  +
  +
  +
  +
  +
  +
  +
  +

From ossp-cvs-owner@ossp.org  Wed Feb 13 17:25:39 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9790C764F3; Wed, 13 Feb 2002 17:25:39 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO fixme.h lmtp2nntp_config.c lmtp2...
Message-Id: <20020213162539.9790C764F3@mail.ossp.org>
Date: Wed, 13 Feb 2002 17:25:39 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   13-Feb-2002 17:25:39
  Branch: HEAD                             Handle: 2002021316253800

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO fixme.h lmtp2nntp_config.c lmtp2nntp_main.c
                            lmtp2nntp_option.c

  Log:
    new -h option and config

  Summary:
    Revision    Changes     Path
    1.55        +1  -1      ossp-pkg/lmtp2nntp/00TODO
    1.14        +16 -0      ossp-pkg/lmtp2nntp/fixme.h
    1.48        +50 -17     ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.40        +16 -2      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
    1.14        +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.54 -r1.55 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	13 Feb 2002 13:46:58 -0000	1.54
  +++ ossp-pkg/lmtp2nntp/00TODO	13 Feb 2002 16:25:38 -0000	1.55
  @@ -99,7 +99,7 @@
   
     create an array with columns for "header" and every value, index is "header";
   
  -  -h [priority]:[regex]:header:[value]
  +  -h [pri]:[regex]:header:[val]
   
     # merge values from duplicate headers and separte them with "comma space"
     -h :(Reply-To|To|Cc|Bcc):$0: [%{$0[#]}%{$0[#+1]:+, }]
  Index: ossp-pkg/lmtp2nntp/fixme.h
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 fixme.h
  --- ossp-pkg/lmtp2nntp/fixme.h	7 Feb 2002 08:59:44 -0000	1.13
  +++ ossp-pkg/lmtp2nntp/fixme.h	13 Feb 2002 16:25:38 -0000	1.14
  @@ -29,6 +29,17 @@
       char   *lhlo_domain;
   };
   #include <sys/utsname.h>
  +
  +struct headerrule_st;
  +typedef struct headerrule_st headerrule_t;
  +struct headerrule_st {
  +    headerrule_t *next;
  +    int           pri;
  +    char         *regex;
  +    char         *header;
  +    char         *val;
  +};
  +
   typedef struct {
       l2_context_t    ctx;
       val_t          *val;
  @@ -38,8 +49,13 @@
       char           *option_operationmodefakestatus;
       char           *option_operationmodefakedsn;
       int             option_maxmessagesize;
  +
  +    headerrule_t   *option_firstheaderrule;
  +    /* FIXME obsolete */
       char           *azHeaderValuePairs;
       size_t          asHeaderValuePairs;
  +
  +
       int             option_timeout_lmtp_accept;
       int             option_timeout_lmtp_read;
       int             option_timeout_lmtp_write;
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.47 -r1.48 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	7 Feb 2002 13:36:16 -0000	1.47
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	13 Feb 2002 16:25:38 -0000	1.48
  @@ -526,45 +526,78 @@
       catch (ex)
           rethrow;
   
  -    /* --headervalue MULTI */
  +    /* --headerrule MULTI */
       try {
           char *cp;
           int i;
  +        char *cpPri;
  +        char *cpRegex;
           char *cpHeader;
  -        char *cpValue;
  +        char *cpVal;
  +        headerrule_t *hrNew;
  +        headerrule_t *hrI;
  +        headerrule_t *hrP;
   
  -        if (   (val_get(ctx->val, "option.headervalue", &ov) != VAL_OK)
  +        if (   (val_get(ctx->val, "option.headerrule", &ov) != VAL_OK)
               || (ov->ndata <  0)
               || (ov->ndata >= 1 && ov->data.m == NULL)
                 ) throw(0,0,0);
           log1(ctx, DEBUG, "ov->ndata = %d", ov->ndata);
           for (i = 0; i < ov->ndata; i++)
  -            log2(ctx, TRACE, "--headervalue[%d] = \"%s\"", i, (ov->data.m)[i]);
  +            log2(ctx, TRACE, "--headerule[%d] = \"%s\"", i, (ov->data.m)[i]);
   
           if (ov->ndata >= 1) {
               for (i = 0; i < ov->ndata; i++) {
                   cp = (ov->data.m)[i];
                   log2(ctx, DEBUG, "cp = (data.m)[%d] = \"%s\"", i, cp);
  -                cpHeader = strdup(cp);
  -                if ((cp = strchr(cpHeader, ':')) == NULL) {
  -                    log1(ctx, ERROR, "option --headervalue, header (%s) terminating colon missing", (ov->data.m)[i]);
  +                cp = strdup(cp); //FIXME
  +                /* priority */
  +                cpPri = cp;
  +                if ((cp = strchr(cp, ':')) == NULL) {
  +                    log1(ctx, ERROR, "option --headerrule, priority (%s) terminating colon missing", (ov->data.m)[i]);
                       throw(0,0,0);
                   }
  +                *cp = NUL;
                   cp++;
  +                /* regex */
  +                cpRegex = cp;
  +                if ((cp = strchr(cp, ':')) == NULL) {
  +                    log1(ctx, ERROR, "option --headerrule, regex (%s) terminating colon missing", (ov->data.m)[i]);
  +                    throw(0,0,0);
  +                }
                   *cp = NUL;
  -                log2(ctx, DEBUG, "header[%d] = \"%s\"", i, cpHeader);
                   cp++;
  -                while (*cp == ' ') cp++; //FIXME note this in NEWS
  -                if (*cp == NUL) {
  -                    log1(ctx, ERROR, "option --headervalue, value (%s) missing", (ov->data.m)[i]);
  +                /* header */
  +                cpHeader = cp;
  +                if ((cp = strchr(cp, ':')) == NULL) {
  +                    log1(ctx, ERROR, "option --headerrule, header (%s) terminating colon missing", (ov->data.m)[i]);
                       throw(0,0,0);
                   }
  -                cpValue = strdup(cp);
  -                log2(ctx, DEBUG, " value[%d] = \"%s\"", i, cpValue);
  -                argz_add(&ctx->azHeaderValuePairs, &ctx->asHeaderValuePairs, cpHeader);
  -                argz_add(&ctx->azHeaderValuePairs, &ctx->asHeaderValuePairs, cpValue);
  -                free(cpHeader);
  -                free(cpValue);
  +                *cp = NUL;
  +                cp++;
  +                /* value */
  +                cpVal = cp;
  +
  +                if ((hrNew = (headerrule_t *)malloc(sizeof(headerrule_t))) == NULL) throw(0,0,0);
  +                hrNew->next   = NULL;
  +                hrNew->pri    = atoi(cpPri);
  +                hrNew->regex  = cpRegex;
  +                hrNew->header = cpHeader;
  +                hrNew->val    = cpVal;
  +
  +                if (ctx->option_firstheaderrule == NULL)
  +                    ctx->option_firstheaderrule = hrNew;
  +                else {
  +                    for (hrP = NULL, hrI = ctx->option_firstheaderrule;
  +                         hrI != NULL && hrI->pri <= hrNew->pri;
  +                         hrP = hrI, hrI = hrI->next);
  +                    if (hrI != NULL)
  +                        hrNew->next = hrI; /* insert */
  +                    if (hrP != NULL)
  +                        hrP->next = hrNew; /* append */
  +                    else
  +                        ctx->option_firstheaderrule = hrNew; /* newfirst */
  +                }
               }
           }
       }
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.39 -r1.40 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	7 Feb 2002 13:38:08 -0000	1.39
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	13 Feb 2002 16:25:38 -0000	1.40
  @@ -349,8 +349,9 @@
       ctx->option_operationmodefakestatus = NULL;
       ctx->option_operationmodefakedsn    = NULL;
       ctx->option_maxmessagesize = 0;
  -    ctx->azHeaderValuePairs = NULL;
  -    ctx->asHeaderValuePairs = 0;
  +    ctx->option_firstheaderrule = NULL;
  +    ctx->azHeaderValuePairs = NULL; //FIXME obsolete
  +    ctx->asHeaderValuePairs = 0;    //FIXME obsolete
       ctx->option_timeout_lmtp_accept  = 0;
       ctx->option_timeout_lmtp_read    = 0;
       ctx->option_timeout_lmtp_write   = 0;
  @@ -398,6 +399,19 @@
       (void)option_create(&o, ctx->val); /* FIXME */
       (void)option_parse(o, argc, argv);
       (void)config_context(ctx);
  +
  +{
  +headerrule_t *hrI;
  +fprintf(stderr, "DEBUG: los geht's\n");
  +for (hrI = ctx->option_firstheaderrule; hrI != NULL; hrI = hrI->next) {
  +    fprintf(stderr, "DEBUG: cpPri    = %d\n", hrI->pri);
  +    fprintf(stderr, "DEBUG: cpRegex  = \"%s\"\n", hrI->regex);
  +    fprintf(stderr, "DEBUG: cpHeader = \"%s\"\n", hrI->header);
  +    fprintf(stderr, "DEBUG: cpValue  = \"%s\"\n", hrI->val);
  +}
  +fprintf(stderr, "DEBUG: das war's\n");
  +}
  +    CU(0); //FIXME
   
       if (getuid() != ctx->option_uid) {
           if (setuid(ctx->option_uid) == -1) {
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 lmtp2nntp_option.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	6 Feb 2002 13:51:38 -0000	1.13
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	13 Feb 2002 16:25:38 -0000	1.14
  @@ -616,7 +616,7 @@
       (void)option_register(o, "client",             'c', OPT_SINGLE,  NULL,        "NNTP client bind",                  "addr[:port]",                &stdsyntax, "m/.*/" );
       (void)option_register(o, "destination",        'd', OPT_MULTI,   NULL,        "NNTP client destination",           "addr[:port]",                &stdsyntax, "m/.*/" );
       (void)option_register(o, "groupmode",          'g', OPT_SINGLE,  "arg",       "arg|envelope|header",               "groupmode",                  &stdsyntax, "m/.*/" ); //"m/(arg|envelope|header)/" );
  -    (void)option_register(o, "headervalue",        'h', OPT_MULTI,   NULL,        "header/ value added to message",    "header: value",              &stdsyntax, "m/.*/" );
  +    (void)option_register(o, "headerrule",         'h', OPT_MULTI,   NULL,        "header rewriting rule",             "[pri]:[regex]:header:[val]", &stdsyntax, "m/^[0-9]*:.*:.+:.*$/" );
       (void)option_register(o, "include",            'i', OPT_MULTI,   NULL,        "configfile to include",             "configfile",                 &includeit, "m/.*/" );
       (void)option_register(o, "timeoutlmtp",        NUL, OPT_SINGLE,  NULL,        "LMTP server default timeout",       "sec",                        &stdsyntax, "m/.*/" );
       (void)option_register(o, "timeoutlmtpaccept",  NUL, OPT_SINGLE,  "0",         "LMTP server accept timeout",        "sec",                        &stdsyntax, "m/.*/" );

From ossp-cvs-owner@ossp.org  Wed Feb 13 17:35:28 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 44FBB7651B; Wed, 13 Feb 2002 17:35:16 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web .wmlrc 00README Makefile ossp-web/SHARE .wmkrc os...
Message-Id: <20020213163516.44FBB7651B@mail.ossp.org>
Date: Wed, 13 Feb 2002 17:35:16 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   13-Feb-2002 17:35:14
  Branch: HEAD                             Handle: 2002021316345615

  Added files:
    ossp-web                .wmlrc 00README Makefile index.wml
    ossp-web/SHARE          .wmkrc ossp.wml ossp_canvas.wml ossp_colors.wml
                            ossp_css.wml ossp_filelist.wml ossp_info.wml
                            ossp_navbar.wml ossp_newsflash.wml ossp_page.wml
    ossp-web/SHARE/ossp_img ossp-bg-dark.jpg ossp-bg-light.jpg ossp-bg.psd
                            ossp-bg.txt ossp-bg.xcf ossp-dashes.png
                            ossp-dashes.xcf ossp-logo.png ossp-logo.psd
                            ossp-logo.xcf ossp-puzzle.psd
                            ossp.imgdot-1x1-transp-ffffff.gif
    ossp-web/com            contributors.wml developers.wml index.wml
                            sponsors.wml users.wml
    ossp-web/doc            article.wml devman.wml faq.wml index.wml
                            license.wml presentation.wml summary.wml
                            usrman.wml whitepaper.wml
    ossp-web/new            events.txt events.wml index.wml news.txt news.wml
                            pr.wml press.wml
    ossp-web/pkg            index.wml
    ossp-web/pkg/boot       index.wml
    ossp-web/pkg/kern       index.wml
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/l2     index.wml
    ossp-web/pkg/mod        index.wml
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/lmtp2nntp
                            index.wml
    ossp-web/rel            docs.wml index.wml projects.wml standards.wml
    ossp-web/sit            feedback.wml index.wml map.wml mirrors.wml
                            search.wml
    ossp-web/src            browse.wml download.wml index.wml mirrors.wml
                            repository.wml
    ossp-web/sup            bugdb.wml forums.wml index.wml

  Log:
    Wohhoooo! First cut for our long awaited OSSP website...

  Summary:
    Revision    Changes     Path
    1.1         +14 -0      ossp-web/.wmlrc
    1.1         +3  -0      ossp-web/00README
    1.1         +9  -0      ossp-web/Makefile
    1.1         +1  -0      ossp-web/SHARE/.wmkrc
    1.1         +23 -0      ossp-web/SHARE/ossp.wml
    1.1         +142 -0     ossp-web/SHARE/ossp_canvas.wml
    1.1         +29 -0      ossp-web/SHARE/ossp_colors.wml
    1.1         +116 -0     ossp-web/SHARE/ossp_css.wml
    1.1         +45 -0      ossp-web/SHARE/ossp_filelist.wml
    1.1         BLOB        ossp-web/SHARE/ossp_img/ossp-bg-dark.jpg
    1.1         BLOB        ossp-web/SHARE/ossp_img/ossp-bg-light.jpg
    1.1         BLOB        ossp-web/SHARE/ossp_img/ossp-bg.psd
    1.1         +19 -0      ossp-web/SHARE/ossp_img/ossp-bg.txt
    1.1         BLOB        ossp-web/SHARE/ossp_img/ossp-bg.xcf
    1.1         BLOB        ossp-web/SHARE/ossp_img/ossp-dashes.png
    1.1         BLOB        ossp-web/SHARE/ossp_img/ossp-dashes.xcf
    1.1         BLOB        ossp-web/SHARE/ossp_img/ossp-logo.png
    1.1         BLOB        ossp-web/SHARE/ossp_img/ossp-logo.psd
    1.1         BLOB        ossp-web/SHARE/ossp_img/ossp-logo.xcf
    1.1         BLOB        ossp-web/SHARE/ossp_img/ossp-puzzle.psd
    1.1         BLOB        ossp-web/SHARE/ossp_img/ossp.imgdot-1x1-transp-ffffff.gif
    1.1         +12 -0      ossp-web/SHARE/ossp_info.wml
    1.1         +259 -0     ossp-web/SHARE/ossp_navbar.wml
    1.1         +61 -0      ossp-web/SHARE/ossp_newsflash.wml
    1.1         +52 -0      ossp-web/SHARE/ossp_page.wml
    1.1         +7  -0      ossp-web/com/contributors.wml
    1.1         +7  -0      ossp-web/com/developers.wml
    1.1         +7  -0      ossp-web/com/index.wml
    1.1         +7  -0      ossp-web/com/sponsors.wml
    1.1         +7  -0      ossp-web/com/users.wml
    1.1         +7  -0      ossp-web/doc/article.wml
    1.1         +7  -0      ossp-web/doc/devman.wml
    1.1         +7  -0      ossp-web/doc/faq.wml
    1.1         +7  -0      ossp-web/doc/index.wml
    1.1         +7  -0      ossp-web/doc/license.wml
    1.1         +7  -0      ossp-web/doc/presentation.wml
    1.1         +7  -0      ossp-web/doc/summary.wml
    1.1         +7  -0      ossp-web/doc/usrman.wml
    1.1         +7  -0      ossp-web/doc/whitepaper.wml
    1.1         +17 -0      ossp-web/index.wml
    1.1         +4  -0      ossp-web/new/events.txt
    1.1         +10 -0      ossp-web/new/events.wml
    1.1         +7  -0      ossp-web/new/index.wml
    1.1         +744 -0     ossp-web/new/news.txt
    1.1         +10 -0      ossp-web/new/news.wml
    1.1         +7  -0      ossp-web/new/pr.wml
    1.1         +7  -0      ossp-web/new/press.wml
    1.1         +7  -0      ossp-web/pkg/boot/index.wml
    1.1         +5  -0      ossp-web/pkg/index.wml
    1.1         +7  -0      ossp-web/pkg/kern/index.wml
    1.1         +7  -0      ossp-web/pkg/lib/index.wml
    1.1         +15 -0      ossp-web/pkg/lib/l2/index.wml
    1.1         +7  -0      ossp-web/pkg/mod/index.wml
    1.1         +7  -0      ossp-web/pkg/tool/index.wml
    1.1         +47 -0      ossp-web/pkg/tool/lmtp2nntp/index.wml
    1.1         +7  -0      ossp-web/rel/docs.wml
    1.1         +7  -0      ossp-web/rel/index.wml
    1.1         +7  -0      ossp-web/rel/projects.wml
    1.1         +7  -0      ossp-web/rel/standards.wml
    1.1         +7  -0      ossp-web/sit/feedback.wml
    1.1         +7  -0      ossp-web/sit/index.wml
    1.1         +7  -0      ossp-web/sit/map.wml
    1.1         +7  -0      ossp-web/sit/mirrors.wml
    1.1         +7  -0      ossp-web/sit/search.wml
    1.1         +7  -0      ossp-web/src/browse.wml
    1.1         +7  -0      ossp-web/src/download.wml
    1.1         +7  -0      ossp-web/src/index.wml
    1.1         +7  -0      ossp-web/src/mirrors.wml
    1.1         +7  -0      ossp-web/src/repository.wml
    1.1         +7  -0      ossp-web/sup/bugdb.wml
    1.1         +7  -0      ossp-web/sup/forums.wml
    1.1         +7  -0      ossp-web/sup/index.wml
  ____________________________________________________________________________

  Index: ossp-web/.wmlrc
  ============================================================
  $ cvs update -p -r1.1 .wmlrc
  ##
  ##  .wmlrc -- ossp.org top-level WML RC file
  ##  Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>
  ##
  
  -D ROOT~.
  -D BASE_URL=http://www.ossp.org
  -D BASE_DIR~.
  -D IMG~SHARE/ossp_img
  -D IMGDOT_BASE~SHARE/ossp_img/ossp
  -D FTP_ROOT_DIR~../ftp
  -D FTP_ROOT_URL=ftp://ftp.ossp.org
  -I SHARE
  
  Index: ossp-web/00README
  ============================================================
  $ cvs update -p -r1.1 00README
  
    This is the OSSP website www.ossp.org.
  
  Index: ossp-web/Makefile
  ============================================================
  $ cvs update -p -r1.1 Makefile
  
  WMK       = wmk
  WMK_FLAGS = -a
  
  all:
  	@$(WMK) $(WMK_FLAGS)
  
  clean:
  
  Index: ossp-web/SHARE/.wmkrc
  ============================================================
  $ cvs update -p -r1.1 .wmkrc
  -F ossp*.wml
  Index: ossp-web/SHARE/ossp.wml
  ============================================================
  $ cvs update -p -r1.1 ossp.wml
  ##
  ##  ossp.wml -- WML Template for the www.ossp.org website
  ##  Copyright (c) 2000-2001 Ralf S. Engelschall <rse@engelschall.com>
  ##
  
  #   suck in used WML stuff 
  #   (order is not important)
  #use wml::std::tags
  #use wml::std::info
  #use wml::des::space
  #use wml::des::navbar
  
  #   suck in own OSSP stuff
  #   (order is important)
  #use "ossp_page.wml"
  #use "ossp_colors.wml" 
  #use "ossp_css.wml" 
  #use "ossp_canvas.wml"
  #use "ossp_navbar.wml" 
  #use "ossp_info.wml"
  #use "ossp_newsflash.wml"
  #use "ossp_filelist.wml"
  
  Index: ossp-web/SHARE/ossp_canvas.wml
  ============================================================
  $ cvs update -p -r1.1 ossp_canvas.wml
  ##
  ##  ossp_canvas.wml -- The Page Canvas
  ##  Copyright (c) 2000-2001 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  ..PAGE_CSS>>
  BODY { 
      background-color: #f5f5f0;
      background-image: url($(IMG)/ossp-bg-light.jpg);
      background-repeat: no-repeat;
      background-position: right top;
      color: <lfg>;
  }
  <<..
  
  ..PAGE_BODY_ATTR>>
  marginheight=0 leftmargin=0 rightmargin=0 topmargin=0
  <<..
  
  #   outer canvas
  <table border=0 cellpadding=0 cellspacing=0 width=100% height=100%>
    <tr height=1%>
       <td colspan=3>{#PAGE_CANVAS_HEAD#}</td>
    </tr>
    <tr height=1%>
       <td><imgdot width=20></td>
       <td>{#PAGE_CANVAS_TOP#}</td>
       <td><imgdot width=20></td>
    </tr>
    <tr height=20>
       <td colspan=3><imgdot height=20></td>
    </tr>
    <tr height=100%>
       <td><imgdot width=20></td>
       <td>{#PAGE_CANVAS_MAIN#}</td>
       <td><imgdot width=20></td>
    </tr>
    <tr height=20>
       <td colspan=3><imgdot height=20></td>
    </tr>
    <tr height=1%>
       <td colspan=3>{#PAGE_CANVAS_FOOT#}</td>
    </tr>
  </table>
  
  #   canvas header
  ..PAGE_CSS>>
  /* linkage header colors */
  .headn   { color: #999999; font-weight: normal; }
  .headn A { color: #999999; font-weight: normal; }
  .heads   { color: #333333; font-weight: bold; }
  .heads A { color: #333333; font-weight: bold; }
  <<..
  ..PAGE_CANVAS_HEAD>>
  <table bgcolor="#d5d5d0" border=0 cellpadding=0 cellspacing=0 width=100%>
    <tr>
      <td width=20><imgdot width=20></td>
      <td width=1 bgcolor="#c5c5c0"><imgdot width=1></td>
      <td bgcolor="#f5f5f0">&nbsp;<span class=heads><a href="http://www.ossp.org/">OSSP</a>&nbsp;</span></td>
      <td width=1 bgcolor="#c5c5c0"><imgdot width=1></td>
      <td bgcolor="#e5e5e0"><span class=headn>&nbsp;<a href="http://www.openpkg.org/">OpenPKG</a>&nbsp;</span></td>
      <td width=1 bgcolor="#c5c5c0"><imgdot width=1></td>
      <td bgcolor="#e5e5e0"><span class=headn>&nbsp;<a href="http://www.netsw.org/">net.sw</a>&nbsp;</span></td>
      <td width=1 bgcolor="#c5c5c0"><imgdot width=1></td>
      <td bgcolor="#e5e5e0"><span class=headn>&nbsp;<a href="http://www.cw.com/de">C&amp;W&nbsp;DE</a>&nbsp;</span></td>
      <td width=1 bgcolor="#c5c5c0"><imgdot width=1></td>
      <td bgcolor="#e5e5e0"><span class=headn>&nbsp;<a href="http://dev.de.cw.net/">DevTeam</a>&nbsp;</span></td>
      <td width=1 bgcolor="#c5c5c0"><imgdot width=1></td>
      <td width=100%>&nbsp;</td>
      <td width=400 background="$(IMG)/ossp-bg-dark.jpg"><imgdot width=400></td>
      </td>
    </tr>
  </table>
  <<..
  
  #   canvas top
  ..PAGE_CSS>>
  .title { 
      color: <lfg>;
      font-weight: bold;
      font-size: 400%;
      font-family: tahoma,helvetica,lucida,arial,sans-serif; 
  }
  <<..
  ..PAGE_CANVAS_TOP>>
  <table border=0 cellpadding=0 cellspacing=0 width=100%>
    <tr>
      <td align=left valign=bottom width=100%>
          <span class="title">{#PAGE_TITLE#}</span>
      </td>
      <td align=right valign=bottom>
         <img src="$(IMG)/ossp-logo.png" alt="OSSP - Unix Software Technologies">
      </td>
    </tr>
  </table>
  <<..
  
  #   canvas body
  ..PAGE_CANVAS_MAIN>>
  <table border=0 cellpadding=0 cellspacing=0 width=100%>
    <tr>
      <td valign=top align=left>
        {#PAGE_CANVAS_NB1#}
        <br>
        <imgdot width=120>
      </td>
      <td width=20><imgdot width=20></td>
      <td width=1 background="$(IMG)/ossp-dashes.png"><imgdot width=1 height=500></td>
      <td width=20><imgdot width=20></td>
      <td valign=top align=left width=100% height=100%>
        {#PAGE_CANVAS_BODY#}
      </td>
      <td width=20><imgdot width=20></td>
      <td width=1 background="$(IMG)/ossp-dashes.png"><imgdot width=1 height=500></td>
      <td width=20><imgdot width=20></td>
      <td valign=top align=left>
        {#PAGE_CANVAS_NB2#}
        <br>
        <imgdot width=120>
      </td>
    </tr>
  </table>
  <<..
  
  #   canvas footer
  ..PAGE_CANVAS_FOOT>>
  <table bgcolor="#d5d5d0" border=0 cellpadding=0 cellspacing=0 width=100%>
    <tr>
      <td>
        <center>
          <font size=-1 color="#999999">
            Copyright &copy; 2000-2002 Cable &amp; Wireless Deutschland, The OpenPKG Project, Ralf S. Engelschall
          </font>
        </center>
      </td>
    </tr>
  </table>
  <<..
  
  #   divert everything following into the canvas body..
  ..PAGE_CANVAS_BODY>>
  
  Index: ossp-web/SHARE/ossp_colors.wml
  ============================================================
  $ cvs update -p -r1.1 ossp_colors.wml
  ##
  ##  ossp_colors.wml -- Color Scheme
  ##  Copyright (c) 2000-2001 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  #   light colors
  <define-tag lbd>#333333</define-tag>
  <define-tag lbg>#ffffff</define-tag>
  <define-tag lfg>#333333</define-tag>
  <define-tag lhr>#993333</define-tag>
  
  #   medium colors
  <define-tag mbd>#999999</define-tag>
  <define-tag mbg>#f0f0f0</define-tag>
  <define-tag mfg>#000000</define-tag>
  <define-tag mhr>#993333</define-tag>
  
  #   dark colors
  <define-tag dbd>#990000</define-tag>
  <define-tag dbg>#cc3333</define-tag>
  <define-tag dfg>#ffffff</define-tag>
  <define-tag dhr>#993333</define-tag>
  
  #   importance colors
  <define-tag ibd>transparent</define-tag>
  <define-tag ibg>transparent</define-tag>
  <define-tag ifg>#993333</define-tag>
  <define-tag ihr>#993333</define-tag>
  
  Index: ossp-web/SHARE/ossp_css.wml
  ============================================================
  $ cvs update -p -r1.1 ossp_css.wml
  ##
  ##  ossp_css.wml -- Cascading Style Sheet (CSS) Definitions
  ##  Copyright (c) 2000-2001 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  <head>
  <style type="text/css"><!--
  
  /* the page starts at the top-left corner of the browser window 
     and does not have any borders around it */
  BODY { 
      position: absolute; 
      left: 0px; 
      top: 0px; 
      margin: 0px;
      padding: 0px;
  }
  
  /* we use a sans-serif font family for text */
  BODY,DIV,SPAN,
  TABLE,TR,TD,TH,P,
  FONT,UL,OL,LI
  FORM,INPUT,
  TEXTAREA,
  BLOCKQUOTE,A,I,B,EM { 
      font-family: helvetica,lucida,arial,sans-serif; 
  }
  
  /* we use teletype font for code */
  TT,CODE,SAMP,PRE { 
      font-family: courier,courier-new,terminal,fixed,monospace; 
      /* font-size: 90%; */
  }
  
  /* we use teletype font for code */
  H1,H2,H3,H4,H5,H6 { 
      font-family: tahoma,helvetica,lucida,arial,sans-serif; 
      color: #993333;
  }
  
  /* use square list items */
  LI {
      list-style-type: square; 
  }
  
  /* define the color schemes */
  BODY                 { background: <lbg>; color: <lfg>; }
  A                    { text-decoration: none; font-weight: normal; }
  A:link               { color: <lhr>; }
  A:visited            { color: <lhr>; }
  A:hover              { text-decoration: underline; }
  .light               { background: <lbg>; color: <lfg>; }
  .light A:link        { color: <lhr>; }
  .light A:visited     { color: <lhr>; }
  .light-bd            { background: <lbd>; }
  .light-fg            { color: <lfg>; }
  .medium              { background: <mbg>; color: <mfg>; }
  .medium A:link       { color: <mhr>; }
  .medium A:visited    { color: <mhr>; }
  .medium-bd           { background: <mbd>; }
  .medium-fg           { color: <mfg>; }
  .dark                { background: <dbg>; color: <dfg>; }
  .dark A:link         { color: <dhr>; }
  .dark A:visited      { color: <dhr>; }
  .dark-bd             { background: <dbd>; }
  .dark-fg             { color: <dfg>; }
  .important           { background: <ibg>; color: <ifg>; }
  .important A:link    { color: <ihr>; }
  .important A:visited { color: <ihr>; }
  .important-bd        { background: <ibd>; }
  .important-fg        { color: <ifg>; }
  .nb1n A              { color: <lfg>; font-weight: normal; }
  .nb1n A:link         { color: <lfg>; }
  .nb1n A:visited      { color: <lfg>; }
  .nb1s A              { color: <ifg>; font-weight: bold; }
  .nb1s A:link         { color: <ihr>; }
  .nb1s A:visited      { color: <ihr>; }
  .nb2n A              { color: <lfg>; font-weight: normal; }
  .nb2n A:link         { color: <lfg>; }
  .nb2n A:visited      { color: <lfg>; }
  .nb2s A              { color: <ifg>; font-weight: bold; }
  .nb2s A:link         { color: <ihr>; }
  .nb2s A:visited      { color: <ihr>; }
  .nb3n A              { color: <lfg>; font-weight: normal; }
  .nb3n A:link         { color: <lfg>; }
  .nb3n A:visited      { color: <lfg>; }
  .nb3s A              { color: <ifg>; font-weight: bold; }
  .nb3s A              { color: <ifg>; font-weight: bold; }
  .nb3s A:link         { color: <ihr>; }
  .nb3s A:visited      { color: <ihr>; }
  
  /* define a few text attributes */
  .heavy               { font-size: 110%; font-weight: bold; }
  .justify             { text-align: justify; }
  .small               { font-size: 80%; }
  
  /* special text block formatting */
  P.initial:first-letter { font-size: 200%; font-weight: bold; float: left; }
  P.initial SPAN         { text-transform: uppercase; }
  P.following            { text-indent: 3em; }
  P.spaced               { line-height: 140%; }
  
  /* boxed text */
  .boxed { 
      border-width: thin; 
      border-color: <lbd>;
      border-style: solid; 
      padding: 3px; 
  }
  
  /* more stuff */
  {#PAGE_CSS#}
  
  --></style>
  </head>
  
  Index: ossp-web/SHARE/ossp_filelist.wml
  ============================================================
  $ cvs update -p -r1.1 ossp_filelist.wml
  ##
  ##  ossp_filelist.wml -- News Flash
  ##  Copyright (c) 2000-2001 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  #   define a <filelist> tag which can be used to create a file listing which
  #   is optically more compact than the stuff Apache's mod_autoindex creates.
  #   Especially the current version is marked red, too.
  <define-tag filelist>
  <preserve url>
  <preserve directory>
  <preserve files>
  <set-var %attributes>
  <pre>
     Bytes      Timestamp       Filename
  ________ ____________________ ____________________________
  <:
  my $url       = "<get-var url>";
  $url =~ s|/+$||sg;
  my $directory = "<get-var directory>";
  my $files     = "<get-var files>";
  my $highlight = "<get-var highlight>";
  my $odir = chdir($directory) || die;
  my @F = reverse sort { (stat($a))[9] <=> (stat($b))[9]; } (glob($files));
  chdir($odir);
  my $O = '';
  foreach my $f (@F) {
      my @S = stat($f);
      $f = "$f/" if (-d $f);
      my @T = localtime($S[9]);
      my @moy = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
                 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
      $f = "<a href=\"".$url."/".$f."\">$f</a>";
      my $e = sprintf("%"."8d %"."s %"."2d %"."02d:%"."02d:%"."02d %"."d %"."s",
                      $S[7], $moy[$T[4]], $T[3], $T[2], $T[1], $T[0], 1900+$T[5], $f);
      $O .= $e . "\n";
  }
  print $O;
  :>
  </pre>
  <restore url>
  <restore directory>
  <restore files>
  </define-tag>
  
  Index: ossp-web/SHARE/ossp_img/ossp-bg-dark.jpg
  ============================================================
  $ cvs update -p -r1.1 ossp-bg-dark.jpg | uuencode ossp-bg-dark.jpg
  ÿØÿà
From ossp-cvs-owner@ossp.org  Wed Feb 13 17:39:54 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7C557764F3; Wed, 13 Feb 2002 17:39:54 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web .wmlrc
Message-Id: <20020213163954.7C557764F3@mail.ossp.org>
Date: Wed, 13 Feb 2002 17:39:54 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   13-Feb-2002 17:39:54
  Branch: HEAD                             Handle: 2002021316395400

  Modified files:
    ossp-web                .wmlrc

  Log:
    fix FTP location

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-web/.wmlrc
  ____________________________________________________________________________

  Index: ossp-web/.wmlrc
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 .wmlrc
  --- ossp-web/.wmlrc	13 Feb 2002 16:34:56 -0000	1.1
  +++ ossp-web/.wmlrc	13 Feb 2002 16:39:54 -0000	1.2
  @@ -8,7 +8,7 @@
   -D BASE_DIR~.
   -D IMG~SHARE/ossp_img
   -D IMGDOT_BASE~SHARE/ossp_img/ossp
  --D FTP_ROOT_DIR~../ftp
  +-D FTP_ROOT_DIR~../../ftp
   -D FTP_ROOT_URL=ftp://ftp.ossp.org
   -I SHARE
   

From ossp-cvs-owner@ossp.org  Wed Feb 13 20:19:29 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E0811764F3; Wed, 13 Feb 2002 20:19:28 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc Makefile.in aclocal.m4 rc.c rc_config.c rc_opt...
Message-Id: <20020213191928.E0811764F3@mail.ossp.org>
Date: Wed, 13 Feb 2002 20:19:28 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   13-Feb-2002 20:19:28
  Branch: HEAD                             Handle: 2002021319192800

  Modified files:
    ossp-pkg/rc             Makefile.in aclocal.m4 rc.c rc_config.c
                            rc_option.c rc_private.h rc_util.c

  Log:
    Small corrections in both logic and build configuration.

  Summary:
    Revision    Changes     Path
    1.15        +2  -2      ossp-pkg/rc/Makefile.in
    1.7         +2  -1      ossp-pkg/rc/aclocal.m4
    1.13        +2  -2      ossp-pkg/rc/rc.c
    1.2         +0  -1      ossp-pkg/rc/rc_config.c
    1.3         +1  -7      ossp-pkg/rc/rc_option.c
    1.3         +1  -1      ossp-pkg/rc/rc_private.h
    1.2         +1  -0      ossp-pkg/rc/rc_util.c
  ____________________________________________________________________________

  Index: ossp-pkg/rc/Makefile.in
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 Makefile.in
  --- ossp-pkg/rc/Makefile.in	12 Feb 2002 17:59:50 -0000	1.14
  +++ ossp-pkg/rc/Makefile.in	13 Feb 2002 19:19:28 -0000	1.15
  @@ -102,8 +102,8 @@
   	$(RM) rc_pcre.gen
   
   $(PROG_NAME): $(OBJS)
  -#	$(LIBTOOL) --mode=link --quiet $(CC) $(LDFLAGS) -o $@ $+ $(LIBS)
  -	$(CC) $(LDFLAGS) -o $@ $+ $(LIBS)
  +#	$(LIBTOOL) --mode=link --quiet $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)
  +	$(CC) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)
   
   rc.1: rc.pod
   	VS=`$(SHTOOL) version -lc -dshort rc_version.c`; \
  Index: ossp-pkg/rc/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 aclocal.m4
  --- ossp-pkg/rc/aclocal.m4	6 Feb 2002 16:56:33 -0000	1.6
  +++ ossp-pkg/rc/aclocal.m4	13 Feb 2002 19:19:28 -0000	1.7
  @@ -136,7 +136,8 @@
           *-pipe* ) ;;
                 * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
       esac
  -    AC_COMPILER_OPTION(ggdb3, -ggdb3, -ggdb3, CFLAGS="$CFLAGS -ggdb3")
  +    AC_COMPILER_OPTION(defdbg, -DDEBUG, -DDEBUG, CFLAGS="$CFLAGS -DDEBUG")
  +dnl    AC_COMPILER_OPTION(ggdb3, -ggdb3, -ggdb3, CFLAGS="$CFLAGS -ggdb3")
       CFLAGS="$CFLAGS -pedantic"
       CFLAGS="$CFLAGS -Wall"
       WMORE="-Wshadow -Wpointer-arith -Wcast-align -Winline"
  Index: ossp-pkg/rc/rc.c
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 rc.c
  --- ossp-pkg/rc/rc.c	8 Feb 2002 18:36:40 -0000	1.12
  +++ ossp-pkg/rc/rc.c	13 Feb 2002 19:19:28 -0000	1.13
  @@ -46,8 +46,8 @@
       }
       ex_catch(Except) {
           bCaught = 1;
  -        fprintf(stderr, "Class '%s' threw exception %s in %s:%s():%d.\n",\
  -               (char *)Except.ex_class, *(int *)Except.ex_value,\
  +        fprintf(stderr, "Class '%s' threw exception %d in %s:%s():%d.\n",\
  +               (char *)Except.ex_class, (int)Except.ex_value,\
                  Except.ex_file, Except.ex_func, Except.ex_line);
           exit(1);    /* Failure */
       }
  Index: ossp-pkg/rc/rc_config.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 rc_config.c
  --- ossp-pkg/rc/rc_config.c	8 Feb 2002 18:36:40 -0000	1.1
  +++ ossp-pkg/rc/rc_config.c	13 Feb 2002 19:19:28 -0000	1.2
  @@ -29,7 +29,6 @@
   
   #include <stdio.h>
   #include <stdlib.h>
  -#include <assert.h>
   
   #include "rc.h"
   #include "rc_private.h"
  Index: ossp-pkg/rc/rc_option.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 rc_option.c
  --- ossp-pkg/rc/rc_option.c	8 Feb 2002 18:36:40 -0000	1.2
  +++ ossp-pkg/rc/rc_option.c	13 Feb 2002 19:19:28 -0000	1.3
  @@ -72,7 +72,6 @@
       int  nBufpos = 0;           /* For tracking options           */
       char cOpt = 0;              /* For argument parsing           */
       char *szCLIBuf = NULL;
  -    char *szFuncfile = NULL;    /* Rc.func file name and location */
       int  nIter = 0;
       popt_context optCon;        /* Context for parsing options    */
   
  @@ -94,10 +93,7 @@
           /* Single argument long options with short keys */
           {RC_LOC_NAME, 'L', POPT_ARG_STRING, 0, RC_LOC_VAL, RC_LOC_DESC, "regx"},
           {RC_CNF_NAME, 'c', POPT_ARG_STRING, 0, RC_CNF_VAL, RC_CNF_DESC, "path"},
  -
  -        {RC_FNC_NAME, 'f', POPT_ARG_STRING, &szFuncfile,\
  -           RC_FNC_VAL, RC_FNC_DESC, "path"},
  -
  +        {RC_FNC_NAME, 'f', POPT_ARG_STRING, 0, RC_FNC_VAL, RC_FNC_DESC, "path"},
           {RC_QRY_NAME, 'q', POPT_ARG_STRING, 0, RC_QRY_VAL, RC_QRY_DESC, "varx"},
           {RC_TMP_NAME, 't', POPT_ARG_STRING, 0, RC_TMP_VAL, RC_TMP_DESC, "path"},
   
  @@ -163,8 +159,6 @@
       fprintf(stderr, "Options chosen: ");
       for (nIter = 0; nIter < nBufpos ; nIter++)
           fprintf(stderr, "-%c ", pcBuf[nIter]);
  -    if (szFuncfile)
  -        fprintf(stderr, "-f %s ", szFuncfile);
       fprintf(stderr, "\nRun these commands: %s\n", szCLIBuf);
   
       popt_freecontext(optCon);
  Index: ossp-pkg/rc/rc_private.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 rc_private.h
  --- ossp-pkg/rc/rc_private.h	11 Feb 2002 12:34:29 -0000	1.2
  +++ ossp-pkg/rc/rc_private.h	13 Feb 2002 19:19:28 -0000	1.3
  @@ -51,7 +51,7 @@
   /* Define the ability to throw OSSP ex exceptions       */
   #include "ex.h" /* OSSP ex exception handling library   */
   #define RC_THROW(rv) \
  -    (  (rv) != RC_OK && (ex_catching && !ex_shielding) \
  +    ((rv) != RC_OK && (ex_catching && !ex_shielding) \
        ? (ex_throw(ossprc_id, NULL, (rv)), (rv)) : (rv))
   
   #include "val.h"
  Index: ossp-pkg/rc/rc_util.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 rc_util.c
  --- ossp-pkg/rc/rc_util.c	8 Feb 2002 18:36:40 -0000	1.1
  +++ ossp-pkg/rc/rc_util.c	13 Feb 2002 19:19:28 -0000	1.2
  @@ -30,6 +30,7 @@
   #include "rc.h"         /* Error definitions  */
   #include "rc_const.h"   /* String definitions */
   
  +
   /* Translate an error code to a string */
   char *strErr(rc_return_t rv)
   {

From ossp-cvs-owner@ossp.org  Wed Feb 13 22:15:27 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 312F6764F3; Wed, 13 Feb 2002 22:15:27 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/SHARE ossp_canvas.wml ossp_css.wml ossp_newsflash...
Message-Id: <20020213211527.312F6764F3@mail.ossp.org>
Date: Wed, 13 Feb 2002 22:15:27 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   13-Feb-2002 22:15:27
  Branch: HEAD                             Handle: 2002021321152600

  Modified files:
    ossp-web/SHARE          ossp_canvas.wml ossp_css.wml ossp_newsflash.wml

  Log:
    slight optical adjustments

  Summary:
    Revision    Changes     Path
    1.2         +14 -17     ossp-web/SHARE/ossp_canvas.wml
    1.2         +1  -0      ossp-web/SHARE/ossp_css.wml
    1.2         +1  -1      ossp-web/SHARE/ossp_newsflash.wml
  ____________________________________________________________________________

  Index: ossp-web/SHARE/ossp_canvas.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 ossp_canvas.wml
  --- ossp-web/SHARE/ossp_canvas.wml	13 Feb 2002 16:34:56 -0000	1.1
  +++ ossp-web/SHARE/ossp_canvas.wml	13 Feb 2002 21:15:26 -0000	1.2
  @@ -38,9 +38,6 @@
     <tr height=20>
        <td colspan=3><imgdot height=20></td>
     </tr>
  -  <tr height=1%>
  -     <td colspan=3>{#PAGE_CANVAS_FOOT#}</td>
  -  </tr>
   </table>
   
   #   canvas header
  @@ -78,7 +75,7 @@
   .title { 
       color: <lfg>;
       font-weight: bold;
  -    font-size: 400%;
  +    font-size: 300%;
       font-family: tahoma,helvetica,lucida,arial,sans-serif; 
   }
   <<..
  @@ -123,19 +120,19 @@
   <<..
   
   #   canvas footer
  -..PAGE_CANVAS_FOOT>>
  -<table bgcolor="#d5d5d0" border=0 cellpadding=0 cellspacing=0 width=100%>
  -  <tr>
  -    <td>
  -      <center>
  -        <font size=-1 color="#999999">
  -          Copyright &copy; 2000-2002 Cable &amp; Wireless Deutschland, The OpenPKG Project, Ralf S. Engelschall
  -        </font>
  -      </center>
  -    </td>
  -  </tr>
  -</table>
  -<<..
  +# ..PAGE_CANVAS_FOOT>>
  +# <table bgcolor="#d5d5d0" border=0 cellpadding=0 cellspacing=0 width=100%>
  +#   <tr>
  +#     <td>
  +#       <center>
  +#         <font size=-1 color="#999999">
  +#           Copyright &copy; 2000-2002 Cable &amp; Wireless Deutschland, The OpenPKG Project, Ralf S. Engelschall
  +#         </font>
  +#       </center>
  +#     </td>
  +#   </tr>
  +# </table>
  +# <<..
   
   #   divert everything following into the canvas body..
   ..PAGE_CANVAS_BODY>>
  Index: ossp-web/SHARE/ossp_css.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 ossp_css.wml
  --- ossp-web/SHARE/ossp_css.wml	13 Feb 2002 16:34:56 -0000	1.1
  +++ ossp-web/SHARE/ossp_css.wml	13 Feb 2002 21:15:26 -0000	1.2
  @@ -35,6 +35,7 @@
   /* we use teletype font for code */
   H1,H2,H3,H4,H5,H6 { 
       font-family: tahoma,helvetica,lucida,arial,sans-serif; 
  +	margin-bottom: 2px;
       color: #993333;
   }
   
  Index: ossp-web/SHARE/ossp_newsflash.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 ossp_newsflash.wml
  --- ossp-web/SHARE/ossp_newsflash.wml	13 Feb 2002 16:34:56 -0000	1.1
  +++ ossp-web/SHARE/ossp_newsflash.wml	13 Feb 2002 21:15:26 -0000	1.2
  @@ -10,7 +10,7 @@
   <preserve nohead>
   <set-var nohead=*>
   <set-var %attributes>
  -<table width=450 cellspacing=0 cellpadding=1 border=0>
  +<table width=400 cellspacing=0 cellpadding=1 border=0>
   <ifeq "<get-var nohead>" "" "" "
   <tr><td><font face="Arial,Helvetica"><b>Date</b></font></td> <td>&nbsp;&nbsp;&nbsp;<font face="Arial,Helvetica"><b>Newsflash</b></font></td></tr>
   <tr><td><hr noshade size=1></td> <td><hr noshade size=1></td></tr>

From ossp-cvs-owner@ossp.org  Wed Feb 13 22:17:34 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6C9A2764F3; Wed, 13 Feb 2002 22:17:34 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web .cvsignore ossp-web/com .cvsignore ossp-web/doc ....
Message-Id: <20020213211734.6C9A2764F3@mail.ossp.org>
Date: Wed, 13 Feb 2002 22:17:34 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   13-Feb-2002 22:17:34
  Branch: HEAD                             Handle: 2002021321172607

  Added files:
    ossp-web                .cvsignore
    ossp-web/com            .cvsignore
    ossp-web/doc            .cvsignore
    ossp-web/new            .cvsignore
    ossp-web/pkg            .cvsignore
    ossp-web/pkg/boot       .cvsignore
    ossp-web/pkg/kern       .cvsignore
    ossp-web/pkg/lib        .cvsignore
    ossp-web/pkg/lib/l2     .cvsignore
    ossp-web/pkg/mod        .cvsignore
    ossp-web/pkg/tool       .cvsignore
    ossp-web/pkg/tool/lmtp2nntp
                            .cvsignore
    ossp-web/rel            .cvsignore
    ossp-web/sit            .cvsignore
    ossp-web/src            .cvsignore
    ossp-web/sup            .cvsignore

  Log:
    ignore generated HTML files

  Summary:
    Revision    Changes     Path
    1.1         +1  -0      ossp-web/.cvsignore
    1.1         +1  -0      ossp-web/com/.cvsignore
    1.1         +1  -0      ossp-web/doc/.cvsignore
    1.1         +1  -0      ossp-web/new/.cvsignore
    1.1         +1  -0      ossp-web/pkg/.cvsignore
    1.1         +1  -0      ossp-web/pkg/boot/.cvsignore
    1.1         +1  -0      ossp-web/pkg/kern/.cvsignore
    1.1         +1  -0      ossp-web/pkg/lib/.cvsignore
    1.1         +1  -0      ossp-web/pkg/lib/l2/.cvsignore
    1.1         +1  -0      ossp-web/pkg/mod/.cvsignore
    1.1         +1  -0      ossp-web/pkg/tool/.cvsignore
    1.1         +1  -0      ossp-web/pkg/tool/lmtp2nntp/.cvsignore
    1.1         +1  -0      ossp-web/rel/.cvsignore
    1.1         +1  -0      ossp-web/sit/.cvsignore
    1.1         +1  -0      ossp-web/src/.cvsignore
    1.1         +1  -0      ossp-web/sup/.cvsignore
  ____________________________________________________________________________

  Index: ossp-web/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/com/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/doc/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/new/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/boot/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/kern/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/lib/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/lib/l2/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/mod/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/tool/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/tool/lmtp2nntp/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/rel/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/sit/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/src/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/sup/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html

From ossp-cvs-owner@ossp.org  Wed Feb 13 22:35:24 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 698D1764F3; Wed, 13 Feb 2002 22:35:24 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/SHARE ossp_newsflash.wml ossp-web index.wml ossp-...
Message-Id: <20020213213524.698D1764F3@mail.ossp.org>
Date: Wed, 13 Feb 2002 22:35:24 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   13-Feb-2002 22:35:24
  Branch: HEAD                             Handle: 2002021321352201

  Modified files:
    ossp-web                index.wml
    ossp-web/SHARE          ossp_newsflash.wml
    ossp-web/new            events.txt news.txt

  Log:
    more content

  Summary:
    Revision    Changes     Path
    1.3         +2  -2      ossp-web/SHARE/ossp_newsflash.wml
    1.2         +18 -6      ossp-web/index.wml
    1.2         +1  -4      ossp-web/new/events.txt
    1.2         +11 -744    ossp-web/new/news.txt
  ____________________________________________________________________________

  Index: ossp-web/SHARE/ossp_newsflash.wml
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 ossp_newsflash.wml
  --- ossp-web/SHARE/ossp_newsflash.wml	13 Feb 2002 21:15:26 -0000	1.2
  +++ ossp-web/SHARE/ossp_newsflash.wml	13 Feb 2002 21:35:23 -0000	1.3
  @@ -19,7 +19,7 @@
       open(FP, "< <get-var from>") || die;
       my $max = ("<get-var max>" eq '' ? 9999 : "<get-var max>");
       @COL = (
  -        '#f0f0f0',
  +        '#e5e5e0',
           'NONE',
       );
       $ncol = 1;
  @@ -40,7 +40,7 @@
               else {
                   print "<tr>\n";
               }
  -            print "  <td align=right><font color=\"#000000\"><tt><b>$1:</b></tt></font></td> <td>&nbsp;&nbsp;$2</td>\n";
  +            print "  <td align=right><font color=\"#000000\"><tt>$1:</tt></font></td> <td>&nbsp;$2</td>\n";
               print "</tr>\n";
           }
           $n++;
  Index: ossp-web/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/index.wml	13 Feb 2002 16:34:56 -0000	1.1
  +++ ossp-web/index.wml	13 Feb 2002 21:35:22 -0000	1.2
  @@ -1,17 +1,29 @@
   
   #use wml::ossp area=tit
   
  -<title>Welcome to OSSP!</title>
  +<title>Welcome!</title>
   
  -Bla...
  +Welcome to OSSP, the world of Unix Software Technologies. 
  +
  +<p>
  +OSSP is a project of <a href="http://www.engelschall.com/">Ralf
  +S. Engelschall</a> and driven by his <a
  +href="http://dev.de.cw.net/">Development Team</a> from <a
  +href="http://www.cw.com/de/">Cable &amp; Wireless Deutschland</a>'s
  +Application Services division. OSSP started in 1998 and the goal is the
  +creation of Unix and Networking software components which finally can
  +be integrated into a next generation Internet server platform. Because
  +this long-term goal requires a great amount of time and man-power, the
  +short-term goal is to release all components separately and in advance.
  +In OSSP, the way is our goal, too.
   
   <p>
   <b>Newsflash:</b>
   <p>
   <newsflash from="new/news.txt" max=13 nohead more="new/news.html">
   
  -<p>
  -<b>Event Schedule:</b>
  -<p>
  -<newsflash from="new/events.txt" max=5 nohead more="new/events.html">
  +# <p>
  +# <b>Event Schedule:</b>
  +# <p>
  +# <newsflash from="new/events.txt" max=5 nohead more="new/events.html">
   
  Index: ossp-web/new/events.txt
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 events.txt
  --- ossp-web/new/events.txt	13 Feb 2002 16:35:04 -0000	1.1
  +++ ossp-web/new/events.txt	13 Feb 2002 21:35:23 -0000	1.2
  @@ -1,4 +1 @@
  -15-Mar-2002: OpenPKG 1.1-RELEASE
  -15-May-2002: OpenPKG 1.2-RELEASE
  -15-Jul-2002: OpenPKG 1.3-RELEASE
  -15-Sep-2002: OpenPKG 1.4-RELEASE
  +31-Feb-2002: OSSP lmtp2nntp 1.2.0
  Index: ossp-web/new/news.txt
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 news.txt
  --- ossp-web/new/news.txt	13 Feb 2002 16:35:04 -0000	1.1
  +++ ossp-web/new/news.txt	13 Feb 2002 21:35:23 -0000	1.2
  @@ -1,744 +1,11 @@
  -12-Feb-2002: Upgraded package: P<freetype-2.0.8-20020212>
  -12-Feb-2002: Upgraded package: P<libxslt-1.0.12-20020212>
  -12-Feb-2002: Upgraded package: P<libxml-2.4.15-20020212>
  -11-Feb-2002: New package: P<gcrypt-1.1.6-20020211>
  -11-Feb-2002: Upgraded package: P<mysql-3.23.48-20020211>
  -10-Feb-2002: New package: P<cpu-1.3.10-20020210>
  -10-Feb-2002: New package: P<saxon-6.5.1-20020210>
  -09-Feb-2002: Upgraded package: P<vim-6.0.208-20020209>
  -09-Feb-2002: Upgraded package: P<unixodbc-2.2.0-20020209>
  -09-Feb-2002: Upgraded package: P<atool-0.16.0-20020209>
  -09-Feb-2002: Upgraded package: P<libxslt-1.0.11-20020209>
  -09-Feb-2002: Upgraded package: P<libxml-2.4.14-20020209>
  -08-Feb-2002: New package: P<mapson-2.0b2-20020208>
  -08-Feb-2002: Upgraded package: P<openpkg-20020208-20020208>
  -08-Feb-2002: Upgraded package: P<samba-2.2.3a-20020208>
  -08-Feb-2002: Upgraded package: P<bison-1.33-20020208>
  -07-Feb-2002: New package: P<diffstat-1.29-20020207>
  -06-Feb-2002: Upgraded package: P<imapd-2.1.1-20020206>
  -06-Feb-2002: Upgraded package: P<bind-9.2.0-20020206>
  -06-Feb-2002: Upgraded package: P<postfix-1.1.3-20020206>
  -06-Feb-2002: Upgraded package: P<openpkg-20020206-20020206>
  -05-Feb-2002: Upgraded package: P<dnstracer-1.3-20020205>
  -05-Feb-2002: Upgraded package: P<postgresql-7.2-20020205>
  -05-Feb-2002: Upgraded package: P<openpkg-20020204-20020204>
  -05-Feb-2002: Upgraded package: P<autogen-5.3.1-20020205>
  -05-Feb-2002: Upgraded package: P<sasl-2.1.1-20020205>
  -05-Feb-2002: Upgraded package: P<mozilla-0.9.8-20020205>
  -03-Feb-2002: Upgraded package: P<samba-2.2.3-20020203>
  -03-Feb-2002: Upgraded package: P<pdflib-4.0.2-20020203>
  -03-Feb-2002: Upgraded package: P<fetchmail-5.9.7-20020203>
  -02-Feb-2002: Upgraded package: P<gdb-5.1.1-20020202>
  -02-Feb-2002: Upgraded package: P<ghostscript-7.04-20011201>
  -02-Feb-2002: Upgraded package: P<w3m-0.2.5-20020202>
  -01-Feb-2002: Upgraded package: P<siege-2.50-20020201>
  -01-Feb-2002: Upgraded package: P<shtool-1.6.0-20020201>
  -01-Feb-2002: Upgraded package: P<apache-1.3.23-20020201>
  -01-Feb-2002: New package: P<gdb-5.1-20020201>
  -01-Feb-2002: Upgraded package: P<openldap-2.0.22-20020201>
  -01-Feb-2002: New package: P<cadaver-0.19.1-20020201>
  -01-Feb-2002: New package: P<neon-0.18.5-20020201>
  -01-Feb-2002: Upgraded package: P<patchutils-0.2.8-20020201>
  -31-Jan-2002: New package: P<sa-0.9.0-20020131>
  -31-Jan-2002: New package: P<ex-0.9.0-20020131>
  -31-Jan-2002: Upgraded package: P<tin-1.5.11-20020131>
  -31-Jan-2002: Upgraded package: P<lftp-2.4.9-20020131>
  -31-Jan-2002: Upgraded package: P<ncftp-3.1.2-20020131>
  -30-Jan-2002: New package: P<ccrypt-1.2-20020130>
  -30-Jan-2002: Upgraded package: P<vim-6.0.156-20020130>
  -29-Jan-2002: Upgraded package: P<openpkg-20020129-20020129>
  -29-Jan-2002: Upgraded package: P<curl-7.9.3-20020129>
  -28-Jan-2002: Upgraded package: P<samhain-1.4.2-20011221>
  -28-Jan-2002: Upgraded package: P<mutt-1.3.27i-20020118>
  -28-Jan-2002: Upgraded package: P<bzip2-1.0.2-20020128>
  -28-Jan-2002: Upgraded package: P<sitecopy-0.11.4-20020128>
  -27-Jan-2002: Upgraded package: P<pth-1.4.1-20020127>
  -27-Jan-2002: New package: P<dnstracer-1.2-20020127>
  -27-Jan-2002: New package: P<dhcpdump-1.4-20020127>
  -27-Jan-2002: New package: P<dhcping-1.2-20020127>
  -26-Jan-2002: New package: P<cvsd-0.9.5-20020126>
  -26-Jan-2002: Upgraded package: P<openjade-1.3.1-20020126>
  -26-Jan-2002: Upgraded package: P<rsync-2.5.2-20020126>
  -25-Jan-2002: New package: P<gmp-4.0.1-20020125>
  -25-Jan-2002: Upgraded package: P<pureftpd-1.0.8-20020125>
  -24-Jan-2002: Upgraded package: P<bison-1.32-20020124>
  -23-Jan-2002: New package: P<gcc2-2.95.3-20020123>
  -23-Jan-2002: New package: P<audiofile-0.2.3-20020123>
  -22-Jan-2002: New package: P<vim-6.0.144-20020122>
  -21-Jan-2002: New package: P<expat-1.95.2-20020121>
  -21-Jan-2002: New package: P<freetype-2.0.6-20020121>
  -21-Jan-2002: New package: P<traceroute-1.4a12-20020121>
  -20-Jan-2002: New package: P<x11-ssh-askpass-1.2.4.1-20020120>
  -19-Jan-2002: Upgraded package: P<jdk-sun-1.3.1.02-20020119>
  -18-Jan-2002: Upgraded package: P<mutt-1.3.26i-20020118>
  -17-Jan-2002: Upgraded package: P<sudo-1.6.5p1-20020117>
  -17-Jan-2002: New package: P<perl-term-20020117-20020117>
  -17-Jan-2002: New package: P<readline-4.2a-20020117>
  -17-Jan-2002: New package: P<perl-curses-20020117-20020117>
  -17-Jan-2002: Upgraded package: P<cdk-4.9.10.20011230-20020117>
  -17-Jan-2002: Upgraded package: P<tsmc-4.2.1-20020117>
  -17-Jan-2002: Upgraded package: P<sudo-1.6.5-20020117>
  -16-Jan-2002: Upgraded package: P<imagemagick-5.4.2.2-20020116>
  -16-Jan-2002: Upgraded package: P<openldap-2.0.21-20020116>
  -16-Jan-2002: Upgraded package: P<libxslt-1.0.10-20020116>
  -16-Jan-2002: Upgraded package: P<libxml-2.4.13-20020116>
  -16-Jan-2002: Upgraded package: P<txt2pdf-5.5-20020116>
  -15-Jan-2002: Upgraded package: P<openldap-2.0.20-20020116>
  -15-Jan-2002: Upgraded package: P<bison-1.31-20020115>
  -15-Jan-2002: Upgraded package: P<less-373-20020115>
  -15-Jan-2002: Upgraded package: P<sudo-1.6.4p1-20020115>
  -13-Jan-2002: Upgraded package: P<vim-6.0.129-20020113>
  -11-Jan-2002: B<Now available: OpenPKG 1.0>
  -10-Jan-2002: Upgraded package: N<xmame> 0.57.1
  -09-Jan-2002: Upgraded package: N<rsync> 2.5.1
  -09-Jan-2002: Upgraded package: N<radius> 0.96
  -09-Jan-2002: Upgraded package: N<orbit> 0.5.13
  -09-Jan-2002: Upgraded package: N<mozilla> 0.9.7
  -09-Jan-2002: Upgraded package: N<w3m> 0.2.4
  -08-Jan-2002: Upgraded package: N<less> 371
  -06-Jan-2002: Upgraded package: N<imagemagick> 5.4.2.2
  -06-Jan-2002: Upgraded package: N<sitecopy> 0.11.2
  -06-Jan-2002: Upgraded package: N<w3m> 0.2.3.2
  -05-Jan-2002: New package: N<doxygen> 1.2.13.1
  -05-Jan-2002: New package: N<dsniff> 2.3
  -05-Jan-2002: New package: N<libnet> 1.0.2a
  -05-Jan-2002: New package: N<libnids> 1.16
  -04-Jan-2002: Upgraded package: N<mutt> 1.3.25
  -04-Jan-2002: Upgraded package: N<grepmail> 4.70
  -03-Jan-2002: Upgraded package: N<imagemagick> 5.4.2
  -31-Dec-2001: Upgraded package: N<mysql> 3.23.47
  -28-Dec-2001: New package: N<pb4sd> 1.0
  -28-Dec-2001: New package: N<perl-db> 20011228
  -28-Dec-2001: Upgraded package: N<pureftpd> 1.0.7
  -28-Dec-2001: New package: N<aegis> 4.1
  -27-Dec-2001: Upgraded package: N<jdk-sun> 1.3.1.02
  -27-Dec-2001: Upgraded package: N<php> 4.1.1
  -27-Dec-2001: Upgraded package: N<ruby> 1.6.6
  -26-Dec-2001: Upgraded package: N<wget> 1.8.1
  -25-Dec-2001: Upgraded package: N<stunnel> 3.22
  -23-Dec-2001: Upgraded package: N<pcre> 3.8
  -23-Dec-2001: Upgraded package: N<xterm> 1.64
  -22-Dec-2001: Upgraded package: N<python> 2.2
  -22-Dec-2001: Upgraded package: N<openssl> 0.9.6c
  -22-Dec-2001: New package: N<tomcat> 3.2.6
  -22-Dec-2001: Upgraded package: N<gcc> 3.0.3
  -22-Dec-2001: New package: N<expect> 5.34
  -22-Dec-2001: New package: N<samhain> 1.3.5
  -21-Dec-2001: Upgraded package: N<w3m> 0.2.3.1
  -21-Dec-2001: Upgraded package: N<exim> 3.34
  -21-Dec-2001: Upgraded package: N<openldap> 2.0.19
  -20-Dec-2001: New package: N<jdk-sun> 1.3.1.01
  -19-Dec-2001: Upgraded package: N<flawfinder> 0.21
  -19-Dec-2001: Upgraded package: N<vim> 6.0.101
  -18-Dec-2001: Upgraded package: N<python> 2.2c1
  -16-Dec-2001: Upgraded package: N<fetchmail> 5.9.6
  -14-Dec-2001: Upgraded package: N<nano> 1.0.7
  -13-Dec-2001: Upgraded package: N<png> 1.2.1
  -12-Dec-2001: Upgraded package: N<pureftpd> 1.0.5
  -09-Dec-2001: Upgraded package: N<libxml> 2.4.12
  -08-Dec-2001: Upgraded package: N<libxslt> 1.0.9
  -02-Dec-2001: Upgraded package: N<openssh> 3.0.2p1
  -02-Dec-2001: Upgraded package: N<scanssh> 1.6b
  -02-Dec-2001: Upgraded package: N<mysql> 3.23.46
  -30-Nov-2001: Upgraded package: N<analog> 5.1
  -30-Nov-2001: Upgraded package: N<cvs> 1.11.1p1
  -30-Nov-2001: Upgraded package: N<tiff> 3.5.7
  -30-Nov-2001: Upgraded package: N<iozone> 3.71
  -30-Nov-2001: Upgraded package: N<rsync> 2.5.0
  -26-Nov-2001: Upgraded package: N<libxml> 2.4.11
  -26-Nov-2001: Upgraded package: N<libxslt> 1.0.8
  -24-Nov-2001: Upgraded package: N<cvsweb> 2.0.0
  -24-Nov-2001: Upgraded package: N<inn> 2.3.2.20011124
  -24-Nov-2001: Upgraded package: N<fileutils> 4.1.2
  -24-Nov-2001: Upgraded package: N<textutils> 2.0.17
  -24-Nov-2001: Upgraded package: N<gzip> 1.3.2
  -24-Nov-2001: Upgraded package: N<w3m> 0.2.2.1.1
  -24-Nov-2001: Upgraded package: N<mysql> 3.23.45
  -24-Nov-2001: Upgraded package: N<tin> 1.5.10
  -24-Nov-2001: Upgraded package: N<nmap> 2.54b30
  -24-Nov-2001: Upgraded package: N<ncurses> 5.2.20011117
  -24-Nov-2001: Upgraded package: N<pcre> 3.7
  -24-Nov-2001: Upgraded package: N<delegate> 7.7.0
  -23-Nov-2001: New package: N<librsync> 0.9.5
  -23-Nov-2001: New package: N<nslint> 2.1a2
  -23-Nov-2001: Upgraded package: N<pureftpd> 1.0.3
  -22-Nov-2001: Upgraded package: N<lftp> 2.4.7
  -22-Nov-2001: Upgraded package: N<texinfo> 4.0d
  -22-Nov-2001: New tool for building a release: <a href="cvsweb/cvsweb.cgi/~checkout~/openpkg-src/00DEV/src2make?rev=1.10&content-type=text/plain">src2make<a>
  -22-Nov-2001: Upgraded package: N<apg> 2.0.0b1
  -22-Nov-2001: OpenPKG 1.0 still delayed, although very close. 
  -19-Nov-2001: Upgraded package: N<wget> 1.7.1
  -18-Nov-2001: New package: N<rc> 1.6c4
  -17-Nov-2001: Upgraded package: N<python> 2.2b2
  -16-Nov-2001: Upgraded package: N<openssh> 3.0.1p1
  -16-Nov-2001: Upgraded package: N<bash> 2.05a
  -15-Nov-2001: Upgraded package: N<postfix> 20010228.8
  -15-Nov-2001: Upgraded package: N<postfix> 20010228.7
  -15-Nov-2001: B<PROJECT MOVED TO FINAL SERVER+ENVIRONMENT !>
  -14-Nov-2001: Upgraded package: N<lmtp2nntp> 1.1.1
  -14-Nov-2001: Upgraded package: N<inn> 2.3.2.20011114
  -14-Nov-2001: Upgraded package: N<imagemagick> 5.4.1
  -12-Nov-2001: Upgraded package: N<lmtp2nntp> 1.1.0
  -12-Nov-2001: Upgraded package: N<stunnel> 3.21c
  -11-Nov-2001: Upgraded package: N<libxslt> 1.0.7
  -11-Nov-2001: Upgraded package: N<libxml> 2.4.10
  -10-Nov-2001: Upgraded package: N<zsh> 4.0.4
  -10-Nov-2001: Upgraded package: N<scanssh> 1.6
  -08-Nov-2001: New package: N<its4> 1.1.1
  -08-Nov-2001: Upgraded package: N<fetchmail> 5.9.5
  -08-Nov-2001: Upgraded package: N<lmtp2nntp> 1.1b4
  -08-Nov-2001: New package: N<flawfinder> 0.19
  -08-Nov-2001: Upgraded package: N<dhcpd> 3.0.1rc4
  -07-Nov-2001: Upgraded package: N<openssh> 3.0p1
  -07-Nov-2001: New package: N<scanssh> 1.55
  -07-Nov-2001: Upgraded package: N<vim> 6.0.92
  -06-Nov-2001: Upgraded package: N<openldap> 2.0.18
  -06-Nov-2001: Upgraded package: N<libxml> 2.4.8
  -06-Nov-2001: Upgraded package: N<antiword> 0.32
  -05-Nov-2001: Upgraded package: N<vim> 6.0.80
  -04-Nov-2001: Upgraded package: N<tar> 1.13.25
  -04-Nov-2001: B<First cut of the> <a href="doc/handbook/openpkg.html">OpenPKG Handbook</a> B<available!>
  -04-Nov-2001: Upgraded package: N<curl> 7.9.1
  -04-Nov-2001: Upgraded package: N<postfix> 20010228.6
  -04-Nov-2001: Upgraded package: N<stunnel> 3.21b
  -03-Nov-2001: New package: N<epm> 3.2.1
  -02-Nov-2001: Upgraded package: N<mysql> 3.23.44
  -02-Nov-2001: Upgraded package: N<vim> 6.0.63
  -02-Nov-2001: Upgraded package: N<orbit> 0.5.12
  -02-Nov-2001: Upgraded package: N<lftp> 2.4.6
  -02-Nov-2001: Upgraded package: N<pureftpd> 1.0.1
  -02-Nov-2001: Upgraded package: N<mutt> 1.3.23.1
  -31-Oct-2001: Upgraded package: N<dhcpd> 3.0.1rc2
  -31-Oct-2001: New package: N<gd-perl> 1.0
  -31-Oct-2001: Upgraded package: N<vim> 6.0.44
  -30-Oct-2001: New package: N<c2man> 2.0.42
  -30-Oct-2001: Updated package: N<nano> 1.0.6
  -30-Oct-2001: Updated package: N<bison> 1.30
  -29-Oct-2001: Updated package: N<iozone> 3.67
  -26-Oct-2001: Updated package: N<emacs> 21.1
  -26-Oct-2001: Updated package: N<orbit> 0.5.11
  -26-Oct-2001: Updated package: N<ncftp> 3.0.4
  -26-Oct-2001: Updated package: N<gcc> 3.0.2
  -26-Oct-2001: Updated package: N<tcl> 8.3.4
  -26-Oct-2001: Updated package: N<autogen> 5.2.11
  -26-Oct-2001: Updated package: N<pureftpd> 6.0.21
  -25-Oct-2001: Updated package: N<vim> 6.0.27
  -23-Oct-2001: Updated package: N<vim> 6.0.21
  -23-Oct-2001: New package: N<grepmail> 4.60
  -20-Oct-2001: Upgraded package: N<ircd> 2.10.3p3
  -20-Oct-2001: Upgraded package: N<freetype> 2.0.5
  -20-Oct-2001: New package: N<python> 2.2b1
  -20-Oct-2001: Upgraded package: N<proftpd> 1.2.4
  -19-Oct-2001: New package: N<magicpoint> 1.09a
  -19-Oct-2001: New package: N<pgp> 6.5.8
  -19-Oct-2001: Upgraded package: N<lftp> 2.4.5
  -19-Oct-2001: Upgraded package: N<dhcpd> 3.0.1rc1
  -19-Oct-2001: Upgraded package: N<proftpd> 1.2.3
  -17-Oct-2001: Upgraded package: N<ircii> 20010612
  -17-Oct-2001: New package: N<gup> 0.5.7
  -17-Oct-2001: New package: N<suck> 4.3.0
  -17-Oct-2001: Upgraded package: N<inn> 2.3.2.20011016
  -16-Oct-2001: Upgraded package: N<apache> 1.3.22 B<!!>
  -15-Oct-2001: Upgraded package: N<lmtp2nntp> 1.1b2
  -12-Oct-2001: Upgraded package: N<lmtp2nntp> 1.1b1
  -12-Oct-2001: New package: N<exim> 3.33
  -12-Oct-2001: Upgraded package: N<libxml> 2.4.6
  -12-Oct-2001: Upgraded package: N<libxslt> 1.0.5
  -07-Oct-2001: Upgraded package: N<xmame> 0.55.2
  -05-Oct-2001: Upgraded package: N<mysql> 3.23.43
  -05-Oct-2001: Upgraded package: N<orbit> 0.5.10
  -05-Oct-2001: Upgraded package: N<fetchmail> 5.9.4
  -05-Oct-2001: Upgraded package: N<pureftpd> 0.99.9
  -04-Oct-2001: Upgraded package: N<bind> 8.2.5
  -04-Oct-2001: New package: N<txt2man> 1.4.3
  -04-Oct-2001: Upgraded package: N<nano> 1.0.5
  -03-Oct-2001: Upgraded package: N<vim> 6.0.11
  -02-Oct-2001: Upgraded package: N<imagemagick> 5.3.9.1
  -29-Sep-2001: Upgraded package: N<pureftpd> 0.99.4
  -28-Sep-2001: Upgraded package: N<openldap> 2.0.15
  -28-Sep-2001: Upgraded package: N<xterm> 1.59
  -28-Sep-2001: Upgraded package: N<vim> 6.0.3
  -27-Sep-2001: Upgraded package: N<openssh> 2.9.9p2
  -27-Sep-2001: Upgraded package: N<fetchmail> 5.9.2
  -26-Sep-2001: New package: N<whatmask> 1.1
  -26-Sep-2001: Upgraded package: N<curl> 7.9
  -25-Sep-2001: Upgraded package: N<imagemagick> 5.3.9
  -25-Sep-2001: Upgraded package: N<siege> 2.09
  -24-Sep-2001: Upgraded package: N<xdelta> 1.1.3
  -24-Sep-2001: New package: N<xmake> 1.05
  -23-Sep-2001: Upgraded package: N<autogen> 5.2.10
  -23-Sep-2001: Upgraded package: N<bison> 1.29
  -21-Sep-2001: Upgraded package: N<vim> 6.0ax
  -19-Sep-2001: New package: N<ruby> 1.6.5
  -19-Sep-2001: New package: N<pcre> 3.5
  -19-Sep-2001: Upgraded package: N<postfix> 20010228pl05
  -19-Sep-2001: Upgraded package: N<mng> 1.0.3
  -19-Sep-2001: Upgraded package: N<pureftpd> 0.99.2a
  -18-Sep-2001: B<Imported package sources into CVS!>
  -18-Sep-2001: Upgraded package: N<gd> 2.0.1
  -17-Sep-2001: New package: N<psutils> 1.17
  -16-Sep-2001: Updated package: N<lftp> 2.4.4
  -16-Sep-2001: Updated package: N<cftp> 0.11.1
  -16-Sep-2001: New package: N<procmail> 3.22 (split from N<sendmail>)
  -16-Sep-2001: New package: N<boxes> 1.0.1
  -16-Sep-2001: New package: N<par> 1.52
  -16-Sep-2001: Updated package: N<imagemagick> 5.3.8.2
  -16-Sep-2001: Updated package: N<gettext> 0.10.40
  -15-Sep-2001: Updated package: N<libxml> 2.4.5
  -13-Sep-2001: Updated package: N<lmtp2nntp> 1.0.0 (<b>Yeahhhh!</b>)
  -13-Sep-2001: Updated package: N<str> 0.9.6
  -13-Sep-2001: Updated package: N<lmtp2nntp> 0.9.7
  -13-Sep-2001: Updated package: N<libxslt> 1.0.4
  -13-Sep-2001: Updated package: N<libxml> 2.4.4
  -13-Sep-2001: Updated package: N<libtool> 1.4.2
  -13-Sep-2001: Updated package: N<lmtp2nntp> 0.9.6
  -12-Sep-2001: Updated package: N<lmtp2nntp> 0.9.5
  -12-Sep-2001: Updated package: N<cftp> 0.11
  -11-Sep-2001: Updated package: N<ircd> 2.10.3p2
  -11-Sep-2001: Updated package: N<openldap> 2.0.14
  -11-Sep-2001: New package: N<txt2pdf> 5.2
  -09-Sep-2001: Updated package: N<vim> 6.0av
  -09-Sep-2001: Updated package: N<rfc> 3.2.2
  -09-Sep-2001: Updated package: N<openldap> 2.0.13
  -06-Sep-2001: Updated package: N<lftp> 2.4.3
  -06-Sep-2001: Updated package: N<imagemagick> 5.3.8.1
  -05-Sep-2001: Updated package: N<tcsh> 6.11
  -05-Sep-2001: Updated package: N<screen> 3.9.10
  -02-Sep-2001: Updated package: N<libtool> 1.4.1
  -01-Sep-2001: New package: N<sgml> 1.0 (split from N<openjade>)
  -01-Sep-2001: New package: N<tetex> 1.0.7 (<b>finally,</b> puhhh!)
  -01-Sep-2001: Updated package: N<png> 1.2.0
  -31-Aug-2001: Updated package: N<mutt> 1.3.22.1i
  -31-Aug-2001: Updated package: N<openldap> 2.0.12
  -30-Aug-2001: Updated package: N<lmtp2nntp> 0.9.4
  -29-Aug-2001: Upgraded package: N<tar> 1.3.21
  -29-Aug-2001: New package: N<cvsweb> 1.112.1.82
  -29-Aug-2001: New package: N<rcs> 5.7
  -29-Aug-2001: <b>Revamped optical look of website!</b>
  -28-Aug-2001: Updated package: N<siege> 2.08
  -28-Aug-2001: Updated package: N<vim> 6.0at
  -28-Aug-2001: Updated package: N<lmtp2nntp> 0.9.3
  -27-Aug-2001: Updated package: N<squid> 2.4.2
  -27-Aug-2001: Updated package: N<autogen> 5.2.9
  -27-Aug-2001: Updated package: N<xmame> 0.54.1
  -27-Aug-2001: Updated package: N<whois> 4.5.8
  -26-Aug-2001: Updated package: N<postfix> 20010228pl04
  -25-Aug-2001: Updated package: N<imagemagick> 5.3.8
  -25-Aug-2001: Updated package: N<mc> 4.5.55
  -25-Aug-2001: Updated package: N<nano> 1.0.4
  -25-Aug-2001: Updated package: N<a2ps> 4.13
  -24-Aug-2001: Updated package: N<automake> 1.5
  -24-Aug-2001: Updated package: N<libxslt> 1.0.3
  -24-Aug-2001: Updated package: N<libxml> 2.4.3
  -24-Aug-2001: New package: N<dmalloc> 4.8.2
  -24-Aug-2001: Updated package: N<delegate> 7.5.0
  -24-Aug-2001: Updated package: N<dhcpd> 3.0rc12
  -23-Aug-2001: Updated package: N<lmtp2nntp> 0.9.2
  -23-Aug-2001: Updated package: N<pureftpd> 0.99.1b
  -23-Aug-2001: Updated package: N<prngd> 0.9.23
  -22-Aug-2001: Updated package: N<mutt> 1.3.21i
  -21-Aug-2001: Updated package: N<siege> 2.07
  -21-Aug-2001: Updated package: N<sendmail> 8.11.6
  -21-Aug-2001: Updated package: N<pureftpd> 0.99.1a
  -21-Aug-2001: Updated package: N<vim> 6.0as
  -21-Aug-2001: Updated package: N<gcc> 3.0.1
  -21-Aug-2001: Updated package: N<zebra> 0.92a
  -21-Aug-2001: Updated package: N<curl> 7.8.1
  -20-Aug-2001: Updated package: N<lmtp2nntp> 0.9.1
  -20-Aug-2001: New package: N<lmtp2nntp> 0.9.0
  -19-Aug-2001: Updated package: N<pureftpd> 0.99.1
  -16-Aug-2001: Updated package: N<str> 0.9.5
  -16-Aug-2001: Updated package: N<zebra> 0.92
  -16-Aug-2001: Updated package: N<libxslt> 1.0.2
  -16-Aug-2001: Updated package: N<libxml> 2.4.2
  -16-Aug-2001: Updated package: N<dhcpd> 3.0rc11
  -16-Aug-2001: Updated package: N<stunnel> 3.20
  -14-Aug-2001: Updated package: N<mysql> 3.23.41
  -14-Aug-2001: New package: N<antiword> 0.31
  -13-Aug-2001: Upgraded package: N<pureftpd> 0.99b
  -13-Aug-2001: Upgraded package: N<vim> 6.0ar
  -13-Aug-2001: Upgraded package: N<fetchmail> 5.9.0
  -12-Aug-2001: Upgraded package: N<autogen> 5.2.8
  -11-Aug-2001: Upgraded package: N<stunnel> 3.19
  -11-Aug-2001: Upgraded package: N<nmap> 2.54b29
  -08-Aug-2001: Upgraded package: N<tcsh> 6.10.02
  -08-Aug-2001: Upgraded package: N<lftp> 2.4.1
  -08-Aug-2001: Upgraded package: N<fetchmail> 5.8.17
  -07-Aug-2001: Upgraded package: N<siege> 2.06
  -06-Aug-2001: Upgraded package: N<vim> 6.0aq
  -05-Aug-2001: Upgraded package: N<mozilla> 0.9.3
  -03-Aug-2001: Upgraded package: N<fetchmail> 5.8.16
  -03-Aug-2001: Upgraded package: N<ssmtp> 2.39.1
  -02-Aug-2001: Upgraded package: N<ntp> 4.1.0
  -02-Aug-2001: Upgraded package: N<ispell> 3.2.06
  -02-Aug-2001: Upgraded package: N<stunnel> 3.18
  -01-Aug-2001: Upgraded package: N<fetchmail> 5.8.15
  -01-Aug-2001: New package: N<mkgallery> 1.1
  -31-Jul-2001: Upgraded package: N<lftp> 2.4.0
  -31-Jul-2001: Upgraded package: N<stunnel> 3.17
  -30-Jul-2001: Upgraded package: N<nmap> 2.54b28
  -30-Jul-2001: Upgraded package: N<vim> 6.0ap
  -28-Jul-2001: Upgraded package: N<nano> 1.1.1
  -27-Jul-2001: Upgraded package: N<imapd> 2.0.16
  -27-Jul-2001: Upgraded package: N<pureftpd> 0.99a
  -26-Jul-2001: Upgraded package: N<pureftpd> 0.99
  -26-Jul-2001: Upgraded package: N<stunnel> 3.16
  -26-Jul-2001: Upgraded package: N<gettext> 0.10.39
  -25-Jul-2001: Upgraded package: N<mutt> 1.3.20
  -24-Jul-2001: Upgraded package: N<libxsl> 1.0.1
  -24-Jul-2001: Upgraded package: N<libxml> 2.4.1
  -23-Jul-2001: Upgraded package: N<tin> 1.5.9
  -23-Jul-2001: Upgraded package: N<db> 3.3.11
  -23-Jul-2001: Upgraded package: N<ispell> 3.2.05
  -23-Jul-2001: Upgraded package: N<delegate> 7.4.1
  -23-Jul-2001: Upgraded package: N<vim> 6.0ao
  -22-Jul-2001: Upgraded package: N<autogen> 5.2.7
  -21-Jul-2001: Upgraded package: N<mysql> 3.23.40
  -21-Jul-2001: Upgraded package: N<pureftpd> 0.98.8
  -20-Jul-2001: Upgraded package: N<nmap> 2.54b27
  -20-Jul-2001: Upgraded package: N<pinfo> 0.6.3
  -19-Jul-2001: Upgraded package: N<autoconf> 2.52
  -18-Jul-2001: Upgraded package: N<lynx> 2.8.4
  -18-Jul-2001: OpenPKG bootstrap ported to NetBSD 1.5.1
  -17-Jul-2001: Upgraded package: N<portsentry> 1.1
  -16-Jul-2001: Upgraded package: N<autogen> 5.2.6
  -16-Jul-2001: Upgraded package: N<pinfo> 0.6.2
  -16-Jul-2001: OpenPKG bootstrap ported to RedHat 7.1
  -16-Jul-2001: OpenPKG bootstrap ported to Tru64 5.0A
  -15-Jul-2001: Upgraded package: N<postfix> 20010228pl03
  -15-Jul-2001: Upgraded package: N<lynx> 2.8.4p5
  -13-Jul-2001: Upgraded package: N<vim> 6.0an
  -13-Jul-2001: Upgraded package: N<fetchmail> 5.8.14
  -11-Jul-2001: Upgraded package: N<samba> 2.2.1a
  -10-Jul-2001: Upgraded package: N<samba> 2.2.1
  -10-Jul-2001: Upgraded package: N<lynx> 2.8.4p4
  -10-Jul-2001: Upgraded package: N<libxslt> 1.0.0
  -10-Jul-2001: Upgraded package: N<libxml> 2.4.0
  -10-Jul-2001: Upgraded package: N<fetchmail> 5.8.13
  -09-Jul-2001: Upgraded package: N<nmap> 2.54b26
  -09-Jul-2001: Upgraded package: N<openssl> 0.9.6b
  -09-Jul-2001: Upgraded package: N<lynx> 2.8.4p3
  -09-Jul-2001: Upgraded package: N<groff> 1.17.2
  -08-Jul-2001: New package: N<gimp> 1.2.2
  -08-Jul-2001: Upgraded package: N<fetchmail> 5.8.12
  -08-Jul-2001: Upgraded package: N<apg> 2.0.0a3
  -08-Jul-2001: New package: N<mng> 1.0.2
  -08-Jul-2001: Upgraded package: N<libxslt> 0.14.0
  -08-Jul-2001: Upgraded package: N<libxml> 2.3.14
  -08-Jul-2001: Upgraded package: N<lame> 3.89
  -08-Jul-2001: Upgraded package: N<imapd> 2.0.15
  -07-Jul-2001: Upgraded package: N<ntp> 4.0.99m
  -05-Jul-2001: Upgraded package: N<amd> 6.0.7
  -03-Jul-2001: Upgraded package: N<links> 0.96
  -02-Jul-2001: Upgraded package: N<fetchmail> 5.8.11
  -02-Jul-2001: Upgraded package: N<nano> 1.0.3
  -02-Jul-2001: Upgraded package: N<vim> 6.0am
  -01-Jul-2001: Upgraded package: N<gcc> 3.0
  -30-Jun-2001: New package: N<orbit> 0.5.8
  -30-Jun-2001: Upgraded package: N<dhcpd> 3.0rc10
  -29-Jun-2001: Upgraded package: N<pureftpd> 0.98.7
  -29-Jun-2001: New package: N<xdelta> 1.1.2
  -29-Jun-2001: Upgraded package: N<libxml> 2.3.13
  -29-Jun-2001: New package: N<zsh> 4.0.2
  -29-Jun-2001: Upgraded package: N<siege> 2.05
  -29-Jun-2001: Upgraded package: N<freetype> 2.0.4
  -29-Jun-2001: Upgraded package: N<dhcpd> 3.0rc9
  -26-Jun-2001: New package: N<delegate> 7.3.3
  -26-Jun-2001: Upgraded package: N<libxsl> 0.13.0
  -26-Jun-2001: Upgraded package: N<libxml> 2.3.12
  -26-Jun-2001: Upgraded package: N<libiconv> 1.7
  -26-Jun-2001: Upgraded package: N<siege> 2.04
  -26-Jun-2001: Upgraded package: N<unixodbc> 2.0.8
  -26-Jun-2001: Upgraded package: N<freetype> 2.0.3
  -26-Jun-2001: New package: N<links> 0.96p8
  -26-Jun-2001: Upgraded package: N<fetchmail> 5.8.10
  -26-Jun-2001: Upgraded package: N<autogen> 5.2.5
  -25-Jun-2001: Upgraded package: N<vim> 6.0al
  -25-Jun-2001: Upgraded package: N<lynx> 2.8.4p2
  -24-Jun-2001: Upgraded package: N<php> 4.0.6
  -24-Jun-2001: Upgraded package: N<samba> 2.2.0a
  -24-Jun-2001: New package: N<html2latex> 1.1
  -23-Jun-2001: New package: N<libxslt> 0.12.0
  -23-Jun-2001: New package: N<libxml> 2.3.11
  -23-Jun-2001: Upgraded package: N<dhcpd> 3.0rc8pl1
  -23-Jun-2001: Upgraded package: N<groff> 1.17.1
  -22-Jun-2001: Upgraded package: N<wml> 2.0.7
  -22-Jun-2001: Upgraded package: N<binutils> 2.11.2
  -22-Jun-2001: Upgraded package: N<apg> 2.0.0a2
  -22-Jun-2001: Upgraded package: N<fetchmail> 5.8.8
  -20-Jun-2001: Upgraded package: N<proftpd> 1.2.2rc3
  -20-Jun-2001: Upgraded package: N<xterm> 1.57
  -18-Jun-2001: Upgraded package: N<openssh> 2.9p2
  -18-Jun-2001: Upgraded package: N<autogen> 5.2.4
  -18-Jun-2001: Upgraded package: N<fetchmail> 5.8.7
  -15-Jun-2001: Upgraded package: N<qt> 2.3.1
  -15-Jun-2001: <a href="ftp://ftp.openpkg.org">ftp.openpkg.org</a> now available 
  -15-Jun-2001: New package: N<pureftpd> 0.98.6
  -14-Jun-2001: Upgraded package: N<shtool> 1.5.4
  -14-Jun-2001: Upgraded package: N<mysql> 3.23.39
  -14-Jun-2001: New package: N<units> 1.74
  -13-Jun-2001: Downgraded package: N<texinfo> 4.0
  -13-Jun-2001: New package: N<dcron> 2.3.3 (dedicated to B<Christoph>)
  -13-Jun-2001: Upgraded package: N<fetchmail> 5.8.5
  -12-Jun-2001: Upgraded package: N<imagemagick> 5.3.5
  -11-Jun-2001: Upgraded package: N<automake> 1.4p4
  -10-Jun-2001: New package: N<zebra> 0.91a
  -10-Jun-2001: Upgraded package: N<png> 1.0.12
  -09-Jun-2001: Upgraded package: N<rfc> 3.21
  -09-Jun-2001: New package: N<mtools> 3.9.8
  -09-Jun-2001: Upgraded package: N<siege> 2.02
  -09-Jun-2001: Upgraded package: N<unixodbc> 2.0.7
  -09-Jun-2001: New package: N<autogen> 5.3.2
  -09-Jun-2001: New package: N<guile> 1.4
  -09-Jun-2001: Upgraded package: N<gawk> 3.1.0
  -09-Jun-2001: Upgraded package: N<lynx> 2.8.4p1
  -09-Jun-2001: Upgraded package: N<curl> 7.8
  -09-Jun-2001: Upgraded package: N<automake> 1.4p3
  -09-Jun-2001: Upgraded package: N<mutt> 1.3.19
  -08-Jun-2001: Upgraded package: N<nmap> 2.54b25
  -08-Jun-2001: Upgraded package: N<xmame> 0.37b15.1
  -08-Jun-2001: Upgraded package: N<dhcpd> 3.0rc8
  -08-Jun-2001: Upgraded package: N<fetchmail> 5.8.5
  -08-Jun-2001: Upgraded package: N<imapd> 2.0.14
  -08-Jun-2001: Upgraded package: N<sendmail> 8.11.4
  -08-Jun-2001: Upgraded package: N<vim> 6.0ai
  -08-Jun-2001: Upgraded package: N<gnupg> 1.0.6
  -08-Jun-2001: Upgraded package: N<qpopper> 4.0.3
  -08-Jun-2001: Upgraded package: N<whois> 4.5.7
  -08-Jun-2001: Upgraded package: N<wget> 1.0.7
  -08-Jun-2001: New package: N<php> 4.0.5
  -08-Jun-2001: B<RSE back from holiday... ;)>
  -26-May-2001: Upgraded package: N<screen> 3.9.9
  -25-May-2001: Upgraded package: N<gettext> 0.10.38
  -25-May-2001: Upgraded package: N<lftp> 2.3.11
  -25-May-2001: Upgraded package: N<openldap> 2.0.11
  -22-May-2001: Upgraded package: N<findutils> 4.1.7
  -22-May-2001: Upgraded package: N<openldap> 2.0.10
  -22-May-2001: Upgraded package: N<fetchmail> 5.8.4
  -21-May-2001: Upgraded package: N<vim> 6.0ag
  -20-May-2001: Upgraded package: N<apache> 1.3.20 (mod_ssl 2.8.4!)
  -20-May-2001: Upgraded package: N<analog> 5.01
  -19-May-2001: New package: N<gated> 3.6
  -19-May-2001: Upgraded package: N<skey> 1.1.5
  -19-May-2001: Upgraded package: N<dhcpd> 3.0rc7
  -19-May-2001: Upgraded package: N<bind> 8.2.4
  -19-May-2001: Upgraded package: N<openldap> 2.0.9
  -16-May-2001: Upgraded package: N<imagemagick> 5.3.4
  -15-May-2001: New package: N<imapd> 2.0.13
  -15-May-2001: New package: N<tiff> 3.5.6
  -15-May-2001: Upgraded package: N<xmame> 0.37b14.2
  -14-May-2001: New package: N<nail> 9.27
  -14-May-2001: Upgraded package: N<vim> 6.0af
  -13-May-2001: New package: N<imlib> 1.9.10
  -13-May-2001: Upgraded package: N<freetype> 2.0.2
  -13-May-2001: Upgraded package: N<mysql> 3.23.38
  -13-May-2001: Upgraded package: N<nano> 1.0.2
  -13-May-2001: Upgraded package: N<fetchmail> 5.8.3
  -12-May-2001: Upgraded package: N<lftp> 2.3.10
  -12-May-2001: Upgraded package: N<openldap> 2.0.8
  -09-May-2001: New package: N<ups> 3.36
  -09-May-2001: Upgraded package: N<automake> 1.4d
  -09-May-2001: Upgraded package: N<curl> 7.7.3
  -09-May-2001: Upgraded package: N<qpopper> 4.0.2
  -09-May-2001: Upgraded package: N<fetchmail> 5.8.2
  -07-May-2001: Upgraded package: N<vim> 6.0ae
  -06-May-2001: Now available: <a href="slideset/">OpenPKG Slideset</a>
  -05-May-2001: Upgraded package: N<imagemagick> 5.3.3
  -04-May-2001: Upgraded package: N<apache> for mod_ssl 2.8.3
  -04-May-2001: Upgraded package: N<lsof> 4.56
  -04-May-2001: Upgraded package: N<vim> 6.0ad
  -04-May-2001: New package: N<groff> 1.17
  -04-May-2001: Upgraded package: N<inn> 2.3.2
  -04-May-2001: Upgraded package: N<amd> 6.0.6
  -03-May-2001: New package: N<apg> 2.0.0a0
  -03-May-2001: Upgraded package: N<siege> 1.36
  -03-May-2001: Upgraded package: N<apache> for PHP 4.0.5
  -02-May-2001: Upgraded package: N<mutt> 1.3.18
  -02-May-2001: Upgraded package: N<texinfo> 4.0b
  -01-May-2001: Upgraded package: N<openssh> 2.9p1
  -01-May-2001: Upgraded package: N<dhcpd> 3.0rc4
  -01-May-2001: New package: N<analog> 5.0
  -01-May-2001: New package: N<axyftp> 0.5.1
  -30-Apr-2001: New package: N<sgmlfmt> 1.7
  -30-Apr-2001: Upgraded package: N<fileutils> 4.1
  -30-Apr-2001: Upgraded package: N<gnupg> 1.0.5
  -30-Apr-2001: New package: N<postfix> 20010228pl01
  -29-Apr-2001: Upgraded package: N<xterm> 1.56
  -29-Apr-2001: Upgraded package: N<vim> 6.0ac
  -28-Apr-2001: Upgraded package: N<dhcpd> 3.0rc3
  -28-Apr-2001: Upgraded package: N<png> 1.0.11
  -27-Apr-2001: New package: N<instant> 1.0
  -27-Apr-2001: New package: N<openjade> 1.3
  -26-Apr-2001: Upgraded package: N<libtool> 1.4
  -25-Apr-2001: Upgraded package: N<proftpd> 1.2.2rc2
  -25-Apr-2001: New package: N<indent> 2.2.6
  -25-Apr-2001: Upgraded package: N<dhcpd> 3.0rc2pl1
  -25-Apr-2001: Upgraded package: N<file> 3.35
  -25-Apr-2001: Upgraded package: N<qpopper> 4.0.1
  -24-Apr-2001: New package: N<sudo> 1.6.3p7
  -24-Apr-2001: N<rpm> now uses own GNU tar: please upgrade!
  -24-Apr-2001: New package: N<tcl> 8.3.3
  -24-Apr-2001: New package: N<myodbc> 2.50.37
  -24-Apr-2001: New package: N<unixodbc> 2.0.6
  -24-Apr-2001: New package: N<figlet> 2.2
  -24-Apr-2001: Upgraded package: N<fileutils> 4.0.45
  -23-Apr-2001: Upgraded package: N<curl> 7.7.2
  -23-Apr-2001: New package: N<portsentry> 1.0
  -23-Apr-2001: Upgraded package: N<textutils> 2.0.14
  -22-Apr-2001: New package: N<mpg123> 0.59r
  -22-Apr-2001: New package: N<lame> 3.88
  -22-Apr-2001: New package: N<nntpcache> 2.3.3
  -22-Apr-2001: New package: N<kermit> 7.1.199
  -22-Apr-2001: New package: N<lrzsz> 0.12.20
  -22-Apr-2001: Upgraded package: N<dhcpd> 3.0rc2
  -22-Apr-2001: Upgraded package: N<xterm> 1.55
  -21-Apr-2001: Upgraded package: N<xmame> 0.37b14.1
  -21-Apr-2001: Upgraded package: N<gettext> 0.10.37
  -21-Apr-2001: Upgraded package: N<mysql> 3.23.37
  -20-Apr-2001: Upgraded package: N<dhcpd> 3.0rc1pl1
  -19-Apr-2001: Upgraded package: N<shtool> 1.5.3
  -19-Apr-2001: Upgraded package: modules for N<perl> 
  -18-Apr-2001: New package: N<samba> 2.2.0
  -18-Apr-2001: Upgraded package: N<mc> 4.5.54
  -18-Apr-2001: Upgraded package: N<ncftp> 3.0.3
  -18-Apr-2001: Upgraded package: N<dhcpd> 3.0rc1
  -14-Apr-2001: Upgraded package: N<ntp> 4.0.99k23
  -14-Apr-2001: Upgraded package: N<fetchmail> 5.8.1
  -14-Apr-2001: Upgraded package: N<qpopper> 4.0
  -14-Apr-2001: Upgraded package: N<mc> 4.5.53
  -13-Apr-2001: New package: N<pinfo> 0.6.1
  -13-Apr-2001: Upgraded package: N<vim> 6.0aa
  -13-Apr-2001: Upgraded package: N<openssl> 0.9.6a
  -12-Apr-2001: Upgraded package: N<imagemagick> 5.3.2
  -12-Apr-2001: Upgraded package: N<xterm> 154
  -10-Apr-2001: Upgraded package: N<bash> 2.05
  -09-Apr-2001: New package: N<logsurfer> 1.5a
  -09-Apr-2001: Upgraded package: N<xmame> 0.37b13.2
  -09-Apr-2001: Upgraded package: N<whois> 4.5.6
  -09-Apr-2001: Upgraded package: N<perl> 5.6.1
  -09-Apr-2001: Upgraded package: N<gtk+> 1.2.10
  -09-Apr-2001: Upgraded package: N<glib> 1.2.10
  -09-Apr-2001: Upgraded package: N<nmap> 2.54b22
  -08-Apr-2001: New package: N<snmp> 4.2.1
  -08-Apr-2001: Upgraded package: N<fetchmail> 5.8.0
  -08-Apr-2001: Upgraded package: N<binutils> 2.11
  -08-Apr-2001: Upgraded package: N<nano> 1.0.1
  -07-Apr-2001: Upgraded package: N<curl> 7.7.1
  -07-Apr-2001: Upgraded package: N<dhcpd> 3.0b2pl24
  -07-Apr-2001: Upgraded package: N<siege> 1.34
  -02-Apr-2001: Upgraded package: N<lynx> 2.8.4dev20
  -01-Apr-2001: Upgraded package: N<stunnel> 3.14
  -01-Apr-2001: Upgraded package: N<gnupg> 1.0.4f
  -01-Apr-2001: Upgraded package: N<sasl> 1.5.27
  -01-Apr-2001: Upgraded package: N<gettext> 0.10.36
  -30-Mar-2001: New package: N<iozone> 3.53
  -30-Mar-2001: Upgraded package: N<imagemagick> 5.3.0
  -30-Mar-2001: Upgraded package: N<png> 1.0.10
  -30-Mar-2001: New package: N<siege> 1.33
  -30-Mar-2001: New package: N<xterm> 153
  -30-Mar-2001: Upgraded package: N<apache> for mod_ssl 2.8.2
  -30-Mar-2001: Upgraded package: N<apache> for mod_layout 2.10.4
  -30-Mar-2001: Upgraded package: N<apache> for mod_gzip 1.3.19.1a
  -30-Mar-2001: Upgraded package: N<sendmail> for smtpfeed 1.13
  -30-Mar-2001: Upgraded package: N<proftpd> 1.2.2rc1
  -29-Mar-2001: Upgraded package: N<fetchmail> 5.7.7
  -28-Mar-2001: Upgraded package: N<mutt> 1.3.17
  -28-Mar-2001: Upgraded package: N<mysql> 3.23.36
  -27-Mar-2001: New package: N<mail2news> 1.42
  -26-Mar-2001: Upgraded package: N<file> 3.34
  -25-Mar-2001: New package: N<w3m> 0.2.1
  -25-Mar-2001: Upgraded package: N<fileutils> 4.0.43
  -25-Mar-2001: Upgraded package: N<vim> 6.0z
  -24-Mar-2001: Upgraded package: N<pth> 1.4.0
  -23-Mar-2001: Upgraded package: N<openssh> 2.5.2p2
  -23-Mar-2001: Upgraded package: N<nano> 1.0.0
  -23-Mar-2001: Upgraded package: N<curl> 7.7
  -23-Mar-2001: Upgraded package: N<fetchmail> 5.7.6
  -23-Mar-2001: Upgraded package: N<lftp> 2.3.9
  -23-Mar-2001: Upgraded package: N<dhcpd> 3.0b2pl23
  -22-Mar-2001: Upgraded package: N<squid> 2.4.S1
  -21-Mar-2001: New package: N<qt> 2.2.4
  -21-Mar-2001: New package: N<jpeg> 6b
  -21-Mar-2001: Upgraded package: N<dhcpd> 3.0b2pl22
  -20-Mar-2001: Upgraded package: N<openssh> 2.5.2p1
  -20-Mar-2001: Upgraded package: N<vim> 6.0y
  -20-Mar-2001: Upgraded package: N<mc> 4.5.52
  -20-Mar-2001: Upgraded package: N<textutils> 2.0.13
  -20-Mar-2001: Upgraded package: N<rfc> 3.2
  -20-Mar-2001: Upgraded package: N<libiconv> 1.6.1
  -17-Mar-2001: Upgraded package: N<fetchmail> 5.7.5
  -17-Mar-2001: New package: N<minicom> 1.83.1
  -17-Mar-2001: New package: N<ispell> 3.1.20
  -17-Mar-2001: New package: N<limo> 0.3.2
  -17-Mar-2001: Upgraded package: N<gcc> 2.95.3
  -17-Mar-2001: Upgraded package: N<mysql> 3.23.35
  -17-Mar-2001: Upgraded package: N<dhcpd> 3.0b2pl20
  -16-Mar-2001: New package: N<mkisofs> 1.13
  -16-Mar-2001: New package: N<iselect> 1.2.0
  -16-Mar-2001: Upgraded package: N<whois> 4.5.4
  -14-Mar-2001: New package: N<htdig> 3.2.0b3
  -14-Mar-2001: New package: N<lsof> 4.55
  -12-Mar-2001: Upgraded package: N<mysql> 3.23.24a
  -12-Mar-2001: Upgraded package: N<vim> 6.0x
  -09-Mar-2001: Enhanced package: N<openssh> now uses N<skey>
  -09-Mar-2001: New package: N<skey> 1.1.3
  -07-Mar-2001: Upgraded package: N<apache> with mod_layout 2.10.2
  -07-Mar-2001: Upgraded package: N<sitecopy> 0.10.15
  -06-Mar-2001: Fixed package: N<proftpd>
  -06-Mar-2001: Finished package: N<inn> 2.3.1
  -04-Mar-2001: Fixed package: N<flex>
  -04-Mar-2001: Fixed package: N<apache>
  -04-Mar-2001: Fixed package: N<gcc>
  -03-Mar-2001: Upgraded package: N<proftpd> 1.2.1
  -03-Mar-2001: Upgraded package: N<apache> 1.3.19
  -02-Mar-2001: Upgraded package: N<dhcpd> 3.0b2pl18
  -01-Mar-2001: Upgraded package: N<openssh> 2.5.1p2
  -29-Feb-2001: Upgraded package: N<shtool> 1.5.2
  -27-Feb-2001: Upgraded package: N<proftpd> 1.2.0
  -27-Feb-2001: Package newsyslog now replaced with shtool
  -23-Feb-2001: New package: N<ssmtp> 2.38.7
  -23-Feb-2001: Upgraded package: N<rrdtool> 1.0.33
  -23-Feb-2001: Upgraded package: N<fetchmail> 5.6.8
  -22-Feb-2001: Upgraded package: N<tin> 1.5.8
  -21-Feb-2001: Upgraded package: N<rrdtool> 1.0.32
  -21-Feb-2001: Upgraded package: N<slang> 1.4.4
  -20-Feb-2001: Upgraded package: N<openssh> 2.5.1p1
  -17-Feb-2001: Upgraded package: N<imagemagick> 5.2.9
  -17-Feb-2001: Upgraded package: N<lftp> 2.3.8
  -17-Feb-2001: Upgraded package: N<whois> 4.5.3
  -14-Feb-2001: Upgraded package: N<mysql> 3.23.33
  -14-Feb-2001: Upgraded package: N<curl> 7.6.1
  -12-Feb-2001: Upgraded package: N<lynx> 2.4.8dev18
  -12-Feb-2001: Upgraded package: N<mutt> 1.3.15i
  -11-Feb-2001: Upgraded package: N<fetchmail> 5.6.5
  -11-Feb-2001: Upgraded package: N<fetchmail> 5.6.4
  -11-Feb-2001: Upgraded package: N<vim> 6.0v
  -10-Feb-2001: B<BREAK THROUGH:> we now have H<100> packages!
  -10-Feb-2001: New package: N<mc> 4.5.51 (and N<glib>)
  -10-Feb-2001: New packages: N<file> 3.33
  -10-Feb-2001: New GNU packages: N<textutils>, N<findutils>,  N<textutils>
  -10-Feb-2001: New GNU packages: N<diffutils>, N<sharutils>,  N<fileutils>
  -10-Feb-2001: New package: N<openldap> 2.0.9
  -10-Feb-2001: New package: N<cvs> 1.11.0.1
  -09-Feb-2001: New package: N<ghostscript> 6.50
  -09-Feb-2001: Upgraded package: N<fetchmail> 5.6.3
  -08-Feb-2001: Enhanced N<petidomo> package.
  -08-Feb-2001: Now the N<gcc> package works!
  -07-Feb-2001: Upgraded package: N<proftpd> 1.2.0rc3 
  -07-Feb-2001: Upgraded package: N<tcpdump> 3.6.2
  -07-Feb-2001: Upgraded package: N<libpcap> 0.6.2
  -05-Feb-2001: Enhanced N<bash> package
  -04-Feb-2001: Created new package: N<proftpd>
  -31-Jan-2001: Created the new Newsflash facility on www.openpkg.org
  -31-Jan-2001: Added SSL, Perl and PHP support to N<apache> package
  -31-Jan-2001: Created new package: N<gd> (for N<php>)
  -31-Jan-2001: Created new package: N<png> (for N<gd>)
  -31-Jan-2001: Created new package: N<freetype> (for N<gd>)
  -30-Jan-2001: Website www.openpkg.org now world-wide accessible
  -30-Jan-2001: Started first cut for N<apache> package
  -22-Jan-2001: Created new package: N<bind>
  -21-Jan-2001: Created new package: N<sendmail>
  -20-Jan-2001: Created new package: N<petidomo>
  -19-Jan-2001: Created new package: N<dhcpd>
  -01-Jan-2001: First cut for www.openpkg.org website.
  -25-Nov-2000: Started OpenPKG project.
  +13-Feb-2002: First cut for the OSSP website
  +31-Jan-2002: Released OSSP ex 0.9.0
  +31-Jan-2002: Released OSSP sa 0.9.0
  +13-Nov-2001: Released OSSP lmtp2nntp 1.1.1
  +12-Nov-2001: Released OSSP lmtp2nntp 1.1.0
  +13-Sep-2001: Released OSSP lmtp2nntp 1.0.0
  +08-Nov-2001: Released OSSP lmtp2nntp 1.1b4
  +08-Nov-2001: Released OSSP lmtp2nntp 1.1b3
  +15-Oct-2001: Released OSSP lmtp2nntp 1.1b2
  +12-Oct-2001: Released OSSP lmtp2nntp 1.1b1
  +13-Sep-2001: Released OSSP lmtp2nntp 0.9.7

From ossp-cvs-owner@ossp.org  Thu Feb 14 11:00:58 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 479F976503; Thu, 14 Feb 2002 11:00:58 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/boot index.wml ossp-web/pkg index.wml ossp-we...
Message-Id: <20020214100058.479F976503@mail.ossp.org>
Date: Thu, 14 Feb 2002 11:00:58 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   14-Feb-2002 11:00:58
  Branch: HEAD                             Handle: 2002021410005502

  Modified files:
    ossp-web/pkg            index.wml
    ossp-web/pkg/boot       index.wml
    ossp-web/pkg/kern       index.wml
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/mod        index.wml
    ossp-web/pkg/tool       index.wml

  Log:
    add more content to packages section

  Summary:
    Revision    Changes     Path
    1.2         +5  -2      ossp-web/pkg/boot/index.wml
    1.2         +44 -0      ossp-web/pkg/index.wml
    1.2         +4  -1      ossp-web/pkg/kern/index.wml
    1.2         +36 -1      ossp-web/pkg/lib/index.wml
    1.2         +4  -1      ossp-web/pkg/mod/index.wml
    1.2         +34 -1      ossp-web/pkg/tool/index.wml
  ____________________________________________________________________________

  Index: ossp-web/pkg/boot/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/boot/index.wml	13 Feb 2002 16:35:05 -0000	1.1
  +++ ossp-web/pkg/boot/index.wml	14 Feb 2002 10:00:55 -0000	1.2
  @@ -3,5 +3,8 @@
   
   <title>Packages: Bootstrap</title>
   
  -<h1>Packages: Bootstrap</h1>
  -
  +The bootstrap packages will be the necessary tools and libraries for
  +bootstrapping the OSSP developer and end-user build environments.
  +Currently this package cathegory still does not exists. It will be
  +created later by integrating packages from the <a href="../tool/">Tools</a> and
  +<a href="../lib/">Libraries</a> cathegories.
  Index: ossp-web/pkg/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/index.wml	13 Feb 2002 16:35:05 -0000	1.1
  +++ ossp-web/pkg/index.wml	14 Feb 2002 10:00:55 -0000	1.2
  @@ -3,3 +3,47 @@
   
   <title>Packages</title>
   
  +OSSP consists of a large set of packages (or components). They are split
  +into the following cathegories:
  +
  +<h2>Tools</h2>
  +
  +The tools OSSP provides are either developed for internal use in the
  +OSSP project environment or for the build process of the other OSSP
  +components. They are all small stand-alone applications and can be used
  +fully separately. 
  +[<a href="tool/">more</a>]
  +     
  +<h2>Bootstrap</h2>
  +
  +The bootstrap packages will be the necessary tools and libraries for
  +bootstrapping the OSSP developer and end-user build environments.
  +Currently this package cathegory still does not exists. It will be
  +created later by integrating packages from the <i>Tools</i> and
  +<i>Libraries</i> cathegories.
  +[<a href="boot/">more</a>]
  +
  +<h2>Libraries</h2>
  +
  +The libraries OSSP provides are the passive components used in the
  +OSSP platform. They are all stand-alone and fully reusable libraries
  +and can be used fully separately. On these packages currently the main
  +development effort is put, because they are the base of the whole OSSP
  +platform.
  +[<a href="lib/">more</a>]
  +
  +<h2>Kernel</h2>
  +
  +The kernel packages will form the microkernel part of the OSSP platform.
  +It will use the <i>Libraries</i> packages to provide the run-time
  +environment for the <i>Modules</i> packages.
  +[<a href="kern/">more</a>]
  +
  +<h2>Modules</h2>
  +
  +The modules OSSP will be the active components used in the OSSP
  +platform. They use the <i>Libraries</i> and the OSSP <i>Kernel</i>
  +packages to provide the actual OSSP server functionality. They
  +can be used only within the OSSP platform.
  +[<a href="mod/">more</a>]
  +
  Index: ossp-web/pkg/kern/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/kern/index.wml	13 Feb 2002 16:35:06 -0000	1.1
  +++ ossp-web/pkg/kern/index.wml	14 Feb 2002 10:00:56 -0000	1.2
  @@ -3,5 +3,8 @@
   
   <title>Packages: Kernel</title>
   
  -<h1>Packages: Kernel</h1>
  +The kernel packages will form the microkernel part of the OSSP platform.  It
  +will use the <a href="../lib/">Libraries</a> packages to provide the run-time
  +environment for the <a href="../mod/">Modules</a> packages.
  +
   
  Index: ossp-web/pkg/lib/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/lib/index.wml	13 Feb 2002 16:35:06 -0000	1.1
  +++ ossp-web/pkg/lib/index.wml	14 Feb 2002 10:00:56 -0000	1.2
  @@ -3,5 +3,40 @@
   
   <title>Packages: Libraries</title>
   
  -j dkjsölkjdflksjfdlhsdfhs
  +The libraries OSSP provides are the passive components used in the
  +OSSP platform. They are all stand-alone and fully reusable libraries
  +and can be used fully separately. On these packages currently the main
  +development effort is put, because they are the base of the whole OSSP
  +platform.
  +
  +<ul>
  +  <li><a href="pth/"><b>GNU pth</b></a><br>
  +      Portable Threads
  +  <li><a href="str/"><b>OSSP str</b></a><br>
  +      String Manipulations
  +  <li><a href="sa/"><b>OSSP sa</b></a><br>
  +      Socket Abstraction
  +  <li><a href="ex/"><b>OSSP ex</b></a><br>
  +      Exception Handling
  +  <li><a href="l2/"><b>OSSP l2</b></a><br>
  +      Flexible Logging
  +  <li><a href="var/"><b>OSSP var</b></a><br>
  +      Variable Expansion
  +  <li><a href="val/"><b>OSSP val</b></a><br>
  +      Value Access
  +  <li><a href="act"/><b>OSSP act</b></a><br>
  +      Abstract Container Types
  +  <li><a href="cache"/><b>OSSP cache</b></a><br>
  +      User-Space Cache
  +  <li><a href="mm"/><b>OSSP mm</b></a><br>
  +      Shared Memory Allocation
  +  <li><a href="xds/"><b>OSSP xds</b></a><br>
  +      Extensible Data Serialization
  +  <li><a href="path"/><b>OSSP path</b></a><br>
  +      Filesystem Path Manipulations
  +  <li><a href="pcre"/><b>OSSP pcre</b></a><br>
  +      Perl Compatible Regular Expressions (derived)
  +  <li><a href="popt"/><b>OSSP popt</b></a><br>
  +      Option Parsing (derived)
  +</ul>
   
  Index: ossp-web/pkg/mod/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/mod/index.wml	13 Feb 2002 16:35:07 -0000	1.1
  +++ ossp-web/pkg/mod/index.wml	14 Feb 2002 10:00:57 -0000	1.2
  @@ -3,5 +3,8 @@
   
   <title>Packages: Modules</title>
   
  -<h1>Packages: Modules</h1>
  +The modules OSSP will be the active components used in the OSSP
  +platform. They use the <a href="../lib/">Libraries</a> and the OSSP <a
  +href="../kern/">Kernel</a> packages to provide the actual OSSP server
  +functionality. They can be used only within the OSSP platform.
   
  Index: ossp-web/pkg/tool/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/tool/index.wml	13 Feb 2002 16:35:08 -0000	1.1
  +++ ossp-web/pkg/tool/index.wml	14 Feb 2002 10:00:57 -0000	1.2
  @@ -3,5 +3,38 @@
   
   <title>Packages: Tools</title>
   
  -<h1>Packages: Tools</h1>
  +The tools OSSP provides are either developed for internal use in the
  +OSSP project environment or for the build process of the other OSSP
  +components. They are all small stand-alone applications and can be used
  +fully separately. 
  +
  +<p>
  +The following packages exists in this cathegory:
  +
  +<ul>
  +  <li><a href="shtool/"><b>GNU shtool</b></a><br>
  +      Portable Shell Tool
  +  <li><a href="lmtp2nntp/"><b>OSSP lmtp2nntp</b></a><br>
  +      Real-Time Mail to News Gateway
  +  <li><a href="petidomo/"><b>OSSP petidomo</b></a><br>
  +      Mailing List Manager
  +  <li><a href="shiela/"><b>OSSP shiela</b></a><br>
  +      CVS Repository Access Control and Logging Facility
  +  <li><a href="xenia/"><b>OSSP xenia</b></a><br>
  +      CVS Repository Browsing Server
  +  <li><a href="rc/"><b>OSSP rc</b></a><br>
  +      Run-Command Facility
  +  <li><a href="dsotool/"><b>OSSP dsotool</b></a><br>
  +      Dynamic Shared Object (DSO) Facility
  +  <li><a href="devtool/"><b>OSSP devtool</b></a><br>
  +      Development Tool
  +  <li><a href="smake/"><b>OSSP smake</b></a><br>
  +      Skeletin Makefile Generator
  +  <li><a href="eo/"><b>OSSP eo</b></a><br>
  +      Embedded Object Tool
  +  <li><a href="sugar/"><b>OSSP sugar</b></a><br>
  +      Sugar Markup Language Processor
  +  <li><a href="iselect/"><b>OSSP iselect</b></a><br>
  +      Interactive Terminal Selection
  +</ul>
   

From ossp-cvs-owner@ossp.org  Thu Feb 14 11:47:21 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 257FB76503; Thu, 14 Feb 2002 11:47:20 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.h lmtp2nntp_option.h
Message-Id: <20020214104720.257FB76503@mail.ossp.org>
Date: Thu, 14 Feb 2002 11:47:20 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   14-Feb-2002 11:47:20
  Branch: HEAD                             Handle: 2002021410472000

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.h lmtp2nntp_option.h

  Log:
    add outermost ifndef headers

  Summary:
    Revision    Changes     Path
    1.8         +5  -0      ossp-pkg/lmtp2nntp/lmtp2nntp_config.h
    1.5         +5  -0      ossp-pkg/lmtp2nntp/lmtp2nntp_option.h
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.h
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 lmtp2nntp_config.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.h	24 Jan 2002 16:25:54 -0000	1.7
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.h	14 Feb 2002 10:47:20 -0000	1.8
  @@ -24,6 +24,11 @@
   **  lmtp2nntp_config.h: config handling
   */
   
  +#ifndef __LMTP2NNTP_CONFIG_H__
  +#define __LMTP2NNTP_CONFIG_H__
  +
   #include "lmtp2nntp_global.h"
   #include "fixme.h"
   void config_context(lmtp2nntp_t *);
  +
  +#endif /* __LMTP2NNTP_CONFIG_H__ */
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_option.h
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 lmtp2nntp_option.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_option.h	4 Feb 2002 13:52:15 -0000	1.4
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_option.h	14 Feb 2002 10:47:20 -0000	1.5
  @@ -24,6 +24,9 @@
   **  lmtp2nntp_option.h: option parsing
   */
   
  +#ifndef __LMTP2NNTP_OPTION_H__
  +#define __LMTP2NNTP_OPTION_H__
  +
   #include "lmtp2nntp_global.h"
   #include "val.h"
   
  @@ -108,3 +111,5 @@
   lmtp2nntp_option_rc_t option_register(lmtp2nntp_option_t *, char *, char, optiontype_t, char *, char *, char *, optionloop_cb_t *, char *);
   lmtp2nntp_option_rc_t option_parse   (lmtp2nntp_option_t *, int, char **);
   lmtp2nntp_option_rc_t option_destroy (lmtp2nntp_option_t *);
  +
  +#endif /* __LMTP2NNTP_OPTION_H__ */

From ossp-cvs-owner@ossp.org  Thu Feb 14 11:51:51 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BED8776503; Thu, 14 Feb 2002 11:51:50 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp Makefile.in lmtp2nntp_exwrap.c lmtp2nnt...
Message-Id: <20020214105150.BED8776503@mail.ossp.org>
Date: Thu, 14 Feb 2002 11:51:50 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   14-Feb-2002 11:51:50
  Branch: HEAD                             Handle: 2002021410515000

  Added files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_exwrap.c lmtp2nntp_exwrap.h
  Modified files:
    ossp-pkg/lmtp2nntp      Makefile.in lmtp2nntp_global.h

  Log:
    add some wrapper code for lib_ex

  Summary:
    Revision    Changes     Path
    1.46        +3  -3      ossp-pkg/lmtp2nntp/Makefile.in
    1.1         +68 -0      ossp-pkg/lmtp2nntp/lmtp2nntp_exwrap.c
    1.1         +39 -0      ossp-pkg/lmtp2nntp/lmtp2nntp_exwrap.h
    1.5         +1  -0      ossp-pkg/lmtp2nntp/lmtp2nntp_global.h
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.45 -r1.46 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	13 Feb 2002 13:18:25 -0000	1.45
  +++ ossp-pkg/lmtp2nntp/Makefile.in	14 Feb 2002 10:51:50 -0000	1.46
  @@ -44,9 +44,9 @@
   POD2MAN     = pod2man
   
   PROG = lmtp2nntp
  -HDRS = lmtp2nntp_global.h lmtp2nntp_daemon.h lmtp2nntp_lmtp.h lmtp2nntp_nntp.h lmtp2nntp_argz.h lmtp2nntp_shpat.h lmtp2nntp_msg.h lmtp2nntp_option.h lmtp2nntp_config.h 
  -SRCS = lmtp2nntp_main.c   lmtp2nntp_daemon.c lmtp2nntp_lmtp.c lmtp2nntp_nntp.c lmtp2nntp_argz.c lmtp2nntp_shpat.c lmtp2nntp_msg.c lmtp2nntp_option.c lmtp2nntp_config.c lmtp2nntp_version.c 
  -OBJS = lmtp2nntp_main.o   lmtp2nntp_daemon.o lmtp2nntp_lmtp.o lmtp2nntp_nntp.o lmtp2nntp_argz.o lmtp2nntp_shpat.o lmtp2nntp_msg.o lmtp2nntp_option.o lmtp2nntp_config.o lmtp2nntp_version.o
  +HDRS = lmtp2nntp_global.h lmtp2nntp_daemon.h lmtp2nntp_lmtp.h lmtp2nntp_nntp.h lmtp2nntp_argz.h lmtp2nntp_shpat.h lmtp2nntp_msg.h lmtp2nntp_option.h lmtp2nntp_config.h lmtp2nntp_exwrap.h 
  +SRCS = lmtp2nntp_main.c   lmtp2nntp_daemon.c lmtp2nntp_lmtp.c lmtp2nntp_nntp.c lmtp2nntp_argz.c lmtp2nntp_shpat.c lmtp2nntp_msg.c lmtp2nntp_option.c lmtp2nntp_config.c lmtp2nntp_exwrap.c lmtp2nntp_version.c 
  +OBJS = lmtp2nntp_main.o   lmtp2nntp_daemon.o lmtp2nntp_lmtp.o lmtp2nntp_nntp.o lmtp2nntp_argz.o lmtp2nntp_shpat.o lmtp2nntp_msg.o lmtp2nntp_option.o lmtp2nntp_config.o lmtp2nntp_exwrap.o lmtp2nntp_version.o
   
   SUBDIRS = @SUBDIR_EX@ @SUBDIR_STR@ @SUBDIR_L2@ @SUBDIR_SA@ @SUBDIR_VAR@ @SUBDIR_VAL@ @SUBDIR_POPT@ @SUBDIR_PCRE@
   
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_exwrap.c
  ============================================================
  $ cvs update -p -r1.1 lmtp2nntp_exwrap.c
  
  /*
  **  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  **  mailer which forwards mails as Usenet news articles via NNTP.
  **  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  **
  **  This program is free software; you can redistribute it and/or
  **  modify it under the terms of the GNU General Public  License
  **  as published by the Free Software Foundation; either version
  **  2.0 of the License, or (at your option) any later version.
  **
  **  This program is distributed in the hope that it will be useful,
  **  but WITHOUT ANY WARRANTY; without even the implied warranty of
  **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  **  General Public License for more details.
  **
  **  You should have received a copy of the GNU General Public License
  **  along with this file; if not, write to the Free Software
  **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  **  USA, or contact the OSSP project <ossp@ossp.org>.
  **
  **  lmtp2nntp_exwrap.c: lib_ex wrappers
  */
  
  #include <string.h>
  #include <stdlib.h>
  
  /* own headers */
  #include "lmtp2nntp_global.h"
  
  char *strdupex(const char *str)
  {
      char *rc;
  
      if ((rc = strdup(str)) == NULL)
          throw(0,0,0);
      return rc;
  }
  
  void *mallocex(size_t size)
  {
      void *rc;
  
      if ((rc = malloc(size)) == NULL)
          throw(0,0,0);
      return rc;
  }
  
  void *reallocex(void *ptr, size_t size)
  {
      void *rc;
  
      if ((rc = realloc(ptr, size)) == NULL)
          throw(0,0,0);
      return rc;
  }
  
  void freeex(void *ptr)
  {
      if (ptr == NULL)
          throw(0,0,0);
      free(ptr);
      return;
  }
  
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_exwrap.h
  ============================================================
  $ cvs update -p -r1.1 lmtp2nntp_exwrap.h
  
  /*
  **  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  **  mailer which forwards mails as Usenet news articles via NNTP.
  **  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  **
  **  This program is free software; you can redistribute it and/or
  **  modify it under the terms of the GNU General Public  License
  **  as published by the Free Software Foundation; either version
  **  2.0 of the License, or (at your option) any later version.
  **
  **  This program is distributed in the hope that it will be useful,
  **  but WITHOUT ANY WARRANTY; without even the implied warranty of
  **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  **  General Public License for more details.
  **
  **  You should have received a copy of the GNU General Public License
  **  along with this file; if not, write to the Free Software
  **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  **  USA, or contact the OSSP project <ossp@ossp.org>.
  **
  **  lmtp2nntp_exwrap.h: lib_ex wrappers
  */
  
  #ifndef __LMTP2NNTP_EXWRAP_H__
  #define __LMTP2NNTP_EXWRAP_H__
  
  #include <string.h>
  
  char *strdupex(const char *);
  void *mallocex(size_t);
  void *reallocex(void *, size_t);
  void freeex(void *);
  
  
  #endif /* __LMTP2NNTP_EXWRAP_H__ */
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_global.h
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 lmtp2nntp_global.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_global.h	30 Jan 2002 16:41:02 -0000	1.4
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_global.h	14 Feb 2002 10:51:50 -0000	1.5
  @@ -45,5 +45,6 @@
   
   #define __EX_NS_USE_CXX__
   #include <ex.h>
  +#include "lmtp2nntp_exwrap.h"
   
   #endif /* __LMTP2NNTP_H__ */

From ossp-cvs-owner@ossp.org  Thu Feb 14 12:03:53 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7761476503; Thu, 14 Feb 2002 12:03:53 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp fixme.h lmtp2nntp_config.c lmtp2nntp_ma...
Message-Id: <20020214110353.7761476503@mail.ossp.org>
Date: Thu, 14 Feb 2002 12:03:53 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   14-Feb-2002 12:03:53
  Branch: HEAD                             Handle: 2002021411035200

  Modified files:
    ossp-pkg/lmtp2nntp      fixme.h lmtp2nntp_config.c lmtp2nntp_main.c

  Log:
    Please review!
    Attempt to use lib_ex for proper cleanup. I discovered some tweaks and
    quirks regarding the volatile nature of the hrNew structure temporary
    allocating resources. Two wrappers, strdupex() and mallocex() are
    used to throw exceptions. It was a pain, or at least a different kind
    of programming, to always ensure that hrNew resoures are cleaned up
    completely when they should and to stop the cleanup code from releasing
    resources in the non-exceptional case. Although, the declaration of a
    volatile structure requires casting where i do not want to use it. Maybe
    i did something wrong, and life becomes easier in this particular case
    when i put the exeptional cleanup code in the catch construct, because
    in this try-cleanup-catch block i only want cleanup in the exeptional
    case. However, this would only remove the "hrNew = NULL" line at the
    buttom of the for() loop. Would this help, should it work? Unsure ...

  Summary:
    Revision    Changes     Path
    1.15        +1  -0      ossp-pkg/lmtp2nntp/fixme.h
    1.49        +102 -72    ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.41        +3  -3      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/fixme.h
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 fixme.h
  --- ossp-pkg/lmtp2nntp/fixme.h	13 Feb 2002 16:25:38 -0000	1.14
  +++ ossp-pkg/lmtp2nntp/fixme.h	14 Feb 2002 11:03:52 -0000	1.15
  @@ -34,6 +34,7 @@
   typedef struct headerrule_st headerrule_t;
   struct headerrule_st {
       headerrule_t *next;
  +    char         *carve; /* pri, regex, header, val carved out here, so free up only this */
       int           pri;
       char         *regex;
       char         *header;
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.48 -r1.49 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	13 Feb 2002 16:25:38 -0000	1.48
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	14 Feb 2002 11:03:52 -0000	1.49
  @@ -527,82 +527,112 @@
           rethrow;
   
       /* --headerrule MULTI */
  -    try {
  -        char *cp;
  -        int i;
  -        char *cpPri;
  -        char *cpRegex;
  -        char *cpHeader;
  -        char *cpVal;
  -        headerrule_t *hrNew;
  -        headerrule_t *hrI;
  -        headerrule_t *hrP;
  -
  -        if (   (val_get(ctx->val, "option.headerrule", &ov) != VAL_OK)
  -            || (ov->ndata <  0)
  -            || (ov->ndata >= 1 && ov->data.m == NULL)
  -              ) throw(0,0,0);
  -        log1(ctx, DEBUG, "ov->ndata = %d", ov->ndata);
  -        for (i = 0; i < ov->ndata; i++)
  -            log2(ctx, TRACE, "--headerule[%d] = \"%s\"", i, (ov->data.m)[i]);
  -
  -        if (ov->ndata >= 1) {
  -            for (i = 0; i < ov->ndata; i++) {
  -                cp = (ov->data.m)[i];
  -                log2(ctx, DEBUG, "cp = (data.m)[%d] = \"%s\"", i, cp);
  -                cp = strdup(cp); //FIXME
  -                /* priority */
  -                cpPri = cp;
  -                if ((cp = strchr(cp, ':')) == NULL) {
  -                    log1(ctx, ERROR, "option --headerrule, priority (%s) terminating colon missing", (ov->data.m)[i]);
  -                    throw(0,0,0);
  -                }
  -                *cp = NUL;
  -                cp++;
  -                /* regex */
  -                cpRegex = cp;
  -                if ((cp = strchr(cp, ':')) == NULL) {
  -                    log1(ctx, ERROR, "option --headerrule, regex (%s) terminating colon missing", (ov->data.m)[i]);
  -                    throw(0,0,0);
  -                }
  -                *cp = NUL;
  -                cp++;
  -                /* header */
  -                cpHeader = cp;
  -                if ((cp = strchr(cp, ':')) == NULL) {
  -                    log1(ctx, ERROR, "option --headerrule, header (%s) terminating colon missing", (ov->data.m)[i]);
  -                    throw(0,0,0);
  -                }
  -                *cp = NUL;
  -                cp++;
  -                /* value */
  -                cpVal = cp;
  -
  -                if ((hrNew = (headerrule_t *)malloc(sizeof(headerrule_t))) == NULL) throw(0,0,0);
  -                hrNew->next   = NULL;
  -                hrNew->pri    = atoi(cpPri);
  -                hrNew->regex  = cpRegex;
  -                hrNew->header = cpHeader;
  -                hrNew->val    = cpVal;
  -
  -                if (ctx->option_firstheaderrule == NULL)
  -                    ctx->option_firstheaderrule = hrNew;
  -                else {
  -                    for (hrP = NULL, hrI = ctx->option_firstheaderrule;
  -                         hrI != NULL && hrI->pri <= hrNew->pri;
  -                         hrP = hrI, hrI = hrI->next);
  -                    if (hrI != NULL)
  -                        hrNew->next = hrI; /* insert */
  -                    if (hrP != NULL)
  -                        hrP->next = hrNew; /* append */
  -                    else
  -                        ctx->option_firstheaderrule = hrNew; /* newfirst */
  +    {
  +    volatile headerrule_t *hrNew = NULL; // declare and initialize variables which might have resources allocated that need to be cleaned up when an exception is caught
  +        try {
  +            char *cp;
  +            int i;
  +            char *cpPri;
  +            char *cpRegex;
  +            char *cpHeader;
  +            char *cpVal;
  +            headerrule_t *hrI;
  +            headerrule_t *hrP;
  +
  +            if (   (val_get(ctx->val, "option.headerrule", &ov) != VAL_OK)
  +                || (ov->ndata <  0)
  +                || (ov->ndata >= 1 && ov->data.m == NULL)
  +                  ) throw(0,0,0);
  +            log1(ctx, DEBUG, "ov->ndata = %d", ov->ndata);
  +            for (i = 0; i < ov->ndata; i++)
  +                log2(ctx, TRACE, "--headerule[%d] = \"%s\"", i, (ov->data.m)[i]);
  +
  +            if (ov->ndata >= 1) {
  +                for (i = 0; i < ov->ndata; i++) {
  +                    cp = (ov->data.m)[i];
  +                    log2(ctx, DEBUG, "cp = (data.m)[%d] = \"%s\"", i, cp);
  +
  +                    hrNew = (headerrule_t *)mallocex(sizeof(headerrule_t));
  +                    hrNew->next   = NULL;
  +                    hrNew->carve  = NULL; // initialize variables which might have resources allocated that need to be cleaned up when an exception is caught
  +                    
  +                    cp = hrNew->carve = strdupex(cp);
  +                    /* priority */
  +                    cpPri = cp;
  +                    if ((cp = strchr(cp, ':')) == NULL) {
  +                        log1(ctx, ERROR, "option --headerrule, priority (%s) terminating colon missing", (ov->data.m)[i]);
  +                        throw(0,0,0);
  +                    }
  +                    *cp = NUL;
  +                    if (strlen(cpPri) == 0)
  +                        cpPri = "0";
  +                    cp++;
  +                    /* regex */
  +                    cpRegex = cp;
  +                    if ((cp = strchr(cp, ':')) == NULL) {
  +                        log1(ctx, ERROR, "option --headerrule, regex (%s) terminating colon missing", (ov->data.m)[i]);
  +                        throw(0,0,0);
  +                    }
  +                    *cp = NUL;
  +                    if (strlen(cpRegex) == 0)
  +                        cpRegex = NULL;
  +                    cp++;
  +                    /* header */
  +                    cpHeader = cp;
  +                    if ((cp = strchr(cp, ':')) == NULL) {
  +                        log1(ctx, ERROR, "option --headerrule, header (%s) terminating colon missing", (ov->data.m)[i]);
  +                        throw(0,0,0);
  +                    }
  +                    *cp = NUL;
  +                    if (strlen(cpHeader) == 0) {
  +                        log1(ctx, ERROR, "option --headerrule, header (%s) missing", (ov->data.m)[i]);
  +                        throw(0,0,0);
  +                    }
  +                    cp++;
  +                    /* value */
  +                    cpVal = cp;
  +                    if (strlen(cpVal) == 0)
  +                        cpVal = NULL;
  +
  +                    hrNew->pri    = atoi(cpPri);
  +                    hrNew->regex  = cpRegex;
  +                    hrNew->header = cpHeader;
  +                    hrNew->val    = cpVal;
  +
  +                    if (ctx->option_firstheaderrule == NULL)
  +                        ctx->option_firstheaderrule = (headerrule_t *)hrNew; // interesting point since hrNew is declared volatile we have to cast it. This makes me unhappy as it enlarges the code which is far from the spirit of lib_ex
  +                    else {
  +                        for (hrP = NULL, hrI = ctx->option_firstheaderrule;
  +                             hrI != NULL && hrI->pri <= hrNew->pri;
  +                             hrP = hrI, hrI = hrI->next);
  +                        if (hrI != NULL)
  +                            hrNew->next = hrI; /* insert */
  +                        if (hrP != NULL)
  +                            hrP->next = (headerrule_t *)hrNew; /* append */
  +                        else
  +                            ctx->option_firstheaderrule = (headerrule_t *)hrNew; /* newfirst */
  +                    }
  +                    /* after linking the structure into a parental-controlled structure we
  +                       expect that the parental cleanup will handle normal and exceptional
  +                       resource releasing and therefore we *must* reset this variable initialization
  +                       to avoid accidental local cleanup! In fact, this code will fail if the
  +                       next statement is omitted.
  +                     */
  +                    hrNew = NULL; // initialize variables which might have resources allocated that need to be cleaned up when an exception is caught
  +
                   }
               }
           }
  +        cleanup { // make sure the conditional variables are *always* proper initialized and cleared volatile
  +            if (hrNew != NULL) {
  +                if (hrNew->carve != NULL)
  +                    freeex(hrNew->carve);
  +                freeex((headerrule_t *)hrNew);
  +            }
  +        }
  +        catch (ex)
  +            rethrow;
       }
  -    catch (ex)
  -        rethrow;
   
       /* --mailfrom SINGLE */
       try {
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.40 -r1.41 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	13 Feb 2002 16:25:38 -0000	1.40
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	14 Feb 2002 11:03:52 -0000	1.41
  @@ -405,9 +405,9 @@
   fprintf(stderr, "DEBUG: los geht's\n");
   for (hrI = ctx->option_firstheaderrule; hrI != NULL; hrI = hrI->next) {
       fprintf(stderr, "DEBUG: cpPri    = %d\n", hrI->pri);
  -    fprintf(stderr, "DEBUG: cpRegex  = \"%s\"\n", hrI->regex);
  -    fprintf(stderr, "DEBUG: cpHeader = \"%s\"\n", hrI->header);
  -    fprintf(stderr, "DEBUG: cpValue  = \"%s\"\n", hrI->val);
  +    fprintf(stderr, "DEBUG: cpRegex  = \"%s\"\n", hrI->regex  == NULL ? "(NULL)" : hrI->regex);
  +    fprintf(stderr, "DEBUG: cpHeader = \"%s\"\n", hrI->header == NULL ? "(NULL)" : hrI->header);
  +    fprintf(stderr, "DEBUG: cpValue  = \"%s\"\n", hrI->val    == NULL ? "(NULL)" : hrI->val);
   }
   fprintf(stderr, "DEBUG: das war's\n");
   }

From ossp-cvs-owner@ossp.org  Thu Feb 14 12:04:44 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0D72676503; Thu, 14 Feb 2002 12:04:44 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/SHARE ossp_css.wml
Message-Id: <20020214110444.0D72676503@mail.ossp.org>
Date: Thu, 14 Feb 2002 12:04:44 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   14-Feb-2002 12:04:43
  Branch: HEAD                             Handle: 2002021411044300

  Modified files:
    ossp-web/SHARE          ossp_css.wml

  Log:
    make lists nicer

  Summary:
    Revision    Changes     Path
    1.3         +1  -0      ossp-web/SHARE/ossp_css.wml
  ____________________________________________________________________________

  Index: ossp-web/SHARE/ossp_css.wml
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 ossp_css.wml
  --- ossp-web/SHARE/ossp_css.wml	13 Feb 2002 21:15:26 -0000	1.2
  +++ ossp-web/SHARE/ossp_css.wml	14 Feb 2002 11:04:43 -0000	1.3
  @@ -42,6 +42,7 @@
   /* use square list items */
   LI {
       list-style-type: square; 
  +	margin-top: 4px;
   }
   
   /* define the color schemes */

From ossp-cvs-owner@ossp.org  Thu Feb 14 12:06:49 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D28BA76503; Thu, 14 Feb 2002 12:06:48 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/SHARE ossp.wml ossp_icon.wml ossp-web/SHARE/ossp_...
Message-Id: <20020214110648.D28BA76503@mail.ossp.org>
Date: Thu, 14 Feb 2002 12:06:48 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   14-Feb-2002 12:06:48
  Branch: HEAD                             Handle: 2002021411064701

  Added files:
    ossp-web/SHARE          ossp_icon.wml
    ossp-web/SHARE/ossp_img ossp-icon.ico ossp-icon.txt ossp-icon.xcf
  Modified files:
    ossp-web/SHARE          ossp.wml ossp_navbar.wml

  Log:
    add favorite icon ;)

  Summary:
    Revision    Changes     Path
    1.2         +1  -0      ossp-web/SHARE/ossp.wml
    1.1         +10 -0      ossp-web/SHARE/ossp_icon.wml
    1.1         BLOB        ossp-web/SHARE/ossp_img/ossp-icon.ico
    1.1         +8  -0      ossp-web/SHARE/ossp_img/ossp-icon.txt
    1.1         BLOB        ossp-web/SHARE/ossp_img/ossp-icon.xcf
    1.2         +19 -2      ossp-web/SHARE/ossp_navbar.wml
  ____________________________________________________________________________

  Index: ossp-web/SHARE/ossp.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 ossp.wml
  --- ossp-web/SHARE/ossp.wml	13 Feb 2002 16:34:56 -0000	1.1
  +++ ossp-web/SHARE/ossp.wml	14 Feb 2002 11:06:47 -0000	1.2
  @@ -13,6 +13,7 @@
   #   suck in own OSSP stuff
   #   (order is important)
   #use "ossp_page.wml"
  +#use "ossp_icon.wml"
   #use "ossp_colors.wml" 
   #use "ossp_css.wml" 
   #use "ossp_canvas.wml"
  Index: ossp-web/SHARE/ossp_icon.wml
  ============================================================
  $ cvs update -p -r1.1 ossp_icon.wml
  ##
  ##  ossp_icon.wml -- Favorites Icon
  ##  Copyright (c) 2000-2001 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  <head>
  <link rel="ICON" href="$(IMG)/ossp_icon.ico">
  <link rel="SHORTCUT ICON" href="$(IMG)/ossp_icon.ico">
  </head>
  
  Index: ossp-web/SHARE/ossp_img/ossp-icon.ico
  ============================================================
  $ cvs update -p -r1.1 ossp-icon.ico | uuencode ossp-icon.ico
  ‰PNG
  
  
From ossp-cvs-owner@ossp.org  Thu Feb 14 16:11:09 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CDB9C76503; Thu, 14 Feb 2002 16:11:08 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c
Message-Id: <20020214151108.CDB9C76503@mail.ossp.org>
Date: Thu, 14 Feb 2002 16:11:08 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   14-Feb-2002 16:11:08
  Branch: HEAD                             Handle: 2002021415110800

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c

  Log:
    working experimental code for evaluating pcre

  Summary:
    Revision    Changes     Path
    1.50        +73 -2      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.49 -r1.50 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	14 Feb 2002 11:03:52 -0000	1.49
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	14 Feb 2002 15:11:08 -0000	1.50
  @@ -35,10 +35,11 @@
   #include "lmtp2nntp_argz.h"
   
   /* third party (linked in) */
  +#include "l2.h"
  +#include "pcre.h"
  +#include "popt.h"
   #include "str.h"
   #include "val.h"
  -#include "popt.h"
  -#include "l2.h"
   
   /* library version check (compile-time) */
   #define STR_VERSION_HEX_REQ 0x009206
  @@ -1002,6 +1003,76 @@
       }
       catch (ex)
           rethrow;
  +
  +//void testpcre(void)
  +{
  +    char       *szRegex;
  +    pcre       *pcreRegex;
  +    pcre_extra *pcreExtra;
  +    const char *szError;
  +    int         nErrorOffset;
  +    int         iCheck;
  +    int         opt;
  +    char       *buf;
  +    int         buf_size;
  +#define OVECSIZE 30
  +    int         ovec[OVECSIZE];
  +    int         i;
  +    const char **cpList;
  +
  +    //     0         1         2
  +    //     012345678901234567890
  +    buf = "In-Reply-To: MailTo: Tom & Jerry";
  +    buf_size = strlen(buf);
  +    szRegex = "(To|Cc|Bcc):.*(Tom|Snoopy).+&(.*)";
  +    fprintf(stderr, "DEBUG:          0         1         2         3         4\n");
  +    fprintf(stderr, "DEBUG:          01234567890123456789012345678901234567890\n");
  +    fprintf(stderr, "DEBUG: buf    =\"%s\"\n", buf);
  +    fprintf(stderr, "DEBUG: szRegex=\"%s\"\n", szRegex);
  +    /*
  +    buf = "In-Reply-To: MailTo: Tom & Jerry";
  +    szRegex = "(To|Cc|Bcc):.*(Tom|Snoopy).+&(.*)";
  +    iCheck=4 [0]="To: MailTo: Tom & Jerry" [1]="To" [2]="Tom" [3]=" Jerry"
  +    */
  +
  +    /* compile regular expression into finite state machine */
  +    opt = 0;
  +    // opt |= PCRE_CASELESS;
  +    // opt |= PCRE_ANCHORED;
  +    if ((pcreRegex = pcre_compile(szRegex, opt, &szError, &nErrorOffset, NULL)) == NULL) {
  +        fprintf(stderr, "DEBUG: \"%s\" '%c'\n", szError, szRegex[nErrorOffset]);
  +        throw(0,0,0);
  +    }
  +    /* study finite state machine for more performance */
  +    pcreExtra = pcre_study(pcreRegex, 0, &szError);
  +    if (szError != NULL) {
  +        free(pcreRegex);
  +        pcreRegex = NULL;
  +        fprintf(stderr, "DEBUG: \"%s\"\n", szError);
  +        throw(0,0,0);
  +    }
  +
  +    /* apply filter */
  +    iCheck = pcre_exec(pcreRegex, pcreExtra, buf, buf_size, 0, 0, ovec, OVECSIZE);
  +    fprintf(stderr, "DEBUG: iCheck=%d\n", iCheck);
  +    for (i = 0; i < iCheck; i++)
  +        fprintf(stderr, "DEBUG: ovec[%d]=%3d, ovec[%d]=%3d\n", 2*i, ovec[2*i], 2*i+1, ovec[2*i+1]);
  +        
  +
  +    pcre_get_substring_list(buf, ovec, iCheck, &cpList);
  +    if (cpList != NULL)
  +        for (i = 0; i < iCheck; i++)
  +            fprintf(stderr, "DEBUG: list[%d]=\"%s\"\n", i, cpList[i] == NULL ? "(NULL)" : cpList[i]);
  +
  +    /* destroy channel configuration */
  +    if (cpList != NULL)
  +        pcre_free_substring_list(cpList);
  +    if (pcreRegex != NULL)
  +        free(pcreRegex);
  +    if (pcreExtra != NULL)
  +        free(pcreExtra);
  +
  +}
   
   CUS:
       return;

From ossp-cvs-owner@ossp.org  Thu Feb 14 16:56:05 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E5F9D76503; Thu, 14 Feb 2002 16:56:04 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex 00TODO
Message-Id: <20020214155604.E5F9D76503@mail.ossp.org>
Date: Thu, 14 Feb 2002 16:56:04 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   14-Feb-2002 16:56:04
  Branch: HEAD                             Handle: 2002021415560400

  Added files:
    ossp-pkg/ex             00TODO

  Log:
    don't forget the lessons learned today

  Summary:
    Revision    Changes     Path
    1.1         +90 -0      ossp-pkg/ex/00TODO
  ____________________________________________________________________________

  Index: ossp-pkg/ex/00TODO
  ============================================================
  $ cvs update -p -r1.1 00TODO
  
  **** IMPROVE DOCUMENTATION ****
  
  /* BAD EXAMPLE */
  try {
      char *cp1, *cp2, cp3;
  
      cp1 = mallocex(SMALLAMOUNT);
      globalcontext->first = cp1;
      cp2 = mallocex(TOOBIG);
      cp3 = mallocex(SMALLAMOUNT);
  
      strcpy(cp1, "foo"); strcpy(cp2, "bar");
  }
  clean {
      if (cp3 != NULL) free(cp3);
      if (cp2 != NULL) free(cp2);
      if (cp1 != NULL) free(cp1);
  }
  catch(ex) {
      printf("cp3=%s", cp3);
      rethrow;
  }
  
  The code above shows some pitfalls and contains many errors.
  
  01) variable scope
  
  Variables which are used in the "clean" or "catch" blocks must be declared
  before "try", otherwise they only exists inside the "try" block. In the
  example above, cp1-3 are automatic variables and only exist in the "try"
  block, the "clean" and "catch" blocks don't know anything about them.
  
  02) variable initialization
  
  Variables which are used in the "clean" or "catch" blocks must be initialized
  before the point of the first possible "throw" is reached. In the example
  above, "clean" would have trouble using cp3 when mallocex() throws a exception
  when allocating a TOOBIG buffer.
  
  03) volatile variables
  
  Variables which are used in the "clean" or "catch" blocks must be declared
  volatile, otherwise they might contain outdated information when "throw" does
  the longjmp(). When using a "free if unset" mechanism like the example does in
  the "clean" block, the variables must be initialized (see 02) *and* remain
  valid upon use.
  
  04) clean before catch
  
  The "clean" block is evaluated before "catch", so resources being cleaned up
  must no longer be used in the "catch" block. The example above would have
  trouble referencing the character strings in the printf() statement because
  these have been free()d before.
  
  05) variable uninitialization
  
  When resources are passed away and out of the scope of the "try/clean/catch"
  construct and the variables were initialized for using a "free if unset"
  mechanism then they must be uninitialized after being passed away.  The
  example above would free() cp1 in the "clean" block when mallocex() throws a
  exception when allocating a TOOBIG buffer. The globalcontext->first pointer
  hence becomes invalid.
  
  /* GOOD EXAMPLE */                                       | /* ALTERNATE *05* GOOD EXAMPLE */
  { /*01*/                                                 | { /*01*/
      volatile /*03*/ char *cp1 = NULL /*02*/;             |     volatile /*03*/ char *cp1 = NULL /*02*/;
      volatile /*03*/ char *cp2 = NULL /*02*/;             |     volatile /*03*/ char *cp2 = NULL /*02*/;
      volatile /*03*/ char *cp3 = NULL /*02*/;             |     volatile /*03*/ char *cp3 = NULL /*02*/;
      try {                                                |     try {
          cp1 = mallocex(SMALLAMOUNT);                     |         cp1 = mallocex(SMALLAMOUNT);
          globalcontext->first = cp1;                      |         globalcontext->first = cp1;
          cp1 = NULL /*05 give away*/;                     |         /*05 keep responsibility*/
          cp2 = mallocex(TOOBIG);                          |         cp2 = mallocex(TOOBIG);
          cp3 = mallocex(SMALLAMOUNT);                     |         cp3 = mallocex(SMALLAMOUNT);
                                                           | 
          strcpy(cp1, "foo"); strcpy(cp2, "bar");          |         strcpy(cp1, "foo"); strcpy(cp2, "bar");
      }                                                    |     }
      clean {                                              |     clean {
   /*04*/ printf("cp3=%s", cp3 == NULL /*02*/ ? "" : cp3); |  /*04*/ printf("cp3=%s", cp3 == NULL /*02*/ ? "" : cp3);
          if (cp3 != NULL) free(cp3);                      |         if (cp3 != NULL) free(cp3);
          if (cp2 != NULL) free(cp2);                      |         if (cp2 != NULL) free(cp2);
          /*05 cp1 was given away */                       |         if (cp1 != NULL) free(cp1);
      }                                                    |     }
      catch(ex) {                                          |     catch(ex) {
          /*05 global context untouched */                 |         globalcontext->first = NULL;
           rethrow;   }                                    |         rethrow;
      }                                                    |     }
  }                                                        | }
  

From ossp-cvs-owner@ossp.org  Thu Feb 14 17:10:00 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1E63976503; Thu, 14 Feb 2002 17:10:00 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/SHARE ossp_icon.wml
Message-Id: <20020214161000.1E63976503@mail.ossp.org>
Date: Thu, 14 Feb 2002 17:10:00 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   14-Feb-2002 17:10:00
  Branch: HEAD                             Handle: 2002021416095900

  Modified files:
    ossp-web/SHARE          ossp_icon.wml

  Log:
    fix favicon

  Summary:
    Revision    Changes     Path
    1.2         +2  -2      ossp-web/SHARE/ossp_icon.wml
  ____________________________________________________________________________

  Index: ossp-web/SHARE/ossp_icon.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 ossp_icon.wml
  --- ossp-web/SHARE/ossp_icon.wml	14 Feb 2002 11:06:47 -0000	1.1
  +++ ossp-web/SHARE/ossp_icon.wml	14 Feb 2002 16:09:59 -0000	1.2
  @@ -4,7 +4,7 @@
   ##
   
   <head>
  -<link rel="ICON" href="$(IMG)/ossp_icon.ico">
  -<link rel="SHORTCUT ICON" href="$(IMG)/ossp_icon.ico">
  +<link rel="ICON" href="$(IMG)/ossp-icon.ico">
  +<link rel="SHORTCUT ICON" href="$(IMG)/ossp-icon.ico">
   </head>
   

From ossp-cvs-owner@ossp.org  Thu Feb 14 17:10:09 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 28C6876526; Thu, 14 Feb 2002 17:10:09 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/SHARE ossp.wml ossp_pbar.wml ossp-web/pkg common....
Message-Id: <20020214161009.28C6876526@mail.ossp.org>
Date: Thu, 14 Feb 2002 17:10:09 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   14-Feb-2002 17:10:09
  Branch: HEAD                             Handle: 2002021416100701

  Added files:
    ossp-web/SHARE          ossp_pbar.wml
    ossp-web/pkg            common.wml
  Modified files:
    ossp-web/SHARE          ossp.wml
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/lmtp2nntp
                            index.wml

  Log:
    add process bar support

  Summary:
    Revision    Changes     Path
    1.3         +1  -0      ossp-web/SHARE/ossp.wml
    1.1         +29 -0      ossp-web/SHARE/ossp_pbar.wml
    1.1         +49 -0      ossp-web/pkg/common.wml
    1.3         +39 -28     ossp-web/pkg/tool/index.wml
    1.2         +5  -1      ossp-web/pkg/tool/lmtp2nntp/index.wml
  ____________________________________________________________________________

  Index: ossp-web/SHARE/ossp.wml
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 ossp.wml
  --- ossp-web/SHARE/ossp.wml	14 Feb 2002 11:06:47 -0000	1.2
  +++ ossp-web/SHARE/ossp.wml	14 Feb 2002 16:10:07 -0000	1.3
  @@ -21,4 +21,5 @@
   #use "ossp_info.wml"
   #use "ossp_newsflash.wml"
   #use "ossp_filelist.wml"
  +#use "ossp_pbar.wml"
   
  Index: ossp-web/SHARE/ossp_pbar.wml
  ============================================================
  $ cvs update -p -r1.1 ossp_pbar.wml
  ##
  ##  ossp_pbar.wml -- Process Bar
  ##  Copyright (c) 2000-2001 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  <define-tag pbar>
    <preserve width pdone cdone ctext ctodo/>
    <set-var %attributes/>
      <set-var ptodo=<substract 100 <get-var pdone/>/>/>
      <set-var wdone=<divide <multiply <get-var width/> <get-var pdone/>/> 100/>/>
      <set-var wtodo=<divide <multiply <get-var width/> <get-var ptodo/>/> 100/>/>
      <table cellspacing=0 cellpadding=0 border=0>
        <tr>
          <ifeq <get-var wdone/> 0 "" <group
          <td width="<get-var wdone/>" bgcolor="<get-var cdone/>" align=right>
            <imgdot width=<get-var wdone>><br>
            <font color="<get-var ctext/>" face="arial,helvetica"><b>
              <get-var pdone/>%
            </b></font>
          </td>/>/>
          <ifeq <get-var wtodo/> 0 "" <group
          <td width="<get-var wtodo/>" bgcolor="<get-var ctodo/>">
            <imgdot width=<get-var wtodo>>
          </td>/>/>
        </tr>
      </table>
    <restore width pdone cdone ctext ctodo/>
  </define-tag>
  
  Index: ossp-web/pkg/common.wml
  ============================================================
  $ cvs update -p -r1.1 common.wml
  
  <define-tag pkg_list endtag=required>
  <table width=100% cellspacing=1 cellpadding=0 border=0>
    %body
    <tr>
      <td colspan=3 height=1 bgcolor="#b5b5b0"><imgdot height=1></td>
    </tr>
  </table>
  </define-tag>
  
  <define-tag pkg_item>
  <preserve name>
  <preserve longname>
  <preserve desc>
  <preserve done>
  <preserve tag>
  <preserve stable>
  <preserve unstable>
  <set-var %attributes>
    <tr>
      <td colspan=3 height=1 bgcolor="#b5b5b0"><imgdot height=1></td>
    </tr>
    <tr>
      <td width=100%><a href="<get-var name>/"><b><get-var longname></b></a></td>
      <td>stable:   
        <ifeq "<get-var stable>" "none" "none"
          <a href="ftp://ftp.ossp.org/pkg/tool/<get-var name>/<get-var name>-<get-var stable>.tar.gz"><get-var stable></a>
        >
  	</td>
      <td>unstable: 
  	  <ifeq "<get-var unstable>" "none" "none"
  	    <a href="ftp://ftp.ossp.org/pkg/tool/<get-var name>/<get-var name>-<get-var unstable>.tar.gz"><get-var unstable></a>
  	  >
  	</td>
    </tr>
    <tr>
      <td><get-var desc></td>
      <td colspan=2>
        <pbar width=200 pdone="<get-var done>" cdone="#b5b5b0" ctext="#f5f5f0" ctodo="#996666">
  	</td>
    </tr>
  <restore name>
  <restore longname>
  <restore desc>
  <restore done>
  <restore stable>
  <restore unstable>
  </define-tag>
  
  Index: ossp-web/pkg/tool/index.wml
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 index.wml
  --- ossp-web/pkg/tool/index.wml	14 Feb 2002 10:00:57 -0000	1.2
  +++ ossp-web/pkg/tool/index.wml	14 Feb 2002 16:10:08 -0000	1.3
  @@ -1,5 +1,6 @@
   
   #use wml::ossp area=pkg:tool subarea=NONE
  +#include "../common.wml"
   
   <title>Packages: Tools</title>
   
  @@ -9,32 +10,42 @@
   fully separately. 
   
   <p>
  -The following packages exists in this cathegory:
  -
  -<ul>
  -  <li><a href="shtool/"><b>GNU shtool</b></a><br>
  -      Portable Shell Tool
  -  <li><a href="lmtp2nntp/"><b>OSSP lmtp2nntp</b></a><br>
  -      Real-Time Mail to News Gateway
  -  <li><a href="petidomo/"><b>OSSP petidomo</b></a><br>
  -      Mailing List Manager
  -  <li><a href="shiela/"><b>OSSP shiela</b></a><br>
  -      CVS Repository Access Control and Logging Facility
  -  <li><a href="xenia/"><b>OSSP xenia</b></a><br>
  -      CVS Repository Browsing Server
  -  <li><a href="rc/"><b>OSSP rc</b></a><br>
  -      Run-Command Facility
  -  <li><a href="dsotool/"><b>OSSP dsotool</b></a><br>
  -      Dynamic Shared Object (DSO) Facility
  -  <li><a href="devtool/"><b>OSSP devtool</b></a><br>
  -      Development Tool
  -  <li><a href="smake/"><b>OSSP smake</b></a><br>
  -      Skeletin Makefile Generator
  -  <li><a href="eo/"><b>OSSP eo</b></a><br>
  -      Embedded Object Tool
  -  <li><a href="sugar/"><b>OSSP sugar</b></a><br>
  -      Sugar Markup Language Processor
  -  <li><a href="iselect/"><b>OSSP iselect</b></a><br>
  -      Interactive Terminal Selection
  -</ul>
  +<pkg_list>
  +  <pkg_item name="shtool" longname="GNU shtool"
  +            desc="Portable Shell Tool"
  +		    done=100 stable="1.6.0" unstable=none>
  +  <pkg_item name="lmtp2nntp" longname="OSSP lmtp2nntp"
  +            desc="Real-Time Mail to News Gateway"
  +            done=100 stable="1.1.1" unstable=1.2a1>
  +  <pkg_item name="petidomo" longname="OSSP petidomo"
  +            desc="Mailing List Manager"
  +	        done=95 stable="none" unstable="1.4a1">
  +  <pkg_item name="shiela" longname="OSSP shiela"
  +            desc="CVS Access Control and Logging"
  +	        done=95 stable="none" unstable="none">
  +  <pkg_item name="xenia" longname="OSSP xenia"
  +            desc="CVS Repository Browsing"
  +	        done=20 stable="none" unstable="none">
  +  <pkg_item name="rc" longname="OSSP rc"
  +            desc="Run-Command Facility"
  +            done=20 stable="none" unstable="none">
  +  <pkg_item name="dsotool" longname="OSSP dsotool"
  +            desc="Dynamic Shared Object (DSO)"
  +	        done=20 stable="none" unstable="none">
  +  <pkg_item name="devtool" longname="OSSP devtool"
  +            desc="Development Tool"
  +            done=20 stable="none" unstable="none">
  +  <pkg_item name="smake" longname="OSSP smake"
  +            desc="Skeletin Makefile Generator"
  +	        done=90 stable="none" unstable="none">
  +  <pkg_item name="eo" longname="OSSP eo"
  +            desc="Embedded Object Tool"
  +	        done=50 stable="none" unstable="none">
  +  <pkg_item name="sugar" longname="OSSP sugar"
  +            desc="Sugar Markup Language Processor"
  +	        done=20 stable="none" unstable="none">
  +  <pkg_item name="iselect" longname="OSSP iselect"
  +            desc="Interactive Terminal Selection"
  +	        done=100 stable="1.2.0" unstable="none">
  +</pkg_list>
   
  Index: ossp-web/pkg/tool/lmtp2nntp/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/tool/lmtp2nntp/index.wml	13 Feb 2002 16:35:08 -0000	1.1
  +++ ossp-web/pkg/tool/lmtp2nntp/index.wml	14 Feb 2002 16:10:08 -0000	1.2
  @@ -27,7 +27,7 @@
   Thomas Lotterer &lt;<a href="mailto:thomas.lotterer@cw.com">thomas.lotterer@cw.com</a>&gt;<br>
   Ralf S. Engelschall &lt;<a href="mailto:rse@engelschall.com">rse@engelschall.com</a>&gt;<br>
   
  -<h2>Latest Version</h2>
  +<h2>Status</h2>
   
   <table cellspacing=0 cellpadding=0>
     <tr>
  @@ -35,6 +35,10 @@
     </tr>
     <tr>
       <td>Unstable Version:</td><td>&nbsp;1.2a2&nbsp;</td><td>(xx-Feb-2002)</td>
  +  </tr>
  +  <tr>
  +    <td>Done:</td><td colspan=2>&nbsp;<pbar width=200 pdone="90" cdone="#b5b5b0" ctext="#f5f5f0" ctodo="#996666">
  +    </td>
     </tr>
   </table>
   

From ossp-cvs-owner@ossp.org  Thu Feb 14 17:11:30 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1FFDC76503; Thu, 14 Feb 2002 17:11:30 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg .wmkrc
Message-Id: <20020214161130.1FFDC76503@mail.ossp.org>
Date: Thu, 14 Feb 2002 17:11:30 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   14-Feb-2002 17:11:30
  Branch: HEAD                             Handle: 2002021416112900

  Added files:
    ossp-web/pkg            .wmkrc

  Log:
    do not convert common.wml

  Summary:
    Revision    Changes     Path
    1.1         +1  -0      ossp-web/pkg/.wmkrc
  ____________________________________________________________________________

  Index: ossp-web/pkg/.wmkrc
  ============================================================
  $ cvs update -p -r1.1 .wmkrc
  -F common.wml

From ossp-cvs-owner@ossp.org  Thu Feb 14 17:18:26 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8783876503; Thu, 14 Feb 2002 17:18:26 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib index.wml
Message-Id: <20020214161826.8783876503@mail.ossp.org>
Date: Thu, 14 Feb 2002 17:18:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   14-Feb-2002 17:18:26
  Branch: HEAD                             Handle: 2002021416182600

  Modified files:
    ossp-web/pkg/lib        index.wml

  Log:
    change to new layout, too.

  Summary:
    Revision    Changes     Path
    1.3         +46 -30     ossp-web/pkg/lib/index.wml
  ____________________________________________________________________________

  Index: ossp-web/pkg/lib/index.wml
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 index.wml
  --- ossp-web/pkg/lib/index.wml	14 Feb 2002 10:00:56 -0000	1.2
  +++ ossp-web/pkg/lib/index.wml	14 Feb 2002 16:18:26 -0000	1.3
  @@ -1,5 +1,6 @@
   
   #use wml::ossp area=pkg:lib subarea=NONE
  +#include "../common.wml"
   
   <title>Packages: Libraries</title>
   
  @@ -9,34 +10,49 @@
   development effort is put, because they are the base of the whole OSSP
   platform.
   
  -<ul>
  -  <li><a href="pth/"><b>GNU pth</b></a><br>
  -      Portable Threads
  -  <li><a href="str/"><b>OSSP str</b></a><br>
  -      String Manipulations
  -  <li><a href="sa/"><b>OSSP sa</b></a><br>
  -      Socket Abstraction
  -  <li><a href="ex/"><b>OSSP ex</b></a><br>
  -      Exception Handling
  -  <li><a href="l2/"><b>OSSP l2</b></a><br>
  -      Flexible Logging
  -  <li><a href="var/"><b>OSSP var</b></a><br>
  -      Variable Expansion
  -  <li><a href="val/"><b>OSSP val</b></a><br>
  -      Value Access
  -  <li><a href="act"/><b>OSSP act</b></a><br>
  -      Abstract Container Types
  -  <li><a href="cache"/><b>OSSP cache</b></a><br>
  -      User-Space Cache
  -  <li><a href="mm"/><b>OSSP mm</b></a><br>
  -      Shared Memory Allocation
  -  <li><a href="xds/"><b>OSSP xds</b></a><br>
  -      Extensible Data Serialization
  -  <li><a href="path"/><b>OSSP path</b></a><br>
  -      Filesystem Path Manipulations
  -  <li><a href="pcre"/><b>OSSP pcre</b></a><br>
  -      Perl Compatible Regular Expressions (derived)
  -  <li><a href="popt"/><b>OSSP popt</b></a><br>
  -      Option Parsing (derived)
  -</ul>
  +<p>
  +<pkg_list>
  +  <pkg_item name="pth" longname="GNU pth"
  +            desc="Portable Threads"
  +			done=100 stable=1.4.1 unstable=none>
  +  <pkg_item name="str" longname="OSSP str"
  +            desc="String Manipulations"
  +			done=80 stable=none unstable=0.9.6>
  +  <pkg_item name="sa" longname="OSSP sa"
  +            desc="Socket Abstraction"
  +			done=95 stable=none unstable=0.9.0>
  +  <pkg_item name="ex" longname="OSSP ex"
  +            desc="Exception Handling"
  +			done=95 stable=none unstable=0.9.0>
  +  <pkg_item name="l2" longname="OSSP l2"
  +            desc="Flexible Logging"
  +			done=80 stable=none unstable=none>
  +  <pkg_item name="var" longname="OSSP var"
  +            desc="Variable Expansion"
  +			done=95 stable=none unstable=none>
  +  <pkg_item name="val" longname="OSSP val"
  +            desc="Value Access"
  +			done=95 stable=none unstable=none>
  +  <pkg_item name="act" longname="OSSP act"
  +            desc="Abstract Container Types"
  +			done=15 stable=none unstable=none>
  +  <pkg_item name="cache" longname="OSSP cache"
  +            desc="User-Space Cache"
  +			done=15 stable=none unstable=none>
  +  <pkg_item name="mm" longname="OSSP mm"
  +            desc="Shared Memory Allocation"
  +			done=100 stable=1.1.3 unstable=none>
  +  <pkg_item name="xds" longname="OSSP xds"
  +            desc="Extensible Data Serialization"
  +			done=95 stable=none unstable=none>
  +  <pkg_item name="path" longname="OSSP path"
  +            desc="Filesystem Path Manipulations"
  +			done=70 stable=none unstable=none>
  +  <pkg_item name="pcre" longname="OSSP pcre"
  +            desc="Perl Compatible Regular Expressions"
  +			done=100 stable=none unstable=none>
  +  <pkg_item name="popt" longname="OSSP popt"
  +            desc="Option Parsing"
  +			done=95 stable=none unstable=none>
  +</pkg_list>
   

From ossp-cvs-owner@ossp.org  Thu Feb 14 17:26:16 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2DFE176503; Thu, 14 Feb 2002 17:26:16 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/SHARE ossp_navbar.wml ossp-web/pkg/lib index.wml
Message-Id: <20020214162616.2DFE176503@mail.ossp.org>
Date: Thu, 14 Feb 2002 17:26:16 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   14-Feb-2002 17:26:16
  Branch: HEAD                             Handle: 2002021416261500

  Modified files:
    ossp-web/SHARE          ossp_navbar.wml
    ossp-web/pkg/lib        index.wml

  Log:
    add missing libraries

  Summary:
    Revision    Changes     Path
    1.3         +8  -0      ossp-web/SHARE/ossp_navbar.wml
    1.4         +24 -0      ossp-web/pkg/lib/index.wml
  ____________________________________________________________________________

  Index: ossp-web/SHARE/ossp_navbar.wml
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 ossp_navbar.wml
  --- ossp-web/SHARE/ossp_navbar.wml	14 Feb 2002 11:06:47 -0000	1.2
  +++ ossp-web/SHARE/ossp_navbar.wml	14 Feb 2002 16:26:15 -0000	1.3
  @@ -259,8 +259,16 @@
     <navbar:button txt="OSSP mm"          url=pkg/lib/mm/              id=pkg:lib:mm>
     <navbar:button txt="OSSP xds"         url=pkg/lib/xds/             id=pkg:lib:xds>
     <navbar:button txt="OSSP path"        url=pkg/lib/path/            id=pkg:lib:path>
  +  <navbar:button txt="OSSP proc"        url=pkg/lib/proc/            id=pkg:lib:proc>
     <navbar:button txt="OSSP pcre"        url=pkg/lib/pcre/            id=pkg:lib:pcre>
  +  <navbar:button txt="OSSP pcbe"        url=pkg/lib/pcbe/            id=pkg:lib:pcbe>
     <navbar:button txt="OSSP popt"        url=pkg/lib/popt/            id=pkg:lib:popt>
  +  <navbar:button txt="OSSP sio"         url=pkg/lib/sio/             id=pkg:lib:sio>
  +  <navbar:button txt="OSSP res"         url=pkg/lib/res/             id=pkg:lib:res>
  +  <navbar:button txt="OSSP hook"        url=pkg/lib/hook/            id=pkg:lib:hook>
  +  <navbar:button txt="OSSP cfg"         url=pkg/lib/cfg/             id=pkg:lib:cfg>
  +  <navbar:button txt="OSSP adns"        url=pkg/lib/adns/            id=pkg:lib:adns>
  +  <navbar:button txt="OSSP mux"         url=pkg/lib/mux/             id=pkg:lib:mux>
   </nb:stage3>
   
   #   render the navigation bar
  Index: ossp-web/pkg/lib/index.wml
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 index.wml
  --- ossp-web/pkg/lib/index.wml	14 Feb 2002 16:18:26 -0000	1.3
  +++ ossp-web/pkg/lib/index.wml	14 Feb 2002 16:26:15 -0000	1.4
  @@ -48,11 +48,35 @@
     <pkg_item name="path" longname="OSSP path"
               desc="Filesystem Path Manipulations"
   			done=70 stable=none unstable=none>
  +  <pkg_item name="proc" longname="OSSP proc"
  +            desc="Process Management"
  +			done=30 stable=none unstable=none>
     <pkg_item name="pcre" longname="OSSP pcre"
               desc="Perl Compatible Regular Expressions"
   			done=100 stable=none unstable=none>
  +  <pkg_item name="pcbe" longname="OSSP pcbe"
  +            desc="Perl Style Boolean Expressions"
  +			done=15 stable=none unstable=none>
     <pkg_item name="popt" longname="OSSP popt"
               desc="Option Parsing"
   			done=95 stable=none unstable=none>
  +  <pkg_item name="sio" longname="OSSP sio"
  +            desc="Stream I/O"
  +			done=15 stable=none unstable=none>
  +  <pkg_item name="res" longname="OSSP res"
  +            desc="Resource Pools"
  +			done=15 stable=none unstable=none>
  +  <pkg_item name="hook" longname="OSSP hook"
  +            desc="API Hooks"
  +			done=50 stable=none unstable=none>
  +  <pkg_item name="cfg" longname="OSSP cfg"
  +            desc="Configuration Parsing"
  +			done=15 stable=none unstable=none>
  +  <pkg_item name="adns" longname="OSSP adns"
  +            desc="Asynchronous DNS Resolving"
  +			done=100 stable=none unstable=none>
  +  <pkg_item name="mux" longname="OSSP mux"
  +            desc="Multiplexing Protocol"
  +			done=15 stable=none unstable=none>
   </pkg_list>
   

From ossp-cvs-owner@ossp.org  Thu Feb 14 17:32:26 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5FCEE76503; Thu, 14 Feb 2002 17:32:26 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg common.wml ossp-web/pkg/lib index.wml
Message-Id: <20020214163226.5FCEE76503@mail.ossp.org>
Date: Thu, 14 Feb 2002 17:32:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   14-Feb-2002 17:32:26
  Branch: HEAD                             Handle: 2002021416322500

  Modified files:
    ossp-web/pkg            common.wml
    ossp-web/pkg/lib        index.wml

  Log:
    mark derived libraries

  Summary:
    Revision    Changes     Path
    1.2         +11 -1      ossp-web/pkg/common.wml
    1.5         +3  -3      ossp-web/pkg/lib/index.wml
  ____________________________________________________________________________

  Index: ossp-web/pkg/common.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 common.wml
  --- ossp-web/pkg/common.wml	14 Feb 2002 16:10:07 -0000	1.1
  +++ ossp-web/pkg/common.wml	14 Feb 2002 16:32:25 -0000	1.2
  @@ -5,6 +5,11 @@
     <tr>
       <td colspan=3 height=1 bgcolor="#b5b5b0"><imgdot height=1></td>
     </tr>
  +  <tr>
  +    <td colspan=3>
  +	   <b>*</b> derived from external sources
  +	</td>
  +  </tr>
   </table>
   </define-tag>
   
  @@ -16,12 +21,16 @@
   <preserve tag>
   <preserve stable>
   <preserve unstable>
  +<preserve derived>
   <set-var %attributes>
     <tr>
       <td colspan=3 height=1 bgcolor="#b5b5b0"><imgdot height=1></td>
     </tr>
     <tr>
  -    <td width=100%><a href="<get-var name>/"><b><get-var longname></b></a></td>
  +    <td width=100%>
  +	    <a href="<get-var name>/"><b><get-var longname></b></a>
  +		<ifeq "<get-var derived>" "yes" "&nbsp;<b>*</b>">
  +	</td>
       <td>stable:   
         <ifeq "<get-var stable>" "none" "none"
           <a href="ftp://ftp.ossp.org/pkg/tool/<get-var name>/<get-var name>-<get-var stable>.tar.gz"><get-var stable></a>
  @@ -45,5 +54,6 @@
   <restore done>
   <restore stable>
   <restore unstable>
  +<restore derived>
   </define-tag>
   
  Index: ossp-web/pkg/lib/index.wml
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 index.wml
  --- ossp-web/pkg/lib/index.wml	14 Feb 2002 16:26:15 -0000	1.4
  +++ ossp-web/pkg/lib/index.wml	14 Feb 2002 16:32:25 -0000	1.5
  @@ -51,13 +51,13 @@
     <pkg_item name="proc" longname="OSSP proc"
               desc="Process Management"
   			done=30 stable=none unstable=none>
  -  <pkg_item name="pcre" longname="OSSP pcre"
  +  <pkg_item name="pcre" longname="OSSP pcre" derived=yes
               desc="Perl Compatible Regular Expressions"
   			done=100 stable=none unstable=none>
     <pkg_item name="pcbe" longname="OSSP pcbe"
               desc="Perl Style Boolean Expressions"
   			done=15 stable=none unstable=none>
  -  <pkg_item name="popt" longname="OSSP popt"
  +  <pkg_item name="popt" longname="OSSP popt" derived=yes
               desc="Option Parsing"
   			done=95 stable=none unstable=none>
     <pkg_item name="sio" longname="OSSP sio"
  @@ -72,7 +72,7 @@
     <pkg_item name="cfg" longname="OSSP cfg"
               desc="Configuration Parsing"
   			done=15 stable=none unstable=none>
  -  <pkg_item name="adns" longname="OSSP adns"
  +  <pkg_item name="adns" longname="OSSP adns" derived=yes
               desc="Asynchronous DNS Resolving"
   			done=100 stable=none unstable=none>
     <pkg_item name="mux" longname="OSSP mux"

From ossp-cvs-owner@ossp.org  Thu Feb 14 17:33:01 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8BE0376503; Thu, 14 Feb 2002 17:33:01 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/tool index.wml
Message-Id: <20020214163301.8BE0376503@mail.ossp.org>
Date: Thu, 14 Feb 2002 17:33:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   14-Feb-2002 17:33:01
  Branch: HEAD                             Handle: 2002021416330100

  Modified files:
    ossp-web/pkg/tool       index.wml

  Log:
    petidomo is derived, too.

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-web/pkg/tool/index.wml
  ____________________________________________________________________________

  Index: ossp-web/pkg/tool/index.wml
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 index.wml
  --- ossp-web/pkg/tool/index.wml	14 Feb 2002 16:10:08 -0000	1.3
  +++ ossp-web/pkg/tool/index.wml	14 Feb 2002 16:33:01 -0000	1.4
  @@ -17,7 +17,7 @@
     <pkg_item name="lmtp2nntp" longname="OSSP lmtp2nntp"
               desc="Real-Time Mail to News Gateway"
               done=100 stable="1.1.1" unstable=1.2a1>
  -  <pkg_item name="petidomo" longname="OSSP petidomo"
  +  <pkg_item name="petidomo" longname="OSSP petidomo" derived=yes
               desc="Mailing List Manager"
   	        done=95 stable="none" unstable="1.4a1">
     <pkg_item name="shiela" longname="OSSP shiela"

From ossp-cvs-owner@ossp.org  Thu Feb 14 17:48:12 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 76FA976503; Thu, 14 Feb 2002 17:48:12 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/SHARE ossp_filelist.wml
Message-Id: <20020214164812.76FA976503@mail.ossp.org>
Date: Thu, 14 Feb 2002 17:48:12 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   14-Feb-2002 17:48:12
  Branch: HEAD                             Handle: 2002021416481200

  Modified files:
    ossp-web/SHARE          ossp_filelist.wml

  Log:
    new layout for filelist

  Summary:
    Revision    Changes     Path
    1.2         +18 -6      ossp-web/SHARE/ossp_filelist.wml
  ____________________________________________________________________________

  Index: ossp-web/SHARE/ossp_filelist.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 ossp_filelist.wml
  --- ossp-web/SHARE/ossp_filelist.wml	13 Feb 2002 16:34:56 -0000	1.1
  +++ ossp-web/SHARE/ossp_filelist.wml	14 Feb 2002 16:48:12 -0000	1.2
  @@ -11,9 +11,11 @@
   <preserve directory>
   <preserve files>
   <set-var %attributes>
  -<pre>
  -   Bytes      Timestamp       Filename
  -________ ____________________ ____________________________
  +<table width=100% cellspacing=1 cellpadding=0 border=0>
  +<tr>
  +  <td>File</td>
  +  <td align=right>Bytes</td><td align=right>Timestamp</td>
  +</tr>
   <:
   my $url       = "<get-var url>";
   $url =~ s|/+$||sg;
  @@ -24,6 +26,11 @@
   my @F = reverse sort { (stat($a))[9] <=> (stat($b))[9]; } (glob($files));
   chdir($odir);
   my $O = '';
  +@COL = (
  +	'#e5e5e0',
  +	'NONE',
  +);
  +$ncol = 1;
   foreach my $f (@F) {
       my @S = stat($f);
       $f = "$f/" if (-d $f);
  @@ -31,13 +38,18 @@
       my @moy = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
                  'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
       $f = "<a href=\"".$url."/".$f."\">$f</a>";
  -    my $e = sprintf("%"."8d %"."s %"."2d %"."02d:%"."02d:%"."02d %"."d %"."s",
  -                    $S[7], $moy[$T[4]], $T[3], $T[2], $T[1], $T[0], 1900+$T[5], $f);
  +	$ncol = ($ncol + 1) % 2;
  +	$col  = $COL[$ncol];
  +    my $e = ($col eq "NONE" ? "<tr>" : "<tr bgcolor=\"$col\">").
  +	          "<td width=100%>".$f."&nbsp;&nbsp;</td>" .
  +		      "<td align=right>&nbsp;&nbsp;".$S[7]."</td>" .
  +	          "<td align=right>&nbsp;&nbsp;".sprintf("%"."02d-%"."s-%"."04d", $T[3], $moy[$T[4]], 1900+$T[5]) . "</td>".
  +			"</tr>";
       $O .= $e . "\n";
   }
   print $O;
   :>
  -</pre>
  +</table>
   <restore url>
   <restore directory>
   <restore files>

From ossp-cvs-owner@ossp.org  Thu Feb 14 18:02:52 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B809276503; Thu, 14 Feb 2002 18:02:51 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/SHARE ossp.wml ossp_filelist.wml ossp_pbar.wml os...
Message-Id: <20020214170251.B809276503@mail.ossp.org>
Date: Thu, 14 Feb 2002 18:02:51 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   14-Feb-2002 18:02:51
  Branch: HEAD                             Handle: 197001010100001013702571

  Added files:
    ossp-web/SHARE          ossp_pkg.wml
  Modified files:
    ossp-web/SHARE          ossp.wml
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/lmtp2nntp
                            index.wml
  Removed files:
    ossp-web/SHARE          ossp_filelist.wml ossp_pbar.wml
    ossp-web/pkg            common.wml

  Log:
    use new pkg_status

  Summary:
    Revision    Changes     Path
    1.4         +1  -2      ossp-web/SHARE/ossp.wml
    NONE        +0  -57     ossp-web/SHARE/ossp_filelist.wml
    NONE        +0  -29     ossp-web/SHARE/ossp_pbar.wml
    1.1         +166 -0     ossp-web/SHARE/ossp_pkg.wml
    NONE        +0  -59     ossp-web/pkg/common.wml
    1.6         +0  -1      ossp-web/pkg/lib/index.wml
    1.5         +0  -1      ossp-web/pkg/tool/index.wml
    1.3         +5  -13     ossp-web/pkg/tool/lmtp2nntp/index.wml
  ____________________________________________________________________________

  Index: ossp-web/SHARE/ossp.wml
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 ossp.wml
  --- ossp-web/SHARE/ossp.wml	14 Feb 2002 16:10:07 -0000	1.3
  +++ ossp-web/SHARE/ossp.wml	14 Feb 2002 17:02:49 -0000	1.4
  @@ -20,6 +20,5 @@
   #use "ossp_navbar.wml" 
   #use "ossp_info.wml"
   #use "ossp_newsflash.wml"
  -#use "ossp_filelist.wml"
  -#use "ossp_pbar.wml"
  +#use "ossp_pkg.wml"
   
      Index: ossp-web/SHARE/ossp_pkg.wml
  ============================================================
  $ cvs update -p -r1.1 ossp_pkg.wml
  ##
  ##  ossp_pkg.wml -- Package Macros
  ##  Copyright (c) 2000-2001 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  #   define a process bar
  <define-tag pbar>
    <preserve width pdone cdone ctext ctodo/>
    <set-var %attributes/>
      <set-var ptodo=<substract 100 <get-var pdone/>/>/>
      <set-var wdone=<divide <multiply <get-var width/> <get-var pdone/>/> 100/>/>
      <set-var wtodo=<divide <multiply <get-var width/> <get-var ptodo/>/> 100/>/>
      <table cellspacing=0 cellpadding=0 border=0>
        <tr>
          <ifeq <get-var wdone/> 0 "" <group
          <td width="<get-var wdone/>" bgcolor="<get-var cdone/>" align=right>
            <imgdot width=<get-var wdone>><br>
            <font color="<get-var ctext/>" face="arial,helvetica"><b>
              <get-var pdone/>%
            </b></font>
          </td>/>/>
          <ifeq <get-var wtodo/> 0 "" <group
          <td width="<get-var wtodo/>" bgcolor="<get-var ctodo/>">
            <imgdot width=<get-var wtodo>>
          </td>/>/>
        </tr>
      </table>
    <restore width pdone cdone ctext ctodo/>
  </define-tag>
  
  
  #   define a <filelist> tag which can be used to create a file listing which
  #   is optically more compact than the stuff Apache's mod_autoindex creates.
  #   Especially the current version is marked red, too.
  <define-tag pkg_files>
  <preserve url>
  <preserve directory>
  <preserve files>
  <set-var %attributes>
  <table width=100% cellspacing=1 cellpadding=0 border=0>
  <tr>
    <td>File</td>
    <td align=right>Bytes</td><td align=right>Timestamp</td>
  </tr>
  <:
  my $url       = "<get-var url>";
  $url =~ s|/+$||sg;
  my $directory = "<get-var directory>";
  my $files     = "<get-var files>";
  my $highlight = "<get-var highlight>";
  my $odir = chdir($directory) || die;
  my @F = reverse sort { (stat($a))[9] <=> (stat($b))[9]; } (glob($files));
  chdir($odir);
  my $O = '';
  @COL = (
  	'#e5e5e0',
  	'NONE',
  );
  $ncol = 1;
  foreach my $f (@F) {
      my @S = stat($f);
      $f = "$f/" if (-d $f);
      my @T = localtime($S[9]);
      my @moy = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
                 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
      $f = "<a href=\"".$url."/".$f."\">$f</a>";
  	$ncol = ($ncol + 1) % 2;
  	$col  = $COL[$ncol];
      my $e = ($col eq "NONE" ? "<tr>" : "<tr bgcolor=\"$col\">").
  	          "<td width=100%>".$f."&nbsp;&nbsp;</td>" .
  		      "<td align=right>&nbsp;&nbsp;".$S[7]."</td>" .
  	          "<td align=right>&nbsp;&nbsp;".sprintf("%"."02d-%"."s-%"."04d", $T[3], $moy[$T[4]], 1900+$T[5]) . "</td>".
  			"</tr>";
      $O .= $e . "\n";
  }
  print $O;
  :>
  </table>
  <restore url>
  <restore directory>
  <restore files>
  </define-tag>
  
  #   define a package summary list
  <define-tag pkg_list endtag=required>
  <table width=100% cellspacing=1 cellpadding=0 border=0>
    %body
    <tr>
      <td colspan=3 height=1 bgcolor="#b5b5b0"><imgdot height=1></td>
    </tr>
    <tr>
      <td colspan=3>
  	   <b>*</b> derived from external sources
  	</td>
    </tr>
  </table>
  </define-tag>
  <define-tag pkg_item>
  <preserve name>
  <preserve longname>
  <preserve desc>
  <preserve done>
  <preserve tag>
  <preserve stable>
  <preserve unstable>
  <preserve derived>
  <set-var %attributes>
    <tr>
      <td colspan=3 height=1 bgcolor="#b5b5b0"><imgdot height=1></td>
    </tr>
    <tr>
      <td width=100%>
  	    <a href="<get-var name>/"><b><get-var longname></b></a>
  		<ifeq "<get-var derived>" "yes" "&nbsp;<b>*</b>">
  	</td>
      <td>stable:   
        <ifeq "<get-var stable>" "none" "none"
          <a href="ftp://ftp.ossp.org/pkg/tool/<get-var name>/<get-var name>-<get-var stable>.tar.gz"><get-var stable></a>
        >
  	</td>
      <td>unstable: 
  	  <ifeq "<get-var unstable>" "none" "none"
  	    <a href="ftp://ftp.ossp.org/pkg/tool/<get-var name>/<get-var name>-<get-var unstable>.tar.gz"><get-var unstable></a>
  	  >
  	</td>
    </tr>
    <tr>
      <td><get-var desc></td>
      <td colspan=2>
        <pbar width=200 pdone="<get-var done>" cdone="#b5b5b0" ctext="#f5f5f0" ctodo="#996666">
  	</td>
    </tr>
  <restore name>
  <restore longname>
  <restore desc>
  <restore done>
  <restore stable>
  <restore unstable>
  <restore derived>
  </define-tag>
  
  <define-tag pkg_status>
  <preserve stable>
  <preserve unstable>
  <preserve stable_date>
  <preserve unstable_date>
  <preserve done>
  <set-var %attributes>
  <table cellspacing=0 cellpadding=0 border=0> 
    <tr>
      <td>Stable Version:</td><td><get-var stable></td><td>&nbsp;(<get-var stable_date>)</td>
    </tr>
    <tr>
      <td>Unstable Version:&nbsp;&nbsp;</td><td><get-var unstable></td><td>&nbsp;(<get-var unstable_date>)</td>
    </tr>
    <tr>
      <td>Done:</td><td colspan=2><pbar width=100 pdone="<get-var done>" cdone="#b5b5b0" ctext="#f5f5f0" ctodo="#996666"></td>
    </tr>
  </table>
  <restore stable>
  <restore unstable>
  <restore stable_date>
  <restore unstable_date>
  <restore done>
  </define-tag>
  
    Index: ossp-web/pkg/lib/index.wml
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 index.wml
  --- ossp-web/pkg/lib/index.wml	14 Feb 2002 16:32:25 -0000	1.5
  +++ ossp-web/pkg/lib/index.wml	14 Feb 2002 17:02:50 -0000	1.6
  @@ -1,6 +1,5 @@
   
   #use wml::ossp area=pkg:lib subarea=NONE
  -#include "../common.wml"
   
   <title>Packages: Libraries</title>
   
  Index: ossp-web/pkg/tool/index.wml
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 index.wml
  --- ossp-web/pkg/tool/index.wml	14 Feb 2002 16:33:01 -0000	1.4
  +++ ossp-web/pkg/tool/index.wml	14 Feb 2002 17:02:50 -0000	1.5
  @@ -1,6 +1,5 @@
   
   #use wml::ossp area=pkg:tool subarea=NONE
  -#include "../common.wml"
   
   <title>Packages: Tools</title>
   
  Index: ossp-web/pkg/tool/lmtp2nntp/index.wml
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 index.wml
  --- ossp-web/pkg/tool/lmtp2nntp/index.wml	14 Feb 2002 16:10:08 -0000	1.2
  +++ ossp-web/pkg/tool/lmtp2nntp/index.wml	14 Feb 2002 17:02:51 -0000	1.3
  @@ -29,22 +29,14 @@
   
   <h2>Status</h2>
   
  -<table cellspacing=0 cellpadding=0>
  -  <tr>
  -    <td>Stable Version:  </td><td>&nbsp;1.1.1&nbsp;</td><td>(31-Dec-2001)</td>
  -  </tr>
  -  <tr>
  -    <td>Unstable Version:</td><td>&nbsp;1.2a2&nbsp;</td><td>(xx-Feb-2002)</td>
  -  </tr>
  -  <tr>
  -    <td>Done:</td><td colspan=2>&nbsp;<pbar width=200 pdone="90" cdone="#b5b5b0" ctext="#f5f5f0" ctodo="#996666">
  -    </td>
  -  </tr>
  -</table>
  +<pkg_status
  +    stable="1.1.1"   stable_date="13-Dec-2001"
  +    unstable="1.2a2" unstable_date="13-Dec-2001"
  +	done=90>
   
   <h2>Source</h2>
   
  -<filelist 
  +<pkg_files 
       url=$(FTP_ROOT_URL)/pkg/lmtp2nntp/
       directory=$(FTP_ROOT_DIR)/pkg/lmtp2nntp/
       files="lmtp2nntp-*.tar.gz">

From ossp-cvs-owner@ossp.org  Thu Feb 14 18:18:09 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5455A76503; Thu, 14 Feb 2002 18:18:09 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/tool/lmtp2nntp index.wml
Message-Id: <20020214171809.5455A76503@mail.ossp.org>
Date: Thu, 14 Feb 2002 18:18:09 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   14-Feb-2002 18:18:09
  Branch: HEAD                             Handle: 2002021417180800

  Modified files:
    ossp-web/pkg/tool/lmtp2nntp
                            index.wml

  Log:
    fix path

  Summary:
    Revision    Changes     Path
    1.4         +2  -2      ossp-web/pkg/tool/lmtp2nntp/index.wml
  ____________________________________________________________________________

  Index: ossp-web/pkg/tool/lmtp2nntp/index.wml
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 index.wml
  --- ossp-web/pkg/tool/lmtp2nntp/index.wml	14 Feb 2002 17:02:51 -0000	1.3
  +++ ossp-web/pkg/tool/lmtp2nntp/index.wml	14 Feb 2002 17:18:08 -0000	1.4
  @@ -37,7 +37,7 @@
   <h2>Source</h2>
   
   <pkg_files 
  -    url=$(FTP_ROOT_URL)/pkg/lmtp2nntp/
  -    directory=$(FTP_ROOT_DIR)/pkg/lmtp2nntp/
  +    url=$(FTP_ROOT_URL)/pkg/tool/lmtp2nntp/
  +    directory=$(FTP_ROOT_DIR)/pkg/tool/lmtp2nntp/
       files="lmtp2nntp-*.tar.gz">
   

From ossp-cvs-owner@ossp.org  Thu Feb 14 18:18:16 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E5DE776526; Thu, 14 Feb 2002 18:18:15 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/tool/shtool .cvsignore index.wml
Message-Id: <20020214171815.E5DE776526@mail.ossp.org>
Date: Thu, 14 Feb 2002 18:18:15 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   14-Feb-2002 18:18:15
  Branch: HEAD                             Handle: 2002021417181500

  Added files:
    ossp-web/pkg/tool/shtool .cvsignore index.wml

  Log:
    add shtool page

  Summary:
    Revision    Changes     Path
    1.1         +1  -0      ossp-web/pkg/tool/shtool/.cvsignore
    1.1         +44 -0      ossp-web/pkg/tool/shtool/index.wml
  ____________________________________________________________________________

  Index: ossp-web/pkg/tool/shtool/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/tool/shtool/index.wml
  ============================================================
  $ cvs update -p -r1.1 index.wml
  
  #use wml::ossp area=pkg:tool subarea=shtool
  
  <title>GNU shtool</title>
  
  <h1>Portable Shell Tool</h1>
  
  <h2>Abstract</h2>
  
  The GNU shtool program is a compilation of small but very stable and portable
  shell scripts into a single shell tool. All ingredients were in successful use
  over many years in various free software projects. The compiled shtool program
  is intended to be used inside the source tree of free software packages. There
  it can take over various (usually non-portable) tasks related to the building
  and installation of such packages.
  
  <p>
  Notice: <a href="http://www.gnu.org/software/shtool/">GNU shtool</a> and
  OSSP shtool are exactly the same. OSSP shtool just is a companion tool
  to <a href="http://www.gnu.org/software/autoconf/">GNU autoconf</a>,
  <a href="http://www.gnu.org/software/libtool/">GNU libtool</a> and <a
  href="http://www.gnu.org/software/automake/">GNU automake</a> and so it
  officially become a GNU project in year 2000. That's why its primary
  name is now GNU shtool, although it is still developed by the OSSP
  project only.
  
  <h2>Authors</h2>
  
  Ralf S. Engelschall &lt;<a href="mailto:rse@engelschall.com">rse@engelschall.com</a>&gt;<br>
  
  <h2>Status</h2>
  
  <pkg_status
      stable="1.6.0"   stable_date="31-Jan-2002"
      unstable="none"  unstable_date="none"
  	done=100>
  
  <h2>Source</h2>
  
  <pkg_files 
      url=$(FTP_ROOT_URL)/pkg/tool/shtool/
      directory=$(FTP_ROOT_DIR)/pkg/tool/shtool/
      files="shtool-*.tar.gz">
  

From ossp-cvs-owner@ossp.org  Thu Feb 14 18:21:00 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0E7FD76503; Thu, 14 Feb 2002 18:21:00 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/tool/shtool index.wml
Message-Id: <20020214172100.0E7FD76503@mail.ossp.org>
Date: Thu, 14 Feb 2002 18:21:00 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   14-Feb-2002 18:20:59
  Branch: HEAD                             Handle: 2002021417205900

  Modified files:
    ossp-web/pkg/tool/shtool index.wml

  Log:
    add location information

  Summary:
    Revision    Changes     Path
    1.2         +7  -0      ossp-web/pkg/tool/shtool/index.wml
  ____________________________________________________________________________

  Index: ossp-web/pkg/tool/shtool/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/tool/shtool/index.wml	14 Feb 2002 17:18:15 -0000	1.1
  +++ ossp-web/pkg/tool/shtool/index.wml	14 Feb 2002 17:20:59 -0000	1.2
  @@ -42,3 +42,10 @@
       directory=$(FTP_ROOT_DIR)/pkg/tool/shtool/
       files="shtool-*.tar.gz">
   
  +<h2>Locations</h2>
  +
  +<a href="http://www.ossp.org/pkg/tool/shtool/">http://www.ossp.org/pkg/tool/shtool/</a><br>
  +<a href="ftp://ftp.ossp.org/pkg/tool/shtool/">ftp://ftp.ossp.org/pkg/tool/shtool/</a><br>
  +<a href="http://www.gnu.org/software/shtool/">http://www.gnu.org/software/shtool/</a><br>
  +<a href="ftp://ftp.gnu.org/gnu/shtool/">ftp://ftp.gnu.org/gnu/shtool/</a><br>
  +

From ossp-cvs-owner@ossp.org  Thu Feb 14 21:16:37 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3D74976503; Thu, 14 Feb 2002 21:16:37 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/SHARE ossp_css.wml ossp_pkg.wml ossp-web/pkg/tool...
Message-Id: <20020214201637.3D74976503@mail.ossp.org>
Date: Thu, 14 Feb 2002 21:16:37 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   14-Feb-2002 21:16:37
  Branch: HEAD                             Handle: 2002021420163600

  Modified files:
    ossp-web/SHARE          ossp_css.wml ossp_pkg.wml
    ossp-web/pkg/tool/shtool index.wml

  Log:
    more optical polishing

  Summary:
    Revision    Changes     Path
    1.4         +4  -0      ossp-web/SHARE/ossp_css.wml
    1.2         +71 -31     ossp-web/SHARE/ossp_pkg.wml
    1.3         +16 -18     ossp-web/pkg/tool/shtool/index.wml
  ____________________________________________________________________________

  Index: ossp-web/SHARE/ossp_css.wml
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 ossp_css.wml
  --- ossp-web/SHARE/ossp_css.wml	14 Feb 2002 11:04:43 -0000	1.3
  +++ ossp-web/SHARE/ossp_css.wml	14 Feb 2002 20:16:36 -0000	1.4
  @@ -51,6 +51,10 @@
   A:link               { color: <lhr>; }
   A:visited            { color: <lhr>; }
   A:hover              { text-decoration: underline; }
  +A.plain              { text-decoration: none; font-weight: normal; }
  +A:link.plain         { color: <lfg>; }
  +A:visited.plain      { color: <lfg>; }
  +A:hover.plain        { text-decoration: underline; }
   .light               { background: <lbg>; color: <lfg>; }
   .light A:link        { color: <lhr>; }
   .light A:visited     { color: <lhr>; }
  Index: ossp-web/SHARE/ossp_pkg.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 ossp_pkg.wml
  --- ossp-web/SHARE/ossp_pkg.wml	14 Feb 2002 17:02:49 -0000	1.1
  +++ ossp-web/SHARE/ossp_pkg.wml	14 Feb 2002 20:16:36 -0000	1.2
  @@ -28,48 +28,73 @@
     <restore width pdone cdone ctext ctodo/>
   </define-tag>
   
  -
  -#   define a <filelist> tag which can be used to create a file listing which
  -#   is optically more compact than the stuff Apache's mod_autoindex creates.
  -#   Especially the current version is marked red, too.
  +#   define a macro which can be used to create a file listing which
  +#   is optically more compact than the stuff Apache's mod_autoindex
  +#   creates.
  +..PAGE_CSS>>
  +TR.files0N                            { background: #f5f5f0; }
  +TR.files1N                            { background: #e5e5e0; }
  +.files0N,.files1N,A.files0N,A.files1N { color: #000000; }
  +TR.files0S,TR.files1S                 { background: #993333; }
  +.files0S,.files1S,A.files0S,A.files1S { color: #ffffff; }
  +TR.files0U,TR.files1U                 { background: #666699; }
  +.files0U,.files1U,A.files0U,A.files1U { color: #ffffff; }
  +<<..
   <define-tag pkg_files>
   <preserve url>
   <preserve directory>
   <preserve files>
  +<preserve stable>
  +<preserve unstable>
   <set-var %attributes>
  -<table width=100% cellspacing=1 cellpadding=0 border=0>
  -<tr>
  -  <td>File</td>
  -  <td align=right>Bytes</td><td align=right>Timestamp</td>
  -</tr>
   <:
   my $url       = "<get-var url>";
  -$url =~ s|/+$||sg;
   my $directory = "<get-var directory>";
   my $files     = "<get-var files>";
  -my $highlight = "<get-var highlight>";
  +my $stable    = "<get-var stable>";
  +my $unstable  = "<get-var unstable>";
  +$url =~ s|/+$||s;
  +:>
  +<table width=100% cellspacing=1 cellpadding=0 border=0>
  +<tr>
  +  <td colspan=3>
  +    <b>Location:</b> <a href="<get-var url>" class=plain><get-var url></a>
  +  </td>
  +</tr>
  +<tr>
  +  <td><b>File:</b></td>
  +  <td align=right><b>Size:</b></td>
  +  <td align=right><b>Time:</b></td>
  +</tr>
  +<:
   my $odir = chdir($directory) || die;
   my @F = reverse sort { (stat($a))[9] <=> (stat($b))[9]; } (glob($files));
   chdir($odir);
   my $O = '';
  -@COL = (
  -	'#e5e5e0',
  -	'NONE',
  -);
  -$ncol = 1;
  +$ncol = 0;
   foreach my $f (@F) {
       my @S = stat($f);
  +	my $size = $S[7];
  +	if ($size > (1024*1024)) {
  +		$size = sprintf("%.1fMB", $size / (1024*1024));
  +	}
  +	elsif ($size > (1024)) {
  +		$size = sprintf("%.1fKB", $size / (1024));
  +	}
       $f = "$f/" if (-d $f);
       my @T = localtime($S[9]);
       my @moy = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
                  'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
  -    $f = "<a href=\"".$url."/".$f."\">$f</a>";
   	$ncol = ($ncol + 1) % 2;
  -	$col  = $COL[$ncol];
  -    my $e = ($col eq "NONE" ? "<tr>" : "<tr bgcolor=\"$col\">").
  -	          "<td width=100%>".$f."&nbsp;&nbsp;</td>" .
  -		      "<td align=right>&nbsp;&nbsp;".$S[7]."</td>" .
  -	          "<td align=right>&nbsp;&nbsp;".sprintf("%"."02d-%"."s-%"."04d", $T[3], $moy[$T[4]], 1900+$T[5]) . "</td>".
  +	my $type = "N";
  +	$type = "S" if ($f eq $stable);
  +	$type = "U" if ($f eq $unstable);
  +    my $class = "files${ncol}${type}";
  +    $f = "<a href=\"".$url."/".$f."\" class=$class>$f</a>";
  +    my $e = "<tr class=$class>" .
  +	        "  <td width=100%>".$f."&nbsp;&nbsp;</td>" .
  +		    "  <td align=right>&nbsp;&nbsp;".$size."</td>" .
  +	        "  <td align=right>&nbsp;&nbsp;".sprintf("%"."02d-%"."s-%"."04d", $T[3], $moy[$T[4]], 1900+$T[5]) . "</td>".
   			"</tr>";
       $O .= $e . "\n";
   }
  @@ -79,6 +104,8 @@
   <restore url>
   <restore directory>
   <restore files>
  +<restore stable>
  +<restore unstable>
   </define-tag>
   
   #   define a package summary list
  @@ -113,12 +140,12 @@
   	    <a href="<get-var name>/"><b><get-var longname></b></a>
   		<ifeq "<get-var derived>" "yes" "&nbsp;<b>*</b>">
   	</td>
  -    <td>stable:   
  +    <td>Stable:   
         <ifeq "<get-var stable>" "none" "none"
           <a href="ftp://ftp.ossp.org/pkg/tool/<get-var name>/<get-var name>-<get-var stable>.tar.gz"><get-var stable></a>
         >
   	</td>
  -    <td>unstable: 
  +    <td>Unstable: 
   	  <ifeq "<get-var unstable>" "none" "none"
   	    <a href="ftp://ftp.ossp.org/pkg/tool/<get-var name>/<get-var name>-<get-var unstable>.tar.gz"><get-var unstable></a>
   	  >
  @@ -148,19 +175,32 @@
   <set-var %attributes>
   <table cellspacing=0 cellpadding=0 border=0> 
     <tr>
  -    <td>Stable Version:</td><td><get-var stable></td><td>&nbsp;(<get-var stable_date>)</td>
  -  </tr>
  -  <tr>
  -    <td>Unstable Version:&nbsp;&nbsp;</td><td><get-var unstable></td><td>&nbsp;(<get-var unstable_date>)</td>
  -  </tr>
  -  <tr>
  -    <td>Done:</td><td colspan=2><pbar width=100 pdone="<get-var done>" cdone="#b5b5b0" ctext="#f5f5f0" ctodo="#996666"></td>
  +    <td>Stable Version:&nbsp;&nbsp;</td><td class=heavy><get-var stable></td><td>&nbsp;(<get-var stable_date>)</td>
     </tr>
  +  <ifeq "<get-var unstable>" "none" "" <group
  +    <tr>
  +      <td>Unstable Version:&nbsp;&nbsp;</td><td class=heavy><get-var unstable></td><td>&nbsp;(<get-var unstable_date>)</td>
  +    </tr>
  +  >>
  +  <ifeq "<get-var done>" "100" "" <group
  +    <tr>
  +      <td>Done:</td><td colspan=2><pbar width=100 pdone="<get-var done>" cdone="#b5b5b0" ctext="#f5f5f0" ctodo="#996666"></td>
  +    </tr>
  +  >>
   </table>
   <restore stable>
   <restore unstable>
   <restore stable_date>
   <restore unstable_date>
   <restore done>
  +</define-tag>
  +
  +<define-tag pkg_author>
  +<preserve name>
  +<preserve mail>
  +<set-var %attributes>
  +  <get-var name> &lt;<a href="mailto:<get-var mail>"><get-var mail></a>&gt;<br>
  +<restore name>
  +<restore mail>
   </define-tag>
   
  Index: ossp-web/pkg/tool/shtool/index.wml
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 index.wml
  --- ossp-web/pkg/tool/shtool/index.wml	14 Feb 2002 17:20:59 -0000	1.2
  +++ ossp-web/pkg/tool/shtool/index.wml	14 Feb 2002 20:16:36 -0000	1.3
  @@ -15,18 +15,22 @@
   and installation of such packages.
   
   <p>
  -Notice: <a href="http://www.gnu.org/software/shtool/">GNU shtool</a> and
  -OSSP shtool are exactly the same. OSSP shtool just is a companion tool
  -to <a href="http://www.gnu.org/software/autoconf/">GNU autoconf</a>,
  -<a href="http://www.gnu.org/software/libtool/">GNU libtool</a> and <a
  -href="http://www.gnu.org/software/automake/">GNU automake</a> and so it
  -officially become a GNU project in year 2000. That's why its primary
  -name is now GNU shtool, although it is still developed by the OSSP
  -project only.
  +Notice: <a href="http://www.gnu.org/software/shtool/">GNU
  +shtool</a> and OSSP shtool are exactly the same. OSSP
  +shtool just considered as a companion tool to <a
  +href="http://www.gnu.org/software/autoconf/">GNU autoconf</a>, <a
  +href="http://www.gnu.org/software/libtool/">GNU libtool</a> and <a
  +href="http://www.gnu.org/software/automake/">GNU automake</a> and
  +so also became an official part of the GNU project. That's why its
  +primary name is now GNU shtool, although it is still developed by
  +the OSSP project only. The official companion GNU locations are: <a
  +href="http://www.gnu.org/software/shtool/">http://www.gnu.org/software/s
  +htool/</a> and <a
  +href="ftp://ftp.gnu.org/gnu/shtool/">ftp://ftp.gnu.org/gnu/shtool/</a>.
   
   <h2>Authors</h2>
   
  -Ralf S. Engelschall &lt;<a href="mailto:rse@engelschall.com">rse@engelschall.com</a>&gt;<br>
  +<pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
   
   <h2>Status</h2>
   
  @@ -40,12 +44,6 @@
   <pkg_files 
       url=$(FTP_ROOT_URL)/pkg/tool/shtool/
       directory=$(FTP_ROOT_DIR)/pkg/tool/shtool/
  -    files="shtool-*.tar.gz">
  -
  -<h2>Locations</h2>
  -
  -<a href="http://www.ossp.org/pkg/tool/shtool/">http://www.ossp.org/pkg/tool/shtool/</a><br>
  -<a href="ftp://ftp.ossp.org/pkg/tool/shtool/">ftp://ftp.ossp.org/pkg/tool/shtool/</a><br>
  -<a href="http://www.gnu.org/software/shtool/">http://www.gnu.org/software/shtool/</a><br>
  -<a href="ftp://ftp.gnu.org/gnu/shtool/">ftp://ftp.gnu.org/gnu/shtool/</a><br>
  -
  +    files="shtool-*.tar.gz" 
  +	stable="shtool-1.6.0.tar.gz" unstable="none">
  +	

From ossp-cvs-owner@ossp.org  Thu Feb 14 21:19:45 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2B39676503; Thu, 14 Feb 2002 21:19:45 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/tool index.wml ossp-web/pkg/tool/lmtp2nntp in...
Message-Id: <20020214201945.2B39676503@mail.ossp.org>
Date: Thu, 14 Feb 2002 21:19:45 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   14-Feb-2002 21:19:45
  Branch: HEAD                             Handle: 2002021420194400

  Modified files:
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/lmtp2nntp
                            index.wml

  Log:
    finalize lmtp2nntp page

  Summary:
    Revision    Changes     Path
    1.6         +1  -1      ossp-web/pkg/tool/index.wml
    1.5         +5  -5      ossp-web/pkg/tool/lmtp2nntp/index.wml
  ____________________________________________________________________________

  Index: ossp-web/pkg/tool/index.wml
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 index.wml
  --- ossp-web/pkg/tool/index.wml	14 Feb 2002 17:02:50 -0000	1.5
  +++ ossp-web/pkg/tool/index.wml	14 Feb 2002 20:19:44 -0000	1.6
  @@ -15,7 +15,7 @@
   		    done=100 stable="1.6.0" unstable=none>
     <pkg_item name="lmtp2nntp" longname="OSSP lmtp2nntp"
               desc="Real-Time Mail to News Gateway"
  -            done=100 stable="1.1.1" unstable=1.2a1>
  +            done=100 stable="1.1.1" unstable=none>
     <pkg_item name="petidomo" longname="OSSP petidomo" derived=yes
               desc="Mailing List Manager"
   	        done=95 stable="none" unstable="1.4a1">
  Index: ossp-web/pkg/tool/lmtp2nntp/index.wml
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 index.wml
  --- ossp-web/pkg/tool/lmtp2nntp/index.wml	14 Feb 2002 17:18:08 -0000	1.4
  +++ ossp-web/pkg/tool/lmtp2nntp/index.wml	14 Feb 2002 20:19:44 -0000	1.5
  @@ -24,20 +24,20 @@
   
   <h2>Authors</h2>
   
  -Thomas Lotterer &lt;<a href="mailto:thomas.lotterer@cw.com">thomas.lotterer@cw.com</a>&gt;<br>
  -Ralf S. Engelschall &lt;<a href="mailto:rse@engelschall.com">rse@engelschall.com</a>&gt;<br>
  +<pkg_author name="Thomas Lotterer" mail="thomas.lotterer@cw.com">
  +<pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
   
   <h2>Status</h2>
   
   <pkg_status
       stable="1.1.1"   stable_date="13-Dec-2001"
  -    unstable="1.2a2" unstable_date="13-Dec-2001"
  -	done=90>
  +    unstable="none" unstable_date="none"
  +	done=100>
   
   <h2>Source</h2>
   
   <pkg_files 
       url=$(FTP_ROOT_URL)/pkg/tool/lmtp2nntp/
       directory=$(FTP_ROOT_DIR)/pkg/tool/lmtp2nntp/
  -    files="lmtp2nntp-*.tar.gz">
  +    files="lmtp2nntp-*.tar.gz" stable="lmtp2nntp-1.1.1.tar.gz">
   

From ossp-cvs-owner@ossp.org  Thu Feb 14 21:32:14 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 08D8E76503; Thu, 14 Feb 2002 21:32:14 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/tool index.wml ossp-web/pkg/tool/petidomo .cv...
Message-Id: <20020214203214.08D8E76503@mail.ossp.org>
Date: Thu, 14 Feb 2002 21:32:14 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   14-Feb-2002 21:32:13
  Branch: HEAD                             Handle: 2002021420321300

  Added files:
    ossp-web/pkg/tool/petidomo
                            .cvsignore index.wml
  Modified files:
    ossp-web/pkg/tool       index.wml

  Log:
    add page for petidomo

  Summary:
    Revision    Changes     Path
    1.7         +1  -1      ossp-web/pkg/tool/index.wml
    1.1         +1  -0      ossp-web/pkg/tool/petidomo/.cvsignore
    1.1         +41 -0      ossp-web/pkg/tool/petidomo/index.wml
  ____________________________________________________________________________

  Index: ossp-web/pkg/tool/index.wml
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 index.wml
  --- ossp-web/pkg/tool/index.wml	14 Feb 2002 20:19:44 -0000	1.6
  +++ ossp-web/pkg/tool/index.wml	14 Feb 2002 20:32:13 -0000	1.7
  @@ -18,7 +18,7 @@
               done=100 stable="1.1.1" unstable=none>
     <pkg_item name="petidomo" longname="OSSP petidomo" derived=yes
               desc="Mailing List Manager"
  -	        done=95 stable="none" unstable="1.4a1">
  +	        done=95 stable="none" unstable="4.0b1">
     <pkg_item name="shiela" longname="OSSP shiela"
               desc="CVS Access Control and Logging"
   	        done=95 stable="none" unstable="none">
  Index: ossp-web/pkg/tool/petidomo/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/tool/petidomo/index.wml
  ============================================================
  $ cvs update -p -r1.1 index.wml
  
  #use wml::ossp area=pkg:tool subarea=petidomo
  
  <title>OSSP petidomo</title>
  
  <h1>Mailing List Manager</h1>
  
  <h2>Abstract</h2>
  
  OSSP petidomo is a small and fast mailing list manager
  for use with a Mail Transfer Agent (MTA) like <a
  href="http://www.sendmail.org/">Sendmail</a> or <a
  href="http://www.postfix.org/">Postfix</a>. It is a robot which provides
  unattended mailing list subscription maintainance. For this, users
  send subscribe/unsubscribe commands via Email to the OSSP petidomo
  robot which in turn maintains the subscriber list for the MTA. For each
  posting to the mailing list, OSSP petidomo first applies UCE filters and
  then reinjects the mail into the MTA for delivery to all subscribers.
  What distinguishes OSSP petidomo from other mailing list managers is his
  UCE filtering technique based on requiring an authentication reply from
  unknown senders.
  
  <h2>Authors</h2>
  
  <pkg_author name="Peter Simons" mail="simons@computer.org">
  
  <h2>Status</h2>
  
  <pkg_status
      stable="none"    stable_date="none"
      unstable="4.0b1" unstable_date="none"
  	done=95>
  
  <h2>Source</h2>
  
  <pkg_files 
      url=$(FTP_ROOT_URL)/pkg/tool/petidomo/
      directory=$(FTP_ROOT_DIR)/pkg/tool/petidomo/
      files="petidomo-*.tar.gz" 
  	stable="none" unstable="petidomo-4.0b1.tar.gz">
  	

From ossp-cvs-owner@ossp.org  Thu Feb 14 21:37:34 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A1A6676503; Thu, 14 Feb 2002 21:37:34 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/tool/shiela .cvsignore index.wml
Message-Id: <20020214203734.A1A6676503@mail.ossp.org>
Date: Thu, 14 Feb 2002 21:37:34 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   14-Feb-2002 21:37:34
  Branch: HEAD                             Handle: 2002021420373400

  Added files:
    ossp-web/pkg/tool/shiela .cvsignore index.wml

  Log:
    add page for shiela

  Summary:
    Revision    Changes     Path
    1.1         +1  -0      ossp-web/pkg/tool/shiela/.cvsignore
    1.1         +38 -0      ossp-web/pkg/tool/shiela/index.wml
  ____________________________________________________________________________

  Index: ossp-web/pkg/tool/shiela/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/tool/shiela/index.wml
  ============================================================
  $ cvs update -p -r1.1 index.wml
  
  #use wml::ossp area=pkg:tool subarea=shiela
  
  <title>OSSP shiela</title>
  
  <h1>CVS Access Control and Logging</h1>
  
  <h2>Abstract</h2>
  
  OSSP shiela is an access control and logging facility for use with
  the <a href="http://www.cvshome.org/">Concurrent Versions System</a>
  (CVS). It is intended to be hooked into CVS's processing through the
  <tt>$CVSROOT/CVSROOT/xxxinfo</tt> callbacks. This way OSSP shiela
  provides access control on a path and branch basis to particular
  repository users and user groups. Additionally, repository operations
  are monitored, accumulated and logged. The lookout of logging messages
  can be configured individually on a module path and branch basis and
  messages can be both saved to files and/or delivered by Email.
  
  <h2>Authors</h2>
  
  <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  
  <h2>Status</h2>
  
  <pkg_status
      stable="none"    stable_date="none"
      unstable="0.9.1" unstable_date="10-Feb-2001"
  	done=95>
  
  <h2>Source</h2>
  
  <pkg_files 
      url=$(FTP_ROOT_URL)/pkg/tool/shiela/
      directory=$(FTP_ROOT_DIR)/pkg/tool/shiela/
      files="shiela-*.tar.gz" 
  	stable="none" unstable="shiela-0.9.1.tar.gz">
  	

From ossp-cvs-owner@ossp.org  Fri Feb 15 10:29:09 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AEE39764F3; Fri, 15 Feb 2002 10:29:08 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/tool index.wml ossp-web/pkg/tool/xenia .cvsig...
Message-Id: <20020215092908.AEE39764F3@mail.ossp.org>
Date: Fri, 15 Feb 2002 10:29:08 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   15-Feb-2002 10:29:08
  Branch: HEAD                             Handle: 2002021509290701

  Added files:
    ossp-web/pkg/tool/xenia .cvsignore index.wml
  Modified files:
    ossp-web/pkg/tool       index.wml

  Log:
    add xenia page

  Summary:
    Revision    Changes     Path
    1.8         +1  -1      ossp-web/pkg/tool/index.wml
    1.1         +1  -0      ossp-web/pkg/tool/xenia/.cvsignore
    1.1         +36 -0      ossp-web/pkg/tool/xenia/index.wml
  ____________________________________________________________________________

  Index: ossp-web/pkg/tool/index.wml
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 index.wml
  --- ossp-web/pkg/tool/index.wml	14 Feb 2002 20:32:13 -0000	1.7
  +++ ossp-web/pkg/tool/index.wml	15 Feb 2002 09:29:07 -0000	1.8
  @@ -23,7 +23,7 @@
               desc="CVS Access Control and Logging"
   	        done=95 stable="none" unstable="none">
     <pkg_item name="xenia" longname="OSSP xenia"
  -            desc="CVS Repository Browsing"
  +            desc="CVS Browsing Server"
   	        done=20 stable="none" unstable="none">
     <pkg_item name="rc" longname="OSSP rc"
               desc="Run-Command Facility"
  Index: ossp-web/pkg/tool/xenia/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/tool/xenia/index.wml
  ============================================================
  $ cvs update -p -r1.1 index.wml
  
  #use wml::ossp area=pkg:tool subarea=xenia
  
  <title>OSSP xenia</title>
  
  <h1>CVS Browsing Server</h1>
  
  <h2>Abstract</h2>
  
  OSSP xenia is a standalone HTTP server for browsing
  <a href="http://www.cvshome.org/">Concurrent Versions
  System</a> (CVS) repositories. It is intended to replace <a
  href="http://www.idaemons.org/~knu/cvsweb/">CVSweb</a> and <a
  href="http://viewcvs.sourceforge.net/">ViewCVS</a> for sites where
  less features are acceptable but where greater speed and less resource
  consumption is a must.
  
  <h2>Authors</h2>
  
  <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  
  <h2>Status</h2>
  
  <pkg_status
      stable="none"    stable_date="none"
      unstable="none"  unstable_date="none"
  	done=20>
  
  <h2>Source</h2>
  
  <pkg_files 
      url=$(FTP_ROOT_URL)/pkg/tool/xenia/
      directory=$(FTP_ROOT_DIR)/pkg/tool/xenia/
      files="xenia-*.tar.gz" 
  	stable="none" unstable="none">
  	

From ossp-cvs-owner@ossp.org  Fri Feb 15 11:20:59 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4C8F4764F3; Fri, 15 Feb 2002 11:20:59 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/tool/devtool .cvsignore index.wml ossp-web/pk...
Message-Id: <20020215102059.4C8F4764F3@mail.ossp.org>
Date: Fri, 15 Feb 2002 11:20:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   15-Feb-2002 11:20:59
  Branch: HEAD                             Handle: 2002021510205404

  Added files:
    ossp-web/pkg/tool/devtool .cvsignore index.wml
    ossp-web/pkg/tool/dsotool .cvsignore index.wml
    ossp-web/pkg/tool/eo    .cvsignore index.wml
    ossp-web/pkg/tool/iselect .cvsignore index.wml
    ossp-web/pkg/tool/rc    .cvsignore index.wml
    ossp-web/pkg/tool/smake .cvsignore index.wml
    ossp-web/pkg/tool/sugar .cvsignore index.wml
  Modified files:
    ossp-web/pkg/tool       index.wml

  Log:
    finish the tool section

  Summary:
    Revision    Changes     Path
    1.1         +1  -0      ossp-web/pkg/tool/devtool/.cvsignore
    1.1         +35 -0      ossp-web/pkg/tool/devtool/index.wml
    1.1         +1  -0      ossp-web/pkg/tool/dsotool/.cvsignore
    1.1         +34 -0      ossp-web/pkg/tool/dsotool/index.wml
    1.1         +1  -0      ossp-web/pkg/tool/eo/.cvsignore
    1.1         +35 -0      ossp-web/pkg/tool/eo/index.wml
    1.9         +4  -4      ossp-web/pkg/tool/index.wml
    1.1         +1  -0      ossp-web/pkg/tool/iselect/.cvsignore
    1.1         +34 -0      ossp-web/pkg/tool/iselect/index.wml
    1.1         +1  -0      ossp-web/pkg/tool/rc/.cvsignore
    1.1         +34 -0      ossp-web/pkg/tool/rc/index.wml
    1.1         +1  -0      ossp-web/pkg/tool/smake/.cvsignore
    1.1         +40 -0      ossp-web/pkg/tool/smake/index.wml
    1.1         +1  -0      ossp-web/pkg/tool/sugar/.cvsignore
    1.1         +35 -0      ossp-web/pkg/tool/sugar/index.wml
  ____________________________________________________________________________

  Index: ossp-web/pkg/tool/devtool/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/tool/devtool/index.wml
  ============================================================
  $ cvs update -p -r1.1 index.wml
  
  #use wml::ossp area=pkg:tool subarea=devtool
  
  <title>OSSP devtool</title>
  
  <h1>Development Tool</h1>
  
  <h2>Abstract</h2>
  
  OSSP devtool is a small tool for managing source trees.  It is a wrapper
  around <a href="http://www.gnu.org/software/autoconf/">GNU autoconf</a>, <a
  href="http://www.gnu.org/software/libtool/">GNU libtool</a> and <a
  href="http://www.gnu.org/software/shtool/">GNU shtool</a>.  Its primary
  purpose is to reduce redundancy in source trees by generating standard
  components on-the-fly.
  
  <h2>Authors</h2>
  
  <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  
  <h2>Status</h2>
  
  <pkg_status
      stable="none"    stable_date="none"
      unstable="none"  unstable_date="none"
  	done=20>
  
  <h2>Source</h2>
  
  <pkg_files 
      url=$(FTP_ROOT_URL)/pkg/tool/devtool/
      directory=$(FTP_ROOT_DIR)/pkg/tool/devtool/
      files="devtool-*.tar.gz" 
  	stable="none" unstable="none">
  	
  Index: ossp-web/pkg/tool/dsotool/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/tool/dsotool/index.wml
  ============================================================
  $ cvs update -p -r1.1 index.wml
  
  #use wml::ossp area=pkg:tool subarea=dsotool
  
  <title>OSSP dsotool</title>
  
  <h1>Dynamic Shared Objects (DSO)</h1>
  
  <h2>Abstract</h2>
  
  OSSP dsotool is a library and companion tool for generating and
  loading Dynamic Shared Object (DSO) files. DSOs are like Dynamic
  Shared Libraries (DSL) with the exception that they are active
  components instead of passive ones. So OSSP dsotool is to DSOs what <a
  href="http://www.gnu.org/software/libtool/">GNU libtool</a> is to DSLs.
  
  <h2>Authors</h2>
  
  <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  
  <h2>Status</h2>
  
  <pkg_status
      stable="none"    stable_date="none"
      unstable="none"  unstable_date="none"
  	done=20>
  
  <h2>Source</h2>
  
  <pkg_files 
      url=$(FTP_ROOT_URL)/pkg/tool/dsotool/
      directory=$(FTP_ROOT_DIR)/pkg/tool/dsotool/
      files="dsotool-*.tar.gz" 
  	stable="none" unstable="none">
  	
  Index: ossp-web/pkg/tool/eo/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/tool/eo/index.wml
  ============================================================
  $ cvs update -p -r1.1 index.wml
  
  #use wml::ossp area=pkg:tool subarea=eo
  
  <title>OSSP eo</title>
  
  <h1>Embedded Objects</h1>
  
  <h2>Abstract</h2>
  
  OSSP eo is a tool for managing embedded objects in textual documents.
  An embedded object is an arbitrary external (binary) object which
  is embedded Base64 encoded and wrapped with headers providing meta
  information about the object. This allows one to embed figures and
  other non-textual objects into a text document which usually would stay
  separately and clutter the filesystem.
  
  <h2>Authors</h2>
  
  <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  
  <h2>Status</h2>
  
  <pkg_status
      stable="none"    stable_date="none"
      unstable="none"  unstable_date="none"
  	done=50>
  
  <h2>Source</h2>
  
  <pkg_files 
      url=$(FTP_ROOT_URL)/pkg/tool/eo/
      directory=$(FTP_ROOT_DIR)/pkg/tool/eo/
      files="eo-*.tar.gz" 
  	stable="none" unstable="none">
  	
  Index: ossp-web/pkg/tool/index.wml
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 index.wml
  --- ossp-web/pkg/tool/index.wml	15 Feb 2002 09:29:07 -0000	1.8
  +++ ossp-web/pkg/tool/index.wml	15 Feb 2002 10:20:54 -0000	1.9
  @@ -26,19 +26,19 @@
               desc="CVS Browsing Server"
   	        done=20 stable="none" unstable="none">
     <pkg_item name="rc" longname="OSSP rc"
  -            desc="Run-Command Facility"
  +            desc="Run-Command Processor"
               done=20 stable="none" unstable="none">
     <pkg_item name="dsotool" longname="OSSP dsotool"
  -            desc="Dynamic Shared Object (DSO)"
  +            desc="Dynamic Shared Objects (DSO)"
   	        done=20 stable="none" unstable="none">
     <pkg_item name="devtool" longname="OSSP devtool"
               desc="Development Tool"
               done=20 stable="none" unstable="none">
     <pkg_item name="smake" longname="OSSP smake"
  -            desc="Skeletin Makefile Generator"
  +            desc="Skeleton Makefile Generator"
   	        done=90 stable="none" unstable="none">
     <pkg_item name="eo" longname="OSSP eo"
  -            desc="Embedded Object Tool"
  +            desc="Embedded Objects"
   	        done=50 stable="none" unstable="none">
     <pkg_item name="sugar" longname="OSSP sugar"
               desc="Sugar Markup Language Processor"
  Index: ossp-web/pkg/tool/iselect/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/tool/iselect/index.wml
  ============================================================
  $ cvs update -p -r1.1 index.wml
  
  #use wml::ossp area=pkg:tool subarea=iselect
  
  <title>OSSP iselect</title>
  
  <h1>Interactive Terminal Selection</h1>
  
  <h2>Abstract</h2>
  
  OSSP iselect is an interactive line selection tool for textual files,
  operating via a full-screen Curses-based terminal session. It can be
  used either as an user interface frontend controlled by a scripting
  backend as its wrapper or in batch mode as a pipeline filter (usually
  between <tt>grep</tt> and the final executing command).
  
  <h2>Authors</h2>
  
  <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  
  <h2>Status</h2>
  
  <pkg_status
      stable="1.2.0"   stable_date="31-Mar-1999"
      unstable="none"  unstable_date="none"
  	done=100>
  
  <h2>Source</h2>
  
  <pkg_files 
      url=$(FTP_ROOT_URL)/pkg/tool/iselect/
      directory=$(FTP_ROOT_DIR)/pkg/tool/iselect/
      files="iselect-*.tar.gz" 
  	stable="iselect-1.2.0.tar.gz" unstable="none">
  	
  Index: ossp-web/pkg/tool/rc/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/tool/rc/index.wml
  ============================================================
  $ cvs update -p -r1.1 index.wml
  
  #use wml::ossp area=pkg:tool subarea=rc
  
  <title>OSSP rc</title>
  
  <h1>Run-Command Processor</h1>
  
  <h2>Abstract</h2>
  
  OSSP rc is a run-command processor. Its primary function is to scan
  run-command script files for run-command sections and run the commands
  listed in the sections. Its primary purpose is to be used as a generic
  run-command facility in an operating system or a sub-system like <a
  href="http://www.openpkg.org/">OpenPKG</a>.
  
  <h2>Authors</h2>
  
  <pkg_author name="Michael Schloh v. Bennewitz" mail="michael.schloh@cw.com">
  
  <h2>Status</h2>
  
  <pkg_status
      stable="none"    stable_date="none"
      unstable="none"  unstable_date="none"
  	done=20>
  
  <h2>Source</h2>
  
  <pkg_files 
      url=$(FTP_ROOT_URL)/pkg/tool/rc/
      directory=$(FTP_ROOT_DIR)/pkg/tool/rc/
      files="rc-*.tar.gz" 
  	stable="none" unstable="none">
  	
  Index: ossp-web/pkg/tool/smake/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/tool/smake/index.wml
  ============================================================
  $ cvs update -p -r1.1 index.wml
  
  #use wml::ossp area=pkg:tool subarea=smake
  
  <title>OSSP smake</title>
  
  <h1>Skeleton Makefile Generator</h1>
  
  <h2>Abstract</h2>
  
  OSSP smake is a powerful mechanism to generate standard Makefiles out
  of skeleton Makefiles which only provide the essential parts. The
  missing stuff gets automatically filled in by shared include files. A
  reasonable scheme to create a huge Makefile hierarchy and to keep it
  consistent for the time of development. The trick is that it merges
  the skeleton (<tt>Makefile.sm</tt>) and the templates (include files)
  in a priority-driven way, i.e. defines and targets can be overwritten.
  The idea is taken from <a href="http://www.x.org/">X Consortium</a>'s
  <tt>imake</tt>, but the goal here is not inherited system independence
  for the Makefiles, the goal is consistency and power without the need of
  manually maintaining a Makefile hierarchy consisting of plain Makefiles.
  
  <h2>Authors</h2>
  
  <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  
  <h2>Status</h2>
  
  <pkg_status
      stable="none"    stable_date="none"
      unstable="none"  unstable_date="none"
  	done=90>
  
  <h2>Source</h2>
  
  <pkg_files 
      url=$(FTP_ROOT_URL)/pkg/tool/smake/
      directory=$(FTP_ROOT_DIR)/pkg/tool/smake/
      files="smake-*.tar.gz" 
  	stable="smake-1.3.2.tar.gz" unstable="none">
  	
  Index: ossp-web/pkg/tool/sugar/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/tool/sugar/index.wml
  ============================================================
  $ cvs update -p -r1.1 index.wml
  
  #use wml::ossp area=pkg:tool subarea=sugar
  
  <title>OSSP sugar</title>
  
  <h1>Sugar Markup Language Processor</h1>
  
  <h2>Abstract</h2>
  
  OSSP sugar is markup language and companion processor tool providing
  the ability to use a markup with mostly invisible syntactic sugar for
  typesetting technical documentation. The idea is to allow engineers
  to write technical documentation by following the <i>brain dump</i>
  principle.
  
  <h2>Authors</h2>
  
  <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  <pkg_author name="Christian Reiber" mail="krischan@krischan.org">
  
  <h2>Status</h2>
  
  <pkg_status
      stable="none"    stable_date="none"
      unstable="none"  unstable_date="none"
  	done=20>
  
  <h2>Source</h2>
  
  <pkg_files 
      url=$(FTP_ROOT_URL)/pkg/tool/sugar/
      directory=$(FTP_ROOT_DIR)/pkg/tool/sugar/
      files="sugar-*.tar.gz" 
  	stable="none" unstable="none">
  	

From ossp-cvs-owner@ossp.org  Fri Feb 15 12:56:21 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 36B23764F3; Fri, 15 Feb 2002 12:56:21 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/SHARE ossp_css.wml
Message-Id: <20020215115621.36B23764F3@mail.ossp.org>
Date: Fri, 15 Feb 2002 12:56:21 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   15-Feb-2002 12:56:21
  Branch: HEAD                             Handle: 2002021511562000

  Modified files:
    ossp-web/SHARE          ossp_css.wml

  Log:
    use more spacing

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-web/SHARE/ossp_css.wml
  ____________________________________________________________________________

  Index: ossp-web/SHARE/ossp_css.wml
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 ossp_css.wml
  --- ossp-web/SHARE/ossp_css.wml	14 Feb 2002 20:16:36 -0000	1.4
  +++ ossp-web/SHARE/ossp_css.wml	15 Feb 2002 11:56:20 -0000	1.5
  @@ -35,7 +35,7 @@
   /* we use teletype font for code */
   H1,H2,H3,H4,H5,H6 { 
       font-family: tahoma,helvetica,lucida,arial,sans-serif; 
  -	margin-bottom: 2px;
  +	margin-bottom: 4px;
       color: #993333;
   }
   

From ossp-cvs-owner@ossp.org  Fri Feb 15 12:56:52 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E296276505; Fri, 15 Feb 2002 12:56:51 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/act .cvsignore index.wml ossp-web/pkg/lib...
Message-Id: <20020215115651.E296276505@mail.ossp.org>
Date: Fri, 15 Feb 2002 12:56:51 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   15-Feb-2002 12:56:51
  Branch: HEAD                             Handle: 2002021511564011

  Added files:
    ossp-web/pkg/lib/act    .cvsignore index.wml
    ossp-web/pkg/lib/adns   .cvsignore index.wml
    ossp-web/pkg/lib/cache  .cvsignore index.wml
    ossp-web/pkg/lib/cfg    .cvsignore index.wml
    ossp-web/pkg/lib/ex     .cvsignore index.wml
    ossp-web/pkg/lib/hook   .cvsignore index.wml
    ossp-web/pkg/lib/mm     .cvsignore index.wml
    ossp-web/pkg/lib/mux    .cvsignore index.wml
    ossp-web/pkg/lib/path   .cvsignore index.wml
    ossp-web/pkg/lib/pcbe   .cvsignore index.wml
    ossp-web/pkg/lib/pcre   .cvsignore index.wml
    ossp-web/pkg/lib/popt   .cvsignore index.wml
    ossp-web/pkg/lib/proc   .cvsignore index.wml
    ossp-web/pkg/lib/pth    .cvsignore index.wml
    ossp-web/pkg/lib/res    .cvsignore index.wml
    ossp-web/pkg/lib/sa     .cvsignore index.wml
    ossp-web/pkg/lib/sio    .cvsignore index.wml
    ossp-web/pkg/lib/str    .cvsignore index.wml
    ossp-web/pkg/lib/val    .cvsignore index.wml
    ossp-web/pkg/lib/var    .cvsignore index.wml
    ossp-web/pkg/lib/xds    .cvsignore index.wml

  Log:
    first cut for all library pages

  Summary:
    Revision    Changes     Path
    1.1         +1  -0      ossp-web/pkg/lib/act/.cvsignore
    1.1         +28 -0      ossp-web/pkg/lib/act/index.wml
    1.1         +1  -0      ossp-web/pkg/lib/adns/.cvsignore
    1.1         +28 -0      ossp-web/pkg/lib/adns/index.wml
    1.1         +1  -0      ossp-web/pkg/lib/cache/.cvsignore
    1.1         +28 -0      ossp-web/pkg/lib/cache/index.wml
    1.1         +1  -0      ossp-web/pkg/lib/cfg/.cvsignore
    1.1         +28 -0      ossp-web/pkg/lib/cfg/index.wml
    1.1         +1  -0      ossp-web/pkg/lib/ex/.cvsignore
    1.1         +41 -0      ossp-web/pkg/lib/ex/index.wml
    1.1         +1  -0      ossp-web/pkg/lib/hook/.cvsignore
    1.1         +28 -0      ossp-web/pkg/lib/hook/index.wml
    1.1         +1  -0      ossp-web/pkg/lib/mm/.cvsignore
    1.1         +28 -0      ossp-web/pkg/lib/mm/index.wml
    1.1         +1  -0      ossp-web/pkg/lib/mux/.cvsignore
    1.1         +28 -0      ossp-web/pkg/lib/mux/index.wml
    1.1         +1  -0      ossp-web/pkg/lib/path/.cvsignore
    1.1         +28 -0      ossp-web/pkg/lib/path/index.wml
    1.1         +1  -0      ossp-web/pkg/lib/pcbe/.cvsignore
    1.1         +28 -0      ossp-web/pkg/lib/pcbe/index.wml
    1.1         +1  -0      ossp-web/pkg/lib/pcre/.cvsignore
    1.1         +28 -0      ossp-web/pkg/lib/pcre/index.wml
    1.1         +1  -0      ossp-web/pkg/lib/popt/.cvsignore
    1.1         +28 -0      ossp-web/pkg/lib/popt/index.wml
    1.1         +1  -0      ossp-web/pkg/lib/proc/.cvsignore
    1.1         +28 -0      ossp-web/pkg/lib/proc/index.wml
    1.1         +1  -0      ossp-web/pkg/lib/pth/.cvsignore
    1.1         +58 -0      ossp-web/pkg/lib/pth/index.wml
    1.1         +1  -0      ossp-web/pkg/lib/res/.cvsignore
    1.1         +28 -0      ossp-web/pkg/lib/res/index.wml
    1.1         +1  -0      ossp-web/pkg/lib/sa/.cvsignore
    1.1         +34 -0      ossp-web/pkg/lib/sa/index.wml
    1.1         +1  -0      ossp-web/pkg/lib/sio/.cvsignore
    1.1         +28 -0      ossp-web/pkg/lib/sio/index.wml
    1.1         +1  -0      ossp-web/pkg/lib/str/.cvsignore
    1.1         +34 -0      ossp-web/pkg/lib/str/index.wml
    1.1         +1  -0      ossp-web/pkg/lib/val/.cvsignore
    1.1         +28 -0      ossp-web/pkg/lib/val/index.wml
    1.1         +1  -0      ossp-web/pkg/lib/var/.cvsignore
    1.1         +28 -0      ossp-web/pkg/lib/var/index.wml
    1.1         +1  -0      ossp-web/pkg/lib/xds/.cvsignore
    1.1         +28 -0      ossp-web/pkg/lib/xds/index.wml
  ____________________________________________________________________________

  Index: ossp-web/pkg/lib/act/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/lib/act/index.wml
  ============================================================
  $ cvs update -p -r1.1 index.wml
  
  #use wml::ossp area=pkg:lib subarea=act
  
  <title>OSSP act</title>
  
  <h1>...</h1>
  
  <h2>Abstract</h2>
  
  <h2>Authors</h2>
  
  <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  
  <h2>Status</h2>
  
  <pkg_status
      stable="none"    stable_date="none"
      unstable="none"  unstable_date="none"
  	done=100>
  
  <h2>Source</h2>
  
  <pkg_files 
      url=$(FTP_ROOT_URL)/pkg/lib/act/
      directory=$(FTP_ROOT_DIR)/pkg/lib/act/
      files="act-*.tar.gz" 
  	stable="none" unstable="none">
  	
  Index: ossp-web/pkg/lib/adns/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/lib/adns/index.wml
  ============================================================
  $ cvs update -p -r1.1 index.wml
  
  #use wml::ossp area=pkg:lib subarea=adns
  
  <title>OSSP adns</title>
  
  <h1>...</h1>
  
  <h2>Abstract</h2>
  
  <h2>Authors</h2>
  
  <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  
  <h2>Status</h2>
  
  <pkg_status
      stable="none"    stable_date="none"
      unstable="none"  unstable_date="none"
  	done=100>
  
  <h2>Source</h2>
  
  <pkg_files 
      url=$(FTP_ROOT_URL)/pkg/lib/adns/
      directory=$(FTP_ROOT_DIR)/pkg/lib/adns/
      files="adns-*.tar.gz" 
  	stable="none" unstable="none">
  	
  Index: ossp-web/pkg/lib/cache/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/lib/cache/index.wml
  ============================================================
  $ cvs update -p -r1.1 index.wml
  
  #use wml::ossp area=pkg:lib subarea=cache
  
  <title>OSSP cache</title>
  
  <h1>...</h1>
  
  <h2>Abstract</h2>
  
  <h2>Authors</h2>
  
  <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  
  <h2>Status</h2>
  
  <pkg_status
      stable="none"    stable_date="none"
      unstable="none"  unstable_date="none"
  	done=100>
  
  <h2>Source</h2>
  
  <pkg_files 
      url=$(FTP_ROOT_URL)/pkg/lib/cache/
      directory=$(FTP_ROOT_DIR)/pkg/lib/cache/
      files="cache-*.tar.gz" 
  	stable="none" unstable="none">
  	
  Index: ossp-web/pkg/lib/cfg/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/lib/cfg/index.wml
  ============================================================
  $ cvs update -p -r1.1 index.wml
  
  #use wml::ossp area=pkg:lib subarea=cfg
  
  <title>OSSP cfg</title>
  
  <h1>...</h1>
  
  <h2>Abstract</h2>
  
  <h2>Authors</h2>
  
  <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  
  <h2>Status</h2>
  
  <pkg_status
      stable="none"    stable_date="none"
      unstable="none"  unstable_date="none"
  	done=100>
  
  <h2>Source</h2>
  
  <pkg_files 
      url=$(FTP_ROOT_URL)/pkg/lib/cfg/
      directory=$(FTP_ROOT_DIR)/pkg/lib/cfg/
      files="cfg-*.tar.gz" 
  	stable="none" unstable="none">
  	
  Index: ossp-web/pkg/lib/ex/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/lib/ex/index.wml
  ============================================================
  $ cvs update -p -r1.1 index.wml
  
  #use wml::ossp area=pkg:lib subarea=ex
  
  <title>OSSP ex</title>
  
  <h1>Exception Handling</h1>
  
  <h2>Abstract</h2>
  
  OSSP ex is a small ISO-C++ style exception handling library for use in the
  ISO-C language. It allows you to use the paradigm of throwing and catching
  exceptions in order to reduce the amount of error handling code without making
  your program less robust.
  
  <p>
  This is achieved by directly transferring exceptional return codes (and the
  program control flow) from the location where the exception is raised (throw
  point) to the location where it is handled (catch point) -- usually from a
  deeply nested sub-routine to a parent routine. All intermediate routines no
  longer have to make sure that the exceptional return codes from sub-routines
  are correctly passed back to the parent.
  
  <h2>Authors</h2>
  
  <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  
  <h2>Status</h2>
  
  <pkg_status
      stable="none"    stable_date="none"
      unstable="0.9.0" unstable_date="31-Jan-2002"
  	done=95>
  
  <h2>Source</h2>
  
  <pkg_files 
      url=$(FTP_ROOT_URL)/pkg/lib/ex/
      directory=$(FTP_ROOT_DIR)/pkg/lib/ex/
      files="ex-*.tar.gz" 
  	stable="none" unstable="ex-0.9.0.tar.gz">
  	
  Index: ossp-web/pkg/lib/hook/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/lib/hook/index.wml
  ============================================================
  $ cvs update -p -r1.1 index.wml
  
  #use wml::ossp area=pkg:lib subarea=hook
  
  <title>OSSP hook</title>
  
  <h1>...</h1>
  
  <h2>Abstract</h2>
  
  <h2>Authors</h2>
  
  <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  
  <h2>Status</h2>
  
  <pkg_status
      stable="none"    stable_date="none"
      unstable="none"  unstable_date="none"
  	done=100>
  
  <h2>Source</h2>
  
  <pkg_files 
      url=$(FTP_ROOT_URL)/pkg/lib/hook/
      directory=$(FTP_ROOT_DIR)/pkg/lib/hook/
      files="hook-*.tar.gz" 
  	stable="none" unstable="none">
  	
  Index: ossp-web/pkg/lib/mm/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/lib/mm/index.wml
  ============================================================
  $ cvs update -p -r1.1 index.wml
  
  #use wml::ossp area=pkg:lib subarea=mm
  
  <title>OSSP mm</title>
  
  <h1>...</h1>
  
  <h2>Abstract</h2>
  
  <h2>Authors</h2>
  
  <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  
  <h2>Status</h2>
  
  <pkg_status
      stable="none"    stable_date="none"
      unstable="none"  unstable_date="none"
  	done=100>
  
  <h2>Source</h2>
  
  <pkg_files 
      url=$(FTP_ROOT_URL)/pkg/lib/mm/
      directory=$(FTP_ROOT_DIR)/pkg/lib/mm/
      files="mm-*.tar.gz" 
  	stable="none" unstable="none">
  	
  Index: ossp-web/pkg/lib/mux/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/lib/mux/index.wml
  ============================================================
  $ cvs update -p -r1.1 index.wml
  
  #use wml::ossp area=pkg:lib subarea=mux
  
  <title>OSSP mux</title>
  
  <h1>...</h1>
  
  <h2>Abstract</h2>
  
  <h2>Authors</h2>
  
  <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  
  <h2>Status</h2>
  
  <pkg_status
      stable="none"    stable_date="none"
      unstable="none"  unstable_date="none"
  	done=100>
  
  <h2>Source</h2>
  
  <pkg_files 
      url=$(FTP_ROOT_URL)/pkg/lib/mux/
      directory=$(FTP_ROOT_DIR)/pkg/lib/mux/
      files="mux-*.tar.gz" 
  	stable="none" unstable="none">
  	
  Index: ossp-web/pkg/lib/path/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/lib/path/index.wml
  ============================================================
  $ cvs update -p -r1.1 index.wml
  
  #use wml::ossp area=pkg:lib subarea=path
  
  <title>OSSP path</title>
  
  <h1>...</h1>
  
  <h2>Abstract</h2>
  
  <h2>Authors</h2>
  
  <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  
  <h2>Status</h2>
  
  <pkg_status
      stable="none"    stable_date="none"
      unstable="none"  unstable_date="none"
  	done=100>
  
  <h2>Source</h2>
  
  <pkg_files 
      url=$(FTP_ROOT_URL)/pkg/lib/path/
      directory=$(FTP_ROOT_DIR)/pkg/lib/path/
      files="path-*.tar.gz" 
  	stable="none" unstable="none">
  	
  Index: ossp-web/pkg/lib/pcbe/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/lib/pcbe/index.wml
  ============================================================
  $ cvs update -p -r1.1 index.wml
  
  #use wml::ossp area=pkg:lib subarea=pcbe
  
  <title>OSSP pcbe</title>
  
  <h1>...</h1>
  
  <h2>Abstract</h2>
  
  <h2>Authors</h2>
  
  <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  
  <h2>Status</h2>
  
  <pkg_status
      stable="none"    stable_date="none"
      unstable="none"  unstable_date="none"
  	done=100>
  
  <h2>Source</h2>
  
  <pkg_files 
      url=$(FTP_ROOT_URL)/pkg/lib/pcbe/
      directory=$(FTP_ROOT_DIR)/pkg/lib/pcbe/
      files="pcbe-*.tar.gz" 
  	stable="none" unstable="none">
  	
  Index: ossp-web/pkg/lib/pcre/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/lib/pcre/index.wml
  ============================================================
  $ cvs update -p -r1.1 index.wml
  
  #use wml::ossp area=pkg:lib subarea=pcre
  
  <title>OSSP pcre</title>
  
  <h1>...</h1>
  
  <h2>Abstract</h2>
  
  <h2>Authors</h2>
  
  <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  
  <h2>Status</h2>
  
  <pkg_status
      stable="none"    stable_date="none"
      unstable="none"  unstable_date="none"
  	done=100>
  
  <h2>Source</h2>
  
  <pkg_files 
      url=$(FTP_ROOT_URL)/pkg/lib/pcre/
      directory=$(FTP_ROOT_DIR)/pkg/lib/pcre/
      files="pcre-*.tar.gz" 
  	stable="none" unstable="none">
  	
  Index: ossp-web/pkg/lib/popt/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/lib/popt/index.wml
  ============================================================
  $ cvs update -p -r1.1 index.wml
  
  #use wml::ossp area=pkg:lib subarea=popt
  
  <title>OSSP popt</title>
  
  <h1>...</h1>
  
  <h2>Abstract</h2>
  
  <h2>Authors</h2>
  
  <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  
  <h2>Status</h2>
  
  <pkg_status
      stable="none"    stable_date="none"
      unstable="none"  unstable_date="none"
  	done=100>
  
  <h2>Source</h2>
  
  <pkg_files 
      url=$(FTP_ROOT_URL)/pkg/lib/popt/
      directory=$(FTP_ROOT_DIR)/pkg/lib/popt/
      files="popt-*.tar.gz" 
  	stable="none" unstable="none">
  	
  Index: ossp-web/pkg/lib/proc/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/lib/proc/index.wml
  ============================================================
  $ cvs update -p -r1.1 index.wml
  
  #use wml::ossp area=pkg:lib subarea=proc
  
  <title>OSSP proc</title>
  
  <h1>...</h1>
  
  <h2>Abstract</h2>
  
  <h2>Authors</h2>
  
  <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  
  <h2>Status</h2>
  
  <pkg_status
      stable="none"    stable_date="none"
      unstable="none"  unstable_date="none"
  	done=100>
  
  <h2>Source</h2>
  
  <pkg_files 
      url=$(FTP_ROOT_URL)/pkg/lib/proc/
      directory=$(FTP_ROOT_DIR)/pkg/lib/proc/
      files="proc-*.tar.gz" 
  	stable="none" unstable="none">
  	
  Index: ossp-web/pkg/lib/pth/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/lib/pth/index.wml
  ============================================================
  $ cvs update -p -r1.1 index.wml
  
  #use wml::ossp area=pkg:lib subarea=pth
  
  <title>GNU pth</title>
  
  <h1>Portable Threads</h1>
  
  <h2>Abstract</h2>
  
  Pth is a very portable POSIX/ANSI-C based library for Unix platforms which
  provides non-preemptive priority-based scheduling for multiple threads of
  execution (aka ``multithreading'') inside event-driven applications. All
  threads run in the same address space of the server application, but
  each thread has it's own individual program-counter, run-time stack,
  signal mask and errno variable.
  
  <p>
  The thread scheduling itself is done in a cooperative way, i.e., the threads
  are managed by a priority- and event-based non-preemptive scheduler. The
  intention is that this way one can achieve better portability and run-time
  performance than with preemptive scheduling.  The event facility allows
  threads to wait until various types of events occur, including pending I/O on
  filedescriptors, asynchronous signals, elapsed timers, pending I/O on message
  ports, thread and process termination, and even customized callback functions.
  
  <p>
  Additionally Pth provides an optional emulation API for POSIX.1c threads
  ("Pthreads") which can be used for backward compatibility to existing
  multithreaded applications.
  
  <p>
  Notice: <a href="http://www.gnu.org/software/pth/">GNU pth</a> and OSSP pth
  are exactly the same. OSSP pth just became an official part of the GNU project
  some time ago. That's why its primary name is now GNU pth, although it is
  still developed by the OSSP project only. The official companion GNU locations
  are: <a
  href="http://www.gnu.org/software/pth/">http://www.gnu.org/software/pth/</a>
  and <a href="ftp://ftp.gnu.org/gnu/pth/">ftp://ftp.gnu.org/gnu/pth/</a>.
  
  <h2>Authors</h2>
  
  <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  
  <h2>Status</h2>
  
  <pkg_status
      stable="1.4.1"   stable_date="27-Jan-2002"
      unstable="none"  unstable_date="none"
  	done=100>
  
  <h2>Source</h2>
  
  <pkg_files 
      url=$(FTP_ROOT_URL)/pkg/lib/pth/
      directory=$(FTP_ROOT_DIR)/pkg/lib/pth/
      files="pth-*.tar.gz" 
  	stable="pth-1.4.1.tar.gz" unstable="none">
  	
  Index: ossp-web/pkg/lib/res/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/lib/res/index.wml
  ============================================================
  $ cvs update -p -r1.1 index.wml
  
  #use wml::ossp area=pkg:lib subarea=res
  
  <title>OSSP res</title>
  
  <h1>...</h1>
  
  <h2>Abstract</h2>
  
  <h2>Authors</h2>
  
  <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  
  <h2>Status</h2>
  
  <pkg_status
      stable="none"    stable_date="none"
      unstable="none"  unstable_date="none"
  	done=100>
  
  <h2>Source</h2>
  
  <pkg_files 
      url=$(FTP_ROOT_URL)/pkg/lib/res/
      directory=$(FTP_ROOT_DIR)/pkg/lib/res/
      files="res-*.tar.gz" 
  	stable="none" unstable="none">
  	
  Index: ossp-web/pkg/lib/sa/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/lib/sa/index.wml
  ============================================================
  $ cvs update -p -r1.1 index.wml
  
  #use wml::ossp area=pkg:lib subarea=sa
  
  <title>OSSP sa</title>
  
  <h1>Socket Abstraction</h1>
  
  <h2>Abstract</h2>
  
  OSSP sa is an abstraction library for the Unix socket application programming
  interface (API) featuring stream and datagram oriented communication over Unix
  Domain and Internet Domain (TCP and UDP) sockets. It provides the following
  key features: address abstraction (local, IPv4, and IPv6), type abstraction,
  I/O timeouts, I/O stream buffering and convenience I/O functions.
  
  <h2>Authors</h2>
  
  <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  
  <h2>Status</h2>
  
  <pkg_status
      stable="none"    stable_date="none"
      unstable="0.9.0" unstable_date="31-Jan-2002"
  	done=95>
  
  <h2>Source</h2>
  
  <pkg_files 
      url=$(FTP_ROOT_URL)/pkg/lib/sa/
      directory=$(FTP_ROOT_DIR)/pkg/lib/sa/
      files="sa-*.tar.gz" 
  	stable="none" unstable="sa-0.9.0.tar.gz">
  	
  Index: ossp-web/pkg/lib/sio/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/lib/sio/index.wml
  ============================================================
  $ cvs update -p -r1.1 index.wml
  
  #use wml::ossp area=pkg:lib subarea=sio
  
  <title>OSSP sio</title>
  
  <h1>...</h1>
  
  <h2>Abstract</h2>
  
  <h2>Authors</h2>
  
  <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  
  <h2>Status</h2>
  
  <pkg_status
      stable="none"    stable_date="none"
      unstable="none"  unstable_date="none"
  	done=100>
  
  <h2>Source</h2>
  
  <pkg_files 
      url=$(FTP_ROOT_URL)/pkg/lib/sio/
      directory=$(FTP_ROOT_DIR)/pkg/lib/sio/
      files="sio-*.tar.gz" 
  	stable="none" unstable="none">
  	
  Index: ossp-web/pkg/lib/str/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/lib/str/index.wml
  ============================================================
  $ cvs update -p -r1.1 index.wml
  
  #use wml::ossp area=pkg:lib subarea=str
  
  <title>OSSP str</title>
  
  <h1>String Manipulations</h1>
  
  <h2>Abstract</h2>
  
  OSSP str is a generic string library written in ANSI C which provides
  functions for handling, matching, parsing, searching and formatting of C
  strings. So it can be considered as a superset of POSIX string(3), but its
  main intention is to provide a more convinient and compact API plus a more
  generalized functionality. 
  
  <h2>Authors</h2>
  
  <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  
  <h2>Status</h2>
  
  <pkg_status
      stable="none"    stable_date="none"
      unstable="0.9.6" unstable_date="13-Sep-2001"
  	done=80>
  
  <h2>Source</h2>
  
  <pkg_files 
      url=$(FTP_ROOT_URL)/pkg/lib/str/
      directory=$(FTP_ROOT_DIR)/pkg/lib/str/
      files="str-*.tar.gz" 
  	stable="none" unstable="str-0.9.6.tar.gz">
  	
  Index: ossp-web/pkg/lib/val/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/lib/val/index.wml
  ============================================================
  $ cvs update -p -r1.1 index.wml
  
  #use wml::ossp area=pkg:lib subarea=val
  
  <title>OSSP val</title>
  
  <h1>...</h1>
  
  <h2>Abstract</h2>
  
  <h2>Authors</h2>
  
  <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  
  <h2>Status</h2>
  
  <pkg_status
      stable="none"    stable_date="none"
      unstable="none"  unstable_date="none"
  	done=100>
  
  <h2>Source</h2>
  
  <pkg_files 
      url=$(FTP_ROOT_URL)/pkg/lib/val/
      directory=$(FTP_ROOT_DIR)/pkg/lib/val/
      files="val-*.tar.gz" 
  	stable="none" unstable="none">
  	
  Index: ossp-web/pkg/lib/var/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/lib/var/index.wml
  ============================================================
  $ cvs update -p -r1.1 index.wml
  
  #use wml::ossp area=pkg:lib subarea=var
  
  <title>OSSP var</title>
  
  <h1>...</h1>
  
  <h2>Abstract</h2>
  
  <h2>Authors</h2>
  
  <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  
  <h2>Status</h2>
  
  <pkg_status
      stable="none"    stable_date="none"
      unstable="none"  unstable_date="none"
  	done=100>
  
  <h2>Source</h2>
  
  <pkg_files 
      url=$(FTP_ROOT_URL)/pkg/lib/var/
      directory=$(FTP_ROOT_DIR)/pkg/lib/var/
      files="var-*.tar.gz" 
  	stable="none" unstable="none">
  	
  Index: ossp-web/pkg/lib/xds/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/lib/xds/index.wml
  ============================================================
  $ cvs update -p -r1.1 index.wml
  
  #use wml::ossp area=pkg:lib subarea=xds
  
  <title>OSSP xds</title>
  
  <h1>...</h1>
  
  <h2>Abstract</h2>
  
  <h2>Authors</h2>
  
  <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  
  <h2>Status</h2>
  
  <pkg_status
      stable="none"    stable_date="none"
      unstable="none"  unstable_date="none"
  	done=100>
  
  <h2>Source</h2>
  
  <pkg_files 
      url=$(FTP_ROOT_URL)/pkg/lib/xds/
      directory=$(FTP_ROOT_DIR)/pkg/lib/xds/
      files="xds-*.tar.gz" 
  	stable="none" unstable="none">
  	

From ossp-cvs-owner@ossp.org  Fri Feb 15 12:57:42 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 84F34764E1; Fri, 15 Feb 2002 12:57:42 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/l2 index.wml
Message-Id: <20020215115742.84F34764E1@mail.ossp.org>
Date: Fri, 15 Feb 2002 12:57:42 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   15-Feb-2002 12:57:42
  Branch: HEAD                             Handle: 2002021511574200

  Modified files:
    ossp-web/pkg/lib/l2     index.wml

  Log:
    fix l2 page

  Summary:
    Revision    Changes     Path
    1.2         +46 -10     ossp-web/pkg/lib/l2/index.wml
  ____________________________________________________________________________

  Index: ossp-web/pkg/lib/l2/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/lib/l2/index.wml	13 Feb 2002 16:35:07 -0000	1.1
  +++ ossp-web/pkg/lib/l2/index.wml	15 Feb 2002 11:57:42 -0000	1.2
  @@ -3,13 +3,49 @@
   
   <title>OSSP l2</title>
   
  -The OSSP lmtp2nntp program is an LMTP service for use in conjunction
  -with an MTA (like Sendmail), providing a reliable real-time mail to news
  -gateway. Input messages get their headers slightly reformatted to match
  -Usenet news article format. The article is then posted or feeded into a
  -remote NNTP service (like INN). Delivery must take place immediately or
  -the transaction fails. OSSP lmtp2nntp relies on the queuing capabilities
  -of the MTA in order to provide a fully reliable service. For this the
  -program returns proper delivery status notification which indicates
  -successful completed action, persistent transient failure or permanent
  -failure.
  +<h1>Flexible Logging</h1>
  +
  +<h2>Abstract</h2>
  +
  +OSSP l2 is a C library providing a very flexible and sophisticated Unix
  +logging facility. It is based on the model of arbitrary number of channels,
  +stacked together in a top-down data flow tree structure with filtering
  +channels in internal nodes and output channels on the leave nodes.
  +
  +<p>
  +Channel trees can be either constructed manually through lower-level API
  +functions or all at once with a single API function controlled by a compact
  +syntactical description of the channel tree. For generating log messages a
  +printf-style formatting engine is provided which can be extended through
  +callback functions. The data flow inside the channel tree is controlled by
  +(eight fixed and nine custom) logging message severity levels which are
  +assigned to each individual channel.
  +
  +<p>
  +Channels are implemented by channel handlers which can be even customer
  +supplied for creating own channels which seamlessly integrate into the
  +framework. For convinience reasons, OSSP l2 already ships with pre-implemented
  +filtering (noop, filter, prefix, buffer) and output (null, fd, file, pipe,
  +socket, syslog, smtp) channels which already cover mostly all use cases of
  +logging.
  +
  +<h2>Authors</h2>
  +
  +<pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  +<pkg_author name="Michael Schloh v. Bennewitz" mail="michael.schloh@cw.com">
  +
  +<h2>Status</h2>
  +
  +<pkg_status
  +    stable="none"    stable_date="none"
  +    unstable="none"  unstable_date="none"
  +	done=80>
  +
  +<h2>Source</h2>
  +
  +<pkg_files 
  +    url=$(FTP_ROOT_URL)/pkg/lib/l2/
  +    directory=$(FTP_ROOT_DIR)/pkg/lib/l2/
  +    files="l2-*.tar.gz" 
  +	stable="none" unstable="none">
  +	

From ossp-cvs-owner@ossp.org  Fri Feb 15 13:07:16 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0C5ED764F3; Fri, 15 Feb 2002 13:07:15 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/SHARE ossp_pkg.wml ossp-web/pkg/lib index.wml oss...
Message-Id: <20020215120715.0C5ED764F3@mail.ossp.org>
Date: Fri, 15 Feb 2002 13:07:15 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   15-Feb-2002 13:07:15
  Branch: HEAD                             Handle: 2002021512071401

  Modified files:
    ossp-web/SHARE          ossp_pkg.wml
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/shtool index.wml

  Log:
    fix URLs

  Summary:
    Revision    Changes     Path
    1.3         +4  -2      ossp-web/SHARE/ossp_pkg.wml
    1.7         +22 -22     ossp-web/pkg/lib/index.wml
    1.10        +12 -12     ossp-web/pkg/tool/index.wml
    1.4         +2  -3      ossp-web/pkg/tool/shtool/index.wml
  ____________________________________________________________________________

  Index: ossp-web/SHARE/ossp_pkg.wml
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 ossp_pkg.wml
  --- ossp-web/SHARE/ossp_pkg.wml	14 Feb 2002 20:16:36 -0000	1.2
  +++ ossp-web/SHARE/ossp_pkg.wml	15 Feb 2002 12:07:14 -0000	1.3
  @@ -131,6 +131,7 @@
   <preserve stable>
   <preserve unstable>
   <preserve derived>
  +<preserve type>
   <set-var %attributes>
     <tr>
       <td colspan=3 height=1 bgcolor="#b5b5b0"><imgdot height=1></td>
  @@ -142,12 +143,12 @@
   	</td>
       <td>Stable:   
         <ifeq "<get-var stable>" "none" "none"
  -        <a href="ftp://ftp.ossp.org/pkg/tool/<get-var name>/<get-var name>-<get-var stable>.tar.gz"><get-var stable></a>
  +        <a href="ftp://ftp.ossp.org/pkg/<get-var type>/<get-var name>/<get-var name>-<get-var stable>.tar.gz"><get-var stable></a>
         >
   	</td>
       <td>Unstable: 
   	  <ifeq "<get-var unstable>" "none" "none"
  -	    <a href="ftp://ftp.ossp.org/pkg/tool/<get-var name>/<get-var name>-<get-var unstable>.tar.gz"><get-var unstable></a>
  +	    <a href="ftp://ftp.ossp.org/pkg/<get-var type>/<get-var name>/<get-var name>-<get-var unstable>.tar.gz"><get-var unstable></a>
   	  >
   	</td>
     </tr>
  @@ -164,6 +165,7 @@
   <restore stable>
   <restore unstable>
   <restore derived>
  +<restore type>
   </define-tag>
   
   <define-tag pkg_status>
  Index: ossp-web/pkg/lib/index.wml
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 index.wml
  --- ossp-web/pkg/lib/index.wml	14 Feb 2002 17:02:50 -0000	1.6
  +++ ossp-web/pkg/lib/index.wml	15 Feb 2002 12:07:14 -0000	1.7
  @@ -11,70 +11,70 @@
   
   <p>
   <pkg_list>
  -  <pkg_item name="pth" longname="GNU pth"
  +  <pkg_item name="pth" longname="GNU pth" type="lib"
               desc="Portable Threads"
   			done=100 stable=1.4.1 unstable=none>
  -  <pkg_item name="str" longname="OSSP str"
  +  <pkg_item name="str" longname="OSSP str" type="lib"
               desc="String Manipulations"
   			done=80 stable=none unstable=0.9.6>
  -  <pkg_item name="sa" longname="OSSP sa"
  +  <pkg_item name="sa" longname="OSSP sa" type="lib"
               desc="Socket Abstraction"
   			done=95 stable=none unstable=0.9.0>
  -  <pkg_item name="ex" longname="OSSP ex"
  +  <pkg_item name="ex" longname="OSSP ex" type="lib"
               desc="Exception Handling"
   			done=95 stable=none unstable=0.9.0>
  -  <pkg_item name="l2" longname="OSSP l2"
  +  <pkg_item name="l2" longname="OSSP l2" type="lib"
               desc="Flexible Logging"
   			done=80 stable=none unstable=none>
  -  <pkg_item name="var" longname="OSSP var"
  +  <pkg_item name="var" longname="OSSP var" type="lib"
               desc="Variable Expansion"
   			done=95 stable=none unstable=none>
  -  <pkg_item name="val" longname="OSSP val"
  +  <pkg_item name="val" longname="OSSP val" type="lib"
               desc="Value Access"
   			done=95 stable=none unstable=none>
  -  <pkg_item name="act" longname="OSSP act"
  +  <pkg_item name="act" longname="OSSP act" type="lib"
               desc="Abstract Container Types"
   			done=15 stable=none unstable=none>
  -  <pkg_item name="cache" longname="OSSP cache"
  +  <pkg_item name="cache" longname="OSSP cache" type="lib"
               desc="User-Space Cache"
   			done=15 stable=none unstable=none>
  -  <pkg_item name="mm" longname="OSSP mm"
  +  <pkg_item name="mm" longname="OSSP mm" type="lib"
               desc="Shared Memory Allocation"
   			done=100 stable=1.1.3 unstable=none>
  -  <pkg_item name="xds" longname="OSSP xds"
  +  <pkg_item name="xds" longname="OSSP xds" type="lib"
               desc="Extensible Data Serialization"
   			done=95 stable=none unstable=none>
  -  <pkg_item name="path" longname="OSSP path"
  +  <pkg_item name="path" longname="OSSP path" type="lib"
               desc="Filesystem Path Manipulations"
   			done=70 stable=none unstable=none>
  -  <pkg_item name="proc" longname="OSSP proc"
  +  <pkg_item name="proc" longname="OSSP proc" type="lib"
               desc="Process Management"
   			done=30 stable=none unstable=none>
  -  <pkg_item name="pcre" longname="OSSP pcre" derived=yes
  +  <pkg_item name="pcre" longname="OSSP pcre" type="lib" derived=yes
               desc="Perl Compatible Regular Expressions"
   			done=100 stable=none unstable=none>
  -  <pkg_item name="pcbe" longname="OSSP pcbe"
  +  <pkg_item name="pcbe" longname="OSSP pcbe" type="lib"
               desc="Perl Style Boolean Expressions"
   			done=15 stable=none unstable=none>
  -  <pkg_item name="popt" longname="OSSP popt" derived=yes
  +  <pkg_item name="popt" longname="OSSP popt" type="lib" derived=yes
               desc="Option Parsing"
   			done=95 stable=none unstable=none>
  -  <pkg_item name="sio" longname="OSSP sio"
  +  <pkg_item name="sio" longname="OSSP sio" type="lib"
               desc="Stream I/O"
   			done=15 stable=none unstable=none>
  -  <pkg_item name="res" longname="OSSP res"
  +  <pkg_item name="res" longname="OSSP res" type="lib"
               desc="Resource Pools"
   			done=15 stable=none unstable=none>
  -  <pkg_item name="hook" longname="OSSP hook"
  +  <pkg_item name="hook" longname="OSSP hook" type="lib"
               desc="API Hooks"
   			done=50 stable=none unstable=none>
  -  <pkg_item name="cfg" longname="OSSP cfg"
  +  <pkg_item name="cfg" longname="OSSP cfg" type="lib"
               desc="Configuration Parsing"
   			done=15 stable=none unstable=none>
  -  <pkg_item name="adns" longname="OSSP adns" derived=yes
  +  <pkg_item name="adns" longname="OSSP adns" type="lib" derived=yes
               desc="Asynchronous DNS Resolving"
   			done=100 stable=none unstable=none>
  -  <pkg_item name="mux" longname="OSSP mux"
  +  <pkg_item name="mux" longname="OSSP mux" type="lib"
               desc="Multiplexing Protocol"
   			done=15 stable=none unstable=none>
   </pkg_list>
  Index: ossp-web/pkg/tool/index.wml
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 index.wml
  --- ossp-web/pkg/tool/index.wml	15 Feb 2002 10:20:54 -0000	1.9
  +++ ossp-web/pkg/tool/index.wml	15 Feb 2002 12:07:15 -0000	1.10
  @@ -10,40 +10,40 @@
   
   <p>
   <pkg_list>
  -  <pkg_item name="shtool" longname="GNU shtool"
  +  <pkg_item name="shtool" longname="GNU shtool" type="tool"
               desc="Portable Shell Tool"
   		    done=100 stable="1.6.0" unstable=none>
  -  <pkg_item name="lmtp2nntp" longname="OSSP lmtp2nntp"
  +  <pkg_item name="lmtp2nntp" longname="OSSP lmtp2nntp" type="tool"
               desc="Real-Time Mail to News Gateway"
               done=100 stable="1.1.1" unstable=none>
  -  <pkg_item name="petidomo" longname="OSSP petidomo" derived=yes
  +  <pkg_item name="petidomo" longname="OSSP petidomo" type="tool" derived=yes
               desc="Mailing List Manager"
   	        done=95 stable="none" unstable="4.0b1">
  -  <pkg_item name="shiela" longname="OSSP shiela"
  +  <pkg_item name="shiela" longname="OSSP shiela" type="tool"
               desc="CVS Access Control and Logging"
   	        done=95 stable="none" unstable="none">
  -  <pkg_item name="xenia" longname="OSSP xenia"
  +  <pkg_item name="xenia" longname="OSSP xenia" type="tool"
               desc="CVS Browsing Server"
   	        done=20 stable="none" unstable="none">
  -  <pkg_item name="rc" longname="OSSP rc"
  +  <pkg_item name="rc" longname="OSSP rc" type="tool"
               desc="Run-Command Processor"
               done=20 stable="none" unstable="none">
  -  <pkg_item name="dsotool" longname="OSSP dsotool"
  +  <pkg_item name="dsotool" longname="OSSP dsotool" type="tool"
               desc="Dynamic Shared Objects (DSO)"
   	        done=20 stable="none" unstable="none">
  -  <pkg_item name="devtool" longname="OSSP devtool"
  +  <pkg_item name="devtool" longname="OSSP devtool" type="tool"
               desc="Development Tool"
               done=20 stable="none" unstable="none">
  -  <pkg_item name="smake" longname="OSSP smake"
  +  <pkg_item name="smake" longname="OSSP smake" type="tool"
               desc="Skeleton Makefile Generator"
   	        done=90 stable="none" unstable="none">
  -  <pkg_item name="eo" longname="OSSP eo"
  +  <pkg_item name="eo" longname="OSSP eo" type="tool"
               desc="Embedded Objects"
   	        done=50 stable="none" unstable="none">
  -  <pkg_item name="sugar" longname="OSSP sugar"
  +  <pkg_item name="sugar" longname="OSSP sugar" type="tool"
               desc="Sugar Markup Language Processor"
   	        done=20 stable="none" unstable="none">
  -  <pkg_item name="iselect" longname="OSSP iselect"
  +  <pkg_item name="iselect" longname="OSSP iselect" type="tool"
               desc="Interactive Terminal Selection"
   	        done=100 stable="1.2.0" unstable="none">
   </pkg_list>
  Index: ossp-web/pkg/tool/shtool/index.wml
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 index.wml
  --- ossp-web/pkg/tool/shtool/index.wml	14 Feb 2002 20:16:36 -0000	1.3
  +++ ossp-web/pkg/tool/shtool/index.wml	15 Feb 2002 12:07:15 -0000	1.4
  @@ -24,9 +24,8 @@
   so also became an official part of the GNU project. That's why its
   primary name is now GNU shtool, although it is still developed by
   the OSSP project only. The official companion GNU locations are: <a
  -href="http://www.gnu.org/software/shtool/">http://www.gnu.org/software/s
  -htool/</a> and <a
  -href="ftp://ftp.gnu.org/gnu/shtool/">ftp://ftp.gnu.org/gnu/shtool/</a>.
  +href="http://www.gnu.org/software/shtool/">http://www.gnu.org/software/shtool/</a>
  +and <a href="ftp://ftp.gnu.org/gnu/shtool/">ftp://ftp.gnu.org/gnu/shtool/</a>.
   
   <h2>Authors</h2>
   

From ossp-cvs-owner@ossp.org  Fri Feb 15 14:52:13 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4155A764F3; Fri, 15 Feb 2002 14:52:13 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/act index.wml ossp-web/pkg/lib/cache inde...
Message-Id: <20020215135213.4155A764F3@mail.ossp.org>
Date: Fri, 15 Feb 2002 14:52:13 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   15-Feb-2002 14:52:13
  Branch: HEAD                             Handle: 2002021513521002

  Modified files:
    ossp-web/pkg/lib/act    index.wml
    ossp-web/pkg/lib/cache  index.wml
    ossp-web/pkg/lib/mm     index.wml
    ossp-web/pkg/lib/val    index.wml
    ossp-web/pkg/lib/var    index.wml
    ossp-web/pkg/lib/xds    index.wml

  Log:
    more content

  Summary:
    Revision    Changes     Path
    1.2         +5  -2      ossp-web/pkg/lib/act/index.wml
    1.2         +6  -2      ossp-web/pkg/lib/cache/index.wml
    1.2         +11 -3      ossp-web/pkg/lib/mm/index.wml
    1.2         +13 -1      ossp-web/pkg/lib/val/index.wml
    1.2         +13 -2      ossp-web/pkg/lib/var/index.wml
    1.2         +16 -2      ossp-web/pkg/lib/xds/index.wml
  ____________________________________________________________________________

  Index: ossp-web/pkg/lib/act/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/lib/act/index.wml	15 Feb 2002 11:56:40 -0000	1.1
  +++ ossp-web/pkg/lib/act/index.wml	15 Feb 2002 13:52:10 -0000	1.2
  @@ -3,10 +3,13 @@
   
   <title>OSSP act</title>
   
  -<h1>...</h1>
  +<h1>Abstract Container Types</h1>
   
   <h2>Abstract</h2>
   
  +OSSP act is a lower level data structure library for abstract container types.
  +[...]
  +
   <h2>Authors</h2>
   
   <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  @@ -16,7 +19,7 @@
   <pkg_status
       stable="none"    stable_date="none"
       unstable="none"  unstable_date="none"
  -	done=100>
  +	done=15>
   
   <h2>Source</h2>
   
  Index: ossp-web/pkg/lib/cache/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/lib/cache/index.wml	15 Feb 2002 11:56:41 -0000	1.1
  +++ ossp-web/pkg/lib/cache/index.wml	15 Feb 2002 13:52:10 -0000	1.2
  @@ -3,10 +3,14 @@
   
   <title>OSSP cache</title>
   
  -<h1>...</h1>
  +<h1>User-Space Cache</h1>
   
   <h2>Abstract</h2>
   
  +OSSP cache is an efficient fixed-size low-overhead user-space caching library.
  +It allows attaching an cache to a fixed-size memory segment and provides O(1)
  +time and space complexity over all operations.
  +
   <h2>Authors</h2>
   
   <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  @@ -16,7 +20,7 @@
   <pkg_status
       stable="none"    stable_date="none"
       unstable="none"  unstable_date="none"
  -	done=100>
  +	done=15>
   
   <h2>Source</h2>
   
  Index: ossp-web/pkg/lib/mm/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/lib/mm/index.wml	15 Feb 2002 11:56:43 -0000	1.1
  +++ ossp-web/pkg/lib/mm/index.wml	15 Feb 2002 13:52:11 -0000	1.2
  @@ -3,10 +3,18 @@
   
   <title>OSSP mm</title>
   
  -<h1>...</h1>
  +<h1>Shared Memory Allocation</h1>
   
   <h2>Abstract</h2>
   
  +OSSP mm is a 2-layer abstraction library which simplifies the usage of shared
  +memory between forked (and this way strongly related) processes under Unix
  +platforms. On the first layer it hides all platform dependent implementation
  +details (allocation and locking) when dealing with shared memory segments and
  +on the second layer it provides a high-level malloc(3)-style API for a
  +convenient and well known way to work with data-structures inside those shared
  +memory segments.
  +
   <h2>Authors</h2>
   
   <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  @@ -14,7 +22,7 @@
   <h2>Status</h2>
   
   <pkg_status
  -    stable="none"    stable_date="none"
  +    stable="1.1.3"   stable_date="01-Jul-2000"
       unstable="none"  unstable_date="none"
   	done=100>
   
  @@ -24,5 +32,5 @@
       url=$(FTP_ROOT_URL)/pkg/lib/mm/
       directory=$(FTP_ROOT_DIR)/pkg/lib/mm/
       files="mm-*.tar.gz" 
  -	stable="none" unstable="none">
  +	stable="mm-1.1.3.tar.gz" unstable="none">
   	
  Index: ossp-web/pkg/lib/val/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/lib/val/index.wml	15 Feb 2002 11:56:50 -0000	1.1
  +++ ossp-web/pkg/lib/val/index.wml	15 Feb 2002 13:52:11 -0000	1.2
  @@ -3,13 +3,25 @@
   
   <title>OSSP val</title>
   
  -<h1>...</h1>
  +<h1>Value Access</h1>
   
   <h2>Abstract</h2>
   
  +OSSP val is a flexible name to value mapping library for C variables.  It is a
  +companion library to <a href="../var/">OSSP var</a>.  It allows one to access
  +C variables through name strings, although the C language does neither provide
  +such a dedicated facility nor an evaluation construct (which could be used to
  +implement such a facility easily).
  +
  +In general, this is used for accessing C variables without having to know the
  +actual symbol/address/reference. The typical use cases are in combination with
  +flexible configuration parsing and supporting loosly-coupled DSO-based module
  +architectures.
  +
   <h2>Authors</h2>
   
   <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  +<pkg_author name="Thomas Lotterer" mail="thomas.lotterer@cw.com">
   
   <h2>Status</h2>
   
  Index: ossp-web/pkg/lib/var/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/lib/var/index.wml	15 Feb 2002 11:56:50 -0000	1.1
  +++ ossp-web/pkg/lib/var/index.wml	15 Feb 2002 13:52:12 -0000	1.2
  @@ -3,13 +3,24 @@
   
   <title>OSSP var</title>
   
  -<h1>...</h1>
  +<h1>Variable Expansion</h1>
   
   <h2>Abstract</h2>
   
  +OSSP var is a very sophisticated and fast variable construct expansion
  +library. It supports the usual scripting language style variable syntax
  +(<tt>${name}</tt>, <tt>$(name)</tt>, <tt>%{name}</tt>, etc.) and
  +provides both simple scalar and array expansion and post-operations
  +on the expanded value. The supported post-operations are length
  +determination, case conversion, defaults, postive and negative
  +alternatives, sub-strings, regular expression based substitutions,
  +character translations, padding and even nested iterations over array
  +variables. The actual value lookup is performed through as callback
  +function, so OSSP var can expand arbitrary values.
  +
   <h2>Authors</h2>
   
  -<pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  +<pkg_author name="Peter Simons" mail="simons@computer.org">
   
   <h2>Status</h2>
   
  Index: ossp-web/pkg/lib/xds/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/lib/xds/index.wml	15 Feb 2002 11:56:51 -0000	1.1
  +++ ossp-web/pkg/lib/xds/index.wml	15 Feb 2002 13:52:12 -0000	1.2
  @@ -3,13 +3,27 @@
   
   <title>OSSP xds</title>
   
  -<h1>...</h1>
  +<h1>Extensible Data Serialization</h1>
   
   <h2>Abstract</h2>
   
  +The purpose of OSSP xds is to encode data in a way that allows this
  +data to be exchanged between different computer systems. Assume you
  +would want to transfer the value 0x1234 from host A to host B. Then you
  +would encode it using B<OSSP xds>, transfer the encoded data over the
  +network, and decode the value again at the other end. Every program that
  +follows this process will read the correct value no matter what native
  +representation is uses internally.
  +
  +<p>
  +OSSP xds consists of three components: The generic encoding and decoding
  +framework, a set of engines to encode and decode values in a certain format,
  +and a run-time context, which is used to manage buffers, registered engines,
  +etc.
  +
   <h2>Authors</h2>
   
  -<pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  +<pkg_author name="Peter Simons" mail="simons@computer.org">
   
   <h2>Status</h2>
   

From ossp-cvs-owner@ossp.org  Fri Feb 15 19:01:31 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C0DB976468; Fri, 15 Feb 2002 19:01:30 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/mm index.wml
Message-Id: <20020215180130.C0DB976468@mail.ossp.org>
Date: Fri, 15 Feb 2002 19:01:30 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   15-Feb-2002 19:01:30
  Branch: HEAD                             Handle: 2002021518013000

  Modified files:
    ossp-web/pkg/lib/mm     index.wml

  Log:
    typo

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-web/pkg/lib/mm/index.wml
  ____________________________________________________________________________

  Index: ossp-web/pkg/lib/mm/index.wml
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 index.wml
  --- ossp-web/pkg/lib/mm/index.wml	15 Feb 2002 13:52:11 -0000	1.2
  +++ ossp-web/pkg/lib/mm/index.wml	15 Feb 2002 18:01:30 -0000	1.3
  @@ -12,7 +12,7 @@
   platforms. On the first layer it hides all platform dependent implementation
   details (allocation and locking) when dealing with shared memory segments and
   on the second layer it provides a high-level malloc(3)-style API for a
  -convenient and well known way to work with data-structures inside those shared
  +convenient and well known way to work with data structures inside those shared
   memory segments.
   
   <h2>Authors</h2>

From ossp-cvs-owner@ossp.org  Fri Feb 15 21:06:33 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4F4FB763D4; Fri, 15 Feb 2002 21:06:33 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/adns index.wml ossp-web/pkg/lib/cfg index...
Message-Id: <20020215200633.4F4FB763D4@mail.ossp.org>
Date: Fri, 15 Feb 2002 21:06:33 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   15-Feb-2002 21:06:33
  Branch: HEAD                             Handle: 2002021520062705

  Modified files:
    ossp-web/pkg/lib/adns   index.wml
    ossp-web/pkg/lib/cfg    index.wml
    ossp-web/pkg/lib/hook   index.wml
    ossp-web/pkg/lib/mux    index.wml
    ossp-web/pkg/lib/path   index.wml
    ossp-web/pkg/lib/pcbe   index.wml
    ossp-web/pkg/lib/pcre   index.wml
    ossp-web/pkg/lib/popt   index.wml
    ossp-web/pkg/lib/proc   index.wml
    ossp-web/pkg/lib/res    index.wml
    ossp-web/pkg/lib/sio    index.wml

  Log:
    even more content

  Summary:
    Revision    Changes     Path
    1.2         +13 -2      ossp-web/pkg/lib/adns/index.wml
    1.2         +5  -2      ossp-web/pkg/lib/cfg/index.wml
    1.2         +4  -2      ossp-web/pkg/lib/hook/index.wml
    1.2         +6  -2      ossp-web/pkg/lib/mux/index.wml
    1.2         +7  -2      ossp-web/pkg/lib/path/index.wml
    1.2         +6  -2      ossp-web/pkg/lib/pcbe/index.wml
    1.2         +14 -1      ossp-web/pkg/lib/pcre/index.wml
    1.2         +20 -1      ossp-web/pkg/lib/popt/index.wml
    1.2         +7  -2      ossp-web/pkg/lib/proc/index.wml
    1.2         +6  -2      ossp-web/pkg/lib/res/index.wml
    1.2         +4  -2      ossp-web/pkg/lib/sio/index.wml
  ____________________________________________________________________________

  Index: ossp-web/pkg/lib/adns/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/lib/adns/index.wml	15 Feb 2002 11:56:40 -0000	1.1
  +++ ossp-web/pkg/lib/adns/index.wml	15 Feb 2002 20:06:27 -0000	1.2
  @@ -3,13 +3,24 @@
   
   <title>OSSP adns</title>
   
  -<h1>...</h1>
  +<h1>Asynchronous DNS Resolving</h1>
   
   <h2>Abstract</h2>
   
  +OSSP adns is a derivative of Ian Jackson's <a
  +href="http://www.chiark.greenend.org.uk/~ian/adns/">ADNS</a> library.  It
  +provides an asynchronous Domain Name System (DNS) client library for resolving
  +arbitrary DNS records.
  +
  +<p>
  +Notice: OSSP adns is fully compatible with the original ADNS library. It just
  +made into an OSSP library for easier integration within the OSSP project. It
  +is not intended to replace or to compete with the original ADNS library in any
  +way.
  +
   <h2>Authors</h2>
   
  -<pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  +<pkg_author name="Ian Jackson" mail="ian@davenant.greenend.org.uk">
   
   <h2>Status</h2>
   
  Index: ossp-web/pkg/lib/cfg/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/lib/cfg/index.wml	15 Feb 2002 11:56:41 -0000	1.1
  +++ ossp-web/pkg/lib/cfg/index.wml	15 Feb 2002 20:06:28 -0000	1.2
  @@ -3,10 +3,13 @@
   
   <title>OSSP cfg</title>
   
  -<h1>...</h1>
  +<h1>Configuration Parsing</h1>
   
   <h2>Abstract</h2>
   
  +OSSP cfg provides parsing of C-style configuration files
  +with an unlimited recursion depth.
  +
   <h2>Authors</h2>
   
   <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  @@ -16,7 +19,7 @@
   <pkg_status
       stable="none"    stable_date="none"
       unstable="none"  unstable_date="none"
  -	done=100>
  +	done=15>
   
   <h2>Source</h2>
   
  Index: ossp-web/pkg/lib/hook/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/lib/hook/index.wml	15 Feb 2002 11:56:42 -0000	1.1
  +++ ossp-web/pkg/lib/hook/index.wml	15 Feb 2002 20:06:28 -0000	1.2
  @@ -3,10 +3,12 @@
   
   <title>OSSP hook</title>
   
  -<h1>...</h1>
  +<h1>API Hooks</h1>
   
   <h2>Abstract</h2>
   
  +OSSP hook provides Application Programming Interface (API) hooks.
  +
   <h2>Authors</h2>
   
   <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  @@ -16,7 +18,7 @@
   <pkg_status
       stable="none"    stable_date="none"
       unstable="none"  unstable_date="none"
  -	done=100>
  +	done=50>
   
   <h2>Source</h2>
   
  Index: ossp-web/pkg/lib/mux/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/lib/mux/index.wml	15 Feb 2002 11:56:44 -0000	1.1
  +++ ossp-web/pkg/lib/mux/index.wml	15 Feb 2002 20:06:29 -0000	1.2
  @@ -3,10 +3,14 @@
   
   <title>OSSP mux</title>
   
  -<h1>...</h1>
  +<h1>Multiplexing Protocol</h1>
   
   <h2>Abstract</h2>
   
  +OSSP mux is a protocol and companion communication library for efficient
  +multiplexing multiple logical socket connections over a single physical socket
  +connection.
  +
   <h2>Authors</h2>
   
   <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  @@ -16,7 +20,7 @@
   <pkg_status
       stable="none"    stable_date="none"
       unstable="none"  unstable_date="none"
  -	done=100>
  +	done=15>
   
   <h2>Source</h2>
   
  Index: ossp-web/pkg/lib/path/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/lib/path/index.wml	15 Feb 2002 11:56:44 -0000	1.1
  +++ ossp-web/pkg/lib/path/index.wml	15 Feb 2002 20:06:29 -0000	1.2
  @@ -3,10 +3,15 @@
   
   <title>OSSP path</title>
   
  -<h1>...</h1>
  +<h1>Filesystem Path Manipulations</h1>
   
   <h2>Abstract</h2>
   
  +OSSP path is a set of utility functions for manipulating Unix filesystem
  +paths. It provides functions for converting from absolute to relative paths
  +(and vice versa), resolve logical to physical paths, and reducing a path to
  +its base or directory name.
  +
   <h2>Authors</h2>
   
   <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  @@ -16,7 +21,7 @@
   <pkg_status
       stable="none"    stable_date="none"
       unstable="none"  unstable_date="none"
  -	done=100>
  +	done=70>
   
   <h2>Source</h2>
   
  Index: ossp-web/pkg/lib/pcbe/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/lib/pcbe/index.wml	15 Feb 2002 11:56:45 -0000	1.1
  +++ ossp-web/pkg/lib/pcbe/index.wml	15 Feb 2002 20:06:30 -0000	1.2
  @@ -3,10 +3,14 @@
   
   <title>OSSP pcbe</title>
   
  -<h1>...</h1>
  +<h1>Perl Style Boolean Expressions</h1>
   
   <h2>Abstract</h2>
   
  +OSSP pcbe provides a Perl style boolean expression parser and evaluator.
  +It is a companion library to <a href="../pcre/">OSSP pcre</a>. With OSSP
  +pcre one can provide support for arbitrary complex boolean condition.
  +
   <h2>Authors</h2>
   
   <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  @@ -16,7 +20,7 @@
   <pkg_status
       stable="none"    stable_date="none"
       unstable="none"  unstable_date="none"
  -	done=100>
  +	done=15>
   
   <h2>Source</h2>
   
  Index: ossp-web/pkg/lib/pcre/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/lib/pcre/index.wml	15 Feb 2002 11:56:45 -0000	1.1
  +++ ossp-web/pkg/lib/pcre/index.wml	15 Feb 2002 20:06:30 -0000	1.2
  @@ -3,12 +3,25 @@
   
   <title>OSSP pcre</title>
   
  -<h1>...</h1>
  +<h1>Perl Compatible Regular Expressions</h1>
   
   <h2>Abstract</h2>
   
  +OSSP pcre is a derivative of Philip Hazel's <a
  +href="http://www.pcre.org/">PCRE</a> library for matching text via
  +Perl-compatible regular expressions. OSSP pcre additionally contains the
  +function pcre_match(3) which provides a very convinience way to apply a
  +regular expression, including caching support.
  +
  +<p>
  +Notice: OSSP pcre is fully compatible with the original PCRE library.  It is
  +just a super-set of it and made into an OSSP library for easier integration
  +within the OSSP project. It is not intended to replace or to compete with the
  +original PCRE library in any way.
  +
   <h2>Authors</h2>
   
  +<pkg_author name="Philip Hazel" mail="ph10@cam.ac.uk">
   <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
   
   <h2>Status</h2>
  Index: ossp-web/pkg/lib/popt/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/lib/popt/index.wml	15 Feb 2002 11:56:46 -0000	1.1
  +++ ossp-web/pkg/lib/popt/index.wml	15 Feb 2002 20:06:31 -0000	1.2
  @@ -3,12 +3,31 @@
   
   <title>OSSP popt</title>
   
  -<h1>...</h1>
  +<h1>Option Parsing</h1>
   
   <h2>Abstract</h2>
   
  +OSSP popt is a derivative of <a href="http://www.redhat.com/">RedHat</a>'s <a
  +href="ftp.rpm.org:/pub/rpm/dist/rpm-4.0.x">POPT</a> library as found in the <a
  +href="http://www.rpm.org/">RedHat Package Manager</a> (RPM). It provides
  +support for parsing short (<tt>-f</tt>) and long (<tt>--foo</tt>) command line
  +options.  Unlike similar libraries, it does not utilize global variables, thus
  +enabling multiple passes in parsing argument vectors (like <tt>argv</tt>); it
  +can parse an arbitrary array of <tt>argv</tt>-style elements, allowing parsing
  +of command-line options from any source; it provides a standard method of
  +option aliasing; it can execute external option filters; and, finally, it can
  +automatically generate help and usage messages for the application.
  +
  +<p>
  +Notice: OSSP popt is not compatible with the original POPT library, because it
  +uses a different API namespace. Functionality wise it is the same, although
  +the source code was stripped down to its minimum. It made into an OSSP library
  +for easier integration within the OSSP project. It is not intended to replace
  +or to compete with the original POPT library in any way.
  +
   <h2>Authors</h2>
   
  +<pkg_author name="Erik W. Troan" mail="ewt@redhat.com">
   <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
   
   <h2>Status</h2>
  Index: ossp-web/pkg/lib/proc/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/lib/proc/index.wml	15 Feb 2002 11:56:46 -0000	1.1
  +++ ossp-web/pkg/lib/proc/index.wml	15 Feb 2002 20:06:31 -0000	1.2
  @@ -3,7 +3,12 @@
   
   <title>OSSP proc</title>
   
  -<h1>...</h1>
  +<h1>Process Management</h1>
  +
  +OSSP proc is a set of utility functions of managing Unix processes. It
  +provides support for making real daemon processes, resolving the current
  +working directory, set the process title, manipulating the process
  +environment, etc.
   
   <h2>Abstract</h2>
   
  @@ -16,7 +21,7 @@
   <pkg_status
       stable="none"    stable_date="none"
       unstable="none"  unstable_date="none"
  -	done=100>
  +	done=30>
   
   <h2>Source</h2>
   
  Index: ossp-web/pkg/lib/res/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/lib/res/index.wml	15 Feb 2002 11:56:47 -0000	1.1
  +++ ossp-web/pkg/lib/res/index.wml	15 Feb 2002 20:06:32 -0000	1.2
  @@ -3,10 +3,14 @@
   
   <title>OSSP res</title>
   
  -<h1>...</h1>
  +<h1>Resource Pools</h1>
   
   <h2>Abstract</h2>
   
  +OSSP res is a resource management library based on the principle of stacked
  +resource pools. It is intended for efficient and robust resource management
  +inside long-runnin server applications.
  +
   <h2>Authors</h2>
   
   <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  @@ -16,7 +20,7 @@
   <pkg_status
       stable="none"    stable_date="none"
       unstable="none"  unstable_date="none"
  -	done=100>
  +	done=15>
   
   <h2>Source</h2>
   
  Index: ossp-web/pkg/lib/sio/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/lib/sio/index.wml	15 Feb 2002 11:56:48 -0000	1.1
  +++ ossp-web/pkg/lib/sio/index.wml	15 Feb 2002 20:06:32 -0000	1.2
  @@ -3,10 +3,12 @@
   
   <title>OSSP sio</title>
   
  -<h1>...</h1>
  +<h1>Stream I/O</h1>
   
   <h2>Abstract</h2>
   
  +OSSP sio is an I/O abstraction library for layered stream communication.
  +
   <h2>Authors</h2>
   
   <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  @@ -16,7 +18,7 @@
   <pkg_status
       stable="none"    stable_date="none"
       unstable="none"  unstable_date="none"
  -	done=100>
  +	done=15>
   
   <h2>Source</h2>
   

From ossp-cvs-owner@ossp.org  Fri Feb 15 21:15:52 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3FA07763D4; Fri, 15 Feb 2002 21:15:52 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/com contributors.wml developers.wml sponsors.wml
Message-Id: <20020215201552.3FA07763D4@mail.ossp.org>
Date: Fri, 15 Feb 2002 21:15:52 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   15-Feb-2002 21:15:52
  Branch: HEAD                             Handle: 2002021520155100

  Modified files:
    ossp-web/com            contributors.wml developers.wml sponsors.wml

  Log:
    more content

  Summary:
    Revision    Changes     Path
    1.2         +12 -1      ossp-web/com/contributors.wml
    1.2         +16 -1      ossp-web/com/developers.wml
    1.2         +18 -1      ossp-web/com/sponsors.wml
  ____________________________________________________________________________

  Index: ossp-web/com/contributors.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 contributors.wml
  --- ossp-web/com/contributors.wml	13 Feb 2002 16:35:02 -0000	1.1
  +++ ossp-web/com/contributors.wml	15 Feb 2002 20:15:51 -0000	1.2
  @@ -3,5 +3,16 @@
   
   <title>Community: Contributors</title>
   
  -<h1>Community: Contributors</h1>
  +The following people have contributed to the OSSP project:
  +
  +<p>
  +<define-tag person>
  +<tr>
  +  <td><b>%0</b></td>
  +  <td align=right>&nbsp;&lt;<a href="mailto:%1">%1</a>&gt;</td>
  +</tr>
  +</define-tag>
  +<table cellspacing=0 cellpadding=0 border=0>
  +   <person "Peter Simons"     "simons@computer.org">
  +</table>
   
  Index: ossp-web/com/developers.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 developers.wml
  --- ossp-web/com/developers.wml	13 Feb 2002 16:35:02 -0000	1.1
  +++ ossp-web/com/developers.wml	15 Feb 2002 20:15:51 -0000	1.2
  @@ -3,5 +3,20 @@
   
   <title>Community: Developers</title>
   
  -<h1>Community: Developers</h1>
  +The OSSP project team currently consists of the following developers:
  +
  +<p>
  +<define-tag person>
  +<tr>
  +  <td><b>%0</b></td>
  +  <td align=right>&nbsp;&lt;<a href="mailto:%1">%1</a>&gt;</td>
  +  <td>&nbsp;%2</td>
  +</tr>
  +</define-tag>
  +<table cellspacing=0 cellpadding=0 border=0>
  +   <person "Ralf S. Engelschall" "rse@ossp.org" "developer, project leader">
  +   <person "Thomas Lotterer"     "thl@ossp.org" "developer">
  +   <person "Peter Smej"          "ps@ossp.org"  "developer">
  +   <person "Michael Schloh"      "ms@ossp.org"  "developer">
  +</table>
   
  Index: ossp-web/com/sponsors.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 sponsors.wml
  --- ossp-web/com/sponsors.wml	13 Feb 2002 16:35:02 -0000	1.1
  +++ ossp-web/com/sponsors.wml	15 Feb 2002 20:15:51 -0000	1.2
  @@ -3,5 +3,22 @@
   
   <title>Community: Sponsors</title>
   
  -<h1>Community: Sponsors</h1>
  +The following sponsors support OSSP:
  +
  +<h2>Cable &amp; Wireless Deutschland GmbH</h2>
  +
  +<ul>
  +  <li>Hosting Rack-Space
  +  <li>Network Connectivity
  +  <li>Hardware
  +  <li>Manpower
  +</ul>
  +
  +<h2>Ralf S. Engelschall</h2>
  +
  +<ul>
  +  <li>Domain Registration
  +  <li>System Administration
  +  <li>Hardware
  +</ul>
   

From ossp-cvs-owner@ossp.org  Sat Feb 16 13:57:58 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7FCC4763F4; Sat, 16 Feb 2002 13:57:58 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cache cache.c cache.h
Message-Id: <20020216125758.7FCC4763F4@mail.ossp.org>
Date: Sat, 16 Feb 2002 13:57:58 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   16-Feb-2002 13:57:58
  Branch: HEAD                             Handle: 2002021612575701

  Modified files:
    ossp-pkg/cache          cache.c cache.h

  Log:
    flush my already done work

  Summary:
    Revision    Changes     Path
    1.2         +57 -0      ossp-pkg/cache/cache.c
    1.2         +53 -0      ossp-pkg/cache/cache.h
  ____________________________________________________________________________

  Index: ossp-pkg/cache/cache.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 cache.c
  --- ossp-pkg/cache/cache.c	9 Jan 2002 10:44:28 -0000	1.1
  +++ ossp-pkg/cache/cache.c	16 Feb 2002 12:57:57 -0000	1.2
  @@ -47,3 +47,60 @@
   #define TRUE  (!FALSE)
   #endif
   
  +/* forward declarations */
  +struct cache_st;
  +struct cache_obj_st;
  +
  +/* type definitions */
  +typedef struct cache_obj_st  cache_obj_t;
  +
  +/* support for relative pointers (offset pointers) */
  +typedef long op_t;
  +#define VP2OP(bp,vp) \
  +    (long)(((char *)(vp))-((char *)(bp)))
  +#define OP2VP(bp,op) \
  +    (void *)(((char *)(bp))+((char *)(op)))
  +
  +/* definition: top-level cache structure */
  +struct cache_st {
  +    /* top level access pointers */
  +    op_t             opHash;        /* pointer to hash table */
  +    op_t             opObjMRU;      /* pointer to MRU object */
  +    op_t             opObjLRU;      /* pointer to LRU object */
  +    op_t             opObjEmpty;    /* pointer to empty object */
  +
  +    /* information */
  +    int              bExpireReset;  /* whether expire resets on each access or is absolute */
  +    int              tExpireReset;  /* the optional expire reset time */
  +
  +    /* sub-structure information */
  +    op_t             opKeyIndex;    /* base address of key bucket index */
  +    op_t             opKeyBuckets;  /* base address of key bucket pool */
  +    int              nKeyBuckets;   /* number of buckets in key bucket pool */
  +    op_t             opValIndex;    /* base address of key bucket index */
  +    op_t             opValBuckets;  /* base address of value bucket pool */
  +    int              nValBuckets;   /* number of buckets in value bucket pool */
  +
  +    /* statistics */
  +    long             nInserts;
  +    long             nLookups;
  +    long             nLookupsSuccess;
  +    long             nRemoves;
  +
  +    /* callbacks */
  +    /* ... */
  +};
  +
  +/* definition: cache object */
  +struct cache_obj_st {
  +    int              bUsed;        /* used in an ongoing iteration */
  +    op_t             opHashNext;   /* next object in hash table collision chain */
  +    op_t             opQueuePrev;  /* previous object in LRU queue */
  +    op_t             opQueueNext;  /* next object in LRU queue */
  +    op_t             opKey;        /* pointer to first key segment in key index */
  +    size_t           nKey;         /* size of key in bytes */
  +    op_t             opVal;        /* pointer to first value segment in value index */
  +    size_t           nVal;         /* size of value in bytes */
  +    time_t           tExpire;      /* expire time of object */
  +};
  +
  Index: ossp-pkg/cache/cache.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 cache.h
  --- ossp-pkg/cache/cache.h	9 Jan 2002 10:44:28 -0000	1.1
  +++ ossp-pkg/cache/cache.h	16 Feb 2002 12:57:58 -0000	1.2
  @@ -31,5 +31,58 @@
   #ifndef __CACHE_H__
   #define __CACHE_H__
   
  +struct cache_st;
  +typedef cache_st cache_t;
  +
  +typedef enum {
  +    CACHE_OK = 0,
  +    CACHE_ERR_INVAL,
  +    CACHE_ERR_SYS
  +} cache_rc_t;
  +
  +typedef enum {
  +    CACHE_SET,
  +    CACHE_GET,
  +} cache_config_t;
  +
  +typedef enum {
  +    CACHE_ST_MAXKEY,
  +    CACHE_CB_MUTEXACQUIRE,
  +    CACHE_CB_MUTEXRELEASE,
  +    CACHE_CB_OBJECTREMOVE,
  +} cache_param_t;
  +
  +typedef enum {
  +    CACHE_INPLACE, /* re-arrange segments internally */
  +    CACHE_COPYOUT, /* copy as serialized object into new buffer */
  +    CACHE_MOVEOUT, /* move as serialized object into existing buffer */
  +} cache_fetch_t;
  +
  +typedef struct {
  +    void   *ptr;
  +    size_t  len;
  +} cache_blob_t;
  +
  +cache_rc_t cache_attach      (cache_t **cache, void *memptr, size_t memlen, size_t keyseg, size_t valseg);
  +cache_rc_t cache_config      (cache_t *cache, cache_config_t mode, cache_param_t id, ...);
  +cache_rc_t cache_detach      (cache_t *cache);
  +
  +cache_rc_t cache_insert      (cache_t *cache, cache_blob_t key, cache_blob_t  val, time_t now, time_t expire);
  +cache_rc_t cache_lookup      (cache_t *cache, cache_blob_t key, cache_obj_t **obj, time_t now);
  +cache_rc_t cache_remove      (cache_t *cache, cache_blob_t key);
  +
  +cache_rc_t cache_obj_size    (cache_obj_t *obj, size_t *size);
  +cache_rc_t cache_obj_fetch   (cache_obj_t *obj, cache_fetch_t mode, cache_blob_t *val);
  +cache_rc_t cache_obj_release (cache_obj_t *obj);
  +
  +cache_rc_t cache_fetch       (cache_t *cache, cache_iter_t *iter, cache_blob_t *val);
  +
  +cache_rc_t cache_iter_create (cache_t *cache, cache_iter_t *iter);
  +cache_rc_t cache_iter_key    (cache_t *cache, cache_iter_t *iter);
  +cache_rc_t cache_iter_destroy(cache_t *cache, cache_iter_t *iter);
  +
  +cache_rc_t cache_export      (cache_t *cache, void *);
  +cache_rc_t cache_import      (cache_t *cache, void *);
  +
   #endif /* __CACHE_H__ */
   

From ossp-cvs-owner@ossp.org  Sat Feb 16 16:34:36 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D7566763A2; Sat, 16 Feb 2002 16:34:35 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cache TODO
Message-Id: <20020216153435.D7566763A2@mail.ossp.org>
Date: Sat, 16 Feb 2002 16:34:35 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   16-Feb-2002 16:34:35
  Branch: HEAD                             Handle: 2002021615343500

  Modified files:
    ossp-pkg/cache          TODO

  Log:
    test commit

  Summary:
    Revision    Changes     Path
    1.4         +1  -0      ossp-pkg/cache/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/cache/TODO
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 TODO
  --- ossp-pkg/cache/TODO	10 Jan 2002 20:05:29 -0000	1.3
  +++ ossp-pkg/cache/TODO	16 Feb 2002 15:34:35 -0000	1.4
  @@ -1,3 +1,4 @@
   
   TODO
   ----
  +

From ossp-cvs-owner@ossp.org  Sat Feb 16 16:37:09 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 76011763A3; Sat, 16 Feb 2002 16:37:09 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cache TODO
Message-Id: <20020216153709.76011763A3@mail.ossp.org>
Date: Sat, 16 Feb 2002 16:37:09 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   16-Feb-2002 16:37:09
  Branch: HEAD                             Handle: 2002021615370900

  Modified files:
    ossp-pkg/cache          TODO

  Log:
    test commit2

  Summary:
    Revision    Changes     Path
    1.5         +1  -0      ossp-pkg/cache/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/cache/TODO
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 TODO
  --- ossp-pkg/cache/TODO	16 Feb 2002 15:34:35 -0000	1.4
  +++ ossp-pkg/cache/TODO	16 Feb 2002 15:37:09 -0000	1.5
  @@ -2,3 +2,4 @@
   TODO
   ----
   
  +

From ossp-cvs-owner@ossp.org  Mon Feb 18 08:53:13 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B017476523; Mon, 18 Feb 2002 08:53:12 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg index.wml
Message-Id: <20020218075312.B017476523@mail.ossp.org>
Date: Mon, 18 Feb 2002 08:53:12 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-web                         Date:   18-Feb-2002 08:53:12
  Branch: HEAD                             Handle: 2002021807531200

  Modified files:
    ossp-web/pkg            index.wml

  Log:
    typo

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-web/pkg/index.wml
  ____________________________________________________________________________

  Index: ossp-web/pkg/index.wml
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 index.wml
  --- ossp-web/pkg/index.wml	14 Feb 2002 10:00:55 -0000	1.2
  +++ ossp-web/pkg/index.wml	18 Feb 2002 07:53:12 -0000	1.3
  @@ -18,7 +18,7 @@
   
   The bootstrap packages will be the necessary tools and libraries for
   bootstrapping the OSSP developer and end-user build environments.
  -Currently this package cathegory still does not exists. It will be
  +Currently this package category still does not exists. It will be
   created later by integrating packages from the <i>Tools</i> and
   <i>Libraries</i> cathegories.
   [<a href="boot/">more</a>]

From ossp-cvs-owner@ossp.org  Tue Feb 19 14:00:15 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1928576364; Tue, 19 Feb 2002 14:00:14 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp fixme.h
Message-Id: <20020219130014.1928576364@mail.ossp.org>
Date: Tue, 19 Feb 2002 14:00:14 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   19-Feb-2002 14:00:14
  Branch: HEAD                             Handle: 2002021913001400

  Modified files:
    ossp-pkg/lmtp2nntp      fixme.h

  Log:
    this is dynamic now

  Summary:
    Revision    Changes     Path
    1.16        +0  -1      ossp-pkg/lmtp2nntp/fixme.h
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/fixme.h
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 fixme.h
  --- ossp-pkg/lmtp2nntp/fixme.h	14 Feb 2002 11:03:52 -0000	1.15
  +++ ossp-pkg/lmtp2nntp/fixme.h	19 Feb 2002 13:00:14 -0000	1.16
  @@ -13,7 +13,6 @@
       size_t     prefixlen;
       sa_addr_t *saa;
   };
  -#define MAXNEWSSERVICES 16
   struct nntp_st;
   typedef struct nntp_st nntp_t;
   #include "lmtp2nntp_nntp.h"

From ossp-cvs-owner@ossp.org  Wed Feb 20 16:42:28 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C098076523; Wed, 20 Feb 2002 16:42:27 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp fixme.h lmtp2nntp_config.c lmtp2nntp_ms...
Message-Id: <20020220154227.C098076523@mail.ossp.org>
Date: Wed, 20 Feb 2002 16:42:27 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   20-Feb-2002 16:42:27
  Branch: HEAD                             Handle: 2002022015422600

  Modified files:
    ossp-pkg/lmtp2nntp      fixme.h lmtp2nntp_config.c lmtp2nntp_msg.h

  Log:
    flush work done this week. New structure for headers. Basic loop of desired
    new header rewriting feature currently supports replacing a header, adding a
    header and regex matching finds the correct header and calls lib_var. Try
    ./lmtp2nntp -i 1.conf -h ':Reply-To:New-Reply:${xyz}' -h ::To:bv -h 21::ch:cv

  Summary:
    Revision    Changes     Path
    1.17        +18 -0      ossp-pkg/lmtp2nntp/fixme.h
    1.51        +336 -13    ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.3         +1  -0      ossp-pkg/lmtp2nntp/lmtp2nntp_msg.h
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/fixme.h
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 fixme.h
  --- ossp-pkg/lmtp2nntp/fixme.h	19 Feb 2002 13:00:14 -0000	1.16
  +++ ossp-pkg/lmtp2nntp/fixme.h	20 Feb 2002 15:42:26 -0000	1.17
  @@ -31,6 +31,7 @@
   
   struct headerrule_st;
   typedef struct headerrule_st headerrule_t;
  +#include <pcre.h>
   struct headerrule_st {
       headerrule_t *next;
       char         *carve; /* pri, regex, header, val carved out here, so free up only this */
  @@ -38,7 +39,24 @@
       char         *regex;
       char         *header;
       char         *val;
  +    pcre         *pcreRegex;
  +    pcre_extra   *pcreExtra;
   };
  +headerrule_t *FIXME1;
  +
  +struct headerdata_st;
  +typedef struct headerdata_st headerdata_t;
  +struct headerdata_st {
  +    headerdata_t *prev;
  +    headerdata_t *next;
  +    char *name;
  +    int ndata; /* =0 means data is invalid, =1 means use data.s, >1 means use data.m */
  +    union {
  +        char *s;
  +        char **m;
  +    } data;
  +};
  +headerdata_t *FIXME2;
   
   typedef struct {
       l2_context_t    ctx;
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.50 -r1.51 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	14 Feb 2002 15:11:08 -0000	1.50
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	20 Feb 2002 15:42:26 -0000	1.51
  @@ -39,6 +39,7 @@
   #include "pcre.h"
   #include "popt.h"
   #include "str.h"
  +#include "var.h"
   #include "val.h"
   
   /* library version check (compile-time) */
  @@ -103,6 +104,8 @@
       return L2_OK;
   }
   
  +static void headersimulation(lmtp2nntp_t *); //FIXME
  +
   void config_context(lmtp2nntp_t *ctx)
   {
       ex_t ex;
  @@ -539,6 +542,8 @@
               char *cpVal;
               headerrule_t *hrI;
               headerrule_t *hrP;
  +            const char *cpError;
  +            int iError;
   
               if (   (val_get(ctx->val, "option.headerrule", &ov) != VAL_OK)
                   || (ov->ndata <  0)
  @@ -554,8 +559,10 @@
                       log2(ctx, DEBUG, "cp = (data.m)[%d] = \"%s\"", i, cp);
   
                       hrNew = (headerrule_t *)mallocex(sizeof(headerrule_t));
  -                    hrNew->next   = NULL;
  -                    hrNew->carve  = NULL; // initialize variables which might have resources allocated that need to be cleaned up when an exception is caught
  +                    hrNew->next      = NULL;
  +                    hrNew->carve     = NULL;
  +                    hrNew->pcreRegex = NULL;
  +                    hrNew->pcreExtra = NULL;
                       
                       cp = hrNew->carve = strdupex(cp);
                       /* priority */
  @@ -600,8 +607,21 @@
                       hrNew->header = cpHeader;
                       hrNew->val    = cpVal;
   
  +                    if (cpRegex != NULL) {
  +                        /* compile regular expression into finite state machine and optimize */
  +                        if ((hrNew->pcreRegex = pcre_compile(cpRegex, PCRE_CASELESS, &cpError, &iError, NULL)) == NULL) {
  +                            log3(ctx, ERROR, "option --headerrule, regex (%s) failed at pos %d with %s", cpRegex, iError, cpError);
  +                            throw(0,0,0);
  +                        }
  +                        hrNew->pcreExtra = pcre_study(hrNew->pcreRegex, 0, &cpError);
  +                        if (cpError != NULL) {
  +                            log1(ctx, ERROR, "option --headerrule, regex optimization failed with %s", cpError);
  +                            throw(0,0,0);
  +                        }
  +                    }
  +
                       if (ctx->option_firstheaderrule == NULL)
  -                        ctx->option_firstheaderrule = (headerrule_t *)hrNew; // interesting point since hrNew is declared volatile we have to cast it. This makes me unhappy as it enlarges the code which is far from the spirit of lib_ex
  +                        ctx->option_firstheaderrule = (headerrule_t *)hrNew; /* first */
                       else {
                           for (hrP = NULL, hrI = ctx->option_firstheaderrule;
                                hrI != NULL && hrI->pri <= hrNew->pri;
  @@ -611,23 +631,20 @@
                           if (hrP != NULL)
                               hrP->next = (headerrule_t *)hrNew; /* append */
                           else
  -                            ctx->option_firstheaderrule = (headerrule_t *)hrNew; /* newfirst */
  +                            ctx->option_firstheaderrule = (headerrule_t *)hrNew; /* new first */
                       }
  -                    /* after linking the structure into a parental-controlled structure we
  -                       expect that the parental cleanup will handle normal and exceptional
  -                       resource releasing and therefore we *must* reset this variable initialization
  -                       to avoid accidental local cleanup! In fact, this code will fail if the
  -                       next statement is omitted.
  -                     */
  -                    hrNew = NULL; // initialize variables which might have resources allocated that need to be cleaned up when an exception is caught
  -
  +                    hrNew = NULL; /* release cleanup responsibility */
                   }
               }
           }
  -        cleanup { // make sure the conditional variables are *always* proper initialized and cleared volatile
  +        cleanup {
               if (hrNew != NULL) {
                   if (hrNew->carve != NULL)
                       freeex(hrNew->carve);
  +                if (hrNew->pcreRegex != NULL)
  +                    free(hrNew->pcreRegex);
  +                if (hrNew->pcreExtra != NULL)
  +                    free(hrNew->pcreExtra);
                   freeex((headerrule_t *)hrNew);
               }
           }
  @@ -1004,6 +1021,8 @@
       catch (ex)
           rethrow;
   
  +    headersimulation(ctx); //FIXME
  +
   //void testpcre(void)
   {
       char       *szRegex;
  @@ -1076,4 +1095,308 @@
   
   CUS:
       return;
  +}
  +
  +
  +
  +static void headerdestroy(headerdata_t *hdC)
  +{
  +    int i;
  +
  +    if (hdC->ndata > 1) {
  +        for (i = 0; i < hdC->ndata; i++) {
  +            if (hdC->data.m[i] == NULL)
  +                break;
  +            free(hdC->data.m[i]);
  +        }
  +        free (hdC->data.m);
  +    } else
  +    if (hdC->ndata == 1)
  +        if (hdC->data.s != NULL)
  +            free(hdC->data.s);
  +    if (hdC->name != NULL)
  +        free(hdC->name);
  +    if (hdC->prev != NULL && hdC->prev->next == hdC)
  +        return; //FIXME still linked, cannot be destroyed
  +    if (hdC->next != NULL && hdC->next->prev == hdC)
  +        return; //FIXME still linked, cannot be destroyed
  +    free(hdC);
  +}
  +
  +static void headerdelete(headerdata_t *hdC)
  +{
  +    if (hdC->prev != NULL)
  +        hdC->prev->next = hdC->next;
  +    hdC->next = NULL;
  +    if (hdC->next != NULL)
  +        hdC->next->prev = hdC->prev;
  +    hdC->prev = NULL;
  +    headerdestroy(hdC);
  +}
  +
  +static void headerreplace(headerdata_t *hdC, headerdata_t *hdNew)
  +{
  +    hdNew->prev = hdC->prev;
  +    hdC->prev = NULL;
  +    hdNew->next = hdC->next;
  +    hdC->next = NULL;
  +    headerdestroy(hdC);
  +}
  +
  +static headerdata_t *headercreate(void)
  +{
  +    ex_t ex;
  +    volatile headerdata_t *hdNew = NULL;
  +    try {
  +        hdNew = mallocex(sizeof(headerdata_t));
  +        hdNew->prev  = NULL;
  +        hdNew->next  = NULL;
  +        hdNew->name  = NULL;
  +        hdNew->ndata = 0;
  +    }
  +    catch (ex) {
  +        if (hdNew != NULL)
  +            free((headerdata_t *)hdNew);
  +        rethrow;
  +    }
  +    return (headerdata_t *)hdNew;
  +}
  +#if 0
  +//headermatrix()
  +{
  +    volatile header_t *hNew = NULL;
  +    try {
  +        char *cp;
  +
  +        cp = NULL;
  +        while ((cp = argz_next(ctx->msg->azHeaders, ctx->msg->asHeaders, cp)) != NULL) {
  +            hNew = mallocex(sizeof(header_t));
  +            //FIXME
  +        }
  +    }
  +    cleanup {
  +        if (hNew != NULL)
  +            free(hNew);
  +    }
  +    catch(ex) {
  +        rethrow;
  +    }
  +}
  +#endif
  +
  +static var_config_t ctx_lookup_cfg = {
  +    '$',          /* varinit       */ 
  +    '{',          /* startdelim    */ 
  +    '}',          /* enddelim      */ 
  +    '[',          /* startindex    */ 
  +    ']',          /* endindex      */ 
  +    '#',          /* current_index */ 
  +    '\\',         /* escape        */ 
  +    "a-zA-Z0-9_.-" /* namechars     */ 
  +};
  +
  +static var_rc_t ctx_lookup(
  +    void *_ctx, 
  +    const char *var_ptr, size_t var_len, int var_idx,
  +    const char **val_ptr, size_t *val_len, size_t *val_size)
  +{
  +    lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx;
  +    /*FIXME
  +    const char *name;
  +    size_t len;
  +    char *cp;
  +    */
  +    var_rc_t rc;
  +
  +    log2(ctx, DEBUG, "lookup variable \"%s\" (%d)", var_ptr, var_len);
  +    rc = VAR_ERR_UNDEFINED_VARIABLE;
  +    if (strncasecmp(var_ptr, "test", var_len) == 0) {
  +    }
  +    else if (strncasecmp(var_ptr, "xyz", var_len) == 0) {
  +        *val_ptr = "Hello, World!";
  +        *val_len = strlen("Hello, World!");
  +        *val_size = 0;
  +        rc = VAR_OK;
  +    }
  +    if (rc == VAR_OK)
  +        log4(ctx, DEBUG, "lookup variable \"%s\" (%d) ok: result is \"%s\" (%d)", var_ptr, var_len, *val_ptr, *val_len);
  +    else
  +        log3(ctx, DEBUG, "lookup variable \"%s\" (%d) failed: %s", var_ptr, var_len, var_strerror(rc));
  +    return rc;
  +}
  +
  +static void headerrewrite(lmtp2nntp_t *ctx)
  +{
  +    headerrule_t *hrI;
  +    headerdata_t *hdI, *hdNew;
  +    /*
  +    char *cp;
  +    int i;
  +    char *cpPri;
  +    char *cpRegex;
  +    char *cpHeader;
  +    char *cpVal;
  +    headerrule_t *hrP;
  +    hrNew->pri    = atoi(cpPri);
  +    hrNew->regex  = cpRegex;
  +    hrNew->header = cpHeader;
  +    hrNew->val    = cpVal;
  +    char       *szRegex;
  +    pcre       *pcreRegex;
  +    pcre_extra *pcreExtra;
  +    const char *szError;
  +    int         nErrorOffset;
  +    int         opt;
  +    char       *buf;
  +    int         buf_size;
  +#define OVECSIZE 30
  +    int         ovec[OVECSIZE];
  +    int         i;
  +    const char **cpList;
  +    */
  +    int         ovec[OVECSIZE];
  +    int         iCheck;
  +
  +    { //FIXME debug code block
  +        int i;
  +
  +        log0(ctx, DEBUG, "FIXME trace ---------- headerrewrite() ----------");
  +        for (hrI = ctx->option_firstheaderrule; hrI != NULL; hrI = hrI->next)
  +            log1(ctx, DEBUG, "hrI->header=%s", hrI->header);
  +        for (hdI = ctx->msg->hdFirst; hdI != NULL; hdI = hdI->next) {
  +            if (hdI->ndata == 0)
  +                log1(ctx, DEBUG, "hdI->name=%s, (NO DATA)", hdI->name);
  +            if (hdI->ndata == 1)
  +                log2(ctx, DEBUG, "hdI->name=%s, hdI->data.s=%s", hdI->name, hdI->data.s);
  +            if (hdI->ndata > 1)
  +                for (i = 0; i < hdI->ndata; i++)
  +                    log3(ctx, DEBUG, "hdI->name=%s, hdI->data.m[%d]=%s", hdI->name, i, hdI->data.m[i]);
  +        }
  +    }
  +    
  +    for (hrI = ctx->option_firstheaderrule; hrI != NULL; hrI = hrI->next) { /* for each rule */
  +        //log1(ctx, DEBUG, "FIXME trace loop hrI=%.8lx", hrI);
  +        if (hrI->regex != NULL) {
  +            log1(ctx, DEBUG, "rule has regex %s", hrI->regex);
  +            for (hdI = ctx->msg->hdFirst; hdI != NULL; hdI = hdI->next) { /* for each header */
  +                //log2(ctx, DEBUG, "FIXME trace loop hdI=%.8lx, hI->name=\"%s\"", hdI, hdI->name);
  +                if (hdI->name == NULL || strlen(hdI->name) == 0)
  +                    continue; //FIXME header w/o name cannot happen normally
  +                iCheck = pcre_exec(hrI->pcreRegex, hrI->pcreExtra, hdI->name, strlen(hdI->name), 0, 0, ovec, OVECSIZE);
  +                log1(ctx, DEBUG, "FIXME trace iCheck=%d", iCheck);
  +                if (iCheck >= 1) {
  +                    log0(ctx, DEBUG, "regex matches");
  +                    hdNew = headercreate();
  +                    hdNew->name = strdupex(hrI->header); //FIXME rename ->header to ->name
  +                    {
  +                    var_rc_t var_rc;
  +                    char *res_ptr;
  +                    if ((var_rc = var_expand(hrI->val, strlen(hrI->val), &res_ptr, NULL,
  +                                             ctx_lookup, ctx, &ctx_lookup_cfg, TRUE)) != VAR_OK) {
  +                        log2(ctx, ERROR, "expansion of '%s' failed: %s", hrI->val, var_strerror(var_rc));
  +                    }
  +                    log2(ctx, ERROR, "expansion of '%s' succeeded: %s", hrI->val, res_ptr);
  +                    hdNew->data.s = res_ptr;
  +                    hdNew->ndata = 1;
  +                    /*FIXME clean up data.m */
  +                    headerreplace(hdI, hdNew);
  +                    if (hdNew->prev == NULL)
  +                        ctx->msg->hdFirst = hdNew;
  +                    hdI = hdNew;
  +                    }
  +                }
  +            }
  +        }
  +        else {
  +            log1(ctx, DEBUG, "rule has no regex but static header %s", hrI->header);
  +            hdNew = headercreate();
  +            hdNew->name = strdupex(hrI->header); //FIXME rename ->header to ->name
  +            hdNew->data.s = strdupex(hrI->val);
  +            hdNew->ndata = 1;
  +            /*FIXME clean up data.m */
  +            for (hdI = ctx->msg->hdFirst; hdI != NULL; hdI = hdI->next) { /* for each header */
  +                if (hdI->name == NULL || strlen(hdI->name) == 0)
  +                    continue; //FIXME header w/o name cannot happen normally
  +                log2(ctx, DEBUG, "hrI->header=%s, hdI->name=%s", hrI->header, hdI->name);
  +                if (strcmp(hrI->header, hdI->name) == 0)
  +                    break;
  +            }
  +            if (hdI != NULL) {
  +                log1(ctx, DEBUG, "replacing header %s", hrI->header);
  +                headerreplace(hdI, hdNew);
  +                if (hdNew->prev == NULL)
  +                    ctx->msg->hdFirst = hdNew;
  +            }
  +            else {
  +                log1(ctx, DEBUG, "appending header %s", hrI->header);
  +                for (hdI = ctx->msg->hdFirst; hdI->next != NULL; hdI = hdI->next);
  +                hdI->next = hdNew;
  +                hdNew->prev = hdI;
  +            }
  +        }
  +    }
  +
  +    { //FIXME debug code block
  +        int i;
  +
  +        log0(ctx, DEBUG, "FIXME trace ---------- headerrewrite() ---------- FINISH");
  +        for (hrI = ctx->option_firstheaderrule; hrI != NULL; hrI = hrI->next)
  +            log1(ctx, DEBUG, "hrI->header=%s", hrI->header);
  +        for (hdI = ctx->msg->hdFirst; hdI != NULL; hdI = hdI->next) {
  +            if (hdI->ndata == 0)
  +                log1(ctx, DEBUG, "hdI->name=%s, (NO DATA)", hdI->name);
  +            if (hdI->ndata == 1)
  +                log2(ctx, DEBUG, "hdI->name=%s, hdI->data.s=%s", hdI->name, hdI->data.s);
  +            if (hdI->ndata > 1)
  +                for (i = 0; i < hdI->ndata; i++)
  +                    log3(ctx, DEBUG, "hdI->name=%s, hdI->data.m[%d]=%s", hdI->name, i, hdI->data.m[i]);
  +        }
  +    }
  +}
  +
  +static void headersimulation(lmtp2nntp_t *ctx)
  +{
  +    headerdata_t *hdI, *hdNew;
  +
  +    ctx->msg = msg_create();
  +
  +    log0(ctx, DEBUG, "FIXME simulation - GO");
  +    char *replyto[4] = { "foo@example.com", "bar@example.com", "quux@example.com", NULL };
  +
  +    hdNew = headercreate();
  +    hdNew->name = "To";
  +    hdNew->data.s = "foo@invalid.com";
  +    hdNew->ndata = 1;
  +    ctx->msg->hdFirst = hdNew;
  +    hdI = hdNew;
  +
  +    hdNew = headercreate();
  +    hdNew->name = "Reply-To";
  +    hdNew->data.m = replyto;
  +    hdNew->ndata = 3;
  +    hdI->next = hdNew;
  +    hdI = hdNew;
  +
  +    hdNew = headercreate();
  +    hdNew->name = "Subject";
  +    hdNew->data.s = "a tiny little test";
  +    hdNew->ndata = 1;
  +    hdI->next = hdNew;
  +    hdI = hdNew;
  +
  +    hdNew = headercreate();
  +    hdNew->name = "Date";
  +    hdNew->data.s = "Mon, 18 Feb 2002 09:43:52 +0100";
  +    hdNew->ndata = 1;
  +    hdI->next = hdNew;
  +    hdI = hdNew;
  +
  +    hdNew = headercreate();
  +    hdNew->name = "Message-ID";
  +    hdNew->data.s = "<200201172300.AAA29400@procter012.pg-cw.de>";
  +    hdNew->ndata = 1;
  +    hdI->next = hdNew;
  +    hdI = hdNew;
  +
  +    headerrewrite(ctx);
   }
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 lmtp2nntp_msg.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.h	31 Dec 2001 15:15:36 -0000	1.2
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.h	20 Feb 2002 15:42:26 -0000	1.3
  @@ -39,6 +39,7 @@
       char   *cpMsg;        /* the wholly message to be received by DATA command */
       char   *azHeaders;    /* header part of message above */
       size_t  asHeaders;
  +    struct headerdata_st *hdFirst; /*FIXME i want headerdata_t here */
       char   *cpFid;        /* foreign (aka sendmail queue) id from parsing headers */
       char   *cpBody;       /* body part of message above */
       char   *cpMsgid;

From ossp-cvs-owner@ossp.org  Thu Feb 21 16:47:55 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1140976364; Thu, 21 Feb 2002 16:47:54 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c
Message-Id: <20020221154754.1140976364@mail.ossp.org>
Date: Thu, 21 Feb 2002 16:47:54 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   21-Feb-2002 16:47:54
  Branch: HEAD                             Handle: 2002022115475400

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c

  Log:
    Basic loop of desired new header rewriting feature now supports deleting a
    header and regex matching replaces backreferencing arguments in header name
    and header value.

  Summary:
    Revision    Changes     Path
    1.52        +178 -46    ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.51 -r1.52 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	20 Feb 2002 15:42:26 -0000	1.51
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	21 Feb 2002 15:47:54 -0000	1.52
  @@ -1140,6 +1140,10 @@
       hdC->prev = NULL;
       hdNew->next = hdC->next;
       hdC->next = NULL;
  +    if (hdNew->prev != NULL)
  +        hdNew->prev->next = hdNew;
  +    if (hdNew->next != NULL)
  +        hdNew->next->prev = hdNew;
       headerdestroy(hdC);
   }
   
  @@ -1208,7 +1212,7 @@
       */
       var_rc_t rc;
   
  -    log2(ctx, DEBUG, "lookup variable \"%s\" (%d)", var_ptr, var_len);
  +    log2(ctx, DEBUG, "ctx_lookup variable \"%s\" (%d)", var_ptr, var_len);
       rc = VAR_ERR_UNDEFINED_VARIABLE;
       if (strncasecmp(var_ptr, "test", var_len) == 0) {
       }
  @@ -1219,9 +1223,59 @@
           rc = VAR_OK;
       }
       if (rc == VAR_OK)
  -        log4(ctx, DEBUG, "lookup variable \"%s\" (%d) ok: result is \"%s\" (%d)", var_ptr, var_len, *val_ptr, *val_len);
  +        log4(ctx, DEBUG, "ctx_lookup variable \"%s\" (%d) ok: result is \"%s\" (%d)", var_ptr, var_len, *val_ptr, *val_len);
       else
  -        log3(ctx, DEBUG, "lookup variable \"%s\" (%d) failed: %s", var_ptr, var_len, var_strerror(rc));
  +        log3(ctx, DEBUG, "ctx_lookup variable \"%s\" (%d) failed: %s", var_ptr, var_len, var_strerror(rc));
  +    return rc;
  +}
  +
  +struct regex_ctx_st; //FIXME go into a header!
  +typedef struct regex_ctx_st regex_ctx_t;
  +struct regex_ctx_st {
  +    int            nMatch;
  +    const char   **acpMatch;
  +    l2_env_t      *l2_env;
  +    l2_channel_t  *l2;
  +};
  +
  +static var_config_t regex_lookup_cfg = {
  +    '$',          /* varinit       */ 
  +    '{',          /* startdelim    */ 
  +    '}',          /* enddelim      */ 
  +    '[',          /* startindex    */ //FIXME
  +    ']',          /* endindex      */ //FIXME
  +    '#',          /* current_index */ //FIXME
  +    '\\',         /* escape        */ 
  +    "0-9"         /* namechars     */ 
  +};
  +
  +static var_rc_t regex_lookup(
  +    void *_ctx, 
  +    const char *var_ptr, size_t var_len, int var_idx,
  +    const char **val_ptr, size_t *val_len, size_t *val_size)
  +{
  +    regex_ctx_t *ctx = (regex_ctx_t *)_ctx;
  +    /*FIXME
  +    const char *name;
  +    size_t len;
  +    char *cp;
  +    */
  +    var_rc_t rc;
  +    int i;
  +
  +    log2(ctx, DEBUG, "rgx_lookup variable \"%s\" (%d)", var_ptr, var_len);
  +    rc = VAR_ERR_UNDEFINED_VARIABLE;
  +    i = atoi(var_ptr); /* works w '}' but '\0' termination as well */
  +    if (i <= ctx->nMatch) {
  +        *val_ptr = ctx->acpMatch[i];
  +        *val_len = strlen(ctx->acpMatch[i]);
  +        *val_size = 0;
  +        rc = VAR_OK;
  +    }
  +    if (rc == VAR_OK)
  +        log4(ctx, DEBUG, "rgx_lookup variable \"%s\" (%d) ok: result is \"%s\" (%d)", var_ptr, var_len, *val_ptr, *val_len);
  +    else
  +        log3(ctx, DEBUG, "rgx_lookup variable \"%s\" (%d) failed: %s", var_ptr, var_len, var_strerror(rc));
       return rc;
   }
   
  @@ -1251,59 +1305,114 @@
       int         buf_size;
   #define OVECSIZE 30
       int         ovec[OVECSIZE];
  -    int         i;
       const char **cpList;
       */
  -    int         ovec[OVECSIZE];
  -    int         iCheck;
  +    regex_ctx_t *regex_ctx;
  +    int            ovec[OVECSIZE];
   
       { //FIXME debug code block
           int i;
  +        headerrule_t *hrD;
  +        headerdata_t *hdD;
   
           log0(ctx, DEBUG, "FIXME trace ---------- headerrewrite() ----------");
  -        for (hrI = ctx->option_firstheaderrule; hrI != NULL; hrI = hrI->next)
  -            log1(ctx, DEBUG, "hrI->header=%s", hrI->header);
  -        for (hdI = ctx->msg->hdFirst; hdI != NULL; hdI = hdI->next) {
  -            if (hdI->ndata == 0)
  -                log1(ctx, DEBUG, "hdI->name=%s, (NO DATA)", hdI->name);
  -            if (hdI->ndata == 1)
  -                log2(ctx, DEBUG, "hdI->name=%s, hdI->data.s=%s", hdI->name, hdI->data.s);
  -            if (hdI->ndata > 1)
  -                for (i = 0; i < hdI->ndata; i++)
  -                    log3(ctx, DEBUG, "hdI->name=%s, hdI->data.m[%d]=%s", hdI->name, i, hdI->data.m[i]);
  +        for (hrD = ctx->option_firstheaderrule; hrD != NULL; hrD = hrD->next)
  +            log1(ctx, DEBUG, "hrD->header=%s", hrD->header);
  +        for (hdD = ctx->msg->hdFirst; hdD != NULL; hdD = hdD->next) {
  +            if (hdD->ndata == 0)
  +                log1(ctx, DEBUG, "hdD->name=%s: (NO DATA)", hdD->name);
  +            if (hdD->ndata == 1)
  +                log2(ctx, DEBUG, "hdD->name:hdD->data.s    %s: %s", hdD->name, hdD->data.s);
  +            if (hdD->ndata > 1)
  +                for (i = 0; i < hdD->ndata; i++)
  +                    log3(ctx, DEBUG, "hdD->name:hdD->data.m[%d] %s: %s", i, hdD->name, hdD->data.m[i]);
           }
       }
       
  +    regex_ctx = (regex_ctx_t *)mallocex(sizeof(regex_ctx_t));
  +    regex_ctx->nMatch = 0;
  +    regex_ctx->acpMatch = NULL;
  +    regex_ctx->l2_env = ctx->l2_env;
  +    regex_ctx->l2 = ctx->l2;
       for (hrI = ctx->option_firstheaderrule; hrI != NULL; hrI = hrI->next) { /* for each rule */
           //log1(ctx, DEBUG, "FIXME trace loop hrI=%.8lx", hrI);
  +        { //FIXME debug code block
  +            int i;
  +            headerrule_t *hrD;
  +            headerdata_t *hdD;
  +
  +            log0(ctx, DEBUG, "FIXME trace ---------- headerrewrite() ---------- MIDDLE");
  +            for (hrD = ctx->option_firstheaderrule; hrD != NULL; hrD = hrD->next)
  +                log1(ctx, DEBUG, "hrD->header=%s", hrD->header);
  +            for (hdD = ctx->msg->hdFirst; hdD != NULL; hdD = hdD->next) {
  +                //log3(ctx, DEBUG, "hdD=%.8lx, hdD->name=%.8lx, hdD->data.s=%.8lx", (long)hdD, (long)&hdD->name, (long)&hdD->data.s);
  +                if (hdD->ndata == 0)
  +                    log1(ctx, DEBUG, "hdD->name=%s: (NO DATA)", hdD->name);
  +                if (hdD->ndata == 1)
  +                    log2(ctx, DEBUG, "hdD->name:hdD->data.s    %s: %s", hdD->name, hdD->data.s);
  +                if (hdD->ndata > 1)
  +                    for (i = 0; i < hdD->ndata; i++)
  +                        log3(ctx, DEBUG, "hdD->name:hdD->data.m[%d] %s: %s", i, hdD->name, hdD->data.m[i]);
  +            }
  +        }
           if (hrI->regex != NULL) {
               log1(ctx, DEBUG, "rule has regex %s", hrI->regex);
               for (hdI = ctx->msg->hdFirst; hdI != NULL; hdI = hdI->next) { /* for each header */
                   //log2(ctx, DEBUG, "FIXME trace loop hdI=%.8lx, hI->name=\"%s\"", hdI, hdI->name);
  -                if (hdI->name == NULL || strlen(hdI->name) == 0)
  -                    continue; //FIXME header w/o name cannot happen normally
  -                iCheck = pcre_exec(hrI->pcreRegex, hrI->pcreExtra, hdI->name, strlen(hdI->name), 0, 0, ovec, OVECSIZE);
  -                log1(ctx, DEBUG, "FIXME trace iCheck=%d", iCheck);
  -                if (iCheck >= 1) {
  -                    log0(ctx, DEBUG, "regex matches");
  +                if (hdI->name == NULL || strlen(hdI->name) == 0 || hdI->ndata == 0)
  +                    continue;
  +                regex_ctx->nMatch = pcre_exec(hrI->pcreRegex, hrI->pcreExtra, hdI->name, strlen(hdI->name), 0, 0, ovec, OVECSIZE);
  +                if (regex_ctx->nMatch >= 1) {
  +                    int i;
  +                    char *cp;
  +                    log1(ctx, DEBUG, "regex matches, %d references", regex_ctx->nMatch);
  +                    pcre_get_substring_list(hdI->name, ovec, regex_ctx->nMatch, &regex_ctx->acpMatch);
  +                    if (regex_ctx->acpMatch != NULL)
  +                        for (i = 0; i < regex_ctx->nMatch; i++)
  +                            log2(ctx, DEBUG, "regex reference[%d]=\'%s\'", i, regex_ctx->acpMatch[i] == NULL ? "(UNDEFINED)" : regex_ctx->acpMatch[i]);
                       hdNew = headercreate();
  -                    hdNew->name = strdupex(hrI->header); //FIXME rename ->header to ->name
  +                    /* expanding regex references into header name */
  +                    {
  +                        var_rc_t var_rc;
  +                        char *res_ptr;
  +                        log1(ctx, DEBUG, "expanding regex references in headername '%s'", hrI->header);
  +                        if ((var_rc = var_expand(hrI->header, strlen(hrI->header), &res_ptr, NULL,
  +                                                 regex_lookup, regex_ctx, &regex_lookup_cfg, TRUE)) != VAR_OK) {
  +                            log2(ctx, ERROR, "expansion of '%s' failed: %s", hrI->header, var_strerror(var_rc));
  +                        }
  +                        log1(ctx, DEBUG, "expansion result '%s'", res_ptr);
  +                        hdNew->name = res_ptr; //FIXME rename ->header to ->name
  +                    }
  +                    /* expanding regex references into header value */
  +                    {
  +                        var_rc_t var_rc;
  +                        char *res_ptr;
  +                        log1(ctx, DEBUG, "expanding regex references in header value '%s'", hrI->val);
  +                        if ((var_rc = var_expand(hrI->val, strlen(hrI->val), &res_ptr, NULL,
  +                                                 regex_lookup, regex_ctx, &regex_lookup_cfg, TRUE)) != VAR_OK) {
  +                            log2(ctx, ERROR, "expansion of '%s' failed: %s", hrI->val, var_strerror(var_rc));
  +                        }
  +                        log1(ctx, DEBUG, "expansion result '%s'", res_ptr);
  +                        cp = res_ptr;
  +                    }
  +                    /* expanding header and other variables into header value */
                       {
  -                    var_rc_t var_rc;
  -                    char *res_ptr;
  -                    if ((var_rc = var_expand(hrI->val, strlen(hrI->val), &res_ptr, NULL,
  -                                             ctx_lookup, ctx, &ctx_lookup_cfg, TRUE)) != VAR_OK) {
  -                        log2(ctx, ERROR, "expansion of '%s' failed: %s", hrI->val, var_strerror(var_rc));
  +                        var_rc_t var_rc;
  +                        char *res_ptr;
  +                        log1(ctx, DEBUG, "expanding variables in header value '%s'", hrI->val);
  +                        if ((var_rc = var_expand(cp, strlen(cp), &res_ptr, NULL,
  +                                                 ctx_lookup, ctx, &ctx_lookup_cfg, TRUE)) != VAR_OK) {
  +                            log2(ctx, ERROR, "expansion of '%s' failed: %s", cp, var_strerror(var_rc));
  +                        }
  +                        log1(ctx, DEBUG, "expansion result '%s'", res_ptr);
  +                        hdNew->data.s = res_ptr;
  +                        hdNew->ndata = 1;
                       }
  -                    log2(ctx, ERROR, "expansion of '%s' succeeded: %s", hrI->val, res_ptr);
  -                    hdNew->data.s = res_ptr;
  -                    hdNew->ndata = 1;
                       /*FIXME clean up data.m */
                       headerreplace(hdI, hdNew);
                       if (hdNew->prev == NULL)
                           ctx->msg->hdFirst = hdNew;
                       hdI = hdNew;
  -                    }
                   }
               }
           }
  @@ -1311,9 +1420,16 @@
               log1(ctx, DEBUG, "rule has no regex but static header %s", hrI->header);
               hdNew = headercreate();
               hdNew->name = strdupex(hrI->header); //FIXME rename ->header to ->name
  -            hdNew->data.s = strdupex(hrI->val);
  -            hdNew->ndata = 1;
  -            /*FIXME clean up data.m */
  +            if (hrI->val == NULL) {
  +                log0(ctx, DEBUG, "marking deleted");
  +                /*FIXME clean up data.s and data.m */
  +                hdNew->ndata = 0;
  +            }
  +            else {
  +                hdNew->data.s = strdupex(hrI->val);
  +                hdNew->ndata = 1;
  +                /*FIXME clean up data.m */
  +            }
               for (hdI = ctx->msg->hdFirst; hdI != NULL; hdI = hdI->next) { /* for each header */
                   if (hdI->name == NULL || strlen(hdI->name) == 0)
                       continue; //FIXME header w/o name cannot happen normally
  @@ -1323,9 +1439,17 @@
               }
               if (hdI != NULL) {
                   log1(ctx, DEBUG, "replacing header %s", hrI->header);
  +                log3(ctx, DEBUG, "ctx->msg->hdFirst=%.8lx, hdI      =%.8lx, hdNew      =%.8lx", ctx->msg->hdFirst, hdI, hdNew);
  +                log2(ctx, DEBUG, "                            hdI->prev=%.8lx, hdNew->prev=%.8lx", hdI->prev, hdNew->prev);
  +                log2(ctx, DEBUG, "                            hdI->next=%.8lx, hdNew->next=%.8lx", hdI->next, hdNew->next);
                   headerreplace(hdI, hdNew);
  -                if (hdNew->prev == NULL)
  +                log3(ctx, DEBUG, "ctx->msg->hdFirst=%.8lx, hdI      =%.8lx, hdNew      =%.8lx", ctx->msg->hdFirst, hdI, hdNew);
  +                log2(ctx, DEBUG, "                            hdI->prev=%.8lx, hdNew->prev=%.8lx", hdI->prev, hdNew->prev);
  +                log2(ctx, DEBUG, "                            hdI->next=%.8lx, hdNew->next=%.8lx", hdI->next, hdNew->next);
  +                if (hdNew->prev == NULL) {
  +                    log0(ctx, DEBUG, "FIXME trace #1");
                       ctx->msg->hdFirst = hdNew;
  +                }
               }
               else {
                   log1(ctx, DEBUG, "appending header %s", hrI->header);
  @@ -1338,18 +1462,20 @@
   
       { //FIXME debug code block
           int i;
  +        headerrule_t *hrD;
  +        headerdata_t *hdD;
   
           log0(ctx, DEBUG, "FIXME trace ---------- headerrewrite() ---------- FINISH");
  -        for (hrI = ctx->option_firstheaderrule; hrI != NULL; hrI = hrI->next)
  -            log1(ctx, DEBUG, "hrI->header=%s", hrI->header);
  -        for (hdI = ctx->msg->hdFirst; hdI != NULL; hdI = hdI->next) {
  -            if (hdI->ndata == 0)
  -                log1(ctx, DEBUG, "hdI->name=%s, (NO DATA)", hdI->name);
  -            if (hdI->ndata == 1)
  -                log2(ctx, DEBUG, "hdI->name=%s, hdI->data.s=%s", hdI->name, hdI->data.s);
  -            if (hdI->ndata > 1)
  -                for (i = 0; i < hdI->ndata; i++)
  -                    log3(ctx, DEBUG, "hdI->name=%s, hdI->data.m[%d]=%s", hdI->name, i, hdI->data.m[i]);
  +        for (hrD = ctx->option_firstheaderrule; hrD != NULL; hrD = hrD->next)
  +            log1(ctx, DEBUG, "hrD->header=%s", hrD->header);
  +        for (hdD = ctx->msg->hdFirst; hdD != NULL; hdD = hdD->next) {
  +            if (hdD->ndata == 0)
  +                log1(ctx, DEBUG, "hdD->name=%s: (NO DATA)", hdD->name);
  +            if (hdD->ndata == 1)
  +                log2(ctx, DEBUG, "hdD->name:hdD->data.s    %s: %s", hdD->name, hdD->data.s);
  +            if (hdD->ndata > 1)
  +                for (i = 0; i < hdD->ndata; i++)
  +                    log3(ctx, DEBUG, "hdD->name:hdD->data.m[%d] %s: %s", i, hdD->name, hdD->data.m[i]);
           }
       }
   }
  @@ -1368,6 +1494,7 @@
       hdNew->data.s = "foo@invalid.com";
       hdNew->ndata = 1;
       ctx->msg->hdFirst = hdNew;
  +    hdNew->prev = NULL;
       hdI = hdNew;
   
       hdNew = headercreate();
  @@ -1375,6 +1502,7 @@
       hdNew->data.m = replyto;
       hdNew->ndata = 3;
       hdI->next = hdNew;
  +    hdNew->prev = hdI;
       hdI = hdNew;
   
       hdNew = headercreate();
  @@ -1382,6 +1510,7 @@
       hdNew->data.s = "a tiny little test";
       hdNew->ndata = 1;
       hdI->next = hdNew;
  +    hdNew->prev = hdI;
       hdI = hdNew;
   
       hdNew = headercreate();
  @@ -1389,6 +1518,7 @@
       hdNew->data.s = "Mon, 18 Feb 2002 09:43:52 +0100";
       hdNew->ndata = 1;
       hdI->next = hdNew;
  +    hdNew->prev = hdI;
       hdI = hdNew;
   
       hdNew = headercreate();
  @@ -1396,7 +1526,9 @@
       hdNew->data.s = "<200201172300.AAA29400@procter012.pg-cw.de>";
       hdNew->ndata = 1;
       hdI->next = hdNew;
  +    hdNew->prev = hdI;
       hdI = hdNew;
   
  +    hdI->next = NULL;
       headerrewrite(ctx);
   }

From ossp-cvs-owner@ossp.org  Sat Feb 23 10:18:04 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 01EE476364; Sat, 23 Feb 2002 10:18:03 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool ChangeLog sh.echo sh.path sh.subst sh.vers...
Message-Id: <20020223091803.01EE476364@mail.ossp.org>
Date: Sat, 23 Feb 2002 10:18:03 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   23-Feb-2002 10:18:03
  Branch: HEAD                             Handle: 2002022309180300

  Modified files:
    ossp-pkg/shtool         ChangeLog sh.echo sh.path sh.subst sh.version

  Log:
    Port to POSIX 1003.1-2001 (SUSv3) standard:
    sh.echo, sh.version: "head -1" -> "sed -e 'q'"
    sh.path: "sort -u | tail -1" -> "sort -r -u | sed -e q"
    sh.subst: diff -u1 -> diff -U1
    
    Submitted by: Paul Eggert <eggert@twinsun.com>

  Summary:
    Revision    Changes     Path
    1.168       +7  -1      ossp-pkg/shtool/ChangeLog
    1.30        +2  -2      ossp-pkg/shtool/sh.echo
    1.22        +1  -1      ossp-pkg/shtool/sh.path
    1.5         +1  -1      ossp-pkg/shtool/sh.subst
    1.32        +2  -2      ossp-pkg/shtool/sh.version
  ____________________________________________________________________________

  Index: ossp-pkg/shtool/ChangeLog
  ============================================================
  $ cvs diff -u -r1.167 -r1.168 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	2 Feb 2002 18:47:29 -0000	1.167
  +++ ossp-pkg/shtool/ChangeLog	23 Feb 2002 09:18:03 -0000	1.168
  @@ -9,7 +9,13 @@
   
    ChangeLog
   
  - Changes between 1.6.0 and 1.6.1 (01-Feb-2002 to xx-Feb-2002):
  + Changes between 1.6.0 and 1.6.1 (01-Feb-2002 to 23-Feb-2002):
  +
  +   *) Port to POSIX 1003.1-2001 (SUSv3) standard:
  +      sh.echo, sh.version: "head -1" -> "sed -e 'q'"
  +      sh.path: "sort -u | tail -1" -> "sort -r -u | sed -e q"
  +      sh.subst: diff -u1 -> diff -U1
  +      [Paul Eggert <eggert@twinsun.com>]
   
      *) Fixed various typos in shtool.pod.
         [Ralf S. Engelschall, Liones <liones@myrealbox.com>]
  Index: ossp-pkg/shtool/sh.echo
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 sh.echo
  --- ossp-pkg/shtool/sh.echo	31 Dec 2001 15:06:04 -0000	1.29
  +++ ossp-pkg/shtool/sh.echo	23 Feb 2002 09:18:03 -0000	1.30
  @@ -194,13 +194,13 @@
   if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%d'`" != . ]; then
       if [ ".$domainname" = . ]; then
           if [ -f /etc/resolv.conf ]; then
  -            domainname="`egrep '^[ 	]*domain' /etc/resolv.conf | head -1 |\
  +            domainname="`egrep '^[ 	]*domain' /etc/resolv.conf | sed -e 'q' |\
                            sed -e 's/.*domain//' \
                                -e 's/^[ 	]*//' -e 's/^ *//' -e 's/^	*//' \
                                -e 's/^\.//' -e 's/^/./' |\
                            awk '{ printf("%s", $1); }'`"
               if [ ".$domainname" = . ]; then
  -                domainname="`egrep '^[ 	]*search' /etc/resolv.conf | head -1 |\
  +                domainname="`egrep '^[ 	]*search' /etc/resolv.conf | sed -e 'q' |\
                                sed -e 's/.*search//' \
                                    -e 's/^[ 	]*//' -e 's/^ *//' -e 's/^	*//' \
                                    -e 's/ .*//' -e 's/	.*//' \
  Index: ossp-pkg/shtool/sh.path
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 sh.path
  --- ossp-pkg/shtool/sh.path	31 Dec 2001 15:06:04 -0000	1.21
  +++ ossp-pkg/shtool/sh.path	23 Feb 2002 09:18:03 -0000	1.22
  @@ -100,7 +100,7 @@
           pc=`expr $pc - 1`
       done
       if [ $found = 1 ]; then
  -        perl="`cat $tmpfile | sort -u | tail -1 | cut -d: -f4`"
  +        perl="`cat $tmpfile | sort -r -u | sed -e 'q' | cut -d: -f4`"
           rm -f $tmpfile >/dev/null 2>&1
           echo "$perl"
           exit 0
  Index: ossp-pkg/shtool/sh.subst
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 sh.subst
  --- ossp-pkg/shtool/sh.subst	2 Jan 2002 17:04:56 -0000	1.4
  +++ ossp-pkg/shtool/sh.subst	23 Feb 2002 09:18:03 -0000	1.5
  @@ -92,7 +92,7 @@
                   rm -f $file.new
                   skip=yes
               else
  -                (diff -u1 $file $file.new >$tmpfile) 2>/dev/null
  +                (diff -U1 $file $file.new >$tmpfile) 2>/dev/null
                   if [ ".`cat $tmpfile`" = . ]; then
                       (diff -C1 $file $file.new >$tmpfile) 2>/dev/null
                       if [ ".`cat $tmpfile`" = . ]; then
  Index: ossp-pkg/shtool/sh.version
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 sh.version
  --- ossp-pkg/shtool/sh.version	31 Dec 2001 15:06:04 -0000	1.31
  +++ ossp-pkg/shtool/sh.version	23 Feb 2002 09:18:03 -0000	1.32
  @@ -55,8 +55,8 @@
   elif [ -r $file ]; then
       #   determine triple from given file
       eval `grep 'Version [0-9]*.[0-9]*[sabp.][0-9]* ([0-9]*-[a-zA-Z]*-[0-9]*)' $file |\
  -          head -1 | sed -e 's%.*Version \([0-9]*\)\.\([0-9]*\)\([sabp.]\)\([0-9]*\) (\([0-9]*-[a-zA-Z]*-[0-9]*\)).*%\
  -          ver="\1";rev="\2";typ="\3";lev="\4";tim="\5"%'`
  +          sed -e 's%.*Version \([0-9]*\)\.\([0-9]*\)\([sabp.]\)\([0-9]*\) (\([0-9]*-[a-zA-Z]*-[0-9]*\)).*%\
  +          ver="\1";rev="\2";typ="\3";lev="\4";tim="\5"%' -e 'q'`
   else
       #   intialise to first version
       ver=0

From ossp-cvs-owner@ossp.org  Mon Feb 25 11:30:16 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5BA2C76366; Mon, 25 Feb 2002 11:30:16 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex ex.h ex.pod
Message-Id: <20020225103016.5BA2C76366@mail.ossp.org>
Date: Mon, 25 Feb 2002 11:30:16 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   25-Feb-2002 11:30:16
  Branch: HEAD                             Handle: 2002022510301500

  Modified files:
    ossp-pkg/ex             ex.h ex.pod

  Log:
    Allow ex_shield clauses to be dynamically nested. Without
    this the whole functionality would be useless in practice.

  Summary:
    Revision    Changes     Path
    1.15        +13 -9      ossp-pkg/ex/ex.h
    1.20        +9  -0      ossp-pkg/ex/ex.pod
  ____________________________________________________________________________

  Index: ossp-pkg/ex/ex.h
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 ex.h
  --- ossp-pkg/ex/ex.h	31 Jan 2002 19:54:05 -0000	1.14
  +++ ossp-pkg/ex/ex.h	25 Feb 2002 10:30:15 -0000	1.15
  @@ -94,7 +94,8 @@
   /* declare the context type (private) */
   typedef struct {
       __ex_mctx_t  *ctx_mctx;     /* permanent machine context of enclosing try/catch */
  -    int           ctx_disabled; /* permanent flag whether exception handling is disabled */
  +    int           ctx_shielding;/* permanent counter of exception shielding level */
  +    int           ctx_shield;   /* temporary flag for exception shielding macro */
       int           ctx_caught;   /* temporary flag whether exception was caught */
       int           ctx_cleanup;  /* temporary flag whether cleanup block was present */
       volatile ex_t ctx_ex;       /* temporary exception storage */
  @@ -102,11 +103,12 @@
   
   /* the static and dynamic initializers for a context structure */
   #define EX_CTX_INITIALIZER \
  -    { NULL, 0, 0, 0, { NULL, NULL, NULL, NULL, 0, NULL } }
  +    { NULL, 0, 0, 0, 0, { NULL, NULL, NULL, NULL, 0, NULL } }
   #define EX_CTX_INITIALIZE(ctx) \
       do { \
           (ctx)->ctx_mctx         = NULL; \
  -        (ctx)->ctx_disabled     = 0;    \
  +        (ctx)->ctx_shielding    = 0;    \
  +        (ctx)->ctx_shield       = 0;    \
           (ctx)->ctx_caught       = 0;    \
           (ctx)->ctx_cleanup      = 0;    \
           (ctx)->ctx_ex.ex_class  = NULL; \
  @@ -176,7 +178,7 @@
   
   /* the throwing of a new exception */
   #define ex_throw(c,o,v) \
  -    (__ex_ctx()->ctx_disabled ? 0 : \
  +    (__ex_ctx()->ctx_shielding > 0 ? 0 : \
        (__ex_ctx()->ctx_ex.ex_class  = (void *)(c), \
         __ex_ctx()->ctx_ex.ex_object = (void *)(o), \
         __ex_ctx()->ctx_ex.ex_value  = (void *)(v), \
  @@ -189,22 +191,24 @@
   
   /* the re-throwing of an already caught exception */
   #define ex_rethrow \
  -    (__ex_ctx()->ctx_disabled ? 0 : \
  +    (__ex_ctx()->ctx_shielding > 0 ? 0 : \
         (  __ex_ctx()->ctx_mctx == NULL \
          ? (__ex_terminate((ex_t *)&(__ex_ctx()->ctx_ex)), -1) \
          : (__ex_mctx_restore(__ex_ctx()->ctx_mctx), 1) ))
   
   /* shield an operation from exception handling */
   #define ex_shield \
  -    for (__ex_ctx()->ctx_disabled = 1; \
  -         __ex_ctx()->ctx_disabled == 1; \
  -         __ex_ctx()->ctx_disabled = 0)
  +    for (__ex_ctx()->ctx_shielding++, \
  +         __ex_ctx()->ctx_shield =  1; \
  +         __ex_ctx()->ctx_shield == 1; \
  +         __ex_ctx()->ctx_shield =  0, \
  +         __ex_ctx()->ctx_shielding--)
   
   /* exception handling tests */
   #define ex_catching \
       (__ex_ctx()->ctx_mctx != NULL)
   #define ex_shielding \
  -    (__ex_ctx()->ctx_disabled)
  +    (__ex_ctx()->ctx_shielding > 0)
   
   /* optional namespace mapping */
   #if defined(__EX_NS_UCCXX__)
  Index: ossp-pkg/ex/ex.pod
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 ex.pod
  --- ossp-pkg/ex/ex.pod	31 Jan 2002 20:48:05 -0000	1.19
  +++ ossp-pkg/ex/ex.pod	25 Feb 2002 10:30:15 -0000	1.20
  @@ -220,6 +220,15 @@
   of exceptions, i.e., inside the dynamic scope of B<ex_shield> all
   B<ex_throw> operations are silently ignored.
   
  +The B<ex_shield> block is a regular B<ISO-C> language statement block,
  +but it is not allowed to jump into it via C<goto> or C<longjmp>(3) or
  +out of it via C<break>, C<return>, C<goto> or C<longjmp>(3) because this
  +would cause the shielding level to become out of sync. Jumping into
  +an B<ex_shield> clause would avoid increasing the exception shielding
  +level, and jumping out of it would avoid decreasing it. In both cases
  +the result is an incorrect exception shielding level. Nevertheless you
  +are allowed to nest B<ex_shield> clauses.
  +
   =item B<ex_catching>
   
   This is a boolean flag which can be checked inside the dynamic scope

From ossp-cvs-owner@ossp.org  Mon Feb 25 11:33:03 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0B78276366; Mon, 25 Feb 2002 11:33:03 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex ex.h
Message-Id: <20020225103303.0B78276366@mail.ossp.org>
Date: Mon, 25 Feb 2002 11:33:03 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   25-Feb-2002 11:33:02
  Branch: HEAD                             Handle: 2002022510330200

  Modified files:
    ossp-pkg/ex             ex.h

  Log:
    be pedantic in style

  Summary:
    Revision    Changes     Path
    1.16        +2  -2      ossp-pkg/ex/ex.h
  ____________________________________________________________________________

  Index: ossp-pkg/ex/ex.h
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 ex.h
  --- ossp-pkg/ex/ex.h	25 Feb 2002 10:30:15 -0000	1.15
  +++ ossp-pkg/ex/ex.h	25 Feb 2002 10:33:02 -0000	1.16
  @@ -43,7 +43,7 @@
   #if (   defined(__STDC__) \
        && defined(__STDC_VERSION__) \
        && __STDC_VERSION__ >= 199901L)
  -#define __EX_FUNC__ __func__      /* ISO C99 compliant */
  +#define __EX_FUNC__ __func__      /* ISO-C99 compliant */
   #elif (   defined(__GNUC__) \
          && defined(__GNUC_MINOR__) \
          && (   __GNUC__ > 2 \
  @@ -69,7 +69,7 @@
   #define __ex_mctx_restore(mctx)  (void)siglongjmp((mctx)->jb, 1)
   
   #elif defined(__EX_MCTX_SJLJ__) || !defined(__EX_MCTX_CUSTOM__)
  -#include <setjmp.h>              /* ISO C jmp_buf(3) */
  +#include <setjmp.h>              /* ISO-C jmp_buf(3) */
   #define __ex_mctx_struct         jmp_buf jb;
   #define __ex_mctx_save(mctx)     (setjmp((mctx)->jb) == 0)
   #define __ex_mctx_restored(mctx) /* noop */

From ossp-cvs-owner@ossp.org  Tue Feb 26 16:56:10 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 33CA87643E; Tue, 26 Feb 2002 16:56:09 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c lmtp2nntp_msg.c lmtp...
Message-Id: <20020226155609.33CA87643E@mail.ossp.org>
Date: Tue, 26 Feb 2002 16:56:09 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   26-Feb-2002 16:56:08
  Branch: HEAD                             Handle: 2002022615560800

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c lmtp2nntp_msg.c
                            lmtp2nntp_option.c

  Log:
    added --testfile option for header rewrite testing. Transformation from argz
    to linked list of elements and back implemented for integration into the
    gateway's "inner loop". Have trouble with lib_ex segfaulting when throwing
    exception and tried to track down this issue with no luck.

  Summary:
    Revision    Changes     Path
    1.53        +267 -26    ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.3         +1  -0      ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
    1.15        +1  -0      ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.52 -r1.53 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	21 Feb 2002 15:47:54 -0000	1.52
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	26 Feb 2002 15:56:08 -0000	1.53
  @@ -105,7 +105,28 @@
   }
   
   static void headersimulation(lmtp2nntp_t *); //FIXME
  +static void msg_headermatrixbuildup(msg_t *msg);
  +static void msg_headermatrixteardwn(msg_t *msg);
  +static void headerrewrite(lmtp2nntp_t *ctx);
   
  +static void extest(void)
  +{
  +    ex_t ex;
  +
  +    try {
  +        fprintf(stderr, "try\n");
  +        throw(0,0,0);
  +    }
  +    cleanup {
  +        fprintf(stderr, "cleanup\n");
  +    }
  +    catch (ex) {
  +        fprintf(stderr, "catch\n");
  +        rethrow;
  +    }
  +    exit(0);
  +
  +}
   void config_context(lmtp2nntp_t *ctx)
   {
       ex_t ex;
  @@ -113,6 +134,8 @@
       //char *cp;
       int rc;
   
  +    //FIXME ex is broken!?  extest();
  +
       /* create L2 environment */
       if (l2_env_create(&ctx->l2_env) != L2_OK) {
           fprintf(stderr, "%s:Error: failed to create L2 environment\n", ctx->progname);
  @@ -1021,8 +1044,107 @@
       catch (ex)
           rethrow;
   
  -    headersimulation(ctx); //FIXME
  +    //headersimulation(ctx); //FIXME
  +    /* --testfile MULTI */
  +    try {
  +        char *cp;
  +        int i;
  +        char *cpBuf = NULL;
  +
  +        if (   (val_get(ctx->val, "option.testfile", &ov) != VAL_OK)
  +            || (ov->ndata <  0)
  +            || (ov->ndata >= 1 && ov->data.m == NULL)
  +              ) throw(0,0,0);
  +        log1(ctx, DEBUG, "ov->ndata = %d", ov->ndata);
  +        for (i = 0; i < ov->ndata; i++)
  +            log2(ctx, TRACE, "--testfile[%d] = \"%s\"", i, (ov->data.m)[i]);
  +
  +        if (ov->ndata >= 1) {
  +            for (i = 0; i < ov->ndata; i++) {
  +                cp = (ov->data.m)[i];
  +                log2(ctx, DEBUG, "cp = (data.m)[%d] = \"%s\"", i, cp);
  +                {
  +                    const char *filename = cp;
  +                    struct stat sb;
  +                    volatile int fd = -1;
  +                    //ex_t ex;
  +
  +                    try {
  +                        if (stat(filename, &sb) == -1) throw(0, 0, "stat");
  +                        if ((cpBuf = (char *)malloc((size_t)sb.st_size + 1)) == NULL) throw(0, 0, "malloc");
  +                        if ((fd = open(filename, O_RDONLY)) == -1) throw(0, 0, "open");
  +                        if (read(fd, (void *)cpBuf, (size_t)sb.st_size) != (ssize_t)sb.st_size) throw(0, 0, "read");
  +                        cpBuf[(int)sb.st_size] = '\0';
  +                    }
  +                    cleanup {
  +                        if (fd != -1) close(fd);
  +                    }
  +                    catch (ex) {
  +                        fprintf(stderr, "ERROR: caught %s\n", ex.ex_value == NULL ? "N/A" : (char *)ex.ex_value);
  +                        rethrow;
  +                    }
  +                }
  +                //printf("DEBUG: *** 1 *** file as it was just read in ***\n%s***\n", cpBuf);
  +                {
  +                    volatile msg_t *msg = NULL;
  +                    msg_rc_t rc;
  +
  +                    try {
  +                        if ((msg = msg_create()) == NULL) throw(0, 0, "msg_create");
  +                        msg->l2 = ctx->l2;
  +                        msg->cpMsg = cpBuf;
  +                        if ((rc = msg_split((msg_t *)msg)) != MSG_OK) {
  +                            log1(ctx, ERROR, "Error splitting message: %s", msg_error(rc));
  +                            throw(0, 0, "msg_split");
  +                        }
  +                        {//FIXME
  +                            char *cp;
  +                            cp = NULL;
  +                            log0(msg, DEBUG, "FIXME trace #20");
  +                            while ((cp = argz_next(msg->azHeaders, msg->asHeaders, cp)) != NULL) {
  +                                log1(msg, DEBUG, "header=\"%s\"", cp);
  +                            }
  +                            log0(msg, DEBUG, "FIXME trace #21");
  +                        }
  +                        msg_headermatrixbuildup((msg_t *)msg);
  +                        ctx->msg = (msg_t *)msg;
  +                        headerrewrite(ctx);
  +                        msg_headermatrixteardwn((msg_t *)msg);
  +                        {//FIXME
  +                            char *cp;
  +                            cp = NULL;
  +                            log0(msg, DEBUG, "FIXME trace #30");
  +                            while ((cp = argz_next(msg->azHeaders, msg->asHeaders, cp)) != NULL) {
  +                                log1(msg, DEBUG, "header=\"%s\"", cp);
  +                            }
  +                            log0(msg, DEBUG, "FIXME trace #31");
  +                        }
  +                        argz_add(&((msg_t *)msg)->azNewsgroups, &((msg_t *)msg)->asNewsgroups, "Newsgroups:"); //FIXME
  +                        argz_add(&((msg_t *)msg)->azNewsgroups, &((msg_t *)msg)->asNewsgroups, "invalid.tst"); //FIXME
  +                        if ((rc = msg_join((msg_t *)msg)) != MSG_OK) {
  +                            log1(ctx, ERROR, "Error joining message: %s", msg_error(rc));
  +                            throw(0, 0, "msg_split");
  +                        }
  +                        printf("%s", msg->cpMsg); //FIXME
  +                    }
  +                    cleanup {
  +                        if (msg != NULL)
  +                            msg_destroy((msg_t *)msg);
  +                        ctx->msg = NULL;
  +                    }
  +                    catch (ex) {
  +                        rethrow;
  +                    }
  +                }
  +            }
  +        exit(0); //FIXME
  +        }
  +    }
  +    catch (ex)
  +        rethrow;
  +
   
  +#if 0
   //void testpcre(void)
   {
       char       *szRegex;
  @@ -1092,6 +1214,7 @@
           free(pcreExtra);
   
   }
  +#endif
   
   CUS:
       return;
  @@ -1166,26 +1289,6 @@
       return (headerdata_t *)hdNew;
   }
   #if 0
  -//headermatrix()
  -{
  -    volatile header_t *hNew = NULL;
  -    try {
  -        char *cp;
  -
  -        cp = NULL;
  -        while ((cp = argz_next(ctx->msg->azHeaders, ctx->msg->asHeaders, cp)) != NULL) {
  -            hNew = mallocex(sizeof(header_t));
  -            //FIXME
  -        }
  -    }
  -    cleanup {
  -        if (hNew != NULL)
  -            free(hNew);
  -    }
  -    catch(ex) {
  -        rethrow;
  -    }
  -}
   #endif
   
   static var_config_t ctx_lookup_cfg = {
  @@ -1265,7 +1368,7 @@
   
       log2(ctx, DEBUG, "rgx_lookup variable \"%s\" (%d)", var_ptr, var_len);
       rc = VAR_ERR_UNDEFINED_VARIABLE;
  -    i = atoi(var_ptr); /* works w '}' but '\0' termination as well */
  +    i = atoi(var_ptr); /* works with both '}' and '\0' termination */
       if (i <= ctx->nMatch) {
           *val_ptr = ctx->acpMatch[i];
           *val_len = strlen(ctx->acpMatch[i]);
  @@ -1279,6 +1382,144 @@
       return rc;
   }
   
  +static void msg_headermatrixbuildup(msg_t *msg)
  +{
  +    ex_t ex;
  +    volatile headerdata_t *hdNew = NULL;
  +    try {
  +        headerdata_t *hdI, *hdP;
  +        char *cp;
  +
  +        cp = NULL;
  +        while ((cp = argz_next(msg->azHeaders, msg->asHeaders, cp)) != NULL) { /* for each message header */
  +            log2(msg, DEBUG, "FIXME trace loop cp=%.8lx, cp=\"%s\"", cp, cp);
  +
  +            /*FIXME we want O(1) here */
  +            for (hdP = NULL, hdI = msg->hdFirst; hdI != NULL; hdP = hdI, hdI = hdI->next) { /* for each matrix header */
  +                log2(msg, DEBUG, "FIXME trace loop hdI=%.8lx, hI->name=\"%s\"", hdI, hdI->name);
  +                if (hdI->name == NULL || strlen(hdI->name) == 0 || hdI->ndata == 0)
  +                    continue;
  +                if (strcmp(cp, hdI->name) == 0)
  +                    break;
  +            }
  +
  +            if (hdI == NULL) {
  +                hdNew = headercreate(); /* not found, create new */
  +                hdNew->name = strdupex(cp);
  +                hdI = (headerdata_t *)hdNew; hdNew = NULL; /* ex cleanup */
  +                if (hdP == NULL)
  +                    msg->hdFirst = hdI; /* no previous? this is the first */
  +                else {
  +                    hdP->next = hdI;
  +                    hdI->prev = hdP;
  +                }
  +            }
  +            cp = argz_next(msg->azHeaders, msg->asHeaders, cp);
  +            if (hdI->ndata == 0) {
  +                log1(msg, DEBUG, "header=%s, currently empty", hdI->name);
  +                hdI->data.s = strdupex(cp);
  +                hdI->ndata = 1;
  +            }
  +            else if(hdI->ndata == 1) {
  +                char *cpOld;
  +                cpOld = hdI->data.s;
  +                log1(msg, DEBUG, "header=%s, currently single valued", hdI->name);
  +                hdI->data.m = (char **)mallocex(3 * sizeof(char *));
  +                hdI->data.m[0] = strdupex(cpOld); //FIXME
  +                hdI->data.m[1] = strdupex(cp);
  +                hdI->data.m[2] = NULL;
  +                hdI->ndata = 2;
  +            }
  +            else {
  +                log2(msg, DEBUG, "header=%s, currently multi valued %d", hdI->name, hdI->ndata);
  +                hdI->data.m = (char **)reallocex(hdI->data.m, (hdI->ndata + 2) * sizeof(char *));
  +                hdI->data.m[hdI->ndata++] = strdupex(cp);
  +                hdI->data.m[hdI->ndata] = NULL;
  +            }
  +        }
  +#if 0
  +        { //FIXME debug code block
  +            int i;
  +            headerdata_t *hdD;
  +
  +            log0(msg, DEBUG, "FIXME trace ---------- msg_headermatrixbuildup() ----------");
  +            for (hdD = msg->hdFirst; hdD != NULL; hdD = hdD->next) {
  +                if (hdD->ndata == 0)
  +                    log1(msg, DEBUG, "hdD->name=%s: (NO DATA)", hdD->name);
  +                if (hdD->ndata == 1)
  +                    log2(msg, DEBUG, "hdD->name:hdD->data.s    %s: %s", hdD->name, hdD->data.s);
  +                if (hdD->ndata > 1)
  +                    for (i = 0; i < hdD->ndata; i++)
  +                        log3(msg, DEBUG, "hdD->name:hdD->data.m[%d] %s: %s", i, hdD->name, hdD->data.m[i]);
  +            }
  +        }
  +#endif
  +    }
  +    cleanup {
  +        if (hdNew != NULL)
  +            free((headerdata_t *)hdNew);
  +    }
  +    catch(ex) {
  +        rethrow;
  +    }
  +}
  +
  +static void msg_headermatrixteardwn(msg_t *msg)
  +{
  +    ex_t ex;
  +    try {
  +        headerdata_t *hdI;
  +
  +        if (msg->azHeaders != NULL)
  +            free(msg->azHeaders);
  +        msg->azHeaders = NULL;
  +        msg->asHeaders = 0;
  +
  +        for (hdI = msg->hdFirst; hdI != NULL; hdI = hdI->next) { /* for each matrix header */
  +            log2(msg, DEBUG, "FIXME trace loop hdI=%.8lx, hI->name=\"%s\"", hdI, hdI->name);
  +            if (hdI->name == NULL || strlen(hdI->name) == 0 || hdI->ndata == 0)
  +                continue;
  +            if (hdI->ndata == 0) {
  +                log1(msg, DEBUG, "header=%s, no data", hdI->name);
  +            }
  +            else if(hdI->ndata == 1) { /* header data is single valued */
  +                log2(msg, DEBUG, "header=%s, data=%s", hdI->name, hdI->data.s);
  +                argz_add(&msg->azHeaders, &msg->asHeaders, hdI->name);
  +                argz_add(&msg->azHeaders, &msg->asHeaders, hdI->data.s);
  +            }
  +            else { /* header data is multi valued */
  +                int i;
  +                for (i = 0; i < hdI->ndata; i++) {
  +                    log3(msg, DEBUG, "header=%s[%d], data=%s", hdI->name, i, hdI->data.m[i]);
  +                    argz_add(&msg->azHeaders, &msg->asHeaders, hdI->name);
  +                    argz_add(&msg->azHeaders, &msg->asHeaders, hdI->data.m[i]);
  +                }
  +            }
  +        }
  +#if 0
  +        { //FIXME debug code block
  +            int i;
  +            headerdata_t *hdD;
  +
  +            log0(msg, DEBUG, "FIXME trace ---------- msg_headermatrixteardwn() ----------");
  +            for (hdD = msg->hdFirst; hdD != NULL; hdD = hdD->next) {
  +                if (hdD->ndata == 0)
  +                    log1(msg, DEBUG, "hdD->name=%s: (NO DATA)", hdD->name);
  +                if (hdD->ndata == 1)
  +                    log2(msg, DEBUG, "hdD->name:hdD->data.s    %s: %s", hdD->name, hdD->data.s);
  +                if (hdD->ndata > 1)
  +                    for (i = 0; i < hdD->ndata; i++)
  +                        log3(msg, DEBUG, "hdD->name:hdD->data.m[%d] %s: %s", i, hdD->name, hdD->data.m[i]);
  +            }
  +        }
  +#endif
  +    }
  +    catch(ex) {
  +        rethrow;
  +    }
  +}
  +
  +
   static void headerrewrite(lmtp2nntp_t *ctx)
   {
       headerrule_t *hrI;
  @@ -1303,11 +1544,11 @@
       int         opt;
       char       *buf;
       int         buf_size;
  -#define OVECSIZE 30
       int         ovec[OVECSIZE];
       const char **cpList;
       */
       regex_ctx_t *regex_ctx;
  +#define OVECSIZE 30
       int            ovec[OVECSIZE];
   
       { //FIXME debug code block
  @@ -1483,11 +1724,11 @@
   static void headersimulation(lmtp2nntp_t *ctx)
   {
       headerdata_t *hdI, *hdNew;
  -
  -    ctx->msg = msg_create();
  +    char *replyto[4] = { "foo@example.com", "bar@example.com", "quux@example.com", NULL };
   
       log0(ctx, DEBUG, "FIXME simulation - GO");
  -    char *replyto[4] = { "foo@example.com", "bar@example.com", "quux@example.com", NULL };
  +
  +    ctx->msg = msg_create();
   
       hdNew = headercreate();
       hdNew->name = "To";
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 lmtp2nntp_msg.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	31 Dec 2001 15:15:36 -0000	1.2
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	26 Feb 2002 15:56:08 -0000	1.3
  @@ -54,6 +54,7 @@
       msg->cpMsg = NULL;
       msg->azHeaders = NULL;
       msg->asHeaders = 0;
  +    msg->hdFirst = NULL;
       msg->cpFid = NULL;
       msg->cpBody = NULL;
       msg->cpMsgid = NULL;
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 lmtp2nntp_option.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	13 Feb 2002 16:25:38 -0000	1.14
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	26 Feb 2002 15:56:08 -0000	1.15
  @@ -632,6 +632,7 @@
       (void)option_register(o, "operationmode",      'o', OPT_SINGLE,  "553/5.7.1", "fakestatus or operationmode",       "abc/a.d.e|post|feed",        &stdsyntax, "m/.*/" ); //"m/([0-9]{3}\\/[0-9]\\.[0-9]\\.[0-9]|post|feed)/" ); /* 553 = Requested action not taken: mailbox name not allowed, 5.7.1 =  Delivery not authorized, message refused */
       (void)option_register(o, "restrictheader",     'r', OPT_SINGLE,  NULL,        "header restriction",                "regex",                      &stdsyntax, "m/.*/" );
       (void)option_register(o, "size",               's', OPT_SINGLE,  "8388608",   "maximum message size",              "bytes",                      &stdsyntax, "m/.*/" ); //"m/[0-9]+/" );
  +    (void)option_register(o, "testfile",           't', OPT_MULTI,   NULL,        "testfile for headerrule",           "testfile",                   &stdsyntax, "m/.*/" );
       (void)option_register(o, "user",               'u', OPT_SINGLE,  NULL,        "user",                              "uid|name",                   &stdsyntax, "m/.*/" );
       (void)option_register(o, "version",            'v', OPT_FLAG,    NULL,        "print version",                     NULL,                         &stdsyntax, NULL );
       (void)option_register(o, "newsgroup",          NUL, OPT_MULTI,   NULL,        "article destination",               "newsgroup",                  &stdsyntax, "m/.*/" );

From ossp-cvs-owner@ossp.org  Wed Feb 27 10:34:42 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 057EF76366; Wed, 27 Feb 2002 10:34:41 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp fixme.h lmtp2nntp_config.c lmtp2nntp_ex...
Message-Id: <20020227093441.057EF76366@mail.ossp.org>
Date: Wed, 27 Feb 2002 10:34:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   27-Feb-2002 10:34:41
  Branch: HEAD                             Handle: 2002022709344100

  Modified files:
    ossp-pkg/lmtp2nntp      fixme.h lmtp2nntp_config.c lmtp2nntp_exwrap.c
                            lmtp2nntp_exwrap.h

  Log:
    changed semantic of --headerrule to "keep the colon"

  Summary:
    Revision    Changes     Path
    1.18        +0  -1      ossp-pkg/lmtp2nntp/fixme.h
    1.54        +47 -46     ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.2         +9  -0      ossp-pkg/lmtp2nntp/lmtp2nntp_exwrap.c
    1.2         +2  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_exwrap.h
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/fixme.h
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 fixme.h
  --- ossp-pkg/lmtp2nntp/fixme.h	20 Feb 2002 15:42:26 -0000	1.17
  +++ ossp-pkg/lmtp2nntp/fixme.h	27 Feb 2002 09:34:41 -0000	1.18
  @@ -34,7 +34,6 @@
   #include <pcre.h>
   struct headerrule_st {
       headerrule_t *next;
  -    char         *carve; /* pri, regex, header, val carved out here, so free up only this */
       int           pri;
       char         *regex;
       char         *header;
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.53 -r1.54 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	26 Feb 2002 15:56:08 -0000	1.53
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	27 Feb 2002 09:34:41 -0000	1.54
  @@ -557,12 +557,9 @@
       {
       volatile headerrule_t *hrNew = NULL; // declare and initialize variables which might have resources allocated that need to be cleaned up when an exception is caught
           try {
  -            char *cp;
  +            char *cp, *cpP;
  +            int n;
               int i;
  -            char *cpPri;
  -            char *cpRegex;
  -            char *cpHeader;
  -            char *cpVal;
               headerrule_t *hrI;
               headerrule_t *hrP;
               const char *cpError;
  @@ -583,57 +580,57 @@
   
                       hrNew = (headerrule_t *)mallocex(sizeof(headerrule_t));
                       hrNew->next      = NULL;
  -                    hrNew->carve     = NULL;
  +                    hrNew->pri       = 500; /* default priority */
  +                    hrNew->regex     = NULL;
  +                    hrNew->header    = NULL;
  +                    hrNew->val       = NULL;
                       hrNew->pcreRegex = NULL;
                       hrNew->pcreExtra = NULL;
                       
  -                    cp = hrNew->carve = strdupex(cp);
  +                    //FIXME cp = hrNew->carve = strdupex(cp);
                       /* priority */
  -                    cpPri = cp;
  +                    cpP = cp;
                       if ((cp = strchr(cp, ':')) == NULL) {
                           log1(ctx, ERROR, "option --headerrule, priority (%s) terminating colon missing", (ov->data.m)[i]);
                           throw(0,0,0);
                       }
  -                    *cp = NUL;
  -                    if (strlen(cpPri) == 0)
  -                        cpPri = "0";
                       cp++;
  +                    n = cp - cpP;
  +                    if (n >= 2) /* mandatory colon and at least one more char */
  +                        hrNew->pri = atoi(cpP);
                       /* regex */
  -                    cpRegex = cp;
  +                    cpP = cp;
                       if ((cp = strchr(cp, ':')) == NULL) {
                           log1(ctx, ERROR, "option --headerrule, regex (%s) terminating colon missing", (ov->data.m)[i]);
                           throw(0,0,0);
                       }
  -                    *cp = NUL;
  -                    if (strlen(cpRegex) == 0)
  -                        cpRegex = NULL;
                       cp++;
  +                    n = cp - cpP;
  +                    if (n >= 2) /* mandatory colon and at least one more char */
  +                        hrNew->regex = str_dupex(cpP, n);
                       /* header */
  -                    cpHeader = cp;
  +                    cpP = cp;
                       if ((cp = strchr(cp, ':')) == NULL) {
                           log1(ctx, ERROR, "option --headerrule, header (%s) terminating colon missing", (ov->data.m)[i]);
                           throw(0,0,0);
                       }
  -                    *cp = NUL;
  -                    if (strlen(cpHeader) == 0) {
  +                    cp++;
  +                    n = cp - cpP;
  +                    if (n == 0) {
                           log1(ctx, ERROR, "option --headerrule, header (%s) missing", (ov->data.m)[i]);
                           throw(0,0,0);
                       }
  -                    cp++;
  +                    hrNew->header = str_dupex(cpP, n);
                       /* value */
  -                    cpVal = cp;
  -                    if (strlen(cpVal) == 0)
  -                        cpVal = NULL;
  -
  -                    hrNew->pri    = atoi(cpPri);
  -                    hrNew->regex  = cpRegex;
  -                    hrNew->header = cpHeader;
  -                    hrNew->val    = cpVal;
  +                    cpP = cp;
  +                    n = strlen(cpP);
  +                    if (n >= 1)
  +                        hrNew->val = str_dupex(cpP, n);
   
  -                    if (cpRegex != NULL) {
  +                    if (hrNew->regex != NULL) {
                           /* compile regular expression into finite state machine and optimize */
  -                        if ((hrNew->pcreRegex = pcre_compile(cpRegex, PCRE_CASELESS, &cpError, &iError, NULL)) == NULL) {
  -                            log3(ctx, ERROR, "option --headerrule, regex (%s) failed at pos %d with %s", cpRegex, iError, cpError);
  +                        if ((hrNew->pcreRegex = pcre_compile(hrNew->regex, PCRE_CASELESS, &cpError, &iError, NULL)) == NULL) {
  +                            log3(ctx, ERROR, "option --headerrule, regex (%s) failed at pos %d with %s", hrNew->regex, iError, cpError);
                               throw(0,0,0);
                           }
                           hrNew->pcreExtra = pcre_study(hrNew->pcreRegex, 0, &cpError);
  @@ -662,12 +659,16 @@
           }
           cleanup {
               if (hrNew != NULL) {
  -                if (hrNew->carve != NULL)
  -                    freeex(hrNew->carve);
  -                if (hrNew->pcreRegex != NULL)
  -                    free(hrNew->pcreRegex);
                   if (hrNew->pcreExtra != NULL)
                       free(hrNew->pcreExtra);
  +                if (hrNew->pcreRegex != NULL)
  +                    free(hrNew->pcreRegex);
  +                if (hrNew->val != NULL)
  +                    freeex(hrNew->val);
  +                if (hrNew->header != NULL)
  +                    freeex(hrNew->header);
  +                if (hrNew->regex != NULL)
  +                    freeex(hrNew->regex);
                   freeex((headerrule_t *)hrNew);
               }
           }
  @@ -1392,11 +1393,11 @@
   
           cp = NULL;
           while ((cp = argz_next(msg->azHeaders, msg->asHeaders, cp)) != NULL) { /* for each message header */
  -            log2(msg, DEBUG, "FIXME trace loop cp=%.8lx, cp=\"%s\"", cp, cp);
  +            //log2(msg, DEBUG, "FIXME trace loop cp=%.8lx, cp=\"%s\"", cp, cp);
   
               /*FIXME we want O(1) here */
               for (hdP = NULL, hdI = msg->hdFirst; hdI != NULL; hdP = hdI, hdI = hdI->next) { /* for each matrix header */
  -                log2(msg, DEBUG, "FIXME trace loop hdI=%.8lx, hI->name=\"%s\"", hdI, hdI->name);
  +                //log2(msg, DEBUG, "FIXME trace loop hdI=%.8lx, hI->name=\"%s\"", hdI, hdI->name);
                   if (hdI->name == NULL || strlen(hdI->name) == 0 || hdI->ndata == 0)
                       continue;
                   if (strcmp(cp, hdI->name) == 0)
  @@ -1447,10 +1448,10 @@
                   if (hdD->ndata == 0)
                       log1(msg, DEBUG, "hdD->name=%s: (NO DATA)", hdD->name);
                   if (hdD->ndata == 1)
  -                    log2(msg, DEBUG, "hdD->name:hdD->data.s    %s: %s", hdD->name, hdD->data.s);
  +                    log2(msg, DEBUG, "hdD->name:hdD->data.s    %s %s", hdD->name, hdD->data.s);
                   if (hdD->ndata > 1)
                       for (i = 0; i < hdD->ndata; i++)
  -                        log3(msg, DEBUG, "hdD->name:hdD->data.m[%d] %s: %s", i, hdD->name, hdD->data.m[i]);
  +                        log3(msg, DEBUG, "hdD->name:hdD->data.m[%d] %s %s", i, hdD->name, hdD->data.m[i]);
               }
           }
   #endif
  @@ -1506,10 +1507,10 @@
                   if (hdD->ndata == 0)
                       log1(msg, DEBUG, "hdD->name=%s: (NO DATA)", hdD->name);
                   if (hdD->ndata == 1)
  -                    log2(msg, DEBUG, "hdD->name:hdD->data.s    %s: %s", hdD->name, hdD->data.s);
  +                    log2(msg, DEBUG, "hdD->name:hdD->data.s    %s %s", hdD->name, hdD->data.s);
                   if (hdD->ndata > 1)
                       for (i = 0; i < hdD->ndata; i++)
  -                        log3(msg, DEBUG, "hdD->name:hdD->data.m[%d] %s: %s", i, hdD->name, hdD->data.m[i]);
  +                        log3(msg, DEBUG, "hdD->name:hdD->data.m[%d] %s %s", i, hdD->name, hdD->data.m[i]);
               }
           }
   #endif
  @@ -1563,10 +1564,10 @@
               if (hdD->ndata == 0)
                   log1(ctx, DEBUG, "hdD->name=%s: (NO DATA)", hdD->name);
               if (hdD->ndata == 1)
  -                log2(ctx, DEBUG, "hdD->name:hdD->data.s    %s: %s", hdD->name, hdD->data.s);
  +                log2(ctx, DEBUG, "hdD->name:hdD->data.s    %s %s", hdD->name, hdD->data.s);
               if (hdD->ndata > 1)
                   for (i = 0; i < hdD->ndata; i++)
  -                    log3(ctx, DEBUG, "hdD->name:hdD->data.m[%d] %s: %s", i, hdD->name, hdD->data.m[i]);
  +                    log3(ctx, DEBUG, "hdD->name:hdD->data.m[%d] %s %s", i, hdD->name, hdD->data.m[i]);
           }
       }
       
  @@ -1590,10 +1591,10 @@
                   if (hdD->ndata == 0)
                       log1(ctx, DEBUG, "hdD->name=%s: (NO DATA)", hdD->name);
                   if (hdD->ndata == 1)
  -                    log2(ctx, DEBUG, "hdD->name:hdD->data.s    %s: %s", hdD->name, hdD->data.s);
  +                    log2(ctx, DEBUG, "hdD->name:hdD->data.s    %s %s", hdD->name, hdD->data.s);
                   if (hdD->ndata > 1)
                       for (i = 0; i < hdD->ndata; i++)
  -                        log3(ctx, DEBUG, "hdD->name:hdD->data.m[%d] %s: %s", i, hdD->name, hdD->data.m[i]);
  +                        log3(ctx, DEBUG, "hdD->name:hdD->data.m[%d] %s %s", i, hdD->name, hdD->data.m[i]);
               }
           }
           if (hrI->regex != NULL) {
  @@ -1713,10 +1714,10 @@
               if (hdD->ndata == 0)
                   log1(ctx, DEBUG, "hdD->name=%s: (NO DATA)", hdD->name);
               if (hdD->ndata == 1)
  -                log2(ctx, DEBUG, "hdD->name:hdD->data.s    %s: %s", hdD->name, hdD->data.s);
  +                log2(ctx, DEBUG, "hdD->name:hdD->data.s    %s %s", hdD->name, hdD->data.s);
               if (hdD->ndata > 1)
                   for (i = 0; i < hdD->ndata; i++)
  -                    log3(ctx, DEBUG, "hdD->name:hdD->data.m[%d] %s: %s", i, hdD->name, hdD->data.m[i]);
  +                    log3(ctx, DEBUG, "hdD->name:hdD->data.m[%d] %s %s", i, hdD->name, hdD->data.m[i]);
           }
       }
   }
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_exwrap.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 lmtp2nntp_exwrap.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_exwrap.c	14 Feb 2002 10:51:50 -0000	1.1
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_exwrap.c	27 Feb 2002 09:34:41 -0000	1.2
  @@ -40,6 +40,15 @@
       return rc;
   }
   
  +char *str_dupex(const char *s, str_size_t n)
  +{
  +    char *rc;
  +
  +    if ((rc = str_dup(s, n)) == NULL)
  +        throw(0,0,0);
  +    return rc;
  +}
  +
   void *mallocex(size_t size)
   {
       void *rc;
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_exwrap.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 lmtp2nntp_exwrap.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_exwrap.h	14 Feb 2002 10:51:50 -0000	1.1
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_exwrap.h	27 Feb 2002 09:34:41 -0000	1.2
  @@ -29,11 +29,12 @@
   #define __LMTP2NNTP_EXWRAP_H__
   
   #include <string.h>
  +#include <str.h>
   
   char *strdupex(const char *);
  +char *str_dupex(const char *, str_size_t);
   void *mallocex(size_t);
   void *reallocex(void *, size_t);
   void freeex(void *);
  -
   
   #endif /* __LMTP2NNTP_EXWRAP_H__ */

From ossp-cvs-owner@ossp.org  Wed Feb 27 10:55:56 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0692F76366; Wed, 27 Feb 2002 10:55:55 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c
Message-Id: <20020227095555.0692F76366@mail.ossp.org>
Date: Wed, 27 Feb 2002 10:55:55 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   27-Feb-2002 10:55:55
  Branch: HEAD                             Handle: 2002022709555500

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c

  Log:
    support for useless but possible --headerrule :match:header: where "header"
    doesn't matter as the absence of a value causes deletion of any matching
    header anyway. However, previously the program segfaulted.

  Summary:
    Revision    Changes     Path
    1.55        +29 -22     ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.54 -r1.55 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	27 Feb 2002 09:34:41 -0000	1.54
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	27 Feb 2002 09:55:55 -0000	1.55
  @@ -1625,30 +1625,37 @@
                           log1(ctx, DEBUG, "expansion result '%s'", res_ptr);
                           hdNew->name = res_ptr; //FIXME rename ->header to ->name
                       }
  -                    /* expanding regex references into header value */
  -                    {
  -                        var_rc_t var_rc;
  -                        char *res_ptr;
  -                        log1(ctx, DEBUG, "expanding regex references in header value '%s'", hrI->val);
  -                        if ((var_rc = var_expand(hrI->val, strlen(hrI->val), &res_ptr, NULL,
  -                                                 regex_lookup, regex_ctx, &regex_lookup_cfg, TRUE)) != VAR_OK) {
  -                            log2(ctx, ERROR, "expansion of '%s' failed: %s", hrI->val, var_strerror(var_rc));
  -                        }
  -                        log1(ctx, DEBUG, "expansion result '%s'", res_ptr);
  -                        cp = res_ptr;
  +                    if (hrI->val == NULL) {
  +                        log0(ctx, DEBUG, "marking deleted");
  +                        /*FIXME clean up data.s and data.m */
  +                        hdNew->ndata = 0;
                       }
  -                    /* expanding header and other variables into header value */
  -                    {
  -                        var_rc_t var_rc;
  -                        char *res_ptr;
  -                        log1(ctx, DEBUG, "expanding variables in header value '%s'", hrI->val);
  -                        if ((var_rc = var_expand(cp, strlen(cp), &res_ptr, NULL,
  -                                                 ctx_lookup, ctx, &ctx_lookup_cfg, TRUE)) != VAR_OK) {
  -                            log2(ctx, ERROR, "expansion of '%s' failed: %s", cp, var_strerror(var_rc));
  +                    else {
  +                        /* expanding regex references into header value */
  +                        {
  +                            var_rc_t var_rc;
  +                            char *res_ptr;
  +                            log1(ctx, DEBUG, "expanding regex references in header value '%s'", hrI->val);
  +                            if ((var_rc = var_expand(hrI->val, strlen(hrI->val), &res_ptr, NULL,
  +                                                     regex_lookup, regex_ctx, &regex_lookup_cfg, TRUE)) != VAR_OK) {
  +                                log2(ctx, ERROR, "expansion of '%s' failed: %s", hrI->val, var_strerror(var_rc));
  +                            }
  +                            log1(ctx, DEBUG, "expansion result '%s'", res_ptr);
  +                            cp = res_ptr;
  +                        }
  +                        /* expanding header and other variables into header value */
  +                        if (hrI->val != NULL) {
  +                            var_rc_t var_rc;
  +                            char *res_ptr;
  +                            log1(ctx, DEBUG, "expanding variables in header value '%s'", hrI->val);
  +                            if ((var_rc = var_expand(cp, strlen(cp), &res_ptr, NULL,
  +                                                     ctx_lookup, ctx, &ctx_lookup_cfg, TRUE)) != VAR_OK) {
  +                                log2(ctx, ERROR, "expansion of '%s' failed: %s", cp, var_strerror(var_rc));
  +                            }
  +                            log1(ctx, DEBUG, "expansion result '%s'", res_ptr);
  +                            hdNew->data.s = res_ptr;
  +                            hdNew->ndata = 1;
                           }
  -                        log1(ctx, DEBUG, "expansion result '%s'", res_ptr);
  -                        hdNew->data.s = res_ptr;
  -                        hdNew->ndata = 1;
                       }
                       /*FIXME clean up data.m */
                       headerreplace(hdI, hdNew);

From ossp-cvs-owner@ossp.org  Wed Feb 27 11:02:59 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A502076366; Wed, 27 Feb 2002 11:02:59 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c
Message-Id: <20020227100259.A502076366@mail.ossp.org>
Date: Wed, 27 Feb 2002 11:02:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   27-Feb-2002 11:02:59
  Branch: HEAD                             Handle: 2002022710025900

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c

  Log:
    eh, azNewsgroups is value only

  Summary:
    Revision    Changes     Path
    1.56        +0  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.55 -r1.56 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	27 Feb 2002 09:55:55 -0000	1.55
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	27 Feb 2002 10:02:59 -0000	1.56
  @@ -1120,7 +1120,6 @@
                               }
                               log0(msg, DEBUG, "FIXME trace #31");
                           }
  -                        argz_add(&((msg_t *)msg)->azNewsgroups, &((msg_t *)msg)->asNewsgroups, "Newsgroups:"); //FIXME
                           argz_add(&((msg_t *)msg)->azNewsgroups, &((msg_t *)msg)->asNewsgroups, "invalid.tst"); //FIXME
                           if ((rc = msg_join((msg_t *)msg)) != MSG_OK) {
                               log1(ctx, ERROR, "Error joining message: %s", msg_error(rc));

From ossp-cvs-owner@ossp.org  Wed Feb 27 11:22:38 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8723276366; Wed, 27 Feb 2002 11:22:38 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c
Message-Id: <20020227102238.8723276366@mail.ossp.org>
Date: Wed, 27 Feb 2002 11:22:38 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   27-Feb-2002 11:22:38
  Branch: HEAD                             Handle: 2002022710223800

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c

  Log:
    removed odd incl./excl. problem

  Summary:
    Revision    Changes     Path
    1.57        +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.56 -r1.57 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	27 Feb 2002 10:02:59 -0000	1.56
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	27 Feb 2002 10:22:38 -0000	1.57
  @@ -1369,7 +1369,7 @@
       log2(ctx, DEBUG, "rgx_lookup variable \"%s\" (%d)", var_ptr, var_len);
       rc = VAR_ERR_UNDEFINED_VARIABLE;
       i = atoi(var_ptr); /* works with both '}' and '\0' termination */
  -    if (i <= ctx->nMatch) {
  +    if (i < ctx->nMatch) {
           *val_ptr = ctx->acpMatch[i];
           *val_len = strlen(ctx->acpMatch[i]);
           *val_size = 0;

From ossp-cvs-owner@ossp.org  Wed Feb 27 12:36:54 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E52B876366; Wed, 27 Feb 2002 12:36:53 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var TODO
Message-Id: <20020227113653.E52B876366@mail.ossp.org>
Date: Wed, 27 Feb 2002 12:36:53 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   27-Feb-2002 12:36:53
  Branch: HEAD                             Handle: 2002022711365300

  Modified files:
    ossp-pkg/var            TODO

  Log:
    update TODO

  Summary:
    Revision    Changes     Path
    1.10        +28 -21     ossp-pkg/var/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/var/TODO
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 TODO
  --- ossp-pkg/var/TODO	4 Jan 2002 22:31:43 -0000	1.9
  +++ ossp-pkg/var/TODO	27 Feb 2002 11:36:53 -0000	1.10
  @@ -1,9 +1,10 @@
                                  OSSP var
   
  - - Man braucht ein Schleifenkonstrukt, das über Arrays iteriert:
  + o document loop construct
   
  + ---------------------------------------------------------------------
  + - Man braucht ein Schleifenkonstrukt, das über Arrays iteriert:
          [${foo}${bar}]
  -
      Dies wird so interpretiert, daß der Parser an den Variablennamen
      den jeweiligen Index anhängt, und die ganze Zeile expandiert,
      solange, bis _alle_ in dem Konstrukt verwandten Variablen für den
  @@ -11,33 +12,23 @@
      undefiniert, werden sie durch den Leerstring "" ersetzt. Text
      innerhalb des Konstrukten wird "verbatim" in jeder Zeile erhalten,
      beispielsweise:
  -
           [${foo}: ${bar}\n]
  -
      Hierzu muß var_expand() wissen, wie sie einen indizierten
      Variablenzugriff erzeugen kann. Hierzu wird var_config_t um
      "char startindex" und "char endindex" erweitert. Weiterhin wird in
      var_config_t "char current_index" ein Zeichen konfiguriert, unter
      dem der aktuelle Index der Schleife zu bekommen ist. Defaults
      werden sein: "[", "]" und "#" respektive.
  -
      Wenn Variablen innerhalb des Konstruktes bereits einen Index haben,
      wird dieser (unter Beachtung eventuell notwendiger Arithmetik)
      berechnet und "fest" verwendet, zum Beispiel:
  -
          [${foo[1]}]
  -
      oder
  -
          [${foo[(#+1)/2]}]
  -
      Dementsprechend sind die folgenden Ausdrück equivalent:
  -
          [${foo[#]}] == [${foo}]
  -
      Wir unterstützen die vier Grundrechenarten, Modulo und Klammerung
      für arithmetische Operationen.
  -
      Weiterhin wird der Callback um einen Parameter "int index"
      erweitert, welchen im Falle eines "normalen Variablenzugriffs" auf
      Null gesetzt wird. Zugriffe auf Indices, die nicht existieren,
  @@ -45,24 +36,18 @@
      auf einen negativen Index liefert die Anzahl der Elemente in dem
      Array als String zurück. Ebenso liefert das Konstrukt ${foo:#} die
      Anzahl der Elemente zurück, wenn $foo ein Array ist.
  -
      [...]-Konstrukte können beliebig tief geschachtelt werden.
  -
      Innerhalb von Indixangaben dürfen erneut Variablen verwendet
      werden.
  -
      Arrays werden nur in "expressions" erkannt, und im Konstrukt werden
      auch nur "expressions" gesondert behandelt; normale Variablen
      werden in jedem Pass normal expandiert.
  -
      Sind "stardindex", "endindex" oder "current_index" leer (gleich
      '\0'), wird dieses Konstrukt vom Parser nicht erkannt und als Text
      interpretiert -- abgesehen von den Variablen, natürlich, welche
      aber nicht in einer Schleife expandiert werden, noch werden beim
      Callback Array-Elemente abgefragt.
   
  - - Abgabe: 6.12.2001 zum Nikolaustag im CVS.
  -
    **** CLARIFICATION ****
   
       <            [ $HOME ${ARRAY} ] 
  @@ -129,10 +114,32 @@
           [$foo{#}\n]{1,$#{foo}-1}
           ${empty:p/-/${foo[$#{foo}]:#}/}
           ${foo[$#{foo}]}
  + ---------------------------------------------------------------------
  +
  + o manual page style cleanup
   
  + o docs of o1,2 und o1-2 seem to be still incorrect
   
  ----
  + o add library context and move initialization and configuration
  +   into this context.
   
  -o manual page style cleanup
  -o docs of o1,2 und o1-2 seem to be still incorrect
  + o bugfix?: (thl)
  +   habe einen Bug in lib_var gefunden, scheint konzeptioneller Art zu sein.
  +   Ich benoetige zwei Passes fuer eine Anwendung, da es zwei verschiedene
  +   Arten von Variablen gibt. Eine hat nur Zahlen als gueltigen Namen, die
  +   andere Zahlen, Buchstaben, Punkt und Strich. Und die Ergebnisse des
  +   ersten Passes koennen die Namen des zweiten beeinflussen, daher muessen
  +   es zwei Passes sein. Sollte eigentlich funktionieren, dafuer gibt es die
  +   namechars im var_config_t und das force_expand feature. Ich setze also
  +   zuerst die namechars auf "0-9" und force_expand auf FALSE, anschliessend
  +   die namechars auf  "0-9a-zA-Z.-" und force_expand auf TRUE. Aber bei
  +   einem Input von "${0}${abc}" bricht der Parser den ersten Pass bei "abc"
  +   mit "failed: incomplete variable" ab! Workaround: gleiche Namespaces,
  +   d.h. namechar's, verwenden - aber das ist nicht wirklich die ultimative
  +   Loesung.
  +
  + o additional feature: functions via callback.
  +   ${foo:F<bar>:F<quux>} calls callback for bar with result of foo
  +   expansion and then callback for quux with the result returned from
  +   bar.
   

From ossp-cvs-owner@ossp.org  Wed Feb 27 12:55:27 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 749E876366; Wed, 27 Feb 2002 12:55:27 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var TODO var.pod
Message-Id: <20020227115527.749E876366@mail.ossp.org>
Date: Wed, 27 Feb 2002 12:55:27 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   27-Feb-2002 12:55:27
  Branch: HEAD                             Handle: 2002022711552600

  Modified files:
    ossp-pkg/var            TODO var.pod

  Log:
    fix offset documentation

  Summary:
    Revision    Changes     Path
    1.11        +0  -2      ossp-pkg/var/TODO
    1.19        +11 -11     ossp-pkg/var/var.pod
  ____________________________________________________________________________

  Index: ossp-pkg/var/TODO
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 TODO
  --- ossp-pkg/var/TODO	27 Feb 2002 11:36:53 -0000	1.10
  +++ ossp-pkg/var/TODO	27 Feb 2002 11:55:26 -0000	1.11
  @@ -118,8 +118,6 @@
   
    o manual page style cleanup
   
  - o docs of o1,2 und o1-2 seem to be still incorrect
  -
    o add library context and move initialization and configuration
      into this context.
   
  Index: ossp-pkg/var/var.pod
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 var.pod
  --- ossp-pkg/var/var.pod	2 Jan 2002 17:12:18 -0000	1.18
  +++ ossp-pkg/var/var.pod	27 Feb 2002 11:55:26 -0000	1.19
  @@ -538,24 +538,24 @@
   This operation will replace the contents of $name with "word" if $name
   is not empty. Otherwise, it will expand to the contents of $name.
   
  -=item ${name:o<start>,<end>}
  +=item ${name:o<start>-<end>}
   
   This operation will cut the string starting at position "start" to
   ending position "end" out of the contents of $name and return that.
   Please note that the character at position "end" is included in the
  -result; ${name:o3,4} for instance, will return a two-character string.
  +result; ${name:o3-4} for instance, will return a two-character string.
   Also, please note that start positions begin at zero (0)! If the "end"
  -parameter is left out, as in ${name:o3,}, the operation will return
  -the string starting at position 3 until the end.
  +parameter is left out, as in ${name:o3-}, the operation will return the
  +string starting at position 3 until the end.
   
  -=item ${name:o<start>-<length>}
  +=item ${name:o<start>,<length>}
   
  -This operation will cut the range of "start" to "end" out of the
  -contents of $name and return that. ${name:o3-4} means, for instance,
  -to return the next 4 charaters starting at position 3 in the string.
  -Please note that start positions begin at zero (0)! If the "end" range
  -is left out, as in ${name:o3-}, the operation will return the string
  -starting at position 3 until the end.
  +This operation will cut the string starting at position "start"
  +of length "length" out of the contents of $name and return that.
  +${name:o3,4} means, for instance, to return the next 4 characters
  +starting at position 3 in the string. Please note that start positions
  +begin at zero (0)! If "length" is left out, as in ${name:o3,}, the
  +operation will return the string starting at position 3 until the end.
   
   =item ${name:s/<pattern>/<string>/[gti]}
   

From ossp-cvs-owner@ossp.org  Wed Feb 27 12:56:01 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9DBD27638A; Wed, 27 Feb 2002 12:56:01 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var TODO
Message-Id: <20020227115601.9DBD27638A@mail.ossp.org>
Date: Wed, 27 Feb 2002 12:56:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   27-Feb-2002 12:56:01
  Branch: HEAD                             Handle: 2002022711560100

  Modified files:
    ossp-pkg/var            TODO

  Log:
    remember an issue

  Summary:
    Revision    Changes     Path
    1.12        +1  -1      ossp-pkg/var/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/var/TODO
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 TODO
  --- ossp-pkg/var/TODO	27 Feb 2002 11:55:26 -0000	1.11
  +++ ossp-pkg/var/TODO	27 Feb 2002 11:56:01 -0000	1.12
  @@ -116,7 +116,7 @@
           ${foo[$#{foo}]}
    ---------------------------------------------------------------------
   
  - o manual page style cleanup
  + o manual page style cleanup and perhaps merge with var_qref.pod?
   
    o add library context and move initialization and configuration
      into this context.

From ossp-cvs-owner@ossp.org  Wed Feb 27 13:17:34 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A8D8476366; Wed, 27 Feb 2002 13:17:34 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c
Message-Id: <20020227121734.A8D8476366@mail.ossp.org>
Date: Wed, 27 Feb 2002 13:17:34 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   27-Feb-2002 13:17:34
  Branch: HEAD                             Handle: 2002022712173400

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c

  Log:
    ctx_lookup provides access to options through lib_val now

  Summary:
    Revision    Changes     Path
    1.58        +30 -6      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.57 -r1.58 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	27 Feb 2002 10:22:38 -0000	1.57
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	27 Feb 2002 12:17:34 -0000	1.58
  @@ -1311,13 +1311,37 @@
       /*FIXME
       const char *name;
       size_t len;
  -    char *cp;
       */
       var_rc_t rc;
  +    char *cp;
  +    optionval_t *ov;
   
       log2(ctx, DEBUG, "ctx_lookup variable \"%s\" (%d)", var_ptr, var_len);
       rc = VAR_ERR_UNDEFINED_VARIABLE;
  -    if (strncasecmp(var_ptr, "test", var_len) == 0) {
  +    if (strncasecmp(var_ptr, "option.", strlen("option.")) == 0) {
  +        cp = str_dupex(var_ptr, var_len);
  +        if (val_get(ctx->val, cp, &ov) == VAL_OK) {
  +            //log3(ctx, DEBUG, "FIXME var_idx=%d, ov->type=%d, ov->ndata=%d", var_idx, ov->type, ov->ndata);
  +            if ((var_idx == 0) && (ov->ndata == 1) && (ov->type == OPT_SINGLE)) { /* request first/only single value */
  +                *val_ptr = ov->data.s;
  +                *val_len = strlen(ov->data.s);
  +                *val_size = 0;
  +                rc = VAR_OK;
  +            }
  +            else if ((var_idx == 0) && (ov->ndata == 1) && (ov->type == OPT_FLAG)) { /* request first/only single value */
  +                *val_ptr = ov->data.f == TRUE ? "yes" : "no";
  +                *val_len = strlen(ov->data.s);
  +                *val_size = 0;
  +                rc = VAR_OK;
  +            }
  +            else if ((var_idx < ov->ndata) && (ov->type == OPT_MULTI)) { /* request second+ from multi value */
  +                *val_ptr = ov->data.m[var_idx];
  +                *val_len = strlen(ov->data.m[var_idx]);
  +                *val_size = 0;
  +                rc = VAR_OK;
  +            }
  +        }
  +        free(cp);
       }
       else if (strncasecmp(var_ptr, "xyz", var_len) == 0) {
           *val_ptr = "Hello, World!";
  @@ -1349,7 +1373,7 @@
       ']',          /* endindex      */ //FIXME
       '#',          /* current_index */ //FIXME
       '\\',         /* escape        */ 
  -    "0-9"         /* namechars     */ 
  +    "0-9"         /* namechars     */ //FIXME bug in lib_val
   };
   
   static var_rc_t regex_lookup(
  @@ -1618,7 +1642,7 @@
                           char *res_ptr;
                           log1(ctx, DEBUG, "expanding regex references in headername '%s'", hrI->header);
                           if ((var_rc = var_expand(hrI->header, strlen(hrI->header), &res_ptr, NULL,
  -                                                 regex_lookup, regex_ctx, &regex_lookup_cfg, TRUE)) != VAR_OK) {
  +                                                 regex_lookup, regex_ctx, &regex_lookup_cfg, FALSE)) != VAR_OK) {
                               log2(ctx, ERROR, "expansion of '%s' failed: %s", hrI->header, var_strerror(var_rc));
                           }
                           log1(ctx, DEBUG, "expansion result '%s'", res_ptr);
  @@ -1636,7 +1660,7 @@
                               char *res_ptr;
                               log1(ctx, DEBUG, "expanding regex references in header value '%s'", hrI->val);
                               if ((var_rc = var_expand(hrI->val, strlen(hrI->val), &res_ptr, NULL,
  -                                                     regex_lookup, regex_ctx, &regex_lookup_cfg, TRUE)) != VAR_OK) {
  +                                                     regex_lookup, regex_ctx, &regex_lookup_cfg, FALSE)) != VAR_OK) {
                                   log2(ctx, ERROR, "expansion of '%s' failed: %s", hrI->val, var_strerror(var_rc));
                               }
                               log1(ctx, DEBUG, "expansion result '%s'", res_ptr);
  @@ -1648,7 +1672,7 @@
                               char *res_ptr;
                               log1(ctx, DEBUG, "expanding variables in header value '%s'", hrI->val);
                               if ((var_rc = var_expand(cp, strlen(cp), &res_ptr, NULL,
  -                                                     ctx_lookup, ctx, &ctx_lookup_cfg, TRUE)) != VAR_OK) {
  +                                                     ctx_lookup, ctx, &ctx_lookup_cfg, FALSE)) != VAR_OK) {
                                   log2(ctx, ERROR, "expansion of '%s' failed: %s", cp, var_strerror(var_rc));
                               }
                               log1(ctx, DEBUG, "expansion result '%s'", res_ptr);

From ossp-cvs-owner@ossp.org  Wed Feb 27 14:44:17 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 940A376366; Wed, 27 Feb 2002 14:44:17 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var Makefile.in VERSION aclocal.m4 configure.ac v...
Message-Id: <20020227134417.940A376366@mail.ossp.org>
Date: Wed, 27 Feb 2002 14:44:17 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   27-Feb-2002 14:44:17
  Branch: HEAD                             Handle: 2002022713441600

  Modified files:
    ossp-pkg/var            Makefile.in VERSION aclocal.m4 configure.ac
                            var-config.in var-config.pod var.c var.h var.pod
                            var_qref.pod var_test.c

  Log:
    style and text cleanups

  Summary:
    Revision    Changes     Path
    1.4         +2  -2      ossp-pkg/var/Makefile.in
    1.2         +2  -2      ossp-pkg/var/VERSION
    1.2         +5  -6      ossp-pkg/var/aclocal.m4
    1.6         +2  -2      ossp-pkg/var/configure.ac
    1.3         +2  -2      ossp-pkg/var/var-config.in
    1.3         +2  -2      ossp-pkg/var/var-config.pod
    1.61        +46 -47     ossp-pkg/var/var.c
    1.23        +58 -61     ossp-pkg/var/var.h
    1.20        +2  -2      ossp-pkg/var/var.pod
    1.3         +2  -2      ossp-pkg/var/var_qref.pod
    1.33        +3  -3      ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/Makefile.in
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 Makefile.in
  --- ossp-pkg/var/Makefile.in	5 Feb 2002 19:55:42 -0000	1.3
  +++ ossp-pkg/var/Makefile.in	27 Feb 2002 13:44:16 -0000	1.4
  @@ -1,9 +1,9 @@
   ##
  -##  VAR - OSSP variable expression library.
  +##  OSSP var -- Variable Expansion
   ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
  -##  This file is part of OSSP VAR, an extensible data serialization
  +##  This file is part of OSSP var, a variable expansion
   ##  library which can be found at http://www.ossp.org/pkg/var/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
  Index: ossp-pkg/var/VERSION
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 VERSION
  --- ossp-pkg/var/VERSION	20 Nov 2001 20:02:21 -0000	1.1
  +++ ossp-pkg/var/VERSION	27 Feb 2002 13:44:16 -0000	1.2
  @@ -1,6 +1,6 @@
   
  -  VERSION -- Version Information for OSSP VAR (syntax: Text)
  +  VERSION -- Version Information for OSSP var (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP VAR, Version 0.1.0 (20-Nov-2001)
  +  This is OSSP var, Version 0.1.0 (20-Nov-2001)
   
  Index: ossp-pkg/var/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 aclocal.m4
  --- ossp-pkg/var/aclocal.m4	30 Jan 2002 19:37:14 -0000	1.1
  +++ ossp-pkg/var/aclocal.m4	27 Feb 2002 13:44:16 -0000	1.2
  @@ -1,11 +1,10 @@
   dnl ##
  -dnl ##  val - OSSP Value Library
  -dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  OSSP val -- Variable Expansion
  +dnl ##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
  -dnl ##  This file is part of OSSP val, a Value library which
  -dnl ##  can be found at http://www.ossp.org/pkg/val/.
  +dnl ##  This file is part of OSSP var, a variable expansion
  +dnl ##  which can be found at http://www.ossp.org/pkg/var/.
   dnl ##
   dnl ##  Permission to use, copy, modify, and distribute this software for
   dnl ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/var/configure.ac
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 configure.ac
  --- ossp-pkg/var/configure.ac	31 Jan 2002 09:09:31 -0000	1.5
  +++ ossp-pkg/var/configure.ac	27 Feb 2002 13:44:16 -0000	1.6
  @@ -1,9 +1,9 @@
   dnl ##
  -dnl ##  VAR - OSSP variable expression library.
  +dnl ##  OSSP var -- Variable Expansion
   dnl ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   dnl ##
  -dnl ##  This file is part of OSSP VAR, an extensible data serialization
  +dnl ##  This file is part of OSSP var, a variable expansion
   dnl ##  library which can be found at http://www.ossp.org/pkg/var/.
   dnl ##
   dnl ##  Permission to use, copy, modify, and distribute this software for
  Index: ossp-pkg/var/var-config.in
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 var-config.in
  --- ossp-pkg/var/var-config.in	2 Jan 2002 17:12:18 -0000	1.2
  +++ ossp-pkg/var/var-config.in	27 Feb 2002 13:44:16 -0000	1.3
  @@ -1,10 +1,10 @@
   #!/bin/sh
   ##
  -##  VAR - OSSP variable expression library.
  +##  OSSP var -- Variable Expansion
   ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
  -##  This file is part of OSSP VAR, an extensible data serialization
  +##  This file is part of OSSP var, a variable expansion
   ##  library which can be found at http://www.ossp.org/pkg/var/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
  Index: ossp-pkg/var/var-config.pod
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 var-config.pod
  --- ossp-pkg/var/var-config.pod	2 Jan 2002 17:12:18 -0000	1.2
  +++ ossp-pkg/var/var-config.pod	27 Feb 2002 13:44:16 -0000	1.3
  @@ -1,9 +1,9 @@
   ##
  -##  VAR - OSSP variable expression library.
  +##  OSSP var -- Variable Expansion
   ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
  -##  This file is part of OSSP VAR, an extensible data serialization
  +##  This file is part of OSSP var, a variable expansion
   ##  library which can be found at http://www.ossp.org/pkg/var/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.60 -r1.61 var.c
  --- ossp-pkg/var/var.c	30 Jan 2002 19:37:14 -0000	1.60
  +++ ossp-pkg/var/var.c	27 Feb 2002 13:44:16 -0000	1.61
  @@ -1,9 +1,9 @@
   /*
  -**  VAR - OSSP variable expression library.
  +**  OSSP var - Variable Expansion
   **  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
  -**  This file is part of OSSP VAR, an extensible data serialization
  +**  This file is part of OSSP var, a variable expansion
   **  library which can be found at http://www.ossp.org/pkg/var/.
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -24,7 +24,7 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  var.c: VAR library implementation.
  +**  var.c: library implementation
   */
   
   #ifdef HAVE_CONFIG_H
  @@ -74,50 +74,49 @@
   const char *var_strerror(var_rc_t rc)
   {
       static char *var_errors[] = {
  -        "OK",                                                                   /* VAR_OK = 0 */
  -        "incomplete named character",                                           /* VAR_ERR_INCOMPLETE_NAMED_CHARACTER = -1 */
  -        "incomplete hex",                                                       /* VAR_ERR_INCOMPLETE_HEX = -2 */
  -        "invalid hex",                                                          /* VAR_ERR_INVALID_HEX = -3 */
  -        "octal too large",                                                      /* VAR_ERR_OCTAL_TOO_LARGE = -4 */
  -        "invalid octal",                                                        /* VAR_ERR_INVALID_OCTAL = -5 */
  -        "incomplete octal",                                                     /* VAR_ERR_INCOMPLETE_OCTAL = -6 */
  -        "incomplete grouped hex",                                               /* VAR_ERR_INCOMPLETE_GROUPED_HEX = -7 */
  -        "incorrect character class specification",                              /* VAR_ERR_INCORRECT_CLASS_SPEC = -8 */
  -        "var_expand() configuration is inconsistent",                           /* VAR_ERR_INVALID_CONFIGURATION = -9 */
  -        "out of memory",                                                        /* VAR_ERR_OUT_OF_MEMORY = -10 */
  -        "incomplete variable",                                                  /* VAR_ERR_INCOMPLETE_VARIABLE_SPEC = -11 */
  -        "undefined variable",                                                   /* VAR_ERR_UNDEFINED_VARIABLE = -12 */
  -        "input is neither text nor variable",                                   /* VAR_ERR_INPUT_ISNT_TEXT_NOR_VARIABLE = -13 */
  -        "unknown command in variable",                                          /* VAR_ERR_UNKNOWN_COMMAND_CHAR = -14 */
  -        "unknown error",                                                        /* -15 is not used */
  -        "malformated search and replace operation",                             /* VAR_ERR_MALFORMATTED_REPLACE = -16 */
  -        "unknown flag specified in search and replace operation",               /* VAR_ERR_UNKNOWN_REPLACE_FLAG = -17 */
  -        "invalid regular expression in search and replace operation",           /* VAR_ERR_INVALID_REGEX_IN_REPLACE = -18 */
  -        "missing parameter in command",                                         /* VAR_ERR_MISSING_PARAMETER_IN_COMMAND = -19 */
  -        "empty search string in search and replace operation",                  /* VAR_ERR_EMPTY_SEARCH_STRING = -20 */
  -        "start offset missing in cut operation",                                /* VAR_ERR_MISSING_START_OFFSET = -21 */
  -        "offsets in cut operation delimited by unknown character",              /* VAR_ERR_INVALID_OFFSET_DELIMITER = -22 */
  -        "range in cut operation is out of bounds",                              /* VAR_ERR_RANGE_OUT_OF_BOUNDS = -23 */
  -        "offset in cut operation is out of bounds",                             /* VAR_ERR_OFFSET_OUT_OF_BOUNDS = -24 */
  -        "logic error in cut operation",                                         /* VAR_ERR_OFFSET_LOGIC = -25 */
  -        "malformatted transpose operation",                                     /* VAR_ERR_MALFORMATTED_TRANSPOSE = -26 */
  -        "source class does not match destination class in transpose operation", /* VAR_ERR_TRANSPOSE_CLASSES_MISMATCH = -27 */
  -        "empty character class in transpose operation",                         /* VAR_ERR_EMPTY_TRANSPOSE_CLASS = -28 */
  -        "incorrect character class in transpose operation",                     /* VAR_ERR_INCORRECT_TRANSPOSE_CLASS_SPEC = -29 */
  -        "malformatted padding operation",                                       /* VAR_ERR_MALFORMATTED_PADDING = -30 */
  -        "width parameter missing in padding operation",                         /* VAR_ERR_MISSING_PADDING_WIDTH = -31 */
  -        "fill string missing in padding operation",                             /* VAR_ERR_EMPTY_PADDING_FILL_STRING = -32 */
  -        "unknown quoted pair in search and replace operation",                  /* VAR_ERR_UNKNOWN_QUOTED_PAIR_IN_REPLACE = -33 */
  -        "submatch referred to in replace string does not exist in search string", /* VAR_ERR_SUBMATCH_OUT_OF_RANGE = -34 */
  -        "invalid argument",                                                     /* VAR_ERR_INVALID_ARGUMENT = -35 */
  -        "incomplete quoted pair",                                               /* VAR_ERR_INCOMPLETE_QUOTED_PAIR = -36 */
  -        "lookup function does not support variable arrays",                     /* VAR_ERR_ARRAY_LOOKUPS_ARE_UNSUPPORTED = -37 */
  -        "index specification of array variable contains an invalid character",  /* VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC = -38 */
  -        "index specification of array variable is incomplete",                  /* VAR_ERR_INCOMPLETE_INDEX_SPEC = -39 */
  -        "bracket expression in array variable's index is not closed",           /* VAR_ERR_UNCLOSED_BRACKET_IN_INDEX = -40 */
  -        "division by zero error in index specification",                        /* VAR_ERR_DIVISION_BY_ZERO_IN_INDEX = -41 */
  -        "unterminated loop construct",                                          /* VAR_ERR_UNTERMINATED_LOOP_CONSTRUCT = -42 */
  -        "invalid character in loop limits"                                      /* VAR_ERR_INVALID_CHAR_IN_LOOP_LIMITS = -43 */
  +        "everything ok",                                                        /* VAR_OK = 0 */
  +        "incomplete named character",                                           /* VAR_ERR_INCOMPLETE_NAMED_CHARACTER */
  +        "incomplete hexadecimal value",                                         /* VAR_ERR_INCOMPLETE_HEX */
  +        "invalid hexadecimal value",                                            /* VAR_ERR_INVALID_HEX */
  +        "octal value too large",                                                /* VAR_ERR_OCTAL_TOO_LARGE */
  +        "invalid octal value",                                                  /* VAR_ERR_INVALID_OCTAL */
  +        "incomplete octal value",                                               /* VAR_ERR_INCOMPLETE_OCTAL */
  +        "incomplete grouped hexadecimal value",                                 /* VAR_ERR_INCOMPLETE_GROUPED_HEX */
  +        "incorrect character class specification",                              /* VAR_ERR_INCORRECT_CLASS_SPEC */
  +        "invalid expansion configuration",                                      /* VAR_ERR_INVALID_CONFIGURATION */
  +        "out of memory",                                                        /* VAR_ERR_OUT_OF_MEMORY */
  +        "incomplete variable specification",                                    /* VAR_ERR_INCOMPLETE_VARIABLE_SPEC */
  +        "undefined variable",                                                   /* VAR_ERR_UNDEFINED_VARIABLE */
  +        "input is neither text nor variable",                                   /* VAR_ERR_INPUT_ISNT_TEXT_NOR_VARIABLE */
  +        "unknown command character in variable",                                /* VAR_ERR_UNKNOWN_COMMAND_CHAR */
  +        "malformated search and replace operation",                             /* VAR_ERR_MALFORMATTED_REPLACE */
  +        "unknown flag in search and replace operation",                         /* VAR_ERR_UNKNOWN_REPLACE_FLAG */
  +        "invalid regular expression in search and replace operation",           /* VAR_ERR_INVALID_REGEX_IN_REPLACE */
  +        "missing parameter in command",                                         /* VAR_ERR_MISSING_PARAMETER_IN_COMMAND */
  +        "empty search string in search and replace operation",                  /* VAR_ERR_EMPTY_SEARCH_STRING */
  +        "start offset missing in cut operation",                                /* VAR_ERR_MISSING_START_OFFSET */
  +        "offsets in cut operation delimited by unknown character",              /* VAR_ERR_INVALID_OFFSET_DELIMITER */
  +        "range out of bounds in cut operation",                                 /* VAR_ERR_RANGE_OUT_OF_BOUNDS */
  +        "offset out of bounds in cut operation",                                /* VAR_ERR_OFFSET_OUT_OF_BOUNDS */
  +        "logic error in cut operation",                                         /* VAR_ERR_OFFSET_LOGIC */
  +        "malformatted transpose operation",                                     /* VAR_ERR_MALFORMATTED_TRANSPOSE */
  +        "source and destination classes do not match in transpose operation",   /* VAR_ERR_TRANSPOSE_CLASSES_MISMATCH */
  +        "empty character class in transpose operation",                         /* VAR_ERR_EMPTY_TRANSPOSE_CLASS */
  +        "incorrect character class in transpose operation",                     /* VAR_ERR_INCORRECT_TRANSPOSE_CLASS_SPEC */
  +        "malformatted padding operation",                                       /* VAR_ERR_MALFORMATTED_PADDING */
  +        "width parameter missing in padding operation",                         /* VAR_ERR_MISSING_PADDING_WIDTH */
  +        "fill string missing in padding operation",                             /* VAR_ERR_EMPTY_PADDING_FILL_STRING */
  +        "unknown quoted pair in search and replace operation",                  /* VAR_ERR_UNKNOWN_QUOTED_PAIR_IN_REPLACE */
  +        "sub-matching reference out of range",                                  /* VAR_ERR_SUBMATCH_OUT_OF_RANGE */
  +        "invalid argument",                                                     /* VAR_ERR_INVALID_ARGUMENT */
  +        "incomplete quoted pair",                                               /* VAR_ERR_INCOMPLETE_QUOTED_PAIR */
  +        "lookup function does not support variable arrays",                     /* VAR_ERR_ARRAY_LOOKUPS_ARE_UNSUPPORTED */
  +        "index specification of array variable contains an invalid character",  /* VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC */
  +        "index specification of array variable is incomplete",                  /* VAR_ERR_INCOMPLETE_INDEX_SPEC */
  +        "bracket expression in array variable's index is not closed",           /* VAR_ERR_UNCLOSED_BRACKET_IN_INDEX */
  +        "division by zero error in index specification",                        /* VAR_ERR_DIVISION_BY_ZERO_IN_INDEX */
  +        "unterminated loop construct",                                          /* VAR_ERR_UNTERMINATED_LOOP_CONSTRUCT */
  +        "invalid character in loop limits"                                      /* VAR_ERR_INVALID_CHAR_IN_LOOP_LIMITS */
       };
   
       rc = 0 - rc;
  Index: ossp-pkg/var/var.h
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 var.h
  --- ossp-pkg/var/var.h	30 Jan 2002 19:37:14 -0000	1.22
  +++ ossp-pkg/var/var.h	27 Feb 2002 13:44:16 -0000	1.23
  @@ -1,9 +1,9 @@
   /*
  -**  VAR - OSSP variable expression library.
  +**  OSSP var - Variable Expansion
   **  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
  -**  This file is part of OSSP VAR, an extensible data serialization
  +**  This file is part of OSSP var, a variable expansion
   **  library which can be found at http://www.ossp.org/pkg/var/.
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -24,7 +24,7 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  var.h: VAR library API
  +**  var.h: library API
   */
   
   #ifndef __VAR_H__
  @@ -32,69 +32,66 @@
   
   #include <stdlib.h>
   
  -/* Error codes returned by the varexp library. */
  -
  +/* Error codes */
   typedef enum {
  -    VAR_ERR_CALLBACK = -64,
  -    VAR_ERR_INVALID_CHAR_IN_LOOP_LIMITS = -43,
  -    VAR_ERR_UNTERMINATED_LOOP_CONSTRUCT = -42,
  -    VAR_ERR_DIVISION_BY_ZERO_IN_INDEX = -41,
  -    VAR_ERR_UNCLOSED_BRACKET_IN_INDEX = -40,
  -    VAR_ERR_INCOMPLETE_INDEX_SPEC = -39,
  -    VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC = -38,
  -    VAR_ERR_ARRAY_LOOKUPS_ARE_UNSUPPORTED  = -37,
  -    VAR_ERR_INCOMPLETE_QUOTED_PAIR = -36,
  -    VAR_ERR_INVALID_ARGUMENT = -35,
  -    VAR_ERR_SUBMATCH_OUT_OF_RANGE = -34,
  -    VAR_ERR_UNKNOWN_QUOTED_PAIR_IN_REPLACE = -33,
  -    VAR_ERR_EMPTY_PADDING_FILL_STRING = -32,
  -    VAR_ERR_MISSING_PADDING_WIDTH = -31,
  -    VAR_ERR_MALFORMATTED_PADDING = -30,
  -    VAR_ERR_INCORRECT_TRANSPOSE_CLASS_SPEC = -29,
  -    VAR_ERR_EMPTY_TRANSPOSE_CLASS = -28,
  -    VAR_ERR_TRANSPOSE_CLASSES_MISMATCH = -27,
  -    VAR_ERR_MALFORMATTED_TRANSPOSE = -26,
  -    VAR_ERR_OFFSET_LOGIC = -25,
  -    VAR_ERR_OFFSET_OUT_OF_BOUNDS = -24,
  -    VAR_ERR_RANGE_OUT_OF_BOUNDS = -23,
  -    VAR_ERR_INVALID_OFFSET_DELIMITER = -22,
  -    VAR_ERR_MISSING_START_OFFSET = -21,
  -    VAR_ERR_EMPTY_SEARCH_STRING = -20,
  -    VAR_ERR_MISSING_PARAMETER_IN_COMMAND = -19,
  -    VAR_ERR_INVALID_REGEX_IN_REPLACE = -18,
  -    VAR_ERR_UNKNOWN_REPLACE_FLAG = -17,
  -    VAR_ERR_MALFORMATTED_REPLACE = -16,
  -    VAR_ERR_UNKNOWN_COMMAND_CHAR = -14,
  -    VAR_ERR_INPUT_ISNT_TEXT_NOR_VARIABLE = -13,
  -    VAR_ERR_UNDEFINED_VARIABLE = -12,
  -    VAR_ERR_INCOMPLETE_VARIABLE_SPEC = -11,
  -    VAR_ERR_OUT_OF_MEMORY = -10,
  -    VAR_ERR_INVALID_CONFIGURATION = -9,
  -    VAR_ERR_INCORRECT_CLASS_SPEC = -8,
  -    VAR_ERR_INCOMPLETE_GROUPED_HEX = -7,
  -    VAR_ERR_INCOMPLETE_OCTAL = -6,
  -    VAR_ERR_INVALID_OCTAL = -5,
  -    VAR_ERR_OCTAL_TOO_LARGE = -4,
  -    VAR_ERR_INVALID_HEX = -3,
  -    VAR_ERR_INCOMPLETE_HEX = -2,
  -    VAR_ERR_INCOMPLETE_NAMED_CHARACTER = -1,
  +    VAR_ERR_CALLBACK                        = -64,
  +    VAR_ERR_INVALID_CHAR_IN_LOOP_LIMITS     = -42,
  +    VAR_ERR_UNTERMINATED_LOOP_CONSTRUCT     = -41,
  +    VAR_ERR_DIVISION_BY_ZERO_IN_INDEX       = -40,
  +    VAR_ERR_UNCLOSED_BRACKET_IN_INDEX       = -39,
  +    VAR_ERR_INCOMPLETE_INDEX_SPEC           = -37,
  +    VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC      = -36,
  +    VAR_ERR_ARRAY_LOOKUPS_ARE_UNSUPPORTED   = -35,
  +    VAR_ERR_INCOMPLETE_QUOTED_PAIR          = -34,
  +    VAR_ERR_INVALID_ARGUMENT                = -34,
  +    VAR_ERR_SUBMATCH_OUT_OF_RANGE           = -33,
  +    VAR_ERR_UNKNOWN_QUOTED_PAIR_IN_REPLACE  = -32,
  +    VAR_ERR_EMPTY_PADDING_FILL_STRING       = -31,
  +    VAR_ERR_MISSING_PADDING_WIDTH           = -30,
  +    VAR_ERR_MALFORMATTED_PADDING            = -29,
  +    VAR_ERR_INCORRECT_TRANSPOSE_CLASS_SPEC  = -28,
  +    VAR_ERR_EMPTY_TRANSPOSE_CLASS           = -27,
  +    VAR_ERR_TRANSPOSE_CLASSES_MISMATCH      = -26,
  +    VAR_ERR_MALFORMATTED_TRANSPOSE          = -25,
  +    VAR_ERR_OFFSET_LOGIC                    = -24,
  +    VAR_ERR_OFFSET_OUT_OF_BOUNDS            = -23,
  +    VAR_ERR_RANGE_OUT_OF_BOUNDS             = -22,
  +    VAR_ERR_INVALID_OFFSET_DELIMITER        = -21,
  +    VAR_ERR_MISSING_START_OFFSET            = -20,
  +    VAR_ERR_EMPTY_SEARCH_STRING             = -19,
  +    VAR_ERR_MISSING_PARAMETER_IN_COMMAND    = -18,
  +    VAR_ERR_INVALID_REGEX_IN_REPLACE        = -17,
  +    VAR_ERR_UNKNOWN_REPLACE_FLAG            = -16,
  +    VAR_ERR_MALFORMATTED_REPLACE            = -15,
  +    VAR_ERR_UNKNOWN_COMMAND_CHAR            = -14,
  +    VAR_ERR_INPUT_ISNT_TEXT_NOR_VARIABLE    = -13,
  +    VAR_ERR_UNDEFINED_VARIABLE              = -12,
  +    VAR_ERR_INCOMPLETE_VARIABLE_SPEC        = -11,
  +    VAR_ERR_OUT_OF_MEMORY                   = -10,
  +    VAR_ERR_INVALID_CONFIGURATION           =  -9,
  +    VAR_ERR_INCORRECT_CLASS_SPEC            =  -8,
  +    VAR_ERR_INCOMPLETE_GROUPED_HEX          =  -7,
  +    VAR_ERR_INCOMPLETE_OCTAL                =  -6,
  +    VAR_ERR_INVALID_OCTAL                   =  -5,
  +    VAR_ERR_OCTAL_TOO_LARGE                 =  -4,
  +    VAR_ERR_INVALID_HEX                     =  -3,
  +    VAR_ERR_INCOMPLETE_HEX                  =  -2,
  +    VAR_ERR_INCOMPLETE_NAMED_CHARACTER      =  -1,
       VAR_OK = 0
   } var_rc_t;
   
   /* Expand quoted pairs to their binary representation. */
  -
  -var_rc_t var_unescape(const char *src, size_t len, char *dst,
  -    int unescape_all);
  +var_rc_t var_unescape(const char *src, size_t len, char *dst, int unescape_all);
   
   /* Prototype for the lookup callback used in var_expand(). */
  -
  -typedef var_rc_t (*var_cb_t) (void *context,
  +typedef var_rc_t (*var_cb_t)(
  +    void *context,
       const char *varname, size_t name_len, int idx,
       const char **data, size_t *data_len,
  -    size_t *buffer_size);
  +    size_t *buffer_size
  +);
   
   /* Configure the var_expand() parser's tokens. */
  -
   typedef struct {
       char varinit;        /* '$' */
       char startdelim;     /* '{' */
  @@ -105,20 +102,20 @@
       char escape;         /* '\' */
       char *namechars;     /* 'a-zA-Z0-9_' */
   } var_config_t;
  +
  +/* The default configuration */
   extern const var_config_t var_config_default;
   
   /* Expand variable expressions in a text buffer. */
  -
   var_rc_t var_expand(const char *input, size_t input_len,
  -    char **result, size_t *result_len,
  -    var_cb_t lookup, void *lookup_context,
  -    const var_config_t *config, int force_expand);
  +                    char **result, size_t *result_len,
  +                    var_cb_t lookup, void *lookup_context,
  +                    const var_config_t *config, int force_expand);
   
   /* Map an error code to a text message. */
  -
   const char *var_strerror(var_rc_t rc);
   
  -/* unique library identifier */
  +/* Unique library identifier. */
   extern const char var_id[];
   
   #endif /* __VAR_H__ */
  Index: ossp-pkg/var/var.pod
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 var.pod
  --- ossp-pkg/var/var.pod	27 Feb 2002 11:55:26 -0000	1.19
  +++ ossp-pkg/var/var.pod	27 Feb 2002 13:44:16 -0000	1.20
  @@ -1,5 +1,5 @@
   ##
  -##  VAR - OSSP variable expression library.
  +##  OSSP var -- Variable Expansion
   ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
  @@ -31,7 +31,7 @@
   
   =head1 NAME
   
  -var - OSSP variable expression library.
  +B<OSSP var> -- Variable Expansion
   
   =head1 SYNOPSIS
   
  Index: ossp-pkg/var/var_qref.pod
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 var_qref.pod
  --- ossp-pkg/var/var_qref.pod	8 Jan 2002 16:36:40 -0000	1.2
  +++ ossp-pkg/var/var_qref.pod	27 Feb 2002 13:44:16 -0000	1.3
  @@ -1,9 +1,9 @@
   ##
  -##  VAR - OSSP variable expression library.
  +##  OSSP var -- Variable Expansion
   ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
  -##  This file is part of OSSP VAR, an extensible data serialization
  +##  This file is part of OSSP var, a variable expansion
   ##  library which can be found at http://www.ossp.org/pkg/var/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.32 -r1.33 var_test.c
  --- ossp-pkg/var/var_test.c	9 Jan 2002 11:23:01 -0000	1.32
  +++ ossp-pkg/var/var_test.c	27 Feb 2002 13:44:16 -0000	1.33
  @@ -1,9 +1,9 @@
   /*
  -**  VAR - OSSP variable expression library.
  +**  OSSP var -- Variable Expansion
   **  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
  -**  This file is part of OSSP VAR, an extensible data serialization
  +**  This file is part of OSSP var, a variable expansion
   **  library which can be found at http://www.ossp.org/pkg/var/.
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -24,7 +24,7 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  var_test.c: VAR library regression test.
  +**  var_test.c: library regression test.
   */
   
   #include <stdio.h>

From ossp-cvs-owner@ossp.org  Thu Feb 28 09:08:18 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 12F087642F; Thu, 28 Feb 2002 09:08:17 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var .cvsignore Makefile.in TODO VERSION var.c var...
Message-Id: <20020228080817.12F087642F@mail.ossp.org>
Date: Thu, 28 Feb 2002 09:08:17 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   28-Feb-2002 09:08:17
  Branch: HEAD                             Handle: 197001010100001014880096

  Added files:
    ossp-pkg/var            var_play.c
  Modified files:
    ossp-pkg/var            .cvsignore Makefile.in TODO VERSION var.c var.h
                            var.pod var_test.c
  Removed files:
    ossp-pkg/var            var_qref.pod

  Log:
    HEADS UPS: Mega-commit, revamping the whole library!
    - completely new API
    - completely new manual page

  Summary:
    Revision    Changes     Path
    1.4         +9  -8      ossp-pkg/var/.cvsignore
    1.5         +9  -1      ossp-pkg/var/Makefile.in
    1.13        +6  -3      ossp-pkg/var/TODO
    1.3         +2  -2      ossp-pkg/var/VERSION
    1.62        +325 -219   ossp-pkg/var/var.c
    1.24        +29 -33     ossp-pkg/var/var.h
    1.21        +539 -738   ossp-pkg/var/var.pod
    1.1         +90 -0      ossp-pkg/var/var_play.c
    NONE        +0  -145    ossp-pkg/var/var_qref.pod
    1.34        +22 -9      ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/.cvsignore
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 .cvsignore
  --- ossp-pkg/var/.cvsignore	20 Nov 2001 20:02:21 -0000	1.3
  +++ ossp-pkg/var/.cvsignore	28 Feb 2002 08:08:16 -0000	1.4
  @@ -1,13 +1,14 @@
  -var_test
  -var.3
  -shtool
  +Makefile
   config.guess
  +config.h
  +config.h.in
   config.sub
  -ltmain.sh
  -libtool.m4
   configure
  -config.h.in
  -config.h
  -Makefile
  +libtool.m4
  +ltmain.sh
  +shtool
   var-config
   var-config.1
  +var.3
  +var_play
  +var_test
  Index: ossp-pkg/var/Makefile.in
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 Makefile.in
  --- ossp-pkg/var/Makefile.in	27 Feb 2002 13:44:16 -0000	1.4
  +++ ossp-pkg/var/Makefile.in	28 Feb 2002 08:08:16 -0000	1.5
  @@ -53,6 +53,9 @@
   TST_NAME    = var_test
   TST_OBJS    = var_test.o
   
  +PLY_NAME    = var_play
  +PLY_OBJS    = var_play.o
  +
   MAN_NAME    = var-config.1 var.3
   
   #   helper macro for generating a Unix manual page
  @@ -68,7 +71,7 @@
   .SUFFIXES:
   .SUFFIXES: .c .o .lo
   
  -all: $(LIB_NAME) $(TST_NAME) $(MAN_NAME)
  +all: $(LIB_NAME) $(TST_NAME) $(PLY_NAME) $(MAN_NAME)
   
   .c.o:
   	$(CC) $(CPPFLAGS) $(CFLAGS) -c $<
  @@ -77,6 +80,7 @@
   
   $(LIB_OBJS): Makefile
   $(TST_OBJS): Makefile
  +$(PLY_OBJS): Makefile
   
   $(LIB_NAME): $(LIB_OBJS)
   	@$(LIBTOOL) --mode=link $(CC) -o $(LIB_NAME) $(LIB_OBJS) -rpath $(libdir) \
  @@ -85,6 +89,9 @@
   $(TST_NAME): $(TST_OBJS) $(LIB_NAME)
   	@$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $(TST_NAME) $(TST_OBJS) $(LIB_NAME) $(LIBS)
   
  +$(PLY_NAME): $(PLY_OBJS) $(LIB_NAME)
  +	@$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $(PLY_NAME) $(PLY_OBJS) $(LIB_NAME) $(LIBS)
  +
   var-config.1: var-config.pod VERSION
   	BASENAME="var-config"; SEC=1; \
   	NAME="VAR"; ONELINE="Variable Expansion Library"; \
  @@ -112,6 +119,7 @@
   clean:
   	-$(RM) $(LIB_NAME) $(LIB_OBJS)
   	-$(RM) $(TST_NAME) $(TST_OBJS)
  +	-$(RM) $(PLY_NAME) $(PLY_OBJS)
   
   distclean: clean
   	-$(RM) config.log config.status config.cache
  Index: ossp-pkg/var/TODO
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 TODO
  --- ossp-pkg/var/TODO	27 Feb 2002 11:56:01 -0000	1.12
  +++ ossp-pkg/var/TODO	28 Feb 2002 08:08:16 -0000	1.13
  @@ -1,5 +1,10 @@
                                  OSSP var
   
  + o add README
  + o generate internals into context
  + o use internal context to carry information
  + o document exception handling
  + o document arithmetic expressions
    o document loop construct
   
    ---------------------------------------------------------------------
  @@ -116,9 +121,7 @@
           ${foo[$#{foo}]}
    ---------------------------------------------------------------------
   
  - o manual page style cleanup and perhaps merge with var_qref.pod?
  -
  - o add library context and move initialization and configuration
  + o add internal library context and move initialization and configuration
      into this context.
   
    o bugfix?: (thl)
  Index: ossp-pkg/var/VERSION
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 VERSION
  --- ossp-pkg/var/VERSION	27 Feb 2002 13:44:16 -0000	1.2
  +++ ossp-pkg/var/VERSION	28 Feb 2002 08:08:16 -0000	1.3
  @@ -1,6 +1,6 @@
   
  -  VERSION -- Version Information for OSSP var (syntax: Text)
  +  VERSION -- Version Information for OSSP VAR (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP var, Version 0.1.0 (20-Nov-2001)
  +  This is OSSP VAR, Version 0.9.0 (28-Feb-2002)
   
  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.61 -r1.62 var.c
  --- ossp-pkg/var/var.c	27 Feb 2002 13:44:16 -0000	1.61
  +++ ossp-pkg/var/var.c	28 Feb 2002 08:08:16 -0000	1.62
  @@ -31,6 +31,8 @@
   #include "config.h"
   #endif
   
  +#include <stdlib.h>
  +#include <stdarg.h>
   #include <ctype.h>
   #include <string.h>
   #include <stdio.h>
  @@ -56,75 +58,29 @@
   #define VAR_RC(rv) (rv)
   #endif /* WITH_EX */
   
  -/* The default configuration for the parser. */
  -
  -const var_config_t var_config_default = {
  -    '$',                        /* varinit */
  -    '{',                        /* startdelim */
  -    '}',                        /* enddelim */
  -    '[',                        /* startindex */
  -    ']',                        /* endindex */
  -    '#',                        /* current_index */
  -    '\\',                       /* escape */
  -    "a-zA-Z0-9_"                /* namechars */
  +/* the external context structure */
  +struct var_st {
  +    var_syntax_t   syntax;
  +    var_cb_value_t cb_value_fct;
  +    void          *cb_value_ctx;
   };
   
  -/* The var_strerror() routine will map a var_rc_t into a text message. */
  -
  -const char *var_strerror(var_rc_t rc)
  -{
  -    static char *var_errors[] = {
  -        "everything ok",                                                        /* VAR_OK = 0 */
  -        "incomplete named character",                                           /* VAR_ERR_INCOMPLETE_NAMED_CHARACTER */
  -        "incomplete hexadecimal value",                                         /* VAR_ERR_INCOMPLETE_HEX */
  -        "invalid hexadecimal value",                                            /* VAR_ERR_INVALID_HEX */
  -        "octal value too large",                                                /* VAR_ERR_OCTAL_TOO_LARGE */
  -        "invalid octal value",                                                  /* VAR_ERR_INVALID_OCTAL */
  -        "incomplete octal value",                                               /* VAR_ERR_INCOMPLETE_OCTAL */
  -        "incomplete grouped hexadecimal value",                                 /* VAR_ERR_INCOMPLETE_GROUPED_HEX */
  -        "incorrect character class specification",                              /* VAR_ERR_INCORRECT_CLASS_SPEC */
  -        "invalid expansion configuration",                                      /* VAR_ERR_INVALID_CONFIGURATION */
  -        "out of memory",                                                        /* VAR_ERR_OUT_OF_MEMORY */
  -        "incomplete variable specification",                                    /* VAR_ERR_INCOMPLETE_VARIABLE_SPEC */
  -        "undefined variable",                                                   /* VAR_ERR_UNDEFINED_VARIABLE */
  -        "input is neither text nor variable",                                   /* VAR_ERR_INPUT_ISNT_TEXT_NOR_VARIABLE */
  -        "unknown command character in variable",                                /* VAR_ERR_UNKNOWN_COMMAND_CHAR */
  -        "malformated search and replace operation",                             /* VAR_ERR_MALFORMATTED_REPLACE */
  -        "unknown flag in search and replace operation",                         /* VAR_ERR_UNKNOWN_REPLACE_FLAG */
  -        "invalid regular expression in search and replace operation",           /* VAR_ERR_INVALID_REGEX_IN_REPLACE */
  -        "missing parameter in command",                                         /* VAR_ERR_MISSING_PARAMETER_IN_COMMAND */
  -        "empty search string in search and replace operation",                  /* VAR_ERR_EMPTY_SEARCH_STRING */
  -        "start offset missing in cut operation",                                /* VAR_ERR_MISSING_START_OFFSET */
  -        "offsets in cut operation delimited by unknown character",              /* VAR_ERR_INVALID_OFFSET_DELIMITER */
  -        "range out of bounds in cut operation",                                 /* VAR_ERR_RANGE_OUT_OF_BOUNDS */
  -        "offset out of bounds in cut operation",                                /* VAR_ERR_OFFSET_OUT_OF_BOUNDS */
  -        "logic error in cut operation",                                         /* VAR_ERR_OFFSET_LOGIC */
  -        "malformatted transpose operation",                                     /* VAR_ERR_MALFORMATTED_TRANSPOSE */
  -        "source and destination classes do not match in transpose operation",   /* VAR_ERR_TRANSPOSE_CLASSES_MISMATCH */
  -        "empty character class in transpose operation",                         /* VAR_ERR_EMPTY_TRANSPOSE_CLASS */
  -        "incorrect character class in transpose operation",                     /* VAR_ERR_INCORRECT_TRANSPOSE_CLASS_SPEC */
  -        "malformatted padding operation",                                       /* VAR_ERR_MALFORMATTED_PADDING */
  -        "width parameter missing in padding operation",                         /* VAR_ERR_MISSING_PADDING_WIDTH */
  -        "fill string missing in padding operation",                             /* VAR_ERR_EMPTY_PADDING_FILL_STRING */
  -        "unknown quoted pair in search and replace operation",                  /* VAR_ERR_UNKNOWN_QUOTED_PAIR_IN_REPLACE */
  -        "sub-matching reference out of range",                                  /* VAR_ERR_SUBMATCH_OUT_OF_RANGE */
  -        "invalid argument",                                                     /* VAR_ERR_INVALID_ARGUMENT */
  -        "incomplete quoted pair",                                               /* VAR_ERR_INCOMPLETE_QUOTED_PAIR */
  -        "lookup function does not support variable arrays",                     /* VAR_ERR_ARRAY_LOOKUPS_ARE_UNSUPPORTED */
  -        "index specification of array variable contains an invalid character",  /* VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC */
  -        "index specification of array variable is incomplete",                  /* VAR_ERR_INCOMPLETE_INDEX_SPEC */
  -        "bracket expression in array variable's index is not closed",           /* VAR_ERR_UNCLOSED_BRACKET_IN_INDEX */
  -        "division by zero error in index specification",                        /* VAR_ERR_DIVISION_BY_ZERO_IN_INDEX */
  -        "unterminated loop construct",                                          /* VAR_ERR_UNTERMINATED_LOOP_CONSTRUCT */
  -        "invalid character in loop limits"                                      /* VAR_ERR_INVALID_CHAR_IN_LOOP_LIMITS */
  -    };
  -
  -    rc = 0 - rc;
  -    if (rc < 0 || rc >= sizeof(var_errors) / sizeof(char *))
  -        return "unknown error";
  +/* the internal expansion context structure */
  +typedef struct {
  +    int            force_expand;
  +} var_expand_t;
   
  -    return var_errors[rc];
  -}
  +/* the default syntax configuration */
  +static const var_syntax_t var_syntax_default = {
  +    '\\',         /* escape */
  +    '$',          /* delim_init */
  +    '{',          /* delim_open */
  +    '}',          /* delim_close */
  +    '[',          /* index_open */
  +    ']',          /* index_close */
  +    '#',          /* index_mark */
  +    "a-zA-Z0-9_"  /* name_chars */
  +};
   
   /* Routines for manipulation of token buffers. */
   
  @@ -384,85 +340,25 @@
           return expand_simple_hex(src, dst, end);
   }
   
  -var_rc_t var_unescape(const char *src, size_t len, char *dst,
  -                      int unescape_all)
  -{
  -    const char *end = src + len;
  -    var_rc_t rc;
  -
  -    while (src < end) {
  -        if (*src == '\\') {
  -            if (++src == end)
  -                return VAR_RC(VAR_ERR_INCOMPLETE_NAMED_CHARACTER);
  -            switch (*src) {
  -            case '\\':
  -                if (!unescape_all) {
  -                    *dst++ = '\\';
  -                }
  -                *dst++ = '\\';
  -                break;
  -            case 'n':
  -                *dst++ = '\n';
  -                break;
  -            case 't':
  -                *dst++ = '\t';
  -                break;
  -            case 'r':
  -                *dst++ = '\r';
  -                break;
  -            case 'x':
  -                ++src;
  -                if ((rc = expand_hex(&src, &dst, end)) != VAR_OK)
  -                    return VAR_RC(rc);
  -                break;
  -            case '0':
  -            case '1':
  -            case '2':
  -            case '3':
  -            case '4':
  -            case '5':
  -            case '6':
  -            case '7':
  -            case '8':
  -            case '9':
  -                if (end - src >= 3 && isdigit((int)src[1]) && isdigit((int)src[2])) {
  -                    if ((rc = expand_octal(&src, &dst, end)) != 0)
  -                        return VAR_RC(rc);
  -                    break;
  -                }
  -            default:
  -                if (!unescape_all) {
  -                    *dst++ = '\\';
  -                }
  -                *dst++ = *src;
  -            }
  -            ++src;
  -        } else
  -            *dst++ = *src++;
  -    }
  -    *dst = '\0';
  -    return VAR_OK;
  -}
  -
   /* The recursive-descent parser for variable expressions. */
   
   static int variable(const char *begin, const char *end,
  -                    const var_config_t *config, const char_class_t nameclass,
  -                    var_cb_t lookup, void *lookup_context,
  -                    int force_expand, tokenbuf_t *result, int current_index,
  +                    const var_syntax_t *config, const char_class_t nameclass,
  +                    var_cb_value_t lookup, void *lookup_context,
  +                    int force_expand, tokenbuf_t *result, int index_mark,
                       int* rel_lookup_flag);
   static int command(const char *begin, const char *end,
  -                   const var_config_t *config, const char_class_t nameclass,
  -                   var_cb_t lookup, void *lookup_context, int force_expand,
  -                   tokenbuf_t *data, int current_index, int* rel_lookup_flag);
  -static int num_exp(const char *begin, const char *end, int current_index,
  +                   const var_syntax_t *config, const char_class_t nameclass,
  +                   var_cb_value_t lookup, void *lookup_context, int force_expand,
  +                   tokenbuf_t *data, int index_mark, int* rel_lookup_flag);
  +static int num_exp(const char *begin, const char *end, int index_mark,
                      int* result, int* failed, int* rel_lookup_flag,
  -                   const var_config_t *config,
  +                   const var_syntax_t *config,
                      const char_class_t nameclass,
  -                   var_cb_t lookup, void* lookup_context);
  +                   var_cb_value_t lookup, void* lookup_context);
   
  -static int text(const char *begin, const char *end, char varinit,
  -                char startindex, char endindex, char escape)
  +static int text(const char *begin, const char *end, char delim_init,
  +                char index_open, char index_close, char escape)
   {
       const char *p;
   
  @@ -471,9 +367,9 @@
               if (++p == end)
                   return VAR_ERR_INCOMPLETE_QUOTED_PAIR;
           }
  -        else if (*p == varinit)
  +        else if (*p == delim_init)
               break;
  -        else if (startindex && (*p == startindex || *p == endindex))
  +        else if (index_open && (*p == index_open || *p == index_close))
               break;
       }
       return p - begin;
  @@ -499,11 +395,11 @@
   }
   
   static int substext(const char *begin, const char *end,
  -                    const var_config_t *config)
  +                    const var_syntax_t *config)
   {
       const char *p;
   
  -    for (p = begin; p != end && *p != config->varinit && *p != '/'; p++) {
  +    for (p = begin; p != end && *p != config->delim_init && *p != '/'; p++) {
           if (*p == config->escape) {
               if (p + 1 == end)
                   return VAR_ERR_INCOMPLETE_QUOTED_PAIR;
  @@ -514,14 +410,14 @@
   }
   
   static int exptext(const char *begin, const char *end,
  -                   const var_config_t *config)
  +                   const var_syntax_t *config)
   {
       const char *p;
   
       for (p = begin;
               p != end
  -         && *p != config->varinit
  -         && *p != config->enddelim
  +         && *p != config->delim_init
  +         && *p != config->delim_close
            && *p != ':'; p++) {
           if (*p == config->escape) {
               if (p + 1 == end)
  @@ -544,11 +440,11 @@
       return num;
   }
   
  -static int num_exp_read_operand(const char *begin, const char *end, int current_index,
  +static int num_exp_read_operand(const char *begin, const char *end, int index_mark,
                                   int *result, int *failed, int *rel_lookup_flag,
  -                                const var_config_t *config,
  +                                const var_syntax_t *config,
                                   const char_class_t nameclass,
  -                                var_cb_t lookup, void *lookup_context)
  +                                var_cb_value_t lookup, void *lookup_context)
   {
       const char* p = begin;
       tokenbuf_t tmp;
  @@ -560,7 +456,7 @@
           return VAR_ERR_INCOMPLETE_INDEX_SPEC;
   
       if (*p == '(') {
  -        rc = num_exp(++p, end, current_index, result, failed,
  +        rc = num_exp(++p, end, index_mark, result, failed,
                        rel_lookup_flag, config, nameclass, lookup, lookup_context);
           if (rc < 0)
               return rc;
  @@ -571,13 +467,13 @@
               return VAR_ERR_UNCLOSED_BRACKET_IN_INDEX;
           ++p;
       }
  -    else if (*p == config->varinit) {
  +    else if (*p == config->delim_init) {
           rc = variable(p, end, config, nameclass, lookup,
  -                      lookup_context, 1, &tmp, current_index, rel_lookup_flag);
  +                      lookup_context, 1, &tmp, index_mark, rel_lookup_flag);
           if (rc == VAR_ERR_UNDEFINED_VARIABLE) {
               *failed = 1;
               rc = variable(p, end, config, nameclass, lookup,
  -                          lookup_context, 0, &tmp, current_index, rel_lookup_flag);
  +                          lookup_context, 0, &tmp, index_mark, rel_lookup_flag);
               if (rc < 0)
                   return rc;
               p += rc;
  @@ -587,16 +483,16 @@
               if (rc < 0)
                   return rc;
               p += rc;
  -            rc = num_exp(tmp.begin, tmp.end, current_index, result,
  +            rc = num_exp(tmp.begin, tmp.end, index_mark, result,
                            failed, rel_lookup_flag, config, nameclass, lookup, lookup_context);
               tokenbuf_free(&tmp);
               if (rc < 0)
                   return rc;
           }
       }
  -    else if (config->current_index && *p == config->current_index) {
  +    else if (config->index_mark && *p == config->index_mark) {
           p++;
  -        *result = current_index;
  +        *result = index_mark;
           (*rel_lookup_flag)++;
       }
       else if (isdigit(*p)) {
  @@ -625,11 +521,11 @@
       return p - begin;
   }
   
  -static int num_exp(const char *begin, const char *end, int current_index,
  +static int num_exp(const char *begin, const char *end, int index_mark,
                      int *result, int *failed, int *rel_lookup_flag,
  -                   const var_config_t *config,
  +                   const var_syntax_t *config,
                      const char_class_t nameclass,
  -                   var_cb_t lookup, void *lookup_context)
  +                   var_cb_value_t lookup, void *lookup_context)
   {
       const char *p = begin;
       char operator;
  @@ -639,7 +535,7 @@
       if (begin == end)
           return VAR_ERR_INCOMPLETE_INDEX_SPEC;
   
  -    rc = num_exp_read_operand(p, end, current_index, result,
  +    rc = num_exp_read_operand(p, end, index_mark, result,
                                 failed, rel_lookup_flag, config, nameclass,
                                 lookup, lookup_context);
       if (rc < 0)
  @@ -649,7 +545,7 @@
       while (p != end) {
           if (*p == '+' || *p == '-') {
               operator = *p++;
  -            rc = num_exp(p, end, current_index, &right, failed,
  +            rc = num_exp(p, end, index_mark, &right, failed,
                            rel_lookup_flag, config, nameclass, lookup, lookup_context);
               if (rc < 0)
                   return rc;
  @@ -661,7 +557,7 @@
           }
           else if (*p == '*' || *p == '/' || *p == '%') {
               operator = *p++;
  -            rc = num_exp_read_operand(p, end, current_index, &right, failed,
  +            rc = num_exp_read_operand(p, end, index_mark, &right, failed,
                                         rel_lookup_flag, config, nameclass, lookup, lookup_context);
               if (rc < 0)
                   return rc;
  @@ -697,10 +593,10 @@
   }
   
   static int expression(const char *begin, const char *end,
  -                      const var_config_t *config,
  -                      const char_class_t nameclass, var_cb_t lookup,
  +                      const var_syntax_t *config,
  +                      const char_class_t nameclass, var_cb_value_t lookup,
                         void *lookup_context, int force_expand,
  -                      tokenbuf_t *result, int current_index, int *rel_lookup_flag)
  +                      tokenbuf_t *result, int index_mark, int *rel_lookup_flag)
       {
       const char *p = begin;
       const char *data;
  @@ -719,7 +615,7 @@
   
       /* Expect STARTDELIM. */
   
  -    if (p == end || *p != config->startdelim)
  +    if (p == end || *p != config->delim_open)
           return 0;
   
       if (++p == end)
  @@ -741,7 +637,7 @@
           }
   
           rc = variable(p, end, config, nameclass, lookup, lookup_context,
  -                      force_expand, &tmp, current_index, rel_lookup_flag);
  +                      force_expand, &tmp, index_mark, rel_lookup_flag);
           if (rc < 0)
               goto error_return;
           if (rc > 0) {
  @@ -763,8 +659,8 @@
   
       /* If the next token is START-INDEX, read the index specification. */
   
  -    if (config->startindex && *p == config->startindex) {
  -        rc = num_exp(++p, end, current_index, &idx, &failed,
  +    if (config->index_open && *p == config->index_open) {
  +        rc = num_exp(++p, end, index_mark, &idx, &failed,
                        rel_lookup_flag, config, nameclass, lookup, lookup_context);
           if (rc < 0)
               goto error_return;
  @@ -778,7 +674,7 @@
               rc = VAR_ERR_INCOMPLETE_INDEX_SPEC;
               goto error_return;
           }
  -        if (*p != config->endindex) {
  +        if (*p != config->index_close) {
               rc = VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC;
               goto error_return;
           }
  @@ -788,7 +684,7 @@
       /* Now we have the name of the variable stored in "name". The next
          token here must either be an END-DELIM or a ':'. */
   
  -    if (p == end || (*p != config->enddelim && *p != ':')) {
  +    if (p == end || (*p != config->delim_close && *p != ':')) {
           rc = VAR_ERR_INCOMPLETE_VARIABLE_SPEC;
           goto error_return;
       }
  @@ -839,11 +735,11 @@
               if (!failed)
                   rc = command(p, end, config, nameclass, lookup,
                                lookup_context, force_expand, result,
  -                             current_index, rel_lookup_flag);
  +                             index_mark, rel_lookup_flag);
               else
                   rc = command(p, end, config, nameclass, lookup,
                                lookup_context, force_expand, &tmp,
  -                             current_index, rel_lookup_flag);
  +                             index_mark, rel_lookup_flag);
               if (rc < 0)
                   goto error_return;
               p += rc;
  @@ -851,7 +747,7 @@
                   result->end += rc;
           }
   
  -        if (p == end || *p != config->enddelim) {
  +        if (p == end || *p != config->delim_close) {
               rc = VAR_ERR_INCOMPLETE_VARIABLE_SPEC;
               goto error_return;
           }
  @@ -876,9 +772,9 @@
   }
   
   static int variable(const char *begin, const char *end,
  -                    const var_config_t *config, const char_class_t nameclass,
  -                    var_cb_t lookup, void *lookup_context,
  -                    int force_expand, tokenbuf_t *result, int current_index,
  +                    const var_syntax_t *config, const char_class_t nameclass,
  +                    var_cb_value_t lookup, void *lookup_context,
  +                    int force_expand, tokenbuf_t *result, int index_mark,
                       int *rel_lookup_flag)
   {
       const char *p = begin;
  @@ -893,7 +789,7 @@
   
       /* Expect VARINIT. */
   
  -    if (p == end || *p != config->varinit)
  +    if (p == end || *p != config->delim_init)
           return 0;
   
       if (++p == end)
  @@ -924,17 +820,17 @@
       /* OK, we're dealing with a complex expression here. */
   
       rc = expression(p, end, config, nameclass, lookup, lookup_context,
  -                    force_expand, result, current_index, rel_lookup_flag);
  +                    force_expand, result, index_mark, rel_lookup_flag);
       if (rc > 0)
           rc++;
       return rc;
   }
   
   static int exptext_or_variable(const char *begin, const char *end,
  -                               const var_config_t *config,
  -                               const char_class_t nameclass, var_cb_t lookup,
  +                               const var_syntax_t *config,
  +                               const char_class_t nameclass, var_cb_value_t lookup,
                                  void *lookup_context, int force_expand,
  -                               tokenbuf_t *result, int current_index,
  +                               tokenbuf_t *result, int index_mark,
                                  int *rel_lookup_flag)
   {
       const char *p = begin;
  @@ -960,7 +856,7 @@
           }
   
           rc = variable(p, end, config, nameclass, lookup, lookup_context,
  -                      force_expand, &tmp, current_index, rel_lookup_flag);
  +                      force_expand, &tmp, index_mark, rel_lookup_flag);
           if (rc < 0)
               goto error_return;
           if (rc > 0) {
  @@ -983,10 +879,10 @@
   }
   
   static int substext_or_variable(const char *begin, const char *end,
  -                                const var_config_t *config,
  -                                const char_class_t nameclass, var_cb_t lookup,
  +                                const var_syntax_t *config,
  +                                const char_class_t nameclass, var_cb_value_t lookup,
                                   void *lookup_context, int force_expand,
  -                                tokenbuf_t *result, int current_index,
  +                                tokenbuf_t *result, int index_mark,
                                   int *rel_lookup_flag)
   {
       const char *p = begin;
  @@ -1012,7 +908,7 @@
           }
   
           rc = variable(p, end, config, nameclass, lookup, lookup_context,
  -                      force_expand, &tmp, current_index, rel_lookup_flag);
  +                      force_expand, &tmp, index_mark, rel_lookup_flag);
           if (rc < 0)
               goto error_return;
           if (rc > 0) {
  @@ -1469,9 +1365,9 @@
   }
   
   static int command(const char *begin, const char *end,
  -                   const var_config_t *config, const char_class_t nameclass,
  -                   var_cb_t lookup, void *lookup_context, int force_expand,
  -                   tokenbuf_t *data, int current_index, int *rel_lookup_flag)
  +                   const var_syntax_t *config, const char_class_t nameclass,
  +                   var_cb_value_t lookup, void *lookup_context, int force_expand,
  +                   tokenbuf_t *data, int index_mark, int *rel_lookup_flag)
   {
       const char *p = begin;
       tokenbuf_t tmptokbuf;
  @@ -1577,7 +1473,7 @@
           p++;
           rc = exptext_or_variable(p, end, config, nameclass, lookup,
                                    lookup_context, force_expand, &tmptokbuf,
  -                                 current_index, rel_lookup_flag);
  +                                 index_mark, rel_lookup_flag);
           if (rc < 0)
               goto error_return;
           if (rc == 0) {
  @@ -1594,7 +1490,7 @@
       case '*':                   /* Return "" if data is not empty, parameter otherwise. */
           p++;
           rc = exptext_or_variable(p, end, config, nameclass, lookup,
  -                                 lookup_context, force_expand, &tmptokbuf, current_index, rel_lookup_flag);
  +                                 lookup_context, force_expand, &tmptokbuf, index_mark, rel_lookup_flag);
           if (rc < 0)
               goto error_return;
           if (rc == 0) {
  @@ -1617,7 +1513,7 @@
       case '+':                   /* Substitute parameter if data is not empty. */
           p++;
           rc = exptext_or_variable(p, end, config, nameclass, lookup,
  -                                 lookup_context, force_expand, &tmptokbuf, current_index, rel_lookup_flag);
  +                                 lookup_context, force_expand, &tmptokbuf, index_mark, rel_lookup_flag);
           if (rc < 0)
               goto error_return;
           if (rc == 0) {
  @@ -1639,7 +1535,7 @@
           p++;
   
           rc = substext_or_variable(p, end, config, nameclass, lookup,
  -                                  lookup_context, force_expand, &search, current_index, rel_lookup_flag);
  +                                  lookup_context, force_expand, &search, index_mark, rel_lookup_flag);
           if (rc < 0)
               goto error_return;
           p += rc;
  @@ -1651,7 +1547,7 @@
           p++;
   
           rc = substext_or_variable(p, end, config, nameclass, lookup,
  -                                  lookup_context, force_expand, &replace, current_index, rel_lookup_flag);
  +                                  lookup_context, force_expand, &replace, index_mark, rel_lookup_flag);
           if (rc < 0)
               goto error_return;
           p += rc;
  @@ -1685,7 +1581,7 @@
           p++;
   
           rc = substext_or_variable(p, end, config, nameclass, lookup,
  -                                  lookup_context, force_expand, &search, current_index, rel_lookup_flag);
  +                                  lookup_context, force_expand, &search, index_mark, rel_lookup_flag);
           if (rc < 0)
               goto error_return;
           p += rc;
  @@ -1697,7 +1593,7 @@
           p++;
   
           rc = substext_or_variable(p, end, config, nameclass, lookup,
  -                                  lookup_context, force_expand, &replace, current_index, rel_lookup_flag);
  +                                  lookup_context, force_expand, &replace, index_mark, rel_lookup_flag);
           if (rc < 0)
               goto error_return;
           p += rc;
  @@ -1740,7 +1636,7 @@
           p++;
   
           rc = substext_or_variable(p, end, config, nameclass, lookup,
  -                                  lookup_context, force_expand, &replace, current_index, rel_lookup_flag);
  +                                  lookup_context, force_expand, &replace, index_mark, rel_lookup_flag);
           if (rc < 0)
               goto error_return;
           p += rc;
  @@ -1790,7 +1686,7 @@
   }
   
   struct wrapper_context {
  -    var_cb_t lookup;
  +    var_cb_value_t lookup;
       void    *context;
       int     *rel_lookup_flag;
   };
  @@ -1817,9 +1713,9 @@
   }
   
   static var_rc_t loop_limits(const char *begin, const char *end,
  -			    const var_config_t *config,
  +			    const var_syntax_t *config,
                               const char_class_t nameclass,
  -                            var_cb_t lookup, void* lookup_context,
  +                            var_cb_value_t lookup, void* lookup_context,
                               int* start, int* step, int* stop, int* open_end)
       {
       const char* p = begin;
  @@ -1830,7 +1726,7 @@
       if (begin == end)
           return 0;
   
  -    if (*p != config->startdelim)
  +    if (*p != config->delim_open)
           return 0;
       else
           ++p;
  @@ -1870,7 +1766,7 @@
   
       if (*p != ',')
           {
  -        if (*p != config->enddelim)
  +        if (*p != config->delim_close)
               return VAR_ERR_INVALID_CHAR_IN_LOOP_LIMITS;
           else
               {
  @@ -1907,17 +1803,17 @@
       if (failed)
           return VAR_ERR_UNDEFINED_VARIABLE;
   
  -    if (*p != config->enddelim)
  +    if (*p != config->delim_close)
           return VAR_ERR_INVALID_CHAR_IN_LOOP_LIMITS;
   
       return ++p - begin;
       }
   
   static var_rc_t input(const char *begin, const char *end,
  -                      const var_config_t *config,
  -                      const char_class_t nameclass, var_cb_t lookup,
  +                      const var_syntax_t *config,
  +                      const char_class_t nameclass, var_cb_value_t lookup,
                         void *lookup_context, int force_expand,
  -                      tokenbuf_t *output, int current_index,
  +                      tokenbuf_t *output, int index_mark,
                         size_t recursion_level, int *rel_lookup_flag)
   {
       const char *p = begin;
  @@ -1939,7 +1835,7 @@
       }
   
       do {
  -        if (begin != end && config->startindex && *begin == config->startindex) {
  +        if (begin != end && config->index_open && *begin == config->index_open) {
               original_rel_lookup_state = *rel_lookup_flag;
               loop_limit_length = -1;
               wcon.lookup = lookup;
  @@ -1963,7 +1859,7 @@
                              &wcon, 1, output, i, recursion_level+1, rel_lookup_flag);
                   if (rc < 0)
                       goto error_return;
  -                if (begin[rc] != config->endindex) {
  +                if (begin[rc] != config->index_close) {
                       rc = VAR_ERR_UNTERMINATED_LOOP_CONSTRUCT;
                       goto error_return;
                   }
  @@ -1998,8 +1894,8 @@
               continue;
           }
   
  -        rc = text(begin, end, config->varinit, config->startindex,
  -                  config->endindex, config->escape);
  +        rc = text(begin, end, config->delim_init, config->index_open,
  +                  config->index_close, config->escape);
           if (rc > 0) {
               if (!tokenbuf_append(output, begin, rc)) {
                   rc = VAR_ERR_OUT_OF_MEMORY;
  @@ -2012,7 +1908,7 @@
   
           rc = variable(begin, end, config, nameclass, lookup,
                         lookup_context, force_expand, &result,
  -                      current_index, rel_lookup_flag);
  +                      index_mark, rel_lookup_flag);
           if (rc > 0) {
               if (!tokenbuf_append(output, result.begin, result.end - result.begin)) {
                   rc = VAR_ERR_OUT_OF_MEMORY;
  @@ -2041,10 +1937,11 @@
       return rc;
   }
   
  -var_rc_t var_expand(const char *input_buf, size_t input_len,
  -                    char **result, size_t *result_len,
  -                    var_cb_t lookup, void *lookup_context,
  -                    const var_config_t *config, int force_expand)
  +static var_rc_t internal_expand(
  +    const char *input_buf, size_t input_len,
  +    char **result, size_t *result_len,
  +    var_cb_value_t lookup, void *lookup_context,
  +    const var_syntax_t *config, int force_expand)
   {
       char_class_t nameclass;
       var_rc_t rc;
  @@ -2058,21 +1955,21 @@
   
       /* Optionally use default configuration */
       if (config == NULL)
  -        config = &var_config_default;
  +        config = &var_syntax_default;
   
       /* Set the result pointer to the begining of the input buffer so
          that it is correctly initialized in case we fail with an error. */
       *result = (char *)input_buf;
   
       /* Expand the class description for valid variable names. */
  -    if ((rc = expand_character_class(config->namechars, nameclass)) != VAR_OK)
  +    if ((rc = expand_character_class(config->name_chars, nameclass)) != VAR_OK)
           return VAR_RC(rc);
   
       /* Make sure that the specials defined in the configuration do not
          appear in the character name class. */
  -    if (nameclass[(int)config->varinit] ||
  -        nameclass[(int)config->startdelim] ||
  -        nameclass[(int)config->enddelim] ||
  +    if (nameclass[(int)config->delim_init] ||
  +        nameclass[(int)config->delim_open] ||
  +        nameclass[(int)config->delim_close] ||
           nameclass[(int)config->escape])
           return VAR_RC(VAR_ERR_INVALID_CONFIGURATION);
   
  @@ -2106,5 +2003,214 @@
       }
   
       return VAR_RC(rc);
  +}
  +
  +/* ------------------------------------------------------------------ */
  +
  +var_rc_t 
  +var_create(
  +    var_t **pvar)
  +{
  +    var_t *var;
  +
  +    if (pvar == NULL)
  +        return VAR_RC(VAR_ERR_INVALID_ARGUMENT);
  +    if ((var = (var_t *)malloc(sizeof(var_t))) == NULL)
  +        return VAR_RC(VAR_ERR_OUT_OF_MEMORY);
  +    memset(var, 0, sizeof(var));
  +    var_config(var, VAR_CONFIG_SYNTAX, &var_syntax_default);
  +    *pvar = var;
  +    return VAR_OK;
  +}
  +
  +var_rc_t 
  +var_destroy(
  +    var_t *var)
  +{
  +    if (var == NULL)
  +        return VAR_RC(VAR_ERR_INVALID_ARGUMENT);
  +    free(var);
  +    return VAR_OK;
  +}
  +
  +var_rc_t 
  +var_config(
  +    var_t *var, 
  +    var_config_t mode, 
  +    ...)
  +{
  +    va_list ap;
  +
  +    if (var == NULL)
  +        return VAR_RC(VAR_ERR_INVALID_ARGUMENT);
  +    va_start(ap, mode);
  +    switch (mode) {
  +        case VAR_CONFIG_SYNTAX: {
  +            var_syntax_t *s;
  +            s = (var_syntax_t *)va_arg(ap, void *);
  +            if (s == NULL)
  +                return VAR_RC(VAR_ERR_INVALID_ARGUMENT);
  +            var->syntax.escape      = s->escape;
  +            var->syntax.delim_init  = s->delim_init;
  +            var->syntax.delim_open  = s->delim_open;
  +            var->syntax.delim_close = s->delim_close;
  +            var->syntax.index_open  = s->index_open;
  +            var->syntax.index_close = s->index_close;
  +            var->syntax.index_mark  = s->index_mark;
  +            if (var->syntax.name_chars != NULL)
  +                free(var->syntax.name_chars);
  +            var->syntax.name_chars = strdup(s->name_chars);
  +            break;
  +        }
  +        case VAR_CONFIG_CB_VALUE: {
  +            var_cb_value_t fct;
  +            void *ctx;
  +            fct = (var_cb_value_t)va_arg(ap, void *);
  +            ctx = (void *)va_arg(ap, void *);
  +            var->cb_value_fct = fct;
  +            var->cb_value_ctx = ctx;
  +            break;
  +        }
  +        default:
  +            return VAR_RC(VAR_ERR_INVALID_ARGUMENT);
  +    }
  +    va_end(ap);
  +    return VAR_OK;
  +}
  +
  +var_rc_t 
  +var_unescape(
  +    var_t *var, 
  +    const char *src, size_t srclen, 
  +    char *dst, size_t dstlen, 
  +    int all)
  +{
  +    const char *end;
  +    var_rc_t rc;
  +
  +    if (var == NULL || src == NULL || dst == NULL)
  +        return VAR_RC(VAR_ERR_INVALID_ARGUMENT);
  +    end = src + srclen;
  +    while (src < end) {
  +        if (*src == '\\') {
  +            if (++src == end)
  +                return VAR_RC(VAR_ERR_INCOMPLETE_NAMED_CHARACTER);
  +            switch (*src) {
  +                case '\\':
  +                    if (!all) {
  +                        *dst++ = '\\';
  +                    }
  +                    *dst++ = '\\';
  +                    break;
  +                case 'n':
  +                    *dst++ = '\n';
  +                    break;
  +                case 't':
  +                    *dst++ = '\t';
  +                    break;
  +                case 'r':
  +                    *dst++ = '\r';
  +                    break;
  +                case 'x':
  +                    ++src;
  +                    if ((rc = expand_hex(&src, &dst, end)) != VAR_OK)
  +                        return VAR_RC(rc);
  +                    break;
  +                case '0': case '1': case '2': case '3': case '4':
  +                case '5': case '6': case '7': case '8': case '9':
  +                    if (   end - src >= 3 
  +                        && isdigit((int)src[1]) 
  +                        && isdigit((int)src[2])) {
  +                        if ((rc = expand_octal(&src, &dst, end)) != 0)
  +                            return VAR_RC(rc);
  +                        break;
  +                    }
  +                default:
  +                    if (!all) {
  +                        *dst++ = '\\';
  +                    }
  +                    *dst++ = *src;
  +            }
  +            ++src;
  +        } else
  +            *dst++ = *src++;
  +    }
  +    *dst = '\0';
  +    return VAR_OK;
  +}
  +
  +var_rc_t 
  +var_expand(
  +    var_t *var, 
  +    const char *src, size_t srclen, 
  +    char **dst, size_t *dstlen, 
  +    int force_expand)
  +{
  +    /* var_expand_t ctx; */
  +    var_rc_t rc;
  +
  +    /* ctx.force_expand = force_expand; */
  +    rc = internal_expand(src, srclen, dst, dstlen, 
  +                         var->cb_value_fct, var->cb_value_ctx,
  +                         &var->syntax, force_expand);
  +    return rc;
  +}
  +
  +var_rc_t var_strerror(var_t *var, var_rc_t rc, char **str)
  +{
  +    static char *errors[] = {
  +        "everything ok",                                                        /* VAR_OK = 0 */
  +        "incomplete named character",                                           /* VAR_ERR_INCOMPLETE_NAMED_CHARACTER */
  +        "incomplete hexadecimal value",                                         /* VAR_ERR_INCOMPLETE_HEX */
  +        "invalid hexadecimal value",                                            /* VAR_ERR_INVALID_HEX */
  +        "octal value too large",                                                /* VAR_ERR_OCTAL_TOO_LARGE */
  +        "invalid octal value",                                                  /* VAR_ERR_INVALID_OCTAL */
  +        "incomplete octal value",                                               /* VAR_ERR_INCOMPLETE_OCTAL */
  +        "incomplete grouped hexadecimal value",                                 /* VAR_ERR_INCOMPLETE_GROUPED_HEX */
  +        "incorrect character class specification",                              /* VAR_ERR_INCORRECT_CLASS_SPEC */
  +        "invalid expansion configuration",                                      /* VAR_ERR_INVALID_CONFIGURATION */
  +        "out of memory",                                                        /* VAR_ERR_OUT_OF_MEMORY */
  +        "incomplete variable specification",                                    /* VAR_ERR_INCOMPLETE_VARIABLE_SPEC */
  +        "undefined variable",                                                   /* VAR_ERR_UNDEFINED_VARIABLE */
  +        "input is neither text nor variable",                                   /* VAR_ERR_INPUT_ISNT_TEXT_NOR_VARIABLE */
  +        "unknown command character in variable",                                /* VAR_ERR_UNKNOWN_COMMAND_CHAR */
  +        "malformated search and replace operation",                             /* VAR_ERR_MALFORMATTED_REPLACE */
  +        "unknown flag in search and replace operation",                         /* VAR_ERR_UNKNOWN_REPLACE_FLAG */
  +        "invalid regular expression in search and replace operation",           /* VAR_ERR_INVALID_REGEX_IN_REPLACE */
  +        "missing parameter in command",                                         /* VAR_ERR_MISSING_PARAMETER_IN_COMMAND */
  +        "empty search string in search and replace operation",                  /* VAR_ERR_EMPTY_SEARCH_STRING */
  +        "start offset missing in cut operation",                                /* VAR_ERR_MISSING_START_OFFSET */
  +        "offsets in cut operation delimited by unknown character",              /* VAR_ERR_INVALID_OFFSET_DELIMITER */
  +        "range out of bounds in cut operation",                                 /* VAR_ERR_RANGE_OUT_OF_BOUNDS */
  +        "offset out of bounds in cut operation",                                /* VAR_ERR_OFFSET_OUT_OF_BOUNDS */
  +        "logic error in cut operation",                                         /* VAR_ERR_OFFSET_LOGIC */
  +        "malformatted transpose operation",                                     /* VAR_ERR_MALFORMATTED_TRANSPOSE */
  +        "source and destination classes do not match in transpose operation",   /* VAR_ERR_TRANSPOSE_CLASSES_MISMATCH */
  +        "empty character class in transpose operation",                         /* VAR_ERR_EMPTY_TRANSPOSE_CLASS */
  +        "incorrect character class in transpose operation",                     /* VAR_ERR_INCORRECT_TRANSPOSE_CLASS_SPEC */
  +        "malformatted padding operation",                                       /* VAR_ERR_MALFORMATTED_PADDING */
  +        "width parameter missing in padding operation",                         /* VAR_ERR_MISSING_PADDING_WIDTH */
  +        "fill string missing in padding operation",                             /* VAR_ERR_EMPTY_PADDING_FILL_STRING */
  +        "unknown quoted pair in search and replace operation",                  /* VAR_ERR_UNKNOWN_QUOTED_PAIR_IN_REPLACE */
  +        "sub-matching reference out of range",                                  /* VAR_ERR_SUBMATCH_OUT_OF_RANGE */
  +        "invalid argument",                                                     /* VAR_ERR_INVALID_ARGUMENT */
  +        "incomplete quoted pair",                                               /* VAR_ERR_INCOMPLETE_QUOTED_PAIR */
  +        "lookup function does not support variable arrays",                     /* VAR_ERR_ARRAY_LOOKUPS_ARE_UNSUPPORTED */
  +        "index specification of array variable contains an invalid character",  /* VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC */
  +        "index specification of array variable is incomplete",                  /* VAR_ERR_INCOMPLETE_INDEX_SPEC */
  +        "bracket expression in array variable's index is not closed",           /* VAR_ERR_UNCLOSED_BRACKET_IN_INDEX */
  +        "division by zero error in index specification",                        /* VAR_ERR_DIVISION_BY_ZERO_IN_INDEX */
  +        "unterminated loop construct",                                          /* VAR_ERR_UNTERMINATED_LOOP_CONSTRUCT */
  +        "invalid character in loop limits"                                      /* VAR_ERR_INVALID_CHAR_IN_LOOP_LIMITS */
  +    };
  +
  +    if (str == NULL)
  +        return VAR_RC(VAR_ERR_INVALID_ARGUMENT);
  +    rc = 0 - rc;
  +    if (rc < 0 || rc >= sizeof(errors) / sizeof(char *))
  +        *str = "unknown error";
  +    else
  +        *str = errors[rc];
  +    return VAR_OK;
   }
   
  Index: ossp-pkg/var/var.h
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 var.h
  --- ossp-pkg/var/var.h	27 Feb 2002 13:44:16 -0000	1.23
  +++ ossp-pkg/var/var.h	28 Feb 2002 08:08:16 -0000	1.24
  @@ -77,46 +77,42 @@
       VAR_ERR_INVALID_HEX                     =  -3,
       VAR_ERR_INCOMPLETE_HEX                  =  -2,
       VAR_ERR_INCOMPLETE_NAMED_CHARACTER      =  -1,
  -    VAR_OK = 0
  +    VAR_OK                                  =   0
   } var_rc_t;
   
  -/* Expand quoted pairs to their binary representation. */
  -var_rc_t var_unescape(const char *src, size_t len, char *dst, int unescape_all);
  +struct var_st;
  +typedef struct var_st var_t;
   
  -/* Prototype for the lookup callback used in var_expand(). */
  -typedef var_rc_t (*var_cb_t)(
  -    void *context,
  -    const char *varname, size_t name_len, int idx,
  -    const char **data, size_t *data_len,
  -    size_t *buffer_size
  -);
  -
  -/* Configure the var_expand() parser's tokens. */
  -typedef struct {
  -    char varinit;        /* '$' */
  -    char startdelim;     /* '{' */
  -    char enddelim;       /* '}' */
  -    char startindex;     /* '[' */
  -    char endindex;       /* ']' */
  -    char current_index;  /* '#' */
  -    char escape;         /* '\' */
  -    char *namechars;     /* 'a-zA-Z0-9_' */
  +typedef enum {
  +    VAR_CONFIG_SYNTAX,
  +    VAR_CONFIG_CB_VALUE
   } var_config_t;
   
  -/* The default configuration */
  -extern const var_config_t var_config_default;
  -
  -/* Expand variable expressions in a text buffer. */
  -var_rc_t var_expand(const char *input, size_t input_len,
  -                    char **result, size_t *result_len,
  -                    var_cb_t lookup, void *lookup_context,
  -                    const var_config_t *config, int force_expand);
  -
  -/* Map an error code to a text message. */
  -const char *var_strerror(var_rc_t rc);
  +typedef struct {
  +    char  escape;       /* default: '\' */
  +    char  delim_init;   /* default: '$' */
  +    char  delim_open;   /* default: '{' */
  +    char  delim_close;  /* default: '}' */
  +    char  index_open;   /* default: '[' */
  +    char  index_close;  /* default: ']' */
  +    char  index_mark;   /* default: '#' */
  +    char *name_chars;   /* default: "a-zA-Z0-9_" */
  +} var_syntax_t;
  +
  +typedef var_rc_t (*var_cb_value_t)(
  +    void *ctx,
  +    const char  *var_ptr, size_t  var_len, int var_idx,
  +    const char **val_ptr, size_t *val_len, size_t *val_size
  +);
   
  -/* Unique library identifier. */
   extern const char var_id[];
  +
  +var_rc_t  var_create    (var_t **var);
  +var_rc_t  var_destroy   (var_t  *var);
  +var_rc_t  var_config    (var_t  *var, var_config_t mode, ...);
  +var_rc_t  var_unescape  (var_t  *var, const char *src_ptr, size_t src_len, char  *dst_ptr, size_t  dst_len, int all);
  +var_rc_t  var_expand    (var_t  *var, const char *src_ptr, size_t src_len, char **dst_ptr, size_t *dst_len, int force_expand);
  +var_rc_t  var_strerror  (var_t  *var, var_rc_t rc, char **str);
   
   #endif /* __VAR_H__ */
   
  Index: ossp-pkg/var/var.pod
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 var.pod
  --- ossp-pkg/var/var.pod	27 Feb 2002 13:44:16 -0000	1.20
  +++ ossp-pkg/var/var.pod	28 Feb 2002 08:08:16 -0000	1.21
  @@ -35,841 +35,642 @@
   
   =head1 SYNOPSIS
   
  -var_rc_t var_unescape(const char *src, size_t len, char *dst, int unescape_all);
  +=over 2
   
  -var_rc_t var_expand(const char *input, size_t input_len, char **result, size_t *result_len, var_cb_t lookup, void *lookup_context, const var_config_t *config, int force_expand);
  +=item Types:
   
  -const char *var_strerror(var_rc_t rc);
  +B<var_rc_t>,
  +B<var_t>,
  +B<var_config_t>,
  +B<var_syntax_t>,
  +B<var_cb_value_t>.
   
  -=head1 DESCRIPTION
  -
  -The routines included in this library, var_unescape() and
  -var_expand(), enable application developers to make use of variable
  -expansion in an arbitrary text buffer. Assume, for instance, your
  -application provided the data items
  -
  -    HOST   = peti.example.org
  -    OSTYPE = FreeBSD
  -    HOME   = /home/my-application
  -
  -and you had obtained the following message from the user via means of
  -a configuration file, the system environment, or the command line:
  -
  -    My-application starting up with the following configuration:
  -
  -        HOST   = $HOST
  -        OSTYPE = $OSTYPE
  -        HOME   = $HOME
  -
  -Then you could use var_expand() to replace the variables in that
  -message by their actual contents.
  -
  -The good thing about this kind of approach is that you separate the
  -actual information in a message from the message's layout, language,
  -or content encoding. If the user doesn't like messages as long the one
  -above, he'd simply provide the template
  -
  -    my-application: $HOST ($OSTYPE), $HOME
  -
  -to get the result, he's interested in. Maybe all he's interested in
  -is:
  -
  -    my-application's home is $HOME
  -
  -To take things one step further, OSSP var provides the user -- the
  -person providing the template file, that is -- with powerful
  -mechanisms to modify the presentation of the variable's contents. For
  -example, the expression ${HOME:l} would yield the contents of the
  -variable HOME converted to all lower-case. Or, to show on even more
  -powerful construct: The expression ${HOME:y/ \t/__/} would turn all
  -blanks or tabs in the contents of HOME to underscores, before
  -inserting it into the output text.
  -
  -Similarly, the function var_unescape() will expand "quoted pairs",
  -thus allowing the user to speficy non-printable characters is a
  -template, such as the carrige return ('\r'), the newline ('\n'), or --
  -as seen above -- the tab ('\t').
  -
  -Using these two routines in combination, gives the application
  -developer the power to have the user custumize the application's
  -messages as he or she sees fit at virtually no extra cost;
  -incorporating a template mechanism into your own applications with
  -OSSP var is extremely simple.
  -
  -=head1 THE VAR_UNESCAPE FUNCTION
  -
  -The purpose of var_unescape() is to expand any quoted pairs found in
  -the input buffer. Its prototype is:
  -
  -    var_rc_t var_unescape(const char *src, size_t len,
  -                          char *dst, int unescape_all);
  -
  -The first parameter, "src", is a pointer to the input buffer, which
  -should be processed. Unlike most C library functions, var_unescape()
  -does not expect the buffer to be terminated by a null byte ('\0'),
  -instead, it expects the length of the buffer's contents as parameter
  -"len". The third parameter, "dst" is a pointer to a buffer, into which
  -the expanded buffer is copied if processing is successful. The size of
  -this buffer must be at least len+1 characters. The reason the result
  -buffer has to be one byte longer than the input buffer is that
  -var_unescape() always adds a terminating null byte at the end of the
  -output buffer, so that you can use the result comfortably with other C
  -library routines.
  -
  -The last parameter, "unescape_all", is flag that modifies the behavior
  -of var_unescape(). If is set to TRUE (any value except zero, that is),
  -var_unescape() will expand B<any> quoted pair it sees, even those that
  -it does not know about. Hence, a "\1" will become a "1", even though
  -"\1" has no special meaning to var_unescape(). If "unescape_all" is
  -set to FALSE (zero), such quoted pairs will be copied verbatimly to
  -the output buffer.
  -
  -The quoted pairs supported by var_unescape() are '\t', '\r', '\n',
  -'\abc' (octal), '\xAB' (hexadecimal), and '\x{...}' (grouped
  -hexadecimal). Please refer to section "SUPPORTED NAMED CHARACTERS" for
  -a more comprehensive description of these quoted pairs.
  -
  -If var_unescape() encounters any syntax errors, it will return an
  -error code denoting exactly what kind of error occured; please refer
  -to section "CODES RETURNED BY THE LIBRARY" for a complete list of
  -possible return codes. If no error occured, VAR_OK is returned.
  -
  -=head1 THE VAR_EXPAND FUNCTION
  -
  -The second function of OSSP var is var_expand(), the routine that will
  -expand any variables found in a text buffer to their actual contents.
  -Its prototype is:
  -
  -    var_rc_t var_expand(const char *input, size_t input_len,
  -                        char **result, size_t *result_len,
  -                        var_cb_t lookup, void *lookup_context,
  -                        const var_config_t *config,
  -                        int force_expand);
  -
  -Don't be scared, the usage is way simpler than it looks at first
  -glance. The parameters of var_expand() are:
  +=item Functions:
   
  -=over 4
  +B<var_create>,
  +B<var_destroy>,
  +B<var_config>,
  +B<var_unescape>,
  +B<var_expand>, 
  +B<var_strerror>.
   
  -=item const char *input
  +=item Variables:
   
  -A pointer to the text buffer containing the variable expressions to be
  -expanded. Unlike in most other C library functions, this text buffer
  -need not be terminated by a null byte.
  -
  -=item size_t input_len
  -
  -The length of the text buffer's contents.
  -
  -=item char **result
  -
  -A pointer to a character pointer in which the location of the expanded
  -text buffer will be stored. The result buffer will be allocated by
  -var_expand() using the system call malloc(3), thus it is the caller's
  -responsibility to free(3) that buffer once it is not used anymore. The
  -result buffer will be terminated by null byte, which is not included
  -in the "result_len" counter.
  -
  -If var_expand() fails with an error, "result" will point to "input".
  -The only exceptions are the VAR_ERR_INVALID_ARGUMENT
  -VAR_ERR_OUT_OF_MEMORY errors, in which case "result" is undefined.
  -
  -=item size_t *result_len
  -
  -A pointer to the location in which the length of the expanded text
  -buffer will be stored. If var_expand() fails with an error -- with the
  -exception of VAR_ERR_INVALID_ARGUMENT and VAR_ERR_OUT_OF_MEMORY --,
  -"result_len" will contain the number of characters that have been
  -consumed from "input" before the error occured. This argument can be
  -NULL if the application is not interested in this information.
  -
  -=item var_cb_t lookup
  -
  -A pointer to the function used to perform the actual variable lookup.
  -Please refer to section "THE LOOKUP CALLBACK" for a comprehensive
  -description.
  -
  -=item void *lookup_context
  -
  -An arbitrary value passed through to "lookup" every time it is called.
  -Please refer to section "THE LOOKUP CALLBACK" for a comprehensive
  -description.
  -
  -=item const var_config_t *config
  -
  -The configuration of var_expand(). The var_config_t structure is
  -defined as follows:
  -
  -    typedef struct {
  -        char varinit;
  -        char startdelim;
  -        char enddelim;
  -        char startindex;
  -        char endindex;
  -        char current_index;
  -        char escape;
  -        char *namechars;
  -    } var_config_t;
  -
  -Using this structure, you can modify the parser to use different
  -tokens to find variable constructs. If "config" is NULL, the default
  -configuration will be used, which you can access through the
  -declaration
  -
  -    extern const var_config_t var_config_default;
  -
  -in var.h. The default configuration for var_init looks like this:
  -
  -    const var_config_t var_config_default = {
  -        '$',              /* varinit */
  -        '{',              /* startdelim */
  -        '}',              /* enddelim */
  -        '[',              /* startindex */
  -        ']',              /* endindex */
  -        '#',              /* current_index */
  -        '\\',             /* escape */
  -        "a-zA-Z0-9_"      /* namechars */
  -    };
  -
  -Please note that the setting of var_config_t.escape is actually a
  -single backslash; the quote above has been taken from the C source
  -code, which is why the backslash had to be escaped with another
  -backslash for the C pre-processor.
  -
  -=item int force_expand
  -
  -This flag determines how var_expand() deals with undefined variables.
  -If it is set to TRUE (any value but zero), var_expand() will fail with
  -error code VAR_ERR_UNDEFINED_VARIABLE whenever an undefined variable
  -is encountered. If set to FALSE (zero), var_expand() will copy the
  -expression it failed to expand verbatimly into the output buffer, in
  -order to enable you to go over the buffer with an additional pass.
  -
  -Generally, if you do not plan to use muli-pass expansion, you should
  -set "force_expand" to TRUE in order to make sure no unexpanded
  -variables are left over in the buffer.
  +B<var_id>.
   
   =back
   
  -var_expand() returns VAR_OK if everything went fine, and one of the
  -error codes described in section "CODES RETURNED BY THE LIBRARY" if
  -the function call failed.
  -
  -=head1 THE VAR_STRERROR FUNCTION
  -
  -In order to make life for application developers easier, the helper
  -function var_strerror() has been provided, which can be used to map
  -any of the error codes returned by the OSSP var library into a
  -clear-text message describing the reason for failure. Please note that
  -errors coming from the callback, such as VAR_ERR_CALLBACK and those
  -based on it, cannot be mapped and will yield the message "unknown
  -error".
  -
  -=head1 COMBINING VAR_UNESCAPE AND VAR_EXPAND
  -
  -For maximum power and flexibility, you will want to use both routines
  -provided by this library in combination. That is, you will want to use
  -var_unescape() to turn all quoted pairs into their real
  -representation, before you call var_expand(), because then the user
  -can safely use specials like "\n" or "\t" throughout the template and
  -achieve the desired effect. These quoted pairs are particularly useful
  -if search-and-replace or transpose actions are performed on variables
  -before they're expanded. Be sure, though, to make the first
  -var_unescape() pass with "expand_all" set to FALSE, or the routine
  -will also expand quoted pairs like "\1", which might have a special
  -meaning in the var_expand() pass to follow.
  -
  -Once, all known quoted pairs are expanded, expand the variables with
  -var_expand(). After that, you will want to have a second pass with
  -var_unescape() and "expand_all" set to TRUE, to make sure all
  -remaining quoted pairs are expanded. Also, the var_expand() pass might
  -have introduced now quoted pairs into the output text, which you need
  -to expand to get the desired effect.
  -
  -Take a look at this code snipped, to see how to combine var_unescape()
  -und var_expand() properly:
  -
  -    var_rc_t rc;
  -    char* result;
  -    size_t result_len;
  -
  -    if ((rc = var_unescape(input, strlen(input), output, 0)) != VAR_OK ||
  -        (rc = var_expand(output, strlen(output),
  -                         &result, &result_len,
  -                         &lookup, NULL,
  -                         NULL, 1)) != VAR_OK ||
  -        (rc = var_unescape(input, strlen(input), output, 1)) != VAR_OK)
  -    {
  -        printf("Expanding the template failed with error %d.\n", rc);
  -        exit(1);
  -    }
  -    [...]
  -    free(result);
  -
  -=head1 THE LOOKUP CALLBACK
  -
  -The function var_expand() does not know how to look the contents of a
  -variable up itself. Instead, it relies on a caller-supplied callback
  -function, which adheres to the var_cb_t function interface:
  -
  - var_rc_t lookup(void *context,
  -                 const char *varname, size_t name_len, int index,
  -                 const char **data, size_t *data_len,
  -                 size_t *buffer_size);
  -
  -This function will be called by var_expand() whenever it has to
  -retrieve the contents of, say, the variable $name, using the following
  -parameters:
  -
  -=over 4
  -
  -=item void *context
  -
  -The contents of context is passed through from the var_expand()'s
  -"lookup_context" parameter to the callback. This parameter can be used
  -by the programmer to provide internal data to the callback function
  -through var_expand().
  -
  -=item const char *varname
  -
  -This is a pointer to the name of the variable which's contents
  -var_expand() wishes to retrieve. In our example of looking up $name,
  -varname would point to the string "name". Please note that the string
  -is NOT necessarily terminated by a '\0' character! If the callback
  -function needs to pass the string to the standard C library string
  -manipulation functions during the lookup, it will have to copy the
  -string into a buffer of its own to ensure it is null-terminated.
  -
  -=item size_t name_len
  -
  -The "name_len" parameter contains the length of the variable name
  -"varname" points to.
  -
  -=item int index
  -
  -The contents of this interger determines which entry of a variable
  -array to look-up. If the variable specification that led to the
  -execution of the lookup function did not contain an index, zero is
  -provided per default. If "index" is negative, the callback must return
  -the number of entries of the variable array.
  -
  -=item const char **data
  -
  -This is a pointer to the location where the callback function should
  -store the pointer to the contents of the variable.
  -
  -=item size_t *data_len
  -
  -This is a pointer to the location where the callback function should
  -store the length of the contents of the variable.
  -
  -=item size_t *buffer_size
  -
  -This is a pointer to the location where the callback function should
  -store the size of the buffer that has been allocated to hold the
  -contents of the looked-up variable. If no buffer has been allocated at
  -all, because the variable uses some other means of storing the
  -contents -- as in the case of getenv(3), where the system provides the
  -buffer for the string --, this should be zero (0).
  -
  -In case a buffer size greater than zero is returned by the callback
  -function, var_expand() will make use of that buffer internally if
  -possible. If will also free(3) the buffer when it is not needed
  -anymore.
  -
  -=back
  -
  -The return code of the lookup function is interpreted by var_expand()
  -according to the following convention: VAR_OK means success, that
  -is, the contents of the variable has been looked-up successfully and
  -the "data", "data_len", and "buffer_size" locations have been filled
  -with appropriate values. A return code VAR_ERR_XXX means that the lookup
  -failed, such as a system error or lack of resources. In the latter two
  -cases, the contents of "data", "data_len" and "buffer_size" is assumed
  -to be undefined. Hence, var_expand() will not free(3) any possibly
  -allocated buffers, the callback must take care of that itself.
  -
  -If a callback returns the special VAR_ERR_UNDEFINED_VARIABLE return
  -code, the behaviour of var_expand() depends on the setting of
  -the "force_expand" parameter. If force-expand mode has been set,
  -var_expand() will fail with this error. If force-expand mode has
  -not been set, var_expand() will copy the expression that caused the
  -lookup to fail verbatimly into the output buffer so that an additional
  -expanding pass may expand it later.
  -
  -If the callback returns an VAR_ERR_XXX, var_expand() will fail with the return
  -code it got from the callback.  If the cause for the error can not be denoted
  -by an error code defined in var.h, callback implementors should use the error
  -code VAR_ERR_CALLBACK, which is currently defined to -64. It is guaranteed
  -that no error code smaller than VAR_ERR_CALLBACK is ever used by var_expand()
  -or VAR_UNESCAPE(), so if the callback implementor wishes to distinguish
  -between different reasons for failure, he can define his own set of errors
  -
  -    typedef enum {
  -        LOOKUP_ERROR_ONE   = -3,
  -        LOOKUP_ERROR_TWO   = -2,
  -        LOOKUP_ERROR_THREE = -1,
  -    } lookup_error_t;
  -
  -and return, say, "(VAR_ERR_CALLBACK - LOOKUP_ERROR_TWO)".
  -
  -To illustrate the implementation of a proper callback, take a look at
  -the following expamle that accesses the system environment via
  -getenv(3) to lookup variables and to return them to var_expand():
  -
  -    var_rc_t env_lookup(
  -        void *context,
  -        const char *varname, size_t name_len, int idx,
  -        const char **data, size_t *data_len,
  -        size_t *buffer_size)
  -    {
  -        char tmp[256];
  -
  -        if (idx != 0)
  -            return VAR_ERR_ARRAY_LOOKUPS_ARE_UNSUPPORTED;
  -        if (name_len > sizeof(tmp) - 1)
  -            return VAR_ERR_CALLBACK;
  -        memcpy(tmp, varname, name_len);
  -        tmp[name_len] = '\0';
  -        if ((*data = getenv(tmp)) == NULL)
  -            return VAR_ERR_UNDEFINED_VARIABLE;
  -        *data_len = strlen(*data);
  -        *buffer_size = 0;
  -        return VAR_OK;
  -    }
  -
  -=head1 SUPPORTED NAMED CHARACTERS
  -
  -The var_unescape() function knows the following constructs:
  -
  -=over 4
  -
  -=item \t, \r, \n
  -
  -These expressions are replaced by the appropriate binary
  -representation of a tab, a carrige return and a newline respectively.
  -
  -=item \abc
  -
  -This expression is replaced by the value of the octal number "abc".
  -Valid digits of "a" are in the range of '0' to '3', for digits "b" and
  -"c" in the range of '0' to '7'. Please note that an octal expression
  -is recognized only if the backslash is followed by three digits! The
  -expression "\1a7", for example, is interpreted as the quoted pair "\1"
  -followed by the verbatim text "a7".
  -
  -=item \xAB
  -
  -This expression is replaced by the value of the hexadecimal number
  -$AB. Both characters "A" and "B" must be in the range of '0' to '9',
  -'a' to 'f', or 'A' to 'F'.
  -
  -=item \x{...}
  -
  -This expression denotes a set of grouped hexadecimal numbers. The
  -"..." part may consist of an arbitrary number of hexadecimal pairs,
  -such as in "\x{}", "\x{ff}", or "\x{55ffab04}". The empty expression
  -"\x{}" is a no-op; it will not produce any output.
  -
  -This construct may be useful to specify multi-byte characters (as in
  -Unicode). Even though "\x{0102}" is effectively equivalent to
  -"\x01\x02", the grouping of values may be useful in other contexts,
  -even though var_unescape() or var_expand() make no direct use of it.
  -
  -=back
  +=head1 DESCRIPTION
   
  -=head1 SUPPORTED VARIABLE EXPRESSIONS
  +B<OSSP var> is a flexible, full-featured and fast variable construct
  +expansion library.
   
  -Additionally to the ordinary variable expansion of $name or ${name},
  -var_expand() supports a number of operations that can be performed on
  -the contents of "name" before it is copied to the output buffer. Such
  -operations are always denoted by appending the a colon and a command
  -character to the variable name, for expample: ${name:l} or
  -${name:s/foo/bar/}. You can specify multiple operations, which are
  -executed from the left to the right, for expample:
  -${name:l:s/foo/bar/:u}.
  -
  -Also, you can nest variable expansion and command execution pretty
  -much anywhere in the construct, for example: ${name:s/$foo/$bar/g}. In
  -that context is probably useful to have a look at the formal
  -expression grammar provided in section "EBNF GRAMMAR OF SUPPORTED
  -EXPRESSIONS".
  -
  -Generally, all operations described below do not modify the contents
  -of any variable -- var_expand() generally can't set variables, it will
  -only read them. If the description says that an operation "replaces
  -the contents of variable $foo", it is meant that rather than expanding
  -the expression the the contents of $foo, it will expand to the
  -modified string instead. The contents of $foo is left untouched in any
  -case.
  +It supports a configurable variable construct syntax very similar
  +to the style found in many scripting languages (like C<@>I<name>,
  +C<${>I<name>C<}>, C<$(>I<name>C<)>, etc.) and provides both simple
  +scalar (C<${>I<name>C<}>) and array (C<${>I<name>C<[>I<index>C<]}>)
  +expansion, plus optionally one or more post-operations on the expanded
  +value (C<${>I<name>C<:>I<op>[C<:>I<op>...]]C<}>).
  +
  +The supported post-operations are length determination, case
  +conversion, defaults, postive and negative alternatives, sub-strings,
  +regular expression based substitutions, character translations, and
  +padding. Additionally, a meta-construct plus arithmetic expressions for
  +index and range calculations allow (even nested) iterations over array
  +variable expansions (..C<[>..C<${>I<name>C<[#+1]}>..C<]>..).
  +
  +The actual variable value lookup is performed through a callback
  +function, so B<OSSP var> can expand arbitrary values.
  +
  +=head1 SYNTAX CONSTRUCTS
  +
  +A string expanded through B<OSSP var> can consist of arbitrary text
  +characters plus one or more of the following special syntax constructs
  +which are expanded by B<OSSP var>.
   
   =over 4
   
  -=item ${name:#}
  -
  -This operation will expand to the length of the contents of $name. If,
  -for example, "$FOO" is "foobar", then "${FOO:#}" will result in "6".
  -
  -=item ${name:l}
  -
  -This operation will turn the contents of $name to all lower-case,
  -using the system routine tolower(3), thereby possibly using the
  -system's localization settings.
  -
  -=item ${name:u}
  -
  -This operation will turn the contents of $name to all upper-case,
  -using the system routine toupper(3), thereby possibly using the
  -system's localization settings.
  -
  -=item ${name:*<word>}
  -
  -This operation will replace the contents of $name with the empty
  -string ("") if $name is not empty. Otherwise, it will replace it by
  -"word".
  -
  -=item ${name:-<word>}
  -
  -This operation will replace the contents of $name with "word" if $name
  -is empty. Otherwise, it will expand to the contents of $name.
  -
  -=item ${name:+<word>}
  -
  -This operation will replace the contents of $name with "word" if $name
  -is not empty. Otherwise, it will expand to the contents of $name.
  -
  -=item ${name:o<start>-<end>}
  -
  -This operation will cut the string starting at position "start" to
  -ending position "end" out of the contents of $name and return that.
  -Please note that the character at position "end" is included in the
  -result; ${name:o3-4} for instance, will return a two-character string.
  -Also, please note that start positions begin at zero (0)! If the "end"
  -parameter is left out, as in ${name:o3-}, the operation will return the
  -string starting at position 3 until the end.
  -
  -=item ${name:o<start>,<length>}
  -
  -This operation will cut the string starting at position "start"
  -of length "length" out of the contents of $name and return that.
  -${name:o3,4} means, for instance, to return the next 4 characters
  -starting at position 3 in the string. Please note that start positions
  -begin at zero (0)! If "length" is left out, as in ${name:o3,}, the
  -operation will return the string starting at position 3 until the end.
  -
  -=item ${name:s/<pattern>/<string>/[gti]}
  -
  -This operation will perform a search-and-replace operation on the
  -contents of $name and return the result. The behavior of the
  -search-and-replace is modified by the following flags parameter: If a
  -'t' flag has been provided, a plain text search-and-replace is
  -performed, otherwise, the default is to a regular expression
  -search-and-replace as in the system utility sed(1). If the 'g' flag
  -has been provided, the search-and-replace will replace all instances
  -of "pattern" by "replace", otherwise, the default is to replace only
  -the first instance. If the 'i' flag has been provided, the
  -search-and-replace will take place case-insensitively, otherwise, the
  -default is to distinguish character case.
  -
  -=item ${name:y/<ochars>/<nchars>/}
  -
  -This operation will translate all characters in the contents of $name
  -that are found in the "ochars" class to the corresponding character in
  -the "nchars" class, just like the system utility tr(1) does. Both
  -"ochars" and "nchars" may contain character range specifications, for
  -example "a-z0-9". A hyphon as the first or last character of the class
  -specification is interpreted literally. Both the "ochars" and the
  -"nchars" class must contain the same number of characters after all
  -ranges are expanded, or var_expand() will abort with an error.
  -
  -If, for example, "$FOO" would contain "foobar", then
  -"${FOO:y/a-z/A-Z/} would yield "FOOBAR". Another goodie is to use that
  -operation to ROT13-encrypt or decrypt a string with the expression
  -"${FOO:y/a-z/n-za-m/}".
  -
  -=item ${name:p/<width>/<string>/<align>}
  -
  -This operation will pad the contents of $name with "string" according
  -to the "align" parameter, so that the result is at least "width"
  -characters long. Valid parameters for align are 'l' (left), 'r'
  -(right), or 'c' (center). The "string" parameter may contain multiple
  -characters, if you see any use for that.
  -
  -If, for example, "$FOO" is "foobar", then "${FOO:p/20/./c}" would
  -yield ".......foobar......."; "${FOO:p/20/./l}" would yield
  -"foobar.............."; and "${FOO:p/20/./r}" would yield
  -"..............foobar";
  -
  -=back
  -
  -=head1 EBNF GRAMMAR OF SUPPORTED EXPRESSIONS
  -
  - input      : ( TEXT | variable | START-INDEX input END-INDEX ( loop-limits )? )*
  -
  - loop-limits: START-DELIM (numexp)? ',' (numexp)? ( ',' (numexp)? )? END-DELIM
  -
  - variable   : '$' (name|expression)
  -
  - expression : START-DELIM (name|variable)+ (START-INDEX num-exp END-INDEX)? (':' command)* END-DELIM
  -
  - name       : (VARNAME)+
  -
  - command    : '-' (EXPTEXT|variable)+
  -            | '+' (EXPTEXT|variable)+
  -            | 'o' (NUMBER ('-'|',') (NUMBER)?)
  -            | '#'
  -            | '*' (EXPTEXT|variable)+
  -            | 's' '/' (variable|SUBSTTEXT)+ '/' (variable|SUBSTTEXT)* '/' ('g'|'i'|'t')*
  -            | 'y' '/' (variable|SUBSTTEXT)+ '/' (variable|SUBSTTEXT)* '/'
  -            | 'p' '/' NUMBER '/' (variable|SUBSTTEXT)* '/' ('r'|'l'|'c')
  -            | 'l'
  -            | 'u'
  -
  - num-exp    : operand
  -            | operand ('+'|'-'|'*'|'/'|'%') num-exp
  -
  - operand    : ('+'|'-')? NUMBER
  -            | CURR-INDEX
  -            | '(' num-exp ')'
  -            | variable
  -
  - START-DELIM: '{'
  -
  - END-DELIM  : '}'
  -
  - START-INDEX: '['
  -
  - END-INDEX  : ']'
  -
  - CURR-INDEX : '#'
  -
  - VARNAME    : '[a-zA-Z0-9_]+'
  +=item C<\>I<NNN>
   
  - NUMBER     : '[0-9]+'
  +Character with the octal value I<NNN> 
  +(I<N>: C<0>,...,C<7>).
   
  - SUBSTTEXT  : '[^$/]'
  +=item C<\x>I<NN>, C<\x{>I<NNMM..>C<}>
   
  - EXPTEXT    : '[^$}:]+'
  +Character with the hexadecimal value I<NN> or the characters
  +denoted by grouped hexadecimal numbers I<NNMM..>. (I<N>, I<M>:
  +C<0>,...,C<9>,[C<aA>],...,[C<fF>]).
   
  - TEXT       : '[^$[\]]+'
  +=item C<\t>, C<\r>, C<\n>
   
  -Please note that the descriptions of START-DELIM, END-DELIM, VARNAME,
  -SUBSTEXT, and EXPTEXT shown here assume that var_expand() has been
  -called in the default configuration. In thruth, the contents of
  -VARNAME corresponds directly to the setting of "namechars" in the
  -var_config_t structure. Similarly, the dollar ('$') corresponds
  -directly to the setting of "varinit", and the '{' and '}' characters
  -to "startdelim" and "enddelim" respectively.
  +Tabulator, Carriage Return and Newline character.
   
  -=head1 CODES RETURNED BY THE LIBRARY
  +=item C<\\>, C<\>I<x>
   
  -Generally, all routines part of that library follow the convention
  -that a return code of zero or greater denotes success and a return
  -code of less than zero denotes failure. (This is slightly different
  -for the callbacks, please see section "THE LOOKUP CALLBACK" for
  -further details.) In order to distinguish the various causes of
  -failure, the following set of defines is provided in var.h:
  +Ordinary character C<\> and I<x>.
   
  -=over 4
  -
  -=item VAR_OK
  +=item C<$>I<name>, C<${>I<name>C<}>
   
  -No errors; everything went fine.
  +Contents of scalar variable I<name>.
   
  -=item VAR_ERR_INCOMPLETE_QUOTED_PAIR
  +=item C<${>I<name>C<[>I<index>C<]>C<}>
   
  -The configured escape character as the last character in the input
  -buffer.
  +Contents of array variable I<name> at position I<index>.
  +For I<index> full arithmetic expressions are allowed.
   
  -=item VAR_ERR_INVALID_ARGUMENT
  +=item C<${>I<name>C<:#}>
   
  -Any of the provided arguments is invalid, for expample: the pointer to
  -the input buffer is NULL.
  +Length of C<$>I<name>.
   
  -=item VAR_ERR_SUBMATCH_OUT_OF_RANGE
  +=item C<${>I<name>C<:l}>, C<${>I<name>C<:u}>
   
  -During execution of a ${name:s/pattern/replace/flags} operation, a
  -submatch has been referenced in the "replace" part, which's number is
  -greater than the number of submatches encountered in the "pattern"
  -part, for expample: ${name:s/foo(bar)/\2/}.
  +C<$>I<name>, converted to all lower-case or all upper-case.
   
  -=item VAR_ERR_UNKNOWN_QUOTED_PAIR_IN_REPLACE
  +=item C<${>I<name>C<:->I<word>C<}>
   
  -During execution of a ${name:s/pattern/replace/flags} operation, the
  -parser encountered an unknown quoted pair in the "replace" part. Valid
  -quoted pairs are "\\", "\0", "\1", ... , "\9" only.
  +If C<$>I<name> is not empty string, then C<$>I<name>, else I<word>
  +(default value).
   
  -=item VAR_ERR_EMPTY_PADDING_FILL_STRING
  +=item C<${>I<name>C<:+>I<word>C<}>
   
  -The "fill" part in an ${name:p/width/fill/pos/} expression was found
  -to be empty.
  +If C<$>I<name> is empty string, then empty string, else I<word>
  +(positive alternative).
   
  -=item VAR_ERR_MISSING_PADDING_WIDTH
  +=item C<${>I<name>C<:*>I<word>C<}>
   
  -The "width" part in an ${name:p/width/fill/pos/} expression was found
  -to be empty.
  +If C<$>I<name> is not empty string, then empty string, else I<word>
  +(negative alternative).
   
  -=item VAR_ERR_MALFORMATTED_PADDING
  +=item C<${>I<name>C<:o>I<start>C<,>[I<length>]C<}>
   
  -Any of the "/" delimiters was missing while parsing a
  -${name:p/width/fill/pos/} expression.
  +Substring of C<$>I<name> starting at position I<start> with I<length>
  +characters.
   
  -=item VAR_ERR_INCORRECT_TRANSPOSE_CLASS_SPEC
  +=item C<${>I<name>C<:o>I<start>C<->[I<end>]C<}>
   
  -While parsing a ${name:y/old-class/new-class/} expression, any of the
  -character class specifications had a start-of-range character that was
  -greater (in terms of ASCII encoding) than the end-of-range character,
  -for expample: "[z-a]".
  +Substring of C<$>I<name> starting at position I<start> and ending at
  +position I<end> (inclusive).
   
  -=item VAR_ERR_EMPTY_TRANSPOSE_CLASS
  +=item C<${>I<name>C<:s/>I<pattern>C</>I<string>C</>[C<itg>]C<}>
   
  -While parsing a ${name:y/old-class/new-class/} expression, any of the
  -character class specifications was found to be empty.
  +C<$>I<name> after replacing characters matching I<pattern> with
  +I<string>. By default, case-sensitive regular expression matching is
  +performed and only the first occurance of I<pattern> is replaced. Flag
  +"C<i>" switches to case insensitive matching; flag "C<t>" switches
  +to plain text pattern; flag "C<g>" switches to replacements of all
  +occurances.
   
  -=item VAR_ERR_TRANSPOSE_CLASSES_MISMATCH
  +=item C<${>I<name>C<:y/>I<ochars>C</>I<nchars>C</}>
   
  -While parsing a ${name:y/old-class/new-class/} expression, the number
  -of characters found in the expanded "old-class" was different than the
  -number of characters in new-class".
  +C<$>I<name> after replacing all characters found in the I<ochars>
  +character class by the corresponding character in the I<nchars>
  +character class.
   
  -=item VAR_ERR_MALFORMATTED_TRANSPOSE
  +=item C<${>I<name>C<:p/>I<width>C</>I<string>C</>{C<l>,C<c>,C<r>}C<}>
   
  -Any of the "/" delimiters was missing while parsing a
  -${name:y/old-class/new-class/} expression.
  +C<$>I<name> after padding to I<width> with I<string>. Original contents
  +of I<name> is either left justified (flag "C<l>"), centered (flag
  +"C<c>"), or right justified (flag "C<r>").
   
  -=item VAR_ERR_OFFSET_LOGIC
   
  -The "end" offset in a ${name:o<start>,<end>} expression is smaller
  -than the "start" offset.
  +=item C<[>I<body>C<]>, C<[>I<body>C<]>C<{>I<start>C<,>I<step>C<,>I<end>C<}>
   
  -=item VAR_ERR_OFFSET_OUT_OF_BOUNDS
  +Repeat expansion of I<body> as long as at least one array variable
  +does not expand to the empty string (first variant) or exactly
  +(I<end>-I<start>)/I<step> times (second variant). In both cases the
  +character "C<#>" is expanded in C<body> as the current loop index
  +(C<0>,... for first variant and I<start>,...,I<end> with stepping
  +I<step> for second variant). I<index> of array variable lookups. For
  +I<start>, I<step> and I<end>, full arithmetic expressions are allowed.
   
  -The "start" offset in a ${name:o<start>,<end>} expression is greater
  -than the number of characters found in $name.
  +=back
   
  -=item VAR_ERR_RANGE_OUT_OF_BOUNDS
  +=head1 SYNTAX CONSTRUCTS (GRAMMAR)
   
  -The end-of-range in a ${name:o<start>,<end>} or ${name:o<start>-<end>}
  -expression would be greater than the number of characters found in
  -$name.
  +All the variable syntax constructs supported by B<OSSP var> follow the
  +same grammatical form. For completeness and reference reasons, the
  +corresponding grammar is given in an extended BNF:
  +
  + input       ::= ( TEXT
  +                 | variable 
  +                 | INDEX_OPEN input INDEX_CLOSE (loop_limits)?
  +                 )*
  +
  + variable    ::= DELIM_INIT (name|expression)
  +
  + name        ::= (NAME_CHARS)+
  +
  + expression  ::= DELIM_OPEN 
  +                 (name|variable)+
  +                 (INDEX_OPEN num_exp INDEX_CLOSE)? 
  +                 (':' command)*
  +                 DELIM_CLOSE
  +
  + command     ::= '-' (TEXT_EXP|variable)+
  +               | '+' (TEXT_EXP|variable)+
  +               | 'o' NUMBER ('-'|',') (NUMBER)?
  +               | '#'
  +               | '*' (TEXT_EXP|variable)+
  +               | 's' '/' (variable|TEXT_SUBST)+ 
  +                     '/' (variable|TEXT_SUBST)* 
  +                     '/' ('g'|'i'|'t')*
  +               | 'y' '/' (variable|TEXT_SUBST)+ 
  +                     '/' (variable|TEXT_SUBST)* 
  +                     '/'
  +               | 'p' '/' NUMBER 
  +                     '/' (variable|TEXT_SUBST)* 
  +                     '/' ('r'|'l'|'c')
  +               | 'l'
  +               | 'u'
  +
  + num_exp     ::= operand
  +               | operand ('+'|'-'|'*'|'/'|'%') num_exp
  +
  + operand     ::= ('+'|'-')? NUMBER
  +               | INDEX_MARK
  +               | '(' num_exp ')'
  +               | variable
  +
  + loop_limits ::= DELIM_OPEN 
  +                 (num_exp)? ',' (num_exp)? (',' (num_exp)?)? 
  +                 DELIM_CLOSE
  +
  + NUMBER      ::= ('0'|...|'9')+
  +
  + TEXT_SUBST  ::= ^(DELIM_INIT|'/')
  + TEXT_EXP    ::= (^(DELIM_INIT|DELIM_CLOSE|':'))+
  + TEXT        ::= (^(DELIM_INIT|INDEX_OPEN|INDEX_CLOSE))+
  +
  + DELIM_INIT  ::= '$'                    
  + DELIM_OPEN  ::= '{'   
  + DELIM_CLOSE ::= '}' 
  + INDEX_OPEN  ::= '['    
  + INDEX_CLOSE ::= ']'
  + INDEX_MARK  ::= '#'
  + NAME_CHARS  ::= 'a'|...|'z'|'A'|...|'Z'|'0'|...|'9'
  +
  +Notice that the grammar definitions of DELIM_INIT, DELIM_OPEN,
  +DELIM_CLOSE, INDEX_OPEN, INDEX_CLOSE, INDEX_MARK and NAME_CHARS
  +correspond to the default syntax configuration only. They can be changed
  +through the API (see B<var_syntax_t>).
   
  -=item VAR_ERR_INVALID_OFFSET_DELIMITER
  +=head1 APPLICATION PROGRAMMING INTERFACE (API)
   
  -The two numbers in an offset operation are delimited by a character
  -different from "," or "-".
  +The following is a detailed description of the B<OSSP var> B<ISO-C>
  +language Application Programming Interface (API):
   
  -=item VAR_ERR_MISSING_START_OFFSET
  +=head2 TYPES
   
  -The "start" offset in a ${name:o<start>,<end>} or
  -${name:o<start>-<end>} expression was found to be empty.
  +The B<OSSP var> API consists of the following B<ISO-C> data types:
   
  -=item VAR_ERR_EMPTY_SEARCH_STRING
  +=over 4
   
  -The "pattern" part of a ${name:s/pattern/replace/flags} expression was
  -found to be empty.
  +=item B<var_rc_t>
   
  -=item VAR_ERR_MISSING_PARAMETER_IN_COMMAND
  +This is an exported enumerated integer type describing the return
  +code of all API functions. On success, every API functions returns
  +C<VAR_OK>. On error, they return C<VAR_ERR_XXX>. For a list of all
  +possible return codes see F<var.h>. Their corresponding describing text
  +can be determined with var_strerror().
  +
  +=item B<var_t>
  +
  +This is an opaque data type representing a variable expansion context.
  +Only pointers to this abstract data type are used in the API.
  +
  +=item B<var_config_t>
  +
  +This is an exported enumerated integer type describing configuration
  +parameters for var_config(). Currently C<VAR_CONFIG_SYNTAX> (for
  +configuring the syntax via B<var_syntax_t>) and C<VAR_CONFIG_CB_VALUE>
  +(for configuring the callback for value lookups via B<var_cb_value_t>)
  +are defined.
  +
  +=item B<var_syntax_t>
  +
  +This is an exported structural data type describing the variable
  +construct syntax. It is passed to var_config() on C<VAR_CONFIG_SYNTAX>
  +and consists of the following members (directly corresponding to the
  +upper-case non-terminals in the grammar above):
  +
  + char  escape;       /* default: '\\' */
  + char  delim_init;   /* default: '$' */
  + char  delim_open;   /* default: '{' */
  + char  delim_close;  /* default: '}' */
  + char  index_open;   /* default: '[' */
  + char  index_close;  /* default: ']' */
  + char  index_mark;   /* default: '#' */
  + char *name_chars;   /* default: "a-zA-Z0-9_" */
  +
  +All members are single character constants, except for I<name_chars>
  +which is a character class listing all valid characters. As an
  +abbreviation the construct "I<x>C<->I<y>" is supported which means all
  +characters from I<x> to I<y> (both included) in the underlying character
  +set.
  +
  +=item B<var_cb_value_t>
  +
  +This is an exported function pointer type for variable value lookup
  +functions. Such a callback function B<cb> has to be of the following
  +prototype:
  +
  +var_rc_t *B<cb>(void *I<ctx>, const char *I<var_ptr>, size_t
  +I<var_len>, int I<var_idx>, const char **I<val_ptr>, size_t *I<val_len>,
  +size_t *I<val_size>);
   
  -In a ${name:+word}, ${name:-word}, or ${name:*word} expression, the
  -"word" part was missing -- that means empty.
  +This function will be called by var_expand() internally whenever it has
  +to resolve the contents of a variable. Its parameters are:
   
  -=item VAR_ERR_INVALID_REGEX_IN_REPLACE
  +=over 4
   
  -While compiling the "pattern" part of a
  -${name:s/pattern/replace/flags} expression, regcomp(3) failed with an
  -error.
  +=item void *I<ctx>
   
  -=item VAR_ERR_UNKNOWN_REPLACE_FLAG
  +This is the passed-through argument as passed to var_config() on
  +C<VAR_CONFIG_CB_VALUE> as the forth argument. This can be used
  +to provide an internal context to the callback function through
  +var_expand().
   
  -In a ${name:s/pattern/replace/flags} expression, a flag other that
  -"t", "i", or "g" was found.
  +=item const char *I<var_ptr>
   
  -=item VAR_ERR_MALFORMATTED_REPLACE
  +This is a pointer to the name of the variable which's contents
  +var_expand() wishes to resolve. Please note that the string is NOT
  +necessarily terminated by a C<NUL> ('C<\0>') character. If the callback
  +function needs it C<NUL>-terminated, it has to copy the string into an a
  +temporary buffer of its own and C<NUL>-terminate it there.
  +
  +=item size_t I<var_len>
  +
  +This is the length of the variable name at I<var_ptr>.
  +
  +=item int I<var_idx>
  +
  +This determines which entry of an array variable to lookup. If the
  +variable specification that led to the execution of the lookup function
  +did not contain an index, zero (C<0>) is provided by default as
  +I<var_idx>. If I<var_idx> is less than zero, the callback should return
  +the number of entries in the array variable. If I<var_idx> is greater or
  +equal zero, it should return the specified particular entry. It is up to
  +the callback to decide what to return for an index not equal to zero if
  +the underlying variable is a scalar.
   
  -Any of the "/" delimiters was missing while parsing a
  -${name:s/pattern/replace/flags} expression.
  +=item const char **I<val_ptr>
   
  -=item VAR_ERR_UNKNOWN_COMMAND_CHAR
  +This is a pointer to the location where the callback function should
  +store the pointer to the resolved value of the variable.
   
  -In a ${name:<char>} expression, "char" did not specify any of the
  -supported operations.
  +=item size_t *I<val_len>
   
  -=item VAR_ERR_INPUT_ISNT_TEXT_NOR_VARIABLE
  +This is a pointer to the location where the callback function should
  +store the length of the resolved value of the variable.
   
  -At one point during parsing of the input buffer, an expression was
  -found that was neither verbatim text nor a variable expression. This
  -usually is the result of a inconsistent configuration of var_expand()
  -via the var_config_t paramater.
  +=item size_t *I<val_size>
   
  -=item VAR_ERR_UNDEFINED_VARIABLE
  +This is a pointer to the location where the callback function should
  +store the size of the buffer that has been allocated to hold the
  +value of the resolved variable. 
   
  -Looking up a variable's contents failed and var_expand() was running
  -in "force expand" mode.
  +If no buffer has been allocated by the callback at all, because the
  +variable uses some other means of storing the contents -- as in the case
  +of getenv(3), where the system provides the buffer for the string --,
  +this should be set to zero (C<0>).
  +
  +In case a buffer size greater than zero is returned by the callback,
  +var_expand() will make use of that buffer internally if possible. It
  +will also free(3) the buffer when it is not needed anymore, so it
  +is important that it was previously allocated with malloc(3) by the
  +callback.
   
  -=item VAR_ERR_INCOMPLETE_VARIABLE_SPEC
  +=back
   
  -The input buffer ended in the middle of a ${name} expression, or the
  -configured variable initializer character was found to be the last
  -character of the input buffer.
  +The return code of the lookup function B<cb> is interpreted by
  +var_expand() according to the following convention: C<VAR_OK> means
  +success, that is, the contents of the variable has been resolved
  +successfully and the I<val_ptr>, I<val_len>, and I<val_size> variables
  +have been filled with appropriate values. A return code C<VAR_ERR_XXX>
  +means that the resolving failed, such as a system error or lack of
  +resources. In the latter two cases, the contents of I<val_ptr>,
  +I<val_len> and I<val_size> is assumed to be undefined. Hence,
  +var_expand() will not free(3) any possibly allocated buffers, the
  +callback must take care of this itself.
  +
  +If a callback returns the special C<VAR_ERR_UNDEFINED_VARIABLE> return
  +code, the behaviour of var_expand() depends on the setting of its
  +I<force_expand> parameter. If I<force_expand> has been set, var_expand()
  +will pass-through this error to the caller. If I<force_expand> has
  +not been set, var_expand() will copy the expression that caused the
  +lookup to fail verbatimly into the output buffer so that an additional
  +expanding pass may expand it later.
   
  -=item VAR_ERR_OUT_OF_MEMORY
  +If the callback returns an C<VAR_ERR_XXX>, var_expand() will fail with
  +this return code. If the cause for the error can not be denoted by an
  +error code defined in F<var.h>, callback implementors should use the
  +error code C<VAR_ERR_CALLBACK> (which is currently defined to -64).
  +It is guaranteed that no error code smaller than C<VAR_ERR_CALLBACK>
  +is ever used by any B<OSSP var> API function, so if the callback
  +implementor wishes to distinguish between different reasons for failure,
  +he subtract own callback return codes from this value, i.e., return
  +(C<VAR_ERR_CALLBACK> - I<n>) (I<n> E<gt>= 0) from the callback function.
   
  -var_expand() failed while malloc(3)ing internally needed buffers.
  +=back
   
  -=item VAR_ERR_INVALID_CONFIGURATION
  +=head2 FUNCTIONS
   
  -Any of the characters configured in the var_config_t structure as a
  -special ("varinit", "startdelim", "enddelim", and "escape") was found
  -to be a member of the "namechars" class.
  +The B<OSSP var> API consists of the following B<ISO-C> functions:
   
  -=item VAR_ERR_INCORRECT_CLASS_SPEC
  +=over 4
   
  -The character class specification "namechars" of the var_config_t
  -structure provided to var_expand was syntactically incorrect, that is,
  -the start-of-range was greater than end-of-range. (See also
  -VAR_ERR_INCORRECT_TRANSPOSE_CLASS_SPEC.)
  +=item var_rc_t B<var_create>(var_t **I<var>);
   
  -=item VAR_ERR_INCOMPLETE_GROUPED_HEX
  +Create a new variable expansion context and store it into I<var>.
   
  -var_unescape() encountered the end of the input buffer in the middle
  -of a grouped-hex "\x{...}" expression.
  +=item var_rc_t B<var_destroy>(var_t *I<var>);
   
  -=item VAR_ERR_INCOMPLETE_OCTAL
  +Destroy the variable expansion context I<var>.
   
  -var_unescape() encountered the end of the input buffer in the middle
  -of an octal "\000" expression.
  +=item var_rc_t B<var_config>(var_t *I<var>, var_config_t I<mode>, ...);
   
  -=item VAR_ERR_INVALID_OCTAL
  +Configure the variable expansion context I<var>. The variable argument
  +list depends on the I<mode> identifier:
   
  -The second of third digit of an octal "\000" expression was found not
  -be in the range of '0' to '7'.
  +=over 4
   
  -=item VAR_ERR_OCTAL_TOO_LARGE
  +=item C<VAR_CONFIG_SYNTAX>, var_syntax_t *I<syntax>
   
  -The value specified via an octal "\000" expression was larger than
  -0377.
  +This overrides the syntax configuration in I<var> with the one provided
  +in I<syntax>. The complete structure contents is copied, so the caller
  +is allowed to immediately destroy I<syntax> after the var_config() call.
  +The default is the contents as shown above under the type description of
  +B<var_syntax_t>.
  +
  +=item C<VAR_CONFIG_CB_VALUE>, var_cb_value_t I<cb>, void *I<ctx>
  +
  +This overrides the syntax configuration in I<var> with the one provided
  +The default is C<NULL> for I<cb> and I<ctx>. At least C<NULL> for I<cb>
  +is not valid for proper operation of var_expand(), so the caller has to
  +configure the callback before variable expansions can be successfully
  +performed.
   
  -=item VAR_ERR_INVALID_HEX
  +=back
   
  -Any of the digits of a hex "\x00" expression was found not be in the
  -range of '0' to '9' or 'a' to 'b'.
  +=item var_rc_t B<var_unescape>(var_t *I<var>, const char *I<src_ptr>, size_t I<src_len>, char *I<dst_ptr>, size_t  I<dst_len>, int I<all>);
   
  -=item VAR_ERR_INCOMPLETE_HEX
  +This expands escape sequences found in the input buffer
  +I<src_ptr>/I<src_len>. The I<dst_ptr>/I<dst_len> point to a output
  +buffer, into which the expanded data is copied if processing is
  +successful. The size of this buffer must be at least I<src_len>+1
  +characters. The reason is that var_unescape() always adds a terminating
  +C<NUL> ('C<\0>') character at the end of the output buffer, so that
  +you can use the result comfortably with other C library routines. The
  +supplied I<dst_ptr> either has to be point to a pre-allocated buffer or
  +is allowed to point to I<src_ptr> (because the unescaping operation is
  +guarrantied to either keep the size or reduce the size of the input).
  +
  +The parameter I<all> is a boolean flag that modifies the behavior
  +of var_unescape(). If is set to true (any value except zero),
  +var_unescape() will expand B<any> escape sequences it sees, even those that
  +it does not know about. This means that "C<\1>" will become "C<1>",
  +even though "C<\1>" has no special meaning to var_unescape(). If I<all>
  +is set to false (the value zero), such escape sequences will be copied
  +verbatimly to the output buffer.
  +
  +The quoted pairs supported by var_unescape() are "C<\t>" (tabulator),
  +"C<\r>" (carriage return), "C<\n>" (line feed), "C<\NNN>" (octal value),
  +"C<\xNN>" (hexadecimal value), and "C<\x{NNMM..}>" (grouped hexadecimal
  +values).
  +
  +=item var_rc_t B<var_expand>(var_t *I<var>, const char *I<src_ptr>, size_t I<src_len>, char **I<dst_ptr>, size_t *I<dst_len>, int I<force_expand>);
  +
  +This is the heart of B<OSSP var>. It expands all syntax constructs in
  +I<src_ptr>/I<src_len> and stores them in an allocated buffer returned
  +in I<dst_ptr>/I<dst_len>.
  +
  +The output buffer I<dst_ptr>/I<dst_len> is allocated by var_expand()
  +using the system call malloc(3), thus it is the caller's responsibility
  +to free(3) that buffer once it is no longer used anymore. The output
  +buffer for convinience reasons is always C<NUL>-terminated by
  +var_expand(), but this C<NUL> character is not counted for I<dst_len>.
  +The I<dst_len> pointer can be specified as C<NULL> if you are not
  +interested in the output buffer length.
  +
  +The I<force_expand> flag determines how var_expand() deals with
  +undefined variables (indicated by the callback function through the
  +return code C<VAR_ERR_UNDEFINED_VARIABLE>). If it is set to true
  +(any value except zero), var_expand() will fail with error code
  +C<VAR_ERR_UNDEFINED_VARIABLE> whenever an undefined variable is
  +encountered. That is, it just passes-through the return code of the
  +callback function. If set to false (value zero), var_expand() will copy
  +the expression it failed to expand verbatimly into the output buffer,
  +in order to enable you to go over the buffer with an additional pass.
  +Generally, if you do not plan to use muli-pass expansion, you should set
  +I<force_expand> to true in order to make sure no unexpanded variable
  +constructs are left over in the buffer.
  +
  +If var_expand() fails with an error, I<dst_ptr> will point to I<src_ptr>
  +and I<dst_len> will contain the number of characters that have been
  +consumed from I<src_ptr> before the error occured. In other words,
  +if an error occurs, I<dst_ptr>/I<dst_len> point to the last parsing
  +location in I<src_ptr>/I<src_len> before the error occured. The only
  +exceptions for this error semantics are: on C<VAR_ERR_INVALID_ARGUMENT>
  +and C<VAR_ERR_OUT_OF_MEMORY> errors, I<dst_ptr> and I<dst_len> are
  +undefined.
  +
  +=item var_rc_t B<var_strerror>(var_t *I<var>, var_rc_t I<rc>, char **I<str>);
  +
  +This can be used to map any B<var_rc_t> return codes (as returned by all
  +the B<OSSP var> API functions) into a clear-text message describing the
  +reason for failure in prose. Please note that errors coming from the
  +callback, such as C<VAR_ERR_CALLBACK> and those based on it, cannot be
  +mapped and will yield the message "C<unknown error>".
   
  -var_unescape() encountered the end of the input buffer in the middle
  -of a hex "\x00" expression.
  +=back
   
  -=item VAR_ERR_INCOMPLETE_NAMED_CHARACTER
  +=head2 VARIABLES
   
  -var_unescape() encountered the backslash ('\') as the last character
  -of the input buffer.
  +=over 4
   
  -=item VAR_ERR_ARRAY_LOOKUPS_ARE_UNSUPPORTED
  +=item B<var_id>
   
   =back
   
  -=head1 SO ALSO
  +=head1 COMBINING UNESCAPING AND EXPANSION
   
  -regex(7)
  +For maximum power and flexibility, you usually want to combine
  +var_unescape() and var_expand(). That is, you will want to use
  +var_unescape() to turn all escape sequences into their real
  +representation before you call var_expand() for expanding variable
  +constructs. This way the user can safely use specials like "C<\n>" or
  +"C<\t>" throughout the template and achieve the desired effect. These
  +escape sequences are particularly useful if search-and-replace or
  +transpose actions are performed on variables before they are expanded.
  +Be sure, though, to make the first var_unescape() pass with the I<all>
  +flag set to false, or the routine will also expand escape sequences like
  +"C<\1>", which might have a special meaning (regular expression
  +back-references) in the var_expand() pass to follow.
  +
  +Once, all known escape sequences are expanded, expand the variables
  +with var_expand(). After that, you will want to have a second pass
  +with var_unescape() and the flag I<all> set to true, to make sure all
  +remaining escape sequences are expanded. Also, the var_expand() pass
  +might have introduced now quoted pairs into the output text, which you
  +need to expand to get the desired effect.
  +
  +=head1 EXAMPLE
  +
  +The following simple but complete program illustrates the full usage
  +of B<OSSP var>. It accepts a single argument on the command line
  +and expands this in three steps (unescaping known escape sequences,
  +expanding variable constructs, unescaping new and unknown escape
  +sequences). The value lookup callback uses the process environment to
  +resolve variables.
  +
  + #include <stdio.h>
  + #include <stdlib.h>
  + #include <string.h>
  + 
  + #include "var.h"
  + 
  + static var_rc_t lookup(
  +     void *ctx,
  +     const char  *var_ptr, size_t  var_len, int     var_idx,
  +     const char **val_ptr, size_t *val_len, size_t *val_size)
  + {
  +     char tmp[256];
  + 
  +     if (var_idx != 0)
  +         return VAR_ERR_ARRAY_LOOKUPS_ARE_UNSUPPORTED;
  +     if (var_len > sizeof(tmp) - 1)
  +         return VAR_ERR_OUT_OF_MEMORY;
  +     memcpy(tmp, var_ptr, var_len);
  +     tmp[var_len] = '\0';
  +     if ((*val_ptr = getenv(tmp)) == NULL)
  +         return VAR_ERR_UNDEFINED_VARIABLE;
  +     *val_len = strlen(*val_ptr);
  +     *val_size = 0;
  +     return VAR_OK;
  + }
  + 
  + static void die(const char *context, var_t *var, var_rc_t rc)
  + {
  +     char *error;
  + 
  +     var_strerror(var, rc, &error);
  +     fprintf(stderr, "ERROR: %s: %s (%d)\n", context, error, rc);
  +     exit(1);
  + }
  + 
  + int main(int argc, char *argv[])
  + {
  +     var_t *var;
  +     var_rc_t rc;
  +     char *src_ptr;
  +     char *dst_ptr;
  +     size_t src_len;
  +     size_t dst_len;
  +     var_syntax_t syntax = { '\\', '$', '{', '}', '[', ']', '#', "a-zA-Z0-9_" };
  + 
  +     /* command line handling */
  +     if (argc != 2)
  +         die("command line", NULL, VAR_ERR_INVALID_ARGUMENT);
  +     src_ptr = argv[1];
  +     src_len = strlen(src_ptr);
  +     fprintf(stdout, "input:     \"%s\"\n", src_ptr);
  + 
  +     /* establish variable expansion context */
  +     if ((rc = var_create(&var)) != VAR_OK)
  +         die("create context", NULL, rc);
  +     if ((rc = var_config(var, VAR_CONFIG_SYNTAX, &syntax)) != VAR_OK)
  +         die("configure syntax", var, rc);
  +     if ((rc = var_config(var, VAR_CONFIG_CB_VALUE, lookup, NULL)) != VAR_OK)
  +         die("configure callback", var, rc);
  + 
  +     /* unescape known escape sequences (in place) */
  +     if ((rc = var_unescape(var, src_ptr, src_len, src_ptr, src_len+1, 0)) != VAR_OK)
  +         die("unescape known escape sequences", var, rc);
  +     src_len = strlen(src_ptr);
  +     fprintf(stdout, "unescaped: \"%s\"\n", src_ptr);
  + 
  +     /* expand variable constructs (force expansion) */
  +     if ((rc = var_expand(var, src_ptr, src_len, &dst_ptr, &dst_len, 1)) != VAR_OK) {
  +         if (rc != VAR_ERR_INVALID_ARGUMENT && rc != VAR_ERR_OUT_OF_MEMORY) {
  +             fprintf(stdout, "parsing:   \"%s\"\n", dst_ptr); 
  +             fprintf(stdout, "             %*s\n", dst_len, "^"); 
  +         }
  +         die("variable expansion", var, rc);
  +     }
  +     fprintf(stdout, "expanded:  \"%s\"\n", dst_ptr);
  + 
  +     /* unescape new and unknown escape sequences (in place) */
  +     if ((rc = var_unescape(var, dst_ptr, dst_len, dst_ptr, dst_len+1, 1)) != VAR_OK)
  +         die("unescape new and unknown escape sequences", var, rc);
  +     fprintf(stdout, "output:    \"%s\"\n", dst_ptr);
  +     free(dst_ptr);
  + 
  +     /* destroy variable expansion context */
  +     if ((rc = var_destroy(var)) != VAR_OK)
  +         die("destroy context", var, rc);
  + 
  +     return 0;
  + }
  +
  +Copy & paste the source code it into F<var_play.c> (or use the version
  +already shipped with the B<OSSP var> source distribution), compile it
  +with
  +
  + $ cc `var-config --cflags` -o var_play var_play.c `var-config --ldflags --libs`
  +
  +and use it to play with the various B<OSSP var> variable expansion
  +possibilities.
  +
  +=head1 SEE ALSO
  +
  +pcre(3), regex(7), B<OSSP val> (Value Access).
  +
  +=head1 HISTORY
  +
  +B<OSSP var> was written by Peter Simons E<lt>simons@crypt.toE<gt> in
  +November 2001. Its API and internal code structure was revamped in
  +February 2002 by Ralf S. Engelschall E<lt>rse@engelschall.comE<gt> to
  +fully conform to the B<OSSP> library standards.
   
   =cut
  +
  Index: ossp-pkg/var/var_play.c
  ============================================================
  $ cvs update -p -r1.1 var_play.c
  
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  
  #include "var.h"
  
  static var_rc_t lookup(
      void *ctx,
      const char  *var_ptr, size_t  var_len, int     var_idx,
      const char **val_ptr, size_t *val_len, size_t *val_size)
  {
      char tmp[256];
  
      if (var_idx != 0)
          return VAR_ERR_ARRAY_LOOKUPS_ARE_UNSUPPORTED;
      if (var_len > sizeof(tmp) - 1)
          return VAR_ERR_OUT_OF_MEMORY;
      memcpy(tmp, var_ptr, var_len);
      tmp[var_len] = '\0';
      if ((*val_ptr = getenv(tmp)) == NULL)
          return VAR_ERR_UNDEFINED_VARIABLE;
      *val_len = strlen(*val_ptr);
      *val_size = 0;
      return VAR_OK;
  }
  
  static void die(const char *context, var_t *var, var_rc_t rc)
  {
      char *error;
  
      var_strerror(var, rc, &error);
      fprintf(stderr, "ERROR: %s: %s (%d)\n", context, error, rc);
      exit(1);
  }
  
  int main(int argc, char *argv[])
  {
      var_t *var;
      var_rc_t rc;
      char *src_ptr;
      char *dst_ptr;
      size_t src_len;
      size_t dst_len;
      var_syntax_t syntax = { '\\', '$', '{', '}', '[', ']', '#', "a-zA-Z0-9_" };
  
      /* command line handling */
      if (argc != 2)
          die("command line", NULL, VAR_ERR_INVALID_ARGUMENT);
      src_ptr = argv[1];
      src_len = strlen(src_ptr);
      fprintf(stdout, "input:     \"%s\"\n", src_ptr);
  
      /* establish variable expansion context */
      if ((rc = var_create(&var)) != VAR_OK)
          die("create context", NULL, rc);
      if ((rc = var_config(var, VAR_CONFIG_SYNTAX, &syntax)) != VAR_OK)
          die("configure syntax", var, rc);
      if ((rc = var_config(var, VAR_CONFIG_CB_VALUE, lookup, NULL)) != VAR_OK)
          die("configure callback", var, rc);
  
      /* unescape known escape sequences (in place) */
      if ((rc = var_unescape(var, src_ptr, src_len, src_ptr, src_len+1, 0)) != VAR_OK)
          die("unescape known escape sequences", var, rc);
      src_len = strlen(src_ptr);
      fprintf(stdout, "unescaped: \"%s\"\n", src_ptr);
  
      /* expand variable constructs (force expansion) */
      if ((rc = var_expand(var, src_ptr, src_len, &dst_ptr, &dst_len, 1)) != VAR_OK) {
          if (rc != VAR_ERR_INVALID_ARGUMENT && rc != VAR_ERR_OUT_OF_MEMORY) {
              fprintf(stdout, "parsing:   \"%s\"\n", dst_ptr); 
              fprintf(stdout, "             %*s\n", dst_len, "^"); 
          }
          die("variable expansion", var, rc);
      }
      fprintf(stdout, "expanded:  \"%s\"\n", dst_ptr);
  
      /* unescape new and unknown escape sequences (in place) */
      if ((rc = var_unescape(var, dst_ptr, dst_len, dst_ptr, dst_len+1, 1)) != VAR_OK)
          die("unescape new and unknown escape sequences", var, rc);
      fprintf(stdout, "output:    \"%s\"\n", dst_ptr);
      free(dst_ptr);
  
      /* destroy variable expansion context */
      if ((rc = var_destroy(var)) != VAR_OK)
          die("destroy context", var, rc);
  
      return 0;
  }
  
    Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.33 -r1.34 var_test.c
  --- ossp-pkg/var/var_test.c	27 Feb 2002 13:44:16 -0000	1.33
  +++ ossp-pkg/var/var_test.c	28 Feb 2002 08:08:16 -0000	1.34
  @@ -205,26 +205,38 @@
       var_rc_t rc;
       size_t i;
       char buffer[1024];
  +    var_t *var;
  +    char *err;
   
  -    for (i = 0; i < sizeof(tests) / sizeof(struct test_case); ++i) {
  +    if ((rc = var_create(&var)) != VAR_OK) {
  +        var_strerror(NULL, rc, &err);
  +        printf("unable to create variable expansion context: %s (%d)\n", err, rc);
  +        return 1;
  +    }
  +    if ((rc = var_config(var, VAR_CONFIG_CB_VALUE, var_lookup, vars)) != VAR_OK) {
  +        var_strerror(NULL, rc, &err);
  +        printf("unable to configure variable expansion context: %s (%d)\n", err, rc);
  +        return 1;
  +    }
  +
  +    for (i = 0; i < sizeof(tests)/sizeof(struct test_case); ++i) {
   #ifdef DEBUG
           printf("Test case #%02d: Original input is '%s'.\n", i,
                  tests[i].input);
   #endif
  -        rc = var_unescape(tests[i].input, strlen(tests[i].input), buffer, 0);
  +        rc = var_unescape(var, tests[i].input, strlen(tests[i].input), buffer, sizeof(buffer), 0);
           if (rc != VAR_OK) {
  -            printf ("Test case #%d: First var_unescape() failed with return code %d ('%s').\n",
  -                    i, rc, var_strerror(rc));
  +            var_strerror(var, rc, &err);
  +            printf("Test case #%d: var_unescape() failed: %s (%d)\n", i, err, rc);
               return 1;
           }
   #ifdef DEBUG
           printf("Test case #%02d: Unescaped input is '%s'.\n", i, buffer);
   #endif
  -        rc = var_expand(buffer, strlen(buffer), &tmp, &tmp_len,
  -            &var_lookup, (void *)vars, NULL, 0);
  +        rc = var_expand(var, buffer, strlen(buffer), &tmp, &tmp_len, 0);
           if (rc != VAR_OK) {
  -            printf ("Test case #%d: var_expand() failed with return code %d ('%s').\n",
  -                    i, rc, var_strerror(rc));
  +            var_strerror(var, rc, &err);
  +            printf("Test case #%d: var_expand() failed: %s (%d).\n", i, err, rc);
               return 1;
           }
   #ifdef DEBUG
  @@ -234,11 +246,12 @@
               || tmp == NULL
               || memcmp(tests[i].expected, tmp, tmp_len) != 0) {
               printf("Test case #%d: Expected result '%s' but got '%s'.\n",
  -                i, tests[i].expected, tmp);
  +                   i, tests[i].expected, tmp);
               return 1;
           }
           free(tmp);
       }
  +    var_destroy(var);
       return 0;
   }
   

From ossp-cvs-owner@ossp.org  Thu Feb 28 09:48:45 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B020E7642F; Thu, 28 Feb 2002 09:48:45 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var AUTHORS INSTALL Makefile.in README TODO acloc...
Message-Id: <20020228084845.B020E7642F@mail.ossp.org>
Date: Thu, 28 Feb 2002 09:48:45 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   28-Feb-2002 09:48:45
  Branch: HEAD                             Handle: 2002022808484400

  Added files:
    ossp-pkg/var            AUTHORS INSTALL README
  Modified files:
    ossp-pkg/var            Makefile.in TODO aclocal.m4 configure.ac
                            devtool.conf var-config.in var-config.pod var.c
                            var.h var.pod var_test.c

  Log:
    URL fixing and additional documents

  Summary:
    Revision    Changes     Path
    1.1         +9  -0      ossp-pkg/var/AUTHORS
    1.1         +17 -0      ossp-pkg/var/INSTALL
    1.6         +1  -1      ossp-pkg/var/Makefile.in
    1.1         +59 -0      ossp-pkg/var/README
    1.14        +0  -1      ossp-pkg/var/TODO
    1.3         +1  -1      ossp-pkg/var/aclocal.m4
    1.7         +1  -1      ossp-pkg/var/configure.ac
    1.2         +4  -1      ossp-pkg/var/devtool.conf
    1.4         +1  -1      ossp-pkg/var/var-config.in
    1.4         +1  -1      ossp-pkg/var/var-config.pod
    1.63        +1  -1      ossp-pkg/var/var.c
    1.25        +1  -1      ossp-pkg/var/var.h
    1.22        +1  -1      ossp-pkg/var/var.pod
    1.35        +1  -1      ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/AUTHORS
  ============================================================
  $ cvs update -p -r1.1 AUTHORS
  
    AUTHORS
  
    This is a list of authors who have written
    or edited major parts of the OSSP var sources.
  
    Ralf S. Engelschall   <rse@engelschall.com>
    Peter Simons          <simons@cryp.to>
  
  Index: ossp-pkg/var/INSTALL
  ============================================================
  $ cvs update -p -r1.1 INSTALL
    __   ____ _ _ __ 
    \ \ / / _` | '__|
     \ V / (_| | |   
      \_/ \__,_|_|   
  
    OSSP var - Variable Expansion
  
    INSTALLATION
  
    To install OSSP var into /path/to/var/ perform
    the following steps in your shell:
        
      $ ./configure --prefix=/path/to/var
      $ make
      $ make check
      $ make install
  
  Index: ossp-pkg/var/Makefile.in
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 Makefile.in
  --- ossp-pkg/var/Makefile.in	28 Feb 2002 08:08:16 -0000	1.5
  +++ ossp-pkg/var/Makefile.in	28 Feb 2002 08:48:44 -0000	1.6
  @@ -4,7 +4,7 @@
   ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
   ##  This file is part of OSSP var, a variable expansion
  -##  library which can be found at http://www.ossp.org/pkg/var/.
  +##  library which can be found at http://www.ossp.org/pkg/lib/var/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/var/README
  ============================================================
  $ cvs update -p -r1.1 README
    __   ____ _ _ __ 
    \ \ / / _` | '__|
     \ V / (_| | |   
      \_/ \__,_|_|   
  
    OSSP var - Variable Expansion
    Version 0.9.0 (28-Feb-2002)
  
    ABSTRACT
  
    OSSP var is a flexible, full-featured and fast variable construct
    expansion library. It supports a configurable variable construct
    syntax very similar to the style found in many scripting languages
    (like @name, ${name}, $(name), etc.) and provides both simple scalar
    (${name}) and array (${name[index]}) expansion, plus optionally one or
    more post-operations on the expanded value (${name:op:op...}).
  
    The supported post-operations are length determination, case
    conversion, defaults, postive and negative alternatives, sub-strings,
    regular expression based substitutions, character translations, and
    padding. Additionally, a meta-construct plus arithmetic expressions
    for index and range calculations allow (even nested) iterations
    over array variable expansions (..[..${name[#+1]}..]..). The actual
    variable value lookup is performed through a callback function, so
    B<OSSP var> can expand arbitrary values.
  
    COPYRIGHT AND LICENSE
  
    Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
    Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  
    This file is part of OSSP var, a variable expansion
    library which can be found at http://www.ossp.org/pkg/lib/var/.
  
    Permission to use, copy, modify, and distribute this software for
    any purpose with or without fee is hereby granted, provided that
    the above copyright notice and this permission notice appear in all
    copies.
  
    THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
    WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
    IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
    CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
    USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    SUCH DAMAGE.
  
    HOME AND DOCUMENTATION
  
    The documentation and latest release can be found on
  
    o http://www.ossp.org/pkg/lib/var/
    o  ftp://ftp.ossp.org/pkg/lib/var/
  
  Index: ossp-pkg/var/TODO
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 TODO
  --- ossp-pkg/var/TODO	28 Feb 2002 08:08:16 -0000	1.13
  +++ ossp-pkg/var/TODO	28 Feb 2002 08:48:44 -0000	1.14
  @@ -1,6 +1,5 @@
                                  OSSP var
   
  - o add README
    o generate internals into context
    o use internal context to carry information
    o document exception handling
  Index: ossp-pkg/var/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 aclocal.m4
  --- ossp-pkg/var/aclocal.m4	27 Feb 2002 13:44:16 -0000	1.2
  +++ ossp-pkg/var/aclocal.m4	28 Feb 2002 08:48:44 -0000	1.3
  @@ -4,7 +4,7 @@
   dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP var, a variable expansion
  -dnl ##  which can be found at http://www.ossp.org/pkg/var/.
  +dnl ##  which can be found at http://www.ossp.org/pkg/lib/var/.
   dnl ##
   dnl ##  Permission to use, copy, modify, and distribute this software for
   dnl ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/var/configure.ac
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 configure.ac
  --- ossp-pkg/var/configure.ac	27 Feb 2002 13:44:16 -0000	1.6
  +++ ossp-pkg/var/configure.ac	28 Feb 2002 08:48:44 -0000	1.7
  @@ -4,7 +4,7 @@
   dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   dnl ##
   dnl ##  This file is part of OSSP var, a variable expansion
  -dnl ##  library which can be found at http://www.ossp.org/pkg/var/.
  +dnl ##  library which can be found at http://www.ossp.org/pkg/lib/var/.
   dnl ##
   dnl ##  Permission to use, copy, modify, and distribute this software for
   dnl ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/var/devtool.conf
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.conf
  --- ossp-pkg/var/devtool.conf	20 Nov 2001 20:02:21 -0000	1.1
  +++ ossp-pkg/var/devtool.conf	28 Feb 2002 08:48:44 -0000	1.2
  @@ -3,7 +3,7 @@
   ##
   
   %autogen
  -    @autogen shtool   1.5.4 "1.5.*" all
  +    @autogen shtool   1.6.0 "1.[56].*" all
       @autogen libtool  1.4.2 "1.4*"
       @autogen autoconf 2.52  "2.5.*"
   
  @@ -22,6 +22,9 @@
   
   %version
       ./shtool version -l txt -n "OSSP VAR" -p "var_" -e VERSION
  +    V=`./shtool version -l txt -d long VERSION`
  +    sed -e "s/Version .*(.*)/Version $V/g" <README >README.n 
  +    mv README.n README
   
   %dist
       make distclean >/dev/null 2>&1
  Index: ossp-pkg/var/var-config.in
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 var-config.in
  --- ossp-pkg/var/var-config.in	27 Feb 2002 13:44:16 -0000	1.3
  +++ ossp-pkg/var/var-config.in	28 Feb 2002 08:48:44 -0000	1.4
  @@ -5,7 +5,7 @@
   ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
   ##  This file is part of OSSP var, a variable expansion
  -##  library which can be found at http://www.ossp.org/pkg/var/.
  +##  library which can be found at http://www.ossp.org/pkg/lib/var/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/var/var-config.pod
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 var-config.pod
  --- ossp-pkg/var/var-config.pod	27 Feb 2002 13:44:16 -0000	1.3
  +++ ossp-pkg/var/var-config.pod	28 Feb 2002 08:48:44 -0000	1.4
  @@ -4,7 +4,7 @@
   ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
   ##  This file is part of OSSP var, a variable expansion
  -##  library which can be found at http://www.ossp.org/pkg/var/.
  +##  library which can be found at http://www.ossp.org/pkg/lib/var/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.62 -r1.63 var.c
  --- ossp-pkg/var/var.c	28 Feb 2002 08:08:16 -0000	1.62
  +++ ossp-pkg/var/var.c	28 Feb 2002 08:48:44 -0000	1.63
  @@ -4,7 +4,7 @@
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP var, a variable expansion
  -**  library which can be found at http://www.ossp.org/pkg/var/.
  +**  library which can be found at http://www.ossp.org/pkg/lib/var/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/var/var.h
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 var.h
  --- ossp-pkg/var/var.h	28 Feb 2002 08:08:16 -0000	1.24
  +++ ossp-pkg/var/var.h	28 Feb 2002 08:48:44 -0000	1.25
  @@ -4,7 +4,7 @@
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP var, a variable expansion
  -**  library which can be found at http://www.ossp.org/pkg/var/.
  +**  library which can be found at http://www.ossp.org/pkg/lib/var/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/var/var.pod
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 var.pod
  --- ossp-pkg/var/var.pod	28 Feb 2002 08:08:16 -0000	1.21
  +++ ossp-pkg/var/var.pod	28 Feb 2002 08:48:44 -0000	1.22
  @@ -4,7 +4,7 @@
   ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
   ##  This file is part of OSSP VAR, an extensible data serialization
  -##  library which can be found at http://www.ossp.org/pkg/var/.
  +##  library which can be found at http://www.ossp.org/pkg/lib/var/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.34 -r1.35 var_test.c
  --- ossp-pkg/var/var_test.c	28 Feb 2002 08:08:16 -0000	1.34
  +++ ossp-pkg/var/var_test.c	28 Feb 2002 08:48:44 -0000	1.35
  @@ -4,7 +4,7 @@
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP var, a variable expansion
  -**  library which can be found at http://www.ossp.org/pkg/var/.
  +**  library which can be found at http://www.ossp.org/pkg/lib/var/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that

From ossp-cvs-owner@ossp.org  Thu Feb 28 10:29:49 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 08A767642F; Thu, 28 Feb 2002 10:29:49 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c var_test.c
Message-Id: <20020228092949.08A767642F@mail.ossp.org>
Date: Thu, 28 Feb 2002 10:29:49 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   28-Feb-2002 10:29:48
  Branch: HEAD                             Handle: 2002022809294800

  Modified files:
    ossp-pkg/var            var.c var_test.c

  Log:
    Try to solve the expansion problem with invalid name characters we
    encountered in OSSP lmtp2nntp if we expand in two passed with different
    name character sets. We want that the variable constructs which are
    not valid in the first pass to be correctly kept (assuming deactivated
    force_expand!) instead of an error produced.
    
    According to Peter Simons, this might be not the correct solution,
    although THL and RSE are sure it is, because we tried it in detail and
    it seems to be correct. Nevertheless Peter's comment (in german) for
    reference:
    
    | Ich weiß nicht, ob das unbedingt eine gute Idee ist? Der Fehler
    | "incomplete variable spec" wird immer dann ausgelöst, wenn innerhalb
    | der "${...}"-Umgebung ein Zeichen auftritt, das dort nicht sein
    | dürfte. Einmal kommt das natürlich vor, wenn die gültigen Zeichen für
    | Variablen von Pass 1 zu Pass 2 verschieden sind ... Aber eine andere
    | Ursache kann auch sein, daß beispielsweise die schließende "}"-Klammer
    | fehlt.
    |
    | IMHO ist die Tatsache, daß libvar an dieser Stelle einen Fehler
    | liefert kein Softwarefehler, sondern liegt in der Natur der Sache. Die
    | "richtige" Lösung für das Problem wäre meiner Meinung nach, in beiden
    | Pässen die Vereinigung beider Zeichenmengen zuzulassen und dann im
    | jeweiligen Callback zu testen, ob der Variablenname richtig war oder
    | nicht.
    |
    | Genaugenommen sollte man ohnehin überlegen, ob es nicht günstiger
    | wäre, mit _einem_ Callback das ganze in einem Pass zu parsen, und
    | diesen dann einfach zwischen Callback A und B entscheiden zu lassen,
    | um die tatsächliche Auflösung durchzuführen.

  Summary:
    Revision    Changes     Path
    1.64        +16 -2      ossp-pkg/var/var.c
    1.36        +1  -0      ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.63 -r1.64 var.c
  --- ossp-pkg/var/var.c	28 Feb 2002 08:48:44 -0000	1.63
  +++ ossp-pkg/var/var.c	28 Feb 2002 09:29:48 -0000	1.64
  @@ -653,8 +653,21 @@
          do. */
   
       if (name.begin == name.end) {
  -        rc = VAR_ERR_INCOMPLETE_VARIABLE_SPEC;
  -        goto error_return;
  +        if (force_expand) {
  +            rc = VAR_ERR_INCOMPLETE_VARIABLE_SPEC;
  +            goto error_return;
  +        }
  +        else {
  +            /* If no force_expand is requested, we have to back-off.
  +               We're not sure whether our approach here is 100% correct,
  +               because it _could_ have side-effects according to Peter
  +               Simons, but as far as we know and tried it, it is
  +               correct. But be warned -- RSE */
  +            result->begin = begin - 1;
  +            result->end = p;
  +            result->buffer_size = 0;
  +            goto goahead;
  +        }
       }
   
       /* If the next token is START-INDEX, read the index specification. */
  @@ -725,6 +738,7 @@
           }
       }
   
  +    goahead:
       if (p[-1] == ':') {
           /* Parse and execute commands. */
   
  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.35 -r1.36 var_test.c
  --- ossp-pkg/var/var_test.c	28 Feb 2002 08:48:44 -0000	1.35
  +++ ossp-pkg/var/var_test.c	28 Feb 2002 09:29:48 -0000	1.36
  @@ -111,6 +111,7 @@
           };
   
       const struct test_case tests[] = {
  +        { "${HOME}${!!}",                 "/home/regression-tests${!!}"                    },
           { "$HOME",                        "/home/regression-tests"                         },
           { "${FOO}",                       "os"                                             },
           { "${BAR}",                       "type"                                           },

From ossp-cvs-owner@ossp.org  Thu Feb 28 12:08:28 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E06BF7642F; Thu, 28 Feb 2002 12:08:27 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var TODO
Message-Id: <20020228110827.E06BF7642F@mail.ossp.org>
Date: Thu, 28 Feb 2002 12:08:27 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   28-Feb-2002 12:08:27
  Branch: HEAD                             Handle: 2002022811082700

  Modified files:
    ossp-pkg/var            TODO

  Log:
    another bug

  Summary:
    Revision    Changes     Path
    1.15        +8  -1      ossp-pkg/var/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/var/TODO
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 TODO
  --- ossp-pkg/var/TODO	28 Feb 2002 08:48:44 -0000	1.14
  +++ ossp-pkg/var/TODO	28 Feb 2002 11:08:27 -0000	1.15
  @@ -1,10 +1,17 @@
                                  OSSP var
   
  + o problem:
  +   ${foo:s/^(.+)$/<\1>/} 
  +   -> fails with malformatted search & replace error because
  +      it tries to parse the $ as a variable.
  +   ${foo:s/^(.+)\$/<\1>/} 
  +   -> does not substitute because it leaves the \$ in the regex
  +      and this no longer matches the end (instead it matches a dollar)
  +
    o generate internals into context
    o use internal context to carry information
    o document exception handling
    o document arithmetic expressions
  - o document loop construct
   
    ---------------------------------------------------------------------
    - Man braucht ein Schleifenkonstrukt, das über Arrays iteriert:

From ossp-cvs-owner@ossp.org  Thu Feb 28 12:08:58 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9EA5076436; Thu, 28 Feb 2002 12:08:58 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Message-Id: <20020228110858.9EA5076436@mail.ossp.org>
Date: Thu, 28 Feb 2002 12:08:58 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   28-Feb-2002 12:08:58
  Branch: HEAD                             Handle: 2002022811085800

  Modified files:
    ossp-pkg/var            var.c

  Log:
    typo

  Summary:
    Revision    Changes     Path
    1.65        +1  -1      ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.64 -r1.65 var.c
  --- ossp-pkg/var/var.c	28 Feb 2002 09:29:48 -0000	1.64
  +++ ossp-pkg/var/var.c	28 Feb 2002 11:08:58 -0000	1.65
  @@ -2188,7 +2188,7 @@
           "undefined variable",                                                   /* VAR_ERR_UNDEFINED_VARIABLE */
           "input is neither text nor variable",                                   /* VAR_ERR_INPUT_ISNT_TEXT_NOR_VARIABLE */
           "unknown command character in variable",                                /* VAR_ERR_UNKNOWN_COMMAND_CHAR */
  -        "malformated search and replace operation",                             /* VAR_ERR_MALFORMATTED_REPLACE */
  +        "malformatted search and replace operation",                            /* VAR_ERR_MALFORMATTED_REPLACE */
           "unknown flag in search and replace operation",                         /* VAR_ERR_UNKNOWN_REPLACE_FLAG */
           "invalid regular expression in search and replace operation",           /* VAR_ERR_INVALID_REGEX_IN_REPLACE */
           "missing parameter in command",                                         /* VAR_ERR_MISSING_PARAMETER_IN_COMMAND */

From ossp-cvs-owner@ossp.org  Thu Feb 28 12:15:38 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BF4C07642F; Thu, 28 Feb 2002 12:15:38 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var TODO
Message-Id: <20020228111538.BF4C07642F@mail.ossp.org>
Date: Thu, 28 Feb 2002 12:15:38 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   28-Feb-2002 12:15:38
  Branch: HEAD                             Handle: 2002022811153800

  Modified files:
    ossp-pkg/var            TODO

  Log:
    one more

  Summary:
    Revision    Changes     Path
    1.16        +7  -0      ossp-pkg/var/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/var/TODO
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 TODO
  --- ossp-pkg/var/TODO	28 Feb 2002 11:08:27 -0000	1.15
  +++ ossp-pkg/var/TODO	28 Feb 2002 11:15:38 -0000	1.16
  @@ -8,6 +8,13 @@
      -> does not substitute because it leaves the \$ in the regex
         and this no longer matches the end (instead it matches a dollar)
   
  + o "problem"!?:
  +   ${unknown:-foo} fails on force_expand and results
  +   in no expansion (kept as is) if not forced_expand.
  +   It only does the expected if the callback returns
  +   empty strings for undefined variables. This is certainly
  +   intended this way, but has to be documented better?
  +
    o generate internals into context
    o use internal context to carry information
    o document exception handling

From ossp-cvs-owner@ossp.org  Thu Feb 28 12:40:47 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 638DF7642F; Thu, 28 Feb 2002 12:40:47 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var TODO var.pod
Message-Id: <20020228114047.638DF7642F@mail.ossp.org>
Date: Thu, 28 Feb 2002 12:40:47 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   28-Feb-2002 12:40:47
  Branch: HEAD                             Handle: 2002022811404600

  Modified files:
    ossp-pkg/var            TODO var.pod

  Log:
    more docs, less TODO

  Summary:
    Revision    Changes     Path
    1.17        +2  -130    ossp-pkg/var/TODO
    1.23        +34 -1      ossp-pkg/var/var.pod
  ____________________________________________________________________________

  Index: ossp-pkg/var/TODO
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 TODO
  --- ossp-pkg/var/TODO	28 Feb 2002 11:15:38 -0000	1.16
  +++ ossp-pkg/var/TODO	28 Feb 2002 11:40:46 -0000	1.17
  @@ -16,141 +16,13 @@
      intended this way, but has to be documented better?
   
    o generate internals into context
  - o use internal context to carry information
  - o document exception handling
  - o document arithmetic expressions
  -
  - ---------------------------------------------------------------------
  - - Man braucht ein Schleifenkonstrukt, das über Arrays iteriert:
  -       [${foo}${bar}]
  -   Dies wird so interpretiert, daß der Parser an den Variablennamen
  -   den jeweiligen Index anhängt, und die ganze Zeile expandiert,
  -   solange, bis _alle_ in dem Konstrukt verwandten Variablen für den
  -   derzeitigen Index undefiniert sind -- sind nur einzelne Variablen
  -   undefiniert, werden sie durch den Leerstring "" ersetzt. Text
  -   innerhalb des Konstrukten wird "verbatim" in jeder Zeile erhalten,
  -   beispielsweise:
  -        [${foo}: ${bar}\n]
  -   Hierzu muß var_expand() wissen, wie sie einen indizierten
  -   Variablenzugriff erzeugen kann. Hierzu wird var_config_t um
  -   "char startindex" und "char endindex" erweitert. Weiterhin wird in
  -   var_config_t "char current_index" ein Zeichen konfiguriert, unter
  -   dem der aktuelle Index der Schleife zu bekommen ist. Defaults
  -   werden sein: "[", "]" und "#" respektive.
  -   Wenn Variablen innerhalb des Konstruktes bereits einen Index haben,
  -   wird dieser (unter Beachtung eventuell notwendiger Arithmetik)
  -   berechnet und "fest" verwendet, zum Beispiel:
  -       [${foo[1]}]
  -   oder
  -       [${foo[(#+1)/2]}]
  -   Dementsprechend sind die folgenden Ausdrück equivalent:
  -       [${foo[#]}] == [${foo}]
  -   Wir unterstützen die vier Grundrechenarten, Modulo und Klammerung
  -   für arithmetische Operationen.
  -   Weiterhin wird der Callback um einen Parameter "int index"
  -   erweitert, welchen im Falle eines "normalen Variablenzugriffs" auf
  -   Null gesetzt wird. Zugriffe auf Indices, die nicht existieren,
  -   müssen vom Callback mit "UNDEFINED" quittiert werden. Ein Zugriff
  -   auf einen negativen Index liefert die Anzahl der Elemente in dem
  -   Array als String zurück. Ebenso liefert das Konstrukt ${foo:#} die
  -   Anzahl der Elemente zurück, wenn $foo ein Array ist.
  -   [...]-Konstrukte können beliebig tief geschachtelt werden.
  -   Innerhalb von Indixangaben dürfen erneut Variablen verwendet
  -   werden.
  -   Arrays werden nur in "expressions" erkannt, und im Konstrukt werden
  -   auch nur "expressions" gesondert behandelt; normale Variablen
  -   werden in jedem Pass normal expandiert.
  -   Sind "stardindex", "endindex" oder "current_index" leer (gleich
  -   '\0'), wird dieses Konstrukt vom Parser nicht erkannt und als Text
  -   interpretiert -- abgesehen von den Variablen, natürlich, welche
  -   aber nicht in einer Schleife expandiert werden, noch werden beim
  -   Callback Array-Elemente abgefragt.
  -
  - **** CLARIFICATION ****
  -
  -    <            [ $HOME ${ARRAY} ] 
  -    is same as > [ $HOME ${ARRAY[0]} ] 
  -    must use   > [ $HOME ${ARRAY[#]} ]
  -
  -    Correction to termination condition: we loop unless all ARRAYs containing
  -    '#' somewhere in the index expression return undefined. Any array using an
  -    constant index and scalar variables are ignored when evaluating the
  -    termination condition. Additionally we need support for explicit indexing,
  -    ranges and stepping using the following "regex-style" quantifiers:
  -
  -                 [ ... body ... ]{begin,step,end}
  -                 [ ... body ... ]{begin,end}
  -
  -                 begin, step and end can be digits or arithmetic expressions
  -                 using variables (exactly like the index expressions) or empty
  -                 string with default for the empty string
  -                 - begin = 0
  -                 - step  = 1
  -                 - end   = maximum of all $#{anyvar} where  ${anyvar[...#...]}
  -                           occurs in body.
  -
  -                 {,,} is same as {0,end} and can be omitted.
  -
  -    <            ${ARRAY:s/foo/bar:#}
  -    is same as > ${ARRAY[0]:s/foo/bar/:#}
  -    
  -    This means that operation has nothing to do with arrays but works on
  -    scalars.
   
  -    Correction to index variable from var_cb_t: this is a signed integer and
  -    allows negative, zero and positive indexes. It's up to the lookup callback
  -    to decide what is undefined. Some callbacks may support negative indices
  -    to support indexing from the end backwards through the array.
  -
  -    This means negative numbers can not be used as the magic identifier for
  -    "gimme the number of elements for this variable".
  -    
  -    The callback needs another input, enum { VAR_LOOKUP_VALUE,
  -    VAR_LOOKUP_ELEMENTS, ... } var_lookup_t which tells the callback what to
  -    look up. Initially, only these modes are supported but we have room for
  -    future expansion here.
  -
  -    The syntax change to adopt these changes is: $#{foo} returns the number of
  -    elements in foo while ${foo:#} returns the number of characters in the
  -    expanded value of foo. This keeps :# an command and makes ${foo} executing
  -    callback with VAR_LOOKUP_VALUE and $#{foo} executing callback with
  -    VAR_LOOKUP_ELEMENTS. Additionally it adopts Perl syntax. Extreme case:
  -    $#{foo:#} tells you how many digits the number of elements of foo has.
  -
  -    Examples now working correctly:
  -
  -    - Creation of a Newsgroups: header from To: headers w/o the last comma
  -
  -        Newsgroup: [${To[#]}${To[#+1]:+${Separator} }]
  -        Newsgroup: [${To[#-1]:+${Separator} }${To[#]}]
  -
  -    - Assume index zero is a header and the last element is a footer. Print a
  -      table with header, ruler, body, ruler and footer.
  + o use internal context to carry information
   
  -        ${foo[0]}
  -        ${empty:p/-/${foo[0]:#}/}
  -        [$foo{#}\n]{1,$#{foo}-1}
  -        ${empty:p/-/${foo[$#{foo}]:#}/}
  -        ${foo[$#{foo}]}
  - ---------------------------------------------------------------------
  + o document exception handling
   
    o add internal library context and move initialization and configuration
      into this context.
  -
  - o bugfix?: (thl)
  -   habe einen Bug in lib_var gefunden, scheint konzeptioneller Art zu sein.
  -   Ich benoetige zwei Passes fuer eine Anwendung, da es zwei verschiedene
  -   Arten von Variablen gibt. Eine hat nur Zahlen als gueltigen Namen, die
  -   andere Zahlen, Buchstaben, Punkt und Strich. Und die Ergebnisse des
  -   ersten Passes koennen die Namen des zweiten beeinflussen, daher muessen
  -   es zwei Passes sein. Sollte eigentlich funktionieren, dafuer gibt es die
  -   namechars im var_config_t und das force_expand feature. Ich setze also
  -   zuerst die namechars auf "0-9" und force_expand auf FALSE, anschliessend
  -   die namechars auf  "0-9a-zA-Z.-" und force_expand auf TRUE. Aber bei
  -   einem Input von "${0}${abc}" bricht der Parser den ersten Pass bei "abc"
  -   mit "failed: incomplete variable" ab! Workaround: gleiche Namespaces,
  -   d.h. namechar's, verwenden - aber das ist nicht wirklich die ultimative
  -   Loesung.
   
    o additional feature: functions via callback.
      ${foo:F<bar>:F<quux>} calls callback for bar with result of foo
  Index: ossp-pkg/var/var.pod
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 var.pod
  --- ossp-pkg/var/var.pod	28 Feb 2002 08:48:44 -0000	1.22
  +++ ossp-pkg/var/var.pod	28 Feb 2002 11:40:46 -0000	1.23
  @@ -182,6 +182,10 @@
   (C<0>,... for first variant and I<start>,...,I<end> with stepping
   I<step> for second variant). I<index> of array variable lookups. For
   I<start>, I<step> and I<end>, full arithmetic expressions are allowed.
  +This loop construct can be nested, too. In this case an inner loop is
  +fully repeated for each iteration of the outer loop. Additionally,
  +arithmetic expressions are supported in both I<start>, I<step>, I<end>
  +and I<index> parts of variable constructs in I<body>.
   
   =back
   
  @@ -554,7 +558,7 @@
   might have introduced now quoted pairs into the output text, which you
   need to expand to get the desired effect.
   
  -=head1 EXAMPLE
  +=head1 EXAMPLE (DEVELOPER)
   
   The following simple but complete program illustrates the full usage
   of B<OSSP var>. It accepts a single argument on the command line
  @@ -660,6 +664,35 @@
   
   and use it to play with the various B<OSSP var> variable expansion
   possibilities.
  +
  +=head1 EXAMPLE (USER)
  +
  +The following are a few sample use cases of B<OSSP var>
  +variable expansions. They all assume the default syntax
  +configuration and the following variable definitions: C<$foo=foo>
  +(a scalar), C<$bar=E<lt>bar1,bar2,bar3,E<gt>> (an array),
  +C<$baz=E<lt>baz1,baz2,baz3,E<gt>> (another array), C<$quux=quux>
  +(another scalar), C<$name=E<lt>foo,bar,baz,quuxE<gt>> (another scalar)
  +and C<$empty=""> (another scalar).
  +
  + Input                         Output
  + ----------------------------- --------------
  + $foo                          foo
  + ${foo}                        foo
  + ${bar[0]}                     bar1
  + ${${name[1]}[0]}              bar1
  + ${foo:u:y/O/U/:s/(.*)/<\1>/}  <FUU>
  + ${foo:u:y/O/U/:s/(.*)/<\1>/}  <FUU>
  + ${empty:-foo}                 foo
  + ${foo:+yes}${foo:*no}         yes
  + ${empty:+yes}${empty:*no}     no
  + ${foo:p/6/./l}                foo...
  + ${foo:p/6/./r}                ...foo
  + [${bar[#]}${bar[#+1]:+,}]     bar1,bar2,bar3
  + [${bar[#-1]:+,}${bar[#]}]     bar1,bar2,bar3
  + [${bar[#]}]{2,1,3}            bar2bar3
  + [${bar[#]}]{1,2,3}            bar1bar3
  + [${foo[#]}[${bar[#]}]]{1,,2}  foo1bar1bar2bar3foo2bar1bar2bar3
   
   =head1 SEE ALSO
   

From ossp-cvs-owner@ossp.org  Thu Feb 28 12:54:25 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9484C7642F; Thu, 28 Feb 2002 12:54:25 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var TODO var.c
Message-Id: <20020228115425.9484C7642F@mail.ossp.org>
Date: Thu, 28 Feb 2002 12:54:25 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   28-Feb-2002 12:54:25
  Branch: HEAD                             Handle: 2002022811542500

  Modified files:
    ossp-pkg/var            TODO var.c

  Log:
    Start internal code and logic cleanups:
    - move the name class table generation from var_expand()
      to var_config() by moving the table into var_t.
    - move inital parts of internal_expand to var_expand().

  Summary:
    Revision    Changes     Path
    1.18        +0  -2      ossp-pkg/var/TODO
    1.66        +21 -33     ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/TODO
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 TODO
  --- ossp-pkg/var/TODO	28 Feb 2002 11:40:46 -0000	1.17
  +++ ossp-pkg/var/TODO	28 Feb 2002 11:54:25 -0000	1.18
  @@ -15,8 +15,6 @@
      empty strings for undefined variables. This is certainly
      intended this way, but has to be documented better?
   
  - o generate internals into context
  -
    o use internal context to carry information
   
    o document exception handling
  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.65 -r1.66 var.c
  --- ossp-pkg/var/var.c	28 Feb 2002 11:08:58 -0000	1.65
  +++ ossp-pkg/var/var.c	28 Feb 2002 11:54:25 -0000	1.66
  @@ -58,9 +58,12 @@
   #define VAR_RC(rv) (rv)
   #endif /* WITH_EX */
   
  +typedef char char_class_t[256]; /* 256 == 2 ^ sizeof(unsigned char)*8 */
  +
   /* the external context structure */
   struct var_st {
       var_syntax_t   syntax;
  +    char_class_t   syntax_nameclass;
       var_cb_value_t cb_value_fct;
       void          *cb_value_ctx;
   };
  @@ -201,8 +204,6 @@
   
   /* Routines for the expansion of quoted-pair expressions. */
   
  -typedef char char_class_t[256]; /* 256 == 2 ^ sizeof(unsigned char)*8 */
  -
   static void expand_range(char a, char b, char_class_t class)
   {
       do {
  @@ -1955,38 +1956,15 @@
       const char *input_buf, size_t input_len,
       char **result, size_t *result_len,
       var_cb_value_t lookup, void *lookup_context,
  -    const var_syntax_t *config, int force_expand)
  +    const var_syntax_t *config, char_class_t nameclass, int force_expand)
   {
  -    char_class_t nameclass;
       var_rc_t rc;
       tokenbuf_t output;
   
  -    /* Argument sanity checks */
  -    if (input_buf == NULL || input_len == 0 ||
  -        result == NULL ||
  -        lookup == NULL)
  -        return VAR_RC(VAR_ERR_INVALID_ARGUMENT);
  -
  -    /* Optionally use default configuration */
  -    if (config == NULL)
  -        config = &var_syntax_default;
  -
       /* Set the result pointer to the begining of the input buffer so
          that it is correctly initialized in case we fail with an error. */
       *result = (char *)input_buf;
   
  -    /* Expand the class description for valid variable names. */
  -    if ((rc = expand_character_class(config->name_chars, nameclass)) != VAR_OK)
  -        return VAR_RC(rc);
  -
  -    /* Make sure that the specials defined in the configuration do not
  -       appear in the character name class. */
  -    if (nameclass[(int)config->delim_init] ||
  -        nameclass[(int)config->delim_open] ||
  -        nameclass[(int)config->delim_close] ||
  -        nameclass[(int)config->escape])
  -        return VAR_RC(VAR_ERR_INVALID_CONFIGURATION);
  -
       /* Call the parser. */
       tokenbuf_init(&output);
       rc = input(input_buf, input_buf + input_len, config, nameclass,
  @@ -2054,6 +2032,7 @@
       ...)
   {
       va_list ap;
  +    var_rc_t rc;
   
       if (var == NULL)
           return VAR_RC(VAR_ERR_INVALID_ARGUMENT);
  @@ -2071,9 +2050,14 @@
               var->syntax.index_open  = s->index_open;
               var->syntax.index_close = s->index_close;
               var->syntax.index_mark  = s->index_mark;
  -            if (var->syntax.name_chars != NULL)
  -                free(var->syntax.name_chars);
  -            var->syntax.name_chars = strdup(s->name_chars);
  +            var->syntax.name_chars  = NULL; /* unused internally */
  +            if ((rc = expand_character_class(s->name_chars, var->syntax_nameclass)) != VAR_OK)
  +                return VAR_RC(rc);
  +            if (   var->syntax_nameclass[(int)var->syntax.delim_init] 
  +                || var->syntax_nameclass[(int)var->syntax.delim_open]
  +                || var->syntax_nameclass[(int)var->syntax.delim_close]
  +                || var->syntax_nameclass[(int)var->syntax.escape])
  +                return VAR_RC(VAR_ERR_INVALID_CONFIGURATION);
               break;
           }
           case VAR_CONFIG_CB_VALUE: {
  @@ -2156,17 +2140,21 @@
   var_rc_t 
   var_expand(
       var_t *var, 
  -    const char *src, size_t srclen, 
  -    char **dst, size_t *dstlen, 
  +    const char *src_ptr, size_t src_len, 
  +    char **dst_ptr, size_t *dst_len, 
       int force_expand)
   {
       /* var_expand_t ctx; */
       var_rc_t rc;
   
  +    /* argument sanity checks */
  +    if (var == NULL || src_ptr == NULL || src_len == 0 || dst_ptr == NULL)
  +        return VAR_RC(VAR_ERR_INVALID_ARGUMENT);
  +
       /* ctx.force_expand = force_expand; */
  -    rc = internal_expand(src, srclen, dst, dstlen, 
  +    rc = internal_expand(src_ptr, src_len, dst_ptr, dst_len, 
                            var->cb_value_fct, var->cb_value_ctx,
  -                         &var->syntax, force_expand);
  +                         &var->syntax, var->syntax_nameclass, force_expand);
       return rc;
   }
   

From ossp-cvs-owner@ossp.org  Thu Feb 28 12:59:30 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2DCCB7642F; Thu, 28 Feb 2002 12:59:30 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Message-Id: <20020228115930.2DCCB7642F@mail.ossp.org>
Date: Thu, 28 Feb 2002 12:59:30 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   28-Feb-2002 12:59:30
  Branch: HEAD                             Handle: 2002022811592900

  Modified files:
    ossp-pkg/var            var.c

  Log:
    shorten table

  Summary:
    Revision    Changes     Path
    1.67        +48 -48     ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.66 -r1.67 var.c
  --- ossp-pkg/var/var.c	28 Feb 2002 11:54:25 -0000	1.66
  +++ ossp-pkg/var/var.c	28 Feb 2002 11:59:29 -0000	1.67
  @@ -2158,61 +2158,61 @@
       return rc;
   }
   
  +static char *var_errors[] = {
  +    "everything ok",                                           /* VAR_OK = 0 */
  +    "incomplete named character",                              /* VAR_ERR_INCOMPLETE_NAMED_CHARACTER */
  +    "incomplete hexadecimal value",                            /* VAR_ERR_INCOMPLETE_HEX */
  +    "invalid hexadecimal value",                               /* VAR_ERR_INVALID_HEX */
  +    "octal value too large",                                   /* VAR_ERR_OCTAL_TOO_LARGE */
  +    "invalid octal value",                                     /* VAR_ERR_INVALID_OCTAL */
  +    "incomplete octal value",                                  /* VAR_ERR_INCOMPLETE_OCTAL */
  +    "incomplete grouped hexadecimal value",                    /* VAR_ERR_INCOMPLETE_GROUPED_HEX */
  +    "incorrect character class specification",                 /* VAR_ERR_INCORRECT_CLASS_SPEC */
  +    "invalid expansion configuration",                         /* VAR_ERR_INVALID_CONFIGURATION */
  +    "out of memory",                                           /* VAR_ERR_OUT_OF_MEMORY */
  +    "incomplete variable specification",                       /* VAR_ERR_INCOMPLETE_VARIABLE_SPEC */
  +    "undefined variable",                                      /* VAR_ERR_UNDEFINED_VARIABLE */
  +    "input is neither text nor variable",                      /* VAR_ERR_INPUT_ISNT_TEXT_NOR_VARIABLE */
  +    "unknown command character in variable",                   /* VAR_ERR_UNKNOWN_COMMAND_CHAR */
  +    "malformatted search and replace operation",               /* VAR_ERR_MALFORMATTED_REPLACE */
  +    "unknown flag in search and replace operation",            /* VAR_ERR_UNKNOWN_REPLACE_FLAG */
  +    "invalid regex in search and replace operation",           /* VAR_ERR_INVALID_REGEX_IN_REPLACE */
  +    "missing parameter in command",                            /* VAR_ERR_MISSING_PARAMETER_IN_COMMAND */
  +    "empty search string in search and replace operation",     /* VAR_ERR_EMPTY_SEARCH_STRING */
  +    "start offset missing in cut operation",                   /* VAR_ERR_MISSING_START_OFFSET */
  +    "offsets in cut operation delimited by unknown character", /* VAR_ERR_INVALID_OFFSET_DELIMITER */
  +    "range out of bounds in cut operation",                    /* VAR_ERR_RANGE_OUT_OF_BOUNDS */
  +    "offset out of bounds in cut operation",                   /* VAR_ERR_OFFSET_OUT_OF_BOUNDS */
  +    "logic error in cut operation",                            /* VAR_ERR_OFFSET_LOGIC */
  +    "malformatted transpose operation",                        /* VAR_ERR_MALFORMATTED_TRANSPOSE */
  +    "source and target class mismatch in transpose operation", /* VAR_ERR_TRANSPOSE_CLASSES_MISMATCH */
  +    "empty character class in transpose operation",            /* VAR_ERR_EMPTY_TRANSPOSE_CLASS */
  +    "incorrect character class in transpose operation",        /* VAR_ERR_INCORRECT_TRANSPOSE_CLASS_SPEC */
  +    "malformatted padding operation",                          /* VAR_ERR_MALFORMATTED_PADDING */
  +    "width parameter missing in padding operation",            /* VAR_ERR_MISSING_PADDING_WIDTH */
  +    "fill string missing in padding operation",                /* VAR_ERR_EMPTY_PADDING_FILL_STRING */
  +    "unknown quoted pair in search and replace operation",     /* VAR_ERR_UNKNOWN_QUOTED_PAIR_IN_REPLACE */
  +    "sub-matching reference out of range",                     /* VAR_ERR_SUBMATCH_OUT_OF_RANGE */
  +    "invalid argument",                                        /* VAR_ERR_INVALID_ARGUMENT */
  +    "incomplete quoted pair",                                  /* VAR_ERR_INCOMPLETE_QUOTED_PAIR */
  +    "lookup function does not support variable arrays",        /* VAR_ERR_ARRAY_LOOKUPS_ARE_UNSUPPORTED */
  +    "index of array variable contains an invalid character",   /* VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC */
  +    "index of array variable is incomplete",                   /* VAR_ERR_INCOMPLETE_INDEX_SPEC */
  +    "bracket expression in array variable's index not closed", /* VAR_ERR_UNCLOSED_BRACKET_IN_INDEX */
  +    "division by zero error in index specification",           /* VAR_ERR_DIVISION_BY_ZERO_IN_INDEX */
  +    "unterminated loop construct",                             /* VAR_ERR_UNTERMINATED_LOOP_CONSTRUCT */
  +    "invalid character in loop limits"                         /* VAR_ERR_INVALID_CHAR_IN_LOOP_LIMITS */
  +};
  +
   var_rc_t var_strerror(var_t *var, var_rc_t rc, char **str)
   {
  -    static char *errors[] = {
  -        "everything ok",                                                        /* VAR_OK = 0 */
  -        "incomplete named character",                                           /* VAR_ERR_INCOMPLETE_NAMED_CHARACTER */
  -        "incomplete hexadecimal value",                                         /* VAR_ERR_INCOMPLETE_HEX */
  -        "invalid hexadecimal value",                                            /* VAR_ERR_INVALID_HEX */
  -        "octal value too large",                                                /* VAR_ERR_OCTAL_TOO_LARGE */
  -        "invalid octal value",                                                  /* VAR_ERR_INVALID_OCTAL */
  -        "incomplete octal value",                                               /* VAR_ERR_INCOMPLETE_OCTAL */
  -        "incomplete grouped hexadecimal value",                                 /* VAR_ERR_INCOMPLETE_GROUPED_HEX */
  -        "incorrect character class specification",                              /* VAR_ERR_INCORRECT_CLASS_SPEC */
  -        "invalid expansion configuration",                                      /* VAR_ERR_INVALID_CONFIGURATION */
  -        "out of memory",                                                        /* VAR_ERR_OUT_OF_MEMORY */
  -        "incomplete variable specification",                                    /* VAR_ERR_INCOMPLETE_VARIABLE_SPEC */
  -        "undefined variable",                                                   /* VAR_ERR_UNDEFINED_VARIABLE */
  -        "input is neither text nor variable",                                   /* VAR_ERR_INPUT_ISNT_TEXT_NOR_VARIABLE */
  -        "unknown command character in variable",                                /* VAR_ERR_UNKNOWN_COMMAND_CHAR */
  -        "malformatted search and replace operation",                            /* VAR_ERR_MALFORMATTED_REPLACE */
  -        "unknown flag in search and replace operation",                         /* VAR_ERR_UNKNOWN_REPLACE_FLAG */
  -        "invalid regular expression in search and replace operation",           /* VAR_ERR_INVALID_REGEX_IN_REPLACE */
  -        "missing parameter in command",                                         /* VAR_ERR_MISSING_PARAMETER_IN_COMMAND */
  -        "empty search string in search and replace operation",                  /* VAR_ERR_EMPTY_SEARCH_STRING */
  -        "start offset missing in cut operation",                                /* VAR_ERR_MISSING_START_OFFSET */
  -        "offsets in cut operation delimited by unknown character",              /* VAR_ERR_INVALID_OFFSET_DELIMITER */
  -        "range out of bounds in cut operation",                                 /* VAR_ERR_RANGE_OUT_OF_BOUNDS */
  -        "offset out of bounds in cut operation",                                /* VAR_ERR_OFFSET_OUT_OF_BOUNDS */
  -        "logic error in cut operation",                                         /* VAR_ERR_OFFSET_LOGIC */
  -        "malformatted transpose operation",                                     /* VAR_ERR_MALFORMATTED_TRANSPOSE */
  -        "source and destination classes do not match in transpose operation",   /* VAR_ERR_TRANSPOSE_CLASSES_MISMATCH */
  -        "empty character class in transpose operation",                         /* VAR_ERR_EMPTY_TRANSPOSE_CLASS */
  -        "incorrect character class in transpose operation",                     /* VAR_ERR_INCORRECT_TRANSPOSE_CLASS_SPEC */
  -        "malformatted padding operation",                                       /* VAR_ERR_MALFORMATTED_PADDING */
  -        "width parameter missing in padding operation",                         /* VAR_ERR_MISSING_PADDING_WIDTH */
  -        "fill string missing in padding operation",                             /* VAR_ERR_EMPTY_PADDING_FILL_STRING */
  -        "unknown quoted pair in search and replace operation",                  /* VAR_ERR_UNKNOWN_QUOTED_PAIR_IN_REPLACE */
  -        "sub-matching reference out of range",                                  /* VAR_ERR_SUBMATCH_OUT_OF_RANGE */
  -        "invalid argument",                                                     /* VAR_ERR_INVALID_ARGUMENT */
  -        "incomplete quoted pair",                                               /* VAR_ERR_INCOMPLETE_QUOTED_PAIR */
  -        "lookup function does not support variable arrays",                     /* VAR_ERR_ARRAY_LOOKUPS_ARE_UNSUPPORTED */
  -        "index specification of array variable contains an invalid character",  /* VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC */
  -        "index specification of array variable is incomplete",                  /* VAR_ERR_INCOMPLETE_INDEX_SPEC */
  -        "bracket expression in array variable's index is not closed",           /* VAR_ERR_UNCLOSED_BRACKET_IN_INDEX */
  -        "division by zero error in index specification",                        /* VAR_ERR_DIVISION_BY_ZERO_IN_INDEX */
  -        "unterminated loop construct",                                          /* VAR_ERR_UNTERMINATED_LOOP_CONSTRUCT */
  -        "invalid character in loop limits"                                      /* VAR_ERR_INVALID_CHAR_IN_LOOP_LIMITS */
  -    };
  -
       if (str == NULL)
           return VAR_RC(VAR_ERR_INVALID_ARGUMENT);
       rc = 0 - rc;
  -    if (rc < 0 || rc >= sizeof(errors) / sizeof(char *))
  +    if (rc < 0 || rc >= sizeof(var_errors) / sizeof(char *))
           *str = "unknown error";
       else
  -        *str = errors[rc];
  +        *str = var_errors[rc];
       return VAR_OK;
   }
   

From ossp-cvs-owner@ossp.org  Thu Feb 28 13:10:33 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 918017642F; Thu, 28 Feb 2002 13:10:33 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var TODO var.c
Message-Id: <20020228121033.918017642F@mail.ossp.org>
Date: Thu, 28 Feb 2002 13:10:33 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   28-Feb-2002 13:10:33
  Branch: HEAD                             Handle: 2002022812103300

  Modified files:
    ossp-pkg/var            TODO var.c

  Log:
    merge old internal_expand() into new var_expand()

  Summary:
    Revision    Changes     Path
    1.19        +0  -3      ossp-pkg/var/TODO
    1.68        +43 -53     ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/TODO
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 TODO
  --- ossp-pkg/var/TODO	28 Feb 2002 11:54:25 -0000	1.18
  +++ ossp-pkg/var/TODO	28 Feb 2002 12:10:33 -0000	1.19
  @@ -19,9 +19,6 @@
   
    o document exception handling
   
  - o add internal library context and move initialization and configuration
  -   into this context.
  -
    o additional feature: functions via callback.
      ${foo:F<bar>:F<quux>} calls callback for bar with result of foo
      expansion and then callback for quux with the result returned from
  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.67 -r1.68 var.c
  --- ossp-pkg/var/var.c	28 Feb 2002 11:59:29 -0000	1.67
  +++ ossp-pkg/var/var.c	28 Feb 2002 12:10:33 -0000	1.68
  @@ -1952,51 +1952,6 @@
       return rc;
   }
   
  -static var_rc_t internal_expand(
  -    const char *input_buf, size_t input_len,
  -    char **result, size_t *result_len,
  -    var_cb_value_t lookup, void *lookup_context,
  -    const var_syntax_t *config, char_class_t nameclass, int force_expand)
  -{
  -    var_rc_t rc;
  -    tokenbuf_t output;
  -
  -    /* Set the result pointer to the begining of the input buffer so
  -       that it is correctly initialized in case we fail with an error. */
  -    *result = (char *)input_buf;
  -
  -    /* Call the parser. */
  -    tokenbuf_init(&output);
  -    rc = input(input_buf, input_buf + input_len, config, nameclass,
  -               lookup, lookup_context, force_expand, &output, 0, 0, NULL);
  -
  -    /* Post-process output */
  -    if (rc >= 0) {
  -        /* always NUL-terminate output for convinience reasons */
  -        if (!tokenbuf_append(&output, "\0", 1)) {
  -            tokenbuf_free(&output);
  -            return VAR_ERR_OUT_OF_MEMORY;
  -        }
  -        output.end--;
  -
  -        /* Provide results */
  -        *result = (char *)output.begin;
  -        if (result_len != NULL)
  -            *result_len = output.end - output.begin;
  -
  -        /* canonify all positive answers */
  -        rc = VAR_OK;
  -    }
  -    else {
  -        /* Provide error results */
  -        *result = (char *)input_buf;
  -        if (result_len != NULL)
  -            *result_len = output.end - output.begin;
  -    }
  -
  -    return VAR_RC(rc);
  -}
  -
   /* ------------------------------------------------------------------ */
   
   var_rc_t 
  @@ -2144,21 +2099,56 @@
       char **dst_ptr, size_t *dst_len, 
       int force_expand)
   {
  -    /* var_expand_t ctx; */
  +    var_expand_t ctx;
  +    tokenbuf_t output;
       var_rc_t rc;
   
       /* argument sanity checks */
       if (var == NULL || src_ptr == NULL || src_len == 0 || dst_ptr == NULL)
           return VAR_RC(VAR_ERR_INVALID_ARGUMENT);
   
  -    /* ctx.force_expand = force_expand; */
  -    rc = internal_expand(src_ptr, src_len, dst_ptr, dst_len, 
  -                         var->cb_value_fct, var->cb_value_ctx,
  -                         &var->syntax, var->syntax_nameclass, force_expand);
  -    return rc;
  +    /* prepare internal expansion context */
  +    ctx.force_expand = force_expand;
  +
  +    /* set the dst_ptr pointer to the src_ptr so that it is correctly
  +       initialized in case we fail with an error later. */
  +    *dst_ptr = (char *)src_ptr;
  +
  +    /* call the parsing */
  +    tokenbuf_init(&output);
  +    rc = input(src_ptr, src_ptr + src_len, 
  +               &var->syntax, var->syntax_nameclass,
  +               var->cb_value_fct, var->cb_value_ctx, 
  +               ctx.force_expand, &output, 0, 0, NULL);
  +
  +    /* post-process output */
  +    if (rc >= 0) {
  +        /* always NUL-terminate output for convinience reasons */
  +        if (!tokenbuf_append(&output, "\0", 1)) {
  +            tokenbuf_free(&output);
  +            return VAR_RC(VAR_ERR_OUT_OF_MEMORY);
  +        }
  +        output.end--;
  +
  +        /* provide dst_ptrs */
  +        *dst_ptr = (char *)output.begin;
  +        if (dst_len != NULL)
  +            *dst_len = output.end - output.begin;
  +
  +        /* canonify all positive answers */
  +        rc = VAR_OK;
  +    }
  +    else {
  +        /* provide error dst_ptr */
  +        *dst_ptr = (char *)src_ptr;
  +        if (dst_len != NULL)
  +            *dst_len = output.end - output.begin;
  +    }
  +
  +    return VAR_RC(rc);
   }
   
  -static char *var_errors[] = {
  +static const char *var_errors[] = {
       "everything ok",                                           /* VAR_OK = 0 */
       "incomplete named character",                              /* VAR_ERR_INCOMPLETE_NAMED_CHARACTER */
       "incomplete hexadecimal value",                            /* VAR_ERR_INCOMPLETE_HEX */
  @@ -2212,7 +2202,7 @@
       if (rc < 0 || rc >= sizeof(var_errors) / sizeof(char *))
           *str = "unknown error";
       else
  -        *str = var_errors[rc];
  +        *str = (char *)var_errors[rc];
       return VAR_OK;
   }
   

From ossp-cvs-owner@ossp.org  Thu Feb 28 13:40:02 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4574E7642F; Thu, 28 Feb 2002 13:40:02 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c var.h var_test.c
Message-Id: <20020228124002.4574E7642F@mail.ossp.org>
Date: Thu, 28 Feb 2002 13:40:02 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   28-Feb-2002 13:40:02
  Branch: HEAD                             Handle: 2002022812400100

  Modified files:
    ossp-pkg/var            var.c var.h var_test.c

  Log:
    prepare for API finally passing "val_t *" to callback, currently pass NULL

  Summary:
    Revision    Changes     Path
    1.69        +4  -4      ossp-pkg/var/var.c
    1.26        +1  -1      ossp-pkg/var/var.h
    1.37        +1  -1      ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.68 -r1.69 var.c
  --- ossp-pkg/var/var.c	28 Feb 2002 12:10:33 -0000	1.68
  +++ ossp-pkg/var/var.c	28 Feb 2002 12:40:01 -0000	1.69
  @@ -712,7 +712,7 @@
           result->buffer_size = 0;
       }
       else {
  -        rc = (*lookup) (lookup_context, name.begin, name.end - name.begin, idx,
  +        rc = (*lookup) (NULL, lookup_context, name.begin, name.end - name.begin, idx,
                           &data, &len, &buffer_size);
           if (rc == VAR_ERR_UNDEFINED_VARIABLE) {
               /* The variable is undefined. What we'll do now depends on the
  @@ -817,7 +817,7 @@
       if (rc < 0)
           return rc;
       if (rc > 0) {
  -        rc2 = (*lookup)(lookup_context, p, rc, 0, &data, &len, &buffer_size);
  +        rc2 = (*lookup)(NULL, lookup_context, p, rc, 0, &data, &len, &buffer_size);
           if (rc2 == VAR_ERR_UNDEFINED_VARIABLE && !force_expand) {
               result->begin = begin;
               result->end = begin + 1 + rc;
  @@ -1706,7 +1706,7 @@
       int     *rel_lookup_flag;
   };
   
  -static int lookup_wrapper(void *context,
  +static int lookup_wrapper(var_t *var, void *context,
                             const char *name, size_t name_len, int idx,
                             const char **data, size_t *data_len,
                             size_t *buffer_size)
  @@ -1715,7 +1715,7 @@
       struct wrapper_context *wcon = context;
       int rc;
   
  -    rc = (*wcon->lookup)(wcon->context, name, name_len,
  +    rc = (*wcon->lookup)(NULL, wcon->context, name, name_len,
                            idx, data, data_len, buffer_size);
       if (rc == VAR_ERR_UNDEFINED_VARIABLE) {
           (*wcon->rel_lookup_flag)--;
  Index: ossp-pkg/var/var.h
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 var.h
  --- ossp-pkg/var/var.h	28 Feb 2002 08:48:44 -0000	1.25
  +++ ossp-pkg/var/var.h	28 Feb 2002 12:40:01 -0000	1.26
  @@ -100,7 +100,7 @@
   } var_syntax_t;
   
   typedef var_rc_t (*var_cb_value_t)(
  -    void *ctx,
  +    var_t *var, void *ctx,
       const char  *var_ptr, size_t  var_len, int var_idx,
       const char **val_ptr, size_t *val_len, size_t *val_size
   );
  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.36 -r1.37 var_test.c
  --- ossp-pkg/var/var_test.c	28 Feb 2002 09:29:48 -0000	1.36
  +++ ossp-pkg/var/var_test.c	28 Feb 2002 12:40:01 -0000	1.37
  @@ -40,7 +40,7 @@
   };
   
   static var_rc_t var_lookup(
  -    void *context,
  +    var_t *var, void *context,
       const char *varname, size_t name_len, int idx,
       const char **data, size_t *data_len,
       size_t *buffer_size)

From ossp-cvs-owner@ossp.org  Thu Feb 28 13:57:56 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 892E57642F; Thu, 28 Feb 2002 13:57:56 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp fixme.h lmtp2nntp_config.c lmtp2nntp_ma...
Message-Id: <20020228125756.892E57642F@mail.ossp.org>
Date: Thu, 28 Feb 2002 13:57:56 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   28-Feb-2002 13:57:56
  Branch: HEAD                             Handle: 2002022812575500

  Modified files:
    ossp-pkg/lmtp2nntp      fixme.h lmtp2nntp_config.c lmtp2nntp_main.c

  Log:
    integrated new lib_var API; lib_var patch fixed expansion problem

  Summary:
    Revision    Changes     Path
    1.19        +3  -0      ossp-pkg/lmtp2nntp/fixme.h
    1.59        +46 -94     ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.42        +83 -6      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/fixme.h
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 fixme.h
  --- ossp-pkg/lmtp2nntp/fixme.h	27 Feb 2002 09:34:41 -0000	1.18
  +++ ossp-pkg/lmtp2nntp/fixme.h	28 Feb 2002 12:57:55 -0000	1.19
  @@ -6,6 +6,7 @@
   #define __FIXME_H__
   
   #include <val.h>
  +#include <var.h>
   #include <sa.h>
   struct acl {
       char      *acl;
  @@ -106,6 +107,8 @@
       struct          session session;
       msg_t          *msg;
       struct utsname  uname;
  +    var_t          *config_varregex;
  +    var_t          *config_varctx;
   } lmtp2nntp_t;
   
   #define ERR_EXECUTION 1
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.58 -r1.59 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	27 Feb 2002 12:17:34 -0000	1.58
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	28 Feb 2002 12:57:55 -0000	1.59
  @@ -127,6 +127,18 @@
       exit(0);
   
   }
  +
  +static var_syntax_t syntax_regex = {
  +    '\\',         /* escape        */ 
  +    '$',          /* varinit       */ 
  +    '{',          /* startdelim    */ 
  +    '}',          /* enddelim      */ 
  +    NUL,          /* startindex    */
  +    NUL,          /* endindex      */
  +    NUL,          /* current_index */
  +    "0-9"         /* namechars     */
  +};
  +
   void config_context(lmtp2nntp_t *ctx)
   {
       ex_t ex;
  @@ -655,6 +667,19 @@
                       }
                       hrNew = NULL; /* release cleanup responsibility */
                   }
  +                /* establish variable expansion context */
  +                {
  +                    var_rc_t rc;
  +
  +                    if ((rc = var_create(&ctx->config_varregex)) != VAR_OK) {
  +                        log2(ctx, ERROR, "option --headerrule, create regex context failed with %s (%d)", var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  +                        throw(0,0,0);
  +                    }
  +                    if ((rc = var_config(ctx->config_varregex, VAR_CONFIG_SYNTAX, &syntax_regex)) != VAR_OK) {
  +                        log2(ctx, ERROR, "option --headerrule, config regex context failed with %s (%d)", var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  +                        throw(0,0,0);
  +                    }
  +                }
               }
           }
           cleanup {
  @@ -1288,73 +1313,6 @@
       }
       return (headerdata_t *)hdNew;
   }
  -#if 0
  -#endif
  -
  -static var_config_t ctx_lookup_cfg = {
  -    '$',          /* varinit       */ 
  -    '{',          /* startdelim    */ 
  -    '}',          /* enddelim      */ 
  -    '[',          /* startindex    */ 
  -    ']',          /* endindex      */ 
  -    '#',          /* current_index */ 
  -    '\\',         /* escape        */ 
  -    "a-zA-Z0-9_.-" /* namechars     */ 
  -};
  -
  -static var_rc_t ctx_lookup(
  -    void *_ctx, 
  -    const char *var_ptr, size_t var_len, int var_idx,
  -    const char **val_ptr, size_t *val_len, size_t *val_size)
  -{
  -    lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx;
  -    /*FIXME
  -    const char *name;
  -    size_t len;
  -    */
  -    var_rc_t rc;
  -    char *cp;
  -    optionval_t *ov;
  -
  -    log2(ctx, DEBUG, "ctx_lookup variable \"%s\" (%d)", var_ptr, var_len);
  -    rc = VAR_ERR_UNDEFINED_VARIABLE;
  -    if (strncasecmp(var_ptr, "option.", strlen("option.")) == 0) {
  -        cp = str_dupex(var_ptr, var_len);
  -        if (val_get(ctx->val, cp, &ov) == VAL_OK) {
  -            //log3(ctx, DEBUG, "FIXME var_idx=%d, ov->type=%d, ov->ndata=%d", var_idx, ov->type, ov->ndata);
  -            if ((var_idx == 0) && (ov->ndata == 1) && (ov->type == OPT_SINGLE)) { /* request first/only single value */
  -                *val_ptr = ov->data.s;
  -                *val_len = strlen(ov->data.s);
  -                *val_size = 0;
  -                rc = VAR_OK;
  -            }
  -            else if ((var_idx == 0) && (ov->ndata == 1) && (ov->type == OPT_FLAG)) { /* request first/only single value */
  -                *val_ptr = ov->data.f == TRUE ? "yes" : "no";
  -                *val_len = strlen(ov->data.s);
  -                *val_size = 0;
  -                rc = VAR_OK;
  -            }
  -            else if ((var_idx < ov->ndata) && (ov->type == OPT_MULTI)) { /* request second+ from multi value */
  -                *val_ptr = ov->data.m[var_idx];
  -                *val_len = strlen(ov->data.m[var_idx]);
  -                *val_size = 0;
  -                rc = VAR_OK;
  -            }
  -        }
  -        free(cp);
  -    }
  -    else if (strncasecmp(var_ptr, "xyz", var_len) == 0) {
  -        *val_ptr = "Hello, World!";
  -        *val_len = strlen("Hello, World!");
  -        *val_size = 0;
  -        rc = VAR_OK;
  -    }
  -    if (rc == VAR_OK)
  -        log4(ctx, DEBUG, "ctx_lookup variable \"%s\" (%d) ok: result is \"%s\" (%d)", var_ptr, var_len, *val_ptr, *val_len);
  -    else
  -        log3(ctx, DEBUG, "ctx_lookup variable \"%s\" (%d) failed: %s", var_ptr, var_len, var_strerror(rc));
  -    return rc;
  -}
   
   struct regex_ctx_st; //FIXME go into a header!
   typedef struct regex_ctx_st regex_ctx_t;
  @@ -1365,29 +1323,14 @@
       l2_channel_t  *l2;
   };
   
  -static var_config_t regex_lookup_cfg = {
  -    '$',          /* varinit       */ 
  -    '{',          /* startdelim    */ 
  -    '}',          /* enddelim      */ 
  -    '[',          /* startindex    */ //FIXME
  -    ']',          /* endindex      */ //FIXME
  -    '#',          /* current_index */ //FIXME
  -    '\\',         /* escape        */ 
  -    "0-9"         /* namechars     */ //FIXME bug in lib_val
  -};
  -
   static var_rc_t regex_lookup(
  -    void *_ctx, 
  +    var_t *var, void *_ctx, 
       const char *var_ptr, size_t var_len, int var_idx,
       const char **val_ptr, size_t *val_len, size_t *val_size)
   {
       regex_ctx_t *ctx = (regex_ctx_t *)_ctx;
  -    /*FIXME
  -    const char *name;
  -    size_t len;
  -    char *cp;
  -    */
       var_rc_t rc;
  +    char *cp;
       int i;
   
       log2(ctx, DEBUG, "rgx_lookup variable \"%s\" (%d)", var_ptr, var_len);
  @@ -1402,7 +1345,7 @@
       if (rc == VAR_OK)
           log4(ctx, DEBUG, "rgx_lookup variable \"%s\" (%d) ok: result is \"%s\" (%d)", var_ptr, var_len, *val_ptr, *val_len);
       else
  -        log3(ctx, DEBUG, "rgx_lookup variable \"%s\" (%d) failed: %s", var_ptr, var_len, var_strerror(rc));
  +        log4(ctx, DEBUG, "rgx_lookup variable \"%s\" (%d) failed: %s (%d)", var_ptr, var_len, var_strerror(var, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
       return rc;
   }
   
  @@ -1574,6 +1517,7 @@
       regex_ctx_t *regex_ctx;
   #define OVECSIZE 30
       int            ovec[OVECSIZE];
  +    var_rc_t rc; char *cp; //FIXME what a bad name, it's not the returncode of this function
   
       { //FIXME debug code block
           int i;
  @@ -1599,6 +1543,10 @@
       regex_ctx->acpMatch = NULL;
       regex_ctx->l2_env = ctx->l2_env;
       regex_ctx->l2 = ctx->l2;
  +    if ((rc = var_config(ctx->config_varregex, VAR_CONFIG_CB_VALUE, regex_lookup, regex_ctx)) != VAR_OK) {
  +        log2(ctx, ERROR, "configure regex callback failed with %s (%d)", var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  +        throw(0,0,0);
  +    }
       for (hrI = ctx->option_firstheaderrule; hrI != NULL; hrI = hrI->next) { /* for each rule */
           //log1(ctx, DEBUG, "FIXME trace loop hrI=%.8lx", hrI);
           { //FIXME debug code block
  @@ -1641,9 +1589,9 @@
                           var_rc_t var_rc;
                           char *res_ptr;
                           log1(ctx, DEBUG, "expanding regex references in headername '%s'", hrI->header);
  -                        if ((var_rc = var_expand(hrI->header, strlen(hrI->header), &res_ptr, NULL,
  -                                                 regex_lookup, regex_ctx, &regex_lookup_cfg, FALSE)) != VAR_OK) {
  -                            log2(ctx, ERROR, "expansion of '%s' failed: %s", hrI->header, var_strerror(var_rc));
  +                        //if ((var_rc = var_expand(hrI->header, strlen(hrI->header), &res_ptr, NULL, regex_lookup, regex_ctx, &regex_lookup_cfg, FALSE)) != VAR_OK) {
  +                        if ((var_rc = var_expand(ctx->config_varregex, hrI->header, strlen(hrI->header), &res_ptr, NULL, FALSE)) != VAR_OK) {
  +                            log3(ctx, ERROR, "expansion of '%s' failed: %s", hrI->header, var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
                           }
                           log1(ctx, DEBUG, "expansion result '%s'", res_ptr);
                           hdNew->name = res_ptr; //FIXME rename ->header to ->name
  @@ -1659,9 +1607,9 @@
                               var_rc_t var_rc;
                               char *res_ptr;
                               log1(ctx, DEBUG, "expanding regex references in header value '%s'", hrI->val);
  -                            if ((var_rc = var_expand(hrI->val, strlen(hrI->val), &res_ptr, NULL,
  -                                                     regex_lookup, regex_ctx, &regex_lookup_cfg, FALSE)) != VAR_OK) {
  -                                log2(ctx, ERROR, "expansion of '%s' failed: %s", hrI->val, var_strerror(var_rc));
  +                            //if ((var_rc = var_expand(hrI->val, strlen(hrI->val), &res_ptr, NULL, regex_lookup, regex_ctx, &regex_lookup_cfg, FALSE)) != VAR_OK) {
  +                            if ((var_rc = var_expand(ctx->config_varregex, hrI->val, strlen(hrI->val), &res_ptr, NULL, FALSE)) != VAR_OK) {
  +                                log3(ctx, ERROR, "expansion of '%s' failed: %s", hrI->val, var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
                               }
                               log1(ctx, DEBUG, "expansion result '%s'", res_ptr);
                               cp = res_ptr;
  @@ -1671,9 +1619,13 @@
                               var_rc_t var_rc;
                               char *res_ptr;
                               log1(ctx, DEBUG, "expanding variables in header value '%s'", hrI->val);
  -                            if ((var_rc = var_expand(cp, strlen(cp), &res_ptr, NULL,
  -                                                     ctx_lookup, ctx, &ctx_lookup_cfg, FALSE)) != VAR_OK) {
  -                                log2(ctx, ERROR, "expansion of '%s' failed: %s", cp, var_strerror(var_rc));
  +                            var_rc_t var_expand(var_t *var, const char *src_ptr,
  +                                   size_t src_len, char **dst_ptr, size_t *dst_len, int
  +                                          force_expand);
  +                            
  +                            //if ((var_rc = var_expand(cp, strlen(cp), &res_ptr, NULL, ctx_lookup, ctx, &ctx_lookup_cfg, FALSE)) != VAR_OK) {
  +                            if ((var_rc = var_expand(ctx->config_varctx, cp, strlen(cp), &res_ptr, NULL, FALSE)) != VAR_OK) {
  +                                log3(ctx, ERROR, "expansion of '%s' failed: %s", cp, var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
                               }
                               log1(ctx, DEBUG, "expansion result '%s'", res_ptr);
                               hdNew->data.s = res_ptr;
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.41 -r1.42 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	14 Feb 2002 11:03:52 -0000	1.41
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	28 Feb 2002 12:57:55 -0000	1.42
  @@ -115,17 +115,18 @@
   static void resetsession(struct session *session);
   int groupmatch(char *, size_t, char *);
   
  -static var_config_t ctx_lookup_cfg = {
  +static var_syntax_t syntax_ctx = {
  +    '\\',         /* escape        */ 
       '$',          /* varinit       */ 
       '{',          /* startdelim    */ 
       '}',          /* enddelim      */ 
       '[',          /* startindex    */ 
       ']',          /* endindex      */ 
       '#',          /* current_index */ 
  -    '\\',         /* escape        */ 
  -    "a-zA-Z0-9_.-" /* namechars     */ 
  +    "a-zA-Z0-9.-" /* namechars     */ 
   };
   
  +#if 0
   static var_rc_t ctx_lookup(
       void *_ctx, 
       const char *var_ptr, size_t var_len, int var_idx,
  @@ -181,6 +182,59 @@
                var_ptr /* FIXME: NUL-termination? */, var_len, var_strerror(rc));
       return rc;
   }
  +#endif
  +
  +static var_rc_t ctx_lookup(
  +    var_t *var,
  +    void *_ctx, 
  +    const char *var_ptr, size_t var_len, int var_idx,
  +    const char **val_ptr, size_t *val_len, size_t *val_size)
  +{
  +    lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx;
  +    var_rc_t rc;
  +    char *cp;
  +    optionval_t *ov;
  +
  +    log2(ctx, DEBUG, "ctx_lookup variable \"%s\" (%d)", var_ptr, var_len);
  +    rc = VAR_ERR_UNDEFINED_VARIABLE;
  +    if (strncasecmp(var_ptr, "option.", strlen("option.")) == 0) {
  +        cp = str_dupex(var_ptr, var_len);
  +        if (val_get(ctx->val, cp, &ov) == VAL_OK) {
  +            //log3(ctx, DEBUG, "FIXME var_idx=%d, ov->type=%d, ov->ndata=%d", var_idx, ov->type, ov->ndata);
  +            if ((var_idx == 0) && (ov->ndata == 1) && (ov->type == OPT_SINGLE)) { /* request first/only single value */
  +                *val_ptr = ov->data.s;
  +                *val_len = strlen(ov->data.s);
  +                *val_size = 0;
  +                rc = VAR_OK;
  +            }
  +            else if ((var_idx == 0) && (ov->ndata == 1) && (ov->type == OPT_FLAG)) { /* request first/only single value */
  +                *val_ptr = ov->data.f == TRUE ? "yes" : "no";
  +                *val_len = strlen(ov->data.s);
  +                *val_size = 0;
  +                rc = VAR_OK;
  +            }
  +            else if ((var_idx < ov->ndata) && (ov->type == OPT_MULTI)) { /* request second+ from multi value */
  +                *val_ptr = ov->data.m[var_idx];
  +                *val_len = strlen(ov->data.m[var_idx]);
  +                *val_size = 0;
  +                rc = VAR_OK;
  +            }
  +        }
  +        free(cp);
  +    }
  +    else if (strncasecmp(var_ptr, "xyz", var_len) == 0) {
  +        *val_ptr = "Hello, World!";
  +        *val_len = strlen("Hello, World!");
  +        *val_size = 0;
  +        rc = VAR_OK;
  +    }
  +    if (rc == VAR_OK)
  +        log4(ctx, DEBUG, "ctx_lookup variable \"%s\" (%d) ok: result is \"%s\" (%d)", var_ptr, var_len, *val_ptr, *val_len);
  +    else
  +        log4(ctx, DEBUG, "ctx_lookup variable \"%s\" (%d) failed: %s (%d)", var_ptr, var_len, var_strerror(var, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  +    return rc;
  +}
  +
   
   
   static void lmtp_gfs_ns(struct ns *);
  @@ -385,6 +439,8 @@
       initsession(&ctx->session);
       ctx->msg = NULL;
       memset(&ctx->uname, 0, sizeof(struct utsname));
  +    ctx->config_varregex = NULL;
  +    ctx->config_varctx = NULL;
       
       /* fill in application context */
       if (val_create(&ctx->val) != VAL_OK)
  @@ -395,6 +451,24 @@
       }
       ctx->progname = strdup(argv[0]);
   
  +    /* establish variable expansion context */
  +    {
  +        var_rc_t rc;
  +        char *cp;
  +
  +        if ((rc = var_create(&ctx->config_varctx)) != VAR_OK) {
  +            fprintf(stderr, "%s:Error: create varctx context failed with %s (%d)", ctx->progname, var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  +            CU(ERR_EXECUTION);
  +        }
  +        if ((rc = var_config(ctx->config_varctx, VAR_CONFIG_SYNTAX, &syntax_ctx)) != VAR_OK) {
  +            fprintf(stderr, "%s:Error: config varctx context failed with %s (%d)", ctx->progname, var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  +            CU(ERR_EXECUTION);
  +        }
  +        if ((rc = var_config(ctx->config_varctx, VAR_CONFIG_CB_VALUE, ctx_lookup, ctx)) != VAR_OK) {
  +            fprintf(stderr, "%s:Error: config varctx callback failed with %s (%d)", ctx->progname, var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  +            CU(ERR_EXECUTION);
  +        }
  +    }
       /* read in the arguments */
       (void)option_create(&o, ctx->val); /* FIXME */
       (void)option_parse(o, argc, argv);
  @@ -658,6 +732,10 @@
           free(ctx->progname);
       if (ctx->azGroupargs != NULL)
           free(ctx->azGroupargs);
  +    if (ctx->config_varregex != NULL)
  +        var_destroy(ctx->config_varregex);
  +    if (ctx->config_varctx != NULL)
  +        var_destroy(ctx->config_varctx);
       if (ctx != NULL)
           free(ctx);
       str_parse(NULL, NULL);
  @@ -1454,9 +1532,8 @@
       while ((cp = argz_next(ctx->azHeaderValuePairs, ctx->asHeaderValuePairs, cp)) != NULL) {
           var_rc_t var_rc;
           char *res_ptr;
  -        if ((var_rc = var_expand(cp, strlen(cp), &res_ptr, NULL,
  -                                 ctx_lookup, ctx, &ctx_lookup_cfg, TRUE)) != VAR_OK) {
  -            log2(ctx, ERROR, "expansion of '%s' failed: %s", cp, var_strerror(var_rc));
  +        if ((var_rc = var_expand(ctx->config_varctx, cp, strlen(cp), &res_ptr, NULL, TRUE)) != VAR_OK) {
  +            log3(ctx, ERROR, "expansion of '%s' failed: %s (%d)", cp, var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
               continue;
           }
           log1(ctx, DEBUG, "adding expanded header: \"%s\"", res_ptr);

From ossp-cvs-owner@ossp.org  Thu Feb 28 15:02:26 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 88CD77642F; Thu, 28 Feb 2002 15:02:26 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c lmtp2nntp_main.c
Message-Id: <20020228140226.88CD77642F@mail.ossp.org>
Date: Thu, 28 Feb 2002 15:02:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   28-Feb-2002 15:02:26
  Branch: HEAD                             Handle: 2002022814022501

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c lmtp2nntp_main.c

  Log:
    var callback now supports message header lookups

  Summary:
    Revision    Changes     Path
    1.60        +11 -6      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.43        +33 -5      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.59 -r1.60 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	28 Feb 2002 12:57:55 -0000	1.59
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	28 Feb 2002 14:02:25 -0000	1.60
  @@ -1619,10 +1619,6 @@
                               var_rc_t var_rc;
                               char *res_ptr;
                               log1(ctx, DEBUG, "expanding variables in header value '%s'", hrI->val);
  -                            var_rc_t var_expand(var_t *var, const char *src_ptr,
  -                                   size_t src_len, char **dst_ptr, size_t *dst_len, int
  -                                          force_expand);
  -                            
                               //if ((var_rc = var_expand(cp, strlen(cp), &res_ptr, NULL, ctx_lookup, ctx, &ctx_lookup_cfg, FALSE)) != VAR_OK) {
                               if ((var_rc = var_expand(ctx->config_varctx, cp, strlen(cp), &res_ptr, NULL, FALSE)) != VAR_OK) {
                                   log3(ctx, ERROR, "expansion of '%s' failed: %s", cp, var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  @@ -1650,9 +1646,18 @@
                   hdNew->ndata = 0;
               }
               else {
  -                hdNew->data.s = strdupex(hrI->val);
  -                hdNew->ndata = 1;
                   /*FIXME clean up data.m */
  +                /* expanding header and other variables into header value */
  +                var_rc_t var_rc;
  +                char *res_ptr;
  +                log1(ctx, DEBUG, "expanding variables in header value '%s'", hrI->val);
  +                //if ((var_rc = var_expand(cp, strlen(cp), &res_ptr, NULL, ctx_lookup, ctx, &ctx_lookup_cfg, FALSE)) != VAR_OK) {
  +                if ((var_rc = var_expand(ctx->config_varctx, hrI->val, strlen(hrI->val), &res_ptr, NULL, FALSE)) != VAR_OK) {
  +                    log3(ctx, ERROR, "expansion of '%s' failed: %s", hrI->val, var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  +                }
  +                log1(ctx, DEBUG, "expansion result '%s'", res_ptr);
  +                hdNew->data.s = res_ptr;
  +                hdNew->ndata = 1;
               }
               for (hdI = ctx->msg->hdFirst; hdI != NULL; hdI = hdI->next) { /* for each header */
                   if (hdI->name == NULL || strlen(hdI->name) == 0)
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.42 -r1.43 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	28 Feb 2002 12:57:55 -0000	1.42
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	28 Feb 2002 14:02:26 -0000	1.43
  @@ -222,11 +222,39 @@
           }
           free(cp);
       }
  -    else if (strncasecmp(var_ptr, "xyz", var_len) == 0) {
  -        *val_ptr = "Hello, World!";
  -        *val_len = strlen("Hello, World!");
  -        *val_size = 0;
  -        rc = VAR_OK;
  +    else if (   (strncasecmp(var_ptr, "msg.header.", strlen("msg.header.")) == 0)
  +             && (ctx->msg != NULL)
  +               ) {
  +        headerdata_t *hdI;
  +        int n;
  +        cp = str_dupex(var_ptr + strlen("msg.header."), var_len - strlen("msg.header.") + 1);
  +        n = strlen(cp);
  +        cp[n]= ':';
  +        cp[n + 1] = NUL;
  +        log2(ctx, DEBUG, "FIXME var_idx=%d, cp=%s", var_idx, cp);
  +        for (hdI = ctx->msg->hdFirst; hdI != NULL; hdI = hdI->next) { /* for each header */
  +            log1(ctx, DEBUG, "FIXME hdI->name=%s", hdI->name);
  +            if (hdI->name == NULL || strlen(hdI->name) == 0)
  +                continue; //FIXME header w/o name cannot happen normally
  +            if (strcmp(cp, hdI->name) == 0)
  +                break;
  +        }
  +        if (hdI != NULL) {
  +            log1(ctx, DEBUG, "FIXME hdI->ndata=%d", hdI->ndata);
  +            if ((var_idx == 0) && (hdI->ndata == 1)) { /* request first/only single value */
  +                *val_ptr = hdI->data.s;
  +                *val_len = strlen(hdI->data.s);
  +                *val_size = 0;
  +                rc = VAR_OK;
  +            }
  +            else if (var_idx < hdI->ndata) { /* request from multi value */
  +                *val_ptr = hdI->data.m[var_idx];
  +                *val_len = strlen(hdI->data.m[var_idx]);
  +                *val_size = 0;
  +                rc = VAR_OK;
  +            }
  +        }
  +        free(cp);
       }
       if (rc == VAR_OK)
           log4(ctx, DEBUG, "ctx_lookup variable \"%s\" (%d) ok: result is \"%s\" (%d)", var_ptr, var_len, *val_ptr, *val_len);

From ossp-cvs-owner@ossp.org  Thu Feb 28 15:07:43 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 907327642F; Thu, 28 Feb 2002 15:07:43 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c lmtp2nntp_main.c
Message-Id: <20020228140743.907327642F@mail.ossp.org>
Date: Thu, 28 Feb 2002 15:07:43 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   28-Feb-2002 15:07:43
  Branch: HEAD                             Handle: 2002022814074300

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c lmtp2nntp_main.c

  Log:
    headername comparisons must not be case sensitive

  Summary:
    Revision    Changes     Path
    1.61        +2  -2      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.44        +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.60 -r1.61 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	28 Feb 2002 14:02:25 -0000	1.60
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	28 Feb 2002 14:07:43 -0000	1.61
  @@ -1366,7 +1366,7 @@
                   //log2(msg, DEBUG, "FIXME trace loop hdI=%.8lx, hI->name=\"%s\"", hdI, hdI->name);
                   if (hdI->name == NULL || strlen(hdI->name) == 0 || hdI->ndata == 0)
                       continue;
  -                if (strcmp(cp, hdI->name) == 0)
  +                if (strcasecmp(cp, hdI->name) == 0)
                       break;
               }
   
  @@ -1663,7 +1663,7 @@
                   if (hdI->name == NULL || strlen(hdI->name) == 0)
                       continue; //FIXME header w/o name cannot happen normally
                   log2(ctx, DEBUG, "hrI->header=%s, hdI->name=%s", hrI->header, hdI->name);
  -                if (strcmp(hrI->header, hdI->name) == 0)
  +                if (strcasecmp(hrI->header, hdI->name) == 0)
                       break;
               }
               if (hdI != NULL) {
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.43 -r1.44 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	28 Feb 2002 14:02:26 -0000	1.43
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	28 Feb 2002 14:07:43 -0000	1.44
  @@ -236,7 +236,7 @@
               log1(ctx, DEBUG, "FIXME hdI->name=%s", hdI->name);
               if (hdI->name == NULL || strlen(hdI->name) == 0)
                   continue; //FIXME header w/o name cannot happen normally
  -            if (strcmp(cp, hdI->name) == 0)
  +            if (strcasecmp(cp, hdI->name) == 0)
                   break;
           }
           if (hdI != NULL) {

From ossp-cvs-owner@ossp.org  Thu Feb 28 15:58:08 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EFBBC7642F; Thu, 28 Feb 2002 15:58:07 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.pod var_play.c
Message-Id: <20020228145807.EFBBC7642F@mail.ossp.org>
Date: Thu, 28 Feb 2002 15:58:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   28-Feb-2002 15:58:07
  Branch: HEAD                             Handle: 2002022814580700

  Modified files:
    ossp-pkg/var            var.pod var_play.c

  Log:
    finish the API change Thomas started

  Summary:
    Revision    Changes     Path
    1.24        +10 -4      ossp-pkg/var/var.pod
    1.2         +1  -1      ossp-pkg/var/var_play.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.pod
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 var.pod
  --- ossp-pkg/var/var.pod	28 Feb 2002 11:40:46 -0000	1.23
  +++ ossp-pkg/var/var.pod	28 Feb 2002 14:58:07 -0000	1.24
  @@ -318,15 +318,21 @@
   functions. Such a callback function B<cb> has to be of the following
   prototype:
   
  -var_rc_t *B<cb>(void *I<ctx>, const char *I<var_ptr>, size_t
  -I<var_len>, int I<var_idx>, const char **I<val_ptr>, size_t *I<val_len>,
  -size_t *I<val_size>);
  +var_rc_t *B<cb>(var_t *I<var>, void *I<ctx>, const char *I<var_ptr>,
  +size_t I<var_len>, int I<var_idx>, const char **I<val_ptr>, size_t
  +*I<val_len>, size_t *I<val_size>);
   
   This function will be called by var_expand() internally whenever it has
   to resolve the contents of a variable. Its parameters are:
   
   =over 4
   
  +=item var_t *I<var>
  +
  +This is the passed-through argument as passed to var_expand() as the
  +first argument. This can be used in the callback function to distinguish
  +the expansion context or to resolve return codes, etc.
  +
   =item void *I<ctx>
   
   This is the passed-through argument as passed to var_config() on
  @@ -574,7 +580,7 @@
    #include "var.h"
    
    static var_rc_t lookup(
  -     void *ctx,
  +     var_t *var, void *ctx,
        const char  *var_ptr, size_t  var_len, int     var_idx,
        const char **val_ptr, size_t *val_len, size_t *val_size)
    {
  Index: ossp-pkg/var/var_play.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 var_play.c
  --- ossp-pkg/var/var_play.c	28 Feb 2002 08:08:16 -0000	1.1
  +++ ossp-pkg/var/var_play.c	28 Feb 2002 14:58:07 -0000	1.2
  @@ -6,7 +6,7 @@
   #include "var.h"
   
   static var_rc_t lookup(
  -    void *ctx,
  +    var_t *var, void *ctx,
       const char  *var_ptr, size_t  var_len, int     var_idx,
       const char **val_ptr, size_t *val_len, size_t *val_size)
   {

From ossp-cvs-owner@ossp.org  Thu Feb 28 16:21:03 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3F96E7642F; Thu, 28 Feb 2002 16:21:03 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c
Message-Id: <20020228152103.3F96E7642F@mail.ossp.org>
Date: Thu, 28 Feb 2002 16:21:03 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   28-Feb-2002 16:21:03
  Branch: HEAD                             Handle: 2002022815210200

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c

  Log:
    header now gets deleted when name or value is empty after expansion

  Summary:
    Revision    Changes     Path
    1.62        +28 -10     ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.61 -r1.62 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	28 Feb 2002 14:07:43 -0000	1.61
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	28 Feb 2002 15:21:02 -0000	1.62
  @@ -1589,15 +1589,22 @@
                           var_rc_t var_rc;
                           char *res_ptr;
                           log1(ctx, DEBUG, "expanding regex references in headername '%s'", hrI->header);
  -                        //if ((var_rc = var_expand(hrI->header, strlen(hrI->header), &res_ptr, NULL, regex_lookup, regex_ctx, &regex_lookup_cfg, FALSE)) != VAR_OK) {
                           if ((var_rc = var_expand(ctx->config_varregex, hrI->header, strlen(hrI->header), &res_ptr, NULL, FALSE)) != VAR_OK) {
                               log3(ctx, ERROR, "expansion of '%s' failed: %s", hrI->header, var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
                           }
                           log1(ctx, DEBUG, "expansion result '%s'", res_ptr);
  -                        hdNew->name = res_ptr; //FIXME rename ->header to ->name
  +                        if (strlen(res_ptr) == 0) {
  +                            log0(ctx, DEBUG, "marking deleted - emtpy headername");
  +                            hdNew->name = NULL; //FIXME rename ->header to ->name
  +                            /*FIXME clean up data.s and data.m */
  +                            hdNew->ndata = 0;
  +                        }
  +                        else {
  +                            hdNew->name = res_ptr; //FIXME rename ->header to ->name
  +                        }
                       }
                       if (hrI->val == NULL) {
  -                        log0(ctx, DEBUG, "marking deleted");
  +                        log0(ctx, DEBUG, "marking deleted - empty headervalue before expansion");
                           /*FIXME clean up data.s and data.m */
                           hdNew->ndata = 0;
                       }
  @@ -1607,7 +1614,6 @@
                               var_rc_t var_rc;
                               char *res_ptr;
                               log1(ctx, DEBUG, "expanding regex references in header value '%s'", hrI->val);
  -                            //if ((var_rc = var_expand(hrI->val, strlen(hrI->val), &res_ptr, NULL, regex_lookup, regex_ctx, &regex_lookup_cfg, FALSE)) != VAR_OK) {
                               if ((var_rc = var_expand(ctx->config_varregex, hrI->val, strlen(hrI->val), &res_ptr, NULL, FALSE)) != VAR_OK) {
                                   log3(ctx, ERROR, "expansion of '%s' failed: %s", hrI->val, var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
                               }
  @@ -1619,13 +1625,19 @@
                               var_rc_t var_rc;
                               char *res_ptr;
                               log1(ctx, DEBUG, "expanding variables in header value '%s'", hrI->val);
  -                            //if ((var_rc = var_expand(cp, strlen(cp), &res_ptr, NULL, ctx_lookup, ctx, &ctx_lookup_cfg, FALSE)) != VAR_OK) {
                               if ((var_rc = var_expand(ctx->config_varctx, cp, strlen(cp), &res_ptr, NULL, FALSE)) != VAR_OK) {
                                   log3(ctx, ERROR, "expansion of '%s' failed: %s", cp, var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
                               }
                               log1(ctx, DEBUG, "expansion result '%s'", res_ptr);
  -                            hdNew->data.s = res_ptr;
  -                            hdNew->ndata = 1;
  +                            if (strlen(res_ptr) == 0) {
  +                                log0(ctx, DEBUG, "marking deleted - empty headervalue after expansion");
  +                                /*FIXME clean up data.s and data.m */
  +                                hdNew->ndata = 0;
  +                            }
  +                            else {
  +                                hdNew->data.s = res_ptr;
  +                                hdNew->ndata = 1;
  +                            }
                           }
                       }
                       /*FIXME clean up data.m */
  @@ -1651,13 +1663,19 @@
                   var_rc_t var_rc;
                   char *res_ptr;
                   log1(ctx, DEBUG, "expanding variables in header value '%s'", hrI->val);
  -                //if ((var_rc = var_expand(cp, strlen(cp), &res_ptr, NULL, ctx_lookup, ctx, &ctx_lookup_cfg, FALSE)) != VAR_OK) {
                   if ((var_rc = var_expand(ctx->config_varctx, hrI->val, strlen(hrI->val), &res_ptr, NULL, FALSE)) != VAR_OK) {
                       log3(ctx, ERROR, "expansion of '%s' failed: %s", hrI->val, var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
                   }
                   log1(ctx, DEBUG, "expansion result '%s'", res_ptr);
  -                hdNew->data.s = res_ptr;
  -                hdNew->ndata = 1;
  +                if (strlen(res_ptr) == 0) {
  +                    log0(ctx, DEBUG, "marking deleted - empty headervalue after expansion");
  +                    /*FIXME clean up data.s and data.m */
  +                    hdNew->ndata = 0;
  +                }
  +                else {
  +                    hdNew->data.s = res_ptr;
  +                    hdNew->ndata = 1;
  +                }
               }
               for (hdI = ctx->msg->hdFirst; hdI != NULL; hdI = hdI->next) { /* for each header */
                   if (hdI->name == NULL || strlen(hdI->name) == 0)

From ossp-cvs-owner@ossp.org  Thu Feb 28 16:30:06 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 29CDF7642F; Thu, 28 Feb 2002 16:30:05 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc Makefile.in rc.c rc.h rc.pod rc_config.c rc_op...
Message-Id: <20020228153005.29CDF7642F@mail.ossp.org>
Date: Thu, 28 Feb 2002 16:30:05 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   28-Feb-2002 16:30:05
  Branch: HEAD                             Handle: 2002022815300400

  Modified files:
    ossp-pkg/rc             Makefile.in rc.c rc.h rc.pod rc_config.c
                            rc_option.c rc_private.h

  Log:
    Cleanup and structuring.

  Summary:
    Revision    Changes     Path
    1.16        +4  -4      ossp-pkg/rc/Makefile.in
    1.14        +5  -2      ossp-pkg/rc/rc.c
    1.11        +18 -9      ossp-pkg/rc/rc.h
    1.28        +4  -2      ossp-pkg/rc/rc.pod
    1.3         +19 -19     ossp-pkg/rc/rc_config.c
    1.4         +4  -124    ossp-pkg/rc/rc_option.c
    1.4         +4  -1      ossp-pkg/rc/rc_private.h
  ____________________________________________________________________________

  Index: ossp-pkg/rc/Makefile.in
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 Makefile.in
  --- ossp-pkg/rc/Makefile.in	13 Feb 2002 19:19:28 -0000	1.15
  +++ ossp-pkg/rc/Makefile.in	28 Feb 2002 15:30:04 -0000	1.16
  @@ -59,11 +59,11 @@
   TARGET_PROGS    = rc
   TARGET_MANS     = rc.1 rc-sample.5
   
  -SRCS            = rc.c rc_config.c rc_option.c rc_version.c\
  -                  rc_pcre.c rc_util.c
  +SRCS            = rc.c rc_config.c rc_optimpl.c rc_option.c\
  +                  rc_version.c rc_pcre.c rc_util.c
   
  -OBJS            = rc.o rc_config.o rc_option.o rc_version.o\
  -                  rc_pcre.o rc_util.o
  +OBJS            = rc.o rc_config.o rc_optimpl.o rc_option.o\
  +                  rc_version.o rc_pcre.o rc_util.o
   
   SUBDIRS         = @SUBDIR_EX@ @SUBDIR_VAR@ @SUBDIR_VAL@ @SUBDIR_STR@ @SUBDIR_POPT@
   
  Index: ossp-pkg/rc/rc.c
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 rc.c
  --- ossp-pkg/rc/rc.c	13 Feb 2002 19:19:28 -0000	1.13
  +++ ossp-pkg/rc/rc.c	28 Feb 2002 15:30:04 -0000	1.14
  @@ -33,6 +33,9 @@
   #include "rc.h"
   #include "rc_private.h"
   
  +/* Initialize our global OSSP ex library identifier */
  +const char g_szOSSPrc[] = "OSSP rc";
  +
   
   int main(int argc, char *argv[])
   {
  @@ -41,8 +44,8 @@
       rc_config_t *pConf = NULL;
   
       ex_try {
  -        configInit(&pConf);
  -        configFill(pConf, argc, argv);
  +        configConstruct(&pConf);
  +        configLoad(pConf, argc, argv);
       }
       ex_catch(Except) {
           bCaught = 1;
  Index: ossp-pkg/rc/rc.h
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 rc.h
  --- ossp-pkg/rc/rc.h	8 Feb 2002 18:36:40 -0000	1.10
  +++ ossp-pkg/rc/rc.h	28 Feb 2002 15:30:04 -0000	1.11
  @@ -45,9 +45,6 @@
   
   #include "rc_private.h"
   
  -/* Unique identifier to use with OSSP ex library */
  -extern const char ossprc_id[];
  -
   /* RC return codes */
   typedef enum {
       RC_OK,      /* Success                  */
  @@ -59,18 +56,30 @@
   } rc_return_t;
   
   /* Option function prototypes */
  -rc_return_t parseOpts(int, char **);
  -rc_return_t procOpts(char, char *);
  +rc_return_t optionProcess(void);
  +rc_return_t optionProcess(void);
  +
  +/* File option function prototypes */
  +rc_return_t foptParse(void);
  +rc_return_t foptProcess(void);
  +
  +/* Environment option function prototypes */
  +rc_return_t eoptParse(void);
  +rc_return_t eoptProcess(void);
  +
  +/* Command line option function prototypes */
  +rc_return_t coptParse(int);
  +rc_return_t coptProcess(char, char *);
   
   /* Config function prototypes */
  -rc_return_t configInit(rc_config_t **);
  -rc_return_t configFill(rc_config_t *, int, char **);
  +rc_return_t configConstruct(rc_config_t **);
  +rc_return_t configLoad(rc_config_t *, int, char **);
   rc_return_t configDestruct(rc_config_t *);
   
  -/* Util function prototypes   */
  +/* Utility (nonbounded) function prototypes */
   char *strErr(rc_return_t);
   
  -/* Other function prototypes  */
  +/* Other function prototypes */
   
   /*rc_result_t rc_Err              (void);
   rc_result_t rc_Warn             (void);
  Index: ossp-pkg/rc/rc.pod
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 rc.pod
  --- ossp-pkg/rc/rc.pod	4 Feb 2002 22:35:20 -0000	1.27
  +++ ossp-pkg/rc/rc.pod	28 Feb 2002 15:30:04 -0000	1.28
  @@ -49,6 +49,7 @@
   [B<-t>|B<--tmp> I<dir>]
   [B<-v>|B<--verbose>]
   [B<-x>|B<--exec>] 
  +
   [B<--RequireUmask umask>]
   [B<--RequireOwner uid|name>]
   [B<--RequireGroup gid|name>]
  @@ -61,8 +62,9 @@
   [B<--NameCommon> name]
   [B<--NameDefault> name]
   [B<--NameError> name]
  -I<rcfile>
  -I<section>
  +
  +I<<rcfile>>
  +I<<section[...]>>
   
   =head1 DESCRIPTION
   
  Index: ossp-pkg/rc/rc_config.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 rc_config.c
  --- ossp-pkg/rc/rc_config.c	13 Feb 2002 19:19:28 -0000	1.2
  +++ ossp-pkg/rc/rc_config.c	28 Feb 2002 15:30:04 -0000	1.3
  @@ -38,20 +38,20 @@
   
   
   /***************************************
  -* configInit(rc_config_t)              *
  -* Initialize a configuration           *
  +* configConstruct(rc_config_t)         *
  +* Construct a configuration            *
   ***************************************/
  -rc_return_t configInit(rc_config_t **ppConfig)
  +rc_return_t configConstruct(rc_config_t **ppConfig)
   {
       ex_t Except;
   
  -    *ppConfig = malloc(sizeof(rc_config_t));
  -    if (!*ppConfig)
  -        return(RC_THROW(RC_ERR_MEM));
  -
  -    ex_try {
  -        val_create(&(*ppConfig)->pVal);
  -    }
  +    *ppConfig = malloc(sizeof(rc_config_t));    /* Allocate the    */
  +    if (!*ppConfig)                             /* configuration's */
  +        return(RC_THROW(RC_ERR_MEM));           /* identity        */
  +
  +    ex_try {                                    /* Make a val instance  */
  +        val_create(&(*ppConfig)->pVal);         /* to hold individual   */
  +    }                                           /* configuration values */
       ex_catch(Except) {
           rethrow;
       }
  @@ -60,20 +60,20 @@
   }
   
   /************************************************
  -* configFill(rc_config_t, int, char **)         *
  -* Fill a configuration                          *
  +* configLoad(rc_config_t, int, char **)         *
  +* Load a configuration                          *
   ************************************************/
  -rc_return_t configFill(rc_config_t *pConfig, int argc, char *argv[])
  +rc_return_t configLoad(rc_config_t *pConfig, int argc, char *argv[])
   {
       ex_t Except;
       char *pTestopt = NULL;
       const char *pFuncpath = "/sfw/etc/rc.func";
   
  -    ex_try {
  +    ex_try {    /* Register and set configuration values */
           val_reg(pConfig->pVal, RC_FNC_NAME, VAL_TYPE_PTR, RC_FNC_DESC, NULL);
           val_set(pConfig->pVal, RC_FNC_NAME, pFuncpath);
           val_get(pConfig->pVal, RC_FNC_NAME, &pTestopt);
  -        fprintf(stderr, "%s\n", pTestopt);
  +        fprintf(stderr, "Hier!%s!\n", pTestopt);
       }
       ex_catch(Except) {
           rethrow;
  @@ -91,14 +91,14 @@
       ex_t Except;
   
       assert(pConfig);
  -    free(pConfig);
  +    free(pConfig);      /* Deallocate configuration */
  +    pConfig = NULL;     /* and clear its reference  */
   
       ex_try {
  -        val_destroy(pConfig->pVal);
  -    }
  +        val_destroy(pConfig->pVal); /* Destroy the val instance and assume */
  +    }                               /* that its reference is cleared also  */
       ex_catch(Except) {
           rethrow;
  -        return(RC_THROW(RC_ERR_INT));
       }
   
       return(RC_THROW(RC_OK));
  Index: ossp-pkg/rc/rc_option.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 rc_option.c
  --- ossp-pkg/rc/rc_option.c	13 Feb 2002 19:19:28 -0000	1.3
  +++ ossp-pkg/rc/rc_option.c	28 Feb 2002 15:30:04 -0000	1.4
  @@ -31,136 +31,16 @@
   
   #include "rc.h"
   #include "rc_private.h"
  -#include "rc_option.h"  /* Option operations rely on popt */
  -#include "rc_const.h"   /* Strings and other constants    */
   
  -/* Third party headers for libraries linked in       */
  -#include "popt.h"       /* OSSP popt options library */
   
  -/* Unique identifier to use with OSSP ex library     */
  -const char ossprc_id[] = "OSSP rc";
  -
  -
  -/* Loops through available options and fills a configuration if encountered */
  -rc_return_t procOpts(char cOpt, char *pcCLI)
  +/* Loop through available options */
  +rc_return_t optionProcess(void)
   {
  -    int  nPos = 0;  /* For tracking options */
  -
  -    switch (cOpt) {
  -    case 'h':
  -        pcCLI[nPos++] = 'h';
  -        break;
  -    case 'V':
  -        pcCLI[nPos++] = 'V';
  -        break;
  -    case 'i':
  -        pcCLI[nPos++] = 'i';
  -        break;
  -    case 'q':
  -        pcCLI[nPos++] = 'q';
  -        break;
  -    }
  -
       return(RC_THROW(RC_OK));
   }
   
  -rc_return_t parseOpts(int argc, char *argv[])
  +/* Parse command line options */
  +rc_return_t optionParse(void)
   {
  -    ex_t Except;
  -    int  bCaught = 0;
  -    char pcBuf[BUFSIZ+1];
  -    int  nBufpos = 0;           /* For tracking options           */
  -    char cOpt = 0;              /* For argument parsing           */
  -    char *szCLIBuf = NULL;
  -    int  nIter = 0;
  -    popt_context optCon;        /* Context for parsing options    */
  -
  -    struct popt_option optionsTable[] = {
  -        /* Long options with short keys but no arguments */
  -        { RC_USE_NAME, '?', POPT_ARG_NONE,   0, RC_USE_VAL, RC_USE_DESC, NULL },
  -        { RC_DBG_NAME, 'd', POPT_ARG_NONE,   0, RC_DBG_VAL, RC_DBG_DESC, NULL },
  -        { RC_VER_NAME, 'V', POPT_ARG_NONE,   0, RC_VER_VAL, RC_VER_DESC, NULL },
  -        { RC_EVL_NAME, 'e', POPT_ARG_NONE,   0, RC_EVL_VAL, RC_EVL_DESC, NULL },
  -        { RC_HLP_NAME, 'h', POPT_ARG_NONE,   0, RC_HLP_VAL, RC_HLP_DESC, NULL },
  -        { RC_INF_NAME, 'i', POPT_ARG_NONE,   0, RC_INF_VAL, RC_INF_DESC, NULL },
  -        { RC_LBL_NAME, 'l', POPT_ARG_NONE,   0, RC_LBL_VAL, RC_LBL_DESC, NULL },
  -        { RC_PRN_NAME, 'p', POPT_ARG_NONE,   0, RC_PRN_VAL, RC_PRN_DESC, NULL },
  -        { RC_SIL_NAME, 's', POPT_ARG_NONE,   0, RC_SIL_VAL, RC_SIL_DESC, NULL },
  -        { RC_RAW_NAME, 'r', POPT_ARG_NONE,   0, RC_RAW_VAL, RC_RAW_DESC, NULL },
  -        { RC_VRB_NAME, 'v', POPT_ARG_NONE,   0, RC_VRB_VAL, RC_VRB_DESC, NULL },
  -        { RC_EXC_NAME, 'x', POPT_ARG_NONE,   0, RC_EXC_VAL, RC_EXC_DESC, NULL },
  -                                              
  -        /* Single argument long options with short keys */
  -        {RC_LOC_NAME, 'L', POPT_ARG_STRING, 0, RC_LOC_VAL, RC_LOC_DESC, "regx"},
  -        {RC_CNF_NAME, 'c', POPT_ARG_STRING, 0, RC_CNF_VAL, RC_CNF_DESC, "path"},
  -        {RC_FNC_NAME, 'f', POPT_ARG_STRING, 0, RC_FNC_VAL, RC_FNC_DESC, "path"},
  -        {RC_QRY_NAME, 'q', POPT_ARG_STRING, 0, RC_QRY_VAL, RC_QRY_DESC, "varx"},
  -        {RC_TMP_NAME, 't', POPT_ARG_STRING, 0, RC_TMP_VAL, RC_TMP_DESC, "path"},
  -
  -        /* Single argument long options without short keys */
  -        { RC_OWN_NAME, 0, POPT_ARG_STRING, 0, RC_OWN_VAL, RC_OWN_DESC, "user" },
  -        { RC_GRP_NAME, 0, POPT_ARG_STRING, 0, RC_GRP_VAL, RC_GRP_DESC, "group"},
  -        { RC_MSK_NAME, 0, POPT_ARG_INT,    0, RC_MSK_VAL, RC_MSK_DESC, "umask"},
  -        { RC_ASS_NAME, 0, POPT_ARG_STRING, 0, RC_ASS_VAL, RC_ASS_DESC, "regx" },
  -        { RC_DEF_NAME, 0, POPT_ARG_STRING, 0, RC_DEF_VAL, RC_DEF_DESC, "regx" },
  -        { RC_REF_NAME, 0, POPT_ARG_STRING, 0, RC_REF_VAL, RC_REF_DESC, "regx" },
  -        { RC_PRM_NAME, 0, POPT_ARG_STRING, 0, RC_PRM_VAL, RC_PRM_DESC, "regx" },
  -        { RC_TRM_NAME, 0, POPT_ARG_STRING, 0, RC_TRM_VAL, RC_TRM_DESC, "regx" },
  -        { RC_NCF_NAME, 0, POPT_ARG_STRING, 0, RC_NCF_VAL, RC_NCF_DESC, "name" },
  -        { RC_CMN_NAME, 0, POPT_ARG_STRING, 0, RC_CMN_VAL, RC_CMN_DESC, "name" },
  -        { RC_DFL_NAME, 0, POPT_ARG_STRING, 0, RC_DFL_VAL, RC_DFL_DESC, "name" },
  -        { RC_ERR_NAME, 0, POPT_ARG_STRING, 0, RC_ERR_VAL, RC_ERR_DESC, "name" },
  -
  -        POPT_AUTOHELP
  -        { NULL, 0, 0, NULL, 0 }
  -    };
  -
  -    optCon = popt_getcontext(NULL, argc, (const char **)argv, optionsTable, 0);
  -    popt_setotheroptionhelp(optCon, "[options] <rcfile> <sections [args]>");
  -
  -    if (argc < 2) {
  -        popt_printusage(optCon, stderr, 0);
  -        return(RC_THROW(RC_ERR_USE));
  -    }
  -
  -    /* Now do options processing */
  -    while ((cOpt = popt_getnextopt(optCon)) >= 0)
  -    ex_try {
  -        procOpts(cOpt, pcBuf);
  -    }
  -    ex_catch(Except) {
  -        if ((rc_return_t)Except.ex_value != RC_ERR_USE)
  -            fprintf(stderr, "Nonusage exception: %d\n",\
  -                (rc_return_t)Except.ex_value);
  -        bCaught = 1;
  -        fprintf(stderr, "Class '%s' threw exception %d in %s:%s():%d.\n",\
  -                (char *)Except.ex_class, *(int *)Except.ex_value,\
  -                Except.ex_file, Except.ex_func, Except.ex_line);
  -    }
  -    if (!bCaught)
  -        fprintf(stderr, "parseOpts: No exceptions caught.\n");
  -
  -    szCLIBuf = (char *)popt_getarg(optCon);
  -    if ((szCLIBuf == NULL)) {
  -        fprintf(stderr, "Please specify at least one rcfile and section.\n");
  -        popt_printusage(optCon, stderr, 0);
  -        return(RC_THROW(RC_ERR_USE));
  -    }
  -
  -    if (cOpt < -1) {
  -        /* An error occurred during option processing */
  -        fprintf(stderr, "%s: %s\n",
  -                popt_badoption(optCon, POPT_BADOPTION_NOALIAS),
  -                popt_strerror(cOpt));
  -        return(RC_THROW(RC_ERR_INT));
  -    }
  -
  -    /* Print out options, szCLIBuf chosen */
  -    fprintf(stderr, "Options chosen: ");
  -    for (nIter = 0; nIter < nBufpos ; nIter++)
  -        fprintf(stderr, "-%c ", pcBuf[nIter]);
  -    fprintf(stderr, "\nRun these commands: %s\n", szCLIBuf);
  -
  -    popt_freecontext(optCon);
       return(RC_THROW(RC_OK));
   }
  Index: ossp-pkg/rc/rc_private.h
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 rc_private.h
  --- ossp-pkg/rc/rc_private.h	13 Feb 2002 19:19:28 -0000	1.3
  +++ ossp-pkg/rc/rc_private.h	28 Feb 2002 15:30:04 -0000	1.4
  @@ -48,11 +48,14 @@
   #include "dmalloc.h"
   #endif
   
  +/* GUID to use with OSSP ex library */
  +const char g_szOSSPrc[];
  +
   /* Define the ability to throw OSSP ex exceptions       */
   #include "ex.h" /* OSSP ex exception handling library   */
   #define RC_THROW(rv) \
       ((rv) != RC_OK && (ex_catching && !ex_shielding) \
  -     ? (ex_throw(ossprc_id, NULL, (rv)), (rv)) : (rv))
  +     ? (ex_throw(g_szOSSPrc, NULL, (rv)), (rv)) : (rv))
   
   #include "val.h"
   

From ossp-cvs-owner@ossp.org  Thu Feb 28 16:31:55 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 494A57642F; Thu, 28 Feb 2002 16:31:55 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc_optimpl.c
Message-Id: <20020228153155.494A57642F@mail.ossp.org>
Date: Thu, 28 Feb 2002 16:31:55 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   28-Feb-2002 16:31:55
  Branch: HEAD                             Handle: 2002022815315400

  Added files:
    ossp-pkg/rc             rc_optimpl.c

  Log:
    Implementation of fopt (file), eopt (environment), and copt (command line).

  Summary:
    Revision    Changes     Path
    1.1         +151 -0     ossp-pkg/rc/rc_optimpl.c
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc_optimpl.c
  ============================================================
  $ cvs update -p -r1.1 rc_optimpl.c
  /*  rc - OSSP Run-command processor
  **  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2002 Ralf S. Engelschall
  **
  **  This file is part of OSSP rc, a portable Run-command processor
  **  which can be found at http://www.ossp.org/pkg/rc/
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  rc_optimpl.c: Run-command processor ISO C source file
  */
  
  #include "rc.h"
  #include "rc_private.h"
  #include "rc_option.h"  /* Option methods rely on popt */
  #include "rc_const.h"   /* Strings and other constants */
  
  /* Third party headers for libraries linked in         */
  #include "popt.h"       /* OSSP popt options library   */
  
  
  /* Loop through available options */
  rc_return_t foptProcess(char cOpt)
  {
      switch (cOpt) {
      case 'h':
          break;
      case 'V':
          break;
      case 'i':
          break;
      case 'q':
          break;
      }
  
      return(RC_THROW(RC_OK));
  }
  
  /* Parse command line options */
  rc_return_t coptParse(int argc, char *argv[])
  {
      ex_t Except;
      int  bCaught = 0;
      int  nBufpos = 0;           /* For tracking options           */
      char cOpt = 0;              /* For argument parsing           */
      char *szCLIBuf = NULL;
      int  nIter = 0;
      popt_context optCon;        /* Context for parsing options    */
  
      struct popt_option optionsTable[] = {
          /* Long options with short keys but no arguments */
          { RC_USE_NAME, '?', POPT_ARG_NONE,   0, RC_USE_VAL, RC_USE_DESC, NULL },
          { RC_DBG_NAME, 'd', POPT_ARG_NONE,   0, RC_DBG_VAL, RC_DBG_DESC, NULL },
          { RC_VER_NAME, 'V', POPT_ARG_NONE,   0, RC_VER_VAL, RC_VER_DESC, NULL },
          { RC_EVL_NAME, 'e', POPT_ARG_NONE,   0, RC_EVL_VAL, RC_EVL_DESC, NULL },
          { RC_HLP_NAME, 'h', POPT_ARG_NONE,   0, RC_HLP_VAL, RC_HLP_DESC, NULL },
          { RC_INF_NAME, 'i', POPT_ARG_NONE,   0, RC_INF_VAL, RC_INF_DESC, NULL },
          { RC_LBL_NAME, 'l', POPT_ARG_NONE,   0, RC_LBL_VAL, RC_LBL_DESC, NULL },
          { RC_PRN_NAME, 'p', POPT_ARG_NONE,   0, RC_PRN_VAL, RC_PRN_DESC, NULL },
          { RC_SIL_NAME, 's', POPT_ARG_NONE,   0, RC_SIL_VAL, RC_SIL_DESC, NULL },
          { RC_RAW_NAME, 'r', POPT_ARG_NONE,   0, RC_RAW_VAL, RC_RAW_DESC, NULL },
          { RC_VRB_NAME, 'v', POPT_ARG_NONE,   0, RC_VRB_VAL, RC_VRB_DESC, NULL },
          { RC_EXC_NAME, 'x', POPT_ARG_NONE,   0, RC_EXC_VAL, RC_EXC_DESC, NULL },
                                                
          /* Single argument long options with short keys */
          {RC_LOC_NAME, 'L', POPT_ARG_STRING, 0, RC_LOC_VAL, RC_LOC_DESC, "regx"},
          {RC_CNF_NAME, 'c', POPT_ARG_STRING, 0, RC_CNF_VAL, RC_CNF_DESC, "path"},
          {RC_FNC_NAME, 'f', POPT_ARG_STRING, 0, RC_FNC_VAL, RC_FNC_DESC, "path"},
          {RC_QRY_NAME, 'q', POPT_ARG_STRING, 0, RC_QRY_VAL, RC_QRY_DESC, "varx"},
          {RC_TMP_NAME, 't', POPT_ARG_STRING, 0, RC_TMP_VAL, RC_TMP_DESC, "path"},
  
          /* Single argument long options without short keys */
          { RC_OWN_NAME, 0, POPT_ARG_STRING, 0, RC_OWN_VAL, RC_OWN_DESC, "user" },
          { RC_GRP_NAME, 0, POPT_ARG_STRING, 0, RC_GRP_VAL, RC_GRP_DESC, "group"},
          { RC_MSK_NAME, 0, POPT_ARG_INT,    0, RC_MSK_VAL, RC_MSK_DESC, "umask"},
          { RC_ASS_NAME, 0, POPT_ARG_STRING, 0, RC_ASS_VAL, RC_ASS_DESC, "regx" },
          { RC_DEF_NAME, 0, POPT_ARG_STRING, 0, RC_DEF_VAL, RC_DEF_DESC, "regx" },
          { RC_REF_NAME, 0, POPT_ARG_STRING, 0, RC_REF_VAL, RC_REF_DESC, "regx" },
          { RC_PRM_NAME, 0, POPT_ARG_STRING, 0, RC_PRM_VAL, RC_PRM_DESC, "regx" },
          { RC_TRM_NAME, 0, POPT_ARG_STRING, 0, RC_TRM_VAL, RC_TRM_DESC, "regx" },
          { RC_NCF_NAME, 0, POPT_ARG_STRING, 0, RC_NCF_VAL, RC_NCF_DESC, "name" },
          { RC_CMN_NAME, 0, POPT_ARG_STRING, 0, RC_CMN_VAL, RC_CMN_DESC, "name" },
          { RC_DFL_NAME, 0, POPT_ARG_STRING, 0, RC_DFL_VAL, RC_DFL_DESC, "name" },
          { RC_ERR_NAME, 0, POPT_ARG_STRING, 0, RC_ERR_VAL, RC_ERR_DESC, "name" },
  
          POPT_AUTOHELP
          { NULL, 0, 0, NULL, 0 }
      };
  
      optCon = popt_getcontext(NULL, argc, (const char **)argv, optionsTable, 0);
      popt_setotheroptionhelp(optCon, "[options] <rcfile> <sections [args]>");
  
      if (argc < 2) {
          popt_printusage(optCon, stderr, 0);
          return(RC_THROW(RC_ERR_USE));
      }
  
      /* Now do options processing */
      while ((cOpt = popt_getnextopt(optCon)) >= 0)
      ex_try {
          foptProcess(cOpt);
      }
      ex_catch(Except) {
          if ((rc_return_t)Except.ex_value != RC_ERR_USE)
              fprintf(stderr, "Nonusage exception: %d\n",\
                  (rc_return_t)Except.ex_value);
          bCaught = 1;
          fprintf(stderr, "Class '%s' threw exception %d in %s:%s():%d.\n",\
                  (char *)Except.ex_class, *(int *)Except.ex_value,\
                  Except.ex_file, Except.ex_func, Except.ex_line);
      }
      if (!bCaught)
          fprintf(stderr, "parseOpts: No exceptions caught.\n");
  
      szCLIBuf = (char *)popt_getarg(optCon);
      if ((szCLIBuf == NULL)) {
          fprintf(stderr, "Please specify at least one rcfile and section.\n");
          popt_printusage(optCon, stderr, 0);
          return(RC_THROW(RC_ERR_USE));
      }
  
      if (cOpt < -1) {
          /* An error occurred during option processing */
          fprintf(stderr, "%s: %s\n",
                  popt_badoption(optCon, POPT_BADOPTION_NOALIAS),
                  popt_strerror(cOpt));
          return(RC_THROW(RC_ERR_INT));
      }
  
      fprintf(stderr, "\nRun these commands: %s\n", szCLIBuf);
      popt_freecontext(optCon);
      return(RC_THROW(RC_OK));
  }
  

From ossp-cvs-owner@ossp.org  Thu Feb 28 16:57:10 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3FAF27642F; Thu, 28 Feb 2002 16:57:10 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c lmtp2nntp_main.c
Message-Id: <20020228155710.3FAF27642F@mail.ossp.org>
Date: Thu, 28 Feb 2002 16:57:10 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   28-Feb-2002 16:57:10
  Branch: HEAD                             Handle: 2002022815570900

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c lmtp2nntp_main.c

  Log:
    wipe out some debug stuff, reducing FIXMEs

  Summary:
    Revision    Changes     Path
    1.63        +3  -223    ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.45        +1  -77     ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.62 -r1.63 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	28 Feb 2002 15:21:02 -0000	1.62
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	28 Feb 2002 15:57:09 -0000	1.63
  @@ -104,30 +104,10 @@
       return L2_OK;
   }
   
  -static void headersimulation(lmtp2nntp_t *); //FIXME
   static void msg_headermatrixbuildup(msg_t *msg);
   static void msg_headermatrixteardwn(msg_t *msg);
   static void headerrewrite(lmtp2nntp_t *ctx);
   
  -static void extest(void)
  -{
  -    ex_t ex;
  -
  -    try {
  -        fprintf(stderr, "try\n");
  -        throw(0,0,0);
  -    }
  -    cleanup {
  -        fprintf(stderr, "cleanup\n");
  -    }
  -    catch (ex) {
  -        fprintf(stderr, "catch\n");
  -        rethrow;
  -    }
  -    exit(0);
  -
  -}
  -
   static var_syntax_t syntax_regex = {
       '\\',         /* escape        */ 
       '$',          /* varinit       */ 
  @@ -146,8 +126,6 @@
       //char *cp;
       int rc;
   
  -    //FIXME ex is broken!?  extest();
  -
       /* create L2 environment */
       if (l2_env_create(&ctx->l2_env) != L2_OK) {
           fprintf(stderr, "%s:Error: failed to create L2 environment\n", ctx->progname);
  @@ -599,7 +577,6 @@
                       hrNew->pcreRegex = NULL;
                       hrNew->pcreExtra = NULL;
                       
  -                    //FIXME cp = hrNew->carve = strdupex(cp);
                       /* priority */
                       cpP = cp;
                       if ((cp = strchr(cp, ':')) == NULL) {
  @@ -1167,86 +1144,10 @@
       }
       catch (ex)
           rethrow;
  -
  -
  -#if 0
  -//void testpcre(void)
  -{
  -    char       *szRegex;
  -    pcre       *pcreRegex;
  -    pcre_extra *pcreExtra;
  -    const char *szError;
  -    int         nErrorOffset;
  -    int         iCheck;
  -    int         opt;
  -    char       *buf;
  -    int         buf_size;
  -#define OVECSIZE 30
  -    int         ovec[OVECSIZE];
  -    int         i;
  -    const char **cpList;
  -
  -    //     0         1         2
  -    //     012345678901234567890
  -    buf = "In-Reply-To: MailTo: Tom & Jerry";
  -    buf_size = strlen(buf);
  -    szRegex = "(To|Cc|Bcc):.*(Tom|Snoopy).+&(.*)";
  -    fprintf(stderr, "DEBUG:          0         1         2         3         4\n");
  -    fprintf(stderr, "DEBUG:          01234567890123456789012345678901234567890\n");
  -    fprintf(stderr, "DEBUG: buf    =\"%s\"\n", buf);
  -    fprintf(stderr, "DEBUG: szRegex=\"%s\"\n", szRegex);
  -    /*
  -    buf = "In-Reply-To: MailTo: Tom & Jerry";
  -    szRegex = "(To|Cc|Bcc):.*(Tom|Snoopy).+&(.*)";
  -    iCheck=4 [0]="To: MailTo: Tom & Jerry" [1]="To" [2]="Tom" [3]=" Jerry"
  -    */
  -
  -    /* compile regular expression into finite state machine */
  -    opt = 0;
  -    // opt |= PCRE_CASELESS;
  -    // opt |= PCRE_ANCHORED;
  -    if ((pcreRegex = pcre_compile(szRegex, opt, &szError, &nErrorOffset, NULL)) == NULL) {
  -        fprintf(stderr, "DEBUG: \"%s\" '%c'\n", szError, szRegex[nErrorOffset]);
  -        throw(0,0,0);
  -    }
  -    /* study finite state machine for more performance */
  -    pcreExtra = pcre_study(pcreRegex, 0, &szError);
  -    if (szError != NULL) {
  -        free(pcreRegex);
  -        pcreRegex = NULL;
  -        fprintf(stderr, "DEBUG: \"%s\"\n", szError);
  -        throw(0,0,0);
  -    }
  -
  -    /* apply filter */
  -    iCheck = pcre_exec(pcreRegex, pcreExtra, buf, buf_size, 0, 0, ovec, OVECSIZE);
  -    fprintf(stderr, "DEBUG: iCheck=%d\n", iCheck);
  -    for (i = 0; i < iCheck; i++)
  -        fprintf(stderr, "DEBUG: ovec[%d]=%3d, ovec[%d]=%3d\n", 2*i, ovec[2*i], 2*i+1, ovec[2*i+1]);
  -        
  -
  -    pcre_get_substring_list(buf, ovec, iCheck, &cpList);
  -    if (cpList != NULL)
  -        for (i = 0; i < iCheck; i++)
  -            fprintf(stderr, "DEBUG: list[%d]=\"%s\"\n", i, cpList[i] == NULL ? "(NULL)" : cpList[i]);
  -
  -    /* destroy channel configuration */
  -    if (cpList != NULL)
  -        pcre_free_substring_list(cpList);
  -    if (pcreRegex != NULL)
  -        free(pcreRegex);
  -    if (pcreExtra != NULL)
  -        free(pcreExtra);
  -
  -}
  -#endif
  -
   CUS:
       return;
   }
   
  -
  -
   static void headerdestroy(headerdata_t *hdC)
   {
       int i;
  @@ -1265,9 +1166,9 @@
       if (hdC->name != NULL)
           free(hdC->name);
       if (hdC->prev != NULL && hdC->prev->next == hdC)
  -        return; //FIXME still linked, cannot be destroyed
  +        throw(0,0,0);
       if (hdC->next != NULL && hdC->next->prev == hdC)
  -        return; //FIXME still linked, cannot be destroyed
  +        throw(0,0,0);
       free(hdC);
   }
   
  @@ -1359,11 +1260,9 @@
   
           cp = NULL;
           while ((cp = argz_next(msg->azHeaders, msg->asHeaders, cp)) != NULL) { /* for each message header */
  -            //log2(msg, DEBUG, "FIXME trace loop cp=%.8lx, cp=\"%s\"", cp, cp);
   
               /*FIXME we want O(1) here */
               for (hdP = NULL, hdI = msg->hdFirst; hdI != NULL; hdP = hdI, hdI = hdI->next) { /* for each matrix header */
  -                //log2(msg, DEBUG, "FIXME trace loop hdI=%.8lx, hI->name=\"%s\"", hdI, hdI->name);
                   if (hdI->name == NULL || strlen(hdI->name) == 0 || hdI->ndata == 0)
                       continue;
                   if (strcasecmp(cp, hdI->name) == 0)
  @@ -1404,23 +1303,6 @@
                   hdI->data.m[hdI->ndata] = NULL;
               }
           }
  -#if 0
  -        { //FIXME debug code block
  -            int i;
  -            headerdata_t *hdD;
  -
  -            log0(msg, DEBUG, "FIXME trace ---------- msg_headermatrixbuildup() ----------");
  -            for (hdD = msg->hdFirst; hdD != NULL; hdD = hdD->next) {
  -                if (hdD->ndata == 0)
  -                    log1(msg, DEBUG, "hdD->name=%s: (NO DATA)", hdD->name);
  -                if (hdD->ndata == 1)
  -                    log2(msg, DEBUG, "hdD->name:hdD->data.s    %s %s", hdD->name, hdD->data.s);
  -                if (hdD->ndata > 1)
  -                    for (i = 0; i < hdD->ndata; i++)
  -                        log3(msg, DEBUG, "hdD->name:hdD->data.m[%d] %s %s", i, hdD->name, hdD->data.m[i]);
  -            }
  -        }
  -#endif
       }
       cleanup {
           if (hdNew != NULL)
  @@ -1463,57 +1345,16 @@
                   }
               }
           }
  -#if 0
  -        { //FIXME debug code block
  -            int i;
  -            headerdata_t *hdD;
  -
  -            log0(msg, DEBUG, "FIXME trace ---------- msg_headermatrixteardwn() ----------");
  -            for (hdD = msg->hdFirst; hdD != NULL; hdD = hdD->next) {
  -                if (hdD->ndata == 0)
  -                    log1(msg, DEBUG, "hdD->name=%s: (NO DATA)", hdD->name);
  -                if (hdD->ndata == 1)
  -                    log2(msg, DEBUG, "hdD->name:hdD->data.s    %s %s", hdD->name, hdD->data.s);
  -                if (hdD->ndata > 1)
  -                    for (i = 0; i < hdD->ndata; i++)
  -                        log3(msg, DEBUG, "hdD->name:hdD->data.m[%d] %s %s", i, hdD->name, hdD->data.m[i]);
  -            }
  -        }
  -#endif
       }
       catch(ex) {
           rethrow;
       }
   }
   
  -
   static void headerrewrite(lmtp2nntp_t *ctx)
   {
       headerrule_t *hrI;
       headerdata_t *hdI, *hdNew;
  -    /*
  -    char *cp;
  -    int i;
  -    char *cpPri;
  -    char *cpRegex;
  -    char *cpHeader;
  -    char *cpVal;
  -    headerrule_t *hrP;
  -    hrNew->pri    = atoi(cpPri);
  -    hrNew->regex  = cpRegex;
  -    hrNew->header = cpHeader;
  -    hrNew->val    = cpVal;
  -    char       *szRegex;
  -    pcre       *pcreRegex;
  -    pcre_extra *pcreExtra;
  -    const char *szError;
  -    int         nErrorOffset;
  -    int         opt;
  -    char       *buf;
  -    int         buf_size;
  -    int         ovec[OVECSIZE];
  -    const char **cpList;
  -    */
       regex_ctx_t *regex_ctx;
   #define OVECSIZE 30
       int            ovec[OVECSIZE];
  @@ -1548,7 +1389,6 @@
           throw(0,0,0);
       }
       for (hrI = ctx->option_firstheaderrule; hrI != NULL; hrI = hrI->next) { /* for each rule */
  -        //log1(ctx, DEBUG, "FIXME trace loop hrI=%.8lx", hrI);
           { //FIXME debug code block
               int i;
               headerrule_t *hrD;
  @@ -1571,7 +1411,6 @@
           if (hrI->regex != NULL) {
               log1(ctx, DEBUG, "rule has regex %s", hrI->regex);
               for (hdI = ctx->msg->hdFirst; hdI != NULL; hdI = hdI->next) { /* for each header */
  -                //log2(ctx, DEBUG, "FIXME trace loop hdI=%.8lx, hI->name=\"%s\"", hdI, hdI->name);
                   if (hdI->name == NULL || strlen(hdI->name) == 0 || hdI->ndata == 0)
                       continue;
                   regex_ctx->nMatch = pcre_exec(hrI->pcreRegex, hrI->pcreExtra, hdI->name, strlen(hdI->name), 0, 0, ovec, OVECSIZE);
  @@ -1679,20 +1518,14 @@
               }
               for (hdI = ctx->msg->hdFirst; hdI != NULL; hdI = hdI->next) { /* for each header */
                   if (hdI->name == NULL || strlen(hdI->name) == 0)
  -                    continue; //FIXME header w/o name cannot happen normally
  +                    continue;
                   log2(ctx, DEBUG, "hrI->header=%s, hdI->name=%s", hrI->header, hdI->name);
                   if (strcasecmp(hrI->header, hdI->name) == 0)
                       break;
               }
               if (hdI != NULL) {
                   log1(ctx, DEBUG, "replacing header %s", hrI->header);
  -                log3(ctx, DEBUG, "ctx->msg->hdFirst=%.8lx, hdI      =%.8lx, hdNew      =%.8lx", ctx->msg->hdFirst, hdI, hdNew);
  -                log2(ctx, DEBUG, "                            hdI->prev=%.8lx, hdNew->prev=%.8lx", hdI->prev, hdNew->prev);
  -                log2(ctx, DEBUG, "                            hdI->next=%.8lx, hdNew->next=%.8lx", hdI->next, hdNew->next);
                   headerreplace(hdI, hdNew);
  -                log3(ctx, DEBUG, "ctx->msg->hdFirst=%.8lx, hdI      =%.8lx, hdNew      =%.8lx", ctx->msg->hdFirst, hdI, hdNew);
  -                log2(ctx, DEBUG, "                            hdI->prev=%.8lx, hdNew->prev=%.8lx", hdI->prev, hdNew->prev);
  -                log2(ctx, DEBUG, "                            hdI->next=%.8lx, hdNew->next=%.8lx", hdI->next, hdNew->next);
                   if (hdNew->prev == NULL) {
                       log0(ctx, DEBUG, "FIXME trace #1");
                       ctx->msg->hdFirst = hdNew;
  @@ -1725,57 +1558,4 @@
                       log3(ctx, DEBUG, "hdD->name:hdD->data.m[%d] %s %s", i, hdD->name, hdD->data.m[i]);
           }
       }
  -}
  -
  -static void headersimulation(lmtp2nntp_t *ctx)
  -{
  -    headerdata_t *hdI, *hdNew;
  -    char *replyto[4] = { "foo@example.com", "bar@example.com", "quux@example.com", NULL };
  -
  -    log0(ctx, DEBUG, "FIXME simulation - GO");
  -
  -    ctx->msg = msg_create();
  -
  -    hdNew = headercreate();
  -    hdNew->name = "To";
  -    hdNew->data.s = "foo@invalid.com";
  -    hdNew->ndata = 1;
  -    ctx->msg->hdFirst = hdNew;
  -    hdNew->prev = NULL;
  -    hdI = hdNew;
  -
  -    hdNew = headercreate();
  -    hdNew->name = "Reply-To";
  -    hdNew->data.m = replyto;
  -    hdNew->ndata = 3;
  -    hdI->next = hdNew;
  -    hdNew->prev = hdI;
  -    hdI = hdNew;
  -
  -    hdNew = headercreate();
  -    hdNew->name = "Subject";
  -    hdNew->data.s = "a tiny little test";
  -    hdNew->ndata = 1;
  -    hdI->next = hdNew;
  -    hdNew->prev = hdI;
  -    hdI = hdNew;
  -
  -    hdNew = headercreate();
  -    hdNew->name = "Date";
  -    hdNew->data.s = "Mon, 18 Feb 2002 09:43:52 +0100";
  -    hdNew->ndata = 1;
  -    hdI->next = hdNew;
  -    hdNew->prev = hdI;
  -    hdI = hdNew;
  -
  -    hdNew = headercreate();
  -    hdNew->name = "Message-ID";
  -    hdNew->data.s = "<200201172300.AAA29400@procter012.pg-cw.de>";
  -    hdNew->ndata = 1;
  -    hdI->next = hdNew;
  -    hdNew->prev = hdI;
  -    hdI = hdNew;
  -
  -    hdI->next = NULL;
  -    headerrewrite(ctx);
   }
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.44 -r1.45 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	28 Feb 2002 14:07:43 -0000	1.44
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	28 Feb 2002 15:57:09 -0000	1.45
  @@ -126,64 +126,6 @@
       "a-zA-Z0-9.-" /* namechars     */ 
   };
   
  -#if 0
  -static var_rc_t ctx_lookup(
  -    void *_ctx, 
  -    const char *var_ptr, size_t var_len, int var_idx,
  -    const char **val_ptr, size_t *val_len, size_t *val_size)
  -{
  -    lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx;
  -    const char *name;
  -    size_t len;
  -    char *cp;
  -    var_rc_t rc;
  -
  -    log2(ctx, DEBUG, "lookup variable \"%s\" (%d)", 
  -         var_ptr /* FIXME: NUL-termination? */, var_len);
  -    rc = VAR_ERR_UNDEFINED_VARIABLE;
  -    if (strncasecmp(var_ptr, "lmtp2nntp.version", var_len) == 0) {
  -    }
  -    else if (strncasecmp(var_ptr, "os.name", var_len) == 0) {
  -    }
  -    else if (strncasecmp(var_ptr, "os.version", var_len) == 0) {
  -    }
  -    else if (var_len > 8 && strncasecmp(var_ptr, "msg.hdr.", 8) == 0) {
  -        name = var_ptr + 8;
  -        len = strlen(name);
  -        if (ctx == NULL)
  -            return VAR_ERR_UNDEFINED_VARIABLE;
  -        if (ctx->msg == NULL)
  -            return VAR_ERR_UNDEFINED_VARIABLE;
  -        if (ctx->msg->azHeaders == NULL)
  -            return VAR_ERR_UNDEFINED_VARIABLE;
  -        cp = NULL;
  -        while ((cp = argz_next(ctx->msg->azHeaders, ctx->msg->asHeaders, cp)) != NULL) {
  -            char *cpVar, *cpVal;
  -            int nVar, nVal;
  -            cpVar = cp;
  -            nVar = strlen(cpVar);
  -            if ((cp = argz_next(ctx->msg->azHeaders, ctx->msg->asHeaders, cp)) == NULL)
  -                break;
  -            cpVal = cp;
  -            nVal = strlen(cpVal);
  -            if (len == (nVar-1) && strncasecmp(cpVar, name, len) == 0 && cpVar[len] == ':') {
  -                *val_ptr = cpVal;
  -                *val_len = nVal;
  -                *val_size = 0;
  -                rc = VAR_OK;
  -            }
  -        }
  -    }
  -    if (rc == VAR_OK)
  -        log4(ctx, DEBUG, "lookup variable \"%s\" (%d) ok: result is \"%s\" (%d)", 
  -             var_ptr /* FIXME: NUL-termination? */, var_len, *val_ptr, *val_len);
  -    else
  -        log3(ctx, DEBUG, "lookup variable \"%s\" (%d) failed: %s", 
  -             var_ptr /* FIXME: NUL-termination? */, var_len, var_strerror(rc));
  -    return rc;
  -}
  -#endif
  -
   static var_rc_t ctx_lookup(
       var_t *var,
       void *_ctx, 
  @@ -200,7 +142,6 @@
       if (strncasecmp(var_ptr, "option.", strlen("option.")) == 0) {
           cp = str_dupex(var_ptr, var_len);
           if (val_get(ctx->val, cp, &ov) == VAL_OK) {
  -            //log3(ctx, DEBUG, "FIXME var_idx=%d, ov->type=%d, ov->ndata=%d", var_idx, ov->type, ov->ndata);
               if ((var_idx == 0) && (ov->ndata == 1) && (ov->type == OPT_SINGLE)) { /* request first/only single value */
                   *val_ptr = ov->data.s;
                   *val_len = strlen(ov->data.s);
  @@ -231,16 +172,13 @@
           n = strlen(cp);
           cp[n]= ':';
           cp[n + 1] = NUL;
  -        log2(ctx, DEBUG, "FIXME var_idx=%d, cp=%s", var_idx, cp);
           for (hdI = ctx->msg->hdFirst; hdI != NULL; hdI = hdI->next) { /* for each header */
  -            log1(ctx, DEBUG, "FIXME hdI->name=%s", hdI->name);
               if (hdI->name == NULL || strlen(hdI->name) == 0)
  -                continue; //FIXME header w/o name cannot happen normally
  +                continue;
               if (strcasecmp(cp, hdI->name) == 0)
                   break;
           }
           if (hdI != NULL) {
  -            log1(ctx, DEBUG, "FIXME hdI->ndata=%d", hdI->ndata);
               if ((var_idx == 0) && (hdI->ndata == 1)) { /* request first/only single value */
                   *val_ptr = hdI->data.s;
                   *val_len = strlen(hdI->data.s);
  @@ -263,8 +201,6 @@
       return rc;
   }
   
  -
  -
   static void lmtp_gfs_ns(struct ns *);
   static void lmtp_gfs_lhlo(lmtp2nntp_t *);
   static void lmtp_gfs_rset(lmtp2nntp_t *);
  @@ -501,18 +437,6 @@
       (void)option_create(&o, ctx->val); /* FIXME */
       (void)option_parse(o, argc, argv);
       (void)config_context(ctx);
  -
  -{
  -headerrule_t *hrI;
  -fprintf(stderr, "DEBUG: los geht's\n");
  -for (hrI = ctx->option_firstheaderrule; hrI != NULL; hrI = hrI->next) {
  -    fprintf(stderr, "DEBUG: cpPri    = %d\n", hrI->pri);
  -    fprintf(stderr, "DEBUG: cpRegex  = \"%s\"\n", hrI->regex  == NULL ? "(NULL)" : hrI->regex);
  -    fprintf(stderr, "DEBUG: cpHeader = \"%s\"\n", hrI->header == NULL ? "(NULL)" : hrI->header);
  -    fprintf(stderr, "DEBUG: cpValue  = \"%s\"\n", hrI->val    == NULL ? "(NULL)" : hrI->val);
  -}
  -fprintf(stderr, "DEBUG: das war's\n");
  -}
       CU(0); //FIXME
   
       if (getuid() != ctx->option_uid) {

From ossp-cvs-owner@ossp.org  Thu Feb 28 19:24:05 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5A7E57642F; Thu, 28 Feb 2002 19:24:05 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc 00TODO rc.c rc.h rc_config.c rc_optimpl.c rc_p...
Message-Id: <20020228182405.5A7E57642F@mail.ossp.org>
Date: Thu, 28 Feb 2002 19:24:05 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   28-Feb-2002 19:24:05
  Branch: HEAD                             Handle: 2002022818240400

  Modified files:
    ossp-pkg/rc             00TODO rc.c rc.h rc_config.c rc_optimpl.c
                            rc_private.h

  Log:
    Configuration improvements.

  Summary:
    Revision    Changes     Path
    1.21        +2  -0      ossp-pkg/rc/00TODO
    1.15        +9  -8      ossp-pkg/rc/rc.c
    1.12        +6  -3      ossp-pkg/rc/rc.h
    1.4         +66 -33     ossp-pkg/rc/rc_config.c
    1.2         +0  -1      ossp-pkg/rc/rc_optimpl.c
    1.5         +10 -7      ossp-pkg/rc/rc_private.h
  ____________________________________________________________________________

  Index: ossp-pkg/rc/00TODO
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 00TODO
  --- ossp-pkg/rc/00TODO	8 Feb 2002 18:35:03 -0000	1.20
  +++ ossp-pkg/rc/00TODO	28 Feb 2002 18:24:04 -0000	1.21
  @@ -25,6 +25,8 @@
     Translate rc bourne shell script to ISO C.
     Finish man page. Start latex or Docbook guide.
     If a variable is defined for which no default exists, warn user (Scholli.)
  +  Make own config, get rid of val because it doesn't hold strings.
  +  Write interlocking increment for thread-safe increments.
   
   Detailed ;-) project plan
   -------------------------
  Index: ossp-pkg/rc/rc.c
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 rc.c
  --- ossp-pkg/rc/rc.c	28 Feb 2002 15:30:04 -0000	1.14
  +++ ossp-pkg/rc/rc.c	28 Feb 2002 18:24:04 -0000	1.15
  @@ -30,22 +30,24 @@
   #include <stdio.h>
   #include <stdlib.h>
   
  +#include <string.h>
  +
   #include "rc.h"
   #include "rc_private.h"
   
  -/* Initialize our global OSSP ex library identifier */
  -const char g_szOSSPrc[] = "OSSP rc";
  -
   
   int main(int argc, char *argv[])
   {
       ex_t Except;
       int bCaught = 0;
  -    rc_config_t *pConf = NULL;
   
       ex_try {
  -        configConstruct(&pConf);
  -        configLoad(pConf, argc, argv);
  +        configConstruct();
  +TRACE("Vor configLoad.");
  +TRACEL((long)configGetvers());
  +        configLoad(argc, argv);
  +TRACE("Nach configLoad.");
  +TRACEL((long)configGetvers());
       }
       ex_catch(Except) {
           bCaught = 1;
  @@ -57,7 +59,6 @@
       if (!bCaught)
           fprintf(stderr, "main: No exceptions caught.\n");
   
  -    if (pConf)      /* If a configuration exists, then burn it */
  -        configDestruct(pConf);
  +    configDestruct(); /* Possibly destruct the configuration */
       exit(0);        /* Success */
   }
  Index: ossp-pkg/rc/rc.h
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 rc.h
  --- ossp-pkg/rc/rc.h	28 Feb 2002 15:30:04 -0000	1.11
  +++ ossp-pkg/rc/rc.h	28 Feb 2002 18:24:04 -0000	1.12
  @@ -72,9 +72,12 @@
   rc_return_t coptProcess(char, char *);
   
   /* Config function prototypes */
  -rc_return_t configConstruct(rc_config_t **);
  -rc_return_t configLoad(rc_config_t *, int, char **);
  -rc_return_t configDestruct(rc_config_t *);
  +rc_return_t configConstruct(void);
  +rc_return_t configLoad(int, char **);
  +rc_return_t configDestruct(void);
  +
  +/* Config accessor prototypes */
  +short configGetvers(void);
   
   /* Utility (nonbounded) function prototypes */
   char *strErr(rc_return_t);
  Index: ossp-pkg/rc/rc_config.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 rc_config.c
  --- ossp-pkg/rc/rc_config.c	28 Feb 2002 15:30:04 -0000	1.3
  +++ ossp-pkg/rc/rc_config.c	28 Feb 2002 18:24:04 -0000	1.4
  @@ -32,48 +32,76 @@
   
   #include "rc.h"
   #include "rc_private.h"
  -#include "rc_const.h"   /* String constants               */
  -#include "rc_option.h"  /* Option operations rely on popt */
  -#include "val.h"        /* OSSP val library holds config  */
  +#include "rc_const.h"               /* String constants                 */
  +#include "rc_option.h"              /* Option operations rely on popt   */
  +#include "val.h"                    /* OSSP val library holds config    */
  +
  +static rc_config_t *s_pInst = NULL; /* Singleton configuration instance */
   
   
   /***************************************
  -* configConstruct(rc_config_t)         *
  +* configConstruct(void)                *
   * Construct a configuration            *
   ***************************************/
  -rc_return_t configConstruct(rc_config_t **ppConfig)
  +rc_return_t configConstruct(void)
   {
       ex_t Except;
   
  -    *ppConfig = malloc(sizeof(rc_config_t));    /* Allocate the    */
  -    if (!*ppConfig)                             /* configuration's */
  -        return(RC_THROW(RC_ERR_MEM));           /* identity        */
  -
  -    ex_try {                                    /* Make a val instance  */
  -        val_create(&(*ppConfig)->pVal);         /* to hold individual   */
  -    }                                           /* configuration values */
  -    ex_catch(Except) {
  -        rethrow;
  +    if (s_pInst == NULL) {                  /* If we don't have one */
  +        s_pInst = malloc(sizeof(s_pInst));  /* yet, then allocate   */
  +        if (!s_pInst)                       /* a configuration      */
  +            return(RC_THROW(RC_ERR_MEM));   /* instance             */
  +        s_pInst->nLocks = 0;
  +
  +        ex_try {                            /* Make a val instance  */
  +            val_create(&s_pInst->pVal);     /* to hold individual   */
  +        }                                   /* configuration values */
  +        ex_catch(Except) {
  +            rethrow;
  +        }
       }
  +    s_pInst->nLocks++;                      /* FIXME not threadsafe */
   
       return(RC_THROW(RC_OK));
   }
   
  +/***************************************
  +* configGetXXXX(void)                  *
  +* Configuration accessors              *
  +***************************************/
  +short configGetvers(void)
  +{
  +    ex_t Except;
  +    short nVer = 0;
  +
  +    if (s_pInst != NULL) {
  +        ex_try {
  +            val_get(s_pInst->pVal, RC_VER_NAME, &nVer);
  +        }
  +        ex_catch(Except) {
  +            rethrow;
  +        }
  +    }
  +    else {
  +        RC_THROW(RC_ERR_USE);
  +        return(NULL);
  +    }
  +
  +    return(nVer);
  +}
  +
   /************************************************
  -* configLoad(rc_config_t, int, char **)         *
  +* configLoad(int, char **)                      *
   * Load a configuration                          *
   ************************************************/
  -rc_return_t configLoad(rc_config_t *pConfig, int argc, char *argv[])
  +rc_return_t configLoad(int argc, char *argv[])
   {
       ex_t Except;
  -    char *pTestopt = NULL;
  -    const char *pFuncpath = "/sfw/etc/rc.func";
   
       ex_try {    /* Register and set configuration values */
  -        val_reg(pConfig->pVal, RC_FNC_NAME, VAL_TYPE_PTR, RC_FNC_DESC, NULL);
  -        val_set(pConfig->pVal, RC_FNC_NAME, pFuncpath);
  -        val_get(pConfig->pVal, RC_FNC_NAME, &pTestopt);
  -        fprintf(stderr, "Hier!%s!\n", pTestopt);
  +        /* FIXME This is real bad, replace with our own  */
  +        val_reg(s_pInst->pVal, RC_VER_NAME, VAL_TYPE_SHORT, RC_VER_DESC, NULL);
  +        val_set(s_pInst->pVal, RC_VER_NAME, 1);
       }
       ex_catch(Except) {
           rethrow;
  @@ -83,23 +111,28 @@
   }
   
   /***************************************
  -* configDestruct(rc_config_t)          *
  +* configDestruct(void)                 *
   * Destruct a configuration             *
   ***************************************/
  -rc_return_t configDestruct(rc_config_t *pConfig)
  +rc_return_t configDestruct(void)
   {
       ex_t Except;
   
  -    assert(pConfig);
  -    free(pConfig);      /* Deallocate configuration */
  -    pConfig = NULL;     /* and clear its reference  */
  -
  -    ex_try {
  -        val_destroy(pConfig->pVal); /* Destroy the val instance and assume */
  -    }                               /* that its reference is cleared also  */
  -    ex_catch(Except) {
  -        rethrow;
  +    if (s_pInst) {
  +        if (!(--s_pInst->nLocks)) {         /* If nLocks is 0, dealloc  */
  +            ex_try {                        /* FIXME, not thread-safe   */
  +                val_destroy(s_pInst->pVal); /* Destroy val instance and */
  +            }                               /* Assume that pVal is NULL */
  +            ex_catch(Except) {
  +                rethrow;
  +            }
  +
  +            free(s_pInst);                  /* Deallocate configuration */
  +            s_pInst = NULL;                 /* and clear its reference  */
  +        }
       }
  +    else
  +        return(RC_THROW(RC_ERR_USE));
   
       return(RC_THROW(RC_OK));
   }
  Index: ossp-pkg/rc/rc_optimpl.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 rc_optimpl.c
  --- ossp-pkg/rc/rc_optimpl.c	28 Feb 2002 15:31:54 -0000	1.1
  +++ ossp-pkg/rc/rc_optimpl.c	28 Feb 2002 18:24:04 -0000	1.2
  @@ -148,4 +148,3 @@
       popt_freecontext(optCon);
       return(RC_THROW(RC_OK));
   }
  -
  Index: ossp-pkg/rc/rc_private.h
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 rc_private.h
  --- ossp-pkg/rc/rc_private.h	28 Feb 2002 15:30:04 -0000	1.4
  +++ ossp-pkg/rc/rc_private.h	28 Feb 2002 18:24:04 -0000	1.5
  @@ -38,32 +38,35 @@
   #include <assert.h>
   #ifndef DEBUG
   #define NDEBUG
  -#define TRACE(expr) ((void)0)
  +#define TRACE(str) ((void)0)
  +#define TRACEL(long) ((void)0)
   #else
   #define TRACE(str)  fprintf(stderr, "%s:%d: %s\n", __FILE__, __LINE__, str)
  +#define TRACEL(long)  fprintf(stderr, "%s:%d: %ld\n", __FILE__, __LINE__, long)
   #endif
   
  +/* The GUID for OSSP rc */
  +#define RC_STR_ID "OSSP rc"
  +
  +
   /* Memory debugging support */
   #if defined(HAVE_DMALLOC_H) && defined(WITH_DMALLOC)
   #include "dmalloc.h"
   #endif
   
  -/* GUID to use with OSSP ex library */
  -const char g_szOSSPrc[];
  -
   /* Define the ability to throw OSSP ex exceptions       */
   #include "ex.h" /* OSSP ex exception handling library   */
   #define RC_THROW(rv) \
       ((rv) != RC_OK && (ex_catching && !ex_shielding) \
  -     ? (ex_throw(g_szOSSPrc, NULL, (rv)), (rv)) : (rv))
  +     ? (ex_throw(RC_STR_ID, NULL, (rv)), (rv)) : (rv))
   
   #include "val.h"
   
   
   /* Main rc configuration storage */
   typedef struct {
  -    void *pvCtx;
  -    val_t *pVal;
  +    val_t *pVal; /* Storage of configuration values         */
  +    int nLocks;  /* Server locks, probably not thread-safe  */
   } rc_config_t;
   
   #endif /* __OSSPRC_PRIVATE_H__ */

From ossp-cvs-owner@ossp.org  Thu Feb 28 21:27:05 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8145C7642F; Thu, 28 Feb 2002 21:27:05 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var_test.c
Message-Id: <20020228202705.8145C7642F@mail.ossp.org>
Date: Thu, 28 Feb 2002 21:27:05 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   28-Feb-2002 21:27:05
  Branch: HEAD                             Handle: 2002022820270500

  Modified files:
    ossp-pkg/var            var_test.c

  Log:
    always print on testing, not just on debugging

  Summary:
    Revision    Changes     Path
    1.38        +0  -9      ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.37 -r1.38 var_test.c
  --- ossp-pkg/var/var_test.c	28 Feb 2002 12:40:01 -0000	1.37
  +++ ossp-pkg/var/var_test.c	28 Feb 2002 20:27:05 -0000	1.38
  @@ -62,9 +62,6 @@
       else {
           for (i = 0; vars[i].name; ++i) {
               if (strncmp(varname, vars[i].name, name_len) == 0) {
  -#ifdef DEBUG
  -                printf("Found variable at index %d.\n", i);
  -#endif
                   counter = 1;
                   length = strlen(vars[i].data);
                   while (   vars[i + counter].data
  @@ -221,28 +218,22 @@
       }
   
       for (i = 0; i < sizeof(tests)/sizeof(struct test_case); ++i) {
  -#ifdef DEBUG
           printf("Test case #%02d: Original input is '%s'.\n", i,
                  tests[i].input);
  -#endif
           rc = var_unescape(var, tests[i].input, strlen(tests[i].input), buffer, sizeof(buffer), 0);
           if (rc != VAR_OK) {
               var_strerror(var, rc, &err);
               printf("Test case #%d: var_unescape() failed: %s (%d)\n", i, err, rc);
               return 1;
           }
  -#ifdef DEBUG
           printf("Test case #%02d: Unescaped input is '%s'.\n", i, buffer);
  -#endif
           rc = var_expand(var, buffer, strlen(buffer), &tmp, &tmp_len, 0);
           if (rc != VAR_OK) {
               var_strerror(var, rc, &err);
               printf("Test case #%d: var_expand() failed: %s (%d).\n", i, err, rc);
               return 1;
           }
  -#ifdef DEBUG
           printf("Test case #%02d: Expanded output is '%s'.\n", i, tmp);
  -#endif
           if (   tmp_len != strlen(tests[i].expected)
               || tmp == NULL
               || memcmp(tests[i].expected, tmp, tmp_len) != 0) {

From ossp-cvs-owner@ossp.org  Thu Feb 28 21:28:14 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 922207642F; Thu, 28 Feb 2002 21:28:14 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Message-Id: <20020228202814.922207642F@mail.ossp.org>
Date: Thu, 28 Feb 2002 21:28:14 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   28-Feb-2002 21:28:14
  Branch: HEAD                             Handle: 2002022820281400

  Modified files:
    ossp-pkg/var            var.c

  Log:
    Code Cleanup Phase I
    (too much details to describe)

  Summary:
    Revision    Changes     Path
    1.70        +325 -270   ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.69 -r1.70 var.c
  --- ossp-pkg/var/var.c	28 Feb 2002 12:40:01 -0000	1.69
  +++ ossp-pkg/var/var.c	28 Feb 2002 20:28:14 -0000	1.70
  @@ -58,6 +58,16 @@
   #define VAR_RC(rv) (rv)
   #endif /* WITH_EX */
   
  +#ifndef NUL
  +#define NUL '\0'
  +#endif
  +
  +/*
  +**
  +**  ==== INTERNAL DATA STRUCTURES ====
  +**
  +*/
  +
   typedef char char_class_t[256]; /* 256 == 2 ^ sizeof(unsigned char)*8 */
   
   /* the external context structure */
  @@ -71,7 +81,7 @@
   /* the internal expansion context structure */
   typedef struct {
       int            force_expand;
  -} var_expand_t;
  +} var_parse_t;
   
   /* the default syntax configuration */
   static const var_syntax_t var_syntax_default = {
  @@ -85,7 +95,11 @@
       "a-zA-Z0-9_"  /* name_chars */
   };
   
  -/* Routines for manipulation of token buffers. */
  +/*
  +**
  +**  ==== TOKEN BUFFER FUNCTIONS ====
  +**
  +*/
   
   #define TOKENBUF_INITIAL_BUFSIZE 64
   
  @@ -122,7 +136,7 @@
       buf->begin = p;
       buf->end = p + len;
       buf->buffer_size = len + 1;
  -    *((char *)(buf->end)) = '\0';
  +    *((char *)(buf->end)) = NUL;
       return 1;
   }
   
  @@ -176,7 +190,7 @@
       /* Append the data at the end of the current buffer. */
       memcpy((char *)output->end, data, len);
       output->end += len;
  -    *((char *)output->end) = '\0';
  +    *((char *)output->end) = NUL;
       return 1;
   }
   
  @@ -202,7 +216,11 @@
       return num;
   }
   
  -/* Routines for the expansion of quoted-pair expressions. */
  +/*
  +**
  +**  ==== ESCAPE SEQUENCE FUNCTIONS ====
  +**
  +*/
   
   static void expand_range(char a, char b, char_class_t class)
   {
  @@ -224,8 +242,8 @@
       /* Walk through the class description and set the appropriate
          entries in the array. */
   
  -    while (*desc != '\0') {
  -        if (desc[1] == '-' && desc[2] != '\0') {
  +    while (*desc != NUL) {
  +        if (desc[1] == '-' && desc[2] != NUL) {
               if (desc[0] > desc[2])
                   return VAR_ERR_INCORRECT_CLASS_SPEC;
               expand_range(desc[0], desc[2], class);
  @@ -341,95 +359,115 @@
           return expand_simple_hex(src, dst, end);
   }
   
  -/* The recursive-descent parser for variable expressions. */
  -
  -static int variable(const char *begin, const char *end,
  -                    const var_syntax_t *config, const char_class_t nameclass,
  -                    var_cb_value_t lookup, void *lookup_context,
  -                    int force_expand, tokenbuf_t *result, int index_mark,
  -                    int* rel_lookup_flag);
  -static int command(const char *begin, const char *end,
  -                   const var_syntax_t *config, const char_class_t nameclass,
  -                   var_cb_value_t lookup, void *lookup_context, int force_expand,
  -                   tokenbuf_t *data, int index_mark, int* rel_lookup_flag);
  -static int num_exp(const char *begin, const char *end, int index_mark,
  -                   int* result, int* failed, int* rel_lookup_flag,
  -                   const var_syntax_t *config,
  -                   const char_class_t nameclass,
  -                   var_cb_value_t lookup, void* lookup_context);
  -
  -static int text(const char *begin, const char *end, char delim_init,
  -                char index_open, char index_close, char escape)
  +/* 
  +**
  +**  ==== RECURSIVE-DESCEND VARIABLE EXPANSION PARSER ====
  +**
  +*/
  +
  +/* forward declarations */
  +static int parse_variable(var_t *var, var_parse_t *ctx, const char *begin, const char *end, int force_expand, tokenbuf_t *result, int index_this, int* rel_lookup_flag);
  +static int parse_command (var_t *var, var_parse_t *ctx, const char *begin, const char *end, int force_expand, tokenbuf_t *data, int index_this, int* rel_lookup_flag);
  +static int parse_num_exp (var_t *var, var_parse_t *ctx, const char *begin, const char *end, int index_this, int* result, int* failed, int* rel_lookup_flag);
  +
  +/* parse plain text */
  +static int 
  +parse_text(
  +    var_t *var, var_parse_t *ctx,
  +    const char *begin, const char *end)
   {
       const char *p;
   
  -    for (p = begin; p != end; ++p) {
  -        if (*p == escape) {
  -            if (++p == end)
  +    /* parse until delim_init (variable construct) 
  +       or index_open (loop construct) is found */
  +    for (p = begin; p != end; p++) {
  +        if (*p == var->syntax.escape) {
  +            p++; /* skip next character */
  +            if (p == end)
                   return VAR_ERR_INCOMPLETE_QUOTED_PAIR;
           }
  -        else if (*p == delim_init)
  +        else if (*p == var->syntax.delim_init)
               break;
  -        else if (index_open && (*p == index_open || *p == index_close))
  +        else if (   var->syntax.index_open != NUL
  +                 && (   *p == var->syntax.index_open 
  +                     || *p == var->syntax.index_close))
               break;
       }
  -    return p - begin;
  +    return (p - begin);
   }
   
  -static int varname(const char *begin, const char *end,
  -                   const char_class_t nameclass)
  +/* parse variable name */
  +static int 
  +parse_varname(
  +    var_t *var, var_parse_t *ctx,
  +    const char *begin, const char *end)
   {
       const char *p;
   
  -    for (p = begin; p != end && nameclass[(int) *p]; p++)
  +    /* parse as long as name class characters are found */
  +    for (p = begin; p != end && var->syntax_nameclass[(int)(*p)]; p++)
           ;
  -    return p - begin;
  +    return (p - begin);
   }
   
  -static int number(const char *begin, const char *end)
  +/* parse number */
  +static int 
  +parse_number(
  +    var_t *var, var_parse_t *ctx,
  +    const char *begin, const char *end)
   {
       const char *p;
   
  -    for (p = begin; p != end && isdigit((int)*p); p++)
  +    /* parse as long as digits are found */
  +    for (p = begin; p != end && isdigit((int)(*p)); p++)
           ;
  -    return p - begin;
  +    return (p - begin);
   }
   
  -static int substext(const char *begin, const char *end,
  -                    const var_syntax_t *config)
  +/* parse substitution text */
  +static int 
  +parse_substext(
  +    var_t *var, var_parse_t *ctx,
  +    const char *begin, const char *end)
   {
       const char *p;
   
  -    for (p = begin; p != end && *p != config->delim_init && *p != '/'; p++) {
  -        if (*p == config->escape) {
  +    /* parse until delim_init or '/' */
  +    for (p = begin; p != end && *p != var->syntax.delim_init && *p != '/'; p++) {
  +        if (*p == var->syntax.escape) {
               if (p + 1 == end)
                   return VAR_ERR_INCOMPLETE_QUOTED_PAIR;
               p++;
           }
       }
  -    return p - begin;
  +    return (p - begin);
   }
   
  -static int exptext(const char *begin, const char *end,
  -                   const var_syntax_t *config)
  +/* parse expression? XXX text */
  +static int 
  +parse_exptext(
  +    var_t *var, var_parse_t *ctx,
  +    const char *begin, const char *end)
   {
       const char *p;
   
  -    for (p = begin;
  -            p != end
  -         && *p != config->delim_init
  -         && *p != config->delim_close
  -         && *p != ':'; p++) {
  -        if (*p == config->escape) {
  +    /* parse until delim_init or delim_close or ':' */
  +    for (p = begin;     p != end
  +                    && *p != var->syntax.delim_init
  +                    && *p != var->syntax.delim_close
  +                    && *p != ':'; p++) {
  +        if (*p == var->syntax.escape) {
               if (p + 1 == end)
                   return VAR_ERR_INCOMPLETE_QUOTED_PAIR;
               p++;
           }
       }
  -    return p - begin;
  +    return (p - begin);
   }
   
  -static int num_exp_read_int(const char **begin, const char *end)
  +/* convert a string into a decimal number */
  +static int 
  +convert_num_exp_read_int(const char **begin, const char *end)
   {
       int num = 0;
   
  @@ -441,24 +479,26 @@
       return num;
   }
   
  -static int num_exp_read_operand(const char *begin, const char *end, int index_mark,
  -                                int *result, int *failed, int *rel_lookup_flag,
  -                                const var_syntax_t *config,
  -                                const char_class_t nameclass,
  -                                var_cb_value_t lookup, void *lookup_context)
  +/* parse number expression operand */
  +static int 
  +parse_num_exp_operand(
  +    var_t *var, var_parse_t *ctx,
  +    const char *begin, const char *end, 
  +    int index_this, int *result, int *failed, int *rel_lookup_flag)
   {
  -    const char* p = begin;
  +    const char *p;
       tokenbuf_t tmp;
       int rc;
   
  +    p = begin;
       tokenbuf_init(&tmp);
   
       if (begin == end)
           return VAR_ERR_INCOMPLETE_INDEX_SPEC;
   
       if (*p == '(') {
  -        rc = num_exp(++p, end, index_mark, result, failed,
  -                     rel_lookup_flag, config, nameclass, lookup, lookup_context);
  +        rc = parse_num_exp(var, ctx, ++p, end, index_this, result, failed,
  +                     rel_lookup_flag);
           if (rc < 0)
               return rc;
           p += rc;
  @@ -468,13 +508,13 @@
               return VAR_ERR_UNCLOSED_BRACKET_IN_INDEX;
           ++p;
       }
  -    else if (*p == config->delim_init) {
  -        rc = variable(p, end, config, nameclass, lookup,
  -                      lookup_context, 1, &tmp, index_mark, rel_lookup_flag);
  +    else if (*p == var->syntax.delim_init) {
  +        rc = parse_variable(var, ctx, p, end, 
  +                            1, &tmp, index_this, rel_lookup_flag);
           if (rc == VAR_ERR_UNDEFINED_VARIABLE) {
               *failed = 1;
  -            rc = variable(p, end, config, nameclass, lookup,
  -                          lookup_context, 0, &tmp, index_mark, rel_lookup_flag);
  +            rc = parse_variable(var, ctx, p, end, 
  +                                0, &tmp, index_this, rel_lookup_flag);
               if (rc < 0)
                   return rc;
               p += rc;
  @@ -484,25 +524,25 @@
               if (rc < 0)
                   return rc;
               p += rc;
  -            rc = num_exp(tmp.begin, tmp.end, index_mark, result,
  -                         failed, rel_lookup_flag, config, nameclass, lookup, lookup_context);
  +            rc = parse_num_exp(var, ctx, tmp.begin, tmp.end, index_this, result,
  +                         failed, rel_lookup_flag );
               tokenbuf_free(&tmp);
               if (rc < 0)
                   return rc;
           }
       }
  -    else if (config->index_mark && *p == config->index_mark) {
  +    else if (var->syntax.index_mark && *p == var->syntax.index_mark) {
           p++;
  -        *result = index_mark;
  +        *result = index_this;
           (*rel_lookup_flag)++;
       }
       else if (isdigit(*p)) {
  -        *result = num_exp_read_int(&p, end);
  +        *result = convert_num_exp_read_int(&p, end);
       }
       else if (*p == '+') {
           if (end - p > 1 && isdigit(p[1])) {
               p++;
  -            *result = num_exp_read_int(&p, end);
  +            *result = convert_num_exp_read_int(&p, end);
           }
           else
               return VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC;
  @@ -510,7 +550,7 @@
       else if (*p == '-') {
           if (end - p > 1 && isdigit(p[1])) {
               p++;
  -            *result = num_exp_read_int(&p, end);
  +            *result = convert_num_exp_read_int(&p, end);
               *result = 0 - *result;
           }
           else
  @@ -519,14 +559,15 @@
       else
           return VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC;
   
  -    return p - begin;
  +    return (p - begin);
   }
   
  -static int num_exp(const char *begin, const char *end, int index_mark,
  -                   int *result, int *failed, int *rel_lookup_flag,
  -                   const var_syntax_t *config,
  -                   const char_class_t nameclass,
  -                   var_cb_value_t lookup, void *lookup_context)
  +static int 
  +parse_num_exp(
  +    var_t *var, var_parse_t *ctx,
  +    const char *begin, const char *end, 
  +    int index_this,
  +    int *result, int *failed, int *rel_lookup_flag)
   {
       const char *p = begin;
       char operator;
  @@ -536,9 +577,8 @@
       if (begin == end)
           return VAR_ERR_INCOMPLETE_INDEX_SPEC;
   
  -    rc = num_exp_read_operand(p, end, index_mark, result,
  -                              failed, rel_lookup_flag, config, nameclass,
  -                              lookup, lookup_context);
  +    rc = parse_num_exp_operand(var, ctx, p, end, index_this, result,
  +                              failed, rel_lookup_flag);
       if (rc < 0)
           return rc;
       p += rc;
  @@ -546,8 +586,8 @@
       while (p != end) {
           if (*p == '+' || *p == '-') {
               operator = *p++;
  -            rc = num_exp(p, end, index_mark, &right, failed,
  -                         rel_lookup_flag, config, nameclass, lookup, lookup_context);
  +            rc = parse_num_exp(var, ctx, p, end, index_this, &right, failed,
  +                         rel_lookup_flag);
               if (rc < 0)
                   return rc;
               p += rc;
  @@ -558,8 +598,8 @@
           }
           else if (*p == '*' || *p == '/' || *p == '%') {
               operator = *p++;
  -            rc = num_exp_read_operand(p, end, index_mark, &right, failed,
  -                                      rel_lookup_flag, config, nameclass, lookup, lookup_context);
  +            rc = parse_num_exp_operand(var, ctx, p, end, index_this, &right, failed,
  +                                      rel_lookup_flag);
               if (rc < 0)
                   return rc;
               p += rc;
  @@ -593,12 +633,13 @@
       return p - begin;
   }
   
  -static int expression(const char *begin, const char *end,
  -                      const var_syntax_t *config,
  -                      const char_class_t nameclass, var_cb_value_t lookup,
  -                      void *lookup_context, int force_expand,
  -                      tokenbuf_t *result, int index_mark, int *rel_lookup_flag)
  -    {
  +static int 
  +parse_expression(
  +    var_t *var, var_parse_t *ctx,
  +    const char *begin, const char *end,
  +    int force_expand,
  +    tokenbuf_t *result, int index_this, int *rel_lookup_flag)
  +{
       const char *p = begin;
       const char *data;
       size_t len, buffer_size;
  @@ -616,7 +657,7 @@
   
       /* Expect STARTDELIM. */
   
  -    if (p == end || *p != config->delim_open)
  +    if (p == end || *p != var->syntax.delim_open)
           return 0;
   
       if (++p == end)
  @@ -626,7 +667,7 @@
          an arbitrary number of VARNAMEs and VARIABLEs. */
   
       do {
  -        rc = varname(p, end, nameclass);
  +        rc = parse_varname(var, ctx, p, end);
           if (rc < 0)
               goto error_return;
           if (rc > 0) {
  @@ -637,8 +678,8 @@
               p += rc;
           }
   
  -        rc = variable(p, end, config, nameclass, lookup, lookup_context,
  -                      force_expand, &tmp, index_mark, rel_lookup_flag);
  +        rc = parse_variable(var, ctx, p, end, 
  +                      force_expand, &tmp, index_this, rel_lookup_flag);
           if (rc < 0)
               goto error_return;
           if (rc > 0) {
  @@ -673,9 +714,9 @@
   
       /* If the next token is START-INDEX, read the index specification. */
   
  -    if (config->index_open && *p == config->index_open) {
  -        rc = num_exp(++p, end, index_mark, &idx, &failed,
  -                     rel_lookup_flag, config, nameclass, lookup, lookup_context);
  +    if (var->syntax.index_open && *p == var->syntax.index_open) {
  +        rc = parse_num_exp(var, ctx, ++p, end, index_this, &idx, &failed,
  +                     rel_lookup_flag);
           if (rc < 0)
               goto error_return;
           if (rc == 0) {
  @@ -688,7 +729,7 @@
               rc = VAR_ERR_INCOMPLETE_INDEX_SPEC;
               goto error_return;
           }
  -        if (*p != config->index_close) {
  +        if (*p != var->syntax.index_close) {
               rc = VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC;
               goto error_return;
           }
  @@ -698,7 +739,7 @@
       /* Now we have the name of the variable stored in "name". The next
          token here must either be an END-DELIM or a ':'. */
   
  -    if (p == end || (*p != config->delim_close && *p != ':')) {
  +    if (p == end || (*p != var->syntax.delim_close && *p != ':')) {
           rc = VAR_ERR_INCOMPLETE_VARIABLE_SPEC;
           goto error_return;
       }
  @@ -712,7 +753,7 @@
           result->buffer_size = 0;
       }
       else {
  -        rc = (*lookup) (NULL, lookup_context, name.begin, name.end - name.begin, idx,
  +        rc = (*var->cb_value_fct) (var, var->cb_value_ctx, name.begin, name.end - name.begin, idx,
                           &data, &len, &buffer_size);
           if (rc == VAR_ERR_UNDEFINED_VARIABLE) {
               /* The variable is undefined. What we'll do now depends on the
  @@ -748,13 +789,13 @@
           while (p != end && *p == ':') {
               p++;
               if (!failed)
  -                rc = command(p, end, config, nameclass, lookup,
  -                             lookup_context, force_expand, result,
  -                             index_mark, rel_lookup_flag);
  +                rc = parse_command(var, ctx, p, end, 
  +                             force_expand, result,
  +                             index_this, rel_lookup_flag);
               else
  -                rc = command(p, end, config, nameclass, lookup,
  -                             lookup_context, force_expand, &tmp,
  -                             index_mark, rel_lookup_flag);
  +                rc = parse_command(var, ctx, p, end, 
  +                             force_expand, &tmp,
  +                             index_this, rel_lookup_flag);
               if (rc < 0)
                   goto error_return;
               p += rc;
  @@ -762,7 +803,7 @@
                   result->end += rc;
           }
   
  -        if (p == end || *p != config->delim_close) {
  +        if (p == end || *p != var->syntax.delim_close) {
               rc = VAR_ERR_INCOMPLETE_VARIABLE_SPEC;
               goto error_return;
           }
  @@ -786,11 +827,13 @@
       return rc;
   }
   
  -static int variable(const char *begin, const char *end,
  -                    const var_syntax_t *config, const char_class_t nameclass,
  -                    var_cb_value_t lookup, void *lookup_context,
  -                    int force_expand, tokenbuf_t *result, int index_mark,
  -                    int *rel_lookup_flag)
  +static int 
  +parse_variable(
  +    var_t *var, 
  +    var_parse_t *ctx,
  +    const char *begin, const char *end,
  +    int force_expand, tokenbuf_t *result, int index_this,
  +    int *rel_lookup_flag)
   {
       const char *p = begin;
       const char *data;
  @@ -804,7 +847,7 @@
   
       /* Expect VARINIT. */
   
  -    if (p == end || *p != config->delim_init)
  +    if (p == end || *p != var->syntax.delim_init)
           return 0;
   
       if (++p == end)
  @@ -813,11 +856,11 @@
       /* Try to read the variable name. If that fails, we're parsing a
          complex expression. */
   
  -    rc = varname(p, end, nameclass);
  +    rc = parse_varname(var, ctx, p, end);
       if (rc < 0)
           return rc;
       if (rc > 0) {
  -        rc2 = (*lookup)(NULL, lookup_context, p, rc, 0, &data, &len, &buffer_size);
  +        rc2 = (*var->cb_value_fct)(var, var->cb_value_ctx, p, rc, 0, &data, &len, &buffer_size);
           if (rc2 == VAR_ERR_UNDEFINED_VARIABLE && !force_expand) {
               result->begin = begin;
               result->end = begin + 1 + rc;
  @@ -834,19 +877,20 @@
   
       /* OK, we're dealing with a complex expression here. */
   
  -    rc = expression(p, end, config, nameclass, lookup, lookup_context,
  -                    force_expand, result, index_mark, rel_lookup_flag);
  +    rc = parse_expression(var, ctx, p, end, 
  +                    force_expand, result, index_this, rel_lookup_flag);
       if (rc > 0)
           rc++;
       return rc;
   }
   
  -static int exptext_or_variable(const char *begin, const char *end,
  -                               const var_syntax_t *config,
  -                               const char_class_t nameclass, var_cb_value_t lookup,
  -                               void *lookup_context, int force_expand,
  -                               tokenbuf_t *result, int index_mark,
  -                               int *rel_lookup_flag)
  +static int 
  +parse_exptext_or_variable(
  +    var_t *var, var_parse_t *ctx,
  +    const char *begin, const char *end,
  +    int force_expand,
  +    tokenbuf_t *result, int index_this,
  +    int *rel_lookup_flag)
   {
       const char *p = begin;
       tokenbuf_t tmp;
  @@ -859,7 +903,7 @@
           return 0;
   
       do {
  -        rc = exptext(p, end, config);
  +        rc = parse_exptext(var, ctx, p, end);
           if (rc < 0)
               goto error_return;
           if (rc > 0) {
  @@ -870,8 +914,8 @@
               p += rc;
           }
   
  -        rc = variable(p, end, config, nameclass, lookup, lookup_context,
  -                      force_expand, &tmp, index_mark, rel_lookup_flag);
  +        rc = parse_variable(var, ctx, p, end, 
  +                      force_expand, &tmp, index_this, rel_lookup_flag);
           if (rc < 0)
               goto error_return;
           if (rc > 0) {
  @@ -893,12 +937,13 @@
       return rc;
   }
   
  -static int substext_or_variable(const char *begin, const char *end,
  -                                const var_syntax_t *config,
  -                                const char_class_t nameclass, var_cb_value_t lookup,
  -                                void *lookup_context, int force_expand,
  -                                tokenbuf_t *result, int index_mark,
  -                                int *rel_lookup_flag)
  +static int 
  +parse_substext_or_variable(
  +    var_t *var, var_parse_t *ctx,
  +    const char *begin, const char *end,
  +    int force_expand,
  +    tokenbuf_t *result, int index_this,
  +    int *rel_lookup_flag)
   {
       const char *p = begin;
       tokenbuf_t tmp;
  @@ -911,7 +956,7 @@
           return 0;
   
       do {
  -        rc = substext(p, end, config);
  +        rc = parse_substext(var, ctx, p, end);
           if (rc < 0)
               goto error_return;
           if (rc > 0) {
  @@ -922,8 +967,8 @@
               p += rc;
           }
   
  -        rc = variable(p, end, config, nameclass, lookup, lookup_context,
  -                      force_expand, &tmp, index_mark, rel_lookup_flag);
  +        rc = parse_variable(var, ctx, p, end, 
  +                      force_expand, &tmp, index_this, rel_lookup_flag);
           if (rc < 0)
               goto error_return;
           if (rc > 0) {
  @@ -945,7 +990,7 @@
       return rc;
   }
   
  -static int expand_class_description(tokenbuf_t *src, tokenbuf_t *dst)
  +static int parse_class_description(tokenbuf_t *src, tokenbuf_t *dst)
   {
       unsigned char c, d;
       const char *p = src->begin;
  @@ -979,9 +1024,9 @@
       tokenbuf_init(&srcclass);
       tokenbuf_init(&dstclass);
   
  -    if ((rc = expand_class_description(search, &srcclass)) != VAR_OK)
  +    if ((rc = parse_class_description(search, &srcclass)) != VAR_OK)
           goto error_return;
  -    if ((rc = expand_class_description(replace, &dstclass)) != VAR_OK)
  +    if ((rc = parse_class_description(replace, &dstclass)) != VAR_OK)
           goto error_return;
   
       if (srcclass.begin == srcclass.end) {
  @@ -1067,7 +1112,7 @@
       return VAR_OK;
   }
   
  -static int expand_regex_replace(const char *data, tokenbuf_t *orig,
  +static int parse_regex_replace(const char *data, tokenbuf_t *orig,
                                   regmatch_t *pmatch, tokenbuf_t *expanded)
   {
       const char *p = orig->begin;
  @@ -1219,7 +1264,7 @@
                   tokenbuf_append(&tmp, p, mydata.end - p);
                   break;
               } else {
  -                rc = expand_regex_replace(p, replace, pmatch, &myreplace);
  +                rc = parse_regex_replace(p, replace, pmatch, &myreplace);
                   if (rc != VAR_OK) {
                       regfree(&preg);
                       tokenbuf_free(&tmp);
  @@ -1379,10 +1424,12 @@
       return VAR_OK;
   }
   
  -static int command(const char *begin, const char *end,
  -                   const var_syntax_t *config, const char_class_t nameclass,
  -                   var_cb_value_t lookup, void *lookup_context, int force_expand,
  -                   tokenbuf_t *data, int index_mark, int *rel_lookup_flag)
  +static int 
  +parse_command(
  +    var_t *var, var_parse_t *ctx,
  +    const char *begin, const char *end,
  +    int force_expand,
  +    tokenbuf_t *data, int index_this, int *rel_lookup_flag)
   {
       const char *p = begin;
       tokenbuf_t tmptokbuf;
  @@ -1438,7 +1485,7 @@
   
       case 'o':                   /* Cut out substrings. */
           ++p;
  -        rc = number(p, end);
  +        rc = parse_number(var, ctx, p, end);
           if (rc == 0) {
               rc = VAR_ERR_MISSING_START_OFFSET;
               goto error_return;
  @@ -1459,7 +1506,7 @@
               goto error_return;
           }
   
  -        rc = number(p, end);
  +        rc = parse_number(var, ctx, p, end);
           number2.begin = p;
           number2.end = p + rc;
           number2.buffer_size = 0;
  @@ -1486,9 +1533,9 @@
   
       case '-':                   /* Substitute parameter if data is empty. */
           p++;
  -        rc = exptext_or_variable(p, end, config, nameclass, lookup,
  -                                 lookup_context, force_expand, &tmptokbuf,
  -                                 index_mark, rel_lookup_flag);
  +        rc = parse_exptext_or_variable(var, ctx, p, end, 
  +                                 force_expand, &tmptokbuf,
  +                                 index_this, rel_lookup_flag);
           if (rc < 0)
               goto error_return;
           if (rc == 0) {
  @@ -1504,8 +1551,8 @@
   
       case '*':                   /* Return "" if data is not empty, parameter otherwise. */
           p++;
  -        rc = exptext_or_variable(p, end, config, nameclass, lookup,
  -                                 lookup_context, force_expand, &tmptokbuf, index_mark, rel_lookup_flag);
  +        rc = parse_exptext_or_variable(var, ctx, p, end, 
  +                                 force_expand, &tmptokbuf, index_this, rel_lookup_flag);
           if (rc < 0)
               goto error_return;
           if (rc == 0) {
  @@ -1527,8 +1574,8 @@
   
       case '+':                   /* Substitute parameter if data is not empty. */
           p++;
  -        rc = exptext_or_variable(p, end, config, nameclass, lookup,
  -                                 lookup_context, force_expand, &tmptokbuf, index_mark, rel_lookup_flag);
  +        rc = parse_exptext_or_variable(var, ctx, p, end, 
  +                                 force_expand, &tmptokbuf, index_this, rel_lookup_flag);
           if (rc < 0)
               goto error_return;
           if (rc == 0) {
  @@ -1549,8 +1596,8 @@
               return VAR_ERR_MALFORMATTED_REPLACE;
           p++;
   
  -        rc = substext_or_variable(p, end, config, nameclass, lookup,
  -                                  lookup_context, force_expand, &search, index_mark, rel_lookup_flag);
  +        rc = parse_substext_or_variable(var, ctx, p, end, 
  +                                  force_expand, &search, index_this, rel_lookup_flag);
           if (rc < 0)
               goto error_return;
           p += rc;
  @@ -1561,8 +1608,8 @@
           }
           p++;
   
  -        rc = substext_or_variable(p, end, config, nameclass, lookup,
  -                                  lookup_context, force_expand, &replace, index_mark, rel_lookup_flag);
  +        rc = parse_substext_or_variable(var, ctx, p, end, 
  +                                  force_expand, &replace, index_this, rel_lookup_flag);
           if (rc < 0)
               goto error_return;
           p += rc;
  @@ -1573,7 +1620,7 @@
           }
           p++;
   
  -        rc = exptext(p, end, config);
  +        rc = parse_exptext(var, ctx, p, end);
           if (rc < 0)
               goto error_return;
           flags.begin = p;
  @@ -1595,8 +1642,8 @@
               return VAR_ERR_MALFORMATTED_TRANSPOSE;
           p++;
   
  -        rc = substext_or_variable(p, end, config, nameclass, lookup,
  -                                  lookup_context, force_expand, &search, index_mark, rel_lookup_flag);
  +        rc = parse_substext_or_variable(var, ctx, p, end, 
  +                                  force_expand, &search, index_this, rel_lookup_flag);
           if (rc < 0)
               goto error_return;
           p += rc;
  @@ -1607,8 +1654,8 @@
           }
           p++;
   
  -        rc = substext_or_variable(p, end, config, nameclass, lookup,
  -                                  lookup_context, force_expand, &replace, index_mark, rel_lookup_flag);
  +        rc = parse_substext_or_variable(var, ctx, p, end, 
  +                                  force_expand, &replace, index_this, rel_lookup_flag);
           if (rc < 0)
               goto error_return;
           p += rc;
  @@ -1634,7 +1681,7 @@
               return VAR_ERR_MALFORMATTED_PADDING;
           p++;
   
  -        rc = number(p, end);
  +        rc = parse_number(var, ctx, p, end);
           if (rc == 0) {
               rc = VAR_ERR_MISSING_PADDING_WIDTH;
               goto error_return;
  @@ -1650,8 +1697,8 @@
           }
           p++;
   
  -        rc = substext_or_variable(p, end, config, nameclass, lookup,
  -                                  lookup_context, force_expand, &replace, index_mark, rel_lookup_flag);
  +        rc = parse_substext_or_variable(var, ctx, p, end, 
  +                                  force_expand, &replace, index_this, rel_lookup_flag);
           if (rc < 0)
               goto error_return;
           p += rc;
  @@ -1700,57 +1747,30 @@
       return rc;
   }
   
  -struct wrapper_context {
  -    var_cb_value_t lookup;
  -    void    *context;
  -    int     *rel_lookup_flag;
  -};
  -
  -static int lookup_wrapper(var_t *var, void *context,
  -                          const char *name, size_t name_len, int idx,
  -                          const char **data, size_t *data_len,
  -                          size_t *buffer_size)
  +/* expand the loop limits */
  +static var_rc_t 
  +parse_looplimits(
  +    var_t *var,
  +    var_parse_t *ctx,
  +    const char *begin, const char *end,
  +    int* start, int* step, int* stop, int* open_end)
   {
  -    static char buf[1];
  -    struct wrapper_context *wcon = context;
  -    int rc;
  -
  -    rc = (*wcon->lookup)(NULL, wcon->context, name, name_len,
  -                         idx, data, data_len, buffer_size);
  -    if (rc == VAR_ERR_UNDEFINED_VARIABLE) {
  -        (*wcon->rel_lookup_flag)--;
  -        *data = buf;
  -        *data_len = 0;
  -        *buffer_size = 0;
  -        return VAR_OK;
  -    }
  -    return rc;
  -}
  -
  -static var_rc_t loop_limits(const char *begin, const char *end,
  -			    const var_syntax_t *config,
  -                            const char_class_t nameclass,
  -                            var_cb_value_t lookup, void* lookup_context,
  -                            int* start, int* step, int* stop, int* open_end)
  -    {
  -    const char* p = begin;
  +    const char *p;
       int rc;
       int failed;
       int dummy;
   
  +    p = begin;
       if (begin == end)
           return 0;
  -
  -    if (*p != config->delim_open)
  +    if (*p != var->syntax.delim_open)
           return 0;
       else
  -        ++p;
  +        p++;
   
       /* Read start value for the loop. */
  -
       failed = 0;
  -    rc = num_exp(p, end, 0, start, &failed, &dummy,
  -                 config, nameclass, lookup, lookup_context);
  +    rc = parse_num_exp(var, ctx, p, end, 0, start, &failed, &dummy);
       if (rc == VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC)
           *start = 0;          /* use default */
       else if (rc < 0)
  @@ -1763,13 +1783,11 @@
       if (*p != ',')
           return VAR_ERR_INVALID_CHAR_IN_LOOP_LIMITS;
       else
  -        ++p;
  +        p++;
   
       /* Read step value for the loop. */
  -
       failed = 0;
  -    rc = num_exp(p, end, 0, step, &failed, &dummy,
  -                 config, nameclass, lookup, lookup_context);
  +    rc = parse_num_exp(var, ctx, p, end, 0, step, &failed, &dummy);
       if (rc == VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC)
           *step = 1;          /* use default */
       else if (rc < 0)
  @@ -1778,14 +1796,11 @@
           p += rc;
       if (failed)
           return VAR_ERR_UNDEFINED_VARIABLE;
  -
  -    if (*p != ',')
  -        {
  -        if (*p != config->delim_close)
  +    if (*p != ',') {
  +        if (*p != var->syntax.delim_close)
               return VAR_ERR_INVALID_CHAR_IN_LOOP_LIMITS;
  -        else
  -            {
  -            ++p;
  +        else {
  +            p++;
               *stop = *step;
               *step = 1;
               if (rc > 0)
  @@ -1793,43 +1808,77 @@
               else
                   *open_end = 1;
               return p - begin;
  -            }
           }
  +    }
       else
  -        ++p;
  +        p++;
   
       /* Read stop value for the loop. */
  -
       failed = 0;
  -    rc = num_exp(p, end, 0, stop, &failed, &dummy,
  -                 config, nameclass, lookup, lookup_context);
  -    if (rc == VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC)
  -        {
  -        *stop = 0;          /* use default */
  +    rc = parse_num_exp(var, ctx, p, end, 0, stop, &failed, &dummy);
  +    if (rc == VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC) {
  +        *stop = 0;  /* use default */
           *open_end = 1;
  -        }
  +    }
       else if (rc < 0)
           return rc;
  -    else
  -        {
  +    else {
           *open_end = 0;
           p += rc;
  -        }
  +    }
       if (failed)
           return VAR_ERR_UNDEFINED_VARIABLE;
  -
  -    if (*p != config->delim_close)
  +    if (*p != var->syntax.delim_close)
           return VAR_ERR_INVALID_CHAR_IN_LOOP_LIMITS;
   
       return ++p - begin;
  +}
  +
  +/* callback wrapper context */
  +typedef struct {
  +    var_cb_value_t cb_value_fct;
  +    void          *cb_value_ctx;
  +    int           *rel_lookup_flag;
  +} var_wrapper_t;
  +
  +/* callback wrapper function */
  +static int 
  +lookup_wrapper(
  +    var_t *var, void *ctx,
  +    const char  *var_ptr, size_t  var_len, int     var_idx,
  +    const char **val_ptr, size_t *val_len, size_t *val_size)
  +{
  +    char buf[1];
  +    var_wrapper_t *wcon = (var_wrapper_t *)ctx;
  +    int rc;
  +
  +    /* pass through to original callback */
  +    rc = (*wcon->cb_value_fct)(var, wcon->cb_value_ctx,
  +                               var_ptr, var_len, var_idx, 
  +                               val_ptr, val_len, val_size);
  +
  +    /* convert undefined variable into empty variable */
  +    if (rc == VAR_ERR_UNDEFINED_VARIABLE) {
  +        (*wcon->rel_lookup_flag)--;
  +        buf[0] = NUL;
  +        *val_ptr  = buf;
  +        *val_len  = 0;
  +        *val_size = 0;
  +        return VAR_OK;
       }
   
  -static var_rc_t input(const char *begin, const char *end,
  -                      const var_syntax_t *config,
  -                      const char_class_t nameclass, var_cb_value_t lookup,
  -                      void *lookup_context, int force_expand,
  -                      tokenbuf_t *output, int index_mark,
  -                      size_t recursion_level, int *rel_lookup_flag)
  +    return rc;
  +}
  +
  +/* expand input in general */
  +static var_rc_t 
  +parse_input(
  +    var_t *var,
  +    var_parse_t *ctx,
  +    const char *begin, const char *end,
  +    int force_expand,
  +    tokenbuf_t *output, int index_this,
  +    size_t recursion_level, int *rel_lookup_flag)
   {
       const char *p = begin;
       int rc, rc2;
  @@ -1837,7 +1886,7 @@
       int start, step, stop, open_end;
       int i;
       int output_backup;
  -    struct wrapper_context wcon;
  +    var_wrapper_t wcon;
       int my_rel_lookup_flag;
       int original_rel_lookup_state;
       int loop_limit_length;
  @@ -1850,12 +1899,9 @@
       }
   
       do {
  -        if (begin != end && config->index_open && *begin == config->index_open) {
  +        if (begin != end && var->syntax.index_open && *begin == var->syntax.index_open) {
               original_rel_lookup_state = *rel_lookup_flag;
               loop_limit_length = -1;
  -            wcon.lookup = lookup;
  -            wcon.context = lookup_context;
  -            wcon.rel_lookup_flag = rel_lookup_flag;
               begin++;
               start = 0;
               step  = 1;
  @@ -1870,34 +1916,41 @@
                    i += step) {
                   *rel_lookup_flag = original_rel_lookup_state;
                   output_backup = output->end - output->begin;
  -                rc = input(begin, end, config, nameclass, &lookup_wrapper,
  -                           &wcon, 1, output, i, recursion_level+1, rel_lookup_flag);
  +
  +                /* activate callback wrapper */
  +                wcon.cb_value_fct    = var->cb_value_fct;
  +                wcon.cb_value_ctx    = var->cb_value_ctx;
  +                wcon.rel_lookup_flag = rel_lookup_flag;
  +                var->cb_value_fct    = lookup_wrapper;
  +                var->cb_value_ctx    = &wcon;
  +
  +                rc = parse_input(var, ctx, begin, end, 
  +                                 1, output, i, recursion_level+1, rel_lookup_flag);
  +
  +                /* deactivate callback wrapper */
  +                var->cb_value_fct = wcon.cb_value_fct;
  +                var->cb_value_ctx = wcon.cb_value_ctx;
  +
                   if (rc < 0)
                       goto error_return;
  -                if (begin[rc] != config->index_close) {
  +                if (begin[rc] != var->syntax.index_close) {
                       rc = VAR_ERR_UNTERMINATED_LOOP_CONSTRUCT;
                       goto error_return;
                   }
  -                if (loop_limit_length < 0)
  -                    {
  -                    rc2 = loop_limits(begin + rc + 1, end, config, nameclass,
  -                                      lookup, lookup_context, &start, &step,
  -                                      &stop, &open_end);
  +                if (loop_limit_length < 0) {
  +                    rc2 = parse_looplimits(var, ctx, begin + rc + 1, end, 
  +                                            &start, &step,
  +                                            &stop, &open_end);
                       if (rc2 < 0)
  -                        {
                           goto error_return;
  -                        }
                       else if (rc2 == 0)
  -                        {
                           loop_limit_length = 0;
  -                        }
  -                    else if (rc2 > 0)
  -                        {
  +                    else if (rc2 > 0) {
                           loop_limit_length = rc2;
                           output->end = output->begin + output_backup;
                           goto re_loop;
  -                        }
                       }
  +                }
               }
               if (open_end)
                   output->end = output->begin + output_backup;
  @@ -1909,8 +1962,7 @@
               continue;
           }
   
  -        rc = text(begin, end, config->delim_init, config->index_open,
  -                  config->index_close, config->escape);
  +        rc = parse_text(var, ctx, begin, end);
           if (rc > 0) {
               if (!tokenbuf_append(output, begin, rc)) {
                   rc = VAR_ERR_OUT_OF_MEMORY;
  @@ -1921,9 +1973,9 @@
           } else if (rc < 0)
               goto error_return;
   
  -        rc = variable(begin, end, config, nameclass, lookup,
  -                      lookup_context, force_expand, &result,
  -                      index_mark, rel_lookup_flag);
  +        rc = parse_variable(var, ctx, begin, end, 
  +                             force_expand, &result,
  +                             index_this, rel_lookup_flag);
           if (rc > 0) {
               if (!tokenbuf_append(output, result.begin, result.end - result.begin)) {
                   rc = VAR_ERR_OUT_OF_MEMORY;
  @@ -1952,7 +2004,11 @@
       return rc;
   }
   
  -/* ------------------------------------------------------------------ */
  +/* 
  +**
  +**  ==== APPLICATION PROGRAMMING INTERFACE (API) ====
  +**
  +*/
   
   var_rc_t 
   var_create(
  @@ -2088,7 +2144,7 @@
           } else
               *dst++ = *src++;
       }
  -    *dst = '\0';
  +    *dst = NUL;
       return VAR_OK;
   }
   
  @@ -2099,7 +2155,7 @@
       char **dst_ptr, size_t *dst_len, 
       int force_expand)
   {
  -    var_expand_t ctx;
  +    var_parse_t ctx;
       tokenbuf_t output;
       var_rc_t rc;
   
  @@ -2116,10 +2172,9 @@
   
       /* call the parsing */
       tokenbuf_init(&output);
  -    rc = input(src_ptr, src_ptr + src_len, 
  -               &var->syntax, var->syntax_nameclass,
  -               var->cb_value_fct, var->cb_value_ctx, 
  -               ctx.force_expand, &output, 0, 0, NULL);
  +    rc = parse_input(var, &ctx, 
  +                     src_ptr, src_ptr + src_len, 
  +                     ctx.force_expand, &output, 0, 0, NULL);
   
       /* post-process output */
       if (rc >= 0) {

From ossp-cvs-owner@ossp.org  Fri Mar  1 16:27:58 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 47FAF76366; Fri,  1 Mar 2002 16:27:58 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp devtool.conf
Message-Id: <20020301152758.47FAF76366@mail.ossp.org>
Date: Fri,  1 Mar 2002 16:27:58 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   01-Mar-2002 16:27:58
  Branch: HEAD                             Handle: 2002030115275700

  Modified files:
    ossp-pkg/lmtp2nntp      devtool.conf

  Log:
    - use a loop construct to simplify %autogen and %autoclean targets
    
    - introduce a new %checkout target for checking out the sub-modules
      now that we'll remove the nice but nasty (because has no history!) CVS
      modules feature for lmtp2nntp.

  Summary:
    Revision    Changes     Path
    1.6         +17 -48     ossp-pkg/lmtp2nntp/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/devtool.conf
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 devtool.conf
  --- ossp-pkg/lmtp2nntp/devtool.conf	13 Feb 2002 13:18:25 -0000	1.5
  +++ ossp-pkg/lmtp2nntp/devtool.conf	1 Mar 2002 15:27:57 -0000	1.6
  @@ -2,63 +2,32 @@
   ##  devtool.conf -- Development Tool Configuration
   ##
   
  +%checkout
  +    for name in ex str l2 sa var val popt pcre; do
  +        echo "===> lib_${name} (cvs co)"
  +        cvs co -d lib_${name} ${name}
  +        echo "<=== lib_${name}"
  +    done
  +
   %autogen
       @autogen shtool   1.5.4 "1.5.*" all
       @autogen autoconf 2.52  "2.5.*"
   
  -    echo "===> lib_ex (devtool autogen)"
  -    (cd lib_ex && ./devtool autogen)
  -    echo "<=== lib_ex"
  -    echo "===> lib_str (devtool autogen)"
  -    (cd lib_str && ./devtool autogen)
  -    echo "<=== lib_str"
  -    echo "===> lib_l2 (devtool autogen)"
  -    (cd lib_l2 && ./devtool autogen)
  -    echo "<=== lib_l2"
  -    echo "===> lib_sa (devtool autogen)"
  -    (cd lib_sa && ./devtool autogen)
  -    echo "<=== lib_sa"
  -    echo "===> lib_var (devtool autogen)"
  -    (cd lib_var && ./devtool autogen)
  -    echo "<=== lib_var"
  -    echo "===> lib_val (devtool autogen)"
  -    (cd lib_val && ./devtool autogen)
  -    echo "<=== lib_val"
  -    echo "===> lib_popt (devtool autogen)"
  -    (cd lib_popt && ./devtool autogen)
  -    echo "<=== lib_popt"
  -    echo "===> lib_pcre (devtool autogen)"
  -    (cd lib_pcre && ./devtool autogen)
  -    echo "<=== lib_pcre"
  +    for name in ex str l2 sa var val popt pcre; do
  +        echo "===> lib_${name} (devtool autogen)"
  +        (cd lib_${name} && ./devtool autogen)
  +        echo "<=== lib_${name}"
  +    done
   
   %autoclean
       @autoclean shtool
       @autoclean autoconf
   
  -    echo "===> lib_ex (devtool autoclean)"
  -    (cd lib_ex && ./devtool autoclean)
  -    echo "<=== lib_ex"
  -    echo "===> lib_str (devtool autoclean)"
  -    (cd lib_str && ./devtool autoclean)
  -    echo "<=== lib_str"
  -    echo "===> lib_l2 (devtool autoclean)"
  -    (cd lib_l2 && ./devtool autoclean)
  -    echo "<=== lib_l2"
  -    echo "===> lib_sa (devtool autoclean)"
  -    (cd lib_sa && ./devtool autoclean)
  -    echo "<=== lib_sa"
  -    echo "===> lib_var (devtool autoclean)"
  -    (cd lib_var && ./devtool autoclean)
  -    echo "<=== lib_var"
  -    echo "===> lib_val (devtool autoclean)"
  -    (cd lib_val && ./devtool autoclean)
  -    echo "<=== lib_val"
  -    echo "===> lib_popt (devtool autoclean)"
  -    (cd lib_popt && ./devtool autoclean)
  -    echo "<=== lib_popt"
  -    echo "===> lib_pcre (devtool autoclean)"
  -    (cd lib_pcre && ./devtool autoclean)
  -    echo "<=== lib_pcre"
  +    for name in ex str l2 sa var val popt pcre; do
  +        echo "===> lib_${name} (devtool autoclean)"
  +        (cd lib_${name} && ./devtool autoclean)
  +        echo "<=== lib_${name}"
  +    done
   
   %configure
       ./configure \

From ossp-cvs-owner@ossp.org  Fri Mar  1 16:30:24 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3DCBB76366; Fri,  1 Mar 2002 16:30:24 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Message-Id: <20020301153024.3DCBB76366@mail.ossp.org>
Date: Fri,  1 Mar 2002 16:30:24 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: CVSROOT                          Date:   01-Mar-2002 16:30:24
  Branch: HEAD                             Handle: 2002030115302300

  Modified files:
    CVSROOT                 modules

  Log:
    Do no longer use sub-modules because they always checkout just the latest
    version and the set of checked out things cannot be kept in sync with the
    revisions of the parent module. So if we need to checkout foo into subdir foo/
    in lmtp2nntp 1.0 and into lib_foo/ in lmtp2nntp 1.1 we got into great trouble.
    Just a single version works at the same time. We now do it with a version
    controlled devtool.conf:%checkout which can be different for every lmtp2nntp
    version. Same should be done for OSSP rc and future projects.

  Summary:
    Revision    Changes     Path
    1.53        +1  -9      CVSROOT/modules
  ____________________________________________________________________________

  Index: CVSROOT/modules
  ============================================================
  $ cvs diff -u -r1.52 -r1.53 modules
  --- CVSROOT/modules	13 Feb 2002 13:04:14 -0000	1.52
  +++ CVSROOT/modules	1 Mar 2002 15:30:23 -0000	1.53
  @@ -91,15 +91,7 @@
   petidomo        ossp-pkg/petidomo
   
   #   OSSP lmtp2nntp
  -lmtp2nntp       ossp-pkg/lmtp2nntp &lmtp2nntp_str &lmtp2nntp_l2 &lmtp2nntp_sa &lmtp2nntp_var &lmtp2nntp_val &lmtp2nntp_ex &lmtp2nntp_popt &lmtp2nntp_pcre
  -lmtp2nntp_str   -d lib_str  ossp-pkg/str
  -lmtp2nntp_l2    -d lib_l2   ossp-pkg/l2
  -lmtp2nntp_sa    -d lib_sa   ossp-pkg/sa
  -lmtp2nntp_var   -d lib_var  ossp-pkg/var
  -lmtp2nntp_val   -d lib_val  ossp-pkg/val
  -lmtp2nntp_ex    -d lib_ex   ossp-pkg/ex
  -lmtp2nntp_popt  -d lib_popt ossp-pkg/popt
  -lmtp2nntp_pcre  -d lib_pcre ossp-pkg/pcre
  +lmtp2nntp       ossp-pkg/lmtp2nntp
   
   #   OSSP rc
   rc              ossp-pkg/rc &rc_str &rc_var &rc_val &rc_popt &rc_ex

From ossp-cvs-owner@ossp.org  Fri Mar  1 21:28:35 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9C6D676366; Fri,  1 Mar 2002 21:28:34 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Message-Id: <20020301202834.9C6D676366@mail.ossp.org>
Date: Fri,  1 Mar 2002 21:28:34 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   01-Mar-2002 21:28:34
  Branch: HEAD                             Handle: 2002030120283300

  Modified files:
    ossp-pkg/var            var.c

  Log:
    Code Cleanup Phase II
    (too much details to describe)

  Summary:
    Revision    Changes     Path
    1.71        +397 -374   ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.70 -r1.71 var.c
  --- ossp-pkg/var/var.c	28 Feb 2002 20:28:14 -0000	1.70
  +++ ossp-pkg/var/var.c	1 Mar 2002 20:28:33 -0000	1.71
  @@ -79,9 +79,14 @@
   };
   
   /* the internal expansion context structure */
  -typedef struct {
  -    int            force_expand;
  -} var_parse_t;
  +struct var_parse_st {
  +    struct var_parse_st *lower;
  +    int force_expand;
  +    int rel_lookup_flag;
  +    int rel_lookup_cnt;
  +    int index_this;
  +};
  +typedef struct var_parse_st var_parse_t;
   
   /* the default syntax configuration */
   static const var_syntax_t var_syntax_default = {
  @@ -97,6 +102,32 @@
   
   /*
   **
  +**  ==== PARSE CONTEXT FUNCTIONS ====
  +**
  +*/
  +
  +static var_parse_t *
  +var_parse_push(
  +    var_parse_t *lower, var_parse_t *upper)
  +{
  +    if (upper == NULL)
  +        return NULL;
  +    memcpy(upper, lower, sizeof(var_parse_t));
  +    upper->lower = lower;
  +    return upper;
  +}
  +
  +static var_parse_t *
  +var_parse_pop(
  +    var_parse_t *upper)
  +{
  +    if (upper == NULL)
  +        return NULL;
  +    return upper->lower;
  +}
  +
  +/*
  +**
   **  ==== TOKEN BUFFER FUNCTIONS ====
   **
   */
  @@ -228,6 +259,7 @@
           class[(int)a] = 1;
       }
       while (++a <= b);
  +    return;
   }
   
   static var_rc_t expand_character_class(const char *desc, char_class_t class)
  @@ -366,9 +398,9 @@
   */
   
   /* forward declarations */
  -static int parse_variable(var_t *var, var_parse_t *ctx, const char *begin, const char *end, int force_expand, tokenbuf_t *result, int index_this, int* rel_lookup_flag);
  -static int parse_command (var_t *var, var_parse_t *ctx, const char *begin, const char *end, int force_expand, tokenbuf_t *data, int index_this, int* rel_lookup_flag);
  -static int parse_num_exp (var_t *var, var_parse_t *ctx, const char *begin, const char *end, int index_this, int* result, int* failed, int* rel_lookup_flag);
  +static int parse_variable(var_t *var, var_parse_t *ctx, const char *begin, const char *end, tokenbuf_t *result);
  +static int parse_command (var_t *var, var_parse_t *ctx, const char *begin, const char *end, tokenbuf_t *data);
  +static int parse_num_exp (var_t *var, var_parse_t *ctx, const char *begin, const char *end, int *result, int *failed);
   
   /* parse plain text */
   static int 
  @@ -484,11 +516,13 @@
   parse_num_exp_operand(
       var_t *var, var_parse_t *ctx,
       const char *begin, const char *end, 
  -    int index_this, int *result, int *failed, int *rel_lookup_flag)
  +    int *result, 
  +    int *failed)
   {
       const char *p;
       tokenbuf_t tmp;
       int rc;
  +    var_parse_t myctx;
   
       p = begin;
       tokenbuf_init(&tmp);
  @@ -497,8 +531,7 @@
           return VAR_ERR_INCOMPLETE_INDEX_SPEC;
   
       if (*p == '(') {
  -        rc = parse_num_exp(var, ctx, ++p, end, index_this, result, failed,
  -                     rel_lookup_flag);
  +        rc = parse_num_exp(var, ctx, ++p, end, result, failed);
           if (rc < 0)
               return rc;
           p += rc;
  @@ -509,12 +542,16 @@
           ++p;
       }
       else if (*p == var->syntax.delim_init) {
  -        rc = parse_variable(var, ctx, p, end, 
  -                            1, &tmp, index_this, rel_lookup_flag);
  +        ctx = var_parse_push(ctx, &myctx);
  +        ctx->force_expand = 1;
  +        rc = parse_variable(var, ctx, p, end, &tmp);
  +        ctx = var_parse_pop(ctx);
           if (rc == VAR_ERR_UNDEFINED_VARIABLE) {
               *failed = 1;
  -            rc = parse_variable(var, ctx, p, end, 
  -                                0, &tmp, index_this, rel_lookup_flag);
  +            ctx = var_parse_push(ctx, &myctx);
  +            ctx->force_expand = 0;
  +            rc = parse_variable(var, ctx, p, end, &tmp);
  +            ctx = var_parse_pop(ctx);
               if (rc < 0)
                   return rc;
               p += rc;
  @@ -524,8 +561,7 @@
               if (rc < 0)
                   return rc;
               p += rc;
  -            rc = parse_num_exp(var, ctx, tmp.begin, tmp.end, index_this, result,
  -                         failed, rel_lookup_flag );
  +            rc = parse_num_exp(var, ctx, tmp.begin, tmp.end, result, failed);
               tokenbuf_free(&tmp);
               if (rc < 0)
                   return rc;
  @@ -533,8 +569,9 @@
       }
       else if (var->syntax.index_mark && *p == var->syntax.index_mark) {
           p++;
  -        *result = index_this;
  -        (*rel_lookup_flag)++;
  +        *result = ctx->index_this;
  +        if (ctx->rel_lookup_flag)
  +            ctx->rel_lookup_cnt++;
       }
       else if (isdigit(*p)) {
           *result = convert_num_exp_read_int(&p, end);
  @@ -566,8 +603,7 @@
   parse_num_exp(
       var_t *var, var_parse_t *ctx,
       const char *begin, const char *end, 
  -    int index_this,
  -    int *result, int *failed, int *rel_lookup_flag)
  +    int *result, int *failed)
   {
       const char *p = begin;
       char operator;
  @@ -577,8 +613,7 @@
       if (begin == end)
           return VAR_ERR_INCOMPLETE_INDEX_SPEC;
   
  -    rc = parse_num_exp_operand(var, ctx, p, end, index_this, result,
  -                              failed, rel_lookup_flag);
  +    rc = parse_num_exp_operand(var, ctx, p, end, result, failed);
       if (rc < 0)
           return rc;
       p += rc;
  @@ -586,8 +621,7 @@
       while (p != end) {
           if (*p == '+' || *p == '-') {
               operator = *p++;
  -            rc = parse_num_exp(var, ctx, p, end, index_this, &right, failed,
  -                         rel_lookup_flag);
  +            rc = parse_num_exp(var, ctx, p, end, &right, failed);
               if (rc < 0)
                   return rc;
               p += rc;
  @@ -598,8 +632,7 @@
           }
           else if (*p == '*' || *p == '/' || *p == '%') {
               operator = *p++;
  -            rc = parse_num_exp_operand(var, ctx, p, end, index_this, &right, failed,
  -                                      rel_lookup_flag);
  +            rc = parse_num_exp_operand(var, ctx, p, end, &right, failed);
               if (rc < 0)
                   return rc;
               p += rc;
  @@ -633,12 +666,39 @@
       return p - begin;
   }
   
  +/* callback wrapper function */
  +static int 
  +lookup_value(
  +    var_t *var, var_parse_t *ctx,
  +    const char  *var_ptr, size_t  var_len, int     var_idx,
  +    const char **val_ptr, size_t *val_len, size_t *val_size)
  +{
  +    char buf[1];
  +    int rc;
  +
  +    /* pass through to original callback */
  +    rc = (*var->cb_value_fct)(var, var->cb_value_ctx,
  +                              var_ptr, var_len, var_idx, 
  +                              val_ptr, val_len, val_size);
  +
  +    /* convert undefined variable into empty variable */
  +    if (ctx->rel_lookup_flag && rc == VAR_ERR_UNDEFINED_VARIABLE) {
  +        ctx->rel_lookup_cnt--;
  +        buf[0] = NUL;
  +        *val_ptr  = buf;
  +        *val_len  = 0;
  +        *val_size = 0;
  +        return VAR_OK;
  +    }
  +
  +    return rc;
  +}
  +
   static int 
   parse_expression(
       var_t *var, var_parse_t *ctx,
       const char *begin, const char *end,
  -    int force_expand,
  -    tokenbuf_t *result, int index_this, int *rel_lookup_flag)
  +    tokenbuf_t *result)
   {
       const char *p = begin;
       const char *data;
  @@ -678,8 +738,7 @@
               p += rc;
           }
   
  -        rc = parse_variable(var, ctx, p, end, 
  -                      force_expand, &tmp, index_this, rel_lookup_flag);
  +        rc = parse_variable(var, ctx, p, end, &tmp);
           if (rc < 0)
               goto error_return;
           if (rc > 0) {
  @@ -695,7 +754,7 @@
          do. */
   
       if (name.begin == name.end) {
  -        if (force_expand) {
  +        if (ctx->force_expand) {
               rc = VAR_ERR_INCOMPLETE_VARIABLE_SPEC;
               goto error_return;
           }
  @@ -715,8 +774,7 @@
       /* If the next token is START-INDEX, read the index specification. */
   
       if (var->syntax.index_open && *p == var->syntax.index_open) {
  -        rc = parse_num_exp(var, ctx, ++p, end, index_this, &idx, &failed,
  -                     rel_lookup_flag);
  +        rc = parse_num_exp(var, ctx, ++p, end, &idx, &failed);
           if (rc < 0)
               goto error_return;
           if (rc == 0) {
  @@ -753,12 +811,12 @@
           result->buffer_size = 0;
       }
       else {
  -        rc = (*var->cb_value_fct) (var, var->cb_value_ctx, name.begin, name.end - name.begin, idx,
  -                        &data, &len, &buffer_size);
  +        rc = lookup_value(var, ctx, name.begin, name.end - name.begin, idx,
  +                          &data, &len, &buffer_size);
           if (rc == VAR_ERR_UNDEFINED_VARIABLE) {
               /* The variable is undefined. What we'll do now depends on the
                  force_expand flag. */
  -            if (force_expand)
  +            if (ctx->force_expand)
                   goto error_return;
   
               /* Initialize result to point back to the original text in
  @@ -789,13 +847,9 @@
           while (p != end && *p == ':') {
               p++;
               if (!failed)
  -                rc = parse_command(var, ctx, p, end, 
  -                             force_expand, result,
  -                             index_this, rel_lookup_flag);
  +                rc = parse_command(var, ctx, p, end, result);
               else
  -                rc = parse_command(var, ctx, p, end, 
  -                             force_expand, &tmp,
  -                             index_this, rel_lookup_flag);
  +                rc = parse_command(var, ctx, p, end, &tmp);
               if (rc < 0)
                   goto error_return;
               p += rc;
  @@ -832,8 +886,7 @@
       var_t *var, 
       var_parse_t *ctx,
       const char *begin, const char *end,
  -    int force_expand, tokenbuf_t *result, int index_this,
  -    int *rel_lookup_flag)
  +    tokenbuf_t *result)
   {
       const char *p = begin;
       const char *data;
  @@ -860,8 +913,8 @@
       if (rc < 0)
           return rc;
       if (rc > 0) {
  -        rc2 = (*var->cb_value_fct)(var, var->cb_value_ctx, p, rc, 0, &data, &len, &buffer_size);
  -        if (rc2 == VAR_ERR_UNDEFINED_VARIABLE && !force_expand) {
  +        rc2 = lookup_value(var, ctx, p, rc, 0, &data, &len, &buffer_size);
  +        if (rc2 == VAR_ERR_UNDEFINED_VARIABLE && !ctx->force_expand) {
               result->begin = begin;
               result->end = begin + 1 + rc;
               result->buffer_size = 0;
  @@ -877,8 +930,7 @@
   
       /* OK, we're dealing with a complex expression here. */
   
  -    rc = parse_expression(var, ctx, p, end, 
  -                    force_expand, result, index_this, rel_lookup_flag);
  +    rc = parse_expression(var, ctx, p, end, result);
       if (rc > 0)
           rc++;
       return rc;
  @@ -888,9 +940,7 @@
   parse_exptext_or_variable(
       var_t *var, var_parse_t *ctx,
       const char *begin, const char *end,
  -    int force_expand,
  -    tokenbuf_t *result, int index_this,
  -    int *rel_lookup_flag)
  +    tokenbuf_t *result)
   {
       const char *p = begin;
       tokenbuf_t tmp;
  @@ -914,8 +964,7 @@
               p += rc;
           }
   
  -        rc = parse_variable(var, ctx, p, end, 
  -                      force_expand, &tmp, index_this, rel_lookup_flag);
  +        rc = parse_variable(var, ctx, p, end, &tmp);
           if (rc < 0)
               goto error_return;
           if (rc > 0) {
  @@ -941,9 +990,7 @@
   parse_substext_or_variable(
       var_t *var, var_parse_t *ctx,
       const char *begin, const char *end,
  -    int force_expand,
  -    tokenbuf_t *result, int index_this,
  -    int *rel_lookup_flag)
  +    tokenbuf_t *result)
   {
       const char *p = begin;
       tokenbuf_t tmp;
  @@ -967,8 +1014,7 @@
               p += rc;
           }
   
  -        rc = parse_variable(var, ctx, p, end, 
  -                      force_expand, &tmp, index_this, rel_lookup_flag);
  +        rc = parse_variable(var, ctx, p, end, &tmp);
           if (rc < 0)
               goto error_return;
           if (rc > 0) {
  @@ -990,7 +1036,8 @@
       return rc;
   }
   
  -static int parse_class_description(tokenbuf_t *src, tokenbuf_t *dst)
  +static int 
  +parse_class_description(tokenbuf_t *src, tokenbuf_t *dst)
   {
       unsigned char c, d;
       const char *p = src->begin;
  @@ -1013,8 +1060,11 @@
       return VAR_OK;
   }
   
  -static int transpose(tokenbuf_t *data, tokenbuf_t *search,
  -                     tokenbuf_t *replace)
  +static int 
  +op_transpose(
  +    tokenbuf_t *data, 
  +    tokenbuf_t *search,
  +    tokenbuf_t *replace)
   {
       tokenbuf_t srcclass, dstclass;
       const char *p;
  @@ -1050,7 +1100,7 @@
       for (p = data->begin; p != data->end; ++p) {
           for (i = 0; i <= (srcclass.end - srcclass.begin); ++i) {
               if (*p == srcclass.begin[i]) {
  -                *((char *) p) = dstclass.begin[i];
  +                *((char *)p) = dstclass.begin[i];
                   break;
               }
           }
  @@ -1068,8 +1118,12 @@
       return rc;
   }
   
  -static int cut_out_offset(tokenbuf_t *data, tokenbuf_t *number1,
  -                          tokenbuf_t *number2, int isrange)
  +static int 
  +op_cut_out_offset(
  +    tokenbuf_t *data, 
  +    tokenbuf_t *number1,
  +    tokenbuf_t *number2, 
  +    int isrange)
   {
       tokenbuf_t res;
       const char *p;
  @@ -1112,8 +1166,12 @@
       return VAR_OK;
   }
   
  -static int parse_regex_replace(const char *data, tokenbuf_t *orig,
  -                                regmatch_t *pmatch, tokenbuf_t *expanded)
  +static int 
  +parse_regex_replace(
  +    const char *data, 
  +    tokenbuf_t *orig,
  +    regmatch_t *pmatch, 
  +    tokenbuf_t *expanded)
   {
       const char *p = orig->begin;
       size_t i;
  @@ -1162,8 +1220,12 @@
       return VAR_OK;
   }
   
  -static int search_and_replace(tokenbuf_t *data, tokenbuf_t *search,
  -                              tokenbuf_t *replace, tokenbuf_t *flags)
  +static int 
  +op_search_and_replace(
  +    tokenbuf_t *data, 
  +    tokenbuf_t *search,
  +    tokenbuf_t *replace, 
  +    tokenbuf_t *flags)
   {
       const char *p;
       int case_insensitive = 0;
  @@ -1316,8 +1378,12 @@
       return VAR_OK;
   }
   
  -static int padding(tokenbuf_t *data, tokenbuf_t *widthstr, tokenbuf_t *fill,
  -                   char position)
  +static int 
  +op_padding(
  +    tokenbuf_t *data, 
  +    tokenbuf_t *widthstr, 
  +    tokenbuf_t *fill,
  +    char position)
   {
       tokenbuf_t result;
       size_t width = tokenbuf_toint(widthstr);
  @@ -1428,8 +1494,7 @@
   parse_command(
       var_t *var, var_parse_t *ctx,
       const char *begin, const char *end,
  -    int force_expand,
  -    tokenbuf_t *data, int index_this, int *rel_lookup_flag)
  +    tokenbuf_t *data)
   {
       const char *p = begin;
       tokenbuf_t tmptokbuf;
  @@ -1449,281 +1514,272 @@
           return 0;
   
       switch (tolower(*p)) {
  -    case 'l':                   /* Turn data to lowercase. */
  -        if (data->begin) {
  -            char *ptr;
  -            /* If the buffer does not live in an allocated buffer,
  -               we have to copy it before modifying the contents. */
  +        case 'l':                   /* Turn data to lowercase. */
  +            if (data->begin) {
  +                char *ptr;
  +                /* If the buffer does not live in an allocated buffer,
  +                   we have to copy it before modifying the contents. */
  +
  +                if (data->buffer_size == 0) {
  +                    if (!tokenbuf_assign(data, data->begin, data->end - data->begin)) {
  +                        rc = VAR_ERR_OUT_OF_MEMORY;
  +                        goto error_return;
  +                    }
  +                }
  +                for (ptr = (char *)data->begin; ptr != data->end; ++ptr)
  +                    *ptr = tolower(*ptr);
  +            }
  +            p++;
  +            break;
   
  -            if (data->buffer_size == 0) {
  -                if (!tokenbuf_assign(data, data->begin, data->end - data->begin)) {
  -                    rc = VAR_ERR_OUT_OF_MEMORY;
  -                    goto error_return;
  +        case 'u':                   /* Turn data to uppercase. */
  +            if (data->begin) {
  +                char *ptr;
  +                if (data->buffer_size == 0) {
  +                    if (!tokenbuf_assign
  +                        (data, data->begin, data->end - data->begin)) {
  +                        rc = VAR_ERR_OUT_OF_MEMORY;
  +                        goto error_return;
  +                    }
                   }
  +                for (ptr = (char *) data->begin; ptr != data->end; ++ptr)
  +                    *ptr = toupper(*ptr);
               }
  -            for (ptr = (char *)data->begin; ptr != data->end; ++ptr)
  -                *ptr = tolower(*ptr);
  -        }
  -        p++;
  -        break;
  +            ++p;
  +            break;
   
  -    case 'u':                   /* Turn data to uppercase. */
  -        if (data->begin) {
  -            char *ptr;
  -            if (data->buffer_size == 0) {
  -                if (!tokenbuf_assign
  -                    (data, data->begin, data->end - data->begin)) {
  +        case 'o':                   /* Cut out substrings. */
  +            ++p;
  +            rc = parse_number(var, ctx, p, end);
  +            if (rc == 0) {
  +                rc = VAR_ERR_MISSING_START_OFFSET;
  +                goto error_return;
  +            }
  +            number1.begin = p;
  +            number1.end = p + rc;
  +            number1.buffer_size = 0;
  +            p += rc;
  +
  +            if (*p == ',') {
  +                isrange = 0;
  +                ++p;
  +            } else if (*p == '-') {
  +                isrange = 1;
  +                ++p;
  +            } else {
  +                rc = VAR_ERR_INVALID_OFFSET_DELIMITER;
  +                goto error_return;
  +            }
  +
  +            rc = parse_number(var, ctx, p, end);
  +            number2.begin = p;
  +            number2.end = p + rc;
  +            number2.buffer_size = 0;
  +            p += rc;
  +            if (data->begin) {
  +                rc = op_cut_out_offset(data, &number1, &number2, isrange);
  +                if (rc < 0)
  +                    goto error_return;
  +            }
  +            break;
  +
  +        case '#':                   /* Substitute length of the string. */
  +            if (data->begin) {
  +                char buf[((sizeof(int)*8)/3)+10]; /* sufficient size: <#bits> x log_10(2) + safety */
  +                sprintf(buf, "%d", (int)(data->end - data->begin));
  +                tokenbuf_free(data);
  +                if (!tokenbuf_assign(data, buf, strlen(buf))) {
                       rc = VAR_ERR_OUT_OF_MEMORY;
                       goto error_return;
                   }
               }
  -            for (ptr = (char *) data->begin; ptr != data->end; ++ptr)
  -                *ptr = toupper(*ptr);
  -        }
  -        ++p;
  -        break;
  -
  -    case 'o':                   /* Cut out substrings. */
  -        ++p;
  -        rc = parse_number(var, ctx, p, end);
  -        if (rc == 0) {
  -            rc = VAR_ERR_MISSING_START_OFFSET;
  -            goto error_return;
  -        }
  -        number1.begin = p;
  -        number1.end = p + rc;
  -        number1.buffer_size = 0;
  -        p += rc;
  -
  -        if (*p == ',') {
  -            isrange = 0;
  -            ++p;
  -        } else if (*p == '-') {
  -            isrange = 1;
               ++p;
  -        } else {
  -            rc = VAR_ERR_INVALID_OFFSET_DELIMITER;
  -            goto error_return;
  -        }
  +            break;
   
  -        rc = parse_number(var, ctx, p, end);
  -        number2.begin = p;
  -        number2.end = p + rc;
  -        number2.buffer_size = 0;
  -        p += rc;
  -        if (data->begin) {
  -            rc = cut_out_offset(data, &number1, &number2, isrange);
  +        case '-':                   /* Substitute parameter if data is empty. */
  +            p++;
  +            rc = parse_exptext_or_variable(var, ctx, p, end, &tmptokbuf);
               if (rc < 0)
                   goto error_return;
  -        }
  -        break;
  -
  -    case '#':                   /* Substitute length of the string. */
  -        if (data->begin) {
  -            char buf[((sizeof(int)*8)/3)+10]; /* sufficient size: <#bits> x log_10(2) + safety */
  -            sprintf(buf, "%d", (int)(data->end - data->begin));
  -            tokenbuf_free(data);
  -            if (!tokenbuf_assign(data, buf, strlen(buf))) {
  -                rc = VAR_ERR_OUT_OF_MEMORY;
  +            if (rc == 0) {
  +                rc = VAR_ERR_MISSING_PARAMETER_IN_COMMAND;
                   goto error_return;
               }
  -        }
  -        ++p;
  -        break;
  -
  -    case '-':                   /* Substitute parameter if data is empty. */
  -        p++;
  -        rc = parse_exptext_or_variable(var, ctx, p, end, 
  -                                 force_expand, &tmptokbuf,
  -                                 index_this, rel_lookup_flag);
  -        if (rc < 0)
  -            goto error_return;
  -        if (rc == 0) {
  -            rc = VAR_ERR_MISSING_PARAMETER_IN_COMMAND;
  -            goto error_return;
  -        }
  -        p += rc;
  -        if (data->begin != NULL && data->begin == data->end) {
  -            tokenbuf_free(data);
  -            tokenbuf_move(&tmptokbuf, data);
  -        }
  -        break;
  -
  -    case '*':                   /* Return "" if data is not empty, parameter otherwise. */
  -        p++;
  -        rc = parse_exptext_or_variable(var, ctx, p, end, 
  -                                 force_expand, &tmptokbuf, index_this, rel_lookup_flag);
  -        if (rc < 0)
  -            goto error_return;
  -        if (rc == 0) {
  -            rc = VAR_ERR_MISSING_PARAMETER_IN_COMMAND;
  -            goto error_return;
  -        }
  -        p += rc;
  -        if (data->begin != NULL) {
  -            if (data->begin == data->end) {
  +            p += rc;
  +            if (data->begin != NULL && data->begin == data->end) {
                   tokenbuf_free(data);
                   tokenbuf_move(&tmptokbuf, data);
  -            } else {
  -                tokenbuf_free(data);
  -                data->begin = data->end = "";
  -                data->buffer_size = 0;
               }
  -        }
  -        break;
  +            break;
   
  -    case '+':                   /* Substitute parameter if data is not empty. */
  -        p++;
  -        rc = parse_exptext_or_variable(var, ctx, p, end, 
  -                                 force_expand, &tmptokbuf, index_this, rel_lookup_flag);
  -        if (rc < 0)
  -            goto error_return;
  -        if (rc == 0) {
  -            rc = VAR_ERR_MISSING_PARAMETER_IN_COMMAND;
  -            goto error_return;
  -        }
  -        p += rc;
  -        if (data->begin != NULL && data->begin != data->end) {
  -            tokenbuf_free(data);
  -            tokenbuf_move(&tmptokbuf, data);
  -        }
  -        break;
  +        case '*':                   /* Return "" if data is not empty, parameter otherwise. */
  +            p++;
  +            rc = parse_exptext_or_variable(var, ctx, p, end, &tmptokbuf);
  +            if (rc < 0)
  +                goto error_return;
  +            if (rc == 0) {
  +                rc = VAR_ERR_MISSING_PARAMETER_IN_COMMAND;
  +                goto error_return;
  +            }
  +            p += rc;
  +            if (data->begin != NULL) {
  +                if (data->begin == data->end) {
  +                    tokenbuf_free(data);
  +                    tokenbuf_move(&tmptokbuf, data);
  +                } else {
  +                    tokenbuf_free(data);
  +                    data->begin = data->end = "";
  +                    data->buffer_size = 0;
  +                }
  +            }
  +            break;
   
  -    case 's':                   /* Search and replace. */
  -        p++;
  +        case '+':                   /* Substitute parameter if data is not empty. */
  +            p++;
  +            rc = parse_exptext_or_variable(var, ctx, p, end, &tmptokbuf);
  +            if (rc < 0)
  +                goto error_return;
  +            if (rc == 0) {
  +                rc = VAR_ERR_MISSING_PARAMETER_IN_COMMAND;
  +                goto error_return;
  +            }
  +            p += rc;
  +            if (data->begin != NULL && data->begin != data->end) {
  +                tokenbuf_free(data);
  +                tokenbuf_move(&tmptokbuf, data);
  +            }
  +            break;
   
  -        if (*p != '/')
  -            return VAR_ERR_MALFORMATTED_REPLACE;
  -        p++;
  +        case 's':                   /* Search and replace. */
  +            p++;
   
  -        rc = parse_substext_or_variable(var, ctx, p, end, 
  -                                  force_expand, &search, index_this, rel_lookup_flag);
  -        if (rc < 0)
  -            goto error_return;
  -        p += rc;
  +            if (*p != '/')
  +                return VAR_ERR_MALFORMATTED_REPLACE;
  +            p++;
   
  -        if (*p != '/') {
  -            rc = VAR_ERR_MALFORMATTED_REPLACE;
  -            goto error_return;
  -        }
  -        p++;
  +            rc = parse_substext_or_variable(var, ctx, p, end, &search);
  +            if (rc < 0)
  +                goto error_return;
  +            p += rc;
   
  -        rc = parse_substext_or_variable(var, ctx, p, end, 
  -                                  force_expand, &replace, index_this, rel_lookup_flag);
  -        if (rc < 0)
  -            goto error_return;
  -        p += rc;
  +            if (*p != '/') {
  +                rc = VAR_ERR_MALFORMATTED_REPLACE;
  +                goto error_return;
  +            }
  +            p++;
   
  -        if (*p != '/') {
  -            rc = VAR_ERR_MALFORMATTED_REPLACE;
  -            goto error_return;
  -        }
  -        p++;
  +            rc = parse_substext_or_variable(var, ctx, p, end, &replace);
  +            if (rc < 0)
  +                goto error_return;
  +            p += rc;
   
  -        rc = parse_exptext(var, ctx, p, end);
  -        if (rc < 0)
  -            goto error_return;
  -        flags.begin = p;
  -        flags.end = p + rc;
  -        flags.buffer_size = 0;
  -        p += rc;
  +            if (*p != '/') {
  +                rc = VAR_ERR_MALFORMATTED_REPLACE;
  +                goto error_return;
  +            }
  +            p++;
   
  -        if (data->begin) {
  -            rc = search_and_replace(data, &search, &replace, &flags);
  +            rc = parse_exptext(var, ctx, p, end);
               if (rc < 0)
                   goto error_return;
  -        }
  -        break;
  -
  -    case 'y':                   /* Transpose characters from class A to class B. */
  -        p++;
  +            flags.begin = p;
  +            flags.end = p + rc;
  +            flags.buffer_size = 0;
  +            p += rc;
   
  -        if (*p != '/')
  -            return VAR_ERR_MALFORMATTED_TRANSPOSE;
  -        p++;
  +            if (data->begin) {
  +                rc = op_search_and_replace(data, &search, &replace, &flags);
  +                if (rc < 0)
  +                    goto error_return;
  +            }
  +            break;
   
  -        rc = parse_substext_or_variable(var, ctx, p, end, 
  -                                  force_expand, &search, index_this, rel_lookup_flag);
  -        if (rc < 0)
  -            goto error_return;
  -        p += rc;
  +        case 'y':                   /* Transpose characters from class A to class B. */
  +            p++;
   
  -        if (*p != '/') {
  -            rc = VAR_ERR_MALFORMATTED_TRANSPOSE;
  -            goto error_return;
  -        }
  -        p++;
  +            if (*p != '/')
  +                return VAR_ERR_MALFORMATTED_TRANSPOSE;
  +            p++;
   
  -        rc = parse_substext_or_variable(var, ctx, p, end, 
  -                                  force_expand, &replace, index_this, rel_lookup_flag);
  -        if (rc < 0)
  -            goto error_return;
  -        p += rc;
  +            rc = parse_substext_or_variable(var, ctx, p, end, &search);
  +            if (rc < 0)
  +                goto error_return;
  +            p += rc;
   
  -        if (*p != '/') {
  -            rc = VAR_ERR_MALFORMATTED_TRANSPOSE;
  -            goto error_return;
  -        } else
  -            ++p;
  +            if (*p != '/') {
  +                rc = VAR_ERR_MALFORMATTED_TRANSPOSE;
  +                goto error_return;
  +            }
  +            p++;
   
  -        if (data->begin) {
  -            rc = transpose(data, &search, &replace);
  +            rc = parse_substext_or_variable(var, ctx, p, end, &replace);
               if (rc < 0)
                   goto error_return;
  -        }
  -        break;
  -
  +            p += rc;
   
  -    case 'p':                   /* Padding. */
  -        p++;
  +            if (*p != '/') {
  +                rc = VAR_ERR_MALFORMATTED_TRANSPOSE;
  +                goto error_return;
  +            } else
  +                ++p;
   
  -        if (*p != '/')
  -            return VAR_ERR_MALFORMATTED_PADDING;
  -        p++;
  +            if (data->begin) {
  +                rc = op_transpose(data, &search, &replace);
  +                if (rc < 0)
  +                    goto error_return;
  +            }
  +            break;
   
  -        rc = parse_number(var, ctx, p, end);
  -        if (rc == 0) {
  -            rc = VAR_ERR_MISSING_PADDING_WIDTH;
  -            goto error_return;
  -        }
  -        number1.begin = p;
  -        number1.end = p + rc;
  -        number1.buffer_size = 0;
  -        p += rc;
   
  -        if (*p != '/') {
  -            rc = VAR_ERR_MALFORMATTED_PADDING;
  -            goto error_return;
  -        }
  -        p++;
  +        case 'p':                   /* Padding. */
  +            p++;
   
  -        rc = parse_substext_or_variable(var, ctx, p, end, 
  -                                  force_expand, &replace, index_this, rel_lookup_flag);
  -        if (rc < 0)
  -            goto error_return;
  -        p += rc;
  +            if (*p != '/')
  +                return VAR_ERR_MALFORMATTED_PADDING;
  +            p++;
   
  -        if (*p != '/') {
  -            rc = VAR_ERR_MALFORMATTED_PADDING;
  -            goto error_return;
  -        }
  -        p++;
  +            rc = parse_number(var, ctx, p, end);
  +            if (rc == 0) {
  +                rc = VAR_ERR_MISSING_PADDING_WIDTH;
  +                goto error_return;
  +            }
  +            number1.begin = p;
  +            number1.end = p + rc;
  +            number1.buffer_size = 0;
  +            p += rc;
   
  -        if (*p != 'l' && *p != 'c' && *p != 'r') {
  -            rc = VAR_ERR_MALFORMATTED_PADDING;
  -            goto error_return;
  -        }
  -        p++;
  +            if (*p != '/') {
  +                rc = VAR_ERR_MALFORMATTED_PADDING;
  +                goto error_return;
  +            }
  +            p++;
   
  -        if (data->begin) {
  -            rc = padding(data, &number1, &replace, p[-1]);
  +            rc = parse_substext_or_variable(var, ctx, p, end, &replace);
               if (rc < 0)
                   goto error_return;
  -        }
  -        break;
  +            p += rc;
   
  -    default:
  -        return VAR_ERR_UNKNOWN_COMMAND_CHAR;
  +            if (*p != '/') {
  +                rc = VAR_ERR_MALFORMATTED_PADDING;
  +                goto error_return;
  +            }
  +            p++;
  +
  +            if (*p != 'l' && *p != 'c' && *p != 'r') {
  +                rc = VAR_ERR_MALFORMATTED_PADDING;
  +                goto error_return;
  +            }
  +            p++;
  +
  +            if (data->begin) {
  +                rc = op_padding(data, &number1, &replace, p[-1]);
  +                if (rc < 0)
  +                    goto error_return;
  +            }
  +            break;
  +
  +        default:
  +            return VAR_ERR_UNKNOWN_COMMAND_CHAR;
       }
   
       /* Exit gracefully. */
  @@ -1753,12 +1809,12 @@
       var_t *var,
       var_parse_t *ctx,
       const char *begin, const char *end,
  -    int* start, int* step, int* stop, int* open_end)
  +    int *start, int *step, int *stop, 
  +    int *open_end)
   {
       const char *p;
       int rc;
       int failed;
  -    int dummy;
   
       p = begin;
       if (begin == end)
  @@ -1770,7 +1826,7 @@
   
       /* Read start value for the loop. */
       failed = 0;
  -    rc = parse_num_exp(var, ctx, p, end, 0, start, &failed, &dummy);
  +    rc = parse_num_exp(var, ctx, p, end, start, &failed);
       if (rc == VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC)
           *start = 0;          /* use default */
       else if (rc < 0)
  @@ -1787,7 +1843,7 @@
   
       /* Read step value for the loop. */
       failed = 0;
  -    rc = parse_num_exp(var, ctx, p, end, 0, step, &failed, &dummy);
  +    rc = parse_num_exp(var, ctx, p, end, step, &failed);
       if (rc == VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC)
           *step = 1;          /* use default */
       else if (rc < 0)
  @@ -1815,7 +1871,7 @@
   
       /* Read stop value for the loop. */
       failed = 0;
  -    rc = parse_num_exp(var, ctx, p, end, 0, stop, &failed, &dummy);
  +    rc = parse_num_exp(var, ctx, p, end, stop, &failed);
       if (rc == VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC) {
           *stop = 0;  /* use default */
           *open_end = 1;
  @@ -1834,51 +1890,14 @@
       return ++p - begin;
   }
   
  -/* callback wrapper context */
  -typedef struct {
  -    var_cb_value_t cb_value_fct;
  -    void          *cb_value_ctx;
  -    int           *rel_lookup_flag;
  -} var_wrapper_t;
  -
  -/* callback wrapper function */
  -static int 
  -lookup_wrapper(
  -    var_t *var, void *ctx,
  -    const char  *var_ptr, size_t  var_len, int     var_idx,
  -    const char **val_ptr, size_t *val_len, size_t *val_size)
  -{
  -    char buf[1];
  -    var_wrapper_t *wcon = (var_wrapper_t *)ctx;
  -    int rc;
  -
  -    /* pass through to original callback */
  -    rc = (*wcon->cb_value_fct)(var, wcon->cb_value_ctx,
  -                               var_ptr, var_len, var_idx, 
  -                               val_ptr, val_len, val_size);
  -
  -    /* convert undefined variable into empty variable */
  -    if (rc == VAR_ERR_UNDEFINED_VARIABLE) {
  -        (*wcon->rel_lookup_flag)--;
  -        buf[0] = NUL;
  -        *val_ptr  = buf;
  -        *val_len  = 0;
  -        *val_size = 0;
  -        return VAR_OK;
  -    }
  -
  -    return rc;
  -}
  -
   /* expand input in general */
   static var_rc_t 
   parse_input(
       var_t *var,
       var_parse_t *ctx,
       const char *begin, const char *end,
  -    int force_expand,
  -    tokenbuf_t *output, int index_this,
  -    size_t recursion_level, int *rel_lookup_flag)
  +    tokenbuf_t *output, 
  +    int recursion_level)
   {
       const char *p = begin;
       int rc, rc2;
  @@ -1886,21 +1905,18 @@
       int start, step, stop, open_end;
       int i;
       int output_backup;
  -    var_wrapper_t wcon;
  -    int my_rel_lookup_flag;
  -    int original_rel_lookup_state;
  +    int rel_lookup_cnt;
       int loop_limit_length;
  +    var_parse_t myctx;
   
       tokenbuf_init(&result);
   
  -    if (rel_lookup_flag == NULL) {
  -        rel_lookup_flag  = &my_rel_lookup_flag;
  -        *rel_lookup_flag = 0;
  -    }
  -
       do {
  -        if (begin != end && var->syntax.index_open && *begin == var->syntax.index_open) {
  -            original_rel_lookup_state = *rel_lookup_flag;
  +        /* try to parse a loop construct */
  +        if (   begin != end 
  +            && var->syntax.index_open != NUL 
  +            && *begin == var->syntax.index_open) {
  +
               loop_limit_length = -1;
               begin++;
               start = 0;
  @@ -1909,27 +1925,31 @@
               open_end = 1;
               rc = 0;
               output_backup = 0;
  -      re_loop:
  +            rel_lookup_cnt = ctx->rel_lookup_cnt;
  +
  +            re_loop:
               for (i = start;
  -                 (open_end  && (loop_limit_length < 0 || *rel_lookup_flag > original_rel_lookup_state)) ||
  -                     (!open_end && i <= stop);
  +                 (   (  open_end 
  +                      && (   loop_limit_length < 0 
  +                          || rel_lookup_cnt > ctx->rel_lookup_cnt)) 
  +                  || (   !open_end 
  +                      && i <= stop)                                            );
                    i += step) {
  -                *rel_lookup_flag = original_rel_lookup_state;
  +                /* remember current state for backing off */
                   output_backup = output->end - output->begin;
   
  -                /* activate callback wrapper */
  -                wcon.cb_value_fct    = var->cb_value_fct;
  -                wcon.cb_value_ctx    = var->cb_value_ctx;
  -                wcon.rel_lookup_flag = rel_lookup_flag;
  -                var->cb_value_fct    = lookup_wrapper;
  -                var->cb_value_ctx    = &wcon;
  +                /* open temporary context for recursion */ 
  +                ctx = var_parse_push(ctx, &myctx);
  +                ctx->force_expand    = 1;
  +                ctx->rel_lookup_flag = 1;
  +                ctx->index_this      = i;
   
                   rc = parse_input(var, ctx, begin, end, 
  -                                 1, output, i, recursion_level+1, rel_lookup_flag);
  +                                 output, recursion_level+1);
   
  -                /* deactivate callback wrapper */
  -                var->cb_value_fct = wcon.cb_value_fct;
  -                var->cb_value_ctx = wcon.cb_value_ctx;
  +                /* retrieve info and close temporary context */
  +                rel_lookup_cnt = ctx->rel_lookup_cnt;
  +                ctx = var_parse_pop(ctx);
   
                   if (rc < 0)
                       goto error_return;
  @@ -1955,13 +1975,14 @@
               if (open_end)
                   output->end = output->begin + output_backup;
               else
  -                *rel_lookup_flag = original_rel_lookup_state;
  +                rel_lookup_cnt = ctx->rel_lookup_cnt;
               begin += rc;
               begin++;
               begin += loop_limit_length;
               continue;
           }
   
  +        /* try to parse plain text */
           rc = parse_text(var, ctx, begin, end);
           if (rc > 0) {
               if (!tokenbuf_append(output, begin, rc)) {
  @@ -1973,9 +1994,8 @@
           } else if (rc < 0)
               goto error_return;
   
  -        rc = parse_variable(var, ctx, begin, end, 
  -                             force_expand, &result,
  -                             index_this, rel_lookup_flag);
  +        /* try to parse a variable construct */
  +        rc = parse_variable(var, ctx, begin, end, &result);
           if (rc > 0) {
               if (!tokenbuf_append(output, result.begin, result.end - result.begin)) {
                   rc = VAR_ERR_OUT_OF_MEMORY;
  @@ -1986,6 +2006,7 @@
           }
           if (rc < 0)
               goto error_return;
  +
       } while (begin != end && rc > 0);
   
       if (recursion_level == 0 && begin != end) {
  @@ -2164,7 +2185,11 @@
           return VAR_RC(VAR_ERR_INVALID_ARGUMENT);
   
       /* prepare internal expansion context */
  +    ctx.lower = NULL;
       ctx.force_expand = force_expand;
  +    ctx.rel_lookup_flag = 0;
  +    ctx.rel_lookup_cnt = 0;
  +    ctx.index_this = 0;
   
       /* set the dst_ptr pointer to the src_ptr so that it is correctly
          initialized in case we fail with an error later. */
  @@ -2172,9 +2197,7 @@
   
       /* call the parsing */
       tokenbuf_init(&output);
  -    rc = parse_input(var, &ctx, 
  -                     src_ptr, src_ptr + src_len, 
  -                     ctx.force_expand, &output, 0, 0, NULL);
  +    rc = parse_input(var, &ctx, src_ptr, src_ptr + src_len, &output, 0);
   
       /* post-process output */
       if (rc >= 0) {

From ossp-cvs-owner@ossp.org  Fri Mar  1 22:59:38 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C602C76366; Fri,  1 Mar 2002 22:59:37 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Message-Id: <20020301215937.C602C76366@mail.ossp.org>
Date: Fri,  1 Mar 2002 22:59:37 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   01-Mar-2002 22:59:37
  Branch: HEAD                             Handle: 2002030121593700

  Modified files:
    ossp-pkg/var            var.c

  Log:
    Code Cleanup Phase III
    (too much details to describe)

  Summary:
    Revision    Changes     Path
    1.72        +160 -100   ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.71 -r1.72 var.c
  --- ossp-pkg/var/var.c	1 Mar 2002 20:28:33 -0000	1.71
  +++ ossp-pkg/var/var.c	1 Mar 2002 21:59:37 -0000	1.72
  @@ -148,6 +148,22 @@
       return;
   }
   
  +static void tokenbuf_set(tokenbuf_t *buf, const char *begin, const char *end, size_t buffer_size)
  +{
  +    buf->begin = begin;
  +    buf->end = end;
  +    buf->buffer_size = buffer_size;
  +    return;
  +}
  +
  +static void tokenbuf_copy(tokenbuf_t *src, tokenbuf_t *dst)
  +{
  +    dst->begin = src->begin;
  +    dst->end = src->end;
  +    dst->buffer_size = src->buffer_size;
  +    return;
  +}
  +
   static void tokenbuf_move(tokenbuf_t *src, tokenbuf_t *dst)
   {
       dst->begin = src->begin;
  @@ -225,6 +241,11 @@
       return 1;
   }
   
  +static int tokenbuf_merge(tokenbuf_t *output, tokenbuf_t *input)
  +{
  +    return tokenbuf_append(output, input->begin, input->end - input->begin);
  +}
  +
   static void tokenbuf_free(tokenbuf_t *buf)
   {
       if (buf->begin != NULL && buf->buffer_size > 0)
  @@ -511,7 +532,7 @@
       return num;
   }
   
  -/* parse number expression operand */
  +/* parse numerical expression operand */
   static int 
   parse_num_exp_operand(
       var_t *var, var_parse_t *ctx,
  @@ -599,18 +620,20 @@
       return (p - begin);
   }
   
  +/* parse numerical expression */
   static int 
   parse_num_exp(
       var_t *var, var_parse_t *ctx,
       const char *begin, const char *end, 
       int *result, int *failed)
   {
  -    const char *p = begin;
  +    const char *p;
       char operator;
       int right;
       int rc;
   
  -    if (begin == end)
  +    p = begin;
  +    if (p == end)
           return VAR_ERR_INCOMPLETE_INDEX_SPEC;
   
       rc = parse_num_exp_operand(var, ctx, p, end, result, failed);
  @@ -666,7 +689,7 @@
       return p - begin;
   }
   
  -/* callback wrapper function */
  +/* lookup a variable value by callin the callback function */
   static int 
   lookup_value(
       var_t *var, var_parse_t *ctx,
  @@ -681,7 +704,11 @@
                                 var_ptr, var_len, var_idx, 
                                 val_ptr, val_len, val_size);
   
  -    /* convert undefined variable into empty variable */
  +    /* convert undefined variable into empty variable if relative
  +       lookups are counted. This is the case inside an active loop
  +       construct if no limits are given. There the parse_input()
  +       has to proceed until all variables have undefined values. 
  +       This trick here allows it to determine this case. */
       if (ctx->rel_lookup_flag && rc == VAR_ERR_UNDEFINED_VARIABLE) {
           ctx->rel_lookup_cnt--;
           buf[0] = NUL;
  @@ -1803,32 +1830,35 @@
       return rc;
   }
   
  -/* expand the loop limits */
  +/* parse loop construct limits ("[...]{b,s,e}") */
   static var_rc_t 
   parse_looplimits(
       var_t *var,
       var_parse_t *ctx,
       const char *begin, const char *end,
  -    int *start, int *step, int *stop, 
  -    int *open_end)
  +    int *start, int *step, int *stop, int *open_stop)
   {
       const char *p;
       int rc;
       int failed;
   
  +    /* initialization */
       p = begin;
  -    if (begin == end)
  +
  +    /* we are happy if nothing is to left to parse */
  +    if (p == end)
           return 0;
  +
  +    /* parse start delimiter */
       if (*p != var->syntax.delim_open)
           return 0;
  -    else
  -        p++;
  +    p++;
   
  -    /* Read start value for the loop. */
  +    /* parse loop start value */
       failed = 0;
       rc = parse_num_exp(var, ctx, p, end, start, &failed);
       if (rc == VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC)
  -        *start = 0;          /* use default */
  +        *start = 0; /* use default */
       else if (rc < 0)
           return rc;
       else
  @@ -1836,107 +1866,120 @@
       if (failed)
           return VAR_ERR_UNDEFINED_VARIABLE;
   
  +    /* parse separator */
       if (*p != ',')
           return VAR_ERR_INVALID_CHAR_IN_LOOP_LIMITS;
  -    else
  -        p++;
  +    p++;
   
  -    /* Read step value for the loop. */
  +    /* parse loop step value */
       failed = 0;
       rc = parse_num_exp(var, ctx, p, end, step, &failed);
       if (rc == VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC)
  -        *step = 1;          /* use default */
  +        *step = 1; /* use default */
       else if (rc < 0)
           return rc;
       else
           p += rc;
       if (failed)
           return VAR_ERR_UNDEFINED_VARIABLE;
  +
  +    /* parse separator */
       if (*p != ',') {
  +        /* if not found, parse end delimiter */
           if (*p != var->syntax.delim_close)
               return VAR_ERR_INVALID_CHAR_IN_LOOP_LIMITS;
  -        else {
  -            p++;
  -            *stop = *step;
  -            *step = 1;
  -            if (rc > 0)
  -                *open_end = 0;
  -            else
  -                *open_end = 1;
  -            return p - begin;
  -        }
  -    }
  -    else
           p++;
   
  -    /* Read stop value for the loop. */
  +        /* shift step value to stop value */
  +        *stop = *step;
  +        *step = 1;
  +
  +        /* determine whether loop end is open */
  +        if (rc > 0)
  +            *open_stop = 0;
  +        else
  +            *open_stop = 1;
  +        return (p - begin);
  +    }
  +    p++;
  +
  +    /* parse loop stop value */
       failed = 0;
       rc = parse_num_exp(var, ctx, p, end, stop, &failed);
       if (rc == VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC) {
  -        *stop = 0;  /* use default */
  -        *open_end = 1;
  +        *stop = 0; /* use default */
  +        *open_stop = 1;
       }
       else if (rc < 0)
           return rc;
       else {
  -        *open_end = 0;
  +        *open_stop = 0;
           p += rc;
       }
       if (failed)
           return VAR_ERR_UNDEFINED_VARIABLE;
  +
  +    /* parse end delimiter */
       if (*p != var->syntax.delim_close)
           return VAR_ERR_INVALID_CHAR_IN_LOOP_LIMITS;
  +    p++;
   
  -    return ++p - begin;
  +    /* return amount of parsed input */
  +    return (p - begin);
   }
   
   /* expand input in general */
   static var_rc_t 
   parse_input(
  -    var_t *var,
  -    var_parse_t *ctx,
  +    var_t *var, var_parse_t *ctx,
       const char *begin, const char *end,
  -    tokenbuf_t *output, 
  -    int recursion_level)
  +    tokenbuf_t *output, int recursion_level)
   {
  -    const char *p = begin;
  +    const char *p;
       int rc, rc2;
       tokenbuf_t result;
  -    int start, step, stop, open_end;
  +    int start, step, stop, open_stop;
       int i;
  -    int output_backup;
  +    tokenbuf_t output_backup;
       int rel_lookup_cnt;
       int loop_limit_length;
       var_parse_t myctx;
   
  -    tokenbuf_init(&result);
  +    /* initialization */
  +    p = begin;
   
       do {
           /* try to parse a loop construct */
  -        if (   begin != end 
  +        if (   p != end 
               && var->syntax.index_open != NUL 
  -            && *begin == var->syntax.index_open) {
  +            && *p == var->syntax.index_open) {
  +            p++;
   
  +            /* loop preparation */
               loop_limit_length = -1;
  -            begin++;
  +            rel_lookup_cnt = ctx->rel_lookup_cnt;
  +            open_stop = 1;
  +            rc = 0;
               start = 0;
               step  = 1;
               stop  = 0;
  -            open_end = 1;
  -            rc = 0;
  -            output_backup = 0;
  -            rel_lookup_cnt = ctx->rel_lookup_cnt;
  +            tokenbuf_copy(output, &output_backup);
   
  +            /* iterate over loop construct, either as long as there is
  +               (still) nothing known about the limit, or there is an open
  +               (=unknown) limit stop and there are still defined variables
  +               or there is a stop limit known and it is still not reached */
               re_loop:
               for (i = start;
  -                 (   (  open_end 
  +                 (   (   open_stop 
                         && (   loop_limit_length < 0 
                             || rel_lookup_cnt > ctx->rel_lookup_cnt)) 
  -                  || (   !open_end 
  -                      && i <= stop)                                            );
  +                  || (   !open_stop 
  +                      && i <= stop)                                );
                    i += step) {
  -                /* remember current state for backing off */
  -                output_backup = output->end - output->begin;
  +
  +                /* remember current output end for restoring */
  +                tokenbuf_copy(output, &output_backup);
   
                   /* open temporary context for recursion */ 
                   ctx = var_parse_push(ctx, &myctx);
  @@ -1944,84 +1987,106 @@
                   ctx->rel_lookup_flag = 1;
                   ctx->index_this      = i;
   
  -                rc = parse_input(var, ctx, begin, end, 
  +                /* recursive parse input through ourself */
  +                rc = parse_input(var, ctx, p, end, 
                                    output, recursion_level+1);
   
                   /* retrieve info and close temporary context */
                   rel_lookup_cnt = ctx->rel_lookup_cnt;
                   ctx = var_parse_pop(ctx);
   
  +                /* error handling */
                   if (rc < 0)
                       goto error_return;
  -                if (begin[rc] != var->syntax.index_close) {
  +
  +                /* make sure the loop construct is closed */
  +                if (p[rc] != var->syntax.index_close) {
                       rc = VAR_ERR_UNTERMINATED_LOOP_CONSTRUCT;
                       goto error_return;
                   }
  +
  +                /* try to parse loop construct limit specification */
                   if (loop_limit_length < 0) {
  -                    rc2 = parse_looplimits(var, ctx, begin + rc + 1, end, 
  -                                            &start, &step,
  -                                            &stop, &open_end);
  +                    rc2 = parse_looplimits(var, ctx, p+rc+1, end, 
  +                                           &start, &step, &stop, &open_stop);
                       if (rc2 < 0)
                           goto error_return;
                       else if (rc2 == 0)
                           loop_limit_length = 0;
                       else if (rc2 > 0) {
                           loop_limit_length = rc2;
  -                        output->end = output->begin + output_backup;
  +                        /* restart loop from scratch */
  +                        tokenbuf_copy(&output_backup, output);
                           goto re_loop;
                       }
                   }
               }
  -            if (open_end)
  -                output->end = output->begin + output_backup;
  -            else
  -                rel_lookup_cnt = ctx->rel_lookup_cnt;
  -            begin += rc;
  -            begin++;
  -            begin += loop_limit_length;
  +
  +            /* if stop value is open, restore to the output end
  +               because the last iteration was just to determine the loop
  +               termination and its result has to be discarded */
  +            if (open_stop)
  +                tokenbuf_copy(&output_backup, output);
  +
  +            /* skip parsed loop construct */
  +            p += rc;
  +            p++;
  +            p += loop_limit_length;
  +
               continue;
           }
   
           /* try to parse plain text */
  -        rc = parse_text(var, ctx, begin, end);
  +        rc = parse_text(var, ctx, p, end);
           if (rc > 0) {
  -            if (!tokenbuf_append(output, begin, rc)) {
  +            if (!tokenbuf_append(output, p, rc)) {
                   rc = VAR_ERR_OUT_OF_MEMORY;
                   goto error_return;
               }
  -            begin += rc;
  +            p += rc;
               continue;
           } else if (rc < 0)
               goto error_return;
   
           /* try to parse a variable construct */
  -        rc = parse_variable(var, ctx, begin, end, &result);
  +        tokenbuf_init(&result);
  +        rc = parse_variable(var, ctx, p, end, &result);
           if (rc > 0) {
  -            if (!tokenbuf_append(output, result.begin, result.end - result.begin)) {
  +            if (!tokenbuf_merge(output, &result)) {
  +                tokenbuf_free(&result);
                   rc = VAR_ERR_OUT_OF_MEMORY;
                   goto error_return;
               }
  -            begin += rc;
  +            tokenbuf_free(&result);
  +            p += rc;
               continue;
  -        }
  +        }    
  +        tokenbuf_free(&result);
           if (rc < 0)
               goto error_return;
   
  -    } while (begin != end && rc > 0);
  +    } while (p != end && rc > 0);
   
  -    if (recursion_level == 0 && begin != end) {
  +    /* We do not know whether this really could happen, but because we
  +       are paranoid, report an error at the outer most parsing level if
  +       there is still any input. Because this would mean that we are no
  +       longer able to parse the remaining input as a loop construct, a
  +       text or a variable construct. This would be very strange, but
  +       could perhaps happen in case of configuration errors!?... */
  +    if (recursion_level == 0 && p != end) {
           rc = VAR_ERR_INPUT_ISNT_TEXT_NOR_VARIABLE;
           goto error_return;
       }
   
  -    return begin - p;
  +    /* return amount of parsed text */
  +    return (p - begin);
   
  -  error_return:
  +    /* return with an error where as a special case the output begin is
  +       set to the input begin and the output end to the last input parsing
  +       position. */
  +    error_return:
       tokenbuf_free(output);
  -    tokenbuf_free(&result);
  -    output->begin = p;
  -    output->end = begin;
  -    output->buffer_size = 0;
  +    tokenbuf_set(output, begin, p, 0);
       return rc;
   }
   
  @@ -2185,42 +2250,37 @@
           return VAR_RC(VAR_ERR_INVALID_ARGUMENT);
   
       /* prepare internal expansion context */
  -    ctx.lower = NULL;
  -    ctx.force_expand = force_expand;
  +    ctx.lower           = NULL;
  +    ctx.force_expand    = force_expand;
       ctx.rel_lookup_flag = 0;
  -    ctx.rel_lookup_cnt = 0;
  -    ctx.index_this = 0;
  +    ctx.rel_lookup_cnt  = 0;
  +    ctx.index_this      = 0;
   
  -    /* set the dst_ptr pointer to the src_ptr so that it is correctly
  -       initialized in case we fail with an error later. */
  -    *dst_ptr = (char *)src_ptr;
  -
  -    /* call the parsing */
  +    /* start the parsing */
       tokenbuf_init(&output);
  -    rc = parse_input(var, &ctx, src_ptr, src_ptr + src_len, &output, 0);
  +    rc = parse_input(var, &ctx, src_ptr, src_ptr+src_len, &output, 0);
   
  -    /* post-process output */
  +    /* post-processing */
       if (rc >= 0) {
  -        /* always NUL-terminate output for convinience reasons */
  +        /* always NUL-terminate output for convinience reasons 
  +           but do not count the NUL-terminator in the length */
           if (!tokenbuf_append(&output, "\0", 1)) {
               tokenbuf_free(&output);
               return VAR_RC(VAR_ERR_OUT_OF_MEMORY);
           }
           output.end--;
   
  -        /* provide dst_ptrs */
  +        /* provide result */
           *dst_ptr = (char *)output.begin;
           if (dst_len != NULL)
  -            *dst_len = output.end - output.begin;
  -
  -        /* canonify all positive answers */
  +            *dst_len = (output.end - output.begin);
           rc = VAR_OK;
       }
       else {
  -        /* provide error dst_ptr */
  +        /* provide result */
           *dst_ptr = (char *)src_ptr;
           if (dst_len != NULL)
  -            *dst_len = output.end - output.begin;
  +            *dst_len = (output.end - output.begin);
       }
   
       return VAR_RC(rc);

From ossp-cvs-owner@ossp.org  Fri Mar  1 23:02:41 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 45F7D76366; Fri,  1 Mar 2002 23:02:41 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Message-Id: <20020301220241.45F7D76366@mail.ossp.org>
Date: Fri,  1 Mar 2002 23:02:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   01-Mar-2002 23:02:41
  Branch: HEAD                             Handle: 2002030122024000

  Modified files:
    ossp-pkg/var            var.c

  Log:
    more comments

  Summary:
    Revision    Changes     Path
    1.73        +7  -0      ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.72 -r1.73 var.c
  --- ossp-pkg/var/var.c	1 Mar 2002 21:59:37 -0000	1.72
  +++ ossp-pkg/var/var.c	1 Mar 2002 22:02:40 -0000	1.73
  @@ -2096,6 +2096,7 @@
   **
   */
   
  +/* create variable expansion context */
   var_rc_t 
   var_create(
       var_t **pvar)
  @@ -2112,6 +2113,7 @@
       return VAR_OK;
   }
   
  +/* destroy variable expansion context */
   var_rc_t 
   var_destroy(
       var_t *var)
  @@ -2122,6 +2124,7 @@
       return VAR_OK;
   }
   
  +/* configure variable expansion context */
   var_rc_t 
   var_config(
       var_t *var, 
  @@ -2173,6 +2176,7 @@
       return VAR_OK;
   }
   
  +/* perform unescape operation on a buffer */
   var_rc_t 
   var_unescape(
       var_t *var, 
  @@ -2234,6 +2238,7 @@
       return VAR_OK;
   }
   
  +/* perform expand operation on a buffer */
   var_rc_t 
   var_expand(
       var_t *var, 
  @@ -2286,6 +2291,7 @@
       return VAR_RC(rc);
   }
   
  +/* var_rc_t to string mapping table */
   static const char *var_errors[] = {
       "everything ok",                                           /* VAR_OK = 0 */
       "incomplete named character",                              /* VAR_ERR_INCOMPLETE_NAMED_CHARACTER */
  @@ -2332,6 +2338,7 @@
       "invalid character in loop limits"                         /* VAR_ERR_INVALID_CHAR_IN_LOOP_LIMITS */
   };
   
  +/* transslate a return code into its corresponding descriptive text */
   var_rc_t var_strerror(var_t *var, var_rc_t rc, char **str)
   {
       if (str == NULL)

From ossp-cvs-owner@ossp.org  Fri Mar  1 23:48:27 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5ED3476366; Fri,  1 Mar 2002 23:48:25 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.c rc.conf rc.h rc.pod rc_config.c rc_design...
Message-Id: <20020301224825.5ED3476366@mail.ossp.org>
Date: Fri,  1 Mar 2002 23:48:25 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   01-Mar-2002 23:48:25
  Branch: HEAD                             Handle: 2002030122482300

  Modified files:
    ossp-pkg/rc             rc.c rc.conf rc.h rc.pod rc_config.c rc_design.ps
                            rc_design.xmi rc_optimpl.c rc_private.h

  Log:
    Fixed the build, improved the design, improved the configuration and option
    processing.

  Summary:
    Revision    Changes     Path
    1.16        +8  -7      ossp-pkg/rc/rc.c
    1.7         +37 -39     ossp-pkg/rc/rc.conf
    1.13        +2  -2      ossp-pkg/rc/rc.h
    1.29        +1  -1      ossp-pkg/rc/rc.pod
    1.5         +18 -6      ossp-pkg/rc/rc_config.c
    1.4         +3262 -1570 ossp-pkg/rc/rc_design.ps
    1.4         +4117 -1998 ossp-pkg/rc/rc_design.xmi
    1.3         +2  -4      ossp-pkg/rc/rc_optimpl.c
    1.6         +3  -4      ossp-pkg/rc/rc_private.h
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.c
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 rc.c
  --- ossp-pkg/rc/rc.c	28 Feb 2002 18:24:04 -0000	1.15
  +++ ossp-pkg/rc/rc.c	1 Mar 2002 22:48:23 -0000	1.16
  @@ -36,6 +36,11 @@
   #include "rc_private.h"
   
   
  +/*TRACE("Vor configLoad.");
  +TRACEL((long)configGetvers());
  +TRACE("Nach configLoad.");
  +TRACEL((long)configGetvers());*/
  +
   int main(int argc, char *argv[])
   {
       ex_t Except;
  @@ -43,22 +48,18 @@
   
       ex_try {
           configConstruct();
  -TRACE("Vor configLoad.");
  -TRACEL((long)configGetvers());
           configLoad(argc, argv);
  -TRACE("Nach configLoad.");
  -TRACEL((long)configGetvers());
       }
       ex_catch(Except) {
           bCaught = 1;
           fprintf(stderr, "Class '%s' threw exception %d in %s:%s():%d.\n",\
                  (char *)Except.ex_class, (int)Except.ex_value,\
                  Except.ex_file, Except.ex_func, Except.ex_line);
  -        exit(1);    /* Failure */
  +        exit(1);        /* Failure */
       }
       if (!bCaught)
           fprintf(stderr, "main: No exceptions caught.\n");
   
  -    configDestruct(); /* Possibly destruct the configuration */
  -    exit(0);        /* Success */
  +    configDestruct();   /* Possibly destruct the configuration */
  +    exit(0);            /* Success */
   }
  Index: ossp-pkg/rc/rc.conf
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 rc.conf
  --- ossp-pkg/rc/rc.conf	4 Feb 2002 22:35:20 -0000	1.6
  +++ ossp-pkg/rc/rc.conf	1 Mar 2002 22:48:23 -0000	1.7
  @@ -2,49 +2,47 @@
   # OSSP rc rc.conf example
   # 
   
  -#### Inclusive options ####
  -dirs      /usr/local/rc /export/home/macgyver/runcommands
  -#file     /export/home/rc.init  #practically only used on command line
  -tmp       /var/tmp
  -verbose
  -#silent
  -debug
  -#raw
  -
  -configsection   config          #name for config section in rcfile
  -commonsection   common          #name for common section in rcfile
  -rcfile          'rc.%s'         #'rc.' followed by the program name
  -rcumask         002             #mask checked against rcfile permissions
  -deactivate      OSSP_RC_DEACT   #environment variable controls activation
  -interpreter     /usr/bin/perl   #command interpreter to use for script code
  +#### Return options ####
  +#usage       #flag
  +#version     #flag
  +#help        #flag
  +#info        #flag
   
  -#RSE what about ${begin} regexref       '(?<=^|\n)%%%s\s*(.+?)(?=\n|;)'
  -regexassign    '(\s+)=(.*)$'
  -regexparam     '..'             #needs explanation
  +#### Output options ####
  +raw         #flag
  +debug       #flag
  +#silent      #flag
  +verbose     #flag
   
  +#### Exclusive options ####
  +#print       #flag
  +eval        #flag
  +#exec        #flag
   
  +#### Inquisitive options ####
  +#labels      start
  +#query       ${foovar:-foodefault}
   
  +#### Pathname options ####
  +#conf       #it's too late to set the conf file in the conf file
  +locate      /cw/etc/rc.d:/etc/rc.d:/usr/local/rc
  +func        rc.func
  +tmp         /var/tmp
   
   
  -regexsection   '(?<=^|\n)%%%s\s*\n(.+?)(?=\n%\S+|$)'
  +#Some of these are not in the docs! Get them in there!
  +#!!! FIXME !!!
   
  -usage       #flag
  -debug       #flag
  -force       #flag
  -version     #flag
  -#conf       #it's too late to set the conf file in the conf file
  -locate      /cw/etc/rc.d:/etc/rc.d
  -eval        #flag
  -func        rc.iofunc \
  -            rc.dbgfunc \
  -            rc.exfunc
  -help        #flag
  -info        #flag
  -labels      start
  -print       #flag
  -query       ${foovar:-foodefault}
  -silent      #flag
  -raw         #flag
  -tmp         /var/tmp
  -verbose     #flag
  -exec        #flag
  +#RSE what about ${begin} regexref       '(?<=^|\n)%%%s\s*(.+?)(?=\n|;)'
  +#regexassign    '(\s+)=(.*)$'
  +#regexparam     '..'             #needs explanation
  +
  +#force                          #flag
  +#file       /export/home/rc.init #practically only used on command line
  +#rcfile          'rc.%s'         #'rc.' followed by the program name
  +#rcumask         002             #mask checked against rcfile permissions
  +#deactivate      OSSP_RC_DEACT   #environment variable controls activation
  +#regexsection   '(?<=^|\n)%%%s\s*\n(.+?)(?=\n%\S+|$)'
  +#configsection   config          #name for config section in rcfile
  +#commonsection   common          #name for common section in rcfile
  +#interpreter     /usr/bin/perl   #command interpreter to use for script code
  Index: ossp-pkg/rc/rc.h
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 rc.h
  --- ossp-pkg/rc/rc.h	28 Feb 2002 18:24:04 -0000	1.12
  +++ ossp-pkg/rc/rc.h	1 Mar 2002 22:48:23 -0000	1.13
  @@ -68,8 +68,8 @@
   rc_return_t eoptProcess(void);
   
   /* Command line option function prototypes */
  -rc_return_t coptParse(int);
  -rc_return_t coptProcess(char, char *);
  +rc_return_t coptParse(int, char **);
  +rc_return_t coptProcess(int);
   
   /* Config function prototypes */
   rc_return_t configConstruct(void);
  Index: ossp-pkg/rc/rc.pod
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 rc.pod
  --- ossp-pkg/rc/rc.pod	28 Feb 2002 15:30:04 -0000	1.28
  +++ ossp-pkg/rc/rc.pod	1 Mar 2002 22:48:23 -0000	1.29
  @@ -71,7 +71,7 @@
   OSSP rc is a runcommand processor. Its primary function is to scan F<rcfile>
   script files for B<section>(s) and run the commands listed in the section(s).
   
  -The runcommand processor can alternatively print the commands in human
  +The runcommand processor can alternatively C<print> the commands in human
   readable format or reformat them for shell C<eval> input without executing
   them. The F<rcfile> files contain variables and the command processor has
   functionality to query their default, set and effective values.
  Index: ossp-pkg/rc/rc_config.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 rc_config.c
  --- ossp-pkg/rc/rc_config.c	28 Feb 2002 18:24:04 -0000	1.4
  +++ ossp-pkg/rc/rc_config.c	1 Mar 2002 22:48:23 -0000	1.5
  @@ -54,7 +54,7 @@
           s_pInst->nLocks = 0;
   
           ex_try {                            /* Make a val instance  */
  -            val_create(&s_pInst->pVal);     /* to hold individual   */
  +            val_create(&s_pInst->pOpt);     /* to hold individual   */
           }                                   /* configuration values */
           ex_catch(Except) {
               rethrow;
  @@ -76,7 +76,7 @@
   
       if (s_pInst != NULL) {
           ex_try {
  -            val_get(s_pInst->pVal, RC_VER_NAME, &nVer);
  +            val_get(s_pInst->pOpt, RC_VER_NAME, &nVer);
           }
           ex_catch(Except) {
               rethrow;
  @@ -98,10 +98,22 @@
   {
       ex_t Except;
   
  +    ex_try {    /* Parse through each type of option           */
  +/* FIXME s_pInst->pOpt will hold a copy of the command line */
  +//        coptParse(s_pInst->pOpt);   /* First priority options  */
  +//        eoptParse(s_pInst->pOpt);   /* Medium priority options */
  +//        foptParse(s_pInst->pOpt);   /* Low priority options    */
  +        coptParse(argc, argv); /* FIXME Patch for now */
  +/* FIXME s_pInst->pOpt will hold a copy of the command line */
  +    }
  +    ex_catch(Except) {
  +        rethrow;
  +    }
  +
       ex_try {    /* Register and set configuration values */
           /* FIXME This is real bad, replace with our own  */
  -        val_reg(s_pInst->pVal, RC_VER_NAME, VAL_TYPE_SHORT, RC_VER_DESC, NULL);
  -        val_set(s_pInst->pVal, RC_VER_NAME, 1);
  +        val_reg(s_pInst->pOpt, RC_VER_NAME, VAL_TYPE_SHORT, RC_VER_DESC, NULL);
  +        val_set(s_pInst->pOpt, RC_VER_NAME, 1);
       }
       ex_catch(Except) {
           rethrow;
  @@ -121,8 +133,8 @@
       if (s_pInst) {
           if (!(--s_pInst->nLocks)) {         /* If nLocks is 0, dealloc  */
               ex_try {                        /* FIXME, not thread-safe   */
  -                val_destroy(s_pInst->pVal); /* Destroy val instance and */
  -            }                               /* Assume that pVal is NULL */
  +                val_destroy(s_pInst->pOpt); /* Destroy val instance and */
  +            }                               /* Assume that pOpt is NULL */
               ex_catch(Except) {
                   rethrow;
               }
  Index: ossp-pkg/rc/rc_design.ps
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 rc_design.ps
  --- ossp-pkg/rc/rc_design.ps	7 Feb 2002 15:34:39 -0000	1.3
  +++ ossp-pkg/rc/rc_design.ps	1 Mar 2002 22:48:23 -0000	1.4
  @@ -1,1573 +1,3265 @@
   %!PS-Adobe-3.0
  -%%Pages: (atend)
  -%%BoundingBox: 33 514 565 802
  -%%HiResBoundingBox: 33.578833 514.306543 564.970020 801.654712
  -%...................................
  -%%Creator: AFPL Ghostscript 650 (pswrite)
  -%%CreationDate: 2002/02/06 18:40:57
  -%%DocumentData: Clean7Bit
  -%%LanguageLevel: 2
  -%%EndComments
  -%%BeginProlog
  -% This copyright applies to everything between here and the %%EndProlog:
  -% Copyright (C) 2000 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
  -%%BeginResource: procset GS_pswrite_2_0_1001
  -/GS_pswrite_2_0_1001 80 dict dup begin
  -/setpagesize{1 index where{pop cvx exec pop pop}{pop /setpagedevice where
  -{pop 2 array astore 1 dict dup/PageSize 4 -1 roll put setpagedevice}
  -{pop/setpage where{pop pageparams 3{exch pop}repeat setpage}
  -{pop pop}ifelse}ifelse}ifelse}bind def
  -/!{bind def}bind def/#{load def}!/N/counttomark #
  -/rG{3{3 -1 roll 255 div}repeat setrgbcolor}!/G{255 div setgray}!/K{0 G}!
  -/r6{dup 3 -1 roll rG}!/r5{dup 3 1 roll rG}!/r3{dup rG}!
  -/w/setlinewidth #/J/setlinecap #
  -/j/setlinejoin #/M/setmiterlimit #/d/setdash #/i/setflat #
  -/m/moveto #/l/lineto #/c/rcurveto #/h{p closepath}!/H{P closepath}!
  -/lx{0 rlineto}!/ly{0 exch rlineto}!/v{0 0 6 2 roll c}!/y{2 copy c}!
  -/re{4 -2 roll m exch dup lx exch ly neg lx h}!
  -/^{3 index neg 3 index neg}!
  -/P{N 0 gt{N -2 roll moveto p}if}!
  -/p{N 2 idiv{N -2 roll rlineto}repeat}!
  -/f{P fill}!/f*{P eofill}!/s{H stroke}!/S{P stroke}!
  -/q/gsave #/Q/grestore #/rf{re fill}!
  -/Y{P clip newpath}!/Y*{P eoclip newpath}!/rY{re Y}!
  -/|={pop exch 4 1 roll 3 array astore cvx exch 1 index def exec}!
  -/|{exch string readstring |=}!
  -/+{dup type/nametype eq{2 index 7 add -3 bitshift 2 index mul}if}!
  -/@/currentfile #/${+ @ |}!
  -/B{{2 copy string{readstring pop}aload pop 4 array astore cvx
  -3 1 roll}repeat pop pop true}!
  -/Ix{[1 0 0 1 11 -2 roll exch neg exch neg]exch}!
  -/,{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
  -/Ic{exch Ix false 3 colorimage}!
  -/F{/Columns counttomark 3 add -2 roll/Rows exch/K -1/BlackIs1 true>>
  -/CCITTFaxDecode filter}!/FX{<</EndOfBlock false F}!
  -/X{/ASCII85Decode filter}!/@X{@ X}!/&2{2 index 2 index}!
  -/@F{@ &2<<F}!/@C{@X &2 FX}!
  -/$X{+ @X |}!/&4{4 index 4 index}!/$F{+ @ &4<<F |}!/$C{+ @X &4 FX |}!
  -/IC{3 1 roll 10 dict begin 1{/ImageType/Interpolate/Decode/DataSource
  -/ImageMatrix/BitsPerComponent/Height/Width}{exch def}forall
  -currentdict end image}!
  -end readonly def
  -%%EndResource
  -/pagesave null def
  +%%BeginProcSet: reencode 1.0 0 
  +/RE 
  +{  findfont begin 
  +  currentdict dup length dict begin 
  +  {1 index /FID ne {def} {pop pop} ifelse} forall 
  +  /FontName exch def dup length 0 ne 
  +  { /Encoding Encoding 256 array copy def 
  +      0 exch 
  +      { dup type /nametype eq 
  +        { Encoding 2 index 2 index put 
  +          pop 1 add 
  +        } 
  +        { exch pop 
  +        } ifelse 
  +      } forall 
  +  } if pop 
  +  currentdict dup end end 
  +  /FontName get exch definefont pop 
  +    } bind def 
  +%%EndProcSet: reencode 1.0 0 
  +%%BeginProcSet: ellipse 1.0 0 
  +/ellipsedict 8 dict def 
  +ellipsedict /mtrx matrix put 
  +/ellipse { ellipsedict begin 
  +/endangle exch def 
  +/startangle exch def 
  +/yrad exch def 
  +/xrad exch def 
  +/y exch def 
  +/x exch def 
  +/savematrix mtrx currentmatrix def 
  +x y translate 
  +xrad yrad scale 
  +0 0 1 0 360 arc 
  +savematrix setmatrix end } def 
  +%%EndProcSet: ellipse 1.0 0 
   %%EndProlog
  -%%Page: 1 1
  -%%BeginPageSetup
  -GS_pswrite_2_0_1001 begin
  -595 842 /a4 setpagesize
  -/pagesave save store 100 dict begin
  -0.1 0.1 scale
  -%%EndPageSetup
  -gsave mark
  -Q q
  -320 5127.28 5345.49 2945.66 re
  -Y
  -255 G
  -3333.32 7743.63 433.052 266.146 re
  -f*
  -4.51096 w
  -K
  -3333.32 7743.63 433.052 266.146 re
  -S
  -255 G
  -3333.32 7919.56 433.052 90.219 re
  -f*
  -K
  -3333.32 7919.56 433.052 90.219 re
  -S
  -3522 7950 24 30 /5U
  -$C
  --EQKY?GHO?s7QB(-'&FZBRDc-^]4?,oto^rK`~>
  -,
  -3550 7949 26 32 /1F
  -$C
  -1_L@=SIsnT6+o3Kl["'3reN8cs8TiT;uYA@D0D2PYejEje1dN~>
  -,
  -255 G
  -3333.32 7829.34 433.052 90.219 re
  -f*
  -K
  -3333.32 7829.34 433.052 90.219 re
  -S
  -255 G
  -3333.32 7739.12 433.052 90.219 re
  -f*
  -K
  -3333.32 7739.12 433.052 90.219 re
  -S
  -255 G
  -4524.22 7603.79 690.177 374.41 re
  -f*
  -K
  -4524.22 7603.79 690.177 374.41 re
  -S
  -255 G
  -4524.22 7906.03 690.177 72.1753 re
  -f*
  -K
  -4524.22 7906.03 690.177 72.1753 re
  -S
  -4720 7919 20 19 /5Y
  -$C
  -"UYqT:kF9+&1Bh@/T/DB%La=2iIcbk_8$~>
  -,
  -4744 7919 5Y ,
  -4768 7918 23 32 /1J
  -$C
  -4q\EGSIsnTJ\3A4e,T3C;AbKfGTIDq6I?B45dda^J,]>A[BRMK.b$/F~>
  -,
  -4796 7919 3 30 /6C
  -$X
  -i8EPOi8EPOi8EPOi8EPOi8EPOi8=S8!!(s8i8=~>
  -,
  -4805 7919 17 22 /1N
  -$C
  --Eo0's8W-!s53\1$nT;Rm6iY$~>
  -,
  -4825 7910 19 31 /6G
  -$C
  -3%YA1M;t7]J(%o!/17?i<]Ej<f!"cHs537R[]n;=LUDjP~>
  -,
  -4850 7919 3 30 /1R
  -$X
  -i8EPOi8EPOi8EPOi8EPOi8EPOi8EPOi8EPOi8=~>
  -,
  -4857 7918 20 23 /6K
  -$C
  -4ubjWU3>c+dr`>#)WW^nq^iog.t5pT(<'I3'E~>
  -,
  -4878 7918 11 28 /1V
  -$X
  -#J^l.&)[ot%KHt=%KHt=%KHt=%KHt=%KHt=%KHt=%KHt=%KQOes5<q8%KHt=%KHt=%KHt=~>
  -,
  -4892 7918 18 23 /6O
  -$C
  -4?-*,'=U73s%0u's8VuhlJL11$!=6/'E~>
  -,
  -4915 7919 1N ,
  -4937 7918 20 20 /1Z
  -$C
  -P@"QM@,SqW*#LYD_7'aaJcuE.+JAk0YZO^~>
  -,
  -4961 7918 1Z ,
  -255 G
  -4524.22 7815.81 690.177 90.219 re
  -f*
  -K
  -4524.22 7815.81 690.177 90.219 re
  -S
  -4734 7845 1F ,
  -4763 7845 6O ,
  -4787 7846 1N ,
  -4806 7846 11 30 /6S
  -$X
  -%KHt=%KHt=%KHt=%KHt=%KHt=%KHt=%KHt=%KHt=%KHt=s5<q8s54@e%KHt=%KHt=%fd-u#N,^"~>
  -,
  -4820 7846 6C ,
  -4827 7837 6G ,
  -4852 7845 16 22 /2D
  -$X
  -+2C,4J,B"jn/pR!i"+`Vi!80Fi!80Fi!80Fi!80Fi!80Fi!80Fi!80F~>
  -,
  -4875 7846 10 22 /6W
  -$X
  -huM[8huM[8huM[8huM[8huM[8huM[8huM[8n,VqXp]13ln%eD-kJ.28~>
  -,
  -4887 7845 20 23 /2H
  -$C
  -0Je`A9g'0+"eb^@s51Q38D)n^j..hJhYt#nCfREB5Q~>
  -,
  -4908 7845 1V ,
  -4922 7846 6C ,
  -4930 7845 6O ,
  -4954 7846 1N ,
  -255 G
  -4528.73 7897.01 681.155 13.5327 re
  -f*
  -4528.73 7897.01 681.155 13.5327 re
  -S
  -4524.22 7725.59 690.177 90.219 re
  -f*
  -K
  -4524.22 7725.59 690.177 90.219 re
  -S
  -4544 7766 10 3 /7A
  -$X
  -s1nZMs1e~>
  -,
  -4557 7755 17 23 /2L
  -$C
  -3%Q3:d4=/[ea%T^'_"Xc&6U""/1tXdCLO@qe27~>
  -,
  -4575 7749 25 2 /7E
  -$C
  --D4i~>
  -,
  -4603 7756 4 30 /2P
  -$X
  -nF5r:nF5r:nF5r:nF5r:nF5r:nF5r:nF5r:nF-~>
  -,
  -4613 7756 1N ,
  -4634 7755 2L ,
  -4653 7755 1V ,
  -4666 7755 2H ,
  -4690 7756 1N ,
  -4711 7755 18 23 /7I
  -$C
  -3'%P?'=U7dVm"uZSO7o,^1dOblX?W!X]SC~>
  -,
  -4731 7755 6K ,
  -4768 7756 4 21 /2V
  -$X
  -nF5r:zzz!:]LIn,~>
  -,
  -4788 7755 1F ,
  -4817 7755 6O ,
  -4841 7756 1N ,
  -4860 7756 6S ,
  -4875 7756 6C ,
  -4882 7747 6G ,
  -4906 7755 2D ,
  -4929 7756 6W ,
  -4941 7755 2H ,
  -4962 7755 1V ,
  -4976 7756 6C ,
  -4984 7755 6O ,
  -5008 7756 1N ,
  -255 G
  -4524.22 7599.28 690.177 126.307 re
  -f*
  -K
  -4524.22 7599.28 690.177 126.307 re
  -S
  -4542 7665 22 30 /7O
  -$C
  -0[7B,^]/Z\hG$@Mo8MH&hu<AnL6"P=HiMt&rU7,C~>
  -,
  -4567 7665 1F ,
  -4596 7665 6O ,
  -4620 7666 1N ,
  -4639 7666 6S ,
  -4654 7666 6C ,
  -4661 7657 6G ,
  -4685 7665 2D ,
  -4708 7666 6W ,
  -4720 7665 2H ,
  -4741 7665 1V ,
  -4755 7666 6C ,
  -4763 7665 6O ,
  -4787 7666 1N ,
  -4809 7657 9 39 /2Z
  -$X
  -!<<4P#6556%KIIK)uqqu2uko<GQ;[_DufA-n,VAHhuM[8huM[8huM[8huM[8n,VqXDuahWDu_it
  -2uko<)uprY%KHt="onl."+U~>
  -,
  -4821 7657 9 39 /0D
  -$X
  -?iY-G0E='4(]YNU)upHK%KI">#64u/#65!Z#Clo,"+UK("+UK("+UK("+UK(#Cm&0#64u/#6587
  -%KHt=)uprY)uqqu0E?%l?iU~>
  -,
  -4544 7611 20 20 /3D
  -$C
  -1V`tijO?#3ScA`b~>
  -,
  -4567 7603 6G ,
  -4590 7611 6K ,
  -4611 7611 1V ,
  -4626 7612 2P ,
  -4637 7612 1N ,
  -4657 7611 2L ,
  -4677 7611 1V ,
  -4690 7611 2H ,
  -4713 7612 1N ,
  -4735 7611 7I ,
  -4754 7611 6K ,
  -4779 7603 2Z ,
  -4790 7603 0D ,
  -255 G
  -4086.65 6647.47 433.052 536.804 re
  -f*
  -K
  -4086.65 6647.47 433.052 536.804 re
  -S
  -255 G
  -4086.65 7112.1 433.052 72.1753 re
  -f*
  -K
  -4086.65 7112.1 433.052 72.1753 re
  -S
  -4179 7125 5Y ,
  -4203 7125 5Y ,
  -4228 7125 2P ,
  -4236 7124 1V ,
  -4248 7124 6K ,
  -4272 7125 6W ,
  -4285 7124 2H ,
  -4306 7124 1V ,
  -4319 7124 6O ,
  -4342 7125 6W ,
  -4355 7124 1Z ,
  -4379 7124 1Z ,
  -255 G
  -4086.65 7021.88 433.052 90.219 re
  -f*
  -K
  -4086.65 7021.88 433.052 90.219 re
  -S
  -4203 7052 20 30 /0H
  -$C
  --EmILs8W'`L]1Rds8W'c6*Ge~>
  -,
  -4227 7052 6C ,
  -4236 7052 1R ,
  -4243 7051 6K ,
  -4266 7051 29 32 /3H
  -$C
  --P?tM:5JGe5huS!-M6uE4`BTbs8VJ7l[N,]FLJUr<Z!,lTnNn'~>
  -,
  -4298 7043 19 31 /0L
  -$C
  --Fa$Tq6Jrae&8b@6+oIOs/5ns[JmVH>VMIP`HJb"5Q~>
  -,
  -4319 7051 1V ,
  -4333 7052 6C ,
  -4341 7051 6O ,
  -4365 7052 1N ,
  -255 G
  -4091.16 7103.08 424.03 13.5327 re
  -f*
  -4091.16 7103.08 424.03 13.5327 re
  -S
  -4086.65 6931.66 433.052 90.219 re
  -f*
  -K
  -4086.65 6931.66 433.052 90.219 re
  -S
  -255 G
  -4086.65 6642.96 433.052 288.701 re
  -f*
  -K
  -4086.65 6642.96 433.052 288.701 re
  -S
  -4107 6871 3D ,
  -4130 6871 1J ,
  -4155 6871 1V ,
  -4169 6871 2H ,
  -4192 6872 6W ,
  -4203 6871 1V ,
  -4217 6863 2Z ,
  -4229 6863 0D ,
  -4107 6817 3D ,
  -4131 6818 23 30 /3L
  -$C
  --F'Q9YNrACI_M0#YGM8ql$qrD?i")qrg+AuIpIL~>
  -,
  -4159 6817 6K ,
  -4181 6818 18 21 /0P
  -$C
  --ENcHQgLVd0AB+<?WOj$H"6)E-L!Jc:"!h~>
  -,
  -4201 6817 1V ,
  -4215 6809 2Z ,
  -4226 6809 0D ,
  -4107 6763 3D ,
  -4132 6764 2P ,
  -4141 6763 2L ,
  -4164 6764 21 30 /3P
  -$C
  --D@d-fDkmNr.]e&QXBdms,bSlhu~>
  -,
  -4190 6764 1N ,
  -4211 6763 19 31 /0T
  -$C
  -4?-"L4VG#mK@`l5e,TI%qt@J"2.C"]@B=tY^]~>
  -,
  -4235 6755 2Z ,
  -4247 6755 0D ,
  -4107 6709 3D ,
  -4130 6709 1F ,
  -4161 6709 2D ,
  -4183 6710 6W ,
  -4197 6710 6W ,
  -4208 6709 6K ,
  -4233 6710 1N ,
  -4252 6709 1V ,
  -4267 6701 2Z ,
  -4278 6701 0D ,
  -4107 6654 3D ,
  -4132 6655 21 30 /3T
  -$C
  --EmILs8VWu?10?5LAuc'fCZZ6[=n~>
  -,
  -4157 6654 2H ,
  -4181 6655 6W ,
  -4193 6654 2L ,
  -4213 6654 6K ,
  -4237 6646 2Z ,
  -4249 6646 0D ,
  -255 G
  -4632.48 6845.95 433.052 338.322 re
  -f*
  -K
  -4632.48 6845.95 433.052 338.322 re
  -S
  -255 G
  -4632.48 7112.1 433.052 72.1753 re
  -f*
  -K
  -4632.48 7112.1 433.052 72.1753 re
  -S
  -4725 7125 5Y ,
  -4748 7125 5Y ,
  -4774 7125 2P ,
  -4781 7124 1V ,
  -4794 7124 6K ,
  -4818 7125 6W ,
  -4831 7124 2H ,
  -4851 7124 1V ,
  -4865 7124 6O ,
  -4888 7125 6W ,
  -4901 7124 1Z ,
  -4924 7124 1Z ,
  -255 G
  -4632.48 7021.88 433.052 90.219 re
  -f*
  -K
  -4632.48 7021.88 433.052 90.219 re
  -S
  -4655 7052 3P ,
  -4681 7052 1N ,
  -4700 7052 20 21 /0X
  -$C
  -1NhN&kdUHf-hmI3s7DfZ>M&_[~>
  -,
  -4723 7052 6C ,
  -4732 7052 6W ,
  -4745 7051 6O ,
  -4769 7052 1N ,
  -4791 7052 28 22 /3X
  -$C
  --F'?Ss8W-!s8W-!s8VhCXf'k]/.ijN*%u$)[+#~>
  -,
  -4823 7051 6K ,
  -4848 7052 1N ,
  -4867 7051 1V ,
  -4879 7051 3H ,
  -4912 7043 0L ,
  -4933 7051 1V ,
  -4947 7052 6C ,
  -4955 7051 6O ,
  -4978 7052 1N ,
  -255 G
  -4636.99 7103.08 424.03 13.5327 re
  -f*
  -4636.99 7103.08 424.03 13.5327 re
  -S
  -4632.48 6931.66 433.052 90.219 re
  -f*
  -K
  -4632.48 6931.66 433.052 90.219 re
  -S
  -255 G
  -4632.48 6841.44 433.052 90.219 re
  -f*
  -K
  -4632.48 6841.44 433.052 90.219 re
  -S
  -255 G
  -5173.79 6845.95 473.651 338.322 re
  -f*
  -K
  -5173.79 6845.95 473.651 338.322 re
  -S
  -255 G
  -5173.79 7112.1 473.651 72.1753 re
  -f*
  -K
  -5173.79 7112.1 473.651 72.1753 re
  -S
  -5284 7125 5Y ,
  -5308 7125 5Y ,
  -5333 7125 2P ,
  -5341 7124 1V ,
  -5353 7124 6K ,
  -5378 7125 6W ,
  -5390 7124 2H ,
  -5411 7124 1V ,
  -5424 7124 6O ,
  -5448 7125 6W ,
  -5460 7124 1Z ,
  -5484 7124 1Z ,
  -255 G
  -5173.79 7021.88 473.651 90.219 re
  -f*
  -K
  -5173.79 7021.88 473.651 90.219 re
  -S
  -5194 7051 1F ,
  -5223 7051 6O ,
  -5247 7052 3X ,
  -5281 7052 3X ,
  -5313 7051 2H ,
  -5337 7052 1N ,
  -5358 7051 0T ,
  -5382 7052 19 30 /1B
  -$C
  --D@'nli7"bs8W-!s8Vi~>
  -,
  -5405 7052 6C ,
  -5414 7052 1N ,
  -5434 7051 6K ,
  -5457 7051 3H ,
  -5489 7043 0L ,
  -5510 7051 1V ,
  -5524 7052 6C ,
  -5532 7051 6O ,
  -5556 7052 1N ,
  -255 G
  -5178.3 7103.08 464.629 13.5327 re
  -f*
  -5178.3 7103.08 464.629 13.5327 re
  -S
  -5173.79 6931.66 473.651 90.219 re
  -f*
  -K
  -5173.79 6931.66 473.651 90.219 re
  -S
  -255 G
  -5173.79 6841.44 473.651 90.219 re
  -f*
  -K
  -5173.79 6841.44 473.651 90.219 re
  -S
  -255 G
  -4632.48 5853.54 433.052 392.453 re
  -f*
  -K
  -4632.48 5853.54 433.052 392.453 re
  -S
  -255 G
  -4632.48 6155.78 433.052 90.219 re
  -f*
  -K
  -4632.48 6155.78 433.052 90.219 re
  -S
  -4782 6185 3H ,
  -4815 6177 0L ,
  -4835 6185 1V ,
  -4850 6186 6C ,
  -4858 6185 6O ,
  -4881 6186 1N ,
  -255 G
  -4632.48 6029.47 433.052 126.307 re
  -f*
  -K
  -4632.48 6029.47 433.052 126.307 re
  -S
  -4653 6106 7A ,
  -4667 6096 1N ,
  -4689 6095 1F ,
  -4718 6095 6O ,
  -4741 6095 2D ,
  -4764 6096 1N ,
  -4784 6095 1V ,
  -4811 6096 2V ,
  -4832 6096 6C ,
  -4841 6096 1N ,
  -4860 6095 1V ,
  -4653 6052 7A ,
  -4665 6060 13 12 /4B
  -$X
  -(dL(=*T.ID#Co%sJ,"M<7h>n*#64u/~>
  -,
  -4682 6033 0L ,
  -4702 6042 0X ,
  -4727 6042 3P ,
  -4753 6042 1R ,
  -4760 6041 6K ,
  -4784 6042 3X ,
  -4816 6041 6K ,
  -4841 6042 1N ,
  -4860 6041 1V ,
  -4888 6042 2V ,
  -4905 6042 0X ,
  -4928 6041 6O ,
  -4951 6042 6C ,
  -4958 6041 0T ,
  -255 G
  -4632.48 5849.03 433.052 180.438 re
  -f*
  -K
  -4632.48 5849.03 433.052 180.438 re
  -S
  -4653 5969 3D ,
  -4676 5969 2H ,
  -4698 5969 0T ,
  -4720 5969 0T ,
  -4746 5970 3P ,
  -4772 5970 1R ,
  -4779 5969 6K ,
  -4804 5970 3X ,
  -4835 5969 6K ,
  -4860 5970 1N ,
  -4880 5969 1V ,
  -4894 5961 2Z ,
  -4905 5961 0D ,
  -4653 5915 3D ,
  -4675 5915 0T ,
  -4698 5915 6K ,
  -4722 5916 1R ,
  -4732 5916 3P ,
  -4758 5916 1R ,
  -4765 5915 6K ,
  -4790 5916 3X ,
  -4822 5915 6K ,
  -4846 5916 1N ,
  -4866 5915 1V ,
  -4880 5907 2Z ,
  -4892 5907 0D ,
  -4653 5861 3D ,
  -4675 5853 6G ,
  -4698 5861 6K ,
  -4719 5861 1V ,
  -4733 5861 1F ,
  -4762 5861 6O ,
  -4786 5861 2D ,
  -4808 5862 1N ,
  -4828 5861 1V ,
  -4842 5853 2Z ,
  -4853 5853 0D ,
  -255 G
  -3333.32 7080.52 433.052 338.322 re
  -f*
  -K
  -3333.32 7080.52 433.052 338.322 re
  -S
  -255 G
  -3333.32 7346.67 433.052 72.1753 re
  -f*
  -K
  -3333.32 7346.67 433.052 72.1753 re
  -S
  -3417 7359 5Y ,
  -3440 7359 5Y ,
  -3463 7359 26 30 /1F
  -$C
  --EPdHD/We8hS3oI?MS\M[_B6,I;c^ng>DR5f=mm~>
  -,
  -3490 7358 0T ,
  -3514 7358 2H ,
  -3536 7350 0L ,
  -3557 7358 1V ,
  -3569 7358 6K ,
  -3594 7359 6W ,
  -3606 7358 1Z ,
  -3630 7358 1Z ,
  -255 G
  -3333.32 7256.45 433.052 90.219 re
  -f*
  -K
  -3333.32 7256.45 433.052 90.219 re
  -S
  -3481 7287 1B ,
  -3502 7286 6O ,
  -3524 7278 6G ,
  -3546 7278 6G ,
  -3569 7286 6K ,
  -3594 7287 6W ,
  -255 G
  -3337.83 7337.65 424.03 13.5327 re
  -f*
  -3337.83 7337.65 424.03 13.5327 re
  -S
  -3333.32 7166.23 433.052 90.219 re
  -f*
  -K
  -3333.32 7166.23 433.052 90.219 re
  -S
  -255 G
  -3333.32 7076.01 433.052 90.219 re
  -f*
  -K
  -3333.32 7076.01 433.052 90.219 re
  -S
  -255 G
  -2070.25 7675.97 433.052 338.322 re
  -f*
  -K
  -2070.25 7675.97 433.052 338.322 re
  -S
  -255 G
  -2070.25 7942.12 433.052 72.1753 re
  -f*
  -K
  -2070.25 7942.12 433.052 72.1753 re
  -S
  -2126 7955 5Y ,
  -2150 7955 5Y ,
  -2176 7955 2P ,
  -2186 7955 1N ,
  -2206 7954 1V ,
  -2218 7954 6K ,
  -2243 7955 6W ,
  -2255 7946 0L ,
  -2279 7955 6W ,
  -2290 7954 6K ,
  -2312 7954 1V ,
  -2324 7954 6K ,
  -2349 7955 6W ,
  -2361 7954 1Z ,
  -2385 7954 1Z ,
  -255 G
  -2070.25 7851.9 433.052 90.219 re
  -f*
  -K
  -2070.25 7851.9 433.052 90.219 re
  -S
  -2187 7882 3T ,
  -2213 7882 6W ,
  -2226 7881 6O ,
  -2248 7881 7I ,
  -2267 7881 6K ,
  -2290 7881 2L ,
  -2310 7881 2L ,
  -2332 7881 6O ,
  -2355 7882 6W ,
  -255 G
  -2074.76 7933.09 424.03 13.5327 re
  -f*
  -2074.76 7933.09 424.03 13.5327 re
  -S
  -2070.25 7761.68 433.052 90.219 re
  -f*
  -K
  -2070.25 7761.68 433.052 90.219 re
  -S
  -255 G
  -2070.25 7671.46 433.052 90.219 re
  -f*
  -K
  -2070.25 7671.46 433.052 90.219 re
  -S
  -255 G
  -1528.94 7134.65 451.096 266.146 re
  -f*
  -K
  -1528.94 7134.65 451.096 266.146 re
  -S
  -255 G
  -1528.94 7310.58 451.096 90.219 re
  -f*
  -K
  -1528.94 7310.58 451.096 90.219 re
  -S
  -1698 7340 1J ,
  -1725 7340 7I ,
  -1746 7341 6W ,
  -1760 7341 6C ,
  -1768 7332 0L ,
  -1788 7340 1V ,
  -255 G
  -1528.94 7220.36 451.096 90.219 re
  -f*
  -K
  -1528.94 7220.36 451.096 90.219 re
  -S
  -1549 7261 7A ,
  -1562 7250 6K ,
  -1586 7251 1B ,
  -1608 7250 2H ,
  -1631 7251 1N ,
  -1652 7242 6G ,
  -1690 7251 2V ,
  -1708 7250 6K ,
  -1733 7251 1N ,
  -1755 7250 2D ,
  -1778 7251 3X ,
  -1822 7255 20 10 /4F
  -$C
  --D@3UJDZPedGP~>
  -,
  -1857 7250 19 30 /1J
  -$C
  -4?-*,'=XXj0=Uf8e,TIJs8B-&s0Sr=BiqE4_LM~>
  -,
  -255 G
  -1528.94 7130.14 451.096 90.219 re
  -f*
  -K
  -1528.94 7130.14 451.096 90.219 re
  -S
  -255 G
  -2070.25 7139.17 433.052 266.146 re
  -f*
  -K
  -2070.25 7139.17 433.052 266.146 re
  -S
  -255 G
  -2070.25 7315.09 433.052 90.219 re
  -f*
  -K
  -2070.25 7315.09 433.052 90.219 re
  -S
  -2223 7346 5U ,
  -2250 7345 26 32 /1F
  -$C
  -1_L@=SIsnT6+o3Kl["'3reN8cs8TiT;uYA@D0D2PYejEje1dN~>
  -,
  -2282 7346 0H ,
  -2306 7346 6C ,
  -2315 7346 1R ,
  -2322 7345 6K ,
  -255 G
  -2070.25 7224.87 433.052 90.219 re
  -f*
  -K
  -2070.25 7224.87 433.052 90.219 re
  -S
  -255 G
  -2070.25 7134.65 433.052 90.219 re
  -f*
  -K
  -2070.25 7134.65 433.052 90.219 re
  -S
  -255 G
  -2611.57 7139.17 433.052 266.146 re
  -f*
  -K
  -2611.57 7139.17 433.052 266.146 re
  -S
  -255 G
  -2611.57 7315.09 433.052 90.219 re
  -f*
  -K
  -2611.57 7315.09 433.052 90.219 re
  -S
  -2746 7346 0H ,
  -2770 7345 2D ,
  -2793 7346 1N ,
  -2814 7345 7I ,
  -2837 7346 0H ,
  -2860 7346 6C ,
  -2869 7346 1R ,
  -2876 7345 6K ,
  -255 G
  -2611.57 7224.87 433.052 90.219 re
  -f*
  -K
  -2611.57 7224.87 433.052 90.219 re
  -S
  -255 G
  -2611.57 7134.65 433.052 90.219 re
  -f*
  -K
  -2611.57 7134.65 433.052 90.219 re
  -S
  -255 G
  -2358.95 6480.57 433.052 266.146 re
  -f*
  -K
  -2358.95 6480.57 433.052 266.146 re
  -S
  -255 G
  -2358.95 6656.49 433.052 90.219 re
  -f*
  -K
  -2358.95 6656.49 433.052 90.219 re
  -S
  -2542 6687 27 30 /1O
  -$C
  -,JX6Hs5!_N%/BiRA`*O"s,bSj\,~>
  -,
  -2566 6687 11 30 /4O
  -$X
  -Dub+_GQ;sgGQ9]'49.JD49.JD*WR5]*WR5]%KI">%fd+?%fch7#Cm$Zzz"2G#S"2FrQ~>
  -,
  -2576 6687 10 30 /1S
  -$X
  -huN6Hn,VqXDub+_GQ;sgGQ9]'49.JD49.JD)uq#[*WR5]*WQZM%fd+?%fd+?#Cm&0#Cm&0"+UKh~>
  -,
  -2585 6686 21 23 /4S
  -$C
  -3'%N\Grp*ZHFKdMEVU%GpWF`:rU-fS0U7O'$n)~>
  -,
  -255 G
  -2358.95 6566.27 433.052 90.219 re
  -f*
  -K
  -2358.95 6566.27 433.052 90.219 re
  -S
  -2379 6607 7A ,
  -2392 6615 4B ,
  -2407 6596 2L ,
  -2428 6597 18 21 /1X
  -$C
  --D3l7_n4[4DV`'Fh7Ik!,D,s2~>
  -,
  -2450 6597 3L ,
  -2478 6596 2H ,
  -2502 6597 3X ,
  -2534 6596 6K ,
  -2571 6597 2V ,
  -2591 6596 7I ,
  -2612 6597 17 30 /4X
  -$C
  --Eo0's8W-!s53\,_c_a0g>T2!s8RT~>
  -,
  -2634 6596 2H ,
  -2657 6597 6W ,
  -255 G
  -2358.95 6476.05 433.052 90.219 re
  -f*
  -K
  -2358.95 6476.05 433.052 90.219 re
  -S
  -2379 6506 3D ,
  -2402 6498 6G ,
  -2424 6506 6K ,
  -2446 6506 1V ,
  -2460 6507 3L ,
  -2488 6506 2H ,
  -2512 6507 3X ,
  -2544 6506 6K ,
  -2568 6498 2Z ,
  -2580 6498 0D ,
  -255 G
  -1276.32 5763.32 433.052 266.146 re
  -f*
  -K
  -1276.32 5763.32 433.052 266.146 re
  -S
  -255 G
  -1276.32 5939.25 433.052 90.219 re
  -f*
  -K
  -1276.32 5939.25 433.052 90.219 re
  -S
  -1350 5969 1F ,
  -1380 5969 6O ,
  -1403 5970 1N ,
  -1423 5970 6S ,
  -1437 5970 6C ,
  -1444 5961 6G ,
  -1468 5969 23 32 /6A
  -$C
  -4q\EGSIsnTJ\3A4e,T3C;AbKfGTIDq6I?B45dda^J,]>A[BRMK.b$/F~>
  -,
  -1494 5969 6K ,
  -1517 5969 7I ,
  -1536 5969 1V ,
  -1550 5970 6C ,
  -1558 5969 6O ,
  -1582 5970 1N ,
  -255 G
  -1276.32 5849.03 433.052 90.219 re
  -f*
  -K
  -1276.32 5849.03 433.052 90.219 re
  -S
  -255 G
  -1276.32 5758.81 433.052 90.219 re
  -f*
  -K
  -1276.32 5758.81 433.052 90.219 re
  -S
  -255 G
  -1817.64 5763.32 433.052 266.146 re
  -f*
  -K
  -1817.64 5763.32 433.052 266.146 re
  -S
  -255 G
  -1817.64 5939.25 433.052 90.219 re
  -f*
  -K
  -1817.64 5939.25 433.052 90.219 re
  -S
  -1885 5970 23 30 /4Z
  -$C
  --D?A]jjESTDn"X's*t(Ks4@,I9<V!AZ!,"p~>
  -,
  -1911 5969 6K ,
  -1933 5970 6S ,
  -1946 5969 2H ,
  -1970 5969 2D ,
  -1992 5970 1R ,
  -1998 5969 1V ,
  -2011 5969 6A ,
  -2037 5969 6K ,
  -2061 5969 7I ,
  -2079 5969 1V ,
  -2094 5970 6C ,
  -2102 5969 6O ,
  -2125 5970 1N ,
  -255 G
  -1817.64 5849.03 433.052 90.219 re
  -f*
  -K
  -1817.64 5849.03 433.052 90.219 re
  -S
  -255 G
  -1817.64 5758.81 433.052 90.219 re
  -f*
  -K
  -1817.64 5758.81 433.052 90.219 re
  -S
  -255 G
  -2358.95 5763.32 433.052 266.146 re
  -f*
  -K
  -2358.95 5763.32 433.052 266.146 re
  -S
  -255 G
  -2358.95 5939.25 433.052 90.219 re
  -f*
  -K
  -2358.95 5939.25 433.052 90.219 re
  -S
  -2453 5970 3P ,
  -2479 5970 6W ,
  -2493 5970 6W ,
  -2505 5969 6O ,
  -2529 5970 6W ,
  -2541 5969 6A ,
  -2567 5969 6K ,
  -2591 5969 7I ,
  -2609 5969 1V ,
  -2624 5970 6C ,
  -2632 5969 6O ,
  -2655 5970 1N ,
  -255 G
  -2358.95 5849.03 433.052 90.219 re
  -f*
  -K
  -2358.95 5849.03 433.052 90.219 re
  -S
  -255 G
  -2358.95 5758.81 433.052 90.219 re
  -f*
  -K
  -2358.95 5758.81 433.052 90.219 re
  -S
  -255 G
  -2900.27 5763.32 433.052 266.146 re
  -f*
  -K
  -2900.27 5763.32 433.052 266.146 re
  -S
  -255 G
  -2900.27 5939.25 433.052 90.219 re
  -f*
  -K
  -2900.27 5939.25 433.052 90.219 re
  -S
  -2947 5969 1F ,
  -2977 5969 6O ,
  -3000 5970 3X ,
  -3034 5970 3X ,
  -3067 5969 6O ,
  -3090 5970 1N ,
  -3112 5969 6A ,
  -3138 5969 6K ,
  -3162 5969 7I ,
  -3180 5969 1V ,
  -3194 5970 6C ,
  -3202 5969 6O ,
  -3226 5970 1N ,
  -255 G
  -2900.27 5849.03 433.052 90.219 re
  -f*
  -K
  -2900.27 5849.03 433.052 90.219 re
  -S
  -255 G
  -2900.27 5758.81 433.052 90.219 re
  -f*
  -K
  -2900.27 5758.81 433.052 90.219 re
  -S
  -255 G
  -3441.58 5763.32 451.096 266.146 re
  -f*
  -K
  -3441.58 5763.32 451.096 266.146 re
  -S
  -255 G
  -3441.58 5939.25 451.096 90.219 re
  -f*
  -K
  -3441.58 5939.25 451.096 90.219 re
  -S
  -3544 5969 23 31 /2D
  -$C
  -4sV7iSIsnTJ\=2sqLAPFs8W-!s8W-!n,~>
  -,
  -3571 5969 2L ,
  -3591 5969 6K ,
  -3616 5970 6W ,
  -3629 5969 6A ,
  -3655 5969 6K ,
  -3678 5969 7I ,
  -3696 5969 1V ,
  -3711 5970 6C ,
  -3719 5969 6O ,
  -3742 5970 1N ,
  -255 G
  -3441.58 5849.03 451.096 90.219 re
  -f*
  -K
  -3441.58 5849.03 451.096 90.219 re
  -S
  -3462 5890 7A ,
  -3474 5879 6K ,
  -3499 5880 1B ,
  -3520 5879 2H ,
  -3544 5880 1N ,
  -3564 5871 6G ,
  -3602 5880 2V ,
  -3621 5879 6K ,
  -3645 5880 1N ,
  -3668 5879 16 22 /2D
  -$X
  -+2C,4J,B"jn/pR!i"+`Vi!80Fi!80Fi!80Fi!80Fi!80Fi!80Fi!80F~>
  -,
  -3691 5880 3X ,
  -3735 5884 4F ,
  -3770 5879 1J ,
  -255 G
  -3441.58 5758.81 451.096 90.219 re
  -f*
  -K
  -3441.58 5758.81 451.096 90.219 re
  -S
  -255 G
  -2358.95 5149.83 433.052 266.146 re
  -f*
  -K
  -2358.95 5149.83 433.052 266.146 re
  -S
  -255 G
  -2358.95 5325.76 433.052 90.219 re
  -f*
  -K
  -2358.95 5325.76 433.052 90.219 re
  -S
  -2502 5355 26 32 /2G
  -$C
  -4;&3EK;(PS5i!gTlg=]L<j51(1C&RJ&>t,Q>1Yf"DmaM#.h!_5X[<E~>
  -,
  -2529 5355 4S ,
  -2551 5355 20 23 /5G
  -$C
  -2D#//M;-BpYGV?WO5I^\:AqoWL6[XNTr7~>
  -,
  -2573 5355 11 28 /2K
  -$X
  -HiX-GrW)Efn,VqXn,RD-GQ;sgGQ;sg2ul&@49.JD)uq#[*WZ5us58Cb%fd+?%fd+?#65!Z~>
  -,
  -2582 5356 4O ,
  -2592 5355 21 23 /5K
  -$C
  -3&j4QU/pJ#heuk?rP.dVs4dL[DQq"1W+m/G~>
  -,
  -2615 5356 21 22 /2O
  -$C
  --EPVhp\Xjbqu-K.^YdfGGA>#uLD@*S8;<c~>
  -,
  -255 G
  -2358.95 5235.54 433.052 90.219 re
  -f*
  -K
  -2358.95 5235.54 433.052 90.219 re
  -S
  -255 G
  -2358.95 5145.32 433.052 90.219 re
  -f*
  -K
  -2358.95 5145.32 433.052 90.219 re
  -S
  -255 G
  -626.745 7748.15 433.052 266.146 re
  -f*
  -K
  -626.745 7748.15 433.052 266.146 re
  -S
  -255 G
  -626.745 7924.07 433.052 90.219 re
  -f*
  -K
  -626.745 7924.07 433.052 90.219 re
  -S
  -741 7955 23 30 /5P
  -$C
  -1k5Q*s8W-!s8W,@W$q-~>
  -,
  -767 7955 6W ,
  -780 7954 2H ,
  -803 7955 1N ,
  -824 7954 2L ,
  -846 7955 1R ,
  -854 7954 2H ,
  -875 7954 1V ,
  -888 7954 6O ,
  -912 7955 6W ,
  -255 G
  -626.745 7833.85 433.052 90.219 re
  -f*
  -K
  -626.745 7833.85 433.052 90.219 re
  -S
  -255 G
  -626.745 7743.63 433.052 90.219 re
  -f*
  -K
  -626.745 7743.63 433.052 90.219 re
  -S
  -255 G
  -879.359 7134.65 433.052 266.146 re
  -f*
  -K
  -879.359 7134.65 433.052 266.146 re
  -S
  -255 G
  -879.359 7310.58 433.052 90.219 re
  -f*
  -K
  -879.359 7310.58 433.052 90.219 re
  -S
  -981 7340 6A ,
  -1007 7332 19 30 /2T
  -$C
  -,G+XomOs"cI_5:0@J+R8lJM7,^Zi?0Uu21~>
  -,
  -1029 7341 1N ,
  -1049 7340 1V ,
  -1062 7340 2H ,
  -1083 7341 0P ,
  -1104 7341 5P ,
  -1131 7341 6W ,
  -1142 7340 6K ,
  -1165 7340 6K ,
  -255 G
  -879.359 7220.36 433.052 90.219 re
  -f*
  -K
  -879.359 7220.36 433.052 90.219 re
  -S
  -255 G
  -879.359 7130.14 433.052 90.219 re
  -f*
  -K
  -879.359 7130.14 433.052 90.219 re
  -S
  -255 G
  -338.044 7134.65 433.052 266.146 re
  -f*
  -K
  -338.044 7134.65 433.052 266.146 re
  -S
  -255 G
  -338.044 7310.58 433.052 90.219 re
  -f*
  -K
  -338.044 7310.58 433.052 90.219 re
  -S
  -421 7340 6A ,
  -447 7332 2T ,
  -470 7341 3X ,
  -502 7340 19 31 /5T
  -$C
  -4?59\I6:/XKH&D)rV\t\rNH0r[DN;_**6p1(E`\W^]~>
  -,
  -525 7340 6O ,
  -549 7341 1R ,
  -556 7341 5P ,
  -581 7340 2H ,
  -604 7340 5T ,
  -628 7341 1R ,
  -635 7340 6K ,
  -255 G
  -338.044 7220.36 433.052 90.219 re
  -f*
  -K
  -338.044 7220.36 433.052 90.219 re
  -S
  -255 G
  -338.044 7130.14 433.052 90.219 re
  -f*
  -K
  -338.044 7130.14 433.052 90.219 re
  -S
  -4849 7184.27 0 415.01 S
  -255 G
  -4849 7594.77 22.55 -45.11 -22.55 -45.11 -22.55 45.11 f*
  -K
  -4849 7594.77 22.55 -45.11 -22.55 -45.11 -22.55 45.11 H
  -S
  -4887 7205 1J ,
  -4912 7206 4 4 /2X
  -$X
  -nF5r:~>
  -,
  -4923 7206 2X ,
  -4934 7206 10 29 /5X
  -$X
  -!Pe`O!Pe`O!Pe`O!Pe`O!Pe`O!Pe`O!Pe`O!Pe`O!Pe`O!Pe`Os1nZMs1gk7#J^GW!Pe`O!Pe~>
  -,
  -4307.69 7184.27 0 216.53 541.32 0 0 198.48 S
  -255 G
  -4849 7594.77 22.55 -45.11 -22.55 -45.11 -22.55 45.11 f*
  -K
  -4849 7594.77 22.55 -45.11 -22.55 -45.11 -22.55 45.11 H
  -S
  -4341 7205 1J ,
  -4366 7206 2X ,
  -4377 7206 2X ,
  -4388 7206 5X ,
  -5390.32 7184.27 0 216.53 -541.32 0 0 198.48 S
  -255 G
  -4849 7594.77 22.55 -45.11 -22.55 -45.11 -22.55 45.11 f*
  -K
  -4849 7594.77 22.55 -45.11 -22.55 -45.11 -22.55 45.11 H
  -S
  -5433 7205 1J ,
  -5457 7206 2X ,
  -5469 7206 2X ,
  -5480 7206 5X ,
  -3770.89 7906.03 753.33 0 S
  -255 G
  -3770.89 7906.03 45.11 22.55 45.11 -22.55 -45.11 -22.55 f*
  -K
  -3770.89 7906.03 45.11 22.55 45.11 -22.55 -45.11 -22.55 H
  -S
  -3549.85 7418.84 0 320.28 S
  -2507.82 7906.03 825.51 0 S
  -255 G
  -3328.81 7906.03 -45.11 -22.55 -45.11 22.55 45.11 22.55 f*
  -K
  -3328.81 7906.03 -45.11 -22.55 -45.11 22.55 45.11 22.55 H
  -S
  -2532 7927 1J ,
  -2557 7928 2X ,
  -2568 7928 2X ,
  -2580 7928 5X ,
  -2286.78 7134.65 0 -202.99 288.7 0 0 -184.95 S
  -255 G
  -2575.48 6751.22 -31.58 54.13 63.15 0 f*
  -K
  -2575.48 6751.22 -31.58 54.13 63.15 0 H
  -S
  -2828.09 7134.65 0 -202.99 -252.61 0 0 -184.95 S
  -255 G
  -2575.48 6751.22 -31.58 54.13 63.15 0 f*
  -K
  -2575.48 6751.22 -31.58 54.13 63.15 0 H
  -S
  -2286.78 7405.31 0 266.15 S
  -255 G
  -2286.78 7666.95 22.55 -45.11 -22.55 -45.11 -22.55 45.11 f*
  -K
  -2286.78 7666.95 22.55 -45.11 -22.55 -45.11 -22.55 45.11 H
  -S
  -2309 7427 5X ,
  -2331 7427 2X ,
  -2343 7427 2X ,
  -2351 7445 4B ,
  -1745.46 7400.8 0 144.35 541.32 0 0 126.31 S
  -255 G
  -2286.78 7666.95 22.55 -45.11 -22.55 -45.11 -22.55 45.11 f*
  -K
  -2286.78 7666.95 22.55 -45.11 -22.55 -45.11 -22.55 45.11 H
  -S
  -1768 7422 5X ,
  -1790 7422 2X ,
  -1801 7422 2X ,
  -1810 7440 4B ,
  -2828.09 7405.31 0 139.84 -541.32 0 0 126.31 S
  -255 G
  -2286.78 7666.95 22.55 -45.11 -22.55 -45.11 -22.55 45.11 f*
  -K
  -2286.78 7666.95 22.55 -45.11 -22.55 -45.11 -22.55 45.11 H
  -S
  -2853 7426 1J ,
  -2877 7427 2X ,
  -2889 7427 2X ,
  -2900 7427 5X ,
  -2575.48 5758.81 0 -342.83 S
  -255 G
  -2575.48 5420.49 -31.58 54.13 63.15 0 f*
  -K
  -2575.48 5420.49 -31.58 54.13 63.15 0 H
  -S
  -2034.17 5758.81 0 -162.39 541.32 0 0 -180.44 S
  -255 G
  -2575.48 5420.49 -31.58 54.13 63.15 0 f*
  -K
  -2575.48 5420.49 -31.58 54.13 63.15 0 H
  -S
  -1492.85 5758.81 0 -162.39 1082.63 0 0 -180.44 S
  -255 G
  -2575.48 5420.49 -31.58 54.13 63.15 0 f*
  -K
  -2575.48 5420.49 -31.58 54.13 63.15 0 H
  -S
  -3116.8 5758.81 0 -162.39 -541.32 0 0 -180.44 S
  -255 G
  -2575.48 5420.49 -31.58 54.13 63.15 0 f*
  -K
  -2575.48 5420.49 -31.58 54.13 63.15 0 H
  -S
  -3658.11 5758.81 0 -162.39 -1082.63 0 0 -180.44 S
  -255 G
  -2575.48 5420.49 -31.58 54.13 63.15 0 f*
  -K
  -2575.48 5420.49 -31.58 54.13 63.15 0 H
  -S
  -3116.8 6029.47 0 216.53 -541.32 0 0 230.06 S
  -255 G
  -2575.48 6471.54 22.55 -45.11 -22.55 -45.11 -22.55 45.11 f*
  -K
  -2575.48 6471.54 22.55 -45.11 -22.55 -45.11 -22.55 45.11 H
  -S
  -3155 6050 1J ,
  -3179 6051 2X ,
  -3191 6051 2X ,
  -3202 6051 5X ,
  -3658.11 6029.47 0 216.53 -1082.63 0 0 230.06 S
  -255 G
  -2575.48 6471.54 22.55 -45.11 -22.55 -45.11 -22.55 45.11 f*
  -K
  -2575.48 6471.54 22.55 -45.11 -22.55 -45.11 -22.55 45.11 H
  -S
  -3701 6050 1J ,
  -3725 6051 2X ,
  -3737 6051 2X ,
  -3745 6069 4B ,
  -1095.89 7400.8 0 144.35 -252.61 0 0 198.48 S
  -255 G
  -843.27 7739.12 22.55 -45.11 -22.55 -45.11 -22.55 45.11 f*
  -K
  -843.27 7739.12 22.55 -45.11 -22.55 -45.11 -22.55 45.11 H
  -S
  -1064.31 7906.03 1005.94 0 S
  -255 G
  -2065.74 7906.03 -45.11 -22.55 -45.11 22.55 45.11 22.55 f*
  -K
  -2065.74 7906.03 -45.11 -22.55 -45.11 22.55 45.11 22.55 H
  -S
  -1107 7927 1J ,
  -1131 7928 2X ,
  -1143 7928 2X ,
  -1154 7928 5X ,
  -554.57 7400.8 0 144.35 288.7 0 0 198.48 S
  -255 G
  -843.27 7739.12 22.55 -45.11 -22.55 -45.11 -22.55 45.11 f*
  -K
  -843.27 7739.12 22.55 -45.11 -22.55 -45.11 -22.55 45.11 H
  -S
  -4849 6246 0 595.45 S
  -255 G
  -4849 6836.93 22.55 -45.11 -22.55 -45.11 -22.55 45.11 f*
  -K
  -4849 6836.93 22.55 -45.11 -22.55 -45.11 -22.55 45.11 H
  -S
  -4849 6246 0 216.53 -577.4 0 0 180.44 S
  -255 G
  -4271.6 6638.45 22.55 -45.11 -22.55 -45.11 -22.55 45.11 f*
  -K
  -4271.6 6638.45 22.55 -45.11 -22.55 -45.11 -22.55 45.11 H
  -S
  -4849 6246 0 216.53 577.4 0 0 378.92 S
  -255 G
  -5426.41 6836.93 22.55 -45.11 -22.55 -45.11 -22.55 45.11 f*
  -K
  -5426.41 6836.93 22.55 -45.11 -22.55 -45.11 -22.55 45.11 H
  -S
  -5433 7205 1J ,
  -5457 7206 2X ,
  -5469 7206 2X ,
  -5480 7206 5X ,
  -4887 7205 1J ,
  -4912 7206 2X ,
  -4923 7206 2X ,
  -4934 7206 5X ,
  -4341 7205 1J ,
  -4366 7206 2X ,
  -4377 7206 2X ,
  -4388 7206 5X ,
  -2532 7927 1J ,
  -2557 7928 2X ,
  -2568 7928 2X ,
  -2580 7928 5X ,
  -1107 7927 1J ,
  -1131 7928 2X ,
  -1143 7928 2X ,
  -1154 7928 5X ,
  -1768 7422 5X ,
  -1790 7422 2X ,
  -1801 7422 2X ,
  -1810 7440 4B ,
  -2853 7426 1J ,
  -2877 7427 2X ,
  -2889 7427 2X ,
  -2900 7427 5X ,
  -2309 7427 5X ,
  -2331 7427 2X ,
  -2343 7427 2X ,
  -2351 7445 4B ,
  -2575.48 6029.47 0 446.58 S
  -255 G
  -2575.48 6471.54 22.55 -45.11 -22.55 -45.11 -22.55 45.11 f*
  -K
  -2575.48 6471.54 22.55 -45.11 -22.55 -45.11 -22.55 45.11 H
  -S
  -2618 6050 1J ,
  -2643 6051 2X ,
  -2654 6051 2X ,
  -2665 6051 5X ,
  -2034.17 6029.47 0 216.53 541.32 0 0 230.06 S
  -255 G
  -2575.48 6471.54 22.55 -45.11 -22.55 -45.11 -22.55 45.11 f*
  -K
  -2575.48 6471.54 22.55 -45.11 -22.55 -45.11 -22.55 45.11 H
  -S
  -2081 6050 1J ,
  -2106 6051 2X ,
  -2117 6051 2X ,
  -2128 6051 5X ,
  -1492.85 6029.47 0 216.53 1082.63 0 0 230.06 S
  -255 G
  -2575.48 6471.54 22.55 -45.11 -22.55 -45.11 -22.55 45.11 f*
  -K
  -2575.48 6471.54 22.55 -45.11 -22.55 -45.11 -22.55 45.11 H
  -S
  -1535 6050 1J ,
  -1560 6051 2X ,
  -1571 6051 2X ,
  -1583 6051 5X ,
  -2618 6050 1J ,
  -2643 6051 2X ,
  -2654 6051 2X ,
  -2665 6051 5X ,
  -3155 6050 1J ,
  -3179 6051 2X ,
  -3191 6051 2X ,
  -3202 6051 5X ,
  -3701 6050 1J ,
  -3725 6051 2X ,
  -3737 6051 2X ,
  -3745 6069 4B ,
  -2081 6050 1J ,
  -2106 6051 2X ,
  -2117 6051 2X ,
  -2128 6051 5X ,
  -1535 6050 1J ,
  -1560 6051 2X ,
  -1571 6051 2X ,
  -1583 6051 5X ,
  -cleartomark end end pagesave restore showpage
  -%%PageTrailer
  +%%BeginSetup
  +/isolatin1encoding 
  +[ 32 /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright 
  + /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one 
  + /two /three /four /five /six /seven /eight /nine /colon /semicolon 
  + /less /equal /greater /question /at /A /B /C /D /E 
  + /F /G /H /I /J /K /L /M /N /O 
  + /P /Q /R /S /T /U /V /W /X /Y 
  + /Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c 
  + /d /e /f /g /h /i /j /k /l /m 
  + /n /o /p /q /r /s /t /u /v /w 
  + /x /y /z /braceleft /bar /braceright /asciitilde /.notdef /.notdef /.notdef 
  + /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef 
  + /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef 
  + /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef 
  + /space /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright 
  + /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron /degree /plusminus /twosuperior /threesuperior 
  + /acute /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf 
  + /threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla 
  + /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde 
  + /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex 
  + /Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring 
  + /ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis 
  + /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave 
  + /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis] def 
  +%%EndSetup
  +1 setlinewidth
  +isolatin1encoding /_Helvetica /Helvetica RE
  +/_Helvetica findfont
  +12 scalefont setfont
  +0.0 0.0 0.0 setrgbcolor
  +32 810 translate
  +0.5051935788479698 0.5051935788479698 scale
  +-4 -26 translate
  +newpath
  +4 -26 moveto
  +1058 0 rlineto
  +0 -1285 rlineto
  +-1058 0 rlineto
  +closepath
  +clip
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +80 -1048 moveto
  +80 -1032 96 -1032 16 arcto 4 {pop} repeat
  +984 -1032 984 -1048 16 arcto 4 {pop} repeat
  +984 -1336 968 -1336 16 arcto 4 {pop} repeat
  +80 -1336 80 -1320 16 arcto 4 {pop} repeat
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +80 -1048 moveto
  +80 -1032 96 -1032 16 arcto 4 {pop} repeat
  +984 -1032 984 -1048 16 arcto 4 {pop} repeat
  +984 -1336 968 -1336 16 arcto 4 {pop} repeat
  +80 -1336 80 -1320 16 arcto 4 {pop} repeat
  +closepath
  +stroke
  +1.0 0.6862745 0.6862745 setrgbcolor
  +newpath
  +536 -32 moveto
  +96 0 rlineto
  +0 -67 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +536 -32 moveto
  +96 0 rlineto
  +0 -67 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +1.0 0.6862745 0.6862745 setrgbcolor
  +newpath
  +536 -32 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +536 -32 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +isolatin1encoding /_Helvetica /Helvetica RE
  +/_Helvetica findfont
  +9 scalefont setfont
  +577 -45 moveto
  +(RC) show
  +1.0 0.6862745 0.6862745 setrgbcolor
  +newpath
  +536 -52 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +536 -52 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +1.0 0.6862745 0.6862745 setrgbcolor
  +newpath
  +536 -72 moveto
  +96 0 rlineto
  +0 -28 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +536 -72 moveto
  +96 0 rlineto
  +0 -28 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +540 -85 moveto
  +(+RC\(\)) show
  +540 -97 moveto
  +(+~RC\(\)) show
  +0.78431374 1.0 1.0 setrgbcolor
  +newpath
  +680 -220 moveto
  +153 0 rlineto
  +0 -119 rlineto
  +-153 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +680 -220 moveto
  +153 0 rlineto
  +0 -119 rlineto
  +-153 0 rlineto
  +closepath
  +stroke
  +0.78431374 1.0 1.0 setrgbcolor
  +newpath
  +680 -220 moveto
  +153 0 rlineto
  +0 -16 rlineto
  +-153 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +680 -220 moveto
  +153 0 rlineto
  +0 -16 rlineto
  +-153 0 rlineto
  +closepath
  +stroke
  +723 -233 moveto
  +(<<Singleton>>) show
  +0.78431374 1.0 1.0 setrgbcolor
  +newpath
  +680 -236 moveto
  +153 0 rlineto
  +0 -20 rlineto
  +-153 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +680 -236 moveto
  +153 0 rlineto
  +0 -20 rlineto
  +-153 0 rlineto
  +closepath
  +stroke
  +726 -249 moveto
  +(Configuration) show
  +0.78431374 1.0 1.0 setrgbcolor
  +newpath
  +681 -235 moveto
  +151 0 rlineto
  +0 -3 rlineto
  +-151 0 rlineto
  +closepath
  +eofill
  +newpath
  +681 -235 moveto
  +151 0 rlineto
  +0 -3 rlineto
  +-151 0 rlineto
  +closepath
  +stroke
  +newpath
  +680 -256 moveto
  +153 0 rlineto
  +0 -20 rlineto
  +-153 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +680 -256 moveto
  +153 0 rlineto
  +0 -20 rlineto
  +-153 0 rlineto
  +closepath
  +stroke
  +684 -269 moveto
  +(-*s_pInst : Configuration) show
  +0.78431374 1.0 1.0 setrgbcolor
  +newpath
  +680 -276 moveto
  +153 0 rlineto
  +0 -64 rlineto
  +-153 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +680 -276 moveto
  +153 0 rlineto
  +0 -64 rlineto
  +-153 0 rlineto
  +closepath
  +stroke
  +684 -289 moveto
  +(#Configuration\(\)) show
  +684 -301 moveto
  +(+getInstance\(\)) show
  +684 -313 moveto
  +(+~Configuration\(\)) show
  +684 -325 moveto
  +(+Load\(\)) show
  +684 -337 moveto
  +(-Prep\(\)) show
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +511 -423 moveto
  +135 0 rlineto
  +0 -67 rlineto
  +-135 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +511 -423 moveto
  +135 0 rlineto
  +0 -67 rlineto
  +-135 0 rlineto
  +closepath
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +511 -423 moveto
  +135 0 rlineto
  +0 -20 rlineto
  +-135 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +511 -423 moveto
  +135 0 rlineto
  +0 -20 rlineto
  +-135 0 rlineto
  +closepath
  +stroke
  +555 -436 moveto
  +(FileOption) show
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +511 -443 moveto
  +135 0 rlineto
  +0 -20 rlineto
  +-135 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +511 -443 moveto
  +135 0 rlineto
  +0 -20 rlineto
  +-135 0 rlineto
  +closepath
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +511 -463 moveto
  +135 0 rlineto
  +0 -28 rlineto
  +-135 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +511 -463 moveto
  +135 0 rlineto
  +0 -28 rlineto
  +-135 0 rlineto
  +closepath
  +stroke
  +515 -476 moveto
  +(+FileOption\(**ppvOpts:void\)) show
  +515 -488 moveto
  +(+~FileOption\(\)) show
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +672 -421 moveto
  +177 0 rlineto
  +0 -67 rlineto
  +-177 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +672 -421 moveto
  +177 0 rlineto
  +0 -67 rlineto
  +-177 0 rlineto
  +closepath
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +672 -421 moveto
  +177 0 rlineto
  +0 -20 rlineto
  +-177 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +672 -421 moveto
  +177 0 rlineto
  +0 -20 rlineto
  +-177 0 rlineto
  +closepath
  +stroke
  +716 -434 moveto
  +(EnvironmentOption) show
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +672 -441 moveto
  +177 0 rlineto
  +0 -20 rlineto
  +-177 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +672 -441 moveto
  +177 0 rlineto
  +0 -20 rlineto
  +-177 0 rlineto
  +closepath
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +672 -461 moveto
  +177 0 rlineto
  +0 -28 rlineto
  +-177 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +672 -461 moveto
  +177 0 rlineto
  +0 -28 rlineto
  +-177 0 rlineto
  +closepath
  +stroke
  +676 -474 moveto
  +(+EnvironmentOption\(**ppvOpts:void\)) show
  +676 -486 moveto
  +(+~EnvironmentOption\(\)) show
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +872 -421 moveto
  +186 0 rlineto
  +0 -67 rlineto
  +-186 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +872 -421 moveto
  +186 0 rlineto
  +0 -67 rlineto
  +-186 0 rlineto
  +closepath
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +872 -421 moveto
  +186 0 rlineto
  +0 -20 rlineto
  +-186 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +872 -421 moveto
  +186 0 rlineto
  +0 -20 rlineto
  +-186 0 rlineto
  +closepath
  +stroke
  +916 -434 moveto
  +(CommandLineOption) show
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +872 -441 moveto
  +186 0 rlineto
  +0 -20 rlineto
  +-186 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +872 -441 moveto
  +186 0 rlineto
  +0 -20 rlineto
  +-186 0 rlineto
  +closepath
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +872 -461 moveto
  +186 0 rlineto
  +0 -28 rlineto
  +-186 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +872 -461 moveto
  +186 0 rlineto
  +0 -28 rlineto
  +-186 0 rlineto
  +closepath
  +stroke
  +876 -474 moveto
  +(+CommandLineOption\(**ppvOpts:void\)) show
  +876 -486 moveto
  +(+~CommandLineOption\(\)) show
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +664 -576 moveto
  +191 0 rlineto
  +0 -79 rlineto
  +-191 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +664 -576 moveto
  +191 0 rlineto
  +0 -79 rlineto
  +-191 0 rlineto
  +closepath
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +664 -576 moveto
  +191 0 rlineto
  +0 -20 rlineto
  +-191 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +664 -576 moveto
  +191 0 rlineto
  +0 -20 rlineto
  +-191 0 rlineto
  +closepath
  +stroke
  +isolatin1encoding /_dialog-Oblique /dialog-Oblique RE
  +/_dialog-Oblique findfont
  +9 scalefont setfont
  +744 -589 moveto
  +(Option) show
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +664 -596 moveto
  +191 0 rlineto
  +0 -20 rlineto
  +-191 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +664 -596 moveto
  +191 0 rlineto
  +0 -20 rlineto
  +-191 0 rlineto
  +closepath
  +stroke
  +isolatin1encoding /_Helvetica /Helvetica RE
  +/_Helvetica findfont
  +9 scalefont setfont
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +664 -616 moveto
  +191 0 rlineto
  +0 -40 rlineto
  +-191 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +664 -616 moveto
  +191 0 rlineto
  +0 -40 rlineto
  +-191 0 rlineto
  +closepath
  +stroke
  +668 -629 moveto
  +(+Parse\(\)) show
  +668 -641 moveto
  +(+getOpt\(in nOptid:int\)) show
  +668 -653 moveto
  +(+putOpt\(in nOptid:int, in *pvOptval:void\)) show
  +0.78431374 1.0 1.0 setrgbcolor
  +newpath
  +736 -33 moveto
  +96 0 rlineto
  +0 -67 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +736 -33 moveto
  +96 0 rlineto
  +0 -67 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +0.78431374 1.0 1.0 setrgbcolor
  +newpath
  +736 -33 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +736 -33 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +768 -46 moveto
  +(Logger) show
  +0.78431374 1.0 1.0 setrgbcolor
  +newpath
  +736 -53 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +736 -53 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +0.78431374 1.0 1.0 setrgbcolor
  +newpath
  +736 -73 moveto
  +96 0 rlineto
  +0 -28 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +736 -73 moveto
  +96 0 rlineto
  +0 -28 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +740 -86 moveto
  +(+Logger\(\)) show
  +740 -98 moveto
  +(+~Logger\(\)) show
  +0.78431374 1.0 1.0 setrgbcolor
  +newpath
  +272 -32 moveto
  +96 0 rlineto
  +0 -67 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +272 -32 moveto
  +96 0 rlineto
  +0 -67 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +0.78431374 1.0 1.0 setrgbcolor
  +newpath
  +272 -32 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +272 -32 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +297 -45 moveto
  +(Processor) show
  +0.78431374 1.0 1.0 setrgbcolor
  +newpath
  +272 -52 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +272 -52 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +0.78431374 1.0 1.0 setrgbcolor
  +newpath
  +272 -72 moveto
  +96 0 rlineto
  +0 -28 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +272 -72 moveto
  +96 0 rlineto
  +0 -28 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +276 -85 moveto
  +(+Processor\(\)) show
  +276 -97 moveto
  +(+~Processor\(\)) show
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +144 -328 moveto
  +103 0 rlineto
  +0 -111 rlineto
  +-103 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +144 -328 moveto
  +103 0 rlineto
  +0 -111 rlineto
  +-103 0 rlineto
  +closepath
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +144 -328 moveto
  +103 0 rlineto
  +0 -20 rlineto
  +-103 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +144 -328 moveto
  +103 0 rlineto
  +0 -20 rlineto
  +-103 0 rlineto
  +closepath
  +stroke
  +183 -341 moveto
  +(Script) show
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +144 -348 moveto
  +103 0 rlineto
  +0 -28 rlineto
  +-103 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +144 -348 moveto
  +103 0 rlineto
  +0 -28 rlineto
  +-103 0 rlineto
  +closepath
  +stroke
  +148 -361 moveto
  +(-eLang : enum = 0) show
  +148 -373 moveto
  +(-*szBuf : char) show
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +144 -376 moveto
  +103 0 rlineto
  +0 -64 rlineto
  +-103 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +144 -376 moveto
  +103 0 rlineto
  +0 -64 rlineto
  +-103 0 rlineto
  +closepath
  +stroke
  +148 -389 moveto
  +(+Write\(in nDesc:int\)) show
  +148 -401 moveto
  +(+Script\(\)) show
  +148 -413 moveto
  +(+~Script\(\)) show
  +148 -425 moveto
  +(+putCommand\(\)) show
  +148 -437 moveto
  +(+putBlock\(\)) show
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +272 -327 moveto
  +96 0 rlineto
  +0 -67 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +272 -327 moveto
  +96 0 rlineto
  +0 -67 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +272 -327 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +272 -327 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +305 -340 moveto
  +(RCFile) show
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +272 -347 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +272 -347 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +272 -367 moveto
  +96 0 rlineto
  +0 -28 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +272 -367 moveto
  +96 0 rlineto
  +0 -28 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +276 -380 moveto
  +(+RcFile\(\)) show
  +276 -392 moveto
  +(+~RcFile\(\)) show
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +392 -327 moveto
  +96 0 rlineto
  +0 -67 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +392 -327 moveto
  +96 0 rlineto
  +0 -67 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +392 -327 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +392 -327 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +421 -340 moveto
  +(FuncFile) show
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +392 -347 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +392 -347 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +392 -367 moveto
  +96 0 rlineto
  +0 -28 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +392 -367 moveto
  +96 0 rlineto
  +0 -28 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +396 -380 moveto
  +(+FuncFile\(\)) show
  +396 -392 moveto
  +(+~FuncFile\(\)) show
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +336 -480 moveto
  +96 0 rlineto
  +0 -115 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +336 -480 moveto
  +96 0 rlineto
  +0 -115 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +336 -480 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +336 -480 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +367 -493 moveto
  +(SecFile) show
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +336 -500 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +336 -500 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +336 -520 moveto
  +96 0 rlineto
  +0 -76 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +336 -520 moveto
  +96 0 rlineto
  +0 -76 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +340 -533 moveto
  +(+SecFile\(\)) show
  +340 -545 moveto
  +(+getConfig\(\)) show
  +340 -557 moveto
  +(+getDefault\(\)) show
  +340 -569 moveto
  +(+getError\(\)) show
  +340 -581 moveto
  +(+getCommon\(\)) show
  +340 -593 moveto
  +(+~SecFile\(\)) show
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +96 -720 moveto
  +96 0 rlineto
  +0 -67 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +96 -720 moveto
  +96 0 rlineto
  +0 -67 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +96 -720 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +96 -720 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +112 -733 moveto
  +(ConfigSection) show
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +96 -740 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +96 -740 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +96 -760 moveto
  +96 0 rlineto
  +0 -28 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +96 -760 moveto
  +96 0 rlineto
  +0 -28 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +100 -773 moveto
  +(+ConfigSection\(\)) show
  +100 -785 moveto
  +(+~ConfigSection\(\)) show
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +216 -720 moveto
  +96 0 rlineto
  +0 -67 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +216 -720 moveto
  +96 0 rlineto
  +0 -67 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +216 -720 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +216 -720 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +230 -733 moveto
  +(DefaultSection) show
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +216 -740 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +216 -740 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +220 -753 moveto
  +(-eLang : enum = 0) show
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +216 -760 moveto
  +96 0 rlineto
  +0 -28 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +216 -760 moveto
  +96 0 rlineto
  +0 -28 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +220 -773 moveto
  +(+DefaultSection\(\)) show
  +220 -785 moveto
  +(+~DefaultSection\(\)) show
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +336 -720 moveto
  +96 0 rlineto
  +0 -67 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +336 -720 moveto
  +96 0 rlineto
  +0 -67 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +336 -720 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +336 -720 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +356 -733 moveto
  +(ErrorSection) show
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +336 -740 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +336 -740 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +340 -753 moveto
  +(-eLang : enum = 0) show
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +336 -760 moveto
  +96 0 rlineto
  +0 -28 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +336 -760 moveto
  +96 0 rlineto
  +0 -28 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +340 -773 moveto
  +(+ErrorSection\(\)) show
  +340 -785 moveto
  +(+~ErrorSection\(\)) show
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +456 -720 moveto
  +101 0 rlineto
  +0 -67 rlineto
  +-101 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +456 -720 moveto
  +101 0 rlineto
  +0 -67 rlineto
  +-101 0 rlineto
  +closepath
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +456 -720 moveto
  +101 0 rlineto
  +0 -20 rlineto
  +-101 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +456 -720 moveto
  +101 0 rlineto
  +0 -20 rlineto
  +-101 0 rlineto
  +closepath
  +stroke
  +469 -733 moveto
  +(CommonSection) show
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +456 -740 moveto
  +101 0 rlineto
  +0 -20 rlineto
  +-101 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +456 -740 moveto
  +101 0 rlineto
  +0 -20 rlineto
  +-101 0 rlineto
  +closepath
  +stroke
  +460 -753 moveto
  +(-eLang : enum = 0) show
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +456 -760 moveto
  +101 0 rlineto
  +0 -28 rlineto
  +-101 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +456 -760 moveto
  +101 0 rlineto
  +0 -28 rlineto
  +-101 0 rlineto
  +closepath
  +stroke
  +460 -773 moveto
  +(+CommonSection\(\)) show
  +460 -785 moveto
  +(+~CommonSection\(\)) show
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +584 -721 moveto
  +100 0 rlineto
  +0 -75 rlineto
  +-100 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +584 -721 moveto
  +100 0 rlineto
  +0 -75 rlineto
  +-100 0 rlineto
  +closepath
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +584 -721 moveto
  +100 0 rlineto
  +0 -20 rlineto
  +-100 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +584 -721 moveto
  +100 0 rlineto
  +0 -20 rlineto
  +-100 0 rlineto
  +closepath
  +stroke
  +606 -734 moveto
  +(UserSection) show
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +584 -741 moveto
  +100 0 rlineto
  +0 -28 rlineto
  +-100 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +584 -741 moveto
  +100 0 rlineto
  +0 -28 rlineto
  +-100 0 rlineto
  +closepath
  +stroke
  +588 -754 moveto
  +(-eLang : enum = 0) show
  +588 -766 moveto
  +(-*szName : char) show
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +584 -769 moveto
  +100 0 rlineto
  +0 -28 rlineto
  +-100 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +584 -769 moveto
  +100 0 rlineto
  +0 -28 rlineto
  +-100 0 rlineto
  +closepath
  +stroke
  +588 -782 moveto
  +(+UserSection\(\)) show
  +588 -794 moveto
  +(+~UserSection\(\)) show
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +336 -912 moveto
  +102 0 rlineto
  +0 -67 rlineto
  +-102 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +336 -912 moveto
  +102 0 rlineto
  +0 -67 rlineto
  +-102 0 rlineto
  +closepath
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +336 -912 moveto
  +102 0 rlineto
  +0 -20 rlineto
  +-102 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +336 -912 moveto
  +102 0 rlineto
  +0 -20 rlineto
  +-102 0 rlineto
  +closepath
  +stroke
  +isolatin1encoding /_dialog-Oblique /dialog-Oblique RE
  +/_dialog-Oblique findfont
  +9 scalefont setfont
  +370 -925 moveto
  +(Section) show
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +336 -932 moveto
  +102 0 rlineto
  +0 -20 rlineto
  +-102 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +336 -932 moveto
  +102 0 rlineto
  +0 -20 rlineto
  +-102 0 rlineto
  +closepath
  +stroke
  +isolatin1encoding /_Helvetica /Helvetica RE
  +/_Helvetica findfont
  +9 scalefont setfont
  +340 -945 moveto
  +(-*szCode : char) show
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +336 -952 moveto
  +102 0 rlineto
  +0 -28 rlineto
  +-102 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +336 -952 moveto
  +102 0 rlineto
  +0 -28 rlineto
  +-102 0 rlineto
  +closepath
  +stroke
  +340 -965 moveto
  +(+Load\(*szData:char\)) show
  +340 -977 moveto
  +(-Parse\(\)) show
  +0.78431374 0.78431374 0.78431374 setrgbcolor
  +newpath
  +120 -32 moveto
  +96 0 rlineto
  +0 -59 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +120 -32 moveto
  +96 0 rlineto
  +0 -59 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +0.78431374 0.78431374 0.78431374 setrgbcolor
  +newpath
  +120 -32 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +120 -32 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +145 -45 moveto
  +(Translator) show
  +0.78431374 0.78431374 0.78431374 setrgbcolor
  +newpath
  +120 -52 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +120 -52 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +0.78431374 0.78431374 0.78431374 setrgbcolor
  +newpath
  +120 -72 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +120 -72 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +0.78431374 0.78431374 0.78431374 setrgbcolor
  +newpath
  +176 -168 moveto
  +96 0 rlineto
  +0 -59 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +176 -168 moveto
  +96 0 rlineto
  +0 -59 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +0.78431374 0.78431374 0.78431374 setrgbcolor
  +newpath
  +176 -168 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +176 -168 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +198 -181 moveto
  +(SyntaxTree) show
  +0.78431374 0.78431374 0.78431374 setrgbcolor
  +newpath
  +176 -188 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +176 -188 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +0.78431374 0.78431374 0.78431374 setrgbcolor
  +newpath
  +176 -208 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +176 -208 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +0.78431374 0.78431374 0.78431374 setrgbcolor
  +newpath
  +56 -168 moveto
  +96 0 rlineto
  +0 -59 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +56 -168 moveto
  +96 0 rlineto
  +0 -59 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +0.78431374 0.78431374 0.78431374 setrgbcolor
  +newpath
  +56 -168 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +56 -168 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +74 -181 moveto
  +(SymbolTable) show
  +0.78431374 0.78431374 0.78431374 setrgbcolor
  +newpath
  +56 -188 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +56 -188 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +0.78431374 0.78431374 0.78431374 setrgbcolor
  +newpath
  +56 -208 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +56 -208 moveto
  +96 0 rlineto
  +0 -20 rlineto
  +-96 0 rlineto
  +closepath
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +488 -536 moveto
  +89 0 rlineto
  +0 -59 rlineto
  +-89 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +488 -536 moveto
  +89 0 rlineto
  +0 -59 rlineto
  +-89 0 rlineto
  +closepath
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +488 -536 moveto
  +89 0 rlineto
  +0 -20 rlineto
  +-89 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +488 -536 moveto
  +89 0 rlineto
  +0 -20 rlineto
  +-89 0 rlineto
  +closepath
  +stroke
  +isolatin1encoding /_dialog-Oblique /dialog-Oblique RE
  +/_dialog-Oblique findfont
  +9 scalefont setfont
  +525 -549 moveto
  +(File) show
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +488 -556 moveto
  +89 0 rlineto
  +0 -20 rlineto
  +-89 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +488 -556 moveto
  +89 0 rlineto
  +0 -20 rlineto
  +-89 0 rlineto
  +closepath
  +stroke
  +isolatin1encoding /_Helvetica /Helvetica RE
  +/_Helvetica findfont
  +9 scalefont setfont
  +492 -569 moveto
  +(-*szName : char) show
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +488 -576 moveto
  +89 0 rlineto
  +0 -20 rlineto
  +-89 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +488 -576 moveto
  +89 0 rlineto
  +0 -20 rlineto
  +-89 0 rlineto
  +closepath
  +stroke
  +492 -589 moveto
  +(+getName\(\)) show
  +1.0 1.0 0.8 setrgbcolor
  +newpath
  +464 -136 moveto
  +545 -136 lineto
  +555 -146 lineto
  +555 -171 lineto
  +464 -171 lineto
  +464 -136 lineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +464 -136 moveto
  +545 -136 lineto
  +555 -146 lineto
  +555 -171 lineto
  +464 -171 lineto
  +464 -136 lineto
  +stroke
  +1.0 1.0 0.8 setrgbcolor
  +newpath
  +545 -136 moveto
  +555 -146 lineto
  +545 -146 lineto
  +545 -136 lineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +545 -136 moveto
  +555 -146 lineto
  +545 -146 lineto
  +545 -136 lineto
  +stroke
  +467 -151 moveto
  +(Non-persistent) show
  +467 -163 moveto
  +(Non-serializable.) show
  +1.0 1.0 0.8 setrgbcolor
  +newpath
  +352 -136 moveto
  +420 -136 lineto
  +430 -146 lineto
  +430 -191 lineto
  +352 -191 lineto
  +352 -136 lineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +352 -136 moveto
  +420 -136 lineto
  +430 -146 lineto
  +430 -191 lineto
  +352 -191 lineto
  +352 -136 lineto
  +stroke
  +1.0 1.0 0.8 setrgbcolor
  +newpath
  +420 -136 moveto
  +430 -146 lineto
  +420 -146 lineto
  +420 -136 lineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +420 -136 moveto
  +430 -146 lineto
  +420 -146 lineto
  +420 -136 lineto
  +stroke
  +355 -151 moveto
  +(Processes) show
  +355 -163 moveto
  +(rcfiles until) show
  +355 -175 moveto
  +(none left in) show
  +355 -187 moveto
  +(configuration.) show
  +1.0 1.0 0.8 setrgbcolor
  +newpath
  +861 -33 moveto
  +932 -33 lineto
  +942 -43 lineto
  +942 -82 lineto
  +861 -82 lineto
  +861 -33 lineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +861 -33 moveto
  +932 -33 lineto
  +942 -43 lineto
  +942 -82 lineto
  +861 -82 lineto
  +861 -33 lineto
  +stroke
  +1.0 1.0 0.8 setrgbcolor
  +newpath
  +932 -33 moveto
  +942 -43 lineto
  +932 -43 lineto
  +932 -33 lineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +932 -33 moveto
  +942 -43 lineto
  +932 -43 lineto
  +932 -33 lineto
  +stroke
  +864 -48 moveto
  +(Uses OSSP l2) show
  +864 -60 moveto
  +(library for all) show
  +864 -72 moveto
  +(our logging.) show
  +1.0 1.0 0.8 setrgbcolor
  +newpath
  +8 -34 moveto
  +77 -34 lineto
  +87 -44 lineto
  +87 -101 lineto
  +8 -101 lineto
  +8 -34 lineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +8 -34 moveto
  +77 -34 lineto
  +87 -44 lineto
  +87 -101 lineto
  +8 -101 lineto
  +8 -34 lineto
  +stroke
  +1.0 1.0 0.8 setrgbcolor
  +newpath
  +77 -34 moveto
  +87 -44 lineto
  +77 -44 lineto
  +77 -34 lineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +77 -34 moveto
  +87 -44 lineto
  +77 -44 lineto
  +77 -34 lineto
  +stroke
  +11 -49 moveto
  +(Not to be) show
  +11 -61 moveto
  +(implemented) show
  +11 -73 moveto
  +(until a real) show
  +11 -85 moveto
  +(need is) show
  +11 -97 moveto
  +(verified.) show
  +1.0 1.0 0.8 setrgbcolor
  +newpath
  +200 -480 moveto
  +294 -480 lineto
  +304 -490 lineto
  +304 -547 lineto
  +200 -547 lineto
  +200 -480 lineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +200 -480 moveto
  +294 -480 lineto
  +304 -490 lineto
  +304 -547 lineto
  +200 -547 lineto
  +200 -480 lineto
  +stroke
  +1.0 1.0 0.8 setrgbcolor
  +newpath
  +294 -480 moveto
  +304 -490 lineto
  +294 -490 lineto
  +294 -480 lineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +294 -480 moveto
  +304 -490 lineto
  +294 -490 lineto
  +294 -480 lineto
  +stroke
  +203 -495 moveto
  +(A Process instance) show
  +203 -507 moveto
  +(can use more than) show
  +203 -519 moveto
  +(one RCFile, but) show
  +203 -531 moveto
  +(contains only one) show
  +203 -543 moveto
  +(at a time.) show
  +1.0 1.0 0.8 setrgbcolor
  +newpath
  +713 -721 moveto
  +816 -721 lineto
  +826 -731 lineto
  +826 -800 lineto
  +713 -800 lineto
  +713 -721 lineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +713 -721 moveto
  +816 -721 lineto
  +826 -731 lineto
  +826 -800 lineto
  +713 -800 lineto
  +713 -721 lineto
  +stroke
  +1.0 1.0 0.8 setrgbcolor
  +newpath
  +816 -721 moveto
  +826 -731 lineto
  +816 -731 lineto
  +816 -721 lineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +816 -721 moveto
  +826 -731 lineto
  +816 -731 lineto
  +816 -721 lineto
  +stroke
  +716 -736 moveto
  +(A SecFile instance) show
  +716 -748 moveto
  +(has at most one) show
  +716 -760 moveto
  +(UserSection even) show
  +716 -772 moveto
  +(though the rcfile) show
  +716 -784 moveto
  +(being parsed can) show
  +716 -796 moveto
  +(have more than one.) show
  +0.78431374 1.0 0.78431374 setrgbcolor
  +newpath
  +464 -1104 moveto
  +89 0 rlineto
  +0 -17 rlineto
  +-89 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +464 -1104 moveto
  +89 0 rlineto
  +0 -17 rlineto
  +-89 0 rlineto
  +closepath
  +stroke
  +468 -1117 moveto
  +(RC) show
  +0.78431374 1.0 0.78431374 setrgbcolor
  +newpath
  +464 -1121 moveto
  +139 0 rlineto
  +0 -82 rlineto
  +-139 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +464 -1121 moveto
  +139 0 rlineto
  +0 -82 rlineto
  +-139 0 rlineto
  +closepath
  +stroke
  +isolatin1encoding /_TimesRoman /TimesRoman RE
  +/_TimesRoman findfont
  +10 scalefont setfont
  +0.0 0.0 1.0 setrgbcolor
  +0.78431374 1.0 0.78431374 setrgbcolor
  +newpath
  +824 -1104 moveto
  +89 0 rlineto
  +0 -17 rlineto
  +-89 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +824 -1104 moveto
  +89 0 rlineto
  +0 -17 rlineto
  +-89 0 rlineto
  +closepath
  +stroke
  +isolatin1encoding /_Helvetica /Helvetica RE
  +/_Helvetica findfont
  +9 scalefont setfont
  +828 -1117 moveto
  +(Configuration) show
  +0.78431374 1.0 0.78431374 setrgbcolor
  +newpath
  +824 -1121 moveto
  +139 0 rlineto
  +0 -82 rlineto
  +-139 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +824 -1121 moveto
  +139 0 rlineto
  +0 -82 rlineto
  +-139 0 rlineto
  +closepath
  +stroke
  +isolatin1encoding /_TimesRoman /TimesRoman RE
  +/_TimesRoman findfont
  +10 scalefont setfont
  +0.0 0.0 1.0 setrgbcolor
  +0.78431374 1.0 0.78431374 setrgbcolor
  +newpath
  +104 -1104 moveto
  +89 0 rlineto
  +0 -17 rlineto
  +-89 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +104 -1104 moveto
  +89 0 rlineto
  +0 -17 rlineto
  +-89 0 rlineto
  +closepath
  +stroke
  +isolatin1encoding /_Helvetica /Helvetica RE
  +/_Helvetica findfont
  +9 scalefont setfont
  +108 -1117 moveto
  +(Processor) show
  +0.78431374 1.0 0.78431374 setrgbcolor
  +newpath
  +104 -1121 moveto
  +139 0 rlineto
  +0 -82 rlineto
  +-139 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +104 -1121 moveto
  +139 0 rlineto
  +0 -82 rlineto
  +-139 0 rlineto
  +closepath
  +stroke
  +isolatin1encoding /_TimesRoman /TimesRoman RE
  +/_TimesRoman findfont
  +10 scalefont setfont
  +0.0 0.0 1.0 setrgbcolor
  +0.78431374 1.0 0.78431374 setrgbcolor
  +newpath
  +288 -1208 moveto
  +89 0 rlineto
  +0 -17 rlineto
  +-89 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +288 -1208 moveto
  +89 0 rlineto
  +0 -17 rlineto
  +-89 0 rlineto
  +closepath
  +stroke
  +isolatin1encoding /_Helvetica /Helvetica RE
  +/_Helvetica findfont
  +9 scalefont setfont
  +292 -1221 moveto
  +(SecFile) show
  +0.78431374 1.0 0.78431374 setrgbcolor
  +newpath
  +288 -1225 moveto
  +139 0 rlineto
  +0 -82 rlineto
  +-139 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +288 -1225 moveto
  +139 0 rlineto
  +0 -82 rlineto
  +-139 0 rlineto
  +closepath
  +stroke
  +isolatin1encoding /_TimesRoman /TimesRoman RE
  +/_TimesRoman findfont
  +10 scalefont setfont
  +0.0 0.0 1.0 setrgbcolor
  +0.78431374 1.0 0.78431374 setrgbcolor
  +newpath
  +648 -1208 moveto
  +89 0 rlineto
  +0 -17 rlineto
  +-89 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +648 -1208 moveto
  +89 0 rlineto
  +0 -17 rlineto
  +-89 0 rlineto
  +closepath
  +stroke
  +isolatin1encoding /_Helvetica /Helvetica RE
  +/_Helvetica findfont
  +9 scalefont setfont
  +652 -1221 moveto
  +(Logger) show
  +0.78431374 1.0 0.78431374 setrgbcolor
  +newpath
  +648 -1225 moveto
  +139 0 rlineto
  +0 -82 rlineto
  +-139 0 rlineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +648 -1225 moveto
  +139 0 rlineto
  +0 -82 rlineto
  +-139 0 rlineto
  +closepath
  +stroke
  +isolatin1encoding /_TimesRoman /TimesRoman RE
  +/_TimesRoman findfont
  +10 scalefont setfont
  +0.0 0.0 1.0 setrgbcolor
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +713 -760 moveto
  +708 -760 lineto
  +stroke
  +newpath
  +703 -760 moveto
  +698 -760 lineto
  +stroke
  +newpath
  +693 -760 moveto
  +688 -760 lineto
  +stroke
  +newpath
  +288 -480 moveto
  +288 -475 lineto
  +stroke
  +newpath
  +288 -470 moveto
  +288 -465 lineto
  +stroke
  +newpath
  +288 -460 moveto
  +288 -455 lineto
  +stroke
  +newpath
  +288 -450 moveto
  +288 -445 lineto
  +stroke
  +newpath
  +288 -440 moveto
  +288 -435 lineto
  +stroke
  +newpath
  +288 -430 moveto
  +288 -425 lineto
  +stroke
  +newpath
  +288 -420 moveto
  +288 -415 lineto
  +stroke
  +newpath
  +288 -410 moveto
  +288 -405 lineto
  +stroke
  +newpath
  +288 -400 moveto
  +288 -395 lineto
  +stroke
  +newpath
  +88 -64 moveto
  +93 -64 lineto
  +stroke
  +newpath
  +98 -64 moveto
  +103 -64 lineto
  +stroke
  +newpath
  +108 -64 moveto
  +113 -64 lineto
  +stroke
  +newpath
  +118 -64 moveto
  +120 -64 lineto
  +stroke
  +newpath
  +861 -64 moveto
  +856 -64 lineto
  +stroke
  +newpath
  +851 -64 moveto
  +846 -64 lineto
  +stroke
  +newpath
  +841 -64 moveto
  +836 -64 lineto
  +stroke
  +newpath
  +384 -136 moveto
  +383 -132 lineto
  +stroke
  +newpath
  +381 -127 moveto
  +379 -123 lineto
  +stroke
  +newpath
  +377 -118 moveto
  +375 -113 lineto
  +stroke
  +newpath
  +373 -109 moveto
  +371 -104 lineto
  +stroke
  +newpath
  +520 -136 moveto
  +522 -132 lineto
  +stroke
  +newpath
  +524 -127 moveto
  +526 -123 lineto
  +stroke
  +newpath
  +528 -118 moveto
  +530 -113 lineto
  +stroke
  +newpath
  +532 -109 moveto
  +534 -104 lineto
  +stroke
  +newpath
  +752 -421 moveto
  +752 -340 lineto
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +752 -341 moveto
  +757 -351 lineto
  +752 -361 lineto
  +747 -351 lineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +752 -341 moveto
  +757 -351 lineto
  +752 -361 lineto
  +747 -351 lineto
  +closepath
  +stroke
  +isolatin1encoding /_Helvetica /Helvetica RE
  +/_Helvetica findfont
  +9 scalefont setfont
  +728 -409 moveto
  +(0..1) show
  +newpath
  +624 -423 moveto
  +624 -392 lineto
  +752 -392 lineto
  +752 -340 lineto
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +752 -341 moveto
  +757 -351 lineto
  +752 -361 lineto
  +747 -351 lineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +752 -341 moveto
  +757 -351 lineto
  +752 -361 lineto
  +747 -351 lineto
  +closepath
  +stroke
  +596 -409 moveto
  +(0..*) show
  +newpath
  +960 -421 moveto
  +960 -392 lineto
  +752 -392 lineto
  +752 -340 lineto
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +752 -341 moveto
  +757 -351 lineto
  +752 -361 lineto
  +747 -351 lineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +752 -341 moveto
  +757 -351 lineto
  +752 -361 lineto
  +747 -351 lineto
  +closepath
  +stroke
  +926 -412 moveto
  +(0..1) show
  +newpath
  +584 -100 moveto
  +584 -264 lineto
  +680 -264 lineto
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +584 -100 moveto
  +589 -110 lineto
  +584 -120 lineto
  +579 -110 lineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +584 -100 moveto
  +589 -110 lineto
  +584 -120 lineto
  +579 -110 lineto
  +closepath
  +stroke
  +newpath
  +736 -64 moveto
  +633 -64 lineto
  +stroke
  +newpath
  +369 -60 moveto
  +536 -60 lineto
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +535 -60 moveto
  +525 -65 lineto
  +515 -60 lineto
  +525 -55 lineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +535 -60 moveto
  +525 -65 lineto
  +515 -60 lineto
  +525 -55 lineto
  +closepath
  +stroke
  +373 -50 moveto
  +(0..1) show
  +newpath
  +320 -395 moveto
  +320 -432 lineto
  +384 -432 lineto
  +384 -480 lineto
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +384 -479 moveto
  +377 -467 lineto
  +391 -467 lineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +384 -479 moveto
  +377 -467 lineto
  +391 -467 lineto
  +closepath
  +stroke
  +newpath
  +440 -395 moveto
  +440 -432 lineto
  +384 -432 lineto
  +384 -480 lineto
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +384 -479 moveto
  +377 -467 lineto
  +391 -467 lineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +384 -479 moveto
  +377 -467 lineto
  +391 -467 lineto
  +closepath
  +stroke
  +newpath
  +320 -327 moveto
  +320 -100 lineto
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +320 -101 moveto
  +325 -111 lineto
  +320 -121 lineto
  +315 -111 lineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +320 -101 moveto
  +325 -111 lineto
  +320 -121 lineto
  +315 -111 lineto
  +closepath
  +stroke
  +newpath
  +200 -328 moveto
  +200 -296 lineto
  +320 -296 lineto
  +320 -100 lineto
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +320 -101 moveto
  +325 -111 lineto
  +320 -121 lineto
  +315 -111 lineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +320 -101 moveto
  +325 -111 lineto
  +320 -121 lineto
  +315 -111 lineto
  +closepath
  +stroke
  +newpath
  +440 -327 moveto
  +440 -296 lineto
  +320 -296 lineto
  +320 -100 lineto
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +320 -101 moveto
  +325 -111 lineto
  +320 -121 lineto
  +315 -111 lineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +320 -101 moveto
  +325 -111 lineto
  +320 -121 lineto
  +315 -111 lineto
  +closepath
  +stroke
  +414 -320 moveto
  +(0..1) show
  +newpath
  +384 -788 moveto
  +384 -912 lineto
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +384 -911 moveto
  +377 -899 lineto
  +391 -899 lineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +384 -911 moveto
  +377 -899 lineto
  +391 -899 lineto
  +closepath
  +stroke
  +newpath
  +264 -788 moveto
  +264 -872 lineto
  +384 -872 lineto
  +384 -912 lineto
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +384 -911 moveto
  +377 -899 lineto
  +391 -899 lineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +384 -911 moveto
  +377 -899 lineto
  +391 -899 lineto
  +closepath
  +stroke
  +newpath
  +144 -788 moveto
  +144 -872 lineto
  +384 -872 lineto
  +384 -912 lineto
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +384 -911 moveto
  +377 -899 lineto
  +391 -899 lineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +384 -911 moveto
  +377 -899 lineto
  +391 -899 lineto
  +closepath
  +stroke
  +newpath
  +504 -788 moveto
  +504 -872 lineto
  +384 -872 lineto
  +384 -912 lineto
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +384 -911 moveto
  +377 -899 lineto
  +391 -899 lineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +384 -911 moveto
  +377 -899 lineto
  +391 -899 lineto
  +closepath
  +stroke
  +newpath
  +632 -797 moveto
  +632 -872 lineto
  +384 -872 lineto
  +384 -912 lineto
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +384 -911 moveto
  +377 -899 lineto
  +391 -899 lineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +384 -911 moveto
  +377 -899 lineto
  +391 -899 lineto
  +closepath
  +stroke
  +newpath
  +504 -720 moveto
  +504 -680 lineto
  +384 -680 lineto
  +384 -596 lineto
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +384 -597 moveto
  +389 -607 lineto
  +384 -617 lineto
  +379 -607 lineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +384 -597 moveto
  +389 -607 lineto
  +384 -617 lineto
  +379 -607 lineto
  +closepath
  +stroke
  +479 -709 moveto
  +(0..1) show
  +newpath
  +632 -721 moveto
  +632 -680 lineto
  +384 -680 lineto
  +384 -596 lineto
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +384 -597 moveto
  +389 -607 lineto
  +384 -617 lineto
  +379 -607 lineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +384 -597 moveto
  +389 -607 lineto
  +384 -617 lineto
  +379 -607 lineto
  +closepath
  +stroke
  +606 -710 moveto
  +(0..1) show
  +newpath
  +224 -168 moveto
  +224 -136 lineto
  +168 -136 lineto
  +168 -92 lineto
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +168 -93 moveto
  +173 -103 lineto
  +168 -113 lineto
  +163 -103 lineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +168 -93 moveto
  +173 -103 lineto
  +168 -113 lineto
  +163 -103 lineto
  +closepath
  +stroke
  +newpath
  +217 -56 moveto
  +272 -56 lineto
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +271 -56 moveto
  +261 -61 lineto
  +251 -56 lineto
  +261 -51 lineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +271 -56 moveto
  +261 -61 lineto
  +251 -56 lineto
  +261 -51 lineto
  +closepath
  +stroke
  +newpath
  +104 -168 moveto
  +104 -136 lineto
  +168 -136 lineto
  +168 -92 lineto
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +168 -93 moveto
  +173 -103 lineto
  +168 -113 lineto
  +163 -103 lineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +168 -93 moveto
  +173 -103 lineto
  +168 -113 lineto
  +163 -103 lineto
  +closepath
  +stroke
  +newpath
  +760 -576 moveto
  +760 -489 lineto
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +760 -490 moveto
  +765 -500 lineto
  +760 -510 lineto
  +755 -500 lineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +760 -490 moveto
  +765 -500 lineto
  +760 -510 lineto
  +755 -500 lineto
  +closepath
  +stroke
  +newpath
  +760 -576 moveto
  +760 -536 lineto
  +624 -536 lineto
  +624 -491 lineto
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +624 -492 moveto
  +629 -502 lineto
  +624 -512 lineto
  +619 -502 lineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +624 -492 moveto
  +629 -502 lineto
  +624 -512 lineto
  +619 -502 lineto
  +closepath
  +stroke
  +newpath
  +760 -576 moveto
  +760 -536 lineto
  +960 -536 lineto
  +960 -489 lineto
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +960 -490 moveto
  +965 -500 lineto
  +960 -510 lineto
  +955 -500 lineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +960 -490 moveto
  +965 -500 lineto
  +960 -510 lineto
  +955 -500 lineto
  +closepath
  +stroke
  +newpath
  +384 -720 moveto
  +384 -596 lineto
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +384 -597 moveto
  +389 -607 lineto
  +384 -617 lineto
  +379 -607 lineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +384 -597 moveto
  +389 -607 lineto
  +384 -617 lineto
  +379 -607 lineto
  +closepath
  +stroke
  +360 -710 moveto
  +(0..1) show
  +newpath
  +264 -720 moveto
  +264 -680 lineto
  +384 -680 lineto
  +384 -596 lineto
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +384 -597 moveto
  +389 -607 lineto
  +384 -617 lineto
  +379 -607 lineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +384 -597 moveto
  +389 -607 lineto
  +384 -617 lineto
  +379 -607 lineto
  +closepath
  +stroke
  +240 -710 moveto
  +(0..1) show
  +newpath
  +144 -720 moveto
  +144 -680 lineto
  +384 -680 lineto
  +384 -596 lineto
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +384 -597 moveto
  +389 -607 lineto
  +384 -617 lineto
  +379 -607 lineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +384 -597 moveto
  +389 -607 lineto
  +384 -617 lineto
  +379 -607 lineto
  +closepath
  +stroke
  +120 -710 moveto
  +(0..1) show
  +newpath
  +433 -576 moveto
  +488 -576 lineto
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +487 -576 moveto
  +475 -583 lineto
  +475 -569 lineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +487 -576 moveto
  +475 -583 lineto
  +475 -569 lineto
  +closepath
  +stroke
  +newpath
  +536 -491 moveto
  +536 -536 lineto
  +stroke
  +1.0 1.0 1.0 setrgbcolor
  +newpath
  +536 -535 moveto
  +529 -523 lineto
  +543 -523 lineto
  +closepath
  +eofill
  +0.0 0.0 0.0 setrgbcolor
  +newpath
  +536 -535 moveto
  +529 -523 lineto
  +543 -523 lineto
  +closepath
  +stroke
  +newpath
  +603 -1160 moveto
  +608 -1160 lineto
  +stroke
  +newpath
  +613 -1160 moveto
  +618 -1160 lineto
  +stroke
  +newpath
  +623 -1160 moveto
  +628 -1160 lineto
  +stroke
  +newpath
  +633 -1160 moveto
  +638 -1160 lineto
  +stroke
  +newpath
  +643 -1160 moveto
  +648 -1160 lineto
  +stroke
  +newpath
  +653 -1160 moveto
  +658 -1160 lineto
  +stroke
  +newpath
  +663 -1160 moveto
  +668 -1160 lineto
  +stroke
  +newpath
  +673 -1160 moveto
  +678 -1160 lineto
  +stroke
  +newpath
  +683 -1160 moveto
  +688 -1160 lineto
  +stroke
  +newpath
  +693 -1160 moveto
  +698 -1160 lineto
  +stroke
  +newpath
  +703 -1160 moveto
  +708 -1160 lineto
  +stroke
  +newpath
  +713 -1160 moveto
  +718 -1160 lineto
  +stroke
  +newpath
  +723 -1160 moveto
  +728 -1160 lineto
  +stroke
  +newpath
  +733 -1160 moveto
  +738 -1160 lineto
  +stroke
  +newpath
  +743 -1160 moveto
  +748 -1160 lineto
  +stroke
  +newpath
  +753 -1160 moveto
  +758 -1160 lineto
  +stroke
  +newpath
  +763 -1160 moveto
  +768 -1160 lineto
  +stroke
  +newpath
  +773 -1160 moveto
  +778 -1160 lineto
  +stroke
  +newpath
  +783 -1160 moveto
  +788 -1160 lineto
  +stroke
  +newpath
  +793 -1160 moveto
  +798 -1160 lineto
  +stroke
  +newpath
  +803 -1160 moveto
  +808 -1160 lineto
  +stroke
  +newpath
  +813 -1160 moveto
  +818 -1160 lineto
  +stroke
  +newpath
  +823 -1160 moveto
  +825 -1160 lineto
  +stroke
  +newpath
  +812 -1167 moveto
  +824 -1160 lineto
  +stroke
  +newpath
  +812 -1153 moveto
  +824 -1160 lineto
  +stroke
  +newpath
  +465 -1160 moveto
  +460 -1160 lineto
  +stroke
  +newpath
  +455 -1160 moveto
  +450 -1160 lineto
  +stroke
  +newpath
  +445 -1160 moveto
  +440 -1160 lineto
  +stroke
  +newpath
  +435 -1160 moveto
  +430 -1160 lineto
  +stroke
  +newpath
  +425 -1160 moveto
  +420 -1160 lineto
  +stroke
  +newpath
  +415 -1160 moveto
  +410 -1160 lineto
  +stroke
  +newpath
  +405 -1160 moveto
  +400 -1160 lineto
  +stroke
  +newpath
  +395 -1160 moveto
  +390 -1160 lineto
  +stroke
  +newpath
  +385 -1160 moveto
  +380 -1160 lineto
  +stroke
  +newpath
  +375 -1160 moveto
  +370 -1160 lineto
  +stroke
  +newpath
  +365 -1160 moveto
  +360 -1160 lineto
  +stroke
  +newpath
  +355 -1160 moveto
  +350 -1160 lineto
  +stroke
  +newpath
  +345 -1160 moveto
  +340 -1160 lineto
  +stroke
  +newpath
  +335 -1160 moveto
  +330 -1160 lineto
  +stroke
  +newpath
  +325 -1160 moveto
  +320 -1160 lineto
  +stroke
  +newpath
  +315 -1160 moveto
  +310 -1160 lineto
  +stroke
  +newpath
  +305 -1160 moveto
  +300 -1160 lineto
  +stroke
  +newpath
  +295 -1160 moveto
  +290 -1160 lineto
  +stroke
  +newpath
  +285 -1160 moveto
  +280 -1160 lineto
  +stroke
  +newpath
  +275 -1160 moveto
  +270 -1160 lineto
  +stroke
  +newpath
  +265 -1160 moveto
  +260 -1160 lineto
  +stroke
  +newpath
  +255 -1160 moveto
  +250 -1160 lineto
  +stroke
  +newpath
  +245 -1160 moveto
  +243 -1160 lineto
  +stroke
  +newpath
  +256 -1153 moveto
  +244 -1160 lineto
  +stroke
  +newpath
  +256 -1167 moveto
  +244 -1160 lineto
  +stroke
  +newpath
  +536 -1203 moveto
  +536 -1208 lineto
  +stroke
  +newpath
  +536 -1213 moveto
  +536 -1218 lineto
  +stroke
  +newpath
  +536 -1223 moveto
  +536 -1228 lineto
  +stroke
  +newpath
  +536 -1233 moveto
  +536 -1238 lineto
  +stroke
  +newpath
  +536 -1243 moveto
  +536 -1248 lineto
  +stroke
  +newpath
  +536 -1253 moveto
  +536 -1258 lineto
  +stroke
  +newpath
  +536 -1263 moveto
  +536 -1264 lineto
  +stroke
  +newpath
  +536 -1264 moveto
  +541 -1264 lineto
  +stroke
  +newpath
  +546 -1264 moveto
  +551 -1264 lineto
  +stroke
  +newpath
  +556 -1264 moveto
  +561 -1264 lineto
  +stroke
  +newpath
  +566 -1264 moveto
  +571 -1264 lineto
  +stroke
  +newpath
  +576 -1264 moveto
  +581 -1264 lineto
  +stroke
  +newpath
  +586 -1264 moveto
  +591 -1264 lineto
  +stroke
  +newpath
  +596 -1264 moveto
  +601 -1264 lineto
  +stroke
  +newpath
  +606 -1264 moveto
  +611 -1264 lineto
  +stroke
  +newpath
  +616 -1264 moveto
  +621 -1264 lineto
  +stroke
  +newpath
  +626 -1264 moveto
  +631 -1264 lineto
  +stroke
  +newpath
  +636 -1264 moveto
  +641 -1264 lineto
  +stroke
  +newpath
  +646 -1264 moveto
  +649 -1264 lineto
  +stroke
  +newpath
  +636 -1271 moveto
  +648 -1264 lineto
  +stroke
  +newpath
  +636 -1257 moveto
  +648 -1264 lineto
  +stroke
  +newpath
  +176 -1203 moveto
  +176 -1208 lineto
  +stroke
  +newpath
  +176 -1213 moveto
  +176 -1218 lineto
  +stroke
  +newpath
  +176 -1223 moveto
  +176 -1228 lineto
  +stroke
  +newpath
  +176 -1233 moveto
  +176 -1238 lineto
  +stroke
  +newpath
  +176 -1243 moveto
  +176 -1248 lineto
  +stroke
  +newpath
  +176 -1253 moveto
  +176 -1258 lineto
  +stroke
  +newpath
  +176 -1263 moveto
  +176 -1264 lineto
  +stroke
  +newpath
  +176 -1264 moveto
  +181 -1264 lineto
  +stroke
  +newpath
  +186 -1264 moveto
  +191 -1264 lineto
  +stroke
  +newpath
  +196 -1264 moveto
  +201 -1264 lineto
  +stroke
  +newpath
  +206 -1264 moveto
  +211 -1264 lineto
  +stroke
  +newpath
  +216 -1264 moveto
  +221 -1264 lineto
  +stroke
  +newpath
  +226 -1264 moveto
  +231 -1264 lineto
  +stroke
  +newpath
  +236 -1264 moveto
  +241 -1264 lineto
  +stroke
  +newpath
  +246 -1264 moveto
  +251 -1264 lineto
  +stroke
  +newpath
  +256 -1264 moveto
  +261 -1264 lineto
  +stroke
  +newpath
  +266 -1264 moveto
  +271 -1264 lineto
  +stroke
  +newpath
  +276 -1264 moveto
  +281 -1264 lineto
  +stroke
  +newpath
  +286 -1264 moveto
  +289 -1264 lineto
  +stroke
  +newpath
  +276 -1271 moveto
  +288 -1264 lineto
  +stroke
  +newpath
  +276 -1257 moveto
  +288 -1264 lineto
  +stroke
  +728 -409 moveto
  +(0..1) show
  +596 -409 moveto
  +(0..*) show
  +926 -412 moveto
  +(0..1) show
  +showpage
   %%Trailer
  -%%Pages: 1
  -%%EOF
  Index: ossp-pkg/rc/rc_design.xmi
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 rc_design.xmi
  --- ossp-pkg/rc/rc_design.xmi	7 Feb 2002 15:34:39 -0000	1.3
  +++ ossp-pkg/rc/rc_design.xmi	1 Mar 2002 22:48:23 -0000	1.4
  @@ -1,1999 +1,4118 @@
  -<?xml version="1.0" encoding="UTF-8"?>
  -<XMI xmi.version="1.0">
  -  <XMI.header>
  -    <XMI.documentation>
  -      <XMI.exporter>Novosoft UML Library</XMI.exporter>
  -      <XMI.exporterVersion>0.4.19</XMI.exporterVersion>
  -    </XMI.documentation>
  -    <XMI.metamodel xmi.name="UML" xmi.version="1.3"/>
  -  </XMI.header>
  -  <XMI.content>
  -    <Model_Management.Model xmi.id="xmi.1" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-8000">
  -      <Foundation.Core.ModelElement.name>OSSPRC</Foundation.Core.ModelElement.name>
  -      <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -      <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -      <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -      <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -      <Foundation.Core.Namespace.ownedElement>
  -        <Foundation.Core.Class xmi.id="xmi.2" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fff">
  -          <Foundation.Core.ModelElement.name>RC</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.3" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ffd">
  -          <Foundation.Core.ModelElement.name>Configuration</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Classifier.feature>
  -            <Foundation.Core.Attribute xmi.id="xmi.4" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fd6">
  -              <Foundation.Core.ModelElement.name>s_Instance</Foundation.Core.ModelElement.name>
  -              <Foundation.Core.ModelElement.visibility xmi.value="private"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.Feature.ownerScope xmi.value="classifier"/>
  -              <Foundation.Core.Attribute.initialValue>
  -                <Foundation.Data_Types.Expression xmi.id="xmi.5">
  -                  <Foundation.Data_Types.Expression.language>Java</Foundation.Data_Types.Expression.language>
  -                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  -                </Foundation.Data_Types.Expression>
  -              </Foundation.Core.Attribute.initialValue>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.3"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.StructuralFeature.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.3"/>
  -              </Foundation.Core.StructuralFeature.type>
  -            </Foundation.Core.Attribute>
  -            <Foundation.Core.Operation xmi.id="xmi.6" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fd5">
  -              <Foundation.Core.ModelElement.name>Configuration</Foundation.Core.ModelElement.name>
  -              <Foundation.Core.ModelElement.visibility xmi.value="protected"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.Feature.ownerScope xmi.value="classifier"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  -              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  -              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.3"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Operation.method>
  -                <Foundation.Core.Method xmi.idref="xmi.7"/>
  -              </Foundation.Core.Operation.method>
  -              <Foundation.Core.BehavioralFeature.parameter>
  -                <Foundation.Core.Parameter xmi.id="xmi.8" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fd4">
  -                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  -                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  -                  <Foundation.Core.Parameter.behavioralFeature>
  -                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.6"/>
  -                  </Foundation.Core.Parameter.behavioralFeature>
  -                  <Foundation.Core.Parameter.type>
  -                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  -                  </Foundation.Core.Parameter.type>
  -                </Foundation.Core.Parameter>
  -              </Foundation.Core.BehavioralFeature.parameter>
  -            </Foundation.Core.Operation>
  -            <Foundation.Core.Method xmi.id="xmi.7">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Method.body>
  -                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.10">
  -                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  -                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  -                </Foundation.Data_Types.ProcedureExpression>
  -              </Foundation.Core.Method.body>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.3"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Method.specification>
  -                <Foundation.Core.Operation xmi.idref="xmi.6"/>
  -              </Foundation.Core.Method.specification>
  -            </Foundation.Core.Method>
  -            <Foundation.Core.Operation xmi.id="xmi.11" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ffb">
  -              <Foundation.Core.ModelElement.name>getInstance</Foundation.Core.ModelElement.name>
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.Feature.ownerScope xmi.value="classifier"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  -              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  -              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.3"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Operation.method>
  -                <Foundation.Core.Method xmi.idref="xmi.12"/>
  -              </Foundation.Core.Operation.method>
  -              <Foundation.Core.BehavioralFeature.parameter>
  -                <Foundation.Core.Parameter xmi.id="xmi.13" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ffa">
  -                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  -                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  -                  <Foundation.Core.Parameter.behavioralFeature>
  -                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.11"/>
  -                  </Foundation.Core.Parameter.behavioralFeature>
  -                  <Foundation.Core.Parameter.type>
  -                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  -                  </Foundation.Core.Parameter.type>
  -                </Foundation.Core.Parameter>
  -              </Foundation.Core.BehavioralFeature.parameter>
  -            </Foundation.Core.Operation>
  -            <Foundation.Core.Method xmi.id="xmi.12">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Method.body>
  -                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.14">
  -                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  -                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  -                </Foundation.Data_Types.ProcedureExpression>
  -              </Foundation.Core.Method.body>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.3"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Method.specification>
  -                <Foundation.Core.Operation xmi.idref="xmi.11"/>
  -              </Foundation.Core.Method.specification>
  -            </Foundation.Core.Method>
  -          </Foundation.Core.Classifier.feature>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.15" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ffc">
  -          <Foundation.Core.ModelElement.name>FileOption</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Classifier.feature>
  -            <Foundation.Core.Operation xmi.id="xmi.16" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ff9">
  -              <Foundation.Core.ModelElement.name>Start</Foundation.Core.ModelElement.name>
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  -              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  -              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Operation.method>
  -                <Foundation.Core.Method xmi.idref="xmi.17"/>
  -              </Foundation.Core.Operation.method>
  -              <Foundation.Core.BehavioralFeature.parameter>
  -                <Foundation.Core.Parameter xmi.id="xmi.18" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ff8">
  -                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  -                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  -                  <Foundation.Core.Parameter.behavioralFeature>
  -                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.16"/>
  -                  </Foundation.Core.Parameter.behavioralFeature>
  -                  <Foundation.Core.Parameter.type>
  -                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  -                  </Foundation.Core.Parameter.type>
  -                </Foundation.Core.Parameter>
  -              </Foundation.Core.BehavioralFeature.parameter>
  -            </Foundation.Core.Operation>
  -            <Foundation.Core.Method xmi.id="xmi.17">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Method.body>
  -                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.19">
  -                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  -                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  -                </Foundation.Data_Types.ProcedureExpression>
  -              </Foundation.Core.Method.body>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Method.specification>
  -                <Foundation.Core.Operation xmi.idref="xmi.16"/>
  -              </Foundation.Core.Method.specification>
  -            </Foundation.Core.Method>
  -            <Foundation.Core.Operation xmi.id="xmi.20" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ff7">
  -              <Foundation.Core.ModelElement.name>Next</Foundation.Core.ModelElement.name>
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  -              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  -              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Operation.method>
  -                <Foundation.Core.Method xmi.idref="xmi.21"/>
  -              </Foundation.Core.Operation.method>
  -              <Foundation.Core.BehavioralFeature.parameter>
  -                <Foundation.Core.Parameter xmi.id="xmi.22" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ff6">
  -                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  -                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  -                  <Foundation.Core.Parameter.behavioralFeature>
  -                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.20"/>
  -                  </Foundation.Core.Parameter.behavioralFeature>
  -                  <Foundation.Core.Parameter.type>
  -                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  -                  </Foundation.Core.Parameter.type>
  -                </Foundation.Core.Parameter>
  -              </Foundation.Core.BehavioralFeature.parameter>
  -            </Foundation.Core.Operation>
  -            <Foundation.Core.Method xmi.id="xmi.21">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Method.body>
  -                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.23">
  -                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  -                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  -                </Foundation.Data_Types.ProcedureExpression>
  -              </Foundation.Core.Method.body>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Method.specification>
  -                <Foundation.Core.Operation xmi.idref="xmi.20"/>
  -              </Foundation.Core.Method.specification>
  -            </Foundation.Core.Method>
  -            <Foundation.Core.Operation xmi.id="xmi.24" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ff5">
  -              <Foundation.Core.ModelElement.name>IsEnd</Foundation.Core.ModelElement.name>
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  -              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  -              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Operation.method>
  -                <Foundation.Core.Method xmi.idref="xmi.25"/>
  -              </Foundation.Core.Operation.method>
  -              <Foundation.Core.BehavioralFeature.parameter>
  -                <Foundation.Core.Parameter xmi.id="xmi.26" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ff4">
  -                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  -                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  -                  <Foundation.Core.Parameter.behavioralFeature>
  -                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.24"/>
  -                  </Foundation.Core.Parameter.behavioralFeature>
  -                  <Foundation.Core.Parameter.type>
  -                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  -                  </Foundation.Core.Parameter.type>
  -                </Foundation.Core.Parameter>
  -              </Foundation.Core.BehavioralFeature.parameter>
  -            </Foundation.Core.Operation>
  -            <Foundation.Core.Method xmi.id="xmi.25">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Method.body>
  -                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.27">
  -                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  -                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  -                </Foundation.Data_Types.ProcedureExpression>
  -              </Foundation.Core.Method.body>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Method.specification>
  -                <Foundation.Core.Operation xmi.idref="xmi.24"/>
  -              </Foundation.Core.Method.specification>
  -            </Foundation.Core.Method>
  -            <Foundation.Core.Operation xmi.id="xmi.28" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ff3">
  -              <Foundation.Core.ModelElement.name>Current</Foundation.Core.ModelElement.name>
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  -              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  -              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Operation.method>
  -                <Foundation.Core.Method xmi.idref="xmi.29"/>
  -              </Foundation.Core.Operation.method>
  -              <Foundation.Core.BehavioralFeature.parameter>
  -                <Foundation.Core.Parameter xmi.id="xmi.30" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ff2">
  -                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  -                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  -                  <Foundation.Core.Parameter.behavioralFeature>
  -                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.28"/>
  -                  </Foundation.Core.Parameter.behavioralFeature>
  -                  <Foundation.Core.Parameter.type>
  -                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  -                  </Foundation.Core.Parameter.type>
  -                </Foundation.Core.Parameter>
  -              </Foundation.Core.BehavioralFeature.parameter>
  -            </Foundation.Core.Operation>
  -            <Foundation.Core.Method xmi.id="xmi.29">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Method.body>
  -                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.31">
  -                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  -                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  -                </Foundation.Data_Types.ProcedureExpression>
  -              </Foundation.Core.Method.body>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Method.specification>
  -                <Foundation.Core.Operation xmi.idref="xmi.28"/>
  -              </Foundation.Core.Method.specification>
  -            </Foundation.Core.Method>
  -            <Foundation.Core.Operation xmi.id="xmi.32" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ff1">
  -              <Foundation.Core.ModelElement.name>Parse</Foundation.Core.ModelElement.name>
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  -              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  -              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Operation.method>
  -                <Foundation.Core.Method xmi.idref="xmi.33"/>
  -              </Foundation.Core.Operation.method>
  -              <Foundation.Core.BehavioralFeature.parameter>
  -                <Foundation.Core.Parameter xmi.id="xmi.34" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ff0">
  -                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  -                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  -                  <Foundation.Core.Parameter.behavioralFeature>
  -                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.32"/>
  -                  </Foundation.Core.Parameter.behavioralFeature>
  -                  <Foundation.Core.Parameter.type>
  -                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  -                  </Foundation.Core.Parameter.type>
  -                </Foundation.Core.Parameter>
  -              </Foundation.Core.BehavioralFeature.parameter>
  -            </Foundation.Core.Operation>
  -            <Foundation.Core.Method xmi.id="xmi.33">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Method.body>
  -                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.35">
  -                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  -                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  -                </Foundation.Data_Types.ProcedureExpression>
  -              </Foundation.Core.Method.body>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Method.specification>
  -                <Foundation.Core.Operation xmi.idref="xmi.32"/>
  -              </Foundation.Core.Method.specification>
  -            </Foundation.Core.Method>
  -          </Foundation.Core.Classifier.feature>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.36" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ffb">
  -          <Foundation.Core.ModelElement.name>EnvironmentOption</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.37" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ffa">
  -          <Foundation.Core.ModelElement.name>CommandLineOption</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.38" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ff9">
  -          <Foundation.Core.ModelElement.name>Option</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Classifier.feature>
  -            <Foundation.Core.Attribute xmi.id="xmi.39" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe5">
  -              <Foundation.Core.ModelElement.name>nCount</Foundation.Core.ModelElement.name>
  -              <Foundation.Core.ModelElement.visibility xmi.value="private"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.StructuralFeature.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.40"/>
  -              </Foundation.Core.StructuralFeature.type>
  -            </Foundation.Core.Attribute>
  -            <Foundation.Core.Attribute xmi.id="xmi.41" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe4">
  -              <Foundation.Core.ModelElement.name>*pvElement</Foundation.Core.ModelElement.name>
  -              <Foundation.Core.ModelElement.visibility xmi.value="private"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.StructuralFeature.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  -              </Foundation.Core.StructuralFeature.type>
  -            </Foundation.Core.Attribute>
  -            <Foundation.Core.Operation xmi.id="xmi.42" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe3">
  -              <Foundation.Core.ModelElement.name>addElement</Foundation.Core.ModelElement.name>
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  -              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  -              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Operation.method>
  -                <Foundation.Core.Method xmi.idref="xmi.43"/>
  -              </Foundation.Core.Operation.method>
  -              <Foundation.Core.BehavioralFeature.parameter>
  -                <Foundation.Core.Parameter xmi.id="xmi.44" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe2">
  -                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  -                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  -                  <Foundation.Core.Parameter.behavioralFeature>
  -                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.42"/>
  -                  </Foundation.Core.Parameter.behavioralFeature>
  -                  <Foundation.Core.Parameter.type>
  -                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  -                  </Foundation.Core.Parameter.type>
  -                </Foundation.Core.Parameter>
  -              </Foundation.Core.BehavioralFeature.parameter>
  -            </Foundation.Core.Operation>
  -            <Foundation.Core.Method xmi.id="xmi.43">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Method.body>
  -                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.45">
  -                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  -                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  -                </Foundation.Data_Types.ProcedureExpression>
  -              </Foundation.Core.Method.body>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Method.specification>
  -                <Foundation.Core.Operation xmi.idref="xmi.42"/>
  -              </Foundation.Core.Method.specification>
  -            </Foundation.Core.Method>
  -            <Foundation.Core.Operation xmi.id="xmi.46" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe1">
  -              <Foundation.Core.ModelElement.name>delElement</Foundation.Core.ModelElement.name>
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  -              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  -              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Operation.method>
  -                <Foundation.Core.Method xmi.idref="xmi.47"/>
  -              </Foundation.Core.Operation.method>
  -              <Foundation.Core.BehavioralFeature.parameter>
  -                <Foundation.Core.Parameter xmi.id="xmi.48" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe0">
  -                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  -                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  -                  <Foundation.Core.Parameter.behavioralFeature>
  -                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.46"/>
  -                  </Foundation.Core.Parameter.behavioralFeature>
  -                  <Foundation.Core.Parameter.type>
  -                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  -                  </Foundation.Core.Parameter.type>
  -                </Foundation.Core.Parameter>
  -              </Foundation.Core.BehavioralFeature.parameter>
  -            </Foundation.Core.Operation>
  -            <Foundation.Core.Method xmi.id="xmi.47">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Method.body>
  -                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.49">
  -                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  -                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  -                </Foundation.Data_Types.ProcedureExpression>
  -              </Foundation.Core.Method.body>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Method.specification>
  -                <Foundation.Core.Operation xmi.idref="xmi.46"/>
  -              </Foundation.Core.Method.specification>
  -            </Foundation.Core.Method>
  -            <Foundation.Core.Operation xmi.id="xmi.50" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fdf">
  -              <Foundation.Core.ModelElement.name>getCount</Foundation.Core.ModelElement.name>
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  -              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  -              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Operation.method>
  -                <Foundation.Core.Method xmi.idref="xmi.51"/>
  -              </Foundation.Core.Operation.method>
  -              <Foundation.Core.BehavioralFeature.parameter>
  -                <Foundation.Core.Parameter xmi.id="xmi.52" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fde">
  -                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  -                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  -                  <Foundation.Core.Parameter.behavioralFeature>
  -                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.50"/>
  -                  </Foundation.Core.Parameter.behavioralFeature>
  -                  <Foundation.Core.Parameter.type>
  -                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  -                  </Foundation.Core.Parameter.type>
  -                </Foundation.Core.Parameter>
  -              </Foundation.Core.BehavioralFeature.parameter>
  -            </Foundation.Core.Operation>
  -            <Foundation.Core.Method xmi.id="xmi.51">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Method.body>
  -                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.53">
  -                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  -                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  -                </Foundation.Data_Types.ProcedureExpression>
  -              </Foundation.Core.Method.body>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Method.specification>
  -                <Foundation.Core.Operation xmi.idref="xmi.50"/>
  -              </Foundation.Core.Method.specification>
  -            </Foundation.Core.Method>
  -          </Foundation.Core.Classifier.feature>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Association xmi.id="xmi.54" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ff5">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.55" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ffa">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.id="xmi.56">
  -                  <Foundation.Data_Types.Multiplicity.range>
  -                    <Foundation.Data_Types.MultiplicityRange xmi.id="xmi.57">
  -                      <Foundation.Data_Types.MultiplicityRange.lower>0</Foundation.Data_Types.MultiplicityRange.lower>
  -                      <Foundation.Data_Types.MultiplicityRange.upper>1</Foundation.Data_Types.MultiplicityRange.upper>
  -                    </Foundation.Data_Types.MultiplicityRange>
  -                  </Foundation.Data_Types.Multiplicity.range>
  -                </Foundation.Data_Types.Multiplicity>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.54"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.36"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.58" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff9">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.54"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.3"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Core.Association xmi.id="xmi.59" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ff4">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.60" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff8">
  -              <Foundation.Core.ModelElement.name></Foundation.Core.ModelElement.name>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.56"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.59"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.61" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff7">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.id="xmi.62">
  -                  <Foundation.Data_Types.Multiplicity.range>
  -                    <Foundation.Data_Types.MultiplicityRange xmi.id="xmi.63">
  -                      <Foundation.Data_Types.MultiplicityRange.lower>1</Foundation.Data_Types.MultiplicityRange.lower>
  -                      <Foundation.Data_Types.MultiplicityRange.upper>1</Foundation.Data_Types.MultiplicityRange.upper>
  -                    </Foundation.Data_Types.MultiplicityRange>
  -                  </Foundation.Data_Types.Multiplicity.range>
  -                </Foundation.Data_Types.Multiplicity>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.59"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.3"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Core.Association xmi.id="xmi.64" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ff3">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.65" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff6">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.56"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.64"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.37"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.66" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff5">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.64"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.3"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Core.Association xmi.id="xmi.67" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fed">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.68" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff4">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.67"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.2"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.69" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff3">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.67"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.3"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Core.Class xmi.id="xmi.70" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fec">
  -          <Foundation.Core.ModelElement.name>Logger</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Association xmi.id="xmi.71" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fea">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.72" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff2">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.71"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.70"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.73" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff1">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.71"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.2"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Core.Class xmi.id="xmi.74" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe9">
  -          <Foundation.Core.ModelElement.name>Processor</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Association xmi.id="xmi.75" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe8">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.76" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff0">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.56"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.75"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.74"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.77" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fef">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.75"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.2"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Core.Class xmi.id="xmi.78" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe7">
  -          <Foundation.Core.ModelElement.name>Script</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Classifier.feature>
  -            <Foundation.Core.Attribute xmi.id="xmi.79" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ffd">
  -              <Foundation.Core.ModelElement.name>eLang</Foundation.Core.ModelElement.name>
  -              <Foundation.Core.ModelElement.visibility xmi.value="private"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.Attribute.initialValue>
  -                <Foundation.Data_Types.Expression xmi.id="xmi.80">
  -                  <Foundation.Data_Types.Expression.language>Java</Foundation.Data_Types.Expression.language>
  -                  <Foundation.Data_Types.Expression.body>0</Foundation.Data_Types.Expression.body>
  -                </Foundation.Data_Types.Expression>
  -              </Foundation.Core.Attribute.initialValue>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.78"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.StructuralFeature.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.81"/>
  -              </Foundation.Core.StructuralFeature.type>
  -            </Foundation.Core.Attribute>
  -          </Foundation.Core.Classifier.feature>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.82" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe6">
  -          <Foundation.Core.ModelElement.name>RCFile</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.GeneralizableElement.generalization>
  -            <Foundation.Core.Generalization xmi.idref="xmi.83"/>
  -          </Foundation.Core.GeneralizableElement.generalization>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.84" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe5">
  -          <Foundation.Core.ModelElement.name>FuncFile</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.GeneralizableElement.generalization>
  -            <Foundation.Core.Generalization xmi.idref="xmi.85"/>
  -          </Foundation.Core.GeneralizableElement.generalization>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.86" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe4">
  -          <Foundation.Core.ModelElement.name>File</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="true"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.GeneralizableElement.specialization>
  -            <Foundation.Core.Generalization xmi.idref="xmi.83"/>
  -            <Foundation.Core.Generalization xmi.idref="xmi.85"/>
  -          </Foundation.Core.GeneralizableElement.specialization>
  -          <Foundation.Core.Classifier.feature>
  -            <Foundation.Core.Attribute xmi.id="xmi.87" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ffc">
  -              <Foundation.Core.ModelElement.name>*szName</Foundation.Core.ModelElement.name>
  -              <Foundation.Core.ModelElement.visibility xmi.value="private"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.86"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.StructuralFeature.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.88"/>
  -              </Foundation.Core.StructuralFeature.type>
  -            </Foundation.Core.Attribute>
  -            <Foundation.Core.Operation xmi.id="xmi.89" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ffd">
  -              <Foundation.Core.ModelElement.name>getName</Foundation.Core.ModelElement.name>
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  -              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  -              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.86"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Operation.method>
  -                <Foundation.Core.Method xmi.idref="xmi.90"/>
  -              </Foundation.Core.Operation.method>
  -              <Foundation.Core.BehavioralFeature.parameter>
  -                <Foundation.Core.Parameter xmi.id="xmi.91" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ffc">
  -                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  -                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  -                  <Foundation.Core.Parameter.behavioralFeature>
  -                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.89"/>
  -                  </Foundation.Core.Parameter.behavioralFeature>
  -                  <Foundation.Core.Parameter.type>
  -                    <Foundation.Core.Classifier xmi.idref="xmi.9"/>
  -                  </Foundation.Core.Parameter.type>
  -                </Foundation.Core.Parameter>
  -              </Foundation.Core.BehavioralFeature.parameter>
  -            </Foundation.Core.Operation>
  -            <Foundation.Core.Method xmi.id="xmi.90">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  -              <Foundation.Core.Method.body>
  -                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.92">
  -                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  -                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  -                </Foundation.Data_Types.ProcedureExpression>
  -              </Foundation.Core.Method.body>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.86"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.Method.specification>
  -                <Foundation.Core.Operation xmi.idref="xmi.89"/>
  -              </Foundation.Core.Method.specification>
  -            </Foundation.Core.Method>
  -          </Foundation.Core.Classifier.feature>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Generalization xmi.id="xmi.83" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe2">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Generalization.child>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.82"/>
  -          </Foundation.Core.Generalization.child>
  -          <Foundation.Core.Generalization.parent>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.86"/>
  -          </Foundation.Core.Generalization.parent>
  -        </Foundation.Core.Generalization>
  -        <Foundation.Core.Generalization xmi.id="xmi.85" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe1">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Generalization.child>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.84"/>
  -          </Foundation.Core.Generalization.child>
  -          <Foundation.Core.Generalization.parent>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.86"/>
  -          </Foundation.Core.Generalization.parent>
  -        </Foundation.Core.Generalization>
  -        <Foundation.Core.Association xmi.id="xmi.93" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fdf">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.94" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fee">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.id="xmi.95">
  -                  <Foundation.Data_Types.Multiplicity.range>
  -                    <Foundation.Data_Types.MultiplicityRange xmi.id="xmi.96">
  -                      <Foundation.Data_Types.MultiplicityRange.lower>1</Foundation.Data_Types.MultiplicityRange.lower>
  -                      <Foundation.Data_Types.MultiplicityRange.upper>-1</Foundation.Data_Types.MultiplicityRange.upper>
  -                    </Foundation.Data_Types.MultiplicityRange>
  -                  </Foundation.Data_Types.Multiplicity.range>
  -                </Foundation.Data_Types.Multiplicity>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.93"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.82"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.97" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fed">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.93"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.74"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Core.Association xmi.id="xmi.98" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fde">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.99" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fec">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.95"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.98"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.78"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.100" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7feb">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.98"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.74"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Core.Association xmi.id="xmi.101" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fdd">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.102" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fea">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.56"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.101"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.84"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.103" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe9">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.101"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.74"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.104">
  -          <Foundation.Core.ModelElement.name>Adapter</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Extension_Mechanisms.Stereotype.extendedElement>
  -            <Foundation.Core.ModelElement xmi.idref="xmi.70"/>
  -          </Foundation.Extension_Mechanisms.Stereotype.extendedElement>
  -        </Foundation.Extension_Mechanisms.Stereotype>
  -        <Foundation.Core.Class xmi.id="xmi.105" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fdc">
  -          <Foundation.Core.ModelElement.name>ConfigSection</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.GeneralizableElement.generalization>
  -            <Foundation.Core.Generalization xmi.idref="xmi.106"/>
  -          </Foundation.Core.GeneralizableElement.generalization>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.107" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fdb">
  -          <Foundation.Core.ModelElement.name>DefaultSection</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.GeneralizableElement.generalization>
  -            <Foundation.Core.Generalization xmi.idref="xmi.108"/>
  -          </Foundation.Core.GeneralizableElement.generalization>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.109" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fda">
  -          <Foundation.Core.ModelElement.name>ErrorSection</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.GeneralizableElement.generalization>
  -            <Foundation.Core.Generalization xmi.idref="xmi.110"/>
  -          </Foundation.Core.GeneralizableElement.generalization>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.111" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fd9">
  -          <Foundation.Core.ModelElement.name>CommonSection</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.GeneralizableElement.generalization>
  -            <Foundation.Core.Generalization xmi.idref="xmi.112"/>
  -          </Foundation.Core.GeneralizableElement.generalization>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.113" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fd8">
  -          <Foundation.Core.ModelElement.name>UserSection</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.GeneralizableElement.generalization>
  -            <Foundation.Core.Generalization xmi.idref="xmi.114"/>
  -          </Foundation.Core.GeneralizableElement.generalization>
  -          <Foundation.Core.Classifier.feature>
  -            <Foundation.Core.Attribute xmi.id="xmi.115" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ffb">
  -              <Foundation.Core.ModelElement.name>eLang</Foundation.Core.ModelElement.name>
  -              <Foundation.Core.ModelElement.visibility xmi.value="private"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.Attribute.initialValue>
  -                <Foundation.Data_Types.Expression xmi.id="xmi.116">
  -                  <Foundation.Data_Types.Expression.language>Java</Foundation.Data_Types.Expression.language>
  -                  <Foundation.Data_Types.Expression.body>0</Foundation.Data_Types.Expression.body>
  -                </Foundation.Data_Types.Expression>
  -              </Foundation.Core.Attribute.initialValue>
  -              <Foundation.Core.Feature.owner>
  -                <Foundation.Core.Classifier xmi.idref="xmi.113"/>
  -              </Foundation.Core.Feature.owner>
  -              <Foundation.Core.StructuralFeature.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.81"/>
  -              </Foundation.Core.StructuralFeature.type>
  -            </Foundation.Core.Attribute>
  -          </Foundation.Core.Classifier.feature>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.117" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fd7">
  -          <Foundation.Core.ModelElement.name>Section</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="true"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.GeneralizableElement.specialization>
  -            <Foundation.Core.Generalization xmi.idref="xmi.110"/>
  -            <Foundation.Core.Generalization xmi.idref="xmi.108"/>
  -            <Foundation.Core.Generalization xmi.idref="xmi.106"/>
  -            <Foundation.Core.Generalization xmi.idref="xmi.112"/>
  -            <Foundation.Core.Generalization xmi.idref="xmi.114"/>
  -          </Foundation.Core.GeneralizableElement.specialization>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Generalization xmi.id="xmi.110" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fd0">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Generalization.child>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.109"/>
  -          </Foundation.Core.Generalization.child>
  -          <Foundation.Core.Generalization.parent>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.117"/>
  -          </Foundation.Core.Generalization.parent>
  -        </Foundation.Core.Generalization>
  -        <Foundation.Core.Generalization xmi.id="xmi.108" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fcf">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Generalization.child>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.107"/>
  -          </Foundation.Core.Generalization.child>
  -          <Foundation.Core.Generalization.parent>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.117"/>
  -          </Foundation.Core.Generalization.parent>
  -        </Foundation.Core.Generalization>
  -        <Foundation.Core.Generalization xmi.id="xmi.106" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fce">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Generalization.child>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.105"/>
  -          </Foundation.Core.Generalization.child>
  -          <Foundation.Core.Generalization.parent>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.117"/>
  -          </Foundation.Core.Generalization.parent>
  -        </Foundation.Core.Generalization>
  -        <Foundation.Core.Generalization xmi.id="xmi.112" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fcd">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Generalization.child>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.111"/>
  -          </Foundation.Core.Generalization.child>
  -          <Foundation.Core.Generalization.parent>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.117"/>
  -          </Foundation.Core.Generalization.parent>
  -        </Foundation.Core.Generalization>
  -        <Foundation.Core.Generalization xmi.id="xmi.114" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fcc">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Generalization.child>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.113"/>
  -          </Foundation.Core.Generalization.child>
  -          <Foundation.Core.Generalization.parent>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.117"/>
  -          </Foundation.Core.Generalization.parent>
  -        </Foundation.Core.Generalization>
  -        <Foundation.Core.Association xmi.id="xmi.118" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fc3">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.119" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe8">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.56"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.118"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.111"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.120" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe7">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.118"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.86"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Core.Association xmi.id="xmi.121" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fc1">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.122" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe6">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.id="xmi.123">
  -                  <Foundation.Data_Types.Multiplicity.range>
  -                    <Foundation.Data_Types.MultiplicityRange xmi.id="xmi.124">
  -                      <Foundation.Data_Types.MultiplicityRange.lower>0</Foundation.Data_Types.MultiplicityRange.lower>
  -                      <Foundation.Data_Types.MultiplicityRange.upper>-1</Foundation.Data_Types.MultiplicityRange.upper>
  -                    </Foundation.Data_Types.MultiplicityRange>
  -                  </Foundation.Data_Types.Multiplicity.range>
  -                </Foundation.Data_Types.Multiplicity>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.121"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.113"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.125" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe5">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.121"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.86"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Core.Class xmi.id="xmi.126" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fbd">
  -          <Foundation.Core.ModelElement.name>Translator</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.127" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fbc">
  -          <Foundation.Core.ModelElement.name>SyntaxTree</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.128" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fbb">
  -          <Foundation.Core.ModelElement.name>SymbolTable</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Association xmi.id="xmi.129" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fb7">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.130" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe4">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.129"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.127"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.131" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe3">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.129"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.126"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Core.Association xmi.id="xmi.132" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fb6">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.133" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe2">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.56"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.132"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.126"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.134" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe1">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.132"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.74"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Core.Association xmi.id="xmi.135" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fb5">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.136" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe0">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.135"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.128"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.137" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fdf">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.135"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.126"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.138">
  -          <Foundation.Core.ModelElement.name>Mediator</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -        </Foundation.Extension_Mechanisms.Stereotype>
  -        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.139">
  -          <Foundation.Core.ModelElement.name>Singleton</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Extension_Mechanisms.Stereotype.extendedElement>
  -            <Foundation.Core.ModelElement xmi.idref="xmi.3"/>
  -          </Foundation.Extension_Mechanisms.Stereotype.extendedElement>
  -        </Foundation.Extension_Mechanisms.Stereotype>
  -        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.140">
  -          <Foundation.Core.ModelElement.name>Interpreter</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -        </Foundation.Extension_Mechanisms.Stereotype>
  -        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.141">
  -          <Foundation.Core.ModelElement.name>Interpreter</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -        </Foundation.Extension_Mechanisms.Stereotype>
  -        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.142">
  -          <Foundation.Core.ModelElement.name>Iterator</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Extension_Mechanisms.Stereotype.extendedElement>
  -            <Foundation.Core.ModelElement xmi.idref="xmi.36"/>
  -            <Foundation.Core.ModelElement xmi.idref="xmi.15"/>
  -            <Foundation.Core.ModelElement xmi.idref="xmi.37"/>
  -          </Foundation.Extension_Mechanisms.Stereotype.extendedElement>
  -        </Foundation.Extension_Mechanisms.Stereotype>
  -        <Behavioral_Elements.Use_Cases.Actor xmi.id="xmi.143" xmi.uuid="-64--88-100-101-357e9a:ebcd920152:-7ffb">
  -          <Foundation.Core.ModelElement.name>OpenPKG</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -        </Behavioral_Elements.Use_Cases.Actor>
  -        <Behavioral_Elements.Use_Cases.UseCase xmi.id="xmi.144" xmi.uuid="-64--88-100-101-357e9a:ebcd920152:-7ff8">
  -          <Foundation.Core.ModelElement.name>ReadConfig</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.GeneralizableElement.specialization>
  -            <Foundation.Core.Generalization xmi.idref="xmi.145"/>
  -          </Foundation.Core.GeneralizableElement.specialization>
  -        </Behavioral_Elements.Use_Cases.UseCase>
  -        <Behavioral_Elements.Use_Cases.UseCase xmi.id="xmi.146" xmi.uuid="-64--88-100-101-357e9a:ebcd920152:-7ff7">
  -          <Foundation.Core.ModelElement.name>RunCommands</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.GeneralizableElement.generalization>
  -            <Foundation.Core.Generalization xmi.idref="xmi.145"/>
  -          </Foundation.Core.GeneralizableElement.generalization>
  -        </Behavioral_Elements.Use_Cases.UseCase>
  -        <Foundation.Core.Generalization xmi.id="xmi.145" xmi.uuid="-64--88-100-101-357e9a:ebcd920152:-7ff6">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Generalization.child>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.146"/>
  -          </Foundation.Core.Generalization.child>
  -          <Foundation.Core.Generalization.parent>
  -            <Foundation.Core.GeneralizableElement xmi.idref="xmi.144"/>
  -          </Foundation.Core.Generalization.parent>
  -        </Foundation.Core.Generalization>
  -        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.147">
  -          <Foundation.Core.ModelElement.name>include</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -        </Foundation.Extension_Mechanisms.Stereotype>
  -        <Foundation.Core.Association xmi.id="xmi.148" xmi.uuid="-64--88-100-101-357e9a:ebcd920152:-7ff5">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.149" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fd8">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.148"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.143"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.150" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fd7">
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.148"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.146"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.151">
  -          <Foundation.Core.ModelElement.name>extend</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -        </Foundation.Extension_Mechanisms.Stereotype>
  -        <Foundation.Core.Class xmi.id="xmi.40">
  -          <Foundation.Core.ModelElement.name>int</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.88">
  -          <Foundation.Core.ModelElement.name>char</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.81">
  -          <Foundation.Core.ModelElement.name>enum</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Class xmi.id="xmi.9">
  -          <Foundation.Core.ModelElement.name>void</Foundation.Core.ModelElement.name>
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.Class.isActive xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -        </Foundation.Core.Class>
  -        <Foundation.Core.Association xmi.id="xmi.152" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fee">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.153" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fed">
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.ordering xmi.value="unordered"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.targetScope xmi.value="instance"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.changeability xmi.value="changeable"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.152"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.154" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fec">
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.152"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.36"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Core.Association xmi.id="xmi.155" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7feb">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.156" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fea">
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.ordering xmi.value="unordered"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.targetScope xmi.value="instance"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.changeability xmi.value="changeable"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.155"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.157" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe9">
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.155"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.15"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Core.Association xmi.id="xmi.158" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe8">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.159" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe7">
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.ordering xmi.value="unordered"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.targetScope xmi.value="instance"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.changeability xmi.value="changeable"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.158"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.38"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.160" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe6">
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.158"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.37"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Core.Association xmi.id="xmi.161" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fda">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.162" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fd9">
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.ordering xmi.value="unordered"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.targetScope xmi.value="instance"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.56"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.changeability xmi.value="changeable"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.161"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.109"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.163" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fd8">
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.161"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.86"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Core.Association xmi.id="xmi.164" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fd4">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.165" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fd3">
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.ordering xmi.value="unordered"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.targetScope xmi.value="instance"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.56"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.changeability xmi.value="changeable"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.164"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.107"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.166" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fd2">
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.164"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.86"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -        <Foundation.Core.Association xmi.id="xmi.167" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fd1">
  -          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  -          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  -          <Foundation.Core.ModelElement.namespace>
  -            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  -          </Foundation.Core.ModelElement.namespace>
  -          <Foundation.Core.Association.connection>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.168" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fd0">
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.ordering xmi.value="unordered"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  -              <Foundation.Core.AssociationEnd.targetScope xmi.value="instance"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.56"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.changeability xmi.value="changeable"/>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.167"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.105"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -            <Foundation.Core.AssociationEnd xmi.id="xmi.169" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fcf">
  -              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  -              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  -              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  -              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  -              <Foundation.Core.AssociationEnd.multiplicity>
  -                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.62"/>
  -              </Foundation.Core.AssociationEnd.multiplicity>
  -              <Foundation.Core.AssociationEnd.association>
  -                <Foundation.Core.Association xmi.idref="xmi.167"/>
  -              </Foundation.Core.AssociationEnd.association>
  -              <Foundation.Core.AssociationEnd.type>
  -                <Foundation.Core.Classifier xmi.idref="xmi.86"/>
  -              </Foundation.Core.AssociationEnd.type>
  -            </Foundation.Core.AssociationEnd>
  -          </Foundation.Core.Association.connection>
  -        </Foundation.Core.Association>
  -      </Foundation.Core.Namespace.ownedElement>
  -    </Model_Management.Model>
  -  </XMI.content>
  +<?xml version="1.0" encoding="UTF-8"?>
  +<XMI xmi.version="1.0">
  +  <XMI.header>
  +    <XMI.documentation>
  +      <XMI.exporter>Novosoft UML Library</XMI.exporter>
  +      <XMI.exporterVersion>0.4.19</XMI.exporterVersion>
  +    </XMI.documentation>
  +    <XMI.metamodel xmi.name="UML" xmi.version="1.3"/>
  +  </XMI.header>
  +  <XMI.content>
  +    <Model_Management.Model xmi.id="xmi.1" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-8000">
  +      <Foundation.Core.ModelElement.name>OSSPRC</Foundation.Core.ModelElement.name>
  +      <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +      <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +      <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +      <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +      <Foundation.Core.Namespace.ownedElement>
  +        <Foundation.Core.Class xmi.id="xmi.2" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fff">
  +          <Foundation.Core.ModelElement.name>RC</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.ModelElement.comment>
  +            <Foundation.Core.Comment xmi.idref="xmi.3"/>
  +          </Foundation.Core.ModelElement.comment>
  +          <Foundation.Core.Classifier.feature>
  +            <Foundation.Core.Operation xmi.id="xmi.4" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fa3">
  +              <Foundation.Core.ModelElement.name>RC</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.2"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.5"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.6" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fa2">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.4"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.5">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.8">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.2"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.4"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.9" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fa1">
  +              <Foundation.Core.ModelElement.name>~RC</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.2"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.10"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.11" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fa0">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.9"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.10">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.12">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.2"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.9"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +          </Foundation.Core.Classifier.feature>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Class xmi.id="xmi.13" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ffd">
  +          <Foundation.Core.ModelElement.name>Configuration</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Classifier.feature>
  +            <Foundation.Core.Attribute xmi.id="xmi.14" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fd6">
  +              <Foundation.Core.ModelElement.name>*s_pInst</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="private"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="classifier"/>
  +              <Foundation.Core.Attribute.initialValue>
  +                <Foundation.Data_Types.Expression xmi.id="xmi.15">
  +                  <Foundation.Data_Types.Expression.language>Java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.Expression>
  +              </Foundation.Core.Attribute.initialValue>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.13"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.StructuralFeature.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.13"/>
  +              </Foundation.Core.StructuralFeature.type>
  +            </Foundation.Core.Attribute>
  +            <Foundation.Core.Operation xmi.id="xmi.16" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fd5">
  +              <Foundation.Core.ModelElement.name>Configuration</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="protected"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="classifier"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.13"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.17"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.18" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fd4">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.16"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.17">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.19">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.13"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.16"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.20" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ffb">
  +              <Foundation.Core.ModelElement.name>getInstance</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="classifier"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.13"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.21"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.22" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ffa">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.20"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.21">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.23">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.13"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.20"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.24" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fc0">
  +              <Foundation.Core.ModelElement.name>~Configuration</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.13"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.25"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.26" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fbf">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.24"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.25">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.27">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.13"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.24"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.28" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7f8c">
  +              <Foundation.Core.ModelElement.name>Load</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.13"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.29"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.30" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7f8b">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.28"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.29">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.31">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.13"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.28"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.32" xmi.uuid="-115-1-23--126-57bf4c:ec53d16f5f:-7ffd">
  +              <Foundation.Core.ModelElement.name>Prep</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="private"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.13"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.33"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.34" xmi.uuid="-115-1-23--126-57bf4c:ec53d16f5f:-7ffc">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.32"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.33">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.35">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.13"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.32"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +          </Foundation.Core.Classifier.feature>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Class xmi.id="xmi.36" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ffc">
  +          <Foundation.Core.ModelElement.name>FileOption</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.GeneralizableElement.generalization>
  +            <Foundation.Core.Generalization xmi.idref="xmi.37"/>
  +          </Foundation.Core.GeneralizableElement.generalization>
  +          <Foundation.Core.Classifier.feature>
  +            <Foundation.Core.Operation xmi.id="xmi.38" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ff9">
  +              <Foundation.Core.ModelElement.name>FileOption</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.36"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.39"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.40" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7ff8">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.38"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.41" xmi.uuid="-115-1-23--126-57bf4c:ec53d16f5f:-7ff9">
  +                  <Foundation.Core.ModelElement.name>**ppvOpts</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="inout"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.38"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.39">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.42">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.36"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.38"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.43" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fcf">
  +              <Foundation.Core.ModelElement.name>~FileOption</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.36"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.44"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.45" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fce">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.43"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.44">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.46">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.36"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.43"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +          </Foundation.Core.Classifier.feature>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Class xmi.id="xmi.47" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ffb">
  +          <Foundation.Core.ModelElement.name>EnvironmentOption</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Classifier.feature>
  +            <Foundation.Core.Operation xmi.id="xmi.48" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fca">
  +              <Foundation.Core.ModelElement.name>EnvironmentOption</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.47"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.49"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.50" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fc9">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.48"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.51" xmi.uuid="-115-1-23--126-57bf4c:ec53d16f5f:-7ff8">
  +                  <Foundation.Core.ModelElement.name>**ppvOpts</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="inout"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.48"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.49">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.52">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.47"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.48"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.53" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fc8">
  +              <Foundation.Core.ModelElement.name>~EnvironmentOption</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.47"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.54"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.55" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fc7">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.53"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.54">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.56">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.47"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.53"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +          </Foundation.Core.Classifier.feature>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Class xmi.id="xmi.57" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ffa">
  +          <Foundation.Core.ModelElement.name>CommandLineOption</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Classifier.feature>
  +            <Foundation.Core.Operation xmi.id="xmi.58" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fc6">
  +              <Foundation.Core.ModelElement.name>CommandLineOption</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.57"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.59"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.60" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fc5">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.58"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.61" xmi.uuid="-115-1-23--126-57bf4c:ec53d16f5f:-7ff7">
  +                  <Foundation.Core.ModelElement.name>**ppvOpts</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="inout"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.58"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.59">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.62">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.57"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.58"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.63" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fc4">
  +              <Foundation.Core.ModelElement.name>~CommandLineOption</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.57"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.64"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.65" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fc3">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.63"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.64">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.66">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.57"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.63"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +          </Foundation.Core.Classifier.feature>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Class xmi.id="xmi.67" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ff9">
  +          <Foundation.Core.ModelElement.name>Option</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="true"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Classifier.feature>
  +            <Foundation.Core.Operation xmi.id="xmi.68" xmi.uuid="-115-1-23--126-57bf4c:ec53d16f5f:-7ffb">
  +              <Foundation.Core.ModelElement.name>Parse</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.67"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.69"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.70" xmi.uuid="-115-1-23--126-57bf4c:ec53d16f5f:-7ffa">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.68"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.69">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.71">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.67"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.68"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.72" xmi.uuid="-115-1-23--126-770ee1:ec53ed5dcf:-7ffd">
  +              <Foundation.Core.ModelElement.name>getOpt</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.67"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.73"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.74" xmi.uuid="-115-1-23--126-770ee1:ec53ed5dcf:-7ffc">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.72"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.75" xmi.uuid="-115-1-23--126-770ee1:ec53ed5dcf:-7ffb">
  +                  <Foundation.Core.ModelElement.name>nOptid</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="in"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.72"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.76"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.73">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.77">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.67"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.72"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.78" xmi.uuid="-115-1-23--126-770ee1:ec53ed5dcf:-7ffa">
  +              <Foundation.Core.ModelElement.name>putOpt</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="true"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.67"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.79"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.80" xmi.uuid="-115-1-23--126-770ee1:ec53ed5dcf:-7ff9">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.78"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.81" xmi.uuid="-115-1-23--126-770ee1:ec53ed5dcf:-7ff8">
  +                  <Foundation.Core.ModelElement.name>nOptid</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="in"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.78"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.76"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.82" xmi.uuid="-115-1-23--126-770ee1:ec53ed5dcf:-7ff7">
  +                  <Foundation.Core.ModelElement.name>*pvOptval</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="in"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.78"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.79">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.83">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.67"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.78"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +          </Foundation.Core.Classifier.feature>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Association xmi.id="xmi.84" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ff5">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.85" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ffa">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.id="xmi.86">
  +                  <Foundation.Data_Types.Multiplicity.range>
  +                    <Foundation.Data_Types.MultiplicityRange xmi.id="xmi.87">
  +                      <Foundation.Data_Types.MultiplicityRange.lower>0</Foundation.Data_Types.MultiplicityRange.lower>
  +                      <Foundation.Data_Types.MultiplicityRange.upper>1</Foundation.Data_Types.MultiplicityRange.upper>
  +                    </Foundation.Data_Types.MultiplicityRange>
  +                  </Foundation.Data_Types.Multiplicity.range>
  +                </Foundation.Data_Types.Multiplicity>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.84"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.47"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.88" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff9">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.84"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.13"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Core.Association xmi.id="xmi.89" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ff4">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.90" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff8">
  +              <Foundation.Core.ModelElement.name></Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.id="xmi.91">
  +                  <Foundation.Data_Types.Multiplicity.range>
  +                    <Foundation.Data_Types.MultiplicityRange xmi.id="xmi.92">
  +                      <Foundation.Data_Types.MultiplicityRange.lower>0</Foundation.Data_Types.MultiplicityRange.lower>
  +                      <Foundation.Data_Types.MultiplicityRange.upper>-1</Foundation.Data_Types.MultiplicityRange.upper>
  +                    </Foundation.Data_Types.MultiplicityRange>
  +                  </Foundation.Data_Types.Multiplicity.range>
  +                </Foundation.Data_Types.Multiplicity>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.89"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.36"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.93" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff7">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.id="xmi.94">
  +                  <Foundation.Data_Types.Multiplicity.range>
  +                    <Foundation.Data_Types.MultiplicityRange xmi.id="xmi.95">
  +                      <Foundation.Data_Types.MultiplicityRange.lower>1</Foundation.Data_Types.MultiplicityRange.lower>
  +                      <Foundation.Data_Types.MultiplicityRange.upper>1</Foundation.Data_Types.MultiplicityRange.upper>
  +                    </Foundation.Data_Types.MultiplicityRange>
  +                  </Foundation.Data_Types.Multiplicity.range>
  +                </Foundation.Data_Types.Multiplicity>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.89"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.13"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Core.Association xmi.id="xmi.96" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7ff3">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.97" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff6">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.86"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.96"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.57"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.98" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff5">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.96"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.13"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Core.Association xmi.id="xmi.99" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fed">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.100" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff4">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.99"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.2"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.101" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff3">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.94"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.99"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.13"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Core.Class xmi.id="xmi.102" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fec">
  +          <Foundation.Core.ModelElement.name>Logger</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.ModelElement.comment>
  +            <Foundation.Core.Comment xmi.idref="xmi.103"/>
  +          </Foundation.Core.ModelElement.comment>
  +          <Foundation.Core.Classifier.feature>
  +            <Foundation.Core.Operation xmi.id="xmi.104" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7f9f">
  +              <Foundation.Core.ModelElement.name>Logger</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.102"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.105"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.106" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7f9e">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.104"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.105">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.107">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.102"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.104"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.108" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7f9d">
  +              <Foundation.Core.ModelElement.name>~Logger</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.102"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.109"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.110" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7f9c">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.108"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.109">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.111">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.102"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.108"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +          </Foundation.Core.Classifier.feature>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Association xmi.id="xmi.112" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fea">
  +          <Foundation.Core.ModelElement.name></Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.113" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff2">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.112"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.102"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.114" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff1">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.112"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.2"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Core.Class xmi.id="xmi.115" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe9">
  +          <Foundation.Core.ModelElement.name>Processor</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.ModelElement.comment>
  +            <Foundation.Core.Comment xmi.idref="xmi.116"/>
  +          </Foundation.Core.ModelElement.comment>
  +          <Foundation.Core.Classifier.feature>
  +            <Foundation.Core.Operation xmi.id="xmi.117" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fa7">
  +              <Foundation.Core.ModelElement.name>Processor</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.115"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.118"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.119" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fa6">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.117"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.118">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.120">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.115"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.117"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.121" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fa5">
  +              <Foundation.Core.ModelElement.name>~Processor</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.115"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.122"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.123" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fa4">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.121"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.122">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.124">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.115"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.121"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +          </Foundation.Core.Classifier.feature>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Association xmi.id="xmi.125" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe8">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.126" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ff0">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.86"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.125"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.115"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.127" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fef">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.94"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.125"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.2"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Core.Class xmi.id="xmi.128" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe7">
  +          <Foundation.Core.ModelElement.name>Script</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Classifier.feature>
  +            <Foundation.Core.Attribute xmi.id="xmi.129" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ffd">
  +              <Foundation.Core.ModelElement.name>eLang</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="private"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Attribute.initialValue>
  +                <Foundation.Data_Types.Expression xmi.id="xmi.130">
  +                  <Foundation.Data_Types.Expression.language>Java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body>0</Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.Expression>
  +              </Foundation.Core.Attribute.initialValue>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.128"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.StructuralFeature.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.131"/>
  +              </Foundation.Core.StructuralFeature.type>
  +            </Foundation.Core.Attribute>
  +            <Foundation.Core.Attribute xmi.id="xmi.132" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fd5">
  +              <Foundation.Core.ModelElement.name>*szBuf</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="private"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.Attribute.initialValue>
  +                <Foundation.Data_Types.Expression xmi.id="xmi.133">
  +                  <Foundation.Data_Types.Expression.language>Java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.Expression>
  +              </Foundation.Core.Attribute.initialValue>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.128"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.StructuralFeature.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.134"/>
  +              </Foundation.Core.StructuralFeature.type>
  +            </Foundation.Core.Attribute>
  +            <Foundation.Core.Operation xmi.id="xmi.135" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fd4">
  +              <Foundation.Core.ModelElement.name>Write</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.128"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.136"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.137" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fd3">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.135"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.138" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fd2">
  +                  <Foundation.Core.ModelElement.name>nDesc</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="in"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.135"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.76"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.136">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.139">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.128"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.135"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.140" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fb3">
  +              <Foundation.Core.ModelElement.name>Script</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.128"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.141"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.142" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fb2">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.140"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.141">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.143">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.128"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.140"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.144" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fb1">
  +              <Foundation.Core.ModelElement.name>~Script</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.128"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.145"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.146" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fb0">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.144"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.145">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.147">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.128"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.144"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.148" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7f97">
  +              <Foundation.Core.ModelElement.name>putCommand</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.128"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.149"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.150" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7f96">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.148"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.149">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.151">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.128"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.148"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.152" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7f95">
  +              <Foundation.Core.ModelElement.name>putBlock</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.128"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.153"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.154" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7f94">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.152"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.153">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.155">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.128"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.152"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +          </Foundation.Core.Classifier.feature>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Class xmi.id="xmi.156" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe6">
  +          <Foundation.Core.ModelElement.name>RCFile</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.ModelElement.comment>
  +            <Foundation.Core.Comment xmi.idref="xmi.157"/>
  +          </Foundation.Core.ModelElement.comment>
  +          <Foundation.Core.GeneralizableElement.generalization>
  +            <Foundation.Core.Generalization xmi.idref="xmi.158"/>
  +          </Foundation.Core.GeneralizableElement.generalization>
  +          <Foundation.Core.Classifier.feature>
  +            <Foundation.Core.Operation xmi.id="xmi.159" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7faf">
  +              <Foundation.Core.ModelElement.name>RcFile</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.156"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.160"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.161" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fae">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.159"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.160">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.162">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.156"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.159"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.163" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fad">
  +              <Foundation.Core.ModelElement.name>~RcFile</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.156"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.164"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.165" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fac">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.163"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.164">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.166">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.156"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.163"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +          </Foundation.Core.Classifier.feature>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Class xmi.id="xmi.167" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe5">
  +          <Foundation.Core.ModelElement.name>FuncFile</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.GeneralizableElement.generalization>
  +            <Foundation.Core.Generalization xmi.idref="xmi.168"/>
  +          </Foundation.Core.GeneralizableElement.generalization>
  +          <Foundation.Core.Classifier.feature>
  +            <Foundation.Core.Operation xmi.id="xmi.169" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fab">
  +              <Foundation.Core.ModelElement.name>FuncFile</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.167"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.170"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.171" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7faa">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.169"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.170">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.172">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.167"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.169"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.173" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fa9">
  +              <Foundation.Core.ModelElement.name>~FuncFile</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.167"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.174"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.175" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fa8">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.173"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.174">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.176">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.167"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.173"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +          </Foundation.Core.Classifier.feature>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Class xmi.id="xmi.177" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe4">
  +          <Foundation.Core.ModelElement.name>SecFile</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.GeneralizableElement.generalization>
  +            <Foundation.Core.Generalization xmi.idref="xmi.178"/>
  +          </Foundation.Core.GeneralizableElement.generalization>
  +          <Foundation.Core.GeneralizableElement.specialization>
  +            <Foundation.Core.Generalization xmi.idref="xmi.158"/>
  +            <Foundation.Core.Generalization xmi.idref="xmi.168"/>
  +          </Foundation.Core.GeneralizableElement.specialization>
  +          <Foundation.Core.Classifier.feature>
  +            <Foundation.Core.Operation xmi.id="xmi.179" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7ff6">
  +              <Foundation.Core.ModelElement.name>SecFile</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.177"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.180"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.181" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7ff5">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.179"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.180">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.182">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.177"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.179"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.183" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7ff4">
  +              <Foundation.Core.ModelElement.name>getConfig</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.177"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.184"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.185" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7ff3">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.183"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.184">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.186">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.177"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.183"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.187" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7ff2">
  +              <Foundation.Core.ModelElement.name>getDefault</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.177"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.188"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.189" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7ff1">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.187"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.188">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.190">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.177"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.187"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.191" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7ff0">
  +              <Foundation.Core.ModelElement.name>getError</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.177"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.192"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.193" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fef">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.191"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.192">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.194">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.177"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.191"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.195" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fee">
  +              <Foundation.Core.ModelElement.name>getCommon</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.177"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.196"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.197" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fed">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.195"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.196">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.198">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.177"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.195"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.199" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fcc">
  +              <Foundation.Core.ModelElement.name>~SecFile</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.177"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.200"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.201" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fcb">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.199"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.200">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.202">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.177"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.199"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +          </Foundation.Core.Classifier.feature>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Generalization xmi.id="xmi.158" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe2">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Generalization.child>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.156"/>
  +          </Foundation.Core.Generalization.child>
  +          <Foundation.Core.Generalization.parent>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.177"/>
  +          </Foundation.Core.Generalization.parent>
  +        </Foundation.Core.Generalization>
  +        <Foundation.Core.Generalization xmi.id="xmi.168" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fe1">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Generalization.child>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.167"/>
  +          </Foundation.Core.Generalization.child>
  +          <Foundation.Core.Generalization.parent>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.177"/>
  +          </Foundation.Core.Generalization.parent>
  +        </Foundation.Core.Generalization>
  +        <Foundation.Core.Association xmi.id="xmi.203" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fdf">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.204" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fee">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.94"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.203"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.156"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.205" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fed">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.203"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.115"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Core.Association xmi.id="xmi.206" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fde">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.207" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fec">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.94"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.206"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.128"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.208" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7feb">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.206"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.115"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Core.Association xmi.id="xmi.209" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fdd">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.210" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fea">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.86"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.209"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.167"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.211" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe9">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.209"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.115"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.212">
  +          <Foundation.Core.ModelElement.name>Adapter</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +        </Foundation.Extension_Mechanisms.Stereotype>
  +        <Foundation.Core.Class xmi.id="xmi.213" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fdc">
  +          <Foundation.Core.ModelElement.name>ConfigSection</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.GeneralizableElement.generalization>
  +            <Foundation.Core.Generalization xmi.idref="xmi.214"/>
  +          </Foundation.Core.GeneralizableElement.generalization>
  +          <Foundation.Core.Classifier.feature>
  +            <Foundation.Core.Operation xmi.id="xmi.215" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fe9">
  +              <Foundation.Core.ModelElement.name>ConfigSection</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.213"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.216"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.217" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fe8">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.215"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.216">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.218">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.213"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.215"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.219" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fe3">
  +              <Foundation.Core.ModelElement.name>~ConfigSection</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.213"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.220"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.221" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fe2">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.219"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.220">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.222">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.213"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.219"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +          </Foundation.Core.Classifier.feature>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Class xmi.id="xmi.223" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fdb">
  +          <Foundation.Core.ModelElement.name>DefaultSection</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.GeneralizableElement.generalization>
  +            <Foundation.Core.Generalization xmi.idref="xmi.224"/>
  +          </Foundation.Core.GeneralizableElement.generalization>
  +          <Foundation.Core.Classifier.feature>
  +            <Foundation.Core.Attribute xmi.id="xmi.225" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fea">
  +              <Foundation.Core.ModelElement.name>eLang</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="private"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.Attribute.initialValue>
  +                <Foundation.Data_Types.Expression xmi.id="xmi.226">
  +                  <Foundation.Data_Types.Expression.language>Java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body>0</Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.Expression>
  +              </Foundation.Core.Attribute.initialValue>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.223"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.StructuralFeature.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.131"/>
  +              </Foundation.Core.StructuralFeature.type>
  +            </Foundation.Core.Attribute>
  +            <Foundation.Core.Operation xmi.id="xmi.227" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fe7">
  +              <Foundation.Core.ModelElement.name>DefaultSection</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.223"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.228"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.229" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fe6">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.227"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.228">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.230">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.223"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.227"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.231" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fe5">
  +              <Foundation.Core.ModelElement.name>~DefaultSection</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.223"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.232"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.233" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fe4">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.231"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.232">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.234">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.223"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.231"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +          </Foundation.Core.Classifier.feature>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Class xmi.id="xmi.235" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fda">
  +          <Foundation.Core.ModelElement.name>ErrorSection</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.GeneralizableElement.generalization>
  +            <Foundation.Core.Generalization xmi.idref="xmi.236"/>
  +          </Foundation.Core.GeneralizableElement.generalization>
  +          <Foundation.Core.Classifier.feature>
  +            <Foundation.Core.Attribute xmi.id="xmi.237" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7feb">
  +              <Foundation.Core.ModelElement.name>eLang</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="private"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.Attribute.initialValue>
  +                <Foundation.Data_Types.Expression xmi.id="xmi.238">
  +                  <Foundation.Data_Types.Expression.language>Java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body>0</Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.Expression>
  +              </Foundation.Core.Attribute.initialValue>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.235"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.StructuralFeature.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.131"/>
  +              </Foundation.Core.StructuralFeature.type>
  +            </Foundation.Core.Attribute>
  +            <Foundation.Core.Operation xmi.id="xmi.239" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fe1">
  +              <Foundation.Core.ModelElement.name>ErrorSection</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.235"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.240"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.241" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fe0">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.239"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.240">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.242">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.235"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.239"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.243" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fdf">
  +              <Foundation.Core.ModelElement.name>~ErrorSection</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.235"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.244"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.245" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fde">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.243"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.244">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.246">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.235"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.243"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +          </Foundation.Core.Classifier.feature>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Class xmi.id="xmi.247" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fd9">
  +          <Foundation.Core.ModelElement.name>CommonSection</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.GeneralizableElement.generalization>
  +            <Foundation.Core.Generalization xmi.idref="xmi.248"/>
  +          </Foundation.Core.GeneralizableElement.generalization>
  +          <Foundation.Core.Classifier.feature>
  +            <Foundation.Core.Attribute xmi.id="xmi.249" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fec">
  +              <Foundation.Core.ModelElement.name>eLang</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="private"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.Attribute.initialValue>
  +                <Foundation.Data_Types.Expression xmi.id="xmi.250">
  +                  <Foundation.Data_Types.Expression.language>Java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body>0</Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.Expression>
  +              </Foundation.Core.Attribute.initialValue>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.247"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.StructuralFeature.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.131"/>
  +              </Foundation.Core.StructuralFeature.type>
  +            </Foundation.Core.Attribute>
  +            <Foundation.Core.Operation xmi.id="xmi.251" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fdd">
  +              <Foundation.Core.ModelElement.name>CommonSection</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.247"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.252"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.253" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fdc">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.251"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.252">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.254">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.247"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.251"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.255" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fdb">
  +              <Foundation.Core.ModelElement.name>~CommonSection</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.247"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.256"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.257" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fda">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.255"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.256">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.258">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.247"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.255"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +          </Foundation.Core.Classifier.feature>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Class xmi.id="xmi.259" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fd8">
  +          <Foundation.Core.ModelElement.name>UserSection</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.ModelElement.comment>
  +            <Foundation.Core.Comment xmi.idref="xmi.260"/>
  +          </Foundation.Core.ModelElement.comment>
  +          <Foundation.Core.GeneralizableElement.generalization>
  +            <Foundation.Core.Generalization xmi.idref="xmi.261"/>
  +          </Foundation.Core.GeneralizableElement.generalization>
  +          <Foundation.Core.Classifier.feature>
  +            <Foundation.Core.Attribute xmi.id="xmi.262" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7ffb">
  +              <Foundation.Core.ModelElement.name>eLang</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="private"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Attribute.initialValue>
  +                <Foundation.Data_Types.Expression xmi.id="xmi.263">
  +                  <Foundation.Data_Types.Expression.language>Java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body>0</Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.Expression>
  +              </Foundation.Core.Attribute.initialValue>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.259"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.StructuralFeature.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.131"/>
  +              </Foundation.Core.StructuralFeature.type>
  +            </Foundation.Core.Attribute>
  +            <Foundation.Core.Operation xmi.id="xmi.264" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fd9">
  +              <Foundation.Core.ModelElement.name>UserSection</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.259"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.265"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.266" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fd8">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.264"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.265">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.267">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.259"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.264"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.268" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fd7">
  +              <Foundation.Core.ModelElement.name>~UserSection</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.259"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.269"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.270" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fd6">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.268"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.269">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.271">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.259"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.268"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Attribute xmi.id="xmi.272" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fba">
  +              <Foundation.Core.ModelElement.name>*szName</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="private"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.259"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.StructuralFeature.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.134"/>
  +              </Foundation.Core.StructuralFeature.type>
  +            </Foundation.Core.Attribute>
  +          </Foundation.Core.Classifier.feature>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Class xmi.id="xmi.273" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fd7">
  +          <Foundation.Core.ModelElement.name>Section</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="true"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.GeneralizableElement.specialization>
  +            <Foundation.Core.Generalization xmi.idref="xmi.236"/>
  +            <Foundation.Core.Generalization xmi.idref="xmi.224"/>
  +            <Foundation.Core.Generalization xmi.idref="xmi.214"/>
  +            <Foundation.Core.Generalization xmi.idref="xmi.248"/>
  +            <Foundation.Core.Generalization xmi.idref="xmi.261"/>
  +          </Foundation.Core.GeneralizableElement.specialization>
  +          <Foundation.Core.Classifier.feature>
  +            <Foundation.Core.Operation xmi.id="xmi.274" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fb9">
  +              <Foundation.Core.ModelElement.name>Load</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.273"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.275"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.276" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fb8">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.274"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.277" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fb7">
  +                  <Foundation.Core.ModelElement.name>*szData</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="inout"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.274"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.134"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.275">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.278">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.273"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.274"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Operation xmi.id="xmi.279" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fb6">
  +              <Foundation.Core.ModelElement.name>Parse</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="private"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="false"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.273"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.280"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.281" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fb5">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.279"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.280">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.282">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.273"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.279"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +            <Foundation.Core.Attribute xmi.id="xmi.283" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fb4">
  +              <Foundation.Core.ModelElement.name>*szCode</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="private"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.273"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.StructuralFeature.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.134"/>
  +              </Foundation.Core.StructuralFeature.type>
  +            </Foundation.Core.Attribute>
  +          </Foundation.Core.Classifier.feature>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Generalization xmi.id="xmi.236" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fd0">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Generalization.child>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.235"/>
  +          </Foundation.Core.Generalization.child>
  +          <Foundation.Core.Generalization.parent>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.273"/>
  +          </Foundation.Core.Generalization.parent>
  +        </Foundation.Core.Generalization>
  +        <Foundation.Core.Generalization xmi.id="xmi.224" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fcf">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Generalization.child>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.223"/>
  +          </Foundation.Core.Generalization.child>
  +          <Foundation.Core.Generalization.parent>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.273"/>
  +          </Foundation.Core.Generalization.parent>
  +        </Foundation.Core.Generalization>
  +        <Foundation.Core.Generalization xmi.id="xmi.214" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fce">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Generalization.child>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.213"/>
  +          </Foundation.Core.Generalization.child>
  +          <Foundation.Core.Generalization.parent>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.273"/>
  +          </Foundation.Core.Generalization.parent>
  +        </Foundation.Core.Generalization>
  +        <Foundation.Core.Generalization xmi.id="xmi.248" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fcd">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Generalization.child>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.247"/>
  +          </Foundation.Core.Generalization.child>
  +          <Foundation.Core.Generalization.parent>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.273"/>
  +          </Foundation.Core.Generalization.parent>
  +        </Foundation.Core.Generalization>
  +        <Foundation.Core.Generalization xmi.id="xmi.261" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fcc">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Generalization.child>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.259"/>
  +          </Foundation.Core.Generalization.child>
  +          <Foundation.Core.Generalization.parent>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.273"/>
  +          </Foundation.Core.Generalization.parent>
  +        </Foundation.Core.Generalization>
  +        <Foundation.Core.Association xmi.id="xmi.284" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fc3">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.285" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe8">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.86"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.284"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.247"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.286" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe7">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.284"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.177"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Core.Association xmi.id="xmi.287" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fc1">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.288" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe6">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.86"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.287"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.259"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.289" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe5">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.287"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.177"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Core.Class xmi.id="xmi.290" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fbd">
  +          <Foundation.Core.ModelElement.name>Translator</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.ModelElement.comment>
  +            <Foundation.Core.Comment xmi.idref="xmi.291"/>
  +          </Foundation.Core.ModelElement.comment>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Class xmi.id="xmi.292" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fbc">
  +          <Foundation.Core.ModelElement.name>SyntaxTree</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Class xmi.id="xmi.293" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fbb">
  +          <Foundation.Core.ModelElement.name>SymbolTable</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Association xmi.id="xmi.294" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fb7">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.295" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe4">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.294"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.292"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.296" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe3">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.294"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.290"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Core.Association xmi.id="xmi.297" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fb6">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.298" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe2">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.94"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.297"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.290"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.299" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe1">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.94"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.297"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.115"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Core.Association xmi.id="xmi.300" xmi.uuid="-64--88-100-101-357e9a:ebcd1b641a:-7fb5">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.301" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fe0">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.300"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.293"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.302" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fdf">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.94"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.300"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.290"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.303">
  +          <Foundation.Core.ModelElement.name>Mediator</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +        </Foundation.Extension_Mechanisms.Stereotype>
  +        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.304">
  +          <Foundation.Core.ModelElement.name>Singleton</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Extension_Mechanisms.Stereotype.extendedElement>
  +            <Foundation.Core.ModelElement xmi.idref="xmi.13"/>
  +          </Foundation.Extension_Mechanisms.Stereotype.extendedElement>
  +        </Foundation.Extension_Mechanisms.Stereotype>
  +        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.305">
  +          <Foundation.Core.ModelElement.name>Interpreter</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +        </Foundation.Extension_Mechanisms.Stereotype>
  +        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.306">
  +          <Foundation.Core.ModelElement.name>Interpreter</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +        </Foundation.Extension_Mechanisms.Stereotype>
  +        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.307">
  +          <Foundation.Core.ModelElement.name>Iterator</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +        </Foundation.Extension_Mechanisms.Stereotype>
  +        <Behavioral_Elements.Use_Cases.Actor xmi.id="xmi.308" xmi.uuid="-64--88-100-101-357e9a:ebcd920152:-7ffb">
  +          <Foundation.Core.ModelElement.name>OpenPKG</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +        </Behavioral_Elements.Use_Cases.Actor>
  +        <Behavioral_Elements.Use_Cases.UseCase xmi.id="xmi.309" xmi.uuid="-64--88-100-101-357e9a:ebcd920152:-7ff8">
  +          <Foundation.Core.ModelElement.name>ReadConfig</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.GeneralizableElement.specialization>
  +            <Foundation.Core.Generalization xmi.idref="xmi.310"/>
  +          </Foundation.Core.GeneralizableElement.specialization>
  +        </Behavioral_Elements.Use_Cases.UseCase>
  +        <Behavioral_Elements.Use_Cases.UseCase xmi.id="xmi.311" xmi.uuid="-64--88-100-101-357e9a:ebcd920152:-7ff7">
  +          <Foundation.Core.ModelElement.name>RunCommands</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.GeneralizableElement.generalization>
  +            <Foundation.Core.Generalization xmi.idref="xmi.310"/>
  +          </Foundation.Core.GeneralizableElement.generalization>
  +        </Behavioral_Elements.Use_Cases.UseCase>
  +        <Foundation.Core.Generalization xmi.id="xmi.310" xmi.uuid="-64--88-100-101-357e9a:ebcd920152:-7ff6">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Generalization.child>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.311"/>
  +          </Foundation.Core.Generalization.child>
  +          <Foundation.Core.Generalization.parent>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.309"/>
  +          </Foundation.Core.Generalization.parent>
  +        </Foundation.Core.Generalization>
  +        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.312">
  +          <Foundation.Core.ModelElement.name>include</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +        </Foundation.Extension_Mechanisms.Stereotype>
  +        <Foundation.Core.Association xmi.id="xmi.313" xmi.uuid="-64--88-100-101-357e9a:ebcd920152:-7ff5">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.314" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fd8">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.313"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.308"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.315" xmi.uuid="-115-1-23--126-370f9e:ebd1772bb6:-7fd7">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.313"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.311"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.316">
  +          <Foundation.Core.ModelElement.name>extend</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +        </Foundation.Extension_Mechanisms.Stereotype>
  +        <Foundation.Core.Class xmi.id="xmi.76">
  +          <Foundation.Core.ModelElement.name>int</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Class xmi.id="xmi.134">
  +          <Foundation.Core.ModelElement.name>char</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Class xmi.id="xmi.131">
  +          <Foundation.Core.ModelElement.name>enum</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Class xmi.id="xmi.7">
  +          <Foundation.Core.ModelElement.name>void</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Association xmi.id="xmi.317" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fee">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.318" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fed">
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.ordering xmi.value="unordered"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.targetScope xmi.value="instance"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.94"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.changeability xmi.value="changeable"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.317"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.67"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.319" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fec">
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.94"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.317"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.47"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Core.Association xmi.id="xmi.320" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7feb">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.321" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fea">
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.ordering xmi.value="unordered"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.targetScope xmi.value="instance"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.94"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.changeability xmi.value="changeable"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.320"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.67"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.322" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe9">
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.94"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.320"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.36"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Core.Association xmi.id="xmi.323" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe8">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.324" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe7">
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.ordering xmi.value="unordered"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.targetScope xmi.value="instance"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.94"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.changeability xmi.value="changeable"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.323"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.67"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.325" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fe6">
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.94"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.323"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.57"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Core.Association xmi.id="xmi.326" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fda">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.327" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fd9">
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.ordering xmi.value="unordered"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.targetScope xmi.value="instance"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.86"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.changeability xmi.value="changeable"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.326"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.235"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.328" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fd8">
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.94"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.326"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.177"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Core.Association xmi.id="xmi.329" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fd4">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.330" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fd3">
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.ordering xmi.value="unordered"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.targetScope xmi.value="instance"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.86"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.changeability xmi.value="changeable"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.329"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.223"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.331" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fd2">
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.94"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.329"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.177"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Core.Association xmi.id="xmi.332" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fd1">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Association.connection>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.333" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fd0">
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.ordering xmi.value="unordered"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="none"/>
  +              <Foundation.Core.AssociationEnd.targetScope xmi.value="instance"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.86"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.changeability xmi.value="changeable"/>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.332"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.213"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +            <Foundation.Core.AssociationEnd xmi.id="xmi.334" xmi.uuid="-115-1-23--126-566633:ebdc6962e5:-7fcf">
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.AssociationEnd.isNavigable xmi.value="true"/>
  +              <Foundation.Core.AssociationEnd.aggregation xmi.value="aggregate"/>
  +              <Foundation.Core.AssociationEnd.multiplicity>
  +                <Foundation.Data_Types.Multiplicity xmi.idref="xmi.94"/>
  +              </Foundation.Core.AssociationEnd.multiplicity>
  +              <Foundation.Core.AssociationEnd.association>
  +                <Foundation.Core.Association xmi.idref="xmi.332"/>
  +              </Foundation.Core.AssociationEnd.association>
  +              <Foundation.Core.AssociationEnd.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.177"/>
  +              </Foundation.Core.AssociationEnd.type>
  +            </Foundation.Core.AssociationEnd>
  +          </Foundation.Core.Association.connection>
  +        </Foundation.Core.Association>
  +        <Foundation.Core.Class xmi.id="xmi.335" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7ffd">
  +          <Foundation.Core.ModelElement.name>File</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="true"/>
  +          <Foundation.Core.Class.isActive xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.GeneralizableElement.specialization>
  +            <Foundation.Core.Generalization xmi.idref="xmi.178"/>
  +            <Foundation.Core.Generalization xmi.idref="xmi.37"/>
  +          </Foundation.Core.GeneralizableElement.specialization>
  +          <Foundation.Core.Classifier.feature>
  +            <Foundation.Core.Attribute xmi.id="xmi.336" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7ff9">
  +              <Foundation.Core.ModelElement.name>*szName</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="private"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.335"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.StructuralFeature.type>
  +                <Foundation.Core.Classifier xmi.idref="xmi.134"/>
  +              </Foundation.Core.StructuralFeature.type>
  +            </Foundation.Core.Attribute>
  +            <Foundation.Core.Operation xmi.id="xmi.337" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7ff8">
  +              <Foundation.Core.ModelElement.name>getName</Foundation.Core.ModelElement.name>
  +              <Foundation.Core.ModelElement.visibility xmi.value="public"/>
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.Feature.ownerScope xmi.value="instance"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Operation.isRoot xmi.value="false"/>
  +              <Foundation.Core.Operation.isLeaf xmi.value="false"/>
  +              <Foundation.Core.Operation.isAbstract xmi.value="true"/>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.335"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Operation.method>
  +                <Foundation.Core.Method xmi.idref="xmi.338"/>
  +              </Foundation.Core.Operation.method>
  +              <Foundation.Core.BehavioralFeature.parameter>
  +                <Foundation.Core.Parameter xmi.id="xmi.339" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7ff7">
  +                  <Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
  +                  <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +                  <Foundation.Core.Parameter.kind xmi.value="return"/>
  +                  <Foundation.Core.Parameter.behavioralFeature>
  +                    <Foundation.Core.BehavioralFeature xmi.idref="xmi.337"/>
  +                  </Foundation.Core.Parameter.behavioralFeature>
  +                  <Foundation.Core.Parameter.type>
  +                    <Foundation.Core.Classifier xmi.idref="xmi.7"/>
  +                  </Foundation.Core.Parameter.type>
  +                </Foundation.Core.Parameter>
  +              </Foundation.Core.BehavioralFeature.parameter>
  +            </Foundation.Core.Operation>
  +            <Foundation.Core.Method xmi.id="xmi.338">
  +              <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +              <Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
  +              <Foundation.Core.Method.body>
  +                <Foundation.Data_Types.ProcedureExpression xmi.id="xmi.340">
  +                  <Foundation.Data_Types.Expression.language>java</Foundation.Data_Types.Expression.language>
  +                  <Foundation.Data_Types.Expression.body></Foundation.Data_Types.Expression.body>
  +                </Foundation.Data_Types.ProcedureExpression>
  +              </Foundation.Core.Method.body>
  +              <Foundation.Core.Feature.owner>
  +                <Foundation.Core.Classifier xmi.idref="xmi.335"/>
  +              </Foundation.Core.Feature.owner>
  +              <Foundation.Core.Method.specification>
  +                <Foundation.Core.Operation xmi.idref="xmi.337"/>
  +              </Foundation.Core.Method.specification>
  +            </Foundation.Core.Method>
  +          </Foundation.Core.Classifier.feature>
  +        </Foundation.Core.Class>
  +        <Foundation.Core.Generalization xmi.id="xmi.178" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7ffc">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Generalization.child>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.177"/>
  +          </Foundation.Core.Generalization.child>
  +          <Foundation.Core.Generalization.parent>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.335"/>
  +          </Foundation.Core.Generalization.parent>
  +        </Foundation.Core.Generalization>
  +        <Foundation.Core.Generalization xmi.id="xmi.37" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7fcd">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Generalization.child>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.36"/>
  +          </Foundation.Core.Generalization.child>
  +          <Foundation.Core.Generalization.parent>
  +            <Foundation.Core.GeneralizableElement xmi.idref="xmi.335"/>
  +          </Foundation.Core.Generalization.parent>
  +        </Foundation.Core.Generalization>
  +        <Foundation.Core.Comment xmi.id="xmi.3" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7f9b">
  +          <Foundation.Core.ModelElement.name>Non-persistent
  +Non-serializable.</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Comment.annotatedElement>
  +            <Foundation.Core.ModelElement xmi.idref="xmi.2"/>
  +          </Foundation.Core.Comment.annotatedElement>
  +        </Foundation.Core.Comment>
  +        <Foundation.Core.Comment xmi.id="xmi.116" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7f9a">
  +          <Foundation.Core.ModelElement.name>Processes
  +rcfiles until
  +none left in
  +configuration.</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Comment.annotatedElement>
  +            <Foundation.Core.ModelElement xmi.idref="xmi.115"/>
  +          </Foundation.Core.Comment.annotatedElement>
  +        </Foundation.Core.Comment>
  +        <Foundation.Core.Comment xmi.id="xmi.103" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7f99">
  +          <Foundation.Core.ModelElement.name>Uses OSSP l2
  +library for all
  +our logging.</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Comment.annotatedElement>
  +            <Foundation.Core.ModelElement xmi.idref="xmi.102"/>
  +          </Foundation.Core.Comment.annotatedElement>
  +        </Foundation.Core.Comment>
  +        <Foundation.Core.Comment xmi.id="xmi.291" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7f98">
  +          <Foundation.Core.ModelElement.name>Not to be
  +implemented
  +until a real
  +need is
  +verified.</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Comment.annotatedElement>
  +            <Foundation.Core.ModelElement xmi.idref="xmi.290"/>
  +          </Foundation.Core.Comment.annotatedElement>
  +        </Foundation.Core.Comment>
  +        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.341">
  +          <Foundation.Core.ModelElement.name>realize</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +        </Foundation.Extension_Mechanisms.Stereotype>
  +        <Foundation.Core.Comment xmi.id="xmi.157" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7f8e">
  +          <Foundation.Core.ModelElement.name>A Process instance
  +can use more than
  +one RCFile, but
  +contains only one
  +at a time.</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Comment.annotatedElement>
  +            <Foundation.Core.ModelElement xmi.idref="xmi.156"/>
  +          </Foundation.Core.Comment.annotatedElement>
  +        </Foundation.Core.Comment>
  +        <Foundation.Core.Comment xmi.id="xmi.260" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7f8d">
  +          <Foundation.Core.ModelElement.name>A SecFile instance
  +has at most one
  +UserSection even
  +though the rcfile
  +being parsed can
  +have more than one.</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Comment.annotatedElement>
  +            <Foundation.Core.ModelElement xmi.idref="xmi.259"/>
  +          </Foundation.Core.Comment.annotatedElement>
  +        </Foundation.Core.Comment>
  +        <Model_Management.Package xmi.id="xmi.342" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7f89">
  +          <Foundation.Core.ModelElement.name>RC</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.ModelElement.clientDependency>
  +            <Foundation.Core.Dependency xmi.idref="xmi.343"/>
  +            <Foundation.Core.Dependency xmi.idref="xmi.344"/>
  +            <Foundation.Core.Dependency xmi.idref="xmi.345"/>
  +          </Foundation.Core.ModelElement.clientDependency>
  +        </Model_Management.Package>
  +        <Foundation.Extension_Mechanisms.Stereotype xmi.id="xmi.346">
  +          <Foundation.Core.ModelElement.name>realize</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +        </Foundation.Extension_Mechanisms.Stereotype>
  +        <Model_Management.Package xmi.id="xmi.347" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7f85">
  +          <Foundation.Core.ModelElement.name>Configuration</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.ModelElement.supplierDependency>
  +            <Foundation.Core.Dependency xmi.idref="xmi.343"/>
  +          </Foundation.Core.ModelElement.supplierDependency>
  +        </Model_Management.Package>
  +        <Model_Management.Package xmi.id="xmi.348" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7f83">
  +          <Foundation.Core.ModelElement.name>Processor</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.ModelElement.clientDependency>
  +            <Foundation.Core.Dependency xmi.idref="xmi.349"/>
  +          </Foundation.Core.ModelElement.clientDependency>
  +          <Foundation.Core.ModelElement.supplierDependency>
  +            <Foundation.Core.Dependency xmi.idref="xmi.344"/>
  +          </Foundation.Core.ModelElement.supplierDependency>
  +        </Model_Management.Package>
  +        <Model_Management.Package xmi.id="xmi.350" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7f82">
  +          <Foundation.Core.ModelElement.name>SecFile</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.ModelElement.supplierDependency>
  +            <Foundation.Core.Dependency xmi.idref="xmi.349"/>
  +          </Foundation.Core.ModelElement.supplierDependency>
  +        </Model_Management.Package>
  +        <Foundation.Core.Dependency xmi.id="xmi.343" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7f81">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Dependency.client>
  +            <Foundation.Core.ModelElement xmi.idref="xmi.342"/>
  +          </Foundation.Core.Dependency.client>
  +          <Foundation.Core.Dependency.supplier>
  +            <Foundation.Core.ModelElement xmi.idref="xmi.347"/>
  +          </Foundation.Core.Dependency.supplier>
  +        </Foundation.Core.Dependency>
  +        <Foundation.Core.Dependency xmi.id="xmi.344" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7f7f">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Dependency.client>
  +            <Foundation.Core.ModelElement xmi.idref="xmi.342"/>
  +          </Foundation.Core.Dependency.client>
  +          <Foundation.Core.Dependency.supplier>
  +            <Foundation.Core.ModelElement xmi.idref="xmi.348"/>
  +          </Foundation.Core.Dependency.supplier>
  +        </Foundation.Core.Dependency>
  +        <Model_Management.Package xmi.id="xmi.351" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7f7d">
  +          <Foundation.Core.ModelElement.name>Logger</Foundation.Core.ModelElement.name>
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
  +          <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.ModelElement.supplierDependency>
  +            <Foundation.Core.Dependency xmi.idref="xmi.345"/>
  +          </Foundation.Core.ModelElement.supplierDependency>
  +        </Model_Management.Package>
  +        <Foundation.Core.Dependency xmi.id="xmi.345" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7f7c">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Dependency.client>
  +            <Foundation.Core.ModelElement xmi.idref="xmi.342"/>
  +          </Foundation.Core.Dependency.client>
  +          <Foundation.Core.Dependency.supplier>
  +            <Foundation.Core.ModelElement xmi.idref="xmi.351"/>
  +          </Foundation.Core.Dependency.supplier>
  +        </Foundation.Core.Dependency>
  +        <Foundation.Core.Dependency xmi.id="xmi.349" xmi.uuid="-115-1-23--126-51fc02:ec52b386cb:-7f7b">
  +          <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
  +          <Foundation.Core.ModelElement.namespace>
  +            <Foundation.Core.Namespace xmi.idref="xmi.1"/>
  +          </Foundation.Core.ModelElement.namespace>
  +          <Foundation.Core.Dependency.client>
  +            <Foundation.Core.ModelElement xmi.idref="xmi.348"/>
  +          </Foundation.Core.Dependency.client>
  +          <Foundation.Core.Dependency.supplier>
  +            <Foundation.Core.ModelElement xmi.idref="xmi.350"/>
  +          </Foundation.Core.Dependency.supplier>
  +        </Foundation.Core.Dependency>
  +      </Foundation.Core.Namespace.ownedElement>
  +    </Model_Management.Model>
  +  </XMI.content>
   </XMI>
  Index: ossp-pkg/rc/rc_optimpl.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 rc_optimpl.c
  --- ossp-pkg/rc/rc_optimpl.c	28 Feb 2002 18:24:04 -0000	1.2
  +++ ossp-pkg/rc/rc_optimpl.c	1 Mar 2002 22:48:23 -0000	1.3
  @@ -37,7 +37,7 @@
   
   
   /* Loop through available options */
  -rc_return_t foptProcess(char cOpt)
  +rc_return_t coptProcess(int cOpt)
   {
       switch (cOpt) {
       case 'h':
  @@ -58,10 +58,8 @@
   {
       ex_t Except;
       int  bCaught = 0;
  -    int  nBufpos = 0;           /* For tracking options           */
       char cOpt = 0;              /* For argument parsing           */
       char *szCLIBuf = NULL;
  -    int  nIter = 0;
       popt_context optCon;        /* Context for parsing options    */
   
       struct popt_option optionsTable[] = {
  @@ -115,7 +113,7 @@
       /* Now do options processing */
       while ((cOpt = popt_getnextopt(optCon)) >= 0)
       ex_try {
  -        foptProcess(cOpt);
  +        coptProcess(cOpt);
       }
       ex_catch(Except) {
           if ((rc_return_t)Except.ex_value != RC_ERR_USE)
  Index: ossp-pkg/rc/rc_private.h
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 rc_private.h
  --- ossp-pkg/rc/rc_private.h	28 Feb 2002 18:24:04 -0000	1.5
  +++ ossp-pkg/rc/rc_private.h	1 Mar 2002 22:48:23 -0000	1.6
  @@ -63,10 +63,9 @@
   #include "val.h"
   
   
  -/* Main rc configuration storage */
  -typedef struct {
  -    val_t *pVal; /* Storage of configuration values         */
  -    int nLocks;  /* Server locks, probably not thread-safe  */
  +typedef struct {    /* Main rc configuration storage        */
  +    val_t *pOpt;    /* Storage of configuration values      */
  +    int nLocks;     /* Server locks, not thread-safe though */
   } rc_config_t;
   
   #endif /* __OSSPRC_PRIVATE_H__ */

From ossp-cvs-owner@ossp.org  Sat Mar  2 13:29:07 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CF7837642F; Sat,  2 Mar 2002 13:29:06 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Message-Id: <20020302122906.CF7837642F@mail.ossp.org>
Date: Sat,  2 Mar 2002 13:29:06 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   02-Mar-2002 13:29:06
  Branch: HEAD                             Handle: 2002030212290500

  Modified files:
    ossp-pkg/var            var.c

  Log:
    Code Cleanup Phase IV
    (too much details to describe)

  Summary:
    Revision    Changes     Path
    1.74        +635 -644   ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.73 -r1.74 var.c
  --- ossp-pkg/var/var.c	1 Mar 2002 22:02:40 -0000	1.73
  +++ ossp-pkg/var/var.c	2 Mar 2002 12:29:05 -0000	1.74
  @@ -140,7 +140,9 @@
       size_t buffer_size;
   } tokenbuf_t;
   
  -static void tokenbuf_init(tokenbuf_t *buf)
  +static void 
  +tokenbuf_init(
  +    tokenbuf_t *buf)
   {
       buf->begin = NULL;
       buf->end = NULL;
  @@ -148,7 +150,9 @@
       return;
   }
   
  -static void tokenbuf_set(tokenbuf_t *buf, const char *begin, const char *end, size_t buffer_size)
  +static void 
  +tokenbuf_set(
  +    tokenbuf_t *buf, const char *begin, const char *end, size_t buffer_size)
   {
       buf->begin = begin;
       buf->end = end;
  @@ -156,7 +160,9 @@
       return;
   }
   
  -static void tokenbuf_copy(tokenbuf_t *src, tokenbuf_t *dst)
  +static void 
  +tokenbuf_copy(
  +    tokenbuf_t *src, tokenbuf_t *dst)
   {
       dst->begin = src->begin;
       dst->end = src->end;
  @@ -164,7 +170,9 @@
       return;
   }
   
  -static void tokenbuf_move(tokenbuf_t *src, tokenbuf_t *dst)
  +static void 
  +tokenbuf_move(
  +    tokenbuf_t *src, tokenbuf_t *dst)
   {
       dst->begin = src->begin;
       dst->end = src->end;
  @@ -173,7 +181,9 @@
       return;
   }
   
  -static int tokenbuf_assign(tokenbuf_t *buf, const char *data, size_t len)
  +static int 
  +tokenbuf_assign(
  +    tokenbuf_t *buf, const char *data, size_t len)
   {
       char *p;
   
  @@ -187,7 +197,9 @@
       return 1;
   }
   
  -static int tokenbuf_append(tokenbuf_t *output, const char *data, size_t len)
  +static int 
  +tokenbuf_append(
  +    tokenbuf_t *output, const char *data, size_t len)
   {
       char *new_buffer;
       size_t new_size;
  @@ -241,12 +253,16 @@
       return 1;
   }
   
  -static int tokenbuf_merge(tokenbuf_t *output, tokenbuf_t *input)
  +static int 
  +tokenbuf_merge(
  +    tokenbuf_t *output, tokenbuf_t *input)
   {
       return tokenbuf_append(output, input->begin, input->end - input->begin);
   }
   
  -static void tokenbuf_free(tokenbuf_t *buf)
  +static void 
  +tokenbuf_free(
  +    tokenbuf_t *buf)
   {
       if (buf->begin != NULL && buf->buffer_size > 0)
           free((char *)buf->begin);
  @@ -255,7 +271,9 @@
       return;
   }
   
  -static size_t tokenbuf_toint(tokenbuf_t *number)
  +static size_t 
  +tokenbuf_toint(
  +    tokenbuf_t *number)
   {
       const char *p;
       size_t num;
  @@ -420,48 +438,7 @@
   
   /* forward declarations */
   static int parse_variable(var_t *var, var_parse_t *ctx, const char *begin, const char *end, tokenbuf_t *result);
  -static int parse_command (var_t *var, var_parse_t *ctx, const char *begin, const char *end, tokenbuf_t *data);
  -static int parse_num_exp (var_t *var, var_parse_t *ctx, const char *begin, const char *end, int *result, int *failed);
  -
  -/* parse plain text */
  -static int 
  -parse_text(
  -    var_t *var, var_parse_t *ctx,
  -    const char *begin, const char *end)
  -{
  -    const char *p;
  -
  -    /* parse until delim_init (variable construct) 
  -       or index_open (loop construct) is found */
  -    for (p = begin; p != end; p++) {
  -        if (*p == var->syntax.escape) {
  -            p++; /* skip next character */
  -            if (p == end)
  -                return VAR_ERR_INCOMPLETE_QUOTED_PAIR;
  -        }
  -        else if (*p == var->syntax.delim_init)
  -            break;
  -        else if (   var->syntax.index_open != NUL
  -                 && (   *p == var->syntax.index_open 
  -                     || *p == var->syntax.index_close))
  -            break;
  -    }
  -    return (p - begin);
  -}
  -
  -/* parse variable name */
  -static int 
  -parse_varname(
  -    var_t *var, var_parse_t *ctx,
  -    const char *begin, const char *end)
  -{
  -    const char *p;
  -
  -    /* parse as long as name class characters are found */
  -    for (p = begin; p != end && var->syntax_nameclass[(int)(*p)]; p++)
  -        ;
  -    return (p - begin);
  -}
  +static int parse_numexp (var_t *var, var_parse_t *ctx, const char *begin, const char *end, int *result, int *failed);
   
   /* parse number */
   static int 
  @@ -518,247 +495,78 @@
       return (p - begin);
   }
   
  -/* convert a string into a decimal number */
  -static int 
  -convert_num_exp_read_int(const char **begin, const char *end)
  -{
  -    int num = 0;
  -
  -    do {
  -        num *= 10;
  -        num += **begin - '0';
  -        ++(*begin);
  -    } while (isdigit(**begin) && *begin != end);
  -    return num;
  -}
  -
  -/* parse numerical expression operand */
   static int 
  -parse_num_exp_operand(
  +parse_exptext_or_variable(
       var_t *var, var_parse_t *ctx,
  -    const char *begin, const char *end, 
  -    int *result, 
  -    int *failed)
  +    const char *begin, const char *end,
  +    tokenbuf_t *result)
   {
  -    const char *p;
  +    const char *p = begin;
       tokenbuf_t tmp;
       int rc;
  -    var_parse_t myctx;
   
  -    p = begin;
  +    tokenbuf_init(result);
       tokenbuf_init(&tmp);
   
       if (begin == end)
  -        return VAR_ERR_INCOMPLETE_INDEX_SPEC;
  +        return 0;
   
  -    if (*p == '(') {
  -        rc = parse_num_exp(var, ctx, ++p, end, result, failed);
  +    do {
  +        rc = parse_exptext(var, ctx, p, end);
           if (rc < 0)
  -            return rc;
  -        p += rc;
  -        if (p == end)
  -            return VAR_ERR_INCOMPLETE_INDEX_SPEC;
  -        if (*p != ')')
  -            return VAR_ERR_UNCLOSED_BRACKET_IN_INDEX;
  -        ++p;
  -    }
  -    else if (*p == var->syntax.delim_init) {
  -        ctx = var_parse_push(ctx, &myctx);
  -        ctx->force_expand = 1;
  -        rc = parse_variable(var, ctx, p, end, &tmp);
  -        ctx = var_parse_pop(ctx);
  -        if (rc == VAR_ERR_UNDEFINED_VARIABLE) {
  -            *failed = 1;
  -            ctx = var_parse_push(ctx, &myctx);
  -            ctx->force_expand = 0;
  -            rc = parse_variable(var, ctx, p, end, &tmp);
  -            ctx = var_parse_pop(ctx);
  -            if (rc < 0)
  -                return rc;
  -            p += rc;
  -            *result = 0;
  -        }
  -        else {
  -            if (rc < 0)
  -                return rc;
  +            goto error_return;
  +        if (rc > 0) {
  +            if (!tokenbuf_append(result, p, rc)) {
  +                rc = VAR_ERR_OUT_OF_MEMORY;
  +                goto error_return;
  +            }
               p += rc;
  -            rc = parse_num_exp(var, ctx, tmp.begin, tmp.end, result, failed);
  -            tokenbuf_free(&tmp);
  -            if (rc < 0)
  -                return rc;
  -        }
  -    }
  -    else if (var->syntax.index_mark && *p == var->syntax.index_mark) {
  -        p++;
  -        *result = ctx->index_this;
  -        if (ctx->rel_lookup_flag)
  -            ctx->rel_lookup_cnt++;
  -    }
  -    else if (isdigit(*p)) {
  -        *result = convert_num_exp_read_int(&p, end);
  -    }
  -    else if (*p == '+') {
  -        if (end - p > 1 && isdigit(p[1])) {
  -            p++;
  -            *result = convert_num_exp_read_int(&p, end);
  -        }
  -        else
  -            return VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC;
  -    }
  -    else if (*p == '-') {
  -        if (end - p > 1 && isdigit(p[1])) {
  -            p++;
  -            *result = convert_num_exp_read_int(&p, end);
  -            *result = 0 - *result;
           }
  -        else
  -            return VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC;
  -    }
  -    else
  -        return VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC;
  -
  -    return (p - begin);
  -}
  -
  -/* parse numerical expression */
  -static int 
  -parse_num_exp(
  -    var_t *var, var_parse_t *ctx,
  -    const char *begin, const char *end, 
  -    int *result, int *failed)
  -{
  -    const char *p;
  -    char operator;
  -    int right;
  -    int rc;
  -
  -    p = begin;
  -    if (p == end)
  -        return VAR_ERR_INCOMPLETE_INDEX_SPEC;
  -
  -    rc = parse_num_exp_operand(var, ctx, p, end, result, failed);
  -    if (rc < 0)
  -        return rc;
  -    p += rc;
   
  -    while (p != end) {
  -        if (*p == '+' || *p == '-') {
  -            operator = *p++;
  -            rc = parse_num_exp(var, ctx, p, end, &right, failed);
  -            if (rc < 0)
  -                return rc;
  -            p += rc;
  -            if (operator == '+')
  -                *result = *result + right;
  -            else
  -                *result = *result - right;
  -        }
  -        else if (*p == '*' || *p == '/' || *p == '%') {
  -            operator = *p++;
  -            rc = parse_num_exp_operand(var, ctx, p, end, &right, failed);
  -            if (rc < 0)
  -                return rc;
  +        rc = parse_variable(var, ctx, p, end, &tmp);
  +        if (rc < 0)
  +            goto error_return;
  +        if (rc > 0) {
               p += rc;
  -            if (operator == '*') {
  -                *result = *result * right;
  -            }
  -            else if (operator == '/') {
  -                if (right == 0) {
  -                    if (*failed)
  -                        *result = 0;
  -                    else
  -                        return VAR_ERR_DIVISION_BY_ZERO_IN_INDEX;
  -                }
  -                else
  -                    *result = *result / right;
  -            }
  -            else if (operator == '%') {
  -                if (right == 0) {
  -                    if (*failed)
  -                        *result = 0;
  -                    else
  -                        return VAR_ERR_DIVISION_BY_ZERO_IN_INDEX;
  -                }
  -                else
  -                    *result = *result % right;
  +            if (!tokenbuf_append
  +                (result, tmp.begin, tmp.end - tmp.begin)) {
  +                rc = VAR_ERR_OUT_OF_MEMORY;
  +                goto error_return;
               }
           }
  -        else
  -            break;
  -    }
  -    return p - begin;
  -}
  -
  -/* lookup a variable value by callin the callback function */
  -static int 
  -lookup_value(
  -    var_t *var, var_parse_t *ctx,
  -    const char  *var_ptr, size_t  var_len, int     var_idx,
  -    const char **val_ptr, size_t *val_len, size_t *val_size)
  -{
  -    char buf[1];
  -    int rc;
  -
  -    /* pass through to original callback */
  -    rc = (*var->cb_value_fct)(var, var->cb_value_ctx,
  -                              var_ptr, var_len, var_idx, 
  -                              val_ptr, val_len, val_size);
  +    } while (rc > 0);
   
  -    /* convert undefined variable into empty variable if relative
  -       lookups are counted. This is the case inside an active loop
  -       construct if no limits are given. There the parse_input()
  -       has to proceed until all variables have undefined values. 
  -       This trick here allows it to determine this case. */
  -    if (ctx->rel_lookup_flag && rc == VAR_ERR_UNDEFINED_VARIABLE) {
  -        ctx->rel_lookup_cnt--;
  -        buf[0] = NUL;
  -        *val_ptr  = buf;
  -        *val_len  = 0;
  -        *val_size = 0;
  -        return VAR_OK;
  -    }
  +    tokenbuf_free(&tmp);
  +    return p - begin;
   
  +  error_return:
  +    tokenbuf_free(&tmp);
  +    tokenbuf_free(result);
       return rc;
   }
   
   static int 
  -parse_expression(
  +parse_substext_or_variable(
       var_t *var, var_parse_t *ctx,
       const char *begin, const char *end,
       tokenbuf_t *result)
   {
       const char *p = begin;
  -    const char *data;
  -    size_t len, buffer_size;
  -    int failed = 0;
  -    int rc;
  -    int idx = 0;
  -    tokenbuf_t name;
       tokenbuf_t tmp;
  +    int rc;
   
  -    /* Clear the tokenbufs to make sure we have a defined state. */
  -
  -    tokenbuf_init(&name);
  -    tokenbuf_init(&tmp);
       tokenbuf_init(result);
  +    tokenbuf_init(&tmp);
   
  -    /* Expect STARTDELIM. */
  -
  -    if (p == end || *p != var->syntax.delim_open)
  +    if (begin == end)
           return 0;
   
  -    if (++p == end)
  -        return VAR_ERR_INCOMPLETE_VARIABLE_SPEC;
  -
  -    /* Get the name of the variable to expand. The name may consist of
  -       an arbitrary number of VARNAMEs and VARIABLEs. */
  -
       do {
  -        rc = parse_varname(var, ctx, p, end);
  +        rc = parse_substext(var, ctx, p, end);
           if (rc < 0)
               goto error_return;
           if (rc > 0) {
  -            if (!tokenbuf_append(&name, p, rc)) {
  +            if (!tokenbuf_append(result, p, rc)) {
                   rc = VAR_ERR_OUT_OF_MEMORY;
                   goto error_return;
               }
  @@ -769,293 +577,17 @@
           if (rc < 0)
               goto error_return;
           if (rc > 0) {
  -            if (!tokenbuf_append(&name, tmp.begin, tmp.end - tmp.begin)) {
  +            p += rc;
  +            if (!tokenbuf_append
  +                (result, tmp.begin, tmp.end - tmp.begin)) {
                   rc = VAR_ERR_OUT_OF_MEMORY;
                   goto error_return;
               }
  -            p += rc;
           }
       } while (rc > 0);
   
  -    /* We must have the complete variable name now, so make sure we
  -       do. */
  -
  -    if (name.begin == name.end) {
  -        if (ctx->force_expand) {
  -            rc = VAR_ERR_INCOMPLETE_VARIABLE_SPEC;
  -            goto error_return;
  -        }
  -        else {
  -            /* If no force_expand is requested, we have to back-off.
  -               We're not sure whether our approach here is 100% correct,
  -               because it _could_ have side-effects according to Peter
  -               Simons, but as far as we know and tried it, it is
  -               correct. But be warned -- RSE */
  -            result->begin = begin - 1;
  -            result->end = p;
  -            result->buffer_size = 0;
  -            goto goahead;
  -        }
  -    }
  -
  -    /* If the next token is START-INDEX, read the index specification. */
  -
  -    if (var->syntax.index_open && *p == var->syntax.index_open) {
  -        rc = parse_num_exp(var, ctx, ++p, end, &idx, &failed);
  -        if (rc < 0)
  -            goto error_return;
  -        if (rc == 0) {
  -            rc = VAR_ERR_INCOMPLETE_INDEX_SPEC;
  -            goto error_return;
  -        }
  -        p += rc;
  -
  -        if (p == end) {
  -            rc = VAR_ERR_INCOMPLETE_INDEX_SPEC;
  -            goto error_return;
  -        }
  -        if (*p != var->syntax.index_close) {
  -            rc = VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC;
  -            goto error_return;
  -        }
  -        p++;
  -    }
  -
  -    /* Now we have the name of the variable stored in "name". The next
  -       token here must either be an END-DELIM or a ':'. */
  -
  -    if (p == end || (*p != var->syntax.delim_close && *p != ':')) {
  -        rc = VAR_ERR_INCOMPLETE_VARIABLE_SPEC;
  -        goto error_return;
  -    }
  -    p++;
  -
  -    /* Use the lookup callback to get the variable's contents. */
  -
  -    if (failed) {
  -        result->begin = begin - 1;
  -        result->end = p;
  -        result->buffer_size = 0;
  -    }
  -    else {
  -        rc = lookup_value(var, ctx, name.begin, name.end - name.begin, idx,
  -                          &data, &len, &buffer_size);
  -        if (rc == VAR_ERR_UNDEFINED_VARIABLE) {
  -            /* The variable is undefined. What we'll do now depends on the
  -               force_expand flag. */
  -            if (ctx->force_expand)
  -                goto error_return;
  -
  -            /* Initialize result to point back to the original text in
  -               the buffer. */
  -            result->begin = begin - 1;
  -            result->end = p;
  -            result->buffer_size = 0;
  -            failed = 1;
  -        }
  -        else if (rc < 0 /* != VAR_OK */) {
  -            goto error_return;
  -        }
  -        else {
  -            /* The preliminary result is the contents of the variable.
  -               This may be modified by the commands that may follow. */
  -            result->begin = data;
  -            result->end = data + len;
  -            result->buffer_size = buffer_size;
  -        }
  -    }
  -
  -    goahead:
  -    if (p[-1] == ':') {
  -        /* Parse and execute commands. */
  -
  -        tokenbuf_free(&tmp);
  -        p--;
  -        while (p != end && *p == ':') {
  -            p++;
  -            if (!failed)
  -                rc = parse_command(var, ctx, p, end, result);
  -            else
  -                rc = parse_command(var, ctx, p, end, &tmp);
  -            if (rc < 0)
  -                goto error_return;
  -            p += rc;
  -            if (failed)
  -                result->end += rc;
  -        }
  -
  -        if (p == end || *p != var->syntax.delim_close) {
  -            rc = VAR_ERR_INCOMPLETE_VARIABLE_SPEC;
  -            goto error_return;
  -        }
  -        p++;
  -        if (failed)
  -            result->end++;
  -    }
  -
  -    /* Exit gracefully. */
  -
  -    tokenbuf_free(&name);
  -    tokenbuf_free(&tmp);
  -    return p - begin;
  -
  -    /* Exit in case of an error. */
  -
  -  error_return:
  -    tokenbuf_free(&name);
  -    tokenbuf_free(&tmp);
  -    tokenbuf_free(result);
  -    return rc;
  -}
  -
  -static int 
  -parse_variable(
  -    var_t *var, 
  -    var_parse_t *ctx,
  -    const char *begin, const char *end,
  -    tokenbuf_t *result)
  -{
  -    const char *p = begin;
  -    const char *data;
  -    size_t len, buffer_size;
  -    int rc, rc2;
  -
  -    /* Clear the result tokenbuf to make sure we're in a defined
  -       state. */
  -
  -    tokenbuf_init(result);
  -
  -    /* Expect VARINIT. */
  -
  -    if (p == end || *p != var->syntax.delim_init)
  -        return 0;
  -
  -    if (++p == end)
  -        return VAR_ERR_INCOMPLETE_VARIABLE_SPEC;
  -
  -    /* Try to read the variable name. If that fails, we're parsing a
  -       complex expression. */
  -
  -    rc = parse_varname(var, ctx, p, end);
  -    if (rc < 0)
  -        return rc;
  -    if (rc > 0) {
  -        rc2 = lookup_value(var, ctx, p, rc, 0, &data, &len, &buffer_size);
  -        if (rc2 == VAR_ERR_UNDEFINED_VARIABLE && !ctx->force_expand) {
  -            result->begin = begin;
  -            result->end = begin + 1 + rc;
  -            result->buffer_size = 0;
  -            return 1 + rc;
  -        }
  -        if (rc2 < 0 /* != VAR_OK */)
  -            return rc2;
  -        result->begin = data;
  -        result->end = data + len;
  -        result->buffer_size = buffer_size;
  -        return 1 + rc;
  -    }
  -
  -    /* OK, we're dealing with a complex expression here. */
  -
  -    rc = parse_expression(var, ctx, p, end, result);
  -    if (rc > 0)
  -        rc++;
  -    return rc;
  -}
  -
  -static int 
  -parse_exptext_or_variable(
  -    var_t *var, var_parse_t *ctx,
  -    const char *begin, const char *end,
  -    tokenbuf_t *result)
  -{
  -    const char *p = begin;
  -    tokenbuf_t tmp;
  -    int rc;
  -
  -    tokenbuf_init(result);
  -    tokenbuf_init(&tmp);
  -
  -    if (begin == end)
  -        return 0;
  -
  -    do {
  -        rc = parse_exptext(var, ctx, p, end);
  -        if (rc < 0)
  -            goto error_return;
  -        if (rc > 0) {
  -            if (!tokenbuf_append(result, p, rc)) {
  -                rc = VAR_ERR_OUT_OF_MEMORY;
  -                goto error_return;
  -            }
  -            p += rc;
  -        }
  -
  -        rc = parse_variable(var, ctx, p, end, &tmp);
  -        if (rc < 0)
  -            goto error_return;
  -        if (rc > 0) {
  -            p += rc;
  -            if (!tokenbuf_append
  -                (result, tmp.begin, tmp.end - tmp.begin)) {
  -                rc = VAR_ERR_OUT_OF_MEMORY;
  -                goto error_return;
  -            }
  -        }
  -    } while (rc > 0);
  -
  -    tokenbuf_free(&tmp);
  -    return p - begin;
  -
  -  error_return:
  -    tokenbuf_free(&tmp);
  -    tokenbuf_free(result);
  -    return rc;
  -}
  -
  -static int 
  -parse_substext_or_variable(
  -    var_t *var, var_parse_t *ctx,
  -    const char *begin, const char *end,
  -    tokenbuf_t *result)
  -{
  -    const char *p = begin;
  -    tokenbuf_t tmp;
  -    int rc;
  -
  -    tokenbuf_init(result);
  -    tokenbuf_init(&tmp);
  -
  -    if (begin == end)
  -        return 0;
  -
  -    do {
  -        rc = parse_substext(var, ctx, p, end);
  -        if (rc < 0)
  -            goto error_return;
  -        if (rc > 0) {
  -            if (!tokenbuf_append(result, p, rc)) {
  -                rc = VAR_ERR_OUT_OF_MEMORY;
  -                goto error_return;
  -            }
  -            p += rc;
  -        }
  -
  -        rc = parse_variable(var, ctx, p, end, &tmp);
  -        if (rc < 0)
  -            goto error_return;
  -        if (rc > 0) {
  -            p += rc;
  -            if (!tokenbuf_append
  -                (result, tmp.begin, tmp.end - tmp.begin)) {
  -                rc = VAR_ERR_OUT_OF_MEMORY;
  -                goto error_return;
  -            }
  -        }
  -    } while (rc > 0);
  -
  -    tokenbuf_free(&tmp);
  -    return p - begin;
  +    tokenbuf_free(&tmp);
  +    return p - begin;
   
     error_return:
       tokenbuf_free(&tmp);
  @@ -1161,14 +693,12 @@
       num2 = tokenbuf_toint(number2);
   
       /* Determine begin of result string. */
  -
       if ((data->end - data->begin) < num1)
           return VAR_ERR_OFFSET_OUT_OF_BOUNDS;
       else
           p = data->begin + num1;
   
       /* If num2 is zero, we copy the rest from there. */
  -
       if (num2 == 0) {
           if (!tokenbuf_assign(&res, p, data->end - p))
               return VAR_ERR_OUT_OF_MEMORY;
  @@ -1323,7 +853,6 @@
   
           /* Copy the pattern and the data to our own buffer to make
              sure they're terminated with a null byte. */
  -
           if (!tokenbuf_assign(&tmp, search->begin, search->end - search->begin))
               return VAR_ERR_OUT_OF_MEMORY;
           if (!tokenbuf_assign(&mydata, data->begin, data->end - data->begin)) {
  @@ -1332,7 +861,6 @@
           }
   
           /* Compile the pattern. */
  -
           rc = regcomp(&preg, tmp.begin, REG_NEWLINE | REG_EXTENDED|((case_insensitive)?REG_ICASE:0));
           tokenbuf_free(&tmp);
           if (rc != 0) {
  @@ -1340,9 +868,7 @@
               return VAR_ERR_INVALID_REGEX_IN_REPLACE;
           }
   
  -        /* Match the pattern and create the result string in the tmp
  -           buffer. */
  -
  +        /* Match the pattern and create the result string in the tmp buffer. */
           for (p = mydata.begin; p != mydata.end; ) {
               if (p == mydata.begin || p[-1] == '\n')
                   regexec_flag = 0;
  @@ -1405,6 +931,7 @@
       return VAR_OK;
   }
   
  +/* operation: padding */
   static int 
   op_padding(
       tokenbuf_t *data, 
  @@ -1413,9 +940,10 @@
       char position)
   {
       tokenbuf_t result;
  -    size_t width = tokenbuf_toint(widthstr);
  +    size_t width;
       int i;
   
  +    width = tokenbuf_toint(widthstr);
       if (fill->begin == fill->end)
           return VAR_ERR_EMPTY_PADDING_FILL_STRING;
   
  @@ -1466,7 +994,6 @@
           i = (width - (data->end - data->begin)) / 2;
           if (i > 0) {
               /* Create the prefix. */
  -
               i = i / (fill->end - fill->begin);
               while (i > 0) {
                   if (!tokenbuf_append(&result, fill->begin, fill->end - fill->begin)) {
  @@ -1483,14 +1010,12 @@
               }
   
               /* Append the actual data string. */
  -
               if (!tokenbuf_append(&result, data->begin, data->end - data->begin)) {
                   tokenbuf_free(&result);
                   return VAR_ERR_OUT_OF_MEMORY;
               }
   
               /* Append the suffix. */
  -
               i = width - (result.end - result.begin);
               i = i / (fill->end - fill->begin);
               while (i > 0) {
  @@ -1508,7 +1033,6 @@
               }
   
               /* Move string from temporary buffer to data buffer. */
  -
               tokenbuf_free(data);
               tokenbuf_move(&result, data);
           }
  @@ -1517,101 +1041,105 @@
       return VAR_OK;
   }
   
  +/* XXX */
  +
  +/* parse an operation (":x...") */
   static int 
  -parse_command(
  +parse_operation(
       var_t *var, var_parse_t *ctx,
       const char *begin, const char *end,
       tokenbuf_t *data)
   {
  -    const char *p = begin;
  +    const char *p;
       tokenbuf_t tmptokbuf;
       tokenbuf_t search, replace, flags;
       tokenbuf_t number1, number2;
       int isrange;
       int rc;
  +    char *ptr;
   
  +    /* initialization */
       tokenbuf_init(&tmptokbuf);
       tokenbuf_init(&search);
       tokenbuf_init(&replace);
       tokenbuf_init(&flags);
       tokenbuf_init(&number1);
       tokenbuf_init(&number2);
  -
  -    if (begin == end)
  +    p = begin;
  +    if (p == end)
           return 0;
   
  +    /* dispatch through the first operation character */
       switch (tolower(*p)) {
  -        case 'l':                   /* Turn data to lowercase. */
  -            if (data->begin) {
  -                char *ptr;
  -                /* If the buffer does not live in an allocated buffer,
  +        case 'l': {
  +            /* turn value to lowercase. */
  +            if (data->begin != NULL) {
  +                /* if the buffer does not live in an allocated buffer,
                      we have to copy it before modifying the contents. */
  -
                   if (data->buffer_size == 0) {
                       if (!tokenbuf_assign(data, data->begin, data->end - data->begin)) {
                           rc = VAR_ERR_OUT_OF_MEMORY;
                           goto error_return;
                       }
                   }
  -                for (ptr = (char *)data->begin; ptr != data->end; ++ptr)
  -                    *ptr = tolower(*ptr);
  +                /* convert value */
  +                for (ptr = (char *)data->begin; ptr != data->end; ptr++)
  +                    *ptr = (char)tolower((int)(*ptr));
               }
               p++;
               break;
  -
  -        case 'u':                   /* Turn data to uppercase. */
  -            if (data->begin) {
  -                char *ptr;
  +        }
  +        case 'u': {
  +            /* turn value to uppercase. */
  +            if (data->begin != NULL) {
  +                /* if the buffer does not live in an allocated buffer,
  +                   we have to copy it before modifying the contents. */
                   if (data->buffer_size == 0) {
  -                    if (!tokenbuf_assign
  -                        (data, data->begin, data->end - data->begin)) {
  +                    if (!tokenbuf_assign(data, data->begin, data->end - data->begin)) {
                           rc = VAR_ERR_OUT_OF_MEMORY;
                           goto error_return;
                       }
                   }
  -                for (ptr = (char *) data->begin; ptr != data->end; ++ptr)
  -                    *ptr = toupper(*ptr);
  +                /* convert value */
  +                for (ptr = (char *)data->begin; ptr != data->end; ptr++)
  +                    *ptr = (char)toupper((int)(*ptr));
               }
  -            ++p;
  +            p++;
               break;
  -
  -        case 'o':                   /* Cut out substrings. */
  -            ++p;
  +        }
  +        case 'o': {
  +            /* cut out substring of value. */
  +            p++;
               rc = parse_number(var, ctx, p, end);
               if (rc == 0) {
                   rc = VAR_ERR_MISSING_START_OFFSET;
                   goto error_return;
               }
  -            number1.begin = p;
  -            number1.end = p + rc;
  -            number1.buffer_size = 0;
  +            tokenbuf_set(&number1, p, p + rc, 0);
               p += rc;
  -
               if (*p == ',') {
                   isrange = 0;
  -                ++p;
  +                p++;
               } else if (*p == '-') {
                   isrange = 1;
  -                ++p;
  +                p++;
               } else {
                   rc = VAR_ERR_INVALID_OFFSET_DELIMITER;
                   goto error_return;
               }
  -
               rc = parse_number(var, ctx, p, end);
  -            number2.begin = p;
  -            number2.end = p + rc;
  -            number2.buffer_size = 0;
  +            tokenbuf_set(&number2, p, p + rc, 0);
               p += rc;
  -            if (data->begin) {
  +            if (data->begin != NULL) {
                   rc = op_cut_out_offset(data, &number1, &number2, isrange);
                   if (rc < 0)
                       goto error_return;
               }
               break;
  -
  -        case '#':                   /* Substitute length of the string. */
  -            if (data->begin) {
  +        }
  +        case '#': {
  +            /* determine length of the value */
  +            if (data->begin != NULL) {
                   char buf[((sizeof(int)*8)/3)+10]; /* sufficient size: <#bits> x log_10(2) + safety */
                   sprintf(buf, "%d", (int)(data->end - data->begin));
                   tokenbuf_free(data);
  @@ -1620,10 +1148,11 @@
                       goto error_return;
                   }
               }
  -            ++p;
  +            p++;
               break;
  -
  -        case '-':                   /* Substitute parameter if data is empty. */
  +        }
  +        case '-': {
  +            /* substitute parameter if data is empty */
               p++;
               rc = parse_exptext_or_variable(var, ctx, p, end, &tmptokbuf);
               if (rc < 0)
  @@ -1638,8 +1167,9 @@
                   tokenbuf_move(&tmptokbuf, data);
               }
               break;
  -
  -        case '*':                   /* Return "" if data is not empty, parameter otherwise. */
  +        }
  +        case '*': {
  +            /* substitute empty string if data is not empty, parameter otherwise. */
               p++;
               rc = parse_exptext_or_variable(var, ctx, p, end, &tmptokbuf);
               if (rc < 0)
  @@ -1660,8 +1190,9 @@
                   }
               }
               break;
  -
  -        case '+':                   /* Substitute parameter if data is not empty. */
  +        }
  +        case '+': {
  +            /* substitute parameter if data is not empty. */
               p++;
               rc = parse_exptext_or_variable(var, ctx, p, end, &tmptokbuf);
               if (rc < 0)
  @@ -1676,150 +1207,128 @@
                   tokenbuf_move(&tmptokbuf, data);
               }
               break;
  -
  -        case 's':                   /* Search and replace. */
  +        }
  +        case 's': {
  +            /* search and replace. */
               p++;
  -
               if (*p != '/')
                   return VAR_ERR_MALFORMATTED_REPLACE;
               p++;
  -
               rc = parse_substext_or_variable(var, ctx, p, end, &search);
               if (rc < 0)
                   goto error_return;
               p += rc;
  -
               if (*p != '/') {
                   rc = VAR_ERR_MALFORMATTED_REPLACE;
                   goto error_return;
               }
               p++;
  -
               rc = parse_substext_or_variable(var, ctx, p, end, &replace);
               if (rc < 0)
                   goto error_return;
               p += rc;
  -
               if (*p != '/') {
                   rc = VAR_ERR_MALFORMATTED_REPLACE;
                   goto error_return;
               }
               p++;
  -
               rc = parse_exptext(var, ctx, p, end);
               if (rc < 0)
                   goto error_return;
  -            flags.begin = p;
  -            flags.end = p + rc;
  -            flags.buffer_size = 0;
  +            tokenbuf_set(&flags, p, p + rc, 0);
               p += rc;
  -
  -            if (data->begin) {
  +            if (data->begin != NULL) {
                   rc = op_search_and_replace(data, &search, &replace, &flags);
                   if (rc < 0)
                       goto error_return;
               }
               break;
  -
  -        case 'y':                   /* Transpose characters from class A to class B. */
  +        }
  +        case 'y': {
  +            /* transpose characters from class A to class B. */
               p++;
  -
               if (*p != '/')
                   return VAR_ERR_MALFORMATTED_TRANSPOSE;
               p++;
  -
               rc = parse_substext_or_variable(var, ctx, p, end, &search);
               if (rc < 0)
                   goto error_return;
               p += rc;
  -
               if (*p != '/') {
                   rc = VAR_ERR_MALFORMATTED_TRANSPOSE;
                   goto error_return;
               }
               p++;
  -
               rc = parse_substext_or_variable(var, ctx, p, end, &replace);
               if (rc < 0)
                   goto error_return;
               p += rc;
  -
               if (*p != '/') {
                   rc = VAR_ERR_MALFORMATTED_TRANSPOSE;
                   goto error_return;
               } else
  -                ++p;
  -
  +                p++;
               if (data->begin) {
                   rc = op_transpose(data, &search, &replace);
                   if (rc < 0)
                       goto error_return;
               }
               break;
  -
  -
  -        case 'p':                   /* Padding. */
  +        }
  +        case 'p': {
  +            /* padding. */
               p++;
  -
               if (*p != '/')
                   return VAR_ERR_MALFORMATTED_PADDING;
               p++;
  -
               rc = parse_number(var, ctx, p, end);
               if (rc == 0) {
                   rc = VAR_ERR_MISSING_PADDING_WIDTH;
                   goto error_return;
               }
  -            number1.begin = p;
  -            number1.end = p + rc;
  -            number1.buffer_size = 0;
  +            tokenbuf_set(&number1, p, p + rc, 0);
               p += rc;
  -
               if (*p != '/') {
                   rc = VAR_ERR_MALFORMATTED_PADDING;
                   goto error_return;
               }
               p++;
  -
               rc = parse_substext_or_variable(var, ctx, p, end, &replace);
               if (rc < 0)
                   goto error_return;
               p += rc;
  -
               if (*p != '/') {
                   rc = VAR_ERR_MALFORMATTED_PADDING;
                   goto error_return;
               }
               p++;
  -
               if (*p != 'l' && *p != 'c' && *p != 'r') {
                   rc = VAR_ERR_MALFORMATTED_PADDING;
                   goto error_return;
               }
               p++;
  -
               if (data->begin) {
                   rc = op_padding(data, &number1, &replace, p[-1]);
                   if (rc < 0)
                       goto error_return;
               }
               break;
  -
  +        }
           default:
               return VAR_ERR_UNKNOWN_COMMAND_CHAR;
       }
   
  -    /* Exit gracefully. */
  -
  +    /* return successfully */
       tokenbuf_free(&tmptokbuf);
       tokenbuf_free(&search);
       tokenbuf_free(&replace);
       tokenbuf_free(&flags);
       tokenbuf_free(&number1);
       tokenbuf_free(&number2);
  -    return p - begin;
  +    return (p - begin);
   
  -  error_return:
  +    /* return with an error */
  +    error_return:
       tokenbuf_free(data);
       tokenbuf_free(&tmptokbuf);
       tokenbuf_free(&search);
  @@ -1830,11 +1339,467 @@
       return rc;
   }
   
  +/* parse an integer number ("123") */
  +static int 
  +parse_integer(
  +    var_t *var, var_parse_t *ctx,
  +    const char *begin, const char *end,
  +    int *result)
  +{
  +    const char *p;
  +
  +    p = begin;
  +    (*result) = 0;
  +    while (isdigit(*p) && p != end) {
  +        (*result) *= 10;
  +        (*result) += (*p - '0');
  +        p++;
  +    }
  +    return (p - begin);
  +}
  +
  +/* parse numerical expression operand */
  +static int 
  +parse_numexp_operand(
  +    var_t *var, var_parse_t *ctx,
  +    const char *begin, const char *end, 
  +    int *result, int *failed)
  +{
  +    const char *p;
  +    tokenbuf_t tmp;
  +    int rc;
  +    var_parse_t myctx;
  +
  +    /* initialization */
  +    p = begin;
  +    tokenbuf_init(&tmp);
  +    if (p == end)
  +        return VAR_ERR_INCOMPLETE_INDEX_SPEC;
  +
  +    /* parse opening numerical expression */
  +    if (*p == '(') {
  +        /* parse inner numerical expression */
  +        rc = parse_numexp(var, ctx, ++p, end, result, failed);
  +        if (rc < 0)
  +            return rc;
  +        p += rc;
  +        if (p == end)
  +            return VAR_ERR_INCOMPLETE_INDEX_SPEC;
  +        /* parse closing parenthesis */
  +        if (*p != ')')
  +            return VAR_ERR_UNCLOSED_BRACKET_IN_INDEX;
  +        p++;
  +    }
  +    /* parse contained variable */
  +    else if (*p == var->syntax.delim_init) {
  +        /* parse variable with forced expansion */
  +        ctx = var_parse_push(ctx, &myctx);
  +        ctx->force_expand = 1;
  +        rc = parse_variable(var, ctx, p, end, &tmp);
  +        ctx = var_parse_pop(ctx);
  +
  +        if (rc == VAR_ERR_UNDEFINED_VARIABLE) {
  +            *failed = 1;
  +            /* parse variable without forced expansion */
  +            ctx = var_parse_push(ctx, &myctx);
  +            ctx->force_expand = 0;
  +            rc = parse_variable(var, ctx, p, end, &tmp);
  +            ctx = var_parse_pop(ctx);
  +            if (rc < 0)
  +                return rc;
  +            p += rc;
  +            *result = 0;
  +        }
  +        else if (rc < 0)
  +            return rc;
  +        else {
  +            p += rc;
  +            /* parse remaining numerical expression */
  +            rc = parse_numexp(var, ctx, tmp.begin, tmp.end, result, failed);
  +            tokenbuf_free(&tmp);
  +            if (rc < 0)
  +                return rc;
  +        }
  +    }
  +    /* parse relative index mark ("#") */
  +    else if (   var->syntax.index_mark != NUL 
  +             && *p == var->syntax.index_mark) {
  +        p++;
  +        *result = ctx->index_this;
  +        if (ctx->rel_lookup_flag)
  +            ctx->rel_lookup_cnt++;
  +    }
  +    /* parse plain integer number */
  +    else if (isdigit(*p)) {
  +        rc = parse_integer(var, ctx, p, end, result);
  +        p += rc;
  +    }
  +    /* parse signed positive integer number */
  +    else if (*p == '+') {
  +        if ((end - p) > 1 && isdigit(p[1])) {
  +            p++;
  +            rc = parse_integer(var, ctx, p, end, result);
  +            p += rc;
  +        }
  +        else
  +            return VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC;
  +    }
  +    /* parse signed negative integer number */
  +    else if (*p == '-') {
  +        if (end - p > 1 && isdigit(p[1])) {
  +            p++;
  +            rc = parse_integer(var, ctx, p, end, result);
  +            *result = -(*result);
  +            p += rc;
  +        }
  +        else
  +            return VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC;
  +    }
  +    /* else we failed to parse anything reasonable */
  +    else
  +        return VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC;
  +
  +    return (p - begin);
  +}
  +
  +/* parse numerical expression ("x+y") */
  +static int 
  +parse_numexp(
  +    var_t *var, var_parse_t *ctx,
  +    const char *begin, const char *end, 
  +    int *result, int *failed)
  +{
  +    const char *p;
  +    char operator;
  +    int right;
  +    int rc;
  +
  +    /* initialization */
  +    p = begin;
  +    if (p == end)
  +        return VAR_ERR_INCOMPLETE_INDEX_SPEC;
  +
  +    /* parse left numerical operand */
  +    rc = parse_numexp_operand(var, ctx, p, end, result, failed);
  +    if (rc < 0)
  +        return rc;
  +    p += rc;
  +
  +    /* parse numerical operator */
  +    while (p != end) {
  +        if (*p == '+' || *p == '-') {
  +            operator = *p++;
  +            /* recursively parse right operand (light binding) */
  +            rc = parse_numexp(var, ctx, p, end, &right, failed);
  +            if (rc < 0)
  +                return rc;
  +            p += rc;
  +            if (operator == '+')
  +                *result = (*result + right);
  +            else
  +                *result = (*result - right);
  +        }
  +        else if (*p == '*' || *p == '/' || *p == '%') {
  +            operator = *p++;
  +            /* recursively parse right operand (string binding) */
  +            rc = parse_numexp_operand(var, ctx, p, end, &right, failed);
  +            if (rc < 0)
  +                return rc;
  +            p += rc;
  +            if (operator == '*')
  +                *result = (*result * right);
  +            else if (operator == '/') {
  +                if (right == 0) {
  +                    if (*failed)
  +                        *result = 0;
  +                    else
  +                        return VAR_ERR_DIVISION_BY_ZERO_IN_INDEX;
  +                }
  +                else
  +                    *result = (*result / right);
  +            }
  +            else if (operator == '%') {
  +                if (right == 0) {
  +                    if (*failed)
  +                        *result = 0;
  +                    else
  +                        return VAR_ERR_DIVISION_BY_ZERO_IN_INDEX;
  +                }
  +                else
  +                    *result = (*result % right);
  +            }
  +        }
  +        else
  +            break;
  +    }
  +
  +    /* return amount of parsed input */
  +    return (p - begin);
  +}
  +
  +/* parse variable name ("abc") */
  +static int 
  +parse_name(
  +    var_t *var, var_parse_t *ctx,
  +    const char *begin, const char *end)
  +{
  +    const char *p;
  +
  +    /* parse as long as name class characters are found */
  +    for (p = begin; p != end && var->syntax_nameclass[(int)(*p)]; p++)
  +        ;
  +    return (p - begin);
  +}
  +
  +/* lookup a variable value through the callback function */
  +static int 
  +lookup_value(
  +    var_t *var, var_parse_t *ctx,
  +    const char  *var_ptr, size_t  var_len, int     var_idx,
  +    const char **val_ptr, size_t *val_len, size_t *val_size)
  +{
  +    char buf[1];
  +    int rc;
  +
  +    /* pass through to original callback */
  +    rc = (*var->cb_value_fct)(var, var->cb_value_ctx,
  +                              var_ptr, var_len, var_idx, 
  +                              val_ptr, val_len, val_size);
  +
  +    /* convert undefined variable into empty variable if relative
  +       lookups are counted. This is the case inside an active loop
  +       construct if no limits are given. There the parse_input()
  +       has to proceed until all variables have undefined values. 
  +       This trick here allows it to determine this case. */
  +    if (ctx->rel_lookup_flag && rc == VAR_ERR_UNDEFINED_VARIABLE) {
  +        ctx->rel_lookup_cnt--;
  +        buf[0] = NUL;
  +        *val_ptr  = buf;
  +        *val_len  = 0;
  +        *val_size = 0;
  +        return VAR_OK;
  +    }
  +
  +    return rc;
  +}
  +
  +/* parse complex variable construct ("${name...}") */
  +static int 
  +parse_variable_complex(
  +    var_t *var, var_parse_t *ctx,
  +    const char *begin, const char *end,
  +    tokenbuf_t *result)
  +{
  +    const char *p;
  +    const char *data;
  +    size_t len, buffer_size;
  +    int failed = 0;
  +    int rc;
  +    int idx = 0;
  +    tokenbuf_t name;
  +    tokenbuf_t tmp;
  +
  +    /* initializations */
  +    p = begin;
  +    tokenbuf_init(&name);
  +    tokenbuf_init(&tmp);
  +    tokenbuf_init(result);
  +
  +    /* parse open delimiter */
  +    if (p == end || *p != var->syntax.delim_open)
  +        return 0;
  +    p++;
  +    if (p == end)
  +        return VAR_ERR_INCOMPLETE_VARIABLE_SPEC;
  +
  +    /* parse name of variable to expand. The name may consist of an
  +       arbitrary number of variable name character and contained variable
  +       constructs. */
  +    do {
  +        /* parse a variable name */
  +        rc = parse_name(var, ctx, p, end);
  +        if (rc < 0)
  +            goto error_return;
  +        if (rc > 0) {
  +            if (!tokenbuf_append(&name, p, rc)) {
  +                rc = VAR_ERR_OUT_OF_MEMORY;
  +                goto error_return;
  +            }
  +            p += rc;
  +        }
  +
  +        /* parse an (embedded) variable */
  +        rc = parse_variable(var, ctx, p, end, &tmp);
  +        if (rc < 0)
  +            goto error_return;
  +        if (rc > 0) {
  +            if (!tokenbuf_merge(&name, &tmp)) {
  +                rc = VAR_ERR_OUT_OF_MEMORY;
  +                goto error_return;
  +            }
  +            p += rc;
  +        }
  +    } while (rc > 0);
  +
  +    /* we must have the complete expanded variable name now, 
  +       so make sure we really do. */
  +    if (name.begin == name.end) {
  +        if (ctx->force_expand) {
  +            rc = VAR_ERR_INCOMPLETE_VARIABLE_SPEC;
  +            goto error_return;
  +        }
  +        else {
  +            /* If no force_expand is requested, we have to back-off.
  +               We're not sure whether our approach here is 100% correct,
  +               because it _could_ have side-effects according to Peter
  +               Simons, but as far as we know and tried it, it is
  +               correct. But be warned -- RSE */
  +            tokenbuf_set(result, begin - 1, p, 0);
  +            goto goahead;
  +        }
  +    }
  +
  +    /* parse an optional index specification */
  +    if (   var->syntax.index_open != NUL
  +        && *p == var->syntax.index_open) {
  +        p++;
  +        rc = parse_numexp(var, ctx, p, end, &idx, &failed);
  +        if (rc < 0)
  +            goto error_return;
  +        if (rc == 0) {
  +            rc = VAR_ERR_INCOMPLETE_INDEX_SPEC;
  +            goto error_return;
  +        }
  +        p += rc;
  +        if (p == end) {
  +            rc = VAR_ERR_INCOMPLETE_INDEX_SPEC;
  +            goto error_return;
  +        }
  +        if (*p != var->syntax.index_close) {
  +            rc = VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC;
  +            goto error_return;
  +        }
  +        p++;
  +    }
  +
  +    /* parse end of variable construct or start of post-operations */
  +    if (p == end || (*p != var->syntax.delim_close && *p != ':')) {
  +        rc = VAR_ERR_INCOMPLETE_VARIABLE_SPEC;
  +        goto error_return;
  +    }
  +    p++;
  +
  +    /* lookup the variable value now */
  +    if (failed)
  +        tokenbuf_set(result, begin - 1, p, 0);
  +    else {
  +        rc = lookup_value(var, ctx,
  +                          name.begin, name.end-name.begin, idx,
  +                          &data, &len, &buffer_size);
  +        if (rc == VAR_ERR_UNDEFINED_VARIABLE) {
  +            if (ctx->force_expand)
  +                goto error_return;
  +            tokenbuf_set(result, begin - 1, p, 0);
  +            failed = 1;
  +        }
  +        else if (rc < 0)
  +            goto error_return;
  +        else
  +            /* the preliminary result is the raw value of the variable.
  +               This may be modified by the operations that may follow. */
  +            tokenbuf_set(result, data, data + len, buffer_size);
  +    }
  +
  +    /* parse optional post-operations */
  +    goahead:
  +    if (p[-1] == ':') {
  +        tokenbuf_free(&tmp);
  +        p--;
  +        while (p != end && *p == ':') {
  +            p++;
  +            if (!failed)
  +                rc = parse_operation(var, ctx, p, end, result);
  +            else
  +                rc = parse_operation(var, ctx, p, end, &tmp);
  +            if (rc < 0)
  +                goto error_return;
  +            p += rc;
  +            if (failed)
  +                result->end += rc;
  +        }
  +        if (p == end || *p != var->syntax.delim_close) {
  +            rc = VAR_ERR_INCOMPLETE_VARIABLE_SPEC;
  +            goto error_return;
  +        }
  +        p++;
  +        if (failed)
  +            result->end++;
  +    }
  +
  +    /* return successfully */
  +    tokenbuf_free(&name);
  +    tokenbuf_free(&tmp);
  +    return (p - begin);
  +
  +    /* return with an error */
  +    error_return:
  +    tokenbuf_free(&name);
  +    tokenbuf_free(&tmp);
  +    tokenbuf_free(result);
  +    return rc;
  +}
  +
  +/* parse variable construct ("$name" or "${name...}") */
  +static int 
  +parse_variable(
  +    var_t *var, var_parse_t *ctx,
  +    const char *begin, const char *end,
  +    tokenbuf_t *result)
  +{
  +    const char *p;
  +    const char *data;
  +    size_t len, buffer_size;
  +    int rc, rc2;
  +
  +    /* initialization */
  +    p = begin;
  +    tokenbuf_init(result);
  +
  +    /* parse init delimiter */
  +    if (p == end || *p != var->syntax.delim_init)
  +        return 0;
  +    p++;
  +    if (p == end)
  +        return VAR_ERR_INCOMPLETE_VARIABLE_SPEC;
  +
  +    /* parse a simple variable name. 
  +       (if this fails, we're try to parse a complex variable construct) */
  +    rc = parse_name(var, ctx, p, end);
  +    if (rc < 0)
  +        return rc;
  +    if (rc > 0) {
  +        rc2 = lookup_value(var, ctx, p, rc, 0, &data, &len, &buffer_size);
  +        if (rc2 == VAR_ERR_UNDEFINED_VARIABLE && !ctx->force_expand) {
  +            tokenbuf_set(result, begin, begin + 1 + rc, 0);
  +            return (1 + rc);
  +        }
  +        if (rc2 < 0)
  +            return rc2;
  +        tokenbuf_set(result, data, data + len, buffer_size);
  +        return (1 + rc);
  +    }
  +
  +    /* parse a complex variable construct (else case) */
  +    rc = parse_variable_complex(var, ctx, p, end, result);
  +    if (rc > 0)
  +        rc++;
  +    return rc;
  +}
  +
   /* parse loop construct limits ("[...]{b,s,e}") */
   static var_rc_t 
   parse_looplimits(
  -    var_t *var,
  -    var_parse_t *ctx,
  +    var_t *var, var_parse_t *ctx,
       const char *begin, const char *end,
       int *start, int *step, int *stop, int *open_stop)
   {
  @@ -1856,7 +1821,7 @@
   
       /* parse loop start value */
       failed = 0;
  -    rc = parse_num_exp(var, ctx, p, end, start, &failed);
  +    rc = parse_numexp(var, ctx, p, end, start, &failed);
       if (rc == VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC)
           *start = 0; /* use default */
       else if (rc < 0)
  @@ -1873,7 +1838,7 @@
   
       /* parse loop step value */
       failed = 0;
  -    rc = parse_num_exp(var, ctx, p, end, step, &failed);
  +    rc = parse_numexp(var, ctx, p, end, step, &failed);
       if (rc == VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC)
           *step = 1; /* use default */
       else if (rc < 0)
  @@ -1905,7 +1870,7 @@
   
       /* parse loop stop value */
       failed = 0;
  -    rc = parse_num_exp(var, ctx, p, end, stop, &failed);
  +    rc = parse_numexp(var, ctx, p, end, stop, &failed);
       if (rc == VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC) {
           *stop = 0; /* use default */
           *open_stop = 1;
  @@ -1925,6 +1890,32 @@
       p++;
   
       /* return amount of parsed input */
  +    return (p - begin);
  +}
  +
  +/* parse plain text */
  +static int 
  +parse_text(
  +    var_t *var, var_parse_t *ctx,
  +    const char *begin, const char *end)
  +{
  +    const char *p;
  +
  +    /* parse until delim_init (variable construct) 
  +       or index_open (loop construct) is found */
  +    for (p = begin; p != end; p++) {
  +        if (*p == var->syntax.escape) {
  +            p++; /* skip next character */
  +            if (p == end)
  +                return VAR_ERR_INCOMPLETE_QUOTED_PAIR;
  +        }
  +        else if (*p == var->syntax.delim_init)
  +            break;
  +        else if (   var->syntax.index_open != NUL
  +                 && (   *p == var->syntax.index_open 
  +                     || *p == var->syntax.index_close))
  +            break;
  +    }
       return (p - begin);
   }
   

From ossp-cvs-owner@ossp.org  Mon Mar  4 12:37:35 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 08AF9763DD; Mon,  4 Mar 2002 12:37:34 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Message-Id: <20020304113734.08AF9763DD@mail.ossp.org>
Date: Mon,  4 Mar 2002 12:37:34 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-Mar-2002 12:37:34
  Branch: HEAD                             Handle: 2002030411373400

  Modified files:
    ossp-pkg/var            var.c

  Log:
    Code Cleanup Phase V
    (too much details to describe)

  Summary:
    Revision    Changes     Path
    1.75        +224 -243   ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.74 -r1.75 var.c
  --- ossp-pkg/var/var.c	2 Mar 2002 12:29:05 -0000	1.74
  +++ ossp-pkg/var/var.c	4 Mar 2002 11:37:34 -0000	1.75
  @@ -213,15 +213,15 @@
           output->buffer_size = TOKENBUF_INITIAL_BUFSIZE;
       }
   
  -    /* Does the token contain text, but no buffer has been allocated yet? */
  +    /* does the token contain text, but no buffer has been allocated yet? */
       if (output->buffer_size == 0) {
  -        /* Check whether data borders to output. If, we can append
  +        /* check whether data borders to output. If, we can append
              simly by increasing the end pointer. */
           if (output->end == data) {
               output->end += len;
               return 1;
           }
  -        /* OK, so copy the contents of output into an allocated buffer
  +        /* ok, so copy the contents of output into an allocated buffer
              so that we can append that way. */
           if ((tmp = malloc(output->end - output->begin + len + 1)) == NULL)
               return 0;
  @@ -232,7 +232,7 @@
           output->buffer_size += len + 1;
       }
   
  -    /* Does the token fit into the current buffer? If not, realloc a
  +    /* does the token fit into the current buffer? If not, realloc a
          larger buffer that fits. */
       if ((output->buffer_size - (output->end - output->begin)) <= len) {
           new_size = output->buffer_size;
  @@ -246,7 +246,7 @@
           output->buffer_size = new_size;
       }
   
  -    /* Append the data at the end of the current buffer. */
  +    /* append the data at the end of the current buffer. */
       memcpy((char *)output->end, data, len);
       output->end += len;
       *((char *)output->end) = NUL;
  @@ -271,28 +271,15 @@
       return;
   }
   
  -static size_t 
  -tokenbuf_toint(
  -    tokenbuf_t *number)
  -{
  -    const char *p;
  -    size_t num;
  -
  -    num = 0;
  -    for (p = number->begin; p != number->end; ++p) {
  -        num *= 10;
  -        num += *p - '0';
  -    }
  -    return num;
  -}
  -
   /*
   **
  -**  ==== ESCAPE SEQUENCE FUNCTIONS ====
  +**  ==== CHARACTER CLASS EXPANSION ====
   **
   */
   
  -static void expand_range(char a, char b, char_class_t class)
  +static void 
  +expand_range(
  +    char a, char b, char_class_t class)
   {
       do {
           class[(int)a] = 1;
  @@ -301,18 +288,17 @@
       return;
   }
   
  -static var_rc_t expand_character_class(const char *desc, char_class_t class)
  +static var_rc_t 
  +expand_character_class(
  +    const char *desc, char_class_t class)
   {
       size_t i;
   
  -    /* Clear the class array. */
  -
  +    /* clear the class array. */
       for (i = 0; i < 256; ++i)
           class[i] = 0;
   
  -    /* Walk through the class description and set the appropriate
  -       entries in the array. */
  -
  +    /* walk through class description and set appropriate entries in array */
       while (*desc != NUL) {
           if (desc[1] == '-' && desc[2] != NUL) {
               if (desc[0] > desc[2])
  @@ -321,14 +307,21 @@
               desc += 3;
           } else {
               class[(int) *desc] = 1;
  -            ++desc;
  +            desc++;
           }
       }
  -
       return VAR_OK;
   }
   
  -static int isoct(char c)
  +/*
  +**
  +**  ==== ESCAPE SEQUENCE EXPANSION FUNCTIONS ====
  +**
  +*/
  +
  +static int 
  +expand_isoct(
  +    char c)
   {
       if (c >= '0' && c <= '7')
           return 1;
  @@ -336,33 +329,39 @@
           return 0;
   }
   
  -static var_rc_t expand_octal(const char **src, char **dst, const char *end)
  +static var_rc_t 
  +expand_octal(
  +    const char **src, char **dst, const char *end)
   {
       unsigned char c;
   
       if (end - *src < 3)
           return VAR_ERR_INCOMPLETE_OCTAL;
  -    if (!isoct(**src) || !isoct((*src)[1]) || !isoct((*src)[2]))
  +    if (   !expand_isoct(**src) 
  +        || !expand_isoct((*src)[1]) 
  +        || !expand_isoct((*src)[2]))
           return VAR_ERR_INVALID_OCTAL;
   
       c = **src - '0';
       if (c > 3)
           return VAR_ERR_OCTAL_TOO_LARGE;
       c *= 8;
  -    ++(*src);
  +    (*src)++;
   
       c += **src - '0';
       c *= 8;
  -    ++(*src);
  +    (*src)++;
   
       c += **src - '0';
   
       **dst = (char) c;
  -    ++(*dst);
  +    (*dst)++;
       return VAR_OK;
   }
   
  -static int ishex(char c)
  +static int 
  +expand_ishex(
  +    char c)
   {
       if ((c >= '0' && c <= '9') ||
           (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'))
  @@ -371,14 +370,16 @@
           return 0;
   }
   
  -static var_rc_t expand_simple_hex(const char **src, char **dst,
  -                                  const char *end)
  +static var_rc_t 
  +expand_simple_hex(
  +    const char **src, char **dst, const char *end)
   {
       unsigned char c = 0;
   
       if (end - *src < 2)
           return VAR_ERR_INCOMPLETE_HEX;
  -    if (!ishex(**src) || !ishex((*src)[1]))
  +    if (   !expand_ishex(**src) 
  +        || !expand_ishex((*src)[1]))
           return VAR_ERR_INVALID_HEX;
   
       if (**src >= '0' && **src <= '9')
  @@ -389,7 +390,7 @@
           c = **src - 'A' + 10;
   
       c = c << 4;
  -    ++(*src);
  +    (*src)++;
   
       if (**src >= '0' && **src <= '9')
           c += **src - '0';
  @@ -399,19 +400,20 @@
           c += **src - 'A' + 10;
   
       **dst = (char) c;
  -    ++(*dst);
  +    (*dst)++;
       return VAR_OK;
   }
   
  -static var_rc_t expand_grouped_hex(const char **src, char **dst,
  -                                   const char *end)
  +static var_rc_t 
  +expand_grouped_hex(
  +    const char **src, char **dst, const char *end)
   {
       var_rc_t rc;
   
       while (*src < end && **src != '}') {
           if ((rc = expand_simple_hex(src, dst, end)) != VAR_OK)
               return rc;
  -        ++(*src);
  +        (*src)++;
       }
       if (*src == end)
           return VAR_ERR_INCOMPLETE_GROUPED_HEX;
  @@ -419,12 +421,14 @@
       return VAR_OK;
   }
   
  -static var_rc_t expand_hex(const char **src, char **dst, const char *end)
  +static var_rc_t 
  +expand_hex(
  +    const char **src, char **dst, const char *end)
   {
       if (*src == end)
           return VAR_ERR_INCOMPLETE_HEX;
       if (**src == '{') {
  -        ++(*src);
  +        (*src)++;
           return expand_grouped_hex(src, dst, end);
       } else
           return expand_simple_hex(src, dst, end);
  @@ -440,20 +444,6 @@
   static int parse_variable(var_t *var, var_parse_t *ctx, const char *begin, const char *end, tokenbuf_t *result);
   static int parse_numexp (var_t *var, var_parse_t *ctx, const char *begin, const char *end, int *result, int *failed);
   
  -/* parse number */
  -static int 
  -parse_number(
  -    var_t *var, var_parse_t *ctx,
  -    const char *begin, const char *end)
  -{
  -    const char *p;
  -
  -    /* parse as long as digits are found */
  -    for (p = begin; p != end && isdigit((int)(*p)); p++)
  -        ;
  -    return (p - begin);
  -}
  -
   /* parse substitution text */
   static int 
   parse_substext(
  @@ -473,7 +463,7 @@
       return (p - begin);
   }
   
  -/* parse expression? XXX text */
  +/* parse expression text */
   static int 
   parse_exptext(
       var_t *var, var_parse_t *ctx,
  @@ -495,6 +485,7 @@
       return (p - begin);
   }
   
  +/* parse expression or variable */
   static int 
   parse_exptext_or_variable(
       var_t *var, var_parse_t *ctx,
  @@ -507,11 +498,10 @@
   
       tokenbuf_init(result);
       tokenbuf_init(&tmp);
  -
       if (begin == end)
           return 0;
  -
       do {
  +        /* try to parse expression text */
           rc = parse_exptext(var, ctx, p, end);
           if (rc < 0)
               goto error_return;
  @@ -523,6 +513,7 @@
               p += rc;
           }
   
  +        /* try to parse variable construct */
           rc = parse_variable(var, ctx, p, end, &tmp);
           if (rc < 0)
               goto error_return;
  @@ -537,14 +528,15 @@
       } while (rc > 0);
   
       tokenbuf_free(&tmp);
  -    return p - begin;
  +    return (p - begin);
   
  -  error_return:
  +    error_return:
       tokenbuf_free(&tmp);
       tokenbuf_free(result);
       return rc;
   }
   
  +/* parse substitution text or variable */
   static int 
   parse_substext_or_variable(
       var_t *var, var_parse_t *ctx,
  @@ -557,11 +549,10 @@
   
       tokenbuf_init(result);
       tokenbuf_init(&tmp);
  -
       if (begin == end)
           return 0;
  -
       do {
  +        /* try to parse substitution text */
           rc = parse_substext(var, ctx, p, end);
           if (rc < 0)
               goto error_return;
  @@ -573,6 +564,7 @@
               p += rc;
           }
   
  +        /* try to parse substiution text */
           rc = parse_variable(var, ctx, p, end, &tmp);
           if (rc < 0)
               goto error_return;
  @@ -587,20 +579,24 @@
       } while (rc > 0);
   
       tokenbuf_free(&tmp);
  -    return p - begin;
  +    return (p - begin);
   
  -  error_return:
  +    error_return:
       tokenbuf_free(&tmp);
       tokenbuf_free(result);
       return rc;
   }
   
  +/* parse class description */
   static int 
  -parse_class_description(tokenbuf_t *src, tokenbuf_t *dst)
  +parse_class_description(
  +    var_t *var, var_parse_t *ctx,
  +    tokenbuf_t *src, tokenbuf_t *dst)
   {
       unsigned char c, d;
  -    const char *p = src->begin;
  +    const char *p; 
   
  +    p = src->begin;
       while (p != src->end) {
           if ((src->end - p) >= 3 && p[1] == '-') {
               if (*p > p[2])
  @@ -619,120 +615,19 @@
       return VAR_OK;
   }
   
  -static int 
  -op_transpose(
  -    tokenbuf_t *data, 
  -    tokenbuf_t *search,
  -    tokenbuf_t *replace)
  -{
  -    tokenbuf_t srcclass, dstclass;
  -    const char *p;
  -    int rc;
  -    size_t i;
  -
  -    tokenbuf_init(&srcclass);
  -    tokenbuf_init(&dstclass);
  -
  -    if ((rc = parse_class_description(search, &srcclass)) != VAR_OK)
  -        goto error_return;
  -    if ((rc = parse_class_description(replace, &dstclass)) != VAR_OK)
  -        goto error_return;
  -
  -    if (srcclass.begin == srcclass.end) {
  -        rc = VAR_ERR_EMPTY_TRANSPOSE_CLASS;
  -        goto error_return;
  -    }
  -    if ((srcclass.end - srcclass.begin) != (dstclass.end - dstclass.begin)) {
  -        rc = VAR_ERR_TRANSPOSE_CLASSES_MISMATCH;
  -        goto error_return;
  -    }
  -
  -    if (data->buffer_size == 0) {
  -        tokenbuf_t tmp;
  -        if (!tokenbuf_assign(&tmp, data->begin, data->end - data->begin)) {
  -            rc = VAR_ERR_OUT_OF_MEMORY;
  -            goto error_return;
  -        }
  -        tokenbuf_move(&tmp, data);
  -    }
  -
  -    for (p = data->begin; p != data->end; ++p) {
  -        for (i = 0; i <= (srcclass.end - srcclass.begin); ++i) {
  -            if (*p == srcclass.begin[i]) {
  -                *((char *)p) = dstclass.begin[i];
  -                break;
  -            }
  -        }
  -    }
  -
  -    tokenbuf_free(&srcclass);
  -    tokenbuf_free(&dstclass);
  -    return VAR_OK;
  -
  -  error_return:
  -    tokenbuf_free(search);
  -    tokenbuf_free(replace);
  -    tokenbuf_free(&srcclass);
  -    tokenbuf_free(&dstclass);
  -    return rc;
  -}
  -
  -static int 
  -op_cut_out_offset(
  -    tokenbuf_t *data, 
  -    tokenbuf_t *number1,
  -    tokenbuf_t *number2, 
  -    int isrange)
  -{
  -    tokenbuf_t res;
  -    const char *p;
  -    size_t num1;
  -    size_t num2;
  -
  -    num1 = tokenbuf_toint(number1);
  -    num2 = tokenbuf_toint(number2);
  -
  -    /* Determine begin of result string. */
  -    if ((data->end - data->begin) < num1)
  -        return VAR_ERR_OFFSET_OUT_OF_BOUNDS;
  -    else
  -        p = data->begin + num1;
  -
  -    /* If num2 is zero, we copy the rest from there. */
  -    if (num2 == 0) {
  -        if (!tokenbuf_assign(&res, p, data->end - p))
  -            return VAR_ERR_OUT_OF_MEMORY;
  -    } else {
  -        /* OK, then use num2. */
  -        if (isrange) {
  -            if ((p + num2) > data->end)
  -                return VAR_ERR_RANGE_OUT_OF_BOUNDS;
  -            if (!tokenbuf_assign(&res, p, num2))
  -                return VAR_ERR_OUT_OF_MEMORY;
  -        } else {
  -            if (num2 < num1)
  -                return VAR_ERR_OFFSET_LOGIC;
  -            if ((data->begin + num2) > data->end)
  -                return VAR_ERR_RANGE_OUT_OF_BOUNDS;
  -            if (!tokenbuf_assign(&res, p, num2 - num1 + 1))
  -                return VAR_ERR_OUT_OF_MEMORY;
  -        }
  -    }
  -    tokenbuf_free(data);
  -    tokenbuf_move(&res, data);
  -    return VAR_OK;
  -}
  -
  +/* parse regex replace part */
   static int 
   parse_regex_replace(
  +    var_t *var, var_parse_t *ctx,
       const char *data, 
       tokenbuf_t *orig,
       regmatch_t *pmatch, 
       tokenbuf_t *expanded)
   {
  -    const char *p = orig->begin;
  +    const char *p;
       size_t i;
   
  +    p = orig->begin;
       tokenbuf_init(expanded);
   
       while (p != orig->end) {
  @@ -761,7 +656,7 @@
                   return VAR_ERR_SUBMATCH_OUT_OF_RANGE;
               }
               if (!tokenbuf_append(expanded, data + pmatch[i].rm_so,
  -                                    pmatch[i].rm_eo - pmatch[i].rm_so)) {
  +                                 pmatch[i].rm_eo - pmatch[i].rm_so)) {
                   tokenbuf_free(expanded);
                   return VAR_ERR_OUT_OF_MEMORY;
               }
  @@ -777,8 +672,65 @@
       return VAR_OK;
   }
   
  +/* operation: transpose */
  +static int 
  +op_transpose(
  +    var_t *var, var_parse_t *ctx,
  +    tokenbuf_t *data, 
  +    tokenbuf_t *search,
  +    tokenbuf_t *replace)
  +{
  +    tokenbuf_t srcclass, dstclass;
  +    const char *p;
  +    int rc;
  +    size_t i;
  +
  +    tokenbuf_init(&srcclass);
  +    tokenbuf_init(&dstclass);
  +    if ((rc = parse_class_description(var, ctx, search, &srcclass)) != VAR_OK)
  +        goto error_return;
  +    if ((rc = parse_class_description(var, ctx, replace, &dstclass)) != VAR_OK)
  +        goto error_return;
  +    if (srcclass.begin == srcclass.end) {
  +        rc = VAR_ERR_EMPTY_TRANSPOSE_CLASS;
  +        goto error_return;
  +    }
  +    if ((srcclass.end - srcclass.begin) != (dstclass.end - dstclass.begin)) {
  +        rc = VAR_ERR_TRANSPOSE_CLASSES_MISMATCH;
  +        goto error_return;
  +    }
  +    if (data->buffer_size == 0) {
  +        tokenbuf_t tmp;
  +        if (!tokenbuf_assign(&tmp, data->begin, data->end - data->begin)) {
  +            rc = VAR_ERR_OUT_OF_MEMORY;
  +            goto error_return;
  +        }
  +        tokenbuf_move(&tmp, data);
  +    }
  +    for (p = data->begin; p != data->end; ++p) {
  +        for (i = 0; i <= (srcclass.end - srcclass.begin); ++i) {
  +            if (*p == srcclass.begin[i]) {
  +                *((char *)p) = dstclass.begin[i];
  +                break;
  +            }
  +        }
  +    }
  +    tokenbuf_free(&srcclass);
  +    tokenbuf_free(&dstclass);
  +    return VAR_OK;
  +
  +    error_return:
  +    tokenbuf_free(search);
  +    tokenbuf_free(replace);
  +    tokenbuf_free(&srcclass);
  +    tokenbuf_free(&dstclass);
  +    return rc;
  +}
  +
  +/* operation: search & replace */
   static int 
   op_search_and_replace(
  +    var_t *var, var_parse_t *ctx,
       tokenbuf_t *data, 
       tokenbuf_t *search,
       tokenbuf_t *replace, 
  @@ -815,11 +767,9 @@
   
           for (p = data->begin; p != data->end;) {
               if (case_insensitive)
  -                rc = strncasecmp(p, search->begin,
  -                                 search->end - search->begin);
  +                rc = strncasecmp(p, search->begin, search->end - search->begin);
               else
  -                rc = strncmp(p, search->begin,
  -                             search->end - search->begin);
  +                rc = strncmp(p, search->begin, search->end - search->begin);
               if (rc != 0) {
                   /* no match, copy character */
                   if (!tokenbuf_append(&tmp, p, 1)) {
  @@ -828,8 +778,7 @@
                   }
                   ++p;
               } else {
  -                tokenbuf_append(&tmp, replace->begin,
  -                                replace->end - replace->begin);
  +                tokenbuf_append(&tmp, replace->begin, replace->end - replace->begin);
                   p += search->end - search->begin;
                   if (!global) {
                       if (!tokenbuf_append(&tmp, p, data->end - p)) {
  @@ -861,7 +810,7 @@
           }
   
           /* Compile the pattern. */
  -        rc = regcomp(&preg, tmp.begin, REG_NEWLINE | REG_EXTENDED|((case_insensitive)?REG_ICASE:0));
  +        rc = regcomp(&preg, tmp.begin, REG_NEWLINE|REG_EXTENDED|((case_insensitive)?REG_ICASE:0));
           tokenbuf_free(&tmp);
           if (rc != 0) {
               tokenbuf_free(&mydata);
  @@ -879,7 +828,7 @@
                   tokenbuf_append(&tmp, p, mydata.end - p);
                   break;
               } else {
  -                rc = parse_regex_replace(p, replace, pmatch, &myreplace);
  +                rc = parse_regex_replace(var, ctx, p, replace, pmatch, &myreplace);
                   if (rc != VAR_OK) {
                       regfree(&preg);
                       tokenbuf_free(&tmp);
  @@ -887,8 +836,7 @@
                       return rc;
                   }
                   if (!tokenbuf_append(&tmp, p, pmatch[0].rm_so) ||
  -                    !tokenbuf_append(&tmp, myreplace.begin,
  -                                        myreplace.end - myreplace.begin)) {
  +                    !tokenbuf_append(&tmp, myreplace.begin, myreplace.end - myreplace.begin)) {
                       regfree(&preg);
                       tokenbuf_free(&tmp);
                       tokenbuf_free(&mydata);
  @@ -921,7 +869,6 @@
                   }
               }
           }
  -
           regfree(&preg);
           tokenbuf_free(data);
           tokenbuf_move(&tmp, data);
  @@ -931,53 +878,90 @@
       return VAR_OK;
   }
   
  +/* operation: offset substring */
  +static int 
  +op_offset(
  +    var_t *var, var_parse_t *ctx,
  +    tokenbuf_t *data, 
  +    int num1,
  +    int num2, 
  +    int isrange)
  +{
  +    tokenbuf_t res;
  +    const char *p;
  +
  +    /* determine begin of result string */
  +    if ((data->end - data->begin) < num1)
  +        return VAR_ERR_OFFSET_OUT_OF_BOUNDS;
  +    p = data->begin + num1;
  +
  +    /* if num2 is zero, we copy the rest from there. */
  +    if (num2 == 0) {
  +        if (!tokenbuf_assign(&res, p, data->end - p))
  +            return VAR_ERR_OUT_OF_MEMORY;
  +    } else {
  +        /* ok, then use num2. */
  +        if (isrange) {
  +            if ((p + num2) > data->end)
  +                return VAR_ERR_RANGE_OUT_OF_BOUNDS;
  +            if (!tokenbuf_assign(&res, p, num2))
  +                return VAR_ERR_OUT_OF_MEMORY;
  +        } else {
  +            if (num2 < num1)
  +                return VAR_ERR_OFFSET_LOGIC;
  +            if ((data->begin + num2) > data->end)
  +                return VAR_ERR_RANGE_OUT_OF_BOUNDS;
  +            if (!tokenbuf_assign(&res, p, num2 - num1 + 1))
  +                return VAR_ERR_OUT_OF_MEMORY;
  +        }
  +    }
  +    tokenbuf_free(data);
  +    tokenbuf_move(&res, data);
  +    return VAR_OK;
  +}
  +
   /* operation: padding */
   static int 
   op_padding(
  +    var_t *var, var_parse_t *ctx,
       tokenbuf_t *data, 
  -    tokenbuf_t *widthstr, 
  +    int width, 
       tokenbuf_t *fill,
       char position)
   {
       tokenbuf_t result;
  -    size_t width;
       int i;
   
  -    width = tokenbuf_toint(widthstr);
       if (fill->begin == fill->end)
           return VAR_ERR_EMPTY_PADDING_FILL_STRING;
  -
       tokenbuf_init(&result);
  -
       if (position == 'l') {
  +        /* left padding */
           i = width - (data->end - data->begin);
           if (i > 0) {
               i = i / (fill->end - fill->begin);
               while (i > 0) {
  -                if (!tokenbuf_append
  -                    (data, fill->begin, fill->end - fill->begin))
  +                if (!tokenbuf_append(data, fill->begin, fill->end - fill->begin))
                       return VAR_ERR_OUT_OF_MEMORY;
                   i--;
               }
  -            i = (width - (data->end - data->begin))
  -                % (fill->end - fill->begin);
  +            i = (width - (data->end - data->begin)) % (fill->end - fill->begin);
               if (!tokenbuf_append(data, fill->begin, i))
                   return VAR_ERR_OUT_OF_MEMORY;
           }
       } else if (position == 'r') {
  +        /* right padding */
           i = width - (data->end - data->begin);
           if (i > 0) {
               i = i / (fill->end - fill->begin);
               while (i > 0) {
  -                if (!tokenbuf_append
  -                    (&result, fill->begin, fill->end - fill->begin)) {
  +                if (!tokenbuf_append(&result, fill->begin, fill->end - fill->begin)) {
                       tokenbuf_free(&result);
                       return VAR_ERR_OUT_OF_MEMORY;
                   }
                   i--;
               }
  -            i = (width - (data->end - data->begin))
  -                % (fill->end - fill->begin);
  +            i = (width - (data->end - data->begin)) % (fill->end - fill->begin);
               if (!tokenbuf_append(&result, fill->begin, i)) {
                   tokenbuf_free(&result);
                   return VAR_ERR_OUT_OF_MEMORY;
  @@ -986,14 +970,15 @@
                   tokenbuf_free(&result);
                   return VAR_ERR_OUT_OF_MEMORY;
               }
  -
  +            /* move string from temporary buffer to data buffer */
               tokenbuf_free(data);
               tokenbuf_move(&result, data);
           }
       } else if (position == 'c') {
  +        /* centered padding */
           i = (width - (data->end - data->begin)) / 2;
           if (i > 0) {
  -            /* Create the prefix. */
  +            /* create the prefix */
               i = i / (fill->end - fill->begin);
               while (i > 0) {
                   if (!tokenbuf_append(&result, fill->begin, fill->end - fill->begin)) {
  @@ -1008,19 +993,16 @@
                   tokenbuf_free(&result);
                   return VAR_ERR_OUT_OF_MEMORY;
               }
  -
  -            /* Append the actual data string. */
  +            /* append the actual data string */
               if (!tokenbuf_append(&result, data->begin, data->end - data->begin)) {
                   tokenbuf_free(&result);
                   return VAR_ERR_OUT_OF_MEMORY;
               }
  -
  -            /* Append the suffix. */
  +            /* append the suffix */
               i = width - (result.end - result.begin);
               i = i / (fill->end - fill->begin);
               while (i > 0) {
  -                if (!tokenbuf_append
  -                    (&result, fill->begin, fill->end - fill->begin)) {
  +                if (!tokenbuf_append(&result, fill->begin, fill->end - fill->begin)) {
                       tokenbuf_free(&result);
                       return VAR_ERR_OUT_OF_MEMORY;
                   }
  @@ -1031,17 +1013,35 @@
                   tokenbuf_free(&result);
                   return VAR_ERR_OUT_OF_MEMORY;
               }
  -
  -            /* Move string from temporary buffer to data buffer. */
  +            /* move string from temporary buffer to data buffer */
               tokenbuf_free(data);
               tokenbuf_move(&result, data);
           }
       }
  -
       return VAR_OK;
   }
   
  -/* XXX */
  +/* parse an integer number ("123") */
  +static int 
  +parse_integer(
  +    var_t *var, var_parse_t *ctx,
  +    const char *begin, const char *end,
  +    int *result)
  +{
  +    const char *p;
  +    int num;
  +
  +    p = begin;
  +    num = 0;
  +    while (isdigit(*p) && p != end) {
  +        num *= 10;
  +        num += (*p - '0');
  +        p++;
  +    }
  +    if (result != NULL)
  +        *result = num;
  +    return (p - begin);
  +}
   
   /* parse an operation (":x...") */
   static int 
  @@ -1054,6 +1054,7 @@
       tokenbuf_t tmptokbuf;
       tokenbuf_t search, replace, flags;
       tokenbuf_t number1, number2;
  +    int num1, num2;
       int isrange;
       int rc;
       char *ptr;
  @@ -1110,12 +1111,13 @@
           case 'o': {
               /* cut out substring of value. */
               p++;
  -            rc = parse_number(var, ctx, p, end);
  +            rc = parse_integer(var, ctx, p, end, &num1);
               if (rc == 0) {
                   rc = VAR_ERR_MISSING_START_OFFSET;
                   goto error_return;
               }
  -            tokenbuf_set(&number1, p, p + rc, 0);
  +            else if (rc < 0)
  +                goto error_return;
               p += rc;
               if (*p == ',') {
                   isrange = 0;
  @@ -1127,11 +1129,10 @@
                   rc = VAR_ERR_INVALID_OFFSET_DELIMITER;
                   goto error_return;
               }
  -            rc = parse_number(var, ctx, p, end);
  -            tokenbuf_set(&number2, p, p + rc, 0);
  +            rc = parse_integer(var, ctx, p, end, &num2);
               p += rc;
               if (data->begin != NULL) {
  -                rc = op_cut_out_offset(data, &number1, &number2, isrange);
  +                rc = op_offset(var, ctx, data, num1, num2, isrange);
                   if (rc < 0)
                       goto error_return;
               }
  @@ -1238,7 +1239,7 @@
               tokenbuf_set(&flags, p, p + rc, 0);
               p += rc;
               if (data->begin != NULL) {
  -                rc = op_search_and_replace(data, &search, &replace, &flags);
  +                rc = op_search_and_replace(var, ctx, data, &search, &replace, &flags);
                   if (rc < 0)
                       goto error_return;
               }
  @@ -1269,7 +1270,7 @@
               } else
                   p++;
               if (data->begin) {
  -                rc = op_transpose(data, &search, &replace);
  +                rc = op_transpose(var, ctx, data, &search, &replace);
                   if (rc < 0)
                       goto error_return;
               }
  @@ -1281,12 +1282,11 @@
               if (*p != '/')
                   return VAR_ERR_MALFORMATTED_PADDING;
               p++;
  -            rc = parse_number(var, ctx, p, end);
  +            rc = parse_integer(var, ctx, p, end, &num1);
               if (rc == 0) {
                   rc = VAR_ERR_MISSING_PADDING_WIDTH;
                   goto error_return;
               }
  -            tokenbuf_set(&number1, p, p + rc, 0);
               p += rc;
               if (*p != '/') {
                   rc = VAR_ERR_MALFORMATTED_PADDING;
  @@ -1308,7 +1308,7 @@
               }
               p++;
               if (data->begin) {
  -                rc = op_padding(data, &number1, &replace, p[-1]);
  +                rc = op_padding(var, ctx, data, num1, &replace, p[-1]);
                   if (rc < 0)
                       goto error_return;
               }
  @@ -1337,25 +1337,6 @@
       tokenbuf_free(&number1);
       tokenbuf_free(&number2);
       return rc;
  -}
  -
  -/* parse an integer number ("123") */
  -static int 
  -parse_integer(
  -    var_t *var, var_parse_t *ctx,
  -    const char *begin, const char *end,
  -    int *result)
  -{
  -    const char *p;
  -
  -    p = begin;
  -    (*result) = 0;
  -    while (isdigit(*p) && p != end) {
  -        (*result) *= 10;
  -        (*result) += (*p - '0');
  -        p++;
  -    }
  -    return (p - begin);
   }
   
   /* parse numerical expression operand */

From ossp-cvs-owner@ossp.org  Mon Mar  4 12:53:28 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 00C81763DD; Mon,  4 Mar 2002 12:53:27 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var TODO var.c var.h var.pod var_test.c
Message-Id: <20020304115327.00C81763DD@mail.ossp.org>
Date: Mon,  4 Mar 2002 12:53:27 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-Mar-2002 12:53:27
  Branch: HEAD                             Handle: 2002030411532700

  Modified files:
    ossp-pkg/var            TODO var.c var.h var.pod var_test.c

  Log:
    Add new important feature: user-supplied post-operation functions.
    This allows one to configure a var_cb_operation_t callback in
    the var_t context and allow it to implement functions triggered
    by ${name:%func[(arg)]}. This is especially intended for
    application-specific encoding and post-adjustment functions.

  Summary:
    Revision    Changes     Path
    1.20        +0  -5      ossp-pkg/var/TODO
    1.76        +143 -8     ossp-pkg/var/var.c
    1.27        +12 -1      ossp-pkg/var/var.h
    1.25        +99 -2      ossp-pkg/var/var.pod
    1.39        +54 -0      ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/TODO
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 TODO
  --- ossp-pkg/var/TODO	28 Feb 2002 12:10:33 -0000	1.19
  +++ ossp-pkg/var/TODO	4 Mar 2002 11:53:27 -0000	1.20
  @@ -19,8 +19,3 @@
   
    o document exception handling
   
  - o additional feature: functions via callback.
  -   ${foo:F<bar>:F<quux>} calls callback for bar with result of foo
  -   expansion and then callback for quux with the result returned from
  -   bar.
  -
  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.75 -r1.76 var.c
  --- ossp-pkg/var/var.c	4 Mar 2002 11:37:34 -0000	1.75
  +++ ossp-pkg/var/var.c	4 Mar 2002 11:53:27 -0000	1.76
  @@ -72,19 +72,21 @@
   
   /* the external context structure */
   struct var_st {
  -    var_syntax_t   syntax;
  -    char_class_t   syntax_nameclass;
  -    var_cb_value_t cb_value_fct;
  -    void          *cb_value_ctx;
  +    var_syntax_t         syntax;
  +    char_class_t         syntax_nameclass;
  +    var_cb_value_t       cb_value_fct;
  +    void                *cb_value_ctx;
  +    var_cb_operation_t   cb_operation_fct;
  +    void                *cb_operation_ctx;
   };
   
   /* the internal expansion context structure */
   struct var_parse_st {
       struct var_parse_st *lower;
  -    int force_expand;
  -    int rel_lookup_flag;
  -    int rel_lookup_cnt;
  -    int index_this;
  +    int                  force_expand;
  +    int                  rel_lookup_flag;
  +    int                  rel_lookup_cnt;
  +    int                  index_this;
   };
   typedef struct var_parse_st var_parse_t;
   
  @@ -443,6 +445,7 @@
   /* forward declarations */
   static int parse_variable(var_t *var, var_parse_t *ctx, const char *begin, const char *end, tokenbuf_t *result);
   static int parse_numexp (var_t *var, var_parse_t *ctx, const char *begin, const char *end, int *result, int *failed);
  +static int parse_name   (var_t *var, var_parse_t *ctx, const char *begin, const char *end);
   
   /* parse substitution text */
   static int 
  @@ -485,6 +488,71 @@
       return (p - begin);
   }
   
  +/* parse opertion argument text */
  +static int 
  +parse_opargtext(
  +    var_t *var, var_parse_t *ctx,
  +    const char *begin, const char *end)
  +{
  +    const char *p;
  +
  +    /* parse until delim_init or ')' */
  +    for (p = begin; p != end && *p != var->syntax.delim_init && *p != ')'; p++) {
  +        if (*p == var->syntax.escape) {
  +            if (p + 1 == end)
  +                return VAR_ERR_INCOMPLETE_QUOTED_PAIR;
  +            p++;
  +        }
  +    }
  +    return (p - begin);
  +}
  +
  +static int 
  +parse_opargtext_or_variable(
  +    var_t *var, var_parse_t *ctx,
  +    const char *begin, const char *end,
  +    tokenbuf_t *result)
  +{
  +    const char *p;
  +    tokenbuf_t tmp;
  +    int rc;
  +
  +    tokenbuf_init(result);
  +    tokenbuf_init(&tmp);
  +    p = begin;
  +    if (p == end)
  +        return 0;
  +    do {
  +        rc = parse_opargtext(var, ctx, p, end);
  +        if (rc < 0)
  +            goto error_return;
  +        if (rc > 0) {
  +            if (!tokenbuf_append(result, p, rc)) {
  +                rc = VAR_ERR_OUT_OF_MEMORY;
  +                goto error_return;
  +            }
  +            p += rc;
  +        }
  +        rc = parse_variable(var, ctx, p, end, &tmp);
  +        if (rc < 0)
  +            goto error_return;
  +        if (rc > 0) {
  +            p += rc;
  +            if (!tokenbuf_merge(result, &tmp)) {
  +                rc = VAR_ERR_OUT_OF_MEMORY;
  +                goto error_return;
  +            }
  +        }
  +    } while (rc > 0);
  +    tokenbuf_free(&tmp);
  +    return (p - begin);
  +
  +    error_return:
  +    tokenbuf_free(&tmp);
  +    tokenbuf_free(result);
  +    return rc;
  +}
  +
   /* parse expression or variable */
   static int 
   parse_exptext_or_variable(
  @@ -1314,6 +1382,62 @@
               }
               break;
           }
  +        case '%': {
  +            /* operation callback function */
  +            const char *op_ptr;
  +            size_t op_len;
  +            const char *arg_ptr;
  +            size_t arg_len;
  +            const char *val_ptr;
  +            size_t val_len;
  +            const char *out_ptr;
  +            size_t out_len; 
  +            size_t out_size;
  +            tokenbuf_t args;
  +
  +            p++;
  +            rc = parse_name(var, ctx, p, end);
  +            if (rc < 0)
  +                goto error_return;
  +            op_ptr = p;
  +            op_len = rc;
  +            p += rc;
  +            if (*p == '(') {
  +                p++;
  +                tokenbuf_init(&args);
  +                rc = parse_opargtext_or_variable(var, ctx, p, end, &args);
  +                if (rc < 0)
  +                    goto error_return;
  +                p += rc;
  +                arg_ptr = args.begin;
  +                arg_len = args.end - args.begin;
  +                if (*p != ')') {
  +                    rc = VAR_ERR_MALFORMED_OPERATION_ARGUMENTS;
  +                    goto error_return;
  +                }
  +                p++;
  +            }
  +            else {
  +                arg_ptr = NULL;
  +                arg_len = 0;
  +            }
  +            val_ptr = data->begin;
  +            val_len = data->end - data->begin;
  +
  +            if (data->begin != NULL && var->cb_operation_fct != NULL) {
  +                /* call operation callback function */
  +                rc = (*var->cb_operation_fct)(var, var->cb_operation_ctx,
  +                                              op_ptr, op_len,
  +                                              arg_ptr, arg_len,
  +                                              val_ptr, val_len,
  +                                              &out_ptr, &out_len, &out_size);
  +                if (rc < 0)
  +                    goto error_return;
  +                tokenbuf_free(data);
  +                tokenbuf_set(data, out_ptr, out_ptr+out_len, out_size);
  +            }
  +            break;
  +        }
           default:
               return VAR_ERR_UNKNOWN_COMMAND_CHAR;
       }
  @@ -2141,6 +2265,15 @@
               var->cb_value_ctx = ctx;
               break;
           }
  +        case VAR_CONFIG_CB_OPERATION: {
  +            var_cb_operation_t fct;
  +            void *ctx;
  +            fct = (var_cb_operation_t)va_arg(ap, void *);
  +            ctx = (void *)va_arg(ap, void *);
  +            var->cb_operation_fct = fct;
  +            var->cb_operation_ctx = ctx;
  +            break;
  +        }
           default:
               return VAR_RC(VAR_ERR_INVALID_ARGUMENT);
       }
  @@ -2266,6 +2399,8 @@
   /* var_rc_t to string mapping table */
   static const char *var_errors[] = {
       "everything ok",                                           /* VAR_OK = 0 */
  +    "undefined operation",                                     /* VAR_ERR_UNDEFINED_OPERATION */
  +    "malformed operation argument list",                       /* VAR_ERR_MALFORMED_OPERATION_ARGUMENTS */
       "incomplete named character",                              /* VAR_ERR_INCOMPLETE_NAMED_CHARACTER */
       "incomplete hexadecimal value",                            /* VAR_ERR_INCOMPLETE_HEX */
       "invalid hexadecimal value",                               /* VAR_ERR_INVALID_HEX */
  Index: ossp-pkg/var/var.h
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 var.h
  --- ossp-pkg/var/var.h	28 Feb 2002 12:40:01 -0000	1.26
  +++ ossp-pkg/var/var.h	4 Mar 2002 11:53:27 -0000	1.27
  @@ -35,6 +35,8 @@
   /* Error codes */
   typedef enum {
       VAR_ERR_CALLBACK                        = -64,
  +    VAR_ERR_UNDEFINED_OPERATION             = -44,
  +    VAR_ERR_MALFORMED_OPERATION_ARGUMENTS   = -43,
       VAR_ERR_INVALID_CHAR_IN_LOOP_LIMITS     = -42,
       VAR_ERR_UNTERMINATED_LOOP_CONSTRUCT     = -41,
       VAR_ERR_DIVISION_BY_ZERO_IN_INDEX       = -40,
  @@ -85,7 +87,8 @@
   
   typedef enum {
       VAR_CONFIG_SYNTAX,
  -    VAR_CONFIG_CB_VALUE
  +    VAR_CONFIG_CB_VALUE,
  +    VAR_CONFIG_CB_OPERATION
   } var_config_t;
   
   typedef struct {
  @@ -103,6 +106,14 @@
       var_t *var, void *ctx,
       const char  *var_ptr, size_t  var_len, int var_idx,
       const char **val_ptr, size_t *val_len, size_t *val_size
  +);
  +
  +typedef var_rc_t (*var_cb_operation_t)(
  +    var_t *var, void *ctx,
  +    const char  *op_ptr, size_t op_len,
  +    const char  *arg_ptr, size_t arg_len,
  +    const char  *val_ptr, size_t val_len,
  +    const char **out_ptr, size_t *out_len, size_t *out_size
   );
   
   extern const char var_id[];
  Index: ossp-pkg/var/var.pod
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 var.pod
  --- ossp-pkg/var/var.pod	28 Feb 2002 14:58:07 -0000	1.24
  +++ ossp-pkg/var/var.pod	4 Mar 2002 11:53:27 -0000	1.25
  @@ -43,7 +43,8 @@
   B<var_t>,
   B<var_config_t>,
   B<var_syntax_t>,
  -B<var_cb_value_t>.
  +B<var_cb_value_t>,
  +B<var_cb_operation_t>.
   
   =item Functions:
   
  @@ -172,6 +173,11 @@
   of I<name> is either left justified (flag "C<l>"), centered (flag
   "C<c>"), or right justified (flag "C<r>").
   
  +=item C<${>I<name>C<:%>I<func>[C<(>I<arg>C<)>]C<}>
  +
  +C<$>I<name> after passing it to an application-supplied function I<func>.
  +The optional argument I<arg> is passed to the function, too.
  +By default no such functions are defined.
   
   =item C<[>I<body>C<]>, C<[>I<body>C<]>C<{>I<start>C<,>I<step>C<,>I<end>C<}>
   
  @@ -224,6 +230,8 @@
                  | 'p' '/' NUMBER 
                        '/' (variable|TEXT_SUBST)* 
                        '/' ('r'|'l'|'c')
  +               | '%' (name|variable)+ 
  +                     ('(' (TEXT_ARGS)? ')')?
                  | 'l'
                  | 'u'
   
  @@ -241,7 +249,8 @@
   
    NUMBER      ::= ('0'|...|'9')+
   
  - TEXT_SUBST  ::= ^(DELIM_INIT|'/')
  + TEXT_SUBST  ::= (^(DELIM_INIT|'/'))+
  + TEXT_ARGS   ::= (^(DELIM_INIT|')'))+
    TEXT_EXP    ::= (^(DELIM_INIT|DELIM_CLOSE|':'))+
    TEXT        ::= (^(DELIM_INIT|INDEX_OPEN|INDEX_CLOSE))+
   
  @@ -420,6 +429,94 @@
   implementor wishes to distinguish between different reasons for failure,
   he subtract own callback return codes from this value, i.e., return
   (C<VAR_ERR_CALLBACK> - I<n>) (I<n> E<gt>= 0) from the callback function.
  +
  +=item B<var_cb_operation_t>
  +
  +This is an exported function pointer type for variable value operation
  +functions. Such a callback function B<cb> has to be of the following
  +prototype:
  +
  +var_rc_t *B<cb>(var_t *I<var>, void *I<ctx>, const char *I<op_ptr>,
  +size_t I<op_len>, const char *I<arg_ptr>, size_t I<arg_len>, const
  +char *I<val_ptr>, size_t I<val_len>, const char **I<out_ptr>, size_t
  +*I<out_len>, size_t *I<out_size>);
  +
  +This function will be called by var_expand() internally whenever a
  +custom operation is used. Its parameters are:
  +
  +=over 4
  +
  +=item var_t *I<var>
  +
  +This is the passed-through argument as passed to var_expand() as the
  +first argument. This can be used in the callback function to distinguish
  +the expansion context or to resolve return codes, etc.
  +
  +=item void *I<ctx>
  +
  +This is the passed-through argument as passed to var_config() on
  +C<VAR_CONFIG_CB_OPERATION> as the forth argument. This can be used
  +to provide an internal context to the callback function through
  +var_expand().
  +
  +=item const char *I<op_ptr>
  +
  +This is a pointer to the name of the operation which var_expand() wishes
  +to perform. Please note that the string is NOT necessarily terminated
  +by a C<NUL> ('C<\0>') character. If the callback function needs it
  +C<NUL>-terminated, it has to copy the string into an a temporary buffer
  +of its own and C<NUL>-terminate it there.
  +
  +=item size_t I<op_len>
  +
  +This is the length of the variable name at I<op_ptr>.
  +
  +=item const char *I<arg_ptr>
  +
  +This is a pointer to the optional argument string to the operation. If
  +no argument string or an empty argument string was supplied this is
  +C<NULL>.
  +
  +=item size_t I<arg_len>
  +
  +This is the length of the I<arg_ptr>.
  +
  +=item const char *I<val_ptr>
  +
  +This is a pointer to the value of the variable which the
  +operation wants to adjust.
  +
  +=item size_t I<val_len>
  +
  +This is the length of the I<val_ptr>.
  +
  +=item const char **I<out_ptr>
  +
  +This is a pointer to the location where the callback function should
  +store the pointer to the adjusted value.
  +
  +=item size_t *I<out_len>
  +
  +This is a pointer to the location where the callback function should
  +store the length of the adjusted value of the variable.
  +
  +=item size_t *I<out_size>
  +
  +This is a pointer to the location where the callback function should
  +store the size of the buffer that has been allocated to hold the
  +adjusted value of the variable. 
  +
  +If no buffer has been allocated by the callback at all, because the
  +variable uses some other means of storing the contents, this should be
  +set to zero (C<0>).
  +
  +In case a buffer size greater than zero is returned by the callback,
  +var_expand() will make use of that buffer internally if possible. It
  +will also free(3) the buffer when it is not needed anymore, so it
  +is important that it was previously allocated with malloc(3) by the
  +callback.
  +
  +=back
   
   =back
   
  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.38 -r1.39 var_test.c
  --- ossp-pkg/var/var_test.c	28 Feb 2002 20:27:05 -0000	1.38
  +++ ossp-pkg/var/var_test.c	4 Mar 2002 11:53:27 -0000	1.39
  @@ -30,9 +30,55 @@
   #include <stdio.h>
   #include <string.h>
   #include <errno.h>
  +#include <ctype.h>
   
   #include "var.h"
   
  +static var_rc_t 
  +var_operation(
  +    var_t *var, void *ctx,
  +    const char  *op_ptr, size_t op_len,
  +    const char  *arg_ptr, size_t arg_len,
  +    const char  *val_ptr, size_t val_len,
  +    char **out_ptr, size_t *out_len, size_t *out_size)
  +{
  +    int i;
  +
  +    fprintf(stderr, "op=<%s>(%d) arg=<%s>(%d) val=<%s>(%d)\n", 
  +            op_ptr, op_len, arg_ptr, arg_len, val_ptr, val_len);
  +    if (val_ptr == NULL) {
  +        *out_ptr = "";
  +        *out_len = 0;
  +        *out_size = 0;
  +        return VAR_OK;
  +    }
  +    if (op_len == 6 && strncmp(op_ptr, "return", 6) == 0) {
  +        *out_ptr = malloc(arg_len);
  +        *out_len = arg_len;
  +        *out_size = arg_len;
  +        memcpy(*out_ptr, arg_ptr, arg_len);
  +        return VAR_OK;
  +    }
  +    else if (op_len == 5 && strncmp(op_ptr, "upper", 5) == 0) {
  +        *out_ptr = malloc(val_len);
  +        *out_len = val_len;
  +        *out_size = val_len;
  +        for (i = 0; i < val_len; i++)
  +            (*out_ptr)[i] = (char)toupper((int)(val_ptr[i]));
  +        return VAR_OK;
  +    }
  +    else if (op_len == 5 && strncmp(op_ptr, "lower", 5) == 0) {
  +        *out_ptr = malloc(val_len);
  +        *out_len = val_len;
  +        *out_size = val_len;
  +        for (i = 0; i < val_len; i++)
  +            (*out_ptr)[i] = (char)tolower((int)(val_ptr[i]));
  +        return VAR_OK;
  +    }
  +    else 
  +        return VAR_ERR_UNDEFINED_OPERATION;
  +}
  +
   struct variable {
       const char *name;
       const unsigned int idx;
  @@ -177,6 +223,9 @@
           { "-[${ARRAY[#]}:]{1,$NUMBER}-",  "-entry1:entry2:-"                               },
           { "-[${ARRAY[#]}:]{1,3,5}-",      "-entry1::-"                                     },
           { "${MULTILINE:s/^/ | /g}",       " | line1\n | line2\n"                           },
  +        { "${HOME:%upper}",               "/HOME/REGRESSION-TESTS"                         },
  +        { "${HOME:%upper:%lower}",        "/home/regression-tests"                         },
  +        { "${EMPTY:%return($HOME)}",      "/home/regression-tests"                         },
           {
           "[${ARRAY}:${ARRAY[#]}-]",
           "entry0:entry0-entry0:entry1-entry0:entry2-entry0:entry3-"
  @@ -212,6 +261,11 @@
           return 1;
       }
       if ((rc = var_config(var, VAR_CONFIG_CB_VALUE, var_lookup, vars)) != VAR_OK) {
  +        var_strerror(NULL, rc, &err);
  +        printf("unable to configure variable expansion context: %s (%d)\n", err, rc);
  +        return 1;
  +    }
  +    if ((rc = var_config(var, VAR_CONFIG_CB_OPERATION, var_operation, NULL)) != VAR_OK) {
           var_strerror(NULL, rc, &err);
           printf("unable to configure variable expansion context: %s (%d)\n", err, rc);
           return 1;

From ossp-cvs-owner@ossp.org  Mon Mar  4 12:54:06 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D58EC763E2; Mon,  4 Mar 2002 12:54:05 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var TODO
Message-Id: <20020304115405.D58EC763E2@mail.ossp.org>
Date: Mon,  4 Mar 2002 12:54:05 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-Mar-2002 12:54:05
  Branch: HEAD                             Handle: 2002030411540500

  Modified files:
    ossp-pkg/var            TODO

  Log:
    already done

  Summary:
    Revision    Changes     Path
    1.21        +0  -2      ossp-pkg/var/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/var/TODO
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 TODO
  --- ossp-pkg/var/TODO	4 Mar 2002 11:53:27 -0000	1.20
  +++ ossp-pkg/var/TODO	4 Mar 2002 11:54:05 -0000	1.21
  @@ -15,7 +15,5 @@
      empty strings for undefined variables. This is certainly
      intended this way, but has to be documented better?
   
  - o use internal context to carry information
  -
    o document exception handling
   

From ossp-cvs-owner@ossp.org  Mon Mar  4 13:01:54 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 23C8A763DD; Mon,  4 Mar 2002 13:01:54 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var TODO var.c var.pod var_test.c
Message-Id: <20020304120154.23C8A763DD@mail.ossp.org>
Date: Mon,  4 Mar 2002 13:01:54 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-Mar-2002 13:01:54
  Branch: HEAD                             Handle: 2002030412015300

  Modified files:
    ossp-pkg/var            TODO var.c var.pod var_test.c

  Log:
    Fix regex problem by no longer allowing variables in the pattern part of
    s/pattern/subst/. Because it is far more common that one needs '$' there
    instead of a variable.

  Summary:
    Revision    Changes     Path
    1.22        +0  -8      ossp-pkg/var/TODO
    1.77        +21 -1      ossp-pkg/var/var.c
    1.26        +2  -1      ossp-pkg/var/var.pod
    1.40        +1  -0      ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/TODO
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 TODO
  --- ossp-pkg/var/TODO	4 Mar 2002 11:54:05 -0000	1.21
  +++ ossp-pkg/var/TODO	4 Mar 2002 12:01:53 -0000	1.22
  @@ -1,13 +1,5 @@
                                  OSSP var
   
  - o problem:
  -   ${foo:s/^(.+)$/<\1>/} 
  -   -> fails with malformatted search & replace error because
  -      it tries to parse the $ as a variable.
  -   ${foo:s/^(.+)\$/<\1>/} 
  -   -> does not substitute because it leaves the \$ in the regex
  -      and this no longer matches the end (instead it matches a dollar)
  -
    o "problem"!?:
      ${unknown:-foo} fails on force_expand and results
      in no expansion (kept as is) if not forced_expand.
  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.76 -r1.77 var.c
  --- ossp-pkg/var/var.c	4 Mar 2002 11:53:27 -0000	1.76
  +++ ossp-pkg/var/var.c	4 Mar 2002 12:01:53 -0000	1.77
  @@ -447,6 +447,25 @@
   static int parse_numexp (var_t *var, var_parse_t *ctx, const char *begin, const char *end, int *result, int *failed);
   static int parse_name   (var_t *var, var_parse_t *ctx, const char *begin, const char *end);
   
  +/* parse pattern text */
  +static int 
  +parse_pattern(
  +    var_t *var, var_parse_t *ctx,
  +    const char *begin, const char *end)
  +{
  +    const char *p;
  +
  +    /* parse until '/' */
  +    for (p = begin; p != end && *p != '/'; p++) {
  +        if (*p == var->syntax.escape) {
  +            if (p + 1 == end)
  +                return VAR_ERR_INCOMPLETE_QUOTED_PAIR;
  +            p++;
  +        }
  +    }
  +    return (p - begin);
  +}
  +
   /* parse substitution text */
   static int 
   parse_substext(
  @@ -1283,9 +1302,10 @@
               if (*p != '/')
                   return VAR_ERR_MALFORMATTED_REPLACE;
               p++;
  -            rc = parse_substext_or_variable(var, ctx, p, end, &search);
  +            rc = parse_pattern(var, ctx, p, end);
               if (rc < 0)
                   goto error_return;
  +            tokenbuf_set(&search, p, p + rc, 0);
               p += rc;
               if (*p != '/') {
                   rc = VAR_ERR_MALFORMATTED_REPLACE;
  Index: ossp-pkg/var/var.pod
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 var.pod
  --- ossp-pkg/var/var.pod	4 Mar 2002 11:53:27 -0000	1.25
  +++ ossp-pkg/var/var.pod	4 Mar 2002 12:01:53 -0000	1.26
  @@ -221,7 +221,7 @@
                  | 'o' NUMBER ('-'|',') (NUMBER)?
                  | '#'
                  | '*' (TEXT_EXP|variable)+
  -               | 's' '/' (variable|TEXT_SUBST)+ 
  +               | 's' '/' (TEXT_PATTERN)+ 
                        '/' (variable|TEXT_SUBST)* 
                        '/' ('g'|'i'|'t')*
                  | 'y' '/' (variable|TEXT_SUBST)+ 
  @@ -249,6 +249,7 @@
   
    NUMBER      ::= ('0'|...|'9')+
   
  + TEXT_PATTERN::= (^('/'))+
    TEXT_SUBST  ::= (^(DELIM_INIT|'/'))+
    TEXT_ARGS   ::= (^(DELIM_INIT|')'))+
    TEXT_EXP    ::= (^(DELIM_INIT|DELIM_CLOSE|':'))+
  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.39 -r1.40 var_test.c
  --- ossp-pkg/var/var_test.c	4 Mar 2002 11:53:27 -0000	1.39
  +++ ossp-pkg/var/var_test.c	4 Mar 2002 12:01:53 -0000	1.40
  @@ -186,6 +186,7 @@
           { "${HOME:s/E/bla/t}",            "/home/regression-tests"                         },
           { "${HOME:s/E/bla/ti}",           "/hombla/regression-tests"                       },
           { "${HOME:s/E/bla/tig}",          "/hombla/rblagrblassion-tblasts"                 },
  +        { "${HOME:s/^(.*)$/<\\1>/}",      "</home/regression-tests>"                       },
           { "${HOME:o1-5}",                 "home/"                                          },
           { "${HOME:o1,5}",                 "home/"                                          },
           { "${HOME:o5,}",                  "/regression-tests"                              },

From ossp-cvs-owner@ossp.org  Mon Mar  4 14:12:24 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4E78B763DD; Mon,  4 Mar 2002 14:12:24 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Message-Id: <20020304131224.4E78B763DD@mail.ossp.org>
Date: Mon,  4 Mar 2002 14:12:24 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   04-Mar-2002 14:12:24
  Branch: HEAD                             Handle: 2002030413122300

  Modified files:
    ossp-pkg/var            var.c

  Log:
    fix error description handling

  Summary:
    Revision    Changes     Path
    1.78        +3  -3      ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.77 -r1.78 var.c
  --- ossp-pkg/var/var.c	4 Mar 2002 12:01:53 -0000	1.77
  +++ ossp-pkg/var/var.c	4 Mar 2002 13:12:23 -0000	1.78
  @@ -2419,8 +2419,6 @@
   /* var_rc_t to string mapping table */
   static const char *var_errors[] = {
       "everything ok",                                           /* VAR_OK = 0 */
  -    "undefined operation",                                     /* VAR_ERR_UNDEFINED_OPERATION */
  -    "malformed operation argument list",                       /* VAR_ERR_MALFORMED_OPERATION_ARGUMENTS */
       "incomplete named character",                              /* VAR_ERR_INCOMPLETE_NAMED_CHARACTER */
       "incomplete hexadecimal value",                            /* VAR_ERR_INCOMPLETE_HEX */
       "invalid hexadecimal value",                               /* VAR_ERR_INVALID_HEX */
  @@ -2462,7 +2460,9 @@
       "bracket expression in array variable's index not closed", /* VAR_ERR_UNCLOSED_BRACKET_IN_INDEX */
       "division by zero error in index specification",           /* VAR_ERR_DIVISION_BY_ZERO_IN_INDEX */
       "unterminated loop construct",                             /* VAR_ERR_UNTERMINATED_LOOP_CONSTRUCT */
  -    "invalid character in loop limits"                         /* VAR_ERR_INVALID_CHAR_IN_LOOP_LIMITS */
  +    "invalid character in loop limits",                        /* VAR_ERR_INVALID_CHAR_IN_LOOP_LIMITS */
  +    "malformed operation argument list",                       /* VAR_ERR_MALFORMED_OPERATION_ARGUMENTS */
  +    "undefined operation"                                      /* VAR_ERR_UNDEFINED_OPERATION */
   };
   
   /* transslate a return code into its corresponding descriptive text */

From ossp-cvs-owner@ossp.org  Mon Mar  4 16:54:29 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 623F5763DD; Mon,  4 Mar 2002 16:54:29 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO README example.conf fixme.h lmtp...
Message-Id: <20020304155429.623F5763DD@mail.ossp.org>
Date: Mon,  4 Mar 2002 16:54:29 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   04-Mar-2002 16:54:29
  Branch: HEAD                             Handle: 2002030415542800

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO README example.conf fixme.h
                            lmtp2nntp_config.c lmtp2nntp_main.c
                            lmtp2nntp_version.c test.sh

  Log:
    Integration done replacing headervalue with new headerrule stuff. This version
    is v1.2a3 and runs live on visp.engelschall.com

  Summary:
    Revision    Changes     Path
    1.56        +0  -18     ossp-pkg/lmtp2nntp/00TODO
    1.17        +1  -1      ossp-pkg/lmtp2nntp/README
    1.16        +22 -0      ossp-pkg/lmtp2nntp/example.conf
    1.20        +4  -6      ossp-pkg/lmtp2nntp/fixme.h
    1.64        +7  -7      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.46        +10 -26     ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
    1.3         +9  -9      ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
    1.13        +6  -6      ossp-pkg/lmtp2nntp/test.sh
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.55 -r1.56 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	13 Feb 2002 16:25:38 -0000	1.55
  +++ ossp-pkg/lmtp2nntp/00TODO	4 Mar 2002 15:54:28 -0000	1.56
  @@ -101,24 +101,6 @@
   
     -h [pri]:[regex]:header:[val]
   
  -  # merge values from duplicate headers and separte them with "comma space"
  -  -h :(Reply-To|To|Cc|Bcc):$0: [%{$0[#]}%{$0[#+1]:+, }]
  -
  -  # keep only first value from duplicate headers
  -  -h :(X-Firstonly):$0: %{$0[0]}
  -
  -  # replace empty Subject with text "None"
  -  -h :Subject: %{$Subject:-None}
  -
  -  # create Message-ID if omitted or illegal (<> single @)
  -  -h :Messageid: %{messagid:s/^([^@+@[^@]+)$/<$1/:s/^[^<].*$/%{tool.createmessageid}/}
  -
  -  # append a header
  -  -h ::X-Append: Tail
  -
  -  # remove a header (empty value)
  -  -h ::X-Delete:
  -
     foreach rule {
         if (rule has regex) {
             foreach header {
  Index: ossp-pkg/lmtp2nntp/README
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 README
  --- ossp-pkg/lmtp2nntp/README	31 Dec 2001 15:15:36 -0000	1.16
  +++ ossp-pkg/lmtp2nntp/README	4 Mar 2002 15:54:28 -0000	1.17
  @@ -7,7 +7,7 @@
                     |_|                        |_|    
   
     OSSP lmtp2nntp - Mail to News Gateway
  -  Version 1.2a2 (31-Dec-2001)
  +  Version 1.2a3 (04-Mar-2002)
   
     ABSTRACT
   
  Index: ossp-pkg/lmtp2nntp/example.conf
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 example.conf
  --- ossp-pkg/lmtp2nntp/example.conf	31 Jan 2002 15:54:53 -0000	1.15
  +++ ossp-pkg/lmtp2nntp/example.conf	4 Mar 2002 15:54:28 -0000	1.16
  @@ -53,3 +53,25 @@
   version                                         #see -v aka --version
   newsgroup       "test"
   newsgroup       "alt.test"                      #see man page for information about newsgroup
  +
  +
  +        ### CRUCIAL GATEWAY HEADER REWRITE RULES ###
  +
  +# merge values from duplicate headers and separte them with "comma space"
  +headerrule 500:(Reply-To|To|Cc|Bcc):$0: [%{$0[#]}%{$0[#+1]:+, }]
  +
  +# keep only first value from duplicate headers
  +headerrule 510:(X-Firstonly):$0: %{$0[0]}
  +
  +# replace empty Subject with text "None"
  +headerrule 520:Subject: %{$Subject:-None}
  +
  +# create Message-ID if omitted or illegal (<> single @)
  +headerrule 530:Messageid: %{messagid:s/^([^@+@[^@]+)$/<$1/:s/^[^<].*$/%{tool.createmessageid}/}
  +
  +# append a header
  +headerrule 540::X-Append: Tail
  +
  +# remove a header (empty value)
  +headerrule 550::X-Delete:
  +
  Index: ossp-pkg/lmtp2nntp/fixme.h
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 fixme.h
  --- ossp-pkg/lmtp2nntp/fixme.h	28 Feb 2002 12:57:55 -0000	1.19
  +++ ossp-pkg/lmtp2nntp/fixme.h	4 Mar 2002 15:54:28 -0000	1.20
  @@ -67,13 +67,7 @@
       char           *option_operationmodefakestatus;
       char           *option_operationmodefakedsn;
       int             option_maxmessagesize;
  -
       headerrule_t   *option_firstheaderrule;
  -    /* FIXME obsolete */
  -    char           *azHeaderValuePairs;
  -    size_t          asHeaderValuePairs;
  -
  -
       int             option_timeout_lmtp_accept;
       int             option_timeout_lmtp_read;
       int             option_timeout_lmtp_write;
  @@ -127,5 +121,9 @@
       OPERATIONMODE_POST,
       OPERATIONMODE_FEED
   };
  +
  +void msg_headermatrixbuildup(msg_t *msg);
  +void msg_headermatrixteardwn(msg_t *msg);
  +void headerrewrite(lmtp2nntp_t *ctx);
   
   #endif /* __FIXME_H__ */
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.63 -r1.64 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	28 Feb 2002 15:57:09 -0000	1.63
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	4 Mar 2002 15:54:28 -0000	1.64
  @@ -104,10 +104,6 @@
       return L2_OK;
   }
   
  -static void msg_headermatrixbuildup(msg_t *msg);
  -static void msg_headermatrixteardwn(msg_t *msg);
  -static void headerrewrite(lmtp2nntp_t *ctx);
  -
   static var_syntax_t syntax_regex = {
       '\\',         /* escape        */ 
       '$',          /* varinit       */ 
  @@ -1250,7 +1246,7 @@
       return rc;
   }
   
  -static void msg_headermatrixbuildup(msg_t *msg)
  +void msg_headermatrixbuildup(msg_t *msg)
   {
       ex_t ex;
       volatile headerdata_t *hdNew = NULL;
  @@ -1313,7 +1309,7 @@
       }
   }
   
  -static void msg_headermatrixteardwn(msg_t *msg)
  +void msg_headermatrixteardwn(msg_t *msg)
   {
       ex_t ex;
       try {
  @@ -1351,7 +1347,7 @@
       }
   }
   
  -static void headerrewrite(lmtp2nntp_t *ctx)
  +void headerrewrite(lmtp2nntp_t *ctx)
   {
       headerrule_t *hrI;
       headerdata_t *hdI, *hdNew;
  @@ -1359,6 +1355,10 @@
   #define OVECSIZE 30
       int            ovec[OVECSIZE];
       var_rc_t rc; char *cp; //FIXME what a bad name, it's not the returncode of this function
  +
  +    /* short circuit in case no headerrules were set up */
  +    if (ctx->option_firstheaderrule == NULL)
  +        return;
   
       { //FIXME debug code block
           int i;
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.45 -r1.46 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	28 Feb 2002 15:57:09 -0000	1.45
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	4 Mar 2002 15:54:28 -0000	1.46
  @@ -368,8 +368,6 @@
       ctx->option_operationmodefakedsn    = NULL;
       ctx->option_maxmessagesize = 0;
       ctx->option_firstheaderrule = NULL;
  -    ctx->azHeaderValuePairs = NULL; //FIXME obsolete
  -    ctx->asHeaderValuePairs = 0;    //FIXME obsolete
       ctx->option_timeout_lmtp_accept  = 0;
       ctx->option_timeout_lmtp_read    = 0;
       ctx->option_timeout_lmtp_write   = 0;
  @@ -437,7 +435,6 @@
       (void)option_create(&o, ctx->val); /* FIXME */
       (void)option_parse(o, argc, argv);
       (void)config_context(ctx);
  -    CU(0); //FIXME
   
       if (getuid() != ctx->option_uid) {
           if (setuid(ctx->option_uid) == -1) {
  @@ -676,8 +673,7 @@
           sa_addr_destroy(ctx->saaServerbind);
       if (ctx->option_restrictheader != NULL)
           free(ctx->option_restrictheader);
  -    if (ctx->azHeaderValuePairs != NULL)
  -        free(ctx->azHeaderValuePairs);
  +    //FIXME if (ctx->azHeaderValuePairs != NULL) free(ctx->azHeaderValuePairs); what about headerrules
       if (ctx->option_pidfile != NULL)
           free(ctx->option_pidfile);
       if (ctx->progname != NULL)
  @@ -1476,22 +1472,11 @@
           }
       }
   
  -    /* Optionally add command line specified Header/Value Pairs
  -     */
  -    log0(ctx, TRACE, "adding header/value pairs");
  -
  -    cp = NULL;
  -    while ((cp = argz_next(ctx->azHeaderValuePairs, ctx->asHeaderValuePairs, cp)) != NULL) {
  -        var_rc_t var_rc;
  -        char *res_ptr;
  -        if ((var_rc = var_expand(ctx->config_varctx, cp, strlen(cp), &res_ptr, NULL, TRUE)) != VAR_OK) {
  -            log3(ctx, ERROR, "expansion of '%s' failed: %s (%d)", cp, var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  -            continue;
  -        }
  -        log1(ctx, DEBUG, "adding expanded header: \"%s\"", res_ptr);
  -        argz_add(&ctx->msg->azHeaders, &ctx->msg->asHeaders, res_ptr);
  -        free(res_ptr);
  -    }
  +    /* rewrite headers */
  +    log0(ctx, TRACE, "appying header rewrite rules");
  +    msg_headermatrixbuildup(ctx->msg);
  +    headerrewrite(ctx);
  +    msg_headermatrixteardwn(ctx->msg);
   
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   554 Transaction failed
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
  @@ -1616,11 +1601,10 @@
           for (i = 0; i < ctx->nns; i++) {
               if (ctx->pns[i].rc != NNTP_OK) {
                   str_format(errorstring, sizeof(errorstring), 
  -                "${option.destination}[${i}] returned %s\n" /*FIXME*/
  -                "${option.destination}[${i}] lastresp \"%s\"",  /*FIXME*/
  -                i,
  -                nntp_error(ctx->pns[i].rc), 
  -                nntp_lastresp(ctx->pns[i].nntp));
  +                "${option.destination}[%d] returned %s\n" /*FIXME*/
  +                "${option.destination}[%d] lastresp \"%s\"",  /*FIXME*/
  +                i, nntp_error(ctx->pns[i].rc), 
  +                i, nntp_lastresp(ctx->pns[i].nntp));
                   argz_add(&azErr, &asErr, errorstring);
               }
           }
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 lmtp2nntp_version.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	31 Dec 2001 12:03:09 -0000	1.2
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	4 Mar 2002 15:54:28 -0000	1.3
  @@ -8,7 +8,7 @@
   #ifndef _LMTP2NNTP_VERSION_C_
   #define _LMTP2NNTP_VERSION_C_
   
  -#define LMTP2NNTP_VERSION 0x102002
  +#define LMTP2NNTP_VERSION 0x102003
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _LMTP2NNTP_VERSION_C_AS_HEADER_
   
   lmtp2nntp_version_t lmtp2nntp_version = {
  -    0x102002,
  -    "1.2a2",
  -    "1.2a2 (31-Dec-2001)",
  -    "This is OSSP lmtp2nntp, Version 1.2a2 (31-Dec-2001)",
  -    "OSSP lmtp2nntp 1.2a2 (31-Dec-2001)",
  -    "OSSP lmtp2nntp/1.2a2",
  -    "@(#)OSSP lmtp2nntp 1.2a2 (31-Dec-2001)",
  -    "$Id: lmtp2nntp_version.c,v 1.2 2001/12/31 12:03:09 thl Exp $"
  +    0x102003,
  +    "1.2a3",
  +    "1.2a3 (04-Mar-2002)",
  +    "This is OSSP lmtp2nntp, Version 1.2a3 (04-Mar-2002)",
  +    "OSSP lmtp2nntp 1.2a3 (04-Mar-2002)",
  +    "OSSP lmtp2nntp/1.2a3",
  +    "@(#)OSSP lmtp2nntp 1.2a3 (04-Mar-2002)",
  +    "$Id: lmtp2nntp_version.c,v 1.3 2002/03/04 15:54:28 thl Exp $"
   };
   
   #endif /* _LMTP2NNTP_VERSION_C_AS_HEADER_ */
  Index: ossp-pkg/lmtp2nntp/test.sh
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 test.sh
  --- ossp-pkg/lmtp2nntp/test.sh	7 Feb 2002 13:39:38 -0000	1.12
  +++ ossp-pkg/lmtp2nntp/test.sh	4 Mar 2002 15:54:28 -0000	1.13
  @@ -16,10 +16,10 @@
   Message-Id: <200108141251.f7ECpmn74812@dev.de.cw.net>
   From: Thomas Lotterer <Thomas.Lotterer@example.com>
   Received: from cw.example.com (cw.example.com [10.1.1.32])
  -    by gateway.example.com (8.9.2/8.9.2/$Revision: 1.12 $) with SMTP id NAA08840
  +    by gateway.example.com (8.9.2/8.9.2/$Revision: 1.13 $) with SMTP id NAA08840
       for <thomas.lotterer@gateway.example.com>; Mon, 2 Apr 2001 13:20:25 +0200 (MET DST)
   Received: from history (history.example.org [195.143.102.41])
  -    by cw.example.com (8.11.0/8.11.0/$Revision: 1.12 $) with ESMTP id f32BKPb12235
  +    by cw.example.com (8.11.0/8.11.0/$Revision: 1.13 $) with ESMTP id f32BKPb12235
       for <thomas.lotterer@example.com>; Mon, 2 Apr 2001 13:20:25 +0200
   Received: from example.org (littlemua.example.org [195.143.103.160])
   	by history (8.8.8/8.8.8) with ESMTP id LAA12678;
  @@ -126,7 +126,7 @@
   if [ 1 -eq `egrep <${STDOUT} -- '-c.*--client'          | wc -l` ]; then RC="${RC}-c "; fi
   if [ 1 -eq `egrep <${STDOUT} -- '-d.*--destination'     | wc -l` ]; then RC="${RC}-d "; fi
   if [ 1 -eq `egrep <${STDOUT} -- '-g.*--groupmode'       | wc -l` ]; then RC="${RC}-g "; fi
  -if [ 1 -eq `egrep <${STDOUT} -- '-h.*--headervalue'     | wc -l` ]; then RC="${RC}-h "; fi
  +if [ 1 -eq `egrep <${STDOUT} -- '-h.*--headerrule'      | wc -l` ]; then RC="${RC}-h "; fi
   if [ 1 -eq `egrep <${STDOUT} -- '-i.*--include'         | wc -l` ]; then RC="${RC}-i "; fi
   if [ 1 -eq `egrep <${STDOUT} -- '--timeoutlmtp'         | wc -l` ]; then RC="${RC}--timeoutlmtp "; fi
   if [ 1 -eq `egrep <${STDOUT} -- '--timeoutlmtpaccept'   | wc -l` ]; then RC="${RC}--timeoutlmtpaccept "; fi
  @@ -283,11 +283,11 @@
   echon "checking whether -h option adds header/value pair ... "
   prolog
   newmsg
  -./lmtp2nntp <${STDIN} -b - -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} -h "X-Gateway: added it!" ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 --timeoutnntpconnect=1 ${GROUP} >${STDOUT} 2>${STDERR}
  +./lmtp2nntp <${STDIN} -b - -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} -h "::X-Gateway:added it!" ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 --timeoutnntpconnect=1 ${GROUP} >${STDOUT} 2>${STDERR}
   RC="";
   if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
  -if [ 1 -eq `egrep <${L2FILE} 'adding.*header: "X-Gateway:"'     | wc -l` ]; then RC="${RC}head "; fi
  -if [ 1 -eq `egrep <${L2FILE} 'adding.*header: "added it!"'      | wc -l` ]; then RC="${RC}val. "; fi
  +if [ 1 -eq `egrep <${L2FILE} 'appending header X-Gateway:'      | wc -l` ]; then RC="${RC}head "; fi
  +if [ 1 -eq `egrep <${L2FILE} 'header=X-Gateway.*data=added it!' | wc -l` ]; then RC="${RC}val. "; fi
   if [ 1 -eq `egrep <${L2FILE} 'verbatim.*"X-Gateway: added it!"' | wc -l` ]; then RC="${RC}pair "; fi
   if [ "${RC}" != "init head val. pair " ]; then
       echo "NO (got ${RC})"

From ossp-cvs-owner@ossp.org  Tue Mar  5 15:06:19 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AB84A763D9; Tue,  5 Mar 2002 15:06:19 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_filter.c
Message-Id: <20020305140619.AB84A763D9@mail.ossp.org>
Date: Tue,  5 Mar 2002 15:06:19 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   05-Mar-2002 15:06:19
  Branch: HEAD                             Handle: 2002030514061900

  Modified files:
    ossp-pkg/l2             l2_ch_filter.c

  Log:
    Fix memory leak.

  Summary:
    Revision    Changes     Path
    1.17        +1  -0      ossp-pkg/l2/l2_ch_filter.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_filter.c
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 l2_ch_filter.c
  --- ossp-pkg/l2/l2_ch_filter.c	2 Jan 2002 17:07:38 -0000	1.16
  +++ ossp-pkg/l2/l2_ch_filter.c	5 Mar 2002 14:06:19 -0000	1.17
  @@ -138,6 +138,7 @@
           free(cfg->pcreRegex);
       if (cfg->pcreExtra != NULL)
           free(cfg->pcreExtra);
  +    free(cfg);
   
       return L2_OK_PASS;
   }

From ossp-cvs-owner@ossp.org  Tue Mar  5 15:13:02 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5105D763D9; Tue,  5 Mar 2002 15:13:02 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_var.c
Message-Id: <20020305141302.5105D763D9@mail.ossp.org>
Date: Tue,  5 Mar 2002 15:13:02 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   05-Mar-2002 15:13:02
  Branch: HEAD                             Handle: 2002030514130100

  Added files:
    ossp-pkg/l2             l2_ch_var.c

  Log:
    First cut at a var channel. To avoid dependency problems it will include a
    reduced var library just like what is found in the filter channel with pcre.

  Summary:
    Revision    Changes     Path
    1.1         +120 -0     ossp-pkg/l2/l2_ch_var.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_var.c
  ============================================================
  $ cvs update -p -r1.1 l2_ch_var.c
  /*
  **  L2 - OSSP Logging Library
  **  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP L2, a flexible logging library which
  **  can be found at http://www.ossp.org/pkg/l2/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  l2_ch_var.c: OSSP var channel implementation
  */
  
  #include "l2.h"
  /*#include "l2_var.h"*/
  
  /* declare private channel configuration */
  typedef struct {
      char *vardef;
  } l2_ch_var_t;
  
  /* create channel */
  static l2_result_t hook_create(l2_context_t *ctx, l2_channel_t *ch)
  {
      l2_ch_var_t *cfg;
  
      /* allocate private channel configuration */
      if ((cfg = (l2_ch_var_t *)malloc(sizeof(l2_ch_var_t))) == NULL)
          return L2_ERR_MEM;
  
      /* initialize configuration with reasonable defaults */
      cfg->vardef = NULL; 
  
      /* link private channel configuration into channel context */
      ctx->vp = cfg;
  
      return L2_OK;
  }
  
  /* configure channel */
  static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
  {
      l2_ch_var_t *cfg;
      l2_param_t pa[1]; 
      l2_result_t rv;
      l2_env_t *env;
  
      /* parameter checks */
      if ((cfg = (l2_ch_var_t *)ctx->vp) == NULL)
          return L2_ERR_ARG;
  
      /* feed and call generic parameter parsing engine */
      L2_PARAM_SET(pa[0], variable, STR, &cfg->vardef);
      L2_PARAM_END(pa[1]);
      l2_channel_env(ch, &env);
      rv = l2_util_setparams(env, pa, fmt, ap);
  
      return rv;
  }
  
  /* write to channel */
  static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch,
                                l2_level_t level, const char *buf, size_t buf_size)
  {
      l2_ch_var_t *cfg;
  
      /* parameter checks */
      if ((cfg = (l2_ch_var_t *)ctx->vp) == NULL)
          return L2_ERR_ARG;
      if (cfg->vardef == NULL)
          return L2_ERR_ARG;
  
      /* expand variables */
  /* FIXME */
  
      return L2_OK;
  }
  
  /* destroy channel */
  static l2_result_t hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
  {
      l2_ch_var_t *cfg = (l2_ch_var_t *)ctx->vp;
  
      /* destroy channel configuration */
      if (cfg->vardef != NULL)
          free(cfg->vardef);
      free(cfg);
  
      return L2_OK;
  }
  
  /* exported channel handler structure */
  l2_handler_t l2_handler_var = {
      "var",
      L2_CHANNEL_FILTER,
      hook_create,
      hook_configure,
      NULL,
      hook_write,
      NULL,
      NULL,
      hook_destroy
  };
  

From ossp-cvs-owner@ossp.org  Tue Mar  5 15:17:40 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 60F0E763D9; Tue,  5 Mar 2002 15:17:40 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_main.c
Message-Id: <20020305141740.60F0E763D9@mail.ossp.org>
Date: Tue,  5 Mar 2002 15:17:40 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   05-Mar-2002 15:17:40
  Branch: HEAD                             Handle: 2002030514173900

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_main.c

  Log:
    some things must be done by a formatter, not var_expand

  Summary:
    Revision    Changes     Path
    1.47        +4  -4      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.46 -r1.47 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	4 Mar 2002 15:54:28 -0000	1.46
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	5 Mar 2002 14:17:39 -0000	1.47
  @@ -786,7 +786,7 @@
       do {
           log1(ctx, DEBUG, "trying ns[%d]", i);
           bOk = TRUE;
  -        log1(ctx, TRACE, "try ${option.destination}[${i}]", i); //FIXME
  +        log1(ctx, TRACE, "try ${option.destination}[%d]", i); //FIXME
   
           ctx->pns[i].l2 = ctx->l2;
   
  @@ -807,7 +807,7 @@
               log0(ctx, DEBUG, "connect");
               if (sa_connect(ctx->pns[i].sa, ctx->pns[i].saa) != SA_OK) {
                   bOk = FALSE;
  -                log1(ctx, WARNING, "connect to ${option.destination}[${i}] failed, %m", i); //FIXME
  +                log1(ctx, WARNING, "connect to ${option.destination}[%d] failed, %m", i); //FIXME
               }
           }
   
  @@ -831,11 +831,11 @@
           }
   
           if (bOk) {
  -            log1(ctx, INFO, "NNTP session to ${option.destination}[${i}] successfully established", i); //FIXME
  +            log1(ctx, INFO, "NNTP session to ${option.destination}[%d] successfully established", i); //FIXME
               i++;
           }
           else {
  -            log1(ctx, WARNING, "NNTP session establishment to ${option.destination}[${i}] failed", i); //FIXME
  +            log1(ctx, WARNING, "NNTP session establishment to ${option.destination}[%d] failed", i); //FIXME
               log1(ctx, DEBUG, "FIXME-CURRENTLY-NOT removing ns[%d] from list", i);
               lmtp_gfs_ns(&ctx->pns[i]);
               /*FIXME #1 this code is a leftover from the static ns array with nsc counter

From ossp-cvs-owner@ossp.org  Tue Mar  5 15:49:41 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8E4EA763D9; Tue,  5 Mar 2002 15:49:41 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO
Message-Id: <20020305144941.8E4EA763D9@mail.ossp.org>
Date: Tue,  5 Mar 2002 15:49:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   05-Mar-2002 15:49:41
  Branch: HEAD                             Handle: 2002030514494100

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO

  Log:
    remember new idea

  Summary:
    Revision    Changes     Path
    1.57        +4  -0      ossp-pkg/lmtp2nntp/00TODO
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.56 -r1.57 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	4 Mar 2002 15:54:28 -0000	1.56
  +++ ossp-pkg/lmtp2nntp/00TODO	5 Mar 2002 14:49:41 -0000	1.57
  @@ -15,6 +15,10 @@
   
     --------------------------------------------------------------------------------
   
  +  add --define foo:bar option allowing the user to specify arbitrary variables
  +  which can then be used as ${option.define}[x] when you know x expanding to
  +  'foo:bar' or be used as ${define.foo} and expanding to 'bar'.
  +
     newsserver fallback: when a server does not respond, mark it "disabled" for
     a specified time. Until the time is expired, ignore this server. However, if
     all others fail, ignore the timestamp.

From ossp-cvs-owner@ossp.org  Wed Mar  6 11:04:30 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 316BC763DD; Wed,  6 Mar 2002 11:04:30 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Message-Id: <20020306100430.316BC763DD@mail.ossp.org>
Date: Wed,  6 Mar 2002 11:04:30 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   06-Mar-2002 11:04:29
  Branch: HEAD                             Handle: 2002030610042900

  Modified files:
    ossp-pkg/var            var.c

  Log:
    Fix a soon to occur bug in advance:
    
    a search and replace operation on an empty token buffer has to result
    again in an empty token buffer and not an undefined token buffer.
    
    I do not know why this worked and only crashes with the forthcoming
    changed ${name:-default} behaviour (because this is totally unrelated
    I would say). But nevertheless, this is a bug. So fix it, although it
    works before and after the fix as good as it could ;)

  Summary:
    Revision    Changes     Path
    1.79        +3  -1      ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.78 -r1.79 var.c
  --- ossp-pkg/var/var.c	4 Mar 2002 13:12:23 -0000	1.78
  +++ ossp-pkg/var/var.c	6 Mar 2002 10:04:29 -0000	1.79
  @@ -249,7 +249,8 @@
       }
   
       /* append the data at the end of the current buffer. */
  -    memcpy((char *)output->end, data, len);
  +    if (len > 0)
  +        memcpy((char *)output->end, data, len);
       output->end += len;
       *((char *)output->end) = NUL;
       return 1;
  @@ -905,6 +906,7 @@
           }
   
           /* Match the pattern and create the result string in the tmp buffer. */
  +        tokenbuf_append(&tmp, "", 0);
           for (p = mydata.begin; p != mydata.end; ) {
               if (p == mydata.begin || p[-1] == '\n')
                   regexec_flag = 0;

From ossp-cvs-owner@ossp.org  Wed Mar  6 11:05:11 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 15846763DD; Wed,  6 Mar 2002 11:05:11 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Message-Id: <20020306100511.15846763DD@mail.ossp.org>
Date: Wed,  6 Mar 2002 11:05:11 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   06-Mar-2002 11:05:11
  Branch: HEAD                             Handle: 2002030610051000

  Modified files:
    ossp-pkg/var            var.c

  Log:
    typo

  Summary:
    Revision    Changes     Path
    1.80        +1  -1      ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.79 -r1.80 var.c
  --- ossp-pkg/var/var.c	6 Mar 2002 10:04:29 -0000	1.79
  +++ ossp-pkg/var/var.c	6 Mar 2002 10:05:10 -0000	1.80
  @@ -652,7 +652,7 @@
               p += rc;
           }
   
  -        /* try to parse substiution text */
  +        /* try to parse substitution text */
           rc = parse_variable(var, ctx, p, end, &tmp);
           if (rc < 0)
               goto error_return;

From ossp-cvs-owner@ossp.org  Wed Mar  6 11:18:20 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 49F46763DD; Wed,  6 Mar 2002 11:18:20 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c var.pod
Message-Id: <20020306101820.49F46763DD@mail.ossp.org>
Date: Wed,  6 Mar 2002 11:18:20 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   06-Mar-2002 11:18:20
  Branch: HEAD                             Handle: 2002030610181900

  Modified files:
    ossp-pkg/var            var.c var.pod

  Log:
    Change semantics of ${name:-word} from "If $name is not empty string,
    then $name, else word" to: "If $name is not empty string and not
    undefined, then $name, else word". This provides a more intuitive
    usage of ${name:-word} because it allows the user to turn an undefined
    variable (as returned with VAR_ERR_UNDEFINED_VARIABLE by the callback)
    into a defined one. This is important because changing the callback to
    return undefined variables as empty variables is incorrect because it
    usually breaks the array loop construct.

  Summary:
    Revision    Changes     Path
    1.81        +34 -7      ossp-pkg/var/var.c
    1.27        +2  -2      ossp-pkg/var/var.pod
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.80 -r1.81 var.c
  --- ossp-pkg/var/var.c	6 Mar 2002 10:05:10 -0000	1.80
  +++ ossp-pkg/var/var.c	6 Mar 2002 10:18:19 -0000	1.81
  @@ -152,6 +152,24 @@
       return;
   }
   
  +static int 
  +tokenbuf_isundef(
  +    tokenbuf_t *buf)
  +{
  +    if (buf->begin == NULL && buf->end == NULL)
  +        return 1;
  +    return 0;
  +}
  +
  +static int 
  +tokenbuf_isempty(
  +    tokenbuf_t *buf)
  +{
  +    if (buf->begin == buf->end)
  +        return 1;
  +    return 0;
  +}
  +
   static void 
   tokenbuf_set(
       tokenbuf_t *buf, const char *begin, const char *end, size_t buffer_size)
  @@ -1252,7 +1270,9 @@
                   goto error_return;
               }
               p += rc;
  -            if (data->begin != NULL && data->begin == data->end) {
  +            if (tokenbuf_isundef(data))
  +                tokenbuf_move(&tmptokbuf, data);
  +            else if (tokenbuf_isempty(data)) {
                   tokenbuf_free(data);
                   tokenbuf_move(&tmptokbuf, data);
               }
  @@ -1823,12 +1843,8 @@
           rc = lookup_value(var, ctx,
                             name.begin, name.end-name.begin, idx,
                             &data, &len, &buffer_size);
  -        if (rc == VAR_ERR_UNDEFINED_VARIABLE) {
  -            if (ctx->force_expand)
  -                goto error_return;
  -            tokenbuf_set(result, begin - 1, p, 0);
  -            failed = 1;
  -        }
  +        if (rc == VAR_ERR_UNDEFINED_VARIABLE)
  +            tokenbuf_init(result); /* delayed handling of undefined variable */
           else if (rc < 0)
               goto error_return;
           else
  @@ -1841,6 +1857,7 @@
       goahead:
       if (p[-1] == ':') {
           tokenbuf_free(&tmp);
  +        tokenbuf_init(&tmp);
           p--;
           while (p != end && *p == ':') {
               p++;
  @@ -1861,6 +1878,16 @@
           p++;
           if (failed)
               result->end++;
  +    }
  +
  +    /* lazy handling of undefined variable */
  +    if (!failed && tokenbuf_isundef(result)) {
  +        if (ctx->force_expand) {
  +            rc = VAR_ERR_UNDEFINED_VARIABLE;
  +            goto error_return;
  +        }
  +        else
  +            tokenbuf_set(result, begin - 1, p, 0);
       }
   
       /* return successfully */
  Index: ossp-pkg/var/var.pod
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 var.pod
  --- ossp-pkg/var/var.pod	4 Mar 2002 12:01:53 -0000	1.26
  +++ ossp-pkg/var/var.pod	6 Mar 2002 10:18:19 -0000	1.27
  @@ -129,8 +129,8 @@
   
   =item C<${>I<name>C<:->I<word>C<}>
   
  -If C<$>I<name> is not empty string, then C<$>I<name>, else I<word>
  -(default value).
  +If C<$>I<name> is not empty string and not undefined, then C<$>I<name>,
  +else I<word> (default value).
   
   =item C<${>I<name>C<:+>I<word>C<}>
   

From ossp-cvs-owner@ossp.org  Wed Mar  6 11:19:06 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 79B08763E5; Wed,  6 Mar 2002 11:19:06 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var TODO
Message-Id: <20020306101906.79B08763E5@mail.ossp.org>
Date: Wed,  6 Mar 2002 11:19:06 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   06-Mar-2002 11:19:06
  Branch: HEAD                             Handle: 2002030610190600

  Modified files:
    ossp-pkg/var            TODO

  Log:
    now solved, too.

  Summary:
    Revision    Changes     Path
    1.23        +0  -7      ossp-pkg/var/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/var/TODO
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 TODO
  --- ossp-pkg/var/TODO	4 Mar 2002 12:01:53 -0000	1.22
  +++ ossp-pkg/var/TODO	6 Mar 2002 10:19:06 -0000	1.23
  @@ -1,11 +1,4 @@
                                  OSSP var
   
  - o "problem"!?:
  -   ${unknown:-foo} fails on force_expand and results
  -   in no expansion (kept as is) if not forced_expand.
  -   It only does the expected if the callback returns
  -   empty strings for undefined variables. This is certainly
  -   intended this way, but has to be documented better?
  -
    o document exception handling
   

From ossp-cvs-owner@ossp.org  Wed Mar  6 11:25:33 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0D11D763DD; Wed,  6 Mar 2002 11:25:33 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var TODO
Message-Id: <20020306102533.0D11D763DD@mail.ossp.org>
Date: Wed,  6 Mar 2002 11:25:33 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   06-Mar-2002 11:25:32
  Branch: HEAD                             Handle: 2002030610253200

  Modified files:
    ossp-pkg/var            TODO

  Log:
    Welcome to the wonderful world of TODO lists:
    One point solved, two new discovered... shit! :-(

  Summary:
    Revision    Changes     Path
    1.24        +7  -0      ossp-pkg/var/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/var/TODO
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 TODO
  --- ossp-pkg/var/TODO	6 Mar 2002 10:19:06 -0000	1.23
  +++ ossp-pkg/var/TODO	6 Mar 2002 10:25:32 -0000	1.24
  @@ -1,4 +1,11 @@
                                  OSSP var
   
  + o ./var_play '${HOME:s/$/foo/}' does nothing because
  +   it seems that internally a zero-size pattern match
  +   does is not handled correctly.
  +
  + o with PCRE active, ./var_play '${HOME:s/x$/foo/}' fails
  +   horribly with an impossible error invalid character class!
  +
    o document exception handling
   

From ossp-cvs-owner@ossp.org  Wed Mar  6 11:33:16 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0F35F763DD; Wed,  6 Mar 2002 11:33:16 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Message-Id: <20020306103316.0F35F763DD@mail.ossp.org>
Date: Wed,  6 Mar 2002 11:33:16 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   06-Mar-2002 11:33:15
  Branch: HEAD                             Handle: 2002030610331500

  Modified files:
    ossp-pkg/var            var.c

  Log:
    One more bugfix to the search & replace stuff. Manual page regex(3) says:
    
    | Normally, regexec() returns 0 for success and the non-zero code
    | REG_NOMATCH for failure. Other non-zero error codes may be returned
    | in exceptional situations; see DIAGNOSTICS.
    
    So we have to check for "!= 0" and not just "== REG_NOMATCH" or we would
    perform substitutions with uninitialized data structures.

  Summary:
    Revision    Changes     Path
    1.82        +2  -2      ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.81 -r1.82 var.c
  --- ossp-pkg/var/var.c	6 Mar 2002 10:18:19 -0000	1.81
  +++ ossp-pkg/var/var.c	6 Mar 2002 10:33:15 -0000	1.82
  @@ -930,8 +930,8 @@
                   regexec_flag = 0;
               else
                   regexec_flag = REG_NOTBOL;
  -            if (regexec(&preg, p, sizeof(pmatch) / sizeof(regmatch_t), pmatch, regexec_flag) == REG_NOMATCH ||
  -                p + pmatch[0].rm_so == mydata.end) {
  +            rc = regexec(&preg, p, sizeof(pmatch) / sizeof(regmatch_t), pmatch, regexec_flag);
  +            if (rc != 0 || p + pmatch[0].rm_so == mydata.end) {
                   tokenbuf_append(&tmp, p, mydata.end - p);
                   break;
               } else {

From ossp-cvs-owner@ossp.org  Wed Mar  6 12:09:12 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A6113763DD; Wed,  6 Mar 2002 12:09:12 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var_test.c
Message-Id: <20020306110912.A6113763DD@mail.ossp.org>
Date: Wed,  6 Mar 2002 12:09:12 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   06-Mar-2002 12:09:12
  Branch: HEAD                             Handle: 2002030611091200

  Modified files:
    ossp-pkg/var            var_test.c

  Log:
    cleanup output of test suite

  Summary:
    Revision    Changes     Path
    1.41        +4  -7      ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.40 -r1.41 var_test.c
  --- ossp-pkg/var/var_test.c	4 Mar 2002 12:01:53 -0000	1.40
  +++ ossp-pkg/var/var_test.c	6 Mar 2002 11:09:12 -0000	1.41
  @@ -44,8 +44,6 @@
   {
       int i;
   
  -    fprintf(stderr, "op=<%s>(%d) arg=<%s>(%d) val=<%s>(%d)\n", 
  -            op_ptr, op_len, arg_ptr, arg_len, val_ptr, val_len);
       if (val_ptr == NULL) {
           *out_ptr = "";
           *out_len = 0;
  @@ -273,26 +271,25 @@
       }
   
       for (i = 0; i < sizeof(tests)/sizeof(struct test_case); ++i) {
  -        printf("Test case #%02d: Original input is '%s'.\n", i,
  -               tests[i].input);
  +        printf("Test case #%02d: Original input is '%s'.\n", i, tests[i].input);
           rc = var_unescape(var, tests[i].input, strlen(tests[i].input), buffer, sizeof(buffer), 0);
           if (rc != VAR_OK) {
               var_strerror(var, rc, &err);
  -            printf("Test case #%d: var_unescape() failed: %s (%d)\n", i, err, rc);
  +            printf("Test case #%02d: var_unescape() failed: %s (%d)\n", i, err, rc);
               return 1;
           }
           printf("Test case #%02d: Unescaped input is '%s'.\n", i, buffer);
           rc = var_expand(var, buffer, strlen(buffer), &tmp, &tmp_len, 0);
           if (rc != VAR_OK) {
               var_strerror(var, rc, &err);
  -            printf("Test case #%d: var_expand() failed: %s (%d).\n", i, err, rc);
  +            printf("Test case #%02d: var_expand() failed: %s (%d).\n", i, err, rc);
               return 1;
           }
           printf("Test case #%02d: Expanded output is '%s'.\n", i, tmp);
           if (   tmp_len != strlen(tests[i].expected)
               || tmp == NULL
               || memcmp(tests[i].expected, tmp, tmp_len) != 0) {
  -            printf("Test case #%d: Expected result '%s' but got '%s'.\n",
  +            printf("Test case #%02d: Expected result '%s' but got '%s'.\n",
                      i, tests[i].expected, tmp);
               return 1;
           }

From ossp-cvs-owner@ossp.org  Wed Mar  6 12:45:05 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 36E42763DD; Wed,  6 Mar 2002 12:45:05 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Message-Id: <20020306114505.36E42763DD@mail.ossp.org>
Date: Wed,  6 Mar 2002 12:45:05 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   06-Mar-2002 12:45:05
  Branch: HEAD                             Handle: 2002030611450300

  Modified files:
    ossp-pkg/var            var.c

  Log:
    cleanup the code a little bit more before trying to fix it

  Summary:
    Revision    Changes     Path
    1.83        +36 -29     ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.82 -r1.83 var.c
  --- ossp-pkg/var/var.c	6 Mar 2002 10:33:15 -0000	1.82
  +++ ossp-pkg/var/var.c	6 Mar 2002 11:45:03 -0000	1.83
  @@ -755,7 +755,7 @@
                   tokenbuf_free(expanded);
                   return VAR_ERR_UNKNOWN_QUOTED_PAIR_IN_REPLACE;
               }
  -            i = *p - '0';
  +            i = (*p - '0');
               p++;
               if (pmatch[i].rm_so == -1) {
                   tokenbuf_free(expanded);
  @@ -842,6 +842,7 @@
       tokenbuf_t *replace, 
       tokenbuf_t *flags)
   {
  +    tokenbuf_t tmp;
       const char *p;
       int case_insensitive = 0;
       int global = 0;
  @@ -868,25 +869,26 @@
       }
   
       if (no_regex) {
  -        tokenbuf_t tmp;
  +        /* plain text pattern based operation */
           tokenbuf_init(&tmp);
  -
           for (p = data->begin; p != data->end;) {
               if (case_insensitive)
                   rc = strncasecmp(p, search->begin, search->end - search->begin);
               else
                   rc = strncmp(p, search->begin, search->end - search->begin);
               if (rc != 0) {
  -                /* no match, copy character */
  +                /* not matched, copy character */
                   if (!tokenbuf_append(&tmp, p, 1)) {
                       tokenbuf_free(&tmp);
                       return VAR_ERR_OUT_OF_MEMORY;
                   }
  -                ++p;
  +                p++;
               } else {
  -                tokenbuf_append(&tmp, replace->begin, replace->end - replace->begin);
  -                p += search->end - search->begin;
  +                /* matched, copy replacement string */
  +                tokenbuf_merge(&tmp, replace);
  +                p += (search->end - search->begin);
                   if (!global) {
  +                    /* append remaining text */
                       if (!tokenbuf_append(&tmp, p, data->end - p)) {
                           tokenbuf_free(&tmp);
                           return VAR_ERR_OUT_OF_MEMORY;
  @@ -895,19 +897,17 @@
                   }
               }
           }
  -
           tokenbuf_free(data);
           tokenbuf_move(&tmp, data);
       } else {
  -        tokenbuf_t tmp;
  +        /* regular expression pattern based operation */
           tokenbuf_t mydata;
           tokenbuf_t myreplace;
           regex_t preg;
           regmatch_t pmatch[10];
           int regexec_flag;
   
  -        /* Copy the pattern and the data to our own buffer to make
  -           sure they're terminated with a null byte. */
  +        /* copy pattern and data to own buffer to make sure they are NUL-terminated */
           if (!tokenbuf_assign(&tmp, search->begin, search->end - search->begin))
               return VAR_ERR_OUT_OF_MEMORY;
           if (!tokenbuf_assign(&mydata, data->begin, data->end - data->begin)) {
  @@ -915,7 +915,7 @@
               return VAR_ERR_OUT_OF_MEMORY;
           }
   
  -        /* Compile the pattern. */
  +        /* compile the pattern. */
           rc = regcomp(&preg, tmp.begin, REG_NEWLINE|REG_EXTENDED|((case_insensitive)?REG_ICASE:0));
           tokenbuf_free(&tmp);
           if (rc != 0) {
  @@ -923,7 +923,7 @@
               return VAR_ERR_INVALID_REGEX_IN_REPLACE;
           }
   
  -        /* Match the pattern and create the result string in the tmp buffer. */
  +        /* match the pattern and create the result string in the tmp buffer */
           tokenbuf_append(&tmp, "", 0);
           for (p = mydata.begin; p != mydata.end; ) {
               if (p == mydata.begin || p[-1] == '\n')
  @@ -935,6 +935,7 @@
                   tokenbuf_append(&tmp, p, mydata.end - p);
                   break;
               } else {
  +                /* create replace string */
                   rc = parse_regex_replace(var, ctx, p, replace, pmatch, &myreplace);
                   if (rc != VAR_OK) {
                       regfree(&preg);
  @@ -942,29 +943,35 @@
                       tokenbuf_free(&mydata);
                       return rc;
                   }
  -                if (!tokenbuf_append(&tmp, p, pmatch[0].rm_so) ||
  -                    !tokenbuf_append(&tmp, myreplace.begin, myreplace.end - myreplace.begin)) {
  +                /* append prolog string */
  +                if (!tokenbuf_append(&tmp, p, pmatch[0].rm_so)) {
                       regfree(&preg);
                       tokenbuf_free(&tmp);
                       tokenbuf_free(&mydata);
                       tokenbuf_free(&myreplace);
                       return VAR_ERR_OUT_OF_MEMORY;
  -                } else {
  -                    p += pmatch[0].rm_eo;
  -                    if (pmatch[0].rm_eo - pmatch[0].rm_so == 0)
  -                        {
  -                        if (!tokenbuf_append(&tmp, p, 1))
  -                            {
  -                            regfree(&preg);
  -                            tokenbuf_free(&tmp);
  -                            tokenbuf_free(&mydata);
  -                            tokenbuf_free(&myreplace);
  -                            return VAR_ERR_OUT_OF_MEMORY;
  -                            }
  -                        ++p;
  -                        }
  +                }
  +                /* append replace string */
  +                if (!tokenbuf_append(&tmp, myreplace.begin, myreplace.end - myreplace.begin)) {
  +                    regfree(&preg);
  +                    tokenbuf_free(&tmp);
  +                    tokenbuf_free(&mydata);
                       tokenbuf_free(&myreplace);
  +                    return VAR_ERR_OUT_OF_MEMORY;
  +                }
  +                p += pmatch[0].rm_eo;
  +                /* XXX??? */
  +                if ((pmatch[0].rm_eo - pmatch[0].rm_so) == 0) {
  +                    if (!tokenbuf_append(&tmp, p, 1)) {
  +                        regfree(&preg);
  +                        tokenbuf_free(&tmp);
  +                        tokenbuf_free(&mydata);
  +                        tokenbuf_free(&myreplace);
  +                        return VAR_ERR_OUT_OF_MEMORY;
  +                    }
  +                    p++;
                   }
  +                tokenbuf_free(&myreplace);
                   if (!global) {
                       if (!tokenbuf_append(&tmp, p, mydata.end - p)) {
                           regfree(&preg);

From ossp-cvs-owner@ossp.org  Wed Mar  6 15:25:40 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 11C36763DD; Wed,  6 Mar 2002 15:25:40 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_main.c lmtp2nntp_option.c lmt...
Message-Id: <20020306142540.11C36763DD@mail.ossp.org>
Date: Wed,  6 Mar 2002 15:25:40 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   06-Mar-2002 15:25:39
  Branch: HEAD                             Handle: 2002030614253900

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_main.c lmtp2nntp_option.c
                            lmtp2nntp_option.h

  Log:
    Syntax and argument checking does no longer ignore errors silently. It
    properly prints error messages for unknown options or invalid arguments.  The
    message printed includes what it got and what it expected.  Processing is
    continued to check for more errors but finally it aborts before the main
    program starts.

  Summary:
    Revision    Changes     Path
    1.48        +11 -3      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
    1.16        +57 -118    ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
    1.6         +4  -29     ossp-pkg/lmtp2nntp/lmtp2nntp_option.h
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.47 -r1.48 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	5 Mar 2002 14:17:39 -0000	1.47
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	6 Mar 2002 14:25:39 -0000	1.48
  @@ -431,10 +431,18 @@
               CU(ERR_EXECUTION);
           }
       }
  +
       /* read in the arguments */
  -    (void)option_create(&o, ctx->val); /* FIXME */
  -    (void)option_parse(o, argc, argv);
  -    (void)config_context(ctx);
  +    {
  +        lmtp2nntp_option_rc_t rv;
  +
  +        if (option_create(&o, ctx->val) != OPTION_OK)
  +                CU(ERR_EXECUTION);
  +        rv = option_parse(o, argc, argv);
  +        config_context(ctx); //FIXME rc
  +        if (rv != OPTION_OK)
  +                CU(ERR_EXECUTION);
  +    }
   
       if (getuid() != ctx->option_uid) {
           if (setuid(ctx->option_uid) == -1) {
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 lmtp2nntp_option.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	26 Feb 2002 15:56:08 -0000	1.15
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	6 Mar 2002 14:25:39 -0000	1.16
  @@ -113,8 +113,6 @@
   
   static lmtp2nntp_option_rc_t option_find(lmtp2nntp_option_t *o, int number, optionval_t **ocp)
   {
  -    lmtp2nntp_option_rc_t rc = VAL_OK;
  -
       if (o == NULL || ocp == NULL)
           return OPTION_ERR_ARG;
   
  @@ -122,7 +120,10 @@
       while (*ocp != NULL && (*ocp)->number != number)
           *ocp = (*ocp)->next;
   
  -    return rc;
  +    if (*ocp == NULL)
  +        return OPTION_ERR_NUM;
  +
  +    return OPTION_OK;
   }
   
   
  @@ -257,130 +258,90 @@
   
   lmtp2nntp_option_rc_t option_create(lmtp2nntp_option_t **op, val_t *parent)
   {
  -    //printf("DEBUG: enter option_create(%.8lx)\n", (long)op);
  -
  -    if (op == NULL)
  -        return OPTION_ERR_ARG;
  +    ex_t ex;
   
  -    if ((*op = (lmtp2nntp_option_t *)malloc(sizeof(lmtp2nntp_option_t))) == NULL)
  -        return OPTION_ERR_MEM;
  -    (*op)->childsmax = 0;
  -    (*op)->daemonize = 0;
  -    (*op)->kill = 0;
  -    (*op)->pidfile = 0;
  -    (*op)->acl.as = 0;
  -    (*op)->acl.az = NULL;
  -    (*op)->bind = NULL;
  -    (*op)->client = NULL;
  -    (*op)->destination.as = 0;
  -    (*op)->destination.az = NULL;
  -    (*op)->groupmode = NULL;
  -    (*op)->headervalue.as = 0;
  -    (*op)->headervalue.az = NULL;
  -    (*op)->include.as = 0;
  -    (*op)->include.az = NULL;
  -    (*op)->size = 0;
  -    (*op)->timeoutlmtpaccept = 0;
  -    (*op)->timeoutlmtpread = 0;
  -    (*op)->timeoutlmtpwrite = 0;
  -    (*op)->timeoutnntpconnect = 0;
  -    (*op)->timeoutnntpread = 0;
  -    (*op)->timeoutnntpwrite = 0;
  -    (*op)->mailfrom = NULL;
  -    (*op)->nodename = NULL;
  -    (*op)->operationmode = NULL;
  -    (*op)->l2spec = NULL;
  -    (*op)->uid = NULL;
  -    (*op)->restrictheader.as = 0;
  -    (*op)->restrictheader.az = NULL;
  -    (*op)->newsgroup.as = 0;
  -    (*op)->newsgroup.az = NULL;
  -                    /**/
  -    (*op)->first = NULL;
  -    (*op)->last = NULL;
  -    (*op)->vo = NULL;
  -    (*op)->pn = 0;
  -    (*op)->pi = 0;
  -    (*op)->pt = NULL;
  -
  -    if (val_create(&((*op)->vo)) != VAL_OK) {
  -        free(*op);
  -        return OPTION_ERR_VAL;
  -    }
  -    if (val_reg(parent, "option", VAL_TYPE_VAL, "option", (void *)&((*op)->vo)) != VAL_OK) {
  -        free(*op);
  -        return OPTION_ERR_VAL;
  +    try {
  +        if (op == NULL)
  +            throw(option_create, NULL, OPTION_ERR_ARG);
  +
  +        (*op = (lmtp2nntp_option_t *)mallocex(sizeof(lmtp2nntp_option_t)));
  +        (*op)->first = NULL;
  +        (*op)->last = NULL;
  +        (*op)->vo = NULL;
  +        (*op)->pi = 0;
  +        (*op)->pn = 0;
  +        (*op)->pt = NULL;
  +
  +        if (val_create(&((*op)->vo)) != VAL_OK)
  +            throw(option_create, NULL, OPTION_ERR_VAL);
  +
  +        if (val_reg(parent, "option", VAL_TYPE_VAL, "option", (void *)&((*op)->vo)) != VAL_OK)
  +            throw(option_create, NULL, OPTION_ERR_VAL);
  +    }
  +    catch(ex) {
  +        if (*op != NULL) {
  +            if ((*op)->vo != NULL)
  +                val_unreg(parent, "option");
  +            free(*op);
  +        }
  +        rethrow;
       }
       return OPTION_OK;
   }
   
   static lmtp2nntp_option_rc_t option_parse_internal(lmtp2nntp_option_t *o, int argc, char **argv)
   {
  +    lmtp2nntp_option_rc_t rc = OPTION_OK;
  +    lmtp2nntp_option_rc_t rv;
       int i;
       char *cp;
       optionval_t *ocp;
       popt_context poptCon;   /* context for parsing command-line options */
   
  -#if 0
  -    {
  -        int i; 
  -    
  -        for (i=0; i<argc; i++)
  -            printf("DEBUG: argv[%3d] = ***%s***\n", i, argv[i]);
  -    }
  -#endif
  -
       poptCon = popt_getcontext(NULL, argc, (const char **)argv, o->pt, 0);
       popt_setotheroptionhelp(poptCon, "[OPTIONS]* [newsgroup ...]");
  -    //printf("DEBUG: argc=%d\n", argc);
       if (argc < 2) {
           popt_printusage(poptCon, stderr, 0);
  -        exit(1);
  +        exit(1); //FIXME
       }
  -    while ((i = popt_getnextopt(poptCon)) >= 0) {
  -        (void)option_find(o, i, &ocp);
  -        //printf("DEBUG: ocp->type=%d\n", ocp->type);
  -        if (ocp->cb != NULL)
  -            ocp->cb(ocp, cp = (ocp->type == OPT_FLAG ? NULL : (char *)popt_getoptarg(poptCon)), ocp->cbctx);
  -        //printf("DEBUG: popt_getnextopt returned  %d \"%s\", \"%s\"\n", i-1, o->pt[i-1].longName, ocp->longname);
  -        //printf("DEBUG: popt_getoptarg  returned  \"%s\"\n", cp);
  +    while ((i = popt_getnextopt(poptCon)) >= 0 || i == POPT_ERROR_NOARG || i == POPT_ERROR_BADOPT) {
  +        if (i == POPT_ERROR_NOARG || i == POPT_ERROR_BADOPT) {
  +            fprintf(stderr, "ERROR: %s (%d) \"%s\"\n", popt_strerror(i), i, popt_badoption(poptCon, POPT_BADOPTION_NOALIAS));
  +            rc = OPTION_ERR_USE;
  +            continue;
  +        }
  +        if ((option_find(o, i, &ocp) == OPTION_OK) && (ocp->cb != NULL)) {
  +            rv = ocp->cb(ocp, cp = (ocp->type == OPT_FLAG ? NULL : (char *)popt_getoptarg(poptCon)), ocp->cbctx);
  +            if (rc == OPTION_OK)
  +                rc = rv;
  +        }
       }
  -    //printf("DEBUG: current popt error is \"%s\"(%d)\n", popt_strerror(i), i);
  -    //printf("DEBUG: ----\n");
   
       {
           int largc;
           char **largv;
           char *cpNew;
   
  -        if ((largv = (char **)malloc((1 + 1) * sizeof(char **))) == NULL)
  -            return OPTION_ERR_MEM;
  +        largv = (char **)mallocex((1 + 1) * sizeof(char **));
           largc = 0;
           largv[largc++] = "leftover";
           largv[largc] = NULL;
           while ((cp = (char *)popt_getarg(poptCon)) != NULL) {
  -            //printf("DEBUG: popt_getarg returned \"%s\"\n", cp);
  -            if ((largv = (char **)realloc(largv, (largc + 2) * sizeof(char **))) == NULL)
  -                return OPTION_ERR_MEM;
  +            largv = (char **)reallocex(largv, (largc + 2) * sizeof(char **));
               largv[largc++] = "--newsgroup";
               largv[largc] = NULL;
  -            if ((cpNew = strdup(cp)) == NULL)
  -                return OPTION_ERR_MEM;
  -            //printf("DEBUG: cpNew = \"%s\"\n", cpNew);
  +            cpNew = strdupex(cp);
               largv[largc++] = cpNew;
               largv[largc] = NULL;
  -            //printf("DEBUG: largc = \"%d\"\n", largc);
  -#if 0
  -            for (i=0; i<largc; i++)
  -                printf("DEBUG: largv[%d] = \"%s\"\n", i, largv[i]);
  -#endif
           }
  -        if (largc > 1)
  -            option_parse_internal(o, largc, largv);
  +        if (largc > 1) {
  +            rv = option_parse_internal(o, largc, largv);
  +            if (rc == OPTION_OK)
  +                rc = rv;
  +        }
       }
  -    //printf("DEBUG: current popt error is \"%s\"(%d)\n", popt_strerror(i), i);
       popt_freecontext(poptCon);
  -    return OPTION_OK;
  +    return rc;
   }
   
   static lmtp2nntp_option_rc_t stdsyntax(optionval_t *oc, char *arg, char *cbctx)
  @@ -408,7 +369,7 @@
                */
               if (cbctx != NULL)
                   if (str_parse(arg, cbctx) <= 0) {
  -                    //printf("DEBUG: \"%s\" does NOT match \"%s\"\n", arg, cbctx);
  +                    fprintf(stderr, "ERROR: argument \"%s\" does NOT match syntax \"%s\"\n", arg, cbctx);
                       return OPTION_ERR_USE;
                   }
               //printf("DEBUG: \"%s\" does match \"%s\"\n", arg, cbctx);
  @@ -424,7 +385,7 @@
                       return OPTION_ERR_USE;
               if (cbctx != NULL)
                   if (str_parse(arg, cbctx) <= 0) {
  -                    //printf("DEBUG: \"%s\" does NOT match \"%s\"\n", arg, cbctx);
  +                    fprintf(stderr, "ERROR: argument \"%s\" does NOT match syntax \"%s\"\n", arg, cbctx);
                       return OPTION_ERR_USE;
                   }
               //printf("DEBUG: \"%s\" does match \"%s\"\n", arg, cbctx);
  @@ -601,13 +562,10 @@
   
   lmtp2nntp_option_rc_t option_parse(lmtp2nntp_option_t *o, int argc, char **argv)
   {
  -    lmtp2nntp_option_rc_t rc;
  -    //printf("DEBUG: enter option_parse(%.8lx, %d, %.8lx)\n", (long)o, argc, (long)argv);
  -
       if (o == NULL)
           return OPTION_ERR_ARG;
   
  -    (void)option_register(o, "childsmax",          'C', OPT_SINGLE,  "10",        "childs to spawn at max",            "childsmax",                  &stdsyntax, "m/.*/" ); //"m/[0-9]+/" );
  +    (void)option_register(o, "childsmax",          'C', OPT_SINGLE,  "10",        "childs to spawn at max",            "childsmax",                  &stdsyntax, "m/\\d+/" ); //"m/[0-9]+/" );
       (void)option_register(o, "daemonize",          'D', OPT_FLAG,    NULL,        "detach from terminal",              NULL,                         &stdsyntax, NULL );
       (void)option_register(o, "kill",               'K', OPT_FLAG,    NULL,        "kill a previously run daemon",      NULL,                         &stdsyntax, NULL );
       (void)option_register(o, "pidfile",            'P', OPT_SINGLE,  NULL,        "file containing pid",               "pidfile",                    &stdsyntax, "m/.*/" );
  @@ -637,26 +595,7 @@
       (void)option_register(o, "version",            'v', OPT_FLAG,    NULL,        "print version",                     NULL,                         &stdsyntax, NULL );
       (void)option_register(o, "newsgroup",          NUL, OPT_MULTI,   NULL,        "article destination",               "newsgroup",                  &stdsyntax, "m/.*/" );
   
  -#if 0
  -    {
  -        int i;
  -
  -        for (i=0; i<29; i++) {
  -            printf("DEBUG: o->pt[%3d].longName   = %s   \n", i,       o->pt[i].longName  );
  -            printf("DEBUG: o->pt[%3d].shortName  = %c   \n", i,       o->pt[i].shortName );
  -            printf("DEBUG: o->pt[%3d].argInfo    = %d   \n", i,       o->pt[i].argInfo   );
  -            printf("DEBUG: o->pt[%3d].arg        = %.8lx\n", i, (long)o->pt[i].arg       );
  -            printf("DEBUG: o->pt[%3d].val        = %d   \n", i,       o->pt[i].val       );
  -            printf("DEBUG: o->pt[%3d].descrip    = %s   \n", i,       o->pt[i].descrip   );
  -            printf("DEBUG: o->pt[%3d].argDescrip = %s   \n", i,       o->pt[i].argDescrip);
  -        }
  -    }
  -#endif
  -
  -    //val_apply(o->vo, "", 9, dumper, "vorher" );
  -    rc = option_parse_internal(o, argc, argv); //FIXME should fail for syntax errors and unknown options
  -    //val_apply(o->vo, "", 9, dumper, "nachher" );
  -    return rc;
  +    return option_parse_internal(o, argc, argv);
   }
   
   lmtp2nntp_option_rc_t option_destroy(lmtp2nntp_option_t *o)
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_option.h
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 lmtp2nntp_option.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_option.h	14 Feb 2002 10:47:20 -0000	1.5
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_option.h	6 Mar 2002 14:25:39 -0000	1.6
  @@ -34,34 +34,8 @@
   typedef struct optionval_s optionval_t;
   
   typedef struct {
  -    int                 childsmax;
  -    int                 daemonize;
  -    int                 kill;
  -    char               *pidfile;
  -    argz_t              acl;
  -    char               *bind;
  -    char               *client;
  -    argz_t              destination;
  -    char               *groupmode;
  -    argz_t              headervalue;
  -    argz_t              include;
  -    char               *size;
  -    int                *timeoutlmtpaccept;
  -    int                *timeoutlmtpread;
  -    int                *timeoutlmtpwrite;
  -    int                *timeoutnntpconnect;
  -    int                *timeoutnntpread;
  -    int                *timeoutnntpwrite;
  -    char               *mailfrom;
  -    char               *nodename;
  -    char               *operationmode;
  -    char               *l2spec;
  -    char               *uid;
  -    argz_t              restrictheader;
  -    argz_t              newsgroup;
  -                /*FIXME above*/
  -    optionval_t     *first;
  -    optionval_t     *last;
  +    optionval_t        *first;
  +    optionval_t        *last;
       val_t              *vo;     /* val_t for all options */
       int                 pi;     /* popt index to next record */
       int                 pn;     /* popt number of available records */
  @@ -80,7 +54,8 @@
       OPTION_ERR_ARG, /* invalid args passed into function */
       OPTION_ERR_USE, /* invalid usage, bad data passed into function */
       OPTION_ERR_MEM, /* out of memory */
  -    OPTION_ERR_VAL  /* libval failed */
  +    OPTION_ERR_VAL, /* libval failed */
  +    OPTION_ERR_NUM  /* option_find not successful */
   } lmtp2nntp_option_rc_t;
   
   typedef lmtp2nntp_option_rc_t (optionloop_cb_t)(optionval_t *oc, char *arg, char *cbctx);

From ossp-cvs-owner@ossp.org  Wed Mar  6 15:26:34 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 189C7763DD; Wed,  6 Mar 2002 15:26:34 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c
Message-Id: <20020306142634.189C7763DD@mail.ossp.org>
Date: Wed,  6 Mar 2002 15:26:34 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   06-Mar-2002 15:26:34
  Branch: HEAD                             Handle: 2002030614263300

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c

  Log:
    wipe out obsolete stuff

  Summary:
    Revision    Changes     Path
    1.65        +0  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.64 -r1.65 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	4 Mar 2002 15:54:28 -0000	1.64
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	6 Mar 2002 14:26:33 -0000	1.65
  @@ -1043,7 +1043,6 @@
       catch (ex)
           rethrow;
   
  -    //headersimulation(ctx); //FIXME
       /* --testfile MULTI */
       try {
           char *cp;

From ossp-cvs-owner@ossp.org  Wed Mar  6 16:30:35 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AE0E5763DD; Wed,  6 Mar 2002 16:30:35 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var TODO
Message-Id: <20020306153035.AE0E5763DD@mail.ossp.org>
Date: Wed,  6 Mar 2002 16:30:35 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   06-Mar-2002 16:30:35
  Branch: HEAD                             Handle: 2002030615303500

  Modified files:
    ossp-pkg/var            TODO

  Log:
    remember great idea

  Summary:
    Revision    Changes     Path
    1.25        +7  -0      ossp-pkg/var/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/var/TODO
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 TODO
  --- ossp-pkg/var/TODO	6 Mar 2002 10:25:32 -0000	1.24
  +++ ossp-pkg/var/TODO	6 Mar 2002 15:30:35 -0000	1.25
  @@ -1,5 +1,12 @@
                                  OSSP var
   
  + o New feature: allow var_expand (or with a new function
  +   based on var_expand like var_printf) to first substitute printf-style
  +   %x constructs and then the OSSP var constructs. This allow more
  +   flexibility in expanding templates, because one can expand indices
  +   and other dynamic stuff into the template inside variable constructs.
  +   Think about var_printf("${array[%d]}", i); 
  +
    o ./var_play '${HOME:s/$/foo/}' does nothing because
      it seems that internally a zero-size pattern match
      does is not handled correctly.

From ossp-cvs-owner@ossp.org  Thu Mar  7 10:08:12 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F18057642B; Thu,  7 Mar 2002 10:08:11 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Message-Id: <20020307090811.F18057642B@mail.ossp.org>
Date: Thu,  7 Mar 2002 10:08:11 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   07-Mar-2002 10:08:11
  Branch: HEAD                             Handle: 2002030709081100

  Modified files:
    ossp-pkg/var            var.c

  Log:
    be even more carefully: regex(3) says rm_so _and_ rm_eo are -1 if a
    back-reference is not available. So we could match with "&&" here. But
    because we want to be very carefully we match also rm_eo for -1 and use
    "||" here. That is, we use a weaker condition to gain stronger safety.

  Summary:
    Revision    Changes     Path
    1.84        +1  -1      ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.83 -r1.84 var.c
  --- ossp-pkg/var/var.c	6 Mar 2002 11:45:03 -0000	1.83
  +++ ossp-pkg/var/var.c	7 Mar 2002 09:08:11 -0000	1.84
  @@ -757,7 +757,7 @@
               }
               i = (*p - '0');
               p++;
  -            if (pmatch[i].rm_so == -1) {
  +            if (pmatch[i].rm_so == -1 || pmatch[i].rm_eo == -1) {
                   tokenbuf_free(expanded);
                   return VAR_ERR_SUBMATCH_OUT_OF_RANGE;
               }

From ossp-cvs-owner@ossp.org  Thu Mar  7 10:14:05 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BF8F57642B; Thu,  7 Mar 2002 10:14:05 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var TODO var.c var.pod var_test.c
Message-Id: <20020307091405.BF8F57642B@mail.ossp.org>
Date: Thu,  7 Mar 2002 10:14:05 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   07-Mar-2002 10:14:05
  Branch: HEAD                             Handle: 2002030709140500

  Modified files:
    ossp-pkg/var            TODO var.c var.pod var_test.c

  Log:
    Major bugfixing and enhancing of search & replace operation:
    - finally fix ${name:s/$/foo/} type substitutions (zero-length matching!)
    - add s/.../.../mg matching support (Perl-style multiline)
    - make non-multiline matching the default

  Summary:
    Revision    Changes     Path
    1.26        +0  -4      ossp-pkg/var/TODO
    1.85        +51 -27     ossp-pkg/var/var.c
    1.28        +4  -2      ossp-pkg/var/var.pod
    1.42        +1  -1      ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/TODO
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 TODO
  --- ossp-pkg/var/TODO	6 Mar 2002 15:30:35 -0000	1.25
  +++ ossp-pkg/var/TODO	7 Mar 2002 09:14:05 -0000	1.26
  @@ -7,10 +7,6 @@
      and other dynamic stuff into the template inside variable constructs.
      Think about var_printf("${array[%d]}", i); 
   
  - o ./var_play '${HOME:s/$/foo/}' does nothing because
  -   it seems that internally a zero-size pattern match
  -   does is not handled correctly.
  -
    o with PCRE active, ./var_play '${HOME:s/x$/foo/}' fails
      horribly with an impossible error invalid character class!
   
  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.84 -r1.85 var.c
  --- ossp-pkg/var/var.c	7 Mar 2002 09:08:11 -0000	1.84
  +++ ossp-pkg/var/var.c	7 Mar 2002 09:14:05 -0000	1.85
  @@ -845,6 +845,7 @@
       tokenbuf_t tmp;
       const char *p;
       int case_insensitive = 0;
  +    int multiline = 0;
       int global = 0;
       int no_regex = 0;
       int rc;
  @@ -852,19 +853,22 @@
       if (search->begin == search->end)
           return VAR_ERR_EMPTY_SEARCH_STRING;
   
  -    for (p = flags->begin; p != flags->end; ++p) {
  +    for (p = flags->begin; p != flags->end; p++) {
           switch (tolower(*p)) {
  -        case 'i':
  -            case_insensitive = 1;
  -            break;
  -        case 'g':
  -            global = 1;
  -            break;
  -        case 't':
  -            no_regex = 1;
  -            break;
  -        default:
  -            return VAR_ERR_UNKNOWN_REPLACE_FLAG;
  +            case 'm':
  +                multiline = 1;
  +                break;
  +            case 'i':
  +                case_insensitive = 1;
  +                break;
  +            case 'g':
  +                global = 1;
  +                break;
  +            case 't':
  +                no_regex = 1;
  +                break;
  +            default:
  +                return VAR_ERR_UNKNOWN_REPLACE_FLAG;
           }
       }
   
  @@ -916,7 +920,10 @@
           }
   
           /* compile the pattern. */
  -        rc = regcomp(&preg, tmp.begin, REG_NEWLINE|REG_EXTENDED|((case_insensitive)?REG_ICASE:0));
  +        rc = regcomp(&preg, tmp.begin, 
  +                     (  REG_EXTENDED
  +                      | (multiline ? REG_NEWLINE : 0)
  +                      | (case_insensitive ? REG_ICASE : 0)));
           tokenbuf_free(&tmp);
           if (rc != 0) {
               tokenbuf_free(&mydata);
  @@ -925,31 +932,41 @@
   
           /* match the pattern and create the result string in the tmp buffer */
           tokenbuf_append(&tmp, "", 0);
  -        for (p = mydata.begin; p != mydata.end; ) {
  +        for (p = mydata.begin; p < mydata.end; ) {
               if (p == mydata.begin || p[-1] == '\n')
                   regexec_flag = 0;
               else
                   regexec_flag = REG_NOTBOL;
               rc = regexec(&preg, p, sizeof(pmatch) / sizeof(regmatch_t), pmatch, regexec_flag);
  -            if (rc != 0 || p + pmatch[0].rm_so == mydata.end) {
  +            /* XXX */
  +            if (rc != 0) {
  +                /* no (more) matching */
                   tokenbuf_append(&tmp, p, mydata.end - p);
                   break;
  -            } else {
  -                /* create replace string */
  -                rc = parse_regex_replace(var, ctx, p, replace, pmatch, &myreplace);
  -                if (rc != VAR_OK) {
  +            }
  +            else if (   multiline 
  +                     && (p + pmatch[0].rm_so) == mydata.end 
  +                     && (pmatch[0].rm_eo - pmatch[0].rm_so) == 0) {
  +                /* special case: found empty pattern (usually /^/ or /$/ only)
  +                   in multi-line at end of data (after the last newline) */
  +                tokenbuf_append(&tmp, p, mydata.end - p);
  +                break;
  +            }
  +            else {
  +                /* append prolog string */
  +                if (!tokenbuf_append(&tmp, p, pmatch[0].rm_so)) {
                       regfree(&preg);
                       tokenbuf_free(&tmp);
                       tokenbuf_free(&mydata);
  -                    return rc;
  +                    return VAR_ERR_OUT_OF_MEMORY;
                   }
  -                /* append prolog string */
  -                if (!tokenbuf_append(&tmp, p, pmatch[0].rm_so)) {
  +                /* create replace string */
  +                rc = parse_regex_replace(var, ctx, p, replace, pmatch, &myreplace);
  +                if (rc != VAR_OK) {
                       regfree(&preg);
                       tokenbuf_free(&tmp);
                       tokenbuf_free(&mydata);
  -                    tokenbuf_free(&myreplace);
  -                    return VAR_ERR_OUT_OF_MEMORY;
  +                    return rc;
                   }
                   /* append replace string */
                   if (!tokenbuf_append(&tmp, myreplace.begin, myreplace.end - myreplace.begin)) {
  @@ -959,19 +976,26 @@
                       tokenbuf_free(&myreplace);
                       return VAR_ERR_OUT_OF_MEMORY;
                   }
  +                tokenbuf_free(&myreplace);
  +                /* skip now processed data */
                   p += pmatch[0].rm_eo;
  -                /* XXX??? */
  +                /* if pattern matched an empty part (think about
  +                   anchor-only regular expressions like /^/ or /$/) we
  +                   skip the next character to make sure we do not enter
  +                   an infinitive loop in matching */
                   if ((pmatch[0].rm_eo - pmatch[0].rm_so) == 0) {
  +                    if (p >= mydata.end)
  +                        break;
                       if (!tokenbuf_append(&tmp, p, 1)) {
                           regfree(&preg);
                           tokenbuf_free(&tmp);
                           tokenbuf_free(&mydata);
  -                        tokenbuf_free(&myreplace);
                           return VAR_ERR_OUT_OF_MEMORY;
                       }
                       p++;
                   }
  -                tokenbuf_free(&myreplace);
  +                /* append prolog string and stop processing if we 
  +                   do not perform the search & replace globally */
                   if (!global) {
                       if (!tokenbuf_append(&tmp, p, mydata.end - p)) {
                           regfree(&preg);
  Index: ossp-pkg/var/var.pod
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 var.pod
  --- ossp-pkg/var/var.pod	6 Mar 2002 10:18:19 -0000	1.27
  +++ ossp-pkg/var/var.pod	7 Mar 2002 09:14:05 -0000	1.28
  @@ -159,7 +159,9 @@
   performed and only the first occurance of I<pattern> is replaced. Flag
   "C<i>" switches to case insensitive matching; flag "C<t>" switches
   to plain text pattern; flag "C<g>" switches to replacements of all
  -occurances.
  +occurances; flag "C<m>" switches to multi-line matching (That is, change
  +"C<^>" and "C<$>" from matching the start or end of the string to
  +matching the start or end of any line).
   
   =item C<${>I<name>C<:y/>I<ochars>C</>I<nchars>C</}>
   
  @@ -223,7 +225,7 @@
                  | '*' (TEXT_EXP|variable)+
                  | 's' '/' (TEXT_PATTERN)+ 
                        '/' (variable|TEXT_SUBST)* 
  -                     '/' ('g'|'i'|'t')*
  +                     '/' ('m'|'g'|'i'|'t')*
                  | 'y' '/' (variable|TEXT_SUBST)+ 
                        '/' (variable|TEXT_SUBST)* 
                        '/'
  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.41 -r1.42 var_test.c
  --- ossp-pkg/var/var_test.c	6 Mar 2002 11:09:12 -0000	1.41
  +++ ossp-pkg/var/var_test.c	7 Mar 2002 09:14:05 -0000	1.42
  @@ -221,7 +221,7 @@
           { "[${ARRAY[#+1]}-]",             "entry1-entry2-entry3-"                          },
           { "-[${ARRAY[#]}:]{1,$NUMBER}-",  "-entry1:entry2:-"                               },
           { "-[${ARRAY[#]}:]{1,3,5}-",      "-entry1::-"                                     },
  -        { "${MULTILINE:s/^/ | /g}",       " | line1\n | line2\n"                           },
  +        { "${MULTILINE:s/^/ | /gm}",      " | line1\n | line2\n"                           },
           { "${HOME:%upper}",               "/HOME/REGRESSION-TESTS"                         },
           { "${HOME:%upper:%lower}",        "/home/regression-tests"                         },
           { "${EMPTY:%return($HOME)}",      "/home/regression-tests"                         },

From ossp-cvs-owner@ossp.org  Thu Mar  7 10:42:44 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0F4B67642B; Thu,  7 Mar 2002 10:42:44 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var TODO
Message-Id: <20020307094244.0F4B67642B@mail.ossp.org>
Date: Thu,  7 Mar 2002 10:42:44 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   07-Mar-2002 10:42:43
  Branch: HEAD                             Handle: 2002030709424300

  Modified files:
    ossp-pkg/var            TODO

  Log:
    problems seems to be beeing solved implicitly by recent fixes ;)

  Summary:
    Revision    Changes     Path
    1.27        +0  -3      ossp-pkg/var/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/var/TODO
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 TODO
  --- ossp-pkg/var/TODO	7 Mar 2002 09:14:05 -0000	1.26
  +++ ossp-pkg/var/TODO	7 Mar 2002 09:42:43 -0000	1.27
  @@ -7,8 +7,5 @@
      and other dynamic stuff into the template inside variable constructs.
      Think about var_printf("${array[%d]}", i); 
   
  - o with PCRE active, ./var_play '${HOME:s/x$/foo/}' fails
  -   horribly with an impossible error invalid character class!
  -
    o document exception handling
   

From ossp-cvs-owner@ossp.org  Thu Mar  7 11:20:40 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AD7DA7642B; Thu,  7 Mar 2002 11:20:40 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var aclocal.m4
Message-Id: <20020307102040.AD7DA7642B@mail.ossp.org>
Date: Thu,  7 Mar 2002 11:20:40 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   07-Mar-2002 11:20:40
  Branch: HEAD                             Handle: 2002030710204000

  Modified files:
    ossp-pkg/var            aclocal.m4

  Log:
    do not use this old gdb3 stuff any longer

  Summary:
    Revision    Changes     Path
    1.4         +0  -1      ossp-pkg/var/aclocal.m4
  ____________________________________________________________________________

  Index: ossp-pkg/var/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 aclocal.m4
  --- ossp-pkg/var/aclocal.m4	28 Feb 2002 08:48:44 -0000	1.3
  +++ ossp-pkg/var/aclocal.m4	7 Mar 2002 10:20:40 -0000	1.4
  @@ -76,7 +76,6 @@
                 * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
       esac
       AC_COMPILER_OPTION(defdbg, -DDEBUG, -DDEBUG, CFLAGS="$CFLAGS -DDEBUG")
  -    AC_COMPILER_OPTION(ggdb3, -ggdb3, -ggdb3, CFLAGS="$CFLAGS -ggdb3")
       CFLAGS="$CFLAGS -pedantic"
       CFLAGS="$CFLAGS -Wall"
       WMORE="-Wshadow -Wpointer-arith -Wcast-align -Winline"

From ossp-cvs-owner@ossp.org  Thu Mar  7 12:23:34 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CAF517642B; Thu,  7 Mar 2002 12:23:33 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c
Message-Id: <20020307112333.CAF517642B@mail.ossp.org>
Date: Thu,  7 Mar 2002 12:23:33 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   07-Mar-2002 12:23:33
  Branch: HEAD                             Handle: 2002030711233300

  Modified files:
    ossp-pkg/sa             sa.c

  Log:
    Oops, the NUL-terminating check is done later, so do not destroy it
    by already reducing the size in advance. Else an exactly sized buffer
    (including space for the NUL-termination) would result in an unexpected
    error.

  Summary:
    Revision    Changes     Path
    1.56        +1  -1      ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.55 -r1.56 sa.c
  --- ossp-pkg/sa/sa.c	30 Jan 2002 16:43:00 -0000	1.55
  +++ ossp-pkg/sa/sa.c	7 Mar 2002 11:23:33 -0000	1.56
  @@ -382,7 +382,7 @@
       else {
           /* perform real output */
           ctx.bufptr = buffer;
  -        ctx.buflen = bufsize - 1;
  +        ctx.buflen = bufsize;
           n = sa_mvxprintf(sa_mvsnprintf_cb, &ctx, format, ap);
       }
       if (n != -1 && ctx.buflen == 0)

From ossp-cvs-owner@ossp.org  Thu Mar  7 12:51:54 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7D5CB7642B; Thu,  7 Mar 2002 12:51:54 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c
Message-Id: <20020307115154.7D5CB7642B@mail.ossp.org>
Date: Thu,  7 Mar 2002 12:51:54 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   07-Mar-2002 12:51:54
  Branch: HEAD                             Handle: 2002030711515400

  Modified files:
    ossp-pkg/sa             sa.c

  Log:
    Hell, why did the compiler not complain? The ctx stuff is only allowed
    to be used if real output is written. Hmmmm...

  Summary:
    Revision    Changes     Path
    1.57        +4  -4      ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.56 -r1.57 sa.c
  --- ossp-pkg/sa/sa.c	7 Mar 2002 11:23:33 -0000	1.56
  +++ ossp-pkg/sa/sa.c	7 Mar 2002 11:51:54 -0000	1.57
  @@ -384,11 +384,11 @@
           ctx.bufptr = buffer;
           ctx.buflen = bufsize;
           n = sa_mvxprintf(sa_mvsnprintf_cb, &ctx, format, ap);
  +        if (n != -1 && ctx.buflen == 0)
  +            n = -1;
  +        if (n != -1)
  +            *(ctx.bufptr) = '\0';
       }
  -    if (n != -1 && ctx.buflen == 0)
  -        n = -1;
  -    if (n != -1)
  -        *(ctx.bufptr) = '\0';
       return n;
   }
   

From ossp-cvs-owner@ossp.org  Thu Mar  7 13:11:10 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7ACAE7642B; Thu,  7 Mar 2002 13:11:10 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var TODO configure.ac var.c var.h var.pod var_tes...
Message-Id: <20020307121110.7ACAE7642B@mail.ossp.org>
Date: Thu,  7 Mar 2002 13:11:10 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   07-Mar-2002 13:11:10
  Branch: HEAD                             Handle: 2002030712110900

  Modified files:
    ossp-pkg/var            TODO configure.ac var.c var.h var.pod var_test.c

  Log:
    New API functions var_format and var_formatv which provide a convinience
    interface to printf-style expansion and variable expansion. var_format
    is like a combination of snprintf(3) and var_expand().
    
    Example: Assume the variable value context gives "bar" for ${ARRAY[7]},
    then the call..
    
        var_format(var, &tmp, 1, "foo${ARRAY[%d]}quux", 7);o
    
    ..results in tmp containing the malloc(3)'ed string "foobarquux".
    Thanks to Thomas L. for providing the hint to this functionality.

  Summary:
    Revision    Changes     Path
    1.28        +0  -7      ossp-pkg/var/TODO
    1.8         +1  -0      ossp-pkg/var/configure.ac
    1.86        +195 -1     ossp-pkg/var/var.c
    1.28        +4  -0      ossp-pkg/var/var.h
    1.29        +22 -0      ossp-pkg/var/var.pod
    1.43        +37 -0      ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/TODO
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 TODO
  --- ossp-pkg/var/TODO	7 Mar 2002 09:42:43 -0000	1.27
  +++ ossp-pkg/var/TODO	7 Mar 2002 12:11:09 -0000	1.28
  @@ -1,11 +1,4 @@
                                  OSSP var
   
  - o New feature: allow var_expand (or with a new function
  -   based on var_expand like var_printf) to first substitute printf-style
  -   %x constructs and then the OSSP var constructs. This allow more
  -   flexibility in expanding templates, because one can expand indices
  -   and other dynamic stuff into the template inside variable constructs.
  -   Think about var_printf("${array[%d]}", i); 
  -
    o document exception handling
   
  Index: ossp-pkg/var/configure.ac
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 configure.ac
  --- ossp-pkg/var/configure.ac	28 Feb 2002 08:48:44 -0000	1.7
  +++ ossp-pkg/var/configure.ac	7 Mar 2002 12:11:09 -0000	1.8
  @@ -43,6 +43,7 @@
   sinclude(libtool.m4)
   AC_PROG_LIBTOOL
   
  +AC_CHECK_FUNCS(snprintf)
   AC_CHECK_EXTLIB([OSSP ex], ex, __ex_ctx, ex.h, [AC_DEFINE(WITH_EX)])
   
   AC_CONFIG_HEADERS(config.h)
  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.85 -r1.86 var.c
  --- ossp-pkg/var/var.c	7 Mar 2002 09:14:05 -0000	1.85
  +++ ossp-pkg/var/var.c	7 Mar 2002 12:11:09 -0000	1.86
  @@ -104,6 +104,134 @@
   
   /*
   **
  +**  ==== FORMATTING FUNCTIONS ====
  +**
  +*/
  +
  +/* minimal output-independent vprintf(3) variant which supports %{c,s,d,%} only */
  +static int 
  +var_mvxprintf(
  +    int (*output)(void *ctx, const char *buffer, size_t bufsize), void *ctx, 
  +    const char *format, va_list ap)
  +{
  +    /* sufficient integer buffer: <available-bits> x log_10(2) + safety */
  +    char ibuf[((sizeof(int)*8)/3)+10]; 
  +    char *cp;
  +    char c;
  +    int d;
  +    int n;
  +    int bytes;
  +
  +    if (format == NULL || ap == NULL)
  +        return -1;
  +    bytes = 0;
  +    while (*format != '\0') {
  +        if (*format == '%') {
  +            c = *(format+1);
  +            if (c == '%') {
  +                /* expand "%%" */
  +                cp = &c;
  +                n = sizeof(char);
  +            }
  +            else if (c == 'c') {
  +                /* expand "%c" */
  +                c = (char)va_arg(ap, int);
  +                cp = &c;
  +                n = sizeof(char);
  +            }
  +            else if (c == 's') {
  +                /* expand "%s" */
  +                if ((cp = (char *)va_arg(ap, char *)) == NULL)
  +                    cp = "(null)";
  +                n = strlen(cp);
  +            }
  +            else if (c == 'd') {
  +                /* expand "%d" */
  +                d = (int)va_arg(ap, int);
  +#ifdef HAVE_SNPRINTF
  +                snprintf(ibuf, sizeof(ibuf), "%d", d); /* explicitly secure */
  +#else
  +                sprintf(ibuf, "%d", d);                /* implicitly secure */
  +#endif
  +                cp = ibuf;
  +                n = strlen(cp);
  +            }
  +            else {
  +                /* any other "%X" */
  +                cp = (char *)format;
  +                n  = 2;
  +            }
  +            format += 2;
  +        }
  +        else {
  +            /* plain text */
  +            cp = (char *)format;
  +            if ((format = strchr(cp, '%')) == NULL)
  +                format = strchr(cp, '\0');
  +            n = format - cp;
  +        }
  +        /* perform output operation */
  +        if (output != NULL)
  +            if ((n = output(ctx, cp, n)) == -1)
  +                break;
  +        bytes += n;
  +    }
  +    return bytes;
  +}
  +
  +/* output callback function context for var_mvsnprintf() */
  +typedef struct {
  +    char *bufptr;
  +    size_t buflen;
  +} var_mvsnprintf_cb_t;
  +
  +/* output callback function for var_mvsnprintf() */
  +static int 
  +var_mvsnprintf_cb(
  +    void *_ctx, 
  +    const char *buffer, size_t bufsize)
  +{
  +    var_mvsnprintf_cb_t *ctx = (var_mvsnprintf_cb_t *)_ctx;
  +
  +    if (bufsize > ctx->buflen)
  +        return -1;
  +    memcpy(ctx->bufptr, buffer, bufsize);
  +    ctx->bufptr += bufsize;
  +    ctx->buflen -= bufsize;
  +    return bufsize;
  +}
  +
  +/* minimal vsnprintf(3) variant which supports %{c,s,d} only */
  +static int 
  +var_mvsnprintf(
  +    char *buffer, size_t bufsize, 
  +    const char *format, va_list ap)
  +{
  +    int n;
  +    var_mvsnprintf_cb_t ctx;
  +
  +    if (format == NULL || ap == NULL)
  +        return -1;
  +    if (buffer != NULL && bufsize == 0)
  +        return -1;
  +    if (buffer == NULL) 
  +        /* just determine output length */
  +        n = var_mvxprintf(NULL, NULL, format, ap);
  +    else {
  +        /* perform real output */
  +        ctx.bufptr = buffer;
  +        ctx.buflen = bufsize;
  +        n = var_mvxprintf(var_mvsnprintf_cb, &ctx, format, ap);
  +        if (n != -1 && ctx.buflen == 0)
  +            n = -1;
  +        if (n != -1)
  +            *(ctx.bufptr) = '\0';
  +    }
  +    return n;
  +}
  +
  +/*
  +**
   **  ==== PARSE CONTEXT FUNCTIONS ====
   **
   */
  @@ -2476,6 +2604,71 @@
       return VAR_RC(rc);
   }
   
  +/* format and expand a string */
  +var_rc_t 
  +var_formatv(
  +    var_t *var, 
  +    char **dst_ptr, int force_expand, 
  +    const char *fmt, va_list ap)
  +{
  +    var_rc_t rc;
  +    va_list apbak;
  +    char *cpBuf;
  +    int nBuf;
  +
  +    /* argument sanity checks */
  +    if (var == NULL || dst_ptr == NULL || fmt == NULL)
  +        return VAR_RC(VAR_ERR_INVALID_ARGUMENT);
  +
  +    /* determine formatting buffer length */
  +    apbak = ap;
  +    nBuf = var_mvsnprintf(NULL, 0, fmt, ap);
  +    ap = apbak;
  +    if (nBuf == -1)
  +        return VAR_RC(VAR_ERR_FORMATTING_FAILURE);
  +
  +    /* perform formatting */
  +    if ((cpBuf = (char *)malloc(nBuf+1)) == NULL)
  +        return VAR_RC(VAR_ERR_OUT_OF_MEMORY);
  +    nBuf = var_mvsnprintf(cpBuf, nBuf+1, fmt, ap);
  +    if (nBuf == -1) {
  +        free(cpBuf);
  +        return VAR_RC(VAR_ERR_FORMATTING_FAILURE);
  +    }
  +
  +    /* perform expansion */
  +    if ((rc = var_expand(var, cpBuf, nBuf, dst_ptr, NULL, force_expand)) != VAR_OK) {
  +        free(cpBuf);
  +        return VAR_RC(rc);
  +    }
  +
  +    /* cleanup */
  +    free(cpBuf);
  +
  +    return VAR_OK;
  +}
  +
  +/* format and expand a string */
  +var_rc_t 
  +var_format(
  +    var_t *var, 
  +    char **dst_ptr, int force_expand, 
  +    const char *fmt, ...)
  +{
  +    var_rc_t rc;
  +    va_list ap;
  +
  +    /* argument sanity checks */
  +    if (var == NULL || dst_ptr == NULL || fmt == NULL)
  +        return VAR_RC(VAR_ERR_INVALID_ARGUMENT);
  +
  +    va_start(ap, fmt);
  +    rc = var_formatv(var, dst_ptr, force_expand, fmt, ap);
  +    va_end(ap);
  +
  +    return VAR_RC(rc);
  +}
  +
   /* var_rc_t to string mapping table */
   static const char *var_errors[] = {
       "everything ok",                                           /* VAR_OK = 0 */
  @@ -2522,7 +2715,8 @@
       "unterminated loop construct",                             /* VAR_ERR_UNTERMINATED_LOOP_CONSTRUCT */
       "invalid character in loop limits",                        /* VAR_ERR_INVALID_CHAR_IN_LOOP_LIMITS */
       "malformed operation argument list",                       /* VAR_ERR_MALFORMED_OPERATION_ARGUMENTS */
  -    "undefined operation"                                      /* VAR_ERR_UNDEFINED_OPERATION */
  +    "undefined operation",                                     /* VAR_ERR_UNDEFINED_OPERATION */
  +    "formatting failure"                                       /* VAR_ERR_FORMATTING_FAILURE */
   };
   
   /* transslate a return code into its corresponding descriptive text */
  Index: ossp-pkg/var/var.h
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 var.h
  --- ossp-pkg/var/var.h	4 Mar 2002 11:53:27 -0000	1.27
  +++ ossp-pkg/var/var.h	7 Mar 2002 12:11:09 -0000	1.28
  @@ -31,10 +31,12 @@
   #define __VAR_H__
   
   #include <stdlib.h>
  +#include <stdarg.h>
   
   /* Error codes */
   typedef enum {
       VAR_ERR_CALLBACK                        = -64,
  +    VAR_ERR_FORMATTING_FAILURE              = -45,
       VAR_ERR_UNDEFINED_OPERATION             = -44,
       VAR_ERR_MALFORMED_OPERATION_ARGUMENTS   = -43,
       VAR_ERR_INVALID_CHAR_IN_LOOP_LIMITS     = -42,
  @@ -123,6 +125,8 @@
   var_rc_t  var_config    (var_t  *var, var_config_t mode, ...);
   var_rc_t  var_unescape  (var_t  *var, const char *src_ptr, size_t src_len, char  *dst_ptr, size_t  dst_len, int all);
   var_rc_t  var_expand    (var_t  *var, const char *src_ptr, size_t src_len, char **dst_ptr, size_t *dst_len, int force_expand);
  +var_rc_t  var_formatv   (var_t  *var, char **dst_ptr, int force_expand, const char *fmt, va_list ap);
  +var_rc_t  var_format    (var_t  *var, char **dst_ptr, int force_expand, const char *fmt, ...);
   var_rc_t  var_strerror  (var_t  *var, var_rc_t rc, char **str);
   
   #endif /* __VAR_H__ */
  Index: ossp-pkg/var/var.pod
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 var.pod
  --- ossp-pkg/var/var.pod	7 Mar 2002 09:14:05 -0000	1.28
  +++ ossp-pkg/var/var.pod	7 Mar 2002 12:11:09 -0000	1.29
  @@ -53,6 +53,8 @@
   B<var_config>,
   B<var_unescape>,
   B<var_expand>, 
  +B<var_formatv>, 
  +B<var_format>, 
   B<var_strerror>.
   
   =item Variables:
  @@ -623,6 +625,26 @@
   exceptions for this error semantics are: on C<VAR_ERR_INVALID_ARGUMENT>
   and C<VAR_ERR_OUT_OF_MEMORY> errors, I<dst_ptr> and I<dst_len> are
   undefined.
  +
  +=item var_rc_t B<var_formatv>(var_t *I<var>, char **I<dst_ptr>, int I<force_expand>, const char *I<fmt>, va_list I<ap>);
  +
  +This is a high-level function on top of B<var_expand> which expands
  +simple printf(3)-style constructs before expanding the complex variable
  +constructs. So, this is something of a combination between sprintf(3)
  +and B<var_expand>.
  +
  +It expands simple "C<%s>" (string, type "C<char *>"), "C<%d>" (integer
  +number, type "C<int>") and "C<%c>" (character, type "C<int>") constructs
  +in I<fmt>. The values are taken from the variable argument vector I<ap>.
  +After this expansion the result is passed through B<var_expand> by
  +passing through the I<var>, I<dst_ptr> and I<force_expand> arguments.
  +The final result is a malloc(3)'ed buffer provided in I<dst_ptr> which
  +the caller has to free(3) later.
  +
  +=item var_rc_t B<var_format>(var_t *I<var>, char **I<dst_ptr>, int I<force_expand>, const char *I<fmt>, ...);
  +
  +This is just a wrapper around B<var_formatv> which translates the
  +variable argument list into C<va_list>.
   
   =item var_rc_t B<var_strerror>(var_t *I<var>, var_rc_t I<rc>, char **I<str>);
   
  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.42 -r1.43 var_test.c
  --- ossp-pkg/var/var_test.c	7 Mar 2002 09:14:05 -0000	1.42
  +++ ossp-pkg/var/var_test.c	7 Mar 2002 12:11:09 -0000	1.43
  @@ -295,6 +295,43 @@
           }
           free(tmp);
       }
  +
  +    fprintf(stderr, "Test case: formatting \"foo\"\n");
  +    if ((rc = var_format(var, &tmp, 1, "foo")) != VAR_OK) {
  +        var_strerror(var, rc, &err);
  +        fprintf(stderr, "Formatting failed: %s (%d)\n", err, rc);
  +        return 1;
  +    }
  +    if (strcmp(tmp, "foo") != 0) {
  +        fprintf(stderr, "Formatting failed: expected \"foo\", got \"%s\"\n", tmp);
  +        return 1;
  +    }
  +    free(tmp);
  +
  +    fprintf(stderr, "Test case: formatting \"foo<bar><123><x>\"\n");
  +    if ((rc = var_format(var, &tmp, 1, "foo<%s><%d><%c>", "bar", 123, 'x')) != VAR_OK) {
  +        var_strerror(var, rc, &err);
  +        fprintf(stderr, "Formatting failed: %s (%d)\n", err, rc);
  +        return 1;
  +    }
  +    if (strcmp(tmp, "foo<bar><123><x>") != 0) {
  +        fprintf(stderr, "Formatting failed: expected \"foo<bar><123><x>\", got \"%s\"\n", tmp);
  +        return 1;
  +    }
  +    free(tmp);
  +
  +    fprintf(stderr, "Test case: formatting \"foo${ARRAY[1]}bar\"\n");
  +    if ((rc = var_format(var, &tmp, 1, "foo${ARRAY[%d]}bar", 1)) != VAR_OK) {
  +        var_strerror(var, rc, &err);
  +        fprintf(stderr, "Formatting failed: %s (%d)\n", err, rc);
  +        return 1;
  +    }
  +    if (strcmp(tmp, "fooentry1bar") != 0) {
  +        fprintf(stderr, "Formatting failed: expected \"fooentry1bar\", got \"%s\"\n", tmp);
  +        return 1;
  +    }
  +    free(tmp);
  +
       var_destroy(var);
       return 0;
   }

From ossp-cvs-owner@ossp.org  Thu Mar  7 13:19:47 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DABB77642B; Thu,  7 Mar 2002 13:19:46 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var TODO var.pod
Message-Id: <20020307121946.DABB77642B@mail.ossp.org>
Date: Thu,  7 Mar 2002 13:19:46 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   07-Mar-2002 13:19:46
  Branch: HEAD                             Handle: 2002030712194600

  Modified files:
    ossp-pkg/var            TODO var.pod

  Log:
    Yeah, reduce the TODO list to zero items\!

  Summary:
    Revision    Changes     Path
    1.29        +2  -2      ossp-pkg/var/TODO
    1.30        +16 -0      ossp-pkg/var/var.pod
  ____________________________________________________________________________

  Index: ossp-pkg/var/TODO
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 TODO
  --- ossp-pkg/var/TODO	7 Mar 2002 12:11:09 -0000	1.28
  +++ ossp-pkg/var/TODO	7 Mar 2002 12:19:46 -0000	1.29
  @@ -1,4 +1,4 @@
  -                               OSSP var
   
  - o document exception handling
  +  OSSP var
  +  ========
   
  Index: ossp-pkg/var/var.pod
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 var.pod
  --- ossp-pkg/var/var.pod	7 Mar 2002 12:11:09 -0000	1.29
  +++ ossp-pkg/var/var.pod	7 Mar 2002 12:19:46 -0000	1.30
  @@ -686,6 +686,22 @@
   might have introduced now quoted pairs into the output text, which you
   need to expand to get the desired effect.
   
  +=head1 EXCEPTION HANDLING
  +
  +B<OSSP var> can be optionally built with support for exception handling
  +via B<OSSP ex> (see http://www.ossp.org/pkg/lib/ex/). For this it has to
  +be configured with the GNU Autoconf option C<--with-ex>. The difference
  +then is that the B<OSSP var> API functions throw exceptions instead of
  +returning C<VAR_ERR_XXX> return codes. 
  +
  +The thrown exceptions can be identified as B<OSSP var> exceptions by
  +checking the exception attribute C<ex_class>. It is the B<OSSP var>
  +API symbol C<var_id> for all B<OSSP var> exceptions. The C<ex_object>
  +attribute is always C<NULL>. The C<ex_value> attribute is the
  +C<var_rc_t> which forced the throwing of the exception. 
  +
  +Exception throwing can be suppressed with C<ex_shield> only.
  +
   =head1 EXAMPLE (DEVELOPER)
   
   The following simple but complete program illustrates the full usage

From ossp-cvs-owner@ossp.org  Thu Mar  7 13:39:31 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 636677642B; Thu,  7 Mar 2002 13:39:31 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var INSTALL var.pod
Message-Id: <20020307123931.636677642B@mail.ossp.org>
Date: Thu,  7 Mar 2002 13:39:31 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   07-Mar-2002 13:39:31
  Branch: HEAD                             Handle: 2002030712393000

  Modified files:
    ossp-pkg/var            INSTALL var.pod

  Log:
    more polishing

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/var/INSTALL
    1.31        +59 -55     ossp-pkg/var/var.pod
  ____________________________________________________________________________

  Index: ossp-pkg/var/INSTALL
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 INSTALL
  --- ossp-pkg/var/INSTALL	28 Feb 2002 08:48:44 -0000	1.1
  +++ ossp-pkg/var/INSTALL	7 Mar 2002 12:39:30 -0000	1.2
  @@ -10,7 +10,7 @@
     To install OSSP var into /path/to/var/ perform
     the following steps in your shell:
         
  -    $ ./configure --prefix=/path/to/var
  +    $ ./configure --prefix=/path/to/var [--with-ex[=DIR]]
       $ make
       $ make check
       $ make install
  Index: ossp-pkg/var/var.pod
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 var.pod
  --- ossp-pkg/var/var.pod	7 Mar 2002 12:19:46 -0000	1.30
  +++ ossp-pkg/var/var.pod	7 Mar 2002 12:39:30 -0000	1.31
  @@ -76,7 +76,7 @@
   value (C<${>I<name>C<:>I<op>[C<:>I<op>...]]C<}>).
   
   The supported post-operations are length determination, case
  -conversion, defaults, postive and negative alternatives, sub-strings,
  +conversion, defaults, positive and negative alternatives, sub-strings,
   regular expression based substitutions, character translations, and
   padding. Additionally, a meta-construct plus arithmetic expressions for
   index and range calculations allow (even nested) iterations over array
  @@ -289,7 +289,7 @@
   code of all API functions. On success, every API functions returns
   C<VAR_OK>. On error, they return C<VAR_ERR_XXX>. For a list of all
   possible return codes see F<var.h>. Their corresponding describing text
  -can be determined with var_strerror().
  +can be determined with B<var_strerror>.
   
   =item B<var_t>
   
  @@ -299,7 +299,7 @@
   =item B<var_config_t>
   
   This is an exported enumerated integer type describing configuration
  -parameters for var_config(). Currently C<VAR_CONFIG_SYNTAX> (for
  +parameters for B<var_config>. Currently C<VAR_CONFIG_SYNTAX> (for
   configuring the syntax via B<var_syntax_t>) and C<VAR_CONFIG_CB_VALUE>
   (for configuring the callback for value lookups via B<var_cb_value_t>)
   are defined.
  @@ -307,7 +307,7 @@
   =item B<var_syntax_t>
   
   This is an exported structural data type describing the variable
  -construct syntax. It is passed to var_config() on C<VAR_CONFIG_SYNTAX>
  +construct syntax. It is passed to B<var_config> on C<VAR_CONFIG_SYNTAX>
   and consists of the following members (directly corresponding to the
   upper-case non-terminals in the grammar above):
   
  @@ -336,28 +336,28 @@
   size_t I<var_len>, int I<var_idx>, const char **I<val_ptr>, size_t
   *I<val_len>, size_t *I<val_size>);
   
  -This function will be called by var_expand() internally whenever it has
  +This function will be called by B<var_expand> internally whenever it has
   to resolve the contents of a variable. Its parameters are:
   
   =over 4
   
   =item var_t *I<var>
   
  -This is the passed-through argument as passed to var_expand() as the
  +This is the passed-through argument as passed to B<var_expand> as the
   first argument. This can be used in the callback function to distinguish
   the expansion context or to resolve return codes, etc.
   
   =item void *I<ctx>
   
  -This is the passed-through argument as passed to var_config() on
  +This is the passed-through argument as passed to B<var_config> on
   C<VAR_CONFIG_CB_VALUE> as the forth argument. This can be used
   to provide an internal context to the callback function through
  -var_expand().
  +B<var_expand>.
   
   =item const char *I<var_ptr>
   
  -This is a pointer to the name of the variable which's contents
  -var_expand() wishes to resolve. Please note that the string is NOT
  +This is a pointer to the name of the variable whose contents
  +B<var_expand> wishes to resolve. Please note that the string is NOT
   necessarily terminated by a C<NUL> ('C<\0>') character. If the callback
   function needs it C<NUL>-terminated, it has to copy the string into an a
   temporary buffer of its own and C<NUL>-terminate it there.
  @@ -399,7 +399,7 @@
   this should be set to zero (C<0>).
   
   In case a buffer size greater than zero is returned by the callback,
  -var_expand() will make use of that buffer internally if possible. It
  +B<var_expand> will make use of that buffer internally if possible. It
   will also free(3) the buffer when it is not needed anymore, so it
   is important that it was previously allocated with malloc(3) by the
   callback.
  @@ -407,25 +407,25 @@
   =back
   
   The return code of the lookup function B<cb> is interpreted by
  -var_expand() according to the following convention: C<VAR_OK> means
  +B<var_expand> according to the following convention: C<VAR_OK> means
   success, that is, the contents of the variable has been resolved
   successfully and the I<val_ptr>, I<val_len>, and I<val_size> variables
   have been filled with appropriate values. A return code C<VAR_ERR_XXX>
   means that the resolving failed, such as a system error or lack of
   resources. In the latter two cases, the contents of I<val_ptr>,
   I<val_len> and I<val_size> is assumed to be undefined. Hence,
  -var_expand() will not free(3) any possibly allocated buffers, the
  +B<var_expand> will not free(3) any possibly allocated buffers, the
   callback must take care of this itself.
   
   If a callback returns the special C<VAR_ERR_UNDEFINED_VARIABLE> return
  -code, the behaviour of var_expand() depends on the setting of its
  -I<force_expand> parameter. If I<force_expand> has been set, var_expand()
  +code, the behavior of B<var_expand> depends on the setting of its
  +I<force_expand> parameter. If I<force_expand> has been set, B<var_expand>
   will pass-through this error to the caller. If I<force_expand> has
  -not been set, var_expand() will copy the expression that caused the
  -lookup to fail verbatimly into the output buffer so that an additional
  +not been set, B<var_expand> will copy the expression that caused the
  +lookup to fail verbatim into the output buffer so that an additional
   expanding pass may expand it later.
   
  -If the callback returns an C<VAR_ERR_XXX>, var_expand() will fail with
  +If the callback returns an C<VAR_ERR_XXX>, B<var_expand> will fail with
   this return code. If the cause for the error can not be denoted by an
   error code defined in F<var.h>, callback implementors should use the
   error code C<VAR_ERR_CALLBACK> (which is currently defined to -64).
  @@ -446,27 +446,27 @@
   char *I<val_ptr>, size_t I<val_len>, const char **I<out_ptr>, size_t
   *I<out_len>, size_t *I<out_size>);
   
  -This function will be called by var_expand() internally whenever a
  +This function will be called by B<var_expand> internally whenever a
   custom operation is used. Its parameters are:
   
   =over 4
   
   =item var_t *I<var>
   
  -This is the passed-through argument as passed to var_expand() as the
  +This is the passed-through argument as passed to B<var_expand> as the
   first argument. This can be used in the callback function to distinguish
   the expansion context or to resolve return codes, etc.
   
   =item void *I<ctx>
   
  -This is the passed-through argument as passed to var_config() on
  +This is the passed-through argument as passed to B<var_config> on
   C<VAR_CONFIG_CB_OPERATION> as the forth argument. This can be used
   to provide an internal context to the callback function through
  -var_expand().
  +B<var_expand>.
   
   =item const char *I<op_ptr>
   
  -This is a pointer to the name of the operation which var_expand() wishes
  +This is a pointer to the name of the operation which B<var_expand> wishes
   to perform. Please note that the string is NOT necessarily terminated
   by a C<NUL> ('C<\0>') character. If the callback function needs it
   C<NUL>-terminated, it has to copy the string into an a temporary buffer
  @@ -516,7 +516,7 @@
   set to zero (C<0>).
   
   In case a buffer size greater than zero is returned by the callback,
  -var_expand() will make use of that buffer internally if possible. It
  +B<var_expand> will make use of that buffer internally if possible. It
   will also free(3) the buffer when it is not needed anymore, so it
   is important that it was previously allocated with malloc(3) by the
   callback.
  @@ -550,7 +550,7 @@
   
   This overrides the syntax configuration in I<var> with the one provided
   in I<syntax>. The complete structure contents is copied, so the caller
  -is allowed to immediately destroy I<syntax> after the var_config() call.
  +is allowed to immediately destroy I<syntax> after the B<var_config> call.
   The default is the contents as shown above under the type description of
   B<var_syntax_t>.
   
  @@ -558,7 +558,7 @@
   
   This overrides the syntax configuration in I<var> with the one provided
   The default is C<NULL> for I<cb> and I<ctx>. At least C<NULL> for I<cb>
  -is not valid for proper operation of var_expand(), so the caller has to
  +is not valid for proper operation of B<var_expand>, so the caller has to
   configure the callback before variable expansions can be successfully
   performed.
   
  @@ -570,7 +570,7 @@
   I<src_ptr>/I<src_len>. The I<dst_ptr>/I<dst_len> point to a output
   buffer, into which the expanded data is copied if processing is
   successful. The size of this buffer must be at least I<src_len>+1
  -characters. The reason is that var_unescape() always adds a terminating
  +characters. The reason is that B<var_unescape> always adds a terminating
   C<NUL> ('C<\0>') character at the end of the output buffer, so that
   you can use the result comfortably with other C library routines. The
   supplied I<dst_ptr> either has to be point to a pre-allocated buffer or
  @@ -578,14 +578,14 @@
   guarrantied to either keep the size or reduce the size of the input).
   
   The parameter I<all> is a boolean flag that modifies the behavior
  -of var_unescape(). If is set to true (any value except zero),
  -var_unescape() will expand B<any> escape sequences it sees, even those that
  +of B<var_unescape>. If is set to true (any value except zero),
  +B<var_unescape> will expand B<any> escape sequences it sees, even those that
   it does not know about. This means that "C<\1>" will become "C<1>",
  -even though "C<\1>" has no special meaning to var_unescape(). If I<all>
  +even though "C<\1>" has no special meaning to B<var_unescape>. If I<all>
   is set to false (the value zero), such escape sequences will be copied
  -verbatimly to the output buffer.
  +verbatim to the output buffer.
   
  -The quoted pairs supported by var_unescape() are "C<\t>" (tabulator),
  +The quoted pairs supported by B<var_unescape> are "C<\t>" (tabulator),
   "C<\r>" (carriage return), "C<\n>" (line feed), "C<\NNN>" (octal value),
   "C<\xNN>" (hexadecimal value), and "C<\x{NNMM..}>" (grouped hexadecimal
   values).
  @@ -596,32 +596,32 @@
   I<src_ptr>/I<src_len> and stores them in an allocated buffer returned
   in I<dst_ptr>/I<dst_len>.
   
  -The output buffer I<dst_ptr>/I<dst_len> is allocated by var_expand()
  +The output buffer I<dst_ptr>/I<dst_len> is allocated by B<var_expand>
   using the system call malloc(3), thus it is the caller's responsibility
   to free(3) that buffer once it is no longer used anymore. The output
  -buffer for convinience reasons is always C<NUL>-terminated by
  -var_expand(), but this C<NUL> character is not counted for I<dst_len>.
  +buffer for convenience reasons is always C<NUL>-terminated by
  +B<var_expand>, but this C<NUL> character is not counted for I<dst_len>.
   The I<dst_len> pointer can be specified as C<NULL> if you are not
   interested in the output buffer length.
   
  -The I<force_expand> flag determines how var_expand() deals with
  +The I<force_expand> flag determines how B<var_expand> deals with
   undefined variables (indicated by the callback function through the
   return code C<VAR_ERR_UNDEFINED_VARIABLE>). If it is set to true
  -(any value except zero), var_expand() will fail with error code
  +(any value except zero), B<var_expand> will fail with error code
   C<VAR_ERR_UNDEFINED_VARIABLE> whenever an undefined variable is
   encountered. That is, it just passes-through the return code of the
  -callback function. If set to false (value zero), var_expand() will copy
  -the expression it failed to expand verbatimly into the output buffer,
  +callback function. If set to false (value zero), B<var_expand> will copy
  +the expression it failed to expand verbatim into the output buffer,
   in order to enable you to go over the buffer with an additional pass.
  -Generally, if you do not plan to use muli-pass expansion, you should set
  +Generally, if you do not plan to use multi-pass expansion, you should set
   I<force_expand> to true in order to make sure no unexpanded variable
   constructs are left over in the buffer.
   
  -If var_expand() fails with an error, I<dst_ptr> will point to I<src_ptr>
  +If B<var_expand> fails with an error, I<dst_ptr> will point to I<src_ptr>
   and I<dst_len> will contain the number of characters that have been
  -consumed from I<src_ptr> before the error occured. In other words,
  +consumed from I<src_ptr> before the error occurred. In other words,
   if an error occurs, I<dst_ptr>/I<dst_len> point to the last parsing
  -location in I<src_ptr>/I<src_len> before the error occured. The only
  +location in I<src_ptr>/I<src_len> before the error occurred. The only
   exceptions for this error semantics are: on C<VAR_ERR_INVALID_ARGUMENT>
   and C<VAR_ERR_OUT_OF_MEMORY> errors, I<dst_ptr> and I<dst_len> are
   undefined.
  @@ -667,22 +667,22 @@
   =head1 COMBINING UNESCAPING AND EXPANSION
   
   For maximum power and flexibility, you usually want to combine
  -var_unescape() and var_expand(). That is, you will want to use
  -var_unescape() to turn all escape sequences into their real
  -representation before you call var_expand() for expanding variable
  +B<var_unescape> and B<var_expand>. That is, you will want to use
  +B<var_unescape> to turn all escape sequences into their real
  +representation before you call B<var_expand> for expanding variable
   constructs. This way the user can safely use specials like "C<\n>" or
   "C<\t>" throughout the template and achieve the desired effect. These
   escape sequences are particularly useful if search-and-replace or
   transpose actions are performed on variables before they are expanded.
  -Be sure, though, to make the first var_unescape() pass with the I<all>
  +Be sure, though, to make the first B<var_unescape> pass with the I<all>
   flag set to false, or the routine will also expand escape sequences like
   "C<\1>", which might have a special meaning (regular expression
  -back-references) in the var_expand() pass to follow.
  +back-references) in the B<var_expand> pass to follow.
   
   Once, all known escape sequences are expanded, expand the variables
  -with var_expand(). After that, you will want to have a second pass
  -with var_unescape() and the flag I<all> set to true, to make sure all
  -remaining escape sequences are expanded. Also, the var_expand() pass
  +with B<var_expand>. After that, you will want to have a second pass
  +with B<var_unescape> and the flag I<all> set to true, to make sure all
  +remaining escape sequences are expanded. Also, the B<var_expand> pass
   might have introduced now quoted pairs into the output text, which you
   need to expand to get the desired effect.
   
  @@ -844,10 +844,14 @@
   
   =head1 HISTORY
   
  -B<OSSP var> was written by Peter Simons E<lt>simons@crypt.toE<gt> in
  -November 2001. Its API and internal code structure was revamped in
  -February 2002 by Ralf S. Engelschall E<lt>rse@engelschall.comE<gt> to
  -fully conform to the B<OSSP> library standards.
  +B<OSSP var> was initially written by Peter Simons
  +E<lt>simons@crypt.toE<gt> in November 2001 under contract with the
  +B<OSSP> sponsor B<Cable & Wireless Germany>. Its API and internal
  +code structure was revamped in February 2002 by Ralf S. Engelschall
  +E<lt>rse@engelschall.comE<gt> to fully conform to the B<OSSP> library
  +standards. Before its initial public release, Ralf S. Engelschall in
  +March 2002 finally added support for custom operations, the formatting
  +functionality, optional multi-line matching, etc. 
   
   =cut
   

From ossp-cvs-owner@ossp.org  Thu Mar  7 15:03:51 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DE9877642B; Thu,  7 Mar 2002 15:03:50 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Message-Id: <20020307140350.DE9877642B@mail.ossp.org>
Date: Thu,  7 Mar 2002 15:03:50 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   07-Mar-2002 15:03:50
  Branch: HEAD                             Handle: 2002030714035000

  Modified files:
    ossp-pkg/var            var.c

  Log:
    Shit happens! Our tokenbuf_copy() function was a good idea, but cannot
    be used for the loop construct expansion, because an intermediate
    tokenbuf_append() can realloc(3) the underlying buffer, so the backuped
    token buffer would point to no longer valid data. We really have to
    re-introduce the original trick of Peter Simons where an offset is used
    only.

  Summary:
    Revision    Changes     Path
    1.87        +8  -15     ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.86 -r1.87 var.c
  --- ossp-pkg/var/var.c	7 Mar 2002 12:11:09 -0000	1.86
  +++ ossp-pkg/var/var.c	7 Mar 2002 14:03:50 -0000	1.87
  @@ -44,6 +44,9 @@
   #  include <regex.h>
   #endif
   #include "var.h"
  +#if defined(HAVE_DMALLOC_H) && defined(WITH_DMALLOC)
  +#include "dmalloc.h"
  +#endif
   
   /* unique library identifier */
   const char var_id[] = "OSSP var";
  @@ -309,16 +312,6 @@
   }
   
   static void 
  -tokenbuf_copy(
  -    tokenbuf_t *src, tokenbuf_t *dst)
  -{
  -    dst->begin = src->begin;
  -    dst->end = src->end;
  -    dst->buffer_size = src->buffer_size;
  -    return;
  -}
  -
  -static void 
   tokenbuf_move(
       tokenbuf_t *src, tokenbuf_t *dst)
   {
  @@ -2244,7 +2237,7 @@
       tokenbuf_t result;
       int start, step, stop, open_stop;
       int i;
  -    tokenbuf_t output_backup;
  +    int output_backup;
       int rel_lookup_cnt;
       int loop_limit_length;
       var_parse_t myctx;
  @@ -2267,7 +2260,7 @@
               start = 0;
               step  = 1;
               stop  = 0;
  -            tokenbuf_copy(output, &output_backup);
  +            output_backup = 0;
   
               /* iterate over loop construct, either as long as there is
                  (still) nothing known about the limit, or there is an open
  @@ -2283,7 +2276,7 @@
                    i += step) {
   
                   /* remember current output end for restoring */
  -                tokenbuf_copy(output, &output_backup);
  +                output_backup = (output->end - output->begin);
   
                   /* open temporary context for recursion */ 
                   ctx = var_parse_push(ctx, &myctx);
  @@ -2320,7 +2313,7 @@
                       else if (rc2 > 0) {
                           loop_limit_length = rc2;
                           /* restart loop from scratch */
  -                        tokenbuf_copy(&output_backup, output);
  +                        output->end = (output->begin + output_backup);
                           goto re_loop;
                       }
                   }
  @@ -2330,7 +2323,7 @@
                  because the last iteration was just to determine the loop
                  termination and its result has to be discarded */
               if (open_stop)
  -                tokenbuf_copy(&output_backup, output);
  +                output->end = (output->begin + output_backup);
   
               /* skip parsed loop construct */
               p += rc;

From ossp-cvs-owner@ossp.org  Thu Mar  7 15:58:42 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 38C197642B; Thu,  7 Mar 2002 15:58:42 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var Makefile.in acconfig.h configure.ac ts.c ts.h...
Message-Id: <20020307145842.38C197642B@mail.ossp.org>
Date: Thu,  7 Mar 2002 15:58:42 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   07-Mar-2002 15:58:42
  Branch: HEAD                             Handle: 2002030714584100

  Added files:
    ossp-pkg/var            ts.c ts.h
  Modified files:
    ossp-pkg/var            Makefile.in acconfig.h configure.ac var_test.c

  Log:
    - use our standard ts.[ch] test suite library
    - add support for Dmalloc facility

  Summary:
    Revision    Changes     Path
    1.7         +1  -1      ossp-pkg/var/Makefile.in
    1.2         +3  -0      ossp-pkg/var/acconfig.h
    1.9         +1  -0      ossp-pkg/var/configure.ac
    1.1         +463 -0     ossp-pkg/var/ts.c
    1.1         +64 -0      ossp-pkg/var/ts.h
    1.44        +190 -134   ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/Makefile.in
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 Makefile.in
  --- ossp-pkg/var/Makefile.in	28 Feb 2002 08:48:44 -0000	1.6
  +++ ossp-pkg/var/Makefile.in	7 Mar 2002 14:58:41 -0000	1.7
  @@ -51,7 +51,7 @@
   LIB_OBJS    = var.lo
   
   TST_NAME    = var_test
  -TST_OBJS    = var_test.o
  +TST_OBJS    = var_test.o ts.o
   
   PLY_NAME    = var_play
   PLY_OBJS    = var_play.o
  Index: ossp-pkg/var/acconfig.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 acconfig.h
  --- ossp-pkg/var/acconfig.h	30 Jan 2002 19:37:14 -0000	1.1
  +++ ossp-pkg/var/acconfig.h	7 Mar 2002 14:58:41 -0000	1.2
  @@ -2,3 +2,6 @@
   /* whether to use OSSP ex */
   #undef WITH_EX
   
  +/* whether to use Dmalloc */
  +#undef WITH_DMALLOC
  +
  Index: ossp-pkg/var/configure.ac
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 configure.ac
  --- ossp-pkg/var/configure.ac	7 Mar 2002 12:11:09 -0000	1.8
  +++ ossp-pkg/var/configure.ac	7 Mar 2002 14:58:41 -0000	1.9
  @@ -45,6 +45,7 @@
   
   AC_CHECK_FUNCS(snprintf)
   AC_CHECK_EXTLIB([OSSP ex], ex, __ex_ctx, ex.h, [AC_DEFINE(WITH_EX)])
  +AC_CHECK_EXTLIB([Dmalloc], dmalloc, dmalloc_debug, dmalloc.h, AC_DEFINE(WITH_DMALLOC))
   
   AC_CONFIG_HEADERS(config.h)
   AC_CONFIG_FILES(Makefile var-config)
  Index: ossp-pkg/var/ts.c
  ============================================================
  $ cvs update -p -r1.1 ts.c
  /*
  **  TS - OSSP Test Suite Library
  **  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP TS, a small test suite library which
  **  can be found at http://www.ossp.org/pkg/ts/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  ts.c: test suite library
  */
  
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  #include <stdarg.h>
  
  #include "ts.h"
  
  /* embedded ring data structure library */
  #define RING_ENTRY(elem) \
      struct { elem *next; elem *prev; }
  #define RING_HEAD(elem) \
      struct { elem *next; elem *prev; }
  #define RING_SENTINEL(hp, elem, link) \
      (elem *)((char *)(hp) - ((size_t)(&((elem *)0)->link)))
  #define RING_FIRST(hp) \
      (hp)->next
  #define RING_LAST(hp) \
      (hp)->prev
  #define RING_NEXT(ep, link) \
      (ep)->link.next
  #define RING_PREV(ep, link) \
      (ep)->link.prev
  #define RING_INIT(hp, elem, link) \
      do { RING_FIRST((hp)) = RING_SENTINEL((hp), elem, link); \
           RING_LAST((hp))  = RING_SENTINEL((hp), elem, link); } while (0)
  #define RING_EMPTY(hp, elem, link) \
      (RING_FIRST((hp)) == RING_SENTINEL((hp), elem, link))
  #define RING_ELEM_INIT(ep, link) \
      do { RING_NEXT((ep), link) = (ep); \
           RING_PREV((ep), link) = (ep); } while (0)
  #define RING_SPLICE_BEFORE(lep, ep1, epN, link) \
      do { RING_NEXT((epN), link) = (lep); \
           RING_PREV((ep1), link) = RING_PREV((lep), link); \
           RING_NEXT(RING_PREV((lep), link), link) = (ep1); \
           RING_PREV((lep), link) = (epN); } while (0)
  #define RING_SPLICE_TAIL(hp, ep1, epN, elem, link) \
      RING_SPLICE_BEFORE(RING_SENTINEL((hp), elem, link), (ep1), (epN), link)
  #define RING_INSERT_TAIL(hp, nep, elem, link) \
      RING_SPLICE_TAIL((hp), (nep), (nep), elem, link)
  #define RING_FOREACH(ep, hp, elem, link) \
      for ((ep)  = RING_FIRST((hp)); \
           (ep) != RING_SENTINEL((hp), elem, link); \
           (ep)  = RING_NEXT((ep), link))
  
  /* test suite test log */
  struct tstl_st;
  typedef struct tstl_st tstl_t;
  struct tstl_st {
      RING_ENTRY(tstl_t) next;
      char              *text;
      const char        *file;
      int                line;
  };
  
  /* test suite test check */
  struct tstc_st;
  typedef struct tstc_st tstc_t;
  struct tstc_st {
      RING_ENTRY(tstc_t) next;
      char              *title;
      int                failed;
      const char        *file;
      int                line;
      RING_HEAD(tstl_t)  logs;
  };
  
  /* test suite test */
  struct ts_test_st {
      RING_ENTRY(ts_test_t)  next;
      char              *title;
      ts_test_cb_t         func;
      const char        *file;
      int                line;
      RING_HEAD(tstc_t)  checks;
  };
  
  /* test suite */
  struct ts_suite_st {
      char              *title;
      RING_HEAD(ts_test_t)   tests;
  };
  
  /* minimal output-independent vprintf(3) variant which supports %{c,s,d,%} only */
  static int ts_suite_mvxprintf(char *buffer, size_t bufsize, const char *format, va_list ap)
  {
      /* sufficient integer buffer: <available-bits> x log_10(2) + safety */
      char ibuf[((sizeof(int)*8)/3)+10]; 
      char *cp;
      char c;
      int d;
      int n;
      int bytes;
  
      if (format == NULL || ap == NULL)
          return -1;
      bytes = 0;
      while (*format != '\0') {
          if (*format == '%') {
              c = *(format+1);
              if (c == '%') {
                  /* expand "%%" */
                  cp = &c;
                  n = sizeof(char);
              }
              else if (c == 'c') {
                  /* expand "%c" */
                  c = (char)va_arg(ap, int);
                  cp = &c;
                  n = sizeof(char);
              }
              else if (c == 's') {
                  /* expand "%s" */
                  if ((cp = (char *)va_arg(ap, char *)) == NULL)
                      cp = "(null)";
                  n = strlen(cp);
              }
              else if (c == 'd') {
                  /* expand "%d" */
                  d = (int)va_arg(ap, int);
  #ifdef HAVE_SNPRINTF
                  snprintf(ibuf, sizeof(ibuf), "%d", d); /* explicitly secure */
  #else
                  sprintf(ibuf, "%d", d);                /* implicitly secure */
  #endif
                  cp = ibuf;
                  n = strlen(cp);
              }
              else {
                  /* any other "%X" */
                  cp = (char *)format;
                  n  = 2;
              }
              format += 2;
          }
          else {
              /* plain text */
              cp = (char *)format;
              if ((format = strchr(cp, '%')) == NULL)
                  format = strchr(cp, '\0');
              n = format - cp;
          }
          /* perform output operation */
          if (buffer != NULL) {
              if (n > bufsize)
                  return -1;
              memcpy(buffer, cp, n);
              buffer  += n;
              bufsize -= n;
          }
          bytes += n;
      }
      /* nul-terminate output */
      if (buffer != NULL) {
          if (bufsize == 0)
              return -1;
          *buffer = '\0';
      }
      return bytes;
  }
  
  /* minimal vasprintf(3) variant which supports %{c,s,d} only */
  static char *ts_suite_mvasprintf(const char *format, va_list ap)
  {
      char *buffer;
      int n;
      va_list ap2;
  
      if (format == NULL || ap == NULL)
          return NULL;
      ap2 = ap;
      if ((n = ts_suite_mvxprintf(NULL, 0, format, ap)) == -1)
          return NULL;
      if ((buffer = (char *)malloc(n+1)) == NULL)
          return NULL;
      ts_suite_mvxprintf(buffer, n+1, format, ap2);
      return buffer;
  }
  
  /* minimal asprintf(3) variant which supports %{c,s,d} only */
  static char *ts_suite_masprintf(const char *format, ...)
  {
      va_list ap;
      char *cp;
  
      va_start(ap, format);
      cp = ts_suite_mvasprintf(format, ap);
      va_end(ap);
      return cp;
  }
  
  /* create test suite */
  ts_suite_t *ts_suite_new(const char *fmt, ...)
  {
      ts_suite_t *ts;
      va_list ap;
  
      if ((ts = (ts_suite_t *)malloc(sizeof(ts_suite_t))) == NULL)
          return NULL;
      va_start(ap, fmt);
      ts->title = ts_suite_mvasprintf(fmt, ap);
      RING_INIT(&ts->tests, ts_test_t, next);
      va_end(ap);
      return ts;
  }
  
  /* add test case to test suite */
  void ts_suite_test(ts_suite_t *ts, ts_test_cb_t func, const char *fmt, ...)
  {
      ts_test_t *tst;
      va_list ap;
  
      if (ts == NULL || func == NULL || fmt == NULL)
          return;
      if ((tst = (ts_test_t *)malloc(sizeof(ts_test_t))) == NULL)
          return;
      RING_ELEM_INIT(tst, next);
      va_start(ap, fmt);
      tst->title = ts_suite_mvasprintf(fmt, ap);
      va_end(ap);
      tst->func = func;
      tst->file = NULL;
      tst->line = 0;
      RING_INIT(&tst->checks, tstc_t, next);
      RING_INSERT_TAIL(&ts->tests, tst, ts_test_t, next);
      return;
  }
  
  /* run test suite */
  int ts_suite_run(ts_suite_t *ts)
  {
      ts_test_t *tst;
      tstc_t *tstc;
      tstl_t *tstl;
      int total_tests, total_tests_suite_failed;
      int total_checks, total_checks_failed;
      int test_checks, test_checks_failed;
      const char *file;
      int line;
      char *cp;
  
      if (ts == NULL)
          return 0;
  
      /* init total counters */
      total_tests         = 0;
      total_tests_suite_failed  = 0;
      total_checks        = 0;
      total_checks_failed = 0;
  
      fprintf(stdout, "\n");
      fprintf(stdout, " Test Suite: %s\n", ts->title);
      fprintf(stdout, " __________________________________________________________________\n");
      fprintf(stdout, "\n");
      fflush(stdout);
  
      /* iterate through all test cases */
      RING_FOREACH(tst, &ts->tests, ts_test_t, next) {
          cp = ts_suite_masprintf(" Test: %s ........................................"
                                      "........................................", tst->title);
          cp[60] = '\0';
          fprintf(stdout, "%s", cp);
          free(cp);
          fflush(stdout);
  
          /* init test case counters */
          test_checks        = 0;
          test_checks_failed = 0;
  
          /* run the test case function */
          tst->func(tst);
  
          /* iterate through all performed checks to determine status */
          RING_FOREACH(tstc, &tst->checks, tstc_t, next) {
              test_checks++;
              if (tstc->failed)
                  test_checks_failed++;
          }
  
          if (test_checks_failed > 0) {
              /* some checks failed, so do detailed reporting of test case */
              fprintf(stdout, " FAILED\n");
              fprintf(stdout, "       Ops, %d/%d checks failed! Detailed report follows:\n",
                      test_checks_failed, test_checks);
              RING_FOREACH(tstc, &tst->checks, tstc_t, next) {
                  file = (tstc->file != NULL ? tstc->file : tst->file);
                  line = (tstc->line != 0    ? tstc->line : tst->line);
                  if (file != NULL)
                      fprintf(stdout, "       Check: %s [%s:%d]\n", tstc->title, file, line);
                  else
                      fprintf(stdout, "       Check: %s\n", tstc->title);
                  RING_FOREACH(tstl, &tstc->logs, tstl_t, next) {
                      file = (tstl->file != NULL ? tstl->file : file);
                      line = (tstl->line != 0    ? tstl->line : line);
                      if (file != NULL)
                          fprintf(stdout, "              Log: %s [%s:%d]\n", tstl->text, file, line);
                      else
                          fprintf(stdout, "              Log: %s\n", tstl->text);
                  }
              }
          }
          else {
              /* test case ran successfully */
              fprintf(stdout, ".... OK\n");
          }
          fflush(stdout);
  
          /* accumulate counters */
          total_checks += test_checks;
          total_tests++;
          if (test_checks_failed > 0) {
              total_checks_failed += test_checks_failed;
              total_tests_suite_failed++;
          }
      }
  
      /* print test suite summary */
      fprintf(stdout, " __________________________________________________________________\n");
      fprintf(stdout, "\n");
      fprintf(stdout, " Test Summary: %d tests (%d ok, %d failed), %d checks (%d ok, %d failed)\n", 
              total_tests, (total_tests - total_tests_suite_failed), total_tests_suite_failed, 
              total_checks, (total_checks - total_checks_failed), total_checks_failed); 
      if (total_tests_suite_failed > 0)
          fprintf(stdout, " Test Suite: FAILED\n");
      else
          fprintf(stdout, " Test Suite: OK\n");
      fprintf(stdout, "\n");
      fflush(stdout);
  
      return total_checks_failed;
  }
  
  /* destroy test suite */
  void ts_suite_free(ts_suite_t *ts)
  {
      ts_test_t *tst;
      tstc_t *tstc;
      tstl_t *tstl;
  
      if (ts == NULL)
          return;
      RING_FOREACH(tst, &ts->tests, ts_test_t, next) {
          RING_FOREACH(tstc, &tst->checks, tstc_t, next) {
              RING_FOREACH(tstl, &tstc->logs, tstl_t, next) {
                  free(tstl->text);
              }
              free(tstc->title);
              free(tstc);
          }
          free(tst->title);
          free(tst);
      }
      free(tst->title);
      free(ts);
      return;
  }
  
  /* annotate test case with file name and line number */
  ts_test_t *ts_test_ctx(ts_test_t *tst, const char *file, int line)
  {
      if (tst != NULL && file != NULL) {
          tst->file = file;
          tst->line = line;
      }
      return tst;
  }
  
  /* annotate test case with check */
  void ts_test_check(ts_test_t *tst, const char *fmt, ...)
  {
      tstc_t *tstc;
      va_list ap;
  
      if (tst == NULL || fmt == NULL)
          return;
      if ((tstc = (tstc_t *)malloc(sizeof(tstc_t))) == NULL)
          return;
      va_start(ap, fmt);
      RING_ELEM_INIT(tstc, next);
      tstc->title = ts_suite_mvasprintf(fmt, ap);
      tstc->failed = 0;
      tstc->file = tst->file;
      tstc->line = tst->line;
      RING_INIT(&tstc->logs, tstl_t, next);
      RING_INSERT_TAIL(&tst->checks, tstc, tstc_t, next);
      va_end(ap);
      return;
  }
  
  /* annotate test case with log message and failure */
  void ts_test_fail(ts_test_t *tst, const char *fmt, ...)
  {
      tstc_t *tstc;
      tstl_t *tstl;
      va_list ap;
  
      if (tst == NULL || fmt == NULL)
          return;
      if ((tstl = (tstl_t *)malloc(sizeof(tstl_t))) == NULL)
          return;
      va_start(ap, fmt);
      tstl->text = ts_suite_mvasprintf(fmt, ap);
      tstl->file = tst->file;
      tstl->line = tst->line;
      RING_ELEM_INIT(tstl, next);
      tstc = RING_LAST(&tst->checks);
      RING_INSERT_TAIL(&tstc->logs, tstl, tstl_t, next);
      tstc->failed = 1;
      va_end(ap);
      return;
  }
  
  /* annotate test case with log message only */
  void ts_test_log(ts_test_t *tst, const char *fmt, ...)
  {
      tstc_t *tstc;
      tstl_t *tstl;
      va_list ap;
  
      if (tst == NULL || fmt == NULL)
          return;
      if ((tstl = (tstl_t *)malloc(sizeof(tstl_t))) == NULL)
          return;
      va_start(ap, fmt);
      tstl->text = ts_suite_mvasprintf(fmt, ap);
      tstl->file = tst->file;
      tstl->line = tst->line;
      RING_ELEM_INIT(tstl, next);
      tstc = RING_LAST(&tst->checks);
      RING_INSERT_TAIL(&tstc->logs, tstl, tstl_t, next);
      va_end(ap);
      return;
  }
  
  Index: ossp-pkg/var/ts.h
  ============================================================
  $ cvs update -p -r1.1 ts.h
  /*
  **  TS - OSSP Test Suite Library
  **  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP TS, a small test suite library which
  **  can be found at http://www.ossp.org/pkg/ts/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  ts.h: test suite library API
  */
  
  #ifndef _TS_H_
  #define _TS_H_
  
  /* test suite object type */
  struct ts_suite_st;
  typedef struct ts_suite_st ts_suite_t;
  
  /* test object type */
  struct ts_test_st;
  typedef struct ts_test_st ts_test_t;
  
  /* test callback function type */
  typedef void (*ts_test_cb_t)(ts_test_t *);
  
  /* test suite operations */
  ts_suite_t *ts_suite_new  (const char *fmt, ...);
  void        ts_suite_test (ts_suite_t *s, ts_test_cb_t func, const char *fmt, ...);
  int         ts_suite_run  (ts_suite_t *s);
  void        ts_suite_free (ts_suite_t *s);
  
  /* test operations */
  ts_test_t  *ts_test_ctx   (ts_test_t *t, const char *file, int line);
  void        ts_test_check (ts_test_t *t, const char *fmt, ...);
  void        ts_test_fail  (ts_test_t *t, const char *fmt, ...);
  void        ts_test_log   (ts_test_t *t, const char *fmt, ...);
  
  /* test suite short-cut macros */
  #define TS_TEST(name) \
      static void name(ts_test_t *_t)
  #define TS_CTX \
      ts_test_ctx(_t, __FILE__, __LINE__)
  
  #endif /* _TS_H_ */
  
  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.43 -r1.44 var_test.c
  --- ossp-pkg/var/var_test.c	7 Mar 2002 12:11:09 -0000	1.43
  +++ ossp-pkg/var/var_test.c	7 Mar 2002 14:58:41 -0000	1.44
  @@ -32,50 +32,19 @@
   #include <errno.h>
   #include <ctype.h>
   
  -#include "var.h"
  +#include "config.h"
  +#if defined(HAVE_DMALLOC_H) && defined(WITH_DMALLOC)
  +#include "dmalloc.h"
  +#endif
   
  -static var_rc_t 
  -var_operation(
  -    var_t *var, void *ctx,
  -    const char  *op_ptr, size_t op_len,
  -    const char  *arg_ptr, size_t arg_len,
  -    const char  *val_ptr, size_t val_len,
  -    char **out_ptr, size_t *out_len, size_t *out_size)
  -{
  -    int i;
  +#include "var.h"
  +#include "ts.h"
   
  -    if (val_ptr == NULL) {
  -        *out_ptr = "";
  -        *out_len = 0;
  -        *out_size = 0;
  -        return VAR_OK;
  -    }
  -    if (op_len == 6 && strncmp(op_ptr, "return", 6) == 0) {
  -        *out_ptr = malloc(arg_len);
  -        *out_len = arg_len;
  -        *out_size = arg_len;
  -        memcpy(*out_ptr, arg_ptr, arg_len);
  -        return VAR_OK;
  -    }
  -    else if (op_len == 5 && strncmp(op_ptr, "upper", 5) == 0) {
  -        *out_ptr = malloc(val_len);
  -        *out_len = val_len;
  -        *out_size = val_len;
  -        for (i = 0; i < val_len; i++)
  -            (*out_ptr)[i] = (char)toupper((int)(val_ptr[i]));
  -        return VAR_OK;
  -    }
  -    else if (op_len == 5 && strncmp(op_ptr, "lower", 5) == 0) {
  -        *out_ptr = malloc(val_len);
  -        *out_len = val_len;
  -        *out_size = val_len;
  -        for (i = 0; i < val_len; i++)
  -            (*out_ptr)[i] = (char)tolower((int)(val_ptr[i]));
  -        return VAR_OK;
  -    }
  -    else 
  -        return VAR_ERR_UNDEFINED_OPERATION;
  -}
  +/*
  +**
  +**  ==== VARIABLE LOOKUP CALLBACK ====
  +**
  +*/
   
   struct variable {
       const char *name;
  @@ -83,7 +52,26 @@
       const char *data;
   };
   
  -static var_rc_t var_lookup(
  +static const struct variable lookup_vars[] = {
  +    { "ARRAY",     0, "entry0"                 },
  +    { "ARRAY",     1, "entry1"                 },
  +    { "ARRAY",     2, "entry2"                 },
  +    { "ARRAY",     3, "entry3"                 },
  +    { "BAR",       0, "type"                   },
  +    { "EMPTY",     0, ""                       },
  +    { "FOO",       0, "os"                     },
  +    { "HEINZ",     0, "heinz0"                 },
  +    { "HEINZ",     1, "heinz1"                 },
  +    { "HOME",      0, "/home/regression-tests" },
  +    { "MULTILINE", 0, "line1\nline2\n"         },
  +    { "NUMBER",    0, "+2"                     },
  +    { "NUMEXP",    0, "((16)%5)"               },
  +    { "OSTYPE",    0, "regression-os"          },
  +    { "TERM",      0, "regression-term"        },
  +    { NULL,        0, NULL                     }
  +};
  +
  +static var_rc_t lookup_cb(
       var_t *var, void *context,
       const char *varname, size_t name_len, int idx,
       const char **data, size_t *data_len,
  @@ -125,32 +113,67 @@
       return VAR_ERR_UNDEFINED_VARIABLE;
   }
   
  -struct test_case {
  -    const char *input;
  -    const char *expected;
  -};
  +/*
  +**
  +**  ==== OPERATION CALLBACK ====
  +**
  +*/
   
  -int main(int argc, char **argv)
  +static var_rc_t 
  +operate_cb(
  +    var_t *var, void *ctx,
  +    const char  *op_ptr, size_t op_len,
  +    const char  *arg_ptr, size_t arg_len,
  +    const char  *val_ptr, size_t val_len,
  +    char **out_ptr, size_t *out_len, size_t *out_size)
   {
  -    const struct variable vars[] = {
  -        { "ARRAY",     0, "entry0" },
  -        { "ARRAY",     1, "entry1" },
  -        { "ARRAY",     2, "entry2" },
  -        { "ARRAY",     3, "entry3" },
  -        { "BAR",       0, "type" },
  -        { "EMPTY",     0, "" },
  -        { "FOO",       0, "os" },
  -        { "HEINZ",     0, "heinz0" },
  -        { "HEINZ",     1, "heinz1" },
  -        { "HOME",      0, "/home/regression-tests" },
  -        { "MULTILINE", 0, "line1\nline2\n" },
  -        { "NUMBER",    0, "+2" },
  -        { "NUMEXP",    0, "((16)%5)" },
  -        { "OSTYPE",    0, "regression-os" },
  -        { "TERM",      0, "regression-term" },
  -        { NULL,        0, NULL }
  -        };
  +    int i;
   
  +    if (val_ptr == NULL) {
  +        *out_ptr = "";
  +        *out_len = 0;
  +        *out_size = 0;
  +        return VAR_OK;
  +    }
  +    if (op_len == 6 && strncmp(op_ptr, "return", 6) == 0) {
  +        *out_ptr = malloc(arg_len);
  +        *out_len = arg_len;
  +        *out_size = arg_len;
  +        memcpy(*out_ptr, arg_ptr, arg_len);
  +        return VAR_OK;
  +    }
  +    else if (op_len == 5 && strncmp(op_ptr, "upper", 5) == 0) {
  +        *out_ptr = malloc(val_len);
  +        *out_len = val_len;
  +        *out_size = val_len;
  +        for (i = 0; i < val_len; i++)
  +            (*out_ptr)[i] = (char)toupper((int)(val_ptr[i]));
  +        return VAR_OK;
  +    }
  +    else if (op_len == 5 && strncmp(op_ptr, "lower", 5) == 0) {
  +        *out_ptr = malloc(val_len);
  +        *out_len = val_len;
  +        *out_size = val_len;
  +        for (i = 0; i < val_len; i++)
  +            (*out_ptr)[i] = (char)tolower((int)(val_ptr[i]));
  +        return VAR_OK;
  +    }
  +    else 
  +        return VAR_ERR_UNDEFINED_OPERATION;
  +}
  +
  +/*
  +**
  +**  ==== TEST CASES ====
  +**
  +*/
  +
  +TS_TEST(test_expand)
  +{
  +    struct test_case {
  +        const char *input;
  +        const char *expected;
  +    };
       const struct test_case tests[] = {
           { "${HOME}${!!}",                 "/home/regression-tests${!!}"                    },
           { "$HOME",                        "/home/regression-tests"                         },
  @@ -225,26 +248,11 @@
           { "${HOME:%upper}",               "/HOME/REGRESSION-TESTS"                         },
           { "${HOME:%upper:%lower}",        "/home/regression-tests"                         },
           { "${EMPTY:%return($HOME)}",      "/home/regression-tests"                         },
  -        {
  -        "[${ARRAY}:${ARRAY[#]}-]",
  -        "entry0:entry0-entry0:entry1-entry0:entry2-entry0:entry3-"
  -        },
  -        {
  -        "[${HEINZ[#]}:${ARRAY[#]}-]",
  -        "heinz0:entry0-heinz1:entry1-:entry2-:entry3-"
  -        },
  -        {
  -        "[${HEINZ[#]}:[${ARRAY[#]}] ]",
  -        "heinz0:entry0entry1entry2entry3 heinz1:entry0entry1entry2entry3 "
  -        },
  -        {
  -        "[${HEINZ[#]}: [${ARRAY[#]}${ARRAY[#+1]:+, }]${HEINZ[#+1]:+; }]",
  -        "heinz0: entry0, entry1, entry2, entry3; heinz1: entry0, entry1, entry2, entry3"
  -        },
  -        {
  -        "[${ARRAY[#]}:[${ARRAY[#]},]{1,2,} ]{0,2,}",
  -        "entry0:entry1,entry3, entry2:entry1,entry3, "
  -        },
  +        { "[${ARRAY}:${ARRAY[#]}-]",      "entry0:entry0-entry0:entry1-entry0:entry2-entry0:entry3-" },
  +        { "[${HEINZ[#]}:${ARRAY[#]}-]",   "heinz0:entry0-heinz1:entry1-:entry2-:entry3-" }, 
  +        { "[${HEINZ[#]}:[${ARRAY[#]}] ]", "heinz0:entry0entry1entry2entry3 heinz1:entry0entry1entry2entry3 " },
  +        { "[${HEINZ[#]}: [${ARRAY[#]}${ARRAY[#+1]:+, }]${HEINZ[#+1]:+; }]", "heinz0: entry0, entry1, entry2, entry3; heinz1: entry0, entry1, entry2, entry3" },
  +        { "[${ARRAY[#]}:[${ARRAY[#]},]{1,2,} ]{0,2,}", "entry0:entry1,entry3, entry2:entry1,entry3, " },
       };
       char *tmp;
       size_t tmp_len;
  @@ -254,85 +262,133 @@
       var_t *var;
       char *err;
   
  +    ts_test_check(TS_CTX, "create environment");
       if ((rc = var_create(&var)) != VAR_OK) {
           var_strerror(NULL, rc, &err);
  -        printf("unable to create variable expansion context: %s (%d)\n", err, rc);
  -        return 1;
  +        ts_test_fail(TS_CTX, "var_create: %s (%d)", err, rc);
  +        return;
       }
  -    if ((rc = var_config(var, VAR_CONFIG_CB_VALUE, var_lookup, vars)) != VAR_OK) {
  +    if ((rc = var_config(var, VAR_CONFIG_CB_VALUE, lookup_cb, lookup_vars)) != VAR_OK) {
           var_strerror(NULL, rc, &err);
  -        printf("unable to configure variable expansion context: %s (%d)\n", err, rc);
  -        return 1;
  +        ts_test_fail(TS_CTX, "var_config: %s (%d)", err, rc);
  +        return;
       }
  -    if ((rc = var_config(var, VAR_CONFIG_CB_OPERATION, var_operation, NULL)) != VAR_OK) {
  +    if ((rc = var_config(var, VAR_CONFIG_CB_OPERATION, operate_cb, NULL)) != VAR_OK) {
           var_strerror(NULL, rc, &err);
  -        printf("unable to configure variable expansion context: %s (%d)\n", err, rc);
  -        return 1;
  +        ts_test_fail(TS_CTX, "var_config: %s (%d)", err, rc);
  +        return;
       }
   
  -    for (i = 0; i < sizeof(tests)/sizeof(struct test_case); ++i) {
  -        printf("Test case #%02d: Original input is '%s'.\n", i, tests[i].input);
  -        rc = var_unescape(var, tests[i].input, strlen(tests[i].input), buffer, sizeof(buffer), 0);
  +    for (i = 0; i < sizeof(tests)/sizeof(struct test_case); i++) {
  +        ts_test_check(TS_CTX, "expansion (#%d): raw input \"%s\"", i, tests[i].input);
  +        rc = var_unescape(var, tests[i].input, strlen(tests[i].input), 
  +                          buffer, sizeof(buffer), 0);
           if (rc != VAR_OK) {
               var_strerror(var, rc, &err);
  -            printf("Test case #%02d: var_unescape() failed: %s (%d)\n", i, err, rc);
  -            return 1;
  +            ts_test_fail(TS_CTX, "var_unescape: %s (%d)", err, rc);
  +            continue;
           }
  -        printf("Test case #%02d: Unescaped input is '%s'.\n", i, buffer);
  +        ts_test_check(TS_CTX, "expansion (#%d): unescaped input \"%s\"", i, buffer);
           rc = var_expand(var, buffer, strlen(buffer), &tmp, &tmp_len, 0);
           if (rc != VAR_OK) {
               var_strerror(var, rc, &err);
  -            printf("Test case #%02d: var_expand() failed: %s (%d).\n", i, err, rc);
  -            return 1;
  +            ts_test_fail(TS_CTX, "var_expand: %s (%d)", err, rc);
  +            continue;
           }
  -        printf("Test case #%02d: Expanded output is '%s'.\n", i, tmp);
  +        ts_test_check(TS_CTX, "expansion (#%d): expanded output \"%s\"", i, tmp);
           if (   tmp_len != strlen(tests[i].expected)
  -            || tmp == NULL
               || memcmp(tests[i].expected, tmp, tmp_len) != 0) {
  -            printf("Test case #%02d: Expected result '%s' but got '%s'.\n",
  -                   i, tests[i].expected, tmp);
  -            return 1;
  +            ts_test_fail(TS_CTX, "expected \"%s\", got \"%s\"", tests[i].expected, tmp);
  +            free(tmp);
  +            continue;
           }
           free(tmp);
       }
   
  -    fprintf(stderr, "Test case: formatting \"foo\"\n");
  -    if ((rc = var_format(var, &tmp, 1, "foo")) != VAR_OK) {
  -        var_strerror(var, rc, &err);
  -        fprintf(stderr, "Formatting failed: %s (%d)\n", err, rc);
  -        return 1;
  +    var_destroy(var);
  +
  +    return;
  +}
  +
  +TS_TEST(test_format)
  +{
  +    var_rc_t rc;
  +    var_t *var;
  +    char *err;
  +    char *fmt;
  +    char *exp;
  +    char *got;
  +
  +    ts_test_check(TS_CTX, "create environment");
  +    if ((rc = var_create(&var)) != VAR_OK) {
  +        var_strerror(NULL, rc, &err);
  +        ts_test_fail(TS_CTX, "var_create: %s (%d)", err, rc);
  +        return;
       }
  -    if (strcmp(tmp, "foo") != 0) {
  -        fprintf(stderr, "Formatting failed: expected \"foo\", got \"%s\"\n", tmp);
  -        return 1;
  +    if ((rc = var_config(var, VAR_CONFIG_CB_VALUE, lookup_cb, lookup_vars)) != VAR_OK) {
  +        var_strerror(NULL, rc, &err);
  +        ts_test_fail(TS_CTX, "var_config: %s (%d)", err, rc);
  +        return;
       }
  -    free(tmp);
   
  -    fprintf(stderr, "Test case: formatting \"foo<bar><123><x>\"\n");
  -    if ((rc = var_format(var, &tmp, 1, "foo<%s><%d><%c>", "bar", 123, 'x')) != VAR_OK) {
  +    /* check trivial formatting */
  +    fmt = "foo";
  +    exp = "foo";
  +    ts_test_check(TS_CTX, "formatting \"%s\"", fmt);
  +    if ((rc = var_format(var, &got, 1, fmt)) != VAR_OK) {
           var_strerror(var, rc, &err);
  -        fprintf(stderr, "Formatting failed: %s (%d)\n", err, rc);
  -        return 1;
  +        ts_test_fail(TS_CTX, "var_format: %s (%d)", err, rc);
  +        return;
       }
  -    if (strcmp(tmp, "foo<bar><123><x>") != 0) {
  -        fprintf(stderr, "Formatting failed: expected \"foo<bar><123><x>\", got \"%s\"\n", tmp);
  -        return 1;
  +    if (strcmp(got, exp) != 0) {
  +        ts_test_fail(TS_CTX, "var_format: expected \"%s\", got \"%s\"\n", exp, got);
  +        return;
  +    }
  +    free(got);
  +
  +    /* check real formatting */
  +    fmt = "foo<%s><%d><%c>quux";
  +    exp = "foo<bar><123><x>quux";
  +    ts_test_check(TS_CTX, "formatting \"%s\"", fmt);
  +    if ((rc = var_format(var, &got, 1, fmt, "bar", 123, 'x')) != VAR_OK) {
  +        var_strerror(var, rc, &err);
  +        ts_test_fail(TS_CTX, "var_format: %s (%d)", err, rc);
  +        return;
       }
  -    free(tmp);
  -
  -    fprintf(stderr, "Test case: formatting \"foo${ARRAY[1]}bar\"\n");
  -    if ((rc = var_format(var, &tmp, 1, "foo${ARRAY[%d]}bar", 1)) != VAR_OK) {
  +    if (strcmp(got, exp) != 0) {
  +        ts_test_fail(TS_CTX, "var_format: expected \"%s\", got \"%s\"\n", exp, got);
  +        return;
  +    }
  +    free(got);
  +
  +    /* check combined formatting and expansion */
  +    fmt = "foo<${ARRAY[%d]}>bar";
  +    exp = "foo<entry1>bar";
  +    ts_test_check(TS_CTX, "formatting \"%s\"", fmt);
  +    if ((rc = var_format(var, &got, 1, fmt, 1)) != VAR_OK) {
           var_strerror(var, rc, &err);
  -        fprintf(stderr, "Formatting failed: %s (%d)\n", err, rc);
  -        return 1;
  +        ts_test_fail(TS_CTX, "var_format: %s (%d)", err, rc);
  +        return;
       }
  -    if (strcmp(tmp, "fooentry1bar") != 0) {
  -        fprintf(stderr, "Formatting failed: expected \"fooentry1bar\", got \"%s\"\n", tmp);
  -        return 1;
  +    if (strcmp(got, exp) != 0) {
  +        ts_test_fail(TS_CTX, "var_format: expected \"%s\", got \"%s\"\n", exp, got);
  +        return;
       }
  -    free(tmp);
  +    free(got);
   
       var_destroy(var);
  -    return 0;
  +}
  +
  +int main(int argc, char *argv[])
  +{
  +    ts_suite_t *ts;
  +    int n;
  +
  +    ts = ts_suite_new("OSSP var (Variable Expansion)");
  +    ts_suite_test(ts, test_expand,  "expansion");
  +    ts_suite_test(ts, test_format,  "formatting");
  +    n = ts_suite_run(ts);
  +    ts_suite_free(ts);
  +    return n;
   }
   

From ossp-cvs-owner@ossp.org  Thu Mar  7 15:59:15 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D3B6A7642B; Thu,  7 Mar 2002 15:59:14 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var TODO
Message-Id: <20020307145914.D3B6A7642B@mail.ossp.org>
Date: Thu,  7 Mar 2002 15:59:14 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   07-Mar-2002 15:59:14
  Branch: HEAD                             Handle: 2002030714591400

  Modified files:
    ossp-pkg/var            TODO

  Log:
    remember issue

  Summary:
    Revision    Changes     Path
    1.30        +2  -0      ossp-pkg/var/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/var/TODO
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 TODO
  --- ossp-pkg/var/TODO	7 Mar 2002 12:19:46 -0000	1.29
  +++ ossp-pkg/var/TODO	7 Mar 2002 14:59:14 -0000	1.30
  @@ -2,3 +2,5 @@
     OSSP var
     ========
   
  +  - there are memory leaks according to Dmalloc!
  +

From ossp-cvs-owner@ossp.org  Thu Mar  7 16:01:30 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BDCB17642B; Thu,  7 Mar 2002 16:01:30 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex 00TODO
Message-Id: <20020307150130.BDCB17642B@mail.ossp.org>
Date: Thu,  7 Mar 2002 16:01:30 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   07-Mar-2002 16:01:30
  Branch: HEAD                             Handle: 2002030715013000

  Modified files:
    ossp-pkg/ex             00TODO

  Log:
    add Thomas' idea

  Summary:
    Revision    Changes     Path
    1.2         +25 -0      ossp-pkg/ex/00TODO
  ____________________________________________________________________________

  Index: ossp-pkg/ex/00TODO
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 00TODO
  --- ossp-pkg/ex/00TODO	14 Feb 2002 15:56:04 -0000	1.1
  +++ ossp-pkg/ex/00TODO	7 Mar 2002 15:01:30 -0000	1.2
  @@ -1,4 +1,29 @@
   
  +Idea: deferred exceptions:
  +o ex_defer BLOCK
  +o if (ex_deferred) ...
  +
  +to avoid having to initialize every variable in this context:
  +
  +char *cp1;
  +char *cp2;
  +char *cp3;
  +ex_try {
  +    ex_defer {
  +        cp1 = mymalloc(...);
  +        cp2 = mymalloc(...);
  +        cp3 = mymalloc(...);
  +    }
  +}
  +ex_cleanup {
  +    if (cp1 != NULL)
  +        free(cp1);
  +    if (cp2 != NULL)
  +        free(cp2);
  +    if (cp3 != NULL)
  +        free(cp3);
  +}
  +
   **** IMPROVE DOCUMENTATION ****
   
   /* BAD EXAMPLE */

From ossp-cvs-owner@ossp.org  Thu Mar  7 17:03:57 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C77127642B; Thu,  7 Mar 2002 17:03:56 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_option.c lmtp2nntp_option.h
Message-Id: <20020307160356.C77127642B@mail.ossp.org>
Date: Thu,  7 Mar 2002 17:03:56 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   07-Mar-2002 17:03:56
  Branch: HEAD                             Handle: 2002030716035600

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_option.c lmtp2nntp_option.h

  Log:
    cleanup; better use of lib_ex; fight fixmes and resource leakage; cosmetics;
    flush;

  Summary:
    Revision    Changes     Path
    1.17        +212 -225   ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
    1.7         +5  -4      ossp-pkg/lmtp2nntp/lmtp2nntp_option.h
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 lmtp2nntp_option.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	6 Mar 2002 14:25:39 -0000	1.16
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	7 Mar 2002 16:03:56 -0000	1.17
  @@ -127,142 +127,127 @@
   }
   
   
  -lmtp2nntp_option_rc_t option_register(lmtp2nntp_option_t *o, char *longname, char shortname, optiontype_t type, char *def, char *descrip, char *argdescrip, optionloop_cb_t *cb, char *cbctx)
  +static void option_register(lmtp2nntp_option_t *o, char *longname, char shortname, optiontype_t type, char *def, char *descrip, char *argdescrip, optionloop_cb_t *cb, char *cbctx)
   {
  -    lmtp2nntp_option_rc_t rc = VAL_OK;
  -    optionval_t *oc;
  +    volatile struct {
  +        optionval_t *oc;
  +    } v;
  +    ex_t ex;
       
  -    //printf("DEBUG: enter option_register(%.8lx, \"%s\", '%c', %d, %.8lx, %.8lx, \"%s\", \"%s\")\n", (long)o, longname, shortname, type, (long)cb, (long)cbctx, descrip, argdescrip);
  -
  -    if (o == NULL || longname == NULL)
  -        return OPTION_ERR_ARG;
  -
  -    /* create a optionval_t structure */
  -    if ((oc = (optionval_t *)malloc(sizeof(optionval_t))) == NULL)
  -        return OPTION_ERR_MEM;
  -    //printf("DEBUG: optionval_t structure malloc'ed\n");
  -    oc->next         = NULL;
  -    oc->parent       = o;
  -    oc->longname     = strdup(longname);
  -    oc->shortname    = shortname;
  -    oc->descrip      = descrip == NULL ? NULL : strdup(descrip);
  -    oc->argdescrip   = argdescrip == NULL ? NULL : strdup(argdescrip);
  -    oc->type         = type;
  -    oc->cb           = cb;
  -    oc->cbctx        = cbctx;
  -    oc->val          = o->vo;
  -    oc->number       = o->pi + 1; /* 0 is a reserved val in popt, so offset 1 */
  -    switch (type) {
  -        case OPT_FLAG:   oc->data.f       = 0;
  -            break;
  -        case OPT_SINGLE: oc->data.s       = def == NULL ? NULL : strdup(def);
  -            break;
  -        case OPT_MULTI:  oc->data.m       = NULL;
  -            break;
  -    }
  -    oc->ndata        = (type == OPT_SINGLE && def != NULL) ? 1 : 0;
  -    if (   (                                            oc->longname   == NULL)
  -        || (                      descrip    != NULL && oc->descrip    == NULL)
  -        || (                      argdescrip != NULL && oc->argdescrip == NULL)
  -        || (type == OPT_SINGLE && def        != NULL && oc->data.s     == NULL)
  -          )
  -        CU(OPTION_ERR_MEM);
  -
  -    //printf("DEBUG: optionval_t structure created, oc at %.8lx is %.8lx\n", (long)&oc, (long)oc);
  -
  -    /* feed lib_val */
  -    if (val_reg(oc->val, oc->longname, VAL_TYPE_PTR, oc->descrip, NULL) != VAL_OK)
  -        CU(OPTION_ERR_USE);
  -    if (val_set(oc->val, oc->longname, oc) != VAL_OK)
  -        CU(OPTION_ERR_USE);
  -    //printf("DEBUG: val_reg'ed\n");
  -
  -#if 0
  -    {
  -        optionval_t *ov = 0x12345678;
  +    v.oc = NULL;
  +    try {
  +        if (o == NULL || longname == NULL)
  +            throw(option_register, o, OPTION_ERR_ARG);
   
  -        if (val_get(oc->val, oc->longname, &ov) == VAL_OK)
  -            printf("DEBUG: oc->val %.8lx %s in %.8lx d = \"s\"\n", (long)oc->val, oc->longname, (long)(oc));
  -        if (val_get(o->vo,   oc->longname, &ov) == VAL_OK)
  -            printf("DEBUG: o->vo   %.8lx %s in %.8lx d = \"s\"\n", (long)o->vo,   oc->longname, (long)(ov));
  -        printf("DEBUG: val_get'ed\n");
  -    }
  -#endif
  -
  -    /* feed lib_popt */
  -    //printf("DEBUG: o->pi=%d, o->pn=%d\n", o->pi, o->pn);
  -    if (o->pi >= (o->pn-2)) { /* correction by two here, in malloc and realloc is for AUTOHELP and TABLEEND */
  -        if (o->pt == NULL) {
  -            //printf("DEBUG: malloc\n");
  -            o->pt = (struct popt_option *)malloc(                (1 + 2) * sizeof(struct popt_option));
  -            o->pn = 1;
  +        /* create a optionval_t structure and initialize exception-uncritical data */
  +        v.oc = (optionval_t *)mallocex(sizeof(optionval_t));
  +        v.oc->next       = NULL;
  +        v.oc->parent     = o;
  +        v.oc->longname   = NULL;
  +        v.oc->shortname  = shortname;
  +        v.oc->descrip    = NULL;
  +        v.oc->argdescrip = NULL;
  +        v.oc->type       = type;
  +        v.oc->cb         = cb;
  +        v.oc->cbctx      = cbctx;
  +        v.oc->val        = o->vo;
  +        v.oc->number     = o->pi + 1; /* 0 is a reserved val in popt, so offset 1 */
  +        switch (type) {
  +            case OPT_FLAG:   v.oc->data.f = 0;    break;
  +            case OPT_SINGLE: v.oc->data.s = NULL; break;
  +            case OPT_MULTI:  v.oc->data.m = NULL; break;
  +        }
  +        v.oc->ndata      = 0;
  +        /* preinitialization complete, now initialize exception-critical data*/
  +        v.oc->longname = strdupex(longname);
  +        if (descrip != NULL)
  +            v.oc->descrip = strdupex(descrip);
  +        if (argdescrip != NULL)
  +            v.oc->argdescrip = strdupex(argdescrip);
  +        if (type == OPT_SINGLE && def != NULL) {
  +            v.oc->data.s = strdupex(def);
  +            v.oc->ndata = 1;
  +        }
  +
  +        /* feed lib_val */
  +        if (val_reg(v.oc->val, v.oc->longname, VAL_TYPE_PTR, v.oc->descrip, NULL) != VAL_OK)
  +            throw(option_register, o, OPTION_ERR_USE);
  +        if (val_set(v.oc->val, v.oc->longname, v.oc) != VAL_OK)
  +            throw(option_register, o, OPTION_ERR_USE);
  +
  +        /* feed lib_popt */
  +        if (o->pi >= (o->pn-2)) { /* correction by two here, in mallv.oc and reallv.oc is for AUTOHELP and TABLEEND */
  +            if (o->pt == NULL) {
  +                o->pt = (struct popt_option *)mallocex(                (1 + 2) * sizeof(struct popt_option));
  +                o->pn = 1;
  +            }
  +            else {
  +                o->pt = (struct popt_option *)reallocex(o->pt, (o->pn * 2 + 2) * sizeof(struct popt_option));
  +                o->pn = o->pn * 2;
  +            }
  +        }
  +        o->pt[o->pi].longName   = v.oc->longname;
  +        o->pt[o->pi].shortName  = v.oc->shortname;
  +        o->pt[o->pi].argInfo    = v.oc->type == OPT_FLAG ? POPT_ARG_NONE : POPT_ARG_STRING;
  +        o->pt[o->pi].arg        = NULL;
  +        o->pt[o->pi].val        = v.oc->number;
  +        o->pt[o->pi].descrip    = v.oc->descrip;
  +        o->pt[o->pi].argDescrip = v.oc->argdescrip;
  +
  +        /* append POPT_AUTOHELP */
  +        o->pt[o->pi+1].longName   = NULL;
  +        o->pt[o->pi+1].shortName  = '\0';
  +        o->pt[o->pi+1].argInfo    = POPT_ARG_INCLUDE_TABLE;
  +        o->pt[o->pi+1].arg        = popt_helpoptions;
  +        o->pt[o->pi+1].val        = 0;
  +        o->pt[o->pi+1].descrip    = "Help options:";
  +        o->pt[o->pi+1].argDescrip = NULL;
  +
  +        /* append POPT_TABLEEND */
  +        o->pt[o->pi+2].longName   = NULL;
  +        o->pt[o->pi+2].shortName  = '\0';
  +        o->pt[o->pi+2].argInfo    = 0;
  +        o->pt[o->pi+2].arg        = 0;
  +        o->pt[o->pi+2].val        = 0;
  +        o->pt[o->pi+2].descrip    = NULL;
  +        o->pt[o->pi+2].argDescrip = NULL;
  +        o->pi++;
  +
  +        /* link in this new optionval_t structure */
  +        if (o->first == NULL) {
  +            o->first = v.oc;
  +            o->last  = v.oc;
           }
           else {
  -            //printf("DEBUG: realloc\n");
  -            o->pt = (struct popt_option *)realloc(o->pt, (o->pn * 2 + 2) * sizeof(struct popt_option));
  -            o->pn = o->pn * 2;
  -        }
  -    }
  -    if (o->pt == NULL)
  -        CU(OPTION_ERR_MEM);
  -    o->pt[o->pi].longName   = oc->longname;
  -    o->pt[o->pi].shortName  = oc->shortname;
  -    o->pt[o->pi].argInfo    = oc->type == OPT_FLAG ? POPT_ARG_NONE : POPT_ARG_STRING;
  -    o->pt[o->pi].arg        = NULL;
  -    o->pt[o->pi].val        = oc->number;
  -    o->pt[o->pi].descrip    = oc->descrip;
  -    o->pt[o->pi].argDescrip = oc->argdescrip;
  -
  -    /* append POPT_AUTOHELP */
  -    o->pt[o->pi+1].longName   = NULL;
  -    o->pt[o->pi+1].shortName  = '\0';
  -    o->pt[o->pi+1].argInfo    = POPT_ARG_INCLUDE_TABLE;
  -    o->pt[o->pi+1].arg        = popt_helpoptions;
  -    o->pt[o->pi+1].val        = 0;
  -    o->pt[o->pi+1].descrip    = "Help options:";
  -    o->pt[o->pi+1].argDescrip = NULL;
  -
  -    /* append POPT_TABLEEND */
  -    o->pt[o->pi+2].longName   = NULL;
  -    o->pt[o->pi+2].shortName  = '\0';
  -    o->pt[o->pi+2].argInfo    = 0;
  -    o->pt[o->pi+2].arg        = 0;
  -    o->pt[o->pi+2].val        = 0;
  -    o->pt[o->pi+2].descrip    = NULL;
  -    o->pt[o->pi+2].argDescrip = NULL;
  -    o->pi++;
  -    //printf("DEBUG: popt'ed\n");
  -
  -    /* link in this new optionval_t structure */
  -    if (o->first == NULL) {
  -        o->first = oc;
  -        o->last  = oc;
  -    }
  -    else {
  -        o->last->next = oc; 
  -        o->last       = oc;
  +            o->last->next = v.oc; 
  +            o->last       = v.oc;
  +        }
       }
  -    //printf("DEBUG: linked\n");
  -
  -    return rc;
  -
  -    CUS:
  -    if (oc != NULL) {
  -        if (oc->argdescrip != NULL) free(oc->argdescrip);
  -        if (oc->descrip    != NULL) free(oc->descrip);
  -        if (oc->longname   != NULL) free(oc->longname);
  -        free(oc);
  +    catch(ex) {
  +        if (v.oc != NULL) {
  +            if (type == OPT_SINGLE && v.oc->data.s != NULL)
  +                free(v.oc->data.s);
  +            if (v.oc->argdescrip != NULL)
  +                free(v.oc->argdescrip);
  +            if (v.oc->descrip != NULL)
  +                free(v.oc->descrip);
  +            if (v.oc->longname != NULL)
  +                free(v.oc->longname);
  +            free(v.oc);
  +        }
  +        rethrow;
       }
  -    return rc;
  +    return;
   }
   
  +/* this public function catches all underlying exceptions and properly returns a code */
   lmtp2nntp_option_rc_t option_create(lmtp2nntp_option_t **op, val_t *parent)
   {
       ex_t ex;
   
       try {
  -        if (op == NULL)
  -            throw(option_create, NULL, OPTION_ERR_ARG);
  +        if (op == NULL || parent == NULL)
  +            return OPTION_ERR_ARG;
   
           (*op = (lmtp2nntp_option_t *)mallocex(sizeof(lmtp2nntp_option_t)));
           (*op)->first = NULL;
  @@ -273,10 +258,10 @@
           (*op)->pt = NULL;
   
           if (val_create(&((*op)->vo)) != VAL_OK)
  -            throw(option_create, NULL, OPTION_ERR_VAL);
  +            return OPTION_ERR_VAL;
   
           if (val_reg(parent, "option", VAL_TYPE_VAL, "option", (void *)&((*op)->vo)) != VAL_OK)
  -            throw(option_create, NULL, OPTION_ERR_VAL);
  +            return OPTION_ERR_VAL;
       }
       catch(ex) {
           if (*op != NULL) {
  @@ -284,7 +269,9 @@
                   val_unreg(parent, "option");
               free(*op);
           }
  -        rethrow;
  +        if (ex.ex_class == (void *)option_create)
  +            return (lmtp2nntp_option_rc_t)ex.ex_value;
  +        return OPTION_ERR_TRY;
       }
       return OPTION_OK;
   }
  @@ -296,14 +283,20 @@
       int i;
       char *cp;
       optionval_t *ocp;
  -    popt_context poptCon;   /* context for parsing command-line options */
  +    popt_context poptCon;
   
  +    /* internal function trusts args */
  +
  +    /* init lib_popt */
       poptCon = popt_getcontext(NULL, argc, (const char **)argv, o->pt, 0);
       popt_setotheroptionhelp(poptCon, "[OPTIONS]* [newsgroup ...]");
  +
  +    /* print usage if too few argv's */
       if (argc < 2) {
           popt_printusage(poptCon, stderr, 0);
  -        exit(1); //FIXME
  +        return OPTION_ERR_USE;
       }
  +    /* parse every option, continue when optarg missing or bad option found */
       while ((i = popt_getnextopt(poptCon)) >= 0 || i == POPT_ERROR_NOARG || i == POPT_ERROR_BADOPT) {
           if (i == POPT_ERROR_NOARG || i == POPT_ERROR_BADOPT) {
               fprintf(stderr, "ERROR: %s (%d) \"%s\"\n", popt_strerror(i), i, popt_badoption(poptCon, POPT_BADOPTION_NOALIAS));
  @@ -317,27 +310,41 @@
           }
       }
   
  +    /* create a "--newsgroup" argc/argv for every leftover argument */
       {
  -        int largc;
  -        char **largv;
  -        char *cpNew;
  -
  -        largv = (char **)mallocex((1 + 1) * sizeof(char **));
  -        largc = 0;
  -        largv[largc++] = "leftover";
  -        largv[largc] = NULL;
  -        while ((cp = (char *)popt_getarg(poptCon)) != NULL) {
  -            largv = (char **)reallocex(largv, (largc + 2) * sizeof(char **));
  -            largv[largc++] = "--newsgroup";
  -            largv[largc] = NULL;
  -            cpNew = strdupex(cp);
  -            largv[largc++] = cpNew;
  -            largv[largc] = NULL;
  +        ex_t ex;
  +        volatile struct {
  +            char **largv;
  +            } v;
  +
  +        try {
  +            int largc;
  +            char *cpNew;
  +
  +            v.largv = (char **)mallocex((1 + 1) * sizeof(char **));
  +            largc = 0;
  +            v.largv[largc++] = "leftover";
  +            v.largv[largc] = NULL;
  +            while ((cp = (char *)popt_getarg(poptCon)) != NULL) {
  +                v.largv = (char **)reallocex(v.largv, (largc + 2) * sizeof(char **));
  +                v.largv[largc++] = "--newsgroup";
  +                v.largv[largc] = NULL;
  +                cpNew = strdupex(cp);
  +                v.largv[largc++] = cpNew;
  +                v.largv[largc] = NULL;
  +            }
  +            if (largc > 1) {
  +                rv = option_parse_internal(o, largc, v.largv);
  +                if (rc == OPTION_OK)
  +                    rc = rv;
  +            }
           }
  -        if (largc > 1) {
  -            rv = option_parse_internal(o, largc, largv);
  -            if (rc == OPTION_OK)
  -                rc = rv;
  +        cleanup {
  +            if (v.largv != NULL)
  +                free(v.largv);
  +        }
  +        catch(ex) {
  +            rethrow;
           }
       }
       popt_freecontext(poptCon);
  @@ -346,12 +353,8 @@
   
   static lmtp2nntp_option_rc_t stdsyntax(optionval_t *oc, char *arg, char *cbctx)
   {
  -    //printf("DEBUG: enter stdsyntax %.8lx, \"%s\", \"%s\"\n", (long)oc, arg, cbctx);
  -
  -    //printf("DEBUG: oc->type=%d\n", oc->type);
       switch (oc->type) {
           case OPT_FLAG:
  -            //printf("DEBUG: flag   %20s = %s should match %s\n", oc->longname, arg, cbctx);
               if (arg != NULL || cbctx != NULL)
                   return OPTION_ERR_ARG;
               if (oc->ndata >= 1)
  @@ -360,25 +363,22 @@
               oc->ndata = 1;
               break;
           case OPT_SINGLE:
  -            //printf("DEBUG: single %20s = %s should match %s\n", oc->longname, arg, cbctx);
               if (arg == NULL)
                   return OPTION_ERR_ARG;
  -            /* use this if repeated overwriting definitions are not allowed
  -             *  if (oc->ndata >= 1 || oc->data.s != NULL)
  -             *      return OPTION_ERR_USE;
  -             */
  +        /*  add this if repeated overwriting definitions of single values are not allowed
  +         *  if (oc->ndata >= 1 || oc->data.s != NULL)
  +         *      return OPTION_ERR_USE;
  +         */
               if (cbctx != NULL)
                   if (str_parse(arg, cbctx) <= 0) {
                       fprintf(stderr, "ERROR: argument \"%s\" does NOT match syntax \"%s\"\n", arg, cbctx);
                       return OPTION_ERR_USE;
                   }
  -            //printf("DEBUG: \"%s\" does match \"%s\"\n", arg, cbctx);
               if ((oc->data.s = strdup(arg)) == NULL)
                       return OPTION_ERR_MEM;
               oc->ndata = 1;
               break;
           case OPT_MULTI:
  -            //printf("DEBUG: multi  %20s = %s should match %s\n", oc->longname, arg, cbctx);
               if (arg == NULL)
                   return OPTION_ERR_ARG;
               if (oc->ndata >= 1 && oc->data.m == NULL)
  @@ -388,34 +388,13 @@
                       fprintf(stderr, "ERROR: argument \"%s\" does NOT match syntax \"%s\"\n", arg, cbctx);
                       return OPTION_ERR_USE;
                   }
  -            //printf("DEBUG: \"%s\" does match \"%s\"\n", arg, cbctx);
  -            /* malloc/realloc                                 existing + this new + terminating NULL */
  -            if (oc->data.m == NULL) {
  -                //printf("DEBUG: before  malloc, oc->data.m = %.8lx - ", (long)oc->data.m);
  -                //printf("DEBUG: requesting %d bytes\n",         (        0 + 1 + 1) * sizeof(char **));
  -                if ((oc->data.m = (char **)malloc(             (        0 + 1 + 1) * sizeof(char **))) == NULL)
  -                    return OPTION_ERR_MEM;
  -                //printf("DEBUG: after   malloc, oc->data.m = %.8lx\n", (long)oc->data.m);
  -            }
  -            else {
  -                //printf("DEBUG: before realloc, oc->data.m = %.8lx\n", (long)oc->data.m);
  -                //printf("DEBUG: requesting %d bytes\n",         (oc->ndata + 1 + 1) * sizeof(char **));
  -                if ((oc->data.m = (char **)realloc(oc->data.m, (oc->ndata + 1 + 1) * sizeof(char **))) == NULL)
  -                    return OPTION_ERR_MEM;
  -                //printf("DEBUG: after  realloc, oc->data.m = %.8lx\n", (long)oc->data.m);
  -            }
  -            if ((oc->data.m[oc->ndata] = strdup(arg)) == NULL)
  -                    return OPTION_ERR_MEM;
  +            if (oc->data.m == NULL)                        /* existing + this new + terminating NULL */
  +                oc->data.m = (char **)mallocex(             (        0 + 1 + 1) * sizeof(char **));
  +            else
  +                oc->data.m = (char **)reallocex(oc->data.m, (oc->ndata + 1 + 1) * sizeof(char **));
  +            oc->data.m[oc->ndata] = strdupex(arg);
               oc->ndata++;
               oc->data.m[oc->ndata] = NULL;
  -#if 0
  -            {
  -                int i;
  -                printf("DEBUG: oc->ndata=%d\n", oc->ndata);
  -                for (i=0; i<=oc->ndata; i++)
  -                    printf("DEBUG: oc->data[%3d] at %.8lx points to  %.8lx = %s\n", i, (long)&oc->data.m[i], (long)oc->data.m[i], oc->data.m[i]);
  -            }
  -#endif
               break;
           default:
               return OPTION_ERR_ARG;
  @@ -431,13 +410,10 @@
       int argc = 0;
       char **argv = NULL;
   
  -    //printf("DEBUG: enter includeit %.8lx, \"%s\", \"%s\"\n", (long)oc, arg, cbctx);
  -
       if ((o = oc->parent) == NULL)
           return OPTION_ERR_USE;
   
       stdsyntax(oc, arg, cbctx);
  -    //printf("DEBUG: *** 1 *** file going to be read in now\n");
       {
           const char *filename = arg;
           struct stat sb;
  @@ -445,21 +421,24 @@
           ex_t ex;
   
           try {
  -            if (stat(filename, &sb) == -1) throw(0, 0, "stat");
  -            if ((cpBuf = (char *)malloc((size_t)sb.st_size + 1)) == NULL) throw(0, 0, "malloc");
  -            if ((fd = open(filename, O_RDONLY)) == -1) throw(0, 0, "open");
  -            if (read(fd, (void *)cpBuf, (size_t)sb.st_size) != (ssize_t)sb.st_size) throw(0, 0, "read");
  +            if (stat(filename, &sb) == -1)
  +                throw(includeit, oc, "stat");
  +            cpBuf = (char *)mallocex((size_t)sb.st_size + 1);
  +            if ((fd = open(filename, O_RDONLY)) == -1)
  +                throw(includeit, oc, "open");
  +            if (read(fd, (void *)cpBuf, (size_t)sb.st_size) != (ssize_t)sb.st_size)
  +                throw(includeit, oc, "read");
               cpBuf[(int)sb.st_size] = '\0';
           }
           cleanup {
               if (fd != -1) close(fd);
           }
           catch (ex) {
  -            fprintf(stderr, "ERROR: caught %s\n", ex.ex_value == NULL ? "N/A" : (char *)ex.ex_value);
  +            if (cpBuf != NULL)
  +                free((char *)cpBuf);
               rethrow;
           }
       }
  -    //printf("DEBUG: *** 2 *** file as it was just read in ***\n%s***\n", cpBuf);
   
       {
           char *cpI;  /* pointer to next character to be read */
  @@ -560,50 +539,58 @@
       return option_parse_internal(o, argc, argv);
   }
   
  +/* this public function catches all underlying exceptions and properly returns a code */
   lmtp2nntp_option_rc_t option_parse(lmtp2nntp_option_t *o, int argc, char **argv)
   {
  -    if (o == NULL)
  -        return OPTION_ERR_ARG;
  +    ex_t ex;
   
  -    (void)option_register(o, "childsmax",          'C', OPT_SINGLE,  "10",        "childs to spawn at max",            "childsmax",                  &stdsyntax, "m/\\d+/" ); //"m/[0-9]+/" );
  -    (void)option_register(o, "daemonize",          'D', OPT_FLAG,    NULL,        "detach from terminal",              NULL,                         &stdsyntax, NULL );
  -    (void)option_register(o, "kill",               'K', OPT_FLAG,    NULL,        "kill a previously run daemon",      NULL,                         &stdsyntax, NULL );
  -    (void)option_register(o, "pidfile",            'P', OPT_SINGLE,  NULL,        "file containing pid",               "pidfile",                    &stdsyntax, "m/.*/" );
  -    (void)option_register(o, "acl",                'a', OPT_MULTI,   NULL,        "LMTP server access control list",   "addr[/mask]",                &stdsyntax, "m/.*/" );
  -    (void)option_register(o, "bind",               'b', OPT_SINGLE,  NULL,        "LMTP server bind",                  "addr[:port]|-|path[:perms]", &stdsyntax, "m/.*/" );
  -    (void)option_register(o, "client",             'c', OPT_SINGLE,  NULL,        "NNTP client bind",                  "addr[:port]",                &stdsyntax, "m/.*/" );
  -    (void)option_register(o, "destination",        'd', OPT_MULTI,   NULL,        "NNTP client destination",           "addr[:port]",                &stdsyntax, "m/.*/" );
  -    (void)option_register(o, "groupmode",          'g', OPT_SINGLE,  "arg",       "arg|envelope|header",               "groupmode",                  &stdsyntax, "m/.*/" ); //"m/(arg|envelope|header)/" );
  -    (void)option_register(o, "headerrule",         'h', OPT_MULTI,   NULL,        "header rewriting rule",             "[pri]:[regex]:header:[val]", &stdsyntax, "m/^[0-9]*:.*:.+:.*$/" );
  -    (void)option_register(o, "include",            'i', OPT_MULTI,   NULL,        "configfile to include",             "configfile",                 &includeit, "m/.*/" );
  -    (void)option_register(o, "timeoutlmtp",        NUL, OPT_SINGLE,  NULL,        "LMTP server default timeout",       "sec",                        &stdsyntax, "m/.*/" );
  -    (void)option_register(o, "timeoutlmtpaccept",  NUL, OPT_SINGLE,  "0",         "LMTP server accept timeout",        "sec",                        &stdsyntax, "m/.*/" );
  -    (void)option_register(o, "timeoutlmtpread",    NUL, OPT_SINGLE,  "10",        "LMTP server read timeout",          "sec",                        &stdsyntax, "m/.*/" );
  -    (void)option_register(o, "timeoutlmtpwrite",   NUL, OPT_SINGLE,  "10",        "LMTP server write timeout",         "sec",                        &stdsyntax, "m/.*/" );
  -    (void)option_register(o, "timeoutnntp",        NUL, OPT_SINGLE,  NULL,        "NNTP client default timeout",       "sec",                        &stdsyntax, "m/.*/" );
  -    (void)option_register(o, "timeoutnntpconnect", NUL, OPT_SINGLE,  "360",       "NNTP client connect timeout",       "sec",                        &stdsyntax, "m/.*/" );
  -    (void)option_register(o, "timeoutnntpread",    NUL, OPT_SINGLE,  "60",        "NNTP client read timeout",          "sec",                        &stdsyntax, "m/.*/" );
  -    (void)option_register(o, "timeoutnntpwrite",   NUL, OPT_SINGLE,  "60",        "NNTP client write timeout",         "sec",                        &stdsyntax, "m/.*/" );
  -    (void)option_register(o, "l2spec",             'l', OPT_SINGLE,  NULL,        "L2 channel tree specification",     "l2spec",                     &stdsyntax, "m/.*/" );
  -    (void)option_register(o, "mailfrom",           'm', OPT_SINGLE,  NULL,        "mail from envelope restriction",    "regex",                      &stdsyntax, "m/.*/" );
  -    (void)option_register(o, "nodename",           'n', OPT_SINGLE,  NULL,        "nodename",                          "name",                       &stdsyntax, "m/.*/" );
  -    (void)option_register(o, "operationmode",      'o', OPT_SINGLE,  "553/5.7.1", "fakestatus or operationmode",       "abc/a.d.e|post|feed",        &stdsyntax, "m/.*/" ); //"m/([0-9]{3}\\/[0-9]\\.[0-9]\\.[0-9]|post|feed)/" ); /* 553 = Requested action not taken: mailbox name not allowed, 5.7.1 =  Delivery not authorized, message refused */
  -    (void)option_register(o, "restrictheader",     'r', OPT_SINGLE,  NULL,        "header restriction",                "regex",                      &stdsyntax, "m/.*/" );
  -    (void)option_register(o, "size",               's', OPT_SINGLE,  "8388608",   "maximum message size",              "bytes",                      &stdsyntax, "m/.*/" ); //"m/[0-9]+/" );
  -    (void)option_register(o, "testfile",           't', OPT_MULTI,   NULL,        "testfile for headerrule",           "testfile",                   &stdsyntax, "m/.*/" );
  -    (void)option_register(o, "user",               'u', OPT_SINGLE,  NULL,        "user",                              "uid|name",                   &stdsyntax, "m/.*/" );
  -    (void)option_register(o, "version",            'v', OPT_FLAG,    NULL,        "print version",                     NULL,                         &stdsyntax, NULL );
  -    (void)option_register(o, "newsgroup",          NUL, OPT_MULTI,   NULL,        "article destination",               "newsgroup",                  &stdsyntax, "m/.*/" );
  +    if (o == NULL || argc < 0 || argv == NULL)
  +        return OPTION_ERR_ARG;
   
  +    try {
  +        option_register(o, "childsmax",          'C', OPT_SINGLE,  "10",        "childs to spawn at max",            "childsmax",                  &stdsyntax, "m/\\d+/" ); //"m/[0-9]+/" );
  +        option_register(o, "daemonize",          'D', OPT_FLAG,    NULL,        "detach from terminal",              NULL,                         &stdsyntax, NULL );
  +        option_register(o, "kill",               'K', OPT_FLAG,    NULL,        "kill a previously run daemon",      NULL,                         &stdsyntax, NULL );
  +        option_register(o, "pidfile",            'P', OPT_SINGLE,  NULL,        "file containing pid",               "pidfile",                    &stdsyntax, "m/.*/" );
  +        option_register(o, "acl",                'a', OPT_MULTI,   NULL,        "LMTP server access control list",   "addr[/mask]",                &stdsyntax, "m/.*/" );
  +        option_register(o, "bind",               'b', OPT_SINGLE,  NULL,        "LMTP server bind",                  "addr[:port]|-|path[:perms]", &stdsyntax, "m/.*/" );
  +        option_register(o, "client",             'c', OPT_SINGLE,  NULL,        "NNTP client bind",                  "addr[:port]",                &stdsyntax, "m/.*/" );
  +        option_register(o, "destination",        'd', OPT_MULTI,   NULL,        "NNTP client destination",           "addr[:port]",                &stdsyntax, "m/.*/" );
  +        option_register(o, "groupmode",          'g', OPT_SINGLE,  "arg",       "arg|envelope|header",               "groupmode",                  &stdsyntax, "m/.*/" ); //"m/(arg|envelope|header)/" );
  +        option_register(o, "headerrule",         'h', OPT_MULTI,   NULL,        "header rewriting rule",             "[pri]:[regex]:header:[val]", &stdsyntax, "m/^[0-9]*:.*:.+:.*$/" );
  +        option_register(o, "include",            'i', OPT_MULTI,   NULL,        "configfile to include",             "configfile",                 &includeit, "m/.*/" );
  +        option_register(o, "timeoutlmtp",        NUL, OPT_SINGLE,  NULL,        "LMTP server default timeout",       "sec",                        &stdsyntax, "m/.*/" );
  +        option_register(o, "timeoutlmtpaccept",  NUL, OPT_SINGLE,  "0",         "LMTP server accept timeout",        "sec",                        &stdsyntax, "m/.*/" );
  +        option_register(o, "timeoutlmtpread",    NUL, OPT_SINGLE,  "10",        "LMTP server read timeout",          "sec",                        &stdsyntax, "m/.*/" );
  +        option_register(o, "timeoutlmtpwrite",   NUL, OPT_SINGLE,  "10",        "LMTP server write timeout",         "sec",                        &stdsyntax, "m/.*/" );
  +        option_register(o, "timeoutnntp",        NUL, OPT_SINGLE,  NULL,        "NNTP client default timeout",       "sec",                        &stdsyntax, "m/.*/" );
  +        option_register(o, "timeoutnntpconnect", NUL, OPT_SINGLE,  "360",       "NNTP client connect timeout",       "sec",                        &stdsyntax, "m/.*/" );
  +        option_register(o, "timeoutnntpread",    NUL, OPT_SINGLE,  "60",        "NNTP client read timeout",          "sec",                        &stdsyntax, "m/.*/" );
  +        option_register(o, "timeoutnntpwrite",   NUL, OPT_SINGLE,  "60",        "NNTP client write timeout",         "sec",                        &stdsyntax, "m/.*/" );
  +        option_register(o, "l2spec",             'l', OPT_SINGLE,  NULL,        "L2 channel tree specification",     "l2spec",                     &stdsyntax, "m/.*/" );
  +        option_register(o, "mailfrom",           'm', OPT_SINGLE,  NULL,        "mail from envelope restriction",    "regex",                      &stdsyntax, "m/.*/" );
  +        option_register(o, "nodename",           'n', OPT_SINGLE,  NULL,        "nodename",                          "name",                       &stdsyntax, "m/.*/" );
  +        option_register(o, "operationmode",      'o', OPT_SINGLE,  "553/5.7.1", "fakestatus or operationmode",       "abc/a.d.e|post|feed",        &stdsyntax, "m/.*/" ); //"m/([0-9]{3}\\/[0-9]\\.[0-9]\\.[0-9]|post|feed)/" ); /* 553 = Requested action not taken: mailbox name not allowed, 5.7.1 =  Delivery not authorized, message refused */
  +        option_register(o, "restrictheader",     'r', OPT_SINGLE,  NULL,        "header restriction",                "regex",                      &stdsyntax, "m/.*/" );
  +        option_register(o, "size",               's', OPT_SINGLE,  "8388608",   "maximum message size",              "bytes",                      &stdsyntax, "m/.*/" ); //"m/[0-9]+/" );
  +        option_register(o, "testfile",           't', OPT_MULTI,   NULL,        "testfile for headerrule",           "testfile",                   &stdsyntax, "m/.*/" );
  +        option_register(o, "user",               'u', OPT_SINGLE,  NULL,        "user",                              "uid|name",                   &stdsyntax, "m/.*/" );
  +        option_register(o, "version",            'v', OPT_FLAG,    NULL,        "print version",                     NULL,                         &stdsyntax, NULL );
  +        option_register(o, "newsgroup",          NUL, OPT_MULTI,   NULL,        "article destination",               "newsgroup",                  &stdsyntax, "m/.*/" );
  +    }
  +    catch(ex) {
  +        if (ex.ex_class == option_create)
  +            return (lmtp2nntp_option_rc_t)ex.ex_value;
  +        return OPTION_ERR_TRY;
  +    }
       return option_parse_internal(o, argc, argv);
   }
   
  +/* this public function catches all underlying exceptions and properly returns a code */
   lmtp2nntp_option_rc_t option_destroy(lmtp2nntp_option_t *o)
   {
       optionval_t *oc;
       int i;
  -
  -    //printf("DEBUG: option_destroy %.8lx\n", (long)o);
   
       if (o == NULL)
           return OPTION_ERR_ARG;
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_option.h
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 lmtp2nntp_option.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_option.h	6 Mar 2002 14:25:39 -0000	1.6
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_option.h	7 Mar 2002 16:03:56 -0000	1.7
  @@ -52,6 +52,7 @@
   typedef enum {
       OPTION_OK,
       OPTION_ERR_ARG, /* invalid args passed into function */
  +    OPTION_ERR_TRY, /* caught an exception from a underlying codeblock */
       OPTION_ERR_USE, /* invalid usage, bad data passed into function */
       OPTION_ERR_MEM, /* out of memory */
       OPTION_ERR_VAL, /* libval failed */
  @@ -82,9 +83,9 @@
       int ndata;
   };
   
  -lmtp2nntp_option_rc_t option_create  (lmtp2nntp_option_t **, val_t *);
  -lmtp2nntp_option_rc_t option_register(lmtp2nntp_option_t *, char *, char, optiontype_t, char *, char *, char *, optionloop_cb_t *, char *);
  -lmtp2nntp_option_rc_t option_parse   (lmtp2nntp_option_t *, int, char **);
  -lmtp2nntp_option_rc_t option_destroy (lmtp2nntp_option_t *);
  +/* these public functions catch all underlying exceptions and properly return a code */
  +lmtp2nntp_option_rc_t option_create (lmtp2nntp_option_t **, val_t *);
  +lmtp2nntp_option_rc_t option_parse  (lmtp2nntp_option_t *, int, char **);
  +lmtp2nntp_option_rc_t option_destroy(lmtp2nntp_option_t *);
   
   #endif /* __LMTP2NNTP_OPTION_H__ */

From ossp-cvs-owner@ossp.org  Thu Mar  7 22:30:11 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 025297642B; Thu,  7 Mar 2002 22:30:10 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex 00TODO ex.h ex.pod ex_test.c
Message-Id: <20020307213010.025297642B@mail.ossp.org>
Date: Thu,  7 Mar 2002 22:30:10 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   07-Mar-2002 22:30:10
  Branch: HEAD                             Handle: 2002030721300901

  Modified files:
    ossp-pkg/ex             00TODO ex.h ex.pod ex_test.c

  Log:
    Implement one of the coolest things since sliced bread: deferred
    exceptions. This allows one to more conviniently program the allocation
    (and the freeing in case of an error) of multiple (independent)
    resources.

  Summary:
    Revision    Changes     Path
    1.3         +0  -25     ossp-pkg/ex/00TODO
    1.17        +28 -6      ossp-pkg/ex/ex.h
    1.21        +30 -1      ossp-pkg/ex/ex.pod
    1.9         +39 -0      ossp-pkg/ex/ex_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/ex/00TODO
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 00TODO
  --- ossp-pkg/ex/00TODO	7 Mar 2002 15:01:30 -0000	1.2
  +++ ossp-pkg/ex/00TODO	7 Mar 2002 21:30:09 -0000	1.3
  @@ -1,29 +1,4 @@
   
  -Idea: deferred exceptions:
  -o ex_defer BLOCK
  -o if (ex_deferred) ...
  -
  -to avoid having to initialize every variable in this context:
  -
  -char *cp1;
  -char *cp2;
  -char *cp3;
  -ex_try {
  -    ex_defer {
  -        cp1 = mymalloc(...);
  -        cp2 = mymalloc(...);
  -        cp3 = mymalloc(...);
  -    }
  -}
  -ex_cleanup {
  -    if (cp1 != NULL)
  -        free(cp1);
  -    if (cp2 != NULL)
  -        free(cp2);
  -    if (cp3 != NULL)
  -        free(cp3);
  -}
  -
   **** IMPROVE DOCUMENTATION ****
   
   /* BAD EXAMPLE */
  Index: ossp-pkg/ex/ex.h
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 ex.h
  --- ossp-pkg/ex/ex.h	25 Feb 2002 10:33:02 -0000	1.16
  +++ ossp-pkg/ex/ex.h	7 Mar 2002 21:30:09 -0000	1.17
  @@ -94,6 +94,9 @@
   /* declare the context type (private) */
   typedef struct {
       __ex_mctx_t  *ctx_mctx;     /* permanent machine context of enclosing try/catch */
  +    int           ctx_deferred; /* permanent flag whether exception is deferred */
  +    int           ctx_deferring;/* permanent counter of exception deferring level */
  +    int           ctx_defer;    /* temporary flag for exception deferring macro */
       int           ctx_shielding;/* permanent counter of exception shielding level */
       int           ctx_shield;   /* temporary flag for exception shielding macro */
       int           ctx_caught;   /* temporary flag whether exception was caught */
  @@ -103,10 +106,13 @@
   
   /* the static and dynamic initializers for a context structure */
   #define EX_CTX_INITIALIZER \
  -    { NULL, 0, 0, 0, 0, { NULL, NULL, NULL, NULL, 0, NULL } }
  +    { NULL, 0, 0, 0, 0, 0, 0, 0, { NULL, NULL, NULL, NULL, 0, NULL } }
   #define EX_CTX_INITIALIZE(ctx) \
       do { \
           (ctx)->ctx_mctx         = NULL; \
  +        (ctx)->ctx_deferred     = 0;    \
  +        (ctx)->ctx_deferring    = 0;    \
  +        (ctx)->ctx_defer        = 0;    \
           (ctx)->ctx_shielding    = 0;    \
           (ctx)->ctx_shield       = 0;    \
           (ctx)->ctx_caught       = 0;    \
  @@ -178,20 +184,24 @@
   
   /* the throwing of a new exception */
   #define ex_throw(c,o,v) \
  -    (__ex_ctx()->ctx_shielding > 0 ? 0 : \
  +    ((   __ex_ctx()->ctx_shielding > 0 \
  +      || (__ex_ctx()->ctx_deferring > 0 && __ex_ctx()->ctx_deferred == 1)) ? 0 : \
        (__ex_ctx()->ctx_ex.ex_class  = (void *)(c), \
         __ex_ctx()->ctx_ex.ex_object = (void *)(o), \
         __ex_ctx()->ctx_ex.ex_value  = (void *)(v), \
         __ex_ctx()->ctx_ex.ex_file   = __FILE__, \
         __ex_ctx()->ctx_ex.ex_line   = __LINE__, \
         __ex_ctx()->ctx_ex.ex_func   = __EX_FUNC__, \
  -      (  __ex_ctx()->ctx_mctx == NULL \
  -       ? (__ex_terminate((ex_t *)&(__ex_ctx()->ctx_ex)), -1) \
  -       : (__ex_mctx_restore(__ex_ctx()->ctx_mctx), 1) )))
  +      __ex_ctx()->ctx_deferred     = 1, \
  +      (__ex_ctx()->ctx_deferring > 0 ? 0 : \
  +       (__ex_ctx()->ctx_mctx == NULL \
  +        ? (__ex_terminate((ex_t *)&(__ex_ctx()->ctx_ex)), -1) \
  +        : (__ex_mctx_restore(__ex_ctx()->ctx_mctx), 1) ))))
   
   /* the re-throwing of an already caught exception */
   #define ex_rethrow \
  -    (__ex_ctx()->ctx_shielding > 0 ? 0 : \
  +    ((   __ex_ctx()->ctx_shielding > 0 \
  +      || __ex_ctx()->ctx_deferring > 0) ? 0 : \
         (  __ex_ctx()->ctx_mctx == NULL \
          ? (__ex_terminate((ex_t *)&(__ex_ctx()->ctx_ex)), -1) \
          : (__ex_mctx_restore(__ex_ctx()->ctx_mctx), 1) ))
  @@ -204,11 +214,21 @@
            __ex_ctx()->ctx_shield =  0, \
            __ex_ctx()->ctx_shielding--)
   
  +/* defer immediate exception handling */
  +#define ex_defer \
  +    for (((__ex_ctx()->ctx_deferring)++ == 0 ? __ex_ctx()->ctx_deferred = 0 : 0), \
  +         __ex_ctx()->ctx_defer =  1;  \
  +         __ex_ctx()->ctx_defer == 1;  \
  +         __ex_ctx()->ctx_defer =  0,  \
  +         ((--(__ex_ctx()->ctx_deferring) == 0 && __ex_ctx()->ctx_deferred == 1) ? ex_rethrow : 0))
  +
   /* exception handling tests */
   #define ex_catching \
       (__ex_ctx()->ctx_mctx != NULL)
   #define ex_shielding \
       (__ex_ctx()->ctx_shielding > 0)
  +#define ex_deferring \
  +    (__ex_ctx()->ctx_deferring > 0)
   
   /* optional namespace mapping */
   #if defined(__EX_NS_UCCXX__)
  @@ -218,6 +238,7 @@
   #define Throw    ex_throw
   #define Rethrow  ex_rethrow
   #define Shield   ex_shield
  +#define Defer    ex_defer
   #elif defined(__EX_NS_CXX__) || (!defined(__cplusplus) && !defined(__EX_NS_CUSTOM__))
   #define try      ex_try
   #define cleanup  ex_cleanup
  @@ -225,6 +246,7 @@
   #define throw    ex_throw
   #define rethrow  ex_rethrow
   #define shield   ex_shield
  +#define defer    ex_defer
   #endif
   
   #endif /* __EX_H__ */
  Index: ossp-pkg/ex/ex.pod
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 ex.pod
  --- ossp-pkg/ex/ex.pod	25 Feb 2002 10:30:15 -0000	1.20
  +++ ossp-pkg/ex/ex.pod	7 Mar 2002 21:30:10 -0000	1.21
  @@ -48,10 +48,14 @@
   
   B<ex_rethrow>;
   
  +B<ex_defer> I<BLOCK>
  +
   B<ex_shield> I<BLOCK>
   
   if (B<ex_catching>) ...
   
  +if (B<ex_deferred>) ...
  +
   if (B<ex_shielding>) ...
   
   =head1 DESCRIPTION
  @@ -214,6 +218,22 @@
   C<ex_line> and C<ex_func> elements of the caught exception are passed
   through as it would have been never caught.
   
  +=item B<ex_defer> I<BLOCK>
  +
  +This directive executes I<BLOCK> while deferring the throwing of
  +exceptions, i.e., inside the dynamic scope of B<ex_defer> all
  +B<ex_throw> operations are silently ignored and on leaving the I<BLOCK>
  +the first occurred exception is thrown.
  +
  +The B<ex_defer> block is a regular B<ISO-C> language statement block,
  +but it is not allowed to jump into it via C<goto> or C<longjmp>(3) or
  +out of it via C<break>, C<return>, C<goto> or C<longjmp>(3) because this
  +would cause the deferral level to become out of sync. Jumping into
  +an B<ex_defer> clause would avoid increasing the exception deferral
  +level, and jumping out of it would avoid decreasing it. In both cases
  +the result is an incorrect exception deferral level. Nevertheless you
  +are allowed to nest B<ex_defer> clauses.
  +
   =item B<ex_shield> I<BLOCK>
   
   This directive executes I<BLOCK> while shielding it against the throwing
  @@ -235,6 +255,12 @@
   of an B<ex_try> clause to test whether the current scope is exception
   catching. 
   
  +=item B<ex_deferred>
  +
  +This is a boolean flag which can be checked inside the dynamic scope of
  +an B<ex_defer> clause to test whether the current scope is exception
  +deferring.
  +
   =item B<ex_shielding>
   
   This is a boolean flag which can be checked inside the dynamic scope of
  @@ -656,7 +682,10 @@
   Adam M. Costello E<lt>amc@cs.berkeley.eduE<gt> and Cosmin Truta
   E<lt>cosmin@cs.toronto.eduE<gt>. The B<cleanup> clause was inspired by
   the B<Java> C<finally> clause. The B<shield> feature was inspired by an
  -C<errno> shielding facility used in the B<GNU pth> implementation.
  +C<errno> shielding facility used in the B<GNU pth> implementation. The
  +B<defer> feature was invented to simplify an application's cleanup
  +handling if multiple independent resources are allocated and have to be
  +freed on error.
   
   =head1 AUTHORS
   
  Index: ossp-pkg/ex/ex_test.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 ex_test.c
  --- ossp-pkg/ex/ex_test.c	30 Jan 2002 10:40:07 -0000	1.8
  +++ ossp-pkg/ex/ex_test.c	7 Mar 2002 21:30:10 -0000	1.9
  @@ -111,6 +111,44 @@
       }
   }
   
  +TS_TEST(test_defer)
  +{
  +    ex_t ex;
  +    volatile int i1 = 0;
  +    volatile int i2 = 0;
  +    volatile int i3 = 0;
  +
  +    ts_test_check(TS_CTX, "exception deferring");
  +    if (ex_deferring)
  +        ts_test_fail(TS_CTX, "unexpected deferring scope");
  +    ex_try {
  +        ex_defer {
  +            if (!ex_deferring)
  +                ts_test_fail(TS_CTX, "unexpected non-deferring scope");
  +            ex_defer {
  +                i1 = 1;
  +                ex_throw(0, 0, 4711);
  +                i2 = 2;
  +                ex_throw(0, 0, 0);
  +                i3 = 3;
  +                ex_throw(0, 0, 0);
  +            }
  +            ex_throw(0, 0, 0);
  +        }
  +        ts_test_fail(TS_CTX, "unexpected not occurred deferred throwing");
  +    }
  +    ex_catch (ex) {
  +        if ((long)ex.ex_value != (long)4711)
  +            ts_test_fail(TS_CTX, "caught exception with value %d, expected 4711", (long)ex.ex_value);
  +    }
  +    if (i1 != 1)
  +        ts_test_fail(TS_CTX, "v.i1 not set (expected 1, got %d)", i1);
  +    if (i2 != 2)
  +        ts_test_fail(TS_CTX, "v.i2 not set (expected 2, got %d)", i2);
  +    if (i3 != 3)
  +        ts_test_fail(TS_CTX, "v.i3 not set (expected 3, got %d)", i3);
  +}
  +
   TS_TEST(test_shield)
   {
       ex_t ex;
  @@ -178,6 +216,7 @@
       ts_suite_test(ts, test_controlflow, "basic nested control flow");
       ts_suite_test(ts, test_value,       "exception value passing");
       ts_suite_test(ts, test_variables,   "variable value preservation");
  +    ts_suite_test(ts, test_defer,       "exception deferring");
       ts_suite_test(ts, test_shield,      "exception shielding");
       ts_suite_test(ts, test_cleanup,     "cleanup handling");
       n = ts_suite_run(ts);

From ossp-cvs-owner@ossp.org  Fri Mar  8 13:37:53 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9F201763D9; Fri,  8 Mar 2002 13:37:53 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Message-Id: <20020308123753.9F201763D9@mail.ossp.org>
Date: Fri,  8 Mar 2002 13:37:53 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   08-Mar-2002 13:37:53
  Branch: HEAD                             Handle: 2002030812375200

  Modified files:
    ossp-pkg/var            var.c

  Log:
    ops, remove left-over fixme hint

  Summary:
    Revision    Changes     Path
    1.88        +0  -1      ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.87 -r1.88 var.c
  --- ossp-pkg/var/var.c	7 Mar 2002 14:03:50 -0000	1.87
  +++ ossp-pkg/var/var.c	8 Mar 2002 12:37:52 -0000	1.88
  @@ -1059,7 +1059,6 @@
               else
                   regexec_flag = REG_NOTBOL;
               rc = regexec(&preg, p, sizeof(pmatch) / sizeof(regmatch_t), pmatch, regexec_flag);
  -            /* XXX */
               if (rc != 0) {
                   /* no (more) matching */
                   tokenbuf_append(&tmp, p, mydata.end - p);

From ossp-cvs-owner@ossp.org  Fri Mar  8 13:38:25 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 09373763D9; Fri,  8 Mar 2002 13:38:24 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var ts.c
Message-Id: <20020308123824.09373763D9@mail.ossp.org>
Date: Fri,  8 Mar 2002 13:38:24 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   08-Mar-2002 13:38:24
  Branch: HEAD                             Handle: 2002030812382400

  Modified files:
    ossp-pkg/var            ts.c

  Log:
    - add dmalloc support
    - fix indentation
    - fix memory leak

  Summary:
    Revision    Changes     Path
    1.2         +7  -2      ossp-pkg/var/ts.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/ts.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 ts.c
  --- ossp-pkg/var/ts.c	7 Mar 2002 14:58:41 -0000	1.1
  +++ ossp-pkg/var/ts.c	8 Mar 2002 12:38:24 -0000	1.2
  @@ -33,6 +33,11 @@
   #include <string.h>
   #include <stdarg.h>
   
  +#include "config.h"
  +#if defined(HAVE_DMALLOC_H) && defined(WITH_DMALLOC)
  +#include "dmalloc.h"
  +#endif
  +
   #include "ts.h"
   
   /* embedded ring data structure library */
  @@ -286,7 +291,7 @@
       /* iterate through all test cases */
       RING_FOREACH(tst, &ts->tests, ts_test_t, next) {
           cp = ts_suite_masprintf(" Test: %s ........................................"
  -                                    "........................................", tst->title);
  +                                "........................................", tst->title);
           cp[60] = '\0';
           fprintf(stdout, "%s", cp);
           free(cp);
  @@ -379,7 +384,7 @@
           free(tst->title);
           free(tst);
       }
  -    free(tst->title);
  +    free(ts->title);
       free(ts);
       return;
   }

From ossp-cvs-owner@ossp.org  Fri Mar  8 13:55:05 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 39559763D9; Fri,  8 Mar 2002 13:55:05 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var devtool.conf
Message-Id: <20020308125505.39559763D9@mail.ossp.org>
Date: Fri,  8 Mar 2002 13:55:05 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   08-Mar-2002 13:55:05
  Branch: HEAD                             Handle: 2002030812550400

  Modified files:
    ossp-pkg/var            devtool.conf

  Log:
    use external shtool

  Summary:
    Revision    Changes     Path
    1.3         +6  -6      ossp-pkg/var/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/var/devtool.conf
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.conf
  --- ossp-pkg/var/devtool.conf	28 Feb 2002 08:48:44 -0000	1.2
  +++ ossp-pkg/var/devtool.conf	8 Mar 2002 12:55:04 -0000	1.3
  @@ -21,15 +21,15 @@
           "$@"
   
   %version
  -    ./shtool version -l txt -n "OSSP VAR" -p "var_" -e VERSION
  -    V=`./shtool version -l txt -d long VERSION`
  +    shtool version -l txt -n "OSSP var" -p "var_" -e VERSION
  +    V=`shtool version -l txt -d long VERSION`
       sed -e "s/Version .*(.*)/Version $V/g" <README >README.n 
       mv README.n README
   
   %dist
       make distclean >/dev/null 2>&1
  -    ./shtool fixperm -v .
  -    V=`./shtool version -l txt -d short VERSION`
  -    ./shtool tarball -o var-${V}.tar.gz -d var-${V} -u ossp -g ossp \
  -                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf' -c 'gzip --best' .
  +    shtool fixperm -v .
  +    V=`shtool version -l txt -d short VERSION`
  +    shtool tarball -o var-${V}.tar.gz -d var-${V} -u ossp -g ossp \
  +                   -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf' -c 'gzip --best' .
   

From ossp-cvs-owner@ossp.org  Fri Mar  8 13:55:53 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3776B763D9; Fri,  8 Mar 2002 13:55:53 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var Makefile.in README VERSION aclocal.m4 configu...
Message-Id: <20020308125553.3776B763D9@mail.ossp.org>
Date: Fri,  8 Mar 2002 13:55:53 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   08-Mar-2002 13:55:53
  Branch: HEAD                             Handle: 2002030812555200

  Modified files:
    ossp-pkg/var            Makefile.in README VERSION aclocal.m4 configure.ac
                            var-config.in var-config.pod var.c var.h var.pod

  Log:
    polishing and copyright extension (add natural person)

  Summary:
    Revision    Changes     Path
    1.8         +1  -0      ossp-pkg/var/Makefile.in
    1.2         +3  -2      ossp-pkg/var/README
    1.4         +2  -2      ossp-pkg/var/VERSION
    1.5         +1  -0      ossp-pkg/var/aclocal.m4
    1.10        +1  -0      ossp-pkg/var/configure.ac
    1.5         +1  -0      ossp-pkg/var/var-config.in
    1.5         +1  -0      ossp-pkg/var/var-config.pod
    1.89        +1  -0      ossp-pkg/var/var.c
    1.29        +1  -0      ossp-pkg/var/var.h
    1.32        +1  -0      ossp-pkg/var/var.pod
  ____________________________________________________________________________

  Index: ossp-pkg/var/Makefile.in
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 Makefile.in
  --- ossp-pkg/var/Makefile.in	7 Mar 2002 14:58:41 -0000	1.7
  +++ ossp-pkg/var/Makefile.in	8 Mar 2002 12:55:52 -0000	1.8
  @@ -1,5 +1,6 @@
   ##
   ##  OSSP var -- Variable Expansion
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
  Index: ossp-pkg/var/README
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 README
  --- ossp-pkg/var/README	28 Feb 2002 08:48:44 -0000	1.1
  +++ ossp-pkg/var/README	8 Mar 2002 12:55:52 -0000	1.2
  @@ -4,7 +4,7 @@
       \_/ \__,_|_|   
   
     OSSP var - Variable Expansion
  -  Version 0.9.0 (28-Feb-2002)
  +  Version 
   
     ABSTRACT
   
  @@ -22,10 +22,11 @@
     for index and range calculations allow (even nested) iterations
     over array variable expansions (..[..${name[#+1]}..]..). The actual
     variable value lookup is performed through a callback function, so
  -  B<OSSP var> can expand arbitrary values.
  +  OSSP var can expand arbitrary values.
   
     COPYRIGHT AND LICENSE
   
  +  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
     Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
     Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   
  Index: ossp-pkg/var/VERSION
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 VERSION
  --- ossp-pkg/var/VERSION	28 Feb 2002 08:08:16 -0000	1.3
  +++ ossp-pkg/var/VERSION	8 Mar 2002 12:55:52 -0000	1.4
  @@ -1,6 +1,6 @@
   
  -  VERSION -- Version Information for OSSP VAR (syntax: Text)
  +  VERSION -- Version Information for OSSP var (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP VAR, Version 0.9.0 (28-Feb-2002)
  +  This is OSSP var, Version 0.9.0 (08-Mar-2002)
   
  Index: ossp-pkg/var/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 aclocal.m4
  --- ossp-pkg/var/aclocal.m4	7 Mar 2002 10:20:40 -0000	1.4
  +++ ossp-pkg/var/aclocal.m4	8 Mar 2002 12:55:52 -0000	1.5
  @@ -1,5 +1,6 @@
   dnl ##
   dnl ##  OSSP val -- Variable Expansion
  +dnl ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
   dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
  Index: ossp-pkg/var/configure.ac
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 configure.ac
  --- ossp-pkg/var/configure.ac	7 Mar 2002 14:58:41 -0000	1.9
  +++ ossp-pkg/var/configure.ac	8 Mar 2002 12:55:52 -0000	1.10
  @@ -1,5 +1,6 @@
   dnl ##
   dnl ##  OSSP var -- Variable Expansion
  +dnl ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   dnl ##
  Index: ossp-pkg/var/var-config.in
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 var-config.in
  --- ossp-pkg/var/var-config.in	28 Feb 2002 08:48:44 -0000	1.4
  +++ ossp-pkg/var/var-config.in	8 Mar 2002 12:55:52 -0000	1.5
  @@ -1,6 +1,7 @@
   #!/bin/sh
   ##
   ##  OSSP var -- Variable Expansion
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
  Index: ossp-pkg/var/var-config.pod
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 var-config.pod
  --- ossp-pkg/var/var-config.pod	28 Feb 2002 08:48:44 -0000	1.4
  +++ ossp-pkg/var/var-config.pod	8 Mar 2002 12:55:52 -0000	1.5
  @@ -1,5 +1,6 @@
   ##
   ##  OSSP var -- Variable Expansion
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.88 -r1.89 var.c
  --- ossp-pkg/var/var.c	8 Mar 2002 12:37:52 -0000	1.88
  +++ ossp-pkg/var/var.c	8 Mar 2002 12:55:52 -0000	1.89
  @@ -1,5 +1,6 @@
   /*
   **  OSSP var - Variable Expansion
  +**  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
   **  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
  Index: ossp-pkg/var/var.h
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 var.h
  --- ossp-pkg/var/var.h	7 Mar 2002 12:11:09 -0000	1.28
  +++ ossp-pkg/var/var.h	8 Mar 2002 12:55:52 -0000	1.29
  @@ -1,5 +1,6 @@
   /*
   **  OSSP var - Variable Expansion
  +**  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
   **  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
  Index: ossp-pkg/var/var.pod
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 var.pod
  --- ossp-pkg/var/var.pod	7 Mar 2002 12:39:30 -0000	1.31
  +++ ossp-pkg/var/var.pod	8 Mar 2002 12:55:52 -0000	1.32
  @@ -1,5 +1,6 @@
   ##
   ##  OSSP var -- Variable Expansion
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##

From ossp-cvs-owner@ossp.org  Fri Mar  8 13:57:16 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id ADF34763D9; Fri,  8 Mar 2002 13:57:16 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var_play.c var_test.c
Message-Id: <20020308125716.ADF34763D9@mail.ossp.org>
Date: Fri,  8 Mar 2002 13:57:16 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   08-Mar-2002 13:57:16
  Branch: HEAD                             Handle: 2002030812571600

  Modified files:
    ossp-pkg/var            var_play.c var_test.c

  Log:
    more copyright/license polishing

  Summary:
    Revision    Changes     Path
    1.3         +29 -0      ossp-pkg/var/var_play.c
    1.45        +2  -1      ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var_play.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 var_play.c
  --- ossp-pkg/var/var_play.c	28 Feb 2002 14:58:07 -0000	1.2
  +++ ossp-pkg/var/var_play.c	8 Mar 2002 12:57:16 -0000	1.3
  @@ -1,3 +1,32 @@
  +/*
  +**  OSSP var -- Variable Expansion
  +**  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**
  +**  This file is part of OSSP var, a variable expansion
  +**  library which can be found at http://www.ossp.org/pkg/lib/var/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  var_play.c: library command line playing tool
  +*/
   
   #include <stdio.h>
   #include <stdlib.h>
  Index: ossp-pkg/var/var_test.c
  ============================================================
  $ cvs diff -u -r1.44 -r1.45 var_test.c
  --- ossp-pkg/var/var_test.c	7 Mar 2002 14:58:41 -0000	1.44
  +++ ossp-pkg/var/var_test.c	8 Mar 2002 12:57:16 -0000	1.45
  @@ -1,5 +1,6 @@
   /*
   **  OSSP var -- Variable Expansion
  +**  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
   **  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
  @@ -24,7 +25,7 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  var_test.c: library regression test.
  +**  var_test.c: library regression test
   */
   
   #include <stdio.h>

From ossp-cvs-owner@ossp.org  Fri Mar  8 16:59:08 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6A854763D9; Fri,  8 Mar 2002 16:59:08 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc aclocal.m4
Message-Id: <20020308155908.6A854763D9@mail.ossp.org>
Date: Fri,  8 Mar 2002 16:59:08 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   08-Mar-2002 16:59:08
  Branch: HEAD                             Handle: 2002030815590700

  Modified files:
    ossp-pkg/rc             aclocal.m4

  Log:
    Get rid of an uneeded (and unwelcome) debug definition.

  Summary:
    Revision    Changes     Path
    1.8         +0  -1      ossp-pkg/rc/aclocal.m4
  ____________________________________________________________________________

  Index: ossp-pkg/rc/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 aclocal.m4
  --- ossp-pkg/rc/aclocal.m4	13 Feb 2002 19:19:28 -0000	1.7
  +++ ossp-pkg/rc/aclocal.m4	8 Mar 2002 15:59:07 -0000	1.8
  @@ -137,7 +137,6 @@
                 * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
       esac
       AC_COMPILER_OPTION(defdbg, -DDEBUG, -DDEBUG, CFLAGS="$CFLAGS -DDEBUG")
  -dnl    AC_COMPILER_OPTION(ggdb3, -ggdb3, -ggdb3, CFLAGS="$CFLAGS -ggdb3")
       CFLAGS="$CFLAGS -pedantic"
       CFLAGS="$CFLAGS -Wall"
       WMORE="-Wshadow -Wpointer-arith -Wcast-align -Winline"

From ossp-cvs-owner@ossp.org  Fri Mar  8 17:59:50 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C658F763D9; Fri,  8 Mar 2002 17:59:49 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var README
Message-Id: <20020308165949.C658F763D9@mail.ossp.org>
Date: Fri,  8 Mar 2002 17:59:49 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   08-Mar-2002 17:59:49
  Branch: HEAD                             Handle: 2002030816594900

  Modified files:
    ossp-pkg/var            README

  Log:
    fix README

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/var/README
  ____________________________________________________________________________

  Index: ossp-pkg/var/README
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 README
  --- ossp-pkg/var/README	8 Mar 2002 12:55:52 -0000	1.2
  +++ ossp-pkg/var/README	8 Mar 2002 16:59:49 -0000	1.3
  @@ -4,7 +4,7 @@
       \_/ \__,_|_|   
   
     OSSP var - Variable Expansion
  -  Version 
  +  Version 0.9.0 (08-Mar-2002)
   
     ABSTRACT
   

From ossp-cvs-owner@ossp.org  Fri Mar  8 18:06:37 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DE22E763D9; Fri,  8 Mar 2002 18:06:36 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib index.wml ossp-web/pkg/lib/var index.wml
Message-Id: <20020308170636.DE22E763D9@mail.ossp.org>
Date: Fri,  8 Mar 2002 18:06:36 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   08-Mar-2002 18:06:36
  Branch: HEAD                             Handle: 2002030817063600

  Modified files:
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/var    index.wml

  Log:
    update for OSSP var 0.9.0

  Summary:
    Revision    Changes     Path
    1.8         +1  -1      ossp-web/pkg/lib/index.wml
    1.3         +20 -12     ossp-web/pkg/lib/var/index.wml
  ____________________________________________________________________________

  Index: ossp-web/pkg/lib/index.wml
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 index.wml
  --- ossp-web/pkg/lib/index.wml	15 Feb 2002 12:07:14 -0000	1.7
  +++ ossp-web/pkg/lib/index.wml	8 Mar 2002 17:06:36 -0000	1.8
  @@ -28,7 +28,7 @@
   			done=80 stable=none unstable=none>
     <pkg_item name="var" longname="OSSP var" type="lib"
               desc="Variable Expansion"
  -			done=95 stable=none unstable=none>
  +			done=95 stable=none unstable=0.9.0>
     <pkg_item name="val" longname="OSSP val" type="lib"
               desc="Value Access"
   			done=95 stable=none unstable=none>
  Index: ossp-web/pkg/lib/var/index.wml
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 index.wml
  --- ossp-web/pkg/lib/var/index.wml	15 Feb 2002 13:52:12 -0000	1.2
  +++ ossp-web/pkg/lib/var/index.wml	8 Mar 2002 17:06:36 -0000	1.3
  @@ -7,26 +7,34 @@
   
   <h2>Abstract</h2>
   
  -OSSP var is a very sophisticated and fast variable construct expansion
  -library. It supports the usual scripting language style variable syntax
  -(<tt>${name}</tt>, <tt>$(name)</tt>, <tt>%{name}</tt>, etc.) and
  -provides both simple scalar and array expansion and post-operations
  -on the expanded value. The supported post-operations are length
  -determination, case conversion, defaults, postive and negative
  -alternatives, sub-strings, regular expression based substitutions,
  -character translations, padding and even nested iterations over array
  -variables. The actual value lookup is performed through as callback
  -function, so OSSP var can expand arbitrary values.
  +OSSP var is a flexible, full-featured and fast variable construct
  +expansion library. It supports a configurable variable construct
  +syntax very similar to the style found in many scripting languages
  +(like <tt>@name</tt>, <tt>${name}</tt>, <tt>$(name)</tt>, etc.)
  +and provides both simple scalar (<tt>${name}</tt>) and array
  +(<tt>${name[index]}</tt>) expansion, plus optionally one or more
  +post-operations on the expanded value (<tt>${name:op:op...}</tt>).
  +
  +<p>
  +The supported post-operations are length determination, case conversion,
  +defaults, postive and negative alternatives, sub-strings, regular
  +expression based substitutions, character translations, and padding.
  +Additionally, a meta-construct plus arithmetic expressions for index and
  +range calculations allow (even nested) iterations over array variable
  +expansions (<tt>..[..${name[#+1]}..]..</tt>). The actual variable value
  +lookup is performed through a callback function, so OSSP var can expand
  +arbitrary values.
   
   <h2>Authors</h2>
   
  +<pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
   <pkg_author name="Peter Simons" mail="simons@computer.org">
   
   <h2>Status</h2>
   
   <pkg_status
       stable="none"    stable_date="none"
  -    unstable="none"  unstable_date="none"
  +    unstable="0.9.0" unstable_date="08-Mar-2002"
   	done=100>
   
   <h2>Source</h2>
  @@ -35,5 +43,5 @@
       url=$(FTP_ROOT_URL)/pkg/lib/var/
       directory=$(FTP_ROOT_DIR)/pkg/lib/var/
       files="var-*.tar.gz" 
  -	stable="none" unstable="none">
  +	stable="none" unstable="var-0.9.0.tar.gz">
   	

From ossp-cvs-owner@ossp.org  Fri Mar  8 23:54:29 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1ED44763DA; Fri,  8 Mar 2002 23:54:28 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex ts.c
Message-Id: <20020308225428.1ED44763DA@mail.ossp.org>
Date: Fri,  8 Mar 2002 23:54:28 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   08-Mar-2002 23:54:28
  Branch: HEAD                             Handle: 2002030822542800

  Modified files:
    ossp-pkg/ex             ts.c

  Log:
    upgrade to fixed ts.c

  Summary:
    Revision    Changes     Path
    1.2         +7  -2      ossp-pkg/ex/ts.c
  ____________________________________________________________________________

  Index: ossp-pkg/ex/ts.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 ts.c
  --- ossp-pkg/ex/ts.c	26 Jan 2002 20:12:19 -0000	1.1
  +++ ossp-pkg/ex/ts.c	8 Mar 2002 22:54:28 -0000	1.2
  @@ -33,6 +33,11 @@
   #include <string.h>
   #include <stdarg.h>
   
  +#include "config.h"
  +#if defined(HAVE_DMALLOC_H) && defined(WITH_DMALLOC)
  +#include "dmalloc.h"
  +#endif
  +
   #include "ts.h"
   
   /* embedded ring data structure library */
  @@ -286,7 +291,7 @@
       /* iterate through all test cases */
       RING_FOREACH(tst, &ts->tests, ts_test_t, next) {
           cp = ts_suite_masprintf(" Test: %s ........................................"
  -                                    "........................................", tst->title);
  +                                "........................................", tst->title);
           cp[60] = '\0';
           fprintf(stdout, "%s", cp);
           free(cp);
  @@ -379,7 +384,7 @@
           free(tst->title);
           free(tst);
       }
  -    free(tst->title);
  +    free(ts->title);
       free(ts);
       return;
   }

From ossp-cvs-owner@ossp.org  Fri Mar  8 23:56:49 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C9013763DA; Fri,  8 Mar 2002 23:56:48 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex README VERSION
Message-Id: <20020308225648.C9013763DA@mail.ossp.org>
Date: Fri,  8 Mar 2002 23:56:48 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   08-Mar-2002 23:56:48
  Branch: HEAD                             Handle: 2002030822564800

  Modified files:
    ossp-pkg/ex             README VERSION

  Log:
    update for release

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/ex/README
    1.3         +1  -1      ossp-pkg/ex/VERSION
  ____________________________________________________________________________

  Index: ossp-pkg/ex/README
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 README
  --- ossp-pkg/ex/README	31 Jan 2002 20:31:47 -0000	1.3
  +++ ossp-pkg/ex/README	8 Mar 2002 22:56:48 -0000	1.4
  @@ -4,7 +4,7 @@
     \___/_/\_\
                  
     OSSP ex - Exception Handling Library
  -  Version 0.9.0 (31-Jan-2002)
  +  Version 0.9.1 (08-Mar-2002)
   
     ABSTRACT
   
  Index: ossp-pkg/ex/VERSION
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 VERSION
  --- ossp-pkg/ex/VERSION	31 Jan 2002 20:31:47 -0000	1.2
  +++ ossp-pkg/ex/VERSION	8 Mar 2002 22:56:48 -0000	1.3
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP ex (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP ex, Version 0.9.0 (31-Jan-2002)
  +  This is OSSP ex, Version 0.9.1 (08-Mar-2002)
   

From ossp-cvs-owner@ossp.org  Fri Mar  8 23:59:12 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 004E4763DA; Fri,  8 Mar 2002 23:59:11 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/ex index.wml ossp-web/pkg/lib index.wml
Message-Id: <20020308225911.004E4763DA@mail.ossp.org>
Date: Fri,  8 Mar 2002 23:59:11 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   08-Mar-2002 23:59:11
  Branch: HEAD                             Handle: 2002030822591100

  Modified files:
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/ex     index.wml

  Log:
    release OSSP ex 0.9.1

  Summary:
    Revision    Changes     Path
    1.2         +6  -2      ossp-web/pkg/lib/ex/index.wml
    1.9         +1  -1      ossp-web/pkg/lib/index.wml
  ____________________________________________________________________________

  Index: ossp-web/pkg/lib/ex/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/lib/ex/index.wml	15 Feb 2002 11:56:42 -0000	1.1
  +++ ossp-web/pkg/lib/ex/index.wml	8 Mar 2002 22:59:11 -0000	1.2
  @@ -20,6 +20,10 @@
   longer have to make sure that the exceptional return codes from sub-routines
   are correctly passed back to the parent.
   
  +<p>
  +Additionally the OSSP ex facility provides advanced exception handling
  +features like shielded and deferred exceptions.
  +
   <h2>Authors</h2>
   
   <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  @@ -28,7 +32,7 @@
   
   <pkg_status
       stable="none"    stable_date="none"
  -    unstable="0.9.0" unstable_date="31-Jan-2002"
  +    unstable="0.9.1" unstable_date="08-Mar-2002"
   	done=95>
   
   <h2>Source</h2>
  @@ -37,5 +41,5 @@
       url=$(FTP_ROOT_URL)/pkg/lib/ex/
       directory=$(FTP_ROOT_DIR)/pkg/lib/ex/
       files="ex-*.tar.gz" 
  -	stable="none" unstable="ex-0.9.0.tar.gz">
  +	stable="none" unstable="ex-0.9.1.tar.gz">
   	
  Index: ossp-web/pkg/lib/index.wml
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 index.wml
  --- ossp-web/pkg/lib/index.wml	8 Mar 2002 17:06:36 -0000	1.8
  +++ ossp-web/pkg/lib/index.wml	8 Mar 2002 22:59:11 -0000	1.9
  @@ -22,7 +22,7 @@
   			done=95 stable=none unstable=0.9.0>
     <pkg_item name="ex" longname="OSSP ex" type="lib"
               desc="Exception Handling"
  -			done=95 stable=none unstable=0.9.0>
  +			done=95 stable=none unstable=0.9.1>
     <pkg_item name="l2" longname="OSSP l2" type="lib"
               desc="Flexible Logging"
   			done=80 stable=none unstable=none>

From ossp-cvs-owner@ossp.org  Sat Mar  9 00:01:26 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 300967643B; Sat,  9 Mar 2002 00:01:26 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new news.txt
Message-Id: <20020308230126.300967643B@mail.ossp.org>
Date: Sat,  9 Mar 2002 00:01:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   09-Mar-2002 00:01:26
  Branch: HEAD                             Handle: 2002030823012500

  Modified files:
    ossp-web/new            news.txt

  Log:
    announce OSSP ex and OSSP var releases

  Summary:
    Revision    Changes     Path
    1.3         +2  -0      ossp-web/new/news.txt
  ____________________________________________________________________________

  Index: ossp-web/new/news.txt
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 news.txt
  --- ossp-web/new/news.txt	13 Feb 2002 21:35:23 -0000	1.2
  +++ ossp-web/new/news.txt	8 Mar 2002 23:01:25 -0000	1.3
  @@ -1,3 +1,5 @@
  +08-Mar-2002: Released OSSP ex 0.9.1
  +08-Mar-2002: Released OSSP var 0.9.0
   13-Feb-2002: First cut for the OSSP website
   31-Jan-2002: Released OSSP ex 0.9.0
   31-Jan-2002: Released OSSP sa 0.9.0

From ossp-cvs-owner@ossp.org  Sat Mar  9 00:08:40 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 421297642B; Sat,  9 Mar 2002 00:08:40 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa ts.c
Message-Id: <20020308230840.421297642B@mail.ossp.org>
Date: Sat,  9 Mar 2002 00:08:40 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Mar-2002 00:08:40
  Branch: HEAD                             Handle: 2002030823083900

  Modified files:
    ossp-pkg/sa             ts.c

  Log:
    upgrade to fixed ts.c

  Summary:
    Revision    Changes     Path
    1.5         +7  -2      ossp-pkg/sa/ts.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/ts.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 ts.c
  --- ossp-pkg/sa/ts.c	2 Jan 2002 12:43:50 -0000	1.4
  +++ ossp-pkg/sa/ts.c	8 Mar 2002 23:08:39 -0000	1.5
  @@ -33,6 +33,11 @@
   #include <string.h>
   #include <stdarg.h>
   
  +#include "config.h"
  +#if defined(HAVE_DMALLOC_H) && defined(WITH_DMALLOC)
  +#include "dmalloc.h"
  +#endif
  +
   #include "ts.h"
   
   /* embedded ring data structure library */
  @@ -286,7 +291,7 @@
       /* iterate through all test cases */
       RING_FOREACH(tst, &ts->tests, ts_test_t, next) {
           cp = ts_suite_masprintf(" Test: %s ........................................"
  -                                    "........................................", tst->title);
  +                                "........................................", tst->title);
           cp[60] = '\0';
           fprintf(stdout, "%s", cp);
           free(cp);
  @@ -379,7 +384,7 @@
           free(tst->title);
           free(tst);
       }
  -    free(tst->title);
  +    free(ts->title);
       free(ts);
       return;
   }

From ossp-cvs-owner@ossp.org  Sat Mar  9 20:23:38 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 01EBA7642B; Sat,  9 Mar 2002 20:23:37 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var NEWS acconfig.h configure.ac devtool.conf dev...
Message-Id: <20020309192337.01EBA7642B@mail.ossp.org>
Date: Sat,  9 Mar 2002 20:23:37 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Mar-2002 20:23:37
  Branch: HEAD                             Handle: 197001010100001015698217

  Added files:
    ossp-pkg/var            NEWS
  Modified files:
    ossp-pkg/var            configure.ac devtool.conf devtool.func
  Removed files:
    ossp-pkg/var            acconfig.h

  Log:
    upgrade to Autoconf 2.53 build environment

  Summary:
    Revision    Changes     Path
    1.1         +17 -0      ossp-pkg/var/NEWS
    NONE        +0  -7      ossp-pkg/var/acconfig.h
    1.11        +17 -12     ossp-pkg/var/configure.ac
    1.4         +1  -1      ossp-pkg/var/devtool.conf
    1.3         +1  -0      ossp-pkg/var/devtool.func
  ____________________________________________________________________________

  Index: ossp-pkg/var/NEWS
  ============================================================
  $ cvs update -p -r1.1 NEWS
    __   ____ _ _ __ 
    \ \ / / _` | '__|
     \ V / (_| | |   
      \_/ \__,_|_|   
  
    OSSP var - Variable Expansion
  
    NEWS
    ====
  
    This is a list of user-visible and/or major changes to OSSP var.
    For more details please have a look at the ChangeLog file.
  
    Changes between 0.9.0 and 0.9.1 (08-Mar-2002 to xx-Mar-2002)
  
     o upgraded to GNU autoconf 2.53 build environment
  
    Index: ossp-pkg/var/configure.ac
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 configure.ac
  --- ossp-pkg/var/configure.ac	8 Mar 2002 12:55:52 -0000	1.10
  +++ ossp-pkg/var/configure.ac	9 Mar 2002 19:23:37 -0000	1.11
  @@ -28,27 +28,32 @@
   dnl ##  configure.ac: GNU Autoconf source script
   dnl ##
   
  -AC_PREREQ(2.52)
  -AC_REVISION(1.0)
  -AC_INIT(var.h)
  -
  -AC_DIVERT_PUSH(NOTICE)
  +dnl #   prerequisites, initialization and input control
  +AC_PREREQ(2.53)
  +AC_INIT
   V=`./shtool version -l txt -d long VERSION`
  -./shtool echo -e "Configuring %BOSSP var%b (Variable Expansion), Version %B${V}%b"
  -AC_DIVERT_POP()
  +./shtool echo -e "Configuring %BOSSP var%b (Variable Expansion), version %B${V}%b"
  +AC_CONFIG_SRCDIR(var.h)
   
  -AC_SET_MAKE
  +dnl #   checks for build programs
  +AC_PROG_MAKE_SET
   AC_PROG_CC
   AC_CHECK_DEBUGGING
  -
   sinclude(libtool.m4)
   AC_PROG_LIBTOOL
   
  +dnl #   checks for platform environment
   AC_CHECK_FUNCS(snprintf)
  -AC_CHECK_EXTLIB([OSSP ex], ex, __ex_ctx, ex.h, [AC_DEFINE(WITH_EX)])
  -AC_CHECK_EXTLIB([Dmalloc], dmalloc, dmalloc_debug, dmalloc.h, AC_DEFINE(WITH_DMALLOC))
   
  +dnl #   checks for external libraries
  +AC_CHECK_EXTLIB([OSSP ex], ex, __ex_ctx, ex.h,
  +                [AC_DEFINE(WITH_EX, 1, [Define to 1 if building with OSSP ex])])
  +AC_CHECK_EXTLIB([Dmalloc], dmalloc, dmalloc_debug, dmalloc.h, 
  +                [AC_DEFINE(WITH_DMALLOC, 1, [Define to 1 if building with Dmalloc])])
  +
  +dnl #   output generation
   AC_CONFIG_HEADERS(config.h)
  -AC_CONFIG_FILES(Makefile var-config)
  +AC_CONFIG_FILES([Makefile var-config])
  +AC_CONFIG_COMMANDS([adjustment], [chmod a+x var-config])
   AC_OUTPUT
   
  Index: ossp-pkg/var/devtool.conf
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.conf
  --- ossp-pkg/var/devtool.conf	8 Mar 2002 12:55:04 -0000	1.3
  +++ ossp-pkg/var/devtool.conf	9 Mar 2002 19:23:37 -0000	1.4
  @@ -5,7 +5,7 @@
   %autogen
       @autogen shtool   1.6.0 "1.[56].*" all
       @autogen libtool  1.4.2 "1.4*"
  -    @autogen autoconf 2.52  "2.5.*"
  +    @autogen autoconf 2.53  "2.5[3-9]*"
   
   %autoclean
       @autoclean shtool
  Index: ossp-pkg/var/devtool.func
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.func
  --- ossp-pkg/var/devtool.func	2 Jan 2002 17:12:18 -0000	1.2
  +++ ossp-pkg/var/devtool.func	9 Mar 2002 19:23:37 -0000	1.3
  @@ -33,6 +33,7 @@
               echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
               autoconf
               autoheader 2>&1 | grep -v "is unchanged"
  +            rm -rf autom4te.cache >/dev/null 2>&1
               ;;
           libtool )
               libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`

From ossp-cvs-owner@ossp.org  Sat Mar  9 20:39:58 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 487547642B; Sat,  9 Mar 2002 20:39:58 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var aclocal.m4 configure.ac
Message-Id: <20020309193958.487547642B@mail.ossp.org>
Date: Sat,  9 Mar 2002 20:39:58 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   09-Mar-2002 20:39:58
  Branch: HEAD                             Handle: 2002030919395700

  Modified files:
    ossp-pkg/var            aclocal.m4 configure.ac

  Log:
    require an ISO-C compliant compiler

  Summary:
    Revision    Changes     Path
    1.6         +8  -0      ossp-pkg/var/aclocal.m4
    1.12        +1  -1      ossp-pkg/var/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/var/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 aclocal.m4
  --- ossp-pkg/var/aclocal.m4	8 Mar 2002 12:55:52 -0000	1.5
  +++ ossp-pkg/var/aclocal.m4	9 Mar 2002 19:39:57 -0000	1.6
  @@ -28,6 +28,14 @@
   dnl ##  aclocal.m4: GNU Autoconf local macro definitions
   dnl ##
   
  +AC_DEFUN(EN_PROG_CC,[dnl
  +  AC_PROG_CC
  +  AC_PROG_CC_STDC
  +  if test ".$ac_cv_prog_cc_stdc" = .no; then
  +      AC_MSG_ERROR([require an ANSI/ISO C compliant compiler])
  +  fi
  +])
  +
   dnl ##
   dnl ##  Check whether compiler option works
   dnl ##
  Index: ossp-pkg/var/configure.ac
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 configure.ac
  --- ossp-pkg/var/configure.ac	9 Mar 2002 19:23:37 -0000	1.11
  +++ ossp-pkg/var/configure.ac	9 Mar 2002 19:39:57 -0000	1.12
  @@ -37,7 +37,7 @@
   
   dnl #   checks for build programs
   AC_PROG_MAKE_SET
  -AC_PROG_CC
  +EN_PROG_CC
   AC_CHECK_DEBUGGING
   sinclude(libtool.m4)
   AC_PROG_LIBTOOL

From ossp-cvs-owner@ossp.org  Wed Mar 13 10:19:06 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 93EE27642C; Wed, 13 Mar 2002 10:19:05 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sugar BRAINSTORM.txt FEATURES.txt Makefile README...
Message-Id: <20020313091905.93EE27642C@mail.ossp.org>
Date: Wed, 13 Mar 2002 10:19:05 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   13-Mar-2002 10:19:05
  Branch: HEAD                             Handle: 197001010100001016007544

  Added files:
    ossp-pkg/sugar          BRAINSTORM.txt FEATURES.txt Makefile srml2sxml
                            sugar.fig sugar.sug sxml.cat sxml.dtd sxml.iso
                            sxml2fo.xsl sxml2html.xsl sxml2latex.xsl
                            sxml2roff.xsl sxml2xxx test.srml test.sxml
  Modified files:
    ossp-pkg/sugar          README
  Removed files:
    ossp-pkg/sugar          sugar.txt

  Log:
    add our recent evaluation stuff

  Summary:
    Revision    Changes     Path
    1.1         +336 -0     ossp-pkg/sugar/BRAINSTORM.txt
    1.1         +69 -0      ossp-pkg/sugar/FEATURES.txt
    1.1         +9  -0      ossp-pkg/sugar/Makefile
    1.2         +28 -3      ossp-pkg/sugar/README
    1.1         +265 -0     ossp-pkg/sugar/srml2sxml
    1.1         +225 -0     ossp-pkg/sugar/sugar.fig
    1.1         +237 -0     ossp-pkg/sugar/sugar.sug
    NONE        +0  -238    ossp-pkg/sugar/sugar.txt
    1.1         +7  -0      ossp-pkg/sugar/sxml.cat
    1.1         +122 -0     ossp-pkg/sugar/sxml.dtd
    1.1         +1085 -0    ossp-pkg/sugar/sxml.iso
    1.1         +2  -0      ossp-pkg/sugar/sxml2fo.xsl
    1.1         +30 -0      ossp-pkg/sugar/sxml2html.xsl
    1.1         +2  -0      ossp-pkg/sugar/sxml2latex.xsl
    1.1         +2  -0      ossp-pkg/sugar/sxml2roff.xsl
    1.1         +5  -0      ossp-pkg/sugar/sxml2xxx
    1.1         +64 -0      ossp-pkg/sugar/test.srml
    1.1         +17 -0      ossp-pkg/sugar/test.sxml
  ____________________________________________________________________________

  Index: ossp-pkg/sugar/BRAINSTORM.txt
  ============================================================
  $ cvs update -p -r1.1 BRAINSTORM.txt
  
  Konzepte:
  - headers    Author: ...
  - 1d-block   foo XX bar XX quux
  - 2d-block   XX ...
  - table      ++ | .. |
  - XX tags    XX
  - entities   ..{xxx}..
  
  Examples:
  
   o '' XX foo 
           bar
         baz
        quux
  
     XX is applied to "foo bar baz", not to "quux".
  
   o '' XX foo XX bar
        quux
  
     XX is applied to "foo", not to "bar quux"
  
   o '' foo bar XX quux
  
     XX is applied to "quux" __and__ "foo bar", because
     not closed XX environment wraps around at end of paragraph.
     With this the following is equvalent:
  
     '' XX foo
        bar quux XX
  
     '' XX foo
        bar quux
  
     '' foo
        bar quux XX
  
     this way headings are not special case:
  
     '' ==heading==
  
     '' ==heading
  
     '' heading==
  
     '' heading
        ==
  
     '' heading
        =======
  
     begins a 2d block with head tag and ends (explicitly
     or implicitly) with the same tag's markup, the 2d block
     is treated as a "head line" (for table of contents, etc.)
     Else is is treated as "paragraph heading" (not included
     in table of contents).
  
  Brainstormings with Christian Reiber:
  
  1. Scanner erkennt die Intentation, strippt sie
     weg, berechnet aber durch sie die "schliessenden
     Klammern" zu den 2d-tags.
  
  2. Scanner erkennt auch die Unterschiede zwischen
     1d und 2d tags, da der Parser ja keinerlei
     Unterscheidung treffen kann (spaces/indent nicht mehr da)
  
  3. Scanner hat einen Look-Ahead von 1 Zeile plus
     ihrem Indent
  
  4. Das Parsen von Headern "(====)" geht einfach:
     Der Scanner erkennt nur das "^========" und
     ein Baumtransformator haengt spaeter 
     die Sohn-Sequenz "<paragraph> x ..... y <header>"
     um in "<parapraph> <header> x ... y", d.h.
     der transformator geht bis zum letzten Paraphraph
     Knoten zurueck.
  
      If the "text" on hyperlinks is missing in links, the reference is printed
      instead. For internal links the text is chapter and pagenumber
      (except for HTML, there exists real hyperlinks).
  
  Stichworte:
  
  Whatever   | Irgendwas
  ---------- | -----------------------------
  Brain Dump | VHIT (Vom Hirn ins Terminal) 
  Blabla     | ASCII WYSIWYG
  
  Design-Grundsaetze
  ------------------
  1. KISS bei der Sprache (Beschreibung geht auf eine Seite und ist ISO-Latin-1!)
  2. KISS bei der Implementierung (Code-Groesse <= 80KB)
  3. Wir implementieren nur das, was wir _WIRKLICH_ brauchen.
  4. Sugar ist wie Unix: Wenige Konzepte existieren und 
     werden konsequent durchgezogen
  5. Sugar hat *keine* GUI, sondern ist ein Filter!
     Beispielaufruf:
     $ cat test.txt | sugar --html -otest.html
  6. Sugar ist stand-alone (bis auf Postscript),
     man braucht also nicht 1001 Tools bei der Installation
  7. Release early, release often (Eric S. Raymond)
  8. Jedes Markup kann immer eindeutig formuliert werden (=non-magic),
     nur sieht es dann eventuell nicht so schoen aus.
     Wenn man sich an bestimmte Regeln haelt, kann man
     im Magic Mode ASCII-Aesthetik pur nutzen.
     Non-Magic ist immer nutzbar und aktiviert, Magic-Mode per default an, aber
     kann abgeschalten werden (per -xx und/oder inline tag) Idee: -xx im
     Dokument direkt eingeben ala vi/less
  
  Was Sugar nicht ist
  -------------------
  1. Sugar ist _keine_ Textverarbeitung oder ein DTP-Tool
  2. Sugar ist keine Markup-Sprache (der Text ist bereits das Endprodukt)
  3. Sugars Brother is more/less and not nroff (i.e. Sugar is fast!)
  
  Anwendungsfeld
  --------------
  1. Technische Dokumentation fuer mehrere Darstellungsplatformen:
     Plain ASCII (= Sugar Quelle), roff/-man (Unix), HTML (= Online), PS (= Print)
  2. Brain Dump!
  
  Optionale Zusatzfeatures
  ------------------------
  - ToC: Automatische Generierung 
  - Numerierung von Headern
  - Index
  - Aufrufen von Makroprozessor: m4
  
  Tabellen:
  ---------
     o Tabellen sind Bloecke und werden mit ++ eingeleitet wie
       andere Bloecke auch, d.h. Ende ist bei Ausrueckung oder
       selber Level.
     o Jede Tabellenzeile faengt mit einem | an und immer in der selben Spalte.
     o Die |'s der ersten Zeile geben die Gesamtanzahl und die Normposition
       der Spalten an.
     o Besteht die erste Zeile nur aus |'s (und keinem Inhalt), dann
       ist sie eine _reine_ Normungszeile und erzeugt auch keine Leerzeile.
       Ansonsten (Zeile 2, ...) kann man so selbstverstanelich eine
       Leerreihe erzeigen.
     o Spaltentrennungs-| koennen an belieber Stelle stehen, wenn
       genuegend da sind. 
     o Folgespalten sind dadurch gekennzeichnet, dasz ihr | eingerueckt
       erscheint.
     o Multicolums liegen vor, wenn weniger |'s auftreten, als die
       Normungszeile vorgibt.  Die Erkennung der Span's erfolgt dabei ueber die
       Position der |'s, d.h. sie muessen die |'s der Normunszeile matchen.
       Zusaetzlich kann die Normungszeile beliebig oft wiederhlt werden.
       Aber dabei darf sich nur die Position der |'s aendern, aber
       nicht die Anzahl (klar!).
     o Leerzeilen bestehen aus nur einem |' am Anfang und sonst nichts.
     o Normungszielen haben mind.(!) 2 |'s.
     o Leerzeilen erzeugen im Output soviele |'s wie die Normungszeile
       vorgibt. Fuer andere Layouting-Dinge muss man z.B. ``| \_'' schreiben.
     o In einer Tabelle koennen alle Zeichenformatierungen genutzt werden.
     o In der Normungszeile kann mit den Zeichenformatierung-Tags
       die Formatierung der Tabellenspalten angegeben werden!
     o Wie gibt man Tabellenzeilen an, die als Headers gelten?
       Eventuell gar nicht, wenn man Tabellen nicht umbrechen laesst,
       denn dann muss man diese headerzeilen auch nicht wiederholen
       und muss deshalb solche nicht explizit auszeichnen
  
       ++ | ((** | %% | )) |
          | foo | quux | bar |
          | foooooooo | quux |
     
  3. Block-Konzept
  
     Es gibt zwei Blockkonzepte: 
       - character block (eindimensional) und 
       - line block (zweidimensional).
  
     Der //character block// wird durch das Tag eingeleitet und wieder beendet. Das
     Paragraph Ende beendet in jedem Fall den character block.
  
     Der //line block// beginnt mit dem Tag __ausgerückt__, wobei davor keine
     Leerzeile stehen muß (ein \n und ggf. \s davor reicht). Er enthält ganze
     Zeilen und zwar solange, wie Text in der Zeile mindestens zwei Leerzeichen
     weiter rechts beginnt als das einleitende Tag. Achtung: Tags stellen selbst
     __nicht__ den Zeilenanfang dar! Damit kann ich also line blocks schachteln.
     (Anders gesagt: Es geht nicht um den linken Rand der Textdatein, sondern um
     den linken Rand des übergeordneten Line Blocks.)
  
     Automatischer reflow durch den Editor ist bei character blocks **kein**
     Problem, da das Tag keine positionsabhängige Bedeutung hat (daher wurde
     auch verworfen, daß ein Tag am Zeilenanfang, aber nicht ausgerückt, am
     Zeilenende beendet wird). Das Start-Tag beim line block wird vom Editor
     nicht versetzt (wenn er was taugt).
  
     Möglicherweise kann für bestimmte Tags das Ende des char blocks auch das
     Zeilenende (nicht das Para. Ende) sein. Gedacht ist an Kommandos:
  
     Gehen sich nach http://laber.lall 
     Das ist ## eine blöde Zeile und ich will daß ##das## unterstrichen ist
     ''##das ist ungut##
       ##das ist intuitiver, bedeutet aber Kommandoende=Zeilenende
     
     Das wäre dann eine Eigenschaft des Tags, d.h. es verhält sich dann
     //immer// so (und nicht mal so und mal anders).
  
     Beispiele:
  
     1. ''Dies ist ein Beispiel für einen Text, __in dem der zweite
          Halbsatz unterstrichen wird__, obwohl er sich über eine
          Zeilengrenze erstreckt.
  
     o. ''__In diesem Fall wird der line block unterstrichen. Das
            geht solange, bis der Text wieder ausgerückt wird.
  
            Auch Leerzeilen stellen da kein Hindernis dar.
  
          Diese Zeile beendet den Line Block.
  
     o. ''Ein Sonderfall: __Dieser Text hat kein Ende-1d-Tag.
          Er wird dann durch das Paragraph-Ende beendet.
  
          Ab hier also keine Unterstreichung mehr.
  
     Das haben wir gemacht, weil sonst bei vergessenen Endetags
     das Restdokument fehlformatiert wird.
          
  o  Native-Output-Stuff
     xxxx
  
     ``jdjlasdjajlad``
     skd asdk s
     dsö ksaölkdaös##
  
     dfkdjsdal
       html
  
     xxxx
  
     ##endif
     
     xxxx
  
  o  Comments
     ##//
     ##/*
     ##*/
  
  5. Inline-Images
     - Source ist immer Bitmap-Grafik im GIF Format!
       (Fuer ASCII: gifscii, Fuer HTML: Direkt, Fuer PS: gif2ps)
  
       ##img xx.gif size=jsjs s=xx
  
  - UNBEDINGT Unicode und UTF-8 unterstutezen von anfang an!
  
  Idea for homogenous tags:
  - any XX tags can be repeated multiple times, ie XXXXX is valid also
  - any begin XX tag at the end of a paragraph wraps around its scope, ie
    it is applied to the whole paragraph as it would stand at the start
    of the block (marged out?).
  Results:
  - headlines are marked equally with blocks
  
  ------------------------------------------------------------------------------
  
  OSSP Sugar Brainstorming Meeting 27-06-2001 @ C&W
  =================================================
  
  gewuenschter output: html (online), text, pdf/ps (print)
      |sugar, soll schnell sein fuer preview, 1-2sec
  gewuenschter input: simple (20-30 tags), wenig Stilmittel, aehnlich textoutput
  
  *eindeutige* Tags in SXML
  SRML invisible markup
  
  pre-processing
     pass 1: include, macros,
     pass 2: area substitution, diversion
  meta-information
     author, mtime, ctime, title, abstract, subject, version
     parameters passthrough for backends
  2d-block
     headings 1-4
     paragraph
     align left, right, centered, indented(?)
     preformatting
     lists, ordered/callout, unordered, description
     import extern(URL)/embedded vs. include
     figures format(EPS,PNG,TXT), scaling
     tables, titlerow, rows, columns, cells, spanning, hlines, vlines, nesting
     caption
  2+1d block
     verbatim
     boxed, striked, tele-typed
     logical markup (emphasize, nonbreaking)
     notes foot, end, margin
     shellescape
  1d-block
     bold, italic, underline
     escaping(?)
     linebreaks(?)
     subscript, superscript
     anchores, references intern, extern
     index items
     word-breaking
     entitities (ISO chars, newline, etc.)
  
  o no align (left, center, right, indented) in general
    only needed in tables
    idea: first line specified table layout like TeX
  o eventuell: kein escaping, man koennte verbatim hernehmen
    aber: wie escape ich dann verbatim tag!
  o eventuell kein linebreak, da normaler linebreak
    eher neuer paragrpah sein sollte und fuer andere
    preformatted ausreicht!
  
  o generell sugar koennte immer SXML sein, aber
    abkuerzend koennte es SRML Teile enthalten
  o 
  
  ------------------------------------------------------------------------------
  
  Ideas from AFT:
  
  - non-intended verbatim mode with optional filtering for pretty-printing
    | ^<<[filter]
    | ^>>
  
  - a pre-formatted mode would be cool, too.
  
  ------------------------------------------------------------------------------
    XML-FO 
  
    panda+pandascript (C API, Perl API, Shell API, GPL)
    http://www.stillhq.com/cgi-bin/getpage?area=panda&page=index.htm
  
    pdflib  http://www.pdflib.com/
    clibpdf http://www.fastio.com/
    
  Index: ossp-pkg/sugar/FEATURES.txt
  ============================================================
  $ cvs update -p -r1.1 FEATURES.txt
  
                                 SXML        SRML
  o document information
    - title                      <ti>        Title:
    - subtitle                   <st>        Subtitle:
    - author                     <au>        Author:
    - date                       <da>        Date:
    - abstract                   <ab>        Abstract:
  
  o heading
    - levels 1-4                 <h[1-4]>    == -- ~~ ..
  
  o list
    - unordered list             <ul>        o  -  *
    - ordered list               <ol>        o. -. *.
      . list items               <li>        
    - description list           <dl>
      . description term         <dt>        .. ::
      . description text         <dd>
  
  o table                        <ta>        ++
    - table rows                 <tr>        
    - table columns/cells        <tc>        |
    - column/row spanning        
    - column title               <t?>
  
  o character formatting 
    - logical formatting
      . emphasized text          <em>        !!
      . tele-typed text          <tt>        ''   or ||
    - visual formatting
      . bold text                <bo>        **
      . underlined text          <ul>        __
      . italic text              <it>        //   or ''
      . boxed text               <bx>        [[
      . super-scripting                      ^^
      . sub-scripting                        ;;
  
  o text formatting
      . line break               <br>        \\
      . aligned                  <al>        (( %% ))
      . indented                 <in>        >>
      . pre-formatted            <pf>        && or $$ or §§ or "" or °° or ??
  
  o cross-referencing 
    - anchor                     <an>        (+..+)
    - reference                  <xr>        ->..(..) or ->[..:]..<-
  
  o comments                     <co>        ##
  
  o entities                     <en>        {{name[ param=value ...]}}
    - figure                                 {{figure src="..." format=eps}}
    - embedded object                        {{eo src=".."}}
    - passed-through                         {{pass format=html value="<br>"}}
  
  #   o 1d-Blocks
  #     <tag> <text> <tag>
  #     <tag> <text> 
  #     <text> <tag>
  #   o 2d-Blocks
  #     <ws> <tag> <text>
  #     [<ws> <ws> <text>]
  #       :
  #   tags am Ende eines 1-dim Blocks wrappen an den Anfang!
  #   tags koennen 2 oder mehr ihrer Sonderzeichen lang sein
  #   (tags koennen auch in reverse order sein fuer symmetrie (+ +) -> <-)
  #   ende von 1d-block ist leerzeile
  #   ende von 2d-block ist ausrueckung
  
  Index: ossp-pkg/sugar/Makefile
  ============================================================
  $ cvs update -p -r1.1 Makefile
  
  all: validate transform
  
  validate:
  	xmllint --valid --noout test.sxml
  
  transform:
  	xsltproc --nonet sxml2html.xsl test.sxml
  
  Index: ossp-pkg/sugar/README
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 README
  --- ossp-pkg/sugar/README	14 Sep 2000 15:51:52 -0000	1.1.1.1
  +++ ossp-pkg/sugar/README	13 Mar 2002 09:19:03 -0000	1.2
  @@ -4,8 +4,33 @@
     |___/\__,_|\__, |\__,_|_|   
     __________ |___/ ___________________________________________________ 
   
  -  Sugar -- The Markup Language With Invisible Syntactic Sugar
  +  OSSP sugar -- The Markup Language With Invisible Syntactic Sugar
  +  Copyright (c) 1999-2002 Ralf S. Engelschall
  +  Copyright (c) 1999-2002 Christian Reiber
   
  -  Copyright (c) 1999-2000 Ralf S. Engelschall
  -  Copyright (c) 1999-2000 Christian Reiber
  +  o Extensible Markup Language (XML)
  +    http://www.w3.org/XML/
  +    http://www.xml.com/
  +
  +  o Extensible Stylesheet Language (XSL)
  +    http://www.w3.org/Style/XSL/
  +    http://www.xslt.com/
  +
  +  o XML 1.0 Specification
  +    http://www.w3.org/TR/2000/REC-xml-20001006
  +
  +  o XSL 1.0 Specification
  +    http://www.w3.org/TR/xsl/
  +
  +  o XSL Transformations 1.0 Specification
  +    http://www.w3.org/TR/xslt/
  +
  +  o XPath 1.0 Specification
  +    http://www.w3.org/TR/xpath
  +
  +  o XLink 1.0 Specification
  +    http://www.w3.org/TR/2001/REC-xlink-20010627/
  +
  +  o XPointer 1.0 Specification
  +    http://www.w3.org/TR/2001/WD-xptr-20010108/
   
  Index: ossp-pkg/sugar/srml2sxml
  ============================================================
  $ cvs update -p -r1.1 srml2sxml
  #!/usr/bin/perl
  ##
  ##  srml2sxml -- Sugar SRML to SXML Translation
  ##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  require 5.005;
  $|++;
  
  my $tags1d = {
      '=='        => [ '<span class=h1>',   '</span>'       ],
      '--'        => [ '<span class=h2>',   '</span>'       ],
      '~~'        => [ '<span class=h3>',   '</span>'       ],
      '..'        => [ '<span class=h4>',   '</span>'       ],
  
      '**'        => [ '<b>',               '</b>'          ],
      '//'        => [ '<i>',               '</i>'          ],
      '__'        => [ '<ul>',              '</ul>'         ],
      '[['        => [ '<boxed>',           '</boxed>'      ],
      '||'        => [ '<tt>',              '</tt>'         ],
      '!!'        => [ '<verbatim>',        '</verbatim>'   ],
  
      '(+'        => [ '<anchor>',          '</anchor>'     ],
      '->'        => [ '<xref>',            '</xref>'       ],
  };
  
  my $alias1d = {
      '+)' => '(+',
      '<-' => '->',
      ']]' => '[[',
  };
  
  my $tags2d = {
      '=='        => [ '<h1>',              '</h1>'         ],
      '--'        => [ '<h2>',              '</h2>'         ],
      '~~'        => [ '<h3>',              '</h3>'         ],
      '..'        => [ '<h4>',              '</h4>'         ],
      '**'        => [ '<b>',               '</b>'          ],
      '//'        => [ '<i>',               '</i>'          ],
      '__'        => [ '<ul>',              '</ul>'         ],
      '[['        => [ '<boxed>',           '</boxed>'      ],
      '||'        => [ '<pre>',             '</pre>'        ],
      '!!'        => [ '<verbatim>',        '</verbatim>'   ],
  
      '>>'        => [ '<blockquote>',      '</blockquote>' ],
      '(('        => [ '<align to=left>',   '</align>'      ],
      '%%'        => [ '<align to=center>', '</align>'      ],
      '))'        => [ '<align to=right>',  '</align>'      ],
  
      '++'        => [ '<table>',           '</table>'      ],
      '##'        => [ '<comment>',         '</comment>'    ],
  
      '$$'        => [ '<list>',            '</list>'       ],
      'o '        => [ '<item type=ul>',    '</item>'       ],
      '- '        => [ '<item type=ul>',    '</item>'       ],
      'o.'        => [ '<item type=ol>',    '</item>'       ],
      '-.'        => [ '<item type=ol>',    '</item>'       ],
      '::'        => [ '<item type=dl>',    '</item>'       ],
  
      'Title:'    => [ '<title>',           '</title>'      ],
      'Author:'   => [ '<author>',          '</author>'     ],
      'Genesis:'  => [ '<genesis>',         '</genesis>'    ],
      'Date:'     => [ '<date>',            '</date>'       ],
      'Abstract:' => [ '<abstract>',        '</abstract>'   ],
  };
  
  my $alias2d = {
      '[]' => '[[',
  };
  
  my $escapes = {
      '&' => '&amp;',
      '<' => '&lt;',
      '>' => '&gt;',
  };
  
  #   assemble mega-regex which matches all 1d-tags
  my $tag1d = &assemble_regex((keys(%{$tags1d}),keys(%{$alias1d})));
  my $tag2d = &assemble_regex((keys(%{$tags2d}),keys(%{$alias2d})));
  sub assemble_regex {
      my (@tags) = @_;
      my $regex = '(?:';
      foreach $tag (sort(@tags)) {
          $regex .= quotemeta($tag)."+|";
      }
      $regex =~ s/\+\|$//;
      $regex .= ')';
      return $regex;
  }
  
  my $escape = '(?:';
  foreach $e (sort(%{$escapes})) {
      $escape .= quotemeta($e)."|";
  }
  $escape =~ s/\|$//;
  $escape .= ')';
  
  sub expandtab {
      my ($ts, $str) = @_;
      my $i = 0;
      my $k;
      $str =~ s|(.)
               |($1 eq "\t" 
                 ? ($k = $i % $ts, 
                    $i += ($ts - $k), 
                    "*" x ($ts - $k) ) 
                 : ($i++, $1)
                )
               |sgex;
      return $str;
  }
  
  #   <document>     ::= <blockgroup>* 
  #   <blockgroup>   ::= <block>*
  #   <block>        ::= <para> | <2d-block>
  #   <2d-block>     ::= <2d-tag> <document>
  #   <2d-tag>       ::= m/^\s*XY+\s+/
  #   <para>         ::= <1d-block>*
  #
  #   <blockgroup> und <para> koennen degenerieren
  #   auf genau einen, d.h. z.B.
  #   <blockgroup> == 1 <para>  oder <para> == 1 <1d-block>
  #   
  #   1d-block:
  #   foo bar
  #   **baz 
  #   quux
  #
  #   2d-block
  #   ** baz
  #   quux
  #
  #   -> blank lines zwischen 2d-blocks koennen entfallen!
  #   -> blank lines wenn da sind markieren paragraphen
  #      und schliessen 1d block ab
  
  sub parse_srml {
      my ($srml) = @_;
      my $sxml = '';
  
      while ($srml ne '') {
          #   stop at end of input
          if ($srml =~ m|^(\s*)$|s) {
              $sxml .= $1; 
              $srml = '';
              last;
          }
  
          #   pass through blank lines
          elsif ($srml =~ m|^((?: *\n)+)(.*)$|s) {
              $sxml .= $1;
              $srml  = $2;
          }
  
          #   recognize 2-dimensional block start
          elsif ($srml =~ m|^( *)($tag2d)( +[^\n]*)?(.*)$|s) {
              my ($prefix, $tag, $block) = ($1, $2, $3);
              $block = $prefix . $block;
              $srml = $4;
  
              #   reduce tag to canonical 2-character form
              $tag =~ s|^(.)(.)\2+$|$1$2|s;
              if (defined($alias2d->{$tag})) {
                  $tag = $alias2d->{$tag};
              }
  
              #   gather block lines
              #   (same or less indent indicates end)
              my $minindent = length($prefix)+1;
              while ($srml =~ m/^((?: *| {$minindent,}[^\n]+)\n)(.*)$/s) {
                  $block .= $1;
                  $srml   = $2;
              }
              $block = &parse_srml($block);
              $block =~ s|^(\s*)(.*?)(\s*)$|
                          $1 . $tags2d->{$tag}->[0] . 
                          $2 . $tags2d->{$tag}->[1] . $3|se;
              $sxml .= $block;
          }
  
          #   anything else we treat as a 1-dimensional block start
          else {
              #   gather block lines
              #   (a blank line indicates end)
              my $block = '';
              while ($srml =~ m/^( *[^ \n][^\n]*\n)(.*)$/s) {
                  $block .= $1;
                  $srml   = $2;
              }
  
              print STDERR "1D<<$block>>\n";
  
              #   escape special XML characters
              $block =~ s|($escape)|$escapes->{$1}|sge;
  
              #   sequencially walk through 1-dimensional block
              my $sxml_local = '';
              my @active = ();
              while ($block =~ m|^(.*?)($tag1d)(.*)$|s) {
                  my ($prolog, $tag, $epilog) = ($1, $2, $3);
                  $sxml_local .= $prolog;
                  $block = $epilog;
  
                  #   reduce tag to canonical 2-character form
                  $tag =~ s|^(.)(.)\2+$|$1$2|s;
                  if (defined($alias1d->{$tag})) {
                      $tag = $alias1d->{$tag};
                  }
  
                  #   look on stack of still active tags
                  my $active = '';
                  if ($#active > -1) {
                      $active = pop(@active); 
                  }
  
                  if ($active eq $tag) {
                      #   close the currently active tag
                      $sxml_local .= $tags1d->{$tag}->[1];
                  }
                  else {
                      #   open a new active tag
                      if ($block =~ m|^\s*$|s) {
                          #   tag wraps around
                          $sxml_local =~ s|^(\s*)(.*?)(\s*)$|
                                           $1 . $tags1d->{$tag}->[0] . 
                                           $2 . $tags1d->{$tag}->[1] . $3|se;
                      }
                      else {
                          $sxml_local .= $tags1d->{$tag}->[0];
                          push(@active, $active) if ($active ne '');
                          push(@active, $tag);
                      }
                  }
              }
              
              #   post-processing for implicitly to-be-closed tags
              my $trailer = '';
              if ($block =~ m|^(.*)(\s+)$|s) {
                  ($block, $trailer) = ($1, $2);
              }
              $sxml_local .= $block;
              while ($#active > -1) {
                  my $active = pop(@active);
                  $sxml_local .= $tags1d->{$active}->[1];
              }
              $sxml_local .= $trailer;
              
              $sxml .= $sxml_local;
          }
      }
      return $sxml;
  }
  
  my $srml = '';
  $srml .= $_ while (<STDIN>);
  $srml =~ s|\n$||s;
  $srml .= "\n";
  $srml = &expandtab(8, $srml);
  
  my $sxml = '';
  $sxml .= "<sugar>";
  $sxml .= &parse_srml($srml);
  $sxml .= "</sugar>\n";
  print $sxml;
  
  Index: ossp-pkg/sugar/sugar.fig
  ============================================================
  $ cvs update -p -r1.1 sugar.fig
  #FIG 3.2
  Landscape
  Center
  Inches
  Letter  
  100.00
  Single
  -2
  1200 2
  0 32 #f0f0ff
  0 33 #d0d0e0
  0 34 #a0a0c0
  0 35 #cccccc
  0 36 #999999
  0 37 #cccccc
  0 38 #999999
  0 39 #b2b2b2
  2 2 0 1 33 32 100 0 20 0.000 0 0 -1 0 0 5
  	 6000 900 7200 900 7200 2100 6000 2100 6000 900
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
  	1 1 2.00 60.00 120.00
  	 5400 1500 6000 1500
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
  	1 1 2.00 60.00 120.00
  	 6600 2100 6600 2700
  2 2 0 1 33 32 100 0 20 0.000 0 0 -1 0 0 5
  	 6000 3900 7200 3900 7200 5100 6000 5100 6000 3900
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
  	1 1 2.00 60.00 120.00
  	 6600 3300 6600 3900
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 4
  	 6600 4050 6375 4200 6225 4425 6150 4725
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 4
  	 6600 4050 6825 4200 6900 4425 6975 4725
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 3
  	 6825 4200 6750 4425 6750 4725
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
  	 6600 4200 6675 4350
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 4
  	 6600 4050 6600 4200 6525 4350 6600 4575
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
  	 6375 4200 6450 4425
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
  	1 1 2.00 60.00 120.00
  	 6600 5100 6600 5700
  2 4 0 1 34 33 100 0 20 0.000 0 0 7 0 0 5
  	 5400 1800 4200 1800 4200 1200 5400 1200 5400 1800
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
  	1 1 2.00 60.00 120.00
  	 3600 1500 4200 1500
  2 2 0 1 33 32 100 0 20 0.000 0 0 -1 0 0 5
  	 2400 900 3600 900 3600 2100 2400 2100 2400 900
  2 4 0 1 34 33 100 0 20 0.000 0 0 7 0 0 5
  	 7200 6300 6000 6300 6000 5700 7200 5700 7200 6300
  2 4 0 1 34 33 100 0 20 0.000 0 0 7 0 0 5
  	 7200 3300 6000 3300 6000 2700 7200 2700 7200 3300
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
  	 7200 6000 7800 6000
  2 2 0 1 33 32 100 0 20 0.000 0 0 -1 0 0 5
  	 8100 5400 9300 5400 9300 6600 8100 6600 8100 5400
  2 1 2 4 0 7 50 0 -1 7.500 0 1 -1 0 0 2
  	 8700 8250 8700 8550
  2 2 0 1 33 32 100 0 20 0.000 0 0 -1 0 0 5
  	 8100 6900 9300 6900 9300 8100 8100 8100 8100 6900
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
  	1 1 2.00 60.00 120.00
  	 9300 4500 9900 4500
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
  	1 1 2.00 60.00 120.00
  	 9300 7500 9900 7500
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
  	1 1 2.00 60.00 120.00
  	 9300 6000 9900 6000
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
  	 7650 4500 7650 7500
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
  	1 1 2.00 60.00 120.00
  	 7650 4500 8100 4500
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
  	1 1 2.00 60.00 120.00
  	 7500 6000 8100 6000
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
  	1 1 2.00 60.00 120.00
  	 7650 7500 8100 7500
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
  	1 1 2.00 60.00 120.00
  	 5400 6000 6000 6000
  2 2 0 1 33 32 100 0 20 0.000 0 0 -1 0 0 5
  	 4200 2700 5400 2700 5400 3300 4200 3300 4200 2700
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
  	1 1 2.00 60.00 120.00
  	 5400 3000 6000 3000
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
  	 5400 5100 5700 5100
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
  	 5400 6900 5700 6900
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
  	 5700 5100 5700 6900
  2 2 0 1 33 32 100 0 20 0.000 0 0 -1 0 0 5
  	 4200 5700 5400 5700 5400 6300 4200 6300 4200 5700
  2 2 0 1 33 32 100 0 20 0.000 0 0 -1 0 0 5
  	 4200 4800 5400 4800 5400 5400 4200 5400 4200 4800
  2 2 0 1 33 32 100 0 20 0.000 0 0 -1 0 0 5
  	 4200 6600 5400 6600 5400 7200 4200 7200 4200 6600
  2 1 2 4 0 7 50 0 -1 7.500 0 1 -1 0 0 2
  	 4800 7350 4800 7650
  2 2 2 1 34 7 50 0 -1 1.000 0 0 -1 0 0 5
  	 4050 900 5550 900 5550 7800 4050 7800 4050 900
  2 4 0 1 34 33 100 0 20 0.000 0 0 7 0 0 5
  	 11100 4800 9900 4800 9900 4200 11100 4200 11100 4800
  2 4 0 1 34 33 100 0 20 0.000 0 0 7 0 0 5
  	 11100 6300 9900 6300 9900 5700 11100 5700 11100 6300
  2 4 0 1 34 33 100 0 20 0.000 0 0 7 0 0 5
  	 11100 7800 9900 7800 9900 7200 11100 7200 11100 7800
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
  	1 1 2.00 60.00 120.00
  	 11100 6000 11700 6000
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
  	1 1 2.00 60.00 120.00
  	 11100 7500 11700 7500
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
  	1 1 2.00 60.00 120.00
  	 11100 4500 11700 4500
  2 2 0 1 29 30 100 0 20 0.000 0 0 -1 0 0 5
  	 11700 3900 12900 3900 12900 5100 11700 5100 11700 3900
  2 2 0 1 33 32 100 0 20 0.000 0 0 -1 0 0 5
  	 11700 5400 12900 5400 12900 6600 11700 6600 11700 5400
  2 2 0 1 29 30 100 0 20 0.000 0 0 -1 0 0 5
  	 11700 6900 12900 6900 12900 8100 11700 8100 11700 6900
  2 2 0 1 29 30 100 0 20 0.000 0 0 -1 0 0 5
  	 8100 3900 9300 3900 9300 5100 8100 5100 8100 3900
  2 2 0 1 29 30 100 0 20 0.000 0 0 -1 0 0 5
  	 13500 6150 14700 6150 14700 7350 13500 7350 13500 6150
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
  	1 1 2.00 60.00 120.00
  	 12900 5550 13500 5550
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
  	1 1 2.00 60.00 120.00
  	 12900 7950 13500 7950
  2 4 0 1 34 33 100 0 20 0.000 0 0 7 0 0 5
  	 14700 8400 13500 8400 13500 7800 14700 7800 14700 8400
  2 4 0 1 34 33 100 0 20 0.000 0 0 7 0 0 5
  	 14700 5700 13500 5700 13500 5100 14700 5100 14700 5700
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
  	1 1 2.00 60.00 120.00
  	 14100 5700 14100 6150
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
  	1 1 2.00 60.00 120.00
  	 14100 7800 14100 7350
  2 4 0 1 34 33 200 0 20 0.000 0 0 7 0 0 5
  	 7350 6900 5850 6900 5850 2550 7350 2550 7350 6900
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
  	1 1 2.00 60.00 120.00
  	 3000 450 3000 900
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
  	1 1 2.00 60.00 120.00
  	 6600 450 6600 900
  2 1 0 1 37 7 50 0 -1 0.000 0 0 -1 1 0 4
  	1 1 2.00 60.00 120.00
  	 11100 6150 11400 6150 11400 7350 11700 7350
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
  	1 1 2.00 60.00 120.00
  	 9300 8025 9900 8025
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
  	1 1 2.00 60.00 120.00
  	 11100 7950 11700 7950
  2 4 0 1 34 33 100 0 20 0.000 0 0 7 0 0 5
  	 11100 8175 9900 8175 9900 7875 11100 7875 11100 8175
  2 2 0 1 29 30 100 0 20 0.000 0 0 -1 0 0 5
  	 11700 8400 12900 8400 12900 9600 11700 9600 11700 8400
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
  	1 1 2.00 60.00 120.00
  	 11100 8700 11700 8700
  2 4 0 1 34 33 100 0 20 0.000 0 0 7 0 0 5
  	 11100 8850 9900 8850 9900 8550 11100 8550 11100 8850
  2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 3
  	1 1 2.00 60.00 120.00
  	 9000 8100 9300 8700 9900 8700
  4 0 0 50 0 16 12 0.0000 4 180 990 6150 3225 XML parser\001
  4 0 0 50 0 18 12 0.0000 4 135 510 6300 2925 libxml\001
  4 0 0 50 0 16 12 0.0000 4 135 525 6375 1950 SXML\001
  4 0 0 50 0 12 10 0.0000 4 105 270 6450 4725 foo\001
  4 0 0 50 0 16 12 0.0000 4 135 780 6225 5025 XML tree\001
  4 0 0 50 0 16 12 0.0000 4 180 1095 6075 6225 XSLT engine\001
  4 0 0 50 0 18 12 0.0000 4 135 525 6300 5925 libxslt\001
  4 0 0 50 0 18 12 0.0000 4 135 915 4350 1575 srml2sxml\001
  4 0 0 50 0 12 10 0.0000 4 135 810 2625 1350 _ _foo_ _\001
  4 0 0 50 0 16 12 0.0000 4 135 510 2700 2025 SRML\001
  4 0 0 50 0 12 10 0.0000 4 120 1080 6150 1350 <ul>foo</ul>\001
  4 0 0 50 0 12 10 0.0000 4 120 900 8325 4275 <u>foo</u>\001
  4 0 0 50 0 16 12 0.0000 4 135 510 8400 5025 HTML\001
  4 0 0 50 0 12 10 0.0000 4 135 1350 8100 5925 \\underline{foo}\001
  4 0 0 50 0 16 12 0.0000 4 135 555 8400 6525 LaTeX\001
  4 0 0 50 0 16 12 0.0000 4 135 750 8325 8025 XML-FO\001
  4 0 0 50 0 12 10 0.0000 4 120 1620 7950 7350 <fo:ul>foo</fo:ul>\001
  4 0 0 50 0 16 12 0.0000 4 135 960 4350 3075 SXML DTD\001
  4 0 0 50 0 16 10 0.0000 4 120 945 4350 5025 SXML2HTML\001
  4 0 0 50 0 16 10 0.0000 4 120 945 4350 5925 SXML2LaTeX\001
  4 0 0 50 0 16 12 0.0000 4 180 870 4350 6150 Stylesheet\001
  4 0 0 50 0 16 12 0.0000 4 180 870 4350 5250 Stylesheet\001
  4 0 0 50 0 16 10 0.0000 4 120 1065 4350 6825 SXML2XMLFO\001
  4 0 0 50 0 16 12 0.0000 4 180 870 4350 7050 Stylesheet\001
  4 0 0 50 0 18 12 0.0000 4 135 600 10200 7425 xmltex\001
  4 0 0 50 0 16 10 0.0000 4 150 885 10125 7650 (PassiveTex)\001
  4 0 0 50 0 18 12 0.0000 4 180 840 10125 6075 [pdf]latex\001
  4 0 0 50 0 18 12 0.0000 4 135 435 10275 4575 w3m\001
  4 0 0 50 0 12 10 0.0000 4 105 270 12150 4425 foo\001
  4 0 0 50 0 16 12 0.0000 4 135 345 12075 5025 Text\001
  4 0 0 50 0 12 10 0.0000 4 105 270 12150 5925 foo\001
  4 0 0 50 0 16 12 0.0000 4 135 315 12075 6525 DVI\001
  4 0 0 50 0 12 10 0.0000 4 105 270 12150 7425 foo\001
  4 0 0 50 0 16 12 0.0000 4 135 375 12150 8025 PDF\001
  4 0 0 50 0 16 12 0.0000 4 180 810 13725 7275 Postscript\001
  4 0 0 50 0 12 10 0.0000 4 105 270 13875 6600 foo\001
  4 0 0 50 0 18 12 0.0000 4 150 210 13950 8100 gs\001
  4 0 0 50 0 18 12 0.0000 4 180 480 13875 5475 dvips\001
  4 0 0 50 0 16 10 0.0000 4 150 945 13650 8250 (Ghostscript)\001
  4 0 0 50 0 18 24 0.0000 4 360 3360 9300 1200 Sugar Architecture\001
  4 0 34 50 0 16 10 0.0000 4 150 1260 4200 7950 to be implemented\001
  4 0 0 50 0 18 12 0.0000 4 135 840 6225 6750 sxml2xxx\001
  4 0 0 50 0 16 10 0.0000 4 150 3330 9300 1425 OSSP Sugar <http://www.ossp.org/pkg/sugar/>\001
  4 0 0 50 0 18 12 0.0000 4 135 375 10275 8100 FOP\001
  4 0 0 50 0 12 10 0.0000 4 105 270 12150 8850 foo\001
  4 0 0 50 0 16 12 0.0000 4 135 345 12150 9525 RTF\001
  4 0 0 50 0 18 12 0.0000 4 180 300 10350 8775 jfor\001
  Index: ossp-pkg/sugar/sugar.sug
  ============================================================
  $ cvs update -p -r1.1 sugar.sug
  
    Sugar - The Markup Language With Invisible Syntactic Sugar
    ==========================================================
  
    Title:    Sugar
    Subtitle: The Markup Language With Invisible Syntactic Sugar
    Author:   Ralf S. Engelschall <rse@engelschall.com>
    Author:   Christian Reiber <chrei@krischan.org>
    Genesis:  12-Mar-1999
    Date:     08-Mar-2002
    
    Introduction
    ------------
  
    Sugar is a markup language and corresponding translator tool for
    writing technical documentation that uses mostly invisible markup
    tags (the so-called //syntactic sugar// in compiler construction folk
    terminology).
    
    The general idea is that the markup text looks already mostly like
    the textual output of the translator phase, that is, the Sugar source
    can be already treated as its text output format ("ASCII WYSIWYG").
    Additionally the Sugar markup language is considered intuitive enough
    to be recognized easily, so writing technical documentation is mainly
    just a matter of performing a brain dump.
  
    So, Sugars syntactic principle is "keep it simple, stupid" (KISS)
    but still powerful enough to allow one to produce high-quality
    output. Sugars goal is not to provide all features of a full-featured
    documentation system. Instead it provides only a few markup concepts
    but those are streched to their maximum.
  
    Sugar Grammar
    -------------
  
    A Sugar document is described by the following grammar:
  
    ++ |                |     |                                    |
       | <document>     | ::= | <block>*                           |
       | <block>        | ::= | <tagged-block> \| <regular-block>  |
       | <tagged-block> | ::= | <1d-block> \| <2d-block>           |
       | <1d-block>     | ::= | <1d-tag> <document>                |
       | <2d-block>     | ::= | <2d-tag> <document>                |
       | <1d-tag>       | ::= | "!!##!!" \| "!!\|\!!|" \| "!!``!!" \| "!!''!!" \| ... |
       | <2d-tag>       | ::= | "!!**!!" \| ...                    |
  
    where <regular-block> is defined visually as a rectangular block
    of continued text inside the document, that is a paragraph of
    text (without any blank lines) where each line starts at the same
    indentation position.
  
    Block Concept
    -------------
  
    \n\s*<tag>\s+ -> <2d-tag>
         <tag>    -> <1d-tag>
  
    Markup Language
    ---------------
  
    The Sugar markup language consists of markup tags grouped into a few
    classes:
    
    o ..Formatting..
  
      For visual formatting of text the following tags exists. They can
      be used either as a <1d-tag>, inlined in a paragraph by using them
      twice (to delimit begin and end) or as a <2d-tag> for marking
      up a whole block by using them in marched-out way (to delimit
      the indented block). The tags (and any number of concatenated
      repetitions of them) are also allowed to be placed at the end of a
      <1d-block>. Then they conver the whole (preceeding) block text.
  
      ++ | tag      | formatting        | allowed context |
         | !!__!!   | underline         | inline          |
         | !!**!!   | bold              | inline          |
         | !!//!!   | italics           | inline          |
         | !!''!!   | code              | inline, block   |
         | !!==!!   | header (level I)  | block           |
         | !!--!!   | header (level II) | block           |
         | !!~~!!   | header (level III)| block           |
         | !!..!!   | header (level IV) | block           |
         | !!\!\!!! | verbatim          | inline, block   |
         | !![[!!   | boxed             | block           |
         | !!>>!!   | indented          | block           |
         | !!%%!!   | centered          | block           |
         | !!))!!   | right flushed     | block           |
         | !!((!!   | left flushed      | block           |
  
      Example:
  
      !! A headline
         ==========
         
         This line contains //italic// and **bold** words.
         >> '' And this paragraph contains
               indented code.
         And this line again is __non-indented__ text.
  
    o ..Links and References..
  
      For referencing textual locations (both document internal and to
      external documents), links can be specified.
  
      ++ | construct | description |
         | !!->!![//text//]!!(!!//scheme//!!:!!//path//!!)!! |
           external hyperlink via URL |
         | !!->!!//text//!!(!!//ref//!!)!! |
           internal hyperlink via anchor name |
         | !!(+!!//ref//!!+)!! |
           internal anchor definition |
  
      Example:
  
      !! Header A (+hA+)
         -------- 
  
         This is text of header A. For B see ->header B(hB).
         For Sugar go to ->(http://www.ossp.org/pkg/tool/sugar/).
  
         Header B (+hB+)
         --------
  
         This is text of header B. For A see ->header A(hA).
         For other neat things watch ->OSSP(http://www.ossp.org/).
  
    o ..List Environment..
    
      Three types of list environments can be used. They are identified
      by the first non-blank word in the first line of each list item.
      For ordered lists the start position is selectable by specifying an
      explicit digit instead of the generic item character.
  
      ++ | construct      | alternatives                 | type       |
         | !!-!!          | !!o!!, !!*!!                 | unordered  |
         | !!-.!!         | !!o.!!, !!*.!!,  m/[0-9]+\./ | ordered    |
         | <block> !!::!! |                              | itemized   |
  
      Example:
  
      !! A Sugar list:
         1. foo 
         o. bar
            - baz
            - foobar
         o. quux
  
    o ..Table Environment..
  
      A generic table environment is provided for any type of data which
      has to be rendered in a tabular layout. A table is a <2d-block>
      starting with a !!++!! tag. 
      
      The contents of the <2d-block> consists of a 2-dimensional table
      specified by cells. The table cells are seperated by ''|''
      characters. Every row has to start with a ''|'' at the same
      horizontal position. The number of columns is indicated by the
      first table row. This first row can be either a complete (all cells
      are specified) and regular (the contents is used) row, or (in case
      the first //regular// row is not a complete one, that is, it has
      multi-column cell spans), the first row can be an empty row (all
      cells are specified for indication but are left blank).
  
      The ''|'' marks can be placed arbitrary in each row, but if
      multi-column spans exists, the surrounding ''|'' marks have to be
      placed exactly at the same horizontal character position as the
      first table row has (else the multi-column cells are ambiguous).
      Empty rows can be indicated by using just the starting ''|'' mark.
  
      Example:
  
      !! 
         ++ |     |        |      |
            | foo | !!bar  | quux |
            |
            | foo | baz 
                    bar    | quux |
            | bazfoo
            fjfjkwq
            rwrqwd sddksjk
                  | dsdjks
                           | foo  |
            | dsdsds              |
  
  ____
      
    o ..Special Formatting..
  
      ''  quotemeta
      ##  command         (charblock until EOL)
      ``  shell command   (charblock until EOL)
  
    o ..Escaping and Special Characters..
  
      --   em-dash      (ger. "Gedankenstrich")
      \_   strong blank (prevents line break as in HTML's &nbsp;)
      \n   line break   (as in HTML's <br>)
      \\   a backslash  (there no block concept!)
      \X   escapes following character X
      \{name} 
  
    o ..Commands (all charblock until EOL)..
  
      ##! <shebang>
      ##include
      ##// line comment
      ##/* block comment anfang
      ##*/ block comment ende
      ##if
      ##elsif
      ##endif
      ##img ...
      ##<formatierung> [range]
  
   
    Sugar Output Formatting
    -----------------------
  
    The Sugar transformation tool parses a Sugar source text, transforms
    it into an internal abstracted syntax tree and finally applies to it a
    particular output formatting module in order to transform the abstract
    syntax tree into target markup language. The target language then is
    either already an end-user document (HTML, Text, etc.) or intended for
    post-processing by external programs (LaTeX, PDF, etc.).
  
    The following outputs are supported:
  
    ++ | sugar output | post-processor(s) | final output         |
       | Text         | -                 | Text                 |
       | HTML         | -                 | HTML                 |
       | Roff         | nroff             | Text                 |
       | Lout         | lout              | Postscript           |
       | PDF          | pdflib            | PDF                  |
       | LaTeX        | latex, dvips      | DVI, Postscript, PDF |
       | XML          | docbook           | ...                  |
       | POD          | pod2xxx           | ...                  |
  
    Index: ossp-pkg/sugar/sxml.cat
  ============================================================
  $ cvs update -p -r1.1 sxml.cat
  <!-- =========================================================== 
       sxml.cat - SGML/XML Catalog for Sugar DTD
       Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
       =========================================================== -->
  
  PUBLIC "-//OSSP//DTD Sugar XML 0.1.0//EN" "sxml.dtd"
  
  Index: ossp-pkg/sugar/sxml.dtd
  ============================================================
  $ cvs update -p -r1.1 sxml.dtd
  <!-- =========================================================== 
       sxml.dtd - Document Type Description (DTD) for Sugar XML 
       Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
       =========================================================== -->
  
  <!-- :::: Formal public identifier to identify this DTD :::: -->
  
  <!ENTITY % SXML.version "-//OSSP//DTD Sugar XML 0.1.0//EN" >
  
  <!-- :::: Include ISO document character entitities :::: -->
  
  <!ENTITY % ISO.entities.load "INCLUDE">
  <![%ISO.entities.load;[
    <!ENTITY % ISO.entities SYSTEM "sxml.iso">
    %ISO.entities;
  ]]>
  
  <!-- :::: Define local DTD parameter entities :::: -->
  
  <!ENTITY % class.emph
      "em|it|bf|sf|sl|tt">
  <!ENTITY % class.inline
      "(#PCDATA|%class.emph;)*">
  <!ENTITY % class.heading
       "h1|h2|h3|h4">
  
  <!-- :::: DTD rule set :::: -->
  
  <!--
     sugar:
       h(ea)d
         ti(tle)
         au(thor)
         da(te)
         ab(stract)
       b(o)d(y)
         h1
           text
           h2
             text
             h3
               text
               h4
                 text
     text:
       ul
       ol
       dl
         li
           text
       ta
         tr
           tc
             text
       fi(gure)
  
     formatting
       ul
       bf
       it
       tt
       bo(xed)
  
       in(dent)
       pf (preformatted)
       al(ign)
  
       an(chor)
       lk (link)
       
       pg (paragraph)
       br (break)
  
    <su>
      <hd>
        <ti>..</ti>
        <au>..</au>
        <da>..</da>
        <ab>
           ....
        </ab>
      </hd>
      <bd>
        <h1>...</h1>
        foo <it>bar</it> ..
        <h2><an name="bar"/></h2>
        <pg/>
        <ta>
          <tr>
            <tc>foo</tc>
            <tc>foo</tc>
          </tr>
        </ta>
        <an href="#bar">foo</an>
      </bd>
    </su>
  
  -->
  
  <!ELEMENT  sugar       (head?,body)>
  
  <!ELEMENT  head        ((title|author|date|abstract)*)>
  <!ELEMENT  body        ANY>
  
  <!ELEMENT  title       (#PCDATA)>
  <!ELEMENT  author      (#PCDATA)>
  <!ELEMENT  date        (#PCDATA)>
  <!ELEMENT  abstract    ANY>
  
  
  <!-- headers of levels 1-4 -->
  <!ELEMENT  h1          (#PCDATA)>
  <!ELEMENT  h2          (#PCDATA)>
  <!ELEMENT  h3          (#PCDATA)>
  <!ELEMENT  h4          (#PCDATA)>
  
  <!-- emphasized text -->
  <!ELEMENT  em          (#PCDATA)>
  
  <!-- tele-typed text -->
  <!ELEMENT  tt          (#PCDATA)>
  
  Index: ossp-pkg/sugar/sxml.iso
  ============================================================
  $ cvs update -p -r1.1 sxml.iso
  <!-- iso-amsa.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
  
  <!-- Derived from the corresponding ISO 8879 standard entity set
       and the Unicode character mappings provided by Sebastian Rahtz
       With additional derivations from
       ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/MISC/SGML.TXT -->
  
  <!ENTITY cularr	"&#x21B6;"> <!-- ANTICLOCKWISE TOP SEMICIRCLE ARROW -->
  <!ENTITY curarr	"&#x21B7;"> <!-- CLOCKWISE TOP SEMICIRCLE ARROW -->
  <!ENTITY dArr	"&#x21D3;"> <!-- DOWNWARDS DOUBLE ARROW -->
  <!ENTITY darr2	"&#x21CA;"> <!-- DOWNWARDS PAIRED ARROWS -->
  <!ENTITY dharl	"&#x21C3;"> <!-- DOWNWARDS HARPOON WITH BARB LEFTWARDS -->
  <!ENTITY dharr	"&#x21C2;"> <!-- DOWNWARDS HARPOON WITH BARB RIGHTWARDS -->
  <!ENTITY lAarr	"&#x21DA;"> <!-- LEFTWARDS TRIPLE ARROW -->
  <!ENTITY Larr	"&#x219E;"> <!-- LEFTWARDS TWO HEADED ARROW -->
  <!ENTITY larr2	"&#x21C7;"> <!-- LEFTWARDS PAIRED ARROWS -->
  <!ENTITY larrhk	"&#x21A9;"> <!-- LEFTWARDS ARROW WITH HOOK -->
  <!ENTITY larrlp	"&#x21AB;"> <!-- LEFTWARDS ARROW WITH LOOP -->
  <!ENTITY larrtl	"&#x21A2;"> <!-- LEFTWARDS ARROW WITH TAIL -->
  <!ENTITY lhard	"&#x21BD;"> <!-- LEFTWARDS HARPOON WITH BARB DOWNWARDS -->
  <!ENTITY lharu	"&#x21BC;"> <!-- LEFTWARDS HARPOON WITH BARB UPWARDS -->
  <!ENTITY hArr	"&#x21D4;"> <!--  -->
  <!ENTITY harr	"&#x2194;"> <!-- LEFT RIGHT ARROW -->
  <!ENTITY lrarr2	"&#x21C6;"> <!-- LEFTWARDS ARROW OVER RIGHTWARDS ARROW -->
  <!ENTITY rlarr2	"&#x21C4;"> <!-- RIGHTWARDS ARROW OVER LEFTWARDS ARROW -->
  <!ENTITY harrw	"&#x21AD;"> <!-- LEFT RIGHT WAVE ARROW -->
  <!ENTITY rlhar2	"&#x21CC;"> <!-- RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON -->
  <!ENTITY lrhar2	"&#x21CB;"> <!-- LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON -->
  <!ENTITY lsh	"&#x21B0;"> <!-- UPWARDS ARROW WITH TIP LEFTWARDS -->
  <!ENTITY map	"&#x21A6;"> <!-- RIGHTWARDS ARROW FROM BAR -->
  <!ENTITY mumap	"&#x22B8;"> <!-- MULTIMAP -->
  <!ENTITY nearr	"&#x2197;"> <!-- NORTH EAST ARROW -->
  <!ENTITY nlArr	"&#x21CD;"> <!-- LEFTWARDS DOUBLE ARROW WITH STROKE -->
  <!ENTITY nlarr	"&#x219A;"> <!-- LEFTWARDS ARROW WITH STROKE -->
  <!ENTITY nhArr	"&#x21CE;"> <!-- LEFT RIGHT DOUBLE ARROW WITH STROKE -->
  <!ENTITY nharr	"&#x21AE;"> <!-- LEFT RIGHT ARROW WITH STROKE -->
  <!ENTITY nrarr	"&#x219B;"> <!-- RIGHTWARDS ARROW WITH STROKE -->
  <!ENTITY nrArr	"&#x21CF;"> <!-- RIGHTWARDS DOUBLE ARROW WITH STROKE -->
  <!ENTITY nwarr	"&#x2196;"> <!-- NORTH WEST ARROW -->
  <!ENTITY olarr	"&#x21BA;"> <!-- ANTICLOCKWISE OPEN CIRCLE ARROW -->
  <!ENTITY orarr	"&#x21BB;"> <!-- CLOCKWISE OPEN CIRCLE ARROW -->
  <!ENTITY rAarr	"&#x21DB;"> <!-- RIGHTWARDS TRIPLE ARROW -->
  <!ENTITY Rarr	"&#x21A0;"> <!-- RIGHTWARDS TWO HEADED ARROW -->
  <!ENTITY rarr2	"&#x21C9;"> <!-- RIGHTWARDS PAIRED ARROWS -->
  <!ENTITY rarrhk	"&#x21AA;"> <!-- RIGHTWARDS ARROW WITH HOOK -->
  <!ENTITY rarrlp	"&#x21AC;"> <!-- RIGHTWARDS ARROW WITH LOOP -->
  <!ENTITY rarrtl	"&#x21A3;"> <!-- RIGHTWARDS ARROW WITH TAIL -->
  <!ENTITY rarrw	"&#x219D;"> <!-- RIGHTWARDS SQUIGGLE ARROW -->
  <!ENTITY rhard	"&#x21C1;"> <!-- RIGHTWARDS HARPOON WITH BARB DOWNWARDS -->
  <!ENTITY rharu	"&#x21C0;"> <!-- RIGHTWARDS HARPOON WITH BARB UPWARDS -->
  <!ENTITY rsh	"&#x21B1;"> <!-- UPWARDS ARROW WITH TIP RIGHTWARDS -->
  <!ENTITY drarr	"&#x2198;"> <!-- SOUTH EAST ARROW -->
  <!ENTITY dlarr	"&#x2199;"> <!-- SOUTH WEST ARROW -->
  <!ENTITY uArr	"&#x21D1;"> <!-- UPWARDS DOUBLE ARROW -->
  <!ENTITY uarr2	"&#x21C8;"> <!-- UPWARDS PAIRED ARROWS -->
  <!ENTITY vArr	"&#x21D5;"> <!-- UP DOWN DOUBLE ARROW -->
  <!ENTITY varr	"&#x2195;"> <!-- UP DOWN ARROW -->
  <!ENTITY uharl	"&#x21BF;"> <!-- UPWARDS HARPOON WITH BARB LEFTWARDS -->
  <!ENTITY uharr	"&#x21BE;"> <!-- UPWARDS HARPOON WITH BARB RIGHTWARDS -->
  <!ENTITY xlArr	"&#x21D0;"> <!-- LEFTWARDS DOUBLE ARROW -->
  <!ENTITY xhArr	"&#x2194;"> <!-- LEFT RIGHT ARROW -->
  <!ENTITY xharr	"&#x2194;"> <!-- LEFT RIGHT ARROW -->
  <!ENTITY xrArr	"&#x21D2;"> <!-- RIGHTWARDS DOUBLE ARROW -->
  <!-- iso-amsb.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
  
  <!-- Derived from the corresponding ISO 8879 standard entity set
       and the Unicode character mappings provided by Sebastian Rahtz.
       With additional derivations from
       ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/MISC/SGML.TXT -->
  
  <!ENTITY amalg	"&#x2210;"> <!-- N-ARY COPRODUCT -->
  <!ENTITY Barwed	"&#x2306;"> <!-- PERSPECTIVE -->
  <!ENTITY barwed	"&#x22BC;"> <!-- NAND -->
  <!ENTITY Cap	"&#x22D2;"> <!-- DOUBLE INTERSECTION -->
  <!ENTITY Cup	"&#x22D3;"> <!-- DOUBLE UNION -->
  <!ENTITY cuvee	"&#x22CE;"> <!-- CURLY LOGICAL OR -->
  <!ENTITY cuwed	"&#x22CF;"> <!-- CURLY LOGICAL AND -->
  <!ENTITY diam	"&#x22C4;"> <!-- DIAMOND OPERATOR -->
  <!ENTITY divonx	"&#x22C7;"> <!-- DIVISION TIMES -->
  <!ENTITY intcal	"&#x22BA;"> <!-- INTERCALATE -->
  <!ENTITY lthree	"&#x22CB;"> <!-- LEFT SEMIDIRECT PRODUCT -->
  <!ENTITY ltimes	"&#x22C9;"> <!-- LEFT NORMAL FACTOR SEMIDIRECT PRODUCT -->
  <!ENTITY minusb	"&#x229F;"> <!-- SQUARED MINUS -->
  <!ENTITY oast	"&#x229B;"> <!-- CIRCLED ASTERISK OPERATOR -->
  <!ENTITY ocir	"&#x229A;"> <!-- CIRCLED RING OPERATOR -->
  <!ENTITY odash	"&#x229D;"> <!-- CIRCLED DASH -->
  <!ENTITY odot	"&#x2299;"> <!-- CIRCLED DOT OPERATOR -->
  <!ENTITY ominus	"&#x2296;"> <!-- CIRCLED MINUS -->
  <!ENTITY oplus	"&#x2295;"> <!-- CIRCLED PLUS -->
  <!ENTITY osol	"&#x2298;"> <!-- CIRCLED DIVISION SLASH -->
  <!ENTITY otimes	"&#x2297;"> <!-- CIRCLED TIMES -->
  <!ENTITY plusb	"&#x229E;"> <!-- SQUARED PLUS -->
  <!ENTITY plusdo	"&#x2214;"> <!-- DOT PLUS -->
  <!ENTITY rthree	"&#x22CC;"> <!-- RIGHT SEMIDIRECT PRODUCT -->
  <!ENTITY rtimes	"&#x22CA;"> <!-- RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT -->
  <!ENTITY sdot	"&#x22C5;"> <!-- DOT OPERATOR -->
  <!ENTITY sdotb	"&#x22A1;"> <!-- SQUARED DOT OPERATOR -->
  <!ENTITY setmn	"&#x2216;"> <!-- SET MINUS -->
  <!ENTITY sqcap	"&#x2293;"> <!-- SQUARE CAP -->
  <!ENTITY sqcup	"&#x2294;"> <!-- SQUARE CUP -->
  <!ENTITY ssetmn	"&#x2216;"> <!-- SET MINUS -->
  <!ENTITY sstarf	"&#x22C6;"> <!-- STAR OPERATOR -->
  <!ENTITY timesb	"&#x22A0;"> <!-- SQUARED TIMES -->
  <!ENTITY top	"&#x22A4;"> <!-- DOWN TACK -->
  <!ENTITY uplus	"&#x228E;"> <!-- MULTISET UNION -->
  <!ENTITY wreath	"&#x2240;"> <!-- WREATH PRODUCT -->
  <!ENTITY xcirc	"&#x25CB;"> <!-- WHITE CIRCLE -->
  <!ENTITY xdtri	"&#x25BD;"> <!-- WHITE DOWN-POINTING TRIANGLE -->
  <!ENTITY xutri	"&#x25B3;"> <!-- WHITE UP-POINTING TRIANGLE -->
  <!ENTITY coprod	"&#x2210;"> <!-- N-ARY COPRODUCT -->
  <!ENTITY prod	"&#x220F;"> <!-- N-ARY PRODUCT -->
  <!ENTITY sum	"&#x2211;"> <!-- N-ARY SUMMATION -->
  <!-- iso-amsc.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
  
  <!-- Derived from the corresponding ISO 8879 standard entity set
       and the Unicode character mappings provided by Sebastian Rahtz -->
  
  <!ENTITY rceil	"&#x2309;"> <!-- RIGHT CEILING -->
  <!ENTITY rfloor	"&#x230B;"> <!-- RIGHT FLOOR -->
  <!ENTITY rpargt	"&#xE291;"> <!--  -->
  <!ENTITY urcorn	"&#x231D;"> <!-- TOP RIGHT CORNER -->
  <!ENTITY drcorn	"&#x231F;"> <!-- BOTTOM RIGHT CORNER -->
  <!ENTITY lceil	"&#x2308;"> <!-- LEFT CEILING -->
  <!ENTITY lfloor	"&#x230A;"> <!-- LEFT FLOOR -->
  <!--     lpargt	Unknown unicode character -->
  <!ENTITY ulcorn	"&#x231C;"> <!-- TOP LEFT CORNER -->
  <!ENTITY dlcorn	"&#x231E;"> <!-- BOTTOM LEFT CORNER -->
  <!-- iso-amsn.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
  
  <!-- Derived from the corresponding ISO 8879 standard entity set
       and the Unicode character mappings provided by Sebastian Rahtz
       With additional derivations from
       ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/MISC/SGML.TXT -->
  
  <!ENTITY gnap	"&#xE411;"> <!--  -->
  <!ENTITY gne	"&#x2269;"> <!--  -->
  <!ENTITY gnE	"&#x2269;"> <!--  -->
  <!ENTITY gnsim	"&#x22E7;"> <!-- GREATER-THAN BUT NOT EQUIVALENT TO -->
  <!ENTITY gvnE	"&#x2269;"> <!-- GREATER-THAN BUT NOT EQUAL TO -->
  <!ENTITY lnap	"&#xE2A2;"> <!--  -->
  <!ENTITY lnE	"&#x2268;"> <!--  -->
  <!ENTITY lne	"&#x2268;"> <!--  -->
  <!ENTITY lnsim	"&#x22E6;"> <!--  -->
  <!ENTITY lvnE	"&#x2268;"> <!-- LESS-THAN BUT NOT EQUAL TO -->
  <!ENTITY nap	"&#x2249;"> <!-- NOT ALMOST EQUAL TO -->
  <!ENTITY ncong	"&#x2247;"> <!-- NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO -->
  <!ENTITY nequiv	"&#x2262;"> <!-- NOT IDENTICAL TO -->
  <!ENTITY ngE	"&#x2271;"> <!--  -->
  <!ENTITY nge	"&#x2271;"> <!-- NEITHER GREATER-THAN NOR EQUAL TO -->
  <!ENTITY nges	"&#x2271;"> <!--  -->
  <!ENTITY ngt	"&#x226F;"> <!-- NOT GREATER-THAN -->
  <!ENTITY nle	"&#x2270;"> <!-- NEITHER LESS-THAN NOR EQUAL TO -->
  <!ENTITY nlE	"&#x2270;"> <!--  -->
  <!ENTITY nles	"&#x2270;"> <!--  -->
  <!ENTITY nlt	"&#x226E;"> <!-- NOT LESS-THAN -->
  <!ENTITY nltri	"&#x22EA;"> <!-- NOT NORMAL SUBGROUP OF -->
  <!ENTITY nltrie	"&#x22EC;"> <!-- NOT NORMAL SUBGROUP OF OR EQUAL TO -->
  <!ENTITY nmid	"&#x2224;"> <!-- DOES NOT DIVIDE -->
  <!ENTITY npar	"&#x2226;"> <!-- NOT PARALLEL TO -->
  <!ENTITY npr	"&#x2280;"> <!-- DOES NOT PRECEDE -->
  <!ENTITY npre	"&#x22E0;"> <!-- DOES NOT PRECEDE OR EQUAL -->
  <!ENTITY nrtri	"&#x22EB;"> <!-- DOES NOT CONTAIN AS NORMAL SUBGROUP -->
  <!ENTITY nrtrie	"&#x22ED;"> <!-- DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL -->
  <!ENTITY nsc	"&#x2281;"> <!-- DOES NOT SUCCEED -->
  <!ENTITY nsce	"&#x22E1;"> <!-- DOES NOT SUCCEED OR EQUAL -->
  <!ENTITY nsim	"&#x2241;"> <!--  -->
  <!ENTITY nsime	"&#x2244;"> <!--  -->
  <!ENTITY nsmid	"&#xE2AA;"> <!--  -->
  <!ENTITY nspar	"&#x2226;"> <!-- NOT PARALLEL TO -->
  <!ENTITY nsub	"&#x2284;"> <!-- NOT A SUBSET OF -->
  <!ENTITY nsube	"&#x2288;"> <!--  -->
  <!ENTITY nsubE	"&#x2288;"> <!--  -->
  <!ENTITY nsup	"&#x2285;"> <!-- NOT A SUPERSET OF -->
  <!ENTITY nsupE	"&#x2289;"> <!--  -->
  <!ENTITY nsupe	"&#x2289;"> <!--  -->
  <!ENTITY nvdash	"&#x22AC;"> <!-- DOES NOT PROVE -->
  <!ENTITY nvDash	"&#x22AD;"> <!-- NOT TRUE -->
  <!ENTITY nVDash	"&#x22AF;"> <!-- NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE -->
  <!ENTITY nVdash	"&#x22AE;"> <!-- DOES NOT FORCE -->
  <!ENTITY prnap	"&#x22E8;"> <!--  -->
  <!ENTITY prnE	"&#xE2B3;"> <!--  -->
  <!ENTITY prnsim	"&#x22E8;"> <!--  -->
  <!ENTITY scnap	"&#x22E9;"> <!--  -->
  <!ENTITY scnE	"&#xE2B5;"> <!--  -->
  <!ENTITY scnsim	"&#x22E9;"> <!--  -->
  <!ENTITY subne	"&#x228A;"> <!--  -->
  <!ENTITY subnE	"&#x228A;"> <!-- SUBSET OF WITH NOT EQUAL TO -->
  <!ENTITY supne	"&#x228B;"> <!--  -->
  <!ENTITY supnE	"&#x228B;"> <!--  -->
  <!ENTITY vsubnE	"&#xE2B8;"> <!--  -->
  <!ENTITY vsubne	"&#x228A;"> <!-- SUBSET OF WITH NOT EQUAL TO -->
  <!ENTITY vsupne	"&#x228B;"> <!-- SUPERSET OF WITH NOT EQUAL TO -->
  <!ENTITY vsupnE	"&#x228B;"> <!-- SUPERSET OF WITH NOT EQUAL TO -->
  <!-- iso-amso.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
  
  <!-- Derived from the corresponding ISO 8879 standard entity set
       and the Unicode character mappings provided by Sebastian Rahtz
       With additional derivations from
       ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/MISC/SGML.TXT -->
  
  <!ENTITY ang	"&#x2220;"> <!-- ANGLE -->
  <!ENTITY angmsd	"&#x2221;"> <!-- MEASURED ANGLE -->
  <!ENTITY beth	"&#x2136;"> <!-- BET SYMBOL -->
  <!ENTITY bprime	"&#x2035;"> <!-- REVERSED PRIME -->
  <!ENTITY comp	"&#x2201;"> <!-- COMPLEMENT -->
  <!ENTITY daleth	"&#x2138;"> <!-- DALET SYMBOL -->
  <!ENTITY ell	"&#x2113;"> <!-- SCRIPT SMALL L -->
  <!ENTITY empty	"&#x2205;"> <!--  -->
  <!ENTITY gimel	"&#x2137;"> <!-- GIMEL SYMBOL -->
  <!ENTITY image	"&#x2111;"> <!-- BLACK-LETTER CAPITAL I -->
  <!ENTITY inodot	"&#x0131;"> <!-- LATIN SMALL LETTER DOTLESS I -->
  <!--     jnodot	Unknown unicode character -->
  <!ENTITY nexist	"&#x2204;"> <!-- THERE DOES NOT EXIST -->
  <!ENTITY oS	"&#x24C8;"> <!-- CIRCLED LATIN CAPITAL LETTER S -->
  <!ENTITY planck	"&#x210F;"> <!-- PLANCK CONSTANT OVER TWO PI -->
  <!ENTITY real	"&#x211C;"> <!-- BLACK-LETTER CAPITAL R -->
  <!ENTITY sbsol	"&#xFE68;"> <!-- SMALL REVERSE SOLIDUS -->
  <!ENTITY vprime	"&#x2032;"> <!-- PRIME -->
  <!ENTITY weierp	"&#x2118;"> <!-- SCRIPT CAPITAL P -->
  <!-- iso-amsr.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
  
  <!-- Derived from the corresponding ISO 8879 standard entity set
       and the Unicode character mappings provided by Sebastian Rahtz.
       With additional derivations from
       ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/MISC/SGML.TXT -->
  
  <!ENTITY ape	"&#x224A;"> <!--  -->
  <!ENTITY asymp	"&#x224D;"> <!-- EQUIVALENT TO -->
  <!ENTITY bcong	"&#x224C;"> <!-- ALL EQUAL TO -->
  <!ENTITY bepsi	"&#x220D;"> <!-- SMALL CONTAINS AS MEMBER -->
  <!ENTITY bowtie	"&#x22C8;"> <!--  -->
  <!ENTITY bsim	"&#x223D;"> <!--  -->
  <!ENTITY bsime	"&#x22CD;"> <!--  -->
  <!ENTITY bump	"&#x224E;"> <!--  -->
  <!ENTITY bumpe	"&#x224F;"> <!--  -->
  <!ENTITY cire	"&#x2257;"> <!--  -->
  <!ENTITY colone	"&#x2254;"> <!--  -->
  <!ENTITY cuepr	"&#x22DE;"> <!--  -->
  <!ENTITY cuesc	"&#x22DF;"> <!--  -->
  <!ENTITY cupre	"&#x227C;"> <!--  -->
  <!ENTITY dashv	"&#x22A3;"> <!--  -->
  <!ENTITY ecir	"&#x2256;"> <!--  -->
  <!ENTITY ecolon	"&#x2255;"> <!--  -->
  <!ENTITY eDot	"&#x2251;"> <!--  -->
  <!ENTITY esdot	"&#x2250;"> <!--  -->
  <!ENTITY efDot	"&#x2252;"> <!--  -->
  <!ENTITY egs	"&#x22DD;"> <!--  -->
  <!ENTITY els	"&#x22DC;"> <!--  -->
  <!ENTITY erDot	"&#x2253;"> <!--  -->
  <!ENTITY fork	"&#x22D4;"> <!--  -->
  <!ENTITY frown	"&#x2322;"> <!--  -->
  <!ENTITY gap	"&#x2273;"> <!-- GREATER-THAN OR EQUIVALENT TO -->
  <!ENTITY gsdot	"&#x22D7;"> <!--  -->
  <!ENTITY gE	"&#x2267;"> <!--  -->
  <!ENTITY gel	"&#x22DB;"> <!--  -->
  <!ENTITY gEl	"&#x22DB;"> <!--  -->
  <!ENTITY ges	"&#x2265;"> <!-- GREATER-THAN OR EQUAL TO -->
  <!ENTITY Gg	"&#x22D9;"> <!-- VERY MUCH GREATER-THAN -->
  <!ENTITY gl	"&#x2277;"> <!--  -->
  <!ENTITY gsim	"&#x2273;"> <!-- GREATER-THAN OR EQUIVALENT TO -->
  <!ENTITY Gt	"&#x226B;"> <!-- MUCH GREATER-THAN -->
  <!ENTITY lap	"&#x2272;"> <!-- LESS-THAN OR EQUIVALENT TO -->
  <!ENTITY ldot	"&#x22D6;"> <!--  -->
  <!ENTITY lE	"&#x2266;"> <!--  -->
  <!ENTITY lEg	"&#x22DA;"> <!--  -->
  <!ENTITY leg	"&#x22DA;"> <!--  -->
  <!ENTITY les	"&#x2264;"> <!-- LESS-THAN OR EQUAL TO -->
  <!ENTITY lg	"&#x2276;"> <!-- LESS-THAN OR GREATER-THAN -->
  <!ENTITY Ll	"&#x22D8;"> <!--  -->
  <!ENTITY lsim	"&#x2272;"> <!-- LESS-THAN OR EQUIVALENT TO -->
  <!ENTITY Lt	"&#x226A;"> <!-- MUCH LESS-THAN -->
  <!ENTITY ltrie	"&#x22B4;"> <!--  -->
  <!ENTITY mid	"&#x2223;"> <!--  -->
  <!ENTITY models	"&#x22A7;"> <!-- MODELS -->
  <!ENTITY pr	"&#x227A;"> <!--  -->
  <!ENTITY prap	"&#x227E;"> <!--  -->
  <!ENTITY pre	"&#x227C;"> <!--  -->
  <!ENTITY prsim	"&#x227E;"> <!--  -->
  <!ENTITY rtrie	"&#x22B5;"> <!--  -->
  <!ENTITY samalg	"&#x2210;"> <!--  -->
  <!ENTITY sc	"&#x227B;"> <!--  -->
  <!ENTITY scap	"&#x227F;"> <!--  -->
  <!ENTITY sccue	"&#x227D;"> <!--  -->
  <!ENTITY sce	"&#x227D;"> <!--  -->
  <!ENTITY scsim	"&#x227F;"> <!--  -->
  <!ENTITY sfrown	"&#x2322;"> <!-- FROWN -->
  <!ENTITY smid	"&#xE301;"> <!--  -->
  <!ENTITY smile	"&#x2323;"> <!--  -->
  <!ENTITY spar	"&#x2225;"> <!-- PARALLEL TO -->
  <!ENTITY sqsub	"&#x228F;"> <!--  -->
  <!ENTITY sqsube	"&#x2291;"> <!--  -->
  <!ENTITY sqsup	"&#x2290;"> <!--  -->
  <!ENTITY sqsupe	"&#x2292;"> <!--  -->
  <!ENTITY ssmile	"&#x2323;"> <!-- SMILE -->
  <!ENTITY Sub	"&#x22D0;"> <!--  -->
  <!ENTITY subE	"&#x2286;"> <!--  -->
  <!ENTITY Sup	"&#x22D1;"> <!--  -->
  <!ENTITY supE	"&#x2287;"> <!--  -->
  <!ENTITY thkap	"&#x2248;"> <!-- ALMOST EQUAL TO -->
  <!ENTITY thksim	"&#x223C;"> <!-- TILDE OPERATOR -->
  <!ENTITY trie	"&#x225C;"> <!--  -->
  <!ENTITY twixt	"&#x226C;"> <!-- BETWEEN -->
  <!ENTITY vdash	"&#x22A2;"> <!--  -->
  <!ENTITY Vdash	"&#x22A9;"> <!--  -->
  <!ENTITY vDash	"&#x22A8;"> <!--  -->
  <!ENTITY veebar	"&#x22BB;"> <!--  -->
  <!ENTITY vltri	"&#x22B2;"> <!--  -->
  <!ENTITY vprop	"&#x221D;"> <!--  -->
  <!ENTITY vrtri	"&#x22B3;"> <!--  -->
  <!ENTITY Vvdash	"&#x22AA;"> <!--  -->
  <!-- iso-box.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
  
  <!-- Derived from the corresponding ISO 8879 standard entity set
       and the Unicode character mappings provided by Sebastian Rahtz -->
  
  <!ENTITY boxh	"&#x2500;"> <!-- BOX DRAWINGS LIGHT HORIZONTAL -->
  <!ENTITY boxv	"&#x2502;"> <!-- BOX DRAWINGS LIGHT VERTICAL -->
  <!ENTITY boxur	"&#x2514;"> <!-- BOX DRAWINGS LIGHT UP AND RIGHT -->
  <!ENTITY boxul	"&#x2518;"> <!-- BOX DRAWINGS LIGHT UP AND LEFT -->
  <!ENTITY boxdl	"&#x2510;"> <!-- BOX DRAWINGS LIGHT DOWN AND LEFT -->
  <!ENTITY boxdr	"&#x250C;"> <!-- BOX DRAWINGS LIGHT DOWN AND RIGHT -->
  <!ENTITY boxvr	"&#x251C;"> <!-- BOX DRAWINGS LIGHT VERTICAL AND RIGHT -->
  <!ENTITY boxhu	"&#x2534;"> <!-- BOX DRAWINGS LIGHT UP AND HORIZONTAL -->
  <!ENTITY boxvl	"&#x2524;"> <!-- BOX DRAWINGS LIGHT VERTICAL AND LEFT -->
  <!ENTITY boxhd	"&#x252C;"> <!-- BOX DRAWINGS LIGHT DOWN AND HORIZONTAL -->
  <!ENTITY boxvh	"&#x253C;"> <!-- BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL -->
  <!ENTITY boxvR	"&#x255E;"> <!-- BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE -->
  <!ENTITY boxhU	"&#x2567;"> <!-- BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE -->
  <!ENTITY boxvL	"&#x2561;"> <!-- BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE -->
  <!ENTITY boxhD	"&#x2564;"> <!-- BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE -->
  <!ENTITY boxvH	"&#x256A;"> <!-- BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE -->
  <!ENTITY boxH	"&#x2550;"> <!-- BOX DRAWINGS DOUBLE HORIZONTAL -->
  <!ENTITY boxV	"&#x2551;"> <!-- BOX DRAWINGS DOUBLE VERTICAL -->
  <!ENTITY boxUR	"&#x2558;"> <!-- BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE -->
  <!ENTITY boxUL	"&#x255B;"> <!-- BOX DRAWINGS UP SINGLE AND LEFT DOUBLE -->
  <!ENTITY boxDL	"&#x2555;"> <!-- BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE -->
  <!ENTITY boxDR	"&#x2552;"> <!-- BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE -->
  <!ENTITY boxVR	"&#x255F;"> <!-- BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE -->
  <!ENTITY boxHU	"&#x2568;"> <!-- BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE -->
  <!ENTITY boxVL	"&#x2562;"> <!-- BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE -->
  <!ENTITY boxHD	"&#x2565;"> <!-- BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE -->
  <!ENTITY boxVH	"&#x256B;"> <!-- BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE -->
  <!ENTITY boxVr	"&#x2560;"> <!-- BOX DRAWINGS DOUBLE VERTICAL AND RIGHT -->
  <!ENTITY boxHu	"&#x2569;"> <!-- BOX DRAWINGS DOUBLE UP AND HORIZONTAL -->
  <!ENTITY boxVl	"&#x2563;"> <!-- BOX DRAWINGS DOUBLE VERTICAL AND LEFT -->
  <!ENTITY boxHd	"&#x2566;"> <!-- BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL -->
  <!ENTITY boxVh	"&#x256C;"> <!-- BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL -->
  <!ENTITY boxuR	"&#x2559;"> <!-- BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE -->
  <!ENTITY boxUl	"&#x255C;"> <!-- BOX DRAWINGS UP DOUBLE AND LEFT SINGLE -->
  <!ENTITY boxdL	"&#x2556;"> <!-- BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE -->
  <!ENTITY boxDr	"&#x2553;"> <!-- BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE -->
  <!ENTITY boxUr	"&#x255A;"> <!-- BOX DRAWINGS DOUBLE UP AND RIGHT -->
  <!ENTITY boxuL	"&#x255D;"> <!-- BOX DRAWINGS DOUBLE UP AND LEFT -->
  <!ENTITY boxDl	"&#x2557;"> <!-- BOX DRAWINGS DOUBLE DOWN AND LEFT -->
  <!ENTITY boxdR	"&#x2554;"> <!-- BOX DRAWINGS DOUBLE DOWN AND RIGHT -->
  <!-- iso-cyr1.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
  
  <!-- Derived from the corresponding ISO 8879 standard entity set
       and the Unicode character mappings provided by Sebastian Rahtz -->
  
  <!ENTITY acy	"&#x0430;"> <!-- CYRILLIC SMALL LETTER A -->
  <!ENTITY Acy	"&#x0410;"> <!-- CYRILLIC CAPITAL LETTER A -->
  <!ENTITY bcy	"&#x0431;"> <!-- CYRILLIC SMALL LETTER BE -->
  <!ENTITY Bcy	"&#x0411;"> <!-- CYRILLIC CAPITAL LETTER BE -->
  <!ENTITY vcy	"&#x0432;"> <!-- CYRILLIC SMALL LETTER VE -->
  <!ENTITY Vcy	"&#x0412;"> <!-- CYRILLIC CAPITAL LETTER VE -->
  <!ENTITY gcy	"&#x0433;"> <!-- CYRILLIC SMALL LETTER GHE -->
  <!ENTITY Gcy	"&#x0413;"> <!-- CYRILLIC CAPITAL LETTER GHE -->
  <!ENTITY dcy	"&#x0434;"> <!-- CYRILLIC SMALL LETTER DE -->
  <!ENTITY Dcy	"&#x0414;"> <!-- CYRILLIC CAPITAL LETTER DE -->
  <!ENTITY iecy	"&#x0435;"> <!-- CYRILLIC SMALL LETTER IE -->
  <!ENTITY IEcy	"&#x0415;"> <!-- CYRILLIC CAPITAL LETTER IE -->
  <!ENTITY iocy	"&#x0451;"> <!-- CYRILLIC SMALL LETTER IO -->
  <!ENTITY IOcy	"&#x0401;"> <!-- CYRILLIC CAPITAL LETTER IO -->
  <!ENTITY zhcy	"&#x0436;"> <!-- CYRILLIC SMALL LETTER ZHE -->
  <!ENTITY ZHcy	"&#x0416;"> <!-- CYRILLIC CAPITAL LETTER ZHE -->
  <!ENTITY zcy	"&#x0437;"> <!-- CYRILLIC SMALL LETTER ZE -->
  <!ENTITY Zcy	"&#x0417;"> <!-- CYRILLIC CAPITAL LETTER ZE -->
  <!ENTITY icy	"&#x0438;"> <!-- CYRILLIC SMALL LETTER I -->
  <!ENTITY Icy	"&#x0418;"> <!-- CYRILLIC CAPITAL LETTER I -->
  <!ENTITY jcy	"&#x0439;"> <!-- CYRILLIC SMALL LETTER SHORT I -->
  <!ENTITY Jcy	"&#x0419;"> <!-- CYRILLIC CAPITAL LETTER SHORT I -->
  <!ENTITY kcy	"&#x043A;"> <!-- CYRILLIC SMALL LETTER KA -->
  <!ENTITY Kcy	"&#x041A;"> <!-- CYRILLIC CAPITAL LETTER KA -->
  <!ENTITY lcy	"&#x043B;"> <!-- CYRILLIC SMALL LETTER EL -->
  <!ENTITY Lcy	"&#x041B;"> <!-- CYRILLIC CAPITAL LETTER EL -->
  <!ENTITY mcy	"&#x043C;"> <!-- CYRILLIC SMALL LETTER EM -->
  <!ENTITY Mcy	"&#x041C;"> <!-- CYRILLIC CAPITAL LETTER EM -->
  <!ENTITY ncy	"&#x043D;"> <!-- CYRILLIC SMALL LETTER EN -->
  <!ENTITY Ncy	"&#x041D;"> <!-- CYRILLIC CAPITAL LETTER EN -->
  <!ENTITY ocy	"&#x043E;"> <!-- CYRILLIC SMALL LETTER O -->
  <!ENTITY Ocy	"&#x041E;"> <!-- CYRILLIC CAPITAL LETTER O -->
  <!ENTITY pcy	"&#x043F;"> <!-- CYRILLIC SMALL LETTER PE -->
  <!ENTITY Pcy	"&#x041F;"> <!-- CYRILLIC CAPITAL LETTER PE -->
  <!ENTITY rcy	"&#x0440;"> <!-- CYRILLIC SMALL LETTER ER -->
  <!ENTITY Rcy	"&#x0420;"> <!-- CYRILLIC CAPITAL LETTER ER -->
  <!ENTITY scy	"&#x0441;"> <!-- CYRILLIC SMALL LETTER ES -->
  <!ENTITY Scy	"&#x0421;"> <!-- CYRILLIC CAPITAL LETTER ES -->
  <!ENTITY tcy	"&#x0442;"> <!-- CYRILLIC SMALL LETTER TE -->
  <!ENTITY Tcy	"&#x0422;"> <!-- CYRILLIC CAPITAL LETTER TE -->
  <!ENTITY ucy	"&#x0443;"> <!-- CYRILLIC SMALL LETTER U -->
  <!ENTITY Ucy	"&#x0423;"> <!-- CYRILLIC CAPITAL LETTER U -->
  <!ENTITY fcy	"&#x0444;"> <!-- CYRILLIC SMALL LETTER EF -->
  <!ENTITY Fcy	"&#x0424;"> <!-- CYRILLIC CAPITAL LETTER EF -->
  <!ENTITY khcy	"&#x0445;"> <!-- CYRILLIC SMALL LETTER HA -->
  <!ENTITY KHcy	"&#x0425;"> <!-- CYRILLIC CAPITAL LETTER HA -->
  <!ENTITY tscy	"&#x0446;"> <!-- CYRILLIC SMALL LETTER TSE -->
  <!ENTITY TScy	"&#x0426;"> <!-- CYRILLIC CAPITAL LETTER TSE -->
  <!ENTITY chcy	"&#x0447;"> <!-- CYRILLIC SMALL LETTER CHE -->
  <!ENTITY CHcy	"&#x0427;"> <!-- CYRILLIC CAPITAL LETTER CHE -->
  <!ENTITY shcy	"&#x0448;"> <!-- CYRILLIC SMALL LETTER SHA -->
  <!ENTITY SHcy	"&#x0428;"> <!-- CYRILLIC CAPITAL LETTER SHA -->
  <!ENTITY shchcy	"&#x0449;"> <!-- CYRILLIC SMALL LETTER SHCHA -->
  <!ENTITY SHCHcy	"&#x0429;"> <!-- CYRILLIC CAPITAL LETTER SHCHA -->
  <!ENTITY hardcy	"&#x044A;"> <!-- CYRILLIC SMALL LETTER HARD SIGN -->
  <!ENTITY HARDcy	"&#x042A;"> <!-- CYRILLIC CAPITAL LETTER HARD SIGN -->
  <!ENTITY ycy	"&#x044B;"> <!-- CYRILLIC SMALL LETTER YERU -->
  <!ENTITY Ycy	"&#x042B;"> <!-- CYRILLIC CAPITAL LETTER YERU -->
  <!ENTITY softcy	"&#x044C;"> <!-- CYRILLIC SMALL LETTER SOFT SIGN -->
  <!ENTITY SOFTcy	"&#x042C;"> <!-- CYRILLIC CAPITAL LETTER SOFT SIGN -->
  <!ENTITY ecy	"&#x044D;"> <!-- CYRILLIC SMALL LETTER E -->
  <!ENTITY Ecy	"&#x042D;"> <!-- CYRILLIC CAPITAL LETTER E -->
  <!ENTITY yucy	"&#x044E;"> <!-- CYRILLIC SMALL LETTER YU -->
  <!ENTITY YUcy	"&#x042E;"> <!-- CYRILLIC CAPITAL LETTER YU -->
  <!ENTITY yacy	"&#x044F;"> <!-- CYRILLIC SMALL LETTER YA -->
  <!ENTITY YAcy	"&#x042F;"> <!-- CYRILLIC CAPITAL LETTER YA -->
  <!ENTITY numero	"&#x2116;"> <!-- NUMERO SIGN -->
  <!-- iso-cyr2.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
  
  <!-- Derived from the corresponding ISO 8879 standard entity set
       and the Unicode character mappings provided by Sebastian Rahtz -->
  
  <!ENTITY djcy	"&#x0452;"> <!-- CYRILLIC SMALL LETTER DJE -->
  <!ENTITY DJcy	"&#x0402;"> <!-- CYRILLIC CAPITAL LETTER DJE -->
  <!ENTITY gjcy	"&#x0453;"> <!-- CYRILLIC SMALL LETTER GJE -->
  <!ENTITY GJcy	"&#x0403;"> <!-- CYRILLIC CAPITAL LETTER GJE -->
  <!ENTITY jukcy	"&#x0454;"> <!-- CYRILLIC SMALL LETTER UKRAINIAN IE -->
  <!ENTITY Jukcy	"&#x0404;"> <!-- CYRILLIC CAPITAL LETTER UKRAINIAN IE -->
  <!ENTITY dscy	"&#x0455;"> <!-- CYRILLIC SMALL LETTER DZE -->
  <!ENTITY DScy	"&#x0405;"> <!-- CYRILLIC CAPITAL LETTER DZE -->
  <!ENTITY iukcy	"&#x0456;"> <!-- CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I -->
  <!ENTITY Iukcy	"&#x0406;"> <!-- CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I -->
  <!ENTITY yicy	"&#x0457;"> <!-- CYRILLIC SMALL LETTER YI -->
  <!ENTITY YIcy	"&#x0407;"> <!-- CYRILLIC CAPITAL LETTER YI -->
  <!ENTITY jsercy	"&#x0458;"> <!-- CYRILLIC SMALL LETTER JE -->
  <!ENTITY Jsercy	"&#x0408;"> <!-- CYRILLIC CAPITAL LETTER JE -->
  <!ENTITY ljcy	"&#x0459;"> <!-- CYRILLIC SMALL LETTER LJE -->
  <!ENTITY LJcy	"&#x0409;"> <!-- CYRILLIC CAPITAL LETTER LJE -->
  <!ENTITY njcy	"&#x045A;"> <!-- CYRILLIC SMALL LETTER NJE -->
  <!ENTITY NJcy	"&#x040A;"> <!-- CYRILLIC CAPITAL LETTER NJE -->
  <!ENTITY tshcy	"&#x045B;"> <!-- CYRILLIC SMALL LETTER TSHE -->
  <!ENTITY TSHcy	"&#x040B;"> <!-- CYRILLIC CAPITAL LETTER TSHE -->
  <!ENTITY kjcy	"&#x045C;"> <!-- CYRILLIC SMALL LETTER KJE -->
  <!ENTITY KJcy	"&#x040C;"> <!-- CYRILLIC CAPITAL LETTER KJE -->
  <!ENTITY ubrcy	"&#x045E;"> <!-- CYRILLIC SMALL LETTER SHORT U -->
  <!ENTITY Ubrcy	"&#x040E;"> <!-- CYRILLIC CAPITAL LETTER SHORT U -->
  <!ENTITY dzcy	"&#x045F;"> <!-- CYRILLIC SMALL LETTER DZHE -->
  <!ENTITY DZcy	"&#x040F;"> <!-- CYRILLIC CAPITAL LETTER DZHE -->
  <!-- iso-dia.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
  
  <!-- Derived from the corresponding ISO 8879 standard entity set
       and the Unicode character mappings provided by Sebastian Rahtz -->
  
  <!ENTITY acute	"&#x00B4;"> <!-- ACUTE ACCENT -->
  <!ENTITY breve	"&#x02D8;"> <!-- BREVE -->
  <!ENTITY caron	"&#x02C7;"> <!-- CARON -->
  <!ENTITY cedil	"&#x00B8;"> <!-- CEDILLA -->
  <!ENTITY circ	"&#x005E;"> <!-- RING OPERATOR -->
  <!ENTITY dblac	"&#x02DD;"> <!-- DOUBLE ACUTE ACCENT -->
  <!ENTITY die	"&#x00A8;"> <!--  -->
  <!ENTITY dot	"&#x02D9;"> <!-- DOT ABOVE -->
  <!ENTITY grave	"&#x0060;"> <!-- GRAVE ACCENT -->
  <!ENTITY macr	"&#x00AF;"> <!-- MACRON -->
  <!ENTITY ogon	"&#x02DB;"> <!-- OGONEK -->
  <!ENTITY ring	"&#x02DA;"> <!-- RING ABOVE -->
  <!ENTITY tilde	"&#x02DC;"> <!-- TILDE -->
  <!ENTITY uml	"&#x00A8;"> <!--  -->
  <!-- iso-grk1.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
  
  <!-- Derived from the corresponding ISO 8879 standard entity set
       and the Unicode character mappings provided by Sebastian Rahtz -->
  
  <!ENTITY agr	"&#x03B1;"> <!--  -->
  <!ENTITY Agr	"&#x0391;"> <!-- GREEK CAPITAL LETTER ALPHA -->
  <!ENTITY bgr	"&#x03B2;"> <!-- GREEK SMALL LETTER BETA -->
  <!ENTITY Bgr	"&#x0392;"> <!-- GREEK CAPITAL LETTER BETA -->
  <!ENTITY ggr	"&#x03B3;"> <!-- GREEK SMALL LETTER GAMMA -->
  <!ENTITY Ggr	"&#x0393;"> <!-- GREEK CAPITAL LETTER GAMMA -->
  <!ENTITY dgr	"&#x03B4;"> <!-- GREEK SMALL LETTER DELTA -->
  <!ENTITY Dgr	"&#x0394;"> <!-- GREEK CAPITAL LETTER DELTA -->
  <!ENTITY egr	"&#x03B5;"> <!--  -->
  <!ENTITY Egr	"&#x0395;"> <!-- GREEK CAPITAL LETTER EPSILON -->
  <!ENTITY zgr	"&#x03B6;"> <!-- GREEK SMALL LETTER ZETA -->
  <!ENTITY Zgr	"&#x0396;"> <!-- GREEK CAPITAL LETTER ZETA -->
  <!ENTITY eegr	"&#x03B7;"> <!-- GREEK SMALL LETTER ETA -->
  <!ENTITY EEgr	"&#x0397;"> <!-- GREEK CAPITAL LETTER ETA -->
  <!ENTITY thgr	"&#x03B8;"> <!--  -->
  <!ENTITY THgr	"&#x0398;"> <!-- GREEK CAPITAL LETTER THETA -->
  <!ENTITY igr	"&#x03B9;"> <!-- GREEK SMALL LETTER IOTA -->
  <!ENTITY Igr	"&#x0399;"> <!-- GREEK CAPITAL LETTER IOTA -->
  <!ENTITY kgr	"&#x03BA;"> <!-- GREEK SMALL LETTER KAPPA -->
  <!ENTITY Kgr	"&#x039A;"> <!-- GREEK CAPITAL LETTER KAPPA -->
  <!ENTITY lgr	"&#x03BB;"> <!-- GREEK SMALL LETTER LAMDA -->
  <!ENTITY Lgr	"&#x039B;"> <!-- GREEK CAPITAL LETTER LAMDA -->
  <!ENTITY mgr	"&#x03BC;"> <!-- GREEK SMALL LETTER MU -->
  <!ENTITY Mgr	"&#x039C;"> <!-- GREEK CAPITAL LETTER MU -->
  <!ENTITY ngr	"&#x03BD;"> <!-- GREEK SMALL LETTER NU -->
  <!ENTITY Ngr	"&#x039D;"> <!-- GREEK CAPITAL LETTER NU -->
  <!ENTITY xgr	"&#x03BE;"> <!-- GREEK SMALL LETTER XI -->
  <!ENTITY Xgr	"&#x039E;"> <!-- GREEK CAPITAL LETTER XI -->
  <!ENTITY ogr	"&#x03BF;"> <!-- GREEK SMALL LETTER OMICRON -->
  <!ENTITY Ogr	"&#x039F;"> <!-- GREEK CAPITAL LETTER OMICRON -->
  <!ENTITY pgr	"&#x03C0;"> <!-- GREEK SMALL LETTER PI -->
  <!ENTITY Pgr	"&#x03A0;"> <!-- GREEK CAPITAL LETTER PI -->
  <!ENTITY rgr	"&#x03C1;"> <!-- GREEK SMALL LETTER RHO -->
  <!ENTITY Rgr	"&#x03A1;"> <!-- GREEK CAPITAL LETTER RHO -->
  <!ENTITY sgr	"&#x03C3;"> <!-- GREEK SMALL LETTER SIGMA -->
  <!ENTITY Sgr	"&#x03A3;"> <!-- GREEK CAPITAL LETTER SIGMA -->
  <!ENTITY sfgr	"&#x03C2;"> <!--  -->
  <!ENTITY tgr	"&#x03C4;"> <!-- GREEK SMALL LETTER TAU -->
  <!ENTITY Tgr	"&#x03A4;"> <!-- GREEK CAPITAL LETTER TAU -->
  <!ENTITY ugr	"&#x03C5;"> <!-- GREEK SMALL LETTER UPSILON -->
  <!ENTITY Ugr	"&#x03A5;"> <!--  -->
  <!ENTITY phgr	"&#x03C6;"> <!-- GREEK SMALL LETTER PHI -->
  <!ENTITY PHgr	"&#x03A6;"> <!-- GREEK CAPITAL LETTER PHI -->
  <!ENTITY khgr	"&#x03C7;"> <!-- GREEK SMALL LETTER CHI -->
  <!ENTITY KHgr	"&#x03A7;"> <!-- GREEK CAPITAL LETTER CHI -->
  <!ENTITY psgr	"&#x03C8;"> <!-- GREEK SMALL LETTER PSI -->
  <!ENTITY PSgr	"&#x03A8;"> <!-- GREEK CAPITAL LETTER PSI -->
  <!ENTITY ohgr	"&#x03C9;"> <!-- GREEK SMALL LETTER OMEGA -->
  <!ENTITY OHgr	"&#x03A9;"> <!-- GREEK CAPITAL LETTER OMEGA -->
  <!-- iso-grk2.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
  
  <!-- Derived from the corresponding ISO 8879 standard entity set
       and the Unicode character mappings provided by Sebastian Rahtz -->
  
  <!ENTITY aacgr	"&#x03AC;"> <!-- GREEK SMALL LETTER ALPHA WITH TONOS -->
  <!ENTITY Aacgr	"&#x0386;"> <!-- GREEK CAPITAL LETTER ALPHA WITH TONOS -->
  <!ENTITY eacgr	"&#x03AD;"> <!-- GREEK SMALL LETTER EPSILON WITH TONOS -->
  <!ENTITY Eacgr	"&#x0388;"> <!-- GREEK CAPITAL LETTER EPSILON WITH TONOS -->
  <!ENTITY eeacgr	"&#x03AE;"> <!-- GREEK SMALL LETTER ETA WITH TONOS -->
  <!ENTITY EEacgr	"&#x0389;"> <!-- GREEK CAPITAL LETTER ETA WITH TONOS -->
  <!ENTITY idigr	"&#x03CA;"> <!-- GREEK SMALL LETTER IOTA WITH DIALYTIKA -->
  <!ENTITY Idigr	"&#x03AA;"> <!-- GREEK CAPITAL LETTER IOTA WITH DIALYTIKA -->
  <!ENTITY iacgr	"&#x03AF;"> <!-- GREEK SMALL LETTER IOTA WITH TONOS -->
  <!ENTITY Iacgr	"&#x038A;"> <!-- GREEK CAPITAL LETTER IOTA WITH TONOS -->
  <!ENTITY idiagr	"&#x0390;"> <!-- GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS -->
  <!ENTITY oacgr	"&#x03CC;"> <!-- GREEK SMALL LETTER OMICRON WITH TONOS -->
  <!ENTITY Oacgr	"&#x038C;"> <!-- GREEK CAPITAL LETTER OMICRON WITH TONOS -->
  <!ENTITY udigr	"&#x03CB;"> <!-- GREEK SMALL LETTER UPSILON WITH DIALYTIKA -->
  <!ENTITY Udigr	"&#x03AB;"> <!-- GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA -->
  <!ENTITY uacgr	"&#x03CD;"> <!-- GREEK SMALL LETTER UPSILON WITH TONOS -->
  <!ENTITY Uacgr	"&#x038E;"> <!-- GREEK CAPITAL LETTER UPSILON WITH TONOS -->
  <!ENTITY udiagr	"&#x03B0;"> <!-- GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS -->
  <!ENTITY ohacgr	"&#x03CE;"> <!-- GREEK SMALL LETTER OMEGA WITH TONOS -->
  <!ENTITY OHacgr	"&#x038F;"> <!-- GREEK CAPITAL LETTER OMEGA WITH TONOS -->
  <!-- iso-grk3.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
  
  <!-- Derived from the corresponding ISO 8879 standard entity set
       and the Unicode character mappings provided by Sebastian Rahtz -->
  
  <!ENTITY alpha	"&#x03B1;"> <!--  -->
  <!ENTITY beta	"&#x03B2;"> <!-- GREEK SMALL LETTER BETA -->
  <!ENTITY gamma	"&#x03B3;"> <!-- GREEK SMALL LETTER GAMMA -->
  <!ENTITY Gamma	"&#x0393;"> <!-- GREEK CAPITAL LETTER GAMMA -->
  <!ENTITY gammad	"&#x03DC;"> <!-- GREEK LETTER DIGAMMA -->
  <!ENTITY delta	"&#x03B4;"> <!-- GREEK SMALL LETTER DELTA -->
  <!ENTITY Delta	"&#x0394;"> <!-- GREEK CAPITAL LETTER DELTA -->
  <!ENTITY epsi	"&#x220A;"> <!--  -->
  <!ENTITY epsiv	"&#x03B5;"> <!--  -->
  <!ENTITY epsis	"&#x220A;"> <!--  -->
  <!ENTITY zeta	"&#x03B6;"> <!-- GREEK SMALL LETTER ZETA -->
  <!ENTITY eta	"&#x03B7;"> <!-- GREEK SMALL LETTER ETA -->
  <!ENTITY thetas	"&#x03B8;"> <!--  -->
  <!ENTITY Theta	"&#x0398;"> <!-- GREEK CAPITAL LETTER THETA -->
  <!ENTITY thetav	"&#x03D1;"> <!--  -->
  <!ENTITY iota	"&#x03B9;"> <!-- GREEK SMALL LETTER IOTA -->
  <!ENTITY kappa	"&#x03BA;"> <!-- GREEK SMALL LETTER KAPPA -->
  <!ENTITY kappav	"&#x03F0;"> <!-- GREEK KAPPA SYMBOL -->
  <!ENTITY lambda	"&#x03BB;"> <!-- GREEK SMALL LETTER LAMDA -->
  <!ENTITY Lambda	"&#x039B;"> <!-- GREEK CAPITAL LETTER LAMDA -->
  <!ENTITY mu	"&#x03BC;"> <!-- GREEK SMALL LETTER MU -->
  <!ENTITY nu	"&#x03BD;"> <!-- GREEK SMALL LETTER NU -->
  <!ENTITY xi	"&#x03BE;"> <!-- GREEK SMALL LETTER XI -->
  <!ENTITY Xi	"&#x039E;"> <!-- GREEK CAPITAL LETTER XI -->
  <!ENTITY pi	"&#x03C0;"> <!-- GREEK SMALL LETTER PI -->
  <!ENTITY piv	"&#x03D6;"> <!-- GREEK PI SYMBOL -->
  <!ENTITY Pi	"&#x03A0;"> <!-- GREEK CAPITAL LETTER PI -->
  <!ENTITY rho	"&#x03C1;"> <!-- GREEK SMALL LETTER RHO -->
  <!ENTITY rhov	"&#x03F1;"> <!-- GREEK RHO SYMBOL -->
  <!ENTITY sigma	"&#x03C3;"> <!-- GREEK SMALL LETTER SIGMA -->
  <!ENTITY Sigma	"&#x03A3;"> <!-- GREEK CAPITAL LETTER SIGMA -->
  <!ENTITY sigmav	"&#x03C2;"> <!--  -->
  <!ENTITY tau	"&#x03C4;"> <!-- GREEK SMALL LETTER TAU -->
  <!ENTITY upsi	"&#x03C5;"> <!-- GREEK SMALL LETTER UPSILON -->
  <!ENTITY Upsi	"&#x03D2;"> <!--  -->
  <!ENTITY phis	"&#x03C6;"> <!-- GREEK SMALL LETTER PHI -->
  <!ENTITY Phi	"&#x03A6;"> <!-- GREEK CAPITAL LETTER PHI -->
  <!ENTITY phiv	"&#x03D5;"> <!-- GREEK PHI SYMBOL -->
  <!ENTITY chi	"&#x03C7;"> <!-- GREEK SMALL LETTER CHI -->
  <!ENTITY psi	"&#x03C8;"> <!-- GREEK SMALL LETTER PSI -->
  <!ENTITY Psi	"&#x03A8;"> <!-- GREEK CAPITAL LETTER PSI -->
  <!ENTITY omega	"&#x03C9;"> <!-- GREEK SMALL LETTER OMEGA -->
  <!ENTITY Omega	"&#x03A9;"> <!-- GREEK CAPITAL LETTER OMEGA -->
  <!-- iso-grk4.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
  
  <!-- Derived from the corresponding ISO 8879 standard entity set
       and the Unicode character mappings provided by Sebastian Rahtz -->
  
  <!ENTITY b.alpha	"&#x03B1;"> <!--  -->
  <!ENTITY b.beta	"&#x03B2;"> <!-- GREEK SMALL LETTER BETA -->
  <!ENTITY b.gamma	"&#x03B3;"> <!-- GREEK SMALL LETTER GAMMA -->
  <!ENTITY b.Gamma	"&#x0393;"> <!-- GREEK CAPITAL LETTER GAMMA -->
  <!ENTITY b.gammad	"&#x03DC;"> <!-- GREEK LETTER DIGAMMA -->
  <!ENTITY b.delta	"&#x03B4;"> <!-- GREEK SMALL LETTER DELTA -->
  <!ENTITY b.Delta	"&#x0394;"> <!-- GREEK CAPITAL LETTER DELTA -->
  <!ENTITY b.epsi	"&#x03B5;"> <!--  -->
  <!ENTITY b.epsiv	"&#x03B5;"> <!--  -->
  <!ENTITY b.epsis	"&#x03B5;"> <!--  -->
  <!ENTITY b.zeta	"&#x03B6;"> <!-- GREEK SMALL LETTER ZETA -->
  <!ENTITY b.eta	"&#x03B7;"> <!-- GREEK SMALL LETTER ETA -->
  <!ENTITY b.thetas	"&#x03B8;"> <!--  -->
  <!ENTITY b.Theta	"&#x0398;"> <!-- GREEK CAPITAL LETTER THETA -->
  <!ENTITY b.thetav	"&#x03D1;"> <!--  -->
  <!ENTITY b.iota	"&#x03B9;"> <!-- GREEK SMALL LETTER IOTA -->
  <!ENTITY b.kappa	"&#x03BA;"> <!-- GREEK SMALL LETTER KAPPA -->
  <!ENTITY b.kappav	"&#x03F0;"> <!-- GREEK KAPPA SYMBOL -->
  <!ENTITY b.lambda	"&#x03BB;"> <!-- GREEK SMALL LETTER LAMDA -->
  <!ENTITY b.Lambda	"&#x039B;"> <!-- GREEK CAPITAL LETTER LAMDA -->
  <!ENTITY b.mu	"&#x03BC;"> <!-- GREEK SMALL LETTER MU -->
  <!ENTITY b.nu	"&#x03BD;"> <!-- GREEK SMALL LETTER NU -->
  <!ENTITY b.xi	"&#x03BE;"> <!-- GREEK SMALL LETTER XI -->
  <!ENTITY b.Xi	"&#x039E;"> <!-- GREEK CAPITAL LETTER XI -->
  <!ENTITY b.pi	"&#x03C0;"> <!-- GREEK SMALL LETTER PI -->
  <!ENTITY b.Pi	"&#x03A0;"> <!-- GREEK CAPITAL LETTER PI -->
  <!ENTITY b.piv	"&#x03D6;"> <!-- GREEK PI SYMBOL -->
  <!ENTITY b.rho	"&#x03C1;"> <!-- GREEK SMALL LETTER RHO -->
  <!ENTITY b.rhov	"&#x03F1;"> <!-- GREEK RHO SYMBOL -->
  <!ENTITY b.sigma	"&#x03C3;"> <!-- GREEK SMALL LETTER SIGMA -->
  <!ENTITY b.Sigma	"&#x03A3;"> <!-- GREEK CAPITAL LETTER SIGMA -->
  <!ENTITY b.sigmav	"&#x03C2;"> <!--  -->
  <!ENTITY b.tau	"&#x03C4;"> <!-- GREEK SMALL LETTER TAU -->
  <!ENTITY b.upsi	"&#x03C5;"> <!-- GREEK SMALL LETTER UPSILON -->
  <!ENTITY b.Upsi	"&#x03D2;"> <!--  -->
  <!ENTITY b.phis	"&#x03C6;"> <!-- GREEK SMALL LETTER PHI -->
  <!ENTITY b.Phi	"&#x03A6;"> <!-- GREEK CAPITAL LETTER PHI -->
  <!ENTITY b.phiv	"&#x03D5;"> <!-- GREEK PHI SYMBOL -->
  <!ENTITY b.chi	"&#x03C7;"> <!-- GREEK SMALL LETTER CHI -->
  <!ENTITY b.psi	"&#x03C8;"> <!-- GREEK SMALL LETTER PSI -->
  <!ENTITY b.Psi	"&#x03A8;"> <!-- GREEK CAPITAL LETTER PSI -->
  <!ENTITY b.omega	"&#x03C9;"> <!-- GREEK SMALL LETTER OMEGA -->
  <!ENTITY b.Omega	"&#x03A9;"> <!-- GREEK CAPITAL LETTER OMEGA -->
  <!-- iso-lat1.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
  
  <!-- Derived from the corresponding ISO 8879 standard entity set
       and the Unicode character mappings provided by Sebastian Rahtz -->
  
  <!ENTITY aacute	"&#x00E1;"> <!-- LATIN SMALL LETTER A WITH ACUTE -->
  <!ENTITY Aacute	"&#x00C1;"> <!-- LATIN CAPITAL LETTER A WITH ACUTE -->
  <!ENTITY acirc	"&#x00E2;"> <!-- LATIN SMALL LETTER A WITH CIRCUMFLEX -->
  <!ENTITY Acirc	"&#x00C2;"> <!-- LATIN CAPITAL LETTER A WITH CIRCUMFLEX -->
  <!ENTITY agrave	"&#x00E0;"> <!-- LATIN SMALL LETTER A WITH GRAVE -->
  <!ENTITY Agrave	"&#x00C0;"> <!-- LATIN CAPITAL LETTER A WITH GRAVE -->
  <!ENTITY aring	"&#x00E5;"> <!-- LATIN SMALL LETTER A WITH RING ABOVE -->
  <!ENTITY Aring	"&#x00C5;"> <!-- LATIN CAPITAL LETTER A WITH RING ABOVE -->
  <!ENTITY atilde	"&#x00E3;"> <!-- LATIN SMALL LETTER A WITH TILDE -->
  <!ENTITY Atilde	"&#x00C3;"> <!-- LATIN CAPITAL LETTER A WITH TILDE -->
  <!ENTITY auml	"&#x00E4;"> <!-- LATIN SMALL LETTER A WITH DIAERESIS -->
  <!ENTITY Auml	"&#x00C4;"> <!-- LATIN CAPITAL LETTER A WITH DIAERESIS -->
  <!ENTITY aelig	"&#x00E6;"> <!-- LATIN SMALL LETTER AE -->
  <!ENTITY AElig	"&#x00C6;"> <!-- LATIN CAPITAL LETTER AE -->
  <!ENTITY ccedil	"&#x00E7;"> <!-- LATIN SMALL LETTER C WITH CEDILLA -->
  <!ENTITY Ccedil	"&#x00C7;"> <!-- LATIN CAPITAL LETTER C WITH CEDILLA -->
  <!ENTITY eth	"&#x00F0;"> <!-- LATIN SMALL LETTER ETH -->
  <!ENTITY ETH	"&#x00D0;"> <!-- LATIN CAPITAL LETTER ETH -->
  <!ENTITY eacute	"&#x00E9;"> <!-- LATIN SMALL LETTER E WITH ACUTE -->
  <!ENTITY Eacute	"&#x00C9;"> <!-- LATIN CAPITAL LETTER E WITH ACUTE -->
  <!ENTITY ecirc	"&#x00EA;"> <!-- LATIN SMALL LETTER E WITH CIRCUMFLEX -->
  <!ENTITY Ecirc	"&#x00CA;"> <!-- LATIN CAPITAL LETTER E WITH CIRCUMFLEX -->
  <!ENTITY egrave	"&#x00E8;"> <!-- LATIN SMALL LETTER E WITH GRAVE -->
  <!ENTITY Egrave	"&#x00C8;"> <!-- LATIN CAPITAL LETTER E WITH GRAVE -->
  <!ENTITY euml	"&#x00EB;"> <!-- LATIN SMALL LETTER E WITH DIAERESIS -->
  <!ENTITY Euml	"&#x00CB;"> <!-- LATIN CAPITAL LETTER E WITH DIAERESIS -->
  <!ENTITY iacute	"&#x00ED;"> <!-- LATIN SMALL LETTER I WITH ACUTE -->
  <!ENTITY Iacute	"&#x00CD;"> <!-- LATIN CAPITAL LETTER I WITH ACUTE -->
  <!ENTITY icirc	"&#x00EE;"> <!-- LATIN SMALL LETTER I WITH CIRCUMFLEX -->
  <!ENTITY Icirc	"&#x00CE;"> <!-- LATIN CAPITAL LETTER I WITH CIRCUMFLEX -->
  <!ENTITY igrave	"&#x00EC;"> <!-- LATIN SMALL LETTER I WITH GRAVE -->
  <!ENTITY Igrave	"&#x00CC;"> <!-- LATIN CAPITAL LETTER I WITH GRAVE -->
  <!ENTITY iuml	"&#x00EF;"> <!-- LATIN SMALL LETTER I WITH DIAERESIS -->
  <!ENTITY Iuml	"&#x00CF;"> <!-- LATIN CAPITAL LETTER I WITH DIAERESIS -->
  <!ENTITY ntilde	"&#x00F1;"> <!-- LATIN SMALL LETTER N WITH TILDE -->
  <!ENTITY Ntilde	"&#x00D1;"> <!-- LATIN CAPITAL LETTER N WITH TILDE -->
  <!ENTITY oacute	"&#x00F3;"> <!-- LATIN SMALL LETTER O WITH ACUTE -->
  <!ENTITY Oacute	"&#x00D3;"> <!-- LATIN CAPITAL LETTER O WITH ACUTE -->
  <!ENTITY ocirc	"&#x00F4;"> <!-- LATIN SMALL LETTER O WITH CIRCUMFLEX -->
  <!ENTITY Ocirc	"&#x00D4;"> <!-- LATIN CAPITAL LETTER O WITH CIRCUMFLEX -->
  <!ENTITY ograve	"&#x00F2;"> <!-- LATIN SMALL LETTER O WITH GRAVE -->
  <!ENTITY Ograve	"&#x00D2;"> <!-- LATIN CAPITAL LETTER O WITH GRAVE -->
  <!ENTITY oslash	"&#x00F8;"> <!-- CIRCLED DIVISION SLASH -->
  <!ENTITY Oslash	"&#x00D8;"> <!-- LATIN CAPITAL LETTER O WITH STROKE -->
  <!ENTITY otilde	"&#x00F5;"> <!-- LATIN SMALL LETTER O WITH TILDE -->
  <!ENTITY Otilde	"&#x00D5;"> <!-- LATIN CAPITAL LETTER O WITH TILDE -->
  <!ENTITY ouml	"&#x00F6;"> <!-- LATIN SMALL LETTER O WITH DIAERESIS -->
  <!ENTITY Ouml	"&#x00D6;"> <!-- LATIN CAPITAL LETTER O WITH DIAERESIS -->
  <!ENTITY szlig	"&#x00DF;"> <!-- LATIN SMALL LETTER SHARP S -->
  <!ENTITY thorn	"&#x00FE;"> <!-- LATIN SMALL LETTER THORN -->
  <!ENTITY THORN	"&#x00DE;"> <!-- LATIN CAPITAL LETTER THORN -->
  <!ENTITY uacute	"&#x00FA;"> <!-- LATIN SMALL LETTER U WITH ACUTE -->
  <!ENTITY Uacute	"&#x00DA;"> <!-- LATIN CAPITAL LETTER U WITH ACUTE -->
  <!ENTITY ucirc	"&#x00FB;"> <!-- LATIN SMALL LETTER U WITH CIRCUMFLEX -->
  <!ENTITY Ucirc	"&#x00DB;"> <!-- LATIN CAPITAL LETTER U WITH CIRCUMFLEX -->
  <!ENTITY ugrave	"&#x00F9;"> <!-- LATIN SMALL LETTER U WITH GRAVE -->
  <!ENTITY Ugrave	"&#x00D9;"> <!-- LATIN CAPITAL LETTER U WITH GRAVE -->
  <!ENTITY uuml	"&#x00FC;"> <!-- LATIN SMALL LETTER U WITH DIAERESIS -->
  <!ENTITY Uuml	"&#x00DC;"> <!-- LATIN CAPITAL LETTER U WITH DIAERESIS -->
  <!ENTITY yacute	"&#x00FD;"> <!-- LATIN SMALL LETTER Y WITH ACUTE -->
  <!ENTITY Yacute	"&#x00DD;"> <!-- LATIN CAPITAL LETTER Y WITH ACUTE -->
  <!ENTITY yuml	"&#x00FF;"> <!-- LATIN SMALL LETTER Y WITH DIAERESIS -->
  <!-- iso-lat2.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
  
  <!-- Derived from the corresponding ISO 8879 standard entity set
       and the Unicode character mappings provided by Sebastian Rahtz -->
  
  <!ENTITY abreve	"&#x0103;"> <!-- LATIN SMALL LETTER A WITH BREVE -->
  <!ENTITY Abreve	"&#x0102;"> <!-- LATIN CAPITAL LETTER A WITH BREVE -->
  <!ENTITY amacr	"&#x0101;"> <!-- LATIN SMALL LETTER A WITH MACRON -->
  <!ENTITY Amacr	"&#x0100;"> <!-- LATIN CAPITAL LETTER A WITH MACRON -->
  <!ENTITY aogon	"&#x0105;"> <!-- LATIN SMALL LETTER A WITH OGONEK -->
  <!ENTITY Aogon	"&#x0104;"> <!-- LATIN CAPITAL LETTER A WITH OGONEK -->
  <!ENTITY cacute	"&#x0107;"> <!-- LATIN SMALL LETTER C WITH ACUTE -->
  <!ENTITY Cacute	"&#x0106;"> <!-- LATIN CAPITAL LETTER C WITH ACUTE -->
  <!ENTITY ccaron	"&#x010D;"> <!-- LATIN SMALL LETTER C WITH CARON -->
  <!ENTITY Ccaron	"&#x010C;"> <!-- LATIN CAPITAL LETTER C WITH CARON -->
  <!ENTITY ccirc	"&#x0109;"> <!-- LATIN SMALL LETTER C WITH CIRCUMFLEX -->
  <!ENTITY Ccirc	"&#x0108;"> <!-- LATIN CAPITAL LETTER C WITH CIRCUMFLEX -->
  <!ENTITY cdot	"&#x010B;"> <!-- DOT OPERATOR -->
  <!ENTITY Cdot	"&#x010A;"> <!-- LATIN CAPITAL LETTER C WITH DOT ABOVE -->
  <!ENTITY dcaron	"&#x010F;"> <!-- LATIN SMALL LETTER D WITH CARON -->
  <!ENTITY Dcaron	"&#x010E;"> <!-- LATIN CAPITAL LETTER D WITH CARON -->
  <!ENTITY dstrok	"&#x0111;"> <!-- LATIN SMALL LETTER D WITH STROKE -->
  <!ENTITY Dstrok	"&#x0110;"> <!-- LATIN CAPITAL LETTER D WITH STROKE -->
  <!ENTITY ecaron	"&#x011B;"> <!-- LATIN SMALL LETTER E WITH CARON -->
  <!ENTITY Ecaron	"&#x011A;"> <!-- LATIN CAPITAL LETTER E WITH CARON -->
  <!ENTITY edot	"&#x0117;"> <!-- LATIN SMALL LETTER E WITH DOT ABOVE -->
  <!ENTITY Edot	"&#x0116;"> <!-- LATIN CAPITAL LETTER E WITH DOT ABOVE -->
  <!ENTITY emacr	"&#x0113;"> <!-- LATIN SMALL LETTER E WITH MACRON -->
  <!ENTITY Emacr	"&#x0112;"> <!-- LATIN CAPITAL LETTER E WITH MACRON -->
  <!ENTITY eogon	"&#x0119;"> <!-- LATIN SMALL LETTER E WITH OGONEK -->
  <!ENTITY Eogon	"&#x0118;"> <!-- LATIN CAPITAL LETTER E WITH OGONEK -->
  <!ENTITY gacute	"&#x01F5;"> <!-- LATIN SMALL LETTER G WITH ACUTE -->
  <!ENTITY gbreve	"&#x011F;"> <!-- LATIN SMALL LETTER G WITH BREVE -->
  <!ENTITY Gbreve	"&#x011E;"> <!-- LATIN CAPITAL LETTER G WITH BREVE -->
  <!ENTITY Gcedil	"&#x0122;"> <!-- LATIN CAPITAL LETTER G WITH CEDILLA -->
  <!ENTITY gcirc	"&#x011D;"> <!-- LATIN SMALL LETTER G WITH CIRCUMFLEX -->
  <!ENTITY Gcirc	"&#x011C;"> <!-- LATIN CAPITAL LETTER G WITH CIRCUMFLEX -->
  <!ENTITY gdot	"&#x0121;"> <!-- LATIN SMALL LETTER G WITH DOT ABOVE -->
  <!ENTITY Gdot	"&#x0120;"> <!-- LATIN CAPITAL LETTER G WITH DOT ABOVE -->
  <!ENTITY hcirc	"&#x0125;"> <!-- LATIN SMALL LETTER H WITH CIRCUMFLEX -->
  <!ENTITY Hcirc	"&#x0124;"> <!-- LATIN CAPITAL LETTER H WITH CIRCUMFLEX -->
  <!ENTITY hstrok	"&#x0127;"> <!-- LATIN SMALL LETTER H WITH STROKE -->
  <!ENTITY Hstrok	"&#x0126;"> <!-- LATIN CAPITAL LETTER H WITH STROKE -->
  <!ENTITY Idot	"&#x0130;"> <!-- LATIN CAPITAL LETTER I WITH DOT ABOVE -->
  <!ENTITY Imacr	"&#x012A;"> <!-- LATIN CAPITAL LETTER I WITH MACRON -->
  <!ENTITY imacr	"&#x012B;"> <!-- LATIN SMALL LETTER I WITH MACRON -->
  <!ENTITY ijlig	"&#x0133;"> <!-- LATIN SMALL LIGATURE IJ -->
  <!ENTITY IJlig	"&#x0132;"> <!-- LATIN CAPITAL LIGATURE IJ -->
  <!ENTITY inodot	"&#x0131;"> <!-- LATIN SMALL LETTER DOTLESS I -->
  <!ENTITY iogon	"&#x012F;"> <!-- LATIN SMALL LETTER I WITH OGONEK -->
  <!ENTITY Iogon	"&#x012E;"> <!-- LATIN CAPITAL LETTER I WITH OGONEK -->
  <!ENTITY itilde	"&#x0129;"> <!-- LATIN SMALL LETTER I WITH TILDE -->
  <!ENTITY Itilde	"&#x0128;"> <!-- LATIN CAPITAL LETTER I WITH TILDE -->
  <!ENTITY jcirc	"&#x0135;"> <!-- LATIN SMALL LETTER J WITH CIRCUMFLEX -->
  <!ENTITY Jcirc	"&#x0134;"> <!-- LATIN CAPITAL LETTER J WITH CIRCUMFLEX -->
  <!ENTITY kcedil	"&#x0137;"> <!-- LATIN SMALL LETTER K WITH CEDILLA -->
  <!ENTITY Kcedil	"&#x0136;"> <!-- LATIN CAPITAL LETTER K WITH CEDILLA -->
  <!ENTITY kgreen	"&#x0138;"> <!-- LATIN SMALL LETTER KRA -->
  <!ENTITY lacute	"&#x013A;"> <!-- LATIN SMALL LETTER L WITH ACUTE -->
  <!ENTITY Lacute	"&#x0139;"> <!-- LATIN CAPITAL LETTER L WITH ACUTE -->
  <!ENTITY lcaron	"&#x013E;"> <!-- LATIN SMALL LETTER L WITH CARON -->
  <!ENTITY Lcaron	"&#x013D;"> <!-- LATIN CAPITAL LETTER L WITH CARON -->
  <!ENTITY lcedil	"&#x013C;"> <!-- LATIN SMALL LETTER L WITH CEDILLA -->
  <!ENTITY Lcedil	"&#x013B;"> <!-- LATIN CAPITAL LETTER L WITH CEDILLA -->
  <!ENTITY lmidot	"&#x0140;"> <!-- LATIN SMALL LETTER L WITH MIDDLE DOT -->
  <!ENTITY Lmidot	"&#x013F;"> <!-- LATIN CAPITAL LETTER L WITH MIDDLE DOT -->
  <!ENTITY lstrok	"&#x0142;"> <!-- LATIN SMALL LETTER L WITH STROKE -->
  <!ENTITY Lstrok	"&#x0141;"> <!-- LATIN CAPITAL LETTER L WITH STROKE -->
  <!ENTITY nacute	"&#x0144;"> <!-- LATIN SMALL LETTER N WITH ACUTE -->
  <!ENTITY Nacute	"&#x0143;"> <!-- LATIN CAPITAL LETTER N WITH ACUTE -->
  <!ENTITY eng	"&#x014B;"> <!-- LATIN SMALL LETTER ENG -->
  <!ENTITY ENG	"&#x014A;"> <!-- LATIN CAPITAL LETTER ENG -->
  <!ENTITY napos	"&#x0149;"> <!-- LATIN SMALL LETTER N PRECEDED BY APOSTROPHE -->
  <!ENTITY ncaron	"&#x0148;"> <!-- LATIN SMALL LETTER N WITH CARON -->
  <!ENTITY Ncaron	"&#x0147;"> <!-- LATIN CAPITAL LETTER N WITH CARON -->
  <!ENTITY ncedil	"&#x0146;"> <!-- LATIN SMALL LETTER N WITH CEDILLA -->
  <!ENTITY Ncedil	"&#x0145;"> <!-- LATIN CAPITAL LETTER N WITH CEDILLA -->
  <!ENTITY odblac	"&#x0151;"> <!-- LATIN SMALL LETTER O WITH DOUBLE ACUTE -->
  <!ENTITY Odblac	"&#x0150;"> <!-- LATIN CAPITAL LETTER O WITH DOUBLE ACUTE -->
  <!ENTITY Omacr	"&#x014C;"> <!-- LATIN CAPITAL LETTER O WITH MACRON -->
  <!ENTITY omacr	"&#x014D;"> <!-- LATIN SMALL LETTER O WITH MACRON -->
  <!ENTITY oelig	"&#x0153;"> <!-- LATIN SMALL LIGATURE OE -->
  <!ENTITY OElig	"&#x0152;"> <!-- LATIN CAPITAL LIGATURE OE -->
  <!ENTITY racute	"&#x0155;"> <!-- LATIN SMALL LETTER R WITH ACUTE -->
  <!ENTITY Racute	"&#x0154;"> <!-- LATIN CAPITAL LETTER R WITH ACUTE -->
  <!ENTITY rcaron	"&#x0159;"> <!-- LATIN SMALL LETTER R WITH CARON -->
  <!ENTITY Rcaron	"&#x0158;"> <!-- LATIN CAPITAL LETTER R WITH CARON -->
  <!ENTITY rcedil	"&#x0157;"> <!-- LATIN SMALL LETTER R WITH CEDILLA -->
  <!ENTITY Rcedil	"&#x0156;"> <!-- LATIN CAPITAL LETTER R WITH CEDILLA -->
  <!ENTITY sacute	"&#x015B;"> <!-- LATIN SMALL LETTER S WITH ACUTE -->
  <!ENTITY Sacute	"&#x015A;"> <!-- LATIN CAPITAL LETTER S WITH ACUTE -->
  <!ENTITY scaron	"&#x0161;"> <!-- LATIN SMALL LETTER S WITH CARON -->
  <!ENTITY Scaron	"&#x0160;"> <!-- LATIN CAPITAL LETTER S WITH CARON -->
  <!ENTITY scedil	"&#x015F;"> <!-- LATIN SMALL LETTER S WITH CEDILLA -->
  <!ENTITY Scedil	"&#x015E;"> <!-- LATIN CAPITAL LETTER S WITH CEDILLA -->
  <!ENTITY scirc	"&#x015D;"> <!-- LATIN SMALL LETTER S WITH CIRCUMFLEX -->
  <!ENTITY Scirc	"&#x015C;"> <!-- LATIN CAPITAL LETTER S WITH CIRCUMFLEX -->
  <!ENTITY tcaron	"&#x0165;"> <!-- LATIN SMALL LETTER T WITH CARON -->
  <!ENTITY Tcaron	"&#x0164;"> <!-- LATIN CAPITAL LETTER T WITH CARON -->
  <!ENTITY tcedil	"&#x0163;"> <!-- LATIN SMALL LETTER T WITH CEDILLA -->
  <!ENTITY Tcedil	"&#x0162;"> <!-- LATIN CAPITAL LETTER T WITH CEDILLA -->
  <!ENTITY tstrok	"&#x0167;"> <!-- LATIN SMALL LETTER T WITH STROKE -->
  <!ENTITY Tstrok	"&#x0166;"> <!-- LATIN CAPITAL LETTER T WITH STROKE -->
  <!ENTITY ubreve	"&#x016D;"> <!-- LATIN SMALL LETTER U WITH BREVE -->
  <!ENTITY Ubreve	"&#x016C;"> <!-- LATIN CAPITAL LETTER U WITH BREVE -->
  <!ENTITY udblac	"&#x0171;"> <!-- LATIN SMALL LETTER U WITH DOUBLE ACUTE -->
  <!ENTITY Udblac	"&#x0170;"> <!-- LATIN CAPITAL LETTER U WITH DOUBLE ACUTE -->
  <!ENTITY umacr	"&#x016B;"> <!-- LATIN SMALL LETTER U WITH MACRON -->
  <!ENTITY Umacr	"&#x016A;"> <!-- LATIN CAPITAL LETTER U WITH MACRON -->
  <!ENTITY uogon	"&#x0173;"> <!-- LATIN SMALL LETTER U WITH OGONEK -->
  <!ENTITY Uogon	"&#x0172;"> <!-- LATIN CAPITAL LETTER U WITH OGONEK -->
  <!ENTITY uring	"&#x016F;"> <!-- LATIN SMALL LETTER U WITH RING ABOVE -->
  <!ENTITY Uring	"&#x016E;"> <!-- LATIN CAPITAL LETTER U WITH RING ABOVE -->
  <!ENTITY utilde	"&#x0169;"> <!-- LATIN SMALL LETTER U WITH TILDE -->
  <!ENTITY Utilde	"&#x0168;"> <!-- LATIN CAPITAL LETTER U WITH TILDE -->
  <!ENTITY wcirc	"&#x0175;"> <!-- LATIN SMALL LETTER W WITH CIRCUMFLEX -->
  <!ENTITY Wcirc	"&#x0174;"> <!-- LATIN CAPITAL LETTER W WITH CIRCUMFLEX -->
  <!ENTITY ycirc	"&#x0177;"> <!-- LATIN SMALL LETTER Y WITH CIRCUMFLEX -->
  <!ENTITY Ycirc	"&#x0176;"> <!-- LATIN CAPITAL LETTER Y WITH CIRCUMFLEX -->
  <!ENTITY Yuml	"&#x0178;"> <!-- LATIN CAPITAL LETTER Y WITH DIAERESIS -->
  <!ENTITY zacute	"&#x017A;"> <!-- LATIN SMALL LETTER Z WITH ACUTE -->
  <!ENTITY Zacute	"&#x0179;"> <!-- LATIN CAPITAL LETTER Z WITH ACUTE -->
  <!ENTITY zcaron	"&#x017E;"> <!-- LATIN SMALL LETTER Z WITH CARON -->
  <!ENTITY Zcaron	"&#x017D;"> <!-- LATIN CAPITAL LETTER Z WITH CARON -->
  <!ENTITY zdot	"&#x017C;"> <!-- LATIN SMALL LETTER Z WITH DOT ABOVE -->
  <!ENTITY Zdot	"&#x017B;"> <!-- LATIN CAPITAL LETTER Z WITH DOT ABOVE -->
  <!-- iso-num.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
  
  <!-- Derived from the corresponding ISO 8879 standard entity set
       and the Unicode character mappings provided by Sebastian Rahtz -->
  
  <!ENTITY half	"&#x00BD;"> <!-- VULGAR FRACTION ONE HALF -->
  <!ENTITY frac12	"&#x00BD;"> <!-- VULGAR FRACTION ONE HALF -->
  <!ENTITY frac14	"&#x00BC;"> <!-- VULGAR FRACTION ONE QUARTER -->
  <!ENTITY frac34	"&#x00BE;"> <!-- VULGAR FRACTION THREE QUARTERS -->
  <!ENTITY frac18	"&#x215B;"> <!--  -->
  <!ENTITY frac38	"&#x215C;"> <!--  -->
  <!ENTITY frac58	"&#x215D;"> <!--  -->
  <!ENTITY frac78	"&#x215E;"> <!--  -->
  <!ENTITY sup1	"&#x00B9;"> <!-- SUPERSCRIPT ONE -->
  <!ENTITY sup2	"&#x00B2;"> <!-- SUPERSCRIPT TWO -->
  <!ENTITY sup3	"&#x00B3;"> <!-- SUPERSCRIPT THREE -->
  <!ENTITY plus	"&#x002B;"> <!-- PLUS SIGN -->
  <!ENTITY plusmn	"&#x00B1;"> <!-- PLUS-MINUS SIGN -->
  <!ENTITY lt	"&#38;#60;"> <!-- LESS-THAN SIGN -->
  <!ENTITY equals	"&#x003D;"> <!-- EQUALS SIGN -->
  <!ENTITY gt	"&#x003E;"> <!-- GREATER-THAN SIGN -->
  <!ENTITY divide	"&#x00F7;"> <!-- DIVISION SIGN -->
  <!ENTITY times	"&#x00D7;"> <!-- MULTIPLICATION SIGN -->
  <!ENTITY curren	"&#x00A4;"> <!-- CURRENCY SIGN -->
  <!ENTITY pound	"&#x00A3;"> <!-- POUND SIGN -->
  <!ENTITY dollar	"&#x0024;"> <!-- DOLLAR SIGN -->
  <!ENTITY cent	"&#x00A2;"> <!-- CENT SIGN -->
  <!ENTITY yen	"&#x00A5;"> <!-- YEN SIGN -->
  <!ENTITY num	"&#x0023;"> <!-- NUMBER SIGN -->
  <!ENTITY percnt	"&#x0025;"> <!-- PERCENT SIGN -->
  <!ENTITY amp	"&#38;#38;"> <!-- AMPERSAND -->
  <!ENTITY ast	"&#x002A;"> <!-- ASTERISK OPERATOR -->
  <!ENTITY commat	"&#x0040;"> <!-- COMMERCIAL AT -->
  <!ENTITY lsqb	"&#x005B;"> <!-- LEFT SQUARE BRACKET -->
  <!ENTITY bsol	"&#x005C;"> <!-- REVERSE SOLIDUS -->
  <!ENTITY rsqb	"&#x005D;"> <!-- RIGHT SQUARE BRACKET -->
  <!ENTITY lcub	"&#x007B;"> <!-- LEFT CURLY BRACKET -->
  <!ENTITY horbar	"&#x2015;"> <!-- HORIZONTAL BAR -->
  <!ENTITY verbar	"&#x007C;"> <!-- VERTICAL LINE -->
  <!ENTITY rcub	"&#x007D;"> <!-- RIGHT CURLY BRACKET -->
  <!ENTITY micro	"&#x00B5;"> <!-- MICRO SIGN -->
  <!ENTITY ohm	"&#x2126;"> <!-- OHM SIGN -->
  <!ENTITY deg	"&#x00B0;"> <!-- DEGREE SIGN -->
  <!ENTITY ordm	"&#x00BA;"> <!-- MASCULINE ORDINAL INDICATOR -->
  <!ENTITY ordf	"&#x00AA;"> <!-- FEMININE ORDINAL INDICATOR -->
  <!ENTITY sect	"&#x00A7;"> <!-- SECTION SIGN -->
  <!ENTITY para	"&#x00B6;"> <!-- PILCROW SIGN -->
  <!ENTITY middot	"&#x00B7;"> <!-- MIDDLE DOT -->
  <!ENTITY larr	"&#x2190;"> <!-- LEFTWARDS DOUBLE ARROW -->
  <!ENTITY rarr	"&#x2192;"> <!-- RIGHTWARDS DOUBLE ARROW -->
  <!ENTITY uarr	"&#x2191;"> <!-- UPWARDS ARROW -->
  <!ENTITY darr	"&#x2193;"> <!-- DOWNWARDS ARROW -->
  <!ENTITY copy	"&#x00A9;"> <!-- COPYRIGHT SIGN -->
  <!ENTITY reg	"&#x00AE;"> <!-- REG TRADE MARK SIGN -->
  <!ENTITY trade	"&#x2122;"> <!-- TRADE MARK SIGN -->
  <!ENTITY brvbar	"&#x00A6;"> <!-- BROKEN BAR -->
  <!ENTITY not	"&#x00AC;"> <!-- NOT SIGN -->
  <!ENTITY sung	"&#x2669;"> <!--  -->
  <!ENTITY excl	"&#x0021;"> <!-- EXCLAMATION MARK -->
  <!ENTITY iexcl	"&#x00A1;"> <!-- INVERTED EXCLAMATION MARK -->
  <!ENTITY quot	"&#x0022;"> <!-- QUOTATION MARK -->
  <!ENTITY apos	"&#x0027;"> <!-- APOSTROPHE -->
  <!ENTITY lpar	"&#x0028;"> <!-- LEFT PARENTHESIS -->
  <!ENTITY rpar	"&#x0029;"> <!-- RIGHT PARENTHESIS -->
  <!ENTITY comma	"&#x002C;"> <!-- COMMA -->
  <!ENTITY lowbar	"&#x005F;"> <!-- LOW LINE -->
  <!ENTITY hyphen	"&#x002D;"> <!-- HYPHEN-MINUS -->
  <!ENTITY period	"&#x002E;"> <!-- FULL STOP -->
  <!ENTITY sol	"&#x002F;"> <!-- SOLIDUS -->
  <!ENTITY colon	"&#x003A;"> <!-- COLON -->
  <!ENTITY semi	"&#x003B;"> <!-- SEMICOLON -->
  <!ENTITY quest	"&#x003F;"> <!-- QUESTION MARK -->
  <!ENTITY iquest	"&#x00BF;"> <!-- INVERTED QUESTION MARK -->
  <!ENTITY laquo	"&#x00AB;"> <!-- LEFT-POINTING DOUBLE ANGLE QUOTATION MARK -->
  <!ENTITY raquo	"&#x00BB;"> <!-- RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -->
  <!ENTITY lsquo	"&#x2018;"> <!--  -->
  <!ENTITY rsquo	"&#x2019;"> <!-- RIGHT SINGLE QUOTATION MARK -->
  <!ENTITY ldquo	"&#x201C;"> <!--  -->
  <!ENTITY rdquo	"&#x201D;"> <!-- RIGHT DOUBLE QUOTATION MARK -->
  <!ENTITY nbsp	"&#x00A0;"> <!-- NO-BREAK SPACE -->
  <!ENTITY shy	"&#x00AD;"> <!-- SOFT HYPHEN -->
  <!-- iso-pub.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
  
  <!-- Derived from the corresponding ISO 8879 standard entity set
       and the Unicode character mappings provided by Sebastian Rahtz -->
  
  <!ENTITY emsp	"&#x2003;"> <!-- EM SPACE -->
  <!ENTITY ensp	"&#x2002;"> <!-- EN SPACE -->
  <!ENTITY emsp13	"&#x2004;"> <!-- THREE-PER-EM SPACE -->
  <!ENTITY emsp14	"&#x2005;"> <!-- FOUR-PER-EM SPACE -->
  <!ENTITY numsp	"&#x2007;"> <!-- FIGURE SPACE -->
  <!ENTITY puncsp	"&#x2008;"> <!-- PUNCTUATION SPACE -->
  <!ENTITY thinsp	"&#x2009;"> <!-- THIN SPACE -->
  <!ENTITY hairsp	"&#x200A;"> <!-- HAIR SPACE -->
  <!ENTITY mdash	"&#x2014;"> <!-- EM DASH -->
  <!ENTITY ndash	"&#x2013;"> <!-- EN DASH -->
  <!ENTITY dash	"&#x2010;"> <!-- HYPHEN -->
  <!ENTITY blank	"&#x2423;"> <!-- OPEN BOX -->
  <!ENTITY hellip	"&#x2026;"> <!-- HORIZONTAL ELLIPSIS -->
  <!ENTITY nldr	"&#x2025;"> <!-- TWO DOT LEADER -->
  <!ENTITY frac13	"&#x2153;"> <!-- VULGAR FRACTION ONE THIRD -->
  <!ENTITY frac23	"&#x2154;"> <!-- VULGAR FRACTION TWO THIRDS -->
  <!ENTITY frac15	"&#x2155;"> <!-- VULGAR FRACTION ONE FIFTH -->
  <!ENTITY frac25	"&#x2156;"> <!-- VULGAR FRACTION TWO FIFTHS -->
  <!ENTITY frac35	"&#x2157;"> <!-- VULGAR FRACTION THREE FIFTHS -->
  <!ENTITY frac45	"&#x2158;"> <!-- VULGAR FRACTION FOUR FIFTHS -->
  <!ENTITY frac16	"&#x2159;"> <!-- VULGAR FRACTION ONE SIXTH -->
  <!ENTITY frac56	"&#x215A;"> <!-- VULGAR FRACTION FIVE SIXTHS -->
  <!ENTITY incare	"&#x2105;"> <!-- CARE OF -->
  <!ENTITY block	"&#x2588;"> <!-- FULL BLOCK -->
  <!ENTITY uhblk	"&#x2580;"> <!-- UPPER HALF BLOCK -->
  <!ENTITY lhblk	"&#x2584;"> <!-- LOWER HALF BLOCK -->
  <!ENTITY blk14	"&#x2591;"> <!-- LIGHT SHADE -->
  <!ENTITY blk12	"&#x2592;"> <!-- MEDIUM SHADE -->
  <!ENTITY blk34	"&#x2593;"> <!-- DARK SHADE -->
  <!ENTITY marker	"&#x25AE;"> <!-- BLACK VERTICAL RECTANGLE -->
  <!ENTITY cir	"&#x25CB;"> <!-- WHITE CIRCLE -->
  <!ENTITY squ	"&#x25A1;"> <!-- WHITE SQUARE -->
  <!ENTITY rect	"&#x25AD;"> <!-- WHITE RECTANGLE -->
  <!ENTITY utri	"&#x25B5;"> <!-- WHITE UP-POINTING TRIANGLE -->
  <!ENTITY dtri	"&#x25BF;"> <!-- WHITE DOWN-POINTING TRIANGLE -->
  <!ENTITY star	"&#x22C6;"> <!-- STAR OPERATOR -->
  <!ENTITY bull	"&#x2022;"> <!-- BULLET -->
  <!ENTITY squf	"&#x25AA;"> <!--  -->
  <!ENTITY utrif	"&#x25B4;"> <!-- BLACK UP-POINTING TRIANGLE -->
  <!ENTITY dtrif	"&#x25BE;"> <!-- BLACK DOWN-POINTING TRIANGLE -->
  <!ENTITY ltrif	"&#x25C2;"> <!-- BLACK LEFT-POINTING TRIANGLE -->
  <!ENTITY rtrif	"&#x25B8;"> <!-- BLACK RIGHT-POINTING TRIANGLE -->
  <!ENTITY clubs	"&#x2663;"> <!-- BLACK CLUB SUIT -->
  <!ENTITY diams	"&#x2666;"> <!-- BLACK DIAMOND SUIT -->
  <!ENTITY hearts	"&#x2665;"> <!-- BLACK HEART SUIT -->
  <!ENTITY spades	"&#x2660;"> <!-- BLACK SPADE SUIT -->
  <!ENTITY malt	"&#x2720;"> <!-- MALTESE CROSS -->
  <!ENTITY dagger	"&#x2020;"> <!-- DAGGER -->
  <!ENTITY Dagger	"&#x2021;"> <!-- DOUBLE DAGGER -->
  <!ENTITY check	"&#x2713;"> <!-- CHECK MARK -->
  <!ENTITY cross	"&#x2717;"> <!-- BALLOT X -->
  <!ENTITY sharp	"&#x266F;"> <!-- MUSIC SHARP SIGN -->
  <!ENTITY flat	"&#x266D;"> <!-- MUSIC FLAT SIGN -->
  <!ENTITY male	"&#x2642;"> <!-- MALE SIGN -->
  <!ENTITY female	"&#x2640;"> <!--  -->
  <!ENTITY phone	"&#x260E;"> <!-- TELEPHONE SIGN -->
  <!ENTITY telrec	"&#x2315;"> <!-- TELEPHONE RECORDER -->
  <!ENTITY copysr	"&#x2117;"> <!-- SOUND RECORDING COPYRIGHT -->
  <!ENTITY caret	"&#x2041;"> <!-- CARET -->
  <!ENTITY lsquor	"&#x201A;"> <!-- SINGLE LOW-9 QUOTATION MARK -->
  <!ENTITY ldquor	"&#x201E;"> <!-- DOUBLE LOW-9 QUOTATION MARK -->
  <!ENTITY fflig	"&#xFB00;"> <!--  -->
  <!ENTITY filig	"&#xFB01;"> <!--  -->
  <!--     fjlig	Unknown unicode character -->
  <!ENTITY ffilig	"&#xFB03;"> <!--  -->
  <!ENTITY ffllig	"&#xFB04;"> <!--  -->
  <!ENTITY fllig	"&#xFB02;"> <!--  -->
  <!ENTITY mldr	"&#x2026;"> <!-- HORIZONTAL ELLIPSIS -->
  <!ENTITY rdquor	"&#x201C;"> <!--  -->
  <!ENTITY rsquor	"&#x2018;"> <!--  -->
  <!ENTITY vellip	"&#x22EE;"> <!--  -->
  <!ENTITY hybull	"&#x2043;"> <!-- HYPHEN BULLET -->
  <!ENTITY loz	"&#x25CA;"> <!-- LOZENGE -->
  <!ENTITY lozf	"&#x2726;"> <!--  -->
  <!ENTITY ltri	"&#x25C3;"> <!-- WHITE LEFT-POINTING TRIANGLE -->
  <!ENTITY rtri	"&#x25B9;"> <!-- WHITE RIGHT-POINTING TRIANGLE -->
  <!ENTITY starf	"&#x2605;"> <!-- BLACK STAR -->
  <!ENTITY natur	"&#x266E;"> <!-- MUSIC NATURAL SIGN -->
  <!ENTITY rx	"&#x211E;"> <!-- PRESCRIPTION TAKE -->
  <!ENTITY sext	"&#x2736;"> <!-- SIX POINTED BLACK STAR -->
  <!ENTITY target	"&#x2316;"> <!-- POSITION INDICATOR -->
  <!ENTITY dlcrop	"&#x230D;"> <!-- BOTTOM LEFT CROP -->
  <!ENTITY drcrop	"&#x230C;"> <!-- BOTTOM RIGHT CROP -->
  <!ENTITY ulcrop	"&#x230F;"> <!-- TOP LEFT CROP -->
  <!ENTITY urcrop	"&#x230E;"> <!-- TOP RIGHT CROP -->
  <!-- iso-tech.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
  
  <!-- Derived from the corresponding ISO 8879 standard entity set
       and the Unicode character mappings provided by Sebastian Rahtz.
       With additional derivations from
       ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/MISC/SGML.TXT -->
  
  <!ENTITY aleph	"&#x2135;"> <!-- ALEF SYMBOL -->
  <!ENTITY and	"&#x2227;"> <!--  -->
  <!ENTITY ang90	"&#x221F;"> <!-- RIGHT ANGLE -->
  <!ENTITY angsph	"&#x2222;"> <!--  -->
  <!ENTITY ap	"&#x2248;"> <!--  -->
  <!ENTITY becaus	"&#x2235;"> <!-- BECAUSE -->
  <!ENTITY bottom	"&#x22A5;"> <!--  -->
  <!ENTITY cap	"&#x2229;"> <!--  -->
  <!ENTITY cong	"&#x2245;"> <!--  -->
  <!ENTITY conint	"&#x222E;"> <!--  -->
  <!ENTITY cup	"&#x222A;"> <!--  -->
  <!ENTITY equiv	"&#x2261;"> <!--  -->
  <!ENTITY exist	"&#x2203;"> <!--  -->
  <!ENTITY forall	"&#x2200;"> <!--  -->
  <!ENTITY fnof	"&#x0192;"> <!-- LATIN SMALL LETTER F WITH HOOK -->
  <!ENTITY ge	"&#x2265;"> <!-- GREATER-THAN OR EQUAL TO -->
  <!ENTITY iff	"&#x21D4;"> <!-- LEFT RIGHT DOUBLE ARROW -->
  <!ENTITY infin	"&#x221E;"> <!--  -->
  <!ENTITY int	"&#x222B;"> <!--  -->
  <!ENTITY isin	"&#x220A;"> <!--  -->
  <!ENTITY lang	"&#x3008;"> <!--  -->
  <!ENTITY lArr	"&#x21D0;"> <!-- LEFTWARDS ARROW -->
  <!ENTITY le	"&#x2264;"> <!--  -->
  <!ENTITY minus	"&#x2212;"> <!-- MINUS SIGN -->
  <!ENTITY mnplus	"&#x2213;"> <!--  -->
  <!ENTITY nabla	"&#x2207;"> <!-- NABLA -->
  <!ENTITY ne	"&#x2260;"> <!--  -->
  <!ENTITY ni	"&#x220D;"> <!--  -->
  <!ENTITY or	"&#x2228;"> <!--  -->
  <!ENTITY par	"&#x2225;"> <!-- PARALLEL TO -->
  <!ENTITY part	"&#x2202;"> <!--  -->
  <!ENTITY permil	"&#x2030;"> <!-- PER MILLE SIGN -->
  <!ENTITY perp	"&#x22A5;"> <!--  -->
  <!ENTITY prime	"&#x2032;"> <!-- PRIME -->
  <!ENTITY Prime	"&#x2033;"> <!-- DOUBLE PRIME -->
  <!ENTITY prop	"&#x221D;"> <!--  -->
  <!ENTITY radic	"&#x221A;"> <!--  -->
  <!ENTITY rang	"&#x3009;"> <!--  -->
  <!ENTITY rArr	"&#x21D2;"> <!-- RIGHTWARDS ARROW -->
  <!ENTITY sim	"&#x223C;"> <!--  -->
  <!ENTITY sime	"&#x2243;"> <!--  -->
  <!ENTITY square	"&#x25A1;"> <!-- WHITE SQUARE -->
  <!ENTITY sub	"&#x2282;"> <!--  -->
  <!ENTITY sube	"&#x2286;"> <!--  -->
  <!ENTITY sup	"&#x2283;"> <!--  -->
  <!ENTITY supe	"&#x2287;"> <!--  -->
  <!ENTITY there4	"&#x2234;"> <!--  -->
  <!ENTITY Verbar	"&#x2016;"> <!-- DOUBLE VERTICAL LINE -->
  <!ENTITY angst	"&#x212B;"> <!-- ANGSTROM SIGN -->
  <!ENTITY bernou	"&#x212C;"> <!-- SCRIPT CAPITAL B -->
  <!ENTITY compfn	"&#x2218;"> <!-- RING OPERATOR -->
  <!ENTITY Dot	"&#x00A8;"> <!--  -->
  <!ENTITY DotDot	"&#x20DC;"> <!-- COMBINING FOUR DOTS ABOVE -->
  <!ENTITY hamilt	"&#x210B;"> <!-- SCRIPT CAPITAL H -->
  <!ENTITY lagran	"&#x2112;"> <!-- SCRIPT CAPITAL L -->
  <!ENTITY lowast	"&#x2217;"> <!-- ASTERISK OPERATOR -->
  <!ENTITY notin	"&#x2209;"> <!--  -->
  <!ENTITY order	"&#x2134;"> <!-- SCRIPT SMALL O -->
  <!ENTITY phmmat	"&#x2133;"> <!-- SCRIPT CAPITAL M -->
  <!ENTITY tdot	"&#x20DB;"> <!-- COMBINING THREE DOTS ABOVE -->
  <!ENTITY tprime	"&#x2034;"> <!-- TRIPLE PRIME -->
  <!ENTITY wedgeq	"&#x2259;"> <!-- ESTIMATES -->
  Index: ossp-pkg/sugar/sxml2fo.xsl
  ============================================================
  $ cvs update -p -r1.1 sxml2fo.xsl
  
  
  Index: ossp-pkg/sugar/sxml2html.xsl
  ============================================================
  $ cvs update -p -r1.1 sxml2html.xsl
  <?xml version='1.0'?>
  <!-- sxml2html.xsl - XSL Stylesheet for translating Sugar XML to HTMLXML 
       Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> -->
  
  <xsl:stylesheet
      version='1.0'
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns="http://www.w3.org/TR/xhtml1/transitional"
      exclude-result-prefixes="#default">
  
    <xsl:template match="/">
      <body> 
        <xsl:apply-templates/>
      </body> 
    </xsl:template>
  
    <xsl:template match="/sugar/body/h1">
      <h1><xsl:apply-templates/></h1>
    </xsl:template>
  
    <xsl:template match="/sugar/head/abstract">
        <xsl:text>Abstract</xsl:text>
        <br/>
        <blockquote>
        <xsl:apply-templates/>
        </blockquote>
    </xsl:template>
  
  </xsl:stylesheet>
  
  Index: ossp-pkg/sugar/sxml2latex.xsl
  ============================================================
  $ cvs update -p -r1.1 sxml2latex.xsl
  
  
  Index: ossp-pkg/sugar/sxml2roff.xsl
  ============================================================
  $ cvs update -p -r1.1 sxml2roff.xsl
  
  
  Index: ossp-pkg/sugar/sxml2xxx
  ============================================================
  $ cvs update -p -r1.1 sxml2xxx
  #!/usr/bin/perl
  ##
  ##  sxml2xxx -- Sugar XML to Output Translator
  ##
  
  Index: ossp-pkg/sugar/test.srml
  ============================================================
  $ cvs update -p -r1.1 test.srml
  
    Sugar - The Markup Language With Invisible Syntactic Sugar
    ==========================================================
  
    Title:   Sugar - The Markup Language With Invisible Syntactic Sugar
    Author:  Ralf S. Engelschall <rse@engelschall.com>
    Author:  Christian Reiber <chrei@en.muc.de>
    Genesis: 12-Mar-1999
    Date:    26-Jun-2000
    
    Introduction
    ------------
  
    Me & you Sugar is a markup language and corresponding translator tool for
    writing technical documentation that uses mostly invisible markup
    tags (the so-called //syntactic sugar// in compiler construction folk
    terminology). See ->foo<- **foo**
    
    The general idea is that the markup text looks already like the
    textual output of the translator phase, that is, the Sugar source
    can be already treated as its text output format ("ASCII WYSIWYG").
    Additionally the Sugar markup language is considered intuitive enough
    to be recognized easily, so writing technical documentation is mainly
    just a matter of performing a brain dump. (+foo+)
  
    || Special Block For testing
  
       o. foo
          bar
  
          o baz1
          o baz2
  
       -. quux
  
       purposes only.
  
    So Sugars syntactic principle is "keep it simple'n'stupid" (KISS)
    but still powerful enough to allow one to produce high-quality
    output. Sugars goal is not to **provide** all features of a full featured
    documentation system. Instead it provides only a few markup concepts
    but those are streched to a **maximum.
  
    Sugar Grammar
    -------------
  
    A Sugar document is described by the following grammar:
  
    ++ table
       foo bar
       quux
  
    where <regular-block> is defined visually as a rectangular block
    of continued text inside the document, that is a paragraph of
  
    ** BOLD TEXT
  
    text (without any blank lines) where each line starts at the same
  
    ** BOLD TEXT
       A SECOND TIME
  
    indentation position.
  
  Index: ossp-pkg/sugar/test.sxml
  ============================================================
  $ cvs update -p -r1.1 test.sxml
  <?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
  <!DOCTYPE sugar PUBLIC "-//OSSP//DTD Sugar XML 0.1.0//EN" "sxml.dtd" []>
  <sugar>
    <head>
      <title>A Sample Sugar XML Document</title>
      <author>Ralf S. Engelschall</author>
      <abstract>
        Foobar abstract
      </abstract>
    </head>
    <body>
    <h1>Header 1</h1>
    Hallo 1!
    <h2>Header 2</h2>
    Hallo 2!
    </body>
  </sugar>

From ossp-cvs-owner@ossp.org  Wed Mar 13 13:05:13 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EF3387642C; Wed, 13 Mar 2002 13:05:12 +0100 (CET)
From: "Michael Schloh" <michael.schloh@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_var.c
Message-Id: <20020313120512.EF3387642C@mail.ossp.org>
Date: Wed, 13 Mar 2002 13:05:12 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  michael.schloh@cw.com
  Module: ossp-pkg                         Date:   13-Mar-2002 13:05:12
  Branch: HEAD                             Handle: 1970010101000000

  Removed files:
    ossp-pkg/l2             l2_ch_var.c

  Log:
    A var channel is not yet needed, or maybe cannot be designed to be generic
    eneough for common usage. It's in the attic, if needed later on.

  Summary:
    Revision    Changes     Path
    NONE        +0  -120    ossp-pkg/l2/l2_ch_var.c
  ____________________________________________________________________________

  

From ossp-cvs-owner@ossp.org  Wed Mar 13 14:58:40 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 93ED67642C; Wed, 13 Mar 2002 14:58:40 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp Makefile.in fixme.h lmtp2nntp_config.c ...
Message-Id: <20020313135840.93ED67642C@mail.ossp.org>
Date: Wed, 13 Mar 2002 14:58:40 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   13-Mar-2002 14:58:40
  Branch: HEAD                             Handle: 2002031313583900

  Added files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_l2.c
  Modified files:
    ossp-pkg/lmtp2nntp      Makefile.in fixme.h lmtp2nntp_config.c
                            lmtp2nntp_main.c

  Log:
    implemented var_expand inside l2

  Summary:
    Revision    Changes     Path
    1.47        +2  -2      ossp-pkg/lmtp2nntp/Makefile.in
    1.21        +2  -0      ossp-pkg/lmtp2nntp/fixme.h
    1.66        +19 -2      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.1         +128 -0     ossp-pkg/lmtp2nntp/lmtp2nntp_l2.c
    1.49        +32 -6      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.46 -r1.47 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	14 Feb 2002 10:51:50 -0000	1.46
  +++ ossp-pkg/lmtp2nntp/Makefile.in	13 Mar 2002 13:58:39 -0000	1.47
  @@ -45,8 +45,8 @@
   
   PROG = lmtp2nntp
   HDRS = lmtp2nntp_global.h lmtp2nntp_daemon.h lmtp2nntp_lmtp.h lmtp2nntp_nntp.h lmtp2nntp_argz.h lmtp2nntp_shpat.h lmtp2nntp_msg.h lmtp2nntp_option.h lmtp2nntp_config.h lmtp2nntp_exwrap.h 
  -SRCS = lmtp2nntp_main.c   lmtp2nntp_daemon.c lmtp2nntp_lmtp.c lmtp2nntp_nntp.c lmtp2nntp_argz.c lmtp2nntp_shpat.c lmtp2nntp_msg.c lmtp2nntp_option.c lmtp2nntp_config.c lmtp2nntp_exwrap.c lmtp2nntp_version.c 
  -OBJS = lmtp2nntp_main.o   lmtp2nntp_daemon.o lmtp2nntp_lmtp.o lmtp2nntp_nntp.o lmtp2nntp_argz.o lmtp2nntp_shpat.o lmtp2nntp_msg.o lmtp2nntp_option.o lmtp2nntp_config.o lmtp2nntp_exwrap.o lmtp2nntp_version.o
  +SRCS = lmtp2nntp_main.c   lmtp2nntp_daemon.c lmtp2nntp_lmtp.c lmtp2nntp_nntp.c lmtp2nntp_argz.c lmtp2nntp_shpat.c lmtp2nntp_msg.c lmtp2nntp_option.c lmtp2nntp_config.c lmtp2nntp_exwrap.c lmtp2nntp_version.c lmtp2nntp_l2.c
  +OBJS = lmtp2nntp_main.o   lmtp2nntp_daemon.o lmtp2nntp_lmtp.o lmtp2nntp_nntp.o lmtp2nntp_argz.o lmtp2nntp_shpat.o lmtp2nntp_msg.o lmtp2nntp_option.o lmtp2nntp_config.o lmtp2nntp_exwrap.o lmtp2nntp_version.o lmtp2nntp_l2.o
   
   SUBDIRS = @SUBDIR_EX@ @SUBDIR_STR@ @SUBDIR_L2@ @SUBDIR_SA@ @SUBDIR_VAR@ @SUBDIR_VAL@ @SUBDIR_POPT@ @SUBDIR_PCRE@
   
  Index: ossp-pkg/lmtp2nntp/fixme.h
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 fixme.h
  --- ossp-pkg/lmtp2nntp/fixme.h	4 Mar 2002 15:54:28 -0000	1.20
  +++ ossp-pkg/lmtp2nntp/fixme.h	13 Mar 2002 13:58:39 -0000	1.21
  @@ -126,4 +126,6 @@
   void msg_headermatrixteardwn(msg_t *msg);
   void headerrewrite(lmtp2nntp_t *ctx);
   
  +#include "l2.h"
  +extern l2_handler_t l2_handler_var;
   #endif /* __FIXME_H__ */
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.65 -r1.66 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	6 Mar 2002 14:26:33 -0000	1.65
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	13 Mar 2002 13:58:39 -0000	1.66
  @@ -119,7 +119,6 @@
   {
       ex_t ex;
       optionval_t *ov;
  -    //char *cp;
       int rc;
   
       /* create L2 environment */
  @@ -148,9 +147,27 @@
           CU(ERR_EXECUTION);
       }
       if (ov->data.s != NULL) {
  +        l2_channel_t *ch;
  +
  +        if (l2_env_handler(ctx->l2_env, &l2_handler_var) != L2_OK) {
  +            fprintf(stderr, "%s:Error: logging failed to register \"%s\" handler \n", ctx->progname, l2_handler_var.name);
  +            CU(ERR_EXECUTION);
  +        }
  +        if ((rc = l2_channel_create(&ctx->l2, ctx->l2_env, l2_handler_var.name)) != L2_OK) {
  +            fprintf(stderr, "%s:Error: logging failed to create \"%s\" channel\n", ctx->progname, l2_handler_var.name);
  +            CU(ERR_EXECUTION);
  +        }
  +        if ((rc = l2_channel_configure(ctx->l2, "", ctx->config_varctx)) != L2_OK) {
  +            fprintf(stderr, "%s:Error: logging failed to configure \"%s\" channel\n", ctx->progname, l2_handler_var.name);
  +            CU(ERR_EXECUTION);
  +        }
           //FIXME this is cut off on command line!? fprintf(stderr, "DEBUG: ov->data.s = \"%s\"\n", ov->data.s);
  -        if ((rc = l2_spec(&ctx->l2, ctx->l2_env, ov->data.s)) != L2_OK) {
  +        if ((rc = l2_spec(&ch, ctx->l2_env, ov->data.s)) != L2_OK) {
               fprintf(stderr, "%s:Error: logging failed to create stream\n", ctx->progname);
  +            CU(ERR_EXECUTION);
  +        }
  +        if (l2_channel_link(ctx->l2, L2_LINK_CHILD, ch, NULL) != L2_OK) {
  +            fprintf(stderr, "%s:Error: logging failed to link child channel\n", ctx->progname);
               CU(ERR_EXECUTION);
           }
           if (l2_channel_levels(ctx->l2, L2_LEVEL_ALL, L2_LEVEL_NONE) != L2_OK) { /* FIXME should this globalmask and flushmask be user-configurable? */
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_l2.c
  ============================================================
  $ cvs update -p -r1.1 lmtp2nntp_l2.c
  
  /*
  **  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  **  mailer which forwards mails as Usenet news articles via NNTP.
  **  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  **
  **  This program is free software; you can redistribute it and/or
  **  modify it under the terms of the GNU General Public  License
  **  as published by the Free Software Foundation; either version
  **  2.0 of the License, or (at your option) any later version.
  **
  **  This program is distributed in the hope that it will be useful,
  **  but WITHOUT ANY WARRANTY; without even the implied warranty of
  **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  **  General Public License for more details.
  **
  **  You should have received a copy of the GNU General Public License
  **  along with this file; if not, write to the Free Software
  **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  **  USA, or contact the OSSP project <ossp@ossp.org>.
  **
  **  lmtp2nntp_l2.c: var logging channel for l2
  */
  
  #include <stdarg.h>
  #include <stdlib.h>
  #include "fixme.h"
  
  /* declare private channel configuration */
  typedef struct {
      var_t *var;
  } l2_ch_var_t;
  
  /* create channel */
  static l2_result_t hook_create(l2_context_t *ctx, l2_channel_t *ch)
  {
      l2_ch_var_t *cfg;
  
      /* allocate private channel configuration */
      if ((cfg = (l2_ch_var_t *)malloc(sizeof(l2_ch_var_t))) == NULL)
          return L2_ERR_MEM;
  
      /* initialize configuration with reasonable defaults */
      cfg->var = NULL; 
  
      /* link private channel configuration into channel context */
      ctx->vp = cfg;
  
      return L2_OK;
  }
  
  /* configure channel */
  static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
  {
      l2_ch_var_t *cfg;
  
      /* parameter checks */
      if ((cfg = (l2_ch_var_t *)ctx->vp) == NULL)
          return L2_ERR_ARG;
  
      /* special parameter parsing */
      if ((cfg->var = (var_t *)va_arg(ap, void *)) == NULL)
          return L2_ERR_ARG;
  
      return L2_OK;
  }
  
  /* write to channel */
  static l2_result_t hook_write(l2_context_t *ctx, l2_channel_t *ch,
                                l2_level_t level, const char *buf, size_t buf_size)
  {
      l2_ch_var_t *cfg;
      l2_channel_t *downstream;
      l2_result_t rv;
      var_rc_t var_rc;
      char *buf2 = NULL;
      size_t buf2_size;
  
      /* parameter checks */
      if ((cfg = (l2_ch_var_t *)ctx->vp) == NULL)
          return L2_ERR_ARG;
      if (cfg->var == NULL)
          return L2_ERR_ARG;
  
      /* expand variables */
      if ((var_rc = var_expand(cfg->var, buf, buf_size, &buf2, &buf2_size, FALSE)) != VAR_OK) {
          return L2_ERR_USE;
      }
  
      /* push data downstream */
      downstream = NULL;
      while ((rv = l2_channel_downstream(ch, &downstream)) == L2_OK)
          if ((rv = l2_channel_write(downstream, level, buf2, buf2_size)) != L2_OK)
              break;
  
      if (buf2 != NULL)
          free(buf2);
  
      return rv;
  }
  
  /* destroy channel */
  static l2_result_t hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
  {
      l2_ch_var_t *cfg = (l2_ch_var_t *)ctx->vp;
  
      /* destroy channel configuration */
      free(cfg);
  
      return L2_OK;
  }
  
  /* exported channel handler structure */
  l2_handler_t l2_handler_var = {
      "lmtp2nntp-l2var",
      L2_CHANNEL_FILTER,
      hook_create,
      hook_configure,
      NULL,
      hook_write,
      NULL,
      NULL,
      hook_destroy
  };
  
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.48 -r1.49 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	6 Mar 2002 14:25:39 -0000	1.48
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	13 Mar 2002 13:58:39 -0000	1.49
  @@ -36,6 +36,7 @@
   #include <sys/wait.h>
   #include <sys/stat.h>
   #include <signal.h>
  +#include <stdarg.h>
   
   /* third party (included) */
   #include "lmtp2nntp_argz.h"
  @@ -126,6 +127,12 @@
       "a-zA-Z0-9.-" /* namechars     */ 
   };
   
  +#if 0
  +typedef struct {
  +    l2_channel_t *l2;
  +} logctx_t;
  +#endif
  +
   static var_rc_t ctx_lookup(
       var_t *var,
       void *_ctx, 
  @@ -136,8 +143,19 @@
       var_rc_t rc;
       char *cp;
       optionval_t *ov;
  +#if 0
  +    logctx_t *logctx = NULL;
  +
  +    if ((logctx = (logctx_t *)malloc(sizeof(logctx_t))) != NULL) {
  +        if (l2_channel_upstream(ctx->l2, &logctx->l2) != L2_OK) {
  +            if (l2_channel_downstream(ctx->l2, &logctx->l2) != L2_OK) {
  +                logctx->l2 = NULL;
  +            }
  +        }
  +    }
  +    if (logctx != NULL && logctx->l2 != NULL) log2(logctx, DEBUG, "ctx_lookup variable \"%s\" (%d)", var_ptr, var_len);
  +#endif
   
  -    log2(ctx, DEBUG, "ctx_lookup variable \"%s\" (%d)", var_ptr, var_len);
       rc = VAR_ERR_UNDEFINED_VARIABLE;
       if (strncasecmp(var_ptr, "option.", strlen("option.")) == 0) {
           cp = str_dupex(var_ptr, var_len);
  @@ -194,10 +212,19 @@
           }
           free(cp);
       }
  -    if (rc == VAR_OK)
  -        log4(ctx, DEBUG, "ctx_lookup variable \"%s\" (%d) ok: result is \"%s\" (%d)", var_ptr, var_len, *val_ptr, *val_len);
  -    else
  -        log4(ctx, DEBUG, "ctx_lookup variable \"%s\" (%d) failed: %s (%d)", var_ptr, var_len, var_strerror(var, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  +
  +#if 0
  +    if (rc == VAR_OK) {
  +        if (logctx != NULL && logctx->l2 != NULL) log4(ctx, DEBUG, "ctx_lookup variable \"%s\" (%d) ok: result is \"%s\" (%d)", var_ptr, var_len, *val_ptr, *val_len);
  +    }
  +    else {
  +        if (logctx != NULL && logctx->l2 != NULL) log4(ctx, DEBUG, "ctx_lookup variable \"%s\" (%d) failed: %s (%d)", var_ptr, var_len, var_strerror(var, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  +    }
  +
  +    if (logctx != NULL)
  +        free(logctx);
  +#endif
  +
       return rc;
   }
   
  @@ -324,7 +351,6 @@
       }
       exit(ERR_EXECUTION);
   }
  -
   
   int main(int argc, char **argv)
   {

From ossp-cvs-owner@ossp.org  Wed Mar 13 15:41:15 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5EEEB7642C; Wed, 13 Mar 2002 15:41:14 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp fixme.h lmtp2nntp_config.c lmtp2nntp_ma...
Message-Id: <20020313144114.5EEEB7642C@mail.ossp.org>
Date: Wed, 13 Mar 2002 15:41:14 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   13-Mar-2002 15:41:14
  Branch: HEAD                             Handle: 2002031314411300

  Modified files:
    ossp-pkg/lmtp2nntp      fixme.h lmtp2nntp_config.c lmtp2nntp_main.c
                            lmtp2nntp_msg.c

  Log:
    move from log macro to logbook function

  Summary:
    Revision    Changes     Path
    1.22        +1  -0      ossp-pkg/lmtp2nntp/fixme.h
    1.67        +151 -151   ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.50        +124 -128   ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
    1.4         +21 -20     ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/fixme.h
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 fixme.h
  --- ossp-pkg/lmtp2nntp/fixme.h	13 Mar 2002 13:58:39 -0000	1.21
  +++ ossp-pkg/lmtp2nntp/fixme.h	13 Mar 2002 14:41:13 -0000	1.22
  @@ -128,4 +128,5 @@
   
   #include "l2.h"
   extern l2_handler_t l2_handler_var;
  +extern void logbook(l2_channel_t *, l2_level_t, const char *, ...);
   #endif /* __FIXME_H__ */
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.66 -r1.67 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	13 Mar 2002 13:58:39 -0000	1.66
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	13 Mar 2002 14:41:13 -0000	1.67
  @@ -182,7 +182,7 @@
       /* from this point on logging is up and running and fprintf(stderr, ...)
        * should not be used in the remainder of the program flow.
        */
  -    log1(ctx, NOTICE, "startup, version %s", lmtp2nntp_version.v_gnu);
  +    logbook(ctx->l2, L2_LEVEL_NOTICE, "startup, version %s", lmtp2nntp_version.v_gnu);
   
       /* --version FLAG */
       try {
  @@ -192,7 +192,7 @@
               || (ov->ndata == 1 && ov->data.f > 1)
               || (ov->ndata >  1)
                 ) throw(0,0,0);
  -        log1(ctx, TRACE, "--version = %d", ov->data.f);
  +        logbook(ctx->l2, L2_LEVEL_TRACE, "--version = %d", ov->data.f);
   
           if (ov->data.f == 1) {
               fprintf(stdout, "%s\n", lmtp2nntp_version.v_gnu);
  @@ -209,11 +209,11 @@
               || (ov->ndata == 1 && ov->data.s == NULL)
               || (ov->ndata >  1)
                 ) throw(0,0,0);
  -        log1(ctx, TRACE, "--childsmax = \"%s\"", ov->data.s);
  +        logbook(ctx->l2, L2_LEVEL_TRACE, "--childsmax = \"%s\"", ov->data.s);
   
           if (ov->ndata == 1)
               if ((ctx->option_childsmax = atoi(ov->data.s)) <= 0) {
  -                log1(ctx, ERROR, "option --childsmax, number (%d) out of range", ctx->option_childsmax);
  +                logbook(ctx->l2, L2_LEVEL_ERROR, "option --childsmax, number (%d) out of range", ctx->option_childsmax);
                   throw(0,0,0);
               }
       }
  @@ -229,7 +229,7 @@
               || (ov->ndata == 1 && ov->data.f > 1)
               || (ov->ndata >  1)
                 ) throw(0,0,0);
  -        log1(ctx, TRACE, "--daemonize = %d", ov->data.f);
  +        logbook(ctx->l2, L2_LEVEL_TRACE, "--daemonize = %d", ov->data.f);
   
           ctx->option_daemon = ov->data.f == 1 ? TRUE : FALSE;
       }
  @@ -244,7 +244,7 @@
               || (ov->ndata == 1 && ov->data.f > 1)
               || (ov->ndata >  1)
                 ) throw(0,0,0);
  -        log1(ctx, TRACE, "--kill = %d", ov->data.f);
  +        logbook(ctx->l2, L2_LEVEL_TRACE, "--kill = %d", ov->data.f);
   
           ctx->option_killflag = ov->data.f == 1 ? TRUE : FALSE;
       }
  @@ -258,7 +258,7 @@
               || (ov->ndata == 1 && ov->data.s == NULL)
               || (ov->ndata >  1)
                 ) throw(0,0,0);
  -        log1(ctx, TRACE, "--pidfile = \"%s\"", ov->data.s);
  +        logbook(ctx->l2, L2_LEVEL_TRACE, "--pidfile = \"%s\"", ov->data.s);
   
           if (ov->ndata == 1)
               ctx->option_pidfile = ov->data.s;
  @@ -276,9 +276,9 @@
               || (ov->ndata <  0)
               || (ov->ndata >= 1 && ov->data.m == NULL)
                 ) throw(0,0,0);
  -        log1(ctx, DEBUG, "ov->ndata = %d", ov->ndata);
  +        logbook(ctx->l2, L2_LEVEL_DEBUG, "ov->ndata = %d", ov->ndata);
           for (i = 0; i < ov->ndata; i++)
  -            log2(ctx, TRACE, "--acl[%d] = \"%s\"", i, (ov->data.m)[i]);
  +            logbook(ctx->l2, L2_LEVEL_TRACE, "--acl[%d] = \"%s\"", i, (ov->data.m)[i]);
   
           /* check if only blocking ACLs exist */
           somepass = FALSE;
  @@ -298,7 +298,7 @@
           if (ov->ndata >= 1) {
               for (i = 0; i < ov->ndata; i++) {
                   cp = (ov->data.m)[i];
  -                log2(ctx, DEBUG, "cp = (data.m)[%d] = \"%s\"", i, cp);
  +                logbook(ctx->l2, L2_LEVEL_DEBUG, "cp = (data.m)[%d] = \"%s\"", i, cp);
                   if (cp[0] == '!') {
                       ctx->pacl[i].acl = strdup(cp + 1);
                       ctx->pacl[i].not = TRUE;
  @@ -307,20 +307,20 @@
                       ctx->pacl[i].acl = strdup(cp);
                       ctx->pacl[i].not = FALSE;
                   }
  -                log2(ctx, DEBUG, "ctx->pacl[%d].not = %s", i, ctx->pacl[i].not == TRUE ? "TRUE" : "FALSE");
  -                log2(ctx, DEBUG, "ctx->pacl[%d].acl = %s", i, ctx->pacl[i].acl);
  +                logbook(ctx->l2, L2_LEVEL_DEBUG, "ctx->pacl[%d].not = %s", i, ctx->pacl[i].not == TRUE ? "TRUE" : "FALSE");
  +                logbook(ctx->l2, L2_LEVEL_DEBUG, "ctx->pacl[%d].acl = %s", i, ctx->pacl[i].acl);
                   if ((cp = strrchr(ctx->pacl[i].acl, '/')) != NULL)
                       *cp++ = NUL;
                   else
                       cp = "-1";
                   ctx->pacl[i].prefixlen = atoi(cp);
  -                log2(ctx, DEBUG, "ctx->pacl[%d].prefixlen = %d", i, ctx->pacl[i].prefixlen);
  +                logbook(ctx->l2, L2_LEVEL_DEBUG, "ctx->pacl[%d].prefixlen = %d", i, ctx->pacl[i].prefixlen);
                   if ((rc = sa_addr_create(&(ctx->pacl[i].saa))) != SA_OK) {
  -                    log1(ctx, ERROR, "option --acl, create address (internal) failed with \"%s\"", sa_error(rc));
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --acl, create address (internal) failed with \"%s\"", sa_error(rc));
                       throw(0,0,0);
                       }
                   if ((rc = sa_addr_u2a(ctx->pacl[i].saa, "inet://%s:0", ctx->pacl[i].acl)) != SA_OK) {
  -                    log2(ctx, ERROR, "option --acl, parsing address (%s) failed with \"%s\"", ctx->pacl[i].acl, sa_error(rc));
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --acl, parsing address (%s) failed with \"%s\"", ctx->pacl[i].acl, sa_error(rc));
                       throw(0,0,0);
                       }
               }
  @@ -334,11 +334,11 @@
               ctx->pacl[i].not = FALSE;
               ctx->pacl[i].prefixlen = 0;
               if ((rc = sa_addr_create(&ctx->pacl[i].saa)) != SA_OK) {
  -                log1(ctx, ERROR, "option --acl, create IPv4 pass-through address (internal) failed with \"%s\"", sa_error(rc));
  +                logbook(ctx->l2, L2_LEVEL_ERROR, "option --acl, create IPv4 pass-through address (internal) failed with \"%s\"", sa_error(rc));
                   throw(0,0,0);
               }
               if ((rc = sa_addr_u2a(ctx->pacl[i].saa, "inet://%s:0", ctx->pacl[i].acl)) != SA_OK) {
  -                log2(ctx, ERROR, "option --acl, parsing IPv4 pass-through address (%s) failed with \"%s\"", ctx->pacl[i].acl, sa_error(rc));
  +                logbook(ctx->l2, L2_LEVEL_ERROR, "option --acl, parsing IPv4 pass-through address (%s) failed with \"%s\"", ctx->pacl[i].acl, sa_error(rc));
                   throw(0,0,0);
               }
               i++;
  @@ -352,11 +352,11 @@
               ctx->pacl[i].not = FALSE;
               ctx->pacl[i].prefixlen = 0;
               if ((rc = sa_addr_create(&ctx->pacl[i].saa)) != SA_OK) {
  -                log1(ctx, ERROR, "option --acl, create IPv6 pass-through address (internal) failed with \"%s\"", sa_error(rc));
  +                logbook(ctx->l2, L2_LEVEL_ERROR, "option --acl, create IPv6 pass-through address (internal) failed with \"%s\"", sa_error(rc));
                   throw(0,0,0);
               }
               if ((rc = sa_addr_u2a(ctx->pacl[i].saa, "inet://%s:0", ctx->pacl[i].acl)) != SA_OK) {
  -                log2(ctx, ERROR, "option --acl, parsing IPv6 pass-through address (%s) failed with \"%s\"", ctx->pacl[i].acl, sa_error(rc));
  +                logbook(ctx->l2, L2_LEVEL_ERROR, "option --acl, parsing IPv6 pass-through address (%s) failed with \"%s\"", ctx->pacl[i].acl, sa_error(rc));
                   throw(0,0,0);
               }
               i++;
  @@ -373,17 +373,17 @@
               || (ov->ndata == 1 && ov->data.s == NULL)
               || (ov->ndata >  1)
                 ) throw(0,0,0);
  -        log1(ctx, TRACE, "--bind = \"%s\"", ov->data.s);
  +        logbook(ctx->l2, L2_LEVEL_TRACE, "--bind = \"%s\"", ov->data.s);
   
           if (ov->ndata == 1) {
               /* dash means stdio */
               if (strcmp(ov->data.s, "-") != 0) {
                   if ((rc = sa_create(&ctx->saServerbind)) != SA_OK) {
  -                    log1(ctx, ERROR, "option --bind, creating TCP socket (internal) failed with \"%s\"", sa_error(rc));
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, creating TCP socket (internal) failed with \"%s\"", sa_error(rc));
                       throw(0,0,0);
                   }
                   if ((rc = sa_addr_create(&ctx->saaServerbind)) != SA_OK) {
  -                    log1(ctx, ERROR, "option --bind, create address (internal) failed with \"%s\"", sa_error(rc));
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, create address (internal) failed with \"%s\"", sa_error(rc));
                       throw(0,0,0);
                   }
               /* slash means UNIX socket */
  @@ -413,27 +413,27 @@
                               nPerm = ((nPerm << 3) | n);
                           }
                           if (nPerm == -1 || cpPerm[i] != '\0') {
  -                            log1(ctx, ERROR, "option --bind, invalid permissions \"%s\"", cpPerm);
  +                            logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, invalid permissions \"%s\"", cpPerm);
                               throw(0,0,0);
                           }
                       }
                       if ((rc = sa_addr_u2a(ctx->saaServerbind, "unix:%s", cpPath)) != SA_OK) {
  -                        log2(ctx, ERROR, "option --bind, parsing alternate IO guessing UNIX socket (%s) failed with \"%s\"", cpPath, sa_error(rc));
  +                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, parsing alternate IO guessing UNIX socket (%s) failed with \"%s\"", cpPath, sa_error(rc));
                           throw(0,0,0);
                       }
                       if ((rc = sa_bind(ctx->saServerbind, ctx->saaServerbind)) != SA_OK) {
  -                        log2(ctx, ERROR, "option --bind, bind (%s) failed with \"%s\"", cpPath, sa_error(rc));
  +                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, bind (%s) failed with \"%s\"", cpPath, sa_error(rc));
                           throw(0,0,0);
                       }
                       if (nPerm != -1) {
                           if (chmod(cpPath, nPerm) == -1) {
  -                            log3(ctx, ERROR, "option --bind, chmod (%s, 0%o) failed with \"%s\"", cpPath, nPerm, strerror(errno));
  +                            logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, chmod (%s, 0%o) failed with \"%s\"", cpPath, nPerm, strerror(errno));
                               throw(0,0,0);
                           }
                       }
                       if (getuid() == 0 && getuid() != ctx->option_uid) {
                           if (chown(cpPath, ctx->option_uid, -1) == -1) {
  -                            log3(ctx, ERROR, "option --bind, chown (%s, %d) failed with \"%s\"", cpPath, ctx->option_uid, strerror(errno));
  +                            logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, chown (%s, %d) failed with \"%s\"", cpPath, ctx->option_uid, strerror(errno));
                               throw(0,0,0);
                           }
                       }
  @@ -442,17 +442,17 @@
               /* otherwise assume INET socket */
                   else {
                       if ((rc = sa_addr_u2a(ctx->saaServerbind, "inet://%s", ov->data.s)) != SA_OK) {
  -                        log2(ctx, ERROR, "option --bind, parsing alternate IO guessing INET socket (%s) failed with \"%s\"", ov->data.s, sa_error(rc));
  +                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, parsing alternate IO guessing INET socket (%s) failed with \"%s\"", ov->data.s, sa_error(rc));
                           throw(0,0,0);
                       }
                       if ((rc = sa_bind(ctx->saServerbind, ctx->saaServerbind)) != SA_OK) {
  -                        log2(ctx, ERROR, "option --bind, bind (%s) failed with \"%s\"", ov->data.s, sa_error(rc));
  +                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, bind (%s) failed with \"%s\"", ov->data.s, sa_error(rc));
                           throw(0,0,0);
                       }
                   }
               /* for either sockets */
                   if ((rc = sa_listen(ctx->saServerbind, -1)) != SA_OK) {
  -                        log2(ctx, ERROR, "option --bind, listen (%s) failed with \"%s\"", ov->data.s, sa_error(rc));
  +                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, listen (%s) failed with \"%s\"", ov->data.s, sa_error(rc));
                           throw(0,0,0);
                   }
               }
  @@ -468,17 +468,17 @@
               || (ov->ndata == 1 && ov->data.s == NULL)
               || (ov->ndata >  1)
                 ) throw(0,0,0);
  -        log1(ctx, TRACE, "--client = \"%s\"", ov->data.s);
  +        logbook(ctx->l2, L2_LEVEL_TRACE, "--client = \"%s\"", ov->data.s);
   
           if (ov->ndata == 1) {
               if ((rc = sa_addr_create(&ctx->saaClientbind)) != SA_OK) {
  -                log1(ctx, ERROR, "option --client, create address (internal) failed with \"%s\"", sa_error(rc));
  +                logbook(ctx->l2, L2_LEVEL_ERROR, "option --client, create address (internal) failed with \"%s\"", sa_error(rc));
                   throw(0,0,0);
               }
               if ((rc = sa_addr_u2a(ctx->saaClientbind, 
                                     (strchr(ov->data.s, ':') == NULL) ?  "inet://%s:0" : "inet://%s", 
                                     ov->data.s)) != SA_OK) {
  -                log2(ctx, ERROR, "option --client, parsing alternate IO guessing INET socket (%s) failed with \"%s\"", ov->data.s, sa_error(rc));
  +                logbook(ctx->l2, L2_LEVEL_ERROR, "option --client, parsing alternate IO guessing INET socket (%s) failed with \"%s\"", ov->data.s, sa_error(rc));
                   throw(0,0,0);
               }
           }
  @@ -495,29 +495,29 @@
               || (ov->ndata <  0)
               || (ov->ndata >= 1 && ov->data.m == NULL)
                 ) throw(0,0,0);
  -        log1(ctx, DEBUG, "ov->ndata = %d", ov->ndata);
  +        logbook(ctx->l2, L2_LEVEL_DEBUG, "ov->ndata = %d", ov->ndata);
           for (i = 0; i < ov->ndata; i++)
  -            log2(ctx, TRACE, "--destination[%d] = \"%s\"", i, (ov->data.m)[i]);
  +            logbook(ctx->l2, L2_LEVEL_TRACE, "--destination[%d] = \"%s\"", i, (ov->data.m)[i]);
   
           if (ov->ndata >= 1) {
               if ((ctx->pns = (struct ns *)malloc(ov->ndata * sizeof(struct ns))) == NULL) throw(0,0,0);
               for (i = 0; i < ov->ndata;) {
                   cp = (ov->data.m)[i];
  -                log2(ctx, DEBUG, "cp = (data.m)[%d] = \"%s\"", i, cp);
  +                logbook(ctx->l2, L2_LEVEL_DEBUG, "cp = (data.m)[%d] = \"%s\"", i, cp);
                   if (strrchr(cp, ':') == NULL)
                       cp = str_concat(cp, ":nntp", NULL); //FIXME is this a config var/val?
                   else
                       cp = str_concat(cp, NULL); /* prepare for free() */
                   if ((rc = sa_addr_create(&ctx->pns[i].saa)) != SA_OK) {
  -                    log1(ctx, ERROR, "option --destination, create address (internal) failed with \"%s\"", sa_error(rc));
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --destination, create address (internal) failed with \"%s\"", sa_error(rc));
                       throw(0,0,0);
                   }
                   if ((rc = sa_addr_u2a(ctx->pns[i].saa, "inet://%s", cp)) != SA_OK) {
  -                    log2(ctx, ERROR, "option --destination, parsing host address (%s) failed with \"%s\"", cp /*FIXME again, option vs. config */, sa_error(rc));
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --destination, parsing host address (%s) failed with \"%s\"", cp /*FIXME again, option vs. config */, sa_error(rc));
                       throw(0,0,0);
                   }
                   if ((rc = sa_create(&ctx->pns[i].sa)) != SA_OK) {
  -                    log2(ctx, ERROR, "option --destination, creating TCP socket (%s) failed with \"%s\"", cp /*FIXME again, option vs. config */, sa_error(rc));
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --destination, creating TCP socket (%s) failed with \"%s\"", cp /*FIXME again, option vs. config */, sa_error(rc));
                       throw(0,0,0);
                   }
                   ctx->pns[i].nntp = NULL;
  @@ -538,7 +538,7 @@
               || (ov->ndata == 1 && ov->data.s == NULL)
               || (ov->ndata >  1)
                 ) throw(0,0,0);
  -        log1(ctx, TRACE, "--groupmode = \"%s\"", ov->data.s);
  +        logbook(ctx->l2, L2_LEVEL_TRACE, "--groupmode = \"%s\"", ov->data.s);
   
           if (ov->ndata == 1) {
               if      (strcasecmp(ov->data.s, "arg") == 0)
  @@ -548,7 +548,7 @@
               else if (strcasecmp(ov->data.s, "header") == 0)
                   ctx->option_groupmode = GROUPMODE_HEADER;
               else {
  -                log1(ctx, ERROR, "option --groupmode, invalid mode (%s)", ov->data.s);
  +                logbook(ctx->l2, L2_LEVEL_ERROR, "option --groupmode, invalid mode (%s)", ov->data.s);
                   throw(0,0,0);
               }
           }
  @@ -572,14 +572,14 @@
                   || (ov->ndata <  0)
                   || (ov->ndata >= 1 && ov->data.m == NULL)
                     ) throw(0,0,0);
  -            log1(ctx, DEBUG, "ov->ndata = %d", ov->ndata);
  +            logbook(ctx->l2, L2_LEVEL_DEBUG, "ov->ndata = %d", ov->ndata);
               for (i = 0; i < ov->ndata; i++)
  -                log2(ctx, TRACE, "--headerule[%d] = \"%s\"", i, (ov->data.m)[i]);
  +                logbook(ctx->l2, L2_LEVEL_TRACE, "--headerule[%d] = \"%s\"", i, (ov->data.m)[i]);
   
               if (ov->ndata >= 1) {
                   for (i = 0; i < ov->ndata; i++) {
                       cp = (ov->data.m)[i];
  -                    log2(ctx, DEBUG, "cp = (data.m)[%d] = \"%s\"", i, cp);
  +                    logbook(ctx->l2, L2_LEVEL_DEBUG, "cp = (data.m)[%d] = \"%s\"", i, cp);
   
                       hrNew = (headerrule_t *)mallocex(sizeof(headerrule_t));
                       hrNew->next      = NULL;
  @@ -593,7 +593,7 @@
                       /* priority */
                       cpP = cp;
                       if ((cp = strchr(cp, ':')) == NULL) {
  -                        log1(ctx, ERROR, "option --headerrule, priority (%s) terminating colon missing", (ov->data.m)[i]);
  +                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --headerrule, priority (%s) terminating colon missing", (ov->data.m)[i]);
                           throw(0,0,0);
                       }
                       cp++;
  @@ -603,7 +603,7 @@
                       /* regex */
                       cpP = cp;
                       if ((cp = strchr(cp, ':')) == NULL) {
  -                        log1(ctx, ERROR, "option --headerrule, regex (%s) terminating colon missing", (ov->data.m)[i]);
  +                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --headerrule, regex (%s) terminating colon missing", (ov->data.m)[i]);
                           throw(0,0,0);
                       }
                       cp++;
  @@ -613,13 +613,13 @@
                       /* header */
                       cpP = cp;
                       if ((cp = strchr(cp, ':')) == NULL) {
  -                        log1(ctx, ERROR, "option --headerrule, header (%s) terminating colon missing", (ov->data.m)[i]);
  +                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --headerrule, header (%s) terminating colon missing", (ov->data.m)[i]);
                           throw(0,0,0);
                       }
                       cp++;
                       n = cp - cpP;
                       if (n == 0) {
  -                        log1(ctx, ERROR, "option --headerrule, header (%s) missing", (ov->data.m)[i]);
  +                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --headerrule, header (%s) missing", (ov->data.m)[i]);
                           throw(0,0,0);
                       }
                       hrNew->header = str_dupex(cpP, n);
  @@ -632,12 +632,12 @@
                       if (hrNew->regex != NULL) {
                           /* compile regular expression into finite state machine and optimize */
                           if ((hrNew->pcreRegex = pcre_compile(hrNew->regex, PCRE_CASELESS, &cpError, &iError, NULL)) == NULL) {
  -                            log3(ctx, ERROR, "option --headerrule, regex (%s) failed at pos %d with %s", hrNew->regex, iError, cpError);
  +                            logbook(ctx->l2, L2_LEVEL_ERROR, "option --headerrule, regex (%s) failed at pos %d with %s", hrNew->regex, iError, cpError);
                               throw(0,0,0);
                           }
                           hrNew->pcreExtra = pcre_study(hrNew->pcreRegex, 0, &cpError);
                           if (cpError != NULL) {
  -                            log1(ctx, ERROR, "option --headerrule, regex optimization failed with %s", cpError);
  +                            logbook(ctx->l2, L2_LEVEL_ERROR, "option --headerrule, regex optimization failed with %s", cpError);
                               throw(0,0,0);
                           }
                       }
  @@ -662,11 +662,11 @@
                       var_rc_t rc;
   
                       if ((rc = var_create(&ctx->config_varregex)) != VAR_OK) {
  -                        log2(ctx, ERROR, "option --headerrule, create regex context failed with %s (%d)", var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  +                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --headerrule, create regex context failed with %s (%d)", var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
                           throw(0,0,0);
                       }
                       if ((rc = var_config(ctx->config_varregex, VAR_CONFIG_SYNTAX, &syntax_regex)) != VAR_OK) {
  -                        log2(ctx, ERROR, "option --headerrule, config regex context failed with %s (%d)", var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  +                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --headerrule, config regex context failed with %s (%d)", var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
                           throw(0,0,0);
                       }
                   }
  @@ -700,7 +700,7 @@
               || (ov->ndata == 1 && ov->data.s == NULL)
               || (ov->ndata >  1)
                 ) throw(0,0,0);
  -        log1(ctx, TRACE, "--mailfrom = \"%s\"", ov->data.s);
  +        logbook(ctx->l2, L2_LEVEL_TRACE, "--mailfrom = \"%s\"", ov->data.s);
   
           if (ov->ndata == 1) {
               ctx->option_mailfrom = strdup(ov->data.s);
  @@ -714,7 +714,7 @@
                   ctx->option_mailfrom = cp;
               }
               if (str_parse("<>", ctx->option_mailfrom) == -1) {
  -                log1(ctx, ERROR, "option --mailfrom, illegal regex (%s)", ctx->option_mailfrom);
  +                logbook(ctx->l2, L2_LEVEL_ERROR, "option --mailfrom, illegal regex (%s)", ctx->option_mailfrom);
                   throw(0,0,0);
               }
           }
  @@ -729,11 +729,11 @@
               || (ov->ndata == 1 && ov->data.s == NULL)
               || (ov->ndata >  1)
                 ) throw(0,0,0);
  -        log1(ctx, TRACE, "--nodename = \"%s\"", ov->data.s);
  +        logbook(ctx->l2, L2_LEVEL_TRACE, "--nodename = \"%s\"", ov->data.s);
   
           if (ov->ndata == 1) {
               if (strlen(ov->data.s) > sizeof(ctx->uname.nodename)-1) {
  -                log1(ctx, ERROR, "option --nodename, name (%s) too long", ov->data.s);
  +                logbook(ctx->l2, L2_LEVEL_ERROR, "option --nodename, name (%s) too long", ov->data.s);
                   throw(0,0,0);
               }
               strcpy(ctx->uname.nodename, ov->data.s);
  @@ -751,7 +751,7 @@
               || (ov->ndata == 1 && ov->data.s == NULL)
               || (ov->ndata >  1)
                 ) throw(0,0,0);
  -        log1(ctx, TRACE, "--operationmode = \"%s\"", ov->data.s);
  +        logbook(ctx->l2, L2_LEVEL_TRACE, "--operationmode = \"%s\"", ov->data.s);
   
           if (ov->ndata == 1) {
               cp = strdup(ov->data.s);
  @@ -762,11 +762,11 @@
               else {
                   ctx->option_operationmode = OPERATIONMODE_FAKE;
                   if (strlen(cp) != 9) {
  -                    log1(ctx, ERROR, "option --operationmode, invalid length (%s)", cp);
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --operationmode, invalid length (%s)", cp);
                       throw(0,0,0);
                   }
                   if (cp[3] != '/') {
  -                    log1(ctx, ERROR, "option --operationmode, missing slash (%s)", cp);
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --operationmode, missing slash (%s)", cp);
                       throw(0,0,0);
                   }
                   cp[3] = NUL;
  @@ -777,7 +777,7 @@
                       || !isdigit((int)ctx->option_operationmodefakestatus[1])
                       || !isdigit((int)ctx->option_operationmodefakestatus[2])
                         ) {
  -                    log1(ctx, ERROR, "option --operationmode, invalid status code (%s)", cp);
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --operationmode, invalid status code (%s)", cp);
                       throw(0,0,0);
                   }
                   if (   (strlen(ctx->option_operationmodefakedsn) != 5)
  @@ -788,13 +788,13 @@
                       || !isdigit((int)ctx->option_operationmodefakedsn[4])
                       || (ctx->option_operationmodefakedsn[0] != ctx->option_operationmodefakestatus[0])
                         ) {
  -                    log1(ctx, ERROR, "option --operationmode, invalid dsn code (%s)", cp);
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --operationmode, invalid dsn code (%s)", cp);
                       throw(0,0,0);
                   }
               }
           }
           else {
  -            log0(ctx, ERROR, "option --operationmode, is mandatory but neither given nor preset (internal)");
  +            logbook(ctx->l2, L2_LEVEL_ERROR, "option --operationmode, is mandatory but neither given nor preset (internal)");
               throw(0,0,0);
           }
       }
  @@ -810,7 +810,7 @@
               || (ov->ndata == 1 && ov->data.s == NULL)
               || (ov->ndata >  1)
                 ) throw(0,0,0);
  -        log1(ctx, TRACE, "--restrictheader = \"%s\"", ov->data.s);
  +        logbook(ctx->l2, L2_LEVEL_TRACE, "--restrictheader = \"%s\"", ov->data.s);
   
           if (ov->ndata == 1) {
               ctx->option_restrictheader = strdup(ov->data.s);
  @@ -824,7 +824,7 @@
                   ctx->option_restrictheader = cp;
               }
               if (str_parse("<>", ctx->option_restrictheader) == -1) {
  -                log1(ctx, ERROR, "option --restrictheader, illegal regex (%s)", ctx->option_restrictheader);
  +                logbook(ctx->l2, L2_LEVEL_ERROR, "option --restrictheader, illegal regex (%s)", ctx->option_restrictheader);
                   throw(0,0,0);
               }
           }
  @@ -839,11 +839,11 @@
               || (ov->ndata == 1 && ov->data.s == NULL)
               || (ov->ndata >  1)
                 ) throw(0,0,0);
  -        log1(ctx, TRACE, "--size = \"%s\"", ov->data.s);
  +        logbook(ctx->l2, L2_LEVEL_TRACE, "--size = \"%s\"", ov->data.s);
   
           if (ov->ndata == 1)
               if ((ctx->option_maxmessagesize = atoi(ov->data.s)) <= 0) {
  -                log1(ctx, ERROR, "option --size, number (%d) out of range", ctx->option_maxmessagesize);
  +                logbook(ctx->l2, L2_LEVEL_ERROR, "option --size, number (%d) out of range", ctx->option_maxmessagesize);
                   throw(0,0,0);
               }
       }
  @@ -859,11 +859,11 @@
               || (ov->ndata == 1 && ov->data.s == NULL)
               || (ov->ndata >  1)
                 ) throw(0,0,0);
  -        log1(ctx, TRACE, "--timeoutlmtp= \"%s\"", ov->data.s);
  +        logbook(ctx->l2, L2_LEVEL_TRACE, "--timeoutlmtp= \"%s\"", ov->data.s);
    
           if (ov->ndata == 1) {
               if ((i = atoi(ov->data.s)) < 0) {
  -                log1(ctx, ERROR, "option --timeoutlmtp, number (%d) out of range", i);
  +                logbook(ctx->l2, L2_LEVEL_ERROR, "option --timeoutlmtp, number (%d) out of range", i);
                   throw(0,0,0);
               }
               ctx->option_timeout_lmtp_accept = i;
  @@ -881,11 +881,11 @@
               || (ov->ndata == 1 && ov->data.s == NULL)
               || (ov->ndata >  1)
                 ) throw(0,0,0);
  -        log1(ctx, TRACE, "--timeoutlmtpaccept = \"%s\"", ov->data.s);
  +        logbook(ctx->l2, L2_LEVEL_TRACE, "--timeoutlmtpaccept = \"%s\"", ov->data.s);
   
           if (ov->ndata == 1)
               if ((ctx->option_timeout_lmtp_accept = atoi(ov->data.s)) < 0) {
  -                log1(ctx, ERROR, "option --timeoutlmtpaccept, number (%d) out of range", ctx->option_timeout_lmtp_accept);
  +                logbook(ctx->l2, L2_LEVEL_ERROR, "option --timeoutlmtpaccept, number (%d) out of range", ctx->option_timeout_lmtp_accept);
                   throw(0,0,0);
               }
       }
  @@ -899,11 +899,11 @@
               || (ov->ndata == 1 && ov->data.s == NULL)
               || (ov->ndata >  1)
                 ) throw(0,0,0);
  -        log1(ctx, TRACE, "--timeoutlmtpread = \"%s\"", ov->data.s);
  +        logbook(ctx->l2, L2_LEVEL_TRACE, "--timeoutlmtpread = \"%s\"", ov->data.s);
   
           if (ov->ndata == 1)
               if ((ctx->option_timeout_lmtp_read = atoi(ov->data.s)) < 0) {
  -                log1(ctx, ERROR, "option --timeoutlmtpread, number (%d) out of range", ctx->option_timeout_lmtp_read);
  +                logbook(ctx->l2, L2_LEVEL_ERROR, "option --timeoutlmtpread, number (%d) out of range", ctx->option_timeout_lmtp_read);
                   throw(0,0,0);
               }
       }
  @@ -917,11 +917,11 @@
               || (ov->ndata == 1 && ov->data.s == NULL)
               || (ov->ndata >  1)
                 ) throw(0,0,0);
  -        log1(ctx, TRACE, "--timeoutlmtpwrite = \"%s\"", ov->data.s);
  +        logbook(ctx->l2, L2_LEVEL_TRACE, "--timeoutlmtpwrite = \"%s\"", ov->data.s);
   
           if (ov->ndata == 1)
               if ((ctx->option_timeout_lmtp_write = atoi(ov->data.s)) < 0) {
  -                log1(ctx, ERROR, "option --timeoutlmtpwrite, number (%d) out of range", ctx->option_timeout_lmtp_write);
  +                logbook(ctx->l2, L2_LEVEL_ERROR, "option --timeoutlmtpwrite, number (%d) out of range", ctx->option_timeout_lmtp_write);
                   throw(0,0,0);
               }
       }
  @@ -937,11 +937,11 @@
               || (ov->ndata == 1 && ov->data.s == NULL)
               || (ov->ndata >  1)
                 ) throw(0,0,0);
  -        log1(ctx, TRACE, "--timeoutnntp= \"%s\"", ov->data.s);
  +        logbook(ctx->l2, L2_LEVEL_TRACE, "--timeoutnntp= \"%s\"", ov->data.s);
   
           if (ov->ndata == 1) {
               if ((i = atoi(ov->data.s)) < 0) {
  -                log1(ctx, ERROR, "option --timeoutnntp, number (%d) out of range", i);
  +                logbook(ctx->l2, L2_LEVEL_ERROR, "option --timeoutnntp, number (%d) out of range", i);
                   throw(0,0,0);
               }
               ctx->option_timeout_nntp_connect = i;
  @@ -959,11 +959,11 @@
               || (ov->ndata == 1 && ov->data.s == NULL)
               || (ov->ndata >  1)
                 ) throw(0,0,0);
  -        log1(ctx, TRACE, "--timeoutnntpconnect = \"%s\"", ov->data.s);
  +        logbook(ctx->l2, L2_LEVEL_TRACE, "--timeoutnntpconnect = \"%s\"", ov->data.s);
   
           if (ov->ndata == 1)
               if ((ctx->option_timeout_nntp_connect = atoi(ov->data.s)) < 0) {
  -                log1(ctx, ERROR, "option --timeoutnntpconnect, number (%d) out of range", ctx->option_timeout_nntp_connect);
  +                logbook(ctx->l2, L2_LEVEL_ERROR, "option --timeoutnntpconnect, number (%d) out of range", ctx->option_timeout_nntp_connect);
                   throw(0,0,0);
               }
       }
  @@ -977,11 +977,11 @@
               || (ov->ndata == 1 && ov->data.s == NULL)
               || (ov->ndata >  1)
                 ) throw(0,0,0);
  -        log1(ctx, TRACE, "--timeoutnntpread = \"%s\"", ov->data.s);
  +        logbook(ctx->l2, L2_LEVEL_TRACE, "--timeoutnntpread = \"%s\"", ov->data.s);
   
           if (ov->ndata == 1)
               if ((ctx->option_timeout_nntp_read = atoi(ov->data.s)) < 0) {
  -                log1(ctx, ERROR, "option --timeoutnntpread, number (%d) out of range", ctx->option_timeout_nntp_read);
  +                logbook(ctx->l2, L2_LEVEL_ERROR, "option --timeoutnntpread, number (%d) out of range", ctx->option_timeout_nntp_read);
                   throw(0,0,0);
               }
       }
  @@ -995,11 +995,11 @@
               || (ov->ndata == 1 && ov->data.s == NULL)
               || (ov->ndata >  1)
                 ) throw(0,0,0);
  -        log1(ctx, TRACE, "--timeoutnntpwrite = \"%s\"", ov->data.s);
  +        logbook(ctx->l2, L2_LEVEL_TRACE, "--timeoutnntpwrite = \"%s\"", ov->data.s);
   
           if (ov->ndata == 1)
               if ((ctx->option_timeout_nntp_write = atoi(ov->data.s)) < 0) {
  -                log1(ctx, ERROR, "option --timeoutnntpwrite, number (%d) out of range", ctx->option_timeout_nntp_write);
  +                logbook(ctx->l2, L2_LEVEL_ERROR, "option --timeoutnntpwrite, number (%d) out of range", ctx->option_timeout_nntp_write);
                   throw(0,0,0);
               }
       }
  @@ -1015,18 +1015,18 @@
               || (ov->ndata == 1 && ov->data.s == NULL)
               || (ov->ndata >  1)
                 ) throw(0,0,0);
  -        log1(ctx, TRACE, "--user = \"%s\"", ov->data.s);
  +        logbook(ctx->l2, L2_LEVEL_TRACE, "--user = \"%s\"", ov->data.s);
   
           if (ov->ndata == 1) {
               if (isdigit((int)ov->data.s[0])) {
                   if ((sPasswd = getpwuid((uid_t)atoi(ov->data.s))) == NULL) {
  -                    log1(ctx, ERROR, "option --user, uid (%s) not found", ov->data.s);
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --user, uid (%s) not found", ov->data.s);
                       throw(0,0,0);
                   }
               }
               else {
                   if ((sPasswd = getpwnam(ov->data.s)) == NULL) {
  -                    log1(ctx, ERROR, "option --user, name (%s) not found", ov->data.s);
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --user, name (%s) not found", ov->data.s);
                       throw(0,0,0);
                   }
               }
  @@ -1045,14 +1045,14 @@
               || (ov->ndata <  0)
               || (ov->ndata >= 1 && ov->data.m == NULL)
                 ) throw(0,0,0);
  -        log1(ctx, DEBUG, "ov->ndata = %d", ov->ndata);
  +        logbook(ctx->l2, L2_LEVEL_DEBUG, "ov->ndata = %d", ov->ndata);
           for (i = 0; i < ov->ndata; i++)
  -            log2(ctx, TRACE, "--newsgroup[%d] = \"%s\"", i, (ov->data.m)[i]);
  +            logbook(ctx->l2, L2_LEVEL_TRACE, "--newsgroup[%d] = \"%s\"", i, (ov->data.m)[i]);
   
           if (ov->ndata >= 1) {
               for (i = 0; i < ov->ndata; i++) {
                   cp = (ov->data.m)[i];
  -                log2(ctx, DEBUG, "cp = (data.m)[%d] = \"%s\"", i, cp);
  +                logbook(ctx->l2, L2_LEVEL_DEBUG, "cp = (data.m)[%d] = \"%s\"", i, cp);
                   argz_add(&ctx->azGroupargs, &ctx->asGroupargs, cp);
               }
           }
  @@ -1070,14 +1070,14 @@
               || (ov->ndata <  0)
               || (ov->ndata >= 1 && ov->data.m == NULL)
                 ) throw(0,0,0);
  -        log1(ctx, DEBUG, "ov->ndata = %d", ov->ndata);
  +        logbook(ctx->l2, L2_LEVEL_DEBUG, "ov->ndata = %d", ov->ndata);
           for (i = 0; i < ov->ndata; i++)
  -            log2(ctx, TRACE, "--testfile[%d] = \"%s\"", i, (ov->data.m)[i]);
  +            logbook(ctx->l2, L2_LEVEL_TRACE, "--testfile[%d] = \"%s\"", i, (ov->data.m)[i]);
   
           if (ov->ndata >= 1) {
               for (i = 0; i < ov->ndata; i++) {
                   cp = (ov->data.m)[i];
  -                log2(ctx, DEBUG, "cp = (data.m)[%d] = \"%s\"", i, cp);
  +                logbook(ctx->l2, L2_LEVEL_DEBUG, "cp = (data.m)[%d] = \"%s\"", i, cp);
                   {
                       const char *filename = cp;
                       struct stat sb;
  @@ -1109,17 +1109,17 @@
                           msg->l2 = ctx->l2;
                           msg->cpMsg = cpBuf;
                           if ((rc = msg_split((msg_t *)msg)) != MSG_OK) {
  -                            log1(ctx, ERROR, "Error splitting message: %s", msg_error(rc));
  +                            logbook(ctx->l2, L2_LEVEL_ERROR, "Error splitting message: %s", msg_error(rc));
                               throw(0, 0, "msg_split");
                           }
                           {//FIXME
                               char *cp;
                               cp = NULL;
  -                            log0(msg, DEBUG, "FIXME trace #20");
  +                            logbook(msg->l2, L2_LEVEL_DEBUG, "FIXME trace #20");
                               while ((cp = argz_next(msg->azHeaders, msg->asHeaders, cp)) != NULL) {
  -                                log1(msg, DEBUG, "header=\"%s\"", cp);
  +                                logbook(msg->l2, L2_LEVEL_DEBUG, "header=\"%s\"", cp);
                               }
  -                            log0(msg, DEBUG, "FIXME trace #21");
  +                            logbook(msg->l2, L2_LEVEL_DEBUG, "FIXME trace #21");
                           }
                           msg_headermatrixbuildup((msg_t *)msg);
                           ctx->msg = (msg_t *)msg;
  @@ -1128,15 +1128,15 @@
                           {//FIXME
                               char *cp;
                               cp = NULL;
  -                            log0(msg, DEBUG, "FIXME trace #30");
  +                            logbook(msg->l2, L2_LEVEL_DEBUG, "FIXME trace #30");
                               while ((cp = argz_next(msg->azHeaders, msg->asHeaders, cp)) != NULL) {
  -                                log1(msg, DEBUG, "header=\"%s\"", cp);
  +                                logbook(msg->l2, L2_LEVEL_DEBUG, "header=\"%s\"", cp);
                               }
  -                            log0(msg, DEBUG, "FIXME trace #31");
  +                            logbook(msg->l2, L2_LEVEL_DEBUG, "FIXME trace #31");
                           }
                           argz_add(&((msg_t *)msg)->azNewsgroups, &((msg_t *)msg)->asNewsgroups, "invalid.tst"); //FIXME
                           if ((rc = msg_join((msg_t *)msg)) != MSG_OK) {
  -                            log1(ctx, ERROR, "Error joining message: %s", msg_error(rc));
  +                            logbook(ctx->l2, L2_LEVEL_ERROR, "Error joining message: %s", msg_error(rc));
                               throw(0, 0, "msg_split");
                           }
                           printf("%s", msg->cpMsg); //FIXME
  @@ -1246,7 +1246,7 @@
       char *cp;
       int i;
   
  -    log2(ctx, DEBUG, "rgx_lookup variable \"%s\" (%d)", var_ptr, var_len);
  +    logbook(ctx->l2, L2_LEVEL_DEBUG, "rgx_lookup variable \"%s\" (%d)", var_ptr, var_len);
       rc = VAR_ERR_UNDEFINED_VARIABLE;
       i = atoi(var_ptr); /* works with both '}' and '\0' termination */
       if (i < ctx->nMatch) {
  @@ -1256,9 +1256,9 @@
           rc = VAR_OK;
       }
       if (rc == VAR_OK)
  -        log4(ctx, DEBUG, "rgx_lookup variable \"%s\" (%d) ok: result is \"%s\" (%d)", var_ptr, var_len, *val_ptr, *val_len);
  +        logbook(ctx->l2, L2_LEVEL_DEBUG, "rgx_lookup variable \"%s\" (%d) ok: result is \"%s\" (%d)", var_ptr, var_len, *val_ptr, *val_len);
       else
  -        log4(ctx, DEBUG, "rgx_lookup variable \"%s\" (%d) failed: %s (%d)", var_ptr, var_len, var_strerror(var, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  +        logbook(ctx->l2, L2_LEVEL_DEBUG, "rgx_lookup variable \"%s\" (%d) failed: %s (%d)", var_ptr, var_len, var_strerror(var, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
       return rc;
   }
   
  @@ -1294,14 +1294,14 @@
               }
               cp = argz_next(msg->azHeaders, msg->asHeaders, cp);
               if (hdI->ndata == 0) {
  -                log1(msg, DEBUG, "header=%s, currently empty", hdI->name);
  +                logbook(msg->l2, L2_LEVEL_DEBUG, "header=%s, currently empty", hdI->name);
                   hdI->data.s = strdupex(cp);
                   hdI->ndata = 1;
               }
               else if(hdI->ndata == 1) {
                   char *cpOld;
                   cpOld = hdI->data.s;
  -                log1(msg, DEBUG, "header=%s, currently single valued", hdI->name);
  +                logbook(msg->l2, L2_LEVEL_DEBUG, "header=%s, currently single valued", hdI->name);
                   hdI->data.m = (char **)mallocex(3 * sizeof(char *));
                   hdI->data.m[0] = strdupex(cpOld); //FIXME
                   hdI->data.m[1] = strdupex(cp);
  @@ -1309,7 +1309,7 @@
                   hdI->ndata = 2;
               }
               else {
  -                log2(msg, DEBUG, "header=%s, currently multi valued %d", hdI->name, hdI->ndata);
  +                logbook(msg->l2, L2_LEVEL_DEBUG, "header=%s, currently multi valued %d", hdI->name, hdI->ndata);
                   hdI->data.m = (char **)reallocex(hdI->data.m, (hdI->ndata + 2) * sizeof(char *));
                   hdI->data.m[hdI->ndata++] = strdupex(cp);
                   hdI->data.m[hdI->ndata] = NULL;
  @@ -1337,21 +1337,21 @@
           msg->asHeaders = 0;
   
           for (hdI = msg->hdFirst; hdI != NULL; hdI = hdI->next) { /* for each matrix header */
  -            log2(msg, DEBUG, "FIXME trace loop hdI=%.8lx, hI->name=\"%s\"", hdI, hdI->name);
  +            logbook(msg->l2, L2_LEVEL_DEBUG, "FIXME trace loop hdI=%.8lx, hI->name=\"%s\"", hdI, hdI->name);
               if (hdI->name == NULL || strlen(hdI->name) == 0 || hdI->ndata == 0)
                   continue;
               if (hdI->ndata == 0) {
  -                log1(msg, DEBUG, "header=%s, no data", hdI->name);
  +                logbook(msg->l2, L2_LEVEL_DEBUG, "header=%s, no data", hdI->name);
               }
               else if(hdI->ndata == 1) { /* header data is single valued */
  -                log2(msg, DEBUG, "header=%s, data=%s", hdI->name, hdI->data.s);
  +                logbook(msg->l2, L2_LEVEL_DEBUG, "header=%s, data=%s", hdI->name, hdI->data.s);
                   argz_add(&msg->azHeaders, &msg->asHeaders, hdI->name);
                   argz_add(&msg->azHeaders, &msg->asHeaders, hdI->data.s);
               }
               else { /* header data is multi valued */
                   int i;
                   for (i = 0; i < hdI->ndata; i++) {
  -                    log3(msg, DEBUG, "header=%s[%d], data=%s", hdI->name, i, hdI->data.m[i]);
  +                    logbook(msg->l2, L2_LEVEL_DEBUG, "header=%s[%d], data=%s", hdI->name, i, hdI->data.m[i]);
                       argz_add(&msg->azHeaders, &msg->asHeaders, hdI->name);
                       argz_add(&msg->azHeaders, &msg->asHeaders, hdI->data.m[i]);
                   }
  @@ -1381,17 +1381,17 @@
           headerrule_t *hrD;
           headerdata_t *hdD;
   
  -        log0(ctx, DEBUG, "FIXME trace ---------- headerrewrite() ----------");
  +        logbook(ctx->l2, L2_LEVEL_DEBUG, "FIXME trace ---------- headerrewrite() ----------");
           for (hrD = ctx->option_firstheaderrule; hrD != NULL; hrD = hrD->next)
  -            log1(ctx, DEBUG, "hrD->header=%s", hrD->header);
  +            logbook(ctx->l2, L2_LEVEL_DEBUG, "hrD->header=%s", hrD->header);
           for (hdD = ctx->msg->hdFirst; hdD != NULL; hdD = hdD->next) {
               if (hdD->ndata == 0)
  -                log1(ctx, DEBUG, "hdD->name=%s: (NO DATA)", hdD->name);
  +                logbook(ctx->l2, L2_LEVEL_DEBUG, "hdD->name=%s: (NO DATA)", hdD->name);
               if (hdD->ndata == 1)
  -                log2(ctx, DEBUG, "hdD->name:hdD->data.s    %s %s", hdD->name, hdD->data.s);
  +                logbook(ctx->l2, L2_LEVEL_DEBUG, "hdD->name:hdD->data.s    %s %s", hdD->name, hdD->data.s);
               if (hdD->ndata > 1)
                   for (i = 0; i < hdD->ndata; i++)
  -                    log3(ctx, DEBUG, "hdD->name:hdD->data.m[%d] %s %s", i, hdD->name, hdD->data.m[i]);
  +                    logbook(ctx->l2, L2_LEVEL_DEBUG, "hdD->name:hdD->data.m[%d] %s %s", i, hdD->name, hdD->data.m[i]);
           }
       }
       
  @@ -1401,7 +1401,7 @@
       regex_ctx->l2_env = ctx->l2_env;
       regex_ctx->l2 = ctx->l2;
       if ((rc = var_config(ctx->config_varregex, VAR_CONFIG_CB_VALUE, regex_lookup, regex_ctx)) != VAR_OK) {
  -        log2(ctx, ERROR, "configure regex callback failed with %s (%d)", var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  +        logbook(ctx->l2, L2_LEVEL_ERROR, "configure regex callback failed with %s (%d)", var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
           throw(0,0,0);
       }
       for (hrI = ctx->option_firstheaderrule; hrI != NULL; hrI = hrI->next) { /* for each rule */
  @@ -1410,22 +1410,22 @@
               headerrule_t *hrD;
               headerdata_t *hdD;
   
  -            log0(ctx, DEBUG, "FIXME trace ---------- headerrewrite() ---------- MIDDLE");
  +            logbook(ctx->l2, L2_LEVEL_DEBUG, "FIXME trace ---------- headerrewrite() ---------- MIDDLE");
               for (hrD = ctx->option_firstheaderrule; hrD != NULL; hrD = hrD->next)
  -                log1(ctx, DEBUG, "hrD->header=%s", hrD->header);
  +                logbook(ctx->l2, L2_LEVEL_DEBUG, "hrD->header=%s", hrD->header);
               for (hdD = ctx->msg->hdFirst; hdD != NULL; hdD = hdD->next) {
  -                //log3(ctx, DEBUG, "hdD=%.8lx, hdD->name=%.8lx, hdD->data.s=%.8lx", (long)hdD, (long)&hdD->name, (long)&hdD->data.s);
  +                //logbook(ctx->l2, L2_LEVEL_DEBUG, "hdD=%.8lx, hdD->name=%.8lx, hdD->data.s=%.8lx", (long)hdD, (long)&hdD->name, (long)&hdD->data.s);
                   if (hdD->ndata == 0)
  -                    log1(ctx, DEBUG, "hdD->name=%s: (NO DATA)", hdD->name);
  +                    logbook(ctx->l2, L2_LEVEL_DEBUG, "hdD->name=%s: (NO DATA)", hdD->name);
                   if (hdD->ndata == 1)
  -                    log2(ctx, DEBUG, "hdD->name:hdD->data.s    %s %s", hdD->name, hdD->data.s);
  +                    logbook(ctx->l2, L2_LEVEL_DEBUG, "hdD->name:hdD->data.s    %s %s", hdD->name, hdD->data.s);
                   if (hdD->ndata > 1)
                       for (i = 0; i < hdD->ndata; i++)
  -                        log3(ctx, DEBUG, "hdD->name:hdD->data.m[%d] %s %s", i, hdD->name, hdD->data.m[i]);
  +                        logbook(ctx->l2, L2_LEVEL_DEBUG, "hdD->name:hdD->data.m[%d] %s %s", i, hdD->name, hdD->data.m[i]);
               }
           }
           if (hrI->regex != NULL) {
  -            log1(ctx, DEBUG, "rule has regex %s", hrI->regex);
  +            logbook(ctx->l2, L2_LEVEL_DEBUG, "rule has regex %s", hrI->regex);
               for (hdI = ctx->msg->hdFirst; hdI != NULL; hdI = hdI->next) { /* for each header */
                   if (hdI->name == NULL || strlen(hdI->name) == 0 || hdI->ndata == 0)
                       continue;
  @@ -1433,23 +1433,23 @@
                   if (regex_ctx->nMatch >= 1) {
                       int i;
                       char *cp;
  -                    log1(ctx, DEBUG, "regex matches, %d references", regex_ctx->nMatch);
  +                    logbook(ctx->l2, L2_LEVEL_DEBUG, "regex matches, %d references", regex_ctx->nMatch);
                       pcre_get_substring_list(hdI->name, ovec, regex_ctx->nMatch, &regex_ctx->acpMatch);
                       if (regex_ctx->acpMatch != NULL)
                           for (i = 0; i < regex_ctx->nMatch; i++)
  -                            log2(ctx, DEBUG, "regex reference[%d]=\'%s\'", i, regex_ctx->acpMatch[i] == NULL ? "(UNDEFINED)" : regex_ctx->acpMatch[i]);
  +                            logbook(ctx->l2, L2_LEVEL_DEBUG, "regex reference[%d]=\'%s\'", i, regex_ctx->acpMatch[i] == NULL ? "(UNDEFINED)" : regex_ctx->acpMatch[i]);
                       hdNew = headercreate();
                       /* expanding regex references into header name */
                       {
                           var_rc_t var_rc;
                           char *res_ptr;
  -                        log1(ctx, DEBUG, "expanding regex references in headername '%s'", hrI->header);
  +                        logbook(ctx->l2, L2_LEVEL_DEBUG, "expanding regex references in headername '%s'", hrI->header);
                           if ((var_rc = var_expand(ctx->config_varregex, hrI->header, strlen(hrI->header), &res_ptr, NULL, FALSE)) != VAR_OK) {
  -                            log3(ctx, ERROR, "expansion of '%s' failed: %s", hrI->header, var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  +                            logbook(ctx->l2, L2_LEVEL_ERROR, "expansion of '%s' failed: %s", hrI->header, var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
                           }
  -                        log1(ctx, DEBUG, "expansion result '%s'", res_ptr);
  +                        logbook(ctx->l2, L2_LEVEL_DEBUG, "expansion result '%s'", res_ptr);
                           if (strlen(res_ptr) == 0) {
  -                            log0(ctx, DEBUG, "marking deleted - emtpy headername");
  +                            logbook(ctx->l2, L2_LEVEL_DEBUG, "marking deleted - emtpy headername");
                               hdNew->name = NULL; //FIXME rename ->header to ->name
                               /*FIXME clean up data.s and data.m */
                               hdNew->ndata = 0;
  @@ -1459,7 +1459,7 @@
                           }
                       }
                       if (hrI->val == NULL) {
  -                        log0(ctx, DEBUG, "marking deleted - empty headervalue before expansion");
  +                        logbook(ctx->l2, L2_LEVEL_DEBUG, "marking deleted - empty headervalue before expansion");
                           /*FIXME clean up data.s and data.m */
                           hdNew->ndata = 0;
                       }
  @@ -1468,24 +1468,24 @@
                           {
                               var_rc_t var_rc;
                               char *res_ptr;
  -                            log1(ctx, DEBUG, "expanding regex references in header value '%s'", hrI->val);
  +                            logbook(ctx->l2, L2_LEVEL_DEBUG, "expanding regex references in header value '%s'", hrI->val);
                               if ((var_rc = var_expand(ctx->config_varregex, hrI->val, strlen(hrI->val), &res_ptr, NULL, FALSE)) != VAR_OK) {
  -                                log3(ctx, ERROR, "expansion of '%s' failed: %s", hrI->val, var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  +                                logbook(ctx->l2, L2_LEVEL_ERROR, "expansion of '%s' failed: %s", hrI->val, var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
                               }
  -                            log1(ctx, DEBUG, "expansion result '%s'", res_ptr);
  +                            logbook(ctx->l2, L2_LEVEL_DEBUG, "expansion result '%s'", res_ptr);
                               cp = res_ptr;
                           }
                           /* expanding header and other variables into header value */
                           if (hrI->val != NULL) {
                               var_rc_t var_rc;
                               char *res_ptr;
  -                            log1(ctx, DEBUG, "expanding variables in header value '%s'", hrI->val);
  +                            logbook(ctx->l2, L2_LEVEL_DEBUG, "expanding variables in header value '%s'", hrI->val);
                               if ((var_rc = var_expand(ctx->config_varctx, cp, strlen(cp), &res_ptr, NULL, FALSE)) != VAR_OK) {
  -                                log3(ctx, ERROR, "expansion of '%s' failed: %s", cp, var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  +                                logbook(ctx->l2, L2_LEVEL_ERROR, "expansion of '%s' failed: %s", cp, var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
                               }
  -                            log1(ctx, DEBUG, "expansion result '%s'", res_ptr);
  +                            logbook(ctx->l2, L2_LEVEL_DEBUG, "expansion result '%s'", res_ptr);
                               if (strlen(res_ptr) == 0) {
  -                                log0(ctx, DEBUG, "marking deleted - empty headervalue after expansion");
  +                                logbook(ctx->l2, L2_LEVEL_DEBUG, "marking deleted - empty headervalue after expansion");
                                   /*FIXME clean up data.s and data.m */
                                   hdNew->ndata = 0;
                               }
  @@ -1504,11 +1504,11 @@
               }
           }
           else {
  -            log1(ctx, DEBUG, "rule has no regex but static header %s", hrI->header);
  +            logbook(ctx->l2, L2_LEVEL_DEBUG, "rule has no regex but static header %s", hrI->header);
               hdNew = headercreate();
               hdNew->name = strdupex(hrI->header); //FIXME rename ->header to ->name
               if (hrI->val == NULL) {
  -                log0(ctx, DEBUG, "marking deleted");
  +                logbook(ctx->l2, L2_LEVEL_DEBUG, "marking deleted");
                   /*FIXME clean up data.s and data.m */
                   hdNew->ndata = 0;
               }
  @@ -1517,13 +1517,13 @@
                   /* expanding header and other variables into header value */
                   var_rc_t var_rc;
                   char *res_ptr;
  -                log1(ctx, DEBUG, "expanding variables in header value '%s'", hrI->val);
  +                logbook(ctx->l2, L2_LEVEL_DEBUG, "expanding variables in header value '%s'", hrI->val);
                   if ((var_rc = var_expand(ctx->config_varctx, hrI->val, strlen(hrI->val), &res_ptr, NULL, FALSE)) != VAR_OK) {
  -                    log3(ctx, ERROR, "expansion of '%s' failed: %s", hrI->val, var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "expansion of '%s' failed: %s", hrI->val, var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
                   }
  -                log1(ctx, DEBUG, "expansion result '%s'", res_ptr);
  +                logbook(ctx->l2, L2_LEVEL_DEBUG, "expansion result '%s'", res_ptr);
                   if (strlen(res_ptr) == 0) {
  -                    log0(ctx, DEBUG, "marking deleted - empty headervalue after expansion");
  +                    logbook(ctx->l2, L2_LEVEL_DEBUG, "marking deleted - empty headervalue after expansion");
                       /*FIXME clean up data.s and data.m */
                       hdNew->ndata = 0;
                   }
  @@ -1535,20 +1535,20 @@
               for (hdI = ctx->msg->hdFirst; hdI != NULL; hdI = hdI->next) { /* for each header */
                   if (hdI->name == NULL || strlen(hdI->name) == 0)
                       continue;
  -                log2(ctx, DEBUG, "hrI->header=%s, hdI->name=%s", hrI->header, hdI->name);
  +                logbook(ctx->l2, L2_LEVEL_DEBUG, "hrI->header=%s, hdI->name=%s", hrI->header, hdI->name);
                   if (strcasecmp(hrI->header, hdI->name) == 0)
                       break;
               }
               if (hdI != NULL) {
  -                log1(ctx, DEBUG, "replacing header %s", hrI->header);
  +                logbook(ctx->l2, L2_LEVEL_DEBUG, "replacing header %s", hrI->header);
                   headerreplace(hdI, hdNew);
                   if (hdNew->prev == NULL) {
  -                    log0(ctx, DEBUG, "FIXME trace #1");
  +                    logbook(ctx->l2, L2_LEVEL_DEBUG, "FIXME trace #1");
                       ctx->msg->hdFirst = hdNew;
                   }
               }
               else {
  -                log1(ctx, DEBUG, "appending header %s", hrI->header);
  +                logbook(ctx->l2, L2_LEVEL_DEBUG, "appending header %s", hrI->header);
                   for (hdI = ctx->msg->hdFirst; hdI->next != NULL; hdI = hdI->next);
                   hdI->next = hdNew;
                   hdNew->prev = hdI;
  @@ -1561,17 +1561,17 @@
           headerrule_t *hrD;
           headerdata_t *hdD;
   
  -        log0(ctx, DEBUG, "FIXME trace ---------- headerrewrite() ---------- FINISH");
  +        logbook(ctx->l2, L2_LEVEL_DEBUG, "FIXME trace ---------- headerrewrite() ---------- FINISH");
           for (hrD = ctx->option_firstheaderrule; hrD != NULL; hrD = hrD->next)
  -            log1(ctx, DEBUG, "hrD->header=%s", hrD->header);
  +            logbook(ctx->l2, L2_LEVEL_DEBUG, "hrD->header=%s", hrD->header);
           for (hdD = ctx->msg->hdFirst; hdD != NULL; hdD = hdD->next) {
               if (hdD->ndata == 0)
  -                log1(ctx, DEBUG, "hdD->name=%s: (NO DATA)", hdD->name);
  +                logbook(ctx->l2, L2_LEVEL_DEBUG, "hdD->name=%s: (NO DATA)", hdD->name);
               if (hdD->ndata == 1)
  -                log2(ctx, DEBUG, "hdD->name:hdD->data.s    %s %s", hdD->name, hdD->data.s);
  +                logbook(ctx->l2, L2_LEVEL_DEBUG, "hdD->name:hdD->data.s    %s %s", hdD->name, hdD->data.s);
               if (hdD->ndata > 1)
                   for (i = 0; i < hdD->ndata; i++)
  -                    log3(ctx, DEBUG, "hdD->name:hdD->data.m[%d] %s %s", i, hdD->name, hdD->data.m[i]);
  +                    logbook(ctx->l2, L2_LEVEL_DEBUG, "hdD->name:hdD->data.m[%d] %s %s", i, hdD->name, hdD->data.m[i]);
           }
       }
   }
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.49 -r1.50 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	13 Mar 2002 13:58:39 -0000	1.49
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	13 Mar 2002 14:41:13 -0000	1.50
  @@ -116,6 +116,23 @@
   static void resetsession(struct session *session);
   int groupmatch(char *, size_t, char *);
   
  +void logbook(l2_channel_t *ch, l2_level_t level, const char *fmt, ...)
  +{
  +    va_list ap;
  +    l2_channel_t *ch2 = NULL;
  +
  +    if (strchr(fmt, '$') == NULL) {
  +        if (l2_channel_downstream(ch, &ch2) == L2_OK)
  +            ch = ch2;
  +        else
  +            return;
  +    }
  +    va_start(ap, fmt);
  +    l2_channel_vlog(ch, level, fmt, ap);
  +    va_end(ap);
  +    return;
  +}
  +
   static var_syntax_t syntax_ctx = {
       '\\',         /* escape        */ 
       '$',          /* varinit       */ 
  @@ -127,12 +144,6 @@
       "a-zA-Z0-9.-" /* namechars     */ 
   };
   
  -#if 0
  -typedef struct {
  -    l2_channel_t *l2;
  -} logctx_t;
  -#endif
  -
   static var_rc_t ctx_lookup(
       var_t *var,
       void *_ctx, 
  @@ -143,18 +154,8 @@
       var_rc_t rc;
       char *cp;
       optionval_t *ov;
  -#if 0
  -    logctx_t *logctx = NULL;
   
  -    if ((logctx = (logctx_t *)malloc(sizeof(logctx_t))) != NULL) {
  -        if (l2_channel_upstream(ctx->l2, &logctx->l2) != L2_OK) {
  -            if (l2_channel_downstream(ctx->l2, &logctx->l2) != L2_OK) {
  -                logctx->l2 = NULL;
  -            }
  -        }
  -    }
  -    if (logctx != NULL && logctx->l2 != NULL) log2(logctx, DEBUG, "ctx_lookup variable \"%s\" (%d)", var_ptr, var_len);
  -#endif
  +    logbook(ctx->l2, L2_LEVEL_DEBUG, "ctx_lookup variable \"%s\" (%d)", var_ptr, var_len);
   
       rc = VAR_ERR_UNDEFINED_VARIABLE;
       if (strncasecmp(var_ptr, "option.", strlen("option.")) == 0) {
  @@ -213,18 +214,13 @@
           free(cp);
       }
   
  -#if 0
       if (rc == VAR_OK) {
  -        if (logctx != NULL && logctx->l2 != NULL) log4(ctx, DEBUG, "ctx_lookup variable \"%s\" (%d) ok: result is \"%s\" (%d)", var_ptr, var_len, *val_ptr, *val_len);
  +        logbook(ctx->l2, L2_LEVEL_DEBUG, "ctx_lookup variable \"%s\" (%d) ok: result is \"%s\" (%d)", var_ptr, var_len, *val_ptr, *val_len);
       }
       else {
  -        if (logctx != NULL && logctx->l2 != NULL) log4(ctx, DEBUG, "ctx_lookup variable \"%s\" (%d) failed: %s (%d)", var_ptr, var_len, var_strerror(var, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  +        logbook(ctx->l2, L2_LEVEL_DEBUG, "ctx_lookup variable \"%s\" (%d) failed: %s (%d)", var_ptr, var_len, var_strerror(var, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
       }
   
  -    if (logctx != NULL)
  -        free(logctx);
  -#endif
  -
       return rc;
   }
   
  @@ -249,10 +245,10 @@
       else
           rc = read(ctx->fdIOi, buf, nbytes);
       if (rc == -1)
  -        log0(ctx, TRACE, "LMTP read error: %m");
  +        logbook(ctx->l2, L2_LEVEL_TRACE, "LMTP read error: %m");
       else
  -        log3(ctx, TRACE, "LMTP %5d << \"%{text}D\"", rc, buf, rc);
  -    log1(ctx, DEBUG, "hook_lmtp_read() return, rc=%d", rc);
  +        logbook(ctx->l2, L2_LEVEL_TRACE, "LMTP %5d << \"%{text}D\"", rc, buf, rc);
  +    logbook(ctx->l2, L2_LEVEL_DEBUG, "hook_lmtp_read() return, rc=%d", rc);
       return rc;
   }
   
  @@ -263,7 +259,7 @@
       size_t n;
       sa_rc_t rv;
   
  -    log3(ctx, TRACE, "LMTP %5d >> \"%{text}D\"", nbytes, buf, nbytes);
  +    logbook(ctx->l2, L2_LEVEL_TRACE, "LMTP %5d >> \"%{text}D\"", nbytes, buf, nbytes);
       if (ctx->saIO != NULL) {
           if ((rv = sa_write(ctx->saIO, buf, nbytes, &n)) != SA_OK)
               rc = -1;
  @@ -273,7 +269,7 @@
       else
           rc = write(ctx->fdIOo, buf, nbytes);
       if (rc == -1)
  -        log0(ctx, TRACE, "LMTP write error: %m");
  +        logbook(ctx->l2, L2_LEVEL_TRACE, "LMTP write error: %m");
       return rc;
   }
   
  @@ -289,9 +285,9 @@
       else
           rc = (ssize_t)n;
       if (rc == -1)
  -        log0(ctx, TRACE, "NNTP read error: %m");
  +        logbook(ctx->l2, L2_LEVEL_TRACE, "NNTP read error: %m");
       else
  -        log3(ctx, TRACE, "NNTP %5d << \"%{text}D\"", rc, buf, rc);
  +        logbook(ctx->l2, L2_LEVEL_TRACE, "NNTP %5d << \"%{text}D\"", rc, buf, rc);
       return rc;
   }
   
  @@ -302,13 +298,13 @@
       size_t n;
       sa_rc_t rv;
   
  -    log3(ctx, TRACE, "NNTP %5d >> \"%{text}D\"", nbytes, buf, nbytes);
  +    logbook(ctx->l2, L2_LEVEL_TRACE, "NNTP %5d >> \"%{text}D\"", nbytes, buf, nbytes);
       if ((rv = sa_write(ctx->sa, buf, nbytes, &n)) != SA_OK)
           rc = -1;
       else
           rc = (ssize_t)n;
       if (rc == -1)
  -        log0(ctx, TRACE, "NNTP write error: %m");
  +        logbook(ctx->l2, L2_LEVEL_TRACE, "NNTP write error: %m");
       return rc;
   }
   
  @@ -322,29 +318,29 @@
           va_start(ap, sig);
           if ((ctx = va_arg(ap, lmtp2nntp_t *)) == NULL)
               exit(ERR_EXECUTION);
  -        log0(ctx, TRACE, "catching and logging signals now");
  +        logbook(ctx->l2, L2_LEVEL_TRACE, "catching and logging signals now");
           va_end(ap);
           return;
       }
       if (ctx != NULL) {
           switch (sig) {
               case SIGCHLD:
  -                log1(ctx, NOTICE, "caught signal %d - wait for child", sig);
  +                logbook(ctx->l2, L2_LEVEL_NOTICE, "caught signal %d - wait for child", sig);
                   pid = wait(NULL);
                   ctx->active_childs--;
  -                log2(ctx, NOTICE, "caught signal %d - child [%ld] terminated", sig, (long)pid);
  +                logbook(ctx->l2, L2_LEVEL_NOTICE, "caught signal %d - child [%ld] terminated", sig, (long)pid);
                   return;
               case SIGUSR1:
  -                log1(ctx, NOTICE, "caught signal %d - flush logging stream", sig);
  +                logbook(ctx->l2, L2_LEVEL_NOTICE, "caught signal %d - flush logging stream", sig);
                   l2_channel_flush(ctx->l2);
                   return;
               case SIGHUP:
               case SIGINT:
               case SIGQUIT:
  -                log1(ctx, NOTICE, "caught signal %d - exit - no more logging", sig);
  +                logbook(ctx->l2, L2_LEVEL_NOTICE, "caught signal %d - exit - no more logging", sig);
                   break;
               default:
  -                log1(ctx, PANIC, "CAUGHT SIGNAL %d - EXIT - NO MORE LOGGING", sig);
  +                logbook(ctx->l2, L2_LEVEL_PANIC, "CAUGHT SIGNAL %d - EXIT - NO MORE LOGGING", sig);
           }
           l2_channel_destroy(ctx->l2);
           l2_env_destroy(ctx->l2_env);
  @@ -480,19 +476,19 @@
   
       if ((ctx->option_pidfile != NULL) && ctx->option_killflag) {
           if ((fd = fopen(ctx->option_pidfile, "r")) == NULL)
  -            log1(ctx, ERROR, "cannot open pidfile \"%s\" for reading %m", ctx->option_pidfile);
  +            logbook(ctx->l2, L2_LEVEL_ERROR, "cannot open pidfile \"%s\" for reading %m", ctx->option_pidfile);
           else {
               if (fscanf(fd, "%d\n", &pid) != 1) {
                   fclose(fd);
  -                log1(ctx, ERROR, "cannot extract pid from pidfile \"%s\"", ctx->option_pidfile);
  +                logbook(ctx->l2, L2_LEVEL_ERROR, "cannot extract pid from pidfile \"%s\"", ctx->option_pidfile);
               }
               else {
                   fclose(fd);
  -                log1(ctx, TRACE, "going to kill pid[%d]", pid);
  +                logbook(ctx->l2, L2_LEVEL_TRACE, "going to kill pid[%d]", pid);
                   if (kill(pid, SIGHUP) == -1)
  -                    log1(ctx, ERROR, "killing pid[%d] failed %m", pid);
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "killing pid[%d] failed %m", pid);
                   if (unlink(ctx->option_pidfile) == -1)
  -                    log1(ctx, ERROR, "unlinking pidfile \"%s\" failed %m", ctx->option_pidfile);
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "unlinking pidfile \"%s\" failed %m", ctx->option_pidfile);
               }
           }
           CU(0);
  @@ -520,7 +516,7 @@
           lmtp_io.read   = hook_lmtp_read;
           lmtp_io.write  = hook_lmtp_write;
           if ((lmtp = lmtp_create(&lmtp_io)) == NULL) {
  -            log0(ctx, ERROR, "Unable to initialize LMTP library\n");
  +            logbook(ctx->l2, L2_LEVEL_ERROR, "Unable to initialize LMTP library\n");
               CU(ERR_EXECUTION);
           }
           /*  RFC0821, 4.5.1. MINIMUM IMPLEMENTATION
  @@ -553,11 +549,11 @@
           pid = getpid();
           if (ctx->option_daemon) {
               daemonize();
  -            log1(ctx, NOTICE, "daemonized, previous pid[%d]", pid);
  +            logbook(ctx->l2, L2_LEVEL_NOTICE, "daemonized, previous pid[%d]", pid);
           }
           if (ctx->option_pidfile != NULL) {
               if ((fd = fopen(ctx->option_pidfile, "w+")) == NULL)
  -                log1(ctx, ERROR, "cannot open pidfile \"%s\" for writing %m", ctx->option_pidfile);
  +                logbook(ctx->l2, L2_LEVEL_ERROR, "cannot open pidfile \"%s\" for writing %m", ctx->option_pidfile);
               else {
                   fprintf(fd, "%d\n", getpid());
                   fclose(fd);
  @@ -570,15 +566,15 @@
           sa_timeout(ctx->saServerbind, SA_TIMEOUT_WRITE,  ctx->option_timeout_lmtp_write,  0);
           while (1) {
               while (ctx->active_childs >= ctx->option_childsmax) {
  -                log1(ctx, ERROR, "maximum number of childs (%d) reached - waiting (1s)", ctx->option_childsmax);
  +                logbook(ctx->l2, L2_LEVEL_ERROR, "maximum number of childs (%d) reached - waiting (1s)", ctx->option_childsmax);
                   sleep(1);
               }
   
               if ((rc = sa_accept(ctx->saServerbind, &ctx->saaIO, &ctx->saIO)) != SA_OK) {
                   if (rc == SA_ERR_SYS)
  -                    log3(ctx, ERROR, "accept failed: %s: (%d) %s", sa_error(rc), errno, strerror(errno));
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "accept failed: %s: (%d) %s", sa_error(rc), errno, strerror(errno));
                   else
  -                    log1(ctx, ERROR, "accept failed: %s", sa_error(rc));
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "accept failed: %s", sa_error(rc));
                   sleep(10);
                   continue;
               }
  @@ -594,12 +590,12 @@
                   sa_addr_a2u(ctx->pacl[i].saa, &cpA1);
                   sa_addr_a2u(ctx->saaIO, &cpA2);
                   if (sa_addr_match(ctx->saaIO, ctx->pacl[i].saa, ctx->pacl[i].prefixlen) == SA_OK) {
  -                    log4(ctx, TRACE, "positive/inclusive ACL \"%s\" (%s/%d) matches %s: YES (stop comparison)", ctx->pacl[i].acl, cpA1, ctx->pacl[i].prefixlen, cpA2);
  +                    logbook(ctx->l2, L2_LEVEL_TRACE, "positive/inclusive ACL \"%s\" (%s/%d) matches %s: YES (stop comparison)", ctx->pacl[i].acl, cpA1, ctx->pacl[i].prefixlen, cpA2);
                       bOk = TRUE;
                       break;
                   }
                   else
  -                    log4(ctx, TRACE, "positive/inclusive ACL \"%s\" (%s/%d) matches %s: NO", ctx->pacl[i].acl, cpA1, ctx->pacl[i].prefixlen, cpA2);
  +                    logbook(ctx->l2, L2_LEVEL_TRACE, "positive/inclusive ACL \"%s\" (%s/%d) matches %s: NO", ctx->pacl[i].acl, cpA1, ctx->pacl[i].prefixlen, cpA2);
                   free(cpA1);
                   free(cpA2);
               }
  @@ -612,24 +608,24 @@
                   sa_addr_a2u(ctx->pacl[i].saa, &cpA1);
                   sa_addr_a2u(ctx->saaIO, &cpA2);
                   if (sa_addr_match(ctx->saaIO, ctx->pacl[i].saa, ctx->pacl[i].prefixlen) == SA_OK) {
  -                    log4(ctx, TRACE, "negative/exclusive ACL \"%s\" (not %s/%d) matches %s: YES (stop comparison)", ctx->pacl[i].acl, cpA1, ctx->pacl[i].prefixlen, cpA2);
  +                    logbook(ctx->l2, L2_LEVEL_TRACE, "negative/exclusive ACL \"%s\" (not %s/%d) matches %s: YES (stop comparison)", ctx->pacl[i].acl, cpA1, ctx->pacl[i].prefixlen, cpA2);
                       bOk = FALSE;
                       break;
                   }
                   else {
  -                    log4(ctx, TRACE, "negative/exclusive ACL \"%s\" (not %s/%d) matches %s: NO", ctx->pacl[i].acl, cpA1, ctx->pacl[i].prefixlen, cpA2);
  +                    logbook(ctx->l2, L2_LEVEL_TRACE, "negative/exclusive ACL \"%s\" (not %s/%d) matches %s: NO", ctx->pacl[i].acl, cpA1, ctx->pacl[i].prefixlen, cpA2);
                   }
               }
               if (bOk) {
                   char *cpA;
                   sa_addr_a2u(ctx->saaIO, &cpA);
  -                log1(ctx, TRACE, "connection from %s accepted due to ACL", cpA); 
  +                logbook(ctx->l2, L2_LEVEL_TRACE, "connection from %s accepted due to ACL", cpA); 
                   free(cpA);
               }
               else {
                   char *cpA;
                   sa_addr_a2u(ctx->saaIO, &cpA);
  -                log1(ctx, ERROR, "connection from %s refused due to ACL", cpA); 
  +                logbook(ctx->l2, L2_LEVEL_ERROR, "connection from %s refused due to ACL", cpA); 
                   free(cpA);
                   sa_destroy(ctx->saIO);
                   sa_addr_destroy(ctx->saaIO);
  @@ -641,17 +637,17 @@
               l2_channel_flush(ctx->l2);
               pid = fork();
               if (pid == -1) {
  -                log0(ctx, ERROR, "daemon cannot spawn child %m");
  +                logbook(ctx->l2, L2_LEVEL_ERROR, "daemon cannot spawn child %m");
                   continue;
               }
               if (pid != 0) {
  -                log1(ctx, INFO, "daemon forked process, new child pid[%d]", pid);
  +                logbook(ctx->l2, L2_LEVEL_INFO, "daemon forked process, new child pid[%d]", pid);
                   ctx->active_childs++;
                   sa_destroy(ctx->saIO);
                   sa_addr_destroy(ctx->saaIO);
                   continue;
               }
  -            log1(ctx, NOTICE, "startup new child process, parent pid[%d]", getppid());
  +            logbook(ctx->l2, L2_LEVEL_NOTICE, "startup new child process, parent pid[%d]", getppid());
   
               /* child must close listening socket */
               sa_destroy(ctx->saServerbind);
  @@ -662,7 +658,7 @@
               lmtp_io.read   = hook_lmtp_read;
               lmtp_io.write  = hook_lmtp_write;
               if ((lmtp = lmtp_create(&lmtp_io)) == NULL) {
  -                log0(ctx, ERROR, "Unable to initialize LMTP library\n");
  +                logbook(ctx->l2, L2_LEVEL_ERROR, "Unable to initialize LMTP library\n");
                   CU(ERR_EXECUTION);
               }
               /*  RFC0821, 4.5.1. MINIMUM IMPLEMENTATION
  @@ -698,7 +694,7 @@
   
       /* graceful shutdown */
       CUS:
  -    log0(ctx, NOTICE, "graceful shutdown shortly before exit - no more logging");
  +    logbook(ctx->l2, L2_LEVEL_NOTICE, "graceful shutdown shortly before exit - no more logging");
       //l2_channel_destroy(ctx->l2);
       l2_env_destroy(ctx->l2_env);
       if (ctx->saServerbind)
  @@ -772,13 +768,13 @@
       int          i;
       nntp_io_t    nntp_io;
   
  -    log1(ctx, INFO, "LMTP service executing LHLO command < %s", req->msg);
  +    logbook(ctx->l2, L2_LEVEL_INFO, "LMTP service executing LHLO command < %s", req->msg);
   
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   503 Bad sequence of commands
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.0.0   Other undefined Status
        */
  -    log0(ctx, TRACE, "checking for duplicate LHLO");
  +    logbook(ctx->l2, L2_LEVEL_TRACE, "checking for duplicate LHLO");
       if (ctx->session.lhlo_seen) {
           res.statuscode = "503";
           res.dsncode    = "5.0.0";
  @@ -790,7 +786,7 @@
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.0.0   Other undefined Status
        */
  -    log0(ctx, TRACE, "checking domain to match either RFC0821 or RFC1035 syntax");
  +    logbook(ctx->l2, L2_LEVEL_TRACE, "checking domain to match either RFC0821 or RFC1035 syntax");
       if (! (   helo_rfc0821domain(req->msg, &ctx->session.lhlo_domain) > 0
              || helo_rfc1035domain(req->msg, &ctx->session.lhlo_domain) > 0)) {
           res.statuscode = "501";
  @@ -804,7 +800,7 @@
        *  RFC1893 3.5 Network and Routing Status          X.3.5   System incorrectly configured
        */
       if (ctx->option_operationmode != OPERATIONMODE_FAKE) {
  -        log0(ctx, TRACE, "check if at least one NNTP service was successfully configured");
  +        logbook(ctx->l2, L2_LEVEL_TRACE, "check if at least one NNTP service was successfully configured");
           if (ctx->nns == 0) {
               res.statuscode = "451";
               res.dsncode    = "4.3.5";
  @@ -813,22 +809,22 @@
           }
       }
   
  -    log0(ctx, TRACE, "try to establish a session to any configured NNTP services");
  +    logbook(ctx->l2, L2_LEVEL_TRACE, "try to establish a session to any configured NNTP services");
       if (ctx->option_operationmode == OPERATIONMODE_FAKE)
  -        log0(ctx, NOTICE, "NNTP running in fake mode, network connections will be executed but result is ignored");
  +        logbook(ctx->l2, L2_LEVEL_NOTICE, "NNTP running in fake mode, network connections will be executed but result is ignored");
       i = 0;
       do {
  -        log1(ctx, DEBUG, "trying ns[%d]", i);
  +        logbook(ctx->l2, L2_LEVEL_DEBUG, "trying ns[%d]", i);
           bOk = TRUE;
  -        log1(ctx, TRACE, "try ${option.destination}[%d]", i); //FIXME
  +        logbook(ctx->l2, L2_LEVEL_TRACE, "try ${option.destination}[%d]", i); //FIXME
   
           ctx->pns[i].l2 = ctx->l2;
   
           if (bOk && (ctx->saaClientbind != NULL)) {
  -            log0(ctx, DEBUG, "bind local socket to ${option.clientbind}"); //FIXME
  +            logbook(ctx->l2, L2_LEVEL_DEBUG, "bind local socket to ${option.clientbind}"); //FIXME
               if (sa_bind(ctx->pns[i].sa, ctx->saaClientbind) != SA_OK) {
                   bOk = FALSE;
  -                log0(ctx, ERROR, "binding NNTP client to local address ${option.clientbind} failed, %m"); //FIXME
  +                logbook(ctx->l2, L2_LEVEL_ERROR, "binding NNTP client to local address ${option.clientbind} failed, %m"); //FIXME
               }
           }
   
  @@ -838,39 +834,39 @@
           sa_timeout(ctx->pns[i].sa, SA_TIMEOUT_WRITE,   ctx->option_timeout_nntp_read,    0);
   
           if (bOk) {
  -            log0(ctx, DEBUG, "connect");
  +            logbook(ctx->l2, L2_LEVEL_DEBUG, "connect");
               if (sa_connect(ctx->pns[i].sa, ctx->pns[i].saa) != SA_OK) {
                   bOk = FALSE;
  -                log1(ctx, WARNING, "connect to ${option.destination}[%d] failed, %m", i); //FIXME
  +                logbook(ctx->l2, L2_LEVEL_WARNING, "connect to ${option.destination}[%d] failed, %m", i); //FIXME
               }
           }
   
           if (bOk) {
  -            log0(ctx, DEBUG, "nntp_create");
  +            logbook(ctx->l2, L2_LEVEL_DEBUG, "nntp_create");
               nntp_io.ctx    = &ctx->pns[i];
               nntp_io.read   = hook_nntp_read;
               nntp_io.write  = hook_nntp_write;
               if ((ctx->pns[i].nntp = nntp_create(&nntp_io)) == NULL) {
                   bOk = FALSE;
  -                log0(ctx, ERROR, "creation of NNTP context failed");
  +                logbook(ctx->l2, L2_LEVEL_ERROR, "creation of NNTP context failed");
               }
           }
   
           if (bOk) {
  -            log0(ctx, DEBUG, "nntp_init");
  +            logbook(ctx->l2, L2_LEVEL_DEBUG, "nntp_init");
               if ((rc = nntp_init(ctx->pns[i].nntp)) != NNTP_OK) {
                   bOk = FALSE;
  -                log2(ctx, ERROR, "initialization of NNTP context failed, (%d) %s", rc, nntp_error(rc));
  +                logbook(ctx->l2, L2_LEVEL_ERROR, "initialization of NNTP context failed, (%d) %s", rc, nntp_error(rc));
               }
           }
   
           if (bOk) {
  -            log1(ctx, INFO, "NNTP session to ${option.destination}[%d] successfully established", i); //FIXME
  +            logbook(ctx->l2, L2_LEVEL_INFO, "NNTP session to ${option.destination}[%d] successfully established", i); //FIXME
               i++;
           }
           else {
  -            log1(ctx, WARNING, "NNTP session establishment to ${option.destination}[%d] failed", i); //FIXME
  -            log1(ctx, DEBUG, "FIXME-CURRENTLY-NOT removing ns[%d] from list", i);
  +            logbook(ctx->l2, L2_LEVEL_WARNING, "NNTP session establishment to ${option.destination}[%d] failed", i); //FIXME
  +            logbook(ctx->l2, L2_LEVEL_DEBUG, "FIXME-CURRENTLY-NOT removing ns[%d] from list", i);
               lmtp_gfs_ns(&ctx->pns[i]);
               /*FIXME #1 this code is a leftover from the static ns array with nsc counter
                 FIXME #2 this code removes the newsservice forever!? What is the scope, what should the scope be - gateway, child process, session, posting lifetime? What is the intention of the user?
  @@ -883,16 +879,16 @@
       } while (i < ctx->nns);
   
       if (ctx->option_operationmode == OPERATIONMODE_FAKE)
  -        log1(ctx, NOTICE, "NNTP running in fake mode, network connections successfully established=%d but ignored", ctx->nns);
  +        logbook(ctx->l2, L2_LEVEL_NOTICE, "NNTP running in fake mode, network connections successfully established=%d but ignored", ctx->nns);
       else
       {
           /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   421 <domain> Service not available
            *  RFC1893 2. Status Codes                         4.X.X   Persistent Transient Failure
            *  RFC1893 3.5 Network and Routing Status          X.4.1   No answer from host
            */
  -        log0(ctx, DEBUG, "check if at least one NNTP session successfully established");
  +        logbook(ctx->l2, L2_LEVEL_DEBUG, "check if at least one NNTP session successfully established");
           if (ctx->nns == 0) {
  -            log0(ctx, ERROR, "no NNTP session established");
  +            logbook(ctx->l2, L2_LEVEL_ERROR, "no NNTP session established");
               res.statuscode = "421";
               res.dsncode    = "4.4.1";
               res.statusmsg  = "No NNTP session established.";
  @@ -942,7 +938,7 @@
   {
       int i;
   
  -    log0(ctx, TRACE, "LMTP service LHLO command - graceful shutdown");
  +    logbook(ctx->l2, L2_LEVEL_TRACE, "LMTP service LHLO command - graceful shutdown");
   
       for (i = 0; i < ctx->nns; i++)
               lmtp_gfs_ns(&ctx->pns[i]);
  @@ -1079,13 +1075,13 @@
       lmtp_rc_t    rc;
       lmtp_res_t   res;
   
  -    log1(ctx, INFO, "LMTP service executing MAIL command < %s", req->msg);
  +    logbook(ctx->l2, L2_LEVEL_INFO, "LMTP service executing MAIL command < %s", req->msg);
   
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   553 Requested action not taken: mailbox name not allowed
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.1.8   Bad sender's system address
        */
  -    log0(ctx, TRACE, "checking for previous LHLO");
  +    logbook(ctx->l2, L2_LEVEL_TRACE, "checking for previous LHLO");
       if (!ctx->session.lhlo_seen) {
           res.statuscode = "553";
           res.dsncode    = "5.1.8";
  @@ -1097,7 +1093,7 @@
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.5.0   Other or undefined protocol status
        */
  -    log0(ctx, TRACE, "checking for previous MAIL");
  +    logbook(ctx->l2, L2_LEVEL_TRACE, "checking for previous MAIL");
       if (ctx->msg != NULL) {
           res.statuscode = "503";
           res.dsncode    = "5.5.0";
  @@ -1109,7 +1105,7 @@
        *  RFC1893 2. Status Codes                         4.X.X   Persistent Transient Failure
        *  RFC1893 3.5 Network and Routing Status          X.3.1   Mail system full 
        */
  -    log0(ctx, TRACE, "msg_create");
  +    logbook(ctx->l2, L2_LEVEL_TRACE, "msg_create");
       if ((ctx->msg = msg_create()) == NULL) {
           res.statuscode = "452";
           res.dsncode    = "4.3.1";
  @@ -1135,7 +1131,7 @@
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.1.7   Bad sender's mailbox address syntax
        */
  -    log0(ctx, TRACE, "checking if sender address is a domain name");
  +    logbook(ctx->l2, L2_LEVEL_TRACE, "checking if sender address is a domain name");
       if (str_parse(req->msg, "m/^MAIL From:\\s*<(?:.+@.+)>/i") <= 0) {
           res.statuscode = "553";
           res.dsncode    = "5.1.7";
  @@ -1146,7 +1142,7 @@
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.5.4   Invalid command arguments
        */
  -    log0(ctx, TRACE, "checking BODY keyword");
  +    logbook(ctx->l2, L2_LEVEL_TRACE, "checking BODY keyword");
       if (str_parse(req->msg, "m/^MAIL From:\\s*<(.+@.+)>"
                               "(?:\\s+BODY=(?:7BIT|8BITMIME)\\s*)?$/i", 
                               &ctx->msg->mail_from) <= 0) {
  @@ -1160,9 +1156,9 @@
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.7.1   Delivery not authorized, message refused
        */
  -    log0(ctx, TRACE, "checking if sender is allowed");
  +    logbook(ctx->l2, L2_LEVEL_TRACE, "checking if sender is allowed");
       if (ctx->option_mailfrom != NULL) {
  -        log2(ctx, TRACE, "\"%s\" matching against \"%s\"", ctx->msg->mail_from, ctx->option_mailfrom);
  +        logbook(ctx->l2, L2_LEVEL_TRACE, "\"%s\" matching against \"%s\"", ctx->msg->mail_from, ctx->option_mailfrom);
           if (str_parse(ctx->msg->mail_from, ctx->option_mailfrom) <= 0) {
               res.statuscode = "550";
               res.dsncode    = "5.7.1";
  @@ -1198,13 +1194,13 @@
       char        *cp;
       char        *group;
   
  -    log1(ctx, INFO, "LMTP service executing RCPT command < %s", req->msg);
  +    logbook(ctx->l2, L2_LEVEL_INFO, "LMTP service executing RCPT command < %s", req->msg);
   
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   503 Bad sequence of commands
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.5.0   Other or undefined protocol status
        */
  -    log0(ctx, TRACE, "checking for previous MAIL");
  +    logbook(ctx->l2, L2_LEVEL_TRACE, "checking for previous MAIL");
       if ((ctx->msg == NULL) || (ctx->msg->mail_from == NULL)) {
           res.statuscode = "503";
           res.dsncode    = "5.5.0";
  @@ -1216,7 +1212,7 @@
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.5.2   Syntax error
        */
  -    log0(ctx, TRACE, "checking parameter syntax");
  +    logbook(ctx->l2, L2_LEVEL_TRACE, "checking parameter syntax");
       if (str_parse(req->msg, "m/^RCPT To:\\s*(.+)$/i", &cp) <= 0) {
           res.statuscode = "501";
           res.dsncode    = "5.5.2";
  @@ -1228,7 +1224,7 @@
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.1.1   Bad destination mailbox address
        */
  -    log0(ctx, TRACE, "checking for empty parameter");
  +    logbook(ctx->l2, L2_LEVEL_TRACE, "checking for empty parameter");
       if ((cp == NULL) || (strlen(cp) == 0)) {
           res.statuscode = "550";
           res.dsncode    = "5.1.1";
  @@ -1246,26 +1242,26 @@
        *  RFC1893 3.5 Network and Routing Status          X.1.1   Bad destination mailbox address
        *                                                  X.7.2   Mailing list expansion prohibited
        */
  -    log1(ctx, DEBUG, "ctx->option_groupmode=%d", ctx->option_groupmode);
  +    logbook(ctx->l2, L2_LEVEL_DEBUG, "ctx->option_groupmode=%d", ctx->option_groupmode);
       if (ctx->option_groupmode == GROUPMODE_ENVELOPE) {
  -        log0(ctx, TRACE, "groupmode=envelope; transform recipient into group");
  +        logbook(ctx->l2, L2_LEVEL_TRACE, "groupmode=envelope; transform recipient into group");
           if (str_parse(cp, "m/^<(.+)?@[^@]+>$/i", &group) <= 0) {
               res.statuscode = "550";
               res.dsncode    = "5.1.1";
               res.statusmsg  = "Recipient did not transform into group.";
               CU(LMTP_OK);
           }
  -        log1(ctx, TRACE, "groupmode=envelope; match group %s", group);
  +        logbook(ctx->l2, L2_LEVEL_TRACE, "groupmode=envelope; match group %s", group);
           if (!groupmatch(ctx->azGroupargs, ctx->asGroupargs, group)) {
               res.statuscode = "550";
               res.dsncode    = "5.7.2";
               res.statusmsg  = "unmatched Group.";
               CU(LMTP_OK);
           }
  -        log1(ctx, TRACE, "memorize group %s", group);
  +        logbook(ctx->l2, L2_LEVEL_TRACE, "memorize group %s", group);
           argz_add(&ctx->msg->azEnvgroups, &ctx->msg->asEnvgroups, group);
       }
  -    log1(ctx, TRACE, "memorize recipient %s", cp);
  +    logbook(ctx->l2, L2_LEVEL_TRACE, "memorize recipient %s", cp);
       argz_add(&ctx->msg->azRcpt, &ctx->msg->asRcpt, cp);
   
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   250 Requested mail action okay, completed
  @@ -1312,13 +1308,13 @@
       char        *cpRestrictheader;
       char        *cpRestrictvalue;
   
  -    log1(ctx, INFO, "LMTP service executing DATA command < %s", req->msg);
  +    logbook(ctx->l2, L2_LEVEL_INFO, "LMTP service executing DATA command < %s", req->msg);
   
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   503 Bad sequence of commands
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.5.0   Other or undefined protocol status
        */
  -    log0(ctx, TRACE, "checking for previous RCPT");
  +    logbook(ctx->l2, L2_LEVEL_TRACE, "checking for previous RCPT");
       if ((ctx->msg == NULL) || (argz_count(ctx->msg->azRcpt, ctx->msg->asRcpt) == 0)) {
           res.statuscode = "503";
           res.dsncode    = "5.5.0";
  @@ -1329,20 +1325,20 @@
   
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   354 Start mail input; end with <CRLF>.<CRLF>
        */
  -    log0(ctx, TRACE, "tell remote to send message now");
  +    logbook(ctx->l2, L2_LEVEL_TRACE, "tell remote to send message now");
       res.statuscode = "354";
       res.dsncode    = NULL; /* DSN not used for data */
       res.statusmsg  = "Enter mail, end with \".\" on a line by itself";
       lmtp_response(lmtp, &res);
   
  -    log1(ctx, TRACE, "read message with maximum size to accept = %d", ctx->option_maxmessagesize);
  +    logbook(ctx->l2, L2_LEVEL_TRACE, "read message with maximum size to accept = %d", ctx->option_maxmessagesize);
       rc = lmtp_readmsg(lmtp, &ctx->msg->cpMsg, ctx->option_maxmessagesize);
   
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   552 Requested mail action aborted: exceeded storage allocation
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.2.3   Message length exceeds administrative limit.
        */
  -    log0(ctx, TRACE, "checking for excessive message size");
  +    logbook(ctx->l2, L2_LEVEL_TRACE, "checking for excessive message size");
       if (rc == LMTP_ERR_OVERFLOW) {
           str_format(errorstring, sizeof(errorstring), "Message length exceeds administrative limit. %s", lmtp_error(rc));
           res.statuscode = "552";
  @@ -1359,7 +1355,7 @@
        *  RFC1893 2. Status Codes                         4.X.X   Persistent Transient Failure
        *  RFC1893 3.5 Network and Routing Status          X.3.2   System not accepting network messages
        */
  -    log0(ctx, TRACE, "checking for system error");
  +    logbook(ctx->l2, L2_LEVEL_TRACE, "checking for system error");
       if (rc == LMTP_ERR_SYSTEM) {
           str_format(errorstring, sizeof(errorstring), "System error reading message: %s", strerror(errno));
           res.statuscode = "451";
  @@ -1376,7 +1372,7 @@
        *  RFC1893 2. Status Codes                         4.X.X   Persistent Transient Failure
        *  RFC1893 3.5 Network and Routing Status          X.3.2   System not accepting network messages
        */
  -    log0(ctx, TRACE, "checking for other error");
  +    logbook(ctx->l2, L2_LEVEL_TRACE, "checking for other error");
       if(rc != LMTP_OK) {
           str_format(errorstring, sizeof(errorstring), "Unknown error reading message: %s", lmtp_error(rc));
           res.statuscode = "451";
  @@ -1393,7 +1389,7 @@
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.6.5   Conversion Failed
        */
  -    log0(ctx, TRACE, "split message");
  +    logbook(ctx->l2, L2_LEVEL_TRACE, "split message");
       if ((rc = msg_split(ctx->msg)) != MSG_OK) {
           str_format(errorstring, sizeof(errorstring), "Error splitting message: %s", msg_error(rc));
           res.statuscode = "554";
  @@ -1474,7 +1470,7 @@
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.7.1   Delivery not authorized, message refused
        */
  -    log0(ctx, TRACE, "checking if restricted header causes reject");
  +    logbook(ctx->l2, L2_LEVEL_TRACE, "checking if restricted header causes reject");
       if (ctx->option_restrictheader != NULL) {
           bOk = FALSE;
           cp = NULL;
  @@ -1485,16 +1481,16 @@
               cpRestrictvalue = cp;
               str_format(errorstring, sizeof(errorstring), "%s %s", cpRestrictheader, cpRestrictvalue);
               if (str_parse(errorstring, ctx->option_restrictheader) <= 0) {
  -                log2(ctx, TRACE, "\"%s\" matching against \"%s\" NO", errorstring, ctx->option_restrictheader);
  +                logbook(ctx->l2, L2_LEVEL_TRACE, "\"%s\" matching against \"%s\" NO", errorstring, ctx->option_restrictheader);
               }
               else {
  -                log2(ctx, TRACE, "\"%s\" matching against \"%s\": YES", errorstring, ctx->option_restrictheader);
  +                logbook(ctx->l2, L2_LEVEL_TRACE, "\"%s\" matching against \"%s\": YES", errorstring, ctx->option_restrictheader);
                   bOk = TRUE;
                   break;
               }
           }
           if (bOk) {
  -            log0(ctx, TRACE, "restricted header found");
  +            logbook(ctx->l2, L2_LEVEL_TRACE, "restricted header found");
               rcpt = NULL;
               while ((rcpt = argz_next(ctx->msg->azRcpt, ctx->msg->asRcpt, rcpt)) != NULL) {
                   res.statuscode = "550";
  @@ -1507,7 +1503,7 @@
       }
   
       /* rewrite headers */
  -    log0(ctx, TRACE, "appying header rewrite rules");
  +    logbook(ctx->l2, L2_LEVEL_TRACE, "appying header rewrite rules");
       msg_headermatrixbuildup(ctx->msg);
       headerrewrite(ctx);
       msg_headermatrixteardwn(ctx->msg);
  @@ -1516,7 +1512,7 @@
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.6.5   Conversion Failed
        */
  -    log0(ctx, TRACE, "join message");
  +    logbook(ctx->l2, L2_LEVEL_TRACE, "join message");
       if ((rc = msg_join(ctx->msg)) != MSG_OK) {
           str_format(errorstring, sizeof(errorstring), "Error joining message: %s", msg_error(rc));
           res.statuscode = "554";
  @@ -1529,7 +1525,7 @@
           return LMTP_OK;
       }
   
  -    log0(ctx, TRACE, "deliver message");
  +    logbook(ctx->l2, L2_LEVEL_TRACE, "deliver message");
       bSuccess = NNTP_ERR_DELIVERY; /* assume a hard error for the worst case */
       for (i = 0; i < ctx->nns; i++) {
           switch (ctx->option_operationmode) {
  @@ -1564,15 +1560,15 @@
           switch (ctx->option_operationmodefakestatus[0]) {
               case '5':
                   bSuccess = NNTP_ERR_UNKNOWN;
  -                log2(ctx, NOTICE, "%s %s", errorstring, "failed");
  +                logbook(ctx->l2, L2_LEVEL_NOTICE, "%s %s", errorstring, "failed");
                   break;
               case '4':
                   bSuccess = NNTP_DEFER;
  -                log2(ctx, NOTICE, "%s %s", errorstring, "deferred");
  +                logbook(ctx->l2, L2_LEVEL_NOTICE, "%s %s", errorstring, "deferred");
                   break;
               default:
                   bSuccess = NNTP_OK;
  -                log2(ctx, NOTICE, "%s %s", errorstring, "succeeded");
  +                logbook(ctx->l2, L2_LEVEL_NOTICE, "%s %s", errorstring, "succeeded");
                   break;
           }
       } else {
  @@ -1582,11 +1578,11 @@
                      ctx->msg->cpMsgid,
                      strlen(ctx->msg->cpMsg));
           if (bSuccess == NNTP_OK)
  -            log2(ctx, NOTICE,  "%s %s", errorstring, "succeeded");
  +            logbook(ctx->l2, L2_LEVEL_NOTICE,  "%s %s", errorstring, "succeeded");
           else if(bSuccess == NNTP_DEFER)
  -            log2(ctx, WARNING, "%s %s", errorstring, "deferred");
  +            logbook(ctx->l2, L2_LEVEL_WARNING, "%s %s", errorstring, "deferred");
           else
  -            log2(ctx, ERROR,   "%s %s", errorstring, "failed");
  +            logbook(ctx->l2, L2_LEVEL_ERROR,   "%s %s", errorstring, "failed");
       }
   
   
  @@ -1601,7 +1597,7 @@
        */
       rcpt = NULL;
       while ((rcpt = argz_next(ctx->msg->azRcpt, ctx->msg->asRcpt, rcpt)) != NULL) {
  -        log1(ctx, DEBUG, "ctx->option_operationmode=%d", ctx->option_operationmode);
  +        logbook(ctx->l2, L2_LEVEL_DEBUG, "ctx->option_operationmode=%d", ctx->option_operationmode);
           if (ctx->option_operationmode == OPERATIONMODE_FAKE) {
                       res.statuscode = ctx->option_operationmodefakestatus;
                       res.dsncode    = ctx->option_operationmodefakedsn;
  @@ -1668,7 +1664,7 @@
       lmtp_res_t res;
       lmtp_rc_t rc = LMTP_OK;
   
  -    log1(ctx, INFO, "LMTP service executing NOOP command < %s", req->msg);
  +    logbook(ctx->l2, L2_LEVEL_INFO, "LMTP service executing NOOP command < %s", req->msg);
   
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   250 Requested mail action okay, completed
        *  RFC1893 2. Status Codes                         2.X.X   Success
  @@ -1687,7 +1683,7 @@
       lmtp_res_t res;
       lmtp_rc_t rc = LMTP_OK;
   
  -    log1(ctx, INFO, "LMTP service executing RSET command < %s", req->msg);
  +    logbook(ctx->l2, L2_LEVEL_INFO, "LMTP service executing RSET command < %s", req->msg);
   
       lmtp_gfs_rset(ctx);
   
  @@ -1704,7 +1700,7 @@
   
   static void lmtp_gfs_rset(lmtp2nntp_t *ctx)
   {
  -    log0(ctx, TRACE, "LMTP service RSET command - graceful shutdown");
  +    logbook(ctx->l2, L2_LEVEL_TRACE, "LMTP service RSET command - graceful shutdown");
   
       if (ctx->msg != NULL) {
           msg_destroy(ctx->msg);
  @@ -1718,7 +1714,7 @@
       lmtp_res_t res;
       lmtp_rc_t rc = LMTP_EOF;
   
  -    log1(ctx, INFO, "LMTP service executing QUIT command < %s", req->msg);
  +    logbook(ctx->l2, L2_LEVEL_INFO, "LMTP service executing QUIT command < %s", req->msg);
   
       lmtp_gfs_quit(ctx);
   
  @@ -1735,7 +1731,7 @@
   
   static void lmtp_gfs_quit(lmtp2nntp_t *ctx)
   {
  -    log0(ctx, TRACE, "LMTP service QUIT command - graceful shutdown");
  +    logbook(ctx->l2, L2_LEVEL_TRACE, "LMTP service QUIT command - graceful shutdown");
   
       lmtp_gfs_rset(ctx);
       resetsession(&ctx->session);
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 lmtp2nntp_msg.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	26 Feb 2002 15:56:08 -0000	1.3
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	13 Mar 2002 14:41:13 -0000	1.4
  @@ -29,6 +29,7 @@
   
   #include "lmtp2nntp_msg.h"
   #include "lmtp2nntp_argz.h"
  +#include "fixme.h" //FIMXE logbook only
   
   #include "str.h"
   
  @@ -136,14 +137,14 @@
        * header information.
        */
   
  -    log0(msg, DEBUG, "split message into header and body");
  +    logbook(msg->l2, L2_LEVEL_DEBUG, "split message into header and body");
       if (str_parse(msg->cpMsg, "m/((?:.*?)\\n)\\n(.*)$/s", &cpHeaders, &msg->cpBody) <= 0)
           return MSG_ERR_SPLITHEADBODY;
   
       free(msg->cpMsg);
       msg->cpMsg = NULL;
   
  -    log0(msg, DEBUG, "replace envelope From w/o colon by X-F: pseudotag");
  +    logbook(msg->l2, L2_LEVEL_DEBUG, "replace envelope From w/o colon by X-F: pseudotag");
       /* This eliminates the special case of having one header, which is really
        * an embedded envelope, not ending with a colon while all others do.
        * After splitting headers into name and value pairs this envelope ist
  @@ -152,14 +153,14 @@
       if (strncasecmp(cpHeaders, "From", 4) == 0)
           memcpy(cpHeaders, "X-F:", 4);
   
  -    log0(msg, DEBUG, "unwrap header lines");
  +    logbook(msg->l2, L2_LEVEL_DEBUG, "unwrap header lines");
       /* poor man's s///g simulator as current str library doesn't support global substitution */
       while (str_parse(cpHeaders, "s/(.*?)\\n[ \\t]+(.*)/$1 $2/s", &cpRem) > 0) {
           free(cpHeaders);
           cpHeaders = cpRem;
       }
   
  -    log0(msg, DEBUG, "split header lines into names and values");
  +    logbook(msg->l2, L2_LEVEL_DEBUG, "split header lines into names and values");
       while (str_parse(cpHeaders, "m/^[> \\t]*([\\x21-\\x7e]+?:)[ \\t]*([^\\n]*?)[ \\t]*\\n(.*)/s", &cpName, &cpValue, &cpRem) > 0) {
           free(cpHeaders);
           cpHeaders = cpRem;
  @@ -169,13 +170,13 @@
           free(cpValue);
       }
   
  -    log0(msg, DEBUG, "check for headers we care about and do whatever neccessary");
  +    logbook(msg->l2, L2_LEVEL_DEBUG, "check for headers we care about and do whatever neccessary");
       msg->cpMsgid = NULL;
       msg->azNewsgroups = NULL;
       msg->asNewsgroups = 0;
       cp = msg->azHeaders;
       while (cp != NULL) {
  -        log1(msg, DEBUG, "processing header \"%s\"", cp);
  +        logbook(msg->l2, L2_LEVEL_DEBUG, "processing header \"%s\"", cp);
           if (strcasecmp("X-F:", cp) == 0) {
               argz_delete(&msg->azHeaders, &msg->asHeaders, cp);             /* del  name  */
               argz_delete(&msg->azHeaders, &msg->asHeaders, cp);             /* del  value */
  @@ -190,7 +191,7 @@
               argz_delete(&msg->azHeaders, &msg->asHeaders, cp);             /* del  name  */
               if ((msg->cpFid == NULL) &&
                   (str_parse(cp, "m/\\sid\\s+<?([\\w\\d]{1,30})/i", &msg->cpFid) > 0))
  -                    log1(msg, DEBUG, "found foreign-ID \"%s\" for logging", msg->cpFid);
  +                    logbook(msg->l2, L2_LEVEL_DEBUG, "found foreign-ID \"%s\" for logging", msg->cpFid);
               argz_delete(&msg->azHeaders, &msg->asHeaders, cp);             /* del  value */
               continue;
           }
  @@ -228,22 +229,22 @@
               break;
       }
   
  -    log0(msg, DEBUG, "checking Message-ID");
  +    logbook(msg->l2, L2_LEVEL_DEBUG, "checking Message-ID");
       if (msg->cpMsgid == NULL)
           return MSG_ERR_SPLITIDNONE;
   
  -    log0(msg, DEBUG, "checking Newsgroups");
  +    logbook(msg->l2, L2_LEVEL_DEBUG, "checking Newsgroups");
       if (msg->azNewsgroups != NULL) {
           argz_stringify(msg->azNewsgroups, msg->asNewsgroups, ',');
           if (argz_create_sep(msg->azNewsgroups, ',', &msg->azNewsgroups, &msg->asNewsgroups) != 0)
               return MSG_ERR_MEM;
       }
   
  -    log0(msg, DEBUG, "adding mandatory Path: header");
  +    logbook(msg->l2, L2_LEVEL_DEBUG, "adding mandatory Path: header");
       argz_add(&msg->azHeaders, &msg->asHeaders, "Path:");
       argz_add(&msg->azHeaders, &msg->asHeaders, "lmtp2nntp!not-for-mail");
   
  -    log0(msg, DEBUG, "split complete");
  +    logbook(msg->l2, L2_LEVEL_DEBUG, "split complete");
       return MSG_OK;
   }
   
  @@ -263,7 +264,7 @@
       char        *azNewheaders;
       size_t       asNewheaders;
   
  -    log0(msg, DEBUG, "verify Newsgroups");
  +    logbook(msg->l2, L2_LEVEL_DEBUG, "verify Newsgroups");
       if (msg->azNewsgroups == NULL)
           return MSG_ERR_JOINGROUPNONE;
       argz_stringify(msg->azNewsgroups, msg->asNewsgroups, ',');
  @@ -272,7 +273,7 @@
       argz_add(&msg->azHeaders, &msg->asHeaders, "Newsgroups:");
       argz_add(&msg->azHeaders, &msg->asHeaders, msg->azNewsgroups);
   
  -    log0(msg, DEBUG, "verify Message-ID");
  +    logbook(msg->l2, L2_LEVEL_DEBUG, "verify Message-ID");
       if (msg->cpMsgid == NULL)
           return MSG_ERR_JOINIDNONE;
       if (strlen(msg->cpMsgid) == 0)
  @@ -280,7 +281,7 @@
       argz_add(&msg->azHeaders, &msg->asHeaders, "Message-ID:");
       argz_add(&msg->azHeaders, &msg->asHeaders, msg->cpMsgid);
   
  -    log0(msg, DEBUG, "merge name/value pairs into single string");
  +    logbook(msg->l2, L2_LEVEL_DEBUG, "merge name/value pairs into single string");
       argz_add(&msg->azHeaders, &msg->asHeaders, ""); /* append empty string */
       if ((aHeaders = (char **)malloc((argz_count(msg->azHeaders, msg->asHeaders) + 1) * sizeof(char *))) == NULL)
           return MSG_ERR_MEM;
  @@ -298,7 +299,7 @@
       }
       free(aHeaders);
   
  -    log0(msg, DEBUG, "fold headers");
  +    logbook(msg->l2, L2_LEVEL_DEBUG, "fold headers");
       /* A logical line is split into one or more physical '\n'-terminated
        * lines. The physical line is never longer than WRAPAT characters. This
        * includes the folded data and the header name + colon + space for the
  @@ -348,19 +349,19 @@
                   strcat(cpWrap, cpRem);
               }
               argz_add(&azNewheaders, &asNewheaders, cpWrap);
  -            log2(msg, DEBUG, "a folded header \"%{text}D\"", cpWrap, strlen(cpWrap));
  +            logbook(msg->l2, L2_LEVEL_DEBUG, "a folded header \"%{text}D\"", cpWrap, strlen(cpWrap));
               free(cpWrap);
           }
           else {
               argz_add(&azNewheaders, &asNewheaders, cp);
  -            log2(msg, DEBUG, "verbatim header \"%{text}D\"", cp, strlen(cp));
  +            logbook(msg->l2, L2_LEVEL_DEBUG, "verbatim header \"%{text}D\"", cp, strlen(cp));
           }
       }
       free(msg->azHeaders);
       msg->azHeaders = azNewheaders;
       msg->asHeaders = asNewheaders;
   
  -    log0(msg, DEBUG, "strigify headers");
  +    logbook(msg->l2, L2_LEVEL_DEBUG, "strigify headers");
       argz_stringify(msg->azHeaders, msg->asHeaders, '\n');
       cpHeaders = msg->azHeaders;
   
  @@ -368,7 +369,7 @@
        * header + CRLF + body + '.' + CRLF + NUL, replacing NL with CRLF *
        ********************************************************************/
   
  -    log0(msg, DEBUG, "assemble header and body");
  +    logbook(msg->l2, L2_LEVEL_DEBUG, "assemble header and body");
       n = 0;
       /* count size of headers, reserve space for NL to CRLF conversion */
       for (i = 0; ((c = cpHeaders[i]) != NUL); i++) {
  @@ -436,7 +437,7 @@
       msg->cpMsg[n++] = '\n';
       msg->cpMsg[n]   = NUL;
   
  -    log0(msg, DEBUG, "join complete");
  +    logbook(msg->l2, L2_LEVEL_DEBUG, "join complete");
       return MSG_OK;
   }
   

From ossp-cvs-owner@ossp.org  Wed Mar 13 15:49:40 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DA7377642C; Wed, 13 Mar 2002 15:49:39 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_file.c
Message-Id: <20020313144939.DA7377642C@mail.ossp.org>
Date: Wed, 13 Mar 2002 15:49:39 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   13-Mar-2002 15:49:39
  Branch: HEAD                             Handle: 2002031314493900

  Modified files:
    ossp-pkg/l2             l2_ch_file.c

  Log:
    not append means truncate

  Summary:
    Revision    Changes     Path
    1.22        +2  -0      ossp-pkg/l2/l2_ch_file.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_file.c
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 l2_ch_file.c
  --- ossp-pkg/l2/l2_ch_file.c	2 Jan 2002 17:07:38 -0000	1.21
  +++ ossp-pkg/l2/l2_ch_file.c	13 Mar 2002 14:49:39 -0000	1.22
  @@ -95,6 +95,8 @@
       mode = O_WRONLY|O_CREAT;
       if (cfg->append)
           mode |= O_APPEND;
  +    else
  +        mode |= O_TRUNC;
       if ((cfg->fd = open(cfg->path, mode, cfg->perm)) == -1)
           return L2_ERR_SYS;
   

From ossp-cvs-owner@ossp.org  Wed Mar 13 15:50:37 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C93F97642C; Wed, 13 Mar 2002 15:50:37 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c
Message-Id: <20020313145037.C93F97642C@mail.ossp.org>
Date: Wed, 13 Mar 2002 15:50:37 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   13-Mar-2002 15:50:37
  Branch: HEAD                             Handle: 2002031314503700

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c

  Log:
    since env exists, default is there; l2_spec sets channel_levels

  Summary:
    Revision    Changes     Path
    1.68        +4  -4      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.67 -r1.68 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	13 Mar 2002 14:41:13 -0000	1.67
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	13 Mar 2002 14:50:37 -0000	1.68
  @@ -126,6 +126,10 @@
           fprintf(stderr, "%s:Error: failed to create L2 environment\n", ctx->progname);
           CU(ERR_EXECUTION);
       }
  +    if (l2_env_levels(ctx->l2_env, L2_LEVEL_ALL, L2_LEVEL_NONE) != L2_OK) {
  +        fprintf(stderr, "%s:Error: logging failed to set global logging level defaults\n", ctx->progname);
  +        CU(ERR_EXECUTION);
  +    }
       if (l2_env_formatter(ctx->l2_env, 'P', formatter_prefix, &ctx->ctx) != L2_OK) {
           fprintf(stderr, "%s:Error: logging failed to register prefix formatter\n", ctx->progname);
           CU(ERR_EXECUTION);
  @@ -168,10 +172,6 @@
           }
           if (l2_channel_link(ctx->l2, L2_LINK_CHILD, ch, NULL) != L2_OK) {
               fprintf(stderr, "%s:Error: logging failed to link child channel\n", ctx->progname);
  -            CU(ERR_EXECUTION);
  -        }
  -        if (l2_channel_levels(ctx->l2, L2_LEVEL_ALL, L2_LEVEL_NONE) != L2_OK) { /* FIXME should this globalmask and flushmask be user-configurable? */
  -            fprintf(stderr, "%s:Error: logging failed to set global logging level\n", ctx->progname);
               CU(ERR_EXECUTION);
           }
           if (l2_channel_open(ctx->l2) != L2_OK) {

From ossp-cvs-owner@ossp.org  Wed Mar 13 16:32:59 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3C7ED7642C; Wed, 13 Mar 2002 16:32:59 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_main.c
Message-Id: <20020313153259.3C7ED7642C@mail.ossp.org>
Date: Wed, 13 Mar 2002 16:32:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   13-Mar-2002 16:32:59
  Branch: HEAD                             Handle: 2002031315325800

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_main.c

  Log:
    corrected some variables, reduced FIXMEs

  Summary:
    Revision    Changes     Path
    1.51        +8  -8      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.50 -r1.51 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	13 Mar 2002 14:41:13 -0000	1.50
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	13 Mar 2002 15:32:58 -0000	1.51
  @@ -816,15 +816,15 @@
       do {
           logbook(ctx->l2, L2_LEVEL_DEBUG, "trying ns[%d]", i);
           bOk = TRUE;
  -        logbook(ctx->l2, L2_LEVEL_TRACE, "try ${option.destination}[%d]", i); //FIXME
  +        logbook(ctx->l2, L2_LEVEL_TRACE, "try ${option.destination[%d]}", i);
   
           ctx->pns[i].l2 = ctx->l2;
   
           if (bOk && (ctx->saaClientbind != NULL)) {
  -            logbook(ctx->l2, L2_LEVEL_DEBUG, "bind local socket to ${option.clientbind}"); //FIXME
  +            logbook(ctx->l2, L2_LEVEL_DEBUG, "bind local socket to ${option.client}");
               if (sa_bind(ctx->pns[i].sa, ctx->saaClientbind) != SA_OK) {
                   bOk = FALSE;
  -                logbook(ctx->l2, L2_LEVEL_ERROR, "binding NNTP client to local address ${option.clientbind} failed, %m"); //FIXME
  +                logbook(ctx->l2, L2_LEVEL_ERROR, "binding NNTP client to local address ${option.client} failed, %m");
               }
           }
   
  @@ -837,7 +837,7 @@
               logbook(ctx->l2, L2_LEVEL_DEBUG, "connect");
               if (sa_connect(ctx->pns[i].sa, ctx->pns[i].saa) != SA_OK) {
                   bOk = FALSE;
  -                logbook(ctx->l2, L2_LEVEL_WARNING, "connect to ${option.destination}[%d] failed, %m", i); //FIXME
  +                logbook(ctx->l2, L2_LEVEL_WARNING, "connect to ${option.destination[%d]} failed, %m", i);
               }
           }
   
  @@ -861,11 +861,11 @@
           }
   
           if (bOk) {
  -            logbook(ctx->l2, L2_LEVEL_INFO, "NNTP session to ${option.destination}[%d] successfully established", i); //FIXME
  +            logbook(ctx->l2, L2_LEVEL_INFO, "NNTP session to ${option.destination[%d]} successfully established", i);
               i++;
           }
           else {
  -            logbook(ctx->l2, L2_LEVEL_WARNING, "NNTP session establishment to ${option.destination}[%d] failed", i); //FIXME
  +            logbook(ctx->l2, L2_LEVEL_WARNING, "NNTP session establishment to ${option.destination[%d]} failed", i);
               logbook(ctx->l2, L2_LEVEL_DEBUG, "FIXME-CURRENTLY-NOT removing ns[%d] from list", i);
               lmtp_gfs_ns(&ctx->pns[i]);
               /*FIXME #1 this code is a leftover from the static ns array with nsc counter
  @@ -1631,8 +1631,8 @@
           for (i = 0; i < ctx->nns; i++) {
               if (ctx->pns[i].rc != NNTP_OK) {
                   str_format(errorstring, sizeof(errorstring), 
  -                "${option.destination}[%d] returned %s\n" /*FIXME*/
  -                "${option.destination}[%d] lastresp \"%s\"",  /*FIXME*/
  +                "${option.destination[%d]} returned %s\n"
  +                "${option.destination[%d]} lastresp \"%s\"",
                   i, nntp_error(ctx->pns[i].rc), 
                   i, nntp_lastresp(ctx->pns[i].nntp));
                   argz_add(&azErr, &asErr, errorstring);

From ossp-cvs-owner@ossp.org  Wed Mar 13 17:22:10 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E7A457642C; Wed, 13 Mar 2002 17:22:09 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c lmtp2nntp_l2.c lmtp2...
Message-Id: <20020313162209.E7A457642C@mail.ossp.org>
Date: Wed, 13 Mar 2002 17:22:09 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   13-Mar-2002 17:22:09
  Branch: HEAD                             Handle: 2002031316220900

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c lmtp2nntp_l2.c lmtp2nntp_main.c

  Log:
    flush while looking for the var_expand reentrance problem

  Summary:
    Revision    Changes     Path
    1.69        +1  -0      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.2         +6  -0      ossp-pkg/lmtp2nntp/lmtp2nntp_l2.c
    1.52        +6  -3      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.68 -r1.69 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	13 Mar 2002 14:50:37 -0000	1.68
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	13 Mar 2002 16:22:09 -0000	1.69
  @@ -183,6 +183,7 @@
        * should not be used in the remainder of the program flow.
        */
       logbook(ctx->l2, L2_LEVEL_NOTICE, "startup, version %s", lmtp2nntp_version.v_gnu);
  +    //logbook(ctx->l2, L2_LEVEL_NOTICE, "FIXME>>>${option.destination[0]}<<<FIXME>>>${option.destination[1]}<<<");
   
       /* --version FLAG */
       try {
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_l2.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 lmtp2nntp_l2.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_l2.c	13 Mar 2002 13:58:39 -0000	1.1
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_l2.c	13 Mar 2002 16:22:09 -0000	1.2
  @@ -85,10 +85,16 @@
       if (cfg->var == NULL)
           return L2_ERR_ARG;
   
  +/*FIXME for safety until (l2?) bug causing overlapping output is found
  +fprintf(stderr, "FIXME buf=***%s***(%d)\n", buf, buf_size);
  +*/
       /* expand variables */
       if ((var_rc = var_expand(cfg->var, buf, buf_size, &buf2, &buf2_size, FALSE)) != VAR_OK) {
           return L2_ERR_USE;
       }
  +/*FIXME for safety until (l2?) bug causing overlapping output is found
  +fprintf(stderr, "FIXME buf2=***%s***(%d)\n", buf2, buf2_size);
  +*/
   
       /* push data downstream */
       downstream = NULL;
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.51 -r1.52 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	13 Mar 2002 15:32:58 -0000	1.51
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	13 Mar 2002 16:22:09 -0000	1.52
  @@ -122,10 +122,9 @@
       l2_channel_t *ch2 = NULL;
   
       if (strchr(fmt, '$') == NULL) {
  -        if (l2_channel_downstream(ch, &ch2) == L2_OK)
  -            ch = ch2;
  -        else
  +        if (l2_channel_downstream(ch, &ch2) != L2_OK)
               return;
  +        ch = ch2;
       }
       va_start(ap, fmt);
       l2_channel_vlog(ch, level, fmt, ap);
  @@ -155,7 +154,9 @@
       char *cp;
       optionval_t *ov;
   
  +    /*FIXME for safety until (l2?) bug causing overlapping output is found
       logbook(ctx->l2, L2_LEVEL_DEBUG, "ctx_lookup variable \"%s\" (%d)", var_ptr, var_len);
  +    */
   
       rc = VAR_ERR_UNDEFINED_VARIABLE;
       if (strncasecmp(var_ptr, "option.", strlen("option.")) == 0) {
  @@ -214,12 +215,14 @@
           free(cp);
       }
   
  +    /*FIXME for safety until (l2?) bug causing overlapping output is found
       if (rc == VAR_OK) {
           logbook(ctx->l2, L2_LEVEL_DEBUG, "ctx_lookup variable \"%s\" (%d) ok: result is \"%s\" (%d)", var_ptr, var_len, *val_ptr, *val_len);
       }
       else {
           logbook(ctx->l2, L2_LEVEL_DEBUG, "ctx_lookup variable \"%s\" (%d) failed: %s (%d)", var_ptr, var_len, var_strerror(var, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
       }
  +    */
   
       return rc;
   }

From ossp-cvs-owner@ossp.org  Wed Mar 13 17:30:19 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 588727642C; Wed, 13 Mar 2002 17:30:18 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp configure.ac
Message-Id: <20020313163018.588727642C@mail.ossp.org>
Date: Wed, 13 Mar 2002 17:30:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   13-Mar-2002 17:30:18
  Branch: HEAD                             Handle: 2002031316301700

  Modified files:
    ossp-pkg/lmtp2nntp      configure.ac

  Log:
    fix version gathering

  Summary:
    Revision    Changes     Path
    1.25        +1  -1      ossp-pkg/lmtp2nntp/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/configure.ac
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 configure.ac
  --- ossp-pkg/lmtp2nntp/configure.ac	13 Feb 2002 13:18:25 -0000	1.24
  +++ ossp-pkg/lmtp2nntp/configure.ac	13 Mar 2002 16:30:17 -0000	1.25
  @@ -31,7 +31,7 @@
   
   dnl #   announce our version
   AC_DIVERT_PUSH(NOTICE)
  -V=`./shtool version -lc -dlong version.c`
  +V=`./shtool version -lc -dlong lmtp2nntp_version.c`
   ./shtool echo -e "Configuring %BOSSP lmtp2nntp%b, Version %B${V}%b"
   echo "Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>"
   echo "Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>"

From ossp-cvs-owner@ossp.org  Wed Mar 13 17:38:39 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A97457642C; Wed, 13 Mar 2002 17:38:39 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp README lmtp2nntp_version.c
Message-Id: <20020313163839.A97457642C@mail.ossp.org>
Date: Wed, 13 Mar 2002 17:38:39 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   13-Mar-2002 17:38:39
  Branch: HEAD                             Handle: 2002031316383900

  Modified files:
    ossp-pkg/lmtp2nntp      README lmtp2nntp_version.c

  Log:
    Version 1.2a4 (13-Mar-2002)

  Summary:
    Revision    Changes     Path
    1.18        +1  -1      ossp-pkg/lmtp2nntp/README
    1.4         +9  -9      ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/README
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 README
  --- ossp-pkg/lmtp2nntp/README	4 Mar 2002 15:54:28 -0000	1.17
  +++ ossp-pkg/lmtp2nntp/README	13 Mar 2002 16:38:39 -0000	1.18
  @@ -7,7 +7,7 @@
                     |_|                        |_|    
   
     OSSP lmtp2nntp - Mail to News Gateway
  -  Version 1.2a3 (04-Mar-2002)
  +  Version 1.2a4 (13-Mar-2002)
   
     ABSTRACT
   
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 lmtp2nntp_version.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	4 Mar 2002 15:54:28 -0000	1.3
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	13 Mar 2002 16:38:39 -0000	1.4
  @@ -8,7 +8,7 @@
   #ifndef _LMTP2NNTP_VERSION_C_
   #define _LMTP2NNTP_VERSION_C_
   
  -#define LMTP2NNTP_VERSION 0x102003
  +#define LMTP2NNTP_VERSION 0x102004
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _LMTP2NNTP_VERSION_C_AS_HEADER_
   
   lmtp2nntp_version_t lmtp2nntp_version = {
  -    0x102003,
  -    "1.2a3",
  -    "1.2a3 (04-Mar-2002)",
  -    "This is OSSP lmtp2nntp, Version 1.2a3 (04-Mar-2002)",
  -    "OSSP lmtp2nntp 1.2a3 (04-Mar-2002)",
  -    "OSSP lmtp2nntp/1.2a3",
  -    "@(#)OSSP lmtp2nntp 1.2a3 (04-Mar-2002)",
  -    "$Id: lmtp2nntp_version.c,v 1.3 2002/03/04 15:54:28 thl Exp $"
  +    0x102004,
  +    "1.2a4",
  +    "1.2a4 (13-Mar-2002)",
  +    "This is OSSP lmtp2nntp, Version 1.2a4 (13-Mar-2002)",
  +    "OSSP lmtp2nntp 1.2a4 (13-Mar-2002)",
  +    "OSSP lmtp2nntp/1.2a4",
  +    "@(#)OSSP lmtp2nntp 1.2a4 (13-Mar-2002)",
  +    "$Id: lmtp2nntp_version.c,v 1.4 2002/03/13 16:38:39 thl Exp $"
   };
   
   #endif /* _LMTP2NNTP_VERSION_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Wed Mar 13 19:19:39 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D9E027642C; Wed, 13 Mar 2002 19:19:38 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val acconfig.h aclocal.m4 configure.ac devtool.co...
Message-Id: <20020313181938.D9E027642C@mail.ossp.org>
Date: Wed, 13 Mar 2002 19:19:38 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   13-Mar-2002 19:19:38
  Branch: HEAD                             Handle: 197001010100001016039978

  Modified files:
    ossp-pkg/val            aclocal.m4 configure.ac devtool.conf devtool.func
  Removed files:
    ossp-pkg/val            acconfig.h

  Log:
    upgrade build environment to Autoconf 2.53

  Summary:
    Revision    Changes     Path
    NONE        +0  -4      ossp-pkg/val/acconfig.h
    1.5         +14 -7      ossp-pkg/val/aclocal.m4
    1.4         +16 -14     ossp-pkg/val/configure.ac
    1.5         +7  -3      ossp-pkg/val/devtool.conf
    1.2         +2  -1      ossp-pkg/val/devtool.func
  ____________________________________________________________________________

    Index: ossp-pkg/val/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 aclocal.m4
  --- ossp-pkg/val/aclocal.m4	30 Jan 2002 18:55:23 -0000	1.4
  +++ ossp-pkg/val/aclocal.m4	13 Mar 2002 18:19:38 -0000	1.5
  @@ -1,11 +1,11 @@
   dnl ##
  -dnl ##  val - OSSP Value Library
  -dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  OSSP val -- Variable Expansion
  +dnl ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
  -dnl ##  This file is part of OSSP val, a Value library which
  -dnl ##  can be found at http://www.ossp.org/pkg/val/.
  +dnl ##  This file is part of OSSP val, a value access library
  +dnl ##  which can be found at http://www.ossp.org/pkg/lib/val/.
   dnl ##
   dnl ##  Permission to use, copy, modify, and distribute this software for
   dnl ##  any purpose with or without fee is hereby granted, provided that
  @@ -28,6 +28,14 @@
   dnl ##  aclocal.m4: GNU Autoconf local macro definitions
   dnl ##
   
  +AC_DEFUN(EN_PROG_CC,[dnl
  +  AC_PROG_CC
  +  AC_PROG_CC_STDC
  +  if test ".$ac_cv_prog_cc_stdc" = .no; then
  +      AC_MSG_ERROR([require an ANSI/ISO C compliant compiler])
  +  fi
  +])
  +
   dnl ##
   dnl ##  Check whether compiler option works
   dnl ##
  @@ -77,7 +85,6 @@
                 * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
       esac
       AC_COMPILER_OPTION(defdbg, -DDEBUG, -DDEBUG, CFLAGS="$CFLAGS -DDEBUG")
  -    AC_COMPILER_OPTION(ggdb3, -ggdb3, -ggdb3, CFLAGS="$CFLAGS -ggdb3")
       CFLAGS="$CFLAGS -pedantic"
       CFLAGS="$CFLAGS -Wall"
       WMORE="-Wshadow -Wpointer-arith -Wcast-align -Winline"
  Index: ossp-pkg/val/configure.ac
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 configure.ac
  --- ossp-pkg/val/configure.ac	31 Jan 2002 09:09:43 -0000	1.3
  +++ ossp-pkg/val/configure.ac	13 Mar 2002 18:19:38 -0000	1.4
  @@ -28,27 +28,29 @@
   dnl ##  configure.ac: GNU Autoconf source script
   dnl ##
   
  -AC_PREREQ(2.52)
  -AC_REVISION(1.0)
  -AC_INIT(README)
  -
  -AC_DIVERT_PUSH(NOTICE)
  +dnl #   prerequisites, initialization and input control
  +AC_PREREQ(2.53)
  +AC_INIT
   V=`./shtool version -l txt -d long VERSION`
  -./shtool echo -e "Configuring %BOSSP val%b (Value Access), Version %B${V}%b"
  -AC_DIVERT_POP()
  +./shtool echo -e "Configuring %BOSSP val%b (Value Access), version %B${V}%b"
  +AC_CONFIG_SRCDIR(val.h)
   
  -AC_SET_MAKE
  -AC_PROG_CC
  +dnl #   checks for build programs
  +AC_PROG_MAKE_SET
  +EN_PROG_CC
   AC_CHECK_DEBUGGING
  -
   sinclude(libtool.m4)
   AC_PROG_LIBTOOL
   
  -AC_CHECK_EXTLIB([OSSP ex], ex, __ex_ctx, ex.h, [AC_DEFINE(WITH_EX)])
  +dnl #   checks for external libraries
  +AC_CHECK_EXTLIB([OSSP ex], ex, __ex_ctx, ex.h,
  +                [AC_DEFINE(WITH_EX, 1, [Define to 1 if building with OSSP ex])])
  +AC_CHECK_EXTLIB([Dmalloc], dmalloc, dmalloc_debug, dmalloc.h, 
  +                [AC_DEFINE(WITH_DMALLOC, 1, [Define to 1 if building with Dmalloc])])
   
  +dnl #   output generation
   AC_CONFIG_HEADERS(config.h)
  -AC_CONFIG_FILES(Makefile val-config)
  +AC_CONFIG_FILES([Makefile val-config])
  +AC_CONFIG_COMMANDS([adjustment], [chmod a+x val-config])
   AC_OUTPUT
  -
  -chmod a+x val-config
   
  Index: ossp-pkg/val/devtool.conf
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 devtool.conf
  --- ossp-pkg/val/devtool.conf	21 Jan 2002 13:24:27 -0000	1.4
  +++ ossp-pkg/val/devtool.conf	13 Mar 2002 18:19:38 -0000	1.5
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   1.5.4 "1.5.*" all
  +    @autogen shtool   1.6.0 "1.[56].*" all
       @autogen libtool  1.4.2 "1.4*"
  -    @autogen autoconf 2.52  "2.5.*"
  +    @autogen autoconf 2.53  "2.5[3-9]*"
   
   %autoclean
       @autoclean shtool
  @@ -16,11 +16,15 @@
       ./configure \
           --prefix=/tmp/val \
           --disable-shared \
  +        --enable-maintainer \
           --enable-debug \
           "$@"
   
   %version
  -    ./shtool version -l txt -n "OSSP val" -e VERSION
  +    shtool version -l txt -n "OSSP val" -p "val_" -e VERSION
  +    V=`shtool version -l txt -d long VERSION`
  +    sed -e "s/Version .*(.*)/Version $V/g" <README >README.n 
  +    mv README.n README
   
   %dist
       make distclean >/dev/null 2>&1
  Index: ossp-pkg/val/devtool.func
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.func
  --- ossp-pkg/val/devtool.func	9 Jan 2002 10:44:28 -0000	1.1
  +++ ossp-pkg/val/devtool.func	13 Mar 2002 18:19:38 -0000	1.2
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
   ##
   
   devtool_require () {
  @@ -33,6 +33,7 @@
               echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
               autoconf
               autoheader 2>&1 | grep -v "is unchanged"
  +            rm -rf autom4te.cache >/dev/null 2>&1
               ;;
           libtool )
               libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`

From ossp-cvs-owner@ossp.org  Wed Mar 13 19:19:55 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5F8F87643F; Wed, 13 Mar 2002 19:19:55 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var aclocal.m4
Message-Id: <20020313181955.5F8F87643F@mail.ossp.org>
Date: Wed, 13 Mar 2002 19:19:55 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   13-Mar-2002 19:19:55
  Branch: HEAD                             Handle: 2002031318195400

  Modified files:
    ossp-pkg/var            aclocal.m4

  Log:
    fix naming

  Summary:
    Revision    Changes     Path
    1.7         +2  -2      ossp-pkg/var/aclocal.m4
  ____________________________________________________________________________

  Index: ossp-pkg/var/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 aclocal.m4
  --- ossp-pkg/var/aclocal.m4	9 Mar 2002 19:39:57 -0000	1.6
  +++ ossp-pkg/var/aclocal.m4	13 Mar 2002 18:19:54 -0000	1.7
  @@ -1,11 +1,11 @@
   dnl ##
  -dnl ##  OSSP val -- Variable Expansion
  +dnl ##  OSSP var -- Variable Expansion
   dnl ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
   dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP var, a variable expansion
  -dnl ##  which can be found at http://www.ossp.org/pkg/lib/var/.
  +dnl ##  library which can be found at http://www.ossp.org/pkg/lib/var/.
   dnl ##
   dnl ##  Permission to use, copy, modify, and distribute this software for
   dnl ##  any purpose with or without fee is hereby granted, provided that

From ossp-cvs-owner@ossp.org  Wed Mar 13 19:35:59 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BB5AE7642C; Wed, 13 Mar 2002 19:35:59 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val Makefile.in README aclocal.m4 configure.ac va...
Message-Id: <20020313183559.BB5AE7642C@mail.ossp.org>
Date: Wed, 13 Mar 2002 19:35:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   13-Mar-2002 19:35:59
  Branch: HEAD                             Handle: 2002031318355800

  Modified files:
    ossp-pkg/val            Makefile.in README aclocal.m4 configure.ac
                            val-config.in val.c val.h val.pod val_test.c

  Log:
    fix naming and URLs

  Summary:
    Revision    Changes     Path
    1.4         +3  -3      ossp-pkg/val/Makefile.in
    1.3         +15 -6      ossp-pkg/val/README
    1.6         +1  -1      ossp-pkg/val/aclocal.m4
    1.5         +3  -3      ossp-pkg/val/configure.ac
    1.4         +3  -3      ossp-pkg/val/val-config.in
    1.11        +3  -3      ossp-pkg/val/val.c
    1.7         +3  -3      ossp-pkg/val/val.h
    1.10        +15 -15     ossp-pkg/val/val.pod
    1.6         +3  -3      ossp-pkg/val/val_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/val/Makefile.in
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 Makefile.in
  --- ossp-pkg/val/Makefile.in	8 Feb 2002 18:31:57 -0000	1.3
  +++ ossp-pkg/val/Makefile.in	13 Mar 2002 18:35:58 -0000	1.4
  @@ -1,11 +1,11 @@
   ##
  -##  val - OSSP Value Library
  +##  OSSP val - Value Access
   ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
  -##  This file is part of OSSP val, a Value library which
  -##  can be found at http://www.ossp.org/pkg/val/.
  +##  This file is part of OSSP val, a value access library which
  +##  can be found at http://www.ossp.org/pkg/lib/val/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/val/README
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 README
  --- ossp-pkg/val/README	16 Jan 2002 14:09:18 -0000	1.2
  +++ ossp-pkg/val/README	13 Mar 2002 18:35:58 -0000	1.3
  @@ -4,12 +4,21 @@
      \ V / (_| | |
       \_/ \__,_|_|
   
  -  OSSP Val - Value Library
  +  OSSP val -- Value Access
     Version 0.1.0 (16-Jan-2002)
   
     ABSTRACT
   
  -  The OSSP Val library is ...
  +  OSSP val is a flexible name to value mapping library for ISO-C
  +  variables. It allows one to access ISO-C variables through name
  +  strings, although the ISO-C language does neither provide such a
  +  dedicated facility nor an evaluation construct (which could be used to
  +  implement such a facility easily).
  +
  +  In general, this is used for accessing ISO-C variables without
  +  having to know the actual symbol/address. The typical use cases are
  +  in combination with flexible configuration parsing and supporting
  +  loosly-coupled DSO-based module architectures.
   
     COPYRIGHT AND LICENSE
   
  @@ -17,8 +26,8 @@
     Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
     Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   
  -  This file is part of OSSP Val, a caching library which
  -  can be found at http://www.ossp.org/pkg/val/.
  +  This file is part of OSSP val, a value access library which
  +  can be found at http://www.ossp.org/pkg/lib/val/.
   
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
  @@ -42,6 +51,6 @@
   
     The documentation and latest release can be found on
   
  -  o http://www.ossp.org/pkg/val/
  -  o  ftp://ftp.ossp.org/pkg/val/
  +  o http://www.ossp.org/pkg/lib/val/
  +  o  ftp://ftp.ossp.org/pkg/lib/val/
   
  Index: ossp-pkg/val/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 aclocal.m4
  --- ossp-pkg/val/aclocal.m4	13 Mar 2002 18:19:38 -0000	1.5
  +++ ossp-pkg/val/aclocal.m4	13 Mar 2002 18:35:58 -0000	1.6
  @@ -1,5 +1,5 @@
   dnl ##
  -dnl ##  OSSP val -- Variable Expansion
  +dnl ##  OSSP val -- Value Access
   dnl ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
   dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  Index: ossp-pkg/val/configure.ac
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 configure.ac
  --- ossp-pkg/val/configure.ac	13 Mar 2002 18:19:38 -0000	1.4
  +++ ossp-pkg/val/configure.ac	13 Mar 2002 18:35:58 -0000	1.5
  @@ -1,11 +1,11 @@
   dnl ##
  -dnl ##  val - OSSP Value Library
  +dnl ##  OSSP val - Value Access
   dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
   dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
  -dnl ##  This file is part of OSSP val, a Value library which
  -dnl ##  can be found at http://www.ossp.org/pkg/val/.
  +dnl ##  This file is part of OSSP val, a value access library which
  +dnl ##  can be found at http://www.ossp.org/pkg/lib/val/.
   dnl ##
   dnl ##  Permission to use, copy, modify, and distribute this software for
   dnl ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/val/val-config.in
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 val-config.in
  --- ossp-pkg/val/val-config.in	9 Jan 2002 14:10:06 -0000	1.3
  +++ ossp-pkg/val/val-config.in	13 Mar 2002 18:35:58 -0000	1.4
  @@ -1,12 +1,12 @@
   #!/bin/sh
   ##
  -##  val - OSSP Value Library
  +##  OSSP val - Value Access
   ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
  -##  This file is part of OSSP val, a Value library which
  -##  can be found at http://www.ossp.org/pkg/val/.
  +##  This file is part of OSSP val, a value access library which
  +##  can be found at http://www.ossp.org/pkg/lib/val/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/val/val.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 val.c
  --- ossp-pkg/val/val.c	30 Jan 2002 19:31:32 -0000	1.10
  +++ ossp-pkg/val/val.c	13 Mar 2002 18:35:58 -0000	1.11
  @@ -1,11 +1,11 @@
   /*
  -**  val - OSSP Value Library
  +**  OSSP val - Value Access
   **  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
   **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
   **  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
  -**  This file is part of OSSP val, a Value library which
  -**  can be found at http://www.ossp.org/pkg/val/.
  +**  This file is part of OSSP val, a value access library which
  +**  can be found at http://www.ossp.org/pkg/lib/val/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/val/val.h
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 val.h
  --- ossp-pkg/val/val.h	30 Jan 2002 18:55:23 -0000	1.6
  +++ ossp-pkg/val/val.h	13 Mar 2002 18:35:58 -0000	1.7
  @@ -1,11 +1,11 @@
   /*
  -**  val - OSSP Value Library
  +**  OSSP val - Value Access
   **  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
   **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
   **  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
  -**  This file is part of OSSP val, a Value library which
  -**  can be found at http://www.ossp.org/pkg/val/.
  +**  This file is part of OSSP val, a value access library which
  +**  can be found at http://www.ossp.org/pkg/lib/val/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/val/val.pod
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 val.pod
  --- ossp-pkg/val/val.pod	17 Jan 2002 13:26:31 -0000	1.9
  +++ ossp-pkg/val/val.pod	13 Mar 2002 18:35:58 -0000	1.10
  @@ -1,11 +1,11 @@
   ##
  -##  val - OSSP Value Library
  +##  OSSP val - Value Access
   ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
  -##  This file is part of OSSP val, a Value library which
  -##  can be found at http://www.ossp.org/pkg/val/.
  +##  This file is part of OSSP val, a value access library which
  +##  can be found at http://www.ossp.org/pkg/lib/val/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  @@ -32,7 +32,7 @@
   
   =head1 NAME
   
  -B<OSSP val> - Value Library
  +B<OSSP val> - Value Access Library
   
   =head1 SYNOPSIS
   
  @@ -80,16 +80,16 @@
   
   =head1 DESCRIPTION
   
  -B<OSSP val> is a flexible name to value mapping library for C variables.
  -It allows one to access C variables through name strings, although
  -the C language does neither provide such a dedicated facility nor an
  -evaluation construct (which could be used to implement such a facility
  -easily). 
  -
  -In general, this is used for accessing C variables without having to
  -know the actual symbol/address/reference. The typical use cases are
  -in combination with flexible configuration parsing and supporting
  -loosly-coupled DSO-based module architectures.
  +B<OSSP val> is a flexible name to value mapping library for ISO-C
  +variables. It allows one to access ISO-C variables through name strings,
  +although the ISO-C language does neither provide such a dedicated
  +facility nor an evaluation construct (which could be used to implement
  +such a facility easily).
  +
  +In general, this is used for accessing ISO-C variables without having to
  +know the actual symbol/address. The typical use cases are in combination
  +with flexible configuration parsing and supporting loosly-coupled
  +DSO-based module architectures.
   
   =head1 STRUCTURED NAMES
   
  @@ -341,7 +341,7 @@
   =head1 HISTORY
   
   B<OSSP val> was invented in January 2002 by Thomas Lotterer and Ralf S.
  -Engelschall for use inside the OSSP lmtp2nntp project.
  +Engelschall for use with the OSSP lmtp2nntp project.
   
   =head1 AUTHORS
   
  Index: ossp-pkg/val/val_test.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 val_test.c
  --- ossp-pkg/val/val_test.c	30 Jan 2002 18:46:00 -0000	1.5
  +++ ossp-pkg/val/val_test.c	13 Mar 2002 18:35:58 -0000	1.6
  @@ -1,11 +1,11 @@
   /*
  -**  val - OSSP Value Library
  +**  OSSP val - Value Access
   **  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
   **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
   **  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
  -**  This file is part of OSSP val, a Value library which
  -**  can be found at http://www.ossp.org/pkg/val/.
  +**  This file is part of OSSP val, a value access library which
  +**  can be found at http://www.ossp.org/pkg/lib/val/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that

From ossp-cvs-owner@ossp.org  Wed Mar 13 19:39:41 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 506107642C; Wed, 13 Mar 2002 19:39:41 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val AUTHORS NEWS val.pod
Message-Id: <20020313183941.506107642C@mail.ossp.org>
Date: Wed, 13 Mar 2002 19:39:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   13-Mar-2002 19:39:41
  Branch: HEAD                             Handle: 2002031318394000

  Added files:
    ossp-pkg/val            AUTHORS NEWS
  Modified files:
    ossp-pkg/val            val.pod

  Log:
    more source tree polishing

  Summary:
    Revision    Changes     Path
    1.1         +9  -0      ossp-pkg/val/AUTHORS
    1.1         +18 -0      ossp-pkg/val/NEWS
    1.11        +6  -6      ossp-pkg/val/val.pod
  ____________________________________________________________________________

  Index: ossp-pkg/val/AUTHORS
  ============================================================
  $ cvs update -p -r1.1 AUTHORS
  
    AUTHORS
  
    This is a list of authors who have written
    or edited major parts of the OSSP val sources.
  
    Ralf S. Engelschall   <rse@engelschall.com>
    Thomas Lotterer       <thomas.lotterer@cw.com>
  
  Index: ossp-pkg/val/NEWS
  ============================================================
  $ cvs update -p -r1.1 NEWS
                _ 
    __   ____ _| |
    \ \ / / _` | |
     \ V / (_| | |
      \_/ \__,_|_|
  
    OSSP val -- Value Access
  
    NEWS
    ====
  
    This is a list of user-visible and/or major changes to OSSP val.
    For more details please have a look at the ChangeLog file.
  
    Changes between 0.9.0 and 0.9.x (xx-xxx-2002 to xx-xxx-2002)
  
     o ...
  
  Index: ossp-pkg/val/val.pod
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 val.pod
  --- ossp-pkg/val/val.pod	13 Mar 2002 18:35:58 -0000	1.10
  +++ ossp-pkg/val/val.pod	13 Mar 2002 18:39:40 -0000	1.11
  @@ -93,10 +93,10 @@
   
   =head1 STRUCTURED NAMES
   
  -Whenever the APIs calls for a name it supports structured names where elements
  -are separated by a dot. It is assumed that the leading elements are references
  -to other C<val_t> structures and only the very last element is a reference to
  -an actual variable.
  +Whenever the APIs calls for a name, it supports structured names where
  +elements are separated by a dot. It is assumed that the leading elements
  +are references to other C<val_t> structures and only the very last
  +element is a reference to an actual variable.
   
   =head1 API CONSTANTS
   
  @@ -231,7 +231,7 @@
   
   =head1 SEE ALSO
   
  -B<OSSP var> (Variable Expansion Library)
  +B<OSSP var> (Variable Expansion)
   
   =head1 EXAMPLES
   
  @@ -341,7 +341,7 @@
   =head1 HISTORY
   
   B<OSSP val> was invented in January 2002 by Thomas Lotterer and Ralf S.
  -Engelschall for use with the OSSP lmtp2nntp project.
  +Engelschall for use with the B<OSSP lmtp2nntp> project.
   
   =head1 AUTHORS
   

From ossp-cvs-owner@ossp.org  Wed Mar 13 19:41:31 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 13A447642C; Wed, 13 Mar 2002 19:41:31 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val val.c val_test.c
Message-Id: <20020313184131.13A447642C@mail.ossp.org>
Date: Wed, 13 Mar 2002 19:41:31 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   13-Mar-2002 19:41:31
  Branch: HEAD                             Handle: 2002031318413000

  Modified files:
    ossp-pkg/val            val.c val_test.c

  Log:
    add full dmalloc support

  Summary:
    Revision    Changes     Path
    1.12        +5  -0      ossp-pkg/val/val.c
    1.7         +6  -0      ossp-pkg/val/val_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/val/val.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 val.c
  --- ossp-pkg/val/val.c	13 Mar 2002 18:35:58 -0000	1.11
  +++ ossp-pkg/val/val.c	13 Mar 2002 18:41:30 -0000	1.12
  @@ -39,6 +39,11 @@
   #include <stdarg.h>
   #include <string.h>
   
  +/* optional memory debugging support */
  +#if defined(HAVE_DMALLOC_H) && defined(WITH_DMALLOC)
  +#include "dmalloc.h"
  +#endif
  +
   /* include own API header */
   #include "val.h"
   
  Index: ossp-pkg/val/val_test.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 val_test.c
  --- ossp-pkg/val/val_test.c	13 Mar 2002 18:35:58 -0000	1.6
  +++ ossp-pkg/val/val_test.c	13 Mar 2002 18:41:30 -0000	1.7
  @@ -28,8 +28,14 @@
   **  val_test.c: test suite
   */
   
  +#ifdef HAVE_CONFIG_H
  +#include "config.h"
  +#endif
   #include <stdio.h>
   #include <stdlib.h>
  +#if defined(HAVE_DMALLOC_H) && defined(WITH_DMALLOC)
  +#include "dmalloc.h"
  +#endif
   #include "val.h"
   
   static void die(char *msg)

From ossp-cvs-owner@ossp.org  Thu Mar 14 16:12:50 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C8F98763DD; Thu, 14 Mar 2002 16:12:49 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex configure.ac devtool.conf devtool.func
Message-Id: <20020314151249.C8F98763DD@mail.ossp.org>
Date: Thu, 14 Mar 2002 16:12:49 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   14-Mar-2002 16:12:49
  Branch: HEAD                             Handle: 2002031415124900

  Modified files:
    ossp-pkg/ex             configure.ac devtool.conf devtool.func

  Log:
    upgrade to Autoconf 2.53 environment

  Summary:
    Revision    Changes     Path
    1.4         +7  -12     ossp-pkg/ex/configure.ac
    1.6         +2  -2      ossp-pkg/ex/devtool.conf
    1.2         +2  -1      ossp-pkg/ex/devtool.func
  ____________________________________________________________________________

  Index: ossp-pkg/ex/configure.ac
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 configure.ac
  --- ossp-pkg/ex/configure.ac	31 Jan 2002 21:20:44 -0000	1.3
  +++ ossp-pkg/ex/configure.ac	14 Mar 2002 15:12:49 -0000	1.4
  @@ -28,26 +28,21 @@
   dnl ##  configure.ac: GNU Autoconf source script
   dnl ##
   
  -AC_PREREQ(2.52)
  -AC_REVISION(1.0)
  -AC_INIT(README)
  -
  -AC_DIVERT_PUSH(NOTICE)
  +AC_PREREQ(2.53)
  +AC_INIT
   EX_VERSION_STR=`./shtool version -l txt -d long VERSION`
  -./shtool echo -e "Configuring %BOSSP ex%b (Exception Handling), Version %B${EX_VERSION_STR}%b"
  +./shtool echo -e "Configuring %BOSSP ex%b (Exception Handling), version %B${EX_VERSION_STR}%b"
   AC_SUBST(EX_VERSION_STR)
  -AC_DIVERT_POP()
  +AC_CONFIG_SRCDIR(ex.h)
   
  -AC_SET_MAKE
  +AC_PROG_MAKE_SET
   AC_PROG_CC
   AC_CHECK_DEBUGGING
  -
   sinclude(libtool.m4)
   AC_PROG_LIBTOOL
   
   AC_CONFIG_HEADERS(config.h)
  -AC_CONFIG_FILES(Makefile ex-config)
  +AC_CONFIG_FILES([Makefile ex-config])
  +AC_CONFIG_COMMANDS([adjustment], [chmod a+x ex-config])
   AC_OUTPUT
  -
  -chmod a+x ex-config
   
  Index: ossp-pkg/ex/devtool.conf
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 devtool.conf
  --- ossp-pkg/ex/devtool.conf	31 Jan 2002 21:07:26 -0000	1.5
  +++ ossp-pkg/ex/devtool.conf	14 Mar 2002 15:12:49 -0000	1.6
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   1.5.4 "1.5.*" all
  +    @autogen shtool   1.6.0 "1.6.*" all
       @autogen libtool  1.4.2 "1.4*"
  -    @autogen autoconf 2.52  "2.5.*"
  +    @autogen autoconf 2.53  "2.5[3-9]*"
   
   %autoclean
       @autoclean shtool
  Index: ossp-pkg/ex/devtool.func
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.func
  --- ossp-pkg/ex/devtool.func	26 Jan 2002 20:12:19 -0000	1.1
  +++ ossp-pkg/ex/devtool.func	14 Mar 2002 15:12:49 -0000	1.2
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
   ##
   
   devtool_require () {
  @@ -33,6 +33,7 @@
               echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
               autoconf
               autoheader 2>&1 | grep -v "is unchanged"
  +            rm -rf autom4te.cache >/dev/null 2>&1
               ;;
           libtool )
               libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`

From ossp-cvs-owner@ossp.org  Thu Mar 14 16:29:24 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C93E1763DD; Thu, 14 Mar 2002 16:29:23 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 acconfig.h aclocal.m4 configure.ac devtool.con...
Message-Id: <20020314152923.C93E1763DD@mail.ossp.org>
Date: Thu, 14 Mar 2002 16:29:23 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   14-Mar-2002 16:29:23
  Branch: LMTP2NNTP_1_2a4, HEAD            Handle: 197001010100001016116163

  Modified files:
    ossp-pkg/l2             aclocal.m4 configure.ac devtool.conf devtool.func
                            l2_ut_sa.ac
  Removed files:            (Branch: LMTP2NNTP_1_2a4)
    ossp-pkg/l2             acconfig.h

  Log:
    upgrade to Autoconf 2.53 environment

  Summary:
    Revision    Changes     Path
    NONE        +0  -11     ossp-pkg/l2/acconfig.h
    1.11        +0  -2      ossp-pkg/l2/aclocal.m4
    1.20        +10 -15     ossp-pkg/l2/configure.ac
    1.3         +3  -3      ossp-pkg/l2/devtool.conf
    1.3         +1  -0      ossp-pkg/l2/devtool.func
    1.5         +1  -1      ossp-pkg/l2/l2_ut_sa.ac
  ____________________________________________________________________________

    Index: ossp-pkg/l2/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 aclocal.m4
  --- ossp-pkg/l2/aclocal.m4	2 Jan 2002 17:07:38 -0000	1.10
  +++ ossp-pkg/l2/aclocal.m4	14 Mar 2002 15:29:23 -0000	1.11
  @@ -59,7 +59,6 @@
   dnl ##
   
   AC_DEFUN(AC_HEADLINE,[dnl
  -AC_DIVERT_PUSH(NOTICE)dnl
   #   configuration header
   if test ".`echo dummy [$]@ | grep help`" = .; then
       #   bootstrapping shtool
  @@ -88,7 +87,6 @@
       $3_HEX="`$ac_shtool version -l c -d hex $ac_srcdir/$4`"
       AC_SUBST($3_HEX)
   fi
  -AC_DIVERT_POP()
   ])dnl
   
   dnl ##
  Index: ossp-pkg/l2/configure.ac
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 configure.ac
  --- ossp-pkg/l2/configure.ac	30 Jan 2002 19:28:42 -0000	1.19
  +++ ossp-pkg/l2/configure.ac	14 Mar 2002 15:29:23 -0000	1.20
  @@ -27,20 +27,17 @@
   dnl ##  configure.in: Autoconf specification
   dnl ##
   
  -AC_PREREQ(2.52)dnl
  -AC_REVISION(1.0)
  -
  -AC_INIT(README)
  +AC_PREREQ(2.53)
  +AC_INIT
   AC_HEADLINE(dnl
   OSSP l2, Logging Library, dnl
   L2_VERSION, l2_version.c, dnl
   [Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)])
  -AC_CONFIG_HEADER(l2_config.h)
   AC_PREFIX_DEFAULT(/usr/local)
   AC_PLATFORM(PLATFORM)
   
  -AC_SET_MAKE
  +AC_PROG_MAKE_SET
   AC_PROG_CC
   AC_PROG_CPP
   AC_CHECK_DEBUGGING
  @@ -80,20 +77,18 @@
   
   case $PLATFORM in
       *-*-solaris2.[[6-8]]* )
  -        AC_DEFINE(HAVE_VSYSLOG_USVALIST)
  +        AC_DEFINE(HAVE_VSYSLOG_USVALIST, 1, [Define to 1 if vsyslog has underscored va_list])
           ;;
   esac
   
   sinclude(l2_ut_sa.ac)
   SA_CHECK_ALL
   
  -AC_CHECK_EXTLIB([Dmalloc], dmalloc, dmalloc_debug, dmalloc.h, AC_DEFINE(WITH_DMALLOC))
  +AC_CHECK_EXTLIB([Dmalloc], dmalloc, dmalloc_debug, dmalloc.h, 
  +                [AC_DEFINE(WITH_DMALLOC, 1, [Define to 1 if building with Dmalloc])])
   
  -AC_OUTPUT(dnl
  -Makefile dnl
  -l2.h dnl
  -l2-config dnl
  -,dnl
  -chmod a+x l2-config
  -)dnl
  +AC_CONFIG_HEADERS(l2_config.h)
  +AC_CONFIG_FILES([Makefile l2.h l2-config])
  +AC_CONFIG_COMMANDS([adjustment], [chmod a+x l2-config])
  +AC_OUTPUT
   
  Index: ossp-pkg/l2/devtool.conf
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.conf
  --- ossp-pkg/l2/devtool.conf	8 Nov 2001 20:28:22 -0000	1.2
  +++ ossp-pkg/l2/devtool.conf	14 Mar 2002 15:29:23 -0000	1.3
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   1.5.4 "1.5.*" all
  +    @autogen shtool   1.6.0 "1.6.*" all
       @autogen libtool  1.4.2 "1.4*"
  -    @autogen autoconf 2.52  "2.5.*"
  +    @autogen autoconf 2.53  "2.5[3-9]*"
   
   %autoclean
       @autoclean shtool
  @@ -21,7 +21,7 @@
           "$@"
   
   %version
  -    ./shtool version -l c -n "OSSP L2" -p "l2_" -e l2_version.c
  +    ./shtool version -l c -n "OSSP l2" -p "l2_" -e l2_version.c
   
   %dist
       make distclean >/dev/null 2>&1
  Index: ossp-pkg/l2/devtool.func
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.func
  --- ossp-pkg/l2/devtool.func	2 Jan 2002 17:07:38 -0000	1.2
  +++ ossp-pkg/l2/devtool.func	14 Mar 2002 15:29:23 -0000	1.3
  @@ -33,6 +33,7 @@
               echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
               autoconf
               autoheader 2>&1 | grep -v "is unchanged"
  +            rm -rf autom4te.cache >/dev/null 2>&1
               ;;
           libtool )
               libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
  Index: ossp-pkg/l2/l2_ut_sa.ac
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 l2_ut_sa.ac
  --- ossp-pkg/l2/l2_ut_sa.ac	26 Oct 2001 10:59:47 -0000	1.4
  +++ ossp-pkg/l2/l2_ut_sa.ac	14 Mar 2002 15:29:23 -0000	1.5
  @@ -49,7 +49,7 @@
       ])dnl
       AC_MSG_RESULT($ac_cv_typedef_$1)
       if test $ac_cv_typedef_$1 = yes; then
  -        AC_DEFINE(HAVE_[]translit($1, [a-z], [A-Z]))
  +        AC_DEFINE(HAVE_[]translit($1, [a-z], [A-Z]), 1, [Define to 1 if $1 exists])
       fi
   ])
   

From ossp-cvs-owner@ossp.org  Thu Mar 14 16:32:49 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4273A763DD; Thu, 14 Mar 2002 16:32:49 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pcre configure.ac devtool.conf devtool.func
Message-Id: <20020314153249.4273A763DD@mail.ossp.org>
Date: Thu, 14 Mar 2002 16:32:49 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   14-Mar-2002 16:32:49
  Branch: HEAD                             Handle: 2002031415324800

  Modified files:
    ossp-pkg/pcre           configure.ac devtool.conf devtool.func

  Log:
    upgrade to Autoconf 2.53 environment

  Summary:
    Revision    Changes     Path
    1.3         +7  -13     ossp-pkg/pcre/configure.ac
    1.2         +2  -2      ossp-pkg/pcre/devtool.conf
    1.2         +1  -0      ossp-pkg/pcre/devtool.func
  ____________________________________________________________________________

  Index: ossp-pkg/pcre/configure.ac
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 configure.ac
  --- ossp-pkg/pcre/configure.ac	7 Jan 2002 14:51:32 -0000	1.2
  +++ ossp-pkg/pcre/configure.ac	14 Mar 2002 15:32:48 -0000	1.3
  @@ -2,9 +2,8 @@
   dnl ##   Autoconf specification for PCRE library
   dnl ##
   
  -AC_PREREQ(2.52)dnl
  -AC_REVISION($Revision: 1.2 $)
  -AC_INIT(README)
  +AC_PREREQ(2.53)
  +AC_INIT
   
   SHTOOL="./shtool"
   AC_SUBST(SHTOOL)
  @@ -19,12 +18,9 @@
   echo "Copyright (c) 1997-2002 University of Cambridge, All rights reserved."
   echo "Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>"
   
  -AC_CONFIG_HEADER(config.h)
  -AC_PREFIX_DEFAULT(/usr/local)
  -
  +AC_PROG_MAKE_SET
   AC_PROG_CC
   AC_PROG_CPP
  -AC_SET_MAKE
   
   AC_ARG_ENABLE(utf8,dnl
   [  --enable-utf8           enable UTF8 support (incomplete)],
  @@ -44,10 +40,8 @@
   sinclude(libtool.m4)
   AC_PROG_LIBTOOL
   
  -AC_OUTPUT(dnl
  -Makefile dnl
  -pcre-config dnl
  -,dnl
  -chmod a+x pcre-config
  -)dnl
  +AC_CONFIG_HEADERS(config.h)
  +AC_CONFIG_FILES([Makefile pcre-config])
  +AC_CONFIG_COMMANDS([adjustment], [chmod a+x pcre-config])
  +AC_OUTPUT
   
  Index: ossp-pkg/pcre/devtool.conf
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.conf
  --- ossp-pkg/pcre/devtool.conf	7 Jan 2002 14:51:32 -0000	1.1
  +++ ossp-pkg/pcre/devtool.conf	14 Mar 2002 15:32:48 -0000	1.2
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   1.5.4 "1.5.*" echo install mkdir fixperm tarball
  +    @autogen shtool   1.6.0 "1.6.*" echo install mkdir fixperm tarball
       @autogen libtool  1.4.2 "1.4*"
  -    @autogen autoconf 2.52  "2.5.*"
  +    @autogen autoconf 2.53  "2.5[3-9]*"
   
   %autoclean
       @autoclean shtool
  Index: ossp-pkg/pcre/devtool.func
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.func
  --- ossp-pkg/pcre/devtool.func	7 Jan 2002 14:51:32 -0000	1.1
  +++ ossp-pkg/pcre/devtool.func	14 Mar 2002 15:32:48 -0000	1.2
  @@ -33,6 +33,7 @@
               echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
               autoconf
               autoheader 2>&1 | grep -v "is unchanged"
  +            rm -rf autom4te.cache >/dev/null 2>&1
               ;;
           libtool )
               libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`

From ossp-cvs-owner@ossp.org  Thu Mar 14 16:34:44 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9103A763DD; Thu, 14 Mar 2002 16:34:44 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/popt configure.ac devtool.conf devtool.func
Message-Id: <20020314153444.9103A763DD@mail.ossp.org>
Date: Thu, 14 Mar 2002 16:34:44 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   14-Mar-2002 16:34:44
  Branch: HEAD                             Handle: 2002031415344400

  Modified files:
    ossp-pkg/popt           configure.ac devtool.conf devtool.func

  Log:
    upgrade to Autoconf 2.53 environment

  Summary:
    Revision    Changes     Path
    1.2         +5  -9      ossp-pkg/popt/configure.ac
    1.2         +2  -2      ossp-pkg/popt/devtool.conf
    1.2         +2  -1      ossp-pkg/popt/devtool.func
  ____________________________________________________________________________

  Index: ossp-pkg/popt/configure.ac
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 configure.ac
  --- ossp-pkg/popt/configure.ac	30 Jan 2002 14:05:32 -0000	1.1
  +++ ossp-pkg/popt/configure.ac	14 Mar 2002 15:34:44 -0000	1.2
  @@ -25,16 +25,13 @@
   dnl ##  configure.ac: GNU Autoconf source script
   dnl ##
   
  -AC_PREREQ(2.52)
  -AC_REVISION(1.0)
  -AC_INIT(README)
  -
  -AC_DIVERT_PUSH(NOTICE)
  +AC_PREREQ(2.53)
  +AC_INIT
   V=`./shtool version -l txt -d long VERSION`
   ./shtool echo -e "Configuring %BOSSP popt%b (Option Parsing), Version %B${V}%b"
  -AC_DIVERT_POP()
  +AC_CONFIG_SRCDIR(popt.h)
   
  -AC_SET_MAKE
  +AC_PROG_MAKE_SET
   AC_PROG_CC
   AC_CHECK_DEBUGGING
   
  @@ -46,7 +43,6 @@
   
   AC_CONFIG_HEADERS(config.h)
   AC_CONFIG_FILES(Makefile popt-config)
  +AC_CONFIG_COMMANDS([adjustment], [chmod a+x popt-config])
   AC_OUTPUT
  -
  -chmod a+x popt-config
   
  Index: ossp-pkg/popt/devtool.conf
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.conf
  --- ossp-pkg/popt/devtool.conf	30 Jan 2002 14:05:32 -0000	1.1
  +++ ossp-pkg/popt/devtool.conf	14 Mar 2002 15:34:44 -0000	1.2
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   1.5.4 "1.5.*" all
  +    @autogen shtool   1.6.0 "1.6.*" all
       @autogen libtool  1.4.2 "1.4*"
  -    @autogen autoconf 2.52  "2.5.*"
  +    @autogen autoconf 2.53  "2.5[3-9]*"
   
   %autoclean
       @autoclean shtool
  Index: ossp-pkg/popt/devtool.func
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.func
  --- ossp-pkg/popt/devtool.func	30 Jan 2002 14:05:32 -0000	1.1
  +++ ossp-pkg/popt/devtool.func	14 Mar 2002 15:34:44 -0000	1.2
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
   ##
   
   devtool_require () {
  @@ -33,6 +33,7 @@
               echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
               autoconf
               autoheader 2>&1 | grep -v "is unchanged"
  +            rm -rf autom4te.cache >/dev/null 2>&1
               ;;
           libtool )
               libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`

From ossp-cvs-owner@ossp.org  Thu Mar 14 16:39:44 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 493CF763DD; Thu, 14 Mar 2002 16:39:44 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa acconfig.h configure.ac devtool.conf devtool.f...
Message-Id: <20020314153944.493CF763DD@mail.ossp.org>
Date: Thu, 14 Mar 2002 16:39:44 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   14-Mar-2002 16:39:44
  Branch: LMTP2NNTP_1_2a4, HEAD            Handle: 197001010100001016116783

  Modified files:
    ossp-pkg/sa             configure.ac devtool.conf devtool.func sa.ac
  Removed files:            (Branch: LMTP2NNTP_1_2a4)
    ossp-pkg/sa             acconfig.h

  Log:
    upgrade to Autoconf 2.53 environment

  Summary:
    Revision    Changes     Path
    NONE        +0  -10     ossp-pkg/sa/acconfig.h
    1.11        +8  -12     ossp-pkg/sa/configure.ac
    1.7         +2  -2      ossp-pkg/sa/devtool.conf
    1.3         +2  -1      ossp-pkg/sa/devtool.func
    1.9         +1  -1      ossp-pkg/sa/sa.ac
  ____________________________________________________________________________

    Index: ossp-pkg/sa/configure.ac
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 configure.ac
  --- ossp-pkg/sa/configure.ac	31 Jan 2002 21:35:13 -0000	1.10
  +++ ossp-pkg/sa/configure.ac	14 Mar 2002 15:39:43 -0000	1.11
  @@ -28,17 +28,13 @@
   dnl ##  configure.ac: GNU Autoconf source script
   dnl ##
   
  -AC_PREREQ(2.52)
  -AC_REVISION(1.0)
  -AC_INIT(README)
  -
  -AC_DIVERT_PUSH(NOTICE)
  +AC_PREREQ(2.53)
  +AC_INIT
   SA_VERSION_STR=`./shtool version -l txt -d long VERSION`
  -./shtool echo -e "Configuring %BOSSP sa%b (Socket Abstraction), Version %B${SA_VERSION_STR}%b"
  +./shtool echo -e "Configuring %BOSSP sa%b (Socket Abstraction), version %B${SA_VERSION_STR}%b"
   AC_SUBST(SA_VERSION_STR)
  -AC_DIVERT_POP()
   
  -AC_SET_MAKE
  +AC_PROG_MAKE_SET
   AC_PROG_CC
   AC_CHECK_DEBUGGING
   
  @@ -48,11 +44,11 @@
   sinclude(sa.ac)
   SA_CHECK_ALL
   
  -AC_CHECK_EXTLIB([OSSP ex], ex, __ex_ctx, ex.h, [AC_DEFINE(WITH_EX)])
  +AC_CHECK_EXTLIB([OSSP ex], ex, __ex_ctx, ex.h,
  +                [AC_DEFINE(WITH_EX, 1, [Define to 1 if building with OSSP ex])])
   
   AC_CONFIG_HEADERS(config.h)
  -AC_CONFIG_FILES(Makefile sa-config)
  +AC_CONFIG_FILES([Makefile sa-config])
  +AC_CONFIG_COMMANDS([adjustment], [chmod a+x sa-config])
   AC_OUTPUT
  -
  -chmod a+x sa-config
   
  Index: ossp-pkg/sa/devtool.conf
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 devtool.conf
  --- ossp-pkg/sa/devtool.conf	31 Jan 2002 21:35:13 -0000	1.6
  +++ ossp-pkg/sa/devtool.conf	14 Mar 2002 15:39:43 -0000	1.7
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   1.5.4 "1.5.*" all
  +    @autogen shtool   1.6.0 "1.6.*" all
       @autogen libtool  1.4.2 "1.4*"
  -    @autogen autoconf 2.52  "2.5.*"
  +    @autogen autoconf 2.53  "2.5[3-9]*"
   
   %autoclean
       @autoclean shtool
  Index: ossp-pkg/sa/devtool.func
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.func
  --- ossp-pkg/sa/devtool.func	24 Oct 2001 13:42:34 -0000	1.2
  +++ ossp-pkg/sa/devtool.func	14 Mar 2002 15:39:43 -0000	1.3
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
   ##
   
   devtool_require () {
  @@ -33,6 +33,7 @@
               echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
               autoconf
               autoheader 2>&1 | grep -v "is unchanged"
  +            rm -rf autom4te.cache >/dev/null 2>&1
               ;;
           libtool )
               libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
  Index: ossp-pkg/sa/sa.ac
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 sa.ac
  --- ossp-pkg/sa/sa.ac	2 Jan 2002 12:43:50 -0000	1.8
  +++ ossp-pkg/sa/sa.ac	14 Mar 2002 15:39:43 -0000	1.9
  @@ -49,7 +49,7 @@
       ])dnl
       AC_MSG_RESULT($ac_cv_typedef_$1)
       if test $ac_cv_typedef_$1 = yes; then
  -        AC_DEFINE(HAVE_[]translit($1, [a-z], [A-Z]))
  +        AC_DEFINE(HAVE_[]translit($1, [a-z], [A-Z]), 1, [Define to 1 if $1 exists])
       fi
   ])
   

From ossp-cvs-owner@ossp.org  Thu Mar 14 16:49:52 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4F20D763DD; Thu, 14 Mar 2002 16:49:52 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str acconfig.h aclocal.m4 configure.ac devtool.co...
Message-Id: <20020314154952.4F20D763DD@mail.ossp.org>
Date: Thu, 14 Mar 2002 16:49:52 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   14-Mar-2002 16:49:52
  Branch: LMTP2NNTP_1_2a4, HEAD            Handle: 197001010100001016117391

  Modified files:
    ossp-pkg/str            aclocal.m4 configure.ac devtool.conf devtool.func
  Removed files:            (Branch: LMTP2NNTP_1_2a4)
    ossp-pkg/str            acconfig.h

  Log:
    upgrade to Autoconf 2.53 environment

  Summary:
    Revision    Changes     Path
    NONE        +0  -6      ossp-pkg/str/acconfig.h
    1.5         +27 -19     ossp-pkg/str/aclocal.m4
    1.9         +10 -16     ossp-pkg/str/configure.ac
    1.2         +3  -3      ossp-pkg/str/devtool.conf
    1.3         +1  -0      ossp-pkg/str/devtool.func
  ____________________________________________________________________________

    Index: ossp-pkg/str/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 aclocal.m4
  --- ossp-pkg/str/aclocal.m4	13 Sep 2001 13:57:38 -0000	1.4
  +++ ossp-pkg/str/aclocal.m4	14 Mar 2002 15:49:51 -0000	1.5
  @@ -31,7 +31,6 @@
   dnl ##
   
   AC_DEFUN(AC_HEADLINE,[dnl
  -AC_DIVERT_PUSH(NOTICE)dnl
   #   configuration header
   if test ".`echo dummy [$]@ | grep help`" = .; then
       #   bootstrapping shtool
  @@ -60,7 +59,6 @@
       $3_HEX="`$ac_shtool version -l c -d hex $ac_srcdir/$4`"
       AC_SUBST($3_HEX)
   fi
  -AC_DIVERT_POP()
   ])dnl
   
   dnl ##
  @@ -125,7 +123,7 @@
       esac
   fi
   msg="enabled"
  -AC_DEFINE(STR_DEBUG)
  +AC_DEFINE(STR_DEBUG, 1, [Define to 1 if you want to enable debugging])
   ],[
   if test ".$ac_cv_prog_gcc" = ".yes"; then
   case "$CFLAGS" in
  @@ -189,7 +187,6 @@
   fi
   ])
   
  -
   dnl ##
   dnl ##  Check for an external/extension library.
   dnl ##  - is aware of <libname>-config style scripts
  @@ -208,10 +205,10 @@
   dnl ##
   
   AC_DEFUN(AC_CHECK_EXTLIB,[dnl
  -AC_ARG_WITH($2,dnl
  -[  --with-]substr([$2[[=DIR]]                 ], 0, 19)[build against $1 library (default=no)],
  +AC_ARG_WITH($2, [dnl
  +[  --with-]m4_substr([$2[[=DIR]]                     ], 0, 19)[build with external $1 library (default=no)]], [dnl
       if test ".$with_$2" = .yes; then
  -        #   via config script
  +        #   via config script in PATH
           $2_version=`($2-config --version) 2>/dev/null`
           if test ".$$2_version" != .; then
               CPPFLAGS="$CPPFLAGS `$2-config --cflags`"
  @@ -223,7 +220,7 @@
               found=0
               #   via config script
               for dir in $with_$2/bin $with_$2; do
  -                if test -f "$dir/$2-config"; then
  +                if test -f "$dir/$2-config" && test ! -f "$dir/$2-config.in"; then
                       $2_version=`($dir/$2-config --version) 2>/dev/null`
                       if test ".$$2_version" != .; then
                           CPPFLAGS="$CPPFLAGS `$dir/$2-config --cflags`"
  @@ -234,7 +231,7 @@
                       fi
                   fi
               done
  -            #   via standard paths
  +            #   in standard sub-areas
               if test ".$found" = .0; then
                   for dir in $with_$2/include/$2 $with_$2/include $with_$2; do
                       if test -f "$dir/$4"; then
  @@ -245,25 +242,29 @@
                       fi
                   done
                   for dir in $with_$2/lib/$2 $with_$2/lib $with_$2; do
  -                    if test -f "$dir/lib$2.a" -o -f "$dir/lib$2.so"; then
  +                    if test -f "$dir/lib$2.la" && test -d "$dir/.libs"; then
  +                        LDFLAGS="$LDFLAGS -L$dir -L$dir/.libs"
  +                        found=1
  +                        break
  +                    elif test -f "$dir/lib$2.a" || test -f "$dir/lib$2.so"; then
                           LDFLAGS="$LDFLAGS -L$dir"
                           found=1
                           break
                       fi
                   done
               fi
  -            #   in any subarea
  +            #   in any sub-area
               if test ".$found" = .0; then
   changequote(, )dnl
                   for file in x `find $with_$2 -name "$4" -type f -print`; do
                       test .$file = .x && continue
  -                    dir=`echo $file | sed -e 's;[[^/]]*$;;' -e 's;\(.\)/$;\1;'`
  +                    dir=`echo $file | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;'`
                       CPPFLAGS="$CPPFLAGS -I$dir"
                       CFLAGS="$CFLAGS -I$dir"
                   done
  -                for file in x `find $with_$2 -name "lib$2.[[aso]]" -type f -print`; do
  +                for file in x `find $with_$2 -name "lib$2.[aso]" -type f -print`; do
                       test .$file = .x && continue
  -                    dir=`echo $file | sed -e 's;[[^/]]*$;;' -e 's;\(.\)/$;\1;'`
  +                    dir=`echo $file | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;'`
                       LDFLAGS="$LDFLAGS -L$dir"
                   done
   changequote([, ])dnl
  @@ -272,16 +273,24 @@
       fi
       AC_HAVE_HEADERS($4)
       AC_CHECK_LIB($2, $3)
  -    AC_IFALLYES(header:$4 lib:$2_$3, with_$2=yes, with_$2=no)
  +    with_$2=yes
  +    ac_var="ac_cv_header_`echo $4 | sed 'y%./+-%__p_%'`"
  +    eval "ac_val=\$$ac_var"
  +    if test ".$ac_val" != .yes; then
  +        with_$2=no
  +    fi
  +    if test ".$ac_cv_lib_$2_$3" != .yes; then
  +        with_$2=no
  +    fi
       if test ".$with_$2" = .no; then
           AC_ERROR([Unable to find $1 library])
       fi
  -,
  +    ], [dnl
   if test ".$with_$2" = .; then
       with_$2=no
   fi
  -)dnl
  -AC_MSG_CHECKING(whether to build against $1 library)
  +    ])dnl
  +AC_MSG_CHECKING(whether to build against external $1 library)
   if test ".$with_$2" = .yes; then
       ifelse([$5], , :, [$5])
   else
  @@ -289,4 +298,3 @@
   fi
   AC_MSG_RESULT([$with_$2])
   ])dnl
  -
  Index: ossp-pkg/str/configure.ac
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 configure.ac
  --- ossp-pkg/str/configure.ac	2 Jan 2002 17:09:13 -0000	1.8
  +++ ossp-pkg/str/configure.ac	14 Mar 2002 15:49:51 -0000	1.9
  @@ -2,20 +2,16 @@
   dnl ##   Autoconf specification for STR library
   dnl ##
   
  -AC_PREREQ(2.52)dnl
  -AC_REVISION(1.0)
  -
  -AC_INIT(README)
  +AC_PREREQ(2.53)
  +AC_INIT
   AC_HEADLINE(dnl
  -OSSP Str, String Library, dnl
  +OSSP str, String Library, dnl
   STR_VERSION, str_version.c, dnl
   [Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org>
   Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>])
  -AC_CONFIG_HEADER(str_config.h)
  -AC_PREFIX_DEFAULT(/usr/local)
   AC_PLATFORM(PLATFORM)
   
  -AC_SET_MAKE
  +AC_PROG_MAKE_SET
   AC_PROG_CC
   AC_PROG_CPP
   AC_CHECK_DEBUGGING
  @@ -35,13 +31,11 @@
   
   AC_CHECK_FUNC(modf, , AC_CHECK_LIB(m, modf))
   
  -AC_CHECK_EXTLIB([Dmalloc], dmalloc, dmalloc_debug, dmalloc.h, AC_DEFINE(WITH_DMALLOC))
  +AC_CHECK_EXTLIB([Dmalloc], dmalloc, dmalloc_debug, dmalloc.h, 
  +                [AC_DEFINE(WITH_DMALLOC, 1, [Define to 1 if building with Dmalloc])])
   
  -AC_OUTPUT(dnl
  -Makefile dnl
  -str.h dnl
  -str-config dnl
  -,dnl
  -chmod a+x str-config
  -)dnl
  +AC_CONFIG_HEADERS(str_config.h)
  +AC_CONFIG_FILES([Makefile str.h str-config])
  +AC_CONFIG_COMMANDS([adjustment], [chmod a+x str-config])
  +AC_OUTPUT
   
  Index: ossp-pkg/str/devtool.conf
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.conf
  --- ossp-pkg/str/devtool.conf	27 Dec 2001 12:15:19 -0000	1.1
  +++ ossp-pkg/str/devtool.conf	14 Mar 2002 15:49:51 -0000	1.2
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   1.5.4 "1.5.*" echo install mkdir fixperm tarball version
  +    @autogen shtool   1.6.0 "1.6.*" echo install mkdir fixperm tarball version
       @autogen libtool  1.4.2 "1.4*"
  -    @autogen autoconf 2.52  "2.5.*"
  +    @autogen autoconf 2.53  "2.5[3-9]*"
   
   %autoclean
       @autoclean shtool
  @@ -20,7 +20,7 @@
           "$@"
   
   %version
  -    ./shtool version -l c -n "OSSP Str" -p "str_" -e str_version.c
  +    ./shtool version -l c -n "OSSP str" -p "str_" -e str_version.c
   
   %dist
       make distclean >/dev/null 2>&1
  Index: ossp-pkg/str/devtool.func
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.func
  --- ossp-pkg/str/devtool.func	2 Jan 2002 17:09:13 -0000	1.2
  +++ ossp-pkg/str/devtool.func	14 Mar 2002 15:49:51 -0000	1.3
  @@ -33,6 +33,7 @@
               echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
               autoconf
               autoheader 2>&1 | grep -v "is unchanged"
  +            rm -rf autom4te.cache >/dev/null 2>&1
               ;;
           libtool )
               libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`

From ossp-cvs-owner@ossp.org  Thu Mar 14 16:51:32 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 17830763DD; Thu, 14 Mar 2002 16:51:32 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 acconfig.h
Message-Id: <20020314155132.17830763DD@mail.ossp.org>
Date: Thu, 14 Mar 2002 16:51:32 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   14-Mar-2002 16:51:32
  Branch: HEAD                             Handle: 1970010101000000

  Removed files:
    ossp-pkg/l2             acconfig.h

  Log:
    remove obsolete file

  Summary:
    Revision    Changes     Path
    NONE        +0  -11     ossp-pkg/l2/acconfig.h
  ____________________________________________________________________________

  

From ossp-cvs-owner@ossp.org  Thu Mar 14 16:51:48 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C852A763E3; Thu, 14 Mar 2002 16:51:48 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str acconfig.h
Message-Id: <20020314155148.C852A763E3@mail.ossp.org>
Date: Thu, 14 Mar 2002 16:51:48 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   14-Mar-2002 16:51:48
  Branch: HEAD                             Handle: 1970010101000000

  Removed files:
    ossp-pkg/str            acconfig.h

  Log:
    remove obsolete file

  Summary:
    Revision    Changes     Path
    NONE        +0  -6      ossp-pkg/str/acconfig.h
  ____________________________________________________________________________

  

From ossp-cvs-owner@ossp.org  Thu Mar 14 16:52:01 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 21E1C763E6; Thu, 14 Mar 2002 16:52:01 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa acconfig.h
Message-Id: <20020314155201.21E1C763E6@mail.ossp.org>
Date: Thu, 14 Mar 2002 16:52:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   14-Mar-2002 16:52:01
  Branch: HEAD                             Handle: 1970010101000000

  Removed files:
    ossp-pkg/sa             acconfig.h

  Log:
    remove obsolete file

  Summary:
    Revision    Changes     Path
    NONE        +0  -10     ossp-pkg/sa/acconfig.h
  ____________________________________________________________________________

  

From ossp-cvs-owner@ossp.org  Thu Mar 14 17:07:39 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D15F0763DD; Thu, 14 Mar 2002 17:07:38 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp acconfig.h configure.ac devtool.conf
Message-Id: <20020314160738.D15F0763DD@mail.ossp.org>
Date: Thu, 14 Mar 2002 17:07:38 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   14-Mar-2002 17:07:38
  Branch: HEAD                             Handle: 197001010100001016118458

  Modified files:
    ossp-pkg/lmtp2nntp      configure.ac devtool.conf
  Removed files:
    ossp-pkg/lmtp2nntp      acconfig.h

  Log:
    upgrade to Autoconf 2.53 environment

  Summary:
    Revision    Changes     Path
    NONE        +0  -3      ossp-pkg/lmtp2nntp/acconfig.h
    1.26        +6  -8      ossp-pkg/lmtp2nntp/configure.ac
    1.7         +2  -2      ossp-pkg/lmtp2nntp/devtool.conf
  ____________________________________________________________________________

    Index: ossp-pkg/lmtp2nntp/configure.ac
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 configure.ac
  --- ossp-pkg/lmtp2nntp/configure.ac	13 Mar 2002 16:30:17 -0000	1.25
  +++ ossp-pkg/lmtp2nntp/configure.ac	14 Mar 2002 16:07:38 -0000	1.26
  @@ -25,20 +25,17 @@
   dnl ##
   
   dnl #   standard preamble
  -AC_PREREQ(2.52)
  -AC_REVISION(1.0)
  -AC_INIT(lmtp2nntp_main.c)
  +AC_PREREQ(2.53)
  +AC_INIT
   
   dnl #   announce our version
  -AC_DIVERT_PUSH(NOTICE)
   V=`./shtool version -lc -dlong lmtp2nntp_version.c`
   ./shtool echo -e "Configuring %BOSSP lmtp2nntp%b, Version %B${V}%b"
   echo "Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>"
   echo "Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>"
  -AC_DIVERT_POP()
   
   dnl #   perform feature tests
  -AC_SET_MAKE
  +AC_PROG_MAKE_SET
   AC_PROG_CC
   AC_PROG_CPP
   AC_CHECK_DEBUGGING
  @@ -140,7 +137,8 @@
   AC_SUBST(SUBDIR_PCRE)
   
   dnl #   check for external Dmalloc library
  -AC_CHECK_EXTLIB([Dmalloc], dmalloc, dmalloc_debug, dmalloc.h, AC_DEFINE(DMALLOC))
  +AC_CHECK_EXTLIB([Dmalloc], dmalloc, dmalloc_debug, dmalloc.h, 
  +                [AC_DEFINE(WITH_DMALLOC, 1, [Define to 1 if building with Dmalloc])])
   
   dnl #   post-processing for LIBS_EXTRA
   LIBS="$LIBS $LIBS_EXTRA"
  @@ -153,6 +151,6 @@
   
   dnl #   standard output generation
   AC_CONFIG_HEADERS(config.h)
  -AC_CONFIG_FILES(Makefile:Makefile.in)
  +AC_CONFIG_FILES(Makefile)
   AC_OUTPUT
   
  Index: ossp-pkg/lmtp2nntp/devtool.conf
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 devtool.conf
  --- ossp-pkg/lmtp2nntp/devtool.conf	1 Mar 2002 15:27:57 -0000	1.6
  +++ ossp-pkg/lmtp2nntp/devtool.conf	14 Mar 2002 16:07:38 -0000	1.7
  @@ -10,8 +10,8 @@
       done
   
   %autogen
  -    @autogen shtool   1.5.4 "1.5.*" all
  -    @autogen autoconf 2.52  "2.5.*"
  +    @autogen shtool   1.6.0 "1.6.*" all
  +    @autogen autoconf 2.53  "2.5[3-9]*"
   
       for name in ex str l2 sa var val popt pcre; do
           echo "===> lib_${name} (devtool autogen)"

From ossp-cvs-owner@ossp.org  Thu Mar 14 17:07:53 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3D949763E5; Thu, 14 Mar 2002 17:07:53 +0100 (CET)
From: "Thomas Lotterer" <thomas.lotterer@cw.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp NEWS README THANKS
Message-Id: <20020314160753.3D949763E5@mail.ossp.org>
Date: Thu, 14 Mar 2002 17:07:53 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thomas.lotterer@cw.com
  Module: ossp-pkg                         Date:   14-Mar-2002 17:07:53
  Branch: HEAD                             Handle: 2002031416075200

  Modified files:
    ossp-pkg/lmtp2nntp      NEWS README THANKS

  Log:
    document polishing for release

  Summary:
    Revision    Changes     Path
    1.7         +14 -17     ossp-pkg/lmtp2nntp/NEWS
    1.19        +10 -0      ossp-pkg/lmtp2nntp/README
    1.4         +3  -0      ossp-pkg/lmtp2nntp/THANKS
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/NEWS
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 NEWS
  --- ossp-pkg/lmtp2nntp/NEWS	15 Oct 2001 14:38:48 -0000	1.6
  +++ ossp-pkg/lmtp2nntp/NEWS	14 Mar 2002 16:07:52 -0000	1.7
  @@ -10,23 +10,20 @@
   
     NEWS
   
  -  This is the first update to the initial public release. Thanks to Cable &
  -  Wireless Deutschland GmbH for supporting open source software. Those folks
  -  who used previous versions please review the options. Not only was
  -  functionality added but some options were renamed and one was removed!
  +  Those folks who used previous versions please review the options
  +  carefully, there were significant changes which are not compatible with
  +  previous versions.
   
  -    v1.0.0                  v1.1.0
  +  New features:
  +  - logging to the extreme (file, local/remote syslog, smtp, irc) [1]
  +  - long options, better option parsing and syntax checking [2]
  +  - command line and multiple configuration files can be mixed
  +  - header rewriting with variable expansion [3], access to many values [4]
  +  - large source code modifications including use of exceptions [5]
   
  -    n/a                     -D (daemonize)
  -    n/a                     -K (kill daemon)
  -    n/a                     -P (pidfile for daemon)
  -    n/a                     -a (LMTP daemon ACL)
  -    n/a                     -b (LMTP daemon bind)
  -    -b (bind)           ->  -c (NNTP client bind)
  -    -h (host)           ->  -d (NNTP client destination)
  -    n/a                     -h (header/value)
  -    -d (deliverymode)   ->  -o (operationmode)
  -    n/a                     -r (restrictheader)
  -    n/a                     -t (timeouts)
  -    -w (waittime)       ->  n/a, replace with -t nntp:connect=
  +  [1] OSSP l2   http://www.ossp.org/pkg/lib/l2/
  +  [2] OSSP popt http://www.ossp.org/pkg/lib/popt/
  +  [3] OSSP var  http://www.ossp.org/pkg/lib/var/
  +  [4] OSSP val  http://www.ossp.org/pkg/lib/val/
  +  [5] OSSP ex   http://www.ossp.org/pkg/lib/ex/
   
  Index: ossp-pkg/lmtp2nntp/README
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 README
  --- ossp-pkg/lmtp2nntp/README	13 Mar 2002 16:38:39 -0000	1.18
  +++ ossp-pkg/lmtp2nntp/README	14 Mar 2002 16:07:52 -0000	1.19
  @@ -9,6 +9,16 @@
     OSSP lmtp2nntp - Mail to News Gateway
     Version 1.2a4 (13-Mar-2002)
   
  +  BEWARE! THIS IS ALPHA CODE
  +
  +  Use for evaluation. Functionality is mostly complete, see 00TODO.  Error
  +  handling and resource management needs some work. Documentation does not
  +  reflect changes and news for the v1.2 release.
  +
  +  The 1.2a4 has been tested in a production environment and successfully
  +  gatewayed some thousand messages. Memory leaked an average of 30 bytes per
  +  article. No functional bugs were found, no coredumps were seen.
  +
     ABSTRACT
   
     The OSSP lmtp2nntp program is an LMTP service for use in conjunction
  Index: ossp-pkg/lmtp2nntp/THANKS
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 THANKS
  --- ossp-pkg/lmtp2nntp/THANKS	7 Nov 2001 15:17:12 -0000	1.3
  +++ ossp-pkg/lmtp2nntp/THANKS	14 Mar 2002 16:07:52 -0000	1.4
  @@ -10,6 +10,9 @@
   
     THANKS
   
  +  Thanks to Cable & Wireless Deutschland GmbH for supporting open source
  +  software.
  +
     This is a list of contributors who have written or edited parts of the OSSP
     lmtp2nntp sources, provided suggestions or inspired the AUTHORS.
   

From ossp-cvs-owner@ossp.org  Thu Mar 14 17:34:48 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8A6F4763DD; Thu, 14 Mar 2002 17:34:48 +0100 (CET)
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/tool index.wml ossp-web/pkg/tool/lmtp2nntp in...
Message-Id: <20020314163448.8A6F4763DD@mail.ossp.org>
Date: Thu, 14 Mar 2002 17:34:48 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   OSSP Project Master
  Root:   /e/ossp/cvs                      Email:  ossp@ossp.org
  Module: ossp-web                         Date:   14-Mar-2002 17:34:48
  Branch: HEAD                             Handle: 2002031416344701

  Modified files:
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/lmtp2nntp
                            index.wml

  Log:
    update for lmtp2nntp v1.2a4

  Summary:
    Revision    Changes     Path
    1.11        +1  -1      ossp-web/pkg/tool/index.wml
    1.6         +2  -2      ossp-web/pkg/tool/lmtp2nntp/index.wml
  ____________________________________________________________________________

  Index: ossp-web/pkg/tool/index.wml
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 index.wml
  --- ossp-web/pkg/tool/index.wml	15 Feb 2002 12:07:15 -0000	1.10
  +++ ossp-web/pkg/tool/index.wml	14 Mar 2002 16:34:47 -0000	1.11
  @@ -15,7 +15,7 @@
   		    done=100 stable="1.6.0" unstable=none>
     <pkg_item name="lmtp2nntp" longname="OSSP lmtp2nntp" type="tool"
               desc="Real-Time Mail to News Gateway"
  -            done=100 stable="1.1.1" unstable=none>
  +            done=100 stable="1.1.1" unstable=1.2a4>
     <pkg_item name="petidomo" longname="OSSP petidomo" type="tool" derived=yes
               desc="Mailing List Manager"
   	        done=95 stable="none" unstable="4.0b1">
  Index: ossp-web/pkg/tool/lmtp2nntp/index.wml
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 index.wml
  --- ossp-web/pkg/tool/lmtp2nntp/index.wml	14 Feb 2002 20:19:44 -0000	1.5
  +++ ossp-web/pkg/tool/lmtp2nntp/index.wml	14 Mar 2002 16:34:48 -0000	1.6
  @@ -31,7 +31,7 @@
   
   <pkg_status
       stable="1.1.1"   stable_date="13-Dec-2001"
  -    unstable="none" unstable_date="none"
  +    unstable="1.2a4" unstable_date="13-Mar-2002"
   	done=100>
   
   <h2>Source</h2>
  @@ -39,5 +39,5 @@
   <pkg_files 
       url=$(FTP_ROOT_URL)/pkg/tool/lmtp2nntp/
       directory=$(FTP_ROOT_DIR)/pkg/tool/lmtp2nntp/
  -    files="lmtp2nntp-*.tar.gz" stable="lmtp2nntp-1.1.1.tar.gz">
  +    files="lmtp2nntp-*.tar.gz" stable="lmtp2nntp-1.1.1.tar.gz" unstable="lmtp2nntp-1.2a4.tar.gz">
   

From ossp-cvs-owner@ossp.org  Thu Mar 14 19:38:32 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 17960763DF; Thu, 14 Mar 2002 19:38:32 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/SHARE ossp_newsflash.wml
Message-Id: <20020314183832.17960763DF@mail.ossp.org>
Date: Thu, 14 Mar 2002 19:38:32 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   14-Mar-2002 19:38:32
  Branch: HEAD                             Handle: 2002031418383100

  Modified files:
    ossp-web/SHARE          ossp_newsflash.wml

  Log:
    add support for libs and tools linking

  Summary:
    Revision    Changes     Path
    1.4         +2  -0      ossp-web/SHARE/ossp_newsflash.wml
  ____________________________________________________________________________

  Index: ossp-web/SHARE/ossp_newsflash.wml
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 ossp_newsflash.wml
  --- ossp-web/SHARE/ossp_newsflash.wml	13 Feb 2002 21:35:23 -0000	1.3
  +++ ossp-web/SHARE/ossp_newsflash.wml	14 Mar 2002 18:38:31 -0000	1.4
  @@ -25,6 +25,8 @@
       $ncol = 1;
       $n = 0;
       while (<FP>) {
  +        s/T<((OSSP\s+)?([^>]+))>/<a href="pkg\/tool\/$3\/">$1<\/a>/g;
  +        s/L<((OSSP\s+)?([^>]+))>/<a href="pkg\/lib\/$3\/">$1<\/a>/g;
           s/P<([^>]+)>/<a href="ftp:\/\/ftp.openpkg.org\/current\/SRC\/$1.src.rpm">$1<\/a>/g;
           s/N<([^>]+)>/<b>$1<\/b>/g;
           s/B<([^>]+)>/<b>$1<\/b>/g;

From ossp-cvs-owner@ossp.org  Thu Mar 14 19:38:47 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1F482763E6; Thu, 14 Mar 2002 19:38:47 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/SHARE ossp_canvas.wml
Message-Id: <20020314183847.1F482763E6@mail.ossp.org>
Date: Thu, 14 Mar 2002 19:38:47 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   14-Mar-2002 19:38:47
  Branch: HEAD                             Handle: 2002031418384600

  Modified files:
    ossp-web/SHARE          ossp_canvas.wml

  Log:
    make logo click-able

  Summary:
    Revision    Changes     Path
    1.3         +5  -1      ossp-web/SHARE/ossp_canvas.wml
  ____________________________________________________________________________

  Index: ossp-web/SHARE/ossp_canvas.wml
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 ossp_canvas.wml
  --- ossp-web/SHARE/ossp_canvas.wml	13 Feb 2002 21:15:26 -0000	1.2
  +++ ossp-web/SHARE/ossp_canvas.wml	14 Mar 2002 18:38:46 -0000	1.3
  @@ -86,7 +86,8 @@
           <span class="title">{#PAGE_TITLE#}</span>
       </td>
       <td align=right valign=bottom>
  -       <img src="$(IMG)/ossp-logo.png" alt="OSSP - Unix Software Technologies">
  +       <a href="http://www.ossp.org/"\
  +	   ><img src="$(IMG)/ossp-logo.png" alt="OSSP - Unix Software Technologies" border=0></a>
       </td>
     </tr>
   </table>
  @@ -115,6 +116,9 @@
         <br>
         <imgdot width=120>
       </td>
  +  </tr>
  +  <tr>
  +    <td colspan=9>{#PAGE_CANVAS_ARENA#}</td>
     </tr>
   </table>
   <<..

From ossp-cvs-owner@ossp.org  Thu Mar 14 19:38:59 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8A1A8763E3; Thu, 14 Mar 2002 19:38:59 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new news.txt
Message-Id: <20020314183859.8A1A8763E3@mail.ossp.org>
Date: Thu, 14 Mar 2002 19:38:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   14-Mar-2002 19:38:59
  Branch: HEAD                             Handle: 2002031418385900

  Modified files:
    ossp-web/new            news.txt

  Log:
    add lmtp2nntp and use links

  Summary:
    Revision    Changes     Path
    1.4         +13 -12     ossp-web/new/news.txt
  ____________________________________________________________________________

  Index: ossp-web/new/news.txt
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 news.txt
  --- ossp-web/new/news.txt	8 Mar 2002 23:01:25 -0000	1.3
  +++ ossp-web/new/news.txt	14 Mar 2002 18:38:59 -0000	1.4
  @@ -1,13 +1,14 @@
  -08-Mar-2002: Released OSSP ex 0.9.1
  -08-Mar-2002: Released OSSP var 0.9.0
  +14-Mar-2002: Released T<OSSP lmtp2nntp> 1.2a4
  +08-Mar-2002: Released L<OSSP ex> 0.9.1
  +08-Mar-2002: Released L<OSSP var> 0.9.0
   13-Feb-2002: First cut for the OSSP website
  -31-Jan-2002: Released OSSP ex 0.9.0
  -31-Jan-2002: Released OSSP sa 0.9.0
  -13-Nov-2001: Released OSSP lmtp2nntp 1.1.1
  -12-Nov-2001: Released OSSP lmtp2nntp 1.1.0
  -13-Sep-2001: Released OSSP lmtp2nntp 1.0.0
  -08-Nov-2001: Released OSSP lmtp2nntp 1.1b4
  -08-Nov-2001: Released OSSP lmtp2nntp 1.1b3
  -15-Oct-2001: Released OSSP lmtp2nntp 1.1b2
  -12-Oct-2001: Released OSSP lmtp2nntp 1.1b1
  -13-Sep-2001: Released OSSP lmtp2nntp 0.9.7
  +31-Jan-2002: Released L<OSSP ex> 0.9.0
  +31-Jan-2002: Released L<OSSP sa> 0.9.0
  +13-Nov-2001: Released T<OSSP lmtp2nntp> 1.1.1
  +12-Nov-2001: Released T<OSSP lmtp2nntp> 1.1.0
  +13-Sep-2001: Released T<OSSP lmtp2nntp> 1.0.0
  +08-Nov-2001: Released T<OSSP lmtp2nntp> 1.1b4
  +08-Nov-2001: Released T<OSSP lmtp2nntp> 1.1b3
  +15-Oct-2001: Released T<OSSP lmtp2nntp> 1.1b2
  +12-Oct-2001: Released T<OSSP lmtp2nntp> 1.1b1
  +13-Sep-2001: Released T<OSSP lmtp2nntp> 0.9.7

From ossp-cvs-owner@ossp.org  Fri Mar 15 09:49:50 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A7B3A7642C; Fri, 15 Mar 2002 09:49:49 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/popt popt.c popt.h
Message-Id: <20020315084949.A7B3A7642C@mail.ossp.org>
Date: Fri, 15 Mar 2002 09:49:49 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   15-Mar-2002 09:49:49
  Branch: HEAD                             Handle: 2002031508494801

  Modified files:
    ossp-pkg/popt           popt.c popt.h

  Log:
    upgrade to POPT 1.6.4

  Summary:
    Revision    Changes     Path
    1.2         +42 -11     ossp-pkg/popt/popt.c
    1.2         +45 -40     ossp-pkg/popt/popt.h
  ____________________________________________________________________________

  Index: ossp-pkg/popt/popt.c
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 popt.c
  --- ossp-pkg/popt/popt.c	30 Jan 2002 14:00:22 -0000	1.1.1.1
  +++ ossp-pkg/popt/popt.c	15 Mar 2002 08:49:48 -0000	1.2
  @@ -25,7 +25,7 @@
    *
    *  NOTICE:
    *  This is an automatically generated, stripped down version of the
  - *  POPT 1.6.3 library from Red Hat, Inc. This version is still
  + *  POPT 1.6.4 library from Red Hat, Inc. This version is still
    *  distributed under above Open Source license, but Red Hat is no longer
    *  responsible for this version. Contact The OSSP Project instead.
    */
  @@ -60,6 +60,7 @@
   #elif defined(__GNUC__) && defined(__STRICT_ANSI__)
   #define alloca __builtin_alloca
   #endif
  +
   #include "popt.h"
   
   #ifndef H_POPTINT
  @@ -75,7 +76,7 @@
   typedef unsigned int __pbm_bits;
   #define	__PBM_NBITS		(8 * sizeof (__pbm_bits))
   #define	__PBM_IX(d)		((d) / __PBM_NBITS)
  -#define __PBM_MASK(d)		((__pbm_bits) 1 << ((d) % __PBM_NBITS))
  +#define __PBM_MASK(d)		((__pbm_bits) 1 << (((unsigned)(d)) % __PBM_NBITS))
   typedef struct {
   	__pbm_bits bits[1];
   } pbm_set;
  @@ -166,6 +167,7 @@
   	strcpy(pathbuf, path);
   
   	chptr = NULL;
  +
   	do {
   		if ((chptr = strchr(start, ':')))
   			*chptr = '\0';
  @@ -195,6 +197,8 @@
   	con->execPath = _free(con->execPath);
   	con->execPath = strdup(path);
   	con->execAbsolute = allowAbsolute;
  +	return;
  +
   }
   
   static void invokeCallbacksPRE(popt_context con,
  @@ -296,7 +300,7 @@
   	if (!(flags & POPT_CONTEXT_KEEP_FIRST))
   		con->os->next = 1;
   
  -	con->leftovers = calloc((argc + 1), sizeof (char *));
  +	con->leftovers = calloc((argc + 1), sizeof (*con->leftovers));
   	con->options = options;
   
   	con->aliases = NULL;
  @@ -624,6 +628,7 @@
   			break;
   		if (os->argv != NULL)
   			for (i = os->next; i < os->argc; i++) {
  +
   				if (os->argb && PBM_ISSET(i, os->argb))
   					continue;
   				if (*os->argv[i] == '-')
  @@ -638,6 +643,7 @@
   						PBM_SET(i, os->argb);
   				}
   				break;
  +
   			}
   		if (os > con->optionStack)
   			os--;
  @@ -689,10 +695,14 @@
   
   static void poptStripArg(popt_context con, int which)
   {
  +
   	if (con->arg_strip == NULL)
   		con->arg_strip = PBM_ALLOC(con->optionStack[0].argc);
   	if (con->arg_strip != NULL)
   		PBM_SET(which, con->arg_strip);
  +
  +	return;
  +
   }
   
   static int poptSaveLong(const struct popt_option *opt, long aLong)
  @@ -769,7 +779,9 @@
   			cleanOSE(con->os--);
   		}
   		if (!con->os->nextCharArg && con->os->next == con->os->argc) {
  +
   			invokeCallbacksPOST(con, con->options);
  +
   			if (con->doExec)
   				return execCommand(con);
   			return -1;
  @@ -783,6 +795,7 @@
   				con->os->next++;
   				continue;
   			}
  +
   			thisopt = con->os->next;
   			if (con->os->argv != NULL)
   				origOptString = con->os->argv[con->os->next++];
  @@ -878,7 +891,6 @@
   			origOptString++;
   			if (*origOptString != '\0')
   				con->os->nextCharArg = origOptString;
  -
   		}
   
   		if (opt == NULL)
  @@ -974,12 +986,14 @@
   							char *end;
   
   							if (con->os->nextArg) {
  +
   								int saveerrno = errno;
   								errno = 0;
   								aDouble = strtod(con->os->nextArg, &end);
   								if (errno == ERANGE)
   									return POPT_ERROR_OVERFLOW;
   								errno = saveerrno;
  +
   								if (*end != '\0')
   									return POPT_ERROR_BADNUMBER;
   							}
  @@ -1003,12 +1017,16 @@
   								("option type (%d) not implemented in popt\n"),
   								(opt->argInfo & POPT_ARG_MASK));
   						exit(EXIT_FAILURE);
  +						break;
   				}
   			}
   		}
   
  -		if (cb)
  +		if (cb) {
  +
   			invokeCallbacksOPTION(con, con->options, opt, cbData, shorty);
  +
  +		}
   		else if (opt->val && ((opt->argInfo & POPT_ARG_MASK) != POPT_ARG_VAL))
   			done = 1;
   
  @@ -1051,10 +1069,12 @@
   const char *popt_getoptarg(popt_context con)
   {
   	const char *ret = NULL;
  +
   	if (con) {
   		ret = con->os->nextArg;
   		con->os->nextArg = NULL;
   	}
  +
   	return ret;
   }
   
  @@ -1133,19 +1153,19 @@
   	return con;
   }
   
  -int popt_addalias(popt_context con, struct popt_alias newAlias, int flags)
  +int popt_addalias(popt_context con, struct popt_alias alias, int flags)
   {
   	popt_item item = alloca(sizeof (*item));
   	memset(item, 0, sizeof (*item));
  -	item->option.longName = newAlias.longName;
  -	item->option.shortName = newAlias.shortName;
  +	item->option.longName = alias.longName;
  +	item->option.shortName = alias.shortName;
   	item->option.argInfo = POPT_ARGFLAG_DOC_HIDDEN;
   	item->option.arg = 0;
   	item->option.val = 0;
   	item->option.descrip = NULL;
   	item->option.argDescrip = NULL;
  -	item->argc = newAlias.argc;
  -	item->argv = newAlias.argv;
  +	item->argc = alias.argc;
  +	item->argv = alias.argv;
   	return popt_additem(con, item, 0);
   }
   
  @@ -1310,6 +1330,7 @@
   		argv2[i] = dst;
   		dst += strlen(strcpy(dst, argv[i])) + 1;
   	}
  +
   	argv2[argc] = NULL;
   
   	if (argvPtr) {
  @@ -1400,7 +1421,9 @@
   
   static void configLine(popt_context con, char *line)
   {
  +
   	int nameLength = strlen(con->appName);
  +
   	const char *entryType;
   	const char *opt;
   	popt_item item = alloca(sizeof (*item));
  @@ -1410,6 +1433,7 @@
   
   	if (strncmp(line, con->appName, nameLength))
   		return;
  +
   	line += nameLength;
   	if (*line == '\0' || !isspace(*line))
   		return;
  @@ -1477,6 +1501,7 @@
   		(void)popt_additem(con, item, 0);
   	else if (!strcmp(entryType, "exec"))
   		(void)popt_additem(con, item, 1);
  +
   }
   
   int popt_readconfigfile(popt_context con, const char *fn)
  @@ -1495,7 +1520,9 @@
   	if (fileLength == -1 || lseek(fd, 0, 0) == -1) {
   		rc = errno;
   		(void)close(fd);
  +
   		errno = rc;
  +
   		return POPT_ERROR_ERRNO;
   	}
   
  @@ -1503,7 +1530,9 @@
   	if (read(fd, (char *)file, fileLength) != fileLength) {
   		rc = errno;
   		(void)close(fd);
  +
   		errno = rc;
  +
   		return POPT_ERROR_ERRNO;
   	}
   	if (close(fd) == -1)
  @@ -1645,7 +1674,7 @@
   	char *le = malloc(4 * lineLength + 1);
   	char *l = le;
   
  -	if (l == NULL)
  +	if (le == NULL)
   		return NULL;
   	*le = '\0';
   	*le++ = '(';
  @@ -1873,7 +1902,9 @@
   		fprintf(fp, "%s\n", help);
   
     out:
  +
   	defs = _free(defs);
  +
   	left = _free(left);
   }
   
  Index: ossp-pkg/popt/popt.h
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 popt.h
  --- ossp-pkg/popt/popt.h	30 Jan 2002 14:00:22 -0000	1.1.1.1
  +++ ossp-pkg/popt/popt.h	15 Mar 2002 08:49:49 -0000	1.2
  @@ -25,7 +25,7 @@
    *
    *  NOTICE:
    *  This is an automatically generated, stripped down version of the
  - *  POPT 1.6.3 library from Red Hat, Inc. This version is still
  + *  POPT 1.6.4 library from Red Hat, Inc. This version is still
    *  distributed under above Open Source license, but Red Hat is no longer
    *  responsible for this version. Contact The OSSP Project instead.
    */
  @@ -33,10 +33,6 @@
   #ifndef __POPT_H__
   #define __POPT_H__
   
  -#ifdef __cplusplus
  -extern "C" {
  -#endif
  -
   #include <stdio.h>
   
   #define POPT_OPTION_DEPTH	10
  @@ -98,51 +94,55 @@
   #define POPT_CONTEXT_POSIXMEHARDER (1 << 2)
   #define POPT_CONTEXT_ARG_OPTS	(1 << 4)
   
  -	struct popt_option {
  -		const char *longName;
  -		char shortName;
  -		int argInfo;
  -		void *arg;
  -		int val;
  -		const char *descrip;
  -		const char *argDescrip;
  -	};
  -
  -	struct popt_alias {
  -		const char *longName;
  -		char shortName;
  -		int argc;
  -		const char **argv;
  -	};
  -
  -	typedef struct popt_item_s {
  -		struct popt_option option;
  -		int argc;
  -		const char **argv;
  -	}  *popt_item;
  +struct popt_option {
  +	const char *longName;
  +	char shortName;
  +	int argInfo;
  +	void *arg;
  +	int val;
  +	const char *descrip;
  +	const char *argDescrip;
  +};
  +
  +struct popt_alias {
  +	const char *longName;
  +	char shortName;
  +	int argc;
  +	const char **argv;
  +};
  +
  +typedef struct popt_item_s {
  +	struct popt_option option;
  +	int argc;
  +	const char **argv;
  +}  *popt_item;
   
  -	extern struct popt_option popt_aliasOptions[];
  +extern struct popt_option popt_aliasOptions[];
   #define POPT_AUTOALIAS { NULL, '\0', POPT_ARG_INCLUDE_TABLE, popt_aliasOptions, \
   			0, "Options implemented via popt alias/exec:", NULL },
   
  -	extern struct popt_option popt_helpoptions[];
  +extern struct popt_option popt_helpoptions[];
   #define POPT_AUTOHELP { NULL, '\0', POPT_ARG_INCLUDE_TABLE, popt_helpoptions, \
   			0, "Help options:", NULL },
   
   #define POPT_TABLEEND { NULL, '\0', 0, 0, 0, NULL, NULL }
   
  -	typedef struct popt_context_s *popt_context;
  +typedef struct popt_context_s *popt_context;
   
   #ifndef __cplusplus
   
  -	typedef struct popt_option *popt_option;
  +typedef struct popt_option *popt_option;
   
   #endif
   
  -	enum popt_callbackreason { POPT_CALLBACK_REASON_PRE,
  -		POPT_CALLBACK_REASON_POST,
  -		POPT_CALLBACK_REASON_OPTION
  -	};
  +enum popt_callbackreason { POPT_CALLBACK_REASON_PRE,
  +	POPT_CALLBACK_REASON_POST,
  +	POPT_CALLBACK_REASON_OPTION
  +};
  +
  +#ifdef __cplusplus
  +extern "C" {
  +#endif
   
   	typedef void (*popt_callbacktype) (popt_context con,
   									   enum popt_callbackreason reason,
  @@ -156,7 +156,8 @@
   
   	void popt_resetcontext(popt_context con);
   
  -	int popt_getnextopt(popt_context con);
  +	int popt_getnextopt(popt_context con)
  +	   ;
   
   	const char *popt_getoptarg(popt_context con);
   
  @@ -176,9 +177,11 @@
   
   	int popt_additem(popt_context con, popt_item newItem, int flags);
   
  -	int popt_readconfigfile(popt_context con, const char *fn);
  +	int popt_readconfigfile(popt_context con, const char *fn)
  +	   ;
   
  -	int popt_readdefaultconfig(popt_context con, int useEnv);
  +	int popt_readdefaultconfig(popt_context con, int useEnv)
  +	   ;
   
   	int popt_dupargv(int argc, const char **argv,
   					 int *argcPtr, const char ***argvPtr);
  @@ -191,9 +194,11 @@
   	void popt_setexecpath(popt_context con, const char *path,
   						  int allowAbsolute);
   
  -	void popt_printhelp(popt_context con, FILE * fp, int flags);
  +	void popt_printhelp(popt_context con, FILE * fp, int flags)
  +	   ;
   
  -	void popt_printusage(popt_context con, FILE * fp, int flags);
  +	void popt_printusage(popt_context con, FILE * fp, int flags)
  +	   ;
   
   	void popt_setotheroptionhelp(popt_context con, const char *text);
   

From ossp-cvs-owner@ossp.org  Fri Mar 15 11:47:38 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1E9B47642C; Fri, 15 Mar 2002 11:47:37 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa README VERSION aclocal.m4 configure.ac sa-conf...
Message-Id: <20020315104737.1E9B47642C@mail.ossp.org>
Date: Fri, 15 Mar 2002 11:47:37 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   15-Mar-2002 11:47:37
  Branch: HEAD                             Handle: 2002031510473600

  Modified files:
    ossp-pkg/sa             README VERSION aclocal.m4 configure.ac
                            sa-config.in sa.ac sa.c sa.h sa.pod sa_test.c

  Log:
    polishing for release

  Summary:
    Revision    Changes     Path
    1.5         +6  -6      ossp-pkg/sa/README
    1.3         +1  -1      ossp-pkg/sa/VERSION
    1.5         +0  -1      ossp-pkg/sa/aclocal.m4
    1.12        +3  -3      ossp-pkg/sa/configure.ac
    1.4         +3  -3      ossp-pkg/sa/sa-config.in
    1.10        +3  -3      ossp-pkg/sa/sa.ac
    1.58        +3  -3      ossp-pkg/sa/sa.c
    1.30        +3  -3      ossp-pkg/sa/sa.h
    1.25        +3  -3      ossp-pkg/sa/sa.pod
    1.16        +3  -3      ossp-pkg/sa/sa_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/README
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 README
  --- ossp-pkg/sa/README	31 Jan 2002 21:35:13 -0000	1.4
  +++ ossp-pkg/sa/README	15 Mar 2002 10:47:36 -0000	1.5
  @@ -3,8 +3,8 @@
     \__ \ (_| |
     |___/\__,_|
   
  -  OSSP sa -- Socket Abstraction Library
  -  Version 0.9.0 (31-Jan-2002)
  +  OSSP sa - Socket Abstraction
  +  Version 0.9.1 (15-Mar-2002)
   
     ABSTRACT
   
  @@ -21,8 +21,8 @@
     Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
     Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   
  -  This file is part of OSSP SA, a socket abstraction library which
  -  can be found at http://www.ossp.org/pkg/sa/.
  +  This file is part of OSSP sa, a socket abstraction library which
  +  can be found at http://www.ossp.org/pkg/lib/sa/.
   
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
  @@ -46,6 +46,6 @@
   
     The documentation and latest release can be found on
   
  -  o http://www.ossp.org/pkg/sa/
  -  o  ftp://ftp.ossp.org/pkg/sa/
  +  o http://www.ossp.org/pkg/lib/sa/
  +  o  ftp://ftp.ossp.org/pkg/lib/sa/
   
  Index: ossp-pkg/sa/VERSION
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 VERSION
  --- ossp-pkg/sa/VERSION	31 Jan 2002 21:35:13 -0000	1.2
  +++ ossp-pkg/sa/VERSION	15 Mar 2002 10:47:36 -0000	1.3
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP sa (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP sa, Version 0.9.0 (31-Jan-2002)
  +  This is OSSP sa, Version 0.9.1 (15-Mar-2002)
   
  Index: ossp-pkg/sa/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 aclocal.m4
  --- ossp-pkg/sa/aclocal.m4	30 Jan 2002 16:43:00 -0000	1.4
  +++ ossp-pkg/sa/aclocal.m4	15 Mar 2002 10:47:36 -0000	1.5
  @@ -77,7 +77,6 @@
                 * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
       esac
       AC_COMPILER_OPTION(defdbg, -DDEBUG, -DDEBUG, CFLAGS="$CFLAGS -DDEBUG")
  -    AC_COMPILER_OPTION(ggdb3, -ggdb3, -ggdb3, CFLAGS="$CFLAGS -ggdb3")
       CFLAGS="$CFLAGS -pedantic"
       CFLAGS="$CFLAGS -Wall"
       WMORE="-Wshadow -Wpointer-arith -Wcast-align -Winline"
  Index: ossp-pkg/sa/configure.ac
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 configure.ac
  --- ossp-pkg/sa/configure.ac	14 Mar 2002 15:39:43 -0000	1.11
  +++ ossp-pkg/sa/configure.ac	15 Mar 2002 10:47:36 -0000	1.12
  @@ -1,11 +1,11 @@
   dnl ##
  -dnl ##  SA - OSSP Socket Abstraction Library
  +dnl ##  OSSP sa - Socket Abstraction
   dnl ##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
   dnl ##  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
  -dnl ##  This file is part of OSSP SA, a socket abstraction library which
  -dnl ##  can be found at http://www.ossp.org/pkg/sa/.
  +dnl ##  This file is part of OSSP sa, a socket abstraction library which
  +dnl ##  can be found at http://www.ossp.org/pkg/lib/sa/.
   dnl ##
   dnl ##  Permission to use, copy, modify, and distribute this software for
   dnl ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/sa/sa-config.in
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 sa-config.in
  --- ossp-pkg/sa/sa-config.in	31 Jan 2002 21:35:13 -0000	1.3
  +++ ossp-pkg/sa/sa-config.in	15 Mar 2002 10:47:36 -0000	1.4
  @@ -1,12 +1,12 @@
   #!/bin/sh
   ##
  -##  SA - OSSP Logging Library
  +##  OSSP sa - Socket Abstraction
   ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
  -##  This file is part of OSSP SA, a socket abstraction library which
  -##  can be found at http://www.ossp.org/pkg/sa/.
  +##  This file is part of OSSP sa, a socket abstraction library which
  +##  can be found at http://www.ossp.org/pkg/lib/sa/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/sa/sa.ac
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 sa.ac
  --- ossp-pkg/sa/sa.ac	14 Mar 2002 15:39:43 -0000	1.9
  +++ ossp-pkg/sa/sa.ac	15 Mar 2002 10:47:36 -0000	1.10
  @@ -1,11 +1,11 @@
   dnl ##
  -dnl ##  SA - OSSP Socket Abstraction Library
  +dnl ##  OSSP sa - Socket Abstraction
   dnl ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
   dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
  -dnl ##  This file is part of OSSP SA, a socket abstraction library which
  -dnl ##  can be found at http://www.ossp.org/pkg/sa/.
  +dnl ##  This file is part of OSSP sa, a socket abstraction library which
  +dnl ##  can be found at http://www.ossp.org/pkg/lib/sa/.
   dnl ##
   dnl ##  Permission to use, copy, modify, and distribute this software for
   dnl ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.57 -r1.58 sa.c
  --- ossp-pkg/sa/sa.c	7 Mar 2002 11:51:54 -0000	1.57
  +++ ossp-pkg/sa/sa.c	15 Mar 2002 10:47:36 -0000	1.58
  @@ -1,11 +1,11 @@
   /*
  -**  SA - OSSP Socket Abstraction Library
  +**  OSSP sa - Socket Abstraction
   **  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
   **  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
  -**  This file is part of OSSP SA, a socket abstraction library which
  -**  can be found at http://www.ossp.org/pkg/sa/.
  +**  This file is part of OSSP sa, a socket abstraction library which
  +**  can be found at http://www.ossp.org/pkg/lib/sa/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/sa/sa.h
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 sa.h
  --- ossp-pkg/sa/sa.h	30 Jan 2002 16:43:00 -0000	1.29
  +++ ossp-pkg/sa/sa.h	15 Mar 2002 10:47:36 -0000	1.30
  @@ -1,11 +1,11 @@
   /*
  -**  SA - OSSP Socket Abstraction Library
  +**  OSSP sa - Socket Abstraction
   **  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
   **  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
  -**  This file is part of OSSP SA, a socket abstraction library which
  -**  can be found at http://www.ossp.org/pkg/sa/.
  +**  This file is part of OSSP sa, a socket abstraction library which
  +**  can be found at http://www.ossp.org/pkg/lib/sa/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/sa/sa.pod
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 sa.pod
  --- ossp-pkg/sa/sa.pod	31 Jan 2002 21:35:13 -0000	1.24
  +++ ossp-pkg/sa/sa.pod	15 Mar 2002 10:47:36 -0000	1.25
  @@ -1,11 +1,11 @@
   ##
  -##  SA - OSSP Socket Abstraction Library
  +##  OSSP sa - Socket Abstraction
   ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
  -##  This file is part of OSSP SA, a socket abstraction library which
  -##  can be found at http://www.ossp.org/pkg/sa/.
  +##  This file is part of OSSP sa, a socket abstraction library which
  +##  can be found at http://www.ossp.org/pkg/lib/sa/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/sa/sa_test.c
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 sa_test.c
  --- ossp-pkg/sa/sa_test.c	31 Jan 2002 21:17:50 -0000	1.15
  +++ ossp-pkg/sa/sa_test.c	15 Mar 2002 10:47:36 -0000	1.16
  @@ -1,11 +1,11 @@
   /*
  -**  SA - OSSP Socket Abstraction Library
  +**  OSSP sa - Socket Abstraction
   **  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
   **  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
  -**  This file is part of OSSP SA, a socket abstraction library which
  -**  can be found at http://www.ossp.org/pkg/sa/.
  +**  This file is part of OSSP sa, a socket abstraction library which
  +**  can be found at http://www.ossp.org/pkg/lib/sa/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that

From ossp-cvs-owner@ossp.org  Fri Mar 15 11:50:08 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 946BE7642C; Fri, 15 Mar 2002 11:50:08 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa AUTHORS NEWS
Message-Id: <20020315105008.946BE7642C@mail.ossp.org>
Date: Fri, 15 Mar 2002 11:50:08 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   15-Mar-2002 11:50:08
  Branch: HEAD                             Handle: 2002031510500800

  Added files:
    ossp-pkg/sa             AUTHORS NEWS

  Log:
    more docs

  Summary:
    Revision    Changes     Path
    1.1         +8  -0      ossp-pkg/sa/AUTHORS
    1.1         +13 -0      ossp-pkg/sa/NEWS
  ____________________________________________________________________________

  Index: ossp-pkg/sa/AUTHORS
  ============================================================
  $ cvs update -p -r1.1 AUTHORS
  
    AUTHORS
  
    This is a list of authors who have written
    or edited major parts of the OSSP sa sources.
  
    Ralf S. Engelschall   <rse@engelschall.com>
  
  Index: ossp-pkg/sa/NEWS
  ============================================================
  $ cvs update -p -r1.1 NEWS
  
    NEWS
    ====
  
    This is a list of user-visible and/or major changes to OSSP sa.
    For more details please have a look at the ChangeLog file.
  
    Changes between 0.9.0 and 0.9.1 (31-Jan-2002 to 15-Mar-2002)
  
     o upgraded build environment to autoconf 2.53 and shtool 1.6.0
     o fixed internal snprintf implementation
     o fixed internal test suite library
  

From ossp-cvs-owner@ossp.org  Fri Mar 15 11:54:50 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 502AA7642C; Fri, 15 Mar 2002 11:54:50 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib index.wml ossp-web/pkg/lib/sa index.wml
Message-Id: <20020315105450.502AA7642C@mail.ossp.org>
Date: Fri, 15 Mar 2002 11:54:50 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   15-Mar-2002 11:54:50
  Branch: HEAD                             Handle: 2002031510544900

  Modified files:
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/sa     index.wml

  Log:
    update for OSSP sa 0.9.1

  Summary:
    Revision    Changes     Path
    1.10        +1  -1      ossp-web/pkg/lib/index.wml
    1.2         +2  -2      ossp-web/pkg/lib/sa/index.wml
  ____________________________________________________________________________

  Index: ossp-web/pkg/lib/index.wml
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 index.wml
  --- ossp-web/pkg/lib/index.wml	8 Mar 2002 22:59:11 -0000	1.9
  +++ ossp-web/pkg/lib/index.wml	15 Mar 2002 10:54:49 -0000	1.10
  @@ -19,7 +19,7 @@
   			done=80 stable=none unstable=0.9.6>
     <pkg_item name="sa" longname="OSSP sa" type="lib"
               desc="Socket Abstraction"
  -			done=95 stable=none unstable=0.9.0>
  +			done=95 stable=none unstable=0.9.1>
     <pkg_item name="ex" longname="OSSP ex" type="lib"
               desc="Exception Handling"
   			done=95 stable=none unstable=0.9.1>
  Index: ossp-web/pkg/lib/sa/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/lib/sa/index.wml	15 Feb 2002 11:56:48 -0000	1.1
  +++ ossp-web/pkg/lib/sa/index.wml	15 Mar 2002 10:54:49 -0000	1.2
  @@ -21,7 +21,7 @@
   
   <pkg_status
       stable="none"    stable_date="none"
  -    unstable="0.9.0" unstable_date="31-Jan-2002"
  +    unstable="0.9.1" unstable_date="15-Mar-2002"
   	done=95>
   
   <h2>Source</h2>
  @@ -30,5 +30,5 @@
       url=$(FTP_ROOT_URL)/pkg/lib/sa/
       directory=$(FTP_ROOT_DIR)/pkg/lib/sa/
       files="sa-*.tar.gz" 
  -	stable="none" unstable="sa-0.9.0.tar.gz">
  +	stable="none" unstable="sa-0.9.1.tar.gz">
   	

From ossp-cvs-owner@ossp.org  Fri Mar 15 11:55:49 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3C4997642C; Fri, 15 Mar 2002 11:55:49 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new news.txt
Message-Id: <20020315105549.3C4997642C@mail.ossp.org>
Date: Fri, 15 Mar 2002 11:55:49 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   15-Mar-2002 11:55:49
  Branch: HEAD                             Handle: 2002031510554800

  Modified files:
    ossp-web/new            news.txt

  Log:
    add OSSP sa 0.9.1

  Summary:
    Revision    Changes     Path
    1.5         +1  -0      ossp-web/new/news.txt
  ____________________________________________________________________________

  Index: ossp-web/new/news.txt
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 news.txt
  --- ossp-web/new/news.txt	14 Mar 2002 18:38:59 -0000	1.4
  +++ ossp-web/new/news.txt	15 Mar 2002 10:55:48 -0000	1.5
  @@ -1,3 +1,4 @@
  +15-Mar-2002: Released L<OSSP sa> 0.9.1
   14-Mar-2002: Released T<OSSP lmtp2nntp> 1.2a4
   08-Mar-2002: Released L<OSSP ex> 0.9.1
   08-Mar-2002: Released L<OSSP var> 0.9.0

From ossp-cvs-owner@ossp.org  Fri Mar 15 12:23:15 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6F7E77642C; Fri, 15 Mar 2002 12:23:15 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val README VERSION
Message-Id: <20020315112315.6F7E77642C@mail.ossp.org>
Date: Fri, 15 Mar 2002 12:23:15 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   15-Mar-2002 12:23:15
  Branch: HEAD                             Handle: 2002031511231400

  Modified files:
    ossp-pkg/val            README VERSION

  Log:
    prepare for release

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/val/README
    1.3         +1  -1      ossp-pkg/val/VERSION
  ____________________________________________________________________________

  Index: ossp-pkg/val/README
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 README
  --- ossp-pkg/val/README	13 Mar 2002 18:35:58 -0000	1.3
  +++ ossp-pkg/val/README	15 Mar 2002 11:23:14 -0000	1.4
  @@ -5,7 +5,7 @@
       \_/ \__,_|_|
   
     OSSP val -- Value Access
  -  Version 0.1.0 (16-Jan-2002)
  +  Version 0.9.0 (15-Mar-2002)
   
     ABSTRACT
   
  Index: ossp-pkg/val/VERSION
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 VERSION
  --- ossp-pkg/val/VERSION	16 Jan 2002 14:09:18 -0000	1.2
  +++ ossp-pkg/val/VERSION	15 Mar 2002 11:23:14 -0000	1.3
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP val (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP val, Version 0.1.0 (16-Jan-2002)
  +  This is OSSP val, Version 0.9.0 (15-Mar-2002)
   

From ossp-cvs-owner@ossp.org  Fri Mar 15 12:33:00 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 43BFC7642C; Fri, 15 Mar 2002 12:33:00 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val Makefile.in devtool.conf val-config.pod
Message-Id: <20020315113300.43BFC7642C@mail.ossp.org>
Date: Fri, 15 Mar 2002 12:33:00 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   15-Mar-2002 12:33:00
  Branch: HEAD                             Handle: 2002031511325900

  Added files:
    ossp-pkg/val            val-config.pod
  Modified files:
    ossp-pkg/val            Makefile.in devtool.conf

  Log:
    add manual page stuff

  Summary:
    Revision    Changes     Path
    1.5         +31 -1      ossp-pkg/val/Makefile.in
    1.6         +1  -1      ossp-pkg/val/devtool.conf
    1.1         +168 -0     ossp-pkg/val/val-config.pod
  ____________________________________________________________________________

  Index: ossp-pkg/val/Makefile.in
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 Makefile.in
  --- ossp-pkg/val/Makefile.in	13 Mar 2002 18:35:58 -0000	1.4
  +++ ossp-pkg/val/Makefile.in	15 Mar 2002 11:32:59 -0000	1.5
  @@ -55,10 +55,22 @@
   TST_NAME    = val_test
   TST_OBJS    = val_test.o
   
  +MAN_NAME    = val-config.1 val.3
  +
  +#   helper macro for generating a Unix manual page
  +_MANPAGE = \
  +    V1=`$(SHTOOL) version -ltxt -dshort VERSION`; \
  +    V2=`$(SHTOOL) version -ltxt -dlong VERSION`; \
  +    D=`$(SHTOOL) version -ltxt -dlong VERSION |\
  +       sed -e 's;.*(;;' -e 's;).*;;'`; \
  +    $(POD2MAN) --section=$${SEC} --center="$${ONELINE}" \
  +               --release="$$D" --date="$${NAME} $$V1" $(S)$${BASENAME}.pod |\
  +    sed -e "s;VAR_VERSION_STR;$$V2;" >$${BASENAME}.$${SEC}
  +
   .SUFFIXES:
   .SUFFIXES: .c .o .lo
   
  -all: $(LIB_NAME) $(TST_NAME)
  +all: $(LIB_NAME) $(TST_NAME) $(MAN_NAME)
   
   .c.o:
   	$(CC) $(CPPFLAGS) $(CFLAGS) -c $<
  @@ -76,6 +88,15 @@
   $(TST_NAME): $(TST_OBJS) $(LIB_NAME)
   	@$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $(TST_NAME) $(TST_OBJS) $(LIB_NAME) $(LIBS)
   
  +val-config.1: val-config.pod VERSION
  +	BASENAME="val-config"; SEC=1; \
  +	NAME="VAL"; ONELINE="Value Access"; \
  +	$(_MANPAGE)
  +val.3: val.pod VERSION
  +	BASENAME="val"; SEC=3; \
  +	NAME="VAL"; ONELINE="Value Access"; \
  +	$(_MANPAGE)
  +
   check: $(TST_NAME)
   	@$(LIBTOOL) --mode=execute ./$(TST_NAME)
   
  @@ -84,14 +105,22 @@
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(includedir)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libdir)
  +	$(SHTOOL) mkdir -p -f -m 755 $(DESTDIR)$(mandir)/man1
  +	$(SHTOOL) mkdir -p -f -m 755 $(DESTDIR)$(mandir)/man3
   	$(SHTOOL) install -c -m 755 val-config $(DESTDIR)$(bindir)/
   	$(SHTOOL) install -c -m 644 val.h $(DESTDIR)$(includedir)/
   	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libval.la $(DESTDIR)$(libdir)/
  +	$(SHTOOL) install -c -m 644 var-config.1 $(DESTDIR)$(mandir)/man1/
  +	$(SHTOOL) install -c -m 644 var.3 $(DESTDIR)$(mandir)/man3/
   
   uninstall:
  +	-$(RM) $(DESTDIR)$(mandir)/man1/val-config.1
  +	-$(RM) $(DESTDIR)$(mandir)/man3/val.3
   	@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libval.la
   	-$(RM) $(DESTDIR)$(includedir)/val.h
   	-$(RM) $(DESTDIR)$(bindir)/val-config
  +	-$(RMDIR) $(DESTDIR)$(mandir)/man3 >/dev/null 2>&1 || $(TRUE)
  +	-$(RMDIR) $(DESTDIR)$(mandir)/man1 >/dev/null 2>&1 || $(TRUE)
   	-$(RMDIR) $(DESTDIR)$(libdir) >/dev/null 2>&1 || $(TRUE)
   	-$(RMDIR) $(DESTDIR)$(includedir) >/dev/null 2>&1 || $(TRUE)
   	-$(RMDIR) $(DESTDIR)$(bindir) >/dev/null 2>&1 || $(TRUE)
  @@ -112,4 +141,5 @@
   	-$(RM) configure config.h.in
   	-$(RM) shtool
   	-$(RM) ltmain.sh libtool.m4 config.guess config.sub
  +	-$(RM) val-config.1 val.3
   
  Index: ossp-pkg/val/devtool.conf
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 devtool.conf
  --- ossp-pkg/val/devtool.conf	13 Mar 2002 18:19:38 -0000	1.5
  +++ ossp-pkg/val/devtool.conf	15 Mar 2002 11:32:59 -0000	1.6
  @@ -31,5 +31,5 @@
       ./shtool fixperm -v .
       V=`./shtool version -l txt -d short VERSION`
       ./shtool tarball -o val-${V}.tar.gz -d val-${V} -u ossp -g ossp \
  -                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf' -c 'gzip --best' .
  +                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool*' -c 'gzip --best' .
   
  Index: ossp-pkg/val/val-config.pod
  ============================================================
  $ cvs update -p -r1.1 val-config.pod
  ##
  ##  OSSP val -- Value Access
  ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  ##
  ##  This file is part of OSSP val, a value access
  ##  library which can be found at http://www.ossp.org/pkg/lib/val/.
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  val-config.pod: library build utility manual page
  ##
  
  =pod
  
  =head1 NAME
  
  B<val-config> - OSSP val build utility
  
  =head1 VERSION
  
  OSSP val VAL_VERSION_STR
  
  =head1 SYNOPSIS
  
  B<val-config>
  [B<--help>]
  [B<--version>]
  [B<--all>]
  [B<--prefix>]
  [B<--exec-prefix>]
  [B<--bindir>]
  [B<--libdir>]
  [B<--includedir>]
  [B<--mandir>]
  [B<--datadir>]
  [B<--acdir>]
  [B<--cflags>]
  [B<--ldflags>]
  [B<--libs>]
  [B<--libs++>]
  
  =head1 DESCRIPTION
  
  The B<val-config> program is a little helper utility for easy configuring and
  building applications based on the val(3) library.  It can be used to query the
  C compiler and linker flags which are required to correctly compile and link
  the application against the val(3) library.
  
  =head1 OPTIONS
  
  B<val-config> accepts the following options:
  
  =over 4
  
  =item B<--help>
  
  Prints the short usage information.
  
  =item B<--version>
  
  Prints the version number and date of the installed val(3) library.
  
  =item B<--all>
  
  Forces the output of all flags, that is, including extra flags which are not
  B<VAL> specific.
  
  =item B<--prefix>
  
  Prints the installation prefix of architecture independent files
  
  =item B<--exec-prefix>
  
  Prints the installation prefix of architecture dependent files.
  
  =item B<--bindir>
  
  Prints the installation directory of binaries.
  
  =item B<--libdir>
  
  Prints the installation directory of libraries.
  
  =item B<--includedir>
  
  Prints the installation directory of include headers.
  
  =item B<--mandir>
  
  Prints the installation directory of manual pages.
  
  =item B<--datadir>
  
  Prints the installation directory of shared data.
  
  =item B<--acdir>
  
  Prints the installation directory of B<autoconf> data.
  
  =item B<--cflags>
  
  Prints the C compiler flags which are needed to compile the val(3)-based
  application. The output is usually added to the C<CFLAGS> variable of the
  applications C<Makefile>.
  
  =item B<--ldflags>
  
  Prints the linker flags (C<-L>) which are needed to link the application with
  the val(3) library. The output is usually added to the C<LDFLAGS> variable of
  the applications C<Makefile>.
  
  =item B<--libs>
  
  Prints the library flags (C<-l>) which are needed to link the application with
  the C val(3) library. The output is usually added to the C<LIBS> variable of the
  applications C<Makefile>.
  
  =item B<--libs++>
  
  Prints the library flags (C<-l>) which are needed to link the
  application with the C++ val(3) library. The output is usually added to
  the C<LIBS> variable of the applications C<Makefile>.
  
  =back
  
  =head1 EXAMPLE
  
   CC      = cc
   CFLAGS  = -O `val-config --cflags`
   LDFLAGS = `val-config --ldflags`
   LIBS    = -lm `val-config --libs`
  
   all: foo
   foo: foo.o
       $(CC) $(LDFLAGS) -o foo foo.o $(LIBS)
   foo.o: foo.c
       $(CC) $(CFLAGS) -c foo.c
  
  =head1 SEE ALSO
  
  val(3), cc(1).
  
  =head1 AUTHOR
  
   Ralf S. Engelschall
   rse@engelschall.com
   www.engelschall.com
  
  =cut
  

From ossp-cvs-owner@ossp.org  Fri Mar 15 12:35:09 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 839A17642C; Fri, 15 Mar 2002 12:35:09 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val .cvsignore Makefile.in val.pod
Message-Id: <20020315113509.839A17642C@mail.ossp.org>
Date: Fri, 15 Mar 2002 12:35:09 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   15-Mar-2002 12:35:09
  Branch: HEAD                             Handle: 2002031511350900

  Modified files:
    ossp-pkg/val            .cvsignore Makefile.in val.pod

  Log:
    ignore manpages and fix building of them

  Summary:
    Revision    Changes     Path
    1.2         +2  -0      ossp-pkg/val/.cvsignore
    1.6         +1  -0      ossp-pkg/val/Makefile.in
    1.12        +0  -2      ossp-pkg/val/val.pod
  ____________________________________________________________________________

  Index: ossp-pkg/val/.cvsignore
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 .cvsignore
  --- ossp-pkg/val/.cvsignore	16 Jan 2002 14:09:55 -0000	1.1
  +++ ossp-pkg/val/.cvsignore	15 Mar 2002 11:35:09 -0000	1.2
  @@ -9,3 +9,5 @@
   config.h
   config.guess
   Makefile
  +val-config.1
  +val.3
  Index: ossp-pkg/val/Makefile.in
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 Makefile.in
  --- ossp-pkg/val/Makefile.in	15 Mar 2002 11:32:59 -0000	1.5
  +++ ossp-pkg/val/Makefile.in	15 Mar 2002 11:35:09 -0000	1.6
  @@ -48,6 +48,7 @@
   SHTOOL      = ./shtool
   LIBTOOL     = ./libtool
   TRUE        = true
  +POD2MAN     = pod2man
   
   LIB_NAME    = libval.la
   LIB_OBJS    = val.lo
  Index: ossp-pkg/val/val.pod
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 val.pod
  --- ossp-pkg/val/val.pod	13 Mar 2002 18:39:40 -0000	1.11
  +++ ossp-pkg/val/val.pod	15 Mar 2002 11:35:09 -0000	1.12
  @@ -336,8 +336,6 @@
    2. bar.foo=123
    3. foo=456
   
  -=back
  -
   =head1 HISTORY
   
   B<OSSP val> was invented in January 2002 by Thomas Lotterer and Ralf S.

From ossp-cvs-owner@ossp.org  Fri Mar 15 12:41:14 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 89FDC7642C; Fri, 15 Mar 2002 12:41:14 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val Makefile.in
Message-Id: <20020315114114.89FDC7642C@mail.ossp.org>
Date: Fri, 15 Mar 2002 12:41:14 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   15-Mar-2002 12:41:14
  Branch: HEAD                             Handle: 2002031511411400

  Modified files:
    ossp-pkg/val            Makefile.in

  Log:
    fix naming

  Summary:
    Revision    Changes     Path
    1.7         +2  -2      ossp-pkg/val/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/val/Makefile.in
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 Makefile.in
  --- ossp-pkg/val/Makefile.in	15 Mar 2002 11:35:09 -0000	1.6
  +++ ossp-pkg/val/Makefile.in	15 Mar 2002 11:41:14 -0000	1.7
  @@ -111,8 +111,8 @@
   	$(SHTOOL) install -c -m 755 val-config $(DESTDIR)$(bindir)/
   	$(SHTOOL) install -c -m 644 val.h $(DESTDIR)$(includedir)/
   	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libval.la $(DESTDIR)$(libdir)/
  -	$(SHTOOL) install -c -m 644 var-config.1 $(DESTDIR)$(mandir)/man1/
  -	$(SHTOOL) install -c -m 644 var.3 $(DESTDIR)$(mandir)/man3/
  +	$(SHTOOL) install -c -m 644 val-config.1 $(DESTDIR)$(mandir)/man1/
  +	$(SHTOOL) install -c -m 644 val.3 $(DESTDIR)$(mandir)/man3/
   
   uninstall:
   	-$(RM) $(DESTDIR)$(mandir)/man1/val-config.1

From ossp-cvs-owner@ossp.org  Fri Mar 15 12:50:18 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1F3B97642C; Fri, 15 Mar 2002 12:50:18 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib index.wml ossp-web/pkg/lib/val index.wml
Message-Id: <20020315115018.1F3B97642C@mail.ossp.org>
Date: Fri, 15 Mar 2002 12:50:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   15-Mar-2002 12:50:18
  Branch: HEAD                             Handle: 2002031511501700

  Modified files:
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/val    index.wml

  Log:
    add OSSP val 0.9.0

  Summary:
    Revision    Changes     Path
    1.11        +1  -1      ossp-web/pkg/lib/index.wml
    1.3         +3  -2      ossp-web/pkg/lib/val/index.wml
  ____________________________________________________________________________

  Index: ossp-web/pkg/lib/index.wml
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 index.wml
  --- ossp-web/pkg/lib/index.wml	15 Mar 2002 10:54:49 -0000	1.10
  +++ ossp-web/pkg/lib/index.wml	15 Mar 2002 11:50:17 -0000	1.11
  @@ -31,7 +31,7 @@
   			done=95 stable=none unstable=0.9.0>
     <pkg_item name="val" longname="OSSP val" type="lib"
               desc="Value Access"
  -			done=95 stable=none unstable=none>
  +			done=95 stable=none unstable=0.9.0>
     <pkg_item name="act" longname="OSSP act" type="lib"
               desc="Abstract Container Types"
   			done=15 stable=none unstable=none>
  Index: ossp-web/pkg/lib/val/index.wml
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 index.wml
  --- ossp-web/pkg/lib/val/index.wml	15 Feb 2002 13:52:11 -0000	1.2
  +++ ossp-web/pkg/lib/val/index.wml	15 Mar 2002 11:50:17 -0000	1.3
  @@ -13,6 +13,7 @@
   such a dedicated facility nor an evaluation construct (which could be used to
   implement such a facility easily).
   
  +<p>
   In general, this is used for accessing C variables without having to know the
   actual symbol/address/reference. The typical use cases are in combination with
   flexible configuration parsing and supporting loosly-coupled DSO-based module
  @@ -27,7 +28,7 @@
   
   <pkg_status
       stable="none"    stable_date="none"
  -    unstable="none"  unstable_date="none"
  +    unstable="0.9.0"  unstable_date="15-Mar-2002"
   	done=100>
   
   <h2>Source</h2>
  @@ -36,5 +37,5 @@
       url=$(FTP_ROOT_URL)/pkg/lib/val/
       directory=$(FTP_ROOT_DIR)/pkg/lib/val/
       files="val-*.tar.gz" 
  -	stable="none" unstable="none">
  +	stable="none" unstable="val-0.9.0.tar.gz">
   	

From ossp-cvs-owner@ossp.org  Fri Mar 15 12:51:08 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F1B637642C; Fri, 15 Mar 2002 12:51:07 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new news.txt
Message-Id: <20020315115107.F1B637642C@mail.ossp.org>
Date: Fri, 15 Mar 2002 12:51:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-web                         Date:   15-Mar-2002 12:51:07
  Branch: HEAD                             Handle: 2002031511510700

  Modified files:
    ossp-web/new            news.txt

  Log:
    add OSSP val 0.9.0

  Summary:
    Revision    Changes     Path
    1.6         +1  -0      ossp-web/new/news.txt
  ____________________________________________________________________________

  Index: ossp-web/new/news.txt
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 news.txt
  --- ossp-web/new/news.txt	15 Mar 2002 10:55:48 -0000	1.5
  +++ ossp-web/new/news.txt	15 Mar 2002 11:51:07 -0000	1.6
  @@ -1,3 +1,4 @@
  +15-Mar-2002: Released L<OSSP val> 0.9.0
   15-Mar-2002: Released L<OSSP sa> 0.9.1
   14-Mar-2002: Released T<OSSP lmtp2nntp> 1.2a4
   08-Mar-2002: Released L<OSSP ex> 0.9.1

From ossp-cvs-owner@ossp.org  Fri Mar 15 13:32:38 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C9DB87643B; Fri, 15 Mar 2002 13:32:37 +0100 (CET)
From: "Ralf S. Engelschall" <rse@engelschall.com>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sugar README
Message-Id: <20020315123237.C9DB87643B@mail.ossp.org>
Date: Fri, 15 Mar 2002 13:32:37 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@engelschall.com
  Module: ossp-pkg                         Date:   15-Mar-2002 13:32:37
  Branch: HEAD                             Handle: 2002031512323700

  Modified files:
    ossp-pkg/sugar          README

  Log:
    remember abstract

  Summary:
    Revision    Changes     Path
    1.3         +17 -0      ossp-pkg/sugar/README
  ____________________________________________________________________________

  Index: ossp-pkg/sugar/README
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 README
  --- ossp-pkg/sugar/README	13 Mar 2002 09:19:03 -0000	1.2
  +++ ossp-pkg/sugar/README	15 Mar 2002 12:32:37 -0000	1.3
  @@ -8,6 +8,23 @@
     Copyright (c) 1999-2002 Ralf S. Engelschall
     Copyright (c) 1999-2002 Christian Reiber
   
  +  OSSP sugar is a markup language and corresponding processing tool for
  +  writing technical documentation that uses a mostly invisible markup
  +  language (so-called "syntactic sugar" in compiler construction folk
  +  terminology).
  +
  +  The idea is that the markup looks mostly like the textual output,
  +  i.e., the OSSP sugar source can be treated as its textual output
  +  format ("ASCII WYSIWYG"). Additionally, the OSSP sugar markup language
  +  is considered intuitive enough to be recognized and remembered
  +  easily, so writing technical documentation is mainly just a matter of
  +  performing a "brain dump".
  +
  +  OSSP sugar provides only a few markup concepts, but those are streched
  +  to their maximum. So, the syntactic principle is "keep it simple,
  +  stupid" (KISS), but still powerful enough to allow one to produce
  +  high-quality technical documentation.
  +
     o Extensible Markup Language (XML)
       http://www.w3.org/XML/
       http://www.xml.com/

From ossp-cvs-owner@ossp.org  Sat Mar 16 20:18:59 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 71AA6763E2; Sat, 16 Mar 2002 20:18:59 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/SHARE ossp_canvas.wml ossp_navbar.wml ossp_page.w...
Message-Id: <20020316191859.71AA6763E2@mail.ossp.org>
Date: Sat, 16 Mar 2002 20:18:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   16-Mar-2002 20:18:59
  Branch: HEAD                             Handle: 2002031619185800

  Modified files:
    ossp-web/SHARE          ossp_canvas.wml ossp_navbar.wml ossp_page.wml

  Log:
    fix markup code to conform to HTML 4.01

  Summary:
    Revision    Changes     Path
    1.4         +0  -1      ossp-web/SHARE/ossp_canvas.wml
    1.4         +0  -4      ossp-web/SHARE/ossp_navbar.wml
    1.2         +1  -0      ossp-web/SHARE/ossp_page.wml
  ____________________________________________________________________________

  Index: ossp-web/SHARE/ossp_canvas.wml
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 ossp_canvas.wml
  --- ossp-web/SHARE/ossp_canvas.wml	14 Mar 2002 18:38:46 -0000	1.3
  +++ ossp-web/SHARE/ossp_canvas.wml	16 Mar 2002 19:18:58 -0000	1.4
  @@ -65,7 +65,6 @@
       <td width=1 bgcolor="#c5c5c0"><imgdot width=1></td>
       <td width=100%>&nbsp;</td>
       <td width=400 background="$(IMG)/ossp-bg-dark.jpg"><imgdot width=400></td>
  -    </td>
     </tr>
   </table>
   <<..
  Index: ossp-web/SHARE/ossp_navbar.wml
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 ossp_navbar.wml
  --- ossp-web/SHARE/ossp_navbar.wml	14 Feb 2002 16:26:15 -0000	1.3
  +++ ossp-web/SHARE/ossp_navbar.wml	16 Mar 2002 19:18:58 -0000	1.4
  @@ -28,13 +28,11 @@
     %body
     <navbar:epilog type=SS>\
             </span>
  -          </b>\
           </td>\
         </tr>
     </navbar:epilog>
     <navbar:epilog type=SS pos=last>\
             </span>
  -          </b>\
           </td>\
         </tr>
         <tr>
  @@ -126,13 +124,11 @@
     %body
     <navbar:epilog type=SS>\
             </span>
  -          </b>\
           </td>\
         </tr>
     </navbar:epilog>
     <navbar:epilog type=SS pos=last>\
             </span>
  -          </b>\
           </td>\
         </tr>
         <tr>
  Index: ossp-web/SHARE/ossp_page.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 ossp_page.wml
  --- ossp-web/SHARE/ossp_page.wml	13 Feb 2002 16:34:56 -0000	1.1
  +++ ossp-web/SHARE/ossp_page.wml	16 Mar 2002 19:18:58 -0000	1.2
  @@ -5,6 +5,7 @@
   
   #   the general structure of the HTML page markup
   [PAGE_HEAD:\
  +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
   <html>
     <head>
       {#PAGE_HEAD#}

From ossp-cvs-owner@ossp.org  Sun Mar 17 11:25:55 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C27EB7643D; Sun, 17 Mar 2002 11:25:54 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/xds .cvsignore LICENSE Makefile.in README TODO ac...
Message-Id: <20020317102554.C27EB7643D@mail.ossp.org>
Date: Sun, 17 Mar 2002 11:25:54 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-Mar-2002 11:25:54
  Branch: HEAD                             Handle: 2002031710255201

  Modified files:
    ossp-pkg/xds            .cvsignore LICENSE Makefile.in README TODO
                            aclocal.m4 configure.ac devtool.conf devtool.func
                            xds-config.in xds-config.pod xds-xml.dtd xds.c
                            xds.h.in xds.m4 xds.pod xds_engine_xdr.c
                            xds_engine_xml.c xds_p.h xds_test.sh
                            xds_test_lib.c xds_test_xdr.c xds_test_xml.c

  Log:
    update texts

  Summary:
    Revision    Changes     Path
    1.9         +13 -5      ossp-pkg/xds/.cvsignore
    1.4         +3  -3      ossp-pkg/xds/LICENSE
    1.38        +3  -3      ossp-pkg/xds/Makefile.in
    1.6         +13 -7      ossp-pkg/xds/README
    1.29        +1  -59     ossp-pkg/xds/TODO
    1.6         +3  -6      ossp-pkg/xds/aclocal.m4
    1.25        +7  -8      ossp-pkg/xds/configure.ac
    1.2         +3  -3      ossp-pkg/xds/devtool.conf
    1.2         +1  -0      ossp-pkg/xds/devtool.func
    1.5         +4  -4      ossp-pkg/xds/xds-config.in
    1.5         +4  -4      ossp-pkg/xds/xds-config.pod
    1.5         +3  -3      ossp-pkg/xds/xds-xml.dtd
    1.9         +3  -3      ossp-pkg/xds/xds.c
    1.20        +3  -3      ossp-pkg/xds/xds.h.in
    1.5         +3  -3      ossp-pkg/xds/xds.m4
    1.16        +9  -3      ossp-pkg/xds/xds.pod
    1.12        +3  -3      ossp-pkg/xds/xds_engine_xdr.c
    1.10        +4  -4      ossp-pkg/xds/xds_engine_xml.c
    1.9         +3  -3      ossp-pkg/xds/xds_p.h
    1.7         +3  -3      ossp-pkg/xds/xds_test.sh
    1.9         +3  -3      ossp-pkg/xds/xds_test_lib.c
    1.10        +3  -3      ossp-pkg/xds/xds_test_xdr.c
    1.8         +3  -3      ossp-pkg/xds/xds_test_xml.c
  ____________________________________________________________________________

  Index: ossp-pkg/xds/.cvsignore
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 .cvsignore
  --- ossp-pkg/xds/.cvsignore	11 Aug 2001 15:28:53 -0000	1.8
  +++ ossp-pkg/xds/.cvsignore	17 Mar 2002 10:25:52 -0000	1.9
  @@ -1,8 +1,16 @@
  -.*.t
   .*.l
  -xds.3
  -xds.h Makefile configure
  -xds-config
  -xds-config.1
  +.*.t
  +Makefile 
  +config.guess
   config.h
  +config.h.in
  +config.sub
  +configure
   libtool
  +libtool.m4
  +ltmain.sh
  +shtool
  +xds-config
  +xds-config.1
  +xds.3
  +xds.h 
  Index: ossp-pkg/xds/LICENSE
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 LICENSE
  --- ossp-pkg/xds/LICENSE	2 Jan 2002 17:13:44 -0000	1.3
  +++ ossp-pkg/xds/LICENSE	17 Mar 2002 10:25:52 -0000	1.4
  @@ -1,9 +1,9 @@
  -XDS - OSSP Extensible Data Serialization Library
  +OSSP xds - Extensible Data Serialization
   Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   
  -This file is part of OSSP XDS, an extensible data serialization
  -library which can be found at http://www.ossp.org/pkg/xds/.
  +This file is part of OSSP xds, an extensible data serialization
  +library which can be found at http://www.ossp.org/pkg/lib/xds/.
   
   Permission to use, copy, modify, and distribute this software for
   any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/xds/Makefile.in
  ============================================================
  $ cvs diff -u -r1.37 -r1.38 Makefile.in
  --- ossp-pkg/xds/Makefile.in	2 Jan 2002 18:10:41 -0000	1.37
  +++ ossp-pkg/xds/Makefile.in	17 Mar 2002 10:25:52 -0000	1.38
  @@ -1,10 +1,10 @@
   ##
  -##  XDS - OSSP Extensible Data Serialization Library
  +##  OSSP xds - Extensible Data Serialization
   ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
  -##  This file is part of OSSP XDS, an extensible data serialization
  -##  library which can be found at http://www.ossp.org/pkg/xds/.
  +##  This file is part of OSSP xds, an extensible data serialization
  +##  library which can be found at http://www.ossp.org/pkg/lib/xds/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/xds/README
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 README
  --- ossp-pkg/xds/README	2 Jan 2002 17:13:44 -0000	1.5
  +++ ossp-pkg/xds/README	17 Mar 2002 10:25:52 -0000	1.6
  @@ -1,18 +1,24 @@
  - 
  -  OSSP XDS - eXtensible Data Serialization
  +           _     
  +  __  ____| |___ 
  +  \ \/ / _` / __|
  +   >  < (_| \__ \
  +  /_/\_\__,_|___/
  +                         
  +  OSSP xds - eXtensible Data Serialization
     Version 0.9.0 (11-Aug-2001)
   
     ABSTRACT
   
  -  The OSSP XDS library is [...]
  +  The OSSP xds library is generic and extensible encoding and decoding
  +  framework for the serialization of arbitrary ISO-C data types.
   
     COPYRIGHT AND LICENSE
   
     Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   
  -  This file is part of OSSP XDS, an extensible data serialization
  -  library which can be found at http://www.ossp.org/pkg/xds/.
  +  This file is part of OSSP xds, an extensible data serialization
  +  library which can be found at http://www.ossp.org/pkg/lib/xds/.
   
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
  @@ -36,6 +42,6 @@
   
     The documentation and latest release can be found on
   
  -  o http://www.ossp.org/pkg/xds/
  -  o  ftp://ftp.ossp.org/pkg/xds/
  +  o http://www.ossp.org/pkg/lib/xds/
  +  o  ftp://ftp.ossp.org/pkg/lib/xds/
   
  Index: ossp-pkg/xds/TODO
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 TODO
  --- ossp-pkg/xds/TODO	2 Jan 2002 18:36:00 -0000	1.28
  +++ ossp-pkg/xds/TODO	17 Mar 2002 10:25:52 -0000	1.29
  @@ -1,61 +1,3 @@
  -TODO LIST AND MILESTONES
  -========================
  -
  -o M1 (peti) [11-Jun-2001]
  - - evaluation checklist for XDS and AMP
  -   done: 100% [-> EVAL]
  -
  -o M2 (peti+rse) [25-Jun-2001]
  - - design/architecture paper (authentication+encryption framework)
  -   (< 10KB Text + 1x Figure)
  -   done: 30% [-> architecture.fig]
  -
  -o M3 (peti+rse) [2-Jul-2001]
  - - design libxds API
  -   done: 100% [-> libxds/xds.h + libxds/xds.pod]
  -
  -o M4 (peti) [4 weeks until 30-Jul-2001]
  - - implementation of libxds library framework
  -   done: 100% [-> libxds/xds.c]
  -
  - - implementation XDR engines for basic data types.
  -   done: 100% [-> libxds/xds_engine_xdr.c]
  -
  - - implementation XML engines for basic data types.
  -   done: 100% [-> libxds/xds_engine_xml.c]
  -
  - - regression tests for libxds (make check)
  -   done: 100% [-> xds_test_*.c]
  -
  - - UFT-8 RFC: rfc2279.txt
  -   done: 100%
  -
  - - conversion of LaTeX documentation into POD source format
  -   for Unix manual page xds(3).
  -   done: 100%
  -
  - - autoconf should find the types for int32 etc. even if they're not
  -   defined in sys/types.h. And it should fallback to own types in
  -   case no vendor supplied type is found.
  -   done: 0%
  -
  -o M5 (peti+rse) [1 week until 06-Aug-2001]
  - - [peti] documentation for libxds (xds.pod)
  - - [rse]  OSSP adjustments for libxds
  -   done: 100%
  -
  -o M6 (peti+rse) [1 week until 13-Aug-2001]
  - - design API for libamp
  -
  -o M7 (peti) [4 weeks until 10-Sep-2001]
  - - implementation of libamp library framework
  - - implementation of libamp backends SHM, TCP and UDP
  - - regression tests for libamp
  -
  -o M8 (peti+rse) [1 week until 17-Sep-2001]
  - - [peti] documentation for libamp
  - - [rse]  OSSP adjustments for libamp
  -
  - ----
   
    change xds_init() to return xds_rc_t
  +
  Index: ossp-pkg/xds/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 aclocal.m4
  --- ossp-pkg/xds/aclocal.m4	2 Jan 2002 17:13:44 -0000	1.5
  +++ ossp-pkg/xds/aclocal.m4	17 Mar 2002 10:25:53 -0000	1.6
  @@ -1,10 +1,10 @@
   dnl ##
  -dnl ##  XDS - OSSP Extensible Data Serialization Library
  +dnl ##  OSSP xds - Extensible Data Serialization
   dnl ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   dnl ##
  -dnl ##  This file is part of OSSP XDS, an extensible data serialization
  -dnl ##  library which can be found at http://www.ossp.org/pkg/xds/.
  +dnl ##  This file is part of OSSP xds, an extensible data serialization
  +dnl ##  library which can be found at http://www.ossp.org/pkg/lib/xds/.
   dnl ##
   dnl ##  Permission to use, copy, modify, and distribute this software for
   dnl ##  any purpose with or without fee is hereby granted, provided that
  @@ -37,7 +37,6 @@
   dnl ##
   
   AC_DEFUN(AC_HEADLINE,[dnl
  -AC_DIVERT_PUSH(NOTICE)dnl
   #   configuration header
   if test ".`echo dummy [$]@ | grep help`" = .; then
       #   bootstrapping shtool
  @@ -64,7 +63,6 @@
       $3_HEX="`$ac_shtool version -l c -d hex $ac_srcdir/$4`"
       AC_SUBST($3_HEX)
   fi
  -AC_DIVERT_POP()
   ])dnl
   
   dnl ##
  @@ -149,7 +147,6 @@
           *-pipe* ) ;;
                 * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
       esac
  -    AC_COMPILER_OPTION(ggdb3, -ggdb3, -ggdb3, CFLAGS="$CFLAGS -ggdb3")
       CFLAGS="$CFLAGS -pedantic"
       CFLAGS="$CFLAGS -Wall"
       WMORE="-Wshadow -Wpointer-arith -Wcast-align -Winline"
  Index: ossp-pkg/xds/configure.ac
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 configure.ac
  --- ossp-pkg/xds/configure.ac	31 Jan 2002 09:09:01 -0000	1.24
  +++ ossp-pkg/xds/configure.ac	17 Mar 2002 10:25:53 -0000	1.25
  @@ -1,10 +1,10 @@
   dnl ##
  -dnl ##  XDS - OSSP Extensible Data Serialization Library
  +dnl ##  OSSP xds - Extensible Data Serialization
   dnl ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   dnl ##
  -dnl ##  This file is part of OSSP XDS, an extensible data serialization
  -dnl ##  library which can be found at http://www.ossp.org/pkg/xds/.
  +dnl ##  This file is part of OSSP xds, an extensible data serialization
  +dnl ##  library which can be found at http://www.ossp.org/pkg/lib/xds/.
   dnl ##
   dnl ##  Permission to use, copy, modify, and distribute this software for
   dnl ##  any purpose with or without fee is hereby granted, provided that
  @@ -27,9 +27,8 @@
   dnl ##  configure.ac: autoconf script source
   dnl ##
   
  -AC_PREREQ(2.52)
  -AC_REVISION(1.0)
  -AC_INIT(xds.h.in)
  +AC_PREREQ(2.53)
  +AC_INIT
   
   AC_HEADLINE(dnl
   OSSP xds, eXtensible Data Serialization, dnl
  @@ -37,10 +36,9 @@
   [Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)])
   AC_PLATFORM(PLATFORM)
  -AC_CONFIG_HEADERS(config.h)
   
   AC_MSG_PART(Build Tools)
  -AC_SET_MAKE
  +AC_PROG_MAKE_SET
   AC_PROG_CC
   AC_CHECK_PROG(LATEX, latex, latex, :)
   AC_CHECK_PROG(POD2MAN, pod2man, pod2man, :)
  @@ -55,6 +53,7 @@
   AC_CONFIGURE_XDS
   
   AC_MSG_PART(Output Substitution)
  +AC_CONFIG_HEADERS(config.h)
   AC_CONFIG_FILES(xds.h xds-config Makefile docs/Makefile)
   AC_CONFIG_COMMANDS([default], [chmod a+x xds-config; chmod -w xds.h Makefile docs/Makefile])
   AC_OUTPUT
  Index: ossp-pkg/xds/devtool.conf
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.conf
  --- ossp-pkg/xds/devtool.conf	2 Jan 2002 18:10:41 -0000	1.1
  +++ ossp-pkg/xds/devtool.conf	17 Mar 2002 10:25:53 -0000	1.2
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   1.5.4 "1.5.*" all
  +    @autogen shtool   1.6.0 "1.6.*" all
       @autogen libtool  1.4.2 "1.4*"
  -    @autogen autoconf 2.52  "2.5.*"
  +    @autogen autoconf 2.53  "2.5[3-9]*"
   
   %autoclean
       @autoclean shtool
  @@ -21,7 +21,7 @@
           "$@"
   
   %version
  -    ./shtool version -l c -n "OSSP XDS" -p "xds_" -e xds_version.c
  +    ./shtool version -l c -n "OSSP xds" -p "xds_" -e xds_version.c
   
   %dist
       make distclean >/dev/null 2>&1
  Index: ossp-pkg/xds/devtool.func
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.func
  --- ossp-pkg/xds/devtool.func	2 Jan 2002 18:10:41 -0000	1.1
  +++ ossp-pkg/xds/devtool.func	17 Mar 2002 10:25:53 -0000	1.2
  @@ -33,6 +33,7 @@
               echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
               autoconf
               autoheader 2>&1 | grep -v "is unchanged"
  +            rm -rf autom4te.cache >/dev/null 2>&1
               ;;
           libtool )
               libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
  Index: ossp-pkg/xds/xds-config.in
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xds-config.in
  --- ossp-pkg/xds/xds-config.in	2 Jan 2002 17:13:44 -0000	1.4
  +++ ossp-pkg/xds/xds-config.in	17 Mar 2002 10:25:53 -0000	1.5
  @@ -1,11 +1,11 @@
   #!/bin/sh
   ##
  -##  XDS - OSSP Extensible Data Serialization Library
  +##  OSSP xds - Extensible Data Serialization
   ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
  -##  This file is part of OSSP XDS, an extensible data serialization
  -##  library which can be found at http://www.ossp.org/pkg/xds/.
  +##  This file is part of OSSP xds, an extensible data serialization
  +##  library which can be found at http://www.ossp.org/pkg/lib/xds/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  @@ -81,7 +81,7 @@
               exit 0
               ;;
           --version|-v)
  -            echo "OSSP XDS $xds_version"
  +            echo "OSSP xds $xds_version"
               exit 0
               ;;
           --all)
  Index: ossp-pkg/xds/xds-config.pod
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xds-config.pod
  --- ossp-pkg/xds/xds-config.pod	2 Jan 2002 17:13:44 -0000	1.4
  +++ ossp-pkg/xds/xds-config.pod	17 Mar 2002 10:25:53 -0000	1.5
  @@ -1,10 +1,10 @@
   ##
  -##  XDS - OSSP Extensible Data Serialization Library
  +##  OSSP xds - Extensible Data Serialization
   ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
  -##  This file is part of OSSP XDS, an extensible data serialization
  -##  library which can be found at http://www.ossp.org/pkg/xds/.
  +##  This file is part of OSSP xds, an extensible data serialization
  +##  library which can be found at http://www.ossp.org/pkg/lib/xds/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  @@ -35,7 +35,7 @@
   
   =head1 VERSION
   
  -OSSP XDS XDS_VERSION_STR
  +OSSP xds XDS_VERSION_STR
   
   =head1 SYNOPSIS
   
  Index: ossp-pkg/xds/xds-xml.dtd
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xds-xml.dtd
  --- ossp-pkg/xds/xds-xml.dtd	2 Jan 2002 17:13:44 -0000	1.4
  +++ ossp-pkg/xds/xds-xml.dtd	17 Mar 2002 10:25:53 -0000	1.5
  @@ -1,10 +1,10 @@
   <!-- ===========================================================
  -     XDS - OSSP Extensible Data Serialization Library
  +     OSSP xds - Extensible Data Serialization
        Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
        Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   
  -     This file is part of OSSP XDS, an extensible data serialization
  -     library which can be found at http://www.ossp.org/pkg/xds/.
  +     This file is part of OSSP xds, an extensible data serialization
  +     library which can be found at http://www.ossp.org/pkg/lib/xds/.
   
        Permission to use, copy, modify, and distribute this software for
        any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/xds/xds.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 xds.c
  --- ossp-pkg/xds/xds.c	2 Jan 2002 17:13:44 -0000	1.8
  +++ ossp-pkg/xds/xds.c	17 Mar 2002 10:25:53 -0000	1.9
  @@ -1,10 +1,10 @@
   /*
  -**  XDS - OSSP Extensible Data Serialization Library
  +**  OSSP xds - Extensible Data Serialization
   **  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
  -**  This file is part of OSSP XDS, an extensible data serialization
  -**  library which can be found at http://www.ossp.org/pkg/xds/.
  +**  This file is part of OSSP xds, an extensible data serialization
  +**  library which can be found at http://www.ossp.org/pkg/lib/xds/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/xds/xds.h.in
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 xds.h.in
  --- ossp-pkg/xds/xds.h.in	2 Jan 2002 17:13:44 -0000	1.19
  +++ ossp-pkg/xds/xds.h.in	17 Mar 2002 10:25:53 -0000	1.20
  @@ -1,10 +1,10 @@
   /*
  -**  XDS - OSSP Extensible Data Serialization Library
  +**  OSSP xds - Extensible Data Serialization
   **  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
  -**  This file is part of OSSP XDS, an extensible data serialization
  -**  library which can be found at http://www.ossp.org/pkg/xds/.
  +**  This file is part of OSSP xds, an extensible data serialization
  +**  library which can be found at http://www.ossp.org/pkg/lib/xds/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/xds/xds.m4
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 xds.m4
  --- ossp-pkg/xds/xds.m4	2 Jan 2002 17:13:44 -0000	1.4
  +++ ossp-pkg/xds/xds.m4	17 Mar 2002 10:25:53 -0000	1.5
  @@ -1,10 +1,10 @@
   dnl ##
  -dnl ##  XDS - OSSP Extensible Data Serialization Library
  +dnl ##  OSSP xds - Extensible Data Serialization
   dnl ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   dnl ##
  -dnl ##  This file is part of OSSP XDS, an extensible data serialization
  -dnl ##  library which can be found at http://www.ossp.org/pkg/xds/.
  +dnl ##  This file is part of OSSP xds, an extensible data serialization
  +dnl ##  library which can be found at http://www.ossp.org/pkg/lib/xds/.
   dnl ##
   dnl ##  Permission to use, copy, modify, and distribute this software for
   dnl ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/xds/xds.pod
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 xds.pod
  --- ossp-pkg/xds/xds.pod	3 Jan 2002 14:22:33 -0000	1.15
  +++ ossp-pkg/xds/xds.pod	17 Mar 2002 10:25:53 -0000	1.16
  @@ -1,10 +1,10 @@
   ##
  -##  XDS - OSSP Extensible Data Serialization Library
  +##  OSSP xds - Extensible Data Serialization
   ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
  -##  This file is part of OSSP XDS, an extensible data serialization
  -##  library which can be found at http://www.ossp.org/pkg/xds/.
  +##  This file is part of OSSP xds, an extensible data serialization
  +##  library which can be found at http://www.ossp.org/pkg/lib/xds/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  @@ -610,6 +610,12 @@
   R. Srinivasan, August 1995
   
   XML-RPC Home Page: http://www.xmlrpc.org/
  +
  +=head1 HISTORY
  +
  +B<OSSP var> was initially written by Peter Simons
  +E<lt>simons@crypt.toE<gt> in August 2001 under contract with the B<OSSP>
  +sponsor B<Cable & Wireless Germany>.
   
   =cut
   
  Index: ossp-pkg/xds/xds_engine_xdr.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 xds_engine_xdr.c
  --- ossp-pkg/xds/xds_engine_xdr.c	2 Jan 2002 17:13:44 -0000	1.11
  +++ ossp-pkg/xds/xds_engine_xdr.c	17 Mar 2002 10:25:53 -0000	1.12
  @@ -1,10 +1,10 @@
   /*
  -**  XDS - OSSP Extensible Data Serialization Library
  +**  OSSP xds - Extensible Data Serialization
   **  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
  -**  This file is part of OSSP XDS, an extensible data serialization
  -**  library which can be found at http://www.ossp.org/pkg/xds/.
  +**  This file is part of OSSP xds, an extensible data serialization
  +**  library which can be found at http://www.ossp.org/pkg/lib/xds/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/xds/xds_engine_xml.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 xds_engine_xml.c
  --- ossp-pkg/xds/xds_engine_xml.c	2 Jan 2002 17:13:44 -0000	1.9
  +++ ossp-pkg/xds/xds_engine_xml.c	17 Mar 2002 10:25:53 -0000	1.10
  @@ -1,10 +1,10 @@
   /*
  -**  XDS - OSSP Extensible Data Serialization Library
  +**  OSSP xds - Extensible Data Serialization
   **  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
  -**  This file is part of OSSP XDS, an extensible data serialization
  -**  library which can be found at http://www.ossp.org/pkg/xds/.
  +**  This file is part of OSSP xds, an extensible data serialization
  +**  library which can be found at http://www.ossp.org/pkg/lib/xds/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  @@ -39,7 +39,7 @@
   
   static const char xds_xml_begin_text[] =
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\">\n"
  -    "<!DOCTYPE xds SYSTEM \"http://www.ossp.org/pkg/xds/xds-xml.dtd\">\n"
  +    "<!DOCTYPE xds SYSTEM \"http://www.ossp.org/pkg/lib/xds/xds-xml.dtd\">\n"
       "<xds>\n";
   
   static const char xds_xml_end_text[] =
  Index: ossp-pkg/xds/xds_p.h
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 xds_p.h
  --- ossp-pkg/xds/xds_p.h	2 Jan 2002 17:13:44 -0000	1.8
  +++ ossp-pkg/xds/xds_p.h	17 Mar 2002 10:25:53 -0000	1.9
  @@ -1,10 +1,10 @@
   /*
  -**  XDS - OSSP Extensible Data Serialization Library
  +**  OSSP xds - Extensible Data Serialization
   **  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
  -**  This file is part of OSSP XDS, an extensible data serialization
  -**  library which can be found at http://www.ossp.org/pkg/xds/.
  +**  This file is part of OSSP xds, an extensible data serialization
  +**  library which can be found at http://www.ossp.org/pkg/lib/xds/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/xds/xds_test.sh
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 xds_test.sh
  --- ossp-pkg/xds/xds_test.sh	2 Jan 2002 17:13:44 -0000	1.6
  +++ ossp-pkg/xds/xds_test.sh	17 Mar 2002 10:25:53 -0000	1.7
  @@ -1,11 +1,11 @@
   #!/bin/sh
   ##
  -##  XDS - OSSP Extensible Data Serialization Library
  +##  OSSP xds - Extensible Data Serialization
   ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
  -##  This file is part of OSSP XDS, an extensible data serialization
  -##  library which can be found at http://www.ossp.org/pkg/xds/.
  +##  This file is part of OSSP xds, an extensible data serialization
  +##  library which can be found at http://www.ossp.org/pkg/lib/xds/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/xds/xds_test_lib.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 xds_test_lib.c
  --- ossp-pkg/xds/xds_test_lib.c	2 Jan 2002 17:13:45 -0000	1.8
  +++ ossp-pkg/xds/xds_test_lib.c	17 Mar 2002 10:25:53 -0000	1.9
  @@ -1,10 +1,10 @@
   /*
  -**  XDS - OSSP Extensible Data Serialization Library
  +**  OSSP xds - Extensible Data Serialization
   **  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
  -**  This file is part of OSSP XDS, an extensible data serialization
  -**  library which can be found at http://www.ossp.org/pkg/xds/.
  +**  This file is part of OSSP xds, an extensible data serialization
  +**  library which can be found at http://www.ossp.org/pkg/lib/xds/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/xds/xds_test_xdr.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 xds_test_xdr.c
  --- ossp-pkg/xds/xds_test_xdr.c	2 Jan 2002 17:13:45 -0000	1.9
  +++ ossp-pkg/xds/xds_test_xdr.c	17 Mar 2002 10:25:53 -0000	1.10
  @@ -1,10 +1,10 @@
   /*
  -**  XDS - OSSP Extensible Data Serialization Library
  +**  OSSP xds - Extensible Data Serialization
   **  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
  -**  This file is part of OSSP XDS, an extensible data serialization
  -**  library which can be found at http://www.ossp.org/pkg/xds/.
  +**  This file is part of OSSP xds, an extensible data serialization
  +**  library which can be found at http://www.ossp.org/pkg/lib/xds/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/xds/xds_test_xml.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 xds_test_xml.c
  --- ossp-pkg/xds/xds_test_xml.c	2 Jan 2002 17:13:45 -0000	1.7
  +++ ossp-pkg/xds/xds_test_xml.c	17 Mar 2002 10:25:53 -0000	1.8
  @@ -1,10 +1,10 @@
   /*
  -**  XDS - OSSP Extensible Data Serialization Library
  +**  OSSP xds - Extensible Data Serialization
   **  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
  -**  This file is part of OSSP XDS, an extensible data serialization
  -**  library which can be found at http://www.ossp.org/pkg/xds/.
  +**  This file is part of OSSP xds, an extensible data serialization
  +**  library which can be found at http://www.ossp.org/pkg/lib/xds/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that

From ossp-cvs-owner@ossp.org  Sun Mar 17 11:27:20 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F32567643D; Sun, 17 Mar 2002 11:27:19 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/xds xds_version.c
Message-Id: <20020317102719.F32567643D@mail.ossp.org>
Date: Sun, 17 Mar 2002 11:27:19 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-Mar-2002 11:27:19
  Branch: HEAD                             Handle: 2002031710271900

  Modified files:
    ossp-pkg/xds            xds_version.c

  Log:
    update version

  Summary:
    Revision    Changes     Path
    1.2         +7  -7      ossp-pkg/xds/xds_version.c
  ____________________________________________________________________________

  Index: ossp-pkg/xds/xds_version.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 xds_version.c
  --- ossp-pkg/xds/xds_version.c	11 Aug 2001 15:23:09 -0000	1.1
  +++ ossp-pkg/xds/xds_version.c	17 Mar 2002 10:27:19 -0000	1.2
  @@ -1,5 +1,5 @@
   /*
  -**  xds_version.c -- Version Information for XDS (syntax: C/C++)
  +**  xds_version.c -- Version Information for OSSP xds (syntax: C/C++)
   **  [automatically generated and maintained by GNU shtool]
   */
   
  @@ -34,12 +34,12 @@
   xds_version_t xds_version = {
       0x009200,
       "0.9.0",
  -    "0.9.0 (11-Aug-2001)",
  -    "This is XDS, Version 0.9.0 (11-Aug-2001)",
  -    "XDS 0.9.0 (11-Aug-2001)",
  -    "XDS/0.9.0",
  -    "@(#)XDS 0.9.0 (11-Aug-2001)",
  -    "$Id: xds_version.c,v 1.1 2001/08/11 15:23:09 rse Exp $"
  +    "0.9.0 (17-Mar-2002)",
  +    "This is OSSP xds, Version 0.9.0 (17-Mar-2002)",
  +    "OSSP xds 0.9.0 (17-Mar-2002)",
  +    "OSSP xds/0.9.0",
  +    "@(#)OSSP xds 0.9.0 (17-Mar-2002)",
  +    "$Id: xds_version.c,v 1.2 2002/03/17 10:27:19 rse Exp $"
   };
   
   #endif /* _XDS_VERSION_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Mon Mar 25 13:23:14 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F305576369; Mon, 25 Mar 2002 13:23:13 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp Makefile.in README lmtp2nntp_version.c
Message-Id: <20020325122313.F305576369@mail.ossp.org>
Date: Mon, 25 Mar 2002 13:23:13 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   25-Mar-2002 13:23:13
  Branch: HEAD                             Handle: 2002032512231300

  Modified files:
    ossp-pkg/lmtp2nntp      Makefile.in README lmtp2nntp_version.c

  Log:
    flush date change

  Summary:
    Revision    Changes     Path
    1.48        +7  -5      ossp-pkg/lmtp2nntp/Makefile.in
    1.20        +1  -1      ossp-pkg/lmtp2nntp/README
    1.5         +5  -5      ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.47 -r1.48 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	13 Mar 2002 13:58:39 -0000	1.47
  +++ ossp-pkg/lmtp2nntp/Makefile.in	25 Mar 2002 12:23:13 -0000	1.48
  @@ -128,13 +128,15 @@
   $(OBJS): Makefile
   
   #   AUTOMATICALLY GENERATED DEPENDENCY LIST - DO NOT EDIT
  -lmtp2nntp_main.o: lmtp2nntp_main.c lmtp2nntp_argz.h lmtp2nntp_shpat.h lmtp2nntp_daemon.h lmtp2nntp_global.h config.h lmtp2nntp_option.h lmtp2nntp_config.h fixme.h lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_lmtp.h lmtp2nntp_version.c
  +lmtp2nntp_main.o: lmtp2nntp_main.c lmtp2nntp_argz.h lmtp2nntp_shpat.h lmtp2nntp_daemon.h lmtp2nntp_global.h config.h lmtp2nntp_exwrap.h lmtp2nntp_option.h lmtp2nntp_config.h fixme.h lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_lmtp.h lmtp2nntp_version.c
   lmtp2nntp_daemon.o: lmtp2nntp_daemon.c config.h lmtp2nntp_daemon.h
   lmtp2nntp_lmtp.o: lmtp2nntp_lmtp.c lmtp2nntp_lmtp.h config.h
  -lmtp2nntp_nntp.o: lmtp2nntp_nntp.c lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_global.h config.h fixme.h
  +lmtp2nntp_nntp.o: lmtp2nntp_nntp.c lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_global.h config.h lmtp2nntp_exwrap.h fixme.h
   lmtp2nntp_argz.o: lmtp2nntp_argz.c lmtp2nntp_argz.h config.h
   lmtp2nntp_shpat.o: lmtp2nntp_shpat.c config.h lmtp2nntp_shpat.h
  -lmtp2nntp_msg.o: lmtp2nntp_msg.c lmtp2nntp_msg.h lmtp2nntp_global.h config.h lmtp2nntp_argz.h 
  -lmtp2nntp_option.o: lmtp2nntp_option.c lmtp2nntp_argz.h lmtp2nntp_global.h config.h lmtp2nntp_option.h lmtp2nntp_config.h fixme.h lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_lmtp.h lmtp2nntp_version.c
  -lmtp2nntp_config.o: lmtp2nntp_config.c lmtp2nntp_argz.h lmtp2nntp_global.h config.h lmtp2nntp_option.h lmtp2nntp_config.h fixme.h lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_lmtp.h lmtp2nntp_version.c
  +lmtp2nntp_msg.o: lmtp2nntp_msg.c lmtp2nntp_msg.h lmtp2nntp_global.h config.h lmtp2nntp_exwrap.h lmtp2nntp_argz.h fixme.h lmtp2nntp_nntp.h
  +lmtp2nntp_option.o: lmtp2nntp_option.c lmtp2nntp_argz.h lmtp2nntp_global.h config.h lmtp2nntp_exwrap.h lmtp2nntp_option.h lmtp2nntp_config.h fixme.h lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_lmtp.h lmtp2nntp_version.c
  +lmtp2nntp_config.o: lmtp2nntp_config.c lmtp2nntp_argz.h lmtp2nntp_global.h config.h lmtp2nntp_exwrap.h lmtp2nntp_option.h lmtp2nntp_config.h fixme.h lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_lmtp.h lmtp2nntp_version.c
  +lmtp2nntp_exwrap.o: lmtp2nntp_exwrap.c lmtp2nntp_global.h config.h lmtp2nntp_exwrap.h
   lmtp2nntp_version.o: lmtp2nntp_version.c lmtp2nntp_version.c
  +lmtp2nntp_l2.o: lmtp2nntp_l2.c fixme.h lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_global.h config.h lmtp2nntp_exwrap.h
  Index: ossp-pkg/lmtp2nntp/README
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 README
  --- ossp-pkg/lmtp2nntp/README	14 Mar 2002 16:07:52 -0000	1.19
  +++ ossp-pkg/lmtp2nntp/README	25 Mar 2002 12:23:13 -0000	1.20
  @@ -7,7 +7,7 @@
                     |_|                        |_|    
   
     OSSP lmtp2nntp - Mail to News Gateway
  -  Version 1.2a4 (13-Mar-2002)
  +  Version 1.2a4 (14-Mar-2002)
   
     BEWARE! THIS IS ALPHA CODE
   
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 lmtp2nntp_version.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	13 Mar 2002 16:38:39 -0000	1.4
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	25 Mar 2002 12:23:13 -0000	1.5
  @@ -34,12 +34,12 @@
   lmtp2nntp_version_t lmtp2nntp_version = {
       0x102004,
       "1.2a4",
  -    "1.2a4 (13-Mar-2002)",
  -    "This is OSSP lmtp2nntp, Version 1.2a4 (13-Mar-2002)",
  -    "OSSP lmtp2nntp 1.2a4 (13-Mar-2002)",
  +    "1.2a4 (14-Mar-2002)",
  +    "This is OSSP lmtp2nntp, Version 1.2a4 (14-Mar-2002)",
  +    "OSSP lmtp2nntp 1.2a4 (14-Mar-2002)",
       "OSSP lmtp2nntp/1.2a4",
  -    "@(#)OSSP lmtp2nntp 1.2a4 (13-Mar-2002)",
  -    "$Id: lmtp2nntp_version.c,v 1.4 2002/03/13 16:38:39 thl Exp $"
  +    "@(#)OSSP lmtp2nntp 1.2a4 (14-Mar-2002)",
  +    "$Id: lmtp2nntp_version.c,v 1.5 2002/03/25 12:23:13 thl Exp $"
   };
   
   #endif /* _LMTP2NNTP_VERSION_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Tue Mar 26 18:11:08 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9C78D76369; Tue, 26 Mar 2002 18:11:07 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc Makefile.in README aclocal.m4 configure.in dev...
Message-Id: <20020326171107.9C78D76369@mail.ossp.org>
Date: Tue, 26 Mar 2002 18:11:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   26-Mar-2002 18:11:07
  Branch: HEAD                             Handle: 2002032617110600

  Modified files:
    ossp-pkg/rc             Makefile.in README aclocal.m4 configure.in
                            devtool.conf devtool.func rc-sample.pod rc.c rc.h
                            rc_config.c rc_const.h rc_optimpl.c rc_option.c
                            rc_option.h rc_private.h rc_test.sh rc_util.c

  Log:
    Vacation flush, mostly build configuration details. Its not building very
    clean right now.

  Summary:
    Revision    Changes     Path
    1.17        +3  -3      ossp-pkg/rc/Makefile.in
    1.4         +1  -1      ossp-pkg/rc/README
    1.9         +15 -5      ossp-pkg/rc/aclocal.m4
    1.15        +6  -8      ossp-pkg/rc/configure.in
    1.10        +7  -3      ossp-pkg/rc/devtool.conf
    1.6         +1  -0      ossp-pkg/rc/devtool.func
    1.10        +1  -1      ossp-pkg/rc/rc-sample.pod
    1.17        +3  -3      ossp-pkg/rc/rc.c
    1.14        +3  -3      ossp-pkg/rc/rc.h
    1.6         +3  -3      ossp-pkg/rc/rc_config.c
    1.3         +1  -1      ossp-pkg/rc/rc_const.h
    1.4         +1  -1      ossp-pkg/rc/rc_optimpl.c
    1.5         +3  -3      ossp-pkg/rc/rc_option.c
    1.3         +3  -3      ossp-pkg/rc/rc_option.h
    1.7         +3  -3      ossp-pkg/rc/rc_private.h
    1.6         +3  -3      ossp-pkg/rc/rc_test.sh
    1.3         +3  -3      ossp-pkg/rc/rc_util.c
  ____________________________________________________________________________

  Index: ossp-pkg/rc/Makefile.in
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 Makefile.in
  --- ossp-pkg/rc/Makefile.in	28 Feb 2002 15:30:04 -0000	1.16
  +++ ossp-pkg/rc/Makefile.in	26 Mar 2002 17:11:06 -0000	1.17
  @@ -1,11 +1,11 @@
   ##
  -##  rc - OSSP Run-command processor
  +##  OSSP rc - Run-command processor
  +##  Copyright (c) 2002 Ralf S. Engelschall
   ##  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
   ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002 Ralf S. Engelschall
   ##
   ##  This file is part of OSSP rc, a portable Run-command processor
  -##  which can be found at http://www.ossp.org/pkg/rc/
  +##  which can be found at http://www.ossp.org/pkg/lib/rc/
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/rc/README
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 README
  --- ossp-pkg/rc/README	4 Feb 2002 22:35:20 -0000	1.3
  +++ ossp-pkg/rc/README	26 Mar 2002 17:11:06 -0000	1.4
  @@ -17,7 +17,7 @@
     Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   
     This file is part of OSSP rc, a Run-command processor which
  -  can be found at http://www.ossp.org/pkg/rc/.
  +  can be found at http://www.ossp.org/pkg/lib/rc/.
   
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/rc/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 aclocal.m4
  --- ossp-pkg/rc/aclocal.m4	8 Mar 2002 15:59:07 -0000	1.8
  +++ ossp-pkg/rc/aclocal.m4	26 Mar 2002 17:11:06 -0000	1.9
  @@ -1,11 +1,11 @@
   dnl ##
   dnl ##  OSSP rc - Run-command processor
  +dnl ##  Copyright (c) 2002 Ralf S. Engelschall
   dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
   dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002 Ralf S. Engelschall
   dnl ##
   dnl ##  This file is part of OSSP rc, a portable Run-command processor
  -dnl ##  which can be found at http://www.ossp.org/pkg/rc/
  +dnl ##  which can be found at http://www.ossp.org/pkg/lib/rc/
   dnl ##
   dnl ##  Permission to use, copy, modify, and distribute this software for
   dnl ##  any purpose with or without fee is hereby granted, provided that
  @@ -58,7 +58,6 @@
   dnl ##
   
   AC_DEFUN(AC_HEADLINE,[dnl
  -AC_DIVERT_PUSH(NOTICE)dnl
   #   configuration header
   if test ".`echo dummy [$]@ | grep help`" = .; then
       #   bootstrapping shtool
  @@ -85,10 +84,21 @@
       $3_HEX="`$ac_shtool version -l c -d hex $ac_srcdir/$4`"
       AC_SUBST($3_HEX)
   fi
  -AC_DIVERT_POP()
   ])dnl
   
   dnl ##
  +dnl ##  Check whether compiler is ISO standard
  +dnl ##
  +
  +AC_DEFUN(EN_PROG_CC,[dnl
  +    AC_PROG_CC
  +    AC_PROG_CC_STDC
  +    if test ".$ac_cv_prog_cc_stdc" = .no; then
  +        AC_MSG_ERROR([require an ANSI/ISO C compliant compiler])
  +    fi
  +])
  +
  +dnl ##
   dnl ##  Check whether compiler option works
   dnl ##
   dnl ##  configure.in:
  @@ -150,7 +160,7 @@
       esac
   fi
   msg="enabled"
  -dnl AC_DEFINE(DEBUG)
  +AC_DEFINE(DEBUG, 1, [Define to 1 if you want to enable debugging])
   ],[
   if test ".$ac_cv_prog_gcc" = ".yes"; then
   case "$CFLAGS" in
  Index: ossp-pkg/rc/configure.in
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 configure.in
  --- ossp-pkg/rc/configure.in	12 Feb 2002 17:59:50 -0000	1.14
  +++ ossp-pkg/rc/configure.in	26 Mar 2002 17:11:06 -0000	1.15
  @@ -1,11 +1,11 @@
   dnl ##
   dnl ##  OSSP rc - Run-command processor
  +dnl ##  Copyright (c) 2002 Ralf S. Engelschall
   dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
   dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002 Ralf S. Engelschall
   dnl ##
   dnl ##  This file is part of OSSP rc, a portable Run-command processor
  -dnl ##  which can be found at http://www.ossp.org/pkg/rc/
  +dnl ##  which can be found at http://www.ossp.org/pkg/lib/rc/
   dnl ##
   dnl ##  Permission to use, copy, modify, and distribute this software for
   dnl ##  any purpose with or without fee is hereby granted, provided that
  @@ -29,16 +29,14 @@
   dnl ##
   
   dnl Version requirement and information
  -AC_PREREQ(2.52)dnl
  +AC_PREREQ(2.53)dnl
   AC_REVISION(1.0)
   
   dnl Announce the product and version
  -AC_DIVERT_PUSH(NOTICE)
   V=`./shtool version -lc -dlong rc_version.c`
  -./shtool echo -e "Configuring %BOSSP rc%b, Version %B${V}%b"
  +./shtool echo -e "Configuring %BOSSP rc%b, version %B${V}%b"
   echo "Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>"
   echo "Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>"
  -AC_DIVERT_POP()
   
   dnl Process this file with autoconf
   AC_INIT(rc.h)
  @@ -57,7 +55,7 @@
   dnl AC_PROG_LIBTOOL
   
   dnl Check other requirements
  -AC_SET_MAKE
  +AC_PROG_MAKE_SET
   AC_CHECK_DEBUGGING
   AC_CHECK_LIB(socket, getprotobyname)
   AC_CHECK_LIB(nsl, gethostbyname)
  @@ -68,7 +66,7 @@
   dnl Check for Dmalloc library
   AC_CHECK_EXTLIB([Dmalloc],
                   dmalloc, dmalloc_debug, dmalloc.h,
  -                AC_DEFINE(DMALLOC))
  +                [AC_DEFINE(DMALLOC, 1, [Define to 1 if building with dmalloc])])
   
   dnl Check for OSSP popt library
   AC_CHECK_EXTLIB([OSSP popt],
  Index: ossp-pkg/rc/devtool.conf
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 devtool.conf
  --- ossp-pkg/rc/devtool.conf	8 Feb 2002 18:35:03 -0000	1.9
  +++ ossp-pkg/rc/devtool.conf	26 Mar 2002 17:11:06 -0000	1.10
  @@ -3,8 +3,8 @@
   ##
   
   %autogen
  -    @autogen shtool   1.5.4 "1.5.*" all
  -    @autogen autoconf 2.52  "2.5.*"
  +    @autogen shtool   1.6.0 "1.[56].*" all
  +    @autogen autoconf 2.53  "2.5[3-9]*"
   
       echo "===> rc_ex (devtool autogen)"
       (cd rc_ex && ./devtool autogen)
  @@ -49,7 +49,11 @@
           "$@"
   
   %version
  -    ./shtool version -l c -n "OSSP rc" -p "rc_" -e rc_version.c
  +    ./shtool version -l txt -n "OSSP rc" -e rc_version.c
  +    shtool version -l txt -n "OSSP rc" -p "rc_" -e rc_version.c
  +    V=`shtool version -l txt -d long rc_version.c`
  +    sed -e "s/Version .*(.*)/Version $V/g" <README >README.n
  +    mv README.n README
   
   %dist
       make distclean >/dev/null 2>&1
  Index: ossp-pkg/rc/devtool.func
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 devtool.func
  --- ossp-pkg/rc/devtool.func	8 Feb 2002 18:35:03 -0000	1.5
  +++ ossp-pkg/rc/devtool.func	26 Mar 2002 17:11:06 -0000	1.6
  @@ -32,6 +32,7 @@
               autoconf_version=`devtool_require autoconf --version 4 "$1" "$2"`
               echo "generating (GNU Autoconf $autoconf_version): configure ac_config.h.in"
               autoconf
  +            rm -rf autom4te.cache >/dev/null 2>&1
               autoheader 2>&1 | grep -v "is unchanged"
               ;;
           libtool )
  Index: ossp-pkg/rc/rc-sample.pod
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 rc-sample.pod
  --- ossp-pkg/rc/rc-sample.pod	12 Feb 2002 17:59:50 -0000	1.9
  +++ ossp-pkg/rc/rc-sample.pod	26 Mar 2002 17:11:06 -0000	1.10
  @@ -1,5 +1,5 @@
   ##
  -##  rc-sample.pod -- OSSP Run-command processor samples (manual page)
  +##  OSSP rc -- Run-command processor samples (manual page)
   ##  Copyright (c) 2000-2002 Cable & Wireless Deutschland GmbH
   ##  Copyright (c) 2000-2002 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>
  Index: ossp-pkg/rc/rc.c
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 rc.c
  --- ossp-pkg/rc/rc.c	1 Mar 2002 22:48:23 -0000	1.16
  +++ ossp-pkg/rc/rc.c	26 Mar 2002 17:11:06 -0000	1.17
  @@ -1,10 +1,10 @@
  -/*  rc - OSSP Run-command processor
  +/*  OSSP rc - Run-command processor
  +**  Copyright (c) 2002 Ralf S. Engelschall
   **  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
   **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Ralf S. Engelschall
   **
   **  This file is part of OSSP rc, a portable Run-command processor
  -**  which can be found at http://www.ossp.org/pkg/rc/
  +**  which can be found at http://www.ossp.org/pkg/lib/rc/
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/rc/rc.h
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 rc.h
  --- ossp-pkg/rc/rc.h	1 Mar 2002 22:48:23 -0000	1.13
  +++ ossp-pkg/rc/rc.h	26 Mar 2002 17:11:06 -0000	1.14
  @@ -1,10 +1,10 @@
  -/*  rc - OSSP Run-command processor
  +/*  OSSP rc - Run-command processor
  +**  Copyright (c) 2002 Ralf S. Engelschall
   **  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
   **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Ralf S. Engelschall
   **
   **  This file is part of OSSP rc, a portable Run-command processor
  -**  which can be found at http://www.ossp.org/pkg/rc/
  +**  which can be found at http://www.ossp.org/pkg/lib/rc/
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/rc/rc_config.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 rc_config.c
  --- ossp-pkg/rc/rc_config.c	1 Mar 2002 22:48:23 -0000	1.5
  +++ ossp-pkg/rc/rc_config.c	26 Mar 2002 17:11:06 -0000	1.6
  @@ -1,10 +1,10 @@
  -/*  rc - OSSP Run-command processor
  +/*  OSSP rc - Run-command processor
  +**  Copyright (c) 2002 Ralf S. Engelschall
   **  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
   **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Ralf S. Engelschall
   **
   **  This file is part of OSSP rc, a portable Run-command processor
  -**  which can be found at http://www.ossp.org/pkg/rc/
  +**  which can be found at http://www.ossp.org/pkg/lib/rc/
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/rc/rc_const.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 rc_const.h
  --- ossp-pkg/rc/rc_const.h	8 Feb 2002 18:36:40 -0000	1.2
  +++ ossp-pkg/rc/rc_const.h	26 Mar 2002 17:11:06 -0000	1.3
  @@ -1,4 +1,4 @@
  -/*  rc - OSSP Run-command processor
  +/*  OSSP rc - Run-command processor
   **  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
   **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
   **  Copyright (c) 2002 Ralf S. Engelschall
  Index: ossp-pkg/rc/rc_optimpl.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 rc_optimpl.c
  --- ossp-pkg/rc/rc_optimpl.c	1 Mar 2002 22:48:23 -0000	1.3
  +++ ossp-pkg/rc/rc_optimpl.c	26 Mar 2002 17:11:06 -0000	1.4
  @@ -1,4 +1,4 @@
  -/*  rc - OSSP Run-command processor
  +/*  OSSP rc - Run-command processor
   **  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
   **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
   **  Copyright (c) 2002 Ralf S. Engelschall
  Index: ossp-pkg/rc/rc_option.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 rc_option.c
  --- ossp-pkg/rc/rc_option.c	28 Feb 2002 15:30:04 -0000	1.4
  +++ ossp-pkg/rc/rc_option.c	26 Mar 2002 17:11:06 -0000	1.5
  @@ -1,10 +1,10 @@
  -/*  rc - OSSP Run-command processor
  +/*  OSSP rc - Run-command processor
  +**  Copyright (c) 2002 Ralf S. Engelschall
   **  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
   **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Ralf S. Engelschall
   **
   **  This file is part of OSSP rc, a portable Run-command processor
  -**  which can be found at http://www.ossp.org/pkg/rc/
  +**  which can be found at http://www.ossp.org/pkg/lib/rc/
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/rc/rc_option.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 rc_option.h
  --- ossp-pkg/rc/rc_option.h	8 Feb 2002 18:36:40 -0000	1.2
  +++ ossp-pkg/rc/rc_option.h	26 Mar 2002 17:11:06 -0000	1.3
  @@ -1,10 +1,10 @@
  -/*  rc - OSSP Run-command processor
  +/*  OSSP rc - Run-command processor
  +**  Copyright (c) 2002 Ralf S. Engelschall
   **  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
   **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Ralf S. Engelschall
   **
   **  This file is part of OSSP rc, a portable Run-command processor
  -**  which can be found at http://www.ossp.org/pkg/rc/
  +**  which can be found at http://www.ossp.org/pkg/lib/rc/
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/rc/rc_private.h
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 rc_private.h
  --- ossp-pkg/rc/rc_private.h	1 Mar 2002 22:48:23 -0000	1.6
  +++ ossp-pkg/rc/rc_private.h	26 Mar 2002 17:11:06 -0000	1.7
  @@ -1,10 +1,10 @@
  -/*  rc - OSSP Run-command processor
  +/*  OSSP rc - Run-command processor
  +**  Copyright (c) 2002 Ralf S. Engelschall
   **  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
   **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Ralf S. Engelschall
   **
   **  This file is part of OSSP rc, a portable Run-command processor
  -**  which can be found at http://www.ossp.org/pkg/rc/
  +**  which can be found at http://www.ossp.org/pkg/lib/rc/
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/rc/rc_test.sh
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 rc_test.sh
  --- ossp-pkg/rc/rc_test.sh	7 Feb 2002 15:36:26 -0000	1.5
  +++ ossp-pkg/rc/rc_test.sh	26 Mar 2002 17:11:06 -0000	1.6
  @@ -1,11 +1,11 @@
   #! /bin/sh
  -#  rc - OSSP Run-command processor
  +#  OSSP rc - Run-command processor
  +#  Copyright (c) 2002 Ralf S. Engelschall
   #  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
   #  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -#  Copyright (c) 2002 Ralf S. Engelschall
   #
   #  This file is part of OSSP rc, a portable Run-command processor
  -#  which can be found at http://www.ossp.org/pkg/rc/
  +#  which can be found at http://www.ossp.org/pkg/lib/rc/
   #
   #  Permission to use, copy, modify, and distribute this software for
   #  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/rc/rc_util.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 rc_util.c
  --- ossp-pkg/rc/rc_util.c	13 Feb 2002 19:19:28 -0000	1.2
  +++ ossp-pkg/rc/rc_util.c	26 Mar 2002 17:11:06 -0000	1.3
  @@ -1,10 +1,10 @@
  -/*  rc - OSSP Run-command processor
  +/*  OSSP rc - Run-command processor
  +**  Copyright (c) 2002 Ralf S. Engelschall
   **  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
   **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Ralf S. Engelschall
   **
   **  This file is part of OSSP rc, a portable Run-command processor
  -**  which can be found at http://www.ossp.org/pkg/rc/
  +**  which can be found at http://www.ossp.org/pkg/lib/rc/
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that

From ossp-cvs-owner@ossp.org  Thu Mar 28 11:02:54 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 50E3076369; Thu, 28 Mar 2002 11:02:54 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_main.c
Message-Id: <20020328100254.50E3076369@mail.ossp.org>
Date: Thu, 28 Mar 2002 11:02:54 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   28-Mar-2002 11:02:54
  Branch: HEAD                             Handle: 2002032810025300

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_main.c

  Log:
    now expanding variables on returned/lastresp message

  Summary:
    Revision    Changes     Path
    1.53        +17 -4      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.52 -r1.53 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	13 Mar 2002 16:22:09 -0000	1.52
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	28 Mar 2002 10:02:53 -0000	1.53
  @@ -1633,11 +1633,24 @@
           argz_add(&azErr, &asErr, errorstring);
           for (i = 0; i < ctx->nns; i++) {
               if (ctx->pns[i].rc != NNTP_OK) {
  +                var_rc_t var_rc;
  +                char *res_ptr;
  +                int res_len;
                   str_format(errorstring, sizeof(errorstring), 
  -                "${option.destination[%d]} returned %s\n"
  -                "${option.destination[%d]} lastresp \"%s\"",
  -                i, nntp_error(ctx->pns[i].rc), 
  -                i, nntp_lastresp(ctx->pns[i].nntp));
  +                           "${option.destination[%d]} returned %s\n"
  +                           "${option.destination[%d]} lastresp \"%s\"",
  +                           i, nntp_error(ctx->pns[i].rc), 
  +                           i, nntp_lastresp(ctx->pns[i].nntp));
  +                if ((var_rc = var_expand(ctx->config_varctx, errorstring, strlen(errorstring), &res_ptr, &res_len, FALSE)) != VAR_OK) {
  +                    str_format(errorstring, sizeof(errorstring), 
  +                               "destination[%d] returned %s\n"
  +                               "destination[%d] lastresp \"%s\"",
  +                               i, nntp_error(ctx->pns[i].rc), 
  +                               i, nntp_lastresp(ctx->pns[i].nntp));
  +                }
  +                else {
  +                    str_copy(errorstring, res_ptr, sizeof(errorstring) < res_len ? sizeof(errorstring) : res_len);
  +                }
                   argz_add(&azErr, &asErr, errorstring);
               }
           }

From ossp-cvs-owner@ossp.org  Sat Mar 30 19:15:50 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BFB3476369; Sat, 30 Mar 2002 19:15:49 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex ex.pod
Message-Id: <20020330181549.BFB3476369@mail.ossp.org>
Date: Sat, 30 Mar 2002 19:15:49 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Mar-2002 19:15:49
  Branch: HEAD                             Handle: 2002033018154900

  Modified files:
    ossp-pkg/ex             ex.pod

  Log:
    fix manual page layouting

  Summary:
    Revision    Changes     Path
    1.22        +107 -101   ossp-pkg/ex/ex.pod
  ____________________________________________________________________________

  Index: ossp-pkg/ex/ex.pod
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 ex.pod
  --- ossp-pkg/ex/ex.pod	7 Mar 2002 21:30:10 -0000	1.21
  +++ ossp-pkg/ex/ex.pod	30 Mar 2002 18:15:49 -0000	1.22
  @@ -410,98 +410,98 @@
   
   =item F<pthread_ex.h>
   
  -#ifndef __PTHREAD_EX_H__
  -#define __PTHREAD_EX_H__
  + #ifndef __PTHREAD_EX_H__
  + #define __PTHREAD_EX_H__
   
  -#include <pthread.h>
  + #include <pthread.h>
   
  -int pthread_init_ex   (void);
  -int pthread_create_ex (pthread_t *, const pthread_attr_t *, void *(*)(void *), void *);
  + int pthread_init_ex   (void);
  + int pthread_create_ex (pthread_t *, const pthread_attr_t *, void *(*)(void *), void *);
   
  -#ifndef PTHREAD_EX_INTERNAL
  -#define pthread_init   pthread_init_ex
  -#define pthread_create pthread_create_ex
  -#endif
  + #ifndef PTHREAD_EX_INTERNAL
  + #define pthread_init   pthread_init_ex
  + #define pthread_create pthread_create_ex
  + #endif
   
  -#endif /* __PTHREAD_EX_H__ */
  + #endif /* __PTHREAD_EX_H__ */
   
   =item F<pthread_ex.c>
   
  -#include <stdlib.h>
  -#include <pthread.h>
  + #include <stdlib.h>
  + #include <pthread.h>
  +
  + #define PTHREAD_EX_INTERNAL
  + #include "pthread_ex.h"
  + #include "ex.h"
  +
  + /* context storage key */
  + static pthread_key_t pthread_ex_ctx_key;
   
  -#define PTHREAD_EX_INTERNAL
  -#include "pthread_ex.h"
  -#include "ex.h"
  -
  -/* context storage key */
  -static pthread_key_t pthread_ex_ctx_key;
  -
  -/* context destructor */
  -static void pthread_ex_ctx_destroy(void *data)
  -{
  -    if (data != NULL)
  -        free(data);
  -    return;
  -}
  -
  -/* callback: context fetching */
  -static ex_ctx_t *pthread_ex_ctx(void)
  -{
  -    return (ex_ctx_t *)pthread_getspecific(pthread_ex_ctx_key);
  -}
  -
  -/* callback: termination */
  -static void pthread_ex_terminate(ex_t *e)
  -{
  -    pthread_exit(e->ex_value);
  -}
  -
  -/* pthread init */
  -int pthread_init_ex(void)
  -{
  -    int rc;
  -
  -    /* additionally create thread data key and override OSSP ex callbacks */
  -    pthread_key_create(&pthread_ex_ctx_key, pthread_ex_ctx_destroy);
  -    __ex_ctx       = pthread_ex_ctx;
  -    __ex_terminate = pthread_ex_terminate;
  -
  -    return rc;
  -}
  -
  -/* internal thread entry wrapper information */
  -typedef struct {
  -    void *(*entry)(void *);
  -    void *arg;
  -} pthread_create_ex_t;
  -
  -/* internal thread entry wrapper */
  -static void *pthread_create_wrapper(void *arg)
  -{
  -    pthread_create_ex_t *wrapper;
  -    ex_ctx_t *ex_ctx;
  -
  -    /* create per-thread exception context */
  -    wrapper = (pthread_create_ex_t *)arg;
  -    ex_ctx = (ex_ctx_t *)malloc(sizeof(ex_ctx_t));
  -    EX_CTX_INITIALIZE(ex_ctx);
  -    pthread_setspecific(pthread_ex_ctx_key, ex_ctx);
  -
  -    /* perform original operation */
  -    return wrapper->entry(wrapper->arg);
  -}
  -
  -/* pthread_create() wrapper */
  -int pthread_create_ex(pthread_t *thread, const pthread_attr_t *attr, void *(*entry)(void *), void *arg)
  -{
  -    pthread_create_ex_t wrapper;
  -
  -    /* spawn thread but execute start function through wrapper */
  -    wrapper.entry = entry;
  -    wrapper.arg   = arg;
  -    return pthread_create(thread, attr, pthread_create_wrapper, &wrapper);
  -}
  + /* context destructor */
  + static void pthread_ex_ctx_destroy(void *data)
  + {
  +     if (data != NULL)
  +         free(data);
  +     return;
  + }
  + 
  + /* callback: context fetching */
  + static ex_ctx_t *pthread_ex_ctx(void)
  + {
  +     return (ex_ctx_t *)pthread_getspecific(pthread_ex_ctx_key);
  + }
  + 
  + /* callback: termination */
  + static void pthread_ex_terminate(ex_t *e)
  + {
  +     pthread_exit(e->ex_value);
  + }
  +  
  + /* pthread init */
  + int pthread_init_ex(void)
  + {
  +     int rc;
  + 
  +     /* additionally create thread data key and override OSSP ex callbacks */
  +     pthread_key_create(&pthread_ex_ctx_key, pthread_ex_ctx_destroy);
  +     __ex_ctx       = pthread_ex_ctx;
  +     __ex_terminate = pthread_ex_terminate;
  + 
  +     return rc;
  + }
  + 
  + /* internal thread entry wrapper information */
  + typedef struct {
  +     void *(*entry)(void *);
  +     void *arg;
  + } pthread_create_ex_t;
  + 
  + /* internal thread entry wrapper */
  + static void *pthread_create_wrapper(void *arg)
  + {
  +     pthread_create_ex_t *wrapper;
  +     ex_ctx_t *ex_ctx;
  + 
  +     /* create per-thread exception context */
  +     wrapper = (pthread_create_ex_t *)arg;
  +     ex_ctx = (ex_ctx_t *)malloc(sizeof(ex_ctx_t));
  +     EX_CTX_INITIALIZE(ex_ctx);
  +     pthread_setspecific(pthread_ex_ctx_key, ex_ctx);
  + 
  +     /* perform original operation */
  +     return wrapper->entry(wrapper->arg);
  + }
  + 
  + /* pthread_create() wrapper */
  + int pthread_create_ex(pthread_t *thread, const pthread_attr_t *attr, void *(*entry)(void *), void *arg)
  + {
  +     pthread_create_ex_t wrapper;
  + 
  +     /* spawn thread but execute start function through wrapper */
  +     wrapper.entry = entry;
  +     wrapper.arg   = arg;
  +     return pthread_create(thread, attr, pthread_create_wrapper, &wrapper);
  + }
   
   =back
   
  @@ -665,27 +665,33 @@
   
   =head1 SEE ALSO
   
  -B<ISO-C++> C<try>/C<catch>/C<throw>;
  -B<Java> C<try>/C<catch>/C<finally>/C<throw>;
  -B<ISO-C> jmp_buf(3)/setjmp(3)/longjmp(3);
  -B<POSIX.1> sigjmp_buf(3)/sigsetjmp(3)/siglongjump(3);
  -B<POSIX.1> ucontext(3)/setcontext(3)/getcontext(3).
  +B<ISO-C++> C<try>, C<catch>, C<throw>.
  +
  +B<Java> C<try>, C<catch>, C<finally>, C<throw>.
  +
  +B<ISO-C> jmp_buf(3), setjmp(3), longjmp(3).
  +
  +B<POSIX.1> sigjmp_buf(3), sigsetjmp(3), siglongjump(3).
  +
  +B<POSIX.1> ucontext(3), setcontext(3), getcontext(3).
   
   =head1 HISTORY
   
   B<OSSP ex> was invented in January 2002 by Ralf S. Engelschall
  -E<lt>rse@engelschall.comE<gt> for use inside the B<OSSP> project.
  -Its creation was prompted by the requirement to reduce the error
  -handling inside B<OSSP lmtp2nntp>. The core B<try>/B<catch> clause
  -was inspired by B<ISO-C++> and the implementation was partly
  -derived from B<cexcept> 2.0.0, a similar library written 2000 by
  -Adam M. Costello E<lt>amc@cs.berkeley.eduE<gt> and Cosmin Truta
  -E<lt>cosmin@cs.toronto.eduE<gt>. The B<cleanup> clause was inspired by
  -the B<Java> C<finally> clause. The B<shield> feature was inspired by an
  -C<errno> shielding facility used in the B<GNU pth> implementation. The
  -B<defer> feature was invented to simplify an application's cleanup
  -handling if multiple independent resources are allocated and have to be
  -freed on error.
  +E<lt>rse@engelschall.comE<gt> for use inside the B<OSSP> project. Its
  +creation was prompted by the requirement to reduce the error handling
  +inside B<OSSP lmtp2nntp>.
  +
  +The core B<try>/B<catch> clause was inspired by B<ISO-C++> and the
  +implementation was partly derived from B<cexcept> 2.0.0, a similar
  +library written 2000 by Adam M. Costello E<lt>amc@cs.berkeley.eduE<gt>
  +and Cosmin Truta E<lt>cosmin@cs.toronto.eduE<gt>.
  +
  +The B<cleanup> clause was inspired by the B<Java> C<finally> clause.
  +The B<shield> feature was inspired by an C<errno> shielding facility
  +used in the B<GNU pth> implementation. The B<defer> feature was invented
  +to simplify an application's cleanup handling if multiple independent
  +resources are allocated and have to be freed on error.
   
   =head1 AUTHORS
   

From ossp-cvs-owner@ossp.org  Sat Mar 30 19:55:29 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2C38176369; Sat, 30 Mar 2002 19:55:29 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex 00TODO ex.pod
Message-Id: <20020330185529.2C38176369@mail.ossp.org>
Date: Sat, 30 Mar 2002 19:55:29 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Mar-2002 19:55:29
  Branch: HEAD                             Handle: 2002033018552800

  Modified files:
    ossp-pkg/ex             00TODO ex.pod

  Log:
    Incorporate Thomas pitfall documentation into ex.pod and
    this way remove the last item from OSSP ex' TODO list.

  Summary:
    Revision    Changes     Path
    1.4         BLOB        ossp-pkg/ex/00TODO
    1.23        +145 -1     ossp-pkg/ex/ex.pod
  ____________________________________________________________________________

  Index: ossp-pkg/ex/00TODO
  ============================================================
  $ cvs update -p -r1.3 00TODO >00TODO.old
  $ cvs update -p -r1.4 00TODO >00TODO.new
  $ diff -u 00TODO.old 00TODO.new
  --- 00TODO.old	Sat Mar 30 19:55:28 2002
  +++ 00TODO.new	Sat Mar 30 19:55:28 2002
  @@ -1,90 +0,0 @@
  -
  -**** IMPROVE DOCUMENTATION ****
  -
  -/* BAD EXAMPLE */
  -try {
  -    char *cp1, *cp2, cp3;
  -
  -    cp1 = mallocex(SMALLAMOUNT);
  -    globalcontext->first = cp1;
  -    cp2 = mallocex(TOOBIG);
  -    cp3 = mallocex(SMALLAMOUNT);
  -
  -    strcpy(cp1, "foo"); strcpy(cp2, "bar");
  -}
  -clean {
  -    if (cp3 != NULL) free(cp3);
  -    if (cp2 != NULL) free(cp2);
  -    if (cp1 != NULL) free(cp1);
  -}
  -catch(ex) {
  -    printf("cp3=%s", cp3);
  -    rethrow;
  -}
  -
  -The code above shows some pitfalls and contains many errors.
  -
  -01) variable scope
  -
  -Variables which are used in the "clean" or "catch" blocks must be declared
  -before "try", otherwise they only exists inside the "try" block. In the
  -example above, cp1-3 are automatic variables and only exist in the "try"
  -block, the "clean" and "catch" blocks don't know anything about them.
  -
  -02) variable initialization
  -
  -Variables which are used in the "clean" or "catch" blocks must be initialized
  -before the point of the first possible "throw" is reached. In the example
  -above, "clean" would have trouble using cp3 when mallocex() throws a exception
  -when allocating a TOOBIG buffer.
  -
  -03) volatile variables
  -
  -Variables which are used in the "clean" or "catch" blocks must be declared
  -volatile, otherwise they might contain outdated information when "throw" does
  -the longjmp(). When using a "free if unset" mechanism like the example does in
  -the "clean" block, the variables must be initialized (see 02) *and* remain
  -valid upon use.
  -
  -04) clean before catch
  -
  -The "clean" block is evaluated before "catch", so resources being cleaned up
  -must no longer be used in the "catch" block. The example above would have
  -trouble referencing the character strings in the printf() statement because
  -these have been free()d before.
  -
  -05) variable uninitialization
  -
  -When resources are passed away and out of the scope of the "try/clean/catch"
  -construct and the variables were initialized for using a "free if unset"
  -mechanism then they must be uninitialized after being passed away.  The
  -example above would free() cp1 in the "clean" block when mallocex() throws a
  -exception when allocating a TOOBIG buffer. The globalcontext->first pointer
  -hence becomes invalid.
  -
  -/* GOOD EXAMPLE */                                       | /* ALTERNATE *05* GOOD EXAMPLE */
  -{ /*01*/                                                 | { /*01*/
  -    volatile /*03*/ char *cp1 = NULL /*02*/;             |     volatile /*03*/ char *cp1 = NULL /*02*/;
  -    volatile /*03*/ char *cp2 = NULL /*02*/;             |     volatile /*03*/ char *cp2 = NULL /*02*/;
  -    volatile /*03*/ char *cp3 = NULL /*02*/;             |     volatile /*03*/ char *cp3 = NULL /*02*/;
  -    try {                                                |     try {
  -        cp1 = mallocex(SMALLAMOUNT);                     |         cp1 = mallocex(SMALLAMOUNT);
  -        globalcontext->first = cp1;                      |         globalcontext->first = cp1;
  -        cp1 = NULL /*05 give away*/;                     |         /*05 keep responsibility*/
  -        cp2 = mallocex(TOOBIG);                          |         cp2 = mallocex(TOOBIG);
  -        cp3 = mallocex(SMALLAMOUNT);                     |         cp3 = mallocex(SMALLAMOUNT);
  -                                                         | 
  -        strcpy(cp1, "foo"); strcpy(cp2, "bar");          |         strcpy(cp1, "foo"); strcpy(cp2, "bar");
  -    }                                                    |     }
  -    clean {                                              |     clean {
  - /*04*/ printf("cp3=%s", cp3 == NULL /*02*/ ? "" : cp3); |  /*04*/ printf("cp3=%s", cp3 == NULL /*02*/ ? "" : cp3);
  -        if (cp3 != NULL) free(cp3);                      |         if (cp3 != NULL) free(cp3);
  -        if (cp2 != NULL) free(cp2);                      |         if (cp2 != NULL) free(cp2);
  -        /*05 cp1 was given away */                       |         if (cp1 != NULL) free(cp1);
  -    }                                                    |     }
  -    catch(ex) {                                          |     catch(ex) {
  -        /*05 global context untouched */                 |         globalcontext->first = NULL;
  -         rethrow;   }                                    |         rethrow;
  -    }                                                    |     }
  -}                                                        | }
  -
  Index: ossp-pkg/ex/ex.pod
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 ex.pod
  --- ossp-pkg/ex/ex.pod	30 Mar 2002 18:15:49 -0000	1.22
  +++ ossp-pkg/ex/ex.pod	30 Mar 2002 18:55:28 -0000	1.23
  @@ -5,7 +5,7 @@
   ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP ex, an exception library
  -##  which can be found at http://www.ossp.org/pkg/ex/.
  +##  which can be found at http://www.ossp.org/pkg/lib/ex/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  @@ -374,6 +374,150 @@
   B<catch>, B<cleanup>, B<throw>, B<rethrow> and B<shield>. As an
   alternative you can define C<__EX_NS_UCCXX__> to get the same but with a
   more namespace safe upper case first letter.
  +
  +=head1 PROGRAMMING PITFALLS
  +
  +Exception handling is a very elegant and efficient way of dealing with
  +exceptional situation. Nevertheless it requires additional discipline
  +in programming and there are a few pitfalls one must be aware of. Look
  +the following code which shows some pitfalls and contains many errors
  +(assuming a mallocex() function which throws an exception if malloc(3)
  +fails):
  +
  + /* BAD EXAMPLE */
  + ex_try {
  +     char *cp1, *cp2, cp3;
  + 
  +     cp1 = mallocex(SMALLAMOUNT);
  +     globalcontext->first = cp1;
  +     cp2 = mallocex(TOOBIG);
  +     cp3 = mallocex(SMALLAMOUNT);
  +     strcpy(cp1, "foo");
  +     strcpy(cp2, "bar");
  + }
  + ex_clean {
  +     if (cp3 != NULL) free(cp3);
  +     if (cp2 != NULL) free(cp2);
  +     if (cp1 != NULL) free(cp1);
  + }
  + ex_catch(ex) {
  +     printf("cp3=%s", cp3);
  +     ex_rethrow;
  + }
  +
  +This example raises a few issues:
  +
  +=over 4
  +
  +=item B<01: variable scope>
  +
  +Variables which are used in the B<ex_clean> or B<ex_catch> clauses
  +must be declared before the B<ex_try> clause, otherwise they only
  +exist inside the B<ex_try> block. In the example above, C<cp1>, C<cp2>
  +and C<cp3> are automatic variables and only exist in the block of the
  +B<ex_try> clause, the code in the B<ex_clean> and B<ex_catch> clauses
  +does not know anything about them.
  +
  +=item B<02: variable initialization>
  +
  +Variables which are used in the B<ex_clean> or B<ex_catch> clauses must
  +be initialized before the point of the first possible B<ex_throw> is
  +reached. In the example above, B<ex_clean> would have trouble using
  +C<cp3> if mallocex() throws a exception when allocating a C<TOOBIG>
  +buffer.
  +
  +=item B<03: volatile variables>
  +
  +Variables which are used in the B<ex_clean> or B<ex_catch> clauses
  +must be declared with the storage class C<volatile>, otherwise they
  +might contain outdated information if B<ex_throw> throws an exception.
  +If using a "free if unset" approach like the example does in the
  +B<ex_clean> clause, the variables must be initialized (see B<02>) I<and>
  +remain valid upon use.
  +
  +=item B<04: clean before catch>
  +
  +The B<ex_clean> clause is not only written down before the B<ex_catch>
  +clause, it is also evaluated before the B<ex_catch> clause. So,
  +resources being cleaned up must no longer be used in the B<ex_catch>
  +block. The example above would have trouble referencing the character
  +strings in the printf3) statement because these have been free()d
  +before.
  +
  +=item B<05: variable uninitialization>
  +
  +If resources are passed away and out of the scope of the
  +B<ex_try>/B<ex_clean>/B<ex_catch> construct and the variables were
  +initialized for using a "free if unset" approach then they must be
  +uninitialized after being passed away. The example above would free()
  +C<cp1> in the B<ex_clean> clause if mallocex() throws an exception if
  +allocating a C<TOOBIG> buffer. The C<globalcontext-&gt;first> pointer
  +hence becomes invalid.
  +
  +=back
  +
  +As following is fixed version of the code (annotated with the pitfall
  +items for reference):
  +
  + /* GOOD EXAMPLE */
  + { /*01*/
  +     volatile /*03*/ char *cp1 = NULL /*02*/;
  +     volatile /*03*/ char *cp2 = NULL /*02*/;
  +     volatile /*03*/ char *cp3 = NULL /*02*/;
  +     try {
  +         cp1 = mallocex(SMALLAMOUNT);
  +         globalcontext->first = cp1;
  +         cp1 = NULL /*05 give away*/;
  +         cp2 = mallocex(TOOBIG);
  +         cp3 = mallocex(SMALLAMOUNT);
  +         strcpy(cp1, "foo");
  +         strcpy(cp2, "bar");
  +     }
  +     clean {
  +  /*04*/ printf("cp3=%s", cp3 == NULL /*02*/ ? "" : cp3);
  +         if (cp3 != NULL) 
  +             free(cp3);
  +         if (cp2 != NULL) 
  +             free(cp2);
  +         /*05 cp1 was given away */                       
  +     }                                                    
  +     catch(ex) {                                          
  +          /*05 global context untouched */                 
  +          rethrow;   
  +     }                                                    
  + }                                                        
  +
  +An alternative fixed version could also be:
  +
  + /* ALTERNATE *05* GOOD EXAMPLE */
  + { /*01*/
  +     volatile /*03*/ char *cp1 = NULL /*02*/;
  +     volatile /*03*/ char *cp2 = NULL /*02*/;
  +     volatile /*03*/ char *cp3 = NULL /*02*/;
  +     try {
  +         cp1 = mallocex(SMALLAMOUNT);
  +         globalcontext->first = cp1;
  +         /*05 keep responsibility*/
  +         cp2 = mallocex(TOOBIG);
  +         cp3 = mallocex(SMALLAMOUNT);
  +         strcpy(cp1, "foo"); 
  +         strcpy(cp2, "bar");
  +     }
  +     clean {
  +  /*04*/ printf("cp3=%s", cp3 == NULL /*02*/ ? "" : cp3);
  +         if (cp3 != NULL) 
  +             free(cp3);
  +         if (cp2 != NULL) 
  +             free(cp2);
  +         if (cp1 != NULL) 
  +             free(cp1);
  +     }
  +     catch(ex) {
  +         globalcontext->first = NULL;
  +         rethrow;
  +     }
  + }
  +
   
   =head1 MULTITHREADING ENVIRONMENTS
   

From ossp-cvs-owner@ossp.org  Sat Mar 30 19:56:03 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 55DB9763B5; Sat, 30 Mar 2002 19:56:03 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex AUTHORS ChangeLog Makefile.in README VERSION c...
Message-Id: <20020330185603.55DB9763B5@mail.ossp.org>
Date: Sat, 30 Mar 2002 19:56:03 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Mar-2002 19:56:03
  Branch: HEAD                             Handle: 2002033018560200

  Added files:
    ossp-pkg/ex             AUTHORS ChangeLog
  Modified files:
    ossp-pkg/ex             Makefile.in README VERSION configure.ac
                            devtool.conf ex-config.in ex.c ex.h ex_test.c

  Log:
    bump version and fix URLs

  Summary:
    Revision    Changes     Path
    1.1         +8  -0      ossp-pkg/ex/AUTHORS
    1.1         +22 -0      ossp-pkg/ex/ChangeLog
    1.6         +1  -1      ossp-pkg/ex/Makefile.in
    1.5         +4  -4      ossp-pkg/ex/README
    1.4         +1  -1      ossp-pkg/ex/VERSION
    1.5         +1  -1      ossp-pkg/ex/configure.ac
    1.7         +3  -3      ossp-pkg/ex/devtool.conf
    1.3         +1  -1      ossp-pkg/ex/ex-config.in
    1.7         +1  -1      ossp-pkg/ex/ex.c
    1.18        +1  -1      ossp-pkg/ex/ex.h
    1.10        +1  -1      ossp-pkg/ex/ex_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/ex/AUTHORS
  ============================================================
  $ cvs update -p -r1.1 AUTHORS
  
    AUTHORS
  
    This is a list of authors who have written
    or edited major parts of the OSSP ex sources.
  
    Ralf S. Engelschall   <rse@engelschall.com>
  
  Index: ossp-pkg/ex/ChangeLog
  ============================================================
  $ cvs update -p -r1.1 ChangeLog
     _____  __
    / _ \ \/ /
   |  __/>  < 
    \___/_/\_\
                 
    OSSP ex - Exception Handling Library
  
    ChangeLog
  
    This is the list of all changes to the OSSP ex source tree. For a list
    of just the user-visible and/or major changes please have a look at
    the NEWS file.
    
    Changes between 0.9.1 and 1.0.0 (xx-Feb-1999 to 12-May-1999)
  
    Changes between 0.9.0 and 0.9.1 (xx-Feb-1999 to 12-May-1999)
  
    Changes between GENESIS and 0.9.0 (Feb-1999 to 12-May-1999)
  
     *) Created initial version
        [Ralf S. Engelschall]
  
  Index: ossp-pkg/ex/Makefile.in
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 Makefile.in
  --- ossp-pkg/ex/Makefile.in	5 Feb 2002 19:52:24 -0000	1.5
  +++ ossp-pkg/ex/Makefile.in	30 Mar 2002 18:56:02 -0000	1.6
  @@ -5,7 +5,7 @@
   ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP ex, an exception handling library
  -##  which can be found at http://www.ossp.org/pkg/ex/.
  +##  which can be found at http://www.ossp.org/pkg/lib/ex/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/ex/README
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 README
  --- ossp-pkg/ex/README	8 Mar 2002 22:56:48 -0000	1.4
  +++ ossp-pkg/ex/README	30 Mar 2002 18:56:02 -0000	1.5
  @@ -4,7 +4,7 @@
     \___/_/\_\
                  
     OSSP ex - Exception Handling Library
  -  Version 0.9.1 (08-Mar-2002)
  +  Version 1.0.0 (30-Mar-2002)
   
     ABSTRACT
   
  @@ -28,7 +28,7 @@
     Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   
     This file is part of OSSP ex, an exception handling library which
  -  can be found at http://www.ossp.org/pkg/ex/.
  +  can be found at http://www.ossp.org/pkg/lib/ex/.
   
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
  @@ -52,6 +52,6 @@
   
     The documentation and latest release can be found on
   
  -  o http://www.ossp.org/pkg/ex/
  -  o  ftp://ftp.ossp.org/pkg/ex/
  +  o http://www.ossp.org/pkg/lib/ex/
  +  o  ftp://ftp.ossp.org/pkg/lib/ex/
   
  Index: ossp-pkg/ex/VERSION
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 VERSION
  --- ossp-pkg/ex/VERSION	8 Mar 2002 22:56:48 -0000	1.3
  +++ ossp-pkg/ex/VERSION	30 Mar 2002 18:56:02 -0000	1.4
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP ex (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP ex, Version 0.9.1 (08-Mar-2002)
  +  This is OSSP ex, Version 1.0.0 (30-Mar-2002)
   
  Index: ossp-pkg/ex/configure.ac
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 configure.ac
  --- ossp-pkg/ex/configure.ac	14 Mar 2002 15:12:49 -0000	1.4
  +++ ossp-pkg/ex/configure.ac	30 Mar 2002 18:56:02 -0000	1.5
  @@ -5,7 +5,7 @@
   dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP ex, an exception handling library
  -dnl ##  which can be found at http://www.ossp.org/pkg/ex/.
  +dnl ##  which can be found at http://www.ossp.org/pkg/lib/ex/.
   dnl ##
   dnl ##  Permission to use, copy, modify, and distribute this software for
   dnl ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/ex/devtool.conf
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 devtool.conf
  --- ossp-pkg/ex/devtool.conf	14 Mar 2002 15:12:49 -0000	1.6
  +++ ossp-pkg/ex/devtool.conf	30 Mar 2002 18:56:02 -0000	1.7
  @@ -40,12 +40,12 @@
       echo "+++ rolling"
       V=`./shtool version -l txt -d short VERSION`
       ./shtool tarball -o ex-${V}.tar.gz -d ex-${V} -u ossp -g ossp \
  -                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool*,*.tar.gz' -c 'gzip --best' .
  +                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool*,*.tar.gz,00TODO' -c 'gzip --best' .
       ls -l ex-${V}.tar.gz
       echo "+++ testing"
       gunzip <ex-${V}.tar.gz | tar tvf -
   
   %release
  -    echo "+++ copying to ftp://ftp.ossp.org/pkg/ex/"
  -    scp ex-*.tar.gz master.ossp.org:/e/ossp/ftp/pkg/ex/
  +    echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/ex/"
  +    scp ex-*.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/ex/
   
  Index: ossp-pkg/ex/ex-config.in
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 ex-config.in
  --- ossp-pkg/ex/ex-config.in	26 Jan 2002 22:35:02 -0000	1.2
  +++ ossp-pkg/ex/ex-config.in	30 Mar 2002 18:56:02 -0000	1.3
  @@ -6,7 +6,7 @@
   ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP ex, an exception handling library
  -##  which can be found at http://www.ossp.org/pkg/ex/.
  +##  which can be found at http://www.ossp.org/pkg/lib/ex/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/ex/ex.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 ex.c
  --- ossp-pkg/ex/ex.c	29 Jan 2002 20:10:53 -0000	1.6
  +++ ossp-pkg/ex/ex.c	30 Mar 2002 18:56:02 -0000	1.7
  @@ -5,7 +5,7 @@
   **  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP ex, an exception handling library
  -**  which can be found at http://www.ossp.org/pkg/ex/.
  +**  which can be found at http://www.ossp.org/pkg/lib/ex/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/ex/ex.h
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 ex.h
  --- ossp-pkg/ex/ex.h	7 Mar 2002 21:30:09 -0000	1.17
  +++ ossp-pkg/ex/ex.h	30 Mar 2002 18:56:02 -0000	1.18
  @@ -5,7 +5,7 @@
   **  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP ex, an exception handling library
  -**  which can be found at http://www.ossp.org/pkg/ex/.
  +**  which can be found at http://www.ossp.org/pkg/lib/ex/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/ex/ex_test.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 ex_test.c
  --- ossp-pkg/ex/ex_test.c	7 Mar 2002 21:30:10 -0000	1.9
  +++ ossp-pkg/ex/ex_test.c	30 Mar 2002 18:56:02 -0000	1.10
  @@ -5,7 +5,7 @@
   **  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP ex, an exception handling library
  -**  which can be found at http://www.ossp.org/pkg/ex/.
  +**  which can be found at http://www.ossp.org/pkg/lib/ex/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that

From ossp-cvs-owner@ossp.org  Sat Mar 30 20:05:00 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C78A676369; Sat, 30 Mar 2002 20:04:59 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex 00TODO AUTHORS ChangeLog INSTALL README THANKS...
Message-Id: <20020330190459.C78A676369@mail.ossp.org>
Date: Sat, 30 Mar 2002 20:04:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Mar-2002 20:04:59
  Branch: HEAD                             Handle: 2002033019045900

  Added files:
    ossp-pkg/ex             THANKS
  Modified files:
    ossp-pkg/ex             00TODO AUTHORS ChangeLog INSTALL README aclocal.m4

  Log:
    polishing

  Summary:
    Revision    Changes     Path
    1.5         +10 -0      ossp-pkg/ex/00TODO
    1.2         +7  -0      ossp-pkg/ex/AUTHORS
    1.2         +17 -10     ossp-pkg/ex/ChangeLog
    1.2         +6  -5      ossp-pkg/ex/INSTALL
    1.6         +4  -4      ossp-pkg/ex/README
    1.1         +16 -0      ossp-pkg/ex/THANKS
    1.2         +6  -6      ossp-pkg/ex/aclocal.m4
  ____________________________________________________________________________

  Index: ossp-pkg/ex/00TODO
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 00TODO
  --- ossp-pkg/ex/00TODO	30 Mar 2002 18:55:28 -0000	1.4
  +++ ossp-pkg/ex/00TODO	30 Mar 2002 19:04:59 -0000	1.5
  @@ -0,0 +1,10 @@
  +    _____  __
  +   / _ \ \/ /
  +  |  __/>  < 
  +   \___/_/\_\
  +               
  +  OSSP ex - Exception Handling
  +
  +  TODO
  +  ====
  +
  Index: ossp-pkg/ex/AUTHORS
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 AUTHORS
  --- ossp-pkg/ex/AUTHORS	30 Mar 2002 18:56:02 -0000	1.1
  +++ ossp-pkg/ex/AUTHORS	30 Mar 2002 19:04:59 -0000	1.2
  @@ -1,5 +1,12 @@
  +    _____  __
  +   / _ \ \/ /
  +  |  __/>  < 
  +   \___/_/\_\
  +               
  +  OSSP ex - Exception Handling Library
   
     AUTHORS
  +  =======
   
     This is a list of authors who have written
     or edited major parts of the OSSP ex sources.
  Index: ossp-pkg/ex/ChangeLog
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 ChangeLog
  --- ossp-pkg/ex/ChangeLog	30 Mar 2002 18:56:02 -0000	1.1
  +++ ossp-pkg/ex/ChangeLog	30 Mar 2002 19:04:59 -0000	1.2
  @@ -1,21 +1,28 @@
  -   _____  __
  -  / _ \ \/ /
  - |  __/>  < 
  -  \___/_/\_\
  +    _____  __
  +   / _ \ \/ /
  +  |  __/>  < 
  +   \___/_/\_\
                  
     OSSP ex - Exception Handling Library
   
     ChangeLog
  +  =========
   
  -  This is the list of all changes to the OSSP ex source tree. For a list
  -  of just the user-visible and/or major changes please have a look at
  -  the NEWS file.
  +  This is the list of all changes to the OSSP ex source tree. 
     
  -  Changes between 0.9.1 and 1.0.0 (xx-Feb-1999 to 12-May-1999)
  +  Changes between 0.9.1 and 1.0.0 (08-Mar-2002 to 30-Mar-2002)
   
  -  Changes between 0.9.0 and 0.9.1 (xx-Feb-1999 to 12-May-1999)
  +   *) Fixed manual page code layouting.
  +      [Ralf S. Engelschall]
   
  -  Changes between GENESIS and 0.9.0 (Feb-1999 to 12-May-1999)
  +   *) Added PROGRAMMING PITFALLS section to manual page (ex.pod).
  +      [Ralf S. Engelschall, Thomas Lotterer]
  +
  +  Changes between 0.9.0 and 0.9.1 (31-Jan-2002 to 08-Mar-2002)
  +
  +   *) 
  +
  +  Changes between GENESIS and 0.9.0 (31-Jan-2002)
   
      *) Created initial version
         [Ralf S. Engelschall]
  Index: ossp-pkg/ex/INSTALL
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 INSTALL
  --- ossp-pkg/ex/INSTALL	31 Jan 2002 21:03:39 -0000	1.1
  +++ ossp-pkg/ex/INSTALL	30 Mar 2002 19:04:59 -0000	1.2
  @@ -1,11 +1,12 @@
  -   _____  __
  -  / _ \ \/ /
  - |  __/>  < 
  -  \___/_/\_\
  +    _____  __
  +   / _ \ \/ /
  +  |  __/>  < 
  +   \___/_/\_\
                  
     OSSP ex - Exception Handling Library
   
  -  INSTALLATION
  +  INSTALL
  +  =======
   
     To install OSSP ex into /path/to/ex/ perform
     the following steps in your shell:
  Index: ossp-pkg/ex/README
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 README
  --- ossp-pkg/ex/README	30 Mar 2002 18:56:02 -0000	1.5
  +++ ossp-pkg/ex/README	30 Mar 2002 19:04:59 -0000	1.6
  @@ -1,7 +1,7 @@
  -   _____  __
  -  / _ \ \/ /
  - |  __/>  < 
  -  \___/_/\_\
  +    _____  __
  +   / _ \ \/ /
  +  |  __/>  < 
  +   \___/_/\_\
                  
     OSSP ex - Exception Handling Library
     Version 1.0.0 (30-Mar-2002)
  Index: ossp-pkg/ex/THANKS
  ============================================================
  $ cvs update -p -r1.1 THANKS
      _____  __
     / _ \ \/ /
    |  __/>  < 
     \___/_/\_\
                 
    OSSP ex - Exception Handling Library
  
    THANKS
    ======
  
    Credit has to be given to the following people who contributed ideas,
    bugfixes, hints, gave platform feedback, etc. (in alphabetical order):
  
    Thomas Lotterer     <thomas@lotterer.net>
    Michael Schloh      <michael@schloh.com>
  
  Index: ossp-pkg/ex/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 aclocal.m4
  --- ossp-pkg/ex/aclocal.m4	26 Jan 2002 20:12:19 -0000	1.1
  +++ ossp-pkg/ex/aclocal.m4	30 Mar 2002 19:04:59 -0000	1.2
  @@ -1,11 +1,11 @@
   dnl ##
  -dnl ##  SA - OSSP Socket Abstraction Library
  -dnl ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  OSSP ex - Exception Handling Library
  +dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
  -dnl ##  This file is part of OSSP SA, a socket abstraction library which
  -dnl ##  can be found at http://www.ossp.org/pkg/sa/.
  +dnl ##  This file is part of OSSP ex, an exception handling library
  +dnl ##  which can be found at http://www.ossp.org/pkg/lib/ex/.
   dnl ##
   dnl ##  Permission to use, copy, modify, and distribute this software for
   dnl ##  any purpose with or without fee is hereby granted, provided that

From ossp-cvs-owner@ossp.org  Sat Mar 30 20:07:29 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BFAAB76369; Sat, 30 Mar 2002 20:07:29 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex ChangeLog
Message-Id: <20020330190729.BFAAB76369@mail.ossp.org>
Date: Sat, 30 Mar 2002 20:07:29 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Mar-2002 20:07:29
  Branch: HEAD                             Handle: 2002033019072900

  Modified files:
    ossp-pkg/ex             ChangeLog

  Log:
    annotate with more details

  Summary:
    Revision    Changes     Path
    1.3         +5  -1      ossp-pkg/ex/ChangeLog
  ____________________________________________________________________________

  Index: ossp-pkg/ex/ChangeLog
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 ChangeLog
  --- ossp-pkg/ex/ChangeLog	30 Mar 2002 19:04:59 -0000	1.2
  +++ ossp-pkg/ex/ChangeLog	30 Mar 2002 19:07:29 -0000	1.3
  @@ -20,7 +20,11 @@
   
     Changes between 0.9.0 and 0.9.1 (31-Jan-2002 to 08-Mar-2002)
   
  -   *) 
  +   *) Source tree cleanups and polishing.
  +      [Ralf S. Engelschall]
  +
  +   *) Added feature of Deferred Exceptions.
  +      [Ralf S. Engelschall, Thomas Lotterer]
   
     Changes between GENESIS and 0.9.0 (31-Jan-2002)
   

From ossp-cvs-owner@ossp.org  Sat Mar 30 20:15:47 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6399676369; Sat, 30 Mar 2002 20:15:47 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/SHARE ossp_pkg.wml
Message-Id: <20020330191547.6399676369@mail.ossp.org>
Date: Sat, 30 Mar 2002 20:15:47 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   30-Mar-2002 20:15:47
  Branch: HEAD                             Handle: 2002033019154700

  Modified files:
    ossp-web/SHARE          ossp_pkg.wml

  Log:
    fix macros

  Summary:
    Revision    Changes     Path
    1.4         +8  -41     ossp-web/SHARE/ossp_pkg.wml
  ____________________________________________________________________________

  Index: ossp-web/SHARE/ossp_pkg.wml
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 ossp_pkg.wml
  --- ossp-web/SHARE/ossp_pkg.wml	15 Feb 2002 12:07:14 -0000	1.3
  +++ ossp-web/SHARE/ossp_pkg.wml	30 Mar 2002 19:15:47 -0000	1.4
  @@ -41,11 +41,7 @@
   .files0U,.files1U,A.files0U,A.files1U { color: #ffffff; }
   <<..
   <define-tag pkg_files>
  -<preserve url>
  -<preserve directory>
  -<preserve files>
  -<preserve stable>
  -<preserve unstable>
  +<preserve url directory files stable unstable>
   <set-var %attributes>
   <:
   my $url       = "<get-var url>";
  @@ -101,11 +97,7 @@
   print $O;
   :>
   </table>
  -<restore url>
  -<restore directory>
  -<restore files>
  -<restore stable>
  -<restore unstable>
  +<restore url directory files stable unstable>
   </define-tag>
   
   #   define a package summary list
  @@ -123,15 +115,7 @@
   </table>
   </define-tag>
   <define-tag pkg_item>
  -<preserve name>
  -<preserve longname>
  -<preserve desc>
  -<preserve done>
  -<preserve tag>
  -<preserve stable>
  -<preserve unstable>
  -<preserve derived>
  -<preserve type>
  +<preserve name longname desc done tag stable unstable derived type>
   <set-var %attributes>
     <tr>
       <td colspan=3 height=1 bgcolor="#b5b5b0"><imgdot height=1></td>
  @@ -158,22 +142,11 @@
         <pbar width=200 pdone="<get-var done>" cdone="#b5b5b0" ctext="#f5f5f0" ctodo="#996666">
   	</td>
     </tr>
  -<restore name>
  -<restore longname>
  -<restore desc>
  -<restore done>
  -<restore stable>
  -<restore unstable>
  -<restore derived>
  -<restore type>
  +<restore name longname desc done tag stable unstable derived type>
   </define-tag>
   
   <define-tag pkg_status>
  -<preserve stable>
  -<preserve unstable>
  -<preserve stable_date>
  -<preserve unstable_date>
  -<preserve done>
  +<preserve stable unstable stable_date unstable_date done>
   <set-var %attributes>
   <table cellspacing=0 cellpadding=0 border=0> 
     <tr>
  @@ -190,19 +163,13 @@
       </tr>
     >>
   </table>
  -<restore stable>
  -<restore unstable>
  -<restore stable_date>
  -<restore unstable_date>
  -<restore done>
  +<restore stable unstable stable_date unstable_date done>
   </define-tag>
   
   <define-tag pkg_author>
  -<preserve name>
  -<preserve mail>
  +<preserve name mail>
   <set-var %attributes>
     <get-var name> &lt;<a href="mailto:<get-var mail>"><get-var mail></a>&gt;<br>
  -<restore name>
  -<restore mail>
  +<restore name mail>
   </define-tag>
   

From ossp-cvs-owner@ossp.org  Sat Mar 30 20:16:59 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0C1BA76369; Sat, 30 Mar 2002 20:16:59 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/SHARE ossp_newsflash.wml
Message-Id: <20020330191659.0C1BA76369@mail.ossp.org>
Date: Sat, 30 Mar 2002 20:16:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   30-Mar-2002 20:16:58
  Branch: HEAD                             Handle: 2002033019165800

  Modified files:
    ossp-web/SHARE          ossp_newsflash.wml

  Log:
    fix macro

  Summary:
    Revision    Changes     Path
    1.5         +2  -7      ossp-web/SHARE/ossp_newsflash.wml
  ____________________________________________________________________________

  Index: ossp-web/SHARE/ossp_newsflash.wml
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 ossp_newsflash.wml
  --- ossp-web/SHARE/ossp_newsflash.wml	14 Mar 2002 18:38:31 -0000	1.4
  +++ ossp-web/SHARE/ossp_newsflash.wml	30 Mar 2002 19:16:58 -0000	1.5
  @@ -4,10 +4,7 @@
   ##
   
   <define-tag newsflash>
  -<preserve from>
  -<preserve max>
  -<preserve more>
  -<preserve nohead>
  +<preserve from max more nohead>
   <set-var nohead=*>
   <set-var %attributes>
   <table width=400 cellspacing=0 cellpadding=1 border=0>
  @@ -56,8 +53,6 @@
   </tr>
   ">
   </table>
  -<restore more>
  -<restore max>
  -<restore from>
  +<restore from max more nohead>
   </define-tag>
   

From ossp-cvs-owner@ossp.org  Sat Mar 30 20:18:26 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2180876369; Sat, 30 Mar 2002 20:18:26 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new news.txt ossp-web/pkg/lib/ex index.wml ossp-w...
Message-Id: <20020330191826.2180876369@mail.ossp.org>
Date: Sat, 30 Mar 2002 20:18:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   30-Mar-2002 20:18:26
  Branch: HEAD                             Handle: 2002033019182401

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/ex     index.wml

  Log:
    update for OSSP ex 1.0.0

  Summary:
    Revision    Changes     Path
    1.7         +1  -0      ossp-web/new/news.txt
    1.3         +4  -4      ossp-web/pkg/lib/ex/index.wml
    1.12        +1  -1      ossp-web/pkg/lib/index.wml
  ____________________________________________________________________________

  Index: ossp-web/new/news.txt
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 news.txt
  --- ossp-web/new/news.txt	15 Mar 2002 11:51:07 -0000	1.6
  +++ ossp-web/new/news.txt	30 Mar 2002 19:18:24 -0000	1.7
  @@ -1,3 +1,4 @@
  +30-Mar-2002: Released L<OSSP ex> 1.0.0
   15-Mar-2002: Released L<OSSP val> 0.9.0
   15-Mar-2002: Released L<OSSP sa> 0.9.1
   14-Mar-2002: Released T<OSSP lmtp2nntp> 1.2a4
  Index: ossp-web/pkg/lib/ex/index.wml
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 index.wml
  --- ossp-web/pkg/lib/ex/index.wml	8 Mar 2002 22:59:11 -0000	1.2
  +++ ossp-web/pkg/lib/ex/index.wml	30 Mar 2002 19:18:25 -0000	1.3
  @@ -31,9 +31,9 @@
   <h2>Status</h2>
   
   <pkg_status
  -    stable="none"    stable_date="none"
  -    unstable="0.9.1" unstable_date="08-Mar-2002"
  -	done=95>
  +    stable="1.0.0"   stable_date="30-Mar-2002"
  +    unstable="none"  unstable_date=""
  +	done=100>
   
   <h2>Source</h2>
   
  @@ -41,5 +41,5 @@
       url=$(FTP_ROOT_URL)/pkg/lib/ex/
       directory=$(FTP_ROOT_DIR)/pkg/lib/ex/
       files="ex-*.tar.gz" 
  -	stable="none" unstable="ex-0.9.1.tar.gz">
  +	stable="ex-1.0.0.tar.gz" unstable="none">
   	
  Index: ossp-web/pkg/lib/index.wml
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 index.wml
  --- ossp-web/pkg/lib/index.wml	15 Mar 2002 11:50:17 -0000	1.11
  +++ ossp-web/pkg/lib/index.wml	30 Mar 2002 19:18:25 -0000	1.12
  @@ -22,7 +22,7 @@
   			done=95 stable=none unstable=0.9.1>
     <pkg_item name="ex" longname="OSSP ex" type="lib"
               desc="Exception Handling"
  -			done=95 stable=none unstable=0.9.1>
  +			done=100 stable=1.0.0 unstable=none>
     <pkg_item name="l2" longname="OSSP l2" type="lib"
               desc="Flexible Logging"
   			done=80 stable=none unstable=none>

From ossp-cvs-owner@ossp.org  Mon Apr  1 10:32:57 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C04A076369; Mon,  1 Apr 2002 10:32:56 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str AUTHORS ChangeLog INSTALL LICENSE Makefile.in...
Message-Id: <20020401083256.C04A076369@mail.ossp.org>
Date: Mon,  1 Apr 2002 10:32:56 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Apr-2002 10:32:56
  Branch: HEAD                             Handle: 2002040109325401

  Modified files:
    ossp-pkg/str            AUTHORS ChangeLog INSTALL LICENSE Makefile.in
                            README THANKS TODO aclocal.m4 configure.ac
                            str-config.in str-config.pod str.h.in str.pod
                            str_base64.c str_basic.c str_format.c str_hash.c
                            str_memory.c str_p.h str_parse.c str_search.c
                            str_test.c str_token.c str_version.c

  Log:
    finally switch to full OSSP branding

  Summary:
    Revision    Changes     Path
    1.7         +1  -1      ossp-pkg/str/AUTHORS
    1.37        +1  -1      ossp-pkg/str/ChangeLog
    1.2         +1  -1      ossp-pkg/str/INSTALL
    1.4         +3  -1      ossp-pkg/str/LICENSE
    1.44        +4  -3      ossp-pkg/str/Makefile.in
    1.18        +5  -4      ossp-pkg/str/README
    1.8         +1  -1      ossp-pkg/str/THANKS
    1.22        +1  -1      ossp-pkg/str/TODO
    1.6         +0  -1      ossp-pkg/str/aclocal.m4
    1.10        +3  -3      ossp-pkg/str/configure.ac
    1.6         +4  -3      ossp-pkg/str/str-config.in
    1.5         +4  -3      ossp-pkg/str/str-config.pod
    1.4         +4  -3      ossp-pkg/str/str.h.in
    1.33        +4  -3      ossp-pkg/str/str.pod
    1.6         +4  -3      ossp-pkg/str/str_base64.c
    1.11        +4  -3      ossp-pkg/str/str_basic.c
    1.27        +4  -3      ossp-pkg/str/str_format.c
    1.6         +4  -3      ossp-pkg/str/str_hash.c
    1.7         +4  -3      ossp-pkg/str/str_memory.c
    1.19        +4  -3      ossp-pkg/str/str_p.h
    1.19        +4  -3      ossp-pkg/str/str_parse.c
    1.18        +4  -3      ossp-pkg/str/str_search.c
    1.24        +4  -3      ossp-pkg/str/str_test.c
    1.8         +4  -3      ossp-pkg/str/str_token.c
    1.14        +10 -10     ossp-pkg/str/str_version.c
  ____________________________________________________________________________

  Index: ossp-pkg/str/AUTHORS
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 AUTHORS
  --- ossp-pkg/str/AUTHORS	20 Jan 2000 18:56:18 -0000	1.6
  +++ ossp-pkg/str/AUTHORS	1 Apr 2002 08:32:54 -0000	1.7
  @@ -4,7 +4,7 @@
      ___) | |_| |   
     |____/ \__|_|   
                   
  -  Str - String Library                 
  +  OSSP str - String Handling                 
     ____________________________________________________________________
   
     AUTHORS
  Index: ossp-pkg/str/ChangeLog
  ============================================================
  $ cvs diff -u -r1.36 -r1.37 ChangeLog
  --- ossp-pkg/str/ChangeLog	31 Dec 2001 10:23:10 -0000	1.36
  +++ ossp-pkg/str/ChangeLog	1 Apr 2002 08:32:54 -0000	1.37
  @@ -4,7 +4,7 @@
     ___) | |_| |   
    |____/ \__|_|   
                   
  - Str - String Library                 
  + OSSP str - String Handling                 
    ____________________________________________________________________
   
    ChangeLog
  Index: ossp-pkg/str/INSTALL
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 INSTALL
  --- ossp-pkg/str/INSTALL	26 Dec 1999 17:46:36 -0000	1.1
  +++ ossp-pkg/str/INSTALL	1 Apr 2002 08:32:54 -0000	1.2
  @@ -4,7 +4,7 @@
      ___) | |_| |   
     |____/ \__|_|   
                   
  -  Str - String Library                 
  +  OSSP str - String Handling                 
   
     INSTALL
   
  Index: ossp-pkg/str/LICENSE
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 LICENSE
  --- ossp-pkg/str/LICENSE	2 Jan 2002 17:09:13 -0000	1.3
  +++ ossp-pkg/str/LICENSE	1 Apr 2002 08:32:54 -0000	1.4
  @@ -1,6 +1,8 @@
   
  -  Str - String Library
  +  OSSP str - String Handling
  +
     Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>
   
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/str/Makefile.in
  ============================================================
  $ cvs diff -u -r1.43 -r1.44 Makefile.in
  --- ossp-pkg/str/Makefile.in	5 Feb 2002 19:54:21 -0000	1.43
  +++ ossp-pkg/str/Makefile.in	1 Apr 2002 08:32:54 -0000	1.44
  @@ -1,9 +1,10 @@
   ##
  -##  Str - String Library
  +##  OSSP str - String Handling
   ##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>
   ##
  -##  This file is part of Str, a string handling and manipulation 
  -##  library which can be found at http://www.engelschall.com/sw/str/.
  +##  This file is part of OSSP str, a string handling and manipulation 
  +##  library which can be found at http://www.ossp.org/pkg/lib/str/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/str/README
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 README
  --- ossp-pkg/str/README	2 Jan 2002 17:09:13 -0000	1.17
  +++ ossp-pkg/str/README	1 Apr 2002 08:32:54 -0000	1.18
  @@ -4,12 +4,12 @@
      ___) | |_| |   
     |____/ \__|_|   
                   
  -  Str - String Library                 
  +  OSSP str - String Handling                 
     Version 0.9.6 (13-Sep-2001)
   
     ABSTRACT
   
  -  The Str library is a generic string library written in ANSI C which
  +  OSSP str is a generic string library written in ANSI C which
     provides functions for handling, matching, parsing, searching and
     formatting of C strings. So it can be considered as a superset
     of POSIX string(3), but its main intention is to provide a more
  @@ -18,6 +18,7 @@
     COPYRIGHT AND LICENSE
   
     Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>
   
     This product includes software developed by the University of
     California, Berkeley and its contributors. This product includes
  @@ -46,8 +47,8 @@
   
     The documentation and latest release can be found on
   
  -  o http://www.engelschall.com/sw/str/
  -  o  ftp://ftp.engelschall.com/sw/str/
  +  o http://www.ossp.org/pkg/lib/str/
  +  o  ftp://ftp.ossp.org/pkg/lib/str/
   
                                          Ralf S. Engelschall
                                          rse@engelschall.com
  Index: ossp-pkg/str/THANKS
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 THANKS
  --- ossp-pkg/str/THANKS	16 Aug 2001 13:25:54 -0000	1.7
  +++ ossp-pkg/str/THANKS	1 Apr 2002 08:32:54 -0000	1.8
  @@ -4,7 +4,7 @@
      ___) | |_| |   
     |____/ \__|_|   
                   
  -  Str - String Library                 
  +  OSSP str - String Handling                 
     ____________________________________________________________________
     
     THANKS
  Index: ossp-pkg/str/TODO
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 TODO
  --- ossp-pkg/str/TODO	27 Apr 2001 12:22:21 -0000	1.21
  +++ ossp-pkg/str/TODO	1 Apr 2002 08:32:54 -0000	1.22
  @@ -4,7 +4,7 @@
      ___) | |_| |   
     |____/ \__|_|   
                   
  -  Str - String Library                 
  +  OSSP str - String Handling                 
   
     TODO
   
  Index: ossp-pkg/str/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 aclocal.m4
  --- ossp-pkg/str/aclocal.m4	14 Mar 2002 15:49:51 -0000	1.5
  +++ ossp-pkg/str/aclocal.m4	1 Apr 2002 08:32:54 -0000	1.6
  @@ -109,7 +109,6 @@
           *-pipe* ) ;;
                 * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
       esac
  -    AC_COMPILER_OPTION(ggdb3, -ggdb3, -ggdb3, CFLAGS="$CFLAGS -ggdb3")
       CFLAGS="$CFLAGS -pedantic"
       CFLAGS="$CFLAGS -Wall"
       WMORE="-Wshadow -Wpointer-arith -Wcast-align -Winline"
  Index: ossp-pkg/str/configure.ac
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 configure.ac
  --- ossp-pkg/str/configure.ac	14 Mar 2002 15:49:51 -0000	1.9
  +++ ossp-pkg/str/configure.ac	1 Apr 2002 08:32:54 -0000	1.10
  @@ -5,10 +5,10 @@
   AC_PREREQ(2.53)
   AC_INIT
   AC_HEADLINE(dnl
  -OSSP str, String Library, dnl
  +OSSP str, String Handling, dnl
   STR_VERSION, str_version.c, dnl
  -[Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org>
  -Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>])
  +[Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org>])
   AC_PLATFORM(PLATFORM)
   
   AC_PROG_MAKE_SET
  Index: ossp-pkg/str/str-config.in
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 str-config.in
  --- ossp-pkg/str/str-config.in	2 Jan 2002 17:09:13 -0000	1.5
  +++ ossp-pkg/str/str-config.in	1 Apr 2002 08:32:54 -0000	1.6
  @@ -1,10 +1,11 @@
   #!/bin/sh
   ##
  -##  Str - String Library
  +##  OSSP str - String Handling
   ##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>
   ##
  -##  This file is part of Str, a string handling and manipulation 
  -##  library which can be found at http://www.engelschall.com/sw/str/.
  +##  This file is part of OSSP str, a string handling and manipulation 
  +##  library which can be found at http://www.ossp.org/pkg/lib/str/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/str/str-config.pod
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 str-config.pod
  --- ossp-pkg/str/str-config.pod	2 Jan 2002 17:09:13 -0000	1.4
  +++ ossp-pkg/str/str-config.pod	1 Apr 2002 08:32:54 -0000	1.5
  @@ -1,9 +1,10 @@
   ##
  -##  Str - String Library
  +##  OSSP str - String Handling
   ##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>
   ##
  -##  This file is part of Str, a string handling and manipulation 
  -##  library which can be found at http://www.engelschall.com/sw/str/.
  +##  This file is part of OSSP str, a string handling and manipulation 
  +##  library which can be found at http://www.ossp.org/pkg/lib/str/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/str/str.h.in
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 str.h.in
  --- ossp-pkg/str/str.h.in	2 Jan 2002 17:09:13 -0000	1.3
  +++ ossp-pkg/str/str.h.in	1 Apr 2002 08:32:54 -0000	1.4
  @@ -1,9 +1,10 @@
   /*
  -**  Str - String Library
  +**  OSSP str - String Handling
   **  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of Str, a string handling and manipulation 
  -**  library which can be found at http://www.engelschall.com/sw/str/.
  +**  This file is part of OSSP str, a string handling and manipulation 
  +**  library which can be found at http://www.ossp.org/pkg/lib/str/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/str/str.pod
  ============================================================
  $ cvs diff -u -r1.32 -r1.33 str.pod
  --- ossp-pkg/str/str.pod	31 Jan 2002 13:35:39 -0000	1.32
  +++ ossp-pkg/str/str.pod	1 Apr 2002 08:32:54 -0000	1.33
  @@ -1,9 +1,10 @@
   ##
  -##  Str - String Library
  +##  OSSP str - String Handling
   ##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>
   ##
  -##  This file is part of Str, a string handling and manipulation 
  -##  library which can be found at http://www.engelschall.com/sw/str/.
  +##  This file is part of OSSP str, a string handling and manipulation 
  +##  library which can be found at http://www.ossp.org/pkg/lib/str/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/str/str_base64.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 str_base64.c
  --- ossp-pkg/str/str_base64.c	2 Jan 2002 17:09:13 -0000	1.5
  +++ ossp-pkg/str/str_base64.c	1 Apr 2002 08:32:54 -0000	1.6
  @@ -1,9 +1,10 @@
   /*
  -**  Str - String Library
  +**  OSSP str - String Handling
   **  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of Str, a string handling and manipulation 
  -**  library which can be found at http://www.engelschall.com/sw/str/.
  +**  This file is part of OSSP str, a string handling and manipulation 
  +**  library which can be found at http://www.ossp.org/pkg/lib/str/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/str/str_basic.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 str_basic.c
  --- ossp-pkg/str/str_basic.c	31 Jan 2002 13:34:13 -0000	1.10
  +++ ossp-pkg/str/str_basic.c	1 Apr 2002 08:32:54 -0000	1.11
  @@ -1,9 +1,10 @@
   /*
  -**  Str - String Library
  +**  OSSP str - String Handling
   **  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of Str, a string handling and manipulation 
  -**  library which can be found at http://www.engelschall.com/sw/str/.
  +**  This file is part of OSSP str, a string handling and manipulation 
  +**  library which can be found at http://www.ossp.org/pkg/lib/str/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/str/str_format.c
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 str_format.c
  --- ossp-pkg/str/str_format.c	2 Jan 2002 17:09:13 -0000	1.26
  +++ ossp-pkg/str/str_format.c	1 Apr 2002 08:32:54 -0000	1.27
  @@ -1,9 +1,10 @@
   /*
  -**  Str - String Library
  +**  OSSP str - String Handling
   **  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of Str, a string handling and manipulation 
  -**  library which can be found at http://www.engelschall.com/sw/str/.
  +**  This file is part of OSSP str, a string handling and manipulation 
  +**  library which can be found at http://www.ossp.org/pkg/lib/str/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/str/str_hash.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 str_hash.c
  --- ossp-pkg/str/str_hash.c	2 Jan 2002 17:09:13 -0000	1.5
  +++ ossp-pkg/str/str_hash.c	1 Apr 2002 08:32:54 -0000	1.6
  @@ -1,9 +1,10 @@
   /*
  -**  Str - String Library
  +**  OSSP str - String Handling
   **  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of Str, a string handling and manipulation 
  -**  library which can be found at http://www.engelschall.com/sw/str/.
  +**  This file is part of OSSP str, a string handling and manipulation 
  +**  library which can be found at http://www.ossp.org/pkg/lib/str/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/str/str_memory.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 str_memory.c
  --- ossp-pkg/str/str_memory.c	2 Jan 2002 17:09:13 -0000	1.6
  +++ ossp-pkg/str/str_memory.c	1 Apr 2002 08:32:54 -0000	1.7
  @@ -1,9 +1,10 @@
   /*
  -**  Str - String Library
  +**  OSSP str - String Handling
   **  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of Str, a string handling and manipulation 
  -**  library which can be found at http://www.engelschall.com/sw/str/.
  +**  This file is part of OSSP str, a string handling and manipulation 
  +**  library which can be found at http://www.ossp.org/pkg/lib/str/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/str/str_p.h
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 str_p.h
  --- ossp-pkg/str/str_p.h	2 Jan 2002 17:09:13 -0000	1.18
  +++ ossp-pkg/str/str_p.h	1 Apr 2002 08:32:54 -0000	1.19
  @@ -1,9 +1,10 @@
   /*
  -**  Str - String Library
  +**  OSSP str - String Handling
   **  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of Str, a string handling and manipulation 
  -**  library which can be found at http://www.engelschall.com/sw/str/.
  +**  This file is part of OSSP str, a string handling and manipulation 
  +**  library which can be found at http://www.ossp.org/pkg/lib/str/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/str/str_parse.c
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 str_parse.c
  --- ossp-pkg/str/str_parse.c	2 Jan 2002 17:09:13 -0000	1.18
  +++ ossp-pkg/str/str_parse.c	1 Apr 2002 08:32:54 -0000	1.19
  @@ -1,9 +1,10 @@
   /*
  -**  Str - String Library
  +**  OSSP str - String Handling
   **  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of Str, a string handling and manipulation 
  -**  library which can be found at http://www.engelschall.com/sw/str/.
  +**  This file is part of OSSP str, a string handling and manipulation 
  +**  library which can be found at http://www.ossp.org/pkg/lib/str/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/str/str_search.c
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 str_search.c
  --- ossp-pkg/str/str_search.c	2 Jan 2002 17:09:13 -0000	1.17
  +++ ossp-pkg/str/str_search.c	1 Apr 2002 08:32:54 -0000	1.18
  @@ -1,9 +1,10 @@
   /*
  -**  Str - String Library
  +**  OSSP str - String Handling
   **  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of Str, a string handling and manipulation 
  -**  library which can be found at http://www.engelschall.com/sw/str/.
  +**  This file is part of OSSP str, a string handling and manipulation 
  +**  library which can be found at http://www.ossp.org/pkg/lib/str/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/str/str_test.c
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 str_test.c
  --- ossp-pkg/str/str_test.c	2 Jan 2002 17:09:13 -0000	1.23
  +++ ossp-pkg/str/str_test.c	1 Apr 2002 08:32:54 -0000	1.24
  @@ -1,9 +1,10 @@
   /*
  -**  Str - String Library
  +**  OSSP str - String Handling
   **  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of Str, a string handling and manipulation 
  -**  library which can be found at http://www.engelschall.com/sw/str/.
  +**  This file is part of OSSP str, a string handling and manipulation 
  +**  library which can be found at http://www.ossp.org/pkg/lib/str/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/str/str_token.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 str_token.c
  --- ossp-pkg/str/str_token.c	2 Jan 2002 17:09:14 -0000	1.7
  +++ ossp-pkg/str/str_token.c	1 Apr 2002 08:32:55 -0000	1.8
  @@ -1,9 +1,10 @@
   /*
  -**  Str - String Library
  +**  OSSP str - String Handling
   **  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of Str, a string handling and manipulation 
  -**  library which can be found at http://www.engelschall.com/sw/str/.
  +**  This file is part of OSSP str, a string handling and manipulation 
  +**  library which can be found at http://www.ossp.org/pkg/lib/str/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/str/str_version.c
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 str_version.c
  --- ossp-pkg/str/str_version.c	13 Sep 2001 14:12:58 -0000	1.13
  +++ ossp-pkg/str/str_version.c	1 Apr 2002 08:32:55 -0000	1.14
  @@ -1,5 +1,5 @@
   /*
  -**  str_version.c -- Version Information for Str (syntax: C/C++)
  +**  str_version.c -- Version Information for OSSP str (syntax: C/C++)
   **  [automatically generated and maintained by GNU shtool]
   */
   
  @@ -8,7 +8,7 @@
   #ifndef _STR_VERSION_C_
   #define _STR_VERSION_C_
   
  -#define STR_VERSION 0x009206
  +#define STR_VERSION 0x009207
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _STR_VERSION_C_AS_HEADER_
   
   str_version_t str_version = {
  -    0x009206,
  -    "0.9.6",
  -    "0.9.6 (13-Sep-2001)",
  -    "This is Str, Version 0.9.6 (13-Sep-2001)",
  -    "Str 0.9.6 (13-Sep-2001)",
  -    "Str/0.9.6",
  -    "@(#)Str 0.9.6 (13-Sep-2001)",
  -    "$Id: str_version.c,v 1.13 2001/09/13 14:12:58 rse Exp $"
  +    0x009207,
  +    "0.9.7",
  +    "0.9.7 (01-Apr-2002)",
  +    "This is OSSP str, Version 0.9.7 (01-Apr-2002)",
  +    "OSSP str 0.9.7 (01-Apr-2002)",
  +    "OSSP str/0.9.7",
  +    "@(#)OSSP str 0.9.7 (01-Apr-2002)",
  +    "$Id: str_version.c,v 1.14 2002/04/01 08:32:55 rse Exp $"
   };
   
   #endif /* _STR_VERSION_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Mon Apr  1 11:03:51 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9898C76369; Mon,  1 Apr 2002 11:03:50 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str .cvsignore Makefile.in configure.ac str_p.h s...
Message-Id: <20020401090350.9898C76369@mail.ossp.org>
Date: Mon,  1 Apr 2002 11:03:50 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Apr-2002 11:03:50
  Branch: HEAD                             Handle: 2002040110034900

  Added files:
    ossp-pkg/str            ts.c ts.h
  Modified files:
    ossp-pkg/str            .cvsignore Makefile.in configure.ac str_p.h
                            str_test.c

  Log:
    - switch to our OSSP ts sub-library
    - switch from str_config.h to just config.h

  Summary:
    Revision    Changes     Path
    1.13        +13 -14     ossp-pkg/str/.cvsignore
    1.45        +4  -5      ossp-pkg/str/Makefile.in
    1.11        +1  -1      ossp-pkg/str/configure.ac
    1.20        +4  -2      ossp-pkg/str/str_p.h
    1.25        +92 -164    ossp-pkg/str/str_test.c
    1.1         +468 -0     ossp-pkg/str/ts.c
    1.1         +64 -0      ossp-pkg/str/ts.h
  ____________________________________________________________________________

  Index: ossp-pkg/str/.cvsignore
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 .cvsignore
  --- ossp-pkg/str/.cvsignore	24 Jan 2002 16:30:04 -0000	1.12
  +++ ossp-pkg/str/.cvsignore	1 Apr 2002 09:03:49 -0000	1.13
  @@ -1,26 +1,25 @@
  -Makefile
  -config.log
  -config.cache
  -config.status
  -str-config
  -str_config.h
  -str_config.h.in
  -str_test
   *.core
  -*.lo
   *.la
  +*.lo
   .libs
  -libtool
  -str_pcre_gen
  -str_pcre_tab.c
  +Makefile
  +config.cache
   config.guess
  +config.h
  +config.h.in
  +config.log
  +config.status
   config.sub
   configure
  +libtool
   libtool.m4
   ltmain.sh
   shtool
  -str.3
  +str-config
   str-config.1
  +str.3
   str.h
   str_pcre.tab
  -config.h.in
  +str_pcre_gen
  +str_pcre_tab.c
  +str_test
  Index: ossp-pkg/str/Makefile.in
  ============================================================
  $ cvs diff -u -r1.44 -r1.45 Makefile.in
  --- ossp-pkg/str/Makefile.in	1 Apr 2002 08:32:54 -0000	1.44
  +++ ossp-pkg/str/Makefile.in	1 Apr 2002 09:03:49 -0000	1.45
  @@ -104,8 +104,8 @@
   	$(LIBTOOL) --mode=link --quiet $(CC) -o libstr.la $(OBJS) -rpath $(libdir) \
   	-version-info `$(SHTOOL) version -l c -d libtool str_version.c`
   
  -str_test: str_test.o libstr.la
  -	$(LIBTOOL) --mode=link --quiet $(CC) $(LDFLAGS) -o str_test str_test.o libstr.la $(LIBS)
  +str_test: str_test.o ts.o libstr.la
  +	$(LIBTOOL) --mode=link --quiet $(CC) $(LDFLAGS) -o str_test str_test.o ts.o libstr.la $(LIBS)
   
   str-config.1: str-config.pod $(_VERSION_FILE)
   	BASENAME="str-config"; SEC=1; \
  @@ -116,7 +116,6 @@
   	NAME="Str"; ONELINE="String Library"; \
   	$(_MANPAGE)
   
  -
   str_pcre.lo: str_pcre.tab str_pcre.c
   str_pcre.tab: str_pcre.c
   	$(CC) $(CFLAGS) -DSTR_PCRE_TAB $(LDFLAGS) -o str_pcre.gen str_pcre.c $(LIBS)
  @@ -147,7 +146,7 @@
   	
   distclean: clean
   	$(RM) str-config
  -	$(RM) str_config.h
  +	$(RM) config.h
   	$(RM) str_pcre.tab
   	$(RM) config.log config.cache config.status
   	$(RM) libtool
  @@ -156,7 +155,7 @@
   
   realclean: distclean
   	$(RM) config.guess config.sub ltmain.sh libtool.m4
  -	$(RM) configure str_config.h.in
  +	$(RM) configure config.h.in
   	$(RM) str-config.1 str.3
   	$(RM) shtool
   
  Index: ossp-pkg/str/configure.ac
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 configure.ac
  --- ossp-pkg/str/configure.ac	1 Apr 2002 08:32:54 -0000	1.10
  +++ ossp-pkg/str/configure.ac	1 Apr 2002 09:03:49 -0000	1.11
  @@ -34,7 +34,7 @@
   AC_CHECK_EXTLIB([Dmalloc], dmalloc, dmalloc_debug, dmalloc.h, 
                   [AC_DEFINE(WITH_DMALLOC, 1, [Define to 1 if building with Dmalloc])])
   
  -AC_CONFIG_HEADERS(str_config.h)
  +AC_CONFIG_HEADERS(config.h)
   AC_CONFIG_FILES([Makefile str.h str-config])
   AC_CONFIG_COMMANDS([adjustment], [chmod a+x str-config])
   AC_OUTPUT
  Index: ossp-pkg/str/str_p.h
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 str_p.h
  --- ossp-pkg/str/str_p.h	1 Apr 2002 08:32:54 -0000	1.19
  +++ ossp-pkg/str/str_p.h	1 Apr 2002 09:03:49 -0000	1.20
  @@ -30,13 +30,15 @@
   #ifndef _STR_P_H_
   #define _STR_P_H_
   
  -#include "str.h"
  -#include "str_config.h"
  +#ifdef HAVE_CONFIG_H
  +#include "config.h"
  +#endif
   
   #include <stdlib.h>     /* for malloc, etc. */
   #include <math.h>       /* for modf(3) */
   #include <string.h>     /* ... */
   
  +#include "str.h"
   #include "str_pcre.h"
   
   #if defined(HAVE_DMALLOC_H) && defined(WITH_DMALLOC)
  Index: ossp-pkg/str/str_test.c
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 str_test.c
  --- ossp-pkg/str/str_test.c	1 Apr 2002 08:32:54 -0000	1.24
  +++ ossp-pkg/str/str_test.c	1 Apr 2002 09:03:49 -0000	1.25
  @@ -30,40 +30,40 @@
   #include <stdio.h>
   #include <stdlib.h>
   
  -#include "str.h"
  -#include "str_config.h"
  +#ifdef HAVE_CONFIG_H
  +#include "config.h"
  +#endif
   
   #if defined(HAVE_DMALLOC_H) && defined(WITH_DMALLOC)
   #include "dmalloc.h"
   #endif
   
  +#include "str.h"
  +#include "ts.h"
  +
   #define LONG_STRING 1024
   
   /*
    * Test String Length
    */
   
  -static void test_length(int *ok, int *fail)
  +TS_TEST(test_length)
   {
  -    if (str_len(NULL) == 0)
  -        (*ok)++;
  -    else 
  -        (*fail)++;
  -
  -    if (str_len("") == 0)
  -        (*ok)++;
  -    else 
  -        (*fail)++;
  -
  -    if (str_len("a") == 1)
  -        (*ok)++;
  -    else 
  -        (*fail)++;
  -
  -    if (str_len("foo bar quux") == 12)
  -        (*ok)++;
  -    else 
  -        (*fail)++;
  +    ts_test_check(TS_CTX, "NULL handling");
  +    if (str_len(NULL) != 0)
  +        ts_test_fail(TS_CTX, "unexpected non-zero return");
  +
  +    ts_test_check(TS_CTX, "empty string handling");
  +    if (str_len("") != 0)
  +        ts_test_fail(TS_CTX, "unexpected non-zero return");
  +
  +    ts_test_check(TS_CTX, "short string handling");
  +    if (str_len("a") != 1)
  +        ts_test_fail(TS_CTX, "unexpected return != 1");
  +
  +    ts_test_check(TS_CTX, "longer string handling");
  +    if (str_len("foo bar quux") != 12)
  +        ts_test_fail(TS_CTX, "unexpected return != 12");
       return;
   }
   
  @@ -87,22 +87,18 @@
       { NULL, 0, NULL, 0 }
   };
   
  -static void test_locate(int *ok, int *fail)
  +TS_TEST(test_locate)
   {
       int i;
       char *rv;
   
       for (i = 0; loctab[i].s != NULL; i++) {
           rv = str_locate(loctab[i].s, loctab[i].n, loctab[i].p);
  -        printf("str_locate(\"%s\", %d, \"%s\") = \"%s\"\n",
  -                loctab[i].s, loctab[i].n, loctab[i].p, rv == NULL ? "[NULL]" : rv);
  -        if ((rv-loctab[i].s == loctab[i].o) || (rv == NULL && loctab[i].o == -1))
  -            (*ok)++;
  -        else {
  -            fprintf(stderr, "ERROR: result was \"%s\", expected \"%s\"\n",
  -                    rv, loctab[i].s+loctab[i].o);
  -            (*fail)++;
  -        }
  +        ts_test_check(TS_CTX, "str_locate(\"%s\", %d, \"%s\") = \"%s\"",
  +                      loctab[i].s, loctab[i].n, loctab[i].p, rv == NULL ? "[NULL]" : rv);
  +        if (!((rv-loctab[i].s == loctab[i].o) || (rv == NULL && loctab[i].o == -1)))
  +            ts_test_fail(TS_CTX, "result was \"%s\", expected \"%s\"",
  +                         rv, loctab[i].s+loctab[i].o);
       }
       return;
   }
  @@ -129,22 +125,18 @@
       { NULL, 0, NULL, 0, 0 }
   };
   
  -static void test_span(int *ok, int *fail)
  +TS_TEST(test_span)
   {
       int i;
       char *rv;
   
       for (i = 0; spantab[i].s != NULL; i++) {
           rv = str_span(spantab[i].s, spantab[i].n, spantab[i].cs, spantab[i].m);
  -        printf("str_span(\"%s\", %d, \"%s\", %d) = \"%s\"\n",
  -                spantab[i].s, spantab[i].n, spantab[i].cs, spantab[i].m, rv);
  -        if (rv-spantab[i].s == spantab[i].o)
  -            (*ok)++;
  -        else {
  -            fprintf(stderr, "ERROR: result was \"%s\", expected \"%s\"\n",
  -                    rv, spantab[i].s+spantab[i].o);
  -            (*fail)++;
  -        }
  +        ts_test_check(TS_CTX, "str_span(\"%s\", %d, \"%s\", %d) = \"%s\"",
  +                      spantab[i].s, spantab[i].n, spantab[i].cs, spantab[i].m, rv);
  +        if (rv-spantab[i].s != spantab[i].o)
  +            ts_test_fail(TS_CTX, "result was \"%s\", expected \"%s\"",
  +                         rv, spantab[i].s+spantab[i].o);
       }
       return;
   }
  @@ -198,7 +190,7 @@
       return;
   }
   
  -static void test_tokenize(int *ok, int *fail)
  +TS_TEST(test_tokenize)
   {  
       char *cp;
       char *cp2;
  @@ -207,23 +199,24 @@
       int i, j;
   
       for (i = 0; toktab[i].s != NULL; i++) {
  -        fprintf(stderr, "Testing tokenization of %s\n", prstr(toktab[i].s)), prstr_free();
  +        ts_test_check(TS_CTX, "tokenization of \"%s\"\n", prstr(toktab[i].s));
  +        prstr_free();
           cp2 = cp = strdup(toktab[i].s);
           for (j = 0; j < 4; j++) {
               cp3 = strdup(cp);
               rc = str_token(&cp, toktab[i].d, toktab[i].q, toktab[i].c, toktab[i].f);
  -            fprintf(stderr, "str_token(&%s, %s, %s, %s, %d) = %s\n",
  -                    prstr(cp3), prstr(toktab[i].d),
  -                    prstr(toktab[i].q), prstr(toktab[i].c),
  -                    toktab[i].f, prstr(rc)), prstr_free();
  +            ts_test_check(TS_CTX, "str_token(&%s, %s, %s, %s, %d) = %s",
  +                          prstr(cp3), prstr(toktab[i].d),
  +                          prstr(toktab[i].q), prstr(toktab[i].c),
  +                          toktab[i].f, prstr(rc)), prstr_free();
               free(cp3);
               if (!(   (rc == NULL && toktab[i].r[j] == NULL)
                     || (rc != NULL && toktab[i].r[j] != NULL && strcmp(rc, toktab[i].r[j]) == 0))) {
  -                fprintf(stderr, "ERROR: expected result is %s\n", prstr(toktab[i].r[j])), prstr_free();
  +                ts_test_fail(TS_CTX, "expected result is \"%s\"", prstr(toktab[i].r[j]));
  +                prstr_free();
               }
           }
           free(cp2);
  -        fprintf(stderr, "\n");
       }
       return;
   }
  @@ -253,14 +246,14 @@
       { NULL, NULL, NULL, NULL, NULL, NULL, 0 }
   };
   
  -static void test_parsing(int *ok, int *fail)
  +TS_TEST(test_parsing)
   {
       int i;
       int rv;
       char *r1, *r2, *r3, *r4;
   
       for (i = 0; test2_tab[i].s != NULL; i++) {
  -        fprintf(stderr, "%d. str_parse(\"%s\", \"%s\", ...)\n", i, test2_tab[i].s, test2_tab[i].p);
  +        ts_test_check(TS_CTX, "str_parse(\"%s\", \"%s\", ...)", test2_tab[i].s, test2_tab[i].p);
           if (*(test2_tab[i].p) == 's') {
               r1 = NULL;
               r2 = test2_tab[i].r2;
  @@ -272,10 +265,6 @@
               r1 = r2 = r3 = r4 = NULL;
               rv = str_parse(test2_tab[i].s, test2_tab[i].p, &r1, &r2, &r3, &r4);
           }
  -        fprintf(stderr, "%d. str_parse(\"%s\", \"%s\", ...) = %d + <%s><%s><%s><%s>\n",
  -                i, test2_tab[i].s, test2_tab[i].p, rv,
  -                r1 == NULL ? "NULL" : r1, r2 == NULL ? "NULL" : r2, 
  -                r3 == NULL ? "NULL" : r3, r4 == NULL ? "NULL" : r4);
           if (rv != test2_tab[i].rv ||
               ((r1 == NULL && test2_tab[i].r1 != NULL) || 
                (r1 != NULL && test2_tab[i].r1 == NULL) || 
  @@ -289,16 +278,13 @@
               ((r4 == NULL && test2_tab[i].r4 != NULL) || 
                (r4 != NULL && test2_tab[i].r4 == NULL) || 
                (r4 != NULL && test2_tab[i].r4 != NULL && strcmp(r4, test2_tab[i].r4) != 0))) {
  -            fprintf(stderr, "    ERROR: expected result: %d + <%s><%s><%s><%s>\n",
  -                    test2_tab[i].rv, 
  -                    test2_tab[i].r1 == NULL ? "NULL" : test2_tab[i].r1,
  -                    test2_tab[i].r2 == NULL ? "NULL" : test2_tab[i].r2,
  -                    test2_tab[i].r3 == NULL ? "NULL" : test2_tab[i].r3,
  -                    test2_tab[i].r4 == NULL ? "NULL" : test2_tab[i].r4);
  -            (*fail)++;
  +            ts_test_fail(TS_CTX, "expected result: %d + <%s><%s><%s><%s>",
  +                         test2_tab[i].rv, 
  +                         test2_tab[i].r1 == NULL ? "NULL" : test2_tab[i].r1,
  +                         test2_tab[i].r2 == NULL ? "NULL" : test2_tab[i].r2,
  +                         test2_tab[i].r3 == NULL ? "NULL" : test2_tab[i].r3,
  +                         test2_tab[i].r4 == NULL ? "NULL" : test2_tab[i].r4);
           }
  -        else
  -            (*ok)++;
       }
       str_parse(NULL, NULL);
       return;
  @@ -308,7 +294,7 @@
    * Test String Formatting
    */
   
  -static void test_formatting(int *ok, int *fail)
  +TS_TEST(test_formatting)
   {
       char buf1[LONG_STRING];
       char buf2[LONG_STRING];
  @@ -347,160 +333,102 @@
       int x, y;
       int len;
   
  -    fprintf(stderr, "\n** Testing str_format format codes against vendor sprintf **\n\n");
  +    ts_test_check(TS_CTX, "str_format vs. vendor sprintf comparison");
   
       for (x = 0; fp_fmt[x] != NULL; x++) {
  -        fprintf(stderr, "testing \"%s\"\n", fp_fmt[x]);
  +        ts_test_check(TS_CTX, "str_format(..,..,\"%s\",..)", fp_fmt[x]);
           for (y = 0; fp_nums[y] != 0; y++) {
               len = str_format(buf1, sizeof(buf1), fp_fmt[x], fp_nums[y]);
               sprintf(buf2, fp_fmt[x], fp_nums[y]);
  -            if (strcmp(buf1, buf2) != 0) {
  -                fprintf(stderr, "  mismatch:\n");
  -                fprintf(stderr, "    str_format: \"%s\"\n"
  -                                "    sprintf:    \"%s\"\n", buf1, buf2);
  -                (*fail)++;
  -            }
  -            else {
  -                fprintf(stderr, "  ok: %d \"%s\" (%d)\n", len, buf1, (int)strlen(buf1));
  -                (*ok)++;
  -            }
  +            if (strcmp(buf1, buf2) != 0)
  +                ts_test_fail(TS_CTX, "mismatch: str_format: \"%s\", snprintf: \"%s\"", buf1, buf2);
           }
       }
   
       for (x = 0; int_fmt[x] != NULL; x++) {
  -        fprintf(stderr, "testing \"%s\"\n", int_fmt[x]);
  +        ts_test_check(TS_CTX, "str_format(..,..,\"%s\",..)", int_fmt[x]);
           for (y = 0; int_nums[y] != 0; y++) {
               len = str_format(buf1, sizeof(buf1), int_fmt[x], int_nums[y]);
               sprintf(buf2, int_fmt[x], int_nums[y]);
  -            if (strcmp(buf1, buf2) != 0) {
  -                fprintf(stderr, "  mismatch:\n");
  -                fprintf(stderr, "    str_format: \"%s\"\n"
  -                                "    sprintf:    \"%s\"\n", buf1, buf2);
  -                (*fail)++;
  -            }
  -            else {
  -                fprintf(stderr, "  ok: %d \"%s\" (%d)\n", len, buf1, (int)strlen(buf1));
  -                (*ok)++;
  -            }
  +            if (strcmp(buf1, buf2) != 0)
  +                ts_test_fail(TS_CTX, "mismatch: str_format: \"%s\", snprintf: \"%s\"", buf1, buf2);
           }
       }
       return;
   }
   
  -static void test_base64_do(unsigned char *ucp, int ulen, int mode, int *ok, int *fail)
  +/*
  + * Test Base64 Encoding/Decoding
  + */
  +
  +static void test_base64_do(ts_test_t *_t, unsigned char *ucp, int ulen, int mode)
   {
       unsigned char ucp2[1024];
       char cp[1024];
       int n1, n2, n3, n4;
       int i;
  -    int fine;
   
       n1 = str_base64(NULL, 0, ucp, ulen, STR_BASE64_ENCODE|mode);
       n2 = str_base64(cp, sizeof(cp), ucp, ulen, STR_BASE64_ENCODE|mode);
  -    if (n1 != n2) {
  -        fprintf(stderr, "   ERROR: encoding length mismatch: %d vs. %d\n", n1, n2);
  -        (*fail)++;
  -    }
  -    else
  -        (*ok)++;
  +    if (n1 != n2)
  +        ts_test_fail(TS_CTX, "encoding length mismatch: %d vs. %d\n", n1, n2);
       n3 = str_base64(cp, n2, NULL, 0, STR_BASE64_DECODE|mode);
  -    if (n3 != ulen) {
  -        fprintf(stderr, "   ERROR: decoding check length mismatch: %d vs. %d\n", n3, ulen);
  -        (*fail)++;
  -    }
  -    else
  -        (*ok)++;
  +    if (n3 != ulen)
  +        ts_test_fail(TS_CTX, "decoding check length mismatch: %d vs. %d\n", n3, ulen);
       n4 = str_base64(cp, n2, ucp2, ulen, STR_BASE64_DECODE|mode);
  -    if (n3 != n4) {
  -        fprintf(stderr, "   ERROR: decoding length mismatch: %d vs. %d\n", n3, n4);
  -        (*fail)++;
  -    }
  -    else
  -        (*ok)++;
  -    fine = TRUE;
  +    if (n3 != n4)
  +        ts_test_fail(TS_CTX, "decoding length mismatch: %d vs. %d\n", n3, n4);
       for (i = 0; i < 256; i++) {
           if (ucp[i] != ucp2[i]) {
  -            fine = FALSE;
  +            ts_test_fail(TS_CTX, "decoding contents mismatch\n");
               break;
           }
       }
  -    if (!fine) {
  -        fprintf(stderr, "   ERROR: decoding mismatch\n");
  -        (*fail)++;
  -    }
  -    else
  -        (*ok)++;
       return;
   }
   
  -static void test_base64(int *ok, int *fail)
  +TS_TEST(test_base64)
   {
       unsigned char ucp[256];
       int i;
       
  -    fprintf(stderr, "\n** Testing str_base64 **\n\n");
  -
  -    fprintf(stderr, "1. Encode/Decode of 0 bytes\n");
  +    ts_test_check(TS_CTX, "encode/decode of 0 bytes");
       for (i = 0; i < 256; i++)
           ucp[i] = 0x55;
  -    test_base64_do(ucp, 256, STR_BASE64_STRICT, ok, fail);
  +    test_base64_do(_t, ucp, 256, STR_BASE64_STRICT);
   
  -    fprintf(stderr, "2. Encode/Decode of increasing bytes\n");
  +    ts_test_check(TS_CTX, "encode/decode of increasing bytes\n");
       for (i = 0; i < 256; i++)
           ucp[i] = i;
  -    test_base64_do(ucp, 256, STR_BASE64_STRICT, ok, fail);
  +    test_base64_do(_t, ucp, 256, STR_BASE64_STRICT);
   
  -    fprintf(stderr, "3. Encode/Decode of distributed bytes\n");
  +    ts_test_check(TS_CTX, "encode/decode of distributed bytes\n");
       for (i = 0; i < 256; i++)
           ucp[i] = i*31;
  -    test_base64_do(ucp, 256, STR_BASE64_STRICT, ok, fail);
  +    test_base64_do(_t, ucp, 256, STR_BASE64_STRICT);
   
       return;
   }
   
   /*
  - * Main Test Driver Program
  + * Main Test Suite Procedure
    */
   
  -struct {
  -    char *name;
  -    void (*func)(int *, int *);
  -    int ok;
  -    int fail;
  -} tests[] = {
  -    { "Length",      test_length,      0, 0 },
  -    { "Locating",    test_locate,      0, 0 },
  -    { "Spanning",    test_span,        0, 0 },
  -    { "Tokenizing",  test_tokenize,    0, 0 },
  -    { "Parsing",     test_parsing,     0, 0 },
  -    { "Formatting",  test_formatting,  0, 0 },
  -    { "Base64",      test_base64,      0, 0 },
  -    { NULL, NULL, 0,0 }
  -};
  -
   int main(int argc, char *argv[])
   {
  -    int i;
  -    int fail;
  -    int ok;
  +    ts_suite_t *ts;
  +    int n;
   
  -    ok = 0;
  -    fail = 0;
  -    fprintf(stderr, "\n");
  -    fprintf(stderr, "String Library Test Suite\n");
  -    fprintf(stderr, "________________________________________\n\n");
  -    for (i = 0; tests[i].name != NULL; i++) {
  -        fprintf(stderr, "==== Testing %s ====\n", tests[i].name);
  -        tests[i].ok = tests[i].fail = 0;
  -        tests[i].func(&tests[i].ok, &tests[i].fail);
  -        fprintf(stderr, "==== Tests failed %d/%d ====\n", tests[i].fail, tests[i].ok+tests[i].fail);
  -        fprintf(stderr, "\n");
  -        ok += tests[i].ok;
  -        fail += tests[i].fail;
  -    }
  -    fprintf(stderr, "________________________________________\n\n");
  -    fprintf(stderr, "TOTAL: failed %d/%d\n", fail, fail+ok);
  -    fprintf(stderr, "\n");
  -    return fail;
  +    ts = ts_suite_new("OSSP str (String Handling)");
  +    ts_suite_test(ts, test_length,     "String Length Determination");
  +    ts_suite_test(ts, test_locate,     "String Locating");
  +    ts_suite_test(ts, test_span,       "String Spanning");
  +    ts_suite_test(ts, test_tokenize,   "String Tokenizing");
  +    ts_suite_test(ts, test_parsing,    "String Parsing");
  +    ts_suite_test(ts, test_formatting, "String Formatting");
  +    ts_suite_test(ts, test_base64,     "String Encoding/Decoding");
  +    n = ts_suite_run(ts);
  +    ts_suite_free(ts);
  +    return n;
   }
   
  Index: ossp-pkg/str/ts.c
  ============================================================
  $ cvs update -p -r1.1 ts.c
  /*
  **  TS - OSSP Test Suite Library
  **  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP TS, a small test suite library which
  **  can be found at http://www.ossp.org/pkg/ts/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  ts.c: test suite library
  */
  
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  #include <stdarg.h>
  
  #include "config.h"
  #if defined(HAVE_DMALLOC_H) && defined(WITH_DMALLOC)
  #include "dmalloc.h"
  #endif
  
  #include "ts.h"
  
  /* embedded ring data structure library */
  #define RING_ENTRY(elem) \
      struct { elem *next; elem *prev; }
  #define RING_HEAD(elem) \
      struct { elem *next; elem *prev; }
  #define RING_SENTINEL(hp, elem, link) \
      (elem *)((char *)(hp) - ((size_t)(&((elem *)0)->link)))
  #define RING_FIRST(hp) \
      (hp)->next
  #define RING_LAST(hp) \
      (hp)->prev
  #define RING_NEXT(ep, link) \
      (ep)->link.next
  #define RING_PREV(ep, link) \
      (ep)->link.prev
  #define RING_INIT(hp, elem, link) \
      do { RING_FIRST((hp)) = RING_SENTINEL((hp), elem, link); \
           RING_LAST((hp))  = RING_SENTINEL((hp), elem, link); } while (0)
  #define RING_EMPTY(hp, elem, link) \
      (RING_FIRST((hp)) == RING_SENTINEL((hp), elem, link))
  #define RING_ELEM_INIT(ep, link) \
      do { RING_NEXT((ep), link) = (ep); \
           RING_PREV((ep), link) = (ep); } while (0)
  #define RING_SPLICE_BEFORE(lep, ep1, epN, link) \
      do { RING_NEXT((epN), link) = (lep); \
           RING_PREV((ep1), link) = RING_PREV((lep), link); \
           RING_NEXT(RING_PREV((lep), link), link) = (ep1); \
           RING_PREV((lep), link) = (epN); } while (0)
  #define RING_SPLICE_TAIL(hp, ep1, epN, elem, link) \
      RING_SPLICE_BEFORE(RING_SENTINEL((hp), elem, link), (ep1), (epN), link)
  #define RING_INSERT_TAIL(hp, nep, elem, link) \
      RING_SPLICE_TAIL((hp), (nep), (nep), elem, link)
  #define RING_FOREACH(ep, hp, elem, link) \
      for ((ep)  = RING_FIRST((hp)); \
           (ep) != RING_SENTINEL((hp), elem, link); \
           (ep)  = RING_NEXT((ep), link))
  
  /* test suite test log */
  struct tstl_st;
  typedef struct tstl_st tstl_t;
  struct tstl_st {
      RING_ENTRY(tstl_t) next;
      char              *text;
      const char        *file;
      int                line;
  };
  
  /* test suite test check */
  struct tstc_st;
  typedef struct tstc_st tstc_t;
  struct tstc_st {
      RING_ENTRY(tstc_t) next;
      char              *title;
      int                failed;
      const char        *file;
      int                line;
      RING_HEAD(tstl_t)  logs;
  };
  
  /* test suite test */
  struct ts_test_st {
      RING_ENTRY(ts_test_t)  next;
      char              *title;
      ts_test_cb_t         func;
      const char        *file;
      int                line;
      RING_HEAD(tstc_t)  checks;
  };
  
  /* test suite */
  struct ts_suite_st {
      char              *title;
      RING_HEAD(ts_test_t)   tests;
  };
  
  /* minimal output-independent vprintf(3) variant which supports %{c,s,d,%} only */
  static int ts_suite_mvxprintf(char *buffer, size_t bufsize, const char *format, va_list ap)
  {
      /* sufficient integer buffer: <available-bits> x log_10(2) + safety */
      char ibuf[((sizeof(int)*8)/3)+10]; 
      char *cp;
      char c;
      int d;
      int n;
      int bytes;
  
      if (format == NULL || ap == NULL)
          return -1;
      bytes = 0;
      while (*format != '\0') {
          if (*format == '%') {
              c = *(format+1);
              if (c == '%') {
                  /* expand "%%" */
                  cp = &c;
                  n = sizeof(char);
              }
              else if (c == 'c') {
                  /* expand "%c" */
                  c = (char)va_arg(ap, int);
                  cp = &c;
                  n = sizeof(char);
              }
              else if (c == 's') {
                  /* expand "%s" */
                  if ((cp = (char *)va_arg(ap, char *)) == NULL)
                      cp = "(null)";
                  n = strlen(cp);
              }
              else if (c == 'd') {
                  /* expand "%d" */
                  d = (int)va_arg(ap, int);
  #ifdef HAVE_SNPRINTF
                  snprintf(ibuf, sizeof(ibuf), "%d", d); /* explicitly secure */
  #else
                  sprintf(ibuf, "%d", d);                /* implicitly secure */
  #endif
                  cp = ibuf;
                  n = strlen(cp);
              }
              else {
                  /* any other "%X" */
                  cp = (char *)format;
                  n  = 2;
              }
              format += 2;
          }
          else {
              /* plain text */
              cp = (char *)format;
              if ((format = strchr(cp, '%')) == NULL)
                  format = strchr(cp, '\0');
              n = format - cp;
          }
          /* perform output operation */
          if (buffer != NULL) {
              if (n > bufsize)
                  return -1;
              memcpy(buffer, cp, n);
              buffer  += n;
              bufsize -= n;
          }
          bytes += n;
      }
      /* nul-terminate output */
      if (buffer != NULL) {
          if (bufsize == 0)
              return -1;
          *buffer = '\0';
      }
      return bytes;
  }
  
  /* minimal vasprintf(3) variant which supports %{c,s,d} only */
  static char *ts_suite_mvasprintf(const char *format, va_list ap)
  {
      char *buffer;
      int n;
      va_list ap2;
  
      if (format == NULL || ap == NULL)
          return NULL;
      ap2 = ap;
      if ((n = ts_suite_mvxprintf(NULL, 0, format, ap)) == -1)
          return NULL;
      if ((buffer = (char *)malloc(n+1)) == NULL)
          return NULL;
      ts_suite_mvxprintf(buffer, n+1, format, ap2);
      return buffer;
  }
  
  /* minimal asprintf(3) variant which supports %{c,s,d} only */
  static char *ts_suite_masprintf(const char *format, ...)
  {
      va_list ap;
      char *cp;
  
      va_start(ap, format);
      cp = ts_suite_mvasprintf(format, ap);
      va_end(ap);
      return cp;
  }
  
  /* create test suite */
  ts_suite_t *ts_suite_new(const char *fmt, ...)
  {
      ts_suite_t *ts;
      va_list ap;
  
      if ((ts = (ts_suite_t *)malloc(sizeof(ts_suite_t))) == NULL)
          return NULL;
      va_start(ap, fmt);
      ts->title = ts_suite_mvasprintf(fmt, ap);
      RING_INIT(&ts->tests, ts_test_t, next);
      va_end(ap);
      return ts;
  }
  
  /* add test case to test suite */
  void ts_suite_test(ts_suite_t *ts, ts_test_cb_t func, const char *fmt, ...)
  {
      ts_test_t *tst;
      va_list ap;
  
      if (ts == NULL || func == NULL || fmt == NULL)
          return;
      if ((tst = (ts_test_t *)malloc(sizeof(ts_test_t))) == NULL)
          return;
      RING_ELEM_INIT(tst, next);
      va_start(ap, fmt);
      tst->title = ts_suite_mvasprintf(fmt, ap);
      va_end(ap);
      tst->func = func;
      tst->file = NULL;
      tst->line = 0;
      RING_INIT(&tst->checks, tstc_t, next);
      RING_INSERT_TAIL(&ts->tests, tst, ts_test_t, next);
      return;
  }
  
  /* run test suite */
  int ts_suite_run(ts_suite_t *ts)
  {
      ts_test_t *tst;
      tstc_t *tstc;
      tstl_t *tstl;
      int total_tests, total_tests_suite_failed;
      int total_checks, total_checks_failed;
      int test_checks, test_checks_failed;
      const char *file;
      int line;
      char *cp;
  
      if (ts == NULL)
          return 0;
  
      /* init total counters */
      total_tests         = 0;
      total_tests_suite_failed  = 0;
      total_checks        = 0;
      total_checks_failed = 0;
  
      fprintf(stdout, "\n");
      fprintf(stdout, " Test Suite: %s\n", ts->title);
      fprintf(stdout, " __________________________________________________________________\n");
      fprintf(stdout, "\n");
      fflush(stdout);
  
      /* iterate through all test cases */
      RING_FOREACH(tst, &ts->tests, ts_test_t, next) {
          cp = ts_suite_masprintf(" Test: %s ........................................"
                                  "........................................", tst->title);
          cp[60] = '\0';
          fprintf(stdout, "%s", cp);
          free(cp);
          fflush(stdout);
  
          /* init test case counters */
          test_checks        = 0;
          test_checks_failed = 0;
  
          /* run the test case function */
          tst->func(tst);
  
          /* iterate through all performed checks to determine status */
          RING_FOREACH(tstc, &tst->checks, tstc_t, next) {
              test_checks++;
              if (tstc->failed)
                  test_checks_failed++;
          }
  
          if (test_checks_failed > 0) {
              /* some checks failed, so do detailed reporting of test case */
              fprintf(stdout, " FAILED\n");
              fprintf(stdout, "       Ops, %d/%d checks failed! Detailed report follows:\n",
                      test_checks_failed, test_checks);
              RING_FOREACH(tstc, &tst->checks, tstc_t, next) {
                  file = (tstc->file != NULL ? tstc->file : tst->file);
                  line = (tstc->line != 0    ? tstc->line : tst->line);
                  if (file != NULL)
                      fprintf(stdout, "       Check: %s [%s:%d]\n", tstc->title, file, line);
                  else
                      fprintf(stdout, "       Check: %s\n", tstc->title);
                  RING_FOREACH(tstl, &tstc->logs, tstl_t, next) {
                      file = (tstl->file != NULL ? tstl->file : file);
                      line = (tstl->line != 0    ? tstl->line : line);
                      if (file != NULL)
                          fprintf(stdout, "              Log: %s [%s:%d]\n", tstl->text, file, line);
                      else
                          fprintf(stdout, "              Log: %s\n", tstl->text);
                  }
              }
          }
          else {
              /* test case ran successfully */
              fprintf(stdout, ".... OK\n");
          }
          fflush(stdout);
  
          /* accumulate counters */
          total_checks += test_checks;
          total_tests++;
          if (test_checks_failed > 0) {
              total_checks_failed += test_checks_failed;
              total_tests_suite_failed++;
          }
      }
  
      /* print test suite summary */
      fprintf(stdout, " __________________________________________________________________\n");
      fprintf(stdout, "\n");
      fprintf(stdout, " Test Summary: %d tests (%d ok, %d failed), %d checks (%d ok, %d failed)\n", 
              total_tests, (total_tests - total_tests_suite_failed), total_tests_suite_failed, 
              total_checks, (total_checks - total_checks_failed), total_checks_failed); 
      if (total_tests_suite_failed > 0)
          fprintf(stdout, " Test Suite: FAILED\n");
      else
          fprintf(stdout, " Test Suite: OK\n");
      fprintf(stdout, "\n");
      fflush(stdout);
  
      return total_checks_failed;
  }
  
  /* destroy test suite */
  void ts_suite_free(ts_suite_t *ts)
  {
      ts_test_t *tst;
      tstc_t *tstc;
      tstl_t *tstl;
  
      if (ts == NULL)
          return;
      RING_FOREACH(tst, &ts->tests, ts_test_t, next) {
          RING_FOREACH(tstc, &tst->checks, tstc_t, next) {
              RING_FOREACH(tstl, &tstc->logs, tstl_t, next) {
                  free(tstl->text);
              }
              free(tstc->title);
              free(tstc);
          }
          free(tst->title);
          free(tst);
      }
      free(ts->title);
      free(ts);
      return;
  }
  
  /* annotate test case with file name and line number */
  ts_test_t *ts_test_ctx(ts_test_t *tst, const char *file, int line)
  {
      if (tst != NULL && file != NULL) {
          tst->file = file;
          tst->line = line;
      }
      return tst;
  }
  
  /* annotate test case with check */
  void ts_test_check(ts_test_t *tst, const char *fmt, ...)
  {
      tstc_t *tstc;
      va_list ap;
  
      if (tst == NULL || fmt == NULL)
          return;
      if ((tstc = (tstc_t *)malloc(sizeof(tstc_t))) == NULL)
          return;
      va_start(ap, fmt);
      RING_ELEM_INIT(tstc, next);
      tstc->title = ts_suite_mvasprintf(fmt, ap);
      tstc->failed = 0;
      tstc->file = tst->file;
      tstc->line = tst->line;
      RING_INIT(&tstc->logs, tstl_t, next);
      RING_INSERT_TAIL(&tst->checks, tstc, tstc_t, next);
      va_end(ap);
      return;
  }
  
  /* annotate test case with log message and failure */
  void ts_test_fail(ts_test_t *tst, const char *fmt, ...)
  {
      tstc_t *tstc;
      tstl_t *tstl;
      va_list ap;
  
      if (tst == NULL || fmt == NULL)
          return;
      if ((tstl = (tstl_t *)malloc(sizeof(tstl_t))) == NULL)
          return;
      va_start(ap, fmt);
      tstl->text = ts_suite_mvasprintf(fmt, ap);
      tstl->file = tst->file;
      tstl->line = tst->line;
      RING_ELEM_INIT(tstl, next);
      tstc = RING_LAST(&tst->checks);
      RING_INSERT_TAIL(&tstc->logs, tstl, tstl_t, next);
      tstc->failed = 1;
      va_end(ap);
      return;
  }
  
  /* annotate test case with log message only */
  void ts_test_log(ts_test_t *tst, const char *fmt, ...)
  {
      tstc_t *tstc;
      tstl_t *tstl;
      va_list ap;
  
      if (tst == NULL || fmt == NULL)
          return;
      if ((tstl = (tstl_t *)malloc(sizeof(tstl_t))) == NULL)
          return;
      va_start(ap, fmt);
      tstl->text = ts_suite_mvasprintf(fmt, ap);
      tstl->file = tst->file;
      tstl->line = tst->line;
      RING_ELEM_INIT(tstl, next);
      tstc = RING_LAST(&tst->checks);
      RING_INSERT_TAIL(&tstc->logs, tstl, tstl_t, next);
      va_end(ap);
      return;
  }
  
  Index: ossp-pkg/str/ts.h
  ============================================================
  $ cvs update -p -r1.1 ts.h
  /*
  **  TS - OSSP Test Suite Library
  **  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP TS, a small test suite library which
  **  can be found at http://www.ossp.org/pkg/ts/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  ts.h: test suite library API
  */
  
  #ifndef _TS_H_
  #define _TS_H_
  
  /* test suite object type */
  struct ts_suite_st;
  typedef struct ts_suite_st ts_suite_t;
  
  /* test object type */
  struct ts_test_st;
  typedef struct ts_test_st ts_test_t;
  
  /* test callback function type */
  typedef void (*ts_test_cb_t)(ts_test_t *);
  
  /* test suite operations */
  ts_suite_t *ts_suite_new  (const char *fmt, ...);
  void        ts_suite_test (ts_suite_t *s, ts_test_cb_t func, const char *fmt, ...);
  int         ts_suite_run  (ts_suite_t *s);
  void        ts_suite_free (ts_suite_t *s);
  
  /* test operations */
  ts_test_t  *ts_test_ctx   (ts_test_t *t, const char *file, int line);
  void        ts_test_check (ts_test_t *t, const char *fmt, ...);
  void        ts_test_fail  (ts_test_t *t, const char *fmt, ...);
  void        ts_test_log   (ts_test_t *t, const char *fmt, ...);
  
  /* test suite short-cut macros */
  #define TS_TEST(name) \
      static void name(ts_test_t *_t)
  #define TS_CTX \
      ts_test_ctx(_t, __FILE__, __LINE__)
  
  #endif /* _TS_H_ */
  

From ossp-cvs-owner@ossp.org  Mon Apr  1 11:08:31 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DFF3576369; Mon,  1 Apr 2002 11:08:30 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str ChangeLog
Message-Id: <20020401090830.DFF3576369@mail.ossp.org>
Date: Mon,  1 Apr 2002 11:08:30 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Apr-2002 11:08:30
  Branch: HEAD                             Handle: 2002040110083000

  Modified files:
    ossp-pkg/str            ChangeLog

  Log:
    document recent changes

  Summary:
    Revision    Changes     Path
    1.38        +16 -0      ossp-pkg/str/ChangeLog
  ____________________________________________________________________________

  Index: ossp-pkg/str/ChangeLog
  ============================================================
  $ cvs diff -u -r1.37 -r1.38 ChangeLog
  --- ossp-pkg/str/ChangeLog	1 Apr 2002 08:32:54 -0000	1.37
  +++ ossp-pkg/str/ChangeLog	1 Apr 2002 09:08:30 -0000	1.38
  @@ -9,6 +9,22 @@
   
    ChangeLog
   
  + Changes between 0.9.6 and 0.9.7 (28-Dec-2001 to xx-Apr-2002):
  +
  +   *) Use OSSP ts (Test Suite) sub-library for "make check".
  +      [Ralf S. Engelschall]
  +
  +   *) Switched to full "OSSP str" branding and this way its official
  +      location from engelschall.com to ossp.org.
  +      [Ralf S. Engelschall]
  +
  +   *) Fixed str_concat: it included the terminating NUL in copy 
  +      and added a useless NUL.
  +      [Thomas Lotterer]
  +
  +   *) Upgraded to PCRE 3.9
  +      [Ralf S. Engelschall]
  +
    Changes between 0.9.5 and 0.9.6 (16-Aug-2001 to 28-Dec-2001):
   
      *) Switched to devtool stuff

From ossp-cvs-owner@ossp.org  Mon Apr  1 11:10:19 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 60B8776369; Mon,  1 Apr 2002 11:10:19 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str ChangeLog
Message-Id: <20020401091019.60B8776369@mail.ossp.org>
Date: Mon,  1 Apr 2002 11:10:19 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Apr-2002 11:10:19
  Branch: HEAD                             Handle: 2002040110101900

  Modified files:
    ossp-pkg/str            ChangeLog

  Log:
    there was one more change

  Summary:
    Revision    Changes     Path
    1.39        +4  -0      ossp-pkg/str/ChangeLog
  ____________________________________________________________________________

  Index: ossp-pkg/str/ChangeLog
  ============================================================
  $ cvs diff -u -r1.38 -r1.39 ChangeLog
  --- ossp-pkg/str/ChangeLog	1 Apr 2002 09:08:30 -0000	1.38
  +++ ossp-pkg/str/ChangeLog	1 Apr 2002 09:10:19 -0000	1.39
  @@ -18,6 +18,10 @@
         location from engelschall.com to ossp.org.
         [Ralf S. Engelschall]
   
  +   *) Upgraded to GNU autoconf 2.53, GNU libtool 1.4.2 and 
  +      GNU shtool 1.6.0 build environment.
  +      [Ralf S. Engelschall]
  +
      *) Fixed str_concat: it included the terminating NUL in copy 
         and added a useless NUL.
         [Thomas Lotterer]

From ossp-cvs-owner@ossp.org  Mon Apr  1 11:12:14 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6262276369; Mon,  1 Apr 2002 11:12:14 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str ChangeLog README
Message-Id: <20020401091214.6262276369@mail.ossp.org>
Date: Mon,  1 Apr 2002 11:12:14 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Apr-2002 11:12:14
  Branch: HEAD                             Handle: 2002040110121300

  Modified files:
    ossp-pkg/str            ChangeLog README

  Log:
    polish for release

  Summary:
    Revision    Changes     Path
    1.40        +1  -1      ossp-pkg/str/ChangeLog
    1.19        +2  -2      ossp-pkg/str/README
  ____________________________________________________________________________

  Index: ossp-pkg/str/ChangeLog
  ============================================================
  $ cvs diff -u -r1.39 -r1.40 ChangeLog
  --- ossp-pkg/str/ChangeLog	1 Apr 2002 09:10:19 -0000	1.39
  +++ ossp-pkg/str/ChangeLog	1 Apr 2002 09:12:13 -0000	1.40
  @@ -9,7 +9,7 @@
   
    ChangeLog
   
  - Changes between 0.9.6 and 0.9.7 (28-Dec-2001 to xx-Apr-2002):
  + Changes between 0.9.6 and 0.9.7 (28-Dec-2001 to 01-Apr-2002):
   
      *) Use OSSP ts (Test Suite) sub-library for "make check".
         [Ralf S. Engelschall]
  Index: ossp-pkg/str/README
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 README
  --- ossp-pkg/str/README	1 Apr 2002 08:32:54 -0000	1.18
  +++ ossp-pkg/str/README	1 Apr 2002 09:12:13 -0000	1.19
  @@ -9,9 +9,9 @@
   
     ABSTRACT
   
  -  OSSP str is a generic string library written in ANSI C which
  +  OSSP str is a generic string library written in ISO-C which
     provides functions for handling, matching, parsing, searching and
  -  formatting of C strings. So it can be considered as a superset
  +  formatting of ISO-C strings. So it can be considered as a superset
     of POSIX string(3), but its main intention is to provide a more
     convinient and compact API plus a more generalized functionality.
   

From ossp-cvs-owner@ossp.org  Mon Apr  1 11:15:38 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 626C976369; Mon,  1 Apr 2002 11:15:38 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str str-config.in str.pod
Message-Id: <20020401091538.626C976369@mail.ossp.org>
Date: Mon,  1 Apr 2002 11:15:38 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Apr-2002 11:15:38
  Branch: HEAD                             Handle: 2002040110153700

  Modified files:
    ossp-pkg/str            str-config.in str.pod

  Log:
    more branding

  Summary:
    Revision    Changes     Path
    1.7         +1  -1      ossp-pkg/str/str-config.in
    1.34        +21 -20     ossp-pkg/str/str.pod
  ____________________________________________________________________________

  Index: ossp-pkg/str/str-config.in
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 str-config.in
  --- ossp-pkg/str/str-config.in	1 Apr 2002 08:32:54 -0000	1.6
  +++ ossp-pkg/str/str-config.in	1 Apr 2002 09:15:37 -0000	1.7
  @@ -81,7 +81,7 @@
               exit 0
               ;;
           --version|-v)
  -            echo "Str $str_version"
  +            echo "OSSP str $str_version"
               exit 0
               ;;
           --all)
  Index: ossp-pkg/str/str.pod
  ============================================================
  $ cvs diff -u -r1.33 -r1.34 str.pod
  --- ossp-pkg/str/str.pod	1 Apr 2002 08:32:54 -0000	1.33
  +++ ossp-pkg/str/str.pod	1 Apr 2002 09:15:37 -0000	1.34
  @@ -68,11 +68,11 @@
   
   =head1 NAME
   
  -B<Str> - String Library
  +B<OSSP str> - String Handling
   
   =head1 VERSION
   
  -Str STR_VERSION_STR
  +OSSP str STR_VERSION_STR
   
   =head1 SYNOPSIS
   
  @@ -92,15 +92,15 @@
   
   =head1 DESCRIPTION
   
  -The B<Str> library is a generic string library written in ANSI C which
  +B<OSSP str> is a generic string library written in ISO-C which
   provides functions for handling, matching, parsing, searching and
  -formatting of C strings. So it can be considered as a superset of POSIX
  +formatting of ISO-C strings. So it can be considered as a superset of POSIX
   string(3), but its main intention is to provide a more convinient and
   compact API plus a more generalized functionality.
   
   =head1 FUNCTIONS
   
  -The following functions are provided by the B<Str> API:
  +The following functions are provided by the B<OSSP str> API:
   
   =over 4
   
  @@ -298,7 +298,7 @@
   
   =head2 Perl Regular Expressions
   
  -The regular expressions used in B<Str> are more or less Perl compatible
  +The regular expressions used in B<OSSP str> are more or less Perl compatible
   (they are provided by a stripped down and built-in version of the
   I<PCRE> library). So the syntax description in perlre(1) applies
   and don't has to be repeated here again. For a deeper understanding
  @@ -446,10 +446,10 @@
   
   =item B<o>
   
  -If the I<once> flag `B<o>' is specified, this indicates to the B<Str>
  +If the I<once> flag `B<o>' is specified, this indicates to the B<OSSP str>
   library that the whole I<pop> string is constant and that its internal
   pre-processing (it is compiled into a deterministic finite automaton
  -(DFA) internally) has to be done only once (the B<Str> library then
  +(DFA) internally) has to be done only once (the B<OSSP str> library then
   caches the DFA which corresponds to the I<pop> argument).
   
   =item B<x>
  @@ -671,7 +671,7 @@
   
   =head1 EXAMPLES
   
  -In the following a few snippets of selected use cases of B<Str> are
  +In the following a few snippets of selected use cases of B<OSSP str> are
   presented:
   
   =over 4
  @@ -753,17 +753,18 @@
   
   =head1 HISTORY
   
  -The B<Str> library was written in November and December 1999 by Ralf
  -S. Engelschall. As building blocks various existing code was used and
  -recycled: for the str_token(3) implementation an anchient strtok(3)
  -flavor from William Deich 1991 was cleaned up and adjusted. As the
  -background parsing engine for str_parse(3) a heavily stripped down
  -version of Philip Hazel's Perl Compatible Regular Expression (PCRE)
  -library (initially version 2.08 and now 3.8) was used. The str_format(3)
  -implementation was based on Panos Tsirigotis' sprintf(3) code as
  -adjusted by the Apache Software Foundation (ASF) 1998. The formatting
  -engine was stripped down and enhanced to support internal extensions
  -which were required by str_format(3) and str_parse(3).
  +B<OSSP str> was written in November and December 1999 by Ralf S.
  +Engelschall for the B<OSSP> project. As building blocks various existing
  +code was used and recycled: for the str_token(3) implementation an
  +anchient strtok(3) flavor from William Deich 1991 was cleaned up
  +and adjusted. As the background parsing engine for str_parse(3) a
  +heavily stripped down version of Philip Hazel's Perl Compatible
  +Regular Expression (PCRE) library (initially version 2.08 and now
  +3.9) was used. The str_format(3) implementation was based on Panos
  +Tsirigotis' sprintf(3) code as adjusted by the Apache Software
  +Foundation (ASF) 1998. The formatting engine was stripped down and
  +enhanced to support internal extensions which were required by
  +str_format(3) and str_parse(3).
   
   =head1 AUTHOR
   

From ossp-cvs-owner@ossp.org  Mon Apr  1 11:22:40 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4719776369; Mon,  1 Apr 2002 11:22:40 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new news.txt ossp-web/pkg/lib index.wml ossp-web/...
Message-Id: <20020401092240.4719776369@mail.ossp.org>
Date: Mon,  1 Apr 2002 11:22:40 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   01-Apr-2002 11:22:40
  Branch: HEAD                             Handle: 2002040110223801

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/str    index.wml

  Log:
    release OSSP str 0.9.7

  Summary:
    Revision    Changes     Path
    1.8         +1  -0      ossp-web/new/news.txt
    1.13        +2  -2      ossp-web/pkg/lib/index.wml
    1.2         +4  -4      ossp-web/pkg/lib/str/index.wml
  ____________________________________________________________________________

  Index: ossp-web/new/news.txt
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 news.txt
  --- ossp-web/new/news.txt	30 Mar 2002 19:18:24 -0000	1.7
  +++ ossp-web/new/news.txt	1 Apr 2002 09:22:38 -0000	1.8
  @@ -1,3 +1,4 @@
  +01-Apr-2002: Released L<OSSP str> 0.9.7
   30-Mar-2002: Released L<OSSP ex> 1.0.0
   15-Mar-2002: Released L<OSSP val> 0.9.0
   15-Mar-2002: Released L<OSSP sa> 0.9.1
  Index: ossp-web/pkg/lib/index.wml
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 index.wml
  --- ossp-web/pkg/lib/index.wml	30 Mar 2002 19:18:25 -0000	1.12
  +++ ossp-web/pkg/lib/index.wml	1 Apr 2002 09:22:39 -0000	1.13
  @@ -15,8 +15,8 @@
               desc="Portable Threads"
   			done=100 stable=1.4.1 unstable=none>
     <pkg_item name="str" longname="OSSP str" type="lib"
  -            desc="String Manipulations"
  -			done=80 stable=none unstable=0.9.6>
  +            desc="String Handling"
  +			done=80 stable=none unstable=0.9.7>
     <pkg_item name="sa" longname="OSSP sa" type="lib"
               desc="Socket Abstraction"
   			done=95 stable=none unstable=0.9.1>
  Index: ossp-web/pkg/lib/str/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/lib/str/index.wml	15 Feb 2002 11:56:49 -0000	1.1
  +++ ossp-web/pkg/lib/str/index.wml	1 Apr 2002 09:22:39 -0000	1.2
  @@ -7,8 +7,8 @@
   
   <h2>Abstract</h2>
   
  -OSSP str is a generic string library written in ANSI C which provides
  -functions for handling, matching, parsing, searching and formatting of C
  +OSSP str is a generic string library written in ISO-C which provides
  +functions for handling, matching, parsing, searching and formatting of ISO-C
   strings. So it can be considered as a superset of POSIX string(3), but its
   main intention is to provide a more convinient and compact API plus a more
   generalized functionality. 
  @@ -21,7 +21,7 @@
   
   <pkg_status
       stable="none"    stable_date="none"
  -    unstable="0.9.6" unstable_date="13-Sep-2001"
  +    unstable="0.9.7" unstable_date="01-Apr-2002"
   	done=80>
   
   <h2>Source</h2>
  @@ -30,5 +30,5 @@
       url=$(FTP_ROOT_URL)/pkg/lib/str/
       directory=$(FTP_ROOT_DIR)/pkg/lib/str/
       files="str-*.tar.gz" 
  -	stable="none" unstable="str-0.9.6.tar.gz">
  +	stable="none" unstable="str-0.9.7.tar.gz">
   	

From ossp-cvs-owner@ossp.org  Mon Apr  1 11:50:24 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CCF53763A1; Mon,  1 Apr 2002 11:50:23 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str ChangeLog
Message-Id: <20020401095023.CCF53763A1@mail.ossp.org>
Date: Mon,  1 Apr 2002 11:50:23 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Apr-2002 11:50:23
  Branch: HEAD                             Handle: 2002040110502300

  Modified files:
    ossp-pkg/str            ChangeLog

  Log:
    fix historical date

  Summary:
    Revision    Changes     Path
    1.41        +1  -1      ossp-pkg/str/ChangeLog
  ____________________________________________________________________________

  Index: ossp-pkg/str/ChangeLog
  ============================================================
  $ cvs diff -u -r1.40 -r1.41 ChangeLog
  --- ossp-pkg/str/ChangeLog	1 Apr 2002 09:12:13 -0000	1.40
  +++ ossp-pkg/str/ChangeLog	1 Apr 2002 09:50:23 -0000	1.41
  @@ -29,7 +29,7 @@
      *) Upgraded to PCRE 3.9
         [Ralf S. Engelschall]
   
  - Changes between 0.9.5 and 0.9.6 (16-Aug-2001 to 28-Dec-2001):
  + Changes between 0.9.5 and 0.9.6 (16-Aug-2001 to 13-Sep-2001):
   
      *) Switched to devtool stuff
         [Ralf S. Engelschall]

From ossp-cvs-owner@ossp.org  Mon Apr  1 13:07:34 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1C3E9763A1; Mon,  1 Apr 2002 13:07:34 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/SHARE ossp_canvas.wml
Message-Id: <20020401110734.1C3E9763A1@mail.ossp.org>
Date: Mon,  1 Apr 2002 13:07:34 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   01-Apr-2002 13:07:33
  Branch: HEAD                             Handle: 2002040112073300

  Modified files:
    ossp-web/SHARE          ossp_canvas.wml

  Log:
    add ePaperwork and EN to navbar

  Summary:
    Revision    Changes     Path
    1.5         +8  -2      ossp-web/SHARE/ossp_canvas.wml
  ____________________________________________________________________________

  Index: ossp-web/SHARE/ossp_canvas.wml
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 ossp_canvas.wml
  --- ossp-web/SHARE/ossp_canvas.wml	16 Mar 2002 19:18:58 -0000	1.4
  +++ ossp-web/SHARE/ossp_canvas.wml	1 Apr 2002 11:07:33 -0000	1.5
  @@ -51,7 +51,7 @@
   ..PAGE_CANVAS_HEAD>>
   <table bgcolor="#d5d5d0" border=0 cellpadding=0 cellspacing=0 width=100%>
     <tr>
  -    <td width=20><imgdot width=20></td>
  +    <td width=20><imgdot width=10></td>
       <td width=1 bgcolor="#c5c5c0"><imgdot width=1></td>
       <td bgcolor="#f5f5f0">&nbsp;<span class=heads><a href="http://www.ossp.org/">OSSP</a>&nbsp;</span></td>
       <td width=1 bgcolor="#c5c5c0"><imgdot width=1></td>
  @@ -59,9 +59,15 @@
       <td width=1 bgcolor="#c5c5c0"><imgdot width=1></td>
       <td bgcolor="#e5e5e0"><span class=headn>&nbsp;<a href="http://www.netsw.org/">net.sw</a>&nbsp;</span></td>
       <td width=1 bgcolor="#c5c5c0"><imgdot width=1></td>
  -    <td bgcolor="#e5e5e0"><span class=headn>&nbsp;<a href="http://www.cw.com/de">C&amp;W&nbsp;DE</a>&nbsp;</span></td>
  +    <td bgcolor="#e5e5e0"><span class=headn>&nbsp;<a href="http://www.epaperwork.org/">ePaperwork</a>&nbsp;</span></td>
  +    <td width=1 bgcolor="#c5c5c0"><imgdot width=1></td>
  +    <td width=10 bgcolor="#d5d5d0"><imgdot width=10></td>
  +    <td width=1 bgcolor="#c5c5c0"><imgdot width=1></td>
  +    <td bgcolor="#e5e5e0"><span class=headn>&nbsp;<a href="http://www.engelschall.com/">EN</a>&nbsp;</span></td>
       <td width=1 bgcolor="#c5c5c0"><imgdot width=1></td>
       <td bgcolor="#e5e5e0"><span class=headn>&nbsp;<a href="http://dev.de.cw.net/">DevTeam</a>&nbsp;</span></td>
  +    <td width=1 bgcolor="#c5c5c0"><imgdot width=1></td>
  +    <td bgcolor="#e5e5e0"><span class=headn>&nbsp;<a href="http://www.cw.com/de">C&amp;W&nbsp</a>&nbsp;</span></td>
       <td width=1 bgcolor="#c5c5c0"><imgdot width=1></td>
       <td width=100%>&nbsp;</td>
       <td width=400 background="$(IMG)/ossp-bg-dark.jpg"><imgdot width=400></td>

From ossp-cvs-owner@ossp.org  Mon Apr  1 14:22:23 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4476B763A1; Mon,  1 Apr 2002 14:22:23 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa TODO
Message-Id: <20020401122223.4476B763A1@mail.ossp.org>
Date: Mon,  1 Apr 2002 14:22:23 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Apr-2002 14:22:23
  Branch: HEAD                             Handle: 2002040113222200

  Modified files:
    ossp-pkg/sa             TODO

  Log:
    remember issue

  Summary:
    Revision    Changes     Path
    1.34        +4  -0      ossp-pkg/sa/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.33 -r1.34 TODO
  --- ossp-pkg/sa/TODO	2 Jan 2002 13:54:18 -0000	1.33
  +++ ossp-pkg/sa/TODO	1 Apr 2002 12:22:22 -0000	1.34
  @@ -5,8 +5,12 @@
   - more test cases to cover full API and especially the client/server usage
   - more documentation to fully describe API
   
  +
   CANDO
   -----
  +
  +o support for SSL/TLS via small abstraction layer on top of OpenSSL and
  +  gnutls libraries.
   
   o Consistently use PF_XXX instead of AF_XXX whenever not directly
     address related things are done in order to even closer conform to POSIX.

From ossp-cvs-owner@ossp.org  Tue Apr  2 08:36:39 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 21FE77639E; Tue,  2 Apr 2002 08:36:39 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex ex.pod
Message-Id: <20020402063639.21FE77639E@mail.ossp.org>
Date: Tue,  2 Apr 2002 08:36:39 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   02-Apr-2002 08:36:38
  Branch: HEAD                             Handle: 2002040207363800

  Modified files:
    ossp-pkg/ex             ex.pod

  Log:
    typo

  Summary:
    Revision    Changes     Path
    1.24        +1  -1      ossp-pkg/ex/ex.pod
  ____________________________________________________________________________

  Index: ossp-pkg/ex/ex.pod
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 ex.pod
  --- ossp-pkg/ex/ex.pod	30 Mar 2002 18:55:28 -0000	1.23
  +++ ossp-pkg/ex/ex.pod	2 Apr 2002 06:36:38 -0000	1.24
  @@ -441,7 +441,7 @@
   clause, it is also evaluated before the B<ex_catch> clause. So,
   resources being cleaned up must no longer be used in the B<ex_catch>
   block. The example above would have trouble referencing the character
  -strings in the printf3) statement because these have been free()d
  +strings in the printf(3) statement because these have been free()d
   before.
   
   =item B<05: variable uninitialization>

From ossp-cvs-owner@ossp.org  Tue Apr  2 19:54:11 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8940D7639E; Tue,  2 Apr 2002 19:54:10 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex ex.pod
Message-Id: <20020402175410.8940D7639E@mail.ossp.org>
Date: Tue,  2 Apr 2002 19:54:10 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Apr-2002 19:54:10
  Branch: HEAD                             Handle: 2002040218540900

  Modified files:
    ossp-pkg/ex             ex.pod

  Log:
    if we use printf(3), better to also use free(3) for consitency

  Summary:
    Revision    Changes     Path
    1.25        +2  -2      ossp-pkg/ex/ex.pod
  ____________________________________________________________________________

  Index: ossp-pkg/ex/ex.pod
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 ex.pod
  --- ossp-pkg/ex/ex.pod	2 Apr 2002 06:36:38 -0000	1.24
  +++ ossp-pkg/ex/ex.pod	2 Apr 2002 17:54:09 -0000	1.25
  @@ -441,7 +441,7 @@
   clause, it is also evaluated before the B<ex_catch> clause. So,
   resources being cleaned up must no longer be used in the B<ex_catch>
   block. The example above would have trouble referencing the character
  -strings in the printf(3) statement because these have been free()d
  +strings in the printf(3) statement because these have been free(3)'d
   before.
   
   =item B<05: variable uninitialization>
  @@ -449,7 +449,7 @@
   If resources are passed away and out of the scope of the
   B<ex_try>/B<ex_clean>/B<ex_catch> construct and the variables were
   initialized for using a "free if unset" approach then they must be
  -uninitialized after being passed away. The example above would free()
  +uninitialized after being passed away. The example above would free(3)
   C<cp1> in the B<ex_clean> clause if mallocex() throws an exception if
   allocating a C<TOOBIG> buffer. The C<globalcontext-&gt;first> pointer
   hence becomes invalid.

From ossp-cvs-owner@ossp.org  Fri Apr  5 12:47:06 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CC9637639E; Fri,  5 Apr 2002 12:47:05 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new news.txt
Message-Id: <20020405104705.CC9637639E@mail.ossp.org>
Date: Fri,  5 Apr 2002 12:47:05 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   05-Apr-2002 12:47:05
  Branch: HEAD                             Handle: 2002040511470500

  Modified files:
    ossp-web/new            news.txt

  Log:
    add more history

  Summary:
    Revision    Changes     Path
    1.9         +20 -1      ossp-web/new/news.txt
  ____________________________________________________________________________

  Index: ossp-web/new/news.txt
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 news.txt
  --- ossp-web/new/news.txt	1 Apr 2002 09:22:38 -0000	1.8
  +++ ossp-web/new/news.txt	5 Apr 2002 10:47:05 -0000	1.9
  @@ -6,13 +6,32 @@
   08-Mar-2002: Released L<OSSP ex> 0.9.1
   08-Mar-2002: Released L<OSSP var> 0.9.0
   13-Feb-2002: First cut for the OSSP website
  +01-Feb-2002: Released T<GNU shtool> 1.6.0
   31-Jan-2002: Released L<OSSP ex> 0.9.0
   31-Jan-2002: Released L<OSSP sa> 0.9.0
  +27-Jan-2002: Released T<GNU pth> 1.4.1
   13-Nov-2001: Released T<OSSP lmtp2nntp> 1.1.1
   12-Nov-2001: Released T<OSSP lmtp2nntp> 1.1.0
  -13-Sep-2001: Released T<OSSP lmtp2nntp> 1.0.0
   08-Nov-2001: Released T<OSSP lmtp2nntp> 1.1b4
   08-Nov-2001: Released T<OSSP lmtp2nntp> 1.1b3
   15-Oct-2001: Released T<OSSP lmtp2nntp> 1.1b2
   12-Oct-2001: Released T<OSSP lmtp2nntp> 1.1b1
  +13-Sep-2001: Released T<OSSP lmtp2nntp> 1.0.0
   13-Sep-2001: Released T<OSSP lmtp2nntp> 0.9.7
  +14-Jun-2001: Released T<GNU shtool> 1.5.4
  +19-Apr-2001: Released T<GNU shtool> 1.5.3
  +24-Mar-2001: Released T<GNU pth> 1.4.0
  +27-Feb-2001: Released T<GNU shtool> 1.5.2
  +29-Jul-2000: Released T<GNU shtool> 1.5.1
  +01-Jul-2000: Released T<GNU shtool> 1.5.0
  +19-Feb-2000: Released T<GNU pth> 1.3.0
  +31-Oct-1999: Released T<GNU pth> 1.2.0
  +29-Oct-1999: Registered the ossp.org domain
  +19-Aug-1999: Released T<GNU pth> 1.1.0
  +16-Jul-1999: Released T<GNU pth> 1.0.0
  +02-Jul-1999: Released T<GNU shtool> 1.4.0
  +25-Jun-1999: Released T<GNU shtool> 1.3.0
  +29-Apr-1999: Released T<GNU shtool> 1.2.0
  +26-Apr-1999: Released T<GNU shtool> 1.1.0
  +22-Apr-1999: Released T<GNU shtool> 1.0.0
  +12-Apr-1999: Genesis of the OSSP project

From ossp-cvs-owner@ossp.org  Fri Apr  5 12:53:01 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F16677639E; Fri,  5 Apr 2002 12:53:00 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new news.txt
Message-Id: <20020405105300.F16677639E@mail.ossp.org>
Date: Fri,  5 Apr 2002 12:53:00 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   05-Apr-2002 12:53:00
  Branch: HEAD                             Handle: 2002040511530000

  Modified files:
    ossp-web/new            news.txt

  Log:
    more history and bugfixing

  Summary:
    Revision    Changes     Path
    1.10        +7  -1      ossp-web/new/news.txt
  ____________________________________________________________________________

  Index: ossp-web/new/news.txt
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 news.txt
  --- ossp-web/new/news.txt	5 Apr 2002 10:47:05 -0000	1.9
  +++ ossp-web/new/news.txt	5 Apr 2002 10:53:00 -0000	1.10
  @@ -24,9 +24,14 @@
   27-Feb-2001: Released T<GNU shtool> 1.5.2
   29-Jul-2000: Released T<GNU shtool> 1.5.1
   01-Jul-2000: Released T<GNU shtool> 1.5.0
  +01-Jul-2000: Released T<OSSP mm> 1.1.3
  +21-May-2000: Released T<OSSP mm> 1.1.2
  +30-Apr-2000: Released T<OSSP mm> 1.1.1
  +30-Apr-2000: Released T<OSSP mm> 1.1.0
   19-Feb-2000: Released T<GNU pth> 1.3.0
   31-Oct-1999: Released T<GNU pth> 1.2.0
   29-Oct-1999: Registered the ossp.org domain
  +28-Sep-1999: Released T<OSSP mm> 1.0.12
   19-Aug-1999: Released T<GNU pth> 1.1.0
   16-Jul-1999: Released T<GNU pth> 1.0.0
   02-Jul-1999: Released T<GNU shtool> 1.4.0
  @@ -34,4 +39,5 @@
   29-Apr-1999: Released T<GNU shtool> 1.2.0
   26-Apr-1999: Released T<GNU shtool> 1.1.0
   22-Apr-1999: Released T<GNU shtool> 1.0.0
  -12-Apr-1999: Genesis of the OSSP project
  +28-Mar-1999: Released T<OSSP mm> 1.0.0
  +12-Mar-1999: Genesis of the OSSP project

From ossp-cvs-owner@ossp.org  Fri Apr  5 12:54:31 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6AE437639E; Fri,  5 Apr 2002 12:54:31 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/SHARE ossp_newsflash.wml
Message-Id: <20020405105431.6AE437639E@mail.ossp.org>
Date: Fri,  5 Apr 2002 12:54:31 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   05-Apr-2002 12:54:31
  Branch: HEAD                             Handle: 2002040511543100

  Modified files:
    ossp-web/SHARE          ossp_newsflash.wml

  Log:
    fix newsflash rendering

  Summary:
    Revision    Changes     Path
    1.6         +2  -2      ossp-web/SHARE/ossp_newsflash.wml
  ____________________________________________________________________________

  Index: ossp-web/SHARE/ossp_newsflash.wml
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 ossp_newsflash.wml
  --- ossp-web/SHARE/ossp_newsflash.wml	30 Mar 2002 19:16:58 -0000	1.5
  +++ ossp-web/SHARE/ossp_newsflash.wml	5 Apr 2002 10:54:31 -0000	1.6
  @@ -22,8 +22,8 @@
       $ncol = 1;
       $n = 0;
       while (<FP>) {
  -        s/T<((OSSP\s+)?([^>]+))>/<a href="pkg\/tool\/$3\/">$1<\/a>/g;
  -        s/L<((OSSP\s+)?([^>]+))>/<a href="pkg\/lib\/$3\/">$1<\/a>/g;
  +        s/T<(((?:OSSP|GNU)\s+)?([^>]+))>/<a href="pkg\/tool\/$3\/">$1<\/a>/g;
  +        s/L<(((?:OSSP|GNU)\s+)?([^>]+))>/<a href="pkg\/lib\/$3\/">$1<\/a>/g;
           s/P<([^>]+)>/<a href="ftp:\/\/ftp.openpkg.org\/current\/SRC\/$1.src.rpm">$1<\/a>/g;
           s/N<([^>]+)>/<b>$1<\/b>/g;
           s/B<([^>]+)>/<b>$1<\/b>/g;

From ossp-cvs-owner@ossp.org  Mon Apr  8 14:43:14 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 460F57639E; Mon,  8 Apr 2002 14:43:14 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc acconfig.h
Message-Id: <20020408124314.460F57639E@mail.ossp.org>
Date: Mon,  8 Apr 2002 14:43:14 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   08-Apr-2002 14:43:14
  Branch: HEAD                             Handle: 1970010101000000

  Removed files:
    ossp-pkg/rc             acconfig.h

  Log:
    This file is made redundant by the new version of autoconf, I think. So,
    remove it.

  Summary:
    Revision    Changes     Path
    NONE        +0  -4      ossp-pkg/rc/acconfig.h
  ____________________________________________________________________________

  

From ossp-cvs-owner@ossp.org  Mon Apr  8 17:37:11 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 497A37639E; Mon,  8 Apr 2002 17:37:11 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc Makefile.in configure.in devtool.conf devtool....
Message-Id: <20020408153711.497A37639E@mail.ossp.org>
Date: Mon,  8 Apr 2002 17:37:11 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   08-Apr-2002 17:37:11
  Branch: HEAD                             Handle: 2002040816370901

  Modified files:
    ossp-pkg/rc             Makefile.in configure.in devtool.conf devtool.func
                            rc_config.c rc_optimpl.c rc_private.h

  Log:
    Bring build back to life and remove val code.

  Summary:
    Revision    Changes     Path
    1.18        +2  -1      ossp-pkg/rc/Makefile.in
    1.16        +32 -31     ossp-pkg/rc/configure.in
    1.11        +22 -21     ossp-pkg/rc/devtool.conf
    1.7         +1  -1      ossp-pkg/rc/devtool.func
    1.7         +11 -15     ossp-pkg/rc/rc_config.c
    1.5         +3  -6      ossp-pkg/rc/rc_optimpl.c
    1.8         +2  -4      ossp-pkg/rc/rc_private.h
  ____________________________________________________________________________

  Index: ossp-pkg/rc/Makefile.in
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 Makefile.in
  --- ossp-pkg/rc/Makefile.in	26 Mar 2002 17:11:06 -0000	1.17
  +++ ossp-pkg/rc/Makefile.in	8 Apr 2002 15:37:09 -0000	1.18
  @@ -65,7 +65,8 @@
   OBJS            = rc.o rc_config.o rc_optimpl.o rc_option.o\
                     rc_version.o rc_pcre.o rc_util.o
   
  -SUBDIRS         = @SUBDIR_EX@ @SUBDIR_VAR@ @SUBDIR_VAL@ @SUBDIR_STR@ @SUBDIR_POPT@
  +SUBDIRS         = @SUBDIR_EX@ @SUBDIR_POPT@
  +#SUBDIRS         = @SUBDIR_EX@ @SUBDIR_VAR@ @SUBDIR_VAL@ @SUBDIR_STR@ @SUBDIR_POPT@
   
   .SUFFIXES:
   .SUFFIXES: .c .cc .cpp .o
  Index: ossp-pkg/rc/configure.in
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 configure.in
  --- ossp-pkg/rc/configure.in	26 Mar 2002 17:11:06 -0000	1.15
  +++ ossp-pkg/rc/configure.in	8 Apr 2002 15:37:10 -0000	1.16
  @@ -90,38 +90,38 @@
                    LIBS_EXTRA="$LIBS_EXTRA -lex"])
   AC_SUBST(SUBDIR_EX)
   
  -dnl Check for OSSP str library
  -AC_CHECK_EXTLIB([OSSP str],
  -                str, str_parse, str.h,
  -                [SUBDIR_STR=""],
  -                [SUBDIR_STR="rc_str"
  -                 CPPFLAGS="$CPPFLAGS -Irc_str"
  -                 CFLAGS="$CFLAGS -Irc_str"
  -                 LDFLAGS="$LDFLAGS -Lrc_str/.libs"
  -                 LIBS_EXTRA="$LIBS_EXTRA -lstr"])
  -AC_SUBST(SUBDIR_STR)
  +#dnl Check for OSSP str library
  +#AC_CHECK_EXTLIB([OSSP str],
  +#                str, str_parse, str.h,
  +#                [SUBDIR_STR=""],
  +#                [SUBDIR_STR="rc_str"
  +#                 CPPFLAGS="$CPPFLAGS -Irc_str"
  +#                 CFLAGS="$CFLAGS -Irc_str"
  +#                 LDFLAGS="$LDFLAGS -Lrc_str/.libs"
  +#                 LIBS_EXTRA="$LIBS_EXTRA -lstr"])
  +#AC_SUBST(SUBDIR_STR)
   
  -dnl Check for OSSP var library
  -AC_CHECK_EXTLIB([OSSP var],
  -                var, var_expand, var.h,
  -                [SUBDIR_VAR=""],
  -                [SUBDIR_VAR="rc_var"
  -                 CPPFLAGS="$CPPFLAGS -Irc_var"
  -                 CFLAGS="$CFLAGS -Irc_var"
  -                 LDFLAGS="$LDFLAGS -Lrc_var/.libs"
  -                 LIBS_EXTRA="$LIBS_EXTRA -lvar"])
  -AC_SUBST(SUBDIR_VAR)
  +#dnl Check for OSSP var library
  +#AC_CHECK_EXTLIB([OSSP var],
  +#                var, var_expand, var.h,
  +#                [SUBDIR_VAR=""],
  +#                [SUBDIR_VAR="rc_var"
  +#                 CPPFLAGS="$CPPFLAGS -Irc_var"
  +#                 CFLAGS="$CFLAGS -Irc_var"
  +#                 LDFLAGS="$LDFLAGS -Lrc_var/.libs"
  +#                 LIBS_EXTRA="$LIBS_EXTRA -lvar"])
  +#AC_SUBST(SUBDIR_VAR)
   
  -dnl Check for OSSP val library
  -AC_CHECK_EXTLIB([OSSP val],
  -                val, val_expand, val.h,
  -                [SUBDIR_VAL=""],
  -                [SUBDIR_VAL="rc_val"
  -                 CPPFLAGS="$CPPFLAGS -Irc_val"
  -                 CFLAGS="$CFLAGS -Irc_val"
  -                 LDFLAGS="$LDFLAGS -Lrc_val/.libs"
  -                 LIBS_EXTRA="$LIBS_EXTRA -lval"])
  -AC_SUBST(SUBDIR_VAL)
  +#dnl Check for OSSP val library
  +#AC_CHECK_EXTLIB([OSSP val],
  +#                val, val_expand, val.h,
  +#                [SUBDIR_VAL=""],
  +#                [SUBDIR_VAL="rc_val"
  +#                 CPPFLAGS="$CPPFLAGS -Irc_val"
  +#                 CFLAGS="$CFLAGS -Irc_val"
  +#                 LDFLAGS="$LDFLAGS -Lrc_val/.libs"
  +#                 LIBS_EXTRA="$LIBS_EXTRA -lval"])
  +#AC_SUBST(SUBDIR_VAL)
   
   dnl Extra library handling
   LIBS="$LIBS $LIBS_EXTRA"
  @@ -131,7 +131,8 @@
   enable_headline=no
   export enable_headline
   dnl Call other configure scripts
  -AC_CONFIG_SUBDIRS([$SUBDIR_EX $SUBDIR_STR $SUBDIR_VAR $SUBDIR_VAL $SUBDIR_POPT])
  +AC_CONFIG_SUBDIRS([$SUBDIR_EX $SUBDIR_POPT])
  +#AC_CONFIG_SUBDIRS([$SUBDIR_EX $SUBDIR_STR $SUBDIR_VAR $SUBDIR_VAL $SUBDIR_POPT])
   
   dnl Make all the necessary Makefiles
   #AC_CONFIG_FILES(Makefile)
  Index: ossp-pkg/rc/devtool.conf
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 devtool.conf
  --- ossp-pkg/rc/devtool.conf	26 Mar 2002 17:11:06 -0000	1.10
  +++ ossp-pkg/rc/devtool.conf	8 Apr 2002 15:37:10 -0000	1.11
  @@ -9,18 +9,18 @@
       echo "===> rc_ex (devtool autogen)"
       (cd rc_ex && ./devtool autogen)
       echo "<=== rc_ex"
  -    echo "===> rc_str (devtool autogen)"
  -    (cd rc_str && ./devtool autogen)
  -    echo "<=== rc_str"
       echo "===> rc_popt (devtool autogen)"
       (cd rc_popt && ./devtool autogen)
       echo "<=== rc_popt"
  -    echo "===> rc_var (devtool autogen)"
  -    (cd rc_var && ./devtool autogen)
  -    echo "<=== rc_var"
  -    echo "===> rc_val (devtool autogen)"
  -    (cd rc_val && ./devtool autogen)
  -    echo "<=== rc_val"
  +#    echo "===> rc_str (devtool autogen)"
  +#    (cd rc_str && ./devtool autogen)
  +#    echo "<=== rc_str"
  +#    echo "===> rc_var (devtool autogen)"
  +#    (cd rc_var && ./devtool autogen)
  +#    echo "<=== rc_var"
  +#    echo "===> rc_val (devtool autogen)"
  +#    (cd rc_val && ./devtool autogen)
  +#    echo "<=== rc_val"
   
   %autoclean
       @autoclean shtool
  @@ -29,22 +29,23 @@
       echo "===> rc_ex (devtool autoclean)"
       (cd rc_ex && ./devtool autoclean)
       echo "<=== rc_ex"
  -    echo "===> rc_str (devtool autoclean)"
  -    (cd rc_str && ./devtool autoclean)
  -    echo "<=== rc_str"
  -    echo "===> rc_var (devtool autoclean)"
  -    (cd rc_var && ./devtool autoclean)
  -    echo "<=== rc_var"
  -    echo "===> rc_val (devtool autoclean)"
  -    (cd rc_val && ./devtool autoclean)
  -    echo "<=== rc_val"
  +    echo "===> rc_popt (devtool autoclean)"
  +    (cd rc_popt && ./devtool autoclean)
  +    echo "<=== rc_popt"
  +#    echo "===> rc_str (devtool autoclean)"
  +#    (cd rc_str && ./devtool autoclean)
  +#    echo "<=== rc_str"
  +#    echo "===> rc_var (devtool autoclean)"
  +#    (cd rc_var && ./devtool autoclean)
  +#    echo "<=== rc_var"
  +#    echo "===> rc_val (devtool autoclean)"
  +#    (cd rc_val && ./devtool autoclean)
  +#    echo "<=== rc_val"
   
   %configure
       ./configure \
  -        --cache-file=config.cache \
  -        --enable-maintainer \
  -        --disable-shared \
           --prefix=/tmp/rc \
  +        --disable-shared \
           --enable-debug
           "$@"
   
  Index: ossp-pkg/rc/devtool.func
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 devtool.func
  --- ossp-pkg/rc/devtool.func	26 Mar 2002 17:11:06 -0000	1.6
  +++ ossp-pkg/rc/devtool.func	8 Apr 2002 15:37:10 -0000	1.7
  @@ -32,8 +32,8 @@
               autoconf_version=`devtool_require autoconf --version 4 "$1" "$2"`
               echo "generating (GNU Autoconf $autoconf_version): configure ac_config.h.in"
               autoconf
  -            rm -rf autom4te.cache >/dev/null 2>&1
               autoheader 2>&1 | grep -v "is unchanged"
  +            rm -rf autom4te.cache >/dev/null 2>&1
               ;;
           libtool )
               libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
  Index: ossp-pkg/rc/rc_config.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 rc_config.c
  --- ossp-pkg/rc/rc_config.c	26 Mar 2002 17:11:06 -0000	1.6
  +++ ossp-pkg/rc/rc_config.c	8 Apr 2002 15:37:10 -0000	1.7
  @@ -34,7 +34,6 @@
   #include "rc_private.h"
   #include "rc_const.h"               /* String constants                 */
   #include "rc_option.h"              /* Option operations rely on popt   */
  -#include "val.h"                    /* OSSP val library holds config    */
   
   static rc_config_t *s_pInst = NULL; /* Singleton configuration instance */
   
  @@ -47,15 +46,15 @@
   {
       ex_t Except;
   
  -    if (s_pInst == NULL) {                  /* If we don't have one */
  -        s_pInst = malloc(sizeof(s_pInst));  /* yet, then allocate   */
  -        if (!s_pInst)                       /* a configuration      */
  -            return(RC_THROW(RC_ERR_MEM));   /* instance             */
  +    if (s_pInst == NULL) {                  /* If we don't have one   */
  +        s_pInst = malloc(sizeof(s_pInst));  /* yet, then allocate     */
  +        if (!s_pInst)                       /* a configuration        */
  +            return(RC_THROW(RC_ERR_MEM));   /* instance               */
           s_pInst->nLocks = 0;
   
  -        ex_try {                            /* Make a val instance  */
  -            val_create(&s_pInst->pOpt);     /* to hold individual   */
  -        }                                   /* configuration values */
  +        ex_try {
  +                                            /* Make a config instance */
  +        }
           ex_catch(Except) {
               rethrow;
           }
  @@ -76,7 +75,7 @@
   
       if (s_pInst != NULL) {
           ex_try {
  -            val_get(s_pInst->pOpt, RC_VER_NAME, &nVer);
  +
           }
           ex_catch(Except) {
               rethrow;
  @@ -110,10 +109,7 @@
           rethrow;
       }
   
  -    ex_try {    /* Register and set configuration values */
  -        /* FIXME This is real bad, replace with our own  */
  -        val_reg(s_pInst->pOpt, RC_VER_NAME, VAL_TYPE_SHORT, RC_VER_DESC, NULL);
  -        val_set(s_pInst->pOpt, RC_VER_NAME, 1);
  +    ex_try {
       }
       ex_catch(Except) {
           rethrow;
  @@ -133,8 +129,8 @@
       if (s_pInst) {
           if (!(--s_pInst->nLocks)) {         /* If nLocks is 0, dealloc  */
               ex_try {                        /* FIXME, not thread-safe   */
  -                val_destroy(s_pInst->pOpt); /* Destroy val instance and */
  -            }                               /* Assume that pOpt is NULL */
  +
  +            }
               ex_catch(Except) {
                   rethrow;
               }
  Index: ossp-pkg/rc/rc_optimpl.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 rc_optimpl.c
  --- ossp-pkg/rc/rc_optimpl.c	26 Mar 2002 17:11:06 -0000	1.4
  +++ ossp-pkg/rc/rc_optimpl.c	8 Apr 2002 15:37:10 -0000	1.5
  @@ -57,7 +57,6 @@
   rc_return_t coptParse(int argc, char *argv[])
   {
       ex_t Except;
  -    int  bCaught = 0;
       char cOpt = 0;              /* For argument parsing           */
       char *szCLIBuf = NULL;
       popt_context optCon;        /* Context for parsing options    */
  @@ -105,7 +104,7 @@
       optCon = popt_getcontext(NULL, argc, (const char **)argv, optionsTable, 0);
       popt_setotheroptionhelp(optCon, "[options] <rcfile> <sections [args]>");
   
  -    if (argc < 2) {
  +    if (argc < 3) {
           popt_printusage(optCon, stderr, 0);
           return(RC_THROW(RC_ERR_USE));
       }
  @@ -119,13 +118,11 @@
           if ((rc_return_t)Except.ex_value != RC_ERR_USE)
               fprintf(stderr, "Nonusage exception: %d\n",\
                   (rc_return_t)Except.ex_value);
  -        bCaught = 1;
  +
           fprintf(stderr, "Class '%s' threw exception %d in %s:%s():%d.\n",\
                   (char *)Except.ex_class, *(int *)Except.ex_value,\
                   Except.ex_file, Except.ex_func, Except.ex_line);
       }
  -    if (!bCaught)
  -        fprintf(stderr, "parseOpts: No exceptions caught.\n");
   
       szCLIBuf = (char *)popt_getarg(optCon);
       if ((szCLIBuf == NULL)) {
  @@ -142,7 +139,7 @@
           return(RC_THROW(RC_ERR_INT));
       }
   
  -    fprintf(stderr, "\nRun these commands: %s\n", szCLIBuf);
  +    fprintf(stderr, "Run these commands: %s\n", szCLIBuf);
       popt_freecontext(optCon);
       return(RC_THROW(RC_OK));
   }
  Index: ossp-pkg/rc/rc_private.h
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 rc_private.h
  --- ossp-pkg/rc/rc_private.h	26 Mar 2002 17:11:06 -0000	1.7
  +++ ossp-pkg/rc/rc_private.h	8 Apr 2002 15:37:10 -0000	1.8
  @@ -60,12 +60,10 @@
       ((rv) != RC_OK && (ex_catching && !ex_shielding) \
        ? (ex_throw(RC_STR_ID, NULL, (rv)), (rv)) : (rv))
   
  -#include "val.h"
  -
   
   typedef struct {    /* Main rc configuration storage        */
  -    val_t *pOpt;    /* Storage of configuration values      */
  -    int nLocks;     /* Server locks, not thread-safe though */
  +    void *pvFixme;  /* Storage of configuration values      */
  +    int nLocks;     /* Server locks, not thread-safe FIXME  */
   } rc_config_t;
   
   #endif /* __OSSPRC_PRIVATE_H__ */

From ossp-cvs-owner@ossp.org  Mon Apr  8 17:38:23 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0ABFD7639E; Mon,  8 Apr 2002 17:38:22 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc .cvsignore
Message-Id: <20020408153822.0ABFD7639E@mail.ossp.org>
Date: Mon,  8 Apr 2002 17:38:22 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   08-Apr-2002 17:38:22
  Branch: HEAD                             Handle: 2002040816382200

  Modified files:
    ossp-pkg/rc             .cvsignore

  Log:
    Correct filename.

  Summary:
    Revision    Changes     Path
    1.5         +2  -2      ossp-pkg/rc/.cvsignore
  ____________________________________________________________________________

  Index: ossp-pkg/rc/.cvsignore
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 .cvsignore
  --- ossp-pkg/rc/.cvsignore	5 Feb 2002 19:11:45 -0000	1.4
  +++ ossp-pkg/rc/.cvsignore	8 Apr 2002 15:38:22 -0000	1.5
  @@ -9,8 +9,8 @@
   Makefile
   rc
   rc.1
  -rc_config.h
  -rc_config.h.in
  +ac_config.h
  +ac_config.h.in
   rc_pcre.tab
   rc-sample.5
   shtool

From ossp-cvs-owner@ossp.org  Tue Apr  9 19:01:30 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3FCF87639E; Tue,  9 Apr 2002 19:01:30 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc_cliopt.c rc_cliopt.h rc_config.h rc_opt.c r...
Message-Id: <20020409170130.3FCF87639E@mail.ossp.org>
Date: Tue,  9 Apr 2002 19:01:30 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   09-Apr-2002 19:01:30
  Branch: HEAD                             Handle: 2002040918012801

  Added files:
    ossp-pkg/rc             rc_cliopt.c rc_cliopt.h rc_config.h rc_opt.c
                            rc_opt.h

  Log:
    Add new configuration pieces.

  Summary:
    Revision    Changes     Path
    1.1         +84 -0      ossp-pkg/rc/rc_cliopt.c
    1.1         +40 -0      ossp-pkg/rc/rc_cliopt.h
    1.1         +40 -0      ossp-pkg/rc/rc_config.h
    1.1         +113 -0     ossp-pkg/rc/rc_opt.c
    1.1         +38 -0      ossp-pkg/rc/rc_opt.h
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc_cliopt.c
  ============================================================
  $ cvs update -p -r1.1 rc_cliopt.c
  /*  OSSP rc - Run-command processor
  **  Copyright (c) 2002 Ralf S. Engelschall
  **  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **
  **  This file is part of OSSP rc, a portable Run-command processor
  **  which can be found at http://www.ossp.org/pkg/lib/rc/
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  rc_cliopt.c: Run-command processor ISO C source file
  */
  
  #include <stdio.h>
  #include <stdlib.h>
  
  #include "rc.h"
  #include "rc_cliopt.h"
  
  static rc_cliopt_t *s_pInst = NULL; /* Singleton cliopt instance */
  
  
  /***************************************
  * clioptConstruct(void)                *
  * Construct a command line option      *
  ***************************************/
  rc_return_t clioptConstruct(void)
  {
      assert(s_pInst == NULL);
      s_pInst = malloc(sizeof(s_pInst));  /* Allocate a cliopt instance   */
      if (!s_pInst)
          return(RC_THROW(RC_ERR_MEM));
  
      return(RC_THROW(RC_OK));
  }
  
  /***************************************
  * clioptGetXXXX(void)                  *
  * Command line option accessors        *
  ***************************************/
  short clioptGetvers(void)
  {
      ex_t Except;
      short nVer = 0;
  
      assert(s_pInst);
      ex_try {
  
      }
      ex_catch(Except) {
          rethrow;
      }
  
      return(nVer);
  }
  
  /***************************************
  * clioptDestruct(void)                 *
  * Destruct a command line option       *
  ***************************************/
  rc_return_t clioptDestruct(void)
  {
      assert(s_pInst);
      free(s_pInst);      /* Deallocate cliopt and    */
      s_pInst = NULL;     /* clear its reference      */
  
      return(RC_THROW(RC_OK));
  }
  Index: ossp-pkg/rc/rc_cliopt.h
  ============================================================
  $ cvs update -p -r1.1 rc_cliopt.h
  /*  OSSP rc - Run-command processor
  **  Copyright (c) 2002 Ralf S. Engelschall
  **  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **
  **  This file is part of OSSP rc, a portable Run-command processor
  **  which can be found at http://www.ossp.org/pkg/lib/rc/
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  rc_cliopt.h: Run-command processor ISO C public API header file
  */
  
  #ifndef __OSSPRC_CLIOPT_H__
  #define __OSSPRC_CLIOPT_H__
  
  #include "rc_private.h"
  #include "rc_opt.h"
  
  typedef struct {            /* Command line option storage  */
      rc_list_t *pOptlist;    /* To aggregate options         */
  } rc_cliopt_t;
  
  #endif /* __OSSPRC_CLIOPT_H__ */
  Index: ossp-pkg/rc/rc_config.h
  ============================================================
  $ cvs update -p -r1.1 rc_config.h
  /*  OSSP rc - Run-command processor
  **  Copyright (c) 2002 Ralf S. Engelschall
  **  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **
  **  This file is part of OSSP rc, a portable Run-command processor
  **  which can be found at http://www.ossp.org/pkg/lib/rc/
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  rc_config.h: Run-command processor ISO C public API header file
  */
  
  #ifndef __OSSPRC_CONFIG_H__
  #define __OSSPRC_CONFIG_H__
  
  #include "rc_cliopt.h"      /* Command line option */
  
  typedef struct {            /* Main rc configuration storage        */
      rc_cliopt_t *pCliopt;   /* Aggregate command line option        */
      int m_nLocks;           /* Server locks, not thread-safe FIXME  */
  } rc_config_t;
  
  #endif /* __OSSPRC_CONFIG_H__ */
  Index: ossp-pkg/rc/rc_opt.c
  ============================================================
  $ cvs update -p -r1.1 rc_opt.c
  /*  OSSP rc - Run-command processor
  **  Copyright (c) 2002 Ralf S. Engelschall
  **  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **
  **  This file is part of OSSP rc, a portable Run-command processor
  **  which can be found at http://www.ossp.org/pkg/lib/rc/
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  rc_opt.c: Run-command processor ISO C source file
  */
  
  #include <stdio.h>
  #include <stdlib.h>
  
  #include "rc.h"
  #include "rc_opt.h"
  
  
  /***************************************
  * optConstruct(void)                   *
  * Construct an option                  *
  ***************************************/
  rc_return_t clioptConstruct(void)
  {
      ex_t Except;
  
      if (s_pInst == NULL) {                  /* If we don't have one     */
          s_pInst = malloc(sizeof(s_pInst));  /* yet, then allocate       */
          if (!s_pInst)                       /* a cliopt instance        */
              return(RC_THROW(RC_ERR_MEM));
          s_pInst->nLocks = 0;
  
          ex_try {
                                              /* Make a cliopt instance   */
          }
          ex_catch(Except) {
              rethrow;
          }
      }
      s_pInst->nLocks++;                      /* FIXME not threadsafe     */
  
      return(RC_THROW(RC_OK));
  }
  
  /***************************************
  * clioptGetXXXX(void)                  *
  * Command line option accessors        *
  ***************************************/
  short clioptGetvers(void)
  {
      ex_t Except;
      short nVer = 0;
  
      if (s_pInst != NULL) {
          ex_try {
  
          }
          ex_catch(Except) {
              rethrow;
          }
      }
      else {
          RC_THROW(RC_ERR_USE);
          return(NULL);
      }
  
      return(nVer);
  }
  
  /***************************************
  * clioptDestruct(void)                 *
  * Destruct a command line option       *
  ***************************************/
  rc_return_t clioptDestruct(void)
  {
      ex_t Except;
  
      if (s_pInst) {
          if (!(--s_pInst->nLocks)) {         /* If nLocks is 0, dealloc  */
              ex_try {                        /* FIXME, not thread-safe   */
  
              }
              ex_catch(Except) {
                  rethrow;
              }
  
              free(s_pInst);                  /* Deallocate cliopt and    */
              s_pInst = NULL;                 /* clear its reference      */
          }
      }
      else
          return(RC_THROW(RC_ERR_USE));
  
      return(RC_THROW(RC_OK));
  }
  Index: ossp-pkg/rc/rc_opt.h
  ============================================================
  $ cvs update -p -r1.1 rc_opt.h
  /*  OSSP rc - Run-command processor
  **  Copyright (c) 2002 Ralf S. Engelschall
  **  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **
  **  This file is part of OSSP rc, a portable Run-command processor
  **  which can be found at http://www.ossp.org/pkg/lib/rc/
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  rc_opt.h: Run-command processor ISO C public API header file
  */
  
  #ifndef __OSSPRC_OPT_H__
  #define __OSSPRC_OPT_H__
  
  typedef struct {    /* For option storage   */
      char *szName;
      char *szValue;
  } rc_opt_t;
  
  #endif /* __OSSPRC_OPT_H__ */

From ossp-cvs-owner@ossp.org  Tue Apr  9 19:01:55 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 543FB76438; Tue,  9 Apr 2002 19:01:55 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc Makefile.in rc.h rc_config.c rc_private.h
Message-Id: <20020409170155.543FB76438@mail.ossp.org>
Date: Tue,  9 Apr 2002 19:01:55 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   09-Apr-2002 19:01:55
  Branch: HEAD                             Handle: 2002040918015400

  Modified files:
    ossp-pkg/rc             Makefile.in rc.h rc_config.c rc_private.h

  Log:
    Flush configuration changes.

  Summary:
    Revision    Changes     Path
    1.19        +2  -2      ossp-pkg/rc/Makefile.in
    1.15        +7  -0      ossp-pkg/rc/rc.h
    1.8         +14 -13     ossp-pkg/rc/rc_config.c
    1.9         +4  -5      ossp-pkg/rc/rc_private.h
  ____________________________________________________________________________

  Index: ossp-pkg/rc/Makefile.in
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 Makefile.in
  --- ossp-pkg/rc/Makefile.in	8 Apr 2002 15:37:09 -0000	1.18
  +++ ossp-pkg/rc/Makefile.in	9 Apr 2002 17:01:54 -0000	1.19
  @@ -60,10 +60,10 @@
   TARGET_MANS     = rc.1 rc-sample.5
   
   SRCS            = rc.c rc_config.c rc_optimpl.c rc_option.c\
  -                  rc_version.c rc_pcre.c rc_util.c
  +                  rc_cliopt.c rc_version.c rc_pcre.c rc_util.c
   
   OBJS            = rc.o rc_config.o rc_optimpl.o rc_option.o\
  -                  rc_version.o rc_pcre.o rc_util.o
  +                  rc_cliopt.o rc_version.o rc_pcre.o rc_util.o
   
   SUBDIRS         = @SUBDIR_EX@ @SUBDIR_POPT@
   #SUBDIRS         = @SUBDIR_EX@ @SUBDIR_VAR@ @SUBDIR_VAL@ @SUBDIR_STR@ @SUBDIR_POPT@
  Index: ossp-pkg/rc/rc.h
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 rc.h
  --- ossp-pkg/rc/rc.h	26 Mar 2002 17:11:06 -0000	1.14
  +++ ossp-pkg/rc/rc.h	9 Apr 2002 17:01:54 -0000	1.15
  @@ -79,6 +79,13 @@
   /* Config accessor prototypes */
   short configGetvers(void);
   
  +/* Command line function prototypes */
  +rc_return_t clioptConstruct(void);
  +rc_return_t clioptDestruct(void);
  +
  +/* Command line accessor prototypes */
  +short clioptGetvers(void);
  +
   /* Utility (nonbounded) function prototypes */
   char *strErr(rc_return_t);
   
  Index: ossp-pkg/rc/rc_config.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 rc_config.c
  --- ossp-pkg/rc/rc_config.c	8 Apr 2002 15:37:10 -0000	1.7
  +++ ossp-pkg/rc/rc_config.c	9 Apr 2002 17:01:54 -0000	1.8
  @@ -33,9 +33,10 @@
   #include "rc.h"
   #include "rc_private.h"
   #include "rc_const.h"               /* String constants                 */
  +#include "rc_config.h"              /* Config types and constants       */
   #include "rc_option.h"              /* Option operations rely on popt   */
   
  -static rc_config_t *s_pInst = NULL; /* Singleton configuration instance */
  +static rc_config_t *s_pInst = NULL; /* Singleton config instance        */
   
   
   /***************************************
  @@ -46,20 +47,20 @@
   {
       ex_t Except;
   
  -    if (s_pInst == NULL) {                  /* If we don't have one   */
  -        s_pInst = malloc(sizeof(s_pInst));  /* yet, then allocate     */
  -        if (!s_pInst)                       /* a configuration        */
  -            return(RC_THROW(RC_ERR_MEM));   /* instance               */
  -        s_pInst->nLocks = 0;
  +    if (s_pInst == NULL) {                  /* If we don't have one     */
  +        s_pInst = malloc(sizeof(s_pInst));  /* yet, then allocate       */
  +        if (!s_pInst)                       /* a config instance        */
  +            return(RC_THROW(RC_ERR_MEM));
  +        s_pInst->m_nLocks = 0;
   
           ex_try {
  -                                            /* Make a config instance */
  +            clioptConstruct();              /* Make a config instance   */
           }
           ex_catch(Except) {
               rethrow;
           }
       }
  -    s_pInst->nLocks++;                      /* FIXME not threadsafe */
  +    s_pInst->m_nLocks++;                    /* FIXME not threadsafe     */
   
       return(RC_THROW(RC_OK));
   }
  @@ -127,16 +128,16 @@
       ex_t Except;
   
       if (s_pInst) {
  -        if (!(--s_pInst->nLocks)) {         /* If nLocks is 0, dealloc  */
  -            ex_try {                        /* FIXME, not thread-safe   */
  -
  +        if (--s_pInst->m_nLocks == 0) { /* If m_nLocks is 0, dealloc    */
  +            ex_try {                    /* FIXME, not thread-safe       */
  +                clioptDestruct();
               }
               ex_catch(Except) {
                   rethrow;
               }
   
  -            free(s_pInst);                  /* Deallocate configuration */
  -            s_pInst = NULL;                 /* and clear its reference  */
  +            free(s_pInst);              /* Deallocate config and        */
  +            s_pInst = NULL;             /* clear its reference          */
           }
       }
       else
  Index: ossp-pkg/rc/rc_private.h
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 rc_private.h
  --- ossp-pkg/rc/rc_private.h	8 Apr 2002 15:37:10 -0000	1.8
  +++ ossp-pkg/rc/rc_private.h	9 Apr 2002 17:01:54 -0000	1.9
  @@ -60,10 +60,9 @@
       ((rv) != RC_OK && (ex_catching && !ex_shielding) \
        ? (ex_throw(RC_STR_ID, NULL, (rv)), (rv)) : (rv))
   
  -
  -typedef struct {    /* Main rc configuration storage        */
  -    void *pvFixme;  /* Storage of configuration values      */
  -    int nLocks;     /* Server locks, not thread-safe FIXME  */
  -} rc_config_t;
  +typedef struct {    /* Simple linked list definition    */
  +    void *pvData;
  +    void *pvNext;
  +} rc_list_t;
   
   #endif /* __OSSPRC_PRIVATE_H__ */

From ossp-cvs-owner@ossp.org  Tue Apr  9 19:06:18 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 815947639E; Tue,  9 Apr 2002 19:06:18 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc Makefile.in rc.h rc_opt.c
Message-Id: <20020409170618.815947639E@mail.ossp.org>
Date: Tue,  9 Apr 2002 19:06:18 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   09-Apr-2002 19:06:18
  Branch: HEAD                             Handle: 2002040918061700

  Modified files:
    ossp-pkg/rc             Makefile.in rc.h rc_opt.c

  Log:
    Remove cut and paste crap.

  Summary:
    Revision    Changes     Path
    1.20        +2  -2      ossp-pkg/rc/Makefile.in
    1.16        +3  -0      ossp-pkg/rc/rc.h
    1.2         +3  -70     ossp-pkg/rc/rc_opt.c
  ____________________________________________________________________________

  Index: ossp-pkg/rc/Makefile.in
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 Makefile.in
  --- ossp-pkg/rc/Makefile.in	9 Apr 2002 17:01:54 -0000	1.19
  +++ ossp-pkg/rc/Makefile.in	9 Apr 2002 17:06:17 -0000	1.20
  @@ -60,10 +60,10 @@
   TARGET_MANS     = rc.1 rc-sample.5
   
   SRCS            = rc.c rc_config.c rc_optimpl.c rc_option.c\
  -                  rc_cliopt.c rc_version.c rc_pcre.c rc_util.c
  +                  rc_cliopt.c rc_opt.c rc_version.c rc_pcre.c rc_util.c
   
   OBJS            = rc.o rc_config.o rc_optimpl.o rc_option.o\
  -                  rc_cliopt.o rc_version.o rc_pcre.o rc_util.o
  +                  rc_cliopt.o rc_opt.o rc_version.o rc_pcre.o rc_util.o
   
   SUBDIRS         = @SUBDIR_EX@ @SUBDIR_POPT@
   #SUBDIRS         = @SUBDIR_EX@ @SUBDIR_VAR@ @SUBDIR_VAL@ @SUBDIR_STR@ @SUBDIR_POPT@
  Index: ossp-pkg/rc/rc.h
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 rc.h
  --- ossp-pkg/rc/rc.h	9 Apr 2002 17:01:54 -0000	1.15
  +++ ossp-pkg/rc/rc.h	9 Apr 2002 17:06:17 -0000	1.16
  @@ -86,6 +86,9 @@
   /* Command line accessor prototypes */
   short clioptGetvers(void);
   
  +/* Option accessor prototypes */
  +short optGetvers(void);
  +
   /* Utility (nonbounded) function prototypes */
   char *strErr(rc_return_t);
   
  Index: ossp-pkg/rc/rc_opt.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 rc_opt.c
  --- ossp-pkg/rc/rc_opt.c	9 Apr 2002 17:01:29 -0000	1.1
  +++ ossp-pkg/rc/rc_opt.c	9 Apr 2002 17:06:17 -0000	1.2
  @@ -35,79 +35,12 @@
   
   
   /***************************************
  -* optConstruct(void)                   *
  -* Construct an option                  *
  +* optGetXXXX(void)                     *
  +* Option accessors                     *
   ***************************************/
  -rc_return_t clioptConstruct(void)
  +short optGetvers(void)
   {
  -    ex_t Except;
  -
  -    if (s_pInst == NULL) {                  /* If we don't have one     */
  -        s_pInst = malloc(sizeof(s_pInst));  /* yet, then allocate       */
  -        if (!s_pInst)                       /* a cliopt instance        */
  -            return(RC_THROW(RC_ERR_MEM));
  -        s_pInst->nLocks = 0;
  -
  -        ex_try {
  -                                            /* Make a cliopt instance   */
  -        }
  -        ex_catch(Except) {
  -            rethrow;
  -        }
  -    }
  -    s_pInst->nLocks++;                      /* FIXME not threadsafe     */
  -
  -    return(RC_THROW(RC_OK));
  -}
  -
  -/***************************************
  -* clioptGetXXXX(void)                  *
  -* Command line option accessors        *
  -***************************************/
  -short clioptGetvers(void)
  -{
  -    ex_t Except;
       short nVer = 0;
   
  -    if (s_pInst != NULL) {
  -        ex_try {
  -
  -        }
  -        ex_catch(Except) {
  -            rethrow;
  -        }
  -    }
  -    else {
  -        RC_THROW(RC_ERR_USE);
  -        return(NULL);
  -    }
  -
       return(nVer);
  -}
  -
  -/***************************************
  -* clioptDestruct(void)                 *
  -* Destruct a command line option       *
  -***************************************/
  -rc_return_t clioptDestruct(void)
  -{
  -    ex_t Except;
  -
  -    if (s_pInst) {
  -        if (!(--s_pInst->nLocks)) {         /* If nLocks is 0, dealloc  */
  -            ex_try {                        /* FIXME, not thread-safe   */
  -
  -            }
  -            ex_catch(Except) {
  -                rethrow;
  -            }
  -
  -            free(s_pInst);                  /* Deallocate cliopt and    */
  -            s_pInst = NULL;                 /* clear its reference      */
  -        }
  -    }
  -    else
  -        return(RC_THROW(RC_ERR_USE));
  -
  -    return(RC_THROW(RC_OK));
   }

From ossp-cvs-owner@ossp.org  Thu Apr 11 18:52:49 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3FF307639E; Thu, 11 Apr 2002 18:52:47 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc 00TODO Makefile.in rc.c rc.h rc.pod rc_cliopt....
Message-Id: <20020411165247.3FF307639E@mail.ossp.org>
Date: Thu, 11 Apr 2002 18:52:47 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   11-Apr-2002 18:52:47
  Branch: HEAD                             Handle: 2002041117524500

  Modified files:
    ossp-pkg/rc             00TODO Makefile.in rc.c rc.h rc.pod rc_cliopt.c
                            rc_config.c rc_config.h rc_const.h rc_opt.c
                            rc_private.h rc_test.sh

  Log:
    Flush the toilet.

  Summary:
    Revision    Changes     Path
    1.22        +2  -0      ossp-pkg/rc/00TODO
    1.21        +4  -4      ossp-pkg/rc/Makefile.in
    1.18        +12 -12     ossp-pkg/rc/rc.c
    1.17        +19 -16     ossp-pkg/rc/rc.h
    1.30        +6  -6      ossp-pkg/rc/rc.pod
    1.2         +253 -15    ossp-pkg/rc/rc_cliopt.c
    1.9         +28 -39     ossp-pkg/rc/rc_config.c
    1.2         +32 -6      ossp-pkg/rc/rc_config.h
    1.4         +3  -0      ossp-pkg/rc/rc_const.h
    1.3         +81 -4      ossp-pkg/rc/rc_opt.c
    1.10        +6  -7      ossp-pkg/rc/rc_private.h
    1.7         +0  -8      ossp-pkg/rc/rc_test.sh
  ____________________________________________________________________________

  Index: ossp-pkg/rc/00TODO
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 00TODO
  --- ossp-pkg/rc/00TODO	28 Feb 2002 18:24:04 -0000	1.21
  +++ ossp-pkg/rc/00TODO	11 Apr 2002 16:52:45 -0000	1.22
  @@ -27,6 +27,8 @@
     If a variable is defined for which no default exists, warn user (Scholli.)
     Make own config, get rid of val because it doesn't hold strings.
     Write interlocking increment for thread-safe increments.
  +  Convert some normal assert() to real runtime checks.
  +  Use str_hash von ossp str or static RC_XXX_VAL array from rc_option.h.
   
   Detailed ;-) project plan
   -------------------------
  Index: ossp-pkg/rc/Makefile.in
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 Makefile.in
  --- ossp-pkg/rc/Makefile.in	9 Apr 2002 17:06:17 -0000	1.20
  +++ ossp-pkg/rc/Makefile.in	11 Apr 2002 16:52:45 -0000	1.21
  @@ -59,11 +59,11 @@
   TARGET_PROGS    = rc
   TARGET_MANS     = rc.1 rc-sample.5
   
  -SRCS            = rc.c rc_config.c rc_optimpl.c rc_option.c\
  -                  rc_cliopt.c rc_opt.c rc_version.c rc_pcre.c rc_util.c
  +SRCS            = rc.c rc_config.c rc_cliopt.c \
  +                  rc_version.c rc_pcre.c rc_util.c
   
  -OBJS            = rc.o rc_config.o rc_optimpl.o rc_option.o\
  -                  rc_cliopt.o rc_opt.o rc_version.o rc_pcre.o rc_util.o
  +OBJS            = rc.o rc_config.o rc_cliopt.o \
  +                  rc_version.o rc_pcre.o rc_util.o
   
   SUBDIRS         = @SUBDIR_EX@ @SUBDIR_POPT@
   #SUBDIRS         = @SUBDIR_EX@ @SUBDIR_VAR@ @SUBDIR_VAL@ @SUBDIR_STR@ @SUBDIR_POPT@
  Index: ossp-pkg/rc/rc.c
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 rc.c
  --- ossp-pkg/rc/rc.c	26 Mar 2002 17:11:06 -0000	1.17
  +++ ossp-pkg/rc/rc.c	11 Apr 2002 16:52:45 -0000	1.18
  @@ -30,36 +30,36 @@
   #include <stdio.h>
   #include <stdlib.h>
   
  -#include <string.h>
  -
   #include "rc.h"
  +#include "rc_const.h"
   #include "rc_private.h"
   
   
  -/*TRACE("Vor configLoad.");
  -TRACEL((long)configGetvers());
  -TRACE("Nach configLoad.");
  -TRACEL((long)configGetvers());*/
  -
   int main(int argc, char *argv[])
   {
       ex_t Except;
  -    int bCaught = 0;
   
       ex_try {
           configConstruct();
           configLoad(argc, argv);
  +        /* Processing the runcommands */
  +/*        procOpen(szRcfilist, szFuncfilist, szTmpfile);
  +        procConf(szEnvass, szSecdef, szSecref, szSecparm);
  +        procParse();
  +        procSec(szUmask, szUser, szGroup);
  +        procEval(szSection1, szSection2, ...);*/
  +        configDestruct();
       }
       ex_catch(Except) {
  -        bCaught = 1;
  +        if ((int)Except.ex_value == RC_CNF_VRS)
  +            fprintf(stdout, "This is OSSP rc, version %s\n", RC_VERSION);
  +            
           fprintf(stderr, "Class '%s' threw exception %d in %s:%s():%d.\n",\
                  (char *)Except.ex_class, (int)Except.ex_value,\
                  Except.ex_file, Except.ex_func, Except.ex_line);
           exit(1);        /* Failure */
       }
  -    if (!bCaught)
  -        fprintf(stderr, "main: No exceptions caught.\n");
   
  -    configDestruct();   /* Possibly destruct the configuration */
  +TRACE("No exceptions caught");
       exit(0);            /* Success */
   }
  Index: ossp-pkg/rc/rc.h
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 rc.h
  --- ossp-pkg/rc/rc.h	9 Apr 2002 17:06:17 -0000	1.16
  +++ ossp-pkg/rc/rc.h	11 Apr 2002 16:52:45 -0000	1.17
  @@ -48,6 +48,7 @@
   /* RC return codes */
   typedef enum {
       RC_OK,      /* Success                  */
  +    RC_CNF_VRS, /* User requested version   */
       RC_ERR_USE, /* Usage error              */
       RC_ERR_MEM, /* Memory error             */
       RC_ERR_SYS, /* System error (see errno) */
  @@ -59,35 +60,37 @@
   rc_return_t optionProcess(void);
   rc_return_t optionProcess(void);
   
  -/* File option function prototypes */
  -rc_return_t foptParse(void);
  -rc_return_t foptProcess(void);
  -
  -/* Environment option function prototypes */
  -rc_return_t eoptParse(void);
  -rc_return_t eoptProcess(void);
  -
  -/* Command line option function prototypes */
  -rc_return_t coptParse(int, char **);
  -rc_return_t coptProcess(int);
  -
   /* Config function prototypes */
   rc_return_t configConstruct(void);
   rc_return_t configLoad(int, char **);
   rc_return_t configDestruct(void);
   
   /* Config accessor prototypes */
  -short configGetvers(void);
  +const char *configGetoptval(rc_opt_t);
   
   /* Command line function prototypes */
   rc_return_t clioptConstruct(void);
  +/*FIXME    rc_return_t clioptRemnode(rc_bintup_t **);
  +    rc_return_t clioptRemallimp(rc_bintup_t **);
  +    rc_return_t clioptRemall(void);
  +    rc_return_t clioptAppnode(const char *, const char *);*/
  +rc_return_t clioptProcess(int);
  +rc_return_t clioptParse(int, char **);
   rc_return_t clioptDestruct(void);
   
   /* Command line accessor prototypes */
  -short clioptGetvers(void);
  +const char *clioptGetval(rc_opt_t);
  +const char *clioptSummarize(void);
   
  -/* Option accessor prototypes */
  -short optGetvers(void);
  +    /* Option function prototypes */
  +    /*FIXME rc_return_t optConstruct(rc_opt_t **);
  +    rc_return_t optDestruct(rc_opt_t **);*/
  +
  +    /* Option accessor prototypes */
  +    /*FIXME rc_return_t optGetname(rc_opt_t *, char **);
  +    rc_return_t optGetval(rc_opt_t *, char **);
  +    rc_return_t optSetname(rc_opt_t *, const char *);
  +    rc_return_t optSetval(rc_opt_t *, const char *);*/
   
   /* Utility (nonbounded) function prototypes */
   char *strErr(rc_return_t);
  Index: ossp-pkg/rc/rc.pod
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 rc.pod
  --- ossp-pkg/rc/rc.pod	1 Mar 2002 22:48:23 -0000	1.29
  +++ ossp-pkg/rc/rc.pod	11 Apr 2002 16:52:45 -0000	1.30
  @@ -1,5 +1,5 @@
   ##
  -##  rc.pod -- OSSP Run-command processor (manual page)
  +##  rc.pod -- OSSP Run-command Processor (manual page)
   ##  Copyright (c) 2000-2002 Cable & Wireless Deutschland GmbH
   ##  Copyright (c) 2000-2002 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>
  @@ -27,7 +27,7 @@
   
   =head1 NAME
   
  -B<rc> - OSSP Runcommand Processor
  +B<rc> - OSSP Run-command Processor
   
   =head1 SYNOPSIS
   
  @@ -68,10 +68,10 @@
   
   =head1 DESCRIPTION
   
  -OSSP rc is a runcommand processor. Its primary function is to scan F<rcfile>
  +OSSP rc is a run-command processor. Its primary function is to scan F<rcfile>
   script files for B<section>(s) and run the commands listed in the section(s).
   
  -The runcommand processor can alternatively C<print> the commands in human
  +The run-command processor can alternatively C<print> the commands in human
   readable format or reformat them for shell C<eval> input without executing
   them. The F<rcfile> files contain variables and the command processor has
   functionality to query their default, set and effective values.
  @@ -325,7 +325,7 @@
   
   =head1 SEE ALSO
   
  -OSSP rc integrates concepts taken from other runcommand architectures. For
  +OSSP rc integrates concepts taken from other run-command architectures. For
   more information, inspect the /etc/rc structures provided by the FreeBSD,
   Solaris, and Red Hat distributions.
   
  @@ -339,7 +339,7 @@
   
   =head1 HISTORY
   
  -B<OSSP rc> is a drop-in replacement for the prototype runcommand facility used
  +B<OSSP rc> is a drop-in replacement for the prototype run-command facility used
   in OpenPKG (http://www.openpkg.org/). The prototype was a slow and less robust
   Bourne shell script. B<OSSP rc> is comparitively faster, more robust, and more
   flexible. This flexibility allows for wider range of use, and B<OSSP rc> can
  Index: ossp-pkg/rc/rc_cliopt.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 rc_cliopt.c
  --- ossp-pkg/rc/rc_cliopt.c	9 Apr 2002 17:01:28 -0000	1.1
  +++ ossp-pkg/rc/rc_cliopt.c	11 Apr 2002 16:52:45 -0000	1.2
  @@ -29,11 +29,53 @@
   
   #include <stdio.h>
   #include <stdlib.h>
  +#include <string.h>
   
   #include "rc.h"
  -#include "rc_cliopt.h"
  +#include "rc_const.h"
  +#include "rc_config.h"
  +#include "popt.h"       /* OSSP popt options library    */
   
  -static rc_cliopt_t *s_pInst = NULL; /* Singleton cliopt instance */
  +static char *s_szOptuples[RC_NUMOPTS];  /* Option name value tuples */
  +static struct popt_option optionsTable[] = {
  +    /* Long options with short keys but no arguments */
  +    { RC_USE_NAME, '?', POPT_ARG_NONE,   0, RC_USE_VAL, RC_USE_DESC, NULL },
  +    { RC_DBG_NAME, 'd', POPT_ARG_NONE,   0, RC_DBG_VAL, RC_DBG_DESC, NULL },
  +    { RC_VER_NAME, 'V', POPT_ARG_NONE,   0, RC_VER_VAL, RC_VER_DESC, NULL },
  +    { RC_EVL_NAME, 'e', POPT_ARG_NONE,   0, RC_EVL_VAL, RC_EVL_DESC, NULL },
  +    { RC_HLP_NAME, 'h', POPT_ARG_NONE,   0, RC_HLP_VAL, RC_HLP_DESC, NULL },
  +    { RC_INF_NAME, 'i', POPT_ARG_NONE,   0, RC_INF_VAL, RC_INF_DESC, NULL },
  +    { RC_LBL_NAME, 'l', POPT_ARG_NONE,   0, RC_LBL_VAL, RC_LBL_DESC, NULL },
  +    { RC_PRN_NAME, 'p', POPT_ARG_NONE,   0, RC_PRN_VAL, RC_PRN_DESC, NULL },
  +    { RC_SIL_NAME, 's', POPT_ARG_NONE,   0, RC_SIL_VAL, RC_SIL_DESC, NULL },
  +    { RC_RAW_NAME, 'r', POPT_ARG_NONE,   0, RC_RAW_VAL, RC_RAW_DESC, NULL },
  +    { RC_VRB_NAME, 'v', POPT_ARG_NONE,   0, RC_VRB_VAL, RC_VRB_DESC, NULL },
  +    { RC_EXC_NAME, 'x', POPT_ARG_NONE,   0, RC_EXC_VAL, RC_EXC_DESC, NULL },
  +                                          
  +    /* Single argument long options with short keys */
  +    {RC_LOC_NAME, 'L', POPT_ARG_STRING, 0, RC_LOC_VAL, RC_LOC_DESC, "regx"},
  +    {RC_CNF_NAME, 'c', POPT_ARG_STRING, 0, RC_CNF_VAL, RC_CNF_DESC, "path"},
  +    {RC_FNC_NAME, 'f', POPT_ARG_STRING, 0, RC_FNC_VAL, RC_FNC_DESC, "path"},
  +    {RC_QRY_NAME, 'q', POPT_ARG_STRING, 0, RC_QRY_VAL, RC_QRY_DESC, "varx"},
  +    {RC_TMP_NAME, 't', POPT_ARG_STRING, 0, RC_TMP_VAL, RC_TMP_DESC, "path"},
  +
  +    /* Single argument long options without short keys */
  +    { RC_OWN_NAME, 0, POPT_ARG_STRING, 0, RC_OWN_VAL, RC_OWN_DESC, "user" },
  +    { RC_GRP_NAME, 0, POPT_ARG_STRING, 0, RC_GRP_VAL, RC_GRP_DESC, "group"},
  +    { RC_MSK_NAME, 0, POPT_ARG_INT,    0, RC_MSK_VAL, RC_MSK_DESC, "umask"},
  +    { RC_ASS_NAME, 0, POPT_ARG_STRING, 0, RC_ASS_VAL, RC_ASS_DESC, "regx" },
  +    { RC_DEF_NAME, 0, POPT_ARG_STRING, 0, RC_DEF_VAL, RC_DEF_DESC, "regx" },
  +    { RC_REF_NAME, 0, POPT_ARG_STRING, 0, RC_REF_VAL, RC_REF_DESC, "regx" },
  +    { RC_PRM_NAME, 0, POPT_ARG_STRING, 0, RC_PRM_VAL, RC_PRM_DESC, "regx" },
  +    { RC_TRM_NAME, 0, POPT_ARG_STRING, 0, RC_TRM_VAL, RC_TRM_DESC, "regx" },
  +    { RC_NCF_NAME, 0, POPT_ARG_STRING, 0, RC_NCF_VAL, RC_NCF_DESC, "name" },
  +    { RC_CMN_NAME, 0, POPT_ARG_STRING, 0, RC_CMN_VAL, RC_CMN_DESC, "name" },
  +    { RC_DFL_NAME, 0, POPT_ARG_STRING, 0, RC_DFL_VAL, RC_DFL_DESC, "name" },
  +    { RC_ERR_NAME, 0, POPT_ARG_STRING, 0, RC_ERR_VAL, RC_ERR_DESC, "name" },
  +
  +    POPT_AUTOHELP
  +    { NULL, 0, 0, NULL, 0 }
  +};
   
   
   /***************************************
  @@ -42,43 +84,239 @@
   ***************************************/
   rc_return_t clioptConstruct(void)
   {
  -    assert(s_pInst == NULL);
  -    s_pInst = malloc(sizeof(s_pInst));  /* Allocate a cliopt instance   */
  -    if (!s_pInst)
  +/*    assert(s_pBintab == NULL); */           /* Error if constructed already */
  +/*    s_pBintab = malloc(sizeof(*s_pBintab));*/ /* Allocate a cliopt instance   */
  +/*    if (!s_pBintab)
           return(RC_THROW(RC_ERR_MEM));
   
  +    s_pBintab->pOptlist = malloc(sizeof(*s_pBintab->pOptlist));*/
  +/*FIXME    optConstruct((rc_opt_t **)&s_pBintab->pOptlist->pvData);FIXME*/
  +/*    s_pBintab->pOptlist->pvData = NULL;
  +    s_pBintab->pOptlist->pvNext = NULL;*/
  +
  +    memset(s_szOptuples, NULL, sizeof(s_szOptuples));
  +
  +TRACE("cliopt constructed.");
       return(RC_THROW(RC_OK));
   }
   
   /***************************************
  -* clioptGetXXXX(void)                  *
  -* Command line option accessors        *
  +* clioptGetval(rc_opt_t)               *
  +* Command line option accessor         *
   ***************************************/
  -short clioptGetvers(void)
  +const char *clioptGetval(rc_opt_t Optname)
   {
       ex_t Except;
  -    short nVer = 0;
   
  -    assert(s_pInst);
  +    assert(Optname < RC_NUMOPTS);   /* Invalidate if nonexistent option */
       ex_try {
  -
  +        return((const char *)s_szOptuples[Optname]);
       }
       ex_catch(Except) {
           rethrow;
       }
  +    return (NULL);  /* Not reached  */
  +}
  +
  +/***************************************
  +* clioptSummarize(void)                *
  +* Command line option summary          *
  +***************************************/
  +const char *clioptSummarize(void)
  +{
  +    return (NULL);
  +}
  +
  +/***************************************
  +* clioptProcess(int)                   *
  +* Switch through available options     *
  +* processing the corresponding option  *
  +* and update option table accordingly  *
  +***************************************/
  +rc_return_t clioptProcess(int cliOption)
  +{
  +    switch (cliOption) {
  +    case RC_USE_VAL:
  +        s_szOptuples[cliOption] = strdup("1");
  +        break;
  +    case RC_DBG_VAL:
  +        s_szOptuples[cliOption] = strdup("1");
  +        break;
  +    case RC_VER_VAL:
  +        s_szOptuples[cliOption] = strdup("1");
  +        break;
  +    case RC_EVL_VAL:
  +        s_szOptuples[cliOption] = strdup("1");
  +        break;
  +    case RC_HLP_VAL:
  +        s_szOptuples[cliOption] = strdup("1");
  +        break;
  +    case RC_INF_VAL:
  +        s_szOptuples[cliOption] = strdup("1");
  +        break;
  +    case RC_LBL_VAL:
  +        s_szOptuples[cliOption] = strdup("1");
  +        break;
  +    case RC_PRN_VAL:
  +        s_szOptuples[cliOption] = strdup("1");
  +        break;
  +    case RC_SIL_VAL:
  +        s_szOptuples[cliOption] = strdup("1");
  +        break;
  +    case RC_RAW_VAL:
  +        s_szOptuples[cliOption] = strdup("1");
  +        break;
  +    case RC_VRB_VAL:
  +        s_szOptuples[cliOption] = strdup("1");
  +        break;
  +    case RC_EXC_VAL:
  +        s_szOptuples[cliOption] = strdup("1");
  +        break;
  +    case RC_LOC_VAL:
  +        s_szOptuples[cliOption] = strdup("1");
  +        break;
  +    case RC_CNF_VAL:
  +        s_szOptuples[cliOption] = strdup("1");
  +        break;
  +    case RC_FNC_VAL:
  +        s_szOptuples[cliOption] = strdup("1");
  +        break;
  +    case RC_QRY_VAL:
  +        s_szOptuples[cliOption] = strdup("1");
  +        break;
  +    case RC_TMP_VAL:
  +        s_szOptuples[cliOption] = strdup("1");
  +        break;
  +    case RC_OWN_VAL:
  +        s_szOptuples[cliOption] = strdup("1");
  +        break;
  +    case RC_GRP_VAL:
  +        s_szOptuples[cliOption] = strdup("1");
  +        break;
  +    case RC_MSK_VAL:
  +        s_szOptuples[cliOption] = strdup("1");
  +        break;
  +    case RC_ASS_VAL:
  +        s_szOptuples[cliOption] = strdup("1");
  +        break;
  +    case RC_DEF_VAL:
  +        s_szOptuples[cliOption] = strdup("1");
  +        break;
  +    case RC_REF_VAL:
  +        s_szOptuples[cliOption] = strdup("1");
  +        break;
  +    case RC_PRM_VAL:
  +        s_szOptuples[cliOption] = strdup("1");
  +        break;
  +    case RC_TRM_VAL:
  +        s_szOptuples[cliOption] = strdup("1");
  +        break;
  +    case RC_NCF_VAL:
  +        s_szOptuples[cliOption] = strdup("1");
  +        break;
  +    case RC_CMN_VAL:
  +        s_szOptuples[cliOption] = strdup("1");
  +        break;
  +    case RC_DFL_VAL:
  +        s_szOptuples[cliOption] = strdup("1");
  +        break;
  +    case RC_ERR_VAL:
  +        s_szOptuples[cliOption] = strdup("1");
  +        break;
  +    default :
  +        break;
  +    }
   
  -    return(nVer);
  +    return(RC_THROW(RC_OK));
   }
   
   /***************************************
  +* clioptParse(int, char **)            *
  +* Parse command line options           *
  +***************************************/
  +rc_return_t clioptParse(int argc, char *argv[])
  +{
  +    ex_t Except;
  +    char cliOpt = 0;            /* For argument parsing           */
  +    char *szCLIBuf = NULL;
  +    popt_context optCon;        /* Context for parsing options    */
  +
  +    optCon = popt_getcontext(NULL, argc, (const char **)argv, optionsTable, 0);
  +    popt_setotheroptionhelp(optCon, "[options] <rcfile> <sections [args]>");
  +
  +    if (argc < 3) {
  +        popt_printusage(optCon, stderr, 0);
  +        return(RC_THROW(RC_ERR_USE));
  +    }
  +
  +    /* Now do options processing */
  +    while ((cliOpt = popt_getnextopt(optCon)) >= 0)
  +    ex_try {
  +        clioptProcess(cliOpt);
  +    }
  +    ex_catch(Except) {
  +        if ((rc_return_t)Except.ex_value != RC_ERR_USE)
  +            fprintf(stderr, "Nonusage exception: %d\n",\
  +                (rc_return_t)Except.ex_value);
  +
  +        fprintf(stderr, "Class '%s' threw exception %d in %s:%s():%d.\n",\
  +                (char *)Except.ex_class, *(int *)Except.ex_value,\
  +                Except.ex_file, Except.ex_func, Except.ex_line);
  +    }
  +
  +    szCLIBuf = (char *)popt_getarg(optCon);
  +    if ((szCLIBuf == NULL)) {
  +        fprintf(stderr, "Please specify at least one rcfile and section.\n");
  +        popt_printusage(optCon, stderr, 0);
  +        return(RC_THROW(RC_ERR_USE));
  +    }
  +
  +    if (cliOpt < -1) {
  +        /* An error occurred during option processing */
  +        fprintf(stderr, "%s: %s\n",
  +                popt_badoption(optCon, POPT_BADOPTION_NOALIAS),
  +                popt_strerror(cliOpt));
  +        return(RC_THROW(RC_ERR_INT));
  +    }
  +
  +    fprintf(stderr, "Run these commands: %s\n", szCLIBuf);
  +    popt_freecontext(optCon);
  +    return(RC_THROW(RC_OK));
  +}
  +/***************************************
   * clioptDestruct(void)                 *
   * Destruct a command line option       *
   ***************************************/
   rc_return_t clioptDestruct(void)
   {
  -    assert(s_pInst);
  -    free(s_pInst);      /* Deallocate cliopt and    */
  -    s_pInst = NULL;     /* clear its reference      */
  +    int i = 0;
  +/*    ex_t Except;
  +
  +    assert(s_pBintab);*/                /* Error if not constructed */
  +/*    ex_try {
  +        clioptRemall();*/             /* Removes ALL list nodes   */
  +/*FIXME        optDestruct((rc_opt_t **)&s_pBintab->pOptlist->pvData);FIXME*/
  +/*        free(s_pBintab->pOptlist);*/    /* Deallocate option list   */
  +/*        free(s_pBintab);*/              /* Deallocate cliopt and    */
  +/*        s_pBintab = NULL;*/             /* clear its reference      */
  +/*    }
  +    ex_catch(Except) {
  +        rethrow;
  +    }*/
  +
  +for (i = 0; i < RC_NUMOPTS; i++)
  +    if (s_szOptuples[i])
  +        TRACEL(i);
  +
  +    for (i = 0; i < RC_NUMOPTS; i++)                    /* Free the tuple */
  +        s_szOptuples[i] ? free(s_szOptuples[i]) : RC_NOP; /* or do nothing  */
  +
  +    memset(s_szOptuples, NULL, sizeof(s_szOptuples));     /* Clear tuples   */
  +
  +for (i = 0; i < RC_NUMOPTS; i++)
  +    if (s_szOptuples[i])
  +        TRACE("Problem! Destructor failed!");
  +TRACE("cliopt destructed.");
   
       return(RC_THROW(RC_OK));
   }
  Index: ossp-pkg/rc/rc_config.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 rc_config.c
  --- ossp-pkg/rc/rc_config.c	9 Apr 2002 17:01:54 -0000	1.8
  +++ ossp-pkg/rc/rc_config.c	11 Apr 2002 16:52:45 -0000	1.9
  @@ -31,12 +31,9 @@
   #include <stdlib.h>
   
   #include "rc.h"
  -#include "rc_private.h"
   #include "rc_const.h"               /* String constants                 */
  -#include "rc_config.h"              /* Config types and constants       */
  -#include "rc_option.h"              /* Option operations rely on popt   */
   
  -static rc_config_t *s_pInst = NULL; /* Singleton config instance        */
  +static int s_nLocks = 0;            /* Server locks, not thread-safe FIXME  */
   
   
   /***************************************
  @@ -47,36 +44,38 @@
   {
       ex_t Except;
   
  -    if (s_pInst == NULL) {                  /* If we don't have one     */
  -        s_pInst = malloc(sizeof(s_pInst));  /* yet, then allocate       */
  -        if (!s_pInst)                       /* a config instance        */
  -            return(RC_THROW(RC_ERR_MEM));
  -        s_pInst->m_nLocks = 0;
  -
  -        ex_try {
  -            clioptConstruct();              /* Make a config instance   */
  +    if (s_nLocks == 0) {                    /* If we don't have one yet */
  +        ex_try {                            /* then construct a new one */
  +            clioptConstruct();              /* Member cliopt instance   */
           }
           ex_catch(Except) {
               rethrow;
           }
       }
  -    s_pInst->m_nLocks++;                    /* FIXME not threadsafe     */
  +    s_nLocks++;                             /* FIXME not threadsafe     */
   
       return(RC_THROW(RC_OK));
   }
   
   /***************************************
  -* configGetXXXX(void)                  *
  +* configGetoptval(rc_opt_t)            *
   * Configuration accessors              *
   ***************************************/
  -short configGetvers(void)
  +const char *configGetoptval(rc_opt_t Optname)
   {
       ex_t Except;
  -    short nVer = 0;
  +    char *szTemp = NULL;
   
  -    if (s_pInst != NULL) {
  +    if (s_nLocks) {                         /* Make sure config exists      */
           ex_try {
  -
  +            if ((szTemp = (char *)clioptGetval(Optname)))
  +                return((const char *)szTemp);
  +/*            else if (szTemp = envoptGetval(Optname))
  +                return((const char *)szTemp);
  +            else if (szTemp = cnfoptGetval(Optname))
  +                return((const char *)szTemp);*/
  +            else
  +                return(NULL);               /* Special case when not found  */
           }
           ex_catch(Except) {
               rethrow;
  @@ -84,10 +83,8 @@
       }
       else {
           RC_THROW(RC_ERR_USE);
  -        return(NULL);
       }
  -
  -    return(nVer);
  +    return(NULL);   /* Not reached  */
   }
   
   /************************************************
  @@ -98,13 +95,10 @@
   {
       ex_t Except;
   
  -    ex_try {    /* Parse through each type of option           */
  -/* FIXME s_pInst->pOpt will hold a copy of the command line */
  -//        coptParse(s_pInst->pOpt);   /* First priority options  */
  -//        eoptParse(s_pInst->pOpt);   /* Medium priority options */
  -//        foptParse(s_pInst->pOpt);   /* Low priority options    */
  -        coptParse(argc, argv); /* FIXME Patch for now */
  -/* FIXME s_pInst->pOpt will hold a copy of the command line */
  +    ex_try {    /* Parse option groups in order of priority     */
  +        clioptParse(argc, argv);        /* Command line options */
  +/*        envoptParse(s_nLocks->pOpt);*/    /* Environment options  */
  +/*        cnfoptParse(s_nLocks->pOpt);*/    /* Configfile options   */
       }
       ex_catch(Except) {
           rethrow;
  @@ -127,17 +121,12 @@
   {
       ex_t Except;
   
  -    if (s_pInst) {
  -        if (--s_pInst->m_nLocks == 0) { /* If m_nLocks is 0, dealloc    */
  -            ex_try {                    /* FIXME, not thread-safe       */
  -                clioptDestruct();
  -            }
  -            ex_catch(Except) {
  -                rethrow;
  -            }
  -
  -            free(s_pInst);              /* Deallocate config and        */
  -            s_pInst = NULL;             /* clear its reference          */
  +    if (--s_nLocks == 0) {          /* If m_nLocks is 0, deallocate */
  +        ex_try {                    /* FIXME, not thread-safe       */
  +            clioptDestruct();
  +        }
  +        ex_catch(Except) {
  +            rethrow;
           }
       }
       else
  Index: ossp-pkg/rc/rc_config.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 rc_config.h
  --- ossp-pkg/rc/rc_config.h	9 Apr 2002 17:01:29 -0000	1.1
  +++ ossp-pkg/rc/rc_config.h	11 Apr 2002 16:52:45 -0000	1.2
  @@ -24,17 +24,43 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  rc_config.h: Run-command processor ISO C public API header file
  +**  rc_config.h: Run-command processor ISO C public header file
   */
   
   #ifndef __OSSPRC_CONFIG_H__
   #define __OSSPRC_CONFIG_H__
   
  -#include "rc_cliopt.h"      /* Command line option */
  +/* Available options and their values */
  +#define RC_USE_VAL   0
  +#define RC_DBG_VAL   1
  +#define RC_VER_VAL   2
  +#define RC_EVL_VAL   3
  +#define RC_HLP_VAL   4
  +#define RC_INF_VAL   5
  +#define RC_LBL_VAL   6
  +#define RC_PRN_VAL   7
  +#define RC_SIL_VAL   8
  +#define RC_RAW_VAL   9
  +#define RC_VRB_VAL  10
  +#define RC_EXC_VAL  11
  +#define RC_LOC_VAL  12
  +#define RC_CNF_VAL  13
  +#define RC_FNC_VAL  14
  +#define RC_QRY_VAL  15
  +#define RC_TMP_VAL  16
  +#define RC_OWN_VAL  17
  +#define RC_GRP_VAL  18
  +#define RC_MSK_VAL  19
  +#define RC_ASS_VAL  20
  +#define RC_DEF_VAL  21
  +#define RC_REF_VAL  22
  +#define RC_PRM_VAL  23
  +#define RC_TRM_VAL  24
  +#define RC_NCF_VAL  25
  +#define RC_CMN_VAL  26
  +#define RC_DFL_VAL  27
  +#define RC_ERR_VAL  28
   
  -typedef struct {            /* Main rc configuration storage        */
  -    rc_cliopt_t *pCliopt;   /* Aggregate command line option        */
  -    int m_nLocks;           /* Server locks, not thread-safe FIXME  */
  -} rc_config_t;
  +#define RC_NUMOPTS  29  /* Increment with each option addition */
   
   #endif /* __OSSPRC_CONFIG_H__ */
  Index: ossp-pkg/rc/rc_const.h
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 rc_const.h
  --- ossp-pkg/rc/rc_const.h	26 Mar 2002 17:11:06 -0000	1.3
  +++ ossp-pkg/rc/rc_const.h	11 Apr 2002 16:52:45 -0000	1.4
  @@ -103,4 +103,7 @@
   #define RC_ERRSTR_INT "Internal"
   #define RC_ERRSTR_UNK "Unrecognized"
   
  +/* FIXME Tie to shtool generation */
  +#define RC_VERSION    "77.77"
  +
   #endif /* __OSSPRC_CONST_H__ */
  Index: ossp-pkg/rc/rc_opt.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 rc_opt.c
  --- ossp-pkg/rc/rc_opt.c	9 Apr 2002 17:06:17 -0000	1.2
  +++ ossp-pkg/rc/rc_opt.c	11 Apr 2002 16:52:45 -0000	1.3
  @@ -29,18 +29,95 @@
   
   #include <stdio.h>
   #include <stdlib.h>
  +#include <string.h>
   
   #include "rc.h"
   #include "rc_opt.h"
   
   
   /***************************************
  -* optGetXXXX(void)                     *
  +* optConstruct(rc_opt_t **)            *
  +* Construct an option                  *
  +***************************************/
  +rc_return_t optConstruct(rc_opt_t **ppOption)
  +{
  +    assert(*ppOption == NULL);              /* Error if constructed already */
  +    *ppOption = malloc(sizeof(**ppOption)); /* Allocate an option instance  */
  +    if (!*ppOption)
  +        return(RC_THROW(RC_ERR_MEM));
  +
  +    (*ppOption)->szName = NULL;             /* We don't know how much to    */
  +    (*ppOption)->szVal  = NULL;             /* allocate, so do it later     */
  +
  +    return(RC_THROW(RC_OK));
  +}
  +
  +/***************************************
  +* optGetXXXX(rc_opt_t *, char **)      *
  +* Option accessors                     *
  +***************************************/
  +rc_return_t optGetname(rc_opt_t *pOption, char **pszName)
  +{
  +    assert(pOption && pOption->szName);
  +    if (!(*pszName = strdup(pOption->szName)))  /* Get name from option     */
  +        return(RC_THROW(RC_ERR_MEM));
  +    else
  +        return(RC_THROW(RC_OK));
  +}
  +
  +rc_return_t optGetval(rc_opt_t *pOption, char **pszVal)
  +{
  +    assert(pOption && pOption->szVal);
  +    if (!(*pszVal = strdup(pOption->szVal)))    /* Get value from option    */
  +        return(RC_THROW(RC_ERR_MEM));
  +    else
  +        return(RC_THROW(RC_OK));
  +}
  +
  +/***************************************
  +* optSetXXXX(rc_opt_t *, const char *) *
   * Option accessors                     *
   ***************************************/
  -short optGetvers(void)
  +rc_return_t optSetname(rc_opt_t *pOption, const char *cszName)
  +{
  +    if (pOption->szName)                        /* Guard against leaks  */
  +        free(pOption->szName);                  /* if resetting name    */
  +    if (!(pOption->szName = strdup(cszName)))   /* Set name of option   */
  +        return(RC_THROW(RC_ERR_MEM));
  +    else
  +        return(RC_THROW(RC_OK));
  +}
  +
  +rc_return_t optSetval(rc_opt_t *pOption, const char *cszVal)
  +{
  +    if (pOption->szVal)                         /* Guard against leaks  */
  +        free(pOption->szVal);                   /* if resetting value   */
  +    if (!(pOption->szVal = strdup(cszVal)))     /* Set value of option  */
  +        return(RC_THROW(RC_ERR_MEM));
  +    else
  +        return(RC_THROW(RC_OK));
  +}
  +
  +/***************************************
  +* optDestruct(rc_opt_t **)             *
  +* Destruct a command line option       *
  +***************************************/
  +rc_return_t optDestruct(rc_opt_t **ppOption)
   {
  -    short nVer = 0;
  +    ex_t Except;
  +
  +    assert(*ppOption);                  /* Error if not constructed */
  +    ex_try {
  +        if ((*ppOption)->szName)        /* Might not be mallocd yet */
  +            free((*ppOption)->szName);
  +        if ((*ppOption)->szVal)         /* Might not be mallocd yet */
  +            free((*ppOption)->szVal);
  +        free(*ppOption);                /* Deallocate option and    */
  +        *ppOption = NULL;               /* clear its reference      */
  +    }
  +    ex_catch(Except) {
  +        rethrow;
  +    }
   
  -    return(nVer);
  +    return(RC_THROW(RC_OK));
   }
  Index: ossp-pkg/rc/rc_private.h
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 rc_private.h
  --- ossp-pkg/rc/rc_private.h	9 Apr 2002 17:01:54 -0000	1.9
  +++ ossp-pkg/rc/rc_private.h	11 Apr 2002 16:52:45 -0000	1.10
  @@ -38,16 +38,18 @@
   #include <assert.h>
   #ifndef DEBUG
   #define NDEBUG
  -#define TRACE(str) ((void)0)
  -#define TRACEL(long) ((void)0)
  +#define TRACE(str)  ((void)0)
  +#define TRACEL(num) ((void)0)
   #else
   #define TRACE(str)  fprintf(stderr, "%s:%d: %s\n", __FILE__, __LINE__, str)
  -#define TRACEL(long)  fprintf(stderr, "%s:%d: %ld\n", __FILE__, __LINE__, long)
  +#define TRACEL(num) fprintf(stderr, "%s:%d: %ld\n", __FILE__, __LINE__, (long int)num)
   #endif
   
   /* The GUID for OSSP rc */
   #define RC_STR_ID "OSSP rc"
   
  +/* Intentional no operation */
  +#define RC_NOP ((void)0)
   
   /* Memory debugging support */
   #if defined(HAVE_DMALLOC_H) && defined(WITH_DMALLOC)
  @@ -60,9 +62,6 @@
       ((rv) != RC_OK && (ex_catching && !ex_shielding) \
        ? (ex_throw(RC_STR_ID, NULL, (rv)), (rv)) : (rv))
   
  -typedef struct {    /* Simple linked list definition    */
  -    void *pvData;
  -    void *pvNext;
  -} rc_list_t;
  +typedef int rc_opt_t;   /* For use with RC_XXX_VAL definitions  */
   
   #endif /* __OSSPRC_PRIVATE_H__ */
  Index: ossp-pkg/rc/rc_test.sh
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 rc_test.sh
  --- ossp-pkg/rc/rc_test.sh	26 Mar 2002 17:11:06 -0000	1.6
  +++ ossp-pkg/rc/rc_test.sh	11 Apr 2002 16:52:45 -0000	1.7
  @@ -29,23 +29,17 @@
   
   # Test short options, should fail for false combination usage
   ./rc -dVehilpsrvxLcfqt samba start sleep=2 restart
  -echo
   
   # Test short options, should succeed
   ./rc -derv -L /sfw/etc/rc.d/rc.%{RCFILE:s/^all$/*/} -c /sfw/etc/rc.conf -f /sfw/etc/rc.func -t /tmp openssh stop sleep=4 start daily minsize=2097152
  -echo
   
   # Test some long options, should fail for false combination usage
   ./rc --verbose --silent uucp stop sleep=6 start
  -echo
   ./rc --query --silent zebra bing bang
  -echo
   ./rc --conf /sfw/rc.conf --locate /sfw/etc/rc.d --query what to enter here
  -echo
   
   # Test minimal set of long options, should succeed
   ./rc --debug --version rsyncd nothing matters but the version
  -echo
   
   # FIXME these cases are not handled yet by our configuration FIXME #
   #./rc --debug --version
  @@ -61,9 +55,7 @@
   # FIXME these cases are not handled yet by our configuration FIXME #
   
   ./rc --func /sfw/etc/rc.func --print --verbose openssh stop sleep=4 start
  -echo
   ./rc --func /sfw/etc/rc.func --debug --eval uucp restart
  -echo
   ./rc --conf ./myrc --func /sfw/etc/rc.func --tmp /tmp --debug --silent --exec uucp start
   
   # Next milestone

From ossp-cvs-owner@ossp.org  Fri Apr 12 21:15:13 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 45E347635D; Fri, 12 Apr 2002 21:15:13 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.c rc.h rc_cliopt.c rc_config.c rc_private.h...
Message-Id: <20020412191513.45E347635D@mail.ossp.org>
Date: Fri, 12 Apr 2002 21:15:13 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   12-Apr-2002 21:15:13
  Branch: HEAD                             Handle: 2002041220151200

  Modified files:
    ossp-pkg/rc             rc.c rc.h rc_cliopt.c rc_config.c rc_private.h
                            rc_test.sh

  Log:
    Flush configuration and parsing work.

  Summary:
    Revision    Changes     Path
    1.19        +30 -3      ossp-pkg/rc/rc.c
    1.18        +2  -1      ossp-pkg/rc/rc.h
    1.3         +144 -150   ossp-pkg/rc/rc_cliopt.c
    1.10        +31 -9      ossp-pkg/rc/rc_config.c
    1.11        +2  -2      ossp-pkg/rc/rc_private.h
    1.8         +14 -5      ossp-pkg/rc/rc_test.sh
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.c
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 rc.c
  --- ossp-pkg/rc/rc.c	11 Apr 2002 16:52:45 -0000	1.18
  +++ ossp-pkg/rc/rc.c	12 Apr 2002 19:15:12 -0000	1.19
  @@ -34,6 +34,10 @@
   #include "rc_const.h"
   #include "rc_private.h"
   
  +/* FIXME BEGIN DEBUG */
  +#include "rc_config.h"
  +#include <string.h>
  +/* FIXME END DEBUG */
   
   int main(int argc, char *argv[])
   {
  @@ -47,8 +51,8 @@
           procConf(szEnvass, szSecdef, szSecref, szSecparm);
           procParse();
           procSec(szUmask, szUser, szGroup);
  -        procEval(szSection1, szSection2, ...);*/
  -        configDestruct();
  +        procEval(szSection1, szSection2, ...);
  +        configDestruct();*/
       }
       ex_catch(Except) {
           if ((int)Except.ex_value == RC_CNF_VRS)
  @@ -60,6 +64,29 @@
           exit(1);        /* Failure */
       }
   
  -TRACE("No exceptions caught");
  +/* FIXME BEGIN DEBUG */
  +{
  +int i = 0;
  +int bCaught = FALSE;
  +while (!bCaught) {
  +    ex_try {
  +        if (configGetval(i)) {
  +            fprintf(stderr, "D Option %s: ", configGetname(i));
  +            if (!(strcmp(configGetval(i), "1")))
  +                fprintf(stderr, "on\n");
  +            else
  +                fprintf(stderr, "%s\n", configGetval(i));
  +        }
  +    }
  +    ex_catch(Except) {
  +        bCaught = TRUE;
  +    }
  +    i++;
  +}
  +}
  +/* FIXME END DEBUG */
  +
  +configDestruct();/* FIXME Remove, allow first scope */
  +TRACE("No exceptions caught\n");
       exit(0);            /* Success */
   }
  Index: ossp-pkg/rc/rc.h
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 rc.h
  --- ossp-pkg/rc/rc.h	11 Apr 2002 16:52:45 -0000	1.17
  +++ ossp-pkg/rc/rc.h	12 Apr 2002 19:15:12 -0000	1.18
  @@ -66,7 +66,8 @@
   rc_return_t configDestruct(void);
   
   /* Config accessor prototypes */
  -const char *configGetoptval(rc_opt_t);
  +const char *configGetval(rc_opt_t);
  +const char *configGetname(rc_opt_t);
   
   /* Command line function prototypes */
   rc_return_t clioptConstruct(void);
  Index: ossp-pkg/rc/rc_cliopt.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 rc_cliopt.c
  --- ossp-pkg/rc/rc_cliopt.c	11 Apr 2002 16:52:45 -0000	1.2
  +++ ossp-pkg/rc/rc_cliopt.c	12 Apr 2002 19:15:12 -0000	1.3
  @@ -36,46 +36,7 @@
   #include "rc_config.h"
   #include "popt.h"       /* OSSP popt options library    */
   
  -static char *s_szOptuples[RC_NUMOPTS];  /* Option name value tuples */
  -static struct popt_option optionsTable[] = {
  -    /* Long options with short keys but no arguments */
  -    { RC_USE_NAME, '?', POPT_ARG_NONE,   0, RC_USE_VAL, RC_USE_DESC, NULL },
  -    { RC_DBG_NAME, 'd', POPT_ARG_NONE,   0, RC_DBG_VAL, RC_DBG_DESC, NULL },
  -    { RC_VER_NAME, 'V', POPT_ARG_NONE,   0, RC_VER_VAL, RC_VER_DESC, NULL },
  -    { RC_EVL_NAME, 'e', POPT_ARG_NONE,   0, RC_EVL_VAL, RC_EVL_DESC, NULL },
  -    { RC_HLP_NAME, 'h', POPT_ARG_NONE,   0, RC_HLP_VAL, RC_HLP_DESC, NULL },
  -    { RC_INF_NAME, 'i', POPT_ARG_NONE,   0, RC_INF_VAL, RC_INF_DESC, NULL },
  -    { RC_LBL_NAME, 'l', POPT_ARG_NONE,   0, RC_LBL_VAL, RC_LBL_DESC, NULL },
  -    { RC_PRN_NAME, 'p', POPT_ARG_NONE,   0, RC_PRN_VAL, RC_PRN_DESC, NULL },
  -    { RC_SIL_NAME, 's', POPT_ARG_NONE,   0, RC_SIL_VAL, RC_SIL_DESC, NULL },
  -    { RC_RAW_NAME, 'r', POPT_ARG_NONE,   0, RC_RAW_VAL, RC_RAW_DESC, NULL },
  -    { RC_VRB_NAME, 'v', POPT_ARG_NONE,   0, RC_VRB_VAL, RC_VRB_DESC, NULL },
  -    { RC_EXC_NAME, 'x', POPT_ARG_NONE,   0, RC_EXC_VAL, RC_EXC_DESC, NULL },
  -                                          
  -    /* Single argument long options with short keys */
  -    {RC_LOC_NAME, 'L', POPT_ARG_STRING, 0, RC_LOC_VAL, RC_LOC_DESC, "regx"},
  -    {RC_CNF_NAME, 'c', POPT_ARG_STRING, 0, RC_CNF_VAL, RC_CNF_DESC, "path"},
  -    {RC_FNC_NAME, 'f', POPT_ARG_STRING, 0, RC_FNC_VAL, RC_FNC_DESC, "path"},
  -    {RC_QRY_NAME, 'q', POPT_ARG_STRING, 0, RC_QRY_VAL, RC_QRY_DESC, "varx"},
  -    {RC_TMP_NAME, 't', POPT_ARG_STRING, 0, RC_TMP_VAL, RC_TMP_DESC, "path"},
  -
  -    /* Single argument long options without short keys */
  -    { RC_OWN_NAME, 0, POPT_ARG_STRING, 0, RC_OWN_VAL, RC_OWN_DESC, "user" },
  -    { RC_GRP_NAME, 0, POPT_ARG_STRING, 0, RC_GRP_VAL, RC_GRP_DESC, "group"},
  -    { RC_MSK_NAME, 0, POPT_ARG_INT,    0, RC_MSK_VAL, RC_MSK_DESC, "umask"},
  -    { RC_ASS_NAME, 0, POPT_ARG_STRING, 0, RC_ASS_VAL, RC_ASS_DESC, "regx" },
  -    { RC_DEF_NAME, 0, POPT_ARG_STRING, 0, RC_DEF_VAL, RC_DEF_DESC, "regx" },
  -    { RC_REF_NAME, 0, POPT_ARG_STRING, 0, RC_REF_VAL, RC_REF_DESC, "regx" },
  -    { RC_PRM_NAME, 0, POPT_ARG_STRING, 0, RC_PRM_VAL, RC_PRM_DESC, "regx" },
  -    { RC_TRM_NAME, 0, POPT_ARG_STRING, 0, RC_TRM_VAL, RC_TRM_DESC, "regx" },
  -    { RC_NCF_NAME, 0, POPT_ARG_STRING, 0, RC_NCF_VAL, RC_NCF_DESC, "name" },
  -    { RC_CMN_NAME, 0, POPT_ARG_STRING, 0, RC_CMN_VAL, RC_CMN_DESC, "name" },
  -    { RC_DFL_NAME, 0, POPT_ARG_STRING, 0, RC_DFL_VAL, RC_DFL_DESC, "name" },
  -    { RC_ERR_NAME, 0, POPT_ARG_STRING, 0, RC_ERR_VAL, RC_ERR_DESC, "name" },
  -
  -    POPT_AUTOHELP
  -    { NULL, 0, 0, NULL, 0 }
  -};
  +static char *m_szOptuples[RC_NUMOPTS];  /* Option name value tuples */
   
   
   /***************************************
  @@ -94,9 +55,9 @@
   /*    s_pBintab->pOptlist->pvData = NULL;
       s_pBintab->pOptlist->pvNext = NULL;*/
   
  -    memset(s_szOptuples, NULL, sizeof(s_szOptuples));
  +    memset(m_szOptuples, NULL, sizeof(m_szOptuples));
   
  -TRACE("cliopt constructed.");
  +TRACE("cliopt constructed.\n");
       return(RC_THROW(RC_OK));
   }
   
  @@ -106,16 +67,10 @@
   ***************************************/
   const char *clioptGetval(rc_opt_t Optname)
   {
  -    ex_t Except;
  +    if (!(Optname < RC_NUMOPTS))    /* Validate option range    */
  +        RC_THROW(RC_ERR_USE);
   
  -    assert(Optname < RC_NUMOPTS);   /* Invalidate if nonexistent option */
  -    ex_try {
  -        return((const char *)s_szOptuples[Optname]);
  -    }
  -    ex_catch(Except) {
  -        rethrow;
  -    }
  -    return (NULL);  /* Not reached  */
  +    return((const char *)m_szOptuples[Optname]);
   }
   
   /***************************************
  @@ -136,95 +91,95 @@
   rc_return_t clioptProcess(int cliOption)
   {
       switch (cliOption) {
  -    case RC_USE_VAL:
  -        s_szOptuples[cliOption] = strdup("1");
  -        break;
  -    case RC_DBG_VAL:
  -        s_szOptuples[cliOption] = strdup("1");
  -        break;
  -    case RC_VER_VAL:
  -        s_szOptuples[cliOption] = strdup("1");
  -        break;
  -    case RC_EVL_VAL:
  -        s_szOptuples[cliOption] = strdup("1");
  -        break;
  -    case RC_HLP_VAL:
  -        s_szOptuples[cliOption] = strdup("1");
  -        break;
  -    case RC_INF_VAL:
  -        s_szOptuples[cliOption] = strdup("1");
  -        break;
  -    case RC_LBL_VAL:
  -        s_szOptuples[cliOption] = strdup("1");
  -        break;
  -    case RC_PRN_VAL:
  -        s_szOptuples[cliOption] = strdup("1");
  -        break;
  -    case RC_SIL_VAL:
  -        s_szOptuples[cliOption] = strdup("1");
  -        break;
  -    case RC_RAW_VAL:
  -        s_szOptuples[cliOption] = strdup("1");
  -        break;
  -    case RC_VRB_VAL:
  -        s_szOptuples[cliOption] = strdup("1");
  -        break;
  -    case RC_EXC_VAL:
  -        s_szOptuples[cliOption] = strdup("1");
  -        break;
  -    case RC_LOC_VAL:
  -        s_szOptuples[cliOption] = strdup("1");
  -        break;
  -    case RC_CNF_VAL:
  -        s_szOptuples[cliOption] = strdup("1");
  -        break;
  -    case RC_FNC_VAL:
  -        s_szOptuples[cliOption] = strdup("1");
  -        break;
  -    case RC_QRY_VAL:
  -        s_szOptuples[cliOption] = strdup("1");
  -        break;
  -    case RC_TMP_VAL:
  -        s_szOptuples[cliOption] = strdup("1");
  -        break;
  -    case RC_OWN_VAL:
  -        s_szOptuples[cliOption] = strdup("1");
  -        break;
  -    case RC_GRP_VAL:
  -        s_szOptuples[cliOption] = strdup("1");
  -        break;
  -    case RC_MSK_VAL:
  -        s_szOptuples[cliOption] = strdup("1");
  -        break;
  -    case RC_ASS_VAL:
  -        s_szOptuples[cliOption] = strdup("1");
  -        break;
  -    case RC_DEF_VAL:
  -        s_szOptuples[cliOption] = strdup("1");
  -        break;
  -    case RC_REF_VAL:
  -        s_szOptuples[cliOption] = strdup("1");
  -        break;
  -    case RC_PRM_VAL:
  -        s_szOptuples[cliOption] = strdup("1");
  -        break;
  -    case RC_TRM_VAL:
  -        s_szOptuples[cliOption] = strdup("1");
  -        break;
  -    case RC_NCF_VAL:
  -        s_szOptuples[cliOption] = strdup("1");
  -        break;
  -    case RC_CMN_VAL:
  -        s_szOptuples[cliOption] = strdup("1");
  -        break;
  -    case RC_DFL_VAL:
  -        s_szOptuples[cliOption] = strdup("1");
  -        break;
  -    case RC_ERR_VAL:
  -        s_szOptuples[cliOption] = strdup("1");
  -        break;
  -    default :
  -        break;
  +        case RC_USE_VAL:
  +            m_szOptuples[cliOption] = strdup("1");
  +            break;
  +        case RC_DBG_VAL:
  +            m_szOptuples[cliOption] = strdup("1");
  +            break;
  +        case RC_VER_VAL:
  +            m_szOptuples[cliOption] = strdup("1");
  +            break;
  +        case RC_EVL_VAL:
  +            m_szOptuples[cliOption] = strdup("1");
  +            break;
  +        case RC_HLP_VAL:
  +            m_szOptuples[cliOption] = strdup("1");
  +            break;
  +        case RC_INF_VAL:
  +            m_szOptuples[cliOption] = strdup("1");
  +            break;
  +        case RC_LBL_VAL:
  +            m_szOptuples[cliOption] = strdup("1");
  +            break;
  +        case RC_PRN_VAL:
  +            m_szOptuples[cliOption] = strdup("1");
  +            break;
  +        case RC_SIL_VAL:
  +            m_szOptuples[cliOption] = strdup("1");
  +            break;
  +        case RC_RAW_VAL:
  +            m_szOptuples[cliOption] = strdup("1");
  +            break;
  +        case RC_VRB_VAL:
  +            m_szOptuples[cliOption] = strdup("1");
  +            break;
  +        case RC_EXC_VAL:
  +            m_szOptuples[cliOption] = strdup("1");
  +            break;
  +        case RC_LOC_VAL:
  +            m_szOptuples[cliOption] = strdup("1");
  +            break;
  +        case RC_CNF_VAL:
  +            m_szOptuples[cliOption] = strdup("1");
  +            break;
  +        case RC_FNC_VAL:
  +            m_szOptuples[cliOption] = strdup("1");
  +            break;
  +        case RC_QRY_VAL:
  +            m_szOptuples[cliOption] = strdup("1");
  +            break;
  +        case RC_TMP_VAL:
  +            m_szOptuples[cliOption] = strdup("1");
  +            break;
  +        case RC_OWN_VAL:
  +            m_szOptuples[cliOption] = strdup("1");
  +            break;
  +        case RC_GRP_VAL:
  +            m_szOptuples[cliOption] = strdup("1");
  +            break;
  +        case RC_MSK_VAL:
  +            m_szOptuples[cliOption] = strdup("1");
  +            break;
  +        case RC_ASS_VAL:
  +            m_szOptuples[cliOption] = strdup("1");
  +            break;
  +        case RC_DEF_VAL:
  +            m_szOptuples[cliOption] = strdup("1");
  +            break;
  +        case RC_REF_VAL:
  +            m_szOptuples[cliOption] = strdup("1");
  +            break;
  +        case RC_PRM_VAL:
  +            m_szOptuples[cliOption] = strdup("1");
  +            break;
  +        case RC_TRM_VAL:
  +            m_szOptuples[cliOption] = strdup("1");
  +            break;
  +        case RC_NCF_VAL:
  +            m_szOptuples[cliOption] = strdup("1");
  +            break;
  +        case RC_CMN_VAL:
  +            m_szOptuples[cliOption] = strdup("1");
  +            break;
  +        case RC_DFL_VAL:
  +            m_szOptuples[cliOption] = strdup("1");
  +            break;
  +        case RC_ERR_VAL:
  +            m_szOptuples[cliOption] = strdup("1");
  +            break;
  +        default :
  +            break;
       }
   
       return(RC_THROW(RC_OK));
  @@ -236,6 +191,47 @@
   ***************************************/
   rc_return_t clioptParse(int argc, char *argv[])
   {
  +    static struct popt_option optionsTable[] = {
  +        /* Long options with short keys but no arguments */
  +        { RC_USE_NAME, '?', POPT_ARG_NONE,   0, RC_USE_VAL, RC_USE_DESC, NULL },
  +        { RC_DBG_NAME, 'd', POPT_ARG_NONE,   0, RC_DBG_VAL, RC_DBG_DESC, NULL },
  +        { RC_VER_NAME, 'V', POPT_ARG_NONE,   0, RC_VER_VAL, RC_VER_DESC, NULL },
  +        { RC_EVL_NAME, 'e', POPT_ARG_NONE,   0, RC_EVL_VAL, RC_EVL_DESC, NULL },
  +        { RC_HLP_NAME, 'h', POPT_ARG_NONE,   0, RC_HLP_VAL, RC_HLP_DESC, NULL },
  +        { RC_INF_NAME, 'i', POPT_ARG_NONE,   0, RC_INF_VAL, RC_INF_DESC, NULL },
  +        { RC_LBL_NAME, 'l', POPT_ARG_NONE,   0, RC_LBL_VAL, RC_LBL_DESC, NULL },
  +        { RC_PRN_NAME, 'p', POPT_ARG_NONE,   0, RC_PRN_VAL, RC_PRN_DESC, NULL },
  +        { RC_SIL_NAME, 's', POPT_ARG_NONE,   0, RC_SIL_VAL, RC_SIL_DESC, NULL },
  +        { RC_RAW_NAME, 'r', POPT_ARG_NONE,   0, RC_RAW_VAL, RC_RAW_DESC, NULL },
  +        { RC_VRB_NAME, 'v', POPT_ARG_NONE,   0, RC_VRB_VAL, RC_VRB_DESC, NULL },
  +        { RC_EXC_NAME, 'x', POPT_ARG_NONE,   0, RC_EXC_VAL, RC_EXC_DESC, NULL },
  +                                              
  +        /* Single argument long options with short keys */
  +        {RC_LOC_NAME, 'L', POPT_ARG_STRING, 0, RC_LOC_VAL, RC_LOC_DESC, "regx"},
  +        {RC_CNF_NAME, 'c', POPT_ARG_STRING, 0, RC_CNF_VAL, RC_CNF_DESC, "path"},
  +        {RC_FNC_NAME, 'f', POPT_ARG_STRING, 0, RC_FNC_VAL, RC_FNC_DESC, "path"},
  +        {RC_QRY_NAME, 'q', POPT_ARG_STRING, 0, RC_QRY_VAL, RC_QRY_DESC, "varx"},
  +        {RC_TMP_NAME, 't', POPT_ARG_STRING, 0, RC_TMP_VAL, RC_TMP_DESC, "path"},
  +
  +        /* Single argument long options without short keys */
  +        { RC_OWN_NAME, 0, POPT_ARG_STRING, 0, RC_OWN_VAL, RC_OWN_DESC, "user" },
  +        { RC_GRP_NAME, 0, POPT_ARG_STRING, 0, RC_GRP_VAL, RC_GRP_DESC, "group"},
  +        { RC_MSK_NAME, 0, POPT_ARG_INT,    0, RC_MSK_VAL, RC_MSK_DESC, "umask"},
  +        { RC_ASS_NAME, 0, POPT_ARG_STRING, 0, RC_ASS_VAL, RC_ASS_DESC, "regx" },
  +        { RC_DEF_NAME, 0, POPT_ARG_STRING, 0, RC_DEF_VAL, RC_DEF_DESC, "regx" },
  +        { RC_REF_NAME, 0, POPT_ARG_STRING, 0, RC_REF_VAL, RC_REF_DESC, "regx" },
  +        { RC_PRM_NAME, 0, POPT_ARG_STRING, 0, RC_PRM_VAL, RC_PRM_DESC, "regx" },
  +        { RC_TRM_NAME, 0, POPT_ARG_STRING, 0, RC_TRM_VAL, RC_TRM_DESC, "regx" },
  +        { RC_NCF_NAME, 0, POPT_ARG_STRING, 0, RC_NCF_VAL, RC_NCF_DESC, "name" },
  +        { RC_CMN_NAME, 0, POPT_ARG_STRING, 0, RC_CMN_VAL, RC_CMN_DESC, "name" },
  +        { RC_DFL_NAME, 0, POPT_ARG_STRING, 0, RC_DFL_VAL, RC_DFL_DESC, "name" },
  +        { RC_ERR_NAME, 0, POPT_ARG_STRING, 0, RC_ERR_VAL, RC_ERR_DESC, "name" },
  +
  +        /* Special stuff    */
  +        POPT_AUTOHELP
  +        { NULL, 0, 0, NULL, 0 }
  +    };
  +
       ex_t Except;
       char cliOpt = 0;            /* For argument parsing           */
       char *szCLIBuf = NULL;
  @@ -304,19 +300,17 @@
           rethrow;
       }*/
   
  -for (i = 0; i < RC_NUMOPTS; i++)
  -    if (s_szOptuples[i])
  -        TRACEL(i);
  -
  -    for (i = 0; i < RC_NUMOPTS; i++)                    /* Free the tuple */
  -        s_szOptuples[i] ? free(s_szOptuples[i]) : RC_NOP; /* or do nothing  */
  +    for (i = 0; i < RC_NUMOPTS; i++)                      /* Free the tuple */
  +        m_szOptuples[i] ? free(m_szOptuples[i]) : RC_NOP; /* or do nothing  */
   
  -    memset(s_szOptuples, NULL, sizeof(s_szOptuples));     /* Clear tuples   */
  +    memset(m_szOptuples, NULL, sizeof(m_szOptuples));     /* Clear tuples   */
   
  +/* FIXME BEGIN DEBUG */
   for (i = 0; i < RC_NUMOPTS; i++)
  -    if (s_szOptuples[i])
  -        TRACE("Problem! Destructor failed!");
  -TRACE("cliopt destructed.");
  +    if (m_szOptuples[i])
  +        TRACE("Problem! Destructor failed!\n");
  +TRACE("cliopt destructed.\n");
  +/* FIXME END DEBUG */
   
       return(RC_THROW(RC_OK));
   }
  Index: ossp-pkg/rc/rc_config.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 rc_config.c
  --- ossp-pkg/rc/rc_config.c	11 Apr 2002 16:52:45 -0000	1.9
  +++ ossp-pkg/rc/rc_config.c	12 Apr 2002 19:15:12 -0000	1.10
  @@ -33,7 +33,7 @@
   #include "rc.h"
   #include "rc_const.h"               /* String constants                 */
   
  -static int s_nLocks = 0;            /* Server locks, not thread-safe FIXME  */
  +static int m_nLocks = 0;            /* Server locks, not thread-safe FIXME  */
   
   
   /***************************************
  @@ -44,7 +44,7 @@
   {
       ex_t Except;
   
  -    if (s_nLocks == 0) {                    /* If we don't have one yet */
  +    if (m_nLocks == 0) {                    /* If we don't have one yet */
           ex_try {                            /* then construct a new one */
               clioptConstruct();              /* Member cliopt instance   */
           }
  @@ -52,21 +52,21 @@
               rethrow;
           }
       }
  -    s_nLocks++;                             /* FIXME not threadsafe     */
  +    m_nLocks++;                             /* FIXME not threadsafe     */
   
       return(RC_THROW(RC_OK));
   }
   
   /***************************************
  -* configGetoptval(rc_opt_t)            *
  +* configGetXXX(rc_opt_t)               *
   * Configuration accessors              *
   ***************************************/
  -const char *configGetoptval(rc_opt_t Optname)
  +const char *configGetval(rc_opt_t Optname)
   {
       ex_t Except;
       char *szTemp = NULL;
   
  -    if (s_nLocks) {                         /* Make sure config exists      */
  +    if (m_nLocks) {                         /* Make sure config exists      */
           ex_try {
               if ((szTemp = (char *)clioptGetval(Optname)))
                   return((const char *)szTemp);
  @@ -87,6 +87,28 @@
       return(NULL);   /* Not reached  */
   }
   
  +const char *configGetname(rc_opt_t Optname)
  +{
  +    static char *s_szOptnametab[] = {
  +        RC_USE_NAME, RC_DBG_NAME, RC_VER_NAME, RC_EVL_NAME,
  +        RC_HLP_NAME, RC_INF_NAME, RC_LBL_NAME, RC_PRN_NAME,
  +        RC_SIL_NAME, RC_RAW_NAME, RC_VRB_NAME, RC_EXC_NAME,
  +        RC_LOC_NAME, RC_CNF_NAME, RC_FNC_NAME, RC_QRY_NAME,
  +        RC_TMP_NAME, RC_OWN_NAME, RC_GRP_NAME, RC_MSK_NAME,
  +        RC_ASS_NAME, RC_DEF_NAME, RC_REF_NAME, RC_PRM_NAME,
  +        RC_TRM_NAME, RC_NCF_NAME, RC_CMN_NAME, RC_DFL_NAME,
  +        RC_ERR_NAME
  +    };
  +
  +    if (m_nLocks) { /* Make sure config exists  */
  +        return((const char *)s_szOptnametab[Optname]);
  +    }
  +    else {
  +        RC_THROW(RC_ERR_USE);
  +    }
  +    return(NULL);   /* Not reached  */
  +}
  +
   /************************************************
   * configLoad(int, char **)                      *
   * Load a configuration                          *
  @@ -97,8 +119,8 @@
   
       ex_try {    /* Parse option groups in order of priority     */
           clioptParse(argc, argv);        /* Command line options */
  -/*        envoptParse(s_nLocks->pOpt);*/    /* Environment options  */
  -/*        cnfoptParse(s_nLocks->pOpt);*/    /* Configfile options   */
  +/*        envoptParse(m_nLocks->pOpt);*/    /* Environment options  */
  +/*        cnfoptParse(m_nLocks->pOpt);*/    /* Configfile options   */
       }
       ex_catch(Except) {
           rethrow;
  @@ -121,7 +143,7 @@
   {
       ex_t Except;
   
  -    if (--s_nLocks == 0) {          /* If m_nLocks is 0, deallocate */
  +    if (--m_nLocks == 0) {          /* If m_nLocks is 0, deallocate */
           ex_try {                    /* FIXME, not thread-safe       */
               clioptDestruct();
           }
  Index: ossp-pkg/rc/rc_private.h
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 rc_private.h
  --- ossp-pkg/rc/rc_private.h	11 Apr 2002 16:52:45 -0000	1.10
  +++ ossp-pkg/rc/rc_private.h	12 Apr 2002 19:15:12 -0000	1.11
  @@ -41,8 +41,8 @@
   #define TRACE(str)  ((void)0)
   #define TRACEL(num) ((void)0)
   #else
  -#define TRACE(str)  fprintf(stderr, "%s:%d: %s\n", __FILE__, __LINE__, str)
  -#define TRACEL(num) fprintf(stderr, "%s:%d: %ld\n", __FILE__, __LINE__, (long int)num)
  +#define TRACE(str)  fprintf(stderr, "%s:%d: %s", __FILE__, __LINE__, str)
  +#define TRACEL(num) fprintf(stderr, "%s:%d: %ld", __FILE__, __LINE__, (long int)num)
   #endif
   
   /* The GUID for OSSP rc */
  Index: ossp-pkg/rc/rc_test.sh
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 rc_test.sh
  --- ossp-pkg/rc/rc_test.sh	11 Apr 2002 16:52:45 -0000	1.7
  +++ ossp-pkg/rc/rc_test.sh	12 Apr 2002 19:15:12 -0000	1.8
  @@ -29,34 +29,43 @@
   
   # Test short options, should fail for false combination usage
   ./rc -dVehilpsrvxLcfqt samba start sleep=2 restart
  +echo "./rc -dVehilpsrvxLcfqt samba start sleep=2 restart"
   
   # Test short options, should succeed
   ./rc -derv -L /sfw/etc/rc.d/rc.%{RCFILE:s/^all$/*/} -c /sfw/etc/rc.conf -f /sfw/etc/rc.func -t /tmp openssh stop sleep=4 start daily minsize=2097152
  +echo; echo "./rc -derv -L /sfw/etc/rc.d/rc.%{RCFILE:s/^all$/*/} -c /sfw/etc/rc.conf -f /sfw/etc/rc.func -t /tmp openssh stop sleep=4 start daily minsize=2097152"
   
   # Test some long options, should fail for false combination usage
   ./rc --verbose --silent uucp stop sleep=6 start
  +echo; echo "./rc --verbose --silent uucp stop sleep=6 start"
   ./rc --query --silent zebra bing bang
  +echo; echo "./rc --query --silent zebra bing bang"
   ./rc --conf /sfw/rc.conf --locate /sfw/etc/rc.d --query what to enter here
  +echo; echo "./rc --conf /sfw/rc.conf --locate /sfw/etc/rc.d --query what to enter here"
   
   # Test minimal set of long options, should succeed
   ./rc --debug --version rsyncd nothing matters but the version
  +echo; echo "./rc --conf /sfw/rc.conf --locate /sfw/etc/rc.d --query what to enter here"
   
   # FIXME these cases are not handled yet by our configuration FIXME #
   #./rc --debug --version
  -#echo
  +#echo; echo "./rc --debug --version"
   #./rc --debug --help
  -#echo
  +#echo; echo "./rc --debug --help"
   #./rc --debug --info --verbose
  -#echo
  +#echo; echo "./rc --debug --info --verbose"
   #./rc --conf /etc/rc.conf --debug --info --raw
  -#echo
  +#echo; echo "./rc --conf /etc/rc.conf --debug --info --raw"
   #./rc --conf /sfw/rc.conf --tmp /sfw/RPM/TMP --debug --labels rsyncd
  -#echo
  +#echo; echo "./rc --conf /sfw/rc.conf --tmp /sfw/RPM/TMP --debug --labels rsyncd"
   # FIXME these cases are not handled yet by our configuration FIXME #
   
   ./rc --func /sfw/etc/rc.func --print --verbose openssh stop sleep=4 start
  +echo; echo "./rc --func /sfw/etc/rc.func --print --verbose openssh stop sleep=4 start"
   ./rc --func /sfw/etc/rc.func --debug --eval uucp restart
  +echo; echo "./rc --func /sfw/etc/rc.func --debug --eval uucp restart"
   ./rc --conf ./myrc --func /sfw/etc/rc.func --tmp /tmp --debug --silent --exec uucp start
  +echo; echo "./rc --conf ./myrc --func /sfw/etc/rc.func --tmp /tmp --debug --silent --exec uucp start"
   
   # Next milestone
   #RequireOwner

From ossp-cvs-owner@ossp.org  Mon Apr 15 11:39:06 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DC2D57635D; Mon, 15 Apr 2002 11:39:05 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea README TODO tabea.cfg tabea.cgi ossp-pkg/ta...
Message-Id: <20020415093905.DC2D57635D@mail.ossp.org>
Date: Mon, 15 Apr 2002 11:39:05 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Apr-2002 11:39:05
  Branch: HEAD                             Handle: 2002041510390401

  Added files:
    ossp-pkg/tabea          README TODO tabea.cfg tabea.cgi tabea.db
                            tabea.html tabea.log tabea.pod tabea.pw
    ossp-pkg/tabea/tabea.d  default sample

  Log:
    initial content for newborn OSSP tabea

  Summary:
    Revision    Changes     Path
    1.1         +3  -0      ossp-pkg/tabea/README
    1.1         +37 -0      ossp-pkg/tabea/TODO
    1.1         +9  -0      ossp-pkg/tabea/tabea.cfg
    1.1         +38 -0      ossp-pkg/tabea/tabea.cgi
    1.1         +3  -0      ossp-pkg/tabea/tabea.d/default
    1.1         +73 -0      ossp-pkg/tabea/tabea.d/sample
    1.1         +2  -0      ossp-pkg/tabea/tabea.db
    1.1         +9  -0      ossp-pkg/tabea/tabea.html
    1.1         +1  -0      ossp-pkg/tabea/tabea.log
    1.1         +52 -0      ossp-pkg/tabea/tabea.pod
    1.1         +1  -0      ossp-pkg/tabea/tabea.pw
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/README
  ============================================================
  $ cvs update -p -r1.1 README
  
    OSSP tabea -- Web Configuration Editor
  
  Index: ossp-pkg/tabea/TODO
  ============================================================
  $ cvs update -p -r1.1 TODO
  
    TODO
    ====
  
    Dialogs:
  
    1:
    +-----------------------------+
    |     Login:    rse           |
    |     Password: ******        |
    |          [LOGIN] -> #2      |
    +-----------------------------+
  
    2:
    +-----------------------------+
    |  Templates (any-protected/any-public):
    |  +-----------------+ 
    |  | default         | [VIEW] -> #3 (read-only)
    |  | test            | [COPY]
    |  +-----------------+
    |  Configurations (own-private/any-public):
    |  +-----------------+ [VIEW] -> #3 (read-only)
    |  | default         | [EDIT] -> #3 (read-write)
    |  | myclient01      | [DELETE]
    |  | myclient01      | [CLONE]
    |  | myclient02      | [USE] -> sudo js_prepare -f ...
    |  +-----------------+ [TYPE] [CHANGE]
    |  [BACK] -> #1  
    +-----------------------------+
  
    3:
    +-----------------------------+
    |  myclient02:
    |  
    |  [BACK] -> #2  
    +-----------------------------+
     
  Index: ossp-pkg/tabea/tabea.cfg
  ============================================================
  $ cvs update -p -r1.1 tabea.cfg
  ##
  ##  tabea.cfg -- Tabea Configuration
  ##
  
  ConfigDirectory  tabea.d
  ConfigDefault    default
  ExecuteCommand   sudo js_prepare -f %{profile}
  PageTemplate     tabea.page.html %%TITLE%% %%BODY%% 
  
  Index: ossp-pkg/tabea/tabea.cgi
  ============================================================
  $ cvs update -p -r1.1 tabea.cgi
  #!/bin/sh -- # -*- perl -*- -p
  eval 'exec perl -wS $0 ${1+"$@"}'
      if $running_under_some_shell;
  ##
  ##  OSSP tabea - Web Configuration Editor
  ##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  ##
  ##  This file is part of OSSP tabea, a web configuration editor
  ##  which can be found at http://www.ossp.org/pkg/tool/tabea/.
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  tabea.cgi: Tabea CGI (syntax: Perl)
  ##
  
  require 5.000;
  
  use IO;
  use CGI;
  use Averist;
  
  Index: ossp-pkg/tabea/tabea.d/default
  ============================================================
  $ cvs update -p -r1.1 default
  
  
  
  Index: ossp-pkg/tabea/tabea.d/sample
  ============================================================
  $ cvs update -p -r1.1 sample
  ##
  ##  js_default.conf -- Default JumpStart Configuration
  ##
  
  #   network parameters during installation
  js_net_hostname              unknown.setup.de.cw.net
  js_net_domainname            setup.de.cw.net
  js_net_ipaddr                192.168.1.2
  js_net_netmask               255.255.255.0
  js_net_defaultrouter         192.168.1.2
  js_net_nameserver            195.27.176.147 194.221.217.148
  
  #   network parameters after installation
  net_hostname                 anyone.as.de.cw.net
  net_domainname               as.de.cw.net
  net_ipaddr                   141.1.24.100
  net_netmask                  255.255.255.0
  net_defaultrouter            141.1.24.1
  net_nameserver               195.27.176.147 194.221.217.148
  
  #   hardware ethernet parameters
  hw_eth_addr                  00:00:00:00:00:00
  hw_eth_speed                 100
  hw_eth_duplex                full
  
  #   hardware disk parameters
  hw_disk_devices              0:c0t0d0 1:c0t1d0
  hw_disk_slices               0+s0:128:/            \
                               0+s1:1024:swap        \
                               0+s2:all:overlap      \
                               0+s3:1024:/var        \
                               0+s4:4096:/usr        \
                               0+s5:16:metadb        \
                               0+s6:2048:/d1         \
                               0+s7:free:/d2         \
                               1+s0:128:mirror 0+s0  \
                               1+s1:1024:mirror 0+s1 \
                               1+s2:all:overlap      \
                               1+s3:1024:mirror 0+s3 \
                               1+s4:4096:mirror 0+s4 \
                               1+s5:16:metadb        \
                               1+s6:2048:mirror 0+s6 \
                               1+s7:free:mirror 0+s7
  
  #   installation parts
  install_solaris_oe           yes
  install_solaris_patches      yes
  install_solaris_disksuite    yes
  install_solaris_encryption   yes
  install_solaris_andirand     yes
  install_solaris_cwdetasks    yes
  install_openpkg              yes
  
  solaris_oe_pkg_inc           SUNWCall
  solaris_oe_pkg_exc           SUNWCdial SUNWCdtrun SUNWCdtusr SUNWCdtdev SUNWCfs \
                               SUNWCgrap SUNWCirf   SUNWCiof   SUNWCkcms  SUNWCpmow \
                               SUNWCxil  SUNWCpm    SUNWCpmx   SUNWCpmow 
  
  openpkg_release              CURRENT
  openpkg_pkg_bin              gcc make
  openpkg_pkg_src              gzip bzip2 tar \
                               bash vim screen shtool \
                               pcre zlib openssl openssh ntp
  
  solaris_oe_service_inc       -
  solaris_oe_service_exc       apache autofs initpcmcia cachefs.rooti perf llc2 pppd \
                               asppp uucp ldapclient autoinstall xntpd nscd slpd lp spc \
                               power bdconfig volmgt chacheos.finish rpc nfs.client \
                               sendmail wbem dtlogin nfs.server dhcp snmpdx dmi mipagent
  
  js_root_pw                   foobar
  js_final_shutdown            reboot
  
  Index: ossp-pkg/tabea/tabea.db
  ============================================================
  $ cvs update -p -r1.1 tabea.db
  default protected tabea  
  js02    public    tabea
  Index: ossp-pkg/tabea/tabea.html
  ============================================================
  $ cvs update -p -r1.1 tabea.html
  <html>
    <head>
      <title>OSSP tabea: %%TITLE%%</title>
    </head>
    <body>
      <h1>OSSP tabea</h1>
      %%BODY%%
    </body>
  </html>
  Index: ossp-pkg/tabea/tabea.log
  ============================================================
  $ cvs update -p -r1.1 tabea.log
  [.....] rse default copy
  Index: ossp-pkg/tabea/tabea.pod
  ============================================================
  $ cvs update -p -r1.1 tabea.pod
  ##
  ##  OSSP tabea - Web Configuration Editor
  ##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  ##
  ##  This file is part of OSSP tabea, a web configuration editor
  ##  which can be found at http://www.ossp.org/pkg/tool/tabea/.
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  tabea.pod: Tabea Unix manual page (syntax: POD)
  ##
  
  =pod
  
  =head1 NAME
  
  B<OSSP tabea> - Web Configuration Editor
  
  =head1 DESCRIPTION
  
  B<OSSP tabea> is...
  
  =head1 CONFIGURATION
  
  class      owner   other
  private:   edit    unvisible       
  protected: edit    visible + copy       
  public:    edit    visible + edit 
  
  F<tabea.cfg>
  
  Config File Syntax
  
  =cut
  
  Index: ossp-pkg/tabea/tabea.pw
  ============================================================
  $ cvs update -p -r1.1 tabea.pw
  tabea:foobar

From ossp-cvs-owner@ossp.org  Mon Apr 15 16:45:24 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E99C97635D; Mon, 15 Apr 2002 16:45:23 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea.cgi
Message-Id: <20020415144523.E99C97635D@mail.ossp.org>
Date: Mon, 15 Apr 2002 16:45:23 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Apr-2002 16:45:23
  Branch: HEAD                             Handle: 2002041515452300

  Modified files:
    ossp-pkg/tabea          tabea.cgi

  Log:
    try another round

  Summary:
    Revision    Changes     Path
    1.2         +2  -2      ossp-pkg/tabea/tabea.cgi
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea.cgi
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 tabea.cgi
  --- ossp-pkg/tabea/tabea.cgi	15 Apr 2002 09:39:04 -0000	1.1
  +++ ossp-pkg/tabea/tabea.cgi	15 Apr 2002 14:45:23 -0000	1.2
  @@ -1,5 +1,5 @@
   #!/bin/sh -- # -*- perl -*- -p
  -eval 'exec perl -wS $0 ${1+"$@"}'
  +eval 'exec perl -S $0 ${1+"$@"}'
       if $running_under_some_shell;
   ##
   ##  OSSP tabea - Web Configuration Editor
  @@ -31,7 +31,7 @@
   ##
   
   require 5.000;
  -
  +use strict;
   use IO;
   use CGI;
   use Averist;

From ossp-cvs-owner@ossp.org  Tue Apr 16 10:37:22 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3BD917635D; Tue, 16 Apr 2002 10:37:22 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea.cgi
Message-Id: <20020416083722.3BD917635D@mail.ossp.org>
Date: Tue, 16 Apr 2002 10:37:22 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   16-Apr-2002 10:37:22
  Branch: HEAD                             Handle: 2002041609372100

  Modified files:
    ossp-pkg/tabea          tabea.cgi

  Log:
    First not working test version

  Summary:
    Revision    Changes     Path
    1.3         +39 -1      ossp-pkg/tabea/tabea.cgi
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea.cgi
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 tabea.cgi
  --- ossp-pkg/tabea/tabea.cgi	15 Apr 2002 14:45:23 -0000	1.2
  +++ ossp-pkg/tabea/tabea.cgi	16 Apr 2002 08:37:21 -0000	1.3
  @@ -34,5 +34,43 @@
   use strict;
   use IO;
   use CGI;
  -use Averist;
  +#use Averist;
   
  +# establish my configuration
  +my $MY = {};
  +$MY->{PROGNAME} = ($0 =~ m|^.*?([^/]+?)(?:\.[^/.]+)?$|)[0];
  +$MY->{HEADER} = '';
  +open(FP, "<".$MY->{PROGNAME}.".head.html");
  +$MY->{HEADER} .= $_ while (<FP>);
  +close(FP);
  +$MY->{FOOTER} = '';
  +open(FP, "<".$MY->{PROGNAME}.".foot.html");
  +$MY->{FOOTER} .= $_ while (<FP>);
  +close(FP);
  +
  +#   establish CGI query object
  +my $Q = new CGI;
  +
  +#print header(),
  +#	start_html('-title' => "Tabea Test",
  +#	           '-bgcolor' => "white"),
  +#	end_html();
  +
  +my $page = '';
  +$page .= $Q->header (-expires => '+1s');
  +$page .= $MY->{HEADER};
  +
  +$page .= $MY->{FOOTER};
  +
  +#$page .= "<table width=100% bgcolor=\"#000000\" cellspacing=0 cellpadding=0>\n";
  +#$page .= "<tr>\n" .
  +#      "<td align=center>\n" .
  +#         "<p>Irgendein Text</p>" .
  +#         "</td>\n" .
  +#          "</tr>\n" .
  +#          "<tr>\n" .
  +#          "<td>\n";
  +
  +print STDOUT $page;
  +
  +exit (0);

From ossp-cvs-owner@ossp.org  Tue Apr 16 10:51:03 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0BF9F7635D; Tue, 16 Apr 2002 10:51:02 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea.cgi
Message-Id: <20020416085102.0BF9F7635D@mail.ossp.org>
Date: Tue, 16 Apr 2002 10:51:02 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Apr-2002 10:51:02
  Branch: HEAD                             Handle: 2002041609510200

  Modified files:
    ossp-pkg/tabea          tabea.cgi

  Log:
    fix (unknown reasons)

  Summary:
    Revision    Changes     Path
    1.4         +11 -31     ossp-pkg/tabea/tabea.cgi
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea.cgi
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 tabea.cgi
  --- ossp-pkg/tabea/tabea.cgi	16 Apr 2002 08:37:21 -0000	1.3
  +++ ossp-pkg/tabea/tabea.cgi	16 Apr 2002 08:51:02 -0000	1.4
  @@ -1,6 +1,4 @@
  -#!/bin/sh -- # -*- perl -*- -p
  -eval 'exec perl -S $0 ${1+"$@"}'
  -    if $running_under_some_shell;
  +#!/cw/bin/perl -w
   ##
   ##  OSSP tabea - Web Configuration Editor
   ##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  @@ -34,43 +32,25 @@
   use strict;
   use IO;
   use CGI;
  -#use Averist;
  +
  +$|++;
   
   # establish my configuration
   my $MY = {};
   $MY->{PROGNAME} = ($0 =~ m|^.*?([^/]+?)(?:\.[^/.]+)?$|)[0];
  -$MY->{HEADER} = '';
  -open(FP, "<".$MY->{PROGNAME}.".head.html");
  -$MY->{HEADER} .= $_ while (<FP>);
  -close(FP);
  -$MY->{FOOTER} = '';
  -open(FP, "<".$MY->{PROGNAME}.".foot.html");
  -$MY->{FOOTER} .= $_ while (<FP>);
  -close(FP);
  +$MY->{TEMPLATE} = '';
  +my $fh = new IO::File ("<".$MY->{PROGNAME}.".html") || die;
  +$MY->{TEMPLATE} .= $_ while (<$fh>);
  +$fh->close();
   
   #   establish CGI query object
   my $Q = new CGI;
   
  -#print header(),
  -#	start_html('-title' => "Tabea Test",
  -#	           '-bgcolor' => "white"),
  -#	end_html();
  -
   my $page = '';
  -$page .= $Q->header (-expires => '+1s');
  -$page .= $MY->{HEADER};
  -
  -$page .= $MY->{FOOTER};
  -
  -#$page .= "<table width=100% bgcolor=\"#000000\" cellspacing=0 cellpadding=0>\n";
  -#$page .= "<tr>\n" .
  -#      "<td align=center>\n" .
  -#         "<p>Irgendein Text</p>" .
  -#         "</td>\n" .
  -#          "</tr>\n" .
  -#          "<tr>\n" .
  -#          "<td>\n";
  +$page .= "fuck";
   
  -print STDOUT $page;
  +my $out = $MY->{TEMPLATE};
  +$out =~ s|%%BODY%%|$page|s;
  +print $Q->header(-expires => '+1s') . $out;
   
   exit (0);

From ossp-cvs-owner@ossp.org  Tue Apr 16 10:51:13 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 00AC776360; Tue, 16 Apr 2002 10:51:12 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea Makefile
Message-Id: <20020416085112.00AC776360@mail.ossp.org>
Date: Tue, 16 Apr 2002 10:51:12 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Apr-2002 10:51:12
  Branch: HEAD                             Handle: 2002041609511200

  Added files:
    ossp-pkg/tabea          Makefile

  Log:
    add Makefile

  Summary:
    Revision    Changes     Path
    1.1         +7  -0      ossp-pkg/tabea/Makefile
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/Makefile
  ============================================================
  $ cvs update -p -r1.1 Makefile
  
  test:
  	GATEWAY_INTERFACE=CGI/1.0; export GATEWAY_INTERFACE;\
  	REQUEST_METHOD=GET; export REQUEST_METHOD;\
  	./tabea.cgi
  
  

From ossp-cvs-owner@ossp.org  Tue Apr 16 14:09:47 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 18E157635D; Tue, 16 Apr 2002 14:09:47 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea.cgi
Message-Id: <20020416120947.18E157635D@mail.ossp.org>
Date: Tue, 16 Apr 2002 14:09:47 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   16-Apr-2002 14:09:47
  Branch: HEAD                             Handle: 2002041613094600

  Modified files:
    ossp-pkg/tabea          tabea.cgi

  Log:
    Appended two textfields

  Summary:
    Revision    Changes     Path
    1.5         +35 -1      ossp-pkg/tabea/tabea.cgi
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea.cgi
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 tabea.cgi
  --- ossp-pkg/tabea/tabea.cgi	16 Apr 2002 08:51:02 -0000	1.4
  +++ ossp-pkg/tabea/tabea.cgi	16 Apr 2002 12:09:46 -0000	1.5
  @@ -1,4 +1,4 @@
  -#!/cw/bin/perl -w
  +#!/usr/opkg/bin/perl -w
   ##
   ##  OSSP tabea - Web Configuration Editor
   ##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  @@ -43,14 +43,48 @@
   $MY->{TEMPLATE} .= $_ while (<$fh>);
   $fh->close();
   
  +
   #   establish CGI query object
   my $Q = new CGI;
   
   my $page = '';
   $page .= "fuck";
  +my $page2 ='';
  +$page2 .= "Welcher auch";
   
   my $out = $MY->{TEMPLATE};
   $out =~ s|%%BODY%%|$page|s;
  +$out =~ s|%%TITLE%%|$page2|s;
  +
  +
  +
  + #   generate "ADD" form
  + $out .= $Q->startform( -method => "POST", -action => $Q->url()) .
  +          "<tr bgcolor=\"#9999cc\">\n" .
  +#          "<td align=right>" .
  +#          "<b>" . $Q->submit(-name => 'form', -value => 'Add') . "</b>" .
  +#          "</td>" .
  +          "<td>" .
  +          "Username:" .
  +          $Q->textfield(
  +              -name => 'username',
  +              -default => '',
  +              -size => 20,
  +              -maxlength => 80
  +           ) .
  +          "<td>" .
  +          "<p>&#013</p>" .
  +          "</td>" .
  +          "Password:" .
  +          $Q->textfield(
  +              -name => 'password',
  +              -default => '',
  +              -size => 20,
  +              -maxlength => 80
  +           ) .
  +          "</td>" .
  +         $Q->endform;
  +
   print $Q->header(-expires => '+1s') . $out;
   
   exit (0);

From ossp-cvs-owner@ossp.org  Tue Apr 16 21:31:52 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BCBDC7635D; Tue, 16 Apr 2002 21:31:52 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/var index.wml
Message-Id: <20020416193152.BCBDC7635D@mail.ossp.org>
Date: Tue, 16 Apr 2002 21:31:52 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   16-Apr-2002 21:31:52
  Branch: HEAD                             Handle: 2002041620315200

  Modified files:
    ossp-web/pkg/lib/var    index.wml

  Log:
    add hint to Peter Simons' libvarexp

  Summary:
    Revision    Changes     Path
    1.4         +13 -1      ossp-web/pkg/lib/var/index.wml
  ____________________________________________________________________________

  Index: ossp-web/pkg/lib/var/index.wml
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 index.wml
  --- ossp-web/pkg/lib/var/index.wml	8 Mar 2002 17:06:36 -0000	1.3
  +++ ossp-web/pkg/lib/var/index.wml	16 Apr 2002 19:31:52 -0000	1.4
  @@ -25,6 +25,18 @@
   lookup is performed through a callback function, so OSSP var can expand
   arbitrary values.
   
  +<p>
  +<blockquote>
  +<font size=-1>
  +Hint: There is also an ISO C++ derivative of the OSSP var library, named
  +<a href="http://cryp.to/libvarexp/">libvarexp</a>. It is based on
  +a development version of OSSP var and hence does not provide exactly
  +the same amount of functionality. But it provides an ISO C++ API and so
  +can be of interest to you if you are programming in ISO C++ (where OSSP
  +var's ISO C API might be too boring for you).
  +</font>
  +</blockquote>
  +
   <h2>Authors</h2>
   
   <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  @@ -44,4 +56,4 @@
       directory=$(FTP_ROOT_DIR)/pkg/lib/var/
       files="var-*.tar.gz" 
   	stable="none" unstable="var-0.9.0.tar.gz">
  -	
  +

From ossp-cvs-owner@ossp.org  Thu Apr 18 11:10:50 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 978C976365; Thu, 18 Apr 2002 11:10:50 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tai ChangeLog Makefile.in TODO aclocal.m4 configu...
Message-Id: <20020418091050.978C976365@mail.ossp.org>
Date: Thu, 18 Apr 2002 11:10:50 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Apr-2002 11:10:50
  Branch: VENDOR                           Handle: 2002041810104502

  Added files:              (Branch: VENDOR)
    ossp-pkg/tai            ChangeLog Makefile.in TODO aclocal.m4 configure.ac
                            devtool devtool.conf devtool.func tai-config.in
                            tai.ac tai.h tai.pod tai_data.c tai_format.c
                            tai_lib.c tai_p.h tai_parse.c tai_test.c ts.c ts.h

  Log:
    Import first cut for OSSP tai
    
    [Release Tag: TAI_0_0_0]

  Summary:
    Revision    Changes     Path
    1.1.1.1     +4  -0      ossp-pkg/tai/ChangeLog
    1.1.1.1     +112 -0     ossp-pkg/tai/Makefile.in
    1.1.1.1     +4  -0      ossp-pkg/tai/TODO
    1.1.1.1     +228 -0     ossp-pkg/tai/aclocal.m4
    1.1.1.1     +54 -0      ossp-pkg/tai/configure.ac
    1.1.1.1     +47 -0      ossp-pkg/tai/devtool
    1.1.1.1     +51 -0      ossp-pkg/tai/devtool.conf
    1.1.1.1     +73 -0      ossp-pkg/tai/devtool.func
    1.1.1.1     +145 -0     ossp-pkg/tai/tai-config.in
    1.1.1.1     +39 -0      ossp-pkg/tai/tai.ac
    1.1.1.1     +113 -0     ossp-pkg/tai/tai.h
    1.1.1.1     +26 -0      ossp-pkg/tai/tai.pod
    1.1.1.1     +98 -0      ossp-pkg/tai/tai_data.c
    1.1.1.1     +454 -0     ossp-pkg/tai/tai_format.c
    1.1.1.1     +252 -0     ossp-pkg/tai/tai_lib.c
    1.1.1.1     +63 -0      ossp-pkg/tai/tai_p.h
    1.1.1.1     +543 -0     ossp-pkg/tai/tai_parse.c
    1.1.1.1     +138 -0     ossp-pkg/tai/tai_test.c
    1.1.1.1     +468 -0     ossp-pkg/tai/ts.c
    1.1.1.1     +64 -0      ossp-pkg/tai/ts.h
  ____________________________________________________________________________

  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/tai/ChangeLog?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/tai/Makefile.in?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/tai/TODO?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/tai/aclocal.m4?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/tai/configure.ac?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/tai/devtool?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/tai/devtool.conf?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/tai/devtool.func?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/tai/tai-config.in?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/tai/tai.ac?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/tai/tai.h?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/tai/tai.pod?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/tai/tai_data.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/tai/tai_format.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/tai/tai_lib.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/tai/tai_p.h?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/tai/tai_parse.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/tai/tai_test.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/tai/ts.c?cvsroot=ossp&r1=NONE&r2=1.1.1.1
  http://cvs.ossp.org/cvsweb.cgi/ossp-pkg/tai/ts.h?cvsroot=ossp&r1=NONE&r2=1.1.1.1

From ossp-cvs-owner@ossp.org  Thu Apr 18 11:10:51 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5FEFA76360; Thu, 18 Apr 2002 11:10:50 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tai ChangeLog Makefile.in TODO aclocal.m4 configu...
Message-Id: <20020418091050.5FEFA76360@mail.ossp.org>
Date: Thu, 18 Apr 2002 11:10:50 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Apr-2002 11:10:50
  Branch: VENDOR                           Handle: 2002041810104502

  Added files:              (Branch: VENDOR)
    ossp-pkg/tai            ChangeLog Makefile.in TODO aclocal.m4 configure.ac
                            devtool devtool.conf devtool.func tai-config.in
                            tai.ac tai.h tai.pod tai_data.c tai_format.c
                            tai_lib.c tai_p.h tai_parse.c tai_test.c ts.c ts.h

  Log:
    Import first cut for OSSP tai
    
    [Release Tag: TAI_0_0_0]

  Summary:
    Revision    Changes     Path
    1.1.1.1     +4  -0      ossp-pkg/tai/ChangeLog
    1.1.1.1     +112 -0     ossp-pkg/tai/Makefile.in
    1.1.1.1     +4  -0      ossp-pkg/tai/TODO
    1.1.1.1     +228 -0     ossp-pkg/tai/aclocal.m4
    1.1.1.1     +54 -0      ossp-pkg/tai/configure.ac
    1.1.1.1     +47 -0      ossp-pkg/tai/devtool
    1.1.1.1     +51 -0      ossp-pkg/tai/devtool.conf
    1.1.1.1     +73 -0      ossp-pkg/tai/devtool.func
    1.1.1.1     +145 -0     ossp-pkg/tai/tai-config.in
    1.1.1.1     +39 -0      ossp-pkg/tai/tai.ac
    1.1.1.1     +113 -0     ossp-pkg/tai/tai.h
    1.1.1.1     +26 -0      ossp-pkg/tai/tai.pod
    1.1.1.1     +98 -0      ossp-pkg/tai/tai_data.c
    1.1.1.1     +454 -0     ossp-pkg/tai/tai_format.c
    1.1.1.1     +252 -0     ossp-pkg/tai/tai_lib.c
    1.1.1.1     +63 -0      ossp-pkg/tai/tai_p.h
    1.1.1.1     +543 -0     ossp-pkg/tai/tai_parse.c
    1.1.1.1     +138 -0     ossp-pkg/tai/tai_test.c
    1.1.1.1     +468 -0     ossp-pkg/tai/ts.c
    1.1.1.1     +64 -0      ossp-pkg/tai/ts.h
  ____________________________________________________________________________

  Index: ossp-pkg/tai/ChangeLog
  ============================================================
  $ cvs update -p -r1.1.1.1 ChangeLog
  
    o Taken FreeBSD-CURRENT's strftime.c/strptime.c as of 17-Apr-2002 and created 
      tai_format.c out of strftime.c and tai_parse.c out of strptime.c
     
  Index: ossp-pkg/tai/Makefile.in
  ============================================================
  $ cvs update -p -r1.1.1.1 Makefile.in
  ##
  ##  OSSP tai - Time Handling
  ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  ##
  ##  This file is part of OSSP tai, a time handling library
  ##  which can be found at http://www.ossp.org/pkg/lib/tai/.
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  Makefile.in: make(1) build procedure
  ##
  
  @SET_MAKE@
  
  DESTDIR     =
  prefix      = @prefix@
  exec_prefix = @exec_prefix@
  bindir      = @bindir@
  libdir      = @libdir@
  includedir  = @includedir@
  mandir      = @mandir@
  
  CC          = @CC@
  CPPFLAGS    = @CPPFLAGS@
  CFLAGS      = @DEFS@ @CFLAGS@
  LDFLAGS     = @LDFLAGS@
  LIBS        = @LIBS@
  RM          = rm -f
  RMDIR       = rmdir
  SHTOOL      = ./shtool
  LIBTOOL     = ./libtool
  TRUE        = true
  
  LIB_NAME    = libtai.la
  LIB_OBJS    = tai_lib.lo tai_format.lo tai_parse.lo tai_data.lo
  
  TST_NAME    = tai_test
  TST_OBJS    = tai_test.o ts.o
  
  .SUFFIXES:
  .SUFFIXES: .c .o .lo
  
  all: $(LIB_NAME) $(TST_NAME)
  
  .c.o:
  	$(CC) $(CPPFLAGS) $(CFLAGS) -c $<
  
  .c.lo:
  	@$(LIBTOOL) --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS) -c $<
  
  $(LIB_NAME): $(LIB_OBJS)
  	@$(LIBTOOL) --mode=link $(CC) -o $(LIB_NAME) $(LIB_OBJS) -rpath $(libdir) \
  	    -version-info `$(SHTOOL) version -l txt -d libtool VERSION`
  
  $(TST_NAME): $(TST_OBJS) $(LIB_NAME)
  	@$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $(TST_NAME) $(TST_OBJS) $(LIB_NAME) $(LIBS)
  
  check: $(TST_NAME)
  	@$(LIBTOOL) --mode=execute ./$(TST_NAME)
  
  install:
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(includedir)
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libdir)
  	$(SHTOOL) install -c -m 755 tai-config $(DESTDIR)$(bindir)/
  	$(SHTOOL) install -c -m 644 tai.h $(DESTDIR)$(includedir)/
  	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libtai.la $(DESTDIR)$(libdir)/
  
  uninstall:
  	@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libtai.la
  	-$(RM) $(DESTDIR)$(includedir)/tai.h
  	-$(RM) $(DESTDIR)$(bindir)/tai-config
  	-$(RMDIR) $(DESTDIR)$(libdir) >/dev/null 2>&1 || $(TRUE)
  	-$(RMDIR) $(DESTDIR)$(includedir) >/dev/null 2>&1 || $(TRUE)
  	-$(RMDIR) $(DESTDIR)$(bindir) >/dev/null 2>&1 || $(TRUE)
  	-$(RMDIR) $(DESTDIR)$(prefix) >/dev/null 2>&1 || $(TRUE)
  
  clean:
  	-$(RM) $(LIB_NAME) $(LIB_OBJS)
  	-$(RM) $(TST_NAME) $(TST_OBJS)
  	-$(RM) -r .libs >/dev/null 2>&1 || $(TRUE)
  	-$(RM) *.o *.lo
  
  distclean: clean
  	-$(RM) config.log config.status config.cache
  	-$(RM) Makefile config.h tai-config
  	-$(RM) libtool
  
  realclean: distclean
  	-$(RM) configure config.h.in
  	-$(RM) shtool
  	-$(RM) ltmain.sh libtool.m4 config.guess config.sub
  
  Index: ossp-pkg/tai/TODO
  ============================================================
  $ cvs update -p -r1.1.1.1 TODO
  
  - tm_parse(buf,fmt,tm) -> tm_parse(buf,buflen,fmt,tm)
  - add exception support
  
  Index: ossp-pkg/tai/aclocal.m4
  ============================================================
  $ cvs update -p -r1.1.1.1 aclocal.m4
  dnl ##
  dnl ##  OSSP tai - Time Handling
  dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  dnl ##
  dnl ##  This file is part of OSSP tai, a time handling library
  dnl ##  which can be found at http://www.ossp.org/pkg/lib/tai/.
  dnl ##
  dnl ##  Permission to use, copy, modify, and distribute this software for
  dnl ##  any purpose with or without fee is hereby granted, provided that
  dnl ##  the above copyright notice and this permission notice appear in all
  dnl ##  copies.
  dnl ##
  dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  dnl ##  SUCH DAMAGE.
  dnl ##
  dnl ##  aclocal.m4: GNU Autoconf local macro definitions
  dnl ##
  
  dnl ##
  dnl ##  Check whether compiler option works
  dnl ##
  dnl ##  configure.in:
  dnl ##    AC_COMPILER_OPTION(<name>, <display>, <option>,
  dnl ##                       <action-success>, <action-failure>)
  dnl ##
  
  AC_DEFUN(AC_COMPILER_OPTION,[dnl
  AC_MSG_CHECKING(whether compiler option(s) $2 work)
  AC_CACHE_VAL(ac_cv_compiler_option_$1,[
  SAVE_CFLAGS="$CFLAGS"
  CFLAGS="$CFLAGS $3"
  AC_TRY_COMPILE([],[], ac_cv_compiler_option_$1=yes, ac_cv_compiler_option_$1=no)
  CFLAGS="$SAVE_CFLAGS"
  ])dnl
  if test ".$ac_cv_compiler_option_$1" = .yes; then
      ifelse([$4], , :, [$4])
  else
      ifelse([$5], , :, [$5])
  fi
  AC_MSG_RESULT([$ac_cv_compiler_option_$1])
  ])dnl
  
  dnl ##
  dnl ##  Debugging Support
  dnl ##
  dnl ##  configure.in:
  dnl ##    AC_CHECK_DEBUGGING
  dnl ##
  
  AC_DEFUN(AC_CHECK_DEBUGGING,[dnl
  AC_ARG_ENABLE(debug,dnl
  [  --enable-debug          build for debugging (default=no)],
  [dnl
  if test ".$ac_cv_prog_gcc" = ".yes"; then
      case "$CFLAGS" in
          *-O* ) ;;
             * ) CFLAGS="$CFLAGS -O2" ;;
      esac
      case "$CFLAGS" in
          *-g* ) ;;
             * ) CFLAGS="$CFLAGS -g" ;;
      esac
      case "$CFLAGS" in
          *-pipe* ) ;;
                * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
      esac
      AC_COMPILER_OPTION(defdbg, -DDEBUG, -DDEBUG, CFLAGS="$CFLAGS -DDEBUG")
      CFLAGS="$CFLAGS -pedantic"
      CFLAGS="$CFLAGS -Wall"
      WMORE="-Wshadow -Wpointer-arith -Wcast-align -Winline"
      WMORE="$WMORE -Wmissing-prototypes -Wmissing-declarations -Wnested-externs"
      AC_COMPILER_OPTION(wmore, -W<xxx>, $WMORE, CFLAGS="$CFLAGS $WMORE")
      AC_COMPILER_OPTION(wnolonglong, -Wno-long-long, -Wno-long-long, CFLAGS="$CFLAGS -Wno-long-long")
  else
      case "$CFLAGS" in
          *-g* ) ;;
             * ) CFLAGS="$CFLAGS -g" ;;
      esac
  fi
  msg="enabled"
  ],[
  if test ".$ac_cv_prog_gcc" = ".yes"; then
  case "$CFLAGS" in
      *-pipe* ) ;;
            * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
  esac
  fi
  case "$CFLAGS" in
      *-g* ) CFLAGS=`echo "$CFLAGS" |\
                     sed -e 's/ -g / /g' -e 's/ -g$//' -e 's/^-g //g' -e 's/^-g$//'` ;;
  esac
  case "$CXXFLAGS" in
      *-g* ) CXXFLAGS=`echo "$CXXFLAGS" |\
                       sed -e 's/ -g / /g' -e 's/ -g$//' -e 's/^-g //g' -e 's/^-g$//'` ;;
  esac
  msg=disabled
  ])dnl
  AC_MSG_CHECKING(for compilation debug mode)
  AC_MSG_RESULT([$msg])
  if test ".$msg" = .enabled; then
      enable_shared=no
  fi
  ])
  
  dnl ##
  dnl ##  Check for an external/extension library.
  dnl ##  - is aware of <libname>-config style scripts
  dnl ##  - searches under standard paths include, lib, etc.
  dnl ##  - searches under subareas like .libs, etc.
  dnl ##
  dnl ##  configure.in:
  dnl ##      AC_CHECK_EXTLIB(<realname>, <libname>, <func>, <header>,
  dnl ##                      [<success-action> [, <fail-action>]])
  dnl ##  Makefile.in:
  dnl ##      CFLAGS  = @CFLAGS@
  dnl ##      LDFLAGS = @LDFLAGS@
  dnl ##      LIBS    = @LIBS@
  dnl ##  shell:
  dnl ##      $ ./configure --with-<libname>[=DIR]
  dnl ##
  
  AC_DEFUN(AC_CHECK_EXTLIB,[dnl
  AC_ARG_WITH($2, [dnl
  [  --with-]m4_substr([$2[[=DIR]]                     ], 0, 19)[build with external $1 library (default=no)]], [dnl
      if test ".$with_$2" = .yes; then
          #   via config script in PATH
          $2_version=`($2-config --version) 2>/dev/null`
          if test ".$$2_version" != .; then
              CPPFLAGS="$CPPFLAGS `$2-config --cflags`"
              CFLAGS="$CFLAGS `$2-config --cflags`"
              LDFLAGS="$LDFLAGS `$2-config --ldflags`"
          fi
      else
          if test -d "$with_$2"; then
              found=0
              #   via config script
              for dir in $with_$2/bin $with_$2; do
                  if test -f "$dir/$2-config" && test ! -f "$dir/$2-config.in"; then
                      $2_version=`($dir/$2-config --version) 2>/dev/null`
                      if test ".$$2_version" != .; then
                          CPPFLAGS="$CPPFLAGS `$dir/$2-config --cflags`"
                          CFLAGS="$CFLAGS `$dir/$2-config --cflags`"
                          LDFLAGS="$LDFLAGS `$dir/$2-config --ldflags`"
                          found=1
                          break
                      fi
                  fi
              done
              #   in standard sub-areas
              if test ".$found" = .0; then
                  for dir in $with_$2/include/$2 $with_$2/include $with_$2; do
                      if test -f "$dir/$4"; then
                          CPPFLAGS="$CPPFLAGS -I$dir"
                          CFLAGS="$CFLAGS -I$dir"
                          found=1
                          break
                      fi
                  done
                  for dir in $with_$2/lib/$2 $with_$2/lib $with_$2; do
                      if test -f "$dir/lib$2.la" && test -d "$dir/.libs"; then
                          LDFLAGS="$LDFLAGS -L$dir -L$dir/.libs"
                          found=1
                          break
                      elif test -f "$dir/lib$2.a" || test -f "$dir/lib$2.so"; then
                          LDFLAGS="$LDFLAGS -L$dir"
                          found=1
                          break
                      fi
                  done
              fi
              #   in any sub-area
              if test ".$found" = .0; then
  changequote(, )dnl
                  for file in x `find $with_$2 -name "$4" -type f -print`; do
                      test .$file = .x && continue
                      dir=`echo $file | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;'`
                      CPPFLAGS="$CPPFLAGS -I$dir"
                      CFLAGS="$CFLAGS -I$dir"
                  done
                  for file in x `find $with_$2 -name "lib$2.[aso]" -type f -print`; do
                      test .$file = .x && continue
                      dir=`echo $file | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;'`
                      LDFLAGS="$LDFLAGS -L$dir"
                  done
  changequote([, ])dnl
              fi
          fi
      fi
      AC_HAVE_HEADERS($4)
      AC_CHECK_LIB($2, $3)
      with_$2=yes
      ac_var="ac_cv_header_`echo $4 | sed 'y%./+-%__p_%'`"
      eval "ac_val=\$$ac_var"
      if test ".$ac_val" != .yes; then
          with_$2=no
      fi
      if test ".$ac_cv_lib_$2_$3" != .yes; then
          with_$2=no
      fi
      if test ".$with_$2" = .no; then
          AC_ERROR([Unable to find $1 library])
      fi
      ], [dnl
  if test ".$with_$2" = .; then
      with_$2=no
  fi
      ])dnl
  AC_MSG_CHECKING(whether to build against external $1 library)
  if test ".$with_$2" = .yes; then
      ifelse([$5], , :, [$5])
  else
      ifelse([$6], , :, [$6])
  fi
  AC_MSG_RESULT([$with_$2])
  ])dnl
  
  Index: ossp-pkg/tai/configure.ac
  ============================================================
  $ cvs update -p -r1.1.1.1 configure.ac
  dnl ##
  dnl ##  OSSP tai - Time Handling
  dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  dnl ##
  dnl ##  This file is part of OSSP tai, a time handling library
  dnl ##  which can be found at http://www.ossp.org/pkg/lib/tai/.
  dnl ##
  dnl ##  Permission to use, copy, modify, and distribute this software for
  dnl ##  any purpose with or without fee is hereby granted, provided that
  dnl ##  the above copyright notice and this permission notice appear in all
  dnl ##  copies.
  dnl ##
  dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  dnl ##  SUCH DAMAGE.
  dnl ##
  dnl ##  configure.ac: GNU Autoconf source script
  dnl ##
  
  AC_PREREQ(2.53)
  AC_INIT
  TM_VERSION_STR=`./shtool version -l txt -d long VERSION`
  ./shtool echo -e "Configuring %BOSSP tai%b (Time Handling), version %B${TM_VERSION_STR}%b"
  AC_SUBST(SA_VERSION_STR)
  
  AC_PROG_MAKE_SET
  AC_PROG_CC
  AC_CHECK_DEBUGGING
  
  sinclude(libtool.m4)
  AC_PROG_LIBTOOL
  
  sinclude(tai.ac)
  TAI_CHECK_ALL
  
  AC_CHECK_EXTLIB([OSSP ex], ex, __ex_ctx, ex.h,
                  [AC_DEFINE(WITH_EX, 1, [Define to 1 if building with OSSP ex])])
  
  AC_CONFIG_HEADERS(config.h)
  AC_CONFIG_FILES([Makefile tai-config])
  AC_CONFIG_COMMANDS([adjustment], [chmod a+x tai-config])
  AC_OUTPUT
  
  Index: ossp-pkg/tai/devtool
  ============================================================
  $ cvs update -p -r1.1.1.1 devtool
  #!/bin/sh
  ##
  ##  devtool -- Development Tool
  ##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  if [ $# -eq 0 ]; then
      echo "devtool:USAGE: devtool <command> [<arg> ...]" 1>&2
      exit 1
  fi
  
  cmd="$1"
  shift
  
  devtoolfunc="./devtool.func"
  
  if [ ! -f devtool.conf ]; then
      echo "devtool:ERROR: no devtool.conf in current directory" 1>&2
      exit 1
  fi
  
  cmdline=`grep "^%$cmd" devtool.conf`
  if [ ".$cmdline" = . ]; then
      echo "devtool:ERROR: command $cmd not found in devtool.conf" 1>&2
      exit 1
  fi
  
  if [ ".$TMPDIR" != . ]; then
      tmpdir="$TMPDIR"
  elif [ ".$TEMPDIR" != . ]; then
      tmpdir="$TEMPDIR"
  else
      tmpdir="/tmp"
  fi
  tmpfile="$tmpdir/rc.$$.tmp"
  
  rm -f $tmpfile
  touch $tmpfile
  echo ". $devtoolfunc" >>$tmpfile
  ( sed <devtool.conf -e "1,/^%common/d" -e '/^%.*/,$d'
    sed <devtool.conf -e "1,/^%$cmd/d" -e '/^%.*/,$d' ) |\
  sed -e 's;\([ 	]\)@\([a-zA-Z_][a-zA-Z0-9_]*\);\1devtool_\2;' >>$tmpfile
  
  sh $tmpfile "$@"
  
  rm -f $tmpfile >/dev/null 2>&1 || true
  
  Index: ossp-pkg/tai/devtool.conf
  ============================================================
  $ cvs update -p -r1.1.1.1 devtool.conf
  ##
  ##  devtool.conf -- Development Tool Configuration
  ##
  
  %autogen
      @autogen shtool   1.6.0 "1.6.*" all
      @autogen libtool  1.4.2 "1.4*"
      @autogen autoconf 2.53  "2.5[3-9]*"
  
  %autoclean
      @autoclean shtool
      @autoclean libtool
      @autoclean autoconf
  
  %configure
      ./configure \
          --prefix=/tmp/tai \
          --disable-shared \
          --enable-debug \
          "$@"
  
  %version
      ./shtool version -l txt -n "OSSP tai" -e VERSION
      V=`./shtool version -l txt -d long VERSION`
      sed -e "s/Version .*(.*)/Version $V/g" <README >README.n 
      mv README.n README
  
  %dist
      echo "+++ generating"
      ./devtool autoclean
      ./devtool autogen
      echo "+++ configuring"
      ./configure
      echo "+++ building"
      make clean all man
      echo "+++ cleaning"
      make distclean
      echo "+++ fixing"
      ./shtool fixperm -v .
      echo "+++ rolling"
      V=`./shtool version -l txt -d short VERSION`
      ./shtool tarball -o tai-${V}.tar.gz -d tai-${V} -u ossp -g ossp \
                       -e 'CVS,\.cvsignore,\.[ao],^\.,devtool*,*.tar.gz' -c 'gzip --best' .
      ls -l tai-${V}.tar.gz
      echo "+++ testing"
      gunzip <tai-${V}.tar.gz | tar tvf -
  
  %release
      echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/tai/"
      scp tai-*.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/tai/
  
  Index: ossp-pkg/tai/devtool.func
  ============================================================
  $ cvs update -p -r1.1.1.1 devtool.func
  ##
  ##  devtool.func -- Development Tool Functions
  ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  devtool_require () {
      t="$1"; o="$2"; p="$3"; e="$4"; a="$5"
      v=`($t $o | head -1 | awk "{ print \\\$$p; }") 2>/dev/null`
      if [ ".$v" = . ]; then
          echo "devtool:ERROR: unable to determine version of $t" 1>&2
          exit 1
      fi
      case "$v" in
          $e )
              ;;
          $a )
              echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
              ;;
          * )
              echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
              exit 1
              ;;
      esac
      echo "$v"
  }
  
  devtool_autogen () {
      tool=$1
      shift
      case $tool in
          autoconf )
              autoconf_version=`devtool_require autoconf --version 4 "$1" "$2"`
              echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
              autoconf
              autoheader 2>&1 | grep -v "is unchanged"
              rm -rf autom4te.cache >/dev/null 2>&1
              ;;
          libtool )
              libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
              echo "generating (GNU Libtool $libtoolize_version): ltmain.sh, libtool.m4, config.guess, config.sub"
              libtoolize --force --copy >/dev/null 2>&1
              cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
                  sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` libtool.m4
              ;;
          shtool )
              shtoolize_version=`devtool_require shtoolize -v 3 "$1" "$2"`
              echo "generating (GNU Shtool $shtoolize_version): shtool"
              shift
              shift
              shtoolize -q "$@"
              ;;
      esac
  }
  
  devtool_autoclean () {
      tool=$1
      shift
      case $tool in
          autoconf )
              echo "removing: configure config.h.in"
              rm -f configure config.h.in
              ;;
          libtool )
              echo "removing: ltmain.sh libtool.m4 config.guess config.sub"
              rm -f ltmain.sh libtool.m4 config.guess config.sub
              ;;
          shtool )
              echo "removing: shtool"
              rm -f shtool
              ;;
      esac
  }
  
  Index: ossp-pkg/tai/tai-config.in
  ============================================================
  $ cvs update -p -r1.1.1.1 tai-config.in
  #!/bin/sh
  ##
  ##  OSSP tai - Time Handling
  ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  ##
  ##  This file is part of OSSP tai, a time handling library
  ##  which can be found at http://www.ossp.org/pkg/lib/tai/.
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  tm-config.in: OSSP tm build utility
  ##
  
  DIFS=' 	
  '
  
  prefix="@prefix@"
  exec_prefix="@exec_prefix@"
  
  tai_prefix="$prefix"
  tai_exec_prefix="$exec_prefix"
  tai_bindir="@bindir@"
  tai_libdir="@libdir@"
  tai_includedir="@includedir@"
  tai_mandir="@mandir@"
  tai_datadir="@datadir@"
  tai_acdir="@datadir@/aclocal"
  tai_cflags="@CFLAGS@"
  tai_ldflags="@LDFLAGS@"
  tai_libs="@LIBS@"
  tai_version="@TM_VERSION_STR@"
  
  help=no
  version=no
  
  usage="tm-config"
  usage="$usage [--help] [--version] [--all]"
  usage="$usage [--prefix] [--exec-prefix] [--bindir] [--libdir] [--includedir] [--mandir] [--datadir] [--acdir]"
  usage="$usage [--cflags] [--ldflags] [--libs]"
  if [ $# -eq 0 ]; then
      echo "tm-config:Error: Invalid option" 1>&2
      echo "tm-config:Usage: $usage" 1>&2
      exit 1
  fi
  output=''
  output_extra=''
  all=no
  prev=''
  OIFS="$IFS" IFS="$DIFS"
  for option
  do
      if [ ".$prev" != . ]; then
          eval "$prev=\$option"
          prev=''
          continue
      fi
      case "$option" in
          -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
             *) optarg='' ;;
      esac
      case "$option" in
          --help|-h)
              echo "Usage: $usage"
              exit 0
              ;;
          --version|-v)
              echo "OSSP tm $tai_version"
              exit 0
              ;;
          --all)
              all=yes
              ;;
          --prefix)
              output="$output $tai_prefix"
              ;;
          --exec-prefix)
              output="$output $tai_exec_prefix"
              ;;
          --bindir)
              output="$output $tai_bindir"
              ;;
          --libdir)
              output="$output $tai_libdir"
              ;;
          --includedir)
              output="$output $tai_includedir"
              ;;
          --mandir)
              output="$output $tai_mandir"
              ;;
          --datadir)
              output="$output $tai_datadir"
              ;;
          --acdir)
              output="$output $tai_acdir"
              ;;
          --cflags)
              output="$output -I$tai_includedir"
              output_extra="$output_extra $tai_cflags"
              ;;
          --ldflags)
              output="$output -L$tai_libdir"
              output_extra="$output_extra $tai_ldflags"
              ;;
          --libs)
              output="$output -ltai"
              output_extra="$output_extra $tai_libs"
              ;;
          * )
              echo "tai-config:Error: Invalid option" 1>&2
              echo "tai-config:Usage: $usage" 1>&2
              exit 1;
              ;;
      esac
  done
  IFS="$OIFS"
  if [ ".$prev" != . ]; then
      echo "tai-config:Error: missing argument to --`echo $prev | sed 's/_/-/g'`" 1>&2
      exit 1
  fi
  if [ ".$output" != . ]; then
      if [ ".$all" = .yes ]; then
          output="$output $output_extra"
      fi
      echo $output
  fi
  
  Index: ossp-pkg/tai/tai.ac
  ============================================================
  $ cvs update -p -r1.1.1.1 tai.ac
  dnl ##
  dnl ##  OSSP tai - Time Handling
  dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  dnl ##
  dnl ##  This file is part of OSSP tai, a time handling library
  dnl ##  which can be found at http://www.ossp.org/pkg/lib/tai/.
  dnl ##
  dnl ##  Permission to use, copy, modify, and distribute this software for
  dnl ##  any purpose with or without fee is hereby granted, provided that
  dnl ##  the above copyright notice and this permission notice appear in all
  dnl ##  copies.
  dnl ##
  dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  dnl ##  SUCH DAMAGE.
  dnl ##
  dnl ##  tm.ac: OSSP tm Autoconf checks
  dnl ##
  
  dnl #   Check for anything OSSP tai wants to know
  dnl #   configure.in:
  dnl #     TAI_CHECK_ALL
  
  AC_DEFUN(TAI_CHECK_ALL,[
      #   check for system functions
      AC_CHECK_FUNCS(gmtime_r timegm)
  ])
  
  Index: ossp-pkg/tai/tai.h
  ============================================================
  $ cvs update -p -r1.1.1.1 tai.h
  /*
  **  OSSP tai - Time Handling
  **  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP tai, a time handling library
  **  which can be found at http://www.ossp.org/pkg/lib/tai/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  tai.h: public API
  */
  
  #ifndef __TAI_H__
  #define __TAI_H__
  
  #include <time.h> /* time_t, struct tm */
  
  typedef enum {
      TAI_OK = 0,
      TAI_ERR_ARG,
      TAI_ERR_USE,
      TAI_ERR_OVF,
      TAI_ERR_FMT,
      TAI_ERR_PRS,
      TAI_ERR_SYS,
      TAI_ERR_IMP
  } tai_rc_t;
  
  typedef struct {
      int           sign;
      unsigned long  sec;
      unsigned long nsec;
      unsigned long asec;
  } tai_offset_t;
  
  typedef struct {
      char bytes[16];
  } tai_packed_t;
  
  typedef enum {
      /* lossless types */
      TAI_TYPE_TMT,       /* tai_t */
      TAI_TYPE_PACKED,    /* tai_packed_t (128 bit in 16 bytes network byte order) */
      /* looser types */
      TAI_TYPE_OFFSET,    /* tai_off_t */
      TAI_TYPE_SECONDS,   /* long */
      TAI_TYPE_NSECONDS,  /* long */
      TAI_TYPE_ASECONDS,  /* long */
      TAI_TYPE_TIMET,     /* time_t */
      TAI_TYPE_STRUCTTM,  /* struct tm */
      TAI_TYPE_STRUCTTV,  /* struct timeval */
      /* only import */
      TAI_TYPE_UNIX,      /* gettimeofday/time/getthtime */
      TAI_TYPE_SNTP,      /* SNTP network query */
      TAI_TYPE_RTIME      /* time network query */
  } tai_type_t;
  
  typedef enum {
      /* arithmetical operations */
      TAI_OP_NEG,
      TAI_OP_ADD,
      TAI_OP_SUB,
      TAI_OP_MUL,
      TAI_OP_DIV,
      TAI_OP_MOD,
      /* comparison operations */
      TAI_OP_G0,  /* greater than 0 */
      TAI_OP_E0,  /* equal to 0 */
      TAI_OP_L0,  /* less than 0 */
      TAI_OP_NE,
      TAI_OP_EQ,
      TAI_OP_LT,
      TAI_OP_LE,
      TAI_OP_GT,
      TAI_OP_GE,
      TAI_OP_SETPREC,
      TAI_OP_GETPREC
  } tai_op_t;
  
  struct tai_st;
  typedef struct tai_st tai_t;
  
  tai_rc_t  tai_create  (tai_t **tai);
  tai_rc_t  tai_destroy (tai_t  *tai);
  
  tai_rc_t  tai_import  (tai_t  *tai, tai_type_t type, ...);
  tai_rc_t  tai_export  (tai_t  *tai, tai_type_t type, ...);
  
  tai_rc_t  tai_format  (tai_t  *tai, char       *buf_ptr, size_t buf_len, const char *fmt);
  tai_rc_t  tai_parse   (tai_t  *tai, const char *buf_ptr, size_t buf_len, const char *fmt);
  
  tai_rc_t  tai_op      (tai_t  *tai, tai_op_t op, ...);
  
  #endif /* __TAI_H__ */
  
  Index: ossp-pkg/tai/tai.pod
  ============================================================
  $ cvs update -p -r1.1.1.1 tai.pod
  
  =pod
  
  =head1 NAME
  
  B<OSSP tai> - Time Handling
  
  =head1 SYNOPSIS
  
  #include "tai.h"
  
  =head1 DESCRIPTION
  
  ...
  
  =head1 SEE ALSO
  
  ...
  
  =head1 AUTHORS
  
  The B<OSSP tai> library was implemented in April 2002 by
  I<Ralf S. Engelschall> for use in the OSSP project.
  
  =cut
  
  Index: ossp-pkg/tai/tai_data.c
  ============================================================
  $ cvs update -p -r1.1.1.1 tai_data.c
  /*-
   * Copyright (c) 2001 Alexey Zelkin <phantom@FreeBSD.org>
   * Copyright (c) 1997 FreeBSD Inc.
   * All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in the
   *    documentation and/or other materials provided with the distribution.
   *
   * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   */
  
  #include <sys/cdefs.h>
  #include <stddef.h>
  
  #if 0
  __FBSDID("$FreeBSD: src/lib/libc/stdtime/timelocal.c,v 1.23 2002/03/22 21:53:13 obrien Exp $");
  #endif
  
  #include "tai_p.h"
  
  #define LCTIME_SIZE (sizeof(tai_locale_t) / sizeof(char *))
  
  const tai_locale_t tai_locale = {
  	{
  		"Jan", "Feb", "Mar", "Apr", "May", "Jun",
  		"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
  	}, {
  		"January", "February", "March", "April", "May", "June",
  		"July", "August", "September", "October", "November", "December"
  	}, {
  		"Sun", "Mon", "Tue", "Wed",
  		"Thu", "Fri", "Sat"
  	}, {
  		"Sunday", "Monday", "Tuesday", "Wednesday",
  		"Thursday", "Friday", "Saturday"
  	},
  
  	/* X_fmt */
  	"%H:%M:%S",
  
  	/*
  	 * x_fmt
  	 * Since the C language standard calls for
  	 * "date, using locale's date format," anything goes.
  	 * Using just numbers (as here) makes Quakers happier;
  	 * it's also compatible with SVR4.
  	 */
  	"%m/%d/%y",
  
  	/*
  	 * c_fmt
  	 */
  	"%a %b %e %H:%M:%S %Y",
  
  	/* am */
  	"AM",
  
  	/* pm */
  	"PM",
  
  	/* date_fmt */
  	"%a %b %e %H:%M:%S %Z %Y",
  	
  	/* alt_month
  	 * Standalone months forms for %OB
  	 */
  	{
  		"January", "February", "March", "April", "May", "June",
  		"July", "August", "September", "October", "November", "December"
  	},
  
  	/* md_order
  	 * Month / day order in dates
  	 */
  	"md",
  
  	/* ampm_fmt
  	 * To determine 12-hour clock format time (empty, if N/A)
  	 */
  	"%I:%M:%S %p"
  };
  
  Index: ossp-pkg/tai/tai_format.c
  ============================================================
  $ cvs update -p -r1.1.1.1 tai_format.c
  /*
   * Copyright (c) 1989 The Regents of the University of California.
   * All rights reserved.
   *
   * Redistribution and use in source and binary forms are permitted
   * provided that the above copyright notice and this paragraph are
   * duplicated in all such forms and that any documentation,
   * advertising materials, and other materials related to such
   * distribution and use acknowledge that the software was developed
   * by the University of California, Berkeley.  The name of the
   * University may not be used to endorse or promote products derived
   * from this software without specific prior written permission.
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
   * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
   * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
   */
  
  #if 0
  static const char	elsieid[] = "@(#)strftime.c	7.38";
  static const char	sccsid[] = "@(#)strftime.c	5.4 (Berkeley) 3/14/89";
  __FBSDID("$FreeBSD: src/lib/libc/stdtime/strftime.c,v 1.35 2002/03/22 21:53:13 obrien Exp $");
  #endif
  
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  #include <fcntl.h>
  #include <sys/stat.h>
  
  #include "tai.h"
  #include "tai_p.h"
  
  #define INT_STRLEN_MAXIMUM(type) \
      ((TYPE_BIT(type) - TYPE_SIGNED(type)) * 302 / 1000 + 1 + TYPE_SIGNED(type))
  #define TYPE_BIT(type)	(sizeof(type)*8)
  #define TYPE_SIGNED(type) (((type) -1) < 0)
  #define isleap(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0))
  #define DAYSPERWEEK	7
  #define DAYSPERNYEAR	365
  #define DAYSPERLYEAR	366
  
  static char *	_add(const char *, char *, const char *);
  static char *	_conv(int, const char *, char *, const char *);
  static char *	_fmt(const char *, const struct tm *, char *, const char *);
  
  #if 0 /* FIXME */
  extern char *	tzname[];
  #endif
  
  size_t
  tai_format_int(
  	char *const s,
  	const size_t maxsize,
  	const char *const format,
  	const struct tm *const t)
  {
  	char *p;
  
  #if 0 /* FIXME */
  	tzset();
  #endif
  	p = _fmt(((format == NULL) ? "%c" : format), t, s, s + maxsize);
  	if (p == s + maxsize)
  		return 0;
  	*p = '\0';
  	return p - s;
  }
  
  static char *
  _fmt(
  	const char *format,
  	const struct tm *const t,
  	char *pt,
  	const char *const ptlim)
  {
  	int Ealternative, Oalternative;
  	const tai_locale_t *tptr = &tai_locale;
  
  	for ( ; *format; ++format) {
  		if (*format == '%') {
  			Ealternative = 0;
  			Oalternative = 0;
  label:
  			switch (*++format) {
  			case '\0':
  				--format;
  				break;
  			case 'A':
  				pt = _add((t->tm_wday < 0 || t->tm_wday > 6) ?
  					"?" : tptr->weekday[t->tm_wday],
  					pt, ptlim);
  				continue;
  			case 'a':
  				pt = _add((t->tm_wday < 0 || t->tm_wday > 6) ?
  					"?" : tptr->wday[t->tm_wday],
  					pt, ptlim);
  				continue;
  			case 'B':
  				pt = _add((t->tm_mon < 0 || t->tm_mon > 11) ? 
  					"?" : (Oalternative ? tptr->alt_month :
  					tptr->month)[t->tm_mon],
  					pt, ptlim);
  				continue;
  			case 'b':
  			case 'h':
  				pt = _add((t->tm_mon < 0 || t->tm_mon > 11) ?
  					"?" : tptr->mon[t->tm_mon],
  					pt, ptlim);
  				continue;
  			case 'C':
  				/*
  				** %C used to do a...
  				**	_fmt("%a %b %e %X %Y", t);
  				** ...whereas now POSIX 1003.2 calls for
  				** something completely different.
  				** (ado, 5/24/93)
  				*/
  				pt = _conv((t->tm_year + TM_YEAR_BASE) / 100,
  					"%02d", pt, ptlim);
  				continue;
  			case 'c':
  				pt = _fmt(tptr->c_fmt, t, pt, ptlim);
  				continue;
  			case 'D':
  				pt = _fmt("%m/%d/%y", t, pt, ptlim);
  				continue;
  			case 'd':
  				pt = _conv(t->tm_mday, "%02d", pt, ptlim);
  				continue;
  			case 'E':
  				if (Ealternative || Oalternative)
  					break;
  				Ealternative++;
  				goto label;
  			case 'O':
  				/*
  				** POSIX locale extensions, a la
  				** Arnold Robbins' strftime version 3.0.
  				** The sequences
  				**      %Ec %EC %Ex %EX %Ey %EY
  				**	%Od %oe %OH %OI %Om %OM
  				**	%OS %Ou %OU %OV %Ow %OW %Oy
  				** are supposed to provide alternate
  				** representations.
  				** (ado, 5/24/93)
  				**
  				** FreeBSD extensions
  				**      %OB %Ef %EF
  				*/
  				if (Ealternative || Oalternative)
  					break;
  				Oalternative++;
  				goto label;
  			case 'e':
  				pt = _conv(t->tm_mday, "%2d", pt, ptlim);
  				continue;
  			case 'F':
  				pt = _fmt("%Y-%m-%d", t, pt, ptlim);
  				continue;
  			case 'H':
  				pt = _conv(t->tm_hour, "%02d", pt, ptlim);
  				continue;
  			case 'I':
  				pt = _conv((t->tm_hour % 12) ?
  					(t->tm_hour % 12) : 12,
  					"%02d", pt, ptlim);
  				continue;
  			case 'j':
  				pt = _conv(t->tm_yday + 1, "%03d", pt, ptlim);
  				continue;
  			case 'k':
  				/*
  				** This used to be...
  				**	_conv(t->tm_hour % 12 ?
  				**		t->tm_hour % 12 : 12, 2, ' ');
  				** ...and has been changed to the below to
  				** match SunOS 4.1.1 and Arnold Robbins'
  				** strftime version 3.0.  That is, "%k" and
  				** "%l" have been swapped.
  				** (ado, 5/24/93)
  				*/
  				pt = _conv(t->tm_hour, "%2d", pt, ptlim);
  				continue;
  #ifdef KITCHEN_SINK
  			case 'K':
  				/*
  				** After all this time, still unclaimed!
  				*/
  				pt = _add("kitchen sink", pt, ptlim);
  				continue;
  #endif /* defined KITCHEN_SINK */
  			case 'l':
  				/*
  				** This used to be...
  				**	_conv(t->tm_hour, 2, ' ');
  				** ...and has been changed to the below to
  				** match SunOS 4.1.1 and Arnold Robbin's
  				** strftime version 3.0.  That is, "%k" and
  				** "%l" have been swapped.
  				** (ado, 5/24/93)
  				*/
  				pt = _conv((t->tm_hour % 12) ?
  					(t->tm_hour % 12) : 12,
  					"%2d", pt, ptlim);
  				continue;
  			case 'M':
  				pt = _conv(t->tm_min, "%02d", pt, ptlim);
  				continue;
  			case 'm':
  				pt = _conv(t->tm_mon + 1, "%02d", pt, ptlim);
  				continue;
  			case 'n':
  				pt = _add("\n", pt, ptlim);
  				continue;
  			case 'p':
  				pt = _add((t->tm_hour >= 12) ?
  					tptr->pm :
  					tptr->am,
  					pt, ptlim);
  				continue;
  			case 'R':
  				pt = _fmt("%H:%M", t, pt, ptlim);
  				continue;
  			case 'r':
  				pt = _fmt(tptr->ampm_fmt, t, pt, ptlim);
  				continue;
  			case 'S':
  				pt = _conv(t->tm_sec, "%02d", pt, ptlim);
  				continue;
  			case 's':
  				{
  					struct tm	tm;
  					char		buf[INT_STRLEN_MAXIMUM(
  								time_t) + 1];
  					time_t		mkt;
  
  					tm = *t;
  					mkt = mktime(&tm);
  					if (TYPE_SIGNED(time_t))
  						(void) sprintf(buf, "%ld",
  							(long) mkt);
  					else	(void) sprintf(buf, "%lu",
  							(unsigned long) mkt);
  					pt = _add(buf, pt, ptlim);
  				}
  				continue;
  			case 'T':
  				pt = _fmt("%H:%M:%S", t, pt, ptlim);
  				continue;
  			case 't':
  				pt = _add("\t", pt, ptlim);
  				continue;
  			case 'U':
  				pt = _conv((t->tm_yday + 7 - t->tm_wday) / 7,
  					"%02d", pt, ptlim);
  				continue;
  			case 'u':
  				/*
  				** From Arnold Robbins' strftime version 3.0:
  				** "ISO 8601: Weekday as a decimal number
  				** [1 (Monday) - 7]"
  				** (ado, 5/24/93)
  				*/
  				pt = _conv((t->tm_wday == 0) ? 7 : t->tm_wday,
  					"%d", pt, ptlim);
  				continue;
  			case 'V':	/* ISO 8601 week number */
  			case 'G':	/* ISO 8601 year (four digits) */
  			case 'g':	/* ISO 8601 year (two digits) */
  /*
  ** From Arnold Robbins' strftime version 3.0:  "the week number of the
  ** year (the first Monday as the first day of week 1) as a decimal number
  ** (01-53)."
  ** (ado, 1993-05-24)
  **
  ** From "http://www.ft.uni-erlangen.de/~mskuhn/iso-time.html" by Markus Kuhn:
  ** "Week 01 of a year is per definition the first week which has the
  ** Thursday in this year, which is equivalent to the week which contains
  ** the fourth day of January. In other words, the first week of a new year
  ** is the week which has the majority of its days in the new year. Week 01
  ** might also contain days from the previous year and the week before week
  ** 01 of a year is the last week (52 or 53) of the previous year even if
  ** it contains days from the new year. A week starts with Monday (day 1)
  ** and ends with Sunday (day 7).  For example, the first week of the year
  ** 1997 lasts from 1996-12-30 to 1997-01-05..."
  ** (ado, 1996-01-02)
  */
  				{
  					int	year;
  					int	yday;
  					int	wday;
  					int	w;
  
  					year = t->tm_year + TM_YEAR_BASE;
  					yday = t->tm_yday;
  					wday = t->tm_wday;
  					for ( ; ; ) {
  						int	len;
  						int	bot;
  						int	top;
  
  						len = isleap(year) ?
  							DAYSPERLYEAR :
  							DAYSPERNYEAR;
  						/*
  						** What yday (-3 ... 3) does
  						** the ISO year begin on?
  						*/
  						bot = ((yday + 11 - wday) %
  							DAYSPERWEEK) - 3;
  						/*
  						** What yday does the NEXT
  						** ISO year begin on?
  						*/
  						top = bot -
  							(len % DAYSPERWEEK);
  						if (top < -3)
  							top += DAYSPERWEEK;
  						top += len;
  						if (yday >= top) {
  							++year;
  							w = 1;
  							break;
  						}
  						if (yday >= bot) {
  							w = 1 + ((yday - bot) /
  								DAYSPERWEEK);
  							break;
  						}
  						--year;
  						yday += isleap(year) ?
  							DAYSPERLYEAR :
  							DAYSPERNYEAR;
  					}
  #ifdef XPG4_1994_04_09
  					if ((w == 52
  					     && t->tm_mon == TM_JANUARY)
  					    || (w == 1
  						&& t->tm_mon == TM_DECEMBER))
  						w = 53;
  #endif /* defined XPG4_1994_04_09 */
  					if (*format == 'V')
  						pt = _conv(w, "%02d",
  							pt, ptlim);
  					else if (*format == 'g') {
  						pt = _conv(year % 100, "%02d",
  							pt, ptlim);
  					} else	pt = _conv(year, "%04d",
  							pt, ptlim);
  				}
  				continue;
  			case 'v':
  				/*
  				** From Arnold Robbins' strftime version 3.0:
  				** "date as dd-bbb-YYYY"
  				** (ado, 5/24/93)
  				*/
  				pt = _fmt("%e-%b-%Y", t, pt, ptlim);
  				continue;
  			case 'W':
  				pt = _conv((t->tm_yday + 7 -
  					(t->tm_wday ?
  					(t->tm_wday - 1) : 6)) / 7,
  					"%02d", pt, ptlim);
  				continue;
  			case 'w':
  				pt = _conv(t->tm_wday, "%d", pt, ptlim);
  				continue;
  			case 'X':
  				pt = _fmt(tptr->X_fmt, t, pt, ptlim);
  				continue;
  			case 'x':
  				pt = _fmt(tptr->x_fmt, t, pt, ptlim);
  				continue;
  			case 'y':
  				pt = _conv((t->tm_year + TM_YEAR_BASE) % 100,
  					"%02d", pt, ptlim);
  				continue;
  			case 'Y':
  				pt = _conv(t->tm_year + TM_YEAR_BASE, "%04d",
  					pt, ptlim);
  				continue;
  			case 'Z':
  				if (t->tm_zone != NULL)
  					pt = _add(t->tm_zone, pt, ptlim);
  				else
  #if 0 /* FIXME: strftime("%Z") or keep "?" */
  				if (t->tm_isdst == 0 || t->tm_isdst == 1) {
  					pt = _add(tzname[t->tm_isdst],
  						pt, ptlim);
  				} else  
  #endif
                                      pt = _add("?", pt, ptlim);
  				continue;
  			case 'z':
  				{
  					long absoff;
  					if (t->tm_gmtoff >= 0) {
  						absoff = t->tm_gmtoff;
  						pt = _add("+", pt, ptlim);
  					} else {
  						absoff = -t->tm_gmtoff;
  						pt = _add("-", pt, ptlim);
  					}
  					pt = _conv(absoff / 3600, "%02d",
  						pt, ptlim);
  					pt = _conv((absoff % 3600) / 60, "%02d",
  						pt, ptlim);
  				};
  				continue;
  			case '+':
  				pt = _fmt(tptr->date_fmt, t, pt, ptlim);
  				continue;
  			case '%':
  			/*
  			 * X311J/88-090 (4.12.3.5): if conversion char is
  			 * undefined, behavior is undefined.  Print out the
  			 * character itself as printf(3) also does.
  			 */
  			default:
  				break;
  			}
  		}
  		if (pt == ptlim)
  			break;
  		*pt++ = *format;
  	}
  	return pt;
  }
  
  static char *
  _conv(n, format, pt, ptlim)
  	const int n;
  	const char *const format;
  	char *const pt;
  	const char *const ptlim;
  {
  	char	buf[INT_STRLEN_MAXIMUM(int) + 1];
  
  	(void) sprintf(buf, format, n);
  	return _add(buf, pt, ptlim);
  }
  
  static char *
  _add(str, pt, ptlim)
  	const char *str;
  	char *pt;
  	const char *const ptlim;
  {
  	while (pt < ptlim && (*pt = *str++) != '\0')
  		++pt;
  	return pt;
  }
  
  Index: ossp-pkg/tai/tai_lib.c
  ============================================================
  $ cvs update -p -r1.1.1.1 tai_lib.c
  /*
  **  OSSP tai - Time Handling
  **  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP tai, a time handling library
  **  which can be found at http://www.ossp.org/pkg/lib/tai/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  tm.c: API implementation
  */
  
  #include <stdio.h>
  #include <stdlib.h>
  #include <stdarg.h>
  #include <string.h>
  #include <time.h>
  
  #include "tai.h"
  #include "tai_p.h"
  
  struct tai_st {
      int    tai_sec;    /* seconds after the minute [0-61] */
      int    tai_min;    /* minutes after the hour [0-59] */
      int    tai_hour;   /* hours since midnight [0-23] */
      int    tai_mday;   /* day of the month [1-31] */
      int    tai_mon;    /* months since January [0-11] */
      int    tai_year;   /* years since 1900 */
      int    tai_wday;   /* days since Sunday [0-6] */
      int    tai_yday;   /* days since January 1 [0-365] */
      int    tai_isdst;  /* Daylight Savings Time flag */
      long   tai_gmtoff; /* offset from CUT in seconds */
      char  *tai_zone;   /* timezone abbreviation */
  #if 0
      int sign;
      unsigned long long sec;
      unsigned long nsec;
      unsigned long asec;
  #endif
  };
  
  tai_rc_t tai_create(tai_t **ptai)
  {
      tai_t *tai;
      tai_rc_t rv;
  
      if ((tai = (tai_t *)malloc(sizeof(tai_t))) == NULL)
          return TAI_ERR_SYS;
      if ((rv = tai_import(tai, TAI_TYPE_TIMET, 0)) != TAI_OK) {
          free(tai);
          return rv;
      }
      *ptai = tai;
      return TAI_OK;
  }
  
  tai_rc_t tai_destroy(tai_t *tai)
  {
      if (tai == NULL)
          return TAI_ERR_ARG;
      if (tai->tai_zone != NULL)
          free(tai->tai_zone);
      free(tai);
      return TAI_OK;
  }
  
  tai_rc_t tai_import(tai_t *tai, tai_type_t type, ...)
  {
      va_list ap;
  
      if (tai == NULL)
          return TAI_ERR_ARG;
      va_start(ap, type); 
      if (type == TAI_TYPE_TIMET) {
          /* import from time_t */
  #ifdef HAVE_GMTIME_R
          struct tm stmbuf;
  #endif
          struct tm *stm;
          time_t t;
          t = (time_t)va_arg(ap, long);
  #ifdef HAVE_GMTIME_R
          stm = gmtime_r(&t, &stmbuf);
  #else
          stm = gmtime(&t);
  #endif
          tai->tai_sec    = stm->tm_sec;
          tai->tai_min    = stm->tm_min;
          tai->tai_hour   = stm->tm_hour;
          tai->tai_mday   = stm->tm_mday;
          tai->tai_mon    = stm->tm_mon;
          tai->tai_year   = stm->tm_year;
          tai->tai_wday   = stm->tm_wday;
          tai->tai_yday   = stm->tm_yday;
          tai->tai_isdst  = stm->tm_isdst;
          tai->tai_gmtoff = stm->tm_gmtoff;
          if (stm->tm_zone == NULL)
              tai->tai_zone = strdup("");
          else
              tai->tai_zone = strdup(stm->tm_zone);
      }
      else if (type == TAI_TYPE_STRUCTTM) {
          /* import from struct tm */
          struct tm *stm;
          stm = (struct tm *)va_arg(ap, void *);
  #define TM_ISRANGE(var,field,min,max) \
      (var->tm_##field >= (min) && var->tm_##field <= (max))
          if (!TM_ISRANGE(stm,sec,0,61)   ||
              !TM_ISRANGE(stm,min,0,59)   ||
              !TM_ISRANGE(stm,hour,0,23)  ||
              !TM_ISRANGE(stm,mday,1,31)  ||
              !TM_ISRANGE(stm,mon,0,11)   ||
              !TM_ISRANGE(stm,wday,0,6)   ||
              !TM_ISRANGE(stm,yday,0,365) ||
              !TM_ISRANGE(stm,isdst,0,1))
              return TAI_ERR_ARG;
          tai->tai_sec    = stm->tm_sec;
          tai->tai_min    = stm->tm_min;
          tai->tai_hour   = stm->tm_hour;
          tai->tai_mday   = stm->tm_mday;
          tai->tai_mon    = stm->tm_mon;
          tai->tai_year   = stm->tm_year;
          tai->tai_wday   = stm->tm_wday;
          tai->tai_yday   = stm->tm_yday;
          tai->tai_isdst  = stm->tm_isdst;
          tai->tai_gmtoff = stm->tm_gmtoff;
          if (stm->tm_zone == NULL)
              tai->tai_zone = strdup("");
          else
              tai->tai_zone = strdup(stm->tm_zone);
      }
      else
          return TAI_ERR_IMP; /* FIXME */
      va_end(ap); 
      return TAI_OK;
  }
  
  tai_rc_t tai_export(tai_t *tai, tai_type_t type, ...)
  {
      va_list ap;
  
      if (tai == NULL)
          return TAI_ERR_ARG;
      va_start(ap, type); 
      if (type == TAI_TYPE_TIMET) {
          time_t *pt;
          struct tm stmbuf;
          struct tm *stm;
  #ifndef HAVE_TIMEGM
          time_t t;
  #endif
          pt = (time_t *)va_arg(ap, void *);
          stm = &stmbuf;
          stm->tm_sec    = tai->tai_sec;
          stm->tm_min    = tai->tai_min;
          stm->tm_hour   = tai->tai_hour;
          stm->tm_mday   = tai->tai_mday;
          stm->tm_mon    = tai->tai_mon;
          stm->tm_year   = tai->tai_year;
          stm->tm_wday   = tai->tai_wday;
          stm->tm_yday   = tai->tai_yday;
          stm->tm_isdst  = tai->tai_isdst;
          stm->tm_gmtoff = tai->tai_gmtoff;
          stm->tm_zone   = tai->tai_zone;
  #ifdef HAVE_TIMEGM
          /* non-standard timegm(3) makes our life easy */
          *pt = timegm(stm);
  #else
          /* standard mktime(3) calculated relative to local timezone,
             so we have to post-adjust result */
          *pt = mktime(stm);
          t = 12*60*60*2; /* max offset of 12 hours plus safety */
          *pt += (mktime(localtime(&t)) - mktime(gmtime(&t)));
  #endif
      }
      else if (type == TAI_TYPE_STRUCTTM) {
          struct tm *stm;
          
          stm = (struct tm *)va_arg(ap, void *);
          stm->tm_sec    = tai->tai_sec;
          stm->tm_min    = tai->tai_min;
          stm->tm_hour   = tai->tai_hour;
          stm->tm_mday   = tai->tai_mday;
          stm->tm_mon    = tai->tai_mon;
          stm->tm_year   = tai->tai_year;
          stm->tm_wday   = tai->tai_wday;
          stm->tm_yday   = tai->tai_yday;
          stm->tm_isdst  = tai->tai_isdst;
          stm->tm_gmtoff = tai->tai_gmtoff;
          stm->tm_zone   = strdup(tai->tai_zone);
      }
      else
          return TAI_ERR_IMP; /* FIXME */
      va_end(ap); 
      return TAI_OK;
  }
  
  tai_rc_t tai_format(tai_t *tai, char *buf_ptr, size_t buf_len, const char *fmt)
  {
      struct tm stm;
      tai_rc_t rv;
  
      if (tai == NULL || buf_ptr == NULL || buf_len == 0 || fmt == NULL)
          return TAI_ERR_ARG;
      if ((rv = tai_export(tai, TAI_TYPE_STRUCTTM, &stm)) != TAI_OK)
          return rv;
      if (tai_format_int(buf_ptr, buf_len, fmt, &stm) == 0)
          return TAI_ERR_FMT;
      return TAI_OK;
  }
  
  tai_rc_t tai_parse(tai_t *tai, const char *buf_ptr, size_t buf_len, const char *fmt)
  {
      struct tm stm;
      char *cp;
      char *cp2;
      tai_rc_t rv;
  
      if (tai == NULL || buf_ptr == NULL || buf_len == 0 || fmt == NULL)
          return TAI_ERR_ARG;
      if ((cp = malloc(buf_len+1)) == NULL)
          return TAI_ERR_SYS;
      memmove(cp, buf_ptr, buf_len);
      cp[buf_len] = '\0';
      memset(&stm, 0, sizeof(struct tm));
      cp2 = tai_parse_int(cp, fmt, &stm);
      free(cp);
      if (cp2 == NULL)
          return TAI_ERR_PRS;
      if ((rv = tai_import(tai, TAI_TYPE_STRUCTTM, &stm)) != TAI_OK)
          return rv;
      return TAI_OK;
  }
  
  Index: ossp-pkg/tai/tai_p.h
  ============================================================
  $ cvs update -p -r1.1.1.1 tai_p.h
  /*-
   * Copyright (c) 1997-2002 FreeBSD Project.
   * All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in the
   *    documentation and/or other materials provided with the distribution.
   *
   * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   *
   * $FreeBSD: src/lib/libc/stdtime/timelocal.h,v 1.11 2002/01/24 15:07:44 phantom Exp $
   */
  
  #ifndef _TIMELOCAL_H_
  #define	_TIMELOCAL_H_
  
  #include <time.h>
  
  #include "config.h"
  
  /*
   * Private header file for the strftime and strptime localization
   * stuff.
   */
  typedef struct {
  	const char	*mon[12];
  	const char	*month[12];
  	const char	*wday[7];
  	const char	*weekday[7];
  	const char	*X_fmt;
  	const char	*x_fmt;
  	const char	*c_fmt;
  	const char	*am;
  	const char	*pm;
  	const char	*date_fmt;
  	const char	*alt_month[12];
  	const char	*md_order;
  	const char	*ampm_fmt;
  } tai_locale_t;
  
  extern const tai_locale_t tai_locale;
  
  #define TM_YEAR_BASE	1900
  
  size_t  tai_format_int(char *const s, const size_t maxsize, const char *const format, const struct tm *const t);
  char   *tai_parse_int (const char *buf, const char *fmt, struct tm *tm);
  
  #endif /* !_TIMELOCAL_H_ */
  Index: ossp-pkg/tai/tai_parse.c
  ============================================================
  $ cvs update -p -r1.1.1.1 tai_parse.c
  /*
   * Powerdog Industries kindly requests feedback from anyone modifying
   * this function:
   *
   * Date: Thu, 05 Jun 1997 23:17:17 -0400  
   * From: Kevin Ruddy <kevin.ruddy@powerdog.com>
   * To: James FitzGibbon <james@nexis.net>
   * Subject: Re: Use of your strptime(3) code (fwd)
   * 
   * The reason for the "no mod" clause was so that modifications would
   * come back and we could integrate them and reissue so that a wider 
   * audience could use it (thereby spreading the wealth).  This has   
   * made it possible to get strptime to work on many operating systems.
   * I'm not sure why that's "plain unacceptable" to the FreeBSD team.
   * 
   * Anyway, you can change it to "with or without modification" as
   * you see fit.  Enjoy.                                          
   * 
   * Kevin Ruddy
   * Powerdog Industries, Inc.
   */
  /*
   * Copyright (c) 1994 Powerdog Industries.  All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer
   *    in the documentation and/or other materials provided with the
   *    distribution.
   * 3. All advertising materials mentioning features or use of this
   *    software must display the following acknowledgement:
   *      This product includes software developed by Powerdog Industries.
   * 4. The name of Powerdog Industries may not be used to endorse or
   *    promote products derived from this software without specific prior
   *    written permission.
   *
   * THIS SOFTWARE IS PROVIDED BY POWERDOG INDUSTRIES ``AS IS'' AND ANY
   * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE POWERDOG INDUSTRIES BE
   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
   * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
   * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
   * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
   * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   */
  
  #if 0 
  "@(#) Copyright (c) 1994 Powerdog Industries.  All rights reserved.";
  static char sccsid[] = "@(#)strptime.c	0.1 (Powerdog) 94/03/27";
  __FBSDID("$FreeBSD: src/lib/libc/stdtime/strptime.c,v 1.27 2002/03/22 21:53:13 obrien Exp $");
  #endif
  
  #include <time.h>
  #include <ctype.h>
  #include <limits.h>
  #include <stdlib.h>
  #include <string.h>
  
  #include "tai.h"
  #include "tai_p.h"
  
  #if 0 /* FIXME */
  static pthread_mutex_t	gotgmt_mutex = PTHREAD_MUTEX_INITIALIZER;
  static int got_GMT;
  #endif
  
  #define asizeof(a)	(sizeof (a) / sizeof ((a)[0]))
  
  char *
  tai_parse_int(const char *buf, const char *fmt, struct tm *tm)
  {
  	char c;
  	const char *ptr;
  	int	i, len = 0;
  	int Ealternative, Oalternative;
  	const tai_locale_t *tptr = &tai_locale;
  
  	ptr = fmt;
  	while (*ptr != 0) {
  		if (*buf == 0)
  			break;
  
  		c = *ptr++;
  
  		if (c != '%') {
  			if (isspace((unsigned char)c))
  				while (*buf != 0 && isspace((unsigned char)*buf))
  					buf++;
  			else if (c != *buf++)
  				return 0;
  			continue;
  		}
  
  		Ealternative = 0;
  		Oalternative = 0;
  label:
  		c = *ptr++;
  		switch (c) {
  		case 0:
  		case '%':
  			if (*buf++ != '%')
  				return 0;
  			break;
  
  		case '+':
  			buf = tai_parse_int(buf, tptr->date_fmt, tm);
  			if (buf == 0)
  				return 0;
  			break;
  
  		case 'C':
  			if (!isdigit((unsigned char)*buf))
  				return 0;
  
  			/* XXX This will break for 3-digit centuries. */
  			len = 2;
  			for (i = 0; len && *buf != 0 && isdigit((unsigned char)*buf); buf++) {
  				i *= 10;
  				i += *buf - '0';
  				len--;
  			}
  			if (i < 19)
  				return 0;
  
  			tm->tm_year = i * 100 - 1900;
  			break;
  
  		case 'c':
  			buf = tai_parse_int(buf, tptr->c_fmt, tm);
  			if (buf == 0)
  				return 0;
  			break;
  
  		case 'D':
  			buf = tai_parse_int(buf, "%m/%d/%y", tm);
  			if (buf == 0)
  				return 0;
  			break;
  
  		case 'E':
  			if (Ealternative || Oalternative)
  				break;
  			Ealternative++;
  			goto label;
  
  		case 'O':
  			if (Ealternative || Oalternative)
  				break;
  			Oalternative++;
  			goto label;
  
  		case 'F':
  			buf = tai_parse_int(buf, "%Y-%m-%d", tm);
  			if (buf == 0)
  				return 0;
  			break;
  
  		case 'R':
  			buf = tai_parse_int(buf, "%H:%M", tm);
  			if (buf == 0)
  				return 0;
  			break;
  
  		case 'r':
  			buf = tai_parse_int(buf, tptr->ampm_fmt, tm);
  			if (buf == 0)
  				return 0;
  			break;
  
  		case 'T':
  			buf = tai_parse_int(buf, "%H:%M:%S", tm);
  			if (buf == 0)
  				return 0;
  			break;
  
  		case 'X':
  			buf = tai_parse_int(buf, tptr->X_fmt, tm);
  			if (buf == 0)
  				return 0;
  			break;
  
  		case 'x':
  			buf = tai_parse_int(buf, tptr->x_fmt, tm);
  			if (buf == 0)
  				return 0;
  			break;
  
  		case 'j':
  			if (!isdigit((unsigned char)*buf))
  				return 0;
  
  			len = 3;
  			for (i = 0; len && *buf != 0 && isdigit((unsigned char)*buf); buf++) {
  				i *= 10;
  				i += *buf - '0';
  				len--;
  			}
  			if (i < 1 || i > 366)
  				return 0;
  
  			tm->tm_yday = i - 1;
  			break;
  
  		case 'M':
  		case 'S':
  			if (*buf == 0 || isspace((unsigned char)*buf))
  				break;
  
  			if (!isdigit((unsigned char)*buf))
  				return 0;
  
  			len = 2;
  			for (i = 0; len && *buf != 0 && isdigit((unsigned char)*buf); buf++) {
  				i *= 10;
  				i += *buf - '0';
  				len--;
  			}
  
  			if (c == 'M') {
  				if (i > 59)
  					return 0;
  				tm->tm_min = i;
  			} else {
  				if (i > 60)
  					return 0;
  				tm->tm_sec = i;
  			}
  
  			if (*buf != 0 && isspace((unsigned char)*buf))
  				while (*ptr != 0 && !isspace((unsigned char)*ptr))
  					ptr++;
  			break;
  
  		case 'H':
  		case 'I':
  		case 'k':
  		case 'l':
  			/*
  			 * Of these, %l is the only specifier explicitly
  			 * documented as not being zero-padded.  However,
  			 * there is no harm in allowing zero-padding.
  			 *
  			 * XXX The %l specifier may gobble one too many
  			 * digits if used incorrectly.
  			 */
  			if (!isdigit((unsigned char)*buf))
  				return 0;
  
  			len = 2;
  			for (i = 0; len && *buf != 0 && isdigit((unsigned char)*buf); buf++) {
  				i *= 10;
  				i += *buf - '0';
  				len--;
  			}
  			if (c == 'H' || c == 'k') {
  				if (i > 23)
  					return 0;
  			} else if (i > 12)
  				return 0;
  
  			tm->tm_hour = i;
  
  			if (*buf != 0 && isspace((unsigned char)*buf))
  				while (*ptr != 0 && !isspace((unsigned char)*ptr))
  					ptr++;
  			break;
  
  		case 'p':
  			/*
  			 * XXX This is bogus if parsed before hour-related
  			 * specifiers.
  			 */
  			len = strlen(tptr->am);
  			if (strncasecmp(buf, tptr->am, len) == 0) {
  				if (tm->tm_hour > 12)
  					return 0;
  				if (tm->tm_hour == 12)
  					tm->tm_hour = 0;
  				buf += len;
  				break;
  			}
  
  			len = strlen(tptr->pm);
  			if (strncasecmp(buf, tptr->pm, len) == 0) {
  				if (tm->tm_hour > 12)
  					return 0;
  				if (tm->tm_hour != 12)
  					tm->tm_hour += 12;
  				buf += len;
  				break;
  			}
  
  			return 0;
  
  		case 'A':
  		case 'a':
  			for (i = 0; i < asizeof(tptr->weekday); i++) {
  				len = strlen(tptr->weekday[i]);
  				if (strncasecmp(buf, tptr->weekday[i],
  						len) == 0)
  					break;
  				len = strlen(tptr->wday[i]);
  				if (strncasecmp(buf, tptr->wday[i],
  						len) == 0)
  					break;
  			}
  			if (i == asizeof(tptr->weekday))
  				return 0;
  
  			tm->tm_wday = i;
  			buf += len;
  			break;
  
  		case 'U':
  		case 'W':
  			/*
  			 * XXX This is bogus, as we can not assume any valid
  			 * information present in the tm structure at this
  			 * point to calculate a real value, so just check the
  			 * range for now.
  			 */
  			if (!isdigit((unsigned char)*buf))
  				return 0;
  
  			len = 2;
  			for (i = 0; len && *buf != 0 && isdigit((unsigned char)*buf); buf++) {
  				i *= 10;
  				i += *buf - '0';
  				len--;
  			}
  			if (i > 53)
  				return 0;
  
  			if (*buf != 0 && isspace((unsigned char)*buf))
  				while (*ptr != 0 && !isspace((unsigned char)*ptr))
  					ptr++;
  			break;
  
  		case 'w':
  			if (!isdigit((unsigned char)*buf))
  				return 0;
  
  			i = *buf - '0';
  			if (i > 6)
  				return 0;
  
  			tm->tm_wday = i;
  
  			if (*buf != 0 && isspace((unsigned char)*buf))
  				while (*ptr != 0 && !isspace((unsigned char)*ptr))
  					ptr++;
  			break;
  
  		case 'd':
  		case 'e':
  			/*
  			 * The %e specifier is explicitly documented as not
  			 * being zero-padded but there is no harm in allowing
  			 * such padding.
  			 *
  			 * XXX The %e specifier may gobble one too many
  			 * digits if used incorrectly.
  			 */
  			if (!isdigit((unsigned char)*buf))
  				return 0;
  
  			len = 2;
  			for (i = 0; len && *buf != 0 && isdigit((unsigned char)*buf); buf++) {
  				i *= 10;
  				i += *buf - '0';
  				len--;
  			}
  			if (i > 31)
  				return 0;
  
  			tm->tm_mday = i;
  
  			if (*buf != 0 && isspace((unsigned char)*buf))
  				while (*ptr != 0 && !isspace((unsigned char)*ptr))
  					ptr++;
  			break;
  
  		case 'B':
  		case 'b':
  		case 'h':
  			for (i = 0; i < asizeof(tptr->month); i++) {
  				if (Oalternative) {
  					if (c == 'B') {
  						len = strlen(tptr->alt_month[i]);
  						if (strncasecmp(buf,
  								tptr->alt_month[i],
  								len) == 0)
  							break;
  					}
  				} else {
  					len = strlen(tptr->month[i]);
  					if (strncasecmp(buf, tptr->month[i],
  							len) == 0)
  						break;
  					len = strlen(tptr->mon[i]);
  					if (strncasecmp(buf, tptr->mon[i],
  							len) == 0)
  						break;
  				}
  			}
  			if (i == asizeof(tptr->month))
  				return 0;
  
  			tm->tm_mon = i;
  			buf += len;
  			break;
  
  		case 'm':
  			if (!isdigit((unsigned char)*buf))
  				return 0;
  
  			len = 2;
  			for (i = 0; len && *buf != 0 && isdigit((unsigned char)*buf); buf++) {
  				i *= 10;
  				i += *buf - '0';
  				len--;
  			}
  			if (i < 1 || i > 12)
  				return 0;
  
  			tm->tm_mon = i - 1;
  
  			if (*buf != 0 && isspace((unsigned char)*buf))
  				while (*ptr != 0 && !isspace((unsigned char)*ptr))
  					ptr++;
  			break;
  
  		case 's':
  			{
  			char *cp;
  			time_t t;
  
  			t = strtol(buf, &cp, 10);
  			if (t == LONG_MAX)
  				return 0;
  			buf = cp;
  #if 0 /* FIXME */
  			gmtime_r(&t, tm);
  			got_GMT = 1;
  #endif
  			}
  			break;
  
  		case 'Y':
  		case 'y':
  			if (*buf == 0 || isspace((unsigned char)*buf))
  				break;
  
  			if (!isdigit((unsigned char)*buf))
  				return 0;
  
  			len = (c == 'Y') ? 4 : 2;
  			for (i = 0; len && *buf != 0 && isdigit((unsigned char)*buf); buf++) {
  				i *= 10;
  				i += *buf - '0';
  				len--;
  			}
  			if (c == 'Y')
  				i -= 1900;
  			if (c == 'y' && i < 69)
  				i += 100;
  			if (i < 0)
  				return 0;
  
  			tm->tm_year = i;
  
  			if (*buf != 0 && isspace((unsigned char)*buf))
  				while (*ptr != 0 && !isspace((unsigned char)*ptr))
  					ptr++;
  			break;
  
  		case 'Z':
  			{
  			const char *cp;
  			char *zonestr;
  
  			for (cp = buf; *cp && isupper((unsigned char)*cp); ++cp) {/*empty*/}
  			if (cp - buf) {
  				zonestr = alloca(cp - buf + 1);
  				strncpy(zonestr, buf, cp - buf);
  				zonestr[cp - buf] = '\0';
  #if 0 /* FIXME */
  				tzset();
  #endif
  				if (0 == strcmp(zonestr, "GMT")) {
  #if 0 /* FIXME */
  				    got_GMT = 1
  #endif
                                      ;
  #if 0 /* FIXME */
  				} else if (0 == strcmp(zonestr, tzname[0])) {
  				    tm->tm_isdst = 0;
  				} else if (0 == strcmp(zonestr, tzname[1])) {
  				    tm->tm_isdst = 1;
  #endif
  				} else {
  				    return 0;
  				}
  				buf += cp - buf;
  			}
  			}
  			break;
  		}
  	}
  	return (char *)buf;
  }
  
  #if 0 /* FIXME remove? */
  char *
  strptime(const char *buf, const char *fmt, struct tm *tm)
  {
  	char *ret;
  
  	if (__isthreaded)
  		_pthread_mutex_lock(&gotgmt_mutex);
  
  	got_GMT = 0;
  	ret = _strptime(buf, fmt, tm);
  	if (ret && got_GMT) {
  		time_t t = timegm(tm);
  		localtime_r(&t, tm);
  		got_GMT = 0;
  	}
  
  	if (__isthreaded)
  		_pthread_mutex_unlock(&gotgmt_mutex);
  
  	return ret;
  }
  #endif
  
  Index: ossp-pkg/tai/tai_test.c
  ============================================================
  $ cvs update -p -r1.1.1.1 tai_test.c
  /*
  **  OSSP tai - Time Handling
  **  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP tai, a time handling library
  **  which can be found at http://www.ossp.org/pkg/lib/tai/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  tai_test.c: test suite
  */
  
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  #include <time.h>
  
  #include "ts.h"
  #include "tai.h"
  
  TS_TEST(test_object)
  {
      tai_t *tm;
      tai_rc_t rv;
  
      ts_test_check(TS_CTX, "object creation");
      if ((rv = tai_create(&tm)) != TAI_OK) {
          ts_test_fail(TS_CTX, "tai_create: rv=%d", rv);
          return;
      }
  
      ts_test_check(TS_CTX, "object destruction");
      if ((rv = tai_destroy(tm)) != TAI_OK)
          ts_test_fail(TS_CTX, "tai_destroy: rv=%d", rv);
  }
  
  TS_TEST(test_importexport)
  {
      tai_t *tm;
      tai_rc_t rv;
      time_t t;
      time_t t2;
  
      ts_test_check(TS_CTX, "time import");
      tai_create(&tm);
      if ((rv = tai_import(tm, TAI_TYPE_TIMET, 0)) != TAI_OK)
          ts_test_fail(TS_CTX, "tai_import: rv=%d", rv);
      if ((rv = tai_export(tm, TAI_TYPE_TIMET, &t)) != TAI_OK)
          ts_test_fail(TS_CTX, "tai_export: rv=%d", rv);
      if (t != 0)
          ts_test_fail(TS_CTX, "unexpected time %d (!= 0)", t);
      t = time(NULL);
      if ((rv = tai_import(tm, TAI_TYPE_TIMET, t)) != TAI_OK)
          ts_test_fail(TS_CTX, "tai_import: rv=%d", rv);
      if ((rv = tai_export(tm, TAI_TYPE_TIMET, &t2)) != TAI_OK)
          ts_test_fail(TS_CTX, "tai_export: rv=%d", rv);
      if (t != t2)
          ts_test_fail(TS_CTX, "unexpected time %d (!= %d)", t2, t);
      tai_destroy(tm);
  }
  
  TS_TEST(test_parsing)
  {
      tai_t *tm;
      tai_rc_t rv;
      char out[32];
      int i;
      struct {
          char *date;
          char *fmt;
      } table[] = {
          { "2000-02-22", "%Y-%m-%d" },
          { "22-02-2000", "%d-%m-%Y" },
          { "22-Feb-2000", "%d-%b-%Y" },
          { "29-Feb-2000", "%d-%b-%Y" },
          { "31-Feb-2000", "%d-%b-%Y" },
          { NULL, NULL }
      };
  
      ts_test_check(TS_CTX, "time parsing");
      tai_create(&tm);
      for (i = 0; table[i].date != NULL; i++) {
          ts_test_log(TS_CTX, "date=%s, fmt=%s", table[i].date, table[i].fmt);
          if ((rv = tai_parse(tm, table[i].date, strlen(table[i].date), table[i].fmt)) != TAI_OK) 
              ts_test_fail(TS_CTX, "#%d: tai_parse(\"%s\"): rv=%d", i, table[i].date, rv);
          else {
              if ((rv = tai_format(tm, out, sizeof(out), table[i].fmt)) != TAI_OK) 
                  ts_test_fail(TS_CTX, "#%d: tai_format(\"%s\"): rv=%d", i, table[i].date, rv);
              if (strcmp(table[i].date, out) != 0)
                  ts_test_fail(TS_CTX, "#%d: output \"%s\", expected \"%s\" (input)", i, out, table[i].date);
          }
      }
      tai_destroy(tm);
  }
  
  TS_TEST(test_formatting)
  {
      tai_t *tm;
  
      ts_test_check(TS_CTX, "time formatting");
      tai_create(&tm);
      /* FIXME */
      tai_destroy(tm);
  }
  
  int main(int argc, char *argv[])
  {
      ts_suite_t *ts;
      int n;
  
      ts = ts_suite_new("OSSP tai (Time Handling)");
      ts_suite_test(ts, test_object,       "object handling");
      ts_suite_test(ts, test_importexport, "time import/export");
      ts_suite_test(ts, test_parsing,      "time parsing");
      ts_suite_test(ts, test_formatting,   "time formatting");
      n = ts_suite_run(ts);
      ts_suite_free(ts);
      return n;
  }
  
  Index: ossp-pkg/tai/ts.c
  ============================================================
  $ cvs update -p -r1.1.1.1 ts.c
  /*
  **  TS - OSSP Test Suite Library
  **  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP TS, a small test suite library which
  **  can be found at http://www.ossp.org/pkg/ts/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  ts.c: test suite library
  */
  
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  #include <stdarg.h>
  
  #include "config.h"
  #if defined(HAVE_DMALLOC_H) && defined(WITH_DMALLOC)
  #include "dmalloc.h"
  #endif
  
  #include "ts.h"
  
  /* embedded ring data structure library */
  #define RING_ENTRY(elem) \
      struct { elem *next; elem *prev; }
  #define RING_HEAD(elem) \
      struct { elem *next; elem *prev; }
  #define RING_SENTINEL(hp, elem, link) \
      (elem *)((char *)(hp) - ((size_t)(&((elem *)0)->link)))
  #define RING_FIRST(hp) \
      (hp)->next
  #define RING_LAST(hp) \
      (hp)->prev
  #define RING_NEXT(ep, link) \
      (ep)->link.next
  #define RING_PREV(ep, link) \
      (ep)->link.prev
  #define RING_INIT(hp, elem, link) \
      do { RING_FIRST((hp)) = RING_SENTINEL((hp), elem, link); \
           RING_LAST((hp))  = RING_SENTINEL((hp), elem, link); } while (0)
  #define RING_EMPTY(hp, elem, link) \
      (RING_FIRST((hp)) == RING_SENTINEL((hp), elem, link))
  #define RING_ELEM_INIT(ep, link) \
      do { RING_NEXT((ep), link) = (ep); \
           RING_PREV((ep), link) = (ep); } while (0)
  #define RING_SPLICE_BEFORE(lep, ep1, epN, link) \
      do { RING_NEXT((epN), link) = (lep); \
           RING_PREV((ep1), link) = RING_PREV((lep), link); \
           RING_NEXT(RING_PREV((lep), link), link) = (ep1); \
           RING_PREV((lep), link) = (epN); } while (0)
  #define RING_SPLICE_TAIL(hp, ep1, epN, elem, link) \
      RING_SPLICE_BEFORE(RING_SENTINEL((hp), elem, link), (ep1), (epN), link)
  #define RING_INSERT_TAIL(hp, nep, elem, link) \
      RING_SPLICE_TAIL((hp), (nep), (nep), elem, link)
  #define RING_FOREACH(ep, hp, elem, link) \
      for ((ep)  = RING_FIRST((hp)); \
           (ep) != RING_SENTINEL((hp), elem, link); \
           (ep)  = RING_NEXT((ep), link))
  
  /* test suite test log */
  struct tstl_st;
  typedef struct tstl_st tstl_t;
  struct tstl_st {
      RING_ENTRY(tstl_t) next;
      char              *text;
      const char        *file;
      int                line;
  };
  
  /* test suite test check */
  struct tstc_st;
  typedef struct tstc_st tstc_t;
  struct tstc_st {
      RING_ENTRY(tstc_t) next;
      char              *title;
      int                failed;
      const char        *file;
      int                line;
      RING_HEAD(tstl_t)  logs;
  };
  
  /* test suite test */
  struct ts_test_st {
      RING_ENTRY(ts_test_t)  next;
      char              *title;
      ts_test_cb_t         func;
      const char        *file;
      int                line;
      RING_HEAD(tstc_t)  checks;
  };
  
  /* test suite */
  struct ts_suite_st {
      char              *title;
      RING_HEAD(ts_test_t)   tests;
  };
  
  /* minimal output-independent vprintf(3) variant which supports %{c,s,d,%} only */
  static int ts_suite_mvxprintf(char *buffer, size_t bufsize, const char *format, va_list ap)
  {
      /* sufficient integer buffer: <available-bits> x log_10(2) + safety */
      char ibuf[((sizeof(int)*8)/3)+10]; 
      char *cp;
      char c;
      int d;
      int n;
      int bytes;
  
      if (format == NULL || ap == NULL)
          return -1;
      bytes = 0;
      while (*format != '\0') {
          if (*format == '%') {
              c = *(format+1);
              if (c == '%') {
                  /* expand "%%" */
                  cp = &c;
                  n = sizeof(char);
              }
              else if (c == 'c') {
                  /* expand "%c" */
                  c = (char)va_arg(ap, int);
                  cp = &c;
                  n = sizeof(char);
              }
              else if (c == 's') {
                  /* expand "%s" */
                  if ((cp = (char *)va_arg(ap, char *)) == NULL)
                      cp = "(null)";
                  n = strlen(cp);
              }
              else if (c == 'd') {
                  /* expand "%d" */
                  d = (int)va_arg(ap, int);
  #ifdef HAVE_SNPRINTF
                  snprintf(ibuf, sizeof(ibuf), "%d", d); /* explicitly secure */
  #else
                  sprintf(ibuf, "%d", d);                /* implicitly secure */
  #endif
                  cp = ibuf;
                  n = strlen(cp);
              }
              else {
                  /* any other "%X" */
                  cp = (char *)format;
                  n  = 2;
              }
              format += 2;
          }
          else {
              /* plain text */
              cp = (char *)format;
              if ((format = strchr(cp, '%')) == NULL)
                  format = strchr(cp, '\0');
              n = format - cp;
          }
          /* perform output operation */
          if (buffer != NULL) {
              if (n > bufsize)
                  return -1;
              memcpy(buffer, cp, n);
              buffer  += n;
              bufsize -= n;
          }
          bytes += n;
      }
      /* nul-terminate output */
      if (buffer != NULL) {
          if (bufsize == 0)
              return -1;
          *buffer = '\0';
      }
      return bytes;
  }
  
  /* minimal vasprintf(3) variant which supports %{c,s,d} only */
  static char *ts_suite_mvasprintf(const char *format, va_list ap)
  {
      char *buffer;
      int n;
      va_list ap2;
  
      if (format == NULL || ap == NULL)
          return NULL;
      ap2 = ap;
      if ((n = ts_suite_mvxprintf(NULL, 0, format, ap)) == -1)
          return NULL;
      if ((buffer = (char *)malloc(n+1)) == NULL)
          return NULL;
      ts_suite_mvxprintf(buffer, n+1, format, ap2);
      return buffer;
  }
  
  /* minimal asprintf(3) variant which supports %{c,s,d} only */
  static char *ts_suite_masprintf(const char *format, ...)
  {
      va_list ap;
      char *cp;
  
      va_start(ap, format);
      cp = ts_suite_mvasprintf(format, ap);
      va_end(ap);
      return cp;
  }
  
  /* create test suite */
  ts_suite_t *ts_suite_new(const char *fmt, ...)
  {
      ts_suite_t *ts;
      va_list ap;
  
      if ((ts = (ts_suite_t *)malloc(sizeof(ts_suite_t))) == NULL)
          return NULL;
      va_start(ap, fmt);
      ts->title = ts_suite_mvasprintf(fmt, ap);
      RING_INIT(&ts->tests, ts_test_t, next);
      va_end(ap);
      return ts;
  }
  
  /* add test case to test suite */
  void ts_suite_test(ts_suite_t *ts, ts_test_cb_t func, const char *fmt, ...)
  {
      ts_test_t *tst;
      va_list ap;
  
      if (ts == NULL || func == NULL || fmt == NULL)
          return;
      if ((tst = (ts_test_t *)malloc(sizeof(ts_test_t))) == NULL)
          return;
      RING_ELEM_INIT(tst, next);
      va_start(ap, fmt);
      tst->title = ts_suite_mvasprintf(fmt, ap);
      va_end(ap);
      tst->func = func;
      tst->file = NULL;
      tst->line = 0;
      RING_INIT(&tst->checks, tstc_t, next);
      RING_INSERT_TAIL(&ts->tests, tst, ts_test_t, next);
      return;
  }
  
  /* run test suite */
  int ts_suite_run(ts_suite_t *ts)
  {
      ts_test_t *tst;
      tstc_t *tstc;
      tstl_t *tstl;
      int total_tests, total_tests_suite_failed;
      int total_checks, total_checks_failed;
      int test_checks, test_checks_failed;
      const char *file;
      int line;
      char *cp;
  
      if (ts == NULL)
          return 0;
  
      /* init total counters */
      total_tests         = 0;
      total_tests_suite_failed  = 0;
      total_checks        = 0;
      total_checks_failed = 0;
  
      fprintf(stdout, "\n");
      fprintf(stdout, " Test Suite: %s\n", ts->title);
      fprintf(stdout, " __________________________________________________________________\n");
      fprintf(stdout, "\n");
      fflush(stdout);
  
      /* iterate through all test cases */
      RING_FOREACH(tst, &ts->tests, ts_test_t, next) {
          cp = ts_suite_masprintf(" Test: %s ........................................"
                                  "........................................", tst->title);
          cp[60] = '\0';
          fprintf(stdout, "%s", cp);
          free(cp);
          fflush(stdout);
  
          /* init test case counters */
          test_checks        = 0;
          test_checks_failed = 0;
  
          /* run the test case function */
          tst->func(tst);
  
          /* iterate through all performed checks to determine status */
          RING_FOREACH(tstc, &tst->checks, tstc_t, next) {
              test_checks++;
              if (tstc->failed)
                  test_checks_failed++;
          }
  
          if (test_checks_failed > 0) {
              /* some checks failed, so do detailed reporting of test case */
              fprintf(stdout, " FAILED\n");
              fprintf(stdout, "       Ops, %d/%d checks failed! Detailed report follows:\n",
                      test_checks_failed, test_checks);
              RING_FOREACH(tstc, &tst->checks, tstc_t, next) {
                  file = (tstc->file != NULL ? tstc->file : tst->file);
                  line = (tstc->line != 0    ? tstc->line : tst->line);
                  if (file != NULL)
                      fprintf(stdout, "       Check: %s [%s:%d]\n", tstc->title, file, line);
                  else
                      fprintf(stdout, "       Check: %s\n", tstc->title);
                  RING_FOREACH(tstl, &tstc->logs, tstl_t, next) {
                      file = (tstl->file != NULL ? tstl->file : file);
                      line = (tstl->line != 0    ? tstl->line : line);
                      if (file != NULL)
                          fprintf(stdout, "              Log: %s [%s:%d]\n", tstl->text, file, line);
                      else
                          fprintf(stdout, "              Log: %s\n", tstl->text);
                  }
              }
          }
          else {
              /* test case ran successfully */
              fprintf(stdout, ".... OK\n");
          }
          fflush(stdout);
  
          /* accumulate counters */
          total_checks += test_checks;
          total_tests++;
          if (test_checks_failed > 0) {
              total_checks_failed += test_checks_failed;
              total_tests_suite_failed++;
          }
      }
  
      /* print test suite summary */
      fprintf(stdout, " __________________________________________________________________\n");
      fprintf(stdout, "\n");
      fprintf(stdout, " Test Summary: %d tests (%d ok, %d failed), %d checks (%d ok, %d failed)\n", 
              total_tests, (total_tests - total_tests_suite_failed), total_tests_suite_failed, 
              total_checks, (total_checks - total_checks_failed), total_checks_failed); 
      if (total_tests_suite_failed > 0)
          fprintf(stdout, " Test Suite: FAILED\n");
      else
          fprintf(stdout, " Test Suite: OK\n");
      fprintf(stdout, "\n");
      fflush(stdout);
  
      return total_checks_failed;
  }
  
  /* destroy test suite */
  void ts_suite_free(ts_suite_t *ts)
  {
      ts_test_t *tst;
      tstc_t *tstc;
      tstl_t *tstl;
  
      if (ts == NULL)
          return;
      RING_FOREACH(tst, &ts->tests, ts_test_t, next) {
          RING_FOREACH(tstc, &tst->checks, tstc_t, next) {
              RING_FOREACH(tstl, &tstc->logs, tstl_t, next) {
                  free(tstl->text);
              }
              free(tstc->title);
              free(tstc);
          }
          free(tst->title);
          free(tst);
      }
      free(ts->title);
      free(ts);
      return;
  }
  
  /* annotate test case with file name and line number */
  ts_test_t *ts_test_ctx(ts_test_t *tst, const char *file, int line)
  {
      if (tst != NULL && file != NULL) {
          tst->file = file;
          tst->line = line;
      }
      return tst;
  }
  
  /* annotate test case with check */
  void ts_test_check(ts_test_t *tst, const char *fmt, ...)
  {
      tstc_t *tstc;
      va_list ap;
  
      if (tst == NULL || fmt == NULL)
          return;
      if ((tstc = (tstc_t *)malloc(sizeof(tstc_t))) == NULL)
          return;
      va_start(ap, fmt);
      RING_ELEM_INIT(tstc, next);
      tstc->title = ts_suite_mvasprintf(fmt, ap);
      tstc->failed = 0;
      tstc->file = tst->file;
      tstc->line = tst->line;
      RING_INIT(&tstc->logs, tstl_t, next);
      RING_INSERT_TAIL(&tst->checks, tstc, tstc_t, next);
      va_end(ap);
      return;
  }
  
  /* annotate test case with log message and failure */
  void ts_test_fail(ts_test_t *tst, const char *fmt, ...)
  {
      tstc_t *tstc;
      tstl_t *tstl;
      va_list ap;
  
      if (tst == NULL || fmt == NULL)
          return;
      if ((tstl = (tstl_t *)malloc(sizeof(tstl_t))) == NULL)
          return;
      va_start(ap, fmt);
      tstl->text = ts_suite_mvasprintf(fmt, ap);
      tstl->file = tst->file;
      tstl->line = tst->line;
      RING_ELEM_INIT(tstl, next);
      tstc = RING_LAST(&tst->checks);
      RING_INSERT_TAIL(&tstc->logs, tstl, tstl_t, next);
      tstc->failed = 1;
      va_end(ap);
      return;
  }
  
  /* annotate test case with log message only */
  void ts_test_log(ts_test_t *tst, const char *fmt, ...)
  {
      tstc_t *tstc;
      tstl_t *tstl;
      va_list ap;
  
      if (tst == NULL || fmt == NULL)
          return;
      if ((tstl = (tstl_t *)malloc(sizeof(tstl_t))) == NULL)
          return;
      va_start(ap, fmt);
      tstl->text = ts_suite_mvasprintf(fmt, ap);
      tstl->file = tst->file;
      tstl->line = tst->line;
      RING_ELEM_INIT(tstl, next);
      tstc = RING_LAST(&tst->checks);
      RING_INSERT_TAIL(&tstc->logs, tstl, tstl_t, next);
      va_end(ap);
      return;
  }
  
  Index: ossp-pkg/tai/ts.h
  ============================================================
  $ cvs update -p -r1.1.1.1 ts.h
  /*
  **  TS - OSSP Test Suite Library
  **  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP TS, a small test suite library which
  **  can be found at http://www.ossp.org/pkg/ts/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  ts.h: test suite library API
  */
  
  #ifndef _TS_H_
  #define _TS_H_
  
  /* test suite object type */
  struct ts_suite_st;
  typedef struct ts_suite_st ts_suite_t;
  
  /* test object type */
  struct ts_test_st;
  typedef struct ts_test_st ts_test_t;
  
  /* test callback function type */
  typedef void (*ts_test_cb_t)(ts_test_t *);
  
  /* test suite operations */
  ts_suite_t *ts_suite_new  (const char *fmt, ...);
  void        ts_suite_test (ts_suite_t *s, ts_test_cb_t func, const char *fmt, ...);
  int         ts_suite_run  (ts_suite_t *s);
  void        ts_suite_free (ts_suite_t *s);
  
  /* test operations */
  ts_test_t  *ts_test_ctx   (ts_test_t *t, const char *file, int line);
  void        ts_test_check (ts_test_t *t, const char *fmt, ...);
  void        ts_test_fail  (ts_test_t *t, const char *fmt, ...);
  void        ts_test_log   (ts_test_t *t, const char *fmt, ...);
  
  /* test suite short-cut macros */
  #define TS_TEST(name) \
      static void name(ts_test_t *_t)
  #define TS_CTX \
      ts_test_ctx(_t, __FILE__, __LINE__)
  
  #endif /* _TS_H_ */
  

From ossp-cvs-owner@ossp.org  Thu Apr 18 15:12:42 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1899B7635E; Thu, 18 Apr 2002 15:12:42 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp example.conf
Message-Id: <20020418131242.1899B7635E@mail.ossp.org>
Date: Thu, 18 Apr 2002 15:12:42 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   18-Apr-2002 15:12:41
  Branch: HEAD                             Handle: 2002041814124100

  Modified files:
    ossp-pkg/lmtp2nntp      example.conf

  Log:
    typo

  Summary:
    Revision    Changes     Path
    1.17        +1  -1      ossp-pkg/lmtp2nntp/example.conf
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/example.conf
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 example.conf
  --- ossp-pkg/lmtp2nntp/example.conf	4 Mar 2002 15:54:28 -0000	1.16
  +++ ossp-pkg/lmtp2nntp/example.conf	18 Apr 2002 13:12:41 -0000	1.17
  @@ -67,7 +67,7 @@
   headerrule 520:Subject: %{$Subject:-None}
   
   # create Message-ID if omitted or illegal (<> single @)
  -headerrule 530:Messageid: %{messagid:s/^([^@+@[^@]+)$/<$1/:s/^[^<].*$/%{tool.createmessageid}/}
  +headerrule 530:Message-id: %{messagid:s/^([^@+@[^@]+)$/<$1/:s/^[^<].*$/%{tool.createmessageid}/}
   
   # append a header
   headerrule 540::X-Append: Tail

From ossp-cvs-owner@ossp.org  Thu Apr 18 15:28:30 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8B8767635E; Thu, 18 Apr 2002 15:28:30 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO
Message-Id: <20020418132830.8B8767635E@mail.ossp.org>
Date: Thu, 18 Apr 2002 15:28:30 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   18-Apr-2002 15:28:30
  Branch: HEAD                             Handle: 2002041814283000

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO

  Log:
    update

  Summary:
    Revision    Changes     Path
    1.58        +2  -63     ossp-pkg/lmtp2nntp/00TODO
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.57 -r1.58 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	5 Mar 2002 14:49:41 -0000	1.57
  +++ ossp-pkg/lmtp2nntp/00TODO	18 Apr 2002 13:28:30 -0000	1.58
  @@ -1,19 +1,11 @@
   
     before release, check for
     - FIXME
  -  - foo
     - strdup
     - check printf/log for consistent look'n'feel and uniqness
     - check printf/log for consistent usage of strerr()/XXX_error()
  -  --------------------------------------------------------------------------------
   
  -  o split already too large lmtp2nntp_main.c into smaller chunks (3-4 files)
  -  o move already too complex and intermixed option parsing and processing into
  -    two parts (1: parsing, 2: processing)
  -  o use dotconf library to provide a configuration file
  -  o use var library to provide variable expansion everywhere
  -
  -  --------------------------------------------------------------------------------
  +  should we resolv on startup only or for every access or using dns ttl
   
     add --define foo:bar option allowing the user to specify arbitrary variables
     which can then be used as ${option.define}[x] when you know x expanding to
  @@ -25,10 +17,6 @@
   
     use sa_buffer (where sa_timeout is called)
   
  -  option -U currently has to be specified before option -b in order to set the
  -  owner/modes of Unix Domains sockets correctly. To fix this, the wholly
  -  option handling has to be revamped.
  -
     on waiting for childs to finish: maximum number of seconds to wait at all
     and if childs still are running, kill them. This means we have to remember
     pid_t's.
  @@ -37,10 +25,6 @@
   
     Proper cleanup when exiting through signals.
   
  -  move code out of getopt()-loop
  -  
  -  split already too large lmtp2nntp.c source into smaller pieces (~ 10-30KB each only)
  -
     make msg.c a library with functions to add/ remove headers.
   
     add artifical delay for error respones to defeat DoS attacks.
  @@ -52,16 +36,8 @@
     inn permissions require "read" for a STAT, so a "post w/o stat" delivery
     mode should be implemented.
   
  -  handle duplicate headers, i.e. Reply-To:
  -
     **** DEVELOPMENT INFORMATION ****
   
  -  Proposal for future URL-style logging option syntax
  -  -L streamlog
  -  -l syslog:[mask]//[localhost[:port]][/tag=value ...] with /tag=value i.e. facility=local0
  -  -l   smtp:[mask]//[localhost[:port]][/tag=value ...] with /tag=value i.e. to=foo@example.com
  -  -l   file:[mask]//path/file
  -
     Debugging:
     $ ./.configure [wegen --with-dmalloc!]
     $ dmalloc -l dmalloc.log
  @@ -84,48 +60,11 @@
         foreach $a (split(/\n/, $_)) { $n=$a;
         $n=~s/^(?:([^@<>()]+)@[^<>()]+|.*<([^@]+)@[^>]+?>.*|.*?([^@ <>()]+)@[^ <>()]+.*)$/$1$2$3/;
         print "$a->$n\n" };'
  -  1.) OSSP var needs autoconf environment
  -  2.) OSSP var needs RPM-style [] multivalue expansion
  -  3.) include OSSP var 
  -  4.) splitting headers needs to extend known headers into multiple instances
  -  5.) joining headers needs to merge known headers into single instances, delete headers w/o value
  -  6.) add -f configfile option in a mini-library #comments, command[\svalue]
  -  Result is:
  -    duplicate Reply-To: headers are eleminated by 5.)
  +
       empty Subject: headers can be handled by      -h Subject:${Subject:-empty}
       missing Message-Id: headers can be handeld by -h Message-Id:${Message-Id:-$_CreateMessageId}
       illegal Message-Id: two or more @ use         -h ${Message-Id:s/^.*@.*@.*$/$_CreateMesssageId/}
       illegal Message-Id: no @ use                  -h ${Message-Id:s/^[^@]*$/$_CreateMesssageId/}
       crossposting problem                          -h [Newsgroups:see perl example above and use feature 2.)\n]
       potential to merge post/header modes          -h [Newsgroups:${_EnvelopeRCPT}\n]
  -
  -  **** DETAILS ****
  -
  -  create an array with columns for "header" and every value, index is "header";
  -
  -  -h [pri]:[regex]:header:[val]
  -
  -  foreach rule {
  -      if (rule has regex) {
  -          foreach header {
  -              if (regex matches) {
  -                  createheader
  -                  substitutevalue
  -                  writeheader(overwrite_if_existing)
  -              }
  -          }
  -      }
  -      else { /* rule has no regex */
  -          createheader
  -          substitutevalue
  -          writeheader(overwrite_if_existing)
  -      }
  -  }
  -
  -
  -
  -
  -
  -
  -
   

From ossp-cvs-owner@ossp.org  Thu Apr 18 15:30:42 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1395D7635E; Thu, 18 Apr 2002 15:30:42 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp NEWS
Message-Id: <20020418133042.1395D7635E@mail.ossp.org>
Date: Thu, 18 Apr 2002 15:30:42 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   18-Apr-2002 15:30:41
  Branch: HEAD                             Handle: 2002041814304100

  Modified files:
    ossp-pkg/lmtp2nntp      NEWS

  Log:
    Changed features

  Summary:
    Revision    Changes     Path
    1.8         +26 -0      ossp-pkg/lmtp2nntp/NEWS
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/NEWS
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 NEWS
  --- ossp-pkg/lmtp2nntp/NEWS	14 Mar 2002 16:07:52 -0000	1.7
  +++ ossp-pkg/lmtp2nntp/NEWS	18 Apr 2002 13:30:41 -0000	1.8
  @@ -27,3 +27,29 @@
     [4] OSSP val  http://www.ossp.org/pkg/lib/val/
     [5] OSSP ex   http://www.ossp.org/pkg/lib/ex/
   
  +  Changed features:
  +
  +  OLD| Option -V Very verbose logging. This means logging is unbuffered
  +  MOD| This option is obsolete and vanished
  +  NEW| Omit buffer channel from l2_spec
  +
  +  OLD| -a I<addr>/I<mask>[,I<addr>/I<mask>[,...]] (LMTP daemon ACL)
  +  MOD| It is no longer possible to specify more than one addr/ mask per option as a comma-separated list
  +  NEW| Use multiple --acl options
  +
  +  OLD| -d I<addr>[I<:port>][,I<addr>[I<:port>], ...] (NNTP client peer)
  +  MOD| It is no longer possible to specify more than one addr/ mask per option as a comma-separated list
  +  NEW| Use multiple --destination options
  +
  +  OLD| -h I<header>:<value>
  +  MOD| Replaced by header rewrite facility
  +  NEW| see --headerrule
  +
  +  OLD| -l I<level>[:I<logfile>]
  +  MOD| The full functionality of lib_l2 is now exposed to the user
  +  NEW| see --l2spec
  +
  +  OLD| -t I<name>=I<sec>[,I<name>=I<sec>[,...]
  +  MOD| Each timeout has its own option now
  +  NEW| see --timeout* options
  +

From ossp-cvs-owner@ossp.org  Thu Apr 18 15:31:28 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6A0F8763A1; Thu, 18 Apr 2002 15:31:28 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp.pod lmtp2nntp_config.c lmtp2n...
Message-Id: <20020418133128.6A0F8763A1@mail.ossp.org>
Date: Thu, 18 Apr 2002 15:31:28 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   18-Apr-2002 15:31:28
  Branch: HEAD                             Handle: 2002041814312700

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.pod lmtp2nntp_config.c
                            lmtp2nntp_option.c

  Log:
    updated documentation, aligned and sorted source;

  Summary:
    Revision    Changes     Path
    1.37        +220 -113   ossp-pkg/lmtp2nntp/lmtp2nntp.pod
    1.70        +48 -2      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.18        +29 -29     ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ============================================================
  $ cvs diff -u -r1.36 -r1.37 lmtp2nntp.pod
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.pod	31 Jan 2002 15:13:16 -0000	1.36
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.pod	18 Apr 2002 13:31:27 -0000	1.37
  @@ -33,119 +33,138 @@
   =head1 SYNOPSIS
   
   B<lmtp2nntp>
  -[B<-C> I<childsmax>]
  -[B<-D>]
  -[B<-K>]
  -[B<-P> I<pidfile>]
  -[B<-V>]
  -[B<-a> I<addr>/I<mask>[,I<addr>/I<mask>[,...]]
  -[B<-b> I<addr>[I<:port>]|C<->|I<path>[:perms]]
  -[B<-c> I<addr>[I<:port>]]
  -[B<-d> I<addr>[I<:port>][,I<addr>[I<:port>], ...]]
  -[B<-g> I<groupmode>]
  -[B<-h> I<header>:<value>]
  -[B<-l> I<level>[:I<logfile>]]
  -[B<-m> I<mailfrom>]
  -[B<-n> I<nodename>]
  -[B<-o> I<operationmode>]
  -[B<-r> I<restrictheader>]
  -[B<-s> I<size>]
  -[B<-t> I<name>=I<sec>[,I<name>=I<sec>[,...]]
  -[B<-u> I<uid>]
  -[B<-v>]
  -I<newsgroup> [I<newsgroup> ...]
  +[B<--childsmax|-C> I<childsmax>]
  +[B<--daemonize|-D>]
  +[B<--kill|-K>]
  +[B<--pidfile|-P> I<filename>]
  +[B<--acl|-a> I<addr>/I<mask> (LMTP daemon ACL)]
  +[B<--bind|-b> I<addr>[I<:port>]|C<->|I<path[:perms]> (LMTP daemon bind)]
  +[B<--client|-c> I<addr>[I<:port>] (NNTP client bind)]
  +[B<--destination|-d> I<addr>[I<:port>] (NNTP client destination)]
  +[B<--groupmode|-g> I<groupmode>]
  +[B<--headerrule|-h> [I<pri>]:[I<regex>]:I<header>:[I<val>]]
  +[B<--include|-i> I<configfile>]
  +[B<--l2spec|-l> I<l2spec>]
  +[B<--mailfrom|-m> I<regex>]
  +[B<--nodename|-n> I<name>]
  +[B<--operationmode|-o> I<abc/a.d.e|post|feed>]
  +[B<--restrictheader|-r> I<regex>]
  +[B<--size|-s> I<bytes>]
  +[B<--testfile|-t> I<filename>]
  +[B<--timeoutlmtp> I<sec>]
  +[B<--timeoutlmtpaccept> I<sec>]
  +[B<--timeoutlmtpread> I<sec>]
  +[B<--timeoutlmtpwrite> I<sec>]
  +[B<--timeoutnntp> I<sec>]
  +[B<--timeoutnntpconnect> I<sec>]
  +[B<--timeoutnntpread> I<sec>]
  +[B<--timeoutnntpwrite> I<sec>]
  +[B<--user|-u> I<uid|name>]
  +[B<--version|-v>]
  +I<--newsgroup> I<newsgroup|wildmat> [I<newsgroup> ...]
   
   =head1 DESCRIPTION
   
   The B<OSSP lmtp2nntp> program is an LMTP service for use in conjunction
   with an MTA (like Sendmail), providing a reliable real-time mail to news
  -gateway. Input messages get their headers slightly reformatted to match
  -Usenet news article format. The article is then posted or feeded into
  +gateway. Input messages get their headers reformatted according to configurable rewrite rules.
  +The article is then posted or feeded into
   a remote NNTP service (like INN). Delivery must take place immediately
   or the transaction fails. B<OSSP lmtp2nntp> relies on the queuing
   capabilities of the MTA in order to provide a fully reliable service.
  -For this the program returns proper delivery status notification which
  +The program returns proper delivery status notification which
   indicates successful completed action, persistent transient failure or
   permanent failure.
   
  +Configuration files can be specified to reduce the complexity of command
  +lines. Their content has a simple "command WHITESPACE argument" syntax
  +where commands and their arguments map exactly to the long options, with
  +dashes omitted.  There is no artifical difference between using command
  +line and using configuration files. The only practical impact is that
  +the shell expands metacharacters while those have no special meaning
  +inside the configuration file.  However, shell style line concatenation
  +through BACKSLASH and comments through HASH are supported.
  +
  +Options belong to one of the three classes SINGLE, FLAG or MULTI. Any
  +option can be specified more than once. Those belonging to SINGLE and
  +FLAG class can appear multiple times but only the last occurrence in
  +terms of parsing sequence counts while those belonging to MULTI class
  +handle their arguments as a array. SINGLE and MULTI require an argument,
  +FLAG does not allow an argument.
  +
   The following command line options and arguments are available:
   
   =over 4
   
  -=item B<-C> I<childsmax>
  +=item B<--childsmax|-C> I<childsmax>
   
  -Childs the daemon spawns at maximum. Default is 10.
  +Childs the daemon spawns at max. Default is 10. SINGLE.
   
  -=item B<-D>
  +=item B<--daemonize|-D>
   
  -Daemonize program and detach from current terminal.
  +Daemonize and detach from current terminal. FLAG.
   
  -=item B<-K>
  +=item B<--kill|-K>
   
  -Kill the daemon. After processing this option the program is terminated so
  +Kill a previously run daemon. After processing this option the program is terminated so
   this option effectivly renders most other options invalid not including
   specification of a pidfile and logging. The pid must be listed in pidfile.
  +FLAG.
   
  -=item B<-P> I<pidfile>
  +=item B<--pidfile|-P> I<filename>
   
  -Pidfile to remember the process ID when running as or killing the daemon. Care
  +Pidfile holding the process ID. Written when daemonizing. Read when killing a previously run daemon. Care
   must be taken when using relative path names as daemonizing changes the
  -current working directory to '/'.
  -
  -=item B<-V>
  -
  -Very verbose logging. This means logging is unbuffered.
  +current working directory to '/' before the file is opened. SINGLE.
   
  -=item B<-a> I<addr>/I<mask>[,I<addr>/I<mask>[,...]] (LMTP daemon ACL)
  +=item B<--acl|-a> I<addr>/I<mask> (LMTP daemon ACL)
   
   Access control list specifying TCP INET addresses and masks where incoming
  -LMTP connections are accepted from. This option can be specified more than
  -once and it is possible to specify more than one addr/ mask per option as a
  -comma-separated list. Omitting a mask defaults to a host comparison. The mask
  +LMTP connections are accepted from.
  +Omitting a mask defaults to a host comparison. The mask
   is a CIDR style bitmask where /0 means no comparison and enforces a match.
  -Omitting the wholly option defaults to 0.0.0.0/0 which allows access from
  -everywhere.  It is possible to specify both inclusive and exclusive addresses,
  +Omitting the wholly option defaults to 0.0.0.0/0 and [::] which allows access from
  +any IPv4 or IPv6 host.  It is possible to specify both inclusive and exclusive addresses,
   the latter have to prefixed with an exclamation mark. In order to pass the ACL
   a client must match any inclusion and not match any exclusion. If you specify
  -exclusions only a fake inclusion of 0.0.0.0/0 is appended internally.  Any
  -addr can be a name to be resolved first.
  +exclusions only, a fake inclusion of 0.0.0.0/0 and [::] is appended internally.  Any
  +addr can be a name which will be resolved on program launch time. MULTI.
   
  -FIXME should we resolv on startup only or for every access or using dns ttl
  -
  -=item B<-b> I<addr>[I<:port>]|C<->|I<path[:perms]> (LMTP daemon bind)
  +=item B<--bind|-b> I<addr>[I<:port>]|C<->|I<path[:perms]> (LMTP daemon bind)
   
   Bind address accepting incoming LMTP connections. Supported are "C<->" for
   stdio, I<path>[:perms] for Unix Domain socket with optional chmod-like
   permissions and I<addr>[I<:port>] for TCP INET socket. Omitting this option
   defaults to stdio. The path for a UNIX domain socket must start with a slash.
  -The addr can be a name to be resolved first.
  +The addr can be a name which will be resolved on program launch time.
  +SINGLE.
   
  -=item B<-c> I<addr>[I<:port>] (NNTP client bind)
  +=item B<--client|-c> I<addr>[I<:port>] (NNTP client bind)
   
   Client connections for outgoing NNTP communication bind to this address. If an
   address is specified but port is omitted the kernel chooses an ephemeral port.
  -If you want to specify a port but no address replace address with all zeroes.
  -If completely omitted, 0.0.0.0:0 is assumed which causes the kernel to choose
  +If you want to specify a port but no address then replace address with all zeroes.
  +If completely omitted, no assumptions are made which causes the kernel to choose
   an address based on routing information and an ephemeral port.  The addr can
  -be a name to be resolved first.
  +be a name which will be resolved on program launch time. SINGLE.
   
  -=item B<-d> I<addr>[I<:port>][,I<addr>[I<:port>], ...] (NNTP client peer)
  +=item B<--destination|-d> I<addr>[I<:port>] (NNTP client destination)
   
   Destination hostname or address and optional TCP port of a NNTP service.
   Unless a port is specified, getserbyname(nntp) is queried with fallback to
  -119/tcp. If C<-d> option is ommited, the environment variable C<NNTPSERVER> is
  -read, if this is undefined or empty C<news> is used and if this doesn't
  -resolve, C<localhost> is assumed.  This option can be specified more than once
  -and it is possible to specify more than one host/ port per option as a
  -comma-separated list.  Any addr can be a name to be resolved first.  It is
  +119/tcp. If C<-d> option is ommited, 
  +C<news> is used and if this doesn't
  +resolve, C<localhost> is assumed.  
  +Any addr can be a name which will be resolved on program launch time. It is
   assumed that multiple servers are used to increase the reliability of the news
   system and to speed up distribution by posting the same article to more than
   one server.  In regard to this program they must provide the same groups and
  -talk to each other. 
  +talk to each other. MULTI.
   
  -=item B<-g> I<groupmode>
  +=item B<--groupmode|-g> I<groupmode>
   
  -Possible values for I<groupmode> are C<arg> (default), C<envelope> and
  +Groupmode configures news group(s).
  +Possible values are C<arg> (default), C<envelope> and
   C<header>. In C<arg> mode, the C<newsgroup>s specified as command line
   arguments are ultimate destinations for the received messages.  Addresses from
   envelope and headers are ignored.  In C<envelope> mode the newsgroup(s) are
  @@ -154,39 +173,98 @@
   C<envelope> and C<header> mode groups must still be specified as command line
   arguments. However, in these modes the command line arguments are filters
   representing allowed groups. Filters can be specified as wildmat's.
  +MULTI.
   
  -=item B<-h> I<header>:<value>
  +=item B<--headerrule|-h> [I<pri>]:[I<regex>]:I<header>:[I<val>]
   
  -Header with value to to be inserted into message before delivery.  This option
  -can be specified more than once.  Useful for specifiying an moderator Email
  -address to all outgoing news messages by applying an "Approved:" header.
  -
  -=item B<-l> I<level>[:I<logfile>]
  -
  -The level measures the degree and importance of output and can be any of
  -PANIC, CRITICAL, ERROR, WARNING, NOTICE, INFO, TRACE or DEBUG. The recommended
  -level for daily operations is NOTICE. The default name for logfile is
  -"logfile".  This program is using the logging library (l2) which is currently
  -under development. An early access snapshot with limited functionality has
  -been included.  Currently the common denominator of usage between lmtp2nntp
  -and l2 is to use logging into a file only. Note that this will change soon as
  -during integration of l2 into lmtp2nntp logging channels for local syslog and
  -a SMTP client were already finished and IRC and NNTP clients are under
  -development.
  +Header rewriting rule. A message received by the LMTP server is split
  +into header and body. The header is further split into a list where the
  +headernames are uniqe keys to access single- or multivalues. The values
  +are kept in sequence as they appeared in the original message. The
  +gateway processes each rule in priority order. Small I<pri> numbers are
  +processed first. The default prioriy is 500.  Each rule can modify a
  +header and thus change the input of the remaining rules.  If a I<regex>
  +is given, the rule processes all currently existing headers that match
  +the regular expression. A new header I<header> with I<val> will be
  +created.  With no I<regex> given, a new header with name I<header> and
  +data I<val> is created.  In both cases, the new header will replace an
  +existing header with the same name. Also, if the name or value ever
  +becomes empty, the header is removed.  Omitting I<regex> and nothing
  +found to replace, the new header will be appended. Processed headers
  +will always be single-valued.  Omitting the I<val> means the (matching)
  +I<header>(s) will be deleted.  The headderrules support PCRE (Perl
  +compatible reguar expression) and if a I<regex> was used, the matching
  +elements are available to I<header> and I<value> as "DOLLAR NUMBER".
  +The I<value> is also processed through a variable expansion library
  +which has access to all command line options, many internal variables
  +and all currently existing headers. The expansion allows powerful
  +constructs like joining multivalues into a single value.  MULTI.
  +
  +Functional diagram:
  +
  +    for each rule
  +        if rule has regex
  +            for each header
  +                if regex matches
  +                    create new header
  +                    expanding regex references into header name
  +                    if headername is empty
  +                        delete header
  +                    if headervalue is empty
  +                        delete header
  +                    expanding regex references into header value
  +                    expanding variables into header value
  +                    if headervalue is empty
  +                        delete header
  +                    replace existing header //FIXME text above
  +        else
  +            create new header
  +            if headervalue is empty
  +                delete header
  +            expanding variables into header value
  +            replace existing or append new header
  +
  +Further reading:
  +
  +- regular expressions see 'pcre' manual page
  +- variable expansion see 'lib_var/var.pod' and 'lib_var/var_play'
  +
  +Variables:
  +
  +The variables use a hierarchical name space scheme. All options are
  +available through '${option.I<optionname>}'. For options of class MULTI
  +this yields the first element. Other elements can be accessed through
  +'${option.I<optionname>[I<index>]}'. All headers can be accessed through
  +'${msg.header.I<headername>}' and again, indexes are supported for
  +multivalued headers.  FIXME functions
  +
  +=item B<--include|-i> I<configfile>
  +
  +Include a configuration file. There is no artifical limitation on the
  +number and levels of configuration files supported. However, no attempt
  +is made to prevent recursion. Order of inclusion matters for SINGLE and
  +FLAG option classes. MULTI.
  +
  +=item B<--l2spec|-l> I<l2spec>
  +
  +L2 channel tree specification.  The full functionality of lib_l2 is
  +exposed to the user, see 'lib_l2/l2.pod' when it becomes available and
  +have a look at the example configuration file in the meantime. SINGLE.
   
  -=item B<-m> I<mailfrom>
  +=item B<--mailfrom|-m> I<regex>
   
  -"MAIL From:" filter to limit sender addresses. If ommitted, anyone can send
  +"Mail From:" envelope restriction to limit sender addresses. If ommitted, anyone can send
   mail. The value to be compared includes the angle brackets. Use a PCRE (Perl
  -compatible reguar expression) for I<mailfrom>.
  +compatible reguar expression) for I<mailfrom>. SINGLE.
   
  -=item B<-n> I<nodename>
  +=item B<--nodename|-n> I<name>
   
   Own FQDN used in LMTP and NNTP protocols. This overrides the nodename returned
  -by uname(3).
  -
  -=item B<-o> I<operationmode>
  +by uname(3). SINGLE.
   
  +=item B<--operationmode|-o> I<abc/a.d.e|post|feed>
  +     
  +Set fake status or operationmode.
   Possible values for I<operationmode> are C<post>, C<feed> or a string in
   "LLL/D.D.D" format used to fake a LMTP return code.  In C<post> mode articles
   are sent to the NNTP server(s) using POST command. Before posting, a duplicate
  @@ -198,47 +276,76 @@
   Delivery not authorized, message refused".  This is useful for debugging LMTP
   setups without engaging NNTP.  Fake mode makes it possible to run without any
   B<-d> option. However, if B<-d> option is given the NNTP client tries to
  -connect but it's return codes are ignored.
  +connect but it's return codes are ignored. SINGLE.
   
  -=item B<-r> I<restrictheader>
  +=item B<--restrictheader|-r> I<regex>
   
  -Restricted headers. Messages with a matching restrictheader are rejected.  If
  -ommitted no restrictions apply. Matching is done before -h headers are
  -appended. Use a PCRE (Perl compatible reguar expression) for
  -I<restrictheader>.
  +Restrict messages by header. Messages with a matching restrictheader are rejected.  If
  +ommitted no restrictions apply. Matching is done before headers are
  +rewritten. Use a PCRE (Perl compatible reguar expression) for
  +I<regex>. SINGLE.
   
  -=item B<-s> I<size>
  +=item B<--size|-s> I<bytes>
   
   Size limitation on message in bytes. Default is 8388608 (8M).
   
  -=item B<-t> I<name>=I<sec>[,I<name>=I<sec>[,...]
  +=item B<--testfile|-t> I<filename>
  +
  +Testfile for headerrule. Allows debugging without LMTP or NNTP activity.
  +The file must be in RFC822 E-Mail format. Use this option for debugging
  +only, it disables both the mail server and news client.
  +
  +=item B<--timeoutlmtp> I<sec>        
  +
  +LMTP server default timeout. Sets timeout for accept, read and write at
  +once.  Setting sec to zero means to wait infinite.  Note that all LMTP
  +timeouts only apply to socket operations, stdio always waits infinite.
  +SINGLE.
  +
  +=item B<--timeoutlmtpaccept> I<sec>
  +
  +LMTP server accept timeout.  Default is 0.SINGLE.
  +
  +=item B<--timeoutlmtpread> I<sec>
  +
  +LMTP server read timeout. Default is 10. SINGLE.
  +
  +=item B<--timeoutlmtpwrite> I<sec>
  +
  +LMTP server write timeout. Default is 10. SINGLE.
  +
  +=item B<--timeoutnntp> I<sec>
  +
  +NNTP client default timeout. Sets timeout for connect, read and write at
  +once.  Setting sec to zero means to wait infinite.  SINGLE.
  +
  +=item B<--timeoutnntpconnect> I<sec>
  +
  +NNTP client connect timeout. Default is 360. SINGLE.
  +
  +=item B<--timeoutnntpread> I<sec>
  +
  +NNTP client read timeout. Default is 60. SINGLE.
   
  -Timeout for various actions. Possible names are C<lmtp> for any LMTP and
  -C<nntp> for any NNTP actions. More granular actions can be specified according
  -to the following table, which also lists the system defaults.  Setting sec to
  -zero means to wait infinite. Note that LMTP timeouts only apply to socket
  -operations, stdio always waits infinite.
  +=item B<--timeoutnntpwrite> I<sec>
   
  -    lmtp:accept  = 0
  -    lmtp:read    = 10
  -    lmtp:write   = 10
  -    nntp:connect = 360
  -    nntp:read    = 60
  -    nntp:write   = 60
  +NNTP client write timeout. Default is 60. SINGLE.
   
  -=item B<-u> I<uid>
  +=item B<--user|-u> I<uid|name>
   
  -UID or login name to resolve to a UID to be set for program execution.
  +User identity to be set for program execution. SINGLE.
   
  -=item B<-v>
  +=item B<--version|-v>
   
  -Print version information.
  +Version information is printed, then program exits. FLAG.
   
  -=item I<newsgroup> [I<newsgroup> ...]
  +=item I<--newsgroup> I<newsgroup|wildmat> [I<newsgroup> ...]
  +=item I<newsgroup|wildmat> [I<newsgroup> ...]
   
  -Newsgroup to post the message to or filter, depending on groupmode.  Multiple
  -groups can be specified.  Crosspostings succeed if delivery to I<any> group
  -succeeds.
  +Newsgroup name or match. Depending on groupmode, this is a newsgroup to
  +post or feed the message to or it is a wildmat filter.
  +Crosspostings succeed if delivery to I<any> group
  +succeeds. MULTI.
   
   =back
   
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.69 -r1.70 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	13 Mar 2002 16:22:09 -0000	1.69
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	18 Apr 2002 13:31:27 -0000	1.70
  @@ -1263,6 +1263,48 @@
       return rc;
   }
   
  +static var_rc_t operate_cb(
  +    var_t *var, void *ctx,
  +    const char  *op_ptr, size_t op_len,
  +    const char  *arg_ptr, size_t arg_len,
  +    const char  *val_ptr, size_t val_len,
  +    char **out_ptr, size_t *out_len, size_t *out_size)
  +{
  +    int i;
  +
  +    if (val_ptr == NULL) {
  +        *out_ptr = "";
  +        *out_len = 0;
  +        *out_size = 0;
  +        return VAR_OK;
  +    }
  +    if (op_len == 6 && strncmp(op_ptr, "return", 6) == 0) {
  +        *out_ptr = malloc(arg_len);
  +        *out_len = arg_len;
  +        *out_size = arg_len;
  +        memcpy(*out_ptr, arg_ptr, arg_len);
  +        return VAR_OK;
  +    }
  +    else if (op_len == 5 && strncmp(op_ptr, "upper", 5) == 0) {
  +        *out_ptr = malloc(val_len);
  +        *out_len = val_len;
  +        *out_size = val_len;
  +        for (i = 0; i < val_len; i++)
  +            (*out_ptr)[i] = (char)toupper((int)(val_ptr[i]));
  +        return VAR_OK;
  +    }
  +    else if (op_len == 5 && strncmp(op_ptr, "lower", 5) == 0) {
  +        *out_ptr = malloc(val_len);
  +        *out_len = val_len;
  +        *out_size = val_len;
  +        for (i = 0; i < val_len; i++)
  +            (*out_ptr)[i] = (char)tolower((int)(val_ptr[i]));
  +        return VAR_OK;
  +    }
  +    else 
  +        return VAR_ERR_UNDEFINED_OPERATION;
  +}
  +
   void msg_headermatrixbuildup(msg_t *msg)
   {
       ex_t ex;
  @@ -1405,6 +1447,10 @@
           logbook(ctx->l2, L2_LEVEL_ERROR, "configure regex callback failed with %s (%d)", var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
           throw(0,0,0);
       }
  +    if ((rc = var_config(ctx->config_varregex, VAR_CONFIG_CB_OPERATION, operate_cb, NULL)) != VAR_OK) {
  +        logbook(ctx->l2, L2_LEVEL_ERROR, "configure operate callback failed with %s (%d)", var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  +        throw(0,0,0);
  +    }
       for (hrI = ctx->option_firstheaderrule; hrI != NULL; hrI = hrI->next) { /* for each rule */
           { //FIXME debug code block
               int i;
  @@ -1476,7 +1522,7 @@
                               logbook(ctx->l2, L2_LEVEL_DEBUG, "expansion result '%s'", res_ptr);
                               cp = res_ptr;
                           }
  -                        /* expanding header and other variables into header value */
  +                        /* expanding variables into header value */
                           if (hrI->val != NULL) {
                               var_rc_t var_rc;
                               char *res_ptr;
  @@ -1515,7 +1561,7 @@
               }
               else {
                   /*FIXME clean up data.m */
  -                /* expanding header and other variables into header value */
  +                /* expanding variables into header value */
                   var_rc_t var_rc;
                   char *res_ptr;
                   logbook(ctx->l2, L2_LEVEL_DEBUG, "expanding variables in header value '%s'", hrI->val);
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 lmtp2nntp_option.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	7 Mar 2002 16:03:56 -0000	1.17
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	18 Apr 2002 13:31:27 -0000	1.18
  @@ -548,35 +548,35 @@
           return OPTION_ERR_ARG;
   
       try {
  -        option_register(o, "childsmax",          'C', OPT_SINGLE,  "10",        "childs to spawn at max",            "childsmax",                  &stdsyntax, "m/\\d+/" ); //"m/[0-9]+/" );
  -        option_register(o, "daemonize",          'D', OPT_FLAG,    NULL,        "detach from terminal",              NULL,                         &stdsyntax, NULL );
  -        option_register(o, "kill",               'K', OPT_FLAG,    NULL,        "kill a previously run daemon",      NULL,                         &stdsyntax, NULL );
  -        option_register(o, "pidfile",            'P', OPT_SINGLE,  NULL,        "file containing pid",               "pidfile",                    &stdsyntax, "m/.*/" );
  -        option_register(o, "acl",                'a', OPT_MULTI,   NULL,        "LMTP server access control list",   "addr[/mask]",                &stdsyntax, "m/.*/" );
  -        option_register(o, "bind",               'b', OPT_SINGLE,  NULL,        "LMTP server bind",                  "addr[:port]|-|path[:perms]", &stdsyntax, "m/.*/" );
  -        option_register(o, "client",             'c', OPT_SINGLE,  NULL,        "NNTP client bind",                  "addr[:port]",                &stdsyntax, "m/.*/" );
  -        option_register(o, "destination",        'd', OPT_MULTI,   NULL,        "NNTP client destination",           "addr[:port]",                &stdsyntax, "m/.*/" );
  -        option_register(o, "groupmode",          'g', OPT_SINGLE,  "arg",       "arg|envelope|header",               "groupmode",                  &stdsyntax, "m/.*/" ); //"m/(arg|envelope|header)/" );
  -        option_register(o, "headerrule",         'h', OPT_MULTI,   NULL,        "header rewriting rule",             "[pri]:[regex]:header:[val]", &stdsyntax, "m/^[0-9]*:.*:.+:.*$/" );
  -        option_register(o, "include",            'i', OPT_MULTI,   NULL,        "configfile to include",             "configfile",                 &includeit, "m/.*/" );
  -        option_register(o, "timeoutlmtp",        NUL, OPT_SINGLE,  NULL,        "LMTP server default timeout",       "sec",                        &stdsyntax, "m/.*/" );
  -        option_register(o, "timeoutlmtpaccept",  NUL, OPT_SINGLE,  "0",         "LMTP server accept timeout",        "sec",                        &stdsyntax, "m/.*/" );
  -        option_register(o, "timeoutlmtpread",    NUL, OPT_SINGLE,  "10",        "LMTP server read timeout",          "sec",                        &stdsyntax, "m/.*/" );
  -        option_register(o, "timeoutlmtpwrite",   NUL, OPT_SINGLE,  "10",        "LMTP server write timeout",         "sec",                        &stdsyntax, "m/.*/" );
  -        option_register(o, "timeoutnntp",        NUL, OPT_SINGLE,  NULL,        "NNTP client default timeout",       "sec",                        &stdsyntax, "m/.*/" );
  -        option_register(o, "timeoutnntpconnect", NUL, OPT_SINGLE,  "360",       "NNTP client connect timeout",       "sec",                        &stdsyntax, "m/.*/" );
  -        option_register(o, "timeoutnntpread",    NUL, OPT_SINGLE,  "60",        "NNTP client read timeout",          "sec",                        &stdsyntax, "m/.*/" );
  -        option_register(o, "timeoutnntpwrite",   NUL, OPT_SINGLE,  "60",        "NNTP client write timeout",         "sec",                        &stdsyntax, "m/.*/" );
  -        option_register(o, "l2spec",             'l', OPT_SINGLE,  NULL,        "L2 channel tree specification",     "l2spec",                     &stdsyntax, "m/.*/" );
  -        option_register(o, "mailfrom",           'm', OPT_SINGLE,  NULL,        "mail from envelope restriction",    "regex",                      &stdsyntax, "m/.*/" );
  -        option_register(o, "nodename",           'n', OPT_SINGLE,  NULL,        "nodename",                          "name",                       &stdsyntax, "m/.*/" );
  -        option_register(o, "operationmode",      'o', OPT_SINGLE,  "553/5.7.1", "fakestatus or operationmode",       "abc/a.d.e|post|feed",        &stdsyntax, "m/.*/" ); //"m/([0-9]{3}\\/[0-9]\\.[0-9]\\.[0-9]|post|feed)/" ); /* 553 = Requested action not taken: mailbox name not allowed, 5.7.1 =  Delivery not authorized, message refused */
  -        option_register(o, "restrictheader",     'r', OPT_SINGLE,  NULL,        "header restriction",                "regex",                      &stdsyntax, "m/.*/" );
  -        option_register(o, "size",               's', OPT_SINGLE,  "8388608",   "maximum message size",              "bytes",                      &stdsyntax, "m/.*/" ); //"m/[0-9]+/" );
  -        option_register(o, "testfile",           't', OPT_MULTI,   NULL,        "testfile for headerrule",           "testfile",                   &stdsyntax, "m/.*/" );
  -        option_register(o, "user",               'u', OPT_SINGLE,  NULL,        "user",                              "uid|name",                   &stdsyntax, "m/.*/" );
  -        option_register(o, "version",            'v', OPT_FLAG,    NULL,        "print version",                     NULL,                         &stdsyntax, NULL );
  -        option_register(o, "newsgroup",          NUL, OPT_MULTI,   NULL,        "article destination",               "newsgroup",                  &stdsyntax, "m/.*/" );
  +        option_register(o, "childsmax",          'C', OPT_SINGLE,  "10",        "Childs the daemon spawns at max.",   "childsmax",                  &stdsyntax, "m/\\d+/" ); //"m/[0-9]+/" );
  +        option_register(o, "daemonize",          'D', OPT_FLAG,    NULL,        "Daemonize and detach from terminal", NULL,                         &stdsyntax, NULL );
  +        option_register(o, "kill",               'K', OPT_FLAG,    NULL,        "Kill a previously run daemon",       NULL,                         &stdsyntax, NULL );
  +        option_register(o, "pidfile",            'P', OPT_SINGLE,  NULL,        "Pidfile holding the process ID",     "filename",                   &stdsyntax, "m/.*/" );
  +        option_register(o, "acl",                'a', OPT_MULTI,   NULL,        "LMTP daemon access control list",    "addr[/mask]",                &stdsyntax, "m/.*/" );
  +        option_register(o, "bind",               'b', OPT_SINGLE,  NULL,        "LMTP daemon bind",                   "addr[:port]|-|path[:perms]", &stdsyntax, "m/.*/" );
  +        option_register(o, "client",             'c', OPT_SINGLE,  NULL,        "NNTP client bind",                   "addr[:port]",                &stdsyntax, "m/.*/" );
  +        option_register(o, "destination",        'd', OPT_MULTI,   NULL,        "NNTP client destination",            "addr[:port]",                &stdsyntax, "m/.*/" );
  +        option_register(o, "groupmode",          'g', OPT_SINGLE,  "arg",       "Groupmode configures news group(s)", "arg|envelope|header",        &stdsyntax, "m/.*/" ); //"m/(arg|envelope|header)/" );
  +        option_register(o, "headerrule",         'h', OPT_MULTI,   NULL,        "Header rewriting rule",              "[pri]:[regex]:header:[val]", &stdsyntax, "m/^[0-9]*:.*:.+:.*$/" );
  +        option_register(o, "include",            'i', OPT_MULTI,   NULL,        "Include a configuration file",       "configfile",                 &includeit, "m/.*/" );
  +        option_register(o, "l2spec",             'l', OPT_SINGLE,  NULL,        "L2 channel tree specification",      "l2spec",                     &stdsyntax, "m/.*/" );
  +        option_register(o, "mailfrom",           'm', OPT_SINGLE,  NULL,        "Mail from envelope restriction",     "regex",                      &stdsyntax, "m/.*/" );
  +        option_register(o, "nodename",           'n', OPT_SINGLE,  NULL,        "System nodename",                    "name",                       &stdsyntax, "m/.*/" );
  +        option_register(o, "operationmode",      'o', OPT_SINGLE,  "553/5.7.1", "Set fake status or operationmode",   "abc/a.d.e|post|feed",        &stdsyntax, "m/.*/" ); //"m/([0-9]{3}\\/[0-9]\\.[0-9]\\.[0-9]|post|feed)/" ); /* 553 = Requested action not taken: mailbox name not allowed, 5.7.1 =  Delivery not authorized, message refused */
  +        option_register(o, "restrictheader",     'r', OPT_SINGLE,  NULL,        "Restrict messages by header",        "regex",                      &stdsyntax, "m/.*/" );
  +        option_register(o, "size",               's', OPT_SINGLE,  "8388608",   "Size limitation on message",         "bytes",                      &stdsyntax, "m/.*/" ); //"m/[0-9]+/" );
  +        option_register(o, "testfile",           't', OPT_MULTI,   NULL,        "Testfile for headerrule",            "filename",                   &stdsyntax, "m/.*/" );
  +        option_register(o, "timeoutlmtp",        NUL, OPT_SINGLE,  NULL,        "LMTP server default timeout",        "sec",                        &stdsyntax, "m/.*/" );
  +        option_register(o, "timeoutlmtpaccept",  NUL, OPT_SINGLE,  "0",         "LMTP server accept timeout",         "sec",                        &stdsyntax, "m/.*/" );
  +        option_register(o, "timeoutlmtpread",    NUL, OPT_SINGLE,  "10",        "LMTP server read timeout",           "sec",                        &stdsyntax, "m/.*/" );
  +        option_register(o, "timeoutlmtpwrite",   NUL, OPT_SINGLE,  "10",        "LMTP server write timeout",          "sec",                        &stdsyntax, "m/.*/" );
  +        option_register(o, "timeoutnntp",        NUL, OPT_SINGLE,  NULL,        "NNTP client default timeout",        "sec",                        &stdsyntax, "m/.*/" );
  +        option_register(o, "timeoutnntpconnect", NUL, OPT_SINGLE,  "360",       "NNTP client connect timeout",        "sec",                        &stdsyntax, "m/.*/" );
  +        option_register(o, "timeoutnntpread",    NUL, OPT_SINGLE,  "60",        "NNTP client read timeout",           "sec",                        &stdsyntax, "m/.*/" );
  +        option_register(o, "timeoutnntpwrite",   NUL, OPT_SINGLE,  "60",        "NNTP client write timeout",          "sec",                        &stdsyntax, "m/.*/" );
  +        option_register(o, "user",               'u', OPT_SINGLE,  NULL,        "User identity",                      "uid|name",                   &stdsyntax, "m/.*/" );
  +        option_register(o, "version",            'v', OPT_FLAG,    NULL,        "Version information",                NULL,                         &stdsyntax, NULL    );
  +        option_register(o, "newsgroup",          NUL, OPT_MULTI,   NULL,        "Newsgroup name or match",            "newsgroup|wildmat",          &stdsyntax, "m/.*/" );
       }
       catch(ex) {
           if (ex.ex_class == option_create)

From ossp-cvs-owner@ossp.org  Thu Apr 18 15:40:33 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 772AD76365; Thu, 18 Apr 2002 15:40:33 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Message-Id: <20020418134033.772AD76365@mail.ossp.org>
Date: Thu, 18 Apr 2002 15:40:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: CVSROOT                          Date:   18-Apr-2002 15:40:33
  Branch: HEAD                             Handle: 2002041814403300

  Modified files:
    CVSROOT                 modules

  Log:
    add OSSP tai

  Summary:
    Revision    Changes     Path
    1.54        +1  -0      CVSROOT/modules
  ____________________________________________________________________________

  Index: CVSROOT/modules
  ============================================================
  $ cvs diff -u -r1.53 -r1.54 modules
  --- CVSROOT/modules	1 Mar 2002 15:30:23 -0000	1.53
  +++ CVSROOT/modules	18 Apr 2002 13:40:33 -0000	1.54
  @@ -78,6 +78,7 @@
   xds             ossp-pkg/xds
   ex              ossp-pkg/ex
   popt            ossp-pkg/popt
  +tai             ossp-pkg/tai
   
   #   the OSSP applications
   eperl           ossp-pkg/eperl

From ossp-cvs-owner@ossp.org  Thu Apr 18 16:08:37 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B999D7635E; Thu, 18 Apr 2002 16:08:37 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp devtool.conf
Message-Id: <20020418140837.B999D7635E@mail.ossp.org>
Date: Thu, 18 Apr 2002 16:08:37 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   18-Apr-2002 16:08:37
  Branch: HEAD                             Handle: 2002041815083700

  Modified files:
    ossp-pkg/lmtp2nntp      devtool.conf

  Log:
    absorb lib_tai

  Summary:
    Revision    Changes     Path
    1.8         +3  -3      ossp-pkg/lmtp2nntp/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/devtool.conf
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 devtool.conf
  --- ossp-pkg/lmtp2nntp/devtool.conf	14 Mar 2002 16:07:38 -0000	1.7
  +++ ossp-pkg/lmtp2nntp/devtool.conf	18 Apr 2002 14:08:37 -0000	1.8
  @@ -3,7 +3,7 @@
   ##
   
   %checkout
  -    for name in ex str l2 sa var val popt pcre; do
  +    for name in ex str l2 sa var val popt pcre tai; do
           echo "===> lib_${name} (cvs co)"
           cvs co -d lib_${name} ${name}
           echo "<=== lib_${name}"
  @@ -13,7 +13,7 @@
       @autogen shtool   1.6.0 "1.6.*" all
       @autogen autoconf 2.53  "2.5[3-9]*"
   
  -    for name in ex str l2 sa var val popt pcre; do
  +    for name in ex str l2 sa var val popt pcre tai; do
           echo "===> lib_${name} (devtool autogen)"
           (cd lib_${name} && ./devtool autogen)
           echo "<=== lib_${name}"
  @@ -23,7 +23,7 @@
       @autoclean shtool
       @autoclean autoconf
   
  -    for name in ex str l2 sa var val popt pcre; do
  +    for name in ex str l2 sa var val popt pcre tai; do
           echo "===> lib_${name} (devtool autoclean)"
           (cd lib_${name} && ./devtool autoclean)
           echo "<=== lib_${name}"

From ossp-cvs-owner@ossp.org  Thu Apr 18 16:09:26 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 397617635E; Thu, 18 Apr 2002 16:09:26 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c lmtp2nntp_msg.c
Message-Id: <20020418140926.397617635E@mail.ossp.org>
Date: Thu, 18 Apr 2002 16:09:26 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   18-Apr-2002 16:09:26
  Branch: HEAD                             Handle: 2002041815092500

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c lmtp2nntp_msg.c

  Log:
    no change, only a code move

  Summary:
    Revision    Changes     Path
    1.71        +0  -461    ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.5         +463 -0     ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.70 -r1.71 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	18 Apr 2002 13:31:27 -0000	1.70
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	18 Apr 2002 14:09:25 -0000	1.71
  @@ -1161,464 +1161,3 @@
       return;
   }
   
  -static void headerdestroy(headerdata_t *hdC)
  -{
  -    int i;
  -
  -    if (hdC->ndata > 1) {
  -        for (i = 0; i < hdC->ndata; i++) {
  -            if (hdC->data.m[i] == NULL)
  -                break;
  -            free(hdC->data.m[i]);
  -        }
  -        free (hdC->data.m);
  -    } else
  -    if (hdC->ndata == 1)
  -        if (hdC->data.s != NULL)
  -            free(hdC->data.s);
  -    if (hdC->name != NULL)
  -        free(hdC->name);
  -    if (hdC->prev != NULL && hdC->prev->next == hdC)
  -        throw(0,0,0);
  -    if (hdC->next != NULL && hdC->next->prev == hdC)
  -        throw(0,0,0);
  -    free(hdC);
  -}
  -
  -static void headerdelete(headerdata_t *hdC)
  -{
  -    if (hdC->prev != NULL)
  -        hdC->prev->next = hdC->next;
  -    hdC->next = NULL;
  -    if (hdC->next != NULL)
  -        hdC->next->prev = hdC->prev;
  -    hdC->prev = NULL;
  -    headerdestroy(hdC);
  -}
  -
  -static void headerreplace(headerdata_t *hdC, headerdata_t *hdNew)
  -{
  -    hdNew->prev = hdC->prev;
  -    hdC->prev = NULL;
  -    hdNew->next = hdC->next;
  -    hdC->next = NULL;
  -    if (hdNew->prev != NULL)
  -        hdNew->prev->next = hdNew;
  -    if (hdNew->next != NULL)
  -        hdNew->next->prev = hdNew;
  -    headerdestroy(hdC);
  -}
  -
  -static headerdata_t *headercreate(void)
  -{
  -    ex_t ex;
  -    volatile headerdata_t *hdNew = NULL;
  -    try {
  -        hdNew = mallocex(sizeof(headerdata_t));
  -        hdNew->prev  = NULL;
  -        hdNew->next  = NULL;
  -        hdNew->name  = NULL;
  -        hdNew->ndata = 0;
  -    }
  -    catch (ex) {
  -        if (hdNew != NULL)
  -            free((headerdata_t *)hdNew);
  -        rethrow;
  -    }
  -    return (headerdata_t *)hdNew;
  -}
  -
  -struct regex_ctx_st; //FIXME go into a header!
  -typedef struct regex_ctx_st regex_ctx_t;
  -struct regex_ctx_st {
  -    int            nMatch;
  -    const char   **acpMatch;
  -    l2_env_t      *l2_env;
  -    l2_channel_t  *l2;
  -};
  -
  -static var_rc_t regex_lookup(
  -    var_t *var, void *_ctx, 
  -    const char *var_ptr, size_t var_len, int var_idx,
  -    const char **val_ptr, size_t *val_len, size_t *val_size)
  -{
  -    regex_ctx_t *ctx = (regex_ctx_t *)_ctx;
  -    var_rc_t rc;
  -    char *cp;
  -    int i;
  -
  -    logbook(ctx->l2, L2_LEVEL_DEBUG, "rgx_lookup variable \"%s\" (%d)", var_ptr, var_len);
  -    rc = VAR_ERR_UNDEFINED_VARIABLE;
  -    i = atoi(var_ptr); /* works with both '}' and '\0' termination */
  -    if (i < ctx->nMatch) {
  -        *val_ptr = ctx->acpMatch[i];
  -        *val_len = strlen(ctx->acpMatch[i]);
  -        *val_size = 0;
  -        rc = VAR_OK;
  -    }
  -    if (rc == VAR_OK)
  -        logbook(ctx->l2, L2_LEVEL_DEBUG, "rgx_lookup variable \"%s\" (%d) ok: result is \"%s\" (%d)", var_ptr, var_len, *val_ptr, *val_len);
  -    else
  -        logbook(ctx->l2, L2_LEVEL_DEBUG, "rgx_lookup variable \"%s\" (%d) failed: %s (%d)", var_ptr, var_len, var_strerror(var, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  -    return rc;
  -}
  -
  -static var_rc_t operate_cb(
  -    var_t *var, void *ctx,
  -    const char  *op_ptr, size_t op_len,
  -    const char  *arg_ptr, size_t arg_len,
  -    const char  *val_ptr, size_t val_len,
  -    char **out_ptr, size_t *out_len, size_t *out_size)
  -{
  -    int i;
  -
  -    if (val_ptr == NULL) {
  -        *out_ptr = "";
  -        *out_len = 0;
  -        *out_size = 0;
  -        return VAR_OK;
  -    }
  -    if (op_len == 6 && strncmp(op_ptr, "return", 6) == 0) {
  -        *out_ptr = malloc(arg_len);
  -        *out_len = arg_len;
  -        *out_size = arg_len;
  -        memcpy(*out_ptr, arg_ptr, arg_len);
  -        return VAR_OK;
  -    }
  -    else if (op_len == 5 && strncmp(op_ptr, "upper", 5) == 0) {
  -        *out_ptr = malloc(val_len);
  -        *out_len = val_len;
  -        *out_size = val_len;
  -        for (i = 0; i < val_len; i++)
  -            (*out_ptr)[i] = (char)toupper((int)(val_ptr[i]));
  -        return VAR_OK;
  -    }
  -    else if (op_len == 5 && strncmp(op_ptr, "lower", 5) == 0) {
  -        *out_ptr = malloc(val_len);
  -        *out_len = val_len;
  -        *out_size = val_len;
  -        for (i = 0; i < val_len; i++)
  -            (*out_ptr)[i] = (char)tolower((int)(val_ptr[i]));
  -        return VAR_OK;
  -    }
  -    else 
  -        return VAR_ERR_UNDEFINED_OPERATION;
  -}
  -
  -void msg_headermatrixbuildup(msg_t *msg)
  -{
  -    ex_t ex;
  -    volatile headerdata_t *hdNew = NULL;
  -    try {
  -        headerdata_t *hdI, *hdP;
  -        char *cp;
  -
  -        cp = NULL;
  -        while ((cp = argz_next(msg->azHeaders, msg->asHeaders, cp)) != NULL) { /* for each message header */
  -
  -            /*FIXME we want O(1) here */
  -            for (hdP = NULL, hdI = msg->hdFirst; hdI != NULL; hdP = hdI, hdI = hdI->next) { /* for each matrix header */
  -                if (hdI->name == NULL || strlen(hdI->name) == 0 || hdI->ndata == 0)
  -                    continue;
  -                if (strcasecmp(cp, hdI->name) == 0)
  -                    break;
  -            }
  -
  -            if (hdI == NULL) {
  -                hdNew = headercreate(); /* not found, create new */
  -                hdNew->name = strdupex(cp);
  -                hdI = (headerdata_t *)hdNew; hdNew = NULL; /* ex cleanup */
  -                if (hdP == NULL)
  -                    msg->hdFirst = hdI; /* no previous? this is the first */
  -                else {
  -                    hdP->next = hdI;
  -                    hdI->prev = hdP;
  -                }
  -            }
  -            cp = argz_next(msg->azHeaders, msg->asHeaders, cp);
  -            if (hdI->ndata == 0) {
  -                logbook(msg->l2, L2_LEVEL_DEBUG, "header=%s, currently empty", hdI->name);
  -                hdI->data.s = strdupex(cp);
  -                hdI->ndata = 1;
  -            }
  -            else if(hdI->ndata == 1) {
  -                char *cpOld;
  -                cpOld = hdI->data.s;
  -                logbook(msg->l2, L2_LEVEL_DEBUG, "header=%s, currently single valued", hdI->name);
  -                hdI->data.m = (char **)mallocex(3 * sizeof(char *));
  -                hdI->data.m[0] = strdupex(cpOld); //FIXME
  -                hdI->data.m[1] = strdupex(cp);
  -                hdI->data.m[2] = NULL;
  -                hdI->ndata = 2;
  -            }
  -            else {
  -                logbook(msg->l2, L2_LEVEL_DEBUG, "header=%s, currently multi valued %d", hdI->name, hdI->ndata);
  -                hdI->data.m = (char **)reallocex(hdI->data.m, (hdI->ndata + 2) * sizeof(char *));
  -                hdI->data.m[hdI->ndata++] = strdupex(cp);
  -                hdI->data.m[hdI->ndata] = NULL;
  -            }
  -        }
  -    }
  -    cleanup {
  -        if (hdNew != NULL)
  -            free((headerdata_t *)hdNew);
  -    }
  -    catch(ex) {
  -        rethrow;
  -    }
  -}
  -
  -void msg_headermatrixteardwn(msg_t *msg)
  -{
  -    ex_t ex;
  -    try {
  -        headerdata_t *hdI;
  -
  -        if (msg->azHeaders != NULL)
  -            free(msg->azHeaders);
  -        msg->azHeaders = NULL;
  -        msg->asHeaders = 0;
  -
  -        for (hdI = msg->hdFirst; hdI != NULL; hdI = hdI->next) { /* for each matrix header */
  -            logbook(msg->l2, L2_LEVEL_DEBUG, "FIXME trace loop hdI=%.8lx, hI->name=\"%s\"", hdI, hdI->name);
  -            if (hdI->name == NULL || strlen(hdI->name) == 0 || hdI->ndata == 0)
  -                continue;
  -            if (hdI->ndata == 0) {
  -                logbook(msg->l2, L2_LEVEL_DEBUG, "header=%s, no data", hdI->name);
  -            }
  -            else if(hdI->ndata == 1) { /* header data is single valued */
  -                logbook(msg->l2, L2_LEVEL_DEBUG, "header=%s, data=%s", hdI->name, hdI->data.s);
  -                argz_add(&msg->azHeaders, &msg->asHeaders, hdI->name);
  -                argz_add(&msg->azHeaders, &msg->asHeaders, hdI->data.s);
  -            }
  -            else { /* header data is multi valued */
  -                int i;
  -                for (i = 0; i < hdI->ndata; i++) {
  -                    logbook(msg->l2, L2_LEVEL_DEBUG, "header=%s[%d], data=%s", hdI->name, i, hdI->data.m[i]);
  -                    argz_add(&msg->azHeaders, &msg->asHeaders, hdI->name);
  -                    argz_add(&msg->azHeaders, &msg->asHeaders, hdI->data.m[i]);
  -                }
  -            }
  -        }
  -    }
  -    catch(ex) {
  -        rethrow;
  -    }
  -}
  -
  -void headerrewrite(lmtp2nntp_t *ctx)
  -{
  -    headerrule_t *hrI;
  -    headerdata_t *hdI, *hdNew;
  -    regex_ctx_t *regex_ctx;
  -#define OVECSIZE 30
  -    int            ovec[OVECSIZE];
  -    var_rc_t rc; char *cp; //FIXME what a bad name, it's not the returncode of this function
  -
  -    /* short circuit in case no headerrules were set up */
  -    if (ctx->option_firstheaderrule == NULL)
  -        return;
  -
  -    { //FIXME debug code block
  -        int i;
  -        headerrule_t *hrD;
  -        headerdata_t *hdD;
  -
  -        logbook(ctx->l2, L2_LEVEL_DEBUG, "FIXME trace ---------- headerrewrite() ----------");
  -        for (hrD = ctx->option_firstheaderrule; hrD != NULL; hrD = hrD->next)
  -            logbook(ctx->l2, L2_LEVEL_DEBUG, "hrD->header=%s", hrD->header);
  -        for (hdD = ctx->msg->hdFirst; hdD != NULL; hdD = hdD->next) {
  -            if (hdD->ndata == 0)
  -                logbook(ctx->l2, L2_LEVEL_DEBUG, "hdD->name=%s: (NO DATA)", hdD->name);
  -            if (hdD->ndata == 1)
  -                logbook(ctx->l2, L2_LEVEL_DEBUG, "hdD->name:hdD->data.s    %s %s", hdD->name, hdD->data.s);
  -            if (hdD->ndata > 1)
  -                for (i = 0; i < hdD->ndata; i++)
  -                    logbook(ctx->l2, L2_LEVEL_DEBUG, "hdD->name:hdD->data.m[%d] %s %s", i, hdD->name, hdD->data.m[i]);
  -        }
  -    }
  -    
  -    regex_ctx = (regex_ctx_t *)mallocex(sizeof(regex_ctx_t));
  -    regex_ctx->nMatch = 0;
  -    regex_ctx->acpMatch = NULL;
  -    regex_ctx->l2_env = ctx->l2_env;
  -    regex_ctx->l2 = ctx->l2;
  -    if ((rc = var_config(ctx->config_varregex, VAR_CONFIG_CB_VALUE, regex_lookup, regex_ctx)) != VAR_OK) {
  -        logbook(ctx->l2, L2_LEVEL_ERROR, "configure regex callback failed with %s (%d)", var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  -        throw(0,0,0);
  -    }
  -    if ((rc = var_config(ctx->config_varregex, VAR_CONFIG_CB_OPERATION, operate_cb, NULL)) != VAR_OK) {
  -        logbook(ctx->l2, L2_LEVEL_ERROR, "configure operate callback failed with %s (%d)", var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  -        throw(0,0,0);
  -    }
  -    for (hrI = ctx->option_firstheaderrule; hrI != NULL; hrI = hrI->next) { /* for each rule */
  -        { //FIXME debug code block
  -            int i;
  -            headerrule_t *hrD;
  -            headerdata_t *hdD;
  -
  -            logbook(ctx->l2, L2_LEVEL_DEBUG, "FIXME trace ---------- headerrewrite() ---------- MIDDLE");
  -            for (hrD = ctx->option_firstheaderrule; hrD != NULL; hrD = hrD->next)
  -                logbook(ctx->l2, L2_LEVEL_DEBUG, "hrD->header=%s", hrD->header);
  -            for (hdD = ctx->msg->hdFirst; hdD != NULL; hdD = hdD->next) {
  -                //logbook(ctx->l2, L2_LEVEL_DEBUG, "hdD=%.8lx, hdD->name=%.8lx, hdD->data.s=%.8lx", (long)hdD, (long)&hdD->name, (long)&hdD->data.s);
  -                if (hdD->ndata == 0)
  -                    logbook(ctx->l2, L2_LEVEL_DEBUG, "hdD->name=%s: (NO DATA)", hdD->name);
  -                if (hdD->ndata == 1)
  -                    logbook(ctx->l2, L2_LEVEL_DEBUG, "hdD->name:hdD->data.s    %s %s", hdD->name, hdD->data.s);
  -                if (hdD->ndata > 1)
  -                    for (i = 0; i < hdD->ndata; i++)
  -                        logbook(ctx->l2, L2_LEVEL_DEBUG, "hdD->name:hdD->data.m[%d] %s %s", i, hdD->name, hdD->data.m[i]);
  -            }
  -        }
  -        if (hrI->regex != NULL) {
  -            logbook(ctx->l2, L2_LEVEL_DEBUG, "rule has regex %s", hrI->regex);
  -            for (hdI = ctx->msg->hdFirst; hdI != NULL; hdI = hdI->next) { /* for each header */
  -                if (hdI->name == NULL || strlen(hdI->name) == 0 || hdI->ndata == 0)
  -                    continue;
  -                regex_ctx->nMatch = pcre_exec(hrI->pcreRegex, hrI->pcreExtra, hdI->name, strlen(hdI->name), 0, 0, ovec, OVECSIZE);
  -                if (regex_ctx->nMatch >= 1) {
  -                    int i;
  -                    char *cp;
  -                    logbook(ctx->l2, L2_LEVEL_DEBUG, "regex matches, %d references", regex_ctx->nMatch);
  -                    pcre_get_substring_list(hdI->name, ovec, regex_ctx->nMatch, &regex_ctx->acpMatch);
  -                    if (regex_ctx->acpMatch != NULL)
  -                        for (i = 0; i < regex_ctx->nMatch; i++)
  -                            logbook(ctx->l2, L2_LEVEL_DEBUG, "regex reference[%d]=\'%s\'", i, regex_ctx->acpMatch[i] == NULL ? "(UNDEFINED)" : regex_ctx->acpMatch[i]);
  -                    hdNew = headercreate();
  -                    /* expanding regex references into header name */
  -                    {
  -                        var_rc_t var_rc;
  -                        char *res_ptr;
  -                        logbook(ctx->l2, L2_LEVEL_DEBUG, "expanding regex references in headername '%s'", hrI->header);
  -                        if ((var_rc = var_expand(ctx->config_varregex, hrI->header, strlen(hrI->header), &res_ptr, NULL, FALSE)) != VAR_OK) {
  -                            logbook(ctx->l2, L2_LEVEL_ERROR, "expansion of '%s' failed: %s", hrI->header, var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  -                        }
  -                        logbook(ctx->l2, L2_LEVEL_DEBUG, "expansion result '%s'", res_ptr);
  -                        if (strlen(res_ptr) == 0) {
  -                            logbook(ctx->l2, L2_LEVEL_DEBUG, "marking deleted - emtpy headername");
  -                            hdNew->name = NULL; //FIXME rename ->header to ->name
  -                            /*FIXME clean up data.s and data.m */
  -                            hdNew->ndata = 0;
  -                        }
  -                        else {
  -                            hdNew->name = res_ptr; //FIXME rename ->header to ->name
  -                        }
  -                    }
  -                    if (hrI->val == NULL) {
  -                        logbook(ctx->l2, L2_LEVEL_DEBUG, "marking deleted - empty headervalue before expansion");
  -                        /*FIXME clean up data.s and data.m */
  -                        hdNew->ndata = 0;
  -                    }
  -                    else {
  -                        /* expanding regex references into header value */
  -                        {
  -                            var_rc_t var_rc;
  -                            char *res_ptr;
  -                            logbook(ctx->l2, L2_LEVEL_DEBUG, "expanding regex references in header value '%s'", hrI->val);
  -                            if ((var_rc = var_expand(ctx->config_varregex, hrI->val, strlen(hrI->val), &res_ptr, NULL, FALSE)) != VAR_OK) {
  -                                logbook(ctx->l2, L2_LEVEL_ERROR, "expansion of '%s' failed: %s", hrI->val, var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  -                            }
  -                            logbook(ctx->l2, L2_LEVEL_DEBUG, "expansion result '%s'", res_ptr);
  -                            cp = res_ptr;
  -                        }
  -                        /* expanding variables into header value */
  -                        if (hrI->val != NULL) {
  -                            var_rc_t var_rc;
  -                            char *res_ptr;
  -                            logbook(ctx->l2, L2_LEVEL_DEBUG, "expanding variables in header value '%s'", hrI->val);
  -                            if ((var_rc = var_expand(ctx->config_varctx, cp, strlen(cp), &res_ptr, NULL, FALSE)) != VAR_OK) {
  -                                logbook(ctx->l2, L2_LEVEL_ERROR, "expansion of '%s' failed: %s", cp, var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  -                            }
  -                            logbook(ctx->l2, L2_LEVEL_DEBUG, "expansion result '%s'", res_ptr);
  -                            if (strlen(res_ptr) == 0) {
  -                                logbook(ctx->l2, L2_LEVEL_DEBUG, "marking deleted - empty headervalue after expansion");
  -                                /*FIXME clean up data.s and data.m */
  -                                hdNew->ndata = 0;
  -                            }
  -                            else {
  -                                hdNew->data.s = res_ptr;
  -                                hdNew->ndata = 1;
  -                            }
  -                        }
  -                    }
  -                    /*FIXME clean up data.m */
  -                    headerreplace(hdI, hdNew);
  -                    if (hdNew->prev == NULL)
  -                        ctx->msg->hdFirst = hdNew;
  -                    hdI = hdNew;
  -                }
  -            }
  -        }
  -        else {
  -            logbook(ctx->l2, L2_LEVEL_DEBUG, "rule has no regex but static header %s", hrI->header);
  -            hdNew = headercreate();
  -            hdNew->name = strdupex(hrI->header); //FIXME rename ->header to ->name
  -            if (hrI->val == NULL) {
  -                logbook(ctx->l2, L2_LEVEL_DEBUG, "marking deleted");
  -                /*FIXME clean up data.s and data.m */
  -                hdNew->ndata = 0;
  -            }
  -            else {
  -                /*FIXME clean up data.m */
  -                /* expanding variables into header value */
  -                var_rc_t var_rc;
  -                char *res_ptr;
  -                logbook(ctx->l2, L2_LEVEL_DEBUG, "expanding variables in header value '%s'", hrI->val);
  -                if ((var_rc = var_expand(ctx->config_varctx, hrI->val, strlen(hrI->val), &res_ptr, NULL, FALSE)) != VAR_OK) {
  -                    logbook(ctx->l2, L2_LEVEL_ERROR, "expansion of '%s' failed: %s", hrI->val, var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  -                }
  -                logbook(ctx->l2, L2_LEVEL_DEBUG, "expansion result '%s'", res_ptr);
  -                if (strlen(res_ptr) == 0) {
  -                    logbook(ctx->l2, L2_LEVEL_DEBUG, "marking deleted - empty headervalue after expansion");
  -                    /*FIXME clean up data.s and data.m */
  -                    hdNew->ndata = 0;
  -                }
  -                else {
  -                    hdNew->data.s = res_ptr;
  -                    hdNew->ndata = 1;
  -                }
  -            }
  -            for (hdI = ctx->msg->hdFirst; hdI != NULL; hdI = hdI->next) { /* for each header */
  -                if (hdI->name == NULL || strlen(hdI->name) == 0)
  -                    continue;
  -                logbook(ctx->l2, L2_LEVEL_DEBUG, "hrI->header=%s, hdI->name=%s", hrI->header, hdI->name);
  -                if (strcasecmp(hrI->header, hdI->name) == 0)
  -                    break;
  -            }
  -            if (hdI != NULL) {
  -                logbook(ctx->l2, L2_LEVEL_DEBUG, "replacing header %s", hrI->header);
  -                headerreplace(hdI, hdNew);
  -                if (hdNew->prev == NULL) {
  -                    logbook(ctx->l2, L2_LEVEL_DEBUG, "FIXME trace #1");
  -                    ctx->msg->hdFirst = hdNew;
  -                }
  -            }
  -            else {
  -                logbook(ctx->l2, L2_LEVEL_DEBUG, "appending header %s", hrI->header);
  -                for (hdI = ctx->msg->hdFirst; hdI->next != NULL; hdI = hdI->next);
  -                hdI->next = hdNew;
  -                hdNew->prev = hdI;
  -            }
  -        }
  -    }
  -
  -    { //FIXME debug code block
  -        int i;
  -        headerrule_t *hrD;
  -        headerdata_t *hdD;
  -
  -        logbook(ctx->l2, L2_LEVEL_DEBUG, "FIXME trace ---------- headerrewrite() ---------- FINISH");
  -        for (hrD = ctx->option_firstheaderrule; hrD != NULL; hrD = hrD->next)
  -            logbook(ctx->l2, L2_LEVEL_DEBUG, "hrD->header=%s", hrD->header);
  -        for (hdD = ctx->msg->hdFirst; hdD != NULL; hdD = hdD->next) {
  -            if (hdD->ndata == 0)
  -                logbook(ctx->l2, L2_LEVEL_DEBUG, "hdD->name=%s: (NO DATA)", hdD->name);
  -            if (hdD->ndata == 1)
  -                logbook(ctx->l2, L2_LEVEL_DEBUG, "hdD->name:hdD->data.s    %s %s", hdD->name, hdD->data.s);
  -            if (hdD->ndata > 1)
  -                for (i = 0; i < hdD->ndata; i++)
  -                    logbook(ctx->l2, L2_LEVEL_DEBUG, "hdD->name:hdD->data.m[%d] %s %s", i, hdD->name, hdD->data.m[i]);
  -        }
  -    }
  -}
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 lmtp2nntp_msg.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	13 Mar 2002 14:41:13 -0000	1.4
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	18 Apr 2002 14:09:25 -0000	1.5
  @@ -460,3 +460,466 @@
       return str;
   }
   
  +    //FIXME below is the header rewriting engine which must be cleaned up and integrated
  +
  +static void headerdestroy(headerdata_t *hdC)
  +{
  +    int i;
  +
  +    if (hdC->ndata > 1) {
  +        for (i = 0; i < hdC->ndata; i++) {
  +            if (hdC->data.m[i] == NULL)
  +                break;
  +            free(hdC->data.m[i]);
  +        }
  +        free (hdC->data.m);
  +    } else
  +    if (hdC->ndata == 1)
  +        if (hdC->data.s != NULL)
  +            free(hdC->data.s);
  +    if (hdC->name != NULL)
  +        free(hdC->name);
  +    if (hdC->prev != NULL && hdC->prev->next == hdC)
  +        throw(0,0,0);
  +    if (hdC->next != NULL && hdC->next->prev == hdC)
  +        throw(0,0,0);
  +    free(hdC);
  +}
  +
  +static void headerdelete(headerdata_t *hdC)
  +{
  +    if (hdC->prev != NULL)
  +        hdC->prev->next = hdC->next;
  +    hdC->next = NULL;
  +    if (hdC->next != NULL)
  +        hdC->next->prev = hdC->prev;
  +    hdC->prev = NULL;
  +    headerdestroy(hdC);
  +}
  +
  +static void headerreplace(headerdata_t *hdC, headerdata_t *hdNew)
  +{
  +    hdNew->prev = hdC->prev;
  +    hdC->prev = NULL;
  +    hdNew->next = hdC->next;
  +    hdC->next = NULL;
  +    if (hdNew->prev != NULL)
  +        hdNew->prev->next = hdNew;
  +    if (hdNew->next != NULL)
  +        hdNew->next->prev = hdNew;
  +    headerdestroy(hdC);
  +}
  +
  +static headerdata_t *headercreate(void)
  +{
  +    ex_t ex;
  +    volatile headerdata_t *hdNew = NULL;
  +    try {
  +        hdNew = mallocex(sizeof(headerdata_t));
  +        hdNew->prev  = NULL;
  +        hdNew->next  = NULL;
  +        hdNew->name  = NULL;
  +        hdNew->ndata = 0;
  +    }
  +    catch (ex) {
  +        if (hdNew != NULL)
  +            free((headerdata_t *)hdNew);
  +        rethrow;
  +    }
  +    return (headerdata_t *)hdNew;
  +}
  +
  +struct regex_ctx_st; //FIXME go into a header!
  +typedef struct regex_ctx_st regex_ctx_t;
  +struct regex_ctx_st {
  +    int            nMatch;
  +    const char   **acpMatch;
  +    l2_env_t      *l2_env;
  +    l2_channel_t  *l2;
  +};
  +
  +static var_rc_t regex_lookup(
  +    var_t *var, void *_ctx, 
  +    const char *var_ptr, size_t var_len, int var_idx,
  +    const char **val_ptr, size_t *val_len, size_t *val_size)
  +{
  +    regex_ctx_t *ctx = (regex_ctx_t *)_ctx;
  +    var_rc_t rc;
  +    char *cp;
  +    int i;
  +
  +    logbook(ctx->l2, L2_LEVEL_DEBUG, "rgx_lookup variable \"%s\" (%d)", var_ptr, var_len);
  +    rc = VAR_ERR_UNDEFINED_VARIABLE;
  +    i = atoi(var_ptr); /* works with both '}' and '\0' termination */
  +    if (i < ctx->nMatch) {
  +        *val_ptr = ctx->acpMatch[i];
  +        *val_len = strlen(ctx->acpMatch[i]);
  +        *val_size = 0;
  +        rc = VAR_OK;
  +    }
  +    if (rc == VAR_OK)
  +        logbook(ctx->l2, L2_LEVEL_DEBUG, "rgx_lookup variable \"%s\" (%d) ok: result is \"%s\" (%d)", var_ptr, var_len, *val_ptr, *val_len);
  +    else
  +        logbook(ctx->l2, L2_LEVEL_DEBUG, "rgx_lookup variable \"%s\" (%d) failed: %s (%d)", var_ptr, var_len, var_strerror(var, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  +    return rc;
  +}
  +
  +static var_rc_t operate_cb(
  +    var_t *var, void *ctx,
  +    const char  *op_ptr, size_t op_len,
  +    const char  *arg_ptr, size_t arg_len,
  +    const char  *val_ptr, size_t val_len,
  +    char **out_ptr, size_t *out_len, size_t *out_size)
  +{
  +    int i;
  +
  +    if (val_ptr == NULL) {
  +        *out_ptr = "";
  +        *out_len = 0;
  +        *out_size = 0;
  +        return VAR_OK;
  +    }
  +    if (op_len == 6 && strncmp(op_ptr, "return", 6) == 0) {
  +        *out_ptr = malloc(arg_len);
  +        *out_len = arg_len;
  +        *out_size = arg_len;
  +        memcpy(*out_ptr, arg_ptr, arg_len);
  +        return VAR_OK;
  +    }
  +    else if (op_len == 5 && strncmp(op_ptr, "upper", 5) == 0) {
  +        *out_ptr = malloc(val_len);
  +        *out_len = val_len;
  +        *out_size = val_len;
  +        for (i = 0; i < val_len; i++)
  +            (*out_ptr)[i] = (char)toupper((int)(val_ptr[i]));
  +        return VAR_OK;
  +    }
  +    else if (op_len == 5 && strncmp(op_ptr, "lower", 5) == 0) {
  +        *out_ptr = malloc(val_len);
  +        *out_len = val_len;
  +        *out_size = val_len;
  +        for (i = 0; i < val_len; i++)
  +            (*out_ptr)[i] = (char)tolower((int)(val_ptr[i]));
  +        return VAR_OK;
  +    }
  +    else 
  +        return VAR_ERR_UNDEFINED_OPERATION;
  +}
  +
  +void msg_headermatrixbuildup(msg_t *msg)
  +{
  +    ex_t ex;
  +    volatile headerdata_t *hdNew = NULL;
  +    try {
  +        headerdata_t *hdI, *hdP;
  +        char *cp;
  +
  +        cp = NULL;
  +        while ((cp = argz_next(msg->azHeaders, msg->asHeaders, cp)) != NULL) { /* for each message header */
  +
  +            /*FIXME we want O(1) here */
  +            for (hdP = NULL, hdI = msg->hdFirst; hdI != NULL; hdP = hdI, hdI = hdI->next) { /* for each matrix header */
  +                if (hdI->name == NULL || strlen(hdI->name) == 0 || hdI->ndata == 0)
  +                    continue;
  +                if (strcasecmp(cp, hdI->name) == 0)
  +                    break;
  +            }
  +
  +            if (hdI == NULL) {
  +                hdNew = headercreate(); /* not found, create new */
  +                hdNew->name = strdupex(cp);
  +                hdI = (headerdata_t *)hdNew; hdNew = NULL; /* ex cleanup */
  +                if (hdP == NULL)
  +                    msg->hdFirst = hdI; /* no previous? this is the first */
  +                else {
  +                    hdP->next = hdI;
  +                    hdI->prev = hdP;
  +                }
  +            }
  +            cp = argz_next(msg->azHeaders, msg->asHeaders, cp);
  +            if (hdI->ndata == 0) {
  +                logbook(msg->l2, L2_LEVEL_DEBUG, "header=%s, currently empty", hdI->name);
  +                hdI->data.s = strdupex(cp);
  +                hdI->ndata = 1;
  +            }
  +            else if(hdI->ndata == 1) {
  +                char *cpOld;
  +                cpOld = hdI->data.s;
  +                logbook(msg->l2, L2_LEVEL_DEBUG, "header=%s, currently single valued", hdI->name);
  +                hdI->data.m = (char **)mallocex(3 * sizeof(char *));
  +                hdI->data.m[0] = strdupex(cpOld); //FIXME
  +                hdI->data.m[1] = strdupex(cp);
  +                hdI->data.m[2] = NULL;
  +                hdI->ndata = 2;
  +            }
  +            else {
  +                logbook(msg->l2, L2_LEVEL_DEBUG, "header=%s, currently multi valued %d", hdI->name, hdI->ndata);
  +                hdI->data.m = (char **)reallocex(hdI->data.m, (hdI->ndata + 2) * sizeof(char *));
  +                hdI->data.m[hdI->ndata++] = strdupex(cp);
  +                hdI->data.m[hdI->ndata] = NULL;
  +            }
  +        }
  +    }
  +    cleanup {
  +        if (hdNew != NULL)
  +            free((headerdata_t *)hdNew);
  +    }
  +    catch(ex) {
  +        rethrow;
  +    }
  +}
  +
  +void msg_headermatrixteardwn(msg_t *msg)
  +{
  +    ex_t ex;
  +    try {
  +        headerdata_t *hdI;
  +
  +        if (msg->azHeaders != NULL)
  +            free(msg->azHeaders);
  +        msg->azHeaders = NULL;
  +        msg->asHeaders = 0;
  +
  +        for (hdI = msg->hdFirst; hdI != NULL; hdI = hdI->next) { /* for each matrix header */
  +            logbook(msg->l2, L2_LEVEL_DEBUG, "FIXME trace loop hdI=%.8lx, hI->name=\"%s\"", hdI, hdI->name);
  +            if (hdI->name == NULL || strlen(hdI->name) == 0 || hdI->ndata == 0)
  +                continue;
  +            if (hdI->ndata == 0) {
  +                logbook(msg->l2, L2_LEVEL_DEBUG, "header=%s, no data", hdI->name);
  +            }
  +            else if(hdI->ndata == 1) { /* header data is single valued */
  +                logbook(msg->l2, L2_LEVEL_DEBUG, "header=%s, data=%s", hdI->name, hdI->data.s);
  +                argz_add(&msg->azHeaders, &msg->asHeaders, hdI->name);
  +                argz_add(&msg->azHeaders, &msg->asHeaders, hdI->data.s);
  +            }
  +            else { /* header data is multi valued */
  +                int i;
  +                for (i = 0; i < hdI->ndata; i++) {
  +                    logbook(msg->l2, L2_LEVEL_DEBUG, "header=%s[%d], data=%s", hdI->name, i, hdI->data.m[i]);
  +                    argz_add(&msg->azHeaders, &msg->asHeaders, hdI->name);
  +                    argz_add(&msg->azHeaders, &msg->asHeaders, hdI->data.m[i]);
  +                }
  +            }
  +        }
  +    }
  +    catch(ex) {
  +        rethrow;
  +    }
  +}
  +
  +void headerrewrite(lmtp2nntp_t *ctx)
  +{
  +    headerrule_t *hrI;
  +    headerdata_t *hdI, *hdNew;
  +    regex_ctx_t *regex_ctx;
  +#define OVECSIZE 30
  +    int            ovec[OVECSIZE];
  +    var_rc_t rc; char *cp; //FIXME what a bad name, it's not the returncode of this function
  +
  +    /* short circuit in case no headerrules were set up */
  +    if (ctx->option_firstheaderrule == NULL)
  +        return;
  +
  +    { //FIXME debug code block
  +        int i;
  +        headerrule_t *hrD;
  +        headerdata_t *hdD;
  +
  +        logbook(ctx->l2, L2_LEVEL_DEBUG, "FIXME trace ---------- headerrewrite() ----------");
  +        for (hrD = ctx->option_firstheaderrule; hrD != NULL; hrD = hrD->next)
  +            logbook(ctx->l2, L2_LEVEL_DEBUG, "hrD->header=%s", hrD->header);
  +        for (hdD = ctx->msg->hdFirst; hdD != NULL; hdD = hdD->next) {
  +            if (hdD->ndata == 0)
  +                logbook(ctx->l2, L2_LEVEL_DEBUG, "hdD->name=%s: (NO DATA)", hdD->name);
  +            if (hdD->ndata == 1)
  +                logbook(ctx->l2, L2_LEVEL_DEBUG, "hdD->name:hdD->data.s    %s %s", hdD->name, hdD->data.s);
  +            if (hdD->ndata > 1)
  +                for (i = 0; i < hdD->ndata; i++)
  +                    logbook(ctx->l2, L2_LEVEL_DEBUG, "hdD->name:hdD->data.m[%d] %s %s", i, hdD->name, hdD->data.m[i]);
  +        }
  +    }
  +    
  +    regex_ctx = (regex_ctx_t *)mallocex(sizeof(regex_ctx_t));
  +    regex_ctx->nMatch = 0;
  +    regex_ctx->acpMatch = NULL;
  +    regex_ctx->l2_env = ctx->l2_env;
  +    regex_ctx->l2 = ctx->l2;
  +    if ((rc = var_config(ctx->config_varregex, VAR_CONFIG_CB_VALUE, regex_lookup, regex_ctx)) != VAR_OK) {
  +        logbook(ctx->l2, L2_LEVEL_ERROR, "configure regex callback failed with %s (%d)", var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  +        throw(0,0,0);
  +    }
  +    if ((rc = var_config(ctx->config_varregex, VAR_CONFIG_CB_OPERATION, operate_cb, NULL)) != VAR_OK) {
  +        logbook(ctx->l2, L2_LEVEL_ERROR, "configure operate callback failed with %s (%d)", var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  +        throw(0,0,0);
  +    }
  +    for (hrI = ctx->option_firstheaderrule; hrI != NULL; hrI = hrI->next) { /* for each rule */
  +        { //FIXME debug code block
  +            int i;
  +            headerrule_t *hrD;
  +            headerdata_t *hdD;
  +
  +            logbook(ctx->l2, L2_LEVEL_DEBUG, "FIXME trace ---------- headerrewrite() ---------- MIDDLE");
  +            for (hrD = ctx->option_firstheaderrule; hrD != NULL; hrD = hrD->next)
  +                logbook(ctx->l2, L2_LEVEL_DEBUG, "hrD->header=%s", hrD->header);
  +            for (hdD = ctx->msg->hdFirst; hdD != NULL; hdD = hdD->next) {
  +                //logbook(ctx->l2, L2_LEVEL_DEBUG, "hdD=%.8lx, hdD->name=%.8lx, hdD->data.s=%.8lx", (long)hdD, (long)&hdD->name, (long)&hdD->data.s);
  +                if (hdD->ndata == 0)
  +                    logbook(ctx->l2, L2_LEVEL_DEBUG, "hdD->name=%s: (NO DATA)", hdD->name);
  +                if (hdD->ndata == 1)
  +                    logbook(ctx->l2, L2_LEVEL_DEBUG, "hdD->name:hdD->data.s    %s %s", hdD->name, hdD->data.s);
  +                if (hdD->ndata > 1)
  +                    for (i = 0; i < hdD->ndata; i++)
  +                        logbook(ctx->l2, L2_LEVEL_DEBUG, "hdD->name:hdD->data.m[%d] %s %s", i, hdD->name, hdD->data.m[i]);
  +            }
  +        }
  +        if (hrI->regex != NULL) {
  +            logbook(ctx->l2, L2_LEVEL_DEBUG, "rule has regex %s", hrI->regex);
  +            for (hdI = ctx->msg->hdFirst; hdI != NULL; hdI = hdI->next) { /* for each header */
  +                if (hdI->name == NULL || strlen(hdI->name) == 0 || hdI->ndata == 0)
  +                    continue;
  +                regex_ctx->nMatch = pcre_exec(hrI->pcreRegex, hrI->pcreExtra, hdI->name, strlen(hdI->name), 0, 0, ovec, OVECSIZE);
  +                if (regex_ctx->nMatch >= 1) {
  +                    int i;
  +                    char *cp;
  +                    logbook(ctx->l2, L2_LEVEL_DEBUG, "regex matches, %d references", regex_ctx->nMatch);
  +                    pcre_get_substring_list(hdI->name, ovec, regex_ctx->nMatch, &regex_ctx->acpMatch);
  +                    if (regex_ctx->acpMatch != NULL)
  +                        for (i = 0; i < regex_ctx->nMatch; i++)
  +                            logbook(ctx->l2, L2_LEVEL_DEBUG, "regex reference[%d]=\'%s\'", i, regex_ctx->acpMatch[i] == NULL ? "(UNDEFINED)" : regex_ctx->acpMatch[i]);
  +                    hdNew = headercreate();
  +                    /* expanding regex references into header name */
  +                    {
  +                        var_rc_t var_rc;
  +                        char *res_ptr;
  +                        logbook(ctx->l2, L2_LEVEL_DEBUG, "expanding regex references in headername '%s'", hrI->header);
  +                        if ((var_rc = var_expand(ctx->config_varregex, hrI->header, strlen(hrI->header), &res_ptr, NULL, FALSE)) != VAR_OK) {
  +                            logbook(ctx->l2, L2_LEVEL_ERROR, "expansion of '%s' failed: %s", hrI->header, var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  +                        }
  +                        logbook(ctx->l2, L2_LEVEL_DEBUG, "expansion result '%s'", res_ptr);
  +                        if (strlen(res_ptr) == 0) {
  +                            logbook(ctx->l2, L2_LEVEL_DEBUG, "marking deleted - emtpy headername");
  +                            hdNew->name = NULL; //FIXME rename ->header to ->name
  +                            /*FIXME clean up data.s and data.m */
  +                            hdNew->ndata = 0;
  +                        }
  +                        else {
  +                            hdNew->name = res_ptr; //FIXME rename ->header to ->name
  +                        }
  +                    }
  +                    if (hrI->val == NULL) {
  +                        logbook(ctx->l2, L2_LEVEL_DEBUG, "marking deleted - empty headervalue before expansion");
  +                        /*FIXME clean up data.s and data.m */
  +                        hdNew->ndata = 0;
  +                    }
  +                    else {
  +                        /* expanding regex references into header value */
  +                        {
  +                            var_rc_t var_rc;
  +                            char *res_ptr;
  +                            logbook(ctx->l2, L2_LEVEL_DEBUG, "expanding regex references in header value '%s'", hrI->val);
  +                            if ((var_rc = var_expand(ctx->config_varregex, hrI->val, strlen(hrI->val), &res_ptr, NULL, FALSE)) != VAR_OK) {
  +                                logbook(ctx->l2, L2_LEVEL_ERROR, "expansion of '%s' failed: %s", hrI->val, var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  +                            }
  +                            logbook(ctx->l2, L2_LEVEL_DEBUG, "expansion result '%s'", res_ptr);
  +                            cp = res_ptr;
  +                        }
  +                        /* expanding variables into header value */
  +                        if (hrI->val != NULL) {
  +                            var_rc_t var_rc;
  +                            char *res_ptr;
  +                            logbook(ctx->l2, L2_LEVEL_DEBUG, "expanding variables in header value '%s'", hrI->val);
  +                            if ((var_rc = var_expand(ctx->config_varctx, cp, strlen(cp), &res_ptr, NULL, FALSE)) != VAR_OK) {
  +                                logbook(ctx->l2, L2_LEVEL_ERROR, "expansion of '%s' failed: %s", cp, var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  +                            }
  +                            logbook(ctx->l2, L2_LEVEL_DEBUG, "expansion result '%s'", res_ptr);
  +                            if (strlen(res_ptr) == 0) {
  +                                logbook(ctx->l2, L2_LEVEL_DEBUG, "marking deleted - empty headervalue after expansion");
  +                                /*FIXME clean up data.s and data.m */
  +                                hdNew->ndata = 0;
  +                            }
  +                            else {
  +                                hdNew->data.s = res_ptr;
  +                                hdNew->ndata = 1;
  +                            }
  +                        }
  +                    }
  +                    /*FIXME clean up data.m */
  +                    headerreplace(hdI, hdNew);
  +                    if (hdNew->prev == NULL)
  +                        ctx->msg->hdFirst = hdNew;
  +                    hdI = hdNew;
  +                }
  +            }
  +        }
  +        else {
  +            logbook(ctx->l2, L2_LEVEL_DEBUG, "rule has no regex but static header %s", hrI->header);
  +            hdNew = headercreate();
  +            hdNew->name = strdupex(hrI->header); //FIXME rename ->header to ->name
  +            if (hrI->val == NULL) {
  +                logbook(ctx->l2, L2_LEVEL_DEBUG, "marking deleted");
  +                /*FIXME clean up data.s and data.m */
  +                hdNew->ndata = 0;
  +            }
  +            else {
  +                /*FIXME clean up data.m */
  +                /* expanding variables into header value */
  +                var_rc_t var_rc;
  +                char *res_ptr;
  +                logbook(ctx->l2, L2_LEVEL_DEBUG, "expanding variables in header value '%s'", hrI->val);
  +                if ((var_rc = var_expand(ctx->config_varctx, hrI->val, strlen(hrI->val), &res_ptr, NULL, FALSE)) != VAR_OK) {
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "expansion of '%s' failed: %s", hrI->val, var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  +                }
  +                logbook(ctx->l2, L2_LEVEL_DEBUG, "expansion result '%s'", res_ptr);
  +                if (strlen(res_ptr) == 0) {
  +                    logbook(ctx->l2, L2_LEVEL_DEBUG, "marking deleted - empty headervalue after expansion");
  +                    /*FIXME clean up data.s and data.m */
  +                    hdNew->ndata = 0;
  +                }
  +                else {
  +                    hdNew->data.s = res_ptr;
  +                    hdNew->ndata = 1;
  +                }
  +            }
  +            for (hdI = ctx->msg->hdFirst; hdI != NULL; hdI = hdI->next) { /* for each header */
  +                if (hdI->name == NULL || strlen(hdI->name) == 0)
  +                    continue;
  +                logbook(ctx->l2, L2_LEVEL_DEBUG, "hrI->header=%s, hdI->name=%s", hrI->header, hdI->name);
  +                if (strcasecmp(hrI->header, hdI->name) == 0)
  +                    break;
  +            }
  +            if (hdI != NULL) {
  +                logbook(ctx->l2, L2_LEVEL_DEBUG, "replacing header %s", hrI->header);
  +                headerreplace(hdI, hdNew);
  +                if (hdNew->prev == NULL) {
  +                    logbook(ctx->l2, L2_LEVEL_DEBUG, "FIXME trace #1");
  +                    ctx->msg->hdFirst = hdNew;
  +                }
  +            }
  +            else {
  +                logbook(ctx->l2, L2_LEVEL_DEBUG, "appending header %s", hrI->header);
  +                for (hdI = ctx->msg->hdFirst; hdI->next != NULL; hdI = hdI->next);
  +                hdI->next = hdNew;
  +                hdNew->prev = hdI;
  +            }
  +        }
  +    }
  +
  +    { //FIXME debug code block
  +        int i;
  +        headerrule_t *hrD;
  +        headerdata_t *hdD;
  +
  +        logbook(ctx->l2, L2_LEVEL_DEBUG, "FIXME trace ---------- headerrewrite() ---------- FINISH");
  +        for (hrD = ctx->option_firstheaderrule; hrD != NULL; hrD = hrD->next)
  +            logbook(ctx->l2, L2_LEVEL_DEBUG, "hrD->header=%s", hrD->header);
  +        for (hdD = ctx->msg->hdFirst; hdD != NULL; hdD = hdD->next) {
  +            if (hdD->ndata == 0)
  +                logbook(ctx->l2, L2_LEVEL_DEBUG, "hdD->name=%s: (NO DATA)", hdD->name);
  +            if (hdD->ndata == 1)
  +                logbook(ctx->l2, L2_LEVEL_DEBUG, "hdD->name:hdD->data.s    %s %s", hdD->name, hdD->data.s);
  +            if (hdD->ndata > 1)
  +                for (i = 0; i < hdD->ndata; i++)
  +                    logbook(ctx->l2, L2_LEVEL_DEBUG, "hdD->name:hdD->data.m[%d] %s %s", i, hdD->name, hdD->data.m[i]);
  +        }
  +    }
  +}

From ossp-cvs-owner@ossp.org  Thu Apr 18 16:27:42 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 21D077635E; Thu, 18 Apr 2002 16:27:42 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_l2.c
Message-Id: <20020418142742.21D077635E@mail.ossp.org>
Date: Thu, 18 Apr 2002 16:27:42 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   18-Apr-2002 16:27:42
  Branch: HEAD                             Handle: 2002041815274100

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_l2.c

  Log:
    remove debug stuff

  Summary:
    Revision    Changes     Path
    1.3         +0  -6      ossp-pkg/lmtp2nntp/lmtp2nntp_l2.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_l2.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 lmtp2nntp_l2.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_l2.c	13 Mar 2002 16:22:09 -0000	1.2
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_l2.c	18 Apr 2002 14:27:41 -0000	1.3
  @@ -85,16 +85,10 @@
       if (cfg->var == NULL)
           return L2_ERR_ARG;
   
  -/*FIXME for safety until (l2?) bug causing overlapping output is found
  -fprintf(stderr, "FIXME buf=***%s***(%d)\n", buf, buf_size);
  -*/
       /* expand variables */
       if ((var_rc = var_expand(cfg->var, buf, buf_size, &buf2, &buf2_size, FALSE)) != VAR_OK) {
           return L2_ERR_USE;
       }
  -/*FIXME for safety until (l2?) bug causing overlapping output is found
  -fprintf(stderr, "FIXME buf2=***%s***(%d)\n", buf2, buf2_size);
  -*/
   
       /* push data downstream */
       downstream = NULL;

From ossp-cvs-owner@ossp.org  Thu Apr 18 17:27:40 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8252C7635E; Thu, 18 Apr 2002 17:27:40 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_msg.c
Message-Id: <20020418152740.8252C7635E@mail.ossp.org>
Date: Thu, 18 Apr 2002 17:27:40 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   18-Apr-2002 17:27:40
  Branch: HEAD                             Handle: 2002041816274000

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_msg.c

  Log:
    put it in the right context. Thanks, rse

  Summary:
    Revision    Changes     Path
    1.6         +2  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 lmtp2nntp_msg.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	18 Apr 2002 14:09:25 -0000	1.5
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	18 Apr 2002 15:27:40 -0000	1.6
  @@ -573,6 +573,7 @@
   {
       int i;
   
  +fprintf(stderr, "DEBUG: #1 HALLO\n");
       if (val_ptr == NULL) {
           *out_ptr = "";
           *out_len = 0;
  @@ -748,7 +749,7 @@
           logbook(ctx->l2, L2_LEVEL_ERROR, "configure regex callback failed with %s (%d)", var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
           throw(0,0,0);
       }
  -    if ((rc = var_config(ctx->config_varregex, VAR_CONFIG_CB_OPERATION, operate_cb, NULL)) != VAR_OK) {
  +    if ((rc = var_config(ctx->config_varctx, VAR_CONFIG_CB_OPERATION, operate_cb, NULL)) != VAR_OK) { //FIXME isn't main a better place to do this?
           logbook(ctx->l2, L2_LEVEL_ERROR, "configure operate callback failed with %s (%d)", var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
           throw(0,0,0);
       }

From ossp-cvs-owner@ossp.org  Thu Apr 18 17:38:22 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0F1F17635E; Thu, 18 Apr 2002 17:38:22 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_main.c
Message-Id: <20020418153822.0F1F17635E@mail.ossp.org>
Date: Thu, 18 Apr 2002 17:38:22 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   18-Apr-2002 17:38:21
  Branch: HEAD                             Handle: 2002041816382100

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_main.c

  Log:
    remove debug code

  Summary:
    Revision    Changes     Path
    1.54        +0  -9      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.53 -r1.54 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	28 Mar 2002 10:02:53 -0000	1.53
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	18 Apr 2002 15:38:21 -0000	1.54
  @@ -215,15 +215,6 @@
           free(cp);
       }
   
  -    /*FIXME for safety until (l2?) bug causing overlapping output is found
  -    if (rc == VAR_OK) {
  -        logbook(ctx->l2, L2_LEVEL_DEBUG, "ctx_lookup variable \"%s\" (%d) ok: result is \"%s\" (%d)", var_ptr, var_len, *val_ptr, *val_len);
  -    }
  -    else {
  -        logbook(ctx->l2, L2_LEVEL_DEBUG, "ctx_lookup variable \"%s\" (%d) failed: %s (%d)", var_ptr, var_len, var_strerror(var, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  -    }
  -    */
  -
       return rc;
   }
   

From ossp-cvs-owner@ossp.org  Thu Apr 18 17:38:59 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B1369763A1; Thu, 18 Apr 2002 17:38:59 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c lmtp2nntp_msg.c
Message-Id: <20020418153859.B1369763A1@mail.ossp.org>
Date: Thu, 18 Apr 2002 17:38:59 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   18-Apr-2002 17:38:59
  Branch: HEAD                             Handle: 2002041816385900

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c lmtp2nntp_msg.c

  Log:
    use correct context for var_strerror

  Summary:
    Revision    Changes     Path
    1.72        +2  -2      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.7         +3  -3      ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.71 -r1.72 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	18 Apr 2002 14:09:25 -0000	1.71
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	18 Apr 2002 15:38:59 -0000	1.72
  @@ -663,11 +663,11 @@
                       var_rc_t rc;
   
                       if ((rc = var_create(&ctx->config_varregex)) != VAR_OK) {
  -                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --headerrule, create regex context failed with %s (%d)", var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  +                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --headerrule, create regex context failed with %s (%d)", var_strerror(ctx->config_varregex, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
                           throw(0,0,0);
                       }
                       if ((rc = var_config(ctx->config_varregex, VAR_CONFIG_SYNTAX, &syntax_regex)) != VAR_OK) {
  -                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --headerrule, config regex context failed with %s (%d)", var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  +                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --headerrule, config regex context failed with %s (%d)", var_strerror(ctx->config_varregex, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
                           throw(0,0,0);
                       }
                   }
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 lmtp2nntp_msg.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	18 Apr 2002 15:27:40 -0000	1.6
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	18 Apr 2002 15:38:59 -0000	1.7
  @@ -746,7 +746,7 @@
       regex_ctx->l2_env = ctx->l2_env;
       regex_ctx->l2 = ctx->l2;
       if ((rc = var_config(ctx->config_varregex, VAR_CONFIG_CB_VALUE, regex_lookup, regex_ctx)) != VAR_OK) {
  -        logbook(ctx->l2, L2_LEVEL_ERROR, "configure regex callback failed with %s (%d)", var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  +        logbook(ctx->l2, L2_LEVEL_ERROR, "configure regex callback failed with %s (%d)", var_strerror(ctx->config_varregex, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
           throw(0,0,0);
       }
       if ((rc = var_config(ctx->config_varctx, VAR_CONFIG_CB_OPERATION, operate_cb, NULL)) != VAR_OK) { //FIXME isn't main a better place to do this?
  @@ -794,7 +794,7 @@
                           char *res_ptr;
                           logbook(ctx->l2, L2_LEVEL_DEBUG, "expanding regex references in headername '%s'", hrI->header);
                           if ((var_rc = var_expand(ctx->config_varregex, hrI->header, strlen(hrI->header), &res_ptr, NULL, FALSE)) != VAR_OK) {
  -                            logbook(ctx->l2, L2_LEVEL_ERROR, "expansion of '%s' failed: %s", hrI->header, var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  +                            logbook(ctx->l2, L2_LEVEL_ERROR, "expansion of '%s' failed: %s", hrI->header, var_strerror(ctx->config_varregex, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
                           }
                           logbook(ctx->l2, L2_LEVEL_DEBUG, "expansion result '%s'", res_ptr);
                           if (strlen(res_ptr) == 0) {
  @@ -819,7 +819,7 @@
                               char *res_ptr;
                               logbook(ctx->l2, L2_LEVEL_DEBUG, "expanding regex references in header value '%s'", hrI->val);
                               if ((var_rc = var_expand(ctx->config_varregex, hrI->val, strlen(hrI->val), &res_ptr, NULL, FALSE)) != VAR_OK) {
  -                                logbook(ctx->l2, L2_LEVEL_ERROR, "expansion of '%s' failed: %s", hrI->val, var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  +                                logbook(ctx->l2, L2_LEVEL_ERROR, "expansion of '%s' failed: %s", hrI->val, var_strerror(ctx->config_varregex, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
                               }
                               logbook(ctx->l2, L2_LEVEL_DEBUG, "expansion result '%s'", res_ptr);
                               cp = res_ptr;

From ossp-cvs-owner@ossp.org  Mon Apr 22 14:16:40 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 56A437635E; Mon, 22 Apr 2002 14:16:40 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc Makefile.in rc.c rc.h rc_cliopt.c rc_config.c ...
Message-Id: <20020422121640.56A437635E@mail.ossp.org>
Date: Mon, 22 Apr 2002 14:16:40 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   22-Apr-2002 14:16:40
  Branch: HEAD                             Handle: 2002042213163900

  Modified files:
    ossp-pkg/rc             Makefile.in rc.c rc.h rc_cliopt.c rc_config.c
                            rc_config.h

  Log:
    Configuration string parsing logic.

  Summary:
    Revision    Changes     Path
    1.22        +1  -1      ossp-pkg/rc/Makefile.in
    1.20        +1  -1      ossp-pkg/rc/rc.c
    1.19        +1  -1      ossp-pkg/rc/rc.h
    1.4         +58 -56     ossp-pkg/rc/rc_cliopt.c
    1.11        +9  -9      ossp-pkg/rc/rc_config.c
    1.3         +31 -30     ossp-pkg/rc/rc_config.h
  ____________________________________________________________________________

  Index: ossp-pkg/rc/Makefile.in
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 Makefile.in
  --- ossp-pkg/rc/Makefile.in	11 Apr 2002 16:52:45 -0000	1.21
  +++ ossp-pkg/rc/Makefile.in	22 Apr 2002 12:16:39 -0000	1.22
  @@ -109,7 +109,7 @@
   rc.1: rc.pod
   	VS=`$(SHTOOL) version -lc -dshort rc_version.c`; \
   	VL=`$(SHTOOL) version -lc -dlong rc_version.c`; \
  -	$(POD2MAN) --section=5 --center="Run-command processor" \
  +	$(POD2MAN) --section=1 --center="Run-command processor" \
                  --release="$$VS" --date="$$VL" \
                  rc.pod >rc.1
   
  Index: ossp-pkg/rc/rc.c
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 rc.c
  --- ossp-pkg/rc/rc.c	12 Apr 2002 19:15:12 -0000	1.19
  +++ ossp-pkg/rc/rc.c	22 Apr 2002 12:16:39 -0000	1.20
  @@ -78,7 +78,7 @@
                   fprintf(stderr, "%s\n", configGetval(i));
           }
       }
  -    ex_catch(Except) {
  +    ex_catch(Except) {  /* Breaks the otherwise endless while loop above    */
           bCaught = TRUE;
       }
       i++;
  Index: ossp-pkg/rc/rc.h
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 rc.h
  --- ossp-pkg/rc/rc.h	12 Apr 2002 19:15:12 -0000	1.18
  +++ ossp-pkg/rc/rc.h	22 Apr 2002 12:16:39 -0000	1.19
  @@ -75,7 +75,7 @@
       rc_return_t clioptRemallimp(rc_bintup_t **);
       rc_return_t clioptRemall(void);
       rc_return_t clioptAppnode(const char *, const char *);*/
  -rc_return_t clioptProcess(int);
  +rc_return_t clioptProcess(int, const char *);
   rc_return_t clioptParse(int, char **);
   rc_return_t clioptDestruct(void);
   
  Index: ossp-pkg/rc/rc_cliopt.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 rc_cliopt.c
  --- ossp-pkg/rc/rc_cliopt.c	12 Apr 2002 19:15:12 -0000	1.3
  +++ ossp-pkg/rc/rc_cliopt.c	22 Apr 2002 12:16:39 -0000	1.4
  @@ -88,95 +88,97 @@
   * processing the corresponding option  *
   * and update option table accordingly  *
   ***************************************/
  -rc_return_t clioptProcess(int cliOption)
  +rc_return_t clioptProcess(int cliOption, const char *szArg)
   {
       switch (cliOption) {
  +    /* Begin concrete (digital) options */
           case RC_USE_VAL:
  -            m_szOptuples[cliOption] = strdup("1");
  +            m_szOptuples[cliOption] = strdup("1");  /* Usage    */
               break;
           case RC_DBG_VAL:
  -            m_szOptuples[cliOption] = strdup("1");
  +            m_szOptuples[cliOption] = strdup("1");  /* Debug    */
               break;
           case RC_VER_VAL:
  -            m_szOptuples[cliOption] = strdup("1");
  +            m_szOptuples[cliOption] = strdup("1");  /* Version  */
               break;
           case RC_EVL_VAL:
  -            m_szOptuples[cliOption] = strdup("1");
  +            m_szOptuples[cliOption] = strdup("1");  /* Eval     */
               break;
           case RC_HLP_VAL:
  -            m_szOptuples[cliOption] = strdup("1");
  +            m_szOptuples[cliOption] = strdup("1");  /* Help     */
               break;
           case RC_INF_VAL:
  -            m_szOptuples[cliOption] = strdup("1");
  +            m_szOptuples[cliOption] = strdup("1");  /* Info     */
               break;
           case RC_LBL_VAL:
  -            m_szOptuples[cliOption] = strdup("1");
  +            m_szOptuples[cliOption] = strdup("1");  /* Label    */
               break;
           case RC_PRN_VAL:
  -            m_szOptuples[cliOption] = strdup("1");
  +            m_szOptuples[cliOption] = strdup("1");  /* Print    */
               break;
           case RC_SIL_VAL:
  -            m_szOptuples[cliOption] = strdup("1");
  +            m_szOptuples[cliOption] = strdup("1");  /* Silent   */
               break;
           case RC_RAW_VAL:
  -            m_szOptuples[cliOption] = strdup("1");
  +            m_szOptuples[cliOption] = strdup("1");  /* Raw      */
               break;
           case RC_VRB_VAL:
  -            m_szOptuples[cliOption] = strdup("1");
  +            m_szOptuples[cliOption] = strdup("1");  /* Verbose  */
               break;
           case RC_EXC_VAL:
  -            m_szOptuples[cliOption] = strdup("1");
  +            m_szOptuples[cliOption] = strdup("1");  /* Exec     */
               break;
  +    /* Begin abstract (nondigital) options */
           case RC_LOC_VAL:
  -            m_szOptuples[cliOption] = strdup("1");
  +            m_szOptuples[cliOption] = strdup(szArg);    /* Locations      */
               break;
           case RC_CNF_VAL:
  -            m_szOptuples[cliOption] = strdup("1");
  +            m_szOptuples[cliOption] = strdup(szArg);    /* Conf file      */
               break;
           case RC_FNC_VAL:
  -            m_szOptuples[cliOption] = strdup("1");
  +            m_szOptuples[cliOption] = strdup(szArg);    /* Func file      */
               break;
           case RC_QRY_VAL:
  -            m_szOptuples[cliOption] = strdup("1");
  +            m_szOptuples[cliOption] = strdup(szArg);    /* Format         */
               break;
           case RC_TMP_VAL:
  -            m_szOptuples[cliOption] = strdup("1");
  +            m_szOptuples[cliOption] = strdup(szArg);    /* Temp dir       */
               break;
           case RC_OWN_VAL:
  -            m_szOptuples[cliOption] = strdup("1");
  +            m_szOptuples[cliOption] = strdup(szArg);    /* User name      */
               break;
           case RC_GRP_VAL:
  -            m_szOptuples[cliOption] = strdup("1");
  +            m_szOptuples[cliOption] = strdup(szArg);    /* Group name     */
               break;
           case RC_MSK_VAL:
  -            m_szOptuples[cliOption] = strdup("1");
  +            m_szOptuples[cliOption] = strdup(szArg);    /* Umask          */
               break;
           case RC_ASS_VAL:
  -            m_szOptuples[cliOption] = strdup("1");
  +            m_szOptuples[cliOption] = strdup(szArg);    /* Assign regex   */
               break;
           case RC_DEF_VAL:
  -            m_szOptuples[cliOption] = strdup("1");
  +            m_szOptuples[cliOption] = strdup(szArg);    /* Label regex    */
               break;
           case RC_REF_VAL:
  -            m_szOptuples[cliOption] = strdup("1");
  +            m_szOptuples[cliOption] = strdup(szArg);    /* Ref regex      */
               break;
           case RC_PRM_VAL:
  -            m_szOptuples[cliOption] = strdup("1");
  +            m_szOptuples[cliOption] = strdup(szArg);    /* Params regex   */
               break;
           case RC_TRM_VAL:
  -            m_szOptuples[cliOption] = strdup("1");
  +            m_szOptuples[cliOption] = strdup(szArg);    /* Terminal regex */
               break;
           case RC_NCF_VAL:
  -            m_szOptuples[cliOption] = strdup("1");
  +            m_szOptuples[cliOption] = strdup(szArg);    /* Config name    */
               break;
           case RC_CMN_VAL:
  -            m_szOptuples[cliOption] = strdup("1");
  +            m_szOptuples[cliOption] = strdup(szArg);    /* Common name    */
               break;
           case RC_DFL_VAL:
  -            m_szOptuples[cliOption] = strdup("1");
  +            m_szOptuples[cliOption] = strdup(szArg);    /* Default name   */
               break;
           case RC_ERR_VAL:
  -            m_szOptuples[cliOption] = strdup("1");
  +            m_szOptuples[cliOption] = strdup(szArg);    /* Error name     */
               break;
           default :
               break;
  @@ -193,18 +195,18 @@
   {
       static struct popt_option optionsTable[] = {
           /* Long options with short keys but no arguments */
  -        { RC_USE_NAME, '?', POPT_ARG_NONE,   0, RC_USE_VAL, RC_USE_DESC, NULL },
  -        { RC_DBG_NAME, 'd', POPT_ARG_NONE,   0, RC_DBG_VAL, RC_DBG_DESC, NULL },
  -        { RC_VER_NAME, 'V', POPT_ARG_NONE,   0, RC_VER_VAL, RC_VER_DESC, NULL },
  -        { RC_EVL_NAME, 'e', POPT_ARG_NONE,   0, RC_EVL_VAL, RC_EVL_DESC, NULL },
  -        { RC_HLP_NAME, 'h', POPT_ARG_NONE,   0, RC_HLP_VAL, RC_HLP_DESC, NULL },
  -        { RC_INF_NAME, 'i', POPT_ARG_NONE,   0, RC_INF_VAL, RC_INF_DESC, NULL },
  -        { RC_LBL_NAME, 'l', POPT_ARG_NONE,   0, RC_LBL_VAL, RC_LBL_DESC, NULL },
  -        { RC_PRN_NAME, 'p', POPT_ARG_NONE,   0, RC_PRN_VAL, RC_PRN_DESC, NULL },
  -        { RC_SIL_NAME, 's', POPT_ARG_NONE,   0, RC_SIL_VAL, RC_SIL_DESC, NULL },
  -        { RC_RAW_NAME, 'r', POPT_ARG_NONE,   0, RC_RAW_VAL, RC_RAW_DESC, NULL },
  -        { RC_VRB_NAME, 'v', POPT_ARG_NONE,   0, RC_VRB_VAL, RC_VRB_DESC, NULL },
  -        { RC_EXC_NAME, 'x', POPT_ARG_NONE,   0, RC_EXC_VAL, RC_EXC_DESC, NULL },
  +        {RC_USE_NAME, '?', POPT_ARG_NONE, 0, RC_USE_VAL, RC_USE_DESC, NULL},
  +        {RC_DBG_NAME, 'd', POPT_ARG_NONE, 0, RC_DBG_VAL, RC_DBG_DESC, NULL},
  +        {RC_VER_NAME, 'V', POPT_ARG_NONE, 0, RC_VER_VAL, RC_VER_DESC, NULL},
  +        {RC_EVL_NAME, 'e', POPT_ARG_NONE, 0, RC_EVL_VAL, RC_EVL_DESC, NULL},
  +        {RC_HLP_NAME, 'h', POPT_ARG_NONE, 0, RC_HLP_VAL, RC_HLP_DESC, NULL},
  +        {RC_INF_NAME, 'i', POPT_ARG_NONE, 0, RC_INF_VAL, RC_INF_DESC, NULL},
  +        {RC_LBL_NAME, 'l', POPT_ARG_NONE, 0, RC_LBL_VAL, RC_LBL_DESC, NULL},
  +        {RC_PRN_NAME, 'p', POPT_ARG_NONE, 0, RC_PRN_VAL, RC_PRN_DESC, NULL},
  +        {RC_SIL_NAME, 's', POPT_ARG_NONE, 0, RC_SIL_VAL, RC_SIL_DESC, NULL},
  +        {RC_RAW_NAME, 'r', POPT_ARG_NONE, 0, RC_RAW_VAL, RC_RAW_DESC, NULL},
  +        {RC_VRB_NAME, 'v', POPT_ARG_NONE, 0, RC_VRB_VAL, RC_VRB_DESC, NULL},
  +        {RC_EXC_NAME, 'x', POPT_ARG_NONE, 0, RC_EXC_VAL, RC_EXC_DESC, NULL},
                                                 
           /* Single argument long options with short keys */
           {RC_LOC_NAME, 'L', POPT_ARG_STRING, 0, RC_LOC_VAL, RC_LOC_DESC, "regx"},
  @@ -214,22 +216,22 @@
           {RC_TMP_NAME, 't', POPT_ARG_STRING, 0, RC_TMP_VAL, RC_TMP_DESC, "path"},
   
           /* Single argument long options without short keys */
  -        { RC_OWN_NAME, 0, POPT_ARG_STRING, 0, RC_OWN_VAL, RC_OWN_DESC, "user" },
  -        { RC_GRP_NAME, 0, POPT_ARG_STRING, 0, RC_GRP_VAL, RC_GRP_DESC, "group"},
  -        { RC_MSK_NAME, 0, POPT_ARG_INT,    0, RC_MSK_VAL, RC_MSK_DESC, "umask"},
  -        { RC_ASS_NAME, 0, POPT_ARG_STRING, 0, RC_ASS_VAL, RC_ASS_DESC, "regx" },
  -        { RC_DEF_NAME, 0, POPT_ARG_STRING, 0, RC_DEF_VAL, RC_DEF_DESC, "regx" },
  -        { RC_REF_NAME, 0, POPT_ARG_STRING, 0, RC_REF_VAL, RC_REF_DESC, "regx" },
  -        { RC_PRM_NAME, 0, POPT_ARG_STRING, 0, RC_PRM_VAL, RC_PRM_DESC, "regx" },
  -        { RC_TRM_NAME, 0, POPT_ARG_STRING, 0, RC_TRM_VAL, RC_TRM_DESC, "regx" },
  -        { RC_NCF_NAME, 0, POPT_ARG_STRING, 0, RC_NCF_VAL, RC_NCF_DESC, "name" },
  -        { RC_CMN_NAME, 0, POPT_ARG_STRING, 0, RC_CMN_VAL, RC_CMN_DESC, "name" },
  -        { RC_DFL_NAME, 0, POPT_ARG_STRING, 0, RC_DFL_VAL, RC_DFL_DESC, "name" },
  -        { RC_ERR_NAME, 0, POPT_ARG_STRING, 0, RC_ERR_VAL, RC_ERR_DESC, "name" },
  +        {RC_OWN_NAME, 0, POPT_ARG_STRING, 0, RC_OWN_VAL, RC_OWN_DESC, "user"},
  +        {RC_GRP_NAME, 0, POPT_ARG_STRING, 0, RC_GRP_VAL, RC_GRP_DESC, "group"},
  +        {RC_MSK_NAME, 0, POPT_ARG_INT,    0, RC_MSK_VAL, RC_MSK_DESC, "umask"},
  +        {RC_ASS_NAME, 0, POPT_ARG_STRING, 0, RC_ASS_VAL, RC_ASS_DESC, "regx"},
  +        {RC_DEF_NAME, 0, POPT_ARG_STRING, 0, RC_DEF_VAL, RC_DEF_DESC, "regx"},
  +        {RC_REF_NAME, 0, POPT_ARG_STRING, 0, RC_REF_VAL, RC_REF_DESC, "regx"},
  +        {RC_PRM_NAME, 0, POPT_ARG_STRING, 0, RC_PRM_VAL, RC_PRM_DESC, "regx"},
  +        {RC_TRM_NAME, 0, POPT_ARG_STRING, 0, RC_TRM_VAL, RC_TRM_DESC, "regx"},
  +        {RC_NCF_NAME, 0, POPT_ARG_STRING, 0, RC_NCF_VAL, RC_NCF_DESC, "name"},
  +        {RC_CMN_NAME, 0, POPT_ARG_STRING, 0, RC_CMN_VAL, RC_CMN_DESC, "name"},
  +        {RC_DFL_NAME, 0, POPT_ARG_STRING, 0, RC_DFL_VAL, RC_DFL_DESC, "name"},
  +        {RC_ERR_NAME, 0, POPT_ARG_STRING, 0, RC_ERR_VAL, RC_ERR_DESC, "name"},
   
           /* Special stuff    */
           POPT_AUTOHELP
  -        { NULL, 0, 0, NULL, 0 }
  +        {NULL, 0, 0, NULL, 0}
       };
   
       ex_t Except;
  @@ -248,7 +250,7 @@
       /* Now do options processing */
       while ((cliOpt = popt_getnextopt(optCon)) >= 0)
       ex_try {
  -        clioptProcess(cliOpt);
  +        clioptProcess(cliOpt, popt_getoptarg(optCon));
       }
       ex_catch(Except) {
           if ((rc_return_t)Except.ex_value != RC_ERR_USE)
  Index: ossp-pkg/rc/rc_config.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 rc_config.c
  --- ossp-pkg/rc/rc_config.c	12 Apr 2002 19:15:12 -0000	1.10
  +++ ossp-pkg/rc/rc_config.c	22 Apr 2002 12:16:39 -0000	1.11
  @@ -89,15 +89,15 @@
   
   const char *configGetname(rc_opt_t Optname)
   {
  -    static char *s_szOptnametab[] = {
  -        RC_USE_NAME, RC_DBG_NAME, RC_VER_NAME, RC_EVL_NAME,
  -        RC_HLP_NAME, RC_INF_NAME, RC_LBL_NAME, RC_PRN_NAME,
  -        RC_SIL_NAME, RC_RAW_NAME, RC_VRB_NAME, RC_EXC_NAME,
  -        RC_LOC_NAME, RC_CNF_NAME, RC_FNC_NAME, RC_QRY_NAME,
  -        RC_TMP_NAME, RC_OWN_NAME, RC_GRP_NAME, RC_MSK_NAME,
  -        RC_ASS_NAME, RC_DEF_NAME, RC_REF_NAME, RC_PRM_NAME,
  -        RC_TRM_NAME, RC_NCF_NAME, RC_CMN_NAME, RC_DFL_NAME,
  -        RC_ERR_NAME
  +    static char *s_szOptnametab[] = { /* NULL is for alignment */
  +        NULL,        RC_USE_NAME, RC_DBG_NAME, RC_VER_NAME,
  +        RC_EVL_NAME, RC_HLP_NAME, RC_INF_NAME, RC_LBL_NAME,
  +        RC_PRN_NAME, RC_SIL_NAME, RC_RAW_NAME, RC_VRB_NAME,
  +        RC_EXC_NAME, RC_LOC_NAME, RC_CNF_NAME, RC_FNC_NAME,
  +        RC_QRY_NAME, RC_TMP_NAME, RC_OWN_NAME, RC_GRP_NAME,
  +        RC_MSK_NAME, RC_ASS_NAME, RC_DEF_NAME, RC_REF_NAME,
  +        RC_PRM_NAME, RC_TRM_NAME, RC_NCF_NAME, RC_CMN_NAME,
  +        RC_DFL_NAME, RC_ERR_NAME
       };
   
       if (m_nLocks) { /* Make sure config exists  */
  Index: ossp-pkg/rc/rc_config.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 rc_config.h
  --- ossp-pkg/rc/rc_config.h	11 Apr 2002 16:52:45 -0000	1.2
  +++ ossp-pkg/rc/rc_config.h	22 Apr 2002 12:16:39 -0000	1.3
  @@ -31,36 +31,37 @@
   #define __OSSPRC_CONFIG_H__
   
   /* Available options and their values */
  -#define RC_USE_VAL   0
  -#define RC_DBG_VAL   1
  -#define RC_VER_VAL   2
  -#define RC_EVL_VAL   3
  -#define RC_HLP_VAL   4
  -#define RC_INF_VAL   5
  -#define RC_LBL_VAL   6
  -#define RC_PRN_VAL   7
  -#define RC_SIL_VAL   8
  -#define RC_RAW_VAL   9
  -#define RC_VRB_VAL  10
  -#define RC_EXC_VAL  11
  -#define RC_LOC_VAL  12
  -#define RC_CNF_VAL  13
  -#define RC_FNC_VAL  14
  -#define RC_QRY_VAL  15
  -#define RC_TMP_VAL  16
  -#define RC_OWN_VAL  17
  -#define RC_GRP_VAL  18
  -#define RC_MSK_VAL  19
  -#define RC_ASS_VAL  20
  -#define RC_DEF_VAL  21
  -#define RC_REF_VAL  22
  -#define RC_PRM_VAL  23
  -#define RC_TRM_VAL  24
  -#define RC_NCF_VAL  25
  -#define RC_CMN_VAL  26
  -#define RC_DFL_VAL  27
  -#define RC_ERR_VAL  28
  +#define RC_HEADVAL   0  /* Unused, as popt reserves 0 to return success */
  +#define RC_USE_VAL   1
  +#define RC_DBG_VAL   2
  +#define RC_VER_VAL   3
  +#define RC_EVL_VAL   4
  +#define RC_HLP_VAL   5
  +#define RC_INF_VAL   6
  +#define RC_LBL_VAL   7
  +#define RC_PRN_VAL   8
  +#define RC_SIL_VAL   9
  +#define RC_RAW_VAL  10
  +#define RC_VRB_VAL  11
  +#define RC_EXC_VAL  12
  +#define RC_LOC_VAL  13
  +#define RC_CNF_VAL  14
  +#define RC_FNC_VAL  15
  +#define RC_QRY_VAL  16
  +#define RC_TMP_VAL  17
  +#define RC_OWN_VAL  18
  +#define RC_GRP_VAL  19
  +#define RC_MSK_VAL  20
  +#define RC_ASS_VAL  21
  +#define RC_DEF_VAL  22
  +#define RC_REF_VAL  23
  +#define RC_PRM_VAL  24
  +#define RC_TRM_VAL  25
  +#define RC_NCF_VAL  26
  +#define RC_CMN_VAL  27
  +#define RC_DFL_VAL  28
  +#define RC_ERR_VAL  29
   
  -#define RC_NUMOPTS  29  /* Increment with each option addition */
  +#define RC_NUMOPTS  30  /* Increment with each option addition */
   
   #endif /* __OSSPRC_CONFIG_H__ */

From ossp-cvs-owner@ossp.org  Mon Apr 22 14:49:27 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5A7D97635E; Mon, 22 Apr 2002 14:49:27 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc_config.h rc_test.sh
Message-Id: <20020422124927.5A7D97635E@mail.ossp.org>
Date: Mon, 22 Apr 2002 14:49:27 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   22-Apr-2002 14:49:27
  Branch: HEAD                             Handle: 2002042213492600

  Modified files:
    ossp-pkg/rc             rc_config.h rc_test.sh

  Log:
    Rearranged test commands and added comments to option identifiers.

  Summary:
    Revision    Changes     Path
    1.4         +30 -30     ossp-pkg/rc/rc_config.h
    1.9         +17 -15     ossp-pkg/rc/rc_test.sh
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc_config.h
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 rc_config.h
  --- ossp-pkg/rc/rc_config.h	22 Apr 2002 12:16:39 -0000	1.3
  +++ ossp-pkg/rc/rc_config.h	22 Apr 2002 12:49:26 -0000	1.4
  @@ -31,36 +31,36 @@
   #define __OSSPRC_CONFIG_H__
   
   /* Available options and their values */
  -#define RC_HEADVAL   0  /* Unused, as popt reserves 0 to return success */
  -#define RC_USE_VAL   1
  -#define RC_DBG_VAL   2
  -#define RC_VER_VAL   3
  -#define RC_EVL_VAL   4
  -#define RC_HLP_VAL   5
  -#define RC_INF_VAL   6
  -#define RC_LBL_VAL   7
  -#define RC_PRN_VAL   8
  -#define RC_SIL_VAL   9
  -#define RC_RAW_VAL  10
  -#define RC_VRB_VAL  11
  -#define RC_EXC_VAL  12
  -#define RC_LOC_VAL  13
  -#define RC_CNF_VAL  14
  -#define RC_FNC_VAL  15
  -#define RC_QRY_VAL  16
  -#define RC_TMP_VAL  17
  -#define RC_OWN_VAL  18
  -#define RC_GRP_VAL  19
  -#define RC_MSK_VAL  20
  -#define RC_ASS_VAL  21
  -#define RC_DEF_VAL  22
  -#define RC_REF_VAL  23
  -#define RC_PRM_VAL  24
  -#define RC_TRM_VAL  25
  -#define RC_NCF_VAL  26
  -#define RC_CMN_VAL  27
  -#define RC_DFL_VAL  28
  -#define RC_ERR_VAL  29
  +#define RC_HEADVAL   0  /* Unused         */
  +#define RC_USE_VAL   1  /* Usage          */
  +#define RC_DBG_VAL   2  /* Debug          */
  +#define RC_VER_VAL   3  /* Version        */
  +#define RC_EVL_VAL   4  /* Eval           */
  +#define RC_HLP_VAL   5  /* Help           */
  +#define RC_INF_VAL   6  /* Info           */
  +#define RC_LBL_VAL   7  /* Label          */
  +#define RC_PRN_VAL   8  /* Print          */
  +#define RC_SIL_VAL   9  /* Silent         */
  +#define RC_RAW_VAL  10  /* Raw            */
  +#define RC_VRB_VAL  11  /* Verbose        */
  +#define RC_EXC_VAL  12  /* Exec           */
  +#define RC_LOC_VAL  13  /* Locations      */
  +#define RC_CNF_VAL  14  /* Conf file      */
  +#define RC_FNC_VAL  15  /* Func file      */
  +#define RC_QRY_VAL  16  /* Format         */
  +#define RC_TMP_VAL  17  /* Temp dir       */
  +#define RC_OWN_VAL  18  /* User name      */
  +#define RC_GRP_VAL  19  /* Group name     */
  +#define RC_MSK_VAL  20  /* Umask          */
  +#define RC_ASS_VAL  21  /* Assign regex   */
  +#define RC_DEF_VAL  22  /* Label regex    */
  +#define RC_REF_VAL  23  /* Ref regex      */
  +#define RC_PRM_VAL  24  /* Params regex   */
  +#define RC_TRM_VAL  25  /* Terminal regex */
  +#define RC_NCF_VAL  26  /* Config name    */
  +#define RC_CMN_VAL  27  /* Common name    */
  +#define RC_DFL_VAL  28  /* Default name   */
  +#define RC_ERR_VAL  29  /* Error name     */
   
   #define RC_NUMOPTS  30  /* Increment with each option addition */
   
  Index: ossp-pkg/rc/rc_test.sh
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 rc_test.sh
  --- ossp-pkg/rc/rc_test.sh	12 Apr 2002 19:15:12 -0000	1.8
  +++ ossp-pkg/rc/rc_test.sh	22 Apr 2002 12:49:26 -0000	1.9
  @@ -28,44 +28,46 @@
   #  test_rc.sh: Run-command processor test script
   
   # Test short options, should fail for false combination usage
  -./rc -dVehilpsrvxLcfqt samba start sleep=2 restart
   echo "./rc -dVehilpsrvxLcfqt samba start sleep=2 restart"
  +./rc -dVehilpsrvxLcfqt samba start sleep=2 restart
   
   # Test short options, should succeed
  -./rc -derv -L /sfw/etc/rc.d/rc.%{RCFILE:s/^all$/*/} -c /sfw/etc/rc.conf -f /sfw/etc/rc.func -t /tmp openssh stop sleep=4 start daily minsize=2097152
   echo; echo "./rc -derv -L /sfw/etc/rc.d/rc.%{RCFILE:s/^all$/*/} -c /sfw/etc/rc.conf -f /sfw/etc/rc.func -t /tmp openssh stop sleep=4 start daily minsize=2097152"
  +./rc -derv -L /sfw/etc/rc.d/rc.%{RCFILE:s/^all$/*/} -c /sfw/etc/rc.conf -f /sfw/etc/rc.func -t /tmp openssh stop sleep=4 start daily minsize=2097152
   
   # Test some long options, should fail for false combination usage
  -./rc --verbose --silent uucp stop sleep=6 start
   echo; echo "./rc --verbose --silent uucp stop sleep=6 start"
  -./rc --query --silent zebra bing bang
  +./rc --verbose --silent uucp stop sleep=6 start
   echo; echo "./rc --query --silent zebra bing bang"
  -./rc --conf /sfw/rc.conf --locate /sfw/etc/rc.d --query what to enter here
  -echo; echo "./rc --conf /sfw/rc.conf --locate /sfw/etc/rc.d --query what to enter here"
  +./rc --query --silent zebra bing bang
  +echo; echo "./rc --conf /sfw/rc.conf --locate /etc/rc3.d:/sfw/etc/rc.d --query what to enter here"
  +./rc --conf /sfw/rc.conf --locate /etc/rc3.d:/sfw/etc/rc.d --query what to enter here
   
   # Test minimal set of long options, should succeed
  +echo; echo "./rc --debug --version rsyncd nothing matters but the version"
   ./rc --debug --version rsyncd nothing matters but the version
  -echo; echo "./rc --conf /sfw/rc.conf --locate /sfw/etc/rc.d --query what to enter here"
  +echo; echo "./rc --conf /sfw/rc.conf --locate /cw/etc/rc.d:/sfw/etc/rc.d:/etc/rc --query what to enter here"
  +./rc --conf /sfw/rc.conf --locate /cw/etc/rc.d:/sfw/etc/rc.d:/etc/rc --query what to enter here
   
   # FIXME these cases are not handled yet by our configuration FIXME #
  -#./rc --debug --version
   #echo; echo "./rc --debug --version"
  -#./rc --debug --help
  +#./rc --debug --version
   #echo; echo "./rc --debug --help"
  -#./rc --debug --info --verbose
  +#./rc --debug --help
   #echo; echo "./rc --debug --info --verbose"
  -#./rc --conf /etc/rc.conf --debug --info --raw
  +#./rc --debug --info --verbose
   #echo; echo "./rc --conf /etc/rc.conf --debug --info --raw"
  -#./rc --conf /sfw/rc.conf --tmp /sfw/RPM/TMP --debug --labels rsyncd
  +#./rc --conf /etc/rc.conf --debug --info --raw
   #echo; echo "./rc --conf /sfw/rc.conf --tmp /sfw/RPM/TMP --debug --labels rsyncd"
  +#./rc --conf /sfw/rc.conf --tmp /sfw/RPM/TMP --debug --labels rsyncd
   # FIXME these cases are not handled yet by our configuration FIXME #
   
  -./rc --func /sfw/etc/rc.func --print --verbose openssh stop sleep=4 start
   echo; echo "./rc --func /sfw/etc/rc.func --print --verbose openssh stop sleep=4 start"
  -./rc --func /sfw/etc/rc.func --debug --eval uucp restart
  +./rc --func /sfw/etc/rc.func --print --verbose openssh stop sleep=4 start
   echo; echo "./rc --func /sfw/etc/rc.func --debug --eval uucp restart"
  -./rc --conf ./myrc --func /sfw/etc/rc.func --tmp /tmp --debug --silent --exec uucp start
  +./rc --func /sfw/etc/rc.func --debug --eval uucp restart
   echo; echo "./rc --conf ./myrc --func /sfw/etc/rc.func --tmp /tmp --debug --silent --exec uucp start"
  +./rc --conf ./myrc --func /sfw/etc/rc.func --tmp /tmp --debug --silent --exec uucp start
   
   # Next milestone
   #RequireOwner

From ossp-cvs-owner@ossp.org  Mon Apr 22 17:22:40 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 318E97635E; Mon, 22 Apr 2002 17:22:40 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.c rc.h rc_cliopt.c rc_cliopt.h rc_config.c ...
Message-Id: <20020422152240.318E97635E@mail.ossp.org>
Date: Mon, 22 Apr 2002 17:22:40 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   22-Apr-2002 17:22:40
  Branch: HEAD                             Handle: 197001010100001019485359

  Modified files:
    ossp-pkg/rc             rc.c rc.h rc_cliopt.c rc_config.c
  Removed files:
    ossp-pkg/rc             rc_cliopt.h rc_opt.h rc_optimpl.c rc_option.c
                            rc_option.h

  Log:
    Remove obsolete specs and implementations.

  Summary:
    Revision    Changes     Path
    1.21        +2  -27     ossp-pkg/rc/rc.c
    1.20        +1  -1      ossp-pkg/rc/rc.h
    1.5         +63 -91     ossp-pkg/rc/rc_cliopt.c
    NONE        +0  -40     ossp-pkg/rc/rc_cliopt.h
    1.12        +43 -0      ossp-pkg/rc/rc_config.c
    NONE        +0  -38     ossp-pkg/rc/rc_opt.h
    NONE        +0  -145    ossp-pkg/rc/rc_optimpl.c
    NONE        +0  -46     ossp-pkg/rc/rc_option.c
    NONE        +0  -64     ossp-pkg/rc/rc_option.h
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.c
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 rc.c
  --- ossp-pkg/rc/rc.c	22 Apr 2002 12:16:39 -0000	1.20
  +++ ossp-pkg/rc/rc.c	22 Apr 2002 15:22:39 -0000	1.21
  @@ -34,10 +34,6 @@
   #include "rc_const.h"
   #include "rc_private.h"
   
  -/* FIXME BEGIN DEBUG */
  -#include "rc_config.h"
  -#include <string.h>
  -/* FIXME END DEBUG */
   
   int main(int argc, char *argv[])
   {
  @@ -64,29 +60,8 @@
           exit(1);        /* Failure */
       }
   
  -/* FIXME BEGIN DEBUG */
  -{
  -int i = 0;
  -int bCaught = FALSE;
  -while (!bCaught) {
  -    ex_try {
  -        if (configGetval(i)) {
  -            fprintf(stderr, "D Option %s: ", configGetname(i));
  -            if (!(strcmp(configGetval(i), "1")))
  -                fprintf(stderr, "on\n");
  -            else
  -                fprintf(stderr, "%s\n", configGetval(i));
  -        }
  -    }
  -    ex_catch(Except) {  /* Breaks the otherwise endless while loop above    */
  -        bCaught = TRUE;
  -    }
  -    i++;
  -}
  -}
  -/* FIXME END DEBUG */
  -
  -configDestruct();/* FIXME Remove, allow first scope */
  +fprintf(stderr, configSummarize());
  +configDestruct();   /* FIXME Remove, allow first scope */
   TRACE("No exceptions caught\n");
       exit(0);            /* Success */
   }
  Index: ossp-pkg/rc/rc.h
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 rc.h
  --- ossp-pkg/rc/rc.h	22 Apr 2002 12:16:39 -0000	1.19
  +++ ossp-pkg/rc/rc.h	22 Apr 2002 15:22:39 -0000	1.20
  @@ -68,6 +68,7 @@
   /* Config accessor prototypes */
   const char *configGetval(rc_opt_t);
   const char *configGetname(rc_opt_t);
  +const char *configSummarize(void);
   
   /* Command line function prototypes */
   rc_return_t clioptConstruct(void);
  @@ -81,7 +82,6 @@
   
   /* Command line accessor prototypes */
   const char *clioptGetval(rc_opt_t);
  -const char *clioptSummarize(void);
   
       /* Option function prototypes */
       /*FIXME rc_return_t optConstruct(rc_opt_t **);
  Index: ossp-pkg/rc/rc_cliopt.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 rc_cliopt.c
  --- ossp-pkg/rc/rc_cliopt.c	22 Apr 2002 12:16:39 -0000	1.4
  +++ ossp-pkg/rc/rc_cliopt.c	22 Apr 2002 15:22:39 -0000	1.5
  @@ -74,15 +74,6 @@
   }
   
   /***************************************
  -* clioptSummarize(void)                *
  -* Command line option summary          *
  -***************************************/
  -const char *clioptSummarize(void)
  -{
  -    return (NULL);
  -}
  -
  -/***************************************
   * clioptProcess(int)                   *
   * Switch through available options     *
   * processing the corresponding option  *
  @@ -93,95 +84,68 @@
       switch (cliOption) {
       /* Begin concrete (digital) options */
           case RC_USE_VAL:
  -            m_szOptuples[cliOption] = strdup("1");  /* Usage    */
  -            break;
  +            m_szOptuples[cliOption] = strdup("1"); break;   /* Usage    */
           case RC_DBG_VAL:
  -            m_szOptuples[cliOption] = strdup("1");  /* Debug    */
  -            break;
  +            m_szOptuples[cliOption] = strdup("1"); break;   /* Debug    */
           case RC_VER_VAL:
  -            m_szOptuples[cliOption] = strdup("1");  /* Version  */
  -            break;
  -        case RC_EVL_VAL:
  -            m_szOptuples[cliOption] = strdup("1");  /* Eval     */
  -            break;
  -        case RC_HLP_VAL:
  -            m_szOptuples[cliOption] = strdup("1");  /* Help     */
  -            break;
  -        case RC_INF_VAL:
  -            m_szOptuples[cliOption] = strdup("1");  /* Info     */
  -            break;
  -        case RC_LBL_VAL:
  -            m_szOptuples[cliOption] = strdup("1");  /* Label    */
  -            break;
  -        case RC_PRN_VAL:
  -            m_szOptuples[cliOption] = strdup("1");  /* Print    */
  -            break;
  -        case RC_SIL_VAL:
  -            m_szOptuples[cliOption] = strdup("1");  /* Silent   */
  -            break;
  -        case RC_RAW_VAL:
  -            m_szOptuples[cliOption] = strdup("1");  /* Raw      */
  -            break;
  -        case RC_VRB_VAL:
  -            m_szOptuples[cliOption] = strdup("1");  /* Verbose  */
  -            break;
  -        case RC_EXC_VAL:
  -            m_szOptuples[cliOption] = strdup("1");  /* Exec     */
  -            break;
  +            m_szOptuples[cliOption] = strdup("1"); break;   /* Version  */
  +        case RC_EVL_VAL:                                   
  +            m_szOptuples[cliOption] = strdup("1"); break;   /* Eval     */
  +        case RC_HLP_VAL:                                   
  +            m_szOptuples[cliOption] = strdup("1"); break;   /* Help     */
  +        case RC_INF_VAL:                                   
  +            m_szOptuples[cliOption] = strdup("1"); break;   /* Info     */
  +        case RC_LBL_VAL:                                   
  +            m_szOptuples[cliOption] = strdup("1"); break;   /* Label    */
  +        case RC_PRN_VAL:                                   
  +            m_szOptuples[cliOption] = strdup("1"); break;   /* Print    */
  +        case RC_SIL_VAL:                                   
  +            m_szOptuples[cliOption] = strdup("1"); break;   /* Silent   */
  +        case RC_RAW_VAL:                                   
  +            m_szOptuples[cliOption] = strdup("1"); break;   /* Raw      */
  +        case RC_VRB_VAL:                                   
  +            m_szOptuples[cliOption] = strdup("1"); break;   /* Verbose  */
  +        case RC_EXC_VAL:                                   
  +            m_szOptuples[cliOption] = strdup("1"); break;   /* Exec     */
  +
       /* Begin abstract (nondigital) options */
           case RC_LOC_VAL:
  -            m_szOptuples[cliOption] = strdup(szArg);    /* Locations      */
  -            break;
  +            m_szOptuples[cliOption] = strdup(szArg); break; /* Locations    */
           case RC_CNF_VAL:
  -            m_szOptuples[cliOption] = strdup(szArg);    /* Conf file      */
  -            break;
  +            m_szOptuples[cliOption] = strdup(szArg); break; /* Conf file    */
           case RC_FNC_VAL:
  -            m_szOptuples[cliOption] = strdup(szArg);    /* Func file      */
  -            break;
  +            m_szOptuples[cliOption] = strdup(szArg); break; /* Func file    */
           case RC_QRY_VAL:
  -            m_szOptuples[cliOption] = strdup(szArg);    /* Format         */
  -            break;
  +            m_szOptuples[cliOption] = strdup(szArg); break; /* Format       */
           case RC_TMP_VAL:
  -            m_szOptuples[cliOption] = strdup(szArg);    /* Temp dir       */
  -            break;
  +            m_szOptuples[cliOption] = strdup(szArg); break; /* Temp dir     */
           case RC_OWN_VAL:
  -            m_szOptuples[cliOption] = strdup(szArg);    /* User name      */
  -            break;
  +            m_szOptuples[cliOption] = strdup(szArg); break; /* User name    */
           case RC_GRP_VAL:
  -            m_szOptuples[cliOption] = strdup(szArg);    /* Group name     */
  -            break;
  +            m_szOptuples[cliOption] = strdup(szArg); break; /* Group name   */
           case RC_MSK_VAL:
  -            m_szOptuples[cliOption] = strdup(szArg);    /* Umask          */
  -            break;
  +            m_szOptuples[cliOption] = strdup(szArg); break; /* Umask        */
  +
           case RC_ASS_VAL:
  -            m_szOptuples[cliOption] = strdup(szArg);    /* Assign regex   */
  -            break;
  +            m_szOptuples[cliOption] = strdup(szArg); break; /* Assignregex  */
           case RC_DEF_VAL:
  -            m_szOptuples[cliOption] = strdup(szArg);    /* Label regex    */
  -            break;
  +            m_szOptuples[cliOption] = strdup(szArg); break; /* Labelregex   */
           case RC_REF_VAL:
  -            m_szOptuples[cliOption] = strdup(szArg);    /* Ref regex      */
  -            break;
  +            m_szOptuples[cliOption] = strdup(szArg); break; /* Refregex     */
           case RC_PRM_VAL:
  -            m_szOptuples[cliOption] = strdup(szArg);    /* Params regex   */
  -            break;
  +            m_szOptuples[cliOption] = strdup(szArg); break; /* Paramregex   */
           case RC_TRM_VAL:
  -            m_szOptuples[cliOption] = strdup(szArg);    /* Terminal regex */
  -            break;
  +            m_szOptuples[cliOption] = strdup(szArg); break; /* Termregex    */
  +
           case RC_NCF_VAL:
  -            m_szOptuples[cliOption] = strdup(szArg);    /* Config name    */
  -            break;
  +            m_szOptuples[cliOption] = strdup(szArg); break; /* Configname   */
           case RC_CMN_VAL:
  -            m_szOptuples[cliOption] = strdup(szArg);    /* Common name    */
  -            break;
  +            m_szOptuples[cliOption] = strdup(szArg); break; /* Commonname   */
           case RC_DFL_VAL:
  -            m_szOptuples[cliOption] = strdup(szArg);    /* Default name   */
  -            break;
  +            m_szOptuples[cliOption] = strdup(szArg); break; /* Defaultname  */
           case RC_ERR_VAL:
  -            m_szOptuples[cliOption] = strdup(szArg);    /* Error name     */
  -            break;
  -        default :
  -            break;
  +            m_szOptuples[cliOption] = strdup(szArg); break; /* Errorname    */
  +        default : break;
       }
   
       return(RC_THROW(RC_OK));
  @@ -243,28 +207,35 @@
       popt_setotheroptionhelp(optCon, "[options] <rcfile> <sections [args]>");
   
       if (argc < 3) {
  +        fprintf(stderr, "Please enter at least one rcfile and section.\n");
           popt_printusage(optCon, stderr, 0);
           return(RC_THROW(RC_ERR_USE));
       }
   
       /* Now do options processing */
  -    while ((cliOpt = popt_getnextopt(optCon)) >= 0)
  -    ex_try {
  -        clioptProcess(cliOpt, popt_getoptarg(optCon));
  -    }
  -    ex_catch(Except) {
  -        if ((rc_return_t)Except.ex_value != RC_ERR_USE)
  -            fprintf(stderr, "Nonusage exception: %d\n",\
  -                (rc_return_t)Except.ex_value);
  -
  -        fprintf(stderr, "Class '%s' threw exception %d in %s:%s():%d.\n",\
  -                (char *)Except.ex_class, *(int *)Except.ex_value,\
  -                Except.ex_file, Except.ex_func, Except.ex_line);
  +    while ((cliOpt = popt_getnextopt(optCon)) >= 0) { /* Loop, each time     */
  +        ex_try {                                      /* eating a new option */
  +            clioptProcess(cliOpt, popt_getoptarg(optCon));
  +        }
  +        ex_catch(Except) {
  +            if ((rc_return_t)Except.ex_value == RC_ERR_USE) {
  +                popt_printusage(optCon, stderr, 0);
  +                rethrow;
  +            }
  +            else {  /* Some error condition probably deserves attention */
  +                fprintf(stderr, "Class '%s' threw exception %d in %s:%s():\
  +                    %d.\n", (char *)Except.ex_class, *(int *)Except.ex_value,\
  +                    Except.ex_file, Except.ex_func, Except.ex_line);
  +                rethrow;
  +            }
  +        }
       }
   
  +    /* At this point we should be finished parsing options, so now we use  */
  +    /* popt as a transport to read the user specified rcfile and sections. */
       szCLIBuf = (char *)popt_getarg(optCon);
       if ((szCLIBuf == NULL)) {
  -        fprintf(stderr, "Please specify at least one rcfile and section.\n");
  +        fprintf(stderr, "Please enter at least one rcfile and section.\n");
           popt_printusage(optCon, stderr, 0);
           return(RC_THROW(RC_ERR_USE));
       }
  @@ -281,6 +252,7 @@
       popt_freecontext(optCon);
       return(RC_THROW(RC_OK));
   }
  +
   /***************************************
   * clioptDestruct(void)                 *
   * Destruct a command line option       *
    Index: ossp-pkg/rc/rc_config.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 rc_config.c
  --- ossp-pkg/rc/rc_config.c	22 Apr 2002 12:16:39 -0000	1.11
  +++ ossp-pkg/rc/rc_config.c	22 Apr 2002 15:22:39 -0000	1.12
  @@ -29,11 +29,13 @@
   
   #include <stdio.h>
   #include <stdlib.h>
  +#include <string.h>
   
   #include "rc.h"
   #include "rc_const.h"               /* String constants                 */
   
   static int m_nLocks = 0;            /* Server locks, not thread-safe FIXME  */
  +static char *m_szSummary = NULL;    /* Configuration summary storage        */
   
   
   /***************************************
  @@ -109,6 +111,45 @@
       return(NULL);   /* Not reached  */
   }
   
  +/***************************************
  +* configSummarize(void)                *
  +* Configuration summary                *
  +***************************************/
  +const char *configSummarize(void)
  +{
  +    ex_t Except;
  +    int i = 0;
  +    int bCaught = FALSE;
  +
  +    while (!bCaught) {
  +        ex_try {    /* FIXME Not threadsafe, wrap with crit section */
  +            if (configGetval(i)) { /* FIXME Is realloc portable here? */
  +                /* FIXME Unportable kludge to ensure storage FIXME */
  +                m_szSummary = realloc(m_szSummary, sizeof("OptionXXis") + \
  +                    sizeof(configGetname(i)) + sizeof(configGetval(i) + 8));
  +                if (!(strcmp(configGetval(i), "1"))) {
  +                    strcat(m_szSummary, "Option ");
  +                    strcat(m_szSummary, configGetname(i));
  +                    strcat(m_szSummary, " is on.\n");
  +                }
  +                else {
  +                    strcat(m_szSummary, "Option ");
  +                    strcat(m_szSummary, configGetname(i));
  +                    strcat(m_szSummary, " is ");
  +                    strcat(m_szSummary, configGetval(i));
  +                    strcat(m_szSummary, ".\n");
  +                }
  +            }
  +        }           /* FIXME Not threadsafe, wrap with crit section */
  +        ex_catch(Except) {  /* Breaks the otherwise endless loop above */
  +            bCaught = TRUE;
  +        }
  +        i++;
  +    }
  +
  +    return ((const char *)m_szSummary);
  +}
  +
   /************************************************
   * configLoad(int, char **)                      *
   * Load a configuration                          *
  @@ -146,6 +187,8 @@
       if (--m_nLocks == 0) {          /* If m_nLocks is 0, deallocate */
           ex_try {                    /* FIXME, not thread-safe       */
               clioptDestruct();
  +            if (m_szSummary)
  +                free(m_szSummary);
           }
           ex_catch(Except) {
               rethrow;
        

From ossp-cvs-owner@ossp.org  Tue Apr 23 14:30:30 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8DD1B7635E; Tue, 23 Apr 2002 14:30:30 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc Makefile.in configure.in devtool.conf rc.h rc_...
Message-Id: <20020423123030.8DD1B7635E@mail.ossp.org>
Date: Tue, 23 Apr 2002 14:30:30 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   23-Apr-2002 14:30:30
  Branch: HEAD                             Handle: 2002042313302900

  Modified files:
    ossp-pkg/rc             Makefile.in configure.in devtool.conf rc.h
                            rc_cliopt.c rc_config.c

  Log:
    Added OSSP str back to build configuration, and used it for output formatting.
    Added pieces of rc file and section command line parsing logic.

  Summary:
    Revision    Changes     Path
    1.23        +1  -1      ossp-pkg/rc/Makefile.in
    1.17        +11 -11     ossp-pkg/rc/configure.in
    1.12        +6  -6      ossp-pkg/rc/devtool.conf
    1.21        +2  -0      ossp-pkg/rc/rc.h
    1.6         +65 -37     ossp-pkg/rc/rc_cliopt.c
    1.13        +6  -13     ossp-pkg/rc/rc_config.c
  ____________________________________________________________________________

  Index: ossp-pkg/rc/Makefile.in
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 Makefile.in
  --- ossp-pkg/rc/Makefile.in	22 Apr 2002 12:16:39 -0000	1.22
  +++ ossp-pkg/rc/Makefile.in	23 Apr 2002 12:30:29 -0000	1.23
  @@ -65,7 +65,7 @@
   OBJS            = rc.o rc_config.o rc_cliopt.o \
                     rc_version.o rc_pcre.o rc_util.o
   
  -SUBDIRS         = @SUBDIR_EX@ @SUBDIR_POPT@
  +SUBDIRS         = @SUBDIR_EX@ @SUBDIR_STR@ @SUBDIR_POPT@
   #SUBDIRS         = @SUBDIR_EX@ @SUBDIR_VAR@ @SUBDIR_VAL@ @SUBDIR_STR@ @SUBDIR_POPT@
   
   .SUFFIXES:
  Index: ossp-pkg/rc/configure.in
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 configure.in
  --- ossp-pkg/rc/configure.in	8 Apr 2002 15:37:10 -0000	1.16
  +++ ossp-pkg/rc/configure.in	23 Apr 2002 12:30:29 -0000	1.17
  @@ -90,16 +90,16 @@
                    LIBS_EXTRA="$LIBS_EXTRA -lex"])
   AC_SUBST(SUBDIR_EX)
   
  -#dnl Check for OSSP str library
  -#AC_CHECK_EXTLIB([OSSP str],
  -#                str, str_parse, str.h,
  -#                [SUBDIR_STR=""],
  -#                [SUBDIR_STR="rc_str"
  -#                 CPPFLAGS="$CPPFLAGS -Irc_str"
  -#                 CFLAGS="$CFLAGS -Irc_str"
  -#                 LDFLAGS="$LDFLAGS -Lrc_str/.libs"
  -#                 LIBS_EXTRA="$LIBS_EXTRA -lstr"])
  -#AC_SUBST(SUBDIR_STR)
  +dnl Check for OSSP str library
  +AC_CHECK_EXTLIB([OSSP str],
  +                str, str_parse, str.h,
  +                [SUBDIR_STR=""],
  +                [SUBDIR_STR="rc_str"
  +                 CPPFLAGS="$CPPFLAGS -Irc_str"
  +                 CFLAGS="$CFLAGS -Irc_str"
  +                 LDFLAGS="$LDFLAGS -Lrc_str/.libs"
  +                 LIBS_EXTRA="$LIBS_EXTRA -lstr"])
  +AC_SUBST(SUBDIR_STR)
   
   #dnl Check for OSSP var library
   #AC_CHECK_EXTLIB([OSSP var],
  @@ -131,7 +131,7 @@
   enable_headline=no
   export enable_headline
   dnl Call other configure scripts
  -AC_CONFIG_SUBDIRS([$SUBDIR_EX $SUBDIR_POPT])
  +AC_CONFIG_SUBDIRS([$SUBDIR_EX $SUBDIR_STR $SUBDIR_POPT])
   #AC_CONFIG_SUBDIRS([$SUBDIR_EX $SUBDIR_STR $SUBDIR_VAR $SUBDIR_VAL $SUBDIR_POPT])
   
   dnl Make all the necessary Makefiles
  Index: ossp-pkg/rc/devtool.conf
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 devtool.conf
  --- ossp-pkg/rc/devtool.conf	8 Apr 2002 15:37:10 -0000	1.11
  +++ ossp-pkg/rc/devtool.conf	23 Apr 2002 12:30:29 -0000	1.12
  @@ -12,9 +12,9 @@
       echo "===> rc_popt (devtool autogen)"
       (cd rc_popt && ./devtool autogen)
       echo "<=== rc_popt"
  -#    echo "===> rc_str (devtool autogen)"
  -#    (cd rc_str && ./devtool autogen)
  -#    echo "<=== rc_str"
  +    echo "===> rc_str (devtool autogen)"
  +    (cd rc_str && ./devtool autogen)
  +    echo "<=== rc_str"
   #    echo "===> rc_var (devtool autogen)"
   #    (cd rc_var && ./devtool autogen)
   #    echo "<=== rc_var"
  @@ -32,9 +32,9 @@
       echo "===> rc_popt (devtool autoclean)"
       (cd rc_popt && ./devtool autoclean)
       echo "<=== rc_popt"
  -#    echo "===> rc_str (devtool autoclean)"
  -#    (cd rc_str && ./devtool autoclean)
  -#    echo "<=== rc_str"
  +    echo "===> rc_str (devtool autoclean)"
  +    (cd rc_str && ./devtool autoclean)
  +    echo "<=== rc_str"
   #    echo "===> rc_var (devtool autoclean)"
   #    (cd rc_var && ./devtool autoclean)
   #    echo "<=== rc_var"
  Index: ossp-pkg/rc/rc.h
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 rc.h
  --- ossp-pkg/rc/rc.h	22 Apr 2002 15:22:39 -0000	1.20
  +++ ossp-pkg/rc/rc.h	23 Apr 2002 12:30:29 -0000	1.21
  @@ -82,6 +82,8 @@
   
   /* Command line accessor prototypes */
   const char *clioptGetval(rc_opt_t);
  +const char *clioptGetrcfile(void);
  +const char *clioptGetsec(void);
   
       /* Option function prototypes */
       /*FIXME rc_return_t optConstruct(rc_opt_t **);
  Index: ossp-pkg/rc/rc_cliopt.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 rc_cliopt.c
  --- ossp-pkg/rc/rc_cliopt.c	22 Apr 2002 15:22:39 -0000	1.5
  +++ ossp-pkg/rc/rc_cliopt.c	23 Apr 2002 12:30:29 -0000	1.6
  @@ -34,9 +34,11 @@
   #include "rc.h"
   #include "rc_const.h"
   #include "rc_config.h"
  -#include "popt.h"       /* OSSP popt options library    */
  +#include "popt.h"                       /* OSSP popt options library*/
   
  -static char *m_szOptuples[RC_NUMOPTS];  /* Option name value tuples */
  +static char *m_pszOptuples[RC_NUMOPTS]; /* Option name value tuples */
  +static char *m_szRcfile = NULL;         /* rc file                  */
  +static char *m_szSec   = NULL;          /* Section names            */
   
   
   /***************************************
  @@ -55,7 +57,7 @@
   /*    s_pBintab->pOptlist->pvData = NULL;
       s_pBintab->pOptlist->pvNext = NULL;*/
   
  -    memset(m_szOptuples, NULL, sizeof(m_szOptuples));
  +    memset(m_pszOptuples, NULL, sizeof(m_pszOptuples));
   
   TRACE("cliopt constructed.\n");
       return(RC_THROW(RC_OK));
  @@ -70,7 +72,25 @@
       if (!(Optname < RC_NUMOPTS))    /* Validate option range    */
           RC_THROW(RC_ERR_USE);
   
  -    return((const char *)m_szOptuples[Optname]);
  +    return((const char *)m_pszOptuples[Optname]);
  +}
  +
  +/***************************************
  +* clioptGetrcfile(void)                *
  +* Command line rc file accessor        *
  +***************************************/
  +const char *clioptGetrcfile(void)
  +{
  +    return((const char *)m_szRcfile);
  +}
  +
  +/***************************************
  +* clioptGetsec(void)                   *
  +* Command line section accessor        *
  +***************************************/
  +const char *clioptGetsec(void)
  +{
  +    return((const char *)m_szSec);
   }
   
   /***************************************
  @@ -84,67 +104,68 @@
       switch (cliOption) {
       /* Begin concrete (digital) options */
           case RC_USE_VAL:
  -            m_szOptuples[cliOption] = strdup("1"); break;   /* Usage    */
  +            m_pszOptuples[cliOption] = strdup("1");          /* Usage    */
  +            return(RC_THROW(RC_ERR_USE));
           case RC_DBG_VAL:
  -            m_szOptuples[cliOption] = strdup("1"); break;   /* Debug    */
  +            m_pszOptuples[cliOption] = strdup("1"); break;   /* Debug    */
           case RC_VER_VAL:
  -            m_szOptuples[cliOption] = strdup("1"); break;   /* Version  */
  +            m_pszOptuples[cliOption] = strdup("1"); break;   /* Version  */
           case RC_EVL_VAL:                                   
  -            m_szOptuples[cliOption] = strdup("1"); break;   /* Eval     */
  +            m_pszOptuples[cliOption] = strdup("1"); break;   /* Eval     */
           case RC_HLP_VAL:                                   
  -            m_szOptuples[cliOption] = strdup("1"); break;   /* Help     */
  +            m_pszOptuples[cliOption] = strdup("1"); break;   /* Help     */
           case RC_INF_VAL:                                   
  -            m_szOptuples[cliOption] = strdup("1"); break;   /* Info     */
  +            m_pszOptuples[cliOption] = strdup("1"); break;   /* Info     */
           case RC_LBL_VAL:                                   
  -            m_szOptuples[cliOption] = strdup("1"); break;   /* Label    */
  +            m_pszOptuples[cliOption] = strdup("1"); break;   /* Label    */
           case RC_PRN_VAL:                                   
  -            m_szOptuples[cliOption] = strdup("1"); break;   /* Print    */
  +            m_pszOptuples[cliOption] = strdup("1"); break;   /* Print    */
           case RC_SIL_VAL:                                   
  -            m_szOptuples[cliOption] = strdup("1"); break;   /* Silent   */
  +            m_pszOptuples[cliOption] = strdup("1"); break;   /* Silent   */
           case RC_RAW_VAL:                                   
  -            m_szOptuples[cliOption] = strdup("1"); break;   /* Raw      */
  +            m_pszOptuples[cliOption] = strdup("1"); break;   /* Raw      */
           case RC_VRB_VAL:                                   
  -            m_szOptuples[cliOption] = strdup("1"); break;   /* Verbose  */
  +            m_pszOptuples[cliOption] = strdup("1"); break;   /* Verbose  */
           case RC_EXC_VAL:                                   
  -            m_szOptuples[cliOption] = strdup("1"); break;   /* Exec     */
  +            m_pszOptuples[cliOption] = strdup("1"); break;   /* Exec     */
   
       /* Begin abstract (nondigital) options */
           case RC_LOC_VAL:
  -            m_szOptuples[cliOption] = strdup(szArg); break; /* Locations    */
  +            m_pszOptuples[cliOption] = strdup(szArg); break; /* Locations    */
           case RC_CNF_VAL:
  -            m_szOptuples[cliOption] = strdup(szArg); break; /* Conf file    */
  +            m_pszOptuples[cliOption] = strdup(szArg); break; /* Conf file    */
           case RC_FNC_VAL:
  -            m_szOptuples[cliOption] = strdup(szArg); break; /* Func file    */
  +            m_pszOptuples[cliOption] = strdup(szArg); break; /* Func file    */
           case RC_QRY_VAL:
  -            m_szOptuples[cliOption] = strdup(szArg); break; /* Format       */
  +            m_pszOptuples[cliOption] = strdup(szArg); break; /* Format       */
           case RC_TMP_VAL:
  -            m_szOptuples[cliOption] = strdup(szArg); break; /* Temp dir     */
  +            m_pszOptuples[cliOption] = strdup(szArg); break; /* Temp dir     */
           case RC_OWN_VAL:
  -            m_szOptuples[cliOption] = strdup(szArg); break; /* User name    */
  +            m_pszOptuples[cliOption] = strdup(szArg); break; /* User name    */
           case RC_GRP_VAL:
  -            m_szOptuples[cliOption] = strdup(szArg); break; /* Group name   */
  +            m_pszOptuples[cliOption] = strdup(szArg); break; /* Group name   */
           case RC_MSK_VAL:
  -            m_szOptuples[cliOption] = strdup(szArg); break; /* Umask        */
  +            m_pszOptuples[cliOption] = strdup(szArg); break; /* Umask        */
   
           case RC_ASS_VAL:
  -            m_szOptuples[cliOption] = strdup(szArg); break; /* Assignregex  */
  +            m_pszOptuples[cliOption] = strdup(szArg); break; /* Assignregex  */
           case RC_DEF_VAL:
  -            m_szOptuples[cliOption] = strdup(szArg); break; /* Labelregex   */
  +            m_pszOptuples[cliOption] = strdup(szArg); break; /* Labelregex   */
           case RC_REF_VAL:
  -            m_szOptuples[cliOption] = strdup(szArg); break; /* Refregex     */
  +            m_pszOptuples[cliOption] = strdup(szArg); break; /* Refregex     */
           case RC_PRM_VAL:
  -            m_szOptuples[cliOption] = strdup(szArg); break; /* Paramregex   */
  +            m_pszOptuples[cliOption] = strdup(szArg); break; /* Paramregex   */
           case RC_TRM_VAL:
  -            m_szOptuples[cliOption] = strdup(szArg); break; /* Termregex    */
  +            m_pszOptuples[cliOption] = strdup(szArg); break; /* Termregex    */
   
           case RC_NCF_VAL:
  -            m_szOptuples[cliOption] = strdup(szArg); break; /* Configname   */
  +            m_pszOptuples[cliOption] = strdup(szArg); break; /* Configname   */
           case RC_CMN_VAL:
  -            m_szOptuples[cliOption] = strdup(szArg); break; /* Commonname   */
  +            m_pszOptuples[cliOption] = strdup(szArg); break; /* Commonname   */
           case RC_DFL_VAL:
  -            m_szOptuples[cliOption] = strdup(szArg); break; /* Defaultname  */
  +            m_pszOptuples[cliOption] = strdup(szArg); break; /* Defaultname  */
           case RC_ERR_VAL:
  -            m_szOptuples[cliOption] = strdup(szArg); break; /* Errorname    */
  +            m_pszOptuples[cliOption] = strdup(szArg); break; /* Errorname    */
           default : break;
       }
   
  @@ -274,14 +295,21 @@
           rethrow;
       }*/
   
  -    for (i = 0; i < RC_NUMOPTS; i++)                      /* Free the tuple */
  -        m_szOptuples[i] ? free(m_szOptuples[i]) : RC_NOP; /* or do nothing  */
  +    for (i = 0; i < RC_NUMOPTS; i++) {  /* Free the tuples themselves */
  +        if (m_pszOptuples[i]) {
  +            free(m_pszOptuples[i]);
  +            m_pszOptuples[i] = NULL;
  +        }
  +    }
   
  -    memset(m_szOptuples, NULL, sizeof(m_szOptuples));     /* Clear tuples   */
  +    if (m_szRcfile)                     /* Free the rc file arg       */
  +        free(m_szRcfile);
  +    if (m_szSec)                        /* Free the section name arg  */
  +        free(m_szSec);
   
   /* FIXME BEGIN DEBUG */
   for (i = 0; i < RC_NUMOPTS; i++)
  -    if (m_szOptuples[i])
  +    if (m_pszOptuples[i])
           TRACE("Problem! Destructor failed!\n");
   TRACE("cliopt destructed.\n");
   /* FIXME END DEBUG */
  Index: ossp-pkg/rc/rc_config.c
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 rc_config.c
  --- ossp-pkg/rc/rc_config.c	22 Apr 2002 15:22:39 -0000	1.12
  +++ ossp-pkg/rc/rc_config.c	23 Apr 2002 12:30:29 -0000	1.13
  @@ -32,7 +32,8 @@
   #include <string.h>
   
   #include "rc.h"
  -#include "rc_const.h"               /* String constants                 */
  +#include "str.h"
  +#include "rc_const.h"               /* String constants                     */
   
   static int m_nLocks = 0;            /* Server locks, not thread-safe FIXME  */
   static char *m_szSummary = NULL;    /* Configuration summary storage        */
  @@ -127,18 +128,10 @@
                   /* FIXME Unportable kludge to ensure storage FIXME */
                   m_szSummary = realloc(m_szSummary, sizeof("OptionXXis") + \
                       sizeof(configGetname(i)) + sizeof(configGetval(i) + 8));
  -                if (!(strcmp(configGetval(i), "1"))) {
  -                    strcat(m_szSummary, "Option ");
  -                    strcat(m_szSummary, configGetname(i));
  -                    strcat(m_szSummary, " is on.\n");
  -                }
  -                else {
  -                    strcat(m_szSummary, "Option ");
  -                    strcat(m_szSummary, configGetname(i));
  -                    strcat(m_szSummary, " is ");
  -                    strcat(m_szSummary, configGetval(i));
  -                    strcat(m_szSummary, ".\n");
  -                }
  +                if (!(strcmp(configGetval(i), "1")))
  +                    str_concat(m_szSummary, "Option ", configGetname(i), " is on.\n");
  +                else
  +                    str_concat(m_szSummary, "Option ", configGetname(i), " is ", configGetval(i), ".\n");
               }
           }           /* FIXME Not threadsafe, wrap with crit section */
           ex_catch(Except) {  /* Breaks the otherwise endless loop above */

From ossp-cvs-owner@ossp.org  Tue Apr 23 16:23:10 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8005B7635E; Tue, 23 Apr 2002 16:23:10 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tai TODO
Message-Id: <20020423142310.8005B7635E@mail.ossp.org>
Date: Tue, 23 Apr 2002 16:23:10 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   23-Apr-2002 16:23:10
  Branch: HEAD                             Handle: 2002042315231000

  Modified files:
    ossp-pkg/tai            TODO

  Log:
    found parse/format problems

  Summary:
    Revision    Changes     Path
    1.2         +6  -0      ossp-pkg/tai/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/tai/TODO
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 TODO
  --- ossp-pkg/tai/TODO	18 Apr 2002 09:10:46 -0000	1.1.1.1
  +++ ossp-pkg/tai/TODO	23 Apr 2002 14:23:10 -0000	1.2
  @@ -1,4 +1,10 @@
   
  +2002 04 23 thl
  +INPUT:  Mon, 5 Jan 2001 12:34:56 +0200 (MET DST)
  +OUTPUT: Mon, 05 Jan 2001 12:34:56 +0000
  +Problem#1: 5 Jan 2001 was a Friday. TAI currently parses and keeps the day of week but doesn't check
  +Problem#2: TAI currently parses but ignores and therefore looses time zone information
  +
   - tm_parse(buf,fmt,tm) -> tm_parse(buf,buflen,fmt,tm)
   - add exception support
   

From ossp-cvs-owner@ossp.org  Tue Apr 23 16:26:32 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BB2CF7635E; Tue, 23 Apr 2002 16:26:32 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_msg.c
Message-Id: <20020423142632.BB2CF7635E@mail.ossp.org>
Date: Tue, 23 Apr 2002 16:26:32 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   23-Apr-2002 16:26:32
  Branch: HEAD                             Handle: 2002042315263200

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_msg.c

  Log:
    flush canonifydate experiment

  Summary:
    Revision    Changes     Path
    1.8         +72 -2      ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 lmtp2nntp_msg.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	18 Apr 2002 15:38:59 -0000	1.7
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	23 Apr 2002 14:26:32 -0000	1.8
  @@ -30,6 +30,7 @@
   #include "lmtp2nntp_msg.h"
   #include "lmtp2nntp_argz.h"
   #include "fixme.h" //FIMXE logbook only
  +#include "tai.h"
   
   #include "str.h"
   
  @@ -564,6 +565,75 @@
       return rc;
   }
   
  +static void canonifydate(const char *pVal, const char *pArg)
  +{
  +    /* RFC0822
  +     5.  DATE AND TIME SPECIFICATION
  +     5.1.  SYNTAX
  +
  +     date-time   =  [ day "," ] date time          ; "dd mm yy" or "hh:mm:ss zzz"
  +     day         =  "Mon" / "Tue" / "Wed" / "Thu" / "Fri" / "Sat" / "Sun"
  +     date        =  1*2DIGIT month 2DIGIT          ; day month year e.g. 20 Jun 82
  +     month       =  "Jan" / "Feb"/ "Mar" / "Apr"/ "May" / "Jun"/ "Jul" / "Aug"/ "Sep" / "Oct"/ "Nov" / "Dec"
  +     time        =  hour zone                      ; ANSI and Military
  +     hour        =  2DIGIT ":" 2DIGIT [":" 2DIGIT] ; 00:00:00 - 23:59:59
  +     zone        =  "UT"  / "GMT"                  ; Universal Time, North American : UT
  +                 /  "EST" / "EDT"                  ;  Eastern:  - 5/ - 4
  +                 /  "CST" / "CDT"                  ;  Central:  - 6/ - 5
  +                 /  "MST" / "MDT"                  ;  Mountain: - 7/ - 6
  +                 /  "PST" / "PDT"                  ;  Pacific:  - 8/ - 7
  +                 /  1ALPHA                         ; Military: Z = UT; A:-1; (J not used);  M:-12; N:+1; Y:+12
  +                 / ( ("+" / "-") 4DIGIT )          ; Local differential  hours+min. (HHMM)
  +    */
  +    tai_t *tm;
  +    tai_rc_t rv;
  +    char out[32];
  +    int i;
  +    time_t tim;
  +    const struct tm *sttm;
  +    int ok;
  +    char *fmt[] = {
  +        "%a, %d %b %Y %H:%M:%S %z", /* RFC0822 but four digit year */
  +        "%a, %d %b %y %H:%M:%S %z", /* RFC0822 strict */
  +        "%a, %d %b %Y %H:%M %z",    /* RFC0822 but four digit year */
  +        "%a, %d %b %y %H:%M %z",    /* RFC0822 strict */
  +        "%d %b %Y %H:%M:%S %z",     /* RFC0822 but four digit year */
  +        "%d %b %y %H:%M:%S %z",     /* RFC0822 strict */
  +        "%d %b %Y %H:%M %z",        /* RFC0822 but four digit year */
  +        "%d %b %y %H:%M %z",        /* RFC0822 strict */
  +        "%a %b %d %H:%M:%S %Y",     /* strange Mon Jan 27 12:34:56 2001 */
  +        NULL };
  +
  +    printf("DEBUG: pVal=\"%41s\", pArg=\"%s\" ", pVal, pArg);
  +    tai_create(&tm);
  +    tim = time(NULL);
  +    sttm = localtime(&tim);
  +    ok = 0;
  +    for (i = 0; !ok && (fmt[i] != NULL); i++) {
  +        //printf("DEBUG: date=%s, fmt[%d]=%30s ", pArg, i, fmt[i]);
  +        if ((rv = tai_parse(tm, pVal, strlen(pVal), fmt[i])) != TAI_OK) 
  +            ;//printf("FAILED tai_parse() returned %d", rv);
  +        else
  +            ok = 1;
  +#if 0
  +        else {
  +            if ((rv = tai_format(tm, out, sizeof(out), fmt[i])) != TAI_OK) 
  +                printf("#%d: tai_format() returned %d", i, rv);
  +            if (strcmp(pArg, out) != 0)
  +                printf("#%d: output \"%s\", expected \"%s\" (input)", i, out, pArg);
  +        }
  +#endif
  +        //printf("\n");
  +    }
  +    if (ok) {
  +        rv = tai_format(tm, out, sizeof(out), "%a, %d %b %Y %H:%M:%S %z");
  +        printf("OK[%d], %s (%d)\n", ok, out, rv);
  +    }
  +    else
  +        printf("FAILED\n");
  +    tai_destroy(tm);
  +}
  +
   static var_rc_t operate_cb(
       var_t *var, void *ctx,
       const char  *op_ptr, size_t op_len,
  @@ -573,7 +643,6 @@
   {
       int i;
   
  -fprintf(stderr, "DEBUG: #1 HALLO\n");
       if (val_ptr == NULL) {
           *out_ptr = "";
           *out_len = 0;
  @@ -595,10 +664,11 @@
               (*out_ptr)[i] = (char)toupper((int)(val_ptr[i]));
           return VAR_OK;
       }
  -    else if (op_len == 5 && strncmp(op_ptr, "lower", 5) == 0) {
  +    else if (op_len == 12 && strncmp(op_ptr, "canonifydate", 12) == 0) {
           *out_ptr = malloc(val_len);
           *out_len = val_len;
           *out_size = val_len;
  +        canonifydate(val_ptr, arg_ptr);
           for (i = 0; i < val_len; i++)
               (*out_ptr)[i] = (char)tolower((int)(val_ptr[i]));
           return VAR_OK;

From ossp-cvs-owner@ossp.org  Wed Apr 24 11:07:24 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8CB477635E; Wed, 24 Apr 2002 11:07:24 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tai tai_lib.c
Message-Id: <20020424090724.8CB477635E@mail.ossp.org>
Date: Wed, 24 Apr 2002 11:07:24 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   24-Apr-2002 11:07:24
  Branch: HEAD                             Handle: 2002042410072400

  Modified files:
    ossp-pkg/tai            tai_lib.c

  Log:
    added a tai_op stub

  Summary:
    Revision    Changes     Path
    1.2         +10 -0      ossp-pkg/tai/tai_lib.c
  ____________________________________________________________________________

  Index: ossp-pkg/tai/tai_lib.c
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 tai_lib.c
  --- ossp-pkg/tai/tai_lib.c	18 Apr 2002 09:10:45 -0000	1.1.1.1
  +++ ossp-pkg/tai/tai_lib.c	24 Apr 2002 09:07:24 -0000	1.2
  @@ -250,3 +250,13 @@
       return TAI_OK;
   }
   
  +tai_rc_t tai_op(tai_t *tai, tai_op_t op, ...)
  +{
  +    va_list ap;
  +
  +    if (tai == NULL)
  +        return TAI_ERR_ARG;
  +    va_start(ap, op); 
  +    va_end(ap); 
  +    return TAI_ERR_IMP;
  +}

From ossp-cvs-owner@ossp.org  Wed Apr 24 11:26:03 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 67C237635E; Wed, 24 Apr 2002 11:26:03 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_msg.c
Message-Id: <20020424092603.67C237635E@mail.ossp.org>
Date: Wed, 24 Apr 2002 11:26:03 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   24-Apr-2002 11:26:03
  Branch: HEAD                             Handle: 2002042410260300

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_msg.c

  Log:
    implemented %canonifydate so far as lib_tai currently permits

  Summary:
    Revision    Changes     Path
    1.9         +90 -36     ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 lmtp2nntp_msg.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	23 Apr 2002 14:26:32 -0000	1.8
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	24 Apr 2002 09:26:03 -0000	1.9
  @@ -565,7 +565,11 @@
       return rc;
   }
   
  -static void canonifydate(const char *pVal, const char *pArg)
  +#define MAXOUT 32 /* strlen("Mon, 31 Jul 2002 12:34:56 +0123")+1 */
  +static var_rc_t canonifydate(
  +    const char  *cpArg,  size_t nArg,
  +    const char  *cpVal,  size_t nVal,
  +          char **cppOut, size_t *pnOut, size_t *pnOutsize)
   {
       /* RFC0822
        5.  DATE AND TIME SPECIFICATION
  @@ -585,13 +589,9 @@
                    /  1ALPHA                         ; Military: Z = UT; A:-1; (J not used);  M:-12; N:+1; Y:+12
                    / ( ("+" / "-") 4DIGIT )          ; Local differential  hours+min. (HHMM)
       */
  -    tai_t *tm;
       tai_rc_t rv;
  -    char out[32];
       int i;
  -    time_t tim;
  -    const struct tm *sttm;
  -    int ok;
  +    int bOk;
       char *fmt[] = {
           "%a, %d %b %Y %H:%M:%S %z", /* RFC0822 but four digit year */
           "%a, %d %b %y %H:%M:%S %z", /* RFC0822 strict */
  @@ -603,36 +603,96 @@
           "%d %b %y %H:%M %z",        /* RFC0822 strict */
           "%a %b %d %H:%M:%S %Y",     /* strange Mon Jan 27 12:34:56 2001 */
           NULL };
  +    tai_t *now;
  +    tai_t *pastrange;
  +    tai_t *futurerange;
  +    tai_t *value;
   
  -    printf("DEBUG: pVal=\"%41s\", pArg=\"%s\" ", pVal, pArg);
  -    tai_create(&tm);
  -    tim = time(NULL);
  -    sttm = localtime(&tim);
  -    ok = 0;
  -    for (i = 0; !ok && (fmt[i] != NULL); i++) {
  -        //printf("DEBUG: date=%s, fmt[%d]=%30s ", pArg, i, fmt[i]);
  -        if ((rv = tai_parse(tm, pVal, strlen(pVal), fmt[i])) != TAI_OK) 
  -            ;//printf("FAILED tai_parse() returned %d", rv);
  +    tai_create(&now);   //FIXME ex
  +    (void /*FIXME*/)tai_import(now, TAI_TYPE_UNIX);
  +
  +    /* parse argument ([past][,[future]])
  +        () (,)     infinite range in the past, infinite range in the future => canonify only
  +        (7), (7,)  seven days in the past, infinite range in the future
  +        (,3)       infinite range in the past, three days in the future
  +        (7,0)      seven days in the past, no point in future allowed
  +        (0,3)      no point in past allowed, three days in the future => useless
  +        (0,0)      now
  +     */
  +    pastrange   = NULL; /* infinite */
  +    futurerange = NULL; /* infinite */
  +    if (cpArg != NULL) {
  +        char *cpP, *cpF;
  +        cpP = strdupex(cpArg);
  +        cpF = strchr(cpP, ',');
  +        if (cpF == NULL)
  +            cpF = "";
           else
  -            ok = 1;
  +            *cpF++ = NUL;
  +        if (strlen(cpP) != 0) {
  +            tai_create(&pastrange);   //FIXME ex
  +            (void /*FIXME*/)tai_import(pastrange  , TAI_TYPE_SECONDS, 24*60*60*atoi(cpP));
  +        }
  +        if (strlen(cpF) != 0) {
  +            tai_create(&futurerange); //FIXME ex
  +            (void /*FIXME*/)tai_import(futurerange, TAI_TYPE_SECONDS, 24*60*60*atoi(cpF));
  +        }
  +        free(cpP);
  +    }
  +
  +    printf("DEBUG: cpVal=\"%41s\", cpArg=\"%s\"\n", cpVal, cpArg);
  +    if ((cpVal == NULL) || (strlen(cpVal) == 0)) {
  +        *cppOut    = (char *)mallocex(MAXOUT);
  +        *pnOutsize = MAXOUT;
  +        (void /*FIXME*/)tai_format(now, *cppOut, MAXOUT, "%a, %d %b %Y %H:%M:%S %z");
  +        *pnOut     = strlen(*cppOut);
  +    }
  +    else {
  +        tai_create(&value);   //FIXME ex
  +        bOk = FALSE;
  +        for (i = 0; !bOk && (fmt[i] != NULL); i++) {
  +            if ((rv = tai_parse(value, cpVal, strlen(cpVal), fmt[i])) == TAI_OK) 
  +                bOk = TRUE;
  +            //FIXME printf("DEBUG: checked against \"%41s\" returned %d\n", fmt[i], rv);
  +        }
  +        if (   bOk
   #if 0
  +            tai_op is not yet implemented
  +            && ((pastrange   != NULL) && (tai_op(value, TAI_OP_GT, pastrange  ) == TAI_OK))
  +            && ((futurerange != NULL) && (tai_op(value, TAI_OP_LT, futurerange) == TAI_OK))
  +#endif
  +            ) {
  +            *cppOut    = (char *)mallocex(MAXOUT);
  +            *pnOutsize = MAXOUT;
  +            (void /*FIXME*/)tai_format(value, *cppOut, MAXOUT, "%a, %d %b %Y %H:%M:%S %z");
  +            *pnOut     = strlen(*cppOut);
  +        }
           else {
  -            if ((rv = tai_format(tm, out, sizeof(out), fmt[i])) != TAI_OK) 
  -                printf("#%d: tai_format() returned %d", i, rv);
  -            if (strcmp(pArg, out) != 0)
  -                printf("#%d: output \"%s\", expected \"%s\" (input)", i, out, pArg);
  +            /*FIXME interesting lib_var behaviour:
  +            *cppOut    = NULL;                returning NULL with size/out=0 means not expandable and keeps the current value
  +            *cppOut    = (char *)mallocex(0); returning any freeable pointer with size/out=0 means empty value
  +            *pnOutsize = 0;
  +            *pnOut     = 0;
  +            */
  +            *cppOut    = (char *)mallocex(0); //FIXME is this portable?
  +            *pnOutsize = 0;
  +            *pnOut     = 0;
           }
  -#endif
  -        //printf("\n");
       }
  -    if (ok) {
  -        rv = tai_format(tm, out, sizeof(out), "%a, %d %b %Y %H:%M:%S %z");
  -        printf("OK[%d], %s (%d)\n", ok, out, rv);
  -    }
  -    else
  -        printf("FAILED\n");
  -    tai_destroy(tm);
  +
  +    /* cleanup */
  +    if(now != NULL)
  +        tai_destroy(now);
  +    if(pastrange != NULL)
  +        tai_destroy(pastrange);
  +    if(futurerange != NULL)
  +        tai_destroy(futurerange);
  +    if(value != NULL)
  +        tai_destroy(value);
  +
  +    return VAR_OK;
   }
  +#undef MAXOUT //FIXME is there a better way to do it?
   
   static var_rc_t operate_cb(
       var_t *var, void *ctx,
  @@ -665,13 +725,7 @@
           return VAR_OK;
       }
       else if (op_len == 12 && strncmp(op_ptr, "canonifydate", 12) == 0) {
  -        *out_ptr = malloc(val_len);
  -        *out_len = val_len;
  -        *out_size = val_len;
  -        canonifydate(val_ptr, arg_ptr);
  -        for (i = 0; i < val_len; i++)
  -            (*out_ptr)[i] = (char)tolower((int)(val_ptr[i]));
  -        return VAR_OK;
  +        return canonifydate(arg_ptr, arg_len, val_ptr, val_len, out_ptr, out_len, out_size);
       }
       else 
           return VAR_ERR_UNDEFINED_OPERATION;

From ossp-cvs-owner@ossp.org  Wed Apr 24 11:37:17 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2F8FC7635E; Wed, 24 Apr 2002 11:37:17 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp Makefile.in configure.ac
Message-Id: <20020424093717.2F8FC7635E@mail.ossp.org>
Date: Wed, 24 Apr 2002 11:37:17 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   24-Apr-2002 11:37:17
  Branch: HEAD                             Handle: 2002042410371600

  Modified files:
    ossp-pkg/lmtp2nntp      Makefile.in configure.ac

  Log:
    absorb lib_tai

  Summary:
    Revision    Changes     Path
    1.49        +1  -1      ossp-pkg/lmtp2nntp/Makefile.in
    1.27        +11 -0      ossp-pkg/lmtp2nntp/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.48 -r1.49 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	25 Mar 2002 12:23:13 -0000	1.48
  +++ ossp-pkg/lmtp2nntp/Makefile.in	24 Apr 2002 09:37:16 -0000	1.49
  @@ -48,7 +48,7 @@
   SRCS = lmtp2nntp_main.c   lmtp2nntp_daemon.c lmtp2nntp_lmtp.c lmtp2nntp_nntp.c lmtp2nntp_argz.c lmtp2nntp_shpat.c lmtp2nntp_msg.c lmtp2nntp_option.c lmtp2nntp_config.c lmtp2nntp_exwrap.c lmtp2nntp_version.c lmtp2nntp_l2.c
   OBJS = lmtp2nntp_main.o   lmtp2nntp_daemon.o lmtp2nntp_lmtp.o lmtp2nntp_nntp.o lmtp2nntp_argz.o lmtp2nntp_shpat.o lmtp2nntp_msg.o lmtp2nntp_option.o lmtp2nntp_config.o lmtp2nntp_exwrap.o lmtp2nntp_version.o lmtp2nntp_l2.o
   
  -SUBDIRS = @SUBDIR_EX@ @SUBDIR_STR@ @SUBDIR_L2@ @SUBDIR_SA@ @SUBDIR_VAR@ @SUBDIR_VAL@ @SUBDIR_POPT@ @SUBDIR_PCRE@
  +SUBDIRS = @SUBDIR_EX@ @SUBDIR_STR@ @SUBDIR_L2@ @SUBDIR_SA@ @SUBDIR_VAR@ @SUBDIR_VAL@ @SUBDIR_POPT@ @SUBDIR_PCRE@ @SUBDIR_TAI@
   
   all: _SUBDIRS_all lmtp2nntp lmtp2nntp.8
   
  Index: ossp-pkg/lmtp2nntp/configure.ac
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 configure.ac
  --- ossp-pkg/lmtp2nntp/configure.ac	14 Mar 2002 16:07:38 -0000	1.26
  +++ ossp-pkg/lmtp2nntp/configure.ac	24 Apr 2002 09:37:16 -0000	1.27
  @@ -136,6 +136,17 @@
                    LIBS_EXTRA="$LIBS_EXTRA -lpcre"])
   AC_SUBST(SUBDIR_PCRE)
   
  +dnl #   check for OSSP tai library
  +AC_CHECK_EXTLIB([OSSP tai], 
  +                tai, tai_create, tai.h, 
  +                [SUBDIR_PCRE=""], 
  +                [SUBDIR_PCRE="lib_tai"
  +                 CPPFLAGS="$CPPFLAGS -Ilib_tai"
  +                 CFLAGS="$CFLAGS -Ilib_tai"
  +                 LDFLAGS="$LDFLAGS -Llib_tai/.libs"
  +                 LIBS_EXTRA="$LIBS_EXTRA -ltai"])
  +AC_SUBST(SUBDIR_TAI)
  +
   dnl #   check for external Dmalloc library
   AC_CHECK_EXTLIB([Dmalloc], dmalloc, dmalloc_debug, dmalloc.h, 
                   [AC_DEFINE(WITH_DMALLOC, 1, [Define to 1 if building with Dmalloc])])

From ossp-cvs-owner@ossp.org  Wed Apr 24 11:41:09 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0BE117635E; Wed, 24 Apr 2002 11:41:08 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp .cvsignore
Message-Id: <20020424094108.0BE117635E@mail.ossp.org>
Date: Wed, 24 Apr 2002 11:41:08 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   24-Apr-2002 11:41:08
  Branch: HEAD                             Handle: 2002042410410800

  Modified files:
    ossp-pkg/lmtp2nntp      .cvsignore

  Log:
    ignore debug and testing input/ config/ logs ...

  Summary:
    Revision    Changes     Path
    1.14        +1  -0      ossp-pkg/lmtp2nntp/.cvsignore
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/.cvsignore
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 .cvsignore
  --- ossp-pkg/lmtp2nntp/.cvsignore	13 Sep 2001 18:51:40 -0000	1.13
  +++ ossp-pkg/lmtp2nntp/.cvsignore	24 Apr 2002 09:41:08 -0000	1.14
  @@ -12,3 +12,4 @@
   dmalloc.log
   logfile
   ChangeLog
  +[1-9].*

From ossp-cvs-owner@ossp.org  Wed Apr 24 18:47:09 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 981737635E; Wed, 24 Apr 2002 18:47:08 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc 00TODO Makefile.in rc.c rc.h rc_cliopt.c rc_co...
Message-Id: <20020424164708.981737635E@mail.ossp.org>
Date: Wed, 24 Apr 2002 18:47:08 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   24-Apr-2002 18:47:08
  Branch: HEAD                             Handle: 2002042417470700

  Modified files:
    ossp-pkg/rc             00TODO Makefile.in rc.c rc.h rc_cliopt.c
                            rc_config.c rc_const.h rc_opt.c

  Log:
    Command line option configuration and some processor operations.

  Summary:
    Revision    Changes     Path
    1.23        +3  -0      ossp-pkg/rc/00TODO
    1.24        +2  -2      ossp-pkg/rc/Makefile.in
    1.22        +53 -22     ossp-pkg/rc/rc.c
    1.22        +31 -13     ossp-pkg/rc/rc.h
    1.7         +227 -137   ossp-pkg/rc/rc_cliopt.c
    1.14        +118 -32    ossp-pkg/rc/rc_config.c
    1.5         +6  -1      ossp-pkg/rc/rc_const.h
    1.4         +4  -4      ossp-pkg/rc/rc_opt.c
  ____________________________________________________________________________

  Index: ossp-pkg/rc/00TODO
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 00TODO
  --- ossp-pkg/rc/00TODO	11 Apr 2002 16:52:45 -0000	1.22
  +++ ossp-pkg/rc/00TODO	24 Apr 2002 16:47:07 -0000	1.23
  @@ -10,6 +10,9 @@
       Give example semantics of a common scenario.
       No error semantics in pseudocode.
   
  +Known bugs
  +  Not multithreaded (too many potentials for race conditions or overwrite)
  +
   Document
     Refs, pri, user, group, ci, go only in normal (not special) sections.
   
  Index: ossp-pkg/rc/Makefile.in
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 Makefile.in
  --- ossp-pkg/rc/Makefile.in	23 Apr 2002 12:30:29 -0000	1.23
  +++ ossp-pkg/rc/Makefile.in	24 Apr 2002 16:47:07 -0000	1.24
  @@ -105,6 +105,7 @@
   $(PROG_NAME): $(OBJS)
   #	$(LIBTOOL) --mode=link --quiet $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)
   	$(CC) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)
  +	$(CHMOD) 755 rc_test.sh > /dev/null 2>&1
   
   rc.1: rc.pod
   	VS=`$(SHTOOL) version -lc -dshort rc_version.c`; \
  @@ -146,8 +147,7 @@
   	$(RM) shtool
   
   check: test
  -test: rc
  -	$(CHMOD) 755 rc_test.sh > /dev/null 2>&1
  +test: $(PROG_NAME)
   	./rc_test.sh
   
   .PHONY: install uninstall clean distclean realclean check test
  Index: ossp-pkg/rc/rc.c
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 rc.c
  --- ossp-pkg/rc/rc.c	22 Apr 2002 15:22:39 -0000	1.21
  +++ ossp-pkg/rc/rc.c	24 Apr 2002 16:47:07 -0000	1.22
  @@ -27,41 +27,72 @@
   **  rc.c: Run-command processor ISO C source file
   */
   
  -#include <stdio.h>
   #include <stdlib.h>
   
  -#include "rc.h"
  -#include "rc_const.h"
  -#include "rc_private.h"
  +#include "rc.h"         /* Public interfaces            */
  +#include "rc_const.h"   /* Englisch string constants    */
  +#include "rc_config.h"  /* For RC_XXX_VAL definitions   */
   
   
  +/************************************************
  +* rcIntro(void)                                 *
  +* Introduction to rc: help, usage, or version   *
  +************************************************/
  +rc_return_t rcIntro(void)
  +{
  +    ex_t Except;
  +
  +    ex_try { /* Basic checks of version, usage, and help options */
  +        if (configGetval(RC_VER_VAL))
  +            fprintf(stdout, "OSSP rc %s\n", RC_VERSION);
  +        if (configGetval(RC_USE_VAL))
  +            clioptPrintusage();
  +        if (configGetval(RC_HLP_VAL))
  +            clioptPrintusage(); /* FIXME Replace with real help FIXME */
  +    }
  +    ex_catch(Except) {
  +        rethrow;
  +    }
  +
  +    return(RC_THROW(RC_OK));
  +}
  +
  +/************************************************
  +* main(int, char **)                            *
  +* Main rc control block                         *
  +************************************************/
   int main(int argc, char *argv[])
   {
       ex_t Except;
  +    rc_t *pRc = NULL;
   
       ex_try {
  -        configConstruct();
  -        configLoad(argc, argv);
  -        /* Processing the runcommands */
  -/*        procOpen(szRcfilist, szFuncfilist, szTmpfile);
  -        procConf(szEnvass, szSecdef, szSecref, szSecparm);
  -        procParse();
  -        procSec(szUmask, szUser, szGroup);
  -        procEval(szSection1, szSection2, ...);
  -        configDestruct();*/
  +        configNew();            /* Construct a new configuration              */
  +        configLoad(argc, argv); /* Read configuration from cli, env, and conf */
  +        configDebug();          /* FIXME Remove FIXME */
  +        rcIntro();              /* Test for usage, help, and version options  */
  +
  +/*        pRc = procNew();
  +        procReadrc(pRc);
  +        procReadfuncs(pRc);
  +        procReadtmp(pRc);
  +        for (i = 0; i < clioptGetseclen; procSection(pRc, configGetsec(i)));
  +        procParse(pRc);         /- Script generation               -/
  +        procOut(pRc);           /- [Execute|Evaluate|Print] script -/
  +
  +        procDelete(pRc);*/
  +        configDelete();
       }
       ex_catch(Except) {
  -        if ((int)Except.ex_value == RC_CNF_VRS)
  -            fprintf(stdout, "This is OSSP rc, version %s\n", RC_VERSION);
  -            
  -        fprintf(stderr, "Class '%s' threw exception %d in %s:%s():%d.\n",\
  -               (char *)Except.ex_class, (int)Except.ex_value,\
  -               Except.ex_file, Except.ex_func, Except.ex_line);
  +        if ((rc_return_t)Except.ex_value == RC_ERR_USE) {
  +            clioptPrintusage();
  +        }
  +        else
  +            fprintf(stderr, "Class '%s' threw exception %d in %s:%s():%d.\n",\
  +                   (char *)Except.ex_class, (int)Except.ex_value,\
  +                   Except.ex_file, Except.ex_func, Except.ex_line);
           exit(1);        /* Failure */
       }
   
  -fprintf(stderr, configSummarize());
  -configDestruct();   /* FIXME Remove, allow first scope */
  -TRACE("No exceptions caught\n");
       exit(0);            /* Success */
   }
  Index: ossp-pkg/rc/rc.h
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 rc.h
  --- ossp-pkg/rc/rc.h	23 Apr 2002 12:30:29 -0000	1.21
  +++ ossp-pkg/rc/rc.h	24 Apr 2002 16:47:07 -0000	1.22
  @@ -45,10 +45,9 @@
   
   #include "rc_private.h"
   
  -/* RC return codes */
  +/* Rc return codes */
   typedef enum {
       RC_OK,      /* Success                  */
  -    RC_CNF_VRS, /* User requested version   */
       RC_ERR_USE, /* Usage error              */
       RC_ERR_MEM, /* Memory error             */
       RC_ERR_SYS, /* System error (see errno) */
  @@ -56,38 +55,57 @@
       RC_ERR_INT  /* Internal error           */
   } rc_return_t;
   
  +/* Rc class */
  +typedef void *rc_t;
  +
  +/* Rc script type */
  +typedef char *rc_script_t;
  +
  +/* Main function prototypes */
  +rc_return_t rcIntro(void);
  +
   /* Option function prototypes */
  -rc_return_t optionProcess(void);
  -rc_return_t optionProcess(void);
  +/*rc_return_t optionProcess(void);
  +rc_return_t optionProcess(void);*/
   
   /* Config function prototypes */
  -rc_return_t configConstruct(void);
  +rc_return_t configNew(void);
   rc_return_t configLoad(int, char **);
  -rc_return_t configDestruct(void);
  +rc_return_t configDelete(void);
  +const char *configSummarize(void);
  +void configDebug(void);                 /* FIXME Remove */
   
   /* Config accessor prototypes */
   const char *configGetval(rc_opt_t);
   const char *configGetname(rc_opt_t);
  -const char *configSummarize(void);
  +const char *configGetrcfile(void);
  +const char *configGetsec(int);
   
   /* Command line function prototypes */
  -rc_return_t clioptConstruct(void);
  +rc_return_t clioptNew(void);
  +rc_return_t clioptPrintusage(void);
   /*FIXME    rc_return_t clioptRemnode(rc_bintup_t **);
       rc_return_t clioptRemallimp(rc_bintup_t **);
       rc_return_t clioptRemall(void);
       rc_return_t clioptAppnode(const char *, const char *);*/
   rc_return_t clioptProcess(int, const char *);
  -rc_return_t clioptParse(int, char **);
  -rc_return_t clioptDestruct(void);
  +rc_return_t clioptParseopt(int, char **);
  +rc_return_t clioptParserc(void);
  +rc_return_t clioptParsesec(void);
  +rc_return_t clioptDelete(void);
   
   /* Command line accessor prototypes */
   const char *clioptGetval(rc_opt_t);
   const char *clioptGetrcfile(void);
  -const char *clioptGetsec(void);
  +const char **clioptGetsec(void);
  +int clioptGetseclen(void);
  +rc_return_t clioptSetval(rc_opt_t, const char *);
  +rc_return_t clioptSetrcfile(const char *);
  +rc_return_t clioptSetsec(const char **);
   
       /* Option function prototypes */
  -    /*FIXME rc_return_t optConstruct(rc_opt_t **);
  -    rc_return_t optDestruct(rc_opt_t **);*/
  +    /*FIXME rc_return_t optNew(rc_opt_t **);
  +    rc_return_t optDelete(rc_opt_t **);*/
   
       /* Option accessor prototypes */
       /*FIXME rc_return_t optGetname(rc_opt_t *, char **);
  Index: ossp-pkg/rc/rc_cliopt.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 rc_cliopt.c
  --- ossp-pkg/rc/rc_cliopt.c	23 Apr 2002 12:30:29 -0000	1.6
  +++ ossp-pkg/rc/rc_cliopt.c	24 Apr 2002 16:47:07 -0000	1.7
  @@ -27,25 +27,66 @@
   **  rc_cliopt.c: Run-command processor ISO C source file
   */
   
  -#include <stdio.h>
   #include <stdlib.h>
   #include <string.h>
   
   #include "rc.h"
   #include "rc_const.h"
   #include "rc_config.h"
  -#include "popt.h"                       /* OSSP popt options library*/
  +#include "popt.h"                              /* OSSP popt options library   */
   
  -static char *m_pszOptuples[RC_NUMOPTS]; /* Option name value tuples */
  -static char *m_szRcfile = NULL;         /* rc file                  */
  -static char *m_szSec   = NULL;          /* Section names            */
  +static char        *m_pszOptuples[RC_NUMOPTS]; /* Option name value tuples    */
  +static char        *m_szRcfile = NULL;         /* rc file                     */
  +static char       **m_pszSec   = NULL;         /* Section names               */
  +static popt_context m_Optcon;                  /* Context for parsing options */
  +
  +static struct popt_option m_pOptable[] = {
  +    /* Long options with short keys but no arguments */
  +    {RC_USE_NAME, '?', POPT_ARG_NONE, 0, RC_USE_VAL, RC_USE_DESC, NULL},
  +    {RC_DBG_NAME, 'd', POPT_ARG_NONE, 0, RC_DBG_VAL, RC_DBG_DESC, NULL},
  +    {RC_VER_NAME, 'V', POPT_ARG_NONE, 0, RC_VER_VAL, RC_VER_DESC, NULL},
  +    {RC_EVL_NAME, 'e', POPT_ARG_NONE, 0, RC_EVL_VAL, RC_EVL_DESC, NULL},
  +    {RC_HLP_NAME, 'h', POPT_ARG_NONE, 0, RC_HLP_VAL, RC_HLP_DESC, NULL},
  +    {RC_INF_NAME, 'i', POPT_ARG_NONE, 0, RC_INF_VAL, RC_INF_DESC, NULL},
  +    {RC_LBL_NAME, 'l', POPT_ARG_NONE, 0, RC_LBL_VAL, RC_LBL_DESC, NULL},
  +    {RC_PRN_NAME, 'p', POPT_ARG_NONE, 0, RC_PRN_VAL, RC_PRN_DESC, NULL},
  +    {RC_SIL_NAME, 's', POPT_ARG_NONE, 0, RC_SIL_VAL, RC_SIL_DESC, NULL},
  +    {RC_RAW_NAME, 'r', POPT_ARG_NONE, 0, RC_RAW_VAL, RC_RAW_DESC, NULL},
  +    {RC_VRB_NAME, 'v', POPT_ARG_NONE, 0, RC_VRB_VAL, RC_VRB_DESC, NULL},
  +    {RC_EXC_NAME, 'x', POPT_ARG_NONE, 0, RC_EXC_VAL, RC_EXC_DESC, NULL},
  +                                          
  +    /* Single argument long options with short keys */
  +    {RC_LOC_NAME, 'L', POPT_ARG_STRING, 0, RC_LOC_VAL, RC_LOC_DESC, "regx"},
  +    {RC_CNF_NAME, 'c', POPT_ARG_STRING, 0, RC_CNF_VAL, RC_CNF_DESC, "path"},
  +    {RC_FNC_NAME, 'f', POPT_ARG_STRING, 0, RC_FNC_VAL, RC_FNC_DESC, "path"},
  +    {RC_QRY_NAME, 'q', POPT_ARG_STRING, 0, RC_QRY_VAL, RC_QRY_DESC, "varx"},
  +    {RC_TMP_NAME, 't', POPT_ARG_STRING, 0, RC_TMP_VAL, RC_TMP_DESC, "path"},
  +
  +    /* Single argument long options without short keys */
  +    {RC_OWN_NAME, 0, POPT_ARG_STRING, 0, RC_OWN_VAL, RC_OWN_DESC, "user"},
  +    {RC_GRP_NAME, 0, POPT_ARG_STRING, 0, RC_GRP_VAL, RC_GRP_DESC, "group"},
  +    {RC_MSK_NAME, 0, POPT_ARG_INT,    0, RC_MSK_VAL, RC_MSK_DESC, "umask"},
  +    {RC_ASS_NAME, 0, POPT_ARG_STRING, 0, RC_ASS_VAL, RC_ASS_DESC, "regx"},
  +    {RC_DEF_NAME, 0, POPT_ARG_STRING, 0, RC_DEF_VAL, RC_DEF_DESC, "regx"},
  +    {RC_REF_NAME, 0, POPT_ARG_STRING, 0, RC_REF_VAL, RC_REF_DESC, "regx"},
  +    {RC_PRM_NAME, 0, POPT_ARG_STRING, 0, RC_PRM_VAL, RC_PRM_DESC, "regx"},
  +    {RC_TRM_NAME, 0, POPT_ARG_STRING, 0, RC_TRM_VAL, RC_TRM_DESC, "regx"},
  +    {RC_NCF_NAME, 0, POPT_ARG_STRING, 0, RC_NCF_VAL, RC_NCF_DESC, "name"},
  +    {RC_CMN_NAME, 0, POPT_ARG_STRING, 0, RC_CMN_VAL, RC_CMN_DESC, "name"},
  +    {RC_DFL_NAME, 0, POPT_ARG_STRING, 0, RC_DFL_VAL, RC_DFL_DESC, "name"},
  +    {RC_ERR_NAME, 0, POPT_ARG_STRING, 0, RC_ERR_VAL, RC_ERR_DESC, "name"},
  +
  +    /* Special stuff    */
  +    POPT_AUTOHELP
  +    {NULL, 0, 0, NULL, 0}
  +};
   
   
   /***************************************
  -* clioptConstruct(void)                *
  +* clioptNew(void)                      *
   * Construct a command line option      *
   ***************************************/
  -rc_return_t clioptConstruct(void)
  +rc_return_t clioptNew(void)
   {
   /*    assert(s_pBintab == NULL); */           /* Error if constructed already */
   /*    s_pBintab = malloc(sizeof(*s_pBintab));*/ /* Allocate a cliopt instance   */
  @@ -53,19 +94,30 @@
           return(RC_THROW(RC_ERR_MEM));
   
       s_pBintab->pOptlist = malloc(sizeof(*s_pBintab->pOptlist));*/
  -/*FIXME    optConstruct((rc_opt_t **)&s_pBintab->pOptlist->pvData);FIXME*/
  +/*FIXME    optNew((rc_opt_t **)&s_pBintab->pOptlist->pvData);FIXME*/
   /*    s_pBintab->pOptlist->pvData = NULL;
       s_pBintab->pOptlist->pvNext = NULL;*/
   
       memset(m_pszOptuples, NULL, sizeof(m_pszOptuples));
   
  -TRACE("cliopt constructed.\n");
       return(RC_THROW(RC_OK));
   }
   
   /***************************************
  -* clioptGetval(rc_opt_t)               *
  -* Command line option accessor         *
  +* clioptPrintusage()                   *
  +* Print usage to command line stderr   *
  +***************************************/
  +rc_return_t clioptPrintusage(void)
  +{
  +    popt_printusage(m_Optcon, stderr, 0);
  +
  +    return(RC_THROW(RC_OK));
  +}
  +
  +/***************************************
  +* clioptGetXXX()                       *
  +* clioptSetXXX()                       *
  +* Command line option accessors        *
   ***************************************/
   const char *clioptGetval(rc_opt_t Optname)
   {
  @@ -75,22 +127,77 @@
       return((const char *)m_pszOptuples[Optname]);
   }
   
  -/***************************************
  -* clioptGetrcfile(void)                *
  -* Command line rc file accessor        *
  -***************************************/
   const char *clioptGetrcfile(void)
   {
  +    if (!m_szRcfile)
  +        RC_THROW(RC_ERR_USE);
  +
       return((const char *)m_szRcfile);
   }
   
  -/***************************************
  -* clioptGetsec(void)                   *
  -* Command line section accessor        *
  -***************************************/
  -const char *clioptGetsec(void)
  +const char **clioptGetsec(void)
   {
  -    return((const char *)m_szSec);
  +    if (!m_pszSec)
  +        RC_THROW(RC_ERR_USE);
  +
  +    return((const char **)m_pszSec);
  +}
  +
  +int clioptGetseclen(void)
  +{
  +    int i = 0;
  +
  +    if (!m_pszSec)
  +        RC_THROW(RC_ERR_USE);
  +
  +    for (i = 0; m_pszSec[i]; i++);
  +    return(i);
  +}
  +
  +rc_return_t clioptSetval(rc_opt_t Optname, const char *kszOptval)
  +{
  +    if (!(Optname < RC_NUMOPTS))    /* Validate option range    */
  +        return(RC_THROW(RC_ERR_USE));
  +    if (!(kszOptval))               /* Validate string value    */
  +        return(RC_THROW(RC_ERR_USE));
  +
  +    if (!(m_pszOptuples[Optname] = strdup(kszOptval)))
  +        return(RC_THROW(RC_ERR_MEM));
  +    return(RC_THROW(RC_OK));
  +}
  +
  +rc_return_t clioptSetrcfile(const char *kszRc)
  +{
  +    if (m_szRcfile)                     /* Forbid overwriting */
  +        return(RC_THROW(RC_ERR_USE));   /* an existing rcfile */
  +    else if (kszRc)
  +        m_szRcfile = strdup(kszRc);
  +    else
  +        return(RC_THROW(RC_ERR_USE));   /* Incoming string is NULL? */
  +
  +    return(RC_THROW(RC_OK));
  +}
  +
  +rc_return_t clioptSetsec(const char *pkszSec[])
  +{
  +    int i = 0;
  +
  +    if (m_pszSec)                                    /* Forbid overwriting */
  +        return(RC_THROW(RC_ERR_USE));                /* an existing rcfile */
  +    else if (pkszSec) {
  +        for (i = 0; pkszSec[i]; i++);                /* Count the sections */
  +        m_pszSec = malloc(sizeof (char **) * i + 1); /* Allocate using i   */
  +
  +        for (i = 0; pkszSec[i]; i++) {
  +            m_pszSec[i] = malloc(strlen(pkszSec[i]));
  +            memcpy(m_pszSec[i], pkszSec[i], strlen(pkszSec[i]));
  +        }
  +        m_pszSec[i] = NULL; /* Used later for finding the end of array */
  +    }
  +    else
  +        return(RC_THROW(RC_ERR_USE));   /* Incoming sections are NULL? */
  +
  +    return(RC_THROW(RC_OK));
   }
   
   /***************************************
  @@ -99,73 +206,72 @@
   * processing the corresponding option  *
   * and update option table accordingly  *
   ***************************************/
  -rc_return_t clioptProcess(int cliOption, const char *szArg)
  +rc_return_t clioptProcess(int cliOption, const char *kszArg)
   {
       switch (cliOption) {
       /* Begin concrete (digital) options */
           case RC_USE_VAL:
  -            m_pszOptuples[cliOption] = strdup("1");          /* Usage    */
  -            return(RC_THROW(RC_ERR_USE));
  +            clioptSetval(cliOption, "1"); break;   /* Usage    */
           case RC_DBG_VAL:
  -            m_pszOptuples[cliOption] = strdup("1"); break;   /* Debug    */
  +            clioptSetval(cliOption, "1"); break;   /* Debug    */
           case RC_VER_VAL:
  -            m_pszOptuples[cliOption] = strdup("1"); break;   /* Version  */
  +            clioptSetval(cliOption, "1"); break;   /* Version  */
           case RC_EVL_VAL:                                   
  -            m_pszOptuples[cliOption] = strdup("1"); break;   /* Eval     */
  +            clioptSetval(cliOption, "1"); break;   /* Eval     */
           case RC_HLP_VAL:                                   
  -            m_pszOptuples[cliOption] = strdup("1"); break;   /* Help     */
  +            clioptSetval(cliOption, "1"); break;   /* Help     */
           case RC_INF_VAL:                                   
  -            m_pszOptuples[cliOption] = strdup("1"); break;   /* Info     */
  +            clioptSetval(cliOption, "1"); break;   /* Info     */
           case RC_LBL_VAL:                                   
  -            m_pszOptuples[cliOption] = strdup("1"); break;   /* Label    */
  +            clioptSetval(cliOption, "1"); break;   /* Label    */
           case RC_PRN_VAL:                                   
  -            m_pszOptuples[cliOption] = strdup("1"); break;   /* Print    */
  +            clioptSetval(cliOption, "1"); break;   /* Print    */
           case RC_SIL_VAL:                                   
  -            m_pszOptuples[cliOption] = strdup("1"); break;   /* Silent   */
  +            clioptSetval(cliOption, "1"); break;   /* Silent   */
           case RC_RAW_VAL:                                   
  -            m_pszOptuples[cliOption] = strdup("1"); break;   /* Raw      */
  +            clioptSetval(cliOption, "1"); break;   /* Raw      */
           case RC_VRB_VAL:                                   
  -            m_pszOptuples[cliOption] = strdup("1"); break;   /* Verbose  */
  +            clioptSetval(cliOption, "1"); break;   /* Verbose  */
           case RC_EXC_VAL:                                   
  -            m_pszOptuples[cliOption] = strdup("1"); break;   /* Exec     */
  +            clioptSetval(cliOption, "1"); break;   /* Exec     */
   
       /* Begin abstract (nondigital) options */
           case RC_LOC_VAL:
  -            m_pszOptuples[cliOption] = strdup(szArg); break; /* Locations    */
  +            clioptSetval(cliOption, kszArg); break; /* Locations   */
           case RC_CNF_VAL:
  -            m_pszOptuples[cliOption] = strdup(szArg); break; /* Conf file    */
  +            clioptSetval(cliOption, kszArg); break; /* Conf file   */
           case RC_FNC_VAL:
  -            m_pszOptuples[cliOption] = strdup(szArg); break; /* Func file    */
  +            clioptSetval(cliOption, kszArg); break; /* Func file   */
           case RC_QRY_VAL:
  -            m_pszOptuples[cliOption] = strdup(szArg); break; /* Format       */
  +            clioptSetval(cliOption, kszArg); break; /* Format      */
           case RC_TMP_VAL:
  -            m_pszOptuples[cliOption] = strdup(szArg); break; /* Temp dir     */
  +            clioptSetval(cliOption, kszArg); break; /* Temp dir    */
           case RC_OWN_VAL:
  -            m_pszOptuples[cliOption] = strdup(szArg); break; /* User name    */
  +            clioptSetval(cliOption, kszArg); break; /* User name   */
           case RC_GRP_VAL:
  -            m_pszOptuples[cliOption] = strdup(szArg); break; /* Group name   */
  +            clioptSetval(cliOption, kszArg); break; /* Group name  */
           case RC_MSK_VAL:
  -            m_pszOptuples[cliOption] = strdup(szArg); break; /* Umask        */
  +            clioptSetval(cliOption, kszArg); break; /* Umask       */
   
           case RC_ASS_VAL:
  -            m_pszOptuples[cliOption] = strdup(szArg); break; /* Assignregex  */
  +            clioptSetval(cliOption, kszArg); break; /* Assignregex */
           case RC_DEF_VAL:
  -            m_pszOptuples[cliOption] = strdup(szArg); break; /* Labelregex   */
  +            clioptSetval(cliOption, kszArg); break; /* Labelregex  */
           case RC_REF_VAL:
  -            m_pszOptuples[cliOption] = strdup(szArg); break; /* Refregex     */
  +            clioptSetval(cliOption, kszArg); break; /* Refregex    */
           case RC_PRM_VAL:
  -            m_pszOptuples[cliOption] = strdup(szArg); break; /* Paramregex   */
  +            clioptSetval(cliOption, kszArg); break; /* Paramregex  */
           case RC_TRM_VAL:
  -            m_pszOptuples[cliOption] = strdup(szArg); break; /* Termregex    */
  +            clioptSetval(cliOption, kszArg); break; /* Termregex   */
   
           case RC_NCF_VAL:
  -            m_pszOptuples[cliOption] = strdup(szArg); break; /* Configname   */
  +            clioptSetval(cliOption, kszArg); break; /* Configname  */
           case RC_CMN_VAL:
  -            m_pszOptuples[cliOption] = strdup(szArg); break; /* Commonname   */
  +            clioptSetval(cliOption, kszArg); break; /* Commonname  */
           case RC_DFL_VAL:
  -            m_pszOptuples[cliOption] = strdup(szArg); break; /* Defaultname  */
  +            clioptSetval(cliOption, kszArg); break; /* Defaultname */
           case RC_ERR_VAL:
  -            m_pszOptuples[cliOption] = strdup(szArg); break; /* Errorname    */
  +            clioptSetval(cliOption, kszArg); break; /* Errorname   */
           default : break;
       }
   
  @@ -173,112 +279,91 @@
   }
   
   /***************************************
  -* clioptParse(int, char **)            *
  +* clioptParseopt(int, char **)         *
   * Parse command line options           *
   ***************************************/
  -rc_return_t clioptParse(int argc, char *argv[])
  +rc_return_t clioptParseopt(int argc, char *argv[])
   {
  -    static struct popt_option optionsTable[] = {
  -        /* Long options with short keys but no arguments */
  -        {RC_USE_NAME, '?', POPT_ARG_NONE, 0, RC_USE_VAL, RC_USE_DESC, NULL},
  -        {RC_DBG_NAME, 'd', POPT_ARG_NONE, 0, RC_DBG_VAL, RC_DBG_DESC, NULL},
  -        {RC_VER_NAME, 'V', POPT_ARG_NONE, 0, RC_VER_VAL, RC_VER_DESC, NULL},
  -        {RC_EVL_NAME, 'e', POPT_ARG_NONE, 0, RC_EVL_VAL, RC_EVL_DESC, NULL},
  -        {RC_HLP_NAME, 'h', POPT_ARG_NONE, 0, RC_HLP_VAL, RC_HLP_DESC, NULL},
  -        {RC_INF_NAME, 'i', POPT_ARG_NONE, 0, RC_INF_VAL, RC_INF_DESC, NULL},
  -        {RC_LBL_NAME, 'l', POPT_ARG_NONE, 0, RC_LBL_VAL, RC_LBL_DESC, NULL},
  -        {RC_PRN_NAME, 'p', POPT_ARG_NONE, 0, RC_PRN_VAL, RC_PRN_DESC, NULL},
  -        {RC_SIL_NAME, 's', POPT_ARG_NONE, 0, RC_SIL_VAL, RC_SIL_DESC, NULL},
  -        {RC_RAW_NAME, 'r', POPT_ARG_NONE, 0, RC_RAW_VAL, RC_RAW_DESC, NULL},
  -        {RC_VRB_NAME, 'v', POPT_ARG_NONE, 0, RC_VRB_VAL, RC_VRB_DESC, NULL},
  -        {RC_EXC_NAME, 'x', POPT_ARG_NONE, 0, RC_EXC_VAL, RC_EXC_DESC, NULL},
  -                                              
  -        /* Single argument long options with short keys */
  -        {RC_LOC_NAME, 'L', POPT_ARG_STRING, 0, RC_LOC_VAL, RC_LOC_DESC, "regx"},
  -        {RC_CNF_NAME, 'c', POPT_ARG_STRING, 0, RC_CNF_VAL, RC_CNF_DESC, "path"},
  -        {RC_FNC_NAME, 'f', POPT_ARG_STRING, 0, RC_FNC_VAL, RC_FNC_DESC, "path"},
  -        {RC_QRY_NAME, 'q', POPT_ARG_STRING, 0, RC_QRY_VAL, RC_QRY_DESC, "varx"},
  -        {RC_TMP_NAME, 't', POPT_ARG_STRING, 0, RC_TMP_VAL, RC_TMP_DESC, "path"},
  -
  -        /* Single argument long options without short keys */
  -        {RC_OWN_NAME, 0, POPT_ARG_STRING, 0, RC_OWN_VAL, RC_OWN_DESC, "user"},
  -        {RC_GRP_NAME, 0, POPT_ARG_STRING, 0, RC_GRP_VAL, RC_GRP_DESC, "group"},
  -        {RC_MSK_NAME, 0, POPT_ARG_INT,    0, RC_MSK_VAL, RC_MSK_DESC, "umask"},
  -        {RC_ASS_NAME, 0, POPT_ARG_STRING, 0, RC_ASS_VAL, RC_ASS_DESC, "regx"},
  -        {RC_DEF_NAME, 0, POPT_ARG_STRING, 0, RC_DEF_VAL, RC_DEF_DESC, "regx"},
  -        {RC_REF_NAME, 0, POPT_ARG_STRING, 0, RC_REF_VAL, RC_REF_DESC, "regx"},
  -        {RC_PRM_NAME, 0, POPT_ARG_STRING, 0, RC_PRM_VAL, RC_PRM_DESC, "regx"},
  -        {RC_TRM_NAME, 0, POPT_ARG_STRING, 0, RC_TRM_VAL, RC_TRM_DESC, "regx"},
  -        {RC_NCF_NAME, 0, POPT_ARG_STRING, 0, RC_NCF_VAL, RC_NCF_DESC, "name"},
  -        {RC_CMN_NAME, 0, POPT_ARG_STRING, 0, RC_CMN_VAL, RC_CMN_DESC, "name"},
  -        {RC_DFL_NAME, 0, POPT_ARG_STRING, 0, RC_DFL_VAL, RC_DFL_DESC, "name"},
  -        {RC_ERR_NAME, 0, POPT_ARG_STRING, 0, RC_ERR_VAL, RC_ERR_DESC, "name"},
  -
  -        /* Special stuff    */
  -        POPT_AUTOHELP
  -        {NULL, 0, 0, NULL, 0}
  -    };
  -
       ex_t Except;
  -    char cliOpt = 0;            /* For argument parsing           */
  -    char *szCLIBuf = NULL;
  -    popt_context optCon;        /* Context for parsing options    */
  -
  -    optCon = popt_getcontext(NULL, argc, (const char **)argv, optionsTable, 0);
  -    popt_setotheroptionhelp(optCon, "[options] <rcfile> <sections [args]>");
  -
  -    if (argc < 3) {
  -        fprintf(stderr, "Please enter at least one rcfile and section.\n");
  -        popt_printusage(optCon, stderr, 0);
  +    char cliOpt = 0;    /* For argument parsing */
  +
  +    m_Optcon = popt_getcontext(NULL, argc, (const char **)argv, m_pOptable, 0);
  +    popt_setotheroptionhelp(m_Optcon, "<rcfile> <sections [args]>");
  +
  +    if (argc < 2) { /* Allow the user to enter just one option, -h z.B. */
  +        fprintf(stderr, RC_LST_TEXT);
  +        popt_printusage(m_Optcon, stderr, 0);
           return(RC_THROW(RC_ERR_USE));
       }
   
       /* Now do options processing */
  -    while ((cliOpt = popt_getnextopt(optCon)) >= 0) { /* Loop, each time     */
  -        ex_try {                                      /* eating a new option */
  -            clioptProcess(cliOpt, popt_getoptarg(optCon));
  +    while ((cliOpt = popt_getnextopt(m_Optcon)) >= 0) {/* Loop, each time     */
  +        ex_try {                                       /* eating a new option */
  +            clioptProcess(cliOpt, popt_getoptarg(m_Optcon));
           }
  -        ex_catch(Except) {
  -            if ((rc_return_t)Except.ex_value == RC_ERR_USE) {
  -                popt_printusage(optCon, stderr, 0);
  -                rethrow;
  -            }
  -            else {  /* Some error condition probably deserves attention */
  -                fprintf(stderr, "Class '%s' threw exception %d in %s:%s():\
  -                    %d.\n", (char *)Except.ex_class, *(int *)Except.ex_value,\
  -                    Except.ex_file, Except.ex_func, Except.ex_line);
  -                rethrow;
  -            }
  +        ex_catch(Except) { /* Error condition probably deserves attention */
  +/* FIXME Examine the following line *(int *) for a potential segfault prob */
  +            fprintf(stderr, "Class '%s' threw exception %d in %s:%s():\
  +                %d.\n", (char *)Except.ex_class, *(int *)Except.ex_value,\
  +                Except.ex_file, Except.ex_func, Except.ex_line);
  +            rethrow;
           }
       }
   
  -    /* At this point we should be finished parsing options, so now we use  */
  -    /* popt as a transport to read the user specified rcfile and sections. */
  -    szCLIBuf = (char *)popt_getarg(optCon);
  -    if ((szCLIBuf == NULL)) {
  -        fprintf(stderr, "Please enter at least one rcfile and section.\n");
  -        popt_printusage(optCon, stderr, 0);
  -        return(RC_THROW(RC_ERR_USE));
  -    }
  -
       if (cliOpt < -1) {
           /* An error occurred during option processing */
           fprintf(stderr, "%s: %s\n",
  -                popt_badoption(optCon, POPT_BADOPTION_NOALIAS),
  +                popt_badoption(m_Optcon, POPT_BADOPTION_NOALIAS),
                   popt_strerror(cliOpt));
           return(RC_THROW(RC_ERR_INT));
       }
   
  -    fprintf(stderr, "Run these commands: %s\n", szCLIBuf);
  -    popt_freecontext(optCon);
       return(RC_THROW(RC_OK));
   }
   
   /***************************************
  -* clioptDestruct(void)                 *
  +* clioptParserc(void)                  *
  +* Parse command line rc file           *
  +***************************************/
  +rc_return_t clioptParserc(void)
  +{
  +    ex_t Except;
  +
  +    /* Use popt as a transport to read the user specified rcfile           */
  +    ex_try { /* Retrieve exactly one rc file name from the command line    */
  +        clioptSetrcfile(popt_getarg(m_Optcon));     /* No file check here  */
  +    }
  +    ex_catch(Except) {
  +        rethrow; /* Our generic response */
  +    }
  +
  +    return(RC_THROW(RC_OK));
  +}
  +
  +/***************************************
  +* clioptParsesec(void)                 *
  +* Parse command line sections          *
  +***************************************/
  +rc_return_t clioptParsesec(void)
  +{
  +    ex_t Except;
  +
  +    /* Use popt as a transport to read the user specified sections  */
  +    ex_try { /* Retrieve one or more sections from the command line */
  +        clioptSetsec(popt_getargs(m_Optcon));
  +    }
  +    ex_catch(Except) {
  +        rethrow; /* Our generic response */
  +    }
  +
  +    return(RC_THROW(RC_OK));
  +}
  +
  +/***************************************
  +* clioptDelete(void)                   *
   * Destruct a command line option       *
   ***************************************/
  -rc_return_t clioptDestruct(void)
  +rc_return_t clioptDelete(void)
   {
       int i = 0;
   /*    ex_t Except;
  @@ -286,7 +371,7 @@
       assert(s_pBintab);*/                /* Error if not constructed */
   /*    ex_try {
           clioptRemall();*/             /* Removes ALL list nodes   */
  -/*FIXME        optDestruct((rc_opt_t **)&s_pBintab->pOptlist->pvData);FIXME*/
  +/*FIXME        optDelete((rc_opt_t **)&s_pBintab->pOptlist->pvData);FIXME*/
   /*        free(s_pBintab->pOptlist);*/    /* Deallocate option list   */
   /*        free(s_pBintab);*/              /* Deallocate cliopt and    */
   /*        s_pBintab = NULL;*/             /* clear its reference      */
  @@ -295,6 +380,7 @@
           rethrow;
       }*/
   
  +    popt_freecontext(m_Optcon);         /* Free the popt context      */
       for (i = 0; i < RC_NUMOPTS; i++) {  /* Free the tuples themselves */
           if (m_pszOptuples[i]) {
               free(m_pszOptuples[i]);
  @@ -304,14 +390,18 @@
   
       if (m_szRcfile)                     /* Free the rc file arg       */
           free(m_szRcfile);
  -    if (m_szSec)                        /* Free the section name arg  */
  -        free(m_szSec);
  +    if (m_pszSec) {                     /* Free the section name arg  */
  +        for (i = 0; m_pszSec[i]; i++) {
  +            free(m_pszSec[i]);
  +            m_pszSec[i] = NULL;
  +        }
  +        free(m_pszSec);
  +    }
   
   /* FIXME BEGIN DEBUG */
   for (i = 0; i < RC_NUMOPTS; i++)
       if (m_pszOptuples[i])
           TRACE("Problem! Destructor failed!\n");
  -TRACE("cliopt destructed.\n");
   /* FIXME END DEBUG */
   
       return(RC_THROW(RC_OK));
  Index: ossp-pkg/rc/rc_config.c
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 rc_config.c
  --- ossp-pkg/rc/rc_config.c	23 Apr 2002 12:30:29 -0000	1.13
  +++ ossp-pkg/rc/rc_config.c	24 Apr 2002 16:47:07 -0000	1.14
  @@ -27,12 +27,11 @@
   **  rc_config.c: Run-command processor ISO C source file
   */
   
  -#include <stdio.h>
   #include <stdlib.h>
   #include <string.h>
   
   #include "rc.h"
  -#include "str.h"
  +#include "rc_config.h"
   #include "rc_const.h"               /* String constants                     */
   
   static int m_nLocks = 0;            /* Server locks, not thread-safe FIXME  */
  @@ -40,16 +39,46 @@
   
   
   /***************************************
  -* configConstruct(void)                *
  +* configDebug(void)                    *
  +* Debug a configuration                *
  +* Warning: There is no error checking  *
  +*          or debugging of this        *
  +*          debugger block              *
  +***************************************/
  +void configDebug(void)
  +{
  +    int i = 0;
  +    ex_t Except;
  +    char *szTemp = NULL;
  +
  +    fprintf(stderr, "Run command file: %s\n", configGetrcfile());
  +
  +    szTemp = (char *)configGetsec(i);
  +    fprintf(stderr, "Sections:");
  +    while (szTemp) {
  +        fprintf(stderr, " %s", szTemp);
  +        ex_try {
  +            szTemp = (char *)configGetsec(++i);
  +        }
  +        ex_catch(Except) {
  +            break;
  +        }
  +    }
  +
  +    fprintf(stderr, "\n%s", configSummarize());
  +}
  +
  +/***************************************
  +* configNew(void)                      *
   * Construct a configuration            *
   ***************************************/
  -rc_return_t configConstruct(void)
  +rc_return_t configNew(void)
   {
       ex_t Except;
   
       if (m_nLocks == 0) {                    /* If we don't have one yet */
           ex_try {                            /* then construct a new one */
  -            clioptConstruct();              /* Member cliopt instance   */
  +            clioptNew();                    /* Member cliopt instance   */
           }
           ex_catch(Except) {
               rethrow;
  @@ -112,6 +141,52 @@
       return(NULL);   /* Not reached  */
   }
   
  +const char *configGetrcfile(void)
  +{
  +    ex_t Except;
  +
  +    if (m_nLocks) {                     /* Make sure config exists   */
  +        ex_try {
  +            /* Because (1) only one rc file can be specified and     */
  +            /*         (2) it must be specified on the command line, */
  +            /* we don't bother checking the environment or conf file */
  +            /* contrary to the behaviour of Getval earlier           */
  +            return (clioptGetrcfile());
  +        }
  +        ex_catch(Except) {
  +            rethrow;
  +        }
  +    }
  +    else {
  +        RC_THROW(RC_ERR_USE);
  +    }
  +    return(NULL);   /* Not reached  */
  +}
  +
  +const char *configGetsec(int nIndex)
  +{
  +    ex_t Except;
  +    char **pszSectemp = NULL;
  +
  +    if (m_nLocks && nIndex < clioptGetseclen()) {/* Make sure config exists   */
  +        ex_try {                                 /* FIXME Might need to check */
  +            pszSectemp = (char **)clioptGetsec();/* FIXME env, conf, configs  */
  +            if (pszSectemp[nIndex])
  +                return(pszSectemp[nIndex]);
  +            else {
  +                RC_THROW(RC_ERR_USE);
  +            }
  +        }
  +        ex_catch(Except) {
  +            rethrow;
  +        }
  +    }
  +    else {
  +        RC_THROW(RC_ERR_USE);
  +    }
  +    return(NULL);   /* Not reached  */
  +}
  +
   /***************************************
   * configSummarize(void)                *
   * Configuration summary                *
  @@ -120,24 +195,39 @@
   {
       ex_t Except;
       int i = 0;
  -    int bCaught = FALSE;
  +    char *szTemp = NULL;
   
  -    while (!bCaught) {
  +    m_szSummary = malloc(NULL);
  +    for (i = 0; i < RC_NUMOPTS; i++)
  +    {
           ex_try {    /* FIXME Not threadsafe, wrap with crit section */
  -            if (configGetval(i)) { /* FIXME Is realloc portable here? */
  -                /* FIXME Unportable kludge to ensure storage FIXME */
  -                m_szSummary = realloc(m_szSummary, sizeof("OptionXXis") + \
  -                    sizeof(configGetname(i)) + sizeof(configGetval(i) + 8));
  -                if (!(strcmp(configGetval(i), "1")))
  -                    str_concat(m_szSummary, "Option ", configGetname(i), " is on.\n");
  -                else
  -                    str_concat(m_szSummary, "Option ", configGetname(i), " is ", configGetval(i), ".\n");
  +            if (configGetval(i) == NULL); /* NOP */
  +            else if (!(strcmp(configGetval(i), "1"))) {
  +                szTemp = malloc(strlen(m_szSummary) + strlen(configGetval(i)));
  +                strcpy(szTemp, m_szSummary);
  +                strcat(szTemp, "Option ");
  +                strcat(szTemp, configGetname(i));
  +                strcat(szTemp, " is on.\n");
  +                if (m_szSummary)
  +                    free(m_szSummary);
  +                m_szSummary = szTemp;
  +            }
  +            else {
  +                szTemp = malloc(strlen(m_szSummary) + strlen(configGetval(i)));
  +                strcpy(szTemp, m_szSummary);
  +                strcat(szTemp, "Option ");
  +                strcat(szTemp, configGetname(i));
  +                strcat(szTemp, " is ");
  +                strcat(szTemp, configGetval(i));
  +                strcat(szTemp, ".\n");
  +                if (m_szSummary)
  +                    free(m_szSummary);
  +                m_szSummary = szTemp;
               }
  -        }           /* FIXME Not threadsafe, wrap with crit section */
  -        ex_catch(Except) {  /* Breaks the otherwise endless loop above */
  -            bCaught = TRUE;
  +        }               /* FIXME Not threadsafe, wrap with crit section */
  +        ex_catch(Except) {  /* Breaks the otherwise endless loop above  */
  +            rethrow;
           }
  -        i++;
       }
   
       return ((const char *)m_szSummary);
  @@ -151,16 +241,12 @@
   {
       ex_t Except;
   
  -    ex_try {    /* Parse option groups in order of priority     */
  -        clioptParse(argc, argv);        /* Command line options */
  -/*        envoptParse(m_nLocks->pOpt);*/    /* Environment options  */
  -/*        cnfoptParse(m_nLocks->pOpt);*/    /* Configfile options   */
  -    }
  -    ex_catch(Except) {
  -        rethrow;
  -    }
  -
  -    ex_try {
  +    ex_try {    /* Parse option groups in order of priority      */
  +        clioptParseopt(argc, argv);     /* Command line options  */
  +        clioptParserc();                /* Command line rc file  */
  +        clioptParsesec();               /* Command line sections */
  +/*        envoptParse(m_nLocks->pOpt);*/    /* Environment options   */
  +/*        cnfoptParse(m_nLocks->pOpt);*/    /* Configfile options    */
       }
       ex_catch(Except) {
           rethrow;
  @@ -170,16 +256,16 @@
   }
   
   /***************************************
  -* configDestruct(void)                 *
  +* configDelete(void)                   *
   * Destruct a configuration             *
   ***************************************/
  -rc_return_t configDestruct(void)
  +rc_return_t configDelete(void)
   {
       ex_t Except;
   
       if (--m_nLocks == 0) {          /* If m_nLocks is 0, deallocate */
           ex_try {                    /* FIXME, not thread-safe       */
  -            clioptDestruct();
  +            clioptDelete();
               if (m_szSummary)
                   free(m_szSummary);
           }
  Index: ossp-pkg/rc/rc_const.h
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 rc_const.h
  --- ossp-pkg/rc/rc_const.h	11 Apr 2002 16:52:45 -0000	1.4
  +++ ossp-pkg/rc/rc_const.h	24 Apr 2002 16:47:07 -0000	1.5
  @@ -30,7 +30,12 @@
   #ifndef __OSSPRC_CONST_H__
   #define __OSSPRC_CONST_H__
   
  -/* Option descriptions used with popt */
  +/* Generic text, should include newline termination */
  +#define RC_NON_TEXT "No options exist.\n"
  +#define RC_LST_TEXT "Please enter just one rcfile and at least one section.\n"
  +#define RC_SUM_TEXT "Option argument summary.\n"
  +
  +/* Option descriptions used with popt, should not include termination */
   #define RC_USE_DESC "Print a short usage summary, then exit."
   #define RC_DBG_DESC "Don't remove temporary files, and write debug messages to stderr."
   #define RC_VER_DESC "Print the version and copyright, then exit."
  Index: ossp-pkg/rc/rc_opt.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 rc_opt.c
  --- ossp-pkg/rc/rc_opt.c	11 Apr 2002 16:52:45 -0000	1.3
  +++ ossp-pkg/rc/rc_opt.c	24 Apr 2002 16:47:07 -0000	1.4
  @@ -78,21 +78,21 @@
   * optSetXXXX(rc_opt_t *, const char *) *
   * Option accessors                     *
   ***************************************/
  -rc_return_t optSetname(rc_opt_t *pOption, const char *cszName)
  +rc_return_t optSetname(rc_opt_t *pOption, const char *kszName)
   {
       if (pOption->szName)                        /* Guard against leaks  */
           free(pOption->szName);                  /* if resetting name    */
  -    if (!(pOption->szName = strdup(cszName)))   /* Set name of option   */
  +    if (!(pOption->szName = strdup(kszName)))   /* Set name of option   */
           return(RC_THROW(RC_ERR_MEM));
       else
           return(RC_THROW(RC_OK));
   }
   
  -rc_return_t optSetval(rc_opt_t *pOption, const char *cszVal)
  +rc_return_t optSetval(rc_opt_t *pOption, const char *kszVal)
   {
       if (pOption->szVal)                         /* Guard against leaks  */
           free(pOption->szVal);                   /* if resetting value   */
  -    if (!(pOption->szVal = strdup(cszVal)))     /* Set value of option  */
  +    if (!(pOption->szVal = strdup(kszVal)))     /* Set value of option  */
           return(RC_THROW(RC_ERR_MEM));
       else
           return(RC_THROW(RC_OK));

From ossp-cvs-owner@ossp.org  Wed Apr 24 18:49:08 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9763C7635E; Wed, 24 Apr 2002 18:49:08 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc Makefile.in configure.in
Message-Id: <20020424164908.9763C7635E@mail.ossp.org>
Date: Wed, 24 Apr 2002 18:49:08 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   24-Apr-2002 18:49:08
  Branch: HEAD                             Handle: 2002042417490800

  Modified files:
    ossp-pkg/rc             Makefile.in configure.in

  Log:
    Remove OSSP str from build configuration, because it is not used.

  Summary:
    Revision    Changes     Path
    1.25        +1  -1      ossp-pkg/rc/Makefile.in
    1.18        +11 -11     ossp-pkg/rc/configure.in
  ____________________________________________________________________________

  Index: ossp-pkg/rc/Makefile.in
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 Makefile.in
  --- ossp-pkg/rc/Makefile.in	24 Apr 2002 16:47:07 -0000	1.24
  +++ ossp-pkg/rc/Makefile.in	24 Apr 2002 16:49:08 -0000	1.25
  @@ -65,7 +65,7 @@
   OBJS            = rc.o rc_config.o rc_cliopt.o \
                     rc_version.o rc_pcre.o rc_util.o
   
  -SUBDIRS         = @SUBDIR_EX@ @SUBDIR_STR@ @SUBDIR_POPT@
  +SUBDIRS         = @SUBDIR_EX@ @SUBDIR_POPT@
   #SUBDIRS         = @SUBDIR_EX@ @SUBDIR_VAR@ @SUBDIR_VAL@ @SUBDIR_STR@ @SUBDIR_POPT@
   
   .SUFFIXES:
  Index: ossp-pkg/rc/configure.in
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 configure.in
  --- ossp-pkg/rc/configure.in	23 Apr 2002 12:30:29 -0000	1.17
  +++ ossp-pkg/rc/configure.in	24 Apr 2002 16:49:08 -0000	1.18
  @@ -90,16 +90,16 @@
                    LIBS_EXTRA="$LIBS_EXTRA -lex"])
   AC_SUBST(SUBDIR_EX)
   
  -dnl Check for OSSP str library
  -AC_CHECK_EXTLIB([OSSP str],
  -                str, str_parse, str.h,
  -                [SUBDIR_STR=""],
  -                [SUBDIR_STR="rc_str"
  -                 CPPFLAGS="$CPPFLAGS -Irc_str"
  -                 CFLAGS="$CFLAGS -Irc_str"
  -                 LDFLAGS="$LDFLAGS -Lrc_str/.libs"
  -                 LIBS_EXTRA="$LIBS_EXTRA -lstr"])
  -AC_SUBST(SUBDIR_STR)
  +#dnl Check for OSSP str library
  +#AC_CHECK_EXTLIB([OSSP str],
  +#                str, str_parse, str.h,
  +#                [SUBDIR_STR=""],
  +#                [SUBDIR_STR="rc_str"
  +#                 CPPFLAGS="$CPPFLAGS -Irc_str"
  +#                 CFLAGS="$CFLAGS -Irc_str"
  +#                 LDFLAGS="$LDFLAGS -Lrc_str/.libs"
  +#                 LIBS_EXTRA="$LIBS_EXTRA -lstr"])
  +#AC_SUBST(SUBDIR_STR)
   
   #dnl Check for OSSP var library
   #AC_CHECK_EXTLIB([OSSP var],
  @@ -131,7 +131,7 @@
   enable_headline=no
   export enable_headline
   dnl Call other configure scripts
  -AC_CONFIG_SUBDIRS([$SUBDIR_EX $SUBDIR_STR $SUBDIR_POPT])
  +AC_CONFIG_SUBDIRS([$SUBDIR_EX $SUBDIR_POPT])
   #AC_CONFIG_SUBDIRS([$SUBDIR_EX $SUBDIR_STR $SUBDIR_VAR $SUBDIR_VAL $SUBDIR_POPT])
   
   dnl Make all the necessary Makefiles

From ossp-cvs-owner@ossp.org  Thu Apr 25 11:14:29 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5DE457635E; Thu, 25 Apr 2002 11:14:29 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_msg.c
Message-Id: <20020425091429.5DE457635E@mail.ossp.org>
Date: Thu, 25 Apr 2002 11:14:29 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   25-Apr-2002 11:14:29
  Branch: HEAD                             Handle: 2002042510142800

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_msg.c

  Log:
    added %createmessageid header rewrite function. This a dirty hack.

  Summary:
    Revision    Changes     Path
    1.10        +34 -8      ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 lmtp2nntp_msg.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	24 Apr 2002 09:26:03 -0000	1.9
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	25 Apr 2002 09:14:28 -0000	1.10
  @@ -31,6 +31,8 @@
   #include "lmtp2nntp_argz.h"
   #include "fixme.h" //FIMXE logbook only
   #include "tai.h"
  +#include <sys/utsname.h> //FIXME createmessageid() hack
  +
   
   #include "str.h"
   
  @@ -694,6 +696,35 @@
   }
   #undef MAXOUT //FIXME is there a better way to do it?
   
  +static var_rc_t createmessageid(
  +    const char  *cpArg,  size_t nArg,
  +    const char  *cpVal,  size_t nVal,
  +          char **cppOut, size_t *pnOut, size_t *pnOutsize)
  +{
  +    char *cp;
  +    static int mcounter = 0; //FIXME no statics in this program!
  +
  +    struct utsname name; //FIXME this must be taken from global - requires context
  +    if (uname(&name) == -1) {
  +        memcpy(name.nodename, "localhost.invalid", strlen("localhost.invalid") + 1);
  +    }
  +
  +    /* idea and first implementation as a contribution to lmtp2nntp v1.0.0
  +       by Christos Ricudis <ricudis@paiko.gr> */
  +
  +    cp = (char *)malloc( 100); //FIXME how much exacly?
  +    str_format(cp, 100, "<%0.11d$%0.6d$%0.2d$%.20s$@%.40s>",
  +            time(NULL), getpid(), mcounter++, "noFid" /*FIXME ((msg->cpFid == NULL)?"noFid":(msg->cpFid))*/, name.nodename);
  +    /*if (msg->cpMsgid != NULL)
  +        free(msg->cpMsgid);
  +    msg->cpMsgid = cp; //FIXME what about aligning lib_val here?
  +    */
  +    *cppOut    = strdupex(cp);
  +    *pnOutsize = strlen(cp) + 1;
  +    *pnOut     = strlen(cp);
  +    return VAR_OK;
  +}
  +
   static var_rc_t operate_cb(
       var_t *var, void *ctx,
       const char  *op_ptr, size_t op_len,
  @@ -709,20 +740,15 @@
           *out_size = 0;
           return VAR_OK;
       }
  -    if (op_len == 6 && strncmp(op_ptr, "return", 6) == 0) {
  +    if (op_len == 6 && strncmp(op_ptr, "return", 6) == 0) { //FIXME needless block
           *out_ptr = malloc(arg_len);
           *out_len = arg_len;
           *out_size = arg_len;
           memcpy(*out_ptr, arg_ptr, arg_len);
           return VAR_OK;
       }
  -    else if (op_len == 5 && strncmp(op_ptr, "upper", 5) == 0) {
  -        *out_ptr = malloc(val_len);
  -        *out_len = val_len;
  -        *out_size = val_len;
  -        for (i = 0; i < val_len; i++)
  -            (*out_ptr)[i] = (char)toupper((int)(val_ptr[i]));
  -        return VAR_OK;
  +    else if (op_len == 15 && strncmp(op_ptr, "createmessageid", 15) == 0) {
  +        return createmessageid(arg_ptr, arg_len, val_ptr, val_len, out_ptr, out_len, out_size);
       }
       else if (op_len == 12 && strncmp(op_ptr, "canonifydate", 12) == 0) {
           return canonifydate(arg_ptr, arg_len, val_ptr, val_len, out_ptr, out_len, out_size);

From ossp-cvs-owner@ossp.org  Thu Apr 25 11:17:46 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B37297635E; Thu, 25 Apr 2002 11:17:46 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp .cvsignore
Message-Id: <20020425091746.B37297635E@mail.ossp.org>
Date: Thu, 25 Apr 2002 11:17:46 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   25-Apr-2002 11:17:46
  Branch: HEAD                             Handle: 2002042510174600

  Modified files:
    ossp-pkg/lmtp2nntp      .cvsignore

  Log:
    ignore another autocreated file

  Summary:
    Revision    Changes     Path
    1.15        +1  -0      ossp-pkg/lmtp2nntp/.cvsignore
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/.cvsignore
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 .cvsignore
  --- ossp-pkg/lmtp2nntp/.cvsignore	24 Apr 2002 09:41:08 -0000	1.14
  +++ ossp-pkg/lmtp2nntp/.cvsignore	25 Apr 2002 09:17:46 -0000	1.15
  @@ -13,3 +13,4 @@
   logfile
   ChangeLog
   [1-9].*
  +autom4te.cache

From ossp-cvs-owner@ossp.org  Thu Apr 25 11:35:47 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CA37F763A1; Thu, 25 Apr 2002 11:35:46 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Message-Id: <20020425093546.CA37F763A1@mail.ossp.org>
Date: Thu, 25 Apr 2002 11:35:46 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: CVSROOT                          Date:   25-Apr-2002 11:35:46
  Branch: HEAD                             Handle: 2002042510354600

  Modified files:
    CVSROOT                 modules

  Log:
    Commented some libraries not in use by rc.

  Summary:
    Revision    Changes     Path
    1.55        +5  -4      CVSROOT/modules
  ____________________________________________________________________________

  Index: CVSROOT/modules
  ============================================================
  $ cvs diff -u -r1.54 -r1.55 modules
  --- CVSROOT/modules	18 Apr 2002 13:40:33 -0000	1.54
  +++ CVSROOT/modules	25 Apr 2002 09:35:46 -0000	1.55
  @@ -95,10 +95,11 @@
   lmtp2nntp       ossp-pkg/lmtp2nntp
   
   #   OSSP rc
  -rc              ossp-pkg/rc &rc_str &rc_var &rc_val &rc_popt &rc_ex
  -rc_str          -d rc_str  ossp-pkg/str
  -rc_var          -d rc_var  ossp-pkg/var
  -rc_val          -d rc_val  ossp-pkg/val
  +rc              ossp-pkg/rc &rc_popt &rc_ex
  +#rc              ossp-pkg/rc &rc_popt &rc_ex &rc_str &rc_var &rc_val
   rc_popt         -d rc_popt ossp-pkg/popt
   rc_ex           -d rc_ex   ossp-pkg/ex
  +#rc_str          -d rc_str  ossp-pkg/str
  +#rc_var          -d rc_var  ossp-pkg/var
  +#rc_val          -d rc_val  ossp-pkg/val
   

From ossp-cvs-owner@ossp.org  Thu Apr 25 11:37:57 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 624997635E; Thu, 25 Apr 2002 11:37:57 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc devtool.conf
Message-Id: <20020425093757.624997635E@mail.ossp.org>
Date: Thu, 25 Apr 2002 11:37:57 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   25-Apr-2002 11:37:57
  Branch: HEAD                             Handle: 2002042510375700

  Modified files:
    ossp-pkg/rc             devtool.conf

  Log:
    Don't process str when building.

  Summary:
    Revision    Changes     Path
    1.13        +6  -6      ossp-pkg/rc/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/rc/devtool.conf
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 devtool.conf
  --- ossp-pkg/rc/devtool.conf	23 Apr 2002 12:30:29 -0000	1.12
  +++ ossp-pkg/rc/devtool.conf	25 Apr 2002 09:37:57 -0000	1.13
  @@ -12,9 +12,9 @@
       echo "===> rc_popt (devtool autogen)"
       (cd rc_popt && ./devtool autogen)
       echo "<=== rc_popt"
  -    echo "===> rc_str (devtool autogen)"
  -    (cd rc_str && ./devtool autogen)
  -    echo "<=== rc_str"
  +#    echo "===> rc_str (devtool autogen)"
  +#    (cd rc_str && ./devtool autogen)
  +#    echo "<=== rc_str"
   #    echo "===> rc_var (devtool autogen)"
   #    (cd rc_var && ./devtool autogen)
   #    echo "<=== rc_var"
  @@ -32,9 +32,9 @@
       echo "===> rc_popt (devtool autoclean)"
       (cd rc_popt && ./devtool autoclean)
       echo "<=== rc_popt"
  -    echo "===> rc_str (devtool autoclean)"
  -    (cd rc_str && ./devtool autoclean)
  -    echo "<=== rc_str"
  +#    echo "===> rc_str (devtool autoclean)"
  +#    (cd rc_str && ./devtool autoclean)
  +#    echo "<=== rc_str"
   #    echo "===> rc_var (devtool autoclean)"
   #    (cd rc_var && ./devtool autoclean)
   #    echo "<=== rc_var"

From ossp-cvs-owner@ossp.org  Thu Apr 25 11:51:30 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 18BBB7635E; Thu, 25 Apr 2002 11:51:30 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.c rc.h rc_config.c
Message-Id: <20020425095130.18BBB7635E@mail.ossp.org>
Date: Thu, 25 Apr 2002 11:51:30 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   25-Apr-2002 11:51:30
  Branch: HEAD                             Handle: 2002042510512900

  Modified files:
    ossp-pkg/rc             rc.c rc.h rc_config.c

  Log:
    Moved early option verify from main to config.

  Summary:
    Revision    Changes     Path
    1.23        +2  -2      ossp-pkg/rc/rc.c
    1.23        +1  -3      ossp-pkg/rc/rc.h
    1.15        +23 -0      ossp-pkg/rc/rc_config.c
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.c
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 rc.c
  --- ossp-pkg/rc/rc.c	24 Apr 2002 16:47:07 -0000	1.22
  +++ ossp-pkg/rc/rc.c	25 Apr 2002 09:51:29 -0000	1.23
  @@ -70,7 +70,7 @@
           configNew();            /* Construct a new configuration              */
           configLoad(argc, argv); /* Read configuration from cli, env, and conf */
           configDebug();          /* FIXME Remove FIXME */
  -        rcIntro();              /* Test for usage, help, and version options  */
  +        configVerify();         /* Test for usage, help, and version options  */
   
   /*        pRc = procNew();
           procReadrc(pRc);
  @@ -78,7 +78,7 @@
           procReadtmp(pRc);
           for (i = 0; i < clioptGetseclen; procSection(pRc, configGetsec(i)));
           procParse(pRc);         /- Script generation               -/
  -        procOut(pRc);           /- [Execute|Evaluate|Print] script -/
  +        procRun(pRc);           /- [Execute|Evaluate|Print] script -/
   
           procDelete(pRc);*/
           configDelete();
  Index: ossp-pkg/rc/rc.h
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 rc.h
  --- ossp-pkg/rc/rc.h	24 Apr 2002 16:47:07 -0000	1.22
  +++ ossp-pkg/rc/rc.h	25 Apr 2002 09:51:29 -0000	1.23
  @@ -61,9 +61,6 @@
   /* Rc script type */
   typedef char *rc_script_t;
   
  -/* Main function prototypes */
  -rc_return_t rcIntro(void);
  -
   /* Option function prototypes */
   /*rc_return_t optionProcess(void);
   rc_return_t optionProcess(void);*/
  @@ -71,6 +68,7 @@
   /* Config function prototypes */
   rc_return_t configNew(void);
   rc_return_t configLoad(int, char **);
  +rc_return_t configVerify(void);
   rc_return_t configDelete(void);
   const char *configSummarize(void);
   void configDebug(void);                 /* FIXME Remove */
  Index: ossp-pkg/rc/rc_config.c
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 rc_config.c
  --- ossp-pkg/rc/rc_config.c	24 Apr 2002 16:47:07 -0000	1.14
  +++ ossp-pkg/rc/rc_config.c	25 Apr 2002 09:51:29 -0000	1.15
  @@ -255,6 +255,29 @@
       return(RC_THROW(RC_OK));
   }
   
  +/************************************************
  +* configVerify(void)                            *
  +* Verify config options help, usage, or version *
  +************************************************/
  +rc_return_t configVerify(void)
  +{
  +    ex_t Except;
  +
  +    ex_try { /* Basic checks of version, usage, and help options */
  +        if (configGetval(RC_VER_VAL))
  +            fprintf(stdout, "OSSP rc %s\n", RC_VERSION);
  +        if (configGetval(RC_USE_VAL))
  +            clioptPrintusage();
  +        if (configGetval(RC_HLP_VAL))
  +            clioptPrintusage(); /* FIXME Replace with real help FIXME */
  +    }
  +    ex_catch(Except) {
  +        rethrow;
  +    }
  +
  +    return(RC_THROW(RC_OK));
  +}
  +
   /***************************************
   * configDelete(void)                   *
   * Destruct a configuration             *

From ossp-cvs-owner@ossp.org  Thu Apr 25 18:17:58 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6B30E7635E; Thu, 25 Apr 2002 18:17:58 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc Makefile.in rc.c rc.h rc_cliopt.c rc_proc.c
Message-Id: <20020425161758.6B30E7635E@mail.ossp.org>
Date: Thu, 25 Apr 2002 18:17:58 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   25-Apr-2002 18:17:58
  Branch: HEAD                             Handle: 2002042517175700

  Added files:
    ossp-pkg/rc             rc_proc.c
  Modified files:
    ossp-pkg/rc             Makefile.in rc.c rc.h rc_cliopt.c

  Log:
    Begin processor pieces.

  Summary:
    Revision    Changes     Path
    1.26        +2  -2      ossp-pkg/rc/Makefile.in
    1.24        +7  -30     ossp-pkg/rc/rc.c
    1.24        +13 -1      ossp-pkg/rc/rc.h
    1.8         +8  -7      ossp-pkg/rc/rc_cliopt.c
    1.1         +67 -0      ossp-pkg/rc/rc_proc.c
  ____________________________________________________________________________

  Index: ossp-pkg/rc/Makefile.in
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 Makefile.in
  --- ossp-pkg/rc/Makefile.in	24 Apr 2002 16:49:08 -0000	1.25
  +++ ossp-pkg/rc/Makefile.in	25 Apr 2002 16:17:57 -0000	1.26
  @@ -59,10 +59,10 @@
   TARGET_PROGS    = rc
   TARGET_MANS     = rc.1 rc-sample.5
   
  -SRCS            = rc.c rc_config.c rc_cliopt.c \
  +SRCS            = rc.c rc_config.c rc_cliopt.c rc_proc.c \
                     rc_version.c rc_pcre.c rc_util.c
   
  -OBJS            = rc.o rc_config.o rc_cliopt.o \
  +OBJS            = rc.o rc_config.o rc_cliopt.o rc_proc.o \
                     rc_version.o rc_pcre.o rc_util.o
   
   SUBDIRS         = @SUBDIR_EX@ @SUBDIR_POPT@
  Index: ossp-pkg/rc/rc.c
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 rc.c
  --- ossp-pkg/rc/rc.c	25 Apr 2002 09:51:29 -0000	1.23
  +++ ossp-pkg/rc/rc.c	25 Apr 2002 16:17:57 -0000	1.24
  @@ -35,29 +35,6 @@
   
   
   /************************************************
  -* rcIntro(void)                                 *
  -* Introduction to rc: help, usage, or version   *
  -************************************************/
  -rc_return_t rcIntro(void)
  -{
  -    ex_t Except;
  -
  -    ex_try { /* Basic checks of version, usage, and help options */
  -        if (configGetval(RC_VER_VAL))
  -            fprintf(stdout, "OSSP rc %s\n", RC_VERSION);
  -        if (configGetval(RC_USE_VAL))
  -            clioptPrintusage();
  -        if (configGetval(RC_HLP_VAL))
  -            clioptPrintusage(); /* FIXME Replace with real help FIXME */
  -    }
  -    ex_catch(Except) {
  -        rethrow;
  -    }
  -
  -    return(RC_THROW(RC_OK));
  -}
  -
  -/************************************************
   * main(int, char **)                            *
   * Main rc control block                         *
   ************************************************/
  @@ -72,15 +49,15 @@
           configDebug();          /* FIXME Remove FIXME */
           configVerify();         /* Test for usage, help, and version options  */
   
  -/*        pRc = procNew();
  -        procReadrc(pRc);
  -        procReadfuncs(pRc);
  -        procReadtmp(pRc);
  -        for (i = 0; i < clioptGetseclen; procSection(pRc, configGetsec(i)));
  +        pRc = procNew();
  +        procReadtmp(pRc, configGetval(RC_TMP_VAL));
  +/*        procReadfuncs(pRc, configGetval(RC_FNC_VAL));
  +        procReadrc(pRc, configGetrcfile());
  +        for (i = 0; i < clioptGetseclen; procSection(pRc, configGetsec(i++)));
           procParse(pRc);         /- Script generation               -/
  -        procRun(pRc);           /- [Execute|Evaluate|Print] script -/
  +        procRun(pRc);*/           /* [Execute|Evaluate|Print] script */
   
  -        procDelete(pRc);*/
  +        procDelete(pRc);
           configDelete();
       }
       ex_catch(Except) {
  Index: ossp-pkg/rc/rc.h
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 rc.h
  --- ossp-pkg/rc/rc.h	25 Apr 2002 09:51:29 -0000	1.23
  +++ ossp-pkg/rc/rc.h	25 Apr 2002 16:17:57 -0000	1.24
  @@ -56,7 +56,9 @@
   } rc_return_t;
   
   /* Rc class */
  -typedef void *rc_t;
  +typedef struct {
  +    int nTmpfile;   /* Temp file descriptor */
  +} rc_t;
   
   /* Rc script type */
   typedef char *rc_script_t;
  @@ -100,6 +102,16 @@
   rc_return_t clioptSetval(rc_opt_t, const char *);
   rc_return_t clioptSetrcfile(const char *);
   rc_return_t clioptSetsec(const char **);
  +
  +/* Processor function prototypes */
  +rc_t *procNew(void);
  +rc_return_t procDelete(rc_t *);
  +rc_return_t procReadfuncs(rc_t *, char *);
  +rc_return_t procReadtmp(rc_t *, char *);
  +rc_return_t procReadrc(rc_t *, char *);
  +rc_return_t procSection(rc_t *, char *);
  +rc_return_t procParse(rc_t *);
  +rc_return_t procRun(rc_t *);
   
       /* Option function prototypes */
       /*FIXME rc_return_t optNew(rc_opt_t **);
  Index: ossp-pkg/rc/rc_cliopt.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 rc_cliopt.c
  --- ossp-pkg/rc/rc_cliopt.c	24 Apr 2002 16:47:07 -0000	1.7
  +++ ossp-pkg/rc/rc_cliopt.c	25 Apr 2002 16:17:57 -0000	1.8
  @@ -180,19 +180,20 @@
   
   rc_return_t clioptSetsec(const char *pkszSec[])
   {
  -    int i = 0;
  +    int nSecs  = 0;
  +    int nIndex = 0;
   
       if (m_pszSec)                                    /* Forbid overwriting */
           return(RC_THROW(RC_ERR_USE));                /* an existing rcfile */
       else if (pkszSec) {
  -        for (i = 0; pkszSec[i]; i++);                /* Count the sections */
  -        m_pszSec = malloc(sizeof (char **) * i + 1); /* Allocate using i   */
  +        for (nSecs = 0; pkszSec[nSecs]; nSecs++);    /* Count the sections */
  +        m_pszSec = malloc(sizeof (char **) * nSecs + 1);
   
  -        for (i = 0; pkszSec[i]; i++) {
  -            m_pszSec[i] = malloc(strlen(pkszSec[i]));
  -            memcpy(m_pszSec[i], pkszSec[i], strlen(pkszSec[i]));
  +        for (nIndex = 0; pkszSec[nIndex]; nIndex++) {
  +            m_pszSec[nIndex] = malloc(strlen(pkszSec[nIndex]));
  +            memcpy(m_pszSec[nIndex], pkszSec[nIndex], strlen(pkszSec[nIndex]));
           }
  -        m_pszSec[i] = NULL; /* Used later for finding the end of array */
  +        m_pszSec[nIndex] = NULL; /* Used later to find the end of the array */
       }
       else
           return(RC_THROW(RC_ERR_USE));   /* Incoming sections are NULL? */
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================
  $ cvs update -p -r1.1 rc_proc.c
  /*  OSSP rc - Run-command processor
  **  Copyright (c) 2002 Ralf S. Engelschall
  **  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **
  **  This file is part of OSSP rc, a portable Run-command processor
  **  which can be found at http://www.ossp.org/pkg/lib/rc/
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  rc_proc.c: Run-command processor ISO C source file
  */
  
  #include <stdlib.h>
  
  #include "rc.h"         /* Public interfaces            */
  
  
  /************************************************
  * procNew(void)                                 *
  * Construct a processor                         *
  ************************************************/
  rc_t *procNew(void)
  {
      rc_t *pNewrc = NULL;
  
      pNewrc = malloc(sizeof(rc_t));
      return(pNewrc);
  }
  
  /************************************************
  * procReadtmp(rc_t *, char *)                   *
  * Open and store a temp file                    *
  ************************************************/
  rc_return_t procReadtmp(rc_t *pRc, char *szTmpname)
  {
      fprintf(stderr, "%s!!!\n", szTmpname);
  
      return(RC_THROW(RC_OK));
  }
  
  /************************************************
  * procDelete(rc_t *)                            *
  * Destruct a processor                          *
  ************************************************/
  rc_return_t procDelete(rc_t *pRc)
  {
      free(pRc);
  
      return(RC_THROW(RC_OK));
  }

From ossp-cvs-owner@ossp.org  Fri Apr 26 17:39:35 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 31A1E7635E; Fri, 26 Apr 2002 17:39:35 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/SHARE ossp_navbar.wml ossp-web/pkg/tool index.wml
Message-Id: <20020426153935.31A1E7635E@mail.ossp.org>
Date: Fri, 26 Apr 2002 17:39:35 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   26-Apr-2002 17:39:35
  Branch: HEAD                             Handle: 2002042616393400

  Modified files:
    ossp-web/SHARE          ossp_navbar.wml
    ossp-web/pkg/tool       index.wml

  Log:
    add OSSP mct

  Summary:
    Revision    Changes     Path
    1.5         +1  -0      ossp-web/SHARE/ossp_navbar.wml
    1.12        +3  -0      ossp-web/pkg/tool/index.wml
  ____________________________________________________________________________

  Index: ossp-web/SHARE/ossp_navbar.wml
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 ossp_navbar.wml
  --- ossp-web/SHARE/ossp_navbar.wml	16 Mar 2002 19:18:58 -0000	1.4
  +++ ossp-web/SHARE/ossp_navbar.wml	26 Apr 2002 15:39:34 -0000	1.5
  @@ -240,6 +240,7 @@
     <navbar:button txt="OSSP eo"          url=pkg/tool/eo/             id=pkg:tool:eo>
     <navbar:button txt="OSSP sugar"       url=pkg/tool/sugar/          id=pkg:tool:sugar>
     <navbar:button txt="OSSP iselect"     url=pkg/tool/iselect/        id=pkg:tool:iselect>
  +  <navbar:button txt="OSSP mct"         url=pkg/tool/mct/            id=pkg:tool:mct>
   </nb:stage3>
   <nb:stage3 pkg:lib>
     #   Packages, Libraries
  Index: ossp-web/pkg/tool/index.wml
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 index.wml
  --- ossp-web/pkg/tool/index.wml	14 Mar 2002 16:34:47 -0000	1.11
  +++ ossp-web/pkg/tool/index.wml	26 Apr 2002 15:39:34 -0000	1.12
  @@ -46,5 +46,8 @@
     <pkg_item name="iselect" longname="OSSP iselect" type="tool"
               desc="Interactive Terminal Selection"
   	        done=100 stable="1.2.0" unstable="none">
  +  <pkg_item name="mct" longname="OSSP mct" type="tool"
  +            desc="Multiple Choice Test Engine"
  +	        done=90 stable="none" unstable="none">
   </pkg_list>
   

From ossp-cvs-owner@ossp.org  Fri Apr 26 17:39:56 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D2085763B2; Fri, 26 Apr 2002 17:39:55 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/tool/mct .cvsignore index.wml
Message-Id: <20020426153955.D2085763B2@mail.ossp.org>
Date: Fri, 26 Apr 2002 17:39:55 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   26-Apr-2002 17:39:55
  Branch: HEAD                             Handle: 2002042616395500

  Added files:
    ossp-web/pkg/tool/mct   .cvsignore index.wml

  Log:
    add OSSP mct

  Summary:
    Revision    Changes     Path
    1.1         +1  -0      ossp-web/pkg/tool/mct/.cvsignore
    1.1         +30 -0      ossp-web/pkg/tool/mct/index.wml
  ____________________________________________________________________________

  Index: ossp-web/pkg/tool/mct/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/tool/mct/index.wml
  ============================================================
  $ cvs update -p -r1.1 index.wml
  
  #use wml::ossp area=pkg:tool subarea=mct
  
  <title>OSSP mct</title>
  
  <h1>Multiple Choice Test Engine</h1>
  
  <h2>Abstract</h2>
  
  OSSP mct is ...
  
  <h2>Authors</h2>
  
  <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  
  <h2>Status</h2>
  
  <pkg_status
      stable="none"    stable_date="none"
      unstable="none"  unstable_date="none"
  	done=20>
  
  <h2>Source</h2>
  
  <pkg_files 
      url=$(FTP_ROOT_URL)/pkg/tool/mct/
      directory=$(FTP_ROOT_DIR)/pkg/tool/mct/
      files="mct-*.tar.gz" 
  	stable="none" unstable="none">
  	

From ossp-cvs-owner@ossp.org  Fri Apr 26 17:40:17 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0C6D17635E; Fri, 26 Apr 2002 17:40:17 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/tool/mct index.wml
Message-Id: <20020426154017.0C6D17635E@mail.ossp.org>
Date: Fri, 26 Apr 2002 17:40:17 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   26-Apr-2002 17:40:16
  Branch: HEAD                             Handle: 2002042616401600

  Modified files:
    ossp-web/pkg/tool/mct   index.wml

  Log:
    fix percentage

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-web/pkg/tool/mct/index.wml
  ____________________________________________________________________________

  Index: ossp-web/pkg/tool/mct/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/tool/mct/index.wml	26 Apr 2002 15:39:55 -0000	1.1
  +++ ossp-web/pkg/tool/mct/index.wml	26 Apr 2002 15:40:16 -0000	1.2
  @@ -18,7 +18,7 @@
   <pkg_status
       stable="none"    stable_date="none"
       unstable="none"  unstable_date="none"
  -	done=20>
  +	done=90>
   
   <h2>Source</h2>
   

From ossp-cvs-owner@ossp.org  Sat Apr 27 13:18:58 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 43D8876360; Sat, 27 Apr 2002 13:18:58 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog THANKS pth.pod
Message-Id: <20020427111858.43D8876360@mail.ossp.org>
Date: Sat, 27 Apr 2002 13:18:58 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   27-Apr-2002 13:18:58
  Branch: HEAD                             Handle: 2002042712185700

  Modified files:
    ossp-pkg/pth            ChangeLog THANKS pth.pod

  Log:
    Fixed more ENglish errors.
    
    Submitted by: Felix Berger <bflat1@gmx.net>

  Summary:
    Revision    Changes     Path
    1.561       +3  -0      ossp-pkg/pth/ChangeLog
    1.84        +1  -0      ossp-pkg/pth/THANKS
    1.153       +27 -27     ossp-pkg/pth/pth.pod
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.560 -r1.561 ChangeLog
  --- ossp-pkg/pth/ChangeLog	30 Jan 2002 13:07:07 -0000	1.560
  +++ ossp-pkg/pth/ChangeLog	27 Apr 2002 11:18:57 -0000	1.561
  @@ -19,6 +19,9 @@
       | |_ ___) |
     __|_(_)____/____________________________________________________________
   
  +   *) Fixed lots of English errors in the manual page.
  +      [Felix Berger <bflat1@gmx.net>]
  +
      *) Add optional support for OSSP ex based exception handling. GNU
         Pth (still) does not throw exceptions by itself, but handles the
         per-thread exception context of OSSP ex to make exception handling
  Index: ossp-pkg/pth/THANKS
  ============================================================
  $ cvs diff -u -r1.83 -r1.84 THANKS
  --- ossp-pkg/pth/THANKS	27 Jan 2002 12:39:10 -0000	1.83
  +++ ossp-pkg/pth/THANKS	27 Apr 2002 11:18:57 -0000	1.84
  @@ -17,6 +17,7 @@
       o  Dmitry A. Antipov           <boss@wraith.rosnet.ru>
       o  Bill Apt                    <babt@us.ibm.com>
       o  James T. Beaupre            <beaupre@draper.com>
  +    o  Felix Berger                <bflat1@gmx.net>
       o  Paolo Bonzini               <bonzini@pc-amo3.elet.polimi.it>
       o  Raphael Bossek              <raphael.bossek@solutions4linux.de>
       o  Edwin Brown                 <Edwin.Brown@sdrc.com>
  Index: ossp-pkg/pth/pth.pod
  ============================================================
  $ cvs diff -u -r1.152 -r1.153 pth.pod
  --- ossp-pkg/pth/pth.pod	30 Jan 2002 12:54:24 -0000	1.152
  +++ ossp-pkg/pth/pth.pod	27 Apr 2002 11:18:57 -0000	1.153
  @@ -489,7 +489,7 @@
   reentered before it returned. This is a great portability benefit,
   because thread-safety can be achieved more easily than reentrance
   possibility. Especially this means that under B<Pth> more existing
  -third-party libraries can be used without side-effects than its the case
  +third-party libraries can be used without side-effects than it's the case
   for other threading systems.
   
   =item B<o>
  @@ -552,7 +552,7 @@
   a thread never directly switches to another thread. A thread always
   yields execution to the scheduler and the scheduler dispatches to the
   next thread. So a freshly spawned thread has to be kept somewhere until
  -the scheduler gets a chance to pick it up for scheduling. That is for
  +the scheduler gets a chance to pick it up for scheduling. That is 
   what the B<NEW> queue is for. 
   
   The purpose of the B<DEAD> queue is to support thread joining. When a
  @@ -573,8 +573,8 @@
   =head1 APPLICATION PROGRAMMING INTERFACE (API)
   
   In the following the B<Pth> I<Application Programming Interface> (API)
  -is discussed in detail. With the knowledge given above, it should be
  -now easy to understand how to program threads with this API. In good
  +is discussed in detail. With the knowledge given above, it should now
  +be easy to understand how to program threads with this API. In good
   Unix tradition, B<Pth> functions use special return values (C<NULL>
   in pointer context, C<FALSE> in boolean context and C<-1> in integer
   context) to indicate an error condition and set (or pass through) the
  @@ -609,7 +609,7 @@
   terminate, kills the threading system and then terminates the process) or a
   `C<pth_kill(); exit(0)>' (which immediately kills the threading system and
   terminates the process). The pth_kill() return immediately with a return
  -code of C<FALSE> if it is called not from within the main thread. Else
  +code of C<FALSE> if it is not called from within the main thread. Else it
   kills the threading system and returns C<TRUE>.
   
   =item long B<pth_ctrl>(unsigned long I<query>, ...);
  @@ -767,7 +767,7 @@
   
   =back
   
  -The following API functions exists to handle the attribute objects:
  +The following API functions can be used to handle the attribute objects:
   
   =over 4
   
  @@ -839,8 +839,8 @@
   
   =head2 Thread Control
   
  -The following functions control the threading itself and form the main API of
  -the B<Pth> library.
  +The following functions control the threading itself and make up the main API
  +of the B<Pth> library.
   
   =over 4
   
  @@ -928,7 +928,7 @@
   is, not in C<PTH_STATE_NEW> or C<PTH_STATE_READY>) an error is reported.
   
   The function usually returns C<TRUE> for success and only C<FALSE> (with
  -C<errno> set to C<EINVAL>) if I<tid> specified and invalid or still not
  +C<errno> set to C<EINVAL>) if I<tid> specified an invalid or still not
   new or ready thread.
   
   =item int B<pth_nap>(pth_time_t I<naptime>);
  @@ -1002,7 +1002,7 @@
   
   =head2 Utilities
   
  -The following functions are utility functions.
  +Utility functions.
   
   =over 4
   
  @@ -1302,7 +1302,7 @@
   
   =head2 Thread Cleanups
   
  -The following functions provide per-thread cleanup functions.
  +Per-thread cleanup functions.
   
   =over 4
   
  @@ -1588,7 +1588,7 @@
   
   This is a variant of the 4.3BSD usleep(3) function. It suspends the current
   threads execution until I<usec> microseconds (= I<usec>*1/1000000 sec)
  -elapsed.  The thread is guaranteed to not awakened before this time, but
  +elapsed.  The thread is guaranteed to not wake up before this time, but
   because of the non-preemptive scheduling nature of B<Pth>, it can be awakened
   later, of course.  The difference between usleep(3) and pth_usleep(3) is that
   that pth_usleep(3) suspends only the execution of the current thread and not
  @@ -1598,9 +1598,9 @@
   
   This is a variant of the POSIX sleep(3) function. It suspends the current
   threads execution until I<sec> seconds elapsed.  The thread is guaranteed to
  -not awakened before this time, but because of the non-preemptive scheduling
  +not wake up before this time, but because of the non-preemptive scheduling
   nature of B<Pth>, it can be awakened later, of course.  The difference between
  -sleep(3) and pth_sleep(3) is that that pth_sleep(3) suspends only the
  +sleep(3) and pth_sleep(3) is that pth_sleep(3) suspends only the
   execution of the current thread and not the whole process.
   
   =item pid_t B<pth_waitpid>(pid_t I<pid>, int *I<status>, int I<options>);
  @@ -1608,7 +1608,7 @@
   This is a variant of the POSIX waitpid(2) function. It suspends the
   current threads execution until I<status> information is available for a
   terminated child process I<pid>.  The difference between waitpid(2) and
  -pth_waitpid(3) is that that pth_waitpid(3) suspends only the execution of the
  +pth_waitpid(3) is that pth_waitpid(3) suspends only the execution of the
   current thread and not the whole process.  For more details about the
   arguments and return code semantics see waitpid(2).
   
  @@ -1617,7 +1617,7 @@
   This is a variant of the POSIX system(3) function. It executes the
   shell command I<cmd> with Bourne Shell (C<sh>) and suspends the current
   threads execution until this command terminates. The difference between
  -system(3) and pth_system(3) is that that pth_system(3) suspends only
  +system(3) and pth_system(3) is that pth_system(3) suspends only
   the execution of the current thread and not the whole process. For more
   details about the arguments and return code semantics see system(3).
   
  @@ -1644,7 +1644,7 @@
   
   This is a variant of the 4.2BSD connect(2) function. It establishes a
   connection on a socket I<s> to target specified in I<addr> and I<addrlen>.
  -The difference between connect(2) and pth_connect(3) is that that
  +The difference between connect(2) and pth_connect(3) is that 
   pth_connect(3) suspends only the execution of the current thread and not the
   whole process.  For more details about the arguments and return code semantics
   see connect(2).
  @@ -1655,7 +1655,7 @@
   a socket by extracting the first connection request on the queue of pending
   connections, creating a new socket with the same properties of I<s> and
   allocates a new file descriptor for the socket (which is returned).  The
  -difference between accept(2) and pth_accept(3) is that that pth_accept(3)
  +difference between accept(2) and pth_accept(3) is that pth_accept(3)
   suspends only the execution of the current thread and not the whole process.
   For more details about the arguments and return code semantics see accept(2).
   
  @@ -1679,7 +1679,7 @@
   
   This is a variant of the POSIX read(2) function. It reads up to I<nbytes>
   bytes into I<buf> from file descriptor I<fd>.  The difference between read(2)
  -and pth_read(2) is that that pth_read(2) suspends execution of the current
  +and pth_read(2) is that pth_read(2) suspends execution of the current
   thread until the file descriptor is ready for reading. For more details about
   the arguments and return code semantics see read(2).
   
  @@ -1687,7 +1687,7 @@
   
   This is a variant of the POSIX readv(2) function. It reads data from
   file descriptor I<fd> into the first I<iovcnt> rows of the I<iov> vector.  The
  -difference between readv(2) and pth_readv(2) is that that pth_readv(2)
  +difference between readv(2) and pth_readv(2) is that pth_readv(2)
   suspends execution of the current thread until the file descriptor is ready for
   reading. For more details about the arguments and return code semantics see
   readv(2).
  @@ -1696,7 +1696,7 @@
   
   This is a variant of the POSIX write(2) function. It writes I<nbytes> bytes
   from I<buf> to file descriptor I<fd>.  The difference between write(2) and
  -pth_write(2) is that that pth_write(2) suspends execution of the current
  +pth_write(2) is that pth_write(2) suspends execution of the current
   thread until the file descriptor is ready for writing.  For more details about
   the arguments and return code semantics see write(2).
   
  @@ -1704,7 +1704,7 @@
   
   This is a variant of the POSIX writev(2) function. It writes data to
   file descriptor I<fd> from the first I<iovcnt> rows of the I<iov> vector.  The
  -difference between writev(2) and pth_writev(2) is that that pth_writev(2)
  +difference between writev(2) and pth_writev(2) is that pth_writev(2)
   suspends execution of the current thread until the file descriptor is ready for
   reading. For more details about the arguments and return code semantics see
   writev(2).
  @@ -1735,7 +1735,7 @@
   This is a variant of the SUSv2 recvfrom(2) function. It reads up to
   I<nbytes> bytes into I<buf> from file descriptor I<fd> while using
   I<flags> and I<from>/I<fromlen>. The difference between recvfrom(2) and
  -pth_recvfrom(2) is that that pth_recvfrom(2) suspends execution of the
  +pth_recvfrom(2) is that pth_recvfrom(2) suspends execution of the
   current thread until the file descriptor is ready for reading. For more
   details about the arguments and return code semantics see recvfrom(2).
   
  @@ -1749,7 +1749,7 @@
   This is a variant of the SUSv2 sendto(2) function. It writes I<nbytes>
   bytes from I<buf> to file descriptor I<fd> while using I<flags> and
   I<to>/I<tolen>. The difference between sendto(2) and pth_sendto(2) is
  -that that pth_sendto(2) suspends execution of the current thread until
  +that pth_sendto(2) suspends execution of the current thread until
   the file descriptor is ready for writing. For more details about the
   arguments and return code semantics see sendto(2).
   
  @@ -1878,10 +1878,10 @@
   
   =head2 Autoconf Build Environment (Advanced)
   
  -The previous approach is simple but unflexible. First, to speed up
  +The previous approach is simple but inflexible. First, to speed up
   building, it would be nice to not expand the compiler and linker flags
   every time the compiler is started. Second, it would be useful to
  -also be able to build against an uninstalled B<Pth>, that is, against
  +also be able to build against uninstalled B<Pth>, that is, against
   a B<Pth> source tree which was just configured and built, but not
   installed. Third, it would be also useful to allow checking of the
   B<Pth> version to make sure it is at least a minimum required version.
  @@ -2196,7 +2196,7 @@
   entry point [see C<pth_tcb.h> and C<pth_pqueue.c> for details].
   
   Most time critical code sections (especially the dispatcher and event
  -manager) are speeded up by inlined functions (implemented as ANSI C
  +manager) are speeded up by inline functions (implemented as ANSI C
   pre-processor macros). Additionally any debugging code is I<completely>
   removed from the source when not built with C<-DPTH_DEBUG> (see Autoconf
   C<--enable-debug> option), i.e., not only stub functions remain [see

From ossp-cvs-owner@ossp.org  Sun Apr 28 15:22:51 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3625676360; Sun, 28 Apr 2002 15:22:51 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ui64 Makefile.in README TODO VERSION aclocal.m4 c...
Message-Id: <20020428132251.3625676360@mail.ossp.org>
Date: Sun, 28 Apr 2002 15:22:51 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Apr-2002 15:22:51
  Branch: HEAD                             Handle: 2002042814224900

  Added files:
    ossp-pkg/ui64           Makefile.in README TODO VERSION aclocal.m4
                            configure.ac devtool devtool.conf devtool.func
                            ts.c ts.h ui64-config.in ui64.c ui64.h ui64.pod
                            ui64_test.c

  Log:
    Add first cut of OSSP ui64, a new (sub-)library which allows us to
    perform 64-bit unsigned integer arithmetic in a portable way without
    requiring the machine to support C99's 64-bit type "unsigned long long".
    Basically a ui64_t is an 8 byte array of "unsigned char" elements and
    hence the library internally stores 64-bit values as 8 digits to the
    base 2^8 and also performs the mathematical operations this way.

  Summary:
    Revision    Changes     Path
    1.1         +132 -0     ossp-pkg/ui64/Makefile.in
    1.1         +47 -0      ossp-pkg/ui64/README
    1.1         +2  -0      ossp-pkg/ui64/TODO
    1.1         +6  -0      ossp-pkg/ui64/VERSION
    1.1         +117 -0     ossp-pkg/ui64/aclocal.m4
    1.1         +48 -0      ossp-pkg/ui64/configure.ac
    1.1         +47 -0      ossp-pkg/ui64/devtool
    1.1         +51 -0      ossp-pkg/ui64/devtool.conf
    1.1         +73 -0      ossp-pkg/ui64/devtool.func
    1.1         +468 -0     ossp-pkg/ui64/ts.c
    1.1         +64 -0      ossp-pkg/ui64/ts.h
    1.1         +148 -0     ossp-pkg/ui64/ui64-config.in
    1.1         +578 -0     ossp-pkg/ui64/ui64.c
    1.1         +75 -0      ossp-pkg/ui64/ui64.h
    1.1         +71 -0      ossp-pkg/ui64/ui64.pod
    1.1         +274 -0     ossp-pkg/ui64/ui64_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/ui64/Makefile.in
  ============================================================
  $ cvs update -p -r1.1 Makefile.in
  ##
  ##  OSSP ui64 - 64-Bit Arithmetic
  ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  ##
  ##  This file is part of OSSP ui64, a 64-bit arithmetic library
  ##  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  Makefile.in: make(1) build procedure
  ##
  
  @SET_MAKE@
  
  DESTDIR     =
  prefix      = @prefix@
  exec_prefix = @exec_prefix@
  bindir      = @bindir@
  libdir      = @libdir@
  includedir  = @includedir@
  mandir      = @mandir@
  
  CC          = @CC@
  CPPFLAGS    = @CPPFLAGS@
  CFLAGS      = @DEFS@ @CFLAGS@
  LDFLAGS     = @LDFLAGS@
  LIBS        = @LIBS@
  RM          = rm -f
  RMDIR       = rmdir
  SHTOOL      = ./shtool
  LIBTOOL     = ./libtool
  TRUE        = true
  POD2MAN     = pod2man
  
  LIB_NAME    = libui64.la
  LIB_OBJS    = ui64.lo
  
  TST_NAME    = ui64_test
  TST_OBJS    = ui64_test.o ts.o
  
  .SUFFIXES:
  .SUFFIXES: .c .o .lo
  
  all: $(LIB_NAME) $(TST_NAME)
  
  .c.o:
  	$(CC) $(CPPFLAGS) $(CFLAGS) -c $<
  
  .c.lo:
  	@$(LIBTOOL) --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS) -c $<
  
  $(LIB_OBJS): Makefile
  $(TST_OBJS): Makefile
  
  $(LIB_NAME): $(LIB_OBJS)
  	@$(LIBTOOL) --mode=link $(CC) -o $(LIB_NAME) $(LIB_OBJS) -rpath $(libdir) \
  	    -version-info `$(SHTOOL) version -l txt -d libtool VERSION`
  
  $(TST_NAME): $(TST_OBJS) $(LIB_NAME)
  	@$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $(TST_NAME) $(TST_OBJS) $(LIB_NAME) $(LIBS)
  
  man: ui64.3
  ui64.3: ui64.pod
  	V1=`$(SHTOOL) version -l txt -d short VERSION`; \
  	V2=`$(SHTOOL) version -l txt -d long VERSION`; \
  	D=`$(SHTOOL) version -l txt -d long VERSION | sed -e 's;.*(;;' -e 's;).*;;'`; \
  	$(POD2MAN) --quotes=none \
  	           --section=3 --center="64-Bit Arithmetic" \
  	           --release="$$D" --date="OSSP ui64 $$V1" ui64.pod | \
  	sed -e "s;UI64_VERSION_STR;$$V2;" >ui64.3
  
  check: $(TST_NAME)
  	@$(LIBTOOL) --mode=execute ./$(TST_NAME)
  
  install:
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(includedir)
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libdir)
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man3
  	$(SHTOOL) install -c -m 755 ui64-config $(DESTDIR)$(bindir)/
  	$(SHTOOL) install -c -m 644 ui64.h $(DESTDIR)$(includedir)/
  	$(SHTOOL) install -c -m 644 ui64.3 $(DESTDIR)$(mandir)/man3/
  	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libui64.la $(DESTDIR)$(libdir)/
  
  uninstall:
  	@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libui64.la
  	-$(RM) $(DESTDIR)$(mandir)/man3/ui64.3
  	-$(RM) $(DESTDIR)$(includedir)/ui64.h
  	-$(RM) $(DESTDIR)$(bindir)/ui64-config
  	-$(RMDIR) $(DESTDIR)$(mandir)/man3 >/dev/null 2>&1 || $(TRUE)
  	-$(RMDIR) $(DESTDIR)$(mandir) >/dev/null 2>&1 || $(TRUE)
  	-$(RMDIR) $(DESTDIR)$(libdir) >/dev/null 2>&1 || $(TRUE)
  	-$(RMDIR) $(DESTDIR)$(includedir) >/dev/null 2>&1 || $(TRUE)
  	-$(RMDIR) $(DESTDIR)$(bindir) >/dev/null 2>&1 || $(TRUE)
  	-$(RMDIR) $(DESTDIR)$(prefix) >/dev/null 2>&1 || $(TRUE)
  
  clean:
  	-$(RM) $(LIB_NAME) $(LIB_OBJS)
  	-$(RM) $(TST_NAME) $(TST_OBJS)
  	-$(RM) -r .libs >/dev/null 2>&1 || $(TRUE)
  	-$(RM) *.o *.lo
  
  distclean: clean
  	-$(RM) config.log config.status config.cache
  	-$(RM) Makefile config.h ui64-config
  	-$(RM) libtool
  
  realclean: distclean
  	-$(RM) ui64.3
  	-$(RM) configure config.h.in
  	-$(RM) shtool
  	-$(RM) ltmain.sh libtool.m4 config.guess config.sub
  
  Index: ossp-pkg/ui64/README
  ============================================================
  $ cvs update -p -r1.1 README
           _  __   _  _   
     _   _(_)/ /_ | || |  
    | | | | | '_ \| || |_ 
    | |_| | | (_) |__   _|
     \__,_|_|\___/   |_|  
                        
    OSSP ui64 - 64-Bit Aithmetic
    Version 0.1.0 (28-Apr-2002)
  
    ABSTRACT
  
    OSSP ui64 is ...
  
    COPYRIGHT AND LICENSE
  
    Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
    Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
    Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  
    This file is part of OSSP ui64, a 64-bit arithmetic which
    can be found at http://www.ossp.org/pkg/lib/ui64/.
  
    Permission to use, copy, modify, and distribute this software for
    any purpose with or without fee is hereby granted, provided that
    the above copyright notice and this permission notice appear in all
    copies.
  
    THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
    WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
    IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
    CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
    USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    SUCH DAMAGE.
  
    HOME AND DOCUMENTATION
  
    The documentation and latest release can be found on
  
    o http://www.ossp.org/pkg/lib/ui64/
    o  ftp://ftp.ossp.org/pkg/lib/ui64/
  
  Index: ossp-pkg/ui64/TODO
  ============================================================
  $ cvs update -p -r1.1 TODO
  - autoconf support for unsigned long long
  - portable import export of 8 bytes?
  Index: ossp-pkg/ui64/VERSION
  ============================================================
  $ cvs update -p -r1.1 VERSION
  
    VERSION -- Version Information for OSSP ui64 (syntax: Text)
    [automatically generated and maintained by GNU shtool]
  
    This is OSSP ui64, Version 0.1.0 (28-Apr-2002)
  
  Index: ossp-pkg/ui64/aclocal.m4
  ============================================================
  $ cvs update -p -r1.1 aclocal.m4
  dnl ##
  dnl ##  OSSP ui64 - 64-Bit Arithmetic
  dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  dnl ##
  dnl ##  This file is part of OSSP ui64, a 64-bit arithmetic library
  dnl ##  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  dnl ##
  dnl ##  Permission to use, copy, modify, and distribute this software for
  dnl ##  any purpose with or without fee is hereby granted, provided that
  dnl ##  the above copyright notice and this permission notice appear in all
  dnl ##  copies.
  dnl ##
  dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  dnl ##  SUCH DAMAGE.
  dnl ##
  dnl ##  aclocal.m4: GNU Autoconf local macro definitions
  dnl ##
  
  dnl ##
  dnl ##  Check whether compiler option works
  dnl ##
  dnl ##  configure.in:
  dnl ##    AC_COMPILER_OPTION(<name>, <display>, <option>,
  dnl ##                       <action-success>, <action-failure>)
  dnl ##
  
  AC_DEFUN(AC_COMPILER_OPTION,[dnl
  AC_MSG_CHECKING(whether compiler option(s) $2 work)
  AC_CACHE_VAL(ac_cv_compiler_option_$1,[
  SAVE_CFLAGS="$CFLAGS"
  CFLAGS="$CFLAGS $3"
  AC_TRY_COMPILE([],[], ac_cv_compiler_option_$1=yes, ac_cv_compiler_option_$1=no)
  CFLAGS="$SAVE_CFLAGS"
  ])dnl
  if test ".$ac_cv_compiler_option_$1" = .yes; then
      ifelse([$4], , :, [$4])
  else
      ifelse([$5], , :, [$5])
  fi
  AC_MSG_RESULT([$ac_cv_compiler_option_$1])
  ])dnl
  
  dnl ##
  dnl ##  Debugging Support
  dnl ##
  dnl ##  configure.in:
  dnl ##    AC_CHECK_DEBUGGING
  dnl ##
  
  AC_DEFUN(AC_CHECK_DEBUGGING,[dnl
  AC_ARG_ENABLE(debug,dnl
  [  --enable-debug          build for debugging (default=no)],
  [dnl
  if test ".$ac_cv_prog_gcc" = ".yes"; then
      case "$CFLAGS" in
          *-O* ) ;;
             * ) CFLAGS="$CFLAGS -O2" ;;
      esac
      case "$CFLAGS" in
          *-g* ) ;;
             * ) CFLAGS="$CFLAGS -g" ;;
      esac
      case "$CFLAGS" in
          *-pipe* ) ;;
                * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
      esac
      AC_COMPILER_OPTION(defdbg, -DDEBUG, -DDEBUG, CFLAGS="$CFLAGS -DDEBUG")
      AC_COMPILER_OPTION(ggdb3, -ggdb3, -ggdb3, CFLAGS="$CFLAGS -ggdb3")
      CFLAGS="$CFLAGS -pedantic"
      CFLAGS="$CFLAGS -Wall"
      WMORE="-Wshadow -Wpointer-arith -Wcast-align -Winline"
      WMORE="$WMORE -Wmissing-prototypes -Wmissing-declarations -Wnested-externs"
      AC_COMPILER_OPTION(wmore, -W<xxx>, $WMORE, CFLAGS="$CFLAGS $WMORE")
      AC_COMPILER_OPTION(wnolonglong, -Wno-long-long, -Wno-long-long, CFLAGS="$CFLAGS -Wno-long-long")
  else
      case "$CFLAGS" in
          *-g* ) ;;
             * ) CFLAGS="$CFLAGS -g" ;;
      esac
  fi
  msg="enabled"
  ],[
  if test ".$ac_cv_prog_gcc" = ".yes"; then
  case "$CFLAGS" in
      *-pipe* ) ;;
            * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
  esac
  fi
  case "$CFLAGS" in
      *-g* ) CFLAGS=`echo "$CFLAGS" |\
                     sed -e 's/ -g / /g' -e 's/ -g$//' -e 's/^-g //g' -e 's/^-g$//'` ;;
  esac
  case "$CXXFLAGS" in
      *-g* ) CXXFLAGS=`echo "$CXXFLAGS" |\
                       sed -e 's/ -g / /g' -e 's/ -g$//' -e 's/^-g //g' -e 's/^-g$//'` ;;
  esac
  msg=disabled
  ])dnl
  AC_MSG_CHECKING(for compilation debug mode)
  AC_MSG_RESULT([$msg])
  if test ".$msg" = .enabled; then
      enable_shared=no
  fi
  ])
  
  Index: ossp-pkg/ui64/configure.ac
  ============================================================
  $ cvs update -p -r1.1 configure.ac
  dnl ##
  dnl ##  OSSP ui64 - 64-Bit Arithmetic
  dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  dnl ##
  dnl ##  This file is part of OSSP ui64, a 64-bit arithmetic library
  dnl ##  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  dnl ##
  dnl ##  Permission to use, copy, modify, and distribute this software for
  dnl ##  any purpose with or without fee is hereby granted, provided that
  dnl ##  the above copyright notice and this permission notice appear in all
  dnl ##  copies.
  dnl ##
  dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  dnl ##  SUCH DAMAGE.
  dnl ##
  dnl ##  configure.ac: GNU Autoconf source script
  dnl ##
  
  AC_PREREQ(2.53)
  AC_INIT
  UI64_VERSION_STR=`./shtool version -l txt -d long VERSION`
  ./shtool echo -e "Configuring %BOSSP ui64%b (64-Bit Arithmetic), version %B${UI64_VERSION_STR}%b"
  AC_SUBST(UI64_VERSION_STR)
  AC_CONFIG_SRCDIR(ui64.h)
  
  AC_PROG_MAKE_SET
  AC_PROG_CC
  AC_CHECK_DEBUGGING
  sinclude(libtool.m4)
  AC_PROG_LIBTOOL
  
  AC_CONFIG_HEADERS(config.h)
  AC_CONFIG_FILES([Makefile ui64-config])
  AC_CONFIG_COMMANDS([adjustment], [chmod a+x ui64-config])
  AC_OUTPUT
  
  Index: ossp-pkg/ui64/devtool
  ============================================================
  $ cvs update -p -r1.1 devtool
  #!/bin/sh
  ##
  ##  devtool -- Development Tool
  ##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  if [ $# -eq 0 ]; then
      echo "devtool:USAGE: devtool <command> [<arg> ...]" 1>&2
      exit 1
  fi
  
  cmd="$1"
  shift
  
  devtoolfunc="./devtool.func"
  
  if [ ! -f devtool.conf ]; then
      echo "devtool:ERROR: no devtool.conf in current directory" 1>&2
      exit 1
  fi
  
  cmdline=`grep "^%$cmd" devtool.conf`
  if [ ".$cmdline" = . ]; then
      echo "devtool:ERROR: command $cmd not found in devtool.conf" 1>&2
      exit 1
  fi
  
  if [ ".$TMPDIR" != . ]; then
      tmpdir="$TMPDIR"
  elif [ ".$TEMPDIR" != . ]; then
      tmpdir="$TEMPDIR"
  else
      tmpdir="/tmp"
  fi
  tmpfile="$tmpdir/rc.$$.tmp"
  
  rm -f $tmpfile
  touch $tmpfile
  echo ". $devtoolfunc" >>$tmpfile
  ( sed <devtool.conf -e "1,/^%common/d" -e '/^%.*/,$d'
    sed <devtool.conf -e "1,/^%$cmd/d" -e '/^%.*/,$d' ) |\
  sed -e 's;\([ 	]\)@\([a-zA-Z_][a-zA-Z0-9_]*\);\1devtool_\2;' >>$tmpfile
  
  sh $tmpfile "$@"
  
  rm -f $tmpfile >/dev/null 2>&1 || true
  
  Index: ossp-pkg/ui64/devtool.conf
  ============================================================
  $ cvs update -p -r1.1 devtool.conf
  ##
  ##  devtool.conf -- Development Tool Configuration
  ##
  
  %autogen
      @autogen shtool   1.6.0 "1.6.*" all
      @autogen libtool  1.4.2 "1.4*"
      @autogen autoconf 2.53  "2.5[3-9]*"
  
  %autoclean
      @autoclean shtool
      @autoclean libtool
      @autoclean autoconf
  
  %configure
      ./configure \
          --prefix=/tmp/ui64 \
          --disable-shared \
          --enable-debug \
          "$@"
  
  %version
      ./shtool version -l txt -n "OSSP ui64" -e VERSION
      V=`./shtool version -l txt -d long VERSION`
      sed -e "s/Version .*(.*)/Version $V/g" <README >README.n 
      mv README.n README
  
  %dist
      echo "+++ generating"
      ./devtool autoclean
      ./devtool autogen
      echo "+++ configuring"
      ./configure
      echo "+++ building"
      make clean all man
      echo "+++ cleaning"
      make distclean
      echo "+++ fixing"
      ./shtool fixperm -v .
      echo "+++ rolling"
      V=`./shtool version -l txt -d short VERSION`
      ./shtool tarball -o ui64-${V}.tar.gz -d ui64-${V} -u ossp -g ossp \
                       -e 'CVS,\.cvsignore,\.[ao],^\.,devtool*,*.tar.gz,00TODO' -c 'gzip --best' .
      ls -l ui64-${V}.tar.gz
      echo "+++ testing"
      gunzip <ui64-${V}.tar.gz | tar tvf -
  
  %release
      echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/ui64/"
      scp ui64-*.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/ui64/
  
  Index: ossp-pkg/ui64/devtool.func
  ============================================================
  $ cvs update -p -r1.1 devtool.func
  ##
  ##  devtool.func -- Development Tool Functions
  ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  devtool_require () {
      t="$1"; o="$2"; p="$3"; e="$4"; a="$5"
      v=`($t $o | head -1 | awk "{ print \\\$$p; }") 2>/dev/null`
      if [ ".$v" = . ]; then
          echo "devtool:ERROR: unable to determine version of $t" 1>&2
          exit 1
      fi
      case "$v" in
          $e )
              ;;
          $a )
              echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
              ;;
          * )
              echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
              exit 1
              ;;
      esac
      echo "$v"
  }
  
  devtool_autogen () {
      tool=$1
      shift
      case $tool in
          autoconf )
              autoconf_version=`devtool_require autoconf --version 4 "$1" "$2"`
              echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
              autoconf
              autoheader 2>&1 | grep -v "is unchanged"
              rm -rf autom4te.cache >/dev/null 2>&1
              ;;
          libtool )
              libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
              echo "generating (GNU Libtool $libtoolize_version): ltmain.sh, libtool.m4, config.guess, config.sub"
              libtoolize --force --copy >/dev/null 2>&1
              cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
                  sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` libtool.m4
              ;;
          shtool )
              shtoolize_version=`devtool_require shtoolize -v 3 "$1" "$2"`
              echo "generating (GNU Shtool $shtoolize_version): shtool"
              shift
              shift
              shtoolize -q "$@"
              ;;
      esac
  }
  
  devtool_autoclean () {
      tool=$1
      shift
      case $tool in
          autoconf )
              echo "removing: configure config.h.in"
              rm -f configure config.h.in
              ;;
          libtool )
              echo "removing: ltmain.sh libtool.m4 config.guess config.sub"
              rm -f ltmain.sh libtool.m4 config.guess config.sub
              ;;
          shtool )
              echo "removing: shtool"
              rm -f shtool
              ;;
      esac
  }
  
  Index: ossp-pkg/ui64/ts.c
  ============================================================
  $ cvs update -p -r1.1 ts.c
  /*
  **  TS - OSSP Test Suite Library
  **  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP TS, a small test suite library which
  **  can be found at http://www.ossp.org/pkg/ts/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  ts.c: test suite library
  */
  
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  #include <stdarg.h>
  
  #include "config.h"
  #if defined(HAVE_DMALLOC_H) && defined(WITH_DMALLOC)
  #include "dmalloc.h"
  #endif
  
  #include "ts.h"
  
  /* embedded ring data structure library */
  #define RING_ENTRY(elem) \
      struct { elem *next; elem *prev; }
  #define RING_HEAD(elem) \
      struct { elem *next; elem *prev; }
  #define RING_SENTINEL(hp, elem, link) \
      (elem *)((char *)(hp) - ((size_t)(&((elem *)0)->link)))
  #define RING_FIRST(hp) \
      (hp)->next
  #define RING_LAST(hp) \
      (hp)->prev
  #define RING_NEXT(ep, link) \
      (ep)->link.next
  #define RING_PREV(ep, link) \
      (ep)->link.prev
  #define RING_INIT(hp, elem, link) \
      do { RING_FIRST((hp)) = RING_SENTINEL((hp), elem, link); \
           RING_LAST((hp))  = RING_SENTINEL((hp), elem, link); } while (0)
  #define RING_EMPTY(hp, elem, link) \
      (RING_FIRST((hp)) == RING_SENTINEL((hp), elem, link))
  #define RING_ELEM_INIT(ep, link) \
      do { RING_NEXT((ep), link) = (ep); \
           RING_PREV((ep), link) = (ep); } while (0)
  #define RING_SPLICE_BEFORE(lep, ep1, epN, link) \
      do { RING_NEXT((epN), link) = (lep); \
           RING_PREV((ep1), link) = RING_PREV((lep), link); \
           RING_NEXT(RING_PREV((lep), link), link) = (ep1); \
           RING_PREV((lep), link) = (epN); } while (0)
  #define RING_SPLICE_TAIL(hp, ep1, epN, elem, link) \
      RING_SPLICE_BEFORE(RING_SENTINEL((hp), elem, link), (ep1), (epN), link)
  #define RING_INSERT_TAIL(hp, nep, elem, link) \
      RING_SPLICE_TAIL((hp), (nep), (nep), elem, link)
  #define RING_FOREACH(ep, hp, elem, link) \
      for ((ep)  = RING_FIRST((hp)); \
           (ep) != RING_SENTINEL((hp), elem, link); \
           (ep)  = RING_NEXT((ep), link))
  
  /* test suite test log */
  struct tstl_st;
  typedef struct tstl_st tstl_t;
  struct tstl_st {
      RING_ENTRY(tstl_t) next;
      char              *text;
      const char        *file;
      int                line;
  };
  
  /* test suite test check */
  struct tstc_st;
  typedef struct tstc_st tstc_t;
  struct tstc_st {
      RING_ENTRY(tstc_t) next;
      char              *title;
      int                failed;
      const char        *file;
      int                line;
      RING_HEAD(tstl_t)  logs;
  };
  
  /* test suite test */
  struct ts_test_st {
      RING_ENTRY(ts_test_t)  next;
      char              *title;
      ts_test_cb_t         func;
      const char        *file;
      int                line;
      RING_HEAD(tstc_t)  checks;
  };
  
  /* test suite */
  struct ts_suite_st {
      char              *title;
      RING_HEAD(ts_test_t)   tests;
  };
  
  /* minimal output-independent vprintf(3) variant which supports %{c,s,d,%} only */
  static int ts_suite_mvxprintf(char *buffer, size_t bufsize, const char *format, va_list ap)
  {
      /* sufficient integer buffer: <available-bits> x log_10(2) + safety */
      char ibuf[((sizeof(int)*8)/3)+10]; 
      char *cp;
      char c;
      int d;
      int n;
      int bytes;
  
      if (format == NULL || ap == NULL)
          return -1;
      bytes = 0;
      while (*format != '\0') {
          if (*format == '%') {
              c = *(format+1);
              if (c == '%') {
                  /* expand "%%" */
                  cp = &c;
                  n = sizeof(char);
              }
              else if (c == 'c') {
                  /* expand "%c" */
                  c = (char)va_arg(ap, int);
                  cp = &c;
                  n = sizeof(char);
              }
              else if (c == 's') {
                  /* expand "%s" */
                  if ((cp = (char *)va_arg(ap, char *)) == NULL)
                      cp = "(null)";
                  n = strlen(cp);
              }
              else if (c == 'd') {
                  /* expand "%d" */
                  d = (int)va_arg(ap, int);
  #ifdef HAVE_SNPRINTF
                  snprintf(ibuf, sizeof(ibuf), "%d", d); /* explicitly secure */
  #else
                  sprintf(ibuf, "%d", d);                /* implicitly secure */
  #endif
                  cp = ibuf;
                  n = strlen(cp);
              }
              else {
                  /* any other "%X" */
                  cp = (char *)format;
                  n  = 2;
              }
              format += 2;
          }
          else {
              /* plain text */
              cp = (char *)format;
              if ((format = strchr(cp, '%')) == NULL)
                  format = strchr(cp, '\0');
              n = format - cp;
          }
          /* perform output operation */
          if (buffer != NULL) {
              if (n > bufsize)
                  return -1;
              memcpy(buffer, cp, n);
              buffer  += n;
              bufsize -= n;
          }
          bytes += n;
      }
      /* nul-terminate output */
      if (buffer != NULL) {
          if (bufsize == 0)
              return -1;
          *buffer = '\0';
      }
      return bytes;
  }
  
  /* minimal vasprintf(3) variant which supports %{c,s,d} only */
  static char *ts_suite_mvasprintf(const char *format, va_list ap)
  {
      char *buffer;
      int n;
      va_list ap2;
  
      if (format == NULL || ap == NULL)
          return NULL;
      ap2 = ap;
      if ((n = ts_suite_mvxprintf(NULL, 0, format, ap)) == -1)
          return NULL;
      if ((buffer = (char *)malloc(n+1)) == NULL)
          return NULL;
      ts_suite_mvxprintf(buffer, n+1, format, ap2);
      return buffer;
  }
  
  /* minimal asprintf(3) variant which supports %{c,s,d} only */
  static char *ts_suite_masprintf(const char *format, ...)
  {
      va_list ap;
      char *cp;
  
      va_start(ap, format);
      cp = ts_suite_mvasprintf(format, ap);
      va_end(ap);
      return cp;
  }
  
  /* create test suite */
  ts_suite_t *ts_suite_new(const char *fmt, ...)
  {
      ts_suite_t *ts;
      va_list ap;
  
      if ((ts = (ts_suite_t *)malloc(sizeof(ts_suite_t))) == NULL)
          return NULL;
      va_start(ap, fmt);
      ts->title = ts_suite_mvasprintf(fmt, ap);
      RING_INIT(&ts->tests, ts_test_t, next);
      va_end(ap);
      return ts;
  }
  
  /* add test case to test suite */
  void ts_suite_test(ts_suite_t *ts, ts_test_cb_t func, const char *fmt, ...)
  {
      ts_test_t *tst;
      va_list ap;
  
      if (ts == NULL || func == NULL || fmt == NULL)
          return;
      if ((tst = (ts_test_t *)malloc(sizeof(ts_test_t))) == NULL)
          return;
      RING_ELEM_INIT(tst, next);
      va_start(ap, fmt);
      tst->title = ts_suite_mvasprintf(fmt, ap);
      va_end(ap);
      tst->func = func;
      tst->file = NULL;
      tst->line = 0;
      RING_INIT(&tst->checks, tstc_t, next);
      RING_INSERT_TAIL(&ts->tests, tst, ts_test_t, next);
      return;
  }
  
  /* run test suite */
  int ts_suite_run(ts_suite_t *ts)
  {
      ts_test_t *tst;
      tstc_t *tstc;
      tstl_t *tstl;
      int total_tests, total_tests_suite_failed;
      int total_checks, total_checks_failed;
      int test_checks, test_checks_failed;
      const char *file;
      int line;
      char *cp;
  
      if (ts == NULL)
          return 0;
  
      /* init total counters */
      total_tests         = 0;
      total_tests_suite_failed  = 0;
      total_checks        = 0;
      total_checks_failed = 0;
  
      fprintf(stdout, "\n");
      fprintf(stdout, " Test Suite: %s\n", ts->title);
      fprintf(stdout, " __________________________________________________________________\n");
      fprintf(stdout, "\n");
      fflush(stdout);
  
      /* iterate through all test cases */
      RING_FOREACH(tst, &ts->tests, ts_test_t, next) {
          cp = ts_suite_masprintf(" Test: %s ........................................"
                                  "........................................", tst->title);
          cp[60] = '\0';
          fprintf(stdout, "%s", cp);
          free(cp);
          fflush(stdout);
  
          /* init test case counters */
          test_checks        = 0;
          test_checks_failed = 0;
  
          /* run the test case function */
          tst->func(tst);
  
          /* iterate through all performed checks to determine status */
          RING_FOREACH(tstc, &tst->checks, tstc_t, next) {
              test_checks++;
              if (tstc->failed)
                  test_checks_failed++;
          }
  
          if (test_checks_failed > 0) {
              /* some checks failed, so do detailed reporting of test case */
              fprintf(stdout, " FAILED\n");
              fprintf(stdout, "       Ops, %d/%d checks failed! Detailed report follows:\n",
                      test_checks_failed, test_checks);
              RING_FOREACH(tstc, &tst->checks, tstc_t, next) {
                  file = (tstc->file != NULL ? tstc->file : tst->file);
                  line = (tstc->line != 0    ? tstc->line : tst->line);
                  if (file != NULL)
                      fprintf(stdout, "       Check: %s [%s:%d]\n", tstc->title, file, line);
                  else
                      fprintf(stdout, "       Check: %s\n", tstc->title);
                  RING_FOREACH(tstl, &tstc->logs, tstl_t, next) {
                      file = (tstl->file != NULL ? tstl->file : file);
                      line = (tstl->line != 0    ? tstl->line : line);
                      if (file != NULL)
                          fprintf(stdout, "              Log: %s [%s:%d]\n", tstl->text, file, line);
                      else
                          fprintf(stdout, "              Log: %s\n", tstl->text);
                  }
              }
          }
          else {
              /* test case ran successfully */
              fprintf(stdout, ".... OK\n");
          }
          fflush(stdout);
  
          /* accumulate counters */
          total_checks += test_checks;
          total_tests++;
          if (test_checks_failed > 0) {
              total_checks_failed += test_checks_failed;
              total_tests_suite_failed++;
          }
      }
  
      /* print test suite summary */
      fprintf(stdout, " __________________________________________________________________\n");
      fprintf(stdout, "\n");
      fprintf(stdout, " Test Summary: %d tests (%d ok, %d failed), %d checks (%d ok, %d failed)\n", 
              total_tests, (total_tests - total_tests_suite_failed), total_tests_suite_failed, 
              total_checks, (total_checks - total_checks_failed), total_checks_failed); 
      if (total_tests_suite_failed > 0)
          fprintf(stdout, " Test Suite: FAILED\n");
      else
          fprintf(stdout, " Test Suite: OK\n");
      fprintf(stdout, "\n");
      fflush(stdout);
  
      return total_checks_failed;
  }
  
  /* destroy test suite */
  void ts_suite_free(ts_suite_t *ts)
  {
      ts_test_t *tst;
      tstc_t *tstc;
      tstl_t *tstl;
  
      if (ts == NULL)
          return;
      RING_FOREACH(tst, &ts->tests, ts_test_t, next) {
          RING_FOREACH(tstc, &tst->checks, tstc_t, next) {
              RING_FOREACH(tstl, &tstc->logs, tstl_t, next) {
                  free(tstl->text);
              }
              free(tstc->title);
              free(tstc);
          }
          free(tst->title);
          free(tst);
      }
      free(ts->title);
      free(ts);
      return;
  }
  
  /* annotate test case with file name and line number */
  ts_test_t *ts_test_ctx(ts_test_t *tst, const char *file, int line)
  {
      if (tst != NULL && file != NULL) {
          tst->file = file;
          tst->line = line;
      }
      return tst;
  }
  
  /* annotate test case with check */
  void ts_test_check(ts_test_t *tst, const char *fmt, ...)
  {
      tstc_t *tstc;
      va_list ap;
  
      if (tst == NULL || fmt == NULL)
          return;
      if ((tstc = (tstc_t *)malloc(sizeof(tstc_t))) == NULL)
          return;
      va_start(ap, fmt);
      RING_ELEM_INIT(tstc, next);
      tstc->title = ts_suite_mvasprintf(fmt, ap);
      tstc->failed = 0;
      tstc->file = tst->file;
      tstc->line = tst->line;
      RING_INIT(&tstc->logs, tstl_t, next);
      RING_INSERT_TAIL(&tst->checks, tstc, tstc_t, next);
      va_end(ap);
      return;
  }
  
  /* annotate test case with log message and failure */
  void ts_test_fail(ts_test_t *tst, const char *fmt, ...)
  {
      tstc_t *tstc;
      tstl_t *tstl;
      va_list ap;
  
      if (tst == NULL || fmt == NULL)
          return;
      if ((tstl = (tstl_t *)malloc(sizeof(tstl_t))) == NULL)
          return;
      va_start(ap, fmt);
      tstl->text = ts_suite_mvasprintf(fmt, ap);
      tstl->file = tst->file;
      tstl->line = tst->line;
      RING_ELEM_INIT(tstl, next);
      tstc = RING_LAST(&tst->checks);
      RING_INSERT_TAIL(&tstc->logs, tstl, tstl_t, next);
      tstc->failed = 1;
      va_end(ap);
      return;
  }
  
  /* annotate test case with log message only */
  void ts_test_log(ts_test_t *tst, const char *fmt, ...)
  {
      tstc_t *tstc;
      tstl_t *tstl;
      va_list ap;
  
      if (tst == NULL || fmt == NULL)
          return;
      if ((tstl = (tstl_t *)malloc(sizeof(tstl_t))) == NULL)
          return;
      va_start(ap, fmt);
      tstl->text = ts_suite_mvasprintf(fmt, ap);
      tstl->file = tst->file;
      tstl->line = tst->line;
      RING_ELEM_INIT(tstl, next);
      tstc = RING_LAST(&tst->checks);
      RING_INSERT_TAIL(&tstc->logs, tstl, tstl_t, next);
      va_end(ap);
      return;
  }
  
  Index: ossp-pkg/ui64/ts.h
  ============================================================
  $ cvs update -p -r1.1 ts.h
  /*
  **  TS - OSSP Test Suite Library
  **  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP TS, a small test suite library which
  **  can be found at http://www.ossp.org/pkg/ts/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  ts.h: test suite library API
  */
  
  #ifndef _TS_H_
  #define _TS_H_
  
  /* test suite object type */
  struct ts_suite_st;
  typedef struct ts_suite_st ts_suite_t;
  
  /* test object type */
  struct ts_test_st;
  typedef struct ts_test_st ts_test_t;
  
  /* test callback function type */
  typedef void (*ts_test_cb_t)(ts_test_t *);
  
  /* test suite operations */
  ts_suite_t *ts_suite_new  (const char *fmt, ...);
  void        ts_suite_test (ts_suite_t *s, ts_test_cb_t func, const char *fmt, ...);
  int         ts_suite_run  (ts_suite_t *s);
  void        ts_suite_free (ts_suite_t *s);
  
  /* test operations */
  ts_test_t  *ts_test_ctx   (ts_test_t *t, const char *file, int line);
  void        ts_test_check (ts_test_t *t, const char *fmt, ...);
  void        ts_test_fail  (ts_test_t *t, const char *fmt, ...);
  void        ts_test_log   (ts_test_t *t, const char *fmt, ...);
  
  /* test suite short-cut macros */
  #define TS_TEST(name) \
      static void name(ts_test_t *_t)
  #define TS_CTX \
      ts_test_ctx(_t, __FILE__, __LINE__)
  
  #endif /* _TS_H_ */
  
  Index: ossp-pkg/ui64/ui64-config.in
  ============================================================
  $ cvs update -p -r1.1 ui64-config.in
  #!/bin/sh
  ##
  ##  OSSP ui64 - 64-Bit Arithmetic
  ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  ##
  ##  This file is part of OSSP ui64, a 64-bit arithmetic library
  ##  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  ui64-config.in: library build utility
  ##
  
  DIFS=' 
  '
  
  #   tool
  tool_name="ui64-config"
  
  #   library version
  lib_name="OSSP ui64"
  lib_version="@UI64_VERSION_STR@"
  
  #   build paths
  prefix="@prefix@"
  exec_prefix="@exec_prefix@"
  bindir="@bindir@"
  libdir="@libdir@"
  includedir="@includedir@"
  mandir="@mandir@"
  datadir="@datadir@"
  
  #   build options
  cflags="@CFLAGS@"
  ldflags="@LDFLAGS@"
  libs="@LIBS@"
  
  #   option defaults
  help=no
  version=no
  
  usage="$tool_name"
  usage="$usage [--help] [--version] [--all]"
  usage="$usage [--prefix] [--exec-prefix] [--bindir] [--libdir] [--includedir] [--mandir] [--datadir]"
  usage="$usage [--cflags] [--ldflags] [--libs]"
  if [ $# -eq 0 ]; then
      echo "$tool_name:Error: Invalid option" 1>&2
      echo "$tool_name:Usage: $usage" 1>&2
      exit 1
  fi
  output=''
  output_extra=''
  all=no
  prev=''
  OIFS="$IFS" IFS="$DIFS"
  for option
  do
      if [ ".$prev" != . ]; then
          eval "$prev=\$option"
          prev=''
          continue
      fi
      case "$option" in
          -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
             *) optarg='' ;;
      esac
      case "$option" in
          --help|-h)
              echo "Usage: $usage"
              exit 0
              ;;
          --version|-v)
              echo "$lib_name $lib_version"
              exit 0
              ;;
          --all)
              all=yes
              ;;
          --prefix)
              output="$output $prefix"
              ;;
          --exec-prefix)
              output="$output $exec_prefix"
              ;;
          --bindir)
              output="$output $bindir"
              ;;
          --libdir)
              output="$output $libdir"
              ;;
          --includedir)
              output="$output $includedir"
              ;;
          --mandir)
              output="$output $mandir"
              ;;
          --datadir)
              output="$output $datadir"
              ;;
          --cflags)
              output="$output -I$includedir"
              output_extra="$output_extra $cflags"
              ;;
          --ldflags)
              output="$output -L$libdir"
              output_extra="$output_extra $ldflags"
              ;;
          --libs)
              output="$output -lui64"
              output_extra="$output_extra $libs"
              ;;
          * )
              echo "$tool_name:Error: Invalid option" 1>&2
              echo "$tool_name:Usage: $usage" 1>&2
              exit 1;
              ;;
      esac
  done
  IFS="$OIFS"
  if [ ".$prev" != . ]; then
      echo "$tool_name:Error: missing argument to --`echo $prev | sed 's/_/-/g'`" 1>&2
      exit 1
  fi
  if [ ".$output" != . ]; then
      if [ ".$all" = .yes ]; then
          output="$output $output_extra"
      fi
      echo $output
  fi
  
  Index: ossp-pkg/ui64/ui64.c
  ============================================================
  $ cvs update -p -r1.1 ui64.c
  /*
  **  OSSP ui64 - 64-Bit Arithmetic
  **  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP ui64, a 64-bit arithmetic library
  **  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  ui64.c: implementation of 64-bit unsigned integer arithmetic
  */
  
  #include <string.h>
  #include <ctype.h>
  
  #include "ui64.h"
  
  #define UI64_BASE   256 /* 2^8 */
  #define UI64_DIGITS 8   /* 8*8 = 64 bit */
  #define UIXX_T(n) struct { unsigned char x[n]; }
  
  #define ui64_fill(__x, __n) \
      do { int __i; \
        for (__i = 0; __i < UI64_DIGITS; __i++) \
            (__x).x[__i] = (__n); \
      } while(0)
  
  /* the value zero */
  ui64_t ui64_zero(void)
  {
      ui64_t z;
  
      ui64_fill(z, 0);
      return z;
  }
  
  /* the maximum value */
  ui64_t ui64_max(void)
  {
      ui64_t z;
  
      ui64_fill(z, UI64_BASE-1);
      return z;
  }
  
  /* convert ISO-C "unsigned long" into internal format */
  ui64_t ui64_n2i(unsigned long n)
  {
      ui64_t z;
      int i;
  
      i = 0;
      do {
          z.x[i++] = (n % UI64_BASE);
      } while ((n /= UI64_BASE) > 0 && i < UI64_DIGITS);
      for ( ; i < UI64_DIGITS; i++)
          z.x[i] = 0;
      return z;
  }
  
  /* convert internal format into ISO-C "unsigned long";
     truncates if sizeof(unsigned long) is less than 8!) */
  unsigned long ui64_i2n(ui64_t x)
  {
      unsigned long n;
      int i;
  
      n = 0;
      i = (int)sizeof(n);
      if (i > UI64_DIGITS)
          i = UI64_DIGITS;
      while (--i >= 0) {
          n = (n * UI64_BASE) + x.x[i];
      }
      return n;
  }
  
  /* convert string representation of arbitrary base into internal format */
  ui64_t ui64_s2i(const char *str, char **end, int base)
  {
      ui64_t z;
      const char *cp;
      int carry;
      static char map[] = {
           0,  1,  2,  3,  4,  5,  6,  7,  8,  9,             /* 0...9 */
          36, 36, 36, 36, 36, 36, 36,                         /* illegal chars */
          10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, /* A...M */
          23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, /* N...Z */
          36, 36, 36, 36, 36, 36,                             /* illegal chars */
          10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, /* a...m */
          23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35  /* m...z */
      };
      
      ui64_fill(z, 0);
      if (str == NULL || (base < 2 || base > 36))
          return z;
      cp = str;
      while (*cp != '\0' && isspace((int)(*cp)))
          cp++;
      while (   *cp != '\0' 
             && isalnum((int)(*cp)) 
             && map[(int)(*cp)-'0'] < base) {
          z = ui64_muln(z, base, &carry);
          if (carry)
              break;
          z = ui64_addn(z, map[(int)(*cp)-'0'], &carry);
          if (carry)
              break;
          cp++;
      }
      if (end != NULL)
          *end = (char *)cp;
      return z;
  }
  
  /* convert internal format into string representation of arbitrary base */
  char *ui64_i2s(ui64_t x, char *str, size_t len, int base)
  {
      static char map[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
      char c;
      int r;
      int n;
      int i, j;
  
      if (str == NULL || len < 2 || (base < 2 || base > 36))
          return NULL;
      n = ui64_len(x);
      i = 0;
  	do {
  		x = ui64_divn(x, base, &r);
  		str[i++] = map[r];
  		while (n > 1 && x.x[n-1] == 0)
  			n--;
  	} while (i < (len-1) && (n > 1 || x.x[0] != 0));
  	str[i] = '\0';
      for (j = 0; j < --i; j++) {
          c = str[j];
          str[j] = str[i];
          str[i] = c;
      }
  	return str;
  }
  
  ui64_t ui64_add(ui64_t x, ui64_t y, ui64_t *ov)
  {
      ui64_t z;
      int carry;
      int i;
  
      carry = 0;
      for (i = 0; i < UI64_DIGITS; i++) {
          carry += (x.x[i] + y.x[i]);
          z.x[i] = (carry % UI64_BASE);
          carry /= UI64_BASE;
      }
      if (ov != NULL)
          *ov = ui64_n2i((unsigned long)carry);
      return z;
  }
  
  ui64_t ui64_addn(ui64_t x, int y, int *ov)
  {
      ui64_t z;
      int i;
  
      for (i = 0; i < UI64_DIGITS; i++) {
          y += x.x[i];
          z.x[i] = (y % UI64_BASE);
          y /= UI64_BASE;
      }
      if (ov != NULL)
          *ov = y;
      return z;
  }
  
  ui64_t ui64_sub(ui64_t x, ui64_t y, ui64_t *ov)
  {
      ui64_t z;
      int borrow;
      int i;
      int d;
  
      borrow = 0;
      for (i = 0; i < UI64_DIGITS; i++) {
          d = ((x.x[i] + UI64_BASE) - borrow - y.x[i]);
          z.x[i] = (d % UI64_BASE);
          borrow = (1 - (d/UI64_BASE));
      }
      if (ov != NULL)
          *ov = ui64_n2i((unsigned long)borrow);
      return z;
  }
  
  ui64_t ui64_subn(ui64_t x, int y, int *ov)
  {
      ui64_t z;
      int i;
      int d;
  
      for (i = 0; i < UI64_DIGITS; i++) {
          d = (x.x[i] + UI64_BASE) - y;
          z.x[i] = (d % UI64_BASE);
          y = (1 - (d/UI64_BASE));
      }
      if (ov != NULL)
          *ov = y;
      return z;
  }
  
  /*
               7 3 2
           * 9 4 2 8
           ---------
             5 8 5 6
     +     1 4 6 4
     +   2 9 2 8
     + 6 5 8 8
     ---------------
     = 6 9 0 1 2 9 6
  */
  
  ui64_t ui64_mul(ui64_t x, ui64_t y, ui64_t *ov)
  {
      UIXX_T(UI64_DIGITS+UI64_DIGITS) zx;
      ui64_t z;
      int carry;
      int i, j;
  
      /* clear temporary result buffer */
      for (i = 0; i < (UI64_DIGITS+UI64_DIGITS); i++)
          zx.x[i] = 0;
  
      /* perform multiplication operation */
      for (i = 0; i < UI64_DIGITS; i++) {
          /* calculate partial product and immediately add to z */
          carry = 0;
          for (j = 0; j < UI64_DIGITS; j++) {
              carry += (x.x[i] * y.x[j]) + zx.x[i+j];
              zx.x[i+j] = (carry % UI64_BASE);
              carry /= UI64_BASE;
          }
          /* add carry to remaining digits in z */
          for ( ; j < UI64_DIGITS + UI64_DIGITS - i; j++) {
              carry += zx.x[i+j];
              zx.x[i+j] = (carry % UI64_BASE);
              carry /= UI64_BASE;
          }
      }
  
      /* provide result by splitting zx into z and ov */
      memcpy(z.x, zx.x, UI64_DIGITS);
      if (ov != NULL)
          memcpy((*ov).x, &zx.x[UI64_DIGITS], UI64_DIGITS);
  
      return z;
  }
  
  ui64_t ui64_muln(ui64_t x, int y, int *ov)
  {
      ui64_t z;
      int carry;
      int i;
  
      carry = 0;
      for (i = 0; i < UI64_DIGITS; i++) {
          carry += (x.x[i] * y);
          z.x[i] = (carry % UI64_BASE);
          carry /= UI64_BASE;
      }
      if (ov != NULL)
          *ov = carry;
      return z;
  }
  
  /*
    =   2078 [q]
     0615367 [x] : 296 [y]
    -0592    [dq]
    -----
    = 0233
     -0000   [dq]
     -----
     = 2336
      -2072  [dq]
      -----
      = 2647
       -2308 [dq]
       -----
       = 279 [r]
   */
  ui64_t ui64_div(ui64_t x, ui64_t y, ui64_t *ov)
  {
      ui64_t q;
      ui64_t r;
      int i;
      int n, m;
      int ovn;
      
      /* determine actual number of involved digits */
      n = ui64_len(x);
      m = ui64_len(y);
  
      if (m == 1) {
          /* simple case #1: reduceable to ui64_divn() */
          if (y.x[0] == 0) {
              /* error case: division by zero! */
              ui64_fill(q, 0);
              ui64_fill(r, 0);
          }
          else {
              q = ui64_divn(x, y.x[0], &ovn);
              ui64_fill(r, 0);
              r.x[0] = (unsigned char)ovn;
          }
  
      } else if (n < m) {
          /* simple case #2: everything is in the remainder */
          ui64_fill(q, 0);
          r = x;
  
      } else { /* n >= m, m > 1 */
          /* standard case: x[0..n] / y[0..m] */
          UIXX_T(UI64_DIGITS+1) rx;
          UIXX_T(UI64_DIGITS+1) dq;
          ui64_t t;
          int km;
          int k;
          int qk;
          unsigned long y2;
          unsigned long r3;
          int borrow;
          int d;
  
          /* rx is x with a leading zero in order to make
             sure that n > m and not just n >= m */
          memcpy(rx.x, x.x, UI64_DIGITS);
          rx.x[UI64_DIGITS] = 0;
  
          for (k = n - m; k >= 0; k--) {
              /* efficiently compute qk by guessing
                 qk := rx[k+m-2...k+m]/y[m-2...m-1] */
              km = k + m;
              y2 = (y.x[m-1]*UI64_BASE) + y.x[m-2];
              r3 = (rx.x[km]*(UI64_BASE*UI64_BASE)) + 
                   (rx.x[km-1]*UI64_BASE) + rx.x[km-2];
              qk = r3 / y2;
              if (qk >= UI64_BASE)
                  qk = UI64_BASE - 1;
  
              /* dq := y*qk (post-adjust qk if guessed incorrectly) */
              t = ui64_muln(y, qk, &ovn);
              memcpy(dq.x, t.x, UI64_DIGITS);
              dq.x[m] = (unsigned char)ovn;
              for (i = m; i > 0; i--)
                  if (rx.x[i+k] != dq.x[i])
                      break;
              if (rx.x[i+k] < dq.x[i]) {
                  t = ui64_muln(y, --qk, &ovn);
                  memcpy(dq.x, t.x, UI64_DIGITS);
                  dq.x[m] = (unsigned char)ovn;
              }
  
              /* store qk */
              q.x[k] = (unsigned char)qk;
  
              /* rx := rx - dq*(b^k) */
              borrow = 0;
              for (i = 0; i < m+1; i++) {
                  d = ((rx.x[k+i] + UI64_BASE) - borrow - dq.x[i]);
                  rx.x[k+i] = (d % UI64_BASE);
                  borrow = (1 - (d/UI64_BASE));
              }
          }
          memcpy(r.x, rx.x, m);
  
          /* fill out results with leading zeros */
          for (i = n-m+1; i < UI64_DIGITS; i++)
              q.x[i] = 0;
          for (i = m; i < UI64_DIGITS; i++)
              r.x[i] = 0;
      }
  
      /* provide results */
      if (ov != NULL)
          *ov = r;
      return q;
  }
  
  ui64_t ui64_divn(ui64_t x, int y, int *ov)
  {
      ui64_t z;
      unsigned int carry;
      int i;
  
      carry = 0;
      for (i = (UI64_DIGITS - 1); i >= 0; i--) {
          carry = (carry * UI64_BASE) + x.x[i];
          z.x[i] = (carry / y);
          carry %= y;
      }
      if (ov != NULL)
          *ov = carry;
      return z;
  }
  
  ui64_t ui64_and(ui64_t x, ui64_t y)
  {
      ui64_t z;
      int i;
  
      for (i = 0; i < UI64_DIGITS; i++)
          z.x[i] = (x.x[i] & y.x[i]);
      return z;
  }
  
  ui64_t ui64_or(ui64_t x, ui64_t y)
  {
      ui64_t z;
      int i;
  
      for (i = 0; i < UI64_DIGITS; i++)
          z.x[i] = (x.x[i] | y.x[i]);
      return z;
  }
  
  ui64_t ui64_xor(ui64_t x, ui64_t y)
  {
      ui64_t z;
      int i;
  
      for (i = 0; i < UI64_DIGITS; i++)
          z.x[i] = ((x.x[i] & ~(y.x[i])) | (~(x.x[i]) & (y.x[i])));
      return z;
  }
  
  ui64_t ui64_not(ui64_t x)
  {
      ui64_t z;
      int i;
  
      for (i = 0; i < UI64_DIGITS; i++)
          z.x[i] = ~(x.x[i]);
      return z;
  }
  
  ui64_t ui64_rol(ui64_t x, int s, ui64_t *ov)
  {
      UIXX_T(UI64_DIGITS+UI64_DIGITS) zx;
      ui64_t z;
  	int i;
      int carry;
  
      if (s <= 0) {
          /* no shift at all */
          if (ov != NULL)
              *ov = ui64_zero();
          return x;
      }
      else if (s > 64) {
          /* too large shift */
          if (ov != NULL)
              *ov = ui64_zero();
          return ui64_zero();
      }
      else if (s == 64) {
          /* maximum shift */
          if (ov != NULL)
              *ov = x;
          return ui64_zero();
      }
      else { /* regular shift */
          /* shift (logically) left by s/8 bytes */
          for (i = 0; i < UI64_DIGITS+UI64_DIGITS; i++)
              zx.x[i] = 0;
          for (i = 0; i < UI64_DIGITS; i++)
              zx.x[i+(s/8)] = x.x[i];
          /* shift (logically) left by remaining s%8 bits */
          s %= 8;
          if (s > 0) {
              carry = 0;
              for (i = 0; i < UI64_DIGITS+UI64_DIGITS; i++) {
                  carry += (zx.x[i] * (1 << s));
                  zx.x[i] = (carry % UI64_BASE);
                  carry /= UI64_BASE;
              }
          }
          memcpy(z.x, zx.x, UI64_DIGITS);
          if (ov != NULL)
              memcpy((*ov).x, &zx.x[UI64_DIGITS], UI64_DIGITS);
      }
      return z;
  }
  
  ui64_t ui64_ror(ui64_t x, int s, ui64_t *ov)
  {
      UIXX_T(UI64_DIGITS+UI64_DIGITS) zx;
      ui64_t z;
  	int i;
      int carry;
  
      if (s <= 0) {
          /* no shift at all */
          if (ov != NULL)
              *ov = ui64_zero();
          return x;
      }
      else if (s > 64) {
          /* too large shift */
          if (ov != NULL)
              *ov = ui64_zero();
          return ui64_zero();
      }
      else if (s == 64) {
          /* maximum shift */
          if (ov != NULL)
              *ov = x;
          return ui64_zero();
      }
      else { /* regular shift */
          /* shift (logically) right by s/8 bytes */
          for (i = 0; i < UI64_DIGITS+UI64_DIGITS; i++)
              zx.x[i] = 0;
          for (i = 0; i < UI64_DIGITS; i++)
              zx.x[UI64_DIGITS+i-(s/8)] = x.x[i];
          /* shift (logically) right by remaining s%8 bits */
          s %= 8;
          if (s > 0) {
              carry = 0;
              for (i = (UI64_DIGITS+UI64_DIGITS - 1); i >= 0; i--) {
                  carry = (carry * UI64_BASE) + zx.x[i];
                  zx.x[i] = (carry / (1 << s));
                  carry %= (1 << s);
              }
          }
          memcpy(z.x, &zx.x[UI64_DIGITS], UI64_DIGITS);
          if (ov != NULL)
              memcpy((*ov).x, zx.x, UI64_DIGITS);
      }
      return z;
  }
  
  int ui64_cmp(ui64_t x, ui64_t y)
  {
      int i;
  
      i = UI64_DIGITS - 1;
      while (i > 0 && x.x[i] == y.x[i])
          i--;
      return (x.x[i] - y.x[i]);
  }
  
  int ui64_len(ui64_t x)
  {
      int i;
  
      for (i = UI64_DIGITS; i > 1 && x.x[i-1] == 0; i--)
          ;
      return i;
  }
  
  Index: ossp-pkg/ui64/ui64.h
  ============================================================
  $ cvs update -p -r1.1 ui64.h
  /*
  **  OSSP ui64 - 64-Bit Arithmetic
  **  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP ui64, a 64-bit arithmetic library
  **  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  ui64.h: API declaration
  */
  
  #ifndef __UI64_H__
  #define __UI64_H__
  
  #include <string.h>
  
  typedef struct {
      unsigned char x[8]; /* x_0, ..., x_7 */
  } ui64_t;
  
  /* minimum/maximum values */
  extern ui64_t        ui64_zero (void);
  extern ui64_t        ui64_max  (void);
  
  /* import and export via ISO-C "unsigned long" */
  extern ui64_t        ui64_n2i  (unsigned long n);
  extern unsigned long ui64_i2n  (ui64_t x);
  
  /* import and export via ISO-C string of arbitrary base */
  extern ui64_t        ui64_s2i  (const char *str, char **end, int base);
  extern char *        ui64_i2s  (ui64_t x, char *str, size_t len, int base);
  
  /* arithmetical operations */
  extern ui64_t        ui64_add  (ui64_t x, ui64_t y, ui64_t *ov);
  extern ui64_t        ui64_addn (ui64_t x, int    y, int    *ov);
  extern ui64_t        ui64_sub  (ui64_t x, ui64_t y, ui64_t *ov);
  extern ui64_t        ui64_subn (ui64_t x, int    y, int    *ov);
  extern ui64_t        ui64_mul  (ui64_t x, ui64_t y, ui64_t *ov);
  extern ui64_t        ui64_muln (ui64_t x, int    y, int    *ov);
  extern ui64_t        ui64_div  (ui64_t x, ui64_t y, ui64_t *ov);
  extern ui64_t        ui64_divn (ui64_t x, int    y, int    *ov);
  
  /* bit operations */
  extern ui64_t        ui64_and  (ui64_t x, ui64_t y);
  extern ui64_t        ui64_or   (ui64_t x, ui64_t y);
  extern ui64_t        ui64_xor  (ui64_t x, ui64_t y);
  extern ui64_t        ui64_not  (ui64_t x);
  extern ui64_t        ui64_rol  (ui64_t x, int s, ui64_t *ov);
  extern ui64_t        ui64_ror  (ui64_t x, int s, ui64_t *ov);
  
  /* other operations */
  extern int           ui64_len  (ui64_t x);
  extern int           ui64_cmp  (ui64_t x, ui64_t y);
  
  #endif /* __UI64_H__ */
  
  Index: ossp-pkg/ui64/ui64.pod
  ============================================================
  $ cvs update -p -r1.1 ui64.pod
  ##
  ##  OSSP ui64 - 64-Bit Arithmetic
  ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  ##
  ##  This file is part of OSSP ui64, a 64-bit arithmetic library
  ##  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  ui64.pod: library manual page
  ##
  
  =pod
  
  =head1 NAME
  
  B<OSSP ui64> - 64-Bit Arithmetic
  
  =head1 VERSION
  
  B<OSSP ui64 UI64_VERSION_STR>
  
  =head1 SYNOPSIS
  
  ...
  
  =head1 DESCRIPTION
  
  B<OSSP ui64> is a ...
  
  =head2 APPLICATION PROGRAMMER INTERFACE (API)
  
  =head1 EXAMPLE
  
  =head1 SEE ALSO
  
  B<ISO-C> unsigned long long.
  
  =head1 HISTORY
  
  B<OSSP ui64> was invented in April 2002 by Ralf S. Engelschall
  E<lt>rse@engelschall.comE<gt> for use inside the B<OSSP> project. Its
  creation was prompted by the requirement to calculate with 64-bit
  integers inside B<OSSP tai>.
  
  =head1 AUTHORS
  
   Ralf S. Engelschall
   rse@engelschall.com
   www.engelschall.com
  
  =cut
  
  Index: ossp-pkg/ui64/ui64_test.c
  ============================================================
  $ cvs update -p -r1.1 ui64_test.c
  /*
  **  OSSP ui64 - 64-Bit Arithmetic
  **  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP ui64, a 64-bit arithmetic library
  **  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  ui64_test.c: test suite
  */
  
  #include <stdio.h>
  #include <stdlib.h>
  #include <time.h>
  
  #include "ts.h"
  #include "ui64.h"
  
  TS_TEST(test_imex_num)
  {
      struct {
          unsigned int num;
      } table[] = {
          { 0           }, /* minimum value */
          { 255         }, /* 2^8 - 1       */
          { 256         }, /* 2^8           */
          { 257         }, /* 2^8 + 1       */
          { 4294967295U }, /* 2^32 - 1      */
      };
      int i;
      ui64_t x;
      unsigned long n;
  
      ts_test_check(TS_CTX, "import/export via number");
      for (i = 0; i < sizeof(table)/sizeof(table[0]); i++) {
          x = ui64_n2i(table[i].num);
          n = ui64_i2n(x);
          if (n != table[i].num) {
              ts_test_fail(TS_CTX, "input %d, "
                           "expected output %d, got output %d", 
                           table[i].num, table[i].num, n);
          }
      }
  }
  
  TS_TEST(test_imex_str)
  {
      struct {
          int   in_base;
          char *in_str;
          int   out_base;
          char *out_str;
      } table[] = {
          { 16, "0",                10, "0"                    }, /* minimum value */
          { 16, "ff",               10, "255"                  }, /* 2^8 - 1       */
          { 16, "100",              10, "256"                  }, /* 2^8           */
          { 16, "101",              10, "257"                  }, /* 2^8 + 1       */
          { 16, "ffffffff",         10, "4294967295"           }, /* 2^32 - 1      */
          { 16, "100000000",        10, "4294967296"           }, /* 2^32          */
          { 16, "100000001",        10, "4294967297"           }, /* 2^32 + 1      */
          { 16, "ffffffffffffffff", 10, "18446744073709551615" }  /* 2^64 - 1      */
      };
      int i;
      ui64_t x;
      char buf[128];
      char *cp;
  
      ts_test_check(TS_CTX, "import/export via string");
      for (i = 0; i < sizeof(table)/sizeof(table[0]); i++) {
  
          /* import/export input */
          x = ui64_s2i(table[i].in_str, NULL, table[i].in_base);
          cp = ui64_i2s(x, buf, sizeof(buf), table[i].in_base);
          if (strcasecmp(table[i].in_str, cp) != 0) {
              ts_test_fail(TS_CTX, "input \"%s\" (%d), "
                           "expected output \"%s\" (%d), got output \"%s\" (%d)", 
                           table[i].in_str, table[i].in_base, 
                           table[i].in_str, table[i].in_base, 
                           cp, table[i].in_base);
          }
  
          /* import/export output */
          x = ui64_s2i(table[i].out_str, NULL, table[i].out_base);
          cp = ui64_i2s(x, buf, sizeof(buf), table[i].out_base);
          if (strcasecmp(table[i].out_str, cp) != 0) {
              ts_test_fail(TS_CTX, "input \"%s\" (%d), "
                           "expected output \"%s\" (%d), got output \"%s\" (%d)", 
                           table[i].out_str, table[i].out_base, 
                           table[i].out_str, table[i].out_base, 
                           cp, table[i].out_base);
          }
  
          /* import input, export output */
          x = ui64_s2i(table[i].in_str, NULL, table[i].in_base);
          cp = ui64_i2s(x, buf, sizeof(buf), table[i].out_base);
          if (strcasecmp(table[i].out_str, cp) != 0) {
              ts_test_fail(TS_CTX, "input \"%s\" (%d), "
                           "expected output \"%s\" (%d), got output \"%s\" (%d)", 
                           table[i].in_str, table[i].in_base, 
                           table[i].out_str, table[i].out_base, 
                           cp, table[i].out_base);
          }
      }
  }
  
  TS_TEST(test_arithmetic)
  {
      int i;
      ui64_t a1, a2, re, ov;
      char re_a[128];
      char *re_s;
      char ov_a[128];
      char *ov_s;
      struct {
          char *a1; 
          char *op;
          char *a2; 
          char *re; 
          char *ov; 
      } table[] = {
          /* addition */
          { "0", "+", "0", "0", "0" },
          { "1", "+", "2", "3", "0" },
          { "255", "+", "1", "256", "0" },
          { "255", "+", "2", "257", "0" },
          { "4294967296", "+", "4294967295", "8589934591", "0" },
          { "4294967296", "+", "4294967296", "8589934592", "0" },
          { "18446744073709551615", "+", "0", "18446744073709551615", "0" },
          { "18446744073709551615", "+", "1", "0", "1" },
          { "18446744073709551615", "+", "18446744073709551615", "18446744073709551614", "1" },
          /* subtraction */
          { "0", "-", "0", "0", "0" },
          { "3", "-", "2", "1", "0" },
          { "4294967296", "-", "4294967296", "0", "0" },
          { "18446744073709551615", "-", "0", "18446744073709551615", "0" },
          { "18446744073709551615", "-", "18446744073709551615", "0", "0" },
          { "0", "-", "1", "18446744073709551615", "1" },
          { "0", "-", "18446744073709551615", "1", "1" },
          /* multiplication */
          { "0", "*", "0", "0", "0" },
          { "7", "*", "7", "49", "0" },
          { "4294967296", "*", "4294967295", "18446744069414584320", "0" },
          { "4294967296", "*", "4294967296", "0", "1" },
          { "4294967296", "*", "4294967297", "4294967296", "1" },
          { "1", "*", "18446744073709551615", "18446744073709551615", "0" },
          { "18446744073709551615", "*", "1", "18446744073709551615", "0" },
          { "2", "*", "18446744073709551615", "18446744073709551614", "1" },
          { "3", "*", "18446744073709551615", "18446744073709551613", "2" },
          { "4", "*", "18446744073709551615", "18446744073709551612", "3" },
          /* division */
          { "0", "/", "0", "0", "0" },
          { "0", "/", "7", "0", "0" },
          { "1", "/", "1", "1", "0" },
          { "6", "/", "3", "2", "0" },
          { "7", "/", "3", "2", "1" },
          { "4096", "/", "8192", "0", "4096" },
          { "65536", "/", "252", "260", "16" },
          { "4294967296", "/", "4294967296", "1", "0" },
          { "18446744073709551615", "/", "1", "18446744073709551615", "0" },
          { "18446744073709551615", "/", "18446744073709551615", "1", "0" },
          { "18000000000000000000", "/", "9000000000000000000", "2", "0" },
          { "18000000000000000000", "/", "42", "428571428571428571", "18" },
          { "18446744073709551615", "/", "4294967295", "4294967297", "0" },
          { "18446744073709551615", "/", "4294967296", "4294967295", "4294967295" }
      };
  
      ts_test_check(TS_CTX, "arithmetic operations");
      for (i = 0; i < sizeof(table)/sizeof(table[0]); i++) {
          a1 = ui64_s2i(table[i].a1, NULL, 10);
          a2 = ui64_s2i(table[i].a2, NULL, 10);
          switch (table[i].op[0]) {
              case '+': re = ui64_add(a1, a2, &ov); break;
              case '-': re = ui64_sub(a1, a2, &ov); break;
              case '*': re = ui64_mul(a1, a2, &ov); break;
              case '/': re = ui64_div(a1, a2, &ov); break;
              default: break;
          }
          re_s = ui64_i2s(re, re_a, sizeof(re_a), 10);
          ov_s = ui64_i2s(ov, ov_a, sizeof(ov_a), 10);
          if (   strcasecmp(re_s, table[i].re) != 0
              || strcasecmp(ov_s, table[i].ov) != 0) {
              ts_test_fail(TS_CTX, "%s %s %s = (expected) %s [%s] != %s [%s] (got)",
                            table[i].a1, table[i].op, table[i].a2, 
                            table[i].re, table[i].ov, re_s, ov_s);
          }
      }
  }
  
  TS_TEST(test_rotate)
  {
      int i;
      ui64_t a1, re, ov;
      int a2;
      char re_a[128];
      char *re_s;
      char ov_a[128];
      char *ov_s;
      struct {
          char *a1; 
          char *op;
          int a2; 
          char *re; 
          char *ov; 
      } table[] = {
          /* rotate left */
          { "0", "<", 0, "0", "0" },
          { "1", "<", 1, "2", "0" },
          { "2", "<", 2, "8", "0" },
          { "4294967296", "<", 16, "281474976710656", "0" },
          { "4294967296", "<", 17, "562949953421312", "0" },
          { "4294967296", "<", 18, "1125899906842624", "0" },
          { "18446744073709551615", "<", 64, "0", "18446744073709551615" },
          { "18446744073709551615", "<", 32, "18446744069414584320", "4294967295" },
          /* rotate right */
          { "0", ">", 0, "0", "0" },
          { "1", ">", 1, "0", "9223372036854775808" },
          { "4", ">", 2, "1", "0" },
          { "4294967296", ">", 16, "65536", "0" },
          { "4294967295", ">", 16, "65535", "18446462598732840960" }
      };
  
      ts_test_check(TS_CTX, "rotate operations");
      for (i = 0; i < sizeof(table)/sizeof(table[0]); i++) {
          a1 = ui64_s2i(table[i].a1, NULL, 10);
          a2 = table[i].a2;
          switch (table[i].op[0]) {
              case '<': re = ui64_rol(a1, a2, &ov); break;
              case '>': re = ui64_ror(a1, a2, &ov); break;
              default: break;
          }
          re_s = ui64_i2s(re, re_a, sizeof(re_a), 10);
          ov_s = ui64_i2s(ov, ov_a, sizeof(ov_a), 10);
          if (   strcasecmp(re_s, table[i].re) != 0
              || strcasecmp(ov_s, table[i].ov) != 0) {
              ts_test_fail(TS_CTX, "%s %s %d = (expected) %s [%s] != %s [%s] (got)",
                            table[i].a1, table[i].op, table[i].a2, 
                            table[i].re, table[i].ov, re_s, ov_s);
          }
      }
  }
  
  int main(int argc, char *argv[])
  {
      ts_suite_t *ts;
      int n;
      ts = ts_suite_new("OSSP ui64 (64-Bit Arithmetic)");
      ts_suite_test(ts, test_imex_num, "import/export via number");
      ts_suite_test(ts, test_imex_str, "import/export via string");
      ts_suite_test(ts, test_arithmetic, "arithmetical operations");
      ts_suite_test(ts, test_rotate, "bit-wise rotation");
      n = ts_suite_run(ts);
      ts_suite_free(ts);
      return n;
  }
  

From ossp-cvs-owner@ossp.org  Sun Apr 28 15:26:57 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BC32476360; Sun, 28 Apr 2002 15:26:57 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ui64 .cvsignore
Message-Id: <20020428132657.BC32476360@mail.ossp.org>
Date: Sun, 28 Apr 2002 15:26:57 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Apr-2002 15:26:57
  Branch: HEAD                             Handle: 2002042814265700

  Added files:
    ossp-pkg/ui64           .cvsignore

  Log:
    ignore files

  Summary:
    Revision    Changes     Path
    1.1         +11 -0      ossp-pkg/ui64/.cvsignore
  ____________________________________________________________________________

  Index: ossp-pkg/ui64/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  Makefile
  config.guess
  config.h
  config.h.in
  config.sub
  configure
  libtool.m4
  ltmain.sh
  shtool
  ui64-config
  ui64_test

From ossp-cvs-owner@ossp.org  Sun Apr 28 15:27:24 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A9A5C76360; Sun, 28 Apr 2002 15:27:24 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ui64 ui64.pod
Message-Id: <20020428132724.A9A5C76360@mail.ossp.org>
Date: Sun, 28 Apr 2002 15:27:24 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Apr-2002 15:27:24
  Branch: HEAD                             Handle: 2002042814272400

  Modified files:
    ossp-pkg/ui64           ui64.pod

  Log:
    remember source of the core pieces

  Summary:
    Revision    Changes     Path
    1.2         +3  -1      ossp-pkg/ui64/ui64.pod
  ____________________________________________________________________________

  Index: ossp-pkg/ui64/ui64.pod
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 ui64.pod
  --- ossp-pkg/ui64/ui64.pod	28 Apr 2002 13:22:49 -0000	1.1
  +++ ossp-pkg/ui64/ui64.pod	28 Apr 2002 13:27:24 -0000	1.2
  @@ -59,7 +59,9 @@
   B<OSSP ui64> was invented in April 2002 by Ralf S. Engelschall
   E<lt>rse@engelschall.comE<gt> for use inside the B<OSSP> project. Its
   creation was prompted by the requirement to calculate with 64-bit
  -integers inside B<OSSP tai>.
  +integers inside B<OSSP tai>. The core implementation is derived
  +from the B<XP> library in David R. Hanson's book C<C Interfaces and
  +Implementations>.
   
   =head1 AUTHORS
   

From ossp-cvs-owner@ossp.org  Sun Apr 28 20:58:02 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A805276360; Sun, 28 Apr 2002 20:58:01 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ui64 ui64.c ui64.h ui64.pod
Message-Id: <20020428185801.A805276360@mail.ossp.org>
Date: Sun, 28 Apr 2002 20:58:01 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Apr-2002 20:58:01
  Branch: HEAD                             Handle: 2002042819580100

  Modified files:
    ossp-pkg/ui64           ui64.c ui64.h ui64.pod

  Log:
    first cut for a real documentation

  Summary:
    Revision    Changes     Path
    1.2         +6  -1      ossp-pkg/ui64/ui64.c
    1.2         +1  -1      ossp-pkg/ui64/ui64.h
    1.3         +170 -6     ossp-pkg/ui64/ui64.pod
  ____________________________________________________________________________

  Index: ossp-pkg/ui64/ui64.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 ui64.c
  --- ossp-pkg/ui64/ui64.c	28 Apr 2002 13:22:49 -0000	1.1
  +++ ossp-pkg/ui64/ui64.c	28 Apr 2002 18:58:01 -0000	1.2
  @@ -37,6 +37,7 @@
   #define UI64_DIGITS 8   /* 8*8 = 64 bit */
   #define UIXX_T(n) struct { unsigned char x[n]; }
   
  +/* fill an ui64_t with a sequence of a particular digit */
   #define ui64_fill(__x, __n) \
       do { int __i; \
         for (__i = 0; __i < UI64_DIGITS; __i++) \
  @@ -77,7 +78,7 @@
   }
   
   /* convert internal format into ISO-C "unsigned long";
  -   truncates if sizeof(unsigned long) is less than 8!) */
  +   truncates if sizeof(unsigned long) is less than UI64_DIGITS! */
   unsigned long ui64_i2n(ui64_t x)
   {
       unsigned long n;
  @@ -159,6 +160,7 @@
   	return str;
   }
   
  +/* addition of two ui64_t */
   ui64_t ui64_add(ui64_t x, ui64_t y, ui64_t *ov)
   {
       ui64_t z;
  @@ -176,6 +178,7 @@
       return z;
   }
   
  +/* addition of an ui64_t and a single digit */
   ui64_t ui64_addn(ui64_t x, int y, int *ov)
   {
       ui64_t z;
  @@ -191,6 +194,7 @@
       return z;
   }
   
  +/* subtraction of two ui64_t */
   ui64_t ui64_sub(ui64_t x, ui64_t y, ui64_t *ov)
   {
       ui64_t z;
  @@ -209,6 +213,7 @@
       return z;
   }
   
  +/* subtraction of an ui64_t and a single digit */
   ui64_t ui64_subn(ui64_t x, int y, int *ov)
   {
       ui64_t z;
  Index: ossp-pkg/ui64/ui64.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 ui64.h
  --- ossp-pkg/ui64/ui64.h	28 Apr 2002 13:22:49 -0000	1.1
  +++ ossp-pkg/ui64/ui64.h	28 Apr 2002 18:58:01 -0000	1.2
  @@ -37,7 +37,7 @@
       unsigned char x[8]; /* x_0, ..., x_7 */
   } ui64_t;
   
  -/* minimum/maximum values */
  +/* particular values */
   extern ui64_t        ui64_zero (void);
   extern ui64_t        ui64_max  (void);
   
  Index: ossp-pkg/ui64/ui64.pod
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 ui64.pod
  --- ossp-pkg/ui64/ui64.pod	28 Apr 2002 13:27:24 -0000	1.2
  +++ ossp-pkg/ui64/ui64.pod	28 Apr 2002 18:58:01 -0000	1.3
  @@ -40,19 +40,183 @@
   
   =head1 SYNOPSIS
   
  -...
  +B<ui64_zero>, 
  +B<ui64_max>,  
  +B<ui64_n2i>,  
  +B<ui64_i2n>,  
  +B<ui64_s2i>,  
  +B<ui64_i2s>,  
  +B<ui64_add>,  
  +B<ui64_addn>, 
  +B<ui64_sub>,  
  +B<ui64_subn>, 
  +B<ui64_mul>,  
  +B<ui64_muln>, 
  +B<ui64_div>,  
  +B<ui64_divn>, 
  +B<ui64_and>,  
  +B<ui64_or>,   
  +B<ui64_xor>,  
  +B<ui64_not>,  
  +B<ui64_rol>,  
  +B<ui64_ror>,  
  +B<ui64_len>,  
  +B<ui64_cmp>.  
   
   =head1 DESCRIPTION
   
  -B<OSSP ui64> is a ...
  +B<OSSP ui64> is a small B<ISO-C> library for portable 64-bit arithmetic.
   
  -=head2 APPLICATION PROGRAMMER INTERFACE (API)
  +=head1 APPLICATION PROGRAMMER INTERFACE (API)
   
  -=head1 EXAMPLE
  +=head2 Particular Values
   
  -=head1 SEE ALSO
  +API functions providing particular values:
   
  -B<ISO-C> unsigned long long.
  +=over 4
  +
  +=item ui64_t B<ui64_zero>(void);
  +
  +The value 0, expressed as an ui64_t.
  +
  +=item ui64_t B<ui64_max>(void);
  +
  +The maximum value expressable as an ui64_t.
  +
  +=back
  +
  +=head2 Import & Export
  +
  +API functions providing value importing and exporting to and from native
  +B<ISO-C> representations:
  +
  +=over 4
  +
  +=item ui64_t B<ui64_n2i>(unsigned long I<n>);
  +
  +Import value from B<ISO-C> C<unsigned long> I<n>.
  +
  +=item unsigned long B<ui64_i2n>(ui64_t I<x>);
  +
  +Export value of I<x> to B<ISO-C> C<unsigned long>. This operation is not
  +less-less if the 64-bit value in I<x> exceeds the B<ISO-C> value
  +C<LONG_MAX>.
  +
  +=item ui64_t B<ui64_s2i>(const char *I<str>, char **I<end>, int I<base>);
  +
  +Import value from C<NUL>-terminated B<ISO-C> string representation
  +starting at I<str>. The representation can have leading whitespaces and
  +its (case-insensitive) digits (C<0>, ..., C<9>, C<A>, ..., C<Z>) are
  +interpreted to base I<base>. I<base> has to be greater or equal 2 and
  +less than 36. If I<end> is not C<NULL>, it is set to the first character
  +after the imported value representation.
  +
  +=item char *B<ui64_i2s>(ui64_t I<x>, char *I<str>, size_t I<len>, int I<base>);
  +
  +Export value of I<x> to B<ISO-C> string representation. The
  +representation consists of digits (C<0>, ..., C<9>, C<A>, ..., C<Z>) and
  +form the value to base I<base>. I<base> has to be greater or equal 2 and
  +less than 36. The representation is stored into the buffer starting at
  +I<str> and lasting I<len> bytes.
  +
  +=back
  +
  +=head2 Arithmetical Operations
  +
  +API functions performing the standard arithmetical operations:
  +
  +=over 4
  +
  +=item ui64_t B<ui64_add>(ui64_t I<x>, ui64_t I<y>, ui64_t *I<ov>);
  +
  +Addition of I<x> and I<y>. 
  +If I<ov> is not C<NULL>, it receives the overflow value of
  +this operation (carry).
  +
  +=item ui64_t B<ui64_addn>(ui64_t I<x>, int I<y>, int *I<ov>);
  +
  +Same as B<ui64_add>, but I<y> and I<ov> are single digits to base 2^8.
  +
  +=item ui64_t B<ui64_sub>(ui64_t I<x>, ui64_t I<y>, ui64_t *I<ov>);
  +
  +Subtraction of I<y> from I<x>. 
  +If I<ov> is not C<NULL>, it receives the overflow value of
  +this operation (borrow).
  +
  +=item ui64_t B<ui64_subn>(ui64_t I<x>, int I<y>, int *I<ov>);
  +
  +Same as B<ui64_sub>, but I<y> and I<ov> are single digits to base 2^8.
  +
  +=item ui64_t B<ui64_mul>(ui64_t I<x>, ui64_t I<y>, ui64_t *I<ov>);
  +
  +Multiplication of I<x> and I<y>. 
  +If I<ov> is not C<NULL>, it receives the overflow value of
  +this operation).
  +
  +=item ui64_t B<ui64_muln>(ui64_t I<x>, int I<y>, int *I<ov>);
  +
  +Same as B<ui64_mul>, but I<y> and I<ov> are single digits to base 2^8.
  +
  +=item ui64_t B<ui64_div>(ui64_t I<x>, ui64_t I<y>, ui64_t *I<ov>);
  +
  +Division of I<x> by I<y>. 
  +If I<ov> is not C<NULL>, it receives the overflow value of
  +this operation (remainder).
  +
  +=item ui64_t B<ui64_divn>(ui64_t I<x>, int I<y>, int *I<ov>);
  +
  +Same as B<ui64_div>, but I<y> and I<ov> are single digits to base 2^8.
  +
  +=back
  +
  +=head2 Bit Operations
  +
  +API functions performing the standard bit-wise operations:
  +
  +=over 4
  +
  +=item ui64_t B<ui64_and>(ui64_t I<x>, ui64_t I<y>);
  +
  +Bit-wise I<AND> operation between I<x> and I<y>.
  +
  +=item ui64_t B<ui64_or>(ui64_t I<x>, ui64_t I<y>);
  +
  +Bit-wise I<OR> operation between I<x> and I<y>.
  +
  +=item ui64_t B<ui64_xor>(ui64_t I<x>, ui64_t I<y>);
  +
  +Bit-wise I<Exclusive-OR> operation between I<x> and I<y>.
  +
  +=item ui64_t B<ui64_not>(ui64_t I<x>);
  +
  +Bit-wise I<NOT> operation of I<x>.
  +
  +=item ui64_t B<ui64_rol>(ui64_t I<x>, int I<s>, ui64_t *I<ov>);
  +
  +Bit-wise I<Rotate-Left> operation by I<s> bits of I<x>.
  +If I<ov> is not C<NULL>, it contains the out-rotated bits.
  +
  +=item ui64_t B<ui64_ror>(ui64_t I<x>, int I<s>, ui64_t *I<ov>);
  +
  +Bit-wise I<Rotate-Right> operation by I<s> bits of I<x>.
  +If I<ov> is not C<NULL>, it contains the out-rotated bits.
  +
  +=back
  +
  +=head2 Other Operations
  +
  +=over 4
  +
  +=item int B<ui64_len>(ui64_t I<x>);
  +
  +Number of digits (1-8) to base 2^8 in I<x>.
  +
  +=item int B<ui64_cmp>(ui64_t I<x>, ui64_t I<y>);
  +
  +Comparison of I<x> and I<y> values. Returns C<-1>, C<0>
  +or C<+1> if I<x> is less/equal/greater than I<y>.
  +
  +=back
   
   =head1 HISTORY
   

From ossp-cvs-owner@ossp.org  Sun Apr 28 21:04:01 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E3BA576360; Sun, 28 Apr 2002 21:04:00 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ui64 ui64.pod
Message-Id: <20020428190400.E3BA576360@mail.ossp.org>
Date: Sun, 28 Apr 2002 21:04:00 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Apr-2002 21:04:00
  Branch: HEAD                             Handle: 2002042820040000

  Modified files:
    ossp-pkg/ui64           ui64.pod

  Log:
    describe ui64 is a little bit more detail

  Summary:
    Revision    Changes     Path
    1.4         +4  -0      ossp-pkg/ui64/ui64.pod
  ____________________________________________________________________________

  Index: ossp-pkg/ui64/ui64.pod
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 ui64.pod
  --- ossp-pkg/ui64/ui64.pod	28 Apr 2002 18:58:01 -0000	1.3
  +++ ossp-pkg/ui64/ui64.pod	28 Apr 2002 19:04:00 -0000	1.4
  @@ -66,6 +66,10 @@
   =head1 DESCRIPTION
   
   B<OSSP ui64> is a small B<ISO-C> library for portable 64-bit arithmetic.
  +It allows to perform the usual arithmetical and bit-wise operations on
  +a B<ISO-C> type B<ui64_t> which resembles a 64-bit unsigned integer
  +type. The library does no dynamic memory allocations and instead passes
  +B<ui64_t> values directly through the API functions.
   
   =head1 APPLICATION PROGRAMMER INTERFACE (API)
   

From ossp-cvs-owner@ossp.org  Mon Apr 29 21:09:06 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1276876363; Mon, 29 Apr 2002 21:09:06 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tai .cvsignore
Message-Id: <20020429190906.1276876363@mail.ossp.org>
Date: Mon, 29 Apr 2002 21:09:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Apr-2002 21:09:05
  Branch: HEAD                             Handle: 2002042920090500

  Added files:
    ossp-pkg/tai            .cvsignore

  Log:
    ignore generated files

  Summary:
    Revision    Changes     Path
    1.1         +11 -0      ossp-pkg/tai/.cvsignore
  ____________________________________________________________________________

  Index: ossp-pkg/tai/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  Makefile
  config.guess
  config.h
  config.h.in
  config.sub
  configure
  libtool.m4
  ltmain.sh
  shtool
  tai-config
  tai_test

From ossp-cvs-owner@ossp.org  Mon Apr 29 21:16:04 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4988276363; Mon, 29 Apr 2002 21:16:04 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ui64 ui64.h
Message-Id: <20020429191604.4988276363@mail.ossp.org>
Date: Mon, 29 Apr 2002 21:16:04 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Apr-2002 21:16:04
  Branch: HEAD                             Handle: 2002042920160300

  Modified files:
    ossp-pkg/ui64           ui64.h

  Log:
    add embedding support

  Summary:
    Revision    Changes     Path
    1.3         +34 -0      ossp-pkg/ui64/ui64.h
  ____________________________________________________________________________

  Index: ossp-pkg/ui64/ui64.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 ui64.h
  --- ossp-pkg/ui64/ui64.h	28 Apr 2002 18:58:01 -0000	1.2
  +++ ossp-pkg/ui64/ui64.h	29 Apr 2002 19:16:03 -0000	1.3
  @@ -33,6 +33,40 @@
   
   #include <string.h>
   
  +/* embedding support */
  +#ifdef UI64_PREFIX
  +#if defined(__STDC__) || defined(__cplusplus)
  +#define __UI64_CONCAT(x,y) x ## y
  +#define UI64_CONCAT(x,y) __UI64_CONCAT(x,y)
  +#else
  +#define __UI64_CONCAT(x) x
  +#define UI64_CONCAT(x,y) __UI64_CONCAT(x)y
  +#endif
  +#define ui64_t     UI64_CONCAT(UI64_PREFIX,ui64_t)
  +#define ui64_zero  UI64_CONCAT(UI64_PREFIX,ui64_zero)
  +#define ui64_max   UI64_CONCAT(UI64_PREFIX,ui64_max) 
  +#define ui64_n2i   UI64_CONCAT(UI64_PREFIX,ui64_n2i) 
  +#define ui64_i2n   UI64_CONCAT(UI64_PREFIX,ui64_i2n) 
  +#define ui64_s2i   UI64_CONCAT(UI64_PREFIX,ui64_s2i) 
  +#define ui64_i2s   UI64_CONCAT(UI64_PREFIX,ui64_i2s) 
  +#define ui64_add   UI64_CONCAT(UI64_PREFIX,ui64_add) 
  +#define ui64_addn  UI64_CONCAT(UI64_PREFIX,ui64_addn)
  +#define ui64_sub   UI64_CONCAT(UI64_PREFIX,ui64_sub) 
  +#define ui64_subn  UI64_CONCAT(UI64_PREFIX,ui64_subn)
  +#define ui64_mul   UI64_CONCAT(UI64_PREFIX,ui64_mul) 
  +#define ui64_muln  UI64_CONCAT(UI64_PREFIX,ui64_muln)
  +#define ui64_div   UI64_CONCAT(UI64_PREFIX,ui64_div) 
  +#define ui64_divn  UI64_CONCAT(UI64_PREFIX,ui64_divn)
  +#define ui64_and   UI64_CONCAT(UI64_PREFIX,ui64_and) 
  +#define ui64_or    UI64_CONCAT(UI64_PREFIX,ui64_or)  
  +#define ui64_xor   UI64_CONCAT(UI64_PREFIX,ui64_xor) 
  +#define ui64_not   UI64_CONCAT(UI64_PREFIX,ui64_not) 
  +#define ui64_rol   UI64_CONCAT(UI64_PREFIX,ui64_rol) 
  +#define ui64_ror   UI64_CONCAT(UI64_PREFIX,ui64_ror)  
  +#define ui64_len   UI64_CONCAT(UI64_PREFIX,ui64_len)  
  +#define ui64_cmp   UI64_CONCAT(UI64_PREFIX,ui64_cmp)
  +#endif
  +
   typedef struct {
       unsigned char x[8]; /* x_0, ..., x_7 */
   } ui64_t;

From ossp-cvs-owner@ossp.org  Mon Apr 29 21:19:49 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 26F6276363; Mon, 29 Apr 2002 21:19:49 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tai Makefile.in tai_ui64.c tai_ui64.h
Message-Id: <20020429191949.26F6276363@mail.ossp.org>
Date: Mon, 29 Apr 2002 21:19:49 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Apr-2002 21:19:49
  Branch: HEAD                             Handle: 2002042920194800

  Added files:
    ossp-pkg/tai            tai_ui64.c tai_ui64.h
  Modified files:
    ossp-pkg/tai            Makefile.in

  Log:
    embed a copy of OSSP ui64 into OSSP tai

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/tai/Makefile.in
    1.1         +583 -0     ossp-pkg/tai/tai_ui64.c
    1.1         +111 -0     ossp-pkg/tai/tai_ui64.h
  ____________________________________________________________________________

  Index: ossp-pkg/tai/Makefile.in
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 Makefile.in
  --- ossp-pkg/tai/Makefile.in	18 Apr 2002 09:10:45 -0000	1.1.1.1
  +++ ossp-pkg/tai/Makefile.in	29 Apr 2002 19:19:48 -0000	1.2
  @@ -50,7 +50,7 @@
   TRUE        = true
   
   LIB_NAME    = libtai.la
  -LIB_OBJS    = tai_lib.lo tai_format.lo tai_parse.lo tai_data.lo
  +LIB_OBJS    = tai_lib.lo tai_format.lo tai_parse.lo tai_data.lo tai_ui64.lo
   
   TST_NAME    = tai_test
   TST_OBJS    = tai_test.o ts.o
  Index: ossp-pkg/tai/tai_ui64.c
  ============================================================
  $ cvs update -p -r1.1 tai_ui64.c
  /*
  **  OSSP ui64 - 64-Bit Arithmetic
  **  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP ui64, a 64-bit arithmetic library
  **  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  ui64.c: implementation of 64-bit unsigned integer arithmetic
  */
  
  #include <string.h>
  #include <ctype.h>
  
  #include "tai_ui64.h"
  
  #define UI64_BASE   256 /* 2^8 */
  #define UI64_DIGITS 8   /* 8*8 = 64 bit */
  #define UIXX_T(n) struct { unsigned char x[n]; }
  
  /* fill an ui64_t with a sequence of a particular digit */
  #define ui64_fill(__x, __n) \
      do { int __i; \
        for (__i = 0; __i < UI64_DIGITS; __i++) \
            (__x).x[__i] = (__n); \
      } while(0)
  
  /* the value zero */
  ui64_t ui64_zero(void)
  {
      ui64_t z;
  
      ui64_fill(z, 0);
      return z;
  }
  
  /* the maximum value */
  ui64_t ui64_max(void)
  {
      ui64_t z;
  
      ui64_fill(z, UI64_BASE-1);
      return z;
  }
  
  /* convert ISO-C "unsigned long" into internal format */
  ui64_t ui64_n2i(unsigned long n)
  {
      ui64_t z;
      int i;
  
      i = 0;
      do {
          z.x[i++] = (n % UI64_BASE);
      } while ((n /= UI64_BASE) > 0 && i < UI64_DIGITS);
      for ( ; i < UI64_DIGITS; i++)
          z.x[i] = 0;
      return z;
  }
  
  /* convert internal format into ISO-C "unsigned long";
     truncates if sizeof(unsigned long) is less than UI64_DIGITS! */
  unsigned long ui64_i2n(ui64_t x)
  {
      unsigned long n;
      int i;
  
      n = 0;
      i = (int)sizeof(n);
      if (i > UI64_DIGITS)
          i = UI64_DIGITS;
      while (--i >= 0) {
          n = (n * UI64_BASE) + x.x[i];
      }
      return n;
  }
  
  /* convert string representation of arbitrary base into internal format */
  ui64_t ui64_s2i(const char *str, char **end, int base)
  {
      ui64_t z;
      const char *cp;
      int carry;
      static char map[] = {
           0,  1,  2,  3,  4,  5,  6,  7,  8,  9,             /* 0...9 */
          36, 36, 36, 36, 36, 36, 36,                         /* illegal chars */
          10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, /* A...M */
          23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, /* N...Z */
          36, 36, 36, 36, 36, 36,                             /* illegal chars */
          10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, /* a...m */
          23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35  /* m...z */
      };
      
      ui64_fill(z, 0);
      if (str == NULL || (base < 2 || base > 36))
          return z;
      cp = str;
      while (*cp != '\0' && isspace((int)(*cp)))
          cp++;
      while (   *cp != '\0' 
             && isalnum((int)(*cp)) 
             && map[(int)(*cp)-'0'] < base) {
          z = ui64_muln(z, base, &carry);
          if (carry)
              break;
          z = ui64_addn(z, map[(int)(*cp)-'0'], &carry);
          if (carry)
              break;
          cp++;
      }
      if (end != NULL)
          *end = (char *)cp;
      return z;
  }
  
  /* convert internal format into string representation of arbitrary base */
  char *ui64_i2s(ui64_t x, char *str, size_t len, int base)
  {
      static char map[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
      char c;
      int r;
      int n;
      int i, j;
  
      if (str == NULL || len < 2 || (base < 2 || base > 36))
          return NULL;
      n = ui64_len(x);
      i = 0;
  	do {
  		x = ui64_divn(x, base, &r);
  		str[i++] = map[r];
  		while (n > 1 && x.x[n-1] == 0)
  			n--;
  	} while (i < (len-1) && (n > 1 || x.x[0] != 0));
  	str[i] = '\0';
      for (j = 0; j < --i; j++) {
          c = str[j];
          str[j] = str[i];
          str[i] = c;
      }
  	return str;
  }
  
  /* addition of two ui64_t */
  ui64_t ui64_add(ui64_t x, ui64_t y, ui64_t *ov)
  {
      ui64_t z;
      int carry;
      int i;
  
      carry = 0;
      for (i = 0; i < UI64_DIGITS; i++) {
          carry += (x.x[i] + y.x[i]);
          z.x[i] = (carry % UI64_BASE);
          carry /= UI64_BASE;
      }
      if (ov != NULL)
          *ov = ui64_n2i((unsigned long)carry);
      return z;
  }
  
  /* addition of an ui64_t and a single digit */
  ui64_t ui64_addn(ui64_t x, int y, int *ov)
  {
      ui64_t z;
      int i;
  
      for (i = 0; i < UI64_DIGITS; i++) {
          y += x.x[i];
          z.x[i] = (y % UI64_BASE);
          y /= UI64_BASE;
      }
      if (ov != NULL)
          *ov = y;
      return z;
  }
  
  /* subtraction of two ui64_t */
  ui64_t ui64_sub(ui64_t x, ui64_t y, ui64_t *ov)
  {
      ui64_t z;
      int borrow;
      int i;
      int d;
  
      borrow = 0;
      for (i = 0; i < UI64_DIGITS; i++) {
          d = ((x.x[i] + UI64_BASE) - borrow - y.x[i]);
          z.x[i] = (d % UI64_BASE);
          borrow = (1 - (d/UI64_BASE));
      }
      if (ov != NULL)
          *ov = ui64_n2i((unsigned long)borrow);
      return z;
  }
  
  /* subtraction of an ui64_t and a single digit */
  ui64_t ui64_subn(ui64_t x, int y, int *ov)
  {
      ui64_t z;
      int i;
      int d;
  
      for (i = 0; i < UI64_DIGITS; i++) {
          d = (x.x[i] + UI64_BASE) - y;
          z.x[i] = (d % UI64_BASE);
          y = (1 - (d/UI64_BASE));
      }
      if (ov != NULL)
          *ov = y;
      return z;
  }
  
  /*
               7 3 2
           * 9 4 2 8
           ---------
             5 8 5 6
     +     1 4 6 4
     +   2 9 2 8
     + 6 5 8 8
     ---------------
     = 6 9 0 1 2 9 6
  */
  
  ui64_t ui64_mul(ui64_t x, ui64_t y, ui64_t *ov)
  {
      UIXX_T(UI64_DIGITS+UI64_DIGITS) zx;
      ui64_t z;
      int carry;
      int i, j;
  
      /* clear temporary result buffer */
      for (i = 0; i < (UI64_DIGITS+UI64_DIGITS); i++)
          zx.x[i] = 0;
  
      /* perform multiplication operation */
      for (i = 0; i < UI64_DIGITS; i++) {
          /* calculate partial product and immediately add to z */
          carry = 0;
          for (j = 0; j < UI64_DIGITS; j++) {
              carry += (x.x[i] * y.x[j]) + zx.x[i+j];
              zx.x[i+j] = (carry % UI64_BASE);
              carry /= UI64_BASE;
          }
          /* add carry to remaining digits in z */
          for ( ; j < UI64_DIGITS + UI64_DIGITS - i; j++) {
              carry += zx.x[i+j];
              zx.x[i+j] = (carry % UI64_BASE);
              carry /= UI64_BASE;
          }
      }
  
      /* provide result by splitting zx into z and ov */
      memcpy(z.x, zx.x, UI64_DIGITS);
      if (ov != NULL)
          memcpy((*ov).x, &zx.x[UI64_DIGITS], UI64_DIGITS);
  
      return z;
  }
  
  ui64_t ui64_muln(ui64_t x, int y, int *ov)
  {
      ui64_t z;
      int carry;
      int i;
  
      carry = 0;
      for (i = 0; i < UI64_DIGITS; i++) {
          carry += (x.x[i] * y);
          z.x[i] = (carry % UI64_BASE);
          carry /= UI64_BASE;
      }
      if (ov != NULL)
          *ov = carry;
      return z;
  }
  
  /*
    =   2078 [q]
     0615367 [x] : 296 [y]
    -0592    [dq]
    -----
    = 0233
     -0000   [dq]
     -----
     = 2336
      -2072  [dq]
      -----
      = 2647
       -2308 [dq]
       -----
       = 279 [r]
   */
  ui64_t ui64_div(ui64_t x, ui64_t y, ui64_t *ov)
  {
      ui64_t q;
      ui64_t r;
      int i;
      int n, m;
      int ovn;
      
      /* determine actual number of involved digits */
      n = ui64_len(x);
      m = ui64_len(y);
  
      if (m == 1) {
          /* simple case #1: reduceable to ui64_divn() */
          if (y.x[0] == 0) {
              /* error case: division by zero! */
              ui64_fill(q, 0);
              ui64_fill(r, 0);
          }
          else {
              q = ui64_divn(x, y.x[0], &ovn);
              ui64_fill(r, 0);
              r.x[0] = (unsigned char)ovn;
          }
  
      } else if (n < m) {
          /* simple case #2: everything is in the remainder */
          ui64_fill(q, 0);
          r = x;
  
      } else { /* n >= m, m > 1 */
          /* standard case: x[0..n] / y[0..m] */
          UIXX_T(UI64_DIGITS+1) rx;
          UIXX_T(UI64_DIGITS+1) dq;
          ui64_t t;
          int km;
          int k;
          int qk;
          unsigned long y2;
          unsigned long r3;
          int borrow;
          int d;
  
          /* rx is x with a leading zero in order to make
             sure that n > m and not just n >= m */
          memcpy(rx.x, x.x, UI64_DIGITS);
          rx.x[UI64_DIGITS] = 0;
  
          for (k = n - m; k >= 0; k--) {
              /* efficiently compute qk by guessing
                 qk := rx[k+m-2...k+m]/y[m-2...m-1] */
              km = k + m;
              y2 = (y.x[m-1]*UI64_BASE) + y.x[m-2];
              r3 = (rx.x[km]*(UI64_BASE*UI64_BASE)) + 
                   (rx.x[km-1]*UI64_BASE) + rx.x[km-2];
              qk = r3 / y2;
              if (qk >= UI64_BASE)
                  qk = UI64_BASE - 1;
  
              /* dq := y*qk (post-adjust qk if guessed incorrectly) */
              t = ui64_muln(y, qk, &ovn);
              memcpy(dq.x, t.x, UI64_DIGITS);
              dq.x[m] = (unsigned char)ovn;
              for (i = m; i > 0; i--)
                  if (rx.x[i+k] != dq.x[i])
                      break;
              if (rx.x[i+k] < dq.x[i]) {
                  t = ui64_muln(y, --qk, &ovn);
                  memcpy(dq.x, t.x, UI64_DIGITS);
                  dq.x[m] = (unsigned char)ovn;
              }
  
              /* store qk */
              q.x[k] = (unsigned char)qk;
  
              /* rx := rx - dq*(b^k) */
              borrow = 0;
              for (i = 0; i < m+1; i++) {
                  d = ((rx.x[k+i] + UI64_BASE) - borrow - dq.x[i]);
                  rx.x[k+i] = (d % UI64_BASE);
                  borrow = (1 - (d/UI64_BASE));
              }
          }
          memcpy(r.x, rx.x, m);
  
          /* fill out results with leading zeros */
          for (i = n-m+1; i < UI64_DIGITS; i++)
              q.x[i] = 0;
          for (i = m; i < UI64_DIGITS; i++)
              r.x[i] = 0;
      }
  
      /* provide results */
      if (ov != NULL)
          *ov = r;
      return q;
  }
  
  ui64_t ui64_divn(ui64_t x, int y, int *ov)
  {
      ui64_t z;
      unsigned int carry;
      int i;
  
      carry = 0;
      for (i = (UI64_DIGITS - 1); i >= 0; i--) {
          carry = (carry * UI64_BASE) + x.x[i];
          z.x[i] = (carry / y);
          carry %= y;
      }
      if (ov != NULL)
          *ov = carry;
      return z;
  }
  
  ui64_t ui64_and(ui64_t x, ui64_t y)
  {
      ui64_t z;
      int i;
  
      for (i = 0; i < UI64_DIGITS; i++)
          z.x[i] = (x.x[i] & y.x[i]);
      return z;
  }
  
  ui64_t ui64_or(ui64_t x, ui64_t y)
  {
      ui64_t z;
      int i;
  
      for (i = 0; i < UI64_DIGITS; i++)
          z.x[i] = (x.x[i] | y.x[i]);
      return z;
  }
  
  ui64_t ui64_xor(ui64_t x, ui64_t y)
  {
      ui64_t z;
      int i;
  
      for (i = 0; i < UI64_DIGITS; i++)
          z.x[i] = ((x.x[i] & ~(y.x[i])) | (~(x.x[i]) & (y.x[i])));
      return z;
  }
  
  ui64_t ui64_not(ui64_t x)
  {
      ui64_t z;
      int i;
  
      for (i = 0; i < UI64_DIGITS; i++)
          z.x[i] = ~(x.x[i]);
      return z;
  }
  
  ui64_t ui64_rol(ui64_t x, int s, ui64_t *ov)
  {
      UIXX_T(UI64_DIGITS+UI64_DIGITS) zx;
      ui64_t z;
  	int i;
      int carry;
  
      if (s <= 0) {
          /* no shift at all */
          if (ov != NULL)
              *ov = ui64_zero();
          return x;
      }
      else if (s > 64) {
          /* too large shift */
          if (ov != NULL)
              *ov = ui64_zero();
          return ui64_zero();
      }
      else if (s == 64) {
          /* maximum shift */
          if (ov != NULL)
              *ov = x;
          return ui64_zero();
      }
      else { /* regular shift */
          /* shift (logically) left by s/8 bytes */
          for (i = 0; i < UI64_DIGITS+UI64_DIGITS; i++)
              zx.x[i] = 0;
          for (i = 0; i < UI64_DIGITS; i++)
              zx.x[i+(s/8)] = x.x[i];
          /* shift (logically) left by remaining s%8 bits */
          s %= 8;
          if (s > 0) {
              carry = 0;
              for (i = 0; i < UI64_DIGITS+UI64_DIGITS; i++) {
                  carry += (zx.x[i] * (1 << s));
                  zx.x[i] = (carry % UI64_BASE);
                  carry /= UI64_BASE;
              }
          }
          memcpy(z.x, zx.x, UI64_DIGITS);
          if (ov != NULL)
              memcpy((*ov).x, &zx.x[UI64_DIGITS], UI64_DIGITS);
      }
      return z;
  }
  
  ui64_t ui64_ror(ui64_t x, int s, ui64_t *ov)
  {
      UIXX_T(UI64_DIGITS+UI64_DIGITS) zx;
      ui64_t z;
  	int i;
      int carry;
  
      if (s <= 0) {
          /* no shift at all */
          if (ov != NULL)
              *ov = ui64_zero();
          return x;
      }
      else if (s > 64) {
          /* too large shift */
          if (ov != NULL)
              *ov = ui64_zero();
          return ui64_zero();
      }
      else if (s == 64) {
          /* maximum shift */
          if (ov != NULL)
              *ov = x;
          return ui64_zero();
      }
      else { /* regular shift */
          /* shift (logically) right by s/8 bytes */
          for (i = 0; i < UI64_DIGITS+UI64_DIGITS; i++)
              zx.x[i] = 0;
          for (i = 0; i < UI64_DIGITS; i++)
              zx.x[UI64_DIGITS+i-(s/8)] = x.x[i];
          /* shift (logically) right by remaining s%8 bits */
          s %= 8;
          if (s > 0) {
              carry = 0;
              for (i = (UI64_DIGITS+UI64_DIGITS - 1); i >= 0; i--) {
                  carry = (carry * UI64_BASE) + zx.x[i];
                  zx.x[i] = (carry / (1 << s));
                  carry %= (1 << s);
              }
          }
          memcpy(z.x, &zx.x[UI64_DIGITS], UI64_DIGITS);
          if (ov != NULL)
              memcpy((*ov).x, zx.x, UI64_DIGITS);
      }
      return z;
  }
  
  int ui64_cmp(ui64_t x, ui64_t y)
  {
      int i;
  
      i = UI64_DIGITS - 1;
      while (i > 0 && x.x[i] == y.x[i])
          i--;
      return (x.x[i] - y.x[i]);
  }
  
  int ui64_len(ui64_t x)
  {
      int i;
  
      for (i = UI64_DIGITS; i > 1 && x.x[i-1] == 0; i--)
          ;
      return i;
  }
  
  Index: ossp-pkg/tai/tai_ui64.h
  ============================================================
  $ cvs update -p -r1.1 tai_ui64.h
  /*
  **  OSSP ui64 - 64-Bit Arithmetic
  **  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP ui64, a 64-bit arithmetic library
  **  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  ui64.h: API declaration
  */
  
  #ifndef __UI64_H__
  #define __UI64_H__
  
  #include <string.h>
  
  #define UI64_PREFIX tai_
  
  /* embedding support */
  #ifdef UI64_PREFIX
  #if defined(__STDC__) || defined(__cplusplus)
  #define __UI64_CONCAT(x,y) x ## y
  #define UI64_CONCAT(x,y) __UI64_CONCAT(x,y)
  #else
  #define __UI64_CONCAT(x) x
  #define UI64_CONCAT(x,y) __UI64_CONCAT(x)y
  #endif
  #define ui64_t     UI64_CONCAT(UI64_PREFIX,ui64_t)
  #define ui64_zero  UI64_CONCAT(UI64_PREFIX,ui64_zero)
  #define ui64_max   UI64_CONCAT(UI64_PREFIX,ui64_max) 
  #define ui64_n2i   UI64_CONCAT(UI64_PREFIX,ui64_n2i) 
  #define ui64_i2n   UI64_CONCAT(UI64_PREFIX,ui64_i2n) 
  #define ui64_s2i   UI64_CONCAT(UI64_PREFIX,ui64_s2i) 
  #define ui64_i2s   UI64_CONCAT(UI64_PREFIX,ui64_i2s) 
  #define ui64_add   UI64_CONCAT(UI64_PREFIX,ui64_add) 
  #define ui64_addn  UI64_CONCAT(UI64_PREFIX,ui64_addn)
  #define ui64_sub   UI64_CONCAT(UI64_PREFIX,ui64_sub) 
  #define ui64_subn  UI64_CONCAT(UI64_PREFIX,ui64_subn)
  #define ui64_mul   UI64_CONCAT(UI64_PREFIX,ui64_mul) 
  #define ui64_muln  UI64_CONCAT(UI64_PREFIX,ui64_muln)
  #define ui64_div   UI64_CONCAT(UI64_PREFIX,ui64_div) 
  #define ui64_divn  UI64_CONCAT(UI64_PREFIX,ui64_divn)
  #define ui64_and   UI64_CONCAT(UI64_PREFIX,ui64_and) 
  #define ui64_or    UI64_CONCAT(UI64_PREFIX,ui64_or)  
  #define ui64_xor   UI64_CONCAT(UI64_PREFIX,ui64_xor) 
  #define ui64_not   UI64_CONCAT(UI64_PREFIX,ui64_not) 
  #define ui64_rol   UI64_CONCAT(UI64_PREFIX,ui64_rol) 
  #define ui64_ror   UI64_CONCAT(UI64_PREFIX,ui64_ror)  
  #define ui64_len   UI64_CONCAT(UI64_PREFIX,ui64_len)  
  #define ui64_cmp   UI64_CONCAT(UI64_PREFIX,ui64_cmp)
  #endif
  
  typedef struct {
      unsigned char x[8]; /* x_0, ..., x_7 */
  } ui64_t;
  
  /* particular values */
  extern ui64_t        ui64_zero (void);
  extern ui64_t        ui64_max  (void);
  
  /* import and export via ISO-C "unsigned long" */
  extern ui64_t        ui64_n2i  (unsigned long n);
  extern unsigned long ui64_i2n  (ui64_t x);
  
  /* import and export via ISO-C string of arbitrary base */
  extern ui64_t        ui64_s2i  (const char *str, char **end, int base);
  extern char *        ui64_i2s  (ui64_t x, char *str, size_t len, int base);
  
  /* arithmetical operations */
  extern ui64_t        ui64_add  (ui64_t x, ui64_t y, ui64_t *ov);
  extern ui64_t        ui64_addn (ui64_t x, int    y, int    *ov);
  extern ui64_t        ui64_sub  (ui64_t x, ui64_t y, ui64_t *ov);
  extern ui64_t        ui64_subn (ui64_t x, int    y, int    *ov);
  extern ui64_t        ui64_mul  (ui64_t x, ui64_t y, ui64_t *ov);
  extern ui64_t        ui64_muln (ui64_t x, int    y, int    *ov);
  extern ui64_t        ui64_div  (ui64_t x, ui64_t y, ui64_t *ov);
  extern ui64_t        ui64_divn (ui64_t x, int    y, int    *ov);
  
  /* bit operations */
  extern ui64_t        ui64_and  (ui64_t x, ui64_t y);
  extern ui64_t        ui64_or   (ui64_t x, ui64_t y);
  extern ui64_t        ui64_xor  (ui64_t x, ui64_t y);
  extern ui64_t        ui64_not  (ui64_t x);
  extern ui64_t        ui64_rol  (ui64_t x, int s, ui64_t *ov);
  extern ui64_t        ui64_ror  (ui64_t x, int s, ui64_t *ov);
  
  /* other operations */
  extern int           ui64_len  (ui64_t x);
  extern int           ui64_cmp  (ui64_t x, ui64_t y);
  
  #endif /* __UI64_H__ */
  

From ossp-cvs-owner@ossp.org  Mon Apr 29 21:24:42 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id ECAF876363; Mon, 29 Apr 2002 21:24:41 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tai tai_lib.c tai_p.h
Message-Id: <20020429192441.ECAF876363@mail.ossp.org>
Date: Mon, 29 Apr 2002 21:24:41 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Apr-2002 21:24:41
  Branch: HEAD                             Handle: 2002042920244100

  Modified files:
    ossp-pkg/tai            tai_lib.c tai_p.h

  Log:
    move to correct position and start with ui64_t integration

  Summary:
    Revision    Changes     Path
    1.3         +0  -20     ossp-pkg/tai/tai_lib.c
    1.2         +18 -0      ossp-pkg/tai/tai_p.h
  ____________________________________________________________________________

  Index: ossp-pkg/tai/tai_lib.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 tai_lib.c
  --- ossp-pkg/tai/tai_lib.c	24 Apr 2002 09:07:24 -0000	1.2
  +++ ossp-pkg/tai/tai_lib.c	29 Apr 2002 19:24:41 -0000	1.3
  @@ -37,26 +37,6 @@
   #include "tai.h"
   #include "tai_p.h"
   
  -struct tai_st {
  -    int    tai_sec;    /* seconds after the minute [0-61] */
  -    int    tai_min;    /* minutes after the hour [0-59] */
  -    int    tai_hour;   /* hours since midnight [0-23] */
  -    int    tai_mday;   /* day of the month [1-31] */
  -    int    tai_mon;    /* months since January [0-11] */
  -    int    tai_year;   /* years since 1900 */
  -    int    tai_wday;   /* days since Sunday [0-6] */
  -    int    tai_yday;   /* days since January 1 [0-365] */
  -    int    tai_isdst;  /* Daylight Savings Time flag */
  -    long   tai_gmtoff; /* offset from CUT in seconds */
  -    char  *tai_zone;   /* timezone abbreviation */
  -#if 0
  -    int sign;
  -    unsigned long long sec;
  -    unsigned long nsec;
  -    unsigned long asec;
  -#endif
  -};
  -
   tai_rc_t tai_create(tai_t **ptai)
   {
       tai_t *tai;
  Index: ossp-pkg/tai/tai_p.h
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 tai_p.h
  --- ossp-pkg/tai/tai_p.h	18 Apr 2002 09:10:45 -0000	1.1.1.1
  +++ ossp-pkg/tai/tai_p.h	29 Apr 2002 19:24:41 -0000	1.2
  @@ -32,6 +32,24 @@
   #include <time.h>
   
   #include "config.h"
  +#include "tai_ui64.h"
  +
  +struct tai_st {
  +    tai_ui64_t sec;    /* seconds (integral part) */
  +    tai_ui64_t asec;   /* atto-seconds (fractional part) */
  +    /* FIXME: obsolete stuff */
  +    int    tai_sec;    /* seconds after the minute [0-61] */
  +    int    tai_min;    /* minutes after the hour [0-59] */
  +    int    tai_hour;   /* hours since midnight [0-23] */
  +    int    tai_mday;   /* day of the month [1-31] */
  +    int    tai_mon;    /* months since January [0-11] */
  +    int    tai_year;   /* years since 1900 */
  +    int    tai_wday;   /* days since Sunday [0-6] */
  +    int    tai_yday;   /* days since January 1 [0-365] */
  +    int    tai_isdst;  /* Daylight Savings Time flag */
  +    long   tai_gmtoff; /* offset from CUT in seconds */
  +    char  *tai_zone;   /* timezone abbreviation */
  +};
   
   /*
    * Private header file for the strftime and strptime localization

From ossp-cvs-owner@ossp.org  Wed May  1 20:48:35 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2BEB476365; Wed,  1 May 2002 20:48:35 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tai Makefile.in tai_cal.c tai_lib.c tai_p.h tai_t...
Message-Id: <20020501184835.2BEB476365@mail.ossp.org>
Date: Wed,  1 May 2002 20:48:35 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-May-2002 20:48:35
  Branch: HEAD                             Handle: 2002050119483400

  Added files:
    ossp-pkg/tai            tai_cal.c
  Modified files:
    ossp-pkg/tai            Makefile.in tai_lib.c tai_p.h tai_test.c

  Log:
    flush todays work

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/tai/Makefile.in
    1.1         +154 -0     ossp-pkg/tai/tai_cal.c
    1.4         +8  -1      ossp-pkg/tai/tai_lib.c
    1.3         +4  -0      ossp-pkg/tai/tai_p.h
    1.2         +13 -0      ossp-pkg/tai/tai_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/tai/Makefile.in
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 Makefile.in
  --- ossp-pkg/tai/Makefile.in	29 Apr 2002 19:19:48 -0000	1.2
  +++ ossp-pkg/tai/Makefile.in	1 May 2002 18:48:34 -0000	1.3
  @@ -50,7 +50,7 @@
   TRUE        = true
   
   LIB_NAME    = libtai.la
  -LIB_OBJS    = tai_lib.lo tai_format.lo tai_parse.lo tai_data.lo tai_ui64.lo
  +LIB_OBJS    = tai_lib.lo tai_format.lo tai_parse.lo tai_data.lo tai_cal.lo tai_ui64.lo
   
   TST_NAME    = tai_test
   TST_OBJS    = tai_test.o ts.o
  Index: ossp-pkg/tai/tai_cal.c
  ============================================================
  $ cvs update -p -r1.1 tai_cal.c
  /*
  **  OSSP tai - Time Handling
  **  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP tai, a time handling library
  **  which can be found at http://www.ossp.org/pkg/lib/tai/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  tai_calendar.c: calendar calculations
  */
  
  #include "tai.h"
  #include "tai_p.h"
  
  #if 0
  struct leap {
      tai_ui64_t leapsec;
  } tai_tab_leapsec[] = {
      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 1972 Jun 30 23:59:60 + */
      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 1972 Dec 31 23:59:60 + */
      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 1973 Dec 31 23:59:60 + */
      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 1974 Dec 31 23:59:60 + */
      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 1975 Dec 31 23:59:60 + */
      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 1976 Dec 31 23:59:60 + */
      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 1977 Dec 31 23:59:60 + */
      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 1978 Dec 31 23:59:60 + */
      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 1979 Dec 31 23:59:60 + */
      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 1981 Jun 30 23:59:60 + */
      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 1982 Jun 30 23:59:60 + */
      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 1983 Jun 30 23:59:60 + */
      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 1985 Jun 30 23:59:60 + */
      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 1987 Dec 31 23:59:60 + */
      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 1989 Dec 31 23:59:60 + */
      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 1990 Dec 31 23:59:60 + */
      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 1992 Jun 30 23:59:60 + */
      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 1993 Jun 30 23:59:60 + */
      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 1994 Jun 30 23:59:60 + */
      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 1995 Dec 31 23:59:60 + */
      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 1997 Jun 30 23:59:60 + */
      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }  /* 1998 Dec 31 23:59:60 + */
  };
  #endif
  
  #define TAI_CAL_SUNDAY       0
  #define TAI_CAL_MONDAY       1
  #define TAI_CAL_TUESDAY      2
  #define TAI_CAL_WEDNESDAY    3
  #define TAI_CAL_THURSDAY     4
  #define TAI_CAL_FRIDAY       5
  #define TAI_CAL_SATURDAY     6
  
  #define TAI_CAL_JANUARY      0
  #define TAI_CAL_FEBRUARY     1
  #define TAI_CAL_MARCH        2
  #define TAI_CAL_APRIL        3
  #define TAI_CAL_MAY          4
  #define TAI_CAL_JUNE         5
  #define TAI_CAL_JULY         6
  #define TAI_CAL_AUGUST       7
  #define TAI_CAL_SEPTEMBER    8
  #define TAI_CAL_OCTOBER      9
  #define TAI_CAL_NOVEMBER     10
  #define TAI_CAL_DECEMBER     11
  
  #define TAI_EPOCH "9223372036854775808" /* 2^62 / 2 (=2^63) meaning 1972-01-01 00:00:00 UTC was 1972-01-01 00:00:10 TAI */
  #define TAI_EPOCH_YEAR      1970
  #define TAI_EPOCH_WDAY      TAI_CAL_THURSDAY
  
  /* the Gregorian calendar */
  #define TAI_CAL_SECS_PER_MIN      60
  #define TAI_CAL_MINS_PER_HOUR     60
  #define TAI_CAL_HOURS_PER_DAY     24
  #define TAI_CAL_DAYS_PER_WEEK     7
  #define TAI_CAL_DAYS_PER_NYEAR    365
  #define TAI_CAL_DAYS_PER_LYEAR    366
  #define TAI_CAL_SECS_PER_HOUR     (TAI_CAL_SECS_PER_MIN * TAI_CAL_MINS_PER_HOUR)
  #define TAI_CAL_SECS_PER_DAY      (TAI_CAL_SECS_PER_HOUR * TAI_CAL_HOURS_PER_DAY)
  #define TAI_CAL_MONS_PER_YEAR     12
  
  #define isleap(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0))
  
  tai_rc_t tai_tai2cal(tai_t *tai, int offset)
  {
      tai_ui64_t secs;
      tai_ui64_t days;
      tai_ui64_t rem;
      tai_ui64_t tmp;
      tai_ui64_t tmp2;
      int lshit;
  
      secs = tai->sec;
  
      /* perform leap second correction */
      lshit = 0; /* FIXME */
  
      /* perform timezone offset correction */
      secs = tai_ui64_addn(secs, offset, NULL);
  
      /* days = secs / TAI_CAL_SECS_PER_DAY
         rem  = secs % TAI_CAL_SECS_PER_DAY */
      tmp  = tai_ui64_n2i(TAI_CAL_SECS_PER_DAY);
      days = tai_ui64_div(secs, tmp, &rem);
  
      /* hour = rem / TAI_CAL_SECS_PER_HOUR
         rem  = rem % TAI_CAL_SECS_PER_HOUR */
      tmp  = tai_ui64_n2i(TAI_CAL_SECS_PER_HOUR);
      tmp = tai_ui64_div(rem, tmp, &rem);
      tai->tai_hour = (int)tai_ui64_i2n(tmp);
  
      /* min = rem / TAI_CAL_SECS_PER_MIN
         rem = rem % TAI_CAL_SECS_PER_MIN */
      tmp  = tai_ui64_n2i(TAI_CAL_SECS_PER_MIN);
      tmp = tai_ui64_div(rem, tmp, &rem);
      tai->tai_min = (int)tai_ui64_i2n(tmp);
  
      /* sec = rem + lshit */
      tai->tai_sec = (int)tai_ui64_i2n(rem) + lshit;
  
      /* wday = (TAI_EPOCH_WDAY + days) % TAI_CAL_DAYS_PER_WEEK */
      /* FIXME: TAI is not 0 on EPOCH */
      tmp = tai_ui64_addn(days, TAI_EPOCH_WDAY, NULL);
      tmp2 = tai_ui64_n2i(TAI_CAL_DAYS_PER_WEEK);
      tai_ui64_div(tmp, tmp2, &tmp);
      tai->tai_wday = (int)tai_ui64_i2n(tmp);
  
      tai->tai_gmtoff = (long)offset;
      
      return TAI_OK;
  }
  
  tai_rc_t tai_cal2tai(tai_t *tai)
  {
      return TAI_OK;
  }
  
  Index: ossp-pkg/tai/tai_lib.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 tai_lib.c
  --- ossp-pkg/tai/tai_lib.c	29 Apr 2002 19:24:41 -0000	1.3
  +++ ossp-pkg/tai/tai_lib.c	1 May 2002 18:48:34 -0000	1.4
  @@ -25,7 +25,7 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  tm.c: API implementation
  +**  tai_lib.c: API implementation
   */
   
   #include <stdio.h>
  @@ -126,6 +126,13 @@
               tai->tai_zone = strdup("");
           else
               tai->tai_zone = strdup(stm->tm_zone);
  +    }
  +    else if (type == TAI_TYPE_UNIX) {
  +        /* import from time(3) FIXME */
  +        time_t t = time(NULL);
  +        tai->sec  = tai_ui64_n2i((unsigned long)t);
  +        tai->asec = tai_ui64_n2i((unsigned long)0);
  +        tai_tai2cal(tai, 7200);
       }
       else
           return TAI_ERR_IMP; /* FIXME */
  Index: ossp-pkg/tai/tai_p.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 tai_p.h
  --- ossp-pkg/tai/tai_p.h	29 Apr 2002 19:24:41 -0000	1.2
  +++ ossp-pkg/tai/tai_p.h	1 May 2002 18:48:34 -0000	1.3
  @@ -32,6 +32,7 @@
   #include <time.h>
   
   #include "config.h"
  +#include "tai.h"
   #include "tai_ui64.h"
   
   struct tai_st {
  @@ -77,5 +78,8 @@
   
   size_t  tai_format_int(char *const s, const size_t maxsize, const char *const format, const struct tm *const t);
   char   *tai_parse_int (const char *buf, const char *fmt, struct tm *tm);
  +
  +tai_rc_t tai_tai2cal(tai_t *tai, int offset);
  +tai_rc_t tai_cal2tai(tai_t *tai);
   
   #endif /* !_TIMELOCAL_H_ */
  Index: ossp-pkg/tai/tai_test.c
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 tai_test.c
  --- ossp-pkg/tai/tai_test.c	18 Apr 2002 09:10:45 -0000	1.1.1.1
  +++ ossp-pkg/tai/tai_test.c	1 May 2002 18:48:34 -0000	1.2
  @@ -36,6 +36,18 @@
   #include "ts.h"
   #include "tai.h"
   
  +TS_TEST(test_calendar)
  +{
  +    tai_t *tai;
  +    char out[1024];
  +
  +    ts_test_check(TS_CTX, "calendar calculations");
  +    tai_create(&tai);
  +    tai_import(tai, TAI_TYPE_UNIX);
  +    tai_format(tai, out, sizeof(out), "%a %Y-%m-%d %H:%M:%S %z");
  +    fprintf(stdout, "\n<%s>\n", out);
  +    tai_destroy(tai);
  +}
   TS_TEST(test_object)
   {
       tai_t *tm;
  @@ -127,6 +139,7 @@
       int n;
   
       ts = ts_suite_new("OSSP tai (Time Handling)");
  +    ts_suite_test(ts, test_calendar,     "calendar calculations");
       ts_suite_test(ts, test_object,       "object handling");
       ts_suite_test(ts, test_importexport, "time import/export");
       ts_suite_test(ts, test_parsing,      "time parsing");

From ossp-cvs-owner@ossp.org  Tue May  7 14:58:21 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8F02676365; Tue,  7 May 2002 14:58:21 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea.cgi
Message-Id: <20020507125821.8F02676365@mail.ossp.org>
Date: Tue,  7 May 2002 14:58:21 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   07-May-2002 14:58:21
  Branch: HEAD                             Handle: 2002050713582100

  Modified files:
    ossp-pkg/tabea          tabea.cgi

  Log:
    flush RSE & PS work

  Summary:
    Revision    Changes     Path
    1.6         +94 -36     ossp-pkg/tabea/tabea.cgi
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea.cgi
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 tabea.cgi
  --- ossp-pkg/tabea/tabea.cgi	16 Apr 2002 12:09:46 -0000	1.5
  +++ ossp-pkg/tabea/tabea.cgi	7 May 2002 12:58:21 -0000	1.6
  @@ -43,48 +43,106 @@
   $MY->{TEMPLATE} .= $_ while (<$fh>);
   $fh->close();
   
  -
   #   establish CGI query object
  -my $Q = new CGI;
  +my $cgi = new CGI;
  +
  +#   activate a general error handler
  +$SIG{__DIE__} = sub {
  +    my ($err) = @_;
  +
  +    #$err =~ s|at\s+\S+\s+line\s+(\d+)|(line $1)|s;
  +    $err =~ s|\n|<br>\n|sg;
  +    print STDOUT $cgi->header(-expires => '+1s') .
  +        "<title>Tabea :: ERROR</title>",
  +        "<h1>Tabea :: ERROR</h1>\n" .
  +        "<pre>$err</pre>\n";
  +    exit(0);
  +};
  +
  +
  +#   fetch parameters
  +my $form     = $cgi->param("form")     || "";
  +my $username = $cgi->param("username") || "";
  +my $password = $cgi->param("password") || "";
  +
  +#   update cookies
  +my $cookies = [];
  +foreach my $param (qw(username)) { # FIXME!
  +    if ($cgi->param($param) ne '' and ($cgi->param($param) ne $cgi->cookie($param))) {
  +        push(@{$cookies}, $cgi->cookie(
  +             -name    => $param,
  +             -value   => $cgi->param($param),
  +             -expires => '+1d',
  +             -path    => $cgi->url(-absolute => 1),
  +             -secure  => 0
  +        ));
  +    }
  +    if ($cgi->param($param) eq '' and $cgi->cookie($param) ne '') {
  +         $cgi->param(-name => $param, -value => [$cgi->cookie($param)]);
  +    }
  +}
  +
  +sub validpassword {
  +    my ($username, $password) = @_;
  +    return "";
  +}
   
   my $page = '';
  -$page .= "fuck";
  -my $page2 ='';
  -$page2 .= "Welcher auch";
  +
  +if ($form eq '') {
  +    $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1)) .
  +        $cgi->hidden(-name => 'form', -default => ['login']) .
  +        "<table cellspacing=0 cellpadding=0>" .
  +        "  <tr>" .
  +        "    <td>Username:</td>" .
  +        "    <td>" .
  +        $cgi->textfield(
  +            -name => 'username',
  +            -default => $username,
  +            -size => 20,
  +            -maxlength => 8
  +        ) .
  +        "    </td>" .
  +        "  </tr>" .
  +        "  <tr>" .
  +        "    <td>Password:</td>" .
  +        "    <td>" .
  +        $cgi->password_field(
  +            -name => 'password',
  +            -value => $password,
  +            -size => 20,
  +            -maxlength => 80
  +        ) .
  +        "    </td>" .
  +        "  </tr>" .
  +        "  <tr>" .
  +        "    <td colspan=2 align=right>" .
  +        $cgi->reset() .
  +        $cgi->submit(-name => 'dialog', -value => 'Login') .
  +        "    </td>" .
  +        "  </tr>" .
  +        "</table>" .
  +        $cgi->endform;
  +}
  +elsif ($form eq 'login') {
  +    #   enter Select form
  +    # &validpassword($username, $password) || print STDOUT $cgi->redirect(-uri => $cgi->url(-full => 1), -type => "text/html");
  +    $page .= "Dialog:   ".$cgi->param("dialog") ."<br>\n";
  +    $page .= "Username: ".$cgi->param("username") ."<br>\n";
  +    $page .= "Password: ".$cgi->param("password") ."<br>\n";
  +}
  +elsif ($form eq 'select') {
  +    #   enter Edit form
  +    &validpassword($username, $password) || print STDOUT $cgi->redirect(-uri => $cgi->url(-full => 1), -type => "text/html");
  +}
  +else {
  +    die "invalid form \"$form\"";
  +}
   
   my $out = $MY->{TEMPLATE};
   $out =~ s|%%BODY%%|$page|s;
  -$out =~ s|%%TITLE%%|$page2|s;
  -
  -
  -
  - #   generate "ADD" form
  - $out .= $Q->startform( -method => "POST", -action => $Q->url()) .
  -          "<tr bgcolor=\"#9999cc\">\n" .
  -#          "<td align=right>" .
  -#          "<b>" . $Q->submit(-name => 'form', -value => 'Add') . "</b>" .
  -#          "</td>" .
  -          "<td>" .
  -          "Username:" .
  -          $Q->textfield(
  -              -name => 'username',
  -              -default => '',
  -              -size => 20,
  -              -maxlength => 80
  -           ) .
  -          "<td>" .
  -          "<p>&#013</p>" .
  -          "</td>" .
  -          "Password:" .
  -          $Q->textfield(
  -              -name => 'password',
  -              -default => '',
  -              -size => 20,
  -              -maxlength => 80
  -           ) .
  -          "</td>" .
  -         $Q->endform;
  +$out =~ s|%%TITLE%%|Test|s;
   
  -print $Q->header(-expires => '+1s') . $out;
  +print $cgi->header(-cookie => $cookies, -expires => '+1s') . $out;
   
   exit (0);

From ossp-cvs-owner@ossp.org  Tue May  7 16:30:56 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6649C76365; Tue,  7 May 2002 16:30:56 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea.cgi
Message-Id: <20020507143056.6649C76365@mail.ossp.org>
Date: Tue,  7 May 2002 16:30:56 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   07-May-2002 16:30:56
  Branch: HEAD                             Handle: 2002050715305600

  Modified files:
    ossp-pkg/tabea          tabea.cgi

  Log:
    Appended password checking

  Summary:
    Revision    Changes     Path
    1.7         +30 -3      ossp-pkg/tabea/tabea.cgi
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea.cgi
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 tabea.cgi
  --- ossp-pkg/tabea/tabea.cgi	7 May 2002 12:58:21 -0000	1.6
  +++ ossp-pkg/tabea/tabea.cgi	7 May 2002 14:30:56 -0000	1.7
  @@ -35,6 +35,8 @@
   
   $|++;
   
  +my $pwdfile = "./tabea.pw";
  +
   # establish my configuration
   my $MY = {};
   $MY->{PROGNAME} = ($0 =~ m|^.*?([^/]+?)(?:\.[^/.]+)?$|)[0];
  @@ -82,10 +84,35 @@
       }
   }
   
  +########################################################################################
   sub validpassword {
  +########################################################################################
       my ($username, $password) = @_;
  -    return "";
  +
  +    my $returnvalue = 0;
  +    my $uname;
  +    my $pwd;
  +    my $pwdin;
  + 
  +    $pwdin = IO::File->new("<$pwdfile");
  +    if(defined $pwdin) {
  +        while(<$pwdin>) {
  +            $_ =~ s|^(\w+):(\w+)$|{$uname=$1; $pwd=$2}|eg;
  +            ( $uname =~ $username ) && do {     # check the password
  +                print "Checking password : ";
  +                if (crypt($password, $pwd) eq $pwd){
  +                    $returnvalue = 1;
  +                }
  +            }
  +        }
  +    }
  +
  +    $pwdin->close();
  +
  +    return $returnvalue;
   }
  +########################################################################################
  +
   
   my $page = '';
   
  @@ -126,14 +153,14 @@
   }
   elsif ($form eq 'login') {
       #   enter Select form
  -    # &validpassword($username, $password) || print STDOUT $cgi->redirect(-uri => $cgi->url(-full => 1), -type => "text/html");
  +    &validpassword($username, $password, $pwdfile) || print STDOUT $cgi->redirect(-uri => $cgi->url(-full => 1), -type => "text/html");
       $page .= "Dialog:   ".$cgi->param("dialog") ."<br>\n";
       $page .= "Username: ".$cgi->param("username") ."<br>\n";
       $page .= "Password: ".$cgi->param("password") ."<br>\n";
   }
   elsif ($form eq 'select') {
       #   enter Edit form
  -    &validpassword($username, $password) || print STDOUT $cgi->redirect(-uri => $cgi->url(-full => 1), -type => "text/html");
  +    &validpassword($username, $password, $pwdfile) || print STDOUT $cgi->redirect(-uri => $cgi->url(-full => 1), -type => "text/html");
   }
   else {
       die "invalid form \"$form\"";

From ossp-cvs-owner@ossp.org  Wed May  8 09:38:19 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1874B76365; Wed,  8 May 2002 09:38:19 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea.cgi
Message-Id: <20020508073819.1874B76365@mail.ossp.org>
Date: Wed,  8 May 2002 09:38:19 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   08-May-2002 09:38:18
  Branch: HEAD                             Handle: 2002050808381800

  Modified files:
    ossp-pkg/tabea          tabea.cgi

  Log:
    Removed unneeded print statement

  Summary:
    Revision    Changes     Path
    1.8         +39 -4      ossp-pkg/tabea/tabea.cgi
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea.cgi
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 tabea.cgi
  --- ossp-pkg/tabea/tabea.cgi	7 May 2002 14:30:56 -0000	1.7
  +++ ossp-pkg/tabea/tabea.cgi	8 May 2002 07:38:18 -0000	1.8
  @@ -99,7 +99,6 @@
           while(<$pwdin>) {
               $_ =~ s|^(\w+):(\w+)$|{$uname=$1; $pwd=$2}|eg;
               ( $uname =~ $username ) && do {     # check the password
  -                print "Checking password : ";
                   if (crypt($password, $pwd) eq $pwd){
                       $returnvalue = 1;
                   }
  @@ -153,10 +152,46 @@
   }
   elsif ($form eq 'login') {
       #   enter Select form
  +    
       &validpassword($username, $password, $pwdfile) || print STDOUT $cgi->redirect(-uri => $cgi->url(-full => 1), -type => "text/html");
  -    $page .= "Dialog:   ".$cgi->param("dialog") ."<br>\n";
  -    $page .= "Username: ".$cgi->param("username") ."<br>\n";
  -    $page .= "Password: ".$cgi->param("password") ."<br>\n";
  +#
  +     $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1)) .
  +        $cgi->hidden(-name => 'form', -default => ['']) .
  +         
  +#        "<table cellspacing=0 cellpadding=0>" .
  +#        "  <tr>" . 
  +#        "    <td>Username:</td>" .
  +#        "    <td>" . 
  +#        $cgi->textfield(
  +#            -name => 'username',
  +#            -default => $username,
  +#            -size => 20,
  +#            -maxlength => 8
  +#        ) .
  +#        "    </td>" .
  +#        "  </tr>" .
  +#        "  <tr>" . 
  +#        "    <td>Password:</td>" .
  +#        "    <td>" . 
  +#        $cgi->password_field(
  +#            -name => 'password',
  +#            -value => $password,
  +#            -size => 20,
  +#            -maxlength => 80
  +#        ) .
  +#        "    </td>" .
  +#        "  </tr>" .
  +#        "  <tr>" . 
  +#        "    <td colspan=2 align=right>" .
  +#        $cgi->reset() .
  +#        $cgi->submit(-name => 'dialog', -value => 'Login') .
  +#        "    </td>" .
  +#        "  </tr>" .
  +#        "</table>" .
  +#        $cgi->endform;        print "$pwd\n";
  +#    $page .= "Dialog:   ".$cgi->param("dialog") ."<br>\n";
  +#    $page .= "Username: ".$cgi->param("username") ."<br>\n";
  +#    $page .= "Password: ".$cgi->param("password") ."<br>\n";
   }
   elsif ($form eq 'select') {
       #   enter Edit form

From ossp-cvs-owner@ossp.org  Wed May  8 15:30:36 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EB4B576365; Wed,  8 May 2002 15:30:35 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea/tabea.d default ossp-pkg/tabea/tabea.d/ps s...
Message-Id: <20020508133035.EB4B576365@mail.ossp.org>
Date: Wed,  8 May 2002 15:30:35 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   08-May-2002 15:30:35
  Branch: HEAD                             Handle: 197001010100001020861035

  Added files:
    ossp-pkg/tabea/tabea.d/ps sample.cfg
    ossp-pkg/tabea/tabea.d/tabea
                            default sample
  Removed files:
    ossp-pkg/tabea/tabea.d  default sample

  Log:
    Changed structure configuration directory tabea.d

  Summary:
    Revision    Changes     Path
    NONE        +0  -3      ossp-pkg/tabea/tabea.d/default
    1.1         +73 -0      ossp-pkg/tabea/tabea.d/ps/sample.cfg
    NONE        +0  -73     ossp-pkg/tabea/tabea.d/sample
    1.1         +3  -0      ossp-pkg/tabea/tabea.d/tabea/default
    1.1         +73 -0      ossp-pkg/tabea/tabea.d/tabea/sample
  ____________________________________________________________________________

    Index: ossp-pkg/tabea/tabea.d/ps/sample.cfg
  ============================================================
  $ cvs update -p -r1.1 sample.cfg
  ##
  ##  js_default.conf -- Default JumpStart Configuration
  ##
  
  #   network parameters during installation
  js_net_hostname              unknown.setup.de.cw.net
  js_net_domainname            setup.de.cw.net
  js_net_ipaddr                192.168.1.2
  js_net_netmask               255.255.255.0
  js_net_defaultrouter         192.168.1.2
  js_net_nameserver            195.27.176.147 194.221.217.148
  
  #   network parameters after installation
  net_hostname                 anyone.as.de.cw.net
  net_domainname               as.de.cw.net
  net_ipaddr                   141.1.24.100
  net_netmask                  255.255.255.0
  net_defaultrouter            141.1.24.1
  net_nameserver               195.27.176.147 194.221.217.148
  
  #   hardware ethernet parameters
  hw_eth_addr                  00:00:00:00:00:00
  hw_eth_speed                 100
  hw_eth_duplex                full
  
  #   hardware disk parameters
  hw_disk_devices              0:c0t0d0 1:c0t1d0
  hw_disk_slices               0+s0:128:/            \
                               0+s1:1024:swap        \
                               0+s2:all:overlap      \
                               0+s3:1024:/var        \
                               0+s4:4096:/usr        \
                               0+s5:16:metadb        \
                               0+s6:2048:/d1         \
                               0+s7:free:/d2         \
                               1+s0:128:mirror 0+s0  \
                               1+s1:1024:mirror 0+s1 \
                               1+s2:all:overlap      \
                               1+s3:1024:mirror 0+s3 \
                               1+s4:4096:mirror 0+s4 \
                               1+s5:16:metadb        \
                               1+s6:2048:mirror 0+s6 \
                               1+s7:free:mirror 0+s7
  
  #   installation parts
  install_solaris_oe           yes
  install_solaris_patches      yes
  install_solaris_disksuite    yes
  install_solaris_encryption   yes
  install_solaris_andirand     yes
  install_solaris_cwdetasks    yes
  install_openpkg              yes
  
  solaris_oe_pkg_inc           SUNWCall
  solaris_oe_pkg_exc           SUNWCdial SUNWCdtrun SUNWCdtusr SUNWCdtdev SUNWCfs \
                               SUNWCgrap SUNWCirf   SUNWCiof   SUNWCkcms  SUNWCpmow \
                               SUNWCxil  SUNWCpm    SUNWCpmx   SUNWCpmow 
  
  openpkg_release              CURRENT
  openpkg_pkg_bin              gcc make
  openpkg_pkg_src              gzip bzip2 tar \
                               bash vim screen shtool \
                               pcre zlib openssl openssh ntp
  
  solaris_oe_service_inc       -
  solaris_oe_service_exc       apache autofs initpcmcia cachefs.rooti perf llc2 pppd \
                               asppp uucp ldapclient autoinstall xntpd nscd slpd lp spc \
                               power bdconfig volmgt chacheos.finish rpc nfs.client \
                               sendmail wbem dtlogin nfs.server dhcp snmpdx dmi mipagent
  
  js_root_pw                   foobar
  js_final_shutdown            reboot
  
    Index: ossp-pkg/tabea/tabea.d/tabea/default
  ============================================================
  $ cvs update -p -r1.1 default
  
  
  
  Index: ossp-pkg/tabea/tabea.d/tabea/sample
  ============================================================
  $ cvs update -p -r1.1 sample
  ##
  ##  js_default.conf -- Default JumpStart Configuration
  ##
  
  #   network parameters during installation
  js_net_hostname              unknown.setup.de.cw.net
  js_net_domainname            setup.de.cw.net
  js_net_ipaddr                192.168.1.2
  js_net_netmask               255.255.255.0
  js_net_defaultrouter         192.168.1.2
  js_net_nameserver            195.27.176.147 194.221.217.148
  
  #   network parameters after installation
  net_hostname                 anyone.as.de.cw.net
  net_domainname               as.de.cw.net
  net_ipaddr                   141.1.24.100
  net_netmask                  255.255.255.0
  net_defaultrouter            141.1.24.1
  net_nameserver               195.27.176.147 194.221.217.148
  
  #   hardware ethernet parameters
  hw_eth_addr                  00:00:00:00:00:00
  hw_eth_speed                 100
  hw_eth_duplex                full
  
  #   hardware disk parameters
  hw_disk_devices              0:c0t0d0 1:c0t1d0
  hw_disk_slices               0+s0:128:/            \
                               0+s1:1024:swap        \
                               0+s2:all:overlap      \
                               0+s3:1024:/var        \
                               0+s4:4096:/usr        \
                               0+s5:16:metadb        \
                               0+s6:2048:/d1         \
                               0+s7:free:/d2         \
                               1+s0:128:mirror 0+s0  \
                               1+s1:1024:mirror 0+s1 \
                               1+s2:all:overlap      \
                               1+s3:1024:mirror 0+s3 \
                               1+s4:4096:mirror 0+s4 \
                               1+s5:16:metadb        \
                               1+s6:2048:mirror 0+s6 \
                               1+s7:free:mirror 0+s7
  
  #   installation parts
  install_solaris_oe           yes
  install_solaris_patches      yes
  install_solaris_disksuite    yes
  install_solaris_encryption   yes
  install_solaris_andirand     yes
  install_solaris_cwdetasks    yes
  install_openpkg              yes
  
  solaris_oe_pkg_inc           SUNWCall
  solaris_oe_pkg_exc           SUNWCdial SUNWCdtrun SUNWCdtusr SUNWCdtdev SUNWCfs \
                               SUNWCgrap SUNWCirf   SUNWCiof   SUNWCkcms  SUNWCpmow \
                               SUNWCxil  SUNWCpm    SUNWCpmx   SUNWCpmow 
  
  openpkg_release              CURRENT
  openpkg_pkg_bin              gcc make
  openpkg_pkg_src              gzip bzip2 tar \
                               bash vim screen shtool \
                               pcre zlib openssl openssh ntp
  
  solaris_oe_service_inc       -
  solaris_oe_service_exc       apache autofs initpcmcia cachefs.rooti perf llc2 pppd \
                               asppp uucp ldapclient autoinstall xntpd nscd slpd lp spc \
                               power bdconfig volmgt chacheos.finish rpc nfs.client \
                               sendmail wbem dtlogin nfs.server dhcp snmpdx dmi mipagent
  
  js_root_pw                   foobar
  js_final_shutdown            reboot
  

From ossp-cvs-owner@ossp.org  Wed May  8 17:59:21 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B37C576365; Wed,  8 May 2002 17:59:21 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea.cgi
Message-Id: <20020508155921.B37C576365@mail.ossp.org>
Date: Wed,  8 May 2002 17:59:21 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   08-May-2002 17:59:21
  Branch: HEAD                             Handle: 2002050816592100

  Modified files:
    ossp-pkg/tabea          tabea.cgi

  Log:
    Corrected one error in password checking. Created the first construction of
    second "window"

  Summary:
    Revision    Changes     Path
    1.9         +144 -64    ossp-pkg/tabea/tabea.cgi
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea.cgi
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 tabea.cgi
  --- ossp-pkg/tabea/tabea.cgi	8 May 2002 07:38:18 -0000	1.8
  +++ ossp-pkg/tabea/tabea.cgi	8 May 2002 15:59:21 -0000	1.9
  @@ -36,6 +36,8 @@
   $|++;
   
   my $pwdfile = "./tabea.pw";
  +my $configsdir = "./tabea.d";
  +my $tabeauser = "tabea";
   
   # establish my configuration
   my $MY = {};
  @@ -84,35 +86,6 @@
       }
   }
   
  -########################################################################################
  -sub validpassword {
  -########################################################################################
  -    my ($username, $password) = @_;
  -
  -    my $returnvalue = 0;
  -    my $uname;
  -    my $pwd;
  -    my $pwdin;
  - 
  -    $pwdin = IO::File->new("<$pwdfile");
  -    if(defined $pwdin) {
  -        while(<$pwdin>) {
  -            $_ =~ s|^(\w+):(\w+)$|{$uname=$1; $pwd=$2}|eg;
  -            ( $uname =~ $username ) && do {     # check the password
  -                if (crypt($password, $pwd) eq $pwd){
  -                    $returnvalue = 1;
  -                }
  -            }
  -        }
  -    }
  -
  -    $pwdin->close();
  -
  -    return $returnvalue;
  -}
  -########################################################################################
  -
  -
   my $page = '';
   
   if ($form eq '') {
  @@ -152,46 +125,98 @@
   }
   elsif ($form eq 'login') {
       #   enter Select form
  +
       
       &validpassword($username, $password, $pwdfile) || print STDOUT $cgi->redirect(-uri => $cgi->url(-full => 1), -type => "text/html");
  +    my $templatesfiles = &readdir($configsdir."/".$tabeauser);
  +    my $configsfiles = &readdir($configsdir."/".$username);
  +
  +
  +    my @templateshash = split(/ /,$templatesfiles);
  +    my $templateslist = "";
  +    foreach (@templateshash) {
  +        $templateslist .= "'$_', ";
  +    }
  +  #  $templateslist .= "]";
  +     
   #
        $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1)) .
           $cgi->hidden(-name => 'form', -default => ['']) .
  -         
  -#        "<table cellspacing=0 cellpadding=0>" .
  -#        "  <tr>" . 
  -#        "    <td>Username:</td>" .
  -#        "    <td>" . 
  -#        $cgi->textfield(
  -#            -name => 'username',
  -#            -default => $username,
  -#            -size => 20,
  -#            -maxlength => 8
  -#        ) .
  -#        "    </td>" .
  -#        "  </tr>" .
  -#        "  <tr>" . 
  -#        "    <td>Password:</td>" .
  -#        "    <td>" . 
  -#        $cgi->password_field(
  -#            -name => 'password',
  -#            -value => $password,
  -#            -size => 20,
  -#            -maxlength => 80
  -#        ) .
  -#        "    </td>" .
  -#        "  </tr>" .
  -#        "  <tr>" . 
  -#        "    <td colspan=2 align=right>" .
  -#        $cgi->reset() .
  -#        $cgi->submit(-name => 'dialog', -value => 'Login') .
  -#        "    </td>" .
  -#        "  </tr>" .
  -#        "</table>" .
  -#        $cgi->endform;        print "$pwd\n";
  -#    $page .= "Dialog:   ".$cgi->param("dialog") ."<br>\n";
  -#    $page .= "Username: ".$cgi->param("username") ."<br>\n";
  -#    $page .= "Password: ".$cgi->param("password") ."<br>\n";
  +# Begin with templates part         
  +        $page .= "Templates:   <br><br>\n" . 
  +        "<table width=70%>" .
  +        "  <td>" . 
  +        "    <td>" .
  +        $cgi->scrolling_list(
  +            -name => 'templatelist',
  +            -value => ['default', 'sample'],
  +            -size => 2
  +        ) .
  +        "   </td>" .
  +        "  <td>" .
  +        "    <table>" .
  +        "   <td>" .
  +        "   <tr>" .
  +        $cgi->submit(-name => 'copy', -value => 'Copy') .
  +        "   </tr>" .
  +        "   <tr>" .
  +        $cgi->submit(-name => 'view', -value => 'View') .
  +        "   </tr>" .
  +        "   </td>" .
  +        "   </table>" .
  +        "   </td>" .
  +        "   </table>" .
  +        " </td>" .
  +        "</table>" .
  +
  +# Now the configuration part         
  +        $page .= "Configuration:   <br><br>\n". 
  +        "<table width=70%>" .
  +        "  <td>" . 
  +        "    <td>" .
  +        $cgi->scrolling_list(
  +            -name => 'configlist',
  +            -value => ['xdefault', 'xsample'],
  +            -size => 5
  +        ) .
  +        "   </td>" .
  +        "    <td>" .
  +        "     <table>" .
  +        "      <td>" .
  +
  +        "      <tr>" .
  +        $cgi->submit(-name => 'new', -value => 'New') .
  +        "      </tr>" .
  +
  +        "      <tr>" .
  +        $cgi->submit(-name => 'copy', -value => 'Copy') .
  +        "      </tr>" .
  +
  +        "      <tr>" .
  +        $cgi->submit(-name => 'edit', -value => 'Edit') .
  +        "      </tr>" .
  +
  +        "      <tr>" .
  +        $cgi->submit(-name => 'del', -value => 'Del') .
  +        "      </tr>" .
  +
  +        "      <tr>" .
  +        $cgi->submit(-name => 'run', -value => 'Run') .
  +        "      </tr>" .
  +
  +        "      <tr>" .
  +        $cgi->submit(-name => 'conf_rights', -value => 'Config_rights') .
  +        "      </tr>" .
  +
  +        "     </td>" .
  +        "    </table>" .
  +        "   </td>" .
  +
  +        " </td>" .
  +        "</table>" .
  +
  +
  +        $cgi->endform;   
   }
   elsif ($form eq 'select') {
       #   enter Edit form
  @@ -208,3 +233,58 @@
   print $cgi->header(-cookie => $cookies, -expires => '+1s') . $out;
   
   exit (0);
  +
  +
  +
  +
  +########################################################################################
  +sub validpassword {
  +########################################################################################
  +    my ($username, $password) = @_;
  +
  +    my $returnvalue = 0;
  +    my $uname;
  +    my $pwd;
  +    my $pwdin;
  + 
  +    $pwdin = IO::File->new("<$pwdfile");
  +    if(defined $pwdin) {
  +        while(<$pwdin>) {
  +            $_ =~ s|^(\w+):(.+)$|{$uname=$1; $pwd=$2}|eg;
  +            ( $uname =~ $username ) && do {     # check the password
  +                if (crypt($password, $pwd) eq $pwd){
  +                    $returnvalue = 1;
  +                }
  +            }
  +        }
  +    }
  +
  +    $pwdin->close();
  +
  +    return $returnvalue;
  +}
  +########################################################################################
  +
  +
  +########################################################################################
  +sub readdir {
  +########################################################################################
  +    my ( $dir ) = @_;
  +    my $filestring = "";
  +    my $direntry = "";
  +
  +    opendir(DIR, "$dir");       # Open dir for scanning
  +    
  +    foreach $direntry (readdir(DIR)) {
  +        next if $direntry eq ".";
  +        next if $direntry eq "..";
  +        if (-f "$dir/$direntry") {
  +            $filestring .= $direntry. " ";
  +        }
  +    }
  +    closedir(DIR);
  +    return $filestring;
  +}
  +########################################################################################
  +
  +

From ossp-cvs-owner@ossp.org  Fri May 10 09:38:48 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A015876396; Fri, 10 May 2002 09:38:47 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea.cgi
Message-Id: <20020510073847.A015876396@mail.ossp.org>
Date: Fri, 10 May 2002 09:38:47 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-May-2002 09:38:47
  Branch: HEAD                             Handle: 2002051008384700

  Modified files:
    ossp-pkg/tabea          tabea.cgi

  Log:
    fix HTML rendering

  Summary:
    Revision    Changes     Path
    1.10        +16 -18     ossp-pkg/tabea/tabea.cgi
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea.cgi
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 tabea.cgi
  --- ossp-pkg/tabea/tabea.cgi	8 May 2002 15:59:21 -0000	1.9
  +++ ossp-pkg/tabea/tabea.cgi	10 May 2002 07:38:47 -0000	1.10
  @@ -172,7 +172,7 @@
   # Now the configuration part         
           $page .= "Configuration:   <br><br>\n". 
           "<table width=70%>" .
  -        "  <td>" . 
  +        "  <tr>" . 
           "    <td>" .
           $cgi->scrolling_list(
               -name => 'configlist',
  @@ -180,39 +180,37 @@
               -size => 5
           ) .
           "   </td>" .
  -        "    <td>" .
  +        "   <td>" .
           "     <table>" .
  -        "      <td>" .
   
  -        "      <tr>" .
  +        "      <tr><td>" .
           $cgi->submit(-name => 'new', -value => 'New') .
  -        "      </tr>" .
  +        "      </td></tr>" .
   
  -        "      <tr>" .
  +        "      <tr><td>" .
           $cgi->submit(-name => 'copy', -value => 'Copy') .
  -        "      </tr>" .
  +        "      </td></tr>" .
   
  -        "      <tr>" .
  +        "      <tr><td>" .
           $cgi->submit(-name => 'edit', -value => 'Edit') .
  -        "      </tr>" .
  +        "      </td></tr>" .
   
  -        "      <tr>" .
  +        "      <tr><td>" .
           $cgi->submit(-name => 'del', -value => 'Del') .
  -        "      </tr>" .
  +        "      </td></tr>" .
   
  -        "      <tr>" .
  +        "      <tr><td>" .
           $cgi->submit(-name => 'run', -value => 'Run') .
  -        "      </tr>" .
  +        "      </td></tr>" .
   
  -        "      <tr>" .
  +        "      <tr><td>" .
           $cgi->submit(-name => 'conf_rights', -value => 'Config_rights') .
  -        "      </tr>" .
  +        "      </td></tr>" .
   
  -        "     </td>" .
           "    </table>" .
  -        "   </td>" .
  +        "  </td>" .
   
  -        " </td>" .
  +        " </tr>" .
           "</table>" .
   
   

From ossp-cvs-owner@ossp.org  Fri May 10 14:27:57 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 04F1F76396; Fri, 10 May 2002 14:27:56 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea.cgi
Message-Id: <20020510122756.04F1F76396@mail.ossp.org>
Date: Fri, 10 May 2002 14:27:56 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   10-May-2002 14:27:56
  Branch: HEAD                             Handle: 2002051013275600

  Modified files:
    ossp-pkg/tabea          tabea.cgi

  Log:
    Saving last test version

  Summary:
    Revision    Changes     Path
    1.11        +30 -9      ossp-pkg/tabea/tabea.cgi
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea.cgi
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 tabea.cgi
  --- ossp-pkg/tabea/tabea.cgi	10 May 2002 07:38:47 -0000	1.10
  +++ ossp-pkg/tabea/tabea.cgi	10 May 2002 12:27:56 -0000	1.11
  @@ -38,6 +38,9 @@
   my $pwdfile = "./tabea.pw";
   my $configsdir = "./tabea.d";
   my $tabeauser = "tabea";
  +my $dialog;
  +my $copy;
  +my $view;
   
   # establish my configuration
   my $MY = {};
  @@ -123,33 +126,38 @@
           "</table>" .
           $cgi->endform;
   }
  -elsif ($form eq 'login') {
  +elsif ($dialog eq 'login') {
       #   enter Select form
   
       
       &validpassword($username, $password, $pwdfile) || print STDOUT $cgi->redirect(-uri => $cgi->url(-full => 1), -type => "text/html");
  +
       my $templatesfiles = &readdir($configsdir."/".$tabeauser);
       my $configsfiles = &readdir($configsdir."/".$username);
   
   
       my @templateshash = split(/ /,$templatesfiles);
  -    my $templateslist = "";
  +    my $templateslist = "[";
       foreach (@templateshash) {
           $templateslist .= "'$_', ";
       }
  -  #  $templateslist .= "]";
  -     
  +    chop($templateslist);
  +    chop($templateslist);
  +    $templateslist .= "]";
  +        
   #
        $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1)) .
           $cgi->hidden(-name => 'form', -default => ['']) .
   # Begin with templates part         
  -        $page .= "Templates:   <br><br>\n" . 
  +        "Templates:   <br><br>\n" . 
  +        " Templateslist: $templateslist <br>" .
           "<table width=70%>" .
           "  <td>" . 
           "    <td>" .
           $cgi->scrolling_list(
               -name => 'templatelist',
  -            -value => ['default', 'sample'],
  +    #        -value => ['default', 'sample'],
  +            -value => '\$templateslist',
               -size => 2
           ) .
           "   </td>" .
  @@ -157,10 +165,14 @@
           "    <table>" .
           "   <td>" .
           "   <tr>" .
  +        "     <td>" .
           $cgi->submit(-name => 'copy', -value => 'Copy') .
  +        "     </td>" .
           "   </tr>" .
           "   <tr>" .
  +        "     <td>" .
           $cgi->submit(-name => 'view', -value => 'View') .
  +        "     </td>" .
           "   </tr>" .
           "   </td>" .
           "   </table>" .
  @@ -214,13 +226,22 @@
           "</table>" .
   
   
  -        $cgi->endform;   
  +        $cgi->endform;  
  +#        $dialog = $cgi->param($view) || $cgi->param($copy);
   }
  -elsif ($form eq 'select') {
  +elsif ($dialog eq 'Edit') {
       #   enter Edit form
       &validpassword($username, $password, $pwdfile) || print STDOUT $cgi->redirect(-uri => $cgi->url(-full => 1), -type => "text/html");
  +
  +    $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1)); 
   }
  -else {
  +
  +elsif ($dialog eq 'View') {
  +    #   enter View form
  +    &validpassword($username, $password, $pwdfile) || print STDOUT $cgi->redirect(-uri => $cgi->url(-full => 1), -type => "text/html");
  +} else 
  +
  +{
       die "invalid form \"$form\"";
   }
   

From ossp-cvs-owner@ossp.org  Fri May 10 17:41:18 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 79C6376396; Fri, 10 May 2002 17:41:18 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea.cgi
Message-Id: <20020510154118.79C6376396@mail.ossp.org>
Date: Fri, 10 May 2002 17:41:18 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   10-May-2002 17:41:18
  Branch: HEAD                             Handle: 2002051016411800

  Modified files:
    ossp-pkg/tabea          tabea.cgi

  Log:
    Appended first version of view and edit window

  Summary:
    Revision    Changes     Path
    1.12        +95 -46     ossp-pkg/tabea/tabea.cgi
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea.cgi
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 tabea.cgi
  --- ossp-pkg/tabea/tabea.cgi	10 May 2002 12:27:56 -0000	1.11
  +++ ossp-pkg/tabea/tabea.cgi	10 May 2002 15:41:18 -0000	1.12
  @@ -38,9 +38,6 @@
   my $pwdfile = "./tabea.pw";
   my $configsdir = "./tabea.d";
   my $tabeauser = "tabea";
  -my $dialog;
  -my $copy;
  -my $view;
   
   # establish my configuration
   my $MY = {};
  @@ -67,10 +64,6 @@
   };
   
   
  -#   fetch parameters
  -my $form     = $cgi->param("form")     || "";
  -my $username = $cgi->param("username") || "";
  -my $password = $cgi->param("password") || "";
   
   #   update cookies
   my $cookies = [];
  @@ -89,11 +82,18 @@
       }
   }
   
  +
  +
  +#   fetch parameters
  +my $dialog   = $cgi->param("dialog")   || "";
  +my $username = $cgi->param("username") || "";
  +my $password = $cgi->param("password") || "";
  +
   my $page = '';
   
  -if ($form eq '') {
  +if ($dialog eq "") {
       $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1)) .
  -        $cgi->hidden(-name => 'form', -default => ['login']) .
  +#        $cgi->hidden(-name => 'form', -default => ['login']) .
           "<table cellspacing=0 cellpadding=0>" .
           "  <tr>" .
           "    <td>Username:</td>" .
  @@ -120,13 +120,13 @@
           "  <tr>" .
           "    <td colspan=2 align=right>" .
           $cgi->reset() .
  -        $cgi->submit(-name => 'dialog', -value => 'Login') .
  +        $cgi->submit(-name => 'dialog', -value => 'login') .
           "    </td>" .
           "  </tr>" .
           "</table>" .
           $cgi->endform;
   }
  -elsif ($dialog eq 'login') {
  +elsif (($dialog eq 'login') || ($dialog eq 'Back')) {
       #   enter Select form
   
       
  @@ -135,29 +135,21 @@
       my $templatesfiles = &readdir($configsdir."/".$tabeauser);
       my $configsfiles = &readdir($configsdir."/".$username);
   
  +    my @templatesarray = split(/ /,$templatesfiles);
  +    my @configsarray = split(/ /,$configsfiles);
   
  -    my @templateshash = split(/ /,$templatesfiles);
  -    my $templateslist = "[";
  -    foreach (@templateshash) {
  -        $templateslist .= "'$_', ";
  -    }
  -    chop($templateslist);
  -    chop($templateslist);
  -    $templateslist .= "]";
  -        
   #
        $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1)) .
           $cgi->hidden(-name => 'form', -default => ['']) .
   # Begin with templates part         
  +        "<br> Active User: $username<br>\n" .
           "Templates:   <br><br>\n" . 
  -        " Templateslist: $templateslist <br>" .
           "<table width=70%>" .
           "  <td>" . 
           "    <td>" .
           $cgi->scrolling_list(
               -name => 'templatelist',
  -    #        -value => ['default', 'sample'],
  -            -value => '\$templateslist',
  +            -value => [@templatesarray],
               -size => 2
           ) .
           "   </td>" .
  @@ -166,12 +158,12 @@
           "   <td>" .
           "   <tr>" .
           "     <td>" .
  -        $cgi->submit(-name => 'copy', -value => 'Copy') .
  +        $cgi->submit(-name => 'dialog', -value => 'Copy') .
           "     </td>" .
           "   </tr>" .
           "   <tr>" .
           "     <td>" .
  -        $cgi->submit(-name => 'view', -value => 'View') .
  +        $cgi->submit(-name => 'dialog', -value => 'View') .
           "     </td>" .
           "   </tr>" .
           "   </td>" .
  @@ -187,8 +179,8 @@
           "  <tr>" . 
           "    <td>" .
           $cgi->scrolling_list(
  -            -name => 'configlist',
  -            -value => ['xdefault', 'xsample'],
  +            -name => 'configslist',
  +            -value => [@configsarray],
               -size => 5
           ) .
           "   </td>" .
  @@ -196,53 +188,68 @@
           "     <table>" .
   
           "      <tr><td>" .
  -        $cgi->submit(-name => 'new', -value => 'New') .
  +        $cgi->submit(-name => 'dialog', -value => 'New') .
           "      </td></tr>" .
   
           "      <tr><td>" .
  -        $cgi->submit(-name => 'copy', -value => 'Copy') .
  +        $cgi->submit(-name => 'dialog', -value => 'Copy') .
           "      </td></tr>" .
   
           "      <tr><td>" .
  -        $cgi->submit(-name => 'edit', -value => 'Edit') .
  +        $cgi->submit(-name => 'dialog', -value => 'Edit') .
           "      </td></tr>" .
   
           "      <tr><td>" .
  -        $cgi->submit(-name => 'del', -value => 'Del') .
  +        $cgi->submit(-name => 'dialog', -value => 'Del') .
           "      </td></tr>" .
   
           "      <tr><td>" .
  -        $cgi->submit(-name => 'run', -value => 'Run') .
  +        $cgi->submit(-name => 'dialog', -value => 'Run') .
           "      </td></tr>" .
   
           "      <tr><td>" .
  -        $cgi->submit(-name => 'conf_rights', -value => 'Config_rights') .
  +        $cgi->submit(-name => 'dialog', -value => 'Config_rights') .
           "      </td></tr>" .
   
           "    </table>" .
           "  </td>" .
   
           " </tr>" .
  -        "</table>" .
  +        "</table>" ;
   
   
  -        $cgi->endform;  
  -#        $dialog = $cgi->param($view) || $cgi->param($copy);
  +        $page .= $cgi->endform;  
  +
   }
   elsif ($dialog eq 'Edit') {
       #   enter Edit form
  -    &validpassword($username, $password, $pwdfile) || print STDOUT $cgi->redirect(-uri => $cgi->url(-full => 1), -type => "text/html");
  -
  -    $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1)); 
  -}
  -
  +#    &validpassword($username, $password, $pwdfile) || print STDOUT $cgi->redirect(-uri => $cgi->url(-full => 1), -type => "text/html");
  +    if ($cgi->param('configslist')) {
  +    my $filename = $configsdir . "/" . $username . "/" . $cgi->param('configslist');
  +    &editconfig($filename, 'w', $username);
  +    } else {
  +    $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1)) .
  +    "<font color=red>Missing filename<br><br>\n" .
  +    $cgi->submit(-name => 'dialog', -value => 'Back') .
  +    $cgi->endform;
  +    }
  +    
  +} 
   elsif ($dialog eq 'View') {
       #   enter View form
  -    &validpassword($username, $password, $pwdfile) || print STDOUT $cgi->redirect(-uri => $cgi->url(-full => 1), -type => "text/html");
  -} else 
  -
  -{
  -    die "invalid form \"$form\"";
  +#    &validpassword($username, $password, $pwdfile) || print STDOUT $cgi->redirect(-uri => $cgi->url(-full => 1), -type => "text/html");
  +    if ($cgi->param('templatelist')) {
  +    my $filename = $configsdir . "/" . $tabeauser . "/" . $cgi->param('templatelist');
  +    &editconfig($filename, 'r', $username);
  +    } else {
  +    $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1)) .
  +    "<font color=red>Missing filename<br><br>\n" .
  +    $cgi->submit(-name => 'dialog', -value => 'Back') .
  +    $cgi->endform;
  +    }
  +    
  +} else {
  +    die "invalid dialog \"$dialog\"";
   }
   
   my $out = $MY->{TEMPLATE};
  @@ -307,3 +314,45 @@
   ########################################################################################
   
   
  +########################################################################################
  +sub editconfig {
  +########################################################################################
  +    my ($file, $mode, $user) = @_;
  +    my $text = '';
  +    my $filein ;
  +
  +    $filein = IO::File->new("<$file");
  +    while(<$filein>) { $text .= $_; }
  +    $filein->close; 
  +    $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1)) .
  +    "Edit window:   <br><br>\n" ;
  +    $page .= "Username: $username<br><br>\n" .
  +    "File: $file<br><br>\n" .
  +    "Mode: $mode<br><br>\n" .
  +    $cgi->textarea(
  +        -name => 'editwindow',
  +        -default => $text,
  +        -rows    => 40,
  +        -columns => 80
  +    );
  +    $page .= " <br><br>\n" .
  +    "<table>" .
  +    "  <td>" .
  +    "    <td>" .
  +    $cgi->submit(-name => 'dialog', -value => 'Back') .
  +    "   </td>";
  +    if ($mode eq 'w') {
  +    $page .= "   <td>" .
  +    $cgi->submit(-name => 'dialog', -value => 'Save') .
  +    "   </td>";
  +    }
  +    $page .= "  <td>" .
  +    " </td>" .
  +    "</table>" .
  +
  +
  +    $cgi->endform;
  +
  +
  +}
  +########################################################################################

From ossp-cvs-owner@ossp.org  Fri May 10 17:41:42 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D76BF763E8; Fri, 10 May 2002 17:41:41 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea TODO
Message-Id: <20020510154141.D76BF763E8@mail.ossp.org>
Date: Fri, 10 May 2002 17:41:41 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   10-May-2002 17:41:41
  Branch: HEAD                             Handle: 2002051016414100

  Modified files:
    ossp-pkg/tabea          TODO

  Log:
    Appended some TODOs

  Summary:
    Revision    Changes     Path
    1.2         +11 -1      ossp-pkg/tabea/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/TODO
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 TODO
  --- ossp-pkg/tabea/TODO	15 Apr 2002 09:39:04 -0000	1.1
  +++ ossp-pkg/tabea/TODO	10 May 2002 15:41:41 -0000	1.2
  @@ -34,4 +34,14 @@
     |  
     |  [BACK] -> #2  
     +-----------------------------+
  -   
  +
  +
  +- Solve "Back" errror
  +- Write back edited file
  +- Read config file
  +- User name in configuration list
  +- Define the other submit buttons
  +
  +.................
  +
  +Pete Smej, 10.05.2002   

From ossp-cvs-owner@ossp.org  Mon May 13 15:05:56 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9376B76396; Mon, 13 May 2002 15:05:56 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea.cgi
Message-Id: <20020513130556.9376B76396@mail.ossp.org>
Date: Mon, 13 May 2002 15:05:56 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   13-May-2002 15:05:56
  Branch: HEAD                             Handle: 2002051314055600

  Modified files:
    ossp-pkg/tabea          tabea.cgi

  Log:
    Appended read in tabea configuration section

  Summary:
    Revision    Changes     Path
    1.13        +55 -6      ossp-pkg/tabea/tabea.cgi
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea.cgi
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 tabea.cgi
  --- ossp-pkg/tabea/tabea.cgi	10 May 2002 15:41:18 -0000	1.12
  +++ ossp-pkg/tabea/tabea.cgi	13 May 2002 13:05:56 -0000	1.13
  @@ -35,9 +35,12 @@
   
   $|++;
   
  +
  +my $cfgfile = "./tabea.cfg";        # Name of configuration file
  +
   my $pwdfile = "./tabea.pw";
   my $configsdir = "./tabea.d";
  -my $tabeauser = "tabea";
  +#my $tabeauser = "tabea";
   
   # establish my configuration
   my $MY = {};
  @@ -82,7 +85,10 @@
       }
   }
   
  +# Read the configuration
  +my %cfghash = read_config($cfgfile);
   
  +#print "Test: $cfghash{'TabeaUser'}\n";
   
   #   fetch parameters
   my $dialog   = $cgi->param("dialog")   || "";
  @@ -91,6 +97,8 @@
   
   my $page = '';
   
  +if ($cfghash{"TabeaUser"} ne '') {
  +
   if ($dialog eq "") {
       $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1)) .
   #        $cgi->hidden(-name => 'form', -default => ['login']) .
  @@ -130,10 +138,10 @@
       #   enter Select form
   
       
  -    &validpassword($username, $password, $pwdfile) || print STDOUT $cgi->redirect(-uri => $cgi->url(-full => 1), -type => "text/html");
  +    &validpassword($username, $password, $cfghash{'BaseDir'}.$cfghash{'PasswdFile'}) || print STDOUT $cgi->redirect(-uri => $cgi->url(-full => 1), -type => "text/html");
   
  -    my $templatesfiles = &readdir($configsdir."/".$tabeauser);
  -    my $configsfiles = &readdir($configsdir."/".$username);
  +    my $templatesfiles = &readdir($cfghash{'BaseDir'} . $cfghash{'ConfigDir'} ."/".$cfghash{'TabeaUser'});
  +    my $configsfiles = &readdir($cfghash{'BaseDir'} . $cfghash{'ConfigDir'} ."/".$username);
   
       my @templatesarray = split(/ /,$templatesfiles);
       my @configsarray = split(/ /,$configsfiles);
  @@ -225,7 +233,7 @@
       #   enter Edit form
   #    &validpassword($username, $password, $pwdfile) || print STDOUT $cgi->redirect(-uri => $cgi->url(-full => 1), -type => "text/html");
       if ($cgi->param('configslist')) {
  -    my $filename = $configsdir . "/" . $username . "/" . $cgi->param('configslist');
  +    my $filename = $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $username . "/" . $cgi->param('configslist');
       &editconfig($filename, 'w', $username);
       } else {
       $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1)) .
  @@ -239,7 +247,7 @@
       #   enter View form
   #    &validpassword($username, $password, $pwdfile) || print STDOUT $cgi->redirect(-uri => $cgi->url(-full => 1), -type => "text/html");
       if ($cgi->param('templatelist')) {
  -    my $filename = $configsdir . "/" . $tabeauser . "/" . $cgi->param('templatelist');
  +    my $filename = $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $cfghash{'TabeaUser'} . "/" . $cgi->param('templatelist');
       &editconfig($filename, 'r', $username);
       } else {
       $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1)) .
  @@ -252,6 +260,10 @@
       die "invalid dialog \"$dialog\"";
   }
   
  +} else {
  +    die "no configuration found";
  +}
  +
   my $out = $MY->{TEMPLATE};
   $out =~ s|%%BODY%%|$page|s;
   $out =~ s|%%TITLE%%|Test|s;
  @@ -260,6 +272,42 @@
   
   exit (0);
   
  +########################################################################################
  +sub read_config {
  +########################################################################################
  +
  +my ($cfgfile) = @_;   
  +my %cfghash ;
  +my $cfgin ;
  +my $key;
  +my $content;
  +
  +print "Lese file: $cfgfile\n"; 
  +$cfgin = IO::File->new("<$cfgfile");
  +
  +if (defined $cfgin) {
  +    LOOP: while(<$cfgin>) { 
  +    
  +
  +        $_ =~ s|^\s+(.*?)|{$_=$1}|es;       # Remove whitespaces at the beginning 
  +        next LOOP if $_ =~ /^\n/;           # Remove the first empty require 
  +        next LOOP if $_ eq "";              # Remove empty line
  +        next LOOP if $_ =~/^#/;             # Remove comment lines
  +
  +        $_ =~ s|^([^#]+)#(.*)$|{$_=$1}|es;  # Remove comments on the end 
  +        $_ =~ s|(.*?)\s+$|{$_=$1}|es;       # Remove whitespaces at the end 
  +
  +
  +        ($key, $content) =  /^(\w+)\s+(.*)$/;
  +
  +        $cfghash{$key} = $content;
  +    }
  +    $cfgin->close;
  +}
  +
  +return (%cfghash);
  +}
  +########################################################################################
   
   
   
  @@ -320,6 +368,7 @@
       my ($file, $mode, $user) = @_;
       my $text = '';
       my $filein ;
  +     
   
       $filein = IO::File->new("<$file");
       while(<$filein>) { $text .= $_; }

From ossp-cvs-owner@ossp.org  Mon May 13 18:28:28 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5FF3E76396; Mon, 13 May 2002 18:28:28 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea.cgi
Message-Id: <20020513162828.5FF3E76396@mail.ossp.org>
Date: Mon, 13 May 2002 18:28:28 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   13-May-2002 18:28:28
  Branch: HEAD                             Handle: 2002051317282800

  Modified files:
    ossp-pkg/tabea          tabea.cgi

  Log:
    Various cleanups

  Summary:
    Revision    Changes     Path
    1.14        +75 -44     ossp-pkg/tabea/tabea.cgi
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea.cgi
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 tabea.cgi
  --- ossp-pkg/tabea/tabea.cgi	13 May 2002 13:05:56 -0000	1.13
  +++ ossp-pkg/tabea/tabea.cgi	13 May 2002 16:28:28 -0000	1.14
  @@ -150,15 +150,14 @@
        $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1)) .
           $cgi->hidden(-name => 'form', -default => ['']) .
   # Begin with templates part         
  -        "<br> Active User: $username<br>\n" .
  -        "Templates:   <br><br>\n" . 
  -        "<table width=70%>" .
  +        "<br> Active User: $username<br><br>\n" .
  +#        "Templates:   <br><br>\n" . 
           "  <td>" . 
           "    <td>" .
           $cgi->scrolling_list(
               -name => 'templatelist',
               -value => [@templatesarray],
  -            -size => 2
  +            -size => 3
           ) .
           "   </td>" .
           "  <td>" .
  @@ -182,14 +181,13 @@
           "</table>" .
   
   # Now the configuration part         
  -        $page .= "Configuration:   <br><br>\n". 
  -        "<table width=70%>" .
  -        "  <tr>" . 
  +        $page .=  "<table> <caption>Configuration</caption>" .
  +        "<td>" .
           "    <td>" .
           $cgi->scrolling_list(
               -name => 'configslist',
               -value => [@configsarray],
  -            -size => 5
  +            -size => 10
           ) .
           "   </td>" .
           "   <td>" .
  @@ -221,8 +219,7 @@
   
           "    </table>" .
           "  </td>" .
  -
  -        " </tr>" .
  +        "<td>" .
           "</table>" ;
   
   
  @@ -231,31 +228,11 @@
   }
   elsif ($dialog eq 'Edit') {
       #   enter Edit form
  -#    &validpassword($username, $password, $pwdfile) || print STDOUT $cgi->redirect(-uri => $cgi->url(-full => 1), -type => "text/html");
  -    if ($cgi->param('configslist')) {
  -    my $filename = $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $username . "/" . $cgi->param('configslist');
  -    &editconfig($filename, 'w', $username);
  -    } else {
  -    $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1)) .
  -    "<font color=red>Missing filename<br><br>\n" .
  -    $cgi->submit(-name => 'dialog', -value => 'Back') .
  -    $cgi->endform;
  -    }
  -    
  +        $page .= &edit($cgi->param('configslist'));
   } 
   elsif ($dialog eq 'View') {
       #   enter View form
  -#    &validpassword($username, $password, $pwdfile) || print STDOUT $cgi->redirect(-uri => $cgi->url(-full => 1), -type => "text/html");
  -    if ($cgi->param('templatelist')) {
  -    my $filename = $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $cfghash{'TabeaUser'} . "/" . $cgi->param('templatelist');
  -    &editconfig($filename, 'r', $username);
  -    } else {
  -    $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1)) .
  -    "<font color=red>Missing filename<br><br>\n" .
  -    $cgi->submit(-name => 'dialog', -value => 'Back') .
  -    $cgi->endform;
  -    }
  -    
  +    $page .= &view($cgi->param('templatelist'));
   } else {
       die "invalid dialog \"$dialog\"";
   }
  @@ -272,6 +249,48 @@
   
   exit (0);
   
  +
  +########################################################################################
  +sub edit {
  +########################################################################################
  +    my ($file) = @_;
  +    my $text;
  +    #   enter Edit form
  +    if($file) {
  +    my $filename = $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $username . "/" . $file;
  +    &editconfig($filename, 'w', $username);
  +    } else {
  +    $text = $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1)) .
  +    "<font color=red>Missing filename<br><br>\n" .
  +    $cgi->submit(-name => 'dialog', -value => 'Back') .
  +    $cgi->endform;
  +    }
  +    return $text;
  +}
  +########################################################################################
  +
  +
  +########################################################################################
  +sub view {
  +########################################################################################
  +    my ($file) = @_; 
  +    my $text;
  +    #   enter View form
  +    if ($file) {
  +    my $filename = $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $cfghash{'TabeaUser'} . "/" . $cgi->param('templatelist');
  +    &editconfig($filename, 'r', $username);
  +    } else {
  +    $text .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1)) .
  +    "<font color=red>Missing filename<br><br>\n" .
  +    $cgi->submit(-name => 'dialog', -value => 'Back') .
  +    $cgi->endform;
  +    }
  +    return $text;
  +}
  +########################################################################################
  +
  +
  +
   ########################################################################################
   sub read_config {
   ########################################################################################
  @@ -368,23 +387,37 @@
       my ($file, $mode, $user) = @_;
       my $text = '';
       my $filein ;
  -     
  +    my $readonly ;
  +    my $titletext ;
   
       $filein = IO::File->new("<$file");
       while(<$filein>) { $text .= $_; }
       $filein->close; 
  +
  +
  +    if ($mode eq 'w') {
  +        $titletext = "Edit window";
  +    } elsif ($mode eq 'r') {
  +       $titletext = "View window";
  +    }
  +
  +    my $textahash ={ -name => 'editwindow',
  +          -default => $text,
  +          -rows    => 40,
  +          -columns => 80
  +    };
  +    if ($mode eq 'r') {
  +        $textahash->{readonly}="";
  +    }
       $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1)) .
  -    "Edit window:   <br><br>\n" ;
  -    $page .= "Username: $username<br><br>\n" .
  +    "<font size=+2>" .
  +    $titletext . ":   <br><br>\n" .
  +    "</font>" .
  +    "Username: $username<br><br>\n" .
       "File: $file<br><br>\n" .
       "Mode: $mode<br><br>\n" .
  -    $cgi->textarea(
  -        -name => 'editwindow',
  -        -default => $text,
  -        -rows    => 40,
  -        -columns => 80
  -    );
  -    $page .= " <br><br>\n" .
  +    $cgi->textarea($textahash).
  +    "<br><br>\n" .
       "<table>" .
       "  <td>" .
       "    <td>" .
  @@ -401,7 +434,5 @@
   
   
       $cgi->endform;
  -
  -
   }
   ########################################################################################

From ossp-cvs-owner@ossp.org  Mon May 13 18:57:00 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A04AB76396; Mon, 13 May 2002 18:57:00 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc 00TODO rc.c rc.h rc_proc.c
Message-Id: <20020513165700.A04AB76396@mail.ossp.org>
Date: Mon, 13 May 2002 18:57:00 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   13-May-2002 18:57:00
  Branch: HEAD                             Handle: 2002051317570000

  Modified files:
    ossp-pkg/rc             00TODO rc.c rc.h rc_proc.c

  Log:
    Flush minor work. Building successfuly again.

  Summary:
    Revision    Changes     Path
    1.24        +1  -0      ossp-pkg/rc/00TODO
    1.25        +9  -9      ossp-pkg/rc/rc.c
    1.25        +10 -10     ossp-pkg/rc/rc.h
    1.2         +7  -7      ossp-pkg/rc/rc_proc.c
  ____________________________________________________________________________

  Index: ossp-pkg/rc/00TODO
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 00TODO
  --- ossp-pkg/rc/00TODO	24 Apr 2002 16:47:07 -0000	1.23
  +++ ossp-pkg/rc/00TODO	13 May 2002 16:57:00 -0000	1.24
  @@ -12,6 +12,7 @@
   
   Known bugs
     Not multithreaded (too many potentials for race conditions or overwrite)
  +  Not efficient (reads whole files when only parts are needed...)
   
   Document
     Refs, pri, user, group, ci, go only in normal (not special) sections.
  Index: ossp-pkg/rc/rc.c
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 rc.c
  --- ossp-pkg/rc/rc.c	25 Apr 2002 16:17:57 -0000	1.24
  +++ ossp-pkg/rc/rc.c	13 May 2002 16:57:00 -0000	1.25
  @@ -41,7 +41,7 @@
   int main(int argc, char *argv[])
   {
       ex_t Except;
  -    rc_t *pRc = NULL;
  +    rc_proc_t *pProc = NULL;
   
       ex_try {
           configNew();            /* Construct a new configuration              */
  @@ -49,15 +49,15 @@
           configDebug();          /* FIXME Remove FIXME */
           configVerify();         /* Test for usage, help, and version options  */
   
  -        pRc = procNew();
  -        procReadtmp(pRc, configGetval(RC_TMP_VAL));
  -/*        procReadfuncs(pRc, configGetval(RC_FNC_VAL));
  -        procReadrc(pRc, configGetrcfile());
  -        for (i = 0; i < clioptGetseclen; procSection(pRc, configGetsec(i++)));
  -        procParse(pRc);         /- Script generation               -/
  -        procRun(pRc);*/           /* [Execute|Evaluate|Print] script */
  +        pProc = procNew();
  +        procReadtmp(pProc, configGetval(RC_TMP_VAL));
  +/*        procReadfuncs(pProc, configGetval(RC_FNC_VAL));
  +        procReadrc(pProc, configGetrcfile());
  +        for (i = 0; i < clioptGetseclen; procSection(pProc, configGetsec(i++)));
  +        procParse(pProc);         /- Script generation               -/
  +        procRun(pProc);*/         /* [Execute|Evaluate|Print] script */
   
  -        procDelete(pRc);
  +        procDelete(pProc);
           configDelete();
       }
       ex_catch(Except) {
  Index: ossp-pkg/rc/rc.h
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 rc.h
  --- ossp-pkg/rc/rc.h	25 Apr 2002 16:17:57 -0000	1.24
  +++ ossp-pkg/rc/rc.h	13 May 2002 16:57:00 -0000	1.25
  @@ -55,10 +55,10 @@
       RC_ERR_INT  /* Internal error           */
   } rc_return_t;
   
  -/* Rc class */
  +/* Processor class */
   typedef struct {
       int nTmpfile;   /* Temp file descriptor */
  -} rc_t;
  +} rc_proc_t;
   
   /* Rc script type */
   typedef char *rc_script_t;
  @@ -104,14 +104,14 @@
   rc_return_t clioptSetsec(const char **);
   
   /* Processor function prototypes */
  -rc_t *procNew(void);
  -rc_return_t procDelete(rc_t *);
  -rc_return_t procReadfuncs(rc_t *, char *);
  -rc_return_t procReadtmp(rc_t *, char *);
  -rc_return_t procReadrc(rc_t *, char *);
  -rc_return_t procSection(rc_t *, char *);
  -rc_return_t procParse(rc_t *);
  -rc_return_t procRun(rc_t *);
  +rc_proc_t *procNew(void);
  +rc_return_t procDelete(rc_proc_t *);
  +rc_return_t procReadfuncs(rc_proc_t *, const char *);
  +rc_return_t procReadtmp(rc_proc_t *, const char *);
  +rc_return_t procReadrc(rc_proc_t *, const char *);
  +rc_return_t procSection(rc_proc_t *, const char *);
  +rc_return_t procParse(rc_proc_t *);
  +rc_return_t procRun(rc_proc_t *);
   
       /* Option function prototypes */
       /*FIXME rc_return_t optNew(rc_opt_t **);
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	25 Apr 2002 16:17:57 -0000	1.1
  +++ ossp-pkg/rc/rc_proc.c	13 May 2002 16:57:00 -0000	1.2
  @@ -36,19 +36,19 @@
   * procNew(void)                                 *
   * Construct a processor                         *
   ************************************************/
  -rc_t *procNew(void)
  +rc_proc_t *procNew(void)
   {
  -    rc_t *pNewrc = NULL;
  +    rc_proc_t *pNewrc = NULL;
   
  -    pNewrc = malloc(sizeof(rc_t));
  +    pNewrc = malloc(sizeof(rc_proc_t));
       return(pNewrc);
   }
   
   /************************************************
  -* procReadtmp(rc_t *, char *)                   *
  +* procReadtmp(rc_proc_t *, const char *)        *
   * Open and store a temp file                    *
   ************************************************/
  -rc_return_t procReadtmp(rc_t *pRc, char *szTmpname)
  +rc_return_t procReadtmp(rc_proc_t *pRc, const char *szTmpname)
   {
       fprintf(stderr, "%s!!!\n", szTmpname);
   
  @@ -56,10 +56,10 @@
   }
   
   /************************************************
  -* procDelete(rc_t *)                            *
  +* procDelete(rc_proc_t *)                       *
   * Destruct a processor                          *
   ************************************************/
  -rc_return_t procDelete(rc_t *pRc)
  +rc_return_t procDelete(rc_proc_t *pRc)
   {
       free(pRc);
   

From ossp-cvs-owner@ossp.org  Tue May 14 16:06:21 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A756776396; Tue, 14 May 2002 16:06:21 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea.cgi
Message-Id: <20020514140621.A756776396@mail.ossp.org>
Date: Tue, 14 May 2002 16:06:21 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   14-May-2002 16:06:21
  Branch: HEAD                             Handle: 2002051415062100

  Modified files:
    ossp-pkg/tabea          tabea.cgi

  Log:
    Changed view of main window. Changed read in of template and config files

  Summary:
    Revision    Changes     Path
    1.15        +131 -24    ossp-pkg/tabea/tabea.cgi
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea.cgi
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 tabea.cgi
  --- ossp-pkg/tabea/tabea.cgi	13 May 2002 16:28:28 -0000	1.14
  +++ ossp-pkg/tabea/tabea.cgi	14 May 2002 14:06:21 -0000	1.15
  @@ -140,18 +140,30 @@
       
       &validpassword($username, $password, $cfghash{'BaseDir'}.$cfghash{'PasswdFile'}) || print STDOUT $cgi->redirect(-uri => $cgi->url(-full => 1), -type => "text/html");
   
  -    my $templatesfiles = &readdir($cfghash{'BaseDir'} . $cfghash{'ConfigDir'} ."/".$cfghash{'TabeaUser'});
  -    my $configsfiles = &readdir($cfghash{'BaseDir'} . $cfghash{'ConfigDir'} ."/".$username);
  +     
  +#    my $templatesfiles = &readdir($cfghash{'BaseDir'} . $cfghash{'ConfigDir'} ."/".$cfghash{'TabeaUser'});
  +#    my $configsfiles = &readdir($cfghash{'BaseDir'} . $cfghash{'ConfigDir'} ."/".$username);
   
  +    my $templatesfiles = &get_name_files($cfghash{'BaseDir'} . $cfghash{'ConfigDir'}, $username, 4);
  +    my $configsfiles = &get_name_files($cfghash{'BaseDir'} . $cfghash{'ConfigDir'}, $username, 6);
  +
  +    $configsfiles .= &get_own_files($cfghash{'BaseDir'} . $cfghash{'ConfigDir'}, $username);
  +
  +    $templatesfiles = &strsort($templatesfiles);
  +    $configsfiles = &strsort($configsfiles);
  +    
       my @templatesarray = split(/ /,$templatesfiles);
       my @configsarray = split(/ /,$configsfiles);
  -
  +    
  +    
   #
        $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1)) .
           $cgi->hidden(-name => 'form', -default => ['']) .
   # Begin with templates part         
  +        "<font size=+1>" .
           "<br> Active User: $username<br><br>\n" .
  -#        "Templates:   <br><br>\n" . 
  +        "</font>" .
  +        "<table> <caption>Templates</caption>" .
           "  <td>" . 
           "    <td>" .
           $cgi->scrolling_list(
  @@ -165,7 +177,7 @@
           "   <td>" .
           "   <tr>" .
           "     <td>" .
  -        $cgi->submit(-name => 'dialog', -value => 'Copy') .
  +        $cgi->submit(-name => 'dialog', -value => 'Copy_Temp') .
           "     </td>" .
           "   </tr>" .
           "   <tr>" .
  @@ -181,7 +193,8 @@
           "</table>" .
   
   # Now the configuration part         
  -        $page .=  "<table> <caption>Configuration</caption>" .
  +        "<br><br>" .
  +        "<table> <caption>Configuration</caption>" .
           "<td>" .
           "    <td>" .
           $cgi->scrolling_list(
  @@ -198,7 +211,7 @@
           "      </td></tr>" .
   
           "      <tr><td>" .
  -        $cgi->submit(-name => 'dialog', -value => 'Copy') .
  +        $cgi->submit(-name => 'dialog', -value => 'Copy_Conf') .
           "      </td></tr>" .
   
           "      <tr><td>" .
  @@ -233,7 +246,8 @@
   elsif ($dialog eq 'View') {
       #   enter View form
       $page .= &view($cgi->param('templatelist'));
  -} else {
  +}
  +else {
       die "invalid dialog \"$dialog\"";
   }
   
  @@ -251,19 +265,68 @@
   
   
   ########################################################################################
  +sub get_name_files {
  +########################################################################################
  +    my ($dirname, $user, $rights) = @_;
  +    my $filel = '';
  +    my @filelarray;
  +    my $filelist = '';
  +    my $subdir = '';
  +    my $filemode = '';
  +    my $entry = '';
  +
  +    my $dirlist = &readsubdir($dirname . "/" );    
  +    my @dirarray =  split (/ /, $dirlist);
  +
  +    DIR: foreach $subdir (@dirarray)  {
  +        next DIR if $subdir eq $user;
  +        $filel = &readdir($dirname . "/" . $subdir . "/") ;
  +        @filelarray = split (/ /, $filel);
  +        FILE: foreach $entry (@filelarray) {
  +            my $path = $dirname . "/" . $subdir . "/" . $entry;
  +            next FILE if  (((stat($dirname . "/" . $subdir . "/" . $entry))[2]) & 07)  !=  $rights;
  +            $filelist .= $subdir . "/" . $entry . " ";
  +        }
  +   }
  +
  +    
  +    return $filelist;
  +}
  +########################################################################################
  +
  +########################################################################################
  +sub get_own_files {
  +########################################################################################
  +    my ($dirname, $user) = @_;
  +    my $filelist = '';
  +    my $entry = '';
  +
  +    my $flist = &readdir($dirname . "/" . $user . "/");
  +    my @flistarray = split (/ /,$flist);
  +
  +    foreach $entry (@flistarray) {
  +        $filelist .= $user . "/" . $entry . " ";
  +    }
  +
  +    return $filelist;
  +}
  +########################################################################################
  +
  +
  +########################################################################################
   sub edit {
   ########################################################################################
       my ($file) = @_;
       my $text;
       #   enter Edit form
       if($file) {
  -    my $filename = $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $username . "/" . $file;
  -    &editconfig($filename, 'w', $username);
  +        my $filename = $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $file;
  +        &editconfig($filename, 'w', $username);
       } else {
  -    $text = $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1)) .
  -    "<font color=red>Missing filename<br><br>\n" .
  -    $cgi->submit(-name => 'dialog', -value => 'Back') .
  -    $cgi->endform;
  +        $text = $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1)) .
  +        "<font color=red>Missing filename<br><br>\n" .
  +        $cgi->submit(-name => 'dialog', -value => 'Back') .
  +        $cgi->endform;
       }
       return $text;
   }
  @@ -275,22 +338,21 @@
   ########################################################################################
       my ($file) = @_; 
       my $text;
  -    #   enter View form
  +    
       if ($file) {
  -    my $filename = $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $cfghash{'TabeaUser'} . "/" . $cgi->param('templatelist');
  -    &editconfig($filename, 'r', $username);
  +        my $filename = $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $cgi->param('templatelist');
  +        &editconfig($filename, 'r', $username);
       } else {
  -    $text .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1)) .
  -    "<font color=red>Missing filename<br><br>\n" .
  -    $cgi->submit(-name => 'dialog', -value => 'Back') .
  -    $cgi->endform;
  +        $text .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1)) .
  +        "<font color=red>Missing filename<br><br>\n" .
  +        $cgi->submit(-name => 'dialog', -value => 'Back') .
  +        $cgi->endform;
       }
       return $text;
   }
   ########################################################################################
   
   
  -
   ########################################################################################
   sub read_config {
   ########################################################################################
  @@ -360,12 +422,39 @@
   
   
   ########################################################################################
  +sub readsubdir {
  +########################################################################################
  +    my ( $dir ) = @_;
  +    my $filestring = "";
  +    my $direntry = "";
  +
  +
  +
  +    opendir(DIR, "$dir");       # Open dir for scanning
  +    
  +    foreach $direntry (readdir(DIR)) {
  +        next if $direntry eq ".";
  +        next if $direntry eq "..";
  +        if (-d "$dir/$direntry") {
  +            $filestring .= $direntry. " ";
  +        }
  +    }
  +    closedir(DIR);
  +    return $filestring;
  +}
  +
  +
  +
  +
  +########################################################################################
   sub readdir {
   ########################################################################################
       my ( $dir ) = @_;
       my $filestring = "";
       my $direntry = "";
   
  +
  +
       opendir(DIR, "$dir");       # Open dir for scanning
       
       foreach $direntry (readdir(DIR)) {
  @@ -382,6 +471,24 @@
   
   
   ########################################################################################
  +sub strsort {
  +########################################################################################
  +    my ( $sortstr ) = @_;
  +
  +    my @sortarray = split (/ /, $sortstr);
  +     
  +    @sortarray = reverse sort {$b cmp $a} @sortarray;
  +    $sortstr = join(" ", @sortarray);
  +
  +    return $sortstr;
  +}
  +########################################################################################
  +
  +
  +
  +
  +
  +########################################################################################
   sub editconfig {
   ########################################################################################
       my ($file, $mode, $user) = @_;
  @@ -413,9 +520,9 @@
       "<font size=+2>" .
       $titletext . ":   <br><br>\n" .
       "</font>" .
  -    "Username: $username<br><br>\n" .
  +    "<font size=+1>" .
       "File: $file<br><br>\n" .
  -    "Mode: $mode<br><br>\n" .
  +    "</font>" .
       $cgi->textarea($textahash).
       "<br><br>\n" .
       "<table>" .

From ossp-cvs-owner@ossp.org  Tue May 14 17:34:02 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8240876396; Tue, 14 May 2002 17:34:02 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea.cgi
Message-Id: <20020514153402.8240876396@mail.ossp.org>
Date: Tue, 14 May 2002 17:34:02 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   14-May-2002 17:34:02
  Branch: HEAD                             Handle: 2002051416340200

  Modified files:
    ossp-pkg/tabea          tabea.cgi

  Log:
    Created section for creating new file

  Summary:
    Revision    Changes     Path
    1.16        +98 -0      ossp-pkg/tabea/tabea.cgi
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea.cgi
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 tabea.cgi
  --- ossp-pkg/tabea/tabea.cgi	14 May 2002 14:06:21 -0000	1.15
  +++ ossp-pkg/tabea/tabea.cgi	14 May 2002 15:34:02 -0000	1.16
  @@ -42,6 +42,7 @@
   my $configsdir = "./tabea.d";
   #my $tabeauser = "tabea";
   
  +
   # establish my configuration
   my $MY = {};
   $MY->{PROGNAME} = ($0 =~ m|^.*?([^/]+?)(?:\.[^/.]+)?$|)[0];
  @@ -247,6 +248,17 @@
       #   enter View form
       $page .= &view($cgi->param('templatelist'));
   }
  +elsif ($dialog eq 'New') {
  +    $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1));
  +    $page .= &new($cfghash{'BaseDir'} . $cfghash{'ConfigDir'}, $username);
  +    $page .= $cgi->endform;
  +}
  +elsif ($dialog eq 'New_file') {
  +    $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1));
  +    $page .= &newfile($cfghash{'BaseDir'} . $cfghash{'ConfigDir'}, $username, $cgi->param('newfile'), $cgi->param('new_rights'));
  +    $page .= $cgi->endform;
  +}
  +
   else {
       die "invalid dialog \"$dialog\"";
   }
  @@ -348,6 +360,92 @@
           $cgi->submit(-name => 'dialog', -value => 'Back') .
           $cgi->endform;
       }
  +    return $text;
  +}
  +########################################################################################
  +
  +
  +#########################################################################################
  +sub new {
  +########################################################################################
  +    my ( $dirname, $user ) = @_;
  +    my $text;
  +
  +    $text= "<font size=+2>" .
  +    "New File:<br><br>\n" .
  +    "</font>" .
  +
  +    "<table spacing=0 cellpadding=0>" .
  +    "  <tr>" .
  +    "    <td>New Filename: $dirname " . "/" . "$user" . "/" . "</td>" .
  +    "   <td>" .
  +    $cgi->textfield(
  +        -name => 'newfile',
  +        -default => '',
  +        -size => 20,
  +        -maxlength => 30
  +    ) .
  +    " </td>" .
  +    " </tr>" .
  +    " <tr>" .
  +    "<tr><td><br></td></tr>" .
  +    "<td></td>" .
  +    " <td align=left>" .
  +#    $cgi->checkbox_group(
  +#       -name => 'new_rights',
  +#       -values => ['private', 'protected', 'public'],
  +#       -defaults => 'private',
  +#       -linebreak => 'true'
  +#    ) .
  +    $cgi->scrolling_list(
  +       -name => 'new_rights',
  +       -value => ['private', 'protected', 'public'],
  +       -size => 1
  +    ) .
  +    " </td>" .
  +    " </tr>" .
  +    "<tr><td><br></td></tr>" .
  +    "  <tr>" . 
  +    "<td></td>" .
  +    "    <td colspan=2 align=left>" .
  +    $cgi->submit(-name => 'dialog', -value => 'Back') .
  +    $cgi->submit(-name => 'dialog', -value => 'New_file') .
  +    "    </td>" .
  +    "  </tr>" . 
  +    "</table>"; 
  +
  +    return $text;
  +}
  +########################################################################################
  +sub newfile {
  +########################################################################################
  +    my ( $dirname, $user, $newfilename, $newrights ) = @_;
  +    my $text;
  +    my $newpath = $dirname . "/" . $user . "/" . $newfilename;
  +    my $filerights = '';
  +
  +    $text= "<font size=+2>" .
  +    "Creating New File:<br><br>" .
  +    "</font><br><br><br>" ;
  +    system("touch $newpath") && die "Cannot create new file";
  +    if ($newrights eq "private" ) {
  +        $filerights = '';
  +    } elsif ($newrights eq "protected" ) {
  +        $filerights = "r";
  +    } elsif ($newrights eq "public" ) {
  +        $filerights = "rw";
  +    } else {
  +        die "Unknown file rights";   
  +    }
  +    $text .= "Creating the new file $newpath<br><br>";
  +    system("touch $newpath") && die "Cannot create new file";
  +    $text .= "Setting new file rights for $newpath<br><br>";
  +    system("chmod u=rw $newpath") && die "Cannot set new file rights";
  +    system("chmod o=$filerights $newpath") && die "Cannot set new file rights";
  +    # Checking that file dont exist: TODO
  +    $text .= "<br><br><br>" .
  +    $cgi->submit(-name => 'dialog', -value => 'Back');
  +
       return $text;
   }
   ########################################################################################

From ossp-cvs-owner@ossp.org  Wed May 15 13:47:42 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 698D376396; Wed, 15 May 2002 13:47:42 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea.cgi
Message-Id: <20020515114742.698D376396@mail.ossp.org>
Date: Wed, 15 May 2002 13:47:42 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   15-May-2002 13:47:42
  Branch: HEAD                             Handle: 2002051512474100

  Modified files:
    ossp-pkg/tabea          tabea.cgi

  Log:
    Appended config rights section

  Summary:
    Revision    Changes     Path
    1.17        +146 -38    ossp-pkg/tabea/tabea.cgi
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea.cgi
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 tabea.cgi
  --- ossp-pkg/tabea/tabea.cgi	14 May 2002 15:34:02 -0000	1.16
  +++ ossp-pkg/tabea/tabea.cgi	15 May 2002 11:47:41 -0000	1.17
  @@ -27,6 +27,7 @@
   ##
   ##  tabea.cgi: Tabea CGI (syntax: Perl)
   ##
  +##
   
   require 5.000;
   use strict;
  @@ -40,7 +41,6 @@
   
   my $pwdfile = "./tabea.pw";
   my $configsdir = "./tabea.d";
  -#my $tabeauser = "tabea";
   
   
   # establish my configuration
  @@ -56,7 +56,7 @@
   
   #   activate a general error handler
   $SIG{__DIE__} = sub {
  -    my ($err) = @_;
  +    my ($err) = @@_;
   
       #$err =~ s|at\s+\S+\s+line\s+(\d+)|(line $1)|s;
       $err =~ s|\n|<br>\n|sg;
  @@ -68,12 +68,11 @@
   };
   
   
  -
   #   update cookies
   my $cookies = [];
   foreach my $param (qw(username)) { # FIXME!
       if ($cgi->param($param) ne '' and ($cgi->param($param) ne $cgi->cookie($param))) {
  -        push(@{$cookies}, $cgi->cookie(
  +        push(@@{$cookies}, $cgi->cookie(
                -name    => $param,
                -value   => $cgi->param($param),
                -expires => '+1d',
  @@ -91,10 +90,12 @@
   
   #print "Test: $cfghash{'TabeaUser'}\n";
   
  +
   #   fetch parameters
   my $dialog   = $cgi->param("dialog")   || "";
   my $username = $cgi->param("username") || "";
   my $password = $cgi->param("password") || "";
  +my $filename = $cgi->param("filename") || "";
   
   my $page = '';
   
  @@ -153,8 +154,8 @@
       $templatesfiles = &strsort($templatesfiles);
       $configsfiles = &strsort($configsfiles);
       
  -    my @templatesarray = split(/ /,$templatesfiles);
  -    my @configsarray = split(/ /,$configsfiles);
  +    my @@templatesarray = split(/ /,$templatesfiles);
  +    my @@configsarray = split(/ /,$configsfiles);
       
       
   #
  @@ -169,7 +170,7 @@
           "    <td>" .
           $cgi->scrolling_list(
               -name => 'templatelist',
  -            -value => [@templatesarray],
  +            -value => [@@templatesarray],
               -size => 3
           ) .
           "   </td>" .
  @@ -200,7 +201,7 @@
           "    <td>" .
           $cgi->scrolling_list(
               -name => 'configslist',
  -            -value => [@configsarray],
  +            -value => [@@configsarray],
               -size => 10
           ) .
           "   </td>" .
  @@ -258,11 +259,23 @@
       $page .= &newfile($cfghash{'BaseDir'} . $cfghash{'ConfigDir'}, $username, $cgi->param('newfile'), $cgi->param('new_rights'));
       $page .= $cgi->endform;
   }
  -
  -else {
  -    die "invalid dialog \"$dialog\"";
  +elsif ($dialog eq 'Config_rights') {
  +    $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1));
  +    my $configfile;        
  +    if (! defined $cgi->param('configslist') ) {
  +        $configfile = '';
  +    } else {
  +        $configfile = $cgi->param('configslist');
  +    }
  +    $page .= &config_rights($configfile, $username);
  +   # $page .= "Returnvalue: " . $cgi->param('filename') . "<br>";
  +    $page .= $cgi->endform;
  +}
  +elsif ($dialog eq 'Change_rights') {
  +    $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1));
  +    $page .= &change_rights($cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" .  $cgi->param('filename'), $cgi->param('changerights') );
  +    $page .= $cgi->endform;
   }
  -
   } else {
       die "no configuration found";
   }
  @@ -279,22 +292,22 @@
   ########################################################################################
   sub get_name_files {
   ########################################################################################
  -    my ($dirname, $user, $rights) = @_;
  +    my ($dirname, $user, $rights) = @@_;
       my $filel = '';
  -    my @filelarray;
  +    my @@filelarray;
       my $filelist = '';
       my $subdir = '';
       my $filemode = '';
       my $entry = '';
   
       my $dirlist = &readsubdir($dirname . "/" );    
  -    my @dirarray =  split (/ /, $dirlist);
  +    my @@dirarray =  split (/ /, $dirlist);
   
  -    DIR: foreach $subdir (@dirarray)  {
  +    DIR: foreach $subdir (@@dirarray)  {
           next DIR if $subdir eq $user;
           $filel = &readdir($dirname . "/" . $subdir . "/") ;
  -        @filelarray = split (/ /, $filel);
  -        FILE: foreach $entry (@filelarray) {
  +        @@filelarray = split (/ /, $filel);
  +        FILE: foreach $entry (@@filelarray) {
               my $path = $dirname . "/" . $subdir . "/" . $entry;
               next FILE if  (((stat($dirname . "/" . $subdir . "/" . $entry))[2]) & 07)  !=  $rights;
               $filelist .= $subdir . "/" . $entry . " ";
  @@ -309,14 +322,14 @@
   ########################################################################################
   sub get_own_files {
   ########################################################################################
  -    my ($dirname, $user) = @_;
  +    my ($dirname, $user) = @@_;
       my $filelist = '';
       my $entry = '';
   
       my $flist = &readdir($dirname . "/" . $user . "/");
  -    my @flistarray = split (/ /,$flist);
  +    my @@flistarray = split (/ /,$flist);
   
  -    foreach $entry (@flistarray) {
  +    foreach $entry (@@flistarray) {
           $filelist .= $user . "/" . $entry . " ";
       }
   
  @@ -328,7 +341,7 @@
   ########################################################################################
   sub edit {
   ########################################################################################
  -    my ($file) = @_;
  +    my ($file) = @@_;
       my $text;
       #   enter Edit form
       if($file) {
  @@ -336,7 +349,7 @@
           &editconfig($filename, 'w', $username);
       } else {
           $text = $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1)) .
  -        "<font color=red>Missing filename<br><br>\n" .
  +        "<font color=red>Missing iilename<br><br>\n" .
           $cgi->submit(-name => 'dialog', -value => 'Back') .
           $cgi->endform;
       }
  @@ -348,7 +361,7 @@
   ########################################################################################
   sub view {
   ########################################################################################
  -    my ($file) = @_; 
  +    my ($file) = @@_; 
       my $text;
       
       if ($file) {
  @@ -368,8 +381,8 @@
   #########################################################################################
   sub new {
   ########################################################################################
  -    my ( $dirname, $user ) = @_;
  -    my $text;
  +    my ( $dirname, $user ) = @@_;
  +    my $text = '';
   
       $text= "<font size=+2>" .
       "New File:<br><br>\n" .
  @@ -416,11 +429,12 @@
   
       return $text;
   }
  +
   ########################################################################################
   sub newfile {
   ########################################################################################
  -    my ( $dirname, $user, $newfilename, $newrights ) = @_;
  -    my $text;
  +    my ( $dirname, $user, $newfilename, $newrights ) = @@_;
  +    my $text = '';
       my $newpath = $dirname . "/" . $user . "/" . $newfilename;
       my $filerights = '';
   
  @@ -451,11 +465,105 @@
   ########################################################################################
   
   
  +
  +########################################################################################
  +sub config_rights {
  +########################################################################################
  +    my ( $namefile, $user ) = @@_; 
  +    my $text = '';
  +    my $defaultright = '';
  +    my $filerights = stat( (($namefile)[2]) & 07 );
  +    my $fnamehash ={ -name => 'filename',
  +          -default => $namefile,
  +          -size => 20,
  +          -maxlength => 30
  +    };
  +    $fnamehash->{readonly}="";
  +    
  +#    $text .= $cgi->hidden(-name => 'filename', -default => ['xxx', 'xxx2'] ) ;
  +    if ( $filerights == 6 ) {
  +        $defaultright = "public" ;     
  +    } elsif ( $filerights == 4 ) {
  +        $defaultright = "protected" ;
  +    } else {
  +        $defaultright = "private" ;
  +    }
  +
  +    $text= "<font size=+2>" .
  +    "Changing rights of file:<br><br>" ;
  +    
  +    if ($namefile ne '') {
  +        $namefile =~ m{^([a-zA-Z0-9!"£$%^&*()-_=+#~]+)/(.+)}sg;
  +        if ($1 eq $user) {
  +            $text .= "<table>" .
  +            "<tr>" .
  +            " <td>" . 
  +            $cgi->textfield($fnamehash). 
  +            " </td>" .
  +            " <td>" . 
  +            $cgi->scrolling_list(
  +                -name => 'changerights',
  +                -value => ['private', 'protected', 'public'],
  +                -default => $defaultright,
  +                -size => 1
  +            ) .
  +            " </td>" .
  +            "</tr>" .
  +            "</table>" .
  +            "<br><br>" .
  +            $cgi->submit(-name => 'dialog', -value => 'Back') .
  +            $cgi->submit(-name => 'dialog', -value => 'Change_rights');
  +        } else {
  +            $text .= "<font color=red>You can only change file rights in your directory<br><br>\n" .
  +            $cgi->submit(-name => 'dialog', -value => 'Back');
  +        }
  +    } else {
  +
  +        $text .= "<font color=red>Missing filename<br><br>\n" .
  +        $cgi->submit(-name => 'dialog', -value => 'Back');
  +    }
  +
  +   return $text;
  +}
  +########################################################################################
  +
  +
  +########################################################################################
  +sub change_rights {
  +########################################################################################
  +    my ( $filename, $newrights ) = @@_;
  +    my $text = '';
  +    my $filerights = '';
  +
  +    $text= "<font size=+2>" .
  +    "Changing rights of file:<br>" .
  +    "</font>" .
  +   "<br><font size=+1> $filename </font> to <font size=+1> $newrights </font><br>";
  +    if ($newrights eq "private" ) {
  +           $filerights = '';
  +    } elsif ($newrights eq "protected" ) {
  +           $filerights = "r";
  +    } elsif ($newrights eq "public" ) {
  +           $filerights = "rw";
  +    } else {
  +           die "Unknown file rights";
  +    }
  +#    $text .= "Name : $filename<br>Rights: $filerights<br>" ;
  +    system("chmod o=$filerights $filename") && die "Cannot set new file rights";
  +    $text .= "<br>Done.<br><br>" .
  +    $cgi->submit(-name => 'dialog', -value => 'Back');
  +
  +    return $text;
  +}
  +########################################################################################
  +
  +
  +
   ########################################################################################
   sub read_config {
   ########################################################################################
   
  -my ($cfgfile) = @_;   
  +my ($cfgfile) = @@_;   
   my %cfghash ;
   my $cfgin ;
   my $key;
  @@ -493,7 +601,7 @@
   ########################################################################################
   sub validpassword {
   ########################################################################################
  -    my ($username, $password) = @_;
  +    my ($user, $password) = @@_;
   
       my $returnvalue = 0;
       my $uname;
  @@ -504,7 +612,7 @@
       if(defined $pwdin) {
           while(<$pwdin>) {
               $_ =~ s|^(\w+):(.+)$|{$uname=$1; $pwd=$2}|eg;
  -            ( $uname =~ $username ) && do {     # check the password
  +            ( $uname =~ $user ) && do {     # check the password
                   if (crypt($password, $pwd) eq $pwd){
                       $returnvalue = 1;
                   }
  @@ -522,7 +630,7 @@
   ########################################################################################
   sub readsubdir {
   ########################################################################################
  -    my ( $dir ) = @_;
  +    my ( $dir ) = @@_;
       my $filestring = "";
       my $direntry = "";
   
  @@ -547,7 +655,7 @@
   ########################################################################################
   sub readdir {
   ########################################################################################
  -    my ( $dir ) = @_;
  +    my ( $dir ) = @@_;
       my $filestring = "";
       my $direntry = "";
   
  @@ -571,12 +679,12 @@
   ########################################################################################
   sub strsort {
   ########################################################################################
  -    my ( $sortstr ) = @_;
  +    my ( $sortstr ) = @@_;
   
  -    my @sortarray = split (/ /, $sortstr);
  +    my @@sortarray = split (/ /, $sortstr);
        
  -    @sortarray = reverse sort {$b cmp $a} @sortarray;
  -    $sortstr = join(" ", @sortarray);
  +    @@sortarray = reverse sort {$b cmp $a} @@sortarray;
  +    $sortstr = join(" ", @@sortarray);
   
       return $sortstr;
   }
  @@ -589,7 +697,7 @@
   ########################################################################################
   sub editconfig {
   ########################################################################################
  -    my ($file, $mode, $user) = @_;
  +    my ($file, $mode, $user) = @@_;
       my $text = '';
       my $filein ;
       my $readonly ;

From ossp-cvs-owner@ossp.org  Wed May 15 15:04:21 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E61AD76396; Wed, 15 May 2002 15:04:20 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea.cgi
Message-Id: <20020515130420.E61AD76396@mail.ossp.org>
Date: Wed, 15 May 2002 15:04:20 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   15-May-2002 15:04:20
  Branch: HEAD                             Handle: 2002051514042000

  Modified files:
    ossp-pkg/tabea          tabea.cgi

  Log:
    Varios cleanups

  Summary:
    Revision    Changes     Path
    1.18        +185 -185   ossp-pkg/tabea/tabea.cgi
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea.cgi
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 tabea.cgi
  --- ossp-pkg/tabea/tabea.cgi	15 May 2002 11:47:41 -0000	1.17
  +++ ossp-pkg/tabea/tabea.cgi	15 May 2002 13:04:20 -0000	1.18
  @@ -56,7 +56,7 @@
   
   #   activate a general error handler
   $SIG{__DIE__} = sub {
  -    my ($err) = @@_;
  +    my ($err) = @_;
   
       #$err =~ s|at\s+\S+\s+line\s+(\d+)|(line $1)|s;
       $err =~ s|\n|<br>\n|sg;
  @@ -71,16 +71,22 @@
   #   update cookies
   my $cookies = [];
   foreach my $param (qw(username)) { # FIXME!
  -    if ($cgi->param($param) ne '' and ($cgi->param($param) ne $cgi->cookie($param))) {
  -        push(@@{$cookies}, $cgi->cookie(
  +    my $cookieparam;
  +    if (defined $cgi->param($param)) {
  +        $cookieparam = $cgi->param($param);
  +    } else {
  +        $cookieparam = '';
  +    }
  +    if ($cookieparam ne '' and ($cookieparam ne $cgi->cookie($param))) {
  +        push(@{$cookies}, $cgi->cookie(
                -name    => $param,
  -             -value   => $cgi->param($param),
  +             -value   => $cookieparam,
                -expires => '+1d',
                -path    => $cgi->url(-absolute => 1),
                -secure  => 0
           ));
       }
  -    if ($cgi->param($param) eq '' and $cgi->cookie($param) ne '') {
  +    if ($cookieparam eq '' and $cookieparam ne '') {
            $cgi->param(-name => $param, -value => [$cgi->cookie($param)]);
       }
   }
  @@ -88,8 +94,6 @@
   # Read the configuration
   my %cfghash = read_config($cfgfile);
   
  -#print "Test: $cfghash{'TabeaUser'}\n";
  -
   
   #   fetch parameters
   my $dialog   = $cgi->param("dialog")   || "";
  @@ -103,38 +107,37 @@
   
   if ($dialog eq "") {
       $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1)) .
  -#        $cgi->hidden(-name => 'form', -default => ['login']) .
  -        "<table cellspacing=0 cellpadding=0>" .
  -        "  <tr>" .
  -        "    <td>Username:</td>" .
  -        "    <td>" .
  -        $cgi->textfield(
  -            -name => 'username',
  -            -default => $username,
  -            -size => 20,
  -            -maxlength => 8
  -        ) .
  -        "    </td>" .
  -        "  </tr>" .
  -        "  <tr>" .
  -        "    <td>Password:</td>" .
  -        "    <td>" .
  -        $cgi->password_field(
  -            -name => 'password',
  -            -value => $password,
  -            -size => 20,
  -            -maxlength => 80
  -        ) .
  -        "    </td>" .
  -        "  </tr>" .
  -        "  <tr>" .
  -        "    <td colspan=2 align=right>" .
  -        $cgi->reset() .
  -        $cgi->submit(-name => 'dialog', -value => 'login') .
  -        "    </td>" .
  -        "  </tr>" .
  -        "</table>" .
  -        $cgi->endform;
  +    "<table cellspacing=0 cellpadding=0>" .
  +    "  <tr>" .
  +    "    <td>Username:</td>" .
  +    "    <td>" .
  +    $cgi->textfield(
  +        -name => 'username',
  +        -default => $username,
  +        -size => 20,
  +        -maxlength => 8
  +    ) .
  +    "    </td>" .
  +    "  </tr>" .
  +    "  <tr>" .
  +    "    <td>Password:</td>" .
  +    "    <td>" .
  +    $cgi->password_field(
  +        -name => 'password',
  +        -value => $password,
  +        -size => 20,
  +        -maxlength => 80
  +    ) .
  +    "    </td>" .
  +    "  </tr>" .
  +    "  <tr>" .
  +    "    <td colspan=2 align=right>" .
  +    $cgi->reset() .
  +    $cgi->submit(-name => 'dialog', -value => 'login') .
  +    "    </td>" .
  +    "  </tr>" .
  +    "</table>" .
  +    $cgi->endform;
   }
   elsif (($dialog eq 'login') || ($dialog eq 'Back')) {
       #   enter Select form
  @@ -143,9 +146,6 @@
       &validpassword($username, $password, $cfghash{'BaseDir'}.$cfghash{'PasswdFile'}) || print STDOUT $cgi->redirect(-uri => $cgi->url(-full => 1), -type => "text/html");
   
        
  -#    my $templatesfiles = &readdir($cfghash{'BaseDir'} . $cfghash{'ConfigDir'} ."/".$cfghash{'TabeaUser'});
  -#    my $configsfiles = &readdir($cfghash{'BaseDir'} . $cfghash{'ConfigDir'} ."/".$username);
  -
       my $templatesfiles = &get_name_files($cfghash{'BaseDir'} . $cfghash{'ConfigDir'}, $username, 4);
       my $configsfiles = &get_name_files($cfghash{'BaseDir'} . $cfghash{'ConfigDir'}, $username, 6);
   
  @@ -154,113 +154,112 @@
       $templatesfiles = &strsort($templatesfiles);
       $configsfiles = &strsort($configsfiles);
       
  -    my @@templatesarray = split(/ /,$templatesfiles);
  -    my @@configsarray = split(/ /,$configsfiles);
  +    my @templatesarray = split(/ /,$templatesfiles);
  +    my @configsarray = split(/ /,$configsfiles);
       
       
  -#
        $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1)) .
  -        $cgi->hidden(-name => 'form', -default => ['']) .
  +     $cgi->hidden(-name => 'password', -default => $password ) .
   # Begin with templates part         
  -        "<font size=+1>" .
  -        "<br> Active User: $username<br><br>\n" .
  -        "</font>" .
  -        "<table> <caption>Templates</caption>" .
  -        "  <td>" . 
  -        "    <td>" .
  -        $cgi->scrolling_list(
  -            -name => 'templatelist',
  -            -value => [@@templatesarray],
  -            -size => 3
  -        ) .
  -        "   </td>" .
  -        "  <td>" .
  -        "    <table>" .
  -        "   <td>" .
  -        "   <tr>" .
  -        "     <td>" .
  -        $cgi->submit(-name => 'dialog', -value => 'Copy_Temp') .
  -        "     </td>" .
  -        "   </tr>" .
  -        "   <tr>" .
  -        "     <td>" .
  -        $cgi->submit(-name => 'dialog', -value => 'View') .
  -        "     </td>" .
  -        "   </tr>" .
  -        "   </td>" .
  -        "   </table>" .
  -        "   </td>" .
  -        "   </table>" .
  -        " </td>" .
  -        "</table>" .
  +     "<font size=+1>" .
  +     "<br> Active User: $username<br><br>\n" .
  +     "</font>" .
  +     "<table> <caption>Templates</caption>" .
  +     "  <td>" . 
  +     "    <td>" .
  +     $cgi->scrolling_list(
  +        -name => 'templatelist',
  +        -value => [@templatesarray],
  +        -size => 3
  +     ) .
  +     "   </td>" .
  +     "  <td>" .
  +     "    <table>" .
  +     "   <td>" .
  +     "   <tr>" .
  +     "     <td>" .
  +     $cgi->submit(-name => 'dialog', -value => 'Copy_Temp') .
  +     "     </td>" .
  +     "   </tr>" .
  +     "   <tr>" .
  +     "     <td>" .
  +     $cgi->submit(-name => 'dialog', -value => 'View') .
  +     "     </td>" .
  +     "   </tr>" .
  +     "   </td>" .
  +     "   </table>" .
  +     "   </td>" .
  +     "   </table>" .
  +     " </td>" .
  +     "</table>" .
   
   # Now the configuration part         
  -        "<br><br>" .
  -        "<table> <caption>Configuration</caption>" .
  -        "<td>" .
  -        "    <td>" .
  -        $cgi->scrolling_list(
  -            -name => 'configslist',
  -            -value => [@@configsarray],
  -            -size => 10
  -        ) .
  -        "   </td>" .
  -        "   <td>" .
  -        "     <table>" .
  -
  -        "      <tr><td>" .
  -        $cgi->submit(-name => 'dialog', -value => 'New') .
  -        "      </td></tr>" .
  -
  -        "      <tr><td>" .
  -        $cgi->submit(-name => 'dialog', -value => 'Copy_Conf') .
  -        "      </td></tr>" .
  -
  -        "      <tr><td>" .
  -        $cgi->submit(-name => 'dialog', -value => 'Edit') .
  -        "      </td></tr>" .
  -
  -        "      <tr><td>" .
  -        $cgi->submit(-name => 'dialog', -value => 'Del') .
  -        "      </td></tr>" .
  -
  -        "      <tr><td>" .
  -        $cgi->submit(-name => 'dialog', -value => 'Run') .
  -        "      </td></tr>" .
  -
  -        "      <tr><td>" .
  -        $cgi->submit(-name => 'dialog', -value => 'Config_rights') .
  -        "      </td></tr>" .
  -
  -        "    </table>" .
  -        "  </td>" .
  -        "<td>" .
  -        "</table>" ;
  -
  -
  -        $page .= $cgi->endform;  
  +     "<br><br>" .
  +     "<table> <caption>Configuration</caption>" .
  +     "<td>" .
  +     "    <td>" .
  +     $cgi->scrolling_list(
  +        -name => 'configslist',
  +        -value => [@configsarray],
  +        -size => 10
  +      ) .
  +      "   </td>" .
  +      "   <td>" .
  +      "     <table>" .
  +      "      <tr><td>" .
  +      $cgi->submit(-name => 'dialog', -value => 'New') .
  +      "      </td></tr>" .
  +      "      <tr><td>" .
  +      $cgi->submit(-name => 'dialog', -value => 'Copy_Conf') .
  +      "      </td></tr>" .
  +      "      <tr><td>" .
  +      $cgi->submit(-name => 'dialog', -value => 'Edit') .
  +      "      </td></tr>" .
  +      "      <tr><td>" .
  +      $cgi->submit(-name => 'dialog', -value => 'Del') .
  +      "      </td></tr>" .
  +      "      <tr><td>" .
  +      $cgi->submit(-name => 'dialog', -value => 'Run') .
  +      "      </td></tr>" .
  +      "      <tr><td>" .
  +      $cgi->submit(-name => 'dialog', -value => 'Config_rights') .
  +      "      </td></tr>" .
  +      "    </table>" .
  +      "  </td>" .
  +      "<td>" .
  +      "</table>" .
  +      $cgi->endform;  
   
   }
   elsif ($dialog eq 'Edit') {
       #   enter Edit form
  -        $page .= &edit($cgi->param('configslist'));
  +    $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1));
  +    $page .= &edit($cgi->param('configslist'));
  +    $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
  +    $page .= $cgi->endform;
   } 
   elsif ($dialog eq 'View') {
       #   enter View form
  +    $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1));
       $page .= &view($cgi->param('templatelist'));
  +    $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
  +    $page .= $cgi->endform;
   }
   elsif ($dialog eq 'New') {
       $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1));
  +    $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
       $page .= &new($cfghash{'BaseDir'} . $cfghash{'ConfigDir'}, $username);
       $page .= $cgi->endform;
   }
   elsif ($dialog eq 'New_file') {
       $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1));
  +    $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
       $page .= &newfile($cfghash{'BaseDir'} . $cfghash{'ConfigDir'}, $username, $cgi->param('newfile'), $cgi->param('new_rights'));
       $page .= $cgi->endform;
   }
   elsif ($dialog eq 'Config_rights') {
       $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1));
  +    $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
       my $configfile;        
       if (! defined $cgi->param('configslist') ) {
           $configfile = '';
  @@ -273,6 +272,7 @@
   }
   elsif ($dialog eq 'Change_rights') {
       $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1));
  +    $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
       $page .= &change_rights($cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" .  $cgi->param('filename'), $cgi->param('changerights') );
       $page .= $cgi->endform;
   }
  @@ -292,22 +292,22 @@
   ########################################################################################
   sub get_name_files {
   ########################################################################################
  -    my ($dirname, $user, $rights) = @@_;
  +    my ($dirname, $user, $rights) = @_;
       my $filel = '';
  -    my @@filelarray;
  +    my @filelarray;
       my $filelist = '';
       my $subdir = '';
       my $filemode = '';
       my $entry = '';
   
       my $dirlist = &readsubdir($dirname . "/" );    
  -    my @@dirarray =  split (/ /, $dirlist);
  +    my @dirarray =  split (/ /, $dirlist);
   
  -    DIR: foreach $subdir (@@dirarray)  {
  +    DIR: foreach $subdir (@dirarray)  {
           next DIR if $subdir eq $user;
           $filel = &readdir($dirname . "/" . $subdir . "/") ;
  -        @@filelarray = split (/ /, $filel);
  -        FILE: foreach $entry (@@filelarray) {
  +        @filelarray = split (/ /, $filel);
  +        FILE: foreach $entry (@filelarray) {
               my $path = $dirname . "/" . $subdir . "/" . $entry;
               next FILE if  (((stat($dirname . "/" . $subdir . "/" . $entry))[2]) & 07)  !=  $rights;
               $filelist .= $subdir . "/" . $entry . " ";
  @@ -322,14 +322,14 @@
   ########################################################################################
   sub get_own_files {
   ########################################################################################
  -    my ($dirname, $user) = @@_;
  +    my ($dirname, $user) = @_;
       my $filelist = '';
       my $entry = '';
   
       my $flist = &readdir($dirname . "/" . $user . "/");
  -    my @@flistarray = split (/ /,$flist);
  +    my @flistarray = split (/ /,$flist);
   
  -    foreach $entry (@@flistarray) {
  +    foreach $entry (@flistarray) {
           $filelist .= $user . "/" . $entry . " ";
       }
   
  @@ -341,7 +341,7 @@
   ########################################################################################
   sub edit {
   ########################################################################################
  -    my ($file) = @@_;
  +    my ($file) = @_;
       my $text;
       #   enter Edit form
       if($file) {
  @@ -350,8 +350,7 @@
       } else {
           $text = $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1)) .
           "<font color=red>Missing iilename<br><br>\n" .
  -        $cgi->submit(-name => 'dialog', -value => 'Back') .
  -        $cgi->endform;
  +        $cgi->submit(-name => 'dialog', -value => 'Back') ;
       }
       return $text;
   }
  @@ -361,17 +360,15 @@
   ########################################################################################
   sub view {
   ########################################################################################
  -    my ($file) = @@_; 
  +    my ($file) = @_; 
       my $text;
       
       if ($file) {
           my $filename = $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $cgi->param('templatelist');
           &editconfig($filename, 'r', $username);
       } else {
  -        $text .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1)) .
  -        "<font color=red>Missing filename<br><br>\n" .
  -        $cgi->submit(-name => 'dialog', -value => 'Back') .
  -        $cgi->endform;
  +        $text .= "<font color=red>Missing filename<br><br>\n" .
  +        $cgi->submit(-name => 'dialog', -value => 'Back') ;
       }
       return $text;
   }
  @@ -381,7 +378,7 @@
   #########################################################################################
   sub new {
   ########################################################################################
  -    my ( $dirname, $user ) = @@_;
  +    my ( $dirname, $user ) = @_;
       my $text = '';
   
       $text= "<font size=+2>" .
  @@ -433,32 +430,43 @@
   ########################################################################################
   sub newfile {
   ########################################################################################
  -    my ( $dirname, $user, $newfilename, $newrights ) = @@_;
  +    my ( $dirname, $user, $newfilename, $newrights ) = @_;
       my $text = '';
       my $newpath = $dirname . "/" . $user . "/" . $newfilename;
  +    my $filesinpath = &readdir($dirname . "/" . $user . "/");
  +    my @filesinpatharray = split(/ /,$filesinpath);
  +    my $canwrite = 1;   # true
       my $filerights = '';
   
       $text= "<font size=+2>" .
  -    "Creating New File:<br><br>" .
  +    "Creating New File: $newfilename <br><br>" .
       "</font><br><br><br>" ;
  -    system("touch $newpath") && die "Cannot create new file";
  -    if ($newrights eq "private" ) {
  -        $filerights = '';
  -    } elsif ($newrights eq "protected" ) {
  -        $filerights = "r";
  -    } elsif ($newrights eq "public" ) {
  -        $filerights = "rw";
  +    foreach (@filesinpatharray) {
  +        if ( $_ eq $newfilename) { $canwrite = 0; };
  +    } 
  +    $text .= "$canwrite<br><br>"; 
  +    if ( $canwrite ) { 
  +        system("touch $newpath") && die "Cannot create new file";
  +        if ($newrights eq "private" ) {
  +            $filerights = '';
  +        } elsif ($newrights eq "protected" ) {
  +            $filerights = "r";
  +        } elsif ($newrights eq "public" ) {
  +            $filerights = "rw";
  +        } else {
  +            die "Unknown file rights";   
  +        }
  +        $text .= "Creating the new file $newpath<br><br>";
  +        system("touch $newpath") && die "Cannot create new file";
  +        $text .= "Setting new file rights for $newpath<br><br>";
  +        system("chmod u=rw $newpath") && die "Cannot set new file rights";
  +        system("chmod o=$filerights $newpath") && die "Cannot set new file rights";
  +        # Checking that file dont exist: TODO
  +        $text .= "<br><br><br>" ;
       } else {
  -        die "Unknown file rights";   
  +        $text .= "<font color=red>Cannot write file. It exists<br><br>\n" ;
       }
  -    $text .= "Creating the new file $newpath<br><br>";
  -    system("touch $newpath") && die "Cannot create new file";
  -    $text .= "Setting new file rights for $newpath<br><br>";
  -    system("chmod u=rw $newpath") && die "Cannot set new file rights";
  -    system("chmod o=$filerights $newpath") && die "Cannot set new file rights";
  -    # Checking that file dont exist: TODO
  -    $text .= "<br><br><br>" .
  -    $cgi->submit(-name => 'dialog', -value => 'Back');
  +    $text .= $cgi->submit(-name => 'dialog', -value => 'Back');
   
       return $text;
   }
  @@ -469,18 +477,12 @@
   ########################################################################################
   sub config_rights {
   ########################################################################################
  -    my ( $namefile, $user ) = @@_; 
  +    my ( $namefile, $user ) = @_; 
       my $text = '';
       my $defaultright = '';
  -    my $filerights = stat( (($namefile)[2]) & 07 );
  -    my $fnamehash ={ -name => 'filename',
  -          -default => $namefile,
  -          -size => 20,
  -          -maxlength => 30
  -    };
  -    $fnamehash->{readonly}="";
  +    my $filerights = (stat($cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $namefile))[2] & 07;
       
  -#    $text .= $cgi->hidden(-name => 'filename', -default => ['xxx', 'xxx2'] ) ;
  +    $text .= $cgi->hidden(-name => 'filename', -default => $namefile ) ;
       if ( $filerights == 6 ) {
           $defaultright = "public" ;     
       } elsif ( $filerights == 4 ) {
  @@ -489,7 +491,7 @@
           $defaultright = "private" ;
       }
   
  -    $text= "<font size=+2>" .
  +    $text .= "<font size=+2>" .
       "Changing rights of file:<br><br>" ;
       
       if ($namefile ne '') {
  @@ -498,7 +500,7 @@
               $text .= "<table>" .
               "<tr>" .
               " <td>" . 
  -            $cgi->textfield($fnamehash). 
  +            "$namefile<br>" .
               " </td>" .
               " <td>" . 
               $cgi->scrolling_list(
  @@ -514,15 +516,14 @@
               $cgi->submit(-name => 'dialog', -value => 'Back') .
               $cgi->submit(-name => 'dialog', -value => 'Change_rights');
           } else {
  -            $text .= "<font color=red>You can only change file rights in your directory<br><br>\n" .
  -            $cgi->submit(-name => 'dialog', -value => 'Back');
  +            $text .= "<font color=red>You can only change file rights in your directory<br><br>\n";
           }
       } else {
  -
  -        $text .= "<font color=red>Missing filename<br><br>\n" .
  -        $cgi->submit(-name => 'dialog', -value => 'Back');
  +        $text .= "<font color=red>Missing filename<br><br>\n" ;
       }
   
  +    $text .= $cgi->submit(-name => 'dialog', -value => 'Back');
  +
      return $text;
   }
   ########################################################################################
  @@ -531,7 +532,7 @@
   ########################################################################################
   sub change_rights {
   ########################################################################################
  -    my ( $filename, $newrights ) = @@_;
  +    my ( $filename, $newrights ) = @_;
       my $text = '';
       my $filerights = '';
   
  @@ -548,7 +549,6 @@
       } else {
              die "Unknown file rights";
       }
  -#    $text .= "Name : $filename<br>Rights: $filerights<br>" ;
       system("chmod o=$filerights $filename") && die "Cannot set new file rights";
       $text .= "<br>Done.<br><br>" .
       $cgi->submit(-name => 'dialog', -value => 'Back');
  @@ -563,7 +563,7 @@
   sub read_config {
   ########################################################################################
   
  -my ($cfgfile) = @@_;   
  +my ($cfgfile) = @_;   
   my %cfghash ;
   my $cfgin ;
   my $key;
  @@ -601,7 +601,7 @@
   ########################################################################################
   sub validpassword {
   ########################################################################################
  -    my ($user, $password) = @@_;
  +    my ($user, $password) = @_;
   
       my $returnvalue = 0;
       my $uname;
  @@ -630,7 +630,7 @@
   ########################################################################################
   sub readsubdir {
   ########################################################################################
  -    my ( $dir ) = @@_;
  +    my ( $dir ) = @_;
       my $filestring = "";
       my $direntry = "";
   
  @@ -655,7 +655,7 @@
   ########################################################################################
   sub readdir {
   ########################################################################################
  -    my ( $dir ) = @@_;
  +    my ( $dir ) = @_;
       my $filestring = "";
       my $direntry = "";
   
  @@ -679,12 +679,12 @@
   ########################################################################################
   sub strsort {
   ########################################################################################
  -    my ( $sortstr ) = @@_;
  +    my ( $sortstr ) = @_;
   
  -    my @@sortarray = split (/ /, $sortstr);
  +    my @sortarray = split (/ /, $sortstr);
        
  -    @@sortarray = reverse sort {$b cmp $a} @@sortarray;
  -    $sortstr = join(" ", @@sortarray);
  +    @sortarray = reverse sort {$b cmp $a} @sortarray;
  +    $sortstr = join(" ", @sortarray);
   
       return $sortstr;
   }
  @@ -697,7 +697,7 @@
   ########################################################################################
   sub editconfig {
   ########################################################################################
  -    my ($file, $mode, $user) = @@_;
  +    my ($file, $mode, $user) = @_;
       my $text = '';
       my $filein ;
       my $readonly ;

From ossp-cvs-owner@ossp.org  Wed May 15 17:34:07 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D5BCB76396; Wed, 15 May 2002 17:34:06 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea.cgi
Message-Id: <20020515153406.D5BCB76396@mail.ossp.org>
Date: Wed, 15 May 2002 17:34:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   15-May-2002 17:34:06
  Branch: HEAD                             Handle: 2002051516340600

  Modified files:
    ossp-pkg/tabea          tabea.cgi

  Log:
    Appended copy templates section

  Summary:
    Revision    Changes     Path
    1.19        +0  -1      ossp-pkg/tabea/tabea.cgi
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea.cgi
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 tabea.cgi
  --- ossp-pkg/tabea/tabea.cgi	15 May 2002 13:04:20 -0000	1.18
  +++ ossp-pkg/tabea/tabea.cgi	15 May 2002 15:34:06 -0000	1.19
  @@ -27,7 +27,6 @@
   ##
   ##  tabea.cgi: Tabea CGI (syntax: Perl)
   ##
  -##
   
   require 5.000;
   use strict;

From ossp-cvs-owner@ossp.org  Thu May 16 14:22:05 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 862EE76363; Thu, 16 May 2002 14:22:05 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea.cgi
Message-Id: <20020516122205.862EE76363@mail.ossp.org>
Date: Thu, 16 May 2002 14:22:05 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   16-May-2002 14:22:05
  Branch: HEAD                             Handle: 2002051613220500

  Modified files:
    ossp-pkg/tabea          tabea.cgi

  Log:
    Appended delete section

  Summary:
    Revision    Changes     Path
    1.20        +264 -140   ossp-pkg/tabea/tabea.cgi
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea.cgi
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 tabea.cgi
  --- ossp-pkg/tabea/tabea.cgi	15 May 2002 15:34:06 -0000	1.19
  +++ ossp-pkg/tabea/tabea.cgi	16 May 2002 12:22:05 -0000	1.20
  @@ -27,6 +27,7 @@
   ##
   ##  tabea.cgi: Tabea CGI (syntax: Perl)
   ##
  +##
   
   require 5.000;
   use strict;
  @@ -35,13 +36,10 @@
   
   $|++;
   
  -
  -my $cfgfile = "./tabea.cfg";        # Name of configuration file
  -
  -my $pwdfile = "./tabea.pw";
  +my $cfgfile    = "./tabea.cfg";
  +my $pwdfile    = "./tabea.pw";
   my $configsdir = "./tabea.d";
   
  -
   # establish my configuration
   my $MY = {};
   $MY->{PROGNAME} = ($0 =~ m|^.*?([^/]+?)(?:\.[^/.]+)?$|)[0];
  @@ -70,22 +68,16 @@
   #   update cookies
   my $cookies = [];
   foreach my $param (qw(username)) { # FIXME!
  -    my $cookieparam;
  -    if (defined $cgi->param($param)) {
  -        $cookieparam = $cgi->param($param);
  -    } else {
  -        $cookieparam = '';
  -    }
  -    if ($cookieparam ne '' and ($cookieparam ne $cgi->cookie($param))) {
  +    if ($cgi->param($param) ne '' and ($cgi->param($param) ne $cgi->cookie($param))) {
           push(@{$cookies}, $cgi->cookie(
                -name    => $param,
  -             -value   => $cookieparam,
  +             -value   => $cgi->param($param),
                -expires => '+1d',
                -path    => $cgi->url(-absolute => 1),
                -secure  => 0
           ));
       }
  -    if ($cookieparam eq '' and $cookieparam ne '') {
  +    if ($cgi->param($param) eq '' and $cgi->cookie($param) ne '') {
            $cgi->param(-name => $param, -value => [$cgi->cookie($param)]);
       }
   }
  @@ -93,7 +85,6 @@
   # Read the configuration
   my %cfghash = read_config($cfgfile);
   
  -
   #   fetch parameters
   my $dialog   = $cgi->param("dialog")   || "";
   my $username = $cgi->param("username") || "";
  @@ -105,46 +96,45 @@
   if ($cfghash{"TabeaUser"} ne '') {
   
   if ($dialog eq "") {
  -    $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1)) .
  -    "<table cellspacing=0 cellpadding=0>" .
  -    "  <tr>" .
  -    "    <td>Username:</td>" .
  -    "    <td>" .
  -    $cgi->textfield(
  -        -name => 'username',
  -        -default => $username,
  -        -size => 20,
  -        -maxlength => 8
  -    ) .
  -    "    </td>" .
  -    "  </tr>" .
  -    "  <tr>" .
  -    "    <td>Password:</td>" .
  -    "    <td>" .
  -    $cgi->password_field(
  -        -name => 'password',
  -        -value => $password,
  -        -size => 20,
  -        -maxlength => 80
  -    ) .
  -    "    </td>" .
  -    "  </tr>" .
  -    "  <tr>" .
  -    "    <td colspan=2 align=right>" .
  -    $cgi->reset() .
  -    $cgi->submit(-name => 'dialog', -value => 'login') .
  -    "    </td>" .
  -    "  </tr>" .
  -    "</table>" .
  -    $cgi->endform;
  +    $page .= 
  +        $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1)) .
  +        "<table cellspacing=0 cellpadding=0>" .
  +        "  <tr>" .
  +        "    <td>Username:</td>" .
  +        "    <td>" .
  +        $cgi->textfield(
  +            -name => 'username',
  +            -default => $username,
  +            -size => 20,
  +            -maxlength => 8
  +        ) .
  +        "    </td>" .
  +        "  </tr>" .
  +        "  <tr>" .
  +        "    <td>Password:</td>" .
  +        "    <td>" .
  +        $cgi->password_field(
  +            -name => 'password',
  +            -value => $password,
  +            -size => 20,
  +            -maxlength => 80
  +        ) .
  +        "    </td>" .
  +        "  </tr>" .
  +        "  <tr>" .
  +        "    <td colspan=2 align=right>" .
  +        $cgi->reset() .
  +        $cgi->submit(-name => 'dialog', -value => 'login') .
  +        "    </td>" .
  +        "  </tr>" .
  +        "</table>" .
  +        $cgi->endform;
   }
   elsif (($dialog eq 'login') || ($dialog eq 'Back')) {
       #   enter Select form
  -
       
       &validpassword($username, $password, $cfghash{'BaseDir'}.$cfghash{'PasswdFile'}) || print STDOUT $cgi->redirect(-uri => $cgi->url(-full => 1), -type => "text/html");
   
  -     
       my $templatesfiles = &get_name_files($cfghash{'BaseDir'} . $cfghash{'ConfigDir'}, $username, 4);
       my $configsfiles = &get_name_files($cfghash{'BaseDir'} . $cfghash{'ConfigDir'}, $username, 6);
   
  @@ -156,78 +146,86 @@
       my @templatesarray = split(/ /,$templatesfiles);
       my @configsarray = split(/ /,$configsfiles);
       
  -    
  -     $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1)) .
  -     $cgi->hidden(-name => 'password', -default => $password ) .
  -# Begin with templates part         
  -     "<font size=+1>" .
  -     "<br> Active User: $username<br><br>\n" .
  -     "</font>" .
  -     "<table> <caption>Templates</caption>" .
  -     "  <td>" . 
  -     "    <td>" .
  -     $cgi->scrolling_list(
  -        -name => 'templatelist',
  -        -value => [@templatesarray],
  -        -size => 3
  -     ) .
  -     "   </td>" .
  -     "  <td>" .
  -     "    <table>" .
  -     "   <td>" .
  -     "   <tr>" .
  -     "     <td>" .
  -     $cgi->submit(-name => 'dialog', -value => 'Copy_Temp') .
  -     "     </td>" .
  -     "   </tr>" .
  -     "   <tr>" .
  -     "     <td>" .
  -     $cgi->submit(-name => 'dialog', -value => 'View') .
  -     "     </td>" .
  -     "   </tr>" .
  -     "   </td>" .
  -     "   </table>" .
  -     "   </td>" .
  -     "   </table>" .
  -     " </td>" .
  -     "</table>" .
  +    $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1)) .
  +    $cgi->hidden(-name => 'password', -default => $password ) .
  +        # Begin with templates part         
  +        "<font size=+1>" .
  +        "<br> Active User: $username<br><br>\n" .
  +        "</font>" .
  +        "<table> <caption>Templates</caption>" .
  +        "  <td>" . 
  +        "    <td>" .
  +        $cgi->scrolling_list(
  +            -name => 'templatelist',
  +            -value => [@templatesarray],
  +            -size => 3
  +        ) .
  +        "   </td>" .
  +        "  <td>" .
  +        "    <table>" .
  +        "   <td>" .
  +        "   <tr>" .
  +        "     <td>" .
  +        $cgi->submit(-name => 'dialog', -value => 'Copy_Temp') .
  +        "     </td>" .
  +        "   </tr>" .
  +        "   <tr>" .
  +        "     <td>" .
  +        $cgi->submit(-name => 'dialog', -value => 'View') .
  +        "     </td>" .
  +        "   </tr>" .
  +        "   </td>" .
  +        "   </table>" .
  +        "   </td>" .
  +        "   </table>" .
  +        " </td>" .
  +        "</table>" .
   
   # Now the configuration part         
  -     "<br><br>" .
  -     "<table> <caption>Configuration</caption>" .
  -     "<td>" .
  -     "    <td>" .
  -     $cgi->scrolling_list(
  -        -name => 'configslist',
  -        -value => [@configsarray],
  -        -size => 10
  -      ) .
  -      "   </td>" .
  -      "   <td>" .
  -      "     <table>" .
  -      "      <tr><td>" .
  -      $cgi->submit(-name => 'dialog', -value => 'New') .
  -      "      </td></tr>" .
  -      "      <tr><td>" .
  -      $cgi->submit(-name => 'dialog', -value => 'Copy_Conf') .
  -      "      </td></tr>" .
  -      "      <tr><td>" .
  -      $cgi->submit(-name => 'dialog', -value => 'Edit') .
  -      "      </td></tr>" .
  -      "      <tr><td>" .
  -      $cgi->submit(-name => 'dialog', -value => 'Del') .
  -      "      </td></tr>" .
  -      "      <tr><td>" .
  -      $cgi->submit(-name => 'dialog', -value => 'Run') .
  -      "      </td></tr>" .
  -      "      <tr><td>" .
  -      $cgi->submit(-name => 'dialog', -value => 'Config_rights') .
  -      "      </td></tr>" .
  -      "    </table>" .
  -      "  </td>" .
  -      "<td>" .
  -      "</table>" .
  -      $cgi->endform;  
  +        "<br><br>" .
  +        "<table> <caption>Configuration</caption>" .
  +        "<td>" .
  +        "    <td>" .
  +        $cgi->scrolling_list(
  +            -name => 'configslist',
  +            -value => [@configsarray],
  +            -size => 10
  +        ) .
  +        "   </td>" .
  +        "   <td>" .
  +        "     <table>" .
  +
  +        "      <tr><td>" .
  +        $cgi->submit(-name => 'dialog', -value => 'New') .
  +        "      </td></tr>" .
  +
  +        "      <tr><td>" .
  +        $cgi->submit(-name => 'dialog', -value => 'Copy_Conf') .
  +        "      </td></tr>" .
  +
  +        "      <tr><td>" .
  +        $cgi->submit(-name => 'dialog', -value => 'Edit') .
  +        "      </td></tr>" .
  +
  +        "      <tr><td>" .
  +        $cgi->submit(-name => 'dialog', -value => 'Del') .
  +        "      </td></tr>" .
  +
  +        "      <tr><td>" .
  +        $cgi->submit(-name => 'dialog', -value => 'Run') .
  +        "      </td></tr>" .
  +
  +        "      <tr><td>" .
  +        $cgi->submit(-name => 'dialog', -value => 'Config_rights') .
  +        "      </td></tr>" .
  +
  +        "    </table>" .
  +        "  </td>" .
  +        "<td>" .
  +        "</table>" ;
  +
  +
  +        $page .= $cgi->endform;  
   
   }
   elsif ($dialog eq 'Edit') {
  @@ -237,6 +235,9 @@
       $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
       $page .= $cgi->endform;
   } 
  +elsif ($dialog eq 'Save') {
  +    ## FIXME
  +}
   elsif ($dialog eq 'View') {
       #   enter View form
       $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1));
  @@ -246,19 +247,19 @@
   }
   elsif ($dialog eq 'New') {
       $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1));
  -    $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
       $page .= &new($cfghash{'BaseDir'} . $cfghash{'ConfigDir'}, $username);
  +    $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
       $page .= $cgi->endform;
   }
   elsif ($dialog eq 'New_file') {
       $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1));
  +    $page .= &newfile($cfghash{'BaseDir'} . $cfghash{'ConfigDir'}, $username, $cgi->param('newfile'), 
  +                      $cgi->param('new_rights'));
       $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
  -    $page .= &newfile($cfghash{'BaseDir'} . $cfghash{'ConfigDir'}, $username, $cgi->param('newfile'), $cgi->param('new_rights'));
       $page .= $cgi->endform;
   }
   elsif ($dialog eq 'Config_rights') {
       $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1));
  -    $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
       my $configfile;        
       if (! defined $cgi->param('configslist') ) {
           $configfile = '';
  @@ -266,15 +267,41 @@
           $configfile = $cgi->param('configslist');
       }
       $page .= &config_rights($configfile, $username);
  -   # $page .= "Returnvalue: " . $cgi->param('filename') . "<br>";
  +    $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
       $page .= $cgi->endform;
   }
   elsif ($dialog eq 'Change_rights') {
       $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1));
  +    $page .= &change_rights($cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" .  $cgi->param('filename'), 
  +                            $cgi->param('changerights') );
  +    $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
  +    $page .= $cgi->endform;
  +}
  +elsif ($dialog eq 'Copy_Temp') {
  +    $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1));
  +    $page .= &copy_file($cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" .$cgi->param('templatelist'), $username );
       $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
  -    $page .= &change_rights($cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" .  $cgi->param('filename'), $cgi->param('changerights') );
       $page .= $cgi->endform;
   }
  +elsif ($dialog eq 'Copy_Conf') {
  +    $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1));
  +    $page .= &copy_file($cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" .$cgi->param('configslist'), $username );
  +    $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
  +    $page .= $cgi->endform;
  +}
  +elsif ($dialog eq 'Copy' ) {
  +    $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1));
  +    $page .= &copy($cgi->param('srcfile'), $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" .  $username . "/". $cgi->param('dstfile'));
  +    $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
  +$page .= $cgi->endform;
  +}
  +elsif ($dialog eq 'Del' ) {
  +    $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1));
  +    $page .= &del($cgi->param('configslist'), $username );
  +    $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
  +    $page .= $cgi->endform;
  +}
  +
   } else {
       die "no configuration found";
   }
  @@ -347,8 +374,7 @@
           my $filename = $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $file;
           &editconfig($filename, 'w', $username);
       } else {
  -        $text = $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1)) .
  -        "<font color=red>Missing iilename<br><br>\n" .
  +        $text .= "<font color=red>Missing filename<br><br>\n" .
           $cgi->submit(-name => 'dialog', -value => 'Back') ;
       }
       return $text;
  @@ -442,10 +468,8 @@
       "</font><br><br><br>" ;
       foreach (@filesinpatharray) {
           if ( $_ eq $newfilename) { $canwrite = 0; };
  -    } 
  -    $text .= "$canwrite<br><br>"; 
  -    if ( $canwrite ) { 
  -        system("touch $newpath") && die "Cannot create new file";
  +    }
  +    if ( $canwrite ) {
           if ($newrights eq "private" ) {
               $filerights = '';
           } elsif ($newrights eq "protected" ) {
  @@ -460,7 +484,6 @@
           $text .= "Setting new file rights for $newpath<br><br>";
           system("chmod u=rw $newpath") && die "Cannot set new file rights";
           system("chmod o=$filerights $newpath") && die "Cannot set new file rights";
  -        # Checking that file dont exist: TODO
           $text .= "<br><br><br>" ;
       } else {
           $text .= "<font color=red>Cannot write file. It exists<br><br>\n" ;
  @@ -480,8 +503,8 @@
       my $text = '';
       my $defaultright = '';
       my $filerights = (stat($cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $namefile))[2] & 07;
  -    
  -    $text .= $cgi->hidden(-name => 'filename', -default => $namefile ) ;
  +   
  +    $text .= $cgi->hidden(-name => 'filename', -default => $namefile ) ; 
       if ( $filerights == 6 ) {
           $defaultright = "public" ;     
       } elsif ( $filerights == 4 ) {
  @@ -515,13 +538,14 @@
               $cgi->submit(-name => 'dialog', -value => 'Back') .
               $cgi->submit(-name => 'dialog', -value => 'Change_rights');
           } else {
  -            $text .= "<font color=red>You can only change file rights in your directory<br><br>\n";
  +            $text .= "<font color=red>You can only change file rights in your own directory<br><br>\n" .
  +            $cgi->submit(-name => 'dialog', -value => 'Back');
           }
       } else {
  -        $text .= "<font color=red>Missing filename<br><br>\n" ;
  -    }
   
  -    $text .= $cgi->submit(-name => 'dialog', -value => 'Back');
  +        $text .= "<font color=red>Missing filename<br><br>\n" .
  +        $cgi->submit(-name => 'dialog', -value => 'Back');
  +    }
   
      return $text;
   }
  @@ -548,6 +572,7 @@
       } else {
              die "Unknown file rights";
       }
  +#    $text .= "Name : $filename<br>Rights: $filerights<br>" ;
       system("chmod o=$filerights $filename") && die "Cannot set new file rights";
       $text .= "<br>Done.<br><br>" .
       $cgi->submit(-name => 'dialog', -value => 'Back');
  @@ -557,6 +582,107 @@
   ########################################################################################
   
   
  +########################################################################################
  +sub copy_file {
  +########################################################################################
  +    my ( $srcfile, $user ) = @_;
  +    my $text = '';
  +    
  +    $text .= $cgi->hidden(-name => 'srcfile', -default => $srcfile ) .
  +    "<font size=+1>" .
  +    "Copying File:<br>" .
  +    "</font>" .
  +    "<br><br>" .
  +    "Active user: $user<br>" .
  +    "<table border=1 width=50%>" .
  +    " <tr>" .
  +    "  <td>Sourcefile :</td>" .
  +    "  <td>Destinationfile</td>" .
  +    " </tr>" .
  +    " <tr>" .
  +    "  <td>$srcfile</td>" . 
  +    "  <td>" .
  +    "   <table>" .
  +    "   <tr>" .
  +    "    <td>" . $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $user . "/</td>" .
  +    "    <td>" .
  +    $cgi->textfield(-name=>'dstfile',
  +                    -default=>'',
  +                    -size=>30,
  +                    -maxlength=>80) .
  +    "   </td>" .
  +    "   </tr>" .
  +    "   </table>" .
  +    "  </td>" .
  +    " </tr>" .
  +    "</table>" .
  +    "<br><br>" .
  +    "<table>" .
  +    " <td>" .
  +    " <td>" .
  +    $cgi->submit(-name => 'dialog', -value => 'Back').
  +    " </td>" .    
  +    " <td>" .
  +    $cgi->submit(-name => 'dialog', -value => 'Copy').
  +    " </td>" .    
  +    " </td>" .    
  +    "</table>" ;
  +    
  +
  +    return $text; 
  +
  +}
  +########################################################################################
  +
  +
  +########################################################################################
  +sub del {
  +########################################################################################
  +    my ( $delfile, $user ) = @_;
  +    my $text = '';
  +    my $fpath = $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $delfile;
  +
  +    $text= "<font size=+2>" .
  +    "Delete File: $fpath<br><br>\n" .
  +    "</font>" .
  +    "<br><br>" ;
  +    $delfile =~ m{^([a-zA-Z0-9!"<A3>$%^&*()-_=+#~]+)/(.+)}sg;
  +    if ( $1 eq $user ) {
  +            system("rm $fpath") && die "Cannot delete file";
  +    } else {
  +        $text .= "<font color=red>You can only delete file in your own directory<br><br>\n" ;
  +    }
  +    
  +    $text .= $cgi->submit(-name => 'dialog', -value => 'Back');
  +
  +    return $text;
  +}
  +########################################################################################
  +
  +
  +
  +########################################################################################
  +sub copy {
  +########################################################################################
  +    my ( $srcf, $dstf ) = @_;
  +    my $text = '';
  +
  +    $text .= "<font size=+1>" .
  +    "Copying File:<br>" .
  +    "</font><br><br>" .
  +    "Copying from <font size=+1>$srcf</font> to <font size=+1>$dstf</font><br><br>" ;
  +
  +    system("cp $srcf $dstf") && die "Cannot copy file";
  +    system("chmod o= $dstf") && die "Cannot change file rights";
  +
  +    $text .= $cgi->submit(-name => 'dialog', -value => 'Back');
  +
  +    return $text;
  +}
  +########################################################################################
  +
  +
  +
   
   ########################################################################################
   sub read_config {
  @@ -742,9 +868,7 @@
       }
       $page .= "  <td>" .
       " </td>" .
  -    "</table>" .
  -
  +    "</table>" ;
   
  -    $cgi->endform;
   }
   ########################################################################################

From ossp-cvs-owner@ossp.org  Thu May 16 17:54:59 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8CDB676363; Thu, 16 May 2002 17:54:59 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea.cgi
Message-Id: <20020516155459.8CDB676363@mail.ossp.org>
Date: Thu, 16 May 2002 17:54:59 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   16-May-2002 17:54:59
  Branch: HEAD                             Handle: 2002051616545900

  Modified files:
    ossp-pkg/tabea          tabea.cgi

  Log:
    Appended run section

  Summary:
    Revision    Changes     Path
    1.21        +104 -10    ossp-pkg/tabea/tabea.cgi
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea.cgi
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 tabea.cgi
  --- ossp-pkg/tabea/tabea.cgi	16 May 2002 12:22:05 -0000	1.20
  +++ ossp-pkg/tabea/tabea.cgi	16 May 2002 15:54:59 -0000	1.21
  @@ -236,7 +236,12 @@
       $page .= $cgi->endform;
   } 
   elsif ($dialog eq 'Save') {
  -    ## FIXME
  +    #  enter save form
  +    $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1));
  +    $page .= "<br>" . $cgi->param('editfile') . "<br>" ;
  +    $page .= &save($cgi->param('editfile'), $cgi->param('editwindow'));
  +    $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
  +    $page .= $cgi->endform;
   }
   elsif ($dialog eq 'View') {
       #   enter View form
  @@ -301,6 +306,16 @@
       $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
       $page .= $cgi->endform;
   }
  +elsif ($dialog eq 'Run' ) {
  +    $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1));
  +    $page .= &run($cgi->param('configslist') );
  +    $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
  +    $page .= $cgi->endform;
  +}
  +else {
  +    die "no correct dialog found";
  +}
  +
   
   } else {
       die "no configuration found";
  @@ -367,20 +382,50 @@
   ########################################################################################
   sub edit {
   ########################################################################################
  -    my ($file) = @_;
  +    my ($editfile) = @_;
       my $text;
       #   enter Edit form
  -    if($file) {
  -        my $filename = $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $file;
  -        &editconfig($filename, 'w', $username);
  +   
  + 
  +
  +    if($editfile) {
  +        my $filename = $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $editfile;
  +        $text .=&editconfig($filename, 'w', $username).
  +        $cgi->hidden(-name => 'editfile', -default => $filename ) ;
       } else {
           $text .= "<font color=red>Missing filename<br><br>\n" .
           $cgi->submit(-name => 'dialog', -value => 'Back') ;
       }
  +    
       return $text;
   }
   ########################################################################################
   
  +########################################################################################
  +sub save {
  +########################################################################################
  +    my ( $file, $edittext) = @_;
  +    my $text = '';
  +    my $fileout; 
  +
  +    $text= "<font size=+2>" .
  +    "Save File: $file<br><br>\n" .
  +    "</font>" .
  +    "<br><br>" ;
  +
  +    $fileout = IO::File->new(">$file");
  +    if (defined $fileout) {
  +        print $fileout $edittext;
  +        $fileout->close;
  +    } else {
  +        $text .= "<font color=red>Cannot save file<br><br>\n" ;
  +    }
  +
  +    $text .= $cgi->submit(-name => 'dialog', -value => 'Back');
  +    
  +    return $text;
  +}
  +########################################################################################
   
   ########################################################################################
   sub view {
  @@ -390,7 +435,7 @@
       
       if ($file) {
           my $filename = $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $cgi->param('templatelist');
  -        &editconfig($filename, 'r', $username);
  +        $text .= &editconfig($filename, 'r', $username);
       } else {
           $text .= "<font color=red>Missing filename<br><br>\n" .
           $cgi->submit(-name => 'dialog', -value => 'Back') ;
  @@ -660,6 +705,54 @@
   ########################################################################################
   
   
  +########################################################################################
  +sub run {
  +########################################################################################
  +    my ( $runfile ) = @_;
  +    my $text = '';
  +    my $rpath = $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $runfile;
  +    my $rcommand = $cfghash{'ExecuteCommand'};
  +    my $output = "/tmp/" .  $cfghash{'ExecuteTempFile'};
  +    my $fileoutput;
  +    my $outputtext = '';
  +
  +    $rcommand =~ s|%{profile}%|$rpath|s;
  +
  +    if (-e $output) {
  +        system("/bin/rm $output");
  +    }
  +
  +
  +    $text= "<font size=+2>" .
  +    "Running Configuration: $rpath<br><br>\n" .
  +    "</font>" .
  +    "<br><br>" .
  +    "Run command: " . $rcommand . "<br>" ;
  +
  +    system("$rcommand > $output 2>&1");
  +
  +    $fileoutput = IO::File->new("<$output");
  +    if(defined $fileoutput) {
  +        while (<$fileoutput>) {
  +            $outputtext .= $_;
  +        }
  +        $fileoutput->close();
  +
  +        my $outputhash ={   -name => 'outputwindow',
  +                            -default => $outputtext,
  +                            -rows    => 40,
  +                            -columns => 80
  +        };
  +        $outputhash->{readonly}="";
  +        $text .= $cgi->textarea($outputhash);
  +     } else {
  +         $text .= "<font color=red>Run command not working<br><br>\n" ;            
  +     }
  +
  +     $text .= $cgi->submit(-name => 'dialog', -value => 'Back');
  +}
  +########################################################################################
  +
   
   ########################################################################################
   sub copy {
  @@ -830,7 +923,7 @@
   
       $filein = IO::File->new("<$file");
       while(<$filein>) { $text .= $_; }
  -    $filein->close; 
  +    $filein->close(); 
   
   
       if ($mode eq 'w') {
  @@ -847,7 +940,7 @@
       if ($mode eq 'r') {
           $textahash->{readonly}="";
       }
  -    $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1)) .
  +    $text .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1)) .
       "<font size=+2>" .
       $titletext . ":   <br><br>\n" .
       "</font>" .
  @@ -862,13 +955,14 @@
       $cgi->submit(-name => 'dialog', -value => 'Back') .
       "   </td>";
       if ($mode eq 'w') {
  -    $page .= "   <td>" .
  +    $text .= "   <td>" .
       $cgi->submit(-name => 'dialog', -value => 'Save') .
       "   </td>";
       }
  -    $page .= "  <td>" .
  +    $text .= "  <td>" .
       " </td>" .
       "</table>" ;
   
  +    return $text;
   }
   ########################################################################################

From ossp-cvs-owner@ossp.org  Fri May 17 10:09:08 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 92F3276363; Fri, 17 May 2002 10:09:07 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea.cgi
Message-Id: <20020517080907.92F3276363@mail.ossp.org>
Date: Fri, 17 May 2002 10:09:07 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   17-May-2002 10:09:07
  Branch: HEAD                             Handle: 2002051709090700

  Modified files:
    ossp-pkg/tabea          tabea.cgi

  Log:
    Changed buttons and forms structure and added a missing check in run

  Summary:
    Revision    Changes     Path
    1.22        +209 -247   ossp-pkg/tabea/tabea.cgi
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea.cgi
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 tabea.cgi
  --- ossp-pkg/tabea/tabea.cgi	16 May 2002 15:54:59 -0000	1.21
  +++ ossp-pkg/tabea/tabea.cgi	17 May 2002 08:09:07 -0000	1.22
  @@ -91,49 +91,60 @@
   my $password = $cgi->param("password") || "";
   my $filename = $cgi->param("filename") || "";
   
  -my $page = '';
  +my $form = '';
   
  -if ($cfghash{"TabeaUser"} ne '') {
  +for my $name (qw(mainw copyt view new copyc edit del run confr newf changer copy save)) {
  +    my $val = $cgi->param("dialog_$name") || "";
  +    if ($val ne '') {
  +        $form = $name;
  +    }
  +}
  +    
  +my $page = $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1));
   
  -if ($dialog eq "") {
  +#if ($dialog eq "") {
  +if ($form eq '') {
  +#    if ($form eq "mainw") {
  +#        $page .= "Form new is login<br><br>";
  +#    }
       $page .= 
  -        $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1)) .
  -        "<table cellspacing=0 cellpadding=0>" .
  -        "  <tr>" .
  -        "    <td>Username:</td>" .
  -        "    <td>" .
  -        $cgi->textfield(
  -            -name => 'username',
  -            -default => $username,
  -            -size => 20,
  -            -maxlength => 8
  -        ) .
  -        "    </td>" .
  -        "  </tr>" .
  -        "  <tr>" .
  -        "    <td>Password:</td>" .
  -        "    <td>" .
  -        $cgi->password_field(
  -            -name => 'password',
  -            -value => $password,
  -            -size => 20,
  -            -maxlength => 80
  -        ) .
  -        "    </td>" .
  -        "  </tr>" .
  -        "  <tr>" .
  -        "    <td colspan=2 align=right>" .
  -        $cgi->reset() .
  -        $cgi->submit(-name => 'dialog', -value => 'login') .
  -        "    </td>" .
  -        "  </tr>" .
  -        "</table>" .
  -        $cgi->endform;
  +    "<table cellspacing=0 cellpadding=0>" .
  +    "  <tr>" .
  +    "    <td>Username:</td>" .
  +    "    <td>" .
  +    $cgi->textfield(
  +        -name => 'username',
  +        -default => $username,
  +        -size => 20,
  +        -maxlength => 8
  +    ) .
  +    "    </td>" .
  +    "  </tr>" .
  +    "  <tr>" .
  +    "    <td>Password:</td>" .
  +    "    <td>" .
  +    $cgi->password_field(
  +        -name => 'password',
  +        -value => $password,
  +        -size => 20,
  +        -maxlength => 80
  +    ) .
  +    "    </td>" .
  +    "  </tr>" .
  +    "  <tr>" .
  +    "    <td colspan=2 align=right>" .
  +    $cgi->reset() .
  +    $cgi->submit(-name => 'dialog_mainw', -value => 'login') .
  +    "    </td>" .
  +    "  </tr>" .
  +    "</table>" ;
   }
  -elsif (($dialog eq 'login') || ($dialog eq 'Back')) {
  +#elsif (($dialog eq 'login') || ($dialog eq 'Back')) {
  +elsif ($form eq 'mainw') {
       #   enter Select form
       
  -    &validpassword($username, $password, $cfghash{'BaseDir'}.$cfghash{'PasswdFile'}) || print STDOUT $cgi->redirect(-uri => $cgi->url(-full => 1), -type => "text/html");
  +    &validpassword($username, $password, $cfghash{'BaseDir'}.$cfghash{'PasswdFile'}) 
  +                || print STDOUT $cgi->redirect(-uri => $cgi->url(-full => 1), -type => "text/html");
   
       my $templatesfiles = &get_name_files($cfghash{'BaseDir'} . $cfghash{'ConfigDir'}, $username, 4);
       my $configsfiles = &get_name_files($cfghash{'BaseDir'} . $cfghash{'ConfigDir'}, $username, 6);
  @@ -145,126 +156,106 @@
       
       my @templatesarray = split(/ /,$templatesfiles);
       my @configsarray = split(/ /,$configsfiles);
  -    
  -    $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1)) .
  +           
  +    $page .= 
       $cgi->hidden(-name => 'password', -default => $password ) .
  -        # Begin with templates part         
  -        "<font size=+1>" .
  -        "<br> Active User: $username<br><br>\n" .
  -        "</font>" .
  -        "<table> <caption>Templates</caption>" .
  -        "  <td>" . 
  -        "    <td>" .
  -        $cgi->scrolling_list(
  -            -name => 'templatelist',
  -            -value => [@templatesarray],
  -            -size => 3
  -        ) .
  -        "   </td>" .
  -        "  <td>" .
  -        "    <table>" .
  -        "   <td>" .
  -        "   <tr>" .
  -        "     <td>" .
  -        $cgi->submit(-name => 'dialog', -value => 'Copy_Temp') .
  -        "     </td>" .
  -        "   </tr>" .
  -        "   <tr>" .
  -        "     <td>" .
  -        $cgi->submit(-name => 'dialog', -value => 'View') .
  -        "     </td>" .
  -        "   </tr>" .
  -        "   </td>" .
  -        "   </table>" .
  -        "   </td>" .
  -        "   </table>" .
  -        " </td>" .
  -        "</table>" .
  -
  -# Now the configuration part         
  -        "<br><br>" .
  -        "<table> <caption>Configuration</caption>" .
  -        "<td>" .
  -        "    <td>" .
  -        $cgi->scrolling_list(
  -            -name => 'configslist',
  -            -value => [@configsarray],
  -            -size => 10
  -        ) .
  -        "   </td>" .
  -        "   <td>" .
  -        "     <table>" .
  -
  -        "      <tr><td>" .
  -        $cgi->submit(-name => 'dialog', -value => 'New') .
  -        "      </td></tr>" .
  -
  -        "      <tr><td>" .
  -        $cgi->submit(-name => 'dialog', -value => 'Copy_Conf') .
  -        "      </td></tr>" .
  -
  -        "      <tr><td>" .
  -        $cgi->submit(-name => 'dialog', -value => 'Edit') .
  -        "      </td></tr>" .
  -
  -        "      <tr><td>" .
  -        $cgi->submit(-name => 'dialog', -value => 'Del') .
  -        "      </td></tr>" .
  -
  -        "      <tr><td>" .
  -        $cgi->submit(-name => 'dialog', -value => 'Run') .
  -        "      </td></tr>" .
  -
  -        "      <tr><td>" .
  -        $cgi->submit(-name => 'dialog', -value => 'Config_rights') .
  -        "      </td></tr>" .
  -
  -        "    </table>" .
  -        "  </td>" .
  -        "<td>" .
  -        "</table>" ;
  -
  -
  -        $page .= $cgi->endform;  
  -
  +    # Begin with templates part         
  +    "<font size=+1>" .
  +    "<br> Active User: $username<br><br>\n" .
  +    "</font>" .
  +    "<table> <caption>Templates</caption>" .
  +    "  <td>" . 
  +    "    <td>" .
  +    $cgi->scrolling_list(
  +        -name => 'templatelist',
  +        -value => [@templatesarray],
  +        -size => 3
  +    ) .
  +    "   </td>" .
  +    "  <td>" .
  +    "    <table>" .
  +    "   <td>" .
  +    "   <tr>" .
  +    "     <td>" .
  +    $cgi->submit(-name => 'dialog_view', -value => 'View') .
  +    "     </td>" .
  +    "   </tr>" .
  +    "   <tr>" .
  +    "     <td>" .
  +    $cgi->submit(-name => 'dialog_copyt', -value => 'Copy') .
  +    "     </td>" .
  +    "   </tr>" .
  +    "   </td>" .
  +    "   </table>" .
  +    "   </td>" .
  +    "   </table>" .
  +    " </td>" .
  +    "</table>" .
  +    # Now the configuration part         
  +    "<br><br>" .
  +    "<table> <caption>Configuration</caption>" .
  +    "<td>" .
  +    "    <td>" .
  +    $cgi->scrolling_list(
  +        -name => 'configslist',
  +        -value => [@configsarray],
  +        -size => 10
  +    ) .
  +    "   </td>" .
  +    "   <td>" .
  +    "     <table>" .
  +    "      <tr><td>" .
  +    $cgi->submit(-name => 'dialog_new', -value => 'New') .
  +    "      </td></tr>" .
  +    "      <tr><td>" .
  +    $cgi->submit(-name => 'dialog_del', -value => 'Del') .
  +    "      </td></tr>" .
  +    "      <tr><td>" .
  +    $cgi->submit(-name => 'dialog_edit', -value => 'Edit') .
  +    "      </td></tr>" .
  +    "      <tr><td>" .
  +    $cgi->submit(-name => 'dialog_copyc', -value => 'Copy') .
  +    "      </td></tr>" .
  +    "      <tr><td>" .
  +    $cgi->submit(-name => 'dialog_confr', -value => 'Rights') .
  +    "      </td></tr>" .
  +    "      <tr><td>" .
  +    $cgi->submit(-name => 'dialog_run', -value => 'Run') .
  +    "      </td></tr>" .
  +    "    </table>" .
  +    "  </td>" .
  +    "<td>" .
  +    "</table>" ;
   }
  -elsif ($dialog eq 'Edit') {
  +elsif ($form eq 'edit') {
       #   enter Edit form
  -    $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1));
       $page .= &edit($cgi->param('configslist'));
       $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
  -    $page .= $cgi->endform;
  +    
   } 
  -elsif ($dialog eq 'Save') {
  +elsif ($form eq 'save') {
       #  enter save form
  -    $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1));
       $page .= "<br>" . $cgi->param('editfile') . "<br>" ;
       $page .= &save($cgi->param('editfile'), $cgi->param('editwindow'));
       $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
  -    $page .= $cgi->endform;
   }
  -elsif ($dialog eq 'View') {
  +elsif ($form eq 'view') {
       #   enter View form
  -    $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1));
       $page .= &view($cgi->param('templatelist'));
       $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
  -    $page .= $cgi->endform;
   }
  -elsif ($dialog eq 'New') {
  -    $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1));
  +elsif ($form eq 'new') {
       $page .= &new($cfghash{'BaseDir'} . $cfghash{'ConfigDir'}, $username);
       $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
  -    $page .= $cgi->endform;
   }
  -elsif ($dialog eq 'New_file') {
  -    $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1));
  +#elsif ($dialog eq 'New_file') {
  +elsif ($form eq 'newf') {
       $page .= &newfile($cfghash{'BaseDir'} . $cfghash{'ConfigDir'}, $username, $cgi->param('newfile'), 
                         $cgi->param('new_rights'));
       $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
  -    $page .= $cgi->endform;
   }
  -elsif ($dialog eq 'Config_rights') {
  -    $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1));
  +#elsif ($dialog eq 'Config_rights') {
  +elsif ($form eq 'confr') {
       my $configfile;        
       if (! defined $cgi->param('configslist') ) {
           $configfile = '';
  @@ -273,53 +264,40 @@
       }
       $page .= &config_rights($configfile, $username);
       $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
  -    $page .= $cgi->endform;
   }
  -elsif ($dialog eq 'Change_rights') {
  -    $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1));
  +#elsif ($dialog eq 'Change_rights') {
  +elsif ($form eq 'changer') {
       $page .= &change_rights($cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" .  $cgi->param('filename'), 
                               $cgi->param('changerights') );
       $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
  -    $page .= $cgi->endform;
   }
  -elsif ($dialog eq 'Copy_Temp') {
  -    $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1));
  +#elsif ($dialog eq 'Copy_Temp') {
  +elsif ($form eq 'copyt') {
       $page .= &copy_file($cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" .$cgi->param('templatelist'), $username );
       $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
  -    $page .= $cgi->endform;
   }
  -elsif ($dialog eq 'Copy_Conf') {
  -    $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1));
  +#elsif ($dialog eq 'Copy_Conf') {
  +elsif ($form eq 'copyc') {
       $page .= &copy_file($cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" .$cgi->param('configslist'), $username );
       $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
  -    $page .= $cgi->endform;
   }
  -elsif ($dialog eq 'Copy' ) {
  -    $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1));
  +elsif ($form eq 'copy' ) {
       $page .= &copy($cgi->param('srcfile'), $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" .  $username . "/". $cgi->param('dstfile'));
       $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
  -$page .= $cgi->endform;
   }
  -elsif ($dialog eq 'Del' ) {
  -    $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1));
  +elsif ($form eq 'del' ) {
       $page .= &del($cgi->param('configslist'), $username );
       $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
  -    $page .= $cgi->endform;
   }
  -elsif ($dialog eq 'Run' ) {
  -    $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1));
  +elsif ($form eq 'run' ) {
       $page .= &run($cgi->param('configslist') );
       $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
  -    $page .= $cgi->endform;
   }
   else {
       die "no correct dialog found";
   }
   
  -
  -} else {
  -    die "no configuration found";
  -}
  +$page .= $cgi->endform;
   
   my $out = $MY->{TEMPLATE};
   $out =~ s|%%BODY%%|$page|s;
  @@ -353,13 +331,13 @@
               next FILE if  (((stat($dirname . "/" . $subdir . "/" . $entry))[2]) & 07)  !=  $rights;
               $filelist .= $subdir . "/" . $entry . " ";
           }
  -   }
  -
  +    }
       
       return $filelist;
   }
   ########################################################################################
   
  +
   ########################################################################################
   sub get_own_files {
   ########################################################################################
  @@ -384,9 +362,6 @@
   ########################################################################################
       my ($editfile) = @_;
       my $text;
  -    #   enter Edit form
  -   
  - 
   
       if($editfile) {
           my $filename = $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $editfile;
  @@ -394,13 +369,14 @@
           $cgi->hidden(-name => 'editfile', -default => $filename ) ;
       } else {
           $text .= "<font color=red>Missing filename<br><br>\n" .
  -        $cgi->submit(-name => 'dialog', -value => 'Back') ;
  +        $cgi->submit(-name => 'dialog_mainw', -value => 'Back') ;
       }
       
       return $text;
   }
   ########################################################################################
   
  +
   ########################################################################################
   sub save {
   ########################################################################################
  @@ -421,12 +397,13 @@
           $text .= "<font color=red>Cannot save file<br><br>\n" ;
       }
   
  -    $text .= $cgi->submit(-name => 'dialog', -value => 'Back');
  +    $text .= $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
       
       return $text;
   }
   ########################################################################################
   
  +
   ########################################################################################
   sub view {
   ########################################################################################
  @@ -438,7 +415,7 @@
           $text .= &editconfig($filename, 'r', $username);
       } else {
           $text .= "<font color=red>Missing filename<br><br>\n" .
  -        $cgi->submit(-name => 'dialog', -value => 'Back') ;
  +        $cgi->submit(-name => 'dialog_mainw', -value => 'Back') ;
       }
       return $text;
   }
  @@ -454,7 +431,6 @@
       $text= "<font size=+2>" .
       "New File:<br><br>\n" .
       "</font>" .
  -
       "<table spacing=0 cellpadding=0>" .
       "  <tr>" .
       "    <td>New Filename: $dirname " . "/" . "$user" . "/" . "</td>" .
  @@ -471,12 +447,6 @@
       "<tr><td><br></td></tr>" .
       "<td></td>" .
       " <td align=left>" .
  -#    $cgi->checkbox_group(
  -#       -name => 'new_rights',
  -#       -values => ['private', 'protected', 'public'],
  -#       -defaults => 'private',
  -#       -linebreak => 'true'
  -#    ) .
       $cgi->scrolling_list(
          -name => 'new_rights',
          -value => ['private', 'protected', 'public'],
  @@ -488,8 +458,8 @@
       "  <tr>" . 
       "<td></td>" .
       "    <td colspan=2 align=left>" .
  -    $cgi->submit(-name => 'dialog', -value => 'Back') .
  -    $cgi->submit(-name => 'dialog', -value => 'New_file') .
  +    $cgi->submit(-name => 'dialog_mainw', -value => 'Back') .
  +    $cgi->submit(-name => 'dialog_newf', -value => 'Create') .
       "    </td>" .
       "  </tr>" . 
       "</table>"; 
  @@ -498,6 +468,9 @@
   }
   
   ########################################################################################
  +
  +
  +########################################################################################
   sub newfile {
   ########################################################################################
       my ( $dirname, $user, $newfilename, $newrights ) = @_;
  @@ -533,14 +506,13 @@
       } else {
           $text .= "<font color=red>Cannot write file. It exists<br><br>\n" ;
       }
  -    $text .= $cgi->submit(-name => 'dialog', -value => 'Back');
  +    $text .= $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
   
       return $text;
   }
   ########################################################################################
   
   
  -
   ########################################################################################
   sub config_rights {
   ########################################################################################
  @@ -580,16 +552,15 @@
               "</tr>" .
               "</table>" .
               "<br><br>" .
  -            $cgi->submit(-name => 'dialog', -value => 'Back') .
  -            $cgi->submit(-name => 'dialog', -value => 'Change_rights');
  +            $cgi->submit(-name => 'dialog_mainw', -value => 'Back') .
  +            $cgi->submit(-name => 'dialog_changer', -value => 'Set_rights');
           } else {
               $text .= "<font color=red>You can only change file rights in your own directory<br><br>\n" .
               $cgi->submit(-name => 'dialog', -value => 'Back');
           }
       } else {
  -
           $text .= "<font color=red>Missing filename<br><br>\n" .
  -        $cgi->submit(-name => 'dialog', -value => 'Back');
  +        $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
       }
   
      return $text;
  @@ -607,7 +578,7 @@
       $text= "<font size=+2>" .
       "Changing rights of file:<br>" .
       "</font>" .
  -   "<br><font size=+1> $filename </font> to <font size=+1> $newrights </font><br>";
  +    "<br><font size=+1> $filename </font> to <font size=+1> $newrights </font><br>";
       if ($newrights eq "private" ) {
              $filerights = '';
       } elsif ($newrights eq "protected" ) {
  @@ -617,10 +588,9 @@
       } else {
              die "Unknown file rights";
       }
  -#    $text .= "Name : $filename<br>Rights: $filerights<br>" ;
       system("chmod o=$filerights $filename") && die "Cannot set new file rights";
       $text .= "<br>Done.<br><br>" .
  -    $cgi->submit(-name => 'dialog', -value => 'Back');
  +    $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
   
       return $text;
   }
  @@ -665,17 +635,15 @@
       "<table>" .
       " <td>" .
       " <td>" .
  -    $cgi->submit(-name => 'dialog', -value => 'Back').
  +    $cgi->submit(-name => 'dialog_mainw', -value => 'Back').
       " </td>" .    
       " <td>" .
  -    $cgi->submit(-name => 'dialog', -value => 'Copy').
  +    $cgi->submit(-name => 'dialog_copy', -value => 'Copy').
       " </td>" .    
       " </td>" .    
       "</table>" ;
  -    
   
       return $text; 
  -
   }
   ########################################################################################
   
  @@ -698,7 +666,7 @@
           $text .= "<font color=red>You can only delete file in your own directory<br><br>\n" ;
       }
       
  -    $text .= $cgi->submit(-name => 'dialog', -value => 'Back');
  +    $text .= $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
   
       return $text;
   }
  @@ -716,14 +684,18 @@
       my $fileoutput;
       my $outputtext = '';
   
  +    if ($runfile eq '') {
  +        $text .= "<font color=red>No configuration selected <br><br>\n" ;            
  +        $text .= $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
  +        return $text;
  +    }
       $rcommand =~ s|%{profile}%|$rpath|s;
   
       if (-e $output) {
           system("/bin/rm $output");
       }
   
  -
  -    $text= "<font size=+2>" .
  +    $text .= "<font size=+2>" .
       "Running Configuration: $rpath<br><br>\n" .
       "</font>" .
       "<br><br>" .
  @@ -744,12 +716,14 @@
                               -columns => 80
           };
           $outputhash->{readonly}="";
  -        $text .= $cgi->textarea($outputhash);
  +        $text .= $cgi->textarea($outputhash).
  +        "<br>" ;
        } else {
            $text .= "<font color=red>Run command not working<br><br>\n" ;            
        }
  +     $text .= $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
   
  -     $text .= $cgi->submit(-name => 'dialog', -value => 'Back');
  +     return $text;
   }
   ########################################################################################
   
  @@ -768,59 +742,52 @@
       system("cp $srcf $dstf") && die "Cannot copy file";
       system("chmod o= $dstf") && die "Cannot change file rights";
   
  -    $text .= $cgi->submit(-name => 'dialog', -value => 'Back');
  +    $text .= $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
   
       return $text;
   }
   ########################################################################################
   
   
  -
  -
   ########################################################################################
   sub read_config {
   ########################################################################################
  +    my ($cfgfile) = @_;   
  +    my %cfghash ;
  +    my $cfgin ;
  +    my $key;
  +    my $content;
  +
  +    print "Lese file: $cfgfile\n"; 
  +    $cfgin = IO::File->new("<$cfgfile");
  +
  +    if (defined $cfgin) {
  +        LOOP: while(<$cfgin>) { 
  +            $_ =~ s|^\s+(.*?)|{$_=$1}|es;       # Remove whitespaces at the beginning 
  +            next LOOP if $_ =~ /^\n/;           # Remove the first empty require 
  +            next LOOP if $_ eq "";              # Remove empty line
  +            next LOOP if $_ =~/^#/;             # Remove comment lines
   
  -my ($cfgfile) = @_;   
  -my %cfghash ;
  -my $cfgin ;
  -my $key;
  -my $content;
  -
  -print "Lese file: $cfgfile\n"; 
  -$cfgin = IO::File->new("<$cfgfile");
  -
  -if (defined $cfgin) {
  -    LOOP: while(<$cfgin>) { 
  -    
  -
  -        $_ =~ s|^\s+(.*?)|{$_=$1}|es;       # Remove whitespaces at the beginning 
  -        next LOOP if $_ =~ /^\n/;           # Remove the first empty require 
  -        next LOOP if $_ eq "";              # Remove empty line
  -        next LOOP if $_ =~/^#/;             # Remove comment lines
  -
  -        $_ =~ s|^([^#]+)#(.*)$|{$_=$1}|es;  # Remove comments on the end 
  -        $_ =~ s|(.*?)\s+$|{$_=$1}|es;       # Remove whitespaces at the end 
  +            $_ =~ s|^([^#]+)#(.*)$|{$_=$1}|es;  # Remove comments on the end 
  +            $_ =~ s|(.*?)\s+$|{$_=$1}|es;       # Remove whitespaces at the end 
   
  +            ($key, $content) =  /^(\w+)\s+(.*)$/;
   
  -        ($key, $content) =  /^(\w+)\s+(.*)$/;
  -
  -        $cfghash{$key} = $content;
  +            $cfghash{$key} = $content;
  +        }
  +        $cfgin->close;
  +    } else {
  +        die "Can't open config file";
       }
  -    $cfgin->close;
  -}
  -
  -return (%cfghash);
  +    return (%cfghash);
   }
   ########################################################################################
   
   
  -
   ########################################################################################
   sub validpassword {
   ########################################################################################
       my ($user, $password) = @_;
  -
       my $returnvalue = 0;
       my $uname;
       my $pwd;
  @@ -852,8 +819,6 @@
       my $filestring = "";
       my $direntry = "";
   
  -
  -
       opendir(DIR, "$dir");       # Open dir for scanning
       
       foreach $direntry (readdir(DIR)) {
  @@ -866,8 +831,7 @@
       closedir(DIR);
       return $filestring;
   }
  -
  -
  +########################################################################################
   
   
   ########################################################################################
  @@ -877,8 +841,6 @@
       my $filestring = "";
       my $direntry = "";
   
  -
  -
       opendir(DIR, "$dir");       # Open dir for scanning
       
       foreach $direntry (readdir(DIR)) {
  @@ -909,23 +871,24 @@
   ########################################################################################
   
   
  -
  -
  -
   ########################################################################################
   sub editconfig {
   ########################################################################################
       my ($file, $mode, $user) = @_;
  -    my $text = '';
  +    my $texte = '';
       my $filein ;
  +    my $editf = '';
       my $readonly ;
       my $titletext ;
   
       $filein = IO::File->new("<$file");
  -    while(<$filein>) { $text .= $_; }
  -    $filein->close(); 
  -
  -
  +    if(defined $filein) {
  +        while(<$filein>) { $editf .= $_; }
  +        $filein->close(); 
  +    } else {
  +        die "Can't open $file";
  +    }
  +    
       if ($mode eq 'w') {
           $titletext = "Edit window";
       } elsif ($mode eq 'r') {
  @@ -933,15 +896,14 @@
       }
   
       my $textahash ={ -name => 'editwindow',
  -          -default => $text,
  +          -default => $editf,
             -rows    => 40,
             -columns => 80
       };
       if ($mode eq 'r') {
           $textahash->{readonly}="";
       }
  -    $text .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1)) .
  -    "<font size=+2>" .
  +    $texte .= "<font size=+2>" .
       $titletext . ":   <br><br>\n" .
       "</font>" .
       "<font size=+1>" .
  @@ -952,17 +914,17 @@
       "<table>" .
       "  <td>" .
       "    <td>" .
  -    $cgi->submit(-name => 'dialog', -value => 'Back') .
  +    $cgi->submit(-name => 'dialog_mainw', -value => 'Back') .
       "   </td>";
       if ($mode eq 'w') {
  -    $text .= "   <td>" .
  -    $cgi->submit(-name => 'dialog', -value => 'Save') .
  +    $texte .= "   <td>" .
  +    $cgi->submit(-name => 'dialog_save', -value => 'Save') .
       "   </td>";
       }
  -    $text .= "  <td>" .
  +    $texte .= "  <td>" .
       " </td>" .
       "</table>" ;
   
  -    return $text;
  +    return $texte;
   }
   ########################################################################################

From ossp-cvs-owner@ossp.org  Fri May 17 15:00:07 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1DD0076363; Fri, 17 May 2002 15:00:07 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea.cgi
Message-Id: <20020517130007.1DD0076363@mail.ossp.org>
Date: Fri, 17 May 2002 15:00:07 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   17-May-2002 15:00:06
  Branch: HEAD                             Handle: 2002051714000400

  Modified files:
    ossp-pkg/tabea          tabea.cgi

  Log:
    Cleanups and error correcting

  Summary:
    Revision    Changes     Path
    1.23        +182 -162   ossp-pkg/tabea/tabea.cgi
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea.cgi
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 tabea.cgi
  --- ossp-pkg/tabea/tabea.cgi	17 May 2002 08:09:07 -0000	1.22
  +++ ossp-pkg/tabea/tabea.cgi	17 May 2002 13:00:04 -0000	1.23
  @@ -36,6 +36,7 @@
   
   $|++;
   
  +
   my $cfgfile    = "./tabea.cfg";
   my $pwdfile    = "./tabea.pw";
   my $configsdir = "./tabea.d";
  @@ -99,15 +100,77 @@
           $form = $name;
       }
   }
  -    
  +
  +NEXTFORM:    
   my $page = $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1));
   
  -#if ($dialog eq "") {
   if ($form eq '') {
  -#    if ($form eq "mainw") {
  -#        $page .= "Form new is login<br><br>";
  -#    }
  -    $page .= 
  +    $page .= &login();
  +}
  +elsif ($form eq 'mainw') {
  +    $page .= mainw(); 
  +}
  +elsif ($form eq 'edit') {
  +    $page .= &edit($cgi->param('configslist'));
  +} 
  +elsif ($form eq 'save') {
  +    $page .= &save($cgi->param('editfile'), $cgi->param('editwindow'));
  +}
  +elsif ($form eq 'view') {
  +    $page .= &view($cgi->param('templatelist'));
  +}
  +elsif ($form eq 'new') {
  +    $page .= &new($cfghash{'BaseDir'} . $cfghash{'ConfigDir'}, $username);
  +}
  +elsif ($form eq 'newf') {
  +    $page .= &newfile($cfghash{'BaseDir'} . $cfghash{'ConfigDir'}, $username, $cgi->param('newfile'), 
  +                      $cgi->param('new_rights'));
  +}
  +elsif ($form eq 'confr') {
  +    $page .= &config_rights($cgi->param('configslist'));
  +}
  +elsif ($form eq 'changer') {
  +    $page .= &change_rights($cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" .  $cgi->param('filename'), 
  +                            $cgi->param('changerights') );
  +}
  +elsif ($form eq 'copyt') {
  +    $page .= &copy_file($cgi->param('templatelist') );
  +}
  +elsif ($form eq 'copyc') {
  +    $page .= &copy_file($cgi->param('configslist'));
  +}
  +elsif ($form eq 'copy' ) {
  +    $page .= &copy($cgi->param('srcfile'), $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" .  
  +                   $username . "/". $cgi->param('dstfile'));
  +}
  +elsif ($form eq 'del' ) {
  +    $page .= &del($cgi->param('configslist'));
  +}
  +elsif ($form eq 'run' ) {
  +    $page .= &run($cgi->param('configslist') );
  +}
  +else {
  +    die "no correct dialog found";
  +}
  +
  +$page .= $cgi->hidden(-name => 'password', -default => $password ) ;
  +$page .= $cgi->endform;
  +
  +my $out = $MY->{TEMPLATE};
  +$out =~ s|%%BODY%%|$page|s;
  +$out =~ s|%%TITLE%%|Test|s;
  +
  +print $cgi->header(-cookie => $cookies, -expires => '+1s') . $out;
  +
  +exit (0);
  +############### End of main part #######################################################
  +
  +########################################################################################
  +sub login{
  +########################################################################################
  +    my $text = '';
  +
  +    $text .= 
       "<table cellspacing=0 cellpadding=0>" .
       "  <tr>" .
       "    <td>Username:</td>" .
  @@ -138,11 +201,17 @@
       "    </td>" .
       "  </tr>" .
       "</table>" ;
  +
  +    return $text;
   }
  -#elsif (($dialog eq 'login') || ($dialog eq 'Back')) {
  -elsif ($form eq 'mainw') {
  -    #   enter Select form
  -    
  +########################################################################################
  +
  +
  +########################################################################################
  +sub mainw {
  +########################################################################################
  +    my $text = '';
  +
       &validpassword($username, $password, $cfghash{'BaseDir'}.$cfghash{'PasswdFile'}) 
                   || print STDOUT $cgi->redirect(-uri => $cgi->url(-full => 1), -type => "text/html");
   
  @@ -157,8 +226,7 @@
       my @templatesarray = split(/ /,$templatesfiles);
       my @configsarray = split(/ /,$configsfiles);
              
  -    $page .= 
  -    $cgi->hidden(-name => 'password', -default => $password ) .
  +    $text .= 
       # Begin with templates part         
       "<font size=+1>" .
       "<br> Active User: $username<br><br>\n" .
  @@ -226,86 +294,10 @@
       "  </td>" .
       "<td>" .
       "</table>" ;
  -}
  -elsif ($form eq 'edit') {
  -    #   enter Edit form
  -    $page .= &edit($cgi->param('configslist'));
  -    $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
  -    
  -} 
  -elsif ($form eq 'save') {
  -    #  enter save form
  -    $page .= "<br>" . $cgi->param('editfile') . "<br>" ;
  -    $page .= &save($cgi->param('editfile'), $cgi->param('editwindow'));
  -    $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
  -}
  -elsif ($form eq 'view') {
  -    #   enter View form
  -    $page .= &view($cgi->param('templatelist'));
  -    $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
  -}
  -elsif ($form eq 'new') {
  -    $page .= &new($cfghash{'BaseDir'} . $cfghash{'ConfigDir'}, $username);
  -    $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
  -}
  -#elsif ($dialog eq 'New_file') {
  -elsif ($form eq 'newf') {
  -    $page .= &newfile($cfghash{'BaseDir'} . $cfghash{'ConfigDir'}, $username, $cgi->param('newfile'), 
  -                      $cgi->param('new_rights'));
  -    $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
  -}
  -#elsif ($dialog eq 'Config_rights') {
  -elsif ($form eq 'confr') {
  -    my $configfile;        
  -    if (! defined $cgi->param('configslist') ) {
  -        $configfile = '';
  -    } else {
  -        $configfile = $cgi->param('configslist');
  -    }
  -    $page .= &config_rights($configfile, $username);
  -    $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
  -}
  -#elsif ($dialog eq 'Change_rights') {
  -elsif ($form eq 'changer') {
  -    $page .= &change_rights($cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" .  $cgi->param('filename'), 
  -                            $cgi->param('changerights') );
  -    $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
  -}
  -#elsif ($dialog eq 'Copy_Temp') {
  -elsif ($form eq 'copyt') {
  -    $page .= &copy_file($cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" .$cgi->param('templatelist'), $username );
  -    $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
  -}
  -#elsif ($dialog eq 'Copy_Conf') {
  -elsif ($form eq 'copyc') {
  -    $page .= &copy_file($cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" .$cgi->param('configslist'), $username );
  -    $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
  -}
  -elsif ($form eq 'copy' ) {
  -    $page .= &copy($cgi->param('srcfile'), $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" .  $username . "/". $cgi->param('dstfile'));
  -    $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
  -}
  -elsif ($form eq 'del' ) {
  -    $page .= &del($cgi->param('configslist'), $username );
  -    $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
  -}
  -elsif ($form eq 'run' ) {
  -    $page .= &run($cgi->param('configslist') );
  -    $page .= $cgi->hidden(-name => 'password', -default => $password ) ;
  -}
  -else {
  -    die "no correct dialog found";
  -}
  -
  -$page .= $cgi->endform;
  -
  -my $out = $MY->{TEMPLATE};
  -$out =~ s|%%BODY%%|$page|s;
  -$out =~ s|%%TITLE%%|Test|s;
  -
  -print $cgi->header(-cookie => $cookies, -expires => '+1s') . $out;
   
  -exit (0);
  +    return $text;
  +}    
  +########################################################################################
   
   
   ########################################################################################
  @@ -393,6 +385,8 @@
       if (defined $fileout) {
           print $fileout $edittext;
           $fileout->close;
  +        $form = 'mainw';
  +        goto NEXTFORM;
       } else {
           $text .= "<font color=red>Cannot save file<br><br>\n" ;
       }
  @@ -503,8 +497,10 @@
           system("chmod u=rw $newpath") && die "Cannot set new file rights";
           system("chmod o=$filerights $newpath") && die "Cannot set new file rights";
           $text .= "<br><br><br>" ;
  +        $form = 'mainw';
  +        goto NEXTFORM;
       } else {
  -        $text .= "<font color=red>Cannot write file. It exists<br><br>\n" ;
  +        $text .= "<font color=red>Cannot write file. File exists<br><br>\n" ;
       }
       $text .= $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
   
  @@ -516,26 +512,28 @@
   ########################################################################################
   sub config_rights {
   ########################################################################################
  -    my ( $namefile, $user ) = @_; 
  +    my ( $namefile ) = @_; 
       my $text = '';
       my $defaultright = '';
  -    my $filerights = (stat($cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $namefile))[2] & 07;
  -   
  -    $text .= $cgi->hidden(-name => 'filename', -default => $namefile ) ; 
  -    if ( $filerights == 6 ) {
  -        $defaultright = "public" ;     
  -    } elsif ( $filerights == 4 ) {
  -        $defaultright = "protected" ;
  -    } else {
  -        $defaultright = "private" ;
  -    }
  -
  -    $text .= "<font size=+2>" .
  -    "Changing rights of file:<br><br>" ;
  +    my $confname = '';
       
  +    my $filerights = (stat($cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $namefile))[2] & 07;
  +  
  +     
       if ($namefile ne '') {
  +        if ( $filerights == 6 ) {
  +            $defaultright = "public" ;     
  +        } elsif ( $filerights == 4 ) {
  +            $defaultright = "protected" ;
  +        } else {
  +            $defaultright = "private" ;
  +        }
  +
  +        $text .= "<font size=+2>" .
  +        "Changing rights of file:<br><br>" ;
  +   
           $namefile =~ m{^([a-zA-Z0-9!"£$%^&*()-_=+#~]+)/(.+)}sg;
  -        if ($1 eq $user) {
  +        if ($1 eq $username) {
               $text .= "<table>" .
               "<tr>" .
               " <td>" . 
  @@ -554,6 +552,8 @@
               "<br><br>" .
               $cgi->submit(-name => 'dialog_mainw', -value => 'Back') .
               $cgi->submit(-name => 'dialog_changer', -value => 'Set_rights');
  +            $confname = $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $namefile;
  +            $text .= $cgi->hidden(-name => 'filename', -default => $namefile ) ; 
           } else {
               $text .= "<font color=red>You can only change file rights in your own directory<br><br>\n" .
               $cgi->submit(-name => 'dialog', -value => 'Back');
  @@ -589,8 +589,8 @@
              die "Unknown file rights";
       }
       system("chmod o=$filerights $filename") && die "Cannot set new file rights";
  -    $text .= "<br>Done.<br><br>" .
  -    $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
  +    $form = 'mainw';
  +    goto NEXTFORM;
   
       return $text;
   }
  @@ -600,48 +600,59 @@
   ########################################################################################
   sub copy_file {
   ########################################################################################
  -    my ( $srcfile, $user ) = @_;
  +    my ( $filename ) = @_;
       my $text = '';
       
  -    $text .= $cgi->hidden(-name => 'srcfile', -default => $srcfile ) .
  -    "<font size=+1>" .
  -    "Copying File:<br>" .
  -    "</font>" .
  -    "<br><br>" .
  -    "Active user: $user<br>" .
  -    "<table border=1 width=50%>" .
  -    " <tr>" .
  -    "  <td>Sourcefile :</td>" .
  -    "  <td>Destinationfile</td>" .
  -    " </tr>" .
  -    " <tr>" .
  -    "  <td>$srcfile</td>" . 
  -    "  <td>" .
  -    "   <table>" .
  -    "   <tr>" .
  -    "    <td>" . $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $user . "/</td>" .
  -    "    <td>" .
  -    $cgi->textfield(-name=>'dstfile',
  -                    -default=>'',
  -                    -size=>30,
  -                    -maxlength=>80) .
  -    "   </td>" .
  -    "   </tr>" .
  -    "   </table>" .
  -    "  </td>" .
  -    " </tr>" .
  -    "</table>" .
  -    "<br><br>" .
  -    "<table>" .
  -    " <td>" .
  -    " <td>" .
  -    $cgi->submit(-name => 'dialog_mainw', -value => 'Back').
  -    " </td>" .    
  -    " <td>" .
  -    $cgi->submit(-name => 'dialog_copy', -value => 'Copy').
  -    " </td>" .    
  -    " </td>" .    
  -    "</table>" ;
  +
  +
  +    if ($filename) {
  +        my $srcfile = $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $filename; 
  +        $text .= $cgi->hidden(-name => 'srcfile', -default => $srcfile ) .
  +        "<font size=+1>" .
  +        "Copying File:<br>" .
  +        "</font>" .
  +        "<br><br>" .
  +        "Active user: $username<br>" .
  +        "<br>" .
  +        "<table border=1 width=50%>" .
  +        " <tr>" .
  +        "  <td>Sourcefile :</td>" .
  +        "  <td>Destinationfile</td>" .
  +        " </tr>" .
  +        " <tr>" .
  +        "  <td>$srcfile</td>" . 
  +        "  <td>" .
  +        "   <table>" .
  +        "   <tr>" .
  +        "    <td>" . $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $username . "/</td>" .
  +        "    <td>" .
  +        $cgi->textfield(
  +            -name=>'dstfile',
  +            -default=>'',
  +            -size=>30,
  +            -maxlength=>80
  +        ) .
  +        "   </td>" .
  +        "   </tr>" .
  +        "   </table>" .
  +        "  </td>" .
  +        " </tr>" .
  +        "</table>" .
  +        "<br><br>" .
  +        "<table>" .
  +        " <td>" .
  +        " <td>" .
  +        $cgi->submit(-name => 'dialog_mainw', -value => 'Back').
  +        " </td>" .    
  +        " <td>" .
  +        $cgi->submit(-name => 'dialog_copy', -value => 'Copy').
  +        " </td>" .    
  +        " </td>" .    
  +        "</table>" ;
  +    } else {
  +        $text .= "<font color=red>Missing filename<br><br>\n" .
  +        $cgi->submit(-name => 'dialog_mainw', -value => 'Back') ;
  +    }
   
       return $text; 
   }
  @@ -651,23 +662,31 @@
   ########################################################################################
   sub del {
   ########################################################################################
  -    my ( $delfile, $user ) = @_;
  +    my ( $delfile ) = @_;
       my $text = '';
  -    my $fpath = $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $delfile;
   
  -    $text= "<font size=+2>" .
  -    "Delete File: $fpath<br><br>\n" .
  -    "</font>" .
  -    "<br><br>" ;
  -    $delfile =~ m{^([a-zA-Z0-9!"<A3>$%^&*()-_=+#~]+)/(.+)}sg;
  -    if ( $1 eq $user ) {
  +    if ($delfile) {
  +        my $fpath = $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $delfile;
  +
  +        $text= "<font size=+2>" .
  +        "Delete File: $fpath<br><br>\n" .
  +        "</font>" .
  +        "<br><br>" ;
  +        $delfile =~ m{^([a-zA-Z0-9!"<A3>$%^&*()-_=+#~]+)/(.+)}sg;
  +        if ( $1 eq $username ) {
               system("rm $fpath") && die "Cannot delete file";
  +            $form = 'mainw';
  +            goto NEXTFORM;
  +        } else {
  +            $text .= "<font color=red>You can only delete file in your own directory<br><br>\n" ;
  +        }
       } else {
  -        $text .= "<font color=red>You can only delete file in your own directory<br><br>\n" ;
  +        $text .= "<font color=red>Missing filename<br><br>\n" ;
       }
  -    
  -    $text .= $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
   
  +    
  +    $text .= $cgi->submit(-name => 'dialog_mainw', -value => 'Back') ;
  +    
       return $text;
   }
   ########################################################################################
  @@ -742,8 +761,9 @@
       system("cp $srcf $dstf") && die "Cannot copy file";
       system("chmod o= $dstf") && die "Cannot change file rights";
   
  -    $text .= $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
  -
  +    $form = 'mainw';
  +    goto NEXTFORM; 
  +    
       return $text;
   }
   ########################################################################################

From ossp-cvs-owner@ossp.org  Fri May 17 20:28:02 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CE7B376363; Fri, 17 May 2002 20:28:01 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea.cgi
Message-Id: <20020517182801.CE7B376363@mail.ossp.org>
Date: Fri, 17 May 2002 20:28:01 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-May-2002 20:28:01
  Branch: HEAD                             Handle: 2002051719280100

  Modified files:
    ossp-pkg/tabea          tabea.cgi

  Log:
    - fix inconsistencies in coding style
    - fix indentations
    - remove trailing whitespaces on lines

  Summary:
    Revision    Changes     Path
    1.24        +197 -193   ossp-pkg/tabea/tabea.cgi
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea.cgi
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 tabea.cgi
  --- ossp-pkg/tabea/tabea.cgi	17 May 2002 13:00:04 -0000	1.23
  +++ ossp-pkg/tabea/tabea.cgi	17 May 2002 18:28:01 -0000	1.24
  @@ -27,7 +27,6 @@
   ##
   ##  tabea.cgi: Tabea CGI (syntax: Perl)
   ##
  -##
   
   require 5.000;
   use strict;
  @@ -36,7 +35,6 @@
   
   $|++;
   
  -
   my $cfgfile    = "./tabea.cfg";
   my $pwdfile    = "./tabea.pw";
   my $configsdir = "./tabea.d";
  @@ -65,7 +63,6 @@
       exit(0);
   };
   
  -
   #   update cookies
   my $cookies = [];
   foreach my $param (qw(username)) { # FIXME!
  @@ -79,7 +76,7 @@
           ));
       }
       if ($cgi->param($param) eq '' and $cgi->cookie($param) ne '') {
  -         $cgi->param(-name => $param, -value => [$cgi->cookie($param)]);
  +        $cgi->param(-name => $param, -value => [$cgi->cookie($param)]);
       }
   }
   
  @@ -101,18 +98,18 @@
       }
   }
   
  -NEXTFORM:    
  +NEXTFORM:
   my $page = $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1));
   
   if ($form eq '') {
       $page .= &login();
   }
   elsif ($form eq 'mainw') {
  -    $page .= mainw(); 
  +    $page .= mainw();
   }
   elsif ($form eq 'edit') {
       $page .= &edit($cgi->param('configslist'));
  -} 
  +}
   elsif ($form eq 'save') {
       $page .= &save($cgi->param('editfile'), $cgi->param('editwindow'));
   }
  @@ -123,15 +120,15 @@
       $page .= &new($cfghash{'BaseDir'} . $cfghash{'ConfigDir'}, $username);
   }
   elsif ($form eq 'newf') {
  -    $page .= &newfile($cfghash{'BaseDir'} . $cfghash{'ConfigDir'}, $username, $cgi->param('newfile'), 
  -                      $cgi->param('new_rights'));
  +    $page .= &newfile($cfghash{'BaseDir'} . $cfghash{'ConfigDir'},
  +                      $username, $cgi->param('newfile'), $cgi->param('new_rights'));
   }
   elsif ($form eq 'confr') {
       $page .= &config_rights($cgi->param('configslist'));
   }
   elsif ($form eq 'changer') {
  -    $page .= &change_rights($cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" .  $cgi->param('filename'), 
  -                            $cgi->param('changerights') );
  +    $page .= &change_rights($cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/"
  +                            . $cgi->param('filename'), $cgi->param('changerights') );
   }
   elsif ($form eq 'copyt') {
       $page .= &copy_file($cgi->param('templatelist') );
  @@ -140,7 +137,7 @@
       $page .= &copy_file($cgi->param('configslist'));
   }
   elsif ($form eq 'copy' ) {
  -    $page .= &copy($cgi->param('srcfile'), $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" .  
  +    $page .= &copy($cgi->param('srcfile'), $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" .
                      $username . "/". $cgi->param('dstfile'));
   }
   elsif ($form eq 'del' ) {
  @@ -153,7 +150,7 @@
       die "no correct dialog found";
   }
   
  -$page .= $cgi->hidden(-name => 'password', -default => $password ) ;
  +$page .= $cgi->hidden(-name => 'password', -default => $password);
   $page .= $cgi->endform;
   
   my $out = $MY->{TEMPLATE};
  @@ -162,7 +159,8 @@
   
   print $cgi->header(-cookie => $cookies, -expires => '+1s') . $out;
   
  -exit (0);
  +exit(0);
  +
   ############### End of main part #######################################################
   
   ########################################################################################
  @@ -170,7 +168,7 @@
   ########################################################################################
       my $text = '';
   
  -    $text .= 
  +    $text .=
       "<table cellspacing=0 cellpadding=0>" .
       "  <tr>" .
       "    <td>Username:</td>" .
  @@ -212,8 +210,8 @@
   ########################################################################################
       my $text = '';
   
  -    &validpassword($username, $password, $cfghash{'BaseDir'}.$cfghash{'PasswdFile'}) 
  -                || print STDOUT $cgi->redirect(-uri => $cgi->url(-full => 1), -type => "text/html");
  +    &validpassword($username, $password, $cfghash{'BaseDir'}.$cfghash{'PasswdFile'})
  +        || print STDOUT $cgi->redirect(-uri => $cgi->url(-full => 1), -type => "text/html");
   
       my $templatesfiles = &get_name_files($cfghash{'BaseDir'} . $cfghash{'ConfigDir'}, $username, 4);
       my $configsfiles = &get_name_files($cfghash{'BaseDir'} . $cfghash{'ConfigDir'}, $username, 6);
  @@ -222,17 +220,17 @@
   
       $templatesfiles = &strsort($templatesfiles);
       $configsfiles = &strsort($configsfiles);
  -    
  +
       my @templatesarray = split(/ /,$templatesfiles);
       my @configsarray = split(/ /,$configsfiles);
  -           
  -    $text .= 
  -    # Begin with templates part         
  +
  +    $text .=
  +    # Begin with templates part
       "<font size=+1>" .
       "<br> Active User: $username<br><br>\n" .
       "</font>" .
       "<table> <caption>Templates</caption>" .
  -    "  <td>" . 
  +    "  <td>" .
       "    <td>" .
       $cgi->scrolling_list(
           -name => 'templatelist',
  @@ -259,7 +257,7 @@
       "   </table>" .
       " </td>" .
       "</table>" .
  -    # Now the configuration part         
  +    # Now the configuration part
       "<br><br>" .
       "<table> <caption>Configuration</caption>" .
       "<td>" .
  @@ -293,10 +291,10 @@
       "    </table>" .
       "  </td>" .
       "<td>" .
  -    "</table>" ;
  +    "</table>";
   
       return $text;
  -}    
  +}
   ########################################################################################
   
   
  @@ -311,12 +309,12 @@
       my $filemode = '';
       my $entry = '';
   
  -    my $dirlist = &readsubdir($dirname . "/" );    
  -    my @dirarray =  split (/ /, $dirlist);
  +    my $dirlist = &readsubdir($dirname . "/");
  +    my @dirarray = split (/ /, $dirlist);
   
  -    DIR: foreach $subdir (@dirarray)  {
  +    DIR: foreach $subdir (@dirarray) {
           next DIR if $subdir eq $user;
  -        $filel = &readdir($dirname . "/" . $subdir . "/") ;
  +        $filel = &readdir($dirname . "/" . $subdir . "/");
           @filelarray = split (/ /, $filel);
           FILE: foreach $entry (@filelarray) {
               my $path = $dirname . "/" . $subdir . "/" . $entry;
  @@ -324,7 +322,7 @@
               $filelist .= $subdir . "/" . $entry . " ";
           }
       }
  -    
  +
       return $filelist;
   }
   ########################################################################################
  @@ -355,15 +353,15 @@
       my ($editfile) = @_;
       my $text;
   
  -    if($editfile) {
  +    if ($editfile) {
           my $filename = $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $editfile;
  -        $text .=&editconfig($filename, 'w', $username).
  -        $cgi->hidden(-name => 'editfile', -default => $filename ) ;
  +        $text .= &editconfig($filename, 'w', $username) .
  +                 $cgi->hidden(-name => 'editfile', -default => $filename );
       } else {
           $text .= "<font color=red>Missing filename<br><br>\n" .
  -        $cgi->submit(-name => 'dialog_mainw', -value => 'Back') ;
  +                 $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
       }
  -    
  +
       return $text;
   }
   ########################################################################################
  @@ -372,14 +370,14 @@
   ########################################################################################
   sub save {
   ########################################################################################
  -    my ( $file, $edittext) = @_;
  +    my ($file, $edittext) = @_;
       my $text = '';
  -    my $fileout; 
  +    my $fileout;
   
       $text= "<font size=+2>" .
  -    "Save File: $file<br><br>\n" .
  -    "</font>" .
  -    "<br><br>" ;
  +           "Save File: $file<br><br>\n" .
  +           "</font>" .
  +           "<br><br>";
   
       $fileout = IO::File->new(">$file");
       if (defined $fileout) {
  @@ -388,11 +386,11 @@
           $form = 'mainw';
           goto NEXTFORM;
       } else {
  -        $text .= "<font color=red>Cannot save file<br><br>\n" ;
  +        $text .= "<font color=red>Cannot save file<br><br>\n";
       }
   
       $text .= $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
  -    
  +
       return $text;
   }
   ########################################################################################
  @@ -401,15 +399,15 @@
   ########################################################################################
   sub view {
   ########################################################################################
  -    my ($file) = @_; 
  +    my ($file) = @_;
       my $text;
  -    
  +
       if ($file) {
           my $filename = $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $cgi->param('templatelist');
           $text .= &editconfig($filename, 'r', $username);
       } else {
           $text .= "<font color=red>Missing filename<br><br>\n" .
  -        $cgi->submit(-name => 'dialog_mainw', -value => 'Back') ;
  +        $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
       }
       return $text;
   }
  @@ -419,7 +417,7 @@
   #########################################################################################
   sub new {
   ########################################################################################
  -    my ( $dirname, $user ) = @_;
  +    my ($dirname, $user) = @_;
       my $text = '';
   
       $text= "<font size=+2>" .
  @@ -449,14 +447,14 @@
       " </td>" .
       " </tr>" .
       "<tr><td><br></td></tr>" .
  -    "  <tr>" . 
  +    "  <tr>" .
       "<td></td>" .
       "    <td colspan=2 align=left>" .
       $cgi->submit(-name => 'dialog_mainw', -value => 'Back') .
       $cgi->submit(-name => 'dialog_newf', -value => 'Create') .
       "    </td>" .
  -    "  </tr>" . 
  -    "</table>"; 
  +    "  </tr>" .
  +    "</table>";
   
       return $text;
   }
  @@ -467,7 +465,7 @@
   ########################################################################################
   sub newfile {
   ########################################################################################
  -    my ( $dirname, $user, $newfilename, $newrights ) = @_;
  +    my ($dirname, $user, $newfilename, $newrights) = @_;
       my $text = '';
       my $newpath = $dirname . "/" . $user . "/" . $newfilename;
       my $filesinpath = &readdir($dirname . "/" . $user . "/");
  @@ -476,31 +474,33 @@
       my $filerights = '';
   
       $text= "<font size=+2>" .
  -    "Creating New File: $newfilename <br><br>" .
  -    "</font><br><br><br>" ;
  +           "Creating New File: $newfilename <br><br>" .
  +           "</font><br><br><br>";
       foreach (@filesinpatharray) {
  -        if ( $_ eq $newfilename) { $canwrite = 0; };
  +        if ($_ eq $newfilename) {
  +            $canwrite = 0;
  +        };
       }
  -    if ( $canwrite ) {
  -        if ($newrights eq "private" ) {
  +    if ($canwrite) {
  +        if ($newrights eq "private") {
               $filerights = '';
  -        } elsif ($newrights eq "protected" ) {
  +        } elsif ($newrights eq "protected") {
               $filerights = "r";
  -        } elsif ($newrights eq "public" ) {
  +        } elsif ($newrights eq "public") {
               $filerights = "rw";
           } else {
  -            die "Unknown file rights";   
  +            die "Unknown file rights";
           }
           $text .= "Creating the new file $newpath<br><br>";
           system("touch $newpath") && die "Cannot create new file";
           $text .= "Setting new file rights for $newpath<br><br>";
           system("chmod u=rw $newpath") && die "Cannot set new file rights";
           system("chmod o=$filerights $newpath") && die "Cannot set new file rights";
  -        $text .= "<br><br><br>" ;
  +        $text .= "<br><br><br>";
           $form = 'mainw';
           goto NEXTFORM;
       } else {
  -        $text .= "<font color=red>Cannot write file. File exists<br><br>\n" ;
  +        $text .= "<font color=red>Cannot write file. File exists<br><br>\n";
       }
       $text .= $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
   
  @@ -512,34 +512,33 @@
   ########################################################################################
   sub config_rights {
   ########################################################################################
  -    my ( $namefile ) = @_; 
  +    my ($namefile) = @_;
       my $text = '';
       my $defaultright = '';
       my $confname = '';
  -    
  +
       my $filerights = (stat($cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $namefile))[2] & 07;
  -  
  -     
  +
       if ($namefile ne '') {
  -        if ( $filerights == 6 ) {
  -            $defaultright = "public" ;     
  -        } elsif ( $filerights == 4 ) {
  -            $defaultright = "protected" ;
  +        if ($filerights == 6) {
  +            $defaultright = "public" ;
  +        } elsif ($filerights == 4) {
  +            $defaultright = "protected";
           } else {
  -            $defaultright = "private" ;
  +            $defaultright = "private";
           }
   
           $text .= "<font size=+2>" .
  -        "Changing rights of file:<br><br>" ;
  -   
  +                 "Changing rights of file:<br><br>";
  +
           $namefile =~ m{^([a-zA-Z0-9!"£$%^&*()-_=+#~]+)/(.+)}sg;
           if ($1 eq $username) {
               $text .= "<table>" .
               "<tr>" .
  -            " <td>" . 
  +            " <td>" .
               "$namefile<br>" .
               " </td>" .
  -            " <td>" . 
  +            " <td>" .
               $cgi->scrolling_list(
                   -name => 'changerights',
                   -value => ['private', 'protected', 'public'],
  @@ -553,17 +552,19 @@
               $cgi->submit(-name => 'dialog_mainw', -value => 'Back') .
               $cgi->submit(-name => 'dialog_changer', -value => 'Set_rights');
               $confname = $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $namefile;
  -            $text .= $cgi->hidden(-name => 'filename', -default => $namefile ) ; 
  -        } else {
  +            $text .= $cgi->hidden(-name => 'filename', -default => $namefile ) ;
  +        }
  +        else {
               $text .= "<font color=red>You can only change file rights in your own directory<br><br>\n" .
  -            $cgi->submit(-name => 'dialog', -value => 'Back');
  +                     $cgi->submit(-name => 'dialog', -value => 'Back');
           }
  -    } else {
  +    }
  +    else {
           $text .= "<font color=red>Missing filename<br><br>\n" .
  -        $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
  +                 $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
       }
   
  -   return $text;
  +    return $text;
   }
   ########################################################################################
   
  @@ -571,22 +572,25 @@
   ########################################################################################
   sub change_rights {
   ########################################################################################
  -    my ( $filename, $newrights ) = @_;
  +    my ($filename, $newrights) = @_;
       my $text = '';
       my $filerights = '';
   
  -    $text= "<font size=+2>" .
  -    "Changing rights of file:<br>" .
  -    "</font>" .
  -    "<br><font size=+1> $filename </font> to <font size=+1> $newrights </font><br>";
  -    if ($newrights eq "private" ) {
  -           $filerights = '';
  -    } elsif ($newrights eq "protected" ) {
  -           $filerights = "r";
  -    } elsif ($newrights eq "public" ) {
  -           $filerights = "rw";
  -    } else {
  -           die "Unknown file rights";
  +    $text = "<font size=+2>" .
  +            "Changing rights of file:<br>" .
  +            "</font>" .
  +            "<br><font size=+1> $filename </font> to <font size=+1> $newrights </font><br>";
  +    if ($newrights eq "private") {
  +        $filerights = '';
  +    }
  +    elsif ($newrights eq "protected") {
  +        $filerights = "r";
  +    }
  +    elsif ($newrights eq "public") {
  +        $filerights = "rw";
  +    }
  +    else {
  +        die "Unknown file rights";
       }
       system("chmod o=$filerights $filename") && die "Cannot set new file rights";
       $form = 'mainw';
  @@ -600,13 +604,11 @@
   ########################################################################################
   sub copy_file {
   ########################################################################################
  -    my ( $filename ) = @_;
  +    my ($filename) = @_;
       my $text = '';
  -    
  -
   
       if ($filename) {
  -        my $srcfile = $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $filename; 
  +        my $srcfile = $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $filename;
           $text .= $cgi->hidden(-name => 'srcfile', -default => $srcfile ) .
           "<font size=+1>" .
           "Copying File:<br>" .
  @@ -620,7 +622,7 @@
           "  <td>Destinationfile</td>" .
           " </tr>" .
           " <tr>" .
  -        "  <td>$srcfile</td>" . 
  +        "  <td>$srcfile</td>" .
           "  <td>" .
           "   <table>" .
           "   <tr>" .
  @@ -643,18 +645,19 @@
           " <td>" .
           " <td>" .
           $cgi->submit(-name => 'dialog_mainw', -value => 'Back').
  -        " </td>" .    
  +        " </td>" .
           " <td>" .
           $cgi->submit(-name => 'dialog_copy', -value => 'Copy').
  -        " </td>" .    
  -        " </td>" .    
  +        " </td>" .
  +        " </td>" .
           "</table>" ;
  -    } else {
  +    }
  +    else {
           $text .= "<font color=red>Missing filename<br><br>\n" .
  -        $cgi->submit(-name => 'dialog_mainw', -value => 'Back') ;
  +                 $cgi->submit(-name => 'dialog_mainw', -value => 'Back') ;
       }
   
  -    return $text; 
  +    return $text;
   }
   ########################################################################################
   
  @@ -662,31 +665,31 @@
   ########################################################################################
   sub del {
   ########################################################################################
  -    my ( $delfile ) = @_;
  +    my ($delfile) = @_;
       my $text = '';
   
       if ($delfile) {
           my $fpath = $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $delfile;
  -
  -        $text= "<font size=+2>" .
  -        "Delete File: $fpath<br><br>\n" .
  -        "</font>" .
  -        "<br><br>" ;
  +        $text = "<font size=+2>" .
  +                "Delete File: $fpath<br><br>\n" .
  +                "</font>" .
  +                "<br><br>";
           $delfile =~ m{^([a-zA-Z0-9!"<A3>$%^&*()-_=+#~]+)/(.+)}sg;
  -        if ( $1 eq $username ) {
  +        if ($1 eq $username) {
               system("rm $fpath") && die "Cannot delete file";
               $form = 'mainw';
               goto NEXTFORM;
  -        } else {
  -            $text .= "<font color=red>You can only delete file in your own directory<br><br>\n" ;
           }
  -    } else {
  -        $text .= "<font color=red>Missing filename<br><br>\n" ;
  +        else {
  +            $text .= "<font color=red>You can only delete file in your own directory<br><br>\n";
  +        }
  +    }
  +    else {
  +        $text .= "<font color=red>Missing filename<br><br>\n";
       }
   
  -    
  -    $text .= $cgi->submit(-name => 'dialog_mainw', -value => 'Back') ;
  -    
  +    $text .= $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
  +
       return $text;
   }
   ########################################################################################
  @@ -695,7 +698,7 @@
   ########################################################################################
   sub run {
   ########################################################################################
  -    my ( $runfile ) = @_;
  +    my ($runfile) = @_;
       my $text = '';
       my $rpath = $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $runfile;
       my $rcommand = $cfghash{'ExecuteCommand'};
  @@ -704,7 +707,7 @@
       my $outputtext = '';
   
       if ($runfile eq '') {
  -        $text .= "<font color=red>No configuration selected <br><br>\n" ;            
  +        $text .= "<font color=red>No configuration selected <br><br>\n" ;
           $text .= $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
           return $text;
       }
  @@ -715,34 +718,35 @@
       }
   
       $text .= "<font size=+2>" .
  -    "Running Configuration: $rpath<br><br>\n" .
  -    "</font>" .
  -    "<br><br>" .
  -    "Run command: " . $rcommand . "<br>" ;
  +             "Running Configuration: $rpath<br><br>\n" .
  +             "</font>" .
  +             "<br><br>" .
  +             "Run command: " . $rcommand . "<br>";
   
       system("$rcommand > $output 2>&1");
   
       $fileoutput = IO::File->new("<$output");
  -    if(defined $fileoutput) {
  +    if (defined $fileoutput) {
           while (<$fileoutput>) {
               $outputtext .= $_;
           }
           $fileoutput->close();
   
  -        my $outputhash ={   -name => 'outputwindow',
  -                            -default => $outputtext,
  -                            -rows    => 40,
  -                            -columns => 80
  +        my $outputhash = {
  +            -name => 'outputwindow',
  +            -default => $outputtext,
  +            -rows    => 40,
  +            -columns => 80
           };
  -        $outputhash->{readonly}="";
  -        $text .= $cgi->textarea($outputhash).
  -        "<br>" ;
  -     } else {
  -         $text .= "<font color=red>Run command not working<br><br>\n" ;            
  -     }
  -     $text .= $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
  +        $outputhash->{readonly} = "";
  +        $text .= $cgi->textarea($outputhash) . "<br>";
  +    }
  +    else {
  +        $text .= "<font color=red>Run command not working<br><br>\n";
  +    }
  +    $text .= $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
   
  -     return $text;
  +    return $text;
   }
   ########################################################################################
   
  @@ -750,20 +754,20 @@
   ########################################################################################
   sub copy {
   ########################################################################################
  -    my ( $srcf, $dstf ) = @_;
  +    my ($srcf, $dstf) = @_;
       my $text = '';
   
       $text .= "<font size=+1>" .
  -    "Copying File:<br>" .
  -    "</font><br><br>" .
  -    "Copying from <font size=+1>$srcf</font> to <font size=+1>$dstf</font><br><br>" ;
  +             "Copying File:<br>" .
  +             "</font><br><br>" .
  +             "Copying from <font size=+1>$srcf</font> to <font size=+1>$dstf</font><br><br>";
   
       system("cp $srcf $dstf") && die "Cannot copy file";
       system("chmod o= $dstf") && die "Cannot change file rights";
   
       $form = 'mainw';
  -    goto NEXTFORM; 
  -    
  +    goto NEXTFORM;
  +
       return $text;
   }
   ########################################################################################
  @@ -772,31 +776,32 @@
   ########################################################################################
   sub read_config {
   ########################################################################################
  -    my ($cfgfile) = @_;   
  +    my ($cfgfile) = @_;
       my %cfghash ;
       my $cfgin ;
       my $key;
       my $content;
   
  -    print "Lese file: $cfgfile\n"; 
  +    print "Reading file: $cfgfile\n";
       $cfgin = IO::File->new("<$cfgfile");
   
       if (defined $cfgin) {
  -        LOOP: while(<$cfgin>) { 
  -            $_ =~ s|^\s+(.*?)|{$_=$1}|es;       # Remove whitespaces at the beginning 
  -            next LOOP if $_ =~ /^\n/;           # Remove the first empty require 
  +        LOOP: while(<$cfgin>) {
  +            $_ =~ s|^\s+(.*?)|{$_=$1}|es;       # Remove whitespaces at the beginning
  +            next LOOP if $_ =~ /^\n/;           # Remove the first empty require
               next LOOP if $_ eq "";              # Remove empty line
               next LOOP if $_ =~/^#/;             # Remove comment lines
   
  -            $_ =~ s|^([^#]+)#(.*)$|{$_=$1}|es;  # Remove comments on the end 
  -            $_ =~ s|(.*?)\s+$|{$_=$1}|es;       # Remove whitespaces at the end 
  +            $_ =~ s|^([^#]+)#(.*)$|{$_=$1}|es;  # Remove comments on the end
  +            $_ =~ s|(.*?)\s+$|{$_=$1}|es;       # Remove whitespaces at the end
   
               ($key, $content) =  /^(\w+)\s+(.*)$/;
   
               $cfghash{$key} = $content;
           }
           $cfgin->close;
  -    } else {
  +    }
  +    else {
           die "Can't open config file";
       }
       return (%cfghash);
  @@ -812,10 +817,10 @@
       my $uname;
       my $pwd;
       my $pwdin;
  - 
  +
       $pwdin = IO::File->new("<$pwdfile");
       if(defined $pwdin) {
  -        while(<$pwdin>) {
  +        while (<$pwdin>) {
               $_ =~ s|^(\w+):(.+)$|{$uname=$1; $pwd=$2}|eg;
               ( $uname =~ $user ) && do {     # check the password
                   if (crypt($password, $pwd) eq $pwd){
  @@ -824,9 +829,7 @@
               }
           }
       }
  -
       $pwdin->close();
  -
       return $returnvalue;
   }
   ########################################################################################
  @@ -835,17 +838,16 @@
   ########################################################################################
   sub readsubdir {
   ########################################################################################
  -    my ( $dir ) = @_;
  +    my ($dir) = @_;
       my $filestring = "";
       my $direntry = "";
   
  -    opendir(DIR, "$dir");       # Open dir for scanning
  -    
  +    opendir(DIR, "$dir");
       foreach $direntry (readdir(DIR)) {
           next if $direntry eq ".";
           next if $direntry eq "..";
           if (-d "$dir/$direntry") {
  -            $filestring .= $direntry. " ";
  +            $filestring .= $direntry . " ";
           }
       }
       closedir(DIR);
  @@ -857,17 +859,16 @@
   ########################################################################################
   sub readdir {
   ########################################################################################
  -    my ( $dir ) = @_;
  +    my ($dir) = @_;
       my $filestring = "";
       my $direntry = "";
   
  -    opendir(DIR, "$dir");       # Open dir for scanning
  -    
  +    opendir(DIR, "$dir");
       foreach $direntry (readdir(DIR)) {
           next if $direntry eq ".";
           next if $direntry eq "..";
           if (-f "$dir/$direntry") {
  -            $filestring .= $direntry. " ";
  +            $filestring .= $direntry . " ";
           }
       }
       closedir(DIR);
  @@ -879,10 +880,10 @@
   ########################################################################################
   sub strsort {
   ########################################################################################
  -    my ( $sortstr ) = @_;
  +    my ($sortstr) = @_;
  +
  +    my @sortarray = split(/ /, $sortstr);
   
  -    my @sortarray = split (/ /, $sortstr);
  -     
       @sortarray = reverse sort {$b cmp $a} @sortarray;
       $sortstr = join(" ", @sortarray);
   
  @@ -902,49 +903,52 @@
       my $titletext ;
   
       $filein = IO::File->new("<$file");
  -    if(defined $filein) {
  -        while(<$filein>) { $editf .= $_; }
  -        $filein->close(); 
  -    } else {
  +    if (defined $filein) {
  +        while(<$filein>) {
  +            $editf .= $_;
  +        }
  +        $filein->close();
  +    }
  +    else {
           die "Can't open $file";
       }
  -    
  +
       if ($mode eq 'w') {
           $titletext = "Edit window";
       } elsif ($mode eq 'r') {
  -       $titletext = "View window";
  +        $titletext = "View window";
       }
   
  -    my $textahash ={ -name => 'editwindow',
  -          -default => $editf,
  -          -rows    => 40,
  -          -columns => 80
  +    my $textahash = {
  +        -name => 'editwindow',
  +        -default => $editf,
  +        -rows    => 40,
  +        -columns => 80
       };
       if ($mode eq 'r') {
           $textahash->{readonly}="";
       }
       $texte .= "<font size=+2>" .
  -    $titletext . ":   <br><br>\n" .
  -    "</font>" .
  -    "<font size=+1>" .
  -    "File: $file<br><br>\n" .
  -    "</font>" .
  -    $cgi->textarea($textahash).
  -    "<br><br>\n" .
  -    "<table>" .
  -    "  <td>" .
  -    "    <td>" .
  -    $cgi->submit(-name => 'dialog_mainw', -value => 'Back') .
  -    "   </td>";
  +              $titletext . ":   <br><br>\n" .
  +              "</font>" .
  +              "<font size=+1>" .
  +              "File: $file<br><br>\n" .
  +              "</font>" .
  +              $cgi->textarea($textahash).
  +              "<br><br>\n" .
  +              "<table>" .
  +              "  <td>" .
  +              "    <td>" .
  +              $cgi->submit(-name => 'dialog_mainw', -value => 'Back') .
  +              "   </td>";
       if ($mode eq 'w') {
  -    $texte .= "   <td>" .
  -    $cgi->submit(-name => 'dialog_save', -value => 'Save') .
  -    "   </td>";
  +        $texte .= "   <td>" .
  +                  $cgi->submit(-name => 'dialog_save', -value => 'Save') .
  +                  "   </td>";
       }
       $texte .= "  <td>" .
  -    " </td>" .
  -    "</table>" ;
  -
  +              " </td>" .
  +              "</table>";
       return $texte;
   }
   ########################################################################################

From ossp-cvs-owner@ossp.org  Fri May 17 20:34:14 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 605FE7638A; Fri, 17 May 2002 20:34:14 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea.cfg tabea.cgi
Message-Id: <20020517183414.605FE7638A@mail.ossp.org>
Date: Fri, 17 May 2002 20:34:14 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-May-2002 20:34:14
  Branch: HEAD                             Handle: 2002051719341300

  Modified files:
    ossp-pkg/tabea          tabea.cfg tabea.cgi

  Log:
    finish unfinished password file stuff

  Summary:
    Revision    Changes     Path
    1.2         +1  -0      ossp-pkg/tabea/tabea.cfg
    1.25        +1  -3      ossp-pkg/tabea/tabea.cgi
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea.cfg
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 tabea.cfg
  --- ossp-pkg/tabea/tabea.cfg	15 Apr 2002 09:39:04 -0000	1.1
  +++ ossp-pkg/tabea/tabea.cfg	17 May 2002 18:34:13 -0000	1.2
  @@ -3,6 +3,7 @@
   ##
   
   ConfigDirectory  tabea.d
  +PasswdFile       tabea.pw
   ConfigDefault    default
   ExecuteCommand   sudo js_prepare -f %{profile}
   PageTemplate     tabea.page.html %%TITLE%% %%BODY%% 
  Index: ossp-pkg/tabea/tabea.cgi
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 tabea.cgi
  --- ossp-pkg/tabea/tabea.cgi	17 May 2002 18:28:01 -0000	1.24
  +++ ossp-pkg/tabea/tabea.cgi	17 May 2002 18:34:13 -0000	1.25
  @@ -36,8 +36,6 @@
   $|++;
   
   my $cfgfile    = "./tabea.cfg";
  -my $pwdfile    = "./tabea.pw";
  -my $configsdir = "./tabea.d";
   
   # establish my configuration
   my $MY = {};
  @@ -812,7 +810,7 @@
   ########################################################################################
   sub validpassword {
   ########################################################################################
  -    my ($user, $password) = @_;
  +    my ($user, $password, $pwdfile) = @_;
       my $returnvalue = 0;
       my $uname;
       my $pwd;

From ossp-cvs-owner@ossp.org  Fri May 17 20:34:23 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A668476363; Fri, 17 May 2002 20:34:23 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea.db tabea.log
Message-Id: <20020517183423.A668476363@mail.ossp.org>
Date: Fri, 17 May 2002 20:34:23 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-May-2002 20:34:23
  Branch: HEAD                             Handle: 1970010101000000

  Removed files:
    ossp-pkg/tabea          tabea.db tabea.log

  Log:
    remove unused files

  Summary:
    Revision    Changes     Path
    NONE        +0  -2      ossp-pkg/tabea/tabea.db
    NONE        +0  -1      ossp-pkg/tabea/tabea.log
  ____________________________________________________________________________

    

From ossp-cvs-owner@ossp.org  Fri May 17 20:36:58 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 79D4476363; Fri, 17 May 2002 20:36:58 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea.cgi
Message-Id: <20020517183658.79D4476363@mail.ossp.org>
Date: Fri, 17 May 2002 20:36:58 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-May-2002 20:36:58
  Branch: HEAD                             Handle: 2002051719365800

  Modified files:
    ossp-pkg/tabea          tabea.cgi

  Log:
    more cleanups

  Summary:
    Revision    Changes     Path
    1.26        +3  -5      ossp-pkg/tabea/tabea.cgi
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea.cgi
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 tabea.cgi
  --- ossp-pkg/tabea/tabea.cgi	17 May 2002 18:34:13 -0000	1.25
  +++ ossp-pkg/tabea/tabea.cgi	17 May 2002 18:36:58 -0000	1.26
  @@ -35,7 +35,7 @@
   
   $|++;
   
  -my $cfgfile    = "./tabea.cfg";
  +my $cfgfile = "./tabea.cfg";
   
   # establish my configuration
   my $MY = {};
  @@ -79,7 +79,7 @@
   }
   
   # Read the configuration
  -my %cfghash = read_config($cfgfile);
  +my %cfghash = &read_config($cfgfile);
   
   #   fetch parameters
   my $dialog   = $cgi->param("dialog")   || "";
  @@ -155,7 +155,7 @@
   $out =~ s|%%BODY%%|$page|s;
   $out =~ s|%%TITLE%%|Test|s;
   
  -print $cgi->header(-cookie => $cookies, -expires => '+1s') . $out;
  +print STDOUT $cgi->header(-cookie => $cookies, -expires => '+1s') . $out;
   
   exit(0);
   
  @@ -780,9 +780,7 @@
       my $key;
       my $content;
   
  -    print "Reading file: $cfgfile\n";
       $cfgin = IO::File->new("<$cfgfile");
  -
       if (defined $cfgin) {
           LOOP: while(<$cfgin>) {
               $_ =~ s|^\s+(.*?)|{$_=$1}|es;       # Remove whitespaces at the beginning

From ossp-cvs-owner@ossp.org  Wed May 22 11:47:28 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5614976363; Wed, 22 May 2002 11:47:28 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.c
Message-Id: <20020522094728.5614976363@mail.ossp.org>
Date: Wed, 22 May 2002 11:47:28 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   22-May-2002 11:47:28
  Branch: HEAD                             Handle: 2002052210472700

  Modified files:
    ossp-pkg/rc             rc.c

  Log:
    Architecture in main program body should reflect the design.

  Summary:
    Revision    Changes     Path
    1.26        +37 -15     ossp-pkg/rc/rc.c
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.c
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 rc.c
  --- ossp-pkg/rc/rc.c	13 May 2002 16:57:00 -0000	1.25
  +++ ossp-pkg/rc/rc.c	22 May 2002 09:47:27 -0000	1.26
  @@ -41,26 +41,18 @@
   int main(int argc, char *argv[])
   {
       ex_t Except;
  -    rc_proc_t *pProc = NULL;
  +    rc_anal_t *pAnal = NULL;    /* Holds preprocessed configuration */
   
  -    ex_try {
  +    ex_try { /* Configuration and abstract analysis block */
           configNew();            /* Construct a new configuration              */
           configLoad(argc, argv); /* Read configuration from cli, env, and conf */
           configDebug();          /* FIXME Remove FIXME */
           configVerify();         /* Test for usage, help, and version options  */
   
  -        pProc = procNew();
  -        procReadtmp(pProc, configGetval(RC_TMP_VAL));
  -/*        procReadfuncs(pProc, configGetval(RC_FNC_VAL));
  -        procReadrc(pProc, configGetrcfile());
  -        for (i = 0; i < clioptGetseclen; procSection(pProc, configGetsec(i++)));
  -        procParse(pProc);         /- Script generation               -/
  -        procRun(pProc);*/         /* [Execute|Evaluate|Print] script */
  -
  -        procDelete(pProc);
  -        configDelete();
  +        pAnal = analNew();      /* Construct a new analyzer                   */
  +        analParse(pAnal);       /* Preprocess the analyzed configuration      */
       }
  -    ex_catch(Except) {
  +    ex_catch(Except) { /* Exceptions thrown during configuration and analysis */
           if ((rc_return_t)Except.ex_value == RC_ERR_USE) {
               clioptPrintusage();
           }
  @@ -68,8 +60,38 @@
               fprintf(stderr, "Class '%s' threw exception %d in %s:%s():%d.\n",\
                      (char *)Except.ex_class, (int)Except.ex_value,\
                      Except.ex_file, Except.ex_func, Except.ex_line);
  -        exit(1);        /* Failure */
  +        exit(1);                /* Report failure and exit the program        */
  +    }
  +
  +    ex_try { /* Main script building and processing block */
  +        rc_script_t *pScript = NULL;
  +        rc_proc_t *pProc     = NULL;
  +
  +        pScript = scriptNew(pAnal); /* Construct a new script           */
  +        scriptBuild(pScript);
  +
  +        pProc = procNew(pScript);   /* Construct a new processor        */
  +        procRun(pProc);             /* [Execute|Evaluate|Print] script  */
  +        procDelete(pProc);          /* Destroy the processor            */
  +        scriptDelete(pScript);      /* Destroy the script               */
  +    }
  +    ex_catch(Except) {  /* Exceptions thrown during script processing   */
  +        fprintf(stderr, "Class '%s' threw exception %d in %s:%s():%d.\n",\
  +               (char *)Except.ex_class, (int)Except.ex_value,\
  +               Except.ex_file, Except.ex_func, Except.ex_line);
  +        exit(1);        /* Return failure */
  +    }
  +
  +    ex_try { /* Start shutdown of main program */
  +        analDelete(pAnal);          /* Destroy the analyzer             */
  +        configDelete();             /* Destroy the configuration        */
  +    }
  +    ex_catch(Except) { /* Exceptions thrown during program shutdown     */
  +        fprintf(stderr, "Class '%s' threw exception %d in %s:%s():%d.\n",\
  +               (char *)Except.ex_class, (int)Except.ex_value,\
  +               Except.ex_file, Except.ex_func, Except.ex_line);
  +        exit(1);    /* Return failure */
       }
   
  -    exit(0);            /* Success */
  +    exit(0);        /* Return success */
   }

From ossp-cvs-owner@ossp.org  Wed May 22 15:29:41 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8A4B276363; Wed, 22 May 2002 15:29:41 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc Makefile.in rc.c rc.h rc_cliopt.c rc_config.c ...
Message-Id: <20020522132941.8A4B276363@mail.ossp.org>
Date: Wed, 22 May 2002 15:29:41 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   22-May-2002 15:29:41
  Branch: HEAD                             Handle: 2002052214294000

  Modified files:
    ossp-pkg/rc             Makefile.in rc.c rc.h rc_cliopt.c rc_config.c
                            rc_config.h rc_const.h rc_private.h rc_test.sh

  Log:
    Fix the build, comment missing pieces, and synchronize throughout.

  Summary:
    Revision    Changes     Path
    1.27        +4  -4      ossp-pkg/rc/Makefile.in
    1.27        +26 -22     ossp-pkg/rc/rc.c
    1.26        +21 -41     ossp-pkg/rc/rc.h
    1.9         +38 -70     ossp-pkg/rc/rc_cliopt.c
    1.16        +16 -29     ossp-pkg/rc/rc_config.c
    1.5         +1  -1      ossp-pkg/rc/rc_config.h
    1.6         +2  -0      ossp-pkg/rc/rc_const.h
    1.12        +20 -0      ossp-pkg/rc/rc_private.h
    1.10        +2  -2      ossp-pkg/rc/rc_test.sh
  ____________________________________________________________________________

  Index: ossp-pkg/rc/Makefile.in
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 Makefile.in
  --- ossp-pkg/rc/Makefile.in	25 Apr 2002 16:17:57 -0000	1.26
  +++ ossp-pkg/rc/Makefile.in	22 May 2002 13:29:40 -0000	1.27
  @@ -59,11 +59,11 @@
   TARGET_PROGS    = rc
   TARGET_MANS     = rc.1 rc-sample.5
   
  -SRCS            = rc.c rc_config.c rc_cliopt.c rc_proc.c \
  -                  rc_version.c rc_pcre.c rc_util.c
  +SRCS            = rc.c rc_anal.c rc_config.c rc_cliopt.c \
  +                  rc_proc.c rc_version.c rc_pcre.c rc_util.c
   
  -OBJS            = rc.o rc_config.o rc_cliopt.o rc_proc.o \
  -                  rc_version.o rc_pcre.o rc_util.o
  +OBJS            = rc.o rc_anal.o rc_config.o rc_cliopt.o \
  +                  rc_proc.o rc_version.o rc_pcre.o rc_util.o
   
   SUBDIRS         = @SUBDIR_EX@ @SUBDIR_POPT@
   #SUBDIRS         = @SUBDIR_EX@ @SUBDIR_VAR@ @SUBDIR_VAL@ @SUBDIR_STR@ @SUBDIR_POPT@
  Index: ossp-pkg/rc/rc.c
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 rc.c
  --- ossp-pkg/rc/rc.c	22 May 2002 09:47:27 -0000	1.26
  +++ ossp-pkg/rc/rc.c	22 May 2002 13:29:40 -0000	1.27
  @@ -45,18 +45,18 @@
   
       ex_try { /* Configuration and abstract analysis block */
           configNew();            /* Construct a new configuration              */
  -        configLoad(argc, argv); /* Read configuration from cli, env, and conf */
  +        configLoad(argc, (const char **)argv); /* Load cli, env, and conf     */
           configDebug();          /* FIXME Remove FIXME */
           configVerify();         /* Test for usage, help, and version options  */
   
  -        pAnal = analNew();      /* Construct a new analyzer                   */
  -        analParse(pAnal);       /* Preprocess the analyzed configuration      */
  +/*        pAnal = analNew();*/      /* Construct a new analyzer                   */
  +/*        analParse(pAnal);*/       /* Preprocess the analyzed configuration      */
       }
       ex_catch(Except) { /* Exceptions thrown during configuration and analysis */
           if ((rc_return_t)Except.ex_value == RC_ERR_USE) {
               clioptPrintusage();
           }
  -        else
  +        else if (FAILED((rc_return_t)Except.ex_value))
               fprintf(stderr, "Class '%s' threw exception %d in %s:%s():%d.\n",\
                      (char *)Except.ex_class, (int)Except.ex_value,\
                      Except.ex_file, Except.ex_func, Except.ex_line);
  @@ -64,33 +64,37 @@
       }
   
       ex_try { /* Main script building and processing block */
  -        rc_script_t *pScript = NULL;
  +/*        rc_script_t *pScript = NULL;*/
           rc_proc_t *pProc     = NULL;
   
  -        pScript = scriptNew(pAnal); /* Construct a new script           */
  -        scriptBuild(pScript);
  +/*        pScript = scriptNew(pAnal);*/ /* Construct a new script           */
  +/*        scriptBuild(pScript);*/
   
  -        pProc = procNew(pScript);   /* Construct a new processor        */
  -        procRun(pProc);             /* [Execute|Evaluate|Print] script  */
  -        procDelete(pProc);          /* Destroy the processor            */
  -        scriptDelete(pScript);      /* Destroy the script               */
  +/*        pProc = procNew(pScript);*/   /* Construct a new processor        */
  +/*        procRun(pProc);*/             /* [Execute|Evaluate|Print] script  */
  +/*        procDelete(pProc);*/          /* Destroy the processor            */
  +/*        scriptDelete(pScript);*/      /* Destroy the script               */
       }
  -    ex_catch(Except) {  /* Exceptions thrown during script processing   */
  -        fprintf(stderr, "Class '%s' threw exception %d in %s:%s():%d.\n",\
  -               (char *)Except.ex_class, (int)Except.ex_value,\
  -               Except.ex_file, Except.ex_func, Except.ex_line);
  -        exit(1);        /* Return failure */
  +    ex_catch(Except) {  /* Error exceptions thrown during script processing */
  +        if (FAILED((rc_return_t)Except.ex_value)) {
  +            fprintf(stderr, "Class '%s' threw exception %d in %s:%s():%d.\n",\
  +                (char *)Except.ex_class, (int)Except.ex_value,\
  +                Except.ex_file, Except.ex_func, Except.ex_line);
  +            exit(1); /* Return failure */
  +        }
       }
   
       ex_try { /* Start shutdown of main program */
  -        analDelete(pAnal);          /* Destroy the analyzer             */
  +/*        analDelete(pAnal);*/          /* Destroy the analyzer             */
           configDelete();             /* Destroy the configuration        */
       }
  -    ex_catch(Except) { /* Exceptions thrown during program shutdown     */
  -        fprintf(stderr, "Class '%s' threw exception %d in %s:%s():%d.\n",\
  -               (char *)Except.ex_class, (int)Except.ex_value,\
  -               Except.ex_file, Except.ex_func, Except.ex_line);
  -        exit(1);    /* Return failure */
  +    ex_catch(Except) { /* Error exceptions thrown during program shutdown */
  +        if (FAILED((rc_return_t)Except.ex_value)) {
  +            fprintf(stderr, "Class '%s' threw exception %d in %s:%s():%d.\n",\
  +                (char *)Except.ex_class, (int)Except.ex_value,\
  +                Except.ex_file, Except.ex_func, Except.ex_line);
  +            exit(1); /* Return failure */
  +        }
       }
   
       exit(0);        /* Return success */
  Index: ossp-pkg/rc/rc.h
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 rc.h
  --- ossp-pkg/rc/rc.h	13 May 2002 16:57:00 -0000	1.25
  +++ ossp-pkg/rc/rc.h	22 May 2002 13:29:40 -0000	1.26
  @@ -43,65 +43,55 @@
   #define TRUE (!FALSE)
   #endif
   
  +/* Return and error code macro helpers */
  +#define WARNING(scode)    (scode >= RC_WRN_0)
  +#define FAILED(scode)    ((scode >= RC_ERR_0) && !WARNING(scode))
  +#define SUCCEEDED(scode) ((scode == RC_OK)    ||  WARNING(scode))
  +
   #include "rc_private.h"
   
   /* Rc return codes */
   typedef enum {
  -    RC_OK,      /* Success                  */
  -    RC_ERR_USE, /* Usage error              */
  -    RC_ERR_MEM, /* Memory error             */
  -    RC_ERR_SYS, /* System error (see errno) */
  -    RC_ERR_IO,  /* Input/output error       */
  -    RC_ERR_INT  /* Internal error           */
  +    RC_OK      = 1, /* Success                  */
  +    RC_ERR_0   = 2, /* Error base               */
  +    RC_ERR_USE = 3, /* Usage error              */
  +    RC_ERR_MEM = 4, /* Memory error             */
  +    RC_ERR_SYS = 5, /* System error (see errno) */
  +    RC_ERR_IO  = 6, /* Input/output error       */
  +    RC_ERR_INT = 7, /* Internal error           */
  +    RC_WRN_0   = 8, /* Warning base             */
  +    RC_WRN_OWR = 9  /* Overwrite warning        */
   } rc_return_t;
   
  -/* Processor class */
  -typedef struct {
  -    int nTmpfile;   /* Temp file descriptor */
  -} rc_proc_t;
  -
  -/* Rc script type */
  -typedef char *rc_script_t;
  -
  -/* Option function prototypes */
  -/*rc_return_t optionProcess(void);
  -rc_return_t optionProcess(void);*/
  -
   /* Config function prototypes */
   rc_return_t configNew(void);
  -rc_return_t configLoad(int, char **);
  +rc_return_t configLoad(int, const char **);
   rc_return_t configVerify(void);
   rc_return_t configDelete(void);
   const char *configSummarize(void);
  -void configDebug(void);                 /* FIXME Remove */
  +void configDebug(void); /* FIXME Remove */
   
   /* Config accessor prototypes */
   const char *configGetval(rc_opt_t);
   const char *configGetname(rc_opt_t);
   const char *configGetrcfile(void);
  -const char *configGetsec(int);
  +const char **configGetsecs(void);
   
   /* Command line function prototypes */
   rc_return_t clioptNew(void);
   rc_return_t clioptPrintusage(void);
  -/*FIXME    rc_return_t clioptRemnode(rc_bintup_t **);
  -    rc_return_t clioptRemallimp(rc_bintup_t **);
  -    rc_return_t clioptRemall(void);
  -    rc_return_t clioptAppnode(const char *, const char *);*/
   rc_return_t clioptProcess(int, const char *);
  -rc_return_t clioptParseopt(int, char **);
  -rc_return_t clioptParserc(void);
  -rc_return_t clioptParsesec(void);
  +rc_return_t clioptParseopts(int, const char **);
  +rc_return_t clioptParseargs(void);
   rc_return_t clioptDelete(void);
   
   /* Command line accessor prototypes */
   const char *clioptGetval(rc_opt_t);
   const char *clioptGetrcfile(void);
  -const char **clioptGetsec(void);
  -int clioptGetseclen(void);
  +const char **clioptGetsecs(void);
   rc_return_t clioptSetval(rc_opt_t, const char *);
   rc_return_t clioptSetrcfile(const char *);
  -rc_return_t clioptSetsec(const char **);
  +rc_return_t clioptSetsecs(const char **);
   
   /* Processor function prototypes */
   rc_proc_t *procNew(void);
  @@ -112,16 +102,6 @@
   rc_return_t procSection(rc_proc_t *, const char *);
   rc_return_t procParse(rc_proc_t *);
   rc_return_t procRun(rc_proc_t *);
  -
  -    /* Option function prototypes */
  -    /*FIXME rc_return_t optNew(rc_opt_t **);
  -    rc_return_t optDelete(rc_opt_t **);*/
  -
  -    /* Option accessor prototypes */
  -    /*FIXME rc_return_t optGetname(rc_opt_t *, char **);
  -    rc_return_t optGetval(rc_opt_t *, char **);
  -    rc_return_t optSetname(rc_opt_t *, const char *);
  -    rc_return_t optSetval(rc_opt_t *, const char *);*/
   
   /* Utility (nonbounded) function prototypes */
   char *strErr(rc_return_t);
  Index: ossp-pkg/rc/rc_cliopt.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 rc_cliopt.c
  --- ossp-pkg/rc/rc_cliopt.c	25 Apr 2002 16:17:57 -0000	1.8
  +++ ossp-pkg/rc/rc_cliopt.c	22 May 2002 13:29:40 -0000	1.9
  @@ -36,8 +36,8 @@
   #include "popt.h"                              /* OSSP popt options library   */
   
   static char        *m_pszOptuples[RC_NUMOPTS]; /* Option name value tuples    */
  -static char        *m_szRcfile = NULL;         /* rc file                     */
  -static char       **m_pszSec   = NULL;         /* Section names               */
  +static char        *m_szRcfile  = NULL;        /* rc file name                */
  +static char        **m_pszSecs  = NULL;        /* Section names               */
   static popt_context m_Optcon;                  /* Context for parsing options */
   
   static struct popt_option m_pOptable[] = {
  @@ -135,23 +135,12 @@
       return((const char *)m_szRcfile);
   }
   
  -const char **clioptGetsec(void)
  +const char **clioptGetsecs(void)
   {
  -    if (!m_pszSec)
  +    if (!m_pszSecs)
           RC_THROW(RC_ERR_USE);
   
  -    return((const char **)m_pszSec);
  -}
  -
  -int clioptGetseclen(void)
  -{
  -    int i = 0;
  -
  -    if (!m_pszSec)
  -        RC_THROW(RC_ERR_USE);
  -
  -    for (i = 0; m_pszSec[i]; i++);
  -    return(i);
  +    return((const char **)m_pszSecs);
   }
   
   rc_return_t clioptSetval(rc_opt_t Optname, const char *kszOptval)
  @@ -168,9 +157,9 @@
   
   rc_return_t clioptSetrcfile(const char *kszRc)
   {
  -    if (m_szRcfile)                     /* Forbid overwriting */
  -        return(RC_THROW(RC_ERR_USE));   /* an existing rcfile */
  -    else if (kszRc)
  +    if (m_szRcfile)                     /* Warn on overwrites */
  +        RC_THROW(RC_WRN_OWR);
  +    if (kszRc)
           m_szRcfile = strdup(kszRc);
       else
           return(RC_THROW(RC_ERR_USE));   /* Incoming string is NULL? */
  @@ -178,22 +167,23 @@
       return(RC_THROW(RC_OK));
   }
   
  -rc_return_t clioptSetsec(const char *pkszSec[])
  +rc_return_t clioptSetsecs(const char **pkszSecs)
   {
       int nSecs  = 0;
       int nIndex = 0;
   
  -    if (m_pszSec)                                    /* Forbid overwriting */
  -        return(RC_THROW(RC_ERR_USE));                /* an existing rcfile */
  -    else if (pkszSec) {
  -        for (nSecs = 0; pkszSec[nSecs]; nSecs++);    /* Count the sections */
  -        m_pszSec = malloc(sizeof (char **) * nSecs + 1);
  -
  -        for (nIndex = 0; pkszSec[nIndex]; nIndex++) {
  -            m_pszSec[nIndex] = malloc(strlen(pkszSec[nIndex]));
  -            memcpy(m_pszSec[nIndex], pkszSec[nIndex], strlen(pkszSec[nIndex]));
  +    if (m_pszSecs)                                  /* Warn on overwrites */
  +        RC_THROW(RC_WRN_OWR);
  +    if (pkszSecs) {
  +        for (nSecs = 0; pkszSecs[nSecs]; nSecs++);  /* Count the sections */
  +        m_pszSecs = malloc(sizeof (char **) * nSecs + 1);
  +
  +        for (nIndex = 0; pkszSecs[nIndex]; nIndex++) {
  +            m_pszSecs[nIndex] = malloc(strlen(pkszSecs[nIndex]));
  +            memcpy(m_pszSecs[nIndex], pkszSecs[nIndex],\
  +                   strlen(pkszSecs[nIndex]));
           }
  -        m_pszSec[nIndex] = NULL; /* Used later to find the end of the array */
  +        m_pszSecs[nIndex] = NULL; /* Used later to find the end of the array */
       }
       else
           return(RC_THROW(RC_ERR_USE));   /* Incoming sections are NULL? */
  @@ -280,18 +270,18 @@
   }
   
   /***************************************
  -* clioptParseopt(int, char **)         *
  +* clioptParseopts(int, const char **)  *
   * Parse command line options           *
   ***************************************/
  -rc_return_t clioptParseopt(int argc, char *argv[])
  +rc_return_t clioptParseopts(int nArgs, const char *szVector[])
   {
       ex_t Except;
       char cliOpt = 0;    /* For argument parsing */
   
  -    m_Optcon = popt_getcontext(NULL, argc, (const char **)argv, m_pOptable, 0);
  +    m_Optcon = popt_getcontext(NULL, nArgs, szVector, m_pOptable, 0);
       popt_setotheroptionhelp(m_Optcon, "<rcfile> <sections [args]>");
   
  -    if (argc < 2) { /* Allow the user to enter just one option, -h z.B. */
  +    if (nArgs < 2) { /* Allow the user to enter just one option, -h z.B. */
           fprintf(stderr, RC_LST_TEXT);
           popt_printusage(m_Optcon, stderr, 0);
           return(RC_THROW(RC_ERR_USE));
  @@ -303,10 +293,6 @@
               clioptProcess(cliOpt, popt_getoptarg(m_Optcon));
           }
           ex_catch(Except) { /* Error condition probably deserves attention */
  -/* FIXME Examine the following line *(int *) for a potential segfault prob */
  -            fprintf(stderr, "Class '%s' threw exception %d in %s:%s():\
  -                %d.\n", (char *)Except.ex_class, *(int *)Except.ex_value,\
  -                Except.ex_file, Except.ex_func, Except.ex_line);
               rethrow;
           }
       }
  @@ -322,36 +308,18 @@
       return(RC_THROW(RC_OK));
   }
   
  -/***************************************
  -* clioptParserc(void)                  *
  -* Parse command line rc file           *
  -***************************************/
  -rc_return_t clioptParserc(void)
  -{
  -    ex_t Except;
  -
  -    /* Use popt as a transport to read the user specified rcfile           */
  -    ex_try { /* Retrieve exactly one rc file name from the command line    */
  -        clioptSetrcfile(popt_getarg(m_Optcon));     /* No file check here  */
  -    }
  -    ex_catch(Except) {
  -        rethrow; /* Our generic response */
  -    }
  -
  -    return(RC_THROW(RC_OK));
  -}
  -
  -/***************************************
  -* clioptParsesec(void)                 *
  -* Parse command line sections          *
  -***************************************/
  -rc_return_t clioptParsesec(void)
  +/******************************************
  +* clioptParseargs(void)                   *
  +* Parse command line rc file and sections *
  +******************************************/
  +rc_return_t clioptParseargs(void)
   {
       ex_t Except;
   
  -    /* Use popt as a transport to read the user specified sections  */
  -    ex_try { /* Retrieve one or more sections from the command line */
  -        clioptSetsec(popt_getargs(m_Optcon));
  +    /* Use popt as a transport to read the user specified rcfile and sections */
  +    ex_try {
  +        clioptSetrcfile(popt_getarg(m_Optcon));
  +        clioptSetsecs(popt_getargs(m_Optcon));
       }
       ex_catch(Except) {
           rethrow; /* Our generic response */
  @@ -391,12 +359,12 @@
   
       if (m_szRcfile)                     /* Free the rc file arg       */
           free(m_szRcfile);
  -    if (m_pszSec) {                     /* Free the section name arg  */
  -        for (i = 0; m_pszSec[i]; i++) {
  -            free(m_pszSec[i]);
  -            m_pszSec[i] = NULL;
  +    if (m_pszSecs) {                    /* Free the section name arg  */
  +        for (i = 0; m_pszSecs[i]; i++) {
  +            free(m_pszSecs[i]);
  +            m_pszSecs[i] = NULL;
           }
  -        free(m_pszSec);
  +        free(m_pszSecs);
       }
   
   /* FIXME BEGIN DEBUG */
  Index: ossp-pkg/rc/rc_config.c
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 rc_config.c
  --- ossp-pkg/rc/rc_config.c	25 Apr 2002 09:51:29 -0000	1.15
  +++ ossp-pkg/rc/rc_config.c	22 May 2002 13:29:40 -0000	1.16
  @@ -48,22 +48,14 @@
   void configDebug(void)
   {
       int i = 0;
  -    ex_t Except;
  -    char *szTemp = NULL;
  +    char **szTemp = NULL;
   
       fprintf(stderr, "Run command file: %s\n", configGetrcfile());
   
  -    szTemp = (char *)configGetsec(i);
  +    szTemp = (char **)configGetsecs();
       fprintf(stderr, "Sections:");
  -    while (szTemp) {
  -        fprintf(stderr, " %s", szTemp);
  -        ex_try {
  -            szTemp = (char *)configGetsec(++i);
  -        }
  -        ex_catch(Except) {
  -            break;
  -        }
  -    }
  +    while (szTemp[i])
  +        fprintf(stderr, " %s", szTemp[i++]);
   
       fprintf(stderr, "\n%s", configSummarize());
   }
  @@ -151,7 +143,7 @@
               /*         (2) it must be specified on the command line, */
               /* we don't bother checking the environment or conf file */
               /* contrary to the behaviour of Getval earlier           */
  -            return (clioptGetrcfile());
  +            return(clioptGetrcfile());
           }
           ex_catch(Except) {
               rethrow;
  @@ -160,22 +152,17 @@
       else {
           RC_THROW(RC_ERR_USE);
       }
  +
       return(NULL);   /* Not reached  */
   }
   
  -const char *configGetsec(int nIndex)
  +const char **configGetsecs(void)
   {
       ex_t Except;
  -    char **pszSectemp = NULL;
   
  -    if (m_nLocks && nIndex < clioptGetseclen()) {/* Make sure config exists   */
  -        ex_try {                                 /* FIXME Might need to check */
  -            pszSectemp = (char **)clioptGetsec();/* FIXME env, conf, configs  */
  -            if (pszSectemp[nIndex])
  -                return(pszSectemp[nIndex]);
  -            else {
  -                RC_THROW(RC_ERR_USE);
  -            }
  +    if (m_nLocks) {                             /* Make sure config exists   */
  +        ex_try {                                /* FIXME Might need to check */
  +            return(clioptGetsecs());            /* FIXME env, conf, configs  */
           }
           ex_catch(Except) {
               rethrow;
  @@ -184,6 +171,7 @@
       else {
           RC_THROW(RC_ERR_USE);
       }
  +
       return(NULL);   /* Not reached  */
   }
   
  @@ -234,17 +222,16 @@
   }
   
   /************************************************
  -* configLoad(int, char **)                      *
  +* configLoad(int, const char **)                *
   * Load a configuration                          *
   ************************************************/
  -rc_return_t configLoad(int argc, char *argv[])
  +rc_return_t configLoad(int nTotal, const char *szArgvec[])
   {
       ex_t Except;
   
  -    ex_try {    /* Parse option groups in order of priority      */
  -        clioptParseopt(argc, argv);     /* Command line options  */
  -        clioptParserc();                /* Command line rc file  */
  -        clioptParsesec();               /* Command line sections */
  +    ex_try {    /* Parse option groups in order of priority          */
  +        clioptParseopts(nTotal, szArgvec);  /* Command line options  */
  +        clioptParseargs();                  /* Command line args */
   /*        envoptParse(m_nLocks->pOpt);*/    /* Environment options   */
   /*        cnfoptParse(m_nLocks->pOpt);*/    /* Configfile options    */
       }
  Index: ossp-pkg/rc/rc_config.h
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 rc_config.h
  --- ossp-pkg/rc/rc_config.h	22 Apr 2002 12:49:26 -0000	1.4
  +++ ossp-pkg/rc/rc_config.h	22 May 2002 13:29:40 -0000	1.5
  @@ -47,7 +47,7 @@
   #define RC_LOC_VAL  13  /* Locations      */
   #define RC_CNF_VAL  14  /* Conf file      */
   #define RC_FNC_VAL  15  /* Func file      */
  -#define RC_QRY_VAL  16  /* Format         */
  +#define RC_QRY_VAL  16  /* Query          */
   #define RC_TMP_VAL  17  /* Temp dir       */
   #define RC_OWN_VAL  18  /* User name      */
   #define RC_GRP_VAL  19  /* Group name     */
  Index: ossp-pkg/rc/rc_const.h
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 rc_const.h
  --- ossp-pkg/rc/rc_const.h	24 Apr 2002 16:47:07 -0000	1.5
  +++ ossp-pkg/rc/rc_const.h	22 May 2002 13:29:40 -0000	1.6
  @@ -108,6 +108,8 @@
   #define RC_ERRSTR_INT "Internal"
   #define RC_ERRSTR_UNK "Unrecognized"
   
  +#define RC_CONF_WILD  "all"
  +
   /* FIXME Tie to shtool generation */
   #define RC_VERSION    "77.77"
   
  Index: ossp-pkg/rc/rc_private.h
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 rc_private.h
  --- ossp-pkg/rc/rc_private.h	12 Apr 2002 19:15:12 -0000	1.11
  +++ ossp-pkg/rc/rc_private.h	22 May 2002 13:29:40 -0000	1.12
  @@ -64,4 +64,24 @@
   
   typedef int rc_opt_t;   /* For use with RC_XXX_VAL definitions  */
   
  +/* Analyser type */
  +typedef struct {
  +    char *m_szRcs;   /* Rc file names       */
  +    char *m_szTmp;   /* Temp file name      */
  +    char *m_szFuncs; /* Function file names */
  +    char *m_szLocs;  /* Location path names */
  +    char *m_szSecs;  /* Section names       */
  +} rc_anal_t;
  +
  +/* Script type */
  +typedef struct {
  +    rc_anal_t *m_pAnal;
  +    char *m_szText;
  +} rc_script_t;
  +
  +/* Processor class */
  +typedef struct {
  +    rc_script_t *m_pScript;
  +} rc_proc_t;
  +
   #endif /* __OSSPRC_PRIVATE_H__ */
  Index: ossp-pkg/rc/rc_test.sh
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 rc_test.sh
  --- ossp-pkg/rc/rc_test.sh	22 Apr 2002 12:49:26 -0000	1.9
  +++ ossp-pkg/rc/rc_test.sh	22 May 2002 13:29:40 -0000	1.10
  @@ -38,8 +38,8 @@
   # Test some long options, should fail for false combination usage
   echo; echo "./rc --verbose --silent uucp stop sleep=6 start"
   ./rc --verbose --silent uucp stop sleep=6 start
  -echo; echo "./rc --query --silent zebra bing bang"
  -./rc --query --silent zebra bing bang
  +echo; echo "./rc --query myvar --silent zebra bing bang"
  +./rc --query myvar --silent zebra bing bang
   echo; echo "./rc --conf /sfw/rc.conf --locate /etc/rc3.d:/sfw/etc/rc.d --query what to enter here"
   ./rc --conf /sfw/rc.conf --locate /etc/rc3.d:/sfw/etc/rc.d --query what to enter here
   

From ossp-cvs-owner@ossp.org  Wed May 22 16:32:21 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B06E176363; Wed, 22 May 2002 16:32:20 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.c rc_proc.c
Message-Id: <20020522143220.B06E176363@mail.ossp.org>
Date: Wed, 22 May 2002 16:32:20 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   22-May-2002 16:32:20
  Branch: HEAD                             Handle: 2002052215322000

  Modified files:
    ossp-pkg/rc             rc.c rc_proc.c

  Log:
    Minor logic corrections, but mostly cleanup before continuing.

  Summary:
    Revision    Changes     Path
    1.28        +18 -21     ossp-pkg/rc/rc.c
    1.3         +1  -1      ossp-pkg/rc/rc_proc.c
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.c
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 rc.c
  --- ossp-pkg/rc/rc.c	22 May 2002 13:29:40 -0000	1.27
  +++ ossp-pkg/rc/rc.c	22 May 2002 14:32:20 -0000	1.28
  @@ -29,9 +29,7 @@
   
   #include <stdlib.h>
   
  -#include "rc.h"         /* Public interfaces            */
  -#include "rc_const.h"   /* Englisch string constants    */
  -#include "rc_config.h"  /* For RC_XXX_VAL definitions   */
  +#include "rc.h"     /* Public interfaces */
   
   
   /************************************************
  @@ -41,26 +39,26 @@
   int main(int argc, char *argv[])
   {
       ex_t Except;
  -    rc_anal_t *pAnal = NULL;    /* Holds preprocessed configuration */
  +    rc_anal_t *pAnal = NULL;    /* Holds preprocessed configuration       */
   
  -    ex_try { /* Configuration and abstract analysis block */
  -        configNew();            /* Construct a new configuration              */
  -        configLoad(argc, (const char **)argv); /* Load cli, env, and conf     */
  -        configDebug();          /* FIXME Remove FIXME */
  -        configVerify();         /* Test for usage, help, and version options  */
  +    ex_try {            /* Configuration and abstract analysis block      */
  +        configNew();    /* Construct a new configuration                  */
  +        configLoad(argc, (const char **)argv); /* Load cli, env, and conf */
  +        configDebug();  /* FIXME Remove FIXME */
  +        configVerify(); /* Test for usage, help, and version options      */
   
   /*        pAnal = analNew();*/      /* Construct a new analyzer                   */
   /*        analParse(pAnal);*/       /* Preprocess the analyzed configuration      */
       }
       ex_catch(Except) { /* Exceptions thrown during configuration and analysis */
  -        if ((rc_return_t)Except.ex_value == RC_ERR_USE) {
  +        if ((rc_return_t)Except.ex_value == RC_ERR_USE)
               clioptPrintusage();
  -        }
  -        else if (FAILED((rc_return_t)Except.ex_value))
  +        else
               fprintf(stderr, "Class '%s' threw exception %d in %s:%s():%d.\n",\
  -                   (char *)Except.ex_class, (int)Except.ex_value,\
  -                   Except.ex_file, Except.ex_func, Except.ex_line);
  -        exit(1);                /* Report failure and exit the program        */
  +                (char *)Except.ex_class, (int)Except.ex_value,\
  +                Except.ex_file, Except.ex_func, Except.ex_line);
  +        if (FAILED((rc_return_t)Except.ex_value)) /* NOP on warnings */
  +            exit(1); /* Report failure and exit the program */
       }
   
       ex_try { /* Main script building and processing block */
  @@ -76,12 +74,11 @@
   /*        scriptDelete(pScript);*/      /* Destroy the script               */
       }
       ex_catch(Except) {  /* Error exceptions thrown during script processing */
  -        if (FAILED((rc_return_t)Except.ex_value)) {
  -            fprintf(stderr, "Class '%s' threw exception %d in %s:%s():%d.\n",\
  -                (char *)Except.ex_class, (int)Except.ex_value,\
  -                Except.ex_file, Except.ex_func, Except.ex_line);
  -            exit(1); /* Return failure */
  -        }
  +        fprintf(stderr, "Class '%s' threw exception %d in %s:%s():%d.\n",\
  +            (char *)Except.ex_class, (int)Except.ex_value,\
  +            Except.ex_file, Except.ex_func, Except.ex_line);
  +        if (FAILED((rc_return_t)Except.ex_value)) /* NOP on warnings */
  +            exit(1); /* Report failure and exit the program */
       }
   
       ex_try { /* Start shutdown of main program */
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	13 May 2002 16:57:00 -0000	1.2
  +++ ossp-pkg/rc/rc_proc.c	22 May 2002 14:32:20 -0000	1.3
  @@ -29,7 +29,7 @@
   
   #include <stdlib.h>
   
  -#include "rc.h"         /* Public interfaces            */
  +#include "rc.h"     /* Public interfaces */
   
   
   /************************************************

From ossp-cvs-owner@ossp.org  Wed May 22 18:01:50 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8D59876363; Wed, 22 May 2002 18:01:50 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.c rc.h rc_anal.c rc_private.h
Message-Id: <20020522160150.8D59876363@mail.ossp.org>
Date: Wed, 22 May 2002 18:01:50 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   22-May-2002 18:01:50
  Branch: HEAD                             Handle: 2002052217014900

  Added files:
    ossp-pkg/rc             rc_anal.c
  Modified files:
    ossp-pkg/rc             rc.c rc.h rc_private.h

  Log:
    Addition of configuration analyiser and related adjustments to other sources.

  Summary:
    Revision    Changes     Path
    1.29        +11 -11     ossp-pkg/rc/rc.c
    1.27        +10 -0      ossp-pkg/rc/rc.h
    1.1         +130 -0     ossp-pkg/rc/rc_anal.c
    1.13        +2  -2      ossp-pkg/rc/rc_private.h
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.c
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 rc.c
  --- ossp-pkg/rc/rc.c	22 May 2002 14:32:20 -0000	1.28
  +++ ossp-pkg/rc/rc.c	22 May 2002 16:01:49 -0000	1.29
  @@ -41,16 +41,16 @@
       ex_t Except;
       rc_anal_t *pAnal = NULL;    /* Holds preprocessed configuration       */
   
  -    ex_try {            /* Configuration and abstract analysis block      */
  -        configNew();    /* Construct a new configuration                  */
  +    ex_try {                /* Configuration and abstract analysis block  */
  +        configNew();        /* Construct a new configuration              */
           configLoad(argc, (const char **)argv); /* Load cli, env, and conf */
  -        configDebug();  /* FIXME Remove FIXME */
  -        configVerify(); /* Test for usage, help, and version options      */
  +        configDebug();      /* FIXME Remove FIXME */
  +        configVerify();     /* Test for usage, help, and version options  */
   
  -/*        pAnal = analNew();*/      /* Construct a new analyzer                   */
  -/*        analParse(pAnal);*/       /* Preprocess the analyzed configuration      */
  +        pAnal = analNew();  /* Construct a new configuration analyser     */
  +        analParse(pAnal);   /* Preprocess the analysed configuration      */
       }
  -    ex_catch(Except) { /* Exceptions thrown during configuration and analysis */
  +    ex_catch(Except) {      /* Exceptions during configuration and analysis */
           if ((rc_return_t)Except.ex_value == RC_ERR_USE)
               clioptPrintusage();
           else
  @@ -63,7 +63,7 @@
   
       ex_try { /* Main script building and processing block */
   /*        rc_script_t *pScript = NULL;*/
  -        rc_proc_t *pProc     = NULL;
  +/*        rc_proc_t *pProc     = NULL;*/
   
   /*        pScript = scriptNew(pAnal);*/ /* Construct a new script           */
   /*        scriptBuild(pScript);*/
  @@ -81,9 +81,9 @@
               exit(1); /* Report failure and exit the program */
       }
   
  -    ex_try { /* Start shutdown of main program */
  -/*        analDelete(pAnal);*/          /* Destroy the analyzer             */
  -        configDelete();             /* Destroy the configuration        */
  +    ex_try {           /* Start shutdown of main program */
  +        analDelete(pAnal);  /* Destroy the analyser      */
  +        configDelete();     /* Destroy the configuration */
       }
       ex_catch(Except) { /* Error exceptions thrown during program shutdown */
           if (FAILED((rc_return_t)Except.ex_value)) {
  Index: ossp-pkg/rc/rc.h
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 rc.h
  --- ossp-pkg/rc/rc.h	22 May 2002 13:29:40 -0000	1.26
  +++ ossp-pkg/rc/rc.h	22 May 2002 16:01:49 -0000	1.27
  @@ -93,6 +93,16 @@
   rc_return_t clioptSetrcfile(const char *);
   rc_return_t clioptSetsecs(const char **);
   
  +/* Analyser function prototypes */
  +rc_anal_t *analNew(void);
  +rc_return_t analDelete(rc_anal_t *);
  +rc_return_t analRcs(rc_anal_t *, const char *);
  +rc_return_t analTmp(rc_anal_t *, const char *);
  +rc_return_t analFuncs(rc_anal_t *, const char *);
  +rc_return_t analLocs(rc_anal_t *, const char *);
  +rc_return_t analSecs(rc_anal_t *, const char **);
  +rc_return_t analParse(rc_anal_t *);
  +
   /* Processor function prototypes */
   rc_proc_t *procNew(void);
   rc_return_t procDelete(rc_proc_t *);
  Index: ossp-pkg/rc/rc_anal.c
  ============================================================
  $ cvs update -p -r1.1 rc_anal.c
  /*  OSSP rc - Run-command processor
  **  Copyright (c) 2002 Ralf S. Engelschall
  **  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **
  **  This file is part of OSSP rc, a portable Run-command processor
  **  which can be found at http://www.ossp.org/pkg/lib/rc/
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  rc_anal.c: Run-command processor ISO C source file
  */
  
  #include <stdlib.h>
  
  #include "rc.h"         /* Public interfaces        */
  #include "rc_config.h"  /* Configuration interface  */
  
  
  /************************************************
  * analNew(void)                                 *
  * Construct a new analyser                      *
  ************************************************/
  rc_anal_t *analNew(void)
  {
      rc_anal_t *pNew = NULL;
  
      pNew = malloc(sizeof(rc_anal_t));
      return(pNew);
  }
  
  /************************************************
  * private analRcs(rc_anal_t *, const char *)    *
  * Read a rc file identifier to analyse          *
  ************************************************/
  rc_return_t analRcs(rc_anal_t *pInst, const char *kszName)
  {
      TRACE(kszName);
      return(RC_THROW(RC_OK));
  }
  
  /************************************************
  * private analTmp(rc_anal_t *, const char *)    *
  * Read a temp file to use for analysis          *
  ************************************************/
  rc_return_t analTmp(rc_anal_t *pInst, const char *kszName)
  {
      TRACE(kszName);
      return(RC_THROW(RC_OK));
  }
  
  /************************************************
  * private analFuncs(rc_anal_t *, const char *)  *
  * Read a functions file to analyse              *
  ************************************************/
  rc_return_t analFuncs(rc_anal_t *pInst, const char *kszName)
  {
      TRACE(kszName);
      return(RC_THROW(RC_OK));
  }
  
  /************************************************
  * private analLocs(rc_anal_t *, const char *)   *
  * Read a location path expression to analyse    *
  ************************************************/
  rc_return_t analLocs(rc_anal_t *pInst, const char *kszPathexpr)
  {
      TRACE(kszPathexpr);
      return(RC_THROW(RC_OK));
  }
  
  /************************************************
  * private analSecs(rc_anal_t *, const char **)  *
  * Read a sections vector to analyse             *
  ************************************************/
  rc_return_t analSecs(rc_anal_t *pInst, const char **pkszVector)
  {
      TRACE("Variable pkszVector is not an ANSI string.");
      return(RC_THROW(RC_OK));
  }
  
  /************************************************
  * analParse(rc_anal_t *)                        *
  * Parse the analyzed configuration data         *
  ************************************************/
  rc_return_t analParse(rc_anal_t *pInst)
  {
      ex_t Except;
  
      assert(pInst); /* Verify sanity */
      ex_try { /* Read in data from the main configuration */
          analRcs  (pInst, configGetrcfile());
          analTmp  (pInst, configGetval(RC_TMP_VAL));
          analFuncs(pInst, configGetval(RC_FNC_VAL));
          analLocs (pInst, configGetval(RC_LOC_VAL));
          analSecs (pInst, configGetsecs());
      }
      ex_catch(Except) {
          rethrow;
      }
  
      return(RC_THROW(RC_OK));
  }
  
  /************************************************
  * analDelete(rc_anal_t *)                       *
  * Destruct an analyser                          *
  ************************************************/
  rc_return_t analDelete(rc_anal_t *pInst)
  {
      free(pInst);
  
      return(RC_THROW(RC_OK));
  }
  Index: ossp-pkg/rc/rc_private.h
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 rc_private.h
  --- ossp-pkg/rc/rc_private.h	22 May 2002 13:29:40 -0000	1.12
  +++ ossp-pkg/rc/rc_private.h	22 May 2002 16:01:49 -0000	1.13
  @@ -41,8 +41,8 @@
   #define TRACE(str)  ((void)0)
   #define TRACEL(num) ((void)0)
   #else
  -#define TRACE(str)  fprintf(stderr, "%s:%d: %s", __FILE__, __LINE__, str)
  -#define TRACEL(num) fprintf(stderr, "%s:%d: %ld", __FILE__, __LINE__, (long int)num)
  +#define TRACE(str)  fprintf(stderr, "%s:%d: %s\n", __FILE__, __LINE__, str)
  +#define TRACEL(num) fprintf(stderr, "%s:%d: %ld\n", __FILE__, __LINE__, (long int)num)
   #endif
   
   /* The GUID for OSSP rc */

From ossp-cvs-owner@ossp.org  Thu May 23 07:52:54 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6672A76363; Thu, 23 May 2002 07:52:54 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO
Message-Id: <20020523055254.6672A76363@mail.ossp.org>
Date: Thu, 23 May 2002 07:52:54 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   23-May-2002 07:52:54
  Branch: HEAD                             Handle: 2002052306525300

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO

  Log:
    do not forget

  Summary:
    Revision    Changes     Path
    1.59        +2  -0      ossp-pkg/lmtp2nntp/00TODO
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.58 -r1.59 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	18 Apr 2002 13:28:30 -0000	1.58
  +++ ossp-pkg/lmtp2nntp/00TODO	23 May 2002 05:52:53 -0000	1.59
  @@ -21,6 +21,8 @@
     and if childs still are running, kill them. This means we have to remember
     pid_t's.
   
  +  add a %dumpvars function to the header rewrite engine
  +
     LMTP and NNTP logging by passing the l2 context into their structures.
   
     Proper cleanup when exiting through signals.

From ossp-cvs-owner@ossp.org  Thu May 23 10:35:12 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 793DC76363; Thu, 23 May 2002 10:35:12 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_msg.c lmtp2nntp_msg.h
Message-Id: <20020523083512.793DC76363@mail.ossp.org>
Date: Thu, 23 May 2002 10:35:12 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   23-May-2002 10:35:12
  Branch: HEAD                             Handle: 2002052309351200

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_msg.c lmtp2nntp_msg.h

  Log:
    relocation to new home

  Summary:
    Revision    Changes     Path
    1.11        +0  -9      ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
    1.4         +9  -0      ossp-pkg/lmtp2nntp/lmtp2nntp_msg.h
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 lmtp2nntp_msg.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	25 Apr 2002 09:14:28 -0000	1.10
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	23 May 2002 08:35:12 -0000	1.11
  @@ -532,15 +532,6 @@
       return (headerdata_t *)hdNew;
   }
   
  -struct regex_ctx_st; //FIXME go into a header!
  -typedef struct regex_ctx_st regex_ctx_t;
  -struct regex_ctx_st {
  -    int            nMatch;
  -    const char   **acpMatch;
  -    l2_env_t      *l2_env;
  -    l2_channel_t  *l2;
  -};
  -
   static var_rc_t regex_lookup(
       var_t *var, void *_ctx, 
       const char *var_ptr, size_t var_len, int var_idx,
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.h
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 lmtp2nntp_msg.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.h	20 Feb 2002 15:42:26 -0000	1.3
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.h	23 May 2002 08:35:12 -0000	1.4
  @@ -51,6 +51,15 @@
       l2_channel_t *l2;
   } msg_t;
   
  +struct regex_ctx_st;
  +typedef struct regex_ctx_st regex_ctx_t;
  +struct regex_ctx_st {
  +    int            nMatch;
  +    const char   **acpMatch;
  +    l2_env_t      *l2_env;
  +    l2_channel_t  *l2;
  +};
  +
   #define WRAPAT 120          /* join wraps header lines when exceeding this value */
   #define WRAPUSING "\n    "  /* join inserts this value when wrapping lines       */
   

From ossp-cvs-owner@ossp.org  Thu May 23 11:13:21 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 410FC76363; Thu, 23 May 2002 11:13:21 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_msg.c ossp-pkg/var var.pod
Message-Id: <20020523091321.410FC76363@mail.ossp.org>
Date: Thu, 23 May 2002 11:13:21 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   23-May-2002 11:13:21
  Branch: HEAD                             Handle: 2002052310132000

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_msg.c
    ossp-pkg/var            var.pod

  Log:
    lib_var experts, please review

  Summary:
    Revision    Changes     Path
    1.12        +0  -6      ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
    1.33        +6  -0      ossp-pkg/var/var.pod
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 lmtp2nntp_msg.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	23 May 2002 08:35:12 -0000	1.11
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	23 May 2002 09:13:20 -0000	1.12
  @@ -661,12 +661,6 @@
               *pnOut     = strlen(*cppOut);
           }
           else {
  -            /*FIXME interesting lib_var behaviour:
  -            *cppOut    = NULL;                returning NULL with size/out=0 means not expandable and keeps the current value
  -            *cppOut    = (char *)mallocex(0); returning any freeable pointer with size/out=0 means empty value
  -            *pnOutsize = 0;
  -            *pnOut     = 0;
  -            */
               *cppOut    = (char *)mallocex(0); //FIXME is this portable?
               *pnOutsize = 0;
               *pnOut     = 0;
  Index: ossp-pkg/var/var.pod
  ============================================================
  $ cvs diff -u -r1.32 -r1.33 var.pod
  --- ossp-pkg/var/var.pod	8 Mar 2002 12:55:52 -0000	1.32
  +++ ossp-pkg/var/var.pod	23 May 2002 09:13:20 -0000	1.33
  @@ -382,6 +382,7 @@
   
   This is a pointer to the location where the callback function should
   store the pointer to the resolved value of the variable.
  +Returning an empty value requires this pointer to be non-NULL otherwise it is interpreted as not expandable.
   
   =item size_t *I<val_len>
   
  @@ -406,6 +407,11 @@
   callback.
   
   =back
  +
  +*cppOut    = NULL;                returning NULL with size/out=0 means not expandable and keeps the current value
  +*cppOut    = (char *)mallocex(0); returning any freeable pointer with size/out=0 means empty value
  +*pnOutsize = 0;
  +*pnOut     = 0;
   
   The return code of the lookup function B<cb> is interpreted by
   B<var_expand> according to the following convention: C<VAR_OK> means

From ossp-cvs-owner@ossp.org  Thu May 23 11:34:27 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C2C8276363; Thu, 23 May 2002 11:34:27 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_msg.c
Message-Id: <20020523093427.C2C8276363@mail.ossp.org>
Date: Thu, 23 May 2002 11:34:27 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   23-May-2002 11:34:27
  Branch: HEAD                             Handle: 2002052310342700

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_msg.c

  Log:
    yes, at least on FreeBSD, LINUX and Solaris8

  Summary:
    Revision    Changes     Path
    1.13        +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 lmtp2nntp_msg.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	23 May 2002 09:13:20 -0000	1.12
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	23 May 2002 09:34:27 -0000	1.13
  @@ -661,7 +661,7 @@
               *pnOut     = strlen(*cppOut);
           }
           else {
  -            *cppOut    = (char *)mallocex(0); //FIXME is this portable?
  +            *cppOut    = (char *)mallocex(0);
               *pnOutsize = 0;
               *pnOut     = 0;
           }

From ossp-cvs-owner@ossp.org  Thu May 23 11:37:16 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E75EB76364; Thu, 23 May 2002 11:37:15 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_msg.c lmtp2nntp_msg.h
Message-Id: <20020523093715.E75EB76364@mail.ossp.org>
Date: Thu, 23 May 2002 11:37:15 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   23-May-2002 11:37:15
  Branch: HEAD                             Handle: 2002052310371500

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_msg.c lmtp2nntp_msg.h

  Log:
    renamed and relocated

  Summary:
    Revision    Changes     Path
    1.14        +6  -8      ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
    1.5         +2  -0      ossp-pkg/lmtp2nntp/lmtp2nntp_msg.h
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 lmtp2nntp_msg.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	23 May 2002 09:34:27 -0000	1.13
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	23 May 2002 09:37:15 -0000	1.14
  @@ -558,7 +558,6 @@
       return rc;
   }
   
  -#define MAXOUT 32 /* strlen("Mon, 31 Jul 2002 12:34:56 +0123")+1 */
   static var_rc_t canonifydate(
       const char  *cpArg,  size_t nArg,
       const char  *cpVal,  size_t nVal,
  @@ -635,9 +634,9 @@
   
       printf("DEBUG: cpVal=\"%41s\", cpArg=\"%s\"\n", cpVal, cpArg);
       if ((cpVal == NULL) || (strlen(cpVal) == 0)) {
  -        *cppOut    = (char *)mallocex(MAXOUT);
  -        *pnOutsize = MAXOUT;
  -        (void /*FIXME*/)tai_format(now, *cppOut, MAXOUT, "%a, %d %b %Y %H:%M:%S %z");
  +        *cppOut    = (char *)mallocex(DATELENMAX);
  +        *pnOutsize = DATELENMAX;
  +        (void /*FIXME*/)tai_format(now, *cppOut, DATELENMAX, "%a, %d %b %Y %H:%M:%S %z");
           *pnOut     = strlen(*cppOut);
       }
       else {
  @@ -655,9 +654,9 @@
               && ((futurerange != NULL) && (tai_op(value, TAI_OP_LT, futurerange) == TAI_OK))
   #endif
               ) {
  -            *cppOut    = (char *)mallocex(MAXOUT);
  -            *pnOutsize = MAXOUT;
  -            (void /*FIXME*/)tai_format(value, *cppOut, MAXOUT, "%a, %d %b %Y %H:%M:%S %z");
  +            *cppOut    = (char *)mallocex(DATELENMAX);
  +            *pnOutsize = DATELENMAX;
  +            (void /*FIXME*/)tai_format(value, *cppOut, DATELENMAX, "%a, %d %b %Y %H:%M:%S %z");
               *pnOut     = strlen(*cppOut);
           }
           else {
  @@ -679,7 +678,6 @@
   
       return VAR_OK;
   }
  -#undef MAXOUT //FIXME is there a better way to do it?
   
   static var_rc_t createmessageid(
       const char  *cpArg,  size_t nArg,
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.h
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 lmtp2nntp_msg.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.h	23 May 2002 08:35:12 -0000	1.4
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.h	23 May 2002 09:37:15 -0000	1.5
  @@ -63,6 +63,8 @@
   #define WRAPAT 120          /* join wraps header lines when exceeding this value */
   #define WRAPUSING "\n    "  /* join inserts this value when wrapping lines       */
   
  +#define DATELENMAX 32       /* strlen("Mon, 31 Jul 2002 12:34:56 +0123")+1 */
  +
   typedef enum {
       MSG_OK,
       MSG_ERR_MEM,

From ossp-cvs-owner@ossp.org  Thu May 23 20:03:21 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 796C376363; Thu, 23 May 2002 20:03:21 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc 00TODO rc.h rc_anal.c rc_cliopt.c rc_private.h...
Message-Id: <20020523180321.796C376363@mail.ossp.org>
Date: Thu, 23 May 2002 20:03:21 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   23-May-2002 20:03:21
  Branch: HEAD                             Handle: 2002052319032000

  Modified files:
    ossp-pkg/rc             00TODO rc.h rc_anal.c rc_cliopt.c rc_private.h
                            rc_util.c

  Log:
    More flush work on analyzer.

  Summary:
    Revision    Changes     Path
    1.25        +5  -0      ossp-pkg/rc/00TODO
    1.28        +9  -6      ossp-pkg/rc/rc.h
    1.2         +67 -19     ossp-pkg/rc/rc_anal.c
    1.10        +11 -22     ossp-pkg/rc/rc_cliopt.c
    1.14        +8  -7      ossp-pkg/rc/rc_private.h
    1.4         +45 -0      ossp-pkg/rc/rc_util.c
  ____________________________________________________________________________

  Index: ossp-pkg/rc/00TODO
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 00TODO
  --- ossp-pkg/rc/00TODO	13 May 2002 16:57:00 -0000	1.24
  +++ ossp-pkg/rc/00TODO	23 May 2002 18:03:20 -0000	1.25
  @@ -34,6 +34,11 @@
     Convert some normal assert() to real runtime checks.
     Use str_hash von ossp str or static RC_XXX_VAL array from rc_option.h.
   
  +Implementation
  +  Correct assertion, sanity check, and if () checks according to one standard.
  +  Make variable naming standard m_pksz?, and correct throughout.
  +  Correct according to a method naming standard like <file>Method.
  +
   Detailed ;-) project plan
   -------------------------
   Release v0.8
  Index: ossp-pkg/rc/rc.h
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 rc.h
  --- ossp-pkg/rc/rc.h	22 May 2002 16:01:49 -0000	1.27
  +++ ossp-pkg/rc/rc.h	23 May 2002 18:03:20 -0000	1.28
  @@ -60,7 +60,8 @@
       RC_ERR_IO  = 6, /* Input/output error       */
       RC_ERR_INT = 7, /* Internal error           */
       RC_WRN_0   = 8, /* Warning base             */
  -    RC_WRN_OWR = 9  /* Overwrite warning        */
  +    RC_WRN_OWR = 9, /* Overwrite warning        */
  +    RC_WRN_NUL = 10 /* NULL pointer warning     */
   } rc_return_t;
   
   /* Config function prototypes */
  @@ -96,11 +97,11 @@
   /* Analyser function prototypes */
   rc_anal_t *analNew(void);
   rc_return_t analDelete(rc_anal_t *);
  -rc_return_t analRcs(rc_anal_t *, const char *);
  -rc_return_t analTmp(rc_anal_t *, const char *);
  -rc_return_t analFuncs(rc_anal_t *, const char *);
  -rc_return_t analLocs(rc_anal_t *, const char *);
  -rc_return_t analSecs(rc_anal_t *, const char **);
  +rc_return_t analRcs(rc_anal_t **, const char *);
  +rc_return_t analTmp(rc_anal_t **, const char *);
  +rc_return_t analFuncs(rc_anal_t **, const char *);
  +rc_return_t analLocs(rc_anal_t **, const char *);
  +rc_return_t analSecs(rc_anal_t **, const char **);
   rc_return_t analParse(rc_anal_t *);
   
   /* Processor function prototypes */
  @@ -115,6 +116,8 @@
   
   /* Utility (nonbounded) function prototypes */
   char *strErr(rc_return_t);
  +char **vectorCopy(const char **);
  +rc_return_t vectorDel(char **);
   
   /* Other function prototypes */
   
  Index: ossp-pkg/rc/rc_anal.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 rc_anal.c
  --- ossp-pkg/rc/rc_anal.c	22 May 2002 16:01:49 -0000	1.1
  +++ ossp-pkg/rc/rc_anal.c	23 May 2002 18:03:20 -0000	1.2
  @@ -28,6 +28,7 @@
   */
   
   #include <stdlib.h>
  +#include <string.h>
   
   #include "rc.h"         /* Public interfaces        */
   #include "rc_config.h"  /* Configuration interface  */
  @@ -46,51 +47,87 @@
   }
   
   /************************************************
  -* private analRcs(rc_anal_t *, const char *)    *
  +* private analRcs(rc_anal_t **, const char *)   *
   * Read a rc file identifier to analyse          *
   ************************************************/
  -rc_return_t analRcs(rc_anal_t *pInst, const char *kszName)
  +rc_return_t analRcs(rc_anal_t **ppInst, const char *kszName)
   {
  -    TRACE(kszName);
  +    if (!kszName)
  +        RC_THROW(RC_WRN_NUL);
  +    else { /* Only enter block with valid string, strdup can't handle NULL */
  +        (*ppInst)->m_szRcs = strdup(kszName);
  +        TRACE((*ppInst)->m_szRcs);
  +    }
  +
       return(RC_THROW(RC_OK));
   }
   
   /************************************************
  -* private analTmp(rc_anal_t *, const char *)    *
  +* private analTmp(rc_anal_t **, const char *)   *
   * Read a temp file to use for analysis          *
   ************************************************/
  -rc_return_t analTmp(rc_anal_t *pInst, const char *kszName)
  +rc_return_t analTmp(rc_anal_t **ppInst, const char *kszName)
   {
  -    TRACE(kszName);
  +    if (!kszName)
  +        RC_THROW(RC_WRN_NUL);
  +    else { /* Only enter block with valid string, strdup can't handle NULL */
  +        (*ppInst)->m_szTmp = strdup("Hello");
  +        TRACE((*ppInst)->m_szTmp);
  +    }
  +
       return(RC_THROW(RC_OK));
   }
   
   /************************************************
  -* private analFuncs(rc_anal_t *, const char *)  *
  +* private analFuncs(rc_anal_t **, const char *) *
   * Read a functions file to analyse              *
   ************************************************/
  -rc_return_t analFuncs(rc_anal_t *pInst, const char *kszName)
  +rc_return_t analFuncs(rc_anal_t **ppInst, const char *kszName)
   {
  -    TRACE(kszName);
  +    if (!kszName)
  +        RC_THROW(RC_WRN_NUL);
  +    else { /* Only enter block with valid string, strdup can't handle NULL */
  +        (*ppInst)->m_szFuncs = strdup(kszName);
  +        TRACE((*ppInst)->m_szFuncs);
  +    }
  +
       return(RC_THROW(RC_OK));
   }
   
   /************************************************
  -* private analLocs(rc_anal_t *, const char *)   *
  +* private analLocs(rc_anal_t **, const char *)  *
   * Read a location path expression to analyse    *
   ************************************************/
  -rc_return_t analLocs(rc_anal_t *pInst, const char *kszPathexpr)
  +rc_return_t analLocs(rc_anal_t **ppInst, const char *kszPathexpr)
   {
  -    TRACE(kszPathexpr);
  +    if (!kszPathexpr)
  +        RC_THROW(RC_WRN_NUL);
  +    else { /* Only enter block with valid string, strdup can't handle NULL */
  +        (*ppInst)->m_szLocs = strdup(kszPathexpr);
  +        TRACE((*ppInst)->m_szLocs);
  +    }
  +
       return(RC_THROW(RC_OK));
   }
   
   /************************************************
  -* private analSecs(rc_anal_t *, const char **)  *
  +* private analSecs(rc_anal_t **, const char **) *
   * Read a sections vector to analyse             *
   ************************************************/
  -rc_return_t analSecs(rc_anal_t *pInst, const char **pkszVector)
  +rc_return_t analSecs(rc_anal_t **ppInst, const char **pkszVector)
   {
  +    ex_t Except;
  +
  +    if ((*ppInst)->m_pszSecs)   /* Warn on overwrites */
  +        RC_THROW(RC_WRN_OWR);
  +
  +    ex_try {    /* Sections are a vector, so we must copy accordingly */
  +        (*ppInst)->m_pszSecs = vectorCopy(pkszVector);
  +    }
  +    ex_catch(Except) {
  +        rethrow;
  +    }
  +
       TRACE("Variable pkszVector is not an ANSI string.");
       return(RC_THROW(RC_OK));
   }
  @@ -105,11 +142,11 @@
   
       assert(pInst); /* Verify sanity */
       ex_try { /* Read in data from the main configuration */
  -        analRcs  (pInst, configGetrcfile());
  -        analTmp  (pInst, configGetval(RC_TMP_VAL));
  -        analFuncs(pInst, configGetval(RC_FNC_VAL));
  -        analLocs (pInst, configGetval(RC_LOC_VAL));
  -        analSecs (pInst, configGetsecs());
  +        analRcs  (&pInst, configGetrcfile());
  +        analTmp  (&pInst, configGetval(RC_TMP_VAL));
  +        analFuncs(&pInst, configGetval(RC_FNC_VAL));
  +        analLocs (&pInst, configGetval(RC_LOC_VAL));
  +        analSecs (&pInst, configGetsecs());
       }
       ex_catch(Except) {
           rethrow;
  @@ -124,6 +161,17 @@
   ************************************************/
   rc_return_t analDelete(rc_anal_t *pInst)
   {
  +    if (pInst->m_szRcs)         /* Rc file names       */
  +        free(pInst->m_szRcs);
  +    if (pInst->m_szTmp)         /* Temp file name      */
  +        free(pInst->m_szTmp);
  +    if (pInst->m_szFuncs)       /* Function file names */
  +        free(pInst->m_szFuncs);
  +    if (pInst->m_szLocs)        /* Location path names */
  +        free(pInst->m_szLocs);
  +    if (pInst->m_pszSecs)       /* Section names       */
  +        vectorDel(pInst->m_pszSecs);
  +
       free(pInst);
   
       return(RC_THROW(RC_OK));
  Index: ossp-pkg/rc/rc_cliopt.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 rc_cliopt.c
  --- ossp-pkg/rc/rc_cliopt.c	22 May 2002 13:29:40 -0000	1.9
  +++ ossp-pkg/rc/rc_cliopt.c	23 May 2002 18:03:20 -0000	1.10
  @@ -169,24 +169,17 @@
   
   rc_return_t clioptSetsecs(const char **pkszSecs)
   {
  -    int nSecs  = 0;
  -    int nIndex = 0;
  +    ex_t Except;
   
  -    if (m_pszSecs)                                  /* Warn on overwrites */
  +    if (m_pszSecs)              /* Warn on overwrites */
           RC_THROW(RC_WRN_OWR);
  -    if (pkszSecs) {
  -        for (nSecs = 0; pkszSecs[nSecs]; nSecs++);  /* Count the sections */
  -        m_pszSecs = malloc(sizeof (char **) * nSecs + 1);
  -
  -        for (nIndex = 0; pkszSecs[nIndex]; nIndex++) {
  -            m_pszSecs[nIndex] = malloc(strlen(pkszSecs[nIndex]));
  -            memcpy(m_pszSecs[nIndex], pkszSecs[nIndex],\
  -                   strlen(pkszSecs[nIndex]));
  -        }
  -        m_pszSecs[nIndex] = NULL; /* Used later to find the end of the array */
  +
  +    ex_try {
  +        m_pszSecs = vectorCopy(pkszSecs);
  +    }
  +    ex_catch(Except) {
  +        rethrow;
       }
  -    else
  -        return(RC_THROW(RC_ERR_USE));   /* Incoming sections are NULL? */
   
       return(RC_THROW(RC_OK));
   }
  @@ -359,13 +352,9 @@
   
       if (m_szRcfile)                     /* Free the rc file arg       */
           free(m_szRcfile);
  -    if (m_pszSecs) {                    /* Free the section name arg  */
  -        for (i = 0; m_pszSecs[i]; i++) {
  -            free(m_pszSecs[i]);
  -            m_pszSecs[i] = NULL;
  -        }
  -        free(m_pszSecs);
  -    }
  +
  +    if (m_pszSecs)                      /* Free the section name arg  */
  +        vectorDel(m_pszSecs);
   
   /* FIXME BEGIN DEBUG */
   for (i = 0; i < RC_NUMOPTS; i++)
  Index: ossp-pkg/rc/rc_private.h
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 rc_private.h
  --- ossp-pkg/rc/rc_private.h	22 May 2002 16:01:49 -0000	1.13
  +++ ossp-pkg/rc/rc_private.h	23 May 2002 18:03:20 -0000	1.14
  @@ -45,8 +45,9 @@
   #define TRACEL(num) fprintf(stderr, "%s:%d: %ld\n", __FILE__, __LINE__, (long int)num)
   #endif
   
  -/* The GUID for OSSP rc */
  -#define RC_STR_ID "OSSP rc"
  +
  +#define RC_STR_ID "OSSP rc"                         /* APPID for OSSP rc */
  +#define RC_UID_ID f8a1845c55e6449481176f6e9cea34b   /* UUID for OSSP rc */
   
   /* Intentional no operation */
   #define RC_NOP ((void)0)
  @@ -66,11 +67,11 @@
   
   /* Analyser type */
   typedef struct {
  -    char *m_szRcs;   /* Rc file names       */
  -    char *m_szTmp;   /* Temp file name      */
  -    char *m_szFuncs; /* Function file names */
  -    char *m_szLocs;  /* Location path names */
  -    char *m_szSecs;  /* Section names       */
  +    char *m_szRcs;      /* Rc file names       */
  +    char *m_szTmp;      /* Temp file name      */
  +    char *m_szFuncs;    /* Function file names */
  +    char *m_szLocs;     /* Location path names */
  +    char **m_pszSecs;   /* Section vector      */
   } rc_anal_t;
   
   /* Script type */
  Index: ossp-pkg/rc/rc_util.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 rc_util.c
  --- ossp-pkg/rc/rc_util.c	26 Mar 2002 17:11:06 -0000	1.3
  +++ ossp-pkg/rc/rc_util.c	23 May 2002 18:03:20 -0000	1.4
  @@ -27,6 +27,9 @@
   **  rc_util.c: Run-command processor ISO C source file
   */
   
  +#include <stdlib.h>
  +#include <string.h>
  +
   #include "rc.h"         /* Error definitions  */
   #include "rc_const.h"   /* String definitions */
   
  @@ -41,4 +44,46 @@
       else if (rv == RC_ERR_IO)  return RC_ERRSTR_IO;
       else if (rv == RC_ERR_INT) return RC_ERRSTR_INT;
       else                       return RC_ERRSTR_UNK;
  +}
  +
  +/* Vector copy constructor */
  +char **vectorCopy(const char **kpszVec)
  +{
  +    int nSecs  = 0;
  +    int nIndex = 0;
  +    char **pszTemp = NULL;
  +
  +    if (kpszVec) {
  +        for (nSecs = 0; kpszVec[nSecs]; nSecs++);   /* Count the sections */
  +        pszTemp = malloc(sizeof (char **) * nSecs + 1);
  +
  +        for (nIndex = 0; kpszVec[nIndex]; nIndex++) {           /* Copy loop */
  +            pszTemp[nIndex] = malloc(strlen(kpszVec[nIndex]));  /* for each  */
  +            memcpy(pszTemp[nIndex], kpszVec[nIndex],            /* element   */
  +                   strlen(kpszVec[nIndex]));                    /* in vector */
  +        }
  +        pszTemp[nIndex] = NULL; /* Used later to find the end of the array */
  +        return(pszTemp);        /* Success */
  +    }
  +    else
  +        RC_THROW(RC_ERR_USE);   /* Incoming vector is NULL? */
  +
  +    return(NULL);               /* Failure */
  +}
  +
  +/* Vector destructor */
  +rc_return_t vectorDel(char **pszVec)
  +{
  +    int i;
  +    assert(pszVec);                 /* Check for unallocated incoming */
  +
  +    for (i = 0; pszVec[i]; i++) {   /* Loop through elements   */
  +        free(pszVec[i]);            /* of vector, deallocating */
  +        pszVec[i] = NULL;           /* along the way           */
  +    }
  +
  +    free(pszVec);                   /* Free the vector itself  */
  +    pszVec = NULL;
  +
  +    return(RC_THROW(RC_OK));
   }

From ossp-cvs-owner@ossp.org  Mon May 27 17:09:52 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 96AD876363; Mon, 27 May 2002 17:09:51 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp fixme.h lmtp2nntp_config.c lmtp2nntp_ma...
Message-Id: <20020527150951.96AD876363@mail.ossp.org>
Date: Mon, 27 May 2002 17:09:51 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   27-May-2002 17:09:51
  Branch: HEAD                             Handle: 2002052716095000

  Modified files:
    ossp-pkg/lmtp2nntp      fixme.h lmtp2nntp_config.c lmtp2nntp_main.c
                            lmtp2nntp_msg.c lmtp2nntp_msg.h

  Log:
    createmessageid now using lib_val; added support for long nodenames

  Summary:
    Revision    Changes     Path
    1.23        +3  -1      ossp-pkg/lmtp2nntp/fixme.h
    1.73        +11 -4      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.55        +30 -9      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
    1.15        +69 -29     ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
    1.6         +4  -3      ossp-pkg/lmtp2nntp/lmtp2nntp_msg.h
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/fixme.h
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 fixme.h
  --- ossp-pkg/lmtp2nntp/fixme.h	13 Mar 2002 14:41:13 -0000	1.22
  +++ ossp-pkg/lmtp2nntp/fixme.h	27 May 2002 15:09:50 -0000	1.23
  @@ -60,6 +60,7 @@
   
   typedef struct {
       l2_context_t    ctx;
  +    val_t          *prival;
       val_t          *val;
       char           *progname;
       int             option_groupmode;
  @@ -74,6 +75,7 @@
       int             option_timeout_nntp_connect;
       int             option_timeout_nntp_read;
       int             option_timeout_nntp_write;
  +    char           *option_nodename;
       char           *option_mailfrom;
       char           *option_restrictheader;
       char           *option_pidfile;
  @@ -100,9 +102,9 @@
       size_t          asGroupargs;
       struct          session session;
       msg_t          *msg;
  -    struct utsname  uname;
       var_t          *config_varregex;
       var_t          *config_varctx;
  +    int             msgcount; /* number of messages processed, used for creating unique ids */
   } lmtp2nntp_t;
   
   #define ERR_EXECUTION 1
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.72 -r1.73 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	18 Apr 2002 15:38:59 -0000	1.72
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	27 May 2002 15:09:50 -0000	1.73
  @@ -28,6 +28,7 @@
   #include <stdlib.h>
   #include <stdio.h>
   #include <sys/stat.h>
  +#include <sys/utsname.h>
   #include <errno.h>
   #include <pwd.h>
   
  @@ -733,11 +734,16 @@
           logbook(ctx->l2, L2_LEVEL_TRACE, "--nodename = \"%s\"", ov->data.s);
   
           if (ov->ndata == 1) {
  -            if (strlen(ov->data.s) > sizeof(ctx->uname.nodename)-1) {
  -                logbook(ctx->l2, L2_LEVEL_ERROR, "option --nodename, name (%s) too long", ov->data.s);
  +            ctx->option_nodename = strdupex(ov->data.s);
  +        }
  +        else {
  +            struct utsname name;
  +
  +            if (uname(&name) == -1) {
  +                logbook(ctx->l2, L2_LEVEL_ERROR, "option --nodename, uname() failed %m");
                   throw(0,0,0);
               }
  -            strcpy(ctx->uname.nodename, ov->data.s);
  +            ctx->option_nodename = strdupex(name.nodename);
           }
       }
       catch (ex)
  @@ -1106,7 +1112,8 @@
                       msg_rc_t rc;
   
                       try {
  -                        if ((msg = msg_create()) == NULL) throw(0, 0, "msg_create");
  +                        ctx->msgcount++;
  +                        if ((msg = msg_create(ctx->prival)) == NULL) throw(0, 0, "msg_create");
                           msg->l2 = ctx->l2;
                           msg->cpMsg = cpBuf;
                           if ((rc = msg_split((msg_t *)msg)) != MSG_OK) {
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.54 -r1.55 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	18 Apr 2002 15:38:21 -0000	1.54
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	27 May 2002 15:09:50 -0000	1.55
  @@ -376,6 +376,7 @@
       if ((ctx = (lmtp2nntp_t *)malloc(sizeof(lmtp2nntp_t))) == NULL)
           CU(ERR_EXECUTION);
       ctx->ctx.vp = ctx;
  +    ctx->prival = NULL;
       ctx->val = NULL;
       ctx->progname = NULL;
       ctx->option_groupmode = GROUPMODE_UNDEF;
  @@ -390,6 +391,7 @@
       ctx->option_timeout_nntp_connect = 0;
       ctx->option_timeout_nntp_read    = 0;
       ctx->option_timeout_nntp_write   = 0;
  +    ctx->option_nodename = NULL;
       ctx->option_mailfrom = NULL;
       ctx->option_restrictheader = NULL;
       ctx->option_pidfile = NULL;
  @@ -416,17 +418,29 @@
       ctx->asGroupargs = 0;
       initsession(&ctx->session);
       ctx->msg = NULL;
  -    memset(&ctx->uname, 0, sizeof(struct utsname));
       ctx->config_varregex = NULL;
       ctx->config_varctx = NULL;
  +    ctx->msgcount = 0;
       
  -    /* fill in application context */
  +    /* private application context */
  +    if (val_create(&ctx->prival) != VAL_OK)
  +        CU(ERR_EXECUTION);
  +
  +    /* create printable variables context and mount it into the private application context */
       if (val_create(&ctx->val) != VAL_OK)
           CU(ERR_EXECUTION);
  -    if (uname(&ctx->uname) == -1) {
  -        fprintf(stderr, "%s:Error: uname failed \"%s\"\n", ctx->progname, strerror(errno));
  +    if (val_reg(ctx->prival, "printable", VAL_TYPE_VAL, "printable variables", NULL) != VAL_OK)
           CU(ERR_EXECUTION);
  -    }
  +    if (val_set(ctx->prival, "printable", ctx->val) != VAL_OK)
  +        CU(ERR_EXECUTION);
  +
  +    /* feed lib_val */
  +    if (val_reg(ctx->prival, "msgcount", VAL_TYPE_INT, "number of messages processed so far", (void *)&ctx->msgcount) != VAL_OK)
  +        CU(ERR_EXECUTION);
  +    if (val_reg(ctx->prival, "nodename", VAL_TYPE_PTR, "nodename configured or uname(3)", (void *)&ctx->option_nodename) != VAL_OK)
  +        CU(ERR_EXECUTION);
  +
  +    /* set progname */
       ctx->progname = strdup(argv[0]);
   
       /* establish variable expansion context */
  @@ -448,6 +462,7 @@
           }
       }
   
  +
       /* read in the arguments */
       {
           lmtp2nntp_option_rc_t rv;
  @@ -700,6 +715,8 @@
       //FIXME if (ctx->azHeaderValuePairs != NULL) free(ctx->azHeaderValuePairs); what about headerrules
       if (ctx->option_pidfile != NULL)
           free(ctx->option_pidfile);
  +    if (ctx->option_nodename != NULL)
  +        free(ctx->option_nodename);
       if (ctx->progname != NULL)
           free(ctx->progname);
       if (ctx->azGroupargs != NULL)
  @@ -713,6 +730,7 @@
       str_parse(NULL, NULL);
       if (o != NULL)
           (void)option_destroy(o);
  +    //FIXME check if anything initialized in the lmtp2nntp_t structure is destroyed here (val, prival ...)
   
       return rc;
   }
  @@ -900,7 +918,7 @@
                  "DSN\n"                               /* RFC1894 */
                  "PIPELINING\n"                        /* RFC1854 */
                  "8BITMIME",                           /* RFC1652 */
  -               ctx->uname.nodename,
  +               ctx->option_nodename,
                  ctx->session.lhlo_domain);
       res.statuscode = "250";
       res.dsncode    = NULL; /* DSN not used for greeting */
  @@ -1100,7 +1118,8 @@
        *  RFC1893 3.5 Network and Routing Status          X.3.1   Mail system full 
        */
       logbook(ctx->l2, L2_LEVEL_TRACE, "msg_create");
  -    if ((ctx->msg = msg_create()) == NULL) {
  +    ctx->msgcount++;
  +    if ((ctx->msg = msg_create(ctx->prival)) == NULL) {
           res.statuscode = "452";
           res.dsncode    = "4.3.1";
           res.statusmsg  = "Internal error - memory.";
  @@ -1402,7 +1421,8 @@
                *  RFC1893 2. Status Codes                         4.X.X   Persistent Transient Failure
                *  RFC1893 3.5 Network and Routing Status          X.3.1   Mail system full 
                */
  -            if ((ctx->msg = msg_create()) == NULL) {
  +            ctx->msgcount++;
  +            if ((ctx->msg = msg_create(ctx->prival)) == NULL) {
                   res.statuscode = "452";
                   res.dsncode    = "4.3.1";
                   res.statusmsg  = "Internal error - memory.";
  @@ -1419,7 +1439,8 @@
                *  RFC1893 2. Status Codes                         4.X.X   Persistent Transient Failure
                *  RFC1893 3.5 Network and Routing Status          X.3.1   Mail system full 
                */
  -            if ((ctx->msg = msg_create()) == NULL) {
  +            ctx->msgcount++;
  +            if ((ctx->msg = msg_create(ctx->prival)) == NULL) {
                   res.statuscode = "452";
                   res.dsncode    = "4.3.1";
                   res.statusmsg  = "Internal error - memory.";
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 lmtp2nntp_msg.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	23 May 2002 09:37:15 -0000	1.14
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	27 May 2002 15:09:50 -0000	1.15
  @@ -31,9 +31,6 @@
   #include "lmtp2nntp_argz.h"
   #include "fixme.h" //FIMXE logbook only
   #include "tai.h"
  -#include <sys/utsname.h> //FIXME createmessageid() hack
  -
  -
   #include "str.h"
   
   /* third party */
  @@ -46,10 +43,14 @@
   #include "dmalloc.h"
   #endif
   
  -msg_t *msg_create(void)
  +msg_t *msg_create(val_t *prival)
   {
  +    ex_t ex;
       msg_t *msg;
   
  +    if (prival == NULL)
  +        return NULL;
  +
       if ((msg = (msg_t *)malloc(sizeof(msg_t))) == NULL)
           return NULL;
   
  @@ -68,6 +69,15 @@
       msg->azNewsgroups = NULL;
       msg->asNewsgroups = 0;
       msg->l2 = NULL; /* this is a copy only */
  +    msg->prival = prival;
  +
  +    /* create printable variables context and mount it into the private application context */
  +    try {
  +        val_reg(msg->prival, "msg", VAL_TYPE_PTR, "msg context structure", NULL);
  +        val_set(msg->prival, "msg", msg);
  +        }
  +    catch (ex)
  +        rethrow;
   
       return msg;
   }
  @@ -96,6 +106,8 @@
       if (msg->azNewsgroups != NULL)
           free(msg->azNewsgroups);
       msg->l2 = NULL; /* this is a copy only, the "parent" needs to clean this up */
  +    if (msg->prival != NULL)
  +        val_unreg(msg->prival, "msg");
   
       free(msg);
       return;
  @@ -559,6 +571,7 @@
   }
   
   static var_rc_t canonifydate(
  +    val_t *prival,
       const char  *cpArg,  size_t nArg,
       const char  *cpVal,  size_t nVal,
             char **cppOut, size_t *pnOut, size_t *pnOutsize)
  @@ -680,28 +693,61 @@
   }
   
   static var_rc_t createmessageid(
  +    val_t *prival,
       const char  *cpArg,  size_t nArg,
       const char  *cpVal,  size_t nVal,
             char **cppOut, size_t *pnOut, size_t *pnOutsize)
   {
       char *cp;
  -    static int mcounter = 0; //FIXME no statics in this program!
  +    int msgcount;
  +    msg_t *msg;
  +    char *foreignid;
  +    char *nodename;
  +    time_t cachetime;
  +    pid_t cachepid;
  +    int size;
  +    int maxsize;
  +    char *format;
  +
  +    if (val_get(prival, "msgcount", &msgcount) != VAL_OK)
  +        msgcount = 0;
   
  -    struct utsname name; //FIXME this must be taken from global - requires context
  -    if (uname(&name) == -1) {
  -        memcpy(name.nodename, "localhost.invalid", strlen("localhost.invalid") + 1);
  +    if (val_get(prival, "msg", &msg) != VAL_OK)
  +        msg = NULL;
  +
  +    if (msg != NULL && msg->cpFid != NULL)
  +        foreignid = msg->cpFid;
  +    else
  +        foreignid = "noFid";
  +
  +    if (val_get(prival, "nodename", &nodename) != VAL_OK)
  +        nodename = "localhost.invalid";
  +
  +    cachetime = time(NULL);
  +    cachepid = getpid();
  +
  +    /* idea and first implementation as a contribution to lmtp2nntp v1.0.0 by Christos Ricudis <ricudis@paiko.gr> */
  +
  +    maxsize = WRAPAT - strlen("Message-ID: ");
  +    format = "<%0.11d$%0.6d$%0.4d$%.20s@%s>";
  +    size = str_format(NULL, -1, format, cachetime, cachepid, msgcount, foreignid, nodename);
  +    if (size >= 38) {
  +        if (size > maxsize)
  +            size = maxsize;
  +        cp = (char *)mallocex(size + 1);
  +        size = str_format(cp, size + 1, format, cachetime, cachepid, msgcount, foreignid, nodename);
  +        if (size > maxsize)
  +            cp[size-2] = '>';
       }
  +    else
  +        cp = strdupex("<>"); /* if format fails, do not end the wholly program abnormally */
   
  -    /* idea and first implementation as a contribution to lmtp2nntp v1.0.0
  -       by Christos Ricudis <ricudis@paiko.gr> */
  +    if (msg != NULL) {
  +        if (msg->cpMsgid != NULL)
  +            free(msg->cpMsgid);
  +        msg->cpMsgid = strdupex(cp);
  +    }
   
  -    cp = (char *)malloc( 100); //FIXME how much exacly?
  -    str_format(cp, 100, "<%0.11d$%0.6d$%0.2d$%.20s$@%.40s>",
  -            time(NULL), getpid(), mcounter++, "noFid" /*FIXME ((msg->cpFid == NULL)?"noFid":(msg->cpFid))*/, name.nodename);
  -    /*if (msg->cpMsgid != NULL)
  -        free(msg->cpMsgid);
  -    msg->cpMsgid = cp; //FIXME what about aligning lib_val here?
  -    */
       *cppOut    = strdupex(cp);
       *pnOutsize = strlen(cp) + 1;
       *pnOut     = strlen(cp);
  @@ -709,32 +755,26 @@
   }
   
   static var_rc_t operate_cb(
  -    var_t *var, void *ctx,
  +    var_t *var, void *_prival,
       const char  *op_ptr, size_t op_len,
       const char  *arg_ptr, size_t arg_len,
       const char  *val_ptr, size_t val_len,
       char **out_ptr, size_t *out_len, size_t *out_size)
   {
  +    val_t *prival = _prival;
       int i;
   
       if (val_ptr == NULL) {
  -        *out_ptr = "";
  +        *out_ptr = ""; //FIXME will lib_val try to free() this?
           *out_len = 0;
           *out_size = 0;
           return VAR_OK;
       }
  -    if (op_len == 6 && strncmp(op_ptr, "return", 6) == 0) { //FIXME needless block
  -        *out_ptr = malloc(arg_len);
  -        *out_len = arg_len;
  -        *out_size = arg_len;
  -        memcpy(*out_ptr, arg_ptr, arg_len);
  -        return VAR_OK;
  -    }
       else if (op_len == 15 && strncmp(op_ptr, "createmessageid", 15) == 0) {
  -        return createmessageid(arg_ptr, arg_len, val_ptr, val_len, out_ptr, out_len, out_size);
  +        return createmessageid(prival, arg_ptr, arg_len, val_ptr, val_len, out_ptr, out_len, out_size);
       }
       else if (op_len == 12 && strncmp(op_ptr, "canonifydate", 12) == 0) {
  -        return canonifydate(arg_ptr, arg_len, val_ptr, val_len, out_ptr, out_len, out_size);
  +        return canonifydate   (prival, arg_ptr, arg_len, val_ptr, val_len, out_ptr, out_len, out_size);
       }
       else 
           return VAR_ERR_UNDEFINED_OPERATION;
  @@ -882,7 +922,7 @@
           logbook(ctx->l2, L2_LEVEL_ERROR, "configure regex callback failed with %s (%d)", var_strerror(ctx->config_varregex, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
           throw(0,0,0);
       }
  -    if ((rc = var_config(ctx->config_varctx, VAR_CONFIG_CB_OPERATION, operate_cb, NULL)) != VAR_OK) { //FIXME isn't main a better place to do this?
  +    if ((rc = var_config(ctx->config_varctx, VAR_CONFIG_CB_OPERATION, operate_cb, ctx->prival)) != VAR_OK) { //FIXME isn't main a better place to do this?
           logbook(ctx->l2, L2_LEVEL_ERROR, "configure operate callback failed with %s (%d)", var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
           throw(0,0,0);
       }
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.h
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 lmtp2nntp_msg.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.h	23 May 2002 09:37:15 -0000	1.5
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.h	27 May 2002 15:09:50 -0000	1.6
  @@ -30,7 +30,7 @@
   #include <sys/types.h>
   
   #include "l2.h"
  -
  +#include "val.h"
   #include "lmtp2nntp_global.h"
   
   typedef struct {
  @@ -48,7 +48,8 @@
       size_t  asRcpt;
       char   *azNewsgroups;
       size_t  asNewsgroups;
  -    l2_channel_t *l2;
  +    l2_channel_t *l2;     /* logging context, inherited as a copy from parent */
  +    val_t  *prival;       /* access to private application context */
   } msg_t;
   
   struct regex_ctx_st;
  @@ -81,7 +82,7 @@
       MSG_ERR_ARG
   } msg_rc_t;
   
  -msg_t    *msg_create(void);
  +msg_t    *msg_create(val_t *);
   msg_rc_t  msg_split(msg_t *);
   msg_rc_t  msg_join(msg_t *);
   void      msg_destroy(msg_t *);

From ossp-cvs-owner@ossp.org  Mon May 27 17:29:18 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 51A7976363; Mon, 27 May 2002 17:29:18 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.pod
Message-Id: <20020527152918.51A7976363@mail.ossp.org>
Date: Mon, 27 May 2002 17:29:18 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   27-May-2002 17:29:18
  Branch: HEAD                             Handle: 2002052716291700

  Modified files:
    ossp-pkg/var            var.pod

  Log:
    backout now solved issue

  Summary:
    Revision    Changes     Path
    1.34        +0  -6      ossp-pkg/var/var.pod
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.pod
  ============================================================
  $ cvs diff -u -r1.33 -r1.34 var.pod
  --- ossp-pkg/var/var.pod	23 May 2002 09:13:20 -0000	1.33
  +++ ossp-pkg/var/var.pod	27 May 2002 15:29:17 -0000	1.34
  @@ -382,7 +382,6 @@
   
   This is a pointer to the location where the callback function should
   store the pointer to the resolved value of the variable.
  -Returning an empty value requires this pointer to be non-NULL otherwise it is interpreted as not expandable.
   
   =item size_t *I<val_len>
   
  @@ -407,11 +406,6 @@
   callback.
   
   =back
  -
  -*cppOut    = NULL;                returning NULL with size/out=0 means not expandable and keeps the current value
  -*cppOut    = (char *)mallocex(0); returning any freeable pointer with size/out=0 means empty value
  -*pnOutsize = 0;
  -*pnOut     = 0;
   
   The return code of the lookup function B<cb> is interpreted by
   B<var_expand> according to the following convention: C<VAR_OK> means

From ossp-cvs-owner@ossp.org  Mon May 27 17:34:33 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C136976363; Mon, 27 May 2002 17:34:33 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val TODO
Message-Id: <20020527153433.C136976363@mail.ossp.org>
Date: Mon, 27 May 2002 17:34:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   27-May-2002 17:34:33
  Branch: HEAD                             Handle: 2002052716343300

  Modified files:
    ossp-pkg/val            TODO

  Log:
    remember

  Summary:
    Revision    Changes     Path
    1.5         +12 -0      ossp-pkg/val/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/val/TODO
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 TODO
  --- ossp-pkg/val/TODO	16 Jan 2002 14:09:18 -0000	1.4
  +++ ossp-pkg/val/TODO	27 May 2002 15:34:33 -0000	1.5
  @@ -2,3 +2,15 @@
   TODO
   ----
   
  +o dynamic variables: function pointer for set/get
  +
  +o in combination with var lookups, each variable should have dump/print/output
  +  feature/function which results the value (integer, string, struct, etc.) always as a string
  +  (stringify function)
  +
  +o access control feature: val_reg(<acl>, ...)
  +                          val_get(<access-level>, ...)
  +  for use in combination with var in order to allow all internals to be stored
  +  and registered in val structure but allow variable lookups only to access
  +  public/whatever type variables.
  +

From ossp-cvs-owner@ossp.org  Mon May 27 17:37:21 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id ABA2A76363; Mon, 27 May 2002 17:37:21 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_msg.c
Message-Id: <20020527153721.ABA2A76363@mail.ossp.org>
Date: Mon, 27 May 2002 17:37:21 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   27-May-2002 17:37:21
  Branch: HEAD                             Handle: 2002052716372100

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_msg.c

  Log:
    setting size to zero makes lib_var assume static outbuffer

  Summary:
    Revision    Changes     Path
    1.16        +3  -3      ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 lmtp2nntp_msg.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	27 May 2002 15:09:50 -0000	1.15
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	27 May 2002 15:37:21 -0000	1.16
  @@ -673,7 +673,7 @@
               *pnOut     = strlen(*cppOut);
           }
           else {
  -            *cppOut    = (char *)mallocex(0);
  +            *cppOut    = "";
               *pnOutsize = 0;
               *pnOut     = 0;
           }
  @@ -765,8 +765,8 @@
       int i;
   
       if (val_ptr == NULL) {
  -        *out_ptr = ""; //FIXME will lib_val try to free() this?
  -        *out_len = 0;
  +        *out_ptr  = "";
  +        *out_len  = 0;
           *out_size = 0;
           return VAR_OK;
       }

From ossp-cvs-owner@ossp.org  Tue May 28 09:53:17 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CFDB376363; Tue, 28 May 2002 09:53:16 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_msg.c
Message-Id: <20020528075316.CFDB376363@mail.ossp.org>
Date: Tue, 28 May 2002 09:53:16 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   28-May-2002 09:53:16
  Branch: HEAD                             Handle: 2002052808531600

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_msg.c

  Log:
    data.m and .s are unions, so cpOld is really needed but strdup is not

  Summary:
    Revision    Changes     Path
    1.17        +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 lmtp2nntp_msg.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	27 May 2002 15:37:21 -0000	1.16
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	28 May 2002 07:53:16 -0000	1.17
  @@ -821,7 +821,7 @@
                   cpOld = hdI->data.s;
                   logbook(msg->l2, L2_LEVEL_DEBUG, "header=%s, currently single valued", hdI->name);
                   hdI->data.m = (char **)mallocex(3 * sizeof(char *));
  -                hdI->data.m[0] = strdupex(cpOld); //FIXME
  +                hdI->data.m[0] = cpOld;
                   hdI->data.m[1] = strdupex(cp);
                   hdI->data.m[2] = NULL;
                   hdI->ndata = 2;

From ossp-cvs-owner@ossp.org  Tue May 28 13:29:01 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 49DAA76363; Tue, 28 May 2002 13:29:01 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_msg.c
Message-Id: <20020528112901.49DAA76363@mail.ossp.org>
Date: Tue, 28 May 2002 13:29:01 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   28-May-2002 13:29:01
  Branch: HEAD                             Handle: 2002052812290000

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_msg.c

  Log:
    changed from coder to user type logging

  Summary:
    Revision    Changes     Path
    1.18        +8  -2      ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 lmtp2nntp_msg.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	28 May 2002 07:53:16 -0000	1.17
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	28 May 2002 11:29:00 -0000	1.18
  @@ -788,8 +788,11 @@
           headerdata_t *hdI, *hdP;
           char *cp;
   
  +        logbook(msg->l2, L2_LEVEL_TRACE, "headermatrix build up");
  +
           cp = NULL;
           while ((cp = argz_next(msg->azHeaders, msg->asHeaders, cp)) != NULL) { /* for each message header */
  +            logbook(msg->l2, L2_LEVEL_DEBUG, "processing message header \"%s\"", cp);
   
               /*FIXME we want O(1) here */
               for (hdP = NULL, hdI = msg->hdFirst; hdI != NULL; hdP = hdI, hdI = hdI->next) { /* for each matrix header */
  @@ -846,6 +849,9 @@
   void msg_headermatrixteardwn(msg_t *msg)
   {
       ex_t ex;
  +
  +    logbook(msg->l2, L2_LEVEL_TRACE, "headermatrix tear down");
  +
       try {
           headerdata_t *hdI;
   
  @@ -854,8 +860,8 @@
           msg->azHeaders = NULL;
           msg->asHeaders = 0;
   
  -        for (hdI = msg->hdFirst; hdI != NULL; hdI = hdI->next) { /* for each matrix header */
  -            logbook(msg->l2, L2_LEVEL_DEBUG, "FIXME trace loop hdI=%.8lx, hI->name=\"%s\"", hdI, hdI->name);
  +        for (hdI = msg->hdFirst; hdI != NULL; hdI = hdI->next) { /* for each header */
  +            logbook(msg->l2, L2_LEVEL_DEBUG, "processing matrix header \"%s\"", hdI->name);
               if (hdI->name == NULL || strlen(hdI->name) == 0 || hdI->ndata == 0)
                   continue;
               if (hdI->ndata == 0) {

From ossp-cvs-owner@ossp.org  Tue May 28 14:19:48 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 50F7176363; Tue, 28 May 2002 14:19:48 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO ossp-pkg/lmtp2nntp 00TODO lmtp2nntp_msg.c
Message-Id: <20020528121948.50F7176363@mail.ossp.org>
Date: Tue, 28 May 2002 14:19:48 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   28-May-2002 14:19:48
  Branch: HEAD                             Handle: 2002052813194700

  Modified files:
    ossp-pkg/l2             TODO
    ossp-pkg/lmtp2nntp      00TODO lmtp2nntp_msg.c

  Log:
    disable debug code blocks; request to enhance l2; FIXME/TODO statement

  Summary:
    Revision    Changes     Path
    1.55        +15 -0      ossp-pkg/l2/TODO
    1.60        +5  -0      ossp-pkg/lmtp2nntp/00TODO
    1.19        +13 -9      ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.54 -r1.55 TODO
  --- ossp-pkg/l2/TODO	3 Jan 2002 16:21:20 -0000	1.54
  +++ ossp-pkg/l2/TODO	28 May 2002 12:19:47 -0000	1.55
  @@ -1,6 +1,21 @@
   OSSP L2 TODO
   ============
   
  +New Idea as thl discussed with rse a few minutes ago
  +
  +- l2 should calculate the global logging mask automatically based on
  +  the OR'ing the masks of all output channels. This should increase
  +  performance as useless requests are captured at an early stage.
  +
  +- l2 should provide a function to set the logging masks including
  +  the global logging mask manually. This would require a mechanism
  +  to re-calculate the maks at any time when manually set to 'auto'.
  +
  +- l2 should provide a function to get the logging masks including
  +  the global logging mask. This could be used by the caller to
  +  check if it is worth calling the actual log and allow him to
  +  bypass wholly code blocks which exist for logging purposes only.
  +
   Next steps:
   
   - libl2syslog:
  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.59 -r1.60 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	23 May 2002 05:52:53 -0000	1.59
  +++ ossp-pkg/lmtp2nntp/00TODO	28 May 2002 12:19:47 -0000	1.60
  @@ -5,6 +5,11 @@
     - check printf/log for consistent look'n'feel and uniqness
     - check printf/log for consistent usage of strerr()/XXX_error()
   
  +  FIXMEs must be resolved to create a release.
  +
  +  TODOs are deferred for later releases. There're usually functional enhancements,
  +  performance improvements, rewrites, integration of external libraries ...
  +
     should we resolv on startup only or for every access or using dns ttl
   
     add --define foo:bar option allowing the user to specify arbitrary variables
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 lmtp2nntp_msg.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	28 May 2002 11:29:00 -0000	1.18
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	28 May 2002 12:19:47 -0000	1.19
  @@ -900,12 +900,13 @@
       if (ctx->option_firstheaderrule == NULL)
           return;
   
  -    { //FIXME debug code block
  +#if 0
  +    { //TODO debug only - wait for l2 to support code block bypassing
           int i;
           headerrule_t *hrD;
           headerdata_t *hdD;
   
  -        logbook(ctx->l2, L2_LEVEL_DEBUG, "FIXME trace ---------- headerrewrite() ----------");
  +        logbook(ctx->l2, L2_LEVEL_DEBUG, "headerrewrite input");
           for (hrD = ctx->option_firstheaderrule; hrD != NULL; hrD = hrD->next)
               logbook(ctx->l2, L2_LEVEL_DEBUG, "hrD->header=%s", hrD->header);
           for (hdD = ctx->msg->hdFirst; hdD != NULL; hdD = hdD->next) {
  @@ -918,6 +919,7 @@
                       logbook(ctx->l2, L2_LEVEL_DEBUG, "hdD->name:hdD->data.m[%d] %s %s", i, hdD->name, hdD->data.m[i]);
           }
       }
  +#endif
       
       regex_ctx = (regex_ctx_t *)mallocex(sizeof(regex_ctx_t));
       regex_ctx->nMatch = 0;
  @@ -933,12 +935,13 @@
           throw(0,0,0);
       }
       for (hrI = ctx->option_firstheaderrule; hrI != NULL; hrI = hrI->next) { /* for each rule */
  -        { //FIXME debug code block
  +#if 0
  +        { //TODO debug only - wait for l2 to support code block bypassing
               int i;
               headerrule_t *hrD;
               headerdata_t *hdD;
   
  -            logbook(ctx->l2, L2_LEVEL_DEBUG, "FIXME trace ---------- headerrewrite() ---------- MIDDLE");
  +            logbook(ctx->l2, L2_LEVEL_DEBUG, "headerrewrite loop for each rule");
               for (hrD = ctx->option_firstheaderrule; hrD != NULL; hrD = hrD->next)
                   logbook(ctx->l2, L2_LEVEL_DEBUG, "hrD->header=%s", hrD->header);
               for (hdD = ctx->msg->hdFirst; hdD != NULL; hdD = hdD->next) {
  @@ -952,6 +955,7 @@
                           logbook(ctx->l2, L2_LEVEL_DEBUG, "hdD->name:hdD->data.m[%d] %s %s", i, hdD->name, hdD->data.m[i]);
               }
           }
  +#endif
           if (hrI->regex != NULL) {
               logbook(ctx->l2, L2_LEVEL_DEBUG, "rule has regex %s", hrI->regex);
               for (hdI = ctx->msg->hdFirst; hdI != NULL; hdI = hdI->next) { /* for each header */
  @@ -1070,10 +1074,8 @@
               if (hdI != NULL) {
                   logbook(ctx->l2, L2_LEVEL_DEBUG, "replacing header %s", hrI->header);
                   headerreplace(hdI, hdNew);
  -                if (hdNew->prev == NULL) {
  -                    logbook(ctx->l2, L2_LEVEL_DEBUG, "FIXME trace #1");
  +                if (hdNew->prev == NULL)
                       ctx->msg->hdFirst = hdNew;
  -                }
               }
               else {
                   logbook(ctx->l2, L2_LEVEL_DEBUG, "appending header %s", hrI->header);
  @@ -1084,12 +1086,13 @@
           }
       }
   
  -    { //FIXME debug code block
  +#if 0
  +    { //TODO debug only - wait for l2 to support code block bypassing
           int i;
           headerrule_t *hrD;
           headerdata_t *hdD;
   
  -        logbook(ctx->l2, L2_LEVEL_DEBUG, "FIXME trace ---------- headerrewrite() ---------- FINISH");
  +        logbook(ctx->l2, L2_LEVEL_DEBUG, "headerrewrite output");
           for (hrD = ctx->option_firstheaderrule; hrD != NULL; hrD = hrD->next)
               logbook(ctx->l2, L2_LEVEL_DEBUG, "hrD->header=%s", hrD->header);
           for (hdD = ctx->msg->hdFirst; hdD != NULL; hdD = hdD->next) {
  @@ -1102,4 +1105,5 @@
                       logbook(ctx->l2, L2_LEVEL_DEBUG, "hdD->name:hdD->data.m[%d] %s %s", i, hdD->name, hdD->data.m[i]);
           }
       }
  +#endif
   }

From ossp-cvs-owner@ossp.org  Tue May 28 14:21:38 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 90A2B76363; Tue, 28 May 2002 14:21:38 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_msg.c
Message-Id: <20020528122138.90A2B76363@mail.ossp.org>
Date: Tue, 28 May 2002 14:21:38 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   28-May-2002 14:21:38
  Branch: HEAD                             Handle: 2002052813213800

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_msg.c

  Log:
    a hash could be implemented to enhance performance here

  Summary:
    Revision    Changes     Path
    1.20        +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 lmtp2nntp_msg.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	28 May 2002 12:19:47 -0000	1.19
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	28 May 2002 12:21:38 -0000	1.20
  @@ -794,7 +794,7 @@
           while ((cp = argz_next(msg->azHeaders, msg->asHeaders, cp)) != NULL) { /* for each message header */
               logbook(msg->l2, L2_LEVEL_DEBUG, "processing message header \"%s\"", cp);
   
  -            /*FIXME we want O(1) here */
  +            /*TODO we want O(1) here */
               for (hdP = NULL, hdI = msg->hdFirst; hdI != NULL; hdP = hdI, hdI = hdI->next) { /* for each matrix header */
                   if (hdI->name == NULL || strlen(hdI->name) == 0 || hdI->ndata == 0)
                       continue;

From ossp-cvs-owner@ossp.org  Tue May 28 14:30:29 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C135A76363; Tue, 28 May 2002 14:30:29 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_msg.c
Message-Id: <20020528123029.C135A76363@mail.ossp.org>
Date: Tue, 28 May 2002 14:30:29 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   28-May-2002 14:30:29
  Branch: HEAD                             Handle: 2002052813302900

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_msg.c

  Log:
    kick off the bad name, use less variables, fix wrong variable in logs

  Summary:
    Revision    Changes     Path
    1.21        +10 -13     ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 lmtp2nntp_msg.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	28 May 2002 12:21:38 -0000	1.20
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	28 May 2002 12:30:29 -0000	1.21
  @@ -894,7 +894,8 @@
       regex_ctx_t *regex_ctx;
   #define OVECSIZE 30
       int            ovec[OVECSIZE];
  -    var_rc_t rc; char *cp; //FIXME what a bad name, it's not the returncode of this function
  +    var_rc_t var_rc;
  +    char *cp;
   
       /* short circuit in case no headerrules were set up */
       if (ctx->option_firstheaderrule == NULL)
  @@ -926,12 +927,12 @@
       regex_ctx->acpMatch = NULL;
       regex_ctx->l2_env = ctx->l2_env;
       regex_ctx->l2 = ctx->l2;
  -    if ((rc = var_config(ctx->config_varregex, VAR_CONFIG_CB_VALUE, regex_lookup, regex_ctx)) != VAR_OK) {
  -        logbook(ctx->l2, L2_LEVEL_ERROR, "configure regex callback failed with %s (%d)", var_strerror(ctx->config_varregex, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  +    if ((var_rc = var_config(ctx->config_varregex, VAR_CONFIG_CB_VALUE, regex_lookup, regex_ctx)) != VAR_OK) {
  +        logbook(ctx->l2, L2_LEVEL_ERROR, "configure regex callback failed with %s (%d)", var_strerror(ctx->config_varregex, var_rc, &cp) == VAR_OK ? cp : "Unknown Error", var_rc);
           throw(0,0,0);
       }
  -    if ((rc = var_config(ctx->config_varctx, VAR_CONFIG_CB_OPERATION, operate_cb, ctx->prival)) != VAR_OK) { //FIXME isn't main a better place to do this?
  -        logbook(ctx->l2, L2_LEVEL_ERROR, "configure operate callback failed with %s (%d)", var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  +    if ((var_rc = var_config(ctx->config_varctx, VAR_CONFIG_CB_OPERATION, operate_cb, ctx->prival)) != VAR_OK) { //FIXME isn't main a better place to do this?
  +        logbook(ctx->l2, L2_LEVEL_ERROR, "configure operate callback failed with %s (%d)", var_strerror(ctx->config_varctx, var_rc, &cp) == VAR_OK ? cp : "Unknown Error", var_rc);
           throw(0,0,0);
       }
       for (hrI = ctx->option_firstheaderrule; hrI != NULL; hrI = hrI->next) { /* for each rule */
  @@ -973,11 +974,10 @@
                       hdNew = headercreate();
                       /* expanding regex references into header name */
                       {
  -                        var_rc_t var_rc;
                           char *res_ptr;
                           logbook(ctx->l2, L2_LEVEL_DEBUG, "expanding regex references in headername '%s'", hrI->header);
                           if ((var_rc = var_expand(ctx->config_varregex, hrI->header, strlen(hrI->header), &res_ptr, NULL, FALSE)) != VAR_OK) {
  -                            logbook(ctx->l2, L2_LEVEL_ERROR, "expansion of '%s' failed: %s", hrI->header, var_strerror(ctx->config_varregex, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  +                            logbook(ctx->l2, L2_LEVEL_ERROR, "expansion of '%s' failed: %s", hrI->header, var_strerror(ctx->config_varregex, var_rc, &cp) == VAR_OK ? cp : "Unknown Error", var_rc);
                           }
                           logbook(ctx->l2, L2_LEVEL_DEBUG, "expansion result '%s'", res_ptr);
                           if (strlen(res_ptr) == 0) {
  @@ -998,22 +998,20 @@
                       else {
                           /* expanding regex references into header value */
                           {
  -                            var_rc_t var_rc;
                               char *res_ptr;
                               logbook(ctx->l2, L2_LEVEL_DEBUG, "expanding regex references in header value '%s'", hrI->val);
                               if ((var_rc = var_expand(ctx->config_varregex, hrI->val, strlen(hrI->val), &res_ptr, NULL, FALSE)) != VAR_OK) {
  -                                logbook(ctx->l2, L2_LEVEL_ERROR, "expansion of '%s' failed: %s", hrI->val, var_strerror(ctx->config_varregex, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  +                                logbook(ctx->l2, L2_LEVEL_ERROR, "expansion of '%s' failed: %s", hrI->val, var_strerror(ctx->config_varregex, var_rc, &cp) == VAR_OK ? cp : "Unknown Error", var_rc);
                               }
                               logbook(ctx->l2, L2_LEVEL_DEBUG, "expansion result '%s'", res_ptr);
                               cp = res_ptr;
                           }
                           /* expanding variables into header value */
                           if (hrI->val != NULL) {
  -                            var_rc_t var_rc;
                               char *res_ptr;
                               logbook(ctx->l2, L2_LEVEL_DEBUG, "expanding variables in header value '%s'", hrI->val);
                               if ((var_rc = var_expand(ctx->config_varctx, cp, strlen(cp), &res_ptr, NULL, FALSE)) != VAR_OK) {
  -                                logbook(ctx->l2, L2_LEVEL_ERROR, "expansion of '%s' failed: %s", cp, var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  +                                logbook(ctx->l2, L2_LEVEL_ERROR, "expansion of '%s' failed: %s", cp, var_strerror(ctx->config_varctx, var_rc, &cp) == VAR_OK ? cp : "Unknown Error", var_rc);
                               }
                               logbook(ctx->l2, L2_LEVEL_DEBUG, "expansion result '%s'", res_ptr);
                               if (strlen(res_ptr) == 0) {
  @@ -1047,11 +1045,10 @@
               else {
                   /*FIXME clean up data.m */
                   /* expanding variables into header value */
  -                var_rc_t var_rc;
                   char *res_ptr;
                   logbook(ctx->l2, L2_LEVEL_DEBUG, "expanding variables in header value '%s'", hrI->val);
                   if ((var_rc = var_expand(ctx->config_varctx, hrI->val, strlen(hrI->val), &res_ptr, NULL, FALSE)) != VAR_OK) {
  -                    logbook(ctx->l2, L2_LEVEL_ERROR, "expansion of '%s' failed: %s", hrI->val, var_strerror(ctx->config_varctx, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "expansion of '%s' failed: %s", hrI->val, var_strerror(ctx->config_varctx, var_rc, &cp) == VAR_OK ? cp : "Unknown Error", var_rc);
                   }
                   logbook(ctx->l2, L2_LEVEL_DEBUG, "expansion result '%s'", res_ptr);
                   if (strlen(res_ptr) == 0) {

From ossp-cvs-owner@ossp.org  Tue May 28 14:32:59 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 30A8676363; Tue, 28 May 2002 14:32:59 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_msg.c
Message-Id: <20020528123259.30A8676363@mail.ossp.org>
Date: Tue, 28 May 2002 14:32:59 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   28-May-2002 14:32:59
  Branch: HEAD                             Handle: 2002052813325800

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_msg.c

  Log:
    it is a good place here since code and callback are both in this file

  Summary:
    Revision    Changes     Path
    1.22        +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 lmtp2nntp_msg.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	28 May 2002 12:30:29 -0000	1.21
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	28 May 2002 12:32:58 -0000	1.22
  @@ -931,7 +931,7 @@
           logbook(ctx->l2, L2_LEVEL_ERROR, "configure regex callback failed with %s (%d)", var_strerror(ctx->config_varregex, var_rc, &cp) == VAR_OK ? cp : "Unknown Error", var_rc);
           throw(0,0,0);
       }
  -    if ((var_rc = var_config(ctx->config_varctx, VAR_CONFIG_CB_OPERATION, operate_cb, ctx->prival)) != VAR_OK) { //FIXME isn't main a better place to do this?
  +    if ((var_rc = var_config(ctx->config_varctx, VAR_CONFIG_CB_OPERATION, operate_cb, ctx->prival)) != VAR_OK) {
           logbook(ctx->l2, L2_LEVEL_ERROR, "configure operate callback failed with %s (%d)", var_strerror(ctx->config_varctx, var_rc, &cp) == VAR_OK ? cp : "Unknown Error", var_rc);
           throw(0,0,0);
       }

From ossp-cvs-owner@ossp.org  Tue May 28 14:43:15 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5AF0576363; Tue, 28 May 2002 14:43:15 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp fixme.h lmtp2nntp_config.c lmtp2nntp_ms...
Message-Id: <20020528124315.5AF0576363@mail.ossp.org>
Date: Tue, 28 May 2002 14:43:15 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   28-May-2002 14:43:15
  Branch: HEAD                             Handle: 2002052813431400

  Modified files:
    ossp-pkg/lmtp2nntp      fixme.h lmtp2nntp_config.c lmtp2nntp_msg.c

  Log:
    rename

  Summary:
    Revision    Changes     Path
    1.24        +1  -1      ossp-pkg/lmtp2nntp/fixme.h
    1.74        +4  -4      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.23        +11 -11     ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/fixme.h
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 fixme.h
  --- ossp-pkg/lmtp2nntp/fixme.h	27 May 2002 15:09:50 -0000	1.23
  +++ ossp-pkg/lmtp2nntp/fixme.h	28 May 2002 12:43:14 -0000	1.24
  @@ -37,7 +37,7 @@
       headerrule_t *next;
       int           pri;
       char         *regex;
  -    char         *header;
  +    char         *name;
       char         *val;
       pcre         *pcreRegex;
       pcre_extra   *pcreExtra;
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.73 -r1.74 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	27 May 2002 15:09:50 -0000	1.73
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	28 May 2002 12:43:14 -0000	1.74
  @@ -587,7 +587,7 @@
                       hrNew->next      = NULL;
                       hrNew->pri       = 500; /* default priority */
                       hrNew->regex     = NULL;
  -                    hrNew->header    = NULL;
  +                    hrNew->name      = NULL;
                       hrNew->val       = NULL;
                       hrNew->pcreRegex = NULL;
                       hrNew->pcreExtra = NULL;
  @@ -624,7 +624,7 @@
                           logbook(ctx->l2, L2_LEVEL_ERROR, "option --headerrule, header (%s) missing", (ov->data.m)[i]);
                           throw(0,0,0);
                       }
  -                    hrNew->header = str_dupex(cpP, n);
  +                    hrNew->name   = str_dupex(cpP, n);
                       /* value */
                       cpP = cp;
                       n = strlen(cpP);
  @@ -682,8 +682,8 @@
                       free(hrNew->pcreRegex);
                   if (hrNew->val != NULL)
                       freeex(hrNew->val);
  -                if (hrNew->header != NULL)
  -                    freeex(hrNew->header);
  +                if (hrNew->name != NULL)
  +                    freeex(hrNew->name);
                   if (hrNew->regex != NULL)
                       freeex(hrNew->regex);
                   freeex((headerrule_t *)hrNew);
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 lmtp2nntp_msg.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	28 May 2002 12:32:58 -0000	1.22
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	28 May 2002 12:43:14 -0000	1.23
  @@ -975,19 +975,19 @@
                       /* expanding regex references into header name */
                       {
                           char *res_ptr;
  -                        logbook(ctx->l2, L2_LEVEL_DEBUG, "expanding regex references in headername '%s'", hrI->header);
  -                        if ((var_rc = var_expand(ctx->config_varregex, hrI->header, strlen(hrI->header), &res_ptr, NULL, FALSE)) != VAR_OK) {
  -                            logbook(ctx->l2, L2_LEVEL_ERROR, "expansion of '%s' failed: %s", hrI->header, var_strerror(ctx->config_varregex, var_rc, &cp) == VAR_OK ? cp : "Unknown Error", var_rc);
  +                        logbook(ctx->l2, L2_LEVEL_DEBUG, "expanding regex references in headername '%s'", hrI->name);
  +                        if ((var_rc = var_expand(ctx->config_varregex, hrI->name, strlen(hrI->name), &res_ptr, NULL, FALSE)) != VAR_OK) {
  +                            logbook(ctx->l2, L2_LEVEL_ERROR, "expansion of '%s' failed: %s", hrI->name, var_strerror(ctx->config_varregex, var_rc, &cp) == VAR_OK ? cp : "Unknown Error", var_rc);
                           }
                           logbook(ctx->l2, L2_LEVEL_DEBUG, "expansion result '%s'", res_ptr);
                           if (strlen(res_ptr) == 0) {
                               logbook(ctx->l2, L2_LEVEL_DEBUG, "marking deleted - emtpy headername");
  -                            hdNew->name = NULL; //FIXME rename ->header to ->name
  +                            hdNew->name = NULL;
                               /*FIXME clean up data.s and data.m */
                               hdNew->ndata = 0;
                           }
                           else {
  -                            hdNew->name = res_ptr; //FIXME rename ->header to ->name
  +                            hdNew->name = res_ptr;
                           }
                       }
                       if (hrI->val == NULL) {
  @@ -1034,9 +1034,9 @@
               }
           }
           else {
  -            logbook(ctx->l2, L2_LEVEL_DEBUG, "rule has no regex but static header %s", hrI->header);
  +            logbook(ctx->l2, L2_LEVEL_DEBUG, "rule has no regex but static header %s", hrI->name);
               hdNew = headercreate();
  -            hdNew->name = strdupex(hrI->header); //FIXME rename ->header to ->name
  +            hdNew->name = strdupex(hrI->name);
               if (hrI->val == NULL) {
                   logbook(ctx->l2, L2_LEVEL_DEBUG, "marking deleted");
                   /*FIXME clean up data.s and data.m */
  @@ -1064,18 +1064,18 @@
               for (hdI = ctx->msg->hdFirst; hdI != NULL; hdI = hdI->next) { /* for each header */
                   if (hdI->name == NULL || strlen(hdI->name) == 0)
                       continue;
  -                logbook(ctx->l2, L2_LEVEL_DEBUG, "hrI->header=%s, hdI->name=%s", hrI->header, hdI->name);
  -                if (strcasecmp(hrI->header, hdI->name) == 0)
  +                logbook(ctx->l2, L2_LEVEL_DEBUG, "hrI->name=%s, hdI->name=%s", hrI->name, hdI->name);
  +                if (strcasecmp(hrI->name, hdI->name) == 0)
                       break;
               }
               if (hdI != NULL) {
  -                logbook(ctx->l2, L2_LEVEL_DEBUG, "replacing header %s", hrI->header);
  +                logbook(ctx->l2, L2_LEVEL_DEBUG, "replacing header %s", hrI->name);
                   headerreplace(hdI, hdNew);
                   if (hdNew->prev == NULL)
                       ctx->msg->hdFirst = hdNew;
               }
               else {
  -                logbook(ctx->l2, L2_LEVEL_DEBUG, "appending header %s", hrI->header);
  +                logbook(ctx->l2, L2_LEVEL_DEBUG, "appending header %s", hrI->name);
                   for (hdI = ctx->msg->hdFirst; hdI->next != NULL; hdI = hdI->next);
                   hdI->next = hdNew;
                   hdNew->prev = hdI;

From ossp-cvs-owner@ossp.org  Tue May 28 15:54:23 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 04DB376363; Tue, 28 May 2002 15:54:22 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_msg.c
Message-Id: <20020528135422.04DB376363@mail.ossp.org>
Date: Tue, 28 May 2002 15:54:22 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   28-May-2002 15:54:22
  Branch: HEAD                             Handle: 2002052814542200

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_msg.c

  Log:
    clean up data.[sm]

  Summary:
    Revision    Changes     Path
    1.24        +22 -9      ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 lmtp2nntp_msg.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	28 May 2002 12:43:14 -0000	1.23
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	28 May 2002 13:54:22 -0000	1.24
  @@ -477,7 +477,7 @@
   
       //FIXME below is the header rewriting engine which must be cleaned up and integrated
   
  -static void headerdestroy(headerdata_t *hdC)
  +static void headerdatadestroy(headerdata_t *hdC)
   {
       int i;
   
  @@ -492,8 +492,18 @@
       if (hdC->ndata == 1)
           if (hdC->data.s != NULL)
               free(hdC->data.s);
  +}
  +
  +static void headernamedestroy(headerdata_t *hdC)
  +{
       if (hdC->name != NULL)
           free(hdC->name);
  +}
  +
  +static void headerdestroy(headerdata_t *hdC)
  +{
  +    headerdatadestroy(hdC);
  +    headernamedestroy(hdC);
       if (hdC->prev != NULL && hdC->prev->next == hdC)
           throw(0,0,0);
       if (hdC->next != NULL && hdC->next->prev == hdC)
  @@ -982,8 +992,8 @@
                           logbook(ctx->l2, L2_LEVEL_DEBUG, "expansion result '%s'", res_ptr);
                           if (strlen(res_ptr) == 0) {
                               logbook(ctx->l2, L2_LEVEL_DEBUG, "marking deleted - emtpy headername");
  -                            hdNew->name = NULL;
  -                            /*FIXME clean up data.s and data.m */
  +                            headerdatadestroy(hdNew);
  +                            headernamedestroy(hdNew);
                               hdNew->ndata = 0;
                           }
                           else {
  @@ -992,7 +1002,8 @@
                       }
                       if (hrI->val == NULL) {
                           logbook(ctx->l2, L2_LEVEL_DEBUG, "marking deleted - empty headervalue before expansion");
  -                        /*FIXME clean up data.s and data.m */
  +                        headerdatadestroy(hdNew);
  +                        headernamedestroy(hdNew);
                           hdNew->ndata = 0;
                       }
                       else {
  @@ -1016,7 +1027,8 @@
                               logbook(ctx->l2, L2_LEVEL_DEBUG, "expansion result '%s'", res_ptr);
                               if (strlen(res_ptr) == 0) {
                                   logbook(ctx->l2, L2_LEVEL_DEBUG, "marking deleted - empty headervalue after expansion");
  -                                /*FIXME clean up data.s and data.m */
  +                                headerdatadestroy(hdNew);
  +                                headernamedestroy(hdNew);
                                   hdNew->ndata = 0;
                               }
                               else {
  @@ -1025,7 +1037,6 @@
                               }
                           }
                       }
  -                    /*FIXME clean up data.m */
                       headerreplace(hdI, hdNew);
                       if (hdNew->prev == NULL)
                           ctx->msg->hdFirst = hdNew;
  @@ -1039,11 +1050,11 @@
               hdNew->name = strdupex(hrI->name);
               if (hrI->val == NULL) {
                   logbook(ctx->l2, L2_LEVEL_DEBUG, "marking deleted");
  -                /*FIXME clean up data.s and data.m */
  +                headerdatadestroy(hdNew);
  +                headernamedestroy(hdNew);
                   hdNew->ndata = 0;
               }
               else {
  -                /*FIXME clean up data.m */
                   /* expanding variables into header value */
                   char *res_ptr;
                   logbook(ctx->l2, L2_LEVEL_DEBUG, "expanding variables in header value '%s'", hrI->val);
  @@ -1053,10 +1064,12 @@
                   logbook(ctx->l2, L2_LEVEL_DEBUG, "expansion result '%s'", res_ptr);
                   if (strlen(res_ptr) == 0) {
                       logbook(ctx->l2, L2_LEVEL_DEBUG, "marking deleted - empty headervalue after expansion");
  -                    /*FIXME clean up data.s and data.m */
  +                    headerdatadestroy(hdNew);
  +                    headernamedestroy(hdNew);
                       hdNew->ndata = 0;
                   }
                   else {
  +                    headerdatadestroy(hdNew);
                       hdNew->data.s = res_ptr;
                       hdNew->ndata = 1;
                   }

From ossp-cvs-owner@ossp.org  Tue May 28 16:02:40 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C86C776363; Tue, 28 May 2002 16:02:40 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c
Message-Id: <20020528140240.C86C776363@mail.ossp.org>
Date: Tue, 28 May 2002 16:02:40 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   28-May-2002 16:02:40
  Branch: HEAD                             Handle: 2002052815024000

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c

  Log:
    remove debugging code blocks

  Summary:
    Revision    Changes     Path
    1.75        +0  -19     ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.74 -r1.75 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	28 May 2002 12:43:14 -0000	1.74
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	28 May 2002 14:02:40 -0000	1.75
  @@ -1106,7 +1106,6 @@
                           rethrow;
                       }
                   }
  -                //printf("DEBUG: *** 1 *** file as it was just read in ***\n%s***\n", cpBuf);
                   {
                       volatile msg_t *msg = NULL;
                       msg_rc_t rc;
  @@ -1120,28 +1119,10 @@
                               logbook(ctx->l2, L2_LEVEL_ERROR, "Error splitting message: %s", msg_error(rc));
                               throw(0, 0, "msg_split");
                           }
  -                        {//FIXME
  -                            char *cp;
  -                            cp = NULL;
  -                            logbook(msg->l2, L2_LEVEL_DEBUG, "FIXME trace #20");
  -                            while ((cp = argz_next(msg->azHeaders, msg->asHeaders, cp)) != NULL) {
  -                                logbook(msg->l2, L2_LEVEL_DEBUG, "header=\"%s\"", cp);
  -                            }
  -                            logbook(msg->l2, L2_LEVEL_DEBUG, "FIXME trace #21");
  -                        }
                           msg_headermatrixbuildup((msg_t *)msg);
                           ctx->msg = (msg_t *)msg;
                           headerrewrite(ctx);
                           msg_headermatrixteardwn((msg_t *)msg);
  -                        {//FIXME
  -                            char *cp;
  -                            cp = NULL;
  -                            logbook(msg->l2, L2_LEVEL_DEBUG, "FIXME trace #30");
  -                            while ((cp = argz_next(msg->azHeaders, msg->asHeaders, cp)) != NULL) {
  -                                logbook(msg->l2, L2_LEVEL_DEBUG, "header=\"%s\"", cp);
  -                            }
  -                            logbook(msg->l2, L2_LEVEL_DEBUG, "FIXME trace #31");
  -                        }
                           argz_add(&((msg_t *)msg)->azNewsgroups, &((msg_t *)msg)->asNewsgroups, "invalid.tst"); //FIXME
                           if ((rc = msg_join((msg_t *)msg)) != MSG_OK) {
                               logbook(ctx->l2, L2_LEVEL_ERROR, "Error joining message: %s", msg_error(rc));

From ossp-cvs-owner@ossp.org  Tue May 28 16:03:33 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4D68D76363; Tue, 28 May 2002 16:03:33 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c
Message-Id: <20020528140333.4D68D76363@mail.ossp.org>
Date: Tue, 28 May 2002 16:03:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   28-May-2002 16:03:33
  Branch: HEAD                             Handle: 2002052815033200

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c

  Log:
    copy'n'paste bug

  Summary:
    Revision    Changes     Path
    1.76        +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.75 -r1.76 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	28 May 2002 14:02:40 -0000	1.75
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	28 May 2002 14:03:32 -0000	1.76
  @@ -1126,7 +1126,7 @@
                           argz_add(&((msg_t *)msg)->azNewsgroups, &((msg_t *)msg)->asNewsgroups, "invalid.tst"); //FIXME
                           if ((rc = msg_join((msg_t *)msg)) != MSG_OK) {
                               logbook(ctx->l2, L2_LEVEL_ERROR, "Error joining message: %s", msg_error(rc));
  -                            throw(0, 0, "msg_split");
  +                            throw(0, 0, "msg_join");
                           }
                           printf("%s", msg->cpMsg); //FIXME
                       }

From ossp-cvs-owner@ossp.org  Tue May 28 16:14:02 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0CD0776363; Tue, 28 May 2002 16:14:02 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_msg.c
Message-Id: <20020528141402.0CD0776363@mail.ossp.org>
Date: Tue, 28 May 2002 16:14:02 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   28-May-2002 16:14:01
  Branch: HEAD                             Handle: 2002052815140100

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_msg.c

  Log:
    tai debugging

  Summary:
    Revision    Changes     Path
    1.25        +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 lmtp2nntp_msg.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	28 May 2002 13:54:22 -0000	1.24
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	28 May 2002 14:14:01 -0000	1.25
  @@ -655,7 +655,7 @@
           free(cpP);
       }
   
  -    printf("DEBUG: cpVal=\"%41s\", cpArg=\"%s\"\n", cpVal, cpArg);
  +    //FIXME printf("DEBUG: cpVal=\"%41s\", cpArg=\"%s\"\n", cpVal, cpArg);
       if ((cpVal == NULL) || (strlen(cpVal) == 0)) {
           *cppOut    = (char *)mallocex(DATELENMAX);
           *pnOutsize = DATELENMAX;

From ossp-cvs-owner@ossp.org  Tue May 28 16:14:45 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DE97A763DE; Tue, 28 May 2002 16:14:44 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c
Message-Id: <20020528141444.DE97A763DE@mail.ossp.org>
Date: Tue, 28 May 2002 16:14:44 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   28-May-2002 16:14:44
  Branch: HEAD                             Handle: 2002052815144400

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c

  Log:
    FIXMEs reviewed

  Summary:
    Revision    Changes     Path
    1.77        +2  -2      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.76 -r1.77 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	28 May 2002 14:03:32 -0000	1.76
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	28 May 2002 14:14:44 -0000	1.77
  @@ -1123,12 +1123,12 @@
                           ctx->msg = (msg_t *)msg;
                           headerrewrite(ctx);
                           msg_headermatrixteardwn((msg_t *)msg);
  -                        argz_add(&((msg_t *)msg)->azNewsgroups, &((msg_t *)msg)->asNewsgroups, "invalid.tst"); //FIXME
  +                        argz_add(&((msg_t *)msg)->azNewsgroups, &((msg_t *)msg)->asNewsgroups, "invalid.test");
                           if ((rc = msg_join((msg_t *)msg)) != MSG_OK) {
                               logbook(ctx->l2, L2_LEVEL_ERROR, "Error joining message: %s", msg_error(rc));
                               throw(0, 0, "msg_join");
                           }
  -                        printf("%s", msg->cpMsg); //FIXME
  +                        printf("%s", msg->cpMsg);
                       }
                       cleanup {
                           if (msg != NULL)

From ossp-cvs-owner@ossp.org  Tue May 28 16:17:23 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 95A3976363; Tue, 28 May 2002 16:17:23 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_msg.c
Message-Id: <20020528141723.95A3976363@mail.ossp.org>
Date: Tue, 28 May 2002 16:17:23 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   28-May-2002 16:17:23
  Branch: HEAD                             Handle: 2002052815172300

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_msg.c

  Log:
    unused variable

  Summary:
    Revision    Changes     Path
    1.26        +0  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 lmtp2nntp_msg.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	28 May 2002 14:14:01 -0000	1.25
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	28 May 2002 14:17:23 -0000	1.26
  @@ -772,7 +772,6 @@
       char **out_ptr, size_t *out_len, size_t *out_size)
   {
       val_t *prival = _prival;
  -    int i;
   
       if (val_ptr == NULL) {
           *out_ptr  = "";

From ossp-cvs-owner@ossp.org  Tue May 28 19:02:57 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B260376363; Tue, 28 May 2002 19:02:56 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc Makefile.in
Message-Id: <20020528170256.B260376363@mail.ossp.org>
Date: Tue, 28 May 2002 19:02:56 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   28-May-2002 19:02:56
  Branch: HEAD                             Handle: 2002052818025600

  Modified files:
    ossp-pkg/rc             Makefile.in

  Log:
    Fix stupid cut and paste error.

  Summary:
    Revision    Changes     Path
    1.28        +3  -3      ossp-pkg/rc/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/rc/Makefile.in
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 Makefile.in
  --- ossp-pkg/rc/Makefile.in	22 May 2002 13:29:40 -0000	1.27
  +++ ossp-pkg/rc/Makefile.in	28 May 2002 17:02:56 -0000	1.28
  @@ -131,9 +131,9 @@
   	$(SHTOOL) install -c -m 644 rc-sample.5 $(DESTDIR)$(mandir)/man5/rc-sample.5
   
   uninstall:
  -	$(RM) $(DESTDIR)$(DESTDIR)$(bindir)/rc
  -	$(RM) $(DESTDIR)$(DESTDIR)$(mandir)/man1/rc.1
  -	$(RM) $(DESTDIR)$(DESTDIR)$(mandir)/man5/rc-sample.5
  +	$(RM) $(DESTDIR)$(bindir)/rc
  +	$(RM) $(DESTDIR)$(mandir)/man1/rc.1
  +	$(RM) $(DESTDIR)$(mandir)/man5/rc-sample.5
   
   clean:
   	$(RM) $(TARGET) $(OBJS) $(PROG_NAME).core rc_pcre.tab

From ossp-cvs-owner@ossp.org  Wed May 29 10:32:55 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 478A676363; Wed, 29 May 2002 10:32:54 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tai tai.h tai_lib.c tai_test.c
Message-Id: <20020529083254.478A676363@mail.ossp.org>
Date: Wed, 29 May 2002 10:32:54 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   29-May-2002 10:32:54
  Branch: HEAD                             Handle: 2002052909325300

  Modified files:
    ossp-pkg/tai            tai.h tai_lib.c tai_test.c

  Log:
    ugly hacks to allow lmtp2nntp to compile; comparison does not even work, yet

  Summary:
    Revision    Changes     Path
    1.2         +2  -1      ossp-pkg/tai/tai.h
    1.5         +19 -1      ossp-pkg/tai/tai_lib.c
    1.3         +39 -7      ossp-pkg/tai/tai_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/tai/tai.h
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 tai.h
  --- ossp-pkg/tai/tai.h	18 Apr 2002 09:10:46 -0000	1.1.1.1
  +++ ossp-pkg/tai/tai.h	29 May 2002 08:32:53 -0000	1.2
  @@ -34,7 +34,8 @@
   #include <time.h> /* time_t, struct tm */
   
   typedef enum {
  -    TAI_OK = 0,
  +    TAI_OK = 0, /* also used for TRUE */
  +    TAI_FALSE,
       TAI_ERR_ARG,
       TAI_ERR_USE,
       TAI_ERR_OVF,
  Index: ossp-pkg/tai/tai_lib.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 tai_lib.c
  --- ossp-pkg/tai/tai_lib.c	1 May 2002 18:48:34 -0000	1.4
  +++ ossp-pkg/tai/tai_lib.c	29 May 2002 08:32:53 -0000	1.5
  @@ -239,11 +239,29 @@
   
   tai_rc_t tai_op(tai_t *tai, tai_op_t op, ...)
   {
  +    tai_rc_t rc = TAI_ERR_IMP;
       va_list ap;
   
       if (tai == NULL)
           return TAI_ERR_ARG;
       va_start(ap, op); 
  +    if ((op == TAI_OP_NE) || (op == TAI_OP_EQ) || (op == TAI_OP_LT) || (op == TAI_OP_LE) || (op == TAI_OP_GT) || (op == TAI_OP_GE)) {
  +        tai_t *tai1, *tai2;
  +        unsigned long s1, s2;
  +
  +        tai1 = tai;
  +        tai2 = (tai_t *)va_arg(ap, void *);
  +        s1 = tai1->tai_sec + (60 * tai1->tai_min) + (60 * 60 * tai1->tai_hour) + (60 * 60 * 24 * tai1->tai_yday) + (60 * 60 * 24 * 365 * tai1->tai_year) + tai1->tai_gmtoff;
  +        s2 = tai2->tai_sec + (60 * tai2->tai_min) + (60 * 60 * tai2->tai_hour) + (60 * 60 * 24 * tai2->tai_yday) + (60 * 60 * 24 * 365 * tai2->tai_year) + tai2->tai_gmtoff;
  +        switch (op) {
  +            case TAI_OP_NE: rc = s2 != s1 ? TAI_OK: TAI_FALSE;
  +            case TAI_OP_EQ: rc = s2 == s1 ? TAI_OK: TAI_FALSE;
  +            case TAI_OP_LT: rc = s2 <  s1 ? TAI_OK: TAI_FALSE;
  +            case TAI_OP_LE: rc = s2 <= s1 ? TAI_OK: TAI_FALSE;
  +            case TAI_OP_GT: rc = s2 >  s1 ? TAI_OK: TAI_FALSE;
  +            case TAI_OP_GE: rc = s2 >= s1 ? TAI_OK: TAI_FALSE;
  +        }
  +    }
       va_end(ap); 
  -    return TAI_ERR_IMP;
  +    return rc;
   }
  Index: ossp-pkg/tai/tai_test.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 tai_test.c
  --- ossp-pkg/tai/tai_test.c	1 May 2002 18:48:34 -0000	1.2
  +++ ossp-pkg/tai/tai_test.c	29 May 2002 08:32:53 -0000	1.3
  @@ -123,14 +123,46 @@
       tai_destroy(tm);
   }
   
  -TS_TEST(test_formatting)
  +TS_TEST(test_comparing)
   {
  -    tai_t *tm;
  +    tai_rc_t rv;
  +    tai_t *tm1, *tm2;
  +    int i;
  +    struct {
  +        char *date1;
  +        char *date2;
  +        int   op;
  +        int   exp;
  +    } table[] = {
  +        { "2000-02-22 10:20:30 +0200", "2000-02-22 10:20:31 +0200", TAI_OP_NE, TAI_OK    }, /* 00 */
  +        { "2000-02-22 10:20:30 +0200", "2000-02-22 10:20:30 +0200", TAI_OP_NE, TAI_FALSE }, /* 01 */
  +        { "2000-02-22 10:20:30 +0200", "2000-02-22 10:20:30 +0200", TAI_OP_EQ, TAI_OK    }, /* 02 */
  +        { "2000-02-22 10:20:30 +0200", "2000-02-22 10:20:31 +0200", TAI_OP_EQ, TAI_FALSE }, /* 03 */
  +        { "2000-02-22 10:20:30 +0200", "2000-02-22 10:20:20 +0200", TAI_OP_LT, TAI_OK    }, /* 04 */
  +        { "2000-02-22 10:20:30 +0200", "2000-02-22 10:20:30 +0200", TAI_OP_LT, TAI_FALSE }, /* 05 */
  +        { "2000-02-22 10:20:30 +0200", "2000-02-22 10:20:20 +0200", TAI_OP_LE, TAI_OK    }, /* 06 */
  +        { "2000-02-22 10:20:30 +0200", "2000-02-22 10:20:30 +0200", TAI_OP_LE, TAI_OK    }, /* 07 */
  +        { "2000-02-22 10:20:30 +0200", "2000-02-22 10:20:31 +0200", TAI_OP_LE, TAI_FALSE }, /* 08 */
  +        { "2000-02-22 10:20:30 +0200", "2000-02-22 10:20:31 +0200", TAI_OP_GT, TAI_OK    }, /* 09 */
  +        { "2000-02-22 10:20:30 +0200", "2000-02-22 10:20:30 +0200", TAI_OP_GT, TAI_FALSE }, /* 10 */
  +        { "2000-02-22 10:20:30 +0200", "2000-02-22 10:20:31 +0200", TAI_OP_GE, TAI_OK    }, /* 11 */
  +        { "2000-02-22 10:20:30 +0200", "2000-02-22 10:20:30 +0200", TAI_OP_GE, TAI_OK    }, /* 12 */
  +        { "2000-02-22 10:20:30 +0200", "2000-02-22 10:20:20 +0200", TAI_OP_GE, TAI_FALSE }, /* 13 */
  +        { NULL, NULL, 0, 0 }
  +    };
   
  -    ts_test_check(TS_CTX, "time formatting");
  -    tai_create(&tm);
  -    /* FIXME */
  -    tai_destroy(tm);
  +    tai_create(&tm1);
  +    tai_create(&tm2);
  +    ts_test_check(TS_CTX, "time comparing");
  +    for (i = 0; table[i].date1 != NULL; i++) {
  +        ts_test_log(TS_CTX, "date1=%s, date2=%s, op=%d", table[i].date1, table[i].date2, table[i].op);
  +        tai_parse(tm1, table[i].date1, strlen(table[i].date1), "%Y-%m-%d %H:%M:%S %z");
  +        tai_parse(tm2, table[i].date2, strlen(table[i].date2), "%Y-%m-%d %H:%M:%S %z");
  +        if ((rv = tai_op(tm1, table[i].op, tm2)) != table[i].exp)
  +            ts_test_fail(TS_CTX, "#%d: output \"%d\", expected \"%d\"", i, rv, table[i].exp);
  +    }
  +    tai_destroy(tm2);
  +    tai_destroy(tm1);
   }
   
   int main(int argc, char *argv[])
  @@ -143,7 +175,7 @@
       ts_suite_test(ts, test_object,       "object handling");
       ts_suite_test(ts, test_importexport, "time import/export");
       ts_suite_test(ts, test_parsing,      "time parsing");
  -    ts_suite_test(ts, test_formatting,   "time formatting");
  +    ts_suite_test(ts, test_comparing,    "time comparing");
       n = ts_suite_run(ts);
       ts_suite_free(ts);
       return n;

From ossp-cvs-owner@ossp.org  Wed May 29 12:21:34 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5B7EB76363; Wed, 29 May 2002 12:21:34 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_msg.c
Message-Id: <20020529102134.5B7EB76363@mail.ossp.org>
Date: Wed, 29 May 2002 12:21:34 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   29-May-2002 12:21:34
  Branch: HEAD                             Handle: 2002052911213300

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_msg.c

  Log:
    not setting free()d resources to 0/NULL caused segfaults

  Summary:
    Revision    Changes     Path
    1.27        +7  -7      ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 lmtp2nntp_msg.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	28 May 2002 14:17:23 -0000	1.26
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	29 May 2002 10:21:33 -0000	1.27
  @@ -488,16 +488,21 @@
               free(hdC->data.m[i]);
           }
           free (hdC->data.m);
  +        hdC->ndata = 0;
       } else
  -    if (hdC->ndata == 1)
  +    if (hdC->ndata == 1) {
           if (hdC->data.s != NULL)
               free(hdC->data.s);
  +        hdC->ndata = 0;
  +    }
   }
   
   static void headernamedestroy(headerdata_t *hdC)
   {
  -    if (hdC->name != NULL)
  +    if (hdC->name != NULL) {
           free(hdC->name);
  +        hdC->name = NULL;
  +    }
   }
   
   static void headerdestroy(headerdata_t *hdC)
  @@ -993,7 +998,6 @@
                               logbook(ctx->l2, L2_LEVEL_DEBUG, "marking deleted - emtpy headername");
                               headerdatadestroy(hdNew);
                               headernamedestroy(hdNew);
  -                            hdNew->ndata = 0;
                           }
                           else {
                               hdNew->name = res_ptr;
  @@ -1003,7 +1007,6 @@
                           logbook(ctx->l2, L2_LEVEL_DEBUG, "marking deleted - empty headervalue before expansion");
                           headerdatadestroy(hdNew);
                           headernamedestroy(hdNew);
  -                        hdNew->ndata = 0;
                       }
                       else {
                           /* expanding regex references into header value */
  @@ -1028,7 +1031,6 @@
                                   logbook(ctx->l2, L2_LEVEL_DEBUG, "marking deleted - empty headervalue after expansion");
                                   headerdatadestroy(hdNew);
                                   headernamedestroy(hdNew);
  -                                hdNew->ndata = 0;
                               }
                               else {
                                   hdNew->data.s = res_ptr;
  @@ -1051,7 +1053,6 @@
                   logbook(ctx->l2, L2_LEVEL_DEBUG, "marking deleted");
                   headerdatadestroy(hdNew);
                   headernamedestroy(hdNew);
  -                hdNew->ndata = 0;
               }
               else {
                   /* expanding variables into header value */
  @@ -1065,7 +1066,6 @@
                       logbook(ctx->l2, L2_LEVEL_DEBUG, "marking deleted - empty headervalue after expansion");
                       headerdatadestroy(hdNew);
                       headernamedestroy(hdNew);
  -                    hdNew->ndata = 0;
                   }
                   else {
                       headerdatadestroy(hdNew);

From ossp-cvs-owner@ossp.org  Wed May 29 14:24:49 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A6DFC76363; Wed, 29 May 2002 14:24:49 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_option.c
Message-Id: <20020529122449.A6DFC76363@mail.ossp.org>
Date: Wed, 29 May 2002 14:24:49 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   29-May-2002 14:24:49
  Branch: HEAD                             Handle: 2002052913244900

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_option.c

  Log:
    we need argc + new + terminating NULL to avoid segfaults

  Summary:
    Revision    Changes     Path
    1.19        +2  -2      ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 lmtp2nntp_option.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	18 Apr 2002 13:31:27 -0000	1.18
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	29 May 2002 12:24:49 -0000	1.19
  @@ -508,7 +508,7 @@
                                   cpNew[0]=NUL;
                                   strcat(cpNew, "--");
                                   strcat(cpNew, option);
  -                                if ((argv = (char **)realloc(argv, (argc + 1) * sizeof(char **))) == NULL)
  +                                if ((argv = (char **)realloc(argv, (argc + 1 + 1) * sizeof(char **))) == NULL)
                                       return OPTION_ERR_MEM;
                                   argv[argc++] = cpNew;
                                   argv[argc] = NULL;
  @@ -520,7 +520,7 @@
                                       //printf("DEBUG:     value = ***%s***\n", value);
                                       if ((cpNew = strdup(value)) == NULL)
                                           return OPTION_ERR_MEM;
  -                                    if ((argv = (char **)realloc(argv, (argc + 1) * sizeof(char **))) == NULL)
  +                                    if ((argv = (char **)realloc(argv, (argc + 1 + 1) * sizeof(char **))) == NULL)
                                           return OPTION_ERR_MEM;
                                       argv[argc++] = cpNew;
                                       argv[argc] = NULL;

From ossp-cvs-owner@ossp.org  Wed May 29 14:40:34 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E118276363; Wed, 29 May 2002 14:40:33 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp devtool.conf
Message-Id: <20020529124033.E118276363@mail.ossp.org>
Date: Wed, 29 May 2002 14:40:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   29-May-2002 14:40:33
  Branch: HEAD                             Handle: 2002052913403300

  Modified files:
    ossp-pkg/lmtp2nntp      devtool.conf

  Log:
    get rid of autom4te.cache in tarball

  Summary:
    Revision    Changes     Path
    1.9         +1  -1      ossp-pkg/lmtp2nntp/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/devtool.conf
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 devtool.conf
  --- ossp-pkg/lmtp2nntp/devtool.conf	18 Apr 2002 14:08:37 -0000	1.8
  +++ ossp-pkg/lmtp2nntp/devtool.conf	29 May 2002 12:40:33 -0000	1.9
  @@ -48,5 +48,5 @@
       ./shtool fixperm -v .
       V=`./shtool version -l c -d short lmtp2nntp_version.c`
       ./shtool tarball -o lmtp2nntp-${V}.tar.gz -d lmtp2nntp-${V} -u ossp -g ossp \
  -                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf,*.tar.gz,*.bak,00TODO' -c 'gzip --best' .
  +                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf,*.tar.gz,*.bak,00TODO,autom4te\.cache' -c 'gzip --best' .
   

From ossp-cvs-owner@ossp.org  Wed May 29 14:41:30 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 025A676363; Wed, 29 May 2002 14:41:29 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp README lmtp2nntp_version.c
Message-Id: <20020529124129.025A676363@mail.ossp.org>
Date: Wed, 29 May 2002 14:41:29 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   29-May-2002 14:41:29
  Branch: HEAD                             Handle: 2002052913412900

  Modified files:
    ossp-pkg/lmtp2nntp      README lmtp2nntp_version.c

  Log:
    bump version for release

  Summary:
    Revision    Changes     Path
    1.21        +1  -1      ossp-pkg/lmtp2nntp/README
    1.6         +9  -9      ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/README
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 README
  --- ossp-pkg/lmtp2nntp/README	25 Mar 2002 12:23:13 -0000	1.20
  +++ ossp-pkg/lmtp2nntp/README	29 May 2002 12:41:29 -0000	1.21
  @@ -7,7 +7,7 @@
                     |_|                        |_|    
   
     OSSP lmtp2nntp - Mail to News Gateway
  -  Version 1.2a4 (14-Mar-2002)
  +  Version 1.2a5 (29-May-2002)
   
     BEWARE! THIS IS ALPHA CODE
   
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 lmtp2nntp_version.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	25 Mar 2002 12:23:13 -0000	1.5
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	29 May 2002 12:41:29 -0000	1.6
  @@ -8,7 +8,7 @@
   #ifndef _LMTP2NNTP_VERSION_C_
   #define _LMTP2NNTP_VERSION_C_
   
  -#define LMTP2NNTP_VERSION 0x102004
  +#define LMTP2NNTP_VERSION 0x102005
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _LMTP2NNTP_VERSION_C_AS_HEADER_
   
   lmtp2nntp_version_t lmtp2nntp_version = {
  -    0x102004,
  -    "1.2a4",
  -    "1.2a4 (14-Mar-2002)",
  -    "This is OSSP lmtp2nntp, Version 1.2a4 (14-Mar-2002)",
  -    "OSSP lmtp2nntp 1.2a4 (14-Mar-2002)",
  -    "OSSP lmtp2nntp/1.2a4",
  -    "@(#)OSSP lmtp2nntp 1.2a4 (14-Mar-2002)",
  -    "$Id: lmtp2nntp_version.c,v 1.5 2002/03/25 12:23:13 thl Exp $"
  +    0x102005,
  +    "1.2a5",
  +    "1.2a5 (29-May-2002)",
  +    "This is OSSP lmtp2nntp, Version 1.2a5 (29-May-2002)",
  +    "OSSP lmtp2nntp 1.2a5 (29-May-2002)",
  +    "OSSP lmtp2nntp/1.2a5",
  +    "@(#)OSSP lmtp2nntp 1.2a5 (29-May-2002)",
  +    "$Id: lmtp2nntp_version.c,v 1.6 2002/05/29 12:41:29 thl Exp $"
   };
   
   #endif /* _LMTP2NNTP_VERSION_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Wed May 29 14:42:08 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B2849763AA; Wed, 29 May 2002 14:42:08 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.c rc_anal.c
Message-Id: <20020529124208.B2849763AA@mail.ossp.org>
Date: Wed, 29 May 2002 14:42:08 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   29-May-2002 14:42:08
  Branch: HEAD                             Handle: 2002052913420800

  Modified files:
    ossp-pkg/rc             rc.c rc_anal.c

  Log:
    Temporary debug segfault committal.

  Summary:
    Revision    Changes     Path
    1.30        +21 -5      ossp-pkg/rc/rc.c
    1.3         +34 -8      ossp-pkg/rc/rc_anal.c
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.c
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 rc.c
  --- ossp-pkg/rc/rc.c	22 May 2002 16:01:49 -0000	1.29
  +++ ossp-pkg/rc/rc.c	29 May 2002 12:42:08 -0000	1.30
  @@ -48,17 +48,33 @@
           configVerify();     /* Test for usage, help, and version options  */
   
           pAnal = analNew();  /* Construct a new configuration analyser     */
  +TRACE("BeforeAnalparse");
           analParse(pAnal);   /* Preprocess the analysed configuration      */
  +TRACE("AfterAnalparse");
       }
       ex_catch(Except) {      /* Exceptions during configuration and analysis */
  -        if ((rc_return_t)Except.ex_value == RC_ERR_USE)
  +TRACE("Hopla1");
  +        if ((rc_return_t)Except.ex_value == RC_ERR_USE) {
  +TRACE("Hopla2");
               clioptPrintusage();
  -        else
  +TRACE("Hopla3");
  +        }
  +        else {
  +TRACE("Hopla4");
               fprintf(stderr, "Class '%s' threw exception %d in %s:%s():%d.\n",\
                   (char *)Except.ex_class, (int)Except.ex_value,\
                   Except.ex_file, Except.ex_func, Except.ex_line);
  -        if (FAILED((rc_return_t)Except.ex_value)) /* NOP on warnings */
  +TRACE("Hopla5");
  +        }
  +TRACE("Hopla6");
  +        if (FAILED((rc_return_t)Except.ex_value)) { /* NOP on warnings */
  +TRACE("Hopla7");
               exit(1); /* Report failure and exit the program */
  +TRACE("Hopla8");
  +        }
  +        else {
  +TRACE("Hopla9");
  +        }
       }
   
       ex_try { /* Main script building and processing block */
  @@ -81,12 +97,12 @@
               exit(1); /* Report failure and exit the program */
       }
   
  -    ex_try {           /* Start shutdown of main program */
  +    ex_try {                /* Shutdown of main program  */
           analDelete(pAnal);  /* Destroy the analyser      */
           configDelete();     /* Destroy the configuration */
       }
       ex_catch(Except) { /* Error exceptions thrown during program shutdown */
  -        if (FAILED((rc_return_t)Except.ex_value)) {
  +        if (FAILED((rc_return_t)Except.ex_value)) { /* NOP on warnings */
               fprintf(stderr, "Class '%s' threw exception %d in %s:%s():%d.\n",\
                   (char *)Except.ex_class, (int)Except.ex_value,\
                   Except.ex_file, Except.ex_func, Except.ex_line);
  Index: ossp-pkg/rc/rc_anal.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 rc_anal.c
  --- ossp-pkg/rc/rc_anal.c	23 May 2002 18:03:20 -0000	1.2
  +++ ossp-pkg/rc/rc_anal.c	29 May 2002 12:42:08 -0000	1.3
  @@ -55,7 +55,8 @@
       if (!kszName)
           RC_THROW(RC_WRN_NUL);
       else { /* Only enter block with valid string, strdup can't handle NULL */
  -        (*ppInst)->m_szRcs = strdup(kszName);
  +(*ppInst)->m_szRcs = strdup("Hello");
  +/*        (*ppInst)->m_szRcs = strdup(kszName);*/
           TRACE((*ppInst)->m_szRcs);
       }
   
  @@ -68,13 +69,21 @@
   ************************************************/
   rc_return_t analTmp(rc_anal_t **ppInst, const char *kszName)
   {
  -    if (!kszName)
  +TRACE("In analTmp 1");
  +    if (!kszName) {
  +TRACE("In analTmp 2");
           RC_THROW(RC_WRN_NUL);
  +TRACE("In analTmp 2.5");
  +    }
       else { /* Only enter block with valid string, strdup can't handle NULL */
  +TRACE("In analTmp 3");
           (*ppInst)->m_szTmp = strdup("Hello");
  +TRACE("In analTmp 4");
           TRACE((*ppInst)->m_szTmp);
  +TRACE("In analTmp 5");
       }
   
  +TRACE("In analTmp 6");
       return(RC_THROW(RC_OK));
   }
   
  @@ -87,7 +96,8 @@
       if (!kszName)
           RC_THROW(RC_WRN_NUL);
       else { /* Only enter block with valid string, strdup can't handle NULL */
  -        (*ppInst)->m_szFuncs = strdup(kszName);
  +(*ppInst)->m_szFuncs = strdup("Hello");
  +/*        (*ppInst)->m_szFuncs = strdup(kszName);*/
           TRACE((*ppInst)->m_szFuncs);
       }
   
  @@ -100,13 +110,16 @@
   ************************************************/
   rc_return_t analLocs(rc_anal_t **ppInst, const char *kszPathexpr)
   {
  -    if (!kszPathexpr)
  -        RC_THROW(RC_WRN_NUL);
  -    else { /* Only enter block with valid string, strdup can't handle NULL */
  -        (*ppInst)->m_szLocs = strdup(kszPathexpr);
  +TRACE("analLocs1");
  +    if (kszPathexpr) { /* Strdup can't handle NULL */
  +TRACE("analLocs2");
  +(*ppInst)->m_szLocs = strdup("Hello");
  +/*        (*ppInst)->m_szLocs = strdup(kszPathexpr);*/
           TRACE((*ppInst)->m_szLocs);
  +TRACE("analLocs3");
       }
   
  +TRACE("analLocs4");
       return(RC_THROW(RC_OK));
   }
   
  @@ -118,8 +131,11 @@
   {
       ex_t Except;
   
  +#if 0
  +# FIXME Das ist very broken!
       if ((*ppInst)->m_pszSecs)   /* Warn on overwrites */
           RC_THROW(RC_WRN_OWR);
  +#endif
   
       ex_try {    /* Sections are a vector, so we must copy accordingly */
           (*ppInst)->m_pszSecs = vectorCopy(pkszVector);
  @@ -143,13 +159,19 @@
       assert(pInst); /* Verify sanity */
       ex_try { /* Read in data from the main configuration */
           analRcs  (&pInst, configGetrcfile());
  +TRACE("Alles wunderbar.0");
           analTmp  (&pInst, configGetval(RC_TMP_VAL));
  +TRACE("Alles wunderbar.1");
           analFuncs(&pInst, configGetval(RC_FNC_VAL));
  +TRACE("Alles wunderbar.nachFuncs");
           analLocs (&pInst, configGetval(RC_LOC_VAL));
  +TRACE("Alles wunderbar.nachLocs");
           analSecs (&pInst, configGetsecs());
  +TRACE("Alles wunderbar.2");
       }
       ex_catch(Except) {
  -        rethrow;
  +TRACE("En analParse Exception catch state!");
  +/*        rethrow;*/
       }
   
       return(RC_THROW(RC_OK));
  @@ -161,6 +183,8 @@
   ************************************************/
   rc_return_t analDelete(rc_anal_t *pInst)
   {
  +TRACE("Alles wunderbar.3delete");
  +#if 0
       if (pInst->m_szRcs)         /* Rc file names       */
           free(pInst->m_szRcs);
       if (pInst->m_szTmp)         /* Temp file name      */
  @@ -173,6 +197,8 @@
           vectorDel(pInst->m_pszSecs);
   
       free(pInst);
  +#endif
  +TRACE("Alles wunderbar.4delete");
   
       return(RC_THROW(RC_OK));
   }

From ossp-cvs-owner@ossp.org  Wed May 29 15:53:02 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E61EB76363; Wed, 29 May 2002 15:53:01 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 Makefile.in
Message-Id: <20020529135301.E61EB76363@mail.ossp.org>
Date: Wed, 29 May 2002 15:53:01 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-May-2002 15:53:01
  Branch: HEAD                             Handle: 2002052914530100

  Modified files:
    ossp-pkg/l2             Makefile.in

  Log:
    disable syslog test for now

  Summary:
    Revision    Changes     Path
    1.43        +1  -1      ossp-pkg/l2/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.42 -r1.43 Makefile.in
  --- ossp-pkg/l2/Makefile.in	3 Jan 2002 16:12:51 -0000	1.42
  +++ ossp-pkg/l2/Makefile.in	29 May 2002 13:53:01 -0000	1.43
  @@ -59,7 +59,7 @@
   TARGET       = $(TARGET_LIBS) $(TARGET_MANS) $(TARGET_PROGS)
   TARGET_LIBS  = libl2.la libl2syslog.la
   TARGET_MANS  = l2tool.1 l2-config.1 l2.3
  -TARGET_PROGS = l2tool l2_test l2_test_syslog
  +TARGET_PROGS = l2tool l2_test
   
   #   list of library object files
   OBJS = \

From ossp-cvs-owner@ossp.org  Wed May 29 23:35:52 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 920D276363; Wed, 29 May 2002 23:35:52 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_msg.c lmtp2nntp_msg.h
Message-Id: <20020529213552.920D276363@mail.ossp.org>
Date: Wed, 29 May 2002 23:35:52 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   29-May-2002 23:35:52
  Branch: HEAD                             Handle: 2002052922355200

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_msg.c lmtp2nntp_msg.h

  Log:
    remove lot of hardcoded header handling; user can now shoot himself in foot

  Summary:
    Revision    Changes     Path
    1.28        +37 -65     ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
    1.7         +1  -3      ossp-pkg/lmtp2nntp/lmtp2nntp_msg.h
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 lmtp2nntp_msg.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	29 May 2002 10:21:33 -0000	1.27
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	29 May 2002 21:35:52 -0000	1.28
  @@ -159,14 +159,12 @@
       free(msg->cpMsg);
       msg->cpMsg = NULL;
   
  -    logbook(msg->l2, L2_LEVEL_DEBUG, "replace envelope From w/o colon by X-F: pseudotag");
  +    logbook(msg->l2, L2_LEVEL_DEBUG, "replace envelope-from by -FE: pseudoheader");
       /* This eliminates the special case of having one header, which is really
        * an embedded envelope, not ending with a colon while all others do.
  -     * After splitting headers into name and value pairs this envelope ist
  -     * stripped off.
        */
       if (strncasecmp(cpHeaders, "From", 4) == 0)
  -        memcpy(cpHeaders, "X-F:", 4);
  +        memcpy(cpHeaders, "-EF:", 4);
   
       logbook(msg->l2, L2_LEVEL_DEBUG, "unwrap header lines");
       /* poor man's s///g simulator as current str library doesn't support global substitution */
  @@ -186,22 +184,11 @@
       }
   
       logbook(msg->l2, L2_LEVEL_DEBUG, "check for headers we care about and do whatever neccessary");
  -    msg->cpMsgid = NULL;
       msg->azNewsgroups = NULL;
       msg->asNewsgroups = 0;
       cp = msg->azHeaders;
       while (cp != NULL) {
  -        logbook(msg->l2, L2_LEVEL_DEBUG, "processing header \"%s\"", cp);
  -        if (strcasecmp("X-F:", cp) == 0) {
  -            argz_delete(&msg->azHeaders, &msg->asHeaders, cp);             /* del  name  */
  -            argz_delete(&msg->azHeaders, &msg->asHeaders, cp);             /* del  value */
  -            continue;
  -        }
  -        if (strcasecmp("Path:", cp) == 0) {
  -            argz_delete(&msg->azHeaders, &msg->asHeaders, cp);             /* del  name  */
  -            argz_delete(&msg->azHeaders, &msg->asHeaders, cp);             /* del  value */
  -            continue;
  -        }
  +        logbook(msg->l2, L2_LEVEL_DEBUG, "processing header \"%s\" in split", cp);
           if (strcasecmp("Received:", cp) == 0) {
               argz_delete(&msg->azHeaders, &msg->asHeaders, cp);             /* del  name  */
               if ((msg->cpFid == NULL) &&
  @@ -210,32 +197,13 @@
               argz_delete(&msg->azHeaders, &msg->asHeaders, cp);             /* del  value */
               continue;
           }
  -        if (strcasecmp("To:", cp) == 0) {
  -            argz_delete(&msg->azHeaders, &msg->asHeaders, cp);             /* del  name  */
  -            argz_delete(&msg->azHeaders, &msg->asHeaders, cp);             /* del  value */
  -            continue;
  -        }
  -        if (strcasecmp("Cc:", cp) == 0) {
  -            argz_delete(&msg->azHeaders, &msg->asHeaders, cp);             /* del  name  */
  -            argz_delete(&msg->azHeaders, &msg->asHeaders, cp);             /* del  value */
  -            continue;
  -        }
  -        if (strcasecmp("Message-ID:", cp) == 0) {
  -            if (msg->cpMsgid != NULL)
  -                return MSG_ERR_SPLITIDMULTI;
  -            argz_delete(&msg->azHeaders, &msg->asHeaders, cp);             /* del  name  */
  -            if ((cp == NULL) || (strlen(cp) == 0))                         /* get  value */
  -                return MSG_ERR_SPLITIDEMPTY;
  -            if ((msg->cpMsgid = strdup(cp)) == NULL)
  -                return MSG_ERR_MEM;
  -            argz_delete(&msg->azHeaders, &msg->asHeaders, cp);             /* del  value */
  -            continue;
  -        }
           if (strcasecmp("Newsgroups:", cp) == 0) {
  -            argz_delete(&msg->azHeaders, &msg->asHeaders, cp);             /* del  name  */
  +            if ((cp = argz_next(msg->azHeaders, msg->asHeaders, cp)) == NULL)  /* next value */
  +                break;
               if (argz_add(&msg->azNewsgroups, &msg->asNewsgroups, cp) != 0) /* get  value */
                   return MSG_ERR_MEM;
  -            argz_delete(&msg->azHeaders, &msg->asHeaders, cp);             /* del  value */
  +            if ((cp = argz_next(msg->azHeaders, msg->asHeaders, cp)) == NULL)  /* next value */
  +                break;
               continue;
           }
           if ((cp = argz_next(msg->azHeaders, msg->asHeaders, cp)) == NULL)  /* next value */
  @@ -244,10 +212,6 @@
               break;
       }
   
  -    logbook(msg->l2, L2_LEVEL_DEBUG, "checking Message-ID");
  -    if (msg->cpMsgid == NULL)
  -        return MSG_ERR_SPLITIDNONE;
  -
       logbook(msg->l2, L2_LEVEL_DEBUG, "checking Newsgroups");
       if (msg->azNewsgroups != NULL) {
           argz_stringify(msg->azNewsgroups, msg->asNewsgroups, ',');
  @@ -255,10 +219,6 @@
               return MSG_ERR_MEM;
       }
   
  -    logbook(msg->l2, L2_LEVEL_DEBUG, "adding mandatory Path: header");
  -    argz_add(&msg->azHeaders, &msg->asHeaders, "Path:");
  -    argz_add(&msg->azHeaders, &msg->asHeaders, "lmtp2nntp!not-for-mail");
  -
       logbook(msg->l2, L2_LEVEL_DEBUG, "split complete");
       return MSG_OK;
   }
  @@ -289,12 +249,31 @@
       argz_add(&msg->azHeaders, &msg->asHeaders, msg->azNewsgroups);
   
       logbook(msg->l2, L2_LEVEL_DEBUG, "verify Message-ID");
  +    cp = msg->azHeaders;
  +    while (cp != NULL) {
  +        logbook(msg->l2, L2_LEVEL_DEBUG, "processing header \"%s\" in join", cp);
  +        if (strcasecmp("Message-ID:", cp) == 0) {
  +            if (msg->cpMsgid != NULL)
  +                return MSG_ERR_JOINIDMULTI;
  +            if ((cp = argz_next(msg->azHeaders, msg->asHeaders, cp)) == NULL)  /* next value */
  +                break;
  +            if ((cp == NULL) || (strlen(cp) == 0))                             /* get  value */
  +                return MSG_ERR_JOINIDEMPTY;
  +            if ((msg->cpMsgid = strdup(cp)) == NULL)
  +                return MSG_ERR_MEM;
  +            if ((cp = argz_next(msg->azHeaders, msg->asHeaders, cp)) == NULL)  /* next value */
  +                break;
  +            continue;
  +        }
  +        if ((cp = argz_next(msg->azHeaders, msg->asHeaders, cp)) == NULL)      /* next value */
  +            break;
  +        if ((cp = argz_next(msg->azHeaders, msg->asHeaders, cp)) == NULL)      /* next name  */
  +            break;
  +    }
       if (msg->cpMsgid == NULL)
           return MSG_ERR_JOINIDNONE;
       if (strlen(msg->cpMsgid) == 0)
           return MSG_ERR_JOINIDEMPTY;
  -    argz_add(&msg->azHeaders, &msg->asHeaders, "Message-ID:");
  -    argz_add(&msg->azHeaders, &msg->asHeaders, msg->cpMsgid);
   
       logbook(msg->l2, L2_LEVEL_DEBUG, "merge name/value pairs into single string");
       argz_add(&msg->azHeaders, &msg->asHeaders, ""); /* append empty string */
  @@ -465,13 +444,11 @@
       else if (rc == MSG_ERR_SPLITHEADBODY    ) str = "MSG: split into header and body failed";
       else if (rc == MSG_ERR_SPLITLEN         ) str = "MSG: header is too short";
       else if (rc == MSG_ERR_SPLITMISSINGFROM ) str = "MSG: header is missing 'From ' envelope";
  -    else if (rc == MSG_ERR_SPLITIDNONE      ) str = "MSG: header is missing 'Message-ID'";
  -    else if (rc == MSG_ERR_SPLITIDEMPTY     ) str = "MSG: header has empty 'Message-ID'";
  -    else if (rc == MSG_ERR_SPLITIDMULTI     ) str = "MSG: header has multiple 'Message-ID's";
       else if (rc == MSG_ERR_JOINGROUPNONE    ) str = "MSG: join with no 'Newsgroup'";
       else if (rc == MSG_ERR_JOINGROUPEMPTY   ) str = "MSG: join with empty 'Newsgroup'";
       else if (rc == MSG_ERR_JOINIDNONE       ) str = "MSG: join with no 'Message-ID'";
       else if (rc == MSG_ERR_JOINIDEMPTY      ) str = "MSG: join with empty 'Message-ID'";
  +    else if (rc == MSG_ERR_JOINIDMULTI      ) str = "MSG: join with multiple 'Message-ID's";
       return str;
   }
   
  @@ -724,6 +701,13 @@
       int maxsize;
       char *format;
   
  +    if (nVal > 2 && cpVal[0] == '<' && cpVal[nVal-1] == '>') {
  +        *cppOut    = strdupex(cpVal);
  +        *pnOutsize = nVal;
  +        *pnOut     = nVal;
  +        return VAR_OK;
  +    }
  +
       if (val_get(prival, "msgcount", &msgcount) != VAL_OK)
           msgcount = 0;
   
  @@ -757,12 +741,6 @@
       else
           cp = strdupex("<>"); /* if format fails, do not end the wholly program abnormally */
   
  -    if (msg != NULL) {
  -        if (msg->cpMsgid != NULL)
  -            free(msg->cpMsgid);
  -        msg->cpMsgid = strdupex(cp);
  -    }
  -
       *cppOut    = strdupex(cp);
       *pnOutsize = strlen(cp) + 1;
       *pnOut     = strlen(cp);
  @@ -778,13 +756,7 @@
   {
       val_t *prival = _prival;
   
  -    if (val_ptr == NULL) {
  -        *out_ptr  = "";
  -        *out_len  = 0;
  -        *out_size = 0;
  -        return VAR_OK;
  -    }
  -    else if (op_len == 15 && strncmp(op_ptr, "createmessageid", 15) == 0) {
  +    if (op_len == 15 && strncmp(op_ptr, "createmessageid", 15) == 0) {
           return createmessageid(prival, arg_ptr, arg_len, val_ptr, val_len, out_ptr, out_len, out_size);
       }
       else if (op_len == 12 && strncmp(op_ptr, "canonifydate", 12) == 0) {
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.h
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 lmtp2nntp_msg.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.h	27 May 2002 15:09:50 -0000	1.6
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.h	29 May 2002 21:35:52 -0000	1.7
  @@ -72,13 +72,11 @@
       MSG_ERR_SPLITHEADBODY,
       MSG_ERR_SPLITLEN,
       MSG_ERR_SPLITMISSINGFROM,
  -    MSG_ERR_SPLITIDNONE,
  -    MSG_ERR_SPLITIDEMPTY,
  -    MSG_ERR_SPLITIDMULTI,
       MSG_ERR_JOINGROUPNONE,
       MSG_ERR_JOINGROUPEMPTY,
       MSG_ERR_JOINIDNONE,
       MSG_ERR_JOINIDEMPTY,
  +    MSG_ERR_JOINIDMULTI,
       MSG_ERR_ARG
   } msg_rc_t;
   

From ossp-cvs-owner@ossp.org  Thu May 30 00:24:28 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7829376363; Thu, 30 May 2002 00:24:28 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp README lmtp2nntp_version.c
Message-Id: <20020529222428.7829376363@mail.ossp.org>
Date: Thu, 30 May 2002 00:24:28 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   30-May-2002 00:24:28
  Branch: HEAD                             Handle: 2002052923242800

  Modified files:
    ossp-pkg/lmtp2nntp      README lmtp2nntp_version.c

  Log:
    bump version for release

  Summary:
    Revision    Changes     Path
    1.22        +1  -1      ossp-pkg/lmtp2nntp/README
    1.7         +5  -5      ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/README
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 README
  --- ossp-pkg/lmtp2nntp/README	29 May 2002 12:41:29 -0000	1.21
  +++ ossp-pkg/lmtp2nntp/README	29 May 2002 22:24:28 -0000	1.22
  @@ -7,7 +7,7 @@
                     |_|                        |_|    
   
     OSSP lmtp2nntp - Mail to News Gateway
  -  Version 1.2a5 (29-May-2002)
  +  Version 1.2a5 (30-May-2002)
   
     BEWARE! THIS IS ALPHA CODE
   
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 lmtp2nntp_version.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	29 May 2002 12:41:29 -0000	1.6
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	29 May 2002 22:24:28 -0000	1.7
  @@ -34,12 +34,12 @@
   lmtp2nntp_version_t lmtp2nntp_version = {
       0x102005,
       "1.2a5",
  -    "1.2a5 (29-May-2002)",
  -    "This is OSSP lmtp2nntp, Version 1.2a5 (29-May-2002)",
  -    "OSSP lmtp2nntp 1.2a5 (29-May-2002)",
  +    "1.2a5 (30-May-2002)",
  +    "This is OSSP lmtp2nntp, Version 1.2a5 (30-May-2002)",
  +    "OSSP lmtp2nntp 1.2a5 (30-May-2002)",
       "OSSP lmtp2nntp/1.2a5",
  -    "@(#)OSSP lmtp2nntp 1.2a5 (29-May-2002)",
  -    "$Id: lmtp2nntp_version.c,v 1.6 2002/05/29 12:41:29 thl Exp $"
  +    "@(#)OSSP lmtp2nntp 1.2a5 (30-May-2002)",
  +    "$Id: lmtp2nntp_version.c,v 1.7 2002/05/29 22:24:28 thl Exp $"
   };
   
   #endif /* _LMTP2NNTP_VERSION_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Mon Jun  3 09:05:03 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EB53976363; Mon,  3 Jun 2002 09:05:02 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/tool index.wml ossp-web/pkg/tool/lmtp2nntp in...
Message-Id: <20020603070502.EB53976363@mail.ossp.org>
Date: Mon,  3 Jun 2002 09:05:02 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   03-Jun-2002 09:05:02
  Branch: HEAD                             Handle: 2002060308050200

  Modified files:
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/lmtp2nntp
                            index.wml

  Log:
    release lmtp2nntp 1.2a5

  Summary:
    Revision    Changes     Path
    1.13        +1  -1      ossp-web/pkg/tool/index.wml
    1.7         +2  -2      ossp-web/pkg/tool/lmtp2nntp/index.wml
  ____________________________________________________________________________

  Index: ossp-web/pkg/tool/index.wml
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 index.wml
  --- ossp-web/pkg/tool/index.wml	26 Apr 2002 15:39:34 -0000	1.12
  +++ ossp-web/pkg/tool/index.wml	3 Jun 2002 07:05:02 -0000	1.13
  @@ -15,7 +15,7 @@
   		    done=100 stable="1.6.0" unstable=none>
     <pkg_item name="lmtp2nntp" longname="OSSP lmtp2nntp" type="tool"
               desc="Real-Time Mail to News Gateway"
  -            done=100 stable="1.1.1" unstable=1.2a4>
  +            done=100 stable="1.1.1" unstable=1.2a5>
     <pkg_item name="petidomo" longname="OSSP petidomo" type="tool" derived=yes
               desc="Mailing List Manager"
   	        done=95 stable="none" unstable="4.0b1">
  Index: ossp-web/pkg/tool/lmtp2nntp/index.wml
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 index.wml
  --- ossp-web/pkg/tool/lmtp2nntp/index.wml	14 Mar 2002 16:34:48 -0000	1.6
  +++ ossp-web/pkg/tool/lmtp2nntp/index.wml	3 Jun 2002 07:05:02 -0000	1.7
  @@ -31,7 +31,7 @@
   
   <pkg_status
       stable="1.1.1"   stable_date="13-Dec-2001"
  -    unstable="1.2a4" unstable_date="13-Mar-2002"
  +    unstable="1.2a5" unstable_date="30-May-2002"
   	done=100>
   
   <h2>Source</h2>
  @@ -39,5 +39,5 @@
   <pkg_files 
       url=$(FTP_ROOT_URL)/pkg/tool/lmtp2nntp/
       directory=$(FTP_ROOT_DIR)/pkg/tool/lmtp2nntp/
  -    files="lmtp2nntp-*.tar.gz" stable="lmtp2nntp-1.1.1.tar.gz" unstable="lmtp2nntp-1.2a4.tar.gz">
  +    files="lmtp2nntp-*.tar.gz" stable="lmtp2nntp-1.1.1.tar.gz" unstable="lmtp2nntp-1.2a5.tar.gz">
   

From ossp-cvs-owner@ossp.org  Mon Jun  3 09:05:23 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4FAB4763A1; Mon,  3 Jun 2002 09:05:23 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new news.txt
Message-Id: <20020603070523.4FAB4763A1@mail.ossp.org>
Date: Mon,  3 Jun 2002 09:05:23 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   03-Jun-2002 09:05:23
  Branch: HEAD                             Handle: 2002060308052200

  Modified files:
    ossp-web/new            news.txt

  Log:
    release lmtp2nntp 1.2a5

  Summary:
    Revision    Changes     Path
    1.11        +1  -0      ossp-web/new/news.txt
  ____________________________________________________________________________

  Index: ossp-web/new/news.txt
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 news.txt
  --- ossp-web/new/news.txt	5 Apr 2002 10:53:00 -0000	1.10
  +++ ossp-web/new/news.txt	3 Jun 2002 07:05:22 -0000	1.11
  @@ -1,3 +1,4 @@
  +30-May-2002: Released L<OSSP lmtp2nntp> 1.2a5
   01-Apr-2002: Released L<OSSP str> 0.9.7
   30-Mar-2002: Released L<OSSP ex> 1.0.0
   15-Mar-2002: Released L<OSSP val> 0.9.0

From ossp-cvs-owner@ossp.org  Wed Jun  5 18:24:21 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EA7E376364; Wed,  5 Jun 2002 18:24:20 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.c rc_anal.c
Message-Id: <20020605162420.EA7E376364@mail.ossp.org>
Date: Wed,  5 Jun 2002 18:24:20 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   05-Jun-2002 18:24:20
  Branch: HEAD                             Handle: 2002060517242000

  Modified files:
    ossp-pkg/rc             rc.c rc_anal.c

  Log:
    Found segfault bug to be a problem with ex_throw(3), so we go without error
    reporting during analysis for the moment.

  Summary:
    Revision    Changes     Path
    1.31        +1  -11     ossp-pkg/rc/rc.c
    1.4         +23 -43     ossp-pkg/rc/rc_anal.c
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.c
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 rc.c
  --- ossp-pkg/rc/rc.c	29 May 2002 12:42:08 -0000	1.30
  +++ ossp-pkg/rc/rc.c	5 Jun 2002 16:24:20 -0000	1.31
  @@ -48,32 +48,22 @@
           configVerify();     /* Test for usage, help, and version options  */
   
           pAnal = analNew();  /* Construct a new configuration analyser     */
  -TRACE("BeforeAnalparse");
           analParse(pAnal);   /* Preprocess the analysed configuration      */
  -TRACE("AfterAnalparse");
       }
       ex_catch(Except) {      /* Exceptions during configuration and analysis */
  -TRACE("Hopla1");
  +        TRACE("Hopla, in config and anal exception block");
           if ((rc_return_t)Except.ex_value == RC_ERR_USE) {
  -TRACE("Hopla2");
               clioptPrintusage();
  -TRACE("Hopla3");
           }
           else {
  -TRACE("Hopla4");
               fprintf(stderr, "Class '%s' threw exception %d in %s:%s():%d.\n",\
                   (char *)Except.ex_class, (int)Except.ex_value,\
                   Except.ex_file, Except.ex_func, Except.ex_line);
  -TRACE("Hopla5");
           }
  -TRACE("Hopla6");
           if (FAILED((rc_return_t)Except.ex_value)) { /* NOP on warnings */
  -TRACE("Hopla7");
               exit(1); /* Report failure and exit the program */
  -TRACE("Hopla8");
           }
           else {
  -TRACE("Hopla9");
           }
       }
   
  Index: ossp-pkg/rc/rc_anal.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 rc_anal.c
  --- ossp-pkg/rc/rc_anal.c	29 May 2002 12:42:08 -0000	1.3
  +++ ossp-pkg/rc/rc_anal.c	5 Jun 2002 16:24:20 -0000	1.4
  @@ -53,11 +53,11 @@
   rc_return_t analRcs(rc_anal_t **ppInst, const char *kszName)
   {
       if (!kszName)
  -        RC_THROW(RC_WRN_NUL);
  +        TRACE("Error codition, NULL passed as argument");
  +/* FIXME Das ist very broken!  */
  +/*        RC_THROW(RC_WRN_NUL);*/
       else { /* Only enter block with valid string, strdup can't handle NULL */
  -(*ppInst)->m_szRcs = strdup("Hello");
  -/*        (*ppInst)->m_szRcs = strdup(kszName);*/
  -        TRACE((*ppInst)->m_szRcs);
  +        (*ppInst)->m_szRcs = strdup(kszName);
       }
   
       return(RC_THROW(RC_OK));
  @@ -69,21 +69,15 @@
   ************************************************/
   rc_return_t analTmp(rc_anal_t **ppInst, const char *kszName)
   {
  -TRACE("In analTmp 1");
       if (!kszName) {
  -TRACE("In analTmp 2");
  -        RC_THROW(RC_WRN_NUL);
  -TRACE("In analTmp 2.5");
  +        TRACE("Error codition, NULL passed as argument");
  +/* FIXME Das ist very broken!  */
  +/*        RC_THROW(RC_WRN_NUL);*/
       }
       else { /* Only enter block with valid string, strdup can't handle NULL */
  -TRACE("In analTmp 3");
  -        (*ppInst)->m_szTmp = strdup("Hello");
  -TRACE("In analTmp 4");
  -        TRACE((*ppInst)->m_szTmp);
  -TRACE("In analTmp 5");
  +        (*ppInst)->m_szTmp = strdup(kszName);
       }
   
  -TRACE("In analTmp 6");
       return(RC_THROW(RC_OK));
   }
   
  @@ -94,11 +88,11 @@
   rc_return_t analFuncs(rc_anal_t **ppInst, const char *kszName)
   {
       if (!kszName)
  -        RC_THROW(RC_WRN_NUL);
  +        TRACE("Error codition, NULL passed as argument");
  +/* FIXME Das ist very broken!  */
  +/*        RC_THROW(RC_WRN_NUL);*/
       else { /* Only enter block with valid string, strdup can't handle NULL */
  -(*ppInst)->m_szFuncs = strdup("Hello");
  -/*        (*ppInst)->m_szFuncs = strdup(kszName);*/
  -        TRACE((*ppInst)->m_szFuncs);
  +        (*ppInst)->m_szFuncs = strdup(kszName);
       }
   
       return(RC_THROW(RC_OK));
  @@ -110,16 +104,14 @@
   ************************************************/
   rc_return_t analLocs(rc_anal_t **ppInst, const char *kszPathexpr)
   {
  -TRACE("analLocs1");
  -    if (kszPathexpr) { /* Strdup can't handle NULL */
  -TRACE("analLocs2");
  -(*ppInst)->m_szLocs = strdup("Hello");
  -/*        (*ppInst)->m_szLocs = strdup(kszPathexpr);*/
  -        TRACE((*ppInst)->m_szLocs);
  -TRACE("analLocs3");
  +    if (!kszPathexpr)
  +        TRACE("Error codition, NULL passed as argument");
  +/* FIXME Das ist very broken!  */
  +/*        RC_THROW(RC_WRN_NUL);*/
  +    else { /* Only enter block with valid string, strdup can't handle NULL */
  +        (*ppInst)->m_szLocs = strdup(kszPathexpr);
       }
   
  -TRACE("analLocs4");
       return(RC_THROW(RC_OK));
   }
   
  @@ -131,11 +123,10 @@
   {
       ex_t Except;
   
  -#if 0
  -# FIXME Das ist very broken!
  -    if ((*ppInst)->m_pszSecs)   /* Warn on overwrites */
  -        RC_THROW(RC_WRN_OWR);
  -#endif
  +    if (!pkszVector)
  +        TRACE("Error codition, NULL passed as argument");
  +/* FIXME Das ist very broken!  */
  +/*        RC_THROW(RC_WRN_NUL);*/
   
       ex_try {    /* Sections are a vector, so we must copy accordingly */
           (*ppInst)->m_pszSecs = vectorCopy(pkszVector);
  @@ -144,7 +135,6 @@
           rethrow;
       }
   
  -    TRACE("Variable pkszVector is not an ANSI string.");
       return(RC_THROW(RC_OK));
   }
   
  @@ -159,19 +149,13 @@
       assert(pInst); /* Verify sanity */
       ex_try { /* Read in data from the main configuration */
           analRcs  (&pInst, configGetrcfile());
  -TRACE("Alles wunderbar.0");
           analTmp  (&pInst, configGetval(RC_TMP_VAL));
  -TRACE("Alles wunderbar.1");
           analFuncs(&pInst, configGetval(RC_FNC_VAL));
  -TRACE("Alles wunderbar.nachFuncs");
           analLocs (&pInst, configGetval(RC_LOC_VAL));
  -TRACE("Alles wunderbar.nachLocs");
           analSecs (&pInst, configGetsecs());
  -TRACE("Alles wunderbar.2");
       }
       ex_catch(Except) {
  -TRACE("En analParse Exception catch state!");
  -/*        rethrow;*/
  +        rethrow;
       }
   
       return(RC_THROW(RC_OK));
  @@ -183,8 +167,6 @@
   ************************************************/
   rc_return_t analDelete(rc_anal_t *pInst)
   {
  -TRACE("Alles wunderbar.3delete");
  -#if 0
       if (pInst->m_szRcs)         /* Rc file names       */
           free(pInst->m_szRcs);
       if (pInst->m_szTmp)         /* Temp file name      */
  @@ -197,8 +179,6 @@
           vectorDel(pInst->m_pszSecs);
   
       free(pInst);
  -#endif
  -TRACE("Alles wunderbar.4delete");
   
       return(RC_THROW(RC_OK));
   }

From ossp-cvs-owner@ossp.org  Fri Jun 14 15:42:33 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E8DFB763A1; Fri, 14 Jun 2002 15:42:32 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea.cgi
Message-Id: <20020614134232.E8DFB763A1@mail.ossp.org>
Date: Fri, 14 Jun 2002 15:42:32 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   14-Jun-2002 15:42:32
  Branch: HEAD                             Handle: 2002061414423200

  Modified files:
    ossp-pkg/tabea          tabea.cgi

  Log:
    Appended chage password module

  Summary:
    Revision    Changes     Path
    1.27        +137 -2     ossp-pkg/tabea/tabea.cgi
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea.cgi
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 tabea.cgi
  --- ossp-pkg/tabea/tabea.cgi	17 May 2002 18:36:58 -0000	1.26
  +++ ossp-pkg/tabea/tabea.cgi	14 Jun 2002 13:42:32 -0000	1.27
  @@ -85,11 +85,14 @@
   my $dialog   = $cgi->param("dialog")   || "";
   my $username = $cgi->param("username") || "";
   my $password = $cgi->param("password") || "";
  +my $old_password = $cgi->param("old_password") || "";
  +my $new1_password = $cgi->param("new1_password") || "";
  +my $new2_password = $cgi->param("new2_password") || "";
   my $filename = $cgi->param("filename") || "";
   
   my $form = '';
   
  -for my $name (qw(mainw copyt view new copyc edit del run confr newf changer copy save)) {
  +for my $name (qw(mainw changepwd copyt view new copyc edit del run admin confr newf changer copy save)) {
       my $val = $cgi->param("dialog_$name") || "";
       if ($val ne '') {
           $form = $name;
  @@ -144,6 +147,13 @@
   elsif ($form eq 'run' ) {
       $page .= &run($cgi->param('configslist') );
   }
  +elsif ($form eq 'admin' ) {
  +    $page .= &admin($cgi->param('username') );
  +}
  +elsif ($form eq 'changepwd' ) {
  +    $page .= &changepwd($cgi->param('username') );
  +}
  +
   else {
       die "no correct dialog found";
   }
  @@ -263,7 +273,7 @@
       $cgi->scrolling_list(
           -name => 'configslist',
           -value => [@configsarray],
  -        -size => 10
  +        -size => 12
       ) .
       "   </td>" .
       "   <td>" .
  @@ -286,6 +296,9 @@
       "      <tr><td>" .
       $cgi->submit(-name => 'dialog_run', -value => 'Run') .
       "      </td></tr>" .
  +    "      <tr><td>" .
  +    $cgi->submit(-name => 'dialog_admin', -value => 'Admin') .
  +    "      </td></tr>" .
       "    </table>" .
       "  </td>" .
       "<td>" .
  @@ -745,6 +758,128 @@
       $text .= $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
   
       return $text;
  +}
  +########################################################################################
  +
  +
  +########################################################################################
  +sub admin {
  +########################################################################################
  +    my $user = @_;
  +    my $text;
  +
  +    $text .= &chpwd($user); 
  +
  +
  +    return $text;
  +}
  +########################################################################################
  +
  +
  +########################################################################################
  +sub chpwd {
  +########################################################################################
  +    my $user = @_;
  +    my $ctext;
  +
  +    $ctext .=
  +        "<table cellspacing=0 cellpadding=0>" .
  +        "  <tr>" .
  +        "    <td>Old Password:</td>" .
  +        "    <td>" .
  +        "<input type=\"password\" name=\"old_password\"  -value=\"$old_password\" size=\"20\" maxlength=\"80\" readonly/>".
  +#        $cgi->password_field(
  +#            -name => 'old_password',
  +#            -value => $old_password,
  +#            -size => 20,
  +#            -maxlength => 80
  +#        ) .
  +        "    </td>" .
  +        "  </tr>" . 
  +        "  <tr>" .
  +        "    <td>New Password:</td>" .
  +        "    <td>" .
  +        $cgi->password_field(
  +            -name => 'new1_password',
  +            -value => $new1_password,
  +            -size => 20,
  +            -maxlength => 80
  +        ) .
  +        "    </td>" .
  +        "  </tr>" . 
  +        "  </tr>" . 
  +        "  <tr>" .
  +        "    <td>Repeat Password:</td>" .
  +        "    <td>" .
  +        $cgi->password_field(
  +            -name => 'new2_password',
  +            -value => $new2_password,
  +            -size => 20,
  +            -maxlength => 80
  +        ) .
  +        "    </td>" .
  +        "  </tr>" . 
  +        "  <tr>" .
  +        "    <td colspan=2 align=right>" .
  +        $cgi->reset() .
  +        $cgi->submit(-name => 'dialog_mainw', -value => 'Back').
  +        $cgi->submit(-name => 'dialog_changepwd', -value => 'Change') .
  +        "    </td>" .
  +        "  </tr>" . 
  +        "</table>" ;
  +    
  +    return $ctext;
  +    
  +}
  +########################################################################################
  +
  +
  +########################################################################################
  +sub changepwd {
  +########################################################################################
  +    my ($user) = @_;
  +    my $cptext;
  +    my $valid;
  +    my $uname;
  +    my $pwd;
  +    my $pwdfp;
  +    my $pwdfile = $cfghash{'BaseDir'}.$cfghash{'PasswdFile'};
  +    my $pwfiletext;
  +    my @pwarray;
  +    my $akt_u_p;
  +
  +
  +    $valid = &validpassword($user, $old_password, $cfghash{'BaseDir'}.$cfghash{'PasswdFile'});
  +    if ( $user !~ $cfghash{'TabeaUser'}) { $valid = 1; }    
  +    if ( !$valid ) {
  +        $cptext .= "<font color=red>The password is incorrect.<br><br>\n". 
  +          $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
  +    } else {
  +        if ($new1_password eq $new2_password) {
  +            $pwdfp = IO::File->new("<$pwdfile");
  +            $pwfiletext .= $_ while (<$pwdfp>);
  +            @pwarray = split(/\s/, $pwfiletext);
  +            foreach (@pwarray) {
  +                $akt_u_p = $_;
  +                $akt_u_p =~ s|^(\w+):(.+)$|{$uname=$1; $pwd=$2}|eg;
  +                ( $uname =~ $user ) && do { $_ = $username .":". crypt($new1_password, $pwd); }
  +            }
  +            $pwdfp->close();     
  +            $pwfiletext = join("\n", @pwarray);            
  +            $pwdfp = IO::File->new(">$pwdfile");
  +            print $pwdfp $pwfiletext;
  +            $pwdfp->close();
  +            $form = 'mainw';
  +            if ( $user =~ $username) {$password=$new1_password;}
  +            goto NEXTFORM;
  +        } else {
  +          $cptext .= "<font color=red>The password you typed do not match. Type the same password. ".
  +            "in both boxes<br><br>\n".
  +            $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
  +        } 
  +    }
  +
  +    return $cptext;
   }
   ########################################################################################
   

From ossp-cvs-owner@ossp.org  Fri Jun 14 16:39:31 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AA1E8763A1; Fri, 14 Jun 2002 16:39:30 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea TODO
Message-Id: <20020614143930.AA1E8763A1@mail.ossp.org>
Date: Fri, 14 Jun 2002 16:39:30 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   14-Jun-2002 16:39:30
  Branch: HEAD                             Handle: 2002061415393000

  Modified files:
    ossp-pkg/tabea          TODO

  Log:
    remember a few things

  Summary:
    Revision    Changes     Path
    1.3         +5  -0      ossp-pkg/tabea/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/TODO
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 TODO
  --- ossp-pkg/tabea/TODO	10 May 2002 15:41:41 -0000	1.2
  +++ ossp-pkg/tabea/TODO	14 Jun 2002 14:39:30 -0000	1.3
  @@ -2,6 +2,11 @@
     TODO
     ====
   
  +  - [rse]: invalid login produces no error message on new dialog page
  +  - [rse]: "PageTemplate" in tabea.cfg still not used at all
  +  - [rse]: "PageStyleSheet" should be add to tabea.cfg for CSS1
  +  - [rse]: "LogFile" should be added to tabea.cfg for logging
  +
     Dialogs:
   
     1:

From ossp-cvs-owner@ossp.org  Fri Jun 14 16:53:09 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C846F763A1; Fri, 14 Jun 2002 16:53:08 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea.cgi
Message-Id: <20020614145308.C846F763A1@mail.ossp.org>
Date: Fri, 14 Jun 2002 16:53:08 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   14-Jun-2002 16:53:08
  Branch: HEAD                             Handle: 2002061415530800

  Modified files:
    ossp-pkg/tabea          tabea.cgi

  Log:
    Corrected wrong password checking

  Summary:
    Revision    Changes     Path
    1.28        +4  -1      ossp-pkg/tabea/tabea.cgi
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea.cgi
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 tabea.cgi
  --- ossp-pkg/tabea/tabea.cgi	14 Jun 2002 13:42:32 -0000	1.27
  +++ ossp-pkg/tabea/tabea.cgi	14 Jun 2002 14:53:08 -0000	1.28
  @@ -850,7 +850,9 @@
   
   
       $valid = &validpassword($user, $old_password, $cfghash{'BaseDir'}.$cfghash{'PasswdFile'});
  -    if ( $user !~ $cfghash{'TabeaUser'}) { $valid = 1; }    
  +    if ( $username =~ $cfghash{'TabeaUser'}) {
  +        if ( $user !~ $cfghash{'TabeaUser'}) { $valid = 0; }    
  +    }
       if ( !$valid ) {
           $cptext .= "<font color=red>The password is incorrect.<br><br>\n". 
             $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
  @@ -878,6 +880,7 @@
               $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
           } 
       }
  +    ENDE:
   
       return $cptext;
   }

From ossp-cvs-owner@ossp.org  Thu Jun 20 15:48:51 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3C66A763E4; Thu, 20 Jun 2002 15:48:51 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Message-Id: <20020620134851.3C66A763E4@mail.ossp.org>
Date: Thu, 20 Jun 2002 15:48:51 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: CVSROOT                          Date:   20-Jun-2002 15:48:51
  Branch: HEAD                             Handle: 2002062014485000

  Modified files:
    CVSROOT                 modules

  Log:
    Add uuidgen as module.

  Summary:
    Revision    Changes     Path
    1.56        +1  -0      CVSROOT/modules
  ____________________________________________________________________________

  Index: CVSROOT/modules
  ============================================================
  $ cvs diff -u -r1.55 -r1.56 modules
  --- CVSROOT/modules	25 Apr 2002 09:35:46 -0000	1.55
  +++ CVSROOT/modules	20 Jun 2002 13:48:50 -0000	1.56
  @@ -79,6 +79,7 @@
   ex              ossp-pkg/ex
   popt            ossp-pkg/popt
   tai             ossp-pkg/tai
  +uuidgen         ossp-pkg/uuidgen
   
   #   the OSSP applications
   eperl           ossp-pkg/eperl

From ossp-cvs-owner@ossp.org  Thu Jun 20 17:09:06 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 63A01763E1; Thu, 20 Jun 2002 17:09:06 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea.cgi
Message-Id: <20020620150906.63A01763E1@mail.ossp.org>
Date: Thu, 20 Jun 2002 17:09:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   20-Jun-2002 17:09:06
  Branch: HEAD                             Handle: 2002062016090500

  Modified files:
    ossp-pkg/tabea          tabea.cgi

  Log:
    Created logout section.
    Created newuser and deleteuser section (incomplete).

  Summary:
    Revision    Changes     Path
    1.29        +304 -54    ossp-pkg/tabea/tabea.cgi
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea.cgi
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 tabea.cgi
  --- ossp-pkg/tabea/tabea.cgi	14 Jun 2002 14:53:08 -0000	1.28
  +++ ossp-pkg/tabea/tabea.cgi	20 Jun 2002 15:09:05 -0000	1.29
  @@ -85,6 +85,7 @@
   my $dialog   = $cgi->param("dialog")   || "";
   my $username = $cgi->param("username") || "";
   my $password = $cgi->param("password") || "";
  +my $akt_user = $cgi->param("akt_user") || "";
   my $old_password = $cgi->param("old_password") || "";
   my $new1_password = $cgi->param("new1_password") || "";
   my $new2_password = $cgi->param("new2_password") || "";
  @@ -92,7 +93,8 @@
   
   my $form = '';
   
  -for my $name (qw(mainw changepwd copyt view new copyc edit del run admin confr newf changer copy save)) {
  +for my $name (qw(admin cfgedit changepwd changer chpwd confr copy copyc copyt del d2user duser \
  +                 edit logout mainw new newf newuser nuser run save view )) {
       my $val = $cgi->param("dialog_$name") || "";
       if ($val ne '') {
           $form = $name;
  @@ -148,10 +150,49 @@
       $page .= &run($cgi->param('configslist') );
   }
   elsif ($form eq 'admin' ) {
  -    $page .= &admin($cgi->param('username') );
  +    if ( $cgi->param('username') eq $cfghash{'TabeaUser'}) {
  +        $page .= &admin($cgi->param('username') );
  +    } else {
  +        $page .= &chpwd($cgi->param('username') );
  +    }
  +}
  +elsif ($form eq 'chpwd' ) {
  +    if ( $cgi->param('username') eq $cfghash{'TabeaUser'}) {
  +        $page .= &chpwd($cgi->param('akt_user') );
  +    } else {
  +        $page .= &chpwd($cgi->param('username') );
  +    }
   }
   elsif ($form eq 'changepwd' ) {
  -    $page .= &changepwd($cgi->param('username') );
  +    if ( $cgi->param('username') eq $cfghash{'TabeaUser'}) {
  +        $page .= &changepwd($cgi->param('akt_user') );
  +    } else {
  +        $page .= &changepwd($cgi->param('username') );
  +    }
  +}
  +elsif ($form eq 'nuser' ) {
  +   $page .= &nuser();
  +}
  +
  +elsif ($form eq 'newuser' ) {
  +   $page .= &newuser($cgi->param('akt_user'));
  +}
  +elsif ($form eq 'duser' ) {
  +    $page .= &duser($cgi->param('akt_user') )
  +}
  +
  +#elsif ($form eq 'duser' ) {
  +#    $page .= &duser($cgi->param('akt_user') )
  +#}
  +
  +elsif ($form eq 'cfgedit' ) {
  +#    $page .= &run($cgi->param('configslist') );
  +}
  +elsif ($form eq 'logout' ) {
  +    $cgi->param(-name => 'username', -value => "");
  +    $cgi->param(-name => 'password', -value => "");
  +    $form = '';
  +    goto  NEXTFORM;
   }
   
   else {
  @@ -159,6 +200,10 @@
   }
   
   $page .= $cgi->hidden(-name => 'password', -default => $password);
  +$page .= $cgi->hidden(-name => 'username', -default => $username);
  +
  +# A special for admin section and chpw for tabea
  +#$page .= $cgi->hidden(-name => 'akt_user', -default => $akt_user);
   $page .= $cgi->endform;
   
   my $out = $MY->{TEMPLATE};
  @@ -218,8 +263,15 @@
   ########################################################################################
       my $text = '';
   
  -    &validpassword($username, $password, $cfghash{'BaseDir'}.$cfghash{'PasswdFile'})
  -        || print STDOUT $cgi->redirect(-uri => $cgi->url(-full => 1), -type => "text/html");
  +  # &validpassword($username, $password, $cfghash{'BaseDir'}.$cfghash{'PasswdFile'})
  +  #      || print STDOUT $cgi->redirect(-uri => $cgi->url(-full => 1), -type => "text/html");
  +    
  +    if (! &validpassword($username, $password, $cfghash{'BaseDir'}.$cfghash{'PasswdFile'}) ) {
  +        $cgi->param(-name => 'username', -value => "");
  +        $cgi->param(-name => 'password', -value => "");
  +        $form = '';
  +        goto NEXTFORM;
  +    }
   
       my $templatesfiles = &get_name_files($cfghash{'BaseDir'} . $cfghash{'ConfigDir'}, $username, 4);
       my $configsfiles = &get_name_files($cfghash{'BaseDir'} . $cfghash{'ConfigDir'}, $username, 6);
  @@ -234,12 +286,21 @@
   
       $text .=
       # Begin with templates part
  +    "<br><br>" .
  +    "<table>" .
  +    "<tr>" .
  +    "<td>" .
       "<font size=+1>" .
  -    "<br> Active User: $username<br><br>\n" .
  +    "Active User: $username<br><br>\n" .
       "</font>" .
  +    "</td>" .
  +    "<td>" .
  +    $cgi->submit(-name => 'dialog_logout', -value => 'Logout') .
  +    "</td>" .
  +    "</tr>" .
  +    "</table>".
       "<table> <caption>Templates</caption>" .
       "  <td>" .
  -    "    <td>" .
       $cgi->scrolling_list(
           -name => 'templatelist',
           -value => [@templatesarray],
  @@ -302,7 +363,7 @@
       "    </table>" .
       "  </td>" .
       "<td>" .
  -    "</table>";
  +    "</table>" ;
   
       return $text;
   }
  @@ -340,6 +401,18 @@
   
   
   ########################################################################################
  +sub get_userlist {
  +########################################################################################
  +    my ($dirname) = @_;
  +    my $ulist = &readsubdir($dirname . "/");;
  +
  +    
  +    return $ulist;
  +}
  +########################################################################################
  +
  +
  +########################################################################################
   sub get_own_files {
   ########################################################################################
       my ($dirname, $user) = @_;
  @@ -542,7 +615,7 @@
           $text .= "<font size=+2>" .
                    "Changing rights of file:<br><br>";
   
  -        $namefile =~ m{^([a-zA-Z0-9!"£$%^&*()-_=+#~]+)/(.+)}sg;
  +        $namefile =~ m{^([a-zA-Z0-9!"£\$%^&*()-_=+#~]+)/(.+)}sg;
           if ($1 eq $username) {
               $text .= "<table>" .
               "<tr>" .
  @@ -765,10 +838,59 @@
   ########################################################################################
   sub admin {
   ########################################################################################
  -    my $user = @_;
  +    my ($user) = @_;
       my $text;
  +    my $userlist = &get_userlist($cfghash{'BaseDir'} . $cfghash{'ConfigDir'});
  +    my @userlistarray = split(/\s/, $userlist);
  +   
  +     
  +    $text .= "Username: $username; User: $user"; 
  +    $text .= "<table>" .
  +    "<td>".
  +    $cgi->popup_menu(
  +        -name => 'akt_user',
  +        -value => [@userlistarray],
  +#        -default=>'ps',
  +#        -default => 'ps',
  +        -default => $username,
  +#        -default => $cfghash{'TabeaUser'}
  +    ) .
  +    "</td>" .
  +    "<td>" .
  +
  +    "<table>" .
  +
  +    "<tr>" .
  +    "<td>" .
  +    $cgi->submit(-name => 'dialog_nuser', -value => 'New User').
  +    "</td>" .
  +    "</tr>" .
  +    "<tr>" .
  +    "<td>" .
  +    $cgi->submit(-name => 'dialog_duser', -value => 'Del User').
  +    "</td>" .
  +    "</tr>" .
  +
  +    "</table>" .
  +    
  +    "</td>" .
  +    "</table>" .
  +
  +    "<br><br>" .
  +    "<table>" .
  +    "<td>" .
  +    $cgi->submit(-name => 'dialog_cfgedit', -value => 'Edit Configuration') .
  +    "</td>" .
  +    "<td>" .
  +    $cgi->submit(-name => 'dialog_chpwd', -value => 'Change Password') .
  +    "</td>" .
  +
  +    "</table>" .
  +
  +
  +    "<br><br>" .
  +    $cgi->submit(-name => 'dialog_mainw', -value => 'Back') ;
   
  -    $text .= &chpwd($user); 
   
   
       return $text;
  @@ -779,54 +901,58 @@
   ########################################################################################
   sub chpwd {
   ########################################################################################
  -    my $user = @_;
  +    my ($user) = @_;
       my $ctext;
   
  -    $ctext .=
  -        "<table cellspacing=0 cellpadding=0>" .
  -        "  <tr>" .
  +    $ctext .= "<br>Aktueller User: $user<br>";
  +    $ctext .= "<table cellspacing=0 cellpadding=0>" ;
  +    if ( (($username eq $cfghash{'TabeaUser'}) && ($user eq $cfghash{'TabeaUser'}) )
  +           || ($username ne $cfghash{'TabeaUser'}) ) { 
  +    $ctext .= "  <tr>" .
           "    <td>Old Password:</td>" .
           "    <td>" .
  -        "<input type=\"password\" name=\"old_password\"  -value=\"$old_password\" size=\"20\" maxlength=\"80\" readonly/>".
  -#        $cgi->password_field(
  -#            -name => 'old_password',
  -#            -value => $old_password,
  -#            -size => 20,
  -#            -maxlength => 80
  -#        ) .
  -        "    </td>" .
  -        "  </tr>" . 
  -        "  <tr>" .
  -        "    <td>New Password:</td>" .
  -        "    <td>" .
  -        $cgi->password_field(
  -            -name => 'new1_password',
  -            -value => $new1_password,
  -            -size => 20,
  -            -maxlength => 80
  -        ) .
  -        "    </td>" .
  -        "  </tr>" . 
  -        "  </tr>" . 
  -        "  <tr>" .
  -        "    <td>Repeat Password:</td>" .
  -        "    <td>" .
           $cgi->password_field(
  -            -name => 'new2_password',
  -            -value => $new2_password,
  +            -name => 'old_password',
  +            -value => $old_password,
               -size => 20,
               -maxlength => 80
           ) .
           "    </td>" .
  -        "  </tr>" . 
  -        "  <tr>" .
  -        "    <td colspan=2 align=right>" .
  -        $cgi->reset() .
  -        $cgi->submit(-name => 'dialog_mainw', -value => 'Back').
  -        $cgi->submit(-name => 'dialog_changepwd', -value => 'Change') .
  -        "    </td>" .
  -        "  </tr>" . 
  -        "</table>" ;
  +        "  </tr>" ; 
  +    }
  +
  +
  +    $ctext .= "  <tr>" .
  +    "    <td>New Password:</td>" .
  +    "    <td>" .
  +    $cgi->password_field(
  +         -name => 'new1_password',
  +         -value => $new1_password,
  +         -size => 20,
  +         -maxlength => 80
  +    ) .
  +    "    </td>" .
  +    "  </tr>" . 
  +    "  </tr>" . 
  +    "  <tr>" .
  +    "    <td>Repeat Password:</td>" .
  +    "    <td>" .
  +    $cgi->password_field(
  +          -name => 'new2_password',
  +          -value => $new2_password,
  +          -size => 20,
  +          -maxlength => 80
  +    ) .
  +    "    </td>" .
  +    "  </tr>" . 
  +    "  <tr>" .
  +    "    <td colspan=2 align=right>" .
  +    $cgi->reset() .
  +    $cgi->submit(-name => 'dialog_mainw', -value => 'Back').
  +    $cgi->submit(-name => 'dialog_changepwd', -value => 'Change') .
  +    "    </td>" .
  +    "  </tr>" . 
  +    "</table>" ;
       
       return $ctext;
       
  @@ -850,12 +976,12 @@
   
   
       $valid = &validpassword($user, $old_password, $cfghash{'BaseDir'}.$cfghash{'PasswdFile'});
  -    if ( $username =~ $cfghash{'TabeaUser'}) {
  -        if ( $user !~ $cfghash{'TabeaUser'}) { $valid = 0; }    
  +    if ( ($username eq $cfghash{'TabeaUser'}) && ($user ne $cfghash{'TabeaUser'}) ) { 
  +        $valid = 1; 
       }
       if ( !$valid ) {
           $cptext .= "<font color=red>The password is incorrect.<br><br>\n". 
  -          $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
  +        $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
       } else {
           if ($new1_password eq $new2_password) {
               $pwdfp = IO::File->new("<$pwdfile");
  @@ -871,8 +997,8 @@
               $pwdfp = IO::File->new(">$pwdfile");
               print $pwdfp $pwfiletext;
               $pwdfp->close();
  -            $form = 'mainw';
               if ( $user =~ $username) {$password=$new1_password;}
  +            $form = 'mainw';
               goto NEXTFORM;
           } else {
             $cptext .= "<font color=red>The password you typed do not match. Type the same password. ".
  @@ -883,6 +1009,130 @@
       ENDE:
   
       return $cptext;
  +}
  +########################################################################################
  +
  +
  +########################################################################################
  +sub nuser {
  +########################################################################################
  +    my $text;
  +
  +    $text .= 
  +    "Akt User: $akt_user" .
  +    "<table cellspacing=0 cellpadding=0>" .
  +    "  <tr>" .
  +    "    <td>New User:</td>" .
  +    "    <td>" .
  +    $cgi->textfield(
  +        -name => 'akt_user',
  +        -default => "",
  +        -override => 1,
  +        -size => 20,
  +        -maxlength => 8
  +    ) .
  +    "    </td>" .
  +    "  </tr>" .
  +    "</table>" .
  +  
  +    "<br><br>" .
  + 
  +    "<table>" . 
  +
  +    "<td>" .
  +    $cgi->submit(-name => 'dialog_mainw', -value => 'Back').
  +    "</td>" .
  +    "<td>" .
  +    $cgi->submit(-name => 'dialog_newuser', -value => 'Write User').
  +    "</td>" .
  +
  +    "</table>" ;
  +    
  +    
  +    return $text;
  +}
  +########################################################################################
  +
  +
  +########################################################################################
  +sub newuser {
  +########################################################################################
  +    my ($nuser) = @_;
  +    my $ntext;
  +    my $pwfile = $cfghash{'BaseDir'}.$cfghash{'PasswdFile'};
  +    my $pwin;
  +    my $pwfiletext;
  +
  +    $ntext .= "Here is newuser $nuser<br>";
  +
  +    if ( $nuser !~ /^[A-Za-z0-9]+$/ ) {
  +        $nuser = "";
  +    }
  +
  +    if ( $nuser eq  "" ) {
  +        $ntext .= "<font color=red>" .
  +        "<br>Username wrong<br><br>" .
  +        "</font>" .
  +        $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
  +    } else {
  +        $ntext .= "Writing new user";
  +        $pwin = IO::File->new("<$pwfile");
  +        if(defined $pwin) {
  +            $pwfiletext .= $_ while <$pwin>;
  +
  +        }
  +        $pwin->close();    
  +        
  +
  +# Checken, ob User in pw
  +# Checken, ob Subdir gleichen Namens existiert
  +
  +# Unterverzeichnis anlegen
  +# PW Eintrag machen    
  +
  +    }
  +
  +    return $ntext;
  +}
  +########################################################################################
  +
  +########################################################################################
  +sub duser {
  +########################################################################################
  +    my ($duser) = @_;
  +    my $text;
  +
  +
  +    $text .= 
  +    
  +    "<table>" .
  +    "<td>" .
  +    "<font color=red>" . 
  +    "User to delete :" .
  +    "</font>" .
  +    "</td>".
  +
  +    "<td>" .
  +    "$duser" .
  +    "</td>" .
  +
  +    
  +    "</table>" .
  +    
  +    "<br><br>" .
  +
  +    "<table>" .
  +
  +    "<td>" .
  +    $cgi->submit(-name => 'dialog_mainw', -value => 'Back').
  +    "</td>" .
  +    "<td>" .
  +    $cgi->submit(-name => 'dialog_d2user', -value => 'Del User').
  +    "</td>" .
  +
  +    "</table>" ;
  +
  +    return $text;
   }
   ########################################################################################
   

From ossp-cvs-owner@ossp.org  Wed Jun 26 16:11:17 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 509D576491; Wed, 26 Jun 2002 16:11:17 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc 00TODO Makefile.in rc.c rc.h rc_anal.c rc_clio...
Message-Id: <20020626141117.509D576491@mail.ossp.org>
Date: Wed, 26 Jun 2002 16:11:17 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   26-Jun-2002 16:11:17
  Branch: HEAD                             Handle: 2002062615111600

  Added files:
    ossp-pkg/rc             rc_script.c
  Modified files:
    ossp-pkg/rc             00TODO Makefile.in rc.c rc.h rc_anal.c rc_cliopt.c
                            rc_config.c rc_const.h rc_opt.c rc_private.h
                            rc_proc.c rc_test.sh

  Log:
    Intermediate committal, lots of additions, compiles and works very limited.

  Summary:
    Revision    Changes     Path
    1.26        +3  -0      ossp-pkg/rc/00TODO
    1.29        +2  -2      ossp-pkg/rc/Makefile.in
    1.32        +14 -34     ossp-pkg/rc/rc.c
    1.29        +7  -0      ossp-pkg/rc/rc.h
    1.5         +20 -19     ossp-pkg/rc/rc_anal.c
    1.11        +9  -9      ossp-pkg/rc/rc_cliopt.c
    1.17        +28 -22     ossp-pkg/rc/rc_config.c
    1.7         +0  -3      ossp-pkg/rc/rc_const.h
    1.5         +2  -2      ossp-pkg/rc/rc_opt.c
    1.15        +7  -5      ossp-pkg/rc/rc_private.h
    1.4         +90 -3      ossp-pkg/rc/rc_proc.c
    1.1         +123 -0     ossp-pkg/rc/rc_script.c
    1.11        +18 -14     ossp-pkg/rc/rc_test.sh
  ____________________________________________________________________________

  Index: ossp-pkg/rc/00TODO
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 00TODO
  --- ossp-pkg/rc/00TODO	23 May 2002 18:03:20 -0000	1.25
  +++ ossp-pkg/rc/00TODO	26 Jun 2002 14:11:16 -0000	1.26
  @@ -38,6 +38,9 @@
     Correct assertion, sanity check, and if () checks according to one standard.
     Make variable naming standard m_pksz?, and correct throughout.
     Correct according to a method naming standard like <file>Method.
  +  Remove redundant method prototypes in main header file.
  +  Relocate rc_anal_t and other to approproate header files rc_anal.h.
  +  I think rc_anal is violating the singleton configuration.
   
   Detailed ;-) project plan
   -------------------------
  Index: ossp-pkg/rc/Makefile.in
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 Makefile.in
  --- ossp-pkg/rc/Makefile.in	28 May 2002 17:02:56 -0000	1.28
  +++ ossp-pkg/rc/Makefile.in	26 Jun 2002 14:11:16 -0000	1.29
  @@ -59,10 +59,10 @@
   TARGET_PROGS    = rc
   TARGET_MANS     = rc.1 rc-sample.5
   
  -SRCS            = rc.c rc_anal.c rc_config.c rc_cliopt.c \
  +SRCS            = rc.c rc_anal.c rc_script.c rc_config.c rc_cliopt.c \
                     rc_proc.c rc_version.c rc_pcre.c rc_util.c
   
  -OBJS            = rc.o rc_anal.o rc_config.o rc_cliopt.o \
  +OBJS            = rc.o rc_anal.o rc_script.o rc_config.o rc_cliopt.o \
                     rc_proc.o rc_version.o rc_pcre.o rc_util.o
   
   SUBDIRS         = @SUBDIR_EX@ @SUBDIR_POPT@
  Index: ossp-pkg/rc/rc.c
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 rc.c
  --- ossp-pkg/rc/rc.c	5 Jun 2002 16:24:20 -0000	1.31
  +++ ossp-pkg/rc/rc.c	26 Jun 2002 14:11:16 -0000	1.32
  @@ -39,19 +39,15 @@
   int main(int argc, char *argv[])
   {
       ex_t Except;
  -    rc_anal_t *pAnal = NULL;    /* Holds preprocessed configuration       */
   
  -    ex_try {                /* Configuration and abstract analysis block  */
  +    ex_try {                /* Configuration block                        */
           configNew();        /* Construct a new configuration              */
           configLoad(argc, (const char **)argv); /* Load cli, env, and conf */
           configDebug();      /* FIXME Remove FIXME */
           configVerify();     /* Test for usage, help, and version options  */
  -
  -        pAnal = analNew();  /* Construct a new configuration analyser     */
  -        analParse(pAnal);   /* Preprocess the analysed configuration      */
       }
  -    ex_catch(Except) {      /* Exceptions during configuration and analysis */
  -        TRACE("Hopla, in config and anal exception block");
  +    ex_catch(Except) {      /* Exceptions of the configuration block      */
  +        TRACE("Hopla, in config exception block");
           if ((rc_return_t)Except.ex_value == RC_ERR_USE) {
               clioptPrintusage();
           }
  @@ -60,44 +56,28 @@
                   (char *)Except.ex_class, (int)Except.ex_value,\
                   Except.ex_file, Except.ex_func, Except.ex_line);
           }
  -        if (FAILED((rc_return_t)Except.ex_value)) { /* NOP on warnings */
  -            exit(1); /* Report failure and exit the program */
  -        }
  -        else {
  -        }
  -    }
  -
  -    ex_try { /* Main script building and processing block */
  -/*        rc_script_t *pScript = NULL;*/
  -/*        rc_proc_t *pProc     = NULL;*/
  -
  -/*        pScript = scriptNew(pAnal);*/ /* Construct a new script           */
  -/*        scriptBuild(pScript);*/
  -
  -/*        pProc = procNew(pScript);*/   /* Construct a new processor        */
  -/*        procRun(pProc);*/             /* [Execute|Evaluate|Print] script  */
  -/*        procDelete(pProc);*/          /* Destroy the processor            */
  -/*        scriptDelete(pScript);*/      /* Destroy the script               */
  -    }
  -    ex_catch(Except) {  /* Error exceptions thrown during script processing */
  -        fprintf(stderr, "Class '%s' threw exception %d in %s:%s():%d.\n",\
  -            (char *)Except.ex_class, (int)Except.ex_value,\
  -            Except.ex_file, Except.ex_func, Except.ex_line);
           if (FAILED((rc_return_t)Except.ex_value)) /* NOP on warnings */
               exit(1); /* Report failure and exit the program */
       }
   
  -    ex_try {                /* Shutdown of main program  */
  -        analDelete(pAnal);  /* Destroy the analyser      */
  -        configDelete();     /* Destroy the configuration */
  +    ex_try { /* Main processing block, the script is built here */
  +        rc_proc_t *pProc = NULL;
  +        pProc = procNew();      /* Construct a new processor, build script  */
  +        procPopulate(pProc);    /* Populate with run commands               */
  +        procRun(pProc);         /* [Execute|Evaluate|Print] script          */
  +        procDelete(pProc);      /* Destroy the processor                    */
  +        configDelete();         /* Destroy the configuration                */
       }
  -    ex_catch(Except) { /* Error exceptions thrown during program shutdown */
  +    ex_catch(Except) {  /* Error exceptions thrown during script processing */
  +        TRACE("Also, exception dans le processor bloque");
           if (FAILED((rc_return_t)Except.ex_value)) { /* NOP on warnings */
               fprintf(stderr, "Class '%s' threw exception %d in %s:%s():%d.\n",\
                   (char *)Except.ex_class, (int)Except.ex_value,\
                   Except.ex_file, Except.ex_func, Except.ex_line);
               exit(1); /* Return failure */
           }
  +        else
  +            RC_NOP;  /* No operation on warnings */
       }
   
       exit(0);        /* Return success */
  Index: ossp-pkg/rc/rc.h
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 rc.h
  --- ossp-pkg/rc/rc.h	23 May 2002 18:03:20 -0000	1.28
  +++ ossp-pkg/rc/rc.h	26 Jun 2002 14:11:16 -0000	1.29
  @@ -104,6 +104,12 @@
   rc_return_t analSecs(rc_anal_t **, const char **);
   rc_return_t analParse(rc_anal_t *);
   
  +/* Script function prototypes */
  +rc_script_t *scriptNew(void);
  +rc_return_t scriptAppend(rc_script_t *, char *, size_t);
  +rc_return_t scriptDump(rc_script_t *);
  +rc_return_t scriptDelete(rc_script_t *);
  +
   /* Processor function prototypes */
   rc_proc_t *procNew(void);
   rc_return_t procDelete(rc_proc_t *);
  @@ -112,6 +118,7 @@
   rc_return_t procReadrc(rc_proc_t *, const char *);
   rc_return_t procSection(rc_proc_t *, const char *);
   rc_return_t procParse(rc_proc_t *);
  +rc_return_t procPopulate(rc_proc_t *);
   rc_return_t procRun(rc_proc_t *);
   
   /* Utility (nonbounded) function prototypes */
  Index: ossp-pkg/rc/rc_anal.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 rc_anal.c
  --- ossp-pkg/rc/rc_anal.c	5 Jun 2002 16:24:20 -0000	1.4
  +++ ossp-pkg/rc/rc_anal.c	26 Jun 2002 14:11:16 -0000	1.5
  @@ -42,7 +42,8 @@
   {
       rc_anal_t *pNew = NULL;
   
  -    pNew = malloc(sizeof(rc_anal_t));
  +    /* Allocate storage for 1 anal object */
  +    pNew = calloc(1, sizeof(rc_anal_t));
       return(pNew);
   }
   
  @@ -52,10 +53,10 @@
   ************************************************/
   rc_return_t analRcs(rc_anal_t **ppInst, const char *kszName)
   {
  -    if (!kszName)
  -        TRACE("Error codition, NULL passed as argument");
  -/* FIXME Das ist very broken!  */
  +    if (!kszName) {
  +        (*ppInst)->m_szRcs = NULL;
   /*        RC_THROW(RC_WRN_NUL);*/
  +    }
       else { /* Only enter block with valid string, strdup can't handle NULL */
           (*ppInst)->m_szRcs = strdup(kszName);
       }
  @@ -65,13 +66,12 @@
   
   /************************************************
   * private analTmp(rc_anal_t **, const char *)   *
  -* Read a temp file to use for analysis          *
  +* Read a temp file to analyze                   *
   ************************************************/
   rc_return_t analTmp(rc_anal_t **ppInst, const char *kszName)
   {
       if (!kszName) {
  -        TRACE("Error codition, NULL passed as argument");
  -/* FIXME Das ist very broken!  */
  +        (*ppInst)->m_szTmp = NULL;
   /*        RC_THROW(RC_WRN_NUL);*/
       }
       else { /* Only enter block with valid string, strdup can't handle NULL */
  @@ -87,10 +87,10 @@
   ************************************************/
   rc_return_t analFuncs(rc_anal_t **ppInst, const char *kszName)
   {
  -    if (!kszName)
  -        TRACE("Error codition, NULL passed as argument");
  -/* FIXME Das ist very broken!  */
  +    if (!kszName) {
  +        (*ppInst)->m_szFuncs = NULL;
   /*        RC_THROW(RC_WRN_NUL);*/
  +    }
       else { /* Only enter block with valid string, strdup can't handle NULL */
           (*ppInst)->m_szFuncs = strdup(kszName);
       }
  @@ -104,10 +104,10 @@
   ************************************************/
   rc_return_t analLocs(rc_anal_t **ppInst, const char *kszPathexpr)
   {
  -    if (!kszPathexpr)
  -        TRACE("Error codition, NULL passed as argument");
  -/* FIXME Das ist very broken!  */
  +    if (!kszPathexpr) {
  +        (*ppInst)->m_szLocs = NULL;
   /*        RC_THROW(RC_WRN_NUL);*/
  +    }
       else { /* Only enter block with valid string, strdup can't handle NULL */
           (*ppInst)->m_szLocs = strdup(kszPathexpr);
       }
  @@ -123,16 +123,16 @@
   {
       ex_t Except;
   
  -    if (!pkszVector)
  -        TRACE("Error codition, NULL passed as argument");
  -/* FIXME Das ist very broken!  */
  -/*        RC_THROW(RC_WRN_NUL);*/
  +    if (!pkszVector) {
  +        RC_THROW(RC_WRN_NUL);
  +    }
   
       ex_try {    /* Sections are a vector, so we must copy accordingly */
           (*ppInst)->m_pszSecs = vectorCopy(pkszVector);
       }
       ex_catch(Except) {
  -        rethrow;
  +TRACE("VectorCopy broke");
  +/*        rethrow;*/
       }
   
       return(RC_THROW(RC_OK));
  @@ -155,7 +155,8 @@
           analSecs (&pInst, configGetsecs());
       }
       ex_catch(Except) {
  -        rethrow;
  +TRACE("Parsing broke");
  +/*        rethrow;*/
       }
   
       return(RC_THROW(RC_OK));
  Index: ossp-pkg/rc/rc_cliopt.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 rc_cliopt.c
  --- ossp-pkg/rc/rc_cliopt.c	23 May 2002 18:03:20 -0000	1.10
  +++ ossp-pkg/rc/rc_cliopt.c	26 Jun 2002 14:11:16 -0000	1.11
  @@ -41,7 +41,7 @@
   static popt_context m_Optcon;                  /* Context for parsing options */
   
   static struct popt_option m_pOptable[] = {
  -    /* Long options with short keys but no arguments */
  +    /* Long options are defined as short keys but no arguments */
       {RC_USE_NAME, '?', POPT_ARG_NONE, 0, RC_USE_VAL, RC_USE_DESC, NULL},
       {RC_DBG_NAME, 'd', POPT_ARG_NONE, 0, RC_DBG_VAL, RC_DBG_DESC, NULL},
       {RC_VER_NAME, 'V', POPT_ARG_NONE, 0, RC_VER_VAL, RC_VER_DESC, NULL},
  @@ -174,10 +174,10 @@
       if (m_pszSecs)              /* Warn on overwrites */
           RC_THROW(RC_WRN_OWR);
   
  -    ex_try {
  +    try {
           m_pszSecs = vectorCopy(pkszSecs);
       }
  -    ex_catch(Except) {
  +    catch(Except) {
           rethrow;
       }
   
  @@ -282,10 +282,10 @@
   
       /* Now do options processing */
       while ((cliOpt = popt_getnextopt(m_Optcon)) >= 0) {/* Loop, each time     */
  -        ex_try {                                       /* eating a new option */
  +        try {                                          /* eating a new option */
               clioptProcess(cliOpt, popt_getoptarg(m_Optcon));
           }
  -        ex_catch(Except) { /* Error condition probably deserves attention */
  +        catch(Except) { /* Error condition probably deserves attention */
               rethrow;
           }
       }
  @@ -310,11 +310,11 @@
       ex_t Except;
   
       /* Use popt as a transport to read the user specified rcfile and sections */
  -    ex_try {
  +    try {
           clioptSetrcfile(popt_getarg(m_Optcon));
           clioptSetsecs(popt_getargs(m_Optcon));
       }
  -    ex_catch(Except) {
  +    catch(Except) {
           rethrow; /* Our generic response */
       }
   
  @@ -331,14 +331,14 @@
   /*    ex_t Except;
   
       assert(s_pBintab);*/                /* Error if not constructed */
  -/*    ex_try {
  +/*    try {
           clioptRemall();*/             /* Removes ALL list nodes   */
   /*FIXME        optDelete((rc_opt_t **)&s_pBintab->pOptlist->pvData);FIXME*/
   /*        free(s_pBintab->pOptlist);*/    /* Deallocate option list   */
   /*        free(s_pBintab);*/              /* Deallocate cliopt and    */
   /*        s_pBintab = NULL;*/             /* clear its reference      */
   /*    }
  -    ex_catch(Except) {
  +    catch(Except) {
           rethrow;
       }*/
   
  Index: ossp-pkg/rc/rc_config.c
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 rc_config.c
  --- ossp-pkg/rc/rc_config.c	22 May 2002 13:29:40 -0000	1.16
  +++ ossp-pkg/rc/rc_config.c	26 Jun 2002 14:11:16 -0000	1.17
  @@ -48,16 +48,22 @@
   void configDebug(void)
   {
       int i = 0;
  +    ex_t Except;
       char **szTemp = NULL;
   
  -    fprintf(stderr, "Run command file: %s\n", configGetrcfile());
  +    try {
  +        fprintf(stderr, "Run command file: %s\n", configGetrcfile());
   
  -    szTemp = (char **)configGetsecs();
  -    fprintf(stderr, "Sections:");
  -    while (szTemp[i])
  -        fprintf(stderr, " %s", szTemp[i++]);
  +        szTemp = (char **)configGetsecs();
  +        fprintf(stderr, "Sections:");
  +        while (szTemp[i])
  +            fprintf(stderr, " %s", szTemp[i++]);
   
  -    fprintf(stderr, "\n%s", configSummarize());
  +        fprintf(stderr, "\n%s", configSummarize());
  +    }
  +    catch(Except) {
  +        rethrow;
  +    }
   }
   
   /***************************************
  @@ -69,10 +75,10 @@
       ex_t Except;
   
       if (m_nLocks == 0) {                    /* If we don't have one yet */
  -        ex_try {                            /* then construct a new one */
  +        try {                               /* then construct a new one */
               clioptNew();                    /* Member cliopt instance   */
           }
  -        ex_catch(Except) {
  +        catch(Except) {
               rethrow;
           }
       }
  @@ -91,7 +97,7 @@
       char *szTemp = NULL;
   
       if (m_nLocks) {                         /* Make sure config exists      */
  -        ex_try {
  +        try {
               if ((szTemp = (char *)clioptGetval(Optname)))
                   return((const char *)szTemp);
   /*            else if (szTemp = envoptGetval(Optname))
  @@ -101,7 +107,7 @@
               else
                   return(NULL);               /* Special case when not found  */
           }
  -        ex_catch(Except) {
  +        catch(Except) {
               rethrow;
           }
       }
  @@ -138,14 +144,14 @@
       ex_t Except;
   
       if (m_nLocks) {                     /* Make sure config exists   */
  -        ex_try {
  +        try {
               /* Because (1) only one rc file can be specified and     */
               /*         (2) it must be specified on the command line, */
               /* we don't bother checking the environment or conf file */
               /* contrary to the behaviour of Getval earlier           */
               return(clioptGetrcfile());
           }
  -        ex_catch(Except) {
  +        catch(Except) {
               rethrow;
           }
       }
  @@ -161,10 +167,10 @@
       ex_t Except;
   
       if (m_nLocks) {                             /* Make sure config exists   */
  -        ex_try {                                /* FIXME Might need to check */
  +        try {                                   /* FIXME Might need to check */
               return(clioptGetsecs());            /* FIXME env, conf, configs  */
           }
  -        ex_catch(Except) {
  +        catch(Except) {
               rethrow;
           }
       }
  @@ -188,7 +194,7 @@
       m_szSummary = malloc(NULL);
       for (i = 0; i < RC_NUMOPTS; i++)
       {
  -        ex_try {    /* FIXME Not threadsafe, wrap with crit section */
  +        try { /* FIXME Not threadsafe, wrap with crit section */
               if (configGetval(i) == NULL); /* NOP */
               else if (!(strcmp(configGetval(i), "1"))) {
                   szTemp = malloc(strlen(m_szSummary) + strlen(configGetval(i)));
  @@ -213,7 +219,7 @@
                   m_szSummary = szTemp;
               }
           }               /* FIXME Not threadsafe, wrap with crit section */
  -        ex_catch(Except) {  /* Breaks the otherwise endless loop above  */
  +        catch(Except) {     /* Breaks the otherwise endless loop above  */
               rethrow;
           }
       }
  @@ -229,13 +235,13 @@
   {
       ex_t Except;
   
  -    ex_try {    /* Parse option groups in order of priority          */
  +    try {       /* Parse option groups in order of priority          */
           clioptParseopts(nTotal, szArgvec);  /* Command line options  */
           clioptParseargs();                  /* Command line args */
   /*        envoptParse(m_nLocks->pOpt);*/    /* Environment options   */
   /*        cnfoptParse(m_nLocks->pOpt);*/    /* Configfile options    */
       }
  -    ex_catch(Except) {
  +    catch(Except) {
           rethrow;
       }
   
  @@ -250,7 +256,7 @@
   {
       ex_t Except;
   
  -    ex_try { /* Basic checks of version, usage, and help options */
  +    try { /* Basic checks of version, usage, and help options */
           if (configGetval(RC_VER_VAL))
               fprintf(stdout, "OSSP rc %s\n", RC_VERSION);
           if (configGetval(RC_USE_VAL))
  @@ -258,7 +264,7 @@
           if (configGetval(RC_HLP_VAL))
               clioptPrintusage(); /* FIXME Replace with real help FIXME */
       }
  -    ex_catch(Except) {
  +    catch(Except) {
           rethrow;
       }
   
  @@ -274,12 +280,12 @@
       ex_t Except;
   
       if (--m_nLocks == 0) {          /* If m_nLocks is 0, deallocate */
  -        ex_try {                    /* FIXME, not thread-safe       */
  +        try {                       /* FIXME, not thread-safe       */
               clioptDelete();
               if (m_szSummary)
                   free(m_szSummary);
           }
  -        ex_catch(Except) {
  +        catch(Except) {
               rethrow;
           }
       }
  Index: ossp-pkg/rc/rc_const.h
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 rc_const.h
  --- ossp-pkg/rc/rc_const.h	22 May 2002 13:29:40 -0000	1.6
  +++ ossp-pkg/rc/rc_const.h	26 Jun 2002 14:11:16 -0000	1.7
  @@ -110,7 +110,4 @@
   
   #define RC_CONF_WILD  "all"
   
  -/* FIXME Tie to shtool generation */
  -#define RC_VERSION    "77.77"
  -
   #endif /* __OSSPRC_CONST_H__ */
  Index: ossp-pkg/rc/rc_opt.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 rc_opt.c
  --- ossp-pkg/rc/rc_opt.c	24 Apr 2002 16:47:07 -0000	1.4
  +++ ossp-pkg/rc/rc_opt.c	26 Jun 2002 14:11:16 -0000	1.5
  @@ -107,7 +107,7 @@
       ex_t Except;
   
       assert(*ppOption);                  /* Error if not constructed */
  -    ex_try {
  +    try {
           if ((*ppOption)->szName)        /* Might not be mallocd yet */
               free((*ppOption)->szName);
           if ((*ppOption)->szVal)         /* Might not be mallocd yet */
  @@ -115,7 +115,7 @@
           free(*ppOption);                /* Deallocate option and    */
           *ppOption = NULL;               /* clear its reference      */
       }
  -    ex_catch(Except) {
  +    catch(Except) {
           rethrow;
       }
   
  Index: ossp-pkg/rc/rc_private.h
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 rc_private.h
  --- ossp-pkg/rc/rc_private.h	23 May 2002 18:03:20 -0000	1.14
  +++ ossp-pkg/rc/rc_private.h	26 Jun 2002 14:11:16 -0000	1.15
  @@ -46,8 +46,12 @@
   #endif
   
   
  +/* FIXME Tie to shtool generation */
  +#define RC_VERSION    "77.77"
  +
  +#define RC_READ_BUFSIZE 1024
   #define RC_STR_ID "OSSP rc"                         /* APPID for OSSP rc */
  -#define RC_UID_ID f8a1845c55e6449481176f6e9cea34b   /* UUID for OSSP rc */
  +#define RC_UID_ID 0xf8a1845c55e6449481176f6e9cea34b /* UUID for OSSP rc  */
   
   /* Intentional no operation */
   #define RC_NOP ((void)0)
  @@ -75,13 +79,11 @@
   } rc_anal_t;
   
   /* Script type */
  -typedef struct {
  -    rc_anal_t *m_pAnal;
  -    char *m_szText;
  -} rc_script_t;
  +typedef char * rc_script_t;
   
   /* Processor class */
   typedef struct {
  +    rc_anal_t *m_pAnal;
       rc_script_t *m_pScript;
   } rc_proc_t;
   
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	22 May 2002 14:32:20 -0000	1.3
  +++ ossp-pkg/rc/rc_proc.c	26 Jun 2002 14:11:16 -0000	1.4
  @@ -27,9 +27,15 @@
   **  rc_proc.c: Run-command processor ISO C source file
   */
   
  -#include <stdlib.h>
  +#include <stdlib.h>     /* Standard system headers  */
  +#include <fcntl.h>      /* For reading rc files     */
  +#include <unistd.h>     /* For reading rc files     */
  +#include <string.h>     /* For string manipulation  */
   
  -#include "rc.h"     /* Public interfaces */
  +/* FIXME: Remove */
  +#include <sys/stat.h>
  +
  +#include "rc.h"         /* Public interfaces        */
   
   
   /************************************************
  @@ -41,6 +47,10 @@
       rc_proc_t *pNewrc = NULL;
   
       pNewrc = malloc(sizeof(rc_proc_t));
  +    pNewrc->m_pAnal = analNew();        /* Construct a configuration analyser */
  +    pNewrc->m_pScript = scriptNew();    /* Construct a run-command script     */
  +    analParse(pNewrc->m_pAnal);         /* Preprocess the anal configuration  */
  +
       return(pNewrc);
   }
   
  @@ -56,12 +66,89 @@
   }
   
   /************************************************
  +* procPopulate(rc_proc_t *)                     *
  +* Populate the processor with run commands      *
  +************************************************/
  +rc_return_t procPopulate(rc_proc_t *pRc)
  +{
  +    int nFdrc     = 0;
  +    int nFdfunc   = 0;
  +    int nRet      = 0;
  +    char *szBuf   = NULL;
  +
  +    char *szFucka = NULL;
  +
  +    /* FIXME: Do not hardcode location or prefix! */
  +    szFucka = (char *)malloc(strlen(pRc->m_pAnal->m_szRcs) + 8);
  +    strcpy(szFucka, "rcfiles/rc.");
  +    strcat(szFucka, pRc->m_pAnal->m_szRcs);
  +
  +    szBuf = (char *)calloc(0, RC_READ_BUFSIZE);
  +
  +    /* Open the rc file unconditionally */
  +    if ((nFdrc = open(szFucka, O_RDONLY)) == -1) {
  +/*        RC_THROW(RC_ERR_IO);*/
  +        TRACE("Problem with procPopulate open(2)");
  +    }
  +
  +    /* Open the func file if it belongs to the configuration */
  +    if (pRc->m_pAnal->m_szFuncs) {
  +        if ((nFdfunc = open(pRc->m_pAnal->m_szFuncs, O_RDONLY)) == -1) {
  +    /*        RC_THROW(RC_ERR_IO);*/
  +        TRACE("Problem with procPopulate open(2)");
  +        }
  +        /* Read data from the func file */
  +        while ((nRet = read(nFdfunc, szBuf, RC_READ_BUFSIZE)) > 0)
  +            scriptAppend(pRc->m_pScript, szBuf, nRet);
  +        if (nRet == -1) /* Handle read errors */
  +            TRACE("Problem with procPopulate read(2)");
  +    /*        RC_THROW(RC_ERR_IO);*/
  +    }
  +
  +    /* Read data from the rc file */
  +    while ((nRet = read(nFdrc, szBuf, RC_READ_BUFSIZE)) > 0)
  +        scriptAppend(pRc->m_pScript, szBuf, nRet);
  +    if (nRet == -1) /* Handle read errors */
  +        TRACE("Problem with procPopulate read(2)");
  +/*        RC_THROW(RC_ERR_IO);*/
  +
  +    /* Filehandle cleanups */
  +    close(nFdrc);
  +    close(nFdfunc);
  +
  +    /* Memory cleanups */
  +    if (szFucka) {
  +        free(szFucka);
  +        szFucka = NULL;
  +    }
  +    if (szBuf) {
  +        free(szBuf);
  +        szBuf = NULL;
  +    }
  +
  +    return(RC_THROW(RC_OK));
  +}
  +
  +/************************************************
  +* procRun(rc_proc_t *)                          *
  +* Run the processed run-command script          *
  +************************************************/
  +rc_return_t procRun(rc_proc_t *pRc)
  +{
  +    scriptDump(pRc->m_pScript);
  +
  +    return(RC_THROW(RC_OK));
  +}
  +
  +/************************************************
   * procDelete(rc_proc_t *)                       *
   * Destruct a processor                          *
   ************************************************/
   rc_return_t procDelete(rc_proc_t *pRc)
   {
  -    free(pRc);
  +    scriptDelete(pRc->m_pScript);   /* Destroy the script        */
  +    analDelete(pRc->m_pAnal);       /* Destroy the analyser      */
  +    free(pRc);                      /* Free the processor itself */
   
       return(RC_THROW(RC_OK));
   }
  Index: ossp-pkg/rc/rc_script.c
  ============================================================
  $ cvs update -p -r1.1 rc_script.c
  /*  OSSP rc - Run-command processor
  **  Copyright (c) 2002 Ralf S. Engelschall
  **  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **
  **  This file is part of OSSP rc, a portable Run-command processor
  **  which can be found at http://www.ossp.org/pkg/lib/rc/
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  rc_script.c: Run-command processor ISO C source file
  */
  
  #include <stdlib.h>
  #include <string.h>
  
  #include "rc.h"
  
  
  /************************************************
  * scriptNew(void)                               *
  * Construct a script                            *
  ************************************************/
  rc_script_t *scriptNew(void)
  {
      rc_script_t *pScript = NULL;
  
      pScript = (rc_script_t *)malloc(sizeof(rc_script_t));
      *pScript = NULL;
  
      return(pScript);
  }
  
  /************************************************
  * scriptAppend(rc_script_t *, char *, size_t)   *
  * Append text to a script                       *
  ************************************************/
  rc_return_t scriptAppend(rc_script_t *pScript, char *szInbuf, size_t Size)
  {
      int nResize     = 0;
      void *pvRealloc = NULL;
  
      if (!szInbuf) {
  TRACE("Problem with appendScript");
  /*        return(RC_THROW(RC_ERR_USE));*/
      }
  
      /* Short circuit in case of dumb noop call */
      if (Size == 0) {
          return(RC_THROW(RC_OK));
      }
  
      /* Add 2 to end of nResize to ensure that a \0 precedes any strings */
      nResize = (*pScript != NULL ? strlen(*pScript) : 0) + Size + 2;
      /* Don't trust realloc(3) in this case */
      if ((pvRealloc = calloc(1, (size_t)nResize)) == NULL) {
  TRACE("Problem with appendScript");
  /*        return(RC_THROW(RC_ERR_MEM));*/
      }
  
      /* Coerce strings into one Script again */
      if (*pScript) {
          strcpy(pvRealloc, *pScript);
          strncat(pvRealloc, szInbuf, Size);
      }
      else
          strncpy(pvRealloc, szInbuf, Size);
  
      /* Coerce strings into one Script again */
      if (*pScript) {
          free(*pScript);
          *pScript = NULL;
      }
      *pScript = pvRealloc;
  
      return(RC_THROW(RC_OK));
  }
  
  /************************************************
  * scriptDump(rc_script_t *)                    *
  * Print a script to standard out                *
  ************************************************/
  rc_return_t scriptDump(rc_script_t *pScript)
  {
      fprintf(stdout, "\n**************** Dumpskripte ****************\n");
      fprintf(stdout, "%s\n", *pScript);
      fprintf(stdout, "**************** Dumpskripte ****************\n\n");
  
      return(RC_THROW(RC_OK));
  }
  
  /************************************************
  * scriptDelete(rc_script_t *)                   *
  * Destruct a script                             *
  ************************************************/
  rc_return_t scriptDelete(rc_script_t *pScript)
  {
      if (*pScript)
          free(*pScript);
      else {
  TRACE("Empty script created, unused, then destroyed");
  /*        RC_THROW(RC_WRN_NUL);*/
      }
      free(pScript);
  
      return(RC_THROW(RC_OK));
  }
  Index: ossp-pkg/rc/rc_test.sh
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 rc_test.sh
  --- ossp-pkg/rc/rc_test.sh	22 May 2002 13:29:40 -0000	1.10
  +++ ossp-pkg/rc/rc_test.sh	26 Jun 2002 14:11:16 -0000	1.11
  @@ -28,26 +28,26 @@
   #  test_rc.sh: Run-command processor test script
   
   # Test short options, should fail for false combination usage
  -echo "./rc -dVehilpsrvxLcfqt samba start sleep=2 restart"
  -./rc -dVehilpsrvxLcfqt samba start sleep=2 restart
  +echo "./rc -dvef rcfunc/rc.func -hilpsrvxLcqt samba start sleep=2 restart"
  +./rc -dVef rcfunc/rc.func -hilpsrvxLcqt samba start sleep=2 restart
   
   # Test short options, should succeed
  -echo; echo "./rc -derv -L /sfw/etc/rc.d/rc.%{RCFILE:s/^all$/*/} -c /sfw/etc/rc.conf -f /sfw/etc/rc.func -t /tmp openssh stop sleep=4 start daily minsize=2097152"
  -./rc -derv -L /sfw/etc/rc.d/rc.%{RCFILE:s/^all$/*/} -c /sfw/etc/rc.conf -f /sfw/etc/rc.func -t /tmp openssh stop sleep=4 start daily minsize=2097152
  +echo; echo "./rc -derv -L /u/ms/ossp/rc/rcdings/rcfiles/rc.%{RCFILE:s/^all$/*/} -c /u/ms/ossp/rc/rcdings/rc.conf -f /u/ms/ossp/rc/rcfunc/rc.func -t /tmp openssh stop sleep=4 start daily minsize=2097152"
  +./rc -derv -L /u/ms/ossp/rc/rcdings/rcfiles/rc.d/rc.%{RCFILE:s/^all$/*/} -c /u/ms/ossp/rc/rcdings/rc.conf -f /u/ms/ossp/rc/rcfunc/rc.func -t /tmp openssh stop sleep=4 start daily minsize=2097152
   
   # Test some long options, should fail for false combination usage
   echo; echo "./rc --verbose --silent uucp stop sleep=6 start"
   ./rc --verbose --silent uucp stop sleep=6 start
   echo; echo "./rc --query myvar --silent zebra bing bang"
   ./rc --query myvar --silent zebra bing bang
  -echo; echo "./rc --conf /sfw/rc.conf --locate /etc/rc3.d:/sfw/etc/rc.d --query what to enter here"
  -./rc --conf /sfw/rc.conf --locate /etc/rc3.d:/sfw/etc/rc.d --query what to enter here
  +echo; echo "./rc --conf /sfw/rc.conf --locate /u/ms/ossp/rc/rcdings/rcfiles/ --query this barf test"
  +./rc --conf /sfw/rc.conf --locate /u/ms/ossp/rc/rcdings/rcfiles/ --query this barf test
   
   # Test minimal set of long options, should succeed
   echo; echo "./rc --debug --version rsyncd nothing matters but the version"
   ./rc --debug --version rsyncd nothing matters but the version
  -echo; echo "./rc --conf /sfw/rc.conf --locate /cw/etc/rc.d:/sfw/etc/rc.d:/etc/rc --query what to enter here"
  -./rc --conf /sfw/rc.conf --locate /cw/etc/rc.d:/sfw/etc/rc.d:/etc/rc --query what to enter here
  +echo; echo "./rc --conf /sfw/rc.conf --locate /cw/etc/rc.d:/u/ms/ossp/rc/rcdings/rcfiles:/etc/rc --query this barf test"
  +./rc --conf /sfw/rc.conf --locate /cw/etc/rc.d:/u/ms/ossp/rc/rcdings/rcfiles:/etc/rc --query this barf test
   
   # FIXME these cases are not handled yet by our configuration FIXME #
   #echo; echo "./rc --debug --version"
  @@ -62,12 +62,16 @@
   #./rc --conf /sfw/rc.conf --tmp /sfw/RPM/TMP --debug --labels rsyncd
   # FIXME these cases are not handled yet by our configuration FIXME #
   
  -echo; echo "./rc --func /sfw/etc/rc.func --print --verbose openssh stop sleep=4 start"
  -./rc --func /sfw/etc/rc.func --print --verbose openssh stop sleep=4 start
  -echo; echo "./rc --func /sfw/etc/rc.func --debug --eval uucp restart"
  -./rc --func /sfw/etc/rc.func --debug --eval uucp restart
  -echo; echo "./rc --conf ./myrc --func /sfw/etc/rc.func --tmp /tmp --debug --silent --exec uucp start"
  -./rc --conf ./myrc --func /sfw/etc/rc.func --tmp /tmp --debug --silent --exec uucp start
  +echo; echo "./rc --func /u/ms/ossp/rc/rcfunc/rc.func --print --verbose openssh stop sleep=4 start"
  +./rc --func /u/ms/ossp/rc/rcfunc/rc.func --print --verbose openssh stop sleep=4 start
  +echo; echo "./rc --func /u/ms/ossp/rc/rcfunc/rc.func --debug --eval uucp restart"
  +./rc --func /u/ms/ossp/rc/rcfunc/rc.func --debug --eval uucp restart
  +echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func --tmp /tmp --exec uucp start"
  +./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func --tmp /tmp --exec uucp start
  +echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func --tmp /tmp --debug --exec ntp sync"
  +./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func --tmp /tmp --debug --exec ntp sync
  +echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func --tmp /tmp --debug --silent --exec ralf feed suppe"
  +./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func --tmp /tmp --debug --silent --exec ralf feed suppe
   
   # Next milestone
   #RequireOwner

From ossp-cvs-owner@ossp.org  Wed Jun 26 16:42:54 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9607176491; Wed, 26 Jun 2002 16:42:54 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.c rc.h rc_cliopt.c rc_config.c rc_proc.c
Message-Id: <20020626144254.9607176491@mail.ossp.org>
Date: Wed, 26 Jun 2002 16:42:54 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   26-Jun-2002 16:42:54
  Branch: HEAD                             Handle: 2002062615425300

  Modified files:
    ossp-pkg/rc             rc.c rc.h rc_cliopt.c rc_config.c rc_proc.c

  Log:
    Relocate debug config dumping logic and clean up terminal option handling.

  Summary:
    Revision    Changes     Path
    1.33        +3  -4      ossp-pkg/rc/rc.c
    1.30        +11 -10     ossp-pkg/rc/rc.h
    1.12        +2  -3      ossp-pkg/rc/rc_cliopt.c
    1.18        +14 -4      ossp-pkg/rc/rc_config.c
    1.5         +5  -0      ossp-pkg/rc/rc_proc.c
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.c
  ============================================================
  $ cvs diff -u -r1.32 -r1.33 rc.c
  --- ossp-pkg/rc/rc.c	26 Jun 2002 14:11:16 -0000	1.32
  +++ ossp-pkg/rc/rc.c	26 Jun 2002 14:42:53 -0000	1.33
  @@ -43,14 +43,13 @@
       ex_try {                /* Configuration block                        */
           configNew();        /* Construct a new configuration              */
           configLoad(argc, (const char **)argv); /* Load cli, env, and conf */
  -        configDebug();      /* FIXME Remove FIXME */
           configVerify();     /* Test for usage, help, and version options  */
       }
       ex_catch(Except) {      /* Exceptions of the configuration block      */
  -        TRACE("Hopla, in config exception block");
  -        if ((rc_return_t)Except.ex_value == RC_ERR_USE) {
  +        if ((rc_return_t)Except.ex_value == RC_WRN_TRM)
  +            exit(0);
  +        else if ((rc_return_t)Except.ex_value == RC_ERR_USE)
               clioptPrintusage();
  -        }
           else {
               fprintf(stderr, "Class '%s' threw exception %d in %s:%s():%d.\n",\
                   (char *)Except.ex_class, (int)Except.ex_value,\
  Index: ossp-pkg/rc/rc.h
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 rc.h
  --- ossp-pkg/rc/rc.h	26 Jun 2002 14:11:16 -0000	1.29
  +++ ossp-pkg/rc/rc.h	26 Jun 2002 14:42:53 -0000	1.30
  @@ -52,16 +52,17 @@
   
   /* Rc return codes */
   typedef enum {
  -    RC_OK      = 1, /* Success                  */
  -    RC_ERR_0   = 2, /* Error base               */
  -    RC_ERR_USE = 3, /* Usage error              */
  -    RC_ERR_MEM = 4, /* Memory error             */
  -    RC_ERR_SYS = 5, /* System error (see errno) */
  -    RC_ERR_IO  = 6, /* Input/output error       */
  -    RC_ERR_INT = 7, /* Internal error           */
  -    RC_WRN_0   = 8, /* Warning base             */
  -    RC_WRN_OWR = 9, /* Overwrite warning        */
  -    RC_WRN_NUL = 10 /* NULL pointer warning     */
  +    RC_OK      = 1,  /* Success                  */
  +    RC_ERR_0   = 2,  /* Error base               */
  +    RC_ERR_USE = 3,  /* Usage error              */
  +    RC_ERR_MEM = 4,  /* Memory error             */
  +    RC_ERR_SYS = 5,  /* System error (see errno) */
  +    RC_ERR_IO  = 6,  /* Input/output error       */
  +    RC_ERR_INT = 7,  /* Internal error           */
  +    RC_WRN_0   = 8,  /* Warning base             */
  +    RC_WRN_OWR = 9,  /* Overwrite warning        */
  +    RC_WRN_NUL = 10, /* NULL pointer warning     */
  +    RC_WRN_TRM = 11  /* Request to terminate app */
   } rc_return_t;
   
   /* Config function prototypes */
  Index: ossp-pkg/rc/rc_cliopt.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 rc_cliopt.c
  --- ossp-pkg/rc/rc_cliopt.c	26 Jun 2002 14:11:16 -0000	1.11
  +++ ossp-pkg/rc/rc_cliopt.c	26 Jun 2002 14:42:53 -0000	1.12
  @@ -290,12 +290,11 @@
           }
       }
   
  -    if (cliOpt < -1) {
  -        /* An error occurred during option processing */
  +    if (cliOpt < -1) { /* The option given was not found in the index */
           fprintf(stderr, "%s: %s\n",
                   popt_badoption(m_Optcon, POPT_BADOPTION_NOALIAS),
                   popt_strerror(cliOpt));
  -        return(RC_THROW(RC_ERR_INT));
  +        return(RC_THROW(RC_ERR_USE));
       }
   
       return(RC_THROW(RC_OK));
  Index: ossp-pkg/rc/rc_config.c
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 rc_config.c
  --- ossp-pkg/rc/rc_config.c	26 Jun 2002 14:11:16 -0000	1.17
  +++ ossp-pkg/rc/rc_config.c	26 Jun 2002 14:42:53 -0000	1.18
  @@ -255,20 +255,30 @@
   rc_return_t configVerify(void)
   {
       ex_t Except;
  +    short bStop = FALSE;
   
       try { /* Basic checks of version, usage, and help options */
  -        if (configGetval(RC_VER_VAL))
  +        if (configGetval(RC_VER_VAL)) {
               fprintf(stdout, "OSSP rc %s\n", RC_VERSION);
  -        if (configGetval(RC_USE_VAL))
  +            bStop = TRUE;
  +        }
  +        if (configGetval(RC_USE_VAL)) {
               clioptPrintusage();
  -        if (configGetval(RC_HLP_VAL))
  +            bStop = TRUE;
  +        }
  +        if (configGetval(RC_HLP_VAL)) {
               clioptPrintusage(); /* FIXME Replace with real help FIXME */
  +            bStop = TRUE;
  +        }
       }
       catch(Except) {
           rethrow;
       }
   
  -    return(RC_THROW(RC_OK));
  +    if (bStop)                          /* Did user request a non-operation?  */
  +        return(RC_THROW(RC_WRN_TRM));   /* Yes, so terminate after handling.  */
  +    else
  +        return(RC_THROW(RC_OK));        /* No, we should continue processing. */
   }
   
   /***************************************
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	26 Jun 2002 14:11:16 -0000	1.4
  +++ ossp-pkg/rc/rc_proc.c	26 Jun 2002 14:42:53 -0000	1.5
  @@ -36,6 +36,7 @@
   #include <sys/stat.h>
   
   #include "rc.h"         /* Public interfaces        */
  +#include "rc_config.h"  /* Option definitions       */
   
   
   /************************************************
  @@ -135,6 +136,10 @@
   ************************************************/
   rc_return_t procRun(rc_proc_t *pRc)
   {
  +    
  +    if (configGetval(RC_DBG_VAL)) /* Dump the running config table */
  +        configDebug();            /* if debug switch is turned on  */
  +
       scriptDump(pRc->m_pScript);
   
       return(RC_THROW(RC_OK));

From ossp-cvs-owner@ossp.org  Wed Jun 26 18:00:27 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CE88D764FE; Wed, 26 Jun 2002 18:00:26 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ui64 README ui64.pod
Message-Id: <20020626160026.CE88D764FE@mail.ossp.org>
Date: Wed, 26 Jun 2002 18:00:26 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Jun-2002 18:00:26
  Branch: HEAD                             Handle: 2002062617002500

  Modified files:
    ossp-pkg/ui64           README ui64.pod

  Log:
    polishing

  Summary:
    Revision    Changes     Path
    1.2         +6  -4      ossp-pkg/ui64/README
    1.5         +26 -15     ossp-pkg/ui64/ui64.pod
  ____________________________________________________________________________

  Index: ossp-pkg/ui64/README
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 README
  --- ossp-pkg/ui64/README	28 Apr 2002 13:22:49 -0000	1.1
  +++ ossp-pkg/ui64/README	26 Jun 2002 16:00:25 -0000	1.2
  @@ -4,12 +4,14 @@
     | |_| | | (_) |__   _|
      \__,_|_|\___/   |_|  
                         
  -  OSSP ui64 - 64-Bit Aithmetic
  +  OSSP ui64 - 64-Bit Arithmetic
     Version 0.1.0 (28-Apr-2002)
   
     ABSTRACT
   
  -  OSSP ui64 is ...
  +  OSSP ui64 is a small ISO-C library providing portable 64-bit unsigned
  +  integer arithmetic. It can be considered as a portable emulation of
  +  the new ISO-C99 "unsigned long long" type.
   
     COPYRIGHT AND LICENSE
   
  @@ -17,8 +19,8 @@
     Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
     Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   
  -  This file is part of OSSP ui64, a 64-bit arithmetic which
  -  can be found at http://www.ossp.org/pkg/lib/ui64/.
  +  This file is part of OSSP ui64, a 64-bit arithmetic library
  +  which can be found at http://www.ossp.org/pkg/lib/ui64/.
   
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/ui64/ui64.pod
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 ui64.pod
  --- ossp-pkg/ui64/ui64.pod	28 Apr 2002 19:04:00 -0000	1.4
  +++ ossp-pkg/ui64/ui64.pod	26 Jun 2002 16:00:25 -0000	1.5
  @@ -66,10 +66,21 @@
   =head1 DESCRIPTION
   
   B<OSSP ui64> is a small B<ISO-C> library for portable 64-bit arithmetic.
  -It allows to perform the usual arithmetical and bit-wise operations on
  -a B<ISO-C> type B<ui64_t> which resembles a 64-bit unsigned integer
  -type. The library does no dynamic memory allocations and instead passes
  -B<ui64_t> values directly through the API functions.
  +It allows to perform the usual arithmetical and bit-wise operations on a
  +B<ISO-C> type B<ui64_t> which resembles a 64-bit unsigned integer type.
  +
  +In contrast to a built-in C type like the C94 B<unsigned long> or even
  +the similar C99 B<unsigned long long>, the operations on B<ui64_t>
  +provide full support for correct carry/overflow semantics.
  +
  +The library does no dynamic memory allocations at all and instead
  +passes B<ui64_t> objects by value within the API. This provides a very
  +convinient and low-overhead interface.
  +
  +Internally, B<OSSP ui64> stores the B<ui64_t> in exactly (the expected)
  +8 octets which at any time hold the 64-bit value in a portable
  +I<8-digits-to-base-256> representation. Nevertheless the B<ui64_t> type
  +should be treated as an opaque type.
   
   =head1 APPLICATION PROGRAMMER INTERFACE (API)
   
  @@ -81,11 +92,11 @@
   
   =item ui64_t B<ui64_zero>(void);
   
  -The value 0, expressed as an ui64_t.
  +The value 0, expressed as an B<ui64_t>.
   
   =item ui64_t B<ui64_max>(void);
   
  -The maximum value expressable as an ui64_t.
  +The maximum value expressable as an B<ui64_t>.
   
   =back
   
  @@ -139,7 +150,7 @@
   
   =item ui64_t B<ui64_addn>(ui64_t I<x>, int I<y>, int *I<ov>);
   
  -Same as B<ui64_add>, but I<y> and I<ov> are single digits to base 2^8.
  +Same as B<ui64_add>, but I<y> and I<ov> are single digits to base 256.
   
   =item ui64_t B<ui64_sub>(ui64_t I<x>, ui64_t I<y>, ui64_t *I<ov>);
   
  @@ -149,7 +160,7 @@
   
   =item ui64_t B<ui64_subn>(ui64_t I<x>, int I<y>, int *I<ov>);
   
  -Same as B<ui64_sub>, but I<y> and I<ov> are single digits to base 2^8.
  +Same as B<ui64_sub>, but I<y> and I<ov> are single digits to base 256.
   
   =item ui64_t B<ui64_mul>(ui64_t I<x>, ui64_t I<y>, ui64_t *I<ov>);
   
  @@ -159,7 +170,7 @@
   
   =item ui64_t B<ui64_muln>(ui64_t I<x>, int I<y>, int *I<ov>);
   
  -Same as B<ui64_mul>, but I<y> and I<ov> are single digits to base 2^8.
  +Same as B<ui64_mul>, but I<y> and I<ov> are single digits to base 256.
   
   =item ui64_t B<ui64_div>(ui64_t I<x>, ui64_t I<y>, ui64_t *I<ov>);
   
  @@ -169,7 +180,7 @@
   
   =item ui64_t B<ui64_divn>(ui64_t I<x>, int I<y>, int *I<ov>);
   
  -Same as B<ui64_div>, but I<y> and I<ov> are single digits to base 2^8.
  +Same as B<ui64_div>, but I<y> and I<ov> are single digits to base 256.
   
   =back
   
  @@ -213,7 +224,7 @@
   
   =item int B<ui64_len>(ui64_t I<x>);
   
  -Number of digits (1-8) to base 2^8 in I<x>.
  +Number of digits (1-8) to base 256 in I<x>.
   
   =item int B<ui64_cmp>(ui64_t I<x>, ui64_t I<y>);
   
  @@ -224,12 +235,12 @@
   
   =head1 HISTORY
   
  -B<OSSP ui64> was invented in April 2002 by Ralf S. Engelschall
  +B<OSSP ui64> was invented in April 2002 by I<Ralf S. Engelschall>
   E<lt>rse@engelschall.comE<gt> for use inside the B<OSSP> project. Its
   creation was prompted by the requirement to calculate with 64-bit
  -integers inside B<OSSP tai>. The core implementation is derived
  -from the B<XP> library in David R. Hanson's book C<C Interfaces and
  -Implementations>.
  +integers inside B<OSSP tai>, a time calculation library. The core
  +implementation is derived from the B<XP> library in I<David R. Hanson>'s
  +book I<C Interfaces and Implementations>.
   
   =head1 AUTHORS
   

From ossp-cvs-owner@ossp.org  Wed Jun 26 18:06:16 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 04404764AD; Wed, 26 Jun 2002 18:06:15 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ui64 devtool.conf
Message-Id: <20020626160615.04404764AD@mail.ossp.org>
Date: Wed, 26 Jun 2002 18:06:15 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Jun-2002 18:06:15
  Branch: HEAD                             Handle: 2002062617061500

  Modified files:
    ossp-pkg/ui64           devtool.conf

  Log:
    use caching while developing

  Summary:
    Revision    Changes     Path
    1.2         +1  -0      ossp-pkg/ui64/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/ui64/devtool.conf
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.conf
  --- ossp-pkg/ui64/devtool.conf	28 Apr 2002 13:22:49 -0000	1.1
  +++ ossp-pkg/ui64/devtool.conf	26 Jun 2002 16:06:15 -0000	1.2
  @@ -14,6 +14,7 @@
   
   %configure
       ./configure \
  +        --cache-file=config.cache \
           --prefix=/tmp/ui64 \
           --disable-shared \
           --enable-debug \

From ossp-cvs-owner@ossp.org  Thu Jun 27 11:24:41 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7461A763DF; Thu, 27 Jun 2002 11:24:41 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_syslog.pod
Message-Id: <20020627092441.7461A763DF@mail.ossp.org>
Date: Thu, 27 Jun 2002 11:24:41 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   27-Jun-2002 11:24:41
  Branch: HEAD                             Handle: 2002062710244000

  Added files:
    ossp-pkg/l2             l2_syslog.pod

  Log:
    write down what we expect from this utility

  Summary:
    Revision    Changes     Path
    1.1         +117 -0     ossp-pkg/l2/l2_syslog.pod
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_syslog.pod
  ============================================================
  $ cvs update -p -r1.1 l2_syslog.pod
  ##
  ##  L2 - OSSP Logging Library
  ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  ##
  ##  This file is part of OSSP L2, a flexible logging library which
  ##  can be found at http://www.ossp.org/pkg/l2/.
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  l2_syslog.pod: L2 syslog replacement manual page
  ##
  
  =pod
  
  =head1 NAME
  
  B<l2_syslog> - L2 syslog replacement
  
  =head1 VERSION
  
  OSSP L2 L2_VERSION_STR
  
  =head1 SYNOPSIS
  
  =over 4
  
  CPPFLAGS="-I /FIXME/include"
  
  LDFLAGS="-L /FIXME/lib"
  
  LIBS="-Ll2syslog -Ll2"
  
  =back
  
  =head1 DESCRIPTION
  
  The B<l2_syslog> is a library offering the syslog(3) API otherwise
  provided by the Standard C Library.  Instead of writing dump log files
  it uses the powerful L2 logging capabilities. It is a drop-in
  replacement which enables any syslog(3) consumer to take advantage of L2
  by just linking this library against an existing object. The source code
  remains unchanged.
  
  =head1 FILES
  
  The B<l2_syslog> library reads configuration sections located in one or
  more files. The path to the directory containing these file(s) is
  specified at compile time and is given to the configure script via
  '--with-syslog-cfgdir=...'.
  
  =head1 OPERATION
  
  When an application calles openlog(3) it passes an ident string and a
  log facility along. B<l2_syslog> tries to read the file
  C<syslog-cfgdir/>I<ident>. If the file is not readable, all files
  matching C<syslog-cfgdir/l2*> are read. All data that has been read in
  is then parsed for configuration sections. These are identified by
  '%ident I<match>' at the beginning of line. The I<match> argument is a
  PCRE (Perl Compatible Regular Expression) that is matched against a
  string concatenated from I<ident>/I<facility> given to the openlog(3)
  call.  The configuration section contains a L2 specification enclosed in
  curly brackets where the closing bracket must be placed on the beginning
  of a line. The L2 specification may contain $1, $2 ... variables
  which are filled from regex matches enclosed in round brackets.  A
  channel tree is build from each matching section and all trees form a
  single metatree. Further calls to syslog(3) will then inject log
  messages into this metatree.
  
  =head1 EXAMPLE
  
  =over 4
  
  %ident sendmail/.* {
  
      debug:
          prefix(
              prefix="%%b %%d %%H:%%M:%%S <%%L> $1 [%%P]: ",
              timezone=local)
          -> file(
              path="sendmail.debug.log",
              append=0,perm=432)
  
  }
  
  =back
  
  =head1 OPENPKG
  
  OpenPKG RPM packages must require "l2" for both %BuildPreReq and
  %PreReq.
  
  =head1 SEE ALSO
  
  syslog(3).
  
  =head1 AUTHOR
  
  Thomas Lotterer <thl@ossp.org>
  
  =cut

From ossp-cvs-owner@ossp.org  Thu Jun 27 15:48:20 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 51741763DF; Thu, 27 Jun 2002 15:48:20 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea-brainstorming
Message-Id: <20020627134820.51741763DF@mail.ossp.org>
Date: Thu, 27 Jun 2002 15:48:20 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   27-Jun-2002 15:48:20
  Branch: HEAD                             Handle: 2002062714481900

  Added files:
    ossp-pkg/tabea          tabea-brainstorming

  Log:
    Tabea brainstorming. Brainstorming about configuration by THL and PS

  Summary:
    Revision    Changes     Path
    1.1         +547 -0     ossp-pkg/tabea/tabea-brainstorming
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea-brainstorming
  ============================================================
  $ cvs update -p -r1.1 tabea-brainstorming
  
      Terminology
  
      structure - structure of the user interface
      template  - skeleton(s) of the output file(s) with variables which need expansion using the choices
      data      - file that contains the data chosen by the user
      output    - file(s) actually written out by tabea.
  
      Files
  
      - output
      
      One or more files being written out by tabea. It is/they are build
      from template(s) by expanding the embedded variables using lib_var
      with data from the choices file. The output files are usually
      write-only except an import function is provided to build a baseline
      of choice from a pre-existing output, which is typically the case
      when someone has maintained such a file manually before it was taken
      under tabea control or such a file is received from an external
      source.
  
      - data
  
      A single file containing all data chosen by the user.  Format is one
      record per logical line. A physical line be extended to a long
      logical line using a trailing BACKSLASH just before the NEWLINE.
      Fields are separated by SPACE. Unused optional fields must be filled
      using a DASH.  The following fields exist:
  
      name (mandatory)
      value (optional)
  
      A name might end with SQUARE BRACKET OPEN, any integer and SQUARE
      BRACKET CLOSE, indicating an array. If the integer or the wholly
      squre bracket construct is omited, [0] is assumed.
  
      - template
  
      Any ASCII file using lib_var syntax for variable expansion.
  
      - structure of a item block
  
      Menu structure of the user interface.  Format is one record per
      logical line. A physical line be extended to a long logical line
      using a trailing BACKSLASH just before the NEWLINE. Fields are
      separated by SPACE. Unused optional fields must be filled using a
      DASH.  The following fields exist:
  
      block {
          name (mandatory)
          visible
          description
          helptext
          helpurl
          activate
          item {
              name (mandatory)
              namevisible
              description
              helptext
              helpurl
              type
              defaultvalue
              value {
                  name (mandatory)
                  visible
                  description
                  helptext
                  helpurl
                  verify
              }
          }
      }
      
      A name might end with SQUARE BRACKET OPEN, any integer and SQUARE
      BRACKET CLOSE, indicating an array. If the integer or the wholly
      squre bracket construct is omited, [0] is assumed.
  
      A description is a human readable text for name. If omited, name is
      used verbatim.
  
      A helptext is a human readable text for the word "help". If omitted
      and "helpurl" is set, it defaults to "help". If "helpurl" is omitted
      no help link is shown at all.
  
      The helpurl is the URL to a help page describing the item.
  
      The defaultvalue is taken if the name is omitted in the data file,
      i.e. the data file did not previously exist, was modfied through an
      external mechanism or an updated structure added a name which did
      not exist in previous versions. It is also used if the
      structure validation failed.
      
      A valuehelptext is a human readable text for the word "help". If omitted
      and "valuehelpurl" is set, it defaults to "help". If "valuehelpurl" is omitted
      no help link is shown at all.
  
      The valuehelpurl is the URL to a help page describing the value.
  
      The "verify" is a regex.
  
      The "eval" is a little perl program and uses perl's "eval" to find
      out the result.
      Possible types are taken from RFC1866, Section 8.1.2 - 8.1.4
  
      8.1.2.1. Text Field: INPUT TYPE=TEXT
  
      <p>Street Address: <input name=street><br>
      Postal City code: <input name=city size=16 maxlength=16><br>
      Zip Code: <input name=zip size=10 maxlength=10 value="99999-9999"><br>
  
      item {
          name street
          visible "Street Address:"
          type text
      }
      item {
          name city
          visible "Postal City code:"
          type text[16][16]
      }
      item {
          name zip
          visible "Zip Code:"
          type text[10][10]
          value {
              name "99999-9999"
          }
      }
  
      8.1.2.2. Password Field: INPUT TYPE=PASSWORD
  
      <p>Name: <input name=login> Password: <input type=password name=passwd>
  
      item {
          name login
          visible "Name:"
          type text
      }
      item {
          name passwd
          visible "Password:"
          type password
      }
  
  
      8.1.2.3. Check Box: INPUT TYPE=CHECKBOX
  
      <p>What flavors do you like?
      <input type=checkbox name=flavor value=vanilla checked>Vanilla<br>
      <input type=checkbox name=flavor value=strawberry>Strawberry<br>
      <input type=checkbox name=flavor value=chocolate checked>Chocolate<br>
  
      item {
          name flavor
          visible "What flavors do you like?"
          type checkbox
          value {
              name vanilla
              visible "Vanilla"
              checked
          }
          value {
              name strawberry
              visible "Strawberry"
          }
          value {
              name chocolate
              visible "Chocolate"
              checked
          }
      }
  
      8.1.2.4. Radio Button: INPUT TYPE=RADIO
  
      <p>Which is your favorite?
      <input type=radio name=flavor value=vanilla checked>Vanilla<br>
      <input type=radio name=flavor value=strawberry>Strawberry<br>
      <input type=radio name=flavor value=chocolate>Chocolate<br>
  
      item {
          name flavor
          visible "Which is your favorite?"
          type radio
          value {
              name vanilla
              visible "Vanilla"
              checked
          }
          value {
              name strawberry
              visible "Strawberry"
          }
          value {
              name chocolate
              visible "Chocolate"
          }
      }
  
      8.1.2.5. Image Pixel: INPUT TYPE=IMAGE
  
      item {
          name point
          visible "Choose a point on the map:"
          type image
          value {
              name "map.gif"
          }
      }
  
      8.1.2.6. Hidden Field: INPUT TYPE=HIDDEN (FIXME do we really need this?)
  
      <input type=hidden name=context value="l2k3j4l2k3j4l2k3j4lk23">
  
      item {
          name context
          type hidden
          value {
              name "l2k3j4l2k3j4l2k3j4lk23"
          }
      }
  
      8.1.2.7. Submit Button: INPUT TYPE=SUBMIT
  
      <input type=submit name=recipient value=internal><br>
      <input type=submit name=recipient value=world>
  
      item {
          name recipient
          type submit
          value {
              name internal
          }
          value {
              name world
          }
      }
  
      8.1.2.8. Reset Button: INPUT TYPE=RESET
  
      You may clear the form and start over at any time: <input type=reset>
  
      item {
          description "You may clear the form and start over at any time:"
          type reset
      }
  
      8.1.3. Selection: SELECT
      8.1.3.1. Option: OPTION
  
      <SELECT NAME="flavor" SIZE="2">
      <OPTION>Vanilla
      <OPTION>Strawberry
      <OPTION value="RumRasin">Rum and Raisin
      <OPTION selected>Peach and Orange
      </SELECT>
  
      item {
          name flavor
          type select[2] //or type selectmultipe[2]
          value {
              name "Vanilla"
          }
          value {
              name "Strawberry"
          }
          value {
              name RumRasin
              visible "Rum and Raisin"
          }
          value {
              name "Peach and Orange"
              selected
          }
  
      }
  
      8.1.4. Text Area: TEXTAREA
  
      <TEXTAREA NAME="address" ROWS=6 COLS=64>
      HaL Computer Systems
      1315 Dell Avenue
      Campbell, California 95008
      </TEXTAREA>
  
      item {
          name "address"
          type textarea[64][6]
          value {
              name "HaL Computer Systems\n1315 Dell Avenue\nCampbell, California 95008"
          }
      }
  
      Example: Generic RAID configuration
  
      block {
          name BEGIN
          visible "RAID configurator"
          description "Please configure your redundant array of independent disks now"
          helptext info
          helpurl http://www.raid.org
          activate #always
          item {
              name numdrives
              visible "Number of drives [1...9]"
              description "enter the total number of drives in the array including redundant and spare drives"
              helptext ?
              helpurl http://www.counting.org/basics
              activate #always
              type text[1]
              defaultvalue 1
              verify ^[123456789]$
              eval $numdrives ~= ^[123456789]$
          }
          item {
              name raidlevel
              activate numdrives~=.
              type radio
              defaultvalue 0
              value {
                  name 0
                  visible "RAID 0"
              }
              value {
                  name 1
                  activate numdrives~=^[2468]$ #even
              }
              value {
                  name 4
                  activate numdrives~=^[3456789]$ #>=3
              }
              value {
                  name 5
                  activate numdrives~=^[3456789]$ #>=3
              }
              value {
                  name 10
                  activate numdrives~=^[48]$ #multiple of 4
              }
              value {
                  name 1+HOT
                  activate numdrives~=^[3579]$ #odd AND >=3
              }
              value {
                  name 4+HOT
                  activate numdrives~=^[456789]$ #>=4
              }
              value {
                  name 5+HOT
                  activate numdrives~=^[456789]$ #>=4
              }
          }
      }
      block {
          name END
          visible "commit suicide now"
          activate numdrives~=. && raidlevel~=^[0145](+HOT)?$
          item {
              name "Finish"
              type button
          }
      }
  
  Example: Jumpstart Disk and Raid Configuration
  
      block {
          name BEGIN
          visible "Disk Configuration"
          description "Please configure the number of disks and the RAID"
          helptext info
          helpurl 
          activate #always
          item {
              name numdrives
              visible "Number of drives [1...9]"
              description "enter the total number of drives in the array including redundant and spare drives"
              helptext ?
              helpurl http://www.counting.org/basics
              activate #always
              type text[1]
              (type popup_menu[1] )
              defaultvalue 1
              verify ^[12]$
          }
          item {
              name raidlevel
              activate numdrives~=.
              type radio
              defaultvalue 0
              item
              value {
                  name 0
                  visible "RAID 0"
              }
              value {
                  name 1
                  activate numdrives~=^[2]$ #even
              }
          }
          item {
              name sizeofdisk
              
          }
          item {
              name slices
              visible 'Slice definition'
              item {
                  name slice0
                  visible "Definition of slice0"
                  item {
                      name size
                      visible "Define the size of sclice"
                      verify sizeofdisk - size0 - size1 ..... -size7 >= 0
                  }
                  item {
                      name moutpoint 
                      visible "Define the mount point of slice"
                      type popup_menu[7}  # Dependencies to other slice types
                      verify              # Depencies to other slices
                  }               
  
              item {
                  name slice1
                  visible "Definition of slice1"
                  item {
                      name size
                      visible "Define the size of sclice"
                  }
                  item {
                      name moutpoint 
                      visible "Define the mount point of slice"
                      type popup_menu[7}  # Dependencies to other slice types
                      verify              #                
                  }
  
              item {
                  name slice2
                  visible "Definition of slice2"
                  item {
                      name size
                      visible "Define the size of sclice"
                  }
                  item {
                      name moutpoint 
                      visible "Define the mount point of slice"
                      type popup_menu[7}  # Dependencies to other slice types
                      verify              #           
                  }
              item {
                  name slice3
                  visible "Definition of slice3"
                  item {
                      name size
                      visible "Define the size of sclice"
                  }
                  item {
                      name moutpoint 
                      visible "Define the mount point of slice"
                      type popup_menu[7}  # Dependencies to other slice types
                      verify              #           
                  }
              item {
                  name slice4
                  visible "Definition of slice4"
                  item {
                      name size
                      visible "Define the size of sclice"
                  }
                  item {
                      name moutpoint 
                      visible "Define the mount point of slice"
                      type popup_menu[7}  # Dependencies to other slice types
                      verify              #           
                  }
              item {
                  name slice5
                  visible "Definition of slice5"
                  item {
                      name size
                      visible "Define the size of sclice"
                  }
                  item {
                      name moutpoint 
                      visible "Define the mount point of slice"
                      type popup_menu[7}  # Dependencies to other slice types
                      verify              #           
                  }
              item {
                  name slice6
                  visible "Definition of slice6"
                  item {
                      name size
                      visible "Define the size of sclice"
                  }
                  item {
                      name moutpoint 
                      visible "Define the mount point of slice"
                      type popup_menu[7}  # Dependencies to other slice types
                      verify              #           
                  }
              item {
                  name slice7
                  visible "Definition of slice7"
                  item {
                      name size
                      visible "Define the size of sclice"
                      
                  }
                  item {
                      name moutpoint 
                      visible "Define the mount point of slice"
                      type popup_menu[7}  # Dependencies to other slice types 
                      verify              #                
                  }
  
  
  
  
  
  
               } 
  
               
              }
              
          }
          
      }
      block {
          name pruefen
          type submit
      }
      block {
          name clean
          type reset
      }
      block {
          name END
          visible "commit suicide now"
          activate numdrives~=. && raidlevel~=^[0145](+HOT)?$
          item {
              name "Finish"
              type button
          }
      }
  
  

From ossp-cvs-owner@ossp.org  Thu Jun 27 17:35:59 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E45C77642D; Thu, 27 Jun 2002 17:35:58 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.h rc_anal.c rc_config.c rc_const.h rc_priva...
Message-Id: <20020627153558.E45C77642D@mail.ossp.org>
Date: Thu, 27 Jun 2002 17:35:58 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   27-Jun-2002 17:35:58
  Branch: HEAD                             Handle: 2002062716355800

  Modified files:
    ossp-pkg/rc             rc.h rc_anal.c rc_config.c rc_const.h rc_private.h
                            rc_proc.c rc_test.sh

  Log:
    Added 'all' wildcard rcfile globbing and removed location hardcoding and
    rcfile prefix hardcoding.

  Summary:
    Revision    Changes     Path
    1.31        +1  -0      ossp-pkg/rc/rc.h
    1.6         +65 -7      ossp-pkg/rc/rc_anal.c
    1.19        +9  -3      ossp-pkg/rc/rc_config.c
    1.8         +1  -1      ossp-pkg/rc/rc_const.h
    1.16        +1  -1      ossp-pkg/rc/rc_private.h
    1.6         +39 -32     ossp-pkg/rc/rc_proc.c
    1.12        +4  -2      ossp-pkg/rc/rc_test.sh
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.h
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 rc.h
  --- ossp-pkg/rc/rc.h	26 Jun 2002 14:42:53 -0000	1.30
  +++ ossp-pkg/rc/rc.h	27 Jun 2002 15:35:58 -0000	1.31
  @@ -103,6 +103,7 @@
   rc_return_t analFuncs(rc_anal_t **, const char *);
   rc_return_t analLocs(rc_anal_t **, const char *);
   rc_return_t analSecs(rc_anal_t **, const char **);
  +rc_return_t analGloblocs(rc_anal_t **);
   rc_return_t analParse(rc_anal_t *);
   
   /* Script function prototypes */
  Index: ossp-pkg/rc/rc_anal.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 rc_anal.c
  --- ossp-pkg/rc/rc_anal.c	26 Jun 2002 14:11:16 -0000	1.5
  +++ ossp-pkg/rc/rc_anal.c	27 Jun 2002 15:35:58 -0000	1.6
  @@ -31,7 +31,9 @@
   #include <string.h>
   
   #include "rc.h"         /* Public interfaces        */
  +#include "rc_const.h"   /* String constants         */
   #include "rc_config.h"  /* Configuration interface  */
  +#include "rc_anal.h"    /* Anal specific headers    */
   
   
   /************************************************
  @@ -58,7 +60,14 @@
   /*        RC_THROW(RC_WRN_NUL);*/
       }
       else { /* Only enter block with valid string, strdup can't handle NULL */
  -        (*ppInst)->m_szRcs = strdup(kszName);
  +        (*ppInst)->m_szRcs = malloc(sizeof(char **));
  +        if (strcmp(kszName, RC_GLOB_WILD)) {
  +            *(*ppInst)->m_szRcs = strdup("rc.");
  +            strcat(*(*ppInst)->m_szRcs, kszName);
  +            *((*ppInst)->m_szRcs + sizeof(char **)) = NULL; /* Terminate list */
  +        }
  +        else /* Wildcard rcfile indicates we must glob the locs directories */
  +            analGloblocs(ppInst);
       }
   
       return(RC_THROW(RC_OK));
  @@ -106,6 +115,7 @@
   {
       if (!kszPathexpr) {
           (*ppInst)->m_szLocs = NULL;
  +        (*ppInst)->m_szLocs = strdup("./"); /* FIXME: Relocate default val */
   /*        RC_THROW(RC_WRN_NUL);*/
       }
       else { /* Only enter block with valid string, strdup can't handle NULL */
  @@ -138,6 +148,50 @@
       return(RC_THROW(RC_OK));
   }
   
  +/***************************************************************
  +* int analFileselect(struct dirent *Direntry)                  *
  +* Calculate whether a directory entry belongs to a defined set *
  +***************************************************************/
  +int analFileselect(struct dirent *Direntry)
  +{
  +    if ((Direntry->d_name != NULL) && (strncmp(Direntry->d_name, "rc.", 3) == 0))
  +        return (TRUE);
  +    else if ((strcmp(Direntry->d_name, ".") == 0) || (strcmp(Direntry->d_name, "..") == 0))
  +        return (FALSE);
  +    else /* Catchall returns false for all not met set conditions */
  +        return (FALSE);
  +}
  +
  +/************************************************
  +* analGloblocs(rc_anal_t **ppInst)              *
  +* Glob all files of the location directories    *
  +************************************************/
  +rc_return_t analGloblocs(rc_anal_t **ppInst)
  +{
  +    struct dirent ***pppFiles = NULL;
  +    int nIter  = 0;
  +    int nCount = 0;
  +
  +    assert(*ppInst); /* Verify sanity */
  +
  +    /* Write the globbed filenames to our anal object */
  +    pppFiles = malloc(sizeof(struct dirent));
  +    nCount = scandir((*ppInst)->m_szLocs, pppFiles, analFileselect, alphasort);
  +
  +    /* Loop through file index setting Rf file names according to dirent */
  +    for (nIter = 0; nIter < nCount; ++nIter)
  +        (*ppInst)->m_szRcs[nIter] = strdup((*pppFiles)[nIter]->d_name);
  +    (*ppInst)->m_szRcs[nIter] = NULL;
  +
  +    /* Cleanup our Dirent object */
  +    if (pppFiles) {
  +        free(pppFiles);
  +        pppFiles = NULL;
  +    }
  +
  +    return(RC_THROW(RC_OK));
  +}
  +
   /************************************************
   * analParse(rc_anal_t *)                        *
   * Parse the analyzed configuration data         *
  @@ -148,10 +202,10 @@
   
       assert(pInst); /* Verify sanity */
       ex_try { /* Read in data from the main configuration */
  +        analLocs (&pInst, configGetval(RC_LOC_VAL));
           analRcs  (&pInst, configGetrcfile());
           analTmp  (&pInst, configGetval(RC_TMP_VAL));
           analFuncs(&pInst, configGetval(RC_FNC_VAL));
  -        analLocs (&pInst, configGetval(RC_LOC_VAL));
           analSecs (&pInst, configGetsecs());
       }
       ex_catch(Except) {
  @@ -168,15 +222,19 @@
   ************************************************/
   rc_return_t analDelete(rc_anal_t *pInst)
   {
  -    if (pInst->m_szRcs)         /* Rc file names       */
  +    int nIter = 0;
  +
  +    while (pInst->m_szRcs[nIter])   /* Rc file names       */
  +        free(pInst->m_szRcs[nIter++]);
  +    if (pInst->m_szRcs)             /* Rc file name index  */
           free(pInst->m_szRcs);
  -    if (pInst->m_szTmp)         /* Temp file name      */
  +    if (pInst->m_szTmp)             /* Temp file name      */
           free(pInst->m_szTmp);
  -    if (pInst->m_szFuncs)       /* Function file names */
  +    if (pInst->m_szFuncs)           /* Function file names */
           free(pInst->m_szFuncs);
  -    if (pInst->m_szLocs)        /* Location path names */
  +    if (pInst->m_szLocs)            /* Location path names */
           free(pInst->m_szLocs);
  -    if (pInst->m_pszSecs)       /* Section names       */
  +    if (pInst->m_pszSecs)           /* Section names       */
           vectorDel(pInst->m_pszSecs);
   
       free(pInst);
  Index: ossp-pkg/rc/rc_config.c
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 rc_config.c
  --- ossp-pkg/rc/rc_config.c	26 Jun 2002 14:42:53 -0000	1.18
  +++ ossp-pkg/rc/rc_config.c	27 Jun 2002 15:35:58 -0000	1.19
  @@ -191,14 +191,20 @@
       int i = 0;
       char *szTemp = NULL;
   
  -    m_szSummary = malloc(NULL);
  +    /* Make sure we start with a blank slate */
  +    if (m_szSummary) {
  +        free(m_szSummary);
  +        m_szSummary = NULL;
  +    }
  +
       for (i = 0; i < RC_NUMOPTS; i++)
       {
           try { /* FIXME Not threadsafe, wrap with crit section */
               if (configGetval(i) == NULL); /* NOP */
               else if (!(strcmp(configGetval(i), "1"))) {
  -                szTemp = malloc(strlen(m_szSummary) + strlen(configGetval(i)));
  -                strcpy(szTemp, m_szSummary);
  +                szTemp = calloc(1, (m_szSummary ? strlen(m_szSummary) : 0) + strlen(configGetval(i)));
  +                if (m_szSummary)
  +                    strcpy(szTemp, m_szSummary);
                   strcat(szTemp, "Option ");
                   strcat(szTemp, configGetname(i));
                   strcat(szTemp, " is on.\n");
  Index: ossp-pkg/rc/rc_const.h
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 rc_const.h
  --- ossp-pkg/rc/rc_const.h	26 Jun 2002 14:11:16 -0000	1.7
  +++ ossp-pkg/rc/rc_const.h	27 Jun 2002 15:35:58 -0000	1.8
  @@ -108,6 +108,6 @@
   #define RC_ERRSTR_INT "Internal"
   #define RC_ERRSTR_UNK "Unrecognized"
   
  -#define RC_CONF_WILD  "all"
  +#define RC_GLOB_WILD  "all"
   
   #endif /* __OSSPRC_CONST_H__ */
  Index: ossp-pkg/rc/rc_private.h
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 rc_private.h
  --- ossp-pkg/rc/rc_private.h	26 Jun 2002 14:11:16 -0000	1.15
  +++ ossp-pkg/rc/rc_private.h	27 Jun 2002 15:35:58 -0000	1.16
  @@ -71,7 +71,7 @@
   
   /* Analyser type */
   typedef struct {
  -    char *m_szRcs;      /* Rc file names       */
  +    char **m_szRcs;     /* Rc file names       */
       char *m_szTmp;      /* Temp file name      */
       char *m_szFuncs;    /* Function file names */
       char *m_szLocs;     /* Location path names */
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	26 Jun 2002 14:42:53 -0000	1.5
  +++ ossp-pkg/rc/rc_proc.c	27 Jun 2002 15:35:58 -0000	1.6
  @@ -75,53 +75,60 @@
       int nFdrc     = 0;
       int nFdfunc   = 0;
       int nRet      = 0;
  +    int nIter     = 0;
       char *szBuf   = NULL;
  +    char *szLocex = NULL;
   
  -    char *szFucka = NULL;
  -
  -    /* FIXME: Do not hardcode location or prefix! */
  -    szFucka = (char *)malloc(strlen(pRc->m_pAnal->m_szRcs) + 8);
  -    strcpy(szFucka, "rcfiles/rc.");
  -    strcat(szFucka, pRc->m_pAnal->m_szRcs);
  -
  +    assert(*pRc->m_pAnal->m_szRcs);
       szBuf = (char *)calloc(0, RC_READ_BUFSIZE);
   
  -    /* Open the rc file unconditionally */
  -    if ((nFdrc = open(szFucka, O_RDONLY)) == -1) {
  -/*        RC_THROW(RC_ERR_IO);*/
  -        TRACE("Problem with procPopulate open(2)");
  -    }
  -
  -    /* Open the func file if it belongs to the configuration */
  +    /* Open the func file if it exists in the configuration */
       if (pRc->m_pAnal->m_szFuncs) {
           if ((nFdfunc = open(pRc->m_pAnal->m_szFuncs, O_RDONLY)) == -1) {
       /*        RC_THROW(RC_ERR_IO);*/
  -        TRACE("Problem with procPopulate open(2)");
  +            fprintf(stderr, "Problem with procPopulate open(2) of %s\n", pRc->m_pAnal->m_szFuncs);
  +        }
  +    }
  +
  +    /* Keep reading possibly globbed rc files until there are none left */
  +    for (nIter = 0; pRc->m_pAnal->m_szRcs[nIter]; nIter++)
  +    {
  +        szLocex = (char *)malloc(strlen(pRc->m_pAnal->m_szLocs) + strlen(pRc->m_pAnal->m_szRcs[nIter]) + 2);
  +        strcpy(szLocex, pRc->m_pAnal->m_szLocs);
  +        strcat(szLocex, pRc->m_pAnal->m_szRcs[nIter]);
  +
  +        /* Open the rc file unconditionally */
  +        if ((nFdrc = open(szLocex, O_RDONLY)) == -1) {
  +    /*        RC_THROW(RC_ERR_IO);*/
  +            fprintf(stderr, "Problem with procPopulate open(2) of %s\n", szLocex);
  +        }
  +
  +        /* Read the func file if it was opened successfully */
  +        /* We unfortunately make the assumption that 0 is an invalid filedesc */
  +        if (nFdfunc) {
  +            /* Read data from the func file */
  +            while ((nRet = read(nFdfunc, szBuf, RC_READ_BUFSIZE)) > 0)
  +                scriptAppend(pRc->m_pScript, szBuf, nRet);
  +            if (nRet == -1) /* Handle read errors */
  +                TRACE("Problem with procPopulate read(2)");
  +        /*        RC_THROW(RC_ERR_IO);*/
           }
  -        /* Read data from the func file */
  -        while ((nRet = read(nFdfunc, szBuf, RC_READ_BUFSIZE)) > 0)
  +
  +        /* Read data from the rc file */
  +        while ((nRet = read(nFdrc, szBuf, RC_READ_BUFSIZE)) > 0)
               scriptAppend(pRc->m_pScript, szBuf, nRet);
           if (nRet == -1) /* Handle read errors */
               TRACE("Problem with procPopulate read(2)");
       /*        RC_THROW(RC_ERR_IO);*/
  +
  +        free(szLocex);  /* Free our temporarily constructed Location + Rcfile */
  +        szLocex = NULL;
  +        close(nFdrc);   /* Close Rc file handle */
       }
   
  -    /* Read data from the rc file */
  -    while ((nRet = read(nFdrc, szBuf, RC_READ_BUFSIZE)) > 0)
  -        scriptAppend(pRc->m_pScript, szBuf, nRet);
  -    if (nRet == -1) /* Handle read errors */
  -        TRACE("Problem with procPopulate read(2)");
  -/*        RC_THROW(RC_ERR_IO);*/
  -
  -    /* Filehandle cleanups */
  -    close(nFdrc);
  -    close(nFdfunc);
  +    close(nFdfunc);     /* Close Func file handle */
   
       /* Memory cleanups */
  -    if (szFucka) {
  -        free(szFucka);
  -        szFucka = NULL;
  -    }
       if (szBuf) {
           free(szBuf);
           szBuf = NULL;
  @@ -136,10 +143,10 @@
   ************************************************/
   rc_return_t procRun(rc_proc_t *pRc)
   {
  -    
       if (configGetval(RC_DBG_VAL)) /* Dump the running config table */
           configDebug();            /* if debug switch is turned on  */
   
  +    /* This will print the script to a hardcoded dump device, probably stderr */
       scriptDump(pRc->m_pScript);
   
       return(RC_THROW(RC_OK));
  Index: ossp-pkg/rc/rc_test.sh
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 rc_test.sh
  --- ossp-pkg/rc/rc_test.sh	26 Jun 2002 14:11:16 -0000	1.11
  +++ ossp-pkg/rc/rc_test.sh	27 Jun 2002 15:35:58 -0000	1.12
  @@ -46,8 +46,8 @@
   # Test minimal set of long options, should succeed
   echo; echo "./rc --debug --version rsyncd nothing matters but the version"
   ./rc --debug --version rsyncd nothing matters but the version
  -echo; echo "./rc --conf /sfw/rc.conf --locate /cw/etc/rc.d:/u/ms/ossp/rc/rcdings/rcfiles:/etc/rc --query this barf test"
  -./rc --conf /sfw/rc.conf --locate /cw/etc/rc.d:/u/ms/ossp/rc/rcdings/rcfiles:/etc/rc --query this barf test
  +echo; echo "./rc --conf /sfw/rc.conf --locate /cw/etc/rc.d:/u/ms/ossp/rc/rcdings/rcfiles:/etc/rc --query all barf test"
  +./rc --conf /sfw/rc.conf --locate /cw/etc/rc.d:/u/ms/ossp/rc/rcdings/rcfiles:/etc/rc --query all barf test
   
   # FIXME these cases are not handled yet by our configuration FIXME #
   #echo; echo "./rc --debug --version"
  @@ -72,6 +72,8 @@
   ./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func --tmp /tmp --debug --exec ntp sync
   echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func --tmp /tmp --debug --silent --exec ralf feed suppe"
   ./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func --tmp /tmp --debug --silent --exec ralf feed suppe
  +echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /u/ms/ossp/rc/rcfiles/ --tmp /tmp --silent --exec all feed suppe"
  +./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /u/ms/ossp/rc/rcfiles/ --tmp /tmp --silent --exec all feed suppe
   
   # Next milestone
   #RequireOwner

From ossp-cvs-owner@ossp.org  Thu Jun 27 17:38:57 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 612A97642D; Thu, 27 Jun 2002 17:38:57 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc_anal.h
Message-Id: <20020627153857.612A97642D@mail.ossp.org>
Date: Thu, 27 Jun 2002 17:38:57 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   27-Jun-2002 17:38:57
  Branch: HEAD                             Handle: 2002062716385700

  Added files:
    ossp-pkg/rc             rc_anal.h

  Log:
    Added new scandir- and dirent-related precompile info to new header file for
    abstraction purposes.

  Summary:
    Revision    Changes     Path
    1.1         +40 -0      ossp-pkg/rc/rc_anal.h
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc_anal.h
  ============================================================
  $ cvs update -p -r1.1 rc_anal.h
  /*  OSSP rc - Run-command processor
  **  Copyright (c) 2002 Ralf S. Engelschall
  **  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **
  **  This file is part of OSSP rc, a portable Run-command processor
  **  which can be found at http://www.ossp.org/pkg/lib/rc/
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  rc_anal.h: Run-command processor ISO C public API header file
  */
  
  #include <sys/types.h>
  #include <dirent.h>
  #include <sys/param.h>
  #include <stdio.h>
  
  /* Global needed for use by scandir function in analGloblocs */
  extern int alphasort(const void *, const void *);
  
  /* Include function prototype here for abstraction of file and directories */
  int analFileselect(struct dirent *);
  

From ossp-cvs-owner@ossp.org  Thu Jun 27 17:56:14 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3532C7642D; Thu, 27 Jun 2002 17:56:14 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc_anal.h
Message-Id: <20020627155614.3532C7642D@mail.ossp.org>
Date: Thu, 27 Jun 2002 17:56:14 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   27-Jun-2002 17:56:14
  Branch: HEAD                             Handle: 2002062716561300

  Modified files:
    ossp-pkg/rc             rc_anal.h

  Log:
    Remove headers that we aren't using in the analyzer implementation.

  Summary:
    Revision    Changes     Path
    1.2         +0  -3      ossp-pkg/rc/rc_anal.h
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc_anal.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 rc_anal.h
  --- ossp-pkg/rc/rc_anal.h	27 Jun 2002 15:38:57 -0000	1.1
  +++ ossp-pkg/rc/rc_anal.h	27 Jun 2002 15:56:13 -0000	1.2
  @@ -27,10 +27,7 @@
   **  rc_anal.h: Run-command processor ISO C public API header file
   */
   
  -#include <sys/types.h>
   #include <dirent.h>
  -#include <sys/param.h>
  -#include <stdio.h>
   
   /* Global needed for use by scandir function in analGloblocs */
   extern int alphasort(const void *, const void *);

From ossp-cvs-owner@ossp.org  Thu Jun 27 17:57:11 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1E3BE7642D; Thu, 27 Jun 2002 17:57:11 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea.cgi
Message-Id: <20020627155711.1E3BE7642D@mail.ossp.org>
Date: Thu, 27 Jun 2002 17:57:11 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   27-Jun-2002 17:57:11
  Branch: HEAD                             Handle: 2002062716571000

  Modified files:
    ossp-pkg/tabea          tabea.cgi

  Log:
    Appended newuser and deluser part

  Summary:
    Revision    Changes     Path
    1.30        +243 -32    ossp-pkg/tabea/tabea.cgi
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea.cgi
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 tabea.cgi
  --- ossp-pkg/tabea/tabea.cgi	20 Jun 2002 15:09:05 -0000	1.29
  +++ ossp-pkg/tabea/tabea.cgi	27 Jun 2002 15:57:10 -0000	1.30
  @@ -28,6 +28,7 @@
   ##  tabea.cgi: Tabea CGI (syntax: Perl)
   ##
   
  +
   require 5.000;
   use strict;
   use IO;
  @@ -93,8 +94,8 @@
   
   my $form = '';
   
  -for my $name (qw(admin cfgedit changepwd changer chpwd confr copy copyc copyt del d2user duser \
  -                 edit logout mainw new newf newuser nuser run save view )) {
  +for my $name (qw(admin cfgedit changepwd changer chpwd confr copy copyc copyt del d2user d3user \
  +                duser edit logout mainw new newf newuser nuser run save view )) {
       my $val = $cgi->param("dialog_$name") || "";
       if ($val ne '') {
           $form = $name;
  @@ -178,12 +179,16 @@
      $page .= &newuser($cgi->param('akt_user'));
   }
   elsif ($form eq 'duser' ) {
  -    $page .= &duser($cgi->param('akt_user') )
  +    $page .= &duser($akt_user);
  +}
  +
  +elsif ($form eq 'd2user' ) {
  +    $page .= &d2user($akt_user);
   }
   
  -#elsif ($form eq 'duser' ) {
  -#    $page .= &duser($cgi->param('akt_user') )
  -#}
  +elsif ($form eq 'd3user' ) {
  +    $page .= &d3user($akt_user);
  +}
   
   elsif ($form eq 'cfgedit' ) {
   #    $page .= &run($cgi->param('configslist') );
  @@ -201,6 +206,8 @@
   
   $page .= $cgi->hidden(-name => 'password', -default => $password);
   $page .= $cgi->hidden(-name => 'username', -default => $username);
  +$page .= $cgi->hidden(-name => 'akt_user', -default => $akt_user);
  +$page .= $cgi->hidden(-name => 'del_u_files', -default => $cgi->param('del_u_files'));
   
   # A special for admin section and chpw for tabea
   #$page .= $cgi->hidden(-name => 'akt_user', -default => $akt_user);
  @@ -843,18 +850,29 @@
       my $userlist = &get_userlist($cfghash{'BaseDir'} . $cfghash{'ConfigDir'});
       my @userlistarray = split(/\s/, $userlist);
      
  -     
  +    $akt_user = $username; 
       $text .= "Username: $username; User: $user"; 
       $text .= "<table>" .
       "<td>".
  -    $cgi->popup_menu(
  -        -name => 'akt_user',
  -        -value => [@userlistarray],
  -#        -default=>'ps',
  -#        -default => 'ps',
  -        -default => $username,
  -#        -default => $cfghash{'TabeaUser'}
  -    ) .
  +
  +
  +#    $cgi->popup_menu(
  +#        -name => 'akt_user',
  +#        -value => [@userlistarray],
  +#        -default => $username,
  +#    ) .
  +    "<select name=akt_user size=1>" ;
  +    foreach (@userlistarray) {
  +        if ($_ =~ $username) {
  +            $text .= "<option selected>$_</option>" ;
  +        } else {
  +            $text .= "<option>$_</option>" ;
  +        }
  +
  +    }
  +
  +    $text .= "</select>" .
  +
       "</td>" .
       "<td>" .
   
  @@ -1059,9 +1077,14 @@
   ########################################################################################
       my ($nuser) = @_;
       my $ntext;
  -    my $pwfile = $cfghash{'BaseDir'}.$cfghash{'PasswdFile'};
  -    my $pwin;
  -    my $pwfiletext;
  +    my $pwdfile = $cfghash{'BaseDir'}.$cfghash{'PasswdFile'};
  +    my $pwdin;
  +    my $pwdfiletext;
  +    my $pwd;
  +    my $uname;
  +    my $dirlist;
  +    my $nu_error = 1;
  +    
   
       $ntext .= "Here is newuser $nuser<br>";
   
  @@ -1076,22 +1099,66 @@
           $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
       } else {
           $ntext .= "Writing new user";
  -        $pwin = IO::File->new("<$pwfile");
  -        if(defined $pwin) {
  -            $pwfiletext .= $_ while <$pwin>;
   
  -        }
  -        $pwin->close();    
  -        
  +        $ntext .= "<br>Checking passwdord file<br>" ;
  +        $pwdin = IO::File->new("<$pwdfile");
  +        while (<$pwdin>) {
  +            $_ =~ s|^(\w+):(.+)$|{$uname=$1}|eg;
  +            ( $uname =~ $nuser ) && do { $nu_error = 0; };
  +        } 
  +        $pwdin->close();    
  +
  +        $ntext .= "<br>Checking subdir file<br>" ;
   
  -# Checken, ob User in pw
  -# Checken, ob Subdir gleichen Namens existiert
  +        $dirlist = &readsubdir($cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/");
  +       
  +        $ntext .= "<br>$dirlist<br>" ; 
  +        ( $dirlist =~ m|$nuser| ) && do { $nu_error = 0; };
  +
  +        if ($nu_error) {
  +            $ntext .= "<br>Creatin subdir file<br>" ;
  +            my $newdir = $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $nuser;
  +            system("mkdir  $newdir ") ;
  +
  +            $dirlist = &readsubdir($cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/");
  +            my $dirok = 1;
  +            ( $dirlist !~ m|$nuser| ) && do { $dirok = 0; };
  +            if ($dirok) {
  +                $ntext .= "<br>Reading password file<br>" ;
  +                $pwdin = IO::File->new("<$pwdfile");
  +                while (<$pwdin>) {
  +                    $pwdfiletext .= $_;
  +                    $_ =~ s|^(\w+):(.+)$|{$uname=$1; $pwd=$2}|eg;
  +                    # I need an existing password as an example
  +                }
  +                $pwdin->close();    
  +                $ntext .= "<br><br>" . "$pwdfiletext" . "<br><br>" ;
  +            
  +                $pwdfiletext .= $nuser . ":" . (crypt('foobar', $pwd)) ;
  +
  +
  +                $ntext .= "<br><br>" . "$pwdfiletext" . "<br><br>" ;
  +
  +                $pwdin = IO::File->new(">$pwdfile");
  +                print $pwdin $pwdfiletext;
  +                $pwdin->close();    
  +            }
   
  -# Unterverzeichnis anlegen
  -# PW Eintrag machen    
  +           
  +            $ntext .= "<font color=red>" .
  +                "User $nuser created</font><br>" .
  +                $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
  +                
   
  +        } else {
  +            $ntext .= "<font color=red>" .
  +            "<br>User exists <br><br>" .
  +            "</font>" .
  +            $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
  +        }
       }
   
  +
       return $ntext;
   }
   ########################################################################################
  @@ -1101,9 +1168,75 @@
   ########################################################################################
       my ($duser) = @_;
       my $text;
  +    my $derror = 0;
   
  +    if ($duser =~ $cfghash{'TabeaUser'} ) {
  +        $derror = 1;
  +    }
   
  -    $text .= 
  +    if (! $derror ) {
  +        $text .= 
  +    
  +        "<table>" .
  +        "<td>" .
  +        "<font color=red>" . 
  +        "User to delete :" .
  +        "</font>" .
  +        "</td>".
  +
  +        "<td>" .
  +        "$duser" .
  +        "</td>" .
  +
  +    
  +        "</table>" .
  +
  +        "<br><br>" .
  +
  +#    $cgi->checkbox(-name=>'del_u_files',
  +#                   -value=>'del_files',
  +#                   -checked=>'',
  +#                   -label=>'Delete files of user',
  +#                   -checked=> 
  +#                  ) .
  +        "<input type=\"checkbox\" name=\"del_u_files\" value=\"del_files\" />Delete files of user" .
  +
  +        "<br><br><br>" .
  +
  +        "<table>" .
  +
  +        "<td>" .
  +        $cgi->submit(-name => 'dialog_mainw', -value => 'Back').
  +        "</td>" .
  +        "<td>" .
  +        $cgi->submit(-name => 'dialog_d2user', -value => 'Del User').
  +        "</td>" .
  +
  +        "</table>" ;
  +
  +    } else {
  +        $text .=
  +        "<font color=red>" .
  +        "It is not allowed to delet tabea user!!!" .
  +        "</font>" .
  +        "<br><br>" .
  +        $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
  +    }
  +
  +
  +    return $text;
  +}
  +########################################################################################
  +
  +
  +
  +########################################################################################
  +sub d2user {
  +########################################################################################
  +    my ($duser) = @_;
  +    my $dtext;
  +
  +    $dtext .= 
       
       "<table>" .
       "<td>" .
  @@ -1115,27 +1248,105 @@
       "<td>" .
       "$duser" .
       "</td>" .
  -
       
       "</table>" .
       
       "<br><br>" .
   
  +    "And his files wil be " ;
  +
  +    $dtext .= $cgi->param('del_u_files') . "<br>";
  +
  +    if ($cgi->param('del_u_files')) {
  +        $dtext .= "<br>The files of the user will be deleted" ;    
  +    } else {
  +        $dtext .= "<br>The files of the user will be copied" ;    
  +    }
  +    
  +    $dtext .= "<br><br><br>" .
  +
       "<table>" .
   
       "<td>" .
       $cgi->submit(-name => 'dialog_mainw', -value => 'Back').
       "</td>" .
       "<td>" .
  -    $cgi->submit(-name => 'dialog_d2user', -value => 'Del User').
  +    $cgi->submit(-name => 'dialog_d3user', -value => 'Really delete user').
       "</td>" .
   
       "</table>" ;
   
  -    return $text;
  +
  +    return $dtext;
   }
   ########################################################################################
   
  +
  +########################################################################################
  +sub d3user {
  +########################################################################################
  +    my ($duser) = @_;
  +    my $d3text;
  +    my $delfiles = $cgi->param('del_u_files');
  +    my $deldir = $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $duser . "/" ;
  +    my $pwdfile = $cfghash{'BaseDir'}.$cfghash{'PasswdFile'};
  +    my $pwdin;
  +    my $temptxt;
  +    my $pwdfiletext;
  +    my $uname;
  +
  +
  +    $d3text .= 
  +    
  +    "<table>" .
  +    "<td>" .
  +    "<font color=red>" . 
  +    "User to delete :" .
  +    "</font>" .
  +    "</td>".
  +
  +    "<td>" .
  +    "$duser" .
  +    "</td>" .
  +    
  +    "</table>" .
  +
  +    "<br>" ;
  +
  +    if ( ! $cgi->param('del_u_files')) {
  +        
  +        my $destdir = $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $cfghash {'TabeaUser'} ."/" ;
  +        my $copyfiles = &readdir($deldir);
  +        my @copfilesarray = split(/ /,$copyfiles);
  +
  +        foreach (@copfilesarray) {
  +
  +            system("cp $deldir$_ $destdir$duser.$_") && die "Copy failed";
  +        }
  +    }
  +
  +    system("rm -rf $deldir");
  +
  +    $pwdin = IO::File->new("<$pwdfile");
  +    while (<$pwdin>) {
  +        $temptxt = $_ ;
  +        $_ =~ s|^(\w+):(.+)$|{$uname=$1}|eg;
  +        if ($uname !~ $duser) { $pwdfiletext .= $temptxt; }
  +    }
  +    $pwdin->close();
  +    $pwdin = IO::File->new(">$pwdfile");
  +    print $pwdin $pwdfiletext;
  +    $pwdin->close();
  +
  +    $d3text .= "<br>" .
  +
  +    $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
  +
  +
  +    return $d3text;
  +}
  +########################################################################################
  +    
   
   ########################################################################################
   sub copy {

From ossp-cvs-owner@ossp.org  Fri Jun 28 16:20:24 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5920076554; Fri, 28 Jun 2002 16:20:24 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.c rc.h rc_anal.c rc_private.h rc_proc.c rc_...
Message-Id: <20020628142024.5920076554@mail.ossp.org>
Date: Fri, 28 Jun 2002 16:20:24 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   28-Jun-2002 16:20:24
  Branch: HEAD                             Handle: 2002062815202300

  Modified files:
    ossp-pkg/rc             rc.c rc.h rc_anal.c rc_private.h rc_proc.c
                            rc_script.c

  Log:
    Fixed memory bound violation and added section parsing logic.

  Summary:
    Revision    Changes     Path
    1.34        +1  -0      ossp-pkg/rc/rc.c
    1.32        +1  -0      ossp-pkg/rc/rc.h
    1.7         +3  -1      ossp-pkg/rc/rc_anal.c
    1.17        +1  -0      ossp-pkg/rc/rc_private.h
    1.7         +34 -20     ossp-pkg/rc/rc_proc.c
    1.2         +28 -1      ossp-pkg/rc/rc_script.c
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.c
  ============================================================
  $ cvs diff -u -r1.33 -r1.34 rc.c
  --- ossp-pkg/rc/rc.c	26 Jun 2002 14:42:53 -0000	1.33
  +++ ossp-pkg/rc/rc.c	28 Jun 2002 14:20:23 -0000	1.34
  @@ -81,3 +81,4 @@
   
       exit(0);        /* Return success */
   }
  +
  Index: ossp-pkg/rc/rc.h
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 rc.h
  --- ossp-pkg/rc/rc.h	27 Jun 2002 15:35:58 -0000	1.31
  +++ ossp-pkg/rc/rc.h	28 Jun 2002 14:20:23 -0000	1.32
  @@ -109,6 +109,7 @@
   /* Script function prototypes */
   rc_script_t *scriptNew(void);
   rc_return_t scriptAppend(rc_script_t *, char *, size_t);
  +const char *scriptSection(rc_script_t *, const char *);
   rc_return_t scriptDump(rc_script_t *);
   rc_return_t scriptDelete(rc_script_t *);
   
  Index: ossp-pkg/rc/rc_anal.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 rc_anal.c
  --- ossp-pkg/rc/rc_anal.c	27 Jun 2002 15:35:58 -0000	1.6
  +++ ossp-pkg/rc/rc_anal.c	28 Jun 2002 14:20:23 -0000	1.7
  @@ -55,6 +55,8 @@
   ************************************************/
   rc_return_t analRcs(rc_anal_t **ppInst, const char *kszName)
   {
  +    assert(!(*ppInst)->m_szRcs); /* Rcs should be NULL until we set them */
  +
       if (!kszName) {
           (*ppInst)->m_szRcs = NULL;
   /*        RC_THROW(RC_WRN_NUL);*/
  @@ -64,7 +66,6 @@
           if (strcmp(kszName, RC_GLOB_WILD)) {
               *(*ppInst)->m_szRcs = strdup("rc.");
               strcat(*(*ppInst)->m_szRcs, kszName);
  -            *((*ppInst)->m_szRcs + sizeof(char **)) = NULL; /* Terminate list */
           }
           else /* Wildcard rcfile indicates we must glob the locs directories */
               analGloblocs(ppInst);
  @@ -241,3 +242,4 @@
   
       return(RC_THROW(RC_OK));
   }
  +
  Index: ossp-pkg/rc/rc_private.h
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 rc_private.h
  --- ossp-pkg/rc/rc_private.h	27 Jun 2002 15:35:58 -0000	1.16
  +++ ossp-pkg/rc/rc_private.h	28 Jun 2002 14:20:23 -0000	1.17
  @@ -88,3 +88,4 @@
   } rc_proc_t;
   
   #endif /* __OSSPRC_PRIVATE_H__ */
  +
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	27 Jun 2002 15:35:58 -0000	1.6
  +++ ossp-pkg/rc/rc_proc.c	28 Jun 2002 14:20:23 -0000	1.7
  @@ -76,11 +76,14 @@
       int nFdfunc   = 0;
       int nRet      = 0;
       int nIter     = 0;
  -    char *szBuf   = NULL;
  +    char *sBuf    = NULL;
  +    char *szSec   = NULL;
       char *szLocex = NULL;
  +    rc_script_t *pTempscript = NULL;
   
       assert(*pRc->m_pAnal->m_szRcs);
  -    szBuf = (char *)calloc(0, RC_READ_BUFSIZE);
  +    sBuf = (char *)calloc(1, RC_READ_BUFSIZE);
  +    pTempscript = scriptNew();
   
       /* Open the func file if it exists in the configuration */
       if (pRc->m_pAnal->m_szFuncs) {
  @@ -90,7 +93,19 @@
           }
       }
   
  -    /* Keep reading possibly globbed rc files until there are none left */
  +    /* Read the func file if it was opened successfully */
  +    /* We unfortunately make the assumption that 0 is an invalid filedesc */
  +    if (nFdfunc) {
  +        /* Read data from the func file */
  +        while ((nRet = read(nFdfunc, sBuf, RC_READ_BUFSIZE)) > 0) {
  +            scriptAppend(pRc->m_pScript, sBuf, nRet);
  +        }
  +        if (nRet == -1) /* Handle read errors */
  +            TRACE("Problem with procPopulate read(2)");
  +    /*        RC_THROW(RC_ERR_IO);*/
  +    }
  +
  +    /* Iteratively read possibly globbed rc files */
       for (nIter = 0; pRc->m_pAnal->m_szRcs[nIter]; nIter++)
       {
           szLocex = (char *)malloc(strlen(pRc->m_pAnal->m_szLocs) + strlen(pRc->m_pAnal->m_szRcs[nIter]) + 2);
  @@ -103,24 +118,17 @@
               fprintf(stderr, "Problem with procPopulate open(2) of %s\n", szLocex);
           }
   
  -        /* Read the func file if it was opened successfully */
  -        /* We unfortunately make the assumption that 0 is an invalid filedesc */
  -        if (nFdfunc) {
  -            /* Read data from the func file */
  -            while ((nRet = read(nFdfunc, szBuf, RC_READ_BUFSIZE)) > 0)
  -                scriptAppend(pRc->m_pScript, szBuf, nRet);
  -            if (nRet == -1) /* Handle read errors */
  -                TRACE("Problem with procPopulate read(2)");
  -        /*        RC_THROW(RC_ERR_IO);*/
  -        }
  -
  -        /* Read data from the rc file */
  -        while ((nRet = read(nFdrc, szBuf, RC_READ_BUFSIZE)) > 0)
  -            scriptAppend(pRc->m_pScript, szBuf, nRet);
  +        /* Read data from the rc file into a temporary script */
  +        while ((nRet = read(nFdrc, sBuf, RC_READ_BUFSIZE)) > 0)
  +            scriptAppend(pTempscript, sBuf, nRet);
           if (nRet == -1) /* Handle read errors */
               TRACE("Problem with procPopulate read(2)");
       /*        RC_THROW(RC_ERR_IO);*/
   
  +        /* Extract a section from the temp script, and append it to other one */
  +        szSec = scriptSection(pTempscript, "start");       /* Extract section */
  +        scriptAppend(pRc->m_pScript, szSec, strlen(szSec)); /* Append section */
  +
           free(szLocex);  /* Free our temporarily constructed Location + Rcfile */
           szLocex = NULL;
           close(nFdrc);   /* Close Rc file handle */
  @@ -129,9 +137,14 @@
       close(nFdfunc);     /* Close Func file handle */
   
       /* Memory cleanups */
  -    if (szBuf) {
  -        free(szBuf);
  -        szBuf = NULL;
  +    scriptDelete(pTempscript);
  +    if (sBuf) {
  +        free(sBuf);
  +        sBuf = NULL;
  +    }
  +    if (szSec) {
  +        free(szSec);
  +        szSec = NULL;
       }
   
       return(RC_THROW(RC_OK));
  @@ -164,3 +177,4 @@
   
       return(RC_THROW(RC_OK));
   }
  +
  Index: ossp-pkg/rc/rc_script.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 rc_script.c
  --- ossp-pkg/rc/rc_script.c	26 Jun 2002 14:11:16 -0000	1.1
  +++ ossp-pkg/rc/rc_script.c	28 Jun 2002 14:20:23 -0000	1.2
  @@ -56,6 +56,8 @@
       int nResize     = 0;
       void *pvRealloc = NULL;
   
  +    assert(pScript); /* Script parameter must be valid */
  +
       if (!szInbuf) {
   TRACE("Problem with appendScript");
   /*        return(RC_THROW(RC_ERR_USE));*/
  @@ -82,7 +84,7 @@
       else
           strncpy(pvRealloc, szInbuf, Size);
   
  -    /* Coerce strings into one Script again */
  +    /* Cleanup and deallocate memory */
       if (*pScript) {
           free(*pScript);
           *pScript = NULL;
  @@ -90,6 +92,31 @@
       *pScript = pvRealloc;
   
       return(RC_THROW(RC_OK));
  +}
  +
  +/************************************************
  +* scriptSection(rc_script_t *, const char *)    *
  +* Parse a script for a given section            *
  +************************************************/
  +const char *scriptSection(rc_script_t *pScript, const char *kszSecname)
  +{
  +    char *szTempout = NULL;
  +    char *szTmpsec  = NULL;
  +    char *piStart   = NULL;
  +    char *piEnd     = NULL;
  +
  +    szTmpsec = malloc(strlen(kszSecname) + sizeof(char));
  +    strcpy(szTmpsec, "%");
  +    strcat(szTmpsec, kszSecname);
  +
  +    piStart = strstr(*pScript, szTmpsec);            /* Find start of section */
  +    piStart = strstr(piStart, "\n") + sizeof(char);  /* Wrap to next line     */
  +    piEnd   = strstr(piStart + sizeof(char), "%"); /* FIXME: Remove hardcoded */
  +    szTempout = malloc(piEnd - piStart + sizeof(char));
  +    strncpy(szTempout, piStart, piEnd - piStart);
  +    *(szTempout + (piEnd - piStart)) = NULL; /* Terminate the outgoing string */
  +
  +    return(szTempout);
   }
   
   /************************************************

From ossp-cvs-owner@ossp.org  Fri Jun 28 17:01:47 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DE28676565; Fri, 28 Jun 2002 17:01:46 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea-brainstorming
Message-Id: <20020628150146.DE28676565@mail.ossp.org>
Date: Fri, 28 Jun 2002 17:01:46 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   28-Jun-2002 17:01:46
  Branch: HEAD                             Handle: 2002062816014600

  Modified files:
    ossp-pkg/tabea          tabea-brainstorming

  Log:
    Appended information about Input type=image

  Summary:
    Revision    Changes     Path
    1.2         +6  -0      ossp-pkg/tabea/tabea-brainstorming
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea-brainstorming
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 tabea-brainstorming
  --- ossp-pkg/tabea/tabea-brainstorming	27 Jun 2002 13:48:19 -0000	1.1
  +++ ossp-pkg/tabea/tabea-brainstorming	28 Jun 2002 15:01:46 -0000	1.2
  @@ -199,6 +199,12 @@
   
       8.1.2.5. Image Pixel: INPUT TYPE=IMAGE
   
  +    <input type=image name=point src=map.gif>
  +    In a form this type allows an image to be used as a substitution
  +    for a submit button.
  +
  +    <img alt=\"gif not found\" src=1.gif>
  +
       item {
           name point
           visible "Choose a point on the map:"

From ossp-cvs-owner@ossp.org  Fri Jun 28 17:02:09 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4936E76565; Fri, 28 Jun 2002 17:02:09 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea.cgi
Message-Id: <20020628150209.4936E76565@mail.ossp.org>
Date: Fri, 28 Jun 2002 17:02:09 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   28-Jun-2002 17:02:09
  Branch: HEAD                             Handle: 2002062816020800

  Modified files:
    ossp-pkg/tabea          tabea.cgi

  Log:
    Appended cfgedit part

  Summary:
    Revision    Changes     Path
    1.31        +19 -28     ossp-pkg/tabea/tabea.cgi
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea.cgi
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 tabea.cgi
  --- ossp-pkg/tabea/tabea.cgi	27 Jun 2002 15:57:10 -0000	1.30
  +++ ossp-pkg/tabea/tabea.cgi	28 Jun 2002 15:02:08 -0000	1.31
  @@ -191,7 +191,7 @@
   }
   
   elsif ($form eq 'cfgedit' ) {
  -#    $page .= &run($cgi->param('configslist') );
  +    $page .= &cfgedit();
   }
   elsif ($form eq 'logout' ) {
       $cgi->param(-name => 'username', -value => "");
  @@ -209,8 +209,6 @@
   $page .= $cgi->hidden(-name => 'akt_user', -default => $akt_user);
   $page .= $cgi->hidden(-name => 'del_u_files', -default => $cgi->param('del_u_files'));
   
  -# A special for admin section and chpw for tabea
  -#$page .= $cgi->hidden(-name => 'akt_user', -default => $akt_user);
   $page .= $cgi->endform;
   
   my $out = $MY->{TEMPLATE};
  @@ -851,7 +849,6 @@
       my @userlistarray = split(/\s/, $userlist);
      
       $akt_user = $username; 
  -    $text .= "Username: $username; User: $user"; 
       $text .= "<table>" .
       "<td>".
   
  @@ -922,7 +919,7 @@
       my ($user) = @_;
       my $ctext;
   
  -    $ctext .= "<br>Aktueller User: $user<br>";
  +    $ctext .= "<br>Changing the password of $user<br><br>";
       $ctext .= "<table cellspacing=0 cellpadding=0>" ;
       if ( (($username eq $cfghash{'TabeaUser'}) && ($user eq $cfghash{'TabeaUser'}) )
              || ($username ne $cfghash{'TabeaUser'}) ) { 
  @@ -1086,8 +1083,6 @@
       my $nu_error = 1;
       
   
  -    $ntext .= "Here is newuser $nuser<br>";
  -
       if ( $nuser !~ /^[A-Za-z0-9]+$/ ) {
           $nuser = "";
       }
  @@ -1098,9 +1093,6 @@
           "</font>" .
           $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
       } else {
  -        $ntext .= "Writing new user";
  -
  -        $ntext .= "<br>Checking passwdord file<br>" ;
           $pwdin = IO::File->new("<$pwdfile");
           while (<$pwdin>) {
               $_ =~ s|^(\w+):(.+)$|{$uname=$1}|eg;
  @@ -1108,15 +1100,11 @@
           } 
           $pwdin->close();    
   
  -        $ntext .= "<br>Checking subdir file<br>" ;
  -
           $dirlist = &readsubdir($cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/");
          
  -        $ntext .= "<br>$dirlist<br>" ; 
           ( $dirlist =~ m|$nuser| ) && do { $nu_error = 0; };
   
           if ($nu_error) {
  -            $ntext .= "<br>Creatin subdir file<br>" ;
               my $newdir = $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $nuser;
               system("mkdir  $newdir ") ;
   
  @@ -1124,7 +1112,6 @@
               my $dirok = 1;
               ( $dirlist !~ m|$nuser| ) && do { $dirok = 0; };
               if ($dirok) {
  -                $ntext .= "<br>Reading password file<br>" ;
                   $pwdin = IO::File->new("<$pwdfile");
                   while (<$pwdin>) {
                       $pwdfiletext .= $_;
  @@ -1132,13 +1119,9 @@
                       # I need an existing password as an example
                   }
                   $pwdin->close();    
  -                $ntext .= "<br><br>" . "$pwdfiletext" . "<br><br>" ;
               
                   $pwdfiletext .= $nuser . ":" . (crypt('foobar', $pwd)) ;
   
  -
  -                $ntext .= "<br><br>" . "$pwdfiletext" . "<br><br>" ;
  -
                   $pwdin = IO::File->new(">$pwdfile");
                   print $pwdin $pwdfiletext;
                   $pwdin->close();    
  @@ -1146,7 +1129,7 @@
   
              
               $ntext .= "<font color=red>" .
  -                "User $nuser created</font><br>" .
  +                "User $nuser created</font><br><br>" .
                   $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
                   
   
  @@ -1170,7 +1153,7 @@
       my $text;
       my $derror = 0;
   
  -    if ($duser =~ $cfghash{'TabeaUser'} ) {
  +    if ($duser =~ m/^$cfghash{'TabeaUser'}$/ ) {
           $derror = 1;
       }
   
  @@ -1249,14 +1232,8 @@
       "$duser" .
       "</td>" .
       
  -    "</table>" .
  +    "</table>" ;
       
  -    "<br><br>" .
  -
  -    "And his files wil be " ;
  -
  -    $dtext .= $cgi->param('del_u_files') . "<br>";
  -
       if ($cgi->param('del_u_files')) {
           $dtext .= "<br>The files of the user will be deleted" ;    
       } else {
  @@ -1346,7 +1323,21 @@
       return $d3text;
   }
   ########################################################################################
  +
       
  +########################################################################################
  +sub cfgedit {
  +########################################################################################
  +    my $text;
  +
  +    $text .= &editconfig($cfghash{'BaseDir'} . "tabea.cfg", 'w', $cfghash{'TabeaUser'} );
  +    $text .= $cgi->hidden(-name => 'editfile', -default => $cfghash{'BaseDir'} . "tabea.cfg" );
  +
  +
  +    return $text;
  +}
  +########################################################################################
  +
   
   ########################################################################################
   sub copy {

From ossp-cvs-owner@ossp.org  Fri Jun 28 19:43:25 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AED9F76565; Fri, 28 Jun 2002 19:43:24 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc 00TODO rc.c rc.h rc_anal.c rc_proc.c rc_script...
Message-Id: <20020628174324.AED9F76565@mail.ossp.org>
Date: Fri, 28 Jun 2002 19:43:24 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   28-Jun-2002 19:43:24
  Branch: HEAD                             Handle: 2002062818432300

  Modified files:
    ossp-pkg/rc             00TODO rc.c rc.h rc_anal.c rc_proc.c rc_script.c
                            rc_test.sh

  Log:
    Improved section parsing and added back most error condition logic. All
    combinations of wildcard globbing, multiple section parsing, and error
    handling now work (except for a problem relating to or using ex).

  Summary:
    Revision    Changes     Path
    1.27        +1  -0      ossp-pkg/rc/00TODO
    1.35        +30 -16     ossp-pkg/rc/rc.c
    1.33        +8  -5      ossp-pkg/rc/rc.h
    1.8         +28 -13     ossp-pkg/rc/rc_anal.c
    1.8         +30 -20     ossp-pkg/rc/rc_proc.c
    1.3         +12 -4      ossp-pkg/rc/rc_script.c
    1.13        +18 -5      ossp-pkg/rc/rc_test.sh
  ____________________________________________________________________________

  Index: ossp-pkg/rc/00TODO
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 00TODO
  --- ossp-pkg/rc/00TODO	26 Jun 2002 14:11:16 -0000	1.26
  +++ ossp-pkg/rc/00TODO	28 Jun 2002 17:43:23 -0000	1.27
  @@ -41,6 +41,7 @@
     Remove redundant method prototypes in main header file.
     Relocate rc_anal_t and other to approproate header files rc_anal.h.
     I think rc_anal is violating the singleton configuration.
  +  Totally remove warnings from the exception logic
   
   Detailed ;-) project plan
   -------------------------
  Index: ossp-pkg/rc/rc.c
  ============================================================
  $ cvs diff -u -r1.34 -r1.35 rc.c
  --- ossp-pkg/rc/rc.c	28 Jun 2002 14:20:23 -0000	1.34
  +++ ossp-pkg/rc/rc.c	28 Jun 2002 17:43:23 -0000	1.35
  @@ -40,26 +40,31 @@
   {
       ex_t Except;
   
  -    ex_try {                /* Configuration block                        */
  +    try {                /* Configuration block                        */
           configNew();        /* Construct a new configuration              */
           configLoad(argc, (const char **)argv); /* Load cli, env, and conf */
           configVerify();     /* Test for usage, help, and version options  */
       }
  -    ex_catch(Except) {      /* Exceptions of the configuration block      */
  +    catch(Except) {      /* Exceptions of the configuration block      */
           if ((rc_return_t)Except.ex_value == RC_WRN_TRM)
               exit(0);
           else if ((rc_return_t)Except.ex_value == RC_ERR_USE)
               clioptPrintusage();
  -        else {
  -            fprintf(stderr, "Class '%s' threw exception %d in %s:%s():%d.\n",\
  -                (char *)Except.ex_class, (int)Except.ex_value,\
  -                Except.ex_file, Except.ex_func, Except.ex_line);
  +        else
  +        if (FAILED((rc_return_t)Except.ex_value)) { /* Error condition */
  +            fprintf(stderr, "    Error condition in proc, class '%s',\n    exception %d in %s:%s():%d.\n", (char *)Except.ex_class, (int)Except.ex_value, Except.ex_file, Except.ex_func, Except.ex_line);
  +            exit(1); /* Return failure */
           }
  -        if (FAILED((rc_return_t)Except.ex_value)) /* NOP on warnings */
  -            exit(1); /* Report failure and exit the program */
  +#ifdef DEBUG
  +        else /* Warning condition */
  +            fprintf(stderr, "    Warning condition in proc, class '%s',\n    exception %d in %s:%s():%d.\n", (char *)Except.ex_class, (int)Except.ex_value, Except.ex_file, Except.ex_func, Except.ex_line);
  +#else
  +        else /* Warning condition */
  +            RC_NOP;  /* No operation on warnings */
  +#endif
       }
   
  -    ex_try { /* Main processing block, the script is built here */
  +    try { /* Main processing block, the script is built here */
           rc_proc_t *pProc = NULL;
           pProc = procNew();      /* Construct a new processor, build script  */
           procPopulate(pProc);    /* Populate with run commands               */
  @@ -67,16 +72,25 @@
           procDelete(pProc);      /* Destroy the processor                    */
           configDelete();         /* Destroy the configuration                */
       }
  -    ex_catch(Except) {  /* Error exceptions thrown during script processing */
  -        TRACE("Also, exception dans le processor bloque");
  -        if (FAILED((rc_return_t)Except.ex_value)) { /* NOP on warnings */
  -            fprintf(stderr, "Class '%s' threw exception %d in %s:%s():%d.\n",\
  -                (char *)Except.ex_class, (int)Except.ex_value,\
  -                Except.ex_file, Except.ex_func, Except.ex_line);
  +    catch(Except) {  /* Error exceptions thrown during script processing */
  +        if (FAILED((rc_return_t)Except.ex_value)) { /* Error condition */
  +            if ((rc_return_t)Except.ex_value == RC_ERR_FNC)
  +                fprintf(stderr, "    Error condition, function file could not be opened.\n");
  +            else if ((rc_return_t)Except.ex_value == RC_ERR_DIR)
  +                fprintf(stderr, "    Error condition, location dir could not be opened.\n");
  +            else if ((rc_return_t)Except.ex_value == RC_ERR_RCF)
  +                fprintf(stderr, "    Error condition, rc file could not be opened.\n");
  +            else
  +                fprintf(stderr, "    Error condition in proc, class '%s',\n    exception %d in %s:%s():%d.\n", (char *)Except.ex_class, (int)Except.ex_value, Except.ex_file, Except.ex_func, Except.ex_line);
               exit(1); /* Return failure */
           }
  -        else
  +#ifdef DEBUG
  +        else /* Warning condition */
  +            fprintf(stderr, "    Warning condition in proc, class '%s',\n    exception %d in %s:%s():%d.\n", (char *)Except.ex_class, (int)Except.ex_value, Except.ex_file, Except.ex_func, Except.ex_line);
  +#else
  +        else /* Warning condition */
               RC_NOP;  /* No operation on warnings */
  +#endif
       }
   
       exit(0);        /* Return success */
  Index: ossp-pkg/rc/rc.h
  ============================================================
  $ cvs diff -u -r1.32 -r1.33 rc.h
  --- ossp-pkg/rc/rc.h	28 Jun 2002 14:20:23 -0000	1.32
  +++ ossp-pkg/rc/rc.h	28 Jun 2002 17:43:23 -0000	1.33
  @@ -59,10 +59,13 @@
       RC_ERR_SYS = 5,  /* System error (see errno) */
       RC_ERR_IO  = 6,  /* Input/output error       */
       RC_ERR_INT = 7,  /* Internal error           */
  -    RC_WRN_0   = 8,  /* Warning base             */
  -    RC_WRN_OWR = 9,  /* Overwrite warning        */
  -    RC_WRN_NUL = 10, /* NULL pointer warning     */
  -    RC_WRN_TRM = 11  /* Request to terminate app */
  +    RC_ERR_FNC = 8,  /* Func file not found      */
  +    RC_ERR_DIR = 9,  /* Location dir not found   */
  +    RC_ERR_RCF = 10, /* Rc file not found        */
  +    RC_WRN_0   = 11, /* Warning base             */
  +    RC_WRN_OWR = 12, /* Overwrite warning        */
  +    RC_WRN_NUL = 13, /* NULL pointer warning     */
  +    RC_WRN_TRM = 14  /* Request to terminate app */
   } rc_return_t;
   
   /* Config function prototypes */
  @@ -109,7 +112,7 @@
   /* Script function prototypes */
   rc_script_t *scriptNew(void);
   rc_return_t scriptAppend(rc_script_t *, char *, size_t);
  -const char *scriptSection(rc_script_t *, const char *);
  +char *scriptSection(rc_script_t *, const char *);
   rc_return_t scriptDump(rc_script_t *);
   rc_return_t scriptDelete(rc_script_t *);
   
  Index: ossp-pkg/rc/rc_anal.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 rc_anal.c
  --- ossp-pkg/rc/rc_anal.c	28 Jun 2002 14:20:23 -0000	1.7
  +++ ossp-pkg/rc/rc_anal.c	28 Jun 2002 17:43:23 -0000	1.8
  @@ -55,20 +55,27 @@
   ************************************************/
   rc_return_t analRcs(rc_anal_t **ppInst, const char *kszName)
   {
  +    ex_t Except;
  +
       assert(!(*ppInst)->m_szRcs); /* Rcs should be NULL until we set them */
   
  -    if (!kszName) {
  -        (*ppInst)->m_szRcs = NULL;
  -/*        RC_THROW(RC_WRN_NUL);*/
  -    }
  +    if (!kszName)
  +        return(RC_THROW(RC_ERR_RCF));
       else { /* Only enter block with valid string, strdup can't handle NULL */
           (*ppInst)->m_szRcs = malloc(sizeof(char **));
           if (strcmp(kszName, RC_GLOB_WILD)) {
  -            *(*ppInst)->m_szRcs = strdup("rc.");
  +            *(*ppInst)->m_szRcs = strdup("rc."); /* FIXME: Remove hardcoded */
               strcat(*(*ppInst)->m_szRcs, kszName);
           }
  -        else /* Wildcard rcfile indicates we must glob the locs directories */
  -            analGloblocs(ppInst);
  +        else { /* Wildcard rcfile indicates we must glob the locs directories */
  +            try {
  +                analGloblocs(ppInst);
  +            }
  +            catch(Except) {
  +fprintf(stderr, "Placeholder until ex_ looping bug is fixed.\n");
  +/*                rethrow;*/ /* FIXME: Ralf! Looping problem with ex_ hier! */
  +            }
  +        }
       }
   
       return(RC_THROW(RC_OK));
  @@ -117,10 +124,16 @@
       if (!kszPathexpr) {
           (*ppInst)->m_szLocs = NULL;
           (*ppInst)->m_szLocs = strdup("./"); /* FIXME: Relocate default val */
  -/*        RC_THROW(RC_WRN_NUL);*/
  +/*        RC_THROW(RC_WRN_NUL);*/ /* FIXME: ex_ Illegal instruction - core dumped */
       }
       else { /* Only enter block with valid string, strdup can't handle NULL */
  -        (*ppInst)->m_szLocs = strdup(kszPathexpr);
  +        if (*(kszPathexpr + strlen(kszPathexpr)) != '/') {
  +            (*ppInst)->m_szLocs = malloc(strlen(kszPathexpr) + 2 * sizeof(char));
  +            strcpy((*ppInst)->m_szLocs, kszPathexpr);
  +            strcat((*ppInst)->m_szLocs, "/");
  +        }
  +        else
  +            (*ppInst)->m_szLocs = strdup(kszPathexpr);
       }
   
       return(RC_THROW(RC_OK));
  @@ -179,6 +192,10 @@
       pppFiles = malloc(sizeof(struct dirent));
       nCount = scandir((*ppInst)->m_szLocs, pppFiles, analFileselect, alphasort);
   
  +    /* Check out the health of this directory */
  +    if (nCount == -1)
  +        return(RC_THROW(RC_ERR_DIR));
  +
       /* Loop through file index setting Rf file names according to dirent */
       for (nIter = 0; nIter < nCount; ++nIter)
           (*ppInst)->m_szRcs[nIter] = strdup((*pppFiles)[nIter]->d_name);
  @@ -209,10 +226,8 @@
           analFuncs(&pInst, configGetval(RC_FNC_VAL));
           analSecs (&pInst, configGetsecs());
       }
  -    ex_catch(Except) {
  -TRACE("Parsing broke");
  -/*        rethrow;*/
  -    }
  +    ex_catch(Except)
  +        rethrow;
   
       return(RC_THROW(RC_OK));
   }
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	28 Jun 2002 14:20:23 -0000	1.7
  +++ ossp-pkg/rc/rc_proc.c	28 Jun 2002 17:43:23 -0000	1.8
  @@ -72,6 +72,7 @@
   ************************************************/
   rc_return_t procPopulate(rc_proc_t *pRc)
   {
  +    int i         = 0;
       int nFdrc     = 0;
       int nFdfunc   = 0;
       int nRet      = 0;
  @@ -83,13 +84,11 @@
   
       assert(*pRc->m_pAnal->m_szRcs);
       sBuf = (char *)calloc(1, RC_READ_BUFSIZE);
  -    pTempscript = scriptNew();
   
       /* Open the func file if it exists in the configuration */
       if (pRc->m_pAnal->m_szFuncs) {
           if ((nFdfunc = open(pRc->m_pAnal->m_szFuncs, O_RDONLY)) == -1) {
  -    /*        RC_THROW(RC_ERR_IO);*/
  -            fprintf(stderr, "Problem with procPopulate open(2) of %s\n", pRc->m_pAnal->m_szFuncs);
  +            RC_THROW(RC_ERR_FNC);
           }
       }
   
  @@ -101,35 +100,51 @@
               scriptAppend(pRc->m_pScript, sBuf, nRet);
           }
           if (nRet == -1) /* Handle read errors */
  -            TRACE("Problem with procPopulate read(2)");
  -    /*        RC_THROW(RC_ERR_IO);*/
  +            RC_THROW(RC_ERR_IO);
       }
   
       /* Iteratively read possibly globbed rc files */
       for (nIter = 0; pRc->m_pAnal->m_szRcs[nIter]; nIter++)
       {
  +        assert(*pRc->m_pAnal->m_szRcs); /* If one of these assertions fail, */
  +        assert(pRc->m_pAnal->m_szLocs); /* you've probably seen the ex_ bug */
  +
  +        /* Build the path name */
           szLocex = (char *)malloc(strlen(pRc->m_pAnal->m_szLocs) + strlen(pRc->m_pAnal->m_szRcs[nIter]) + 2);
           strcpy(szLocex, pRc->m_pAnal->m_szLocs);
           strcat(szLocex, pRc->m_pAnal->m_szRcs[nIter]);
   
           /* Open the rc file unconditionally */
  -        if ((nFdrc = open(szLocex, O_RDONLY)) == -1) {
  -    /*        RC_THROW(RC_ERR_IO);*/
  -            fprintf(stderr, "Problem with procPopulate open(2) of %s\n", szLocex);
  -        }
  +        if ((nFdrc = open(szLocex, O_RDONLY)) == -1)
  +            RC_THROW(RC_ERR_RCF);
   
           /* Read data from the rc file into a temporary script */
  +        pTempscript = scriptNew();
           while ((nRet = read(nFdrc, sBuf, RC_READ_BUFSIZE)) > 0)
               scriptAppend(pTempscript, sBuf, nRet);
  +
           if (nRet == -1) /* Handle read errors */
  -            TRACE("Problem with procPopulate read(2)");
  -    /*        RC_THROW(RC_ERR_IO);*/
  +            RC_THROW(RC_ERR_IO);
   
  -        /* Extract a section from the temp script, and append it to other one */
  -        szSec = scriptSection(pTempscript, "start");       /* Extract section */
  -        scriptAppend(pRc->m_pScript, szSec, strlen(szSec)); /* Append section */
  +        for (i = 0; pRc->m_pAnal->m_pszSecs[i]; i++) { /* Iterate over secvec */
  +            /* Extract a section from the temp script, and append it */
  +            szSec = scriptSection(pTempscript, pRc->m_pAnal->m_pszSecs[i]);
  +
  +            if (szSec) /* Only call append if the section lookup succeeded */
  +                scriptAppend(pRc->m_pScript, szSec, strlen(szSec));
  +            else
  +                fprintf(stderr, "#Warning: Missing section '%s' in %s!\n", pRc->m_pAnal->m_pszSecs[i], pRc->m_pAnal->m_szRcs[nIter]);
  +
  +            if (szSec) { /* Cleanup section string */
  +                free(szSec);
  +                szSec = NULL;
  +            }
  +        }
   
  -        free(szLocex);  /* Free our temporarily constructed Location + Rcfile */
  +        /* Clean up our crap */
  +        scriptDelete(pTempscript); /* Temp script */
  +        pTempscript = NULL;
  +        free(szLocex);  /* Temp Location + Rcfile */
           szLocex = NULL;
           close(nFdrc);   /* Close Rc file handle */
       }
  @@ -137,14 +152,9 @@
       close(nFdfunc);     /* Close Func file handle */
   
       /* Memory cleanups */
  -    scriptDelete(pTempscript);
       if (sBuf) {
           free(sBuf);
           sBuf = NULL;
  -    }
  -    if (szSec) {
  -        free(szSec);
  -        szSec = NULL;
       }
   
       return(RC_THROW(RC_OK));
  Index: ossp-pkg/rc/rc_script.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 rc_script.c
  --- ossp-pkg/rc/rc_script.c	28 Jun 2002 14:20:23 -0000	1.2
  +++ ossp-pkg/rc/rc_script.c	28 Jun 2002 17:43:23 -0000	1.3
  @@ -98,23 +98,31 @@
   * scriptSection(rc_script_t *, const char *)    *
   * Parse a script for a given section            *
   ************************************************/
  -const char *scriptSection(rc_script_t *pScript, const char *kszSecname)
  +char *scriptSection(rc_script_t *pScript, const char *kszSecname)
   {
       char *szTempout = NULL;
       char *szTmpsec  = NULL;
       char *piStart   = NULL;
       char *piEnd     = NULL;
   
  +    assert(pScript); /* Check for a valid incoming script */
       szTmpsec = malloc(strlen(kszSecname) + sizeof(char));
       strcpy(szTmpsec, "%");
       strcat(szTmpsec, kszSecname);
   
       piStart = strstr(*pScript, szTmpsec);            /* Find start of section */
  +    if (!piStart)                                    /* Short circuit if the  */
  +        return(NULL);                                /* section was not found */
  +
       piStart = strstr(piStart, "\n") + sizeof(char);  /* Wrap to next line     */
       piEnd   = strstr(piStart + sizeof(char), "%"); /* FIXME: Remove hardcoded */
  -    szTempout = malloc(piEnd - piStart + sizeof(char));
  -    strncpy(szTempout, piStart, piEnd - piStart);
  -    *(szTempout + (piEnd - piStart)) = NULL; /* Terminate the outgoing string */
  +    if (piEnd) {
  +        szTempout = malloc(piEnd - piStart + sizeof(char));
  +        strncpy(szTempout, piStart, piEnd - piStart);
  +        *(szTempout + (piEnd - piStart)) = NULL; /* Terminate outgoing string */
  +    }
  +    else /* We are operating on the last section of the file */
  +        szTempout = strdup(piStart); /* FIXME: Can we assume '\0' at EOF? */
   
       return(szTempout);
   }
  Index: ossp-pkg/rc/rc_test.sh
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 rc_test.sh
  --- ossp-pkg/rc/rc_test.sh	27 Jun 2002 15:35:58 -0000	1.12
  +++ ossp-pkg/rc/rc_test.sh	28 Jun 2002 17:43:23 -0000	1.13
  @@ -28,12 +28,12 @@
   #  test_rc.sh: Run-command processor test script
   
   # Test short options, should fail for false combination usage
  -echo "./rc -dvef rcfunc/rc.func -hilpsrvxLcqt samba start sleep=2 restart"
  -./rc -dVef rcfunc/rc.func -hilpsrvxLcqt samba start sleep=2 restart
  +#echo "./rc -dvef rcfunc/rc.func -hilpsrvxLcqt samba start sleep=2 restart"
  +#./rc -dVef rcfunc/rc.func -hilpsrvxLcqt samba start sleep=2 restart
   
   # Test short options, should succeed
  -echo; echo "./rc -derv -L /u/ms/ossp/rc/rcdings/rcfiles/rc.%{RCFILE:s/^all$/*/} -c /u/ms/ossp/rc/rcdings/rc.conf -f /u/ms/ossp/rc/rcfunc/rc.func -t /tmp openssh stop sleep=4 start daily minsize=2097152"
  -./rc -derv -L /u/ms/ossp/rc/rcdings/rcfiles/rc.d/rc.%{RCFILE:s/^all$/*/} -c /u/ms/ossp/rc/rcdings/rc.conf -f /u/ms/ossp/rc/rcfunc/rc.func -t /tmp openssh stop sleep=4 start daily minsize=2097152
  +#echo; echo "./rc -derv -L /u/ms/ossp/rc/rcdings/rcfiles/rc.%{RCFILE:s/^all$/*/} -c /u/ms/ossp/rc/rcdings/rc.conf -f /u/ms/ossp/rc/rcfunc/rc.func -t /tmp openssh stop sleep=4 start daily minsize=2097152"
  +#./rc -derv -L /u/ms/ossp/rc/rcdings/rcfiles/rc.d/rc.%{RCFILE:s/^all$/*/} -c /u/ms/ossp/rc/rcdings/rc.conf -f /u/ms/ossp/rc/rcfunc/rc.func -t /tmp openssh stop sleep=4 start daily minsize=2097152
   
   # Test some long options, should fail for false combination usage
   echo; echo "./rc --verbose --silent uucp stop sleep=6 start"
  @@ -72,8 +72,21 @@
   ./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func --tmp /tmp --debug --exec ntp sync
   echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func --tmp /tmp --debug --silent --exec ralf feed suppe"
   ./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func --tmp /tmp --debug --silent --exec ralf feed suppe
  +echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func
  +-L /u/ms/ossp/rc/rcfiles/ --tmp /tmp --silent --exec samba search finish destroy"
  +./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /u/ms/ossp/rc/rcfiles/ --tmp /tmp --silent --exec samba search finish destroy
  +
   echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /u/ms/ossp/rc/rcfiles/ --tmp /tmp --silent --exec all feed suppe"
  -./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /u/ms/ossp/rc/rcfiles/ --tmp /tmp --silent --exec all feed suppe
  +./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /u/ms/ossp/rc/rcfiles/ --tmp /tmp --silent --exec all go feed suppe
  +
  +echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --tmp /tmp --silent --debug --exec all config barf gag"
  +./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --tmp /tmp --silent --debug --exec all config barf gag
  +
  +echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --tmp /tmp --silent --debug --exec all config start"
  +./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --tmp /tmp --silent --debug --exec all config start
  +
  +echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --tmp /tmp --silent --debug --exec pam info"
  +./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --tmp /tmp --silent --debug --exec pam info
   
   # Next milestone
   #RequireOwner

From ossp-cvs-owner@ossp.org  Fri Jun 28 20:23:11 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6D666767CC; Fri, 28 Jun 2002 20:23:11 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc 00TODO rc.c rc_proc.c
Message-Id: <20020628182311.6D666767CC@mail.ossp.org>
Date: Fri, 28 Jun 2002 20:23:11 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   28-Jun-2002 20:23:11
  Branch: HEAD                             Handle: 2002062819231000

  Modified files:
    ossp-pkg/rc             00TODO rc.c rc_proc.c

  Log:
    Cleaned main program block and consolidated error handling into rcError().
    Also made output of missing section warnings optional according to --debug
    flag.

  Summary:
    Revision    Changes     Path
    1.28        +1  -0      ossp-pkg/rc/00TODO
    1.36        +39 -43     ossp-pkg/rc/rc.c
    1.9         +1  -1      ossp-pkg/rc/rc_proc.c
  ____________________________________________________________________________

  Index: ossp-pkg/rc/00TODO
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 00TODO
  --- ossp-pkg/rc/00TODO	28 Jun 2002 17:43:23 -0000	1.27
  +++ ossp-pkg/rc/00TODO	28 Jun 2002 18:23:10 -0000	1.28
  @@ -33,6 +33,7 @@
     Write interlocking increment for thread-safe increments.
     Convert some normal assert() to real runtime checks.
     Use str_hash von ossp str or static RC_XXX_VAL array from rc_option.h.
  +  Restore lost multiple location merging logic.
   
   Implementation
     Correct assertion, sanity check, and if () checks according to one standard.
  Index: ossp-pkg/rc/rc.c
  ============================================================
  $ cvs diff -u -r1.35 -r1.36 rc.c
  --- ossp-pkg/rc/rc.c	28 Jun 2002 17:43:23 -0000	1.35
  +++ ossp-pkg/rc/rc.c	28 Jun 2002 18:23:10 -0000	1.36
  @@ -33,38 +33,52 @@
   
   
   /************************************************
  -* main(int, char **)                            *
  -* Main rc control block                         *
  +* rcError(ex_t)                                 *
  +* Main rc error handler                         *
   ************************************************/
  -int main(int argc, char *argv[])
  +void rcError(ex_t Localerr)
   {
  -    ex_t Except;
  -
  -    try {                /* Configuration block                        */
  -        configNew();        /* Construct a new configuration              */
  -        configLoad(argc, (const char **)argv); /* Load cli, env, and conf */
  -        configVerify();     /* Test for usage, help, and version options  */
  -    }
  -    catch(Except) {      /* Exceptions of the configuration block      */
  -        if ((rc_return_t)Except.ex_value == RC_WRN_TRM)
  +    if (FAILED((rc_return_t)Localerr.ex_value)) { /* Error condition */
  +        if ((rc_return_t)Localerr.ex_value == RC_WRN_TRM)
               exit(0);
  -        else if ((rc_return_t)Except.ex_value == RC_ERR_USE)
  +        else if ((rc_return_t)Localerr.ex_value == RC_ERR_USE)
               clioptPrintusage();
  +        else if ((rc_return_t)Localerr.ex_value == RC_ERR_FNC)
  +            fprintf(stderr, "    Error condition, function file could not be opened.\n");
  +        else if ((rc_return_t)Localerr.ex_value == RC_ERR_DIR)
  +            fprintf(stderr, "    Error condition, location dir could not be opened.\n");
  +        else if ((rc_return_t)Localerr.ex_value == RC_ERR_RCF)
  +            fprintf(stderr, "    Error condition, rc file could not be opened.\n");
           else
  -        if (FAILED((rc_return_t)Except.ex_value)) { /* Error condition */
  -            fprintf(stderr, "    Error condition in proc, class '%s',\n    exception %d in %s:%s():%d.\n", (char *)Except.ex_class, (int)Except.ex_value, Except.ex_file, Except.ex_func, Except.ex_line);
  -            exit(1); /* Return failure */
  -        }
  +            fprintf(stderr, "    Error condition of class '%s',\n    exception %d in %s:%s():%d.\n", (char *)Localerr.ex_class, (int)Localerr.ex_value, Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
  +        exit(1); /* Return failure */
  +    }
   #ifdef DEBUG
  -        else /* Warning condition */
  -            fprintf(stderr, "    Warning condition in proc, class '%s',\n    exception %d in %s:%s():%d.\n", (char *)Except.ex_class, (int)Except.ex_value, Except.ex_file, Except.ex_func, Except.ex_line);
  +    else        /* Warning condition */
  +        fprintf(stderr, "    Warning condition of class '%s',\n    exception %d in %s:%s():%d.\n", (char *)Localerr.ex_class, (int)Localerr.ex_value, Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
   #else
  -        else /* Warning condition */
  -            RC_NOP;  /* No operation on warnings */
  +    else        /* Warning condition */
  +        RC_NOP; /* No operation on warnings */
   #endif
  +}
  +
  +/************************************************
  +* main(int, char **)                            *
  +* Main rc control block                         *
  +************************************************/
  +int main(int argc, char *argv[])
  +{
  +    ex_t Except;
  +
  +    try {                       /* Configuration block                      */
  +        configNew();            /* Construct a new configuration            */
  +        configLoad(argc, (const char **)argv);   /* Load cli, env, and conf */
  +        configVerify();         /* Test for usage, help and version options */
       }
  +    catch(Except)               /* Exceptions of the configuration block    */
  +        rcError(Except);
   
  -    try { /* Main processing block, the script is built here */
  +    try {                       /* Main processing block, script built here */
           rc_proc_t *pProc = NULL;
           pProc = procNew();      /* Construct a new processor, build script  */
           procPopulate(pProc);    /* Populate with run commands               */
  @@ -72,27 +86,9 @@
           procDelete(pProc);      /* Destroy the processor                    */
           configDelete();         /* Destroy the configuration                */
       }
  -    catch(Except) {  /* Error exceptions thrown during script processing */
  -        if (FAILED((rc_return_t)Except.ex_value)) { /* Error condition */
  -            if ((rc_return_t)Except.ex_value == RC_ERR_FNC)
  -                fprintf(stderr, "    Error condition, function file could not be opened.\n");
  -            else if ((rc_return_t)Except.ex_value == RC_ERR_DIR)
  -                fprintf(stderr, "    Error condition, location dir could not be opened.\n");
  -            else if ((rc_return_t)Except.ex_value == RC_ERR_RCF)
  -                fprintf(stderr, "    Error condition, rc file could not be opened.\n");
  -            else
  -                fprintf(stderr, "    Error condition in proc, class '%s',\n    exception %d in %s:%s():%d.\n", (char *)Except.ex_class, (int)Except.ex_value, Except.ex_file, Except.ex_func, Except.ex_line);
  -            exit(1); /* Return failure */
  -        }
  -#ifdef DEBUG
  -        else /* Warning condition */
  -            fprintf(stderr, "    Warning condition in proc, class '%s',\n    exception %d in %s:%s():%d.\n", (char *)Except.ex_class, (int)Except.ex_value, Except.ex_file, Except.ex_func, Except.ex_line);
  -#else
  -        else /* Warning condition */
  -            RC_NOP;  /* No operation on warnings */
  -#endif
  -    }
  +    catch(Except)               /* Exception thrown while script processing */
  +        rcError(Except);
   
  -    exit(0);        /* Return success */
  +    exit(0);                    /* Return success */
   }
   
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	28 Jun 2002 17:43:23 -0000	1.8
  +++ ossp-pkg/rc/rc_proc.c	28 Jun 2002 18:23:10 -0000	1.9
  @@ -132,7 +132,7 @@
   
               if (szSec) /* Only call append if the section lookup succeeded */
                   scriptAppend(pRc->m_pScript, szSec, strlen(szSec));
  -            else
  +            else if (configGetval(RC_DBG_VAL)) /* Only show when debug is set */
                   fprintf(stderr, "#Warning: Missing section '%s' in %s!\n", pRc->m_pAnal->m_pszSecs[i], pRc->m_pAnal->m_szRcs[nIter]);
   
               if (szSec) { /* Cleanup section string */

From ossp-cvs-owner@ossp.org  Sat Jun 29 13:08:36 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 69A497645F; Sat, 29 Jun 2002 13:08:36 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ui64 ui64.h
Message-Id: <20020629110836.69A497645F@mail.ossp.org>
Date: Sat, 29 Jun 2002 13:08:36 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Jun-2002 13:08:36
  Branch: HEAD                             Handle: 2002062912083500

  Modified files:
    ossp-pkg/ui64           ui64.h

  Log:
    add useful constructor macro

  Summary:
    Revision    Changes     Path
    1.4         +3  -0      ossp-pkg/ui64/ui64.h
  ____________________________________________________________________________

  Index: ossp-pkg/ui64/ui64.h
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 ui64.h
  --- ossp-pkg/ui64/ui64.h	29 Apr 2002 19:16:03 -0000	1.3
  +++ ossp-pkg/ui64/ui64.h	29 Jun 2002 11:08:35 -0000	1.4
  @@ -71,6 +71,9 @@
       unsigned char x[8]; /* x_0, ..., x_7 */
   } ui64_t;
   
  +#define ui64_cons(x7,x6,x5,x4,x3,x2,x1,x0) \
  +    { { 0x##x0, 0x##x1, 0x##x2, 0x##x3, 0x##x4, 0x##x5, 0x##x6, 0x##x7 } }
  +
   /* particular values */
   extern ui64_t        ui64_zero (void);
   extern ui64_t        ui64_max  (void);

From ossp-cvs-owner@ossp.org  Sat Jun 29 13:09:58 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 102F47645F; Sat, 29 Jun 2002 13:09:58 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tai tai_ui64.h
Message-Id: <20020629110958.102F47645F@mail.ossp.org>
Date: Sat, 29 Jun 2002 13:09:58 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Jun-2002 13:09:57
  Branch: HEAD                             Handle: 2002062912095700

  Modified files:
    ossp-pkg/tai            tai_ui64.h

  Log:
    upgrade to new ui64 version

  Summary:
    Revision    Changes     Path
    1.2         +3  -0      ossp-pkg/tai/tai_ui64.h
  ____________________________________________________________________________

  Index: ossp-pkg/tai/tai_ui64.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 tai_ui64.h
  --- ossp-pkg/tai/tai_ui64.h	29 Apr 2002 19:19:48 -0000	1.1
  +++ ossp-pkg/tai/tai_ui64.h	29 Jun 2002 11:09:57 -0000	1.2
  @@ -73,6 +73,9 @@
       unsigned char x[8]; /* x_0, ..., x_7 */
   } ui64_t;
   
  +#define ui64_cons(x7,x6,x5,x4,x3,x2,x1,x0) \
  +    { { 0x##x0, 0x##x1, 0x##x2, 0x##x3, 0x##x4, 0x##x5, 0x##x6, 0x##x7 } }
  +
   /* particular values */
   extern ui64_t        ui64_zero (void);
   extern ui64_t        ui64_max  (void);

From ossp-cvs-owner@ossp.org  Sat Jun 29 14:19:46 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5836776448; Sat, 29 Jun 2002 14:19:46 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tai tai.h
Message-Id: <20020629121946.5836776448@mail.ossp.org>
Date: Sat, 29 Jun 2002 14:19:46 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Jun-2002 14:19:46
  Branch: HEAD                             Handle: 2002062913194600

  Modified files:
    ossp-pkg/tai            tai.h

  Log:
    fix comment

  Summary:
    Revision    Changes     Path
    1.3         +3  -3      ossp-pkg/tai/tai.h
  ____________________________________________________________________________

  Index: ossp-pkg/tai/tai.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 tai.h
  --- ossp-pkg/tai/tai.h	29 May 2002 08:32:53 -0000	1.2
  +++ ossp-pkg/tai/tai.h	29 Jun 2002 12:19:46 -0000	1.3
  @@ -62,9 +62,9 @@
       TAI_TYPE_PACKED,    /* tai_packed_t (128 bit in 16 bytes network byte order) */
       /* looser types */
       TAI_TYPE_OFFSET,    /* tai_off_t */
  -    TAI_TYPE_SECONDS,   /* long */
  -    TAI_TYPE_NSECONDS,  /* long */
  -    TAI_TYPE_ASECONDS,  /* long */
  +    TAI_TYPE_SECONDS,   /* unsigned long */
  +    TAI_TYPE_NSECONDS,  /* unsigned long */
  +    TAI_TYPE_ASECONDS,  /* unsigned long */
       TAI_TYPE_TIMET,     /* time_t */
       TAI_TYPE_STRUCTTM,  /* struct tm */
       TAI_TYPE_STRUCTTV,  /* struct timeval */

From ossp-cvs-owner@ossp.org  Mon Jul  1 14:54:55 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0D685766F2; Mon,  1 Jul 2002 14:54:54 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog PORTING acconfig.h acheader.m4 aclo...
Message-Id: <20020701125454.0D685766F2@mail.ossp.org>
Date: Mon,  1 Jul 2002 14:54:54 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Jul-2002 14:54:54
  Branch: HEAD                             Handle: 197001010100001025524494

  Modified files:
    ossp-pkg/pth            ChangeLog PORTING aclocal.m4 configure.ac
                            devtool.conf devtool.func
  Removed files:
    ossp-pkg/pth            acconfig.h acheader.m4

  Log:
    Finally make Pth working again under new Autoconf 2.53 environment.

  Summary:
    Revision    Changes     Path
    1.562       +4  -0      ossp-pkg/pth/ChangeLog
    1.187       +1  -0      ossp-pkg/pth/PORTING
    NONE        +0  -60     ossp-pkg/pth/acconfig.h
    NONE        +0  -47     ossp-pkg/pth/acheader.m4
    1.95        +14 -15     ossp-pkg/pth/aclocal.m4
    1.3         +10 -8      ossp-pkg/pth/configure.ac
    1.3         +16 -14     ossp-pkg/pth/devtool.conf
    1.2         +2  -1      ossp-pkg/pth/devtool.func
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.561 -r1.562 ChangeLog
  --- ossp-pkg/pth/ChangeLog	27 Apr 2002 11:18:57 -0000	1.561
  +++ ossp-pkg/pth/ChangeLog	1 Jul 2002 12:54:54 -0000	1.562
  @@ -19,6 +19,10 @@
       | |_ ___) |
     __|_(_)____/____________________________________________________________
   
  +   *) Upgraded to Autoconf 2.53 environment and cleaned up internal
  +      Autoconf macro usage.
  +      [Ralf S. Engelschall]
  +
      *) Fixed lots of English errors in the manual page.
         [Felix Berger <bflat1@gmx.net>]
   
  Index: ossp-pkg/pth/PORTING
  ============================================================
  $ cvs diff -u -r1.186 -r1.187 PORTING
  --- ossp-pkg/pth/PORTING	27 Jan 2002 16:39:22 -0000	1.186
  +++ ossp-pkg/pth/PORTING	1 Jul 2002 12:54:54 -0000	1.187
  @@ -38,6 +38,7 @@
     i686-pc-freebsd4.3                  | sjlj/ssjlj/sas    | down    | 1.4a4
     i686-pc-freebsd4.2                  | sjlj/ssjlj/sas    | down    | 1.3.7
     i586-pc-freebsd5.0                  | sjlj/ssjlj/sas    | down    | 1.3.4
  +  i386-unknown-freebsd4.6             | sjlj/ssjlj/sas    | down    | 1.5b1
     alpha-unknown-freebsd4.0            | sjlj/ssjlj/sas    | down    | 1.3.0
     alpha-unknown-freebsd5.0            | sjlj/ssjlj/sas    | down    | 1.3.5
     powerpc-unknown-netbsd              | sjlj/ssjlj/sas    | down    | 1.3.2
      Index: ossp-pkg/pth/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.94 -r1.95 aclocal.m4
  --- ossp-pkg/pth/aclocal.m4	30 Jan 2002 13:06:09 -0000	1.94
  +++ ossp-pkg/pth/aclocal.m4	1 Jul 2002 12:54:54 -0000	1.95
  @@ -140,7 +140,6 @@
   dnl ##
   
   AC_DEFUN(AC_HEADLINE,[dnl
  -AC_DIVERT_PUSH(NOTICE)dnl
   #   configuration header
   if test ".`echo dummy [$]@ | grep enable-subdir`" != .; then
       enable_subdir=yes
  @@ -177,7 +176,6 @@
       $3_HEX="`$ac_shtool version -lc -dhex $ac_srcdir/$4`"
       AC_SUBST($3_HEX)
   fi
  -AC_DIVERT_POP()
   ])dnl
   
   dnl ##
  @@ -341,7 +339,7 @@
    ])dnl
   AC_MSG_RESULT([$ac_cv_type_longlong])
   if test ".$ac_cv_type_longlong" = .yes; then
  -    AC_DEFINE(HAVE_LONGLONG)
  +    AC_DEFINE(HAVE_LONGLONG, 1, [define if "long long" type exists])
   fi
   ])dnl
   
  @@ -360,7 +358,7 @@
    ])dnl
   AC_MSG_RESULT([$ac_cv_type_longdouble])
   if test ".$ac_cv_type_longdouble" = .yes; then
  -    AC_DEFINE(HAVE_LONGDOUBLE)
  +    AC_DEFINE(HAVE_LONGDOUBLE, 1, [define if "long double" type exists])
   fi
   ])dnl
   
  @@ -388,7 +386,6 @@
           *-pipe* ) ;;
                 * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
       esac
  -    AC_COMPILER_OPTION(ggdb3, -ggdb3, -ggdb3, CFLAGS="$CFLAGS -ggdb3")
       case $PLATFORM in
           *-*-freebsd*|*-*-solaris* ) CFLAGS="$CFLAGS -pedantic" ;;
       esac
  @@ -404,7 +401,7 @@
       esac
   fi
   msg="enabled"
  -AC_DEFINE(PTH_DEBUG)
  +AC_DEFINE(PTH_DEBUG, 1, [define to enable Pth debugging])
   ],[
   if test ".$ac_cv_prog_gcc" = ".yes"; then
   case "$CFLAGS" in
  @@ -572,7 +569,8 @@
   ], ac_cv_define_$1=yes, ac_cv_define_$1=no)])dnl
   AC_MSG_RESULT($ac_cv_define_$1)
   if test $ac_cv_define_$1 = yes; then
  -    AC_DEFINE(HAVE_[]translit($1, [a-z], [A-Z]))
  +    AC_DEFINE(HAVE_[]translit($1, [a-z], [A-Z]), 1,
  +              [define if pre-processor define $1 exists in header $2])
   fi
   ])
   
  @@ -597,7 +595,8 @@
   ], ac_cv_typedef_$1=yes, ac_cv_typedef_$1=no)])dnl
   AC_MSG_RESULT($ac_cv_typedef_$1)
   if test $ac_cv_typedef_$1 = yes; then
  -    AC_DEFINE(HAVE_[]translit($1, [a-z], [A-Z]))
  +    AC_DEFINE(HAVE_[]translit($1, [a-z], [A-Z]), 1,
  +              [define if typedef $1 exists in header $2])
   fi
   ])
   
  @@ -614,7 +613,6 @@
   AC_REQUIRE([AC_HEADER_STDC])dnl
   AC_MSG_CHECKING(for attribute $1 in struct $2 from $3)
   AC_CACHE_VAL(ac_cv_structattr_$1,[dnl
  -
   AC_TRY_LINK([
   #include <sys/types.h>
   #include <$3>
  @@ -625,7 +623,8 @@
   ], ac_cv_structattr_$1=yes, ac_cv_structattr_$1=no)])dnl
   AC_MSG_RESULT($ac_cv_structattr_$1)
   if test $ac_cv_structattr_$1 = yes; then
  -    AC_DEFINE(HAVE_[]translit($1, [a-z], [A-Z]))
  +    AC_DEFINE(HAVE_[]translit($1, [a-z], [A-Z]), 1,
  +              [define if attribute $1 exists in struct $2 from header $3])
   fi
   ])
   
  @@ -942,7 +941,7 @@
   else
       val="+1"
   fi
  -AC_DEFINE_UNQUOTED($1, $val)
  +AC_DEFINE_UNQUOTED($1, $val, [define for stack growth])
   ])
   
   dnl ##
  @@ -1160,7 +1159,7 @@
   nsig=32
   )
   AC_MSG_RESULT([$nsig])
  -AC_DEFINE_UNQUOTED($1, $nsig)
  +AC_DEFINE_UNQUOTED($1, $nsig, [define for number of signals])
   ])
   
   dnl ##
  @@ -1182,7 +1181,7 @@
   
   AC_DEFUN(AC_CHECK_EXTLIB,[dnl
   AC_ARG_WITH($2,[dnl
  -[  --with-]m4_substr([$2[[=DIR]]                 ], 0, 19)[build against $1 library (default=no)]],
  +[  --with-]m4_substr([$2[[=DIR]]                 ], 0, 19)[build against $1 library (default=no)]],[dnl
       if test ".$with_$2" = .yes; then
           #   via config script
           $2_version=`($2-config --version) 2>/dev/null`
  @@ -1247,7 +1246,7 @@
               fi
           fi
       fi
  -    AC_HAVE_HEADERS($4)
  +    AC_CHECK_HEADER($4)
       AC_CHECK_LIB($2, $3)
       AC_IFALLYES(header:$4 lib:$2_$3, with_$2=yes, with_$2=no)
       if test ".$with_$2" = .no; then
  @@ -1257,7 +1256,7 @@
   if test ".$with_$2" = .; then
       with_$2=no
   fi
  -)dnl
  +])dnl
   AC_MSG_CHECKING(whether to build against $1 library)
   if test ".$with_$2" = .yes; then
       ifelse([$5], , :, [$5])
  Index: ossp-pkg/pth/configure.ac
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 configure.ac
  --- ossp-pkg/pth/configure.ac	30 Jan 2002 13:15:50 -0000	1.2
  +++ ossp-pkg/pth/configure.ac	1 Jul 2002 12:54:54 -0000	1.3
  @@ -268,7 +268,7 @@
       *-*-isc* )  msg="no" ;; # on ISC the compiler test doesn't work
   esac
   if test ".$msg" = .yes; then
  -    AC_DEFINE(HAVE_GETTIMEOFDAY_ARGS1)
  +    AC_DEFINE(HAVE_GETTIMEOFDAY_ARGS1, 1, [define if gettimeofday(2) wants a single-argument only])
   fi
   AC_MSG_RESULT([$msg])
   
  @@ -286,7 +286,7 @@
   msg="no"
   )
   if test ".$msg" = .yes; then
  -    AC_DEFINE(HAVE_STRUCT_TIMESPEC)
  +    AC_DEFINE(HAVE_STRUCT_TIMESPEC, 1, [define if exists "struct timespec"])
   fi
   AC_MSG_RESULT([$msg])
   
  @@ -323,7 +323,7 @@
   dnl #
   
   dnl #  check for MCSC method
  -AC_CHECK_HEADERS(ucontext.h)
  +AC_CHECK_HEADER(ucontext.h,,, [#include <sys/types.h>])
   AC_CHECK_FUNCS(makecontext swapcontext getcontext setcontext)
   AC_CHECK_MCSC(mcsc=yes, mcsc=no)
   
  @@ -440,9 +440,9 @@
   dnl #  5. export the results
   dnl #
   
  -AC_DEFINE_UNQUOTED(PTH_MCTX_MTH_use, [PTH_MCTX_MTH_$mctx_mth])
  -AC_DEFINE_UNQUOTED(PTH_MCTX_DSP_use, [PTH_MCTX_DSP_$mctx_dsp])
  -AC_DEFINE_UNQUOTED(PTH_MCTX_STK_use, [PTH_MCTX_STK_$mctx_stk])
  +AC_DEFINE_UNQUOTED(PTH_MCTX_MTH_use, [PTH_MCTX_MTH_$mctx_mth], [define for machine context method])
  +AC_DEFINE_UNQUOTED(PTH_MCTX_DSP_use, [PTH_MCTX_DSP_$mctx_dsp], [define for machine context dispatching])
  +AC_DEFINE_UNQUOTED(PTH_MCTX_STK_use, [PTH_MCTX_STK_$mctx_stk], [define for machine context stack])
   
   PTH_MCTX_ID="$mctx_mth/$mctx_dsp/$mctx_stk"
   AC_MSG_RESULT([decision on mctx implementation... ${TB}${PTH_MCTX_ID}${TN}])
  @@ -575,7 +575,8 @@
   AC_SUBST(TEST_PTHREAD)
   
   dnl #   whether to build against OSSP ex library
  -AC_CHECK_EXTLIB(OSSP ex, ex, __ex_ctx, ex.h, AC_DEFINE(PTH_EX))
  +AC_CHECK_EXTLIB(OSSP ex, ex, __ex_ctx, ex.h, 
  +                AC_DEFINE(PTH_EX, 1, [define if using OSSP ex in GNU pth]))
   
   dnl #   whether to build against Sfio library
   PTH_EXT_SFIO=0
  @@ -583,7 +584,8 @@
   AC_SUBST(PTH_EXT_SFIO)
   
   dnl #   whether to build against Dmalloc library
  -AC_CHECK_EXTLIB(Dmalloc, dmalloc, dmalloc_debug, dmalloc.h, AC_DEFINE(PTH_DMALLOC))
  +AC_CHECK_EXTLIB(Dmalloc, dmalloc, dmalloc_debug, dmalloc.h, 
  +                AC_DEFINE(PTH_DMALLOC, 1, [define if using Dmalloc in GNU pth]))
   
   dnl ##
   dnl ##  OUTPUT SUBSTITUTION
  Index: ossp-pkg/pth/devtool.conf
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.conf
  --- ossp-pkg/pth/devtool.conf	30 Jan 2002 13:15:33 -0000	1.2
  +++ ossp-pkg/pth/devtool.conf	1 Jul 2002 12:54:54 -0000	1.3
  @@ -3,10 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   1.5.4 "1.5.*" echo version scpp mkdir install fixperm tarball
  +    @autogen shtool   1.6.0 "1.6.*" echo version scpp mkdir install fixperm tarball
       @autogen libtool  1.4.2 "1.4*"
  -    @autogen autoconf 2.52  "2.5.*"
  -	cat acheader.m4 configure.ac | autoheader - >pth_acdef.h.in
  +    @autogen autoconf 2.53  "2.5.*"
   
   %autoclean
       @autoclean shtool
  @@ -20,7 +19,10 @@
       else
           param=devel
       fi
  -    ./configure --with-param=$param "$@"
  +    ./configure \
  +        --cache-file=config.cache \
  +        --with-param=$param \
  +        "$@"
   
   %version
       ./shtool version -lc -n 'GNU Pth' -p pth_internal_ -e pth_vers.c
  @@ -40,16 +42,16 @@
                        -e 'CVS,\.cvsignore,\.[ao],^\.,devtool*' -c 'gzip --best' .
   
   %striptease
  -	perl striptease.pl
  +    perl striptease.pl
   
   %depend
  -	cp Makefile.in Makefile.in.bak
  -	sed -ne '1,/^# DO NOT REMOVE/p' Makefile.in >Makefile.new
  -	gcc -MM -I. *.c |\
  -	perl -e 'my $d = ""; $d .= $_ while (<STDIN>); $_ = $d; \
  -	         s/^(pth_.*)\.o:/$1.lo:/mg; \
  -	         s|\\\n\s*| |sg; s|\b?\S*/\S*\b?||g; s|\s{2,}| |g; \
  -	         print $_;' >> Makefile.new
  -	cp Makefile.new Makefile.in
  -	rm -f Makefile.new
  +    cp Makefile.in Makefile.in.bak
  +    sed -ne '1,/^# DO NOT REMOVE/p' Makefile.in >Makefile.new
  +    gcc -MM -I. *.c |\
  +    perl -e 'my $d = ""; $d .= $_ while (<STDIN>); $_ = $d; \
  +             s/^(pth_.*)\.o:/$1.lo:/mg; \
  +             s|\\\n\s*| |sg; s|\b?\S*/\S*\b?||g; s|\s{2,}| |g; \
  +             print $_;' >> Makefile.new
  +    cp Makefile.new Makefile.in
  +    rm -f Makefile.new
   
  Index: ossp-pkg/pth/devtool.func
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.func
  --- ossp-pkg/pth/devtool.func	30 Jan 2002 12:54:22 -0000	1.1
  +++ ossp-pkg/pth/devtool.func	1 Jul 2002 12:54:54 -0000	1.2
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
   ##
   
   devtool_require () {
  @@ -33,6 +33,7 @@
               echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
               autoconf
               autoheader 2>&1 | grep -v "is unchanged"
  +            rm -rf autom4te.cache >/dev/null 2>&1
               ;;
           libtool )
               libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`

From ossp-cvs-owner@ossp.org  Mon Jul  1 16:33:13 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 62638767BC; Mon,  1 Jul 2002 16:33:13 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp devtool.func
Message-Id: <20020701143313.62638767BC@mail.ossp.org>
Date: Mon,  1 Jul 2002 16:33:13 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Jul-2002 16:33:13
  Branch: HEAD                             Handle: 2002070115331300

  Modified files:
    ossp-pkg/lmtp2nntp      devtool.func

  Log:
    use newer devtool.func

  Summary:
    Revision    Changes     Path
    1.3         +1  -0      ossp-pkg/lmtp2nntp/devtool.func
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/devtool.func
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.func
  --- ossp-pkg/lmtp2nntp/devtool.func	31 Dec 2001 15:15:36 -0000	1.2
  +++ ossp-pkg/lmtp2nntp/devtool.func	1 Jul 2002 14:33:13 -0000	1.3
  @@ -33,6 +33,7 @@
               echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
               autoconf
               autoheader 2>&1 | grep -v "is unchanged"
  +            rm -rf autom4te.cache >/dev/null 2>&1
               ;;
           libtool )
               libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`

From ossp-cvs-owner@ossp.org  Mon Jul  1 17:03:34 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9A993767BC; Mon,  1 Jul 2002 17:03:33 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.c rc.h rc_config.c rc_proc.c rc_test.sh
Message-Id: <20020701150333.9A993767BC@mail.ossp.org>
Date: Mon,  1 Jul 2002 17:03:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   01-Jul-2002 17:03:33
  Branch: HEAD                             Handle: 2002070116033201

  Modified files:
    ossp-pkg/rc             rc.c rc.h rc_config.c rc_proc.c rc_test.sh

  Log:
    Wrote configInfo, removed config debugging, prepared procRun for
    eval/exec/print logic, and improved test conditions.

  Summary:
    Revision    Changes     Path
    1.37        +1  -3      ossp-pkg/rc/rc.c
    1.34        +5  -6      ossp-pkg/rc/rc.h
    1.20        +31 -73     ossp-pkg/rc/rc_config.c
    1.10        +9  -5      ossp-pkg/rc/rc_proc.c
    1.14        +19 -17     ossp-pkg/rc/rc_test.sh
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.c
  ============================================================
  $ cvs diff -u -r1.36 -r1.37 rc.c
  --- ossp-pkg/rc/rc.c	28 Jun 2002 18:23:10 -0000	1.36
  +++ ossp-pkg/rc/rc.c	1 Jul 2002 15:03:32 -0000	1.37
  @@ -39,10 +39,8 @@
   void rcError(ex_t Localerr)
   {
       if (FAILED((rc_return_t)Localerr.ex_value)) { /* Error condition */
  -        if ((rc_return_t)Localerr.ex_value == RC_WRN_TRM)
  +        if ((rc_return_t)Localerr.ex_value == RC_ERR_TRM)
               exit(0);
  -        else if ((rc_return_t)Localerr.ex_value == RC_ERR_USE)
  -            clioptPrintusage();
           else if ((rc_return_t)Localerr.ex_value == RC_ERR_FNC)
               fprintf(stderr, "    Error condition, function file could not be opened.\n");
           else if ((rc_return_t)Localerr.ex_value == RC_ERR_DIR)
  Index: ossp-pkg/rc/rc.h
  ============================================================
  $ cvs diff -u -r1.33 -r1.34 rc.h
  --- ossp-pkg/rc/rc.h	28 Jun 2002 17:43:23 -0000	1.33
  +++ ossp-pkg/rc/rc.h	1 Jul 2002 15:03:32 -0000	1.34
  @@ -62,19 +62,18 @@
       RC_ERR_FNC = 8,  /* Func file not found      */
       RC_ERR_DIR = 9,  /* Location dir not found   */
       RC_ERR_RCF = 10, /* Rc file not found        */
  -    RC_WRN_0   = 11, /* Warning base             */
  -    RC_WRN_OWR = 12, /* Overwrite warning        */
  -    RC_WRN_NUL = 13, /* NULL pointer warning     */
  -    RC_WRN_TRM = 14  /* Request to terminate app */
  +    RC_ERR_TRM = 11, /* Request to terminate app */
  +    RC_WRN_0   = 12, /* Warning base             */
  +    RC_WRN_OWR = 13, /* Overwrite warning        */
  +    RC_WRN_NUL = 14  /* NULL pointer warning     */
   } rc_return_t;
   
   /* Config function prototypes */
   rc_return_t configNew(void);
   rc_return_t configLoad(int, const char **);
  +rc_return_t configInfo(void);
   rc_return_t configVerify(void);
   rc_return_t configDelete(void);
  -const char *configSummarize(void);
  -void configDebug(void); /* FIXME Remove */
   
   /* Config accessor prototypes */
   const char *configGetval(rc_opt_t);
  Index: ossp-pkg/rc/rc_config.c
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 rc_config.c
  --- ossp-pkg/rc/rc_config.c	27 Jun 2002 15:35:58 -0000	1.19
  +++ ossp-pkg/rc/rc_config.c	1 Jul 2002 15:03:33 -0000	1.20
  @@ -35,35 +35,43 @@
   #include "rc_const.h"               /* String constants                     */
   
   static int m_nLocks = 0;            /* Server locks, not thread-safe FIXME  */
  -static char *m_szSummary = NULL;    /* Configuration summary storage        */
   
   
   /***************************************
  -* configDebug(void)                    *
  -* Debug a configuration                *
  -* Warning: There is no error checking  *
  -*          or debugging of this        *
  -*          debugger block              *
  +* configInfo(void)                     *
  +* Print the configuration information  *
   ***************************************/
  -void configDebug(void)
  +rc_return_t configInfo(void)
   {
  -    int i = 0;
       ex_t Except;
  -    char **szTemp = NULL;
  +    int i = 0;
  +    char **pszTemp = NULL;  /* For holding the section string vector        */
   
       try {
           fprintf(stderr, "Run command file: %s\n", configGetrcfile());
   
  -        szTemp = (char **)configGetsecs();
  +        pszTemp = (char **)configGetsecs();
           fprintf(stderr, "Sections:");
  -        while (szTemp[i])
  -            fprintf(stderr, " %s", szTemp[i++]);
  +        for (i = 0; pszTemp[i]; i++)
  +            fprintf(stderr, " %s", pszTemp[i]);
  +        fputc('\n', stderr);
   
  -        fprintf(stderr, "\n%s", configSummarize());
  +        /* FIXME Not threadsafe, wrap with crit section */
  +        for (i = 0; i < RC_NUMOPTS; i++) {
  +            if (configGetval(i) == NULL); /* NOP */
  +            else if (!(strcmp(configGetval(i), "1")))
  +                fprintf(stderr, "Option %s is on.\n", configGetname(i));
  +            else
  +                fprintf(stderr, "Option %s is %s.\n", configGetname(i),\
  +                    configGetval(i));
  +        }
       }
  +
       catch(Except) {
           rethrow;
       }
  +
  +    return(RC_THROW(RC_OK));
   }
   
   /***************************************
  @@ -181,58 +189,6 @@
       return(NULL);   /* Not reached  */
   }
   
  -/***************************************
  -* configSummarize(void)                *
  -* Configuration summary                *
  -***************************************/
  -const char *configSummarize(void)
  -{
  -    ex_t Except;
  -    int i = 0;
  -    char *szTemp = NULL;
  -
  -    /* Make sure we start with a blank slate */
  -    if (m_szSummary) {
  -        free(m_szSummary);
  -        m_szSummary = NULL;
  -    }
  -
  -    for (i = 0; i < RC_NUMOPTS; i++)
  -    {
  -        try { /* FIXME Not threadsafe, wrap with crit section */
  -            if (configGetval(i) == NULL); /* NOP */
  -            else if (!(strcmp(configGetval(i), "1"))) {
  -                szTemp = calloc(1, (m_szSummary ? strlen(m_szSummary) : 0) + strlen(configGetval(i)));
  -                if (m_szSummary)
  -                    strcpy(szTemp, m_szSummary);
  -                strcat(szTemp, "Option ");
  -                strcat(szTemp, configGetname(i));
  -                strcat(szTemp, " is on.\n");
  -                if (m_szSummary)
  -                    free(m_szSummary);
  -                m_szSummary = szTemp;
  -            }
  -            else {
  -                szTemp = malloc(strlen(m_szSummary) + strlen(configGetval(i)));
  -                strcpy(szTemp, m_szSummary);
  -                strcat(szTemp, "Option ");
  -                strcat(szTemp, configGetname(i));
  -                strcat(szTemp, " is ");
  -                strcat(szTemp, configGetval(i));
  -                strcat(szTemp, ".\n");
  -                if (m_szSummary)
  -                    free(m_szSummary);
  -                m_szSummary = szTemp;
  -            }
  -        }               /* FIXME Not threadsafe, wrap with crit section */
  -        catch(Except) {     /* Breaks the otherwise endless loop above  */
  -            rethrow;
  -        }
  -    }
  -
  -    return ((const char *)m_szSummary);
  -}
  -
   /************************************************
   * configLoad(int, const char **)                *
   * Load a configuration                          *
  @@ -264,25 +220,29 @@
       short bStop = FALSE;
   
       try { /* Basic checks of version, usage, and help options */
  -        if (configGetval(RC_VER_VAL)) {
  -            fprintf(stdout, "OSSP rc %s\n", RC_VERSION);
  -            bStop = TRUE;
  -        }
           if (configGetval(RC_USE_VAL)) {
               clioptPrintusage();
               bStop = TRUE;
           }
  -        if (configGetval(RC_HLP_VAL)) {
  +        else if (configGetval(RC_HLP_VAL)) {
               clioptPrintusage(); /* FIXME Replace with real help FIXME */
               bStop = TRUE;
           }
  +        else if (configGetval(RC_VER_VAL)) {
  +            fprintf(stdout, "OSSP rc %s\n", RC_VERSION);
  +            bStop = TRUE;
  +        }
  +        else if (configGetval(RC_INF_VAL)) {
  +            configInfo();
  +            bStop = TRUE;
  +        }
       }
       catch(Except) {
           rethrow;
       }
   
       if (bStop)                          /* Did user request a non-operation?  */
  -        return(RC_THROW(RC_WRN_TRM));   /* Yes, so terminate after handling.  */
  +        return(RC_THROW(RC_ERR_TRM));   /* Yes, so terminate after handling.  */
       else
           return(RC_THROW(RC_OK));        /* No, we should continue processing. */
   }
  @@ -298,8 +258,6 @@
       if (--m_nLocks == 0) {          /* If m_nLocks is 0, deallocate */
           try {                       /* FIXME, not thread-safe       */
               clioptDelete();
  -            if (m_szSummary)
  -                free(m_szSummary);
           }
           catch(Except) {
               rethrow;
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	28 Jun 2002 18:23:10 -0000	1.9
  +++ ossp-pkg/rc/rc_proc.c	1 Jul 2002 15:03:33 -0000	1.10
  @@ -166,11 +166,15 @@
   ************************************************/
   rc_return_t procRun(rc_proc_t *pRc)
   {
  -    if (configGetval(RC_DBG_VAL)) /* Dump the running config table */
  -        configDebug();            /* if debug switch is turned on  */
  -
  -    /* This will print the script to a hardcoded dump device, probably stderr */
  -    scriptDump(pRc->m_pScript);
  +    /* This will evaluate, execute, or print the script to stdout */
  +    if (configGetval(RC_EVL_VAL))       /* Evaluate */
  +        fprintf(stderr, "Error: Evaluate is not implemented yet.\n"); /* FIX */
  +    else if (configGetval(RC_EXC_VAL))  /* Execute  */
  +        fprintf(stderr, "Error: Execute is not implemented yet.\n");  /* FIX */
  +    else if (configGetval(RC_PRN_VAL))  /* Print    */
  +        scriptDump(pRc->m_pScript);
  +    else
  +        return(RC_THROW(RC_ERR_INT));   /* Not reached */
   
       return(RC_THROW(RC_OK));
   }
  Index: ossp-pkg/rc/rc_test.sh
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 rc_test.sh
  --- ossp-pkg/rc/rc_test.sh	28 Jun 2002 17:43:23 -0000	1.13
  +++ ossp-pkg/rc/rc_test.sh	1 Jul 2002 15:03:33 -0000	1.14
  @@ -64,29 +64,31 @@
   
   echo; echo "./rc --func /u/ms/ossp/rc/rcfunc/rc.func --print --verbose openssh stop sleep=4 start"
   ./rc --func /u/ms/ossp/rc/rcfunc/rc.func --print --verbose openssh stop sleep=4 start
  -echo; echo "./rc --func /u/ms/ossp/rc/rcfunc/rc.func --debug --eval uucp restart"
  -./rc --func /u/ms/ossp/rc/rcfunc/rc.func --debug --eval uucp restart
  -echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func --tmp /tmp --exec uucp start"
  -./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func --tmp /tmp --exec uucp start
  -echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func --tmp /tmp --debug --exec ntp sync"
  -./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func --tmp /tmp --debug --exec ntp sync
  -echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func --tmp /tmp --debug --silent --exec ralf feed suppe"
  -./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func --tmp /tmp --debug --silent --exec ralf feed suppe
  -echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func
  --L /u/ms/ossp/rc/rcfiles/ --tmp /tmp --silent --exec samba search finish destroy"
  -./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /u/ms/ossp/rc/rcfiles/ --tmp /tmp --silent --exec samba search finish destroy
  +echo; echo "./rc --func /u/ms/ossp/rc/rcfunc/rc.func --info --eval uucp restart"
  +./rc --func /u/ms/ossp/rc/rcfunc/rc.func --info --eval uucp restart
  +echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func --tmp /tmp --print uucp start"
  +./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func --tmp /tmp --print uucp start
  +echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func --tmp /tmp --debug --print ntp sync"
  +./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func --tmp /tmp --debug --print ntp sync
  +echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func --tmp /tmp --debug --silent --print ralf feed suppe"
  +./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func --tmp /tmp --debug --silent --print ralf feed suppe
  +echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /u/ms/ossp/rc/rcfiles/ --tmp /tmp --silent --print samba search finish destroy"
  +./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /u/ms/ossp/rc/rcfiles/ --tmp /tmp --silent --print samba search finish destroy
   
  -echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /u/ms/ossp/rc/rcfiles/ --tmp /tmp --silent --exec all feed suppe"
  -./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /u/ms/ossp/rc/rcfiles/ --tmp /tmp --silent --exec all go feed suppe
  +echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /u/ms/ossp/rc/rcfiles/ --tmp /tmp --silent --print all feed suppe"
  +./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /u/ms/ossp/rc/rcfiles/ --tmp /tmp --silent --print all go feed suppe
   
  -echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --tmp /tmp --silent --debug --exec all config barf gag"
  -./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --tmp /tmp --silent --debug --exec all config barf gag
  +echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --tmp /tmp --silent --debug --print all config barf gag"
  +./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --tmp /tmp --silent --debug --print all config barf gag
  +
  +echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --tmp /tmp --silent --debug --eval all config start"
  +./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --tmp /tmp --silent --debug --eval all config start
   
   echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --tmp /tmp --silent --debug --exec all config start"
   ./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --tmp /tmp --silent --debug --exec all config start
   
  -echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --tmp /tmp --silent --debug --exec pam info"
  -./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --tmp /tmp --silent --debug --exec pam info
  +echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --tmp /tmp --silent --debug --print pam info"
  +./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --tmp /tmp --silent --debug --print pam info
   
   # Next milestone
   #RequireOwner

From ossp-cvs-owner@ossp.org  Mon Jul  1 19:50:15 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7F74B766F2; Mon,  1 Jul 2002 19:50:15 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 configure.ac
Message-Id: <20020701175015.7F74B766F2@mail.ossp.org>
Date: Mon,  1 Jul 2002 19:50:15 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Jul-2002 19:50:15
  Branch: HEAD                             Handle: 2002070118501500

  Modified files:
    ossp-pkg/l2             configure.ac

  Log:
    Upgrade tool checks to new strategy which supports
    the new OpenPKG "flex" package.

  Summary:
    Revision    Changes     Path
    1.21        +42 -10     ossp-pkg/l2/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/l2/configure.ac
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 configure.ac
  --- ossp-pkg/l2/configure.ac	14 Mar 2002 15:29:23 -0000	1.20
  +++ ossp-pkg/l2/configure.ac	1 Jul 2002 17:50:15 -0000	1.21
  @@ -47,22 +47,54 @@
   dnl # check for developer tools:
   dnl # GNU Bison and GNU Flex
   if test ".$enable_maintainer" = .yes; then
  -    AC_PATH_PROG(BISON, bison, NA)
  +    dnl # check for GNU Bison >= 1.30
  +    bison_version=""
  +    for prog in bison bison-beta bison-alpha bison-snap; do
  +        AC_PATH_PROG(BISON, $prog, NA) 
  +        if test ".$BISON" != .NA; then
  +            bison_version=`($BISON --version | head -1 | sed -e 's;^[[^0-9]]*\([[0-9]][[0-9.]]*\).*;\1;') 2>/dev/null`
  +            case "$bison_version" in
  +                1.3[[0-9]] | 1.[[4-9]] ) break ;;
  +                * ) BISON="NA"; unset ac_cv_path_BISON ;;
  +            esac
  +        else
  +            unset ac_cv_path_BISON
  +        fi
  +    done
       if test ".$BISON" = .NA; then
  -        AC_ERROR([require GNU Bison])
  +        if test ".$bison_version" != .; then
  +            AC_ERROR([found GNU Bison version $bison_version; require version >= 1.30])
  +        else
  +            AC_ERROR([require GNU Bison version >= 1.30])
  +        fi
       fi
  -    AC_PATH_PROG(FLEX,  flex,  NA) 
  +    dnl # check for GNU Flex >= 2.5.6
  +    flex_version=""
  +    for prog in flex flex-beta flex-alpha flex-snap; do
  +        AC_PATH_PROG(FLEX, $prog, NA) 
  +        if test ".$FLEX" != .NA; then
  +            flex_version=`($FLEX --version | head -1 | sed -e 's;^[[^0-9]]*\([[0-9]][[0-9.]]*\).*;\1;') 2>/dev/null`
  +            case "$flex_version" in
  +                2.5.[[6-9]] | 2.5.1[[0-9]] | 2.[[6-9]].* ) break ;;
  +                * ) FLEX="NA"; unset ac_cv_path_FLEX ;;
  +            esac
  +        else
  +            unset ac_cv_path_FLEX
  +        fi
  +    done
       if test ".$FLEX" = .NA; then
  -        AC_ERROR([require GNU Flex])
  +        if test ".$flex_version" != .; then
  +            AC_ERROR([found GNU Flex version $flex_version; require version >= 2.5.6])
  +        else
  +            AC_ERROR([require GNU Flex version >= 2.5.6])
  +        fi
       fi
  -    flex_version=`(flex --version 2>/dev/null | awk '{ print $3; }')`
  -    case "$flex_version" in
  -        2.[[5-6]].[[6-9]] ) ;;
  -        * ) AC_ERROR([found GNU Flex version $flex_version; require version >= 2.5.6 (DEVELOPER VERSION!)]) ;;
  -    esac
   else
  +    dnl # disable the use of the tools, but still allow manual override
  +    test ".$BISON" = . && BISON=true
       AC_PATH_PROG(BISON, bison, true)
  -    AC_PATH_PROG(FLEX,  flex,  true) 
  +    test ".$FLEX"  = . && FLEX=true
  +    AC_PATH_PROG(FLEX, flex, true)
   fi
   
   AC_CHECK_LIB(nsl, gethostname)

From ossp-cvs-owner@ossp.org  Tue Jul  2 09:49:02 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 25B42763F3; Tue,  2 Jul 2002 09:49:02 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c lmtp2nntp_main.c lmt...
Message-Id: <20020702074902.25B42763F3@mail.ossp.org>
Date: Tue,  2 Jul 2002 09:49:02 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Jul-2002 09:49:02
  Branch: HEAD                             Handle: 2002070208490100

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c lmtp2nntp_main.c
                            lmtp2nntp_msg.c lmtp2nntp_option.c

  Log:
    get rid of all warnings under gcc 3.1

  Summary:
    Revision    Changes     Path
    1.78        +19 -19     ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.56        +6  -7      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
    1.29        +12 -13     ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
    1.20        +11 -11     ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.77 -r1.78 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	28 May 2002 14:14:44 -0000	1.77
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	2 Jul 2002 07:49:01 -0000	1.78
  @@ -166,7 +166,7 @@
               fprintf(stderr, "%s:Error: logging failed to configure \"%s\" channel\n", ctx->progname, l2_handler_var.name);
               CU(ERR_EXECUTION);
           }
  -        //FIXME this is cut off on command line!? fprintf(stderr, "DEBUG: ov->data.s = \"%s\"\n", ov->data.s);
  +        /* FIXME this is cut off on command line!? fprintf(stderr, "DEBUG: ov->data.s = \"%s\"\n", ov->data.s); */
           if ((rc = l2_spec(&ch, ctx->l2_env, ov->data.s)) != L2_OK) {
               fprintf(stderr, "%s:Error: logging failed to create stream\n", ctx->progname);
               CU(ERR_EXECUTION);
  @@ -184,7 +184,7 @@
        * should not be used in the remainder of the program flow.
        */
       logbook(ctx->l2, L2_LEVEL_NOTICE, "startup, version %s", lmtp2nntp_version.v_gnu);
  -    //logbook(ctx->l2, L2_LEVEL_NOTICE, "FIXME>>>${option.destination[0]}<<<FIXME>>>${option.destination[1]}<<<");
  +    /* logbook(ctx->l2, L2_LEVEL_NOTICE, "FIXME>>>${option.destination[0]}<<<FIXME>>>${option.destination[1]}<<<"); */
   
       /* --version FLAG */
       try {
  @@ -198,7 +198,7 @@
   
           if (ov->data.f == 1) {
               fprintf(stdout, "%s\n", lmtp2nntp_version.v_gnu);
  -            exit(0); //FIXME
  +            exit(0); /* FIXME */
           }
       }
       catch (ex)
  @@ -507,7 +507,7 @@
                   cp = (ov->data.m)[i];
                   logbook(ctx->l2, L2_LEVEL_DEBUG, "cp = (data.m)[%d] = \"%s\"", i, cp);
                   if (strrchr(cp, ':') == NULL)
  -                    cp = str_concat(cp, ":nntp", NULL); //FIXME is this a config var/val?
  +                    cp = str_concat(cp, ":nntp", NULL); /* FIXME is this a config var/val? */
                   else
                       cp = str_concat(cp, NULL); /* prepare for free() */
                   if ((rc = sa_addr_create(&ctx->pns[i].saa)) != SA_OK) {
  @@ -515,11 +515,11 @@
                       throw(0,0,0);
                   }
                   if ((rc = sa_addr_u2a(ctx->pns[i].saa, "inet://%s", cp)) != SA_OK) {
  -                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --destination, parsing host address (%s) failed with \"%s\"", cp /*FIXME again, option vs. config */, sa_error(rc));
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --destination, parsing host address (%s) failed with \"%s\"", cp /* FIXME again, option vs. config */, sa_error(rc));
                       throw(0,0,0);
                   }
                   if ((rc = sa_create(&ctx->pns[i].sa)) != SA_OK) {
  -                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --destination, creating TCP socket (%s) failed with \"%s\"", cp /*FIXME again, option vs. config */, sa_error(rc));
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --destination, creating TCP socket (%s) failed with \"%s\"", cp /* FIXME again, option vs. config */, sa_error(rc));
                       throw(0,0,0);
                   }
                   ctx->pns[i].nntp = NULL;
  @@ -560,7 +560,7 @@
   
       /* --headerrule MULTI */
       {
  -    volatile headerrule_t *hrNew = NULL; // declare and initialize variables which might have resources allocated that need to be cleaned up when an exception is caught
  +    volatile headerrule_t *hrNew = NULL; /* declare and initialize variables which might have resources allocated that need to be cleaned up when an exception is caught */
           try {
               char *cp, *cpP;
               int n;
  @@ -661,14 +661,14 @@
                   }
                   /* establish variable expansion context */
                   {
  -                    var_rc_t rc;
  +                    var_rc_t rc2;
   
  -                    if ((rc = var_create(&ctx->config_varregex)) != VAR_OK) {
  -                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --headerrule, create regex context failed with %s (%d)", var_strerror(ctx->config_varregex, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  +                    if ((rc2 = var_create(&ctx->config_varregex)) != VAR_OK) {
  +                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --headerrule, create regex context failed with %s (%d)", var_strerror(ctx->config_varregex, rc2, &cp) == VAR_OK ? cp : "Unknown Error", rc2);
                           throw(0,0,0);
                       }
  -                    if ((rc = var_config(ctx->config_varregex, VAR_CONFIG_SYNTAX, &syntax_regex)) != VAR_OK) {
  -                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --headerrule, config regex context failed with %s (%d)", var_strerror(ctx->config_varregex, rc, &cp) == VAR_OK ? cp : "Unknown Error", rc);
  +                    if ((rc2 = var_config(ctx->config_varregex, VAR_CONFIG_SYNTAX, &syntax_regex)) != VAR_OK) {
  +                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --headerrule, config regex context failed with %s (%d)", var_strerror(ctx->config_varregex, rc2, &cp) == VAR_OK ? cp : "Unknown Error", rc2);
                           throw(0,0,0);
                       }
                   }
  @@ -1089,7 +1089,7 @@
                       const char *filename = cp;
                       struct stat sb;
                       volatile int fd = -1;
  -                    //ex_t ex;
  +                    /* ex_t ex; */
   
                       try {
                           if (stat(filename, &sb) == -1) throw(0, 0, "stat");
  @@ -1108,15 +1108,15 @@
                   }
                   {
                       volatile msg_t *msg = NULL;
  -                    msg_rc_t rc;
  +                    msg_rc_t rc2;
   
                       try {
                           ctx->msgcount++;
                           if ((msg = msg_create(ctx->prival)) == NULL) throw(0, 0, "msg_create");
                           msg->l2 = ctx->l2;
                           msg->cpMsg = cpBuf;
  -                        if ((rc = msg_split((msg_t *)msg)) != MSG_OK) {
  -                            logbook(ctx->l2, L2_LEVEL_ERROR, "Error splitting message: %s", msg_error(rc));
  +                        if ((rc2 = msg_split((msg_t *)msg)) != MSG_OK) {
  +                            logbook(ctx->l2, L2_LEVEL_ERROR, "Error splitting message: %s", msg_error(rc2));
                               throw(0, 0, "msg_split");
                           }
                           msg_headermatrixbuildup((msg_t *)msg);
  @@ -1124,8 +1124,8 @@
                           headerrewrite(ctx);
                           msg_headermatrixteardwn((msg_t *)msg);
                           argz_add(&((msg_t *)msg)->azNewsgroups, &((msg_t *)msg)->asNewsgroups, "invalid.test");
  -                        if ((rc = msg_join((msg_t *)msg)) != MSG_OK) {
  -                            logbook(ctx->l2, L2_LEVEL_ERROR, "Error joining message: %s", msg_error(rc));
  +                        if ((rc2 = msg_join((msg_t *)msg)) != MSG_OK) {
  +                            logbook(ctx->l2, L2_LEVEL_ERROR, "Error joining message: %s", msg_error(rc2));
                               throw(0, 0, "msg_join");
                           }
                           printf("%s", msg->cpMsg);
  @@ -1140,7 +1140,7 @@
                       }
                   }
               }
  -        exit(0); //FIXME
  +        exit(0); /* FIXME */
           }
       }
       catch (ex)
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================
  $ cvs diff -u -r1.55 -r1.56 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	27 May 2002 15:09:50 -0000	1.55
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	2 Jul 2002 07:49:01 -0000	1.56
  @@ -445,7 +445,6 @@
   
       /* establish variable expansion context */
       {
  -        var_rc_t rc;
           char *cp;
   
           if ((rc = var_create(&ctx->config_varctx)) != VAR_OK) {
  @@ -470,7 +469,7 @@
           if (option_create(&o, ctx->val) != OPTION_OK)
                   CU(ERR_EXECUTION);
           rv = option_parse(o, argc, argv);
  -        config_context(ctx); //FIXME rc
  +        config_context(ctx); /*FIXME rc */
           if (rv != OPTION_OK)
                   CU(ERR_EXECUTION);
       }
  @@ -704,7 +703,7 @@
       /* graceful shutdown */
       CUS:
       logbook(ctx->l2, L2_LEVEL_NOTICE, "graceful shutdown shortly before exit - no more logging");
  -    //l2_channel_destroy(ctx->l2);
  +    /* l2_channel_destroy(ctx->l2); */
       l2_env_destroy(ctx->l2_env);
       if (ctx->saServerbind)
           sa_destroy(ctx->saServerbind);
  @@ -712,7 +711,7 @@
           sa_addr_destroy(ctx->saaServerbind);
       if (ctx->option_restrictheader != NULL)
           free(ctx->option_restrictheader);
  -    //FIXME if (ctx->azHeaderValuePairs != NULL) free(ctx->azHeaderValuePairs); what about headerrules
  +    /* FIXME if (ctx->azHeaderValuePairs != NULL) free(ctx->azHeaderValuePairs); what about headerrules */
       if (ctx->option_pidfile != NULL)
           free(ctx->option_pidfile);
       if (ctx->option_nodename != NULL)
  @@ -730,7 +729,7 @@
       str_parse(NULL, NULL);
       if (o != NULL)
           (void)option_destroy(o);
  -    //FIXME check if anything initialized in the lmtp2nntp_t structure is destroyed here (val, prival ...)
  +    /* FIXME check if anything initialized in the lmtp2nntp_t structure is destroyed here (val, prival ...) */
   
       return rc;
   }
  @@ -886,7 +885,7 @@
                   memcpy(&ctx->pns[i], &ctx->pns[i+1], (ctx->nns - i ) * sizeof(struct ns));
               }
               */
  -            i++; //FIXME this is just to avoid infinite loop
  +            i++; /* FIXME this is just to avoid infinite loop */
           }
       } while (i < ctx->nns);
   
  @@ -1647,7 +1646,7 @@
               if (ctx->pns[i].rc != NNTP_OK) {
                   var_rc_t var_rc;
                   char *res_ptr;
  -                int res_len;
  +                size_t res_len;
                   str_format(errorstring, sizeof(errorstring), 
                              "${option.destination[%d]} returned %s\n"
                              "${option.destination[%d]} lastresp \"%s\"",
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 lmtp2nntp_msg.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	29 May 2002 21:35:52 -0000	1.28
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	2 Jul 2002 07:49:01 -0000	1.29
  @@ -29,7 +29,7 @@
   
   #include "lmtp2nntp_msg.h"
   #include "lmtp2nntp_argz.h"
  -#include "fixme.h" //FIMXE logbook only
  +#include "fixme.h" /* FIMXE logbook only */
   #include "tai.h"
   #include "str.h"
   
  @@ -452,7 +452,7 @@
       return str;
   }
   
  -    //FIXME below is the header rewriting engine which must be cleaned up and integrated
  +    /* FIXME below is the header rewriting engine which must be cleaned up and integrated */
   
   static void headerdatadestroy(headerdata_t *hdC)
   {
  @@ -605,7 +605,7 @@
       tai_t *futurerange;
       tai_t *value;
   
  -    tai_create(&now);   //FIXME ex
  +    tai_create(&now);   /* FIXME ex */
       (void /*FIXME*/)tai_import(now, TAI_TYPE_UNIX);
   
       /* parse argument ([past][,[future]])
  @@ -627,17 +627,17 @@
           else
               *cpF++ = NUL;
           if (strlen(cpP) != 0) {
  -            tai_create(&pastrange);   //FIXME ex
  +            tai_create(&pastrange);   /* FIXME ex */
               (void /*FIXME*/)tai_import(pastrange  , TAI_TYPE_SECONDS, 24*60*60*atoi(cpP));
           }
           if (strlen(cpF) != 0) {
  -            tai_create(&futurerange); //FIXME ex
  +            tai_create(&futurerange); /* FIXME ex */
               (void /*FIXME*/)tai_import(futurerange, TAI_TYPE_SECONDS, 24*60*60*atoi(cpF));
           }
           free(cpP);
       }
   
  -    //FIXME printf("DEBUG: cpVal=\"%41s\", cpArg=\"%s\"\n", cpVal, cpArg);
  +    /* FIXME printf("DEBUG: cpVal=\"%41s\", cpArg=\"%s\"\n", cpVal, cpArg); */
       if ((cpVal == NULL) || (strlen(cpVal) == 0)) {
           *cppOut    = (char *)mallocex(DATELENMAX);
           *pnOutsize = DATELENMAX;
  @@ -645,12 +645,12 @@
           *pnOut     = strlen(*cppOut);
       }
       else {
  -        tai_create(&value);   //FIXME ex
  +        tai_create(&value);   /* FIXME ex */
           bOk = FALSE;
           for (i = 0; !bOk && (fmt[i] != NULL); i++) {
               if ((rv = tai_parse(value, cpVal, strlen(cpVal), fmt[i])) == TAI_OK) 
                   bOk = TRUE;
  -            //FIXME printf("DEBUG: checked against \"%41s\" returned %d\n", fmt[i], rv);
  +            /* FIXME printf("DEBUG: checked against \"%41s\" returned %d\n", fmt[i], rv); */
           }
           if (   bOk
   #if 0
  @@ -888,7 +888,7 @@
           return;
   
   #if 0
  -    { //TODO debug only - wait for l2 to support code block bypassing
  +    { /* TODO debug only - wait for l2 to support code block bypassing */
           int i;
           headerrule_t *hrD;
           headerdata_t *hdD;
  @@ -923,7 +923,7 @@
       }
       for (hrI = ctx->option_firstheaderrule; hrI != NULL; hrI = hrI->next) { /* for each rule */
   #if 0
  -        { //TODO debug only - wait for l2 to support code block bypassing
  +        { /* TODO debug only - wait for l2 to support code block bypassing */
               int i;
               headerrule_t *hrD;
               headerdata_t *hdD;
  @@ -932,7 +932,7 @@
               for (hrD = ctx->option_firstheaderrule; hrD != NULL; hrD = hrD->next)
                   logbook(ctx->l2, L2_LEVEL_DEBUG, "hrD->header=%s", hrD->header);
               for (hdD = ctx->msg->hdFirst; hdD != NULL; hdD = hdD->next) {
  -                //logbook(ctx->l2, L2_LEVEL_DEBUG, "hdD=%.8lx, hdD->name=%.8lx, hdD->data.s=%.8lx", (long)hdD, (long)&hdD->name, (long)&hdD->data.s);
  +                /* logbook(ctx->l2, L2_LEVEL_DEBUG, "hdD=%.8lx, hdD->name=%.8lx, hdD->data.s=%.8lx", (long)hdD, (long)&hdD->name, (long)&hdD->data.s); */
                   if (hdD->ndata == 0)
                       logbook(ctx->l2, L2_LEVEL_DEBUG, "hdD->name=%s: (NO DATA)", hdD->name);
                   if (hdD->ndata == 1)
  @@ -951,7 +951,6 @@
                   regex_ctx->nMatch = pcre_exec(hrI->pcreRegex, hrI->pcreExtra, hdI->name, strlen(hdI->name), 0, 0, ovec, OVECSIZE);
                   if (regex_ctx->nMatch >= 1) {
                       int i;
  -                    char *cp;
                       logbook(ctx->l2, L2_LEVEL_DEBUG, "regex matches, %d references", regex_ctx->nMatch);
                       pcre_get_substring_list(hdI->name, ovec, regex_ctx->nMatch, &regex_ctx->acpMatch);
                       if (regex_ctx->acpMatch != NULL)
  @@ -1068,7 +1067,7 @@
       }
   
   #if 0
  -    { //TODO debug only - wait for l2 to support code block bypassing
  +    { /* TODO debug only - wait for l2 to support code block bypassing */
           int i;
           headerrule_t *hrD;
           headerdata_t *hdD;
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 lmtp2nntp_option.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	29 May 2002 12:24:49 -0000	1.19
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	2 Jul 2002 07:49:01 -0000	1.20
  @@ -478,9 +478,9 @@
                       if (!eline) { /* process logical line unless it's empty */
                           *(cpO-1) = NUL;
                           if (lline == (pline-1))
  -                            ;//printf("DEBUG: line[%3d] = ***%s***\n", lline, cpL);
  +                            ;/*printf("DEBUG: line[%3d] = ***%s***\n", lline, cpL);*/
                           else
  -                            ;//printf("DEBUG: [%3d-%3d] = ***%s***\n", lline, pline-1, cpL);
  +                            ;/*printf("DEBUG: [%3d-%3d] = ***%s***\n", lline, pline-1, cpL);*/
                           {
                               char *cp = cpL;
                               char *option;
  @@ -491,10 +491,10 @@
                               Newarg.as = 0;
                               Newarg.az = NULL;
                               if ((option = str_token(&cp, " \t", "\"'", "#", STR_STRIPQUOTES|STR_BACKSLASHESC)) == NULL)
  -                                //printf("DEBUG: no command - comment only\n")
  +                                /*printf("DEBUG: no command - comment only\n")*/
                                   ;/* don't care about comments */
                               else {
  -                                //printf("DEBUG:    option = ***%s***\n", option);
  +                                /*printf("DEBUG:    option = ***%s***\n", option);*/
                                   if (argv == NULL) {
                                       if ((argv = (char **)malloc(   (   1 + 1) * sizeof(char **))) == NULL)
                                           return OPTION_ERR_MEM;
  @@ -514,10 +514,10 @@
                                   argv[argc] = NULL;
   
                                   if ((value = str_token(&cp, " \t", "\"'", "#", STR_STRIPQUOTES|STR_BACKSLASHESC)) == NULL)
  -                                    ;//printf("DEBUG: no value - section\n");
  +                                    ;/*printf("DEBUG: no value - section\n");*/
                                   else {
                                       while(isspace((int)*value)) value++;
  -                                    //printf("DEBUG:     value = ***%s***\n", value);
  +                                    /*printf("DEBUG:     value = ***%s***\n", value);*/
                                       if ((cpNew = strdup(value)) == NULL)
                                           return OPTION_ERR_MEM;
                                       if ((argv = (char **)realloc(argv, (argc + 1 + 1) * sizeof(char **))) == NULL)
  @@ -548,7 +548,7 @@
           return OPTION_ERR_ARG;
   
       try {
  -        option_register(o, "childsmax",          'C', OPT_SINGLE,  "10",        "Childs the daemon spawns at max.",   "childsmax",                  &stdsyntax, "m/\\d+/" ); //"m/[0-9]+/" );
  +        option_register(o, "childsmax",          'C', OPT_SINGLE,  "10",        "Childs the daemon spawns at max.",   "childsmax",                  &stdsyntax, "m/\\d+/" ); /*"m/[0-9]+/"*/
           option_register(o, "daemonize",          'D', OPT_FLAG,    NULL,        "Daemonize and detach from terminal", NULL,                         &stdsyntax, NULL );
           option_register(o, "kill",               'K', OPT_FLAG,    NULL,        "Kill a previously run daemon",       NULL,                         &stdsyntax, NULL );
           option_register(o, "pidfile",            'P', OPT_SINGLE,  NULL,        "Pidfile holding the process ID",     "filename",                   &stdsyntax, "m/.*/" );
  @@ -556,15 +556,15 @@
           option_register(o, "bind",               'b', OPT_SINGLE,  NULL,        "LMTP daemon bind",                   "addr[:port]|-|path[:perms]", &stdsyntax, "m/.*/" );
           option_register(o, "client",             'c', OPT_SINGLE,  NULL,        "NNTP client bind",                   "addr[:port]",                &stdsyntax, "m/.*/" );
           option_register(o, "destination",        'd', OPT_MULTI,   NULL,        "NNTP client destination",            "addr[:port]",                &stdsyntax, "m/.*/" );
  -        option_register(o, "groupmode",          'g', OPT_SINGLE,  "arg",       "Groupmode configures news group(s)", "arg|envelope|header",        &stdsyntax, "m/.*/" ); //"m/(arg|envelope|header)/" );
  +        option_register(o, "groupmode",          'g', OPT_SINGLE,  "arg",       "Groupmode configures news group(s)", "arg|envelope|header",        &stdsyntax, "m/.*/" ); /*"m/(arg|envelope|header)/"*/
           option_register(o, "headerrule",         'h', OPT_MULTI,   NULL,        "Header rewriting rule",              "[pri]:[regex]:header:[val]", &stdsyntax, "m/^[0-9]*:.*:.+:.*$/" );
           option_register(o, "include",            'i', OPT_MULTI,   NULL,        "Include a configuration file",       "configfile",                 &includeit, "m/.*/" );
           option_register(o, "l2spec",             'l', OPT_SINGLE,  NULL,        "L2 channel tree specification",      "l2spec",                     &stdsyntax, "m/.*/" );
           option_register(o, "mailfrom",           'm', OPT_SINGLE,  NULL,        "Mail from envelope restriction",     "regex",                      &stdsyntax, "m/.*/" );
           option_register(o, "nodename",           'n', OPT_SINGLE,  NULL,        "System nodename",                    "name",                       &stdsyntax, "m/.*/" );
  -        option_register(o, "operationmode",      'o', OPT_SINGLE,  "553/5.7.1", "Set fake status or operationmode",   "abc/a.d.e|post|feed",        &stdsyntax, "m/.*/" ); //"m/([0-9]{3}\\/[0-9]\\.[0-9]\\.[0-9]|post|feed)/" ); /* 553 = Requested action not taken: mailbox name not allowed, 5.7.1 =  Delivery not authorized, message refused */
  +        option_register(o, "operationmode",      'o', OPT_SINGLE,  "553/5.7.1", "Set fake status or operationmode",   "abc/a.d.e|post|feed",        &stdsyntax, "m/.*/" ); /*"m/([0-9]{3}\\/[0-9]\\.[0-9]\\.[0-9]|post|feed)/" ); 553 = Requested action not taken: mailbox name not allowed, 5.7.1 =  Delivery not authorized, message refused */
           option_register(o, "restrictheader",     'r', OPT_SINGLE,  NULL,        "Restrict messages by header",        "regex",                      &stdsyntax, "m/.*/" );
  -        option_register(o, "size",               's', OPT_SINGLE,  "8388608",   "Size limitation on message",         "bytes",                      &stdsyntax, "m/.*/" ); //"m/[0-9]+/" );
  +        option_register(o, "size",               's', OPT_SINGLE,  "8388608",   "Size limitation on message",         "bytes",                      &stdsyntax, "m/.*/" ); /*"m/[0-9]+/"*/
           option_register(o, "testfile",           't', OPT_MULTI,   NULL,        "Testfile for headerrule",            "filename",                   &stdsyntax, "m/.*/" );
           option_register(o, "timeoutlmtp",        NUL, OPT_SINGLE,  NULL,        "LMTP server default timeout",        "sec",                        &stdsyntax, "m/.*/" );
           option_register(o, "timeoutlmtpaccept",  NUL, OPT_SINGLE,  "0",         "LMTP server accept timeout",         "sec",                        &stdsyntax, "m/.*/" );
  @@ -579,7 +579,7 @@
           option_register(o, "newsgroup",          NUL, OPT_MULTI,   NULL,        "Newsgroup name or match",            "newsgroup|wildmat",          &stdsyntax, "m/.*/" );
       }
       catch(ex) {
  -        if (ex.ex_class == option_create)
  +        if (ex.ex_class == (void *)option_create)
               return (lmtp2nntp_option_rc_t)ex.ex_value;
           return OPTION_ERR_TRY;
       }

From ossp-cvs-owner@ossp.org  Tue Jul  2 11:50:52 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D46927656C; Tue,  2 Jul 2002 11:50:51 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_syslog.pod
Message-Id: <20020702095051.D46927656C@mail.ossp.org>
Date: Tue,  2 Jul 2002 11:50:51 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Jul-2002 11:50:51
  Branch: HEAD                             Handle: 2002070210505100

  Modified files:
    ossp-pkg/l2             l2_syslog.pod

  Log:
    try to understand the spec and do cleanups in parallel ;)

  Summary:
    Revision    Changes     Path
    1.2         +43 -50     ossp-pkg/l2/l2_syslog.pod
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_syslog.pod
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 l2_syslog.pod
  --- ossp-pkg/l2/l2_syslog.pod	27 Jun 2002 09:24:40 -0000	1.1
  +++ ossp-pkg/l2/l2_syslog.pod	2 Jul 2002 09:50:51 -0000	1.2
  @@ -31,7 +31,7 @@
   
   =head1 NAME
   
  -B<l2_syslog> - L2 syslog replacement
  +B<OSSP l2syslog> - L2 based syslog(3) replacement
   
   =head1 VERSION
   
  @@ -39,72 +39,65 @@
   
   =head1 SYNOPSIS
   
  -=over 4
  -
  -CPPFLAGS="-I /FIXME/include"
  -
  -LDFLAGS="-L /FIXME/lib"
  -
  -LIBS="-Ll2syslog -Ll2"
  -
  -=back
  + LDFLAGS=`l2-config --ldflags` \
  + LIBS="-ll2syslog -ll2" \
  + ./configure [...]
   
   =head1 DESCRIPTION
   
  -The B<l2_syslog> is a library offering the syslog(3) API otherwise
  -provided by the Standard C Library.  Instead of writing dump log files
  -it uses the powerful L2 logging capabilities. It is a drop-in
  -replacement which enables any syslog(3) consumer to take advantage of L2
  -by just linking this library against an existing object. The source code
  -remains unchanged.
  +B<OSSP l2syslog> is a companion library to B<OSSP l2>, offering the
  +syslog(3) API otherwise provided by the Standard C Library (F<libc>).
  +Instead of writing to the syslogd(8) process, it uses the powerful
  +B<OSSP l2> logging capabilities. It is a drop-in link-time replacement
  +which enables any syslog(3) consumer to take advantage of B<OSSP l2>
  +by just linking this library in before F<libc>. The source code of the
  +program remains unchanged.
   
   =head1 FILES
   
  -The B<l2_syslog> library reads configuration sections located in one or
  -more files. The path to the directory containing these file(s) is
  -specified at compile time and is given to the configure script via
  -'--with-syslog-cfgdir=...'.
  +The B<OSSP l2syslog> library reads configuration sections located in
  +one or more files. The path to the directory containing these file(s)
  +is specified at compile time and is given to the configure script via
  +C<--with-cfgdir=>I<cfgdir>.
   
   =head1 OPERATION
   
  -When an application calles openlog(3) it passes an ident string and a
  -log facility along. B<l2_syslog> tries to read the file
  -C<syslog-cfgdir/>I<ident>. If the file is not readable, all files
  -matching C<syslog-cfgdir/l2*> are read. All data that has been read in
  -is then parsed for configuration sections. These are identified by
  -'%ident I<match>' at the beginning of line. The I<match> argument is a
  -PCRE (Perl Compatible Regular Expression) that is matched against a
  -string concatenated from I<ident>/I<facility> given to the openlog(3)
  -call.  The configuration section contains a L2 specification enclosed in
  -curly brackets where the closing bracket must be placed on the beginning
  -of a line. The L2 specification may contain $1, $2 ... variables
  -which are filled from regex matches enclosed in round brackets.  A
  -channel tree is build from each matching section and all trees form a
  -single metatree. Further calls to syslog(3) will then inject log
  -messages into this metatree.
  +If an application calls openlog(3) it passes an identification string
  +(I<ident>) and a logging facility (I<facility>) along. B<OSSP l2syslog>
  +tries to read the file "C<cfgdir>C</l2.>I<ident>". If the file is not
  +readable, all files matching I<cfgdir>C</l2.*> are read.
  +
  +In both cases, all data that has been read in is then parsed for
  +configuration sections. These are identified by "C<ident >I<match>"
  +at the beginning of a line. The I<match> argument is a PCRE (Perl
  +Compatible Regular Expression) that is matched against a string
  +concatenated from "I<ident>/I<facility>" given to the openlog(3) call.
  +
  +The configuration section contains an B<OSSP l2> specification enclosed
  +in curly brackets where the closing bracket must be placed on the
  +beginning of a line and terminated with a semicolon. The B<OSSP l2>
  +specification may contain $1, $2, ... variables which are filled in from
  +the I<match> regex parts enclosed in round brackets.
  +
  +An B<OSSP l2> channel tree is build from each matching section and all
  +found trees are merged together with a "null" channel to form a single
  +tree. Further calls to syslog(3) will then inject log messages into this
  +channel tree.
   
   =head1 EXAMPLE
   
  -=over 4
  -
  -%ident sendmail/.* {
  -
  -    debug:
  -        prefix(
  -            prefix="%%b %%d %%H:%%M:%%S <%%L> $1 [%%P]: ",
  + ident sendmail/.* {
  +   debug:
  +     prefix(prefix="%%b %%d %%H:%%M:%%S <%%L> $1 [%%P]: ",
               timezone=local)
  -        -> file(
  -            path="sendmail.debug.log",
  -            append=0,perm=432)
  -
  -}
  +     -> file(path="sendmail.debug.log", append=0,perm=432)
  + };
   
  -=back
   
   =head1 OPENPKG
   
  -OpenPKG RPM packages must require "l2" for both %BuildPreReq and
  -%PreReq.
  +OpenPKG RPM packages must require the package "l2" in both C<BuildPreReq> and
  +C<PreReq> and force the packaged application to link against F<libl2syslog.a>.
   
   =head1 SEE ALSO
   

From ossp-cvs-owner@ossp.org  Tue Jul  2 20:03:18 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2674E763F3; Tue,  2 Jul 2002 20:03:18 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc_proc.c rc_script.c
Message-Id: <20020702180318.2674E763F3@mail.ossp.org>
Date: Tue,  2 Jul 2002 20:03:18 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   02-Jul-2002 20:03:18
  Branch: HEAD                             Handle: 2002070219031700

  Modified files:
    ossp-pkg/rc             rc_proc.c rc_script.c

  Log:
    Daily dump, start processing sections with regular expressions.

  Summary:
    Revision    Changes     Path
    1.11        +20 -12     ossp-pkg/rc/rc_proc.c
    1.4         +23 -6      ossp-pkg/rc/rc_script.c
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc_proc.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	1 Jul 2002 15:03:33 -0000	1.10
  +++ ossp-pkg/rc/rc_proc.c	2 Jul 2002 18:03:17 -0000	1.11
  @@ -77,6 +77,8 @@
       int nFdfunc   = 0;
       int nRet      = 0;
       int nIter     = 0;
  +    ex_t Except;
  +
       char *sBuf    = NULL;
       char *szSec   = NULL;
       char *szLocex = NULL;
  @@ -126,20 +128,26 @@
           if (nRet == -1) /* Handle read errors */
               RC_THROW(RC_ERR_IO);
   
  -        for (i = 0; pRc->m_pAnal->m_pszSecs[i]; i++) { /* Iterate over secvec */
  -            /* Extract a section from the temp script, and append it */
  -            szSec = scriptSection(pTempscript, pRc->m_pAnal->m_pszSecs[i]);
  -
  -            if (szSec) /* Only call append if the section lookup succeeded */
  -                scriptAppend(pRc->m_pScript, szSec, strlen(szSec));
  -            else if (configGetval(RC_DBG_VAL)) /* Only show when debug is set */
  -                fprintf(stderr, "#Warning: Missing section '%s' in %s!\n", pRc->m_pAnal->m_pszSecs[i], pRc->m_pAnal->m_szRcs[nIter]);
  -
  -            if (szSec) { /* Cleanup section string */
  -                free(szSec);
  -                szSec = NULL;
  +        try {
  +            for (i = 0; pRc->m_pAnal->m_pszSecs[i]; i++) { /* Iterate over */
  +                /* Extract a section from the temp script, and append it */
  +                szSec = scriptSection(pTempscript, pRc->m_pAnal->m_pszSecs[i]);
  +
  +                if (szSec) /* Only call append if the section lookup succeeds */
  +                    scriptAppend(pRc->m_pScript, szSec, strlen(szSec));
  +                else if (configGetval(RC_DBG_VAL)) /* Only show if debug set */
  +                    fprintf(stderr, "#Warning: Missing section '%s' in %s!\n",\
  +                        pRc->m_pAnal->m_pszSecs[i],\
  +                        pRc->m_pAnal->m_szRcs[nIter]);
  +
  +                if (szSec) { /* Cleanup section string */
  +                    free(szSec);
  +                    szSec = NULL;
  +                }
               }
           }
  +        catch(Except)
  +            rethrow;
   
           /* Clean up our crap */
           scriptDelete(pTempscript); /* Temp script */
  Index: ossp-pkg/rc/rc_script.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 rc_script.c
  --- ossp-pkg/rc/rc_script.c	28 Jun 2002 17:43:23 -0000	1.3
  +++ ossp-pkg/rc/rc_script.c	2 Jul 2002 18:03:17 -0000	1.4
  @@ -30,7 +30,9 @@
   #include <stdlib.h>
   #include <string.h>
   
  -#include "rc.h"
  +#include "rc.h"         /* Public Rc interface      */
  +#include "rc_pcre.h"    /* For section parsing      */
  +#include "rc_config.h"  /* For configuration access */
   
   
   /************************************************
  @@ -100,12 +102,27 @@
   ************************************************/
   char *scriptSection(rc_script_t *pScript, const char *kszSecname)
   {
  -    char *szTempout = NULL;
  -    char *szTmpsec  = NULL;
  -    char *piStart   = NULL;
  -    char *piEnd     = NULL;
  +    char *szTempout    = NULL;
  +    char *szTmpsec     = NULL;
  +    char *piStart      = NULL;
  +    char *piEnd        = NULL;
  +    int nOffset        = 0;
  +    const int kiRegopt = 0;
  +    const char *szErr  = NULL;
  +
  +    pcre *pRegex       = NULL;  /* Perl Compatible Regular Expression */
  +    pcre_extra *pExtra = NULL;  /* Used for studying an expression    */
  +
  +    assert(pScript);            /* Check for a valid incoming script  */
  +    assert(configGetval(RC_DEF_VAL));
  +
  +    if (!kszSecname)    /* If we get a NULL section label, give a NULL result */
  +        return (NULL);  /* This might be useful in some loop constructs */
  +
  +    if ((pRegex = pcre_compile(configGetval(RC_DEF_VAL), kiRegopt, &szErr, &nOffset, NULL)) == NULL) {
  +        RC_THROW(RC_ERR_SYS);
  +    }
   
  -    assert(pScript); /* Check for a valid incoming script */
       szTmpsec = malloc(strlen(kszSecname) + sizeof(char));
       strcpy(szTmpsec, "%");
       strcat(szTmpsec, kszSecname);

From ossp-cvs-owner@ossp.org  Wed Jul  3 12:00:24 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 10C1E767D4; Wed,  3 Jul 2002 12:00:24 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea-brainstorming
Message-Id: <20020703100024.10C1E767D4@mail.ossp.org>
Date: Wed,  3 Jul 2002 12:00:24 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   03-Jul-2002 12:00:23
  Branch: HEAD                             Handle: 2002070311002200

  Modified files:
    ossp-pkg/tabea          tabea-brainstorming

  Log:
    match descriptive text and RFC1866 examples

  Summary:
    Revision    Changes     Path
    1.3         +89 -57     ossp-pkg/tabea/tabea-brainstorming
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea-brainstorming
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 tabea-brainstorming
  --- ossp-pkg/tabea/tabea-brainstorming	28 Jun 2002 15:01:46 -0000	1.2
  +++ ossp-pkg/tabea/tabea-brainstorming	3 Jul 2002 10:00:22 -0000	1.3
  @@ -1,50 +1,63 @@
   
  +    About structured editing
  +    ========================
  +
       Terminology
  +    -----------
   
  -    structure - structure of the user interface
  -    template  - skeleton(s) of the output file(s) with variables which need expansion using the choices
  -    data      - file that contains the data chosen by the user
  -    output    - file(s) actually written out by tabea.
  +    config      - structure of the user interface configuration
  +    template(s) - skeleton(s) of the output file(s)
  +    data        - file that contains the data chosen by the user
  +    export(s)   - file(s) actually written out by tabea.
  +    import      - legacy (manually edited) file to import data from
   
       Files
  +    -----
   
  -    - output
  -    
  -    One or more files being written out by tabea. It is/they are build
  -    from template(s) by expanding the embedded variables using lib_var
  -    with data from the choices file. The output files are usually
  -    write-only except an import function is provided to build a baseline
  -    of choice from a pre-existing output, which is typically the case
  -    when someone has maintained such a file manually before it was taken
  -    under tabea control or such a file is received from an external
  -    source.
  +    - config
  +
  +    Menu structure configuration of the user interface. Described in
  +    more detail below under "Syntax".
  +
  +    - template(s)
  +
  +    Any ASCII file using lib_var syntax for variable expansion.
   
       - data
   
       A single file containing all data chosen by the user.  Format is one
  -    record per logical line. A physical line be extended to a long
  -    logical line using a trailing BACKSLASH just before the NEWLINE.
  -    Fields are separated by SPACE. Unused optional fields must be filled
  -    using a DASH.  The following fields exist:
  -
  -    name (mandatory)
  -    value (optional)
  -
  -    A name might end with SQUARE BRACKET OPEN, any integer and SQUARE
  -    BRACKET CLOSE, indicating an array. If the integer or the wholly
  -    squre bracket construct is omited, [0] is assumed.
  +    record per logical line which a name followed by an (optional)
  +    value. A physical line be extended to a long logical line using a
  +    trailing BACKSLASH just before the NEWLINE.  Fields are separated by
  +    SPACE.
   
  -    - template
  +    - export(s)
  +    
  +    One or more files being written out by tabea. It is/they are build
  +    from template(s) by expanding the embedded variables using lib_var
  +    and information from the data file. The output files are usually
  +    write-only.
  +    
  +    - import
   
  -    Any ASCII file using lib_var syntax for variable expansion.
  +    A function may be provided to build a baseline of choices importing
  +    a legacy file. This is typically the case when someone has
  +    maintained such a file manually before it was taken under tabea
  +    control.
   
  -    - structure of a item block
  +    Syntax
  +    ------
   
  -    Menu structure of the user interface.  Format is one record per
  -    logical line. A physical line be extended to a long logical line
  -    using a trailing BACKSLASH just before the NEWLINE. Fields are
  -    separated by SPACE. Unused optional fields must be filled using a
  -    DASH.  The following fields exist:
  +    The configuration consists of one or more "blocks" which are
  +    arbitrary collections of items.
  +    
  +    Every block consists of one or more items describing the technical
  +    and visible aspects of a single variable whose value is stored in
  +    the data file. These values are also used when lib_var expands the
  +    variables in template(s) for export.
  +    
  +    Every item has one or more values describing the technical and
  +    visible aspects of a user's choices to be assigned to an item.
   
       block {
           name (mandatory)
  @@ -55,29 +68,35 @@
           activate
           item {
               name (mandatory)
  -            namevisible
  +            visible
               description
               helptext
               helpurl
  +            activate
  +            verify
               type
  -            defaultvalue
               value {
                   name (mandatory)
                   visible
                   description
                   helptext
                   helpurl
  -                verify
  -            }
  -        }
  -    }
  +                activate
  +                checked
  +                selected
  +            };
  +        };
  +    };
       
  -    A name might end with SQUARE BRACKET OPEN, any integer and SQUARE
  -    BRACKET CLOSE, indicating an array. If the integer or the wholly
  -    squre bracket construct is omited, [0] is assumed.
  +    Elements common to blocks, items and values
  +    -------------------------------------------
  +
  +    A name matches [a-zA-Z][0-9a-zA-Z]* and is used when reading and
  +    writing the data file and when expanding variables in the
  +    template(s) for export.
   
  -    A description is a human readable text for name. If omited, name is
  -    used verbatim.
  +    A visible description for humans can be specified.  If omited, name
  +    is used verbatim.
   
       A helptext is a human readable text for the word "help". If omitted
       and "helpurl" is set, it defaults to "help". If "helpurl" is omitted
  @@ -85,22 +104,35 @@
   
       The helpurl is the URL to a help page describing the item.
   
  -    The defaultvalue is taken if the name is omitted in the data file,
  -    i.e. the data file did not previously exist, was modfied through an
  -    external mechanism or an updated structure added a name which did
  -    not exist in previous versions. It is also used if the
  -    structure validation failed.
  -    
  -    A valuehelptext is a human readable text for the word "help". If omitted
  -    and "valuehelpurl" is set, it defaults to "help". If "valuehelpurl" is omitted
  -    no help link is shown at all.
  +    An activate condition can be specified to enable a block, item or
  +    value.  It is a little perl program and uses perl's "eval" to find
  +    out the result
  +
  +    Elements used in items only
  +    ---------------------------
  +
  +    The verify is a regex to check if the data read or the user input is
  +    valid. A "verify xxx" is a shortcut for "eval name =~ xxx". If used
  +    together with eval both must match.
  +
  +    The eval is a little perl program and uses perl's "eval" to find out
  +    the result. It is a more sophisticated method to check for valid
  +    values. If used together with verify both must match.
  +
  +    The type field is explained below under "All types by example".
  +
  +    Elements used in values only
  +    ----------------------------
  +
  +    A name describes the default value.
  +
  +    The checked element is a flag to highlight the value in the menu.
   
  -    The valuehelpurl is the URL to a help page describing the value.
  +    The select element is a flag to highlight the value in the menu.
   
  -    The "verify" is a regex.
  +    All types by example
  +    --------------------
   
  -    The "eval" is a little perl program and uses perl's "eval" to find
  -    out the result.
       Possible types are taken from RFC1866, Section 8.1.2 - 8.1.4
   
       8.1.2.1. Text Field: INPUT TYPE=TEXT

From ossp-cvs-owner@ossp.org  Wed Jul  3 12:34:07 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B5CF67645C; Wed,  3 Jul 2002 12:34:07 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea-brainstorming
Message-Id: <20020703103407.B5CF67645C@mail.ossp.org>
Date: Wed,  3 Jul 2002 12:34:07 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   03-Jul-2002 12:34:07
  Branch: HEAD                             Handle: 2002070311340700

  Modified files:
    ossp-pkg/tabea          tabea-brainstorming

  Log:
    api

  Summary:
    Revision    Changes     Path
    1.4         +48 -0      ossp-pkg/tabea/tabea-brainstorming
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea-brainstorming
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 tabea-brainstorming
  --- ossp-pkg/tabea/tabea-brainstorming	3 Jul 2002 10:00:22 -0000	1.3
  +++ ossp-pkg/tabea/tabea-brainstorming	3 Jul 2002 10:34:07 -0000	1.4
  @@ -73,6 +73,7 @@
               helptext
               helpurl
               activate
  +            match
               verify
               type
               value {
  @@ -111,6 +112,9 @@
       Elements used in items only
       ---------------------------
   
  +    A match regex is used when importing a legacy file. When parts of an
  +    imported file match the regex, $1 is used as the current value.
  +
       The verify is a regex to check if the data read or the user input is
       valid. A "verify xxx" is a shortcut for "eval name =~ xxx". If used
       together with eval both must match.
  @@ -329,7 +333,51 @@
           }
       }
   
  +    API
  +    ---
  +
  +    - handle = create(config, type, prefix)
  +
  +        Reads config and initializes items with default values.
  +        Currently the only supported type is HTML2 which causes only
  +        tags described in RFC1866 to be used.  When a menu is rendered,
  +        some elements may require uniqe names in a scope wider than
  +        known by this module, i.e. when two configs are presented on one
  +        screen or along with other information, so every item is
  +        prefixed.
  +
  +    - rc = load(handle, data)
  +
  +        Reads data and sets the value of items.
  +
  +    - rc = save(handle, data)
  +
  +        Writes items including their values.
  +
  +    - rc = render(handle, buffer)
  +
  +        Renders a menu writes it into the buffer. The contents of the
  +        buffer can be merged into a larger output. Values are verified
  +        and invalid data is marked (FIXME how? red, reset to default,
  +        configurable behaviour, configurable error messages ...) The
  +        caller must finally print out the menu and when an input comes
  +        back it must identify menu activity (i.e. by checking the
  +        prefix) and call render again and again or execute some action.
  +
  +    - rc = import(handle, legacyfile)
  +
  +        Reads a legacy (manually edited or previously exported) file and
  +        tries to match out values.
  +
  +    - rc = export(handle, template, exportfile)
  +
  +        Applies variable substitution for a template and writes the
  +        result out to exportfile.
  +
  +    - rc = destroy(handle)
  +
       Example: Generic RAID configuration
  +    -----------------------------------
   
       block {
           name BEGIN

From ossp-cvs-owner@ossp.org  Wed Jul  3 15:25:36 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E825C767C1; Wed,  3 Jul 2002 15:25:35 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg .cvsignore 00TODO Makefile cfg.h cfg.pod cfg_...
Message-Id: <20020703132535.E825C767C1@mail.ossp.org>
Date: Wed,  3 Jul 2002 15:25:35 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Jul-2002 15:25:35
  Branch: HEAD                             Handle: 2002070314253400

  Added files:
    ossp-pkg/cfg            .cvsignore 00TODO Makefile cfg.h cfg.pod cfg_fmt.c
                            cfg_fmt.h cfg_grid.c cfg_grid.h cfg_node.c
                            cfg_node.h cfg_syn.c cfg_syn.h cfg_syn_parse.y
                            cfg_syn_scan.l cfg_test.c cfg_util.c cfg_util.h
                            sample.cfg

  Log:
    Add this first cut for the forthcoming OSSP cfg library to CVS.
    This is work in progress and still not ready for use anywhere.

  Summary:
    Revision    Changes     Path
    1.1         +6  -0      ossp-pkg/cfg/.cvsignore
    1.1         +4  -0      ossp-pkg/cfg/00TODO
    1.1         +51 -0      ossp-pkg/cfg/Makefile
    1.1         +99 -0      ossp-pkg/cfg/cfg.h
    1.1         +160 -0     ossp-pkg/cfg/cfg.pod
    1.1         +1167 -0    ossp-pkg/cfg/cfg_fmt.c
    1.1         +76 -0      ossp-pkg/cfg/cfg_fmt.h
    1.1         +511 -0     ossp-pkg/cfg/cfg_grid.c
    1.1         +50 -0      ossp-pkg/cfg/cfg_grid.h
    1.1         +233 -0     ossp-pkg/cfg/cfg_node.c
    1.1         +73 -0      ossp-pkg/cfg/cfg_node.h
    1.1         +149 -0     ossp-pkg/cfg/cfg_syn.c
    1.1         +74 -0      ossp-pkg/cfg/cfg_syn.h
    1.1         +166 -0     ossp-pkg/cfg/cfg_syn_parse.y
    1.1         +220 -0     ossp-pkg/cfg/cfg_syn_scan.l
    1.1         +97 -0      ossp-pkg/cfg/cfg_test.c
    1.1         +93 -0      ossp-pkg/cfg/cfg_util.c
    1.1         +39 -0      ossp-pkg/cfg/cfg_util.h
    1.1         +26 -0      ossp-pkg/cfg/sample.cfg
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  cfg_syn_parse.c
  cfg_syn_parse.h
  cfg_syn_scan.c
  cfg_test
  *.o
  *.a
  Index: ossp-pkg/cfg/00TODO
  ============================================================
  $ cvs update -p -r1.1 00TODO
  - cfg_t
  - cfg_data.c
  - cfg_node_dump()
  - cfg_node_destroy() for whole tree
  Index: ossp-pkg/cfg/Makefile
  ============================================================
  $ cvs update -p -r1.1 Makefile
  
  CC     = /usr/opkg/bin/gcc
  CFLAGS = -pipe -O2 -g -ggdb3 \
  		 -ansi -pedantic -Wall \
  		 -Wmultichar -Wno-system-headers -Wtraditional \
  		 -Wshadow -Wpointer-arith \
           -Wbad-function-cast -Wcast-align \
  		 -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations \
           -Wredundant-decls -Wnested-externs -Winline
  #CFLAGS = -Wundef -W -Wconversion -Wfloat-equal -Wunreachable-code -Wwrite-strings 
  AR     = ar
  RANLIB = ranlib
  RM     = rm -f
  BISON  = bison
  FLEX   = flex-beta
  
  LIB    = libcfg.a
  OBJ    = cfg_grid.o cfg_node.o cfg_fmt.o cfg_syn.o cfg_syn_parse.o cfg_syn_scan.o cfg_util.o
  TST    = cfg_test
  
  all: $(LIB) $(TST)
  
  .c.o:
  	$(CC) $(CFLAGS) -c $<
  
  cfg_syn.c: cfg_syn.h cfg_syn_parse.h
  cfg_syn_scan.o: cfg_syn_scan.c cfg_syn_parse.h
  cfg_syn_scan.c: cfg_syn_scan.l
  	$(FLEX) -Pcfg_syn_ -s -8 -B -ocfg_syn_scan.c cfg_syn_scan.l
  cfg_syn_parse.c cfg_syn_parse.h: cfg_syn_parse.y
  	$(BISON) -d -k -pcfg_syn_ -ocfg_syn_parse.c cfg_syn_parse.y
  
  $(LIB): $(OBJ)
  	$(AR) rc $(LIB) $(OBJ)
  	$(RANLIB) $(LIB)
  
  $(TST): $(TST).o $(LIB)
  	$(CC) -o $(TST) $(TST).o $(LIB)
  
  clean:
  	$(RM) $(LIB)
  	$(RM) $(OBJ)
  	$(RM) $(TST).o $(TST)
  	$(RM) core *.core *.aux *.log
  	$(RM) cfg_syn_parse.c cfg_syn_parse.h
  	$(RM) cfg_syn_scan.c
  
  check: test
  test: $(TST)
  	./$(TST) sample.cfg
  
  Index: ossp-pkg/cfg/cfg.h
  ============================================================
  $ cvs update -p -r1.1 cfg.h
  /*
  **  OSSP cfg - Configuration Parsing
  **  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP cfg, a configuration parsing
  **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRCFG, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  cfg.h: master API
  */
  
  #ifndef __CFG_H__
  #define __CFG_H__
  
  #include <stdarg.h>
  
  /* ============================================================ */
  
  /* general return codes */
  typedef enum {
      CFG_OK = 0,
      CFG_ERR_ARG,
      CFG_ERR_INT,
      CFG_ERR_SYS,
      CFG_ERR_SYN
  } cfg_rc_t;
  
  /* ============================================================ */
  
  /* configuration handle */
  struct cfg_st;
  typedef struct cfg_st cfg_t;
  
  /* configuration API */
  cfg_rc_t   cfg_create      (cfg_t **cfg);
  cfg_rc_t   cfg_destroy     (cfg_t  *cfg);
  
  /* ============================================================ */
  
  /* list of node types */
  typedef enum {
      CFG_NODE_TYPE_NN = 0,     /* node unknown */
      CFG_NODE_TYPE_SEQ,        /* node represents a sequence */
      CFG_NODE_TYPE_DIR,        /* node represents a directive */
      CFG_NODE_TYPE_TOK         /* node represents a token */
  } cfg_node_type_t;
  
  /* list of node attributes */
  typedef enum {
      CFG_NODE_ATTR_TYPE,       /* type of node */
      CFG_NODE_ATTR_PARENT,     /* pointer to parent node */
      CFG_NODE_ATTR_RBROTH,     /* pointer to right brother node */
      CFG_NODE_ATTR_CHILD1,     /* pointer to first child node */
      CFG_NODE_ATTR_TOKEN,      /* pointer to the node token string */
      CFG_NODE_ATTR_DATA        /* pointer to the node annotation data */
  } cfg_node_attr_t;
  
  /* list of node linking variants */
  typedef enum {
      CFG_NODE_LINK_PARENT,
      CFG_NODE_LINK_RBROTH,
      CFG_NODE_LINK_CHILD1
  } cfg_node_link_t;
  
  /* configuration node type */
  struct cfg_node_st;
  typedef struct cfg_node_st cfg_node_t;
  
  cfg_rc_t   cfg_node_create  (cfg_node_t **node);
  cfg_rc_t   cfg_node_set     (cfg_node_t  *node, cfg_node_attr_t attr, ...);
  cfg_rc_t   cfg_node_get     (cfg_node_t  *node, cfg_node_attr_t attr, ...);
  cfg_rc_t   cfg_node_link    (cfg_node_t  *node, cfg_node_link_t id, cfg_node_t *node2);
  cfg_rc_t   cfg_node_unlink  (cfg_node_t  *node);
  cfg_rc_t   cfg_node_apply   (cfg_node_t  *node, void (*cb_fct)(void *, cfg_node_t *), void *cb_ctx);
  cfg_rc_t   cfg_node_destroy (cfg_node_t  *node);
  
  /* ============================================================ */
  
  #endif /* __CFG_H__ */
  
  Index: ossp-pkg/cfg/cfg.pod
  ============================================================
  $ cvs update -p -r1.1 cfg.pod
  ##
  ##  OSSP cfg - Configuration Parsing
  ##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  ##  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
  ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  ##
  ##  This file is part of OSSP cfg, a configuration parsing
  ##  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  cfg.pod: manual page
  ##
  
  =pod
  
  =head1 NAME
  
  B<OSSP cfg> - Configuration Parsing
  
  =head1 SYNOPSIS
  
  ...
  
  =head1 DESCRIPTION
  
  B<OSSP cfg> is a ISO-C library for parsing arbitrary C/C++-style
  configuration files. A configuration is sequence of directives. Each
  directive consists of zero or more tokens. Each token can be either a
  string or again a complete sequence. This means the configuration syntax
  has a recursive structure and this way allows to configure structures
  which require arbitrarily nested sections.
  
  =head2 CONFIGURATION SYNTAX
  
  The configuration syntax is described by the following context-free
  (Chomsky-2) grammar:
  
  B<sequence>      ::= I<empty>
                  | B<directive>
                  | B<directive> B<SEP> B<sequence>
  
  B<directive>     ::= B<token> 
                  | B<token> B<directive>
  
  B<token>         ::= B<OPEN> B<sequence> B<CLOSE>
                  | B<string>
  
  B<string>        ::= B<DQ_STRING>   # double quoted string
                  | B<SQ_STRING>   # single quoted string
                  | B<PT_STRING>   # plain text string
  
  The other contained terminal symbols are defined itself by the following
  set of grammars production (regular sub-grammars for character
  sequences given as Perl-style regular expressions "/I<regex>/"):
  
  B<SEP>           ::= /;/
  
  B<OPEN>          ::= /{/
  
  B<CLOSE>         ::= /}/
  
  B<DQ_STRING>     ::= /"/ B<DQ_CHARS> /"/
  
  B<DQ_CHARS>      ::= I<empty>
                  | B<DQ_CHAR> B<DQ_CHARS>
  
  B<DQ_CHAR>       ::= /\\"/               # escaped quote
                  | /\\x[0-9a-zA-Z]{2}/ # hexadecimal char
                  | /\\[0-7]{1,3}/      # octal character
                  | /\\[trn]/           # TAB, CR, NL
                  | /\\\n[ \t]*/        # line continuation
                  | /\\\\/              # escaped escape
                  | /./                 # any other char
  
  B<SQ_STRING>     ::= /'/ B<SQ_CHARS> /'/
  
  B<SQ_CHARS>      ::= I<empty>
                  | B<SQ_CHAR> B<SQ_CHARS>
  
  B<SQ_CHAR>       ::= /\\'/               # escaped quote
                  | /\\\n[ \t]*/        # line contination
                  | /\\\\/              # escaped escape
                  | /./                 # any other char
  
  B<PT_STRING>     ::= B<PT_CHAR> B<PT_CHARS>
  
  B<PT_CHARS>      ::= I<empty>
                  | B<PT_CHAR> B<PT_STRING>
  
  B<PT_CHAR>       ::= /[^ \t\n;{}"']/     # none of specials
  
  Additionally, white-space B<WS> and comment B<CO> tokens are allowed at
  any position in the above productions of the previous grammar part.
  
  B<WS>            ::= /[ \t\n]+/
  
  B<CO>            ::= B<CO_C>                # style of C
                  | B<CO_CXX>              # style of C++
                  | B<CO_SH>               # style of /bin/sh
  
  B<CO_C>          ::= /\/\*([^*]|\*(?!\/))*\*\//
  
  B<CO_CXX>        ::= /\/\/[^\n]*/
  
  B<CO_SH>         ::= /#[^\n]*/
  
  =head2 CONFIGURATION EXAMPLE
  
  A more intuitive description of the configuration syntax is perhaps given by
  the following example which shows all features at once:
  
   /* single word */
   foo;
  
   /* multi word */
   foo bar quux;
  
   /* nested structure */
   foo { bar; baz } quux;
  
   /* quoted strings */
   'foo bar'
   "foo\x0a\t\n\
    bar"
  
  =head1 APPLICATION PROGRAMMING INTERFACE (API)
  
  =head1 HISTORY
  
  B<OSSP cfg> was implemented in lots of small steps over a very
  long time. The first ideas date back to the year 1995 when Ralf S.
  Engelschall attended his first compiler construction lessons at
  university. But it was first time finished in 2002 by him for use in the
  B<OSSP> project.
  
  =head1 AUTHOR
  
   Ralf S. Engelschall
   rse@engelschall.com
   www.engelschall.com
  
  =cut
  
  Index: ossp-pkg/cfg/cfg_fmt.c
  ============================================================
  $ cvs update -p -r1.1 cfg_fmt.c
  /*
  **  OSSP cfg - Configuration Parsing
  **  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP cfg, a configuration parsing
  **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRCFG, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  cfg_fmt.c: printf(3)-style formatting
  */
  
  /*
   * This is a generic printf-style formatting code which is based on
   * Apache's ap_snprintf which it turn is based on and used with the
   * permission of, the SIO stdio-replacement strx_* functions by Panos
   * Tsirigotis <panos@alumni.cs.colorado.edu> for xinetd. The IEEE
   * floating point formatting routines are derived from an anchient
   * FreeBSD version which took it from GNU libc-4.6.27 and modified it
   * to be thread safe. The whole code was finally cleaned up, stripped
   * and extended by Ralf S. Engelschall for use inside the Str library.
   * Especially any Apache and network specific kludges were removed again
   * and instead the formatting engine now can be extended by the caller
   * on-the-fly. It was then finally adjusted to be stand-alone for use
   * inside OSSP.
   */
  
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   */
  
  #include <stdio.h>
  #include <stdlib.h>
  #include <stdarg.h>
  #include <string.h>
  #include <ctype.h>
  #include <math.h>
  
  #include "cfg_fmt.h"
  
  /* types which are locally use */
  typedef long                 long_int;
  typedef unsigned long      u_long_int;
  #if defined(SIZEOF_LONG_LONG) && (SIZEOF_LONG_LONG > 0)
  typedef long long            quad_int;
  typedef unsigned long long u_quad_int;
  #else
  typedef long                 quad_int;
  typedef unsigned long      u_quad_int;
  #endif
  
  /* a few handy defines */
  #ifndef NUL
  #define NUL '\0'
  #endif
  #ifndef NULL
  #define NULL ((void *)0)
  #endif
  #ifndef FALSE
  #define FALSE (0)
  #endif
  #ifndef TRUE
  #define TRUE (!FALSE)
  #endif
  #define S_NULL          "(NULL)"
  #define S_NULL_LEN      6
  #define FLOAT_DIGITS    6
  #define EXPONENT_LENGTH 10
  
  /* NUM_BUF_SIZE is the size of the buffer used for arithmetic 
     conversions. This is a magic number; do NOT decrease it! */
  #define NUM_BUF_SIZE    512
  #define NDIG            80
  
  /* compatibility */
  #if !defined(HAVE_ISNAN)
  #define isnan(d) (0)
  #endif
  #if !defined(HAVE_ISINF)
  #define isinf(d) (0)
  #endif
  
  /* explicit support for unsigned char based ctype stuff */
  #define cfg_fmt_isalpha(c)  (isalpha(((unsigned char)(c))))
  #define cfg_fmt_isdigit(c)  (isdigit(((unsigned char)(c))))
  #define cfg_fmt_isxdigit(c) (isxdigit(((unsigned char)(c))))
  #define cfg_fmt_islower(c)  (islower(((unsigned char)(c))))
  #define cfg_fmt_tolower(c)  (tolower((unsigned char)(c)))
  
  /* 
   * Convert decimal number to its string representation. The number of
   * digits is specified by ndigit decpt is set to the position of the
   * decimal point sign is set to 0 for positive, 1 for negative. buf must
   * have at least NDIG bytes.
   */
  
  #define cfg_fmt_ecvt(arg,ndigits,decpt,sign,buf) \
          cfg_fmt_cvt((arg), (ndigits), (decpt), (sign), 1, (buf))
  
  #define cfg_fmt_fcvt(arg,ndigits,decpt,sign,buf) \
          cfg_fmt_cvt((arg), (ndigits), (decpt), (sign), 0, (buf))
  
  static char *
  cfg_fmt_cvt(
      double arg, 
      int ndigits, 
      int *decpt, 
      int *sign, 
      int eflag,
      char *buf)
  {
      register int r2;
      double fi, fj;
      register char *p, *p1;
  
      if (ndigits >= NDIG - 1)
          ndigits = NDIG - 2;
      r2 = 0;
      *sign = FALSE;
      p = &buf[0];
      if (arg < 0) {
          *sign = TRUE;
          arg = -arg;
      }
      arg = modf(arg, &fi);
      p1 = &buf[NDIG];
  
      /* Do integer part */
      if (fi != 0) {
          p1 = &buf[NDIG];
          while (fi != 0 && p1 > &buf[0]) {
              fj = modf(fi / 10, &fi);
              *--p1 = (int)((fj + .03) * 10) + '0';
              r2++;
          }
          while (p1 < &buf[NDIG])
              *p++ = *p1++;
      }
      else if (arg > 0) {
          while ((fj = arg * 10) < 1) {
              arg = fj;
              r2--;
          }
      }
      p1 = &buf[ndigits];
      if (eflag == 0)
          p1 += r2;
      *decpt = r2;
      if (p1 < &buf[0]) {
          buf[0] = NUL;
          return (buf);
      }
      while (p <= p1 && p < &buf[NDIG]) {
          arg *= 10;
          arg = modf(arg, &fj);
          *p++ = (int) fj + '0';
      }
      if (p1 >= &buf[NDIG]) {
          buf[NDIG - 1] = NUL;
          return (buf);
      }
      p = p1;
      *p1 += 5;
      while (*p1 > '9') {
          *p1 = '0';
          if (p1 > buf)
              ++ * --p1;
          else {
              *p1 = '1';
              (*decpt)++;
              if (eflag == 0) {
                  if (p > buf)
                      *p = '0';
                  p++;
              }
          }
      }
      *p = NUL;
      return buf;
  }
  
  static char *
  cfg_fmt_gcvt(
      double number, 
      int ndigit, 
      char *buf, 
      int altform)
  {
      int sign;
      int decpt;
      register char *p1, *p2;
      register int i;
      char buf1[NDIG];
  
      p1 = cfg_fmt_ecvt(number, ndigit, &decpt, &sign, buf1);
      p2 = buf;
      if (sign)
          *p2++ = '-';
      for (i = ndigit - 1; i > 0 && p1[i] == '0'; i--)
          ndigit--;
      if ((decpt >= 0 && decpt - ndigit > 4)
          || (decpt < 0 && decpt < -3)) { /* use E-style */
          decpt--;
          *p2++ = *p1++;
          *p2++ = '.';
          for (i = 1; i < ndigit; i++)
              *p2++ = *p1++;
          *p2++ = 'e';
          if (decpt < 0) {
              decpt = -decpt;
              *p2++ = '-';
          }
          else
              *p2++ = '+';
          if (decpt / 100 > 0)
              *p2++ = decpt / 100 + '0';
          if (decpt / 10 > 0)
              *p2++ = (decpt % 100) / 10 + '0';
          *p2++ = decpt % 10 + '0';
      }
      else {
          if (decpt <= 0) {
              if (*p1 != '0')
                  *p2++ = '.';
              while (decpt < 0) {
                  decpt++;
                  *p2++ = '0';
              }
          }
          for (i = 1; i <= ndigit; i++) {
              *p2++ = *p1++;
              if (i == decpt)
                  *p2++ = '.';
          }
          if (ndigit < decpt) {
              while (ndigit++ < decpt)
                  *p2++ = '0';
              *p2++ = '.';
          }
      }
      if (p2[-1] == '.' && !altform)
          p2--;
      *p2 = NUL;
      return buf;
  }
  
  /*
   * The INS_CHAR macro inserts a character in the buffer and flushes the
   * buffer if necessary. It uses the char pointers sp and bep: sp points
   * to the next available character in the buffer, bep points to the
   * end-of-buffer+1. While using this macro, note that the nextb pointer
   * is NOT updated. NOTE: Evaluation of the c argument should not have
   * any side-effects
   */
  #define INS_CHAR(c, sp, bep, cc) {  \
      if (sp >= bep) {                \
          vbuff->curpos = sp;         \
          if (vbuff->flush(vbuff))    \
              return -1;              \
          sp = vbuff->curpos;         \
          bep = vbuff->endpos;        \
      }                               \
      *sp++ = (c);                    \
      cc++;                           \
  }
  
  /*
   * Convert a string to decimal value 
   */
  #define NUM(c) ((c) - '0')
  #define STR_TO_DEC(str, num) {    \
      num = NUM(*str++);            \
      while (cfg_fmt_isdigit(*(str))) { \
          num *= 10 ;               \
          num += NUM(*str++) ;      \
      }                             \
  }
       
  /*
   * This macro does zero padding so that the precision requirement is
   * satisfied. The padding is done by adding '0's to the left of the
   * string that is going to be printed.
   */
  #define FIX_PRECISION(adjust, precision, s, s_len)  \
      if (adjust) {                                   \
          while (s_len < precision) {                 \
              *--s = '0';                             \
              s_len++;                                \
          }                                           \
      }
  
  /*
   * This macro does padding. 
   * The padding is done by printing the character ch.
   */
  #define PAD(width, len, ch) \
      do {                            \
          INS_CHAR(ch, sp, bep, cc);  \
          width--;                    \
      } while (width > len)
  
  /*
   * Prefix the character ch to the string str
   * Increase length. Set the has_prefix flag.
   */
  #define PREFIX(str, length, ch) \
      *--str = ch;                \
      length++;                   \
      has_prefix = TRUE
  
  /*
   * Convert num to its decimal format.
   * Return value:
   *   - a pointer to a string containing the number (no sign)
   *   - len contains the length of the string
   *   - is_negative is set to TRUE or FALSE depending on the sign
   *     of the number (always set to FALSE if is_unsigned is TRUE)
   * The caller provides a buffer for the string: that is the buf_end argument
   * which is a pointer to the END of the buffer + 1 (i.e. if the buffer
   * is declared as buf[ 100 ], buf_end should be &buf[ 100 ])
   * Note: we have 2 versions. One is used when we need to use quads
   * (conv_10_quad), the other when we don't (conv_10). We're assuming the
   * latter is faster.
   */
  static char *
  conv_10(
      register long_int num, 
      register int is_unsigned,
      register int *is_negative, 
      char *buf_end,
      register size_t *len)
  {
      register char *p = buf_end;
      register u_long_int magnitude;
  
      if (is_unsigned) {
          magnitude = (u_long_int)num;
          *is_negative = FALSE;
      }
      else {
          *is_negative = (num < 0);
          /* On a 2's complement machine, negating the most negative integer 
             results in a number that cannot be represented as a signed integer.
             Here is what we do to obtain the number's magnitude:
                  a. add 1 to the number
                  b. negate it (becomes positive)
                  c. convert it to unsigned
                  d. add 1 */
          if (*is_negative) {
              long_int t = num + 1;
  
              magnitude = ((u_long_int) - t) + 1;
          }
          else
              magnitude = (u_long_int)num;
      }
      /* We use a do-while loop so that we write at least 1 digit */
      do {
          register u_long_int new_magnitude = magnitude / 10;
          *--p = (char) (magnitude - new_magnitude * 10 + '0');
          magnitude = new_magnitude;
      } while (magnitude);
      *len = (int)(buf_end - p);
      return p;
  }
  
  static char *
  conv_10_quad(
      quad_int num, 
      register int is_unsigned,
      register int *is_negative, 
      char *buf_end,
      register size_t *len)
  {
      register char *p = buf_end;
      u_quad_int magnitude;
  
      if (is_unsigned) {
          magnitude = (u_quad_int)num;
          *is_negative = FALSE;
      }
      else {
          *is_negative = (num < 0);
          /* On a 2's complement machine, negating the most negative integer 
             result in a number that cannot be represented as a signed integer.
             Here is what we do to obtain the number's magnitude:
                  a. add 1 to the number
                  b. negate it (becomes positive)
                  c. convert it to unsigned
                  d. add 1 */
          if (*is_negative) {
              quad_int t = num + 1;
              magnitude = ((u_quad_int) - t) + 1;
          }
          else
              magnitude = (u_quad_int)num;
      }
      /* We use a do-while loop so that we write at least 1 digit */
      do {
          u_quad_int new_magnitude = magnitude / 10;
          *--p = (char)(magnitude - new_magnitude * 10 + '0');
          magnitude = new_magnitude;
      } while (magnitude);
      *len = (int)(buf_end - p);
      return p;
  }
  
  /*
   * Convert a floating point number to a string formats 'f', 'e' or 'E'.
   * The result is placed in buf, and len denotes the length of the string
   * The sign is returned in the is_negative argument (and is not placed
   * in buf).
   */
  static char *
  conv_fp(
      register char format, 
      register double num,
      int add_dp, 
      int precision, 
      int *is_negative,
      char *buf, 
      size_t *len)
  {
      register char *s = buf;
      register char *p;
      int decimal_point;
      char buf1[NDIG];
  
      if (format == 'f')
          p = cfg_fmt_fcvt(num, precision, &decimal_point, is_negative, buf1);
      else  /* either e or E format */
          p = cfg_fmt_ecvt(num, precision + 1, &decimal_point, is_negative, buf1);
  
      /* Check for Infinity and NaN */
      if (cfg_fmt_isalpha(*p)) {
          *len = strlen(strcpy(buf, p));
          *is_negative = FALSE;
          return (buf);
      }
  
      if (format == 'f') {
          if (decimal_point <= 0) {
              *s++ = '0';
              if (precision > 0) {
                  *s++ = '.';
                  while (decimal_point++ < 0)
                      *s++ = '0';
              }
              else if (add_dp)
                  *s++ = '.';
          }
          else {
              while (decimal_point-- > 0)
                  *s++ = *p++;
              if (precision > 0 || add_dp)
                  *s++ = '.';
          }
      }
      else {
          *s++ = *p++;
          if (precision > 0 || add_dp)
              *s++ = '.';
      }
  
      /* copy the rest of p, the NUL is NOT copied */
      while (*p)
          *s++ = *p++;
  
      if (format != 'f') {
          char temp[EXPONENT_LENGTH];     /* for exponent conversion */
          size_t t_len;
          int exponent_is_negative;
  
          *s++ = format;          /* either e or E */
          decimal_point--;
          if (decimal_point != 0) {
              p = conv_10((long_int) decimal_point, FALSE, &exponent_is_negative, 
                          &temp[EXPONENT_LENGTH], &t_len);
              *s++ = exponent_is_negative ? '-' : '+';
              /* Make sure the exponent has at least 2 digits */
              if (t_len == 1)
                  *s++ = '0';
              while (t_len--)
                  *s++ = *p++;
          }
          else {
              *s++ = '+';
              *s++ = '0';
              *s++ = '0';
          }
      }
  
      *len = (int)(s - buf);
      return buf;
  }
  
  /*
   * Convert num to a base X number where X is a power of 2. nbits determines X.
   * For example, if nbits is 3, we do base 8 conversion
   * Return value:
   *      a pointer to a string containing the number
   * The caller provides a buffer for the string: that is the buf_end
   * argument which is a pointer to the END of the buffer + 1 (i.e. if the
   * buffer is declared as buf[100], buf_end should be &buf[100]) As with
   * conv_10, we have a faster version which is used when the number isn't
   * quad size.
   */
  
  static const char low_digits[]   = "0123456789abcdef";
  static const char upper_digits[] = "0123456789ABCDEF";
  
  static char *
  conv_p2(
      register u_long_int num, 
      register int nbits,
      char format, 
      char *buf_end, 
      register size_t *len)
  {
      register int mask = (1 << nbits) - 1;
      register char *p = buf_end;
      register const char *digits = (format == 'X') ? upper_digits : low_digits;
  
      do {
          *--p = digits[num & mask];
          num >>= nbits;
      } while (num);
      *len = (int)(buf_end - p);
      return p;
  }
  
  static char *
  conv_p2_quad(
      u_quad_int num, 
      register int nbits,
      char format, 
      char *buf_end, 
      register size_t *len)
  {
      register int mask = (1 << nbits) - 1;
      register char *p = buf_end;
      register const char *digits = (format == 'X') ? upper_digits : low_digits;
  
      do {
          *--p = digits[num & mask];
          num >>= nbits;
      } while (num);
      *len = (size_t)(buf_end - p);
      return p;
  }
  
  /* 
   * cfg_fmt_format(), the generic printf-style formatting routine
   * and heart of this piece of source.
   */
  int 
  cfg_fmt_format(
      cfg_fmt_format_t *vbuff, 
      const char *fmt, 
      va_list ap)
  {
      register char *sp;
      register char *bep;
      register int cc = 0;
      register unsigned int i;
  
      char *s = NULL;
      char *q;
      size_t s_len;
  
      register int min_width = 0;
      int precision = 0;
      enum { LEFT, RIGHT } adjust;
      char pad_char;
      char prefix_char;
  
      double fp_num;
      quad_int i_quad = (quad_int)0;
      u_quad_int ui_quad;
      long_int i_num = (long_int)0;
      u_long_int ui_num;
  
      char num_buf[NUM_BUF_SIZE];
      char char_buf[2]; /* for printing %% and %<unknown> */
  
      enum var_type_enum { IS_QUAD, IS_LONG, IS_SHORT, IS_INT };
      enum var_type_enum var_type = IS_INT;
  
      int alternate_form;
      int print_sign;
      int print_blank;
      int adjust_precision;
      int adjust_width;
      int is_negative;
  
      char extinfo[20];
  
      sp = vbuff->curpos;
      bep = vbuff->endpos;
  
      while (*fmt != NUL) {
          if (*fmt != '%') {
              INS_CHAR(*fmt, sp, bep, cc);
          }
          else {
              /*
               * Default variable settings
               */
              adjust = RIGHT;
              alternate_form = print_sign = print_blank = FALSE;
              pad_char = ' ';
              prefix_char = NUL;
              extinfo[0] = NUL;
  
              fmt++;
  
              /*
               * Try to avoid checking for flags, width or precision
               */
              if (!cfg_fmt_islower(*fmt)) {
                  /*
                   * Recognize flags: -, #, BLANK, +
                   */
                  for (;; fmt++) {
                      if (*fmt == '{') {
                          i = 0;
                          for (fmt++; *fmt != '}' && *fmt != NUL; fmt++) {
                              if (i < sizeof(extinfo)-1)
                                  extinfo[i++] = *fmt;
                          }
                          extinfo[i] = NUL;
                      }
                      else if (*fmt == '-')
                          adjust = LEFT;
                      else if (*fmt == '+')
                          print_sign = TRUE;
                      else if (*fmt == '#')
                          alternate_form = TRUE;
                      else if (*fmt == ' ')
                          print_blank = TRUE;
                      else if (*fmt == '0')
                          pad_char = '0';
                      else
                          break;
                  }
  
                  /*
                   * Check if a width was specified
                   */
                  if (cfg_fmt_isdigit(*fmt)) {
                      STR_TO_DEC(fmt, min_width);
                      adjust_width = TRUE;
                  }
                  else if (*fmt == '*') {
                      min_width = va_arg(ap, int);
                      fmt++;
                      adjust_width = TRUE;
                      if (min_width < 0) {
                          adjust = LEFT;
                          min_width = -min_width;
                      }
                  }
                  else
                      adjust_width = FALSE;
  
                  /*
                   * Check if a precision was specified
                   *
                   * XXX: an unreasonable amount of precision may be specified
                   * resulting in overflow of num_buf. Currently we
                   * ignore this possibility.
                   */
                  if (*fmt == '.') {
                      adjust_precision = TRUE;
                      fmt++;
                      if (cfg_fmt_isdigit(*fmt)) {
                          STR_TO_DEC(fmt, precision);
                      }
                      else if (*fmt == '*') {
                          precision = va_arg(ap, int);
                          fmt++;
                          if (precision < 0)
                              precision = 0;
                      }
                      else
                          precision = 0;
                  }
                  else
                      adjust_precision = FALSE;
              }
              else
                  adjust_precision = adjust_width = FALSE;
  
              /*
               * Modifier check
               */
              if (*fmt == 'q') {
                  var_type = IS_QUAD;
                  fmt++;
              }
              else if (*fmt == 'l') {
                  var_type = IS_LONG;
                  fmt++;
              }
              else if (*fmt == 'h') {
                  var_type = IS_SHORT;
                  fmt++;
              }
              else {
                  var_type = IS_INT;
              }
  
              /*
               * Argument extraction and printing.
               * First we determine the argument type.
               * Then, we convert the argument to a string.
               * On exit from the switch, s points to the string that
               * must be printed, s_len has the length of the string
               * The precision requirements, if any, are reflected in s_len.
               *
               * NOTE: pad_char may be set to '0' because of the 0 flag.
               *   It is reset to ' ' by non-numeric formats
               */
              switch (*fmt) {
  
                  /* Unsigned Decimal Integer */
                  case 'u':
                      if (var_type == IS_QUAD) {
                          i_quad = va_arg(ap, u_quad_int);
                          s = conv_10_quad(i_quad, 1, &is_negative,
                                           &num_buf[NUM_BUF_SIZE], &s_len);
                      }
                      else {
                          if (var_type == IS_LONG)
                              i_num = (long_int)va_arg(ap, u_long_int);
                          else if (var_type == IS_SHORT)
                              i_num = (long_int)(unsigned short)va_arg(ap, unsigned int);
                          else
                              i_num = (long_int)va_arg(ap, unsigned int);
                          s = conv_10(i_num, 1, &is_negative,
                                      &num_buf[NUM_BUF_SIZE], &s_len);
                      }
                      FIX_PRECISION(adjust_precision, precision, s, s_len);
                      break;
  
                  /* Signed Decimal Integer */
                  case 'd':
                  case 'i':
                      if (var_type == IS_QUAD) {
                          i_quad = va_arg(ap, quad_int);
                          s = conv_10_quad(i_quad, 0, &is_negative,
                                           &num_buf[NUM_BUF_SIZE], &s_len);
                      }
                      else {
                          if (var_type == IS_LONG)
                              i_num = (long_int)va_arg(ap, long_int);
                          else if (var_type == IS_SHORT)
                              i_num = (long_int)(short)va_arg(ap, int);
                          else
                              i_num = (long_int)va_arg(ap, int);
                          s = conv_10(i_num, 0, &is_negative,
                                      &num_buf[NUM_BUF_SIZE], &s_len);
                      }
                      FIX_PRECISION(adjust_precision, precision, s, s_len);
  
                      if (is_negative)
                          prefix_char = '-';
                      else if (print_sign)
                          prefix_char = '+';
                      else if (print_blank)
                          prefix_char = ' ';
                      break;
  
                  /* Unsigned Octal Integer */
                  case 'o':
                      if (var_type == IS_QUAD) {
                          ui_quad = va_arg(ap, u_quad_int);
                          s = conv_p2_quad(ui_quad, 3, *fmt,
                                           &num_buf[NUM_BUF_SIZE], &s_len);
                      }
                      else {
                          if (var_type == IS_LONG)
                              ui_num = (u_long_int) va_arg(ap, u_long_int);
                          else if (var_type == IS_SHORT)
                              ui_num = (u_long_int)(unsigned short)va_arg(ap, unsigned int);
                          else
                              ui_num = (u_long_int)va_arg(ap, unsigned int);
                          s = conv_p2(ui_num, 3, *fmt, &num_buf[NUM_BUF_SIZE], &s_len);
                      }
                      FIX_PRECISION(adjust_precision, precision, s, s_len);
                      if (alternate_form && *s != '0') {
                          *--s = '0';
                          s_len++;
                      }
                      break;
  
                  /* Unsigned Hexadecimal Integer */
                  case 'x':
                  case 'X':
                      if (var_type == IS_QUAD) {
                          ui_quad = va_arg(ap, u_quad_int);
                          s = conv_p2_quad(ui_quad, 4, *fmt,
                                           &num_buf[NUM_BUF_SIZE], &s_len);
                      }
                      else {
                          if (var_type == IS_LONG)
                              ui_num = (u_long_int)va_arg(ap, u_long_int);
                          else if (var_type == IS_SHORT)
                              ui_num = (u_long_int)(unsigned short)va_arg(ap, unsigned int);
                          else
                              ui_num = (u_long_int)va_arg(ap, unsigned int);
                          s = conv_p2(ui_num, 4, *fmt, &num_buf[NUM_BUF_SIZE], &s_len);
                      }
                      FIX_PRECISION(adjust_precision, precision, s, s_len);
                      if (alternate_form && i_num != 0) {
                          *--s = *fmt; /* 'x' or 'X' */
                          *--s = '0';
                          s_len += 2;
                      }
                      break;
  
                  /* String */
                  case 's':
                      s = va_arg(ap, char *);
                      if (s != NULL) {
                          s_len = strlen(s);
                          if (adjust_precision && precision < s_len)
                              s_len = precision;
                      }
                      else {
                          s = S_NULL;
                          s_len = S_NULL_LEN;
                      }
                      pad_char = ' ';
                      break;
  
                  /* Double Floating Point (style 1) */
                  case 'f':
                  case 'e':
                  case 'E':
                      fp_num = va_arg(ap, double);
                      if (isnan(fp_num)) {
                          s = "NaN";
                          s_len = 3;
                      }
                      else if (isinf(fp_num)) {
                          s = "Inf";
                          s_len = 3;
                      }
                      else {
                          /* use &num_buf[1], so that we have room for the sign */
                          s = conv_fp(*fmt, fp_num, alternate_form,
                                      (adjust_precision == FALSE) ? FLOAT_DIGITS : precision, 
                                      &is_negative, &num_buf[1], &s_len);
                          if (is_negative)
                              prefix_char = '-';
                          else if (print_sign)
                              prefix_char = '+';
                          else if (print_blank)
                              prefix_char = ' ';
                      }
                      break;
  
                  /* Double Floating Point (style 2) */
                  case 'g':
                  case 'G':
                      fp_num = va_arg(ap, double);
                      if (isnan(fp_num)) {
                          s = "NaN";
                          s_len = 3;
                      }
                      else if (isinf(fp_num)) {
                          s = "Inf";
                          s_len = 3;
                      }
                      else {
                          if (adjust_precision == FALSE)
                              precision = FLOAT_DIGITS;
                          else if (precision == 0)
                              precision = 1;
                          /* use &num_buf[1], so that we have room for the sign */
                          s = cfg_fmt_gcvt(fp_num, precision, &num_buf[1], alternate_form);
                          if (*s == '-')
                              prefix_char = *s++;
                          else if (print_sign)
                              prefix_char = '+';
                          else if (print_blank)
                              prefix_char = ' ';
                          s_len = strlen(s);
                          if (alternate_form && (q = strchr(s, '.')) == NULL) {
                              s[s_len++] = '.';
                              s[s_len] = NUL; /* delimit for following strchr() */
                          }
                          if (*fmt == 'G' && (q = strchr(s, 'e')) != NULL)
                              *q = 'E';
                      }
                      break;
  
                  /* Single Character */
                  case 'c':
                      char_buf[0] = (char) (va_arg(ap, int));
                      s = &char_buf[0];
                      s_len = 1;
                      pad_char = ' ';
                      break;
  
                  /* The '%' Character */
                  case '%':
                      char_buf[0] = '%';
                      s = &char_buf[0];
                      s_len = 1;
                      pad_char = ' ';
                      break;
  
                  /* Special: Number of already written characters */
                  case 'n':
                      if (var_type == IS_QUAD)
                          *(va_arg(ap, quad_int *)) = cc;
                      else if (var_type == IS_LONG)
                          *(va_arg(ap, long *)) = cc;
                      else if (var_type == IS_SHORT)
                          *(va_arg(ap, short *)) = cc;
                      else
                          *(va_arg(ap, int *)) = cc;
                      break;
  
                  /*
                   * Pointer argument type. 
                   */
                  case 'p':
  #if defined(SIZEOF_LONG_LONG) && (SIZEOF_LONG_LONG == SIZEOF_VOID_P)
                      ui_quad = (u_quad_int) va_arg(ap, void *);
                      s = conv_p2_quad(ui_quad, 4, 'x', &num_buf[NUM_BUF_SIZE], &s_len);
  #else
                      ui_num = (u_long_int) va_arg(ap, void *);
                      s = conv_p2(ui_num, 4, 'x', &num_buf[NUM_BUF_SIZE], &s_len);
  #endif
                      pad_char = ' ';
                      break;
  
                  case NUL:
                      /*
                       * The last character of the format string was %.
                       * We ignore it.
                       */
                      continue;
  
                  /*
                   * The default case is for unrecognized %'s. We print
                   * %<char> to help the user identify what option is not
                   * understood. This is also useful in case the user
                   * wants to pass the output of format_converter to
                   * another function that understands some other %<char>
                   * (like syslog). Note that we can't point s inside fmt
                   * because the unknown <char> could be preceded by width
                   * etc.
                   */
                  default:
                      s = NULL;
                      if (vbuff->format != NULL) {
                          vbuff->format(vbuff,
                                        &prefix_char, &pad_char, &s, &s_len, 
                                        num_buf, NUM_BUF_SIZE, extinfo, *fmt, &ap);
                          if (s == NULL)
                              return -1;
                      }
                      if (s == NULL) {
                          char_buf[0] = '%';
                          char_buf[1] = *fmt;
                          s = char_buf;
                          s_len = 2;
                          pad_char = ' ';
                      }
                      break;
              }
  
              if (prefix_char != NUL && s != S_NULL && s != char_buf) {
                  *--s = prefix_char;
                  s_len++;
              }
  
              if (adjust_width && adjust == RIGHT && min_width > s_len) {
                  if (pad_char == '0' && prefix_char != NUL) {
                      INS_CHAR(*s, sp, bep, cc);
                      s++;
                      s_len--;
                      min_width--;
                  }
                  PAD(min_width, s_len, pad_char);
              }
  
              /*
               * Print the string s. 
               */
              for (i = s_len; i != 0; i--) {
                  INS_CHAR(*s, sp, bep, cc);
                  s++;
              }
  
              if (adjust_width && adjust == LEFT && min_width > s_len)
                  PAD(min_width, s_len, pad_char);
          }
          fmt++;
      }
      vbuff->curpos = sp;
      return cc;
  }
  
  /*
   * cfg_fmt_format -- format a new string.
   * This is inspired by POSIX sprintf(3), but mainly provides the
   * following differences: first it is actually a snprintf(3) style, i.e.
   * it allows one to specify the maximum number of characters which are
   * allowed to write. Second, it allows one to just count the number of
   * characters which have to be written.
   */
  
  #define STR_FORMAT_BUFLEN 20
  
  static int cfg_fmt_flush_fake(cfg_fmt_format_t *out_handle)
  {
      out_handle->data[1].i += out_handle->data[2].i;
      out_handle->curpos = (char *)out_handle->data[0].vp;
      return 0;
  }
  
  static int cfg_fmt_flush_real(cfg_fmt_format_t *out_handle)
  {
      return -1;
  }
  
  int cfg_fmt_vsprintf(char *s, size_t n, const char *fmt, va_list ap)
  {
      cfg_fmt_format_t handle;
      char buf[STR_FORMAT_BUFLEN];
      int rv;
  
      if (n == 0)
          return 0;
      if (s == NULL) {
          /* fake formatting, i.e., calculate output length only */
          handle.curpos     = buf;
          handle.endpos     = buf + sizeof(buf) - 1;
          handle.flush      = cfg_fmt_flush_fake;
          handle.format     = NULL;
          handle.data[0].vp = buf;
          handle.data[1].i  = 0;
          handle.data[2].i  = sizeof(buf);
          rv = cfg_fmt_format(&handle, fmt, ap);
          if (rv == -1)
              rv = (int)n;
      }
      else {
          /* real formatting, i.e., create output */
          handle.curpos  = s;
          handle.endpos  = s + n - 1;
          handle.flush   = cfg_fmt_flush_real;
          handle.format  = NULL;
          rv = cfg_fmt_format(&handle, fmt, ap);
          *(handle.curpos) = NUL;
          if (rv == -1)
              rv = (int)n;
      }
      return rv;
  }
  
  char *cfg_fmt_vasprintf(const char *fmt, va_list ap)
  {
      va_list apbak;
      char *s;
      int rv;
  
      apbak = ap;
      if ((rv = cfg_fmt_vsprintf(NULL, -1, fmt, ap)) == -1)
          return NULL;
      if ((s = malloc(rv+1)) == NULL)
          return NULL;
      ap = apbak;
      if ((rv = cfg_fmt_vsprintf(s, rv+1, fmt, ap)) == -1)
          return NULL;
      return s;
  }
  
  int cfg_fmt_sprintf(char *s, size_t n, const char *fmt, ...)
  {
      va_list ap;
      int rv;
  
      va_start(ap, fmt);
      rv = cfg_fmt_vsprintf(s, n, fmt, ap);
      va_end(ap);
      return rv;
  }
  
  char *cfg_fmt_asprintf(const char *fmt, ...)
  {
      va_list ap;
      char *rv;
  
      va_start(ap, fmt);
      rv = cfg_fmt_vasprintf(fmt, ap);
      va_end(ap);
      return rv;
  }
  
  Index: ossp-pkg/cfg/cfg_fmt.h
  ============================================================
  $ cvs update -p -r1.1 cfg_fmt.h
  /*
  **  OSSP cfg - Configuration Parsing
  **  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP cfg, a configuration parsing
  **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRCFG, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  cfg_fmt.h: printf(3)-style formatting API
  */
  
  #ifndef __CFG_FMT_H__
  #define __CFG_FMT_H__
  
  struct cfg_fmt_format_st {
      /* the output buffer */
      char *curpos;                        /* start of output buffer (first pos) */
      char *endpos;                        /* end   of output buffer (last pos)  */
  
      /* callback for flushing the output buffer */
      int (*flush)(
          struct cfg_fmt_format_st *spec   /* this cfg_fmt_format_t specification */
      );
  
      /* callback for formatting unknown %-constructs */
      void (*format)(
          struct cfg_fmt_format_st *spec,  /* this cfg_fmt_format_t specification */
          char *prefix_char,               /* output arg: prefix character */
          char *pad_char,                  /* output arg: padding character */
          char **s_buf,                    /* output arg: string buffer */
          size_t *s_len,                   /* output arg: string len */
          char *num_buf,                   /* input  arg: temporary buffer */
          int num_buf_size,                /* input  arg: temporary buffer len */
          char *extinfo,                   /* input  arg: extension information */
          char fmt_char,                   /* input  arg: current formatting character */ 
          va_list *ap                      /* in/out arg: variable argument pointer */
      );
  
      /* arbitrary passed-through application data */
      union { 
          int i;                        
          long l; 
          double d; 
          void *vp; 
      } data[6];                           
  };
  
  typedef struct cfg_fmt_format_st cfg_fmt_format_t;
  
  int   cfg_fmt_format    (cfg_fmt_format_t *vbuff, const char *fmt, va_list ap);
  int   cfg_fmt_vsprintf  (char *s, size_t n, const char *fmt, va_list ap);
  char *cfg_fmt_vasprintf (const char *fmt, va_list ap);
  int   cfg_fmt_sprintf   (char *s, size_t n, const char *fmt, ...);
  char *cfg_fmt_asprintf  (const char *fmt, ...);
  
  #endif /* __CFG_FMT_H__ */
  
  Index: ossp-pkg/cfg/cfg_grid.c
  ============================================================
  $ cvs update -p -r1.1 cfg_grid.c
  /*
  **  OSSP cfg - Configuration Parsing
  **  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP cfg, a configuration parsing
  **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRCFG, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  cfg_grid.c: grid memory allocator (implementation)
  */
  
  /*
   *  This is a special-case memory management library dedicated to the
   *  speed- and memory-optimized allocation and deallocation of fixed
   *  size objects. Inside OSSP cfg we have lots of those objects and
   *  if we would manage them directly through malloc(3) it would be to
   *  run-time expensive and waste too much total memory.
   *  
   *  It works by collecting together larger segments (cfg_grid_seg_t) of
   *  those fixed size objects (cfg_grid_tile_t) and linking them into
   *  a top-level grid structure (cfg_grid_t). The number of tiles in a
   *  segment grows with the Fibonacci numbers f(n) = f(n-1)+f(n-2) in
   *  order to dynamically scale better to the allocation requests without
   *  having to waste too much memory (in contrast to the usual "double to
   *  twice of size" approach). Inside a grid segment, the tiles are just
   *  arranged as a linear array after a heading linkage structure. The
   *  free tiles are remembered in a single linked list. So the grid in
   *  memory looks like this:
   *  
   *  -----BEGIN EMBEDDED OBJECT-----
   *  Content-type: application/fig
   *  Description: grid memory allocator memory architecture
   *  Version: eo/1.0
   *  H4sIAOT/mDwCA61aTW/cNhA9R79CQM82+DUUdS7QIkBuvfYSJAvXQLIoYv9/VOKI
   *  b0itg/i5RhD6rcX5nqFm6P3tj49/zvE+TJ8+X78+ffn872X6/XJ9vvyYPl6//HN5
   *  mj5dnrdP8zx55+6dm/56vD58u0x3YfLBuTlMefbiZu+2ZdlB2TaFOcwb3P6HdZb6
   *  0807+bZu/5a6yvRBSXc+ywA2HvoIIIxcyyzuF1yhEEDomGHPxtUfXBdleuc7pvuH
   *  XdDGNbqDtAI185WkqUlNwpLmJjXTUquJsVkfhSWVFg6hpeYmNQsRt+rYXeEkPZDm
   *  c4DIcM3uZAs000cA4lhdc1MRoHT5gT1k5t7am8WZX9ue6S5vxbe6I8Xrbq76VmfF
   *  MKBd+XUAVP2ddDIUOnbYRaSWQ/U6upCUzhaOOEJypCWvIBPHFuKKmIhjK3HtUodO
   *  RNdKsLPaEuQUXKoeO1eclgyZhqiiVG0ydDVU+qSxfWROv2T7LgOebru0NlX+viuE
   *  fUmULSNxh06mZfpNpj6AXw69Xku8QvIqLHHwTXJFpGRkhfqBe6OhEJRYeMkZkrlS
   *  KiigVQaEs7ZDVCmpOwejTMPjqSGhOjMkmCUdsvjgmvpEZB0iN6fTsRQ3oDcEqkDr
   *  whOviPJK55cmdTgQSxz6hXUndO9QcbcLl7orPOJdj04fsY/U+iU2CFyPvGOrYvRm
   *  l7o4eGyfntYRY0PcG8St8XLtt3W7/fbVRXQiHtnoU0PcYRhjM6OiQ6/XEidok4Qm
   *  zpCcecnVUmlO3hFLvMCdCy+5QHKhJpPq7ap2kgEtLQIdEop1dmejTMPjqaHF0VoX
   *  6AqkSdfyxvYRrP3PjK9CzNdt315jHHcrxQ6FVi0d4qZ4G+Mj3YFEDPKoILJulDjz
   *  kjHMR36ajzZW8vN8xOAZ3zDRY6SPmOmjDfU25fJjfcRcD6NMw+OpIaGPbY3UMiA9
   *  9fyAuN6nM9mCYh7GtI99bKAKtC488Yoor/y57OElz5/LAedy4PMrI6sMFWSVIS51
   *  EzySXY/U0CQ94nofPXleYKNuiG5AVO+jGg7e7FN3fHVb76P9UMILgepyTsQjm/MD
   *  cl4UtG1CNyr1paTEC92o1LeXEhde8qAx2eWMGpNdzqgx+VJXb0t7s3fo9FGE7XLU
   *  nYNRpuHNQnU5qg34nyUNUWAdkn5m/Jgd2Ed1OTo/u6Zfh0JL3A5RXU5VUomFv6RZ
   *  IHnhK7ZAcuElJ7QLjr4qVWJpgedennaXocSZrhu9mFrcgKRFoEORrpvRKNPweGpI
   *  6GO7/UGrR3ae28J1OZ3JCEp3byQyoDcEqkDrwhOviPLKn8seXvL8uRxwFgU+vzKy
   *  ylBBVhniUnfBvUuRHunlyOJ6xHU5evK8wEbvYkQGxN3wFDl7s0/d0+Ec6PnQpuIU
   *  6PlQiXdEEmdIzrxk34ZtvV/ydP+uhi8HYokTJCe6E+44GIrudvH0fDgaZRoeTw1F
   *  eojrVD8ZEd3ZCNabGbpmnnjpF5Z4heSVlpxwTZMcnwRJbhcLoaFED3HwZI9WyDS0
   *  8Fq/wEbdUA8PoMObTOqO3jxQ6E8H20debeghswwo4T7N0Gno2eJ9mwRLfZSmD34D
   *  /r5+UeVeG4b960LHd1/c8f2IEkQ/AJz62rfJ6L4TsKPKvPTgfaSszZSKdub13QXw
   *  LlL0TevaK35nXlMI4F2kRIQltrikFpd0+PD/mxI3bvWiYQdHvuGnHxM3ul//USd2
   *  A50CXMjkrjmbkpLti8+bIOW46Tof19Hb1kVqRj78ePz6t3P+RJONZKl+V5X9ZsfT
   *  5eH75fr8KiLNFpqqvEWWpiBLFTm7crVpzruWcQPPj98uleI/a7orF0koAAA=
   *  -----END EMBEDDED OBJECT-----
   */
  
  #include "cfg_grid.h"
  
  /* macro set for implementing single-linked lists */
  #define CFG_LIST_HEAD(type)\
      struct { type *first; }
  #define CFG_LIST_ELEM(type) \
      struct { type *next; }
  #define CFG_LIST_INIT(hp) \
      CFG_LIST_FIRST((hp)) = NULL
  #define CFG_LIST_ELEM_INIT(ep, field) \
      CFG_LIST_NEXT((ep), field) = NULL
  #define CFG_LIST_FIRST(hp) \
      ((hp)->first)
  #define CFG_LIST_NEXT(ep, field) \
      ((ep)->field.next)
  #define CFG_LIST_INSERT_HEAD(hp, ep, field) \
      do { CFG_LIST_NEXT((ep), field) = CFG_LIST_FIRST((hp)); \
           CFG_LIST_FIRST((hp)) = (ep); } while (0)
  #define CFG_LIST_REMOVE_HEAD(hp, field) \
      CFG_LIST_FIRST((hp)) = \
          CFG_LIST_NEXT(CFG_LIST_FIRST((hp)), field)
  
  /* macro set for implementing double-linked rings */
  #define CFG_RING_HEAD(type) \
      struct { type *next; type *prev; }
  #define CFG_RING_ELEM(type) \
      struct { type *next; type *prev; }
  #define CFG_RING_SENTINEL(hp, type, field) \
      (type *)((char *)(hp) - ((size_t)(&((type *)0)->field)))
  #define CFG_RING_INIT(hp, type, field) \
      do { CFG_RING_FIRST((hp)) = CFG_RING_SENTINEL((hp), type, field); \
           CFG_RING_LAST((hp))  = CFG_RING_SENTINEL((hp), type, field); } while (0)
  #define CFG_RING_ELEM_INIT(ep, field) \
      do { CFG_RING_NEXT((ep), field) = (ep); \
           CFG_RING_PREV((ep), field) = (ep); } while (0)
  #define CFG_RING_FIRST(hp) \
      ((hp)->next)
  #define CFG_RING_LAST(hp) \
      ((hp)->prev)
  #define CFG_RING_NEXT(ep, field) \
      ((ep)->field.next)
  #define CFG_RING_PREV(ep, field) \
      ((ep)->field.prev)
  #define CFG_RING_SPLICE_BEFORE(lep, ep1, epN, field) \
      do { \
          CFG_RING_NEXT((epN), field) = (lep); \
          CFG_RING_PREV((ep1), field) = CFG_RING_PREV((lep), field); \
          CFG_RING_NEXT(CFG_RING_PREV((lep), field), field) = (ep1); \
          CFG_RING_PREV((lep), field) = (epN); \
      } while (0)
  #define CFG_RING_SPLICE_AFTER(lep, ep1, epN, field) \
      do { \
          CFG_RING_PREV((ep1), field) = (lep); \
          CFG_RING_NEXT((epN), field) = CFG_RING_NEXT((lep), field); \
          CFG_RING_PREV(CFG_RING_NEXT((lep), field), field) = (epN); \
          CFG_RING_NEXT((lep), field) = (ep1); \
      } while (0)
  #define CFG_RING_SPLICE_HEAD(hp, ep1, epN, type, field) \
      CFG_RING_SPLICE_AFTER(CFG_RING_SENTINEL((hp), type, field), (ep1), (epN), field)
  #define CFG_RING_SPLICE_TAIL(hp, ep1, epN, type, field) \
      CFG_RING_SPLICE_BEFORE(CFG_RING_SENTINEL((hp), type, field), (ep1), (epN), field)
  #define CFG_RING_INSERT_BEFORE(lep, nep, field) \
      CFG_RING_SPLICE_BEFORE((lep), (nep), (nep), field)
  #define CFG_RING_INSERT_AFTER(lep, nep, field) \
      CFG_RING_SPLICE_AFTER((lep), (nep), (nep), field)
  #define CFG_RING_INSERT_HEAD(hp, nep, type, field) \
      CFG_RING_SPLICE_HEAD((hp), (nep), (nep), type, field)
  #define CFG_RING_INSERT_TAIL(hp, nep, type, field) \
      CFG_RING_SPLICE_TAIL((hp), (nep), (nep), type, field)
  #define CFG_RING_UNSPLICE(ep1, epN, field) \
      do { \
          CFG_RING_NEXT(CFG_RING_PREV((ep1), field), field) = \
              CFG_RING_NEXT((epN), field); \
          CFG_RING_PREV(CFG_RING_NEXT((epN), field), field) = \
              CFG_RING_PREV((ep1), field); \
      } while (0)
  #define CFG_RING_REMOVE(ep, field) \
      CFG_RING_UNSPLICE((ep), (ep), field)
  #define CFG_RING_FOREACH(ep, hp, type, field) \
      for ((ep)  = CFG_RING_FIRST((hp)); \
           (ep) != CFG_RING_SENTINEL((hp), type, field); \
           (ep)  = CFG_RING_NEXT((ep), field))
  #define CFG_RING_FOREACH_REVERSE(ep, hp, type, field) \
      for ((ep)  = CFG_RING_LAST((hp)); \
           (ep) != CFG_RING_SENTINEL((hp), type, field); \
           (ep)  = CFG_RING_PREV((ep), field))
  
  /* forward declarations */
  struct cfg_grid_tile_st;
  struct cfg_grid_seg_st;
  
  /* corresponding types */
  typedef struct cfg_grid_tile_st cfg_grid_tile_t;
  typedef struct cfg_grid_seg_st  cfg_grid_seg_t;
  
  /* the structure of a grid tile */
  struct cfg_grid_tile_st {
      CFG_LIST_ELEM(cfg_grid_tile_t) gt_link;            /* linkage to next tile */
  };
  
  /* the structure of a grid segment */
  struct cfg_grid_seg_st {
      CFG_RING_ELEM(cfg_grid_seg_t)  gs_link;            /* linkage to next+prev segments */
      cfg_grid_tile_t               *gs_tile_base;       /* pointer to tile base */
      int                            gs_tile_num;        /* number of tiles */
      CFG_LIST_HEAD(cfg_grid_tile_t) gs_tile_free_list;  /* list of free tiles */
      int                            gs_tile_free_num;   /* number of free tiles */
  };
  
  /* the structure of a grid */
  struct cfg_grid_st {
      CFG_RING_HEAD(cfg_grid_seg_t)  g_seg;              /* ring of segments */
      int                            g_seg_num;          /* number of segments */
      size_t                         g_tile_size;        /* size of a tile */
      int                            g_tile_num_first;   /* number of tiles in first segment */
  };
  
  /* 
   * Align a size to the next larger or equal size which is likely to have the
   * longest *relevant* CPU-specific memory word alignment restrictions.
   */
  static size_t cfg_mem_align(size_t size)
  {
      union mem_word {
          void  *mw_vp;
          void (*mw_fp)(void);
          char  *mw_cp;
          long   mw_l;
          double mw_d;
      };
      return ((1+((size-1) / sizeof(union mem_word))) * sizeof(union mem_word));
  }
  
  /* create a grid segment [INTERNAL] */
  static cfg_rc_t 
  cfg_grid_seg_create(
      cfg_grid_seg_t **pseg, 
      size_t tile_size, 
      int tile_num)
  {
      size_t seg_top_size;
      size_t seg_size;
      cfg_grid_seg_t *seg;
      cfg_grid_tile_t *tile;
      int i;
  
      /* determine (aligned) sizes */
      seg_top_size = cfg_mem_align(sizeof(cfg_grid_seg_t));
      seg_size     = seg_top_size + (tile_size * tile_num);
  
      /* allocate first segment */
      if ((seg = (cfg_grid_seg_t *)malloc(seg_size)) == NULL)
          return CFG_ERR_SYS;
  
      /* initialize first segment */
      CFG_RING_ELEM_INIT(seg, gs_link);
      seg->gs_tile_base = (cfg_grid_tile_t *)((char *)seg + seg_top_size);
      seg->gs_tile_num = tile_num;
      CFG_LIST_ELEM_INIT(seg->gs_tile_base, gt_link);
      CFG_LIST_INIT(&seg->gs_tile_free_list);
      CFG_LIST_INSERT_HEAD(&seg->gs_tile_free_list, seg->gs_tile_base, gt_link);
      seg->gs_tile_free_num = seg->gs_tile_num;
  
      /* initialize free tile list in first segment */
      tile = CFG_LIST_FIRST(&seg->gs_tile_free_list);
      for (i = 0; i < seg->gs_tile_free_num-1; i++) {
          CFG_LIST_NEXT(tile, gt_link) = (cfg_grid_tile_t *)((char *)tile+tile_size);
          tile = CFG_LIST_NEXT(tile, gt_link);
      }
      CFG_LIST_NEXT(tile, gt_link) = NULL;
  
      /* pass segment to caller */
      *pseg = seg;
  
      return CFG_OK;
  }
  
  /* create a grid */
  cfg_rc_t
  cfg_grid_create(
      cfg_grid_t **pgrid,
      size_t tile_size,
      int tile_num)
  {
      cfg_grid_t *grid;
      cfg_grid_seg_t *seg;
      cfg_rc_t rc;
  
      /* consistency checks */
      if (tile_size < 1)
          return CFG_ERR_ARG;
      if (tile_num < 1)
          return CFG_ERR_ARG;
      
      /* determine (aligned) sizes */
      tile_size = cfg_mem_align(tile_size);
  
      /* allocate top-level grid structure */
      if ((grid = (cfg_grid_t *)malloc(sizeof(cfg_grid_t))) == NULL)
          return CFG_ERR_SYS;
  
      /* allocate first segment */
      if ((rc = cfg_grid_seg_create(&seg, tile_size, tile_num)) != CFG_OK) {
          free(grid);
          return rc;
      }
  
      /* initialize top-level structure */
      CFG_RING_INIT(&grid->g_seg, cfg_grid_seg_t, gs_link);
      CFG_RING_INSERT_HEAD(&grid->g_seg, seg, cfg_grid_seg_t, gs_link);
      grid->g_seg_num = 1;
      grid->g_tile_size = tile_size;
      grid->g_tile_num_first = tile_num;
  
      /* pass grid to caller */
      *pgrid = grid;
  
      return CFG_OK;
  }
  
  /* destroy a grid */
  cfg_rc_t 
  cfg_grid_destroy(
      cfg_grid_t *grid)
  {
      cfg_grid_seg_t *seg;
      cfg_grid_seg_t *seg_last;
      
      /* consistency checks */
      if (grid == NULL)
          return CFG_ERR_ARG;
  
      /* destroy grid segments */
      seg_last = CFG_RING_FIRST(&grid->g_seg);
      while (seg_last != CFG_RING_SENTINEL(&grid->g_seg, cfg_grid_seg_t, gs_link)) {
          seg = CFG_RING_NEXT(seg_last, gs_link);
          free(seg_last);
      }
  
      /* destroy top-level grid structure */
      free(grid);
  
      return CFG_OK;
  }
  
  /* allocate a tile from a grid */
  cfg_rc_t
  cfg_grid_alloc(
      cfg_grid_t *grid,
      void **ptile)
  {
      cfg_grid_seg_t *seg;
      cfg_grid_seg_t *seg_l1;
      cfg_grid_seg_t *seg_l2;
      cfg_grid_tile_t *tile;
      cfg_rc_t rc;
      int tile_num;
  
      /* consistency checks */
      if (grid == NULL || ptile == NULL)
          return CFG_ERR_ARG;
  
      /* find segment with first free tile */
      seg_l2 = NULL;
      seg_l1 = NULL;
      seg = CFG_RING_FIRST(&grid->g_seg);
      while (seg != CFG_RING_SENTINEL(&grid->g_seg, cfg_grid_seg_t, gs_link)) {
          if (seg->gs_tile_free_num > 0)
              break;
          seg_l2 = seg_l1;
          seg_l1 = seg;
          seg = CFG_RING_NEXT(seg, gs_link);
      }
  
      /* if no more segment with a free tile exists, add new segment */
      if (seg == CFG_RING_SENTINEL(&grid->g_seg, cfg_grid_seg_t, gs_link)) {
          /* tile_num increases with Fibonacci behaviour, i.e,
             tile_num(seg) = tile_num(seg_l1) + tile_num(seg_l2). This way
             the segments grow in size exponentially but not as fast as
             twith he usual "double the size" approach. */
          if (seg_l2 == NULL)
              tile_num = grid->g_tile_num_first;
          else
              tile_num = seg_l1->gs_tile_num + seg_l2->gs_tile_num;
          if ((rc = cfg_grid_seg_create(&seg, grid->g_tile_size, tile_num)) != CFG_OK)
              return rc;
          CFG_RING_INSERT_TAIL(&grid->g_seg, seg, cfg_grid_seg_t, gs_link);
          grid->g_seg_num++;
      }
  
      /* allocate tile from segment */
      tile = CFG_LIST_FIRST(&seg->gs_tile_free_list);
      CFG_LIST_REMOVE_HEAD(&seg->gs_tile_free_list, gt_link);
      seg->gs_tile_free_num--;
  
      /* pass tile to caller */
      *ptile = tile;
  
      return CFG_OK;
  }
  
  /* find grid segment where tile is stored [INTERNAL] */
  static cfg_rc_t 
  cfg_grid_seg_find(
      cfg_grid_t *grid, 
      cfg_grid_seg_t **pseg,
      cfg_grid_tile_t *tile)
  {
      cfg_grid_seg_t *seg;
  
      seg = CFG_RING_FIRST(&grid->g_seg);
      while (seg != CFG_RING_SENTINEL(&grid->g_seg, cfg_grid_seg_t, gs_link)) {
          if (   seg->gs_tile_base <= tile 
              && tile < (seg->gs_tile_base+(grid->g_tile_size*seg->gs_tile_num))) {
              if (pseg != NULL)
                  *pseg = seg;
              return CFG_OK;
          }
          seg = CFG_RING_NEXT(seg, gs_link);
      }
      return CFG_ERR_INT;
  }
  
  /* free a tile to a grid */
  cfg_rc_t 
  cfg_grid_free(
      cfg_grid_t *grid, 
      void *_tile)
  {
      cfg_grid_seg_t *seg;
      cfg_grid_tile_t *tile;
      cfg_rc_t rc;
  
      /* cast to internal structure */
      tile = (cfg_grid_tile_t *)_tile;
  
      /* consistency checks */
      if (grid == NULL || tile == NULL)
          return CFG_ERR_ARG;
      
      /* find segment of tile */
      if ((rc = cfg_grid_seg_find(grid, &seg, tile)) != CFG_OK)
          return rc;
  
      /* move into list of free tiles */
      CFG_LIST_INSERT_HEAD(&seg->gs_tile_free_list, tile, gt_link);
      seg->gs_tile_free_num++;
  
      /* free segment if it is now empty */
      if (   grid->g_seg_num > 1
          && seg->gs_tile_num == seg->gs_tile_free_num) {
          CFG_RING_REMOVE(seg, gs_link);
          grid->g_seg_num--;
          free(seg);
      }
  
      return CFG_OK;
  }
  
  /* test whether a tile is inside a grid */
  cfg_rc_t 
  cfg_grid_inside(
      cfg_grid_t *grid, 
      void *_tile)
  {
      cfg_grid_tile_t *tile;
      
      /* cast to internal structure */
      tile = (cfg_grid_tile_t *)_tile;
  
      /* consistency checks */
      if (grid == NULL || tile == NULL)
          return CFG_ERR_ARG;
  
      /* just try to find a segment */
      return cfg_grid_seg_find(grid, NULL, tile);
  }
  
  /* determine grid statistics */
  cfg_rc_t 
  cfg_grid_stat(
      cfg_grid_t *grid, 
      int *pchunks, 
      int *pbytes_mgmt, int *pbytes_used, int *pbytes_free, 
      int *ptiles_used, int *ptiles_free)
  {
      cfg_grid_seg_t *seg;
      int chunks = 0;
      int bytes_mgmt = 0;
      int bytes_used = 0;
      int bytes_free = 0;
      int tiles_used = 0;
      int tiles_free = 0;
  
      /* consistency checks */
      if (grid == NULL)
          return CFG_ERR_ARG;
  
      /* determine statistic information */
      bytes_mgmt += sizeof(cfg_grid_t);
      chunks += 1;
      CFG_RING_FOREACH(seg, &grid->g_seg, cfg_grid_seg_t, gs_link) {
          chunks++;
          bytes_mgmt += sizeof(cfg_grid_seg_t);
          bytes_used += ((seg->gs_tile_num - seg->gs_tile_free_num) * grid->g_tile_size);
          bytes_free += (seg->gs_tile_free_num * grid->g_tile_size);
          tiles_used += (seg->gs_tile_num - seg->gs_tile_free_num);
          tiles_free += seg->gs_tile_free_num;
      }
  
      /* pass statistic information to caller */
      if (pchunks != NULL)
          *pchunks = chunks;
      if (pbytes_mgmt != NULL)
          *pbytes_mgmt = bytes_mgmt;
      if (pbytes_used != NULL)
          *pbytes_used = bytes_used;
      if (pbytes_free != NULL)
          *pbytes_free = bytes_free;
      if (ptiles_used != NULL)
          *ptiles_used = tiles_used;
      if (ptiles_free != NULL)
          *ptiles_free = tiles_free;
  
      return CFG_OK;
  }
  
  Index: ossp-pkg/cfg/cfg_grid.h
  ============================================================
  $ cvs update -p -r1.1 cfg_grid.h
  /*
  **  OSSP cfg - Configuration Parsing
  **  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP cfg, a configuration parsing
  **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRCFG, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  cfg_grid.h: grid memory allocator (declaration)
  */
  
  #ifndef __CFG_GRID_H__
  #define __CFG_GRID_H__
  
  #include <stdlib.h>
  #include <string.h>
  
  #include "cfg.h"
  
  struct cfg_grid_st;
  typedef struct cfg_grid_st cfg_grid_t;
  
  extern cfg_rc_t cfg_grid_create (cfg_grid_t **grid, size_t tile_size, int tile_num);
  extern cfg_rc_t cfg_grid_alloc  (cfg_grid_t  *grid, void **tile);
  extern cfg_rc_t cfg_grid_inside (cfg_grid_t  *grid, void  *tile);
  extern cfg_rc_t cfg_grid_free   (cfg_grid_t  *grid, void  *tile);
  extern cfg_rc_t cfg_grid_stat   (cfg_grid_t  *grid, int *chunks, int *bytes_mgmt, int *bytes_used, int *bytes_free, int *tiles_used, int *tiles_free);
  extern cfg_rc_t cfg_grid_destroy(cfg_grid_t  *grid);
  
  #endif /* __CFG_GRID_H__ */
  
  Index: ossp-pkg/cfg/cfg_node.c
  ============================================================
  $ cvs update -p -r1.1 cfg_node.c
  /*
  **  OSSP cfg - Configuration Parsing
  **  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP cfg, a configuration parsing
  **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRCFG, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  cfg_node.c: configuration nodes
  */
  
  #include <stdio.h>
  #include <stdlib.h>
  #include <stdarg.h>
  #include <unistd.h>
  
  #include "cfg_node.h"
  
  cfg_rc_t cfg_node_create(cfg_node_t **node)
  {
      cfg_node_t *n;
  
      if ((n = malloc(sizeof(cfg_node_t))) == NULL)
          return CFG_ERR_SYS;
      n->type     = CFG_NODE_TYPE_NN;
      n->parent   = NULL;
      n->rbroth   = NULL;
      n->child1   = NULL;
      n->token    = NULL;
      n->data.t   = CFG_DATA_TYPE_LONG;
      n->data.u.l = 0;
      *node = n;
      return CFG_OK;
  }
  
  cfg_rc_t cfg_node_set(cfg_node_t *node, cfg_node_attr_t attr, ...)
  {
      va_list ap;
  
      if (node == NULL)
          return CFG_ERR_ARG;
      va_start(ap, attr);
      switch (attr) {
          case CFG_NODE_ATTR_TYPE: {
              node->type = (cfg_node_type_t)va_arg(ap, cfg_node_type_t);
              break;
          }
          case CFG_NODE_ATTR_PARENT: {
              node->parent = (cfg_node_t *)va_arg(ap, cfg_node_t *);
              break;
          }
          case CFG_NODE_ATTR_RBROTH: {
              node->rbroth = (cfg_node_t *)va_arg(ap, cfg_node_t *);
              break;
          }
          case CFG_NODE_ATTR_CHILD1: {
              node->child1 = (cfg_node_t *)va_arg(ap, cfg_node_t *);
              break;
          }
          case CFG_NODE_ATTR_TOKEN: {
              node->token = (char *)va_arg(ap, char *);
              break;
          }
          case CFG_NODE_ATTR_DATA: {
              node->data.t = (cfg_data_type_t)va_arg(ap, cfg_data_type_t);
              switch (node->data.t) {
                  case CFG_DATA_TYPE_PTR:    node->data.u.p = (void *)va_arg(ap, void *); break;
                  case CFG_DATA_TYPE_CHAR:   node->data.u.c = (char  )va_arg(ap, int   ); break;
                  case CFG_DATA_TYPE_INT:    node->data.u.i = (int   )va_arg(ap, int   ); break;
                  case CFG_DATA_TYPE_LONG:   node->data.u.l = (long  )va_arg(ap, long  ); break;
                  case CFG_DATA_TYPE_FLOAT:  node->data.u.f = (float )va_arg(ap, double); break;
                  case CFG_DATA_TYPE_DOUBLE: node->data.u.d = (double)va_arg(ap, double); break;
                  default: return CFG_ERR_ARG;
              }
          }
          default:
              return CFG_ERR_ARG;
      }
      va_end(ap);
      return CFG_OK;
  }
  
  cfg_rc_t cfg_node_get(cfg_node_t *node, cfg_node_attr_t attr, ...)
  {
      va_list ap;
  
      if (node == NULL)
          return CFG_ERR_ARG;
      va_start(ap, attr);
      switch (attr) {
          case CFG_NODE_ATTR_TYPE: {
              cfg_node_type_t *type = (cfg_node_type_t *)va_arg(ap, cfg_node_type_t *);
              *type = node->type;
              break;
          }
          case CFG_NODE_ATTR_PARENT: {
              cfg_node_t **n = (cfg_node_t **)va_arg(ap, cfg_node_t **);
              *n = node->parent;
              break;
          }
          case CFG_NODE_ATTR_RBROTH: {
              cfg_node_t **n = (cfg_node_t **)va_arg(ap, cfg_node_t **);
              *n = node->rbroth;
              break;
          }
          case CFG_NODE_ATTR_CHILD1: {
              cfg_node_t **n = (cfg_node_t **)va_arg(ap, cfg_node_t **);
              *n = node->child1;
              break;
          }
          case CFG_NODE_ATTR_TOKEN: {
              char **token = (char **)va_arg(ap, char **);
              *token = node->token;
              break;
          }
          case CFG_NODE_ATTR_DATA: {
              cfg_data_type_t *type = (cfg_data_type_t *)va_arg(ap, cfg_data_type_t *);
              *type = node->data.t;
              switch (node->data.t) {
                  case CFG_DATA_TYPE_PTR:    *((void  **)va_arg(ap, void  **)) = node->data.u.p; break;
                  case CFG_DATA_TYPE_CHAR:   *((char   *)va_arg(ap, int    *)) = node->data.u.c; break;
                  case CFG_DATA_TYPE_INT:    *((int    *)va_arg(ap, int    *)) = node->data.u.i; break;
                  case CFG_DATA_TYPE_LONG:   *((long   *)va_arg(ap, long   *)) = node->data.u.l; break;
                  case CFG_DATA_TYPE_DOUBLE: *((double *)va_arg(ap, double *)) = node->data.u.d; break;
                  case CFG_DATA_TYPE_FLOAT:  *((float  *)va_arg(ap, double *)) = node->data.u.f; break;
                  default: return CFG_ERR_ARG;
              }
          }
          default:
              return CFG_ERR_ARG;
      }
      va_end(ap);
      return CFG_OK;
  }
  
  cfg_rc_t cfg_node_link(cfg_node_t *node, cfg_node_link_t id, cfg_node_t *node2)
  {
      cfg_node_t *n;
  
      if (node == NULL || node2 == NULL)
          return CFG_ERR_ARG;
      if (id == CFG_NODE_LINK_RBROTH) {
          /* make node a rbroth */
          n = node2;
          n->parent = node->parent;
          while (n->rbroth != NULL) {
              n->parent = node->parent;
              n = n->rbroth;
          }
          n->rbroth = node->rbroth; 
          node->rbroth = node2;
      }
      else if (id == CFG_NODE_LINK_CHILD1) {
          /* make node a child1 */
          n = node2;
          n->parent = node;
          while (n->rbroth != NULL) {
              n->parent = node;
              n = n->rbroth;
          }
          n->rbroth = node->child1;
          node->child1 = node2;
      }
      return CFG_OK;
  }
  
  cfg_rc_t cfg_node_unlink(cfg_node_t *node)
  {
      cfg_node_t *n;
  
      if (node == NULL)
          return CFG_ERR_ARG;
      if (node->parent == NULL)
          return CFG_OK;
      if (node->parent->child1 == node) {
          /* node was a child1 */
          node->parent->child1 = node->rbroth;
      }
      else {
          /* node was a rbroth */
          n = node->parent->child1;
          while (n->rbroth != node)
              n = n->rbroth;
          n->rbroth = node->rbroth;
      }
      return CFG_OK;
  }
  
  cfg_rc_t cfg_node_apply(cfg_node_t *node, void (*cb_fct)(void *, cfg_node_t *), void *cb_ctx)
  {
      cfg_rc_t rc;
  
      if (cb_fct == NULL)
          return CFG_ERR_ARG;
      if (node != NULL) {
          cb_fct(cb_ctx, node);
          if (node->child1 != NULL)
              if ((rc = cfg_node_apply(node->child1, cb_fct, cb_ctx)) != CFG_OK)
                  return rc;
          if (node->rbroth != NULL)
              if ((rc = cfg_node_apply(node->rbroth, cb_fct, cb_ctx)) != CFG_OK)
                  return rc;
      }
      return CFG_OK;
  }
  
  cfg_rc_t cfg_node_destroy(cfg_node_t *node)
  {
      if (node == NULL)
          return CFG_ERR_ARG;
      free(node);
      return CFG_OK;
  }
  
  Index: ossp-pkg/cfg/cfg_node.h
  ============================================================
  $ cvs update -p -r1.1 cfg_node.h
  /*
  **  OSSP cfg - Configuration Parsing
  **  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP cfg, a configuration parsing
  **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRCFG, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  cfg_node.h: configuration nodes (internals)
  */
  
  #ifndef __CFG_NODE_H__
  #define __CFG_NODE_H__
  
  #include "cfg.h"
  
  typedef enum {
      CFG_DATA_TYPE_PTR,
      CFG_DATA_TYPE_CHAR,
      CFG_DATA_TYPE_INT,
      CFG_DATA_TYPE_LONG,
      CFG_DATA_TYPE_FLOAT,
      CFG_DATA_TYPE_DOUBLE
  } cfg_data_type_t;
  
  typedef union {
      void  *p;
      char   c;
      int    i;
      long   l;
      float  f;
      double d;
  } cfg_data_union_t;
  
  typedef struct {
      cfg_data_type_t t;       /* data type       */
      cfg_data_union_t u;      /* data storage    */
      void (*d)(               /* data destructor */
          cfg_data_type_t t,
          cfg_data_union_t *u
      );
  } cfg_data_t;
  
  struct cfg_node_st {
      cfg_node_type_t type;    /* type of node */
      cfg_node_t     *parent;  /* pointer to parent node */
      cfg_node_t     *rbroth;  /* pointer to right brother node */
      cfg_node_t     *child1;  /* pointer to first child node */
      char           *token;   /* pointer to corresponding token string */
      cfg_data_t      data;    /* annotation data */ 
  };
  
  #endif /* __CFG_NODE_H__ */
  
  Index: ossp-pkg/cfg/cfg_syn.c
  ============================================================
  $ cvs update -p -r1.1 cfg_syn.c
  /*
  **  OSSP cfg - Configuration Parsing
  **  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP cfg, a configuration parsing
  **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  cfg_syn.c: syntax parsing
  */
  
  #include "cfg.h"
  #include "cfg_grid.h"
  #include "cfg_node.h"
  #include "cfg_fmt.h"
  #include "cfg_syn.h"
  
  /* prototypes for Flex-generated scanner */
  extern int  cfg_syn_lex_init(void *);
  extern int  cfg_syn_lex_destroy(void *);
  extern void cfg_syn_set_extra(void *, void *);
  
  /* prototypes for Bison-generated parser */
  extern int  cfg_syn_parse(void *);
  
  /* build a node tree according to a textual specification */
  cfg_rc_t cfg_syn(cfg_t *cfg, cfg_node_t **node, char *err_buf, size_t err_len, const char *input)
  {
      cfg_syn_ctx_t ctx;
      void *yyscan;
  
      /* initialize scanner */
      cfg_syn_lex_init(&yyscan);
      cfg_syn_set_extra(&ctx, yyscan);
  
      /* establish our own context which is passed 
         through the parser and scanner */
      ctx.inputptr = input;
      ctx.inputbuf = input;
      ctx.inputlen = strlen(input);
      ctx.cfg      = cfg;
      ctx.node     = NULL;
      ctx.rv       = CFG_OK;
      ctx.err_buf  = err_buf;
      ctx.err_len  = err_len;
      ctx.yyscan   = yyscan;
  
      /* start the parser loop */
      if (cfg_syn_parse(&ctx))
          ctx.rv = (ctx.rv == CFG_OK ? CFG_ERR_INT : ctx.rv);
  
      /* destroy scanner */
      cfg_syn_lex_destroy(yyscan);
  
      /* provide root/top-level node as result */
      *node = ctx.node;
  
      return ctx.rv;
  }
  
  /* remember a parsing error (used internally) */
  void cfg_syn_error(cfg_syn_ctx_t *ctx, cfg_rc_t rv, YYLTYPE *loc, const char *fmt, ...)
  {
      va_list ap;
      const char *cpF, *cpL;
      const char *cpP, *cpE;
      int line, column;
      char *cpBuf;
      char *cp;
      size_t n;
  
      /* remember error code */
      ctx->rv = rv;
  
      /* short circuit processing if no error buffer exists */
      if (ctx->err_buf == NULL || ctx->err_len <= 0)
          return;
  
      /* determine first and last positions of token */
      cpF = ctx->inputbuf+loc->first;
      cpL = ctx->inputbuf+loc->last;
  
      /* determine epilog and prolog of token */
      cpP = cpF-4;
      if (cpP < ctx->inputbuf)
          cpP = ctx->inputbuf;
      cpE = cpL+4;
      if (cpE > ctx->inputbuf+ctx->inputlen)
          cpE = ctx->inputbuf+ctx->inputlen;
  
      /* calculate line and column of token */
      line   = 1;
      column = 1;
      for (cp = (char *)ctx->inputbuf; cp < (ctx->inputbuf+ctx->inputlen) && cp != cpF; cp++) {
          column++;
          if (*cp == '\n') {
              column = 1;
              line++;
          }
      }
  
      /* extract token context with mark token borders */
      if ((cpBuf = malloc((size_t)((cpE-cpP)+2+1))) == NULL)
          return;
      cp = cpBuf;
      n = cpF-cpP;
      memcpy(cp, cpP, n); cp += n;
      *cp++ = '<';
      n = cpL-cpF;
      memcpy(cp, cpF, n); cp += n;
      *cp++ = '>';
      n = cpE-cpL;
      memcpy(cp, cpL, n); cp += n;
      *cp++ = '\0';
  
      /* remember parsing error: part I (context part) */
      cfg_fmt_sprintf(ctx->err_buf, sizeof(ctx->err_len), 
                      "line %d, column %d: `%s'; %s",
                      line, column, cpBuf);
      free(cpBuf);
  
      /* remember parsing error: part II (parsing part) */
      n = strlen(ctx->err_buf);
      va_start(ap, fmt);
      cfg_fmt_vsprintf(ctx->err_buf+n, sizeof(ctx->err_len)-n, fmt, ap);
      va_end(ap);
  
      return;
  }
  
  Index: ossp-pkg/cfg/cfg_syn.h
  ============================================================
  $ cvs update -p -r1.1 cfg_syn.h
  /*
  **  OSSP cfg - Configuration Parsing
  **  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP cfg, a configuration parsing
  **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  cfg_syn.h: syntax parsing header
  */
  
  #ifndef __CFG_SYN_H__
  #define __CFG_SYN_H__
  
  #include <string.h>
  #include <stdarg.h>
  
  #include "cfg.h"
  #include "cfg_grid.h"
  #include "cfg_node.h"
  
  /* internal specification scanner/parser context */
  typedef struct {
      const char   *inputptr;   /* input buffer: current reading pointer */
      const char   *inputbuf;   /* input buffer: begin of buffer */
      size_t        inputlen;   /* input buffer: size  of buffer */
      cfg_t        *cfg;        /* the configuration object */
      cfg_node_t   *node;       /* top-level/root/result channel */
      cfg_rc_t      rv;         /* return value */
      char         *err_buf;    /* error buffer pointer */
      size_t        err_len;    /* error buffer length */
      void         *yyscan;     /* Flex scanner context */
  } cfg_syn_ctx_t;
  
  /* internal scanner/parser token location */
  typedef struct {
      int first;
      int last;
  } cfg_syn_loc_t;
  #define YYLTYPE cfg_syn_loc_t
  
  /* support for automatic location tracking by Bison */
  #define first_line   first
  #define first_column first
  #define last_line    last
  #define last_column  last
  
  /* internal API */
  extern cfg_rc_t cfg_syn(cfg_t *cfg, cfg_node_t **node, char *err_buf, size_t err_len, const char *input);
  
  /* error reporting function */
  extern void cfg_syn_error(cfg_syn_ctx_t *ctx, cfg_rc_t rv, YYLTYPE *loc, const char *fmt, ...);
  
  #endif /* __CFG_SYN_H__ */
  
  Index: ossp-pkg/cfg/cfg_syn_parse.y
  ============================================================
  $ cvs update -p -r1.1 cfg_syn_parse.y
  %{
  /*
  **  OSSP cfg - Configuration Parsing
  **  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP cfg, a configuration parsing
  **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  cfg_syn_parse.y: context free grammar specification for GNU Bison
  **
  **  ATTENTION: This requires GNU Bison 1.30 or newer!
  */
  
  #include <stdio.h>
  #include <stdlib.h>
  
  #include "cfg.h"
  #include "cfg_syn.h"
  
  /* make sure yyparse() accepts a context pointer and
     passes through its inlined scanner context to yylex() */
  #define CTX           ((cfg_syn_ctx_t *)ctx)
  #define YYPARSE_PARAM ctx
  #define YYLEX_PARAM   CTX->yyscan
  
  /* provide an explicit prototype for the yylex() function but use 
     "void *" instead of correct type because at this point in the 
     generation process we have the types still not available */
  extern int yylex(/*YYSTYPE*/ void *lvalp, 
                   /*YYLTYPE*/ void *llocp, cfg_syn_ctx_t *ctx);
  
  /* generate verbose error messages and remember them inside the context */
  #undef  yyerror
  #define yyerror(msg) \
      cfg_syn_error(CTX, CFG_ERR_SYN, &yylloc, msg)
  #define YYERROR_VERBOSE
  
  /* scanner state transition */
  extern void cfg_syn_scan_push(cfg_syn_ctx_t *, const char *state);
  extern void cfg_syn_scan_pop(cfg_syn_ctx_t *);
  %}
  
  /* parser options */
  %pure_parser
  %locations
  %defines
  
  /* the YYSTYPE: parser token value */
  %union {
      char         *cpString;
      cfg_node_t   *npNode;
  }
  
  /* assign YYSTYPE elements to parser rules */
  %type  <npNode>   sequence
  %type  <npNode>   directives
  %type  <npNode>   directive
  %type  <npNode>   tokens
  %type  <npNode>   token
  %type  <npNode>   string
  
  /* list of scanner tokens */
  %token            T_SEP
  %token            T_OPEN
  %token            T_CLOSE
  %token <cpString> T_STRING
  
  /* operator association */
  %right T_SEP
  %right T_OPEN
  %right T_CLOSE
  
  /* grammar start rule 
     (technically redundant but explicit to be sure) */
  %start configuration
  
  %%
  
  configuration
      : sequence {
          CTX->node = $1;
        }
      ;
  
  sequence
      : directives {
          cfg_node_t *n;
          cfg_node_create(&n);
          cfg_node_set(n, CFG_NODE_ATTR_TYPE, CFG_NODE_TYPE_SEQ);
          cfg_node_set(n, CFG_NODE_ATTR_CHILD1, $1);
        }
      ;
  
  directives
      : /* empty */ { 
          $$ = NULL;
        }
      | directive { 
          $$ = $1; 
        }
      | directive T_SEP directives { 
          cfg_node_set($1, CFG_NODE_ATTR_RBROTH, $3);
          $$ = $1;
        }
      ;
  
  directive
      : tokens {
          cfg_node_t *n;
          cfg_node_create(&n);
          cfg_node_set(n, CFG_NODE_ATTR_TYPE, CFG_NODE_TYPE_DIR);
          cfg_node_set(n, CFG_NODE_ATTR_CHILD1, $1);
        }
      ;
  
  tokens 
      : token { 
          $$ = $1; 
        }
      | token tokens { 
          cfg_node_set($1, CFG_NODE_ATTR_RBROTH, $2);
          $$ = $1;
        }
      ;
  
  token
      : T_OPEN sequence T_CLOSE { 
          $$ = $2; 
        }
      | string {
          $$ = $1; 
        }
      ;
  
  string
      : T_STRING {
          cfg_node_t *n;
          cfg_node_create(&n);
          cfg_node_set(n, CFG_NODE_ATTR_TYPE, CFG_NODE_TYPE_TOK);
          cfg_node_set(n, CFG_NODE_ATTR_TOKEN, $1);
          $$ = n; 
        }
      ;
  
  %%
  
  Index: ossp-pkg/cfg/cfg_syn_scan.l
  ============================================================
  $ cvs update -p -r1.1 cfg_syn_scan.l
  %{
  /*
  **  OSSP cfg - Configuration Parsing
  **  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP cfg, a configuration parsing
  **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  cfg_syn_scan.l: regular grammar specification for GNU Flex
  **
  **  ATTENTION: This requires GNU Flex 2.5.6 or newer!
  */
  
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  
  #include "cfg.h"
  #include "cfg_syn.h"
  #include "cfg_syn_parse.h"
  
  /* how to find our own context */
  #define CTX ((cfg_syn_ctx_t *)yyget_extra(yy_globals))
  
  /* provide own input handling */
  #define YY_NO_UNPUT 1
  #undef  YY_INPUT
  #define YY_INPUT(buf,result,max_size) (result = yyinput(CTX, buf, max_size))
  static int yyinput(cfg_syn_ctx_t *ctx, char *buf, int max_size);
  
  /* location tracking */
  #define YY_USER_INIT \
      yylloc->first = 0; \
      yylloc->last  = 0;
  #define YY_USER_ACTION \
      yylloc->first = yylloc->last; \
      yylloc->last += yyleng;
  #define YY_USER_ACTION_ROLLBACK \
      yylloc->last = yylloc->first
  %}
  
  /* scanner options */
  %pointer
  %option stack
  %option reentrant-bison
  %option never-interactive
  %option noyywrap
  
  /* scanner states */
  %x SS_DQ
  %x SS_SQ
  %x SS_CO_C
  
  %%
  
      /* local variables */
      char  caStr[1024];
      char *cpStr = NULL;
  
      /* whitespaces */
  [ \t\n]+ {
      /* no-op */
  }
  
      /* C-style block comment */
  "/*" {
      BEGIN(SS_CO_C);
  }
  <SS_CO_C>"*/" {
      BEGIN(INITIAL);
  }
  <SS_CO_C>(.|\n) {
      /* no-op */
  }
  
      /* C++-style EOL comment */
  "//"[^\n]* {
      /* no-op */
  }
  
      /* Shell-style EOL comment */
  "#"[^\n]* {
      /* no-op */
  }
  
      /* double-quoted word ("...") */
  \" {
      cpStr = caStr;
      BEGIN(SS_DQ);
  }
  <SS_DQ>\" {
      *cpStr = '\0';
      yylval->cpString = strdup(caStr);
      BEGIN(INITIAL);
      return T_STRING;
  }
  <SS_DQ>\\[0-7]{1,3} {
      unsigned int result;
      (void)sscanf(yytext+1, "%o", &result);
      if (result > 0xff) {
          cfg_syn_error(CTX, CFG_ERR_SYN, yylloc, "escape sequence out of bound");
          return 0;
      }
      *cpStr++ = result;
  }
  <SS_DQ>\\x[0-9a-fA-F]{2} {
      unsigned int result;
      (void)sscanf(yytext+1, "%x", &result);
      if (result > 0xff) {
          cfg_syn_error(CTX, CFG_ERR_SYN, yylloc, "escape sequence out of bound");
          return 0;
      }
      *cpStr++ = result;
  }
  <SS_DQ>\\n { *cpStr++ = '\n'; }
  <SS_DQ>\\r { *cpStr++ = '\r'; }
  <SS_DQ>\\t { *cpStr++ = '\t'; }
  <SS_DQ>\\b { *cpStr++ = '\b'; }
  <SS_DQ>\\f { *cpStr++ = '\f'; }
  <SS_DQ>\\(.|\n) {
      *cpStr++ = yytext[1];
  }
  <SS_DQ>[^\\\"]+ {
      char *cp = yytext;
      while (*cp != '\0')
          *cpStr++ = *cp++;
  }
  <SS_DQ>(.|\n) {
      *cpStr++ = yytext[1];
  }
  
      /* single-quoted word ('...') */
  \' {
      cpStr = caStr;
      BEGIN(SS_SQ);
  }
  <SS_SQ>\' {
      *cpStr = '\0';
      yylval->cpString = strdup(caStr);
      BEGIN(INITIAL);
      return T_STRING;
  }
  <SS_SQ>\\(.|\n) {
      *cpStr++ = yytext[1];
  }
  <SS_SQ>[^\\\']+ {
      char *cp = yytext;
      while (*cp != '\0')
          *cpStr++ = *cp++;
  }
  <SS_SQ>(.|\n) {
      *cpStr++ = yytext[1];
  }
  
      /* plain text word */
  [^ \t\n;{}"']+ {
      yylval->cpString = strdup(yytext);
      return T_STRING;
  }
  
     /* special tokens */
  ";" { return T_SEP; }
  "{" { return T_OPEN; }
  "}" { return T_CLOSE; }
  
     /* anything else is returned as is... */
  .|\n {
      return yytext[0];
  }
  
  %%
  
  /* external scanner state transitions */
  void cfg_syn_scan_push(cfg_syn_ctx_t *ctx, const char *state);
  void cfg_syn_scan_push(cfg_syn_ctx_t *ctx, const char *state)
  {
      if (strcmp(state, "SS_SQ") == 0)
          yy_push_state(SS_SQ, ctx->yyscan);
  }
  void cfg_syn_scan_pop(cfg_syn_ctx_t *ctx);
  void cfg_syn_scan_pop(cfg_syn_ctx_t *ctx)
  {
      yy_pop_state(ctx->yyscan);
  }
  
  /* buffer-based input routine */
  static int yyinput(cfg_syn_ctx_t *ctx, char *buf, int max_size)
  {
      int n;
  
      n = (ctx->inputbuf + ctx->inputlen - ctx->inputptr);
      if (n > max_size)
          n = max_size;
      if (n <= 0)
          return YY_NULL;
      memcpy(buf, ctx->inputptr, n);
      ctx->inputptr += n;
      return n;
  }
  
  Index: ossp-pkg/cfg/cfg_test.c
  ============================================================
  $ cvs update -p -r1.1 cfg_test.c
  
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  
  #include "cfg.h"
  #include "cfg_util.h"
  #include "cfg_node.h"
  #include "cfg_syn.h"
  
  typedef struct {
      int line;
      int col;
      FILE *fp;
  } cb_ctx_t;
  
  static void cb_out(cb_ctx_t *ctx, char *str)
  {
      int i;
  
      fprintf(stderr, "cb_out <%s>\n", str);
      fprintf(ctx->fp, "%s", str);
      for (i = 0; str[i] != '\0'; i++) {
          if (str[i] == '\n') {
              ctx->line++;
              ctx->col = 0;
          }
          else {
              ctx->col++;
          }
      }
  }
  
  static void cb_fct(void *_ctx, cfg_node_t *node)
  {
      cb_ctx_t *ctx = (cb_ctx_t *)_ctx;
      cfg_node_type_t type;
      cfg_node_t *node2;
      cfg_rc_t rc;
      char *token;
  
      fprintf(stderr, "cb_fct enter\n");
      rc = cfg_node_get(node, CFG_NODE_ATTR_TYPE, &type);
      fprintf(stderr, "rc=%d type=%d\n", rc, type);
      if (type == CFG_NODE_TYPE_SEQ) {
          cb_out(ctx, " {\n");
      }
      else if (type == CFG_NODE_TYPE_DIR) {
          cb_out(ctx, ";\n");
          cfg_node_get(node, CFG_NODE_ATTR_RBROTH, &node2);
          if (node2 == NULL)
              cb_out(ctx, "};\n");
      }
      else if (type == CFG_NODE_TYPE_TOK) {
          cfg_node_get(node, CFG_NODE_ATTR_TOKEN, &token);
          if (token != NULL) {
              cb_out(ctx, token);
              cfg_node_get(node, CFG_NODE_ATTR_RBROTH, &node2);
              if (node2 != NULL)
                  cb_out(ctx, " ");
          }
      }
      fprintf(stderr, "cb_fct leave\n");
  }
  
  int main(int argc, char *argv[]) 
  {
      cfg_rc_t rc;
      char *buf_ptr;
      size_t buf_size;
      cfg_node_t *node;
      char err_buf[1024];
  
      if (argc != 2) {
          fprintf(stderr, "USAGE: %s <file>\n", argv[0]);
          exit(1);
      }
      if ((rc = cfg_util_readfile(argv[1], &buf_ptr, &buf_size)) != CFG_OK) {
          fprintf(stderr, "ERROR: reading file \"%s\"\n", argv[1]);
          exit(1);
      }
      if ((rc = cfg_syn(NULL, &node, err_buf, sizeof(err_buf), buf_ptr)) != CFG_OK) {
          fprintf(stderr, "ERROR: %s\n", err_buf);
      }
      else {
          cb_ctx_t ctx;
  
          ctx.line = 0;
          ctx.col = 0;
          ctx.fp = stdout;
          cfg_node_apply(node, cb_fct, &ctx);
      }
      free(buf_ptr);
  
      return 0;
  }
  
  Index: ossp-pkg/cfg/cfg_util.c
  ============================================================
  $ cvs update -p -r1.1 cfg_util.c
  /*
  **  OSSP cfg - Configuration Parsing
  **  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP cfg, a configuration parsing
  **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  cfg_util.c: utility functions
  */
  
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  #include <unistd.h>
  
  #include "cfg.h"
  #include "cfg_util.h"
  
  cfg_rc_t cfg_util_readfile(const char *filename, char **buf_ptr, size_t *buf_len)
  {
      FILE *fp = NULL;
      size_t n;
      char *cp;
  
      if (strcmp(filename, "-") == 0) {
          /* file is given on stdin */
          (*buf_len) = 32;
          if ((*buf_ptr = (char *)malloc(*buf_len)) == NULL)
              return CFG_ERR_SYS;
          cp = *buf_ptr;
          while ((n = fread(cp, 1, (*buf_len)-(cp-(*buf_ptr)), stdin)) > 0) {
              cp += n;
              if (((*buf_ptr)+(*buf_len))-cp < (*buf_len)/8) {
                  (*buf_len) *= 2;
                  n = cp-(*buf_ptr);
                  if ((cp = (char *)realloc(*buf_ptr, *buf_len)) == NULL) {
                      free(*buf_ptr);
                      return CFG_ERR_SYS;
                  }
                  *buf_ptr = cp;
                  cp += n;
              }
          }
          *cp = '\0';
      }
      else {
          /* file is given on filesystem */
          if ((fp = fopen(filename, "r")) == NULL)
              return CFG_ERR_SYS;
          fseek(fp, 0, SEEK_END);
          if ((n = ftell(fp)) > 0) {
              if ((*buf_ptr = (char *)malloc(n+1)) == NULL) {
                  fclose(fp);
                  return CFG_ERR_SYS;
              }
              fseek(fp, 0, SEEK_SET);
              if ((n = fread(*buf_ptr, 1, n, fp)) == 0) {
                  free(*buf_ptr);
                  fclose(fp);
                  return CFG_ERR_SYS;
              }
              (*buf_ptr)[n] = '\0';
              (*buf_len) = n+1;
          }
          else {
              (*buf_ptr) = strdup("");
              (*buf_len) = 1;
          }
          fclose(fp);
      }
      return CFG_OK;
  }
  
  Index: ossp-pkg/cfg/cfg_util.h
  ============================================================
  $ cvs update -p -r1.1 cfg_util.h
  /*
  **  OSSP cfg - Configuration Parsing
  **  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP cfg, a configuration parsing
  **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRCFG, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  cfg_util.h: utility functions (internals)
  */
  
  #ifndef __CFG_UTIL_H__
  #define __CFG_UTIL_H__
  
  #include "cfg.h"
  
  cfg_rc_t cfg_util_readfile(const char *filename, char **buf_ptr, size_t *buf_len);
  
  #endif /* __CFG_UTIL_H__ */
  
  Index: ossp-pkg/cfg/sample.cfg
  ============================================================
  $ cvs update -p -r1.1 sample.cfg
  ##
  ##  sample.cfg 
  ##
  
  /* now comes 
     a C/C++ style block comment ** quux */
  
  foo -b --bar -qX --quux=X baz
  rootdir /;  // C++ style EOL comment 
  tmpdir /tmp;
  
  directory /foo {
      deny from all;
      allow from { 1.2.3.4; 6.7.8.9 };
      fuck;
      foobar { baz } quux;
  };
  
  directory /foo2 {
      deny from all;  # shell-style EOL comment
      allow from { 1.2.3.4; 6.7.8.9 } butnot { 1; 2; 3; };
      fuck;
      foobar { baz } quux "multiline string,\
                           without blanks" baz;
  };
  

From ossp-cvs-owner@ossp.org  Thu Jul  4 08:16:14 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D4D1B76431; Thu,  4 Jul 2002 08:16:13 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg Makefile cfg.h cfg_data.c cfg_data.h cfg_node...
Message-Id: <20020704061613.D4D1B76431@mail.ossp.org>
Date: Thu,  4 Jul 2002 08:16:13 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Jul-2002 08:16:13
  Branch: HEAD                             Handle: 2002070407161300

  Added files:
    ossp-pkg/cfg            cfg_data.c cfg_data.h
  Modified files:
    ossp-pkg/cfg            Makefile cfg.h cfg_node.c cfg_node.h

  Log:
    split out cfg_data_t stuff into seperate object to get better abstraction for this

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/cfg/Makefile
    1.2         +1  -0      ossp-pkg/cfg/cfg.h
    1.1         +248 -0     ossp-pkg/cfg/cfg_data.c
    1.1         +82 -0      ossp-pkg/cfg/cfg_data.h
    1.2         +9  -27     ossp-pkg/cfg/cfg_node.c
    1.2         +1  -27     ossp-pkg/cfg/cfg_node.h
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/Makefile
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 Makefile
  --- ossp-pkg/cfg/Makefile	3 Jul 2002 13:25:34 -0000	1.1
  +++ ossp-pkg/cfg/Makefile	4 Jul 2002 06:16:13 -0000	1.2
  @@ -15,7 +15,7 @@
   FLEX   = flex-beta
   
   LIB    = libcfg.a
  -OBJ    = cfg_grid.o cfg_node.o cfg_fmt.o cfg_syn.o cfg_syn_parse.o cfg_syn_scan.o cfg_util.o
  +OBJ    = cfg_grid.o cfg_data.o cfg_node.o cfg_fmt.o cfg_syn.o cfg_syn_parse.o cfg_syn_scan.o cfg_util.o
   TST    = cfg_test
   
   all: $(LIB) $(TST)
  Index: ossp-pkg/cfg/cfg.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 cfg.h
  --- ossp-pkg/cfg/cfg.h	3 Jul 2002 13:25:34 -0000	1.1
  +++ ossp-pkg/cfg/cfg.h	4 Jul 2002 06:16:13 -0000	1.2
  @@ -39,6 +39,7 @@
   typedef enum {
       CFG_OK = 0,
       CFG_ERR_ARG,
  +    CFG_ERR_USE,
       CFG_ERR_INT,
       CFG_ERR_SYS,
       CFG_ERR_SYN
  Index: ossp-pkg/cfg/cfg_data.c
  ============================================================
  $ cvs update -p -r1.1 cfg_data.c
  /*
  **  OSSP cfg - Configuration Parsing
  **  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP cfg, a configuration parsing
  **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRCFG, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  cfg_data.c: configuration annotational data
  */
  
  #include <stdlib.h>
  #include <stdarg.h>
  #include <string.h>
  
  #include "cfg.h"
  #include "cfg_data.h"
  
  cfg_rc_t cfg_data_create(cfg_data_t **data)
  {
      cfg_rc_t rc;
  
      if (data == NULL)
          return CFG_ERR_ARG;
      if ((*data = (cfg_data_t *)malloc(sizeof(cfg_data_t))) == NULL)
          return CFG_ERR_SYS;
      if ((rc = cfg_data_init(*data)) != CFG_OK) {
          free(*data);
          return rc;
      }
      return CFG_OK;
  }
  
  cfg_rc_t cfg_data_init(cfg_data_t *data)
  {
      if (data == NULL)
          return CFG_ERR_ARG;
      data->type    = CFG_DATA_TYPE_INT;
      data->value.i = 0;
      data->ctrl    = cfg_data_ctrl_default;
      return CFG_OK;
  }
  
  cfg_rc_t cfg_data_kill(cfg_data_t *data)
  {
      cfg_rc_t rc;
  
      if (data == NULL)
          return CFG_ERR_ARG;
      if (data->ctrl != NULL)
          if ((rc = data->ctrl(data, CFG_DATA_CTRL_DESTROY)) != CFG_OK)
              return rc;
      return CFG_OK;
  }
  
  cfg_rc_t cfg_data_destroy(cfg_data_t *data)
  {
      cfg_rc_t rc;
  
      if (data == NULL)
          return CFG_ERR_ARG;
      if ((rc = cfg_data_kill(data)) != CFG_OK)
          return rc;
      free(data);
      return CFG_OK;
  }
  
  cfg_rc_t cfg_data_clone(cfg_data_t *data, cfg_data_t **clone)
  {
      cfg_rc_t rc;
  
      if (data == NULL || clone == NULL)
          return CFG_ERR_ARG;
      if ((*clone = (cfg_data_t *)malloc(sizeof(cfg_data_t))) == NULL)
          return CFG_ERR_SYS;
      (*clone)->type = data->type;
      (*clone)->ctrl = data->ctrl;
      if ((rc = data->ctrl(data, CFG_DATA_CTRL_CLONE, *clone)) != CFG_OK) {
          free(*clone);
          return rc;
      }
      return CFG_OK;
  }
  
  cfg_rc_t cfg_data_ctrl_default(cfg_data_t *data, cfg_data_ctrl_t ctrl, ...)
  {
      cfg_data_t *data2;
      va_list ap;
  
      va_start(ap, ctrl);
      if (data == NULL)
          return CFG_ERR_ARG;
      if (ctrl == CFG_DATA_CTRL_CLONE) {
          if ((data2 = (cfg_data_t *)va_arg(ap, void *)) == NULL)
              return CFG_ERR_ARG;
          if (data->type == CFG_DATA_TYPE_STR) {
              if (data->value.s != NULL)
                  data2->value.s = strdup(data->value.s);
              else
                  data2->value.s = NULL;
          }
          else {
              memcpy((void *)&(data2->value), 
                     (void *)&(data->value), sizeof(cfg_data_value_t));
          }
      }
      else if (ctrl == CFG_DATA_CTRL_DESTROY) {
          if (data->type == CFG_DATA_TYPE_STR)
              if (data->value.s != NULL)
                  free(data->value.s);
      }
      va_end(ap);
      return CFG_OK;
  }
  
  cfg_rc_t cfg_data_set(cfg_data_t *data, cfg_data_id_t id, ...)
  {
      va_list ap;
  
      if (data == NULL)
          return CFG_ERR_ARG;
      va_start(ap, id);
      switch (id) {
          case CFG_DATA_TYPE: {
              cfg_data_type_t t = (cfg_data_type_t)va_arg(ap, int);
              if (!(   t == CFG_DATA_TYPE_PTR
                    || t == CFG_DATA_TYPE_STR
                    || t == CFG_DATA_TYPE_INT
                    || t == CFG_DATA_TYPE_FLT))
                  return CFG_ERR_ARG;
              data->type = t;
              break;
          }
          case CFG_DATA_VALUE: {
              switch (data->type) {
                  case CFG_DATA_TYPE_PTR: {
                      data->value.p = (void *)va_arg(ap, void *); 
                      break;
                  }
                  case CFG_DATA_TYPE_STR: {
                      char *s = (char *)va_arg(ap, void *);
                      if (data->value.s != NULL)
                          free(data->value.s);
                      if (s != NULL)
                          s = strdup(s);
                      data->value.s = s;
                      break;
                  }
                  case CFG_DATA_TYPE_INT: {
                      data->value.i = (int)va_arg(ap, int);
                      break;
                  }
                  case CFG_DATA_TYPE_FLT: {
                      data->value.f = (double)va_arg(ap, double);
                      break;
                  }
              }
              break;
          }
          case CFG_DATA_CTRL: {
              cfg_data_ctrl_cb_t ctrl = (cfg_data_ctrl_cb_t)va_arg(ap, void (*)(void));
              data->ctrl = ctrl;
              break;
          }
      }
      va_end(ap);
      return CFG_OK;
  }
  
  cfg_rc_t cfg_data_get(cfg_data_t *data, cfg_data_id_t id, ...)
  {
      va_list ap;
  
      if (data == NULL)
          return CFG_ERR_ARG;
      va_start(ap, id);
      switch (id) {
          case CFG_DATA_TYPE: {
              cfg_data_type_t *pt = (cfg_data_type_t *)va_arg(ap, int *);
              if (pt == NULL)
                  return CFG_ERR_ARG;
              *pt = data->type;
              break;
          }
          case CFG_DATA_VALUE: {
              switch (data->type) {
                  case CFG_DATA_TYPE_PTR: {
                      void **p = (void **)va_arg(ap, void *);
                      if (p == NULL)
                          return CFG_ERR_ARG;
                      *p = data->value.p;
                      break;
                  }
                  case CFG_DATA_TYPE_STR: {
                      char **p = (char **)va_arg(ap, void *);
                      if (p == NULL)
                          return CFG_ERR_ARG;
                      *p = data->value.s;
                      break;
                  }
                  case CFG_DATA_TYPE_INT: {
                      int *p = (int *)va_arg(ap, void *);
                      if (p == NULL)
                          return CFG_ERR_ARG;
                      *p = data->value.i;
                      break;
                  }
                  case CFG_DATA_TYPE_FLT: {
                      double *p = (double *)va_arg(ap, void *);
                      if (p == NULL)
                          return CFG_ERR_ARG;
                      *p = data->value.f;
                      break;
                  }
              }
              break;
          }
          case CFG_DATA_CTRL: {
              cfg_data_ctrl_cb_t *pcb = (cfg_data_ctrl_cb_t *)va_arg(ap, void *);
              if (pcb == NULL)
                  return CFG_ERR_ARG;
              *pcb = data->ctrl;
              break;
          }
      }
      va_end(ap);
      return CFG_OK;
  }
  
  Index: ossp-pkg/cfg/cfg_data.h
  ============================================================
  $ cvs update -p -r1.1 cfg_data.h
  /*
  **  OSSP cfg - Configuration Parsing
  **  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP cfg, a configuration parsing
  **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRCFG, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  cfg_data.h: configuration annotational data
  */
  
  #ifndef __CFG_DATA_H__
  #define __CFG_DATA_H__
  
  #include "cfg.h"
  
  typedef enum {
      CFG_DATA_TYPE_PTR,  /* "void *" */
      CFG_DATA_TYPE_STR,  /* "char *" */
      CFG_DATA_TYPE_INT,  /* "int"    */
      CFG_DATA_TYPE_FLT   /* "double" */
  } cfg_data_type_t;
  
  typedef union {
      void  *p;
      char  *s;
      int    i;
      double f;
  } cfg_data_value_t;
  
  typedef enum {
      CFG_DATA_CTRL_CLONE,
      CFG_DATA_CTRL_DESTROY
  } cfg_data_ctrl_t;
  
  typedef enum {
      CFG_DATA_TYPE,
      CFG_DATA_VALUE,
      CFG_DATA_CTRL
  } cfg_data_id_t;
  
  struct cfg_data_st;
  typedef struct cfg_data_st cfg_data_t;
  
  typedef cfg_rc_t (*cfg_data_ctrl_cb_t)(cfg_data_t *, cfg_data_ctrl_t, ...);
  
  struct cfg_data_st {
      cfg_data_type_t    type;   /* data type    */
      cfg_data_value_t   value;  /* data value   */
      cfg_data_ctrl_cb_t ctrl;   /* data control */
  };
  
  extern cfg_rc_t  cfg_data_create       (cfg_data_t **data);
  extern cfg_rc_t  cfg_data_init         (cfg_data_t  *data);
  extern cfg_rc_t  cfg_data_kill         (cfg_data_t  *data);
  extern cfg_rc_t  cfg_data_destroy      (cfg_data_t  *data);
  extern cfg_rc_t  cfg_data_clone        (cfg_data_t  *data, cfg_data_t **clone);
  extern cfg_rc_t  cfg_data_set          (cfg_data_t  *data, cfg_data_id_t id, ...);
  extern cfg_rc_t  cfg_data_get          (cfg_data_t  *data, cfg_data_id_t id, ...);
  extern cfg_rc_t  cfg_data_ctrl_default (cfg_data_t  *data, cfg_data_ctrl_t ctrl, ...);
  
  #endif /* __CFG_DATA_H__ */
  
  Index: ossp-pkg/cfg/cfg_node.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 cfg_node.c
  --- ossp-pkg/cfg/cfg_node.c	3 Jul 2002 13:25:34 -0000	1.1
  +++ ossp-pkg/cfg/cfg_node.c	4 Jul 2002 06:16:13 -0000	1.2
  @@ -46,8 +46,7 @@
       n->rbroth   = NULL;
       n->child1   = NULL;
       n->token    = NULL;
  -    n->data.t   = CFG_DATA_TYPE_LONG;
  -    n->data.u.l = 0;
  +    cfg_data_init(&n->data);
       *node = n;
       return CFG_OK;
   }
  @@ -81,16 +80,7 @@
               break;
           }
           case CFG_NODE_ATTR_DATA: {
  -            node->data.t = (cfg_data_type_t)va_arg(ap, cfg_data_type_t);
  -            switch (node->data.t) {
  -                case CFG_DATA_TYPE_PTR:    node->data.u.p = (void *)va_arg(ap, void *); break;
  -                case CFG_DATA_TYPE_CHAR:   node->data.u.c = (char  )va_arg(ap, int   ); break;
  -                case CFG_DATA_TYPE_INT:    node->data.u.i = (int   )va_arg(ap, int   ); break;
  -                case CFG_DATA_TYPE_LONG:   node->data.u.l = (long  )va_arg(ap, long  ); break;
  -                case CFG_DATA_TYPE_FLOAT:  node->data.u.f = (float )va_arg(ap, double); break;
  -                case CFG_DATA_TYPE_DOUBLE: node->data.u.d = (double)va_arg(ap, double); break;
  -                default: return CFG_ERR_ARG;
  -            }
  +            return CFG_ERR_USE;
           }
           default:
               return CFG_ERR_ARG;
  @@ -108,22 +98,22 @@
       va_start(ap, attr);
       switch (attr) {
           case CFG_NODE_ATTR_TYPE: {
  -            cfg_node_type_t *type = (cfg_node_type_t *)va_arg(ap, cfg_node_type_t *);
  +            cfg_node_type_t *type = (cfg_node_type_t *)va_arg(ap, void *);
               *type = node->type;
               break;
           }
           case CFG_NODE_ATTR_PARENT: {
  -            cfg_node_t **n = (cfg_node_t **)va_arg(ap, cfg_node_t **);
  +            cfg_node_t **n = (cfg_node_t **)va_arg(ap, void *);
               *n = node->parent;
               break;
           }
           case CFG_NODE_ATTR_RBROTH: {
  -            cfg_node_t **n = (cfg_node_t **)va_arg(ap, cfg_node_t **);
  +            cfg_node_t **n = (cfg_node_t **)va_arg(ap, void *);
               *n = node->rbroth;
               break;
           }
           case CFG_NODE_ATTR_CHILD1: {
  -            cfg_node_t **n = (cfg_node_t **)va_arg(ap, cfg_node_t **);
  +            cfg_node_t **n = (cfg_node_t **)va_arg(ap, void *);
               *n = node->child1;
               break;
           }
  @@ -133,17 +123,9 @@
               break;
           }
           case CFG_NODE_ATTR_DATA: {
  -            cfg_data_type_t *type = (cfg_data_type_t *)va_arg(ap, cfg_data_type_t *);
  -            *type = node->data.t;
  -            switch (node->data.t) {
  -                case CFG_DATA_TYPE_PTR:    *((void  **)va_arg(ap, void  **)) = node->data.u.p; break;
  -                case CFG_DATA_TYPE_CHAR:   *((char   *)va_arg(ap, int    *)) = node->data.u.c; break;
  -                case CFG_DATA_TYPE_INT:    *((int    *)va_arg(ap, int    *)) = node->data.u.i; break;
  -                case CFG_DATA_TYPE_LONG:   *((long   *)va_arg(ap, long   *)) = node->data.u.l; break;
  -                case CFG_DATA_TYPE_DOUBLE: *((double *)va_arg(ap, double *)) = node->data.u.d; break;
  -                case CFG_DATA_TYPE_FLOAT:  *((float  *)va_arg(ap, double *)) = node->data.u.f; break;
  -                default: return CFG_ERR_ARG;
  -            }
  +            cfg_data_t **data = (cfg_data_t **)va_arg(ap, void *);
  +            *data = &(node->data);
  +            break;
           }
           default:
               return CFG_ERR_ARG;
  Index: ossp-pkg/cfg/cfg_node.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 cfg_node.h
  --- ossp-pkg/cfg/cfg_node.h	3 Jul 2002 13:25:34 -0000	1.1
  +++ ossp-pkg/cfg/cfg_node.h	4 Jul 2002 06:16:13 -0000	1.2
  @@ -32,33 +32,7 @@
   #define __CFG_NODE_H__
   
   #include "cfg.h"
  -
  -typedef enum {
  -    CFG_DATA_TYPE_PTR,
  -    CFG_DATA_TYPE_CHAR,
  -    CFG_DATA_TYPE_INT,
  -    CFG_DATA_TYPE_LONG,
  -    CFG_DATA_TYPE_FLOAT,
  -    CFG_DATA_TYPE_DOUBLE
  -} cfg_data_type_t;
  -
  -typedef union {
  -    void  *p;
  -    char   c;
  -    int    i;
  -    long   l;
  -    float  f;
  -    double d;
  -} cfg_data_union_t;
  -
  -typedef struct {
  -    cfg_data_type_t t;       /* data type       */
  -    cfg_data_union_t u;      /* data storage    */
  -    void (*d)(               /* data destructor */
  -        cfg_data_type_t t,
  -        cfg_data_union_t *u
  -    );
  -} cfg_data_t;
  +#include "cfg_data.h"
   
   struct cfg_node_st {
       cfg_node_type_t type;    /* type of node */

From ossp-cvs-owner@ossp.org  Thu Jul  4 08:30:10 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7AB8F76431; Thu,  4 Jul 2002 08:30:10 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea-brainstorming
Message-Id: <20020704063010.7AB8F76431@mail.ossp.org>
Date: Thu,  4 Jul 2002 08:30:10 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Jul-2002 08:30:10
  Branch: HEAD                             Handle: 2002070407300900

  Modified files:
    ossp-pkg/tabea          tabea-brainstorming

  Log:
    fix example

  Summary:
    Revision    Changes     Path
    1.5         +18 -25     ossp-pkg/tabea/tabea-brainstorming
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea-brainstorming
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 tabea-brainstorming
  --- ossp-pkg/tabea/tabea-brainstorming	3 Jul 2002 10:34:07 -0000	1.4
  +++ ossp-pkg/tabea/tabea-brainstorming	4 Jul 2002 06:30:09 -0000	1.5
  @@ -447,7 +447,8 @@
           }
       }
   
  -Example: Jumpstart Disk and Raid Configuration
  +    Example: Jumpstart Disk and Raid Configuration
  +    ----------------------------------------------
   
       block {
           name BEGIN
  @@ -485,7 +486,6 @@
           }
           item {
               name sizeofdisk
  -            
           }
           item {
               name slices
  @@ -501,10 +501,10 @@
                   item {
                       name moutpoint 
                       visible "Define the mount point of slice"
  -                    type popup_menu[7}  # Dependencies to other slice types
  +                    type popup_menu[7]  # Dependencies to other slice types
                       verify              # Depencies to other slices
                   }               
  -
  +            }
               item {
                   name slice1
                   visible "Definition of slice1"
  @@ -515,10 +515,10 @@
                   item {
                       name moutpoint 
                       visible "Define the mount point of slice"
  -                    type popup_menu[7}  # Dependencies to other slice types
  +                    type popup_menu[7]  # Dependencies to other slice types
                       verify              #                
                   }
  -
  +            }
               item {
                   name slice2
                   visible "Definition of slice2"
  @@ -529,9 +529,10 @@
                   item {
                       name moutpoint 
                       visible "Define the mount point of slice"
  -                    type popup_menu[7}  # Dependencies to other slice types
  +                    type popup_menu[7]  # Dependencies to other slice types
                       verify              #           
                   }
  +            }
               item {
                   name slice3
                   visible "Definition of slice3"
  @@ -542,9 +543,10 @@
                   item {
                       name moutpoint 
                       visible "Define the mount point of slice"
  -                    type popup_menu[7}  # Dependencies to other slice types
  +                    type popup_menu[7]  # Dependencies to other slice types
                       verify              #           
                   }
  +            }
               item {
                   name slice4
                   visible "Definition of slice4"
  @@ -555,9 +557,10 @@
                   item {
                       name moutpoint 
                       visible "Define the mount point of slice"
  -                    type popup_menu[7}  # Dependencies to other slice types
  +                    type popup_menu[7]  # Dependencies to other slice types
                       verify              #           
                   }
  +            }
               item {
                   name slice5
                   visible "Definition of slice5"
  @@ -568,9 +571,10 @@
                   item {
                       name moutpoint 
                       visible "Define the mount point of slice"
  -                    type popup_menu[7}  # Dependencies to other slice types
  +                    type popup_menu[7]  # Dependencies to other slice types
                       verify              #           
                   }
  +            }
               item {
                   name slice6
                   visible "Definition of slice6"
  @@ -581,9 +585,10 @@
                   item {
                       name moutpoint 
                       visible "Define the mount point of slice"
  -                    type popup_menu[7}  # Dependencies to other slice types
  +                    type popup_menu[7]  # Dependencies to other slice types
                       verify              #           
                   }
  +            }
               item {
                   name slice7
                   visible "Definition of slice7"
  @@ -595,22 +600,11 @@
                   item {
                       name moutpoint 
                       visible "Define the mount point of slice"
  -                    type popup_menu[7}  # Dependencies to other slice types 
  +                    type popup_menu[7]  # Dependencies to other slice types 
                       verify              #                
                   }
  -
  -
  -
  -
  -
  -
  -             } 
  -
  -             
  -            }
  -            
  +            } 
           }
  -        
       }
       block {
           name pruefen
  @@ -629,5 +623,4 @@
               type button
           }
       }
  -
   

From ossp-cvs-owner@ossp.org  Thu Jul  4 08:40:46 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DE5E1763EC; Thu,  4 Jul 2002 08:40:45 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea-brainstorming
Message-Id: <20020704064045.DE5E1763EC@mail.ossp.org>
Date: Thu,  4 Jul 2002 08:40:45 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Jul-2002 08:40:45
  Branch: HEAD                             Handle: 2002070407404500

  Modified files:
    ossp-pkg/tabea          tabea-brainstorming

  Log:
    we are talking about implementing a Perl module AFAIK, so use already the Perl syntax

  Summary:
    Revision    Changes     Path
    1.6         +14 -14     ossp-pkg/tabea/tabea-brainstorming
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea-brainstorming
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 tabea-brainstorming
  --- ossp-pkg/tabea/tabea-brainstorming	4 Jul 2002 06:30:09 -0000	1.5
  +++ ossp-pkg/tabea/tabea-brainstorming	4 Jul 2002 06:40:45 -0000	1.6
  @@ -333,30 +333,30 @@
           }
       }
   
  -    API
  -    ---
  +    Perl API
  +    --------
   
  -    - handle = create(config, type, prefix)
  +    $handle = new Tabea::Config ($config, $type, $prefix);
   
  -        Reads config and initializes items with default values.
  -        Currently the only supported type is HTML2 which causes only
  +        Reads $config and initializes items with default values.
  +        Currently the only supported $type is "HTML2" which causes only
           tags described in RFC1866 to be used.  When a menu is rendered,
           some elements may require uniqe names in a scope wider than
           known by this module, i.e. when two configs are presented on one
           screen or along with other information, so every item is
  -        prefixed.
  +        prefixed with $prefix.
   
  -    - rc = load(handle, data)
  +    $rc = $handle->load($data);
   
  -        Reads data and sets the value of items.
  +        Reads $data and sets the value of items.
   
  -    - rc = save(handle, data)
  +    $rc = $handle->save($data);
   
           Writes items including their values.
   
  -    - rc = render(handle, buffer)
  +    $rc = $handle->render($buffer);
   
  -        Renders a menu writes it into the buffer. The contents of the
  +        Renders a menu and writes it into the buffer. The contents of the
           buffer can be merged into a larger output. Values are verified
           and invalid data is marked (FIXME how? red, reset to default,
           configurable behaviour, configurable error messages ...) The
  @@ -364,17 +364,17 @@
           back it must identify menu activity (i.e. by checking the
           prefix) and call render again and again or execute some action.
   
  -    - rc = import(handle, legacyfile)
  +    $rc = $handle->import($legacyfile);
   
           Reads a legacy (manually edited or previously exported) file and
           tries to match out values.
   
  -    - rc = export(handle, template, exportfile)
  +    $rc = $handle->export($template, $exportfile);
   
           Applies variable substitution for a template and writes the
           result out to exportfile.
   
  -    - rc = destroy(handle)
  +    $rc = $handle->destroy();
   
       Example: Generic RAID configuration
       -----------------------------------

From ossp-cvs-owner@ossp.org  Thu Jul  4 08:54:49 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 09810767D8; Thu,  4 Jul 2002 08:54:48 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea-brainstorming
Message-Id: <20020704065448.09810767D8@mail.ossp.org>
Date: Thu,  4 Jul 2002 08:54:48 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Jul-2002 08:54:48
  Branch: HEAD                             Handle: 2002070407544800

  Modified files:
    ossp-pkg/tabea          tabea-brainstorming

  Log:
    add my issues

  Summary:
    Revision    Changes     Path
    1.7         +13 -0      ossp-pkg/tabea/tabea-brainstorming
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea-brainstorming
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 tabea-brainstorming
  --- ossp-pkg/tabea/tabea-brainstorming	4 Jul 2002 06:40:45 -0000	1.6
  +++ ossp-pkg/tabea/tabea-brainstorming	4 Jul 2002 06:54:48 -0000	1.7
  @@ -376,6 +376,19 @@
   
       $rc = $handle->destroy();
   
  +    Issues:
  +    - [rse] $type should be not on constructor, but on render() IMHO
  +    - [rse] $prefix should be not on constructor, but on render() IMHO
  +    - [rse] if thinking about programming a CGI, it is not clear to me
  +            how one has to process the POST data and inject it again
  +            into the $handle object for re-rendering. I would expect
  +            the reverse of render() for loading in the POST results.
  +            I recommend: $rc = $handle->parse($type, $post_data);
  +                         $rc = $handle->render($type, $html_data);
  +            This way we get - load/save for internal/backend I/O
  +                            - parse/render for input-device-specific I/O
  +                            - import/export for output-device-specific I/O
  +
       Example: Generic RAID configuration
       -----------------------------------
   

From ossp-cvs-owner@ossp.org  Thu Jul  4 14:18:48 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 282BE767D8; Thu,  4 Jul 2002 14:18:48 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg cfg_buf.c cfg_buf.h
Message-Id: <20020704121848.282BE767D8@mail.ossp.org>
Date: Thu,  4 Jul 2002 14:18:48 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Jul-2002 14:18:48
  Branch: HEAD                             Handle: 2002070413184700

  Added files:
    ossp-pkg/cfg            cfg_buf.c cfg_buf.h

  Log:
    add a small object for dynamic buffer handling

  Summary:
    Revision    Changes     Path
    1.1         +131 -0     ossp-pkg/cfg/cfg_buf.c
    1.1         +52 -0      ossp-pkg/cfg/cfg_buf.h
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/cfg_buf.c
  ============================================================
  $ cvs update -p -r1.1 cfg_buf.c
  /*
  **  OSSP cfg - Configuration Parsing
  **  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP cfg, a configuration parsing
  **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRCFG, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  cfg_buf.c: auto-resizing buffer
  */
  
  #include <stdlib.h>
  #include <stdarg.h>
  #include <string.h>
  
  #include "cfg.h"
  #include "cfg_buf.h"
  #include "cfg_fmt.h"
  
  cfg_rc_t cfg_buf_create(cfg_buf_t **buf)
  {
      if (buf == NULL)
          return CFG_ERR_ARG;
      if ((*buf = (cfg_buf_t *)malloc(sizeof(cfg_buf_t))) == NULL)
          return CFG_ERR_SYS;
      (*buf)->buf_ptr  = NULL;
      (*buf)->buf_len  = 0;
      (*buf)->buf_size = 0;
      return CFG_OK;
  }
  
  cfg_rc_t cfg_buf_resize(cfg_buf_t *buf, int n)
  {
      char *cp;
  
      if (buf == NULL)
          return CFG_ERR_ARG;
      if (n == 0) {
          /* destroy buffer */
          if (buf->buf_ptr != NULL)
              free(buf->buf_ptr);
          buf->buf_ptr  = NULL;
          buf->buf_len  = 0;
          buf->buf_size = 0;
      }
      else {
          /* shrink or grow buffer */
          if (buf->buf_ptr == NULL) {
              if ((buf->buf_ptr = malloc(n)) == NULL)
                  return CFG_ERR_SYS;
              buf->buf_size = n;
              buf->buf_len  = 0;
          }
          else {
              if ((cp = realloc(buf->buf_ptr, buf->buf_size+n)) == NULL)
                  return CFG_ERR_SYS;
              buf->buf_ptr = cp;
              buf->buf_size += n;
              if (buf->buf_len > buf->buf_size) {
                  buf->buf_len = buf->buf_size;
                  *(buf->buf_ptr + buf->buf_len - 1) = '\0';
              }
          }
      }
      return CFG_OK;
  }
  
  cfg_rc_t cfg_buf_format(cfg_buf_t *buf, const char *fmt, ...)
  {
      cfg_rc_t rc;
      va_list ap;
      int n;
  
      va_start(ap, fmt);
      if (buf == NULL || fmt == NULL)
          return CFG_ERR_ARG;
      if ((n = cfg_fmt_vsprintf(NULL, -1, fmt, ap)) == -1)
          return CFG_ERR_FMT;
      if ((rc = cfg_buf_resize(buf, n+1)) != CFG_OK)
          return rc;
      if ((n = cfg_fmt_vsprintf(buf->buf_ptr + buf->buf_len, 
                                buf->buf_size - buf->buf_len, 
                                fmt, ap)) == -1)
          return CFG_ERR_FMT;
      buf->buf_len += n;
      va_end(ap);
      return CFG_OK;
  }
  
  cfg_rc_t cfg_buf_content(cfg_buf_t *buf, char **ptr, size_t *len, size_t *size)
  {
      if (buf == NULL)
          return CFG_ERR_ARG;
      if (ptr != NULL)
          *ptr  = buf->buf_ptr;
      if (len != NULL)
          *len  = buf->buf_len;
      if (size != NULL)
          *size = buf->buf_size;
      return CFG_OK;
  }
  
  cfg_rc_t cfg_buf_destroy(cfg_buf_t *buf)
  {
      if (buf == NULL)
          return CFG_ERR_ARG;
      if (buf->buf_ptr != NULL)
          free(buf->buf_ptr);
      free(buf);
      return CFG_OK;
  }
  
  Index: ossp-pkg/cfg/cfg_buf.h
  ============================================================
  $ cvs update -p -r1.1 cfg_buf.h
  /*
  **  OSSP cfg - Configuration Parsing
  **  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP cfg, a configuration parsing
  **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRCFG, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  cfg_buf.h: auto-resizing string buffer
  */
  
  #ifndef __CFG_BUF_H__
  #define __CFG_BUF_H__
  
  #include "cfg.h"
  
  struct cfg_buf_st;
  typedef struct cfg_buf_st cfg_buf_t;
  
  struct cfg_buf_st {
      char   *buf_ptr;
      size_t  buf_size;
      size_t  buf_len;
  };
  
  extern cfg_rc_t cfg_buf_create  (cfg_buf_t **buf);
  extern cfg_rc_t cfg_buf_resize  (cfg_buf_t  *buf, int n);
  extern cfg_rc_t cfg_buf_format  (cfg_buf_t  *buf, const char *fmt, ...);
  extern cfg_rc_t cfg_buf_content (cfg_buf_t  *buf, char **ptr, size_t *len, size_t *size);
  extern cfg_rc_t cfg_buf_destroy (cfg_buf_t  *buf);
  
  #endif /* __CFG_BUF_H__ */
  

From ossp-cvs-owner@ossp.org  Thu Jul  4 14:30:10 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B7B46767D8; Thu,  4 Jul 2002 14:30:09 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg cfg.h cfg_node.c cfg_node.h
Message-Id: <20020704123009.B7B46767D8@mail.ossp.org>
Date: Thu,  4 Jul 2002 14:30:09 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Jul-2002 14:30:09
  Branch: HEAD                             Handle: 2002070413300800

  Modified files:
    ossp-pkg/cfg            cfg.h cfg_node.c cfg_node.h

  Log:
    add a new cfg_node_goto() function

  Summary:
    Revision    Changes     Path
    1.3         +13 -2      ossp-pkg/cfg/cfg.h
    1.3         +46 -1      ossp-pkg/cfg/cfg_node.c
    1.3         +6  -1      ossp-pkg/cfg/cfg_node.h
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/cfg.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 cfg.h
  --- ossp-pkg/cfg/cfg.h	4 Jul 2002 06:16:13 -0000	1.2
  +++ ossp-pkg/cfg/cfg.h	4 Jul 2002 12:30:08 -0000	1.3
  @@ -42,7 +42,9 @@
       CFG_ERR_USE,
       CFG_ERR_INT,
       CFG_ERR_SYS,
  -    CFG_ERR_SYN
  +    CFG_ERR_SYN,
  +    CFG_ERR_FMT,
  +    CFG_ERR_GOT
   } cfg_rc_t;
   
   /* ============================================================ */
  @@ -59,7 +61,6 @@
   
   /* list of node types */
   typedef enum {
  -    CFG_NODE_TYPE_NN = 0,     /* node unknown */
       CFG_NODE_TYPE_SEQ,        /* node represents a sequence */
       CFG_NODE_TYPE_DIR,        /* node represents a directive */
       CFG_NODE_TYPE_TOK         /* node represents a token */
  @@ -75,6 +76,15 @@
       CFG_NODE_ATTR_DATA        /* pointer to the node annotation data */
   } cfg_node_attr_t;
   
  +/* list of node goto */
  +typedef enum {
  +    CFG_NODE_GOTO_PARENT,
  +    CFG_NODE_GOTO_LBROTH,
  +    CFG_NODE_GOTO_RBROTH,
  +    CFG_NODE_GOTO_CHILD1,
  +    CFG_NODE_GOTO_CHILDL
  +} cfg_node_goto_t;
  +
   /* list of node linking variants */
   typedef enum {
       CFG_NODE_LINK_PARENT,
  @@ -89,6 +99,7 @@
   cfg_rc_t   cfg_node_create  (cfg_node_t **node);
   cfg_rc_t   cfg_node_set     (cfg_node_t  *node, cfg_node_attr_t attr, ...);
   cfg_rc_t   cfg_node_get     (cfg_node_t  *node, cfg_node_attr_t attr, ...);
  +cfg_rc_t   cfg_node_goto    (cfg_node_t  *node, cfg_node_goto_t id, cfg_node_t **node2);
   cfg_rc_t   cfg_node_link    (cfg_node_t  *node, cfg_node_link_t id, cfg_node_t *node2);
   cfg_rc_t   cfg_node_unlink  (cfg_node_t  *node);
   cfg_rc_t   cfg_node_apply   (cfg_node_t  *node, void (*cb_fct)(void *, cfg_node_t *), void *cb_ctx);
  Index: ossp-pkg/cfg/cfg_node.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 cfg_node.c
  --- ossp-pkg/cfg/cfg_node.c	4 Jul 2002 06:16:13 -0000	1.2
  +++ ossp-pkg/cfg/cfg_node.c	4 Jul 2002 12:30:08 -0000	1.3
  @@ -41,10 +41,10 @@
   
       if ((n = malloc(sizeof(cfg_node_t))) == NULL)
           return CFG_ERR_SYS;
  -    n->type     = CFG_NODE_TYPE_NN;
       n->parent   = NULL;
       n->rbroth   = NULL;
       n->child1   = NULL;
  +    n->type     = CFG_NODE_TYPE_TOK;
       n->token    = NULL;
       cfg_data_init(&n->data);
       *node = n;
  @@ -131,6 +131,51 @@
               return CFG_ERR_ARG;
       }
       va_end(ap);
  +    return CFG_OK;
  +}
  +
  +cfg_rc_t cfg_node_goto(cfg_node_t *node, cfg_node_goto_t id, cfg_node_t **node2)
  +{
  +    cfg_node_t *n;
  +
  +    if (node == NULL || node2 == NULL)
  +        return CFG_ERR_ARG;
  +    *node2 = NULL;
  +    switch (id) {
  +        case CFG_NODE_GOTO_PARENT: {
  +            *node2 = node->parent;
  +            break;
  +        }
  +        case CFG_NODE_GOTO_LBROTH: {
  +            if ((n = node->parent) != NULL) {
  +                if ((n = n->child1) != NULL) {
  +                    while (n->rbroth != node && n->rbroth != NULL)
  +                        n = n->rbroth;
  +                    if (n->rbroth == node)
  +                        *node2 = n;
  +                }
  +            }
  +            break;
  +        }
  +        case CFG_NODE_GOTO_RBROTH: {
  +            *node2 = node->rbroth; 
  +            break;
  +        }
  +        case CFG_NODE_GOTO_CHILD1: { 
  +            *node2 = node->child1; 
  +            break;
  +        }
  +        case CFG_NODE_GOTO_CHILDL: {
  +            if ((n = node->child1) != NULL) {
  +                while (n->rbroth != NULL)
  +                    n = n->rbroth;
  +                *node2 = n;
  +            }
  +            break;
  +        }
  +    }
  +    if (*node2 == NULL)
  +        return CFG_ERR_GOT;
       return CFG_OK;
   }
   
  Index: ossp-pkg/cfg/cfg_node.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 cfg_node.h
  --- ossp-pkg/cfg/cfg_node.h	4 Jul 2002 06:16:13 -0000	1.2
  +++ ossp-pkg/cfg/cfg_node.h	4 Jul 2002 12:30:08 -0000	1.3
  @@ -35,11 +35,16 @@
   #include "cfg_data.h"
   
   struct cfg_node_st {
  -    cfg_node_type_t type;    /* type of node */
  +    /* node linkage */
       cfg_node_t     *parent;  /* pointer to parent node */
       cfg_node_t     *rbroth;  /* pointer to right brother node */
       cfg_node_t     *child1;  /* pointer to first child node */
  +
  +    /* node contents */
  +    cfg_node_type_t type;    /* type of node */
       char           *token;   /* pointer to corresponding token string */
  +
  +    /* node annotation */
       cfg_data_t      data;    /* annotation data */ 
   };
   

From ossp-cvs-owner@ossp.org  Thu Jul  4 14:30:47 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AB42176973; Thu,  4 Jul 2002 14:30:46 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg Makefile
Message-Id: <20020704123046.AB42176973@mail.ossp.org>
Date: Thu,  4 Jul 2002 14:30:46 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Jul-2002 14:30:46
  Branch: HEAD                             Handle: 2002070413304600

  Modified files:
    ossp-pkg/cfg            Makefile

  Log:
    activate cfg_buf stuff

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/cfg/Makefile
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/Makefile
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 Makefile
  --- ossp-pkg/cfg/Makefile	4 Jul 2002 06:16:13 -0000	1.2
  +++ ossp-pkg/cfg/Makefile	4 Jul 2002 12:30:46 -0000	1.3
  @@ -15,7 +15,7 @@
   FLEX   = flex-beta
   
   LIB    = libcfg.a
  -OBJ    = cfg_grid.o cfg_data.o cfg_node.o cfg_fmt.o cfg_syn.o cfg_syn_parse.o cfg_syn_scan.o cfg_util.o
  +OBJ    = cfg_buf.o cfg_grid.o cfg_data.o cfg_node.o cfg_fmt.o cfg_syn.o cfg_syn_parse.o cfg_syn_scan.o cfg_util.o
   TST    = cfg_test
   
   all: $(LIB) $(TST)

From ossp-cvs-owner@ossp.org  Thu Jul  4 16:46:33 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1765276961; Thu,  4 Jul 2002 16:46:33 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea-brainstorming
Message-Id: <20020704144633.1765276961@mail.ossp.org>
Date: Thu,  4 Jul 2002 16:46:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   04-Jul-2002 16:46:32
  Branch: HEAD                             Handle: 2002070415463200

  Modified files:
    ossp-pkg/tabea          tabea-brainstorming

  Log:
    fully agree

  Summary:
    Revision    Changes     Path
    1.8         +13 -0      ossp-pkg/tabea/tabea-brainstorming
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea-brainstorming
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 tabea-brainstorming
  --- ossp-pkg/tabea/tabea-brainstorming	4 Jul 2002 06:54:48 -0000	1.7
  +++ ossp-pkg/tabea/tabea-brainstorming	4 Jul 2002 14:46:32 -0000	1.8
  @@ -379,6 +379,12 @@
       Issues:
       - [rse] $type should be not on constructor, but on render() IMHO
       - [rse] $prefix should be not on constructor, but on render() IMHO
  +
  +    [thl] agree on both. That came into my mind first but i thought a
  +    switch between two types while the program is running will happen
  +    almost never and having it fixed during the lifecycle of the
  +    constructor might easy coding.
  +
       - [rse] if thinking about programming a CGI, it is not clear to me
               how one has to process the POST data and inject it again
               into the $handle object for re-rendering. I would expect
  @@ -388,6 +394,13 @@
               This way we get - load/save for internal/backend I/O
                               - parse/render for input-device-specific I/O
                               - import/export for output-device-specific I/O
  +
  +    [thl] agree. I was thinking about render() being a hybrid function.
  +    Note that the main program's "outer loop" will - must - preprocess
  +    POST data because it might contain information unrelated to render()
  +    or parse(). But i agree there are definitly two functionalities so
  +    it shouldn't hurt putting them in two separate functions. In fact,
  +    it might remove some magic.
   
       Example: Generic RAID configuration
       -----------------------------------

From ossp-cvs-owner@ossp.org  Thu Jul  4 16:51:22 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E70A976961; Thu,  4 Jul 2002 16:51:21 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg Makefile cfg_buf.c cfg_buf.h cfg_syn.c cfg_sy...
Message-Id: <20020704145121.E70A976961@mail.ossp.org>
Date: Thu,  4 Jul 2002 16:51:21 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Jul-2002 16:51:21
  Branch: HEAD                             Handle: 2002070415512100

  Added files:
    ossp-pkg/cfg            sample2.cfg
  Modified files:
    ossp-pkg/cfg            Makefile cfg_buf.c cfg_buf.h cfg_syn.c cfg_syn.h
                            cfg_syn_parse.y cfg_test.c sample.cfg

  Log:
    Flush today's work: the library is now able to parse a .cfg file into
    an internal node tree and export this again in textual .cfg file format
    (including indented blocks).

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/cfg/Makefile
    1.2         +11 -3      ossp-pkg/cfg/cfg_buf.c
    1.2         +1  -0      ossp-pkg/cfg/cfg_buf.h
    1.2         +127 -1     ossp-pkg/cfg/cfg_syn.c
    1.2         +2  -1      ossp-pkg/cfg/cfg_syn.h
    1.2         +2  -0      ossp-pkg/cfg/cfg_syn_parse.y
    1.2         +7  -64     ossp-pkg/cfg/cfg_test.c
    1.2         +1  -1      ossp-pkg/cfg/sample.cfg
    1.1         +11 -0      ossp-pkg/cfg/sample2.cfg
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/Makefile
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 Makefile
  --- ossp-pkg/cfg/Makefile	4 Jul 2002 12:30:46 -0000	1.3
  +++ ossp-pkg/cfg/Makefile	4 Jul 2002 14:51:21 -0000	1.4
  @@ -1,6 +1,6 @@
   
   CC     = /usr/opkg/bin/gcc
  -CFLAGS = -pipe -O2 -g -ggdb3 \
  +CFLAGS = -pipe -O0 -g -ggdb3 \
   		 -ansi -pedantic -Wall \
   		 -Wmultichar -Wno-system-headers -Wtraditional \
   		 -Wshadow -Wpointer-arith \
  Index: ossp-pkg/cfg/cfg_buf.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 cfg_buf.c
  --- ossp-pkg/cfg/cfg_buf.c	4 Jul 2002 12:18:47 -0000	1.1
  +++ ossp-pkg/cfg/cfg_buf.c	4 Jul 2002 14:51:21 -0000	1.2
  @@ -86,11 +86,20 @@
   
   cfg_rc_t cfg_buf_format(cfg_buf_t *buf, const char *fmt, ...)
   {
  -    cfg_rc_t rc;
       va_list ap;
  -    int n;
  +    cfg_rc_t rc;
   
       va_start(ap, fmt);
  +    rc = cfg_buf_vformat(buf, fmt, ap);
  +    va_end(ap);
  +    return rc;
  +}
  +
  +cfg_rc_t cfg_buf_vformat(cfg_buf_t *buf, const char *fmt, va_list ap)
  +{
  +    cfg_rc_t rc;
  +    int n;
  +
       if (buf == NULL || fmt == NULL)
           return CFG_ERR_ARG;
       if ((n = cfg_fmt_vsprintf(NULL, -1, fmt, ap)) == -1)
  @@ -102,7 +111,6 @@
                                 fmt, ap)) == -1)
           return CFG_ERR_FMT;
       buf->buf_len += n;
  -    va_end(ap);
       return CFG_OK;
   }
   
  Index: ossp-pkg/cfg/cfg_buf.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 cfg_buf.h
  --- ossp-pkg/cfg/cfg_buf.h	4 Jul 2002 12:18:47 -0000	1.1
  +++ ossp-pkg/cfg/cfg_buf.h	4 Jul 2002 14:51:21 -0000	1.2
  @@ -45,6 +45,7 @@
   extern cfg_rc_t cfg_buf_create  (cfg_buf_t **buf);
   extern cfg_rc_t cfg_buf_resize  (cfg_buf_t  *buf, int n);
   extern cfg_rc_t cfg_buf_format  (cfg_buf_t  *buf, const char *fmt, ...);
  +extern cfg_rc_t cfg_buf_vformat (cfg_buf_t  *buf, const char *fmt, va_list ap);
   extern cfg_rc_t cfg_buf_content (cfg_buf_t  *buf, char **ptr, size_t *len, size_t *size);
   extern cfg_rc_t cfg_buf_destroy (cfg_buf_t  *buf);
   
  Index: ossp-pkg/cfg/cfg_syn.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 cfg_syn.c
  --- ossp-pkg/cfg/cfg_syn.c	3 Jul 2002 13:25:34 -0000	1.1
  +++ ossp-pkg/cfg/cfg_syn.c	4 Jul 2002 14:51:21 -0000	1.2
  @@ -28,11 +28,14 @@
   **  cfg_syn.c: syntax parsing
   */
   
  +#include <stdio.h>
  +
   #include "cfg.h"
   #include "cfg_grid.h"
   #include "cfg_node.h"
   #include "cfg_fmt.h"
   #include "cfg_syn.h"
  +#include "cfg_buf.h"
   
   /* prototypes for Flex-generated scanner */
   extern int  cfg_syn_lex_init(void *);
  @@ -43,10 +46,18 @@
   extern int  cfg_syn_parse(void *);
   
   /* build a node tree according to a textual specification */
  -cfg_rc_t cfg_syn(cfg_t *cfg, cfg_node_t **node, char *err_buf, size_t err_len, const char *input)
  +cfg_rc_t cfg_syn_import(
  +    cfg_t *cfg, 
  +    cfg_node_t **node, 
  +    const char *input,
  +    char *err_buf, size_t err_len)
   {
       cfg_syn_ctx_t ctx;
       void *yyscan;
  +    
  +    /* argument sanity checking */
  +    if (node == NULL || input == NULL)
  +        return CFG_ERR_ARG;
   
       /* initialize scanner */
       cfg_syn_lex_init(&yyscan);
  @@ -145,5 +156,120 @@
       va_end(ap);
   
       return;
  +}
  +
  +typedef struct {
  +    cfg_buf_t *buf;
  +    int indent;
  +} export_t;
  +
  +static void export_format(export_t *ctx, char *fmt, ...)
  +{
  +    int i;
  +    char *cp;
  +    va_list ap;
  +    char *str;
  +
  +    va_start(ap, fmt);
  +    if ((str = cfg_fmt_vasprintf(fmt, ap)) == NULL)
  +        return;
  +    while ((cp = strchr(str, '\n')) != NULL) {
  +        cfg_buf_format(ctx->buf, "%.*s", cp-str+1, str);
  +        for (i = 0; i < ctx->indent; i++)
  +            cfg_buf_format(ctx->buf, "    ");
  +        str = cp+1;
  +    }
  +    if (str[0] != '\0')
  +        cfg_buf_format(ctx->buf, "%s", str);
  +    free(str);
  +    va_end(ap);
  +    return;
  +}
  +
  +static void export_indent(export_t *ctx, int n)
  +{
  +    if (n > 0) {
  +        while (n > 0) {
  +            n--;
  +            ctx->indent++;
  +            cfg_buf_format(ctx->buf, "    ");
  +        }
  +    }
  +    else {
  +        while (n < 0 && ctx->indent > 0) {
  +            n++;
  +            ctx->indent--;
  +            cfg_buf_resize(ctx->buf, -4);
  +        }
  +    }
  +}
  +
  +static void export_token(export_t *ctx, const char *token)
  +{
  +    if (strcspn(token, " {};\\") != strlen(token))
  +        export_format(ctx, "\"%s\"", token);
  +    else
  +        export_format(ctx, "%s", token);
  +    return;
  +}
  +
  +static void export_node(export_t *ctx, cfg_node_t *node)
  +{
  +    cfg_node_type_t type;
  +    cfg_node_t *node2;
  +    cfg_rc_t rc;
  +    char *token;
  +
  +    rc = cfg_node_get(node, CFG_NODE_ATTR_TYPE, &type);
  +    if (type == CFG_NODE_TYPE_SEQ) {
  +        export_format(ctx, "{\n");
  +        export_indent(ctx, 1);
  +        cfg_node_goto(node, CFG_NODE_GOTO_CHILD1, &node2);
  +        while (node2 != NULL) {
  +            export_node(ctx, node2);
  +            cfg_node_goto(node2, CFG_NODE_GOTO_RBROTH, &node2);
  +        }
  +        export_indent(ctx, -1);
  +        export_format(ctx, "}");
  +    }
  +    else if (type == CFG_NODE_TYPE_DIR) {
  +        cfg_node_goto(node, CFG_NODE_GOTO_CHILD1, &node2);
  +        while (node2 != NULL) {
  +            export_node(ctx, node2);
  +            cfg_node_goto(node2, CFG_NODE_GOTO_RBROTH, &node2);
  +            if (node2 != NULL)
  +                export_format(ctx, " ");
  +        }
  +        export_format(ctx, ";\n");
  +    }
  +    else if (type == CFG_NODE_TYPE_TOK) {
  +        cfg_node_get(node, CFG_NODE_ATTR_TOKEN, &token);
  +        if (token != NULL)
  +            export_token(ctx, token);
  +        else
  +            export_format(ctx, "<?>");
  +    }
  +    return;
  +}
  +
  +cfg_rc_t cfg_syn_export(
  +    cfg_t *cfg, 
  +    cfg_node_t *node, 
  +    char **output)
  +{
  +    cfg_buf_t *buf;
  +    cfg_rc_t rc;
  +    export_t ctx;
  +
  +    if (node == NULL || output == NULL)
  +        return CFG_ERR_ARG;
  +    if ((rc = cfg_buf_create(&buf)) != CFG_OK)
  +        return rc;
  +    ctx.buf    = buf;
  +    ctx.indent = 0;
  +    export_node(&ctx, node);
  +    cfg_buf_content(buf, output, NULL, NULL);
  +    cfg_buf_destroy(buf);
  +    return CFG_OK;
   }
   
  Index: ossp-pkg/cfg/cfg_syn.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 cfg_syn.h
  --- ossp-pkg/cfg/cfg_syn.h	3 Jul 2002 13:25:34 -0000	1.1
  +++ ossp-pkg/cfg/cfg_syn.h	4 Jul 2002 14:51:21 -0000	1.2
  @@ -65,7 +65,8 @@
   #define last_column  last
   
   /* internal API */
  -extern cfg_rc_t cfg_syn(cfg_t *cfg, cfg_node_t **node, char *err_buf, size_t err_len, const char *input);
  +extern cfg_rc_t cfg_syn_import (cfg_t *cfg, cfg_node_t **node, const char *input, char *err_buf, size_t err_len);
  +extern cfg_rc_t cfg_syn_export (cfg_t *cfg, cfg_node_t *node, char **output);
   
   /* error reporting function */
   extern void cfg_syn_error(cfg_syn_ctx_t *ctx, cfg_rc_t rv, YYLTYPE *loc, const char *fmt, ...);
  Index: ossp-pkg/cfg/cfg_syn_parse.y
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 cfg_syn_parse.y
  --- ossp-pkg/cfg/cfg_syn_parse.y	3 Jul 2002 13:25:34 -0000	1.1
  +++ ossp-pkg/cfg/cfg_syn_parse.y	4 Jul 2002 14:51:21 -0000	1.2
  @@ -108,6 +108,7 @@
           cfg_node_create(&n);
           cfg_node_set(n, CFG_NODE_ATTR_TYPE, CFG_NODE_TYPE_SEQ);
           cfg_node_set(n, CFG_NODE_ATTR_CHILD1, $1);
  +        $$ = n;
         }
       ;
   
  @@ -130,6 +131,7 @@
           cfg_node_create(&n);
           cfg_node_set(n, CFG_NODE_ATTR_TYPE, CFG_NODE_TYPE_DIR);
           cfg_node_set(n, CFG_NODE_ATTR_CHILD1, $1);
  +        $$ = n;
         }
       ;
   
  Index: ossp-pkg/cfg/cfg_test.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 cfg_test.c
  --- ossp-pkg/cfg/cfg_test.c	3 Jul 2002 13:25:34 -0000	1.1
  +++ ossp-pkg/cfg/cfg_test.c	4 Jul 2002 14:51:21 -0000	1.2
  @@ -7,61 +7,7 @@
   #include "cfg_util.h"
   #include "cfg_node.h"
   #include "cfg_syn.h"
  -
  -typedef struct {
  -    int line;
  -    int col;
  -    FILE *fp;
  -} cb_ctx_t;
  -
  -static void cb_out(cb_ctx_t *ctx, char *str)
  -{
  -    int i;
  -
  -    fprintf(stderr, "cb_out <%s>\n", str);
  -    fprintf(ctx->fp, "%s", str);
  -    for (i = 0; str[i] != '\0'; i++) {
  -        if (str[i] == '\n') {
  -            ctx->line++;
  -            ctx->col = 0;
  -        }
  -        else {
  -            ctx->col++;
  -        }
  -    }
  -}
  -
  -static void cb_fct(void *_ctx, cfg_node_t *node)
  -{
  -    cb_ctx_t *ctx = (cb_ctx_t *)_ctx;
  -    cfg_node_type_t type;
  -    cfg_node_t *node2;
  -    cfg_rc_t rc;
  -    char *token;
  -
  -    fprintf(stderr, "cb_fct enter\n");
  -    rc = cfg_node_get(node, CFG_NODE_ATTR_TYPE, &type);
  -    fprintf(stderr, "rc=%d type=%d\n", rc, type);
  -    if (type == CFG_NODE_TYPE_SEQ) {
  -        cb_out(ctx, " {\n");
  -    }
  -    else if (type == CFG_NODE_TYPE_DIR) {
  -        cb_out(ctx, ";\n");
  -        cfg_node_get(node, CFG_NODE_ATTR_RBROTH, &node2);
  -        if (node2 == NULL)
  -            cb_out(ctx, "};\n");
  -    }
  -    else if (type == CFG_NODE_TYPE_TOK) {
  -        cfg_node_get(node, CFG_NODE_ATTR_TOKEN, &token);
  -        if (token != NULL) {
  -            cb_out(ctx, token);
  -            cfg_node_get(node, CFG_NODE_ATTR_RBROTH, &node2);
  -            if (node2 != NULL)
  -                cb_out(ctx, " ");
  -        }
  -    }
  -    fprintf(stderr, "cb_fct leave\n");
  -}
  +#include "cfg_buf.h"
   
   int main(int argc, char *argv[]) 
   {
  @@ -79,18 +25,15 @@
           fprintf(stderr, "ERROR: reading file \"%s\"\n", argv[1]);
           exit(1);
       }
  -    if ((rc = cfg_syn(NULL, &node, err_buf, sizeof(err_buf), buf_ptr)) != CFG_OK) {
  +    rc = cfg_syn_import(NULL, &node, buf_ptr, err_buf, sizeof(err_buf));
  +    free(buf_ptr);
  +
  +    if (rc != CFG_OK)
           fprintf(stderr, "ERROR: %s\n", err_buf);
  -    }
       else {
  -        cb_ctx_t ctx;
  -
  -        ctx.line = 0;
  -        ctx.col = 0;
  -        ctx.fp = stdout;
  -        cfg_node_apply(node, cb_fct, &ctx);
  +        cfg_syn_export(NULL, node, &buf_ptr);
  +        fprintf(stdout, "%s\n", buf_ptr);
       }
  -    free(buf_ptr);
   
       return 0;
   }
  Index: ossp-pkg/cfg/sample.cfg
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 sample.cfg
  --- ossp-pkg/cfg/sample.cfg	3 Jul 2002 13:25:34 -0000	1.1
  +++ ossp-pkg/cfg/sample.cfg	4 Jul 2002 14:51:21 -0000	1.2
  @@ -5,7 +5,7 @@
   /* now comes 
      a C/C++ style block comment ** quux */
   
  -foo -b --bar -qX --quux=X baz
  +foo bar -b --bar -qX --quux=X baz;
   rootdir /;  // C++ style EOL comment 
   tmpdir /tmp;
   
  Index: ossp-pkg/cfg/sample2.cfg
  ============================================================
  $ cvs update -p -r1.1 sample2.cfg
  
  foo;
  bar1 "bar2 bar2b";
  quux1 { 
      quux1a; 
      quux1b;
  } quux2 {
      quux2a;
      quux2b;
  };
  

From ossp-cvs-owner@ossp.org  Thu Jul  4 17:42:38 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 73C35767D8; Thu,  4 Jul 2002 17:42:38 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea-brainstorming
Message-Id: <20020704154238.73C35767D8@mail.ossp.org>
Date: Thu,  4 Jul 2002 17:42:38 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   04-Jul-2002 17:42:38
  Branch: HEAD                             Handle: 2002070416423800

  Modified files:
    ossp-pkg/tabea          tabea-brainstorming

  Log:
    Comments to API

  Summary:
    Revision    Changes     Path
    1.9         +8  -0      ossp-pkg/tabea/tabea-brainstorming
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea-brainstorming
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 tabea-brainstorming
  --- ossp-pkg/tabea/tabea-brainstorming	4 Jul 2002 14:46:32 -0000	1.8
  +++ ossp-pkg/tabea/tabea-brainstorming	4 Jul 2002 15:42:38 -0000	1.9
  @@ -378,7 +378,11 @@
   
       Issues:
       - [rse] $type should be not on constructor, but on render() IMHO
  +    - [ps]  Agree. I think it is better to have the data in an internal 
  +            format and reformat the data at the time when the output is 
  +            produced.
       - [rse] $prefix should be not on constructor, but on render() IMHO
  +    - [ps]  Perhaps I need $prefix for internal data saving.
   
       [thl] agree on both. That came into my mind first but i thought a
       switch between two types while the program is running will happen
  @@ -391,6 +395,10 @@
               the reverse of render() for loading in the POST results.
               I recommend: $rc = $handle->parse($type, $post_data);
                            $rc = $handle->render($type, $html_data);
  +
  +     - [ps] We must get the value POST data for updating the internal data
  +            The idea of having the functions parse and render sounds good.
  +
               This way we get - load/save for internal/backend I/O
                               - parse/render for input-device-specific I/O
                               - import/export for output-device-specific I/O

From ossp-cvs-owner@ossp.org  Thu Jul  4 18:49:59 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D064476800; Thu,  4 Jul 2002 18:49:58 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.h rc_private.h rc_script.c
Message-Id: <20020704164958.D064476800@mail.ossp.org>
Date: Thu,  4 Jul 2002 18:49:58 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   04-Jul-2002 18:49:58
  Branch: HEAD                             Handle: 2002070417495800

  Modified files:
    ossp-pkg/rc             rc.h rc_private.h rc_script.c

  Log:
    Implemented limited pattern matching of section labels.

  Summary:
    Revision    Changes     Path
    1.35        +1  -0      ossp-pkg/rc/rc.h
    1.18        +4  -2      ossp-pkg/rc/rc_private.h
    1.5         +58 -20     ossp-pkg/rc/rc_script.c
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.h
  ============================================================
  $ cvs diff -u -r1.34 -r1.35 rc.h
  --- ossp-pkg/rc/rc.h	1 Jul 2002 15:03:32 -0000	1.34
  +++ ossp-pkg/rc/rc.h	4 Jul 2002 16:49:58 -0000	1.35
  @@ -132,6 +132,7 @@
   rc_return_t vectorDel(char **);
   
   /* Other function prototypes */
  +void rcError(ex_t);
   
   /*rc_result_t rc_Err              (void);
   rc_result_t rc_Warn             (void);
  Index: ossp-pkg/rc/rc_private.h
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 rc_private.h
  --- ossp-pkg/rc/rc_private.h	28 Jun 2002 14:20:23 -0000	1.17
  +++ ossp-pkg/rc/rc_private.h	4 Jul 2002 16:49:58 -0000	1.18
  @@ -47,10 +47,12 @@
   
   
   /* FIXME Tie to shtool generation */
  -#define RC_VERSION    "77.77"
  +#define RC_VERSION   "77.77"
   
  +#define RC_SEC_SUB         1
  +#define RC_GOOD_MEASURE    8
   #define RC_READ_BUFSIZE 1024
  -#define RC_STR_ID "OSSP rc"                         /* APPID for OSSP rc */
  +#define RC_STR_ID  "OSSP rc"                        /* APPID for OSSP rc */
   #define RC_UID_ID 0xf8a1845c55e6449481176f6e9cea34b /* UUID for OSSP rc  */
   
   /* Intentional no operation */
  Index: ossp-pkg/rc/rc_script.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 rc_script.c
  --- ossp-pkg/rc/rc_script.c	2 Jul 2002 18:03:17 -0000	1.4
  +++ ossp-pkg/rc/rc_script.c	4 Jul 2002 16:49:58 -0000	1.5
  @@ -103,12 +103,17 @@
   char *scriptSection(rc_script_t *pScript, const char *kszSecname)
   {
       char *szTempout    = NULL;
  -    char *szTmpsec     = NULL;
  +    char *piLabstart   = NULL;
  +    char *piLabend     = NULL;
       char *piStart      = NULL;
       char *piEnd        = NULL;
       int nOffset        = 0;
  +    int nFound         = 0;
  +    int nVecsize       = 0;
  +    int nSubstrings    = 0;
  +    int *pnVec         = NULL;
       const int kiRegopt = 0;
  -    const char *szErr  = NULL;
  +    const char *kszErr = NULL;
   
       pcre *pRegex       = NULL;  /* Perl Compatible Regular Expression */
       pcre_extra *pExtra = NULL;  /* Used for studying an expression    */
  @@ -119,29 +124,61 @@
       if (!kszSecname)    /* If we get a NULL section label, give a NULL result */
           return (NULL);  /* This might be useful in some loop constructs */
   
  -    if ((pRegex = pcre_compile(configGetval(RC_DEF_VAL), kiRegopt, &szErr, &nOffset, NULL)) == NULL) {
  +    if ((pRegex = pcre_compile(configGetval(RC_DEF_VAL), kiRegopt, &kszErr, &nOffset, NULL)) == NULL) {
           RC_THROW(RC_ERR_SYS);
       }
   
  -    szTmpsec = malloc(strlen(kszSecname) + sizeof(char));
  -    strcpy(szTmpsec, "%");
  -    strcat(szTmpsec, kszSecname);
  -
  -    piStart = strstr(*pScript, szTmpsec);            /* Find start of section */
  -    if (!piStart)                                    /* Short circuit if the  */
  -        return(NULL);                                /* section was not found */
  -
  -    piStart = strstr(piStart, "\n") + sizeof(char);  /* Wrap to next line     */
  -    piEnd   = strstr(piStart + sizeof(char), "%"); /* FIXME: Remove hardcoded */
  -    if (piEnd) {
  -        szTempout = malloc(piEnd - piStart + sizeof(char));
  -        strncpy(szTempout, piStart, piEnd - piStart);
  -        *(szTempout + (piEnd - piStart)) = NULL; /* Terminate outgoing string */
  +    pExtra = pcre_study(pRegex, 0, &kszErr); /* Study the FSM */
  +    if (kszErr) {   /* Variable contains a string reference in case of errors */
  +        free(pRegex);
  +        RC_THROW(RC_ERR_SYS);
       }
  -    else /* We are operating on the last section of the file */
  -        szTempout = strdup(piStart); /* FIXME: Can we assume '\0' at EOF? */
   
  -    return(szTempout);
  +    if (pcre_fullinfo(pRegex, pExtra, PCRE_INFO_CAPTURECOUNT, &nSubstrings))
  +        RC_THROW(RC_ERR_SYS);
  +
  +    /* Use multiples of six, because PCRE needs 2x multiples of three */
  +    nVecsize = 6 * (nSubstrings > 0 ? nSubstrings : 1);
  +    nVecsize *= RC_GOOD_MEASURE; /* Add redundancy factor for error margin */
  +
  +    /* Filter the rc file for the section label, do it here the first time */
  +    pnVec = calloc(nVecsize, sizeof(int));  /* 2/3 vec 1/3 scrapinfo */
  +    nFound = pcre_exec(pRegex, pExtra, *pScript,\
  +        strlen(*pScript), 0, 0, pnVec, nVecsize);
  +
  +    piLabend = *pScript;    /* Start piLabstart pointing to the script object */
  +    while (nFound > 1) {    /* Loop as long as we have more sections */
  +        piLabstart = piLabend + *(pnVec + 2 * RC_SEC_SUB);  /* Seclabel start */
  +        piLabend += *(pnVec + 1);   /* Find end of section label */
  +
  +        /* Test the substring. If it matches our label, generate a subscript */
  +        if (!strncmp(piLabstart , kszSecname, sizeof(kszSecname))) {
  +            piStart = strstr(piLabend, "\n") + sizeof(char); /* Wrap to start */
  +
  +            /* See if more sections follow or if this is the last one */
  +            if (pcre_exec(pRegex, pExtra, piLabend, strlen(*pScript), 0, 0, pnVec, nVecsize) > 0)
  +                piEnd = piLabend + *pnVec;
  +            else /* Doch, last section in file */
  +                piEnd = piLabend + strlen(*pScript);
  +
  +            szTempout = malloc(piEnd - piStart + sizeof(char));
  +            strncpy(szTempout, piStart, piEnd - piStart);
  +            *(szTempout + (piEnd - piStart)) = NULL;    /* Terminate outgoing */
  +            return(szTempout);  /* Section found, so return the text */
  +        }
  +
  +        /* Get ready for the next round of matching */
  +        nFound = pcre_exec(pRegex, pExtra, piLabend,\
  +            strlen(piLabend), 0, 0, pnVec, nVecsize);
  +    }
  +
  +    /* Under correct conditions, the section subscript was returned in loop */
  +    if (nFound == 1)                        /* User gave no klammern */
  +        RC_THROW(RC_ERR_USE);               /* so complain about it */
  +    else if (nFound < PCRE_ERROR_NOMATCH)   /* Generic problem so */
  +        RC_THROW(RC_ERR_SYS);               /* return an error */
  +
  +    return(NULL);                           /* Probably not found */
   }
   
   /************************************************
  @@ -173,3 +210,4 @@
   
       return(RC_THROW(RC_OK));
   }
  +

From ossp-cvs-owner@ossp.org  Thu Jul  4 18:51:49 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AD10076800; Thu,  4 Jul 2002 18:51:49 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc_test.sh
Message-Id: <20020704165149.AD10076800@mail.ossp.org>
Date: Thu,  4 Jul 2002 18:51:49 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   04-Jul-2002 18:51:49
  Branch: HEAD                             Handle: 2002070417514900

  Modified files:
    ossp-pkg/rc             rc_test.sh

  Log:
    Added pattern usage to the test script.

  Summary:
    Revision    Changes     Path
    1.15        +41 -32     ossp-pkg/rc/rc_test.sh
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc_test.sh
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 rc_test.sh
  --- ossp-pkg/rc/rc_test.sh	1 Jul 2002 15:03:33 -0000	1.14
  +++ ossp-pkg/rc/rc_test.sh	4 Jul 2002 16:51:49 -0000	1.15
  @@ -36,18 +36,18 @@
   #./rc -derv -L /u/ms/ossp/rc/rcdings/rcfiles/rc.d/rc.%{RCFILE:s/^all$/*/} -c /u/ms/ossp/rc/rcdings/rc.conf -f /u/ms/ossp/rc/rcfunc/rc.func -t /tmp openssh stop sleep=4 start daily minsize=2097152
   
   # Test some long options, should fail for false combination usage
  -echo; echo "./rc --verbose --silent uucp stop sleep=6 start"
  -./rc --verbose --silent uucp stop sleep=6 start
  -echo; echo "./rc --query myvar --silent zebra bing bang"
  -./rc --query myvar --silent zebra bing bang
  -echo; echo "./rc --conf /sfw/rc.conf --locate /u/ms/ossp/rc/rcdings/rcfiles/ --query this barf test"
  -./rc --conf /sfw/rc.conf --locate /u/ms/ossp/rc/rcdings/rcfiles/ --query this barf test
  +echo; echo "./rc --verbose --silent --ParseSectionDef \"%(.+)\" uucp stop sleep=6 start"
  +./rc --verbose --silent --ParseSectionDef "%(.+)" uucp stop sleep=6 start
  +echo; echo "./rc --query myvar --silent --ParseSectionDef \"%(.+)\" zebra bing bang"
  +./rc --query myvar --silent --ParseSectionDef "%(.+)" zebra bing bang
  +echo; echo "./rc --conf /sfw/rc.conf --ParseSectionDef \"%(.+)\" --locate /u/ms/ossp/rc/rcdings/rcfiles/ --query this barf test"
  +./rc --conf /sfw/rc.conf --ParseSectionDef "%(.+)" --locate /u/ms/ossp/rc/rcdings/rcfiles/ --query this barf test
   
   # Test minimal set of long options, should succeed
  -echo; echo "./rc --debug --version rsyncd nothing matters but the version"
  -./rc --debug --version rsyncd nothing matters but the version
  -echo; echo "./rc --conf /sfw/rc.conf --locate /cw/etc/rc.d:/u/ms/ossp/rc/rcdings/rcfiles:/etc/rc --query all barf test"
  -./rc --conf /sfw/rc.conf --locate /cw/etc/rc.d:/u/ms/ossp/rc/rcdings/rcfiles:/etc/rc --query all barf test
  +echo; echo "./rc --debug --version --ParseSectionDef \"%(.+)\" rsyncd nothing matters but the version"
  +./rc --debug --version --ParseSectionDef "%" rsyncd nothing matters but the version
  +echo; echo "./rc --conf /sfw/rc.conf --ParseSectionDef \"%(.+)\" --locate /cw/etc/rc.d:/u/ms/ossp/rc/rcdings/rcfiles:/etc/rc --query all barf test"
  +./rc --conf /sfw/rc.conf --ParseSectionDef "%(.+)" --locate /cw/etc/rc.d:/u/ms/ossp/rc/rcdings/rcfiles:/etc/rc --query all barf test
   
   # FIXME these cases are not handled yet by our configuration FIXME #
   #echo; echo "./rc --debug --version"
  @@ -62,33 +62,42 @@
   #./rc --conf /sfw/rc.conf --tmp /sfw/RPM/TMP --debug --labels rsyncd
   # FIXME these cases are not handled yet by our configuration FIXME #
   
  -echo; echo "./rc --func /u/ms/ossp/rc/rcfunc/rc.func --print --verbose openssh stop sleep=4 start"
  -./rc --func /u/ms/ossp/rc/rcfunc/rc.func --print --verbose openssh stop sleep=4 start
  +echo; echo "./rc --func /u/ms/ossp/rc/rcfunc/rc.func --print --ParseSectionDef \"%(.+)\" --verbose openssh stop sleep=4 start"
  +./rc --func /u/ms/ossp/rc/rcfunc/rc.func --print --ParseSectionDef "%(.+)" --verbose openssh stop sleep=4 start
   echo; echo "./rc --func /u/ms/ossp/rc/rcfunc/rc.func --info --eval uucp restart"
   ./rc --func /u/ms/ossp/rc/rcfunc/rc.func --info --eval uucp restart
  -echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func --tmp /tmp --print uucp start"
  -./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func --tmp /tmp --print uucp start
  -echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func --tmp /tmp --debug --print ntp sync"
  -./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func --tmp /tmp --debug --print ntp sync
  -echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func --tmp /tmp --debug --silent --print ralf feed suppe"
  -./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func --tmp /tmp --debug --silent --print ralf feed suppe
  -echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /u/ms/ossp/rc/rcfiles/ --tmp /tmp --silent --print samba search finish destroy"
  -./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /u/ms/ossp/rc/rcfiles/ --tmp /tmp --silent --print samba search finish destroy
  -
  -echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /u/ms/ossp/rc/rcfiles/ --tmp /tmp --silent --print all feed suppe"
  -./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /u/ms/ossp/rc/rcfiles/ --tmp /tmp --silent --print all go feed suppe
  -
  -echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --tmp /tmp --silent --debug --print all config barf gag"
  -./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --tmp /tmp --silent --debug --print all config barf gag
  +echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func --tmp /tmp --ParseSectionDef \"%(.+)\" --print uucp start"
  +./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func --tmp /tmp --ParseSectionDef "%(.+)" --print uucp start
  +echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func --tmp /tmp --debug --ParseSectionDef \"%(.+)\" --print ntp sync"
  +./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func --tmp /tmp --debug --ParseSectionDef "%(.+)" --print ntp sync
  +echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func --tmp /tmp --debug --silent --ParseSectionDef \"%(.+)\" --print ralf feed suppe"
  +./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func --tmp /tmp --debug --silent --ParseSectionDef "%(.+)" --print ralf feed suppe
  +echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /u/ms/ossp/rc/rcfiles/ --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --print samba search finish destroy"
  +./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /u/ms/ossp/rc/rcfiles/ --ParseSectionDef "%(.+)" --tmp /tmp --silent --print samba search finish destroy
  +
  +echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /u/ms/ossp/rc/rcfiles/ --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --print all feed suppe"
  +./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /u/ms/ossp/rc/rcfiles/ --ParseSectionDef "%(.+)" --tmp /tmp --silent --print all feed suppe
  +
  +echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --debug --print all config barf gag"
  +./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --debug --print all config barf gag
  +
  +echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --debug --eval all config start"
  +./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --debug --eval all config start
  +
  +echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --debug --exec all config start"
  +./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --debug --exec all config start
  +
  +echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --debug --print pam info"
  +./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --debug --print pam info
   
  -echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --tmp /tmp --silent --debug --eval all config start"
  -./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --tmp /tmp --silent --debug --eval all config start
  +echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --debug --print apache config start"
  +./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --debug --print apache config start
   
  -echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --tmp /tmp --silent --debug --exec all config start"
  -./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --tmp /tmp --silent --debug --exec all config start
  +echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /u/ms/ossp/rc/rcfiles/ --ParseSectionDef \"<(.+)>\" --tmp /tmp --silent --debug --print all config start"
  +./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /u/ms/ossp/rc/rcfiles/ --ParseSectionDef "<(.+)>" --tmp /tmp --silent --debug --print all config start
   
  -echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --tmp /tmp --silent --debug --print pam info"
  -./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --tmp /tmp --silent --debug --print pam info
  +echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /u/ms/ossp/rc/rcfiles/ --ParseSectionDef \"<(.+)>\" --tmp /tmp --silent --debug --print pam info"
  +./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /u/ms/ossp/rc/rcfiles/ --ParseSectionDef "<(.+)>" --tmp /tmp --silent --debug --print pam info
   
   # Next milestone
   #RequireOwner

From ossp-cvs-owner@ossp.org  Thu Jul  4 18:56:22 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 58D0B76800; Thu,  4 Jul 2002 18:56:22 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc 00TODO
Message-Id: <20020704165622.58D0B76800@mail.ossp.org>
Date: Thu,  4 Jul 2002 18:56:22 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   04-Jul-2002 18:56:22
  Branch: HEAD                             Handle: 2002070417562100

  Modified files:
    ossp-pkg/rc             00TODO

  Log:
    Remember pattern matching problem.

  Summary:
    Revision    Changes     Path
    1.29        +1  -0      ossp-pkg/rc/00TODO
  ____________________________________________________________________________

  Index: ossp-pkg/rc/00TODO
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 00TODO
  --- ossp-pkg/rc/00TODO	28 Jun 2002 18:23:10 -0000	1.28
  +++ ossp-pkg/rc/00TODO	4 Jul 2002 16:56:21 -0000	1.29
  @@ -13,6 +13,7 @@
   Known bugs
     Not multithreaded (too many potentials for race conditions or overwrite)
     Not efficient (reads whole files when only parts are needed...)
  +  What's going on with ^ in patterns? Something is broken.
   
   Document
     Refs, pri, user, group, ci, go only in normal (not special) sections.

From ossp-cvs-owner@ossp.org  Fri Jul  5 09:26:52 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 78CF5767D8; Fri,  5 Jul 2002 09:26:52 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea/TABEA tabea.pod
Message-Id: <20020705072652.78CF5767D8@mail.ossp.org>
Date: Fri,  5 Jul 2002 09:26:52 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   05-Jul-2002 09:26:52
  Branch: HEAD                             Handle: 2002070508265200

  Added files:
    ossp-pkg/tabea/TABEA    tabea.pod

  Log:
    Appended TABEA pod file

  Summary:
    Revision    Changes     Path
    1.1         +29 -0      ossp-pkg/tabea/TABEA/tabea.pod
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/TABEA/tabea.pod
  ============================================================
  $ cvs update -p -r1.1 tabea.pod
  ##
  ##  tabea.pod: perl module manual page
  ##
  =pod
  
  =head1 NAME
  
  TABEA - The Perl Module
  
  
  =head1 DESCRIPTION
  
  
  =item FUNCTIONS
  
  
  TABEA::config 
  TABEA::load
  TABEA::save
  TABEA::parse
  TABEA::render
  TABEA::import
  TABEA::export
  
  
  =head1 PARAMETERS
  
  =cut
  

From ossp-cvs-owner@ossp.org  Fri Jul  5 13:16:22 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CD355767D8; Fri,  5 Jul 2002 13:16:21 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc_test.sh ossp-pkg/rc/rc_test rc.ntp rc.opens...
Message-Id: <20020705111621.CD355767D8@mail.ossp.org>
Date: Fri,  5 Jul 2002 13:16:21 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   05-Jul-2002 13:16:21
  Branch: HEAD                             Handle: 2002070512162001

  Added files:
    ossp-pkg/rc/rc_test     rc.ntp rc.openssh rc.pam rc.ralf rc.rsyncd
                            rc.samba rc.uucp rc.zebra rcfuncs
  Modified files:
    ossp-pkg/rc             rc_test.sh

  Log:
    Make the test suite at least generic enough so that OSSP rc can be tested on
    any machine with an OpenPKG repository.

  Summary:
    Revision    Changes     Path
    1.16        +43 -43     ossp-pkg/rc/rc_test.sh
    1.1         +20 -0      ossp-pkg/rc/rc_test/rc.ntp
    1.1         +18 -0      ossp-pkg/rc/rc_test/rc.openssh
    1.1         +20 -0      ossp-pkg/rc/rc_test/rc.pam
    1.1         +13 -0      ossp-pkg/rc/rc_test/rc.ralf
    1.1         +10 -0      ossp-pkg/rc/rc_test/rc.rsyncd
    1.1         +15 -0      ossp-pkg/rc/rc_test/rc.samba
    1.1         +12 -0      ossp-pkg/rc/rc_test/rc.uucp
    1.1         +14 -0      ossp-pkg/rc/rc_test/rc.zebra
    1.1         +15 -0      ossp-pkg/rc/rc_test/rcfuncs
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc_test.sh
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 rc_test.sh
  --- ossp-pkg/rc/rc_test.sh	4 Jul 2002 16:51:49 -0000	1.15
  +++ ossp-pkg/rc/rc_test.sh	5 Jul 2002 11:16:20 -0000	1.16
  @@ -28,26 +28,26 @@
   #  test_rc.sh: Run-command processor test script
   
   # Test short options, should fail for false combination usage
  -#echo "./rc -dvef rcfunc/rc.func -hilpsrvxLcqt samba start sleep=2 restart"
  -#./rc -dVef rcfunc/rc.func -hilpsrvxLcqt samba start sleep=2 restart
  +#echo "./rc -dvef ./rc_test/rcfuncs -hilpsrvxLcqt samba start sleep=2 restart"
  +#./rc -dVef ./rc_test/rcfuncs -hilpsrvxLcqt samba start sleep=2 restart
   
   # Test short options, should succeed
  -#echo; echo "./rc -derv -L /u/ms/ossp/rc/rcdings/rcfiles/rc.%{RCFILE:s/^all$/*/} -c /u/ms/ossp/rc/rcdings/rc.conf -f /u/ms/ossp/rc/rcfunc/rc.func -t /tmp openssh stop sleep=4 start daily minsize=2097152"
  -#./rc -derv -L /u/ms/ossp/rc/rcdings/rcfiles/rc.d/rc.%{RCFILE:s/^all$/*/} -c /u/ms/ossp/rc/rcdings/rc.conf -f /u/ms/ossp/rc/rcfunc/rc.func -t /tmp openssh stop sleep=4 start daily minsize=2097152
  +#echo; echo "./rc -derv -L ./rc_test/rc.%{RCFILE:s/^all$/*/} -c ./rc.conf -f ./rc_test/rcfuncs -t /tmp openssh stop sleep=4 start daily minsize=2097152"
  +#./rc -derv -L ./rc_test/rc.d/rc.%{RCFILE:s/^all$/*/} -c ./rc.conf -f ./rc_test/rcfuncs -t /tmp openssh stop sleep=4 start daily minsize=2097152
   
   # Test some long options, should fail for false combination usage
   echo; echo "./rc --verbose --silent --ParseSectionDef \"%(.+)\" uucp stop sleep=6 start"
   ./rc --verbose --silent --ParseSectionDef "%(.+)" uucp stop sleep=6 start
   echo; echo "./rc --query myvar --silent --ParseSectionDef \"%(.+)\" zebra bing bang"
   ./rc --query myvar --silent --ParseSectionDef "%(.+)" zebra bing bang
  -echo; echo "./rc --conf /sfw/rc.conf --ParseSectionDef \"%(.+)\" --locate /u/ms/ossp/rc/rcdings/rcfiles/ --query this barf test"
  -./rc --conf /sfw/rc.conf --ParseSectionDef "%(.+)" --locate /u/ms/ossp/rc/rcdings/rcfiles/ --query this barf test
  +echo; echo "./rc --conf /usr/opkg/etc/rc.conf --ParseSectionDef \"%(.+)\" --locate ./rc_test/ --query this barf test"
  +./rc --conf /usr/opkg/etc/rc.conf --ParseSectionDef "%(.+)" --locate ./rc_test/ --query this barf test
   
   # Test minimal set of long options, should succeed
   echo; echo "./rc --debug --version --ParseSectionDef \"%(.+)\" rsyncd nothing matters but the version"
   ./rc --debug --version --ParseSectionDef "%" rsyncd nothing matters but the version
  -echo; echo "./rc --conf /sfw/rc.conf --ParseSectionDef \"%(.+)\" --locate /cw/etc/rc.d:/u/ms/ossp/rc/rcdings/rcfiles:/etc/rc --query all barf test"
  -./rc --conf /sfw/rc.conf --ParseSectionDef "%(.+)" --locate /cw/etc/rc.d:/u/ms/ossp/rc/rcdings/rcfiles:/etc/rc --query all barf test
  +echo; echo "./rc --conf /usr/opkg/etc/rc.conf --ParseSectionDef \"%(.+)\" --locate /usr/opkg/etc/rc.d:./rc_test:/etc/rc --query all barf test"
  +./rc --conf /usr/opkg/etc/rc.conf --ParseSectionDef "%(.+)" --locate /usr/opkg/etc/rc.d:./rc_test:/etc/rc --query all barf test
   
   # FIXME these cases are not handled yet by our configuration FIXME #
   #echo; echo "./rc --debug --version"
  @@ -58,46 +58,46 @@
   #./rc --debug --info --verbose
   #echo; echo "./rc --conf /etc/rc.conf --debug --info --raw"
   #./rc --conf /etc/rc.conf --debug --info --raw
  -#echo; echo "./rc --conf /sfw/rc.conf --tmp /sfw/RPM/TMP --debug --labels rsyncd"
  -#./rc --conf /sfw/rc.conf --tmp /sfw/RPM/TMP --debug --labels rsyncd
  +#echo; echo "./rc --conf /usr/opkg/etc/rc.conf --tmp /tmp --debug --labels rsyncd"
  +#./rc --conf /usr/opkg/etc/rc.conf --tmp /tmp --debug --labels rsyncd
   # FIXME these cases are not handled yet by our configuration FIXME #
   
  -echo; echo "./rc --func /u/ms/ossp/rc/rcfunc/rc.func --print --ParseSectionDef \"%(.+)\" --verbose openssh stop sleep=4 start"
  -./rc --func /u/ms/ossp/rc/rcfunc/rc.func --print --ParseSectionDef "%(.+)" --verbose openssh stop sleep=4 start
  -echo; echo "./rc --func /u/ms/ossp/rc/rcfunc/rc.func --info --eval uucp restart"
  -./rc --func /u/ms/ossp/rc/rcfunc/rc.func --info --eval uucp restart
  -echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func --tmp /tmp --ParseSectionDef \"%(.+)\" --print uucp start"
  -./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func --tmp /tmp --ParseSectionDef "%(.+)" --print uucp start
  -echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func --tmp /tmp --debug --ParseSectionDef \"%(.+)\" --print ntp sync"
  -./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func --tmp /tmp --debug --ParseSectionDef "%(.+)" --print ntp sync
  -echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func --tmp /tmp --debug --silent --ParseSectionDef \"%(.+)\" --print ralf feed suppe"
  -./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func --tmp /tmp --debug --silent --ParseSectionDef "%(.+)" --print ralf feed suppe
  -echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /u/ms/ossp/rc/rcfiles/ --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --print samba search finish destroy"
  -./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /u/ms/ossp/rc/rcfiles/ --ParseSectionDef "%(.+)" --tmp /tmp --silent --print samba search finish destroy
  -
  -echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /u/ms/ossp/rc/rcfiles/ --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --print all feed suppe"
  -./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /u/ms/ossp/rc/rcfiles/ --ParseSectionDef "%(.+)" --tmp /tmp --silent --print all feed suppe
  -
  -echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --debug --print all config barf gag"
  -./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --debug --print all config barf gag
  -
  -echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --debug --eval all config start"
  -./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --debug --eval all config start
  -
  -echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --debug --exec all config start"
  -./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --debug --exec all config start
  -
  -echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --debug --print pam info"
  -./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --debug --print pam info
  +echo; echo "./rc --func rc_test/rcfuncs --print --ParseSectionDef \"%(.+)\" --verbose openssh stop sleep=4 start"
  +./rc --func rc_test/rcfuncs --print --ParseSectionDef "%(.+)" --verbose openssh stop sleep=4 start
  +echo; echo "./rc --func ./rc_test/rcfuncs --info --eval uucp restart"
  +./rc --func ./rc_test/rcfuncs --info --eval uucp restart
  +echo; echo "./rc --conf rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --ParseSectionDef \"%(.+)\" --print uucp start"
  +./rc --conf rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --ParseSectionDef "%(.+)" --print uucp start
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --ParseSectionDef \"%(.+)\" --print ntp sync"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --ParseSectionDef "%(.+)" --print ntp sync
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --silent --ParseSectionDef \"%(.+)\" --print ralf feed suppe"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --silent --ParseSectionDef "%(.+)" --print ralf feed suppe
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L rc_test --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --print samba search finish destroy"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L rc_test --ParseSectionDef "%(.+)" --tmp /tmp --silent --print samba search finish destroy
  +
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --print all feed suppe"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test --ParseSectionDef "%(.+)" --tmp /tmp --silent --print all feed suppe
  +
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L /usr/opkg/etc/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --debug --print all config barf gag"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L /usr/opkg/etc/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --debug --print all config barf gag
  +
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L /usr/opkg/etc/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --debug --eval all config start"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L /usr/opkg/etc/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --debug --eval all config start
  +
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L /usr/opkg/etc/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --debug --exec all config start"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L /usr/opkg/etc/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --debug --exec all config start
  +
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L /usr/opkg/etc/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --debug --print pam info"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L /usr/opkg/etc/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --debug --print pam info
   
  -echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --debug --print apache config start"
  -./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /sw/etc/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --debug --print apache config start
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L /usr/opkg/etc/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --debug --print apache config start"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L /usr/opkg/etc/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --debug --print apache config start
   
  -echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /u/ms/ossp/rc/rcfiles/ --ParseSectionDef \"<(.+)>\" --tmp /tmp --silent --debug --print all config start"
  -./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /u/ms/ossp/rc/rcfiles/ --ParseSectionDef "<(.+)>" --tmp /tmp --silent --debug --print all config start
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef \"<(.+)>\" --tmp /tmp --silent --debug --print all config start"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef "<(.+)>" --tmp /tmp --silent --debug --print all config start
   
  -echo; echo "./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /u/ms/ossp/rc/rcfiles/ --ParseSectionDef \"<(.+)>\" --tmp /tmp --silent --debug --print pam info"
  -./rc --conf rcdings/myrc.conf --func /u/ms/ossp/rc/rcfunc/rc.func -L /u/ms/ossp/rc/rcfiles/ --ParseSectionDef "<(.+)>" --tmp /tmp --silent --debug --print pam info
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef \"<(.+)>\" --tmp /tmp --silent --debug --print pam info"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef "<(.+)>" --tmp /tmp --silent --debug --print pam info
   
   # Next milestone
   #RequireOwner
  Index: ossp-pkg/rc/rc_test/rc.ntp
  ============================================================
  $ cvs update -p -r1.1 rc.ntp
  #! /bin/sh
  
  echo "Run commands NTP starting"
  
  %start -p 200 -u root
      opServiceEnabled dhcpd || exit 0
      /sw/sbin/dhcpd >/dev/null 2>&1
  
  %go
      ping -a -c 4 dt1.dev.de.cw.net
      curl -s ftp://ftp.openpkg.org/current/SRC/ | grep openssl
      cat $0
  
  %stop -p 200 -u root
      opServiceEnabled dhcpd || exit 0
      kill -TERM `cat /sw/var/dhcpd/dhcpd.pid`
  
  echo "Run commands NTP finishing"
  echo
  
  Index: ossp-pkg/rc/rc_test/rc.openssh
  ============================================================
  $ cvs update -p -r1.1 rc.openssh
  #! /bin/sh
  
  echo "Run commands openssh starting"
  
  sync
  sync
  
  echo "Defining aliases"
  alias eben=sogar
  alias harpo=dasboot
  alias
  alias michael=normandie
  alias diego=maradona
  alias
  
  echo "Run commands openssh finishing"
  echo
  
  Index: ossp-pkg/rc/rc_test/rc.pam
  ============================================================
  $ cvs update -p -r1.1 rc.pam
  #!/sw/lib/openpkg/bash /sw/etc/rc
  ##
  ##  rc.pam -- Run-Commands for PAM
  ##
  
  <config>
      pam_enable="yes"
      pam_cfgloc='/etc/pam.conf'
      pam_modpfx=''
      pam_incdir='/usr/include'
      pam_libdir='/usr/lib'
  </config>
  
  <info>
      echo "PAM Enabled:           ${pam_enable}"
      echo "PAM Config  Location:  ${pam_cfgloc}"
      echo "PAM Module  Prefix:    ${pam_modpfx}"
      echo "PAM Include Directory: ${pam_incdir}"
      echo "PAM Library Directory: ${pam_libdir}"
  </info>
  Index: ossp-pkg/rc/rc_test/rc.ralf
  ============================================================
  $ cvs update -p -r1.1 rc.ralf
  #!/bin/sh
  
  echo "Run commands RALF starting"
  
  RALF="NiceGuy"
  HEILO="RockRoll"
  echo "$RALF s play $HEILO"
  echo
  finger
  
  echo "Run commands RALF finishing"
  echo
  
  Index: ossp-pkg/rc/rc_test/rc.rsyncd
  ============================================================
  $ cvs update -p -r1.1 rc.rsyncd
  #! /bin/sh
  
  echo "Run commands Rsyncd starting"
  
  ls /tmp
  which shutdown
  
  echo "Run commands Rsyncd finishing"
  echo
  
  Index: ossp-pkg/rc/rc_test/rc.samba
  ============================================================
  $ cvs update -p -r1.1 rc.samba
  #! /bin/sh
  
  echo "Run commands Samba starting"
  
  %search
      whois cyvaned.com
  
  %destroy
      ldd /usr/lib/libpcap.so
  
  %finish
      echo "Dun with everything"
      echo "Run commands Samba finishing"
  echo
  
  Index: ossp-pkg/rc/rc_test/rc.uucp
  ============================================================
  $ cvs update -p -r1.1 rc.uucp
  #! /bin/sh
  
  echo "Run commands UUCP starting"
  
  ls /
  pwd
  whoami
  which rpm
  
  echo "Run commands UUCP finishing"
  echo
  
  Index: ossp-pkg/rc/rc_test/rc.zebra
  ============================================================
  $ cvs update -p -r1.1 rc.zebra
  #! /bin/sh
  
  echo "Run commands Zebra starting"
  
  pwd
  users
  echo $PATH | md5
  echo $PRINTER
  echo
  netstat -p tcp
  
  echo "Run commands Zebra finishing"
  echo
  
  Index: ossp-pkg/rc/rc_test/rcfuncs
  ============================================================
  $ cvs update -p -r1.1 rcfuncs
  #! /bin/sh
  
  echo "**** Funcfile ist hier und wirds gemerged ****"
  echo "And again" >>disfile.txt
  cat disfile.txt | md5 >>disfile.txt
  uname -a
  
  echo "Peter SMEJ ist chef Entwickler."
  echo "Thomas LOTTERER ist chef Entwickler."
  echo "Michael SCHLOH ist chef Entwickler."
  echo "Ralf ENGELSCHALL ist aber chef-chef Entwickler!"
  
  echo "**** Funcfile ist fertig, rc gehts weiter ****"
  echo
  

From ossp-cvs-owner@ossp.org  Fri Jul  5 14:05:32 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 31C89763F3; Fri,  5 Jul 2002 14:05:32 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea.cgi
Message-Id: <20020705120532.31C89763F3@mail.ossp.org>
Date: Fri,  5 Jul 2002 14:05:32 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   05-Jul-2002 14:05:32
  Branch: HEAD                             Handle: 2002070513053100

  Modified files:
    ossp-pkg/tabea          tabea.cgi

  Log:
    Changed jump back destination for admin section

  Summary:
    Revision    Changes     Path
    1.32        +22 -13     ossp-pkg/tabea/tabea.cgi
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea.cgi
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 tabea.cgi
  --- ossp-pkg/tabea/tabea.cgi	28 Jun 2002 15:02:08 -0000	1.31
  +++ ossp-pkg/tabea/tabea.cgi	5 Jul 2002 12:05:31 -0000	1.32
  @@ -962,9 +962,14 @@
       "  </tr>" . 
       "  <tr>" .
       "    <td colspan=2 align=right>" .
  -    $cgi->reset() .
  -    $cgi->submit(-name => 'dialog_mainw', -value => 'Back').
  -    $cgi->submit(-name => 'dialog_changepwd', -value => 'Change') .
  +    $cgi->reset() ;
  +    if ( $cgi->param('username') eq $cfghash{'TabeaUser'}) {
  +        $ctext .= $cgi->submit(-name => 'dialog_admin', -value => 'Back');
  +    } else {
  +        $ctext .= $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
  +    }
  +
  +    $ctext .= $cgi->submit(-name => 'dialog_changepwd', -value => 'Change') .
       "    </td>" .
       "  </tr>" . 
       "</table>" ;
  @@ -995,8 +1000,12 @@
           $valid = 1; 
       }
       if ( !$valid ) {
  -        $cptext .= "<font color=red>The password is incorrect.<br><br>\n". 
  -        $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
  +        $cptext .= "<font color=red>The password is incorrect.<br><br>\n";
  +        if ( $cgi->param('username') eq $cfghash{'TabeaUser'}) {
  +            $cptext .= $cgi->submit(-name => 'dialog_admin', -value => 'Back');
  +        } else {
  +            $cptext .= $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
  +        }
       } else {
           if ($new1_password eq $new2_password) {
               $pwdfp = IO::File->new("<$pwdfile");
  @@ -1055,7 +1064,7 @@
       "<table>" . 
   
       "<td>" .
  -    $cgi->submit(-name => 'dialog_mainw', -value => 'Back').
  +    $cgi->submit(-name => 'dialog_admin', -value => 'Back').
       "</td>" .
       "<td>" .
       $cgi->submit(-name => 'dialog_newuser', -value => 'Write User').
  @@ -1091,7 +1100,7 @@
           $ntext .= "<font color=red>" .
           "<br>Username wrong<br><br>" .
           "</font>" .
  -        $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
  +        $cgi->submit(-name => 'dialog_admin', -value => 'Back');
       } else {
           $pwdin = IO::File->new("<$pwdfile");
           while (<$pwdin>) {
  @@ -1130,14 +1139,14 @@
              
               $ntext .= "<font color=red>" .
                   "User $nuser created</font><br><br>" .
  -                $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
  +                $cgi->submit(-name => 'dialog_admin', -value => 'Back');
                   
   
           } else {
               $ntext .= "<font color=red>" .
               "<br>User exists <br><br>" .
               "</font>" .
  -            $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
  +            $cgi->submit(-name => 'dialog_admin', -value => 'Back');
           }
       }
   
  @@ -1189,7 +1198,7 @@
           "<table>" .
   
           "<td>" .
  -        $cgi->submit(-name => 'dialog_mainw', -value => 'Back').
  +        $cgi->submit(-name => 'dialog_admin', -value => 'Back').
           "</td>" .
           "<td>" .
           $cgi->submit(-name => 'dialog_d2user', -value => 'Del User').
  @@ -1203,7 +1212,7 @@
           "It is not allowed to delet tabea user!!!" .
           "</font>" .
           "<br><br>" .
  -        $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
  +        $cgi->submit(-name => 'dialog_admin', -value => 'Back');
       }
   
   
  @@ -1245,7 +1254,7 @@
       "<table>" .
   
       "<td>" .
  -    $cgi->submit(-name => 'dialog_mainw', -value => 'Back').
  +    $cgi->submit(-name => 'dialog_admin', -value => 'Back').
       "</td>" .
       "<td>" .
       $cgi->submit(-name => 'dialog_d3user', -value => 'Really delete user').
  @@ -1317,7 +1326,7 @@
   
       $d3text .= "<br>" .
   
  -    $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
  +    $cgi->submit(-name => 'dialog_admin', -value => 'Back');
   
   
       return $d3text;

From ossp-cvs-owner@ossp.org  Fri Jul  5 14:07:02 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 34C2D763F3; Fri,  5 Jul 2002 14:07:02 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc_test.sh
Message-Id: <20020705120702.34C2D763F3@mail.ossp.org>
Date: Fri,  5 Jul 2002 14:07:02 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   05-Jul-2002 14:07:02
  Branch: HEAD                             Handle: 2002070513070100

  Modified files:
    ossp-pkg/rc             rc_test.sh

  Log:
    Add conditional instance variable feature.

  Summary:
    Revision    Changes     Path
    1.17        +22 -16     ossp-pkg/rc/rc_test.sh
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc_test.sh
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 rc_test.sh
  --- ossp-pkg/rc/rc_test.sh	5 Jul 2002 11:16:20 -0000	1.16
  +++ ossp-pkg/rc/rc_test.sh	5 Jul 2002 12:07:01 -0000	1.17
  @@ -27,6 +27,12 @@
   #
   #  test_rc.sh: Run-command processor test script
   
  +if [ -d $MOPKG/etc ]; then
  +    RCBASE=$MOPKG/etc
  +else
  +    RCBASE=/usr/opkg/etc
  +fi
  +
   # Test short options, should fail for false combination usage
   #echo "./rc -dvef ./rc_test/rcfuncs -hilpsrvxLcqt samba start sleep=2 restart"
   #./rc -dVef ./rc_test/rcfuncs -hilpsrvxLcqt samba start sleep=2 restart
  @@ -40,14 +46,14 @@
   ./rc --verbose --silent --ParseSectionDef "%(.+)" uucp stop sleep=6 start
   echo; echo "./rc --query myvar --silent --ParseSectionDef \"%(.+)\" zebra bing bang"
   ./rc --query myvar --silent --ParseSectionDef "%(.+)" zebra bing bang
  -echo; echo "./rc --conf /usr/opkg/etc/rc.conf --ParseSectionDef \"%(.+)\" --locate ./rc_test/ --query this barf test"
  -./rc --conf /usr/opkg/etc/rc.conf --ParseSectionDef "%(.+)" --locate ./rc_test/ --query this barf test
  +echo; echo "./rc --conf ./rc.conf --ParseSectionDef \"%(.+)\" --locate ./rc_test/ --query this barf test"
  +./rc --conf ./rc.conf --ParseSectionDef "%(.+)" --locate ./rc_test/ --query this barf test
   
   # Test minimal set of long options, should succeed
   echo; echo "./rc --debug --version --ParseSectionDef \"%(.+)\" rsyncd nothing matters but the version"
   ./rc --debug --version --ParseSectionDef "%" rsyncd nothing matters but the version
  -echo; echo "./rc --conf /usr/opkg/etc/rc.conf --ParseSectionDef \"%(.+)\" --locate /usr/opkg/etc/rc.d:./rc_test:/etc/rc --query all barf test"
  -./rc --conf /usr/opkg/etc/rc.conf --ParseSectionDef "%(.+)" --locate /usr/opkg/etc/rc.d:./rc_test:/etc/rc --query all barf test
  +echo; echo "./rc --conf $RCBASE/rc.conf --ParseSectionDef \"%(.+)\" --locate $RCBASE/rc.d:./rc_test:/etc/rc --query all barf test"
  +./rc --conf $RCBASE/rc.conf --ParseSectionDef "%(.+)" --locate $RCBASE/rc.d:./rc_test:/etc/rc --query all barf test
   
   # FIXME these cases are not handled yet by our configuration FIXME #
   #echo; echo "./rc --debug --version"
  @@ -58,8 +64,8 @@
   #./rc --debug --info --verbose
   #echo; echo "./rc --conf /etc/rc.conf --debug --info --raw"
   #./rc --conf /etc/rc.conf --debug --info --raw
  -#echo; echo "./rc --conf /usr/opkg/etc/rc.conf --tmp /tmp --debug --labels rsyncd"
  -#./rc --conf /usr/opkg/etc/rc.conf --tmp /tmp --debug --labels rsyncd
  +#echo; echo "./rc --conf $RCBASE/rc.conf --tmp /tmp --debug --labels rsyncd"
  +#./rc --conf $RCBASE/rc.conf --tmp /tmp --debug --labels rsyncd
   # FIXME these cases are not handled yet by our configuration FIXME #
   
   echo; echo "./rc --func rc_test/rcfuncs --print --ParseSectionDef \"%(.+)\" --verbose openssh stop sleep=4 start"
  @@ -78,20 +84,20 @@
   echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --print all feed suppe"
   ./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test --ParseSectionDef "%(.+)" --tmp /tmp --silent --print all feed suppe
   
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L /usr/opkg/etc/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --debug --print all config barf gag"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L /usr/opkg/etc/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --debug --print all config barf gag
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --debug --print all config barf gag"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --debug --print all config barf gag
   
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L /usr/opkg/etc/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --debug --eval all config start"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L /usr/opkg/etc/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --debug --eval all config start
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --debug --eval all config start"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --debug --eval all config start
   
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L /usr/opkg/etc/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --debug --exec all config start"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L /usr/opkg/etc/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --debug --exec all config start
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --debug --exec all config start"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --debug --exec all config start
   
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L /usr/opkg/etc/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --debug --print pam info"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L /usr/opkg/etc/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --debug --print pam info
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --debug --print pam info"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --debug --print pam info
   
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L /usr/opkg/etc/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --debug --print apache config start"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L /usr/opkg/etc/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --debug --print apache config start
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --debug --print apache config start"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --debug --print apache config start
   
   echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef \"<(.+)>\" --tmp /tmp --silent --debug --print all config start"
   ./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef "<(.+)>" --tmp /tmp --silent --debug --print all config start

From ossp-cvs-owner@ossp.org  Fri Jul  5 14:43:08 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A2D53763F3; Fri,  5 Jul 2002 14:43:08 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea.cgi
Message-Id: <20020705124308.A2D53763F3@mail.ossp.org>
Date: Fri,  5 Jul 2002 14:43:08 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   05-Jul-2002 14:43:08
  Branch: HEAD                             Handle: 2002070513430800

  Modified files:
    ossp-pkg/tabea          tabea.cgi

  Log:
    Initiate new program start after editing of config file

  Summary:
    Revision    Changes     Path
    1.33        +6  -0      ossp-pkg/tabea/tabea.cgi
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea.cgi
  ============================================================
  $ cvs diff -u -r1.32 -r1.33 tabea.cgi
  --- ossp-pkg/tabea/tabea.cgi	5 Jul 2002 12:05:31 -0000	1.32
  +++ ossp-pkg/tabea/tabea.cgi	5 Jul 2002 12:43:08 -0000	1.33
  @@ -473,12 +473,18 @@
           print $fileout $edittext;
           $fileout->close;
           $form = 'mainw';
  +
  +        if($cgi->param("editfile") =~  $cfghash{'BaseDir'} . "tabea.cfg" ) {
  +            $password = "";
  +        }
  +
           goto NEXTFORM;
       } else {
           $text .= "<font color=red>Cannot save file<br><br>\n";
       }
   
       $text .= $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
  + 
   
       return $text;
   }

From ossp-cvs-owner@ossp.org  Fri Jul  5 14:54:57 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5A076767D8; Fri,  5 Jul 2002 14:54:57 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc_cliopt.c rc_proc.c rc_script.c ossp-pkg/rc/...
Message-Id: <20020705125457.5A076767D8@mail.ossp.org>
Date: Fri,  5 Jul 2002 14:54:57 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   05-Jul-2002 14:54:57
  Branch: HEAD                             Handle: 2002070513545600

  Modified files:
    ossp-pkg/rc             rc_cliopt.c rc_proc.c rc_script.c
    ossp-pkg/rc/rc_test     rcfuncs

  Log:
    Resolve some null pointer and ex_ bugs, and clean up --print output.

  Summary:
    Revision    Changes     Path
    1.13        +1  -0      ossp-pkg/rc/rc_cliopt.c
    1.12        +4  -2      ossp-pkg/rc/rc_proc.c
    1.6         +3  -4      ossp-pkg/rc/rc_script.c
    1.2         +0  -2      ossp-pkg/rc/rc_test/rcfuncs
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc_cliopt.c
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 rc_cliopt.c
  --- ossp-pkg/rc/rc_cliopt.c	26 Jun 2002 14:42:53 -0000	1.12
  +++ ossp-pkg/rc/rc_cliopt.c	5 Jul 2002 12:54:56 -0000	1.13
  @@ -171,6 +171,7 @@
   {
       ex_t Except;
   
  +    assert (pkszSecs);          /* IF NULL, its broken */
       if (m_pszSecs)              /* Warn on overwrites */
           RC_THROW(RC_WRN_OWR);
   
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	2 Jul 2002 18:03:17 -0000	1.11
  +++ ossp-pkg/rc/rc_proc.c	5 Jul 2002 12:54:56 -0000	1.12
  @@ -181,8 +181,10 @@
           fprintf(stderr, "Error: Execute is not implemented yet.\n");  /* FIX */
       else if (configGetval(RC_PRN_VAL))  /* Print    */
           scriptDump(pRc->m_pScript);
  -    else
  -        return(RC_THROW(RC_ERR_INT));   /* Not reached */
  +    else                                /* Something is wrong here, there is */
  +        fprintf(stderr, "Error: Placeholder, until problem with ex_ is fixed.\n");
  +/* FIXME!!: Ralf, following segfaults in ex */
  +/*        return(RC_THROW(RC_ERR_INT));*/   /* probably no default in the config */
   
       return(RC_THROW(RC_OK));
   }
  Index: ossp-pkg/rc/rc_script.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 rc_script.c
  --- ossp-pkg/rc/rc_script.c	4 Jul 2002 16:49:58 -0000	1.5
  +++ ossp-pkg/rc/rc_script.c	5 Jul 2002 12:54:56 -0000	1.6
  @@ -187,10 +187,9 @@
   ************************************************/
   rc_return_t scriptDump(rc_script_t *pScript)
   {
  -    fprintf(stdout, "\n**************** Dumpskripte ****************\n");
  -    fprintf(stdout, "%s\n", *pScript);
  -    fprintf(stdout, "**************** Dumpskripte ****************\n\n");
  -
  +    /* Don't remove this! It encapsulates the script object, */
  +    /*                    which might not be a simple string */
  +    fprintf(stdout, "%s", *pScript);
       return(RC_THROW(RC_OK));
   }
   
  Index: ossp-pkg/rc/rc_test/rcfuncs
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 rcfuncs
  --- ossp-pkg/rc/rc_test/rcfuncs	5 Jul 2002 11:16:21 -0000	1.1
  +++ ossp-pkg/rc/rc_test/rcfuncs	5 Jul 2002 12:54:56 -0000	1.2
  @@ -11,5 +11,3 @@
   echo "Ralf ENGELSCHALL ist aber chef-chef Entwickler!"
   
   echo "**** Funcfile ist fertig, rc gehts weiter ****"
  -echo
  -

From ossp-cvs-owner@ossp.org  Fri Jul  5 15:02:18 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AB428769A0; Fri,  5 Jul 2002 15:02:18 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Message-Id: <20020705130218.AB428769A0@mail.ossp.org>
Date: Fri,  5 Jul 2002 15:02:18 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: CVSROOT                          Date:   05-Jul-2002 15:02:18
  Branch: HEAD                             Handle: 2002070514021800

  Modified files:
    CVSROOT                 modules

  Log:
    Make tabea sources easier to download via 'cvs get tabea'.

  Summary:
    Revision    Changes     Path
    1.57        +3  -0      CVSROOT/modules
  ____________________________________________________________________________

  Index: CVSROOT/modules
  ============================================================
  $ cvs diff -u -r1.56 -r1.57 modules
  --- CVSROOT/modules	20 Jun 2002 13:48:50 -0000	1.56
  +++ CVSROOT/modules	5 Jul 2002 13:02:18 -0000	1.57
  @@ -95,6 +95,9 @@
   #   OSSP lmtp2nntp
   lmtp2nntp       ossp-pkg/lmtp2nntp
   
  +#   OSSP tabea
  +tabea           ossp-pkg/tabea
  +
   #   OSSP rc
   rc              ossp-pkg/rc &rc_popt &rc_ex
   #rc              ossp-pkg/rc &rc_popt &rc_ex &rc_str &rc_var &rc_val

From ossp-cvs-owner@ossp.org  Fri Jul  5 15:06:35 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9C2A7763F3; Fri,  5 Jul 2002 15:06:35 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea.cgi
Message-Id: <20020705130635.9C2A7763F3@mail.ossp.org>
Date: Fri,  5 Jul 2002 15:06:35 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   05-Jul-2002 15:06:35
  Branch: HEAD                             Handle: 2002070514063500

  Modified files:
    ossp-pkg/tabea          tabea.cgi

  Log:
    Corrected an error in orthography

  Summary:
    Revision    Changes     Path
    1.34        +1  -1      ossp-pkg/tabea/tabea.cgi
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea.cgi
  ============================================================
  $ cvs diff -u -r1.33 -r1.34 tabea.cgi
  --- ossp-pkg/tabea/tabea.cgi	5 Jul 2002 12:43:08 -0000	1.33
  +++ ossp-pkg/tabea/tabea.cgi	5 Jul 2002 13:06:35 -0000	1.34
  @@ -1215,7 +1215,7 @@
       } else {
           $text .=
           "<font color=red>" .
  -        "It is not allowed to delet tabea user!!!" .
  +        "It is not allowed to delete tabea user!!!" .
           "</font>" .
           "<br><br>" .
           $cgi->submit(-name => 'dialog_admin', -value => 'Back');

From ossp-cvs-owner@ossp.org  Fri Jul  5 15:26:36 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 03CA5767D8; Fri,  5 Jul 2002 15:26:35 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea/TABEA Tabea.pm
Message-Id: <20020705132635.03CA5767D8@mail.ossp.org>
Date: Fri,  5 Jul 2002 15:26:35 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   05-Jul-2002 15:26:35
  Branch: HEAD                             Handle: 2002070514263500

  Added files:
    ossp-pkg/tabea/TABEA    Tabea.pm

  Log:
    *** empty log message ***

  Summary:
    Revision    Changes     Path
    1.1         +114 -0     ossp-pkg/tabea/TABEA/Tabea.pm
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/TABEA/Tabea.pm
  ============================================================
  $ cvs update -p -r1.1 Tabea.pm
  #!/usr/opkg/bin/perl -w
  ##
  ##  OSSP tabea - Web Configuration Editor
  ##  The Tabea Perl Module
  ##
  ##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  ##
  ##  This file is part of OSSP tabea, a web configuration editor
  ##  which can be found at http://www.ossp.org/pkg/tool/tabea/.
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  Tabea.pm: Tabea Perl Module
  ##
  
  
  package TABEA::Tabea;
  require 5.000;
  
  
  sub new{
      my ($config, $prefix) = @_;
      my $handle = 0;
  
      return $handle;
  }
  
  
  sub load{
      my ($data) = @_;
      my $rc = 1;
  
      return $rc;
  }
  
  
  sub save {
      my ($data) = @_;
      my $rc = 1;
  
      return $rc;
  }
  
  
  sub parse {
      my ($type, $buffer) = @_;
      my $rc;
    
    
      return $rc;
  }
  
  
  
  sub render {
      my ($type, $buffer) = @_;
      my $rc;
  
      
      return $rc;
  }
  
  sub import{
      my ($legacyfile) = @_;
      my $rc;
      
       
      return $rc;   
  }
  
  
  
  sub export{
      my ($template, $exportfile) = @_;
      my $rc;
      
       
      return $rc;   
  }
  
  
  
  
  
  
  sub destroy{
      my $rc;
  
      return $rc.
    
  }
  
  
  
  
  
  1;

From ossp-cvs-owner@ossp.org  Fri Jul  5 15:27:23 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 212EF767D8; Fri,  5 Jul 2002 15:27:23 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc_config.c
Message-Id: <20020705132723.212EF767D8@mail.ossp.org>
Date: Fri,  5 Jul 2002 15:27:23 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   05-Jul-2002 15:27:23
  Branch: HEAD                             Handle: 2002070514272200

  Modified files:
    ossp-pkg/rc             rc_config.c

  Log:
    Move code block.

  Summary:
    Revision    Changes     Path
    1.21        +21 -21     ossp-pkg/rc/rc_config.c
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc_config.c
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 rc_config.c
  --- ossp-pkg/rc/rc_config.c	1 Jul 2002 15:03:33 -0000	1.20
  +++ ossp-pkg/rc/rc_config.c	5 Jul 2002 13:27:22 -0000	1.21
  @@ -38,6 +38,27 @@
   
   
   /***************************************
  +* configNew(void)                      *
  +* Construct a configuration            *
  +***************************************/
  +rc_return_t configNew(void)
  +{
  +    ex_t Except;
  +
  +    if (m_nLocks == 0) {                    /* If we don't have one yet */
  +        try {                               /* then construct a new one */
  +            clioptNew();                    /* Member cliopt instance   */
  +        }
  +        catch(Except) {
  +            rethrow;
  +        }
  +    }
  +    m_nLocks++;                             /* FIXME not threadsafe     */
  +
  +    return(RC_THROW(RC_OK));
  +}
  +
  +/***************************************
   * configInfo(void)                     *
   * Print the configuration information  *
   ***************************************/
  @@ -70,27 +91,6 @@
       catch(Except) {
           rethrow;
       }
  -
  -    return(RC_THROW(RC_OK));
  -}
  -
  -/***************************************
  -* configNew(void)                      *
  -* Construct a configuration            *
  -***************************************/
  -rc_return_t configNew(void)
  -{
  -    ex_t Except;
  -
  -    if (m_nLocks == 0) {                    /* If we don't have one yet */
  -        try {                               /* then construct a new one */
  -            clioptNew();                    /* Member cliopt instance   */
  -        }
  -        catch(Except) {
  -            rethrow;
  -        }
  -    }
  -    m_nLocks++;                             /* FIXME not threadsafe     */
   
       return(RC_THROW(RC_OK));
   }

From ossp-cvs-owner@ossp.org  Fri Jul  5 16:10:24 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 927F2763F3; Fri,  5 Jul 2002 16:10:24 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.c rc_config.c
Message-Id: <20020705141024.927F2763F3@mail.ossp.org>
Date: Fri,  5 Jul 2002 16:10:24 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   05-Jul-2002 16:10:24
  Branch: HEAD                             Handle: 2002070515102400

  Modified files:
    ossp-pkg/rc             rc.c rc_config.c

  Log:
    Prepare for config defaults through addition of the config visitor object.

  Summary:
    Revision    Changes     Path
    1.38        +12 -12     ossp-pkg/rc/rc.c
    1.22        +6  -1      ossp-pkg/rc/rc_config.c
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.c
  ============================================================
  $ cvs diff -u -r1.37 -r1.38 rc.c
  --- ossp-pkg/rc/rc.c	1 Jul 2002 15:03:32 -0000	1.37
  +++ ossp-pkg/rc/rc.c	5 Jul 2002 14:10:24 -0000	1.38
  @@ -68,23 +68,23 @@
   {
       ex_t Except;
   
  -    try {                       /* Configuration block                      */
  -        configNew();            /* Construct a new configuration            */
  -        configLoad(argc, (const char **)argv);   /* Load cli, env, and conf */
  -        configVerify();         /* Test for usage, help and version options */
  +    try {                       /* Configuration block                        */
  +        configNew();            /* Construct a new config, add default values */
  +        configLoad(argc, (const char **)argv);   /* Load cli, env, and conf   */
  +        configVerify();         /* Test for usage, help and version options   */
       }
  -    catch(Except)               /* Exceptions of the configuration block    */
  +    catch(Except)               /* Exceptions of the configuration block      */
           rcError(Except);
   
  -    try {                       /* Main processing block, script built here */
  +    try {                       /* Main processing block, script built here   */
           rc_proc_t *pProc = NULL;
  -        pProc = procNew();      /* Construct a new processor, build script  */
  -        procPopulate(pProc);    /* Populate with run commands               */
  -        procRun(pProc);         /* [Execute|Evaluate|Print] script          */
  -        procDelete(pProc);      /* Destroy the processor                    */
  -        configDelete();         /* Destroy the configuration                */
  +        pProc = procNew();      /* Construct a new processor, build script    */
  +        procPopulate(pProc);    /* Populate with run commands                 */
  +        procRun(pProc);         /* [Execute|Evaluate|Print] script            */
  +        procDelete(pProc);      /* Destroy the processor                      */
  +        configDelete();         /* Destroy the configuration                  */
       }
  -    catch(Except)               /* Exception thrown while script processing */
  +    catch(Except)               /* Exception thrown while script processing   */
           rcError(Except);
   
       exit(0);                    /* Return success */
  Index: ossp-pkg/rc/rc_config.c
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 rc_config.c
  --- ossp-pkg/rc/rc_config.c	5 Jul 2002 13:27:22 -0000	1.21
  +++ ossp-pkg/rc/rc_config.c	5 Jul 2002 14:10:24 -0000	1.22
  @@ -55,9 +55,14 @@
       }
       m_nLocks++;                             /* FIXME not threadsafe     */
   
  +/* Warn: Experimental design pattern code abstracts operations from config */
  +/*    configVisit(pfnSetdefaults);
  +    configVisit(pfnGetoptinfo);*/
  +
       return(RC_THROW(RC_OK));
   }
   
  +/* FIXME: Make into configVisit, using callbacks to get and set option info */
   /***************************************
   * configInfo(void)                     *
   * Print the configuration information  *
  @@ -66,7 +71,7 @@
   {
       ex_t Except;
       int i = 0;
  -    char **pszTemp = NULL;  /* For holding the section string vector        */
  +    char **pszTemp = NULL;  /* For holding the section string vector */
   
       try {
           fprintf(stderr, "Run command file: %s\n", configGetrcfile());

From ossp-cvs-owner@ossp.org  Fri Jul  5 16:33:11 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 30507763F3; Fri,  5 Jul 2002 16:33:11 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg 00TODO cfg_syn.c cfg_syn_scan.l sample2.cfg
Message-Id: <20020705143311.30507763F3@mail.ossp.org>
Date: Fri,  5 Jul 2002 16:33:11 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Jul-2002 16:33:11
  Branch: HEAD                             Handle: 2002070515331000

  Modified files:
    ossp-pkg/cfg            00TODO cfg_syn.c cfg_syn_scan.l sample2.cfg

  Log:
    Add support for Perl-like q(.)[^\1]\1 style quotations which allow one
    to place arbitrary stuff into a single syntax token. This is especially
    useful if you think about complex OSSP l2 or OSSP pcbe expressions which
    else had to be escaped into double- or single-quoted strings in order to
    be placed into a OSSP cfg syntax.

  Summary:
    Revision    Changes     Path
    1.2         +15 -2      ossp-pkg/cfg/00TODO
    1.3         +2  -2      ossp-pkg/cfg/cfg_syn.c
    1.2         +88 -9      ossp-pkg/cfg/cfg_syn_scan.l
    1.2         +1  -1      ossp-pkg/cfg/sample2.cfg
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/00TODO
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 00TODO
  --- ossp-pkg/cfg/00TODO	3 Jul 2002 13:25:34 -0000	1.1
  +++ ossp-pkg/cfg/00TODO	5 Jul 2002 14:33:10 -0000	1.2
  @@ -1,4 +1,17 @@
  +- newline in error message
  +$ ./cfg_test sample2.cfg 
  +ERROR: <line 7, column 1: `1b;
  +<}> quu'>
  +
  +
  +cfg_test in free(): warning: modified (chunk-) pointer
  +
   - cfg_t
  -- cfg_data.c
  -- cfg_node_dump()
   - cfg_node_destroy() for whole tree
  +
  +rewrite-uri <regex> <subst> { <rewrite-cond> }
  +
  +rewrite-uri ^/(.*) /path/$1 --redirect=permanent "{
  +    %{SOURCE} != "x" 
  +}";
  +
  Index: ossp-pkg/cfg/cfg_syn.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 cfg_syn.c
  --- ossp-pkg/cfg/cfg_syn.c	4 Jul 2002 14:51:21 -0000	1.2
  +++ ossp-pkg/cfg/cfg_syn.c	5 Jul 2002 14:33:10 -0000	1.3
  @@ -144,8 +144,8 @@
       *cp++ = '\0';
   
       /* remember parsing error: part I (context part) */
  -    cfg_fmt_sprintf(ctx->err_buf, sizeof(ctx->err_len), 
  -                    "line %d, column %d: `%s'; %s",
  +    cfg_fmt_sprintf(ctx->err_buf, ctx->err_len, 
  +                    "line %d, column %d: `%s'",
                       line, column, cpBuf);
       free(cpBuf);
   
  Index: ossp-pkg/cfg/cfg_syn_scan.l
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 cfg_syn_scan.l
  --- ossp-pkg/cfg/cfg_syn_scan.l	3 Jul 2002 13:25:34 -0000	1.1
  +++ ossp-pkg/cfg/cfg_syn_scan.l	5 Jul 2002 14:33:10 -0000	1.2
  @@ -57,6 +57,8 @@
       yylloc->last += yyleng;
   #define YY_USER_ACTION_ROLLBACK \
       yylloc->last = yylloc->first
  +
  +static char closing_brace(char open);
   %}
   
   /* scanner options */
  @@ -69,6 +71,8 @@
   /* scanner states */
   %x SS_DQ
   %x SS_SQ
  +%x SS_FQ
  +%x SS_PT
   %x SS_CO_C
   
   %%
  @@ -76,6 +80,9 @@
       /* local variables */
       char  caStr[1024];
       char *cpStr = NULL;
  +    int   nQuoteOpen;
  +    char  cQuoteOpen;
  +    char  cQuoteClose;
   
       /* whitespaces */
   [ \t\n]+ {
  @@ -172,20 +179,70 @@
       *cpStr++ = yytext[1];
   }
   
  -    /* plain text word */
  -[^ \t\n;{}"']+ {
  -    yylval->cpString = strdup(yytext);
  -    return T_STRING;
  +    /* flexible-quoted word (q(.)[^\1]\1)
  +       the delimiting character has to one a special character c, i.e.,
  +       one of !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ or in C code:
  +       isprint(c) && !isspace(c) && !iscntrl(c) && !isalpha(i) && !isdigit(i)
  +       */
  +"q"[\!\"\#\$\%\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\@\[\\\]\^\_\`\{\|\}\~] {
  +    cpStr = caStr;
  +    nQuoteOpen = 1;
  +    cQuoteOpen = yytext[1];
  +    cQuoteClose = closing_brace(yytext[1]);
  +    BEGIN(SS_FQ);
  +}
  +<SS_FQ>\\[\!\"\#\$\%\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\@\[\\\]\^\_\`\{\|\}\~] {
  +    if (yytext[1] == cQuoteOpen || yytext[1] == cQuoteClose) {
  +        *cpStr++ = yytext[1];
  +    }
  +    else {
  +        *cpStr++ = yytext[0];
  +        *cpStr++ = yytext[1];
  +    }
  +}
  +<SS_FQ>[^\!\"\#\$\%\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\@\[\\\]\^\_\`\{\|\}\~] {
  +    char *cp = yytext;
  +    while (*cp != '\0')
  +        *cpStr++ = *cp++;
  +}
  +<SS_FQ>(.|\n) {
  +    if (yytext[0] == cQuoteOpen)
  +        nQuoteOpen++;
  +    else if (yytext[0] == cQuoteClose)
  +        nQuoteOpen--;
  +    if (yytext[0] == cQuoteClose && nQuoteOpen == 0) {
  +        *cpStr = '\0';
  +        yylval->cpString = strdup(caStr);
  +        BEGIN(INITIAL);
  +        return T_STRING;
  +    }
  +    else {
  +        *cpStr++ = yytext[0];
  +    }
   }
   
      /* special tokens */
  -";" { return T_SEP; }
  -"{" { return T_OPEN; }
  +";" { return T_SEP;   }
  +"{" { return T_OPEN;  }
   "}" { return T_CLOSE; }
   
  -   /* anything else is returned as is... */
  -.|\n {
  -    return yytext[0];
  +    /* plain text word */
  +(.|\n) {
  +    cpStr = caStr;
  +    *cpStr++ = yytext[0];
  +    BEGIN(SS_PT);
  +}
  +<SS_PT>[^ \t\n;{}"']+ {
  +    char *cp = yytext;
  +    while (*cp != '\0')
  +        *cpStr++ = *cp++;
  +}
  +<SS_PT>(.|\n) {
  +    *cpStr = '\0';
  +    yylval->cpString = strdup(caStr);
  +    yyless(0);
  +    BEGIN(INITIAL);
  +    return T_STRING;
   }
   
   %%
  @@ -216,5 +273,27 @@
       memcpy(buf, ctx->inputptr, n);
       ctx->inputptr += n;
       return n;
  +}
  +
  +/* closing brace */
  +static char closing_brace(char open)
  +{
  +    static struct {
  +        char open;
  +        char close;
  +    } openclose[] = {
  +        { '(', ')' },
  +        { '{', '}' },
  +        { '{', ']' },
  +        { '<', '>' },
  +        { '`', '\'' },
  +    };
  +    int i;
  +
  +    for (i = 0; i < sizeof(openclose)/sizeof(openclose[0]); i++) {
  +        if (openclose[i].open == open)
  +            return (char)openclose[i].close;
  +    }
  +    return open;
   }
   
  Index: ossp-pkg/cfg/sample2.cfg
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 sample2.cfg
  --- ossp-pkg/cfg/sample2.cfg	4 Jul 2002 14:51:21 -0000	1.1
  +++ ossp-pkg/cfg/sample2.cfg	5 Jul 2002 14:33:10 -0000	1.2
  @@ -1,6 +1,6 @@
   
   foo;
  -bar1 "bar2 bar2b";
  +bar1 q{ f{o}o } 'foo;' "bar2 bar2b";
   quux1 { 
       quux1a; 
       quux1b;

From ossp-cvs-owner@ossp.org  Fri Jul  5 17:11:21 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0A4EE763F3; Fri,  5 Jul 2002 17:11:20 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg cfg_syn_scan.l
Message-Id: <20020705151120.0A4EE763F3@mail.ossp.org>
Date: Fri,  5 Jul 2002 17:11:20 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Jul-2002 17:11:20
  Branch: HEAD                             Handle: 2002070516112000

  Modified files:
    ossp-pkg/cfg            cfg_syn_scan.l

  Log:
    fix q(..) construct for q|..| situation, i.e., open and close chars the same

  Summary:
    Revision    Changes     Path
    1.3         +7  -7      ossp-pkg/cfg/cfg_syn_scan.l
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/cfg_syn_scan.l
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 cfg_syn_scan.l
  --- ossp-pkg/cfg/cfg_syn_scan.l	5 Jul 2002 14:33:10 -0000	1.2
  +++ ossp-pkg/cfg/cfg_syn_scan.l	5 Jul 2002 15:11:20 -0000	1.3
  @@ -206,19 +206,20 @@
           *cpStr++ = *cp++;
   }
   <SS_FQ>(.|\n) {
  -    if (yytext[0] == cQuoteOpen)
  -        nQuoteOpen++;
  -    else if (yytext[0] == cQuoteClose)
  -        nQuoteOpen--;
  +    if (yytext[0] == cQuoteOpen || yytext[0] == cQuoteClose) {
  +        if (cQuoteOpen != cQuoteClose)
  +            nQuoteOpen += (yytext[0] == cQuoteOpen ? 1 : -1);
  +        else
  +            nQuoteOpen = ((nQuoteOpen + 1) % 2);
  +    }
       if (yytext[0] == cQuoteClose && nQuoteOpen == 0) {
           *cpStr = '\0';
           yylval->cpString = strdup(caStr);
           BEGIN(INITIAL);
           return T_STRING;
       }
  -    else {
  +    else
           *cpStr++ = yytext[0];
  -    }
   }
   
      /* special tokens */
  @@ -286,7 +287,6 @@
           { '{', '}' },
           { '{', ']' },
           { '<', '>' },
  -        { '`', '\'' },
       };
       int i;
   

From ossp-cvs-owner@ossp.org  Fri Jul  5 17:21:20 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0CE66767FF; Fri,  5 Jul 2002 17:21:19 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg cfg_syn.c
Message-Id: <20020705152119.0CE66767FF@mail.ossp.org>
Date: Fri,  5 Jul 2002 17:21:19 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Jul-2002 17:21:19
  Branch: HEAD                             Handle: 2002070516211900

  Modified files:
    ossp-pkg/cfg            cfg_syn.c

  Log:
    fix memory free

  Summary:
    Revision    Changes     Path
    1.4         +7  -5      ossp-pkg/cfg/cfg_syn.c
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/cfg_syn.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 cfg_syn.c
  --- ossp-pkg/cfg/cfg_syn.c	5 Jul 2002 14:33:10 -0000	1.3
  +++ ossp-pkg/cfg/cfg_syn.c	5 Jul 2002 15:21:19 -0000	1.4
  @@ -167,20 +167,22 @@
   {
       int i;
       char *cp;
  +    char *cp2;
       va_list ap;
       char *str;
   
       va_start(ap, fmt);
       if ((str = cfg_fmt_vasprintf(fmt, ap)) == NULL)
           return;
  -    while ((cp = strchr(str, '\n')) != NULL) {
  -        cfg_buf_format(ctx->buf, "%.*s", cp-str+1, str);
  +    cp = str;
  +    while ((cp2 = strchr(cp, '\n')) != NULL) {
  +        cfg_buf_format(ctx->buf, "%.*s", cp2-cp+1, cp);
           for (i = 0; i < ctx->indent; i++)
               cfg_buf_format(ctx->buf, "    ");
  -        str = cp+1;
  +        cp = cp2+1;
       }
  -    if (str[0] != '\0')
  -        cfg_buf_format(ctx->buf, "%s", str);
  +    if (cp[0] != '\0')
  +        cfg_buf_format(ctx->buf, "%s", cp);
       free(str);
       va_end(ap);
       return;

From ossp-cvs-owner@ossp.org  Fri Jul  5 17:32:43 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7D2AB763F3; Fri,  5 Jul 2002 17:32:43 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg Makefile cfg.h cfg_node.c cfg_syn.c cfg_syn.h...
Message-Id: <20020705153243.7D2AB763F3@mail.ossp.org>
Date: Fri,  5 Jul 2002 17:32:43 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Jul-2002 17:32:43
  Branch: HEAD                             Handle: 2002070516324200

  Modified files:
    ossp-pkg/cfg            Makefile cfg.h cfg_node.c cfg_syn.c cfg_syn.h
                            cfg_test.c

  Log:
    thanks to Dmalloc we can fix the memory holes

  Summary:
    Revision    Changes     Path
    1.5         +5  -2      ossp-pkg/cfg/Makefile
    1.4         +3  -0      ossp-pkg/cfg/cfg.h
    1.4         +2  -0      ossp-pkg/cfg/cfg_node.c
    1.5         +20 -0      ossp-pkg/cfg/cfg_syn.c
    1.3         +3  -2      ossp-pkg/cfg/cfg_syn.h
    1.3         +1  -0      ossp-pkg/cfg/cfg_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/Makefile
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 Makefile
  --- ossp-pkg/cfg/Makefile	4 Jul 2002 14:51:21 -0000	1.4
  +++ ossp-pkg/cfg/Makefile	5 Jul 2002 15:32:42 -0000	1.5
  @@ -6,8 +6,11 @@
   		 -Wshadow -Wpointer-arith \
            -Wbad-function-cast -Wcast-align \
   		 -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations \
  -         -Wredundant-decls -Wnested-externs -Winline
  +         -Wredundant-decls -Wnested-externs -Winline \
  +		 -DDMALLOCx -I/usr/opkg/include
   #CFLAGS = -Wundef -W -Wconversion -Wfloat-equal -Wunreachable-code -Wwrite-strings 
  +LDFLAGS = -L/usr/opkg/lib
  +LIBS    = # -ldmalloc
   AR     = ar
   RANLIB = ranlib
   RM     = rm -f
  @@ -35,7 +38,7 @@
   	$(RANLIB) $(LIB)
   
   $(TST): $(TST).o $(LIB)
  -	$(CC) -o $(TST) $(TST).o $(LIB)
  +	$(CC) $(LDFLAGS) -o $(TST) $(TST).o $(LIB) $(LIBS)
   
   clean:
   	$(RM) $(LIB)
  Index: ossp-pkg/cfg/cfg.h
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 cfg.h
  --- ossp-pkg/cfg/cfg.h	4 Jul 2002 12:30:08 -0000	1.3
  +++ ossp-pkg/cfg/cfg.h	5 Jul 2002 15:32:42 -0000	1.4
  @@ -31,6 +31,9 @@
   #ifndef __CFG_H__
   #define __CFG_H__
   
  +#ifdef DMALLOC
  +#include <dmalloc.h>
  +#endif
   #include <stdarg.h>
   
   /* ============================================================ */
  Index: ossp-pkg/cfg/cfg_node.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 cfg_node.c
  --- ossp-pkg/cfg/cfg_node.c	4 Jul 2002 12:30:08 -0000	1.3
  +++ ossp-pkg/cfg/cfg_node.c	5 Jul 2002 15:32:42 -0000	1.4
  @@ -254,6 +254,8 @@
   {
       if (node == NULL)
           return CFG_ERR_ARG;
  +    if (node->token != NULL)
  +        free(node->token);
       free(node);
       return CFG_OK;
   }
  Index: ossp-pkg/cfg/cfg_syn.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 cfg_syn.c
  --- ossp-pkg/cfg/cfg_syn.c	5 Jul 2002 15:21:19 -0000	1.4
  +++ ossp-pkg/cfg/cfg_syn.c	5 Jul 2002 15:32:42 -0000	1.5
  @@ -275,3 +275,23 @@
       return CFG_OK;
   }
   
  +static cfg_rc_t cfg_syn_destroy_node(cfg_node_t *node)
  +{
  +    if (node == NULL)
  +        return CFG_ERR_ARG;
  +    if (node->child1 != NULL)
  +        cfg_syn_destroy_node(node->child1);
  +    if (node->rbroth != NULL)
  +        cfg_syn_destroy_node(node->rbroth);
  +    cfg_node_destroy(node);
  +    return CFG_OK;
  +}
  +
  +cfg_rc_t cfg_syn_destroy(cfg_t *cfg, cfg_node_t *node)
  +{
  +    if (node == NULL)
  +        return CFG_ERR_ARG;
  +    cfg_syn_destroy_node(node);
  +    return CFG_OK;
  +}
  +
  Index: ossp-pkg/cfg/cfg_syn.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 cfg_syn.h
  --- ossp-pkg/cfg/cfg_syn.h	4 Jul 2002 14:51:21 -0000	1.2
  +++ ossp-pkg/cfg/cfg_syn.h	5 Jul 2002 15:32:42 -0000	1.3
  @@ -65,8 +65,9 @@
   #define last_column  last
   
   /* internal API */
  -extern cfg_rc_t cfg_syn_import (cfg_t *cfg, cfg_node_t **node, const char *input, char *err_buf, size_t err_len);
  -extern cfg_rc_t cfg_syn_export (cfg_t *cfg, cfg_node_t *node, char **output);
  +extern cfg_rc_t cfg_syn_import  (cfg_t *cfg, cfg_node_t **node, const char *input, char *err_buf, size_t err_len);
  +extern cfg_rc_t cfg_syn_export  (cfg_t *cfg, cfg_node_t *node, char **output);
  +extern cfg_rc_t cfg_syn_destroy (cfg_t *cfg, cfg_node_t *node);
   
   /* error reporting function */
   extern void cfg_syn_error(cfg_syn_ctx_t *ctx, cfg_rc_t rv, YYLTYPE *loc, const char *fmt, ...);
  Index: ossp-pkg/cfg/cfg_test.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 cfg_test.c
  --- ossp-pkg/cfg/cfg_test.c	4 Jul 2002 14:51:21 -0000	1.2
  +++ ossp-pkg/cfg/cfg_test.c	5 Jul 2002 15:32:42 -0000	1.3
  @@ -32,6 +32,7 @@
           fprintf(stderr, "ERROR: %s\n", err_buf);
       else {
           cfg_syn_export(NULL, node, &buf_ptr);
  +        cfg_syn_destroy(NULL, node);
           fprintf(stdout, "%s\n", buf_ptr);
       }
   

From ossp-cvs-owner@ossp.org  Fri Jul  5 19:15:15 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 94D7376431; Fri,  5 Jul 2002 19:15:15 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg cfg_buf.c cfg_buf.h cfg_syn.c
Message-Id: <20020705171515.94D7376431@mail.ossp.org>
Date: Fri,  5 Jul 2002 19:15:15 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Jul-2002 19:15:15
  Branch: HEAD                             Handle: 2002070518151400

  Modified files:
    ossp-pkg/cfg            cfg_buf.c cfg_buf.h cfg_syn.c

  Log:
    fix indentation in export output

  Summary:
    Revision    Changes     Path
    1.3         +7  -7      ossp-pkg/cfg/cfg_buf.c
    1.3         +1  -1      ossp-pkg/cfg/cfg_buf.h
    1.6         +5  -2      ossp-pkg/cfg/cfg_syn.c
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/cfg_buf.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 cfg_buf.c
  --- ossp-pkg/cfg/cfg_buf.c	4 Jul 2002 14:51:21 -0000	1.2
  +++ ossp-pkg/cfg/cfg_buf.c	5 Jul 2002 17:15:14 -0000	1.3
  @@ -48,7 +48,7 @@
       return CFG_OK;
   }
   
  -cfg_rc_t cfg_buf_resize(cfg_buf_t *buf, int n)
  +cfg_rc_t cfg_buf_resize(cfg_buf_t *buf, signed int n)
   {
       char *cp;
   
  @@ -65,9 +65,9 @@
       else {
           /* shrink or grow buffer */
           if (buf->buf_ptr == NULL) {
  -            if ((buf->buf_ptr = malloc(n)) == NULL)
  +            if ((buf->buf_ptr = malloc(n+1)) == NULL)
                   return CFG_ERR_SYS;
  -            buf->buf_size = n;
  +            buf->buf_size = n+1;
               buf->buf_len  = 0;
           }
           else {
  @@ -75,9 +75,9 @@
                   return CFG_ERR_SYS;
               buf->buf_ptr = cp;
               buf->buf_size += n;
  -            if (buf->buf_len > buf->buf_size) {
  -                buf->buf_len = buf->buf_size;
  -                *(buf->buf_ptr + buf->buf_len - 1) = '\0';
  +            if (buf->buf_len >= buf->buf_size) {
  +                buf->buf_len = buf->buf_size-1;
  +                *(buf->buf_ptr + buf->buf_len) = '\0';
               }
           }
       }
  @@ -104,7 +104,7 @@
           return CFG_ERR_ARG;
       if ((n = cfg_fmt_vsprintf(NULL, -1, fmt, ap)) == -1)
           return CFG_ERR_FMT;
  -    if ((rc = cfg_buf_resize(buf, n+1)) != CFG_OK)
  +    if ((rc = cfg_buf_resize(buf, n)) != CFG_OK)
           return rc;
       if ((n = cfg_fmt_vsprintf(buf->buf_ptr + buf->buf_len, 
                                 buf->buf_size - buf->buf_len, 
  Index: ossp-pkg/cfg/cfg_buf.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 cfg_buf.h
  --- ossp-pkg/cfg/cfg_buf.h	4 Jul 2002 14:51:21 -0000	1.2
  +++ ossp-pkg/cfg/cfg_buf.h	5 Jul 2002 17:15:14 -0000	1.3
  @@ -43,7 +43,7 @@
   };
   
   extern cfg_rc_t cfg_buf_create  (cfg_buf_t **buf);
  -extern cfg_rc_t cfg_buf_resize  (cfg_buf_t  *buf, int n);
  +extern cfg_rc_t cfg_buf_resize  (cfg_buf_t  *buf, signed int n);
   extern cfg_rc_t cfg_buf_format  (cfg_buf_t  *buf, const char *fmt, ...);
   extern cfg_rc_t cfg_buf_vformat (cfg_buf_t  *buf, const char *fmt, va_list ap);
   extern cfg_rc_t cfg_buf_content (cfg_buf_t  *buf, char **ptr, size_t *len, size_t *size);
  Index: ossp-pkg/cfg/cfg_syn.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 cfg_syn.c
  --- ossp-pkg/cfg/cfg_syn.c	5 Jul 2002 15:32:42 -0000	1.5
  +++ ossp-pkg/cfg/cfg_syn.c	5 Jul 2002 17:15:14 -0000	1.6
  @@ -188,7 +188,7 @@
       return;
   }
   
  -static void export_indent(export_t *ctx, int n)
  +static void export_indent(export_t *ctx, signed int n)
   {
       if (n > 0) {
           while (n > 0) {
  @@ -242,7 +242,10 @@
               if (node2 != NULL)
                   export_format(ctx, " ");
           }
  -        export_format(ctx, ";\n");
  +        cfg_node_goto(node, CFG_NODE_GOTO_RBROTH, &node2);
  +        if (node2 != NULL)
  +            export_format(ctx, ";");
  +        export_format(ctx, "\n");
       }
       else if (type == CFG_NODE_TYPE_TOK) {
           cfg_node_get(node, CFG_NODE_ATTR_TOKEN, &token);

From ossp-cvs-owner@ossp.org  Fri Jul  5 19:21:41 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2395C767D7; Fri,  5 Jul 2002 19:21:41 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg cfg_syn.c
Message-Id: <20020705172141.2395C767D7@mail.ossp.org>
Date: Fri,  5 Jul 2002 19:21:41 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Jul-2002 19:21:41
  Branch: HEAD                             Handle: 2002070518214000

  Modified files:
    ossp-pkg/cfg            cfg_syn.c

  Log:
    remove top-level implicit indentation and sequence braces

  Summary:
    Revision    Changes     Path
    1.7         +11 -1      ossp-pkg/cfg/cfg_syn.c
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/cfg_syn.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 cfg_syn.c
  --- ossp-pkg/cfg/cfg_syn.c	5 Jul 2002 17:15:14 -0000	1.6
  +++ ossp-pkg/cfg/cfg_syn.c	5 Jul 2002 17:21:40 -0000	1.7
  @@ -270,11 +270,21 @@
           return CFG_ERR_ARG;
       if ((rc = cfg_buf_create(&buf)) != CFG_OK)
           return rc;
  +
       ctx.buf    = buf;
       ctx.indent = 0;
  -    export_node(&ctx, node);
  +
  +    /* first SEQ node is special, so expand it manually instead
  +       of just calling once export_node(&ctx, node); */
  +    cfg_node_goto(node, CFG_NODE_GOTO_CHILD1, &node);
  +    while (node != NULL) {
  +        export_node(&ctx, node);
  +        cfg_node_goto(node, CFG_NODE_GOTO_RBROTH, &node);
  +    }
  +
       cfg_buf_content(buf, output, NULL, NULL);
       cfg_buf_destroy(buf);
  +
       return CFG_OK;
   }
   

From ossp-cvs-owner@ossp.org  Fri Jul  5 19:30:24 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1A1B576969; Fri,  5 Jul 2002 19:30:24 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg 00TODO Makefile
Message-Id: <20020705173024.1A1B576969@mail.ossp.org>
Date: Fri,  5 Jul 2002 19:30:24 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Jul-2002 19:30:24
  Branch: HEAD                             Handle: 2002070518302300

  Modified files:
    ossp-pkg/cfg            00TODO Makefile

  Log:
    update

  Summary:
    Revision    Changes     Path
    1.3         +5  -5      ossp-pkg/cfg/00TODO
    1.6         +1  -0      ossp-pkg/cfg/Makefile
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/00TODO
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 00TODO
  --- ossp-pkg/cfg/00TODO	5 Jul 2002 14:33:10 -0000	1.2
  +++ ossp-pkg/cfg/00TODO	5 Jul 2002 17:30:23 -0000	1.3
  @@ -1,16 +1,16 @@
  +
  +- autoconf environment
  +- syntax verification
  +- command line query tool
  +
   - newline in error message
   $ ./cfg_test sample2.cfg 
   ERROR: <line 7, column 1: `1b;
   <}> quu'>
   
  -
  -cfg_test in free(): warning: modified (chunk-) pointer
  -
   - cfg_t
  -- cfg_node_destroy() for whole tree
   
   rewrite-uri <regex> <subst> { <rewrite-cond> }
  -
   rewrite-uri ^/(.*) /path/$1 --redirect=permanent "{
       %{SOURCE} != "x" 
   }";
  Index: ossp-pkg/cfg/Makefile
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 Makefile
  --- ossp-pkg/cfg/Makefile	5 Jul 2002 15:32:42 -0000	1.5
  +++ ossp-pkg/cfg/Makefile	5 Jul 2002 17:30:23 -0000	1.6
  @@ -51,4 +51,5 @@
   check: test
   test: $(TST)
   	./$(TST) sample.cfg
  +	./$(TST) sample2.cfg
   

From ossp-cvs-owner@ossp.org  Fri Jul  5 20:32:37 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AC328767D8; Fri,  5 Jul 2002 20:32:37 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg cfg_syn.c cfg_syn_scan.l cfg_test.c sample2.c...
Message-Id: <20020705183237.AC328767D8@mail.ossp.org>
Date: Fri,  5 Jul 2002 20:32:37 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Jul-2002 20:32:37
  Branch: HEAD                             Handle: 2002070519323700

  Modified files:
    ossp-pkg/cfg            cfg_syn.c cfg_syn_scan.l cfg_test.c sample2.cfg

  Log:
    Add line-continuation support and make export output correctly
    quote the tokens.

  Summary:
    Revision    Changes     Path
    1.8         +31 -3      ossp-pkg/cfg/cfg_syn.c
    1.4         +16 -1      ossp-pkg/cfg/cfg_syn_scan.l
    1.4         +1  -1      ossp-pkg/cfg/cfg_test.c
    1.3         +5  -2      ossp-pkg/cfg/sample2.cfg
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/cfg_syn.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 cfg_syn.c
  --- ossp-pkg/cfg/cfg_syn.c	5 Jul 2002 17:21:40 -0000	1.7
  +++ ossp-pkg/cfg/cfg_syn.c	5 Jul 2002 18:32:37 -0000	1.8
  @@ -208,10 +208,38 @@
   
   static void export_token(export_t *ctx, const char *token)
   {
  -    if (strcspn(token, " {};\\") != strlen(token))
  -        export_format(ctx, "\"%s\"", token);
  -    else
  +    const char *cp;
  +    char *out;
  +    int n;
  +
  +    if (strcspn(token, " \n\r\t\b\f;{}\\\"'") == strlen(token))
  +        /* plain text token */
           export_format(ctx, "%s", token);
  +    else {
  +        export_format(ctx, "\"");
  +        cp = token;
  +        while (*cp != '\0') {
  +            if ((n = strcspn(cp, "\n\r\t\b\f\\\"")) > 0) {
  +                export_format(ctx, "%.*s", n, cp);
  +                cp += n;
  +            }
  +            else {
  +                switch (*cp) {
  +                    case '\n': out = "\\n";  break;
  +                    case '\r': out = "\\r";  break;
  +                    case '\t': out = "\\t";  break;
  +                    case '\b': out = "\\b";  break;
  +                    case '\f': out = "\\f";  break;
  +                    case '\\': out = "\\\\"; break;
  +                    case '"' : out = "\\\""; break;
  +                    default  : out = "";
  +                }
  +                export_format(ctx, "%s", out);
  +                cp++;
  +            }
  +        }
  +        export_format(ctx, "\"");
  +    }
       return;
   }
   
  Index: ossp-pkg/cfg/cfg_syn_scan.l
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 cfg_syn_scan.l
  --- ossp-pkg/cfg/cfg_syn_scan.l	5 Jul 2002 15:11:20 -0000	1.3
  +++ ossp-pkg/cfg/cfg_syn_scan.l	5 Jul 2002 18:32:37 -0000	1.4
  @@ -139,6 +139,9 @@
       }
       *cpStr++ = result;
   }
  +<SS_DQ>\\\n[ \t]* {
  +    /* no-op */
  +}
   <SS_DQ>\\n { *cpStr++ = '\n'; }
   <SS_DQ>\\r { *cpStr++ = '\r'; }
   <SS_DQ>\\t { *cpStr++ = '\t'; }
  @@ -167,6 +170,9 @@
       BEGIN(INITIAL);
       return T_STRING;
   }
  +<SS_SQ>\\\n[ \t]* {
  +    /* no-op */
  +}
   <SS_SQ>\\(.|\n) {
       *cpStr++ = yytext[1];
   }
  @@ -200,6 +206,9 @@
           *cpStr++ = yytext[1];
       }
   }
  +<SS_FQ>\\\n[ \t]* {
  +    /* no-op */
  +}
   <SS_FQ>[^\!\"\#\$\%\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\@\[\\\]\^\_\`\{\|\}\~] {
       char *cp = yytext;
       while (*cp != '\0')
  @@ -228,12 +237,18 @@
   "}" { return T_CLOSE; }
   
       /* plain text word */
  +\\\n[ \t]* {
  +    /* no-op */
  +}
   (.|\n) {
       cpStr = caStr;
       *cpStr++ = yytext[0];
       BEGIN(SS_PT);
   }
  -<SS_PT>[^ \t\n;{}"']+ {
  +<SS_PT>\\\n[ \t]* {
  +    /* no-op */
  +}
  +<SS_PT>[^ \t\n;{}\\"']+ {
       char *cp = yytext;
       while (*cp != '\0')
           *cpStr++ = *cp++;
  Index: ossp-pkg/cfg/cfg_test.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 cfg_test.c
  --- ossp-pkg/cfg/cfg_test.c	5 Jul 2002 15:32:42 -0000	1.3
  +++ ossp-pkg/cfg/cfg_test.c	5 Jul 2002 18:32:37 -0000	1.4
  @@ -33,7 +33,7 @@
       else {
           cfg_syn_export(NULL, node, &buf_ptr);
           cfg_syn_destroy(NULL, node);
  -        fprintf(stdout, "%s\n", buf_ptr);
  +        fprintf(stdout, "%s", buf_ptr);
       }
   
       return 0;
  Index: ossp-pkg/cfg/sample2.cfg
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 sample2.cfg
  --- ossp-pkg/cfg/sample2.cfg	5 Jul 2002 14:33:10 -0000	1.2
  +++ ossp-pkg/cfg/sample2.cfg	5 Jul 2002 18:32:37 -0000	1.3
  @@ -1,11 +1,14 @@
   
   foo;
  -bar1 q{ f{o}o } 'foo;' "bar2 bar2b";
  +bar1 q{ f{o}o } 'foo;' "bar2 bar2b" "foo\nbar" q(foo
  +bar
  +quux);
   quux1 { 
       quux1a; 
       quux1b;
   } quux2 {
  -    quux2a;
  +    q(quu\
  +    x2a);
       quux2b;
   };
   

From ossp-cvs-owner@ossp.org  Fri Jul  5 22:17:16 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9F62C767D7; Fri,  5 Jul 2002 22:17:16 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var var.c
Message-Id: <20020705201716.9F62C767D7@mail.ossp.org>
Date: Fri,  5 Jul 2002 22:17:16 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Jul-2002 22:17:16
  Branch: HEAD                             Handle: 2002070521171600

  Modified files:
    ossp-pkg/var            var.c

  Log:
    bugfix hex decoding

  Summary:
    Revision    Changes     Path
    1.90        +3  -3      ossp-pkg/var/var.c
  ____________________________________________________________________________

  Index: ossp-pkg/var/var.c
  ============================================================
  $ cvs diff -u -r1.89 -r1.90 var.c
  --- ossp-pkg/var/var.c	8 Mar 2002 12:55:52 -0000	1.89
  +++ ossp-pkg/var/var.c	5 Jul 2002 20:17:16 -0000	1.90
  @@ -527,9 +527,9 @@
   
       if (**src >= '0' && **src <= '9')
           c = **src - '0';
  -    else if (c >= 'a' && c <= 'f')
  +    else if (**src >= 'a' && **src <= 'f')
           c = **src - 'a' + 10;
  -    else if (c >= 'A' && c <= 'F')
  +    else if (**src >= 'A' && **src <= 'F')
           c = **src - 'A' + 10;
   
       c = c << 4;
  @@ -542,7 +542,7 @@
       else if (**src >= 'A' && **src <= 'F')
           c += **src - 'A' + 10;
   
  -    **dst = (char) c;
  +    **dst = (char)c;
       (*dst)++;
       return VAR_OK;
   }

From ossp-cvs-owner@ossp.org  Fri Jul  5 22:49:58 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7F317767D7; Fri,  5 Jul 2002 22:49:58 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg cfg_syn.c cfg_syn_scan.l sample2.cfg
Message-Id: <20020705204958.7F317767D7@mail.ossp.org>
Date: Fri,  5 Jul 2002 22:49:58 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Jul-2002 22:49:58
  Branch: HEAD                             Handle: 2002070521495800

  Modified files:
    ossp-pkg/cfg            cfg_syn.c cfg_syn_scan.l sample2.cfg

  Log:
    More scanner enhancement for supporting Perl-style \x{HHHHHH} sequences
    and for better escaping in export output.

  Summary:
    Revision    Changes     Path
    1.9         +28 -19     ossp-pkg/cfg/cfg_syn.c
    1.5         +49 -10     ossp-pkg/cfg/cfg_syn_scan.l
    1.4         +2  -2      ossp-pkg/cfg/sample2.cfg
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/cfg_syn.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 cfg_syn.c
  --- ossp-pkg/cfg/cfg_syn.c	5 Jul 2002 18:32:37 -0000	1.8
  +++ ossp-pkg/cfg/cfg_syn.c	5 Jul 2002 20:49:58 -0000	1.9
  @@ -29,6 +29,7 @@
   */
   
   #include <stdio.h>
  +#include <ctype.h>
   
   #include "cfg.h"
   #include "cfg_grid.h"
  @@ -210,32 +211,40 @@
   {
       const char *cp;
       char *out;
  -    int n;
  +    int plain;
  +    char c;
   
  -    if (strcspn(token, " \n\r\t\b\f;{}\\\"'") == strlen(token))
  -        /* plain text token */
  +    plain = 1;
  +    for (cp = token; *cp != '\0'; cp++) {
  +        if (   !isprint((int)(*cp)) 
  +            || strchr(" \n\r\t\b\f;{}\\\"'", (int)(*cp)) != NULL) {
  +            plain = 0;
  +            break;
  +        }
  +    }
  +    if (plain)
           export_format(ctx, "%s", token);
       else {
           export_format(ctx, "\"");
           cp = token;
  -        while (*cp != '\0') {
  -            if ((n = strcspn(cp, "\n\r\t\b\f\\\"")) > 0) {
  -                export_format(ctx, "%.*s", n, cp);
  -                cp += n;
  +        while ((c = *cp++) != '\0') {
  +            out = NULL;
  +            switch (c) {
  +                case '\n': out = "\\n";  break;
  +                case '\r': out = "\\r";  break;
  +                case '\t': out = "\\t";  break;
  +                case '\b': out = "\\b";  break;
  +                case '\f': out = "\\f";  break;
  +                case '\\': out = "\\\\"; break;
  +                case '"' : out = "\\\""; break;
               }
  -            else {
  -                switch (*cp) {
  -                    case '\n': out = "\\n";  break;
  -                    case '\r': out = "\\r";  break;
  -                    case '\t': out = "\\t";  break;
  -                    case '\b': out = "\\b";  break;
  -                    case '\f': out = "\\f";  break;
  -                    case '\\': out = "\\\\"; break;
  -                    case '"' : out = "\\\""; break;
  -                    default  : out = "";
  -                }
  +            if (out != NULL)
                   export_format(ctx, "%s", out);
  -                cp++;
  +            else {
  +                if (isprint((int)c))
  +                    export_format(ctx, "%c", c);
  +                else
  +                    export_format(ctx, "\\x%02x", c);
               }
           }
           export_format(ctx, "\"");
  Index: ossp-pkg/cfg/cfg_syn_scan.l
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 cfg_syn_scan.l
  --- ossp-pkg/cfg/cfg_syn_scan.l	5 Jul 2002 18:32:37 -0000	1.4
  +++ ossp-pkg/cfg/cfg_syn_scan.l	5 Jul 2002 20:49:58 -0000	1.5
  @@ -59,6 +59,8 @@
       yylloc->last = yylloc->first
   
   static char closing_brace(char open);
  +static int hex_nibble(const char hex);
  +static int hex_sequence(char *out_ptr, size_t out_len, const char *in_ptr, size_t in_len);
   %}
   
   /* scanner options */
  @@ -121,6 +123,9 @@
       BEGIN(INITIAL);
       return T_STRING;
   }
  +<SS_DQ>\\\n[ \t]* {
  +    /* no-op */
  +}
   <SS_DQ>\\[0-7]{1,3} {
       unsigned int result;
       (void)sscanf(yytext+1, "%o", &result);
  @@ -130,23 +135,19 @@
       }
       *cpStr++ = result;
   }
  -<SS_DQ>\\x[0-9a-fA-F]{2} {
  -    unsigned int result;
  -    (void)sscanf(yytext+1, "%x", &result);
  -    if (result > 0xff) {
  -        cfg_syn_error(CTX, CFG_ERR_SYN, yylloc, "escape sequence out of bound");
  -        return 0;
  -    }
  -    *cpStr++ = result;
  +<SS_DQ>\\x\{[0-9a-fA-F]+\} {
  +    cpStr += hex_sequence(cpStr, sizeof(caStr)-(cpStr-caStr), yytext+3, yyleng-3-1);
   }
  -<SS_DQ>\\\n[ \t]* {
  -    /* no-op */
  +<SS_DQ>\\x[0-9a-fA-F]{2} {
  +    cpStr += hex_sequence(cpStr, sizeof(caStr)-(cpStr-caStr), yytext+2, 2);
   }
   <SS_DQ>\\n { *cpStr++ = '\n'; }
   <SS_DQ>\\r { *cpStr++ = '\r'; }
   <SS_DQ>\\t { *cpStr++ = '\t'; }
   <SS_DQ>\\b { *cpStr++ = '\b'; }
   <SS_DQ>\\f { *cpStr++ = '\f'; }
  +<SS_DQ>\\a { *cpStr++ = '\007'; }
  +<SS_DQ>\\e { *cpStr++ = '\033'; }
   <SS_DQ>\\(.|\n) {
       *cpStr++ = yytext[1];
   }
  @@ -310,5 +311,43 @@
               return (char)openclose[i].close;
       }
       return open;
  +}
  +
  +/* convert a hex digit into a nibble */
  +static int hex_nibble(const char hex)
  +{
  +    unsigned char nibble;
  +
  +    if (hex >= '0' && hex <= '9')
  +        nibble = (unsigned char)(hex - '0');
  +    else if (hex >= 'a' && hex <= 'f')
  +        nibble = (unsigned char)(hex - 'a' + 10);
  +    else if (hex >= 'A' && hex <= 'F')
  +        nibble = (unsigned char)(hex - 'A' + 10);
  +    else 
  +        nibble = -1;
  +    return nibble;
  +}
  +
  +/* convert a hex digit sequence into an octet stream */
  +static int hex_sequence(char *out_ptr, size_t out_len, const char *in_ptr, size_t in_len)
  +{
  +    int i;
  +    size_t out_max;
  +
  +    out_max = out_len;
  +    if (in_len % 2 != 0) {
  +        *out_ptr++ = hex_nibble(in_ptr[0]);
  +        out_len--;
  +        in_ptr++;
  +        in_len--;
  +    }
  +    for (i = 0; in_len > 0 && out_len > 0; i++) {
  +        *out_ptr++ = ((hex_nibble(in_ptr[0]) << 4) | (hex_nibble(in_ptr[1])));
  +        out_len--;
  +        in_ptr += 2;
  +        in_len -= 2;
  +    }
  +    return (out_max - out_len);
   }
   
  Index: ossp-pkg/cfg/sample2.cfg
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 sample2.cfg
  --- ossp-pkg/cfg/sample2.cfg	5 Jul 2002 18:32:37 -0000	1.3
  +++ ossp-pkg/cfg/sample2.cfg	5 Jul 2002 20:49:58 -0000	1.4
  @@ -1,8 +1,8 @@
   
  -foo;
  +foo "<\x40\x41\x42>" "<\x{1404142}>" abd;
   bar1 q{ f{o}o } 'foo;' "bar2 bar2b" "foo\nbar" q(foo
   bar
  -quux);
  +quux) "foo\n\r	bar";
   quux1 { 
       quux1a; 
       quux1b;

From ossp-cvs-owner@ossp.org  Sat Jul  6 14:23:44 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0A5117668B; Sat,  6 Jul 2002 14:23:43 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg cfg.pod
Message-Id: <20020706122343.0A5117668B@mail.ossp.org>
Date: Sat,  6 Jul 2002 14:23:43 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Jul-2002 14:23:43
  Branch: HEAD                             Handle: 2002070613234300

  Modified files:
    ossp-pkg/cfg            cfg.pod

  Log:
    document flexible quoted string and line continuation

  Summary:
    Revision    Changes     Path
    1.2         +25 -2      ossp-pkg/cfg/cfg.pod
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/cfg.pod
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 cfg.pod
  --- ossp-pkg/cfg/cfg.pod	3 Jul 2002 13:25:34 -0000	1.1
  +++ ossp-pkg/cfg/cfg.pod	6 Jul 2002 12:23:43 -0000	1.2
  @@ -64,6 +64,7 @@
   
   B<string>        ::= B<DQ_STRING>   # double quoted string
                   | B<SQ_STRING>   # single quoted string
  +                | B<FQ_STRING>   # flexible quoted string
                   | B<PT_STRING>   # plain text string
   
   The other contained terminal symbols are defined itself by the following
  @@ -82,9 +83,10 @@
                   | B<DQ_CHAR> B<DQ_CHARS>
   
   B<DQ_CHAR>       ::= /\\"/               # escaped quote
  -                | /\\x[0-9a-zA-Z]{2}/ # hexadecimal char
  +                | /\\x\{[0-9a-fA-F]+\}/ # hex-char group
  +                | /\\x[0-9a-fA-F]{2}/ # hex-char
                   | /\\[0-7]{1,3}/      # octal character
  -                | /\\[trn]/           # TAB, CR, NL
  +                | /\\[nrtbfae]/       # NL,CR,TAB,BS,FF,BEL,ESC
                   | /\\\n[ \t]*/        # line continuation
                   | /\\\\/              # escaped escape
                   | /./                 # any other char
  @@ -99,6 +101,21 @@
                   | /\\\\/              # escaped escape
                   | /./                 # any other char
   
  +B<FQ_STRING>     ::= /q/ B<FQ_OPEN> B<FQ_CHARS> B<FQ_CLOSE>
  +
  +B<FQ_CHARS>      ::= I<empty>
  +                | B<FQ_CHAR> B<FQ_CHARS>
  +
  +B<FQ_CHAR>       ::= /\\/ B<FQ_OPEN>    # escaped open
  +                | /\\/ B<FQ_CLOSE>    # escaped close
  +                | /\\\n[ \t]*/        # line contination
  +                | /./                 # any other char
  +
  +B<FQ_OPEN>       ::= /[!"#$%&'()*+,-./:;<=>?@\[\\\]^_`{|}~]/
  +
  +B<FQ_CLOSE>      ::= "B<FQ_OPEN> or corresponding closing char
  +                  ('}])>') if B<FQ_OPEN> is a char of '{[(<'"
  +
   B<PT_STRING>     ::= B<PT_CHAR> B<PT_CHARS>
   
   B<PT_CHARS>      ::= I<empty>
  @@ -120,6 +137,12 @@
   B<CO_CXX>        ::= /\/\/[^\n]*/
   
   B<CO_SH>         ::= /#[^\n]*/
  +
  +Finally, any configuration line can have a trailing backslash character
  +(C<\>) just before the newline character for simple line continuation.
  +The backslash, the newline and (optionally) the leading whitespaces on
  +the following line are silently obsorbed and as a side-effect continue
  +the first line with the contents of the second lines.
   
   =head2 CONFIGURATION EXAMPLE
   

From ossp-cvs-owner@ossp.org  Sat Jul  6 20:44:47 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D362B7668B; Sat,  6 Jul 2002 20:44:46 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg cfg_syn_scan.l
Message-Id: <20020706184446.D362B7668B@mail.ossp.org>
Date: Sat,  6 Jul 2002 20:44:46 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Jul-2002 20:44:46
  Branch: HEAD                             Handle: 2002070619444600

  Modified files:
    ossp-pkg/cfg            cfg_syn_scan.l

  Log:
    Make sure 'a\b\\\'c' is parsed as "a\\b\\'c" and not "ab\\'c", i.e.
    follow the rules of the Perl '...' quoting and process only \\ and \'
    and keep all other escape sequences as is.

  Summary:
    Revision    Changes     Path
    1.6         +5  -1      ossp-pkg/cfg/cfg_syn_scan.l
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/cfg_syn_scan.l
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 cfg_syn_scan.l
  --- ossp-pkg/cfg/cfg_syn_scan.l	5 Jul 2002 20:49:58 -0000	1.5
  +++ ossp-pkg/cfg/cfg_syn_scan.l	6 Jul 2002 18:44:46 -0000	1.6
  @@ -174,7 +174,11 @@
   <SS_SQ>\\\n[ \t]* {
       /* no-op */
   }
  -<SS_SQ>\\(.|\n) {
  +<SS_SQ>\\[\\\'] {
  +    *cpStr++ = yytext[1];
  +}
  +<SS_SQ>\\[^\\\'] {
  +    *cpStr++ = yytext[0];
       *cpStr++ = yytext[1];
   }
   <SS_SQ>[^\\\']+ {

From ossp-cvs-owner@ossp.org  Sun Jul  7 20:11:26 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0749D767D7; Sun,  7 Jul 2002 20:11:25 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/SHARE ossp_navbar.wml ossp-web/pkg/tool/eperl .cv...
Message-Id: <20020707181125.0749D767D7@mail.ossp.org>
Date: Sun,  7 Jul 2002 20:11:25 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   07-Jul-2002 20:11:25
  Branch: HEAD                             Handle: 2002070719112401

  Added files:
    ossp-web/pkg/tool/eperl .cvsignore index.wml
  Modified files:
    ossp-web/SHARE          ossp_navbar.wml
    ossp-web/pkg/tool       index.wml

  Log:
    add OSSP eperl

  Summary:
    Revision    Changes     Path
    1.6         +1  -0      ossp-web/SHARE/ossp_navbar.wml
    1.1         +1  -0      ossp-web/pkg/tool/eperl/.cvsignore
    1.1         +52 -0      ossp-web/pkg/tool/eperl/index.wml
    1.14        +3  -0      ossp-web/pkg/tool/index.wml
  ____________________________________________________________________________

  Index: ossp-web/SHARE/ossp_navbar.wml
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 ossp_navbar.wml
  --- ossp-web/SHARE/ossp_navbar.wml	26 Apr 2002 15:39:34 -0000	1.5
  +++ ossp-web/SHARE/ossp_navbar.wml	7 Jul 2002 18:11:24 -0000	1.6
  @@ -230,6 +230,7 @@
     #   Packages, Tools
     <navbar:button txt="GNU shtool"       url=pkg/tool/shtool/         id=pkg:tool:shtool>
     <navbar:button txt="OSSP lmtp2nntp"   url=pkg/tool/lmtp2nntp/      id=pkg:tool:lmtp2nntp>
  +  <navbar:button txt="OSSP eperl"       url=pkg/tool/eperl/          id=pkg:tool:eperl>
     <navbar:button txt="OSSP petidomo"    url=pkg/tool/petidomo/       id=pkg:tool:petidomo>
     <navbar:button txt="OSSP shiela"      url=pkg/tool/shiela/         id=pkg:tool:shiela>
     <navbar:button txt="OSSP xenia"       url=pkg/tool/xenia/          id=pkg:tool:xenia>
  Index: ossp-web/pkg/tool/eperl/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/tool/eperl/index.wml
  ============================================================
  $ cvs update -p -r1.1 index.wml
  
  #use wml::ossp area=pkg:tool subarea=eperl
  
  <title>OSSP eperl</title>
  
  <h1>Embedded Perl Language</h1>
  
  <h2>Abstract</h2>
  
  OSSP eperl interprets a text file bristled with Perl program statements by
  evaluating the Perl code while passing through the plain text data. It can
  operate in various ways: As a stand-alone Unix filter or integrated Perl
  module for general file generation tasks and as a powerful webserver scripting
  language for dynamic HTML page programming.
  
  <p>
  OSSP eperl is a fully functional Perl interpreter because
  internally it makes use of the original Perl interpreter library
  (<tt>libperl.a</tt>). So OSSP eperl is based on the installed Perl system. The only
  noticeable difference to the user between the program <tt>eperl</tt> and
  <tt>perl</tt> is the source file format they use.
  
  <p>
  While traditional scripts are still run via <tt>perl</tt>, <tt>eperl</tt> is
  used to interpret any type of ASCII text containing embedded script parts.
  These embedded scripts are theirself traditional scripts.   So, ePerl is not a
  replacement for your original <tt>perl</tt> program. It is a variant for
  special programming contexts.  Because ePerl just provides the Perl scripting
  language in a different context of programming: the embedded style. But the
  language itself remains the same.  This way you can use all modules with
  <tt>eperl</tt> which are available in <tt>perl</tt>. Including those using the
  <tt>DynaLoader</tt> facility to load their shared objects under runtime.
  
  <h2>Authors</h2>
  
  <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  
  <h2>Status</h2>
  
  <pkg_status
      stable="2.2.14"  stable_date="02-Aug-1998"
      unstable="none"  unstable_date="none"
  	done=100>
  
  <h2>Source</h2>
  
  <pkg_files 
      url=$(FTP_ROOT_URL)/pkg/tool/eperl/
      directory=$(FTP_ROOT_DIR)/pkg/tool/eperl/
      files="eperl-*.tar.gz" 
  	stable="eperl-2.2.14.tar.gz" unstable="none">
  	
  Index: ossp-web/pkg/tool/index.wml
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 index.wml
  --- ossp-web/pkg/tool/index.wml	3 Jun 2002 07:05:02 -0000	1.13
  +++ ossp-web/pkg/tool/index.wml	7 Jul 2002 18:11:24 -0000	1.14
  @@ -16,6 +16,9 @@
     <pkg_item name="lmtp2nntp" longname="OSSP lmtp2nntp" type="tool"
               desc="Real-Time Mail to News Gateway"
               done=100 stable="1.1.1" unstable=1.2a5>
  +  <pkg_item name="eperl" longname="OSSP eperl" type="tool"
  +            desc="Embedded Perl Language"
  +	        done=100 stable="2.2.14" unstable="none">
     <pkg_item name="petidomo" longname="OSSP petidomo" type="tool" derived=yes
               desc="Mailing List Manager"
   	        done=95 stable="none" unstable="4.0b1">

From ossp-cvs-owner@ossp.org  Mon Jul  8 13:45:49 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C279476963; Mon,  8 Jul 2002 13:45:48 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Message-Id: <20020708114548.C279476963@mail.ossp.org>
Date: Mon,  8 Jul 2002 13:45:48 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: CVSROOT                          Date:   08-Jul-2002 13:45:48
  Branch: HEAD                             Handle: 2002070812454800

  Modified files:
    CVSROOT                 modules

  Log:
    add OSSP cfg

  Summary:
    Revision    Changes     Path
    1.58        +1  -0      CVSROOT/modules
  ____________________________________________________________________________

  Index: CVSROOT/modules
  ============================================================
  $ cvs diff -u -r1.57 -r1.58 modules
  --- CVSROOT/modules	5 Jul 2002 13:02:18 -0000	1.57
  +++ CVSROOT/modules	8 Jul 2002 11:45:48 -0000	1.58
  @@ -79,6 +79,7 @@
   ex              ossp-pkg/ex
   popt            ossp-pkg/popt
   tai             ossp-pkg/tai
  +cfg             ossp-pkg/cfg
   uuidgen         ossp-pkg/uuidgen
   
   #   the OSSP applications

From ossp-cvs-owner@ossp.org  Mon Jul  8 15:45:14 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4210F767E6; Mon,  8 Jul 2002 15:45:14 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg Makefile cfg_syn.c cfg_syn_scan.l
Message-Id: <20020708134514.4210F767E6@mail.ossp.org>
Date: Mon,  8 Jul 2002 15:45:14 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Jul-2002 15:45:14
  Branch: HEAD                             Handle: 2002070814451300

  Modified files:
    ossp-pkg/cfg            Makefile cfg_syn.c cfg_syn_scan.l

  Log:
    add more error checking

  Summary:
    Revision    Changes     Path
    1.7         +4  -0      ossp-pkg/cfg/Makefile
    1.10        +8  -0      ossp-pkg/cfg/cfg_syn.c
    1.7         +16 -0      ossp-pkg/cfg/cfg_syn_scan.l
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/Makefile
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 Makefile
  --- ossp-pkg/cfg/Makefile	5 Jul 2002 17:30:23 -0000	1.6
  +++ ossp-pkg/cfg/Makefile	8 Jul 2002 13:45:13 -0000	1.7
  @@ -16,6 +16,7 @@
   RM     = rm -f
   BISON  = bison
   FLEX   = flex-beta
  +GDB    = gdb
   
   LIB    = libcfg.a
   OBJ    = cfg_buf.o cfg_grid.o cfg_data.o cfg_node.o cfg_fmt.o cfg_syn.o cfg_syn_parse.o cfg_syn_scan.o cfg_util.o
  @@ -52,4 +53,7 @@
   test: $(TST)
   	./$(TST) sample.cfg
   	./$(TST) sample2.cfg
  +
  +debug: $(TST)
  +	$(GDB) $(TST)
   
  Index: ossp-pkg/cfg/cfg_syn.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 cfg_syn.c
  --- ossp-pkg/cfg/cfg_syn.c	5 Jul 2002 20:49:58 -0000	1.9
  +++ ossp-pkg/cfg/cfg_syn.c	8 Jul 2002 13:45:13 -0000	1.10
  @@ -109,7 +109,15 @@
   
       /* determine first and last positions of token */
       cpF = ctx->inputbuf+loc->first;
  +    if (cpF < ctx->inputbuf)
  +        cpF = ctx->inputbuf;
  +    if (cpF > ctx->inputbuf+ctx->inputlen)
  +        cpF = ctx->inputbuf+ctx->inputlen;
       cpL = ctx->inputbuf+loc->last;
  +    if (cpL < ctx->inputbuf)
  +        cpL = ctx->inputbuf;
  +    if (cpL > ctx->inputbuf+ctx->inputlen)
  +        cpL = ctx->inputbuf+ctx->inputlen;
   
       /* determine epilog and prolog of token */
       cpP = cpF-4;
  Index: ossp-pkg/cfg/cfg_syn_scan.l
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 cfg_syn_scan.l
  --- ossp-pkg/cfg/cfg_syn_scan.l	6 Jul 2002 18:44:46 -0000	1.6
  +++ ossp-pkg/cfg/cfg_syn_scan.l	8 Jul 2002 13:45:13 -0000	1.7
  @@ -101,6 +101,10 @@
   <SS_CO_C>(.|\n) {
       /* no-op */
   }
  +<SS_CO_C><<EOF>> {
  +    cfg_syn_error(CTX, CFG_ERR_SYN, yylloc, "unterminated C-style block comment");
  +    return 0;
  +}
   
       /* C++-style EOL comment */
   "//"[^\n]* {
  @@ -159,6 +163,10 @@
   <SS_DQ>(.|\n) {
       *cpStr++ = yytext[1];
   }
  +<SS_DQ><<EOF>> {
  +    cfg_syn_error(CTX, CFG_ERR_SYN, yylloc, "unterminated double-quoted string");
  +    return 0;
  +}
   
       /* single-quoted word ('...') */
   \' {
  @@ -189,6 +197,10 @@
   <SS_SQ>(.|\n) {
       *cpStr++ = yytext[1];
   }
  +<SS_SQ><<EOF>> {
  +    cfg_syn_error(CTX, CFG_ERR_SYN, yylloc, "unterminated single-quoted string");
  +    return 0;
  +}
   
       /* flexible-quoted word (q(.)[^\1]\1)
          the delimiting character has to one a special character c, i.e.,
  @@ -234,6 +246,10 @@
       }
       else
           *cpStr++ = yytext[0];
  +}
  +<SS_FQ><<EOF>> {
  +    cfg_syn_error(CTX, CFG_ERR_SYN, yylloc, "unterminated flexible-quoted string");
  +    return 0;
   }
   
      /* special tokens */

From ossp-cvs-owner@ossp.org  Mon Jul  8 15:45:28 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6BC9A76983; Mon,  8 Jul 2002 15:45:28 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg sample.cfg
Message-Id: <20020708134528.6BC9A76983@mail.ossp.org>
Date: Mon,  8 Jul 2002 15:45:28 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Jul-2002 15:45:28
  Branch: HEAD                             Handle: 2002070814452800

  Modified files:
    ossp-pkg/cfg            sample.cfg

  Log:
    start of feature checking sample config

  Summary:
    Revision    Changes     Path
    1.3         +43 -21     ossp-pkg/cfg/sample.cfg
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/sample.cfg
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 sample.cfg
  --- ossp-pkg/cfg/sample.cfg	4 Jul 2002 14:51:21 -0000	1.2
  +++ ossp-pkg/cfg/sample.cfg	8 Jul 2002 13:45:28 -0000	1.3
  @@ -1,26 +1,48 @@
   ##
  -##  sample.cfg 
  +##  sample.cfg -- Example Feature Testing Configuration
   ##
   
  -/* now comes 
  -   a C/C++ style block comment ** quux */
  +"==== Shell-style EOL comments ====";
  +#bar
  +  #bar
  +foo1; #bar
  +foo2;#bar
  +foo3#bar      # fails
  +"foo4"#bar    # works again
  +;
   
  -foo bar -b --bar -qX --quux=X baz;
  -rootdir /;  // C++ style EOL comment 
  -tmpdir /tmp;
  -
  -directory /foo {
  -    deny from all;
  -    allow from { 1.2.3.4; 6.7.8.9 };
  -    fuck;
  -    foobar { baz } quux;
  -};
  -
  -directory /foo2 {
  -    deny from all;  # shell-style EOL comment
  -    allow from { 1.2.3.4; 6.7.8.9 } butnot { 1; 2; 3; };
  -    fuck;
  -    foobar { baz } quux "multiline string,\
  -                         without blanks" baz;
  -};
  +"==== C++-style EOL comments ====";
  +//bar
  +  //bar
  +foo1; //bar
  +foo2;//bar
  +foo3//bar      # fails
  +"foo4"//bar    # works again
  +;
  +
  +"==== C-style block comments ====";
  +/*bar*/
  +  /*bar*/
  +foo1; /*bar*/
  +foo2;/*bar*/
  +foo3/*bar*/    # fails
  +"foo4"/*bar*/  # works again
  +;
  +/* a C/C++ style block comment which 
  +   goes over multiple lines and even includes 
  +   some special /* ** * / characters */
  +
  +"==== Single-Quoted Strings ====";
  +'foo';
  +'foo bar';
  +'foo\\bar\'baz';
  +'\'';
  +
  +"==== Double-Quoted Strings ====";
  +"foo\r\nbar\r\n";
  +"foo\x1bbar\x{011b}baz";
  +
  +"==== Flexible-Quoted Strings ====";
  +foo q{foo{bar{baz}bar}quux} bar;
  +foo q{foo{bar{baz}\}bar}quux} bar;
   

From ossp-cvs-owner@ossp.org  Mon Jul  8 15:45:47 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 49A02769B1; Mon,  8 Jul 2002 15:45:47 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg 00TODO
Message-Id: <20020708134547.49A02769B1@mail.ossp.org>
Date: Mon,  8 Jul 2002 15:45:47 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Jul-2002 15:45:47
  Branch: HEAD                             Handle: 2002070814454600

  Modified files:
    ossp-pkg/cfg            00TODO

  Log:
    flush my brain

  Summary:
    Revision    Changes     Path
    1.4         +70 -2      ossp-pkg/cfg/00TODO
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/00TODO
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 00TODO
  --- ossp-pkg/cfg/00TODO	5 Jul 2002 17:30:23 -0000	1.3
  +++ ossp-pkg/cfg/00TODO	8 Jul 2002 13:45:46 -0000	1.4
  @@ -1,7 +1,10 @@
   
  +- Problem: \x00 oder \x{00} wird zu NUL-terminator -> use ptr+len instead
  +- caStr/cpStr durch yyless/yymore??
   - autoconf environment
   - syntax verification
   - command line query tool
  +- error checking in scanner?
   
   - newline in error message
   $ ./cfg_test sample2.cfg 
  @@ -11,7 +14,72 @@
   - cfg_t
   
   rewrite-uri <regex> <subst> { <rewrite-cond> }
  -rewrite-uri ^/(.*) /path/$1 --redirect=permanent "{
  +rewrite-uri ^/(.*) /path/$1 --redirect=permanent q{
       %{SOURCE} != "x" 
  -}";
  +};
  +
  +
  +Directory [--foo=A]
  +
  +Argument:
  +  - type:
  +    - keyword ("foo") via name
  +    - option ("--foo=BAR") via name & regex
  +    - argument ("foo") via regex
  +  - amount:
  +    - 1    
  +    - 0/1  ?
  +    - 0..n *
  +    - 1..n +
  +  - location:
  +    - by position
  +    - by name
  +  - lookup via:
  +    - name
  +    - position
  +    - regex match
  +
  +foo   * bar
  +foo   = bar|quux|...
  +foo   (bar baz quux)
  +
  +foo  ::= bar*         ;   kleene closure
  +foo  ::= bar|baz|quux ;   union
  +foo  ::= bar baz quux ;   concatenation
  +
  +foo  ::= {foo;...}    ;   sequence of ...
  +foo  ::= (...)        ;   grouping
  +foo  ::= "bar"        ;   fixed terminal
  +foo  ::= /bar/        ;   regex terminal
  +foo  ::= <A>          ;   arbitrary argument
  +foo  ::= <O>          ;   arbitrary option
  +
  +SEQ ::= "{" DIR DIR* "}"
  +DIR ::= TOK (" " TOK)* ";"
  +TOK ::= ...
  +
  +SEQ ::= DIR*     SEQ(dir,dir,...)
  +DIR ::= TOK+     DIR(tok,tok,...)
  +TOK ::= string   "..."
  +
  +config        ::= SEQ(directory|user|rewrite|access)
  +directory     ::= DIR("directory",<O>*,<A>) 
  +dir_options   ::= 
  +user          ::= DIR("user",/^[a-z]$/)
  +rewrite       ::= 
  +access        ::= "access" ("allow"|"deny"):action SEQ(access_list):acl
  +access_list   ::= m/^!?%{ID}$/
  +
  +acl           ::= "acl" TOK:name acl_list
  +acl_list      ::= SEQ(acl_entry)
  +acl_entry     ::= acl_action "from" net-addr:src "to" net-addr:dst 
  +acl_action    ::= "allow"|"deny"
  +net_addr      ::= net_hostname | net_ipv4addr | net_ipv6addr
  +
  +sequence all {
  +    directive --class 1;
  +};
  +directive --class 1 "foo" {
  +    option "bar" --occur=1
  +};
   

From ossp-cvs-owner@ossp.org  Tue Jul  9 09:02:26 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7A32976982; Tue,  9 Jul 2002 09:02:26 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Message-Id: <20020709070226.7A32976982@mail.ossp.org>
Date: Tue,  9 Jul 2002 09:02:26 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: CVSROOT                          Date:   09-Jul-2002 09:02:26
  Branch: HEAD                             Handle: 2002070908022500

  Modified files:
    CVSROOT                 modules

  Log:
    add new-born OSSP fsl

  Summary:
    Revision    Changes     Path
    1.59        +1  -0      CVSROOT/modules
  ____________________________________________________________________________

  Index: CVSROOT/modules
  ============================================================
  $ cvs diff -u -r1.58 -r1.59 modules
  --- CVSROOT/modules	8 Jul 2002 11:45:48 -0000	1.58
  +++ CVSROOT/modules	9 Jul 2002 07:02:25 -0000	1.59
  @@ -80,6 +80,7 @@
   popt            ossp-pkg/popt
   tai             ossp-pkg/tai
   cfg             ossp-pkg/cfg
  +fsl             ossp-pkg/fsl
   uuidgen         ossp-pkg/uuidgen
   
   #   the OSSP applications

From ossp-cvs-owner@ossp.org  Tue Jul  9 10:29:21 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1ABA8767CC; Tue,  9 Jul 2002 10:29:20 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg .cvsignore 00TODO Makefile Makefile.in README...
Message-Id: <20020709082920.1ABA8767CC@mail.ossp.org>
Date: Tue,  9 Jul 2002 10:29:20 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Jul-2002 10:29:20
  Branch: HEAD                             Handle: 197001010100001026199759

  Added files:
    ossp-pkg/cfg            Makefile.in README VERSION aclocal.m4
                            cfg-config.in cfg.ac configure.ac devtool
                            devtool.conf devtool.func
  Modified files:
    ossp-pkg/cfg            .cvsignore 00TODO
  Removed files:
    ossp-pkg/cfg            Makefile

  Log:
    add standard OSSP autoconf/libtool/shtool environment

  Summary:
    Revision    Changes     Path
    1.2         +12 -2      ossp-pkg/cfg/.cvsignore
    1.5         +2  -0      ossp-pkg/cfg/00TODO
    NONE        +0  -59     ossp-pkg/cfg/Makefile
    1.1         +145 -0     ossp-pkg/cfg/Makefile.in
    1.1         +53 -0      ossp-pkg/cfg/README
    1.1         +6  -0      ossp-pkg/cfg/VERSION
    1.1         +299 -0     ossp-pkg/cfg/aclocal.m4
    1.1         +145 -0     ossp-pkg/cfg/cfg-config.in
    1.1         +39 -0      ossp-pkg/cfg/cfg.ac
    1.1         +57 -0      ossp-pkg/cfg/configure.ac
    1.1         +47 -0      ossp-pkg/cfg/devtool
    1.1         +52 -0      ossp-pkg/cfg/devtool.conf
    1.1         +73 -0      ossp-pkg/cfg/devtool.func
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/.cvsignore
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 .cvsignore
  --- ossp-pkg/cfg/.cvsignore	3 Jul 2002 13:25:34 -0000	1.1
  +++ ossp-pkg/cfg/.cvsignore	9 Jul 2002 08:29:19 -0000	1.2
  @@ -1,6 +1,16 @@
  +Makefile
  +cfg-config
  +cfg.3
  +cfg.h
   cfg_syn_parse.c
   cfg_syn_parse.h
   cfg_syn_scan.c
   cfg_test
  -*.o
  -*.a
  +config.guess
  +config.h
  +config.h.in
  +config.sub
  +configure
  +libtool.m4
  +ltmain.sh
  +shtool
  Index: ossp-pkg/cfg/00TODO
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 00TODO
  --- ossp-pkg/cfg/00TODO	8 Jul 2002 13:45:46 -0000	1.4
  +++ ossp-pkg/cfg/00TODO	9 Jul 2002 08:29:19 -0000	1.5
  @@ -5,6 +5,8 @@
   - syntax verification
   - command line query tool
   - error checking in scanner?
  +- OSSP ex support
  +- wieso geht sample.cfg nicht als Arg bei "make check"?
   
   - newline in error message
   $ ./cfg_test sample2.cfg 
    Index: ossp-pkg/cfg/Makefile.in
  ============================================================
  $ cvs update -p -r1.1 Makefile.in
  ##
  ##  OSSP cfg - Configuration Parsing
  ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  ##
  ##  This file is part of OSSP cfg, a configuration parsing library which
  ##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  Makefile.in: make(1) build procedure
  ##
  
  @SET_MAKE@
  
  DESTDIR     =
  prefix      = @prefix@
  exec_prefix = @exec_prefix@
  bindir      = @bindir@
  libdir      = @libdir@
  includedir  = @includedir@
  mandir      = @mandir@
  
  CC          = @CC@
  CPPFLAGS    = @CPPFLAGS@
  CFLAGS      = @DEFS@ @CFLAGS@
  LDFLAGS     = @LDFLAGS@
  LIBS        = @LIBS@
  RM          = rm -f
  RMDIR       = rmdir
  SHTOOL      = ./shtool
  LIBTOOL     = ./libtool
  TRUE        = true
  POD2MAN     = pod2man
  FLEX        = @FLEX@
  BISON       = @BISON@
  
  LIB_NAME    = libcfg.la
  LIB_OBJS    = cfg_buf.lo cfg_grid.lo cfg_data.lo cfg_node.lo cfg_fmt.lo \
                cfg_syn.lo cfg_syn_parse.lo cfg_syn_scan.lo cfg_util.lo
  
  TST_NAME    = cfg_test
  TST_OBJS    = cfg_test.o
  
  .SUFFIXES:
  .SUFFIXES: .c .o .lo
  
  all: $(LIB_NAME) $(TST_NAME)
  
  .c.o:
  	$(CC) $(CPPFLAGS) $(CFLAGS) -c $<
  
  .c.lo:
  	@$(LIBTOOL) --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS) -c $<
  
  $(LIB_NAME): $(LIB_OBJS)
  	@$(LIBTOOL) --mode=link $(CC) -o $(LIB_NAME) $(LIB_OBJS) -rpath $(libdir) \
  	    -version-info `$(SHTOOL) version -l txt -d libtool VERSION`
  
  $(TST_NAME): $(TST_OBJS) $(LIB_NAME)
  	@$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $(TST_NAME) $(TST_OBJS) $(LIB_NAME) $(LIBS)
  
  cfg_syn.c: cfg_syn.h cfg_syn_parse.h
  cfg_syn_scan.o: cfg_syn_scan.c cfg_syn_parse.h
  cfg_syn_scan.c: cfg_syn_scan.l
  	$(FLEX) -Pcfg_syn_ -s -8 -B -ocfg_syn_scan.c cfg_syn_scan.l
  cfg_syn_parse.c cfg_syn_parse.h: cfg_syn_parse.y
  	$(BISON) -d -k -pcfg_syn_ -ocfg_syn_parse.c cfg_syn_parse.y
  
  man: cfg.3
  cfg.3: cfg.pod
  	V1=`$(SHTOOL) version -l txt -d short VERSION`; \
  	V2=`$(SHTOOL) version -l txt -d long VERSION`; \
  	D=`$(SHTOOL) version -l txt -d long VERSION | sed -e 's;.*(;;' -e 's;).*;;'`; \
  	$(POD2MAN) --quotes=none \
  	           --section=3 --center="Configuration Parsing" \
  	           --release="$$D" --date="OSSP cfg $$V1" cfg.pod | \
  	sed -e "s;CFG_VERSION_STR;$$V2;" >cfg.3
  
  check: $(TST_NAME)
  	@$(LIBTOOL) --mode=execute ./$(TST_NAME)
  test1:
  	./$(TST_NAME) sample.cfg
  test2:
  	./$(TST_NAME) sample2.cfg
  
  install:
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(includedir)
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libdir)
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man3
  	$(SHTOOL) install -c -m 755 cfg-config $(DESTDIR)$(bindir)/
  	$(SHTOOL) install -c -m 644 cfg.h $(DESTDIR)$(includedir)/
  	$(SHTOOL) install -c -m 644 cfg.3 $(DESTDIR)$(mandir)/man3/
  	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libcfg.la $(DESTDIR)$(libdir)/
  
  uninstall:
  	@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libcfg.la
  	-$(RM) $(DESTDIR)$(mandir)/man3/cfg.3
  	-$(RM) $(DESTDIR)$(includedir)/cfg.h
  	-$(RM) $(DESTDIR)$(bindir)/cfg-config
  	-$(RMDIR) $(DESTDIR)$(mandir)/man3 >/dev/null 2>&1 || $(TRUE)
  	-$(RMDIR) $(DESTDIR)$(mandir) >/dev/null 2>&1 || $(TRUE)
  	-$(RMDIR) $(DESTDIR)$(libdir) >/dev/null 2>&1 || $(TRUE)
  	-$(RMDIR) $(DESTDIR)$(includedir) >/dev/null 2>&1 || $(TRUE)
  	-$(RMDIR) $(DESTDIR)$(bindir) >/dev/null 2>&1 || $(TRUE)
  	-$(RMDIR) $(DESTDIR)$(prefix) >/dev/null 2>&1 || $(TRUE)
  
  clean:
  	-$(RM) $(LIB_NAME) $(LIB_OBJS)
  	-$(RM) $(TST_NAME) $(TST_OBJS)
  	-$(RM) -r .libs >/dev/null 2>&1 || $(TRUE)
  	-$(RM) *.o *.lo
  
  distclean: clean
  	-$(RM) config.log config.status config.cache
  	-$(RM) Makefile config.h cfg-config
  	-$(RM) libtool
  
  realclean: distclean
  	-$(RM) cfg.3
  	-$(RM) configure config.h.in
  	-$(RM) shtool
  	-$(RM) ltmain.sh libtool.m4 config.guess config.sub
  	-$(RM) cfg_syn_parse.c cfg_syn_parse.h
  	-$(RM) cfg_syn_scan.c
  
  Index: ossp-pkg/cfg/README
  ============================================================
  $ cvs update -p -r1.1 README
           __       
      ___ / _| __ _ 
     / __| |_ / _` |
    | (__|  _| (_| |
     \___|_|  \__, |
              |___/ 
  
    OSSP cfg - Configuration Parsing
    Version 
  
    ABSTRACT
  
    OSSP cfg is a ISO-C library for parsing arbitrary C/C++-style
    configuration files. A configuration is sequence of directives. Each
    directive consists of zero or more tokens. Each token can be either
    a string or again a complete sequence. This means the configuration
    syntax has a recursive structure and this way allows to configure
    structures which require arbitrarily nested sections.
  
    COPYRIGHT AND LICENSE
  
    Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
    Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
    Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  
    This file is part of OSSP cfg, a configuration parsing library which
    can be found at http://www.ossp.org/pkg/lib/cfg/.
  
    Permission to use, copy, modify, and distribute this software for
    any purpose with or without fee is hereby granted, provided that
    the above copyright notice and this permission notice appear in all
    copies.
  
    THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
    WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
    IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
    CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
    USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    SUCH DAMAGE.
  
    HOME AND DOCUMENTATION
  
    The documentation and latest release can be found on
  
    o http://www.ossp.org/pkg/lib/cfg/
    o  ftp://ftp.ossp.org/pkg/lib/cfg/
  
  Index: ossp-pkg/cfg/VERSION
  ============================================================
  $ cvs update -p -r1.1 VERSION
  
    VERSION -- Version Information for OSSP cfg (syntax: Text)
    [automatically generated and maintained by GNU shtool]
  
    This is OSSP cfg, Version 0.1.0 (09-Jul-2002)
  
  Index: ossp-pkg/cfg/aclocal.m4
  ============================================================
  $ cvs update -p -r1.1 aclocal.m4
  dnl ##
  dnl ##  OSSP cfg - Configuration Parsing
  dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  dnl ##
  dnl ##  This file is part of OSSP cfg, a configuration parsing library which
  dnl ##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  dnl ##
  dnl ##  Permission to use, copy, modify, and distribute this software for
  dnl ##  any purpose with or without fee is hereby granted, provided that
  dnl ##  the above copyright notice and this permission notice appear in all
  dnl ##  copies.
  dnl ##
  dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  dnl ##  SUCH DAMAGE.
  dnl ##
  dnl ##  aclocal.m4: GNU Autoconf local macro definitions
  dnl ##
  
  dnl ##
  dnl ##  Check whether compiler option works
  dnl ##
  dnl ##  configure.in:
  dnl ##    AC_COMPILER_OPTION(<name>, <display>, <option>,
  dnl ##                       <action-success>, <action-failure>)
  dnl ##
  
  AC_DEFUN(AC_COMPILER_OPTION,[dnl
  AC_MSG_CHECKING(whether compiler option(s) $2 work)
  AC_CACHE_VAL(ac_cv_compiler_option_$1,[
  SAVE_CFLAGS="$CFLAGS"
  CFLAGS="$CFLAGS $3"
  AC_TRY_COMPILE([],[], ac_cv_compiler_option_$1=yes, ac_cv_compiler_option_$1=no)
  CFLAGS="$SAVE_CFLAGS"
  ])dnl
  if test ".$ac_cv_compiler_option_$1" = .yes; then
      ifelse([$4], , :, [$4])
  else
      ifelse([$5], , :, [$5])
  fi
  AC_MSG_RESULT([$ac_cv_compiler_option_$1])
  ])dnl
  
  dnl ##
  dnl ##  Debugging Support
  dnl ##
  dnl ##  configure.in:
  dnl ##    AC_CHECK_DEBUGGING
  dnl ##
  
  AC_DEFUN(AC_CHECK_DEBUGGING,[dnl
  AC_ARG_ENABLE(debug,dnl
  [  --enable-debug          build for debugging (default=no)],
  [dnl
  if test ".$ac_cv_prog_gcc" = ".yes"; then
      case "$CFLAGS" in
          *-O* ) ;;
             * ) CFLAGS="$CFLAGS -O2" ;;
      esac
      case "$CFLAGS" in
          *-g* ) ;;
             * ) CFLAGS="$CFLAGS -g" ;;
      esac
      case "$CFLAGS" in
          *-pipe* ) ;;
                * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
      esac
      AC_COMPILER_OPTION(defdbg, -DDEBUG, -DDEBUG, CFLAGS="$CFLAGS -DDEBUG")
      CFLAGS="$CFLAGS -pedantic"
      CFLAGS="$CFLAGS -Wall"
      WMORE="-Wmultichar -Wno-system-headers -Wtraditional"
      WMORE="$WMORE -Wshadow -Wpointer-arith"
      WMORE="$WMORE -Wbad-function-cast -Wcast-align"
      WMORE="$WMORE -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations"
      WMORE="$WMORE -Wredundant-decls -Wnested-externs -Winline"
      AC_COMPILER_OPTION(wmore, -W<xxx>, $WMORE, CFLAGS="$CFLAGS $WMORE")
  else
      case "$CFLAGS" in
          *-g* ) ;;
             * ) CFLAGS="$CFLAGS -g" ;;
      esac
  fi
  msg="enabled"
  ],[
  if test ".$ac_cv_prog_gcc" = ".yes"; then
  case "$CFLAGS" in
      *-pipe* ) ;;
            * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
  esac
  fi
  case "$CFLAGS" in
      *-g* ) CFLAGS=`echo "$CFLAGS" |\
                     sed -e 's/ -g / /g' -e 's/ -g$//' -e 's/^-g //g' -e 's/^-g$//'` ;;
  esac
  case "$CXXFLAGS" in
      *-g* ) CXXFLAGS=`echo "$CXXFLAGS" |\
                       sed -e 's/ -g / /g' -e 's/ -g$//' -e 's/^-g //g' -e 's/^-g$//'` ;;
  esac
  msg=disabled
  ])dnl
  AC_MSG_CHECKING(for compilation debug mode)
  AC_MSG_RESULT([$msg])
  if test ".$msg" = .enabled; then
      enable_shared=no
  fi
  ])
  
  dnl ##
  dnl ##  Check for an external/extension library.
  dnl ##  - is aware of <libname>-config style scripts
  dnl ##  - searches under standard paths include, lib, etc.
  dnl ##  - searches under subareas like .libs, etc.
  dnl ##
  dnl ##  configure.in:
  dnl ##      AC_CHECK_EXTLIB(<realname>, <libname>, <func>, <header>,
  dnl ##                      [<success-action> [, <fail-action>]])
  dnl ##  Makefile.in:
  dnl ##      CFLAGS  = @CFLAGS@
  dnl ##      LDFLAGS = @LDFLAGS@
  dnl ##      LIBS    = @LIBS@
  dnl ##  shell:
  dnl ##      $ ./configure --with-<libname>[=DIR]
  dnl ##
  
  AC_DEFUN(AC_CHECK_EXTLIB,[dnl
  AC_ARG_WITH($2, [dnl
  [  --with-]m4_substr([$2[[=DIR]]                     ], 0, 19)[build with external $1 library (default=no)]], [dnl
      if test ".$with_$2" = .yes; then
          #   via config script in PATH
          $2_version=`($2-config --version) 2>/dev/null`
          if test ".$$2_version" != .; then
              CPPFLAGS="$CPPFLAGS `$2-config --cflags`"
              CFLAGS="$CFLAGS `$2-config --cflags`"
              LDFLAGS="$LDFLAGS `$2-config --ldflags`"
          fi
      else
          if test -d "$with_$2"; then
              found=0
              #   via config script
              for dir in $with_$2/bin $with_$2; do
                  if test -f "$dir/$2-config" && test ! -f "$dir/$2-config.in"; then
                      $2_version=`($dir/$2-config --version) 2>/dev/null`
                      if test ".$$2_version" != .; then
                          CPPFLAGS="$CPPFLAGS `$dir/$2-config --cflags`"
                          CFLAGS="$CFLAGS `$dir/$2-config --cflags`"
                          LDFLAGS="$LDFLAGS `$dir/$2-config --ldflags`"
                          found=1
                          break
                      fi
                  fi
              done
              #   in standard sub-areas
              if test ".$found" = .0; then
                  for dir in $with_$2/include/$2 $with_$2/include $with_$2; do
                      if test -f "$dir/$4"; then
                          CPPFLAGS="$CPPFLAGS -I$dir"
                          CFLAGS="$CFLAGS -I$dir"
                          found=1
                          break
                      fi
                  done
                  for dir in $with_$2/lib/$2 $with_$2/lib $with_$2; do
                      if test -f "$dir/lib$2.la" && test -d "$dir/.libs"; then
                          LDFLAGS="$LDFLAGS -L$dir -L$dir/.libs"
                          found=1
                          break
                      elif test -f "$dir/lib$2.a" || test -f "$dir/lib$2.so"; then
                          LDFLAGS="$LDFLAGS -L$dir"
                          found=1
                          break
                      fi
                  done
              fi
              #   in any sub-area
              if test ".$found" = .0; then
  changequote(, )dnl
                  for file in x `find $with_$2 -name "$4" -type f -print`; do
                      test .$file = .x && continue
                      dir=`echo $file | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;'`
                      CPPFLAGS="$CPPFLAGS -I$dir"
                      CFLAGS="$CFLAGS -I$dir"
                  done
                  for file in x `find $with_$2 -name "lib$2.[aso]" -type f -print`; do
                      test .$file = .x && continue
                      dir=`echo $file | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;'`
                      LDFLAGS="$LDFLAGS -L$dir"
                  done
  changequote([, ])dnl
              fi
          fi
      fi
      AC_HAVE_HEADERS($4)
      AC_CHECK_LIB($2, $3)
      with_$2=yes
      ac_var="ac_cv_header_`echo $4 | sed 'y%./+-%__p_%'`"
      eval "ac_val=\$$ac_var"
      if test ".$ac_val" != .yes; then
          with_$2=no
      fi
      if test ".$ac_cv_lib_$2_$3" != .yes; then
          with_$2=no
      fi
      if test ".$with_$2" = .no; then
          AC_ERROR([Unable to find $1 library])
      fi
      ], [dnl
  if test ".$with_$2" = .; then
      with_$2=no
  fi
      ])dnl
  AC_MSG_CHECKING(whether to build against external $1 library)
  if test ".$with_$2" = .yes; then
      ifelse([$5], , :, [$5])
  else
      ifelse([$6], , :, [$6])
  fi
  AC_MSG_RESULT([$with_$2])
  ])dnl
  
  dnl ##
  dnl ##  Check for GNU Bison and GNU Flex
  dnl ##
  dnl ##  configure.in:
  dnl ##      AC_CHECK_BISON(BISON, 1.30, [1.3[0-9]|1.[4-9]])
  dnl ##      AC_CHECK_FLEX(FLEX, 2.5.6, [2.5.[6-9]|2.5.1[0-9]|2.[6-9].*])
  dnl ##
  dnl ##  Makefile.in:
  dnl ##      BISON = @BISON@
  dnl ##      FLEX  = @FLEX@
  dnl ##
  
  AC_DEFUN(AC_CHECK_BISON,[dnl
  if test ".$enable_maintainer" = .yes; then
      bison_version=""
      for prog in bison bison-beta bison-alpha bison-snap; do
          AC_PATH_PROG($1, $prog, NA) 
          if test ".$$1" != .NA; then
              bison_version=`($$1 --version | head -1 | sed -e 's;^[[^0-9]]*\([[0-9]][[0-9.]]*\).*;\1;') 2>/dev/null`
              case "$bison_version" in
                  $3 ) break ;;
                  * ) $1="NA"; unset ac_cv_path_$1 ;;
              esac
          else
              unset ac_cv_path_$1
          fi
      done
      if test ".$$1" = .NA; then
          if test ".$bison_version" != .; then
              AC_ERROR([found GNU Bison version $bison_version; require version >= $2])
          else
              AC_ERROR([require GNU Bison version >= $2])
          fi
      fi
  else
      dnl # disable the use of the tools, but still allow manual override
      test ".$$1" = . && $1=true
      AC_PATH_PROG($1, bison, true)
  fi
  ])
  
  AC_DEFUN(AC_CHECK_FLEX,[dnl
  if test ".$enable_maintainer" = .yes; then
      flex_version=""
      for prog in flex flex-beta flex-alpha flex-snap; do
          AC_PATH_PROG($1, $prog, NA) 
          if test ".$$1" != .NA; then
              flex_version=`($$1 --version | head -1 | sed -e 's;^[[^0-9]]*\([[0-9]][[0-9.]]*\).*;\1;') 2>/dev/null`
              case "$flex_version" in
                  $3 ) break ;;
                  * ) $1="NA"; unset ac_cv_path_$1 ;;
              esac
          else
              unset ac_cv_path_$1
          fi
      done
      if test ".$$1" = .NA; then
          if test ".$flex_version" != .; then
              AC_ERROR([found GNU Flex version $flex_version; require version >= $2])
          else
              AC_ERROR([require GNU Flex version >= $2])
          fi
      fi
  else
      test ".$$1" = . && $1=true
      AC_PATH_PROG($1, flex, true)
  fi
  ])
  
  Index: ossp-pkg/cfg/cfg-config.in
  ============================================================
  $ cvs update -p -r1.1 cfg-config.in
  #!/bin/sh
  ##
  ##  OSSP cfg - Configuration Parsing
  ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  ##
  ##  This file is part of OSSP cfg, a configuration parsing library which
  ##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  cfg-config.in: OSSP cfg build utility
  ##
  
  DIFS=' 	
  '
  
  prefix="@prefix@"
  exec_prefix="@exec_prefix@"
  
  cfg_prefix="$prefix"
  cfg_exec_prefix="$exec_prefix"
  cfg_bindir="@bindir@"
  cfg_libdir="@libdir@"
  cfg_includedir="@includedir@"
  cfg_mandir="@mandir@"
  cfg_datadir="@datadir@"
  cfg_acdir="@datadir@/aclocal"
  cfg_cflags="@CFLAGS@"
  cfg_ldflags="@LDFLAGS@"
  cfg_libs="@LIBS@"
  cfg_version="@CFG_VERSION_STR@"
  
  help=no
  version=no
  
  usage="cfg-config"
  usage="$usage [--help] [--version] [--all]"
  usage="$usage [--prefix] [--exec-prefix] [--bindir] [--libdir] [--includedir] [--mandir] [--datadir] [--acdir]"
  usage="$usage [--cflags] [--ldflags] [--libs]"
  if [ $# -eq 0 ]; then
      echo "cfg-config:Error: Invalid option" 1>&2
      echo "cfg-config:Usage: $usage" 1>&2
      exit 1
  fi
  output=''
  output_extra=''
  all=no
  prev=''
  OIFS="$IFS" IFS="$DIFS"
  for option
  do
      if [ ".$prev" != . ]; then
          eval "$prev=\$option"
          prev=''
          continue
      fi
      case "$option" in
          -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
             *) optarg='' ;;
      esac
      case "$option" in
          --help|-h)
              echo "Usage: $usage"
              exit 0
              ;;
          --version|-v)
              echo "OSSP sa $cfg_version"
              exit 0
              ;;
          --all)
              all=yes
              ;;
          --prefix)
              output="$output $cfg_prefix"
              ;;
          --exec-prefix)
              output="$output $cfg_exec_prefix"
              ;;
          --bindir)
              output="$output $cfg_bindir"
              ;;
          --libdir)
              output="$output $cfg_libdir"
              ;;
          --includedir)
              output="$output $cfg_includedir"
              ;;
          --mandir)
              output="$output $cfg_mandir"
              ;;
          --datadir)
              output="$output $cfg_datadir"
              ;;
          --acdir)
              output="$output $cfg_acdir"
              ;;
          --cflags)
              output="$output -I$cfg_includedir"
              output_extra="$output_extra $cfg_cflags"
              ;;
          --ldflags)
              output="$output -L$cfg_libdir"
              output_extra="$output_extra $cfg_ldflags"
              ;;
          --libs)
              output="$output -lcfg"
              output_extra="$output_extra $cfg_libs"
              ;;
          * )
              echo "cfg-config:Error: Invalid option" 1>&2
              echo "cfg-config:Usage: $usage" 1>&2
              exit 1;
              ;;
      esac
  done
  IFS="$OIFS"
  if [ ".$prev" != . ]; then
      echo "cfg-config:Error: missing argument to --`echo $prev | sed 's/_/-/g'`" 1>&2
      exit 1
  fi
  if [ ".$output" != . ]; then
      if [ ".$all" = .yes ]; then
          output="$output $output_extra"
      fi
      echo $output
  fi
  
  Index: ossp-pkg/cfg/cfg.ac
  ============================================================
  $ cvs update -p -r1.1 cfg.ac
  dnl ##
  dnl ##  OSSP cfg - Configuration Parsing
  dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  dnl ##
  dnl ##  This file is part of OSSP cfg, a configuration parsing library which
  dnl ##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  dnl ##
  dnl ##  Permission to use, copy, modify, and distribute this software for
  dnl ##  any purpose with or without fee is hereby granted, provided that
  dnl ##  the above copyright notice and this permission notice appear in all
  dnl ##  copies.
  dnl ##
  dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  dnl ##  SUCH DAMAGE.
  dnl ##
  dnl ##  cfg.ac: OSSP cfg Autoconf checks
  dnl ##
  
  
  dnl #   Check for anything OSSP SA wants to know
  dnl #   configure.in:
  dnl #     CFG_CHECK_ALL
  
  AC_DEFUN(CFG_CHECK_ALL,[
      :
  ])
  
  Index: ossp-pkg/cfg/configure.ac
  ============================================================
  $ cvs update -p -r1.1 configure.ac
  dnl ##
  dnl ##  OSSP cfg - Configuration Parsing
  dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  dnl ##
  dnl ##  This file is part of OSSP cfg, a configuration parsing library which
  dnl ##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  dnl ##
  dnl ##  Permission to use, copy, modify, and distribute this software for
  dnl ##  any purpose with or without fee is hereby granted, provided that
  dnl ##  the above copyright notice and this permission notice appear in all
  dnl ##  copies.
  dnl ##
  dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  dnl ##  SUCH DAMAGE.
  dnl ##
  dnl ##  configure.ac: GNU Autoconf source script
  dnl ##
  
  AC_PREREQ(2.53)
  AC_INIT
  CFG_VERSION_STR=`./shtool version -l txt -d long VERSION`
  ./shtool echo -e "Configuring %BOSSP cfg%b (Configuration Parsing), version %B${CFG_VERSION_STR}%b"
  AC_SUBST(CFG_VERSION_STR)
  
  AC_PROG_MAKE_SET
  AC_PROG_CC
  AC_CHECK_DEBUGGING
  
  sinclude(libtool.m4)
  AC_PROG_LIBTOOL
  
  AC_CHECK_BISON(BISON, 1.30, [1.3[[0-9]]|1.[[4-9]]])
  AC_CHECK_FLEX(FLEX, 2.5.6, [2.5.[[6-9]]|2.5.1[[0-9]]|2.[[6-9]].*])
  
  sinclude(cfg.ac)
  CFG_CHECK_ALL
  
  AC_CHECK_EXTLIB([OSSP ex], ex, __ex_ctx, ex.h,
                  [AC_DEFINE(WITH_EX, 1, [Define to 1 if building with OSSP ex])])
  
  AC_CONFIG_HEADERS(config.h)
  AC_CONFIG_FILES([Makefile cfg-config])
  AC_CONFIG_COMMANDS([adjustment], [chmod a+x cfg-config])
  AC_OUTPUT
  
  Index: ossp-pkg/cfg/devtool
  ============================================================
  $ cvs update -p -r1.1 devtool
  #!/bin/sh
  ##
  ##  devtool -- Development Tool
  ##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  if [ $# -eq 0 ]; then
      echo "devtool:USAGE: devtool <command> [<arg> ...]" 1>&2
      exit 1
  fi
  
  cmd="$1"
  shift
  
  devtoolfunc="./devtool.func"
  
  if [ ! -f devtool.conf ]; then
      echo "devtool:ERROR: no devtool.conf in current directory" 1>&2
      exit 1
  fi
  
  cmdline=`grep "^%$cmd" devtool.conf`
  if [ ".$cmdline" = . ]; then
      echo "devtool:ERROR: command $cmd not found in devtool.conf" 1>&2
      exit 1
  fi
  
  if [ ".$TMPDIR" != . ]; then
      tmpdir="$TMPDIR"
  elif [ ".$TEMPDIR" != . ]; then
      tmpdir="$TEMPDIR"
  else
      tmpdir="/tmp"
  fi
  tmpfile="$tmpdir/rc.$$.tmp"
  
  rm -f $tmpfile
  touch $tmpfile
  echo ". $devtoolfunc" >>$tmpfile
  ( sed <devtool.conf -e "1,/^%common/d" -e '/^%.*/,$d'
    sed <devtool.conf -e "1,/^%$cmd/d" -e '/^%.*/,$d' ) |\
  sed -e 's;\([ 	]\)@\([a-zA-Z_][a-zA-Z0-9_]*\);\1devtool_\2;' >>$tmpfile
  
  sh $tmpfile "$@"
  
  rm -f $tmpfile >/dev/null 2>&1 || true
  
  Index: ossp-pkg/cfg/devtool.conf
  ============================================================
  $ cvs update -p -r1.1 devtool.conf
  ##
  ##  devtool.conf -- Development Tool Configuration
  ##
  
  %autogen
      @autogen shtool   1.6.0 "1.6.*" all
      @autogen libtool  1.4.2 "1.4*"
      @autogen autoconf 2.53  "2.5[3-9]*"
  
  %autoclean
      @autoclean shtool
      @autoclean libtool
      @autoclean autoconf
  
  %configure
      ./configure \
          --prefix=/tmp/cfg \
          --disable-shared \
          --enable-maintainer \
          --enable-debug \
          "$@"
  
  %version
      ./shtool version -l txt -n "OSSP cfg" -e VERSION
      V=`./shtool version -l txt -d long VERSION`
      sed -e "s/Version .*(.*)/Version $V/g" <README >README.n 
      mv README.n README
  
  %dist
      echo "+++ generating"
      ./devtool autoclean
      ./devtool autogen
      echo "+++ configuring"
      ./configure
      echo "+++ building"
      make clean all man
      echo "+++ cleaning"
      make distclean
      echo "+++ fixing"
      ./shtool fixperm -v .
      echo "+++ rolling"
      V=`./shtool version -l txt -d short VERSION`
      ./shtool tarball -o cfg-${V}.tar.gz -d cfg-${V} -u ossp -g ossp \
                       -e 'CVS,\.cvsignore,\.[ao],^\.,devtool*,*.tar.gz' -c 'gzip --best' .
      ls -l cfg-${V}.tar.gz
      echo "+++ testing"
      gunzip <cfg-${V}.tar.gz | tar tvf -
  
  %release
      echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/cfg/"
      scp cfg-*.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/cfg/
  
  Index: ossp-pkg/cfg/devtool.func
  ============================================================
  $ cvs update -p -r1.1 devtool.func
  ##
  ##  devtool.func -- Development Tool Functions
  ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  devtool_require () {
      t="$1"; o="$2"; p="$3"; e="$4"; a="$5"
      v=`($t $o | head -1 | awk "{ print \\\$$p; }") 2>/dev/null`
      if [ ".$v" = . ]; then
          echo "devtool:ERROR: unable to determine version of $t" 1>&2
          exit 1
      fi
      case "$v" in
          $e )
              ;;
          $a )
              echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
              ;;
          * )
              echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
              exit 1
              ;;
      esac
      echo "$v"
  }
  
  devtool_autogen () {
      tool=$1
      shift
      case $tool in
          autoconf )
              autoconf_version=`devtool_require autoconf --version 4 "$1" "$2"`
              echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
              autoconf
              autoheader 2>&1 | grep -v "is unchanged"
              rm -rf autom4te.cache >/dev/null 2>&1
              ;;
          libtool )
              libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
              echo "generating (GNU Libtool $libtoolize_version): ltmain.sh, libtool.m4, config.guess, config.sub"
              libtoolize --force --copy >/dev/null 2>&1
              cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
                  sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` libtool.m4
              ;;
          shtool )
              shtoolize_version=`devtool_require shtoolize -v 3 "$1" "$2"`
              echo "generating (GNU Shtool $shtoolize_version): shtool"
              shift
              shift
              shtoolize -q "$@"
              ;;
      esac
  }
  
  devtool_autoclean () {
      tool=$1
      shift
      case $tool in
          autoconf )
              echo "removing: configure config.h.in"
              rm -f configure config.h.in
              ;;
          libtool )
              echo "removing: ltmain.sh libtool.m4 config.guess config.sub"
              rm -f ltmain.sh libtool.m4 config.guess config.sub
              ;;
          shtool )
              echo "removing: shtool"
              rm -f shtool
              ;;
      esac
  }
  

From ossp-cvs-owner@ossp.org  Tue Jul  9 10:29:32 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1FDAF769A9; Tue,  9 Jul 2002 10:29:32 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg 00TODO
Message-Id: <20020709082932.1FDAF769A9@mail.ossp.org>
Date: Tue,  9 Jul 2002 10:29:32 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Jul-2002 10:29:32
  Branch: HEAD                             Handle: 2002070909293100

  Modified files:
    ossp-pkg/cfg            00TODO

  Log:
    done

  Summary:
    Revision    Changes     Path
    1.6         +0  -1      ossp-pkg/cfg/00TODO
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/00TODO
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 00TODO
  --- ossp-pkg/cfg/00TODO	9 Jul 2002 08:29:19 -0000	1.5
  +++ ossp-pkg/cfg/00TODO	9 Jul 2002 08:29:31 -0000	1.6
  @@ -1,7 +1,6 @@
   
   - Problem: \x00 oder \x{00} wird zu NUL-terminator -> use ptr+len instead
   - caStr/cpStr durch yyless/yymore??
  -- autoconf environment
   - syntax verification
   - command line query tool
   - error checking in scanner?

From ossp-cvs-owner@ossp.org  Tue Jul  9 10:50:12 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 936C8767CB; Tue,  9 Jul 2002 10:50:12 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 Makefile.in l2_syslog.c l2_syslog.pod l2_test_...
Message-Id: <20020709085012.936C8767CB@mail.ossp.org>
Date: Tue,  9 Jul 2002 10:50:12 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Jul-2002 10:50:12
  Branch: HEAD                             Handle: 197001010100001026201012

  Modified files:
    ossp-pkg/l2             Makefile.in
  Removed files:
    ossp-pkg/l2             l2_syslog.c l2_syslog.pod l2_test_syslog.c

  Log:
    axe out l2syslog stuff (will occur on OSSP fsl soon)

  Summary:
    Revision    Changes     Path
    1.44        +1  -9      ossp-pkg/l2/Makefile.in
    NONE        +0  -244    ossp-pkg/l2/l2_syslog.c
    NONE        +0  -110    ossp-pkg/l2/l2_syslog.pod
    NONE        +0  -14     ossp-pkg/l2/l2_test_syslog.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.43 -r1.44 Makefile.in
  --- ossp-pkg/l2/Makefile.in	29 May 2002 13:53:01 -0000	1.43
  +++ ossp-pkg/l2/Makefile.in	9 Jul 2002 08:50:12 -0000	1.44
  @@ -57,7 +57,7 @@
   LIBTOOL     = ./libtool
   
   TARGET       = $(TARGET_LIBS) $(TARGET_MANS) $(TARGET_PROGS)
  -TARGET_LIBS  = libl2.la libl2syslog.la
  +TARGET_LIBS  = libl2.la
   TARGET_MANS  = l2tool.1 l2-config.1 l2.3
   TARGET_PROGS = l2tool l2_test
   
  @@ -137,9 +137,6 @@
   libl2.la: $(OBJS)
   	$(LIBTOOL) --mode=link --quiet $(CC) -o libl2.la $(OBJS) -rpath $(libdir) \
   	    -version-info `$(SHTOOL) version -l c -d libtool l2_version.c`
  -libl2syslog.la: l2_syslog.lo libl2.la
  -	$(LIBTOOL) --mode=link --quiet $(CC) -o libl2syslog.la l2_syslog.lo libl2.la -rpath $(libdir) \
  -	    -version-info `$(SHTOOL) version -l c -d libtool l2_version.c`
   
   #   build regex library
   l2_ut_pcre.lo: l2_ut_pcre.tab l2_ut_pcre.c
  @@ -161,8 +158,6 @@
   	$(LIBTOOL) --mode=link --quiet $(CC) $(LDFLAGS) -o l2tool l2tool.o libl2.la $(LIBS)
   l2_test: l2_test.o libl2.la
   	$(LIBTOOL) --mode=link --quiet $(CC) $(LDFLAGS) -o l2_test l2_test.o libl2.la $(LIBS)
  -l2_test_syslog: l2_test_syslog.o libl2syslog.la libl2.la
  -	$(LIBTOOL) --mode=link --quiet $(CC) $(LDFLAGS) -o l2_test_syslog l2_test_syslog.o libl2syslog.la libl2.la $(LIBS)
   
   #   build Unix manual pages
   l2tool.1: l2tool.pod l2_version.c
  @@ -201,14 +196,11 @@
   	$(SHTOOL) install -c -m 644 l2.h $(DESTDIR)$(includedir)/l2.h
   	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 \
   	    libl2.la $(DESTDIR)$(libdir)/libl2.la
  -	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 \
  -	    libl2syslog.la $(DESTDIR)$(libdir)/libl2syslog.la
   
   #   perform standard uninstallation procedure
   uninstall:
   	$(MAKE) $(MFLAGS) uninstall-c uninstall-std
   uninstall-c:
  -	@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libl2syslog.la
   	@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libl2.la
   	$(RM) $(DESTDIR)$(includedir)/l2.h
   	$(RM) $(DESTDIR)$(mandir)/man3/l2.3
      

From ossp-cvs-owner@ossp.org  Tue Jul  9 11:42:11 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9221D767CA; Tue,  9 Jul 2002 11:42:10 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl .cvsignore Makefile.in README VERSION aclocal...
Message-Id: <20020709094210.9221D767CA@mail.ossp.org>
Date: Tue,  9 Jul 2002 11:42:10 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Jul-2002 11:42:10
  Branch: HEAD                             Handle: 2002070910420900

  Added files:
    ossp-pkg/fsl            .cvsignore Makefile.in README VERSION aclocal.m4
                            configure.ac devtool devtool.conf devtool.func
                            fsl-config.in fsl.ac fsl.c fsl.pod fsl_test.c

  Log:
    First cut for new-born OSSP fsl, a faking syslog(3) API library.
    It is internally based (and contains) OSSP l2 and OSSP cfg.

  Summary:
    Revision    Changes     Path
    1.1         +13 -0      ossp-pkg/fsl/.cvsignore
    1.1         +150 -0     ossp-pkg/fsl/Makefile.in
    1.1         +47 -0      ossp-pkg/fsl/README
    1.1         +6  -0      ossp-pkg/fsl/VERSION
    1.1         +228 -0     ossp-pkg/fsl/aclocal.m4
    1.1         +78 -0      ossp-pkg/fsl/configure.ac
    1.1         +47 -0      ossp-pkg/fsl/devtool
    1.1         +71 -0      ossp-pkg/fsl/devtool.conf
    1.1         +73 -0      ossp-pkg/fsl/devtool.func
    1.1         +145 -0     ossp-pkg/fsl/fsl-config.in
    1.1         +38 -0      ossp-pkg/fsl/fsl.ac
    1.1         +241 -0     ossp-pkg/fsl/fsl.c
    1.1         +110 -0     ossp-pkg/fsl/fsl.pod
    1.1         +14 -0      ossp-pkg/fsl/fsl_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  Makefile
  config.guess
  config.h
  config.h.in
  config.sub
  configure
  libtool.m4
  ltmain.sh
  fsl-config
  fsl.3
  fsl.h
  fsl_test
  shtool
  Index: ossp-pkg/fsl/Makefile.in
  ============================================================
  $ cvs update -p -r1.1 Makefile.in
  ##
  ##  OSSP fsl - Faking Syslog Library
  ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  ##
  ##  This file is part of OSSP fsl, a syslog(3) API faking library which
  ##  can be found at http://www.ossp.org/pkg/lib/fsl/.
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  Makefile.in: make(1) build procedure
  ##
  
  @SET_MAKE@
  
  DESTDIR     =
  prefix      = @prefix@
  exec_prefix = @exec_prefix@
  bindir      = @bindir@
  libdir      = @libdir@
  includedir  = @includedir@
  mandir      = @mandir@
  
  CC          = @CC@
  CPPFLAGS    = @CPPFLAGS@
  CFLAGS      = @DEFS@ @CFLAGS@
  LDFLAGS     = @LDFLAGS@
  LIBS        = @LIBS@
  RM          = rm -f
  RMDIR       = rmdir
  SHTOOL      = ./shtool
  LIBTOOL     = ./libtool
  TRUE        = true
  POD2MAN     = pod2man
  
  LIB_NAME    = libfsl.la
  LIB_OBJS    = fsl.lo
  LIB_DEPS    = @LIB_DEPS@
  
  TST_NAME    = fsl_test
  TST_OBJS    = fsl_test.o
  
  SUBDIRS     = @SUBDIR_L2@ @SUBDIR_CFG@
  
  .SUFFIXES:
  .SUFFIXES: .c .o .lo
  
  all: _SUBDIRS_all $(LIB_NAME) $(TST_NAME)
  
  .c.o:
  	$(CC) $(CPPFLAGS) $(CFLAGS) -c $<
  
  .c.lo:
  	@$(LIBTOOL) --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS) -c $<
  
  #   convinience rule for calling _SUBDIRS with various make targets
  _SUBDIRS_all _SUBDIRS_check _SUBDIRS_install _SUBDIRS_uninstall _SUBDIRS_clean \
  _SUBDIRS_distclean _SUBDIRS_realclean _SUBDIRS_depend:
  	@$(MAKE) $(MFLAGS) \
  	         _SUBDIRS_TARGET=`echo $@ | sed -e 's/^_SUBDIRS_//'` \
  	         _SUBDIRS_STEPDOWN 
  
  #   the work horse rule which steps down to the subdirs in a loop
  _SUBDIRS_STEPDOWN:
  	@for subdir in $(SUBDIRS); do \
  	    test ! -f "$$subdir/Makefile" && continue; \
  	    echo "===> $(_SUBDIRS_DP)$$subdir ($(_SUBDIRS_TARGET))"; \
  	    (cd $$subdir; \
  	     $(MAKE) $(MFLAGS) \
  	             _SUBDIRS_DP="$(_SUBDIRS_DP)$$subdir/" \
  	             $(_SUBDIRS_TARGET) || exit 1) || exit 1; \
  	    echo "<=== $(_SUBDIRS_DP)$$subdir"; \
  	done
  
  $(LIB_NAME): $(LIB_OBJS)
  	@$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $(LIB_NAME) $(LIB_OBJS) $(LIB_DEPS) -rpath $(libdir) \
  	    -version-info `$(SHTOOL) version -l txt -d libtool VERSION` $(LIBS)
  
  $(TST_NAME): $(TST_OBJS) $(LIB_NAME)
  	@$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $(TST_NAME) $(TST_OBJS) $(LIB_NAME) $(LIBS)
  
  man: fsl.3
  fsl.3: fsl.pod
  	V1=`$(SHTOOL) version -l txt -d short VERSION`; \
  	V2=`$(SHTOOL) version -l txt -d long VERSION`; \
  	D=`$(SHTOOL) version -l txt -d long VERSION | sed -e 's;.*(;;' -e 's;).*;;'`; \
  	$(POD2MAN) --quotes=none \
  	           --section=3 --center="Faking Syslog Library" \
  	           --release="$$D" --date="OSSP fsl $$V1" fsl.pod | \
  	sed -e "s;FSL_VERSION_STR;$$V2;" >fsl.3
  
  check: $(TST_NAME)
  	@$(LIBTOOL) --mode=execute ./$(TST_NAME)
  
  install:
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libdir)
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man3
  	$(SHTOOL) install -c -m 755 fsl-config $(DESTDIR)$(bindir)/
  	$(SHTOOL) install -c -m 644 fsl.3 $(DESTDIR)$(mandir)/man3/
  	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libfsl.la $(DESTDIR)$(libdir)/
  
  uninstall:
  	@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libfsl.la
  	-$(RM) $(DESTDIR)$(mandir)/man3/fsl.3
  	-$(RM) $(DESTDIR)$(bindir)/fsl-config
  	-$(RMDIR) $(DESTDIR)$(mandir)/man3 >/dev/null 2>&1 || $(TRUE)
  	-$(RMDIR) $(DESTDIR)$(mandir) >/dev/null 2>&1 || $(TRUE)
  	-$(RMDIR) $(DESTDIR)$(libdir) >/dev/null 2>&1 || $(TRUE)
  	-$(RMDIR) $(DESTDIR)$(bindir) >/dev/null 2>&1 || $(TRUE)
  	-$(RMDIR) $(DESTDIR)$(prefix) >/dev/null 2>&1 || $(TRUE)
  
  clean:
  	@$(MAKE) $(MFLAGS) _SUBDIRS_clean
  	-$(RM) $(LIB_NAME) $(LIB_OBJS)
  	-$(RM) $(TST_NAME) $(TST_OBJS)
  	-$(RM) -r .libs >/dev/null 2>&1 || $(TRUE)
  	-$(RM) *.o *.lo
  
  distclean: clean
  	@$(MAKE) $(MFLAGS) _SUBDIRS_distclean
  	-$(RM) config.log config.status config.cache
  	-$(RM) Makefile config.h sa-config
  	-$(RM) libtool
  
  realclean: distclean
  	@$(MAKE) $(MFLAGS) _SUBDIRS_realclean
  	-$(RM) fsl.3
  	-$(RM) configure config.h.in
  	-$(RM) shtool
  	-$(RM) ltmain.sh libtool.m4 config.guess config.sub
  
  Index: ossp-pkg/fsl/README
  ============================================================
  $ cvs update -p -r1.1 README
      __     _ 
     / _|___| |
    | |_/ __| |
    |  _\__ \ |
    |_| |___/_|
               
    OSSP fsl - Faking Syslog Library
    Version 
  
    ABSTRACT
  
    OSSP fsl is ....
  
    COPYRIGHT AND LICENSE
  
    Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
    Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
    Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  
    This file is part of OSSP fsl, a syslog(3) API faking library which
    can be found at http://www.ossp.org/pkg/lib/fsl/.
  
    Permission to use, copy, modify, and distribute this software for
    any purpose with or without fee is hereby granted, provided that
    the above copyright notice and this permission notice appear in all
    copies.
  
    THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
    WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
    IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
    CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
    USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    SUCH DAMAGE.
  
    HOME AND DOCUMENTATION
  
    The documentation and latest release can be found on
  
    o http://www.ossp.org/pkg/lib/fsl/
    o  ftp://ftp.ossp.org/pkg/lib/fsl/
  
  Index: ossp-pkg/fsl/VERSION
  ============================================================
  $ cvs update -p -r1.1 VERSION
  
    VERSION -- Version Information for OSSP fsl (syntax: Text)
    [automatically generated and maintained by GNU shtool]
  
    This is OSSP fsl, Version 0.1.0 (09-Jul-2002)
  
  Index: ossp-pkg/fsl/aclocal.m4
  ============================================================
  $ cvs update -p -r1.1 aclocal.m4
  dnl ##
  dnl ##  OSSP fsl - Faking Syslog Library
  dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  dnl ##
  dnl ##  This file is part of OSSP fsl, a syslog(3) API faking library which
  dnl ##  can be found at http://www.ossp.org/pkg/lib/fsl/.
  dnl ##
  dnl ##  Permission to use, copy, modify, and distribute this software for
  dnl ##  any purpose with or without fee is hereby granted, provided that
  dnl ##  the above copyright notice and this permission notice appear in all
  dnl ##  copies.
  dnl ##
  dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  dnl ##  SUCH DAMAGE.
  dnl ##
  dnl ##  aclocal.m4: GNU Autoconf local macro definitions
  dnl ##
  
  dnl ##
  dnl ##  Check whether compiler option works
  dnl ##
  dnl ##  configure.in:
  dnl ##    AC_COMPILER_OPTION(<name>, <display>, <option>,
  dnl ##                       <action-success>, <action-failure>)
  dnl ##
  
  AC_DEFUN(AC_COMPILER_OPTION,[dnl
  AC_MSG_CHECKING(whether compiler option(s) $2 work)
  AC_CACHE_VAL(ac_cv_compiler_option_$1,[
  SAVE_CFLAGS="$CFLAGS"
  CFLAGS="$CFLAGS $3"
  AC_TRY_COMPILE([],[], ac_cv_compiler_option_$1=yes, ac_cv_compiler_option_$1=no)
  CFLAGS="$SAVE_CFLAGS"
  ])dnl
  if test ".$ac_cv_compiler_option_$1" = .yes; then
      ifelse([$4], , :, [$4])
  else
      ifelse([$5], , :, [$5])
  fi
  AC_MSG_RESULT([$ac_cv_compiler_option_$1])
  ])dnl
  
  dnl ##
  dnl ##  Debugging Support
  dnl ##
  dnl ##  configure.in:
  dnl ##    AC_CHECK_DEBUGGING
  dnl ##
  
  AC_DEFUN(AC_CHECK_DEBUGGING,[dnl
  AC_ARG_ENABLE(debug,dnl
  [  --enable-debug          build for debugging (default=no)],
  [dnl
  if test ".$ac_cv_prog_gcc" = ".yes"; then
      case "$CFLAGS" in
          *-O* ) ;;
             * ) CFLAGS="$CFLAGS -O2" ;;
      esac
      case "$CFLAGS" in
          *-g* ) ;;
             * ) CFLAGS="$CFLAGS -g" ;;
      esac
      case "$CFLAGS" in
          *-pipe* ) ;;
                * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
      esac
      AC_COMPILER_OPTION(defdbg, -DDEBUG, -DDEBUG, CFLAGS="$CFLAGS -DDEBUG")
      CFLAGS="$CFLAGS -pedantic"
      CFLAGS="$CFLAGS -Wall"
      WMORE="-Wshadow -Wpointer-arith -Wcast-align -Winline"
      WMORE="$WMORE -Wmissing-prototypes -Wmissing-declarations -Wnested-externs"
      AC_COMPILER_OPTION(wmore, -W<xxx>, $WMORE, CFLAGS="$CFLAGS $WMORE")
      AC_COMPILER_OPTION(wnolonglong, -Wno-long-long, -Wno-long-long, CFLAGS="$CFLAGS -Wno-long-long")
  else
      case "$CFLAGS" in
          *-g* ) ;;
             * ) CFLAGS="$CFLAGS -g" ;;
      esac
  fi
  msg="enabled"
  ],[
  if test ".$ac_cv_prog_gcc" = ".yes"; then
  case "$CFLAGS" in
      *-pipe* ) ;;
            * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
  esac
  fi
  case "$CFLAGS" in
      *-g* ) CFLAGS=`echo "$CFLAGS" |\
                     sed -e 's/ -g / /g' -e 's/ -g$//' -e 's/^-g //g' -e 's/^-g$//'` ;;
  esac
  case "$CXXFLAGS" in
      *-g* ) CXXFLAGS=`echo "$CXXFLAGS" |\
                       sed -e 's/ -g / /g' -e 's/ -g$//' -e 's/^-g //g' -e 's/^-g$//'` ;;
  esac
  msg=disabled
  ])dnl
  AC_MSG_CHECKING(for compilation debug mode)
  AC_MSG_RESULT([$msg])
  if test ".$msg" = .enabled; then
      enable_shared=no
  fi
  ])
  
  dnl ##
  dnl ##  Check for an external/extension library.
  dnl ##  - is aware of <libname>-config style scripts
  dnl ##  - searches under standard paths include, lib, etc.
  dnl ##  - searches under subareas like .libs, etc.
  dnl ##
  dnl ##  configure.in:
  dnl ##      AC_CHECK_EXTLIB(<realname>, <libname>, <func>, <header>,
  dnl ##                      [<success-action> [, <fail-action>]])
  dnl ##  Makefile.in:
  dnl ##      CFLAGS  = @CFLAGS@
  dnl ##      LDFLAGS = @LDFLAGS@
  dnl ##      LIBS    = @LIBS@
  dnl ##  shell:
  dnl ##      $ ./configure --with-<libname>[=DIR]
  dnl ##
  
  AC_DEFUN(AC_CHECK_EXTLIB,[dnl
  AC_ARG_WITH($2, [dnl
  [  --with-]m4_substr([$2[[=DIR]]                     ], 0, 19)[build with external $1 library (default=no)]], [dnl
      if test ".$with_$2" = .yes; then
          #   via config script in PATH
          $2_version=`($2-config --version) 2>/dev/null`
          if test ".$$2_version" != .; then
              CPPFLAGS="$CPPFLAGS `$2-config --cflags`"
              CFLAGS="$CFLAGS `$2-config --cflags`"
              LDFLAGS="$LDFLAGS `$2-config --ldflags`"
          fi
      else
          if test -d "$with_$2"; then
              found=0
              #   via config script
              for dir in $with_$2/bin $with_$2; do
                  if test -f "$dir/$2-config" && test ! -f "$dir/$2-config.in"; then
                      $2_version=`($dir/$2-config --version) 2>/dev/null`
                      if test ".$$2_version" != .; then
                          CPPFLAGS="$CPPFLAGS `$dir/$2-config --cflags`"
                          CFLAGS="$CFLAGS `$dir/$2-config --cflags`"
                          LDFLAGS="$LDFLAGS `$dir/$2-config --ldflags`"
                          found=1
                          break
                      fi
                  fi
              done
              #   in standard sub-areas
              if test ".$found" = .0; then
                  for dir in $with_$2/include/$2 $with_$2/include $with_$2; do
                      if test -f "$dir/$4"; then
                          CPPFLAGS="$CPPFLAGS -I$dir"
                          CFLAGS="$CFLAGS -I$dir"
                          found=1
                          break
                      fi
                  done
                  for dir in $with_$2/lib/$2 $with_$2/lib $with_$2; do
                      if test -f "$dir/lib$2.la" && test -d "$dir/.libs"; then
                          LDFLAGS="$LDFLAGS -L$dir -L$dir/.libs"
                          found=1
                          break
                      elif test -f "$dir/lib$2.a" || test -f "$dir/lib$2.so"; then
                          LDFLAGS="$LDFLAGS -L$dir"
                          found=1
                          break
                      fi
                  done
              fi
              #   in any sub-area
              if test ".$found" = .0; then
  changequote(, )dnl
                  for file in x `find $with_$2 -name "$4" -type f -print`; do
                      test .$file = .x && continue
                      dir=`echo $file | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;'`
                      CPPFLAGS="$CPPFLAGS -I$dir"
                      CFLAGS="$CFLAGS -I$dir"
                  done
                  for file in x `find $with_$2 -name "lib$2.[aso]" -type f -print`; do
                      test .$file = .x && continue
                      dir=`echo $file | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;'`
                      LDFLAGS="$LDFLAGS -L$dir"
                  done
  changequote([, ])dnl
              fi
          fi
      fi
      AC_HAVE_HEADERS($4)
      AC_CHECK_LIB($2, $3)
      with_$2=yes
      ac_var="ac_cv_header_`echo $4 | sed 'y%./+-%__p_%'`"
      eval "ac_val=\$$ac_var"
      if test ".$ac_val" != .yes; then
          with_$2=no
      fi
      if test ".$ac_cv_lib_$2_$3" != .yes; then
          with_$2=no
      fi
      if test ".$with_$2" = .no; then
          AC_ERROR([Unable to find $1 library])
      fi
      ], [dnl
  if test ".$with_$2" = .; then
      with_$2=no
  fi
      ])dnl
  AC_MSG_CHECKING(whether to build against external $1 library)
  if test ".$with_$2" = .yes; then
      ifelse([$5], , :, [$5])
  else
      ifelse([$6], , :, [$6])
  fi
  AC_MSG_RESULT([$with_$2])
  ])dnl
  
  Index: ossp-pkg/fsl/configure.ac
  ============================================================
  $ cvs update -p -r1.1 configure.ac
  dnl ##
  dnl ##  OSSP fsl - Faking Syslog Library
  dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  dnl ##
  dnl ##  This file is part of OSSP fsl, a syslog(3) API faking library which
  dnl ##  can be found at http://www.ossp.org/pkg/lib/fsl/.
  dnl ##
  dnl ##  Permission to use, copy, modify, and distribute this software for
  dnl ##  any purpose with or without fee is hereby granted, provided that
  dnl ##  the above copyright notice and this permission notice appear in all
  dnl ##  copies.
  dnl ##
  dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  dnl ##  SUCH DAMAGE.
  dnl ##
  dnl ##  configure.ac: GNU Autoconf source script
  dnl ##
  
  AC_PREREQ(2.53)
  AC_INIT
  FSL_VERSION_STR=`./shtool version -l txt -d long VERSION`
  ./shtool echo -e "Configuring %BOSSP fsl%b (Faking Syslog Library), version %B${FSL_VERSION_STR}%b"
  AC_SUBST(FSL_VERSION_STR)
  
  AC_PROG_MAKE_SET
  AC_PROG_CC
  AC_CHECK_DEBUGGING
  
  sinclude(libtool.m4)
  AC_PROG_LIBTOOL
  
  sinclude(fsl.ac)
  FSL_CHECK_ALL
  
  dnl #   pre-processing for subdirs
  LIB_DEPS=""
  
  dnl #   check for OSSP l2 library
  AC_CHECK_EXTLIB([OSSP l2], 
                  l2, l2_stream_log, l2.h, 
                  [SUBDIR_L2=""], 
                  [SUBDIR_L2="lib_l2"
                   CPPFLAGS="$CPPFLAGS -Ilib_l2"
                   CFLAGS="$CFLAGS -Ilib_l2"
                   LIB_DEPS="$LIB_DEPS lib_l2/*.lo"])
  AC_SUBST(SUBDIR_L2)
  
  dnl #   check for OSSP cfg library
  AC_CHECK_EXTLIB([OSSP cfg], 
                  cfg, cfg_syn_import, cfg.h, 
                  [SUBDIR_CFG=""], 
                  [SUBDIR_CFG="lib_cfg"
                   CPPFLAGS="$CPPFLAGS -Ilib_cfg"
                   CFLAGS="$CFLAGS -Ilib_cfg"
                   LIB_DEPS="$LIB_DEPS lib_cfg/*.lo"])
  AC_SUBST(SUBDIR_CFG)
  
  dnl #   post-processing for subdirs
  AC_SUBST(LIB_DEPS)
  AC_CONFIG_SUBDIRS([$SUBDIR_L2 $SUBDIR_CFG])
  
  AC_CONFIG_HEADERS(config.h)
  AC_CONFIG_FILES([Makefile fsl-config])
  AC_CONFIG_COMMANDS([adjustment], [chmod a+x fsl-config])
  AC_OUTPUT
  
  Index: ossp-pkg/fsl/devtool
  ============================================================
  $ cvs update -p -r1.1 devtool
  #!/bin/sh
  ##
  ##  devtool -- Development Tool
  ##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  if [ $# -eq 0 ]; then
      echo "devtool:USAGE: devtool <command> [<arg> ...]" 1>&2
      exit 1
  fi
  
  cmd="$1"
  shift
  
  devtoolfunc="./devtool.func"
  
  if [ ! -f devtool.conf ]; then
      echo "devtool:ERROR: no devtool.conf in current directory" 1>&2
      exit 1
  fi
  
  cmdline=`grep "^%$cmd" devtool.conf`
  if [ ".$cmdline" = . ]; then
      echo "devtool:ERROR: command $cmd not found in devtool.conf" 1>&2
      exit 1
  fi
  
  if [ ".$TMPDIR" != . ]; then
      tmpdir="$TMPDIR"
  elif [ ".$TEMPDIR" != . ]; then
      tmpdir="$TEMPDIR"
  else
      tmpdir="/tmp"
  fi
  tmpfile="$tmpdir/rc.$$.tmp"
  
  rm -f $tmpfile
  touch $tmpfile
  echo ". $devtoolfunc" >>$tmpfile
  ( sed <devtool.conf -e "1,/^%common/d" -e '/^%.*/,$d'
    sed <devtool.conf -e "1,/^%$cmd/d" -e '/^%.*/,$d' ) |\
  sed -e 's;\([ 	]\)@\([a-zA-Z_][a-zA-Z0-9_]*\);\1devtool_\2;' >>$tmpfile
  
  sh $tmpfile "$@"
  
  rm -f $tmpfile >/dev/null 2>&1 || true
  
  Index: ossp-pkg/fsl/devtool.conf
  ============================================================
  $ cvs update -p -r1.1 devtool.conf
  ##
  ##  devtool.conf -- Development Tool Configuration
  ##
  
  %checkout
      for name in l2 cfg; do
          echo "===> lib_${name} (cvs co)"
          cvs co -d lib_${name} ${name}
          echo "<=== lib_${name}"
      done
  
  %autogen
      @autogen shtool   1.6.0 "1.6.*" all
      @autogen libtool  1.4.2 "1.4*"
      @autogen autoconf 2.53  "2.5[3-9]*"
  
      for name in l2 cfg; do
          echo "===> lib_${name} (devtool autogen)"
          (cd lib_${name} && ./devtool autogen)
          echo "<=== lib_${name}"
      done
  
  %autoclean
      @autoclean shtool
      @autoclean libtool
      @autoclean autoconf
  
      for name in l2 cfg; do
          echo "===> lib_${name} (devtool autogen)"
          (cd lib_${name} && ./devtool autoclean)
          echo "<=== lib_${name}"
      done
  
  %configure
      ./configure \
          --prefix=/tmp/fsl \
          --disable-shared \
          --enable-maintainer \
          --enable-debug \
          "$@"
  
  %version
      ./shtool version -l txt -n "OSSP fsl" -e VERSION
      V=`./shtool version -l txt -d long VERSION`
      sed -e "s/Version .*(.*)/Version $V/g" <README >README.n 
      mv README.n README
  
  %dist
      echo "+++ generating"
      ./devtool autoclean
      ./devtool autogen
      echo "+++ configuring"
      ./configure
      echo "+++ building"
      make clean all man
      echo "+++ cleaning"
      make distclean
      echo "+++ fixing"
      ./shtool fixperm -v .
      echo "+++ rolling"
      V=`./shtool version -l txt -d short VERSION`
      ./shtool tarball -o fsl-${V}.tar.gz -d fsl-${V} -u ossp -g ossp \
                       -e 'CVS,\.cvsignore,\.[ao],^\.,devtool*,*.tar.gz' -c 'gzip --best' .
      ls -l fsl-${V}.tar.gz
      echo "+++ testing"
      gunzip <fsl-${V}.tar.gz | tar tvf -
  
  %release
      echo "+++ copying to ftp://ftp.ossp.org/pkg/fsl/"
      scp fsl-*.tar.gz master.ossp.org:/e/ossp/ftp/pkg/fsl/
  
  Index: ossp-pkg/fsl/devtool.func
  ============================================================
  $ cvs update -p -r1.1 devtool.func
  ##
  ##  devtool.func -- Development Tool Functions
  ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  devtool_require () {
      t="$1"; o="$2"; p="$3"; e="$4"; a="$5"
      v=`($t $o | head -1 | awk "{ print \\\$$p; }") 2>/dev/null`
      if [ ".$v" = . ]; then
          echo "devtool:ERROR: unable to determine version of $t" 1>&2
          exit 1
      fi
      case "$v" in
          $e )
              ;;
          $a )
              echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
              ;;
          * )
              echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
              exit 1
              ;;
      esac
      echo "$v"
  }
  
  devtool_autogen () {
      tool=$1
      shift
      case $tool in
          autoconf )
              autoconf_version=`devtool_require autoconf --version 4 "$1" "$2"`
              echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
              autoconf
              autoheader 2>&1 | grep -v "is unchanged"
              rm -rf autom4te.cache >/dev/null 2>&1
              ;;
          libtool )
              libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
              echo "generating (GNU Libtool $libtoolize_version): ltmain.sh, libtool.m4, config.guess, config.sub"
              libtoolize --force --copy >/dev/null 2>&1
              cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
                  sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` libtool.m4
              ;;
          shtool )
              shtoolize_version=`devtool_require shtoolize -v 3 "$1" "$2"`
              echo "generating (GNU Shtool $shtoolize_version): shtool"
              shift
              shift
              shtoolize -q "$@"
              ;;
      esac
  }
  
  devtool_autoclean () {
      tool=$1
      shift
      case $tool in
          autoconf )
              echo "removing: configure config.h.in"
              rm -f configure config.h.in
              ;;
          libtool )
              echo "removing: ltmain.sh libtool.m4 config.guess config.sub"
              rm -f ltmain.sh libtool.m4 config.guess config.sub
              ;;
          shtool )
              echo "removing: shtool"
              rm -f shtool
              ;;
      esac
  }
  
  Index: ossp-pkg/fsl/fsl-config.in
  ============================================================
  $ cvs update -p -r1.1 fsl-config.in
  #!/bin/sh
  ##
  ##  OSSP fsl - Faking Syslog Library
  ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  ##
  ##  This file is part of OSSP fsl, a syslog(3) API faking library which
  ##  can be found at http://www.ossp.org/pkg/lib/fsl/.
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  fsl-config.in: OSSP fsl build utility
  ##
  
  DIFS=' 	
  '
  
  prefix="@prefix@"
  exec_prefix="@exec_prefix@"
  
  fsl_prefix="$prefix"
  fsl_exec_prefix="$exec_prefix"
  fsl_bindir="@bindir@"
  fsl_libdir="@libdir@"
  fsl_includedir="@includedir@"
  fsl_mandir="@mandir@"
  fsl_datadir="@datadir@"
  fsl_acdir="@datadir@/aclocal"
  fsl_cflags="@CFLAGS@"
  fsl_ldflags="@LDFLAGS@"
  fsl_libs="@LIBS@"
  fsl_version="@FSL_VERSION_STR@"
  
  help=no
  version=no
  
  usage="fsl-config"
  usage="$usage [--help] [--version] [--all]"
  usage="$usage [--prefix] [--exec-prefix] [--bindir] [--libdir] [--includedir] [--mandir] [--datadir] [--acdir]"
  usage="$usage [--cflags] [--ldflags] [--libs]"
  if [ $# -eq 0 ]; then
      echo "fsl-config:Error: Invalid option" 1>&2
      echo "fsl-config:Usage: $usage" 1>&2
      exit 1
  fi
  output=''
  output_extra=''
  all=no
  prev=''
  OIFS="$IFS" IFS="$DIFS"
  for option
  do
      if [ ".$prev" != . ]; then
          eval "$prev=\$option"
          prev=''
          continue
      fi
      case "$option" in
          -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
             *) optarg='' ;;
      esac
      case "$option" in
          --help|-h)
              echo "Usage: $usage"
              exit 0
              ;;
          --version|-v)
              echo "OSSP fsl $fsl_version"
              exit 0
              ;;
          --all)
              all=yes
              ;;
          --prefix)
              output="$output $fsl_prefix"
              ;;
          --exec-prefix)
              output="$output $fsl_exec_prefix"
              ;;
          --bindir)
              output="$output $fsl_bindir"
              ;;
          --libdir)
              output="$output $fsl_libdir"
              ;;
          --includedir)
              output="$output $fsl_includedir"
              ;;
          --mandir)
              output="$output $fsl_mandir"
              ;;
          --datadir)
              output="$output $fsl_datadir"
              ;;
          --acdir)
              output="$output $fsl_acdir"
              ;;
          --cflags)
              output="$output -I$fsl_includedir"
              output_extra="$output_extra $fsl_cflags"
              ;;
          --ldflags)
              output="$output -L$fsl_libdir"
              output_extra="$output_extra $fsl_ldflags"
              ;;
          --libs)
              output="$output -lfsl"
              output_extra="$output_extra $fsl_libs"
              ;;
          * )
              echo "sa-config:Error: Invalid option" 1>&2
              echo "sa-config:Usage: $usage" 1>&2
              exit 1;
              ;;
      esac
  done
  IFS="$OIFS"
  if [ ".$prev" != . ]; then
      echo "fsl-config:Error: missing argument to --`echo $prev | sed 's/_/-/g'`" 1>&2
      exit 1
  fi
  if [ ".$output" != . ]; then
      if [ ".$all" = .yes ]; then
          output="$output $output_extra"
      fi
      echo $output
  fi
  
  Index: ossp-pkg/fsl/fsl.ac
  ============================================================
  $ cvs update -p -r1.1 fsl.ac
  dnl ##
  dnl ##  OSSP fsl - Faking Syslog Library
  dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  dnl ##
  dnl ##  This file is part of OSSP fsl, a syslog(3) API faking library which
  dnl ##  can be found at http://www.ossp.org/pkg/lib/fsl/.
  dnl ##
  dnl ##  Permission to use, copy, modify, and distribute this software for
  dnl ##  any purpose with or without fee is hereby granted, provided that
  dnl ##  the above copyright notice and this permission notice appear in all
  dnl ##  copies.
  dnl ##
  dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  dnl ##  SUCH DAMAGE.
  dnl ##
  dnl ##  fsl.ac: OSSP fsl Autoconf checks
  dnl ##
  
  dnl #   Check for anything OSSP SA wants to know
  dnl #   configure.in:
  dnl #     FSL_CHECK_ALL
  
  AC_DEFUN(FSL_CHECK_ALL,[
      AC_CHECK_HEADERS(syslog.h)
  ])
  
  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs update -p -r1.1 fsl.c
  /*
  **  OSSP fsl - Faking Syslog Library
  **  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP fsl, a syslog(3) API faking library which
  **  can be found at http://www.ossp.org/pkg/lib/fsl/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  fsl.c: OSSP fsl library
  */
  
  /* standard includes we use */
  #include <stdio.h>
  #include <stdlib.h>
  #include <stdarg.h>
  #include <errno.h>
  #include <string.h>
  #include <unistd.h>
  #include <time.h>
  #include <sys/time.h>
  
  /* standard include we re-implement */
  #include <syslog.h>
  
  /* default for the dedicated logfile */
  #ifndef LOGFILE
  #define LOGFILE "/tmp/syslog"
  #endif
  
  #ifndef LOG_PRIMASK
  #define LOG_PRIMASK (LOG_EMERG|LOG_ALERT|LOG_CRIT|LOG_ERR|LOG_WARNING|LOG_NOTICE|LOG_INFO|LOG_DEBUG)
  #endif
  #ifndef LOG_PRI
  #define LOG_PRI(p) ((p) & LOG_PRIMASK)
  #endif
  
  /* log level to string mapping */
  static struct {
      int level;
      char *string;
  } level2string[] = {
      { LOG_EMERG,   "emerg"    },
      { LOG_ALERT,   "alert"    },
      { LOG_CRIT,    "crit"     },
      { LOG_ERR,     "err"      },
      { LOG_WARNING, "warning"  },
      { LOG_NOTICE,  "notice"   },
      { LOG_INFO,    "info"     },
      { LOG_DEBUG,   "debug"    },
      { 0,           NULL       }
  };
  
  /* internal context structure */
  static struct {
      FILE *log;
      char *logfile;
      const char *ident;
      int logopt;
      int facility;
      int maskpri;
  } ctx = { 
      NULL, LOGFILE, "unknown", 0, LOG_USER, 0xff
  };
  
  void openlog(const char *ident, int logopt, int facility)
  {
      /* remember parameters */
      ctx.ident    = ident;
      ctx.logopt   = logopt;
      ctx.facility = facility;
  
      /* close perhaps still open logfile */
      if (ctx.log != NULL) {
          fclose(ctx.log);
          ctx.log = NULL;
      }
  
      /* (re-)open new logfile */
      if (!(ctx.logopt & LOG_NDELAY) && ctx.log == NULL)
          if ((ctx.log = fopen(ctx.logfile, "a")) == NULL)
              return;
      return;
  }
  
  void closelog(void)
  {
      /* close open logfile*/
      if (ctx.log != NULL) {
          fclose(ctx.log);
          ctx.log = NULL;
      }
      return;
  }
  
  int setlogmask(int maskpri)
  {
      int omask;
  
      /* remember the logging mask */
      omask = ctx.maskpri;
      if (maskpri != 0)
          ctx.maskpri = maskpri;
      return omask;
  }
  
  void syslog(int priority, const char *message, ...)
  {
      va_list args;
  
      /* wrap around vsyslog(3) */
      va_start(args, message);
      vsyslog(priority, message, args);
      va_end(args);
      return;
  }
  
  #ifdef HAVE_VSYSLOG_USVALIST
  void vsyslog(int priority, const char *fmt, __va_list args)
  #else
  void vsyslog(int priority, const char *fmt, va_list args)
  #endif
  {
      time_t now;
      int saved_errno;
      char buf[2048];
      char *cpBuf;
      int nBuf;
      char caMsg[2048];
      char *cpMsg;
      char *cpFmt;
      int i;
      char *cpTime;
      char *cpLevel;
  
      /* Check for invalid bits */
      if (priority & ~(LOG_PRIMASK|LOG_FACMASK))
          priority &= (LOG_PRIMASK|LOG_FACMASK);
  
      /* stop processing if mask disabled this call */
      if (!(LOG_MASK(LOG_PRI(priority)) & ctx.maskpri))
          return;
  
      /* make sure we have a reasonable default for facility */
      if ((priority & LOG_FACMASK) == 0)
          priority |= ctx.facility;
  
      /* remember errno for optional %m processing below */
      saved_errno = errno;
  
      /* open logfile now (if it was delayed) */
      if (ctx.log == NULL)
          if ((ctx.log = fopen(ctx.logfile, "a")) == NULL)
              return;
  
      /* determine current time */
      time(&now);
      cpTime = ctime(&now) + 4;
  
      /* determine logging level name */
      cpLevel = "unknown";
      for (i = 0; level2string[i].string != NULL; i++) {
          if (LOG_PRI(priority) == level2string[i].level) {
              cpLevel = level2string[i].string;
              break;
          }
      }
      
      /* start output generation */
      cpBuf = buf;
      sprintf(cpBuf, "%.15s <%s> %s", cpTime, cpLevel, ctx.ident);
      nBuf = strlen(cpBuf);
  
      /* optionally add process id */
      if (ctx.logopt & LOG_PID) {
          sprintf(cpBuf+nBuf, "[%d]", getpid());
          nBuf += strlen(cpBuf+nBuf);
      }
  
      /* end prefix */
      strcpy(cpBuf+nBuf, ": ");
      nBuf += 2;
  
      /* optionally expand %m in format string */
      cpFmt = (char *)fmt;
      if (strstr(cpFmt, "%m")) {
          cpMsg = caMsg;
          while (cpFmt[0] != '\0') {
              if (cpFmt[0] == '%' && cpFmt[1] == 'm') {
                  strcpy(cpMsg, strerror(saved_errno));
                  cpMsg += strlen(cpMsg);
                  cpFmt += 2;
              } else {
                  *cpMsg++ = *cpFmt++;
                  *cpMsg = '\0';
              }
          }
          cpFmt = caMsg;
      }
  
      /* append message to output buffer */
      vsprintf(cpBuf+nBuf, cpFmt, args);
      nBuf += strlen(cpBuf+nBuf);
  
      /* append newline if still not present */
      if (cpBuf[nBuf-1] != '\n') {
          cpBuf[nBuf++] = '\n';
          cpBuf[nBuf] = '\0';
      }
  
      /* now finally write output buffer to logfile */
      fwrite(cpBuf, nBuf, 1, ctx.log);
      fflush(ctx.log);
  
  #ifdef LOG_PERROR
      /* optionally also write output buffer to stderr */
      if (ctx.logopt & LOG_PERROR)
          fwrite(cpBuf, nBuf, 1, stderr);
  #endif
  
      return;
  }
  
  Index: ossp-pkg/fsl/fsl.pod
  ============================================================
  $ cvs update -p -r1.1 fsl.pod
  ##
  ##  OSSP fsl - Faking Syslog Library
  ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  ##
  ##  This file is part of OSSP fsl, a syslog(3) API faking library which
  ##  can be found at http://www.ossp.org/pkg/lib/fsl/.
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  fsl.pod: OSSP fsl manual page
  ##
  
  =pod
  
  =head1 NAME
  
  B<OSSP fsl> - Faking Syslog Library
  
  =head1 VERSION
  
  OSSP fsl FSL_VERSION_STR
  
  =head1 SYNOPSIS
  
   LDFLAGS=`fsl-config --ldflags` \
   LIBS="-lfsl" \
   ./configure [...]
  
  =head1 DESCRIPTION
  
  B<OSSP fsl> offers the syslog(3) API otherwise provided by the Standard
  C Library (F<libc>). Instead of writing to the syslogd(8) process, it
  uses the powerful B<OSSP l2> logging capabilities. It is a drop-in
  link-time replacement which enables any syslog(3) consumer to take
  advantage of B<OSSP l2> by just linking this library in before F<libc>.
  The source code of the program remains unchanged.
  
  =head1 FILES
  
  The B<OSSP l2syslog> library reads configuration sections located in
  one or more files. The path to the directory containing these file(s)
  is specified at compile time and is given to the configure script via
  C<--with-cfgdir=>I<cfgdir>.
  
  =head1 OPERATION
  
  If an application calls openlog(3) it passes an identification string
  (I<ident>) and a logging facility (I<facility>) along. B<OSSP l2syslog>
  tries to read the file "C<cfgdir>C</l2.>I<ident>". If the file is not
  readable, all files matching I<cfgdir>C</l2.*> are read.
  
  In both cases, all data that has been read in is then parsed for
  configuration sections. These are identified by "C<ident >I<match>"
  at the beginning of a line. The I<match> argument is a PCRE (Perl
  Compatible Regular Expression) that is matched against a string
  concatenated from "I<ident>/I<facility>" given to the openlog(3) call.
  
  The configuration section contains an B<OSSP l2> specification enclosed
  in curly brackets where the closing bracket must be placed on the
  beginning of a line and terminated with a semicolon. The B<OSSP l2>
  specification may contain $1, $2, ... variables which are filled in from
  the I<match> regex parts enclosed in round brackets.
  
  An B<OSSP l2> channel tree is build from each matching section and all
  found trees are merged together with a "null" channel to form a single
  tree. Further calls to syslog(3) will then inject log messages into this
  channel tree.
  
  =head1 EXAMPLE
  
   ident sendmail/.* {
     debug:
       prefix(prefix="%%b %%d %%H:%%M:%%S <%%L> $1 [%%P]: ",
              timezone=local)
       -> file(path="sendmail.debug.log", append=0,perm=432)
   };
  
  
  =head1 OPENPKG
  
  OpenPKG RPM packages must require the package "l2" in both C<BuildPreReq> and
  C<PreReq> and force the packaged application to link against F<libl2syslog.a>.
  
  =head1 SEE ALSO
  
  syslog(3).
  
  =head1 AUTHOR
  
  Thomas Lotterer <thl@ossp.org>
  
  =cut
  Index: ossp-pkg/fsl/fsl_test.c
  ============================================================
  $ cvs update -p -r1.1 fsl_test.c
  
  #include <stdio.h>
  #include <syslog.h>
  
  int main(int argc, char *argv[])
  {
      syslog(LOG_INFO, "Connection from host %s", "foo.bar.dom");
      openlog("mail", LOG_PID|LOG_NDELAY, LOG_FTP);
      syslog(LOG_ALERT, "who: internal error 23\n");
      setlogmask(LOG_UPTO(LOG_ERR));
      syslog(LOG_INFO|LOG_LOCAL2, "foobar error: %m");
      return 0;
  }
  

From ossp-cvs-owner@ossp.org  Tue Jul  9 17:08:03 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C1103767CA; Tue,  9 Jul 2002 17:08:02 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea.cgi
Message-Id: <20020709150802.C1103767CA@mail.ossp.org>
Date: Tue,  9 Jul 2002 17:08:02 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   09-Jul-2002 17:08:02
  Branch: HEAD                             Handle: 2002070916080200

  Modified files:
    ossp-pkg/tabea          tabea.cgi

  Log:
    Beginning logging for tabea

  Summary:
    Revision    Changes     Path
    1.35        +70 -1      ossp-pkg/tabea/tabea.cgi
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea.cgi
  ============================================================
  $ cvs diff -u -r1.34 -r1.35 tabea.cgi
  --- ossp-pkg/tabea/tabea.cgi	5 Jul 2002 13:06:35 -0000	1.34
  +++ ossp-pkg/tabea/tabea.cgi	9 Jul 2002 15:08:02 -0000	1.35
  @@ -257,6 +257,8 @@
       "    </td>" .
       "  </tr>" .
       "</table>" ;
  +    
  +    &logging("Starting program");
   
       return $text;
   }
  @@ -274,10 +276,13 @@
       if (! &validpassword($username, $password, $cfghash{'BaseDir'}.$cfghash{'PasswdFile'}) ) {
           $cgi->param(-name => 'username', -value => "");
           $cgi->param(-name => 'password', -value => "");
  +        &logging("User $username password error");
           $form = '';
           goto NEXTFORM;
       }
   
  +    &logging("User $username login successfull");
  +
       my $templatesfiles = &get_name_files($cfghash{'BaseDir'} . $cfghash{'ConfigDir'}, $username, 4);
       my $configsfiles = &get_name_files($cfghash{'BaseDir'} . $cfghash{'ConfigDir'}, $username, 6);
   
  @@ -446,9 +451,11 @@
           my $filename = $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $editfile;
           $text .= &editconfig($filename, 'w', $username) .
                    $cgi->hidden(-name => 'editfile', -default => $filename );
  +        &logging("Edit file $filename");
       } else {
           $text .= "<font color=red>Missing filename<br><br>\n" .
                    $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
  +        &logging("Missing filename");
       }
   
       return $text;
  @@ -478,9 +485,12 @@
               $password = "";
           }
   
  +        &logging("Saving $file");
  +
           goto NEXTFORM;
       } else {
           $text .= "<font color=red>Cannot save file<br><br>\n";
  +        &logging("Cannot save $file");
       }
   
       $text .= $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
  @@ -588,14 +598,17 @@
           }
           $text .= "Creating the new file $newpath<br><br>";
           system("touch $newpath") && die "Cannot create new file";
  +        &logging("Creating new file $newpath");
           $text .= "Setting new file rights for $newpath<br><br>";
           system("chmod u=rw $newpath") && die "Cannot set new file rights";
           system("chmod o=$filerights $newpath") && die "Cannot set new file rights";
  +        &logging("Changing filerights of $newpath");
           $text .= "<br><br><br>";
           $form = 'mainw';
           goto NEXTFORM;
       } else {
           $text .= "<font color=red>Cannot write file. File exists<br><br>\n";
  +        &logging("Cannot write $newpath File exists");
       }
       $text .= $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
   
  @@ -652,11 +665,13 @@
           else {
               $text .= "<font color=red>You can only change file rights in your own directory<br><br>\n" .
                        $cgi->submit(-name => 'dialog', -value => 'Back');
  +                     &logging("Changing filerights of $namefile not allowed");
           }
       }
       else {
           $text .= "<font color=red>Missing filename<br><br>\n" .
                    $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
  +                 &logging("Cannot change rights of empty filename");
       }
   
       return $text;
  @@ -686,8 +701,10 @@
       }
       else {
           die "Unknown file rights";
  +        &logging("Cannot change to unknown file rights");
       }
       system("chmod o=$filerights $filename") && die "Cannot set new file rights";
  +    &logging("Changing file rights of $filename to $newrights");
       $form = 'mainw';
       goto NEXTFORM;
   
  @@ -772,15 +789,18 @@
           $delfile =~ m{^([a-zA-Z0-9!"<A3>$%^&*()-_=+#~]+)/(.+)}sg;
           if ($1 eq $username) {
               system("rm $fpath") && die "Cannot delete file";
  +            &logging("Deleting $fpath");
               $form = 'mainw';
               goto NEXTFORM;
           }
           else {
               $text .= "<font color=red>You can only delete file in your own directory<br><br>\n";
  +            &loggong("Just delete your own files not $fpath");
           }
       }
       else {
           $text .= "<font color=red>Missing filename<br><br>\n";
  +        &loggin("Missing filename");
       }
   
       $text .= $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
  @@ -803,6 +823,7 @@
   
       if ($runfile eq '') {
           $text .= "<font color=red>No configuration selected <br><br>\n" ;
  +        &logging("Cannot run configuration without configuration");
           $text .= $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
           return $text;
       }
  @@ -819,6 +840,7 @@
                "Run command: " . $rcommand . "<br>";
   
       system("$rcommand > $output 2>&1");
  +    &logging("Running command $rcommand");
   
       $fileoutput = IO::File->new("<$output");
       if (defined $fileoutput) {
  @@ -838,6 +860,7 @@
       }
       else {
           $text .= "<font color=red>Run command not working<br><br>\n";
  +        &logging("Run command $rcommand not working");
       }
       $text .= $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
   
  @@ -855,6 +878,7 @@
       my @userlistarray = split(/\s/, $userlist);
      
       $akt_user = $username; 
  +    &logging("Using admin section");
       $text .= "<table>" .
       "<td>".
   
  @@ -1001,12 +1025,14 @@
       my $akt_u_p;
   
   
  +    &logging("Changing password of user $user");
       $valid = &validpassword($user, $old_password, $cfghash{'BaseDir'}.$cfghash{'PasswdFile'});
       if ( ($username eq $cfghash{'TabeaUser'}) && ($user ne $cfghash{'TabeaUser'}) ) { 
           $valid = 1; 
       }
       if ( !$valid ) {
           $cptext .= "<font color=red>The password is incorrect.<br><br>\n";
  +        &logging("Password is incorrect");
           if ( $cgi->param('username') eq $cfghash{'TabeaUser'}) {
               $cptext .= $cgi->submit(-name => 'dialog_admin', -value => 'Back');
           } else {
  @@ -1027,6 +1053,7 @@
               $pwdfp = IO::File->new(">$pwdfile");
               print $pwdfp $pwfiletext;
               $pwdfp->close();
  +            &logging("Writing new password for user $user");
               if ( $user =~ $username) {$password=$new1_password;}
               $form = 'mainw';
               goto NEXTFORM;
  @@ -1034,6 +1061,7 @@
             $cptext .= "<font color=red>The password you typed do not match. Type the same password. ".
               "in both boxes<br><br>\n".
               $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
  +            &logging("The password in the two boxes are not the same");
           } 
       }
       ENDE:
  @@ -1107,6 +1135,7 @@
           "<br>Username wrong<br><br>" .
           "</font>" .
           $cgi->submit(-name => 'dialog_admin', -value => 'Back');
  +        &logging("Username is wrong");
       } else {
           $pwdin = IO::File->new("<$pwdfile");
           while (<$pwdin>) {
  @@ -1145,7 +1174,8 @@
              
               $ntext .= "<font color=red>" .
                   "User $nuser created</font><br><br>" .
  -                $cgi->submit(-name => 'dialog_admin', -value => 'Back');
  +                $cgi->submit(-name => 'dialog_admin', -value => 'Back');    
  +                &logging("New use $nuser created");
                   
   
           } else {
  @@ -1153,6 +1183,7 @@
               "<br>User exists <br><br>" .
               "</font>" .
               $cgi->submit(-name => 'dialog_admin', -value => 'Back');
  +            &logging("Cannot create user $nuser. The user exists.")
           }
       }
   
  @@ -1219,6 +1250,7 @@
           "</font>" .
           "<br><br>" .
           $cgi->submit(-name => 'dialog_admin', -value => 'Back');
  +        &logging("The Tabea user cannot be deleted");
       }
   
   
  @@ -1314,6 +1346,7 @@
           foreach (@copfilesarray) {
   
               system("cp $deldir$_ $destdir$duser.$_") && die "Copy failed";
  +            &logging("The files of $duser saved");
           }
       }
   
  @@ -1329,6 +1362,7 @@
       $pwdin = IO::File->new(">$pwdfile");
       print $pwdin $pwdfiletext;
       $pwdin->close();
  +    &logging("User $duser deleted");
   
       $d3text .= "<br>" .
   
  @@ -1345,6 +1379,7 @@
   ########################################################################################
       my $text;
   
  +    &logging("Editing Tabea configuration");
       $text .= &editconfig($cfghash{'BaseDir'} . "tabea.cfg", 'w', $cfghash{'TabeaUser'} );
       $text .= $cgi->hidden(-name => 'editfile', -default => $cfghash{'BaseDir'} . "tabea.cfg" );
   
  @@ -1367,6 +1402,7 @@
   
       system("cp $srcf $dstf") && die "Cannot copy file";
       system("chmod o= $dstf") && die "Cannot change file rights";
  +    &logging("Copying $srcf to $dstf");
   
       $form = 'mainw';
       goto NEXTFORM;
  @@ -1511,6 +1547,7 @@
           $filein->close();
       }
       else {
  +        &logging("Cannot open $file");
           die "Can't open $file";
       }
   
  @@ -1551,5 +1588,37 @@
                 " </td>" .
                 "</table>";
       return $texte;
  +}
  +########################################################################################
  +
  +
  +########################################################################################
  +sub logging{
  +########################################################################################
  +    my ($logtext) = @_;
  +    my $logfile = $cfghash{'BaseDir'} . $cfghash{'LogFile'};
  +    my $logout;
  +    my $entry;
  +
  +#    if ( $cfghash{'Logging'} =~ /^[Yy}[Ee][Ss]$/ ) {
  +
  +        my ($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime(time);
  +        my $month = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec') [($mon)];
  +        my $Year = $year + 1900;
  +        my $Day = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat') [($wday)];
  +
  +        $entry = "[" . $Day . " " . $month . " " .
  +                $mday . " " . $hour . ":".$min. ":" . $sec . " " . $Year . "] ";
  +
  +        $entry .= $logtext . "\n";
  +
  +        $logout = IO::File->new($logfile, "a");
  +        if (defined $logout) {
  +            print $logout $entry;
  +        } else {
  +            die "Cannot open log file $logfile";
  +        }
  +
  +#    }
   }
   ########################################################################################

From ossp-cvs-owner@ossp.org  Tue Jul  9 17:08:28 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9E3C4769E6; Tue,  9 Jul 2002 17:08:28 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea.cfg
Message-Id: <20020709150828.9E3C4769E6@mail.ossp.org>
Date: Tue,  9 Jul 2002 17:08:28 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   09-Jul-2002 17:08:28
  Branch: HEAD                             Handle: 2002070916082800

  Modified files:
    ossp-pkg/tabea          tabea.cfg

  Log:
    Appended logging options

  Summary:
    Revision    Changes     Path
    1.3         +17 -10     ossp-pkg/tabea/tabea.cfg
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea.cfg
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 tabea.cfg
  --- ossp-pkg/tabea/tabea.cfg	17 May 2002 18:34:13 -0000	1.2
  +++ ossp-pkg/tabea/tabea.cfg	9 Jul 2002 15:08:28 -0000	1.3
  @@ -1,10 +1,17 @@
  -##
  -##  tabea.cfg -- Tabea Configuration
  -##
  -
  -ConfigDirectory  tabea.d
  -PasswdFile       tabea.pw
  -ConfigDefault    default
  -ExecuteCommand   sudo js_prepare -f %{profile}
  -PageTemplate     tabea.page.html %%TITLE%% %%BODY%% 
  -
  +##
  +##  tabea.cfg -- Tabea Configuration
  +##
  +
  +TabeaUser        tabea
  +BaseDir          ./
  +ConfigDir        tabea.d
  +ConfigDefault    default            # default
  +ExecuteCommand   /usr/local/bin/sudo cat %{profile}%
  +ExecuteTempFile  runout.txt
  +PasswdFile       tabea.pw
  +ConfigDefault    default
  +#ExecuteCommand   sudo js_prepare -f %{profile}
  +PageTemplate     tabea.page.html %%TITLE%% %%BODY%% 
  +PasswdFile       tabea.pw       
  +Logging          yes            # loggin yes or no
  +LogFile          tabea.log

From ossp-cvs-owner@ossp.org  Wed Jul 10 11:08:52 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1E586769F3; Wed, 10 Jul 2002 11:08:52 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl configure.ac
Message-Id: <20020710090852.1E586769F3@mail.ossp.org>
Date: Wed, 10 Jul 2002 11:08:52 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Jul-2002 11:08:51
  Branch: HEAD                             Handle: 2002071010085100

  Modified files:
    ossp-pkg/fsl            configure.ac

  Log:
    add Autoconf support for --with-cfgdir option

  Summary:
    Revision    Changes     Path
    1.2         +9  -0      ossp-pkg/fsl/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/configure.ac
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 configure.ac
  --- ossp-pkg/fsl/configure.ac	9 Jul 2002 09:42:09 -0000	1.1
  +++ ossp-pkg/fsl/configure.ac	10 Jul 2002 09:08:51 -0000	1.2
  @@ -71,6 +71,15 @@
   AC_SUBST(LIB_DEPS)
   AC_CONFIG_SUBDIRS([$SUBDIR_L2 $SUBDIR_CFG])
   
  +AC_MSG_CHECKING(for configuration directory)
  +AC_ARG_WITH(cfgdir,dnl
  +[  --with-cfgdir=PATH      set configuration directory (default=PREFIX/etc/fsl)],
  +[ fsl_cfgdir=$withval ],
  +[ fsl_cfgdir="${prefix}/etc/fsl" ]
  +)dnl
  +AC_DEFINE_UNQUOTED(FSL_CFGDIR, "$fsl_cfgdir", [Define for configuration directory])
  +AC_MSG_RESULT([$fsl_cfgdir])
  +
   AC_CONFIG_HEADERS(config.h)
   AC_CONFIG_FILES([Makefile fsl-config])
   AC_CONFIG_COMMANDS([adjustment], [chmod a+x fsl-config])

From ossp-cvs-owner@ossp.org  Wed Jul 10 14:00:26 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 71096769F5; Wed, 10 Jul 2002 14:00:26 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg 00TODO Makefile.in cfg.h cfg_data.c cfg_data....
Message-Id: <20020710120026.71096769F5@mail.ossp.org>
Date: Wed, 10 Jul 2002 14:00:26 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Jul-2002 14:00:26
  Branch: HEAD                             Handle: 2002071013002300

  Added files:
    ossp-pkg/cfg            cfg_main.c cfg_main.h
  Modified files:
    ossp-pkg/cfg            00TODO Makefile.in cfg.h cfg_data.c cfg_data.h
                            cfg_node.c cfg_node.h cfg_syn.c cfg_syn_parse.y
                            cfg_syn_scan.l

  Log:
    Mega-change: full API overhauling.

  Summary:
    Revision    Changes     Path
    1.7         +120 -0     ossp-pkg/cfg/00TODO
    1.2         +1  -1      ossp-pkg/cfg/Makefile.in
    1.5         +96 -55     ossp-pkg/cfg/cfg.h
    1.2         +12 -12     ossp-pkg/cfg/cfg_data.c
    1.2         +2  -27     ossp-pkg/cfg/cfg_data.h
    1.1         +62 -0      ossp-pkg/cfg/cfg_main.c
    1.1         +41 -0      ossp-pkg/cfg/cfg_main.h
    1.5         +105 -39    ossp-pkg/cfg/cfg_node.c
    1.4         +5  -0      ossp-pkg/cfg/cfg_node.h
    1.11        +17 -15     ossp-pkg/cfg/cfg_syn.c
    1.3         +11 -11     ossp-pkg/cfg/cfg_syn_parse.y
    1.8         +3  -3      ossp-pkg/cfg/cfg_syn_scan.l
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/00TODO
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 00TODO
  --- ossp-pkg/cfg/00TODO	9 Jul 2002 08:29:31 -0000	1.6
  +++ ossp-pkg/cfg/00TODO	10 Jul 2002 12:00:23 -0000	1.7
  @@ -84,3 +84,123 @@
       option "bar" --occur=1
   };
   
  +---------------------------------------------------------------------------
  +
  +foo on;
  +bar /bla {
  +    foo off;
  +    baz --fuck {
  +        b1; b2 --nase=baer; b3; b4; b5;
  +    } --fuck2;
  +};
  +quux a1 a2 a3 a4;
  +quux;
  +
  +---------------------------------------------------------------------------
  +
  +sequence ROOT {
  +    directive foo; 
  +    directive bar;
  +    directive quux --count=1:oo;
  +};
  +sequence bar-seq {
  +    directive foo --count=0:1; 
  +    directive baz --count=1:oo;
  +};
  +directive foo { 
  +    token - on|off|yes|no;
  +};
  +directive bar {
  +    token path /.*; 
  +    sequence bar-seq;
  +};
  +directive baz { 
  +    option fuck; 
  +    option fuck2; 
  +    sequence {
  +        directive foo { 
  +            option nase (baer|hugo);
  +            option foo [0-9]; 
  +            token ip-address;
  +        };
  +    };
  +};
  +directive quux {
  +    token --count=0:oo a.*;
  +};
  +token ip-address b1|b2|b3|b4|b5;
  +
  +-------------------------------------------------------------------------------
  +
  +<config>     ::= "sequence" <count>? <name>;
  +               | "sequence" <count>? <name>? "{" <directive>* "}";
  +<directive>  ::= "directive" <token-count>? <name>;
  +               | "directive" <token-count>? <name>? "{" <option>* <token>+ };
  +<option>     ::= "option" <name> <regex>?;
  +<token>      ::= "token" <name>? <regex>;
  +<count>      ::= /^(\+|\*|\?|[0-9]+,[0-9]*|[0-9]*,[0-9]+|[0-9]+)$/
  +<name>       ::= /^[a-zA-Z][a-zA-Z0-9_.-]*$/
  +<regex>      ::= ...
  +
  +-------------------------------------------------------------------------------
  +
  +sequence ROOT {
  +    directive * "directive" {
  +
  +    directive * token-1 {
  +        token token "token";
  +        token name  /^[a-zA-Z][a-zA-Z0-9_.-]*$/;
  +        token regex /^.+$/;
  +    }
  +};
  +
  +-------------------------------------------------------------------------------
  +
  +directive token {
  +    opt1      { /.../ opt2=/.../ } { 
  +    directive { /^token$/ }; 
  +    name      { m/.../; m/^[a-zA-Z][a-zA-Z0-9_.-]*$/ } ?;
  +    name      { m/(...|[a-zA-Z][a-zA-Z0-9_.-]*$)/ } ?;
  +    regex     { m/^.+$/ };
  +};
  +directive acl   { directive=/^acl$/ addr=/^...|...$/+ };
  +
  +-------------------------------------------------------------------------------
  +
  +a?b((c|d)+e)?f
  +
  +A m/a/ ?
  +B m/b/ 
  +{
  +    {
  +        C m/c/ ;
  +        D m/d/ 
  +    } +
  +    E m/e/
  +} ? 
  +F f
  +
  +<directive-match> ::= <token-match>+
  +<token-match> ::= <name>? <regex> <quant>?
  +
  +-------------------------------------------------------------------------------
  +
  +<config>     ::= "sequence" <count>? <name>;
  +               | "sequence" <count>? <name>? "{" <directive>* "}";
  +<directive>  ::= "directive" <name>;
  +               | "directive" <name>? "{" <options> "}" "{" <tokens> "}";
  +
  +<options>     ::= <tok-match>+
  +<tokens>      ::= <dir-match>+
  +
  +<dir-match>   ::= <tok-match>+
  +<tok-match>   ::= <name>? <node-match> <quant>?
  +<node-match>  ::= "{" <dir-match> "}" | <regex>
  +
  +<option>     ::= "option" <name> <regex>?;
  +<token>      ::= "token" <name>? <regex>;
  +
  +<count>      ::= /^(\+|\*|\?|[0-9]+,[0-9]*|[0-9]*,[0-9]+|[0-9]+)$/
  +<name>       ::= /^[a-zA-Z][a-zA-Z0-9_.-]*$/
  +<regex>      ::= ...
  +
  Index: ossp-pkg/cfg/Makefile.in
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 Makefile.in
  --- ossp-pkg/cfg/Makefile.in	9 Jul 2002 08:29:19 -0000	1.1
  +++ ossp-pkg/cfg/Makefile.in	10 Jul 2002 12:00:23 -0000	1.2
  @@ -53,7 +53,7 @@
   BISON       = @BISON@
   
   LIB_NAME    = libcfg.la
  -LIB_OBJS    = cfg_buf.lo cfg_grid.lo cfg_data.lo cfg_node.lo cfg_fmt.lo \
  +LIB_OBJS    = cfg_main.lo cfg_buf.lo cfg_grid.lo cfg_data.lo cfg_node.lo cfg_fmt.lo \
                 cfg_syn.lo cfg_syn_parse.lo cfg_syn_scan.lo cfg_util.lo
   
   TST_NAME    = cfg_test
  Index: ossp-pkg/cfg/cfg.h
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 cfg.h
  --- ossp-pkg/cfg/cfg.h	5 Jul 2002 15:32:42 -0000	1.4
  +++ ossp-pkg/cfg/cfg.h	10 Jul 2002 12:00:23 -0000	1.5
  @@ -31,84 +31,125 @@
   #ifndef __CFG_H__
   #define __CFG_H__
   
  -#ifdef DMALLOC
  -#include <dmalloc.h>
  -#endif
  +#include <stdlib.h>
   #include <stdarg.h>
  -
  -/* ============================================================ */
  +#include <string.h>
   
   /* general return codes */
   typedef enum {
  -    CFG_OK = 0,
  -    CFG_ERR_ARG,
  -    CFG_ERR_USE,
  -    CFG_ERR_INT,
  -    CFG_ERR_SYS,
  -    CFG_ERR_SYN,
  -    CFG_ERR_FMT,
  -    CFG_ERR_GOT
  +    CFG_OK = 0,               /* everything ok */
  +    CFG_ERR_ARG,              /* invalid argument */
  +    CFG_ERR_USE,              /* invalid use */
  +    CFG_ERR_SYS,              /* operating system error (see errno) */
  +    CFG_ERR_SYN,              /* syntax parsing error */
  +    CFG_ERR_FMT,              /* formatting error */
  +    CFG_ERR_GOT,              /* goto error */
  +    CFG_ERR_INT               /* internal error */
   } cfg_rc_t;
   
  -/* ============================================================ */
  -
  -/* configuration handle */
  -struct cfg_st;
  -typedef struct cfg_st cfg_t;
  -
  -/* configuration API */
  -cfg_rc_t   cfg_create      (cfg_t **cfg);
  -cfg_rc_t   cfg_destroy     (cfg_t  *cfg);
  -
  -/* ============================================================ */
  +/* configuration format */
  +typedef enum {
  +    CFG_FMT_CFG,
  +    CFG_FMT_XML
  +} cfg_fmt_t;
   
   /* list of node types */
   typedef enum {
       CFG_NODE_TYPE_SEQ,        /* node represents a sequence */
       CFG_NODE_TYPE_DIR,        /* node represents a directive */
  -    CFG_NODE_TYPE_TOK         /* node represents a token */
  +    CFG_NODE_TYPE_OPT,        /* node represents a option */
  +    CFG_NODE_TYPE_ARG         /* node represents a argument */
   } cfg_node_type_t;
   
   /* list of node attributes */
   typedef enum {
  -    CFG_NODE_ATTR_TYPE,       /* type of node */
  -    CFG_NODE_ATTR_PARENT,     /* pointer to parent node */
  -    CFG_NODE_ATTR_RBROTH,     /* pointer to right brother node */
  -    CFG_NODE_ATTR_CHILD1,     /* pointer to first child node */
  -    CFG_NODE_ATTR_TOKEN,      /* pointer to the node token string */
  -    CFG_NODE_ATTR_DATA        /* pointer to the node annotation data */
  +    CFG_NODE_ATTR_PARENT,     /* RW: pointer to parent node */
  +    CFG_NODE_ATTR_LBROTH,     /* RW: pointer to right brother node */
  +    CFG_NODE_ATTR_RBROTH,     /* RW: pointer to right brother node */
  +    CFG_NODE_ATTR_CHILD1,     /* RW: pointer to first child node */
  +    CFG_NODE_ATTR_CHILDL,     /* RO: pointer to last child */
  +    CFG_NODE_ATTR_CHILDS,     /* RO: number of child nodes */
  +    CFG_NODE_ATTR_NODES,      /* RO: number of total nodes (recursive) */
  +    CFG_NODE_ATTR_DEPTH,      /* RO: number of nodes back to root node */
  +    CFG_NODE_ATTR_TYPE,       /* RW: type of node */
  +    CFG_NODE_ATTR_TOKEN,      /* RW: pointer to the node token string */
  +    CFG_NODE_ATTR_DATA,       /* RW: pointer to the node annotation data */
  +    CFG_NODE_ATTR_SRCNAME,    /* RW: pointer to the source name */
  +    CFG_NODE_ATTR_SRCPOS      /* RW: position offset into source */
   } cfg_node_attr_t;
   
  -/* list of node goto */
  +/* list of data types */
  +typedef enum {
  +    CFG_DATA_TYPE_PTR,        /* "void *" */
  +    CFG_DATA_TYPE_STR,        /* "char *" */
  +    CFG_DATA_TYPE_INT,        /* "int"    */
  +    CFG_DATA_TYPE_FLT         /* "double" */
  +} cfg_data_type_t;
  +
  +/* list of data control operations */
  +typedef enum {
  +    CFG_DATA_CTRL_CLONE,      /* clone data */
  +    CFG_DATA_CTRL_DESTROY     /* destroy data */
  +} cfg_data_ctrl_t;
  +
  +/* list of data attributes */
   typedef enum {
  -    CFG_NODE_GOTO_PARENT,
  -    CFG_NODE_GOTO_LBROTH,
  -    CFG_NODE_GOTO_RBROTH,
  -    CFG_NODE_GOTO_CHILD1,
  -    CFG_NODE_GOTO_CHILDL
  -} cfg_node_goto_t;
  -
  -/* list of node linking variants */
  -typedef enum {
  -    CFG_NODE_LINK_PARENT,
  -    CFG_NODE_LINK_RBROTH,
  -    CFG_NODE_LINK_CHILD1
  -} cfg_node_link_t;
  +    CFG_DATA_ATTR_TYPE,       /* RW: type of data value */
  +    CFG_DATA_ATTR_VALUE,      /* RW: pointer to data value */
  +    CFG_DATA_ATTR_CTRL        /* RW: pointer to data control callback */
  +} cfg_data_attr_t;
  +
  +/* configuration handle type (opaque) */
  +struct cfg_st;
  +typedef struct cfg_st cfg_t;
   
  -/* configuration node type */
  +/* configuration node type (opaque) */
   struct cfg_node_st;
   typedef struct cfg_node_st cfg_node_t;
   
  -cfg_rc_t   cfg_node_create  (cfg_node_t **node);
  -cfg_rc_t   cfg_node_set     (cfg_node_t  *node, cfg_node_attr_t attr, ...);
  -cfg_rc_t   cfg_node_get     (cfg_node_t  *node, cfg_node_attr_t attr, ...);
  -cfg_rc_t   cfg_node_goto    (cfg_node_t  *node, cfg_node_goto_t id, cfg_node_t **node2);
  -cfg_rc_t   cfg_node_link    (cfg_node_t  *node, cfg_node_link_t id, cfg_node_t *node2);
  -cfg_rc_t   cfg_node_unlink  (cfg_node_t  *node);
  -cfg_rc_t   cfg_node_apply   (cfg_node_t  *node, void (*cb_fct)(void *, cfg_node_t *), void *cb_ctx);
  -cfg_rc_t   cfg_node_destroy (cfg_node_t  *node);
  +/* configuration data type */
  +struct cfg_data_st;
  +typedef struct cfg_data_st cfg_data_t;
  +
  +/* configuration data control callback type */
  +typedef cfg_rc_t (*cfg_data_cb_t)(cfg_data_t *, cfg_data_ctrl_t, ...);
  +
  +/* configuration handling */
  +cfg_rc_t   cfg_create      (cfg_t **cfg);
  +cfg_rc_t   cfg_destroy     (cfg_t  *cfg);
  +cfg_rc_t   cfg_error       (cfg_t  *cfg, cfg_rc_t rc, char *err_ptr, size_t err_len);
   
  -/* ============================================================ */
  +/* configuration import/export */
  +cfg_rc_t   cfg_import      (cfg_t  *cfg, cfg_node_t  *node, cfg_fmt_t fmt, const char *in_ptr, size_t in_len);
  +cfg_rc_t   cfg_export      (cfg_t  *cfg, cfg_node_t  *node, cfg_fmt_t fmt,       char *ex_ptr, size_t ex_len);
  +
  +/* node handling */
  +cfg_rc_t   cfg_node_create (cfg_t  *cfg, cfg_node_t **node);
  +cfg_rc_t   cfg_node_destroy(cfg_t  *cfg, cfg_node_t  *node);
  +cfg_rc_t   cfg_node_clone  (cfg_t  *cfg, cfg_node_t  *node, cfg_node_t **node2);
  +
  +/* node attribution */
  +cfg_rc_t   cfg_node_set    (cfg_t  *cfg, cfg_node_t  *node, cfg_node_attr_t attr, ...);
  +cfg_rc_t   cfg_node_get    (cfg_t  *cfg, cfg_node_t  *node, cfg_node_attr_t attr, ...);
  +
  +/* node traversing */
  +cfg_rc_t   cfg_node_root   (cfg_t  *cfg, cfg_node_t **node);
  +cfg_rc_t   cfg_node_goto   (cfg_t  *cfg, cfg_node_t **node, const char *spec);
  +
  +/* node locating */
  +cfg_rc_t   cfg_node_select (cfg_t  *cfg, cfg_node_t  *node, const char *dotpath, cfg_node_t **node2);
  +cfg_rc_t   cfg_node_find   (cfg_t  *cfg, cfg_node_t  *node, cfg_rc_t (*cb_fct_cmp)(cfg_t *, cfg_node_t *, void *), void *cb_ctx_cmp, cfg_node_t **cont);
  +cfg_rc_t   cfg_node_apply  (cfg_t  *cfg, cfg_node_t  *node, cfg_rc_t (*cb_fct_cmp)(cfg_t *, cfg_node_t *, void *), void *cb_ctx_cmp, cfg_rc_t (*cb_fct_cb)(cfg_t *, cfg_node_t *, void *), void *cb_ctx_cb);
  +cfg_rc_t   cfg_node_cmp    (cfg_t  *cfg, cfg_node_t  *node, void *token);
  +
  +/* node linking */
  +cfg_rc_t   cfg_node_link   (cfg_t  *cfg, cfg_node_t  *node, cfg_node_attr_t id, cfg_node_t *node2);
  +cfg_rc_t   cfg_node_unlink (cfg_t  *cfg, cfg_node_t  *node);
  +
  +/* data attribution */
  +cfg_rc_t   cfg_data_set    (cfg_data_t *data, cfg_data_attr_t attr, ...);
  +cfg_rc_t   cfg_data_get    (cfg_data_t *data, cfg_data_attr_t attr, ...);
  +cfg_rc_t   cfg_data_ctrl   (cfg_data_t *data, cfg_data_ctrl_t ctrl, ...);
   
   #endif /* __CFG_H__ */
   
  Index: ossp-pkg/cfg/cfg_data.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 cfg_data.c
  --- ossp-pkg/cfg/cfg_data.c	4 Jul 2002 06:16:13 -0000	1.1
  +++ ossp-pkg/cfg/cfg_data.c	10 Jul 2002 12:00:23 -0000	1.2
  @@ -56,7 +56,7 @@
           return CFG_ERR_ARG;
       data->type    = CFG_DATA_TYPE_INT;
       data->value.i = 0;
  -    data->ctrl    = cfg_data_ctrl_default;
  +    data->ctrl    = cfg_data_ctrl;
       return CFG_OK;
   }
   
  @@ -101,7 +101,7 @@
       return CFG_OK;
   }
   
  -cfg_rc_t cfg_data_ctrl_default(cfg_data_t *data, cfg_data_ctrl_t ctrl, ...)
  +cfg_rc_t cfg_data_ctrl(cfg_data_t *data, cfg_data_ctrl_t ctrl, ...)
   {
       cfg_data_t *data2;
       va_list ap;
  @@ -132,7 +132,7 @@
       return CFG_OK;
   }
   
  -cfg_rc_t cfg_data_set(cfg_data_t *data, cfg_data_id_t id, ...)
  +cfg_rc_t cfg_data_set(cfg_data_t *data, cfg_data_attr_t id, ...)
   {
       va_list ap;
   
  @@ -140,7 +140,7 @@
           return CFG_ERR_ARG;
       va_start(ap, id);
       switch (id) {
  -        case CFG_DATA_TYPE: {
  +        case CFG_DATA_ATTR_TYPE: {
               cfg_data_type_t t = (cfg_data_type_t)va_arg(ap, int);
               if (!(   t == CFG_DATA_TYPE_PTR
                     || t == CFG_DATA_TYPE_STR
  @@ -150,7 +150,7 @@
               data->type = t;
               break;
           }
  -        case CFG_DATA_VALUE: {
  +        case CFG_DATA_ATTR_VALUE: {
               switch (data->type) {
                   case CFG_DATA_TYPE_PTR: {
                       data->value.p = (void *)va_arg(ap, void *); 
  @@ -176,8 +176,8 @@
               }
               break;
           }
  -        case CFG_DATA_CTRL: {
  -            cfg_data_ctrl_cb_t ctrl = (cfg_data_ctrl_cb_t)va_arg(ap, void (*)(void));
  +        case CFG_DATA_ATTR_CTRL: {
  +            cfg_data_cb_t ctrl = (cfg_data_cb_t)va_arg(ap, void (*)(void));
               data->ctrl = ctrl;
               break;
           }
  @@ -186,7 +186,7 @@
       return CFG_OK;
   }
   
  -cfg_rc_t cfg_data_get(cfg_data_t *data, cfg_data_id_t id, ...)
  +cfg_rc_t cfg_data_get(cfg_data_t *data, cfg_data_attr_t id, ...)
   {
       va_list ap;
   
  @@ -194,14 +194,14 @@
           return CFG_ERR_ARG;
       va_start(ap, id);
       switch (id) {
  -        case CFG_DATA_TYPE: {
  +        case CFG_DATA_ATTR_TYPE: {
               cfg_data_type_t *pt = (cfg_data_type_t *)va_arg(ap, int *);
               if (pt == NULL)
                   return CFG_ERR_ARG;
               *pt = data->type;
               break;
           }
  -        case CFG_DATA_VALUE: {
  +        case CFG_DATA_ATTR_VALUE: {
               switch (data->type) {
                   case CFG_DATA_TYPE_PTR: {
                       void **p = (void **)va_arg(ap, void *);
  @@ -234,8 +234,8 @@
               }
               break;
           }
  -        case CFG_DATA_CTRL: {
  -            cfg_data_ctrl_cb_t *pcb = (cfg_data_ctrl_cb_t *)va_arg(ap, void *);
  +        case CFG_DATA_ATTR_CTRL: {
  +            cfg_data_cb_t *pcb = (cfg_data_cb_t *)va_arg(ap, void *);
               if (pcb == NULL)
                   return CFG_ERR_ARG;
               *pcb = data->ctrl;
  Index: ossp-pkg/cfg/cfg_data.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 cfg_data.h
  --- ossp-pkg/cfg/cfg_data.h	4 Jul 2002 06:16:13 -0000	1.1
  +++ ossp-pkg/cfg/cfg_data.h	10 Jul 2002 12:00:23 -0000	1.2
  @@ -33,13 +33,7 @@
   
   #include "cfg.h"
   
  -typedef enum {
  -    CFG_DATA_TYPE_PTR,  /* "void *" */
  -    CFG_DATA_TYPE_STR,  /* "char *" */
  -    CFG_DATA_TYPE_INT,  /* "int"    */
  -    CFG_DATA_TYPE_FLT   /* "double" */
  -} cfg_data_type_t;
  -
  +/* configuration data value type */
   typedef union {
       void  *p;
       char  *s;
  @@ -47,26 +41,10 @@
       double f;
   } cfg_data_value_t;
   
  -typedef enum {
  -    CFG_DATA_CTRL_CLONE,
  -    CFG_DATA_CTRL_DESTROY
  -} cfg_data_ctrl_t;
  -
  -typedef enum {
  -    CFG_DATA_TYPE,
  -    CFG_DATA_VALUE,
  -    CFG_DATA_CTRL
  -} cfg_data_id_t;
  -
  -struct cfg_data_st;
  -typedef struct cfg_data_st cfg_data_t;
  -
  -typedef cfg_rc_t (*cfg_data_ctrl_cb_t)(cfg_data_t *, cfg_data_ctrl_t, ...);
  -
   struct cfg_data_st {
       cfg_data_type_t    type;   /* data type    */
       cfg_data_value_t   value;  /* data value   */
  -    cfg_data_ctrl_cb_t ctrl;   /* data control */
  +    cfg_data_cb_t      ctrl;   /* data control */
   };
   
   extern cfg_rc_t  cfg_data_create       (cfg_data_t **data);
  @@ -74,9 +52,6 @@
   extern cfg_rc_t  cfg_data_kill         (cfg_data_t  *data);
   extern cfg_rc_t  cfg_data_destroy      (cfg_data_t  *data);
   extern cfg_rc_t  cfg_data_clone        (cfg_data_t  *data, cfg_data_t **clone);
  -extern cfg_rc_t  cfg_data_set          (cfg_data_t  *data, cfg_data_id_t id, ...);
  -extern cfg_rc_t  cfg_data_get          (cfg_data_t  *data, cfg_data_id_t id, ...);
  -extern cfg_rc_t  cfg_data_ctrl_default (cfg_data_t  *data, cfg_data_ctrl_t ctrl, ...);
   
   #endif /* __CFG_DATA_H__ */
   
  Index: ossp-pkg/cfg/cfg_main.c
  ============================================================
  $ cvs update -p -r1.1 cfg_main.c
  /*
  **  OSSP cfg - Configuration Parsing
  **  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP cfg, a configuration parsing
  **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRCFG, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  cfg_main.c: main API
  */
  
  #include <stdlib.h>
  #include <stdarg.h>
  #include <string.h>
  
  #include "cfg.h"
  #include "cfg_data.h"
  
  cfg_rc_t cfg_create(cfg_t **cfg)
  {
      return CFG_OK;
  }
  
  cfg_rc_t cfg_destroy(cfg_t *cfg)
  {
      return CFG_OK;
  }
  
  cfg_rc_t cfg_error(cfg_t *cfg, cfg_rc_t rc, char *err_ptr, size_t err_len)
  {
      return CFG_OK;
  }
  
  cfg_rc_t cfg_import(cfg_t *cfg, cfg_node_t *node, cfg_fmt_t fmt, const char *in_ptr, size_t in_len)
  {
      return CFG_OK;
  }
  
  cfg_rc_t cfg_export(cfg_t *cfg, cfg_node_t *node, cfg_fmt_t fmt, char *ex_ptr, size_t ex_len)
  {
      return CFG_OK;
  }
  
  Index: ossp-pkg/cfg/cfg_main.h
  ============================================================
  $ cvs update -p -r1.1 cfg_main.h
  /*
  **  OSSP cfg - Configuration Parsing
  **  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP cfg, a configuration parsing
  **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRCFG, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  cfg_main.h: main API
  */
  
  #ifndef __CFG_MAIN_H__
  #define __CFG_MAIN_H__
  
  #include "cfg.h"
  
  struct cfg_st {
      cfg_node_t *root;
  };
  
  #endif /* __CFG_MAIN_H__ */
  
  Index: ossp-pkg/cfg/cfg_node.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 cfg_node.c
  --- ossp-pkg/cfg/cfg_node.c	5 Jul 2002 15:32:42 -0000	1.4
  +++ ossp-pkg/cfg/cfg_node.c	10 Jul 2002 12:00:23 -0000	1.5
  @@ -33,9 +33,10 @@
   #include <stdarg.h>
   #include <unistd.h>
   
  +#include "cfg_main.h"
   #include "cfg_node.h"
   
  -cfg_rc_t cfg_node_create(cfg_node_t **node)
  +cfg_rc_t cfg_node_create(cfg_t *cfg, cfg_node_t **node)
   {
       cfg_node_t *n;
   
  @@ -44,14 +45,32 @@
       n->parent   = NULL;
       n->rbroth   = NULL;
       n->child1   = NULL;
  -    n->type     = CFG_NODE_TYPE_TOK;
  +    n->type     = CFG_NODE_TYPE_ARG;
       n->token    = NULL;
       cfg_data_init(&n->data);
       *node = n;
       return CFG_OK;
   }
   
  -cfg_rc_t cfg_node_set(cfg_node_t *node, cfg_node_attr_t attr, ...)
  +cfg_rc_t cfg_node_destroy(cfg_t *cfg, cfg_node_t *node)
  +{
  +    if (node == NULL)
  +        return CFG_ERR_ARG;
  +    if (node->token != NULL)
  +        free(node->token);
  +    free(node);
  +    return CFG_OK;
  +}
  +
  +cfg_rc_t cfg_node_clone(cfg_t *cfg, cfg_node_t *node, cfg_node_t **node2)
  +{
  +    if (node == NULL || node2 == NULL)
  +        return CFG_ERR_ARG;
  +    /* FIXME */
  +    return CFG_OK;
  +}
  +
  +cfg_rc_t cfg_node_set(cfg_t *cfg, cfg_node_t *node, cfg_node_attr_t attr, ...)
   {
       va_list ap;
   
  @@ -89,7 +108,7 @@
       return CFG_OK;
   }
   
  -cfg_rc_t cfg_node_get(cfg_node_t *node, cfg_node_attr_t attr, ...)
  +cfg_rc_t cfg_node_get(cfg_t *cfg, cfg_node_t *node, cfg_node_attr_t attr, ...)
   {
       va_list ap;
   
  @@ -134,12 +153,22 @@
       return CFG_OK;
   }
   
  -cfg_rc_t cfg_node_goto(cfg_node_t *node, cfg_node_goto_t id, cfg_node_t **node2)
  +cfg_rc_t cfg_node_root(cfg_t *cfg, cfg_node_t **node)
   {
  -    cfg_node_t *n;
  +    if (cfg == NULL || node == NULL)
  +        return CFG_ERR_ARG;
  +    *node = cfg->root;
  +    return CFG_OK;
  +}
   
  -    if (node == NULL || node2 == NULL)
  +cfg_rc_t cfg_node_goto(cfg_t *cfg, cfg_node_t **node, const char *spec)
  +{
  +
  +    if (cfg == NULL || node == NULL || spec == NULL)
           return CFG_ERR_ARG;
  +    /* FIXME */
  +#if 0
  +    cfg_node_t *n;
       *node2 = NULL;
       switch (id) {
           case CFG_NODE_GOTO_PARENT: {
  @@ -176,16 +205,78 @@
       }
       if (*node2 == NULL)
           return CFG_ERR_GOT;
  +#endif
  +    return CFG_OK;
  +}
  +
  +cfg_rc_t 
  +cfg_node_select(
  +    cfg_t *cfg, 
  +    cfg_node_t *node, 
  +    const char *dotpath, 
  +    cfg_node_t **node2)
  +{
  +    /* FIXME */
  +    return CFG_OK;
  +}
  +
  +cfg_rc_t 
  +cfg_node_find(
  +    cfg_t *cfg, 
  +    cfg_node_t *node, 
  +    cfg_rc_t (*cb_fct_cmp)(cfg_t *, cfg_node_t *, void *),
  +    void *cb_ctx_cmp, 
  +    cfg_node_t **cont)
  +{
  +    /* FIXME */
       return CFG_OK;
   }
   
  -cfg_rc_t cfg_node_link(cfg_node_t *node, cfg_node_link_t id, cfg_node_t *node2)
  +cfg_rc_t 
  +cfg_node_apply(
  +    cfg_t *cfg, 
  +    cfg_node_t *node, 
  +    cfg_rc_t (*cb_fct_cmp)(cfg_t *, cfg_node_t *, void *),
  +    void *cb_ctx_cmp,
  +    cfg_rc_t (*cb_fct_cb)(cfg_t *, cfg_node_t *, void *),
  +    void *cb_ctx_cb)
  +{
  +    /* FIXME */
  +#if 0
  +    cfg_rc_t rc;
  +
  +    if (cb_fct == NULL)
  +        return CFG_ERR_ARG;
  +    if (node != NULL) {
  +        cb_fct(cb_ctx, node);
  +        if (node->child1 != NULL)
  +            if ((rc = cfg_node_apply(node->child1, cb_fct, cb_ctx)) != CFG_OK)
  +                return rc;
  +        if (node->rbroth != NULL)
  +            if ((rc = cfg_node_apply(node->rbroth, cb_fct, cb_ctx)) != CFG_OK)
  +                return rc;
  +    }
  +#endif
  +    return CFG_OK;
  +}
  +
  +cfg_rc_t
  +cfg_node_cmp(
  +    cfg_t *cfg, 
  +    cfg_node_t *node, 
  +    void *token)
  +{
  +    /* FIXME */
  +    return CFG_OK;
  +}
  +
  +cfg_rc_t cfg_node_link(cfg_t *cfg, cfg_node_t *node, cfg_node_attr_t attr, cfg_node_t *node2)
   {
       cfg_node_t *n;
   
       if (node == NULL || node2 == NULL)
           return CFG_ERR_ARG;
  -    if (id == CFG_NODE_LINK_RBROTH) {
  +    if (attr == CFG_NODE_ATTR_RBROTH) {
           /* make node a rbroth */
           n = node2;
           n->parent = node->parent;
  @@ -196,7 +287,7 @@
           n->rbroth = node->rbroth; 
           node->rbroth = node2;
       }
  -    else if (id == CFG_NODE_LINK_CHILD1) {
  +    else if (attr == CFG_NODE_ATTR_CHILD1) {
           /* make node a child1 */
           n = node2;
           n->parent = node;
  @@ -207,10 +298,13 @@
           n->rbroth = node->child1;
           node->child1 = node2;
       }
  +    /* FIXME more linkage possibilities */
  +    else 
  +        return CFG_ERR_ARG;
       return CFG_OK;
   }
   
  -cfg_rc_t cfg_node_unlink(cfg_node_t *node)
  +cfg_rc_t cfg_node_unlink(cfg_t *cfg, cfg_node_t *node)
   {
       cfg_node_t *n;
   
  @@ -229,34 +323,6 @@
               n = n->rbroth;
           n->rbroth = node->rbroth;
       }
  -    return CFG_OK;
  -}
  -
  -cfg_rc_t cfg_node_apply(cfg_node_t *node, void (*cb_fct)(void *, cfg_node_t *), void *cb_ctx)
  -{
  -    cfg_rc_t rc;
  -
  -    if (cb_fct == NULL)
  -        return CFG_ERR_ARG;
  -    if (node != NULL) {
  -        cb_fct(cb_ctx, node);
  -        if (node->child1 != NULL)
  -            if ((rc = cfg_node_apply(node->child1, cb_fct, cb_ctx)) != CFG_OK)
  -                return rc;
  -        if (node->rbroth != NULL)
  -            if ((rc = cfg_node_apply(node->rbroth, cb_fct, cb_ctx)) != CFG_OK)
  -                return rc;
  -    }
  -    return CFG_OK;
  -}
  -
  -cfg_rc_t cfg_node_destroy(cfg_node_t *node)
  -{
  -    if (node == NULL)
  -        return CFG_ERR_ARG;
  -    if (node->token != NULL)
  -        free(node->token);
  -    free(node);
       return CFG_OK;
   }
   
  Index: ossp-pkg/cfg/cfg_node.h
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 cfg_node.h
  --- ossp-pkg/cfg/cfg_node.h	4 Jul 2002 12:30:08 -0000	1.3
  +++ ossp-pkg/cfg/cfg_node.h	10 Jul 2002 12:00:23 -0000	1.4
  @@ -37,6 +37,7 @@
   struct cfg_node_st {
       /* node linkage */
       cfg_node_t     *parent;  /* pointer to parent node */
  +    cfg_node_t     *lbroth;  /* pointer to left  brother node */
       cfg_node_t     *rbroth;  /* pointer to right brother node */
       cfg_node_t     *child1;  /* pointer to first child node */
   
  @@ -46,6 +47,10 @@
   
       /* node annotation */
       cfg_data_t      data;    /* annotation data */ 
  +
  +    /* node source location */
  +    char           *name;    /* name of original source configuration */
  +    int             offset;  /* offset into original source configuration */
   };
   
   #endif /* __CFG_NODE_H__ */
  Index: ossp-pkg/cfg/cfg_syn.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 cfg_syn.c
  --- ossp-pkg/cfg/cfg_syn.c	8 Jul 2002 13:45:13 -0000	1.10
  +++ ossp-pkg/cfg/cfg_syn.c	10 Jul 2002 12:00:23 -0000	1.11
  @@ -168,6 +168,7 @@
   }
   
   typedef struct {
  +    cfg_t *cfg;
       cfg_buf_t *buf;
       int indent;
   } export_t;
  @@ -267,33 +268,33 @@
       cfg_rc_t rc;
       char *token;
   
  -    rc = cfg_node_get(node, CFG_NODE_ATTR_TYPE, &type);
  +    rc = cfg_node_get(ctx->cfg, node, CFG_NODE_ATTR_TYPE, &type);
       if (type == CFG_NODE_TYPE_SEQ) {
           export_format(ctx, "{\n");
           export_indent(ctx, 1);
  -        cfg_node_goto(node, CFG_NODE_GOTO_CHILD1, &node2);
  +        cfg_node_get(ctx->cfg, node, CFG_NODE_ATTR_CHILD1, &node2);
           while (node2 != NULL) {
               export_node(ctx, node2);
  -            cfg_node_goto(node2, CFG_NODE_GOTO_RBROTH, &node2);
  +            cfg_node_get(ctx->cfg, node2, CFG_NODE_ATTR_RBROTH, &node2);
           }
           export_indent(ctx, -1);
           export_format(ctx, "}");
       }
       else if (type == CFG_NODE_TYPE_DIR) {
  -        cfg_node_goto(node, CFG_NODE_GOTO_CHILD1, &node2);
  +        cfg_node_get(ctx->cfg, node, CFG_NODE_ATTR_CHILD1, &node2);
           while (node2 != NULL) {
               export_node(ctx, node2);
  -            cfg_node_goto(node2, CFG_NODE_GOTO_RBROTH, &node2);
  +            cfg_node_get(ctx->cfg, node2, CFG_NODE_ATTR_RBROTH, &node2);
               if (node2 != NULL)
                   export_format(ctx, " ");
           }
  -        cfg_node_goto(node, CFG_NODE_GOTO_RBROTH, &node2);
  +        cfg_node_get(ctx->cfg, node, CFG_NODE_ATTR_RBROTH, &node2);
           if (node2 != NULL)
               export_format(ctx, ";");
           export_format(ctx, "\n");
       }
  -    else if (type == CFG_NODE_TYPE_TOK) {
  -        cfg_node_get(node, CFG_NODE_ATTR_TOKEN, &token);
  +    else if (type == CFG_NODE_TYPE_ARG) {
  +        cfg_node_get(ctx->cfg, node, CFG_NODE_ATTR_TOKEN, &token);
           if (token != NULL)
               export_token(ctx, token);
           else
  @@ -316,15 +317,16 @@
       if ((rc = cfg_buf_create(&buf)) != CFG_OK)
           return rc;
   
  +    ctx.cfg    = cfg;
       ctx.buf    = buf;
       ctx.indent = 0;
   
       /* first SEQ node is special, so expand it manually instead
          of just calling once export_node(&ctx, node); */
  -    cfg_node_goto(node, CFG_NODE_GOTO_CHILD1, &node);
  +    cfg_node_get(cfg, node, CFG_NODE_ATTR_CHILD1, &node);
       while (node != NULL) {
           export_node(&ctx, node);
  -        cfg_node_goto(node, CFG_NODE_GOTO_RBROTH, &node);
  +        cfg_node_get(cfg, node, CFG_NODE_ATTR_RBROTH, &node);
       }
   
       cfg_buf_content(buf, output, NULL, NULL);
  @@ -333,15 +335,15 @@
       return CFG_OK;
   }
   
  -static cfg_rc_t cfg_syn_destroy_node(cfg_node_t *node)
  +static cfg_rc_t cfg_syn_destroy_node(cfg_t *cfg, cfg_node_t *node)
   {
       if (node == NULL)
           return CFG_ERR_ARG;
       if (node->child1 != NULL)
  -        cfg_syn_destroy_node(node->child1);
  +        cfg_syn_destroy_node(cfg, node->child1);
       if (node->rbroth != NULL)
  -        cfg_syn_destroy_node(node->rbroth);
  -    cfg_node_destroy(node);
  +        cfg_syn_destroy_node(cfg, node->rbroth);
  +    cfg_node_destroy(cfg, node);
       return CFG_OK;
   }
   
  @@ -349,7 +351,7 @@
   {
       if (node == NULL)
           return CFG_ERR_ARG;
  -    cfg_syn_destroy_node(node);
  +    cfg_syn_destroy_node(cfg, node);
       return CFG_OK;
   }
   
  Index: ossp-pkg/cfg/cfg_syn_parse.y
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 cfg_syn_parse.y
  --- ossp-pkg/cfg/cfg_syn_parse.y	4 Jul 2002 14:51:21 -0000	1.2
  +++ ossp-pkg/cfg/cfg_syn_parse.y	10 Jul 2002 12:00:23 -0000	1.3
  @@ -105,9 +105,9 @@
   sequence
       : directives {
           cfg_node_t *n;
  -        cfg_node_create(&n);
  -        cfg_node_set(n, CFG_NODE_ATTR_TYPE, CFG_NODE_TYPE_SEQ);
  -        cfg_node_set(n, CFG_NODE_ATTR_CHILD1, $1);
  +        cfg_node_create(CTX->cfg, &n);
  +        cfg_node_set(CTX->cfg, n, CFG_NODE_ATTR_TYPE, CFG_NODE_TYPE_SEQ);
  +        cfg_node_set(CTX->cfg, n, CFG_NODE_ATTR_CHILD1, $1);
           $$ = n;
         }
       ;
  @@ -120,7 +120,7 @@
           $$ = $1; 
         }
       | directive T_SEP directives { 
  -        cfg_node_set($1, CFG_NODE_ATTR_RBROTH, $3);
  +        cfg_node_set(CTX->cfg, $1, CFG_NODE_ATTR_RBROTH, $3);
           $$ = $1;
         }
       ;
  @@ -128,9 +128,9 @@
   directive
       : tokens {
           cfg_node_t *n;
  -        cfg_node_create(&n);
  -        cfg_node_set(n, CFG_NODE_ATTR_TYPE, CFG_NODE_TYPE_DIR);
  -        cfg_node_set(n, CFG_NODE_ATTR_CHILD1, $1);
  +        cfg_node_create(CTX->cfg, &n);
  +        cfg_node_set(CTX->cfg, n, CFG_NODE_ATTR_TYPE, CFG_NODE_TYPE_DIR);
  +        cfg_node_set(CTX->cfg, n, CFG_NODE_ATTR_CHILD1, $1);
           $$ = n;
         }
       ;
  @@ -140,7 +140,7 @@
           $$ = $1; 
         }
       | token tokens { 
  -        cfg_node_set($1, CFG_NODE_ATTR_RBROTH, $2);
  +        cfg_node_set(CTX->cfg, $1, CFG_NODE_ATTR_RBROTH, $2);
           $$ = $1;
         }
       ;
  @@ -157,9 +157,9 @@
   string
       : T_STRING {
           cfg_node_t *n;
  -        cfg_node_create(&n);
  -        cfg_node_set(n, CFG_NODE_ATTR_TYPE, CFG_NODE_TYPE_TOK);
  -        cfg_node_set(n, CFG_NODE_ATTR_TOKEN, $1);
  +        cfg_node_create(CTX->cfg, &n);
  +        cfg_node_set(CTX->cfg, n, CFG_NODE_ATTR_TYPE, CFG_NODE_TYPE_ARG);
  +        cfg_node_set(CTX->cfg, n, CFG_NODE_ATTR_TOKEN, $1);
           $$ = n; 
         }
       ;
  Index: ossp-pkg/cfg/cfg_syn_scan.l
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 cfg_syn_scan.l
  --- ossp-pkg/cfg/cfg_syn_scan.l	8 Jul 2002 13:45:13 -0000	1.7
  +++ ossp-pkg/cfg/cfg_syn_scan.l	10 Jul 2002 12:00:23 -0000	1.8
  @@ -82,9 +82,9 @@
       /* local variables */
       char  caStr[1024];
       char *cpStr = NULL;
  -    int   nQuoteOpen;
  -    char  cQuoteOpen;
  -    char  cQuoteClose;
  +    int   nQuoteOpen = 0;
  +    char  cQuoteOpen = '\0';
  +    char  cQuoteClose = '\0';
   
       /* whitespaces */
   [ \t\n]+ {

From ossp-cvs-owner@ossp.org  Wed Jul 10 15:53:45 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C9018767D1; Wed, 10 Jul 2002 15:53:44 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea.cgi
Message-Id: <20020710135344.C9018767D1@mail.ossp.org>
Date: Wed, 10 Jul 2002 15:53:44 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   10-Jul-2002 15:53:44
  Branch: HEAD                             Handle: 2002071014534400

  Modified files:
    ossp-pkg/tabea          tabea.cgi

  Log:
    Completed logging subroutine

  Summary:
    Revision    Changes     Path
    1.36        +7  -6      ossp-pkg/tabea/tabea.cgi
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea.cgi
  ============================================================
  $ cvs diff -u -r1.35 -r1.36 tabea.cgi
  --- ossp-pkg/tabea/tabea.cgi	9 Jul 2002 15:08:02 -0000	1.35
  +++ ossp-pkg/tabea/tabea.cgi	10 Jul 2002 13:53:44 -0000	1.36
  @@ -258,7 +258,7 @@
       "  </tr>" .
       "</table>" ;
       
  -    &logging("Starting program");
  +    &logging("Starting Tabea");
   
       return $text;
   }
  @@ -608,7 +608,7 @@
           goto NEXTFORM;
       } else {
           $text .= "<font color=red>Cannot write file. File exists<br><br>\n";
  -        &logging("Cannot write $newpath File exists");
  +        &logging("Cannot write $newpath. File exists");
       }
       $text .= $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
   
  @@ -1600,15 +1600,16 @@
       my $logout;
       my $entry;
   
  -#    if ( $cfghash{'Logging'} =~ /^[Yy}[Ee][Ss]$/ ) {
  +    if ( $cfghash{'Logging'} =~ /^[yY][eE][sS]$/) {
  +    
   
           my ($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime(time);
           my $month = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec') [($mon)];
           my $Year = $year + 1900;
           my $Day = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat') [($wday)];
   
  -        $entry = "[" . $Day . " " . $month . " " .
  -                $mday . " " . $hour . ":".$min. ":" . $sec . " " . $Year . "] ";
  +        $entry = sprintf("[%s %s %s %02i:%02i:%02i %s] ",$Day,$month,$mday,$hour,$min,$sec,$Year);
  +
   
           $entry .= $logtext . "\n";
   
  @@ -1619,6 +1620,6 @@
               die "Cannot open log file $logfile";
           }
   
  -#    }
  +    }
   }
   ########################################################################################

From ossp-cvs-owner@ossp.org  Wed Jul 10 16:14:07 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1CA437655F; Wed, 10 Jul 2002 16:14:06 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg cfg.h
Message-Id: <20020710141406.1CA437655F@mail.ossp.org>
Date: Wed, 10 Jul 2002 16:14:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   10-Jul-2002 16:14:05
  Branch: HEAD                             Handle: 2002071015140500

  Modified files:
    ossp-pkg/cfg            cfg.h

  Log:
    copy'n'paste typo

  Summary:
    Revision    Changes     Path
    1.6         +1  -1      ossp-pkg/cfg/cfg.h
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/cfg.h
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 cfg.h
  --- ossp-pkg/cfg/cfg.h	10 Jul 2002 12:00:23 -0000	1.5
  +++ ossp-pkg/cfg/cfg.h	10 Jul 2002 14:14:05 -0000	1.6
  @@ -64,7 +64,7 @@
   /* list of node attributes */
   typedef enum {
       CFG_NODE_ATTR_PARENT,     /* RW: pointer to parent node */
  -    CFG_NODE_ATTR_LBROTH,     /* RW: pointer to right brother node */
  +    CFG_NODE_ATTR_LBROTH,     /* RW: pointer to left brother node */
       CFG_NODE_ATTR_RBROTH,     /* RW: pointer to right brother node */
       CFG_NODE_ATTR_CHILD1,     /* RW: pointer to first child node */
       CFG_NODE_ATTR_CHILDL,     /* RO: pointer to last child */

From ossp-cvs-owner@ossp.org  Wed Jul 10 16:46:30 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 02D7D767EB; Wed, 10 Jul 2002 16:46:28 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg cfg.h cfg_main.c cfg_main.h cfg_node.c cfg_sy...
Message-Id: <20020710144628.02D7D767EB@mail.ossp.org>
Date: Wed, 10 Jul 2002 16:46:28 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Jul-2002 16:46:28
  Branch: HEAD                             Handle: 2002071015462800

  Modified files:
    ossp-pkg/cfg            cfg.h cfg_main.c cfg_main.h cfg_node.c cfg_syn.c
                            cfg_syn.h cfg_test.c

  Log:
    Step 2 in API overhauling and implementation filling.

  Summary:
    Revision    Changes     Path
    1.7         +10 -11     ossp-pkg/cfg/cfg.h
    1.2         +138 -2     ossp-pkg/cfg/cfg_main.c
    1.2         +9  -0      ossp-pkg/cfg/cfg_main.h
    1.6         +4  -2      ossp-pkg/cfg/cfg_node.c
    1.12        +8  -6      ossp-pkg/cfg/cfg_syn.c
    1.4         +1  -1      ossp-pkg/cfg/cfg_syn.h
    1.5         +36 -13     ossp-pkg/cfg/cfg_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/cfg.h
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 cfg.h
  --- ossp-pkg/cfg/cfg.h	10 Jul 2002 14:14:05 -0000	1.6
  +++ ossp-pkg/cfg/cfg.h	10 Jul 2002 14:46:28 -0000	1.7
  @@ -40,11 +40,12 @@
       CFG_OK = 0,               /* everything ok */
       CFG_ERR_ARG,              /* invalid argument */
       CFG_ERR_USE,              /* invalid use */
  -    CFG_ERR_SYS,              /* operating system error (see errno) */
  -    CFG_ERR_SYN,              /* syntax parsing error */
  +    CFG_ERR_MEM,              /* no more memory available */
  +    CFG_ERR_SYS,              /* operating system error */
       CFG_ERR_FMT,              /* formatting error */
  -    CFG_ERR_GOT,              /* goto error */
  -    CFG_ERR_INT               /* internal error */
  +    CFG_ERR_INT,              /* internal error */
  +    CFG_ERR_SYN,              /* syntax error */
  +    CFG_ERR_NDE               /* node reference error */
   } cfg_rc_t;
   
   /* configuration format */
  @@ -117,11 +118,11 @@
   /* configuration handling */
   cfg_rc_t   cfg_create      (cfg_t **cfg);
   cfg_rc_t   cfg_destroy     (cfg_t  *cfg);
  -cfg_rc_t   cfg_error       (cfg_t  *cfg, cfg_rc_t rc, char *err_ptr, size_t err_len);
  +cfg_rc_t   cfg_error       (cfg_t  *cfg, cfg_rc_t rc, char **error);
   
   /* configuration import/export */
   cfg_rc_t   cfg_import      (cfg_t  *cfg, cfg_node_t  *node, cfg_fmt_t fmt, const char *in_ptr, size_t in_len);
  -cfg_rc_t   cfg_export      (cfg_t  *cfg, cfg_node_t  *node, cfg_fmt_t fmt,       char *ex_ptr, size_t ex_len);
  +cfg_rc_t   cfg_export      (cfg_t  *cfg, cfg_node_t  *node, cfg_fmt_t fmt,      char **ex_ptr, size_t ex_len);
   
   /* node handling */
   cfg_rc_t   cfg_node_create (cfg_t  *cfg, cfg_node_t **node);
  @@ -132,12 +133,10 @@
   cfg_rc_t   cfg_node_set    (cfg_t  *cfg, cfg_node_t  *node, cfg_node_attr_t attr, ...);
   cfg_rc_t   cfg_node_get    (cfg_t  *cfg, cfg_node_t  *node, cfg_node_attr_t attr, ...);
   
  -/* node traversing */
  +/* node traversing/locating */
   cfg_rc_t   cfg_node_root   (cfg_t  *cfg, cfg_node_t **node);
  -cfg_rc_t   cfg_node_goto   (cfg_t  *cfg, cfg_node_t **node, const char *spec);
  -
  -/* node locating */
  -cfg_rc_t   cfg_node_select (cfg_t  *cfg, cfg_node_t  *node, const char *dotpath, cfg_node_t **node2);
  +cfg_rc_t   cfg_node_goto   (cfg_t  *cfg, cfg_node_t  *node, const char *spec, cfg_node_t **node2);
  +cfg_rc_t   cfg_node_select (cfg_t  *cfg, cfg_node_t  *node, const char *spec, cfg_node_t **node2);
   cfg_rc_t   cfg_node_find   (cfg_t  *cfg, cfg_node_t  *node, cfg_rc_t (*cb_fct_cmp)(cfg_t *, cfg_node_t *, void *), void *cb_ctx_cmp, cfg_node_t **cont);
   cfg_rc_t   cfg_node_apply  (cfg_t  *cfg, cfg_node_t  *node, cfg_rc_t (*cb_fct_cmp)(cfg_t *, cfg_node_t *, void *), void *cb_ctx_cmp, cfg_rc_t (*cb_fct_cb)(cfg_t *, cfg_node_t *, void *), void *cb_ctx_cb);
   cfg_rc_t   cfg_node_cmp    (cfg_t  *cfg, cfg_node_t  *node, void *token);
  Index: ossp-pkg/cfg/cfg_main.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 cfg_main.c
  --- ossp-pkg/cfg/cfg_main.c	10 Jul 2002 12:00:23 -0000	1.1
  +++ ossp-pkg/cfg/cfg_main.c	10 Jul 2002 14:46:28 -0000	1.2
  @@ -31,32 +31,168 @@
   #include <stdlib.h>
   #include <stdarg.h>
   #include <string.h>
  +#include <errno.h>
   
   #include "cfg.h"
  +#include "cfg_fmt.h"
  +#include "cfg_main.h"
   #include "cfg_data.h"
  +#include "cfg_node.h"
  +#include "cfg_syn.h"
   
   cfg_rc_t cfg_create(cfg_t **cfg)
   {
  +    cfg_rc_t rc;
  +
  +    if (cfg == NULL)
  +        return CFG_ERR_ARG;
  +    if ((*cfg = malloc(sizeof(cfg_t))) == NULL)
  +        return CFG_ERR_SYS;
  +    (*cfg)->root = NULL;
  +    (*cfg)->szError[0]     = '\0';
  +    (*cfg)->szErrorInfo[0] = '\0';
  +    (*cfg)->rcErrorInfo    = CFG_OK;
  +    if ((rc = cfg_grid_create(&((*cfg)->grid_nodes), sizeof(cfg_node_t), 512)) != CFG_OK)
  +        return rc;
  +    if ((rc = cfg_grid_create(&((*cfg)->grid_tokens), 8192, 1)) != CFG_OK) {
  +        cfg_grid_destroy((*cfg)->grid_nodes);
  +        return rc;
  +    }
       return CFG_OK;
   }
   
   cfg_rc_t cfg_destroy(cfg_t *cfg)
   {
  +    if (cfg == NULL)
  +        return CFG_ERR_ARG;
  +    cfg_grid_destroy(cfg->grid_nodes);
  +    cfg_grid_destroy(cfg->grid_tokens);
  +    free(cfg);
  +    return CFG_OK;
  +}
  +
  +cfg_rc_t cfg_error_info(cfg_t *cfg, cfg_rc_t rv, const char *fmt, ...)
  +{
  +    va_list ap;
  +
  +    /* argument sanity check */
  +    if (cfg == NULL || rv == CFG_OK || fmt == NULL)
  +        return CFG_ERR_ARG;
  +
  +    /* remember error information */
  +    va_start(ap, fmt);
  +    cfg_fmt_vsprintf(cfg->szErrorInfo, sizeof(cfg->szErrorInfo), fmt, ap);
  +    cfg->rcErrorInfo = rv;
  +    va_end(ap);
  +
       return CFG_OK;
   }
   
  -cfg_rc_t cfg_error(cfg_t *cfg, cfg_rc_t rc, char *err_ptr, size_t err_len)
  +cfg_rc_t cfg_error(cfg_t *cfg, cfg_rc_t rv, char **error)
   {
  +    char *sz;
  +    char *cpBuf;
  +    int nBuf;
  +    int n;
  +
  +    /* argument sanity check */
  +    if (cfg == NULL || error == NULL)
  +        return CFG_ERR_ARG;
  +
  +    /* start at begin of buffer */
  +    cpBuf = cfg->szError;
  +    nBuf  = sizeof(cfg->szError);
  +
  +    /* translate result value into corresponding string */
  +    if      (rv == CFG_OK)      sz = "everything ok";
  +    else if (rv == CFG_ERR_ARG) sz = "invalid argument";
  +    else if (rv == CFG_ERR_USE) sz = "invalid use";
  +    else if (rv == CFG_ERR_MEM) sz = "no more memory available";
  +    else if (rv == CFG_ERR_SYS) sz = "operating system error";
  +    else if (rv == CFG_ERR_FMT) sz = "formatting error";
  +    else if (rv == CFG_ERR_INT) sz = "internal error";
  +    else if (rv == CFG_ERR_SYN) sz = "syntax error";
  +    else if (rv == CFG_ERR_NDE) sz = "node reference error";
  +    else                        sz = "unknown error";
  +    n = cfg_fmt_sprintf(cpBuf, nBuf, "%s", sz);
  +    cpBuf += n;
  +    nBuf  -= n;
  +
  +    /* optionally annotate with error information */
  +    if (rv == cfg->rcErrorInfo && cfg->szErrorInfo[0] != '\0') {
  +        n = cfg_fmt_sprintf(cpBuf, nBuf, "; %s", cfg->szErrorInfo);
  +        cpBuf += n;
  +        nBuf  -= n;
  +    }
  +
  +    /* optionally annotate with operating system error information */
  +    if (rv == CFG_ERR_SYS) {
  +        n = cfg_fmt_sprintf(cpBuf, nBuf, "; %s (%d)", strerror(errno), errno);
  +        cpBuf += n;
  +        nBuf  -= n;
  +    }
  +
  +    /* return pointer to internal buffer */
  +    *error = cfg->szError;
  +
       return CFG_OK;
   }
   
   cfg_rc_t cfg_import(cfg_t *cfg, cfg_node_t *node, cfg_fmt_t fmt, const char *in_ptr, size_t in_len)
   {
  +    cfg_rc_t rv;
  +    char error[1024];
  +    cfg_node_t *root;
  +
  +    if (cfg == NULL || in_ptr == NULL || in_len == 0)
  +        return CFG_ERR_ARG;
  +    if (node == NULL)
  +        node = cfg->root;
  +    if (fmt == CFG_FMT_CFG) {
  +        if ((rv = cfg_syn_import(cfg, &root, in_ptr, in_len, error, sizeof(error))) != CFG_OK) {
  +            cfg_error_info(cfg, rv, "%s", error);
  +            return rv;
  +        }
  +    }
  +    /* FIXME: CFG_FMT_XML */
  +    else 
  +        return CFG_ERR_INT; 
  +
  +    /* FIXME merge: cfg->root[node] := cfg->root[node] + root */
  +    cfg->root = root;
  +
       return CFG_OK;
   }
   
  -cfg_rc_t cfg_export(cfg_t *cfg, cfg_node_t *node, cfg_fmt_t fmt, char *ex_ptr, size_t ex_len)
  +cfg_rc_t cfg_export(cfg_t *cfg, cfg_node_t *node, cfg_fmt_t fmt, char **ex_ptr, size_t ex_len)
   {
  +    cfg_rc_t rv;
  +    char *output;
  +    size_t n;
  +
  +    if (cfg == NULL || ex_ptr == NULL)
  +        return CFG_ERR_ARG;
  +    if (node == NULL)
  +        node = cfg->root;
  +    if (fmt == CFG_FMT_CFG) {
  +        if ((rv = cfg_syn_export(cfg, node, &output)) != CFG_OK)
  +            return rv;
  +    }
  +    /* FIXME: CFG_FMT_XML */
  +    else 
  +        return CFG_ERR_INT; 
  +
  +    /* provide output */
  +    if (ex_len == 0) 
  +        *ex_ptr = output;
  +    else {
  +        n = strlen(output);
  +        if (n >= ex_len)
  +            return CFG_ERR_MEM;
  +        memmove(*ex_ptr, output, n+1);
  +        free(output);
  +    }
  +
       return CFG_OK;
   }
   
  Index: ossp-pkg/cfg/cfg_main.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 cfg_main.h
  --- ossp-pkg/cfg/cfg_main.h	10 Jul 2002 12:00:23 -0000	1.1
  +++ ossp-pkg/cfg/cfg_main.h	10 Jul 2002 14:46:28 -0000	1.2
  @@ -32,10 +32,19 @@
   #define __CFG_MAIN_H__
   
   #include "cfg.h"
  +#include "cfg_node.h"
  +#include "cfg_grid.h"
   
   struct cfg_st {
       cfg_node_t *root;
  +    cfg_grid_t *grid_nodes;
  +    cfg_grid_t *grid_tokens;
  +    char        szError[512];
  +    char        szErrorInfo[256];
  +    cfg_rc_t    rcErrorInfo;
   };
  +
  +cfg_rc_t cfg_error_info(cfg_t *cfg, cfg_rc_t rv, const char *fmt, ...);
   
   #endif /* __CFG_MAIN_H__ */
   
  Index: ossp-pkg/cfg/cfg_node.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 cfg_node.c
  --- ossp-pkg/cfg/cfg_node.c	10 Jul 2002 12:00:23 -0000	1.5
  +++ ossp-pkg/cfg/cfg_node.c	10 Jul 2002 14:46:28 -0000	1.6
  @@ -40,6 +40,8 @@
   {
       cfg_node_t *n;
   
  +    if (node == NULL)
  +        return CFG_ERR_ARG;
       if ((n = malloc(sizeof(cfg_node_t))) == NULL)
           return CFG_ERR_SYS;
       n->parent   = NULL;
  @@ -161,10 +163,10 @@
       return CFG_OK;
   }
   
  -cfg_rc_t cfg_node_goto(cfg_t *cfg, cfg_node_t **node, const char *spec)
  +cfg_rc_t cfg_node_goto(cfg_t *cfg, cfg_node_t  *node, const char *spec, cfg_node_t **node2)
   {
   
  -    if (cfg == NULL || node == NULL || spec == NULL)
  +    if (cfg == NULL || node == NULL || spec == NULL || node2 == NULL)
           return CFG_ERR_ARG;
       /* FIXME */
   #if 0
  Index: ossp-pkg/cfg/cfg_syn.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 cfg_syn.c
  --- ossp-pkg/cfg/cfg_syn.c	10 Jul 2002 12:00:23 -0000	1.11
  +++ ossp-pkg/cfg/cfg_syn.c	10 Jul 2002 14:46:28 -0000	1.12
  @@ -50,14 +50,16 @@
   cfg_rc_t cfg_syn_import(
       cfg_t *cfg, 
       cfg_node_t **node, 
  -    const char *input,
  -    char *err_buf, size_t err_len)
  +    const char *in_ptr,
  +    size_t in_len,
  +    char *err_buf, 
  +    size_t err_len)
   {
       cfg_syn_ctx_t ctx;
       void *yyscan;
       
       /* argument sanity checking */
  -    if (node == NULL || input == NULL)
  +    if (node == NULL || in_ptr == NULL || in_len == 0)
           return CFG_ERR_ARG;
   
       /* initialize scanner */
  @@ -66,9 +68,9 @@
   
       /* establish our own context which is passed 
          through the parser and scanner */
  -    ctx.inputptr = input;
  -    ctx.inputbuf = input;
  -    ctx.inputlen = strlen(input);
  +    ctx.inputptr = in_ptr;
  +    ctx.inputbuf = in_ptr;
  +    ctx.inputlen = in_len;
       ctx.cfg      = cfg;
       ctx.node     = NULL;
       ctx.rv       = CFG_OK;
  Index: ossp-pkg/cfg/cfg_syn.h
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 cfg_syn.h
  --- ossp-pkg/cfg/cfg_syn.h	5 Jul 2002 15:32:42 -0000	1.3
  +++ ossp-pkg/cfg/cfg_syn.h	10 Jul 2002 14:46:28 -0000	1.4
  @@ -65,7 +65,7 @@
   #define last_column  last
   
   /* internal API */
  -extern cfg_rc_t cfg_syn_import  (cfg_t *cfg, cfg_node_t **node, const char *input, char *err_buf, size_t err_len);
  +extern cfg_rc_t cfg_syn_import  (cfg_t *cfg, cfg_node_t **node, const char *in_ptr, size_t in_len, char *err_buf, size_t err_len);
   extern cfg_rc_t cfg_syn_export  (cfg_t *cfg, cfg_node_t *node, char **output);
   extern cfg_rc_t cfg_syn_destroy (cfg_t *cfg, cfg_node_t *node);
   
  Index: ossp-pkg/cfg/cfg_test.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 cfg_test.c
  --- ossp-pkg/cfg/cfg_test.c	5 Jul 2002 18:32:37 -0000	1.4
  +++ ossp-pkg/cfg/cfg_test.c	10 Jul 2002 14:46:28 -0000	1.5
  @@ -12,29 +12,52 @@
   int main(int argc, char *argv[]) 
   {
       cfg_rc_t rc;
  -    char *buf_ptr;
  -    size_t buf_size;
  -    cfg_node_t *node;
  -    char err_buf[1024];
  +    char *im_ptr;
  +    size_t im_size;
  +    char *ex_ptr;
  +    char *error;
  +    cfg_t *cfg;
   
       if (argc != 2) {
           fprintf(stderr, "USAGE: %s <file>\n", argv[0]);
           exit(1);
       }
  -    if ((rc = cfg_util_readfile(argv[1], &buf_ptr, &buf_size)) != CFG_OK) {
  +
  +    if ((rc = cfg_util_readfile(argv[1], &im_ptr, &im_size)) != CFG_OK) {
           fprintf(stderr, "ERROR: reading file \"%s\"\n", argv[1]);
           exit(1);
       }
  -    rc = cfg_syn_import(NULL, &node, buf_ptr, err_buf, sizeof(err_buf));
  -    free(buf_ptr);
   
  -    if (rc != CFG_OK)
  -        fprintf(stderr, "ERROR: %s\n", err_buf);
  -    else {
  -        cfg_syn_export(NULL, node, &buf_ptr);
  -        cfg_syn_destroy(NULL, node);
  -        fprintf(stdout, "%s", buf_ptr);
  +    if ((rc = cfg_create(&cfg)) != CFG_OK) {
  +        cfg_error(cfg, rc, &error);
  +        fprintf(stderr, "ERROR: cfg_create: %s\n", error);
  +        free(im_ptr);
  +        exit(1);
  +    }
  +
  +    if ((rc = cfg_import(cfg, NULL, CFG_FMT_CFG, im_ptr, im_size)) != CFG_OK) {
  +        cfg_error(cfg, rc, &error);
  +        fprintf(stderr, "ERROR: cfg_import: %s\n", error);
  +        free(im_ptr);
  +        cfg_destroy(cfg);
  +        exit(1);
       }
  +
  +
  +    if ((rc = cfg_export(cfg, NULL, CFG_FMT_CFG, &ex_ptr, 0)) != CFG_OK) {
  +        cfg_error(cfg, rc, &error);
  +        fprintf(stderr, "ERROR: cfg_export: %s\n", error);
  +        free(im_ptr);
  +        cfg_destroy(cfg);
  +        exit(1);
  +    }
  +
  +    fprintf(stdout, "%s", ex_ptr);
  +
  +#if 0
  +    cfg_syn_destroy(cfg, node);
  +    cfg_destroy(cfg);
  +#endif
   
       return 0;
   }

From ossp-cvs-owner@ossp.org  Wed Jul 10 21:02:25 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2771C767D1; Wed, 10 Jul 2002 21:02:25 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc Makefile.in rc.c rc_error.c
Message-Id: <20020710190225.2771C767D1@mail.ossp.org>
Date: Wed, 10 Jul 2002 21:02:25 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   10-Jul-2002 21:02:25
  Branch: HEAD                             Handle: 2002071020022400

  Added files:
    ossp-pkg/rc             rc_error.c
  Modified files:
    ossp-pkg/rc             Makefile.in rc.c

  Log:
    Make the main source file even smaller by splitting out the error handling
    logic into a new rc_error source file.

  Summary:
    Revision    Changes     Path
    1.30        +4  -4      ossp-pkg/rc/Makefile.in
    1.39        +1  -30     ossp-pkg/rc/rc.c
    1.1         +61 -0      ossp-pkg/rc/rc_error.c
  ____________________________________________________________________________

  Index: ossp-pkg/rc/Makefile.in
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 Makefile.in
  --- ossp-pkg/rc/Makefile.in	26 Jun 2002 14:11:16 -0000	1.29
  +++ ossp-pkg/rc/Makefile.in	10 Jul 2002 19:02:24 -0000	1.30
  @@ -59,11 +59,11 @@
   TARGET_PROGS    = rc
   TARGET_MANS     = rc.1 rc-sample.5
   
  -SRCS            = rc.c rc_anal.c rc_script.c rc_config.c rc_cliopt.c \
  -                  rc_proc.c rc_version.c rc_pcre.c rc_util.c
  +SRCS            = rc.c rc_error.c rc_anal.c rc_script.c rc_config.c \
  +                  rc_cliopt.c rc_proc.c rc_version.c rc_pcre.c rc_util.c
   
  -OBJS            = rc.o rc_anal.o rc_script.o rc_config.o rc_cliopt.o \
  -                  rc_proc.o rc_version.o rc_pcre.o rc_util.o
  +OBJS            = rc.o rc_error.o rc_anal.o rc_script.o rc_config.o \
  +                  rc_cliopt.o rc_proc.o rc_version.o rc_pcre.o rc_util.o
   
   SUBDIRS         = @SUBDIR_EX@ @SUBDIR_POPT@
   #SUBDIRS         = @SUBDIR_EX@ @SUBDIR_VAR@ @SUBDIR_VAL@ @SUBDIR_STR@ @SUBDIR_POPT@
  Index: ossp-pkg/rc/rc.c
  ============================================================
  $ cvs diff -u -r1.38 -r1.39 rc.c
  --- ossp-pkg/rc/rc.c	5 Jul 2002 14:10:24 -0000	1.38
  +++ ossp-pkg/rc/rc.c	10 Jul 2002 19:02:24 -0000	1.39
  @@ -27,38 +27,9 @@
   **  rc.c: Run-command processor ISO C source file
   */
   
  -#include <stdlib.h>
  -
  +#include <stdlib.h> /* Just for calling 'exit(3)' once */
   #include "rc.h"     /* Public interfaces */
   
  -
  -/************************************************
  -* rcError(ex_t)                                 *
  -* Main rc error handler                         *
  -************************************************/
  -void rcError(ex_t Localerr)
  -{
  -    if (FAILED((rc_return_t)Localerr.ex_value)) { /* Error condition */
  -        if ((rc_return_t)Localerr.ex_value == RC_ERR_TRM)
  -            exit(0);
  -        else if ((rc_return_t)Localerr.ex_value == RC_ERR_FNC)
  -            fprintf(stderr, "    Error condition, function file could not be opened.\n");
  -        else if ((rc_return_t)Localerr.ex_value == RC_ERR_DIR)
  -            fprintf(stderr, "    Error condition, location dir could not be opened.\n");
  -        else if ((rc_return_t)Localerr.ex_value == RC_ERR_RCF)
  -            fprintf(stderr, "    Error condition, rc file could not be opened.\n");
  -        else
  -            fprintf(stderr, "    Error condition of class '%s',\n    exception %d in %s:%s():%d.\n", (char *)Localerr.ex_class, (int)Localerr.ex_value, Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
  -        exit(1); /* Return failure */
  -    }
  -#ifdef DEBUG
  -    else        /* Warning condition */
  -        fprintf(stderr, "    Warning condition of class '%s',\n    exception %d in %s:%s():%d.\n", (char *)Localerr.ex_class, (int)Localerr.ex_value, Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
  -#else
  -    else        /* Warning condition */
  -        RC_NOP; /* No operation on warnings */
  -#endif
  -}
   
   /************************************************
   * main(int, char **)                            *
  Index: ossp-pkg/rc/rc_error.c
  ============================================================
  $ cvs update -p -r1.1 rc_error.c
  /*  OSSP rc - Run-command processor
  **  Copyright (c) 2002 Ralf S. Engelschall
  **  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **
  **  This file is part of OSSP rc, a portable Run-command processor
  **  which can be found at http://www.ossp.org/pkg/lib/rc/
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  rc_error.c: Run-command processor ISO C source file
  */
  
  #include <stdlib.h> /* Just for calling 'exit(3)' once */
  #include "rc.h"     /* Public interfaces */
  
  
  /************************************************
  * rcError(ex_t)                                 *
  * Main rc error handler                         *
  ************************************************/
  void rcError(ex_t Localerr)
  {
      if (FAILED((rc_return_t)Localerr.ex_value)) { /* Error condition */
          if ((rc_return_t)Localerr.ex_value == RC_ERR_TRM)
              exit(0);
          else if ((rc_return_t)Localerr.ex_value == RC_ERR_FNC)
              fprintf(stderr, "    Error condition, function file could not be opened.\n");
          else if ((rc_return_t)Localerr.ex_value == RC_ERR_DIR)
              fprintf(stderr, "    Error condition, location dir could not be opened.\n");
          else if ((rc_return_t)Localerr.ex_value == RC_ERR_RCF)
              fprintf(stderr, "    Error condition, rc file could not be opened.\n");
          else
              fprintf(stderr, "    Error condition of class '%s',\n    exception %d in %s:%s():%d.\n", (char *)Localerr.ex_class, (int)Localerr.ex_value, Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
          exit(1); /* Return failure */
      }
  #ifdef DEBUG
      else        /* Warning condition */
          fprintf(stderr, "    Warning condition of class '%s',\n    exception %d in %s:%s():%d.\n", (char *)Localerr.ex_class, (int)Localerr.ex_value, Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
  #else
      else        /* Warning condition */
          RC_NOP; /* No operation on warnings */
  #endif
  }
  

From ossp-cvs-owner@ossp.org  Wed Jul 10 21:03:21 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AA082767D1; Wed, 10 Jul 2002 21:03:21 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc 00TODO
Message-Id: <20020710190321.AA082767D1@mail.ossp.org>
Date: Wed, 10 Jul 2002 21:03:21 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   10-Jul-2002 21:03:21
  Branch: HEAD                             Handle: 2002071020032100

  Modified files:
    ossp-pkg/rc             00TODO

  Log:
    New things to remember that are failing or not in the build yet.

  Summary:
    Revision    Changes     Path
    1.30        +3  -0      ossp-pkg/rc/00TODO
  ____________________________________________________________________________

  Index: ossp-pkg/rc/00TODO
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 00TODO
  --- ossp-pkg/rc/00TODO	4 Jul 2002 16:56:21 -0000	1.29
  +++ ossp-pkg/rc/00TODO	10 Jul 2002 19:03:21 -0000	1.30
  @@ -14,6 +14,7 @@
     Not multithreaded (too many potentials for race conditions or overwrite)
     Not efficient (reads whole files when only parts are needed...)
     What's going on with ^ in patterns? Something is broken.
  +  Resolve memory leaks with Dmalloc, ask for help.
   
   Document
     Refs, pri, user, group, ci, go only in normal (not special) sections.
  @@ -35,6 +36,8 @@
     Convert some normal assert() to real runtime checks.
     Use str_hash von ossp str or static RC_XXX_VAL array from rc_option.h.
     Restore lost multiple location merging logic.
  +  Use OSSP cfg library for dotconf parsing, ask Ralf to help.
  +  Add config section of each rc file to start of script.
   
   Implementation
     Correct assertion, sanity check, and if () checks according to one standard.

From ossp-cvs-owner@ossp.org  Wed Jul 10 21:03:59 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4EEC1767D1; Wed, 10 Jul 2002 21:03:59 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc_proc.c rc_script.c
Message-Id: <20020710190359.4EEC1767D1@mail.ossp.org>
Date: Wed, 10 Jul 2002 21:03:59 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   10-Jul-2002 21:03:59
  Branch: HEAD                             Handle: 2002071020035800

  Modified files:
    ossp-pkg/rc             rc_proc.c rc_script.c

  Log:
    Correct and generally improve mixing of sections and parsing the labels.

  Summary:
    Revision    Changes     Path
    1.13        +17 -2      ossp-pkg/rc/rc_proc.c
    1.7         +16 -18     ossp-pkg/rc/rc_script.c
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc_proc.c
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	5 Jul 2002 12:54:56 -0000	1.12
  +++ ossp-pkg/rc/rc_proc.c	10 Jul 2002 19:03:58 -0000	1.13
  @@ -94,6 +94,9 @@
           }
       }
   
  +    /* Stick on the starting shell id line */
  +    scriptAppend(pRc->m_pScript, "#! /bin/sh\n", strlen("#! /bin/sh\n"));
  +
       /* Read the func file if it was opened successfully */
       /* We unfortunately make the assumption that 0 is an invalid filedesc */
       if (nFdfunc) {
  @@ -101,6 +104,7 @@
           while ((nRet = read(nFdfunc, sBuf, RC_READ_BUFSIZE)) > 0) {
               scriptAppend(pRc->m_pScript, sBuf, nRet);
           }
  +        scriptAppend(pRc->m_pScript, "\n", sizeof(char));
           if (nRet == -1) /* Handle read errors */
               RC_THROW(RC_ERR_IO);
       }
  @@ -129,18 +133,29 @@
               RC_THROW(RC_ERR_IO);
   
           try {
  +            /* Append config section if it exists */
  +            szSec = scriptSection(pTempscript, configGetval(RC_NCF_VAL));
  +            if (szSec) { /* Only operate if the section lookup succeeds */
  +                scriptAppend(pRc->m_pScript, szSec, strlen(szSec));
  +                scriptAppend(pRc->m_pScript, "\n", sizeof(char));
  +                free(szSec);    /* Cleanup */
  +                szSec = NULL;   /* Cleanup */
  +            }
  +
               for (i = 0; pRc->m_pAnal->m_pszSecs[i]; i++) { /* Iterate over */
                   /* Extract a section from the temp script, and append it */
                   szSec = scriptSection(pTempscript, pRc->m_pAnal->m_pszSecs[i]);
   
  -                if (szSec) /* Only call append if the section lookup succeeds */
  +                if (szSec) { /* Only call if the section lookup succeeds */
                       scriptAppend(pRc->m_pScript, szSec, strlen(szSec));
  +                    scriptAppend(pRc->m_pScript, "\n", sizeof(char));
  +                }
                   else if (configGetval(RC_DBG_VAL)) /* Only show if debug set */
                       fprintf(stderr, "#Warning: Missing section '%s' in %s!\n",\
                           pRc->m_pAnal->m_pszSecs[i],\
                           pRc->m_pAnal->m_szRcs[nIter]);
   
  -                if (szSec) { /* Cleanup section string */
  +                if (szSec) { /* Cleanup iterative section string */
                       free(szSec);
                       szSec = NULL;
                   }
  Index: ossp-pkg/rc/rc_script.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 rc_script.c
  --- ossp-pkg/rc/rc_script.c	5 Jul 2002 12:54:56 -0000	1.6
  +++ ossp-pkg/rc/rc_script.c	10 Jul 2002 19:03:58 -0000	1.7
  @@ -104,7 +104,8 @@
   {
       char *szTempout    = NULL;
       char *piLabstart   = NULL;
  -    char *piLabend     = NULL;
  +    int   nLabsize     = NULL;
  +    char *piBlocend    = NULL; /* Misnomer used to control section looping */
       char *piStart      = NULL;
       char *piEnd        = NULL;
       int nOffset        = 0;
  @@ -112,8 +113,9 @@
       int nVecsize       = 0;
       int nSubstrings    = 0;
       int *pnVec         = NULL;
  -    const int kiRegopt = 0;
       const char *kszErr = NULL;
  +    const int kiRegopt = PCRE_DOTALL | PCRE_MULTILINE;
  +/*    const int kiRegopt = PCRE_DOTALL | PCRE_MULTILINE | PCRE_UNGREEDY;*/
   
       pcre *pRegex       = NULL;  /* Perl Compatible Regular Expression */
       pcre_extra *pExtra = NULL;  /* Used for studying an expression    */
  @@ -121,8 +123,8 @@
       assert(pScript);            /* Check for a valid incoming script  */
       assert(configGetval(RC_DEF_VAL));
   
  -    if (!kszSecname)    /* If we get a NULL section label, give a NULL result */
  -        return (NULL);  /* This might be useful in some loop constructs */
  +    if (!kszSecname)    /* If we get a NULL section label, then throw up */
  +        RC_THROW(RC_ERR_USE);
   
       if ((pRegex = pcre_compile(configGetval(RC_DEF_VAL), kiRegopt, &kszErr, &nOffset, NULL)) == NULL) {
           RC_THROW(RC_ERR_SYS);
  @@ -140,36 +142,32 @@
       /* Use multiples of six, because PCRE needs 2x multiples of three */
       nVecsize = 6 * (nSubstrings > 0 ? nSubstrings : 1);
       nVecsize *= RC_GOOD_MEASURE; /* Add redundancy factor for error margin */
  +/*    pAwesome += RC_GOOD_VIBRATIONS;*/ /* Add good vibes for super action */
   
       /* Filter the rc file for the section label, do it here the first time */
       pnVec = calloc(nVecsize, sizeof(int));  /* 2/3 vec 1/3 scrapinfo */
       nFound = pcre_exec(pRegex, pExtra, *pScript,\
           strlen(*pScript), 0, 0, pnVec, nVecsize);
   
  -    piLabend = *pScript;    /* Start piLabstart pointing to the script object */
  +    piBlocend = *pScript;   /* Start piBlocend pointing to the script object */
       while (nFound > 1) {    /* Loop as long as we have more sections */
  -        piLabstart = piLabend + *(pnVec + 2 * RC_SEC_SUB);  /* Seclabel start */
  -        piLabend += *(pnVec + 1);   /* Find end of section label */
  +        piLabstart = piBlocend + *(pnVec + 2);
  +        nLabsize   = *(pnVec + 3) - *(pnVec + 2);
   
           /* Test the substring. If it matches our label, generate a subscript */
  -        if (!strncmp(piLabstart , kszSecname, sizeof(kszSecname))) {
  -            piStart = strstr(piLabend, "\n") + sizeof(char); /* Wrap to start */
  -
  -            /* See if more sections follow or if this is the last one */
  -            if (pcre_exec(pRegex, pExtra, piLabend, strlen(*pScript), 0, 0, pnVec, nVecsize) > 0)
  -                piEnd = piLabend + *pnVec;
  -            else /* Doch, last section in file */
  -                piEnd = piLabend + strlen(*pScript);
  -
  +        if (!strncmp(piLabstart, kszSecname, nLabsize)) {
  +            piStart   = piBlocend + *(pnVec + 4);
  +            piEnd     = piBlocend + *(pnVec + 5);
               szTempout = malloc(piEnd - piStart + sizeof(char));
               strncpy(szTempout, piStart, piEnd - piStart);
               *(szTempout + (piEnd - piStart)) = NULL;    /* Terminate outgoing */
               return(szTempout);  /* Section found, so return the text */
           }
   
  +        piBlocend += *(pnVec + 1);  /* Find end of section block */
           /* Get ready for the next round of matching */
  -        nFound = pcre_exec(pRegex, pExtra, piLabend,\
  -            strlen(piLabend), 0, 0, pnVec, nVecsize);
  +        nFound = pcre_exec(pRegex, pExtra, piBlocend,\
  +            strlen(piBlocend), 0, 0, pnVec, nVecsize);
       }
   
       /* Under correct conditions, the section subscript was returned in loop */

From ossp-cvs-owner@ossp.org  Wed Jul 10 21:04:53 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 20780767D1; Wed, 10 Jul 2002 21:04:53 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc_test.sh ossp-pkg/rc/rc_test rc.pam
Message-Id: <20020710190453.20780767D1@mail.ossp.org>
Date: Wed, 10 Jul 2002 21:04:53 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   10-Jul-2002 21:04:53
  Branch: HEAD                             Handle: 2002071020045200

  Modified files:
    ossp-pkg/rc             rc_test.sh
    ossp-pkg/rc/rc_test     rc.pam

  Log:
    Update test suite to reflect changes in config, func, rcfile, and section
    logic. Not having default values in the configuration remains problem number
    one for testing.

  Summary:
    Revision    Changes     Path
    1.18        +44 -41     ossp-pkg/rc/rc_test.sh
    1.2         +4  -1      ossp-pkg/rc/rc_test/rc.pam
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc_test.sh
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 rc_test.sh
  --- ossp-pkg/rc/rc_test.sh	5 Jul 2002 12:07:01 -0000	1.17
  +++ ossp-pkg/rc/rc_test.sh	10 Jul 2002 19:04:52 -0000	1.18
  @@ -42,18 +42,18 @@
   #./rc -derv -L ./rc_test/rc.d/rc.%{RCFILE:s/^all$/*/} -c ./rc.conf -f ./rc_test/rcfuncs -t /tmp openssh stop sleep=4 start daily minsize=2097152
   
   # Test some long options, should fail for false combination usage
  -echo; echo "./rc --verbose --silent --ParseSectionDef \"%(.+)\" uucp stop sleep=6 start"
  -./rc --verbose --silent --ParseSectionDef "%(.+)" uucp stop sleep=6 start
  -echo; echo "./rc --query myvar --silent --ParseSectionDef \"%(.+)\" zebra bing bang"
  -./rc --query myvar --silent --ParseSectionDef "%(.+)" zebra bing bang
  -echo; echo "./rc --conf ./rc.conf --ParseSectionDef \"%(.+)\" --locate ./rc_test/ --query this barf test"
  -./rc --conf ./rc.conf --ParseSectionDef "%(.+)" --locate ./rc_test/ --query this barf test
  +echo; echo "./rc --verbose --silent --NameConfig config --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" uucp stop sleep=6 start"
  +./rc --verbose --silent --NameConfig config --ParseSectionDef "^%(\w+).*?\n(.*?)^$" uucp stop sleep=6 start
  +echo; echo "./rc --query myvar --silent --NameConfig config --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" zebra bing bang"
  +./rc --query myvar --silent --NameConfig config --ParseSectionDef "^%(\w+).*?\n(.*?)^$" zebra bing bang
  +echo; echo "./rc --conf ./rc.conf --NameConfig config --ParseSectionDef \"^<(.+?)\s*.*?>\n*(.*?)^<\/\1>\" --locate ./rc_test/ --query this barf test"
  +./rc --conf ./rc.conf --NameConfig config --ParseSectionDef "^<(.+?)\s*.*?>\n*(.*?)^<\/\1>" --locate ./rc_test/ --query this barf test
   
   # Test minimal set of long options, should succeed
  -echo; echo "./rc --debug --version --ParseSectionDef \"%(.+)\" rsyncd nothing matters but the version"
  -./rc --debug --version --ParseSectionDef "%" rsyncd nothing matters but the version
  -echo; echo "./rc --conf $RCBASE/rc.conf --ParseSectionDef \"%(.+)\" --locate $RCBASE/rc.d:./rc_test:/etc/rc --query all barf test"
  -./rc --conf $RCBASE/rc.conf --ParseSectionDef "%(.+)" --locate $RCBASE/rc.d:./rc_test:/etc/rc --query all barf test
  +echo; echo "./rc --debug --version --NameConfig config --ParseSectionDef \"^<(.+?)\s*.*?>\n*(.*?)^<\/\1>\" rsyncd nothing matters but the version"
  +./rc --debug --version --NameConfig config --ParseSectionDef "^<(.+?)\s*.*?>\n*(.*?)^<\/\1>" rsyncd nothing matters but the version
  +echo; echo "./rc --conf $RCBASE/rc.conf --NameConfig config --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" --locate $RCBASE/rc.d:./rc_test:/etc/rc --query all barf test"
  +./rc --conf $RCBASE/rc.conf --NameConfig config --ParseSectionDef "^%(\w+).*?\n(.*?)^$" --locate $RCBASE/rc.d:./rc_test:/etc/rc --query all barf test
   
   # FIXME these cases are not handled yet by our configuration FIXME #
   #echo; echo "./rc --debug --version"
  @@ -68,42 +68,45 @@
   #./rc --conf $RCBASE/rc.conf --tmp /tmp --debug --labels rsyncd
   # FIXME these cases are not handled yet by our configuration FIXME #
   
  -echo; echo "./rc --func rc_test/rcfuncs --print --ParseSectionDef \"%(.+)\" --verbose openssh stop sleep=4 start"
  -./rc --func rc_test/rcfuncs --print --ParseSectionDef "%(.+)" --verbose openssh stop sleep=4 start
  +echo; echo "./rc --func rc_test/rcfuncs --print --NameConfig config --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" --verbose openssh stop sleep=4 start"
  +./rc --func rc_test/rcfuncs --print --NameConfig config --ParseSectionDef "^%(\w+).*?\n(.*?)^$" --verbose openssh stop sleep=4 start
   echo; echo "./rc --func ./rc_test/rcfuncs --info --eval uucp restart"
   ./rc --func ./rc_test/rcfuncs --info --eval uucp restart
  -echo; echo "./rc --conf rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --ParseSectionDef \"%(.+)\" --print uucp start"
  -./rc --conf rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --ParseSectionDef "%(.+)" --print uucp start
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --ParseSectionDef \"%(.+)\" --print ntp sync"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --ParseSectionDef "%(.+)" --print ntp sync
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --silent --ParseSectionDef \"%(.+)\" --print ralf feed suppe"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --silent --ParseSectionDef "%(.+)" --print ralf feed suppe
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L rc_test --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --print samba search finish destroy"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L rc_test --ParseSectionDef "%(.+)" --tmp /tmp --silent --print samba search finish destroy
  -
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --print all feed suppe"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test --ParseSectionDef "%(.+)" --tmp /tmp --silent --print all feed suppe
  -
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --debug --print all config barf gag"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --debug --print all config barf gag
  -
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --debug --eval all config start"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --debug --eval all config start
  -
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --debug --exec all config start"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --debug --exec all config start
  -
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --debug --print pam info"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --debug --print pam info
  +echo; echo "./rc --conf rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --NameConfig config --ParseSectionDef \"^<(.+?)\s*.*?>\n*(.*?)^<\/\1>\" --print uucp start"
  +./rc --conf rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --NameConfig config --ParseSectionDef "^<(.+?)\s*.*?>\n*(.*?)^<\/\1>" --print uucp start
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --NameConfig config --ParseSectionDef \"^<(.+?)\s*.*?>\n*(.*?)^<\/\1>\" --print ntp sync"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --NameConfig config --ParseSectionDef "^<(.+?)\s*.*?>\n*(.*?)^<\/\1>" --print ntp sync
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --silent --NameConfig config --ParseSectionDef \"^<(.+?)\s*.*?>\n*(.*?)^<\/\1>\" --print ralf feed suppe"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --silent --NameConfig config --ParseSectionDef "^<(.+?)\s*.*?>\n*(.*?)^<\/\1>" --print ralf feed suppe
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L rc_test --NameConfig config --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" --tmp /tmp --silent --print samba search finish destroy"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L rc_test --NameConfig config --ParseSectionDef "^%(\w+).*?\n(.*?)^$" --tmp /tmp --silent --print samba search finish destroy
   
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --debug --print apache config start"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --debug --print apache config start
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test --NameConfig config --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" --tmp /tmp --silent --print all feed suppe"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test --NameConfig config --ParseSectionDef "^%(\w+).*?\n(.*?)^$" --tmp /tmp --silent --print all feed suppe
   
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef \"<(.+)>\" --tmp /tmp --silent --debug --print all config start"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef "<(.+)>" --tmp /tmp --silent --debug --print all config start
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --NameConfig config --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" --tmp /tmp --silent --debug --print all config barf gag"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --NameConfig config --ParseSectionDef "^%(\w+).*?\n(.*?)^$" --tmp /tmp --silent --debug --print all config barf gag
   
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef \"<(.+)>\" --tmp /tmp --silent --debug --print pam info"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef "<(.+)>" --tmp /tmp --silent --debug --print pam info
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --NameConfig config --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" --tmp /tmp --silent --debug --eval all config start"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --NameConfig config --ParseSectionDef "^%(\w+).*?\n(.*?)^$" --tmp /tmp --silent --debug --eval all config start
  +
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --NameConfig config --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" --tmp /tmp --silent --debug --exec all config start"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --NameConfig config --ParseSectionDef "^%(\w+).*?\n(.*?)^$" --tmp /tmp --silent --debug --exec all config start
  +
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --NameConfig config --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --debug --print pam info"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --NameConfig config --ParseSectionDef "%(.+)" --tmp /tmp --silent --debug --print pam info
  +
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --NameConfig config --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --debug --print apache config start"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --NameConfig config --ParseSectionDef "%(.+)" --tmp /tmp --silent --debug --print apache config start
  +
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --NameConfig config --ParseSectionDef \"^<(.+?)\s*.*?>\n*(.*?)^<\/\1>\" --tmp /tmp --silent --debug --print all config start"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --NameConfig config --ParseSectionDef "^<(.+?)\s*.*?>\n*(.*?)^<\/\1>" --tmp /tmp --silent --debug --print all config start
  +
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --NameConfig config --ParseSectionDef \"^<(.+?)\s*.*?>\n*(.*?)^<\/\1>\" --tmp /tmp --silent --debug --print pam info"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --NameConfig config --ParseSectionDef "^<(.+?)\s*.*?>\n*(.*?)^<\/\1>" --tmp /tmp --silent --debug --print pam info
  +
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func $RCBASE/rc.func -L $RCBASE/rc.d/ --NameConfig config --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" --tmp /tmp --silent --debug --print dhcpd start"
  +./rc --conf ./rc_test/myrc.conf --func $RCBASE/rc.func -L $RCBASE/rc.d/ --NameConfig config --ParseSectionDef "^%(\w+).*?\n(.*?)^$" --tmp /tmp --silent --debug --print dhcpd start
   
   # Next milestone
   #RequireOwner
  Index: ossp-pkg/rc/rc_test/rc.pam
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 rc.pam
  --- ossp-pkg/rc/rc_test/rc.pam	5 Jul 2002 11:16:20 -0000	1.1
  +++ ossp-pkg/rc/rc_test/rc.pam	10 Jul 2002 19:04:52 -0000	1.2
  @@ -3,13 +3,16 @@
   ##  rc.pam -- Run-Commands for PAM
   ##
   
  -<config>
  +<config barfola=99>
       pam_enable="yes"
       pam_cfgloc='/etc/pam.conf'
       pam_modpfx=''
       pam_incdir='/usr/include'
       pam_libdir='/usr/lib'
   </config>
  +
  +Here is some comments.
  +Nada mas.
   
   <info>
       echo "PAM Enabled:           ${pam_enable}"

From ossp-cvs-owner@ossp.org  Wed Jul 10 21:26:33 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C0671767CA; Wed, 10 Jul 2002 21:26:32 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg cfg_data.c cfg_data.h cfg_main.c cfg_node.c
Message-Id: <20020710192632.C0671767CA@mail.ossp.org>
Date: Wed, 10 Jul 2002 21:26:32 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Jul-2002 21:26:32
  Branch: HEAD                             Handle: 2002071020263200

  Modified files:
    ossp-pkg/cfg            cfg_data.c cfg_data.h cfg_main.c cfg_node.c

  Log:
    implement cfg_node_clone

  Summary:
    Revision    Changes     Path
    1.3         +14 -5      ossp-pkg/cfg/cfg_data.c
    1.3         +4  -1      ossp-pkg/cfg/cfg_data.h
    1.3         +1  -1      ossp-pkg/cfg/cfg_main.c
    1.7         +25 -1      ossp-pkg/cfg/cfg_node.c
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/cfg_data.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 cfg_data.c
  --- ossp-pkg/cfg/cfg_data.c	10 Jul 2002 12:00:23 -0000	1.2
  +++ ossp-pkg/cfg/cfg_data.c	10 Jul 2002 19:26:32 -0000	1.3
  @@ -84,6 +84,19 @@
       return CFG_OK;
   }
   
  +cfg_rc_t cfg_data_copy(cfg_data_t *data, cfg_data_t *copy)
  +{
  +    cfg_rc_t rc;
  +
  +    if (data == NULL || copy == NULL)
  +        return CFG_ERR_ARG;
  +    copy->type = data->type;
  +    copy->ctrl = data->ctrl;
  +    if ((rc = data->ctrl(data, CFG_DATA_CTRL_CLONE, copy)) != CFG_OK)
  +        return rc;
  +    return CFG_OK;
  +}
  +
   cfg_rc_t cfg_data_clone(cfg_data_t *data, cfg_data_t **clone)
   {
       cfg_rc_t rc;
  @@ -92,12 +105,8 @@
           return CFG_ERR_ARG;
       if ((*clone = (cfg_data_t *)malloc(sizeof(cfg_data_t))) == NULL)
           return CFG_ERR_SYS;
  -    (*clone)->type = data->type;
  -    (*clone)->ctrl = data->ctrl;
  -    if ((rc = data->ctrl(data, CFG_DATA_CTRL_CLONE, *clone)) != CFG_OK) {
  -        free(*clone);
  +    if ((rc = cfg_data_copy(data, *clone)) != CFG_OK)
           return rc;
  -    }
       return CFG_OK;
   }
   
  Index: ossp-pkg/cfg/cfg_data.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 cfg_data.h
  --- ossp-pkg/cfg/cfg_data.h	10 Jul 2002 12:00:23 -0000	1.2
  +++ ossp-pkg/cfg/cfg_data.h	10 Jul 2002 19:26:32 -0000	1.3
  @@ -49,9 +49,12 @@
   
   extern cfg_rc_t  cfg_data_create       (cfg_data_t **data);
   extern cfg_rc_t  cfg_data_init         (cfg_data_t  *data);
  -extern cfg_rc_t  cfg_data_kill         (cfg_data_t  *data);
  +
   extern cfg_rc_t  cfg_data_destroy      (cfg_data_t  *data);
  +extern cfg_rc_t  cfg_data_kill         (cfg_data_t  *data);
  +
   extern cfg_rc_t  cfg_data_clone        (cfg_data_t  *data, cfg_data_t **clone);
  +extern cfg_rc_t  cfg_data_copy         (cfg_data_t  *data, cfg_data_t  *copy);
   
   #endif /* __CFG_DATA_H__ */
   
  Index: ossp-pkg/cfg/cfg_main.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 cfg_main.c
  --- ossp-pkg/cfg/cfg_main.c	10 Jul 2002 14:46:28 -0000	1.2
  +++ ossp-pkg/cfg/cfg_main.c	10 Jul 2002 19:26:32 -0000	1.3
  @@ -158,7 +158,7 @@
       else 
           return CFG_ERR_INT; 
   
  -    /* FIXME merge: cfg->root[node] := cfg->root[node] + root */
  +    /* FIXME: merge: cfg->root[node] := cfg->root[node] + root */
       cfg->root = root;
   
       return CFG_OK;
  Index: ossp-pkg/cfg/cfg_node.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 cfg_node.c
  --- ossp-pkg/cfg/cfg_node.c	10 Jul 2002 14:46:28 -0000	1.6
  +++ ossp-pkg/cfg/cfg_node.c	10 Jul 2002 19:26:32 -0000	1.7
  @@ -45,10 +45,13 @@
       if ((n = malloc(sizeof(cfg_node_t))) == NULL)
           return CFG_ERR_SYS;
       n->parent   = NULL;
  +    n->lbroth   = NULL;
       n->rbroth   = NULL;
       n->child1   = NULL;
       n->type     = CFG_NODE_TYPE_ARG;
       n->token    = NULL;
  +    n->name     = NULL;
  +    n->offset   = 0;
       cfg_data_init(&n->data);
       *node = n;
       return CFG_OK;
  @@ -60,15 +63,36 @@
           return CFG_ERR_ARG;
       if (node->token != NULL)
           free(node->token);
  +    if (node->name != NULL)
  +        free(node->name);
       free(node);
       return CFG_OK;
   }
   
   cfg_rc_t cfg_node_clone(cfg_t *cfg, cfg_node_t *node, cfg_node_t **node2)
   {
  +    cfg_node_t *n;
  +
       if (node == NULL || node2 == NULL)
           return CFG_ERR_ARG;
  -    /* FIXME */
  +    if ((n = malloc(sizeof(cfg_node_t))) == NULL)
  +        return CFG_ERR_SYS;
  +    n->parent   = node->parent;
  +    n->lbroth   = node->lbroth;
  +    n->rbroth   = node->rbroth;
  +    n->child1   = node->child1;
  +    n->type     = node->type;
  +    if (node->token != NULL)
  +        n->token = strdup(node->token);
  +    else
  +        n->token = NULL;
  +    if (node->name != NULL)
  +        n->name = strdup(node->name);
  +    else
  +        n->name = NULL;
  +    n->offset   = node->offset;
  +    cfg_data_copy(&node->data, &n->data);
  +    *node2 = n;
       return CFG_OK;
   }
   

From ossp-cvs-owner@ossp.org  Thu Jul 11 11:19:14 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 26D15767CA; Thu, 11 Jul 2002 11:19:14 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg cfg_test.c
Message-Id: <20020711091914.26D15767CA@mail.ossp.org>
Date: Thu, 11 Jul 2002 11:19:14 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Jul-2002 11:19:14
  Branch: HEAD                             Handle: 2002071110191300

  Modified files:
    ossp-pkg/cfg            cfg_test.c

  Log:
    remove no longer needed stuff

  Summary:
    Revision    Changes     Path
    1.6         +0  -3      ossp-pkg/cfg/cfg_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/cfg_test.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 cfg_test.c
  --- ossp-pkg/cfg/cfg_test.c	10 Jul 2002 14:46:28 -0000	1.5
  +++ ossp-pkg/cfg/cfg_test.c	11 Jul 2002 09:19:13 -0000	1.6
  @@ -5,9 +5,6 @@
   
   #include "cfg.h"
   #include "cfg_util.h"
  -#include "cfg_node.h"
  -#include "cfg_syn.h"
  -#include "cfg_buf.h"
   
   int main(int argc, char *argv[]) 
   {

From ossp-cvs-owner@ossp.org  Thu Jul 11 17:43:16 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AA693767CA; Thu, 11 Jul 2002 17:43:15 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.c
Message-Id: <20020711154315.AA693767CA@mail.ossp.org>
Date: Thu, 11 Jul 2002 17:43:15 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   11-Jul-2002 17:43:15
  Branch: HEAD                             Handle: 2002071116431500

  Modified files:
    ossp-pkg/fsl            fsl.c

  Log:
    read file or all files and append to buffer

  Summary:
    Revision    Changes     Path
    1.2         +178 -0     ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 fsl.c
  --- ossp-pkg/fsl/fsl.c	9 Jul 2002 09:42:09 -0000	1.1
  +++ ossp-pkg/fsl/fsl.c	11 Jul 2002 15:43:15 -0000	1.2
  @@ -239,3 +239,181 @@
       return;
   }
   
  +/* ------------------------------------------------------------------ */
  +
  +#include <unistd.h>
  +#include <fcntl.h>
  +#include <sys/types.h>
  +#include <sys/stat.h>
  +#include <stdio.h> /* strerror() */
  +#include <dirent.h>
  +
  +#include "config.h"
  +#define FSL_PREFIX "l2."
  +
  +#define STMT(stuff) do { stuff } while (0)
  +#define CU(returncode) STMT( rc = returncode; goto CUS; )
  +#define VCU STMT( goto CUS; )
  +
  +typedef struct {
  +    char *base;
  +    int   used;
  +    int   size;
  +} buf_t;
  +
  +/* general return codes */
  +typedef enum {
  +    FSL_OK = 0,               /* everything ok */
  +    FSL_ERR_ARG,              /* invalid argument */
  +    FSL_ERR_USE,              /* invalid use */
  +    FSL_ERR_MEM,              /* no more memory available */
  +    FSL_ERR_SYS               /* operating system error, see errno */
  +    //FSL_ERR_FMT,              /* formatting error */
  +    //FSL_ERR_INT,              /* internal error */
  +    //FSL_ERR_SYN,              /* syntax error */
  +} fsl_rc_t;
  +
  +fsl_rc_t readfileorallfiles(buf_t *, const char *);
  +fsl_rc_t readfile          (buf_t *, const char *);
  +fsl_rc_t readallfiles      (buf_t *);
  +fsl_rc_t appendfiletobuffer(buf_t *, const char *);
  +
  +int main(int argc, char **argv)
  +{
  +    buf_t buf;
  +    fsl_rc_t rv;
  +
  +    buf.base = NULL;
  +    buf.used = 0;
  +    buf.size = 0;
  +
  +    if ((rv = readfileorallfiles(&buf, "config.log")) != FSL_OK)
  +        fprintf(stderr, "DEBUG: error#%d, system#%s(%d)\n", rv, strerror(errno), errno);
  +
  +    return 0;
  +}
  +
  +fsl_rc_t readfileorallfiles(buf_t *buffer, const char *ident)
  +{
  +    fsl_rc_t rv;
  +
  +    if ((rv = readfile(buffer, ident)) == FSL_OK)
  +        return FSL_OK;
  +
  +    if (rv != FSL_ERR_SYS || errno != ENOENT)
  +        return rv;
  +
  +    if ((rv = readallfiles(buffer)) != FSL_OK)
  +        return rv;
  +
  +    return FSL_OK;
  +}
  +
  +fsl_rc_t readfile(buf_t *buffer, const char *ident)
  +{
  +    fsl_rc_t rc;
  +    char *filename = NULL;
  +
  +    if (ident == NULL || buffer == NULL)
  +        CU(FSL_ERR_ARG);
  +
  +    if ((filename = (char *)malloc(strlen(FSL_CFGDIR) + 1 + strlen(FSL_PREFIX) + strlen(ident) + 1)) == NULL)
  +        CU(FSL_ERR_MEM);
  +    filename[0] = '\0';
  +    strcat(filename, FSL_CFGDIR);
  +    strcat(filename, "/");
  +    strcat(filename, FSL_PREFIX);
  +    strcat(filename, ident);
  +
  +    CU(appendfiletobuffer(buffer, filename));
  +CUS:
  +    if (filename != NULL)
  +        free(filename);
  +    return rc;
  +}
  +
  +fsl_rc_t readallfiles(buf_t *buffer)
  +{
  +    fsl_rc_t rc;
  +    DIR *dp;
  +    struct dirent *de;
  +    char *filename = NULL;
  +
  +    if (buffer == NULL)
  +        CU(FSL_ERR_ARG);
  +
  +    if ((dp = opendir(FSL_CFGDIR)) == NULL)
  +        CU(FSL_ERR_SYS);
  +
  +    while ((de = readdir(dp)) != NULL) {
  +        if (   (de->d_type == DT_REG)
  +            && (de->d_namlen >= strlen(FSL_PREFIX))
  +            && (strncmp(de->d_name, FSL_PREFIX, strlen(FSL_PREFIX)) == 0)
  +              ) {
  +            if ((filename = (char *)malloc(strlen(FSL_CFGDIR) + 1 + de->d_namlen + 1)) == NULL)
  +                CU(FSL_ERR_MEM);
  +            filename[0] = '\0';
  +            strcat(filename, FSL_CFGDIR);
  +            strcat(filename, "/");
  +            strncat(filename, de->d_name, de->d_namlen);
  +            (void /*FIXME*/)appendfiletobuffer(buffer, filename);
  +            free(filename);
  +            filename = NULL;
  +        }
  +    }
  +    (void)closedir(dp);
  +    CU(FSL_OK);
  +CUS:
  +    if (filename != NULL)
  +        free(filename);
  +    return rc;
  +}
  +
  +fsl_rc_t appendfiletobuffer(buf_t *buffer, const char *filename)
  +{
  +    fsl_rc_t rc;
  +    int fd = -1;
  +    int filesize;
  +    int fileread;
  +    int bufferneed;
  +
  +    if (filename == NULL || buffer == NULL)
  +        CU(FSL_ERR_ARG);
  +
  +    if ((fd = open(filename, O_RDONLY)) == -1)
  +        CU(FSL_ERR_SYS);
  +
  +    if ((filesize = (int)lseek(fd, 0, SEEK_END)) == -1)
  +        CU(FSL_ERR_SYS);
  +
  +    bufferneed = buffer->used + filesize;
  +    if (bufferneed > buffer->size) {
  +        if (buffer->base == NULL) {
  +            if ((buffer->base = (char *)malloc(bufferneed)) == NULL)
  +                CU(FSL_ERR_MEM);
  +            buffer->size = bufferneed;
  +            buffer->used = 0;
  +        }
  +        else {
  +            if ((buffer->base = (char *)realloc(buffer->base, bufferneed)) == NULL)
  +                CU(FSL_ERR_MEM);
  +            buffer->size = bufferneed;
  +        }
  +    }
  +
  +    if (lseek(fd, 0, SEEK_SET) == -1)
  +        CU(FSL_ERR_SYS);
  +
  +    if ((fileread = (int)read(fd, buffer->base + buffer->used, (size_t)filesize)) == -1)
  +        CU(FSL_ERR_SYS);
  +
  +    if (fileread != filesize)
  +        CU(FSL_ERR_USE);
  +
  +    buffer->used += filesize;
  +    CU(FSL_OK);
  +CUS:
  +    if (fd != -1)
  +        close(fd);
  +    return rc;
  +}

From ossp-cvs-owner@ossp.org  Thu Jul 11 19:23:26 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0FDD6767BE; Thu, 11 Jul 2002 19:23:26 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool ChangeLog README THANKS VERSION configure....
Message-Id: <20020711172326.0FDD6767BE@mail.ossp.org>
Date: Thu, 11 Jul 2002 19:23:26 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Jul-2002 19:23:25
  Branch: HEAD                             Handle: 2002071118232401

  Modified files:
    ossp-pkg/shtool         ChangeLog README THANKS VERSION configure.ac
                            devtool.conf devtool.func sh.rotate shtool.pod
                            shtool.spec

  Log:
    Removed not-existing --min-size option from the usage
    of "shtool rotate". The name is just --size.
    
    Submitted by: Thomas Linden <tom@izb.net>

  Summary:
    Revision    Changes     Path
    1.169       +5  -1      ossp-pkg/shtool/ChangeLog
    1.85        +1  -1      ossp-pkg/shtool/README
    1.22        +1  -0      ossp-pkg/shtool/THANKS
    1.63        +1  -1      ossp-pkg/shtool/VERSION
    1.2         +1  -3      ossp-pkg/shtool/configure.ac
    1.3         +1  -1      ossp-pkg/shtool/devtool.conf
    1.2         +3  -1      ossp-pkg/shtool/devtool.func
    1.3         +2  -2      ossp-pkg/shtool/sh.rotate
    1.59        +1  -1      ossp-pkg/shtool/shtool.pod
    1.15        +1  -1      ossp-pkg/shtool/shtool.spec
  ____________________________________________________________________________

  Index: ossp-pkg/shtool/ChangeLog
  ============================================================
  $ cvs diff -u -r1.168 -r1.169 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	23 Feb 2002 09:18:03 -0000	1.168
  +++ ossp-pkg/shtool/ChangeLog	11 Jul 2002 17:23:24 -0000	1.169
  @@ -9,7 +9,11 @@
   
    ChangeLog
   
  - Changes between 1.6.0 and 1.6.1 (01-Feb-2002 to 23-Feb-2002):
  + Changes between 1.6.0 and 1.6.1 (01-Feb-2002 to 11-Jul-2002):
  +
  +   *) Removed not-existing --min-size option from the usage
  +      of "shtool rotate". The name is just --size.
  +      [Thomas Linden <tom@izb.net>]
   
      *) Port to POSIX 1003.1-2001 (SUSv3) standard:
         sh.echo, sh.version: "head -1" -> "sed -e 'q'"
  Index: ossp-pkg/shtool/README
  ============================================================
  $ cvs diff -u -r1.84 -r1.85 README
  --- ossp-pkg/shtool/README	1 Feb 2002 14:44:06 -0000	1.84
  +++ ossp-pkg/shtool/README	11 Jul 2002 17:23:24 -0000	1.85
  @@ -10,7 +10,7 @@
     http://www.gnu.org/software/shtool/
     ftp://ftp.gnu.org/gnu/shtool/
   
  -  Version 1.6.0 (01-Feb-2002)
  +  Version 1.6.1 (23-Feb-2002)
   
     The GNU shtool program is a compilation of small but very stable and
     portable shell scripts into a single shell tool. All ingredients
  Index: ossp-pkg/shtool/THANKS
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 THANKS
  --- ossp-pkg/shtool/THANKS	2 Feb 2002 18:47:29 -0000	1.21
  +++ ossp-pkg/shtool/THANKS	11 Jul 2002 17:23:24 -0000	1.22
  @@ -19,6 +19,7 @@
     o Lars Hecking             <lhecking@nmrc.ucc.ie>
     o Jim Jagielski            <jim@jaguNET.com>
     o Martin Kraemer           <Martin.Kraemer@MchP.Siemens.De>
  +  o Thomas Linden            <tom@izb.net>
     o Liones                   <liones@myrealbox.com>
     o Markus F.X.J. Oberhumer  <markus.oberhumer@jk.uni-linz.ac.at>
     o Benjamin Saller          <case@appliedtheory.com>
  Index: ossp-pkg/shtool/VERSION
  ============================================================
  $ cvs diff -u -r1.62 -r1.63 VERSION
  --- ossp-pkg/shtool/VERSION	1 Feb 2002 14:44:06 -0000	1.62
  +++ ossp-pkg/shtool/VERSION	11 Jul 2002 17:23:24 -0000	1.63
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for GNU shtool (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is GNU shtool, Version 1.6.0 (01-Feb-2002)
  +  This is GNU shtool, Version 1.6.1 (23-Feb-2002)
   
  Index: ossp-pkg/shtool/configure.ac
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 configure.ac
  --- ossp-pkg/shtool/configure.ac	1 Feb 2002 14:51:21 -0000	1.1
  +++ ossp-pkg/shtool/configure.ac	11 Jul 2002 17:23:24 -0000	1.2
  @@ -18,16 +18,14 @@
   dnl ##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
   dnl ##
   
  -AC_PREREQ(2.52)
  +AC_PREREQ(2.53)
   AC_REVISION($1.0$)
   AC_INIT(README)
   
  -AC_DIVERT_PUSH(NOTICE)
   SHTOOL_VERSION_STR="`sh sh.version -l txt -d long VERSION`"
   sh sh.echo -e "Configuring %BGNU shtool%b (Portable Shell Tool), version %B${SHTOOL_VERSION_STR}%b"
   echo "Copyright (c) 1994-2002 Ralf S. Engelschall <rse@engelschall.com>"
   AC_SUBST(SHTOOL_VERSION_STR)
  -AC_DIVERT_POP()
   
   AC_PREFIX_DEFAULT(/usr/local)
   AC_SET_MAKE
  Index: ossp-pkg/shtool/devtool.conf
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.conf
  --- ossp-pkg/shtool/devtool.conf	1 Feb 2002 15:00:09 -0000	1.2
  +++ ossp-pkg/shtool/devtool.conf	11 Jul 2002 17:23:25 -0000	1.3
  @@ -3,7 +3,7 @@
   ##
   
   %autogen
  -    @autogen autoconf 2.52 "2.5.*"
  +    @autogen autoconf 2.53 "2.5.*"
   
   %autoclean
       @autoclean autoconf
  Index: ossp-pkg/shtool/devtool.func
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.func
  --- ossp-pkg/shtool/devtool.func	1 Feb 2002 14:58:04 -0000	1.1
  +++ ossp-pkg/shtool/devtool.func	11 Jul 2002 17:23:25 -0000	1.2
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
   ##
   
   devtool_require () {
  @@ -32,6 +32,8 @@
               autoconf_version=`devtool_require autoconf --version 4 "$1" "$2"`
               echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
               autoconf
  +            autoheader 2>&1 | grep -v "is unchanged"
  +            rm -rf autom4te.cache >/dev/null 2>&1
               ;;
           libtool )
               libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
  Index: ossp-pkg/shtool/sh.rotate
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 sh.rotate
  --- ossp-pkg/shtool/sh.rotate	31 Dec 2001 15:06:04 -0000	1.2
  +++ ossp-pkg/shtool/sh.rotate	11 Jul 2002 17:23:25 -0000	1.3
  @@ -20,10 +20,10 @@
   ##
   
   str_tool="rotate"
  -str_usage="[-v|--verbose] [-t|--trace] [-f|--force] [-n|--num-files <count>] [-s|--min-size <size>] [-c|--copy] [-r|--remove] [-a|--archive-dir <dir>] [-z|--compress [<tool>:]<level>] [-b|--background] [-d|--delay] [-p|--pad <len>] [-o|--owner <owner>] [-g|--group <group>] [-m|--mode <mode>] [-M|--migrate <cmd>] [-P|--prolog <cmd>] [-E|--epilog <cmd>] <file> [...]"
  +str_usage="[-v|--verbose] [-t|--trace] [-f|--force] [-n|--num-files <count>] [-s|--size <size>] [-c|--copy] [-r|--remove] [-a|--archive-dir <dir>] [-z|--compress [<tool>:]<level>] [-b|--background] [-d|--delay] [-p|--pad <len>] [-o|--owner <owner>] [-g|--group <group>] [-m|--mode <mode>] [-M|--migrate <cmd>] [-P|--prolog <cmd>] [-E|--epilog <cmd>] <file> [...]"
   arg_spec="1+"
   opt_spec="v.t.f.n:s:c.r.a:z:b.d.p:o:g:m:M:P:E:"
  -opt_alias="v:verbose,t:trace,f:force,n:num-files,s:size,m:min-size,c:copy,r:remove,a:archive-dir,z:compress,b:background,d:delay,p:pad,o:owner,g:group,m:mode,M:migrate,P:prolog,E:epilog"
  +opt_alias="v:verbose,t:trace,f:force,n:num-files,s:size,c:copy,r:remove,a:archive-dir,z:compress,b:background,d:delay,p:pad,o:owner,g:group,m:mode,M:migrate,P:prolog,E:epilog"
   opt_v=no
   opt_t=no
   opt_f=no
  Index: ossp-pkg/shtool/shtool.pod
  ============================================================
  $ cvs diff -u -r1.58 -r1.59 shtool.pod
  --- ossp-pkg/shtool/shtool.pod	2 Feb 2002 18:47:29 -0000	1.58
  +++ ossp-pkg/shtool/shtool.pod	11 Jul 2002 17:23:25 -0000	1.59
  @@ -530,7 +530,7 @@
         shtool fixperm -v *
         ...
   
  -=item B<rotate> [B<-v>|B<--verbose>] [B<-t>|B<--trace>] [B<-f>|B<--force>] [B<-n>|B<--num-files> I<count>] [B<-s>|B<--min-size> I<size>] [B<-c>|B<--copy>] [B<-r>|B<--remove>] [B<-a>|B<--archive-dir> I<dir>] [B<-z>|B<--compress> [I<tool>:]I<level>] [B<-b>|B<--background>] [B<-d>|B<--delay>] [B<-p>|B<--pad> I<len>] [B<-o>|B<--owner> I<owner>] [B<-g>|B<--group> I<group>] [B<-m>|B<--mode> I<mode>] [B<-M>|B<--migrate> I<cmd>] [B<-P>|B<--prolog> I<cmd>] [B<-E>|B<--epilog> I<cmd>] I<file> [...]
  +=item B<rotate> [B<-v>|B<--verbose>] [B<-t>|B<--trace>] [B<-f>|B<--force>] [B<-n>|B<--num-files> I<count>] [B<-s>|B<--size> I<size>] [B<-c>|B<--copy>] [B<-r>|B<--remove>] [B<-a>|B<--archive-dir> I<dir>] [B<-z>|B<--compress> [I<tool>:]I<level>] [B<-b>|B<--background>] [B<-d>|B<--delay>] [B<-p>|B<--pad> I<len>] [B<-o>|B<--owner> I<owner>] [B<-g>|B<--group> I<group>] [B<-m>|B<--mode> I<mode>] [B<-M>|B<--migrate> I<cmd>] [B<-P>|B<--prolog> I<cmd>] [B<-E>|B<--epilog> I<cmd>] I<file> [...]
   
   This command rotates a logfile I<file> by subsequently creating up to
   I<count> (optionally compressed) archive files of it. Archive files are
  Index: ossp-pkg/shtool/shtool.spec
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 shtool.spec
  --- ossp-pkg/shtool/shtool.spec	1 Feb 2002 14:51:05 -0000	1.14
  +++ ossp-pkg/shtool/shtool.spec	11 Jul 2002 17:23:25 -0000	1.15
  @@ -30,7 +30,7 @@
   %define prefix /usr/local
   %endif
   
  -%define ver 1.6.0
  +%define ver 1.6.1
   %define rel 0
   
   Name:       shtool

From ossp-cvs-owner@ossp.org  Fri Jul 12 19:26:25 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EB461769FA; Fri, 12 Jul 2002 19:26:23 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl Makefile.in configure.ac devtool.conf
Message-Id: <20020712172623.EB461769FA@mail.ossp.org>
Date: Fri, 12 Jul 2002 19:26:23 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Jul-2002 19:26:23
  Branch: HEAD                             Handle: 2002071218262300

  Modified files:
    ossp-pkg/fsl            Makefile.in configure.ac devtool.conf

  Log:
    add OSSP pcre to build environment

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/fsl/Makefile.in
    1.3         +11 -1      ossp-pkg/fsl/configure.ac
    1.2         +3  -3      ossp-pkg/fsl/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/Makefile.in
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 Makefile.in
  --- ossp-pkg/fsl/Makefile.in	9 Jul 2002 09:42:09 -0000	1.1
  +++ ossp-pkg/fsl/Makefile.in	12 Jul 2002 17:26:23 -0000	1.2
  @@ -57,7 +57,7 @@
   TST_NAME    = fsl_test
   TST_OBJS    = fsl_test.o
   
  -SUBDIRS     = @SUBDIR_L2@ @SUBDIR_CFG@
  +SUBDIRS     = @SUBDIR_L2@ @SUBDIR_CFG@ @SUBDIR_PCRE@
   
   .SUFFIXES:
   .SUFFIXES: .c .o .lo
  Index: ossp-pkg/fsl/configure.ac
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 configure.ac
  --- ossp-pkg/fsl/configure.ac	10 Jul 2002 09:08:51 -0000	1.2
  +++ ossp-pkg/fsl/configure.ac	12 Jul 2002 17:26:23 -0000	1.3
  @@ -67,9 +67,19 @@
                    LIB_DEPS="$LIB_DEPS lib_cfg/*.lo"])
   AC_SUBST(SUBDIR_CFG)
   
  +dnl #   check for OSSP pcre library
  +AC_CHECK_EXTLIB([OSSP pcre], 
  +                pcre, pcre_compile, pcre.h, 
  +                [SUBDIR_PCRE=""], 
  +                [SUBDIR_PCRE="lib_pcre"
  +                 CPPFLAGS="$CPPFLAGS -Ilib_pcre"
  +                 CFLAGS="$CFLAGS -Ilib_pcre"
  +                 LIB_DEPS="$LIB_DEPS lib_pcre/*.lo"])
  +AC_SUBST(SUBDIR_PCRE)
  +
   dnl #   post-processing for subdirs
   AC_SUBST(LIB_DEPS)
  -AC_CONFIG_SUBDIRS([$SUBDIR_L2 $SUBDIR_CFG])
  +AC_CONFIG_SUBDIRS([$SUBDIR_L2 $SUBDIR_CFG $SUBDIR_PCRE])
   
   AC_MSG_CHECKING(for configuration directory)
   AC_ARG_WITH(cfgdir,dnl
  Index: ossp-pkg/fsl/devtool.conf
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.conf
  --- ossp-pkg/fsl/devtool.conf	9 Jul 2002 09:42:09 -0000	1.1
  +++ ossp-pkg/fsl/devtool.conf	12 Jul 2002 17:26:23 -0000	1.2
  @@ -3,7 +3,7 @@
   ##
   
   %checkout
  -    for name in l2 cfg; do
  +    for name in l2 cfg pcre; do
           echo "===> lib_${name} (cvs co)"
           cvs co -d lib_${name} ${name}
           echo "<=== lib_${name}"
  @@ -14,7 +14,7 @@
       @autogen libtool  1.4.2 "1.4*"
       @autogen autoconf 2.53  "2.5[3-9]*"
   
  -    for name in l2 cfg; do
  +    for name in l2 cfg pcre; do
           echo "===> lib_${name} (devtool autogen)"
           (cd lib_${name} && ./devtool autogen)
           echo "<=== lib_${name}"
  @@ -25,7 +25,7 @@
       @autoclean libtool
       @autoclean autoconf
   
  -    for name in l2 cfg; do
  +    for name in l2 cfg pcre; do
           echo "===> lib_${name} (devtool autogen)"
           (cd lib_${name} && ./devtool autoclean)
           echo "<=== lib_${name}"

From ossp-cvs-owner@ossp.org  Fri Jul 12 21:59:34 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7A1E4769F9; Fri, 12 Jul 2002 21:59:34 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg cfg.h cfg.pod cfg_node.c cfg_node.h
Message-Id: <20020712195934.7A1E4769F9@mail.ossp.org>
Date: Fri, 12 Jul 2002 21:59:34 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Jul-2002 21:59:34
  Branch: HEAD                             Handle: 2002071220593300

  Modified files:
    ossp-pkg/cfg            cfg.h cfg.pod cfg_node.c cfg_node.h

  Log:
    just flush work of this evening

  Summary:
    Revision    Changes     Path
    1.8         +4  -5      ossp-pkg/cfg/cfg.h
    1.3         +10 -0      ossp-pkg/cfg/cfg.pod
    1.8         +173 -73    ossp-pkg/cfg/cfg_node.c
    1.5         +2  -2      ossp-pkg/cfg/cfg_node.h
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/cfg.h
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 cfg.h
  --- ossp-pkg/cfg/cfg.h	10 Jul 2002 14:46:28 -0000	1.7
  +++ ossp-pkg/cfg/cfg.h	12 Jul 2002 19:59:33 -0000	1.8
  @@ -72,11 +72,11 @@
       CFG_NODE_ATTR_CHILDS,     /* RO: number of child nodes */
       CFG_NODE_ATTR_NODES,      /* RO: number of total nodes (recursive) */
       CFG_NODE_ATTR_DEPTH,      /* RO: number of nodes back to root node */
  +    CFG_NODE_ATTR_SRCNAME,    /* RW: pointer to the source name */
  +    CFG_NODE_ATTR_SRCPOS,     /* RW: position offset into source */
       CFG_NODE_ATTR_TYPE,       /* RW: type of node */
       CFG_NODE_ATTR_TOKEN,      /* RW: pointer to the node token string */
  -    CFG_NODE_ATTR_DATA,       /* RW: pointer to the node annotation data */
  -    CFG_NODE_ATTR_SRCNAME,    /* RW: pointer to the source name */
  -    CFG_NODE_ATTR_SRCPOS      /* RW: position offset into source */
  +    CFG_NODE_ATTR_DATA        /* RW: pointer to the node annotation data */
   } cfg_node_attr_t;
   
   /* list of data types */
  @@ -135,8 +135,7 @@
   
   /* node traversing/locating */
   cfg_rc_t   cfg_node_root   (cfg_t  *cfg, cfg_node_t **node);
  -cfg_rc_t   cfg_node_goto   (cfg_t  *cfg, cfg_node_t  *node, const char *spec, cfg_node_t **node2);
  -cfg_rc_t   cfg_node_select (cfg_t  *cfg, cfg_node_t  *node, const char *spec, cfg_node_t **node2);
  +cfg_rc_t   cfg_node_select (cfg_t  *cfg, cfg_node_t  *node, cfg_node_t **node2, const char *spec, ...);
   cfg_rc_t   cfg_node_find   (cfg_t  *cfg, cfg_node_t  *node, cfg_rc_t (*cb_fct_cmp)(cfg_t *, cfg_node_t *, void *), void *cb_ctx_cmp, cfg_node_t **cont);
   cfg_rc_t   cfg_node_apply  (cfg_t  *cfg, cfg_node_t  *node, cfg_rc_t (*cb_fct_cmp)(cfg_t *, cfg_node_t *, void *), void *cb_ctx_cmp, cfg_rc_t (*cb_fct_cb)(cfg_t *, cfg_node_t *, void *), void *cb_ctx_cb);
   cfg_rc_t   cfg_node_cmp    (cfg_t  *cfg, cfg_node_t  *node, void *token);
  Index: ossp-pkg/cfg/cfg.pod
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 cfg.pod
  --- ossp-pkg/cfg/cfg.pod	6 Jul 2002 12:23:43 -0000	1.2
  +++ ossp-pkg/cfg/cfg.pod	12 Jul 2002 19:59:33 -0000	1.3
  @@ -165,6 +165,16 @@
   
   =head1 APPLICATION PROGRAMMING INTERFACE (API)
   
  +spec:
  +
  + parent  ..
  + lbroth  ->
  + rbroth  <-
  + child[1] 
  + child[L]
  +
  + virtualhost[2].directory
  +
   =head1 HISTORY
   
   B<OSSP cfg> was implemented in lots of small steps over a very
  Index: ossp-pkg/cfg/cfg_node.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 cfg_node.c
  --- ossp-pkg/cfg/cfg_node.c	10 Jul 2002 19:26:32 -0000	1.7
  +++ ossp-pkg/cfg/cfg_node.c	12 Jul 2002 19:59:33 -0000	1.8
  @@ -48,10 +48,10 @@
       n->lbroth   = NULL;
       n->rbroth   = NULL;
       n->child1   = NULL;
  +    n->srcname  = NULL;
  +    n->srcpos   = 0;
       n->type     = CFG_NODE_TYPE_ARG;
       n->token    = NULL;
  -    n->name     = NULL;
  -    n->offset   = 0;
       cfg_data_init(&n->data);
       *node = n;
       return CFG_OK;
  @@ -63,8 +63,8 @@
           return CFG_ERR_ARG;
       if (node->token != NULL)
           free(node->token);
  -    if (node->name != NULL)
  -        free(node->name);
  +    if (node->srcname != NULL)
  +        free(node->srcname);
       free(node);
       return CFG_OK;
   }
  @@ -81,16 +81,10 @@
       n->lbroth   = node->lbroth;
       n->rbroth   = node->rbroth;
       n->child1   = node->child1;
  +    n->srcname  = (node->srcname != NULL ? strdup(node->srcname) : NULL);
  +    n->srcpos   = node->srcpos;
       n->type     = node->type;
  -    if (node->token != NULL)
  -        n->token = strdup(node->token);
  -    else
  -        n->token = NULL;
  -    if (node->name != NULL)
  -        n->name = strdup(node->name);
  -    else
  -        n->name = NULL;
  -    n->offset   = node->offset;
  +    n->token    = (node->token != NULL ? strdup(node->token) : NULL);
       cfg_data_copy(&node->data, &n->data);
       *node2 = n;
       return CFG_OK;
  @@ -104,14 +98,13 @@
           return CFG_ERR_ARG;
       va_start(ap, attr);
       switch (attr) {
  -        case CFG_NODE_ATTR_TYPE: {
  -            node->type = (cfg_node_type_t)va_arg(ap, cfg_node_type_t);
  -            break;
  -        }
           case CFG_NODE_ATTR_PARENT: {
               node->parent = (cfg_node_t *)va_arg(ap, cfg_node_t *);
               break;
           }
  +        case CFG_NODE_ATTR_LBROTH: {
  +            return CFG_ERR_USE;
  +        }
           case CFG_NODE_ATTR_RBROTH: {
               node->rbroth = (cfg_node_t *)va_arg(ap, cfg_node_t *);
               break;
  @@ -120,8 +113,40 @@
               node->child1 = (cfg_node_t *)va_arg(ap, cfg_node_t *);
               break;
           }
  +        case CFG_NODE_ATTR_CHILDL: {
  +            return CFG_ERR_USE;
  +        }
  +        case CFG_NODE_ATTR_CHILDS: {
  +            return CFG_ERR_USE;
  +        }
  +        case CFG_NODE_ATTR_NODES: {
  +            return CFG_ERR_USE;
  +        }
  +        case CFG_NODE_ATTR_DEPTH: {
  +            return CFG_ERR_USE;
  +        }
  +        case CFG_NODE_ATTR_SRCNAME: {
  +            if (node->srcname != NULL)
  +                free(node->srcname);
  +            node->srcname = (char *)va_arg(ap, char *);
  +            if (node->srcname != NULL)
  +                node->srcname = strdup(node->srcname);
  +            break;
  +        }
  +        case CFG_NODE_ATTR_SRCPOS: {
  +            node->srcpos = (int)va_arg(ap, int);
  +            break;
  +        }
  +        case CFG_NODE_ATTR_TYPE: {
  +            node->type = (cfg_node_type_t)va_arg(ap, cfg_node_type_t);
  +            break;
  +        }
           case CFG_NODE_ATTR_TOKEN: {
  +            if (node->token != NULL)
  +                free(node->token);
               node->token = (char *)va_arg(ap, char *);
  +            if (node->token != NULL)
  +                node->token = strdup(node->token);
               break;
           }
           case CFG_NODE_ATTR_DATA: {
  @@ -134,6 +159,22 @@
       return CFG_OK;
   }
   
  +static int cfg_node_get_nodes(cfg_node_t *node)
  +{
  +    int n;
  +
  +    n = 0;
  +    if (node != NULL) {
  +        n++;
  +        if ((node = node->child1) != NULL) {
  +            n += cfg_node_get_nodes(node);
  +            if ((node = node->rbroth) != NULL)
  +                n += cfg_node_get_nodes(node);
  +        }
  +    }
  +    return n;
  +}
  +
   cfg_rc_t cfg_node_get(cfg_t *cfg, cfg_node_t *node, cfg_node_attr_t attr, ...)
   {
       va_list ap;
  @@ -142,33 +183,117 @@
           return CFG_ERR_ARG;
       va_start(ap, attr);
       switch (attr) {
  -        case CFG_NODE_ATTR_TYPE: {
  -            cfg_node_type_t *type = (cfg_node_type_t *)va_arg(ap, void *);
  -            *type = node->type;
  -            break;
  -        }
           case CFG_NODE_ATTR_PARENT: {
               cfg_node_t **n = (cfg_node_t **)va_arg(ap, void *);
  +            if (n == NULL)
  +                return CFG_ERR_ARG;
               *n = node->parent;
               break;
           }
  +        case CFG_NODE_ATTR_LBROTH: {
  +            cfg_node_t **np = (cfg_node_t **)va_arg(ap, void *);
  +            cfg_node_t *n;
  +            if (np == NULL)
  +                return CFG_ERR_ARG;
  +            *np = NULL;
  +            if ((n = node->parent) != NULL) {
  +                if ((n = n->child1) != NULL) {
  +                    while (n->rbroth != node && n->rbroth != NULL)
  +                        n = n->rbroth;
  +                    if (n->rbroth == node)
  +                        *np = n;
  +                }
  +            }
  +            break;
  +        }
           case CFG_NODE_ATTR_RBROTH: {
               cfg_node_t **n = (cfg_node_t **)va_arg(ap, void *);
  +            if (n == NULL)
  +                return CFG_ERR_ARG;
               *n = node->rbroth;
               break;
           }
           case CFG_NODE_ATTR_CHILD1: {
               cfg_node_t **n = (cfg_node_t **)va_arg(ap, void *);
  +            if (n == NULL)
  +                return CFG_ERR_ARG;
               *n = node->child1;
               break;
           }
  +        case CFG_NODE_ATTR_CHILDL: {
  +            cfg_node_t **n = (cfg_node_t **)va_arg(ap, void *);
  +            if (n == NULL)
  +                return CFG_ERR_ARG;
  +            if ((*n = node->child1) != NULL)
  +                while ((*n)->rbroth != NULL)
  +                    *n = (*n)->rbroth;
  +            break;
  +        }
  +        case CFG_NODE_ATTR_CHILDS: {
  +            int *c = (int *)va_arg(ap, int *);
  +            cfg_node_t *n;
  +            if (c == NULL)
  +                return CFG_ERR_ARG;
  +            *c = 0;
  +            if ((n = node->child1) != NULL) {
  +                (*c)++;
  +                while (n->rbroth != NULL) {
  +                    n = n->rbroth;
  +                    (*c)++;
  +                }
  +            }
  +            break;
  +        }
  +        case CFG_NODE_ATTR_NODES: {
  +            int *k = (int *)va_arg(ap, int *);
  +            if (k == NULL)
  +                return CFG_ERR_ARG;
  +            *k = cfg_node_get_nodes(node);
  +            break;
  +        }
  +        case CFG_NODE_ATTR_DEPTH: {
  +            int *k = (int *)va_arg(ap, int *);
  +            cfg_node_t *n;
  +            if (k == NULL)
  +                return CFG_ERR_ARG;
  +            *k = 0; 
  +            n = node;
  +            while ((n = n->parent) != NULL)
  +                (*k)++;
  +            break;
  +        }
  +        case CFG_NODE_ATTR_SRCNAME: {
  +            char **name = (char **)va_arg(ap, char **);
  +            if (name == NULL)
  +                return CFG_ERR_ARG;
  +            *name = node->srcname;
  +            break;
  +        }
  +        case CFG_NODE_ATTR_SRCPOS: {
  +            int *pos = (int *)va_arg(ap, int *);
  +            if (pos == NULL)
  +                return CFG_ERR_ARG;
  +            *pos = node->srcpos;
  +            break;
  +        }
  +        case CFG_NODE_ATTR_TYPE: {
  +            cfg_node_type_t *type = (cfg_node_type_t *)va_arg(ap, void *);
  +            if (type == NULL)
  +                return CFG_ERR_ARG;
  +            *type = node->type;
  +            break;
  +        }
           case CFG_NODE_ATTR_TOKEN: {
               char **token = (char **)va_arg(ap, char **);
  +            if (token == NULL)
  +                return CFG_ERR_ARG;
               *token = node->token;
               break;
           }
           case CFG_NODE_ATTR_DATA: {
               cfg_data_t **data = (cfg_data_t **)va_arg(ap, void *);
  +            if (data == NULL)
  +                return CFG_ERR_ARG;
               *data = &(node->data);
               break;
           }
  @@ -187,62 +312,37 @@
       return CFG_OK;
   }
   
  -cfg_rc_t cfg_node_goto(cfg_t *cfg, cfg_node_t  *node, const char *spec, cfg_node_t **node2)
  +cfg_rc_t cfg_node_select(cfg_t *cfg, cfg_node_t *node, cfg_node_t **node2, const char *fmt, ...)
   {
  -
  -    if (cfg == NULL || node == NULL || spec == NULL || node2 == NULL)
  -        return CFG_ERR_ARG;
  -    /* FIXME */
   #if 0
       cfg_node_t *n;
  -    *node2 = NULL;
  -    switch (id) {
  -        case CFG_NODE_GOTO_PARENT: {
  -            *node2 = node->parent;
  -            break;
  -        }
  -        case CFG_NODE_GOTO_LBROTH: {
  -            if ((n = node->parent) != NULL) {
  -                if ((n = n->child1) != NULL) {
  -                    while (n->rbroth != node && n->rbroth != NULL)
  -                        n = n->rbroth;
  -                    if (n->rbroth == node)
  -                        *node2 = n;
  -                }
  -            }
  -            break;
  -        }
  -        case CFG_NODE_GOTO_RBROTH: {
  -            *node2 = node->rbroth; 
  -            break;
  -        }
  -        case CFG_NODE_GOTO_CHILD1: { 
  -            *node2 = node->child1; 
  -            break;
  -        }
  -        case CFG_NODE_GOTO_CHILDL: {
  -            if ((n = node->child1) != NULL) {
  -                while (n->rbroth != NULL)
  -                    n = n->rbroth;
  -                *node2 = n;
  -            }
  -            break;
  -        }
  +    va_list ap;
  +    char *cpB;
  +    char *cpE;
  +    char *spec;
  +
  +    if (cfg == NULL || node == NULL || node2 == NULL || spec == NULL)
  +        return CFG_ERR_ARG;
  +
  +    /* on-the-fly create or just take over specification string */
  +    va_start(ap, fmt);
  +    spec = l2_util_vasprintf(fmt, ap);
  +    va_end(ap);
  +
  +    /* enter the parsing loop */
  +    cpE = spec;
  +    while (*cpE != '\0') {
  +        /* determine begin of parameter name */
  +        cpB = cpE;
  +        if ((n = strspn(cpB, " \t\r\n")) > 0)
  +            cpB += n;
  +
  +        /* determine end of parameter name */
  +        cpE = cpB;
  +        if ((n = strspn(cpB, " \t\r\n")) > 0)
  +            cpB += n;
       }
  -    if (*node2 == NULL)
  -        return CFG_ERR_GOT;
   #endif
  -    return CFG_OK;
  -}
  -
  -cfg_rc_t 
  -cfg_node_select(
  -    cfg_t *cfg, 
  -    cfg_node_t *node, 
  -    const char *dotpath, 
  -    cfg_node_t **node2)
  -{
  -    /* FIXME */
       return CFG_OK;
   }
   
  Index: ossp-pkg/cfg/cfg_node.h
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 cfg_node.h
  --- ossp-pkg/cfg/cfg_node.h	10 Jul 2002 12:00:23 -0000	1.4
  +++ ossp-pkg/cfg/cfg_node.h	12 Jul 2002 19:59:33 -0000	1.5
  @@ -49,8 +49,8 @@
       cfg_data_t      data;    /* annotation data */ 
   
       /* node source location */
  -    char           *name;    /* name of original source configuration */
  -    int             offset;  /* offset into original source configuration */
  +    char           *srcname; /* name of original source configuration */
  +    int             srcpos;  /* offset into original source configuration */
   };
   
   #endif /* __CFG_NODE_H__ */

From ossp-cvs-owner@ossp.org  Sat Jul 13 20:13:59 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F2C9D767E6; Sat, 13 Jul 2002 20:13:58 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool ChangeLog NEWS README VERSION
Message-Id: <20020713181358.F2C9D767E6@mail.ossp.org>
Date: Sat, 13 Jul 2002 20:13:58 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Jul-2002 20:13:58
  Branch: HEAD                             Handle: 2002071319135800

  Modified files:
    ossp-pkg/shtool         ChangeLog NEWS README VERSION

  Log:
    update for release

  Summary:
    Revision    Changes     Path
    1.170       +2  -2      ossp-pkg/shtool/ChangeLog
    1.4         +1  -1      ossp-pkg/shtool/NEWS
    1.86        +1  -1      ossp-pkg/shtool/README
    1.64        +1  -1      ossp-pkg/shtool/VERSION
  ____________________________________________________________________________

  Index: ossp-pkg/shtool/ChangeLog
  ============================================================
  $ cvs diff -u -r1.169 -r1.170 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	11 Jul 2002 17:23:24 -0000	1.169
  +++ ossp-pkg/shtool/ChangeLog	13 Jul 2002 18:13:58 -0000	1.170
  @@ -9,7 +9,7 @@
   
    ChangeLog
   
  - Changes between 1.6.0 and 1.6.1 (01-Feb-2002 to 11-Jul-2002):
  + Changes between 1.6.0 and 1.6.1 (01-Feb-2002 to 12-Jul-2002):
   
      *) Removed not-existing --min-size option from the usage
         of "shtool rotate". The name is just --size.
  @@ -32,7 +32,7 @@
      *) Fixed contained RPM specification (shtool.spec)
         [Ralf S. Engelschall]
   
  -   *) Added new command `shtool rotate `[-v|--verbose] [-t|--trace]
  +   *) Added new command `shtool rotate [-v|--verbose] [-t|--trace]
         [-f|--force] [-n|--num-files <count>] [-s|--min-size <size>]
         [-c|--copy] [-r|--remove] [-a|--archive-dir <dir>] [-z|--compress
         [<tool>:]<level>] [-b|--background] [-d|--delay] [-p|--pad <len>]
  Index: ossp-pkg/shtool/NEWS
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 NEWS
  --- ossp-pkg/shtool/NEWS	1 Feb 2002 15:01:12 -0000	1.3
  +++ ossp-pkg/shtool/NEWS	13 Jul 2002 18:13:58 -0000	1.4
  @@ -9,7 +9,7 @@
     This is a list of user-visible and/or major changes to GNU shtool.
     For more details please have a look at the ChangeLog file.
   
  -  Changes between 1.5 and 1.6 (14-Jun-2001 to 01-Feb-2002)
  +  Changes between 1.5 and 1.6 (14-Jun-2001 to 12-Jul-2002)
   
      *) Added new `shtool subst' command.
      *) Added new `shtool rotate' command.
  Index: ossp-pkg/shtool/README
  ============================================================
  $ cvs diff -u -r1.85 -r1.86 README
  --- ossp-pkg/shtool/README	11 Jul 2002 17:23:24 -0000	1.85
  +++ ossp-pkg/shtool/README	13 Jul 2002 18:13:58 -0000	1.86
  @@ -10,7 +10,7 @@
     http://www.gnu.org/software/shtool/
     ftp://ftp.gnu.org/gnu/shtool/
   
  -  Version 1.6.1 (23-Feb-2002)
  +  Version 1.6.1 (12-Jul-2002)
   
     The GNU shtool program is a compilation of small but very stable and
     portable shell scripts into a single shell tool. All ingredients
  Index: ossp-pkg/shtool/VERSION
  ============================================================
  $ cvs diff -u -r1.63 -r1.64 VERSION
  --- ossp-pkg/shtool/VERSION	11 Jul 2002 17:23:24 -0000	1.63
  +++ ossp-pkg/shtool/VERSION	13 Jul 2002 18:13:58 -0000	1.64
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for GNU shtool (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is GNU shtool, Version 1.6.1 (23-Feb-2002)
  +  This is GNU shtool, Version 1.6.1 (12-Jul-2002)
   

From ossp-cvs-owner@ossp.org  Sat Jul 13 20:29:21 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BE78A767D5; Sat, 13 Jul 2002 20:29:20 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new news.txt ossp-web/pkg/tool index.wml ossp-web...
Message-Id: <20020713182920.BE78A767D5@mail.ossp.org>
Date: Sat, 13 Jul 2002 20:29:20 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   13-Jul-2002 20:29:20
  Branch: HEAD                             Handle: 2002071319291901

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/shtool index.wml

  Log:
    update for shtool 1.6.1

  Summary:
    Revision    Changes     Path
    1.12        +2  -1      ossp-web/new/news.txt
    1.15        +1  -1      ossp-web/pkg/tool/index.wml
    1.5         +2  -2      ossp-web/pkg/tool/shtool/index.wml
  ____________________________________________________________________________

  Index: ossp-web/new/news.txt
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 news.txt
  --- ossp-web/new/news.txt	3 Jun 2002 07:05:22 -0000	1.11
  +++ ossp-web/new/news.txt	13 Jul 2002 18:29:19 -0000	1.12
  @@ -1,4 +1,5 @@
  -30-May-2002: Released L<OSSP lmtp2nntp> 1.2a5
  +12-Jul-2002: Released T<GNU shtool> 1.6.1
  +30-May-2002: Released T<OSSP lmtp2nntp> 1.2a5
   01-Apr-2002: Released L<OSSP str> 0.9.7
   30-Mar-2002: Released L<OSSP ex> 1.0.0
   15-Mar-2002: Released L<OSSP val> 0.9.0
  Index: ossp-web/pkg/tool/index.wml
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 index.wml
  --- ossp-web/pkg/tool/index.wml	7 Jul 2002 18:11:24 -0000	1.14
  +++ ossp-web/pkg/tool/index.wml	13 Jul 2002 18:29:19 -0000	1.15
  @@ -12,7 +12,7 @@
   <pkg_list>
     <pkg_item name="shtool" longname="GNU shtool" type="tool"
               desc="Portable Shell Tool"
  -		    done=100 stable="1.6.0" unstable=none>
  +		    done=100 stable="1.6.1" unstable=none>
     <pkg_item name="lmtp2nntp" longname="OSSP lmtp2nntp" type="tool"
               desc="Real-Time Mail to News Gateway"
               done=100 stable="1.1.1" unstable=1.2a5>
  Index: ossp-web/pkg/tool/shtool/index.wml
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 index.wml
  --- ossp-web/pkg/tool/shtool/index.wml	15 Feb 2002 12:07:15 -0000	1.4
  +++ ossp-web/pkg/tool/shtool/index.wml	13 Jul 2002 18:29:20 -0000	1.5
  @@ -34,7 +34,7 @@
   <h2>Status</h2>
   
   <pkg_status
  -    stable="1.6.0"   stable_date="31-Jan-2002"
  +    stable="1.6.1"   stable_date="12-Jul-2002"
       unstable="none"  unstable_date="none"
   	done=100>
   
  @@ -44,5 +44,5 @@
       url=$(FTP_ROOT_URL)/pkg/tool/shtool/
       directory=$(FTP_ROOT_DIR)/pkg/tool/shtool/
       files="shtool-*.tar.gz" 
  -	stable="shtool-1.6.0.tar.gz" unstable="none">
  +	stable="shtool-1.6.1.tar.gz" unstable="none">
   	

From ossp-cvs-owner@ossp.org  Sat Jul 13 20:52:42 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0C60E767D5; Sat, 13 Jul 2002 20:52:41 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg cfg_node.c
Message-Id: <20020713185241.0C60E767D5@mail.ossp.org>
Date: Sat, 13 Jul 2002 20:52:41 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Jul-2002 20:52:41
  Branch: HEAD                             Handle: 2002071319524100

  Modified files:
    ossp-pkg/cfg            cfg_node.c

  Log:
    implement more missing code

  Summary:
    Revision    Changes     Path
    1.9         +35 -16     ossp-pkg/cfg/cfg_node.c
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/cfg_node.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 cfg_node.c
  --- ossp-pkg/cfg/cfg_node.c	12 Jul 2002 19:59:33 -0000	1.8
  +++ ossp-pkg/cfg/cfg_node.c	13 Jul 2002 18:52:41 -0000	1.9
  @@ -354,7 +354,21 @@
       void *cb_ctx_cmp, 
       cfg_node_t **cont)
   {
  -    /* FIXME */
  +#if 0
  +    cfg_rc_t rc;
  +
  +    if (cfg == NULL)
  +        return CFG_ERR_ARG;
  +    if (node != NULL) {
  +        cb_fct(cb_ctx, node);
  +        if (node->child1 != NULL)
  +            if ((rc = cfg_node_apply(node->child1, cb_fct, cb_ctx)) != CFG_OK)
  +                return rc;
  +        if (node->rbroth != NULL)
  +            if ((rc = cfg_node_apply(node->rbroth, cb_fct, cb_ctx)) != CFG_OK)
  +                return rc;
  +    }
  +#endif
       return CFG_OK;
   }
   
  @@ -367,22 +381,20 @@
       cfg_rc_t (*cb_fct_cb)(cfg_t *, cfg_node_t *, void *),
       void *cb_ctx_cb)
   {
  -    /* FIXME */
  -#if 0
       cfg_rc_t rc;
   
  -    if (cb_fct == NULL)
  +    if (cfg == NULL || node == NULL || cb_fct_cb == NULL)
           return CFG_ERR_ARG;
  -    if (node != NULL) {
  -        cb_fct(cb_ctx, node);
  -        if (node->child1 != NULL)
  -            if ((rc = cfg_node_apply(node->child1, cb_fct, cb_ctx)) != CFG_OK)
  -                return rc;
  -        if (node->rbroth != NULL)
  -            if ((rc = cfg_node_apply(node->rbroth, cb_fct, cb_ctx)) != CFG_OK)
  -                return rc;
  -    }
  -#endif
  +    node = NULL;
  +    if (node == NULL)
  +        if ((node = cfg->root) == NULL)
  +            return CFG_OK;
  +    do {
  +        if ((rc = cb_fct_cb(cfg, node, cb_ctx_cb)) != CFG_OK)
  +            return rc;
  +    } while ((rc = cfg_node_find(cfg, node, cb_fct_cmp, cb_ctx_cmp, &node)) == CFG_OK);
  +    if (rc != CFG_OK && rc != CFG_ERR_NDE)
  +        return rc;
       return CFG_OK;
   }
   
  @@ -392,8 +404,15 @@
       cfg_node_t *node, 
       void *token)
   {
  -    /* FIXME */
  -    return CFG_OK;
  +    if (cfg == NULL || node == NULL || token == NULL)
  +        return CFG_ERR_NDE;
  +    if (node->token == NULL && token == NULL)
  +        return CFG_OK;
  +    if (node->token == NULL || token == NULL)
  +        return CFG_ERR_NDE;
  +    if (strcmp(node->token, (char *)token) == 0)
  +        return CFG_OK;
  +    return CFG_ERR_NDE;
   }
   
   cfg_rc_t cfg_node_link(cfg_t *cfg, cfg_node_t *node, cfg_node_attr_t attr, cfg_node_t *node2)

From ossp-cvs-owner@ossp.org  Sat Jul 13 22:09:42 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0A7F0769AE; Sat, 13 Jul 2002 22:09:41 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/act index.wml ossp-web/pkg/lib/adns index...
Message-Id: <20020713200941.0A7F0769AE@mail.ossp.org>
Date: Sat, 13 Jul 2002 22:09:41 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   13-Jul-2002 22:09:41
  Branch: HEAD                             Handle: 2002071321092120

  Added files:
    ossp-web/pkg/lib/err    .cvsignore index.wml
  Modified files:
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/act    index.wml
    ossp-web/pkg/lib/adns   index.wml
    ossp-web/pkg/lib/cache  index.wml
    ossp-web/pkg/lib/cfg    index.wml
    ossp-web/pkg/lib/ex     index.wml
    ossp-web/pkg/lib/hook   index.wml
    ossp-web/pkg/lib/l2     index.wml
    ossp-web/pkg/lib/mm     index.wml
    ossp-web/pkg/lib/mux    index.wml
    ossp-web/pkg/lib/path   index.wml
    ossp-web/pkg/lib/pcbe   index.wml
    ossp-web/pkg/lib/pcre   index.wml
    ossp-web/pkg/lib/popt   index.wml
    ossp-web/pkg/lib/proc   index.wml
    ossp-web/pkg/lib/pth    index.wml
    ossp-web/pkg/lib/res    index.wml
    ossp-web/pkg/lib/sa     index.wml
    ossp-web/pkg/lib/sio    index.wml
    ossp-web/pkg/lib/str    index.wml
    ossp-web/pkg/lib/val    index.wml
    ossp-web/pkg/lib/var    index.wml
    ossp-web/pkg/lib/xds    index.wml
    ossp-web/pkg/tool/devtool index.wml
    ossp-web/pkg/tool/dsotool index.wml
    ossp-web/pkg/tool/eo    index.wml
    ossp-web/pkg/tool/eperl index.wml
    ossp-web/pkg/tool/iselect index.wml
    ossp-web/pkg/tool/lmtp2nntp
                            index.wml
    ossp-web/pkg/tool/mct   index.wml
    ossp-web/pkg/tool/petidomo
                            index.wml
    ossp-web/pkg/tool/rc    index.wml
    ossp-web/pkg/tool/shiela index.wml
    ossp-web/pkg/tool/shtool index.wml
    ossp-web/pkg/tool/smake index.wml
    ossp-web/pkg/tool/sugar index.wml
    ossp-web/pkg/tool/xenia index.wml

  Log:
    add CVS references

  Summary:
    Revision    Changes     Path
    1.3         +1  -0      ossp-web/pkg/lib/act/index.wml
    1.3         +1  -0      ossp-web/pkg/lib/adns/index.wml
    1.3         +1  -0      ossp-web/pkg/lib/cache/index.wml
    1.3         +7  -2      ossp-web/pkg/lib/cfg/index.wml
    1.1         +1  -0      ossp-web/pkg/lib/err/.cvsignore
    1.1         +31 -0      ossp-web/pkg/lib/err/index.wml
    1.4         +1  -0      ossp-web/pkg/lib/ex/index.wml
    1.3         +1  -0      ossp-web/pkg/lib/hook/index.wml
    1.14        +3  -0      ossp-web/pkg/lib/index.wml
    1.3         +1  -0      ossp-web/pkg/lib/l2/index.wml
    1.4         +1  -0      ossp-web/pkg/lib/mm/index.wml
    1.3         +1  -0      ossp-web/pkg/lib/mux/index.wml
    1.3         +1  -0      ossp-web/pkg/lib/path/index.wml
    1.3         +1  -0      ossp-web/pkg/lib/pcbe/index.wml
    1.3         +1  -0      ossp-web/pkg/lib/pcre/index.wml
    1.3         +1  -0      ossp-web/pkg/lib/popt/index.wml
    1.3         +1  -0      ossp-web/pkg/lib/proc/index.wml
    1.2         +1  -0      ossp-web/pkg/lib/pth/index.wml
    1.3         +1  -0      ossp-web/pkg/lib/res/index.wml
    1.3         +1  -0      ossp-web/pkg/lib/sa/index.wml
    1.3         +1  -0      ossp-web/pkg/lib/sio/index.wml
    1.3         +1  -0      ossp-web/pkg/lib/str/index.wml
    1.4         +1  -0      ossp-web/pkg/lib/val/index.wml
    1.5         +1  -0      ossp-web/pkg/lib/var/index.wml
    1.3         +1  -0      ossp-web/pkg/lib/xds/index.wml
    1.2         +1  -0      ossp-web/pkg/tool/devtool/index.wml
    1.2         +1  -0      ossp-web/pkg/tool/dsotool/index.wml
    1.2         +1  -0      ossp-web/pkg/tool/eo/index.wml
    1.2         +1  -0      ossp-web/pkg/tool/eperl/index.wml
    1.2         +1  -0      ossp-web/pkg/tool/iselect/index.wml
    1.8         +1  -0      ossp-web/pkg/tool/lmtp2nntp/index.wml
    1.3         +1  -0      ossp-web/pkg/tool/mct/index.wml
    1.2         +1  -0      ossp-web/pkg/tool/petidomo/index.wml
    1.2         +1  -0      ossp-web/pkg/tool/rc/index.wml
    1.2         +1  -0      ossp-web/pkg/tool/shiela/index.wml
    1.6         +1  -0      ossp-web/pkg/tool/shtool/index.wml
    1.2         +1  -0      ossp-web/pkg/tool/smake/index.wml
    1.2         +1  -0      ossp-web/pkg/tool/sugar/index.wml
    1.2         +1  -0      ossp-web/pkg/tool/xenia/index.wml
  ____________________________________________________________________________

  Index: ossp-web/pkg/lib/act/index.wml
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 index.wml
  --- ossp-web/pkg/lib/act/index.wml	15 Feb 2002 13:52:10 -0000	1.2
  +++ ossp-web/pkg/lib/act/index.wml	13 Jul 2002 20:09:22 -0000	1.3
  @@ -24,6 +24,7 @@
   <h2>Source</h2>
   
   <pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/lib/act/
       url=$(FTP_ROOT_URL)/pkg/lib/act/
       directory=$(FTP_ROOT_DIR)/pkg/lib/act/
       files="act-*.tar.gz" 
  Index: ossp-web/pkg/lib/adns/index.wml
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 index.wml
  --- ossp-web/pkg/lib/adns/index.wml	15 Feb 2002 20:06:27 -0000	1.2
  +++ ossp-web/pkg/lib/adns/index.wml	13 Jul 2002 20:09:23 -0000	1.3
  @@ -32,6 +32,7 @@
   <h2>Source</h2>
   
   <pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/lib/adns/
       url=$(FTP_ROOT_URL)/pkg/lib/adns/
       directory=$(FTP_ROOT_DIR)/pkg/lib/adns/
       files="adns-*.tar.gz" 
  Index: ossp-web/pkg/lib/cache/index.wml
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 index.wml
  --- ossp-web/pkg/lib/cache/index.wml	15 Feb 2002 13:52:10 -0000	1.2
  +++ ossp-web/pkg/lib/cache/index.wml	13 Jul 2002 20:09:23 -0000	1.3
  @@ -25,6 +25,7 @@
   <h2>Source</h2>
   
   <pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/lib/cache/
       url=$(FTP_ROOT_URL)/pkg/lib/cache/
       directory=$(FTP_ROOT_DIR)/pkg/lib/cache/
       files="cache-*.tar.gz" 
  Index: ossp-web/pkg/lib/cfg/index.wml
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 index.wml
  --- ossp-web/pkg/lib/cfg/index.wml	15 Feb 2002 20:06:28 -0000	1.2
  +++ ossp-web/pkg/lib/cfg/index.wml	13 Jul 2002 20:09:24 -0000	1.3
  @@ -7,8 +7,12 @@
   
   <h2>Abstract</h2>
   
  -OSSP cfg provides parsing of C-style configuration files
  -with an unlimited recursion depth.
  +OSSP cfg is a ISO-C library for parsing arbitrary C/C++-style
  +configuration files. A configuration is sequence of directives. Each
  +directive consists of zero or more tokens. Each token can be either
  +a string or again a complete sequence. This means the configuration
  +syntax has a recursive structure and this way allows to configure
  +structures which require arbitrarily nested sections.
   
   <h2>Authors</h2>
   
  @@ -24,6 +28,7 @@
   <h2>Source</h2>
   
   <pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/lib/cfg/
       url=$(FTP_ROOT_URL)/pkg/lib/cfg/
       directory=$(FTP_ROOT_DIR)/pkg/lib/cfg/
       files="cfg-*.tar.gz" 
  Index: ossp-web/pkg/lib/err/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/lib/err/index.wml
  ============================================================
  $ cvs update -p -r1.1 index.wml
  
  #use wml::ossp area=pkg:lib subarea=err
  
  <title>OSSP err</title>
  
  <h1>Error Stacks</h1>
  
  <h2>Abstract</h2>
  
  OSSP err provides a utility library providing error stacks.
  
  <h2>Authors</h2>
  
  <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  
  <h2>Status</h2>
  
  <pkg_status
      stable="none"    stable_date="none"
      unstable="none"  unstable_date="none"
  	done=50>
  
  <h2>Source</h2>
  
  <pkg_files 
      cvs=$(CVS_ROOT_URL)/pkg/lib/err/
      url=$(FTP_ROOT_URL)/pkg/lib/err/
      directory=$(FTP_ROOT_DIR)/pkg/lib/err/
      files="err-*.tar.gz" 
  	stable="none" unstable="none">
  	
  Index: ossp-web/pkg/lib/ex/index.wml
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 index.wml
  --- ossp-web/pkg/lib/ex/index.wml	30 Mar 2002 19:18:25 -0000	1.3
  +++ ossp-web/pkg/lib/ex/index.wml	13 Jul 2002 20:09:25 -0000	1.4
  @@ -38,6 +38,7 @@
   <h2>Source</h2>
   
   <pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/lib/ex/
       url=$(FTP_ROOT_URL)/pkg/lib/ex/
       directory=$(FTP_ROOT_DIR)/pkg/lib/ex/
       files="ex-*.tar.gz" 
  Index: ossp-web/pkg/lib/hook/index.wml
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 index.wml
  --- ossp-web/pkg/lib/hook/index.wml	15 Feb 2002 20:06:28 -0000	1.2
  +++ ossp-web/pkg/lib/hook/index.wml	13 Jul 2002 20:09:25 -0000	1.3
  @@ -23,6 +23,7 @@
   <h2>Source</h2>
   
   <pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/lib/hook/
       url=$(FTP_ROOT_URL)/pkg/lib/hook/
       directory=$(FTP_ROOT_DIR)/pkg/lib/hook/
       files="hook-*.tar.gz" 
  Index: ossp-web/pkg/lib/index.wml
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 index.wml
  --- ossp-web/pkg/lib/index.wml	1 Apr 2002 09:22:39 -0000	1.13
  +++ ossp-web/pkg/lib/index.wml	13 Jul 2002 20:09:21 -0000	1.14
  @@ -77,5 +77,8 @@
     <pkg_item name="mux" longname="OSSP mux" type="lib"
               desc="Multiplexing Protocol"
   			done=15 stable=none unstable=none>
  +  <pkg_item name="err" longname="OSSP err" type="lib"
  +            desc="Error Stacks"
  +			done=15 stable=none unstable=none>
   </pkg_list>
   
  Index: ossp-web/pkg/lib/l2/index.wml
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 index.wml
  --- ossp-web/pkg/lib/l2/index.wml	15 Feb 2002 11:57:42 -0000	1.2
  +++ ossp-web/pkg/lib/l2/index.wml	13 Jul 2002 20:09:26 -0000	1.3
  @@ -44,6 +44,7 @@
   <h2>Source</h2>
   
   <pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/lib/l2/
       url=$(FTP_ROOT_URL)/pkg/lib/l2/
       directory=$(FTP_ROOT_DIR)/pkg/lib/l2/
       files="l2-*.tar.gz" 
  Index: ossp-web/pkg/lib/mm/index.wml
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 index.wml
  --- ossp-web/pkg/lib/mm/index.wml	15 Feb 2002 18:01:30 -0000	1.3
  +++ ossp-web/pkg/lib/mm/index.wml	13 Jul 2002 20:09:26 -0000	1.4
  @@ -29,6 +29,7 @@
   <h2>Source</h2>
   
   <pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/lib/mm/
       url=$(FTP_ROOT_URL)/pkg/lib/mm/
       directory=$(FTP_ROOT_DIR)/pkg/lib/mm/
       files="mm-*.tar.gz" 
  Index: ossp-web/pkg/lib/mux/index.wml
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 index.wml
  --- ossp-web/pkg/lib/mux/index.wml	15 Feb 2002 20:06:29 -0000	1.2
  +++ ossp-web/pkg/lib/mux/index.wml	13 Jul 2002 20:09:27 -0000	1.3
  @@ -25,6 +25,7 @@
   <h2>Source</h2>
   
   <pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/lib/mux/
       url=$(FTP_ROOT_URL)/pkg/lib/mux/
       directory=$(FTP_ROOT_DIR)/pkg/lib/mux/
       files="mux-*.tar.gz" 
  Index: ossp-web/pkg/lib/path/index.wml
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 index.wml
  --- ossp-web/pkg/lib/path/index.wml	15 Feb 2002 20:06:29 -0000	1.2
  +++ ossp-web/pkg/lib/path/index.wml	13 Jul 2002 20:09:27 -0000	1.3
  @@ -26,6 +26,7 @@
   <h2>Source</h2>
   
   <pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/lib/path/
       url=$(FTP_ROOT_URL)/pkg/lib/path/
       directory=$(FTP_ROOT_DIR)/pkg/lib/path/
       files="path-*.tar.gz" 
  Index: ossp-web/pkg/lib/pcbe/index.wml
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 index.wml
  --- ossp-web/pkg/lib/pcbe/index.wml	15 Feb 2002 20:06:30 -0000	1.2
  +++ ossp-web/pkg/lib/pcbe/index.wml	13 Jul 2002 20:09:28 -0000	1.3
  @@ -25,6 +25,7 @@
   <h2>Source</h2>
   
   <pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/lib/pcbe/
       url=$(FTP_ROOT_URL)/pkg/lib/pcbe/
       directory=$(FTP_ROOT_DIR)/pkg/lib/pcbe/
       files="pcbe-*.tar.gz" 
  Index: ossp-web/pkg/lib/pcre/index.wml
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 index.wml
  --- ossp-web/pkg/lib/pcre/index.wml	15 Feb 2002 20:06:30 -0000	1.2
  +++ ossp-web/pkg/lib/pcre/index.wml	13 Jul 2002 20:09:29 -0000	1.3
  @@ -34,6 +34,7 @@
   <h2>Source</h2>
   
   <pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/lib/pcre/
       url=$(FTP_ROOT_URL)/pkg/lib/pcre/
       directory=$(FTP_ROOT_DIR)/pkg/lib/pcre/
       files="pcre-*.tar.gz" 
  Index: ossp-web/pkg/lib/popt/index.wml
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 index.wml
  --- ossp-web/pkg/lib/popt/index.wml	15 Feb 2002 20:06:31 -0000	1.2
  +++ ossp-web/pkg/lib/popt/index.wml	13 Jul 2002 20:09:29 -0000	1.3
  @@ -40,6 +40,7 @@
   <h2>Source</h2>
   
   <pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/lib/popt/
       url=$(FTP_ROOT_URL)/pkg/lib/popt/
       directory=$(FTP_ROOT_DIR)/pkg/lib/popt/
       files="popt-*.tar.gz" 
  Index: ossp-web/pkg/lib/proc/index.wml
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 index.wml
  --- ossp-web/pkg/lib/proc/index.wml	15 Feb 2002 20:06:31 -0000	1.2
  +++ ossp-web/pkg/lib/proc/index.wml	13 Jul 2002 20:09:30 -0000	1.3
  @@ -26,6 +26,7 @@
   <h2>Source</h2>
   
   <pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/lib/proc/
       url=$(FTP_ROOT_URL)/pkg/lib/proc/
       directory=$(FTP_ROOT_DIR)/pkg/lib/proc/
       files="proc-*.tar.gz" 
  Index: ossp-web/pkg/lib/pth/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/lib/pth/index.wml	15 Feb 2002 11:56:47 -0000	1.1
  +++ ossp-web/pkg/lib/pth/index.wml	13 Jul 2002 20:09:30 -0000	1.2
  @@ -51,6 +51,7 @@
   <h2>Source</h2>
   
   <pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/lib/pth/
       url=$(FTP_ROOT_URL)/pkg/lib/pth/
       directory=$(FTP_ROOT_DIR)/pkg/lib/pth/
       files="pth-*.tar.gz" 
  Index: ossp-web/pkg/lib/res/index.wml
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 index.wml
  --- ossp-web/pkg/lib/res/index.wml	15 Feb 2002 20:06:32 -0000	1.2
  +++ ossp-web/pkg/lib/res/index.wml	13 Jul 2002 20:09:31 -0000	1.3
  @@ -25,6 +25,7 @@
   <h2>Source</h2>
   
   <pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/lib/res/
       url=$(FTP_ROOT_URL)/pkg/lib/res/
       directory=$(FTP_ROOT_DIR)/pkg/lib/res/
       files="res-*.tar.gz" 
  Index: ossp-web/pkg/lib/sa/index.wml
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 index.wml
  --- ossp-web/pkg/lib/sa/index.wml	15 Mar 2002 10:54:49 -0000	1.2
  +++ ossp-web/pkg/lib/sa/index.wml	13 Jul 2002 20:09:31 -0000	1.3
  @@ -27,6 +27,7 @@
   <h2>Source</h2>
   
   <pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/lib/sa/
       url=$(FTP_ROOT_URL)/pkg/lib/sa/
       directory=$(FTP_ROOT_DIR)/pkg/lib/sa/
       files="sa-*.tar.gz" 
  Index: ossp-web/pkg/lib/sio/index.wml
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 index.wml
  --- ossp-web/pkg/lib/sio/index.wml	15 Feb 2002 20:06:32 -0000	1.2
  +++ ossp-web/pkg/lib/sio/index.wml	13 Jul 2002 20:09:32 -0000	1.3
  @@ -23,6 +23,7 @@
   <h2>Source</h2>
   
   <pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/lib/sio/
       url=$(FTP_ROOT_URL)/pkg/lib/sio/
       directory=$(FTP_ROOT_DIR)/pkg/lib/sio/
       files="sio-*.tar.gz" 
  Index: ossp-web/pkg/lib/str/index.wml
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 index.wml
  --- ossp-web/pkg/lib/str/index.wml	1 Apr 2002 09:22:39 -0000	1.2
  +++ ossp-web/pkg/lib/str/index.wml	13 Jul 2002 20:09:32 -0000	1.3
  @@ -27,6 +27,7 @@
   <h2>Source</h2>
   
   <pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/lib/str/
       url=$(FTP_ROOT_URL)/pkg/lib/str/
       directory=$(FTP_ROOT_DIR)/pkg/lib/str/
       files="str-*.tar.gz" 
  Index: ossp-web/pkg/lib/val/index.wml
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 index.wml
  --- ossp-web/pkg/lib/val/index.wml	15 Mar 2002 11:50:17 -0000	1.3
  +++ ossp-web/pkg/lib/val/index.wml	13 Jul 2002 20:09:33 -0000	1.4
  @@ -34,6 +34,7 @@
   <h2>Source</h2>
   
   <pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/lib/val/
       url=$(FTP_ROOT_URL)/pkg/lib/val/
       directory=$(FTP_ROOT_DIR)/pkg/lib/val/
       files="val-*.tar.gz" 
  Index: ossp-web/pkg/lib/var/index.wml
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 index.wml
  --- ossp-web/pkg/lib/var/index.wml	16 Apr 2002 19:31:52 -0000	1.4
  +++ ossp-web/pkg/lib/var/index.wml	13 Jul 2002 20:09:33 -0000	1.5
  @@ -52,6 +52,7 @@
   <h2>Source</h2>
   
   <pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/lib/var/
       url=$(FTP_ROOT_URL)/pkg/lib/var/
       directory=$(FTP_ROOT_DIR)/pkg/lib/var/
       files="var-*.tar.gz" 
  Index: ossp-web/pkg/lib/xds/index.wml
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 index.wml
  --- ossp-web/pkg/lib/xds/index.wml	15 Feb 2002 13:52:12 -0000	1.2
  +++ ossp-web/pkg/lib/xds/index.wml	13 Jul 2002 20:09:34 -0000	1.3
  @@ -35,6 +35,7 @@
   <h2>Source</h2>
   
   <pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/lib/xds/
       url=$(FTP_ROOT_URL)/pkg/lib/xds/
       directory=$(FTP_ROOT_DIR)/pkg/lib/xds/
       files="xds-*.tar.gz" 
  Index: ossp-web/pkg/tool/devtool/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/tool/devtool/index.wml	15 Feb 2002 10:20:55 -0000	1.1
  +++ ossp-web/pkg/tool/devtool/index.wml	13 Jul 2002 20:09:34 -0000	1.2
  @@ -28,6 +28,7 @@
   <h2>Source</h2>
   
   <pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/tool/devtool/
       url=$(FTP_ROOT_URL)/pkg/tool/devtool/
       directory=$(FTP_ROOT_DIR)/pkg/tool/devtool/
       files="devtool-*.tar.gz" 
  Index: ossp-web/pkg/tool/dsotool/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/tool/dsotool/index.wml	15 Feb 2002 10:20:56 -0000	1.1
  +++ ossp-web/pkg/tool/dsotool/index.wml	13 Jul 2002 20:09:35 -0000	1.2
  @@ -27,6 +27,7 @@
   <h2>Source</h2>
   
   <pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/tool/dsotool/
       url=$(FTP_ROOT_URL)/pkg/tool/dsotool/
       directory=$(FTP_ROOT_DIR)/pkg/tool/dsotool/
       files="dsotool-*.tar.gz" 
  Index: ossp-web/pkg/tool/eo/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/tool/eo/index.wml	15 Feb 2002 10:20:56 -0000	1.1
  +++ ossp-web/pkg/tool/eo/index.wml	13 Jul 2002 20:09:35 -0000	1.2
  @@ -28,6 +28,7 @@
   <h2>Source</h2>
   
   <pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/tool/eo/
       url=$(FTP_ROOT_URL)/pkg/tool/eo/
       directory=$(FTP_ROOT_DIR)/pkg/tool/eo/
       files="eo-*.tar.gz" 
  Index: ossp-web/pkg/tool/eperl/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/tool/eperl/index.wml	7 Jul 2002 18:11:25 -0000	1.1
  +++ ossp-web/pkg/tool/eperl/index.wml	13 Jul 2002 20:09:36 -0000	1.2
  @@ -45,6 +45,7 @@
   <h2>Source</h2>
   
   <pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/tool/eperl/
       url=$(FTP_ROOT_URL)/pkg/tool/eperl/
       directory=$(FTP_ROOT_DIR)/pkg/tool/eperl/
       files="eperl-*.tar.gz" 
  Index: ossp-web/pkg/tool/iselect/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/tool/iselect/index.wml	15 Feb 2002 10:20:57 -0000	1.1
  +++ ossp-web/pkg/tool/iselect/index.wml	13 Jul 2002 20:09:36 -0000	1.2
  @@ -27,6 +27,7 @@
   <h2>Source</h2>
   
   <pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/tool/iselect/
       url=$(FTP_ROOT_URL)/pkg/tool/iselect/
       directory=$(FTP_ROOT_DIR)/pkg/tool/iselect/
       files="iselect-*.tar.gz" 
  Index: ossp-web/pkg/tool/lmtp2nntp/index.wml
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 index.wml
  --- ossp-web/pkg/tool/lmtp2nntp/index.wml	3 Jun 2002 07:05:02 -0000	1.7
  +++ ossp-web/pkg/tool/lmtp2nntp/index.wml	13 Jul 2002 20:09:37 -0000	1.8
  @@ -37,6 +37,7 @@
   <h2>Source</h2>
   
   <pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/tool/lmtp2nntp/
       url=$(FTP_ROOT_URL)/pkg/tool/lmtp2nntp/
       directory=$(FTP_ROOT_DIR)/pkg/tool/lmtp2nntp/
       files="lmtp2nntp-*.tar.gz" stable="lmtp2nntp-1.1.1.tar.gz" unstable="lmtp2nntp-1.2a5.tar.gz">
  Index: ossp-web/pkg/tool/mct/index.wml
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 index.wml
  --- ossp-web/pkg/tool/mct/index.wml	26 Apr 2002 15:40:16 -0000	1.2
  +++ ossp-web/pkg/tool/mct/index.wml	13 Jul 2002 20:09:37 -0000	1.3
  @@ -23,6 +23,7 @@
   <h2>Source</h2>
   
   <pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/tool/mct/
       url=$(FTP_ROOT_URL)/pkg/tool/mct/
       directory=$(FTP_ROOT_DIR)/pkg/tool/mct/
       files="mct-*.tar.gz" 
  Index: ossp-web/pkg/tool/petidomo/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/tool/petidomo/index.wml	14 Feb 2002 20:32:13 -0000	1.1
  +++ ossp-web/pkg/tool/petidomo/index.wml	13 Jul 2002 20:09:38 -0000	1.2
  @@ -34,6 +34,7 @@
   <h2>Source</h2>
   
   <pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/tool/petidomo/
       url=$(FTP_ROOT_URL)/pkg/tool/petidomo/
       directory=$(FTP_ROOT_DIR)/pkg/tool/petidomo/
       files="petidomo-*.tar.gz" 
  Index: ossp-web/pkg/tool/rc/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/tool/rc/index.wml	15 Feb 2002 10:20:57 -0000	1.1
  +++ ossp-web/pkg/tool/rc/index.wml	13 Jul 2002 20:09:38 -0000	1.2
  @@ -27,6 +27,7 @@
   <h2>Source</h2>
   
   <pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/tool/rc/
       url=$(FTP_ROOT_URL)/pkg/tool/rc/
       directory=$(FTP_ROOT_DIR)/pkg/tool/rc/
       files="rc-*.tar.gz" 
  Index: ossp-web/pkg/tool/shiela/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/tool/shiela/index.wml	14 Feb 2002 20:37:34 -0000	1.1
  +++ ossp-web/pkg/tool/shiela/index.wml	13 Jul 2002 20:09:39 -0000	1.2
  @@ -31,6 +31,7 @@
   <h2>Source</h2>
   
   <pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/tool/shiela/
       url=$(FTP_ROOT_URL)/pkg/tool/shiela/
       directory=$(FTP_ROOT_DIR)/pkg/tool/shiela/
       files="shiela-*.tar.gz" 
  Index: ossp-web/pkg/tool/shtool/index.wml
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 index.wml
  --- ossp-web/pkg/tool/shtool/index.wml	13 Jul 2002 18:29:20 -0000	1.5
  +++ ossp-web/pkg/tool/shtool/index.wml	13 Jul 2002 20:09:39 -0000	1.6
  @@ -41,6 +41,7 @@
   <h2>Source</h2>
   
   <pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/tool/shtool/
       url=$(FTP_ROOT_URL)/pkg/tool/shtool/
       directory=$(FTP_ROOT_DIR)/pkg/tool/shtool/
       files="shtool-*.tar.gz" 
  Index: ossp-web/pkg/tool/smake/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/tool/smake/index.wml	15 Feb 2002 10:20:58 -0000	1.1
  +++ ossp-web/pkg/tool/smake/index.wml	13 Jul 2002 20:09:40 -0000	1.2
  @@ -33,6 +33,7 @@
   <h2>Source</h2>
   
   <pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/tool/smake/
       url=$(FTP_ROOT_URL)/pkg/tool/smake/
       directory=$(FTP_ROOT_DIR)/pkg/tool/smake/
       files="smake-*.tar.gz" 
  Index: ossp-web/pkg/tool/sugar/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/tool/sugar/index.wml	15 Feb 2002 10:20:58 -0000	1.1
  +++ ossp-web/pkg/tool/sugar/index.wml	13 Jul 2002 20:09:40 -0000	1.2
  @@ -28,6 +28,7 @@
   <h2>Source</h2>
   
   <pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/tool/sugar/
       url=$(FTP_ROOT_URL)/pkg/tool/sugar/
       directory=$(FTP_ROOT_DIR)/pkg/tool/sugar/
       files="sugar-*.tar.gz" 
  Index: ossp-web/pkg/tool/xenia/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/tool/xenia/index.wml	15 Feb 2002 09:29:08 -0000	1.1
  +++ ossp-web/pkg/tool/xenia/index.wml	13 Jul 2002 20:09:41 -0000	1.2
  @@ -29,6 +29,7 @@
   <h2>Source</h2>
   
   <pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/tool/xenia/
       url=$(FTP_ROOT_URL)/pkg/tool/xenia/
       directory=$(FTP_ROOT_DIR)/pkg/tool/xenia/
       files="xenia-*.tar.gz" 

From ossp-cvs-owner@ossp.org  Tue Jul 16 15:20:34 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7372676523; Tue, 16 Jul 2002 15:20:34 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.c fsl.pod l2.sample.cfg
Message-Id: <20020716132034.7372676523@mail.ossp.org>
Date: Tue, 16 Jul 2002 15:20:34 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   16-Jul-2002 15:20:34
  Branch: HEAD                             Handle: 2002071614203300

  Added files:
    ossp-pkg/fsl            l2.sample.cfg
  Modified files:
    ossp-pkg/fsl            fsl.c fsl.pod

  Log:
    integration of lib_cfg including tree dump through traverse()

  Summary:
    Revision    Changes     Path
    1.3         +104 -55    ossp-pkg/fsl/fsl.c
    1.2         +1  -2      ossp-pkg/fsl/fsl.pod
    1.1         +27 -0      ossp-pkg/fsl/l2.sample.cfg
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 fsl.c
  --- ossp-pkg/fsl/fsl.c	11 Jul 2002 15:43:15 -0000	1.2
  +++ ossp-pkg/fsl/fsl.c	16 Jul 2002 13:20:33 -0000	1.3
  @@ -35,12 +35,20 @@
   #include <errno.h>
   #include <string.h>
   #include <unistd.h>
  +#include <fcntl.h>
   #include <time.h>
   #include <sys/time.h>
  +#include <sys/types.h>
  +#include <sys/stat.h>
  +#include <dirent.h>
   
   /* standard include we re-implement */
   #include <syslog.h>
   
  +/* third party (linked in) */
  +#include "l2.h"
  +#include "cfg.h"
  +
   /* default for the dedicated logfile */
   #ifndef LOGFILE
   #define LOGFILE "/tmp/syslog"
  @@ -53,6 +61,36 @@
   #define LOG_PRI(p) ((p) & LOG_PRIMASK)
   #endif
   
  +#include "config.h"
  +#define FSL_PREFIX "l2."
  +
  +#define STMT(stuff) do { stuff } while (0)
  +#define CU(returncode) STMT( rc = returncode; goto CUS; )
  +#define VCU STMT( goto CUS; )
  +
  +typedef struct {
  +    char   *base;
  +    size_t  used;
  +    size_t  size;
  +} buf_t;
  +
  +/* general return codes */
  +typedef enum {
  +    FSL_OK = 0,               /* everything ok */
  +    FSL_ERR_ARG,              /* invalid argument */
  +    FSL_ERR_USE,              /* invalid use */
  +    FSL_ERR_MEM,              /* no more memory available */
  +    FSL_ERR_SYS               /* operating system error, see errno */
  +    //FSL_ERR_FMT,              /* formatting error */
  +    //FSL_ERR_INT,              /* internal error */
  +    //FSL_ERR_SYN,              /* syntax error */
  +} fsl_rc_t;
  +
  +fsl_rc_t readfileorallfiles(buf_t *, const char *);
  +fsl_rc_t readfile          (buf_t *, const char *);
  +fsl_rc_t readallfiles      (buf_t *);
  +fsl_rc_t appendfiletobuffer(buf_t *, const char *);
  +
   /* log level to string mapping */
   static struct {
       int level;
  @@ -81,7 +119,7 @@
       NULL, LOGFILE, "unknown", 0, LOG_USER, 0xff
   };
   
  -void openlog(const char *ident, int logopt, int facility)
  +void FIXMEopenlog(const char *ident, int logopt, int facility)
   {
       /* remember parameters */
       ctx.ident    = ident;
  @@ -101,6 +139,70 @@
       return;
   }
   
  +void traverse(cfg_t *cfg, cfg_node_t *cfgnode)
  +{
  +    int rc;
  +    cfg_node_t *cfgchld;
  +    cfg_rc_t cfgrv;
  +    char *cp;
  +
  +    fprintf(stderr, "DEBUG: diving\n");
  +    while (cfgnode != NULL) {
  +        if ((cfgrv = cfg_node_get(cfg, cfgnode, CFG_NODE_ATTR_TOKEN, &cp)) != CFG_OK) {
  +            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(T) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +        fprintf(stderr, "DEBUG: cfgnode=0x%.8lx, *cp=\"%s\"\n", (unsigned long)cfgnode, cp);
  +        if ((cfgrv = cfg_node_get(cfg, cfgnode, CFG_NODE_ATTR_CHILD1, &cfgchld)) != CFG_OK) {
  +            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(C) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +        if (cfgchld != NULL)
  +            traverse(cfg, cfgchld);
  +        if ((cfgrv = cfg_node_get(cfg, cfgnode, CFG_NODE_ATTR_RBROTH, &cfgnode)) != CFG_OK) {
  +            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(R) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +    }
  +    fprintf(stderr, "DEBUG: climbing\n");
  +    CU(0);
  +CUS:
  +    return;
  +}
  +
  +void openlog(const char *ident, int logopt, int facility)
  +{
  +    int rc;
  +    buf_t buf;
  +    fsl_rc_t rv;
  +    cfg_t      *cfg     = NULL;
  +    cfg_rc_t    cfgrv   = CFG_OK;
  +    cfg_node_t *cfgroot;
  +    char *cp;
  +
  +fprintf(stderr, "DEBUG: main(ident=\"%s\", logopt=0x%.8lx, facility=0x%.8lx)\n", ident, (unsigned long)logopt, (unsigned long)facility);
  +    buf.base = NULL;
  +    buf.used = 0;
  +    buf.size = 0;
  +
  +    if ((cfgrv = cfg_create(&cfg)) != CFG_OK) {
  +        (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_create() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +
  +    if ((rv = readfileorallfiles(&buf, "config.log")) != FSL_OK)
  +        fprintf(stderr, "DEBUG: error#%d, system#%s(%d)\n", rv, strerror(errno), errno);
  +
  +    if ((cfgrv = cfg_import(cfg, NULL, CFG_FMT_CFG, buf.base, buf.size)) != CFG_OK) {
  +        (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_import() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +
  +    if ((cfgrv = cfg_node_root(cfg, &cfgroot)) != CFG_OK) {
  +        (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_root() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +    traverse(cfg, cfgroot);
  +#if 0
  +    if ((cfgrv = cfg_destroy(cfg)) != CFG_OK) {
  +        (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_destroy() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +#endif
  +
  +fprintf(stderr, "DEBUG: main() OK, buf.base=0x%.8lx, buf.used=%d, buf.size=%d\n", (unsigned long)buf.base, (int)buf.used, (int)buf.size);
  +    CU(0);
  +CUS:
  +    FIXMEopenlog(ident, logopt, facility);
  +    return;
  +}
  +
   void closelog(void)
   {
       /* close open logfile*/
  @@ -239,60 +341,6 @@
       return;
   }
   
  -/* ------------------------------------------------------------------ */
  -
  -#include <unistd.h>
  -#include <fcntl.h>
  -#include <sys/types.h>
  -#include <sys/stat.h>
  -#include <stdio.h> /* strerror() */
  -#include <dirent.h>
  -
  -#include "config.h"
  -#define FSL_PREFIX "l2."
  -
  -#define STMT(stuff) do { stuff } while (0)
  -#define CU(returncode) STMT( rc = returncode; goto CUS; )
  -#define VCU STMT( goto CUS; )
  -
  -typedef struct {
  -    char *base;
  -    int   used;
  -    int   size;
  -} buf_t;
  -
  -/* general return codes */
  -typedef enum {
  -    FSL_OK = 0,               /* everything ok */
  -    FSL_ERR_ARG,              /* invalid argument */
  -    FSL_ERR_USE,              /* invalid use */
  -    FSL_ERR_MEM,              /* no more memory available */
  -    FSL_ERR_SYS               /* operating system error, see errno */
  -    //FSL_ERR_FMT,              /* formatting error */
  -    //FSL_ERR_INT,              /* internal error */
  -    //FSL_ERR_SYN,              /* syntax error */
  -} fsl_rc_t;
  -
  -fsl_rc_t readfileorallfiles(buf_t *, const char *);
  -fsl_rc_t readfile          (buf_t *, const char *);
  -fsl_rc_t readallfiles      (buf_t *);
  -fsl_rc_t appendfiletobuffer(buf_t *, const char *);
  -
  -int main(int argc, char **argv)
  -{
  -    buf_t buf;
  -    fsl_rc_t rv;
  -
  -    buf.base = NULL;
  -    buf.used = 0;
  -    buf.size = 0;
  -
  -    if ((rv = readfileorallfiles(&buf, "config.log")) != FSL_OK)
  -        fprintf(stderr, "DEBUG: error#%d, system#%s(%d)\n", rv, strerror(errno), errno);
  -
  -    return 0;
  -}
  -
   fsl_rc_t readfileorallfiles(buf_t *buffer, const char *ident)
   {
       fsl_rc_t rv;
  @@ -379,6 +427,7 @@
   
       if (filename == NULL || buffer == NULL)
           CU(FSL_ERR_ARG);
  +fprintf(stderr, "DEBUG: appendfiletobuffer(..., %s)\n", filename);
   
       if ((fd = open(filename, O_RDONLY)) == -1)
           CU(FSL_ERR_SYS);
  Index: ossp-pkg/fsl/fsl.pod
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 fsl.pod
  --- ossp-pkg/fsl/fsl.pod	9 Jul 2002 09:42:09 -0000	1.1
  +++ ossp-pkg/fsl/fsl.pod	16 Jul 2002 13:20:33 -0000	1.2
  @@ -74,8 +74,7 @@
   concatenated from "I<ident>/I<facility>" given to the openlog(3) call.
   
   The configuration section contains an B<OSSP l2> specification enclosed
  -in curly brackets where the closing bracket must be placed on the
  -beginning of a line and terminated with a semicolon. The B<OSSP l2>
  +in curly brackets and terminated with a semicolon. The B<OSSP l2>
   specification may contain $1, $2, ... variables which are filled in from
   the I<match> regex parts enclosed in round brackets.
   
  Index: ossp-pkg/fsl/l2.sample.cfg
  ============================================================
  $ cvs update -p -r1.1 l2.sample.cfg
  
      #
      # SAMPLE FAKESYSLOG CONFIGURATION FILE
      #
  
  ident sendmail/.* q{
      debug:
          prefix(prefix="%%b %%d %%H:%%M:%%S <%%L> $1 [%%P]: ",
          timezone=local)
          -> file(path="sendmail.debug.log", append=0,perm=432)
      };
  
  ident mail/.* q{
      error:
          prefix(prefix="%%b %%d %%H:%%M:%%S <%%L> $1 [%%P]: ",
          timezone=local)
          -> file(path="mail.error.log", append=0,perm=432)
      };
  
  ident news/.* q{
      warning:
          prefix(prefix="%%b %%d %%H:%%M:%%S <%%L> $1 [%%P]: ",
          timezone=local)
          -> file(path="news.warning.log", append=0,perm=432)
      };
  
  # have a nice day

From ossp-cvs-owner@ossp.org  Tue Jul 16 15:36:26 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 85DB6767D1; Tue, 16 Jul 2002 15:36:26 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.c
Message-Id: <20020716133626.85DB6767D1@mail.ossp.org>
Date: Tue, 16 Jul 2002 15:36:26 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   16-Jul-2002 15:36:26
  Branch: HEAD                             Handle: 2002071614362600

  Modified files:
    ossp-pkg/fsl            fsl.c

  Log:
    dump types also

  Summary:
    Revision    Changes     Path
    1.4         +4  -1      ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 fsl.c
  --- ossp-pkg/fsl/fsl.c	16 Jul 2002 13:20:33 -0000	1.3
  +++ ossp-pkg/fsl/fsl.c	16 Jul 2002 13:36:26 -0000	1.4
  @@ -144,13 +144,16 @@
       int rc;
       cfg_node_t *cfgchld;
       cfg_rc_t cfgrv;
  +    cfg_node_type_t cfgtyp;
       char *cp;
   
       fprintf(stderr, "DEBUG: diving\n");
       while (cfgnode != NULL) {
           if ((cfgrv = cfg_node_get(cfg, cfgnode, CFG_NODE_ATTR_TOKEN, &cp)) != CFG_OK) {
               (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(T) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  -        fprintf(stderr, "DEBUG: cfgnode=0x%.8lx, *cp=\"%s\"\n", (unsigned long)cfgnode, cp);
  +        if ((cfgrv = cfg_node_get(cfg, cfgnode, CFG_NODE_ATTR_TYPE, &cfgtyp)) != CFG_OK) {
  +            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(y) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +        fprintf(stderr, "DEBUG: cfgnode=0x%.8lx, *cp=\"%s\", type=%d\n", (unsigned long)cfgnode, cp, cfgtyp);
           if ((cfgrv = cfg_node_get(cfg, cfgnode, CFG_NODE_ATTR_CHILD1, &cfgchld)) != CFG_OK) {
               (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(C) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
           if (cfgchld != NULL)

From ossp-cvs-owner@ossp.org  Tue Jul 16 15:48:26 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3CF45763DA; Tue, 16 Jul 2002 15:48:26 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg cfg.h
Message-Id: <20020716134826.3CF45763DA@mail.ossp.org>
Date: Tue, 16 Jul 2002 15:48:26 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   16-Jul-2002 15:48:26
  Branch: HEAD                             Handle: 2002071614482500

  Modified files:
    ossp-pkg/cfg            cfg.h

  Log:
    document return types

  Summary:
    Revision    Changes     Path
    1.9         +13 -13     ossp-pkg/cfg/cfg.h
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/cfg.h
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 cfg.h
  --- ossp-pkg/cfg/cfg.h	12 Jul 2002 19:59:33 -0000	1.8
  +++ ossp-pkg/cfg/cfg.h	16 Jul 2002 13:48:25 -0000	1.9
  @@ -64,19 +64,19 @@
   
   /* list of node attributes */
   typedef enum {
  -    CFG_NODE_ATTR_PARENT,     /* RW: pointer to parent node */
  -    CFG_NODE_ATTR_LBROTH,     /* RW: pointer to left brother node */
  -    CFG_NODE_ATTR_RBROTH,     /* RW: pointer to right brother node */
  -    CFG_NODE_ATTR_CHILD1,     /* RW: pointer to first child node */
  -    CFG_NODE_ATTR_CHILDL,     /* RO: pointer to last child */
  -    CFG_NODE_ATTR_CHILDS,     /* RO: number of child nodes */
  -    CFG_NODE_ATTR_NODES,      /* RO: number of total nodes (recursive) */
  -    CFG_NODE_ATTR_DEPTH,      /* RO: number of nodes back to root node */
  -    CFG_NODE_ATTR_SRCNAME,    /* RW: pointer to the source name */
  -    CFG_NODE_ATTR_SRCPOS,     /* RW: position offset into source */
  -    CFG_NODE_ATTR_TYPE,       /* RW: type of node */
  -    CFG_NODE_ATTR_TOKEN,      /* RW: pointer to the node token string */
  -    CFG_NODE_ATTR_DATA        /* RW: pointer to the node annotation data */
  +    CFG_NODE_ATTR_PARENT,     /* RW: (cfg_node_t *)    pointer to parent node */
  +    CFG_NODE_ATTR_LBROTH,     /* RW: (cfg_node_t *)    pointer to left brother node */
  +    CFG_NODE_ATTR_RBROTH,     /* RW: (cfg_node_t *)    pointer to right brother node */
  +    CFG_NODE_ATTR_CHILD1,     /* RW: (cfg_node_t *)    pointer to first child node */
  +    CFG_NODE_ATTR_CHILDL,     /* RO: (cfg_node_t *)    pointer to last child */
  +    CFG_NODE_ATTR_CHILDS,     /* RO: (int)             number of child nodes */
  +    CFG_NODE_ATTR_NODES,      /* RO: (int)             number of total nodes (recursive) */
  +    CFG_NODE_ATTR_DEPTH,      /* RO: (int)             number of nodes back to root node */
  +    CFG_NODE_ATTR_SRCNAME,    /* RW: (char *)          pointer to the source name */
  +    CFG_NODE_ATTR_SRCPOS,     /* RW: (int)             position offset into source */
  +    CFG_NODE_ATTR_TYPE,       /* RW: (cfg_node_type_t) type of node */
  +    CFG_NODE_ATTR_TOKEN,      /* RW: (char *)          pointer to the node token string */
  +    CFG_NODE_ATTR_DATA        /* RW: (cfg_data_t *)    pointer to the node annotation data */
   } cfg_node_attr_t;
   
   /* list of data types */

From ossp-cvs-owner@ossp.org  Tue Jul 16 15:49:29 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 89A6C763DA; Tue, 16 Jul 2002 15:49:29 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.c
Message-Id: <20020716134929.89A6C763DA@mail.ossp.org>
Date: Tue, 16 Jul 2002 15:49:29 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   16-Jul-2002 15:49:29
  Branch: HEAD                             Handle: 2002071614492900

  Modified files:
    ossp-pkg/fsl            fsl.c

  Log:
    dump number of childs also

  Summary:
    Revision    Changes     Path
    1.5         +6  -2      ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 fsl.c
  --- ossp-pkg/fsl/fsl.c	16 Jul 2002 13:36:26 -0000	1.4
  +++ ossp-pkg/fsl/fsl.c	16 Jul 2002 13:49:29 -0000	1.5
  @@ -48,6 +48,7 @@
   /* third party (linked in) */
   #include "l2.h"
   #include "cfg.h"
  +#include "pcre.h"
   
   /* default for the dedicated logfile */
   #ifndef LOGFILE
  @@ -146,14 +147,17 @@
       cfg_rc_t cfgrv;
       cfg_node_type_t cfgtyp;
       char *cp;
  +    int cfgchilds;
   
       fprintf(stderr, "DEBUG: diving\n");
       while (cfgnode != NULL) {
           if ((cfgrv = cfg_node_get(cfg, cfgnode, CFG_NODE_ATTR_TOKEN, &cp)) != CFG_OK) {
               (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(T) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
           if ((cfgrv = cfg_node_get(cfg, cfgnode, CFG_NODE_ATTR_TYPE, &cfgtyp)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(y) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  -        fprintf(stderr, "DEBUG: cfgnode=0x%.8lx, *cp=\"%s\", type=%d\n", (unsigned long)cfgnode, cp, cfgtyp);
  +            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(t) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +        if ((cfgrv = cfg_node_get(cfg, cfgnode, CFG_NODE_ATTR_CHILDS, &cfgchilds)) != CFG_OK) {
  +            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(c) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +        fprintf(stderr, "DEBUG: cfgnode=0x%.8lx[%d], *cp=\"%s\", type=%d\n", (unsigned long)cfgnode, cfgchilds, cp, cfgtyp);
           if ((cfgrv = cfg_node_get(cfg, cfgnode, CFG_NODE_ATTR_CHILD1, &cfgchld)) != CFG_OK) {
               (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(C) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
           if (cfgchld != NULL)

From ossp-cvs-owner@ossp.org  Tue Jul 16 16:49:10 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 58D38763DA; Tue, 16 Jul 2002 16:49:10 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea.cgi
Message-Id: <20020716144910.58D38763DA@mail.ossp.org>
Date: Tue, 16 Jul 2002 16:49:10 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   16-Jul-2002 16:49:10
  Branch: HEAD                             Handle: 2002071615490900

  Modified files:
    ossp-pkg/tabea          tabea.cgi

  Log:
    Changed HTML input formular and use of %%HEADER%%

  Summary:
    Revision    Changes     Path
    1.37        +50 -15     ossp-pkg/tabea/tabea.cgi
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea.cgi
  ============================================================
  $ cvs diff -u -r1.36 -r1.37 tabea.cgi
  --- ossp-pkg/tabea/tabea.cgi	10 Jul 2002 13:53:44 -0000	1.36
  +++ ossp-pkg/tabea/tabea.cgi	16 Jul 2002 14:49:09 -0000	1.37
  @@ -38,14 +38,6 @@
   
   my $cfgfile = "./tabea.cfg";
   
  -# establish my configuration
  -my $MY = {};
  -$MY->{PROGNAME} = ($0 =~ m|^.*?([^/]+?)(?:\.[^/.]+)?$|)[0];
  -$MY->{TEMPLATE} = '';
  -my $fh = new IO::File ("<".$MY->{PROGNAME}.".html") || die;
  -$MY->{TEMPLATE} .= $_ while (<$fh>);
  -$fh->close();
  -
   #   establish CGI query object
   my $cgi = new CGI;
   
  @@ -82,6 +74,17 @@
   # Read the configuration
   my %cfghash = &read_config($cfgfile);
   
  +# Get HTML Header
  +
  +my $MY = {};
  +$MY->{TEMPLATE} = '';
  +
  +my $fh = new IO::File ("<".$cfghash{'BaseDir'} . $cfghash{'PageTemplate'}) || die;
  +$MY->{TEMPLATE} .= $_ while (<$fh>);
  +$fh->close();
  +
  +
  +
   #   fetch parameters
   my $dialog   = $cgi->param("dialog")   || "";
   my $username = $cgi->param("username") || "";
  @@ -92,6 +95,9 @@
   my $new2_password = $cgi->param("new2_password") || "";
   my $filename = $cgi->param("filename") || "";
   
  +
  +my $headertext = "";
  +
   my $form = '';
   
   for my $name (qw(admin cfgedit changepwd changer chpwd confr copy copyc copyt del d2user d3user \
  @@ -107,91 +113,117 @@
   
   if ($form eq '') {
       $page .= &login();
  +    $headertext = "Login";
   }
   elsif ($form eq 'mainw') {
       $page .= mainw();
  +    $headertext = "Main";
   }
   elsif ($form eq 'edit') {
       $page .= &edit($cgi->param('configslist'));
  +    $headertext = "Edit";
   }
   elsif ($form eq 'save') {
       $page .= &save($cgi->param('editfile'), $cgi->param('editwindow'));
  +    $headertext = "Save";
   }
   elsif ($form eq 'view') {
       $page .= &view($cgi->param('templatelist'));
  +    $headertext = "View";
   }
   elsif ($form eq 'new') {
       $page .= &new($cfghash{'BaseDir'} . $cfghash{'ConfigDir'}, $username);
  +    $headertext = "New File";
   }
   elsif ($form eq 'newf') {
       $page .= &newfile($cfghash{'BaseDir'} . $cfghash{'ConfigDir'},
                         $username, $cgi->param('newfile'), $cgi->param('new_rights'));
  +    $headertext = "New File";
   }
   elsif ($form eq 'confr') {
       $page .= &config_rights($cgi->param('configslist'));
  +    $headertext = "Config Rights";
   }
   elsif ($form eq 'changer') {
       $page .= &change_rights($cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/"
                               . $cgi->param('filename'), $cgi->param('changerights') );
  +    $headertext = "Config Rights";
   }
   elsif ($form eq 'copyt') {
       $page .= &copy_file($cgi->param('templatelist') );
  +    $headertext = "Copy File";
   }
   elsif ($form eq 'copyc') {
       $page .= &copy_file($cgi->param('configslist'));
  +    $headertext = "Copy File";
   }
   elsif ($form eq 'copy' ) {
       $page .= &copy($cgi->param('srcfile'), $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" .
                      $username . "/". $cgi->param('dstfile'));
  +    $headertext = "Copy File";
   }
   elsif ($form eq 'del' ) {
       $page .= &del($cgi->param('configslist'));
  +    $headertext = "Delete File";
   }
   elsif ($form eq 'run' ) {
       $page .= &run($cgi->param('configslist') );
  +    $headertext = "Run";
   }
   elsif ($form eq 'admin' ) {
       if ( $cgi->param('username') eq $cfghash{'TabeaUser'}) {
           $page .= &admin($cgi->param('username') );
  +        $headertext = "Administration";
       } else {
           $page .= &chpwd($cgi->param('username') );
  +        $headertext = "Change Password";
       }
   }
   elsif ($form eq 'chpwd' ) {
       if ( $cgi->param('username') eq $cfghash{'TabeaUser'}) {
           $page .= &chpwd($cgi->param('akt_user') );
  +        $headertext = "Change Password";
       } else {
           $page .= &chpwd($cgi->param('username') );
  +        $headertext = "Change Password";
       }
   }
   elsif ($form eq 'changepwd' ) {
       if ( $cgi->param('username') eq $cfghash{'TabeaUser'}) {
           $page .= &changepwd($cgi->param('akt_user') );
  +        $headertext = "Change Password";
       } else {
           $page .= &changepwd($cgi->param('username') );
  +        $headertext = "Change Password";
       }
   }
   elsif ($form eq 'nuser' ) {
      $page .= &nuser();
  +   $headertext = "New User";
   }
   
   elsif ($form eq 'newuser' ) {
      $page .= &newuser($cgi->param('akt_user'));
  +   $headertext = "New User";
   }
   elsif ($form eq 'duser' ) {
  -    $page .= &duser($akt_user);
  +   $page .= &duser($akt_user);
  +   $headertext = "Delete User";
   }
   
   elsif ($form eq 'd2user' ) {
  -    $page .= &d2user($akt_user);
  +   $page .= &d2user($akt_user);
  +   $headertext = "Delete New User";
   }
   
   elsif ($form eq 'd3user' ) {
  -    $page .= &d3user($akt_user);
  +   $page .= &d3user($akt_user);
  +   $headertext = "Delete New User";
   }
   
   elsif ($form eq 'cfgedit' ) {
  -    $page .= &cfgedit();
  +   $page .= &cfgedit();
  +   $headertext = "Edit Configuration";
   }
   elsif ($form eq 'logout' ) {
       $cgi->param(-name => 'username', -value => "");
  @@ -213,7 +245,11 @@
   
   my $out = $MY->{TEMPLATE};
   $out =~ s|%%BODY%%|$page|s;
  -$out =~ s|%%TITLE%%|Test|s;
  +
  +if ( ! $headertext ) {
  +    $headertext .= $cfghash{'StdHeader'};
  +}
  +$out =~ s|%%TITLE%%|$headertext|s;
   
   print STDOUT $cgi->header(-cookie => $cookies, -expires => '+1s') . $out;
   
  @@ -836,8 +872,7 @@
       $text .= "<font size=+2>" .
                "Running Configuration: $rpath<br><br>\n" .
                "</font>" .
  -             "<br><br>" .
  -             "Run command: " . $rcommand . "<br>";
  +             "<br><br>" ;
   
       system("$rcommand > $output 2>&1");
       &logging("Running command $rcommand");

From ossp-cvs-owner@ossp.org  Tue Jul 16 16:49:35 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5D8E4769E5; Tue, 16 Jul 2002 16:49:35 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea.cfg
Message-Id: <20020716144935.5D8E4769E5@mail.ossp.org>
Date: Tue, 16 Jul 2002 16:49:35 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   16-Jul-2002 16:49:35
  Branch: HEAD                             Handle: 2002071615493400

  Modified files:
    ossp-pkg/tabea          tabea.cfg

  Log:
    Appended StdHeader

  Summary:
    Revision    Changes     Path
    1.4         +5  -5      ossp-pkg/tabea/tabea.cfg
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea.cfg
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 tabea.cfg
  --- ossp-pkg/tabea/tabea.cfg	9 Jul 2002 15:08:28 -0000	1.3
  +++ ossp-pkg/tabea/tabea.cfg	16 Jul 2002 14:49:34 -0000	1.4
  @@ -3,15 +3,15 @@
   ##
   
   TabeaUser        tabea
  -BaseDir          ./
  +BaseDir          ./                 # must end with '/'
   ConfigDir        tabea.d
   ConfigDefault    default            # default
  -ExecuteCommand   /usr/local/bin/sudo cat %{profile}%
   ExecuteTempFile  runout.txt
   PasswdFile       tabea.pw
   ConfigDefault    default
  +ExecuteCommand   /usr/local/bin/sudo cat %{profile}%
   #ExecuteCommand   sudo js_prepare -f %{profile}
  -PageTemplate     tabea.page.html %%TITLE%% %%BODY%% 
  -PasswdFile       tabea.pw       
  -Logging          yes            # loggin yes or no
  +PageTemplate     tabea.html 
  +StdHeader        Tabea Header
  +Logging          yes            # logging yes or no
   LogFile          tabea.log

From ossp-cvs-owner@ossp.org  Tue Jul 16 16:59:43 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 82876763DA; Tue, 16 Jul 2002 16:59:43 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea TODO
Message-Id: <20020716145943.82876763DA@mail.ossp.org>
Date: Tue, 16 Jul 2002 16:59:43 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   16-Jul-2002 16:59:43
  Branch: HEAD                             Handle: 2002071615594300

  Modified files:
    ossp-pkg/tabea          TODO

  Log:
    *** empty log message ***

  Summary:
    Revision    Changes     Path
    1.4         +12 -8      ossp-pkg/tabea/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/TODO
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 TODO
  --- ossp-pkg/tabea/TODO	14 Jun 2002 14:39:30 -0000	1.3
  +++ ossp-pkg/tabea/TODO	16 Jul 2002 14:59:43 -0000	1.4
  @@ -4,8 +4,11 @@
   
     - [rse]: invalid login produces no error message on new dialog page
     - [rse]: "PageTemplate" in tabea.cfg still not used at all
  +        [ps] done
     - [rse]: "PageStyleSheet" should be add to tabea.cfg for CSS1
  +        [ps] "integrated" to "PageTempleate"
     - [rse]: "LogFile" should be added to tabea.cfg for logging
  +        [ps] Logging appended
   
     Dialogs:
   
  @@ -41,12 +44,13 @@
     +-----------------------------+
   
   
  -- Solve "Back" errror
  -- Write back edited file
  -- Read config file
  -- User name in configuration list
  -- Define the other submit buttons
  +- Solve "Back" errror               done [ps]
  +- Write back edited file            done [ps]
  +- Read config file                  done [ps]
  +- User name in configuration list   done [ps]
  +- Define the other submit buttons   done [ps]
  +- Create Admin section              done [ps]
  +- Create Logout Button              done [ps]
  +- Use "PageTemplate" from cfg       done [ps]
  +- Optical cleanup
   
  -.................
  -
  -Pete Smej, 10.05.2002   

From ossp-cvs-owner@ossp.org  Tue Jul 16 16:59:54 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4E5E5769FA; Tue, 16 Jul 2002 16:59:54 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.c
Message-Id: <20020716145954.4E5E5769FA@mail.ossp.org>
Date: Tue, 16 Jul 2002 16:59:54 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   16-Jul-2002 16:59:54
  Branch: HEAD                             Handle: 2002071615595300

  Modified files:
    ossp-pkg/fsl            fsl.c

  Log:
    now read and check syntax, no recursion required

  Summary:
    Revision    Changes     Path
    1.6         +91 -7      ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 fsl.c
  --- ossp-pkg/fsl/fsl.c	16 Jul 2002 13:49:29 -0000	1.5
  +++ ossp-pkg/fsl/fsl.c	16 Jul 2002 14:59:53 -0000	1.6
  @@ -176,12 +176,19 @@
       int rc;
       buf_t buf;
       fsl_rc_t rv;
  -    cfg_t      *cfg     = NULL;
  -    cfg_rc_t    cfgrv   = CFG_OK;
  -    cfg_node_t *cfgroot;
  +    cfg_t           *cfg     = NULL;
  +    cfg_rc_t         cfgrv   = CFG_OK;
  +    cfg_node_t      *cfgseq;
  +    cfg_node_t      *cfgdir;
  +    cfg_node_t      *cfgarg;
  +    cfg_node_type_t  cfgtype;
  +    int              cfgnumc;
  +    char *argident;
  +    char *argmatch;
  +    char *argl2spec;
       char *cp;
   
  -fprintf(stderr, "DEBUG: main(ident=\"%s\", logopt=0x%.8lx, facility=0x%.8lx)\n", ident, (unsigned long)logopt, (unsigned long)facility);
  +fprintf(stderr, "DEBUG: BEGIN ident=\"%s\", logopt=0x%.8lx, facility=0x%.8lx\n", ident, (unsigned long)logopt, (unsigned long)facility);
       buf.base = NULL;
       buf.used = 0;
       buf.size = 0;
  @@ -195,15 +202,92 @@
       if ((cfgrv = cfg_import(cfg, NULL, CFG_FMT_CFG, buf.base, buf.size)) != CFG_OK) {
           (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_import() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
   
  -    if ((cfgrv = cfg_node_root(cfg, &cfgroot)) != CFG_OK) {
  +    /*  find root and check if it is a sequence and has one or more directives below it */
  +    if ((cfgrv = cfg_node_root(cfg, &cfgseq)) != CFG_OK) {
           (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_root() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  -    traverse(cfg, cfgroot);
  +    //FIXME traverse(cfg, cfgseq); /* DEBUG */
  +    if ((cfgrv = cfg_node_get(cfg, cfgseq, CFG_NODE_ATTR_TYPE, &cfgtype)) != CFG_OK) {
  +        (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +    if (cfgtype != CFG_NODE_TYPE_SEQ) {
  +        fprintf(stderr, "ERROR: expected sequence\n"); CU(1); }
  +    if ((cfgrv = cfg_node_get(cfg, cfgseq, CFG_NODE_ATTR_CHILDS, &cfgnumc)) != CFG_OK) {
  +        (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(CFG_NODE_ATTR_CHILDS) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +    if (cfgnumc < 1) {
  +        fprintf(stderr, "ERROR: sequence is missing directives, expected 1, got %d\n", cfgnumc); CU(1); }
  +
  +    /*  get first directive below sequence */
  +    if ((cfgrv = cfg_node_get(cfg, cfgseq, CFG_NODE_ATTR_CHILD1, &cfgdir)) != CFG_OK) {
  +        (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(CFG_NODE_ATTR_CHILD1) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +    while (cfgdir != NULL) {
  +        //FIXME fprintf(stderr, "DEBUG: cfgdir=0x%.8lx\n", (unsigned long)cfgdir);
  +
  +        /*  check if operating on a directive which has exactly three arguments */
  +        if ((cfgrv = cfg_node_get(cfg, cfgdir, CFG_NODE_ATTR_TYPE, &cfgtype)) != CFG_OK) {
  +            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +        if (cfgtype != CFG_NODE_TYPE_DIR) {
  +            fprintf(stderr, "ERROR: expected directive\n"); CU(1); }
  +        if ((cfgrv = cfg_node_get(cfg, cfgdir, CFG_NODE_ATTR_CHILDS, &cfgnumc)) != CFG_OK) {
  +            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(CFG_NODE_ATTR_CHILDS) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +        if (cfgnumc != 3) {
  +            fprintf(stderr, "ERROR: directive missing arguments, expected 3, got %d\n", cfgnumc); CU(1); }
  +
  +        /*  process first child of directive, check if it is an argument and has a valid token attached */
  +        if ((cfgrv = cfg_node_get(cfg, cfgdir, CFG_NODE_ATTR_CHILD1, &cfgarg)) != CFG_OK) {
  +            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(CFG_NODE_ATTR_CHILD1) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +        if (cfgarg == NULL) {
  +            fprintf(stderr, "ERROR: argument \"argident\" is NULL\n"); CU(1); }
  +        if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_TYPE, &cfgtype)) != CFG_OK) {
  +            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +        if (cfgtype != CFG_NODE_TYPE_ARG) {
  +            fprintf(stderr, "ERROR: expected argument\n"); CU(1); }
  +        if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_TOKEN, &argident)) != CFG_OK) {
  +            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(CFG_NODE_ATTR_TOKEN) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +        if (argident == NULL) {
  +            fprintf(stderr, "ERROR: argument \"argident\" has NULL data\n"); CU(1); }
  +
  +        /*  process right brother of argument, check if it is an argument and has a valid token attached */
  +        if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_RBROTH, &cfgarg)) != CFG_OK) {
  +            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(CFG_NODE_ATTR_RBROTH) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +        if (cfgarg == NULL) {
  +            fprintf(stderr, "ERROR: argument \"argmatch\" is NULL\n"); CU(1); }
  +        if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_TYPE, &cfgtype)) != CFG_OK) {
  +            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +        if (cfgtype != CFG_NODE_TYPE_ARG) {
  +            fprintf(stderr, "ERROR: expected argument\n"); CU(1); }
  +        if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_TOKEN, &argmatch)) != CFG_OK) {
  +            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(CFG_NODE_ATTR_TOKEN) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +        if (argmatch == NULL) {
  +            fprintf(stderr, "ERROR: argument \"argmatch\" has NULL data\n"); CU(1); }
  +
  +        /*  process right brother of argument, check if it is an argument and has a valid token attached */
  +        if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_RBROTH, &cfgarg)) != CFG_OK) {
  +            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(CFG_NODE_ATTR_RBROTH) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +        if (cfgarg == NULL) {
  +            fprintf(stderr, "ERROR: argument \"argl2spec\" is NULL\n"); CU(1); }
  +        if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_TYPE, &cfgtype)) != CFG_OK) {
  +            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +        if (cfgtype != CFG_NODE_TYPE_ARG) {
  +            fprintf(stderr, "ERROR: expected argument\n"); CU(1); }
  +        if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_TOKEN, &argl2spec)) != CFG_OK) {
  +            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(CFG_NODE_ATTR_TOKEN) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +        if (argl2spec == NULL) {
  +            fprintf(stderr, "ERROR: argument \"argl2spec\" has NULL data\n"); CU(1); }
  +
  +        /*  process the directive using the three arguments found */
  +        fprintf(stderr, "DEBUG: argident=%s, argmatch=%s, argl2spec=%s\n", argident, argmatch, argl2spec);
  +
  +        /*  get right brother of current directive */
  +        if ((cfgrv = cfg_node_get(cfg, cfgdir, CFG_NODE_ATTR_RBROTH, &cfgdir)) != CFG_OK) {
  +            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(CFG_NODE_ATTR_RBROTH) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +    }
  +
  +
   #if 0
       if ((cfgrv = cfg_destroy(cfg)) != CFG_OK) {
           (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_destroy() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
   #endif
   
  -fprintf(stderr, "DEBUG: main() OK, buf.base=0x%.8lx, buf.used=%d, buf.size=%d\n", (unsigned long)buf.base, (int)buf.used, (int)buf.size);
  +fprintf(stderr, "DEBUG: *END*, buf.base=0x%.8lx, buf.used=%d, buf.size=%d\n", (unsigned long)buf.base, (int)buf.used, (int)buf.size);
       CU(0);
   CUS:
       FIXMEopenlog(ident, logopt, facility);

From ossp-cvs-owner@ossp.org  Tue Jul 16 17:59:45 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5A99C769CA; Tue, 16 Jul 2002 17:59:45 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.c l2.sample.cfg
Message-Id: <20020716155945.5A99C769CA@mail.ossp.org>
Date: Tue, 16 Jul 2002 17:59:45 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   16-Jul-2002 17:59:45
  Branch: HEAD                             Handle: 2002071616594400

  Modified files:
    ossp-pkg/fsl            fsl.c l2.sample.cfg

  Log:
    integrated lib_pcre

  Summary:
    Revision    Changes     Path
    1.7         +93 -10     ossp-pkg/fsl/fsl.c
    1.2         +1  -1      ossp-pkg/fsl/l2.sample.cfg
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 fsl.c
  --- ossp-pkg/fsl/fsl.c	16 Jul 2002 14:59:53 -0000	1.6
  +++ ossp-pkg/fsl/fsl.c	16 Jul 2002 15:59:44 -0000	1.7
  @@ -108,6 +108,35 @@
       { 0,           NULL       }
   };
   
  +static struct {
  +    int facility;
  +    char *string;
  +} facility2string[] = {
  +    { LOG_AUTH,     "auth"     },
  +    { LOG_AUTHPRIV, "authpriv" },
  +    { LOG_CONSOLE,  "console"  },
  +    { LOG_CRON,     "cron"     },
  +    { LOG_DAEMON,   "daemon"   },
  +    { LOG_FTP,      "ftp"      },
  +    { LOG_KERN,     "kern"     },
  +    { LOG_LPR,      "lpr"      },
  +    { LOG_MAIL,     "mail"     },
  +    { LOG_NEWS,     "news"     },
  +    { LOG_SECURITY, "security" },
  +    { LOG_SYSLOG,   "syslog"   },
  +    { LOG_USER,     "user"     },
  +    { LOG_UUCP,     "uucp"     },
  +    { LOG_LOCAL0,   "local0"   },
  +    { LOG_LOCAL1,   "local1"   },
  +    { LOG_LOCAL2,   "local2"   },
  +    { LOG_LOCAL3,   "local3"   },
  +    { LOG_LOCAL4,   "local4"   },
  +    { LOG_LOCAL5,   "local5"   },
  +    { LOG_LOCAL6,   "local6"   },
  +    { LOG_LOCAL7,   "local7"   },
  +    { 0,            NULL       }
  +};
  +
   /* internal context structure */
   static struct {
       FILE *log;
  @@ -176,8 +205,8 @@
       int rc;
       buf_t buf;
       fsl_rc_t rv;
  -    cfg_t           *cfg     = NULL;
  -    cfg_rc_t         cfgrv   = CFG_OK;
  +    cfg_t           *cfg;
  +    cfg_rc_t         cfgrv;
       cfg_node_t      *cfgseq;
       cfg_node_t      *cfgdir;
       cfg_node_t      *cfgarg;
  @@ -187,11 +216,38 @@
       char *argmatch;
       char *argl2spec;
       char *cp;
  +    int   i;
  +    char *cpIdent;
  +    char *cpFacility;
  +    char *cpISF;
  +#define OVECSIZE 30 //FIXME find a good place for this
  +    int ovec[OVECSIZE];
  +    const char   **acpMatch;
   
  -fprintf(stderr, "DEBUG: BEGIN ident=\"%s\", logopt=0x%.8lx, facility=0x%.8lx\n", ident, (unsigned long)logopt, (unsigned long)facility);
  +    cfg = NULL;
       buf.base = NULL;
       buf.used = 0;
       buf.size = 0;
  +    cpISF = NULL;
  +
  +fprintf(stderr, "DEBUG: BEGIN ident=\"%s\", logopt=0x%.8lx, facility=0x%.8lx\n", ident, (unsigned long)logopt, (unsigned long)facility);
  +
  +    /* create IdentSlashFacility */
  +    cpIdent = ident != NULL ? ident : "unknown";
  +    cpFacility = "unknown";
  +    for (i = 0; facility2string[i].string != NULL; i++) {
  +        if (facility == facility2string[i].facility) {
  +            cpFacility = facility2string[i].string;
  +            break;
  +        }
  +    }
  +    if ((cpISF = (char *)malloc(strlen(cpIdent) + 1 + strlen(cpFacility) + 1)) == NULL) {
  +        fprintf(stderr, "ERROR: malloc() failed\n"); CU(1); }
  +    cpISF[0] = '\0';
  +    strcat(cpISF, cpIdent);
  +    strcat(cpISF, "/");
  +    strcat(cpISF, cpFacility);
  +fprintf(stderr, "DEBUG: ISF=\"%s\"\n", cpISF);
   
       if ((cfgrv = cfg_create(&cfg)) != CFG_OK) {
           (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_create() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  @@ -276,21 +332,48 @@
           /*  process the directive using the three arguments found */
           fprintf(stderr, "DEBUG: argident=%s, argmatch=%s, argl2spec=%s\n", argident, argmatch, argl2spec);
   
  +        {
  +            pcre       *pcreRegex;
  +            pcre_extra *pcreExtra;
  +            const char *cpError;
  +            int         iError;
  +            int         nMatch;
  +
  +            /* compile regular expression into finite state machine and optimize */
  +            if ((pcreRegex = pcre_compile(argmatch, PCRE_CASELESS, &cpError, &iError, NULL)) == NULL) {
  +                fprintf(stderr, "ERROR: pcre_compile() failed with error %s (%d)\n", cpError, iError); CU(1); }
  +            pcreExtra = pcre_study(pcreRegex, 0, &cpError);
  +            if (cpError != NULL) {
  +                fprintf(stderr, "ERROR: pcre_study() failed with error %s\n", cpError); CU(1); }
  +
  +            nMatch = pcre_exec(pcreRegex, pcreExtra, cpISF, strlen(cpISF), 0, 0, ovec, OVECSIZE);
  +            fprintf(stderr, "DEBUG: nMatch=%d when \"%s\" is used against \"%s\"\n", nMatch, argmatch, cpISF);
  +            if (nMatch >= 1) {
  +                int i;
  +                char *cp;
  +                pcre_get_substring_list(cpISF, ovec, nMatch, &acpMatch);
  +                if (acpMatch != NULL)
  +                    for (i = 0; i < nMatch; i++)
  +                        fprintf(stderr, "DEBUG: regex reference[%d]=\'%s\'\n", i, acpMatch[i] == NULL ? "(UNDEFINED)" : acpMatch[i]);
  +            }
  +        }
  +
           /*  get right brother of current directive */
           if ((cfgrv = cfg_node_get(cfg, cfgdir, CFG_NODE_ATTR_RBROTH, &cfgdir)) != CFG_OK) {
               (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(CFG_NODE_ATTR_RBROTH) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
       }
   
  -
  -#if 0
  -    if ((cfgrv = cfg_destroy(cfg)) != CFG_OK) {
  -        (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_destroy() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  -#endif
  -
   fprintf(stderr, "DEBUG: *END*, buf.base=0x%.8lx, buf.used=%d, buf.size=%d\n", (unsigned long)buf.base, (int)buf.used, (int)buf.size);
       CU(0);
  -CUS:
       FIXMEopenlog(ident, logopt, facility);
  +CUS:
  +    if (cpISF != NULL)
  +        free(cpISF);
  +#if 0
  +    if (cfg != NULL)
  +        if ((cfgrv = cfg_destroy(cfg)) != CFG_OK) {
  +            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_destroy() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +#endif
       return;
   }
   
  Index: ossp-pkg/fsl/l2.sample.cfg
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 l2.sample.cfg
  --- ossp-pkg/fsl/l2.sample.cfg	16 Jul 2002 13:20:33 -0000	1.1
  +++ ossp-pkg/fsl/l2.sample.cfg	16 Jul 2002 15:59:44 -0000	1.2
  @@ -3,7 +3,7 @@
       # SAMPLE FAKESYSLOG CONFIGURATION FILE
       #
   
  -ident sendmail/.* q{
  +ident (.*)a(.*)/(.*)p q{
       debug:
           prefix(prefix="%%b %%d %%H:%%M:%%S <%%L> $1 [%%P]: ",
           timezone=local)

From ossp-cvs-owner@ossp.org  Wed Jul 17 11:57:45 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5CF26765E5; Wed, 17 Jul 2002 11:57:45 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.c fsl.pod
Message-Id: <20020717095745.5CF26765E5@mail.ossp.org>
Date: Wed, 17 Jul 2002 11:57:45 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   17-Jul-2002 11:57:45
  Branch: HEAD                             Handle: 2002071710574400

  Modified files:
    ossp-pkg/fsl            fsl.c fsl.pod

  Log:
    substituting the $0 ... $9 variables

  Summary:
    Revision    Changes     Path
    1.8         +70 -5      ossp-pkg/fsl/fsl.c
    1.3         +3  -2      ossp-pkg/fsl/fsl.pod
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 fsl.c
  --- ossp-pkg/fsl/fsl.c	16 Jul 2002 15:59:44 -0000	1.7
  +++ ossp-pkg/fsl/fsl.c	17 Jul 2002 09:57:44 -0000	1.8
  @@ -200,6 +200,61 @@
       return;
   }
   
  +/* Substitutes $[0-9] in inbuf[inlen] with captured strings passed through capary[nary].
  + * Returns the number of characters (to be) written to output.  Output can be suppressed
  + * by passing a NULL outpbuf. The terminating NUL is not counted but will be written!
  + */
  +int substcapture(const char *inbuf, int inlen, const char **capary, int nary, char *outbuf)
  +{
  +    int  i; /* input cursor, current position */
  +    int  n; /* outbuf cursor, next possible write position */
  +    int  m; /* index to capary */
  +    char c; /* scratch variable */
  +
  +    i = 0;
  +    n = 0;
  +    while (i < inlen - 1 /* last char cannot start a two-character sequence, skipping it allows safe look ahead */) {
  +        c = inbuf[i];
  +        if (c == '$') {
  +            c = inbuf[i+1];
  +            if (c == '$') {
  +                if (outbuf != NULL)
  +                    outbuf[n] = '$';
  +                i+=2;
  +                n++;
  +            }
  +            else if ((c >= '0') && (c <= '9')) {
  +                m = c - '0';
  +                if (outbuf != NULL) {
  +                    outbuf[n] = '\0';
  +                    strcat(&outbuf[n], ((m < nary) && (capary[m] != NULL)) ? capary[m] : "");
  +                }
  +                i+=2;
  +                n+= ((m < nary) && (capary[m] != NULL)) ? strlen(capary[m]) : 0;
  +            }
  +            else {
  +                if (outbuf != NULL)
  +                    outbuf[n] = '$';
  +                i++;
  +                n++;
  +                if (outbuf != NULL)
  +                    outbuf[n] = c;
  +                i++;
  +                n++;
  +            }
  +        }
  +        else {
  +            if (outbuf != NULL)
  +                outbuf[n] = c;
  +            i++;
  +            n++;
  +        }
  +    }
  +    if (outbuf != NULL)
  +        outbuf[n] = '\0';
  +    return n;
  +}
  +
   void openlog(const char *ident, int logopt, int facility)
   {
       int rc;
  @@ -215,8 +270,9 @@
       char *argident;
       char *argmatch;
       char *argl2spec;
  -    char *cp;
  -    int   i;
  +    char *cp; /* scratch variable */
  +    int   i;  /* scratch variable */
  +    int   n;  /* scratch variable */
       char *cpIdent;
       char *cpFacility;
       char *cpISF;
  @@ -228,12 +284,14 @@
       buf.base = NULL;
       buf.used = 0;
       buf.size = 0;
  +    cpIdent = NULL;
       cpISF = NULL;
   
   fprintf(stderr, "DEBUG: BEGIN ident=\"%s\", logopt=0x%.8lx, facility=0x%.8lx\n", ident, (unsigned long)logopt, (unsigned long)facility);
   
       /* create IdentSlashFacility */
  -    cpIdent = ident != NULL ? ident : "unknown";
  +    if ((cpIdent = strdup((ident != NULL) ? ident : "unknown")) == NULL) {
  +        fprintf(stderr, "ERROR: strdup() failed\n"); CU(1); }
       cpFacility = "unknown";
       for (i = 0; facility2string[i].string != NULL; i++) {
           if (facility == facility2string[i].facility) {
  @@ -349,12 +407,17 @@
               nMatch = pcre_exec(pcreRegex, pcreExtra, cpISF, strlen(cpISF), 0, 0, ovec, OVECSIZE);
               fprintf(stderr, "DEBUG: nMatch=%d when \"%s\" is used against \"%s\"\n", nMatch, argmatch, cpISF);
               if (nMatch >= 1) {
  -                int i;
  -                char *cp;
                   pcre_get_substring_list(cpISF, ovec, nMatch, &acpMatch);
                   if (acpMatch != NULL)
                       for (i = 0; i < nMatch; i++)
                           fprintf(stderr, "DEBUG: regex reference[%d]=\'%s\'\n", i, acpMatch[i] == NULL ? "(UNDEFINED)" : acpMatch[i]);
  +                n = substcapture(argl2spec, strlen(argl2spec), acpMatch, nMatch, NULL);
  +                if ((cp = (char *)malloc(n + 1)) == NULL) {
  +                    fprintf(stderr, "ERROR: malloc() failed\n"); CU(1); }
  +                if (substcapture(argl2spec, strlen(argl2spec), acpMatch, nMatch, cp) != n) {
  +                    fprintf(stderr, "ERROR: substcapture() failed\n"); CU(1); }
  +                fprintf(stderr, "DEBUG: cp=\"%s\"\n", cp);
  +                free(cp);
               }
           }
   
  @@ -369,6 +432,8 @@
   CUS:
       if (cpISF != NULL)
           free(cpISF);
  +    if (cpIdent != NULL)
  +        free(cpIdent);
   #if 0
       if (cfg != NULL)
           if ((cfgrv = cfg_destroy(cfg)) != CFG_OK) {
  Index: ossp-pkg/fsl/fsl.pod
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 fsl.pod
  --- ossp-pkg/fsl/fsl.pod	16 Jul 2002 13:20:33 -0000	1.2
  +++ ossp-pkg/fsl/fsl.pod	17 Jul 2002 09:57:44 -0000	1.3
  @@ -75,8 +75,9 @@
   
   The configuration section contains an B<OSSP l2> specification enclosed
   in curly brackets and terminated with a semicolon. The B<OSSP l2>
  -specification may contain $1, $2, ... variables which are filled in from
  -the I<match> regex parts enclosed in round brackets.
  +specification may contain $1 ... $9 variables which are filled in from
  +the I<match> regex parts enclosed in round brackets. The $0 variable
  +captures the wholly match and $$ diverts to a single escaped $.
   
   An B<OSSP l2> channel tree is build from each matching section and all
   found trees are merged together with a "null" channel to form a single

From ossp-cvs-owner@ossp.org  Wed Jul 17 13:19:30 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7FF3B765D6; Wed, 17 Jul 2002 13:19:30 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ut_fmtcb.c
Message-Id: <20020717111930.7FF3B765D6@mail.ossp.org>
Date: Wed, 17 Jul 2002 13:19:30 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   17-Jul-2002 13:19:30
  Branch: HEAD                             Handle: 2002071712193000

  Modified files:
    ossp-pkg/l2             l2_ut_fmtcb.c

  Log:
    added errno formatter from lmtp2nntp

  Summary:
    Revision    Changes     Path
    1.5         +10 -0      ossp-pkg/l2/l2_ut_fmtcb.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ut_fmtcb.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 l2_ut_fmtcb.c
  --- ossp-pkg/l2/l2_ut_fmtcb.c	2 Jan 2002 17:07:38 -0000	1.4
  +++ ossp-pkg/l2/l2_ut_fmtcb.c	17 Jul 2002 11:19:30 -0000	1.5
  @@ -30,6 +30,7 @@
   #include <ctype.h>
   
   #include "l2.h"
  +#include <errno.h>
   
   l2_result_t 
   l2_util_fmt_string(
  @@ -188,3 +189,12 @@
       return L2_OK;
   }
   
  +l2_result_t 
  +l2_util_fmt_errno(
  +    l2_context_t *ctx, const char id, const char *param,
  +    char *bufptr, size_t bufsize, size_t *buflen, va_list *ap)
  +{   
  +    sprintf(bufptr, "(%d) %s", errno, strerror(errno)); 
  +    *buflen = strlen(bufptr);
  +    return L2_OK;
  +}

From ossp-cvs-owner@ossp.org  Wed Jul 17 13:22:08 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 73D0A765D6; Wed, 17 Jul 2002 13:22:08 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2.h.in
Message-Id: <20020717112208.73D0A765D6@mail.ossp.org>
Date: Wed, 17 Jul 2002 13:22:08 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   17-Jul-2002 13:22:08
  Branch: HEAD                             Handle: 2002071712220800

  Modified files:
    ossp-pkg/l2             l2.h.in

  Log:
    added errno formatter from lmtp2nntp

  Summary:
    Revision    Changes     Path
    1.29        +1  -0      ossp-pkg/l2/l2.h.in
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2.h.in
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 l2.h.in
  --- ossp-pkg/l2/l2.h.in	30 Jan 2002 15:42:44 -0000	1.28
  +++ ossp-pkg/l2/l2.h.in	17 Jul 2002 11:22:08 -0000	1.29
  @@ -246,6 +246,7 @@
   l2_result_t   l2_util_s2l           (const char *string, size_t maxlen, int sep, unsigned int *levelmask);
   l2_result_t   l2_util_fmt_string    (l2_context_t *, const char, const char *, char *, size_t, size_t *, va_list *);
   l2_result_t   l2_util_fmt_dump      (l2_context_t *, const char, const char *, char *, size_t, size_t *, va_list *);
  +l2_result_t   l2_util_fmt_errno     (l2_context_t *, const char, const char *, char *, size_t, size_t *, va_list *);
   
   #endif /* __L2_H__ */
   

From ossp-cvs-owner@ossp.org  Wed Jul 17 13:28:06 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BA328765E7; Wed, 17 Jul 2002 13:28:06 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_config.c
Message-Id: <20020717112806.BA328765E7@mail.ossp.org>
Date: Wed, 17 Jul 2002 13:28:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   17-Jul-2002 13:28:06
  Branch: HEAD                             Handle: 2002071712280600

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c

  Log:
    errno formatter is now part of l2

  Summary:
    Revision    Changes     Path
    1.79        +1  -10     ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.78 -r1.79 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	2 Jul 2002 07:49:01 -0000	1.78
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	17 Jul 2002 11:28:06 -0000	1.79
  @@ -96,15 +96,6 @@
       return L2_OK;
   }
   
  -static l2_result_t 
  -formatter_errno(l2_context_t *_ctx, const char id, const char *param,
  -          char *bufptr, size_t bufsize, size_t *buflen, va_list *ap)
  -{
  -    sprintf(bufptr, "(%d) %s", errno, strerror(errno));
  -    *buflen = strlen(bufptr);
  -    return L2_OK;
  -}
  -
   static var_syntax_t syntax_regex = {
       '\\',         /* escape        */ 
       '$',          /* varinit       */ 
  @@ -143,7 +134,7 @@
           fprintf(stderr, "%s:Error: logging failed to register string formatter\n", ctx->progname);
           CU(ERR_EXECUTION);
       }
  -    if (l2_env_formatter(ctx->l2_env, 'm', formatter_errno, NULL) != L2_OK) {
  +    if (l2_env_formatter(ctx->l2_env, 'm', l2_util_fmt_errno, NULL) != L2_OK) {
           fprintf(stderr, "%s:Error: logging failed to register errno formatter\n", ctx->progname);
           CU(ERR_EXECUTION);
       }

From ossp-cvs-owner@ossp.org  Wed Jul 17 15:22:03 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 08914765D6; Wed, 17 Jul 2002 15:22:02 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_env.c
Message-Id: <20020717132202.08914765D6@mail.ossp.org>
Date: Wed, 17 Jul 2002 15:22:02 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   17-Jul-2002 15:22:02
  Branch: HEAD                             Handle: 2002071714220200

  Modified files:
    ossp-pkg/l2             l2_env.c

  Log:
    align l2_env_strerror with l2.h

  Summary:
    Revision    Changes     Path
    1.8         +2  -0      ossp-pkg/l2/l2_env.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_env.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 l2_env.c
  --- ossp-pkg/l2/l2_env.c	2 Jan 2002 17:07:38 -0000	1.7
  +++ ossp-pkg/l2/l2_env.c	17 Jul 2002 13:22:02 -0000	1.8
  @@ -183,6 +183,7 @@
   
       /* translate result value into corresponding string */
       if      (rv == L2_OK)      sz = "everything ok";
  +    else if (rv == L2_OK_PASS) sz = "everything ok - pass downstream";
       else if (rv == L2_ERR_ARG) sz = "invalid argument";
       else if (rv == L2_ERR_USE) sz = "invalid use";
       else if (rv == L2_ERR_MEM) sz = "no more memory available";
  @@ -191,6 +192,7 @@
       else if (rv == L2_ERR_FMT) sz = "formatting error";
       else if (rv == L2_ERR_INT) sz = "internal error";
       else if (rv == L2_ERR_SYN) sz = "syntax error";
  +    else if (rv == L2_ERR_CH)  sz = "no (more) channel found";
       else                       sz = "unknown error";
       n = l2_util_sprintf(cpBuf, nBuf, "%s", sz);
       cpBuf += n;

From ossp-cvs-owner@ossp.org  Wed Jul 17 16:23:11 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0B8AC765D6; Wed, 17 Jul 2002 16:23:11 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl Makefile.in
Message-Id: <20020717142311.0B8AC765D6@mail.ossp.org>
Date: Wed, 17 Jul 2002 16:23:11 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   17-Jul-2002 16:23:10
  Branch: HEAD                             Handle: 2002071715231000

  Modified files:
    ossp-pkg/fsl            Makefile.in

  Log:
    clean/distclean interdependencies

  Summary:
    Revision    Changes     Path
    1.3         +4  -2      ossp-pkg/fsl/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/Makefile.in
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 Makefile.in
  --- ossp-pkg/fsl/Makefile.in	12 Jul 2002 17:26:23 -0000	1.2
  +++ ossp-pkg/fsl/Makefile.in	17 Jul 2002 14:23:10 -0000	1.3
  @@ -135,14 +135,16 @@
   	-$(RM) -r .libs >/dev/null 2>&1 || $(TRUE)
   	-$(RM) *.o *.lo
   
  -distclean: clean
  +distclean:
   	@$(MAKE) $(MFLAGS) _SUBDIRS_distclean
  +	@$(MAKE) $(MFLAGS) clean
   	-$(RM) config.log config.status config.cache
   	-$(RM) Makefile config.h sa-config
   	-$(RM) libtool
   
  -realclean: distclean
  +realclean: 
   	@$(MAKE) $(MFLAGS) _SUBDIRS_realclean
  +	@$(MAKE) $(MFLAGS) distclean
   	-$(RM) fsl.3
   	-$(RM) configure config.h.in
   	-$(RM) shtool

From ossp-cvs-owner@ossp.org  Wed Jul 17 16:28:01 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DA260765D6; Wed, 17 Jul 2002 16:28:00 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.c
Message-Id: <20020717142800.DA260765D6@mail.ossp.org>
Date: Wed, 17 Jul 2002 16:28:00 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   17-Jul-2002 16:28:00
  Branch: HEAD                             Handle: 2002071715280000

  Modified files:
    ossp-pkg/fsl            fsl.c

  Log:
    unify error messages; integrate lib_l2

  Summary:
    Revision    Changes     Path
    1.9         +86 -48     ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 fsl.c
  --- ossp-pkg/fsl/fsl.c	17 Jul 2002 09:57:44 -0000	1.8
  +++ ossp-pkg/fsl/fsl.c	17 Jul 2002 14:28:00 -0000	1.9
  @@ -181,18 +181,18 @@
       fprintf(stderr, "DEBUG: diving\n");
       while (cfgnode != NULL) {
           if ((cfgrv = cfg_node_get(cfg, cfgnode, CFG_NODE_ATTR_TOKEN, &cp)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(T) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_TOKEN) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
           if ((cfgrv = cfg_node_get(cfg, cfgnode, CFG_NODE_ATTR_TYPE, &cfgtyp)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(t) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
           if ((cfgrv = cfg_node_get(cfg, cfgnode, CFG_NODE_ATTR_CHILDS, &cfgchilds)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(c) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_CHILDS) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
           fprintf(stderr, "DEBUG: cfgnode=0x%.8lx[%d], *cp=\"%s\", type=%d\n", (unsigned long)cfgnode, cfgchilds, cp, cfgtyp);
           if ((cfgrv = cfg_node_get(cfg, cfgnode, CFG_NODE_ATTR_CHILD1, &cfgchld)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(C) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_CHILD1) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
           if (cfgchld != NULL)
               traverse(cfg, cfgchld);
           if ((cfgrv = cfg_node_get(cfg, cfgnode, CFG_NODE_ATTR_RBROTH, &cfgnode)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(R) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_RBROTH) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
       }
       fprintf(stderr, "DEBUG: climbing\n");
       CU(0);
  @@ -279,6 +279,10 @@
   #define OVECSIZE 30 //FIXME find a good place for this
       int ovec[OVECSIZE];
       const char   **acpMatch;
  +    l2_env_t     *l2_env;
  +    l2_channel_t *l2_nch; /* noop channel */
  +    l2_channel_t *ch; /* scratch variable */
  +    l2_result_t   l2rv;
   
       cfg = NULL;
       buf.base = NULL;
  @@ -286,12 +290,32 @@
       buf.size = 0;
       cpIdent = NULL;
       cpISF = NULL;
  +    l2_env = NULL;
  +    l2_nch = NULL;
   
   fprintf(stderr, "DEBUG: BEGIN ident=\"%s\", logopt=0x%.8lx, facility=0x%.8lx\n", ident, (unsigned long)logopt, (unsigned long)facility);
   
  +    /* create L2 environment */
  +    if ((l2rv = l2_env_create(&l2_env)) != L2_OK) {
  +        cp = l2_env_strerror(l2_env, l2rv); fprintf(stderr, "Error: failed to create L2 environment (%d)\n", l2rv); CU(1); }
  +    if ((l2rv = l2_env_levels(l2_env, L2_LEVEL_ALL, L2_LEVEL_NONE)) != L2_OK) {
  +        cp = l2_env_strerror(l2_env, l2rv); fprintf(stderr, "Error: logging failed to set global logging level defaults %s(%d)\n", cp, l2rv); CU(1); }
  +    if ((l2rv = l2_env_formatter(l2_env, 'D', l2_util_fmt_dump, NULL)) != L2_OK) {
  +        cp = l2_env_strerror(l2_env, l2rv); fprintf(stderr, "Error: logging failed to register dump formatter %s(%d)\n", cp, l2rv); CU(1); }
  +    if ((l2rv = l2_env_formatter(l2_env, 'S', l2_util_fmt_string, NULL)) != L2_OK) {
  +        cp = l2_env_strerror(l2_env, l2rv); fprintf(stderr, "Error: logging failed to register string formatter %s(%d)\n", cp, l2rv); CU(1); }
  +    if ((l2rv = l2_env_formatter(l2_env, 'm', l2_util_fmt_errno, NULL)) != L2_OK) {
  +        cp = l2_env_strerror(l2_env, l2rv); fprintf(stderr, "Error: logging failed to register errno formatter %s(%d)\n", cp, l2rv); CU(1); }
  +    if ((l2rv = l2_env_settimer(l2_env, 20)) != L2_OK) { //FIXME do we need this?
  +        cp = l2_env_strerror(l2_env, l2rv); fprintf(stderr, "Error: failed to configure timer %s(%d)\n", cp, l2rv); CU(1); }
  +
  +    /* create L2 noop channel */
  +    if ((l2rv = l2_channel_create(&l2_nch, l2_env, "noop")) != L2_OK) {
  +        cp = l2_env_strerror(l2_env, l2rv); fprintf(stderr, "Error: logging failed to create noop channel; %s(%d)\n", cp, l2rv); CU(1); }
  +
       /* create IdentSlashFacility */
       if ((cpIdent = strdup((ident != NULL) ? ident : "unknown")) == NULL) {
  -        fprintf(stderr, "ERROR: strdup() failed\n"); CU(1); }
  +        fprintf(stderr, "Error: strdup() failed\n"); CU(1); }
       cpFacility = "unknown";
       for (i = 0; facility2string[i].string != NULL; i++) {
           if (facility == facility2string[i].facility) {
  @@ -300,7 +324,7 @@
           }
       }
       if ((cpISF = (char *)malloc(strlen(cpIdent) + 1 + strlen(cpFacility) + 1)) == NULL) {
  -        fprintf(stderr, "ERROR: malloc() failed\n"); CU(1); }
  +        fprintf(stderr, "Error: malloc() failed\n"); CU(1); }
       cpISF[0] = '\0';
       strcat(cpISF, cpIdent);
       strcat(cpISF, "/");
  @@ -308,88 +332,87 @@
   fprintf(stderr, "DEBUG: ISF=\"%s\"\n", cpISF);
   
       if ((cfgrv = cfg_create(&cfg)) != CFG_OK) {
  -        (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_create() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +        (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_create() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
   
  -    if ((rv = readfileorallfiles(&buf, "config.log")) != FSL_OK)
  -        fprintf(stderr, "DEBUG: error#%d, system#%s(%d)\n", rv, strerror(errno), errno);
  +    if ((rv = readfileorallfiles(&buf, "config.log")) != FSL_OK) {
  +        fprintf(stderr, "DEBUG: error %d, system %s(%d)\n", rv, strerror(errno), errno); CU(1); }
   
       if ((cfgrv = cfg_import(cfg, NULL, CFG_FMT_CFG, buf.base, buf.size)) != CFG_OK) {
  -        (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_import() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +        (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_import() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
   
       /*  find root and check if it is a sequence and has one or more directives below it */
       if ((cfgrv = cfg_node_root(cfg, &cfgseq)) != CFG_OK) {
  -        (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_root() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +        (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_root() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
       //FIXME traverse(cfg, cfgseq); /* DEBUG */
       if ((cfgrv = cfg_node_get(cfg, cfgseq, CFG_NODE_ATTR_TYPE, &cfgtype)) != CFG_OK) {
  -        (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +        (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
       if (cfgtype != CFG_NODE_TYPE_SEQ) {
  -        fprintf(stderr, "ERROR: expected sequence\n"); CU(1); }
  +        fprintf(stderr, "Error: expected sequence\n"); CU(1); }
       if ((cfgrv = cfg_node_get(cfg, cfgseq, CFG_NODE_ATTR_CHILDS, &cfgnumc)) != CFG_OK) {
  -        (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(CFG_NODE_ATTR_CHILDS) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +        (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_CHILDS) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
       if (cfgnumc < 1) {
  -        fprintf(stderr, "ERROR: sequence is missing directives, expected 1, got %d\n", cfgnumc); CU(1); }
  +        fprintf(stderr, "Error: sequence is missing directives, expected 1, got %d\n", cfgnumc); CU(1); }
   
       /*  get first directive below sequence */
       if ((cfgrv = cfg_node_get(cfg, cfgseq, CFG_NODE_ATTR_CHILD1, &cfgdir)) != CFG_OK) {
  -        (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(CFG_NODE_ATTR_CHILD1) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +        (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_CHILD1) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
       while (cfgdir != NULL) {
           //FIXME fprintf(stderr, "DEBUG: cfgdir=0x%.8lx\n", (unsigned long)cfgdir);
   
           /*  check if operating on a directive which has exactly three arguments */
           if ((cfgrv = cfg_node_get(cfg, cfgdir, CFG_NODE_ATTR_TYPE, &cfgtype)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
           if (cfgtype != CFG_NODE_TYPE_DIR) {
  -            fprintf(stderr, "ERROR: expected directive\n"); CU(1); }
  +            fprintf(stderr, "Error: expected directive\n"); CU(1); }
           if ((cfgrv = cfg_node_get(cfg, cfgdir, CFG_NODE_ATTR_CHILDS, &cfgnumc)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(CFG_NODE_ATTR_CHILDS) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_CHILDS) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
           if (cfgnumc != 3) {
  -            fprintf(stderr, "ERROR: directive missing arguments, expected 3, got %d\n", cfgnumc); CU(1); }
  +            fprintf(stderr, "Error: directive missing arguments, expected 3, got %d\n", cfgnumc); CU(1); }
   
           /*  process first child of directive, check if it is an argument and has a valid token attached */
           if ((cfgrv = cfg_node_get(cfg, cfgdir, CFG_NODE_ATTR_CHILD1, &cfgarg)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(CFG_NODE_ATTR_CHILD1) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_CHILD1) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
           if (cfgarg == NULL) {
  -            fprintf(stderr, "ERROR: argument \"argident\" is NULL\n"); CU(1); }
  +            fprintf(stderr, "Error: argument \"argident\" is NULL\n"); CU(1); }
           if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_TYPE, &cfgtype)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
           if (cfgtype != CFG_NODE_TYPE_ARG) {
  -            fprintf(stderr, "ERROR: expected argument\n"); CU(1); }
  +            fprintf(stderr, "Error: expected argument\n"); CU(1); }
           if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_TOKEN, &argident)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(CFG_NODE_ATTR_TOKEN) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_TOKEN) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
           if (argident == NULL) {
  -            fprintf(stderr, "ERROR: argument \"argident\" has NULL data\n"); CU(1); }
  +            fprintf(stderr, "Error: argument \"argident\" has NULL data\n"); CU(1); }
   
           /*  process right brother of argument, check if it is an argument and has a valid token attached */
           if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_RBROTH, &cfgarg)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(CFG_NODE_ATTR_RBROTH) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_RBROTH) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
           if (cfgarg == NULL) {
  -            fprintf(stderr, "ERROR: argument \"argmatch\" is NULL\n"); CU(1); }
  +            fprintf(stderr, "Error: argument \"argmatch\" is NULL\n"); CU(1); }
           if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_TYPE, &cfgtype)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
           if (cfgtype != CFG_NODE_TYPE_ARG) {
  -            fprintf(stderr, "ERROR: expected argument\n"); CU(1); }
  +            fprintf(stderr, "Error: expected argument\n"); CU(1); }
           if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_TOKEN, &argmatch)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(CFG_NODE_ATTR_TOKEN) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_TOKEN) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
           if (argmatch == NULL) {
  -            fprintf(stderr, "ERROR: argument \"argmatch\" has NULL data\n"); CU(1); }
  +            fprintf(stderr, "Error: argument \"argmatch\" has NULL data\n"); CU(1); }
   
           /*  process right brother of argument, check if it is an argument and has a valid token attached */
           if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_RBROTH, &cfgarg)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(CFG_NODE_ATTR_RBROTH) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_RBROTH) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
           if (cfgarg == NULL) {
  -            fprintf(stderr, "ERROR: argument \"argl2spec\" is NULL\n"); CU(1); }
  +            fprintf(stderr, "Error: argument \"argl2spec\" is NULL\n"); CU(1); }
           if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_TYPE, &cfgtype)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
           if (cfgtype != CFG_NODE_TYPE_ARG) {
  -            fprintf(stderr, "ERROR: expected argument\n"); CU(1); }
  +            fprintf(stderr, "Error: expected argument\n"); CU(1); }
           if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_TOKEN, &argl2spec)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(CFG_NODE_ATTR_TOKEN) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_TOKEN) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
           if (argl2spec == NULL) {
  -            fprintf(stderr, "ERROR: argument \"argl2spec\" has NULL data\n"); CU(1); }
  +            fprintf(stderr, "Error: argument \"argl2spec\" has NULL data\n"); CU(1); }
   
           /*  process the directive using the three arguments found */
           fprintf(stderr, "DEBUG: argident=%s, argmatch=%s, argl2spec=%s\n", argident, argmatch, argl2spec);
  -
           {
               pcre       *pcreRegex;
               pcre_extra *pcreExtra;
  @@ -399,10 +422,10 @@
   
               /* compile regular expression into finite state machine and optimize */
               if ((pcreRegex = pcre_compile(argmatch, PCRE_CASELESS, &cpError, &iError, NULL)) == NULL) {
  -                fprintf(stderr, "ERROR: pcre_compile() failed with error %s (%d)\n", cpError, iError); CU(1); }
  +                fprintf(stderr, "Error: pcre_compile() failed with error %s (%d)\n", cpError, iError); CU(1); }
               pcreExtra = pcre_study(pcreRegex, 0, &cpError);
               if (cpError != NULL) {
  -                fprintf(stderr, "ERROR: pcre_study() failed with error %s\n", cpError); CU(1); }
  +                fprintf(stderr, "Error: pcre_study() failed with error %s\n", cpError); CU(1); }
   
               nMatch = pcre_exec(pcreRegex, pcreExtra, cpISF, strlen(cpISF), 0, 0, ovec, OVECSIZE);
               fprintf(stderr, "DEBUG: nMatch=%d when \"%s\" is used against \"%s\"\n", nMatch, argmatch, cpISF);
  @@ -413,18 +436,29 @@
                           fprintf(stderr, "DEBUG: regex reference[%d]=\'%s\'\n", i, acpMatch[i] == NULL ? "(UNDEFINED)" : acpMatch[i]);
                   n = substcapture(argl2spec, strlen(argl2spec), acpMatch, nMatch, NULL);
                   if ((cp = (char *)malloc(n + 1)) == NULL) {
  -                    fprintf(stderr, "ERROR: malloc() failed\n"); CU(1); }
  +                    fprintf(stderr, "Error: malloc() failed\n"); CU(1); }
                   if (substcapture(argl2spec, strlen(argl2spec), acpMatch, nMatch, cp) != n) {
  -                    fprintf(stderr, "ERROR: substcapture() failed\n"); CU(1); }
  -                fprintf(stderr, "DEBUG: cp=\"%s\"\n", cp);
  -                free(cp);
  +                    fprintf(stderr, "Error: substcapture() failed\n"); CU(1); }
  +                argl2spec = cp;
  +        fprintf(stderr, "DEBUG: argident=%s, argmatch=%s, argl2spec=%s\n", argident, argmatch, argl2spec);
  +
  +                /* create L2 channel throuh spec and link into root channel */
  +                if ((l2rv = l2_spec(&ch, l2_env, argl2spec)) != L2_OK) {
  +                    cp = l2_env_strerror(l2_env, l2rv); fprintf(stderr, "Error: logging failed to create stream from spec %s(%d)\n", cp, l2rv); CU(1); }
  +                if ((l2rv = l2_channel_link(l2_nch, L2_LINK_CHILD, ch, NULL)) != L2_OK) {
  +                    cp = l2_env_strerror(l2_env, l2rv); fprintf(stderr, "Error: logging failed to link child channel %s(%d)\n", cp, l2rv); CU(1); }
  +
  +                free(argl2spec);
               }
           }
   
           /*  get right brother of current directive */
           if ((cfgrv = cfg_node_get(cfg, cfgdir, CFG_NODE_ATTR_RBROTH, &cfgdir)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_node_get(CFG_NODE_ATTR_RBROTH) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_RBROTH) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
       }
  +    if ((l2rv = l2_channel_open(l2_nch)) != L2_OK) {
  +        cp = l2_env_strerror(l2_env, l2rv); fprintf(stderr, "Error: logging failed to open channel stream %s(%d)\n", cp, l2rv); CU(1); }
  +    l2_channel_log(l2_nch, L2_LEVEL_DEBUG, "Hello, World!"); //FIXME DEBUG
   
   fprintf(stderr, "DEBUG: *END*, buf.base=0x%.8lx, buf.used=%d, buf.size=%d\n", (unsigned long)buf.base, (int)buf.used, (int)buf.size);
       CU(0);
  @@ -434,10 +468,14 @@
           free(cpISF);
       if (cpIdent != NULL)
           free(cpIdent);
  +    if (l2_nch != NULL)
  +        l2_channel_destroy(l2_nch);
  +    if (l2_env != NULL)
  +        l2_env_destroy(l2_env);
   #if 0
       if (cfg != NULL)
           if ((cfgrv = cfg_destroy(cfg)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "ERROR: cfg_destroy() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_destroy() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
   #endif
       return;
   }

From ossp-cvs-owner@ossp.org  Wed Jul 17 16:35:09 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 750E0763DA; Wed, 17 Jul 2002 16:35:09 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg cfg_node.c
Message-Id: <20020717143509.750E0763DA@mail.ossp.org>
Date: Wed, 17 Jul 2002 16:35:09 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-Jul-2002 16:35:09
  Branch: HEAD                             Handle: 2002071715350900

  Modified files:
    ossp-pkg/cfg            cfg_node.c

  Log:
    make available at least the recursive traversal function

  Summary:
    Revision    Changes     Path
    1.10        +18 -26     ossp-pkg/cfg/cfg_node.c
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/cfg_node.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 cfg_node.c
  --- ossp-pkg/cfg/cfg_node.c	13 Jul 2002 18:52:41 -0000	1.9
  +++ ossp-pkg/cfg/cfg_node.c	17 Jul 2002 14:35:09 -0000	1.10
  @@ -354,22 +354,8 @@
       void *cb_ctx_cmp, 
       cfg_node_t **cont)
   {
  -#if 0
  -    cfg_rc_t rc;
  -
  -    if (cfg == NULL)
  -        return CFG_ERR_ARG;
  -    if (node != NULL) {
  -        cb_fct(cb_ctx, node);
  -        if (node->child1 != NULL)
  -            if ((rc = cfg_node_apply(node->child1, cb_fct, cb_ctx)) != CFG_OK)
  -                return rc;
  -        if (node->rbroth != NULL)
  -            if ((rc = cfg_node_apply(node->rbroth, cb_fct, cb_ctx)) != CFG_OK)
  -                return rc;
  -    }
  -#endif
  -    return CFG_OK;
  +    /* FIXME */
  +    return CFG_ERR_INT;
   }
   
   cfg_rc_t 
  @@ -383,18 +369,24 @@
   {
       cfg_rc_t rc;
   
  -    if (cfg == NULL || node == NULL || cb_fct_cb == NULL)
  +    if (cfg == NULL)
           return CFG_ERR_ARG;
  -    node = NULL;
  -    if (node == NULL)
  -        if ((node = cfg->root) == NULL)
  -            return CFG_OK;
  -    do {
  -        if ((rc = cb_fct_cb(cfg, node, cb_ctx_cb)) != CFG_OK)
  +    if (node != NULL) {
  +        if ((rc = cb_fct_cmp(cfg, node, cb_ctx_cmp)) == CFG_OK)
  +            cb_fct_cb(cfg, node, cb_ctx_cb);
  +        if (rc != CFG_ERR_NDE)
               return rc;
  -    } while ((rc = cfg_node_find(cfg, node, cb_fct_cmp, cb_ctx_cmp, &node)) == CFG_OK);
  -    if (rc != CFG_OK && rc != CFG_ERR_NDE)
  -        return rc;
  +        if (node->child1 != NULL)
  +            if ((rc = cfg_node_apply(cfg, node->child1, 
  +                                     cb_fct_cmp, cb_ctx_cmp,
  +                                     cb_fct_cb, cb_ctx_cb)) != CFG_OK)
  +                return rc;
  +        if (node->rbroth != NULL)
  +            if ((rc = cfg_node_apply(cfg, node->rbroth, 
  +                                     cb_fct_cmp, cb_ctx_cmp,
  +                                     cb_fct_cb, cb_ctx_cb)) != CFG_OK)
  +                return rc;
  +    }
       return CFG_OK;
   }
   

From ossp-cvs-owner@ossp.org  Wed Jul 17 16:39:57 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 99552763DA; Wed, 17 Jul 2002 16:39:57 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg cfg_node.c
Message-Id: <20020717143957.99552763DA@mail.ossp.org>
Date: Wed, 17 Jul 2002 16:39:57 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-Jul-2002 16:39:57
  Branch: HEAD                             Handle: 2002071715395700

  Modified files:
    ossp-pkg/cfg            cfg_node.c

  Log:
    now finally use the grid allocator for the tree nodes

  Summary:
    Revision    Changes     Path
    1.11        +7  -5      ossp-pkg/cfg/cfg_node.c
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/cfg_node.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 cfg_node.c
  --- ossp-pkg/cfg/cfg_node.c	17 Jul 2002 14:35:09 -0000	1.10
  +++ ossp-pkg/cfg/cfg_node.c	17 Jul 2002 14:39:57 -0000	1.11
  @@ -39,11 +39,12 @@
   cfg_rc_t cfg_node_create(cfg_t *cfg, cfg_node_t **node)
   {
       cfg_node_t *n;
  +    cfg_rc_t rc;
   
       if (node == NULL)
           return CFG_ERR_ARG;
  -    if ((n = malloc(sizeof(cfg_node_t))) == NULL)
  -        return CFG_ERR_SYS;
  +    if ((rc = cfg_grid_alloc(cfg->grid_nodes, (void **)&n)) != CFG_OK)
  +        return rc;
       n->parent   = NULL;
       n->lbroth   = NULL;
       n->rbroth   = NULL;
  @@ -65,18 +66,19 @@
           free(node->token);
       if (node->srcname != NULL)
           free(node->srcname);
  -    free(node);
  +    cfg_grid_free(cfg->grid_nodes, node);
       return CFG_OK;
   }
   
   cfg_rc_t cfg_node_clone(cfg_t *cfg, cfg_node_t *node, cfg_node_t **node2)
   {
       cfg_node_t *n;
  +    cfg_rc_t rc;
   
       if (node == NULL || node2 == NULL)
           return CFG_ERR_ARG;
  -    if ((n = malloc(sizeof(cfg_node_t))) == NULL)
  -        return CFG_ERR_SYS;
  +    if ((rc = cfg_grid_alloc(cfg->grid_nodes, (void **)&n)) != CFG_OK)
  +        return rc;
       n->parent   = node->parent;
       n->lbroth   = node->lbroth;
       n->rbroth   = node->rbroth;

From ossp-cvs-owner@ossp.org  Wed Jul 17 16:48:09 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DF56A765EF; Wed, 17 Jul 2002 16:48:08 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg cfg_syn_scan.l sample.cfg
Message-Id: <20020717144808.DF56A765EF@mail.ossp.org>
Date: Wed, 17 Jul 2002 16:48:08 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-Jul-2002 16:48:08
  Branch: HEAD                             Handle: 2002071715480800

  Modified files:
    ossp-pkg/cfg            cfg_syn_scan.l sample.cfg

  Log:
    allow C-style block comments to nest

  Summary:
    Revision    Changes     Path
    1.9         +8  -1      ossp-pkg/cfg/cfg_syn_scan.l
    1.4         +2  -1      ossp-pkg/cfg/sample.cfg
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/cfg_syn_scan.l
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 cfg_syn_scan.l
  --- ossp-pkg/cfg/cfg_syn_scan.l	10 Jul 2002 12:00:23 -0000	1.8
  +++ ossp-pkg/cfg/cfg_syn_scan.l	17 Jul 2002 14:48:08 -0000	1.9
  @@ -82,6 +82,7 @@
       /* local variables */
       char  caStr[1024];
       char *cpStr = NULL;
  +    int   nCommentOpen = 0;
       int   nQuoteOpen = 0;
       char  cQuoteOpen = '\0';
       char  cQuoteClose = '\0';
  @@ -93,10 +94,16 @@
   
       /* C-style block comment */
   "/*" {
  +    nCommentOpen = 1;
       BEGIN(SS_CO_C);
   }
  +<SS_CO_C>"/*" {
  +    nCommentOpen++;
  +}
   <SS_CO_C>"*/" {
  -    BEGIN(INITIAL);
  +    nCommentOpen--;
  +    if (nCommentOpen == 0)
  +        BEGIN(INITIAL);
   }
   <SS_CO_C>(.|\n) {
       /* no-op */
  Index: ossp-pkg/cfg/sample.cfg
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 sample.cfg
  --- ossp-pkg/cfg/sample.cfg	8 Jul 2002 13:45:28 -0000	1.3
  +++ ossp-pkg/cfg/sample.cfg	17 Jul 2002 14:48:08 -0000	1.4
  @@ -30,7 +30,8 @@
   ;
   /* a C/C++ style block comment which 
      goes over multiple lines and even includes 
  -   some special /* ** * / characters */
  +   some special / * ** * / characters and
  +   a nested /* co/**/mment */, too. */
   
   "==== Single-Quoted Strings ====";
   'foo';

From ossp-cvs-owner@ossp.org  Wed Jul 17 16:55:00 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 642BA765EF; Wed, 17 Jul 2002 16:55:00 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg cfg_buf.c cfg_buf.h
Message-Id: <20020717145500.642BA765EF@mail.ossp.org>
Date: Wed, 17 Jul 2002 16:55:00 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-Jul-2002 16:55:00
  Branch: HEAD                             Handle: 2002071715545901

  Modified files:
    ossp-pkg/cfg            cfg_buf.c cfg_buf.h

  Log:
    cfg_buf_t is an opaque type

  Summary:
    Revision    Changes     Path
    1.4         +6  -0      ossp-pkg/cfg/cfg_buf.c
    1.4         +0  -6      ossp-pkg/cfg/cfg_buf.h
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/cfg_buf.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 cfg_buf.c
  --- ossp-pkg/cfg/cfg_buf.c	5 Jul 2002 17:15:14 -0000	1.3
  +++ ossp-pkg/cfg/cfg_buf.c	17 Jul 2002 14:54:59 -0000	1.4
  @@ -36,6 +36,12 @@
   #include "cfg_buf.h"
   #include "cfg_fmt.h"
   
  +struct cfg_buf_st {
  +    char   *buf_ptr;
  +    size_t  buf_size;
  +    size_t  buf_len;
  +};
  +
   cfg_rc_t cfg_buf_create(cfg_buf_t **buf)
   {
       if (buf == NULL)
  Index: ossp-pkg/cfg/cfg_buf.h
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 cfg_buf.h
  --- ossp-pkg/cfg/cfg_buf.h	5 Jul 2002 17:15:14 -0000	1.3
  +++ ossp-pkg/cfg/cfg_buf.h	17 Jul 2002 14:55:00 -0000	1.4
  @@ -36,12 +36,6 @@
   struct cfg_buf_st;
   typedef struct cfg_buf_st cfg_buf_t;
   
  -struct cfg_buf_st {
  -    char   *buf_ptr;
  -    size_t  buf_size;
  -    size_t  buf_len;
  -};
  -
   extern cfg_rc_t cfg_buf_create  (cfg_buf_t **buf);
   extern cfg_rc_t cfg_buf_resize  (cfg_buf_t  *buf, signed int n);
   extern cfg_rc_t cfg_buf_format  (cfg_buf_t  *buf, const char *fmt, ...);

From ossp-cvs-owner@ossp.org  Wed Jul 17 17:04:10 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0BE1476431; Wed, 17 Jul 2002 17:04:09 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg cfg.h cfg_buf.c cfg_buf.h cfg_data.c cfg_data...
Message-Id: <20020717150409.0BE1476431@mail.ossp.org>
Date: Wed, 17 Jul 2002 17:04:09 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-Jul-2002 17:04:09
  Branch: HEAD                             Handle: 2002071716040800

  Modified files:
    ossp-pkg/cfg            cfg.h cfg_buf.c cfg_buf.h cfg_data.c cfg_data.h
                            cfg_fmt.c cfg_fmt.h cfg_grid.c cfg_grid.h
                            cfg_main.c cfg_main.h cfg_node.c cfg_node.h
                            cfg_util.h

  Log:
    Ops, fix a typo I cannot imagine where it comes from...

  Summary:
    Revision    Changes     Path
    1.10        +1  -1      ossp-pkg/cfg/cfg.h
    1.5         +1  -1      ossp-pkg/cfg/cfg_buf.c
    1.5         +1  -1      ossp-pkg/cfg/cfg_buf.h
    1.4         +1  -1      ossp-pkg/cfg/cfg_data.c
    1.4         +1  -1      ossp-pkg/cfg/cfg_data.h
    1.2         +1  -1      ossp-pkg/cfg/cfg_fmt.c
    1.2         +1  -1      ossp-pkg/cfg/cfg_fmt.h
    1.2         +1  -1      ossp-pkg/cfg/cfg_grid.c
    1.2         +1  -1      ossp-pkg/cfg/cfg_grid.h
    1.4         +1  -1      ossp-pkg/cfg/cfg_main.c
    1.3         +1  -1      ossp-pkg/cfg/cfg_main.h
    1.12        +1  -1      ossp-pkg/cfg/cfg_node.c
    1.6         +1  -1      ossp-pkg/cfg/cfg_node.h
    1.2         +1  -1      ossp-pkg/cfg/cfg_util.h
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/cfg.h
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 cfg.h
  --- ossp-pkg/cfg/cfg.h	16 Jul 2002 13:48:25 -0000	1.9
  +++ ossp-pkg/cfg/cfg.h	17 Jul 2002 15:04:08 -0000	1.10
  @@ -20,7 +20,7 @@
   **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  -**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRCFG, STRICT LIABILITY,
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
  Index: ossp-pkg/cfg/cfg_buf.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 cfg_buf.c
  --- ossp-pkg/cfg/cfg_buf.c	17 Jul 2002 14:54:59 -0000	1.4
  +++ ossp-pkg/cfg/cfg_buf.c	17 Jul 2002 15:04:08 -0000	1.5
  @@ -20,7 +20,7 @@
   **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  -**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRCFG, STRICT LIABILITY,
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
  Index: ossp-pkg/cfg/cfg_buf.h
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 cfg_buf.h
  --- ossp-pkg/cfg/cfg_buf.h	17 Jul 2002 14:55:00 -0000	1.4
  +++ ossp-pkg/cfg/cfg_buf.h	17 Jul 2002 15:04:08 -0000	1.5
  @@ -20,7 +20,7 @@
   **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  -**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRCFG, STRICT LIABILITY,
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
  Index: ossp-pkg/cfg/cfg_data.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 cfg_data.c
  --- ossp-pkg/cfg/cfg_data.c	10 Jul 2002 19:26:32 -0000	1.3
  +++ ossp-pkg/cfg/cfg_data.c	17 Jul 2002 15:04:08 -0000	1.4
  @@ -20,7 +20,7 @@
   **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  -**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRCFG, STRICT LIABILITY,
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
  Index: ossp-pkg/cfg/cfg_data.h
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 cfg_data.h
  --- ossp-pkg/cfg/cfg_data.h	10 Jul 2002 19:26:32 -0000	1.3
  +++ ossp-pkg/cfg/cfg_data.h	17 Jul 2002 15:04:08 -0000	1.4
  @@ -20,7 +20,7 @@
   **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  -**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRCFG, STRICT LIABILITY,
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
  Index: ossp-pkg/cfg/cfg_fmt.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 cfg_fmt.c
  --- ossp-pkg/cfg/cfg_fmt.c	3 Jul 2002 13:25:34 -0000	1.1
  +++ ossp-pkg/cfg/cfg_fmt.c	17 Jul 2002 15:04:08 -0000	1.2
  @@ -20,7 +20,7 @@
   **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  -**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRCFG, STRICT LIABILITY,
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
  Index: ossp-pkg/cfg/cfg_fmt.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 cfg_fmt.h
  --- ossp-pkg/cfg/cfg_fmt.h	3 Jul 2002 13:25:34 -0000	1.1
  +++ ossp-pkg/cfg/cfg_fmt.h	17 Jul 2002 15:04:08 -0000	1.2
  @@ -20,7 +20,7 @@
   **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  -**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRCFG, STRICT LIABILITY,
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
  Index: ossp-pkg/cfg/cfg_grid.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 cfg_grid.c
  --- ossp-pkg/cfg/cfg_grid.c	3 Jul 2002 13:25:34 -0000	1.1
  +++ ossp-pkg/cfg/cfg_grid.c	17 Jul 2002 15:04:08 -0000	1.2
  @@ -20,7 +20,7 @@
   **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  -**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRCFG, STRICT LIABILITY,
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
  Index: ossp-pkg/cfg/cfg_grid.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 cfg_grid.h
  --- ossp-pkg/cfg/cfg_grid.h	3 Jul 2002 13:25:34 -0000	1.1
  +++ ossp-pkg/cfg/cfg_grid.h	17 Jul 2002 15:04:08 -0000	1.2
  @@ -20,7 +20,7 @@
   **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  -**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRCFG, STRICT LIABILITY,
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
  Index: ossp-pkg/cfg/cfg_main.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 cfg_main.c
  --- ossp-pkg/cfg/cfg_main.c	10 Jul 2002 19:26:32 -0000	1.3
  +++ ossp-pkg/cfg/cfg_main.c	17 Jul 2002 15:04:08 -0000	1.4
  @@ -20,7 +20,7 @@
   **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  -**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRCFG, STRICT LIABILITY,
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
  Index: ossp-pkg/cfg/cfg_main.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 cfg_main.h
  --- ossp-pkg/cfg/cfg_main.h	10 Jul 2002 14:46:28 -0000	1.2
  +++ ossp-pkg/cfg/cfg_main.h	17 Jul 2002 15:04:08 -0000	1.3
  @@ -20,7 +20,7 @@
   **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  -**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRCFG, STRICT LIABILITY,
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
  Index: ossp-pkg/cfg/cfg_node.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 cfg_node.c
  --- ossp-pkg/cfg/cfg_node.c	17 Jul 2002 14:39:57 -0000	1.11
  +++ ossp-pkg/cfg/cfg_node.c	17 Jul 2002 15:04:08 -0000	1.12
  @@ -20,7 +20,7 @@
   **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  -**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRCFG, STRICT LIABILITY,
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
  Index: ossp-pkg/cfg/cfg_node.h
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 cfg_node.h
  --- ossp-pkg/cfg/cfg_node.h	12 Jul 2002 19:59:33 -0000	1.5
  +++ ossp-pkg/cfg/cfg_node.h	17 Jul 2002 15:04:08 -0000	1.6
  @@ -20,7 +20,7 @@
   **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  -**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRCFG, STRICT LIABILITY,
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
  Index: ossp-pkg/cfg/cfg_util.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 cfg_util.h
  --- ossp-pkg/cfg/cfg_util.h	3 Jul 2002 13:25:34 -0000	1.1
  +++ ossp-pkg/cfg/cfg_util.h	17 Jul 2002 15:04:08 -0000	1.2
  @@ -20,7 +20,7 @@
   **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  -**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRCFG, STRICT LIABILITY,
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.

From ossp-cvs-owner@ossp.org  Wed Jul 17 17:26:37 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 47F9F763DA; Wed, 17 Jul 2002 17:26:37 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.c
Message-Id: <20020717152637.47F9F763DA@mail.ossp.org>
Date: Wed, 17 Jul 2002 17:26:37 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   17-Jul-2002 17:26:37
  Branch: HEAD                             Handle: 2002071716263600

  Modified files:
    ossp-pkg/fsl            fsl.c

  Log:
    basic syslog calls work

  Summary:
    Revision    Changes     Path
    1.10        +55 -158    ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 fsl.c
  --- ossp-pkg/fsl/fsl.c	17 Jul 2002 14:28:00 -0000	1.9
  +++ ossp-pkg/fsl/fsl.c	17 Jul 2002 15:26:36 -0000	1.10
  @@ -139,36 +139,13 @@
   
   /* internal context structure */
   static struct {
  -    FILE *log;
  -    char *logfile;
  -    const char *ident;
  -    int logopt;
  -    int facility;
  -    int maskpri;
  +    l2_env_t     *l2_env;
  +    l2_channel_t *l2_nch;
   } ctx = { 
  -    NULL, LOGFILE, "unknown", 0, LOG_USER, 0xff
  +    NULL,
  +    NULL,
   };
   
  -void FIXMEopenlog(const char *ident, int logopt, int facility)
  -{
  -    /* remember parameters */
  -    ctx.ident    = ident;
  -    ctx.logopt   = logopt;
  -    ctx.facility = facility;
  -
  -    /* close perhaps still open logfile */
  -    if (ctx.log != NULL) {
  -        fclose(ctx.log);
  -        ctx.log = NULL;
  -    }
  -
  -    /* (re-)open new logfile */
  -    if (!(ctx.logopt & LOG_NDELAY) && ctx.log == NULL)
  -        if ((ctx.log = fopen(ctx.logfile, "a")) == NULL)
  -            return;
  -    return;
  -}
  -
   void traverse(cfg_t *cfg, cfg_node_t *cfgnode)
   {
       int rc;
  @@ -279,8 +256,6 @@
   #define OVECSIZE 30 //FIXME find a good place for this
       int ovec[OVECSIZE];
       const char   **acpMatch;
  -    l2_env_t     *l2_env;
  -    l2_channel_t *l2_nch; /* noop channel */
       l2_channel_t *ch; /* scratch variable */
       l2_result_t   l2rv;
   
  @@ -290,28 +265,42 @@
       buf.size = 0;
       cpIdent = NULL;
       cpISF = NULL;
  -    l2_env = NULL;
  -    l2_nch = NULL;
   
  -fprintf(stderr, "DEBUG: BEGIN ident=\"%s\", logopt=0x%.8lx, facility=0x%.8lx\n", ident, (unsigned long)logopt, (unsigned long)facility);
  +    /*FIXME this should be available to the user to help him finding out what the application passes along
  +     *      fprintf(stderr, "DEBUG: BEGIN ident=\"%s\", logopt=0x%.8lx, facility=0x%.8lx\n", ident, (unsigned long)logopt, (unsigned long)facility);
  +     */
  +
  +    /* check for repeated execution */
  +    if (ctx.l2_nch != NULL) {
  +        l2_channel_destroy(ctx.l2_nch);
  +        ctx.l2_nch = NULL;
  +    }
  +    if (ctx.l2_env != NULL) {
  +        l2_env_destroy(ctx.l2_env);
  +        ctx.l2_env = NULL;
  +    }
  +
  +    /*FIXME this should be available to the user to help him finding out what the application passes along
  +     *      currently we completely ignore logopt LOG_CONS, LOG_NDELAY, LOG_PERROR, LOG_PID
  +     */
   
       /* create L2 environment */
  -    if ((l2rv = l2_env_create(&l2_env)) != L2_OK) {
  -        cp = l2_env_strerror(l2_env, l2rv); fprintf(stderr, "Error: failed to create L2 environment (%d)\n", l2rv); CU(1); }
  -    if ((l2rv = l2_env_levels(l2_env, L2_LEVEL_ALL, L2_LEVEL_NONE)) != L2_OK) {
  -        cp = l2_env_strerror(l2_env, l2rv); fprintf(stderr, "Error: logging failed to set global logging level defaults %s(%d)\n", cp, l2rv); CU(1); }
  -    if ((l2rv = l2_env_formatter(l2_env, 'D', l2_util_fmt_dump, NULL)) != L2_OK) {
  -        cp = l2_env_strerror(l2_env, l2rv); fprintf(stderr, "Error: logging failed to register dump formatter %s(%d)\n", cp, l2rv); CU(1); }
  -    if ((l2rv = l2_env_formatter(l2_env, 'S', l2_util_fmt_string, NULL)) != L2_OK) {
  -        cp = l2_env_strerror(l2_env, l2rv); fprintf(stderr, "Error: logging failed to register string formatter %s(%d)\n", cp, l2rv); CU(1); }
  -    if ((l2rv = l2_env_formatter(l2_env, 'm', l2_util_fmt_errno, NULL)) != L2_OK) {
  -        cp = l2_env_strerror(l2_env, l2rv); fprintf(stderr, "Error: logging failed to register errno formatter %s(%d)\n", cp, l2rv); CU(1); }
  -    if ((l2rv = l2_env_settimer(l2_env, 20)) != L2_OK) { //FIXME do we need this?
  -        cp = l2_env_strerror(l2_env, l2rv); fprintf(stderr, "Error: failed to configure timer %s(%d)\n", cp, l2rv); CU(1); }
  +    if ((l2rv = l2_env_create(&ctx.l2_env)) != L2_OK) {
  +        cp = l2_env_strerror(ctx.l2_env, l2rv); fprintf(stderr, "Error: failed to create L2 environment (%d)\n", l2rv); CU(1); }
  +    if ((l2rv = l2_env_levels(ctx.l2_env, L2_LEVEL_ALL, L2_LEVEL_NONE)) != L2_OK) {
  +        cp = l2_env_strerror(ctx.l2_env, l2rv); fprintf(stderr, "Error: logging failed to set global logging level defaults %s(%d)\n", cp, l2rv); CU(1); }
  +    if ((l2rv = l2_env_formatter(ctx.l2_env, 'D', l2_util_fmt_dump, NULL)) != L2_OK) {
  +        cp = l2_env_strerror(ctx.l2_env, l2rv); fprintf(stderr, "Error: logging failed to register dump formatter %s(%d)\n", cp, l2rv); CU(1); }
  +    if ((l2rv = l2_env_formatter(ctx.l2_env, 'S', l2_util_fmt_string, NULL)) != L2_OK) {
  +        cp = l2_env_strerror(ctx.l2_env, l2rv); fprintf(stderr, "Error: logging failed to register string formatter %s(%d)\n", cp, l2rv); CU(1); }
  +    if ((l2rv = l2_env_formatter(ctx.l2_env, 'm', l2_util_fmt_errno, NULL)) != L2_OK) {
  +        cp = l2_env_strerror(ctx.l2_env, l2rv); fprintf(stderr, "Error: logging failed to register errno formatter %s(%d)\n", cp, l2rv); CU(1); }
  +    if ((l2rv = l2_env_settimer(ctx.l2_env, 20)) != L2_OK) { //FIXME do we need this?
  +        cp = l2_env_strerror(ctx.l2_env, l2rv); fprintf(stderr, "Error: failed to configure timer %s(%d)\n", cp, l2rv); CU(1); }
   
       /* create L2 noop channel */
  -    if ((l2rv = l2_channel_create(&l2_nch, l2_env, "noop")) != L2_OK) {
  -        cp = l2_env_strerror(l2_env, l2rv); fprintf(stderr, "Error: logging failed to create noop channel; %s(%d)\n", cp, l2rv); CU(1); }
  +    if ((l2rv = l2_channel_create(&ctx.l2_nch, ctx.l2_env, "noop")) != L2_OK) {
  +        cp = l2_env_strerror(ctx.l2_env, l2rv); fprintf(stderr, "Error: logging failed to create noop channel; %s(%d)\n", cp, l2rv); CU(1); }
   
       /* create IdentSlashFacility */
       if ((cpIdent = strdup((ident != NULL) ? ident : "unknown")) == NULL) {
  @@ -443,10 +432,10 @@
           fprintf(stderr, "DEBUG: argident=%s, argmatch=%s, argl2spec=%s\n", argident, argmatch, argl2spec);
   
                   /* create L2 channel throuh spec and link into root channel */
  -                if ((l2rv = l2_spec(&ch, l2_env, argl2spec)) != L2_OK) {
  -                    cp = l2_env_strerror(l2_env, l2rv); fprintf(stderr, "Error: logging failed to create stream from spec %s(%d)\n", cp, l2rv); CU(1); }
  -                if ((l2rv = l2_channel_link(l2_nch, L2_LINK_CHILD, ch, NULL)) != L2_OK) {
  -                    cp = l2_env_strerror(l2_env, l2rv); fprintf(stderr, "Error: logging failed to link child channel %s(%d)\n", cp, l2rv); CU(1); }
  +                if ((l2rv = l2_spec(&ch, ctx.l2_env, argl2spec)) != L2_OK) {
  +                    cp = l2_env_strerror(ctx.l2_env, l2rv); fprintf(stderr, "Error: logging failed to create stream from spec %s(%d)\n", cp, l2rv); CU(1); }
  +                if ((l2rv = l2_channel_link(ctx.l2_nch, L2_LINK_CHILD, ch, NULL)) != L2_OK) {
  +                    cp = l2_env_strerror(ctx.l2_env, l2rv); fprintf(stderr, "Error: logging failed to link child channel %s(%d)\n", cp, l2rv); CU(1); }
   
                   free(argl2spec);
               }
  @@ -456,42 +445,41 @@
           if ((cfgrv = cfg_node_get(cfg, cfgdir, CFG_NODE_ATTR_RBROTH, &cfgdir)) != CFG_OK) {
               (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_RBROTH) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
       }
  -    if ((l2rv = l2_channel_open(l2_nch)) != L2_OK) {
  -        cp = l2_env_strerror(l2_env, l2rv); fprintf(stderr, "Error: logging failed to open channel stream %s(%d)\n", cp, l2rv); CU(1); }
  -    l2_channel_log(l2_nch, L2_LEVEL_DEBUG, "Hello, World!"); //FIXME DEBUG
  +    if ((l2rv = l2_channel_open(ctx.l2_nch)) != L2_OK) {
  +        cp = l2_env_strerror(ctx.l2_env, l2rv); fprintf(stderr, "Error: logging failed to open channel stream %s(%d)\n", cp, l2rv); CU(1); }
   
  -fprintf(stderr, "DEBUG: *END*, buf.base=0x%.8lx, buf.used=%d, buf.size=%d\n", (unsigned long)buf.base, (int)buf.used, (int)buf.size);
       CU(0);
  -    FIXMEopenlog(ident, logopt, facility);
   CUS:
       if (cpISF != NULL)
           free(cpISF);
       if (cpIdent != NULL)
           free(cpIdent);
  -    if (l2_nch != NULL)
  -        l2_channel_destroy(l2_nch);
  -    if (l2_env != NULL)
  -        l2_env_destroy(l2_env);
   #if 0
       if (cfg != NULL)
           if ((cfgrv = cfg_destroy(cfg)) != CFG_OK) {
               (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_destroy() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
   #endif
  +    if (buf.base != NULL)
  +        free(buf.base);
       return;
   }
   
   void closelog(void)
   {
  -    /* close open logfile*/
  -    if (ctx.log != NULL) {
  -        fclose(ctx.log);
  -        ctx.log = NULL;
  +    if (ctx.l2_nch != NULL) {
  +        l2_channel_destroy(ctx.l2_nch);
  +        ctx.l2_nch = NULL;
  +    }
  +    if (ctx.l2_env != NULL) {
  +        l2_env_destroy(ctx.l2_env);
  +        ctx.l2_env = NULL;
       }
       return;
   }
   
   int setlogmask(int maskpri)
   {
  +#if 0
       int omask;
   
       /* remember the logging mask */
  @@ -499,6 +487,8 @@
       if (maskpri != 0)
           ctx.maskpri = maskpri;
       return omask;
  +#endif
  +    return maskpri; //FIXME
   }
   
   void syslog(int priority, const char *message, ...)
  @@ -518,103 +508,10 @@
   void vsyslog(int priority, const char *fmt, va_list args)
   #endif
   {
  -    time_t now;
  -    int saved_errno;
  -    char buf[2048];
  -    char *cpBuf;
  -    int nBuf;
  -    char caMsg[2048];
  -    char *cpMsg;
  -    char *cpFmt;
  -    int i;
  -    char *cpTime;
  -    char *cpLevel;
  -
  -    /* Check for invalid bits */
  -    if (priority & ~(LOG_PRIMASK|LOG_FACMASK))
  -        priority &= (LOG_PRIMASK|LOG_FACMASK);
  -
  -    /* stop processing if mask disabled this call */
  -    if (!(LOG_MASK(LOG_PRI(priority)) & ctx.maskpri))
  +    if (ctx.l2_nch == NULL)
           return;
   
  -    /* make sure we have a reasonable default for facility */
  -    if ((priority & LOG_FACMASK) == 0)
  -        priority |= ctx.facility;
  -
  -    /* remember errno for optional %m processing below */
  -    saved_errno = errno;
  -
  -    /* open logfile now (if it was delayed) */
  -    if (ctx.log == NULL)
  -        if ((ctx.log = fopen(ctx.logfile, "a")) == NULL)
  -            return;
  -
  -    /* determine current time */
  -    time(&now);
  -    cpTime = ctime(&now) + 4;
  -
  -    /* determine logging level name */
  -    cpLevel = "unknown";
  -    for (i = 0; level2string[i].string != NULL; i++) {
  -        if (LOG_PRI(priority) == level2string[i].level) {
  -            cpLevel = level2string[i].string;
  -            break;
  -        }
  -    }
  -    
  -    /* start output generation */
  -    cpBuf = buf;
  -    sprintf(cpBuf, "%.15s <%s> %s", cpTime, cpLevel, ctx.ident);
  -    nBuf = strlen(cpBuf);
  -
  -    /* optionally add process id */
  -    if (ctx.logopt & LOG_PID) {
  -        sprintf(cpBuf+nBuf, "[%d]", getpid());
  -        nBuf += strlen(cpBuf+nBuf);
  -    }
  -
  -    /* end prefix */
  -    strcpy(cpBuf+nBuf, ": ");
  -    nBuf += 2;
  -
  -    /* optionally expand %m in format string */
  -    cpFmt = (char *)fmt;
  -    if (strstr(cpFmt, "%m")) {
  -        cpMsg = caMsg;
  -        while (cpFmt[0] != '\0') {
  -            if (cpFmt[0] == '%' && cpFmt[1] == 'm') {
  -                strcpy(cpMsg, strerror(saved_errno));
  -                cpMsg += strlen(cpMsg);
  -                cpFmt += 2;
  -            } else {
  -                *cpMsg++ = *cpFmt++;
  -                *cpMsg = '\0';
  -            }
  -        }
  -        cpFmt = caMsg;
  -    }
  -
  -    /* append message to output buffer */
  -    vsprintf(cpBuf+nBuf, cpFmt, args);
  -    nBuf += strlen(cpBuf+nBuf);
  -
  -    /* append newline if still not present */
  -    if (cpBuf[nBuf-1] != '\n') {
  -        cpBuf[nBuf++] = '\n';
  -        cpBuf[nBuf] = '\0';
  -    }
  -
  -    /* now finally write output buffer to logfile */
  -    fwrite(cpBuf, nBuf, 1, ctx.log);
  -    fflush(ctx.log);
  -
  -#ifdef LOG_PERROR
  -    /* optionally also write output buffer to stderr */
  -    if (ctx.logopt & LOG_PERROR)
  -        fwrite(cpBuf, nBuf, 1, stderr);
  -#endif
  -
  +    l2_channel_vlog(ctx.l2_nch, L2_LEVEL_DEBUG, fmt, args);
       return;
   }
   

From ossp-cvs-owner@ossp.org  Wed Jul 17 20:47:10 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E3143763DA; Wed, 17 Jul 2002 20:47:09 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg cfg_syn_scan.l
Message-Id: <20020717184709.E3143763DA@mail.ossp.org>
Date: Wed, 17 Jul 2002 20:47:09 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-Jul-2002 20:47:09
  Branch: HEAD                             Handle: 2002071719470900

  Modified files:
    ossp-pkg/cfg            cfg_syn_scan.l

  Log:
    use definitions to remove redundancy

  Summary:
    Revision    Changes     Path
    1.10        +10 -8      ossp-pkg/cfg/cfg_syn_scan.l
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/cfg_syn_scan.l
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 cfg_syn_scan.l
  --- ossp-pkg/cfg/cfg_syn_scan.l	17 Jul 2002 14:48:08 -0000	1.9
  +++ ossp-pkg/cfg/cfg_syn_scan.l	17 Jul 2002 18:47:09 -0000	1.10
  @@ -77,6 +77,12 @@
   %x SS_PT
   %x SS_CO_C
   
  +/* the delimiting character for flexible quoting has to one a
  +   special character c, i.e., one of !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ or 
  +   in C code: isprint(c) && !isspace(c) && !iscntrl(c) && !isalpha(i) && !isdigit(i) */
  +FQDEL   [\!\"\#\$\%\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\@\[\\\]\^\_\`\{\|\}\~]
  +FQDELN [^\!\"\#\$\%\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\@\[\\\]\^\_\`\{\|\}\~]
  +
   %%
   
       /* local variables */
  @@ -209,19 +215,15 @@
       return 0;
   }
   
  -    /* flexible-quoted word (q(.)[^\1]\1)
  -       the delimiting character has to one a special character c, i.e.,
  -       one of !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ or in C code:
  -       isprint(c) && !isspace(c) && !iscntrl(c) && !isalpha(i) && !isdigit(i)
  -       */
  -"q"[\!\"\#\$\%\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\@\[\\\]\^\_\`\{\|\}\~] {
  +    /* flexible-quoted word (q(.)[^\1]\1) */
  +"q"{FQDEL} {
       cpStr = caStr;
       nQuoteOpen = 1;
       cQuoteOpen = yytext[1];
       cQuoteClose = closing_brace(yytext[1]);
       BEGIN(SS_FQ);
   }
  -<SS_FQ>\\[\!\"\#\$\%\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\@\[\\\]\^\_\`\{\|\}\~] {
  +<SS_FQ>\\{FQDEL} {
       if (yytext[1] == cQuoteOpen || yytext[1] == cQuoteClose) {
           *cpStr++ = yytext[1];
       }
  @@ -233,7 +235,7 @@
   <SS_FQ>\\\n[ \t]* {
       /* no-op */
   }
  -<SS_FQ>[^\!\"\#\$\%\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\@\[\\\]\^\_\`\{\|\}\~] {
  +<SS_FQ>{FQDELN} {
       char *cp = yytext;
       while (*cp != '\0')
           *cpStr++ = *cp++;

From ossp-cvs-owner@ossp.org  Wed Jul 17 20:47:53 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0D039763DA; Wed, 17 Jul 2002 20:47:53 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg 00TODO
Message-Id: <20020717184753.0D039763DA@mail.ossp.org>
Date: Wed, 17 Jul 2002 20:47:53 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-Jul-2002 20:47:52
  Branch: HEAD                             Handle: 2002071719475200

  Modified files:
    ossp-pkg/cfg            00TODO

  Log:
    remember issue

  Summary:
    Revision    Changes     Path
    1.8         +3  -0      ossp-pkg/cfg/00TODO
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/00TODO
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 00TODO
  --- ossp-pkg/cfg/00TODO	10 Jul 2002 12:00:23 -0000	1.7
  +++ ossp-pkg/cfg/00TODO	17 Jul 2002 18:47:52 -0000	1.8
  @@ -1,4 +1,7 @@
   
  +- in scanner: use an combination of dynamic buffer and atomic symbol/token sub-library 
  +  to allow first tokens of mostly arbitrary size and then to store the tokens
  +  redundancy-free.
   - Problem: \x00 oder \x{00} wird zu NUL-terminator -> use ptr+len instead
   - caStr/cpStr durch yyless/yymore??
   - syntax verification

From ossp-cvs-owner@ossp.org  Thu Jul 18 13:27:00 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8FDDC76543; Thu, 18 Jul 2002 13:26:59 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.c
Message-Id: <20020718112659.8FDDC76543@mail.ossp.org>
Date: Thu, 18 Jul 2002 13:26:59 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   18-Jul-2002 13:26:59
  Branch: HEAD                             Handle: 2002071812265900

  Modified files:
    ossp-pkg/fsl            fsl.c

  Log:
    flush with basic syslog level to l2 mask mapping working

  Summary:
    Revision    Changes     Path
    1.11        +168 -103   ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 fsl.c
  --- ossp-pkg/fsl/fsl.c	17 Jul 2002 15:26:36 -0000	1.10
  +++ ossp-pkg/fsl/fsl.c	18 Jul 2002 11:26:59 -0000	1.11
  @@ -92,26 +92,10 @@
   fsl_rc_t readallfiles      (buf_t *);
   fsl_rc_t appendfiletobuffer(buf_t *, const char *);
   
  -/* log level to string mapping */
  -static struct {
  -    int level;
  -    char *string;
  -} level2string[] = {
  -    { LOG_EMERG,   "emerg"    },
  -    { LOG_ALERT,   "alert"    },
  -    { LOG_CRIT,    "crit"     },
  -    { LOG_ERR,     "err"      },
  -    { LOG_WARNING, "warning"  },
  -    { LOG_NOTICE,  "notice"   },
  -    { LOG_INFO,    "info"     },
  -    { LOG_DEBUG,   "debug"    },
  -    { 0,           NULL       }
  -};
  -
   static struct {
       int facility;
       char *string;
  -} facility2string[] = {
  +} syslogfacility2string[] = {
       { LOG_AUTH,     "auth"     },
       { LOG_AUTHPRIV, "authpriv" },
       { LOG_CONSOLE,  "console"  },
  @@ -137,13 +121,38 @@
       { 0,            NULL       }
   };
   
  +static struct {
  +    int         level;
  +    char       *string;
  +    l2_level_t  deflevelmap;
  +} sysloglevel2string[] = {
  +    { LOG_EMERG,   "emerg",   L2_LEVEL_PANIC    },
  +    { LOG_ALERT,   "alert",   L2_LEVEL_PANIC    },
  +    { LOG_CRIT,    "crit",    L2_LEVEL_CRITICAL },
  +    { LOG_ERR,     "err",     L2_LEVEL_ERROR    },
  +    { LOG_WARNING, "warning", L2_LEVEL_WARNING  },
  +    { LOG_NOTICE,  "notice",  L2_LEVEL_NOTICE   },
  +    { LOG_INFO,    "info",    L2_LEVEL_INFO     },
  +    { LOG_DEBUG,   "debug",   L2_LEVEL_DEBUG    },
  +    { 0,           NULL,      0                 }
  +};
  +
  +typedef struct {
  +    int        syslog;
  +    l2_level_t l2;
  +} levelmap_t;
  +
   /* internal context structure */
   static struct {
       l2_env_t     *l2_env;
       l2_channel_t *l2_nch;
  +    levelmap_t   *levelmap;
  +    int           maskpri;
   } ctx = { 
       NULL,
       NULL,
  +    NULL,
  +    LOG_PRIMASK
   };
   
   void traverse(cfg_t *cfg, cfg_node_t *cfgnode)
  @@ -244,6 +253,9 @@
       cfg_node_t      *cfgarg;
       cfg_node_type_t  cfgtype;
       int              cfgnumc;
  +    int              cfgnume;
  +    char *cfgargtoka[3]; //FIXME hardcoded maximum number of arguments
  +    char *cfgargtok;
       char *argident;
       char *argmatch;
       char *argl2spec;
  @@ -279,11 +291,25 @@
           l2_env_destroy(ctx.l2_env);
           ctx.l2_env = NULL;
       }
  +    if (ctx.levelmap != NULL) {
  +        free(ctx.levelmap);
  +        ctx.levelmap = NULL;
  +    }
   
       /*FIXME this should be available to the user to help him finding out what the application passes along
        *      currently we completely ignore logopt LOG_CONS, LOG_NDELAY, LOG_PERROR, LOG_PID
        */
   
  +    /* create default sysloglevel to l2_level mapping */
  +    for (i = 0; sysloglevel2string[i].string != NULL; i++);
  +    if ((ctx.levelmap = (levelmap_t *)malloc(i * sizeof(levelmap_t))) == NULL) {
  +        fprintf(stderr, "Error: malloc() failed\n"); CU(1); }
  +    for (i = 0; sysloglevel2string[i].string != NULL; i++) {
  +        ctx.levelmap[i].syslog = sysloglevel2string[i].level;
  +        ctx.levelmap[i].l2     = sysloglevel2string[i].deflevelmap;
  +        fprintf(stderr, "DEBUG: ctx.levelmap[%d].syslog = 0x%.8lx, ctx.levelmap[%d].l2 = 0x%.8lx\n", i, (unsigned long)ctx.levelmap[i].syslog, i, (unsigned long)ctx.levelmap[i].l2);
  +    }
  +
       /* create L2 environment */
       if ((l2rv = l2_env_create(&ctx.l2_env)) != L2_OK) {
           cp = l2_env_strerror(ctx.l2_env, l2rv); fprintf(stderr, "Error: failed to create L2 environment (%d)\n", l2rv); CU(1); }
  @@ -306,9 +332,9 @@
       if ((cpIdent = strdup((ident != NULL) ? ident : "unknown")) == NULL) {
           fprintf(stderr, "Error: strdup() failed\n"); CU(1); }
       cpFacility = "unknown";
  -    for (i = 0; facility2string[i].string != NULL; i++) {
  -        if (facility == facility2string[i].facility) {
  -            cpFacility = facility2string[i].string;
  +    for (i = 0; syslogfacility2string[i].string != NULL; i++) {
  +        if (facility == syslogfacility2string[i].facility) {
  +            cpFacility = syslogfacility2string[i].string;
               break;
           }
       }
  @@ -318,14 +344,12 @@
       strcat(cpISF, cpIdent);
       strcat(cpISF, "/");
       strcat(cpISF, cpFacility);
  -fprintf(stderr, "DEBUG: ISF=\"%s\"\n", cpISF);
  -
  -    if ((cfgrv = cfg_create(&cfg)) != CFG_OK) {
  -        (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_create() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
   
  -    if ((rv = readfileorallfiles(&buf, "config.log")) != FSL_OK) {
  +    if ((rv = readfileorallfiles(&buf, ident)) != FSL_OK) {
           fprintf(stderr, "DEBUG: error %d, system %s(%d)\n", rv, strerror(errno), errno); CU(1); }
   
  +    if ((cfgrv = cfg_create(&cfg)) != CFG_OK) {
  +        (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_create() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
       if ((cfgrv = cfg_import(cfg, NULL, CFG_FMT_CFG, buf.base, buf.size)) != CFG_OK) {
           (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_import() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
   
  @@ -348,98 +372,124 @@
       while (cfgdir != NULL) {
           //FIXME fprintf(stderr, "DEBUG: cfgdir=0x%.8lx\n", (unsigned long)cfgdir);
   
  -        /*  check if operating on a directive which has exactly three arguments */
  +        /*  check if operating on a directive */
           if ((cfgrv = cfg_node_get(cfg, cfgdir, CFG_NODE_ATTR_TYPE, &cfgtype)) != CFG_OK) {
               (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
           if (cfgtype != CFG_NODE_TYPE_DIR) {
               fprintf(stderr, "Error: expected directive\n"); CU(1); }
           if ((cfgrv = cfg_node_get(cfg, cfgdir, CFG_NODE_ATTR_CHILDS, &cfgnumc)) != CFG_OK) {
               (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_CHILDS) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  -        if (cfgnumc != 3) {
  -            fprintf(stderr, "Error: directive missing arguments, expected 3, got %d\n", cfgnumc); CU(1); }
   
           /*  process first child of directive, check if it is an argument and has a valid token attached */
           if ((cfgrv = cfg_node_get(cfg, cfgdir, CFG_NODE_ATTR_CHILD1, &cfgarg)) != CFG_OK) {
               (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_CHILD1) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
           if (cfgarg == NULL) {
  -            fprintf(stderr, "Error: argument \"argident\" is NULL\n"); CU(1); }
  +            fprintf(stderr, "Error: first argument is NULL\n"); CU(1); }
           if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_TYPE, &cfgtype)) != CFG_OK) {
               (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
           if (cfgtype != CFG_NODE_TYPE_ARG) {
  -            fprintf(stderr, "Error: expected argument\n"); CU(1); }
  -        if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_TOKEN, &argident)) != CFG_OK) {
  +            fprintf(stderr, "Error: expected first argument, got %d\n", cfgtype); CU(1); }
  +        if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_TOKEN, &cfgargtok)) != CFG_OK) {
               (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_TOKEN) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  -        if (argident == NULL) {
  -            fprintf(stderr, "Error: argument \"argident\" has NULL data\n"); CU(1); }
  +        if (cfgargtok == NULL) {
  +            fprintf(stderr, "Error: first argument has NULL data\n"); CU(1); }
  +        cfgargtoka[0] = cfgargtok;
  +
  +        cfgnume = 0;
  +        if (strcmp(cfgargtoka[0], "ident") == 0)
  +            cfgnume = 3;
  +        if (strcmp(cfgargtoka[0], "default") == 0)
  +            cfgnume = 3;
  +        if (strcmp(cfgargtoka[0], "map") == 0)
  +            cfgnume = 3;
  +        if (cfgnume == 0) {
  +            fprintf(stderr, "Error: syntax error, invalid argument \"%s\"\n", cfgargtoka[0]); CU(1); }
  +        if (cfgnume != cfgnumc) {
  +            fprintf(stderr, "Error: directive missing arguments, expected %d, got %d\n", cfgnume, cfgnumc); CU(1); }
  +
  +        for (i = 1; i < cfgnume; i++) {
  +
  +            /*  process right brother of argument, check if it is an argument and has a valid token attached */
  +            if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_RBROTH, &cfgarg)) != CFG_OK) {
  +                (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_RBROTH) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            if (cfgarg == NULL) {
  +                fprintf(stderr, "Error: argument %d is NULL\n", i); CU(1); }
  +            if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_TYPE, &cfgtype)) != CFG_OK) {
  +                (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            if (cfgtype != CFG_NODE_TYPE_ARG) {
  +                fprintf(stderr, "Error: expected argument %d\n", i); CU(1); }
  +            if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_TOKEN, &cfgargtok)) != CFG_OK) {
  +                (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_TOKEN) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            if (cfgargtok == NULL) {
  +                fprintf(stderr, "Error: argument %d has NULL data\n", i); CU(1); }
  +            cfgargtoka[i] = cfgargtok;
  +        }
   
  -        /*  process right brother of argument, check if it is an argument and has a valid token attached */
  -        if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_RBROTH, &cfgarg)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_RBROTH) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  -        if (cfgarg == NULL) {
  -            fprintf(stderr, "Error: argument \"argmatch\" is NULL\n"); CU(1); }
  -        if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_TYPE, &cfgtype)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  -        if (cfgtype != CFG_NODE_TYPE_ARG) {
  -            fprintf(stderr, "Error: expected argument\n"); CU(1); }
  -        if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_TOKEN, &argmatch)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_TOKEN) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  -        if (argmatch == NULL) {
  -            fprintf(stderr, "Error: argument \"argmatch\" has NULL data\n"); CU(1); }
  +        if ((strcmp(cfgargtoka[0], "ident") == 0) || (strcmp(cfgargtoka[0], "default") == 0)) { //FIXME currently default and ident are identical
   
  -        /*  process right brother of argument, check if it is an argument and has a valid token attached */
  -        if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_RBROTH, &cfgarg)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_RBROTH) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  -        if (cfgarg == NULL) {
  -            fprintf(stderr, "Error: argument \"argl2spec\" is NULL\n"); CU(1); }
  -        if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_TYPE, &cfgtype)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  -        if (cfgtype != CFG_NODE_TYPE_ARG) {
  -            fprintf(stderr, "Error: expected argument\n"); CU(1); }
  -        if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_TOKEN, &argl2spec)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_TOKEN) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  -        if (argl2spec == NULL) {
  -            fprintf(stderr, "Error: argument \"argl2spec\" has NULL data\n"); CU(1); }
  +            argident  = cfgargtoka[0];
  +            argmatch  = cfgargtoka[1];
  +            argl2spec = cfgargtoka[2];
  +
  +            /*  process the directive using the three arguments found */
  +            fprintf(stderr, "DEBUG: argident=%s, argmatch=%s, argl2spec=%s\n", argident, argmatch, argl2spec);
  +            {
  +                pcre       *pcreRegex;
  +                pcre_extra *pcreExtra;
  +                const char *cpError;
  +                int         iError;
  +                int         nMatch;
  +
  +                /* compile regular expression into finite state machine and optimize */
  +                if ((pcreRegex = pcre_compile(argmatch, PCRE_CASELESS, &cpError, &iError, NULL)) == NULL) {
  +                    fprintf(stderr, "Error: pcre_compile() failed with error %s (%d)\n", cpError, iError); CU(1); }
  +                pcreExtra = pcre_study(pcreRegex, 0, &cpError);
  +                if (cpError != NULL) {
  +                    fprintf(stderr, "Error: pcre_study() failed with error %s\n", cpError); CU(1); }
  +
  +                nMatch = pcre_exec(pcreRegex, pcreExtra, cpISF, strlen(cpISF), 0, 0, ovec, OVECSIZE);
  +                fprintf(stderr, "DEBUG: nMatch=%d when \"%s\" is used against \"%s\"\n", nMatch, argmatch, cpISF);
  +                if (nMatch >= 1) {
  +                    pcre_get_substring_list(cpISF, ovec, nMatch, &acpMatch);
  +                    if (acpMatch != NULL)
  +                        for (i = 0; i < nMatch; i++)
  +                            fprintf(stderr, "DEBUG: regex reference[%d]=\'%s\'\n", i, acpMatch[i] == NULL ? "(UNDEFINED)" : acpMatch[i]);
  +                    n = substcapture(argl2spec, strlen(argl2spec), acpMatch, nMatch, NULL);
  +                    if ((cp = (char *)malloc(n + 1)) == NULL) {
  +                        fprintf(stderr, "Error: malloc() failed\n"); CU(1); }
  +                    if (substcapture(argl2spec, strlen(argl2spec), acpMatch, nMatch, cp) != n) {
  +                        fprintf(stderr, "Error: substcapture() failed\n"); CU(1); }
  +                    argl2spec = cp;
  +            fprintf(stderr, "DEBUG: argident=%s, argmatch=%s, argl2spec=%s\n", argident, argmatch, argl2spec);
  +
  +                    /* create L2 channel throuh spec and link into root channel */
  +                    if ((l2rv = l2_spec(&ch, ctx.l2_env, argl2spec)) != L2_OK) {
  +                        cp = l2_env_strerror(ctx.l2_env, l2rv); fprintf(stderr, "Error: logging failed to create stream from spec %s(%d)\n", cp, l2rv); CU(1); }
  +                    if ((l2rv = l2_channel_link(ctx.l2_nch, L2_LINK_CHILD, ch, NULL)) != L2_OK) {
  +                        cp = l2_env_strerror(ctx.l2_env, l2rv); fprintf(stderr, "Error: logging failed to link child channel %s(%d)\n", cp, l2rv); CU(1); }
   
  -        /*  process the directive using the three arguments found */
  -        fprintf(stderr, "DEBUG: argident=%s, argmatch=%s, argl2spec=%s\n", argident, argmatch, argl2spec);
  -        {
  -            pcre       *pcreRegex;
  -            pcre_extra *pcreExtra;
  -            const char *cpError;
  -            int         iError;
  -            int         nMatch;
  -
  -            /* compile regular expression into finite state machine and optimize */
  -            if ((pcreRegex = pcre_compile(argmatch, PCRE_CASELESS, &cpError, &iError, NULL)) == NULL) {
  -                fprintf(stderr, "Error: pcre_compile() failed with error %s (%d)\n", cpError, iError); CU(1); }
  -            pcreExtra = pcre_study(pcreRegex, 0, &cpError);
  -            if (cpError != NULL) {
  -                fprintf(stderr, "Error: pcre_study() failed with error %s\n", cpError); CU(1); }
  -
  -            nMatch = pcre_exec(pcreRegex, pcreExtra, cpISF, strlen(cpISF), 0, 0, ovec, OVECSIZE);
  -            fprintf(stderr, "DEBUG: nMatch=%d when \"%s\" is used against \"%s\"\n", nMatch, argmatch, cpISF);
  -            if (nMatch >= 1) {
  -                pcre_get_substring_list(cpISF, ovec, nMatch, &acpMatch);
  -                if (acpMatch != NULL)
  -                    for (i = 0; i < nMatch; i++)
  -                        fprintf(stderr, "DEBUG: regex reference[%d]=\'%s\'\n", i, acpMatch[i] == NULL ? "(UNDEFINED)" : acpMatch[i]);
  -                n = substcapture(argl2spec, strlen(argl2spec), acpMatch, nMatch, NULL);
  -                if ((cp = (char *)malloc(n + 1)) == NULL) {
  -                    fprintf(stderr, "Error: malloc() failed\n"); CU(1); }
  -                if (substcapture(argl2spec, strlen(argl2spec), acpMatch, nMatch, cp) != n) {
  -                    fprintf(stderr, "Error: substcapture() failed\n"); CU(1); }
  -                argl2spec = cp;
  -        fprintf(stderr, "DEBUG: argident=%s, argmatch=%s, argl2spec=%s\n", argident, argmatch, argl2spec);
  -
  -                /* create L2 channel throuh spec and link into root channel */
  -                if ((l2rv = l2_spec(&ch, ctx.l2_env, argl2spec)) != L2_OK) {
  -                    cp = l2_env_strerror(ctx.l2_env, l2rv); fprintf(stderr, "Error: logging failed to create stream from spec %s(%d)\n", cp, l2rv); CU(1); }
  -                if ((l2rv = l2_channel_link(ctx.l2_nch, L2_LINK_CHILD, ch, NULL)) != L2_OK) {
  -                    cp = l2_env_strerror(ctx.l2_env, l2rv); fprintf(stderr, "Error: logging failed to link child channel %s(%d)\n", cp, l2rv); CU(1); }
  +                    free(argl2spec);
  +                }
  +            }
  +        }
  +        else if (strcmp(cfgargtoka[0], "map") == 0) {
  +
  +            unsigned int levelmask;
   
  -                free(argl2spec);
  +            for (i = 0; sysloglevel2string[i].string != NULL; i++) {
  +                if (strcmp(sysloglevel2string[i].string, cfgargtoka[1]) == 0) {
  +                    if ((l2rv = l2_util_s2l(cfgargtoka[2], strlen(cfgargtoka[2]), ',', &levelmask)) != L2_OK) {;
  +                        cp = l2_env_strerror(ctx.l2_env, l2rv); fprintf(stderr, "Error: illegal l2 mask \"%s\" %s(%d)\n", cfgargtoka[2], cp, l2rv); CU(1); }
  +                    ctx.levelmap[i].l2 = levelmask;
  +                    fprintf(stderr, "DEBUG: ctx.levelmap[%d].syslog = 0x%.8lx, ctx.levelmap[%d].l2 = 0x%.8lx\n", i, (unsigned long)ctx.levelmap[i].syslog, i, (unsigned long)ctx.levelmap[i].l2);
  +                    break;
  +                }
               }
  +            if (sysloglevel2string[i].string == NULL) {
  +                fprintf(stderr, "Error: trying to map unknown syslog level \"%s\"\n", cfgargtoka[1]); CU(1); }
           }
  +        else {
  +            fprintf(stderr, "Error: internal, argument \"%s\" not implemented\n", cfgargtoka[0]); CU(1); }
   
           /*  get right brother of current directive */
           if ((cfgrv = cfg_node_get(cfg, cfgdir, CFG_NODE_ATTR_RBROTH, &cfgdir)) != CFG_OK) {
  @@ -448,6 +498,8 @@
       if ((l2rv = l2_channel_open(ctx.l2_nch)) != L2_OK) {
           cp = l2_env_strerror(ctx.l2_env, l2rv); fprintf(stderr, "Error: logging failed to open channel stream %s(%d)\n", cp, l2rv); CU(1); }
   
  +    ctx.maskpri = LOG_UPTO(LOG_DEBUG);
  +
       CU(0);
   CUS:
       if (cpISF != NULL)
  @@ -461,6 +513,9 @@
   #endif
       if (buf.base != NULL)
           free(buf.base);
  +    if (rc != 0)
  +        exit(rc);
  +    fprintf(stderr, "DEBUG: ------------------------------------------------------------\n");
       return;
   }
   
  @@ -479,16 +534,14 @@
   
   int setlogmask(int maskpri)
   {
  -#if 0
  -    int omask;
  +    int oldmask;
   
  +    //FIXME this is currently a no-op. Should we care about maskpri, set l2 global mask or continue to ignore?
       /* remember the logging mask */
  -    omask = ctx.maskpri;
  +    oldmask = ctx.maskpri;
       if (maskpri != 0)
           ctx.maskpri = maskpri;
  -    return omask;
  -#endif
  -    return maskpri; //FIXME
  +    return oldmask;
   }
   
   void syslog(int priority, const char *message, ...)
  @@ -508,10 +561,22 @@
   void vsyslog(int priority, const char *fmt, va_list args)
   #endif
   {
  +    unsigned int levelmask;
  +    int i;
  +
       if (ctx.l2_nch == NULL)
           return;
   
  -    l2_channel_vlog(ctx.l2_nch, L2_LEVEL_DEBUG, fmt, args);
  +    priority &= LOG_PRIMASK; /* strip off facility */
  +
  +    levelmask = 0;
  +    for (i = 0; sysloglevel2string[i].string != NULL; i++) {
  +    fprintf(stderr, "DEBUG: ctx.levelmap[%d].syslog = 0x%.8lx, ctx.levelmap[%d].l2 = 0x%.8lx\n", i, (unsigned long)ctx.levelmap[i].syslog, i, (unsigned long)ctx.levelmap[i].l2);
  +        if (ctx.levelmap[i].syslog == priority)
  +            levelmask |= ctx.levelmap[i].l2;
  +    }
  +    fprintf(stderr, "DEBUG: prioriy=0x%.8lx > levelmask=0x%.8lx\n", (unsigned long)priority, (unsigned long)levelmask);
  +    l2_channel_vlog(ctx.l2_nch, levelmask, fmt, args);
       return;
   }
   

From ossp-cvs-owner@ossp.org  Thu Jul 18 15:53:51 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5F8077653C; Thu, 18 Jul 2002 15:53:51 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea/test output.cgi
Message-Id: <20020718135351.5F8077653C@mail.ossp.org>
Date: Thu, 18 Jul 2002 15:53:51 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   18-Jul-2002 15:53:51
  Branch: HEAD                             Handle: 2002071814535000

  Added files:
    ossp-pkg/tabea/test     output.cgi

  Log:
    Append outpu.cgi for test

  Summary:
    Revision    Changes     Path
    1.1         +551 -0     ossp-pkg/tabea/test/output.cgi
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/test/output.cgi
  ============================================================
  $ cvs update -p -r1.1 output.cgi
  #!/usr/opkg/bin/perl -w
  #
  # This program is for testing the possibilities
  # of creating an output in html
  # Later test the possibiliies to read in the values
  # from an cfg file and convert this to html
  #
  
  require 5.000;
  use strict;
  use CGI;
  use IO;
  use Data::Dumper;
  
  use lib ".";
  
  use TESTPM::Cfg;
  
  
  $|++;
  
  
  #   establish CGI query object
  my $cgi = new CGI;
   
  #   activate a general error handler
  $SIG{__DIE__} = sub {
  my ($err) = @_;
  
      #$err =~ s|at\s+\S+\s+line\s+(\d+)|(line $1)|s;
      $err =~ s|\n|<br>\n|sg;
      print STDOUT $cgi->header(-expires => '+1s') .
      "<title>TabeaTest :: ERROR</title>",
      "<h1>TabeaTest :: ERROR</h1>\n" .
      "<pre>$err</pre>\n";
      exit(0);
  };
  
  
  
  
  
  #   read config
  
  my $filename = "/d1/ps/work/ossp-pkg/tabea/test/tabea-cfg.in";
  my $filein = new IO::File "<$filename" || die;
  my $config = '';
     $config .= $_ while (<$filein>);
   
  $filein->close();
  
  my @resword = ("item", "visible", "type", "value", "checked", "description", "selected");
  my @types =("text", "password", "checkbox", "radio", "image", "hidden", "submit", "reset",
  "selectmultiple", "textarea");
  
  my $CF = &config_read($filename);
  #my $dump = Data::Dumper->Dump([$CF]);
  #my $cfgtext = $dump ;
  
  my $dump = Data::Dumper->Dump([$CF]) ;
  
  #print $cfgtext $dump;
  #print $cfgtext . Data::Dumper->Dump([$CF]);
  #print Data::Dumper->Dump([$CF]);
  
  
  
  my @cf = TESTPM::Cfg->parsit($dump);
  
  
  
  my $form = '';
  
  for my $name (qw(output results)) {
      my $val = $cgi->param("dialog_$name") || "";
      if ($val ne '') {
          $form = $name;
      }
  }
  
  
  
  
  my $page = $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1));
  
  if ($form eq '') {
  
      $page .= "<br>Config text<br>\n";
  #    $page .= "<br>$config<br>\n";
  #    $page .= "<br><font color=red>Break</font><br>\n";
  #    $page .= "<br>$CF<br>";
  #    $page .= "<br><font color=red>Break</font><br>\n";
      $page .= "<br>$dump<br>";
      $page .= "<br><font color=red>Geparster Text</font><br>\n";
  #    $page .= "<br>$cfgtext<br>";
  #    $page .= "<br>@cf<br>";
      my $cfgtext = Data::Dumper->Dump([@cf]);
  #    foreach (@cf) {
  #        $page .= "<br>$_<br>";
  #    }
  
      $page .= "<br>$cfgtext<br>";
      $page .= $cgi->submit(-name => 'dialog_output', -value => 'Show output');
  }
  elsif ($form eq 'output') {
      $page .= "<br><br>We are testing<br>" ;
      $page .= "\n\nHere comes the text output:<br>\n" ;
      $page .= &text();
      $page .= "<br><br>\n" ;
      $page .= "\n\nHere comes the password output:<br>\n" ;
      $page .= &password();
      $page .= "<br><br>\n" ;
      $page .= "\n\nHere comes the checkbox output:<br>\n" ;
      $page .= &checkbox();
      $page .= "<br><br>\n" ;
      $page .= "\n\nHere comes the radio output:<br>\n" ;
      $page .= &radio();
      $page .= "<br><br>\n" ;
      $page .= "\n\nHere comes the image output:<br>\n" ;
      $page .= &image();
  #    $page .= &hidden();
      $page .= "<br><br>\n" ;
      $page .= "\n\nHere comes the submit output:<br>\n" ;
      $page .= &submit();
      $page .= "<br><br>\n" ;
      $page .= "\n\nHere comes the reset output:<br>\n" ;
      $page .= &reset();
      $page .= "<br><br>\n" ;
      $page .= "\n\nHere comes the select output:<br>\n" ;
      $page .= &select();
      $page .= "<br><br>\n" ;
      $page .= "\n\nHere comes the textaraea output:<br>\n" ;
      $page .= &textarea();
      #$page .= "<br><br><br><input type=submit name=dialog_output value=\"Show results\"><br>\n" 
      $page .= $cgi->submit(-name => 'dialog_results', -value => 'Show results');
  }
  elsif ( $form eq 'results' )  {
      $page .= "<br><br>Here are the results<br>\n";
      $page .= "\n\nHere comes the text result: \n" ;
      $page .= &text_result();
      $page .= "<br><br>\n" ;
      $page .= "\n\nHere comes the password result: \n" ;
      $page .= &password_result();
      $page .= "<br><br>\n" ;
      $page .= "\n\nHere comes the checkbox result: \n" ;
      $page .= &checkbox_result();
      $page .= "<br><br>\n" ;
      $page .= "\n\nHere comes the radio result: \n" ;
      $page .= &radio_result();
      $page .= "<br><br>\n" ;
  #    $page .= "\n\nHere comes the image result:<br>\n" ;
  #    $page .= &image_result();
  #    $page .= &hidden();
      $page .= "<br><br>\n" ;
      $page .= "\n\nHere comes the submit result: \n" ;
      $page .= &submit_result();
      $page .= "<br><br>\n" ;
  #    $page .= "\n\nHere comes the reset result:<br>\n" ;
  #    $page .= &reset_result();
      $page .= "<br><br>\n" ;
      $page .= "\n\nHere comes the select result: \n" ;
      $page .= &select_result();
      $page .= "<br><br>\n" ;
      $page .= "\n\nHere comes the textaraea result: \n" ;
      $page .= &textarea_result();
  
  }
  else {
       die "no correct dialog found";
  }
  
  $page .= $cgi->endform;
  
  
  #print STDOUT $cgi->header(-cookie => $cookies, -expires => '+1s') . $page;
  print STDOUT $cgi->header() . $page;
  
  sub text{
      my $text;    
      # Text Field: INPUT TYPE=TEXT
  
      # <p>Street Address: <input name=street><br>
      # Postal City code: <input name=city size=16 maxlength=16><br>
      # Zip Code: <input name=zip size=10 maxlength=10 value="99999-9999"><br>
     
      $text .= "<p>Street Address: <input name=street><br>" .
      "Postal City code: <input name=city size=16 maxlength=16><br>" .
      "Zip Code: <input name=zip size=10 maxlength=10 value=\"99999-9999\"><br>" ;
   
  
      #item {  
      #   name street
      #   visible "Street Address:"
      #    type text
      #}
      #item {  
      #    name city
      #    visible "Postal City code:"
      #    type text[16][16]
      #}
      #item {  
      #    name zip
      #    visible "Zip Code:"
      #    type text[10][10]
      #    value {
      #        name "99999-9999"
      #    }
      #}
      return $text;
  }
  
  sub text_result{
      my $text;
  
      $text .= $cgi->param('street') . "<br>" ;
  
      return $text;
  }
  
  
  sub password {
      my $text;
  #    # Password Field: INPUT TYPE=PASSWORD
  
      # <p>Name: <input name=login> Password: <input type=password name=passwd>
  
      $text .= "<p>Name: <input name=login> Password: <input type=password name=passwd>" ;
  
  #    item {  
  #        name login
  #        visible "Name:" 
  #        type text
  #    }
  #    item {  
  #        name passwd
  #        visible "Password:"
  #        type password
  #    }
  #
  #
        return $text;
  }
  
  sub password_result{
      my $text;
  
      $text .= $cgi->param('passwd') . "<br>" ;
  
      return $text;
  }
  
  sub checkbox {
      my $text;
  #    # Check Box: INPUT TYPE=CHECKBOX
  #
  #    # <p>What flavors do you like?
  ##    # <input type=checkbox name=flavor value=vanilla checked>Vanilla<br>
      # <input type=checkbox name=flavor value=strawberry>Strawberry<br>
  #    # <input type=checkbox name=flavor value=chocolate checked>Chocolate<br>
  
      $text .= "<p>What flavors do you like?\n" .
      "<input type=checkbox name=flavor value=vanilla checked>Vanilla<br>\n" .
      "<input type=checkbox name=flavor value=strawberry>Strawberry<br>\n" .
      "<input type=checkbox name=flavor value=chocolate checked>Chocolate<br>\n" ;
  #
  #    item {
  #        name flavor
  #        visible "What flavors do you like?"
  #        type checkbox
  #        value {
  #            name vanilla
  #            visible "Vanilla"
  #            checked
  #        }
  #        value {
  #            name strawberry
  #            visible "Strawberry"
  #        }
  #        value {
  #            name chocolate
  #            visible "Chocolate"
  #            checked
  #        }
  #    }
  #
       return $text;
  }
  
  sub checkbox_result{
      my $text;
  
      $text .= $cgi->param('flavor') . "<br>" ;
  
      return $text;
  }
  
  sub radio {
      my $text;
  #    # Radio Button: INPUT TYPE=RADIO
  #
  #    # <p>Which is your favorite?
  #    # <input type=radio name=flavor value=vanilla checked>Vanilla<br>
  #    # <input type=radio name=flavor value=strawberry>Strawberry<br>
  #    # <input type=radio name=flavor value=chocolate>Chocolate<br>
  
      $text .= "<p>Which is your favorite?\n" .
      "<input type=radio name=flavor value=vanilla checked>Vanilla<br>\n" .
      "<input type=radio name=flavor value=strawberry>Strawberry<br>\n" .
      "<input type=radio name=flavor value=chocolate>Chocolate<br>\n" ;
  #
  #    item {
  #        name flavor
  #        visible "Which is your favorite?"
  #        type radio
  #        value {
  #            name vanilla
  #            visible "Vanilla"
  #            checked
  #        }
  #        value {
  #            name strawberry
  #            visible "Strawberry"
  #        }
  #        value {
  #            name chocolate
  #            visible "Chocolate"
  #        }
  #    }
  #
  #
       return $text;
  }
  
  sub radio_result{
      my $text;
  
      $text .= $cgi->param('flavor') . "<br>" ;
  
      return $text;
  }
  
  sub image {
      my $text;
  #    # Image Pixel: INPUT TYPE=IMAGE
  #
  #    # <input type=image name=point value=map.gif>
      
  #    $text .= "<input type=image name=point value=\"./1.gif\">\n" ;
      $text .= "<img alt=\"gif not found\" src=\"/ossp-cgi/test/1.gif\">\n";
  #
  #    item {
  #        name point
  #        visible "Choose a point on the map:"
  #        type image
  #        value {
  #            name "map.gif"
  #        }
  #    }
  #
  #
       return $text;
  }
  
  
  sub hidden {
      my $text;
  #    # Hidden Field: INPUT TYPE=HIDDEN (FIXME do we really need this?)
  #
  #    # <input type=hidden name=context value="l2k3j4l2k3j4l2k3j4lk23">
  
      $text .= "<input type=hidden name=context value=\"l2k3j4l2k3j4l2k3j4lk23\">\n" ;
  #
  #    item {
  #        name context
  #        type hidden
  #        value {
  #            name "l2k3j4l2k3j4l2k3j4lk23"
  #        }
  #    }
  #
  #
       return $text;
  }
  
  sub submit {
      my $text;
  #    # Submit Button: INPUT TYPE=SUBMIT
  #
  #    # <input type=submit name=recipient value=internal><br>
  #    # <input type=submit name=recipient value=world>
  
      $text .= "<input type=submit name=recipient value=internal><br>\n" .
      "<input type=submit name=recipient value=world>\n" ;
  
  
  #
  #    item {
  #        name recipient
  #        type submit
  #        value {
  #            name internal
  #        }
  #        value {
  #            name world
  #        }
  #    }
  #
       return $text;
  }
  
  sub submit_result{
      my $text;
  
      $text .= $cgi->param('recipient') . "<br>" ;
  
      return $text;
  }
  
  sub reset {
      my $text;
  #
  #    # Reset Button: INPUT TYPE=RESET
  #
  #    #  <input type=reset>
  
      $text .= "<input type=reset>\n" ;
  #
  #    item {
  #        description "You may clear the form and start over at any time:"
  #        type reset
  #    }
       return $text;
  }
  
  sub select {
      my $text;
  #    # Selection: SELECT
  #    # Option: OPTION
  #
  #    # <SELECT NAME="flavor" SIZE="2">
  #    # <OPTION>Vanilla
  #    # <OPTION>Strawberry
  #    # <OPTION value="RumRasin">Rum and Raisin
  #    # <OPTION selected>Peach and Orange
  #    # </SELECT>
  #
  
      $text .= "<SELECT NAME=\"flavor\" SIZE=\"2\">\n" .
      "<OPTION>Vanilla\n" .
      "<OPTION>Strawberry\n" .
      "<OPTION value=\"RumRasin\">Rum and Raisin\n" .
      "<OPTION selected>Peach and Orange\n" .
      "</SELECT>\n" ;
  
  
  #    item {
  #        name flavor
  #        type select[2] //or type selectmultipe[2]
  #        value {
  #            name "Vanilla"
  #        }
  #        value {
  #            name "Strawberry"
  #        }
  #        value {
  #            name RumRasin
  #            visible "Rum and Raisin"
  #        }
  #        value {
  #            name "Peach and Orange"
  #            selected
  #        }
  #
  #    }
  #
  #
       return $text;
  }
  
  sub select_result{
      my $text;
  
      $text .= $cgi->param('flavor') . "<br>" ;
  
      return $text;
  }
  
  sub textarea {
      my $text;
  #    # Text Area: TEXTAREA
  #
  #    # <TEXTAREA NAME="address" ROWS=6 COLS=64>
  #    # HaL Computer Systems
  #    # 1315 Dell Avenue
  #    # Campbell, California 95008
  #    # </TEXTAREA>
  #
      $text .=  "<TEXTAREA NAME=\"address\" ROWS=6 COLS=64>\n" .
      "HaL Computer Systems\n" .
      "Dell Avenue\n" .
      "Campbell, California 95008\n" .
      "</TEXTAREA>\n" ;
  
  #    item {
  #        name "address"
  #        type textarea[64][6]
  #        value {
  #            name "HaL Computer Systems\n1315 Dell Avenue\nCampbell, California 95008"
  #        }
  #    }
  #
       return $text;
  }
  
  sub textarea_result{
      my $text;
  
      $text .= $cgi->param('address') . "<br>" ;
  
      return $text;
  }
  
  
  
  
  
  
  
   
  #   read configuration
  sub config_read {
      my ($file) = @_;
   
      #     read file into memory
      my $fh = new IO::File "<$file" || die;
      my $config = '';
      $config .= $_ while (<$fh>);
   
      $fh->close();
   
      ##  Class method usage
      my $cf = TESTPM::Cfg->parsit($config);
   
   
      ## Object method usage
   
      #my $te=new PM2::Cfg();
      #my $cf=$te->parsit($config);
   
      return $cf;
  }

From ossp-cvs-owner@ossp.org  Thu Jul 18 15:54:50 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1D5527653C; Thu, 18 Jul 2002 15:54:50 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea/test 1.gif 1.jpg cfg1.txt cfg2.txt hash.txt...
Message-Id: <20020718135450.1D5527653C@mail.ossp.org>
Date: Thu, 18 Jul 2002 15:54:50 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   18-Jul-2002 15:54:49
  Branch: HEAD                             Handle: 2002071814544800

  Added files:
    ossp-pkg/tabea/test     1.gif 1.jpg cfg1.txt cfg2.txt hash.txt
                            output.cgi.1 output.cgi.html.1 read-cfg.pl
                            tabea-cfg.in tabea-cfg.in1 tabea-cfg.in2

  Log:
    Appending test files

  Summary:
    Revision    Changes     Path
    1.1         BLOB        ossp-pkg/tabea/test/1.gif
    1.1         BLOB        ossp-pkg/tabea/test/1.jpg
    1.1         +1  -0      ossp-pkg/tabea/test/cfg1.txt
    1.1         +1  -0      ossp-pkg/tabea/test/cfg2.txt
    1.1         +210 -0     ossp-pkg/tabea/test/hash.txt
    1.1         +368 -0     ossp-pkg/tabea/test/output.cgi.1
    1.1         +60 -0      ossp-pkg/tabea/test/output.cgi.html.1
    1.1         +66 -0      ossp-pkg/tabea/test/read-cfg.pl
    1.1         +200 -0     ossp-pkg/tabea/test/tabea-cfg.in
    1.1         +27 -0      ossp-pkg/tabea/test/tabea-cfg.in1
    1.1         +18 -0      ossp-pkg/tabea/test/tabea-cfg.in2
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/test/1.gif
  ============================================================
  $ cvs update -p -r1.1 1.gif | uuencode 1.gif
  GIF87aXÂ÷
From ossp-cvs-owner@ossp.org  Thu Jul 18 15:55:54 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7B2537653C; Thu, 18 Jul 2002 15:55:54 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabeapm.pl
Message-Id: <20020718135554.7B2537653C@mail.ossp.org>
Date: Thu, 18 Jul 2002 15:55:54 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   18-Jul-2002 15:55:54
  Branch: HEAD                             Handle: 2002071814555400

  Added files:
    ossp-pkg/tabea          tabeapm.pl

  Log:
    Append test programm for TABEA::Tabea module

  Summary:
    Revision    Changes     Path
    1.1         +73 -0      ossp-pkg/tabea/tabeapm.pl
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabeapm.pl
  ============================================================
  $ cvs update -p -r1.1 tabeapm.pl
  #!/usr/opkg/bin/perl -w
  ##
  ##  OSSP tabea - Web Configuration Editor
  ##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  ##
  ##  This file is part of OSSP tabea, a web configuration editor
  ##  which can be found at http://www.ossp.org/pkg/tool/tabea/.
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  tabeapm.pl: For testing the new TABEA::Tabea module
  ##
   
   
  require 5.000;
  use strict;
  use TABEA::Tabea;
  
  my $buffer = "";
  my $buffer2 = "";
  my $dummy ;
  
  my $test = TABEA::Tabea->new("./test/tabea-cfg.in1", "HTML2") or die "Irgendwie falsch" ;
  my $test2 = TABEA::Tabea->new("./test/tabea-cfg.in2", "HTML2") or die "Irgendwie falsch" ;
  
  if( (($buffer, $dummy) = $test->render($buffer)) ) {
      print "Here comes the buffer1 :\n";
      print $buffer;
  } else {
      print "Error\n";
  }
  
  
  if( (($buffer2, $dummy) = $test->render($buffer2)) ) {
      print "Here comes the buffer2:\n";
      print $buffer2;
  } else {
      print "Error\n";
  }
  my $template = "My template";
  my $template2 = "My template2";
  my $legacyfile = "My legacyfile";
  my $legacyfile2 = "My legacyfile2";
  
  $test->load($buffer);
  $test2->load($buffer2);
  $test->save($buffer);
  $test2->save($buffer2);
  $test->parse($buffer);
  $test->parse($buffer2);
  $test2->import($legacyfile);
  $test2->import($legacyfile2);
  $test->export($template, $legacyfile);
  $test2->export($template2, $legacyfile2);
  $test->destroy($buffer);
  $test->destroy($buffer2);

From ossp-cvs-owner@ossp.org  Thu Jul 18 15:56:26 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2E3D1765E1; Thu, 18 Jul 2002 15:56:26 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea/TABEA Tabea.pm
Message-Id: <20020718135626.2E3D1765E1@mail.ossp.org>
Date: Thu, 18 Jul 2002 15:56:26 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   18-Jul-2002 15:56:26
  Branch: HEAD                             Handle: 2002071814562500

  Modified files:
    ossp-pkg/tabea/TABEA    Tabea.pm

  Log:
    Appended handle structure.

  Summary:
    Revision    Changes     Path
    1.2         +102 -24    ossp-pkg/tabea/TABEA/Tabea.pm
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/TABEA/Tabea.pm
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 Tabea.pm
  --- ossp-pkg/tabea/TABEA/Tabea.pm	5 Jul 2002 13:26:35 -0000	1.1
  +++ ossp-pkg/tabea/TABEA/Tabea.pm	18 Jul 2002 13:56:25 -0000	1.2
  @@ -27,72 +27,147 @@
   ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   ##  SUCH DAMAGE.
   ##
  -##  Tabea.pm: Tabea Perl Module
  +##  Tabea.pm: Tabea Module
   ##
   
   
   package TABEA::Tabea;
   require 5.000;
  -
  +use IO::File;
   
   sub new{
  +    #  Currently the only supported $type is "HTML2" which causes only
  +    #  tags described in RFC1866 to be used.  When a menu is rendered,
  +    #  some elements may require uniqe names in a scope wider than
  +    #  known by this module, i.e. when two configs are presented on one
  +    #  screen or along with other information, so every item is
  +    #  prefixed with $prefix.
  +    my $proto = shift;
  +    my $class = ref($proto) || $proto || "TABEA::Tabea.pm" ;
       my ($config, $prefix) = @_;
  -    my $handle = 0;
  +    my $cfgfh;
   
  -    return $handle;
  +    my $self = {};
  +    $self->{Config} = $config;
  +    $self->{Prefix} = $prefix;
  +    $cfgfh = new IO::File ("<".$self->{Config}) || die ;
  +    while (<$cfgfh>) {
  +        $self->{Configuration} .= $_;
  +    }
  +    $cfgfh->close();
  +    
  +    bless($self, $class);
  +     
  +    return $self;
   }
   
   
   sub load{
  -    my ($data) = @_;
  +    #  Reads $data and sets the value of items.
  +    my $self = shift;
       my $rc = 1;
   
  +    if (! @_) { $rc = 0 };
  +    my ($data) = @_;
  +
  +    print "TABEA::Tabea $data load funtion\n";
  + 
       return $rc;
   }
   
   
   sub save {
  -    my ($data) = @_;
  +    #  Writes items including their values.
  +    my $self = shift;
       my $rc = 1;
   
  +    if (! @_) { $rc = 0 };
  +    my ($data) = @_;
  +
  +    print "TABEA::Tabea $data save funtion\n";
  + 
       return $rc;
  +
   }
   
   
   sub parse {
  -    my ($type, $buffer) = @_;
  -    my $rc;
  -  
  -  
  +
  +    my $self = shift;
  +    my $rc = 1;
  +
  +    if (! @_) { $rc = 0 };
  +    my ($param) = @_;
  +
  +    print "TABEA::Tabea $param parse funtion\n";
  + 
       return $rc;
   }
   
   
   
   sub render {
  -    my ($type, $buffer) = @_;
  -    my $rc;
  +    #  Renders a menu and writes it into the buffer. The contents of the
  +    #  buffer can be merged into a larger output. Values are verified
  +    #  and invalid data is marked (FIXME how? red, reset to default,
  +    #  configurable behaviour, configurable error messages ...) The
  +    #  caller must finally print out the menu and when an input comes
  +    #  back it must identify menu activity (i.e. by checking the
  +    #  prefix) and call render again and again or execute some action.
  +    my $self = shift;
  +    my $rc = 1;
   
  +    if (! @_) { $rc = 0 };
  +    my ($buffer) = @_;
  +
  +    $buffer .= $self->{Configuration};
       
  -    return $rc;
  +    return $buffer, $rc;
   }
   
   sub import{
  +    #  Reads a legacy (manually edited or previously exported) file and
  +    #  tries to match out values.
  +    my $self = shift;
  +    my $rc = 1;
  +
  +    if (! @_) { $rc = 0 };
       my ($legacyfile) = @_;
  -    my $rc;
  -    
  -     
  -    return $rc;   
  +
  +    my $legacyfh;
  +    my $newdata = "";
  +
  +    print "TABEA::Tabea import " . $legacyfile . "funtion\n";
  +
  +    $legacyfh = new IO::File ("<".$legacyfile) || die ;
  +    while (<legacyfh>) {
  +        $newdata .= $_;
  +    }
  +    $legacyfh->close();
  + 
  +    return $rc;
   }
   
   
   
   sub export{
  +    #  Applies variable substitution for a template and writes the
  +    #  result out to exportfile.
  +    my $self = shift;
  +    my $rc = 1;
  +
  +    if (! @_) { $rc = 0 };
       my ($template, $exportfile) = @_;
  -    my $rc;
  -    
  -     
  -    return $rc;   
  +    my $exportfh;
  +
  +    print "TABEA::Tabea $template, $exportfile export funtion\n";
  +
  +    $exportfh = new IO::File (">".$exportfile) || die "Cannot open $exportfile for writing.";
  +    print $exportfh $template;
  +    $exportfh->close();
  +
  +    return $rc;
  +
   }
   
   
  @@ -101,10 +176,13 @@
   
   
   sub destroy{
  -    my $rc;
  +    my $self = shift;
  +    my $rc = 1;
   
  -    return $rc.
  -  
  +
  +    print "TABEA::Tabea $self destroy funtion\n";
  + 
  +    return $rc;
   }
   
   

From ossp-cvs-owner@ossp.org  Thu Jul 18 15:56:47 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 11DC17653C; Thu, 18 Jul 2002 15:56:47 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea/TABEA tabea.pod
Message-Id: <20020718135647.11DC17653C@mail.ossp.org>
Date: Thu, 18 Jul 2002 15:56:47 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   18-Jul-2002 15:56:47
  Branch: HEAD                             Handle: 2002071814564600

  Modified files:
    ossp-pkg/tabea/TABEA    tabea.pod

  Log:
    *** empty log message ***

  Summary:
    Revision    Changes     Path
    1.2         +18 -3      ossp-pkg/tabea/TABEA/tabea.pod
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/TABEA/tabea.pod
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 tabea.pod
  --- ossp-pkg/tabea/TABEA/tabea.pod	5 Jul 2002 07:26:52 -0000	1.1
  +++ ossp-pkg/tabea/TABEA/tabea.pod	18 Jul 2002 13:56:46 -0000	1.2
  @@ -5,22 +5,37 @@
   
   =head1 NAME
   
  -TABEA - The Perl Module
  +TABEA::Tabea - The Perl Module for Tabea
   
   
   =head1 DESCRIPTION
   
  +=head1 Synopsis
  +
  +
  +use TABEA::Tabea;
  + 
  +my $dummy ;
  + 
  +my $test = TABEA::Tabea->new("./test/tabea-cfg.in1", "HTML2") or die "Irgendwie falsch" ;
  +if( (($buffer, $dummy) = $test->render($buffer)) ) {
  +    print $buffer;
  +} else {
  +    print "Error\n";
  +}
  +
   
   =item FUNCTIONS
   
  +TABEA::new
   
  -TABEA::config 
   TABEA::load
   TABEA::save
  -TABEA::parse
   TABEA::render
  +TABEA::parse
   TABEA::import
   TABEA::export
  +TABEA::destroy
   
   
   =head1 PARAMETERS

From ossp-cvs-owner@ossp.org  Thu Jul 18 16:07:33 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 95EF476523; Thu, 18 Jul 2002 16:07:33 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.c
Message-Id: <20020718140733.95EF476523@mail.ossp.org>
Date: Thu, 18 Jul 2002 16:07:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Jul-2002 16:07:33
  Branch: HEAD                             Handle: 2002071815073300

  Modified files:
    ossp-pkg/fsl            fsl.c

  Log:
    disable debug messages for now

  Summary:
    Revision    Changes     Path
    1.12        +14 -12     ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 fsl.c
  --- ossp-pkg/fsl/fsl.c	18 Jul 2002 11:26:59 -0000	1.11
  +++ ossp-pkg/fsl/fsl.c	18 Jul 2002 14:07:33 -0000	1.12
  @@ -164,7 +164,7 @@
       char *cp;
       int cfgchilds;
   
  -    fprintf(stderr, "DEBUG: diving\n");
  +    /*fprintf(stderr, "DEBUG: diving\n");*/
       while (cfgnode != NULL) {
           if ((cfgrv = cfg_node_get(cfg, cfgnode, CFG_NODE_ATTR_TOKEN, &cp)) != CFG_OK) {
               (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_TOKEN) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  @@ -172,7 +172,7 @@
               (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
           if ((cfgrv = cfg_node_get(cfg, cfgnode, CFG_NODE_ATTR_CHILDS, &cfgchilds)) != CFG_OK) {
               (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_CHILDS) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  -        fprintf(stderr, "DEBUG: cfgnode=0x%.8lx[%d], *cp=\"%s\", type=%d\n", (unsigned long)cfgnode, cfgchilds, cp, cfgtyp);
  +        /*fprintf(stderr, "DEBUG: cfgnode=0x%.8lx[%d], *cp=\"%s\", type=%d\n", (unsigned long)cfgnode, cfgchilds, cp, cfgtyp);*/
           if ((cfgrv = cfg_node_get(cfg, cfgnode, CFG_NODE_ATTR_CHILD1, &cfgchld)) != CFG_OK) {
               (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_CHILD1) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
           if (cfgchld != NULL)
  @@ -180,7 +180,7 @@
           if ((cfgrv = cfg_node_get(cfg, cfgnode, CFG_NODE_ATTR_RBROTH, &cfgnode)) != CFG_OK) {
               (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_RBROTH) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
       }
  -    fprintf(stderr, "DEBUG: climbing\n");
  +    /*fprintf(stderr, "DEBUG: climbing\n");*/
       CU(0);
   CUS:
       return;
  @@ -307,7 +307,7 @@
       for (i = 0; sysloglevel2string[i].string != NULL; i++) {
           ctx.levelmap[i].syslog = sysloglevel2string[i].level;
           ctx.levelmap[i].l2     = sysloglevel2string[i].deflevelmap;
  -        fprintf(stderr, "DEBUG: ctx.levelmap[%d].syslog = 0x%.8lx, ctx.levelmap[%d].l2 = 0x%.8lx\n", i, (unsigned long)ctx.levelmap[i].syslog, i, (unsigned long)ctx.levelmap[i].l2);
  +        /*fprintf(stderr, "DEBUG: ctx.levelmap[%d].syslog = 0x%.8lx, ctx.levelmap[%d].l2 = 0x%.8lx\n", i, (unsigned long)ctx.levelmap[i].syslog, i, (unsigned long)ctx.levelmap[i].l2);*/
       }
   
       /* create L2 environment */
  @@ -432,7 +432,7 @@
               argl2spec = cfgargtoka[2];
   
               /*  process the directive using the three arguments found */
  -            fprintf(stderr, "DEBUG: argident=%s, argmatch=%s, argl2spec=%s\n", argident, argmatch, argl2spec);
  +            /*fprintf(stderr, "DEBUG: argident=%s, argmatch=%s, argl2spec=%s\n", argident, argmatch, argl2spec);*/
               {
                   pcre       *pcreRegex;
                   pcre_extra *pcreExtra;
  @@ -448,19 +448,21 @@
                       fprintf(stderr, "Error: pcre_study() failed with error %s\n", cpError); CU(1); }
   
                   nMatch = pcre_exec(pcreRegex, pcreExtra, cpISF, strlen(cpISF), 0, 0, ovec, OVECSIZE);
  -                fprintf(stderr, "DEBUG: nMatch=%d when \"%s\" is used against \"%s\"\n", nMatch, argmatch, cpISF);
  +                /*fprintf(stderr, "DEBUG: nMatch=%d when \"%s\" is used against \"%s\"\n", nMatch, argmatch, cpISF);*/
                   if (nMatch >= 1) {
                       pcre_get_substring_list(cpISF, ovec, nMatch, &acpMatch);
  +                    /*
                       if (acpMatch != NULL)
                           for (i = 0; i < nMatch; i++)
                               fprintf(stderr, "DEBUG: regex reference[%d]=\'%s\'\n", i, acpMatch[i] == NULL ? "(UNDEFINED)" : acpMatch[i]);
  +                    */
                       n = substcapture(argl2spec, strlen(argl2spec), acpMatch, nMatch, NULL);
                       if ((cp = (char *)malloc(n + 1)) == NULL) {
                           fprintf(stderr, "Error: malloc() failed\n"); CU(1); }
                       if (substcapture(argl2spec, strlen(argl2spec), acpMatch, nMatch, cp) != n) {
                           fprintf(stderr, "Error: substcapture() failed\n"); CU(1); }
                       argl2spec = cp;
  -            fprintf(stderr, "DEBUG: argident=%s, argmatch=%s, argl2spec=%s\n", argident, argmatch, argl2spec);
  +            /*fprintf(stderr, "DEBUG: argident=%s, argmatch=%s, argl2spec=%s\n", argident, argmatch, argl2spec);*/
   
                       /* create L2 channel throuh spec and link into root channel */
                       if ((l2rv = l2_spec(&ch, ctx.l2_env, argl2spec)) != L2_OK) {
  @@ -481,7 +483,7 @@
                       if ((l2rv = l2_util_s2l(cfgargtoka[2], strlen(cfgargtoka[2]), ',', &levelmask)) != L2_OK) {;
                           cp = l2_env_strerror(ctx.l2_env, l2rv); fprintf(stderr, "Error: illegal l2 mask \"%s\" %s(%d)\n", cfgargtoka[2], cp, l2rv); CU(1); }
                       ctx.levelmap[i].l2 = levelmask;
  -                    fprintf(stderr, "DEBUG: ctx.levelmap[%d].syslog = 0x%.8lx, ctx.levelmap[%d].l2 = 0x%.8lx\n", i, (unsigned long)ctx.levelmap[i].syslog, i, (unsigned long)ctx.levelmap[i].l2);
  +                    /*fprintf(stderr, "DEBUG: ctx.levelmap[%d].syslog = 0x%.8lx, ctx.levelmap[%d].l2 = 0x%.8lx\n", i, (unsigned long)ctx.levelmap[i].syslog, i, (unsigned long)ctx.levelmap[i].l2);*/
                       break;
                   }
               }
  @@ -515,7 +517,7 @@
           free(buf.base);
       if (rc != 0)
           exit(rc);
  -    fprintf(stderr, "DEBUG: ------------------------------------------------------------\n");
  +    /*fprintf(stderr, "DEBUG: ------------------------------------------------------------\n");*/
       return;
   }
   
  @@ -571,11 +573,11 @@
   
       levelmask = 0;
       for (i = 0; sysloglevel2string[i].string != NULL; i++) {
  -    fprintf(stderr, "DEBUG: ctx.levelmap[%d].syslog = 0x%.8lx, ctx.levelmap[%d].l2 = 0x%.8lx\n", i, (unsigned long)ctx.levelmap[i].syslog, i, (unsigned long)ctx.levelmap[i].l2);
  +    /*fprintf(stderr, "DEBUG: ctx.levelmap[%d].syslog = 0x%.8lx, ctx.levelmap[%d].l2 = 0x%.8lx\n", i, (unsigned long)ctx.levelmap[i].syslog, i, (unsigned long)ctx.levelmap[i].l2);*/
           if (ctx.levelmap[i].syslog == priority)
               levelmask |= ctx.levelmap[i].l2;
       }
  -    fprintf(stderr, "DEBUG: prioriy=0x%.8lx > levelmask=0x%.8lx\n", (unsigned long)priority, (unsigned long)levelmask);
  +    /*fprintf(stderr, "DEBUG: prioriy=0x%.8lx > levelmask=0x%.8lx\n", (unsigned long)priority, (unsigned long)levelmask);*/
       l2_channel_vlog(ctx.l2_nch, levelmask, fmt, args);
       return;
   }
  @@ -666,7 +668,7 @@
   
       if (filename == NULL || buffer == NULL)
           CU(FSL_ERR_ARG);
  -fprintf(stderr, "DEBUG: appendfiletobuffer(..., %s)\n", filename);
  +/*fprintf(stderr, "DEBUG: appendfiletobuffer(..., %s)\n", filename);*/
   
       if ((fd = open(filename, O_RDONLY)) == -1)
           CU(FSL_ERR_SYS);

From ossp-cvs-owner@ossp.org  Thu Jul 18 17:18:30 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7C7B97653C; Thu, 18 Jul 2002 17:18:30 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.c fsl_test.c
Message-Id: <20020718151830.7C7B97653C@mail.ossp.org>
Date: Thu, 18 Jul 2002 17:18:30 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   18-Jul-2002 17:18:30
  Branch: HEAD                             Handle: 2002071816183000

  Modified files:
    ossp-pkg/fsl            fsl.c fsl_test.c

  Log:
    flush with lots of debugging stuff

  Summary:
    Revision    Changes     Path
    1.13        +11 -1      ossp-pkg/fsl/fsl.c
    1.2         +15 -0      ossp-pkg/fsl/fsl_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 fsl.c
  --- ossp-pkg/fsl/fsl.c	18 Jul 2002 14:07:33 -0000	1.12
  +++ ossp-pkg/fsl/fsl.c	18 Jul 2002 15:18:30 -0000	1.13
  @@ -499,6 +499,15 @@
       }
       if ((l2rv = l2_channel_open(ctx.l2_nch)) != L2_OK) {
           cp = l2_env_strerror(ctx.l2_env, l2rv); fprintf(stderr, "Error: logging failed to open channel stream %s(%d)\n", cp, l2rv); CU(1); }
  +    if ((l2rv = l2_channel_log(ctx.l2_nch, L2_LEVEL_PANIC,    "testing L2_LEVEL_PANIC    0x%.8x", L2_LEVEL_PANIC   )) != L2_OK)               fprintf(stderr, "DEBUG: GOTCHA#0:%s(%d)\n", l2_env_strerror(ctx.l2_env, l2rv), l2rv);
  +    if ((l2rv = l2_channel_log(ctx.l2_nch, L2_LEVEL_CRITICAL, "testing L2_LEVEL_CRITICAL 0x%.8x", L2_LEVEL_CRITICAL)) != L2_OK)               fprintf(stderr, "DEBUG: GOTCHA#1:%s(%d)\n", l2_env_strerror(ctx.l2_env, l2rv), l2rv);
  +    if ((l2rv = l2_channel_log(ctx.l2_nch, L2_LEVEL_ERROR,    "testing L2_LEVEL_ERROR    0x%.8x", L2_LEVEL_ERROR   )) != L2_OK)               fprintf(stderr, "DEBUG: GOTCHA#2:%s(%d)\n", l2_env_strerror(ctx.l2_env, l2rv), l2rv);
  +    if ((l2rv = l2_channel_log(ctx.l2_nch, L2_LEVEL_WARNING,  "testing L2_LEVEL_WARNING  0x%.8x", L2_LEVEL_WARNING )) != L2_OK)               fprintf(stderr, "DEBUG: GOTCHA#3:%s(%d)\n", l2_env_strerror(ctx.l2_env, l2rv), l2rv);
  +    if ((l2rv = l2_channel_log(ctx.l2_nch, L2_LEVEL_NOTICE,   "testing L2_LEVEL_NOTICE   0x%.8x", L2_LEVEL_NOTICE  )) != L2_OK)               fprintf(stderr, "DEBUG: GOTCHA#4:%s(%d)\n", l2_env_strerror(ctx.l2_env, l2rv), l2rv);
  +    if ((l2rv = l2_channel_log(ctx.l2_nch, L2_LEVEL_INFO,     "testing L2_LEVEL_INFO     0x%.8x", L2_LEVEL_INFO    )) != L2_OK)               fprintf(stderr, "DEBUG: GOTCHA#5:%s(%d)\n", l2_env_strerror(ctx.l2_env, l2rv), l2rv);
  +    if ((l2rv = l2_channel_log(ctx.l2_nch, L2_LEVEL_TRACE,    "testing L2_LEVEL_TRACE    0x%.8x", L2_LEVEL_TRACE   )) != L2_OK)               fprintf(stderr, "DEBUG: GOTCHA#6:%s(%d)\n", l2_env_strerror(ctx.l2_env, l2rv), l2rv);
  +    if ((l2rv = l2_channel_log(ctx.l2_nch, L2_LEVEL_DEBUG,    "testing L2_LEVEL_DEBUG    0x%.8x", L2_LEVEL_DEBUG   )) != L2_OK)               fprintf(stderr, "DEBUG: GOTCHA#7:%s(%d)\n", l2_env_strerror(ctx.l2_env, l2rv), l2rv);
  +    if ((l2rv = l2_channel_log(ctx.l2_nch, L2_LEVEL_INFO|L2_LEVEL_CRITICAL, "combitest   0x%.8x", L2_LEVEL_INFO|L2_LEVEL_CRITICAL)) != L2_OK) fprintf(stderr, "DEBUG: GOTCHA#8:%s(%d)\n", l2_env_strerror(ctx.l2_env, l2rv), l2rv);
   
       ctx.maskpri = LOG_UPTO(LOG_DEBUG);
   
  @@ -570,6 +579,7 @@
           return;
   
       priority &= LOG_PRIMASK; /* strip off facility */
  +    fprintf(stderr, "DEBUG: prioriy=0x%.8lx\n", (unsigned long)priority);
   
       levelmask = 0;
       for (i = 0; sysloglevel2string[i].string != NULL; i++) {
  @@ -577,7 +587,7 @@
           if (ctx.levelmap[i].syslog == priority)
               levelmask |= ctx.levelmap[i].l2;
       }
  -    /*fprintf(stderr, "DEBUG: prioriy=0x%.8lx > levelmask=0x%.8lx\n", (unsigned long)priority, (unsigned long)levelmask);*/
  +    fprintf(stderr, "DEBUG: levelmask=0x%.8lx\n", (unsigned long)levelmask);
       l2_channel_vlog(ctx.l2_nch, levelmask, fmt, args);
       return;
   }
  Index: ossp-pkg/fsl/fsl_test.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 fsl_test.c
  --- ossp-pkg/fsl/fsl_test.c	9 Jul 2002 09:42:09 -0000	1.1
  +++ ossp-pkg/fsl/fsl_test.c	18 Jul 2002 15:18:30 -0000	1.2
  @@ -9,6 +9,21 @@
       syslog(LOG_ALERT, "who: internal error 23\n");
       setlogmask(LOG_UPTO(LOG_ERR));
       syslog(LOG_INFO|LOG_LOCAL2, "foobar error: %m");
  +    syslog(LOG_EMERG,   "syslogging LOG_EMERG   %d", LOG_EMERG  );
  +    syslog(LOG_ALERT,   "syslogging LOG_ALERT   %d", LOG_ALERT  );
  +    syslog(LOG_CRIT,    "syslogging LOG_CRIT    %d", LOG_CRIT   );
  +    syslog(LOG_ERR,     "syslogging LOG_ERR     %d", LOG_ERR    );
  +    syslog(LOG_WARNING, "syslogging LOG_WARNING %d", LOG_WARNING);
  +    syslog(LOG_NOTICE,  "syslogging LOG_NOTICE  %d", LOG_NOTICE );
  +    syslog(LOG_INFO,    "syslogging LOG_INFO    %d", LOG_INFO   );
  +    syslog(LOG_DEBUG,   "syslogging LOG_DEBUG   %d", LOG_DEBUG  );
       return 0;
   }
  +
  +
  +
  +
  +
  +
  +
   

From ossp-cvs-owner@ossp.org  Thu Jul 18 17:34:56 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 17F5876543; Thu, 18 Jul 2002 17:34:56 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg 00TODO cfg.h cfg.pod cfg_node.c cfg_syn.c cfg...
Message-Id: <20020718153456.17F5876543@mail.ossp.org>
Date: Thu, 18 Jul 2002 17:34:56 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Jul-2002 17:34:55
  Branch: HEAD                             Handle: 2002071816345500

  Modified files:
    ossp-pkg/cfg            00TODO cfg.h cfg.pod cfg_node.c cfg_syn.c
                            cfg_test.c

  Log:
    flush work of today: first cut for real cfg_node_select()

  Summary:
    Revision    Changes     Path
    1.9         +1  -0      ossp-pkg/cfg/00TODO
    1.11        +1  -1      ossp-pkg/cfg/cfg.h
    1.4         +44 -4      ossp-pkg/cfg/cfg.pod
    1.13        +265 -20    ossp-pkg/cfg/cfg_node.c
    1.13        +16 -6      ossp-pkg/cfg/cfg_syn.c
    1.7         +28 -3      ossp-pkg/cfg/cfg_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/00TODO
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 00TODO
  --- ossp-pkg/cfg/00TODO	17 Jul 2002 18:47:52 -0000	1.8
  +++ ossp-pkg/cfg/00TODO	18 Jul 2002 15:34:55 -0000	1.9
  @@ -1,4 +1,5 @@
   
  +- destroy haengt in Endlosschleife
   - in scanner: use an combination of dynamic buffer and atomic symbol/token sub-library 
     to allow first tokens of mostly arbitrary size and then to store the tokens
     redundancy-free.
  Index: ossp-pkg/cfg/cfg.h
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 cfg.h
  --- ossp-pkg/cfg/cfg.h	17 Jul 2002 15:04:08 -0000	1.10
  +++ ossp-pkg/cfg/cfg.h	18 Jul 2002 15:34:55 -0000	1.11
  @@ -135,7 +135,7 @@
   
   /* node traversing/locating */
   cfg_rc_t   cfg_node_root   (cfg_t  *cfg, cfg_node_t **node);
  -cfg_rc_t   cfg_node_select (cfg_t  *cfg, cfg_node_t  *node, cfg_node_t **node2, const char *spec, ...);
  +cfg_rc_t   cfg_node_select (cfg_t  *cfg, cfg_node_t  *node, cfg_node_t ***result, const char *spec, ...);
   cfg_rc_t   cfg_node_find   (cfg_t  *cfg, cfg_node_t  *node, cfg_rc_t (*cb_fct_cmp)(cfg_t *, cfg_node_t *, void *), void *cb_ctx_cmp, cfg_node_t **cont);
   cfg_rc_t   cfg_node_apply  (cfg_t  *cfg, cfg_node_t  *node, cfg_rc_t (*cb_fct_cmp)(cfg_t *, cfg_node_t *, void *), void *cb_ctx_cmp, cfg_rc_t (*cb_fct_cb)(cfg_t *, cfg_node_t *, void *), void *cb_ctx_cb);
   cfg_rc_t   cfg_node_cmp    (cfg_t  *cfg, cfg_node_t  *node, void *token);
  Index: ossp-pkg/cfg/cfg.pod
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 cfg.pod
  --- ossp-pkg/cfg/cfg.pod	12 Jul 2002 19:59:33 -0000	1.3
  +++ ossp-pkg/cfg/cfg.pod	18 Jul 2002 15:34:55 -0000	1.4
  @@ -175,13 +175,53 @@
   
    virtualhost[2].directory
   
  +=head1 NODE SELECTION SPECIFICATION
  +
  +The B<cfg_node_select> function takes a I<node selection specification>
  +string B<select> for locating the intended nodes. This specification is
  +defined as:
  +
  +B<select>           ::= I<empty>
  +                   | B<select-step> B<select>
  +
  +B<select-step>      ::= B<select-direction> 
  +                     B<select-pattern> 
  +                     B<select-filter>
  +
  +B<select-direction> ::= "./"        # current node
  +                   | "../"       # parent node
  +                   | "..../"     # anchestor nodes
  +                   | "-/"        # previous sibling node
  +                   | "--/"       # preceeding sibling nodes
  +                   | "+/"        # next sibling node
  +                   | "++/"       # following sibling nodes
  +                   | "/"         # child nodes
  +                   | "//"        # descendant nodes
  +
  +B<select-pattern>   ::= /</ B<regex> />/
  +                   | B<token> 
  +
  +B<select-filter>    ::= I<empty>
  +                   | /\[/ B<filter-range> /\]/
  +
  +B<filter-range>     ::= B<num>           # short for: num,num
  +                   | B<num> /,/          # short for: num,-1
  +                   | /,/ B<num>          # short for: 1,num
  +                   | B<num> /,/ B<num>
  +                   
  +B<num>              ::= /^[+-]?[0-9]+/
  +
  +B<regex>            ::= "Regular Expression (PCRE-based)"
  +
  +B<token>            ::= "Plain-Text Token String"
  +
   =head1 HISTORY
   
   B<OSSP cfg> was implemented in lots of small steps over a very
  -long time. The first ideas date back to the year 1995 when Ralf S.
  -Engelschall attended his first compiler construction lessons at
  -university. But it was first time finished in 2002 by him for use in the
  -B<OSSP> project.
  +long time. The first ideas date back to the year 1995 when
  +Ralf S. Engelschall attended his first compiler construction lessons at
  +university. But it was first time finished in summer 2002 by him for use
  +in the B<OSSP> project.
   
   =head1 AUTHOR
   
  Index: ossp-pkg/cfg/cfg_node.c
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 cfg_node.c
  --- ossp-pkg/cfg/cfg_node.c	17 Jul 2002 15:04:08 -0000	1.12
  +++ ossp-pkg/cfg/cfg_node.c	18 Jul 2002 15:34:55 -0000	1.13
  @@ -32,9 +32,11 @@
   #include <stdlib.h>
   #include <stdarg.h>
   #include <unistd.h>
  +#include <limits.h>
   
   #include "cfg_main.h"
   #include "cfg_node.h"
  +#include "cfg_fmt.h"
   
   cfg_rc_t cfg_node_create(cfg_t *cfg, cfg_node_t **node)
   {
  @@ -314,37 +316,280 @@
       return CFG_OK;
   }
   
  -cfg_rc_t cfg_node_select(cfg_t *cfg, cfg_node_t *node, cfg_node_t **node2, const char *fmt, ...)
  +static cfg_rc_t 
  +cfg_node_select_step1(
  +    cfg_t *, cfg_node_t *, cfg_node_t ***, long *, const char *);
  +static cfg_rc_t 
  +cfg_node_select_step2(
  +    cfg_t *, cfg_node_t *, cfg_node_t ***, long *, const char *, const char *, size_t, long, long, long *);
  +
  +static cfg_rc_t 
  +cfg_node_select_step3(
  +    cfg_t *cfg, 
  +    cfg_node_t *node, 
  +    cfg_node_t ***result_vec, long *result_len, 
  +    const char *spec,
  +    const char *cpSel, size_t nSel,
  +    long nFilMin, long nFilMax,
  +    long *nFound)
   {
  -#if 0
  -    cfg_node_t *n;
  +    cfg_rc_t rc;
  +
  +    fprintf(stderr, "step3: (1) cpSel=\"%s\", nSel=%d, nFilMin=%ld, nFilMax=%ld, nFound=%ld\n", cpSel, nSel, nFilMin, nFilMax, *nFound);
  +
  +    if (spec[0] == '\0') {
  +        /* end of selection, node found */
  +        *nFound++;
  +        fprintf(stderr, "step3: found node=0x%lx!!\n", (unsigned long)node);
  +        if (nFilMin <= *nFound && *nFound <= nFilMax) {
  +            if (result_len != NULL)
  +                (*result_len)++;
  +            if (result_vec != NULL) {
  +                if ((*result_vec = (cfg_node_t **)realloc(*result_vec, sizeof(cfg_node_t *)*((*result_len)+1))) == NULL)
  +                    return CFG_ERR_SYS;
  +                (*result_vec)[(*result_len)-1] = node;
  +                (*result_vec)[(*result_len)] = NULL;
  +            }
  +        }
  +        rc = CFG_OK;
  +    }
  +    else {
  +        rc = cfg_node_select_step1(cfg, node, result_vec, result_len, spec);
  +    }
  +    return rc;
  +}
  +
  +static cfg_rc_t 
  +cfg_node_select_step2(
  +    cfg_t *cfg, 
  +    cfg_node_t *node, 
  +    cfg_node_t ***result_vec, long *result_len, 
  +    const char *spec,
  +    const char *cpSel, size_t nSel,
  +    long nFilMin, long nFilMax,
  +    long *nFound)
  +{
  +    cfg_rc_t rc;
  +    char *token;
  +
  +    fprintf(stderr, "step2: (1) cpSel=\"%s\", nSel=%d, nFilMin=%ld, nFilMax=%ld, nFound=%ld\n", cpSel, nSel, nFilMin, nFilMax, *nFound);
  +
  +    if (strncmp(cpSel, ".", nSel) == 0) {
  +        /* current node (no-op) */
  +        return cfg_node_select_step3(cfg, node, result_vec, result_len, spec, cpSel, nSel, nFilMin, nFilMax, nFound);
  +    }
  +    else if (strncmp(cpSel, "..", nSel) == 0) {
  +        /* parent node */
  +        if ((node = node->parent) == NULL)
  +            return CFG_OK;
  +        if (node->type == CFG_NODE_TYPE_DIR)
  +            if ((node = node->parent) == NULL)
  +                return CFG_OK;
  +        return cfg_node_select_step3(cfg, node, result_vec, result_len, spec, cpSel, nSel, nFilMin, nFilMax, nFound);
  +    }
  +    else if (strncmp(cpSel, "....", nSel) == 0) {
  +        /* anchestor nodes */
  +        while ((node = node->parent) != NULL) {
  +            if (node->type == CFG_NODE_TYPE_DIR)
  +                if ((node = node->parent) == NULL)
  +                    break;
  +            if ((rc = cfg_node_select_step3(cfg, node, result_vec, result_len, spec, cpSel, nSel, nFilMin, nFilMax, nFound)) != CFG_OK)
  +                return rc;
  +        }
  +        return CFG_OK;
  +    }
  +    else if (strncmp(cpSel, "-", nSel) == 0) {
  +        /* previous sibling node */
  +        if ((rc = cfg_node_get(cfg, node, CFG_NODE_ATTR_LBROTH, &node)) != CFG_OK)
  +            return CFG_OK;
  +        return cfg_node_select_step3(cfg, node, result_vec, result_len, spec, cpSel, nSel, nFilMin, nFilMax, nFound);
  +    }
  +    else if (strncmp(cpSel, "--", nSel) == 0) {
  +        /* preceeding sibling nodes */
  +        while ((rc = cfg_node_get(cfg, node, CFG_NODE_ATTR_LBROTH, &node)) == CFG_OK)
  +            if ((rc = cfg_node_select_step3(cfg, node, result_vec, result_len, spec, cpSel, nSel, nFilMin, nFilMax, nFound)) != CFG_OK)
  +                return rc;
  +        return CFG_OK;
  +    }
  +    else if (strncmp(cpSel, "+", nSel) == 0) {
  +        /* next sibling node */
  +        if ((rc = cfg_node_get(cfg, node, CFG_NODE_ATTR_RBROTH, &node)) != CFG_OK)
  +            return CFG_OK;
  +        return cfg_node_select_step3(cfg, node, result_vec, result_len, spec, cpSel, nSel, nFilMin, nFilMax, nFound);
  +    }
  +    else if (strncmp(cpSel, "++", nSel) == 0) {
  +        /* following sibling nodes */
  +        while ((rc = cfg_node_get(cfg, node, CFG_NODE_ATTR_RBROTH, &node)) == CFG_OK)
  +            if ((rc = cfg_node_select_step3(cfg, node, result_vec, result_len, spec, cpSel, nSel, nFilMin, nFilMax, nFound)) != CFG_OK)
  +                return rc;
  +        return CFG_OK;
  +    }
  +    else if (nSel == 0) {
  +        /* descendant nodes */
  +        if ((rc = cfg_node_get(cfg, node, CFG_NODE_ATTR_CHILD1, &node)) == CFG_OK)
  +            while ((rc = cfg_node_get(cfg, node, CFG_NODE_ATTR_RBROTH, &node)) == CFG_OK)
  +                if ((rc = cfg_node_select_step2(cfg, node, result_vec, result_len, spec, cpSel, nSel, nFilMin, nFilMax, nFound)) != CFG_OK)
  +                    return rc;
  +        return CFG_OK;
  +    }
  +    else {
  +        /* child node */
  +        fprintf(stderr, "step2: child node 0x%lx\n", (unsigned long)node);
  +        if ((node = node->child1) == NULL)
  +            return CFG_OK;
  +        if (node->type == CFG_NODE_TYPE_DIR)
  +            if ((node = node->child1) == NULL)
  +                return CFG_OK;
  +        fprintf(stderr, "step2: child node 0x%lx\n", (unsigned long)node);
  +        do {
  +            if (node->token != NULL) {
  +                token = node->token;
  +                size_t l = strlen(token);
  +                fprintf(stderr, "step2: child node: \"%s\"\n", token);
  +                if (   (l == 1 && l == nSel && token[0] == '*')
  +                    || (l == nSel && strncmp(token, cpSel, nSel) == 0)) {
  +                    if ((rc = cfg_node_select_step3(cfg, node, result_vec, result_len, spec, cpSel, nSel, nFilMin, nFilMax, nFound)) != CFG_OK)
  +                        return rc;
  +                }
  +            }
  +        } while ((node = node->rbroth) != NULL);
  +        return CFG_OK;
  +    }
  +    return rc;
  +}
  +
  +static cfg_rc_t 
  +cfg_node_select_step1(
  +    cfg_t *cfg, 
  +    cfg_node_t *node, 
  +    cfg_node_t ***result_vec, long *result_len, 
  +    const char *spec)
  +{
  +    const char *cpSel; size_t nSel;
  +    long nFilMin, nFilMax;
  +    long n;
  +    const char *cp;
  +    char *cp2;
  +    cfg_rc_t rc;
  +    long nFound;
  +
  +    fprintf(stderr, "step1(spec=\"%s\")\n", spec);
  +
  +    /* stop processing if spec is empty */
  +    if (spec[0] == '\0')
  +        return CFG_OK;
  +
  +    /* determine selection step information */
  +    cpSel = spec; 
  +    nSel = strcspn(cpSel, "[/");
  +    cp = cpSel+nSel;
  +    nFilMin = 1;
  +    nFilMax = LONG_MAX;
  +    if (*cp == '[') {
  +        cp++;
  +        n = strtol(cp, &cp2, 10);
  +        if (cp2 > cp && n != 0)
  +            nFilMin = n;
  +        cp = cp2;
  +        if (*cp == ',') {
  +            cp++;
  +            n = strtol(cp, &cp2, 10);
  +            if (cp2 > cp && n != 0)
  +                nFilMax = n;
  +            cp = cp2;
  +        }
  +        else
  +            nFilMax = nFilMin;
  +        if (*cp != ']') {
  +            cfg_error_info(cfg, CFG_ERR_ARG, "invalid selection specification filter range");
  +            return CFG_ERR_ARG;
  +        }
  +        cp++;
  +    }
  +    if (*cp == '/')
  +        cp++;
  +    spec = cp;
  +
  +    fprintf(stderr, "    step1: (1) cpSel=\"%s\", nSel=%d, nFilMin=%ld, nFilMax=%ld\n", cpSel, nSel, nFilMin, nFilMax);
  +
  +    /* perform pre-selection if filter range is relative to last element */
  +    if (nFilMin < 0 || nFilMax < 0) {
  +        if (nFilMin == -1)
  +            nFilMin = LONG_MAX;
  +        if (nFilMax == -1)
  +            nFilMax = LONG_MAX;
  +        if (nFilMin < 0 || nFilMax < 0) {
  +            nFound = 0;
  +            if ((rc = cfg_node_select_step2(cfg, node, NULL, NULL, spec, cpSel, nSel, 1, LONG_MAX, &nFound)) != CFG_OK)
  +                return rc;
  +            if (nFilMin < 0) {
  +                nFilMin = nFound + nFilMin;
  +                if (nFilMin < 1)
  +                    nFilMin = 1;
  +            }
  +            if (nFilMax < 0) {
  +                nFilMax = nFound + nFilMax;
  +                if (nFilMax < 1)
  +                    nFilMax = 1;
  +            }
  +        }
  +    }
  +
  +    fprintf(stderr, "    step1: (2) cpSel=\"%s\", nSel=%d, nFilMin=%ld, nFilMax=%ld\n", cpSel, nSel, nFilMin, nFilMax);
  +
  +    /* perform real selection */
  +    nFound = 0;
  +    if ((rc = cfg_node_select_step2(cfg, node, result_vec, result_len, spec, cpSel, nSel, nFilMin, nFilMax, &nFound)) != CFG_OK)
  +        return rc;
  +
  +    return CFG_OK;
  +}
  +
  +cfg_rc_t
  +cfg_node_select(
  +    cfg_t *cfg, 
  +    cfg_node_t *node, 
  +    cfg_node_t ***result_vec, 
  +    const char *fmt, 
  +    ...)
  +{
  +    cfg_rc_t rc;
       va_list ap;
  -    char *cpB;
  -    char *cpE;
       char *spec;
  +    char *cp;
  +    long result_len;
   
  -    if (cfg == NULL || node == NULL || node2 == NULL || spec == NULL)
  +    if (cfg == NULL || result_vec == NULL || fmt == NULL)
           return CFG_ERR_ARG;
   
       /* on-the-fly create or just take over specification string */
       va_start(ap, fmt);
  -    spec = l2_util_vasprintf(fmt, ap);
  +    spec = cfg_fmt_vasprintf(fmt, ap);
       va_end(ap);
  +    if (spec == NULL)
  +        return CFG_ERR_FMT;
  +
  +    /* special case for absolute (start from root-node) selection */
  +    cp = spec;
  +    if (cp[0] == '/') {
  +        node = cfg->root;
  +        cp++;
  +    }
  +    if (node == NULL)
  +        node = cfg->root;
   
  -    /* enter the parsing loop */
  -    cpE = spec;
  -    while (*cpE != '\0') {
  -        /* determine begin of parameter name */
  -        cpB = cpE;
  -        if ((n = strspn(cpB, " \t\r\n")) > 0)
  -            cpB += n;
  -
  -        /* determine end of parameter name */
  -        cpE = cpB;
  -        if ((n = strspn(cpB, " \t\r\n")) > 0)
  -            cpB += n;
  +    /* initialize result node array */
  +    result_len = 0;
  +    if ((*result_vec = (cfg_node_t **)malloc(sizeof(cfg_node_t *)*(result_len+1))) == NULL)
  +        return CFG_ERR_SYS;
  +    (*result_vec)[result_len] = NULL;
  +
  +    /* perform the selection stepping */
  +    if ((rc = cfg_node_select_step1(cfg, node, result_vec, &result_len, cp)) != CFG_OK) {
  +        free(*result_vec);
  +        return rc;
       }
  -#endif
  +
       return CFG_OK;
   }
   
  Index: ossp-pkg/cfg/cfg_syn.c
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 cfg_syn.c
  --- ossp-pkg/cfg/cfg_syn.c	10 Jul 2002 14:46:28 -0000	1.12
  +++ ossp-pkg/cfg/cfg_syn.c	18 Jul 2002 15:34:55 -0000	1.13
  @@ -270,7 +270,8 @@
       cfg_rc_t rc;
       char *token;
   
  -    rc = cfg_node_get(ctx->cfg, node, CFG_NODE_ATTR_TYPE, &type);
  +    if ((rc = cfg_node_get(ctx->cfg, node, CFG_NODE_ATTR_TYPE, &type)) != CFG_OK)
  +        return;
       if (type == CFG_NODE_TYPE_SEQ) {
           export_format(ctx, "{\n");
           export_indent(ctx, 1);
  @@ -313,6 +314,7 @@
       cfg_buf_t *buf;
       cfg_rc_t rc;
       export_t ctx;
  +    cfg_node_t *root;
   
       if (node == NULL || output == NULL)
           return CFG_ERR_ARG;
  @@ -323,12 +325,20 @@
       ctx.buf    = buf;
       ctx.indent = 0;
   
  -    /* first SEQ node is special, so expand it manually instead
  -       of just calling once export_node(&ctx, node); */
  -    cfg_node_get(cfg, node, CFG_NODE_ATTR_CHILD1, &node);
  -    while (node != NULL) {
  +    if ((rc = cfg_node_root(cfg, &root)) != CFG_OK)
  +        return rc;
  +    if (node == root) {
  +        /* if we dump the whole configuration, treat the first SEQ node special
  +           because of the implicit braces around it. So expand it manually instead
  +           of just calling once export_node(&ctx, node); */
  +        cfg_node_get(cfg, node, CFG_NODE_ATTR_CHILD1, &node);
  +        while (node != NULL) {
  +            export_node(&ctx, node);
  +            cfg_node_get(cfg, node, CFG_NODE_ATTR_RBROTH, &node);
  +        }
  +    }
  +    else {
           export_node(&ctx, node);
  -        cfg_node_get(cfg, node, CFG_NODE_ATTR_RBROTH, &node);
       }
   
       cfg_buf_content(buf, output, NULL, NULL);
  Index: ossp-pkg/cfg/cfg_test.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 cfg_test.c
  --- ossp-pkg/cfg/cfg_test.c	11 Jul 2002 09:19:13 -0000	1.6
  +++ ossp-pkg/cfg/cfg_test.c	18 Jul 2002 15:34:55 -0000	1.7
  @@ -14,9 +14,12 @@
       char *ex_ptr;
       char *error;
       cfg_t *cfg;
  +    cfg_node_t **vec;
  +    cfg_node_t *n;
  +    int i;
   
  -    if (argc != 2) {
  -        fprintf(stderr, "USAGE: %s <file>\n", argv[0]);
  +    if (argc < 2 || argc > 3) {
  +        fprintf(stderr, "USAGE: %s <file> [<select>]\n", argv[0]);
           exit(1);
       }
   
  @@ -40,7 +43,6 @@
           exit(1);
       }
   
  -
       if ((rc = cfg_export(cfg, NULL, CFG_FMT_CFG, &ex_ptr, 0)) != CFG_OK) {
           cfg_error(cfg, rc, &error);
           fprintf(stderr, "ERROR: cfg_export: %s\n", error);
  @@ -50,6 +52,29 @@
       }
   
       fprintf(stdout, "%s", ex_ptr);
  +    fflush(stdout);
  +
  +    if (argc == 3) {
  +        if ((rc = cfg_node_select(cfg, NULL, &vec, "%s", argv[2])) != CFG_OK) {
  +            cfg_error(cfg, rc, &error);
  +            fprintf(stderr, "ERROR: cfg_node_select: %s\n", error);
  +            free(im_ptr);
  +            //cfg_destroy(cfg);
  +            exit(1);
  +        }
  +        for (i = 1; vec[i] != NULL; i++) {
  +            fprintf(stdout, "---- selection #%d ----\n", i);
  +            if ((rc = cfg_export(cfg, vec[i], CFG_FMT_CFG, &ex_ptr, 0)) != CFG_OK) {
  +                cfg_error(cfg, rc, &error);
  +                fprintf(stderr, "ERROR: cfg_export: %s\n", error);
  +                free(im_ptr);
  +                //cfg_destroy(cfg);
  +                exit(1);
  +            }
  +            fprintf(stdout, "%s", ex_ptr);
  +            fprintf(stdout, "---- selection #%d ----\n", i);
  +        }
  +    }
   
   #if 0
       cfg_syn_destroy(cfg, node);

From ossp-cvs-owner@ossp.org  Thu Jul 18 17:53:37 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C48977653C; Thu, 18 Jul 2002 17:53:36 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.c
Message-Id: <20020718155336.C48977653C@mail.ossp.org>
Date: Thu, 18 Jul 2002 17:53:36 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   18-Jul-2002 17:53:36
  Branch: HEAD                             Handle: 2002071816533600

  Modified files:
    ossp-pkg/fsl            fsl.c

  Log:
    mapping completed

  Summary:
    Revision    Changes     Path
    1.14        +50 -36     ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 fsl.c
  --- ossp-pkg/fsl/fsl.c	18 Jul 2002 15:18:30 -0000	1.13
  +++ ossp-pkg/fsl/fsl.c	18 Jul 2002 15:53:36 -0000	1.14
  @@ -122,21 +122,36 @@
   };
   
   static struct {
  -    int         level;
       char       *string;
  +    int         level;
       l2_level_t  deflevelmap;
   } sysloglevel2string[] = {
  -    { LOG_EMERG,   "emerg",   L2_LEVEL_PANIC    },
  -    { LOG_ALERT,   "alert",   L2_LEVEL_PANIC    },
  -    { LOG_CRIT,    "crit",    L2_LEVEL_CRITICAL },
  -    { LOG_ERR,     "err",     L2_LEVEL_ERROR    },
  -    { LOG_WARNING, "warning", L2_LEVEL_WARNING  },
  -    { LOG_NOTICE,  "notice",  L2_LEVEL_NOTICE   },
  -    { LOG_INFO,    "info",    L2_LEVEL_INFO     },
  -    { LOG_DEBUG,   "debug",   L2_LEVEL_DEBUG    },
  -    { 0,           NULL,      0                 }
  +    { "emerg",   LOG_EMERG,   L2_LEVEL_PANIC    },
  +    { "alert",   LOG_ALERT,   L2_LEVEL_PANIC    },
  +    { "crit",    LOG_CRIT,    L2_LEVEL_CRITICAL },
  +    { "err",     LOG_ERR,     L2_LEVEL_ERROR    },
  +    { "warning", LOG_WARNING, L2_LEVEL_WARNING  },
  +    { "notice",  LOG_NOTICE,  L2_LEVEL_NOTICE   },
  +    { "info",    LOG_INFO,    L2_LEVEL_INFO     },
  +    { "debug",   LOG_DEBUG,   L2_LEVEL_DEBUG    },
  +    { NULL,      0,           0                 }
   };
   
  +static struct {
  +    char *string;
  +    l2_level_t level;
  +} l2level2string[] = {
  +    { "none",     0,                  },
  +    { "panic",    L2_LEVEL_PANIC,     },
  +    { "critical", L2_LEVEL_CRITICAL,  },
  +    { "error",    L2_LEVEL_ERROR,     },
  +    { "warning",  L2_LEVEL_WARNING,   },
  +    { "notice",   L2_LEVEL_NOTICE,    },
  +    { "info",     L2_LEVEL_INFO,      },
  +    { "trace",    L2_LEVEL_TRACE,     },
  +    { "debug",    L2_LEVEL_DEBUG,     },
  +    { NULL,       0                   }
  +};
   typedef struct {
       int        syslog;
       l2_level_t l2;
  @@ -307,7 +322,7 @@
       for (i = 0; sysloglevel2string[i].string != NULL; i++) {
           ctx.levelmap[i].syslog = sysloglevel2string[i].level;
           ctx.levelmap[i].l2     = sysloglevel2string[i].deflevelmap;
  -        /*fprintf(stderr, "DEBUG: ctx.levelmap[%d].syslog = 0x%.8lx, ctx.levelmap[%d].l2 = 0x%.8lx\n", i, (unsigned long)ctx.levelmap[i].syslog, i, (unsigned long)ctx.levelmap[i].l2);*/
  +        //fprintf(stderr, "DEBUG: ctx.levelmap[%d].syslog = 0x%.8lx, ctx.levelmap[%d].l2 = 0x%.8lx\n", i, (unsigned long)ctx.levelmap[i].syslog, i, (unsigned long)ctx.levelmap[i].l2);
       }
   
       /* create L2 environment */
  @@ -476,19 +491,25 @@
           }
           else if (strcmp(cfgargtoka[0], "map") == 0) {
   
  -            unsigned int levelmask;
  +            int mapfrom;
  +            int mapto;
   
  -            for (i = 0; sysloglevel2string[i].string != NULL; i++) {
  -                if (strcmp(sysloglevel2string[i].string, cfgargtoka[1]) == 0) {
  -                    if ((l2rv = l2_util_s2l(cfgargtoka[2], strlen(cfgargtoka[2]), ',', &levelmask)) != L2_OK) {;
  -                        cp = l2_env_strerror(ctx.l2_env, l2rv); fprintf(stderr, "Error: illegal l2 mask \"%s\" %s(%d)\n", cfgargtoka[2], cp, l2rv); CU(1); }
  -                    ctx.levelmap[i].l2 = levelmask;
  -                    /*fprintf(stderr, "DEBUG: ctx.levelmap[%d].syslog = 0x%.8lx, ctx.levelmap[%d].l2 = 0x%.8lx\n", i, (unsigned long)ctx.levelmap[i].syslog, i, (unsigned long)ctx.levelmap[i].l2);*/
  -                    break;
  -                }
  +            for (i = 0, mapfrom = -1; (mapfrom == -1) && (sysloglevel2string[i].string != NULL); i++) {
  +                if (strcmp(sysloglevel2string[i].string, cfgargtoka[1]) == 0)
  +                    mapfrom = i;
               }
  -            if (sysloglevel2string[i].string == NULL) {
  -                fprintf(stderr, "Error: trying to map unknown syslog level \"%s\"\n", cfgargtoka[1]); CU(1); }
  +            if (mapfrom == -1) {
  +                fprintf(stderr, "Error: trying to map from unknown syslog level \"%s\"\n", cfgargtoka[1]); CU(1); }
  +
  +            for (i = 0, mapto = -1; (mapto == -1) && (l2level2string[i].string != NULL); i++) {
  +                if (strcmp(l2level2string[i].string, cfgargtoka[2]) == 0)
  +                    mapto = i;
  +            }
  +            if (mapto == -1) {
  +                fprintf(stderr, "Error: trying to map to unknown l2 level \"%s\"\n", cfgargtoka[2]); CU(1); }
  +            
  +            ctx.levelmap[mapfrom].l2 = l2level2string[mapto].level;
  +            //fprintf(stderr, "DEBUG: map levelmap[%10s/%d].l2 = l2level2string[%10s/%d].level = 0x%.8lx\n", cfgargtoka[1], mapfrom, cfgargtoka[2], mapto, (unsigned long)l2level2string[mapto].level);
           }
           else {
               fprintf(stderr, "Error: internal, argument \"%s\" not implemented\n", cfgargtoka[0]); CU(1); }
  @@ -499,15 +520,6 @@
       }
       if ((l2rv = l2_channel_open(ctx.l2_nch)) != L2_OK) {
           cp = l2_env_strerror(ctx.l2_env, l2rv); fprintf(stderr, "Error: logging failed to open channel stream %s(%d)\n", cp, l2rv); CU(1); }
  -    if ((l2rv = l2_channel_log(ctx.l2_nch, L2_LEVEL_PANIC,    "testing L2_LEVEL_PANIC    0x%.8x", L2_LEVEL_PANIC   )) != L2_OK)               fprintf(stderr, "DEBUG: GOTCHA#0:%s(%d)\n", l2_env_strerror(ctx.l2_env, l2rv), l2rv);
  -    if ((l2rv = l2_channel_log(ctx.l2_nch, L2_LEVEL_CRITICAL, "testing L2_LEVEL_CRITICAL 0x%.8x", L2_LEVEL_CRITICAL)) != L2_OK)               fprintf(stderr, "DEBUG: GOTCHA#1:%s(%d)\n", l2_env_strerror(ctx.l2_env, l2rv), l2rv);
  -    if ((l2rv = l2_channel_log(ctx.l2_nch, L2_LEVEL_ERROR,    "testing L2_LEVEL_ERROR    0x%.8x", L2_LEVEL_ERROR   )) != L2_OK)               fprintf(stderr, "DEBUG: GOTCHA#2:%s(%d)\n", l2_env_strerror(ctx.l2_env, l2rv), l2rv);
  -    if ((l2rv = l2_channel_log(ctx.l2_nch, L2_LEVEL_WARNING,  "testing L2_LEVEL_WARNING  0x%.8x", L2_LEVEL_WARNING )) != L2_OK)               fprintf(stderr, "DEBUG: GOTCHA#3:%s(%d)\n", l2_env_strerror(ctx.l2_env, l2rv), l2rv);
  -    if ((l2rv = l2_channel_log(ctx.l2_nch, L2_LEVEL_NOTICE,   "testing L2_LEVEL_NOTICE   0x%.8x", L2_LEVEL_NOTICE  )) != L2_OK)               fprintf(stderr, "DEBUG: GOTCHA#4:%s(%d)\n", l2_env_strerror(ctx.l2_env, l2rv), l2rv);
  -    if ((l2rv = l2_channel_log(ctx.l2_nch, L2_LEVEL_INFO,     "testing L2_LEVEL_INFO     0x%.8x", L2_LEVEL_INFO    )) != L2_OK)               fprintf(stderr, "DEBUG: GOTCHA#5:%s(%d)\n", l2_env_strerror(ctx.l2_env, l2rv), l2rv);
  -    if ((l2rv = l2_channel_log(ctx.l2_nch, L2_LEVEL_TRACE,    "testing L2_LEVEL_TRACE    0x%.8x", L2_LEVEL_TRACE   )) != L2_OK)               fprintf(stderr, "DEBUG: GOTCHA#6:%s(%d)\n", l2_env_strerror(ctx.l2_env, l2rv), l2rv);
  -    if ((l2rv = l2_channel_log(ctx.l2_nch, L2_LEVEL_DEBUG,    "testing L2_LEVEL_DEBUG    0x%.8x", L2_LEVEL_DEBUG   )) != L2_OK)               fprintf(stderr, "DEBUG: GOTCHA#7:%s(%d)\n", l2_env_strerror(ctx.l2_env, l2rv), l2rv);
  -    if ((l2rv = l2_channel_log(ctx.l2_nch, L2_LEVEL_INFO|L2_LEVEL_CRITICAL, "combitest   0x%.8x", L2_LEVEL_INFO|L2_LEVEL_CRITICAL)) != L2_OK) fprintf(stderr, "DEBUG: GOTCHA#8:%s(%d)\n", l2_env_strerror(ctx.l2_env, l2rv), l2rv);
   
       ctx.maskpri = LOG_UPTO(LOG_DEBUG);
   
  @@ -579,15 +591,17 @@
           return;
   
       priority &= LOG_PRIMASK; /* strip off facility */
  -    fprintf(stderr, "DEBUG: prioriy=0x%.8lx\n", (unsigned long)priority);
  +    //fprintf(stderr, "DEBUG: prioriy  =0x%.8lx  ", (unsigned long)priority);
   
       levelmask = 0;
       for (i = 0; sysloglevel2string[i].string != NULL; i++) {
  -    /*fprintf(stderr, "DEBUG: ctx.levelmap[%d].syslog = 0x%.8lx, ctx.levelmap[%d].l2 = 0x%.8lx\n", i, (unsigned long)ctx.levelmap[i].syslog, i, (unsigned long)ctx.levelmap[i].l2);*/
  -        if (ctx.levelmap[i].syslog == priority)
  -            levelmask |= ctx.levelmap[i].l2;
  +    //fprintf(stderr, "DEBUG: ctx.levelmap[%d].syslog = 0x%.8lx, ctx.levelmap[%d].l2 = 0x%.8lx\n", i, (unsigned long)ctx.levelmap[i].syslog, i, (unsigned long)ctx.levelmap[i].l2);
  +        if (ctx.levelmap[i].syslog == priority) {
  +            levelmask = ctx.levelmap[i].l2;
  +            break;
  +        }
       }
  -    fprintf(stderr, "DEBUG: levelmask=0x%.8lx\n", (unsigned long)levelmask);
  +    //fprintf(stderr, "DEBUG: levelmask=0x%.8lx\n", (unsigned long)levelmask);
       l2_channel_vlog(ctx.l2_nch, levelmask, fmt, args);
       return;
   }

From ossp-cvs-owner@ossp.org  Fri Jul 19 15:26:21 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 56F017653C; Fri, 19 Jul 2002 15:26:21 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.c
Message-Id: <20020719132621.56F017653C@mail.ossp.org>
Date: Fri, 19 Jul 2002 15:26:21 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-Jul-2002 15:26:21
  Branch: HEAD                             Handle: 2002071914262000

  Modified files:
    ossp-pkg/fsl            fsl.c

  Log:
    cleanup code

  Summary:
    Revision    Changes     Path
    1.15        +14 -12     ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 fsl.c
  --- ossp-pkg/fsl/fsl.c	18 Jul 2002 15:53:36 -0000	1.14
  +++ ossp-pkg/fsl/fsl.c	19 Jul 2002 13:26:20 -0000	1.15
  @@ -82,9 +82,11 @@
       FSL_ERR_USE,              /* invalid use */
       FSL_ERR_MEM,              /* no more memory available */
       FSL_ERR_SYS               /* operating system error, see errno */
  -    //FSL_ERR_FMT,              /* formatting error */
  -    //FSL_ERR_INT,              /* internal error */
  -    //FSL_ERR_SYN,              /* syntax error */
  +#if 0
  +    FSL_ERR_FMT,              /* formatting error */
  +    FSL_ERR_INT,              /* internal error */
  +    FSL_ERR_SYN,              /* syntax error */
  +#endif
   } fsl_rc_t;
   
   fsl_rc_t readfileorallfiles(buf_t *, const char *);
  @@ -170,7 +172,7 @@
       LOG_PRIMASK
   };
   
  -void traverse(cfg_t *cfg, cfg_node_t *cfgnode)
  +static void traverse(cfg_t *cfg, cfg_node_t *cfgnode)
   {
       int rc;
       cfg_node_t *cfgchld;
  @@ -205,7 +207,7 @@
    * Returns the number of characters (to be) written to output.  Output can be suppressed
    * by passing a NULL outpbuf. The terminating NUL is not counted but will be written!
    */
  -int substcapture(const char *inbuf, int inlen, const char **capary, int nary, char *outbuf)
  +static int substcapture(const char *inbuf, int inlen, const char **capary, int nary, char *outbuf)
   {
       int  i; /* input cursor, current position */
       int  n; /* outbuf cursor, next possible write position */
  @@ -269,7 +271,7 @@
       cfg_node_type_t  cfgtype;
       int              cfgnumc;
       int              cfgnume;
  -    char *cfgargtoka[3]; //FIXME hardcoded maximum number of arguments
  +    char *cfgargtoka[3]; /*FIXME hardcoded maximum number of arguments */
       char *cfgargtok;
       char *argident;
       char *argmatch;
  @@ -280,7 +282,7 @@
       char *cpIdent;
       char *cpFacility;
       char *cpISF;
  -#define OVECSIZE 30 //FIXME find a good place for this
  +#define OVECSIZE 30 /*FIXME find a good place for this*/
       int ovec[OVECSIZE];
       const char   **acpMatch;
       l2_channel_t *ch; /* scratch variable */
  @@ -336,7 +338,7 @@
           cp = l2_env_strerror(ctx.l2_env, l2rv); fprintf(stderr, "Error: logging failed to register string formatter %s(%d)\n", cp, l2rv); CU(1); }
       if ((l2rv = l2_env_formatter(ctx.l2_env, 'm', l2_util_fmt_errno, NULL)) != L2_OK) {
           cp = l2_env_strerror(ctx.l2_env, l2rv); fprintf(stderr, "Error: logging failed to register errno formatter %s(%d)\n", cp, l2rv); CU(1); }
  -    if ((l2rv = l2_env_settimer(ctx.l2_env, 20)) != L2_OK) { //FIXME do we need this?
  +    if ((l2rv = l2_env_settimer(ctx.l2_env, 20)) != L2_OK) { /*FIXME do we need this?*/
           cp = l2_env_strerror(ctx.l2_env, l2rv); fprintf(stderr, "Error: failed to configure timer %s(%d)\n", cp, l2rv); CU(1); }
   
       /* create L2 noop channel */
  @@ -371,7 +373,7 @@
       /*  find root and check if it is a sequence and has one or more directives below it */
       if ((cfgrv = cfg_node_root(cfg, &cfgseq)) != CFG_OK) {
           (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_root() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  -    //FIXME traverse(cfg, cfgseq); /* DEBUG */
  +    /*FIXME traverse(cfg, cfgseq); DEBUG */
       if ((cfgrv = cfg_node_get(cfg, cfgseq, CFG_NODE_ATTR_TYPE, &cfgtype)) != CFG_OK) {
           (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
       if (cfgtype != CFG_NODE_TYPE_SEQ) {
  @@ -385,7 +387,7 @@
       if ((cfgrv = cfg_node_get(cfg, cfgseq, CFG_NODE_ATTR_CHILD1, &cfgdir)) != CFG_OK) {
           (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_CHILD1) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
       while (cfgdir != NULL) {
  -        //FIXME fprintf(stderr, "DEBUG: cfgdir=0x%.8lx\n", (unsigned long)cfgdir);
  +        /*FIXME fprintf(stderr, "DEBUG: cfgdir=0x%.8lx\n", (unsigned long)cfgdir); */
   
           /*  check if operating on a directive */
           if ((cfgrv = cfg_node_get(cfg, cfgdir, CFG_NODE_ATTR_TYPE, &cfgtype)) != CFG_OK) {
  @@ -440,7 +442,7 @@
               cfgargtoka[i] = cfgargtok;
           }
   
  -        if ((strcmp(cfgargtoka[0], "ident") == 0) || (strcmp(cfgargtoka[0], "default") == 0)) { //FIXME currently default and ident are identical
  +        if ((strcmp(cfgargtoka[0], "ident") == 0) || (strcmp(cfgargtoka[0], "default") == 0)) { /*FIXME currently default and ident are identical*/
   
               argident  = cfgargtoka[0];
               argmatch  = cfgargtoka[1];
  @@ -559,7 +561,7 @@
   {
       int oldmask;
   
  -    //FIXME this is currently a no-op. Should we care about maskpri, set l2 global mask or continue to ignore?
  +    /*FIXME this is currently a no-op. Should we care about maskpri, set l2 global mask or continue to ignore?*/
       /* remember the logging mask */
       oldmask = ctx.maskpri;
       if (maskpri != 0)

From ossp-cvs-owner@ossp.org  Fri Jul 19 15:26:51 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BF5067653C; Fri, 19 Jul 2002 15:26:51 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.c
Message-Id: <20020719132651.BF5067653C@mail.ossp.org>
Date: Fri, 19 Jul 2002 15:26:51 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-Jul-2002 15:26:51
  Branch: HEAD                             Handle: 2002071914265100

  Modified files:
    ossp-pkg/fsl            fsl.c

  Log:
    cleanup code

  Summary:
    Revision    Changes     Path
    1.16        +5  -5      ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 fsl.c
  --- ossp-pkg/fsl/fsl.c	19 Jul 2002 13:26:20 -0000	1.15
  +++ ossp-pkg/fsl/fsl.c	19 Jul 2002 13:26:51 -0000	1.16
  @@ -324,7 +324,7 @@
       for (i = 0; sysloglevel2string[i].string != NULL; i++) {
           ctx.levelmap[i].syslog = sysloglevel2string[i].level;
           ctx.levelmap[i].l2     = sysloglevel2string[i].deflevelmap;
  -        //fprintf(stderr, "DEBUG: ctx.levelmap[%d].syslog = 0x%.8lx, ctx.levelmap[%d].l2 = 0x%.8lx\n", i, (unsigned long)ctx.levelmap[i].syslog, i, (unsigned long)ctx.levelmap[i].l2);
  +        /*fprintf(stderr, "DEBUG: ctx.levelmap[%d].syslog = 0x%.8lx, ctx.levelmap[%d].l2 = 0x%.8lx\n", i, (unsigned long)ctx.levelmap[i].syslog, i, (unsigned long)ctx.levelmap[i].l2);*/
       }
   
       /* create L2 environment */
  @@ -511,7 +511,7 @@
                   fprintf(stderr, "Error: trying to map to unknown l2 level \"%s\"\n", cfgargtoka[2]); CU(1); }
               
               ctx.levelmap[mapfrom].l2 = l2level2string[mapto].level;
  -            //fprintf(stderr, "DEBUG: map levelmap[%10s/%d].l2 = l2level2string[%10s/%d].level = 0x%.8lx\n", cfgargtoka[1], mapfrom, cfgargtoka[2], mapto, (unsigned long)l2level2string[mapto].level);
  +            /*fprintf(stderr, "DEBUG: map levelmap[%10s/%d].l2 = l2level2string[%10s/%d].level = 0x%.8lx\n", cfgargtoka[1], mapfrom, cfgargtoka[2], mapto, (unsigned long)l2level2string[mapto].level);*/
           }
           else {
               fprintf(stderr, "Error: internal, argument \"%s\" not implemented\n", cfgargtoka[0]); CU(1); }
  @@ -593,17 +593,17 @@
           return;
   
       priority &= LOG_PRIMASK; /* strip off facility */
  -    //fprintf(stderr, "DEBUG: prioriy  =0x%.8lx  ", (unsigned long)priority);
  +    /*fprintf(stderr, "DEBUG: prioriy  =0x%.8lx  ", (unsigned long)priority);*/
   
       levelmask = 0;
       for (i = 0; sysloglevel2string[i].string != NULL; i++) {
  -    //fprintf(stderr, "DEBUG: ctx.levelmap[%d].syslog = 0x%.8lx, ctx.levelmap[%d].l2 = 0x%.8lx\n", i, (unsigned long)ctx.levelmap[i].syslog, i, (unsigned long)ctx.levelmap[i].l2);
  +    /*fprintf(stderr, "DEBUG: ctx.levelmap[%d].syslog = 0x%.8lx, ctx.levelmap[%d].l2 = 0x%.8lx\n", i, (unsigned long)ctx.levelmap[i].syslog, i, (unsigned long)ctx.levelmap[i].l2);*/
           if (ctx.levelmap[i].syslog == priority) {
               levelmask = ctx.levelmap[i].l2;
               break;
           }
       }
  -    //fprintf(stderr, "DEBUG: levelmask=0x%.8lx\n", (unsigned long)levelmask);
  +    /*fprintf(stderr, "DEBUG: levelmask=0x%.8lx\n", (unsigned long)levelmask);*/
       l2_channel_vlog(ctx.l2_nch, levelmask, fmt, args);
       return;
   }

From ossp-cvs-owner@ossp.org  Fri Jul 19 15:28:03 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A85697653C; Fri, 19 Jul 2002 15:28:03 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/SHARE ossp_navbar.wml ossp_pkg.wml ossp-web/pkg/l...
Message-Id: <20020719132803.A85697653C@mail.ossp.org>
Date: Fri, 19 Jul 2002 15:28:03 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   19-Jul-2002 15:28:03
  Branch: HEAD                             Handle: 2002071914280201

  Modified files:
    ossp-web/SHARE          ossp_navbar.wml ossp_pkg.wml
    ossp-web/pkg/lib        index.wml

  Log:
    add OSSP fsl

  Summary:
    Revision    Changes     Path
    1.7         +5  -3      ossp-web/SHARE/ossp_navbar.wml
    1.5         +8  -3      ossp-web/SHARE/ossp_pkg.wml
    1.15        +3  -0      ossp-web/pkg/lib/index.wml
  ____________________________________________________________________________

  Index: ossp-web/SHARE/ossp_navbar.wml
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 ossp_navbar.wml
  --- ossp-web/SHARE/ossp_navbar.wml	7 Jul 2002 18:11:24 -0000	1.6
  +++ ossp-web/SHARE/ossp_navbar.wml	19 Jul 2002 13:28:02 -0000	1.7
  @@ -247,15 +247,16 @@
     #   Packages, Libraries
     <navbar:button txt="GNU pth"          url=pkg/lib/pth/             id=pkg:lib:pth>
     <navbar:button txt="OSSP str"         url=pkg/lib/str/             id=pkg:lib:str>
  +  <navbar:button txt="OSSP mm"          url=pkg/lib/mm/              id=pkg:lib:mm>
     <navbar:button txt="OSSP sa"          url=pkg/lib/sa/              id=pkg:lib:sa>
     <navbar:button txt="OSSP ex"          url=pkg/lib/ex/              id=pkg:lib:ex>
     <navbar:button txt="OSSP l2"          url=pkg/lib/l2/              id=pkg:lib:l2>
     <navbar:button txt="OSSP var"         url=pkg/lib/var/             id=pkg:lib:var>
     <navbar:button txt="OSSP val"         url=pkg/lib/val/             id=pkg:lib:val>
  +  <navbar:button txt="OSSP xds"         url=pkg/lib/xds/             id=pkg:lib:xds>
  +  <navbar:button txt="OSSP cfg"         url=pkg/lib/cfg/             id=pkg:lib:cfg>
     <navbar:button txt="OSSP act"         url=pkg/lib/act/             id=pkg:lib:act>
     <navbar:button txt="OSSP cache"       url=pkg/lib/cache/           id=pkg:lib:cache>
  -  <navbar:button txt="OSSP mm"          url=pkg/lib/mm/              id=pkg:lib:mm>
  -  <navbar:button txt="OSSP xds"         url=pkg/lib/xds/             id=pkg:lib:xds>
     <navbar:button txt="OSSP path"        url=pkg/lib/path/            id=pkg:lib:path>
     <navbar:button txt="OSSP proc"        url=pkg/lib/proc/            id=pkg:lib:proc>
     <navbar:button txt="OSSP pcre"        url=pkg/lib/pcre/            id=pkg:lib:pcre>
  @@ -264,9 +265,10 @@
     <navbar:button txt="OSSP sio"         url=pkg/lib/sio/             id=pkg:lib:sio>
     <navbar:button txt="OSSP res"         url=pkg/lib/res/             id=pkg:lib:res>
     <navbar:button txt="OSSP hook"        url=pkg/lib/hook/            id=pkg:lib:hook>
  -  <navbar:button txt="OSSP cfg"         url=pkg/lib/cfg/             id=pkg:lib:cfg>
     <navbar:button txt="OSSP adns"        url=pkg/lib/adns/            id=pkg:lib:adns>
     <navbar:button txt="OSSP mux"         url=pkg/lib/mux/             id=pkg:lib:mux>
  +  <navbar:button txt="OSSP err"         url=pkg/lib/err/             id=pkg:lib:err>
  +  <navbar:button txt="OSSP fsl"         url=pkg/lib/fsl/             id=pkg:lib:fsl>
   </nb:stage3>
   
   #   render the navigation bar
  Index: ossp-web/SHARE/ossp_pkg.wml
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 ossp_pkg.wml
  --- ossp-web/SHARE/ossp_pkg.wml	30 Mar 2002 19:15:47 -0000	1.4
  +++ ossp-web/SHARE/ossp_pkg.wml	19 Jul 2002 13:28:02 -0000	1.5
  @@ -41,7 +41,7 @@
   .files0U,.files1U,A.files0U,A.files1U { color: #ffffff; }
   <<..
   <define-tag pkg_files>
  -<preserve url directory files stable unstable>
  +<preserve cvs url directory files stable unstable>
   <set-var %attributes>
   <:
   my $url       = "<get-var url>";
  @@ -54,7 +54,12 @@
   <table width=100% cellspacing=1 cellpadding=0 border=0>
   <tr>
     <td colspan=3>
  -    <b>Location:</b> <a href="<get-var url>" class=plain><get-var url></a>
  +    <b>Repository:</b> <a href="<get-var cvs>" class=plain><get-var cvs></a>
  +  </td>
  +</tr>
  +<tr>
  +  <td colspan=3>
  +    <b>Distribution:</b> <a href="<get-var url>" class=plain><get-var url></a>
     </td>
   </tr>
   <tr>
  @@ -97,7 +102,7 @@
   print $O;
   :>
   </table>
  -<restore url directory files stable unstable>
  +<restore cvs url directory files stable unstable>
   </define-tag>
   
   #   define a package summary list
  Index: ossp-web/pkg/lib/index.wml
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 index.wml
  --- ossp-web/pkg/lib/index.wml	13 Jul 2002 20:09:21 -0000	1.14
  +++ ossp-web/pkg/lib/index.wml	19 Jul 2002 13:28:03 -0000	1.15
  @@ -80,5 +80,8 @@
     <pkg_item name="err" longname="OSSP err" type="lib"
               desc="Error Stacks"
   			done=15 stable=none unstable=none>
  +  <pkg_item name="fsl" longname="OSSP fsl" type="lib"
  +            desc="Faked/Flexible Syslog"
  +			done=95 stable=none unstable=none>
   </pkg_list>
   

From ossp-cvs-owner@ossp.org  Fri Jul 19 15:28:15 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 442A576969; Fri, 19 Jul 2002 15:28:15 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/fsl .cvsignore index.wml
Message-Id: <20020719132815.442A576969@mail.ossp.org>
Date: Fri, 19 Jul 2002 15:28:15 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   19-Jul-2002 15:28:15
  Branch: HEAD                             Handle: 2002071914281400

  Added files:
    ossp-web/pkg/lib/fsl    .cvsignore index.wml

  Log:
    add OSSP fsl

  Summary:
    Revision    Changes     Path
    1.1         +1  -0      ossp-web/pkg/lib/fsl/.cvsignore
    1.1         +49 -0      ossp-web/pkg/lib/fsl/index.wml
  ____________________________________________________________________________

  Index: ossp-web/pkg/lib/fsl/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/lib/fsl/index.wml
  ============================================================
  $ cvs update -p -r1.1 index.wml
  
  #use wml::ossp area=pkg:lib subarea=fsl
  
  <title>OSSP fsl</title>
  
  <h1>Faked/Flexible Syslog</h1>
  
  <h2>Abstract</h2>
  
  OSSP fsl offers the syslog(3) API otherwise provided by the Standard C Library
  (libc). Instead of writing to the syslogd(8) process, it uses the powerful <a
  href="../l2/">OSSP l2</a> logging capabilities. It is a drop-in link-time
  replacement which enables any syslog(3) consumer to take advantage of <a
  href="../l2/">OSSP l2</a> by just linking this library in before libc. The
  source code of the program remains unchanged. The only requirement for each
  program is companion <a href="../cfg/">OSSP cfg</a> based configuration
  snippet which maps the openlog(3) program indentification to an <a
  href="../l2/">OSSP l2</a> channel tree specification.
  
  <p>
  This library is a small wrapper around <a href="../l2/">OSSP l2</a> and <a
  href="../cfg/">OSSP cfg</a> and was originally invested to allow third-party
  (non <a href="/">OSSP</a>) programs to leverage from the logging flexibility
  provided by <a href="../l2/">OSSP l2</a>. Its development was prompted by the
  <a href="http://www.openpkg.org/">OpenPKG</a> project where no program is
  allowed to directly use the original syslog(3) facility in order to allow
  multiple installation instances.
  
  <h2>Authors</h2>
  
  <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  <pkg_author name="Thomas Lotterer" mail="thl@dev.de.cw.net">
  
  <h2>Status</h2>
  
  <pkg_status
      stable="none"    stable_date="none"
      unstable="none"  unstable_date="none"
  	done=95>
  
  <h2>Source</h2>
  
  <pkg_files 
      cvs=$(CVS_ROOT_URL)/pkg/lib/fsl/
      url=$(FTP_ROOT_URL)/pkg/lib/fsl/
      directory=$(FTP_ROOT_DIR)/pkg/lib/fsl/
      files="fsl-*.tar.gz" 
  	stable="none" unstable="none">
  	

From ossp-cvs-owner@ossp.org  Fri Jul 19 16:12:55 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0609076966; Fri, 19 Jul 2002 16:12:54 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl devtool.conf
Message-Id: <20020719141254.0609076966@mail.ossp.org>
Date: Fri, 19 Jul 2002 16:12:54 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-Jul-2002 16:12:54
  Branch: HEAD                             Handle: 2002071915125400

  Modified files:
    ossp-pkg/fsl            devtool.conf

  Log:
    ignore more temp files

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/fsl/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/devtool.conf
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.conf
  --- ossp-pkg/fsl/devtool.conf	12 Jul 2002 17:26:23 -0000	1.2
  +++ ossp-pkg/fsl/devtool.conf	19 Jul 2002 14:12:54 -0000	1.3
  @@ -60,7 +60,7 @@
       echo "+++ rolling"
       V=`./shtool version -l txt -d short VERSION`
       ./shtool tarball -o fsl-${V}.tar.gz -d fsl-${V} -u ossp -g ossp \
  -                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool*,*.tar.gz' -c 'gzip --best' .
  +                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool*,*.tar.gz,^#.*,.*~$' -c 'gzip --best' .
       ls -l fsl-${V}.tar.gz
       echo "+++ testing"
       gunzip <fsl-${V}.tar.gz | tar tvf -

From ossp-cvs-owner@ossp.org  Mon Jul 22 17:16:33 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 36056767CB; Mon, 22 Jul 2002 17:16:33 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.pod
Message-Id: <20020722151633.36056767CB@mail.ossp.org>
Date: Mon, 22 Jul 2002 17:16:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   22-Jul-2002 17:16:33
  Branch: HEAD                             Handle: 2002072216163200

  Modified files:
    ossp-pkg/fsl            fsl.pod

  Log:
    flush pending work regarding l2spec documentation

  Summary:
    Revision    Changes     Path
    1.4         +58 -0      ossp-pkg/fsl/fsl.pod
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.pod
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 fsl.pod
  --- ossp-pkg/fsl/fsl.pod	17 Jul 2002 09:57:44 -0000	1.3
  +++ ossp-pkg/fsl/fsl.pod	22 Jul 2002 15:16:32 -0000	1.4
  @@ -84,6 +84,64 @@
   tree. Further calls to syslog(3) will then inject log messages into this
   channel tree.
   
  +=head1 L2SPEC
  +
  +l2_ch_buffer.c:    size,           INT, &cfg->bufsize);
  +l2_ch_buffer.c:    interval,       INT, &cfg->bufinterval);
  +l2_ch_buffer.c:    levelflush,     INT, &cfg->levelflush);
  +
  +l2_ch_fd.c:        filedescriptor, INT, &cfg->fd);
  +
  +l2_ch_file.c:      path,           STR, &cfg->path);
  +l2_ch_file.c:      append,         INT, &cfg->append);
  +l2_ch_file.c:      perm,           INT, &cfg->perm);
  +
  +l2_ch_filter.c:    regex,          STR, &cfg->szRegex);
  +l2_ch_filter.c:    negate,         INT, &cfg->bNegate);
  +l2_ch_filter.c:    nocase,         INT, &cfg->bNoCase);
  +
  +l2_ch_irc.c:       progname,       STR, &cfg->cpLocalProg);
  +l2_ch_irc.c:       localhost,      STR, &cfg->cpLocalHost);
  +l2_ch_irc.c:       localuser,      STR, &cfg->cpLocalUser);
  +l2_ch_irc.c:       nickname,       STR, &cfg->cpNickname);
  +l2_ch_irc.c:       username,       STR, &cfg->cpUsername);
  +l2_ch_irc.c:       realname,       STR, &cfg->cpRealname);
  +l2_ch_irc.c:       channel,        STR, &cfg->cpChannel);
  +l2_ch_irc.c:       join,           INT, &cfg->bJoin);
  +l2_ch_irc.c:       host,           STR, &cfg->cpHost);
  +l2_ch_irc.c:       port,           STR, &cfg->cpPort);
  +l2_ch_irc.c:       timeout,        INT, &cfg->nTimeout);
  +
  +l2_ch_pipe.c:      execmode,       STR, &szMode); /* mode direct or shell  */
  +l2_ch_pipe.c:      runtime,        STR, &szRel);  /* continuous or oneshot */
  +l2_ch_pipe.c:      path,           STR, &cfg->szCmdpath); /* path of cmd   */
  +
  +l2_ch_prefix.c:    prefix,         STR, &cfg->prefix);
  +l2_ch_prefix.c:    timezone,       STR, &cfg->timezone);
  +
  +l2_ch_smtp.c:      progname,       STR, &cfg->cpLocalProg);
  +l2_ch_smtp.c:      localhost,      STR, &cfg->cpLocalHost);
  +l2_ch_smtp.c:      localuser,      STR, &cfg->cpLocalUser);
  +l2_ch_smtp.c:      from,           STR, &cfg->cpFrom);
  +l2_ch_smtp.c:      rcpt,           STR, &cfg->cpRcpt);
  +l2_ch_smtp.c:      subject,        STR, &cfg->cpSubject);
  +l2_ch_smtp.c:      host,           STR, &cfg->cpHost);
  +l2_ch_smtp.c:      port,           STR, &cfg->cpPort);
  +l2_ch_smtp.c:      timeout,        INT, &cfg->nTimeout);
  +
  +l2_ch_socket.c:    proto,          STR, &cfg->szProto);
  +l2_ch_socket.c:    host,           STR, &cfg->szHost);
  +l2_ch_socket.c:    port,           STR, &cfg->szPort);
  +l2_ch_socket.c:    timeout,        INT, &cfg->nTimeout);
  +
  +l2_ch_syslog.c:    target,         STR, &cfg->szTarget);
  +l2_ch_syslog.c:    remotehost,     STR, &cfg->szRemoteHost);
  +l2_ch_syslog.c:    remoteport,     INT, &cfg->nRemotePort);
  +l2_ch_syslog.c:    localhost,      STR, &cfg->szLocalHost);
  +l2_ch_syslog.c:    facility,       STR, &cfg->szFacility);
  +l2_ch_syslog.c:    ident,          STR, &cfg->szIdent);
  +l2_ch_syslog.c:    logpid,         INT, &cfg->bLogPid);
  +
   =head1 EXAMPLE
   
    ident sendmail/.* {

From ossp-cvs-owner@ossp.org  Tue Jul 23 11:40:39 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A26D7767D1; Tue, 23 Jul 2002 11:40:38 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.pod
Message-Id: <20020723094038.A26D7767D1@mail.ossp.org>
Date: Tue, 23 Jul 2002 11:40:38 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   23-Jul-2002 11:40:38
  Branch: HEAD                             Handle: 2002072310403800

  Modified files:
    ossp-pkg/fsl            fsl.pod

  Log:
    talk about l2spec

  Summary:
    Revision    Changes     Path
    1.5         +71 -55     ossp-pkg/fsl/fsl.pod
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.pod
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 fsl.pod
  --- ossp-pkg/fsl/fsl.pod	22 Jul 2002 15:16:32 -0000	1.4
  +++ ossp-pkg/fsl/fsl.pod	23 Jul 2002 09:40:38 -0000	1.5
  @@ -86,61 +86,77 @@
   
   =head1 L2SPEC
   
  -l2_ch_buffer.c:    size,           INT, &cfg->bufsize);
  -l2_ch_buffer.c:    interval,       INT, &cfg->bufinterval);
  -l2_ch_buffer.c:    levelflush,     INT, &cfg->levelflush);
  -
  -l2_ch_fd.c:        filedescriptor, INT, &cfg->fd);
  -
  -l2_ch_file.c:      path,           STR, &cfg->path);
  -l2_ch_file.c:      append,         INT, &cfg->append);
  -l2_ch_file.c:      perm,           INT, &cfg->perm);
  -
  -l2_ch_filter.c:    regex,          STR, &cfg->szRegex);
  -l2_ch_filter.c:    negate,         INT, &cfg->bNegate);
  -l2_ch_filter.c:    nocase,         INT, &cfg->bNoCase);
  -
  -l2_ch_irc.c:       progname,       STR, &cfg->cpLocalProg);
  -l2_ch_irc.c:       localhost,      STR, &cfg->cpLocalHost);
  -l2_ch_irc.c:       localuser,      STR, &cfg->cpLocalUser);
  -l2_ch_irc.c:       nickname,       STR, &cfg->cpNickname);
  -l2_ch_irc.c:       username,       STR, &cfg->cpUsername);
  -l2_ch_irc.c:       realname,       STR, &cfg->cpRealname);
  -l2_ch_irc.c:       channel,        STR, &cfg->cpChannel);
  -l2_ch_irc.c:       join,           INT, &cfg->bJoin);
  -l2_ch_irc.c:       host,           STR, &cfg->cpHost);
  -l2_ch_irc.c:       port,           STR, &cfg->cpPort);
  -l2_ch_irc.c:       timeout,        INT, &cfg->nTimeout);
  -
  -l2_ch_pipe.c:      execmode,       STR, &szMode); /* mode direct or shell  */
  -l2_ch_pipe.c:      runtime,        STR, &szRel);  /* continuous or oneshot */
  -l2_ch_pipe.c:      path,           STR, &cfg->szCmdpath); /* path of cmd   */
  -
  -l2_ch_prefix.c:    prefix,         STR, &cfg->prefix);
  -l2_ch_prefix.c:    timezone,       STR, &cfg->timezone);
  -
  -l2_ch_smtp.c:      progname,       STR, &cfg->cpLocalProg);
  -l2_ch_smtp.c:      localhost,      STR, &cfg->cpLocalHost);
  -l2_ch_smtp.c:      localuser,      STR, &cfg->cpLocalUser);
  -l2_ch_smtp.c:      from,           STR, &cfg->cpFrom);
  -l2_ch_smtp.c:      rcpt,           STR, &cfg->cpRcpt);
  -l2_ch_smtp.c:      subject,        STR, &cfg->cpSubject);
  -l2_ch_smtp.c:      host,           STR, &cfg->cpHost);
  -l2_ch_smtp.c:      port,           STR, &cfg->cpPort);
  -l2_ch_smtp.c:      timeout,        INT, &cfg->nTimeout);
  -
  -l2_ch_socket.c:    proto,          STR, &cfg->szProto);
  -l2_ch_socket.c:    host,           STR, &cfg->szHost);
  -l2_ch_socket.c:    port,           STR, &cfg->szPort);
  -l2_ch_socket.c:    timeout,        INT, &cfg->nTimeout);
  -
  -l2_ch_syslog.c:    target,         STR, &cfg->szTarget);
  -l2_ch_syslog.c:    remotehost,     STR, &cfg->szRemoteHost);
  -l2_ch_syslog.c:    remoteport,     INT, &cfg->nRemotePort);
  -l2_ch_syslog.c:    localhost,      STR, &cfg->szLocalHost);
  -l2_ch_syslog.c:    facility,       STR, &cfg->szFacility);
  -l2_ch_syslog.c:    ident,          STR, &cfg->szIdent);
  -l2_ch_syslog.c:    logpid,         INT, &cfg->bLogPid);
  +The "logging library" (L2) builds its working configuration using a
  +global environment object and channels which are interconnected to form
  +a tree.  The environment object holds general internal information and
  +maintains the registration of formatters.  The channels are used to
  +process the logging message and use formatters to transform it.  The
  +root channel of the tree and each intermediate channel might have one or
  +more children below it, passing the processed message down the tree. The
  +leafs of the tree are constructed by channels specifically designed for
  +outputting the message.  Every logging message is injected into a
  +channel, most likely the uppermost one, and traverses down the tree
  +where channels with multiple children duplicate the message.  L2 allows
  +a developer to build this tree programmatically.  In addition, L2 also
  +supports building up the channel tree using a text based specification
  +called the l2spec. The l2spec offers maximum flexibility as a program
  +can read a l2spec created by a system administrator and pass it to L2
  +verbatim without even knowing anything about existing channels.  When
  +this approach is used, a newly designed channel can be used by an
  +existing program by just linking in the latest lib_l2. The main program
  +remains unmodified.
  +
  +FIXME T_ID, channel_cons, try to remove the word "streams"
  +
  +B<tree>          ::= B<stream>
  +
  +B<stream>        ::=
  +                | B<channel>
  +                | B<channel> => stream
  +                | B<channel> => '{' streams '}'
  +
  +B<streams>       ::=
  +                | stream
  +                | stream ';' streams
  +
  +B<channel>       ::=
  +                | B<channel_level> '/' B<channel_level> ':' B<channel_cons>
  +                | B<channel_level> ':' B<channel_cons>
  +                | B<channel_cons>
  +
  +B<channel_level> ::=
  +                | T_ID
  +                | '(' B<channel_mask> ')'
  +
  +B<channel_mask>  ::=
  +                | T_ID
  +                | T_ID '|' B<channel_mask>
  +
  +B<channel_params>::= I<empty>
  +                | '(' ')'
  +                | '(' B<channel_plist> ')'
  +
  +B<channel_plist> ::=
  +                | B<channel_param>
  +                | B<channel_param> ',' B<channel_plist>
  +        
  +B<channel_param> ::=
  +                | paramter '=' value
  + 
  +
  +Here is a table of available channels that lists their names and
  +parameters including the type of each parameter.
  +
  +buffer (INT size, INT interval, INT levelflush);
  +fd     (INT filedescriptor);
  +file   (STR path, INT append, INT perm);
  +filter (STR regex, INT negate, INT nocase);
  +irc    (STR progname, STR localhost, STR localuser, STR nickname, STR username, STR realname, STR channel, INT join, STR host, STR port, INT timeout);
  +pipe   (STR execmode, STR runtime, STR path);
  +prefix (STR prefix, STR timezone);
  +smtp   (STR progname, STR localhost, STR localuser, STR from, STR rcpt, STR subject, STR host, STR port, INT timeout);
  +socket (STR proto, STR host, STR port, INT timeout);
  +syslog (STR target, STR remotehost, INT remoteport, STR localhost, STR facility, STR ident, INT logpid);
   
   =head1 EXAMPLE
   

From ossp-cvs-owner@ossp.org  Tue Jul 23 13:14:42 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 900A0767D1; Tue, 23 Jul 2002 13:14:42 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl VERSION
Message-Id: <20020723111442.900A0767D1@mail.ossp.org>
Date: Tue, 23 Jul 2002 13:14:42 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   23-Jul-2002 13:14:42
  Branch: HEAD                             Handle: 2002072312144200

  Modified files:
    ossp-pkg/fsl            VERSION

  Log:
    update version

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/fsl/VERSION
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/VERSION
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 VERSION
  --- ossp-pkg/fsl/VERSION	9 Jul 2002 09:42:09 -0000	1.1
  +++ ossp-pkg/fsl/VERSION	23 Jul 2002 11:14:42 -0000	1.2
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP fsl (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP fsl, Version 0.1.0 (09-Jul-2002)
  +  This is OSSP fsl, Version 0.1.1 (23-Jul-2002)
   

From ossp-cvs-owner@ossp.org  Tue Jul 23 13:39:34 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BC009765E1; Tue, 23 Jul 2002 13:39:34 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl devtool.conf
Message-Id: <20020723113934.BC009765E1@mail.ossp.org>
Date: Tue, 23 Jul 2002 13:39:34 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   23-Jul-2002 13:39:34
  Branch: HEAD                             Handle: 2002072312393400

  Modified files:
    ossp-pkg/fsl            devtool.conf

  Log:
    better development procedures for releasing

  Summary:
    Revision    Changes     Path
    1.4         +18 -4      ossp-pkg/fsl/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/devtool.conf
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.conf
  --- ossp-pkg/fsl/devtool.conf	19 Jul 2002 14:12:54 -0000	1.3
  +++ ossp-pkg/fsl/devtool.conf	23 Jul 2002 11:39:34 -0000	1.4
  @@ -39,12 +39,23 @@
           --enable-debug \
           "$@"
   
  +%release
  +    ./devtool version
  +    ./devtool tag
  +    ./devtool dist
  +    ./devtool upload
  +
   %version
       ./shtool version -l txt -n "OSSP fsl" -e VERSION
       V=`./shtool version -l txt -d long VERSION`
       sed -e "s/Version .*(.*)/Version $V/g" <README >README.n 
       mv README.n README
   
  +%tag
  +    V=`./shtool version -l txt -d short VERSION`
  +    echo "+++ tagging CVS sources as FSL_${V}"
  +    cvs tag FSL_${V}
  +
   %dist
       echo "+++ generating"
       ./devtool autoclean
  @@ -63,9 +74,12 @@
                        -e 'CVS,\.cvsignore,\.[ao],^\.,devtool*,*.tar.gz,^#.*,.*~$' -c 'gzip --best' .
       ls -l fsl-${V}.tar.gz
       echo "+++ testing"
  -    gunzip <fsl-${V}.tar.gz | tar tvf -
  +    gunzip <fsl-${V}.tar.gz | tar tvf - | head -10
  +    echo "[...]"
  +    gunzip <fsl-${V}.tar.gz | tar tvf - | tail -10
   
  -%release
  -    echo "+++ copying to ftp://ftp.ossp.org/pkg/fsl/"
  -    scp fsl-*.tar.gz master.ossp.org:/e/ossp/ftp/pkg/fsl/
  +%upload
  +    echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/fsl/"
  +    V=`./shtool version -l txt -d short VERSION`
  +    scp fsl-${V}.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/fsl/
   

From ossp-cvs-owner@ossp.org  Tue Jul 23 13:57:47 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E0D6576551; Tue, 23 Jul 2002 13:57:46 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl Makefile.in
Message-Id: <20020723115746.E0D6576551@mail.ossp.org>
Date: Tue, 23 Jul 2002 13:57:46 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   23-Jul-2002 13:57:46
  Branch: HEAD                             Handle: 2002072312574600

  Modified files:
    ossp-pkg/fsl            Makefile.in

  Log:
    fix building of manpage

  Summary:
    Revision    Changes     Path
    1.4         +6  -4      ossp-pkg/fsl/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/Makefile.in
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 Makefile.in
  --- ossp-pkg/fsl/Makefile.in	17 Jul 2002 14:23:10 -0000	1.3
  +++ ossp-pkg/fsl/Makefile.in	23 Jul 2002 11:57:46 -0000	1.4
  @@ -54,6 +54,8 @@
   LIB_OBJS    = fsl.lo
   LIB_DEPS    = @LIB_DEPS@
   
  +MAN_NAME    = fsl.3
  +
   TST_NAME    = fsl_test
   TST_OBJS    = fsl_test.o
   
  @@ -62,7 +64,7 @@
   .SUFFIXES:
   .SUFFIXES: .c .o .lo
   
  -all: _SUBDIRS_all $(LIB_NAME) $(TST_NAME)
  +all: _SUBDIRS_all $(LIB_NAME) $(TST_NAME) $(MAN_NAME)
   
   .c.o:
   	$(CC) $(CPPFLAGS) $(CFLAGS) -c $<
  @@ -96,8 +98,8 @@
   $(TST_NAME): $(TST_OBJS) $(LIB_NAME)
   	@$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $(TST_NAME) $(TST_OBJS) $(LIB_NAME) $(LIBS)
   
  -man: fsl.3
  -fsl.3: fsl.pod
  +man: $(MAN_NAME)
  +$(MAN_NAME): fsl.pod
   	V1=`$(SHTOOL) version -l txt -d short VERSION`; \
   	V2=`$(SHTOOL) version -l txt -d long VERSION`; \
   	D=`$(SHTOOL) version -l txt -d long VERSION | sed -e 's;.*(;;' -e 's;).*;;'`; \
  @@ -109,7 +111,7 @@
   check: $(TST_NAME)
   	@$(LIBTOOL) --mode=execute ./$(TST_NAME)
   
  -install:
  +install: all
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libdir)

From ossp-cvs-owner@ossp.org  Tue Jul 23 14:21:58 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C26AE76551; Tue, 23 Jul 2002 14:21:57 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.c
Message-Id: <20020723122157.C26AE76551@mail.ossp.org>
Date: Tue, 23 Jul 2002 14:21:57 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   23-Jul-2002 14:21:57
  Branch: HEAD                             Handle: 2002072313215700

  Modified files:
    ossp-pkg/fsl            fsl.c

  Log:
    improve cleanup; support maskpri

  Summary:
    Revision    Changes     Path
    1.17        +18 -20     ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 fsl.c
  --- ossp-pkg/fsl/fsl.c	19 Jul 2002 13:26:51 -0000	1.16
  +++ ossp-pkg/fsl/fsl.c	23 Jul 2002 12:21:57 -0000	1.17
  @@ -295,24 +295,13 @@
       cpIdent = NULL;
       cpISF = NULL;
   
  +    /* properly handle repeated execution */
  +    closelog();
  +
       /*FIXME this should be available to the user to help him finding out what the application passes along
        *      fprintf(stderr, "DEBUG: BEGIN ident=\"%s\", logopt=0x%.8lx, facility=0x%.8lx\n", ident, (unsigned long)logopt, (unsigned long)facility);
        */
   
  -    /* check for repeated execution */
  -    if (ctx.l2_nch != NULL) {
  -        l2_channel_destroy(ctx.l2_nch);
  -        ctx.l2_nch = NULL;
  -    }
  -    if (ctx.l2_env != NULL) {
  -        l2_env_destroy(ctx.l2_env);
  -        ctx.l2_env = NULL;
  -    }
  -    if (ctx.levelmap != NULL) {
  -        free(ctx.levelmap);
  -        ctx.levelmap = NULL;
  -    }
  -
       /*FIXME this should be available to the user to help him finding out what the application passes along
        *      currently we completely ignore logopt LOG_CONS, LOG_NDELAY, LOG_PERROR, LOG_PID
        */
  @@ -539,7 +528,7 @@
       if (buf.base != NULL)
           free(buf.base);
       if (rc != 0)
  -        exit(rc);
  +        closelog();
       /*fprintf(stderr, "DEBUG: ------------------------------------------------------------\n");*/
       return;
   }
  @@ -554,15 +543,16 @@
           l2_env_destroy(ctx.l2_env);
           ctx.l2_env = NULL;
       }
  -    return;
  +    if (ctx.levelmap != NULL) {
  +        free(ctx.levelmap);
  +        ctx.levelmap = NULL;
  +    }
   }
   
   int setlogmask(int maskpri)
   {
       int oldmask;
   
  -    /*FIXME this is currently a no-op. Should we care about maskpri, set l2 global mask or continue to ignore?*/
  -    /* remember the logging mask */
       oldmask = ctx.maskpri;
       if (maskpri != 0)
           ctx.maskpri = maskpri;
  @@ -589,11 +579,19 @@
       unsigned int levelmask;
       int i;
   
  +    /* check for previous proper initialization */
       if (ctx.l2_nch == NULL)
           return;
   
  -    priority &= LOG_PRIMASK; /* strip off facility */
  -    /*fprintf(stderr, "DEBUG: prioriy  =0x%.8lx  ", (unsigned long)priority);*/
  +    /* strip off facility */
  +    priority &= LOG_PRIMASK;
  +    /*fprintf(stderr, "DEBUG: prioriy  =0x%.8lx, ctx.maskpri=0x%.8lx  ", (unsigned long)priority, (unsigned long)ctx.maskpri);*/
  +
  +    /* check against maskpri */
  +    if ((LOG_MASK(priority) & ctx.maskpri) == 0) {
  +        /*fprintf(stderr, "DEBUG: short circuit maskpri\n");*/
  +        return;
  +    }
   
       levelmask = 0;
       for (i = 0; sysloglevel2string[i].string != NULL; i++) {

From ossp-cvs-owner@ossp.org  Tue Jul 23 16:37:52 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 713B9765E1; Tue, 23 Jul 2002 16:37:51 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl configure.ac fsl.c fsl_test.c
Message-Id: <20020723143751.713B9765E1@mail.ossp.org>
Date: Tue, 23 Jul 2002 16:37:51 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   23-Jul-2002 16:37:51
  Branch: HEAD                             Handle: 2002072315375000

  Modified files:
    ossp-pkg/fsl            configure.ac fsl.c fsl_test.c

  Log:
    added userlevel debugging through FSL_DEBUG environment variable

  Summary:
    Revision    Changes     Path
    1.4         +10 -1      ossp-pkg/fsl/configure.ac
    1.18        +133 -83    ossp-pkg/fsl/fsl.c
    1.3         +1  -0      ossp-pkg/fsl/fsl_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/configure.ac
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 configure.ac
  --- ossp-pkg/fsl/configure.ac	12 Jul 2002 17:26:23 -0000	1.3
  +++ ossp-pkg/fsl/configure.ac	23 Jul 2002 14:37:50 -0000	1.4
  @@ -87,8 +87,17 @@
   [ fsl_cfgdir=$withval ],
   [ fsl_cfgdir="${prefix}/etc/fsl" ]
   )dnl
  -AC_DEFINE_UNQUOTED(FSL_CFGDIR, "$fsl_cfgdir", [Define for configuration directory])
  +AC_DEFINE_UNQUOTED(FSL_CFGDIR, "$fsl_cfgdir", [Define configuration directory])
   AC_MSG_RESULT([$fsl_cfgdir])
  +
  +AC_MSG_CHECKING(for debugging using a l2spec)
  +AC_ARG_WITH(debug,dnl
  +[  --with-debug=L2SPEC      set debugging using a l2spec (default="")],
  +[ fsl_debug=$withval ],
  +[ fsl_debug="" ]
  +)dnl
  +AC_DEFINE_UNQUOTED(FSL_DEBUG,  "$fsl_debug",  [Define debugging using a l2spec])
  +AC_MSG_RESULT([$fsl_debug])
   
   AC_CONFIG_HEADERS(config.h)
   AC_CONFIG_FILES([Makefile fsl-config])
  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 fsl.c
  --- ossp-pkg/fsl/fsl.c	23 Jul 2002 12:21:57 -0000	1.17
  +++ ossp-pkg/fsl/fsl.c	23 Jul 2002 14:37:50 -0000	1.18
  @@ -41,6 +41,7 @@
   #include <sys/types.h>
   #include <sys/stat.h>
   #include <dirent.h>
  +#include <syslimits.h>
   
   /* standard include we re-implement */
   #include <syslog.h>
  @@ -161,6 +162,8 @@
   
   /* internal context structure */
   static struct {
  +    l2_env_t     *l2_fslenv;
  +    l2_channel_t *l2_fslnch;
       l2_env_t     *l2_env;
       l2_channel_t *l2_nch;
       levelmap_t   *levelmap;
  @@ -169,9 +172,22 @@
       NULL,
       NULL,
       NULL,
  +    NULL,
  +    NULL,
       LOG_PRIMASK
   };
   
  +static void fsldebug(l2_level_t level, const char *message, ...)
  +{
  +    va_list args;
  +
  +    va_start(args, message);
  +    if (ctx.l2_fslnch != NULL)
  +        l2_channel_vlog(ctx.l2_fslnch, level, message, args);
  +    va_end(args);
  +    return;
  +}
  +
   static void traverse(cfg_t *cfg, cfg_node_t *cfgnode)
   {
       int rc;
  @@ -181,23 +197,21 @@
       char *cp;
       int cfgchilds;
   
  -    /*fprintf(stderr, "DEBUG: diving\n");*/
       while (cfgnode != NULL) {
           if ((cfgrv = cfg_node_get(cfg, cfgnode, CFG_NODE_ATTR_TOKEN, &cp)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_TOKEN) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_get(CFG_NODE_ATTR_TOKEN) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
           if ((cfgrv = cfg_node_get(cfg, cfgnode, CFG_NODE_ATTR_TYPE, &cfgtyp)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
           if ((cfgrv = cfg_node_get(cfg, cfgnode, CFG_NODE_ATTR_CHILDS, &cfgchilds)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_CHILDS) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  -        /*fprintf(stderr, "DEBUG: cfgnode=0x%.8lx[%d], *cp=\"%s\", type=%d\n", (unsigned long)cfgnode, cfgchilds, cp, cfgtyp);*/
  +            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_get(CFG_NODE_ATTR_CHILDS) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +        fsldebug(L2_LEVEL_DEBUG, "cfgnode=0x%.8lx[%d], *cp=\"%s\", type=%d\n", (unsigned long)cfgnode, cfgchilds, cp, cfgtyp);
           if ((cfgrv = cfg_node_get(cfg, cfgnode, CFG_NODE_ATTR_CHILD1, &cfgchld)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_CHILD1) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_get(CFG_NODE_ATTR_CHILD1) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
           if (cfgchld != NULL)
               traverse(cfg, cfgchld);
           if ((cfgrv = cfg_node_get(cfg, cfgnode, CFG_NODE_ATTR_RBROTH, &cfgnode)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_RBROTH) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_get(CFG_NODE_ATTR_RBROTH) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
       }
  -    /*fprintf(stderr, "DEBUG: climbing\n");*/
       CU(0);
   CUS:
       return;
  @@ -298,45 +312,66 @@
       /* properly handle repeated execution */
       closelog();
   
  -    /*FIXME this should be available to the user to help him finding out what the application passes along
  -     *      fprintf(stderr, "DEBUG: BEGIN ident=\"%s\", logopt=0x%.8lx, facility=0x%.8lx\n", ident, (unsigned long)logopt, (unsigned long)facility);
  -     */
  -
  -    /*FIXME this should be available to the user to help him finding out what the application passes along
  -     *      currently we completely ignore logopt LOG_CONS, LOG_NDELAY, LOG_PERROR, LOG_PID
  -     */
  +    /* info: ident, facility; trace: configmatching; debug: traversal */
  +
  +    /* create L2 environment for fsl itself */
  +    argl2spec = getenv("FSL_DEBUG");
  +    if (argl2spec == NULL)
  +        argl2spec = FSL_DEBUG;
  +    if (strlen(argl2spec) != NULL) {
  +        if ((l2rv = l2_env_create(&ctx.l2_fslenv)) != L2_OK) {
  +            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "failed to create L2 environment (%d) for fsl\n", l2rv); CU(1); }
  +        if ((l2rv = l2_env_levels(ctx.l2_fslenv, L2_LEVEL_ALL, L2_LEVEL_NONE)) != L2_OK) {
  +            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to set global logging level defaults %s(%d) for fsl\n", cp, l2rv); CU(1); }
  +        if ((l2rv = l2_env_formatter(ctx.l2_fslenv, 'D', l2_util_fmt_dump, NULL)) != L2_OK) {
  +            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to register dump formatter %s(%d) for fsl\n", cp, l2rv); CU(1); }
  +        if ((l2rv = l2_env_formatter(ctx.l2_fslenv, 'S', l2_util_fmt_string, NULL)) != L2_OK) {
  +            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to register string formatter %s(%d) for fsl\n", cp, l2rv); CU(1); }
  +        if ((l2rv = l2_env_formatter(ctx.l2_fslenv, 'm', l2_util_fmt_errno, NULL)) != L2_OK) {
  +            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to register errno formatter %s(%d) for fsl\n", cp, l2rv); CU(1); }
  +        if ((l2rv = l2_channel_create(&ctx.l2_fslnch, ctx.l2_fslenv, "noop")) != L2_OK) {
  +            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to create noop channel; %s(%d)\n for fsl", cp, l2rv); CU(1); }
  +        if ((l2rv = l2_spec(&ch, ctx.l2_fslenv, argl2spec)) != L2_OK) {
  +            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to create stream from spec %s(%d) for fsl\n", cp, l2rv); CU(1); }
  +        if ((l2rv = l2_channel_link(ctx.l2_fslnch, L2_LINK_CHILD, ch, NULL)) != L2_OK) {
  +            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to link child channel %s(%d) for fsl\n", cp, l2rv); CU(1); }
  +        if ((l2rv = l2_channel_open(ctx.l2_fslnch)) != L2_OK) {
  +            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to open channel stream %s(%d) for fsl\n", cp, l2rv); CU(1); }
  +        fsldebug(L2_LEVEL_TRACE, "captured openlog(%s, 0x%.8lx, 0x%.8lx)", ident, logopt, facility);
  +    }
  +
  +    /*FIXME currently we completely ignore logopt LOG_CONS, LOG_NDELAY, LOG_PERROR, LOG_PID
  +    */
   
       /* create default sysloglevel to l2_level mapping */
       for (i = 0; sysloglevel2string[i].string != NULL; i++);
       if ((ctx.levelmap = (levelmap_t *)malloc(i * sizeof(levelmap_t))) == NULL) {
  -        fprintf(stderr, "Error: malloc() failed\n"); CU(1); }
  +        fsldebug(L2_LEVEL_ERROR, "Error: malloc() failed\n"); CU(1); }
       for (i = 0; sysloglevel2string[i].string != NULL; i++) {
           ctx.levelmap[i].syslog = sysloglevel2string[i].level;
           ctx.levelmap[i].l2     = sysloglevel2string[i].deflevelmap;
  -        /*fprintf(stderr, "DEBUG: ctx.levelmap[%d].syslog = 0x%.8lx, ctx.levelmap[%d].l2 = 0x%.8lx\n", i, (unsigned long)ctx.levelmap[i].syslog, i, (unsigned long)ctx.levelmap[i].l2);*/
  +        fsldebug(L2_LEVEL_DEBUG, "ctx.levelmap[%d].syslog = 0x%.8lx, ctx.levelmap[%d].l2 = 0x%.8lx\n", i, (unsigned long)ctx.levelmap[i].syslog, i, (unsigned long)ctx.levelmap[i].l2);
       }
   
  -    /* create L2 environment */
  +    /* create L2 environment for main application */
       if ((l2rv = l2_env_create(&ctx.l2_env)) != L2_OK) {
  -        cp = l2_env_strerror(ctx.l2_env, l2rv); fprintf(stderr, "Error: failed to create L2 environment (%d)\n", l2rv); CU(1); }
  +        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "failed to create L2 environment (%d)\n", l2rv); CU(1); }
       if ((l2rv = l2_env_levels(ctx.l2_env, L2_LEVEL_ALL, L2_LEVEL_NONE)) != L2_OK) {
  -        cp = l2_env_strerror(ctx.l2_env, l2rv); fprintf(stderr, "Error: logging failed to set global logging level defaults %s(%d)\n", cp, l2rv); CU(1); }
  +        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to set global logging level defaults %s(%d)\n", cp, l2rv); CU(1); }
       if ((l2rv = l2_env_formatter(ctx.l2_env, 'D', l2_util_fmt_dump, NULL)) != L2_OK) {
  -        cp = l2_env_strerror(ctx.l2_env, l2rv); fprintf(stderr, "Error: logging failed to register dump formatter %s(%d)\n", cp, l2rv); CU(1); }
  +        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to register dump formatter %s(%d)\n", cp, l2rv); CU(1); }
       if ((l2rv = l2_env_formatter(ctx.l2_env, 'S', l2_util_fmt_string, NULL)) != L2_OK) {
  -        cp = l2_env_strerror(ctx.l2_env, l2rv); fprintf(stderr, "Error: logging failed to register string formatter %s(%d)\n", cp, l2rv); CU(1); }
  +        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to register string formatter %s(%d)\n", cp, l2rv); CU(1); }
       if ((l2rv = l2_env_formatter(ctx.l2_env, 'm', l2_util_fmt_errno, NULL)) != L2_OK) {
  -        cp = l2_env_strerror(ctx.l2_env, l2rv); fprintf(stderr, "Error: logging failed to register errno formatter %s(%d)\n", cp, l2rv); CU(1); }
  +        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to register errno formatter %s(%d)\n", cp, l2rv); CU(1); }
       if ((l2rv = l2_env_settimer(ctx.l2_env, 20)) != L2_OK) { /*FIXME do we need this?*/
  -        cp = l2_env_strerror(ctx.l2_env, l2rv); fprintf(stderr, "Error: failed to configure timer %s(%d)\n", cp, l2rv); CU(1); }
  -
  -    /* create L2 noop channel */
  +        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "failed to configure timer %s(%d)\n", cp, l2rv); CU(1); }
       if ((l2rv = l2_channel_create(&ctx.l2_nch, ctx.l2_env, "noop")) != L2_OK) {
  -        cp = l2_env_strerror(ctx.l2_env, l2rv); fprintf(stderr, "Error: logging failed to create noop channel; %s(%d)\n", cp, l2rv); CU(1); }
  +        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to create noop channel; %s(%d)\n", cp, l2rv); CU(1); }
   
       /* create IdentSlashFacility */
       if ((cpIdent = strdup((ident != NULL) ? ident : "unknown")) == NULL) {
  -        fprintf(stderr, "Error: strdup() failed\n"); CU(1); }
  +        fsldebug(L2_LEVEL_ERROR, "strdup() failed\n"); CU(1); }
       cpFacility = "unknown";
       for (i = 0; syslogfacility2string[i].string != NULL; i++) {
           if (facility == syslogfacility2string[i].facility) {
  @@ -345,60 +380,60 @@
           }
       }
       if ((cpISF = (char *)malloc(strlen(cpIdent) + 1 + strlen(cpFacility) + 1)) == NULL) {
  -        fprintf(stderr, "Error: malloc() failed\n"); CU(1); }
  +        fsldebug(L2_LEVEL_ERROR, "malloc() failed\n"); CU(1); }
       cpISF[0] = '\0';
       strcat(cpISF, cpIdent);
       strcat(cpISF, "/");
       strcat(cpISF, cpFacility);
   
       if ((rv = readfileorallfiles(&buf, ident)) != FSL_OK) {
  -        fprintf(stderr, "DEBUG: error %d, system %s(%d)\n", rv, strerror(errno), errno); CU(1); }
  +        fsldebug(L2_LEVEL_ERROR, "readfileorallfiles(buf, %s) returned %d, system %s(%d)\n", ident, rv, strerror(errno), errno); CU(1); }
   
       if ((cfgrv = cfg_create(&cfg)) != CFG_OK) {
  -        (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_create() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +        (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_create() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
       if ((cfgrv = cfg_import(cfg, NULL, CFG_FMT_CFG, buf.base, buf.size)) != CFG_OK) {
  -        (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_import() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +        (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_import() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
   
       /*  find root and check if it is a sequence and has one or more directives below it */
       if ((cfgrv = cfg_node_root(cfg, &cfgseq)) != CFG_OK) {
  -        (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_root() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  -    /*FIXME traverse(cfg, cfgseq); DEBUG */
  +        (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_root() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +    traverse(cfg, cfgseq);
       if ((cfgrv = cfg_node_get(cfg, cfgseq, CFG_NODE_ATTR_TYPE, &cfgtype)) != CFG_OK) {
  -        (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +        (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
       if (cfgtype != CFG_NODE_TYPE_SEQ) {
  -        fprintf(stderr, "Error: expected sequence\n"); CU(1); }
  +        fsldebug(L2_LEVEL_ERROR, "expected sequence\n"); CU(1); }
       if ((cfgrv = cfg_node_get(cfg, cfgseq, CFG_NODE_ATTR_CHILDS, &cfgnumc)) != CFG_OK) {
  -        (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_CHILDS) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +        (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_get(CFG_NODE_ATTR_CHILDS) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
       if (cfgnumc < 1) {
  -        fprintf(stderr, "Error: sequence is missing directives, expected 1, got %d\n", cfgnumc); CU(1); }
  +        fsldebug(L2_LEVEL_ERROR, "sequence is missing directives, expected 1, got %d\n", cfgnumc); CU(1); }
   
       /*  get first directive below sequence */
       if ((cfgrv = cfg_node_get(cfg, cfgseq, CFG_NODE_ATTR_CHILD1, &cfgdir)) != CFG_OK) {
  -        (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_CHILD1) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +        (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_get(CFG_NODE_ATTR_CHILD1) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
       while (cfgdir != NULL) {
  -        /*FIXME fprintf(stderr, "DEBUG: cfgdir=0x%.8lx\n", (unsigned long)cfgdir); */
  +        fsldebug(L2_LEVEL_DEBUG, "cfgdir=0x%.8lx\n", (unsigned long)cfgdir);
   
           /*  check if operating on a directive */
           if ((cfgrv = cfg_node_get(cfg, cfgdir, CFG_NODE_ATTR_TYPE, &cfgtype)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
           if (cfgtype != CFG_NODE_TYPE_DIR) {
  -            fprintf(stderr, "Error: expected directive\n"); CU(1); }
  +            fsldebug(L2_LEVEL_ERROR, "expected directive\n"); CU(1); }
           if ((cfgrv = cfg_node_get(cfg, cfgdir, CFG_NODE_ATTR_CHILDS, &cfgnumc)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_CHILDS) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_get(CFG_NODE_ATTR_CHILDS) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
   
           /*  process first child of directive, check if it is an argument and has a valid token attached */
           if ((cfgrv = cfg_node_get(cfg, cfgdir, CFG_NODE_ATTR_CHILD1, &cfgarg)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_CHILD1) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_get(CFG_NODE_ATTR_CHILD1) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
           if (cfgarg == NULL) {
  -            fprintf(stderr, "Error: first argument is NULL\n"); CU(1); }
  +            fsldebug(L2_LEVEL_ERROR, "first argument is NULL\n"); CU(1); }
           if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_TYPE, &cfgtype)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
           if (cfgtype != CFG_NODE_TYPE_ARG) {
  -            fprintf(stderr, "Error: expected first argument, got %d\n", cfgtype); CU(1); }
  +            fsldebug(L2_LEVEL_ERROR, "expected first argument, got %d\n", cfgtype); CU(1); }
           if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_TOKEN, &cfgargtok)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_TOKEN) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_get(CFG_NODE_ATTR_TOKEN) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
           if (cfgargtok == NULL) {
  -            fprintf(stderr, "Error: first argument has NULL data\n"); CU(1); }
  +            fsldebug(L2_LEVEL_ERROR, "first argument has NULL data\n"); CU(1); }
           cfgargtoka[0] = cfgargtok;
   
           cfgnume = 0;
  @@ -409,25 +444,25 @@
           if (strcmp(cfgargtoka[0], "map") == 0)
               cfgnume = 3;
           if (cfgnume == 0) {
  -            fprintf(stderr, "Error: syntax error, invalid argument \"%s\"\n", cfgargtoka[0]); CU(1); }
  +            fsldebug(L2_LEVEL_ERROR, "syntax error, invalid argument \"%s\"\n", cfgargtoka[0]); CU(1); }
           if (cfgnume != cfgnumc) {
  -            fprintf(stderr, "Error: directive missing arguments, expected %d, got %d\n", cfgnume, cfgnumc); CU(1); }
  +            fsldebug(L2_LEVEL_ERROR, "directive missing arguments, expected %d, got %d\n", cfgnume, cfgnumc); CU(1); }
   
           for (i = 1; i < cfgnume; i++) {
   
               /*  process right brother of argument, check if it is an argument and has a valid token attached */
               if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_RBROTH, &cfgarg)) != CFG_OK) {
  -                (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_RBROTH) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +                (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_get(CFG_NODE_ATTR_RBROTH) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
               if (cfgarg == NULL) {
  -                fprintf(stderr, "Error: argument %d is NULL\n", i); CU(1); }
  +                fsldebug(L2_LEVEL_ERROR, "argument %d is NULL\n", i); CU(1); }
               if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_TYPE, &cfgtype)) != CFG_OK) {
  -                (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +                (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
               if (cfgtype != CFG_NODE_TYPE_ARG) {
  -                fprintf(stderr, "Error: expected argument %d\n", i); CU(1); }
  +                fsldebug(L2_LEVEL_ERROR, "expected argument %d\n", i); CU(1); }
               if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_TOKEN, &cfgargtok)) != CFG_OK) {
  -                (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_TOKEN) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +                (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_get(CFG_NODE_ATTR_TOKEN) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
               if (cfgargtok == NULL) {
  -                fprintf(stderr, "Error: argument %d has NULL data\n", i); CU(1); }
  +                fsldebug(L2_LEVEL_ERROR, "argument %d has NULL data\n", i); CU(1); }
               cfgargtoka[i] = cfgargtok;
           }
   
  @@ -438,7 +473,7 @@
               argl2spec = cfgargtoka[2];
   
               /*  process the directive using the three arguments found */
  -            /*fprintf(stderr, "DEBUG: argident=%s, argmatch=%s, argl2spec=%s\n", argident, argmatch, argl2spec);*/
  +            fsldebug(L2_LEVEL_DEBUG, "argident=%s, argmatch=%s, argl2spec=%s\n", argident, argmatch, argl2spec);
               {
                   pcre       *pcreRegex;
                   pcre_extra *pcreExtra;
  @@ -448,33 +483,31 @@
   
                   /* compile regular expression into finite state machine and optimize */
                   if ((pcreRegex = pcre_compile(argmatch, PCRE_CASELESS, &cpError, &iError, NULL)) == NULL) {
  -                    fprintf(stderr, "Error: pcre_compile() failed with error %s (%d)\n", cpError, iError); CU(1); }
  +                    fsldebug(L2_LEVEL_ERROR, "pcre_compile() failed with error %s (%d)\n", cpError, iError); CU(1); }
                   pcreExtra = pcre_study(pcreRegex, 0, &cpError);
                   if (cpError != NULL) {
  -                    fprintf(stderr, "Error: pcre_study() failed with error %s\n", cpError); CU(1); }
  +                    fsldebug(L2_LEVEL_ERROR, "pcre_study() failed with error %s\n", cpError); CU(1); }
   
                   nMatch = pcre_exec(pcreRegex, pcreExtra, cpISF, strlen(cpISF), 0, 0, ovec, OVECSIZE);
  -                /*fprintf(stderr, "DEBUG: nMatch=%d when \"%s\" is used against \"%s\"\n", nMatch, argmatch, cpISF);*/
  +                fsldebug(L2_LEVEL_DEBUG, "nMatch=%d when \"%s\" is used against \"%s\"\n", nMatch, argmatch, cpISF);
                   if (nMatch >= 1) {
                       pcre_get_substring_list(cpISF, ovec, nMatch, &acpMatch);
  -                    /*
                       if (acpMatch != NULL)
                           for (i = 0; i < nMatch; i++)
  -                            fprintf(stderr, "DEBUG: regex reference[%d]=\'%s\'\n", i, acpMatch[i] == NULL ? "(UNDEFINED)" : acpMatch[i]);
  -                    */
  +                            fsldebug(L2_LEVEL_DEBUG, "regex reference[%d]=\'%s\'\n", i, acpMatch[i] == NULL ? "(UNDEFINED)" : acpMatch[i]);
                       n = substcapture(argl2spec, strlen(argl2spec), acpMatch, nMatch, NULL);
                       if ((cp = (char *)malloc(n + 1)) == NULL) {
  -                        fprintf(stderr, "Error: malloc() failed\n"); CU(1); }
  +                        fsldebug(L2_LEVEL_ERROR, "malloc() failed\n"); CU(1); }
                       if (substcapture(argl2spec, strlen(argl2spec), acpMatch, nMatch, cp) != n) {
  -                        fprintf(stderr, "Error: substcapture() failed\n"); CU(1); }
  +                        fsldebug(L2_LEVEL_ERROR, "substcapture() failed\n"); CU(1); }
                       argl2spec = cp;
  -            /*fprintf(stderr, "DEBUG: argident=%s, argmatch=%s, argl2spec=%s\n", argident, argmatch, argl2spec);*/
  +                    fsldebug(L2_LEVEL_DEBUG, "argident=%s, argmatch=%s, argl2spec=%s\n", argident, argmatch, argl2spec);
   
                       /* create L2 channel throuh spec and link into root channel */
                       if ((l2rv = l2_spec(&ch, ctx.l2_env, argl2spec)) != L2_OK) {
  -                        cp = l2_env_strerror(ctx.l2_env, l2rv); fprintf(stderr, "Error: logging failed to create stream from spec %s(%d)\n", cp, l2rv); CU(1); }
  +                        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to create stream from spec %s(%d)\n", cp, l2rv); CU(1); }
                       if ((l2rv = l2_channel_link(ctx.l2_nch, L2_LINK_CHILD, ch, NULL)) != L2_OK) {
  -                        cp = l2_env_strerror(ctx.l2_env, l2rv); fprintf(stderr, "Error: logging failed to link child channel %s(%d)\n", cp, l2rv); CU(1); }
  +                        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to link child channel %s(%d)\n", cp, l2rv); CU(1); }
   
                       free(argl2spec);
                   }
  @@ -490,27 +523,27 @@
                       mapfrom = i;
               }
               if (mapfrom == -1) {
  -                fprintf(stderr, "Error: trying to map from unknown syslog level \"%s\"\n", cfgargtoka[1]); CU(1); }
  +                fsldebug(L2_LEVEL_ERROR, "trying to map from unknown syslog level \"%s\"\n", cfgargtoka[1]); CU(1); }
   
               for (i = 0, mapto = -1; (mapto == -1) && (l2level2string[i].string != NULL); i++) {
                   if (strcmp(l2level2string[i].string, cfgargtoka[2]) == 0)
                       mapto = i;
               }
               if (mapto == -1) {
  -                fprintf(stderr, "Error: trying to map to unknown l2 level \"%s\"\n", cfgargtoka[2]); CU(1); }
  +                fsldebug(L2_LEVEL_ERROR, "trying to map to unknown l2 level \"%s\"\n", cfgargtoka[2]); CU(1); }
               
               ctx.levelmap[mapfrom].l2 = l2level2string[mapto].level;
  -            /*fprintf(stderr, "DEBUG: map levelmap[%10s/%d].l2 = l2level2string[%10s/%d].level = 0x%.8lx\n", cfgargtoka[1], mapfrom, cfgargtoka[2], mapto, (unsigned long)l2level2string[mapto].level);*/
  +            fsldebug(L2_LEVEL_DEBUG, "map levelmap[%10s/%d].l2 = l2level2string[%10s/%d].level = 0x%.8lx\n", cfgargtoka[1], mapfrom, cfgargtoka[2], mapto, (unsigned long)l2level2string[mapto].level);
           }
           else {
  -            fprintf(stderr, "Error: internal, argument \"%s\" not implemented\n", cfgargtoka[0]); CU(1); }
  +            fsldebug(L2_LEVEL_ERROR, "internal, argument \"%s\" not implemented\n", cfgargtoka[0]); CU(1); }
   
           /*  get right brother of current directive */
           if ((cfgrv = cfg_node_get(cfg, cfgdir, CFG_NODE_ATTR_RBROTH, &cfgdir)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_node_get(CFG_NODE_ATTR_RBROTH) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_get(CFG_NODE_ATTR_RBROTH) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
       }
       if ((l2rv = l2_channel_open(ctx.l2_nch)) != L2_OK) {
  -        cp = l2_env_strerror(ctx.l2_env, l2rv); fprintf(stderr, "Error: logging failed to open channel stream %s(%d)\n", cp, l2rv); CU(1); }
  +        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to open channel stream %s(%d)\n", cp, l2rv); CU(1); }
   
       ctx.maskpri = LOG_UPTO(LOG_DEBUG);
   
  @@ -523,18 +556,26 @@
   #if 0
       if (cfg != NULL)
           if ((cfgrv = cfg_destroy(cfg)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fprintf(stderr, "Error: cfg_destroy() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_destroy() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
   #endif
       if (buf.base != NULL)
           free(buf.base);
       if (rc != 0)
           closelog();
  -    /*fprintf(stderr, "DEBUG: ------------------------------------------------------------\n");*/
       return;
   }
   
   void closelog(void)
   {
  +    if (ctx.l2_fslnch != NULL) {
  +        l2_channel_log(ctx.l2_fslnch, L2_LEVEL_TRACE, "captured closelog()");
  +        l2_channel_destroy(ctx.l2_fslnch);
  +        ctx.l2_fslnch = NULL;
  +    }
  +    if (ctx.l2_fslenv != NULL) {
  +        l2_env_destroy(ctx.l2_fslenv);
  +        ctx.l2_fslenv = NULL;
  +    }
       if (ctx.l2_nch != NULL) {
           l2_channel_destroy(ctx.l2_nch);
           ctx.l2_nch = NULL;
  @@ -553,7 +594,11 @@
   {
       int oldmask;
   
  +    if (ctx.l2_fslnch != NULL)
  +        l2_channel_log(ctx.l2_fslnch, L2_LEVEL_TRACE, "captured setlogmask(0x%.8lx)", maskpri);
  +
       oldmask = ctx.maskpri;
  +
       if (maskpri != 0)
           ctx.maskpri = maskpri;
       return oldmask;
  @@ -578,6 +623,8 @@
   {
       unsigned int levelmask;
       int i;
  +    l2_result_t l2rv;
  +    char *cp;
   
       /* check for previous proper initialization */
       if (ctx.l2_nch == NULL)
  @@ -585,24 +632,27 @@
   
       /* strip off facility */
       priority &= LOG_PRIMASK;
  -    /*fprintf(stderr, "DEBUG: prioriy  =0x%.8lx, ctx.maskpri=0x%.8lx  ", (unsigned long)priority, (unsigned long)ctx.maskpri);*/
  +    fsldebug(L2_LEVEL_DEBUG, "prioriy  =0x%.8lx, ctx.maskpri=0x%.8lx  ", (unsigned long)priority, (unsigned long)ctx.maskpri);
   
       /* check against maskpri */
       if ((LOG_MASK(priority) & ctx.maskpri) == 0) {
  -        /*fprintf(stderr, "DEBUG: short circuit maskpri\n");*/
  +        fsldebug(L2_LEVEL_DEBUG, "short circuit maskpri\n");
           return;
       }
   
       levelmask = 0;
       for (i = 0; sysloglevel2string[i].string != NULL; i++) {
  -    /*fprintf(stderr, "DEBUG: ctx.levelmap[%d].syslog = 0x%.8lx, ctx.levelmap[%d].l2 = 0x%.8lx\n", i, (unsigned long)ctx.levelmap[i].syslog, i, (unsigned long)ctx.levelmap[i].l2);*/
  +    fsldebug(L2_LEVEL_DEBUG, "ctx.levelmap[%d].syslog = 0x%.8lx, ctx.levelmap[%d].l2 = 0x%.8lx\n", i, (unsigned long)ctx.levelmap[i].syslog, i, (unsigned long)ctx.levelmap[i].l2);
           if (ctx.levelmap[i].syslog == priority) {
               levelmask = ctx.levelmap[i].l2;
               break;
           }
       }
  -    /*fprintf(stderr, "DEBUG: levelmask=0x%.8lx\n", (unsigned long)levelmask);*/
  -    l2_channel_vlog(ctx.l2_nch, levelmask, fmt, args);
  +    fsldebug(L2_LEVEL_DEBUG, "levelmask=0x%.8lx\n", (unsigned long)levelmask);
  +    if ((l2rv = l2_channel_vlog(ctx.l2_nch, levelmask, fmt, args)) != L2_OK) {
  +        cp = l2_env_strerror(ctx.l2_env, l2rv);
  +        fsldebug(L2_LEVEL_PANIC, "applicaion logging failed %s(%d)\n", cp, l2rv);
  +    }
       return;
   }
   
  @@ -692,7 +742,7 @@
   
       if (filename == NULL || buffer == NULL)
           CU(FSL_ERR_ARG);
  -/*fprintf(stderr, "DEBUG: appendfiletobuffer(..., %s)\n", filename);*/
  +    fsldebug(L2_LEVEL_DEBUG, "appendfiletobuffer(..., %s)\n", filename);
   
       if ((fd = open(filename, O_RDONLY)) == -1)
           CU(FSL_ERR_SYS);
  Index: ossp-pkg/fsl/fsl_test.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 fsl_test.c
  --- ossp-pkg/fsl/fsl_test.c	18 Jul 2002 15:18:30 -0000	1.2
  +++ ossp-pkg/fsl/fsl_test.c	23 Jul 2002 14:37:50 -0000	1.3
  @@ -17,6 +17,7 @@
       syslog(LOG_NOTICE,  "syslogging LOG_NOTICE  %d", LOG_NOTICE );
       syslog(LOG_INFO,    "syslogging LOG_INFO    %d", LOG_INFO   );
       syslog(LOG_DEBUG,   "syslogging LOG_DEBUG   %d", LOG_DEBUG  );
  +    closelog();
       return 0;
   }
   

From ossp-cvs-owner@ossp.org  Wed Jul 24 09:54:03 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E8EC1765E1; Wed, 24 Jul 2002 09:54:02 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl README VERSION
Message-Id: <20020724075402.E8EC1765E1@mail.ossp.org>
Date: Wed, 24 Jul 2002 09:54:02 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   24-Jul-2002 09:54:02
  Branch: HEAD                             Handle: 2002072408540200

  Modified files:
    ossp-pkg/fsl            README VERSION

  Log:
    program short description; bootstrap Version in README

  Summary:
    Revision    Changes     Path
    1.2         +7  -2      ossp-pkg/fsl/README
    1.3         +1  -1      ossp-pkg/fsl/VERSION
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/README
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 README
  --- ossp-pkg/fsl/README	9 Jul 2002 09:42:09 -0000	1.1
  +++ ossp-pkg/fsl/README	24 Jul 2002 07:54:02 -0000	1.2
  @@ -5,11 +5,16 @@
     |_| |___/_|
                
     OSSP fsl - Faking Syslog Library
  -  Version 
  +  Version 0.1.2 (23-Jul-2002)
   
     ABSTRACT
   
  -  OSSP fsl is ....
  +  OSSP fsl offers the syslog(3) API otherwise provided by the Standard
  +  C Library (libc). Instead of writing to the syslogd(8) process, it
  +  uses the powerful OSSP l2 logging capabilities. It is a drop-in
  +  link-time replacement which enables any syslog(3) consumer to take
  +  advantage of OSSP l2 by just linking this library in before libc.
  +  The source code of the program remains unchanged.
   
     COPYRIGHT AND LICENSE
   
  Index: ossp-pkg/fsl/VERSION
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 VERSION
  --- ossp-pkg/fsl/VERSION	23 Jul 2002 11:14:42 -0000	1.2
  +++ ossp-pkg/fsl/VERSION	24 Jul 2002 07:54:02 -0000	1.3
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP fsl (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP fsl, Version 0.1.1 (23-Jul-2002)
  +  This is OSSP fsl, Version 0.1.2 (23-Jul-2002)
   

From ossp-cvs-owner@ossp.org  Wed Jul 24 09:55:07 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id ED819765E1; Wed, 24 Jul 2002 09:55:06 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl devtool.conf
Message-Id: <20020724075506.ED819765E1@mail.ossp.org>
Date: Wed, 24 Jul 2002 09:55:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   24-Jul-2002 09:55:06
  Branch: HEAD                             Handle: 2002072408550600

  Modified files:
    ossp-pkg/fsl            devtool.conf

  Log:
    improve devtool release automatically committing VERSION and README

  Summary:
    Revision    Changes     Path
    1.5         +1  -0      ossp-pkg/fsl/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/devtool.conf
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 devtool.conf
  --- ossp-pkg/fsl/devtool.conf	23 Jul 2002 11:39:34 -0000	1.4
  +++ ossp-pkg/fsl/devtool.conf	24 Jul 2002 07:55:06 -0000	1.5
  @@ -50,6 +50,7 @@
       V=`./shtool version -l txt -d long VERSION`
       sed -e "s/Version .*(.*)/Version $V/g" <README >README.n 
       mv README.n README
  +    cvs commit -m'bump version for release' VERSION README
   
   %tag
       V=`./shtool version -l txt -d short VERSION`

From ossp-cvs-owner@ossp.org  Wed Jul 24 09:57:05 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 13AE3765E1; Wed, 24 Jul 2002 09:57:05 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.c fsl.pod fsl.sample.cfg l2.sample.cfg
Message-Id: <20020724075705.13AE3765E1@mail.ossp.org>
Date: Wed, 24 Jul 2002 09:57:05 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   24-Jul-2002 09:57:05
  Branch: HEAD                             Handle: 197001010100001027493824

  Added files:
    ossp-pkg/fsl            fsl.sample.cfg
  Modified files:
    ossp-pkg/fsl            fsl.c fsl.pod
  Removed files:
    ossp-pkg/fsl            l2.sample.cfg

  Log:
    change prefix from l2. to fsl.

  Summary:
    Revision    Changes     Path
    1.19        +1  -1      ossp-pkg/fsl/fsl.c
    1.6         +2  -2      ossp-pkg/fsl/fsl.pod
    1.1         +27 -0      ossp-pkg/fsl/fsl.sample.cfg
    NONE        +0  -27     ossp-pkg/fsl/l2.sample.cfg
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 fsl.c
  --- ossp-pkg/fsl/fsl.c	23 Jul 2002 14:37:50 -0000	1.18
  +++ ossp-pkg/fsl/fsl.c	24 Jul 2002 07:57:04 -0000	1.19
  @@ -64,7 +64,7 @@
   #endif
   
   #include "config.h"
  -#define FSL_PREFIX "l2."
  +#define FSL_PREFIX "fsl."
   
   #define STMT(stuff) do { stuff } while (0)
   #define CU(returncode) STMT( rc = returncode; goto CUS; )
  Index: ossp-pkg/fsl/fsl.pod
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 fsl.pod
  --- ossp-pkg/fsl/fsl.pod	23 Jul 2002 09:40:38 -0000	1.5
  +++ ossp-pkg/fsl/fsl.pod	24 Jul 2002 07:57:04 -0000	1.6
  @@ -64,8 +64,8 @@
   
   If an application calls openlog(3) it passes an identification string
   (I<ident>) and a logging facility (I<facility>) along. B<OSSP l2syslog>
  -tries to read the file "C<cfgdir>C</l2.>I<ident>". If the file is not
  -readable, all files matching I<cfgdir>C</l2.*> are read.
  +tries to read the file "C<cfgdir>C</fsl.>I<ident>". If the file is not
  +readable, all files matching I<cfgdir>C</fsl.*> are read.
   
   In both cases, all data that has been read in is then parsed for
   configuration sections. These are identified by "C<ident >I<match>"
  Index: ossp-pkg/fsl/fsl.sample.cfg
  ============================================================
  $ cvs update -p -r1.1 fsl.sample.cfg
  
      #
      # SAMPLE FAKESYSLOG CONFIGURATION FILE
      #
  
  ident (.*)a(.*)/(.*)p q{
      debug:
          prefix(prefix="%%b %%d %%H:%%M:%%S <%%L> $1 [%%P]: ",
          timezone=local)
          -> file(path="sendmail.debug.log", append=0,perm=432)
      };
  
  ident mail/.* q{
      error:
          prefix(prefix="%%b %%d %%H:%%M:%%S <%%L> $1 [%%P]: ",
          timezone=local)
          -> file(path="mail.error.log", append=0,perm=432)
      };
  
  ident news/.* q{
      warning:
          prefix(prefix="%%b %%d %%H:%%M:%%S <%%L> $1 [%%P]: ",
          timezone=local)
          -> file(path="news.warning.log", append=0,perm=432)
      };
  
  # have a nice day
  

From ossp-cvs-owner@ossp.org  Wed Jul 24 11:36:55 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D11A7767CC; Wed, 24 Jul 2002 11:36:54 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_channel.c
Message-Id: <20020724093654.D11A7767CC@mail.ossp.org>
Date: Wed, 24 Jul 2002 11:36:54 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Jul-2002 11:36:54
  Branch: HEAD                             Handle: 2002072410365400

  Modified files:
    ossp-pkg/l2             l2_channel.c

  Log:
    make sure the channel mask on each individual channel is also active

  Summary:
    Revision    Changes     Path
    1.28        +12 -0      ossp-pkg/l2/l2_channel.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_channel.c
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 l2_channel.c
  --- ossp-pkg/l2/l2_channel.c	2 Jan 2002 17:07:38 -0000	1.27
  +++ ossp-pkg/l2/l2_channel.c	24 Jul 2002 09:36:54 -0000	1.28
  @@ -334,6 +334,7 @@
   /* write to channel */
   l2_result_t l2_channel_write(l2_channel_t *ch, l2_level_t level, const char *buf, size_t bufsize)
   {
  +    int l, j;
       l2_result_t rv;
       l2_result_t rvD;
       l2_channel_t *chD;
  @@ -345,6 +346,17 @@
       /* make sure channel is in state "opened" */
       if (ch->state != L2_CHSTATE_OPENED)
           return L2_ERR_USE;
  +
  +    /* make sure only a single level is specified */
  +    for (l = level, j = 0; l != 0; l = (l >> 1))
  +        if (l & 0x1)
  +            j++;
  +    if (j != 1)
  +        return L2_ERR_ARG;
  +
  +    /* check whether level mask already stops processing */
  +    if (!(ch->levelmask & level))
  +        return L2_OK;
   
       /* short circuiting */
       if (bufsize == 0)

From ossp-cvs-owner@ossp.org  Wed Jul 24 11:45:14 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BA7F5769AC; Wed, 24 Jul 2002 11:45:13 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.c
Message-Id: <20020724094513.BA7F5769AC@mail.ossp.org>
Date: Wed, 24 Jul 2002 11:45:13 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   24-Jul-2002 11:45:13
  Branch: HEAD                             Handle: 2002072410451200

  Modified files:
    ossp-pkg/fsl            fsl.c

  Log:
    corrected strlen comparison; improved debug/trace output

  Summary:
    Revision    Changes     Path
    1.20        +4  -5      ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 fsl.c
  --- ossp-pkg/fsl/fsl.c	24 Jul 2002 07:57:04 -0000	1.19
  +++ ossp-pkg/fsl/fsl.c	24 Jul 2002 09:45:12 -0000	1.20
  @@ -318,7 +318,7 @@
       argl2spec = getenv("FSL_DEBUG");
       if (argl2spec == NULL)
           argl2spec = FSL_DEBUG;
  -    if (strlen(argl2spec) != NULL) {
  +    if (strlen(argl2spec) != 0) {
           if ((l2rv = l2_env_create(&ctx.l2_fslenv)) != L2_OK) {
               cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "failed to create L2 environment (%d) for fsl\n", l2rv); CU(1); }
           if ((l2rv = l2_env_levels(ctx.l2_fslenv, L2_LEVEL_ALL, L2_LEVEL_NONE)) != L2_OK) {
  @@ -344,6 +344,7 @@
       */
   
       /* create default sysloglevel to l2_level mapping */
  +    fsldebug(L2_LEVEL_DEBUG, "create default sysloglevel to l2_level mapping\n");
       for (i = 0; sysloglevel2string[i].string != NULL; i++);
       if ((ctx.levelmap = (levelmap_t *)malloc(i * sizeof(levelmap_t))) == NULL) {
           fsldebug(L2_LEVEL_ERROR, "Error: malloc() failed\n"); CU(1); }
  @@ -411,8 +412,6 @@
       if ((cfgrv = cfg_node_get(cfg, cfgseq, CFG_NODE_ATTR_CHILD1, &cfgdir)) != CFG_OK) {
           (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_get(CFG_NODE_ATTR_CHILD1) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
       while (cfgdir != NULL) {
  -        fsldebug(L2_LEVEL_DEBUG, "cfgdir=0x%.8lx\n", (unsigned long)cfgdir);
  -
           /*  check if operating on a directive */
           if ((cfgrv = cfg_node_get(cfg, cfgdir, CFG_NODE_ATTR_TYPE, &cfgtype)) != CFG_OK) {
               (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  @@ -489,7 +488,7 @@
                       fsldebug(L2_LEVEL_ERROR, "pcre_study() failed with error %s\n", cpError); CU(1); }
   
                   nMatch = pcre_exec(pcreRegex, pcreExtra, cpISF, strlen(cpISF), 0, 0, ovec, OVECSIZE);
  -                fsldebug(L2_LEVEL_DEBUG, "nMatch=%d when \"%s\" is used against \"%s\"\n", nMatch, argmatch, cpISF);
  +                fsldebug(L2_LEVEL_TRACE, "nMatch=%d when \"%s\" is used against \"%s\"\n", nMatch, argmatch, cpISF);
                   if (nMatch >= 1) {
                       pcre_get_substring_list(cpISF, ovec, nMatch, &acpMatch);
                       if (acpMatch != NULL)
  @@ -742,7 +741,7 @@
   
       if (filename == NULL || buffer == NULL)
           CU(FSL_ERR_ARG);
  -    fsldebug(L2_LEVEL_DEBUG, "appendfiletobuffer(..., %s)\n", filename);
  +    fsldebug(L2_LEVEL_TRACE, "appendfiletobuffer(), filename=%s)\n", filename);
   
       if ((fd = open(filename, O_RDONLY)) == -1)
           CU(FSL_ERR_SYS);

From ossp-cvs-owner@ossp.org  Wed Jul 24 11:45:24 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 453C4769C7; Wed, 24 Jul 2002 11:45:24 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl README VERSION
Message-Id: <20020724094524.453C4769C7@mail.ossp.org>
Date: Wed, 24 Jul 2002 11:45:24 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   24-Jul-2002 11:45:24
  Branch: HEAD                             Handle: 2002072410452300

  Modified files:
    ossp-pkg/fsl            README VERSION

  Log:
    bump version for release

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/fsl/README
    1.4         +1  -1      ossp-pkg/fsl/VERSION
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/README
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 README
  --- ossp-pkg/fsl/README	24 Jul 2002 07:54:02 -0000	1.2
  +++ ossp-pkg/fsl/README	24 Jul 2002 09:45:23 -0000	1.3
  @@ -5,7 +5,7 @@
     |_| |___/_|
                
     OSSP fsl - Faking Syslog Library
  -  Version 0.1.2 (23-Jul-2002)
  +  Version 0.1.3 (24-Jul-2002)
   
     ABSTRACT
   
  Index: ossp-pkg/fsl/VERSION
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 VERSION
  --- ossp-pkg/fsl/VERSION	24 Jul 2002 07:54:02 -0000	1.3
  +++ ossp-pkg/fsl/VERSION	24 Jul 2002 09:45:23 -0000	1.4
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP fsl (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP fsl, Version 0.1.2 (23-Jul-2002)
  +  This is OSSP fsl, Version 0.1.3 (24-Jul-2002)
   

From ossp-cvs-owner@ossp.org  Wed Jul 24 12:04:16 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C906A765E1; Wed, 24 Jul 2002 12:04:15 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg cfg_test.c
Message-Id: <20020724100415.C906A765E1@mail.ossp.org>
Date: Wed, 24 Jul 2002 12:04:15 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Jul-2002 12:04:15
  Branch: HEAD                             Handle: 2002072411041500

  Modified files:
    ossp-pkg/cfg            cfg_test.c

  Log:
    get rid of warnings

  Summary:
    Revision    Changes     Path
    1.8         +2  -3      ossp-pkg/cfg/cfg_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/cfg_test.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 cfg_test.c
  --- ossp-pkg/cfg/cfg_test.c	18 Jul 2002 15:34:55 -0000	1.7
  +++ ossp-pkg/cfg/cfg_test.c	24 Jul 2002 10:04:15 -0000	1.8
  @@ -15,7 +15,6 @@
       char *error;
       cfg_t *cfg;
       cfg_node_t **vec;
  -    cfg_node_t *n;
       int i;
   
       if (argc < 2 || argc > 3) {
  @@ -59,7 +58,7 @@
               cfg_error(cfg, rc, &error);
               fprintf(stderr, "ERROR: cfg_node_select: %s\n", error);
               free(im_ptr);
  -            //cfg_destroy(cfg);
  +            /*cfg_destroy(cfg);*/
               exit(1);
           }
           for (i = 1; vec[i] != NULL; i++) {
  @@ -68,7 +67,7 @@
                   cfg_error(cfg, rc, &error);
                   fprintf(stderr, "ERROR: cfg_export: %s\n", error);
                   free(im_ptr);
  -                //cfg_destroy(cfg);
  +                /*cfg_destroy(cfg);*/
                   exit(1);
               }
               fprintf(stdout, "%s", ex_ptr);

From ossp-cvs-owner@ossp.org  Wed Jul 24 12:39:20 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 37B00765E1; Wed, 24 Jul 2002 12:39:20 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl devtool.conf
Message-Id: <20020724103920.37B00765E1@mail.ossp.org>
Date: Wed, 24 Jul 2002 12:39:20 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   24-Jul-2002 12:39:20
  Branch: HEAD                             Handle: 2002072411391900

  Modified files:
    ossp-pkg/fsl            devtool.conf

  Log:
    removing old tarballs

  Summary:
    Revision    Changes     Path
    1.6         +2  -0      ossp-pkg/fsl/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/devtool.conf
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 devtool.conf
  --- ossp-pkg/fsl/devtool.conf	24 Jul 2002 07:55:06 -0000	1.5
  +++ ossp-pkg/fsl/devtool.conf	24 Jul 2002 10:39:19 -0000	1.6
  @@ -58,6 +58,8 @@
       cvs tag FSL_${V}
   
   %dist
  +    echo "+++ removing old tarballs"
  +    rm -f fsl-*.tar.gz
       echo "+++ generating"
       ./devtool autoclean
       ./devtool autogen

From ossp-cvs-owner@ossp.org  Wed Jul 24 15:11:39 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A578D765E1; Wed, 24 Jul 2002 15:11:38 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.pod
Message-Id: <20020724131138.A578D765E1@mail.ossp.org>
Date: Wed, 24 Jul 2002 15:11:38 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   24-Jul-2002 15:11:38
  Branch: HEAD                             Handle: 2002072414113700

  Modified files:
    ossp-pkg/fsl            fsl.pod

  Log:
    BNF; table of available channels; example

  Summary:
    Revision    Changes     Path
    1.7         +177 -49    ossp-pkg/fsl/fsl.pod
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.pod
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 fsl.pod
  --- ossp-pkg/fsl/fsl.pod	24 Jul 2002 07:57:04 -0000	1.6
  +++ ossp-pkg/fsl/fsl.pod	24 Jul 2002 13:11:37 -0000	1.7
  @@ -106,57 +106,185 @@
   existing program by just linking in the latest lib_l2. The main program
   remains unmodified.
   
  -FIXME T_ID, channel_cons, try to remove the word "streams"
  +B<tree>           ::= B<stream>
  +                 
  +B<stream>         ::= B<channel>
  +                 | B<channel> '->' B<stream>
  +                 | B<channel> '->' '{' B<streams> '}'
  +
  +B<streams>        ::= B<stream>
  +                 | B<stream> ';' B<streams>
  +
  +B<channel>        ::= B<channel_level> '/'
  +                   B<channel_level> ':' B<channel_cons>
  +                 | B<channel_level> ':' B<channel_cons>
  +                 | B<channel_cons>
  +
  +B<channel_level>  ::= B<level_name>
  +                 | '(' B<channel_mask> ')'
  +
  +B<channel_mask>   ::= B<level_name>
  +                 | B<level_name> '|' B<channel_mask>
  +
  +B<level_name>     ::= 'panic'
  +                 | 'critical'
  +                 | 'error'
  +                 | 'warning'
  +                 | 'notice'
  +                 | 'info'
  +                 | 'trace'
  +                 | 'debug'
  +
  +B<channel_cons>   ::= B<channel_name> B<channel_params>
  +
  +B<channel_name>   ::= 'buffer'
  +                 | 'fd'
  +                 | 'file'
  +                 | 'filter'
  +                 | 'irc'
  +                 | 'noop'
  +                 | 'null'
  +                 | 'pipe'
  +                 | 'prefix'
  +                 | 'smtp' 
  +                 | 'socket'
  +                 | 'syslog'
  +                 | ...
  +
  +B<channel_params> ::= I<empty>
  +                 | '(' ')'
  +                 | '(' B<channel_plist> ')'
   
  -B<tree>          ::= B<stream>
  -
  -B<stream>        ::=
  -                | B<channel>
  -                | B<channel> => stream
  -                | B<channel> => '{' streams '}'
  -
  -B<streams>       ::=
  -                | stream
  -                | stream ';' streams
  -
  -B<channel>       ::=
  -                | B<channel_level> '/' B<channel_level> ':' B<channel_cons>
  -                | B<channel_level> ':' B<channel_cons>
  -                | B<channel_cons>
  -
  -B<channel_level> ::=
  -                | T_ID
  -                | '(' B<channel_mask> ')'
  -
  -B<channel_mask>  ::=
  -                | T_ID
  -                | T_ID '|' B<channel_mask>
  -
  -B<channel_params>::= I<empty>
  -                | '(' ')'
  -                | '(' B<channel_plist> ')'
  -
  -B<channel_plist> ::=
  -                | B<channel_param>
  -                | B<channel_param> ',' B<channel_plist>
  +B<channel_plist>  ::= B<channel_param>
  +                 | B<channel_param> ',' B<channel_plist>
           
  -B<channel_param> ::=
  -                | paramter '=' value
  - 
  -
  -Here is a table of available channels that lists their names and
  -parameters including the type of each parameter.
  -
  -buffer (INT size, INT interval, INT levelflush);
  -fd     (INT filedescriptor);
  -file   (STR path, INT append, INT perm);
  -filter (STR regex, INT negate, INT nocase);
  -irc    (STR progname, STR localhost, STR localuser, STR nickname, STR username, STR realname, STR channel, INT join, STR host, STR port, INT timeout);
  -pipe   (STR execmode, STR runtime, STR path);
  -prefix (STR prefix, STR timezone);
  -smtp   (STR progname, STR localhost, STR localuser, STR from, STR rcpt, STR subject, STR host, STR port, INT timeout);
  -socket (STR proto, STR host, STR port, INT timeout);
  -syslog (STR target, STR remotehost, INT remoteport, STR localhost, STR facility, STR ident, INT logpid);
  +B<channel_param>  ::= B<param_name> '=' B<param_value>
  +
  +B<param_name>     ::= m/[a-zA-Z][a-zA-Z0-9_-]*/
  +
  +B<param_value>    ::= single-quoted, double-quoted
  +                   or unquoted text
  +
  +Here is a table of available channels that lists their B<channel_name> and
  +B<param_names> including the type of each parameter.
  +
  +FIXME mandatories, defaults, output vs. filterchannels
  +
  +    buffer (INT size,
  +            INT interval,
  +            INT levelflush);
  +
  +    fd     (INT filedescriptor);
  +
  +    file   (STR path,
  +            INT append,
  +            INT perm);
  +
  +    filter (STR regex,
  +            INT negate,
  +            INT nocase);
  +
  +    irc    (STR progname,
  +            STR localhost,
  +            STR localuser,
  +            STR nickname,
  +            STR username,
  +            STR realname,
  +            STR channel,
  +            INT join,
  +            STR host,
  +            STR port,
  +            INT timeout);
  +
  +    noop   ()
  +
  +    null   ()
  +
  +    pipe   (STR execmode,
  +            STR runtime,
  +            STR path);
  +
  +    prefix (STR prefix,
  +            STR timezone);
  +
  +    smtp   (STR progname,
  +            STR localhost,
  +            STR localuser,
  +            STR from,
  +            STR rcpt,
  +            STR subject,
  +            STR host,
  +            STR port,
  +            INT timeout);
  +
  +    socket (STR proto,
  +            STR host,
  +            STR port,
  +            INT timeout);
  +
  +    syslog (STR target,
  +            STR remotehost,
  +            INT remoteport,
  +            STR localhost,
  +            STR facility,
  +            STR ident,
  +            INT logpid);
  +
  +
  +    EXAMPLE for a very simple l2spec writing to STDERR (FD#2)
  +
  +    fd(filedescriptor=2)
  +
  +    EXAMPLE for a simple l2spec writing to a file
  +
  +    file(path="/var/log/file")
  +
  +    EXAMPLE for a very complex l2spec
  +
  +    noop
  +    -> {
  +        (info): filter(
  +            regex="foo"
  +        ) 
  +        -> syslog(
  +            remotehost="localhost"
  +        );
  +        info: prefix(
  +        ) 
  +        -> {
  +            debug/error: buffer(
  +                size=1024
  +            ) 
  +            -> file(
  +                path="a"
  +            );
  +            (trace|debug)/(trace): buffer(
  +                size=65536
  +            ) -> 
  +            file(
  +                path="b"
  +            )
  +        };
  +        prefix() -> {
  +            warning: filter(
  +                negate=1, 
  +                regex="foo"
  +            ) 
  +            -> irc(
  +                host=irc.dev.de.cw.net
  +            );
  +            error: filter(
  +                nocase=1, 
  +                regex="foo"
  +            ) 
  +            -> smtp(
  +                host=sv1.dev.de.cw.net
  +            );
  +            panic: smtp(
  +                host=sv1.dev.de.cw.net
  +            )
  +        }
  +    };
   
   =head1 EXAMPLE
   

From ossp-cvs-owner@ossp.org  Wed Jul 24 16:55:56 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 439B9765E1; Wed, 24 Jul 2002 16:55:56 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl configure.ac
Message-Id: <20020724145556.439B9765E1@mail.ossp.org>
Date: Wed, 24 Jul 2002 16:55:56 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Jul-2002 16:55:56
  Branch: HEAD                             Handle: 2002072415555500

  Modified files:
    ossp-pkg/fsl            configure.ac

  Log:
    workaround for brain-dead Solaris

  Summary:
    Revision    Changes     Path
    1.5         +10 -0      ossp-pkg/fsl/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/configure.ac
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 configure.ac
  --- ossp-pkg/fsl/configure.ac	23 Jul 2002 14:37:50 -0000	1.4
  +++ ossp-pkg/fsl/configure.ac	24 Jul 2002 14:55:55 -0000	1.5
  @@ -44,6 +44,16 @@
   sinclude(fsl.ac)
   FSL_CHECK_ALL
   
  +dnl #   FIXME FIXME FIXME FIXME FIXME FIXME FIXME
  +dnl #   perform important checks from OSSP l2 because we have
  +dnl #   no possibility to merge their determined knowledge
  +dnl #   into our brain.
  +AC_CHECK_LIB(nsl, gethostname)
  +if test ".`echo $LIBS | grep nsl`" = . ;then
  +    AC_CHECK_LIB(nsl, gethostbyname)
  +fi  
  +AC_CHECK_LIB(socket, accept)
  +
   dnl #   pre-processing for subdirs
   LIB_DEPS=""
   

From ossp-cvs-owner@ossp.org  Wed Jul 24 16:56:04 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 90D38769C1; Wed, 24 Jul 2002 16:56:04 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl-config.in
Message-Id: <20020724145604.90D38769C1@mail.ossp.org>
Date: Wed, 24 Jul 2002 16:56:04 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Jul-2002 16:56:04
  Branch: HEAD                             Handle: 2002072415560400

  Modified files:
    ossp-pkg/fsl            fsl-config.in

  Log:
    fix left over strings

  Summary:
    Revision    Changes     Path
    1.2         +2  -2      ossp-pkg/fsl/fsl-config.in
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl-config.in
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 fsl-config.in
  --- ossp-pkg/fsl/fsl-config.in	9 Jul 2002 09:42:09 -0000	1.1
  +++ ossp-pkg/fsl/fsl-config.in	24 Jul 2002 14:56:04 -0000	1.2
  @@ -125,8 +125,8 @@
               output_extra="$output_extra $fsl_libs"
               ;;
           * )
  -            echo "sa-config:Error: Invalid option" 1>&2
  -            echo "sa-config:Usage: $usage" 1>&2
  +            echo "fsl-config:Error: Invalid option" 1>&2
  +            echo "fsl-config:Usage: $usage" 1>&2
               exit 1;
               ;;
       esac

From ossp-cvs-owner@ossp.org  Wed Jul 24 17:29:02 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3B28F765E1; Wed, 24 Jul 2002 17:29:02 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl configure.ac fsl.c fsl_test.c
Message-Id: <20020724152902.3B28F765E1@mail.ossp.org>
Date: Wed, 24 Jul 2002 17:29:02 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   24-Jul-2002 17:29:02
  Branch: HEAD                             Handle: 2002072416290100

  Modified files:
    ossp-pkg/fsl            configure.ac fsl.c fsl_test.c

  Log:
    added solaris and linux compatiblity; improved readability of traces

  Summary:
    Revision    Changes     Path
    1.6         +2  -2      ossp-pkg/fsl/configure.ac
    1.21        +43 -27     ossp-pkg/fsl/fsl.c
    1.4         +1  -1      ossp-pkg/fsl/fsl_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/configure.ac
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 configure.ac
  --- ossp-pkg/fsl/configure.ac	24 Jul 2002 14:55:55 -0000	1.5
  +++ ossp-pkg/fsl/configure.ac	24 Jul 2002 15:29:01 -0000	1.6
  @@ -102,9 +102,9 @@
   
   AC_MSG_CHECKING(for debugging using a l2spec)
   AC_ARG_WITH(debug,dnl
  -[  --with-debug=L2SPEC      set debugging using a l2spec (default="")],
  +[  --with-debug=L2SPEC     set debugging using a l2spec (default="")],
   [ fsl_debug=$withval ],
  -[ fsl_debug="" ]
  +[ fsl_debug="null()" ]
   )dnl
   AC_DEFINE_UNQUOTED(FSL_DEBUG,  "$fsl_debug",  [Define debugging using a l2spec])
   AC_MSG_RESULT([$fsl_debug])
  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 fsl.c
  --- ossp-pkg/fsl/fsl.c	24 Jul 2002 09:45:12 -0000	1.20
  +++ ossp-pkg/fsl/fsl.c	24 Jul 2002 15:29:01 -0000	1.21
  @@ -41,7 +41,6 @@
   #include <sys/types.h>
   #include <sys/stat.h>
   #include <dirent.h>
  -#include <syslimits.h>
   
   /* standard include we re-implement */
   #include <syslog.h>
  @@ -51,11 +50,6 @@
   #include "cfg.h"
   #include "pcre.h"
   
  -/* default for the dedicated logfile */
  -#ifndef LOGFILE
  -#define LOGFILE "/tmp/syslog"
  -#endif
  -
   #ifndef LOG_PRIMASK
   #define LOG_PRIMASK (LOG_EMERG|LOG_ALERT|LOG_CRIT|LOG_ERR|LOG_WARNING|LOG_NOTICE|LOG_INFO|LOG_DEBUG)
   #endif
  @@ -100,19 +94,18 @@
       char *string;
   } syslogfacility2string[] = {
       { LOG_AUTH,     "auth"     },
  +#ifdef LOG_AUTHPRIV
       { LOG_AUTHPRIV, "authpriv" },
  +#endif
  +#ifdef LOG_CONSOLE
       { LOG_CONSOLE,  "console"  },
  +#endif
       { LOG_CRON,     "cron"     },
       { LOG_DAEMON,   "daemon"   },
  +#ifdef LOG_FTP
       { LOG_FTP,      "ftp"      },
  +#endif
       { LOG_KERN,     "kern"     },
  -    { LOG_LPR,      "lpr"      },
  -    { LOG_MAIL,     "mail"     },
  -    { LOG_NEWS,     "news"     },
  -    { LOG_SECURITY, "security" },
  -    { LOG_SYSLOG,   "syslog"   },
  -    { LOG_USER,     "user"     },
  -    { LOG_UUCP,     "uucp"     },
       { LOG_LOCAL0,   "local0"   },
       { LOG_LOCAL1,   "local1"   },
       { LOG_LOCAL2,   "local2"   },
  @@ -121,7 +114,19 @@
       { LOG_LOCAL5,   "local5"   },
       { LOG_LOCAL6,   "local6"   },
       { LOG_LOCAL7,   "local7"   },
  -    { 0,            NULL       }
  +    { LOG_LPR,      "lpr"      },
  +    { LOG_MAIL,     "mail"     },
  +    { LOG_NEWS,     "news"     },
  +#ifdef LOG_NTP
  +    { LOG_NTP,      "ntp"      },
  +#endif
  +#ifdef LOG_SECURITY
  +    { LOG_SECURITY, "security" },
  +#endif
  +    { LOG_SYSLOG,   "syslog"   },
  +    { LOG_USER,     "user"     },
  +    { LOG_UUCP,     "uucp"     },
  +    { -1,            NULL      }
   };
   
   static struct {
  @@ -137,7 +142,7 @@
       { "notice",  LOG_NOTICE,  L2_LEVEL_NOTICE   },
       { "info",    LOG_INFO,    L2_LEVEL_INFO     },
       { "debug",   LOG_DEBUG,   L2_LEVEL_DEBUG    },
  -    { NULL,      0,           0                 }
  +    { NULL,      -1,          -1                }
   };
   
   static struct {
  @@ -153,7 +158,7 @@
       { "info",     L2_LEVEL_INFO,      },
       { "trace",    L2_LEVEL_TRACE,     },
       { "debug",    L2_LEVEL_DEBUG,     },
  -    { NULL,       0                   }
  +    { NULL,       -1                  }
   };
   typedef struct {
       int        syslog;
  @@ -184,6 +189,8 @@
       va_start(args, message);
       if (ctx.l2_fslnch != NULL)
           l2_channel_vlog(ctx.l2_fslnch, level, message, args);
  +    else
  +        vfprintf(stderr, message, args);
       va_end(args);
       return;
   }
  @@ -337,7 +344,7 @@
               cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to link child channel %s(%d) for fsl\n", cp, l2rv); CU(1); }
           if ((l2rv = l2_channel_open(ctx.l2_fslnch)) != L2_OK) {
               cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to open channel stream %s(%d) for fsl\n", cp, l2rv); CU(1); }
  -        fsldebug(L2_LEVEL_TRACE, "captured openlog(%s, 0x%.8lx, 0x%.8lx)", ident, logopt, facility);
  +        fsldebug(L2_LEVEL_TRACE, "captured openlog(ident=\"%s\", logopt=0x%.8lx, facility=0x%.8lx)", ident, logopt, facility);
       }
   
       /*FIXME currently we completely ignore logopt LOG_CONS, LOG_NDELAY, LOG_PERROR, LOG_PID
  @@ -388,7 +395,7 @@
       strcat(cpISF, cpFacility);
   
       if ((rv = readfileorallfiles(&buf, ident)) != FSL_OK) {
  -        fsldebug(L2_LEVEL_ERROR, "readfileorallfiles(buf, %s) returned %d, system %s(%d)\n", ident, rv, strerror(errno), errno); CU(1); }
  +        fsldebug(L2_LEVEL_ERROR, "readfileorallfiles(buf, \"%s\") returned %d, system error: %s(%d)\n", ident, rv, strerror(errno), errno); CU(1); }
   
       if ((cfgrv = cfg_create(&cfg)) != CFG_OK) {
           (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_create() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  @@ -488,7 +495,7 @@
                       fsldebug(L2_LEVEL_ERROR, "pcre_study() failed with error %s\n", cpError); CU(1); }
   
                   nMatch = pcre_exec(pcreRegex, pcreExtra, cpISF, strlen(cpISF), 0, 0, ovec, OVECSIZE);
  -                fsldebug(L2_LEVEL_TRACE, "nMatch=%d when \"%s\" is used against \"%s\"\n", nMatch, argmatch, cpISF);
  +                fsldebug(L2_LEVEL_TRACE, "found %2d matches when \"%s\" is used against \"%s\"\n", nMatch, argmatch, cpISF);
                   if (nMatch >= 1) {
                       pcre_get_substring_list(cpISF, ovec, nMatch, &acpMatch);
                       if (acpMatch != NULL)
  @@ -594,7 +601,7 @@
       int oldmask;
   
       if (ctx.l2_fslnch != NULL)
  -        l2_channel_log(ctx.l2_fslnch, L2_LEVEL_TRACE, "captured setlogmask(0x%.8lx)", maskpri);
  +        l2_channel_log(ctx.l2_fslnch, L2_LEVEL_TRACE, "captured setlogmask(maskpri=0x%.8lx)", maskpri);
   
       oldmask = ctx.maskpri;
   
  @@ -659,6 +666,10 @@
   {
       fsl_rc_t rv;
   
  +    if (ident == NULL)
  +        return FSL_ERR_ARG;
  +    fsldebug(L2_LEVEL_TRACE, "readfileorallfiles(buffer, ident=\"%s\")\n", ident);
  +
       if ((rv = readfile(buffer, ident)) == FSL_OK)
           return FSL_OK;
   
  @@ -678,6 +689,7 @@
   
       if (ident == NULL || buffer == NULL)
           CU(FSL_ERR_ARG);
  +    fsldebug(L2_LEVEL_TRACE, "readfile(buffer, ident=\"%s\")\n", ident);
   
       if ((filename = (char *)malloc(strlen(FSL_CFGDIR) + 1 + strlen(FSL_PREFIX) + strlen(ident) + 1)) == NULL)
           CU(FSL_ERR_MEM);
  @@ -700,31 +712,35 @@
       DIR *dp;
       struct dirent *de;
       char *filename = NULL;
  +    int n;
   
       if (buffer == NULL)
           CU(FSL_ERR_ARG);
  +    fsldebug(L2_LEVEL_TRACE, "readallfiles(buffer) globbing \"%s/%s*\"\n", FSL_CFGDIR, FSL_PREFIX);
   
       if ((dp = opendir(FSL_CFGDIR)) == NULL)
           CU(FSL_ERR_SYS);
   
  +    rc = FSL_ERR_ARG;
       while ((de = readdir(dp)) != NULL) {
  -        if (   (de->d_type == DT_REG)
  -            && (de->d_namlen >= strlen(FSL_PREFIX))
  +        n = strlen(de->d_name);
  +        if (   (n >= strlen(FSL_PREFIX))
               && (strncmp(de->d_name, FSL_PREFIX, strlen(FSL_PREFIX)) == 0)
                 ) {
  -            if ((filename = (char *)malloc(strlen(FSL_CFGDIR) + 1 + de->d_namlen + 1)) == NULL)
  +            if ((filename = (char *)malloc(strlen(FSL_CFGDIR) + 1 + n + 1)) == NULL)
                   CU(FSL_ERR_MEM);
               filename[0] = '\0';
               strcat(filename, FSL_CFGDIR);
               strcat(filename, "/");
  -            strncat(filename, de->d_name, de->d_namlen);
  -            (void /*FIXME*/)appendfiletobuffer(buffer, filename);
  +            strcat(filename, de->d_name);
  +            if (appendfiletobuffer(buffer, filename) == FSL_OK)
  +                rc = FSL_OK;
               free(filename);
               filename = NULL;
           }
       }
       (void)closedir(dp);
  -    CU(FSL_OK);
  +    CU(rc);
   CUS:
       if (filename != NULL)
           free(filename);
  @@ -741,7 +757,7 @@
   
       if (filename == NULL || buffer == NULL)
           CU(FSL_ERR_ARG);
  -    fsldebug(L2_LEVEL_TRACE, "appendfiletobuffer(), filename=%s)\n", filename);
  +    fsldebug(L2_LEVEL_TRACE, "appendfiletobuffer(buffer, filename=\"%s\")\n", filename);
   
       if ((fd = open(filename, O_RDONLY)) == -1)
           CU(FSL_ERR_SYS);
  Index: ossp-pkg/fsl/fsl_test.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 fsl_test.c
  --- ossp-pkg/fsl/fsl_test.c	23 Jul 2002 14:37:50 -0000	1.3
  +++ ossp-pkg/fsl/fsl_test.c	24 Jul 2002 15:29:01 -0000	1.4
  @@ -5,7 +5,7 @@
   int main(int argc, char *argv[])
   {
       syslog(LOG_INFO, "Connection from host %s", "foo.bar.dom");
  -    openlog("mail", LOG_PID|LOG_NDELAY, LOG_FTP);
  +    openlog("mail", LOG_PID|LOG_NDELAY, LOG_LOCAL0);
       syslog(LOG_ALERT, "who: internal error 23\n");
       setlogmask(LOG_UPTO(LOG_ERR));
       syslog(LOG_INFO|LOG_LOCAL2, "foobar error: %m");

From ossp-cvs-owner@ossp.org  Wed Jul 24 17:35:32 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id ED9D9765EB; Wed, 24 Jul 2002 17:35:31 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl README VERSION
Message-Id: <20020724153531.ED9D9765EB@mail.ossp.org>
Date: Wed, 24 Jul 2002 17:35:31 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   24-Jul-2002 17:35:31
  Branch: HEAD                             Handle: 2002072416353100

  Modified files:
    ossp-pkg/fsl            README VERSION

  Log:
    bump version for release

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/fsl/README
    1.5         +1  -1      ossp-pkg/fsl/VERSION
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/README
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 README
  --- ossp-pkg/fsl/README	24 Jul 2002 09:45:23 -0000	1.3
  +++ ossp-pkg/fsl/README	24 Jul 2002 15:35:31 -0000	1.4
  @@ -5,7 +5,7 @@
     |_| |___/_|
                
     OSSP fsl - Faking Syslog Library
  -  Version 0.1.3 (24-Jul-2002)
  +  Version 0.1.4 (24-Jul-2002)
   
     ABSTRACT
   
  Index: ossp-pkg/fsl/VERSION
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 VERSION
  --- ossp-pkg/fsl/VERSION	24 Jul 2002 09:45:23 -0000	1.4
  +++ ossp-pkg/fsl/VERSION	24 Jul 2002 15:35:31 -0000	1.5
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP fsl (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP fsl, Version 0.1.3 (24-Jul-2002)
  +  This is OSSP fsl, Version 0.1.4 (24-Jul-2002)
   

From ossp-cvs-owner@ossp.org  Wed Jul 24 21:12:36 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 83F35765EB; Wed, 24 Jul 2002 21:12:36 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.pod
Message-Id: <20020724191236.83F35765EB@mail.ossp.org>
Date: Wed, 24 Jul 2002 21:12:36 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Jul-2002 21:12:36
  Branch: HEAD                             Handle: 2002072420123600

  Modified files:
    ossp-pkg/fsl            fsl.pod

  Log:
    some additional documentation points

  Summary:
    Revision    Changes     Path
    1.8         +33 -13     ossp-pkg/fsl/fsl.pod
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.pod
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 fsl.pod
  --- ossp-pkg/fsl/fsl.pod	24 Jul 2002 13:11:37 -0000	1.7
  +++ ossp-pkg/fsl/fsl.pod	24 Jul 2002 19:12:36 -0000	1.8
  @@ -40,8 +40,8 @@
   
   =head1 SYNOPSIS
   
  - LDFLAGS=`fsl-config --ldflags` \
  - LIBS="-lfsl" \
  + LDFLAGS="`fsl-config --all --ldflags`" \
  + LIBS="`fsl-config --all --libs`" \
    ./configure [...]
   
   =head1 DESCRIPTION
  @@ -53,13 +53,6 @@
   advantage of B<OSSP l2> by just linking this library in before F<libc>.
   The source code of the program remains unchanged.
   
  -=head1 FILES
  -
  -The B<OSSP l2syslog> library reads configuration sections located in
  -one or more files. The path to the directory containing these file(s)
  -is specified at compile time and is given to the configure script via
  -C<--with-cfgdir=>I<cfgdir>.
  -
   =head1 OPERATION
   
   If an application calls openlog(3) it passes an identification string
  @@ -295,18 +288,45 @@
        -> file(path="sendmail.debug.log", append=0,perm=432)
    };
   
  +=head1 FILES
  +
  +The B<OSSP l2syslog> library reads configuration sections located in
  +one or more files. The path to the directory containing these file(s)
  +is specified at compile time and is given to the configure script via
  +C<--with-cfgdir=>I<cfgdir>.
  +
  +F<@sysconfdir@/fsl.*>
   
   =head1 OPENPKG
   
  -OpenPKG RPM packages must require the package "l2" in both C<BuildPreReq> and
  -C<PreReq> and force the packaged application to link against F<libl2syslog.a>.
  +OpenPKG RPM packages must require the package "fsl" in both C<BuildPreReq> and
  +C<PreReq> and force the packaged application to link against F<libfsl.a>.
   
   =head1 SEE ALSO
   
  -syslog(3).
  +syslog(3), 
  +B<OSSP l2> http://www.ossp.org/pkg/lib/l2/, 
  +B<OSSP cfg> http://www.ossp.org/pkg/lib/cfg/, 
  +B<OpenPKG> http://www.openpkg.org/.
  +
  +=head1 ONLINE RESOURCES
  +
  + Project Homepage:  http://www.ossp.org/pkg/lib/fsl/
  + Source Repository: http://cvs.ossp.org/pkg/lib/fsl/
  + Distribution Files: ftp://ftp.ossp.org/pkg/lib/fsl/
  +
  +=head1 HISTORY
  +
  +B<OSSP fsl> was implemented in July 2002 by Thomas Lotterer
  +<thomas@lotterer.net> for use in the B<OpenPKG> project as a replacement
  +for its old B<fakesyslog> library. It was prompted by the necessarity
  +to log to multiple files in the B<OpenPKG> F<inn> package and to write
  +messages of particular log levels to different files in the B<OpenPKG>
  +F<postfix> package.
   
   =head1 AUTHOR
   
  -Thomas Lotterer <thl@ossp.org>
  +Thomas Lotterer <thomas@lotterer.net>
   
   =cut
  +

From ossp-cvs-owner@ossp.org  Thu Jul 25 09:49:56 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C4FB8765EB; Thu, 25 Jul 2002 09:49:55 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg cfg_syn_scan.l configure.ac
Message-Id: <20020725074955.C4FB8765EB@mail.ossp.org>
Date: Thu, 25 Jul 2002 09:49:55 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Jul-2002 09:49:55
  Branch: HEAD                             Handle: 2002072508495500

  Modified files:
    ossp-pkg/cfg            cfg_syn_scan.l configure.ac

  Log:
    upgrade to flex-beta 2.5.10 (incompatible changes, so require it)

  Summary:
    Revision    Changes     Path
    1.11        +1  -1      ossp-pkg/cfg/cfg_syn_scan.l
    1.2         +1  -1      ossp-pkg/cfg/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/cfg_syn_scan.l
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 cfg_syn_scan.l
  --- ossp-pkg/cfg/cfg_syn_scan.l	17 Jul 2002 18:47:09 -0000	1.10
  +++ ossp-pkg/cfg/cfg_syn_scan.l	25 Jul 2002 07:49:55 -0000	1.11
  @@ -40,7 +40,7 @@
   #include "cfg_syn_parse.h"
   
   /* how to find our own context */
  -#define CTX ((cfg_syn_ctx_t *)yyget_extra(yy_globals))
  +#define CTX ((cfg_syn_ctx_t *)yyget_extra(yyscanner))
   
   /* provide own input handling */
   #define YY_NO_UNPUT 1
  Index: ossp-pkg/cfg/configure.ac
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 configure.ac
  --- ossp-pkg/cfg/configure.ac	9 Jul 2002 08:29:19 -0000	1.1
  +++ ossp-pkg/cfg/configure.ac	25 Jul 2002 07:49:55 -0000	1.2
  @@ -42,7 +42,7 @@
   AC_PROG_LIBTOOL
   
   AC_CHECK_BISON(BISON, 1.30, [1.3[[0-9]]|1.[[4-9]]])
  -AC_CHECK_FLEX(FLEX, 2.5.6, [2.5.[[6-9]]|2.5.1[[0-9]]|2.[[6-9]].*])
  +AC_CHECK_FLEX(FLEX, 2.5.10, [2.5.1[[0-9]]|2.[[6-9]].*])
   
   sinclude(cfg.ac)
   CFG_CHECK_ALL

From ossp-cvs-owner@ossp.org  Thu Jul 25 09:50:27 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 738AC765EB; Thu, 25 Jul 2002 09:50:27 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 TODO
Message-Id: <20020725075027.738AC765EB@mail.ossp.org>
Date: Thu, 25 Jul 2002 09:50:27 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   25-Jul-2002 09:50:27
  Branch: HEAD                             Handle: 2002072508502700

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    proposal to cleanup code and improve documentation

  Summary:
    Revision    Changes     Path
    1.56        +40 -1      ossp-pkg/l2/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.55 -r1.56 TODO
  --- ossp-pkg/l2/TODO	28 May 2002 12:19:47 -0000	1.55
  +++ ossp-pkg/l2/TODO	25 Jul 2002 07:50:27 -0000	1.56
  @@ -1,7 +1,46 @@
   OSSP L2 TODO
   ============
   
  -New Idea as thl discussed with rse a few minutes ago
  +Structure of channels and documentation [thl]. It should be possible to
  +drag the documentation out of a channel's source code. Everything else
  +is error prone and a documentation nightmare. Currently, most (noop and
  +null doesn't) channels have a code segment that looks like
  +
  +    /* feed and call generic parameter parsing engine */
  +    L2_PARAM_SET(pa[0], size,       INT, &cfg->bufsize);
  +    L2_PARAM_SET(pa[1], interval,   INT, &cfg->bufinterval);
  +    L2_PARAM_SET(pa[2], levelflush, INT, &cfg->levelflush);
  +    L2_PARAM_END(pa[3]);
  +    l2_channel_env(ch, &env);
  +
  +I recommend the L2_PARAM_SET macro should be modified to
  +
  +- set the default value of each paramater, if any exists
  +- force the internal structure name to follow the revealed name
  +- declare a channel to be a filter or output
  +- declare parameters optional or mandatory
  +
  +Also i recommend an organizational enforcement of putting the
  +channel description before such a code segment and a short description
  +(i.e. unit, 0=deactivate) of each parameter/value just behind the macro.
  +This could change the example above to look something like:
  +
  +    /*<man description=channel, type=filter>
  +     * The buffer channel buffers messages poured in from upper channels.
  +     * It flushes the messages down to the lower channels when the buffered
  +     * space exceeds the buffer size, when a given time interval is reached
  +     * (0 disables this feature) or when a newly arrived message has a
  +     * level that matches the levelflush mask.
  +     *
  +    /* feed and call generic parameter parsing engine */
  +    L2_PARAM_SET(pa[0], size,       INT, 4096); /* o: bytes */
  +    L2_PARAM_SET(pa[1], interval,   INT, 0   ); /* o: sec, 0=disable */
  +    L2_PARAM_SET(pa[2], levelflush, INT, 0   ); /* o: levelmask */
  +    L2_PARAM_END(pa[3]);
  +    l2_channel_env(ch, &env);
  +    /*</man>*/
  +
  +Neh idea as thl discussed with rse a few minutes ago
   
   - l2 should calculate the global logging mask automatically based on
     the OR'ing the masks of all output channels. This should increase

From ossp-cvs-owner@ossp.org  Thu Jul 25 09:54:52 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 24563765EB; Thu, 25 Jul 2002 09:54:52 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 aclocal.m4 configure.ac l2_spec_scan.l
Message-Id: <20020725075452.24563765EB@mail.ossp.org>
Date: Thu, 25 Jul 2002 09:54:52 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Jul-2002 09:54:52
  Branch: HEAD                             Handle: 2002072508545100

  Modified files:
    ossp-pkg/l2             aclocal.m4 configure.ac l2_spec_scan.l

  Log:
    upgrade to flex-beta 2.5.10 (incompatible, so require it)

  Summary:
    Revision    Changes     Path
    1.12        +69 -0      ossp-pkg/l2/aclocal.m4
    1.22        +2  -52     ossp-pkg/l2/configure.ac
    1.8         +1  -1      ossp-pkg/l2/l2_spec_scan.l
  ____________________________________________________________________________

  Index: ossp-pkg/l2/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 aclocal.m4
  --- ossp-pkg/l2/aclocal.m4	14 Mar 2002 15:29:23 -0000	1.11
  +++ ossp-pkg/l2/aclocal.m4	25 Jul 2002 07:54:51 -0000	1.12
  @@ -336,3 +336,72 @@
   fi
   ])
   
  +dnl ##
  +dnl ##  Check for GNU Bison and GNU Flex
  +dnl ##
  +dnl ##  configure.in:
  +dnl ##      AC_CHECK_BISON(BISON, 1.30, [1.3[0-9]|1.[4-9]])
  +dnl ##      AC_CHECK_FLEX(FLEX, 2.5.6, [2.5.[6-9]|2.5.1[0-9]|2.[6-9].*])
  +dnl ##
  +dnl ##  Makefile.in:
  +dnl ##      BISON = @BISON@
  +dnl ##      FLEX  = @FLEX@
  +dnl ##
  +
  +AC_DEFUN(AC_CHECK_BISON,[dnl
  +if test ".$enable_maintainer" = .yes; then
  +    bison_version=""
  +    for prog in bison bison-beta bison-alpha bison-snap; do
  +        AC_PATH_PROG($1, $prog, NA) 
  +        if test ".$$1" != .NA; then
  +            bison_version=`($$1 --version | head -1 | sed -e 's;^[[^0-9]]*\([[0-9]][[0-9.]]*\).*;\1;') 2>/dev/null`
  +            case "$bison_version" in
  +                $3 ) break ;;
  +                * ) $1="NA"; unset ac_cv_path_$1 ;;
  +            esac
  +        else
  +            unset ac_cv_path_$1
  +        fi
  +    done
  +    if test ".$$1" = .NA; then
  +        if test ".$bison_version" != .; then
  +            AC_ERROR([found GNU Bison version $bison_version; require version >= $2])
  +        else
  +            AC_ERROR([require GNU Bison version >= $2])
  +        fi
  +    fi
  +else
  +    dnl # disable the use of the tools, but still allow manual override
  +    test ".$$1" = . && $1=true
  +    AC_PATH_PROG($1, bison, true)
  +fi
  +])
  +
  +AC_DEFUN(AC_CHECK_FLEX,[dnl
  +if test ".$enable_maintainer" = .yes; then
  +    flex_version=""
  +    for prog in flex flex-beta flex-alpha flex-snap; do
  +        AC_PATH_PROG($1, $prog, NA) 
  +        if test ".$$1" != .NA; then
  +            flex_version=`($$1 --version | head -1 | sed -e 's;^[[^0-9]]*\([[0-9]][[0-9.]]*\).*;\1;') 2>/dev/null`
  +            case "$flex_version" in
  +                $3 ) break ;;
  +                * ) $1="NA"; unset ac_cv_path_$1 ;;
  +            esac
  +        else
  +            unset ac_cv_path_$1
  +        fi
  +    done
  +    if test ".$$1" = .NA; then
  +        if test ".$flex_version" != .; then
  +            AC_ERROR([found GNU Flex version $flex_version; require version >= $2])
  +        else
  +            AC_ERROR([require GNU Flex version >= $2])
  +        fi
  +    fi
  +else
  +    test ".$$1" = . && $1=true
  +    AC_PATH_PROG($1, flex, true)
  +fi
  +])
  +
  Index: ossp-pkg/l2/configure.ac
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 configure.ac
  --- ossp-pkg/l2/configure.ac	1 Jul 2002 17:50:15 -0000	1.21
  +++ ossp-pkg/l2/configure.ac	25 Jul 2002 07:54:51 -0000	1.22
  @@ -44,58 +44,8 @@
   AC_CHECK_MAINTAINER
   AC_CONFIGURE_LIBTOOL
   
  -dnl # check for developer tools:
  -dnl # GNU Bison and GNU Flex
  -if test ".$enable_maintainer" = .yes; then
  -    dnl # check for GNU Bison >= 1.30
  -    bison_version=""
  -    for prog in bison bison-beta bison-alpha bison-snap; do
  -        AC_PATH_PROG(BISON, $prog, NA) 
  -        if test ".$BISON" != .NA; then
  -            bison_version=`($BISON --version | head -1 | sed -e 's;^[[^0-9]]*\([[0-9]][[0-9.]]*\).*;\1;') 2>/dev/null`
  -            case "$bison_version" in
  -                1.3[[0-9]] | 1.[[4-9]] ) break ;;
  -                * ) BISON="NA"; unset ac_cv_path_BISON ;;
  -            esac
  -        else
  -            unset ac_cv_path_BISON
  -        fi
  -    done
  -    if test ".$BISON" = .NA; then
  -        if test ".$bison_version" != .; then
  -            AC_ERROR([found GNU Bison version $bison_version; require version >= 1.30])
  -        else
  -            AC_ERROR([require GNU Bison version >= 1.30])
  -        fi
  -    fi
  -    dnl # check for GNU Flex >= 2.5.6
  -    flex_version=""
  -    for prog in flex flex-beta flex-alpha flex-snap; do
  -        AC_PATH_PROG(FLEX, $prog, NA) 
  -        if test ".$FLEX" != .NA; then
  -            flex_version=`($FLEX --version | head -1 | sed -e 's;^[[^0-9]]*\([[0-9]][[0-9.]]*\).*;\1;') 2>/dev/null`
  -            case "$flex_version" in
  -                2.5.[[6-9]] | 2.5.1[[0-9]] | 2.[[6-9]].* ) break ;;
  -                * ) FLEX="NA"; unset ac_cv_path_FLEX ;;
  -            esac
  -        else
  -            unset ac_cv_path_FLEX
  -        fi
  -    done
  -    if test ".$FLEX" = .NA; then
  -        if test ".$flex_version" != .; then
  -            AC_ERROR([found GNU Flex version $flex_version; require version >= 2.5.6])
  -        else
  -            AC_ERROR([require GNU Flex version >= 2.5.6])
  -        fi
  -    fi
  -else
  -    dnl # disable the use of the tools, but still allow manual override
  -    test ".$BISON" = . && BISON=true
  -    AC_PATH_PROG(BISON, bison, true)
  -    test ".$FLEX"  = . && FLEX=true
  -    AC_PATH_PROG(FLEX, flex, true)
  -fi
  +AC_CHECK_BISON(BISON, 1.30, [1.3[[0-9]]|1.[[4-9]]])
  +AC_CHECK_FLEX(FLEX, 2.5.10, [2.5.1[[0-9]]|2.[[6-9]].*])
   
   AC_CHECK_LIB(nsl, gethostname)
   if test ".`echo $LIBS | grep nsl`" = . ;then
  Index: ossp-pkg/l2/l2_spec_scan.l
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 l2_spec_scan.l
  --- ossp-pkg/l2/l2_spec_scan.l	2 Jan 2002 17:07:38 -0000	1.7
  +++ ossp-pkg/l2/l2_spec_scan.l	25 Jul 2002 07:54:51 -0000	1.8
  @@ -35,7 +35,7 @@
   #include "l2_spec_parse.h"  /* for T_XXXX */
   
   /* how to find our own context */
  -#define CTX ((l2_spec_ctx_t *)yyget_extra(yy_globals))
  +#define CTX ((l2_spec_ctx_t *)yyget_extra(yyscanner))
   
   /* provide own input handling */
   #define YY_NO_UNPUT 1

From ossp-cvs-owner@ossp.org  Thu Jul 25 11:13:14 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0732E76553; Thu, 25 Jul 2002 11:13:13 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_spec_parse.y
Message-Id: <20020725091313.0732E76553@mail.ossp.org>
Date: Thu, 25 Jul 2002 11:13:13 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Jul-2002 11:13:13
  Branch: HEAD                             Handle: 2002072510131300

  Modified files:
    ossp-pkg/l2             l2_spec_parse.y

  Log:
    allow empty stream (means a 'null' channel)

  Summary:
    Revision    Changes     Path
    1.7         +9  -1      ossp-pkg/l2/l2_spec_parse.y
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_spec_parse.y
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 l2_spec_parse.y
  --- ossp-pkg/l2/l2_spec_parse.y	2 Jan 2002 17:07:38 -0000	1.6
  +++ ossp-pkg/l2/l2_spec_parse.y	25 Jul 2002 09:13:13 -0000	1.7
  @@ -100,7 +100,15 @@
   
   /* stream of channels */
   stream
  -    : channel { 
  +    : /* empty */ {
  +          l2_channel_t *ch;
  +          if ((CTX->rv = l2_channel_create(&ch, CTX->env, "null")) != L2_OK) {
  +              l2_spec_error(CTX, CTX->rv, &yylloc, "failed to create channel 'null'");
  +              YYERROR;
  +          }
  +          $$ = ch;
  +      }
  +    | channel { 
             $$ = $1; 
         }
       | channel T_OP_ARROW stream { 

From ossp-cvs-owner@ossp.org  Thu Jul 25 11:42:45 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4583C765EB; Thu, 25 Jul 2002 11:42:45 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.pod
Message-Id: <20020725094245.4583C765EB@mail.ossp.org>
Date: Thu, 25 Jul 2002 11:42:45 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   25-Jul-2002 11:42:45
  Branch: HEAD                             Handle: 2002072510424400

  Modified files:
    ossp-pkg/fsl            fsl.pod

  Log:
    new l2 feature: allow empty stream (aka null channel)

  Summary:
    Revision    Changes     Path
    1.9         +2  -1      ossp-pkg/fsl/fsl.pod
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.pod
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 fsl.pod
  --- ossp-pkg/fsl/fsl.pod	24 Jul 2002 19:12:36 -0000	1.8
  +++ ossp-pkg/fsl/fsl.pod	25 Jul 2002 09:42:44 -0000	1.9
  @@ -101,7 +101,8 @@
   
   B<tree>           ::= B<stream>
                    
  -B<stream>         ::= B<channel>
  +B<stream>         ::= I<empty>
  +                 | B<channel>
                    | B<channel> '->' B<stream>
                    | B<channel> '->' '{' B<streams> '}'
   

From ossp-cvs-owner@ossp.org  Thu Jul 25 12:14:04 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E025F765E1; Thu, 25 Jul 2002 12:14:03 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.c fsl.pod fsl.sample.cfg
Message-Id: <20020725101403.E025F765E1@mail.ossp.org>
Date: Thu, 25 Jul 2002 12:14:03 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Jul-2002 12:14:03
  Branch: HEAD                             Handle: 2002072511140300

  Modified files:
    ossp-pkg/fsl            fsl.c fsl.pod fsl.sample.cfg

  Log:
    Fix a big security hole: the l2_spec() is a varargs function which gets
    a format string and variable arguments. In case only a fixed string is
    used we have to use "%s" as the format string or else "%x" in the string
    is treated like a formatter (and hence cause a segfault or whatever
    else if it tries to fetch args from the stack). This especially also no
    longer requires the formatters to be written %%X...

  Summary:
    Revision    Changes     Path
    1.22        +2  -2      ossp-pkg/fsl/fsl.c
    1.10        +2  -2      ossp-pkg/fsl/fsl.pod
    1.2         +12 -20     ossp-pkg/fsl/fsl.sample.cfg
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 fsl.c
  --- ossp-pkg/fsl/fsl.c	24 Jul 2002 15:29:01 -0000	1.21
  +++ ossp-pkg/fsl/fsl.c	25 Jul 2002 10:14:03 -0000	1.22
  @@ -338,7 +338,7 @@
               cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to register errno formatter %s(%d) for fsl\n", cp, l2rv); CU(1); }
           if ((l2rv = l2_channel_create(&ctx.l2_fslnch, ctx.l2_fslenv, "noop")) != L2_OK) {
               cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to create noop channel; %s(%d)\n for fsl", cp, l2rv); CU(1); }
  -        if ((l2rv = l2_spec(&ch, ctx.l2_fslenv, argl2spec)) != L2_OK) {
  +        if ((l2rv = l2_spec(&ch, ctx.l2_fslenv, "%s", argl2spec)) != L2_OK) {
               cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to create stream from spec %s(%d) for fsl\n", cp, l2rv); CU(1); }
           if ((l2rv = l2_channel_link(ctx.l2_fslnch, L2_LINK_CHILD, ch, NULL)) != L2_OK) {
               cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to link child channel %s(%d) for fsl\n", cp, l2rv); CU(1); }
  @@ -510,7 +510,7 @@
                       fsldebug(L2_LEVEL_DEBUG, "argident=%s, argmatch=%s, argl2spec=%s\n", argident, argmatch, argl2spec);
   
                       /* create L2 channel throuh spec and link into root channel */
  -                    if ((l2rv = l2_spec(&ch, ctx.l2_env, argl2spec)) != L2_OK) {
  +                    if ((l2rv = l2_spec(&ch, ctx.l2_env, "%s", argl2spec)) != L2_OK) {
                           cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to create stream from spec %s(%d)\n", cp, l2rv); CU(1); }
                       if ((l2rv = l2_channel_link(ctx.l2_nch, L2_LINK_CHILD, ch, NULL)) != L2_OK) {
                           cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to link child channel %s(%d)\n", cp, l2rv); CU(1); }
  Index: ossp-pkg/fsl/fsl.pod
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 fsl.pod
  --- ossp-pkg/fsl/fsl.pod	25 Jul 2002 09:42:44 -0000	1.9
  +++ ossp-pkg/fsl/fsl.pod	25 Jul 2002 10:14:03 -0000	1.10
  @@ -284,9 +284,9 @@
   
    ident sendmail/.* {
      debug:
  -     prefix(prefix="%%b %%d %%H:%%M:%%S <%%L> $1 [%%P]: ",
  +     prefix(prefix="%b %d %H:%M:%S <%L> $1 [%P]: ",
               timezone=local)
  -     -> file(path="sendmail.debug.log", append=0,perm=432)
  +     -> file(path="sendmail.debug.log", append=0, perm=432)
    };
   
   =head1 FILES
  Index: ossp-pkg/fsl/fsl.sample.cfg
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 fsl.sample.cfg
  --- ossp-pkg/fsl/fsl.sample.cfg	24 Jul 2002 07:57:04 -0000	1.1
  +++ ossp-pkg/fsl/fsl.sample.cfg	25 Jul 2002 10:14:03 -0000	1.2
  @@ -1,27 +1,19 @@
  -
  -    #
  -    # SAMPLE FAKESYSLOG CONFIGURATION FILE
  -    #
  +#
  +# SAMPLE FSL CONFIGURATION FILE
  +#
   
   ident (.*)a(.*)/(.*)p q{
  -    debug:
  -        prefix(prefix="%%b %%d %%H:%%M:%%S <%%L> $1 [%%P]: ",
  -        timezone=local)
  -        -> file(path="sendmail.debug.log", append=0,perm=432)
  -    };
  +    debug: prefix(prefix="%b %d %H:%M:%S <%L> $1[%P]: ", timezone=local)
  +    -> file(path="sendmail.debug.log", append=0, perm=432)
  +};
   
   ident mail/.* q{
  -    error:
  -        prefix(prefix="%%b %%d %%H:%%M:%%S <%%L> $1 [%%P]: ",
  -        timezone=local)
  -        -> file(path="mail.error.log", append=0,perm=432)
  -    };
  +    error: prefix(prefix="%b %d %H:%M:%S <%L> $1[%P]: ", timezone=local)
  +    -> file(path="mail.error.log", append=0, perm=432)
  +};
   
   ident news/.* q{
  -    warning:
  -        prefix(prefix="%%b %%d %%H:%%M:%%S <%%L> $1 [%%P]: ",
  -        timezone=local)
  -        -> file(path="news.warning.log", append=0,perm=432)
  -    };
  +    warning: prefix(prefix="%b %d %H:%M:%S <%L> $1[%P]: ", timezone=local)
  +    -> file(path="news.warning.log", append=0, perm=432)
  +};
   
  -# have a nice day

From ossp-cvs-owner@ossp.org  Thu Jul 25 14:28:55 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6799976551; Thu, 25 Jul 2002 14:28:55 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_prefix.c
Message-Id: <20020725122855.6799976551@mail.ossp.org>
Date: Thu, 25 Jul 2002 14:28:55 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Jul-2002 14:28:55
  Branch: HEAD                             Handle: 2002072513285500

  Modified files:
    ossp-pkg/l2             l2_ch_prefix.c

  Log:
    add support for hostname/nodename expansion via %N

  Summary:
    Revision    Changes     Path
    1.20        +12 -1      ossp-pkg/l2/l2_ch_prefix.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_prefix.c
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 l2_ch_prefix.c
  --- ossp-pkg/l2/l2_ch_prefix.c	2 Jan 2002 17:07:38 -0000	1.19
  +++ ossp-pkg/l2/l2_ch_prefix.c	25 Jul 2002 12:28:55 -0000	1.20
  @@ -30,8 +30,10 @@
   #include <time.h>
   #include <sys/types.h>
   #include <unistd.h>
  +#include <sys/utsname.h>
   
   #include "l2.h"
  +#include "l2_p.h"
   
   /* declare private channel configuration */
   typedef struct {
  @@ -94,6 +96,7 @@
       size_t nBuf;
       l2_level_t rv;
       int bSubst;
  +    struct utsname uts;
   
       cpSC = buf;             /* string current pointer */
       cpSE = buf+strlen(buf); /* string end pointer     */
  @@ -108,8 +111,16 @@
                       bSubst = TRUE;
                       break;
                   }
  +                case 'N': {
  +                    if (uname(&uts) == 0)
  +                        l2_util_sprintf(caBuf, sizeof(caBuf), uts.nodename);
  +                    else
  +                        l2_util_sprintf(caBuf, sizeof(caBuf), "localhost");
  +                    bSubst = TRUE;
  +                    break;
  +                }
                   case 'P': {
  -                    sprintf(caBuf, "%lu", (unsigned long)getpid());
  +                    l2_util_sprintf(caBuf, sizeof(caBuf), "%lu", (unsigned long)getpid());
                       bSubst = TRUE;
                       break;
                   }

From ossp-cvs-owner@ossp.org  Thu Jul 25 14:43:42 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 432AB765E1; Thu, 25 Jul 2002 14:43:42 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl README VERSION
Message-Id: <20020725124342.432AB765E1@mail.ossp.org>
Date: Thu, 25 Jul 2002 14:43:42 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Jul-2002 14:43:42
  Branch: HEAD                             Handle: 2002072513434100

  Modified files:
    ossp-pkg/fsl            README VERSION

  Log:
    bump version for release

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-pkg/fsl/README
    1.6         +1  -1      ossp-pkg/fsl/VERSION
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/README
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 README
  --- ossp-pkg/fsl/README	24 Jul 2002 15:35:31 -0000	1.4
  +++ ossp-pkg/fsl/README	25 Jul 2002 12:43:41 -0000	1.5
  @@ -5,7 +5,7 @@
     |_| |___/_|
                
     OSSP fsl - Faking Syslog Library
  -  Version 0.1.4 (24-Jul-2002)
  +  Version 0.1.5 (25-Jul-2002)
   
     ABSTRACT
   
  Index: ossp-pkg/fsl/VERSION
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 VERSION
  --- ossp-pkg/fsl/VERSION	24 Jul 2002 15:35:31 -0000	1.5
  +++ ossp-pkg/fsl/VERSION	25 Jul 2002 12:43:41 -0000	1.6
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP fsl (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP fsl, Version 0.1.4 (24-Jul-2002)
  +  This is OSSP fsl, Version 0.1.5 (25-Jul-2002)
   

From ossp-cvs-owner@ossp.org  Thu Jul 25 14:48:01 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B35D876551; Thu, 25 Jul 2002 14:48:01 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new news.txt ossp-web/pkg/lib/fsl index.wml ossp-...
Message-Id: <20020725124801.B35D876551@mail.ossp.org>
Date: Thu, 25 Jul 2002 14:48:01 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   25-Jul-2002 14:48:01
  Branch: HEAD                             Handle: 2002072513480001

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/fsl    index.wml

  Log:
    OSSP fsl 0.1.5

  Summary:
    Revision    Changes     Path
    1.13        +1  -0      ossp-web/new/news.txt
    1.2         +2  -2      ossp-web/pkg/lib/fsl/index.wml
    1.16        +1  -1      ossp-web/pkg/lib/index.wml
  ____________________________________________________________________________

  Index: ossp-web/new/news.txt
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 news.txt
  --- ossp-web/new/news.txt	13 Jul 2002 18:29:19 -0000	1.12
  +++ ossp-web/new/news.txt	25 Jul 2002 12:48:00 -0000	1.13
  @@ -1,3 +1,4 @@
  +25-Jul-2002: Released T<OSSP fsl> 0.1.5
   12-Jul-2002: Released T<GNU shtool> 1.6.1
   30-May-2002: Released T<OSSP lmtp2nntp> 1.2a5
   01-Apr-2002: Released L<OSSP str> 0.9.7
  Index: ossp-web/pkg/lib/fsl/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/lib/fsl/index.wml	19 Jul 2002 13:28:14 -0000	1.1
  +++ ossp-web/pkg/lib/fsl/index.wml	25 Jul 2002 12:48:01 -0000	1.2
  @@ -35,7 +35,7 @@
   
   <pkg_status
       stable="none"    stable_date="none"
  -    unstable="none"  unstable_date="none"
  +    unstable="0.1.5" unstable_date="23-Jul-2002"
   	done=95>
   
   <h2>Source</h2>
  @@ -45,5 +45,5 @@
       url=$(FTP_ROOT_URL)/pkg/lib/fsl/
       directory=$(FTP_ROOT_DIR)/pkg/lib/fsl/
       files="fsl-*.tar.gz" 
  -	stable="none" unstable="none">
  +	stable="none" unstable="fsl-0.1.5.tar.gz">
   	
  Index: ossp-web/pkg/lib/index.wml
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 index.wml
  --- ossp-web/pkg/lib/index.wml	19 Jul 2002 13:28:03 -0000	1.15
  +++ ossp-web/pkg/lib/index.wml	25 Jul 2002 12:48:00 -0000	1.16
  @@ -82,6 +82,6 @@
   			done=15 stable=none unstable=none>
     <pkg_item name="fsl" longname="OSSP fsl" type="lib"
               desc="Faked/Flexible Syslog"
  -			done=95 stable=none unstable=none>
  +			done=95 stable=none unstable=0.1.5>
   </pkg_list>
   

From ossp-cvs-owner@ossp.org  Thu Jul 25 14:48:16 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AFF33765EF; Thu, 25 Jul 2002 14:48:16 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl devtool.conf
Message-Id: <20020725124816.AFF33765EF@mail.ossp.org>
Date: Thu, 25 Jul 2002 14:48:16 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Jul-2002 14:48:16
  Branch: HEAD                             Handle: 2002072513481600

  Modified files:
    ossp-pkg/fsl            devtool.conf

  Log:
    fix tagging

  Summary:
    Revision    Changes     Path
    1.7         +1  -1      ossp-pkg/fsl/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/devtool.conf
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 devtool.conf
  --- ossp-pkg/fsl/devtool.conf	24 Jul 2002 10:39:19 -0000	1.6
  +++ ossp-pkg/fsl/devtool.conf	25 Jul 2002 12:48:16 -0000	1.7
  @@ -53,7 +53,7 @@
       cvs commit -m'bump version for release' VERSION README
   
   %tag
  -    V=`./shtool version -l txt -d short VERSION`
  +    V=`./shtool version -l txt -d short VERSION | sed -e 's;\.;_;g'`
       echo "+++ tagging CVS sources as FSL_${V}"
       cvs tag FSL_${V}
   

From ossp-cvs-owner@ossp.org  Thu Jul 25 15:33:01 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 528C7765E1; Thu, 25 Jul 2002 15:33:01 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_irc.c l2_ch_syslog.c
Message-Id: <20020725133301.528C7765E1@mail.ossp.org>
Date: Thu, 25 Jul 2002 15:33:01 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   25-Jul-2002 15:33:01
  Branch: HEAD                             Handle: 2002072514330000

  Modified files:
    ossp-pkg/l2             l2_ch_irc.c l2_ch_syslog.c

  Log:
    proposal to use getservbyname() or successor

  Summary:
    Revision    Changes     Path
    1.6         +1  -1      ossp-pkg/l2/l2_ch_irc.c
    1.30        +1  -1      ossp-pkg/l2/l2_ch_syslog.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_irc.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 l2_ch_irc.c
  --- ossp-pkg/l2/l2_ch_irc.c	2 Jan 2002 17:07:38 -0000	1.5
  +++ ossp-pkg/l2/l2_ch_irc.c	25 Jul 2002 13:33:00 -0000	1.6
  @@ -82,7 +82,7 @@
       cfg->cpChannel  = strdup("#l2");
       cfg->bJoin      = 1;
       cfg->cpHost     = NULL;
  -    cfg->cpPort     = strdup("6667");
  +    cfg->cpPort     = strdup("6667"); /*FIXME[thl] better use getservbyname()*/
       cfg->nTimeout   = 30;
       cfg->saaServer  = NULL;
       cfg->saServer   = NULL;
  Index: ossp-pkg/l2/l2_ch_syslog.c
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 l2_ch_syslog.c
  --- ossp-pkg/l2/l2_ch_syslog.c	2 Jan 2002 17:07:38 -0000	1.29
  +++ ossp-pkg/l2/l2_ch_syslog.c	25 Jul 2002 13:33:00 -0000	1.30
  @@ -134,7 +134,7 @@
       /* initialize configuration with reasonable defaults */
       cfg->szTarget      = strdup("local");
       cfg->szRemoteHost  = NULL;
  -    cfg->nRemotePort   = 514;
  +    cfg->nRemotePort   = 514; /*FIXME[thl] better use getservbyname()*/
       if (uname(&uts) == 0) {
           cfg->szLocalHost = strdup(uts.nodename);
           if ((cp = strchr(cfg->szLocalHost, '.')) != NULL)

From ossp-cvs-owner@ossp.org  Thu Jul 25 15:33:51 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 37857765E1; Thu, 25 Jul 2002 15:33:51 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.pod
Message-Id: <20020725133351.37857765E1@mail.ossp.org>
Date: Thu, 25 Jul 2002 15:33:51 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   25-Jul-2002 15:33:51
  Branch: HEAD                             Handle: 2002072514335000

  Modified files:
    ossp-pkg/fsl            fsl.pod

  Log:
    description of all available channels

  Summary:
    Revision    Changes     Path
    1.11        +160 -68    ossp-pkg/fsl/fsl.pod
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.pod
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 fsl.pod
  --- ossp-pkg/fsl/fsl.pod	25 Jul 2002 10:14:03 -0000	1.10
  +++ ossp-pkg/fsl/fsl.pod	25 Jul 2002 13:33:50 -0000	1.11
  @@ -159,79 +159,171 @@
   B<param_value>    ::= single-quoted, double-quoted
                      or unquoted text
   
  -Here is a table of available channels that lists their B<channel_name> and
  -B<param_names> including the type of each parameter.
  +Here is a description of all available channels. The table lists their
  +B<channel_name> prefixed with an 'o' or a 'f' indicating it's operating
  +as an output or a filter channel. All parameters are B<param_names>
  +listed, including the type of each parameter which is either a string
  +(STR) or integer (INT) and an 'm' or 'o' indicating the paramter is
  +optional or mandatory. Also, the default value for each paramter is
  +listed, if there is one.
  +
  +The "buffer" channel buffers messages poured in from upper channels.  It
  +flushes the messages down to the lower channels when the buffered space
  +exceeds the buffer size, when a given time interval is reached (0
  +disables this feature) or when a newly arrived message has a level that
  +matches the levelflush mask.
  +
  +  f buffer (INT size            o [bytes] =4096
  +            INT interval        o [sec]   =0 (disabled)
  +            INT levelflush      o [level] =0 (none)
  +            );
  +
  +The "fd" channel passes messages poured in from upper channels to
  +the open file identified by the given filedescriptor. Note that UNIX
  +usually alloctes 1 for STDOUT and 2 for STDERR.
  +
  +  o fd     (INT filedescriptor  m
  +            );
  +
  +The "file" channel opens a file at the given path and passes messages
  +poured in from upper channels to this file. If the file at the given
  +path already exists, additional data is either appended (append=1) or
  +the existing file is truncated (append=0). The desired permissions of
  +the file can be set. Note that due to a limitation of the current parser
  +only decimal numbers are accepted, so have fun doing octal to decimal
  +conversion. Here're some hints
  +
  +    rw-rw-rw- \0666 =438    rw-r--r-- \0644 =420
  +    rw-rw-r-- \0664 =436    rw-r----- \0640 =416
  +    rw-rw---- \0660 =432    rw------- \0600 =384
  +
  +  o file   (STR path            m
  +            INT append          o [0=truncate|1=append] =1
  +            INT perm            o [decimal]             =420
  +            );
  +
  +The "filter" channel filters messages poured in from upper channels. A
  +regex is used against the incoming message and the normal operation is
  +that only matching messages are passed down the tree. Setting negate
  +reverses the matching decision. Comparisons are case sensitive unless
  +nocase is set.
  +
  +  f filter (STR regex           m [PCRE]
  +            INT negate          o [0=normal,1=negate] =0
  +            INT nocase          o [0=case,1=nocase]   =0
  +            );
  +
  +The "irc" channel opens a connection to a given IRC channel and passes
  +messages poured in from upper channels to this IRC channel. If
  +configured, the message posted to IRC channel contains the progname for
  +easy identification of the sending host.
  +
  +  o irc    (STR progname        o [string]
  +            STR localhost       o [hostname|address] =nodename or "localhost"
  +            STR localuser       o [string]           =name or "uid#"num
  +            STR nickname        o [string]           =localuser
  +            STR username        o [string]           =localuser"@"localhost
  +            STR realname        o [string]           =username
  +            STR channel         o [string]           ="#l2"
  +            INT join            o [01]               =1 use JOIN/PART 
  +            STR host            m [hostname|address]
  +            STR port            o [tcpport]          =6667
  +            INT timeout         o [sec]              =30
  +            );
  +
  +The "noop" channel can be used to divert incoming messages to multiple
  +pathes down the tree. Otherwise is does not do anything put passing the
  +messages along. It has no configuration parameters.
  +
  +  f noop   ()
  +
  +The "null" channel discards any incoming messages and creates no output
  +at all. It has no configuration parameters.
  +
  +  o null   ()
  +
  +The "pipe" channel executes a given command and pipes messages poured in
  +from upper channels to the commands stdin. The command can be executed
  +directly or run by "/bin/sh -c". The lifetime of the connection can be
  +adjusted by setting runtime to either "cont" for a continuous
  +pipethrough with command restart after termination or "one" for oneshot
  +where the connection is broken when the command terminates.
  +
  +  o pipe   (STR execmode        m [direct|shell]
  +            STR runtime         m [cont|one]
  +            STR path            m [dir/file]
  +            );
  +
  +The "prefix" channel prefixes messages poured in from upper channels.
  +The format string may contain variables prefixed with a '%'. These are
  +expanded using the internal formatters
  +
  +    L loglevel
  +    N nodename
  +    P pid
  +
  +then expansion continues to use application specific formatters where
  +FSL offers
  +
  +    D dump
  +    S string
  +    m errno
  +
  +and finally remaining variables are expaned by strftime(3).
  +
  +  f prefix (STR prefix          m [string]
  +            STR timezone        o [local|utc] =local
  +            );
  +
  +The "smtp" channel forwards messages poured in from upper channels to
  +remote hosts using the Simple Mail Transfer Protocol. It is possible to
  +specify the local address to bind to which is useful for multihomed
  +hosts.
  +
  +  o smtp   (STR progname        o [string]
  +            STR localhost       o [hostname|address] =nodename or "localhost"
  +            STR localuser       o [string]           =name or "uid#"num
  +            STR from            o [string]           =localuser"@"localhost
  +            STR rcpt            m [string]
  +            STR subject         o [string]           ="[L2] ..."
  +            STR host            m [hostname|address]
  +            STR port            o [tcpport]          ="smtp"
  +            INT timeout         o [sec]              =30
  +            );
  +
  +The "socket" channel forwards messages poured in from upper channels to
  +daemons on remote hosts using raw UDP communication or TCP connections.
  +
  +  o socket (STR proto           o [udp|tcp] =tcp
  +            STR host            m [hostname|address]
  +            STR port            m [udpport|tcpport]
  +            INT timeout         o [sec] =30
  +            );
  +
  +The "syslog" channel forwards messages poured in from upper channels
  +either to the local syslog or passes it to a remote syslogd.  It is
  +possible to specify the local address to bind to which is useful for
  +multihomed hosts.
  +
  +  o syslog (STR target          o [local|remote]     =local
  +            STR remotehost      o [hostname|address]
  +            INT remoteport      o [udpport]          =514
  +            STR localhost       o [hostname|address] =nodename or localhost
  +            STR facility        o [facility]         ="user"
  +            STR ident           m [string]
  +            INT logpid          o [0=no,1=yes]       =1
  +            );
   
  -FIXME mandatories, defaults, output vs. filterchannels
  -
  -    buffer (INT size,
  -            INT interval,
  -            INT levelflush);
  -
  -    fd     (INT filedescriptor);
  -
  -    file   (STR path,
  -            INT append,
  -            INT perm);
  -
  -    filter (STR regex,
  -            INT negate,
  -            INT nocase);
  -
  -    irc    (STR progname,
  -            STR localhost,
  -            STR localuser,
  -            STR nickname,
  -            STR username,
  -            STR realname,
  -            STR channel,
  -            INT join,
  -            STR host,
  -            STR port,
  -            INT timeout);
  -
  -    noop   ()
  -
  -    null   ()
  -
  -    pipe   (STR execmode,
  -            STR runtime,
  -            STR path);
  -
  -    prefix (STR prefix,
  -            STR timezone);
  -
  -    smtp   (STR progname,
  -            STR localhost,
  -            STR localuser,
  -            STR from,
  -            STR rcpt,
  -            STR subject,
  -            STR host,
  -            STR port,
  -            INT timeout);
  -
  -    socket (STR proto,
  -            STR host,
  -            STR port,
  -            INT timeout);
  -
  -    syslog (STR target,
  -            STR remotehost,
  -            INT remoteport,
  -            STR localhost,
  -            STR facility,
  -            STR ident,
  -            INT logpid);
  -
  -
  -    EXAMPLE for a very simple l2spec writing to STDERR (FD#2)
  +    EXAMPLE
  +    - for a very simple l2spec writing everything to STDERR (FD#2)
   
       fd(filedescriptor=2)
   
  -    EXAMPLE for a simple l2spec writing to a file
  +    EXAMPLE
  +    - for a simple l2spec writing notices and more important
  +    messages to a file
   
  -    file(path="/var/log/file")
  +    notice: file(path="/var/log/file")
   
       EXAMPLE for a very complex l2spec
   

From ossp-cvs-owner@ossp.org  Thu Jul 25 16:05:58 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EB16D765E1; Thu, 25 Jul 2002 16:05:57 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.c
Message-Id: <20020725140557.EB16D765E1@mail.ossp.org>
Date: Thu, 25 Jul 2002 16:05:57 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   25-Jul-2002 16:05:57
  Branch: HEAD                             Handle: 2002072515055700

  Modified files:
    ossp-pkg/fsl            fsl.c

  Log:
    improve tracing message when hunting for sections

  Summary:
    Revision    Changes     Path
    1.23        +7  -1      ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 fsl.c
  --- ossp-pkg/fsl/fsl.c	25 Jul 2002 10:14:03 -0000	1.22
  +++ ossp-pkg/fsl/fsl.c	25 Jul 2002 14:05:57 -0000	1.23
  @@ -495,7 +495,13 @@
                       fsldebug(L2_LEVEL_ERROR, "pcre_study() failed with error %s\n", cpError); CU(1); }
   
                   nMatch = pcre_exec(pcreRegex, pcreExtra, cpISF, strlen(cpISF), 0, 0, ovec, OVECSIZE);
  -                fsldebug(L2_LEVEL_TRACE, "found %2d matches when \"%s\" is used against \"%s\"\n", nMatch, argmatch, cpISF);
  +                if (nMatch < 0)
  +                    fsldebug(L2_LEVEL_TRACE, "matching ident/facility \"%s\" against section \"%s\" failed.\n", cpISF, argmatch);
  +                else
  +                    if (nMatch == 0)
  +                        fsldebug(L2_LEVEL_TRACE, "matching ident/facility \"%s\" against section \"%s\" succeeded, found $0\n", cpISF, argmatch);
  +                    else
  +                        fsldebug(L2_LEVEL_TRACE, "matching ident/facility \"%s\" against section \"%s\" succeeded, found $0...$%d\n", cpISF, argmatch, (nMatch-1) > 9 ? 9 : (nMatch-1));
                   if (nMatch >= 1) {
                       pcre_get_substring_list(cpISF, ovec, nMatch, &acpMatch);
                       if (acpMatch != NULL)

From ossp-cvs-owner@ossp.org  Thu Jul 25 16:14:25 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F2D57765E1; Thu, 25 Jul 2002 16:14:24 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.c
Message-Id: <20020725141424.F2D57765E1@mail.ossp.org>
Date: Thu, 25 Jul 2002 16:14:24 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   25-Jul-2002 16:14:24
  Branch: HEAD                             Handle: 2002072515142400

  Modified files:
    ossp-pkg/fsl            fsl.c

  Log:
    relocate pcre static vector size definition

  Summary:
    Revision    Changes     Path
    1.24        +3  -1      ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 fsl.c
  --- ossp-pkg/fsl/fsl.c	25 Jul 2002 14:05:57 -0000	1.23
  +++ ossp-pkg/fsl/fsl.c	25 Jul 2002 14:14:24 -0000	1.24
  @@ -50,6 +50,9 @@
   #include "cfg.h"
   #include "pcre.h"
   
  +/* pcre static vector size */
  +#define OVECSIZE 30
  +
   #ifndef LOG_PRIMASK
   #define LOG_PRIMASK (LOG_EMERG|LOG_ALERT|LOG_CRIT|LOG_ERR|LOG_WARNING|LOG_NOTICE|LOG_INFO|LOG_DEBUG)
   #endif
  @@ -303,7 +306,6 @@
       char *cpIdent;
       char *cpFacility;
       char *cpISF;
  -#define OVECSIZE 30 /*FIXME find a good place for this*/
       int ovec[OVECSIZE];
       const char   **acpMatch;
       l2_channel_t *ch; /* scratch variable */

From ossp-cvs-owner@ossp.org  Thu Jul 25 16:15:55 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8E85F767D1; Thu, 25 Jul 2002 16:15:55 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.c
Message-Id: <20020725141555.8E85F767D1@mail.ossp.org>
Date: Thu, 25 Jul 2002 16:15:55 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   25-Jul-2002 16:15:55
  Branch: HEAD                             Handle: 2002072515155400

  Modified files:
    ossp-pkg/fsl            fsl.c

  Log:
    currently there are no extension planned which would require a greater or dynamic number

  Summary:
    Revision    Changes     Path
    1.25        +1  -1      ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 fsl.c
  --- ossp-pkg/fsl/fsl.c	25 Jul 2002 14:14:24 -0000	1.24
  +++ ossp-pkg/fsl/fsl.c	25 Jul 2002 14:15:54 -0000	1.25
  @@ -295,7 +295,7 @@
       cfg_node_type_t  cfgtype;
       int              cfgnumc;
       int              cfgnume;
  -    char *cfgargtoka[3]; /*FIXME hardcoded maximum number of arguments */
  +    char *cfgargtoka[3];
       char *cfgargtok;
       char *argident;
       char *argmatch;

From ossp-cvs-owner@ossp.org  Thu Jul 25 17:00:31 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2008E767DB; Thu, 25 Jul 2002 17:00:31 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.c
Message-Id: <20020725150031.2008E767DB@mail.ossp.org>
Date: Thu, 25 Jul 2002 17:00:31 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   25-Jul-2002 17:00:30
  Branch: HEAD                             Handle: 2002072516002900

  Modified files:
    ossp-pkg/fsl            fsl.c

  Log:
    handle logopt; implement LOG_NDELAY

  Summary:
    Revision    Changes     Path
    1.26        +36 -10     ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 fsl.c
  --- ossp-pkg/fsl/fsl.c	25 Jul 2002 14:15:54 -0000	1.25
  +++ ossp-pkg/fsl/fsl.c	25 Jul 2002 15:00:29 -0000	1.26
  @@ -176,13 +176,17 @@
       l2_channel_t *l2_nch;
       levelmap_t   *levelmap;
       int           maskpri;
  +    int           logopt;
  +    int           delayopen;
   } ctx = { 
       NULL,
       NULL,
       NULL,
       NULL,
       NULL,
  -    LOG_PRIMASK
  +    LOG_PRIMASK,
  +    0,
  +    FALSE
   };
   
   static void fsldebug(l2_level_t level, const char *message, ...)
  @@ -321,8 +325,6 @@
       /* properly handle repeated execution */
       closelog();
   
  -    /* info: ident, facility; trace: configmatching; debug: traversal */
  -
       /* create L2 environment for fsl itself */
       argl2spec = getenv("FSL_DEBUG");
       if (argl2spec == NULL)
  @@ -349,8 +351,14 @@
           fsldebug(L2_LEVEL_TRACE, "captured openlog(ident=\"%s\", logopt=0x%.8lx, facility=0x%.8lx)", ident, logopt, facility);
       }
   
  -    /*FIXME currently we completely ignore logopt LOG_CONS, LOG_NDELAY, LOG_PERROR, LOG_PID
  -    */
  +    /* remember logopt and handle unsupported values */
  +    ctx.logopt = logopt;
  +    if (logopt & LOG_CONS)
  +        fsldebug(L2_LEVEL_WARNING, "ignored unsupported logopt LOG_CONS");
  +    if (logopt & LOG_PERROR)
  +        fsldebug(L2_LEVEL_WARNING, "ignored unsupported logopt LOG_PERROR, use l2spec channel \"fd(filedescriptor=2)\" to emulate");
  +    if (logopt & LOG_PID)
  +        fsldebug(L2_LEVEL_WARNING, "ignored unsupported logopt PID, use l2spec formatter %%P in prefix channel to emulate");
   
       /* create default sysloglevel to l2_level mapping */
       fsldebug(L2_LEVEL_DEBUG, "create default sysloglevel to l2_level mapping\n");
  @@ -556,10 +564,15 @@
           if ((cfgrv = cfg_node_get(cfg, cfgdir, CFG_NODE_ATTR_RBROTH, &cfgdir)) != CFG_OK) {
               (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_get(CFG_NODE_ATTR_RBROTH) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
       }
  -    if ((l2rv = l2_channel_open(ctx.l2_nch)) != L2_OK) {
  -        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to open channel stream %s(%d)\n", cp, l2rv); CU(1); }
  -
  -    ctx.maskpri = LOG_UPTO(LOG_DEBUG);
  +    if (logopt & LOG_NDELAY) {
  +        ctx.delayopen = TRUE;
  +        fsldebug(L2_LEVEL_TRACE, "logopt LOG_NDELAY delays open of L2 channel tree until first message is being logged");
  +    }
  +    else {
  +        if ((l2rv = l2_channel_open(ctx.l2_nch)) != L2_OK) {
  +            cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to open channel stream %s(%d) immediately\n", cp, l2rv); CU(1); }
  +        fsldebug(L2_LEVEL_TRACE, "logging succeeded to open channel stream immediately");
  +    }
   
       CU(0);
   CUS:
  @@ -602,6 +615,9 @@
           free(ctx.levelmap);
           ctx.levelmap = NULL;
       }
  +    ctx.maskpri = LOG_PRIMASK;
  +    ctx.logopt = 0;
  +    ctx.delayopen = FALSE;
   }
   
   int setlogmask(int maskpri)
  @@ -639,10 +655,20 @@
       int i;
       l2_result_t l2rv;
       char *cp;
  -
  +    
       /* check for previous proper initialization */
       if (ctx.l2_nch == NULL)
           return;
  +
  +    /* check for delayed open */
  +    if ((ctx.logopt & LOG_NDELAY) && (ctx.delayopen == TRUE)) {
  +        if ((l2rv = l2_channel_open(ctx.l2_nch)) != L2_OK) {
  +            cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to open channel stream %s(%d) delayed\n", cp, l2rv);
  +            closelog();
  +        }
  +        fsldebug(L2_LEVEL_TRACE, "logging succeeded to open channel stream delayed");
  +        ctx.delayopen = FALSE;
  +    }
   
       /* strip off facility */
       priority &= LOG_PRIMASK;

From ossp-cvs-owner@ossp.org  Thu Jul 25 17:02:13 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 97D14765E1; Thu, 25 Jul 2002 17:02:13 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.c
Message-Id: <20020725150213.97D14765E1@mail.ossp.org>
Date: Thu, 25 Jul 2002 17:02:13 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   25-Jul-2002 17:02:13
  Branch: HEAD                             Handle: 2002072516021300

  Modified files:
    ossp-pkg/fsl            fsl.c

  Log:
    we do not need this but it might break the timer function of the buffer channel

  Summary:
    Revision    Changes     Path
    1.27        +0  -2      ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 fsl.c
  --- ossp-pkg/fsl/fsl.c	25 Jul 2002 15:00:29 -0000	1.26
  +++ ossp-pkg/fsl/fsl.c	25 Jul 2002 15:02:13 -0000	1.27
  @@ -382,8 +382,6 @@
           cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to register string formatter %s(%d)\n", cp, l2rv); CU(1); }
       if ((l2rv = l2_env_formatter(ctx.l2_env, 'm', l2_util_fmt_errno, NULL)) != L2_OK) {
           cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to register errno formatter %s(%d)\n", cp, l2rv); CU(1); }
  -    if ((l2rv = l2_env_settimer(ctx.l2_env, 20)) != L2_OK) { /*FIXME do we need this?*/
  -        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "failed to configure timer %s(%d)\n", cp, l2rv); CU(1); }
       if ((l2rv = l2_channel_create(&ctx.l2_nch, ctx.l2_env, "noop")) != L2_OK) {
           cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to create noop channel; %s(%d)\n", cp, l2rv); CU(1); }
   

From ossp-cvs-owner@ossp.org  Thu Jul 25 17:06:52 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 43E2C765E1; Thu, 25 Jul 2002 17:06:52 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.c
Message-Id: <20020725150652.43E2C765E1@mail.ossp.org>
Date: Thu, 25 Jul 2002 17:06:52 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Jul-2002 17:06:52
  Branch: HEAD                             Handle: 2002072516065100

  Modified files:
    ossp-pkg/fsl            fsl.c

  Log:
    fix, fix, fix

  Summary:
    Revision    Changes     Path
    1.28        +10 -6      ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 fsl.c
  --- ossp-pkg/fsl/fsl.c	25 Jul 2002 15:02:13 -0000	1.27
  +++ ossp-pkg/fsl/fsl.c	25 Jul 2002 15:06:51 -0000	1.28
  @@ -373,17 +373,21 @@
   
       /* create L2 environment for main application */
       if ((l2rv = l2_env_create(&ctx.l2_env)) != L2_OK) {
  -        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "failed to create L2 environment (%d)\n", l2rv); CU(1); }
  +        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "failed to create L2 environment: (%d)\n", l2rv); CU(1); }
       if ((l2rv = l2_env_levels(ctx.l2_env, L2_LEVEL_ALL, L2_LEVEL_NONE)) != L2_OK) {
  -        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to set global logging level defaults %s(%d)\n", cp, l2rv); CU(1); }
  +        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to set global logging level defaults: %s(%d)\n", cp, l2rv); CU(1); }
       if ((l2rv = l2_env_formatter(ctx.l2_env, 'D', l2_util_fmt_dump, NULL)) != L2_OK) {
  -        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to register dump formatter %s(%d)\n", cp, l2rv); CU(1); }
  +        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to register dump formatter: %s(%d)\n", cp, l2rv); CU(1); }
       if ((l2rv = l2_env_formatter(ctx.l2_env, 'S', l2_util_fmt_string, NULL)) != L2_OK) {
  -        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to register string formatter %s(%d)\n", cp, l2rv); CU(1); }
  +        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to register string formatter: %s(%d)\n", cp, l2rv); CU(1); }
       if ((l2rv = l2_env_formatter(ctx.l2_env, 'm', l2_util_fmt_errno, NULL)) != L2_OK) {
  -        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to register errno formatter %s(%d)\n", cp, l2rv); CU(1); }
  +        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to register errno formatter: %s(%d)\n", cp, l2rv); CU(1); }
  +#if 0
  +    if ((l2rv = l2_env_settimer(ctx.l2_env, 20)) != L2_OK) { /*FIXME do we need this? -- RSE: no! */
  +        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "failed to configure timer: %s(%d)\n", cp, l2rv); CU(1); }
  +#endif
       if ((l2rv = l2_channel_create(&ctx.l2_nch, ctx.l2_env, "noop")) != L2_OK) {
  -        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to create noop channel; %s(%d)\n", cp, l2rv); CU(1); }
  +        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to create noop channel: %s(%d)\n", cp, l2rv); CU(1); }
   
       /* create IdentSlashFacility */
       if ((cpIdent = strdup((ident != NULL) ? ident : "unknown")) == NULL) {

From ossp-cvs-owner@ossp.org  Thu Jul 25 17:07:02 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1C70476966; Thu, 25 Jul 2002 17:07:02 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl README VERSION
Message-Id: <20020725150702.1C70476966@mail.ossp.org>
Date: Thu, 25 Jul 2002 17:07:02 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Jul-2002 17:07:02
  Branch: HEAD                             Handle: 2002072516070100

  Modified files:
    ossp-pkg/fsl            README VERSION

  Log:
    bump version for release

  Summary:
    Revision    Changes     Path
    1.6         +1  -1      ossp-pkg/fsl/README
    1.7         +1  -1      ossp-pkg/fsl/VERSION
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/README
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 README
  --- ossp-pkg/fsl/README	25 Jul 2002 12:43:41 -0000	1.5
  +++ ossp-pkg/fsl/README	25 Jul 2002 15:07:01 -0000	1.6
  @@ -5,7 +5,7 @@
     |_| |___/_|
                
     OSSP fsl - Faking Syslog Library
  -  Version 0.1.5 (25-Jul-2002)
  +  Version 0.1.6 (25-Jul-2002)
   
     ABSTRACT
   
  Index: ossp-pkg/fsl/VERSION
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 VERSION
  --- ossp-pkg/fsl/VERSION	25 Jul 2002 12:43:41 -0000	1.6
  +++ ossp-pkg/fsl/VERSION	25 Jul 2002 15:07:01 -0000	1.7
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP fsl (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP fsl, Version 0.1.5 (25-Jul-2002)
  +  This is OSSP fsl, Version 0.1.6 (25-Jul-2002)
   

From ossp-cvs-owner@ossp.org  Thu Jul 25 17:21:32 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8E481765E5; Thu, 25 Jul 2002 17:21:32 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.c
Message-Id: <20020725152132.8E481765E5@mail.ossp.org>
Date: Thu, 25 Jul 2002 17:21:32 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   25-Jul-2002 17:21:32
  Branch: HEAD                             Handle: 2002072516213200

  Modified files:
    ossp-pkg/fsl            fsl.c

  Log:
    FIXME removed; solaris does not have LOG_PERROR

  Summary:
    Revision    Changes     Path
    1.29        +2  -4      ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 fsl.c
  --- ossp-pkg/fsl/fsl.c	25 Jul 2002 15:06:51 -0000	1.28
  +++ ossp-pkg/fsl/fsl.c	25 Jul 2002 15:21:32 -0000	1.29
  @@ -355,8 +355,10 @@
       ctx.logopt = logopt;
       if (logopt & LOG_CONS)
           fsldebug(L2_LEVEL_WARNING, "ignored unsupported logopt LOG_CONS");
  +#ifdef LOG_PERROR
       if (logopt & LOG_PERROR)
           fsldebug(L2_LEVEL_WARNING, "ignored unsupported logopt LOG_PERROR, use l2spec channel \"fd(filedescriptor=2)\" to emulate");
  +#endif
       if (logopt & LOG_PID)
           fsldebug(L2_LEVEL_WARNING, "ignored unsupported logopt PID, use l2spec formatter %%P in prefix channel to emulate");
   
  @@ -382,10 +384,6 @@
           cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to register string formatter: %s(%d)\n", cp, l2rv); CU(1); }
       if ((l2rv = l2_env_formatter(ctx.l2_env, 'm', l2_util_fmt_errno, NULL)) != L2_OK) {
           cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to register errno formatter: %s(%d)\n", cp, l2rv); CU(1); }
  -#if 0
  -    if ((l2rv = l2_env_settimer(ctx.l2_env, 20)) != L2_OK) { /*FIXME do we need this? -- RSE: no! */
  -        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "failed to configure timer: %s(%d)\n", cp, l2rv); CU(1); }
  -#endif
       if ((l2rv = l2_channel_create(&ctx.l2_nch, ctx.l2_env, "noop")) != L2_OK) {
           cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to create noop channel: %s(%d)\n", cp, l2rv); CU(1); }
   

From ossp-cvs-owner@ossp.org  Thu Jul 25 17:23:28 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F3EF5765E5; Thu, 25 Jul 2002 17:23:27 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl README VERSION
Message-Id: <20020725152327.F3EF5765E5@mail.ossp.org>
Date: Thu, 25 Jul 2002 17:23:27 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Jul-2002 17:23:27
  Branch: HEAD                             Handle: 2002072516232700

  Modified files:
    ossp-pkg/fsl            README VERSION

  Log:
    bump version for release

  Summary:
    Revision    Changes     Path
    1.7         +1  -1      ossp-pkg/fsl/README
    1.8         +1  -1      ossp-pkg/fsl/VERSION
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/README
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 README
  --- ossp-pkg/fsl/README	25 Jul 2002 15:07:01 -0000	1.6
  +++ ossp-pkg/fsl/README	25 Jul 2002 15:23:27 -0000	1.7
  @@ -5,7 +5,7 @@
     |_| |___/_|
                
     OSSP fsl - Faking Syslog Library
  -  Version 0.1.6 (25-Jul-2002)
  +  Version 0.1.7 (25-Jul-2002)
   
     ABSTRACT
   
  Index: ossp-pkg/fsl/VERSION
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 VERSION
  --- ossp-pkg/fsl/VERSION	25 Jul 2002 15:07:01 -0000	1.7
  +++ ossp-pkg/fsl/VERSION	25 Jul 2002 15:23:27 -0000	1.8
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP fsl (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP fsl, Version 0.1.6 (25-Jul-2002)
  +  This is OSSP fsl, Version 0.1.7 (25-Jul-2002)
   

From ossp-cvs-owner@ossp.org  Thu Jul 25 18:28:44 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 314A4765E5; Thu, 25 Jul 2002 18:28:44 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.c
Message-Id: <20020725162844.314A4765E5@mail.ossp.org>
Date: Thu, 25 Jul 2002 18:28:44 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Jul-2002 18:28:44
  Branch: HEAD                             Handle: 2002072517284300

  Modified files:
    ossp-pkg/fsl            fsl.c

  Log:
    fix default log mask

  Summary:
    Revision    Changes     Path
    1.30        +4  -3      ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 fsl.c
  --- ossp-pkg/fsl/fsl.c	25 Jul 2002 15:21:32 -0000	1.29
  +++ ossp-pkg/fsl/fsl.c	25 Jul 2002 16:28:43 -0000	1.30
  @@ -184,7 +184,7 @@
       NULL,
       NULL,
       NULL,
  -    LOG_PRIMASK,
  +    LOG_UPTO(LOG_DEBUG),
       0,
       FALSE
   };
  @@ -615,9 +615,10 @@
           free(ctx.levelmap);
           ctx.levelmap = NULL;
       }
  -    ctx.maskpri = LOG_PRIMASK;
  +    ctx.maskpri = LOG_UPTO(LOG_DEBUG);
       ctx.logopt = 0;
       ctx.delayopen = FALSE;
  +    return;
   }
   
   int setlogmask(int maskpri)
  @@ -672,7 +673,7 @@
   
       /* strip off facility */
       priority &= LOG_PRIMASK;
  -    fsldebug(L2_LEVEL_DEBUG, "prioriy  =0x%.8lx, ctx.maskpri=0x%.8lx  ", (unsigned long)priority, (unsigned long)ctx.maskpri);
  +    fsldebug(L2_LEVEL_DEBUG, "priority =0x%.8lx, ctx.maskpri=0x%.8lx  ", (unsigned long)priority, (unsigned long)ctx.maskpri);
   
       /* check against maskpri */
       if ((LOG_MASK(priority) & ctx.maskpri) == 0) {

From ossp-cvs-owner@ossp.org  Thu Jul 25 18:28:53 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4175D767E6; Thu, 25 Jul 2002 18:28:53 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl README VERSION
Message-Id: <20020725162853.4175D767E6@mail.ossp.org>
Date: Thu, 25 Jul 2002 18:28:53 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Jul-2002 18:28:53
  Branch: HEAD                             Handle: 2002072517285200

  Modified files:
    ossp-pkg/fsl            README VERSION

  Log:
    bump version for release

  Summary:
    Revision    Changes     Path
    1.8         +1  -1      ossp-pkg/fsl/README
    1.9         +1  -1      ossp-pkg/fsl/VERSION
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/README
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 README
  --- ossp-pkg/fsl/README	25 Jul 2002 15:23:27 -0000	1.7
  +++ ossp-pkg/fsl/README	25 Jul 2002 16:28:52 -0000	1.8
  @@ -5,7 +5,7 @@
     |_| |___/_|
                
     OSSP fsl - Faking Syslog Library
  -  Version 0.1.7 (25-Jul-2002)
  +  Version 0.1.8 (25-Jul-2002)
   
     ABSTRACT
   
  Index: ossp-pkg/fsl/VERSION
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 VERSION
  --- ossp-pkg/fsl/VERSION	25 Jul 2002 15:23:27 -0000	1.8
  +++ ossp-pkg/fsl/VERSION	25 Jul 2002 16:28:52 -0000	1.9
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP fsl (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP fsl, Version 0.1.7 (25-Jul-2002)
  +  This is OSSP fsl, Version 0.1.8 (25-Jul-2002)
   

From ossp-cvs-owner@ossp.org  Fri Jul 26 11:25:56 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AF41F765E7; Fri, 26 Jul 2002 11:25:55 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/act index.wml ossp-web/pkg/lib/cfg index....
Message-Id: <20020726092555.AF41F765E7@mail.ossp.org>
Date: Fri, 26 Jul 2002 11:25:55 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   26-Jul-2002 11:25:55
  Branch: HEAD                             Handle: 2002072610255302

  Modified files:
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/act    index.wml
    ossp-web/pkg/lib/cfg    index.wml
    ossp-web/pkg/lib/fsl    index.wml

  Log:
    update percents

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-web/pkg/lib/act/index.wml
    1.4         +1  -1      ossp-web/pkg/lib/cfg/index.wml
    1.3         +2  -2      ossp-web/pkg/lib/fsl/index.wml
    1.17        +2  -2      ossp-web/pkg/lib/index.wml
  ____________________________________________________________________________

  Index: ossp-web/pkg/lib/act/index.wml
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 index.wml
  --- ossp-web/pkg/lib/act/index.wml	13 Jul 2002 20:09:22 -0000	1.3
  +++ ossp-web/pkg/lib/act/index.wml	26 Jul 2002 09:25:54 -0000	1.4
  @@ -19,7 +19,7 @@
   <pkg_status
       stable="none"    stable_date="none"
       unstable="none"  unstable_date="none"
  -	done=15>
  +	done=25>
   
   <h2>Source</h2>
   
  Index: ossp-web/pkg/lib/cfg/index.wml
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 index.wml
  --- ossp-web/pkg/lib/cfg/index.wml	13 Jul 2002 20:09:24 -0000	1.3
  +++ ossp-web/pkg/lib/cfg/index.wml	26 Jul 2002 09:25:54 -0000	1.4
  @@ -23,7 +23,7 @@
   <pkg_status
       stable="none"    stable_date="none"
       unstable="none"  unstable_date="none"
  -	done=15>
  +	done=80>
   
   <h2>Source</h2>
   
  Index: ossp-web/pkg/lib/fsl/index.wml
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 index.wml
  --- ossp-web/pkg/lib/fsl/index.wml	25 Jul 2002 12:48:01 -0000	1.2
  +++ ossp-web/pkg/lib/fsl/index.wml	26 Jul 2002 09:25:55 -0000	1.3
  @@ -35,7 +35,7 @@
   
   <pkg_status
       stable="none"    stable_date="none"
  -    unstable="0.1.5" unstable_date="23-Jul-2002"
  +    unstable="0.1.8" unstable_date="25-Jul-2002"
   	done=95>
   
   <h2>Source</h2>
  @@ -45,5 +45,5 @@
       url=$(FTP_ROOT_URL)/pkg/lib/fsl/
       directory=$(FTP_ROOT_DIR)/pkg/lib/fsl/
       files="fsl-*.tar.gz" 
  -	stable="none" unstable="fsl-0.1.5.tar.gz">
  +	stable="none" unstable="fsl-0.1.8.tar.gz">
   	
  Index: ossp-web/pkg/lib/index.wml
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 index.wml
  --- ossp-web/pkg/lib/index.wml	25 Jul 2002 12:48:00 -0000	1.16
  +++ ossp-web/pkg/lib/index.wml	26 Jul 2002 09:25:53 -0000	1.17
  @@ -34,7 +34,7 @@
   			done=95 stable=none unstable=0.9.0>
     <pkg_item name="act" longname="OSSP act" type="lib"
               desc="Abstract Container Types"
  -			done=15 stable=none unstable=none>
  +			done=25 stable=none unstable=none>
     <pkg_item name="cache" longname="OSSP cache" type="lib"
               desc="User-Space Cache"
   			done=15 stable=none unstable=none>
  @@ -70,7 +70,7 @@
   			done=50 stable=none unstable=none>
     <pkg_item name="cfg" longname="OSSP cfg" type="lib"
               desc="Configuration Parsing"
  -			done=15 stable=none unstable=none>
  +			done=80 stable=none unstable=none>
     <pkg_item name="adns" longname="OSSP adns" type="lib" derived=yes
               desc="Asynchronous DNS Resolving"
   			done=100 stable=none unstable=none>

From ossp-cvs-owner@ossp.org  Fri Jul 26 11:56:42 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 387DE765E7; Fri, 26 Jul 2002 11:56:42 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm ChangeLog THANKS aclocal.m4
Message-Id: <20020726095642.387DE765E7@mail.ossp.org>
Date: Fri, 26 Jul 2002 11:56:42 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Jul-2002 11:56:42
  Branch: HEAD                             Handle: 2002072610564100

  Modified files:
    ossp-pkg/mm             ChangeLog THANKS aclocal.m4

  Log:
    flush pending changes

  Summary:
    Revision    Changes     Path
    1.28        +3  -2      ossp-pkg/mm/ChangeLog
    1.11        +1  -0      ossp-pkg/mm/THANKS
    1.23        +1  -1      ossp-pkg/mm/aclocal.m4
  ____________________________________________________________________________

  Index: ossp-pkg/mm/ChangeLog
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 ChangeLog
  --- ossp-pkg/mm/ChangeLog	4 May 2001 19:31:17 -0000	1.27
  +++ ossp-pkg/mm/ChangeLog	26 Jul 2002 09:56:41 -0000	1.28
  @@ -14,7 +14,7 @@
       | |_| |
     __|_(_)_|__________________________________________________________
   
  - Changes between 1.1.3 and 1.1.4 (01-Jul-2000 to xx-Jan-2001)
  + Changes between 1.1.3 and 1.2.0 (01-Jul-2000 to 26-Jul-2002)
   
     *) Upgraded to GNU shtool 1.5.3
        [Ralf S. Engelschall]
  @@ -43,7 +43,8 @@
        [Alexander Farber <farber@cpan.org>]
   
     *) Added required "(void *)" cast to MAP_FAILED in Autoconf stuff.
  -     [Albert Chin-A-Young <china@thewrittenword.com>]
  +     [Albert Chin-A-Young <china@thewrittenword.com>, 
  +     Joe Orton <jorton@redhat.com>]
   
    Changes between 1.1.2 and 1.1.3 (21-May-2000 to 01-Jul-2000)
   
  Index: ossp-pkg/mm/THANKS
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 THANKS
  --- ossp-pkg/mm/THANKS	29 Jan 2001 20:04:54 -0000	1.10
  +++ ossp-pkg/mm/THANKS	26 Jul 2002 09:56:41 -0000	1.11
  @@ -43,6 +43,7 @@
       o  Dave Malhotra               <davem@glue.umd.edu>
       o  Christophe Massiot          <massiot@via.ecp.fr>
       o  Thomas J. Menini            <menini@lvip.net>
  +    o  Joe Orton                   <jorton@redhat.com>
       o  Patrick                     <puzzled@symplex.net>
       o  Charles Randall             <crandall@matchlogic.com> 
       o  David Rees                  <drees@ucsd.edu>
  Index: ossp-pkg/mm/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 aclocal.m4
  --- ossp-pkg/mm/aclocal.m4	29 Jan 2001 20:27:22 -0000	1.22
  +++ ossp-pkg/mm/aclocal.m4	26 Jul 2002 09:56:41 -0000	1.23
  @@ -285,7 +285,7 @@
   #endif
   #endif
   #if !defined(MAP_FAILED)
  -#define MAP_FAILED ((void *)-1)
  +#define MAP_FAILED ((void *)(-1))
   #endif
   #ifdef MM_OS_BEOS
   #include <kernel/OS.h>

From ossp-cvs-owner@ossp.org  Fri Jul 26 11:59:35 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5AF81765E7; Fri, 26 Jul 2002 11:59:35 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm LICENSE Makefile.in README aclocal.m4 configur...
Message-Id: <20020726095935.5AF81765E7@mail.ossp.org>
Date: Fri, 26 Jul 2002 11:59:35 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Jul-2002 11:59:35
  Branch: HEAD                             Handle: 2002072610593400

  Modified files:
    ossp-pkg/mm             LICENSE Makefile.in README aclocal.m4 configure.in
                            mm-config.in mm-config.pod mm.h mm.pod mm_alloc.c
                            mm_conf.h.in mm_core.c mm_global.c mm_lib.c
                            mm_test.c

  Log:
    bump copyright year

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/mm/LICENSE
    1.28        +1  -1      ossp-pkg/mm/Makefile.in
    1.69        +1  -1      ossp-pkg/mm/README
    1.24        +1  -1      ossp-pkg/mm/aclocal.m4
    1.20        +1  -1      ossp-pkg/mm/configure.in
    1.8         +1  -1      ossp-pkg/mm/mm-config.in
    1.5         +1  -1      ossp-pkg/mm/mm-config.pod
    1.23        +1  -1      ossp-pkg/mm/mm.h
    1.18        +1  -1      ossp-pkg/mm/mm.pod
    1.16        +1  -1      ossp-pkg/mm/mm_alloc.c
    1.6         +1  -1      ossp-pkg/mm/mm_conf.h.in
    1.13        +1  -1      ossp-pkg/mm/mm_core.c
    1.10        +1  -1      ossp-pkg/mm/mm_global.c
    1.6         +1  -1      ossp-pkg/mm/mm_lib.c
    1.9         +1  -1      ossp-pkg/mm/mm_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/mm/LICENSE
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 LICENSE
  --- ossp-pkg/mm/LICENSE	29 Jan 2001 20:27:22 -0000	1.3
  +++ ossp-pkg/mm/LICENSE	26 Jul 2002 09:59:34 -0000	1.4
  @@ -1,6 +1,6 @@
   
     ====================================================================
  -  Copyright (c) 1999-2001 Ralf S. Engelschall. All rights reserved.
  +  Copyright (c) 1999-2002 Ralf S. Engelschall. All rights reserved.
    
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
  Index: ossp-pkg/mm/Makefile.in
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 Makefile.in
  --- ossp-pkg/mm/Makefile.in	29 Jan 2001 20:27:22 -0000	1.27
  +++ ossp-pkg/mm/Makefile.in	26 Jul 2002 09:59:34 -0000	1.28
  @@ -1,5 +1,5 @@
   ## ====================================================================
  -## Copyright (c) 1999-2001 Ralf S. Engelschall. All rights reserved.
  +## Copyright (c) 1999-2002 Ralf S. Engelschall. All rights reserved.
   ##
   ## Redistribution and use in source and binary forms, with or without
   ## modification, are permitted provided that the following conditions
  Index: ossp-pkg/mm/README
  ============================================================
  $ cvs diff -u -r1.68 -r1.69 README
  --- ossp-pkg/mm/README	29 Jan 2001 20:28:33 -0000	1.68
  +++ ossp-pkg/mm/README	26 Jul 2002 09:59:34 -0000	1.69
  @@ -5,7 +5,7 @@
     |_|  |_|_|  |_|
                    
     MM - Shared Memory Library
  -  Copyright (c) 1999-2001 Ralf S. Engelschall, All rights reserved.
  +  Copyright (c) 1999-2002 Ralf S. Engelschall, All rights reserved.
     Version 1.1.4 (29-Jan-2001)
   
     The MM library is a 2-layer abstraction library which simplifies the usage
  Index: ossp-pkg/mm/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 aclocal.m4
  --- ossp-pkg/mm/aclocal.m4	26 Jul 2002 09:56:41 -0000	1.23
  +++ ossp-pkg/mm/aclocal.m4	26 Jul 2002 09:59:34 -0000	1.24
  @@ -1,5 +1,5 @@
   ## ====================================================================
  -## Copyright (c) 1999-2001 Ralf S. Engelschall. All rights reserved.
  +## Copyright (c) 1999-2002 Ralf S. Engelschall. All rights reserved.
   ##
   ## Redistribution and use in source and binary forms, with or without
   ## modification, are permitted provided that the following conditions
  Index: ossp-pkg/mm/configure.in
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 configure.in
  --- ossp-pkg/mm/configure.in	29 Jan 2001 20:27:22 -0000	1.19
  +++ ossp-pkg/mm/configure.in	26 Jul 2002 09:59:34 -0000	1.20
  @@ -22,7 +22,7 @@
   
   dnl #   friendly header ;-)
   echo "Configuring ${T_MD}MM${T_ME} (Shared Memory Library), Version ${T_MD}${MM_VERSION_STR}${T_ME}"
  -echo "Copyright (c) 1999-2001 Ralf S. Engelschall, All Rights Reserved."
  +echo "Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>"
   echo "Platform: ${T_MD}${PLATFORM}${T_ME}"
   
   dnl #   autoconf initialization
  Index: ossp-pkg/mm/mm-config.in
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 mm-config.in
  --- ossp-pkg/mm/mm-config.in	29 Jan 2001 20:27:22 -0000	1.7
  +++ ossp-pkg/mm/mm-config.in	26 Jul 2002 09:59:34 -0000	1.8
  @@ -3,7 +3,7 @@
   ## mm-config -- MM library build configuration utility
   ##
   ## ====================================================================
  -## Copyright (c) 1999-2001 Ralf S. Engelschall. All rights reserved.
  +## Copyright (c) 1999-2002 Ralf S. Engelschall. All rights reserved.
   ##
   ## Redistribution and use in source and binary forms, with or without
   ## modification, are permitted provided that the following conditions
  Index: ossp-pkg/mm/mm-config.pod
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 mm-config.pod
  --- ossp-pkg/mm/mm-config.pod	29 Jan 2001 20:27:22 -0000	1.4
  +++ ossp-pkg/mm/mm-config.pod	26 Jul 2002 09:59:34 -0000	1.5
  @@ -1,5 +1,5 @@
   ## ====================================================================
  -## Copyright (c) 1999-2001 Ralf S. Engelschall. All rights reserved.
  +## Copyright (c) 1999-2002 Ralf S. Engelschall. All rights reserved.
   ##
   ## Redistribution and use in source and binary forms, with or without
   ## modification, are permitted provided that the following conditions
  Index: ossp-pkg/mm/mm.h
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 mm.h
  --- ossp-pkg/mm/mm.h	29 Jan 2001 20:31:50 -0000	1.22
  +++ ossp-pkg/mm/mm.h	26 Jul 2002 09:59:34 -0000	1.23
  @@ -1,5 +1,5 @@
   /* ====================================================================
  - * Copyright (c) 1999-2001 Ralf S. Engelschall. All rights reserved.
  + * Copyright (c) 1999-2002 Ralf S. Engelschall. All rights reserved.
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
  Index: ossp-pkg/mm/mm.pod
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 mm.pod
  --- ossp-pkg/mm/mm.pod	29 Jan 2001 20:27:22 -0000	1.17
  +++ ossp-pkg/mm/mm.pod	26 Jul 2002 09:59:34 -0000	1.18
  @@ -1,5 +1,5 @@
   ## ====================================================================
  -## Copyright (c) 1999-2001 Ralf S. Engelschall. All rights reserved.
  +## Copyright (c) 1999-2002 Ralf S. Engelschall. All rights reserved.
   ##
   ## Redistribution and use in source and binary forms, with or without
   ## modification, are permitted provided that the following conditions
  Index: ossp-pkg/mm/mm_alloc.c
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 mm_alloc.c
  --- ossp-pkg/mm/mm_alloc.c	29 Jan 2001 20:27:22 -0000	1.15
  +++ ossp-pkg/mm/mm_alloc.c	26 Jul 2002 09:59:34 -0000	1.16
  @@ -1,5 +1,5 @@
   /* ====================================================================
  - * Copyright (c) 1999-2001 Ralf S. Engelschall. All rights reserved.
  + * Copyright (c) 1999-2002 Ralf S. Engelschall. All rights reserved.
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
  Index: ossp-pkg/mm/mm_conf.h.in
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 mm_conf.h.in
  --- ossp-pkg/mm/mm_conf.h.in	29 Jan 2001 20:27:22 -0000	1.5
  +++ ossp-pkg/mm/mm_conf.h.in	26 Jul 2002 09:59:34 -0000	1.6
  @@ -1,5 +1,5 @@
   /* ====================================================================
  - * Copyright (c) 1999-2001 Ralf S. Engelschall. All rights reserved.
  + * Copyright (c) 1999-2002 Ralf S. Engelschall. All rights reserved.
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
  Index: ossp-pkg/mm/mm_core.c
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 mm_core.c
  --- ossp-pkg/mm/mm_core.c	29 Jan 2001 20:27:22 -0000	1.12
  +++ ossp-pkg/mm/mm_core.c	26 Jul 2002 09:59:34 -0000	1.13
  @@ -1,5 +1,5 @@
   /* ====================================================================
  - * Copyright (c) 1999-2001 Ralf S. Engelschall. All rights reserved.
  + * Copyright (c) 1999-2002 Ralf S. Engelschall. All rights reserved.
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
  Index: ossp-pkg/mm/mm_global.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 mm_global.c
  --- ossp-pkg/mm/mm_global.c	29 Jan 2001 20:27:22 -0000	1.9
  +++ ossp-pkg/mm/mm_global.c	26 Jul 2002 09:59:34 -0000	1.10
  @@ -1,5 +1,5 @@
   /* ====================================================================
  - * Copyright (c) 1999-2001 Ralf S. Engelschall. All rights reserved.
  + * Copyright (c) 1999-2002 Ralf S. Engelschall. All rights reserved.
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
  Index: ossp-pkg/mm/mm_lib.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 mm_lib.c
  --- ossp-pkg/mm/mm_lib.c	29 Jan 2001 20:27:22 -0000	1.5
  +++ ossp-pkg/mm/mm_lib.c	26 Jul 2002 09:59:34 -0000	1.6
  @@ -1,5 +1,5 @@
   /* ====================================================================
  - * Copyright (c) 1999-2001 Ralf S. Engelschall. All rights reserved.
  + * Copyright (c) 1999-2002 Ralf S. Engelschall. All rights reserved.
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
  Index: ossp-pkg/mm/mm_test.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 mm_test.c
  --- ossp-pkg/mm/mm_test.c	29 Jan 2001 20:27:22 -0000	1.8
  +++ ossp-pkg/mm/mm_test.c	26 Jul 2002 09:59:34 -0000	1.9
  @@ -1,5 +1,5 @@
   /* ====================================================================
  - * Copyright (c) 1999-2001 Ralf S. Engelschall. All rights reserved.
  + * Copyright (c) 1999-2002 Ralf S. Engelschall. All rights reserved.
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions

From ossp-cvs-owner@ossp.org  Fri Jul 26 15:04:43 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A430276553; Fri, 26 Jul 2002 15:04:42 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm .cvsignore ChangeLog Makefile.in README acloca...
Message-Id: <20020726130442.A430276553@mail.ossp.org>
Date: Fri, 26 Jul 2002 15:04:42 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Jul-2002 15:04:42
  Branch: HEAD                             Handle: 197001010100001027685080

  Added files:
    ossp-pkg/mm             configure.ac devtool devtool.conf devtool.func
  Modified files:
    ossp-pkg/mm             .cvsignore ChangeLog Makefile.in README aclocal.m4
                            mm-config.pod mm.h mm.pod mm_core.c mm_vers.c
  Removed files:
    ossp-pkg/mm             config.guess config.sub configure configure.in
                            fbtool ltconfig ltmain.sh mm-config.1 mm.3
                            mm_conf.h.in shtool

  Log:
    major source tree overhauling

  Summary:
    Revision    Changes     Path
    1.3         +14 -9      ossp-pkg/mm/.cvsignore
    1.29        +6  -2      ossp-pkg/mm/ChangeLog
    1.29        +36 -113    ossp-pkg/mm/Makefile.in
    1.70        +6  -5      ossp-pkg/mm/README
    1.25        +3  -30     ossp-pkg/mm/aclocal.m4
    NONE        +0  -983    ossp-pkg/mm/config.guess
    NONE        +0  -1222   ossp-pkg/mm/config.sub
    NONE        +0  -3437   ossp-pkg/mm/configure
    1.1         +249 -0     ossp-pkg/mm/configure.ac
    NONE        +0  -254    ossp-pkg/mm/configure.in
    1.1         +47 -0      ossp-pkg/mm/devtool
    1.1         +51 -0      ossp-pkg/mm/devtool.conf
    1.1         +73 -0      ossp-pkg/mm/devtool.func
    NONE        +0  -42     ossp-pkg/mm/fbtool
    NONE        +0  -3114   ossp-pkg/mm/ltconfig
    NONE        +0  -4024   ossp-pkg/mm/ltmain.sh
    NONE        +0  -210    ossp-pkg/mm/mm-config.1
    1.6         +2  -2      ossp-pkg/mm/mm-config.pod
    NONE        +0  -631    ossp-pkg/mm/mm.3
    1.24        +1  -1      ossp-pkg/mm/mm.h
    1.19        +20 -24     ossp-pkg/mm/mm.pod
    NONE        +0  -88     ossp-pkg/mm/mm_conf.h.in
    1.14        +2  -2      ossp-pkg/mm/mm_core.c
    1.38        +10 -10     ossp-pkg/mm/mm_vers.c
    NONE        +0  -1291   ossp-pkg/mm/shtool
  ____________________________________________________________________________

  Index: ossp-pkg/mm/.cvsignore
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 .cvsignore
  --- ossp-pkg/mm/.cvsignore	15 May 1999 11:21:47 -0000	1.2
  +++ ossp-pkg/mm/.cvsignore	26 Jul 2002 13:04:39 -0000	1.3
  @@ -1,14 +1,19 @@
  -*.o
  -*.lo
   *.a
   *.la
  -mm_test
  -mm-config
  -mm_conf.h
  +*.lo
  +*.o
  +.libs
  +Makefile
  +config.cache
   config.log
   config.status
  -config.cache
  -Makefile
  +config.guess
  +config.sub
   libtool
  -.libs
  -.fbtool
  +mm-config
  +mm_conf.h
  +mm_test
  +autom4te.cache
  +libtool.m4
  +config.h
  +config.h.in
  Index: ossp-pkg/mm/ChangeLog
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 ChangeLog
  --- ossp-pkg/mm/ChangeLog	26 Jul 2002 09:56:41 -0000	1.28
  +++ ossp-pkg/mm/ChangeLog	26 Jul 2002 13:04:39 -0000	1.29
  @@ -16,14 +16,18 @@
   
    Changes between 1.1.3 and 1.2.0 (01-Jul-2000 to 26-Jul-2002)
   
  -  *) Upgraded to GNU shtool 1.5.3
  +  *) Fixed race condition in temporary file creation.
  +     [Sebastian Krahmer, SuSE Security]
  +
  +  *) Upgraded to GNU autoconf 2.53, GNU libtool 1.4.2 and GNU shtool
  +     1.6.1 build environment.
        [Ralf S. Engelschall]
   
     *) Removed variables from ANSI C function prototypes in mm.h
        to avoid any potential conflicts in advance.
        [Ralf S. Engelschall]
   
  -  *) Adjusted year in copyright messages for 2001.
  +  *) Adjusted year in copyright messages for 2002.
        [Ralf S. Engelschall]
   
     *) From Apache 2.0's MM patch set:
  Index: ossp-pkg/mm/Makefile.in
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 Makefile.in
  --- ossp-pkg/mm/Makefile.in	26 Jul 2002 09:59:34 -0000	1.28
  +++ ossp-pkg/mm/Makefile.in	26 Jul 2002 13:04:39 -0000	1.29
  @@ -37,10 +37,6 @@
   ## OF THE POSSIBILITY OF SUCH DAMAGE.
   ## ====================================================================
   
  -##
  -##  Makefile
  -##
  -
   @SET_MAKE@
   
   TOP         = .
  @@ -59,104 +55,54 @@
   LDFLAGS     = @LDFLAGS@
   LIBS        = @LIBS@
   RM          = rm -f
  -LIBTOOL     = @LIBTOOL@
  -SHTOOL      = @SHTOOL@
  +LIBTOOL     = ./libtool
  +SHTOOL      = ./shtool
   
  -MAN         = mm.3 mm-config.1
  -OBJ         = mm_global.o  mm_alloc.o  mm_core.o  mm_lib.o  mm_vers.o
  -LOBJ        = mm_global.lo mm_alloc.lo mm_core.lo mm_lib.lo mm_vers.lo
  -
  -_VERSION_FILE = \
  -    mm_vers.c
  -_VERSION = \
  -	$(SHTOOL) version -l c -n MM -p mm_ $$OPT $(_VERSION_FILE);\
  -	V=`$(SHTOOL) version -l c -d long $(_VERSION_FILE)`;\
  -	sed -e "s/Version .*(.*)/Version $$V/g" <README >README.n && mv README.n README
  +LIBS        = libmm.la
  +OBJS        = mm_global.lo mm_alloc.lo mm_core.lo mm_lib.lo mm_vers.lo
  +MANS        = mm.3 mm-config.1
  +TSTS        = mm_test
   
   .SUFFIXES: .o .lo
   
   .c.o:
   	$(LIBTOOL) --quiet --mode=compile $(CC) -c $(CFLAGS) $<
  -
   .c.lo:
   	$(LIBTOOL) --quiet --mode=compile $(CC) -c $(CFLAGS) $<
   
  -all: libmm.la $(MAN) mm_test
  +all: $(LIBS) $(MANS) $(TSTS)
   
  -libmm.la: $(OBJ) $(LOBJ)
  -	$(LIBTOOL) --quiet --mode=link $(CC) -o libmm.la $(LOBJ) \
  +libmm.la: $(OBJS)
  +	$(LIBTOOL) --quiet --mode=link $(CC) -o $@ $(OBJS) \
   	    -rpath $(libdir) -version-info `$(SHTOOL) version -l c -d libtool mm_vers.c`
   
  -mm_alloc.c mm_core.c mm_global.c: mm_conf.h mm.h mm_vers.c
  -
  -check: test
  -test: mm_test
  -	-@./mm_test; \
  -	if [ $$? -eq 0 ]; then \
  -		PLATFORM=`$(SHELL) ./config.guess`; \
  -		PLATFORM=`$(SHELL) ./config.sub $$PLATFORM`; \
  -		if [ ".`grep $$PLATFORM PORTING`" = . ]; then \
  -	        echo "Please send the following summary via Email to the author"; \
  -	        echo "Ralf S. Engelschall <rse@engelschall.com> for inclusion into"; \
  -	        echo "the list of successfully tested platforms (see PORTING file):"; \
  -	        echo ""; \
  -	        echo "Ok" >.fbtool; \
  -	        $(SHELL) ./fbtool -d; \
  -	    fi; \
  -	else \
  -	    echo "Please send the following summary together with as much other"; \
  -	    echo "details about the configuration, build and test steps to the author"; \
  -	    echo "Ralf S. Engelschall <rse@engelschall.com> to help him in tracking"; \
  -	    echo "down your platform problem."; \
  -	    echo ""; \
  -	    echo "Failed" >.fbtool; \
  -	    $(SHELL) ./fbtool -d; \
  -	fi; \
  -	exit 0
  -
  -debug: mm_test
  -	@$(LIBTOOL) --mode=execute gdb mm_test
  +mm_alloc.c mm_core.c mm_global.c: mm.h mm_vers.c
  +mm.h: config.h
   
   mm_test: mm_test.lo libmm.la
   	$(LIBTOOL) --quiet --mode=link $(CC) -o $@ mm_test.lo libmm.la
   
   mm.3: mm.pod
  -	V1=`$(SHTOOL) version -l c -d short $(_VERSION_FILE)`; \
  -	V2=`$(SHTOOL) version -l c -d long $(_VERSION_FILE)`; \
  -	D=`$(SHTOOL) version -l c -d long $(_VERSION_FILE) | sed -e 's;.*(;;' -e 's;).*;;'`; \
  +	V1=`$(SHTOOL) version -l c -d short mm_vers.c`; \
  +	V2=`$(SHTOOL) version -l c -d long mm_vers.c`; \
  +	D=`$(SHTOOL) version -l c -d long mm_vers.c | sed -e 's;.*(;;' -e 's;).*;;'`; \
   	pod2man --section=3 --center="Shared Memory Library" --release="$$D" --date="MM $$V1" mm.pod |\
   	perl -p -e 's;^(\\\&\s+.+?)([Mm][Mm]_[a-zA-Z0-9_]+)(\(.+?)$$;$$1\\fB$$2\\fR$$3;' |\
   	sed -e "s;MM_VERSION_STR;$$V2;" >mm.3
   
   mm-config.1: mm-config.pod
  -	V1=`$(SHTOOL) version -l c -d short $(_VERSION_FILE)`; \
  -	V2=`$(SHTOOL) version -l c -d long $(_VERSION_FILE)`; \
  -	D=`$(SHTOOL) version -l c -d long $(_VERSION_FILE) | sed -e 's;.*(;;' -e 's;).*;;'`; \
  +	V1=`$(SHTOOL) version -l c -d short mm_vers.c`; \
  +	V2=`$(SHTOOL) version -l c -d long mm_vers.c`; \
  +	D=`$(SHTOOL) version -l c -d long mm_vers.c | sed -e 's;.*(;;' -e 's;).*;;'`; \
   	pod2man --section=1 --center="Shared Memory Library" --release="$$D" --date="MM $$V1" mm-config.pod |\
   	perl -p -e 's;^(\\\&\s+.+?)([Mm][Mm]_[a-zA-Z0-9_]+)(\(.+?)$$;$$1\\fB$$2\\fR$$3;' |\
   	sed -e "s;MM_VERSION_STR;$$V2;" >mm-config.1
   
  -update:
  -	@$(RM) ltmain.sh ltconfig shtool
  -	@$(MAKE) $(MFLAGS) ltmain.sh ltconfig configure shtool
  -
  -configure: configure.in aclocal.m4
  -	$(RM) configure
  -	autoconf
  -
  -ltmain.sh:
  -	@F=`libtoolize -n -c -f | grep 'cp.*ltmain.sh' |\
  -	    sed -e 's;[^/]*;;' -e 's; .*;;'`; \
  -	echo "ltmain.sh <-- $$F"; cat $$F |\
  -	sed -e 's:/bin/sh; then:/bin/sh || test "$$nonopt" = ./shtool;then:' \
  -	    -e 's:exec \$$SHELL \$$0 --finish:exit 0 #:' >ltmain.sh
  -
  -ltconfig:
  -	@F=`libtoolize -n -c -f | grep 'cp.*ltconfig' | sed -e 's;[^/]*;;' -e 's; .*;;'`; \
  -	echo "ltconfig <-- $$F"; cp $$F .
  -
  -shtool:
  -	shtoolize -o shtool version echo mkdir install fixperm tarball
  +check: test
  +test: mm_test
  +	@$(LIBTOOL) --mode=execute ./mm_test
  +debug: mm_test
  +	@$(LIBTOOL) --mode=execute gdb ./mm_test
   
   install: all
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
  @@ -171,45 +117,22 @@
   	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libmm.la $(DESTDIR)$(libdir)/libmm.la
   
   clean:
  -	$(RM) mm_test mm_test.o mm_test.lo
  -	$(RM) core *.core *.bak *~
  -	$(RM) $(LOBJ)
  -	$(RM) $(OBJ) 
  -	$(RM) libmm.la
  -	$(RM) -r .libs
  +	-$(RM) $(TSTS)
  +	-$(RM) $(OBJS)
  +	-$(RM) $(LIBS)
  +	-$(RM) core *.core *.bak *~
  +	-$(RM) -r .libs >/dev/null 2>&1 || $(TRUE)
  +	-$(RM) *.o *.lo
   
   distclean: clean
  -	$(RM) Makefile
  -	$(RM) mm-config mm_conf.h
  -	$(RM) config.h config.cache config.status config.log
  -	$(RM) libtool
  -	$(RM) .fbtool
  +	-$(RM) config.log config.status config.cache
  +	-$(RM) Makefile config.h cfg-config
  +	-$(RM) libtool
  +	-$(RM) mm-config
   
   realclean: distclean
  -	$(RM) $(MAN)
  -
  -dist: distclean
  -	@$(SHTOOL) fixperm -v *; \
  -	V=`$(SHTOOL) version -l c -d short $(_VERSION_FILE)`; \
  -	$(SHTOOL) tarball -o mm-$${V}.tar.gz -d mm-$${V} -u rse -g mm \
  -	                  -e 'CVS,\.cvsignore,\.[ao],^\.' -c 'gzip --best' .; \
  -	ls -l mm-$${V}.tar.gz
  -
  -snap: distclean
  -	@$(SHTOOL) fixperm *; \
  -	V=`$(SHTOOL) version -l c -d short $(_VERSION_FILE)`; \
  -	$(SHTOOL) tarball -o mm-$${V}-SNAP.tar.gz -d mm-$${V}-SNAP -u rse -g mm \
  -	                  -e 'CVS,\.cvsignore,\.[ao],^\.' -c 'gzip --best' .; \
  -	ls -l mm-$${V}-SNAP.tar.gz
  -
  -new-version:
  -	@V="$(VERSION)"; \
  -	if [ ".$$V" != . ]; then \
  -		OPT="-s$$V"; \
  -	else \
  -		OPT="-e"; \
  -	fi; \
  -	$(_VERSION)
  -update-version:
  -	OPT="-s `$(SHTOOL) version -l c -d short $(_VERSION_FILE)`" && $(_VERSION)
  +	-$(RM) $(MANS)
  +	-$(RM) configure config.h.in
  +	-$(RM) shtool
  +	-$(RM) ltmain.sh libtool.m4 config.guess config.sub
   
  Index: ossp-pkg/mm/README
  ============================================================
  $ cvs diff -u -r1.69 -r1.70 README
  --- ossp-pkg/mm/README	26 Jul 2002 09:59:34 -0000	1.69
  +++ ossp-pkg/mm/README	26 Jul 2002 13:04:39 -0000	1.70
  @@ -4,11 +4,12 @@
     | |  | | |  | |
     |_|  |_|_|  |_|
                    
  -  MM - Shared Memory Library
  -  Copyright (c) 1999-2002 Ralf S. Engelschall, All rights reserved.
  -  Version 1.1.4 (29-Jan-2001)
  +  OSSP mm - Shared Memory Allocation
  +  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>
  +  Version 1.2.0
   
  -  The MM library is a 2-layer abstraction library which simplifies the usage
  +  OSSP mm is a 2-layer abstraction library which simplifies the usage
     of shared memory between forked (and this way strongly related) processes
     under Unix platforms. On the first (lower) layer it hides all platform
     dependent implementation details (allocation and locking) when dealing with
  @@ -21,7 +22,7 @@
     and even Win32 Cygwin, BeOS and OS/390.
   
     The documentation and latest release can be found on
  -  http://www.engelschall.com/sw/mm/
  +  http://www.ossp.org/pkg/lib/mm/
   
                                          Ralf S. Engelschall
                                          rse@engelschall.com
  Index: ossp-pkg/mm/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 aclocal.m4
  --- ossp-pkg/mm/aclocal.m4	26 Jul 2002 09:59:34 -0000	1.24
  +++ ossp-pkg/mm/aclocal.m4	26 Jul 2002 13:04:39 -0000	1.25
  @@ -36,32 +36,6 @@
   ## ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
   ## OF THE POSSIBILITY OF SUCH DAMAGE.
   ## ====================================================================
  -divert(-1)
  -
  -define(AC_PROG_LIBTOOL,[dnl
  -AC_ARG_ENABLE(static,dnl
  -[  --enable-static         build static libraries (default=yes)],
  -enable_static="$enableval",
  -enable_static=yes
  -)dnl
  -AC_ARG_ENABLE(shared,dnl
  -[  --enable-shared         build shared libraries (default=yes)],
  -enable_shared="$enableval",
  -enable_shared=yes
  -)dnl
  -libtool_flags=''
  -test ".$silent"            = .yes && libtool_flags="$libtool_flags --silent"
  -test ".$enable_static"     = .no  && libtool_flags="$libtool_flags --disable-static"
  -test ".$enable_shared"     = .no  && libtool_flags="$libtool_flags --disable-shared"
  -test ".$ac_cv_prog_gcc"    = .yes && libtool_flags="$libtool_flags --with-gcc"
  -test ".$ac_cv_prog_gnu_ld" = .yes && libtool_flags="$libtool_flags --with-gnu-ld"
  -CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" LD="$LD" \
  -${CONFIG_SHELL-/bin/sh} ltconfig --no-reexec \
  -$libtool_flags --no-verify ltmain.sh $PLATFORM ||\
  -AC_MSG_ERROR([libtool configuration failed])
  -LIBTOOL="\$(TOP)/libtool"
  -AC_SUBST(LIBTOOL)
  -])dnl
   
   define(AC_CHECK_DEBUGGING,[dnl
   AC_MSG_CHECKING(for compilation debug mode)
  @@ -87,7 +61,7 @@
       esac
   fi
   msg="enabled"
  -AC_DEFINE(MM_DEBUG)
  +AC_DEFINE(MM_DEBUG, 1, [define to enable debugging])
   ],[
   case "$CFLAGS" in
       *-g* ) CFLAGS=`echo "$CFLAGS" |\
  @@ -113,7 +87,7 @@
       ], ac_cv_define_$1=yes, ac_cv_define_$1=no)
     )
     if test "$ac_cv_define_$1" = "yes" ; then
  -    AC_DEFINE(HAVE_$1)
  +    AC_DEFINE(HAVE_$1, 1, [define to 1 if you have the $1 define])
     fi
   ])dnl
   AC_DEFINE(HAVE_$1)
  @@ -408,7 +382,6 @@
   MM_SHM_MAXSEGSIZE=$ac_cv_maxsegsize
   test ".$msg" = .unknown && AC_MSG_ERROR([Unable to determine maximum shared memory segment size])
   AC_MSG_RESULT([$msg])
  -AC_DEFINE_UNQUOTED(MM_SHM_MAXSEGSIZE, $MM_SHM_MAXSEGSIZE)
  +AC_DEFINE_UNQUOTED(MM_SHM_MAXSEGSIZE, $MM_SHM_MAXSEGSIZE, [maximum segment size])
   ])
   
  -divert
        Index: ossp-pkg/mm/configure.ac
  ============================================================
  $ cvs update -p -r1.1 configure.ac
  dnl ##
  dnl ##   Autoconf specification for MM library
  dnl ##
  
  dnl #
  dnl #   standard Autoconf prolog
  dnl #
  
  dnl #   autoconf initialization
  AC_PREREQ(2.53)dnl
  AC_INIT(README)
  AC_PREFIX_DEFAULT(/usr/local)
  
  dnl #   shtool bootstrap
  SHTOOL="\$(TOP)/shtool"
  AC_SUBST(SHTOOL)
  ac_shtool="./shtool"
  T_MD=`$ac_shtool echo -n -e %B`
  T_ME=`$ac_shtool echo -n -e %b`
  PLATFORM=`${CONFIG_SHELL-/bin/sh} ./config.guess`
  PLATFORM=`${CONFIG_SHELL-/bin/sh} ./config.sub $PLATFORM`
  MM_VERSION_STR="`$ac_shtool version -l c -d long mm_vers.c`"
  AC_SUBST(MM_VERSION_STR)
  
  dnl #   friendly header ;-)
  echo "Configuring ${T_MD}MM${T_ME} (Shared Memory Allocation), Version ${T_MD}${MM_VERSION_STR}${T_ME}"
  echo "Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>"
  echo "Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>"
  echo "Platform: ${T_MD}${PLATFORM}${T_ME}"
  
  dnl #
  dnl #   determine build tools and parameters
  dnl #
  
  AC_CONFIGURE_PART(Build Tools)
  AC_PROG_CC
  AC_PROG_CPP
  AC_CHECK_DEBUGGING
  AC_SET_MAKE
  
  sinclude(libtool.m4)
  AC_PROG_LIBTOOL
  
  dnl #   support for some special platform/compiler options
  case "$PLATFORM:$CC" in
      *-hp-hpux*:cc ) CFLAGS="$CFLAGS -Ae +DAportable" ;;
  esac
  
  dnl #
  dnl #   determine system parameters
  dnl #
  
  AC_CONFIGURE_PART(Platform Environment)
  
  AC_HAVE_HEADERS(stdio.h stdlib.h string.h dnl 
                  errno.h limits.h unistd.h fcntl.h dnl
                  sys/stat.h sys/types.h)
  AC_BEGIN_DECISION([mandatory system headers])
  AC_IFALLYES(header:stdio.h header:stdlib.h header:string.h dnl
              header:errno.h header:limits.h header:unistd.h header:fcntl.h dnl
              header:sys/stat.h header:sys/types.h,
              AC_DECIDE(fine, [all fine]))
  AC_END_DECISION
  
  AC_HAVE_HEADERS(memory.h)
  AC_CHECK_FUNCS(memcpy memset bcopy)
  AC_CHECK_DEFINE(_POSIX_PATH_MAX, limits.h)
  AC_CHECK_DEFINE(PATH_MAX, limits.h)
  AC_CHECK_DEFINE(MAXPATHLEN, sys/param.h)
  AC_CHECK_DEFINE(_POSIX_CHILD_MAX, limits.h)
  AC_CHECK_DEFINE(CHILD_MAX, limits.h)
  
  dnl #   some special defines for brain dead platforms
  case $PLATFORM in
     *-*-sunos* ) AC_DEFINE(MM_OS_SUNOS,  1, [define to 1 for SunOS 4.x support]) ;;
     BS2000-*-* ) AC_DEFINE(MM_OS_BS2000, 1, [define to 1 for BS2000 support])    ;;
     *-*-beos*  ) AC_DEFINE(MM_OS_BEOS,   1, [define to 1 for BeOS support])      ;;
  esac
  
  dnl #
  dnl #   method to determine virtual memory page size
  dnl #
  
  AC_CONFIGURE_PART(Virtual Memory Page Size)
  
  AC_HAVE_HEADERS(unistd.h kernel/OS.h)
  AC_HAVE_FUNCS(getpagesize sysconf)
  AC_CHECK_DEFINE(_SC_PAGESIZE, unistd.h)
  AC_CHECK_DEFINE(B_PAGE_SIZE, kernel/OS.h)
  
  AH_TEMPLATE([MM_VMPS_GETPAGESIZE], [memory page size determination: 4.2BSD getpagesize()])
  AH_TEMPLATE([MM_VMPS_SYSCONF],     [memory page size determination: POSIX.1 sysconf(_SC_PAGESIZE)])
  AH_TEMPLATE([MM_VMPS_BEOS],        [memory page size determination: BeOS B_PAGE_SIZE])
  AC_BEGIN_DECISION([memory page size determination])
  AC_IFALLYES(header:unistd.h func:getpagesize, 
              AC_DECIDE(MM_VMPS_GETPAGESIZE, [4.2BSD getpagesize()]))
  AC_IFALLYES(header:unistd.h func:sysconf define:_SC_PAGESIZE, 
              AC_DECIDE(MM_VMPS_SYSCONF, [POSIX.1 sysconf(_SC_PAGESIZE)]))
  AC_IFALLYES(header:kernel/OS.h define:B_PAGE_SIZE,
              AC_DECIDE(MM_VMPS_BEOS, [BeOS B_PAGE_SIZE])) 
  AC_END_DECISION
  AC_DEFINE_UNQUOTED($ac_decision)
  
  dnl #
  dnl #   Shared Memory
  dnl #
  
  AC_CONFIGURE_PART(Shared Memory Implementation)
  
  AC_HAVE_HEADERS(sys/mman.h)
  AC_CHECK_DEFINE(MAP_ANON, sys/mman.h)
  AC_HAVE_FUNCS(mmap munmap shm_open shm_unlink)
  AC_TEST_FILE(/dev/zero)
  AC_HAVE_HEADERS(sys/ipc.h sys/shm.h sys/file.h)
  AC_HAVE_FUNCS(shmget shmat shmdt shmctl)
  AC_HAVE_HEADERS(kernel/OS.h)
  AC_HAVE_FUNCS(create_area)
  
  AH_TEMPLATE([MM_SHMT_BEOS],   [shared memory allocation method: BeOS areas])
  AH_TEMPLATE([MM_SHMT_MMFILE], [shared memory allocation method: Classical mmap() on temporary file])
  AH_TEMPLATE([MM_SHMT_MMPOSX], [shared memory allocation method: mmap() via POSIX.1 shm_open() on temporary file])
  AH_TEMPLATE([MM_SHMT_MMZERO], [shared memory allocation method: SVR4-style mmap() on /dev/zero])
  AH_TEMPLATE([MM_SHMT_IPCSHM], [shared memory allocation method: SysV IPC shmget()])
  AH_TEMPLATE([MM_SHMT_MMANON], [shared memory allocation method: 4.4BSD-style mmap() via MAP_ANON])
  AC_BEGIN_DECISION([shared memory allocation method])
  AC_IFALLYES(header:kernel/OS.h func:create_area,
              AC_DECIDE(MM_SHMT_BEOS, [BeOS areas]))
  AC_IFALLYES(header:sys/mman.h func:mmap func:munmap, 
              AC_DECIDE(MM_SHMT_MMFILE, [Classical mmap() on temporary file]))
  AC_IFALLYES(header:sys/mman.h func:mmap func:munmap func:shm_open func:shm_unlink, 
              AC_DECIDE(MM_SHMT_MMPOSX, [mmap() via POSIX.1 shm_open() on temporary file]))
  AC_IFALLYES(header:sys/mman.h func:mmap func:munmap file:/dev/zero, 
              AC_DECIDE(MM_SHMT_MMZERO, [SVR4-style mmap() on /dev/zero]))
  AC_IFALLYES(header:sys/ipc.h header:sys/shm.h header:sys/file.h dnl
              func:shmget func:shmat func:shmdt func:shmctl,
              AC_DECIDE(MM_SHMT_IPCSHM, [SysV IPC shmget()]))
  AC_IFALLYES(header:sys/mman.h func:mmap func:munmap define:MAP_ANON, 
              AC_DECIDE(MM_SHMT_MMANON, [4.4BSD-style mmap() via MAP_ANON]))
  case $PLATFORM in
      *-*-linux* )
          #   Unfortunately, Linux has many problems, so we have to do
          #   more granular manual decisions here. The background is:
          #   MM_SHMT_IPCSHM:
          #       Supported under Linux 2.0 and upwards. Works out of the
          #       box on Linux 2.2, but requires an explicitly mounted shm
          #       filesystem under 2.3 only. The requirement for the shm
          #       filesystem should be gone with Linux 2.4.
          #   MM_SHMT_MMANON:
          #       Not allowed up to and included to Linux 2.2.
          #       Should be supported in Linux 2.3, but still hangs there.
          #       Will be supported from Linux 2.4 on the first time really.
          #   MM_SHMT_MMZERO:
          #       Not allowed up to and included to Linux 2.2.
          #       Should be supported in Linux 2.3, but still hangs there.
          #       Will be supported from Linux 2.4 on the first time really.
          #   MM_SHMT_MMFILE:
          #       Works on Linux versions. 
          case $PLATFORM in
              *-linux1* )
                  AC_DECISION_FORCE(MM_SHMT_MMFILE)
                  ;;
              *-*-linux2.0* )
                  AC_DECISION_FORCE(MM_SHMT_IPCSHM)
                  ;;
              *-*-linux2.[12]* )
                  AC_DECISION_FORCE(MM_SHMT_IPCSHM)
                  ;;
              *-*-linux2.3* )
                  if test ".`df 2>/dev/null | grep shm`" != .; then
                      AC_DECISION_FORCE(MM_SHMT_IPCSHM)
                  else
                      AC_DECISION_FORCE(MM_SHMT_MMFILE)
                  fi
                  ;;
              * )
                  AC_DECISION_OVERRIDE(MM_SHMT_MMFILE MM_SHMT_MMZERO MM_SHMT_MMPOSX MM_SHMT_MMANON MM_SHMT_IPCSHM)
          esac
          ;;
  esac
  AC_ARG_WITH(shm,dnl
  [  --with-shm=TYPE         force shared memory type: MMFILE MMZERO MMPOSX MMANON IPCSHM BEOS],
  AC_DECISION_FORCE(MM_SHMT_$withval)
  )dnl
  AC_END_DECISION
  AC_DEFINE_UNQUOTED($ac_decision)
  
  AC_CHECK_MAXSEGSIZE($ac_decision)
  
  dnl #
  dnl #   Mutex
  dnl #
  
  AC_CONFIGURE_PART(Mutual Exclusion Implementation)
  
  AC_HAVE_HEADERS(sys/ipc.h sys/sem.h sys/file.h)
  AC_HAVE_FUNCS(semget semctl)
  AC_CHECK_DEFINE(LOCK_EX, sys/file.h)
  AC_CHECK_DEFINE(F_SETLK, fcntl.h)
  AC_CHECK_DEFINE(IPC_PRIVATE, sys/ipc.h)
  AC_CHECK_DEFINE(SEM_UNDO, sys/sem.h)
  AC_HAVE_HEADERS(kernel/OS.h)
  AC_CHECK_FUNCS(create_sem)
  
  AC_MSG_CHECKING(whether union semun is defined in sys/sem.h)
  AC_TRY_COMPILE([
  #include <sys/types.h>
  #include <sys/ipc.h>
  #include <sys/sem.h>
  ],[
  union semun arg;
  semctl(0, 0, 0, arg);
  ],
  AC_DEFINE(HAVE_UNION_SEMUN, 1, [define to 1 if you have union semun])
  msg=yes,dnl
  msg=no)
  AC_MSG_RESULT([$msg])
  
  AH_TEMPLATE([MM_SEMT_FLOCK],  [mutex implementation method: 4.2BSD-style flock() on temporary file])
  AH_TEMPLATE([MM_SEMT_IPCSEM], [mutex implementation method: SysV IPC semget()])
  AH_TEMPLATE([MM_SEMT_FCNTL],  [mutex implementation method: SVR4-style fcntl() on temporary file])
  AH_TEMPLATE([MM_SEMT_BEOS],   [mutex implementation method: BeOS semaphores])
  AC_BEGIN_DECISION([mutex implementation method])
  AC_IFALLYES(header:sys/file.h define:LOCK_EX, 
              AC_DECIDE(MM_SEMT_FLOCK, [4.2BSD-style flock() on temporary file]))
  AC_IFALLYES(header:sys/ipc.h header:sys/sem.h header:sys/file.h dnl
              func:semget func:semctl,
              AC_DECIDE(MM_SEMT_IPCSEM, [SysV IPC semget()]))
  AC_IFALLYES(header:fcntl.h define:F_SETLK, 
              AC_DECIDE(MM_SEMT_FCNTL, [SVR4-style fcntl() on temporary file]))
  AC_IFALLYES(header:kernel/OS.h func:create_sem,
              AC_DECIDE(MM_SEMT_BEOS, [BeOS semaphores]))
  AC_ARG_WITH(sem,dnl
  [  --with-sem=TYPE         force semaphore type: FLOCK FCNTL IPCSEM BEOS],
  AC_DECISION_FORCE(MM_SEMT_$withval)
  )dnl
  AC_END_DECISION
  AC_DEFINE_UNQUOTED($ac_decision)
  
  dnl #
  dnl #   finally: source file substitution...
  dnl #
  
  AC_CONFIGURE_PART(Output Substitution)
  
  AC_CONFIG_HEADERS(config.h)
  AC_CONFIG_FILES([Makefile mm-config])
  AC_CONFIG_COMMANDS([adjustment], [chmod a+x mm-config])
  AC_OUTPUT
  
    Index: ossp-pkg/mm/devtool
  ============================================================
  $ cvs update -p -r1.1 devtool
  #!/bin/sh
  ##
  ##  devtool -- Development Tool
  ##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  if [ $# -eq 0 ]; then
      echo "devtool:USAGE: devtool <command> [<arg> ...]" 1>&2
      exit 1
  fi
  
  cmd="$1"
  shift
  
  devtoolfunc="./devtool.func"
  
  if [ ! -f devtool.conf ]; then
      echo "devtool:ERROR: no devtool.conf in current directory" 1>&2
      exit 1
  fi
  
  cmdline=`grep "^%$cmd" devtool.conf`
  if [ ".$cmdline" = . ]; then
      echo "devtool:ERROR: command $cmd not found in devtool.conf" 1>&2
      exit 1
  fi
  
  if [ ".$TMPDIR" != . ]; then
      tmpdir="$TMPDIR"
  elif [ ".$TEMPDIR" != . ]; then
      tmpdir="$TEMPDIR"
  else
      tmpdir="/tmp"
  fi
  tmpfile="$tmpdir/rc.$$.tmp"
  
  rm -f $tmpfile
  touch $tmpfile
  echo ". $devtoolfunc" >>$tmpfile
  ( sed <devtool.conf -e "1,/^%common/d" -e '/^%.*/,$d'
    sed <devtool.conf -e "1,/^%$cmd/d" -e '/^%.*/,$d' ) |\
  sed -e 's;\([ 	]\)@\([a-zA-Z_][a-zA-Z0-9_]*\);\1devtool_\2;' >>$tmpfile
  
  sh $tmpfile "$@"
  
  rm -f $tmpfile >/dev/null 2>&1 || true
  
  Index: ossp-pkg/mm/devtool.conf
  ============================================================
  $ cvs update -p -r1.1 devtool.conf
  ##
  ##  devtool.conf -- Development Tool Configuration
  ##
  
  %autogen
      @autogen shtool   1.6.1 "1.6.*" all
      @autogen libtool  1.4.2 "1.4*"
      @autogen autoconf 2.53  "2.5[3-9]*"
  
  %autoclean
      @autoclean shtool
      @autoclean libtool
      @autoclean autoconf
  
  %configure
      ./configure \
          --prefix=/tmp/mm \
          --disable-shared \
          --enable-debug \
          "$@"
  
  %version
      ./shtool version -l c -n "OSSP mm" -p mm_ -e mm_vers.c
      V=`./shtool version -l c -d long mm_vers.c`
      sed -e "s/Version .*(.*)/Version $V/g" <README >README.n 
      mv README.n README
  
  %dist
      echo "+++ generating"
      ./devtool autoclean
      ./devtool autogen
      echo "+++ configuring"
      ./configure
      echo "+++ building"
      make clean all man
      echo "+++ cleaning"
      make distclean
      echo "+++ fixing"
      ./shtool fixperm -v .
      echo "+++ rolling"
      V=`./shtool version -l c -d short mm_vers.c`
      ./shtool tarball -o mm-${V}.tar.gz -d mm-${V} -u ossp -g ossp \
                       -e 'CVS,\.cvsignore,\.[ao],^\.,devtool*,*.tar.gz' -c 'gzip --best' .
      ls -l mm-${V}.tar.gz
      echo "+++ testing"
      gunzip <mm-${V}.tar.gz | tar tvf -
  
  %release
      echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/mm/"
      scp mm-*.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/mm/
  
  Index: ossp-pkg/mm/devtool.func
  ============================================================
  $ cvs update -p -r1.1 devtool.func
  ##
  ##  devtool.func -- Development Tool Functions
  ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  devtool_require () {
      t="$1"; o="$2"; p="$3"; e="$4"; a="$5"
      v=`($t $o | head -1 | awk "{ print \\\$$p; }") 2>/dev/null`
      if [ ".$v" = . ]; then
          echo "devtool:ERROR: unable to determine version of $t" 1>&2
          exit 1
      fi
      case "$v" in
          $e )
              ;;
          $a )
              echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
              ;;
          * )
              echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
              exit 1
              ;;
      esac
      echo "$v"
  }
  
  devtool_autogen () {
      tool=$1
      shift
      case $tool in
          autoconf )
              autoconf_version=`devtool_require autoconf --version 4 "$1" "$2"`
              echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
              autoconf
              autoheader 2>&1 | grep -v "is unchanged"
              rm -rf autom4te.cache >/dev/null 2>&1
              ;;
          libtool )
              libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
              echo "generating (GNU Libtool $libtoolize_version): ltmain.sh, libtool.m4, config.guess, config.sub"
              libtoolize --force --copy >/dev/null 2>&1
              cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
                  sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` libtool.m4
              ;;
          shtool )
              shtoolize_version=`devtool_require shtoolize -v 3 "$1" "$2"`
              echo "generating (GNU Shtool $shtoolize_version): shtool"
              shift
              shift
              shtoolize -q "$@"
              ;;
      esac
  }
  
  devtool_autoclean () {
      tool=$1
      shift
      case $tool in
          autoconf )
              echo "removing: configure config.h.in"
              rm -f configure config.h.in
              ;;
          libtool )
              echo "removing: ltmain.sh libtool.m4 config.guess config.sub"
              rm -f ltmain.sh libtool.m4 config.guess config.sub
              ;;
          shtool )
              echo "removing: shtool"
              rm -f shtool
              ;;
      esac
  }
  
          Index: ossp-pkg/mm/mm-config.pod
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 mm-config.pod
  --- ossp-pkg/mm/mm-config.pod	26 Jul 2002 09:59:34 -0000	1.5
  +++ ossp-pkg/mm/mm-config.pod	26 Jul 2002 13:04:40 -0000	1.6
  @@ -45,11 +45,11 @@
   
   =head1 NAME
   
  -B<mm-config> - MM library configuration/build utility
  +B<mm-config> - OSSP mm library configuration/build utility
   
   =head1 VERSION
   
  -MM MM_VERSION_STR
  +OSSP mm MM_VERSION_STR
   
   =head1 SYNOPSIS
   
    Index: ossp-pkg/mm/mm.h
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 mm.h
  --- ossp-pkg/mm/mm.h	26 Jul 2002 09:59:34 -0000	1.23
  +++ ossp-pkg/mm/mm.h	26 Jul 2002 13:04:40 -0000	1.24
  @@ -72,7 +72,7 @@
   
   #if defined(MM_PRIVATE)
   
  -#include "mm_conf.h"
  +#include "config.h"
   
   #include <errno.h>
   #include <limits.h>
  Index: ossp-pkg/mm/mm.pod
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 mm.pod
  --- ossp-pkg/mm/mm.pod	26 Jul 2002 09:59:34 -0000	1.18
  +++ ossp-pkg/mm/mm.pod	26 Jul 2002 13:04:40 -0000	1.19
  @@ -45,11 +45,11 @@
   
   =head1 NAME
   
  -B<MM - Shared Memory Library>
  +B<MM - Shared Memory Allocation>
   
   =head1 VERSION
   
  -MM MM_VERSION_STR
  +OSSP mm MM_VERSION_STR
   
   =head1 SYNOPSIS
   
  @@ -110,7 +110,7 @@
   
   =head1 DESCRIPTION
   
  -The B<MM> library is a 2-layer abstraction library which simplifies the usage
  +The B<OSSP mm> library is a 2-layer abstraction library which simplifies the usage
   of shared memory between forked (and this way strongly related) processes
   under Unix platforms. On the first (lower) layer it hides all platform
   dependent implementation details (allocation and locking) when dealing with
  @@ -118,7 +118,7 @@
   high-level malloc(3)-style API for a convenient and well known way to work
   with data-structures inside those shared memory segments. 
   
  -The abbreviation B<MM> is historically and originally comes from the phrase
  +The abbreviation B<OSSP mm> is historically and originally comes from the phrase
   ``I<memory mapped>'' as used by the POSIX.1 mmap(2) function. Because this
   facility is internally used by this library on most platforms to establish the
   shared memory segments. 
  @@ -155,7 +155,7 @@
   
   =item B<Low-Level Shared Memory API>
   
  -This is the basis of the whole B<MM> library. It provides low-level functions
  +This is the basis of the whole B<OSSP mm> library. It provides low-level functions
   for creating shared memory segments with mutual exclusion (in short I<mutex>)
   capabilities in a portable way. Internally the shared memory and mutex
   facility is implemented in various platform-dependent ways. A list of
  @@ -168,10 +168,10 @@
   Internally the shared memory facility is implemented in various
   platform-dependent ways. Each way has its own advantages and disadvantages
   (in addition to the fact that some variants aren't available at all on some
  -platforms). The B<MM> library's configuration procedure tries hard to make a
  +platforms). The B<OSSP mm> library's configuration procedure tries hard to make a
   good decision. The implemented variants are now given for overview and
   background reasons with their advantages and disadvantages and in an ascending
  -order, i.e. the B<MM> configuration mechanism chooses the last available one
  +order, i.e. the B<OSSP mm> configuration mechanism chooses the last available one
   in the list as the preferred variant.
   
   =over 4
  @@ -211,7 +211,7 @@
   
   As for the shared memory facility, internally the locking facility is
   implemented in various platform-dependent ways. They are again listed
  -in ascending order, i.e. the B<MM> configuration mechanism chooses the
  +in ascending order, i.e. the B<OSSP mm> configuration mechanism chooses the
   last available one in the list as the preferred variant. The list of
   implemented variants is:
   
  @@ -367,7 +367,7 @@
   
   =item char *B<MM_error>(void);
   
  -Returns the last error message which occurred inside the B<MM> library.
  +Returns the last error message which occurred inside the B<OSSP mm> library.
   
   =back
   
  @@ -469,7 +469,7 @@
   
   =item char *B<mm_error>(void);
   
  -Returns the last error message which occurred inside the B<MM> library.
  +Returns the last error message which occurred inside the B<OSSP mm> library.
   
   =item void B<mm_display_info>(MM *I<mm>);
   
  @@ -538,8 +538,8 @@
   to the next virtual memory I<page> boundary used by the underlaying platform.
   The memory page boundary under Unix platforms is usually somewhere between
   2048 and 16384 bytes. You do not have to align the I<size> arguments of other
  -B<MM> library functions yourself, because this is already done internally.
  -This function is exported by the B<MM> library just for convenience reasons in
  +B<OSSP mm> library functions yourself, because this is already done internally.
  +This function is exported by the B<OSSP mm> library just for convenience reasons in
   case an application wants to perform similar calculations for other purposes.
   
   =item size_t B<mm_core_align2word>(size_t I<size>);
  @@ -547,9 +547,9 @@
   This is another utility function which can be used to align the number I<size>
   to the next virtual memory I<word> boundary used by the underlaying platform.
   The memory word boundary under Unix platforms is usually somewhere between 4
  -and 16 bytes.  You do not have to align the I<size> arguments of other B<MM>
  +and 16 bytes.  You do not have to align the I<size> arguments of other B<OSSP mm>
   library functions yourself, because this is already done internally.  This
  -function is exported by the B<MM> library just for convenience reasons in case
  +function is exported by the B<OSSP mm> library just for convenience reasons in case
   an application wants to perform simular calculations for other purposes.
   
   =back
  @@ -572,9 +572,9 @@
   =item int B<mm_lib_version>(void);
   
   This function returns a hex-value ``0xI<V>I<RR>I<T>I<LL>'' which describes the
  -current B<MM> library version. I<V> is the version, I<RR> the revisions, I<LL>
  +current B<OSSP mm> library version. I<V> is the version, I<RR> the revisions, I<LL>
   the level and I<T> the type of the level (alphalevel=0, betalevel=1,
  -patchlevel=2, etc). For instance B<MM> version 1.0.4 is encoded as 0x100204.
  +patchlevel=2, etc). For instance B<OSSP mm> version 1.0.4 is encoded as 0x100204.
   The reason for this unusual mapping is that this way the version number is
   steadily I<increasing>.
   
  @@ -604,14 +604,7 @@
   
   =head1 HOME
   
  -=for html 
  -<a href="http://www.engelschall.com/sw/mm/">http://www.engelschall.com/sw/mm/</a>
  -
  -=for text 
  -http://www.engelschall.com/sw/mm/
  -
  -=for man 
  -http://www.engelschall.com/sw/mm/
  +http://www.ossp.org/pkg/lib/mm/
   
   =head1 HISTORY
   
  @@ -624,6 +617,9 @@
   derived from the non-publically available I<mm_malloc> library written in
   October 1997 by I<Charles Randall> <crandall@matchlogic.com> for MatchLogic,
   Inc.
  +
  +In 2000 this library joined the B<OSSP> project where all other software
  +development projects of I<Ralf S. Engelschall> are located.
   
   =head1 AUTHOR
   
    Index: ossp-pkg/mm/mm_core.c
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 mm_core.c
  --- ossp-pkg/mm/mm_core.c	26 Jul 2002 09:59:34 -0000	1.13
  +++ ossp-pkg/mm/mm_core.c	26 Jul 2002 13:04:40 -0000	1.14
  @@ -515,7 +515,7 @@
   int mm_core_lock(const void *core, mm_lock_mode mode)
   {
       mem_core *mc;
  -    int rc;
  +    int rc = 0;
       int fdsem;
   
       if (core == NULL)
  @@ -576,7 +576,7 @@
   int mm_core_unlock(const void *core)
   {
       mem_core *mc;
  -    int rc;
  +    int rc = 0;
       int fdsem;
   
       if (core == NULL)
  Index: ossp-pkg/mm/mm_vers.c
  ============================================================
  $ cvs diff -u -r1.37 -r1.38 mm_vers.c
  --- ossp-pkg/mm/mm_vers.c	29 Jan 2001 20:28:33 -0000	1.37
  +++ ossp-pkg/mm/mm_vers.c	26 Jul 2002 13:04:40 -0000	1.38
  @@ -1,5 +1,5 @@
   /*
  -**  mm_vers.c -- Version Information for MM (syntax: C/C++)
  +**  mm_vers.c -- Version Information for OSSP mm (syntax: C/C++)
   **  [automatically generated and maintained by GNU shtool]
   */
   
  @@ -8,7 +8,7 @@
   #ifndef _MM_VERS_C_
   #define _MM_VERS_C_
   
  -#define MM_VERSION 0x101204
  +#define MM_VERSION 0x102200
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _MM_VERS_C_AS_HEADER_
   
   mm_version_t mm_version = {
  -    0x101204,
  -    "1.1.4",
  -    "1.1.4 (29-Jan-2001)",
  -    "This is MM, Version 1.1.4 (29-Jan-2001)",
  -    "MM 1.1.4 (29-Jan-2001)",
  -    "MM/1.1.4",
  -    "@(#)MM 1.1.4 (29-Jan-2001)",
  -    "$Id: MM 1.1.4 (29-Jan-2001) $"
  +    0x102200,
  +    "1.2.0",
  +    "1.2.0 (26-Jul-2002)",
  +    "This is OSSP mm, Version 1.2.0 (26-Jul-2002)",
  +    "OSSP mm 1.2.0 (26-Jul-2002)",
  +    "OSSP mm/1.2.0",
  +    "@(#)OSSP mm 1.2.0 (26-Jul-2002)",
  +    "$Id: OSSP mm 1.2.0 (26-Jul-2002) $"
   };
   
   #endif /* _MM_VERS_C_AS_HEADER_ */
  

From ossp-cvs-owner@ossp.org  Fri Jul 26 15:06:31 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2BB3076553; Fri, 26 Jul 2002 15:06:31 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm ChangeLog
Message-Id: <20020726130631.2BB3076553@mail.ossp.org>
Date: Fri, 26 Jul 2002 15:06:31 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Jul-2002 15:06:31
  Branch: HEAD                             Handle: 2002072614063000

  Modified files:
    ossp-pkg/mm             ChangeLog

  Log:
    remember more

  Summary:
    Revision    Changes     Path
    1.30        +6  -1      ossp-pkg/mm/ChangeLog
  ____________________________________________________________________________

  Index: ossp-pkg/mm/ChangeLog
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 ChangeLog
  --- ossp-pkg/mm/ChangeLog	26 Jul 2002 13:04:39 -0000	1.29
  +++ ossp-pkg/mm/ChangeLog	26 Jul 2002 13:06:30 -0000	1.30
  @@ -19,8 +19,13 @@
     *) Fixed race condition in temporary file creation.
        [Sebastian Krahmer, SuSE Security]
   
  +  *) Removed the old fbtool stuff for reporting the success/failure
  +     because after 3 years of existence we really know that OSSP mm
  +     works on every reasonable Unix flavor on this earth.
  +     [Ralf S. Engelschall]
  +
     *) Upgraded to GNU autoconf 2.53, GNU libtool 1.4.2 and GNU shtool
  -     1.6.1 build environment.
  +     1.6.1 build environment (using OSSP devtool).
        [Ralf S. Engelschall]
   
     *) Removed variables from ANSI C function prototypes in mm.h

From ossp-cvs-owner@ossp.org  Fri Jul 26 15:10:32 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9A73F76553; Fri, 26 Jul 2002 15:10:32 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm configure.ac
Message-Id: <20020726131032.9A73F76553@mail.ossp.org>
Date: Fri, 26 Jul 2002 15:10:32 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Jul-2002 15:10:32
  Branch: HEAD                             Handle: 2002072614103200

  Modified files:
    ossp-pkg/mm             configure.ac

  Log:
    fix name

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/mm/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/mm/configure.ac
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 configure.ac
  --- ossp-pkg/mm/configure.ac	26 Jul 2002 13:04:40 -0000	1.1
  +++ ossp-pkg/mm/configure.ac	26 Jul 2002 13:10:32 -0000	1.2
  @@ -23,7 +23,7 @@
   AC_SUBST(MM_VERSION_STR)
   
   dnl #   friendly header ;-)
  -echo "Configuring ${T_MD}MM${T_ME} (Shared Memory Allocation), Version ${T_MD}${MM_VERSION_STR}${T_ME}"
  +echo "Configuring ${T_MD}OSSP mm${T_ME} (Shared Memory Allocation), Version ${T_MD}${MM_VERSION_STR}${T_ME}"
   echo "Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>"
   echo "Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>"
   echo "Platform: ${T_MD}${PLATFORM}${T_ME}"

From ossp-cvs-owner@ossp.org  Fri Jul 26 15:20:19 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0A558765E7; Fri, 26 Jul 2002 15:20:19 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm .cvsignore
Message-Id: <20020726132019.0A558765E7@mail.ossp.org>
Date: Fri, 26 Jul 2002 15:20:19 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Jul-2002 15:20:18
  Branch: HEAD                             Handle: 2002072614201800

  Modified files:
    ossp-pkg/mm             .cvsignore

  Log:
    ignore more

  Summary:
    Revision    Changes     Path
    1.4         +10 -5      ossp-pkg/mm/.cvsignore
  ____________________________________________________________________________

  Index: ossp-pkg/mm/.cvsignore
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 .cvsignore
  --- ossp-pkg/mm/.cvsignore	26 Jul 2002 13:04:39 -0000	1.3
  +++ ossp-pkg/mm/.cvsignore	26 Jul 2002 13:20:18 -0000	1.4
  @@ -4,16 +4,21 @@
   *.o
   .libs
   Makefile
  +autom4te.cache
   config.cache
  +config.guess
  +config.h
  +config.h.in
   config.log
   config.status
  -config.guess
   config.sub
  +configure
   libtool
  +libtool.m4
  +ltmain.sh
   mm-config
  +mm-config.1
  +mm.3
   mm_conf.h
   mm_test
  -autom4te.cache
  -libtool.m4
  -config.h
  -config.h.in
  +shtool

From ossp-cvs-owner@ossp.org  Fri Jul 26 15:21:32 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 63D7A765E7; Fri, 26 Jul 2002 15:21:32 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm ChangeLog configure.ac mm.h
Message-Id: <20020726132132.63D7A765E7@mail.ossp.org>
Date: Fri, 26 Jul 2002 15:21:32 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Jul-2002 15:21:32
  Branch: HEAD                             Handle: 2002072614213100

  Modified files:
    ossp-pkg/mm             ChangeLog configure.ac mm.h

  Log:
    Add support for IRIX 6.5 and other Unix flavors which have MAXPATHLEN in
    <sys/param.h>
    
    Submitted by: Joe Orton <jorton@redhat.com>

  Summary:
    Revision    Changes     Path
    1.31        +4  -0      ossp-pkg/mm/ChangeLog
    1.3         +2  -1      ossp-pkg/mm/configure.ac
    1.25        +3  -0      ossp-pkg/mm/mm.h
  ____________________________________________________________________________

  Index: ossp-pkg/mm/ChangeLog
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 ChangeLog
  --- ossp-pkg/mm/ChangeLog	26 Jul 2002 13:06:30 -0000	1.30
  +++ ossp-pkg/mm/ChangeLog	26 Jul 2002 13:21:31 -0000	1.31
  @@ -16,6 +16,10 @@
   
    Changes between 1.1.3 and 1.2.0 (01-Jul-2000 to 26-Jul-2002)
   
  +  *) Add support for IRIX 6.5 and other Unix flavors which have
  +     MAXPATHLEN in <sys/param.h>
  +     [Joe Orton <jorton@redhat.com>]
  +
     *) Fixed race condition in temporary file creation.
        [Sebastian Krahmer, SuSE Security]
   
  Index: ossp-pkg/mm/configure.ac
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 configure.ac
  --- ossp-pkg/mm/configure.ac	26 Jul 2002 13:10:32 -0000	1.2
  +++ ossp-pkg/mm/configure.ac	26 Jul 2002 13:21:31 -0000	1.3
  @@ -66,9 +66,10 @@
   AC_CHECK_FUNCS(memcpy memset bcopy)
   AC_CHECK_DEFINE(_POSIX_PATH_MAX, limits.h)
   AC_CHECK_DEFINE(PATH_MAX, limits.h)
  -AC_CHECK_DEFINE(MAXPATHLEN, sys/param.h)
   AC_CHECK_DEFINE(_POSIX_CHILD_MAX, limits.h)
   AC_CHECK_DEFINE(CHILD_MAX, limits.h)
  +AC_HAVE_HEADERS(sys/param.h)
  +AC_CHECK_DEFINE(MAXPATHLEN, sys/param.h)
   
   dnl #   some special defines for brain dead platforms
   case $PLATFORM in
  Index: ossp-pkg/mm/mm.h
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 mm.h
  --- ossp-pkg/mm/mm.h	26 Jul 2002 13:04:40 -0000	1.24
  +++ ossp-pkg/mm/mm.h	26 Jul 2002 13:21:31 -0000	1.25
  @@ -80,6 +80,9 @@
   #include <fcntl.h>
   #include <sys/stat.h>
   #include <sys/types.h>
  +#ifdef HAVE_SYS_PARAM_H
  +#include <sys/param.h>
  +#endif
   
   #ifdef MM_OS_SUNOS
   #include <memory.h>

From ossp-cvs-owner@ossp.org  Fri Jul 26 15:34:53 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 75F9B76553; Fri, 26 Jul 2002 15:34:53 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm ChangeLog mm_core.c
Message-Id: <20020726133453.75F9B76553@mail.ossp.org>
Date: Fri, 26 Jul 2002 15:34:53 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Jul-2002 15:34:53
  Branch: HEAD                             Handle: 2002072614345300

  Modified files:
    ossp-pkg/mm             ChangeLog mm_core.c

  Log:
    Make sure that under MM_SEMT_IPCSEM (mutex implementation method is
    SysV IPC semget) the {mm,MM}_permission() also changes the owner of
    the semaphore.
    
    Submitted by: Jonathan Kamens <jonathank@worldwinner.com>

  Summary:
    Revision    Changes     Path
    1.32        +5  -0      ossp-pkg/mm/ChangeLog
    1.15        +27 -0      ossp-pkg/mm/mm_core.c
  ____________________________________________________________________________

  Index: ossp-pkg/mm/ChangeLog
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 ChangeLog
  --- ossp-pkg/mm/ChangeLog	26 Jul 2002 13:21:31 -0000	1.31
  +++ ossp-pkg/mm/ChangeLog	26 Jul 2002 13:34:53 -0000	1.32
  @@ -16,6 +16,11 @@
   
    Changes between 1.1.3 and 1.2.0 (01-Jul-2000 to 26-Jul-2002)
   
  +  *) Make sure that under MM_SEMT_IPCSEM (mutex implementation method is
  +     SysV IPC semget) the {mm,MM}_permission() also changes the owner of
  +     the semaphore.
  +     [Jonathan Kamens <jonathank@worldwinner.com>]
  +
     *) Add support for IRIX 6.5 and other Unix flavors which have
        MAXPATHLEN in <sys/param.h>
        [Joe Orton <jorton@redhat.com>]
  Index: ossp-pkg/mm/mm_core.c
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 mm_core.c
  --- ossp-pkg/mm/mm_core.c	26 Jul 2002 13:04:40 -0000	1.14
  +++ ossp-pkg/mm/mm_core.c	26 Jul 2002 13:34:53 -0000	1.15
  @@ -419,6 +419,11 @@
   {
       int rc;
       mem_core *mc;
  +#if defined(MM_SEMT_IPCSEM)
  +    union semun ick;
  +    struct semid_ds buf;
  +    int sems[2], i;
  +#endif
   
       if (core == NULL)
           return -1;
  @@ -435,6 +440,28 @@
           rc = -1;
       if (rc == 0 && chown(mc->mc_fnsem, owner, group) < 0)
           rc = -1;
  +#endif
  +#if defined(MM_SEMT_IPCSEM)
  +    if (rc == 0) {
  +        sems[0] = mc->mc_fdsem;
  +        sems[1] = mc->mc_fdsem_rd;
  +        ick.buf = &buf;
  +        for (i = 0; i < 2; i++) {
  +            if (semctl(sems[i], 0, IPC_STAT, ick) < 0) {
  +                rc = -1;
  +                break;
  +            }
  +            if ((int)owner != -1)
  +                buf.sem_perm.uid = owner;
  +            if ((int)group != -1)
  +                buf.sem_perm.gid = group;
  +            buf.sem_perm.mode = mode;
  +            if (semctl(sems[i], 0, IPC_SET, ick) < 0) {
  +                rc = -1;
  +                break;
  +            }
  +        }
  +    }
   #endif
       return rc;
   }

From ossp-cvs-owner@ossp.org  Fri Jul 26 15:40:42 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2B86576553; Fri, 26 Jul 2002 15:40:42 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm ChangeLog
Message-Id: <20020726134042.2B86576553@mail.ossp.org>
Date: Fri, 26 Jul 2002 15:40:42 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Jul-2002 15:40:42
  Branch: HEAD                             Handle: 2002072614404100

  Modified files:
    ossp-pkg/mm             ChangeLog

  Log:
    remember point

  Summary:
    Revision    Changes     Path
    1.33        +5  -0      ossp-pkg/mm/ChangeLog
  ____________________________________________________________________________

  Index: ossp-pkg/mm/ChangeLog
  ============================================================
  $ cvs diff -u -r1.32 -r1.33 ChangeLog
  --- ossp-pkg/mm/ChangeLog	26 Jul 2002 13:34:53 -0000	1.32
  +++ ossp-pkg/mm/ChangeLog	26 Jul 2002 13:40:41 -0000	1.33
  @@ -37,6 +37,11 @@
        1.6.1 build environment (using OSSP devtool).
        [Ralf S. Engelschall]
   
  +  *) Changed home from http://www.engelschall.com/sw/mm/ to OSSP
  +     http://www.ossp.org/pkg/lib/mm/ and official name from "MM" to
  +     "OSSP mm" to follow name conventions in the OSSP project.
  +     [Ralf S. Engelschall]
  +
     *) Removed variables from ANSI C function prototypes in mm.h
        to avoid any potential conflicts in advance.
        [Ralf S. Engelschall]

From ossp-cvs-owner@ossp.org  Fri Jul 26 15:43:09 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5676076553; Fri, 26 Jul 2002 15:43:09 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm README
Message-Id: <20020726134309.5676076553@mail.ossp.org>
Date: Fri, 26 Jul 2002 15:43:09 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Jul-2002 15:43:09
  Branch: HEAD                             Handle: 2002072614430800

  Modified files:
    ossp-pkg/mm             README

  Log:
    polishing for release

  Summary:
    Revision    Changes     Path
    1.71        +6  -7      ossp-pkg/mm/README
  ____________________________________________________________________________

  Index: ossp-pkg/mm/README
  ============================================================
  $ cvs diff -u -r1.70 -r1.71 README
  --- ossp-pkg/mm/README	26 Jul 2002 13:04:39 -0000	1.70
  +++ ossp-pkg/mm/README	26 Jul 2002 13:43:08 -0000	1.71
  @@ -1,13 +1,12 @@
  -   __  __ __  __ 
  -  |  \/  |  \/  |
  -  | |\/| | |\/| |
  -  | |  | | |  | |
  -  |_|  |_|_|  |_|
  -                 
  +   _ __ ___  _ __ ___  
  +  | '_ ` _ \| '_ ` _ \ 
  +  | | | | | | | | | | |
  +  |_| |_| |_|_| |_| |_|
  +                     
     OSSP mm - Shared Memory Allocation
     Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
     Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>
  -  Version 1.2.0
  +  Version 1.2.0 (26-Jul-2002)
   
     OSSP mm is a 2-layer abstraction library which simplifies the usage
     of shared memory between forked (and this way strongly related) processes

From ossp-cvs-owner@ossp.org  Fri Jul 26 15:48:38 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B1707765E7; Fri, 26 Jul 2002 15:48:38 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm ChangeLog mm_core.c
Message-Id: <20020726134838.B1707765E7@mail.ossp.org>
Date: Fri, 26 Jul 2002 15:48:38 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Jul-2002 15:48:38
  Branch: HEAD                             Handle: 2002072614483800

  Modified files:
    ossp-pkg/mm             ChangeLog mm_core.c

  Log:
    Fixed race condition in temporary file creation.
    
    Submitted by: Sebastian Krahmer, SuSE Security

  Summary:
    Revision    Changes     Path
    1.34        +3  -3      ossp-pkg/mm/ChangeLog
    1.16        +4  -4      ossp-pkg/mm/mm_core.c
  ____________________________________________________________________________

  Index: ossp-pkg/mm/ChangeLog
  ============================================================
  $ cvs diff -u -r1.33 -r1.34 ChangeLog
  --- ossp-pkg/mm/ChangeLog	26 Jul 2002 13:40:41 -0000	1.33
  +++ ossp-pkg/mm/ChangeLog	26 Jul 2002 13:48:38 -0000	1.34
  @@ -16,6 +16,9 @@
   
    Changes between 1.1.3 and 1.2.0 (01-Jul-2000 to 26-Jul-2002)
   
  +  *) Fixed race condition in temporary file creation.
  +     [Sebastian Krahmer, SuSE Security]
  +
     *) Make sure that under MM_SEMT_IPCSEM (mutex implementation method is
        SysV IPC semget) the {mm,MM}_permission() also changes the owner of
        the semaphore.
  @@ -24,9 +27,6 @@
     *) Add support for IRIX 6.5 and other Unix flavors which have
        MAXPATHLEN in <sys/param.h>
        [Joe Orton <jorton@redhat.com>]
  -
  -  *) Fixed race condition in temporary file creation.
  -     [Sebastian Krahmer, SuSE Security]
   
     *) Removed the old fbtool stuff for reporting the success/failure
        because after 3 years of existence we really know that OSSP mm
  Index: ossp-pkg/mm/mm_core.c
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 mm_core.c
  --- ossp-pkg/mm/mm_core.c	26 Jul 2002 13:34:53 -0000	1.15
  +++ ossp-pkg/mm/mm_core.c	26 Jul 2002 13:48:38 -0000	1.16
  @@ -249,7 +249,7 @@
   
   #if defined(MM_SHMT_MMPOSX)
       shm_unlink(fnmem); /* Ok when it fails */
  -    if ((fdmem = shm_open(fnmem, O_RDWR|O_CREAT, MM_CORE_FILEMODE)) == -1)
  +    if ((fdmem = shm_open(fnmem, O_RDWR|O_CREAT|O_EXCL, MM_CORE_FILEMODE)) == -1)
           FAIL(MM_ERR_CORE|MM_ERR_SYSTEM, "failed to open tempfile");
       if (ftruncate(fdmem, mm_core_mapoffset+size) == -1)
           FAIL(MM_ERR_CORE|MM_ERR_SYSTEM, "failed to truncate tempfile");
  @@ -275,7 +275,7 @@
   
   #if defined(MM_SHMT_MMFILE)
       unlink(fnmem);
  -    if ((fdmem = open(fnmem, O_RDWR|O_CREAT, MM_CORE_FILEMODE)) == -1)
  +    if ((fdmem = open(fnmem, O_RDWR|O_CREAT|O_EXCL, MM_CORE_FILEMODE)) == -1)
           FAIL(MM_ERR_CORE|MM_ERR_SYSTEM, "failed to open memory file");
       if (ftruncate(fdmem, mm_core_mapoffset+size) == -1)
           FAIL(MM_ERR_CORE|MM_ERR_SYSTEM, "failed to truncate memory file");
  @@ -303,13 +303,13 @@
   
   #if defined(MM_SEMT_FLOCK)
       unlink(fnsem);
  -    if ((fdsem = open(fnsem, O_RDWR|O_CREAT, MM_CORE_FILEMODE)) == -1)
  +    if ((fdsem = open(fnsem, O_RDWR|O_CREAT|O_EXCL, MM_CORE_FILEMODE)) == -1)
           FAIL(MM_ERR_CORE|MM_ERR_SYSTEM, "failed to open semaphore file");
   #endif /* MM_SEMT_FLOCK */
   
   #if defined(MM_SEMT_FCNTL)
       unlink(fnsem);
  -    if ((fdsem = open(fnsem, O_RDWR|O_CREAT, MM_CORE_FILEMODE)) == -1)
  +    if ((fdsem = open(fnsem, O_RDWR|O_CREAT|O_EXCL, MM_CORE_FILEMODE)) == -1)
           FAIL(MM_ERR_CORE|MM_ERR_SYSTEM, "failed to open semaphore file");
   #endif /* MM_SEMT_FCNTL */
   

From ossp-cvs-owner@ossp.org  Fri Jul 26 15:53:17 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D70E0765E7; Fri, 26 Jul 2002 15:53:16 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new news.txt ossp-web/pkg/lib index.wml ossp-web/...
Message-Id: <20020726135316.D70E0765E7@mail.ossp.org>
Date: Fri, 26 Jul 2002 15:53:16 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   26-Jul-2002 15:53:16
  Branch: HEAD                             Handle: 2002072614531501

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/mm     index.wml

  Log:
    release OSSP mm 1.2.0

  Summary:
    Revision    Changes     Path
    1.14        +1  -0      ossp-web/new/news.txt
    1.18        +3  -3      ossp-web/pkg/lib/index.wml
    1.5         +2  -2      ossp-web/pkg/lib/mm/index.wml
  ____________________________________________________________________________

  Index: ossp-web/new/news.txt
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 news.txt
  --- ossp-web/new/news.txt	25 Jul 2002 12:48:00 -0000	1.13
  +++ ossp-web/new/news.txt	26 Jul 2002 13:53:15 -0000	1.14
  @@ -1,3 +1,4 @@
  +26-Jul-2002: Released T<OSSP mm> 1.2.0
   25-Jul-2002: Released T<OSSP fsl> 0.1.5
   12-Jul-2002: Released T<GNU shtool> 1.6.1
   30-May-2002: Released T<OSSP lmtp2nntp> 1.2a5
  Index: ossp-web/pkg/lib/index.wml
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 index.wml
  --- ossp-web/pkg/lib/index.wml	26 Jul 2002 09:25:53 -0000	1.17
  +++ ossp-web/pkg/lib/index.wml	26 Jul 2002 13:53:16 -0000	1.18
  @@ -17,6 +17,9 @@
     <pkg_item name="str" longname="OSSP str" type="lib"
               desc="String Handling"
   			done=80 stable=none unstable=0.9.7>
  +  <pkg_item name="mm" longname="OSSP mm" type="lib"
  +            desc="Shared Memory Allocation"
  +			done=100 stable=1.2.0 unstable=none>
     <pkg_item name="sa" longname="OSSP sa" type="lib"
               desc="Socket Abstraction"
   			done=95 stable=none unstable=0.9.1>
  @@ -38,9 +41,6 @@
     <pkg_item name="cache" longname="OSSP cache" type="lib"
               desc="User-Space Cache"
   			done=15 stable=none unstable=none>
  -  <pkg_item name="mm" longname="OSSP mm" type="lib"
  -            desc="Shared Memory Allocation"
  -			done=100 stable=1.1.3 unstable=none>
     <pkg_item name="xds" longname="OSSP xds" type="lib"
               desc="Extensible Data Serialization"
   			done=95 stable=none unstable=none>
  Index: ossp-web/pkg/lib/mm/index.wml
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 index.wml
  --- ossp-web/pkg/lib/mm/index.wml	13 Jul 2002 20:09:26 -0000	1.4
  +++ ossp-web/pkg/lib/mm/index.wml	26 Jul 2002 13:53:16 -0000	1.5
  @@ -22,7 +22,7 @@
   <h2>Status</h2>
   
   <pkg_status
  -    stable="1.1.3"   stable_date="01-Jul-2000"
  +    stable="1.2.0"   stable_date="26-Jul-2002"
       unstable="none"  unstable_date="none"
   	done=100>
   
  @@ -33,5 +33,5 @@
       url=$(FTP_ROOT_URL)/pkg/lib/mm/
       directory=$(FTP_ROOT_DIR)/pkg/lib/mm/
       files="mm-*.tar.gz" 
  -	stable="mm-1.1.3.tar.gz" unstable="none">
  +	stable="mm-1.2.0.tar.gz" unstable="none">
   	

From ossp-cvs-owner@ossp.org  Fri Jul 26 16:54:20 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 34299765E7; Fri, 26 Jul 2002 16:54:20 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea.cgi
Message-Id: <20020726145420.34299765E7@mail.ossp.org>
Date: Fri, 26 Jul 2002 16:54:20 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   26-Jul-2002 16:54:20
  Branch: HEAD                             Handle: 2002072615541900

  Modified files:
    ossp-pkg/tabea          tabea.cgi

  Log:
    Redesign of HTML output

  Summary:
    Revision    Changes     Path
    1.38        +348 -166   ossp-pkg/tabea/tabea.cgi
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea.cgi
  ============================================================
  $ cvs diff -u -r1.37 -r1.38 tabea.cgi
  --- ossp-pkg/tabea/tabea.cgi	16 Jul 2002 14:49:09 -0000	1.37
  +++ ossp-pkg/tabea/tabea.cgi	26 Jul 2002 14:54:19 -0000	1.38
  @@ -263,9 +263,13 @@
       my $text = '';
   
       $text .=
  -    "<table cellspacing=0 cellpadding=0>" .
  -    "  <tr>" .
  -    "    <td>Username:</td>" .
  +    "<center>" .
  +    "<table border=0 cellspacing=0 cellpadding=0 align=center width=300>" .
  +    "<trcolspan=2>".
  +    "<th colspan=1 heigth=60 >Login<br>&nbsp;</th>".
  +    "</tr>" .
  +    "  <trcolspan =2>" .
  +    "    <td colspan=2 width=150 height=40>Username:</td>" .
       "    <td>" .
       $cgi->textfield(
           -name => 'username',
  @@ -276,7 +280,7 @@
       "    </td>" .
       "  </tr>" .
       "  <tr>" .
  -    "    <td>Password:</td>" .
  +    "    <td colspan=2 width=150>Password:</td>" .
       "    <td>" .
       $cgi->password_field(
           -name => 'password',
  @@ -287,12 +291,15 @@
       "    </td>" .
       "  </tr>" .
       "  <tr>" .
  -    "    <td colspan=2 align=right>" .
  +    "    <td colspan=2 align=right height=60>" .
       $cgi->reset() .
  +    "    </td>" .
  +    "    <td>" .
       $cgi->submit(-name => 'dialog_mainw', -value => 'login') .
       "    </td>" .
       "  </tr>" .
  -    "</table>" ;
  +    "</table>" .
  +    "</center>" .
       
       &logging("Starting Tabea");
   
  @@ -332,21 +339,46 @@
   
       $text .=
       # Begin with templates part
  +    "<center>" .
       "<br><br>" .
  -    "<table>" .
  -    "<tr>" .
  +    
  +    "<table height=60>" .
  +
       "<td>" .
  +    "<tr>" .
  +
  +    "<td width=150>" .
  +
  +    "<td width=100 valign=top align=left>" .
       "<font size=+1>" .
  -    "Active User: $username<br><br>\n" .
  +    "Active User:".
       "</font>" .
       "</td>" .
  -    "<td>" .
  +
  +    "<td width=60 valign=top align=left>".
  +    "<font size=+1 color=#FF0000>$username</font><br><br>\n" .
  +    "</td>" .
  +
  +    "</td>" .
  +
  +    "<td valign=top align=left>" .
  +    "<table>" .
  +    "<tr>" .
  +    "<td>".
       $cgi->submit(-name => 'dialog_logout', -value => 'Logout') .
  +    "</td>".
  +    "</tr>".
  +    "</table>".
       "</td>" .
  +
       "</tr>" .
  +    "</td>" .
       "</table>".
  -    "<table> <caption>Templates</caption>" .
  -    "  <td>" .
  +    
  +    "<br><br>" .
  +    "<table frame=above> <caption align=center size=+1>Templates</caption>" .
  +    "<td height=100> </td>".
  +    "  <td width=300>" .
       $cgi->scrolling_list(
           -name => 'templatelist',
           -value => [@templatesarray],
  @@ -374,9 +406,9 @@
       "</table>" .
       # Now the configuration part
       "<br><br>" .
  -    "<table> <caption>Configuration</caption>" .
  -    "<td>" .
  -    "    <td>" .
  +    "<table frame=above> <caption align=center size=+1>Configuration</caption>" .
  +    "<td height=200> </td>".
  +    "    <td width=300>" .
       $cgi->scrolling_list(
           -name => 'configslist',
           -value => [@configsarray],
  @@ -384,7 +416,7 @@
       ) .
       "   </td>" .
       "   <td>" .
  -    "     <table>" .
  +    "     <table cellspading=0 cellspacing=0 align=center>" .
       "      <tr><td>" .
       $cgi->submit(-name => 'dialog_new', -value => 'New') .
       "      </td></tr>" .
  @@ -408,8 +440,8 @@
       "      </td></tr>" .
       "    </table>" .
       "  </td>" .
  -    "<td>" .
  -    "</table>" ;
  +    "</table>" .
  +    "</center>";
   
       return $text;
   }
  @@ -489,8 +521,10 @@
                    $cgi->hidden(-name => 'editfile', -default => $filename );
           &logging("Edit file $filename");
       } else {
  -        $text .= "<font color=red>Missing filename<br><br>\n" .
  -                 $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
  +        $text .= "<br><br><br><br>" .
  +                 "<center><font color=red>Missing filename<br><br><br>\n" .
  +                 $cgi->submit(-name => 'dialog_mainw', -value => 'Back') .
  +                 "</center>";
           &logging("Missing filename");
       }
   
  @@ -515,14 +549,14 @@
       if (defined $fileout) {
           print $fileout $edittext;
           $fileout->close;
  -        $form = 'mainw';
   
  -        if($cgi->param("editfile") =~  $cfghash{'BaseDir'} . "tabea.cfg" ) {
  +        if($cgi->param("editfile") =~  ($cfghash{'BaseDir'} . "tabea.cfg") ) {
               $password = "";
           }
   
           &logging("Saving $file");
   
  +        $form = 'mainw';
           goto NEXTFORM;
       } else {
           $text .= "<font color=red>Cannot save file<br><br>\n";
  @@ -547,8 +581,11 @@
           my $filename = $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $cgi->param('templatelist');
           $text .= &editconfig($filename, 'r', $username);
       } else {
  -        $text .= "<font color=red>Missing filename<br><br>\n" .
  -        $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
  +        $text .= "<br><br><br><br>" .
  +                 "<center>" . 
  +                 "<font color=red>Missing filename<br><br><br>\n" .
  +                 $cgi->submit(-name => 'dialog_mainw', -value => 'Back').
  +                 "</center>"   ;
       }
       return $text;
   }
  @@ -561,9 +598,13 @@
       my ($dirname, $user) = @_;
       my $text = '';
   
  -    $text= "<font size=+2>" .
  -    "New File:<br><br>\n" .
  +    $text= "<center>" .
  +    "<font size=+2>" .
  +    "New File<br><br>\n" .
       "</font>" .
  +    "</center>" .
  +    "<br><br>" .
  +    "<center>" .
       "<table spacing=0 cellpadding=0>" .
       "  <tr>" .
       "    <td>New Filename: $dirname " . "/" . "$user" . "/" . "</td>" .
  @@ -589,13 +630,15 @@
       " </tr>" .
       "<tr><td><br></td></tr>" .
       "  <tr>" .
  -    "<td></td>" .
  -    "    <td colspan=2 align=left>" .
  +    "    <td align=right>" .
       $cgi->submit(-name => 'dialog_mainw', -value => 'Back') .
  +          "</td>" .
  +          "<td align=left>" .
       $cgi->submit(-name => 'dialog_newf', -value => 'Create') .
  -    "    </td>" .
  +          "</td>" .
       "  </tr>" .
  -    "</table>";
  +    "</table>" .
  +    "<center>" ;
   
       return $text;
   }
  @@ -642,11 +685,16 @@
           $text .= "<br><br><br>";
           $form = 'mainw';
           goto NEXTFORM;
  +        $text .= $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
       } else {
  -        $text .= "<font color=red>Cannot write file. File exists<br><br>\n";
  +        $text .= "<br><br><br><br>" .
  +                 "<center>" .
  +                 "<font color=red>Cannot write file. File exists<br><br><br>\n".
  +                 $cgi->submit(-name => 'dialog_mainw', -value => 'Back') .
  +                 "</center>" ;
  +
           &logging("Cannot write $newpath. File exists");
       }
  -    $text .= $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
   
       return $text;
   }
  @@ -672,12 +720,17 @@
               $defaultright = "private";
           }
   
  -        $text .= "<font size=+2>" .
  -                 "Changing rights of file:<br><br>";
  +        $text .= "<center>" .
  +                 "<font size=+2>" .
  +                 "Changing Rights of File<br><br><br>\n" .
  +                 "</font>" .
  +                 "</center>" ;
   
           $namefile =~ m{^([a-zA-Z0-9!"£\$%^&*()-_=+#~]+)/(.+)}sg;
           if ($1 eq $username) {
  -            $text .= "<table>" .
  +            $text .= "<br><br><br><br>" .
  +            "<center>" .
  +            "<table height=100 width=200>" .
               "<tr>" .
               " <td>" .
               "$namefile<br>" .
  @@ -691,10 +744,21 @@
               ) .
               " </td>" .
               "</tr>" .
  -            "</table>" .
  -            "<br><br>" .
  +
  +            "<tr>" .
  +            "<td align=right>" .
               $cgi->submit(-name => 'dialog_mainw', -value => 'Back') .
  -            $cgi->submit(-name => 'dialog_changer', -value => 'Set_rights');
  +            "</td>" .
  +            "<td>" .
  +            $cgi->submit(-name => 'dialog_changer', -value => 'Set_rights').
  +            "</td>" .
  +            "</tr>" .
  +
  +            "</td>" .
  +            "</table>" .
  +            "</center>" ;
  +
  +
               $confname = $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $namefile;
               $text .= $cgi->hidden(-name => 'filename', -default => $namefile ) ;
           }
  @@ -705,8 +769,11 @@
           }
       }
       else {
  -        $text .= "<font color=red>Missing filename<br><br>\n" .
  -                 $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
  +        $text .= "<br><br><br><br>" .
  +                 "<center>" .
  +                 "<font color=red>Missing filename<br><br><br>\n" .
  +                 $cgi->submit(-name => 'dialog_mainw', -value => 'Back') .
  +                 "</center>" ;
                    &logging("Cannot change rights of empty filename");
       }
   
  @@ -722,10 +789,13 @@
       my $text = '';
       my $filerights = '';
   
  -    $text = "<font size=+2>" .
  +    $text = "<center>" .
  +            "<font size=+2>" .
               "Changing rights of file:<br>" .
               "</font>" .
  -            "<br><font size=+1> $filename </font> to <font size=+1> $newrights </font><br>";
  +            "<br><font size=+1> $filename </font> to <font size=+1> $newrights </font><br>" .
  +            "</center>" ;
  +
       if ($newrights eq "private") {
           $filerights = '';
       }
  @@ -758,20 +828,20 @@
       if ($filename) {
           my $srcfile = $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $filename;
           $text .= $cgi->hidden(-name => 'srcfile', -default => $srcfile ) .
  +        "<center>" .
           "<font size=+1>" .
  -        "Copying File:<br>" .
  +        "Copying File<br>" .
           "</font>" .
  -        "<br><br>" .
  -        "Active user: $username<br>" .
  -        "<br>" .
  -        "<table border=1 width=50%>" .
  -        " <tr>" .
  +        "</center>".
  +        "<br><br><br>" .
  +        "<center>" .
  +        "<table width=300>" .
           "  <td>Sourcefile :</td>" .
  -        "  <td>Destinationfile</td>" .
  +        "  <td>$srcfile</td>" .
           " </tr>" .
           " <tr>" .
  -        "  <td>$srcfile</td>" .
  -        "  <td>" .
  +        "  <td>Destinationfile:</td>" .
  +        "  <td align=left>" .
           "   <table>" .
           "   <tr>" .
           "    <td>" . $cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $username . "/</td>" .
  @@ -786,23 +856,24 @@
           "   </tr>" .
           "   </table>" .
           "  </td>" .
  -        " </tr>" .
  -        "</table>" .
  -        "<br><br>" .
  -        "<table>" .
  -        " <td>" .
  -        " <td>" .
  +        "<tr>" .
  +        " <td align=right height=60>" .
           $cgi->submit(-name => 'dialog_mainw', -value => 'Back').
           " </td>" .
           " <td>" .
           $cgi->submit(-name => 'dialog_copy', -value => 'Copy').
           " </td>" .
  -        " </td>" .
  -        "</table>" ;
  +        "</tr>" .
  +        " </tr>" .
  +        "</table>" .
  +        "</center>" ;
       }
       else {
  -        $text .= "<font color=red>Missing filename<br><br>\n" .
  -                 $cgi->submit(-name => 'dialog_mainw', -value => 'Back') ;
  +        $text .= "<br><br><br><br>" .
  +                 "<center>" .
  +                 "<font color=red>Missing filename<br><br><br>\n" .
  +                 $cgi->submit(-name => 'dialog_mainw', -value => 'Back') .
  +                 "</center>" ;
       }
   
       return $text;
  @@ -828,18 +899,22 @@
               &logging("Deleting $fpath");
               $form = 'mainw';
               goto NEXTFORM;
  +            $text .= $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
           }
           else {
               $text .= "<font color=red>You can only delete file in your own directory<br><br>\n";
  -            &loggong("Just delete your own files not $fpath");
  +            &logging("Just delete your own files not $fpath");
           }
       }
       else {
  -        $text .= "<font color=red>Missing filename<br><br>\n";
  -        &loggin("Missing filename");
  -    }
  +        $text .= "<br><br><br><br>" .
  +                 "<center>" .
  +                 "<font color=red>Missing filename<br><br><br>\n" .
  +                 $cgi->submit(-name => 'dialog_mainw', -value => 'Back') .
  +                 "</center>";
   
  -    $text .= $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
  +        &logging("Missing filename");
  +    }
   
       return $text;
   }
  @@ -858,9 +933,12 @@
       my $outputtext = '';
   
       if ($runfile eq '') {
  -        $text .= "<font color=red>No configuration selected <br><br>\n" ;
  +        $text .= "<br><br><br><br>" .
  +                 "<center>" .
  +                 "<font color=red>No configuration selected <br><br><br>\n" .
  +                 $cgi->submit(-name => 'dialog_mainw', -value => 'Back') .
  +                 "</center>" ;
           &logging("Cannot run configuration without configuration");
  -        $text .= $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
           return $text;
       }
       $rcommand =~ s|%{profile}%|$rpath|s;
  @@ -869,10 +947,11 @@
           system("/bin/rm $output");
       }
   
  -    $text .= "<font size=+2>" .
  -             "Running Configuration: $rpath<br><br>\n" .
  +    $text .= "<center>" .
  +             "<font size=+2>" .
  +             "Running Configuration<br><br>\n" .
                "</font>" .
  -             "<br><br>" ;
  +             "</center>" ;
   
       system("$rcommand > $output 2>&1");
       &logging("Running command $rcommand");
  @@ -891,13 +970,36 @@
               -columns => 80
           };
           $outputhash->{readonly} = "";
  -        $text .= $cgi->textarea($outputhash) . "<br>";
  +
  +        $text .= "<center>" ."<br>".
  +                 "<table width=575>" .
  +                 "<td>" .
  +                 "Configuration filename:" .
  +                 "</td>" .
  +                 "<td align=right>" .
  +                 $rpath .
  +                 "</td>" .
  +                 "</table>" .
  +                 "<br><br>" .
  +                 $cgi->textarea($outputhash) . 
  +                 "<br><br>" .
  +                 "<table>" .
  +                 "<tr>" .
  +                 "<td align=center width=575 height=60>" .
  +                 $cgi->submit(-name => 'dialog_mainw', -value => 'Back') .
  +                 "</td>" .
  +                 "</tr>" .
  +                 "</table>" .
  +                 "</center>" ;
       }
       else {
  -        $text .= "<font color=red>Run command not working<br><br>\n";
  +        $text .= "<center>" .
  +                 "<font color=red>Run command not working<br><br>\n" .
  +                 $cgi->submit(-name => 'dialog_mainw', -value => 'Back') .
  +                 "</center>" ;
  +
           &logging("Run command $rcommand not working");
       }
  -    $text .= $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
   
       return $text;
   }
  @@ -913,9 +1015,17 @@
       my @userlistarray = split(/\s/, $userlist);
      
       $akt_user = $username; 
  -    &logging("Using admin section");
  -    $text .= "<table>" .
  -    "<td>".
  +
  +    $text .= "<center>" .
  +             "<font size=+2>" .
  +             "Administration<br><br>\n" .
  +             "</font>" .
  +             "</center>" ;
  +
  +    $text .= "<br><br><br>" .
  +    "<center>" .
  +    "<table width=300 frame=hsides>" .
  +    "<td align=left>".
   
   
   #    $cgi->popup_menu(
  @@ -936,17 +1046,16 @@
       $text .= "</select>" .
   
       "</td>" .
  -    "<td>" .
  +    "<td align=right>" .
   
       "<table>" .
  -
       "<tr>" .
  -    "<td>" .
  +    "<td align=right>" .
       $cgi->submit(-name => 'dialog_nuser', -value => 'New User').
       "</td>" .
       "</tr>" .
       "<tr>" .
  -    "<td>" .
  +    "<td align=right>" .
       $cgi->submit(-name => 'dialog_duser', -value => 'Del User').
       "</td>" .
       "</tr>" .
  @@ -956,12 +1065,13 @@
       "</td>" .
       "</table>" .
   
  -    "<br><br>" .
  -    "<table>" .
  -    "<td>" .
  +    "<br><br><br>" .
  +    "<table height=60 frame=hsides>" .
  +    
  +    "<td align=left>" .
       $cgi->submit(-name => 'dialog_cfgedit', -value => 'Edit Configuration') .
       "</td>" .
  -    "<td>" .
  +    "<td align=right>" .
       $cgi->submit(-name => 'dialog_chpwd', -value => 'Change Password') .
       "</td>" .
   
  @@ -969,7 +1079,8 @@
   
   
       "<br><br>" .
  -    $cgi->submit(-name => 'dialog_mainw', -value => 'Back') ;
  +    $cgi->submit(-name => 'dialog_mainw', -value => 'Back') .
  +    "</center>" ;
   
   
   
  @@ -983,12 +1094,30 @@
   ########################################################################################
       my ($user) = @_;
       my $ctext;
  +    my $texttitle;
  +
  +    if ($user =~ $cfghash{'TabeaUser'}) {
  +        $texttitle = "Administration: Change Password";
  +    } else {
  +        $texttitle = "Change Password";
  +    }
   
  -    $ctext .= "<br>Changing the password of $user<br><br>";
  -    $ctext .= "<table cellspacing=0 cellpadding=0>" ;
  +
  +    $ctext .= "<center>" .
  +              "<font size=+2>" .
  +              $texttitle . "<br><br>\n" .
  +              "</font>" .
  +              "</center>" ;
  +
  +    $ctext .= "<center>" .
  +              "<table cellspacing=0 cellpadding=0 width=500>" ;
       if ( (($username eq $cfghash{'TabeaUser'}) && ($user eq $cfghash{'TabeaUser'}) )
              || ($username ne $cfghash{'TabeaUser'}) ) { 
  -    $ctext .= "  <tr>" .
  +    $ctext .= "<tr height=80>" .
  +              "<td>Changing the password of </td><td align=left>$user</td>" .
  +        "</tr>" .
  +
  +        "<tr>" .
           "    <td>Old Password:</td>" .
           "    <td>" .
           $cgi->password_field(
  @@ -999,8 +1128,7 @@
           ) .
           "    </td>" .
           "  </tr>" ; 
  -    }
  -
  +    } 
   
       $ctext .= "  <tr>" .
       "    <td>New Password:</td>" .
  @@ -1025,19 +1153,22 @@
       ) .
       "    </td>" .
       "  </tr>" . 
  -    "  <tr>" .
  -    "    <td colspan=2 align=right>" .
  -    $cgi->reset() ;
  +    "  <tr height=60>" .
  +    "    <td align=left>" ;
       if ( $cgi->param('username') eq $cfghash{'TabeaUser'}) {
           $ctext .= $cgi->submit(-name => 'dialog_admin', -value => 'Back');
       } else {
           $ctext .= $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
       }
  -
  -    $ctext .= $cgi->submit(-name => 'dialog_changepwd', -value => 'Change') .
  -    "    </td>" .
  -    "  </tr>" . 
  -    "</table>" ;
  +    $ctext .= "</td>" .
  +              "<td align=left>" .
  +              $cgi->reset() .
  +              $cgi->submit(-name => 'dialog_changepwd', -value => 'Change') .
  +              "</td>" .
  +              "</tr>" .
  +              "</td>" . 
  +              "</table>" .
  +              "</center>" ;
       
       return $ctext;
       
  @@ -1066,13 +1197,15 @@
           $valid = 1; 
       }
       if ( !$valid ) {
  -        $cptext .= "<font color=red>The password is incorrect.<br><br>\n";
  +        $cptext .= "<center>" .
  +                   "<font color=red>The password is incorrect.<br><br>\n";
           &logging("Password is incorrect");
           if ( $cgi->param('username') eq $cfghash{'TabeaUser'}) {
               $cptext .= $cgi->submit(-name => 'dialog_admin', -value => 'Back');
           } else {
               $cptext .= $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
           }
  +        $cptext .= "</center>";
       } else {
           if ($new1_password eq $new2_password) {
               $pwdfp = IO::File->new("<$pwdfile");
  @@ -1093,9 +1226,11 @@
               $form = 'mainw';
               goto NEXTFORM;
           } else {
  -          $cptext .= "<font color=red>The password you typed do not match. Type the same password. ".
  -            "in both boxes<br><br>\n".
  -            $cgi->submit(-name => 'dialog_mainw', -value => 'Back');
  +          $cptext .= "<center>" .
  +                     "<font color=red>The password you typed do not match. Type the same password. ".
  +                     "in both boxes<br><br>\n".
  +                     $cgi->submit(-name => 'dialog_mainw', -value => 'Back') .
  +                     "</center>" ;
               &logging("The password in the two boxes are not the same");
           } 
       }
  @@ -1111,12 +1246,18 @@
   ########################################################################################
       my $text;
   
  -    $text .= 
  -    "Akt User: $akt_user" .
  -    "<table cellspacing=0 cellpadding=0>" .
  -    "  <tr>" .
  -    "    <td>New User:</td>" .
  -    "    <td>" .
  +    $text .= "<center>" .
  +    "<font size=+2>" .
  +    "Administration: New User<br><br>\n" .
  +    "</font>" .
  +    "</center>" .
  +
  +    "<br><br><br>" .
  +    "<center>" .
  +    "<table>" .
  +    "<tr height=60>" .
  +    "<td>New User:</td>" .
  +    "<td>" .
       $cgi->textfield(
           -name => 'akt_user',
           -default => "",
  @@ -1126,20 +1267,17 @@
       ) .
       "    </td>" .
       "  </tr>" .
  -    "</table>" .
  -  
  -    "<br><br>" .
  - 
  -    "<table>" . 
   
  -    "<td>" .
  +    "<tr height=60>" .
  +    "<td align=right>" .
       $cgi->submit(-name => 'dialog_admin', -value => 'Back').
       "</td>" .
       "<td>" .
  -    $cgi->submit(-name => 'dialog_newuser', -value => 'Write User').
  +    $cgi->submit(-name => 'dialog_newuser', -value => 'Create User').
       "</td>" .
  -
  -    "</table>" ;
  +    "</tr>" .
  +    "</table>" .
  +    "</center>" ;
       
       
       return $text;
  @@ -1165,11 +1303,19 @@
           $nuser = "";
       }
   
  +    $ntext .= "<center>" .
  +      "<font size=+2>" .
  +      "Administration: New User<br><br>\n" .
  +      "</font>" .
  +      "</center>"  ;
  +
       if ( $nuser eq  "" ) {
  -        $ntext .= "<font color=red>" .
  +        $ntext .= "<center>".
  +        "<font color=red>" .
           "<br>Username wrong<br><br>" .
           "</font>" .
  -        $cgi->submit(-name => 'dialog_admin', -value => 'Back');
  +        $cgi->submit(-name => 'dialog_admin', -value => 'Back') .
  +        "</center>" ;
           &logging("Username is wrong");
       } else {
           $pwdin = IO::File->new("<$pwdfile");
  @@ -1207,17 +1353,21 @@
               }
   
              
  -            $ntext .= "<font color=red>" .
  +            $ntext .= "<enter>".
  +                "<font color=red>" .
                   "User $nuser created</font><br><br>" .
  -                $cgi->submit(-name => 'dialog_admin', -value => 'Back');    
  +                $cgi->submit(-name => 'dialog_admin', -value => 'Back').
  +                "</center>" ;
                   &logging("New use $nuser created");
                   
   
           } else {
  -            $ntext .= "<font color=red>" .
  +            $ntext .= "<center>" .
  +            "<font color=red>" .
               "<br>User exists <br><br>" .
               "</font>" .
  -            $cgi->submit(-name => 'dialog_admin', -value => 'Back');
  +            $cgi->submit(-name => 'dialog_admin', -value => 'Back') .
  +            "</center>";
               &logging("Cannot create user $nuser. The user exists.")
           }
       }
  @@ -1239,24 +1389,24 @@
       }
   
       if (! $derror ) {
  -        $text .= 
  -    
  -        "<table>" .
  +        $text .= "<center>" .
  +        "<font size=+2>" .
  +        "Administration: Delete User<br><br>\n" .
  +        "</font>" .
  +        "</center>" .
  +        "<br><br><br>" .
  +        "<center>" . 
  +        "<table width=200>" .
           "<td>" .
  -        "<font color=red>" . 
           "User to delete :" .
  -        "</font>" .
           "</td>".
  -
           "<td>" .
  +        "<font color=red>" . 
           "$duser" .
  +        "</font>" .
           "</td>" .
  -
  -    
           "</table>" .
  -
           "<br><br>" .
  -
   #    $cgi->checkbox(-name=>'del_u_files',
   #                   -value=>'del_files',
   #                   -checked=>'',
  @@ -1264,20 +1414,16 @@
   #                   -checked=> 
   #                  ) .
           "<input type=\"checkbox\" name=\"del_u_files\" value=\"del_files\" />Delete files of user" .
  -
  -        "<br><br><br>" .
  -
  -        "<table>" .
  -
  -        "<td>" .
  +        "<br><br>" .
  +        "<table width=200 height=60>" .
  +        "<td align=right>" .
           $cgi->submit(-name => 'dialog_admin', -value => 'Back').
           "</td>" .
           "<td>" .
           $cgi->submit(-name => 'dialog_d2user', -value => 'Del User').
           "</td>" .
  -
  -        "</table>" ;
  -
  +        "</table>" .
  +        "</center>" ;
       } else {
           $text .=
           "<font color=red>" .
  @@ -1301,17 +1447,23 @@
       my ($duser) = @_;
       my $dtext;
   
  -    $dtext .= 
  -    
  +    $dtext .= "<center>" .
  +    "<font size=+2>" .
  +    "Administration: Delete User<br><br>\n" .
  +    "</font>" .
  +    "</center>" .
  +    "<br><br><br>" .
  +   
  +    "<center>" . 
       "<table>" .
       "<td>" .
  -    "<font color=red>" . 
       "User to delete :" .
  -    "</font>" .
       "</td>".
   
       "<td>" .
  +    "<font color=red>" . 
       "$duser" .
  +    "</font>" .
       "</td>" .
       
       "</table>" ;
  @@ -1333,7 +1485,8 @@
       $cgi->submit(-name => 'dialog_d3user', -value => 'Really delete user').
       "</td>" .
   
  -    "</table>" ;
  +    "</table>" .
  +    "</center>" ;
   
   
       return $dtext;
  @@ -1355,17 +1508,24 @@
       my $uname;
   
   
  -    $d3text .= 
  -    
  +    $d3text .= "<center>" .
  +    "<font size=+2>" .
  +    "Administration: Delete User<br><br>\n" .
  +    "</font>" .
  +    "</center>" .
  +    "<br><br><br>" .
  +   
  +    "<center>" . 
       "<table>" .
       "<td>" .
  -    "<font color=red>" . 
  -    "User to delete :" .
  -    "</font>" .
  +    "Deleting user:" .
       "</td>".
   
       "<td>" .
  +
  +    "<font color=red>" . 
       "$duser" .
  +    "</font>" .
       "</td>" .
       
       "</table>" .
  @@ -1401,7 +1561,8 @@
   
       $d3text .= "<br>" .
   
  -    $cgi->submit(-name => 'dialog_admin', -value => 'Back');
  +    $cgi->submit(-name => 'dialog_admin', -value => 'Back') .
  +    "</center>" ;
   
   
       return $d3text;
  @@ -1430,10 +1591,15 @@
       my ($srcf, $dstf) = @_;
       my $text = '';
   
  -    $text .= "<font size=+1>" .
  +    $text .= "<center>" .
  +             "<font size=+1>" .
                "Copying File:<br>" .
  -             "</font><br><br>" .
  -             "Copying from <font size=+1>$srcf</font> to <font size=+1>$dstf</font><br><br>";
  +             "</font>" .
  +             "</center>" .
  +             "<br><br>" .
  +             "<center>" .
  +             "Copying from <font size=+1>$srcf</font> to <font size=+1>$dstf</font><br><br>".
  +             "</center>" ;
   
       system("cp $srcf $dstf") && die "Cannot copy file";
       system("chmod o= $dstf") && die "Cannot change file rights";
  @@ -1601,27 +1767,43 @@
       if ($mode eq 'r') {
           $textahash->{readonly}="";
       }
  -    $texte .= "<font size=+2>" .
  -              $titletext . ":   <br><br>\n" .
  -              "</font>" .
  -              "<font size=+1>" .
  -              "File: $file<br><br>\n" .
  +    $texte .= "<center>" .
  +              "<font size=+2>" .
  +              $titletext . "<br><br>\n" .
                 "</font>" .
  +              "</center>" .
  +              "<br>" .  
  +              "<center>" .
  +              "<table width=500>" .
  +              "<td>".
  +              "<tr>" .              
  +              "<td align=center>".
  +              "<font size=+1>File:</font>" .
  +              "</td>".
  +              "<td align=center>".
  +              "<font size=+1>$file</font>".
  +              "</td>\n" .
  +              "</tr>" .
  +              "</table>" .
  +              "<br>" .
                 $cgi->textarea($textahash).
                 "<br><br>\n" .
  -              "<table>" .
  +              "<table width=500>" .
                 "  <td>" .
  -              "    <td>" .
  +              "    <td align=center>" .
                 $cgi->submit(-name => 'dialog_mainw', -value => 'Back') .
                 "   </td>";
       if ($mode eq 'w') {
  -        $texte .= "   <td>" .
  +        $texte .= "   <td align=center>" .
                     $cgi->submit(-name => 'dialog_save', -value => 'Save') .
                     "   </td>";
       }
       $texte .= "  <td>" .
                 " </td>" .
  -              "</table>";
  +              "</table>" .
  +              "</td>" .
  +              "</table>" .
  +              "</center>" ;
       return $texte;
   }
   ########################################################################################

From ossp-cvs-owner@ossp.org  Fri Jul 26 17:04:58 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4446076553; Fri, 26 Jul 2002 17:04:58 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea TODO
Message-Id: <20020726150458.4446076553@mail.ossp.org>
Date: Fri, 26 Jul 2002 17:04:58 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   26-Jul-2002 17:04:58
  Branch: HEAD                             Handle: 2002072616045700

  Modified files:
    ossp-pkg/tabea          TODO

  Log:
    Appended comment

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-pkg/tabea/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/TODO
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 TODO
  --- ossp-pkg/tabea/TODO	16 Jul 2002 14:59:43 -0000	1.4
  +++ ossp-pkg/tabea/TODO	26 Jul 2002 15:04:57 -0000	1.5
  @@ -52,5 +52,5 @@
   - Create Admin section              done [ps]
   - Create Logout Button              done [ps]
   - Use "PageTemplate" from cfg       done [ps]
  -- Optical cleanup
  +- Browser output cleanup            done [ps]
   

From ossp-cvs-owner@ossp.org  Fri Jul 26 17:05:35 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C273A76553; Fri, 26 Jul 2002 17:05:35 +0200 (CEST)
From: "Peter Smej" <ps@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tabea tabea.html
Message-Id: <20020726150535.C273A76553@mail.ossp.org>
Date: Fri, 26 Jul 2002 17:05:35 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Peter Smej
  Root:   /e/ossp/cvs                      Email:  ps@ossp.org
  Module: ossp-pkg                         Date:   26-Jul-2002 17:05:35
  Branch: HEAD                             Handle: 2002072616053500

  Modified files:
    ossp-pkg/tabea          tabea.html

  Log:
    Appended Center tag

  Summary:
    Revision    Changes     Path
    1.2         +2  -0      ossp-pkg/tabea/tabea.html
  ____________________________________________________________________________

  Index: ossp-pkg/tabea/tabea.html
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 tabea.html
  --- ossp-pkg/tabea/tabea.html	15 Apr 2002 09:39:04 -0000	1.1
  +++ ossp-pkg/tabea/tabea.html	26 Jul 2002 15:05:35 -0000	1.2
  @@ -2,8 +2,10 @@
     <head>
       <title>OSSP tabea: %%TITLE%%</title>
     </head>
  +  <center>
     <body>
       <h1>OSSP tabea</h1>
  +    </center>
       %%BODY%%
     </body>
   </html>

From ossp-cvs-owner@ossp.org  Fri Jul 26 17:30:03 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C3AE6765E7; Fri, 26 Jul 2002 17:30:02 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm ChangeLog
Message-Id: <20020726153002.C3AE6765E7@mail.ossp.org>
Date: Fri, 26 Jul 2002 17:30:02 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Jul-2002 17:30:02
  Branch: HEAD                             Handle: 2002072616300000

  Modified files:
    ossp-pkg/mm             ChangeLog

  Log:
    polish ChangeLog

  Summary:
    Revision    Changes     Path
    1.35        +12 -13     ossp-pkg/mm/ChangeLog
  ____________________________________________________________________________

  Index: ossp-pkg/mm/ChangeLog
  ============================================================
  $ cvs diff -u -r1.34 -r1.35 ChangeLog
  --- ossp-pkg/mm/ChangeLog	26 Jul 2002 13:48:38 -0000	1.34
  +++ ossp-pkg/mm/ChangeLog	26 Jul 2002 15:30:00 -0000	1.35
  @@ -1,19 +1,18 @@
  -  __  __ __  __ 
  - |  \/  |  \/  |
  - | |\/| | |\/| |
  - | |  | | |  | |
  - |_|  |_|_|  |_|
  -                 
  - MM - Shared Memory Library
  +  _ __ ___  _ __ ___  
  + | '_ ` _ \| '_ ` _ \ 
  + | | | | | | | | | | |
  + |_| |_| |_|_| |_| |_|
  +                    
  + OSSP mm - Shared Memory Allocation
   
    ChangeLog
    =========
  -     _   _ 
  -    / | / |
  -    | | | |
  -    | |_| |
  -  __|_(_)_|__________________________________________________________
  -
  +     _   ____  
  +    / | |___ \ 
  +    | |   __) |
  +    | |_ / __/ 
  +  __|_(_)_____|______________________________________________________
  +            
    Changes between 1.1.3 and 1.2.0 (01-Jul-2000 to 26-Jul-2002)
   
     *) Fixed race condition in temporary file creation.

From ossp-cvs-owner@ossp.org  Fri Jul 26 17:31:34 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4809776553; Fri, 26 Jul 2002 17:31:34 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm THANKS
Message-Id: <20020726153134.4809776553@mail.ossp.org>
Date: Fri, 26 Jul 2002 17:31:34 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Jul-2002 17:31:34
  Branch: HEAD                             Handle: 2002072616313300

  Modified files:
    ossp-pkg/mm             THANKS

  Log:
    add missing people

  Summary:
    Revision    Changes     Path
    1.12        +2  -0      ossp-pkg/mm/THANKS
  ____________________________________________________________________________

  Index: ossp-pkg/mm/THANKS
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 THANKS
  --- ossp-pkg/mm/THANKS	26 Jul 2002 09:56:41 -0000	1.11
  +++ ossp-pkg/mm/THANKS	26 Jul 2002 15:31:33 -0000	1.12
  @@ -37,7 +37,9 @@
       o  Bob Jones                   <jonesr@pjm.com>
       o  Mats Josefsson              <matjos@rsv.se>
       o  Sergey Kachanovsky          <ranger@tversu.ru>
  +    o  Jonathan Kamens             <jonathank@worldwinner.com>
       o  Martin Kraemer              <martin.kraemer@mch.sni.de>
  +    o  Sebastian Krahmer           <??>
       o  Mike Latinovich             <mlatin@boing.skysys.org>
       o  Rasmus Lerdorf              <rasmus@lerdorf.on.ca>
       o  Dave Malhotra               <davem@glue.umd.edu>

From ossp-cvs-owner@ossp.org  Sat Jul 27 17:35:24 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D5CBA76523; Sat, 27 Jul 2002 17:35:23 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.c
Message-Id: <20020727153523.D5CBA76523@mail.ossp.org>
Date: Sat, 27 Jul 2002 17:35:23 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   27-Jul-2002 17:35:23
  Branch: HEAD                             Handle: 2002072716352300

  Modified files:
    ossp-pkg/fsl            fsl.c

  Log:
    Code Review Results:
    - add more code comments
    - more safety on logging null pointers, etc.
    - more statics on internal functions
    - add missing closedir in readallfiles on CUS

  Summary:
    Revision    Changes     Path
    1.31        +280 -259   ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 fsl.c
  --- ossp-pkg/fsl/fsl.c	25 Jul 2002 16:28:43 -0000	1.30
  +++ ossp-pkg/fsl/fsl.c	27 Jul 2002 15:35:23 -0000	1.31
  @@ -50,28 +50,28 @@
   #include "cfg.h"
   #include "pcre.h"
   
  +/* autoconfiguration */
  +#include "config.h"
  +
   /* pcre static vector size */
   #define OVECSIZE 30
   
  +/* backward compatibility */
   #ifndef LOG_PRIMASK
  -#define LOG_PRIMASK (LOG_EMERG|LOG_ALERT|LOG_CRIT|LOG_ERR|LOG_WARNING|LOG_NOTICE|LOG_INFO|LOG_DEBUG)
  +#define LOG_PRIMASK (LOG_EMERG|LOG_ALERT|LOG_CRIT|LOG_ERR|\
  +                     LOG_WARNING|LOG_NOTICE|LOG_INFO|LOG_DEBUG)
   #endif
   #ifndef LOG_PRI
   #define LOG_PRI(p) ((p) & LOG_PRIMASK)
   #endif
   
  -#include "config.h"
  -#define FSL_PREFIX "fsl."
  -
  +/* cleanup sequence macros */
   #define STMT(stuff) do { stuff } while (0)
   #define CU(returncode) STMT( rc = returncode; goto CUS; )
   #define VCU STMT( goto CUS; )
   
  -typedef struct {
  -    char   *base;
  -    size_t  used;
  -    size_t  size;
  -} buf_t;
  +/* prefix of configuration files */
  +#define FSL_PREFIX "fsl."
   
   /* general return codes */
   typedef enum {
  @@ -80,18 +80,16 @@
       FSL_ERR_USE,              /* invalid use */
       FSL_ERR_MEM,              /* no more memory available */
       FSL_ERR_SYS               /* operating system error, see errno */
  -#if 0
  -    FSL_ERR_FMT,              /* formatting error */
  -    FSL_ERR_INT,              /* internal error */
  -    FSL_ERR_SYN,              /* syntax error */
  -#endif
   } fsl_rc_t;
   
  -fsl_rc_t readfileorallfiles(buf_t *, const char *);
  -fsl_rc_t readfile          (buf_t *, const char *);
  -fsl_rc_t readallfiles      (buf_t *);
  -fsl_rc_t appendfiletobuffer(buf_t *, const char *);
  +/* file buffer handling sub-API */
  +typedef struct {
  +    char   *base;
  +    size_t  used;
  +    size_t  size;
  +} buf_t;
   
  +/* mapping table for syslog(3) facilities to strings */
   static struct {
       int facility;
       char *string;
  @@ -132,6 +130,7 @@
       { -1,            NULL      }
   };
   
  +/* mapping table for syslog(3) levels/priorities strings/numbers to L2 levels */
   static struct {
       char       *string;
       int         level;
  @@ -148,6 +147,7 @@
       { NULL,      -1,          -1                }
   };
   
  +/* mapping table for L2 level strings to L2 level numbers */
   static struct {
       char *string;
       l2_level_t level;
  @@ -163,12 +163,14 @@
       { "debug",    L2_LEVEL_DEBUG,     },
       { NULL,       -1                  }
   };
  +
  +/* type of run-time syslog(3) to L2 level mapping table */
   typedef struct {
       int        syslog;
       l2_level_t l2;
   } levelmap_t;
   
  -/* internal context structure */
  +/* internal global context structure */
   static struct {
       l2_env_t     *l2_fslenv;
       l2_channel_t *l2_fslnch;
  @@ -189,19 +191,157 @@
       FALSE
   };
   
  +/* internal debugging function */
   static void fsldebug(l2_level_t level, const char *message, ...)
   {
  -    va_list args;
  +    va_list ap;
   
  -    va_start(args, message);
  +    va_start(ap, message);
       if (ctx.l2_fslnch != NULL)
  -        l2_channel_vlog(ctx.l2_fslnch, level, message, args);
  +        l2_channel_vlog(ctx.l2_fslnch, level, message, ap);
       else
  -        vfprintf(stderr, message, args);
  -    va_end(args);
  +        vfprintf(stderr, message, ap);
  +    va_end(ap);
       return;
   }
   
  +/* append contents of a file to buffer */
  +static fsl_rc_t appendfiletobuffer(buf_t *buffer, const char *filename)
  +{
  +    fsl_rc_t rc;
  +    int fd = -1;
  +    int filesize;
  +    int fileread;
  +    int bufferneed;
  +
  +    if (filename == NULL || buffer == NULL)
  +        CU(FSL_ERR_ARG);
  +
  +    fsldebug(L2_LEVEL_TRACE, "appendfiletobuffer(buffer, filename=\"%s\")\n", filename);
  +
  +    if ((fd = open(filename, O_RDONLY)) == -1)
  +        CU(FSL_ERR_SYS);
  +    if ((filesize = (int)lseek(fd, 0, SEEK_END)) == -1)
  +        CU(FSL_ERR_SYS);
  +
  +    bufferneed = buffer->used + filesize;
  +    if (bufferneed > buffer->size) {
  +        if (buffer->base == NULL) {
  +            if ((buffer->base = (char *)malloc(bufferneed)) == NULL)
  +                CU(FSL_ERR_MEM);
  +            buffer->size = bufferneed;
  +            buffer->used = 0;
  +        }
  +        else {
  +            if ((buffer->base = (char *)realloc(buffer->base, bufferneed)) == NULL)
  +                CU(FSL_ERR_MEM);
  +            buffer->size = bufferneed;
  +        }
  +    }
  +
  +    if (lseek(fd, 0, SEEK_SET) == -1)
  +        CU(FSL_ERR_SYS);
  +    if ((fileread = (int)read(fd, buffer->base + buffer->used, (size_t)filesize)) == -1)
  +        CU(FSL_ERR_SYS);
  +    if (fileread != filesize)
  +        CU(FSL_ERR_USE);
  +
  +    buffer->used += filesize;
  +    CU(FSL_OK);
  +CUS:
  +    if (fd != -1)
  +        close(fd);
  +    return rc;
  +}
  +
  +/* read a single file "fsl.xxx" into buffer */
  +static fsl_rc_t readfile(buf_t *buffer, const char *ident)
  +{
  +    fsl_rc_t rc;
  +    char *filename = NULL;
  +
  +    if (ident == NULL || buffer == NULL)
  +        CU(FSL_ERR_ARG);
  +    fsldebug(L2_LEVEL_TRACE, "readfile(buffer, ident=\"%s\")\n", ident);
  +
  +    if ((filename = (char *)malloc(strlen(FSL_CFGDIR) + 1 + 
  +                                   strlen(FSL_PREFIX) + strlen(ident) + 1)) == NULL)
  +        CU(FSL_ERR_MEM);
  +    filename[0] = '\0';
  +    strcat(filename, FSL_CFGDIR);
  +    strcat(filename, "/");
  +    strcat(filename, FSL_PREFIX);
  +    strcat(filename, ident);
  +
  +    CU(appendfiletobuffer(buffer, filename));
  +CUS:
  +    if (filename != NULL)
  +        free(filename);
  +    return rc;
  +}
  +
  +/* read all possible files "fsl.*" into buffer */
  +static fsl_rc_t readallfiles(buf_t *buffer)
  +{
  +    fsl_rc_t rc;
  +    DIR *dp = NULL;
  +    struct dirent *de;
  +    char *filename = NULL;
  +    int n;
  +
  +    if (buffer == NULL)
  +        CU(FSL_ERR_ARG);
  +    fsldebug(L2_LEVEL_TRACE, "readallfiles(buffer) globbing \"%s/%s*\"\n", FSL_CFGDIR, FSL_PREFIX);
  +
  +    if ((dp = opendir(FSL_CFGDIR)) == NULL)
  +        CU(FSL_ERR_SYS);
  +
  +    rc = FSL_ERR_ARG;
  +    while ((de = readdir(dp)) != NULL) {
  +        n = strlen(de->d_name);
  +        if (   (n >= strlen(FSL_PREFIX))
  +            && (strncmp(de->d_name, FSL_PREFIX, strlen(FSL_PREFIX)) == 0)) {
  +            if ((filename = (char *)malloc(strlen(FSL_CFGDIR) + 1 + n + 1)) == NULL)
  +                CU(FSL_ERR_MEM);
  +            filename[0] = '\0';
  +            strcat(filename, FSL_CFGDIR);
  +            strcat(filename, "/");
  +            strcat(filename, de->d_name);
  +            if (appendfiletobuffer(buffer, filename) == FSL_OK)
  +                rc = FSL_OK;
  +            free(filename);
  +            filename = NULL;
  +        }
  +    }
  +    closedir(dp);
  +    CU(rc);
  +CUS:
  +    if (dp != NULL)
  +        closedir(dp);
  +    if (filename != NULL)
  +        free(filename);
  +    return rc;
  +}
  +
  +/* read a single or all possible files */
  +static fsl_rc_t readfileorallfiles(buf_t *buffer, const char *ident)
  +{
  +    fsl_rc_t rv;
  +
  +    if (ident == NULL)
  +        return FSL_ERR_ARG;
  +    fsldebug(L2_LEVEL_TRACE, "readfileorallfiles(buffer, ident=\"%s\")\n", ident);
  +
  +    if ((rv = readfile(buffer, ident)) == FSL_OK)
  +        return FSL_OK;
  +    if (rv != FSL_ERR_SYS || errno != ENOENT)
  +        return rv;
  +    if ((rv = readallfiles(buffer)) != FSL_OK)
  +        return rv;
  +    return FSL_OK;
  +}
  +
  +/* OSSP cfg node tree traversal function (recursive) */
   static void traverse(cfg_t *cfg, cfg_node_t *cfgnode)
   {
       int rc;
  @@ -213,25 +353,25 @@
   
       while (cfgnode != NULL) {
           if ((cfgrv = cfg_node_get(cfg, cfgnode, CFG_NODE_ATTR_TOKEN, &cp)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_get(CFG_NODE_ATTR_TOKEN) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "traverse: cfg_node_get(CFG_NODE_ATTR_TOKEN) failed: %s (%d)\n", cp, cfgrv); CU(1); }
           if ((cfgrv = cfg_node_get(cfg, cfgnode, CFG_NODE_ATTR_TYPE, &cfgtyp)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "traverse: cfg_node_get(CFG_NODE_ATTR_TYPE) failed: %s (%d)\n", cp, cfgrv); CU(1); }
           if ((cfgrv = cfg_node_get(cfg, cfgnode, CFG_NODE_ATTR_CHILDS, &cfgchilds)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_get(CFG_NODE_ATTR_CHILDS) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  -        fsldebug(L2_LEVEL_DEBUG, "cfgnode=0x%.8lx[%d], *cp=\"%s\", type=%d\n", (unsigned long)cfgnode, cfgchilds, cp, cfgtyp);
  +            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "traverse: cfg_node_get(CFG_NODE_ATTR_CHILDS) failed: %s (%d)\n", cp, cfgrv); CU(1); }
  +        fsldebug(L2_LEVEL_DEBUG, "traverse: cfgnode=0x%.8lx[%d], cp=\"%s\", type=%d\n", (unsigned long)cfgnode, cfgchilds, (cp != NULL ? cp : "<NULL>"), cfgtyp);
           if ((cfgrv = cfg_node_get(cfg, cfgnode, CFG_NODE_ATTR_CHILD1, &cfgchld)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_get(CFG_NODE_ATTR_CHILD1) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "traverse: cfg_node_get(CFG_NODE_ATTR_CHILD1) failed: %s (%d)\n", cp, cfgrv); CU(1); }
           if (cfgchld != NULL)
               traverse(cfg, cfgchld);
           if ((cfgrv = cfg_node_get(cfg, cfgnode, CFG_NODE_ATTR_RBROTH, &cfgnode)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_get(CFG_NODE_ATTR_RBROTH) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "traverse: cfg_node_get(CFG_NODE_ATTR_RBROTH) failed: %s (%d)\n", cp, cfgrv); CU(1); }
       }
       CU(0);
   CUS:
       return;
   }
   
  -/* Substitutes $[0-9] in inbuf[inlen] with captured strings passed through capary[nary].
  +/* Substitute $[0-9] in inbuf[inlen] with captured strings passed through capary[nary].
    * Returns the number of characters (to be) written to output.  Output can be suppressed
    * by passing a NULL outpbuf. The terminating NUL is not counted but will be written!
    */
  @@ -251,7 +391,7 @@
               if (c == '$') {
                   if (outbuf != NULL)
                       outbuf[n] = '$';
  -                i+=2;
  +                i += 2;
                   n++;
               }
               else if ((c >= '0') && (c <= '9')) {
  @@ -260,8 +400,8 @@
                       outbuf[n] = '\0';
                       strcat(&outbuf[n], ((m < nary) && (capary[m] != NULL)) ? capary[m] : "");
                   }
  -                i+=2;
  -                n+= ((m < nary) && (capary[m] != NULL)) ? strlen(capary[m]) : 0;
  +                i += 2;
  +                n += ((m < nary) && (capary[m] != NULL)) ? strlen(capary[m]) : 0;
               }
               else {
                   if (outbuf != NULL)
  @@ -286,6 +426,7 @@
       return n;
   }
   
  +/* POSIX API function openlog(3) */
   void openlog(const char *ident, int logopt, int facility)
   {
       int rc;
  @@ -315,6 +456,7 @@
       l2_channel_t *ch; /* scratch variable */
       l2_result_t   l2rv;
   
  +    /* initialization */
       cfg = NULL;
       buf.base = NULL;
       buf.used = 0;
  @@ -325,71 +467,75 @@
       /* properly handle repeated execution */
       closelog();
   
  -    /* create L2 environment for fsl itself */
  -    argl2spec = getenv("FSL_DEBUG");
  -    if (argl2spec == NULL)
  +    /* create OSSP l2 environment for fsl itself (internal logging) */
  +    if ((argl2spec = getenv("FSL_DEBUG")) == NULL)
           argl2spec = FSL_DEBUG;
  -    if (strlen(argl2spec) != 0) {
  +    if (strlen(argl2spec) > 0) {
           if ((l2rv = l2_env_create(&ctx.l2_fslenv)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "failed to create L2 environment (%d) for fsl\n", l2rv); CU(1); }
  +            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: failed to create L2 environment (%d) for fsl\n", l2rv); CU(1); }
           if ((l2rv = l2_env_levels(ctx.l2_fslenv, L2_LEVEL_ALL, L2_LEVEL_NONE)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to set global logging level defaults %s(%d) for fsl\n", cp, l2rv); CU(1); }
  +            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to set global logging level defaults %s(%d) for fsl\n", cp, l2rv); CU(1); }
           if ((l2rv = l2_env_formatter(ctx.l2_fslenv, 'D', l2_util_fmt_dump, NULL)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to register dump formatter %s(%d) for fsl\n", cp, l2rv); CU(1); }
  +            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to register dump formatter %s(%d) for fsl\n", cp, l2rv); CU(1); }
           if ((l2rv = l2_env_formatter(ctx.l2_fslenv, 'S', l2_util_fmt_string, NULL)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to register string formatter %s(%d) for fsl\n", cp, l2rv); CU(1); }
  +            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to register string formatter %s(%d) for fsl\n", cp, l2rv); CU(1); }
           if ((l2rv = l2_env_formatter(ctx.l2_fslenv, 'm', l2_util_fmt_errno, NULL)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to register errno formatter %s(%d) for fsl\n", cp, l2rv); CU(1); }
  +            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to register errno formatter %s(%d) for fsl\n", cp, l2rv); CU(1); }
           if ((l2rv = l2_channel_create(&ctx.l2_fslnch, ctx.l2_fslenv, "noop")) != L2_OK) {
  -            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to create noop channel; %s(%d)\n for fsl", cp, l2rv); CU(1); }
  +            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to create noop channel; %s(%d)\n for fsl", cp, l2rv); CU(1); }
           if ((l2rv = l2_spec(&ch, ctx.l2_fslenv, "%s", argl2spec)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to create stream from spec %s(%d) for fsl\n", cp, l2rv); CU(1); }
  +            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to create stream from spec %s(%d) for fsl\n", cp, l2rv); CU(1); }
           if ((l2rv = l2_channel_link(ctx.l2_fslnch, L2_LINK_CHILD, ch, NULL)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to link child channel %s(%d) for fsl\n", cp, l2rv); CU(1); }
  +            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to link child channel %s(%d) for fsl\n", cp, l2rv); CU(1); }
           if ((l2rv = l2_channel_open(ctx.l2_fslnch)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to open channel stream %s(%d) for fsl\n", cp, l2rv); CU(1); }
  -        fsldebug(L2_LEVEL_TRACE, "captured openlog(ident=\"%s\", logopt=0x%.8lx, facility=0x%.8lx)", ident, logopt, facility);
  +            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to open channel stream %s(%d) for fsl\n", cp, l2rv); CU(1); }
       }
   
  +    /* tracing */
  +    if (ctx.l2_fslnch != NULL)
  +        fsldebug(L2_LEVEL_TRACE, "openlog(ident=\"%s\", logopt=0x%.8lx, facility=0x%.8lx)", ident, logopt, facility);
  +
       /* remember logopt and handle unsupported values */
       ctx.logopt = logopt;
       if (logopt & LOG_CONS)
  -        fsldebug(L2_LEVEL_WARNING, "ignored unsupported logopt LOG_CONS");
  +        fsldebug(L2_LEVEL_WARNING, "openlog: ignore unsupported LOG_CONS");
   #ifdef LOG_PERROR
       if (logopt & LOG_PERROR)
  -        fsldebug(L2_LEVEL_WARNING, "ignored unsupported logopt LOG_PERROR, use l2spec channel \"fd(filedescriptor=2)\" to emulate");
  +        fsldebug(L2_LEVEL_WARNING, "openlog: ignore unsupported LOG_PERROR (use OSSP l2 channel \"fd(filedescriptor=2)\" to emulate)");
   #endif
       if (logopt & LOG_PID)
  -        fsldebug(L2_LEVEL_WARNING, "ignored unsupported logopt PID, use l2spec formatter %%P in prefix channel to emulate");
  +        fsldebug(L2_LEVEL_WARNING, "openlog: ignore unsupported LOG_PID (use OSSP l2 formatter %%P in prefix channel to emulate)");
   
       /* create default sysloglevel to l2_level mapping */
  -    fsldebug(L2_LEVEL_DEBUG, "create default sysloglevel to l2_level mapping\n");
  -    for (i = 0; sysloglevel2string[i].string != NULL; i++);
  +    fsldebug(L2_LEVEL_DEBUG, "openlog: create default syslog(3) to OSSP l2 level/priority mapping table\n");
  +    for (i = 0; sysloglevel2string[i].string != NULL; i++)
  +        ;
       if ((ctx.levelmap = (levelmap_t *)malloc(i * sizeof(levelmap_t))) == NULL) {
  -        fsldebug(L2_LEVEL_ERROR, "Error: malloc() failed\n"); CU(1); }
  +        fsldebug(L2_LEVEL_ERROR, "openlog: malloc() failed\n"); CU(1); }
       for (i = 0; sysloglevel2string[i].string != NULL; i++) {
           ctx.levelmap[i].syslog = sysloglevel2string[i].level;
           ctx.levelmap[i].l2     = sysloglevel2string[i].deflevelmap;
  -        fsldebug(L2_LEVEL_DEBUG, "ctx.levelmap[%d].syslog = 0x%.8lx, ctx.levelmap[%d].l2 = 0x%.8lx\n", i, (unsigned long)ctx.levelmap[i].syslog, i, (unsigned long)ctx.levelmap[i].l2);
  +        fsldebug(L2_LEVEL_DEBUG, "openlog: ctx.levelmap[%d].syslog = 0x%.8lx, ctx.levelmap[%d].l2 = 0x%.8lx\n", 
  +                 i, (unsigned long)ctx.levelmap[i].syslog, i, (unsigned long)ctx.levelmap[i].l2);
       }
   
  -    /* create L2 environment for main application */
  +    /* create OSSP l2 environment for main application */
       if ((l2rv = l2_env_create(&ctx.l2_env)) != L2_OK) {
  -        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "failed to create L2 environment: (%d)\n", l2rv); CU(1); }
  +        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: failed to create OSSP l2 environment: (%d)\n", l2rv); CU(1); }
       if ((l2rv = l2_env_levels(ctx.l2_env, L2_LEVEL_ALL, L2_LEVEL_NONE)) != L2_OK) {
  -        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to set global logging level defaults: %s(%d)\n", cp, l2rv); CU(1); }
  +        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to set global logging level defaults: %s(%d)\n", cp, l2rv); CU(1); }
       if ((l2rv = l2_env_formatter(ctx.l2_env, 'D', l2_util_fmt_dump, NULL)) != L2_OK) {
  -        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to register dump formatter: %s(%d)\n", cp, l2rv); CU(1); }
  +        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to register dump formatter: %s(%d)\n", cp, l2rv); CU(1); }
       if ((l2rv = l2_env_formatter(ctx.l2_env, 'S', l2_util_fmt_string, NULL)) != L2_OK) {
  -        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to register string formatter: %s(%d)\n", cp, l2rv); CU(1); }
  +        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to register string formatter: %s(%d)\n", cp, l2rv); CU(1); }
       if ((l2rv = l2_env_formatter(ctx.l2_env, 'm', l2_util_fmt_errno, NULL)) != L2_OK) {
  -        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to register errno formatter: %s(%d)\n", cp, l2rv); CU(1); }
  +        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to register errno formatter: %s(%d)\n", cp, l2rv); CU(1); }
       if ((l2rv = l2_channel_create(&ctx.l2_nch, ctx.l2_env, "noop")) != L2_OK) {
  -        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to create noop channel: %s(%d)\n", cp, l2rv); CU(1); }
  +        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to create noop channel: %s(%d)\n", cp, l2rv); CU(1); }
   
       /* create IdentSlashFacility */
       if ((cpIdent = strdup((ident != NULL) ? ident : "unknown")) == NULL) {
  -        fsldebug(L2_LEVEL_ERROR, "strdup() failed\n"); CU(1); }
  +        fsldebug(L2_LEVEL_ERROR, "openlog: strdup() failed\n"); CU(1); }
       cpFacility = "unknown";
       for (i = 0; syslogfacility2string[i].string != NULL; i++) {
           if (facility == syslogfacility2string[i].facility) {
  @@ -398,58 +544,60 @@
           }
       }
       if ((cpISF = (char *)malloc(strlen(cpIdent) + 1 + strlen(cpFacility) + 1)) == NULL) {
  -        fsldebug(L2_LEVEL_ERROR, "malloc() failed\n"); CU(1); }
  +        fsldebug(L2_LEVEL_ERROR, "openlog: malloc() failed\n"); CU(1); }
       cpISF[0] = '\0';
       strcat(cpISF, cpIdent);
       strcat(cpISF, "/");
       strcat(cpISF, cpFacility);
   
  +    /* read in configuration file(s) */
       if ((rv = readfileorallfiles(&buf, ident)) != FSL_OK) {
  -        fsldebug(L2_LEVEL_ERROR, "readfileorallfiles(buf, \"%s\") returned %d, system error: %s(%d)\n", ident, rv, strerror(errno), errno); CU(1); }
  +        fsldebug(L2_LEVEL_ERROR, "openlog: readfileorallfiles(buf, \"%s\") returned %d, system error: %s(%d)\n", ident, rv, strerror(errno), errno); CU(1); }
   
  +    /* import configuration buffer into OSSP cfg node tree */
       if ((cfgrv = cfg_create(&cfg)) != CFG_OK) {
  -        (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_create() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +        (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_create() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
       if ((cfgrv = cfg_import(cfg, NULL, CFG_FMT_CFG, buf.base, buf.size)) != CFG_OK) {
  -        (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_import() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +        (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_import() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
   
  -    /*  find root and check if it is a sequence and has one or more directives below it */
  +    /*  find configuration root node and check if it is a sequence and has one or more directives below it */
       if ((cfgrv = cfg_node_root(cfg, &cfgseq)) != CFG_OK) {
  -        (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_root() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +        (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_root() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
       traverse(cfg, cfgseq);
       if ((cfgrv = cfg_node_get(cfg, cfgseq, CFG_NODE_ATTR_TYPE, &cfgtype)) != CFG_OK) {
  -        (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +        (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
       if (cfgtype != CFG_NODE_TYPE_SEQ) {
  -        fsldebug(L2_LEVEL_ERROR, "expected sequence\n"); CU(1); }
  +        fsldebug(L2_LEVEL_ERROR, "openlog: expected sequence\n"); CU(1); }
       if ((cfgrv = cfg_node_get(cfg, cfgseq, CFG_NODE_ATTR_CHILDS, &cfgnumc)) != CFG_OK) {
  -        (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_get(CFG_NODE_ATTR_CHILDS) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +        (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_CHILDS) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
       if (cfgnumc < 1) {
  -        fsldebug(L2_LEVEL_ERROR, "sequence is missing directives, expected 1, got %d\n", cfgnumc); CU(1); }
  +        fsldebug(L2_LEVEL_ERROR, "openlog: sequence is missing directives, expected 1, got %d\n", cfgnumc); CU(1); }
   
       /*  get first directive below sequence */
       if ((cfgrv = cfg_node_get(cfg, cfgseq, CFG_NODE_ATTR_CHILD1, &cfgdir)) != CFG_OK) {
  -        (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_get(CFG_NODE_ATTR_CHILD1) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +        (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_CHILD1) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
       while (cfgdir != NULL) {
           /*  check if operating on a directive */
           if ((cfgrv = cfg_node_get(cfg, cfgdir, CFG_NODE_ATTR_TYPE, &cfgtype)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
           if (cfgtype != CFG_NODE_TYPE_DIR) {
  -            fsldebug(L2_LEVEL_ERROR, "expected directive\n"); CU(1); }
  +            fsldebug(L2_LEVEL_ERROR, "openlog: expected directive\n"); CU(1); }
           if ((cfgrv = cfg_node_get(cfg, cfgdir, CFG_NODE_ATTR_CHILDS, &cfgnumc)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_get(CFG_NODE_ATTR_CHILDS) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_CHILDS) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
   
           /*  process first child of directive, check if it is an argument and has a valid token attached */
           if ((cfgrv = cfg_node_get(cfg, cfgdir, CFG_NODE_ATTR_CHILD1, &cfgarg)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_get(CFG_NODE_ATTR_CHILD1) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_CHILD1) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
           if (cfgarg == NULL) {
  -            fsldebug(L2_LEVEL_ERROR, "first argument is NULL\n"); CU(1); }
  +            fsldebug(L2_LEVEL_ERROR, "openlog: first argument is NULL\n"); CU(1); }
           if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_TYPE, &cfgtype)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
           if (cfgtype != CFG_NODE_TYPE_ARG) {
  -            fsldebug(L2_LEVEL_ERROR, "expected first argument, got %d\n", cfgtype); CU(1); }
  +            fsldebug(L2_LEVEL_ERROR, "openlog: expected first argument, got %d\n", cfgtype); CU(1); }
           if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_TOKEN, &cfgargtok)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_get(CFG_NODE_ATTR_TOKEN) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_TOKEN) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
           if (cfgargtok == NULL) {
  -            fsldebug(L2_LEVEL_ERROR, "first argument has NULL data\n"); CU(1); }
  +            fsldebug(L2_LEVEL_ERROR, "openlog: first argument has NULL data\n"); CU(1); }
           cfgargtoka[0] = cfgargtok;
   
           cfgnume = 0;
  @@ -460,36 +608,34 @@
           if (strcmp(cfgargtoka[0], "map") == 0)
               cfgnume = 3;
           if (cfgnume == 0) {
  -            fsldebug(L2_LEVEL_ERROR, "syntax error, invalid argument \"%s\"\n", cfgargtoka[0]); CU(1); }
  +            fsldebug(L2_LEVEL_ERROR, "openlog: syntax error, invalid argument \"%s\"\n", cfgargtoka[0]); CU(1); }
           if (cfgnume != cfgnumc) {
  -            fsldebug(L2_LEVEL_ERROR, "directive missing arguments, expected %d, got %d\n", cfgnume, cfgnumc); CU(1); }
  +            fsldebug(L2_LEVEL_ERROR, "openlog: directive missing arguments, expected %d, got %d\n", cfgnume, cfgnumc); CU(1); }
   
           for (i = 1; i < cfgnume; i++) {
  -
               /*  process right brother of argument, check if it is an argument and has a valid token attached */
               if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_RBROTH, &cfgarg)) != CFG_OK) {
  -                (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_get(CFG_NODE_ATTR_RBROTH) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +                (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_RBROTH) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
               if (cfgarg == NULL) {
  -                fsldebug(L2_LEVEL_ERROR, "argument %d is NULL\n", i); CU(1); }
  +                fsldebug(L2_LEVEL_ERROR, "openlog: argument %d is NULL\n", i); CU(1); }
               if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_TYPE, &cfgtype)) != CFG_OK) {
  -                (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +                (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
               if (cfgtype != CFG_NODE_TYPE_ARG) {
  -                fsldebug(L2_LEVEL_ERROR, "expected argument %d\n", i); CU(1); }
  +                fsldebug(L2_LEVEL_ERROR, "openlog: expected argument %d\n", i); CU(1); }
               if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_TOKEN, &cfgargtok)) != CFG_OK) {
  -                (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_get(CFG_NODE_ATTR_TOKEN) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +                (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_TOKEN) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
               if (cfgargtok == NULL) {
  -                fsldebug(L2_LEVEL_ERROR, "argument %d has NULL data\n", i); CU(1); }
  +                fsldebug(L2_LEVEL_ERROR, "openlog: argument %d has NULL data\n", i); CU(1); }
               cfgargtoka[i] = cfgargtok;
           }
   
           if ((strcmp(cfgargtoka[0], "ident") == 0) || (strcmp(cfgargtoka[0], "default") == 0)) { /*FIXME currently default and ident are identical*/
  -
               argident  = cfgargtoka[0];
               argmatch  = cfgargtoka[1];
               argl2spec = cfgargtoka[2];
   
               /*  process the directive using the three arguments found */
  -            fsldebug(L2_LEVEL_DEBUG, "argident=%s, argmatch=%s, argl2spec=%s\n", argident, argmatch, argl2spec);
  +            fsldebug(L2_LEVEL_DEBUG, "openlog: argident=%s, argmatch=%s, argl2spec=%s\n", argident, argmatch, argl2spec);
               {
                   pcre       *pcreRegex;
                   pcre_extra *pcreExtra;
  @@ -499,37 +645,37 @@
   
                   /* compile regular expression into finite state machine and optimize */
                   if ((pcreRegex = pcre_compile(argmatch, PCRE_CASELESS, &cpError, &iError, NULL)) == NULL) {
  -                    fsldebug(L2_LEVEL_ERROR, "pcre_compile() failed with error %s (%d)\n", cpError, iError); CU(1); }
  +                    fsldebug(L2_LEVEL_ERROR, "openlog: pcre_compile() failed with error %s (%d)\n", cpError, iError); CU(1); }
                   pcreExtra = pcre_study(pcreRegex, 0, &cpError);
                   if (cpError != NULL) {
  -                    fsldebug(L2_LEVEL_ERROR, "pcre_study() failed with error %s\n", cpError); CU(1); }
  +                    fsldebug(L2_LEVEL_ERROR, "openlog: pcre_study() failed with error %s\n", cpError); CU(1); }
   
                   nMatch = pcre_exec(pcreRegex, pcreExtra, cpISF, strlen(cpISF), 0, 0, ovec, OVECSIZE);
                   if (nMatch < 0)
  -                    fsldebug(L2_LEVEL_TRACE, "matching ident/facility \"%s\" against section \"%s\" failed.\n", cpISF, argmatch);
  +                    fsldebug(L2_LEVEL_TRACE, "openlog: matching ident/facility \"%s\" against section \"%s\" failed.\n", cpISF, argmatch);
                   else
                       if (nMatch == 0)
  -                        fsldebug(L2_LEVEL_TRACE, "matching ident/facility \"%s\" against section \"%s\" succeeded, found $0\n", cpISF, argmatch);
  +                        fsldebug(L2_LEVEL_TRACE, "openlog: matching ident/facility \"%s\" against section \"%s\" succeeded, found $0\n", cpISF, argmatch);
                       else
  -                        fsldebug(L2_LEVEL_TRACE, "matching ident/facility \"%s\" against section \"%s\" succeeded, found $0...$%d\n", cpISF, argmatch, (nMatch-1) > 9 ? 9 : (nMatch-1));
  +                        fsldebug(L2_LEVEL_TRACE, "openlog: matching ident/facility \"%s\" against section \"%s\" succeeded, found $0...$%d\n", cpISF, argmatch, (nMatch-1) > 9 ? 9 : (nMatch-1));
                   if (nMatch >= 1) {
                       pcre_get_substring_list(cpISF, ovec, nMatch, &acpMatch);
                       if (acpMatch != NULL)
                           for (i = 0; i < nMatch; i++)
  -                            fsldebug(L2_LEVEL_DEBUG, "regex reference[%d]=\'%s\'\n", i, acpMatch[i] == NULL ? "(UNDEFINED)" : acpMatch[i]);
  +                            fsldebug(L2_LEVEL_DEBUG, "openlog: regex reference[%d]=\'%s\'\n", i, acpMatch[i] == NULL ? "(UNDEFINED)" : acpMatch[i]);
                       n = substcapture(argl2spec, strlen(argl2spec), acpMatch, nMatch, NULL);
                       if ((cp = (char *)malloc(n + 1)) == NULL) {
  -                        fsldebug(L2_LEVEL_ERROR, "malloc() failed\n"); CU(1); }
  +                        fsldebug(L2_LEVEL_ERROR, "openlog: malloc() failed\n"); CU(1); }
                       if (substcapture(argl2spec, strlen(argl2spec), acpMatch, nMatch, cp) != n) {
  -                        fsldebug(L2_LEVEL_ERROR, "substcapture() failed\n"); CU(1); }
  +                        fsldebug(L2_LEVEL_ERROR, "openlog: substcapture() failed\n"); CU(1); }
                       argl2spec = cp;
  -                    fsldebug(L2_LEVEL_DEBUG, "argident=%s, argmatch=%s, argl2spec=%s\n", argident, argmatch, argl2spec);
  +                    fsldebug(L2_LEVEL_DEBUG, "openlog: argident=%s, argmatch=%s, argl2spec=%s\n", argident, argmatch, argl2spec);
   
                       /* create L2 channel throuh spec and link into root channel */
                       if ((l2rv = l2_spec(&ch, ctx.l2_env, "%s", argl2spec)) != L2_OK) {
  -                        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to create stream from spec %s(%d)\n", cp, l2rv); CU(1); }
  +                        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to create stream from spec %s(%d)\n", cp, l2rv); CU(1); }
                       if ((l2rv = l2_channel_link(ctx.l2_nch, L2_LINK_CHILD, ch, NULL)) != L2_OK) {
  -                        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to link child channel %s(%d)\n", cp, l2rv); CU(1); }
  +                        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to link child channel %s(%d)\n", cp, l2rv); CU(1); }
   
                       free(argl2spec);
                   }
  @@ -545,33 +691,34 @@
                       mapfrom = i;
               }
               if (mapfrom == -1) {
  -                fsldebug(L2_LEVEL_ERROR, "trying to map from unknown syslog level \"%s\"\n", cfgargtoka[1]); CU(1); }
  +                fsldebug(L2_LEVEL_ERROR, "openlog: trying to map from unknown syslog level \"%s\"\n", cfgargtoka[1]); CU(1); }
   
               for (i = 0, mapto = -1; (mapto == -1) && (l2level2string[i].string != NULL); i++) {
                   if (strcmp(l2level2string[i].string, cfgargtoka[2]) == 0)
                       mapto = i;
               }
               if (mapto == -1) {
  -                fsldebug(L2_LEVEL_ERROR, "trying to map to unknown l2 level \"%s\"\n", cfgargtoka[2]); CU(1); }
  +                fsldebug(L2_LEVEL_ERROR, "openlog: trying to map to unknown l2 level \"%s\"\n", cfgargtoka[2]); CU(1); }
               
               ctx.levelmap[mapfrom].l2 = l2level2string[mapto].level;
  -            fsldebug(L2_LEVEL_DEBUG, "map levelmap[%10s/%d].l2 = l2level2string[%10s/%d].level = 0x%.8lx\n", cfgargtoka[1], mapfrom, cfgargtoka[2], mapto, (unsigned long)l2level2string[mapto].level);
  +            fsldebug(L2_LEVEL_DEBUG, "openlog: map levelmap[%10s/%d].l2 = l2level2string[%10s/%d].level = 0x%.8lx\n", cfgargtoka[1], mapfrom, cfgargtoka[2], mapto, (unsigned long)l2level2string[mapto].level);
           }
           else {
  -            fsldebug(L2_LEVEL_ERROR, "internal, argument \"%s\" not implemented\n", cfgargtoka[0]); CU(1); }
  +            fsldebug(L2_LEVEL_ERROR, "openlog: internal, argument \"%s\" not implemented\n", cfgargtoka[0]); CU(1); }
   
           /*  get right brother of current directive */
           if ((cfgrv = cfg_node_get(cfg, cfgdir, CFG_NODE_ATTR_RBROTH, &cfgdir)) != CFG_OK) {
               (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_get(CFG_NODE_ATTR_RBROTH) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
       }
  +
       if (logopt & LOG_NDELAY) {
           ctx.delayopen = TRUE;
  -        fsldebug(L2_LEVEL_TRACE, "logopt LOG_NDELAY delays open of L2 channel tree until first message is being logged");
  +        fsldebug(L2_LEVEL_TRACE, "openlog: logopt LOG_NDELAY delays open of L2 channel tree until first message is being logged");
       }
       else {
           if ((l2rv = l2_channel_open(ctx.l2_nch)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to open channel stream %s(%d) immediately\n", cp, l2rv); CU(1); }
  -        fsldebug(L2_LEVEL_TRACE, "logging succeeded to open channel stream immediately");
  +            cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to open channel stream %s(%d) immediately\n", cp, l2rv); CU(1); }
  +        fsldebug(L2_LEVEL_TRACE, "openlog: logging succeeded to open channel stream immediately");
       }
   
       CU(0);
  @@ -580,10 +727,10 @@
           free(cpISF);
       if (cpIdent != NULL)
           free(cpIdent);
  -#if 0
  +#if 0 /* FIXME */
       if (cfg != NULL)
           if ((cfgrv = cfg_destroy(cfg)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_destroy() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_destroy() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
   #endif
       if (buf.base != NULL)
           free(buf.base);
  @@ -592,10 +739,11 @@
       return;
   }
   
  +/* faked POSIX API function closelog(3) */
   void closelog(void)
   {
       if (ctx.l2_fslnch != NULL) {
  -        l2_channel_log(ctx.l2_fslnch, L2_LEVEL_TRACE, "captured closelog()");
  +        l2_channel_log(ctx.l2_fslnch, L2_LEVEL_TRACE, "closelog()");
           l2_channel_destroy(ctx.l2_fslnch);
           ctx.l2_fslnch = NULL;
       }
  @@ -621,20 +769,20 @@
       return;
   }
   
  +/* faked POSIX API function setlogmask(3) */
   int setlogmask(int maskpri)
   {
       int oldmask;
   
       if (ctx.l2_fslnch != NULL)
  -        l2_channel_log(ctx.l2_fslnch, L2_LEVEL_TRACE, "captured setlogmask(maskpri=0x%.8lx)", maskpri);
  -
  +        l2_channel_log(ctx.l2_fslnch, L2_LEVEL_TRACE, "setlogmask(maskpri=0x%.8lx)", maskpri);
       oldmask = ctx.maskpri;
  -
       if (maskpri != 0)
           ctx.maskpri = maskpri;
       return oldmask;
   }
   
  +/* faked POSIX API function syslog(3) */
   void syslog(int priority, const char *message, ...)
   {
       va_list args;
  @@ -646,6 +794,7 @@
       return;
   }
   
  +/* faked POSIX API function vsyslog(3) */
   #ifdef HAVE_VSYSLOG_USVALIST
   void vsyslog(int priority, const char *fmt, __va_list args)
   #else
  @@ -661,173 +810,45 @@
       if (ctx.l2_nch == NULL)
           return;
   
  +#if 0
  +    /* tracing */
  +    if (ctx.l2_fslnch != NULL)
  +        l2_channel_log(ctx.l2_fslnch, L2_LEVEL_TRACE, "vsyslog(priority=%d, fmt=\"%s\", ...)", priority, fmt);
  +#endif
  +
       /* check for delayed open */
       if ((ctx.logopt & LOG_NDELAY) && (ctx.delayopen == TRUE)) {
           if ((l2rv = l2_channel_open(ctx.l2_nch)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "logging failed to open channel stream %s(%d) delayed\n", cp, l2rv);
  +            cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "vsyslog: logging failed to open channel stream %s(%d) delayed\n", cp, l2rv);
               closelog();
           }
  -        fsldebug(L2_LEVEL_TRACE, "logging succeeded to open channel stream delayed");
  +        fsldebug(L2_LEVEL_TRACE, "vsyslog: logging succeeded to open channel stream delayed");
           ctx.delayopen = FALSE;
       }
   
       /* strip off facility */
       priority &= LOG_PRIMASK;
  -    fsldebug(L2_LEVEL_DEBUG, "priority =0x%.8lx, ctx.maskpri=0x%.8lx  ", (unsigned long)priority, (unsigned long)ctx.maskpri);
  +    fsldebug(L2_LEVEL_DEBUG, "vsyslog: priority=0x%.8lx, ctx.maskpri=0x%.8lx  ", (unsigned long)priority, (unsigned long)ctx.maskpri);
   
       /* check against maskpri */
       if ((LOG_MASK(priority) & ctx.maskpri) == 0) {
  -        fsldebug(L2_LEVEL_DEBUG, "short circuit maskpri\n");
  +        fsldebug(L2_LEVEL_DEBUG, "vsyslog: short circuit maskpri\n");
           return;
       }
   
       levelmask = 0;
       for (i = 0; sysloglevel2string[i].string != NULL; i++) {
  -    fsldebug(L2_LEVEL_DEBUG, "ctx.levelmap[%d].syslog = 0x%.8lx, ctx.levelmap[%d].l2 = 0x%.8lx\n", i, (unsigned long)ctx.levelmap[i].syslog, i, (unsigned long)ctx.levelmap[i].l2);
  +        fsldebug(L2_LEVEL_DEBUG, "vsyslog: ctx.levelmap[%d].syslog = 0x%.8lx, ctx.levelmap[%d].l2 = 0x%.8lx\n", i, (unsigned long)ctx.levelmap[i].syslog, i, (unsigned long)ctx.levelmap[i].l2);
           if (ctx.levelmap[i].syslog == priority) {
               levelmask = ctx.levelmap[i].l2;
               break;
           }
       }
  -    fsldebug(L2_LEVEL_DEBUG, "levelmask=0x%.8lx\n", (unsigned long)levelmask);
  +    fsldebug(L2_LEVEL_DEBUG, "vsyslog: levelmask=0x%.8lx\n", (unsigned long)levelmask);
       if ((l2rv = l2_channel_vlog(ctx.l2_nch, levelmask, fmt, args)) != L2_OK) {
           cp = l2_env_strerror(ctx.l2_env, l2rv);
  -        fsldebug(L2_LEVEL_PANIC, "applicaion logging failed %s(%d)\n", cp, l2rv);
  +        fsldebug(L2_LEVEL_PANIC, "vsyslog: application logging failed: %s (%d)\n", cp, l2rv);
       }
       return;
   }
   
  -fsl_rc_t readfileorallfiles(buf_t *buffer, const char *ident)
  -{
  -    fsl_rc_t rv;
  -
  -    if (ident == NULL)
  -        return FSL_ERR_ARG;
  -    fsldebug(L2_LEVEL_TRACE, "readfileorallfiles(buffer, ident=\"%s\")\n", ident);
  -
  -    if ((rv = readfile(buffer, ident)) == FSL_OK)
  -        return FSL_OK;
  -
  -    if (rv != FSL_ERR_SYS || errno != ENOENT)
  -        return rv;
  -
  -    if ((rv = readallfiles(buffer)) != FSL_OK)
  -        return rv;
  -
  -    return FSL_OK;
  -}
  -
  -fsl_rc_t readfile(buf_t *buffer, const char *ident)
  -{
  -    fsl_rc_t rc;
  -    char *filename = NULL;
  -
  -    if (ident == NULL || buffer == NULL)
  -        CU(FSL_ERR_ARG);
  -    fsldebug(L2_LEVEL_TRACE, "readfile(buffer, ident=\"%s\")\n", ident);
  -
  -    if ((filename = (char *)malloc(strlen(FSL_CFGDIR) + 1 + strlen(FSL_PREFIX) + strlen(ident) + 1)) == NULL)
  -        CU(FSL_ERR_MEM);
  -    filename[0] = '\0';
  -    strcat(filename, FSL_CFGDIR);
  -    strcat(filename, "/");
  -    strcat(filename, FSL_PREFIX);
  -    strcat(filename, ident);
  -
  -    CU(appendfiletobuffer(buffer, filename));
  -CUS:
  -    if (filename != NULL)
  -        free(filename);
  -    return rc;
  -}
  -
  -fsl_rc_t readallfiles(buf_t *buffer)
  -{
  -    fsl_rc_t rc;
  -    DIR *dp;
  -    struct dirent *de;
  -    char *filename = NULL;
  -    int n;
  -
  -    if (buffer == NULL)
  -        CU(FSL_ERR_ARG);
  -    fsldebug(L2_LEVEL_TRACE, "readallfiles(buffer) globbing \"%s/%s*\"\n", FSL_CFGDIR, FSL_PREFIX);
  -
  -    if ((dp = opendir(FSL_CFGDIR)) == NULL)
  -        CU(FSL_ERR_SYS);
  -
  -    rc = FSL_ERR_ARG;
  -    while ((de = readdir(dp)) != NULL) {
  -        n = strlen(de->d_name);
  -        if (   (n >= strlen(FSL_PREFIX))
  -            && (strncmp(de->d_name, FSL_PREFIX, strlen(FSL_PREFIX)) == 0)
  -              ) {
  -            if ((filename = (char *)malloc(strlen(FSL_CFGDIR) + 1 + n + 1)) == NULL)
  -                CU(FSL_ERR_MEM);
  -            filename[0] = '\0';
  -            strcat(filename, FSL_CFGDIR);
  -            strcat(filename, "/");
  -            strcat(filename, de->d_name);
  -            if (appendfiletobuffer(buffer, filename) == FSL_OK)
  -                rc = FSL_OK;
  -            free(filename);
  -            filename = NULL;
  -        }
  -    }
  -    (void)closedir(dp);
  -    CU(rc);
  -CUS:
  -    if (filename != NULL)
  -        free(filename);
  -    return rc;
  -}
  -
  -fsl_rc_t appendfiletobuffer(buf_t *buffer, const char *filename)
  -{
  -    fsl_rc_t rc;
  -    int fd = -1;
  -    int filesize;
  -    int fileread;
  -    int bufferneed;
  -
  -    if (filename == NULL || buffer == NULL)
  -        CU(FSL_ERR_ARG);
  -    fsldebug(L2_LEVEL_TRACE, "appendfiletobuffer(buffer, filename=\"%s\")\n", filename);
  -
  -    if ((fd = open(filename, O_RDONLY)) == -1)
  -        CU(FSL_ERR_SYS);
  -
  -    if ((filesize = (int)lseek(fd, 0, SEEK_END)) == -1)
  -        CU(FSL_ERR_SYS);
  -
  -    bufferneed = buffer->used + filesize;
  -    if (bufferneed > buffer->size) {
  -        if (buffer->base == NULL) {
  -            if ((buffer->base = (char *)malloc(bufferneed)) == NULL)
  -                CU(FSL_ERR_MEM);
  -            buffer->size = bufferneed;
  -            buffer->used = 0;
  -        }
  -        else {
  -            if ((buffer->base = (char *)realloc(buffer->base, bufferneed)) == NULL)
  -                CU(FSL_ERR_MEM);
  -            buffer->size = bufferneed;
  -        }
  -    }
  -
  -    if (lseek(fd, 0, SEEK_SET) == -1)
  -        CU(FSL_ERR_SYS);
  -
  -    if ((fileread = (int)read(fd, buffer->base + buffer->used, (size_t)filesize)) == -1)
  -        CU(FSL_ERR_SYS);
  -
  -    if (fileread != filesize)
  -        CU(FSL_ERR_USE);
  -
  -    buffer->used += filesize;
  -    CU(FSL_OK);
  -CUS:
  -    if (fd != -1)
  -        close(fd);
  -    return rc;
  -}

From ossp-cvs-owner@ossp.org  Sat Jul 27 17:35:58 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F1E8576523; Sat, 27 Jul 2002 17:35:57 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl TODO
Message-Id: <20020727153557.F1E8576523@mail.ossp.org>
Date: Sat, 27 Jul 2002 17:35:57 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   27-Jul-2002 17:35:57
  Branch: HEAD                             Handle: 2002072716355700

  Added files:
    ossp-pkg/fsl            TODO

  Log:
    remember a few points

  Summary:
    Revision    Changes     Path
    1.1         +5  -0      ossp-pkg/fsl/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/TODO
  ============================================================
  $ cvs update -p -r1.1 TODO
  - is readfileorallfiles() really reasonable?
  - what about HAVE_VSYSLOG_USVALIST
  - allow syslog() without previous openlog()?!
  - support "default" ident handling
  - cfg_destroy fixing and use it

From ossp-cvs-owner@ossp.org  Sat Jul 27 17:37:22 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F05CB76523; Sat, 27 Jul 2002 17:37:21 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl Makefile.in README aclocal.m4 configure.ac fs...
Message-Id: <20020727153721.F05CB76523@mail.ossp.org>
Date: Sat, 27 Jul 2002 17:37:21 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   27-Jul-2002 17:37:21
  Branch: HEAD                             Handle: 2002072716372100

  Modified files:
    ossp-pkg/fsl            Makefile.in README aclocal.m4 configure.ac
                            fsl-config.in fsl.ac fsl.c fsl.pod

  Log:
    add Flexible to the official name

  Summary:
    Revision    Changes     Path
    1.5         +2  -2      ossp-pkg/fsl/Makefile.in
    1.9         +1  -1      ossp-pkg/fsl/README
    1.2         +1  -1      ossp-pkg/fsl/aclocal.m4
    1.7         +2  -2      ossp-pkg/fsl/configure.ac
    1.3         +1  -1      ossp-pkg/fsl/fsl-config.in
    1.2         +1  -1      ossp-pkg/fsl/fsl.ac
    1.32        +1  -1      ossp-pkg/fsl/fsl.c
    1.12        +2  -2      ossp-pkg/fsl/fsl.pod
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/Makefile.in
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 Makefile.in
  --- ossp-pkg/fsl/Makefile.in	23 Jul 2002 11:57:46 -0000	1.4
  +++ ossp-pkg/fsl/Makefile.in	27 Jul 2002 15:37:21 -0000	1.5
  @@ -1,5 +1,5 @@
   ##
  -##  OSSP fsl - Faking Syslog Library
  +##  OSSP fsl - Faking/Flexible Syslog Library
   ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  @@ -104,7 +104,7 @@
   	V2=`$(SHTOOL) version -l txt -d long VERSION`; \
   	D=`$(SHTOOL) version -l txt -d long VERSION | sed -e 's;.*(;;' -e 's;).*;;'`; \
   	$(POD2MAN) --quotes=none \
  -	           --section=3 --center="Faking Syslog Library" \
  +	           --section=3 --center="Faking/Flexible Syslog Library" \
   	           --release="$$D" --date="OSSP fsl $$V1" fsl.pod | \
   	sed -e "s;FSL_VERSION_STR;$$V2;" >fsl.3
   
  Index: ossp-pkg/fsl/README
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 README
  --- ossp-pkg/fsl/README	25 Jul 2002 16:28:52 -0000	1.8
  +++ ossp-pkg/fsl/README	27 Jul 2002 15:37:21 -0000	1.9
  @@ -4,7 +4,7 @@
     |  _\__ \ |
     |_| |___/_|
                
  -  OSSP fsl - Faking Syslog Library
  +  OSSP fsl - Faking/Flexible Syslog Library
     Version 0.1.8 (25-Jul-2002)
   
     ABSTRACT
  Index: ossp-pkg/fsl/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 aclocal.m4
  --- ossp-pkg/fsl/aclocal.m4	9 Jul 2002 09:42:09 -0000	1.1
  +++ ossp-pkg/fsl/aclocal.m4	27 Jul 2002 15:37:21 -0000	1.2
  @@ -1,5 +1,5 @@
   dnl ##
  -dnl ##  OSSP fsl - Faking Syslog Library
  +dnl ##  OSSP fsl - Faking/Flexible Syslog Library
   dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
   dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  Index: ossp-pkg/fsl/configure.ac
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 configure.ac
  --- ossp-pkg/fsl/configure.ac	24 Jul 2002 15:29:01 -0000	1.6
  +++ ossp-pkg/fsl/configure.ac	27 Jul 2002 15:37:21 -0000	1.7
  @@ -1,5 +1,5 @@
   dnl ##
  -dnl ##  OSSP fsl - Faking Syslog Library
  +dnl ##  OSSP fsl - Faking/Flexible Syslog Library
   dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
   dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  @@ -31,7 +31,7 @@
   AC_PREREQ(2.53)
   AC_INIT
   FSL_VERSION_STR=`./shtool version -l txt -d long VERSION`
  -./shtool echo -e "Configuring %BOSSP fsl%b (Faking Syslog Library), version %B${FSL_VERSION_STR}%b"
  +./shtool echo -e "Configuring %BOSSP fsl%b (Faking/Flexible Syslog Library), version %B${FSL_VERSION_STR}%b"
   AC_SUBST(FSL_VERSION_STR)
   
   AC_PROG_MAKE_SET
  Index: ossp-pkg/fsl/fsl-config.in
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 fsl-config.in
  --- ossp-pkg/fsl/fsl-config.in	24 Jul 2002 14:56:04 -0000	1.2
  +++ ossp-pkg/fsl/fsl-config.in	27 Jul 2002 15:37:21 -0000	1.3
  @@ -1,6 +1,6 @@
   #!/bin/sh
   ##
  -##  OSSP fsl - Faking Syslog Library
  +##  OSSP fsl - Faking/Flexible Syslog Library
   ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  Index: ossp-pkg/fsl/fsl.ac
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 fsl.ac
  --- ossp-pkg/fsl/fsl.ac	9 Jul 2002 09:42:09 -0000	1.1
  +++ ossp-pkg/fsl/fsl.ac	27 Jul 2002 15:37:21 -0000	1.2
  @@ -1,5 +1,5 @@
   dnl ##
  -dnl ##  OSSP fsl - Faking Syslog Library
  +dnl ##  OSSP fsl - Faking/Flexible Syslog Library
   dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
   dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 fsl.c
  --- ossp-pkg/fsl/fsl.c	27 Jul 2002 15:35:23 -0000	1.31
  +++ ossp-pkg/fsl/fsl.c	27 Jul 2002 15:37:21 -0000	1.32
  @@ -1,5 +1,5 @@
   /*
  -**  OSSP fsl - Faking Syslog Library
  +**  OSSP fsl - Faking/Flexible Syslog Library
   **  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
   **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
   **  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  Index: ossp-pkg/fsl/fsl.pod
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 fsl.pod
  --- ossp-pkg/fsl/fsl.pod	25 Jul 2002 13:33:50 -0000	1.11
  +++ ossp-pkg/fsl/fsl.pod	27 Jul 2002 15:37:21 -0000	1.12
  @@ -1,5 +1,5 @@
   ##
  -##  OSSP fsl - Faking Syslog Library
  +##  OSSP fsl - Faking/Flexible Syslog Library
   ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  @@ -32,7 +32,7 @@
   
   =head1 NAME
   
  -B<OSSP fsl> - Faking Syslog Library
  +B<OSSP fsl> - Faking/Flexible Syslog Library
   
   =head1 VERSION
   

From ossp-cvs-owner@ossp.org  Sat Jul 27 20:13:32 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7910776523; Sat, 27 Jul 2002 20:13:32 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.pod
Message-Id: <20020727181332.7910776523@mail.ossp.org>
Date: Sat, 27 Jul 2002 20:13:32 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   27-Jul-2002 20:13:32
  Branch: HEAD                             Handle: 2002072719133200

  Modified files:
    ossp-pkg/fsl            fsl.pod

  Log:
    overhauling, cleanups and enhancements to the manual page

  Summary:
    Revision    Changes     Path
    1.13        +328 -249   ossp-pkg/fsl/fsl.pod
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.pod
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 fsl.pod
  --- ossp-pkg/fsl/fsl.pod	27 Jul 2002 15:37:21 -0000	1.12
  +++ ossp-pkg/fsl/fsl.pod	27 Jul 2002 18:13:32 -0000	1.13
  @@ -40,9 +40,9 @@
   
   =head1 SYNOPSIS
   
  - LDFLAGS="`fsl-config --all --ldflags`" \
  - LIBS="`fsl-config --all --libs`" \
  - ./configure [...]
  +LDFLAGS=`B<fsl-config --all --ldflags>`
  +LIBS=`B<fsl-config --all --libs>`
  +./configure [...]
   
   =head1 DESCRIPTION
   
  @@ -56,50 +56,58 @@
   =head1 OPERATION
   
   If an application calls openlog(3) it passes an identification string
  -(I<ident>) and a logging facility (I<facility>) along. B<OSSP l2syslog>
  -tries to read the file "C<cfgdir>C</fsl.>I<ident>". If the file is not
  -readable, all files matching I<cfgdir>C</fsl.*> are read.
  -
  -In both cases, all data that has been read in is then parsed for
  -configuration sections. These are identified by "C<ident >I<match>"
  -at the beginning of a line. The I<match> argument is a PCRE (Perl
  -Compatible Regular Expression) that is matched against a string
  -concatenated from "I<ident>/I<facility>" given to the openlog(3) call.
  -
  -The configuration section contains an B<OSSP l2> specification enclosed
  -in curly brackets and terminated with a semicolon. The B<OSSP l2>
  -specification may contain $1 ... $9 variables which are filled in from
  -the I<match> regex parts enclosed in round brackets. The $0 variable
  -captures the wholly match and $$ diverts to a single escaped $.
  -
  -An B<OSSP l2> channel tree is build from each matching section and all
  -found trees are merged together with a "null" channel to form a single
  -tree. Further calls to syslog(3) will then inject log messages into this
  -channel tree.
  -
  -=head1 L2SPEC
  -
  -The "logging library" (L2) builds its working configuration using a
  -global environment object and channels which are interconnected to form
  -a tree.  The environment object holds general internal information and
  -maintains the registration of formatters.  The channels are used to
  -process the logging message and use formatters to transform it.  The
  -root channel of the tree and each intermediate channel might have one or
  -more children below it, passing the processed message down the tree. The
  -leafs of the tree are constructed by channels specifically designed for
  -outputting the message.  Every logging message is injected into a
  -channel, most likely the uppermost one, and traverses down the tree
  -where channels with multiple children duplicate the message.  L2 allows
  -a developer to build this tree programmatically.  In addition, L2 also
  -supports building up the channel tree using a text based specification
  -called the l2spec. The l2spec offers maximum flexibility as a program
  -can read a l2spec created by a system administrator and pass it to L2
  -verbatim without even knowing anything about existing channels.  When
  -this approach is used, a newly designed channel can be used by an
  -existing program by just linking in the latest lib_l2. The main program
  -remains unmodified.
  +(I<ident>) and a logging facility (I<facility>) along. B<OSSP fsl>
  +tries to read the file "I<cfgdir>C</fsl.>I<ident>". If the file is not
  +readable, all files matching "I<cfgdir>C</fsl.*>" are read.
  +
  +In both cases, all data that has been read in is parsed for
  +configuration sections via B<OSSP cfg>. These are identified by "C<ident
  +>I<match>C< >I<l2-spec>C<;>" directives. The I<match> argument is an B<OSSP
  +pcre> (Perl-compatible) regular expression that is matched against a
  +string concatenated from "I<ident>/I<facility>" given to the openlog(3)
  +call.
  +
  +The I<l2-spec> (single) argument is an B<OSSP l2> channel tree
  +specification, usually quoted with B<OSSP cfg> flexible quotes (to make
  +it a single B<OSSP cfg> argument) like "C<q{...}>". The I<l2-spec>
  +may contain "C<$1>", ..., "C<$9>" variables which are filled in from
  +the I<match> regular expression parts enclosed in round brackets. The
  +"C<$0>" variable captures the wholly match and "C<$$>" diverts to a
  +single escaped "C<$>".
  +
  +An B<OSSP l2> channel tree is build from all I<l2-spec> on each matching
  +"C<ident>" directives and all found trees are merged together with a
  +top "C<noop>" channel to form a single channel tree. Further calls to
  +syslog(3) will then inject log messages into this channel tree.
  +
  +=head1 OSSP L2 CHANNEL TREE SPECIFICATION
  +
  +B<OSSP l2> builds its working configuration using a global environment
  +object and channels which are interconnected to form a channel tree.
  +The environment object holds general internal information and maintains
  +the registration of formatters. The channels are used to process the
  +logging message and use formatters to transform it. The root channel of
  +the tree and each intermediate channel might have one or more children
  +below it, passing the processed message down the tree. The leafs of the
  +tree are constructed by channels specifically designed for outputting
  +the message.
  +
  +Every logging message is injected into a channel, most likely the
  +uppermost one, and traverses down the tree where channels with
  +multiple children duplicate the message. B<OSSP l2> allows a developer
  +to build this tree programmatically. In addition, B<OSSP l2> also
  +supports building up the channel tree using a text based "channel tree
  +specification" language. This declarative language offers maximum
  +flexibility as a program can read a specification created by a system
  +administrator and pass it to B<OSSP l2> verbatim without even knowing
  +anything about existing channels. If this approach is used, a newly
  +designed channel can be used by an existing program by just linking in
  +the latest B<OSSP l2> version. The main program remains unmodified.
   
  -B<tree>           ::= B<stream>
  +An B<OSSP l2> channel tree specification is defined by the following
  +context-free grammar:
  +
  +B<l2-spec>        ::= B<stream>
                    
   B<stream>         ::= I<empty>
                    | B<channel>
  @@ -159,151 +167,182 @@
   B<param_value>    ::= single-quoted, double-quoted
                      or unquoted text
   
  -Here is a description of all available channels. The table lists their
  -B<channel_name> prefixed with an 'o' or a 'f' indicating it's operating
  -as an output or a filter channel. All parameters are B<param_names>
  -listed, including the type of each parameter which is either a string
  -(STR) or integer (INT) and an 'm' or 'o' indicating the paramter is
  -optional or mandatory. Also, the default value for each paramter is
  -listed, if there is one.
  +=head1 AVAILABLE OSSP L2 CHANNELS
   
  -The "buffer" channel buffers messages poured in from upper channels.  It
  -flushes the messages down to the lower channels when the buffered space
  -exceeds the buffer size, when a given time interval is reached (0
  -disables this feature) or when a newly arrived message has a level that
  -matches the levelflush mask.
  +B<OSSP l2> provides various channels. The following lists their
  +B<channel_name> prefixed with an 'C<o>' or a 'C<f>' indicating whether
  +it is operating as an output or filter channel. All parameters to
  +B<param_names> are listed, including the type of each parameter which
  +is either a string (C<STR>) or integer (C<INT>) and an 'C<m>' or 'C<o>'
  +indicating the paramter is optional or mandatory. Also, the default
  +value for each paramter is listed, if there is one.
   
  -  f buffer (INT size            o [bytes] =4096
  -            INT interval        o [sec]   =0 (disabled)
  -            INT levelflush      o [level] =0 (none)
  -            );
  -
  -The "fd" channel passes messages poured in from upper channels to
  -the open file identified by the given filedescriptor. Note that UNIX
  -usually alloctes 1 for STDOUT and 2 for STDERR.
  -
  -  o fd     (INT filedescriptor  m
  -            );
  +=head2 Buffering Filter Channel (buffer)
   
  -The "file" channel opens a file at the given path and passes messages
  -poured in from upper channels to this file. If the file at the given
  -path already exists, additional data is either appended (append=1) or
  -the existing file is truncated (append=0). The desired permissions of
  -the file can be set. Note that due to a limitation of the current parser
  -only decimal numbers are accepted, so have fun doing octal to decimal
  -conversion. Here're some hints
  -
  -    rw-rw-rw- \0666 =438    rw-r--r-- \0644 =420
  -    rw-rw-r-- \0664 =436    rw-r----- \0640 =416
  -    rw-rw---- \0660 =432    rw------- \0600 =384
  -
  -  o file   (STR path            m
  -            INT append          o [0=truncate|1=append] =1
  -            INT perm            o [decimal]             =420
  -            );
  +The B<buffer> channel buffers messages poured in from upper channels. It
  +flushes the messages down to the lower channels when the buffered space
  +exceeds the buffer I<size>, when a given time I<interval> is reached (0
  +disables this feature) or when a newly arrived message has a level that
  +matches the I<levelflush> mask.
   
  -The "filter" channel filters messages poured in from upper channels. A
  -regex is used against the incoming message and the normal operation is
  -that only matching messages are passed down the tree. Setting negate
  -reverses the matching decision. Comparisons are case sensitive unless
  -nocase is set.
  -
  -  f filter (STR regex           m [PCRE]
  -            INT negate          o [0=normal,1=negate] =0
  -            INT nocase          o [0=case,1=nocase]   =0
  -            );
  + f buffer (INT size            o [bytes] =4096
  +           INT interval        o [sec]   =0 (disabled)
  +           INT levelflush      o [level] =0 (none)
  +           )
  +
  +=head2 Filedescriptor Output Channel (fd)
  +
  +The B<fd> channel passes messages poured in from upper channels to the
  +open file identified by the given I<filedescriptor>. Note that Unix
  +usually allocates C<1> for F<stdout> and C<2> for F<stderr>.
  +
  + o fd     (INT filedescriptor  m
  +           )
  +
  +=head2 File Output Channel (file)
  +
  +The B<file> channel opens a file at the given I<path> and passes
  +messages poured in from upper channels to this file. If the file at
  +the given path already exists, additional data is either appended
  +(I<append>=1) or the existing file is truncated (I<append>=0). The
  +desired permissions of the file can be set. 
  +
  + o file   (STR path            m
  +           INT append          o [0=truncate|1=append] =1
  +           INT perm            o [decimal]             =420
  +           )
  +
  +Notice: due to a limitation of the current parser only decimal numbers
  +are accepted, so have fun doing octal to decimal conversion. Here're
  +some hints:
  +
  + rw-rw-rw- \0666 =438    rw-r--r-- \0644 =420
  + rw-rw-r-- \0664 =436    rw-r----- \0640 =416
  + rw-rw---- \0660 =432    rw------- \0600 =384
  +
  +=head2 Filtering Channel (filter)
  +
  +The B<filter> channel filters messages poured in from upper channels.
  +A regular expression is applied against the incoming message and the
  +normal operation is that only matching messages are passed down the
  +tree. Setting I<negate> reverses the matching decision. Comparisons are
  +case sensitive unless I<nocase> is set.
  +
  + f filter (STR regex           m [PCRE]
  +           INT negate          o [0=normal,1=negate] =0
  +           INT nocase          o [0=case,1=nocase]   =0
  +           )
  +
  +=head2 Internet Relay Chat Output Channel (irc)
  +
  +The B<irc> channel opens a connection to a given IRC channel and
  +passes messages poured in from upper channels to this IRC channel. If
  +configured, the message posted to IRC channel contains the I<progname>
  +for easy identification of the sending host.
  +
  + o irc    (STR progname        o [string]
  +           STR localhost       o [hostname|address] =nodename or "localhost"
  +           STR localuser       o [string]           =name or "uid#"num
  +           STR nickname        o [string]           =localuser
  +           STR username        o [string]           =localuser"@"localhost
  +           STR realname        o [string]           =username
  +           STR channel         o [string]           ="#l2"
  +           INT join            o [01]               =1 use JOIN/PART 
  +           STR host            m [hostname|address]
  +           STR port            o [tcpport]          =6667
  +           INT timeout         o [sec]              =30
  +           )
   
  -The "irc" channel opens a connection to a given IRC channel and passes
  -messages poured in from upper channels to this IRC channel. If
  -configured, the message posted to IRC channel contains the progname for
  -easy identification of the sending host.
  -
  -  o irc    (STR progname        o [string]
  -            STR localhost       o [hostname|address] =nodename or "localhost"
  -            STR localuser       o [string]           =name or "uid#"num
  -            STR nickname        o [string]           =localuser
  -            STR username        o [string]           =localuser"@"localhost
  -            STR realname        o [string]           =username
  -            STR channel         o [string]           ="#l2"
  -            INT join            o [01]               =1 use JOIN/PART 
  -            STR host            m [hostname|address]
  -            STR port            o [tcpport]          =6667
  -            INT timeout         o [sec]              =30
  -            );
  +=head2 No Operation Filtering Channel (noop)
   
  -The "noop" channel can be used to divert incoming messages to multiple
  +The B<noop> channel can be used to divert incoming messages to multiple
   pathes down the tree. Otherwise is does not do anything put passing the
  -messages along. It has no configuration parameters.
  +messages along. It has no configuration parameters at all.
  +
  + f noop   ()
   
  -  f noop   ()
  +=head2 No Operation Output Channel (null)
   
  -The "null" channel discards any incoming messages and creates no output
  +The B<null> channel discards any incoming messages and creates no output
   at all. It has no configuration parameters.
   
  -  o null   ()
  + o null   ()
   
  -The "pipe" channel executes a given command and pipes messages poured in
  -from upper channels to the commands stdin. The command can be executed
  -directly or run by "/bin/sh -c". The lifetime of the connection can be
  -adjusted by setting runtime to either "cont" for a continuous
  -pipethrough with command restart after termination or "one" for oneshot
  -where the connection is broken when the command terminates.
  -
  -  o pipe   (STR execmode        m [direct|shell]
  -            STR runtime         m [cont|one]
  -            STR path            m [dir/file]
  -            );
  +=head2 Command Pipe Output Channel (pipe)
   
  -The "prefix" channel prefixes messages poured in from upper channels.
  -The format string may contain variables prefixed with a '%'. These are
  -expanded using the internal formatters
  -
  -    L loglevel
  -    N nodename
  -    P pid
  +The B<pipe> channel executes a given command and pipes messages poured
  +in from upper channels to the commands F<stdin>. The command can be
  +executed directly or run by "C</bin/sh -c>". The lifetime of the
  +connection can be adjusted by setting I<runtime> to either "C<cont>"
  +for a continuous pipe-through with command restart after termination or
  +"C<one>" for one-shot where the connection is dropped when the command
  +terminates.
  +
  + o pipe   (STR execmode        m [direct|shell]
  +           STR runtime         m [cont|one]
  +           STR path            m [dir/file]
  +           )
  +
  +=head2 Prefixing Filtering Channel (prefix)
  +
  +The B<prefix> channel prefixes messages poured in from upper channels.
  +The I<prefix> format string may contain formatting variables prefixed
  +with a 'C<%>'. These are expanded using the internal B<OSSP fsl>
  +formatters
  +
  + L loglevel
  + N nodename
  + P pid
   
   then expansion continues to use application specific formatters where
  -FSL offers
  +B<OSSP l2> offers
   
  -    D dump
  -    S string
  -    m errno
  + D dump
  + S string
  + m errno
   
   and finally remaining variables are expaned by strftime(3).
   
  -  f prefix (STR prefix          m [string]
  -            STR timezone        o [local|utc] =local
  -            );
  + f prefix (STR prefix          m [string]
  +           STR timezone        o [local|utc] =local
  +           )
   
  -The "smtp" channel forwards messages poured in from upper channels to
  -remote hosts using the Simple Mail Transfer Protocol. It is possible to
  -specify the local address to bind to which is useful for multihomed
  -hosts.
  +=head2 Simple Mail Transfer Protocol Output Channel (smtp)
   
  -  o smtp   (STR progname        o [string]
  -            STR localhost       o [hostname|address] =nodename or "localhost"
  -            STR localuser       o [string]           =name or "uid#"num
  -            STR from            o [string]           =localuser"@"localhost
  -            STR rcpt            m [string]
  -            STR subject         o [string]           ="[L2] ..."
  -            STR host            m [hostname|address]
  -            STR port            o [tcpport]          ="smtp"
  -            INT timeout         o [sec]              =30
  -            );
  +The B<smtp> channel forwards messages poured in from upper channels
  +to remote hosts using the Simple Mail Transfer Protocol (SMTP). It is
  +possible to specify the local address to bind to which is useful for
  +multi-homed hosts.
   
  -The "socket" channel forwards messages poured in from upper channels to
  -daemons on remote hosts using raw UDP communication or TCP connections.
  + o smtp   (STR progname        o [string]
  +           STR localhost       o [hostname|address] =nodename or "localhost"
  +           STR localuser       o [string]           =name or "uid#"num
  +           STR from            o [string]           =localuser"@"localhost
  +           STR rcpt            m [string]
  +           STR subject         o [string]           ="[L2] ..."
  +           STR host            m [hostname|address]
  +           STR port            o [tcpport]          ="smtp"
  +           INT timeout         o [sec]              =30
  +           )
   
  -  o socket (STR proto           o [udp|tcp] =tcp
  -            STR host            m [hostname|address]
  -            STR port            m [udpport|tcpport]
  -            INT timeout         o [sec] =30
  -            );
  +=head2 Raw Socket Output Channel (socket)
   
  -The "syslog" channel forwards messages poured in from upper channels
  -either to the local syslog or passes it to a remote syslogd.  It is
  -possible to specify the local address to bind to which is useful for
  -multihomed hosts.
  +The B<socket> channel forwards messages poured in from upper channels to
  +daemons on remote hosts using raw UDP communication or TCP connections.
  +
  + o socket (STR proto           o [udp|tcp] =tcp
  +           STR host            m [hostname|address]
  +           STR port            m [udpport|tcpport]
  +           INT timeout         o [sec] =30
  +           )
  +
  +=head2 Syslog Remote Output Channel (syslog)
  +
  +The B<syslog> channel forwards messages poured in from upper channels
  +either to the local syslog(3) library or passes it directly via UDP
  +communication to a remote (or even local) syslogd(8). It is possible
  +to specify the local address to bind to which is useful for multi-homed
  +hosts.
   
     o syslog (STR target          o [local|remote]     =local
               STR remotehost      o [hostname|address]
  @@ -314,99 +353,133 @@
               INT logpid          o [0=no,1=yes]       =1
               );
   
  -    EXAMPLE
  -    - for a very simple l2spec writing everything to STDERR (FD#2)
  -
  -    fd(filedescriptor=2)
  -
  -    EXAMPLE
  -    - for a simple l2spec writing notices and more important
  -    messages to a file
  -
  -    notice: file(path="/var/log/file")
  -
  -    EXAMPLE for a very complex l2spec
  -
  -    noop
  -    -> {
  -        (info): filter(
  -            regex="foo"
  -        ) 
  -        -> syslog(
  -            remotehost="localhost"
  -        );
  -        info: prefix(
  -        ) 
  -        -> {
  -            debug/error: buffer(
  -                size=1024
  -            ) 
  -            -> file(
  -                path="a"
  -            );
  -            (trace|debug)/(trace): buffer(
  -                size=65536
  -            ) -> 
  -            file(
  -                path="b"
  -            )
  -        };
  -        prefix() -> {
  -            warning: filter(
  -                negate=1, 
  -                regex="foo"
  -            ) 
  -            -> irc(
  -                host=irc.dev.de.cw.net
  -            );
  -            error: filter(
  -                nocase=1, 
  -                regex="foo"
  -            ) 
  -            -> smtp(
  -                host=sv1.dev.de.cw.net
  -            );
  -            panic: smtp(
  -                host=sv1.dev.de.cw.net
  -            )
  -        }
  -    };
  -
  -=head1 EXAMPLE
  -
  - ident sendmail/.* {
  -   debug:
  -     prefix(prefix="%b %d %H:%M:%S <%L> $1 [%P]: ",
  -            timezone=local)
  -     -> file(path="sendmail.debug.log", append=0, perm=432)
  +NOTICE: Because B<OSSP fsl> implements the syslog(3) library API itself,
  +use cannot use the I<target>=C<local> feature of B<OSSP l2>, because it
  +would lead to a endless run-time loop! Be careful here, please.
  +
  +=head1 EXAMPLES
  +
  +=head2 Example 1: simple stderr logging
  +
  +A very simple I<l2-spec> just writing everything to F<stderr>
  +(filedescriptor 2):
  +
  + ident .*
  + fd(filedescriptor=2)
  +
  +=head2 Example 2: simple logfile writing
  +
  +A very simple I<l2-spec> just writing notices and more important
  +messages to a logfile with each message prepended with a classical
  +timestamp prefix:
  +
  + notice: prefix(prefix="[%b %d %H:%M:%S]")
  +         -> file(path="/var/log/foo")
  +
  +=head2 Example 3: complex logging
  +
  +A very complex I<l2-spec> logging example where... FIXME...
  +
  + noop
  + -> {
  +     (info): filter(
  +         regex="foo"
  +     ) 
  +     -> syslog(
  +         remotehost="localhost"
  +     );
  +     info: prefix(
  +         prefix="[%b %d %H:%M:%S] <%L> [%P]"
  +     ) 
  +     -> {
  +         debug/error: buffer(
  +             size=1024
  +         ) 
  +         -> file(
  +             path="a"
  +         );
  +         (trace|debug)/(trace): buffer(
  +             size=65536
  +         ) -> 
  +         file(
  +             path="b"
  +         )
  +     };
  +     prefix() -> {
  +         warning: filter(
  +             negate=1, 
  +             regex="foo"
  +         ) 
  +         -> irc(
  +             host=irc.dev.de.cw.net
  +         );
  +         error: filter(
  +             nocase=1, 
  +             regex="foo"
  +         ) 
  +         -> smtp(
  +             host=sv1.dev.de.cw.net
  +         );
  +         panic: smtp(
  +             host=sv1.dev.de.cw.net
  +         )
  +     }
    };
   
   =head1 FILES
   
  -The B<OSSP l2syslog> library reads configuration sections located in
  -one or more files. The path to the directory containing these file(s)
  -is specified at compile time and is given to the configure script via
  -C<--with-cfgdir=>I<cfgdir>.
  +=over 4
   
  -F<@sysconfdir@/fsl.*>
  +=item F<FSL_CFGDIR/fsl.*>
   
  -=head1 OPENPKG
  +B<OSSP fsl> reads configuration sections located in these files. The
  +path FSL_CFGDIR of the directory containing these file(s) has to be
  +specified at build-time of B<OSSP fsl> via the F<configure> option
  +C<--with-cfgdir=>I<cfgdir>.
   
  -OpenPKG RPM packages must require the package "fsl" in both C<BuildPreReq> and
  -C<PreReq> and force the packaged application to link against F<libfsl.a>.
  +=back
   
   =head1 SEE ALSO
   
  -syslog(3), 
  -B<OSSP l2> http://www.ossp.org/pkg/lib/l2/, 
  -B<OSSP cfg> http://www.ossp.org/pkg/lib/cfg/, 
  -B<OpenPKG> http://www.openpkg.org/.
  +=over 4
  +
  +=item syslog(2)
  +
  +The B<POSIX> API which B<OSSP fsl> replaces under link-time.
  +
  +=item B<OSSP l2>, l2(3), http://www.ossp.org/pkg/lib/l2/
  +
  +The underlying library providing the flexible logging
  +functionality (see I<l2-spec> above).
  +
  +=item B<OSSP cfg>, cfg(3), http://www.ossp.org/pkg/lib/cfg/
  +
  +The underlying library providing the parsing
  +of the B<OSSP fsl> configuration files (see F<FSL_CFGDIR/fsl.*> above).
  +
  +=item B<OSSP pcre>, pcre(3), http://www.ossp.org/pkg/lib/pcre/
  +
  +The underlying library providing the matching of program identifiers on
  +B<OSSP fsl> C<indent> configuration directives (see I<match> above).
  +
  +=item B<OpenPKG>, openpkg(7), http://www.openpkg.org/
  +
  +The project which prompted the development of B<OSSP fsl>
  +and which is also the primary application domain of it.
  +
  +=back
   
   =head1 ONLINE RESOURCES
   
  - Project Homepage:  http://www.ossp.org/pkg/lib/fsl/
  - Source Repository: http://cvs.ossp.org/pkg/lib/fsl/
  - Distribution Files: ftp://ftp.ossp.org/pkg/lib/fsl/
  +=over 4
  +
  +=item http://www.ossp.org/pkg/lib/fsl/
  +
  +=item http://cvs.ossp.org/pkg/lib/fsl/
  +
  +=item ftp://ftp.ossp.org/pkg/lib/fsl/
  +
  +=back
   
   =head1 HISTORY
   
  @@ -417,9 +490,15 @@
   messages of particular log levels to different files in the B<OpenPKG>
   F<postfix> package.
   
  -=head1 AUTHOR
  +=head1 AUTHORS
  +
  +=over 4
  +
  +=item Thomas Lotterer <thomas@lotterer.net>
  +
  +=item Ralf S. Engelschall <rse@engelschall.com>
   
  -Thomas Lotterer <thomas@lotterer.net>
  +=back
   
   =cut
   

From ossp-cvs-owner@ossp.org  Sat Jul 27 20:13:52 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F2466769A2; Sat, 27 Jul 2002 20:13:51 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl AUTHORS INSTALL Makefile.in THANKS configure....
Message-Id: <20020727181351.F2466769A2@mail.ossp.org>
Date: Sat, 27 Jul 2002 20:13:51 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   27-Jul-2002 20:13:51
  Branch: HEAD                             Handle: 2002072719135100

  Added files:
    ossp-pkg/fsl            AUTHORS INSTALL THANKS
  Modified files:
    ossp-pkg/fsl            Makefile.in configure.ac

  Log:
    source tree cleanups and fixes

  Summary:
    Revision    Changes     Path
    1.1         +9  -0      ossp-pkg/fsl/AUTHORS
    1.1         +17 -0      ossp-pkg/fsl/INSTALL
    1.6         +3  -1      ossp-pkg/fsl/Makefile.in
    1.1         +8  -0      ossp-pkg/fsl/THANKS
    1.8         +2  -0      ossp-pkg/fsl/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/AUTHORS
  ============================================================
  $ cvs update -p -r1.1 AUTHORS
  
    AUTHORS
  
    This is a list of authors who have written
    or edited major parts of the OSSP fsl sources.
  
    Ralf S. Engelschall   <rse@engelschall.com>
    Thomas Lotterer       <thomas@lotterer.net>
  
  Index: ossp-pkg/fsl/INSTALL
  ============================================================
  $ cvs update -p -r1.1 INSTALL
      __     _ 
     / _|___| |
    | |_/ __| |
    |  _\__ \ |
    |_| |___/_|
               
    OSSP fsl - Faking/Flexible Syslog Library
  
    INSTALLATION
  
    To install OSSP fsl into /path/to/fsl/ perform
    the following steps in your shell:
        
      $ ./configure --prefix=/path/to/fsl
      $ make
      $ make install
  
  Index: ossp-pkg/fsl/Makefile.in
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 Makefile.in
  --- ossp-pkg/fsl/Makefile.in	27 Jul 2002 15:37:21 -0000	1.5
  +++ ossp-pkg/fsl/Makefile.in	27 Jul 2002 18:13:51 -0000	1.6
  @@ -59,6 +59,8 @@
   TST_NAME    = fsl_test
   TST_OBJS    = fsl_test.o
   
  +FSL_CFGDIR  = @FSL_CFGDIR@
  +
   SUBDIRS     = @SUBDIR_L2@ @SUBDIR_CFG@ @SUBDIR_PCRE@
   
   .SUFFIXES:
  @@ -106,7 +108,7 @@
   	$(POD2MAN) --quotes=none \
   	           --section=3 --center="Faking/Flexible Syslog Library" \
   	           --release="$$D" --date="OSSP fsl $$V1" fsl.pod | \
  -	sed -e "s;FSL_VERSION_STR;$$V2;" >fsl.3
  +	sed -e "s;FSL_VERSION_STR;$$V2;" -e "s;FSL_CFGDIR;$(FSL_CFGDIR);g" >fsl.3
   
   check: $(TST_NAME)
   	@$(LIBTOOL) --mode=execute ./$(TST_NAME)
  Index: ossp-pkg/fsl/THANKS
  ============================================================
  $ cvs update -p -r1.1 THANKS
  
    THANKS
  
    Credit has to be given to the following people who contributed ideas,
    bugfixes, hints, gave platform feedback, etc. (in alphabetical order):
  
      o  Christoph Schug             <chris@schug.net>
  
  Index: ossp-pkg/fsl/configure.ac
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 configure.ac
  --- ossp-pkg/fsl/configure.ac	27 Jul 2002 15:37:21 -0000	1.7
  +++ ossp-pkg/fsl/configure.ac	27 Jul 2002 18:13:51 -0000	1.8
  @@ -98,6 +98,8 @@
   [ fsl_cfgdir="${prefix}/etc/fsl" ]
   )dnl
   AC_DEFINE_UNQUOTED(FSL_CFGDIR, "$fsl_cfgdir", [Define configuration directory])
  +FSL_CFGDIR="$fsl_cfgdir"
  +AC_SUBST(FSL_CFGDIR)
   AC_MSG_RESULT([$fsl_cfgdir])
   
   AC_MSG_CHECKING(for debugging using a l2spec)

From ossp-cvs-owner@ossp.org  Sat Jul 27 20:19:52 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C5733765EB; Sat, 27 Jul 2002 20:19:51 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl README VERSION
Message-Id: <20020727181951.C5733765EB@mail.ossp.org>
Date: Sat, 27 Jul 2002 20:19:51 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   27-Jul-2002 20:19:51
  Branch: HEAD                             Handle: 2002072719195100

  Modified files:
    ossp-pkg/fsl            README VERSION

  Log:
    bump version for release

  Summary:
    Revision    Changes     Path
    1.10        +1  -1      ossp-pkg/fsl/README
    1.10        +1  -1      ossp-pkg/fsl/VERSION
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/README
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 README
  --- ossp-pkg/fsl/README	27 Jul 2002 15:37:21 -0000	1.9
  +++ ossp-pkg/fsl/README	27 Jul 2002 18:19:51 -0000	1.10
  @@ -5,7 +5,7 @@
     |_| |___/_|
                
     OSSP fsl - Faking/Flexible Syslog Library
  -  Version 0.1.8 (25-Jul-2002)
  +  Version 0.1.9 (27-Jul-2002)
   
     ABSTRACT
   
  Index: ossp-pkg/fsl/VERSION
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 VERSION
  --- ossp-pkg/fsl/VERSION	25 Jul 2002 16:28:52 -0000	1.9
  +++ ossp-pkg/fsl/VERSION	27 Jul 2002 18:19:51 -0000	1.10
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP fsl (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP fsl, Version 0.1.8 (25-Jul-2002)
  +  This is OSSP fsl, Version 0.1.9 (27-Jul-2002)
   

From ossp-cvs-owner@ossp.org  Sun Jul 28 09:54:42 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CF52E765E7; Sun, 28 Jul 2002 09:54:41 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm ChangeLog THANKS devtool.conf
Message-Id: <20020728075441.CF52E765E7@mail.ossp.org>
Date: Sun, 28 Jul 2002 09:54:41 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Jul-2002 09:54:41
  Branch: HEAD                             Handle: 2002072808544100

  Modified files:
    ossp-pkg/mm             ChangeLog THANKS devtool.conf

  Log:
    fix tarball rolling

  Summary:
    Revision    Changes     Path
    1.36        +6  -0      ossp-pkg/mm/ChangeLog
    1.13        +1  -0      ossp-pkg/mm/THANKS
    1.2         +1  -1      ossp-pkg/mm/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/mm/ChangeLog
  ============================================================
  $ cvs diff -u -r1.35 -r1.36 ChangeLog
  --- ossp-pkg/mm/ChangeLog	26 Jul 2002 15:30:00 -0000	1.35
  +++ ossp-pkg/mm/ChangeLog	28 Jul 2002 07:54:41 -0000	1.36
  @@ -13,6 +13,12 @@
       | |_ / __/ 
     __|_(_)_____|______________________________________________________
               
  + Changes between 1.2.0 and 1.2.1 (26-Jul-2000 to 28-Jul-2002)
  +
  +  *) Fixed the package rolling: configure.ac was missing because
  +     of a bug in devtool.conf.
  +     [Kean Johnston <jkj@armory.com>]
  +
    Changes between 1.1.3 and 1.2.0 (01-Jul-2000 to 26-Jul-2002)
   
     *) Fixed race condition in temporary file creation.
  Index: ossp-pkg/mm/THANKS
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 THANKS
  --- ossp-pkg/mm/THANKS	26 Jul 2002 15:31:33 -0000	1.12
  +++ ossp-pkg/mm/THANKS	28 Jul 2002 07:54:41 -0000	1.13
  @@ -34,6 +34,7 @@
       o  Markus Kilbinger            <kilbi@rad.rwth-aachen.de>
       o  Kristian Köhntopp           <kk@netuse.de>
       o  Jim Jagielski               <jim@jagunet.com>
  +    o  Kean Johnston               <jkj@armory.com>
       o  Bob Jones                   <jonesr@pjm.com>
       o  Mats Josefsson              <matjos@rsv.se>
       o  Sergey Kachanovsky          <ranger@tversu.ru>
  Index: ossp-pkg/mm/devtool.conf
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.conf
  --- ossp-pkg/mm/devtool.conf	26 Jul 2002 13:04:40 -0000	1.1
  +++ ossp-pkg/mm/devtool.conf	28 Jul 2002 07:54:41 -0000	1.2
  @@ -40,7 +40,7 @@
       echo "+++ rolling"
       V=`./shtool version -l c -d short mm_vers.c`
       ./shtool tarball -o mm-${V}.tar.gz -d mm-${V} -u ossp -g ossp \
  -                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool*,*.tar.gz' -c 'gzip --best' .
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*,*.tar.gz' -c 'gzip --best' .
       ls -l mm-${V}.tar.gz
       echo "+++ testing"
       gunzip <mm-${V}.tar.gz | tar tvf -

From ossp-cvs-owner@ossp.org  Sun Jul 28 10:00:14 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 36FEE765E7; Sun, 28 Jul 2002 10:00:14 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm README mm_vers.c
Message-Id: <20020728080014.36FEE765E7@mail.ossp.org>
Date: Sun, 28 Jul 2002 10:00:14 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Jul-2002 10:00:13
  Branch: HEAD                             Handle: 2002072809001101

  Modified files:
    ossp-pkg/mm             README mm_vers.c

  Log:
    bump version for release

  Summary:
    Revision    Changes     Path
    1.72        +1  -1      ossp-pkg/mm/README
    1.39        +9  -9      ossp-pkg/mm/mm_vers.c
  ____________________________________________________________________________

  Index: ossp-pkg/mm/README
  ============================================================
  $ cvs diff -u -r1.71 -r1.72 README
  --- ossp-pkg/mm/README	26 Jul 2002 13:43:08 -0000	1.71
  +++ ossp-pkg/mm/README	28 Jul 2002 08:00:11 -0000	1.72
  @@ -6,7 +6,7 @@
     OSSP mm - Shared Memory Allocation
     Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
     Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>
  -  Version 1.2.0 (26-Jul-2002)
  +  Version 1.2.1 (28-Jul-2002)
   
     OSSP mm is a 2-layer abstraction library which simplifies the usage
     of shared memory between forked (and this way strongly related) processes
  Index: ossp-pkg/mm/mm_vers.c
  ============================================================
  $ cvs diff -u -r1.38 -r1.39 mm_vers.c
  --- ossp-pkg/mm/mm_vers.c	26 Jul 2002 13:04:40 -0000	1.38
  +++ ossp-pkg/mm/mm_vers.c	28 Jul 2002 08:00:12 -0000	1.39
  @@ -8,7 +8,7 @@
   #ifndef _MM_VERS_C_
   #define _MM_VERS_C_
   
  -#define MM_VERSION 0x102200
  +#define MM_VERSION 0x102201
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _MM_VERS_C_AS_HEADER_
   
   mm_version_t mm_version = {
  -    0x102200,
  -    "1.2.0",
  -    "1.2.0 (26-Jul-2002)",
  -    "This is OSSP mm, Version 1.2.0 (26-Jul-2002)",
  -    "OSSP mm 1.2.0 (26-Jul-2002)",
  -    "OSSP mm/1.2.0",
  -    "@(#)OSSP mm 1.2.0 (26-Jul-2002)",
  -    "$Id: OSSP mm 1.2.0 (26-Jul-2002) $"
  +    0x102201,
  +    "1.2.1",
  +    "1.2.1 (28-Jul-2002)",
  +    "This is OSSP mm, Version 1.2.1 (28-Jul-2002)",
  +    "OSSP mm 1.2.1 (28-Jul-2002)",
  +    "OSSP mm/1.2.1",
  +    "@(#)OSSP mm 1.2.1 (28-Jul-2002)",
  +    "$Id: OSSP mm 1.2.1 (28-Jul-2002) $"
   };
   
   #endif /* _MM_VERS_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Sun Jul 28 10:01:36 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2538976523; Sun, 28 Jul 2002 10:01:36 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa devtool.conf
Message-Id: <20020728080136.2538976523@mail.ossp.org>
Date: Sun, 28 Jul 2002 10:01:36 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Jul-2002 10:01:36
  Branch: HEAD                             Handle: 2002072809013500

  Modified files:
    ossp-pkg/sa             devtool.conf

  Log:
    fix devtool configuration

  Summary:
    Revision    Changes     Path
    1.8         +4  -4      ossp-pkg/sa/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/sa/devtool.conf
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 devtool.conf
  --- ossp-pkg/sa/devtool.conf	14 Mar 2002 15:39:43 -0000	1.7
  +++ ossp-pkg/sa/devtool.conf	28 Jul 2002 08:01:35 -0000	1.8
  @@ -3,7 +3,7 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.0 "1.6.*" all
  +    @autogen shtool   1.6.1 "1.6.*" all
       @autogen libtool  1.4.2 "1.4*"
       @autogen autoconf 2.53  "2.5[3-9]*"
   
  @@ -40,12 +40,12 @@
       echo "+++ rolling"
       V=`./shtool version -l txt -d short VERSION`
       ./shtool tarball -o sa-${V}.tar.gz -d sa-${V} -u ossp -g ossp \
  -                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool*,*.tar.gz' -c 'gzip --best' .
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*,*.tar.gz' -c 'gzip --best' .
       ls -l sa-${V}.tar.gz
       echo "+++ testing"
       gunzip <sa-${V}.tar.gz | tar tvf -
   
   %release
  -    echo "+++ copying to ftp://ftp.ossp.org/pkg/sa/"
  -    scp sa-*.tar.gz master.ossp.org:/e/ossp/ftp/pkg/sa/
  +    echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/sa/"
  +    scp sa-*.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/sa/
   

From ossp-cvs-owner@ossp.org  Sun Jul 28 10:03:13 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0857276523; Sun, 28 Jul 2002 10:03:13 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg devtool.conf
Message-Id: <20020728080313.0857276523@mail.ossp.org>
Date: Sun, 28 Jul 2002 10:03:13 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Jul-2002 10:03:12
  Branch: HEAD                             Handle: 2002072809031200

  Modified files:
    ossp-pkg/cfg            devtool.conf

  Log:
    fix devtool config

  Summary:
    Revision    Changes     Path
    1.2         +2  -2      ossp-pkg/cfg/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/devtool.conf
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.conf
  --- ossp-pkg/cfg/devtool.conf	9 Jul 2002 08:29:19 -0000	1.1
  +++ ossp-pkg/cfg/devtool.conf	28 Jul 2002 08:03:12 -0000	1.2
  @@ -3,7 +3,7 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.0 "1.6.*" all
  +    @autogen shtool   1.6.1 "1.6.*" all
       @autogen libtool  1.4.2 "1.4*"
       @autogen autoconf 2.53  "2.5[3-9]*"
   
  @@ -41,7 +41,7 @@
       echo "+++ rolling"
       V=`./shtool version -l txt -d short VERSION`
       ./shtool tarball -o cfg-${V}.tar.gz -d cfg-${V} -u ossp -g ossp \
  -                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool*,*.tar.gz' -c 'gzip --best' .
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*,*.tar.gz' -c 'gzip --best' .
       ls -l cfg-${V}.tar.gz
       echo "+++ testing"
       gunzip <cfg-${V}.tar.gz | tar tvf -

From ossp-cvs-owner@ossp.org  Sun Jul 28 10:03:50 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4DDAD76985; Sun, 28 Jul 2002 10:03:50 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex devtool.conf
Message-Id: <20020728080350.4DDAD76985@mail.ossp.org>
Date: Sun, 28 Jul 2002 10:03:50 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Jul-2002 10:03:50
  Branch: HEAD                             Handle: 2002072809034900

  Modified files:
    ossp-pkg/ex             devtool.conf

  Log:
    fix devtool config

  Summary:
    Revision    Changes     Path
    1.8         +2  -2      ossp-pkg/ex/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/ex/devtool.conf
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 devtool.conf
  --- ossp-pkg/ex/devtool.conf	30 Mar 2002 18:56:02 -0000	1.7
  +++ ossp-pkg/ex/devtool.conf	28 Jul 2002 08:03:49 -0000	1.8
  @@ -3,7 +3,7 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.0 "1.6.*" all
  +    @autogen shtool   1.6.1 "1.6.*" all
       @autogen libtool  1.4.2 "1.4*"
       @autogen autoconf 2.53  "2.5[3-9]*"
   
  @@ -40,7 +40,7 @@
       echo "+++ rolling"
       V=`./shtool version -l txt -d short VERSION`
       ./shtool tarball -o ex-${V}.tar.gz -d ex-${V} -u ossp -g ossp \
  -                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool*,*.tar.gz,00TODO' -c 'gzip --best' .
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*,*.tar.gz,00TODO' -c 'gzip --best' .
       ls -l ex-${V}.tar.gz
       echo "+++ testing"
       gunzip <ex-${V}.tar.gz | tar tvf -

From ossp-cvs-owner@ossp.org  Sun Jul 28 10:04:25 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BF60E76523; Sun, 28 Jul 2002 10:04:25 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl devtool.conf
Message-Id: <20020728080425.BF60E76523@mail.ossp.org>
Date: Sun, 28 Jul 2002 10:04:25 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Jul-2002 10:04:25
  Branch: HEAD                             Handle: 2002072809042500

  Modified files:
    ossp-pkg/fsl            devtool.conf

  Log:
    fix devtool config

  Summary:
    Revision    Changes     Path
    1.8         +2  -2      ossp-pkg/fsl/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/devtool.conf
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 devtool.conf
  --- ossp-pkg/fsl/devtool.conf	25 Jul 2002 12:48:16 -0000	1.7
  +++ ossp-pkg/fsl/devtool.conf	28 Jul 2002 08:04:25 -0000	1.8
  @@ -10,7 +10,7 @@
       done
   
   %autogen
  -    @autogen shtool   1.6.0 "1.6.*" all
  +    @autogen shtool   1.6.1 "1.6.*" all
       @autogen libtool  1.4.2 "1.4*"
       @autogen autoconf 2.53  "2.5[3-9]*"
   
  @@ -74,7 +74,7 @@
       echo "+++ rolling"
       V=`./shtool version -l txt -d short VERSION`
       ./shtool tarball -o fsl-${V}.tar.gz -d fsl-${V} -u ossp -g ossp \
  -                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool*,*.tar.gz,^#.*,.*~$' -c 'gzip --best' .
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*,*.tar.gz,^#.*,.*~$' -c 'gzip --best' .
       ls -l fsl-${V}.tar.gz
       echo "+++ testing"
       gunzip <fsl-${V}.tar.gz | tar tvf - | head -10

From ossp-cvs-owner@ossp.org  Sun Jul 28 10:04:54 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3DB9A76985; Sun, 28 Jul 2002 10:04:54 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 devtool.conf
Message-Id: <20020728080454.3DB9A76985@mail.ossp.org>
Date: Sun, 28 Jul 2002 10:04:54 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Jul-2002 10:04:54
  Branch: HEAD                             Handle: 2002072809045300

  Modified files:
    ossp-pkg/l2             devtool.conf

  Log:
    fix devtool config

  Summary:
    Revision    Changes     Path
    1.4         +2  -2      ossp-pkg/l2/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/l2/devtool.conf
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.conf
  --- ossp-pkg/l2/devtool.conf	14 Mar 2002 15:29:23 -0000	1.3
  +++ ossp-pkg/l2/devtool.conf	28 Jul 2002 08:04:53 -0000	1.4
  @@ -3,7 +3,7 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.0 "1.6.*" all
  +    @autogen shtool   1.6.1 "1.6.*" all
       @autogen libtool  1.4.2 "1.4*"
       @autogen autoconf 2.53  "2.5[3-9]*"
   
  @@ -28,5 +28,5 @@
       ./shtool fixperm -v .
       V=`./shtool version -l c -d short l2_version.c`
       ./shtool tarball -o l2-${V}.tar.gz -d l2-${V} -u ossp -g ossp \
  -                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf' -c 'gzip --best' .
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool.conf' -c 'gzip --best' .
   

From ossp-cvs-owner@ossp.org  Sun Jul 28 10:06:11 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5922076523; Sun, 28 Jul 2002 10:06:11 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/path devtool.conf
Message-Id: <20020728080611.5922076523@mail.ossp.org>
Date: Sun, 28 Jul 2002 10:06:11 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Jul-2002 10:06:11
  Branch: HEAD                             Handle: 2002072809061000

  Modified files:
    ossp-pkg/path           devtool.conf

  Log:
    fix devtool config

  Summary:
    Revision    Changes     Path
    1.2         +2  -2      ossp-pkg/path/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/path/devtool.conf
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 devtool.conf
  --- ossp-pkg/path/devtool.conf	21 Jan 2002 13:32:35 -0000	1.1.1.1
  +++ ossp-pkg/path/devtool.conf	28 Jul 2002 08:06:10 -0000	1.2
  @@ -3,7 +3,7 @@
   ##
   
   %autogen
  -    @autogen shtool   1.5.4 "1.5.*" all
  +    @autogen shtool   1.6.1 "1.6.*" all
       @autogen libtool  1.4.2 "1.4*"
       @autogen autoconf 2.52  "2.5.*"
   
  @@ -27,5 +27,5 @@
       ./shtool fixperm -v .
       V=`./shtool version -l txt -d short VERSION`
       ./shtool tarball -o path-${V}.tar.gz -d path-${V} -u ossp -g ossp \
  -                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf' -c 'gzip --best' .
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool.conf' -c 'gzip --best' .
   

From ossp-cvs-owner@ossp.org  Sun Jul 28 10:06:47 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 54E8976523; Sun, 28 Jul 2002 10:06:47 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/popt devtool.conf
Message-Id: <20020728080647.54E8976523@mail.ossp.org>
Date: Sun, 28 Jul 2002 10:06:47 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Jul-2002 10:06:47
  Branch: HEAD                             Handle: 2002072809064600

  Modified files:
    ossp-pkg/popt           devtool.conf

  Log:
    fix devtool config

  Summary:
    Revision    Changes     Path
    1.3         +2  -2      ossp-pkg/popt/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/popt/devtool.conf
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.conf
  --- ossp-pkg/popt/devtool.conf	14 Mar 2002 15:34:44 -0000	1.2
  +++ ossp-pkg/popt/devtool.conf	28 Jul 2002 08:06:46 -0000	1.3
  @@ -3,7 +3,7 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.0 "1.6.*" all
  +    @autogen shtool   1.6.1 "1.6.*" all
       @autogen libtool  1.4.2 "1.4*"
       @autogen autoconf 2.53  "2.5[3-9]*"
   
  @@ -27,5 +27,5 @@
       ./shtool fixperm -v .
       V=`./shtool version -l txt -d short VERSION`
       ./shtool tarball -o popt-${V}.tar.gz -d popt-${V} -u ossp -g ossp \
  -                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf' -c 'gzip --best' .
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool.conf' -c 'gzip --best' .
   

From ossp-cvs-owner@ossp.org  Sun Jul 28 10:07:17 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6C2FC76523; Sun, 28 Jul 2002 10:07:17 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth devtool.conf
Message-Id: <20020728080717.6C2FC76523@mail.ossp.org>
Date: Sun, 28 Jul 2002 10:07:17 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Jul-2002 10:07:17
  Branch: HEAD                             Handle: 2002072809071700

  Modified files:
    ossp-pkg/pth            devtool.conf

  Log:
    fix devtool config

  Summary:
    Revision    Changes     Path
    1.4         +3  -3      ossp-pkg/pth/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/pth/devtool.conf
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.conf
  --- ossp-pkg/pth/devtool.conf	1 Jul 2002 12:54:54 -0000	1.3
  +++ ossp-pkg/pth/devtool.conf	28 Jul 2002 08:07:17 -0000	1.4
  @@ -3,7 +3,7 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.0 "1.6.*" echo version scpp mkdir install fixperm tarball
  +    @autogen shtool   1.6.1 "1.6.*" echo version scpp mkdir install fixperm tarball
       @autogen libtool  1.4.2 "1.4*"
       @autogen autoconf 2.53  "2.5.*"
   
  @@ -32,14 +32,14 @@
       ./shtool fixperm -v .
       V=`./shtool version -lc -d short pth_vers.c`
       ./shtool tarball -o pth-${V}.tar.gz -d pth-${V} -u gnu -g pth \
  -                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool*' -c 'gzip --best' .
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*' -c 'gzip --best' .
   
   %snap
       make distclean >/dev/null 2>&1
       ./shtool fixperm -v .
       V=`./shtool version -lc -d short pth_vers.c`
       ./shtool tarball -o pth-${V}-SNAP.tar.gz -d pth-${V} -u gnu -g pth \
  -                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool*' -c 'gzip --best' .
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*' -c 'gzip --best' .
   
   %striptease
       perl striptease.pl

From ossp-cvs-owner@ossp.org  Sun Jul 28 10:07:41 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B20D976523; Sun, 28 Jul 2002 10:07:41 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str devtool.conf
Message-Id: <20020728080741.B20D976523@mail.ossp.org>
Date: Sun, 28 Jul 2002 10:07:41 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Jul-2002 10:07:41
  Branch: HEAD                             Handle: 2002072809074100

  Modified files:
    ossp-pkg/str            devtool.conf

  Log:
    fix devtool config

  Summary:
    Revision    Changes     Path
    1.3         +2  -2      ossp-pkg/str/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/str/devtool.conf
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.conf
  --- ossp-pkg/str/devtool.conf	14 Mar 2002 15:49:51 -0000	1.2
  +++ ossp-pkg/str/devtool.conf	28 Jul 2002 08:07:41 -0000	1.3
  @@ -3,7 +3,7 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.0 "1.6.*" echo install mkdir fixperm tarball version
  +    @autogen shtool   1.6.1 "1.6.*" echo install mkdir fixperm tarball version
       @autogen libtool  1.4.2 "1.4*"
       @autogen autoconf 2.53  "2.5[3-9]*"
   
  @@ -27,5 +27,5 @@
       ./shtool fixperm -v .
       V=`./shtool version -l c -d short str_version.c`
       ./shtool tarball -o str-${V}.tar.gz -d str-${V} -u ossp -g ossp \
  -                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf' -c 'gzip --best' .
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool.conf' -c 'gzip --best' .
   

From ossp-cvs-owner@ossp.org  Sun Jul 28 10:08:14 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4D53376523; Sun, 28 Jul 2002 10:08:14 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tai devtool.conf
Message-Id: <20020728080814.4D53376523@mail.ossp.org>
Date: Sun, 28 Jul 2002 10:08:14 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Jul-2002 10:08:14
  Branch: HEAD                             Handle: 2002072809081300

  Modified files:
    ossp-pkg/tai            devtool.conf

  Log:
    fix devtool config

  Summary:
    Revision    Changes     Path
    1.2         +2  -2      ossp-pkg/tai/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/tai/devtool.conf
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 devtool.conf
  --- ossp-pkg/tai/devtool.conf	18 Apr 2002 09:10:46 -0000	1.1.1.1
  +++ ossp-pkg/tai/devtool.conf	28 Jul 2002 08:08:13 -0000	1.2
  @@ -3,7 +3,7 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.0 "1.6.*" all
  +    @autogen shtool   1.6.1 "1.6.*" all
       @autogen libtool  1.4.2 "1.4*"
       @autogen autoconf 2.53  "2.5[3-9]*"
   
  @@ -40,7 +40,7 @@
       echo "+++ rolling"
       V=`./shtool version -l txt -d short VERSION`
       ./shtool tarball -o tai-${V}.tar.gz -d tai-${V} -u ossp -g ossp \
  -                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool*,*.tar.gz' -c 'gzip --best' .
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*,*.tar.gz' -c 'gzip --best' .
       ls -l tai-${V}.tar.gz
       echo "+++ testing"
       gunzip <tai-${V}.tar.gz | tar tvf -

From ossp-cvs-owner@ossp.org  Sun Jul 28 10:08:42 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7288B76523; Sun, 28 Jul 2002 10:08:42 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ui64 devtool.conf
Message-Id: <20020728080842.7288B76523@mail.ossp.org>
Date: Sun, 28 Jul 2002 10:08:42 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Jul-2002 10:08:42
  Branch: HEAD                             Handle: 2002072809084200

  Modified files:
    ossp-pkg/ui64           devtool.conf

  Log:
    fix devtool config

  Summary:
    Revision    Changes     Path
    1.3         +2  -2      ossp-pkg/ui64/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/ui64/devtool.conf
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.conf
  --- ossp-pkg/ui64/devtool.conf	26 Jun 2002 16:06:15 -0000	1.2
  +++ ossp-pkg/ui64/devtool.conf	28 Jul 2002 08:08:42 -0000	1.3
  @@ -3,7 +3,7 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.0 "1.6.*" all
  +    @autogen shtool   1.6.1 "1.6.*" all
       @autogen libtool  1.4.2 "1.4*"
       @autogen autoconf 2.53  "2.5[3-9]*"
   
  @@ -41,7 +41,7 @@
       echo "+++ rolling"
       V=`./shtool version -l txt -d short VERSION`
       ./shtool tarball -o ui64-${V}.tar.gz -d ui64-${V} -u ossp -g ossp \
  -                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool*,*.tar.gz,00TODO' -c 'gzip --best' .
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*,*.tar.gz,00TODO' -c 'gzip --best' .
       ls -l ui64-${V}.tar.gz
       echo "+++ testing"
       gunzip <ui64-${V}.tar.gz | tar tvf -

From ossp-cvs-owner@ossp.org  Sun Jul 28 10:09:49 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BB96076985; Sun, 28 Jul 2002 10:09:49 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val devtool.conf
Message-Id: <20020728080949.BB96076985@mail.ossp.org>
Date: Sun, 28 Jul 2002 10:09:49 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Jul-2002 10:09:49
  Branch: HEAD                             Handle: 2002072809094900

  Modified files:
    ossp-pkg/val            devtool.conf

  Log:
    fix devtool config

  Summary:
    Revision    Changes     Path
    1.7         +2  -2      ossp-pkg/val/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/val/devtool.conf
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 devtool.conf
  --- ossp-pkg/val/devtool.conf	15 Mar 2002 11:32:59 -0000	1.6
  +++ ossp-pkg/val/devtool.conf	28 Jul 2002 08:09:49 -0000	1.7
  @@ -3,7 +3,7 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.0 "1.[56].*" all
  +    @autogen shtool   1.6.1 "1.[56].*" all
       @autogen libtool  1.4.2 "1.4*"
       @autogen autoconf 2.53  "2.5[3-9]*"
   
  @@ -31,5 +31,5 @@
       ./shtool fixperm -v .
       V=`./shtool version -l txt -d short VERSION`
       ./shtool tarball -o val-${V}.tar.gz -d val-${V} -u ossp -g ossp \
  -                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool*' -c 'gzip --best' .
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*' -c 'gzip --best' .
   

From ossp-cvs-owner@ossp.org  Sun Jul 28 10:10:10 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3355A76523; Sun, 28 Jul 2002 10:10:10 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var devtool.conf
Message-Id: <20020728081010.3355A76523@mail.ossp.org>
Date: Sun, 28 Jul 2002 10:10:10 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Jul-2002 10:10:10
  Branch: HEAD                             Handle: 2002072809100900

  Modified files:
    ossp-pkg/var            devtool.conf

  Log:
    fix devtool config

  Summary:
    Revision    Changes     Path
    1.5         +2  -2      ossp-pkg/var/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/var/devtool.conf
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 devtool.conf
  --- ossp-pkg/var/devtool.conf	9 Mar 2002 19:23:37 -0000	1.4
  +++ ossp-pkg/var/devtool.conf	28 Jul 2002 08:10:09 -0000	1.5
  @@ -3,7 +3,7 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.0 "1.[56].*" all
  +    @autogen shtool   1.6.1 "1.[56].*" all
       @autogen libtool  1.4.2 "1.4*"
       @autogen autoconf 2.53  "2.5[3-9]*"
   
  @@ -31,5 +31,5 @@
       shtool fixperm -v .
       V=`shtool version -l txt -d short VERSION`
       shtool tarball -o var-${V}.tar.gz -d var-${V} -u ossp -g ossp \
  -                   -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf' -c 'gzip --best' .
  +                   -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool.conf' -c 'gzip --best' .
   

From ossp-cvs-owner@ossp.org  Sun Jul 28 10:10:33 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 34CA3769A7; Sun, 28 Jul 2002 10:10:33 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/xds devtool.conf
Message-Id: <20020728081033.34CA3769A7@mail.ossp.org>
Date: Sun, 28 Jul 2002 10:10:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Jul-2002 10:10:33
  Branch: HEAD                             Handle: 2002072809103200

  Modified files:
    ossp-pkg/xds            devtool.conf

  Log:
    fix devtool config

  Summary:
    Revision    Changes     Path
    1.3         +2  -2      ossp-pkg/xds/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/xds/devtool.conf
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.conf
  --- ossp-pkg/xds/devtool.conf	17 Mar 2002 10:25:53 -0000	1.2
  +++ ossp-pkg/xds/devtool.conf	28 Jul 2002 08:10:32 -0000	1.3
  @@ -3,7 +3,7 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.0 "1.6.*" all
  +    @autogen shtool   1.6.1 "1.6.*" all
       @autogen libtool  1.4.2 "1.4*"
       @autogen autoconf 2.53  "2.5[3-9]*"
   
  @@ -28,5 +28,5 @@
       ./shtool fixperm -v .
       V=`./shtool version -l c -d short xds_version.c`
       ./shtool tarball -o xds-${V}.tar.gz -d xds-${V} -u ossp -g ossp \
  -                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf' -c 'gzip --best' .
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool.conf' -c 'gzip --best' .
   

From ossp-cvs-owner@ossp.org  Sun Jul 28 10:11:02 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F0EEF76523; Sun, 28 Jul 2002 10:11:01 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new news.txt ossp-web/pkg/lib index.wml ossp-web/...
Message-Id: <20020728081101.F0EEF76523@mail.ossp.org>
Date: Sun, 28 Jul 2002 10:11:01 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   28-Jul-2002 10:11:01
  Branch: HEAD                             Handle: 2002072809110001

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/mm     index.wml

  Log:
    release OSSP mm 1.2.1

  Summary:
    Revision    Changes     Path
    1.15        +3  -2      ossp-web/new/news.txt
    1.19        +1  -1      ossp-web/pkg/lib/index.wml
    1.6         +2  -2      ossp-web/pkg/lib/mm/index.wml
  ____________________________________________________________________________

  Index: ossp-web/new/news.txt
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 news.txt
  --- ossp-web/new/news.txt	26 Jul 2002 13:53:15 -0000	1.14
  +++ ossp-web/new/news.txt	28 Jul 2002 08:11:00 -0000	1.15
  @@ -1,5 +1,6 @@
  -26-Jul-2002: Released T<OSSP mm> 1.2.0
  -25-Jul-2002: Released T<OSSP fsl> 0.1.5
  +28-Jul-2002: Released L<OSSP mm> 1.2.1
  +26-Jul-2002: Released L<OSSP mm> 1.2.0
  +25-Jul-2002: Released L<OSSP fsl> 0.1.5
   12-Jul-2002: Released T<GNU shtool> 1.6.1
   30-May-2002: Released T<OSSP lmtp2nntp> 1.2a5
   01-Apr-2002: Released L<OSSP str> 0.9.7
  Index: ossp-web/pkg/lib/index.wml
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 index.wml
  --- ossp-web/pkg/lib/index.wml	26 Jul 2002 13:53:16 -0000	1.18
  +++ ossp-web/pkg/lib/index.wml	28 Jul 2002 08:11:01 -0000	1.19
  @@ -19,7 +19,7 @@
   			done=80 stable=none unstable=0.9.7>
     <pkg_item name="mm" longname="OSSP mm" type="lib"
               desc="Shared Memory Allocation"
  -			done=100 stable=1.2.0 unstable=none>
  +			done=100 stable=1.2.1 unstable=none>
     <pkg_item name="sa" longname="OSSP sa" type="lib"
               desc="Socket Abstraction"
   			done=95 stable=none unstable=0.9.1>
  Index: ossp-web/pkg/lib/mm/index.wml
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 index.wml
  --- ossp-web/pkg/lib/mm/index.wml	26 Jul 2002 13:53:16 -0000	1.5
  +++ ossp-web/pkg/lib/mm/index.wml	28 Jul 2002 08:11:01 -0000	1.6
  @@ -22,7 +22,7 @@
   <h2>Status</h2>
   
   <pkg_status
  -    stable="1.2.0"   stable_date="26-Jul-2002"
  +    stable="1.2.1"   stable_date="28-Jul-2002"
       unstable="none"  unstable_date="none"
   	done=100>
   
  @@ -33,5 +33,5 @@
       url=$(FTP_ROOT_URL)/pkg/lib/mm/
       directory=$(FTP_ROOT_DIR)/pkg/lib/mm/
       files="mm-*.tar.gz" 
  -	stable="mm-1.2.0.tar.gz" unstable="none">
  +	stable="mm-1.2.1.tar.gz" unstable="none">
   	

From ossp-cvs-owner@ossp.org  Sun Jul 28 13:09:17 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D85A776553; Sun, 28 Jul 2002 13:09:16 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg cfg.pod
Message-Id: <20020728110916.D85A776553@mail.ossp.org>
Date: Sun, 28 Jul 2002 13:09:16 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Jul-2002 13:09:16
  Branch: HEAD                             Handle: 2002072812091600

  Modified files:
    ossp-pkg/cfg            cfg.pod

  Log:
    some style cleanups

  Summary:
    Revision    Changes     Path
    1.5         +56 -56     ossp-pkg/cfg/cfg.pod
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/cfg.pod
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 cfg.pod
  --- ossp-pkg/cfg/cfg.pod	18 Jul 2002 15:34:55 -0000	1.4
  +++ ossp-pkg/cfg/cfg.pod	28 Jul 2002 11:09:16 -0000	1.5
  @@ -52,91 +52,91 @@
   The configuration syntax is described by the following context-free
   (Chomsky-2) grammar:
   
  -B<sequence>      ::= I<empty>
  -                | B<directive>
  -                | B<directive> B<SEP> B<sequence>
  -
  -B<directive>     ::= B<token> 
  -                | B<token> B<directive>
  -
  -B<token>         ::= B<OPEN> B<sequence> B<CLOSE>
  -                | B<string>
  -
  -B<string>        ::= B<DQ_STRING>   # double quoted string
  -                | B<SQ_STRING>   # single quoted string
  -                | B<FQ_STRING>   # flexible quoted string
  -                | B<PT_STRING>   # plain text string
  +B<sequence>   ::= I<empty>
  +             | B<directive>
  +             | B<directive> B<SEP> B<sequence>
  +
  +B<directive>  ::= B<token> 
  +             | B<token> B<directive>
  +
  +B<token>      ::= B<OPEN> B<sequence> B<CLOSE>
  +             | B<string>
  +
  +B<string>     ::= B<DQ_STRING>   # double quoted string
  +             | B<SQ_STRING>   # single quoted string
  +             | B<FQ_STRING>   # flexible quoted string
  +             | B<PT_STRING>   # plain text string
   
   The other contained terminal symbols are defined itself by the following
   set of grammars production (regular sub-grammars for character
   sequences given as Perl-style regular expressions "/I<regex>/"):
   
  -B<SEP>           ::= /;/
  +B<SEP>        ::= /;/
   
  -B<OPEN>          ::= /{/
  +B<OPEN>       ::= /{/
   
  -B<CLOSE>         ::= /}/
  +B<CLOSE>      ::= /}/
   
  -B<DQ_STRING>     ::= /"/ B<DQ_CHARS> /"/
  +B<DQ_STRING>  ::= /"/ B<DQ_CHARS> /"/
   
  -B<DQ_CHARS>      ::= I<empty>
  -                | B<DQ_CHAR> B<DQ_CHARS>
  +B<DQ_CHARS>   ::= I<empty>
  +             | B<DQ_CHAR> B<DQ_CHARS>
   
  -B<DQ_CHAR>       ::= /\\"/               # escaped quote
  -                | /\\x\{[0-9a-fA-F]+\}/ # hex-char group
  -                | /\\x[0-9a-fA-F]{2}/ # hex-char
  -                | /\\[0-7]{1,3}/      # octal character
  -                | /\\[nrtbfae]/       # NL,CR,TAB,BS,FF,BEL,ESC
  -                | /\\\n[ \t]*/        # line continuation
  -                | /\\\\/              # escaped escape
  -                | /./                 # any other char
  +B<DQ_CHAR>    ::= /\\"/               # escaped quote
  +             | /\\x\{[0-9a-fA-F]+\}/ # hex-char group
  +             | /\\x[0-9a-fA-F]{2}/ # hex-char
  +             | /\\[0-7]{1,3}/      # octal character
  +             | /\\[nrtbfae]/       # special character
  +             | /\\\n[ \t]*/        # line continuation
  +             | /\\\\/              # escaped escape
  +             | /./                 # any other char
   
  -B<SQ_STRING>     ::= /'/ B<SQ_CHARS> /'/
  +B<SQ_STRING>  ::= /'/ B<SQ_CHARS> /'/
   
  -B<SQ_CHARS>      ::= I<empty>
  -                | B<SQ_CHAR> B<SQ_CHARS>
  +B<SQ_CHARS>   ::= I<empty>
  +             | B<SQ_CHAR> B<SQ_CHARS>
   
  -B<SQ_CHAR>       ::= /\\'/               # escaped quote
  -                | /\\\n[ \t]*/        # line contination
  -                | /\\\\/              # escaped escape
  -                | /./                 # any other char
  +B<SQ_CHAR>    ::= /\\'/               # escaped quote
  +             | /\\\n[ \t]*/        # line contination
  +             | /\\\\/              # escaped escape
  +             | /./                 # any other char
   
  -B<FQ_STRING>     ::= /q/ B<FQ_OPEN> B<FQ_CHARS> B<FQ_CLOSE>
  +B<FQ_STRING>  ::= /q/ B<FQ_OPEN> B<FQ_CHARS> B<FQ_CLOSE>
   
  -B<FQ_CHARS>      ::= I<empty>
  -                | B<FQ_CHAR> B<FQ_CHARS>
  +B<FQ_CHARS>   ::= I<empty>
  +             | B<FQ_CHAR> B<FQ_CHARS>
   
  -B<FQ_CHAR>       ::= /\\/ B<FQ_OPEN>    # escaped open
  -                | /\\/ B<FQ_CLOSE>    # escaped close
  -                | /\\\n[ \t]*/        # line contination
  -                | /./                 # any other char
  +B<FQ_CHAR>    ::= /\\/ B<FQ_OPEN>        # escaped open
  +             | /\\/ B<FQ_CLOSE>       # escaped close
  +             | /\\\n[ \t]*/        # line contination
  +             | /./                 # any other char
   
  -B<FQ_OPEN>       ::= /[!"#$%&'()*+,-./:;<=>?@\[\\\]^_`{|}~]/
  +B<FQ_OPEN>    ::= /[!"#$%&'()*+,-./:;<=>?@\[\\\]^_`{|}~]/
   
  -B<FQ_CLOSE>      ::= "B<FQ_OPEN> or corresponding closing char
  -                  ('}])>') if B<FQ_OPEN> is a char of '{[(<'"
  +B<FQ_CLOSE>   ::= "B<FQ_OPEN> or corresponding closing char
  +               ('}])>') if B<FQ_OPEN> is a char of '{[(<'"
   
  -B<PT_STRING>     ::= B<PT_CHAR> B<PT_CHARS>
  +B<PT_STRING>  ::= B<PT_CHAR> B<PT_CHARS>
   
  -B<PT_CHARS>      ::= I<empty>
  -                | B<PT_CHAR> B<PT_STRING>
  +B<PT_CHARS>   ::= I<empty>
  +             | B<PT_CHAR> B<PT_STRING>
   
  -B<PT_CHAR>       ::= /[^ \t\n;{}"']/     # none of specials
  +B<PT_CHAR>    ::= /[^ \t\n;{}"']/     # none of specials
   
   Additionally, white-space B<WS> and comment B<CO> tokens are allowed at
   any position in the above productions of the previous grammar part.
   
  -B<WS>            ::= /[ \t\n]+/
  +B<WS>         ::= /[ \t\n]+/
   
  -B<CO>            ::= B<CO_C>                # style of C
  -                | B<CO_CXX>              # style of C++
  -                | B<CO_SH>               # style of /bin/sh
  +B<CO>         ::= B<CO_C>                # style of C
  +             | B<CO_CXX>              # style of C++
  +             | B<CO_SH>               # style of /bin/sh
   
  -B<CO_C>          ::= /\/\*([^*]|\*(?!\/))*\*\//
  +B<CO_C>       ::= /\/\*([^*]|\*(?!\/))*\*\//
   
  -B<CO_CXX>        ::= /\/\/[^\n]*/
  +B<CO_CXX>     ::= /\/\/[^\n]*/
   
  -B<CO_SH>         ::= /#[^\n]*/
  +B<CO_SH>      ::= /#[^\n]*/
   
   Finally, any configuration line can have a trailing backslash character
   (C<\>) just before the newline character for simple line continuation.

From ossp-cvs-owner@ossp.org  Mon Jul 29 13:39:44 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 66C52765E5; Mon, 29 Jul 2002 13:39:44 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp 00TODO
Message-Id: <20020729113944.66C52765E5@mail.ossp.org>
Date: Mon, 29 Jul 2002 13:39:44 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   29-Jul-2002 13:39:44
  Branch: HEAD                             Handle: 2002072912394300

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO

  Log:
    security issue; lib_cfg consideration

  Summary:
    Revision    Changes     Path
    1.61        +24 -0      ossp-pkg/lmtp2nntp/00TODO
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================
  $ cvs diff -u -r1.60 -r1.61 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	28 May 2002 12:19:47 -0000	1.60
  +++ ossp-pkg/lmtp2nntp/00TODO	29 Jul 2002 11:39:43 -0000	1.61
  @@ -75,3 +75,27 @@
       crossposting problem                          -h [Newsgroups:see perl example above and use feature 2.)\n]
       potential to merge post/header modes          -h [Newsgroups:${_EnvelopeRCPT}\n]
   
  +
  +===================================================================
  +RCS file: /e/ossp/cvs/ossp-pkg/fsl/fsl.c,v
  +retrieving revision 1.22
  +retrieving revision 1.21
  +diff -r1.22 -r1.21
  +341c341
  +<         if ((l2rv = l2_spec(&ch, ctx.l2_fslenv, "%s", argl2spec)) != L2_OK) {
  +---
  +>         if ((l2rv = l2_spec(&ch, ctx.l2_fslenv, argl2spec)) != L2_OK) {
  +513c513
  +<                     if ((l2rv = l2_spec(&ch, ctx.l2_env, "%s", argl2spec)) != L2_OK) {
  +---
  +>                     if ((l2rv = l2_spec(&ch, ctx.l2_env, argl2spec)) != L2_OK) {
  +
  +Fix a big security hole: the l2_spec() is a varargs function which gets
  +a format string and variable arguments. In case only a fixed string is
  +used we have to use "%s" as the format string or else "%x" in the string
  +is treated like a formatter (and hence cause a segfault or whatever
  +else if it tries to fetch args from the stack). This especially also no
  +longer requires the formatters to be written %%X...
  +
  +    consider using lib_cfg for configuration file parsing
  +

From ossp-cvs-owner@ossp.org  Mon Jul 29 13:41:48 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1ECB7765E5; Mon, 29 Jul 2002 13:41:48 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl TODO
Message-Id: <20020729114148.1ECB7765E5@mail.ossp.org>
Date: Mon, 29 Jul 2002 13:41:48 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   29-Jul-2002 13:41:48
  Branch: HEAD                             Handle: 2002072912414700

  Modified files:
    ossp-pkg/fsl            TODO

  Log:
    version check

  Summary:
    Revision    Changes     Path
    1.2         +1  -0      ossp-pkg/fsl/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/TODO
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 TODO
  --- ossp-pkg/fsl/TODO	27 Jul 2002 15:35:57 -0000	1.1
  +++ ossp-pkg/fsl/TODO	29 Jul 2002 11:41:47 -0000	1.2
  @@ -3,3 +3,4 @@
   - allow syslog() without previous openlog()?!
   - support "default" ident handling
   - cfg_destroy fixing and use it
  +- runtime version check for sub libraries

From ossp-cvs-owner@ossp.org  Mon Jul 29 13:45:20 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7E6A8767CB; Mon, 29 Jul 2002 13:45:20 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg TODO ossp-pkg/l2 TODO ossp-pkg/pcre TODO
Message-Id: <20020729114520.7E6A8767CB@mail.ossp.org>
Date: Mon, 29 Jul 2002 13:45:20 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   29-Jul-2002 13:45:20
  Branch: HEAD                             Handle: 2002072912451801

  Added files:
    ossp-pkg/cfg            TODO
    ossp-pkg/pcre           TODO
  Modified files:
    ossp-pkg/l2             TODO

  Log:
    embedding

  Summary:
    Revision    Changes     Path
    1.1         +2  -0      ossp-pkg/cfg/TODO
    1.57        +2  -0      ossp-pkg/l2/TODO
    1.1         +2  -0      ossp-pkg/pcre/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/TODO
  ============================================================
  $ cvs update -p -r1.1 TODO
  
  - add support for prefixes of all non-static symbols to better support embedding
  Index: ossp-pkg/l2/TODO
  ============================================================
  $ cvs diff -u -r1.56 -r1.57 TODO
  --- ossp-pkg/l2/TODO	25 Jul 2002 07:50:27 -0000	1.56
  +++ ossp-pkg/l2/TODO	29 Jul 2002 11:45:18 -0000	1.57
  @@ -354,3 +354,5 @@
   - automatisch number -> string mapping (fuer error strings)
   - !debug -> !code
   
  +
  +- add support for prefixes of all non-static symbols to better support embedding
  Index: ossp-pkg/pcre/TODO
  ============================================================
  $ cvs update -p -r1.1 TODO
  
  - add support for prefixes of all non-static symbols to better support embedding

From ossp-cvs-owner@ossp.org  Mon Jul 29 14:48:18 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C0684765ED; Mon, 29 Jul 2002 14:48:17 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.c
Message-Id: <20020729124817.C0684765ED@mail.ossp.org>
Date: Mon, 29 Jul 2002 14:48:17 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   29-Jul-2002 14:48:17
  Branch: HEAD                             Handle: 2002072913481700

  Modified files:
    ossp-pkg/fsl            fsl.c

  Log:
    removed double closedir()

  Summary:
    Revision    Changes     Path
    1.33        +0  -1      ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.32 -r1.33 fsl.c
  --- ossp-pkg/fsl/fsl.c	27 Jul 2002 15:37:21 -0000	1.32
  +++ ossp-pkg/fsl/fsl.c	29 Jul 2002 12:48:17 -0000	1.33
  @@ -313,7 +313,6 @@
               filename = NULL;
           }
       }
  -    closedir(dp);
       CU(rc);
   CUS:
       if (dp != NULL)

From ossp-cvs-owner@ossp.org  Mon Jul 29 14:48:43 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A7767767D1; Mon, 29 Jul 2002 14:48:43 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.c
Message-Id: <20020729124843.A7767767D1@mail.ossp.org>
Date: Mon, 29 Jul 2002 14:48:43 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   29-Jul-2002 14:48:43
  Branch: HEAD                             Handle: 2002072913484300

  Modified files:
    ossp-pkg/fsl            fsl.c

  Log:
    improve tracing

  Summary:
    Revision    Changes     Path
    1.34        +1  -0      ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.33 -r1.34 fsl.c
  --- ossp-pkg/fsl/fsl.c	29 Jul 2002 12:48:17 -0000	1.33
  +++ ossp-pkg/fsl/fsl.c	29 Jul 2002 12:48:43 -0000	1.34
  @@ -335,6 +335,7 @@
           return FSL_OK;
       if (rv != FSL_ERR_SYS || errno != ENOENT)
           return rv;
  +    fsldebug(L2_LEVEL_TRACE, "readfileorallfiles: file does not exist");
       if ((rv = readallfiles(buffer)) != FSL_OK)
           return rv;
       return FSL_OK;

From ossp-cvs-owner@ossp.org  Mon Jul 29 15:07:05 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 70D9D765EF; Mon, 29 Jul 2002 15:07:05 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.c
Message-Id: <20020729130705.70D9D765EF@mail.ossp.org>
Date: Mon, 29 Jul 2002 15:07:05 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   29-Jul-2002 15:07:05
  Branch: HEAD                             Handle: 2002072914070500

  Modified files:
    ossp-pkg/fsl            fsl.c

  Log:
    removed lots of useless newlines in fsldebug() calls

  Summary:
    Revision    Changes     Path
    1.35        +80 -80     ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.34 -r1.35 fsl.c
  --- ossp-pkg/fsl/fsl.c	29 Jul 2002 12:48:43 -0000	1.34
  +++ ossp-pkg/fsl/fsl.c	29 Jul 2002 13:07:05 -0000	1.35
  @@ -217,7 +217,7 @@
       if (filename == NULL || buffer == NULL)
           CU(FSL_ERR_ARG);
   
  -    fsldebug(L2_LEVEL_TRACE, "appendfiletobuffer(buffer, filename=\"%s\")\n", filename);
  +    fsldebug(L2_LEVEL_TRACE, "appendfiletobuffer(buffer, filename=\"%s\")", filename);
   
       if ((fd = open(filename, O_RDONLY)) == -1)
           CU(FSL_ERR_SYS);
  @@ -262,7 +262,7 @@
   
       if (ident == NULL || buffer == NULL)
           CU(FSL_ERR_ARG);
  -    fsldebug(L2_LEVEL_TRACE, "readfile(buffer, ident=\"%s\")\n", ident);
  +    fsldebug(L2_LEVEL_TRACE, "readfile(buffer, ident=\"%s\")", ident);
   
       if ((filename = (char *)malloc(strlen(FSL_CFGDIR) + 1 + 
                                      strlen(FSL_PREFIX) + strlen(ident) + 1)) == NULL)
  @@ -291,7 +291,7 @@
   
       if (buffer == NULL)
           CU(FSL_ERR_ARG);
  -    fsldebug(L2_LEVEL_TRACE, "readallfiles(buffer) globbing \"%s/%s*\"\n", FSL_CFGDIR, FSL_PREFIX);
  +    fsldebug(L2_LEVEL_TRACE, "readallfiles(buffer) globbing \"%s/%s*\"", FSL_CFGDIR, FSL_PREFIX);
   
       if ((dp = opendir(FSL_CFGDIR)) == NULL)
           CU(FSL_ERR_SYS);
  @@ -329,7 +329,7 @@
   
       if (ident == NULL)
           return FSL_ERR_ARG;
  -    fsldebug(L2_LEVEL_TRACE, "readfileorallfiles(buffer, ident=\"%s\")\n", ident);
  +    fsldebug(L2_LEVEL_TRACE, "readfileorallfiles(buffer, ident=\"%s\")", ident);
   
       if ((rv = readfile(buffer, ident)) == FSL_OK)
           return FSL_OK;
  @@ -353,18 +353,18 @@
   
       while (cfgnode != NULL) {
           if ((cfgrv = cfg_node_get(cfg, cfgnode, CFG_NODE_ATTR_TOKEN, &cp)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "traverse: cfg_node_get(CFG_NODE_ATTR_TOKEN) failed: %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "traverse: cfg_node_get(CFG_NODE_ATTR_TOKEN) failed: %s (%d)", cp, cfgrv); CU(1); }
           if ((cfgrv = cfg_node_get(cfg, cfgnode, CFG_NODE_ATTR_TYPE, &cfgtyp)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "traverse: cfg_node_get(CFG_NODE_ATTR_TYPE) failed: %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "traverse: cfg_node_get(CFG_NODE_ATTR_TYPE) failed: %s (%d)", cp, cfgrv); CU(1); }
           if ((cfgrv = cfg_node_get(cfg, cfgnode, CFG_NODE_ATTR_CHILDS, &cfgchilds)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "traverse: cfg_node_get(CFG_NODE_ATTR_CHILDS) failed: %s (%d)\n", cp, cfgrv); CU(1); }
  -        fsldebug(L2_LEVEL_DEBUG, "traverse: cfgnode=0x%.8lx[%d], cp=\"%s\", type=%d\n", (unsigned long)cfgnode, cfgchilds, (cp != NULL ? cp : "<NULL>"), cfgtyp);
  +            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "traverse: cfg_node_get(CFG_NODE_ATTR_CHILDS) failed: %s (%d)", cp, cfgrv); CU(1); }
  +        fsldebug(L2_LEVEL_DEBUG, "traverse: cfgnode=0x%.8lx[%d], cp=\"%s\", type=%d", (unsigned long)cfgnode, cfgchilds, (cp != NULL ? cp : "<NULL>"), cfgtyp);
           if ((cfgrv = cfg_node_get(cfg, cfgnode, CFG_NODE_ATTR_CHILD1, &cfgchld)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "traverse: cfg_node_get(CFG_NODE_ATTR_CHILD1) failed: %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "traverse: cfg_node_get(CFG_NODE_ATTR_CHILD1) failed: %s (%d)", cp, cfgrv); CU(1); }
           if (cfgchld != NULL)
               traverse(cfg, cfgchld);
           if ((cfgrv = cfg_node_get(cfg, cfgnode, CFG_NODE_ATTR_RBROTH, &cfgnode)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "traverse: cfg_node_get(CFG_NODE_ATTR_RBROTH) failed: %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "traverse: cfg_node_get(CFG_NODE_ATTR_RBROTH) failed: %s (%d)", cp, cfgrv); CU(1); }
       }
       CU(0);
   CUS:
  @@ -472,23 +472,23 @@
           argl2spec = FSL_DEBUG;
       if (strlen(argl2spec) > 0) {
           if ((l2rv = l2_env_create(&ctx.l2_fslenv)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: failed to create L2 environment (%d) for fsl\n", l2rv); CU(1); }
  +            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: failed to create L2 environment (%d) for fsl", l2rv); CU(1); }
           if ((l2rv = l2_env_levels(ctx.l2_fslenv, L2_LEVEL_ALL, L2_LEVEL_NONE)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to set global logging level defaults %s(%d) for fsl\n", cp, l2rv); CU(1); }
  +            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to set global logging level defaults %s(%d) for fsl", cp, l2rv); CU(1); }
           if ((l2rv = l2_env_formatter(ctx.l2_fslenv, 'D', l2_util_fmt_dump, NULL)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to register dump formatter %s(%d) for fsl\n", cp, l2rv); CU(1); }
  +            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to register dump formatter %s(%d) for fsl", cp, l2rv); CU(1); }
           if ((l2rv = l2_env_formatter(ctx.l2_fslenv, 'S', l2_util_fmt_string, NULL)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to register string formatter %s(%d) for fsl\n", cp, l2rv); CU(1); }
  +            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to register string formatter %s(%d) for fsl", cp, l2rv); CU(1); }
           if ((l2rv = l2_env_formatter(ctx.l2_fslenv, 'm', l2_util_fmt_errno, NULL)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to register errno formatter %s(%d) for fsl\n", cp, l2rv); CU(1); }
  +            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to register errno formatter %s(%d) for fsl", cp, l2rv); CU(1); }
           if ((l2rv = l2_channel_create(&ctx.l2_fslnch, ctx.l2_fslenv, "noop")) != L2_OK) {
  -            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to create noop channel; %s(%d)\n for fsl", cp, l2rv); CU(1); }
  +            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to create noop channel; %s(%d) for fsl", cp, l2rv); CU(1); }
           if ((l2rv = l2_spec(&ch, ctx.l2_fslenv, "%s", argl2spec)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to create stream from spec %s(%d) for fsl\n", cp, l2rv); CU(1); }
  +            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to create stream from spec %s(%d) for fsl", cp, l2rv); CU(1); }
           if ((l2rv = l2_channel_link(ctx.l2_fslnch, L2_LINK_CHILD, ch, NULL)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to link child channel %s(%d) for fsl\n", cp, l2rv); CU(1); }
  +            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to link child channel %s(%d) for fsl", cp, l2rv); CU(1); }
           if ((l2rv = l2_channel_open(ctx.l2_fslnch)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to open channel stream %s(%d) for fsl\n", cp, l2rv); CU(1); }
  +            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to open channel stream %s(%d) for fsl", cp, l2rv); CU(1); }
       }
   
       /* tracing */
  @@ -507,35 +507,35 @@
           fsldebug(L2_LEVEL_WARNING, "openlog: ignore unsupported LOG_PID (use OSSP l2 formatter %%P in prefix channel to emulate)");
   
       /* create default sysloglevel to l2_level mapping */
  -    fsldebug(L2_LEVEL_DEBUG, "openlog: create default syslog(3) to OSSP l2 level/priority mapping table\n");
  +    fsldebug(L2_LEVEL_DEBUG, "openlog: create default syslog(3) to OSSP l2 level/priority mapping table");
       for (i = 0; sysloglevel2string[i].string != NULL; i++)
           ;
       if ((ctx.levelmap = (levelmap_t *)malloc(i * sizeof(levelmap_t))) == NULL) {
  -        fsldebug(L2_LEVEL_ERROR, "openlog: malloc() failed\n"); CU(1); }
  +        fsldebug(L2_LEVEL_ERROR, "openlog: malloc() failed"); CU(1); }
       for (i = 0; sysloglevel2string[i].string != NULL; i++) {
           ctx.levelmap[i].syslog = sysloglevel2string[i].level;
           ctx.levelmap[i].l2     = sysloglevel2string[i].deflevelmap;
  -        fsldebug(L2_LEVEL_DEBUG, "openlog: ctx.levelmap[%d].syslog = 0x%.8lx, ctx.levelmap[%d].l2 = 0x%.8lx\n", 
  +        fsldebug(L2_LEVEL_DEBUG, "openlog: ctx.levelmap[%d].syslog = 0x%.8lx, ctx.levelmap[%d].l2 = 0x%.8lx", 
                    i, (unsigned long)ctx.levelmap[i].syslog, i, (unsigned long)ctx.levelmap[i].l2);
       }
   
       /* create OSSP l2 environment for main application */
       if ((l2rv = l2_env_create(&ctx.l2_env)) != L2_OK) {
  -        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: failed to create OSSP l2 environment: (%d)\n", l2rv); CU(1); }
  +        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: failed to create OSSP l2 environment: (%d)", l2rv); CU(1); }
       if ((l2rv = l2_env_levels(ctx.l2_env, L2_LEVEL_ALL, L2_LEVEL_NONE)) != L2_OK) {
  -        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to set global logging level defaults: %s(%d)\n", cp, l2rv); CU(1); }
  +        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to set global logging level defaults: %s(%d)", cp, l2rv); CU(1); }
       if ((l2rv = l2_env_formatter(ctx.l2_env, 'D', l2_util_fmt_dump, NULL)) != L2_OK) {
  -        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to register dump formatter: %s(%d)\n", cp, l2rv); CU(1); }
  +        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to register dump formatter: %s(%d)", cp, l2rv); CU(1); }
       if ((l2rv = l2_env_formatter(ctx.l2_env, 'S', l2_util_fmt_string, NULL)) != L2_OK) {
  -        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to register string formatter: %s(%d)\n", cp, l2rv); CU(1); }
  +        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to register string formatter: %s(%d)", cp, l2rv); CU(1); }
       if ((l2rv = l2_env_formatter(ctx.l2_env, 'm', l2_util_fmt_errno, NULL)) != L2_OK) {
  -        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to register errno formatter: %s(%d)\n", cp, l2rv); CU(1); }
  +        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to register errno formatter: %s(%d)", cp, l2rv); CU(1); }
       if ((l2rv = l2_channel_create(&ctx.l2_nch, ctx.l2_env, "noop")) != L2_OK) {
  -        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to create noop channel: %s(%d)\n", cp, l2rv); CU(1); }
  +        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to create noop channel: %s(%d)", cp, l2rv); CU(1); }
   
       /* create IdentSlashFacility */
       if ((cpIdent = strdup((ident != NULL) ? ident : "unknown")) == NULL) {
  -        fsldebug(L2_LEVEL_ERROR, "openlog: strdup() failed\n"); CU(1); }
  +        fsldebug(L2_LEVEL_ERROR, "openlog: strdup() failed"); CU(1); }
       cpFacility = "unknown";
       for (i = 0; syslogfacility2string[i].string != NULL; i++) {
           if (facility == syslogfacility2string[i].facility) {
  @@ -544,7 +544,7 @@
           }
       }
       if ((cpISF = (char *)malloc(strlen(cpIdent) + 1 + strlen(cpFacility) + 1)) == NULL) {
  -        fsldebug(L2_LEVEL_ERROR, "openlog: malloc() failed\n"); CU(1); }
  +        fsldebug(L2_LEVEL_ERROR, "openlog: malloc() failed"); CU(1); }
       cpISF[0] = '\0';
       strcat(cpISF, cpIdent);
       strcat(cpISF, "/");
  @@ -552,52 +552,52 @@
   
       /* read in configuration file(s) */
       if ((rv = readfileorallfiles(&buf, ident)) != FSL_OK) {
  -        fsldebug(L2_LEVEL_ERROR, "openlog: readfileorallfiles(buf, \"%s\") returned %d, system error: %s(%d)\n", ident, rv, strerror(errno), errno); CU(1); }
  +        fsldebug(L2_LEVEL_ERROR, "openlog: readfileorallfiles(buf, \"%s\") returned %d, system error: %s(%d)", ident, rv, strerror(errno), errno); CU(1); }
   
       /* import configuration buffer into OSSP cfg node tree */
       if ((cfgrv = cfg_create(&cfg)) != CFG_OK) {
  -        (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_create() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +        (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_create() failed with error %s (%d)", cp, cfgrv); CU(1); }
       if ((cfgrv = cfg_import(cfg, NULL, CFG_FMT_CFG, buf.base, buf.size)) != CFG_OK) {
  -        (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_import() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +        (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_import() failed with error %s (%d)", cp, cfgrv); CU(1); }
   
       /*  find configuration root node and check if it is a sequence and has one or more directives below it */
       if ((cfgrv = cfg_node_root(cfg, &cfgseq)) != CFG_OK) {
  -        (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_root() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +        (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_root() failed with error %s (%d)", cp, cfgrv); CU(1); }
       traverse(cfg, cfgseq);
       if ((cfgrv = cfg_node_get(cfg, cfgseq, CFG_NODE_ATTR_TYPE, &cfgtype)) != CFG_OK) {
  -        (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +        (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)", cp, cfgrv); CU(1); }
       if (cfgtype != CFG_NODE_TYPE_SEQ) {
  -        fsldebug(L2_LEVEL_ERROR, "openlog: expected sequence\n"); CU(1); }
  +        fsldebug(L2_LEVEL_ERROR, "openlog: expected sequence"); CU(1); }
       if ((cfgrv = cfg_node_get(cfg, cfgseq, CFG_NODE_ATTR_CHILDS, &cfgnumc)) != CFG_OK) {
  -        (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_CHILDS) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +        (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_CHILDS) failed with error %s (%d)", cp, cfgrv); CU(1); }
       if (cfgnumc < 1) {
  -        fsldebug(L2_LEVEL_ERROR, "openlog: sequence is missing directives, expected 1, got %d\n", cfgnumc); CU(1); }
  +        fsldebug(L2_LEVEL_ERROR, "openlog: sequence is missing directives, expected 1, got %d", cfgnumc); CU(1); }
   
       /*  get first directive below sequence */
       if ((cfgrv = cfg_node_get(cfg, cfgseq, CFG_NODE_ATTR_CHILD1, &cfgdir)) != CFG_OK) {
  -        (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_CHILD1) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +        (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_CHILD1) failed with error %s (%d)", cp, cfgrv); CU(1); }
       while (cfgdir != NULL) {
           /*  check if operating on a directive */
           if ((cfgrv = cfg_node_get(cfg, cfgdir, CFG_NODE_ATTR_TYPE, &cfgtype)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)", cp, cfgrv); CU(1); }
           if (cfgtype != CFG_NODE_TYPE_DIR) {
  -            fsldebug(L2_LEVEL_ERROR, "openlog: expected directive\n"); CU(1); }
  +            fsldebug(L2_LEVEL_ERROR, "openlog: expected directive"); CU(1); }
           if ((cfgrv = cfg_node_get(cfg, cfgdir, CFG_NODE_ATTR_CHILDS, &cfgnumc)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_CHILDS) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_CHILDS) failed with error %s (%d)", cp, cfgrv); CU(1); }
   
           /*  process first child of directive, check if it is an argument and has a valid token attached */
           if ((cfgrv = cfg_node_get(cfg, cfgdir, CFG_NODE_ATTR_CHILD1, &cfgarg)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_CHILD1) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_CHILD1) failed with error %s (%d)", cp, cfgrv); CU(1); }
           if (cfgarg == NULL) {
  -            fsldebug(L2_LEVEL_ERROR, "openlog: first argument is NULL\n"); CU(1); }
  +            fsldebug(L2_LEVEL_ERROR, "openlog: first argument is NULL"); CU(1); }
           if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_TYPE, &cfgtype)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)", cp, cfgrv); CU(1); }
           if (cfgtype != CFG_NODE_TYPE_ARG) {
  -            fsldebug(L2_LEVEL_ERROR, "openlog: expected first argument, got %d\n", cfgtype); CU(1); }
  +            fsldebug(L2_LEVEL_ERROR, "openlog: expected first argument, got %d", cfgtype); CU(1); }
           if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_TOKEN, &cfgargtok)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_TOKEN) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_TOKEN) failed with error %s (%d)", cp, cfgrv); CU(1); }
           if (cfgargtok == NULL) {
  -            fsldebug(L2_LEVEL_ERROR, "openlog: first argument has NULL data\n"); CU(1); }
  +            fsldebug(L2_LEVEL_ERROR, "openlog: first argument has NULL data"); CU(1); }
           cfgargtoka[0] = cfgargtok;
   
           cfgnume = 0;
  @@ -608,24 +608,24 @@
           if (strcmp(cfgargtoka[0], "map") == 0)
               cfgnume = 3;
           if (cfgnume == 0) {
  -            fsldebug(L2_LEVEL_ERROR, "openlog: syntax error, invalid argument \"%s\"\n", cfgargtoka[0]); CU(1); }
  +            fsldebug(L2_LEVEL_ERROR, "openlog: syntax error, invalid argument \"%s\"", cfgargtoka[0]); CU(1); }
           if (cfgnume != cfgnumc) {
  -            fsldebug(L2_LEVEL_ERROR, "openlog: directive missing arguments, expected %d, got %d\n", cfgnume, cfgnumc); CU(1); }
  +            fsldebug(L2_LEVEL_ERROR, "openlog: directive missing arguments, expected %d, got %d", cfgnume, cfgnumc); CU(1); }
   
           for (i = 1; i < cfgnume; i++) {
               /*  process right brother of argument, check if it is an argument and has a valid token attached */
               if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_RBROTH, &cfgarg)) != CFG_OK) {
  -                (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_RBROTH) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +                (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_RBROTH) failed with error %s (%d)", cp, cfgrv); CU(1); }
               if (cfgarg == NULL) {
  -                fsldebug(L2_LEVEL_ERROR, "openlog: argument %d is NULL\n", i); CU(1); }
  +                fsldebug(L2_LEVEL_ERROR, "openlog: argument %d is NULL", i); CU(1); }
               if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_TYPE, &cfgtype)) != CFG_OK) {
  -                (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +                (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)", cp, cfgrv); CU(1); }
               if (cfgtype != CFG_NODE_TYPE_ARG) {
  -                fsldebug(L2_LEVEL_ERROR, "openlog: expected argument %d\n", i); CU(1); }
  +                fsldebug(L2_LEVEL_ERROR, "openlog: expected argument %d", i); CU(1); }
               if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_TOKEN, &cfgargtok)) != CFG_OK) {
  -                (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_TOKEN) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +                (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_TOKEN) failed with error %s (%d)", cp, cfgrv); CU(1); }
               if (cfgargtok == NULL) {
  -                fsldebug(L2_LEVEL_ERROR, "openlog: argument %d has NULL data\n", i); CU(1); }
  +                fsldebug(L2_LEVEL_ERROR, "openlog: argument %d has NULL data", i); CU(1); }
               cfgargtoka[i] = cfgargtok;
           }
   
  @@ -635,7 +635,7 @@
               argl2spec = cfgargtoka[2];
   
               /*  process the directive using the three arguments found */
  -            fsldebug(L2_LEVEL_DEBUG, "openlog: argident=%s, argmatch=%s, argl2spec=%s\n", argident, argmatch, argl2spec);
  +            fsldebug(L2_LEVEL_DEBUG, "openlog: argident=%s, argmatch=%s, argl2spec=%s", argident, argmatch, argl2spec);
               {
                   pcre       *pcreRegex;
                   pcre_extra *pcreExtra;
  @@ -645,37 +645,37 @@
   
                   /* compile regular expression into finite state machine and optimize */
                   if ((pcreRegex = pcre_compile(argmatch, PCRE_CASELESS, &cpError, &iError, NULL)) == NULL) {
  -                    fsldebug(L2_LEVEL_ERROR, "openlog: pcre_compile() failed with error %s (%d)\n", cpError, iError); CU(1); }
  +                    fsldebug(L2_LEVEL_ERROR, "openlog: pcre_compile() failed with error %s (%d)", cpError, iError); CU(1); }
                   pcreExtra = pcre_study(pcreRegex, 0, &cpError);
                   if (cpError != NULL) {
  -                    fsldebug(L2_LEVEL_ERROR, "openlog: pcre_study() failed with error %s\n", cpError); CU(1); }
  +                    fsldebug(L2_LEVEL_ERROR, "openlog: pcre_study() failed with error %s", cpError); CU(1); }
   
                   nMatch = pcre_exec(pcreRegex, pcreExtra, cpISF, strlen(cpISF), 0, 0, ovec, OVECSIZE);
                   if (nMatch < 0)
  -                    fsldebug(L2_LEVEL_TRACE, "openlog: matching ident/facility \"%s\" against section \"%s\" failed.\n", cpISF, argmatch);
  +                    fsldebug(L2_LEVEL_TRACE, "openlog: matching ident/facility \"%s\" against section \"%s\" failed.", cpISF, argmatch);
                   else
                       if (nMatch == 0)
  -                        fsldebug(L2_LEVEL_TRACE, "openlog: matching ident/facility \"%s\" against section \"%s\" succeeded, found $0\n", cpISF, argmatch);
  +                        fsldebug(L2_LEVEL_TRACE, "openlog: matching ident/facility \"%s\" against section \"%s\" succeeded, found $0", cpISF, argmatch);
                       else
  -                        fsldebug(L2_LEVEL_TRACE, "openlog: matching ident/facility \"%s\" against section \"%s\" succeeded, found $0...$%d\n", cpISF, argmatch, (nMatch-1) > 9 ? 9 : (nMatch-1));
  +                        fsldebug(L2_LEVEL_TRACE, "openlog: matching ident/facility \"%s\" against section \"%s\" succeeded, found $0...$%d", cpISF, argmatch, (nMatch-1) > 9 ? 9 : (nMatch-1));
                   if (nMatch >= 1) {
                       pcre_get_substring_list(cpISF, ovec, nMatch, &acpMatch);
                       if (acpMatch != NULL)
                           for (i = 0; i < nMatch; i++)
  -                            fsldebug(L2_LEVEL_DEBUG, "openlog: regex reference[%d]=\'%s\'\n", i, acpMatch[i] == NULL ? "(UNDEFINED)" : acpMatch[i]);
  +                            fsldebug(L2_LEVEL_DEBUG, "openlog: regex reference[%d]=\'%s\'", i, acpMatch[i] == NULL ? "(UNDEFINED)" : acpMatch[i]);
                       n = substcapture(argl2spec, strlen(argl2spec), acpMatch, nMatch, NULL);
                       if ((cp = (char *)malloc(n + 1)) == NULL) {
  -                        fsldebug(L2_LEVEL_ERROR, "openlog: malloc() failed\n"); CU(1); }
  +                        fsldebug(L2_LEVEL_ERROR, "openlog: malloc() failed"); CU(1); }
                       if (substcapture(argl2spec, strlen(argl2spec), acpMatch, nMatch, cp) != n) {
  -                        fsldebug(L2_LEVEL_ERROR, "openlog: substcapture() failed\n"); CU(1); }
  +                        fsldebug(L2_LEVEL_ERROR, "openlog: substcapture() failed"); CU(1); }
                       argl2spec = cp;
  -                    fsldebug(L2_LEVEL_DEBUG, "openlog: argident=%s, argmatch=%s, argl2spec=%s\n", argident, argmatch, argl2spec);
  +                    fsldebug(L2_LEVEL_DEBUG, "openlog: argident=%s, argmatch=%s, argl2spec=%s", argident, argmatch, argl2spec);
   
                       /* create L2 channel throuh spec and link into root channel */
                       if ((l2rv = l2_spec(&ch, ctx.l2_env, "%s", argl2spec)) != L2_OK) {
  -                        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to create stream from spec %s(%d)\n", cp, l2rv); CU(1); }
  +                        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to create stream from spec %s(%d)", cp, l2rv); CU(1); }
                       if ((l2rv = l2_channel_link(ctx.l2_nch, L2_LINK_CHILD, ch, NULL)) != L2_OK) {
  -                        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to link child channel %s(%d)\n", cp, l2rv); CU(1); }
  +                        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to link child channel %s(%d)", cp, l2rv); CU(1); }
   
                       free(argl2spec);
                   }
  @@ -691,24 +691,24 @@
                       mapfrom = i;
               }
               if (mapfrom == -1) {
  -                fsldebug(L2_LEVEL_ERROR, "openlog: trying to map from unknown syslog level \"%s\"\n", cfgargtoka[1]); CU(1); }
  +                fsldebug(L2_LEVEL_ERROR, "openlog: trying to map from unknown syslog level \"%s\"", cfgargtoka[1]); CU(1); }
   
               for (i = 0, mapto = -1; (mapto == -1) && (l2level2string[i].string != NULL); i++) {
                   if (strcmp(l2level2string[i].string, cfgargtoka[2]) == 0)
                       mapto = i;
               }
               if (mapto == -1) {
  -                fsldebug(L2_LEVEL_ERROR, "openlog: trying to map to unknown l2 level \"%s\"\n", cfgargtoka[2]); CU(1); }
  +                fsldebug(L2_LEVEL_ERROR, "openlog: trying to map to unknown l2 level \"%s\"", cfgargtoka[2]); CU(1); }
               
               ctx.levelmap[mapfrom].l2 = l2level2string[mapto].level;
  -            fsldebug(L2_LEVEL_DEBUG, "openlog: map levelmap[%10s/%d].l2 = l2level2string[%10s/%d].level = 0x%.8lx\n", cfgargtoka[1], mapfrom, cfgargtoka[2], mapto, (unsigned long)l2level2string[mapto].level);
  +            fsldebug(L2_LEVEL_DEBUG, "openlog: map levelmap[%10s/%d].l2 = l2level2string[%10s/%d].level = 0x%.8lx", cfgargtoka[1], mapfrom, cfgargtoka[2], mapto, (unsigned long)l2level2string[mapto].level);
           }
           else {
  -            fsldebug(L2_LEVEL_ERROR, "openlog: internal, argument \"%s\" not implemented\n", cfgargtoka[0]); CU(1); }
  +            fsldebug(L2_LEVEL_ERROR, "openlog: internal, argument \"%s\" not implemented", cfgargtoka[0]); CU(1); }
   
           /*  get right brother of current directive */
           if ((cfgrv = cfg_node_get(cfg, cfgdir, CFG_NODE_ATTR_RBROTH, &cfgdir)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_get(CFG_NODE_ATTR_RBROTH) failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_get(CFG_NODE_ATTR_RBROTH) failed with error %s (%d)", cp, cfgrv); CU(1); }
       }
   
       if (logopt & LOG_NDELAY) {
  @@ -717,7 +717,7 @@
       }
       else {
           if ((l2rv = l2_channel_open(ctx.l2_nch)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to open channel stream %s(%d) immediately\n", cp, l2rv); CU(1); }
  +            cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to open channel stream %s(%d) immediately", cp, l2rv); CU(1); }
           fsldebug(L2_LEVEL_TRACE, "openlog: logging succeeded to open channel stream immediately");
       }
   
  @@ -730,7 +730,7 @@
   #if 0 /* FIXME */
       if (cfg != NULL)
           if ((cfgrv = cfg_destroy(cfg)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_destroy() failed with error %s (%d)\n", cp, cfgrv); CU(1); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_destroy() failed with error %s (%d)", cp, cfgrv); CU(1); }
   #endif
       if (buf.base != NULL)
           free(buf.base);
  @@ -819,7 +819,7 @@
       /* check for delayed open */
       if ((ctx.logopt & LOG_NDELAY) && (ctx.delayopen == TRUE)) {
           if ((l2rv = l2_channel_open(ctx.l2_nch)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "vsyslog: logging failed to open channel stream %s(%d) delayed\n", cp, l2rv);
  +            cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "vsyslog: logging failed to open channel stream %s(%d) delayed", cp, l2rv);
               closelog();
           }
           fsldebug(L2_LEVEL_TRACE, "vsyslog: logging succeeded to open channel stream delayed");
  @@ -832,22 +832,22 @@
   
       /* check against maskpri */
       if ((LOG_MASK(priority) & ctx.maskpri) == 0) {
  -        fsldebug(L2_LEVEL_DEBUG, "vsyslog: short circuit maskpri\n");
  +        fsldebug(L2_LEVEL_DEBUG, "vsyslog: short circuit maskpri");
           return;
       }
   
       levelmask = 0;
       for (i = 0; sysloglevel2string[i].string != NULL; i++) {
  -        fsldebug(L2_LEVEL_DEBUG, "vsyslog: ctx.levelmap[%d].syslog = 0x%.8lx, ctx.levelmap[%d].l2 = 0x%.8lx\n", i, (unsigned long)ctx.levelmap[i].syslog, i, (unsigned long)ctx.levelmap[i].l2);
  +        fsldebug(L2_LEVEL_DEBUG, "vsyslog: ctx.levelmap[%d].syslog = 0x%.8lx, ctx.levelmap[%d].l2 = 0x%.8lx", i, (unsigned long)ctx.levelmap[i].syslog, i, (unsigned long)ctx.levelmap[i].l2);
           if (ctx.levelmap[i].syslog == priority) {
               levelmask = ctx.levelmap[i].l2;
               break;
           }
       }
  -    fsldebug(L2_LEVEL_DEBUG, "vsyslog: levelmask=0x%.8lx\n", (unsigned long)levelmask);
  +    fsldebug(L2_LEVEL_DEBUG, "vsyslog: levelmask=0x%.8lx", (unsigned long)levelmask);
       if ((l2rv = l2_channel_vlog(ctx.l2_nch, levelmask, fmt, args)) != L2_OK) {
           cp = l2_env_strerror(ctx.l2_env, l2rv);
  -        fsldebug(L2_LEVEL_PANIC, "vsyslog: application logging failed: %s (%d)\n", cp, l2rv);
  +        fsldebug(L2_LEVEL_PANIC, "vsyslog: application logging failed: %s (%d)", cp, l2rv);
       }
       return;
   }

From ossp-cvs-owner@ossp.org  Mon Jul 29 16:08:39 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8071E765ED; Mon, 29 Jul 2002 16:08:39 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc devtool.conf
Message-Id: <20020729140839.8071E765ED@mail.ossp.org>
Date: Mon, 29 Jul 2002 16:08:39 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   29-Jul-2002 16:08:39
  Branch: HEAD                             Handle: 2002072915083900

  Modified files:
    ossp-pkg/rc             devtool.conf

  Log:
    Copy Ralf's name match fix from other projects because it affects OSSP rc
    also.

  Summary:
    Revision    Changes     Path
    1.14        +2  -2      ossp-pkg/rc/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/rc/devtool.conf
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 devtool.conf
  --- ossp-pkg/rc/devtool.conf	25 Apr 2002 09:37:57 -0000	1.13
  +++ ossp-pkg/rc/devtool.conf	29 Jul 2002 14:08:39 -0000	1.14
  @@ -3,7 +3,7 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.0 "1.[56].*" all
  +    @autogen shtool   1.6.1 "1.[56].*" all
       @autogen autoconf 2.53  "2.5[3-9]*"
   
       echo "===> rc_ex (devtool autogen)"
  @@ -61,4 +61,4 @@
       ./shtool fixperm -v .
       V=`./shtool version -l txt -d short VERSION`
       ./shtool tarball -o rc-${V}.tar.gz -d rc-${V} -u ossp -g ossp \
  -                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf' -c 'gzip --best' .
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool.conf' -c 'gzip --best' .

From ossp-cvs-owner@ossp.org  Mon Jul 29 16:42:06 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AA204765ED; Mon, 29 Jul 2002 16:42:05 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl TODO fsl.c
Message-Id: <20020729144205.AA204765ED@mail.ossp.org>
Date: Mon, 29 Jul 2002 16:42:05 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   29-Jul-2002 16:42:05
  Branch: HEAD                             Handle: 2002072915420500

  Modified files:
    ossp-pkg/fsl            TODO fsl.c

  Log:
    support "default" ident handling

  Summary:
    Revision    Changes     Path
    1.3         +0  -1      ossp-pkg/fsl/TODO
    1.36        +218 -165   ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/TODO
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 TODO
  --- ossp-pkg/fsl/TODO	29 Jul 2002 11:41:47 -0000	1.2
  +++ ossp-pkg/fsl/TODO	29 Jul 2002 14:42:05 -0000	1.3
  @@ -1,6 +1,5 @@
   - is readfileorallfiles() really reasonable?
   - what about HAVE_VSYSLOG_USVALIST
   - allow syslog() without previous openlog()?!
  -- support "default" ident handling
   - cfg_destroy fixing and use it
   - runtime version check for sub libraries
  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.35 -r1.36 fsl.c
  --- ossp-pkg/fsl/fsl.c	29 Jul 2002 13:07:05 -0000	1.35
  +++ ossp-pkg/fsl/fsl.c	29 Jul 2002 14:42:05 -0000	1.36
  @@ -76,10 +76,12 @@
   /* general return codes */
   typedef enum {
       FSL_OK = 0,               /* everything ok */
  +    FSL_NOIDENT,              /* ok but no "ident" directive found or none matched */
       FSL_ERR_ARG,              /* invalid argument */
       FSL_ERR_USE,              /* invalid use */
       FSL_ERR_MEM,              /* no more memory available */
  -    FSL_ERR_SYS               /* operating system error, see errno */
  +    FSL_ERR_SYS,              /* operating system error, see errno */
  +    FSL_ERR_CUS               /* error handled and logged, just run clean up sequence and goodbye */
   } fsl_rc_t;
   
   /* file buffer handling sub-API */
  @@ -426,6 +428,212 @@
       return n;
   }
   
  +/*  process OSSP cfg node tree directives 
  +    mode=0 processes map/ident,
  +    mode=1 processes default
  + */
  +static fsl_rc_t processcfg(cfg_t *cfg, char *cpISF, int mode)
  +{
  +    fsl_rc_t rc;
  +    cfg_rc_t          cfgrv;
  +    cfg_node_t       *cfgseq;
  +    cfg_node_t       *cfgdir;
  +    cfg_node_t       *cfgarg;
  +    cfg_node_type_t   cfgtype;
  +    int               cfgnumc;
  +    int               cfgnume;
  +    char             *cfgargtoka[3];
  +    char             *cfgargtok;
  +    char             *argident;
  +    char             *argmatch;
  +    char             *argl2spec;
  +    char             *cp; /* scratch variable */
  +    int               i;  /* scratch variable */
  +    int               n;  /* scratch variable */
  +    int               ovec[OVECSIZE];
  +    const char      **acpMatch;
  +    l2_channel_t     *ch; /* scratch variable */
  +    l2_result_t       l2rv;
  +    int               matchcount = 0;
  +
  +    if ((cfg == NULL) || (cpISF == NULL) || (strlen(cpISF) < 3) || (mode < 0) || (mode > 1))
  +        return FSL_ERR_ARG;
  +
  +    fsldebug(L2_LEVEL_TRACE, "processcfg() ident/facility=\"%s\", mode=%s", cpISF, mode == 0 ? "map/ident" : "default");
  +
  +    /*  find configuration root node and check if it is a sequence and has one or more directives below it */
  +    if ((cfgrv = cfg_node_root(cfg, &cfgseq)) != CFG_OK) {
  +        (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "processcfg: cfg_node_root() failed with error %s (%d)", cp, cfgrv); CU(FSL_ERR_CUS); }
  +
  +    /*  only dump once */
  +    if (mode == 0)
  +        traverse(cfg, cfgseq);
  +
  +    if ((cfgrv = cfg_node_get(cfg, cfgseq, CFG_NODE_ATTR_TYPE, &cfgtype)) != CFG_OK) {
  +        (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "processcfg: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)", cp, cfgrv); CU(FSL_ERR_CUS); }
  +    if (cfgtype != CFG_NODE_TYPE_SEQ) {
  +        fsldebug(L2_LEVEL_ERROR, "processcfg: expected sequence"); CU(FSL_ERR_CUS); }
  +    if ((cfgrv = cfg_node_get(cfg, cfgseq, CFG_NODE_ATTR_CHILDS, &cfgnumc)) != CFG_OK) {
  +        (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "processcfg: cfg_node_get(CFG_NODE_ATTR_CHILDS) failed with error %s (%d)", cp, cfgrv); CU(FSL_ERR_CUS); }
  +    if (cfgnumc < 1) {
  +        fsldebug(L2_LEVEL_ERROR, "processcfg: sequence is missing directives, expected 1, got %d", cfgnumc); CU(FSL_ERR_CUS); }
  +
  +    /*  get first directive below sequence */
  +    if ((cfgrv = cfg_node_get(cfg, cfgseq, CFG_NODE_ATTR_CHILD1, &cfgdir)) != CFG_OK) {
  +        (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "processcfg: cfg_node_get(CFG_NODE_ATTR_CHILD1) failed with error %s (%d)", cp, cfgrv); CU(FSL_ERR_CUS); }
  +    while (cfgdir != NULL) {
  +        /*  check if operating on a directive */
  +        if ((cfgrv = cfg_node_get(cfg, cfgdir, CFG_NODE_ATTR_TYPE, &cfgtype)) != CFG_OK) {
  +            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "processcfg: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)", cp, cfgrv); CU(FSL_ERR_CUS); }
  +        if (cfgtype != CFG_NODE_TYPE_DIR) {
  +            fsldebug(L2_LEVEL_ERROR, "processcfg: expected directive"); CU(FSL_ERR_CUS); }
  +        if ((cfgrv = cfg_node_get(cfg, cfgdir, CFG_NODE_ATTR_CHILDS, &cfgnumc)) != CFG_OK) {
  +            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "processcfg: cfg_node_get(CFG_NODE_ATTR_CHILDS) failed with error %s (%d)", cp, cfgrv); CU(FSL_ERR_CUS); }
  +
  +        /*  process first child of directive, check if it is an argument and has a valid token attached */
  +        if ((cfgrv = cfg_node_get(cfg, cfgdir, CFG_NODE_ATTR_CHILD1, &cfgarg)) != CFG_OK) {
  +            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "processcfg: cfg_node_get(CFG_NODE_ATTR_CHILD1) failed with error %s (%d)", cp, cfgrv); CU(FSL_ERR_CUS); }
  +        if (cfgarg == NULL) {
  +            fsldebug(L2_LEVEL_ERROR, "processcfg: first argument is NULL"); CU(FSL_ERR_CUS); }
  +        if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_TYPE, &cfgtype)) != CFG_OK) {
  +            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "processcfg: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)", cp, cfgrv); CU(FSL_ERR_CUS); }
  +        if (cfgtype != CFG_NODE_TYPE_ARG) {
  +            fsldebug(L2_LEVEL_ERROR, "processcfg: expected first argument, got %d", cfgtype); CU(FSL_ERR_CUS); }
  +        if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_TOKEN, &cfgargtok)) != CFG_OK) {
  +            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "processcfg: cfg_node_get(CFG_NODE_ATTR_TOKEN) failed with error %s (%d)", cp, cfgrv); CU(FSL_ERR_CUS); }
  +        if (cfgargtok == NULL) {
  +            fsldebug(L2_LEVEL_ERROR, "processcfg: first argument has NULL data"); CU(FSL_ERR_CUS); }
  +        cfgargtoka[0] = cfgargtok;
  +
  +        cfgnume = 0;
  +        if (strcmp(cfgargtoka[0], "ident") == 0)
  +            cfgnume = 3;
  +        if (strcmp(cfgargtoka[0], "default") == 0)
  +            cfgnume = 3;
  +        if (strcmp(cfgargtoka[0], "map") == 0)
  +            cfgnume = 3;
  +        if (cfgnume == 0) {
  +            fsldebug(L2_LEVEL_ERROR, "processcfg: syntax error, invalid argument \"%s\"", cfgargtoka[0]); CU(FSL_ERR_CUS); }
  +        if (cfgnume != cfgnumc) {
  +            fsldebug(L2_LEVEL_ERROR, "processcfg: directive missing arguments, expected %d, got %d", cfgnume, cfgnumc); CU(FSL_ERR_CUS); }
  +
  +        for (i = 1; i < cfgnume; i++) {
  +            /*  process right brother of argument, check if it is an argument and has a valid token attached */
  +            if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_RBROTH, &cfgarg)) != CFG_OK) {
  +                (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "processcfg: cfg_node_get(CFG_NODE_ATTR_RBROTH) failed with error %s (%d)", cp, cfgrv); CU(FSL_ERR_CUS); }
  +            if (cfgarg == NULL) {
  +                fsldebug(L2_LEVEL_ERROR, "processcfg: argument %d is NULL", i); CU(FSL_ERR_CUS); }
  +            if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_TYPE, &cfgtype)) != CFG_OK) {
  +                (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "processcfg: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)", cp, cfgrv); CU(FSL_ERR_CUS); }
  +            if (cfgtype != CFG_NODE_TYPE_ARG) {
  +                fsldebug(L2_LEVEL_ERROR, "processcfg: expected argument %d", i); CU(FSL_ERR_CUS); }
  +            if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_TOKEN, &cfgargtok)) != CFG_OK) {
  +                (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "processcfg: cfg_node_get(CFG_NODE_ATTR_TOKEN) failed with error %s (%d)", cp, cfgrv); CU(FSL_ERR_CUS); }
  +            if (cfgargtok == NULL) {
  +                fsldebug(L2_LEVEL_ERROR, "processcfg: argument %d has NULL data", i); CU(FSL_ERR_CUS); }
  +            cfgargtoka[i] = cfgargtok;
  +        }
  +
  +        if ((strcmp(cfgargtoka[0], "ident") == 0) || (strcmp(cfgargtoka[0], "default") == 0)) {
  +            argident  = cfgargtoka[0];
  +            argmatch  = cfgargtoka[1];
  +            argl2spec = cfgargtoka[2];
  +
  +            if (   ((mode == 0) && (strcmp(cfgargtoka[0], "ident") == 0))
  +                || ((mode == 1) && (strcmp(cfgargtoka[0], "default") == 0))
  +                  ) {
  +                /*  process the directive using the three arguments found */
  +                fsldebug(L2_LEVEL_DEBUG, "processcfg: argident=%s, argmatch=%s, argl2spec=%s", argident, argmatch, argl2spec);
  +                {
  +                    pcre       *pcreRegex;
  +                    pcre_extra *pcreExtra;
  +                    const char *cpError;
  +                    int         iError;
  +                    int         nMatch;
  +
  +                    /* compile regular expression into finite state machine and optimize */
  +                    if ((pcreRegex = pcre_compile(argmatch, PCRE_CASELESS, &cpError, &iError, NULL)) == NULL) {
  +                        fsldebug(L2_LEVEL_ERROR, "processcfg: pcre_compile() failed with error %s (%d)", cpError, iError); CU(FSL_ERR_CUS); }
  +                    pcreExtra = pcre_study(pcreRegex, 0, &cpError);
  +                    if (cpError != NULL) {
  +                        fsldebug(L2_LEVEL_ERROR, "processcfg: pcre_study() failed with error %s", cpError); CU(FSL_ERR_CUS); }
  +
  +                    nMatch = pcre_exec(pcreRegex, pcreExtra, cpISF, strlen(cpISF), 0, 0, ovec, OVECSIZE);
  +                    if (nMatch < 0)
  +                        fsldebug(L2_LEVEL_TRACE, "processcfg: matching ident/facility \"%s\" against section \"%s\" failed.", cpISF, argmatch);
  +                    else
  +                        if (nMatch == 0)
  +                            fsldebug(L2_LEVEL_TRACE, "processcfg: matching ident/facility \"%s\" against section \"%s\" succeeded, found $0", cpISF, argmatch);
  +                        else
  +                            fsldebug(L2_LEVEL_TRACE, "processcfg: matching ident/facility \"%s\" against section \"%s\" succeeded, found $0...$%d", cpISF, argmatch, (nMatch-1) > 9 ? 9 : (nMatch-1));
  +                    if (nMatch >= 1) {
  +                        pcre_get_substring_list(cpISF, ovec, nMatch, &acpMatch);
  +                        if (acpMatch != NULL)
  +                            for (i = 0; i < nMatch; i++)
  +                                fsldebug(L2_LEVEL_DEBUG, "processcfg: regex reference[%d]=\'%s\'", i, acpMatch[i] == NULL ? "(UNDEFINED)" : acpMatch[i]);
  +                        n = substcapture(argl2spec, strlen(argl2spec), acpMatch, nMatch, NULL);
  +                        if ((cp = (char *)malloc(n + 1)) == NULL) {
  +                            fsldebug(L2_LEVEL_ERROR, "processcfg: malloc() failed"); CU(FSL_ERR_CUS); }
  +                        if (substcapture(argl2spec, strlen(argl2spec), acpMatch, nMatch, cp) != n) {
  +                            fsldebug(L2_LEVEL_ERROR, "processcfg: substcapture() failed"); CU(FSL_ERR_CUS); }
  +                        argl2spec = cp;
  +                        fsldebug(L2_LEVEL_DEBUG, "processcfg: argident=%s, argmatch=%s, argl2spec=%s", argident, argmatch, argl2spec);
  +
  +                        /* create L2 channel throuh spec and link into root channel */
  +                        if ((l2rv = l2_spec(&ch, ctx.l2_env, "%s", argl2spec)) != L2_OK) {
  +                            cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "processcfg: logging failed to create stream from spec %s(%d)", cp, l2rv); CU(FSL_ERR_CUS); }
  +                        if ((l2rv = l2_channel_link(ctx.l2_nch, L2_LINK_CHILD, ch, NULL)) != L2_OK) {
  +                            cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "processcfg: logging failed to link child channel %s(%d)", cp, l2rv); CU(FSL_ERR_CUS); }
  +                        matchcount++;
  +                        free(argl2spec);
  +                    }
  +                }
  +            }
  +            else
  +                fsldebug(L2_LEVEL_DEBUG, "processcfg: ignoring %s in mode %d", cfgargtoka[0], mode);
  +        }
  +        else if (strcmp(cfgargtoka[0], "map") == 0) {
  +            if (mode == 0) {
  +                int mapfrom;
  +                int mapto;
  +
  +                for (i = 0, mapfrom = -1; (mapfrom == -1) && (sysloglevel2string[i].string != NULL); i++) {
  +                    if (strcmp(sysloglevel2string[i].string, cfgargtoka[1]) == 0)
  +                        mapfrom = i;
  +                }
  +                if (mapfrom == -1) {
  +                    fsldebug(L2_LEVEL_ERROR, "processcfg: trying to map from unknown syslog level \"%s\"", cfgargtoka[1]); CU(FSL_ERR_CUS); }
  +
  +                for (i = 0, mapto = -1; (mapto == -1) && (l2level2string[i].string != NULL); i++) {
  +                    if (strcmp(l2level2string[i].string, cfgargtoka[2]) == 0)
  +                        mapto = i;
  +                }
  +                if (mapto == -1) {
  +                    fsldebug(L2_LEVEL_ERROR, "processcfg: trying to map to unknown l2 level \"%s\"", cfgargtoka[2]); CU(FSL_ERR_CUS); }
  +                
  +                ctx.levelmap[mapfrom].l2 = l2level2string[mapto].level;
  +                fsldebug(L2_LEVEL_DEBUG, "processcfg: map levelmap[%10s/%d].l2 = l2level2string[%10s/%d].level = 0x%.8lx", cfgargtoka[1], mapfrom, cfgargtoka[2], mapto, (unsigned long)l2level2string[mapto].level);
  +            }
  +            else
  +                fsldebug(L2_LEVEL_DEBUG, "processcfg: ignoring %s in mode %d", cfgargtoka[0], mode);
  +        }
  +        else {
  +            fsldebug(L2_LEVEL_ERROR, "processcfg: internal, argument \"%s\" not implemented", cfgargtoka[0]); CU(FSL_ERR_CUS); }
  +
  +        /*  get right brother of current directive */
  +        if ((cfgrv = cfg_node_get(cfg, cfgdir, CFG_NODE_ATTR_RBROTH, &cfgdir)) != CFG_OK) {
  +            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_get(CFG_NODE_ATTR_RBROTH) failed with error %s (%d)", cp, cfgrv); CU(FSL_ERR_CUS); }
  +    }
  +
  +    fsldebug(L2_LEVEL_TRACE, "processcfg: matched %d sections while looking for %s sections", matchcount, mode == 0 ? "ident" : "default");
  +    if (matchcount == 0)
  +        CU(FSL_NOIDENT);
  +    else
  +        CU(FSL_OK);
  +CUS:
  +    return rc;
  +}
  +
   /* POSIX API function openlog(3) */
   void openlog(const char *ident, int logopt, int facility)
   {
  @@ -434,25 +642,12 @@
       fsl_rc_t rv;
       cfg_t           *cfg;
       cfg_rc_t         cfgrv;
  -    cfg_node_t      *cfgseq;
  -    cfg_node_t      *cfgdir;
  -    cfg_node_t      *cfgarg;
  -    cfg_node_type_t  cfgtype;
  -    int              cfgnumc;
  -    int              cfgnume;
  -    char *cfgargtoka[3];
  -    char *cfgargtok;
  -    char *argident;
  -    char *argmatch;
       char *argl2spec;
       char *cp; /* scratch variable */
       int   i;  /* scratch variable */
  -    int   n;  /* scratch variable */
       char *cpIdent;
       char *cpFacility;
       char *cpISF;
  -    int ovec[OVECSIZE];
  -    const char   **acpMatch;
       l2_channel_t *ch; /* scratch variable */
       l2_result_t   l2rv;
   
  @@ -550,7 +745,7 @@
       strcat(cpISF, "/");
       strcat(cpISF, cpFacility);
   
  -    /* read in configuration file(s) */
  +    /* read configuration file(s) into buffer */
       if ((rv = readfileorallfiles(&buf, ident)) != FSL_OK) {
           fsldebug(L2_LEVEL_ERROR, "openlog: readfileorallfiles(buf, \"%s\") returned %d, system error: %s(%d)", ident, rv, strerror(errno), errno); CU(1); }
   
  @@ -560,157 +755,15 @@
       if ((cfgrv = cfg_import(cfg, NULL, CFG_FMT_CFG, buf.base, buf.size)) != CFG_OK) {
           (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_import() failed with error %s (%d)", cp, cfgrv); CU(1); }
   
  -    /*  find configuration root node and check if it is a sequence and has one or more directives below it */
  -    if ((cfgrv = cfg_node_root(cfg, &cfgseq)) != CFG_OK) {
  -        (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_root() failed with error %s (%d)", cp, cfgrv); CU(1); }
  -    traverse(cfg, cfgseq);
  -    if ((cfgrv = cfg_node_get(cfg, cfgseq, CFG_NODE_ATTR_TYPE, &cfgtype)) != CFG_OK) {
  -        (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)", cp, cfgrv); CU(1); }
  -    if (cfgtype != CFG_NODE_TYPE_SEQ) {
  -        fsldebug(L2_LEVEL_ERROR, "openlog: expected sequence"); CU(1); }
  -    if ((cfgrv = cfg_node_get(cfg, cfgseq, CFG_NODE_ATTR_CHILDS, &cfgnumc)) != CFG_OK) {
  -        (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_CHILDS) failed with error %s (%d)", cp, cfgrv); CU(1); }
  -    if (cfgnumc < 1) {
  -        fsldebug(L2_LEVEL_ERROR, "openlog: sequence is missing directives, expected 1, got %d", cfgnumc); CU(1); }
  -
  -    /*  get first directive below sequence */
  -    if ((cfgrv = cfg_node_get(cfg, cfgseq, CFG_NODE_ATTR_CHILD1, &cfgdir)) != CFG_OK) {
  -        (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_CHILD1) failed with error %s (%d)", cp, cfgrv); CU(1); }
  -    while (cfgdir != NULL) {
  -        /*  check if operating on a directive */
  -        if ((cfgrv = cfg_node_get(cfg, cfgdir, CFG_NODE_ATTR_TYPE, &cfgtype)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)", cp, cfgrv); CU(1); }
  -        if (cfgtype != CFG_NODE_TYPE_DIR) {
  -            fsldebug(L2_LEVEL_ERROR, "openlog: expected directive"); CU(1); }
  -        if ((cfgrv = cfg_node_get(cfg, cfgdir, CFG_NODE_ATTR_CHILDS, &cfgnumc)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_CHILDS) failed with error %s (%d)", cp, cfgrv); CU(1); }
  -
  -        /*  process first child of directive, check if it is an argument and has a valid token attached */
  -        if ((cfgrv = cfg_node_get(cfg, cfgdir, CFG_NODE_ATTR_CHILD1, &cfgarg)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_CHILD1) failed with error %s (%d)", cp, cfgrv); CU(1); }
  -        if (cfgarg == NULL) {
  -            fsldebug(L2_LEVEL_ERROR, "openlog: first argument is NULL"); CU(1); }
  -        if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_TYPE, &cfgtype)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)", cp, cfgrv); CU(1); }
  -        if (cfgtype != CFG_NODE_TYPE_ARG) {
  -            fsldebug(L2_LEVEL_ERROR, "openlog: expected first argument, got %d", cfgtype); CU(1); }
  -        if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_TOKEN, &cfgargtok)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_TOKEN) failed with error %s (%d)", cp, cfgrv); CU(1); }
  -        if (cfgargtok == NULL) {
  -            fsldebug(L2_LEVEL_ERROR, "openlog: first argument has NULL data"); CU(1); }
  -        cfgargtoka[0] = cfgargtok;
  -
  -        cfgnume = 0;
  -        if (strcmp(cfgargtoka[0], "ident") == 0)
  -            cfgnume = 3;
  -        if (strcmp(cfgargtoka[0], "default") == 0)
  -            cfgnume = 3;
  -        if (strcmp(cfgargtoka[0], "map") == 0)
  -            cfgnume = 3;
  -        if (cfgnume == 0) {
  -            fsldebug(L2_LEVEL_ERROR, "openlog: syntax error, invalid argument \"%s\"", cfgargtoka[0]); CU(1); }
  -        if (cfgnume != cfgnumc) {
  -            fsldebug(L2_LEVEL_ERROR, "openlog: directive missing arguments, expected %d, got %d", cfgnume, cfgnumc); CU(1); }
  -
  -        for (i = 1; i < cfgnume; i++) {
  -            /*  process right brother of argument, check if it is an argument and has a valid token attached */
  -            if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_RBROTH, &cfgarg)) != CFG_OK) {
  -                (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_RBROTH) failed with error %s (%d)", cp, cfgrv); CU(1); }
  -            if (cfgarg == NULL) {
  -                fsldebug(L2_LEVEL_ERROR, "openlog: argument %d is NULL", i); CU(1); }
  -            if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_TYPE, &cfgtype)) != CFG_OK) {
  -                (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_TYPE) failed with error %s (%d)", cp, cfgrv); CU(1); }
  -            if (cfgtype != CFG_NODE_TYPE_ARG) {
  -                fsldebug(L2_LEVEL_ERROR, "openlog: expected argument %d", i); CU(1); }
  -            if ((cfgrv = cfg_node_get(cfg, cfgarg, CFG_NODE_ATTR_TOKEN, &cfgargtok)) != CFG_OK) {
  -                (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_node_get(CFG_NODE_ATTR_TOKEN) failed with error %s (%d)", cp, cfgrv); CU(1); }
  -            if (cfgargtok == NULL) {
  -                fsldebug(L2_LEVEL_ERROR, "openlog: argument %d has NULL data", i); CU(1); }
  -            cfgargtoka[i] = cfgargtok;
  -        }
  -
  -        if ((strcmp(cfgargtoka[0], "ident") == 0) || (strcmp(cfgargtoka[0], "default") == 0)) { /*FIXME currently default and ident are identical*/
  -            argident  = cfgargtoka[0];
  -            argmatch  = cfgargtoka[1];
  -            argl2spec = cfgargtoka[2];
  -
  -            /*  process the directive using the three arguments found */
  -            fsldebug(L2_LEVEL_DEBUG, "openlog: argident=%s, argmatch=%s, argl2spec=%s", argident, argmatch, argl2spec);
  -            {
  -                pcre       *pcreRegex;
  -                pcre_extra *pcreExtra;
  -                const char *cpError;
  -                int         iError;
  -                int         nMatch;
  -
  -                /* compile regular expression into finite state machine and optimize */
  -                if ((pcreRegex = pcre_compile(argmatch, PCRE_CASELESS, &cpError, &iError, NULL)) == NULL) {
  -                    fsldebug(L2_LEVEL_ERROR, "openlog: pcre_compile() failed with error %s (%d)", cpError, iError); CU(1); }
  -                pcreExtra = pcre_study(pcreRegex, 0, &cpError);
  -                if (cpError != NULL) {
  -                    fsldebug(L2_LEVEL_ERROR, "openlog: pcre_study() failed with error %s", cpError); CU(1); }
  -
  -                nMatch = pcre_exec(pcreRegex, pcreExtra, cpISF, strlen(cpISF), 0, 0, ovec, OVECSIZE);
  -                if (nMatch < 0)
  -                    fsldebug(L2_LEVEL_TRACE, "openlog: matching ident/facility \"%s\" against section \"%s\" failed.", cpISF, argmatch);
  -                else
  -                    if (nMatch == 0)
  -                        fsldebug(L2_LEVEL_TRACE, "openlog: matching ident/facility \"%s\" against section \"%s\" succeeded, found $0", cpISF, argmatch);
  -                    else
  -                        fsldebug(L2_LEVEL_TRACE, "openlog: matching ident/facility \"%s\" against section \"%s\" succeeded, found $0...$%d", cpISF, argmatch, (nMatch-1) > 9 ? 9 : (nMatch-1));
  -                if (nMatch >= 1) {
  -                    pcre_get_substring_list(cpISF, ovec, nMatch, &acpMatch);
  -                    if (acpMatch != NULL)
  -                        for (i = 0; i < nMatch; i++)
  -                            fsldebug(L2_LEVEL_DEBUG, "openlog: regex reference[%d]=\'%s\'", i, acpMatch[i] == NULL ? "(UNDEFINED)" : acpMatch[i]);
  -                    n = substcapture(argl2spec, strlen(argl2spec), acpMatch, nMatch, NULL);
  -                    if ((cp = (char *)malloc(n + 1)) == NULL) {
  -                        fsldebug(L2_LEVEL_ERROR, "openlog: malloc() failed"); CU(1); }
  -                    if (substcapture(argl2spec, strlen(argl2spec), acpMatch, nMatch, cp) != n) {
  -                        fsldebug(L2_LEVEL_ERROR, "openlog: substcapture() failed"); CU(1); }
  -                    argl2spec = cp;
  -                    fsldebug(L2_LEVEL_DEBUG, "openlog: argident=%s, argmatch=%s, argl2spec=%s", argident, argmatch, argl2spec);
  -
  -                    /* create L2 channel throuh spec and link into root channel */
  -                    if ((l2rv = l2_spec(&ch, ctx.l2_env, "%s", argl2spec)) != L2_OK) {
  -                        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to create stream from spec %s(%d)", cp, l2rv); CU(1); }
  -                    if ((l2rv = l2_channel_link(ctx.l2_nch, L2_LINK_CHILD, ch, NULL)) != L2_OK) {
  -                        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to link child channel %s(%d)", cp, l2rv); CU(1); }
  -
  -                    free(argl2spec);
  -                }
  -            }
  -        }
  -        else if (strcmp(cfgargtoka[0], "map") == 0) {
  -
  -            int mapfrom;
  -            int mapto;
  -
  -            for (i = 0, mapfrom = -1; (mapfrom == -1) && (sysloglevel2string[i].string != NULL); i++) {
  -                if (strcmp(sysloglevel2string[i].string, cfgargtoka[1]) == 0)
  -                    mapfrom = i;
  -            }
  -            if (mapfrom == -1) {
  -                fsldebug(L2_LEVEL_ERROR, "openlog: trying to map from unknown syslog level \"%s\"", cfgargtoka[1]); CU(1); }
  -
  -            for (i = 0, mapto = -1; (mapto == -1) && (l2level2string[i].string != NULL); i++) {
  -                if (strcmp(l2level2string[i].string, cfgargtoka[2]) == 0)
  -                    mapto = i;
  -            }
  -            if (mapto == -1) {
  -                fsldebug(L2_LEVEL_ERROR, "openlog: trying to map to unknown l2 level \"%s\"", cfgargtoka[2]); CU(1); }
  -            
  -            ctx.levelmap[mapfrom].l2 = l2level2string[mapto].level;
  -            fsldebug(L2_LEVEL_DEBUG, "openlog: map levelmap[%10s/%d].l2 = l2level2string[%10s/%d].level = 0x%.8lx", cfgargtoka[1], mapfrom, cfgargtoka[2], mapto, (unsigned long)l2level2string[mapto].level);
  -        }
  -        else {
  -            fsldebug(L2_LEVEL_ERROR, "openlog: internal, argument \"%s\" not implemented", cfgargtoka[0]); CU(1); }
  -
  -        /*  get right brother of current directive */
  -        if ((cfgrv = cfg_node_get(cfg, cfgdir, CFG_NODE_ATTR_RBROTH, &cfgdir)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_get(CFG_NODE_ATTR_RBROTH) failed with error %s (%d)", cp, cfgrv); CU(1); }
  -    }
  +    /*  process OSSP cfg node tree "map" and "ident" directives */
  +    if ((rv = processcfg(cfg, cpISF, 0)) != FSL_OK && (rv != FSL_NOIDENT)) {
  +        fsldebug(L2_LEVEL_ERROR, "openlog: processcfg() failed with an unrecoverable error (%d)", rv); CU(1); }
  +
  +    /*  optionally process OSSP cfg node tree "default" directives */
  +    if ((rv == FSL_NOIDENT) && ((rv = processcfg(cfg, cpISF, 1)) != FSL_OK)) {
  +        fsldebug(L2_LEVEL_ERROR, "openlog: processcfg() failed with an unrecoverable error (%d)", rv); CU(1); }
   
  +    /*  open logging now or prepare for delayed open */
       if (logopt & LOG_NDELAY) {
           ctx.delayopen = TRUE;
           fsldebug(L2_LEVEL_TRACE, "openlog: logopt LOG_NDELAY delays open of L2 channel tree until first message is being logged");

From ossp-cvs-owner@ossp.org  Mon Jul 29 17:07:02 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D03E8765ED; Mon, 29 Jul 2002 17:07:01 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc_const.h rc_util.c
Message-Id: <20020729150701.D03E8765ED@mail.ossp.org>
Date: Mon, 29 Jul 2002 17:07:01 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   29-Jul-2002 17:07:01
  Branch: HEAD                             Handle: 2002072916070100

  Modified files:
    ossp-pkg/rc             rc_const.h rc_util.c

  Log:
    Synchronize error and warning reporting with new return code additions.

  Summary:
    Revision    Changes     Path
    1.9         +6  -0      ossp-pkg/rc/rc_const.h
    1.5         +6  -0      ossp-pkg/rc/rc_util.c
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc_const.h
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 rc_const.h
  --- ossp-pkg/rc/rc_const.h	27 Jun 2002 15:35:58 -0000	1.8
  +++ ossp-pkg/rc/rc_const.h	29 Jul 2002 15:07:01 -0000	1.9
  @@ -106,7 +106,13 @@
   #define RC_ERRSTR_SYS "System"
   #define RC_ERRSTR_IO  "Input/Output"
   #define RC_ERRSTR_INT "Internal"
  +#define RC_ERRSTR_FNC "Funcfile"
  +#define RC_ERRSTR_DIR "Location"
  +#define RC_ERRSTR_RCF "Rcfile"
  +#define RC_ERRSTR_TRM "Terminate"
   #define RC_ERRSTR_UNK "Unrecognized"
  +#define RC_WRNSTR_OWR "Overwrite"
  +#define RC_WRNSTR_NUL "NULLPointer"
   
   #define RC_GLOB_WILD  "all"
   
  Index: ossp-pkg/rc/rc_util.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 rc_util.c
  --- ossp-pkg/rc/rc_util.c	23 May 2002 18:03:20 -0000	1.4
  +++ ossp-pkg/rc/rc_util.c	29 Jul 2002 15:07:01 -0000	1.5
  @@ -43,6 +43,12 @@
       else if (rv == RC_ERR_SYS) return RC_ERRSTR_SYS;
       else if (rv == RC_ERR_IO)  return RC_ERRSTR_IO;
       else if (rv == RC_ERR_INT) return RC_ERRSTR_INT;
  +    else if (rv == RC_ERR_FNC) return RC_ERRSTR_FNC;
  +    else if (rv == RC_ERR_DIR) return RC_ERRSTR_DIR;
  +    else if (rv == RC_ERR_RCF) return RC_ERRSTR_RCF;
  +    else if (rv == RC_ERR_TRM) return RC_ERRSTR_TRM;
  +    else if (rv == RC_WRN_OWR) return RC_WRNSTR_OWR;
  +    else if (rv == RC_WRN_NUL) return RC_WRNSTR_NUL;
       else                       return RC_ERRSTR_UNK;
   }
   

From ossp-cvs-owner@ossp.org  Mon Jul 29 17:08:22 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D3DE1765ED; Mon, 29 Jul 2002 17:08:21 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.c
Message-Id: <20020729150821.D3DE1765ED@mail.ossp.org>
Date: Mon, 29 Jul 2002 17:08:21 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   29-Jul-2002 17:08:21
  Branch: HEAD                             Handle: 2002072916082100

  Modified files:
    ossp-pkg/fsl            fsl.c

  Log:
    improve readability and consistency of fsldebug logging

  Summary:
    Revision    Changes     Path
    1.37        +11 -17     ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.36 -r1.37 fsl.c
  --- ossp-pkg/fsl/fsl.c	29 Jul 2002 14:42:05 -0000	1.36
  +++ ossp-pkg/fsl/fsl.c	29 Jul 2002 15:08:21 -0000	1.37
  @@ -219,7 +219,7 @@
       if (filename == NULL || buffer == NULL)
           CU(FSL_ERR_ARG);
   
  -    fsldebug(L2_LEVEL_TRACE, "appendfiletobuffer(buffer, filename=\"%s\")", filename);
  +    fsldebug(L2_LEVEL_TRACE, "appendfiletobuffer() filename=\"%s\")", filename);
   
       if ((fd = open(filename, O_RDONLY)) == -1)
           CU(FSL_ERR_SYS);
  @@ -264,7 +264,7 @@
   
       if (ident == NULL || buffer == NULL)
           CU(FSL_ERR_ARG);
  -    fsldebug(L2_LEVEL_TRACE, "readfile(buffer, ident=\"%s\")", ident);
  +    fsldebug(L2_LEVEL_TRACE, "readfile() ident=\"%s\")", ident);
   
       if ((filename = (char *)malloc(strlen(FSL_CFGDIR) + 1 + 
                                      strlen(FSL_PREFIX) + strlen(ident) + 1)) == NULL)
  @@ -293,7 +293,7 @@
   
       if (buffer == NULL)
           CU(FSL_ERR_ARG);
  -    fsldebug(L2_LEVEL_TRACE, "readallfiles(buffer) globbing \"%s/%s*\"", FSL_CFGDIR, FSL_PREFIX);
  +    fsldebug(L2_LEVEL_TRACE, "readallfiles() globbing \"%s/%s*\"", FSL_CFGDIR, FSL_PREFIX);
   
       if ((dp = opendir(FSL_CFGDIR)) == NULL)
           CU(FSL_ERR_SYS);
  @@ -331,13 +331,13 @@
   
       if (ident == NULL)
           return FSL_ERR_ARG;
  -    fsldebug(L2_LEVEL_TRACE, "readfileorallfiles(buffer, ident=\"%s\")", ident);
  +    fsldebug(L2_LEVEL_TRACE, "readfileorallfiles() ident=\"%s\")", ident);
   
       if ((rv = readfile(buffer, ident)) == FSL_OK)
           return FSL_OK;
       if (rv != FSL_ERR_SYS || errno != ENOENT)
           return rv;
  -    fsldebug(L2_LEVEL_TRACE, "readfileorallfiles: file does not exist");
  +    fsldebug(L2_LEVEL_TRACE, "readfileorallfiles: specific file does not exist, trying all files from directory");
       if ((rv = readallfiles(buffer)) != FSL_OK)
           return rv;
       return FSL_OK;
  @@ -622,7 +622,7 @@
   
           /*  get right brother of current directive */
           if ((cfgrv = cfg_node_get(cfg, cfgdir, CFG_NODE_ATTR_RBROTH, &cfgdir)) != CFG_OK) {
  -            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "cfg_node_get(CFG_NODE_ATTR_RBROTH) failed with error %s (%d)", cp, cfgrv); CU(FSL_ERR_CUS); }
  +            (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "processcfg: cfg_node_get(CFG_NODE_ATTR_RBROTH) failed with error %s (%d)", cp, cfgrv); CU(FSL_ERR_CUS); }
       }
   
       fsldebug(L2_LEVEL_TRACE, "processcfg: matched %d sections while looking for %s sections", matchcount, mode == 0 ? "ident" : "default");
  @@ -687,8 +687,7 @@
       }
   
       /* tracing */
  -    if (ctx.l2_fslnch != NULL)
  -        fsldebug(L2_LEVEL_TRACE, "openlog(ident=\"%s\", logopt=0x%.8lx, facility=0x%.8lx)", ident, logopt, facility);
  +    fsldebug(L2_LEVEL_TRACE, "openlog() ident=\"%s\", logopt=0x%.8lx, facility=0x%.8lx)", ident, logopt, facility);
   
       /* remember logopt and handle unsupported values */
       ctx.logopt = logopt;
  @@ -795,8 +794,8 @@
   /* faked POSIX API function closelog(3) */
   void closelog(void)
   {
  +    fsldebug(L2_LEVEL_TRACE, "closelog()");
       if (ctx.l2_fslnch != NULL) {
  -        l2_channel_log(ctx.l2_fslnch, L2_LEVEL_TRACE, "closelog()");
           l2_channel_destroy(ctx.l2_fslnch);
           ctx.l2_fslnch = NULL;
       }
  @@ -827,8 +826,7 @@
   {
       int oldmask;
   
  -    if (ctx.l2_fslnch != NULL)
  -        l2_channel_log(ctx.l2_fslnch, L2_LEVEL_TRACE, "setlogmask(maskpri=0x%.8lx)", maskpri);
  +    fsldebug(L2_LEVEL_TRACE, "setlogmask() maskpri=0x%.8lx", maskpri);
       oldmask = ctx.maskpri;
       if (maskpri != 0)
           ctx.maskpri = maskpri;
  @@ -863,12 +861,6 @@
       if (ctx.l2_nch == NULL)
           return;
   
  -#if 0
  -    /* tracing */
  -    if (ctx.l2_fslnch != NULL)
  -        l2_channel_log(ctx.l2_fslnch, L2_LEVEL_TRACE, "vsyslog(priority=%d, fmt=\"%s\", ...)", priority, fmt);
  -#endif
  -
       /* check for delayed open */
       if ((ctx.logopt & LOG_NDELAY) && (ctx.delayopen == TRUE)) {
           if ((l2rv = l2_channel_open(ctx.l2_nch)) != L2_OK) {
  @@ -898,6 +890,8 @@
           }
       }
       fsldebug(L2_LEVEL_DEBUG, "vsyslog: levelmask=0x%.8lx", (unsigned long)levelmask);
  +
  +    /* the heart of FSL */
       if ((l2rv = l2_channel_vlog(ctx.l2_nch, levelmask, fmt, args)) != L2_OK) {
           cp = l2_env_strerror(ctx.l2_env, l2rv);
           fsldebug(L2_LEVEL_PANIC, "vsyslog: application logging failed: %s (%d)", cp, l2rv);

From ossp-cvs-owner@ossp.org  Mon Jul 29 17:12:36 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 88425765ED; Mon, 29 Jul 2002 17:12:36 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl README VERSION
Message-Id: <20020729151236.88425765ED@mail.ossp.org>
Date: Mon, 29 Jul 2002 17:12:36 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   29-Jul-2002 17:12:36
  Branch: HEAD                             Handle: 2002072916123600

  Modified files:
    ossp-pkg/fsl            README VERSION

  Log:
    bump version for release

  Summary:
    Revision    Changes     Path
    1.11        +1  -1      ossp-pkg/fsl/README
    1.11        +1  -1      ossp-pkg/fsl/VERSION
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/README
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 README
  --- ossp-pkg/fsl/README	27 Jul 2002 18:19:51 -0000	1.10
  +++ ossp-pkg/fsl/README	29 Jul 2002 15:12:36 -0000	1.11
  @@ -5,7 +5,7 @@
     |_| |___/_|
                
     OSSP fsl - Faking/Flexible Syslog Library
  -  Version 0.1.9 (27-Jul-2002)
  +  Version 0.1.10 (29-Jul-2002)
   
     ABSTRACT
   
  Index: ossp-pkg/fsl/VERSION
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 VERSION
  --- ossp-pkg/fsl/VERSION	27 Jul 2002 18:19:51 -0000	1.10
  +++ ossp-pkg/fsl/VERSION	29 Jul 2002 15:12:36 -0000	1.11
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP fsl (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP fsl, Version 0.1.9 (27-Jul-2002)
  +  This is OSSP fsl, Version 0.1.10 (29-Jul-2002)
   

From ossp-cvs-owner@ossp.org  Mon Jul 29 17:51:43 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A2330765E7; Mon, 29 Jul 2002 17:51:43 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/rc_test rcfuncs
Message-Id: <20020729155143.A2330765E7@mail.ossp.org>
Date: Mon, 29 Jul 2002 17:51:43 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   29-Jul-2002 17:51:43
  Branch: HEAD                             Handle: 2002072916514300

  Modified files:
    ossp-pkg/rc/rc_test     rcfuncs

  Log:
    Try to copy the existing OpenPKG rc.func format which does not include a
    starting hashbang.

  Summary:
    Revision    Changes     Path
    1.3         +0  -2      ossp-pkg/rc/rc_test/rcfuncs
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc_test/rcfuncs
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 rcfuncs
  --- ossp-pkg/rc/rc_test/rcfuncs	5 Jul 2002 12:54:56 -0000	1.2
  +++ ossp-pkg/rc/rc_test/rcfuncs	29 Jul 2002 15:51:43 -0000	1.3
  @@ -1,5 +1,3 @@
  -#! /bin/sh
  -
   echo "**** Funcfile ist hier und wirds gemerged ****"
   echo "And again" >>disfile.txt
   cat disfile.txt | md5 >>disfile.txt

From ossp-cvs-owner@ossp.org  Mon Jul 29 18:33:49 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3B283765EB; Mon, 29 Jul 2002 18:33:49 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc 00TODO
Message-Id: <20020729163349.3B283765EB@mail.ossp.org>
Date: Mon, 29 Jul 2002 18:33:49 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   29-Jul-2002 18:33:49
  Branch: HEAD                             Handle: 2002072917334800

  Modified files:
    ossp-pkg/rc             00TODO

  Log:
    Remember data type abstraction and other important things.

  Summary:
    Revision    Changes     Path
    1.31        +23 -1      ossp-pkg/rc/00TODO
  ____________________________________________________________________________

  Index: ossp-pkg/rc/00TODO
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 00TODO
  --- ossp-pkg/rc/00TODO	10 Jul 2002 19:03:21 -0000	1.30
  +++ ossp-pkg/rc/00TODO	29 Jul 2002 16:33:48 -0000	1.31
  @@ -5,6 +5,7 @@
     Manpage reorganization lacks important option combination info.
     What when multiple command interpreters and one --print or --eval given?
     File rc.func totally undocumented, but logic should be clear.
  +  Check combo options for correctness, like config contains exc, evl, prn.
     Control flow
       Explain logical ordering of multiple section spanning multiple rcfiles.
       Give example semantics of a common scenario.
  @@ -37,7 +38,6 @@
     Use str_hash von ossp str or static RC_XXX_VAL array from rc_option.h.
     Restore lost multiple location merging logic.
     Use OSSP cfg library for dotconf parsing, ask Ralf to help.
  -  Add config section of each rc file to start of script.
   
   Implementation
     Correct assertion, sanity check, and if () checks according to one standard.
  @@ -47,6 +47,28 @@
     Relocate rc_anal_t and other to approproate header files rc_anal.h.
     I think rc_anal is violating the singleton configuration.
     Totally remove warnings from the exception logic
  +
  +Change data type locations to private for additional abstraction
  +  Index: ossp-pkg/cfg/cfg_buf.c
  +  ============================================================
  +  +struct cfg_buf_st {
  +  +    char   *buf_ptr;
  +  +    size_t  buf_size;
  +  +    size_t  buf_len;
  +  +};
  +  +
  +
  +  Index: ossp-pkg/cfg/cfg_buf.h
  +  ============================================================
  +   struct cfg_buf_st;
  +   typedef struct cfg_buf_st cfg_buf_t;
  +
  +  -struct cfg_buf_st {
  +  -    char   *buf_ptr;
  +  -    size_t  buf_size;
  +  -    size_t  buf_len;
  +  -};
  +  -
   
   Detailed ;-) project plan
   -------------------------

From ossp-cvs-owner@ossp.org  Mon Jul 29 18:34:22 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4CCF6767DB; Mon, 29 Jul 2002 18:34:22 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc_test.sh
Message-Id: <20020729163422.4CCF6767DB@mail.ossp.org>
Date: Mon, 29 Jul 2002 18:34:22 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   29-Jul-2002 18:34:22
  Branch: HEAD                             Handle: 2002072917342100

  Modified files:
    ossp-pkg/rc             rc_test.sh

  Log:
    Expand test script to include recently added default option functionality.

  Summary:
    Revision    Changes     Path
    1.19        +44 -38     ossp-pkg/rc/rc_test.sh
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc_test.sh
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 rc_test.sh
  --- ossp-pkg/rc/rc_test.sh	10 Jul 2002 19:04:52 -0000	1.18
  +++ ossp-pkg/rc/rc_test.sh	29 Jul 2002 16:34:21 -0000	1.19
  @@ -42,18 +42,18 @@
   #./rc -derv -L ./rc_test/rc.d/rc.%{RCFILE:s/^all$/*/} -c ./rc.conf -f ./rc_test/rcfuncs -t /tmp openssh stop sleep=4 start daily minsize=2097152
   
   # Test some long options, should fail for false combination usage
  -echo; echo "./rc --verbose --silent --NameConfig config --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" uucp stop sleep=6 start"
  -./rc --verbose --silent --NameConfig config --ParseSectionDef "^%(\w+).*?\n(.*?)^$" uucp stop sleep=6 start
  -echo; echo "./rc --query myvar --silent --NameConfig config --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" zebra bing bang"
  -./rc --query myvar --silent --NameConfig config --ParseSectionDef "^%(\w+).*?\n(.*?)^$" zebra bing bang
  -echo; echo "./rc --conf ./rc.conf --NameConfig config --ParseSectionDef \"^<(.+?)\s*.*?>\n*(.*?)^<\/\1>\" --locate ./rc_test/ --query this barf test"
  -./rc --conf ./rc.conf --NameConfig config --ParseSectionDef "^<(.+?)\s*.*?>\n*(.*?)^<\/\1>" --locate ./rc_test/ --query this barf test
  +echo; echo "./rc --verbose --silent --print --NameConfig config --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" uucp stop sleep=6 start"
  +./rc --verbose --silent --print --NameConfig config --ParseSectionDef "^%(\w+).*?\n(.*?)^$" uucp stop sleep=6 start
  +echo; echo "./rc --query myvar --silent --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" zebra bing bang"
  +./rc --query myvar --silent --ParseSectionDef "^%(\w+).*?\n(.*?)^$" zebra bing bang
  +echo; echo "./rc --conf ./rc.conf --ParseSectionDef \"^<(.+?)\s*.*?>\n*(.*?)^<\/\1>\" --locate ./rc_test/ --query this barf test"
  +./rc --conf ./rc.conf --ParseSectionDef "^<(.+?)\s*.*?>\n*(.*?)^<\/\1>" --locate ./rc_test/ --query this barf test
   
   # Test minimal set of long options, should succeed
  -echo; echo "./rc --debug --version --NameConfig config --ParseSectionDef \"^<(.+?)\s*.*?>\n*(.*?)^<\/\1>\" rsyncd nothing matters but the version"
  -./rc --debug --version --NameConfig config --ParseSectionDef "^<(.+?)\s*.*?>\n*(.*?)^<\/\1>" rsyncd nothing matters but the version
  -echo; echo "./rc --conf $RCBASE/rc.conf --NameConfig config --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" --locate $RCBASE/rc.d:./rc_test:/etc/rc --query all barf test"
  -./rc --conf $RCBASE/rc.conf --NameConfig config --ParseSectionDef "^%(\w+).*?\n(.*?)^$" --locate $RCBASE/rc.d:./rc_test:/etc/rc --query all barf test
  +echo; echo "./rc --debug --version --ParseSectionDef \"^<(.+?)\s*.*?>\n*(.*?)^<\/\1>\" rsyncd nothing matters but the version"
  +./rc --debug --version --ParseSectionDef "^<(.+?)\s*.*?>\n*(.*?)^<\/\1>" rsyncd nothing matters but the version
  +echo; echo "./rc --conf $RCBASE/rc.conf --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" --locate $RCBASE/rc.d:./rc_test:/etc/rc --query all barf test"
  +./rc --conf $RCBASE/rc.conf --ParseSectionDef "^%(\w+).*?\n(.*?)^$" --locate $RCBASE/rc.d:./rc_test:/etc/rc --query all barf test
   
   # FIXME these cases are not handled yet by our configuration FIXME #
   #echo; echo "./rc --debug --version"
  @@ -68,45 +68,51 @@
   #./rc --conf $RCBASE/rc.conf --tmp /tmp --debug --labels rsyncd
   # FIXME these cases are not handled yet by our configuration FIXME #
   
  -echo; echo "./rc --func rc_test/rcfuncs --print --NameConfig config --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" --verbose openssh stop sleep=4 start"
  -./rc --func rc_test/rcfuncs --print --NameConfig config --ParseSectionDef "^%(\w+).*?\n(.*?)^$" --verbose openssh stop sleep=4 start
  +echo; echo "./rc --func rc_test/rcfuncs --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" --verbose openssh stop sleep=4 start"
  +./rc --func rc_test/rcfuncs --ParseSectionDef "^%(\w+).*?\n(.*?)^$" --verbose openssh stop sleep=4 start
   echo; echo "./rc --func ./rc_test/rcfuncs --info --eval uucp restart"
   ./rc --func ./rc_test/rcfuncs --info --eval uucp restart
  -echo; echo "./rc --conf rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --NameConfig config --ParseSectionDef \"^<(.+?)\s*.*?>\n*(.*?)^<\/\1>\" --print uucp start"
  -./rc --conf rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --NameConfig config --ParseSectionDef "^<(.+?)\s*.*?>\n*(.*?)^<\/\1>" --print uucp start
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --NameConfig config --ParseSectionDef \"^<(.+?)\s*.*?>\n*(.*?)^<\/\1>\" --print ntp sync"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --NameConfig config --ParseSectionDef "^<(.+?)\s*.*?>\n*(.*?)^<\/\1>" --print ntp sync
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --silent --NameConfig config --ParseSectionDef \"^<(.+?)\s*.*?>\n*(.*?)^<\/\1>\" --print ralf feed suppe"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --silent --NameConfig config --ParseSectionDef "^<(.+?)\s*.*?>\n*(.*?)^<\/\1>" --print ralf feed suppe
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L rc_test --NameConfig config --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" --tmp /tmp --silent --print samba search finish destroy"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L rc_test --NameConfig config --ParseSectionDef "^%(\w+).*?\n(.*?)^$" --tmp /tmp --silent --print samba search finish destroy
  +echo; echo "./rc --conf rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --ParseSectionDef \"^<(.+?)\s*.*?>\n*(.*?)^<\/\1>\" uucp start"
  +./rc --conf rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --ParseSectionDef "^<(.+?)\s*.*?>\n*(.*?)^<\/\1>" uucp start
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --ParseSectionDef \"^<(.+?)\s*.*?>\n*(.*?)^<\/\1>\" ntp sync"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --ParseSectionDef "^<(.+?)\s*.*?>\n*(.*?)^<\/\1>" ntp sync
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --silent --ParseSectionDef \"^<(.+?)\s*.*?>\n*(.*?)^<\/\1>\" ralf feed suppe"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --silent --ParseSectionDef "^<(.+?)\s*.*?>\n*(.*?)^<\/\1>" ralf feed suppe
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L rc_test --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" --tmp /tmp --silent samba search finish destroy"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L rc_test --ParseSectionDef "^%(\w+).*?\n(.*?)^$" --tmp /tmp --silent samba search finish destroy
   
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test --NameConfig config --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" --tmp /tmp --silent --print all feed suppe"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test --NameConfig config --ParseSectionDef "^%(\w+).*?\n(.*?)^$" --tmp /tmp --silent --print all feed suppe
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" --tmp /tmp --silent all feed suppe"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test --ParseSectionDef "^%(\w+).*?\n(.*?)^$" --tmp /tmp --silent all feed suppe
   
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --NameConfig config --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" --tmp /tmp --silent --debug --print all config barf gag"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --NameConfig config --ParseSectionDef "^%(\w+).*?\n(.*?)^$" --tmp /tmp --silent --debug --print all config barf gag
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" --tmp /tmp --silent --debug all config barf gag"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "^%(\w+).*?\n(.*?)^$" --tmp /tmp --silent --debug all config barf gag
   
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --NameConfig config --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" --tmp /tmp --silent --debug --eval all config start"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --NameConfig config --ParseSectionDef "^%(\w+).*?\n(.*?)^$" --tmp /tmp --silent --debug --eval all config start
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" --tmp /tmp --silent --debug --eval all config start"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "^%(\w+).*?\n(.*?)^$" --tmp /tmp --silent --debug --eval all config start
   
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --NameConfig config --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" --tmp /tmp --silent --debug --exec all config start"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --NameConfig config --ParseSectionDef "^%(\w+).*?\n(.*?)^$" --tmp /tmp --silent --debug --exec all config start
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" --tmp /tmp --silent --debug --exec all config start"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "^%(\w+).*?\n(.*?)^$" --tmp /tmp --silent --debug --exec all config start
   
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --NameConfig config --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --debug --print pam info"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --NameConfig config --ParseSectionDef "%(.+)" --tmp /tmp --silent --debug --print pam info
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --print --debug pam info"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --print --debug pam info
   
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --NameConfig config --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --debug --print apache config start"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --NameConfig config --ParseSectionDef "%(.+)" --tmp /tmp --silent --debug --print apache config start
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --debug apache config start"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --debug apache config start
   
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --NameConfig config --ParseSectionDef \"^<(.+?)\s*.*?>\n*(.*?)^<\/\1>\" --tmp /tmp --silent --debug --print all config start"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --NameConfig config --ParseSectionDef "^<(.+?)\s*.*?>\n*(.*?)^<\/\1>" --tmp /tmp --silent --debug --print all config start
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef \"^<(.+?)\s*.*?>\n*(.*?)^<\/\1>\" --tmp /tmp --silent --debug all config start"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef "^<(.+?)\s*.*?>\n*(.*?)^<\/\1>" --tmp /tmp --silent --debug all config start
   
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --NameConfig config --ParseSectionDef \"^<(.+?)\s*.*?>\n*(.*?)^<\/\1>\" --tmp /tmp --silent --debug --print pam info"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --NameConfig config --ParseSectionDef "^<(.+?)\s*.*?>\n*(.*?)^<\/\1>" --tmp /tmp --silent --debug --print pam info
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef \"^<(.+?)\s*.*?>\n*(.*?)^<\/\1>\" --tmp /tmp --silent --debug pam info"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef "^<(.+?)\s*.*?>\n*(.*?)^<\/\1>" --tmp /tmp --silent --debug pam info
   
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func $RCBASE/rc.func -L $RCBASE/rc.d/ --NameConfig config --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" --tmp /tmp --silent --debug --print dhcpd start"
  -./rc --conf ./rc_test/myrc.conf --func $RCBASE/rc.func -L $RCBASE/rc.d/ --NameConfig config --ParseSectionDef "^%(\w+).*?\n(.*?)^$" --tmp /tmp --silent --debug --print dhcpd start
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func $RCBASE/rc.func -L $RCBASE/rc.d/ --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" --tmp /tmp --silent --debug dhcpd start"
  +./rc --conf ./rc_test/myrc.conf --func $RCBASE/rc.func -L $RCBASE/rc.d/ --ParseSectionDef "^%(\w+).*?\n(.*?)^$" --tmp /tmp --silent --debug dhcpd start
  +
  +echo; echo "./rc --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef \"^<(.+?)\s*.*?>\n*(.*?)^<\/\1>\" pam info"
  +./rc --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef "^<(.+?)\s*.*?>\n*(.*?)^<\/\1>" pam info
  +
  +echo; echo "./rc --func ./rc_test/rcfuncs -L ./rc_test/ ntp stop"
  +./rc --func ./rc_test/rcfuncs -L ./rc_test/ ntp stop
   
   # Next milestone
   #RequireOwner

From ossp-cvs-owner@ossp.org  Mon Jul 29 18:34:59 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 74687765EB; Mon, 29 Jul 2002 18:34:59 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc.c rc.h rc_config.c
Message-Id: <20020729163459.74687765EB@mail.ossp.org>
Date: Mon, 29 Jul 2002 18:34:59 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   29-Jul-2002 18:34:59
  Branch: HEAD                             Handle: 2002072917345801

  Modified files:
    ossp-pkg/rc             rc.c rc.h rc_config.c

  Log:
    Implement about half of the necessary default configuration members.

  Summary:
    Revision    Changes     Path
    1.40        +2  -1      ossp-pkg/rc/rc.c
    1.36        +1  -0      ossp-pkg/rc/rc.h
    1.23        +80 -0      ossp-pkg/rc/rc_config.c
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc.c
  ============================================================
  $ cvs diff -u -r1.39 -r1.40 rc.c
  --- ossp-pkg/rc/rc.c	10 Jul 2002 19:02:24 -0000	1.39
  +++ ossp-pkg/rc/rc.c	29 Jul 2002 16:34:58 -0000	1.40
  @@ -39,10 +39,11 @@
   {
       ex_t Except;
   
  -    try {                       /* Configuration block                        */
  +    try {                       /* Configuration block, config is built here  */
           configNew();            /* Construct a new config, add default values */
           configLoad(argc, (const char **)argv);   /* Load cli, env, and conf   */
           configVerify();         /* Test for usage, help and version options   */
  +        configDefaults();       /* Add default values to empty config members */
       }
       catch(Except)               /* Exceptions of the configuration block      */
           rcError(Except);
  Index: ossp-pkg/rc/rc.h
  ============================================================
  $ cvs diff -u -r1.35 -r1.36 rc.h
  --- ossp-pkg/rc/rc.h	4 Jul 2002 16:49:58 -0000	1.35
  +++ ossp-pkg/rc/rc.h	29 Jul 2002 16:34:58 -0000	1.36
  @@ -73,6 +73,7 @@
   rc_return_t configLoad(int, const char **);
   rc_return_t configInfo(void);
   rc_return_t configVerify(void);
  +rc_return_t configDefaults(void);
   rc_return_t configDelete(void);
   
   /* Config accessor prototypes */
  Index: ossp-pkg/rc/rc_config.c
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 rc_config.c
  --- ossp-pkg/rc/rc_config.c	5 Jul 2002 14:10:24 -0000	1.22
  +++ ossp-pkg/rc/rc_config.c	29 Jul 2002 16:34:59 -0000	1.23
  @@ -252,6 +252,86 @@
           return(RC_THROW(RC_OK));        /* No, we should continue processing. */
   }
   
  +/************************************************
  +* configDefaults(void)                          *
  +* Write default values to empty config members  *
  +************************************************/
  +rc_return_t configDefaults(void)
  +{
  +    ex_t Except;
  +
  +    try { /* Test members for empty attributes */
  +        if (!configGetval(RC_EVL_VAL) && !configGetval(RC_EXC_VAL) \
  +            && !configGetval(RC_PRN_VAL))
  +            clioptSetval(RC_PRN_VAL, "1");
  +
  +/*        if (!configGetval(RC_USE_VAL))
  +        if (!configGetval(RC_HLP_VAL))
  +        if (!configGetval(RC_INF_VAL))
  +        if (!configGetval(RC_LBL_VAL))
  +        if (!configGetval(RC_SIL_VAL))
  +        if (!configGetval(RC_RAW_VAL))
  +        if (!configGetval(RC_VRB_VAL))*/
  +
  +/*
  +        if (!configGetval(RC_LOC_VAL)) {
  +            If exists '/etc/rc.d'
  +                clioptSetval(RC_LOC_VAL, "/etc/rc.d/rc.");
  +                FIXME: !This 'rc.' reading logic must still be implemented!
  +            Else
  +                RC_NOP;
  +        }
  +        if (!configGetval(RC_CNF_VAL)) {
  +            If exists '/etc/rcconf'
  +                clioptSetval(RC_CNF_VAL, "/etc/rcconf");
  +            Else
  +                RC_NOP;
  +        }
  +        if (!configGetval(RC_FNC_VAL)) {
  +            If exists '/etc/rc.func'
  +                clioptSetval(RC_FNC_VAL, "/etc/rc.func");
  +            Else
  +                RC_NOP;
  +        }
  +*/
  +
  +/*        if (!configGetval(RC_QRY_VAL))*/
  +
  +/*
  +        if (!configGetval(RC_TMP_VAL)) {
  +            If exists '/tmp'
  +                clioptSetval(RC_TMP_VAL, "/tmp");
  +            Else
  +                RC_NOP;
  +        }
  +*/
  +
  +/*        if (!configGetval(RC_OWN_VAL))
  +        if (!configGetval(RC_GRP_VAL))
  +        if (!configGetval(RC_MSK_VAL))
  +        if (!configGetval(RC_ASS_VAL))*/
  +
  +        if (!configGetval(RC_DEF_VAL))
  +            clioptSetval(RC_DEF_VAL, "^%(\\w+).*?\\n(.*?)^$");
  +
  +/*        if (!configGetval(RC_REF_VAL))
  +        if (!configGetval(RC_PRM_VAL))
  +        if (!configGetval(RC_TRM_VAL))*/
  +
  +        if (!configGetval(RC_NCF_VAL))
  +            clioptSetval(RC_NCF_VAL, "config");
  +
  +/*        if (!configGetval(RC_CMN_VAL))
  +        if (!configGetval(RC_DFL_VAL))
  +        if (!configGetval(RC_ERR_VAL))*/
  +    }
  +    catch(Except) {
  +        rethrow;
  +    }
  +
  +    return(RC_THROW(RC_OK));    /* Normal response */
  +}
  +
   /***************************************
   * configDelete(void)                   *
   * Destruct a configuration             *

From ossp-cvs-owner@ossp.org  Mon Jul 29 19:42:26 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 19557765EB; Mon, 29 Jul 2002 19:42:26 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_file.c l2_ut_param.c
Message-Id: <20020729174226.19557765EB@mail.ossp.org>
Date: Mon, 29 Jul 2002 19:42:26 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Jul-2002 19:42:26
  Branch: HEAD                             Handle: 2002072918422500

  Modified files:
    ossp-pkg/l2             l2_ch_file.c l2_ut_param.c

  Log:
    allow hexadecimal and octal integer values, too. (especially for file permissions)

  Summary:
    Revision    Changes     Path
    1.23        +5  -1      ossp-pkg/l2/l2_ch_file.c
    1.8         +7  -1      ossp-pkg/l2/l2_ut_param.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_file.c
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 l2_ch_file.c
  --- ossp-pkg/l2/l2_ch_file.c	13 Mar 2002 14:49:39 -0000	1.22
  +++ ossp-pkg/l2/l2_ch_file.c	29 Jul 2002 17:42:25 -0000	1.23
  @@ -86,6 +86,7 @@
   {
       l2_ch_file_t *cfg = (l2_ch_file_t *)ctx->vp;
       int mode;
  +    mode_t mask;
   
       /* make sure a path was set */
       if (cfg->path == NULL)
  @@ -97,7 +98,10 @@
           mode |= O_APPEND;
       else
           mode |= O_TRUNC;
  -    if ((cfg->fd = open(cfg->path, mode, cfg->perm)) == -1)
  +    mask = umask(0);
  +    cfg->fd = open(cfg->path, mode, cfg->perm);
  +    umask(mask);
  +    if (cfg->fd == -1)
           return L2_ERR_SYS;
   
       return L2_OK;
  Index: ossp-pkg/l2/l2_ut_param.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 l2_ut_param.c
  --- ossp-pkg/l2/l2_ut_param.c	2 Jan 2002 17:07:38 -0000	1.7
  +++ ossp-pkg/l2/l2_ut_param.c	29 Jul 2002 17:42:25 -0000	1.8
  @@ -126,7 +126,13 @@
           switch (pa[i].type) {
               case L2_TYPE_INT: {
                   /* integer parameter */
  -                long val = strtol(cpB, &cpE, 10);
  +                long val;
  +                if (strlen(cpB) > 2 && cpB[0] == '0' && cpB[1] == 'x')
  +                    val = strtol(cpB+2, &cpE, 16);
  +                else if (strlen(cpB) > 1 && cpB[0] == '0')
  +                    val = strtol(cpB+1, &cpE, 8);
  +                else
  +                    val = strtol(cpB, &cpE, 10);
                   if ((val == LONG_MIN || val == LONG_MAX) && errno == ERANGE) {
                       l2_env_errorinfo(env, L2_ERR_ARG, 
                                        "numerical parameter value out of range "

From ossp-cvs-owner@ossp.org  Mon Jul 29 19:43:44 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8F8E3765EB; Mon, 29 Jul 2002 19:43:44 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.pod fsl.sample.cfg
Message-Id: <20020729174344.8F8E3765EB@mail.ossp.org>
Date: Mon, 29 Jul 2002 19:43:44 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Jul-2002 19:43:44
  Branch: HEAD                             Handle: 2002072918434400

  Modified files:
    ossp-pkg/fsl            fsl.pod fsl.sample.cfg

  Log:
    octal integers are now possible

  Summary:
    Revision    Changes     Path
    1.14        +1  -9      ossp-pkg/fsl/fsl.pod
    1.3         +3  -3      ossp-pkg/fsl/fsl.sample.cfg
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.pod
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 fsl.pod
  --- ossp-pkg/fsl/fsl.pod	27 Jul 2002 18:13:32 -0000	1.13
  +++ ossp-pkg/fsl/fsl.pod	29 Jul 2002 17:43:44 -0000	1.14
  @@ -209,16 +209,8 @@
   
    o file   (STR path            m
              INT append          o [0=truncate|1=append] =1
  -           INT perm            o [decimal]             =420
  +           INT perm            o [octal]               =0644
              )
  -
  -Notice: due to a limitation of the current parser only decimal numbers
  -are accepted, so have fun doing octal to decimal conversion. Here're
  -some hints:
  -
  - rw-rw-rw- \0666 =438    rw-r--r-- \0644 =420
  - rw-rw-r-- \0664 =436    rw-r----- \0640 =416
  - rw-rw---- \0660 =432    rw------- \0600 =384
   
   =head2 Filtering Channel (filter)
   
  Index: ossp-pkg/fsl/fsl.sample.cfg
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 fsl.sample.cfg
  --- ossp-pkg/fsl/fsl.sample.cfg	25 Jul 2002 10:14:03 -0000	1.2
  +++ ossp-pkg/fsl/fsl.sample.cfg	29 Jul 2002 17:43:44 -0000	1.3
  @@ -4,16 +4,16 @@
   
   ident (.*)a(.*)/(.*)p q{
       debug: prefix(prefix="%b %d %H:%M:%S <%L> $1[%P]: ", timezone=local)
  -    -> file(path="sendmail.debug.log", append=0, perm=432)
  +    -> file(path="sendmail.debug.log", append=0, perm=0644)
   };
   
   ident mail/.* q{
       error: prefix(prefix="%b %d %H:%M:%S <%L> $1[%P]: ", timezone=local)
  -    -> file(path="mail.error.log", append=0, perm=432)
  +    -> file(path="mail.error.log", append=0, perm=0644)
   };
   
   ident news/.* q{
       warning: prefix(prefix="%b %d %H:%M:%S <%L> $1[%P]: ", timezone=local)
  -    -> file(path="news.warning.log", append=0, perm=432)
  +    -> file(path="news.warning.log", append=0, perm=0644)
   };
   

From ossp-cvs-owner@ossp.org  Mon Jul 29 19:44:06 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 793C6767DB; Mon, 29 Jul 2002 19:44:06 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl README VERSION
Message-Id: <20020729174406.793C6767DB@mail.ossp.org>
Date: Mon, 29 Jul 2002 19:44:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Jul-2002 19:44:06
  Branch: HEAD                             Handle: 2002072918440600

  Modified files:
    ossp-pkg/fsl            README VERSION

  Log:
    bump version for release

  Summary:
    Revision    Changes     Path
    1.12        +1  -1      ossp-pkg/fsl/README
    1.12        +1  -1      ossp-pkg/fsl/VERSION
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/README
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 README
  --- ossp-pkg/fsl/README	29 Jul 2002 15:12:36 -0000	1.11
  +++ ossp-pkg/fsl/README	29 Jul 2002 17:44:06 -0000	1.12
  @@ -5,7 +5,7 @@
     |_| |___/_|
                
     OSSP fsl - Faking/Flexible Syslog Library
  -  Version 0.1.10 (29-Jul-2002)
  +  Version 0.1.11 (29-Jul-2002)
   
     ABSTRACT
   
  Index: ossp-pkg/fsl/VERSION
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 VERSION
  --- ossp-pkg/fsl/VERSION	29 Jul 2002 15:12:36 -0000	1.11
  +++ ossp-pkg/fsl/VERSION	29 Jul 2002 17:44:06 -0000	1.12
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP fsl (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP fsl, Version 0.1.10 (29-Jul-2002)
  +  This is OSSP fsl, Version 0.1.11 (29-Jul-2002)
   

From ossp-cvs-owner@ossp.org  Tue Jul 30 09:10:55 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 67BB2765E7; Tue, 30 Jul 2002 09:10:55 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.pod
Message-Id: <20020730071055.67BB2765E7@mail.ossp.org>
Date: Tue, 30 Jul 2002 09:10:55 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   30-Jul-2002 09:10:55
  Branch: HEAD                             Handle: 2002073008105400

  Modified files:
    ossp-pkg/fsl            fsl.pod

  Log:
    be fussy, "not readable" is implemented being a error condition

  Summary:
    Revision    Changes     Path
    1.15        +2  -2      ossp-pkg/fsl/fsl.pod
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.pod
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 fsl.pod
  --- ossp-pkg/fsl/fsl.pod	29 Jul 2002 17:43:44 -0000	1.14
  +++ ossp-pkg/fsl/fsl.pod	30 Jul 2002 07:10:54 -0000	1.15
  @@ -57,8 +57,8 @@
   
   If an application calls openlog(3) it passes an identification string
   (I<ident>) and a logging facility (I<facility>) along. B<OSSP fsl>
  -tries to read the file "I<cfgdir>C</fsl.>I<ident>". If the file is not
  -readable, all files matching "I<cfgdir>C</fsl.*>" are read.
  +tries to read the file "I<cfgdir>C</fsl.>I<ident>". If the file does not
  +exist, all files matching "I<cfgdir>C</fsl.*>" are read.
   
   In both cases, all data that has been read in is parsed for
   configuration sections via B<OSSP cfg>. These are identified by "C<ident

From ossp-cvs-owner@ossp.org  Tue Jul 30 11:42:55 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1B98B765E7; Tue, 30 Jul 2002 11:42:55 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl TODO configure.ac
Message-Id: <20020730094255.1B98B765E7@mail.ossp.org>
Date: Tue, 30 Jul 2002 11:42:55 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   30-Jul-2002 11:42:54
  Branch: HEAD                             Handle: 2002073010425400

  Modified files:
    ossp-pkg/fsl            TODO configure.ac

  Log:
    take HAVE_VSYSLOG_USVALIST over from old fakesyslog

  Summary:
    Revision    Changes     Path
    1.4         +0  -1      ossp-pkg/fsl/TODO
    1.9         +15 -0      ossp-pkg/fsl/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/TODO
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 TODO
  --- ossp-pkg/fsl/TODO	29 Jul 2002 14:42:05 -0000	1.3
  +++ ossp-pkg/fsl/TODO	30 Jul 2002 09:42:54 -0000	1.4
  @@ -1,5 +1,4 @@
   - is readfileorallfiles() really reasonable?
  -- what about HAVE_VSYSLOG_USVALIST
   - allow syslog() without previous openlog()?!
   - cfg_destroy fixing and use it
   - runtime version check for sub libraries
  Index: ossp-pkg/fsl/configure.ac
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 configure.ac
  --- ossp-pkg/fsl/configure.ac	27 Jul 2002 18:13:51 -0000	1.8
  +++ ossp-pkg/fsl/configure.ac	30 Jul 2002 09:42:54 -0000	1.9
  @@ -91,6 +91,21 @@
   AC_SUBST(LIB_DEPS)
   AC_CONFIG_SUBDIRS([$SUBDIR_L2 $SUBDIR_CFG $SUBDIR_PCRE])
   
  +AC_MSG_CHECKING(for platform)
  +PLATFORM=`sh ./config.guess`
  +if test ".$PLATFORM" != .; then
  +    PLATFORM=`sh ./config.sub $PLATFORM`
  +fi
  +AC_MSG_RESULT([$PLATFORM])
  +case $PLATFORM in
  +    *-*-solaris2.[[6-9]]* )
  +        AC_DEFINE(HAVE_VSYSLOG_USVALIST, 1, [vsyslog(3) uses __va_list])
  +        ;;
  +    *-*-osf* )
  +        CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED"
  +        ;;
  +esac
  +
   AC_MSG_CHECKING(for configuration directory)
   AC_ARG_WITH(cfgdir,dnl
   [  --with-cfgdir=PATH      set configuration directory (default=PREFIX/etc/fsl)],

From ossp-cvs-owner@ossp.org  Tue Jul 30 12:08:09 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D4C53769B9; Tue, 30 Jul 2002 12:08:08 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.c
Message-Id: <20020730100808.D4C53769B9@mail.ossp.org>
Date: Tue, 30 Jul 2002 12:08:08 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   30-Jul-2002 12:08:08
  Branch: HEAD                             Handle: 2002073011080800

  Modified files:
    ossp-pkg/fsl            fsl.c

  Log:
    fprintf to stdout only if ERROR or worse

  Summary:
    Revision    Changes     Path
    1.38        +7  -2      ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.37 -r1.38 fsl.c
  --- ossp-pkg/fsl/fsl.c	29 Jul 2002 15:08:21 -0000	1.37
  +++ ossp-pkg/fsl/fsl.c	30 Jul 2002 10:08:08 -0000	1.38
  @@ -197,12 +197,17 @@
   static void fsldebug(l2_level_t level, const char *message, ...)
   {
       va_list ap;
  +    char cp[8];
   
       va_start(ap, message);
       if (ctx.l2_fslnch != NULL)
           l2_channel_vlog(ctx.l2_fslnch, level, message, ap);
       else
  -        vfprintf(stderr, message, ap);
  +        if (level & L2_LEVEL_UPTO(L2_LEVEL_ERROR)) {
  +            fprintf( stderr, "%s: ", l2_util_l2s(cp, sizeof(cp), '\0', level) == L2_OK ? cp[0]&=0xDF, cp : "Log");
  +            vfprintf(stderr, message, ap);
  +            fprintf( stderr, "\n");
  +    }
       va_end(ap);
       return;
   }
  @@ -746,7 +751,7 @@
   
       /* read configuration file(s) into buffer */
       if ((rv = readfileorallfiles(&buf, ident)) != FSL_OK) {
  -        fsldebug(L2_LEVEL_ERROR, "openlog: readfileorallfiles(buf, \"%s\") returned %d, system error: %s(%d)", ident, rv, strerror(errno), errno); CU(1); }
  +        fsldebug(L2_LEVEL_ERROR, "openlog: readfileorallfiles() for ident \"%s\" failed. Hint: last system error was \"%s\"(%d)", ident, strerror(errno), errno); CU(1); }
   
       /* import configuration buffer into OSSP cfg node tree */
       if ((cfgrv = cfg_create(&cfg)) != CFG_OK) {

From ossp-cvs-owner@ossp.org  Tue Jul 30 13:37:20 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 29339769D4; Tue, 30 Jul 2002 13:37:20 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.c
Message-Id: <20020730113720.29339769D4@mail.ossp.org>
Date: Tue, 30 Jul 2002 13:37:20 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   30-Jul-2002 13:37:20
  Branch: HEAD                             Handle: 2002073012371900

  Modified files:
    ossp-pkg/fsl            fsl.c

  Log:
    log errors between l2_channel_create() and l2_channel_open()

  Summary:
    Revision    Changes     Path
    1.39        +2  -3      ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.38 -r1.39 fsl.c
  --- ossp-pkg/fsl/fsl.c	30 Jul 2002 10:08:08 -0000	1.38
  +++ ossp-pkg/fsl/fsl.c	30 Jul 2002 11:37:19 -0000	1.39
  @@ -200,9 +200,8 @@
       char cp[8];
   
       va_start(ap, message);
  -    if (ctx.l2_fslnch != NULL)
  -        l2_channel_vlog(ctx.l2_fslnch, level, message, ap);
  -    else
  +    /* note that a L2_ERR_USE is only returned by l2_channel_vlog() if the channel is not yet open */
  +    if (ctx.l2_fslnch == NULL || (l2_channel_vlog(ctx.l2_fslnch, level, message, ap) == L2_ERR_USE))
           if (level & L2_LEVEL_UPTO(L2_LEVEL_ERROR)) {
               fprintf( stderr, "%s: ", l2_util_l2s(cp, sizeof(cp), '\0', level) == L2_OK ? cp[0]&=0xDF, cp : "Log");
               vfprintf(stderr, message, ap);

From ossp-cvs-owner@ossp.org  Tue Jul 30 13:50:01 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1EE35769DF; Tue, 30 Jul 2002 13:50:01 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl TODO fsl.c fsl.pod
Message-Id: <20020730115001.1EE35769DF@mail.ossp.org>
Date: Tue, 30 Jul 2002 13:50:01 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   30-Jul-2002 13:50:01
  Branch: HEAD                             Handle: 2002073012500000

  Modified files:
    ossp-pkg/fsl            TODO fsl.c fsl.pod

  Log:
    reduce readfileorallfiles() to readallfiles() only

  Summary:
    Revision    Changes     Path
    1.5         +0  -1      ossp-pkg/fsl/TODO
    1.40        +2  -47     ossp-pkg/fsl/fsl.c
    1.16        +6  -10     ossp-pkg/fsl/fsl.pod
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/TODO
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 TODO
  --- ossp-pkg/fsl/TODO	30 Jul 2002 09:42:54 -0000	1.4
  +++ ossp-pkg/fsl/TODO	30 Jul 2002 11:50:00 -0000	1.5
  @@ -1,4 +1,3 @@
  -- is readfileorallfiles() really reasonable?
   - allow syslog() without previous openlog()?!
   - cfg_destroy fixing and use it
   - runtime version check for sub libraries
  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.39 -r1.40 fsl.c
  --- ossp-pkg/fsl/fsl.c	30 Jul 2002 11:37:19 -0000	1.39
  +++ ossp-pkg/fsl/fsl.c	30 Jul 2002 11:50:00 -0000	1.40
  @@ -260,32 +260,6 @@
       return rc;
   }
   
  -/* read a single file "fsl.xxx" into buffer */
  -static fsl_rc_t readfile(buf_t *buffer, const char *ident)
  -{
  -    fsl_rc_t rc;
  -    char *filename = NULL;
  -
  -    if (ident == NULL || buffer == NULL)
  -        CU(FSL_ERR_ARG);
  -    fsldebug(L2_LEVEL_TRACE, "readfile() ident=\"%s\")", ident);
  -
  -    if ((filename = (char *)malloc(strlen(FSL_CFGDIR) + 1 + 
  -                                   strlen(FSL_PREFIX) + strlen(ident) + 1)) == NULL)
  -        CU(FSL_ERR_MEM);
  -    filename[0] = '\0';
  -    strcat(filename, FSL_CFGDIR);
  -    strcat(filename, "/");
  -    strcat(filename, FSL_PREFIX);
  -    strcat(filename, ident);
  -
  -    CU(appendfiletobuffer(buffer, filename));
  -CUS:
  -    if (filename != NULL)
  -        free(filename);
  -    return rc;
  -}
  -
   /* read all possible files "fsl.*" into buffer */
   static fsl_rc_t readallfiles(buf_t *buffer)
   {
  @@ -328,25 +302,6 @@
       return rc;
   }
   
  -/* read a single or all possible files */
  -static fsl_rc_t readfileorallfiles(buf_t *buffer, const char *ident)
  -{
  -    fsl_rc_t rv;
  -
  -    if (ident == NULL)
  -        return FSL_ERR_ARG;
  -    fsldebug(L2_LEVEL_TRACE, "readfileorallfiles() ident=\"%s\")", ident);
  -
  -    if ((rv = readfile(buffer, ident)) == FSL_OK)
  -        return FSL_OK;
  -    if (rv != FSL_ERR_SYS || errno != ENOENT)
  -        return rv;
  -    fsldebug(L2_LEVEL_TRACE, "readfileorallfiles: specific file does not exist, trying all files from directory");
  -    if ((rv = readallfiles(buffer)) != FSL_OK)
  -        return rv;
  -    return FSL_OK;
  -}
  -
   /* OSSP cfg node tree traversal function (recursive) */
   static void traverse(cfg_t *cfg, cfg_node_t *cfgnode)
   {
  @@ -749,8 +704,8 @@
       strcat(cpISF, cpFacility);
   
       /* read configuration file(s) into buffer */
  -    if ((rv = readfileorallfiles(&buf, ident)) != FSL_OK) {
  -        fsldebug(L2_LEVEL_ERROR, "openlog: readfileorallfiles() for ident \"%s\" failed. Hint: last system error was \"%s\"(%d)", ident, strerror(errno), errno); CU(1); }
  +    if ((rv = readallfiles(&buf)) != FSL_OK) {
  +        fsldebug(L2_LEVEL_ERROR, "openlog: readallfiles() failed. Hint: last system error was \"%s\"(%d)", strerror(errno), errno); CU(1); }
   
       /* import configuration buffer into OSSP cfg node tree */
       if ((cfgrv = cfg_create(&cfg)) != CFG_OK) {
  Index: ossp-pkg/fsl/fsl.pod
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 fsl.pod
  --- ossp-pkg/fsl/fsl.pod	30 Jul 2002 07:10:54 -0000	1.15
  +++ ossp-pkg/fsl/fsl.pod	30 Jul 2002 11:50:00 -0000	1.16
  @@ -56,16 +56,12 @@
   =head1 OPERATION
   
   If an application calls openlog(3) it passes an identification string
  -(I<ident>) and a logging facility (I<facility>) along. B<OSSP fsl>
  -tries to read the file "I<cfgdir>C</fsl.>I<ident>". If the file does not
  -exist, all files matching "I<cfgdir>C</fsl.*>" are read.
  -
  -In both cases, all data that has been read in is parsed for
  -configuration sections via B<OSSP cfg>. These are identified by "C<ident
  ->I<match>C< >I<l2-spec>C<;>" directives. The I<match> argument is an B<OSSP
  -pcre> (Perl-compatible) regular expression that is matched against a
  -string concatenated from "I<ident>/I<facility>" given to the openlog(3)
  -call.
  +(I<ident>) and a logging facility (I<facility>) along. B<OSSP fsl> reads all
  +configuration files matching "I<cfgdir>C</fsl.*>" and parses them using
  +B<OSSP cfg>. Sections are identified by "C<ident>I<match>C</>I<l2-spec>C<;>"
  +directives.  The I<match> argument is an B<OSSP pcre> (Perl-compatible)
  +regular expression that is matched against a string concatenated from
  +"I<ident>/I<facility>" given to the openlog(3) call.
   
   The I<l2-spec> (single) argument is an B<OSSP l2> channel tree
   specification, usually quoted with B<OSSP cfg> flexible quotes (to make

From ossp-cvs-owner@ossp.org  Tue Jul 30 14:03:37 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0106F769A4; Tue, 30 Jul 2002 14:03:36 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl TODO fsl.c
Message-Id: <20020730120336.0106F769A4@mail.ossp.org>
Date: Tue, 30 Jul 2002 14:03:36 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   30-Jul-2002 14:03:36
  Branch: HEAD                             Handle: 2002073013033600

  Modified files:
    ossp-pkg/fsl            TODO fsl.c

  Log:
    allow syslog() without previous openlog()

  Summary:
    Revision    Changes     Path
    1.6         +0  -1      ossp-pkg/fsl/TODO
    1.41        +9  -0      ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/TODO
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 TODO
  --- ossp-pkg/fsl/TODO	30 Jul 2002 11:50:00 -0000	1.5
  +++ ossp-pkg/fsl/TODO	30 Jul 2002 12:03:36 -0000	1.6
  @@ -1,3 +1,2 @@
  -- allow syslog() without previous openlog()?!
   - cfg_destroy fixing and use it
   - runtime version check for sub libraries
  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.40 -r1.41 fsl.c
  --- ossp-pkg/fsl/fsl.c	30 Jul 2002 11:50:00 -0000	1.40
  +++ ossp-pkg/fsl/fsl.c	30 Jul 2002 12:03:36 -0000	1.41
  @@ -182,6 +182,7 @@
       int           maskpri;
       int           logopt;
       int           delayopen;
  +    int           openlog;
   } ctx = { 
       NULL,
       NULL,
  @@ -190,6 +191,7 @@
       NULL,
       LOG_UPTO(LOG_DEBUG),
       0,
  +    FALSE,
       FALSE
   };
   
  @@ -620,6 +622,7 @@
   
       /* properly handle repeated execution */
       closelog();
  +    ctx.openlog = TRUE;
   
       /* create OSSP l2 environment for fsl itself (internal logging) */
       if ((argl2spec = getenv("FSL_DEBUG")) == NULL)
  @@ -646,6 +649,7 @@
       }
   
       /* tracing */
  +    
       fsldebug(L2_LEVEL_TRACE, "openlog() ident=\"%s\", logopt=0x%.8lx, facility=0x%.8lx)", ident, logopt, facility);
   
       /* remember logopt and handle unsupported values */
  @@ -777,6 +781,7 @@
       ctx.maskpri = LOG_UPTO(LOG_DEBUG);
       ctx.logopt = 0;
       ctx.delayopen = FALSE;
  +    ctx.openlog = FALSE;
       return;
   }
   
  @@ -816,6 +821,10 @@
       l2_result_t l2rv;
       char *cp;
       
  +    /* check for previous omitted attempt of initialization */
  +    if (ctx.l2_nch == NULL && !ctx.openlog)
  +        openlog("fsl", 0, LOG_SYSLOG);
  +
       /* check for previous proper initialization */
       if (ctx.l2_nch == NULL)
           return;

From ossp-cvs-owner@ossp.org  Tue Jul 30 14:40:45 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DBCD1769A4; Tue, 30 Jul 2002 14:40:44 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl README VERSION
Message-Id: <20020730124044.DBCD1769A4@mail.ossp.org>
Date: Tue, 30 Jul 2002 14:40:44 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   30-Jul-2002 14:40:44
  Branch: HEAD                             Handle: 2002073013404400

  Modified files:
    ossp-pkg/fsl            README VERSION

  Log:
    bump version for release

  Summary:
    Revision    Changes     Path
    1.13        +1  -1      ossp-pkg/fsl/README
    1.13        +1  -1      ossp-pkg/fsl/VERSION
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/README
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 README
  --- ossp-pkg/fsl/README	29 Jul 2002 17:44:06 -0000	1.12
  +++ ossp-pkg/fsl/README	30 Jul 2002 12:40:44 -0000	1.13
  @@ -5,7 +5,7 @@
     |_| |___/_|
                
     OSSP fsl - Faking/Flexible Syslog Library
  -  Version 0.1.11 (29-Jul-2002)
  +  Version 0.1.12 (30-Jul-2002)
   
     ABSTRACT
   
  Index: ossp-pkg/fsl/VERSION
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 VERSION
  --- ossp-pkg/fsl/VERSION	29 Jul 2002 17:44:06 -0000	1.12
  +++ ossp-pkg/fsl/VERSION	30 Jul 2002 12:40:44 -0000	1.13
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP fsl (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP fsl, Version 0.1.11 (29-Jul-2002)
  +  This is OSSP fsl, Version 0.1.12 (30-Jul-2002)
   

From ossp-cvs-owner@ossp.org  Tue Jul 30 18:32:41 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6F2FA767D1; Tue, 30 Jul 2002 18:32:41 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc_config.c
Message-Id: <20020730163241.6F2FA767D1@mail.ossp.org>
Date: Tue, 30 Jul 2002 18:32:41 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   30-Jul-2002 18:32:41
  Branch: HEAD                             Handle: 2002073017324000

  Modified files:
    ossp-pkg/rc             rc_config.c

  Log:
    Begin coding inspection of options for combination usage errors.

  Summary:
    Revision    Changes     Path
    1.24        +33 -0      ossp-pkg/rc/rc_config.c
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc_config.c
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 rc_config.c
  --- ossp-pkg/rc/rc_config.c	29 Jul 2002 16:34:59 -0000	1.23
  +++ ossp-pkg/rc/rc_config.c	30 Jul 2002 16:32:40 -0000	1.24
  @@ -218,11 +218,44 @@
   /************************************************
   * configVerify(void)                            *
   * Verify config options help, usage, or version *
  +* and ensure that no uncompatible option        *
  +* combinations were given                       *
   ************************************************/
   rc_return_t configVerify(void)
   {
       ex_t Except;
       short bStop = FALSE;
  +
  +
  +
  +    try { /* Checks for legal option combination */
  +        /* I'm too braindead to remember digital logic theory from the */
  +        /* Uni, so I'll hack my own XOR gates with plain math instead  */
  +        /* Exec XOR Eval XOR Print */
  +        if (!configGetval(RC_EVL_VAL) \
  +            + !configGetval(RC_EXC_VAL) \
  +            + !configGetval(RC_PRN_VAL) < 2) { /* Warning! Magic number */
  +            fprintf(stderr, RC_EEP_TEXT);
  +            bStop = TRUE;
  +        }
  +        /* Silent XOR OutputOptions */
  +        if (configGetval(RC_SIL_VAL) && (configGetval(RC_DBG_VAL) \
  +            || configGetval(RC_VER_VAL) || configGetval(RC_EVL_VAL) \
  +            || configGetval(RC_HLP_VAL) || configGetval(RC_INF_VAL) \
  +            || configGetval(RC_LBL_VAL) || configGetval(RC_PRN_VAL) \
  +            || configGetval(RC_RAW_VAL) || configGetval(RC_VRB_VAL) \
  +            || configGetval(RC_QRY_VAL))) {
  +            fprintf(stderr, RC_SLO_TEXT);
  +            bStop = TRUE;
  +        }
  +    }
  +    catch(Except) {
  +        rethrow;
  +    }
  +    if (bStop) {                        /* Did user blow an option rule? */
  +        clioptPrintusage();             /* Yes, so announce it as SUE.   */
  +        return(RC_THROW(RC_ERR_TRM));
  +    }
   
       try { /* Basic checks of version, usage, and help options */
           if (configGetval(RC_USE_VAL)) {

From ossp-cvs-owner@ossp.org  Tue Jul 30 18:33:51 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 60F0C767D1; Tue, 30 Jul 2002 18:33:51 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc_const.h
Message-Id: <20020730163351.60F0C767D1@mail.ossp.org>
Date: Tue, 30 Jul 2002 18:33:51 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   30-Jul-2002 18:33:51
  Branch: HEAD                             Handle: 2002073017335100

  Modified files:
    ossp-pkg/rc             rc_const.h

  Log:
    Begin coding inspection of options for combination usage errors.

  Summary:
    Revision    Changes     Path
    1.10        +2  -0      ossp-pkg/rc/rc_const.h
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc_const.h
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 rc_const.h
  --- ossp-pkg/rc/rc_const.h	29 Jul 2002 15:07:01 -0000	1.9
  +++ ossp-pkg/rc/rc_const.h	30 Jul 2002 16:33:51 -0000	1.10
  @@ -33,6 +33,8 @@
   /* Generic text, should include newline termination */
   #define RC_NON_TEXT "No options exist.\n"
   #define RC_LST_TEXT "Please enter just one rcfile and at least one section.\n"
  +#define RC_EEP_TEXT "The exec, eval, and print options may not be combined.\n"
  +#define RC_SLO_TEXT "The silent option may not be combined with output options.\n"
   #define RC_SUM_TEXT "Option argument summary.\n"
   
   /* Option descriptions used with popt, should not include termination */

From ossp-cvs-owner@ossp.org  Tue Jul 30 18:36:42 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A6560767D1; Tue, 30 Jul 2002 18:36:42 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc 00TODO rc.h rc_private.h rc_proc.c rc_script.c...
Message-Id: <20020730163642.A6560767D1@mail.ossp.org>
Date: Tue, 30 Jul 2002 18:36:42 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   30-Jul-2002 18:36:42
  Branch: HEAD                             Handle: 2002073017364101

  Added files:
    ossp-pkg/rc/rc_test     rc.dhcpd
  Modified files:
    ossp-pkg/rc             00TODO rc.h rc_private.h rc_proc.c rc_script.c
                            rc_test.sh

  Log:
    Implemented command execution mode, and now OSSP rc is dangerous to use
    because it will actually execute code. Test suite is adjusted accordingly.

  Summary:
    Revision    Changes     Path
    1.32        +1  -0      ossp-pkg/rc/00TODO
    1.37        +1  -0      ossp-pkg/rc/rc.h
    1.19        +1  -0      ossp-pkg/rc/rc_private.h
    1.14        +23 -7      ossp-pkg/rc/rc_proc.c
    1.8         +14 -0      ossp-pkg/rc/rc_script.c
    1.20        +7  -4      ossp-pkg/rc/rc_test.sh
    1.1         +25 -0      ossp-pkg/rc/rc_test/rc.dhcpd
  ____________________________________________________________________________

  Index: ossp-pkg/rc/00TODO
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 00TODO
  --- ossp-pkg/rc/00TODO	29 Jul 2002 16:33:48 -0000	1.31
  +++ ossp-pkg/rc/00TODO	30 Jul 2002 16:36:41 -0000	1.32
  @@ -6,6 +6,7 @@
     What when multiple command interpreters and one --print or --eval given?
     File rc.func totally undocumented, but logic should be clear.
     Check combo options for correctness, like config contains exc, evl, prn.
  +  Consider forking at rc_proc.c:procRun/exec so rc keeps in control afterwards.
     Control flow
       Explain logical ordering of multiple section spanning multiple rcfiles.
       Give example semantics of a common scenario.
  Index: ossp-pkg/rc/rc.h
  ============================================================
  $ cvs diff -u -r1.36 -r1.37 rc.h
  --- ossp-pkg/rc/rc.h	29 Jul 2002 16:34:58 -0000	1.36
  +++ ossp-pkg/rc/rc.h	30 Jul 2002 16:36:41 -0000	1.37
  @@ -114,6 +114,7 @@
   rc_return_t scriptAppend(rc_script_t *, char *, size_t);
   char *scriptSection(rc_script_t *, const char *);
   rc_return_t scriptDump(rc_script_t *);
  +const char *scriptTostring(rc_script_t *);
   rc_return_t scriptDelete(rc_script_t *);
   
   /* Processor function prototypes */
  Index: ossp-pkg/rc/rc_private.h
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 rc_private.h
  --- ossp-pkg/rc/rc_private.h	4 Jul 2002 16:49:58 -0000	1.18
  +++ ossp-pkg/rc/rc_private.h	30 Jul 2002 16:36:41 -0000	1.19
  @@ -51,6 +51,7 @@
   
   #define RC_SEC_SUB         1
   #define RC_GOOD_MEASURE    8
  +#define RC_EXEC_MAXARGS    8
   #define RC_READ_BUFSIZE 1024
   #define RC_STR_ID  "OSSP rc"                        /* APPID for OSSP rc */
   #define RC_UID_ID 0xf8a1845c55e6449481176f6e9cea34b /* UUID for OSSP rc  */
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	10 Jul 2002 19:03:58 -0000	1.13
  +++ ossp-pkg/rc/rc_proc.c	30 Jul 2002 16:36:41 -0000	1.14
  @@ -189,17 +189,33 @@
   ************************************************/
   rc_return_t procRun(rc_proc_t *pRc)
   {
  -    /* This will evaluate, execute, or print the script to stdout */
  -    if (configGetval(RC_EVL_VAL))       /* Evaluate */
  +    char *pszVec[RC_EXEC_MAXARGS];
  +
  +    /****************************************************/
  +    /* This will execute, evaluate, or print the script */
  +    /* Exec  - Fork and execute each command            */
  +    /* Eval  - Print machine evaluatable format         */
  +    /* Print - Print human readable format              */
  +    /****************************************************/
  +    if (configGetval(RC_EVL_VAL))        /* Evaluate */
           fprintf(stderr, "Error: Evaluate is not implemented yet.\n"); /* FIX */
  -    else if (configGetval(RC_EXC_VAL))  /* Execute  */
  -        fprintf(stderr, "Error: Execute is not implemented yet.\n");  /* FIX */
  -    else if (configGetval(RC_PRN_VAL))  /* Print    */
  +
  +    else if (configGetval(RC_EXC_VAL)) { /* Execute  */
  +            pszVec[0] = "/bin/sh";
  +            pszVec[1] = "-c";
  +            pszVec[2] = (char *)scriptTostring(pRc->m_pScript);
  +            pszVec[3] = NULL;   /* Add a NULL to mark the end of the chain */
  +        if (execvp(*pszVec, pszVec) == -1)  /* launch                   */
  +            TRACE("Bad, execvp in child returned -1");
  +    }
  +
  +    else if (configGetval(RC_PRN_VAL))   /* Print    */
           scriptDump(pRc->m_pScript);
  -    else                                /* Something is wrong here, there is */
  +
  +    else                                 /* Something is wrong here */
           fprintf(stderr, "Error: Placeholder, until problem with ex_ is fixed.\n");
   /* FIXME!!: Ralf, following segfaults in ex */
  -/*        return(RC_THROW(RC_ERR_INT));*/   /* probably no default in the config */
  +/*        return(RC_THROW(RC_ERR_INT));*/
   
       return(RC_THROW(RC_OK));
   }
  Index: ossp-pkg/rc/rc_script.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 rc_script.c
  --- ossp-pkg/rc/rc_script.c	10 Jul 2002 19:03:58 -0000	1.7
  +++ ossp-pkg/rc/rc_script.c	30 Jul 2002 16:36:41 -0000	1.8
  @@ -180,6 +180,20 @@
   }
   
   /************************************************
  +* scriptTostring(rc_script_t *)                 *
  +* Return the private script data as a string    *
  +************************************************/
  +const char *scriptTostring(rc_script_t *pScript)
  +{
  +    /* Don't remove this! It encapsulates the script object, */
  +    /*                    which might not be a simple string */
  +    if (pScript)
  +        return(*pScript);
  +    else
  +        return(NULL);
  +}
  +
  +/************************************************
   * scriptDump(rc_script_t *)                    *
   * Print a script to standard out                *
   ************************************************/
  Index: ossp-pkg/rc/rc_test.sh
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 rc_test.sh
  --- ossp-pkg/rc/rc_test.sh	29 Jul 2002 16:34:21 -0000	1.19
  +++ ossp-pkg/rc/rc_test.sh	30 Jul 2002 16:36:41 -0000	1.20
  @@ -90,8 +90,8 @@
   echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" --tmp /tmp --silent --debug --eval all config start"
   ./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "^%(\w+).*?\n(.*?)^$" --tmp /tmp --silent --debug --eval all config start
   
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" --tmp /tmp --silent --debug --exec all config start"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "^%(\w+).*?\n(.*?)^$" --tmp /tmp --silent --debug --exec all config start
  +#echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" --tmp /tmp --silent --debug --exec all config start"
  +#./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "^%(\w+).*?\n(.*?)^$" --tmp /tmp --silent --debug --exec all config start
   
   echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --print --debug pam info"
   ./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --print --debug pam info
  @@ -111,8 +111,11 @@
   echo; echo "./rc --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef \"^<(.+?)\s*.*?>\n*(.*?)^<\/\1>\" pam info"
   ./rc --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef "^<(.+?)\s*.*?>\n*(.*?)^<\/\1>" pam info
   
  -echo; echo "./rc --func ./rc_test/rcfuncs -L ./rc_test/ ntp stop"
  -./rc --func ./rc_test/rcfuncs -L ./rc_test/ ntp stop
  +echo; echo "./rc --func ./rc_test/rcfuncs -L ./rc_test/ dhcpd stop"
  +./rc --func ./rc_test/rcfuncs -L ./rc_test/ dhcpd stop
  +
  +echo; echo "./rc --exec --func ./rc_test/rcfuncs -L ./rc_test/ dhcpd gotest"
  +./rc --exec --func ./rc_test/rcfuncs -L ./rc_test/ dhcpd gotest
   
   # Next milestone
   #RequireOwner
  Index: ossp-pkg/rc/rc_test/rc.dhcpd
  ============================================================
  $ cvs update -p -r1.1 rc.dhcpd
  #! /bin/sh
  
  echo "Run commands DHCPD starting"
  
  %config
      dhcpd_enable="yes"
  
  %start -p 200 -u root
      opServiceEnabled dhcpd || exit 0
      /sw/sbin/dhcpd
  
  %gotest
      ping -a -c 4 dt1.dev.de.cw.net
      curl -s ftp://ftp.openpkg.org/current/SRC/ | grep openssl
      date
      echo $0
  #    cat $0
  
  %stop -p 200 -u root
      opServiceEnabled dhcpd || exit 0
      kill -TERM `cat /sw/var/dhcpd/dhcpd.pid`
  
  echo "Run commands DHCPD finishing"
  echo
  

From ossp-cvs-owner@ossp.org  Tue Jul 30 20:37:29 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E5A5676523; Tue, 30 Jul 2002 20:37:28 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new news.txt ossp-web/pkg/lib/fsl index.wml ossp-...
Message-Id: <20020730183728.E5A5676523@mail.ossp.org>
Date: Tue, 30 Jul 2002 20:37:28 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   30-Jul-2002 20:37:28
  Branch: HEAD                             Handle: 2002073019372402

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/fsl    index.wml

  Log:
    release OSSP fsl 0.1.12

  Summary:
    Revision    Changes     Path
    1.16        +1  -0      ossp-web/new/news.txt
    1.4         +3  -3      ossp-web/pkg/lib/fsl/index.wml
    1.20        +1  -1      ossp-web/pkg/lib/index.wml
  ____________________________________________________________________________

  Index: ossp-web/new/news.txt
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 news.txt
  --- ossp-web/new/news.txt	28 Jul 2002 08:11:00 -0000	1.15
  +++ ossp-web/new/news.txt	30 Jul 2002 18:37:24 -0000	1.16
  @@ -1,3 +1,4 @@
  +30-Jul-2002: Released L<OSSP fsl> 0.1.12
   28-Jul-2002: Released L<OSSP mm> 1.2.1
   26-Jul-2002: Released L<OSSP mm> 1.2.0
   25-Jul-2002: Released L<OSSP fsl> 0.1.5
  Index: ossp-web/pkg/lib/fsl/index.wml
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 index.wml
  --- ossp-web/pkg/lib/fsl/index.wml	26 Jul 2002 09:25:55 -0000	1.3
  +++ ossp-web/pkg/lib/fsl/index.wml	30 Jul 2002 18:37:26 -0000	1.4
  @@ -35,8 +35,8 @@
   
   <pkg_status
       stable="none"    stable_date="none"
  -    unstable="0.1.8" unstable_date="25-Jul-2002"
  -	done=95>
  +    unstable="0.1.12" unstable_date="30-Jul-2002"
  +	done=100>
   
   <h2>Source</h2>
   
  @@ -45,5 +45,5 @@
       url=$(FTP_ROOT_URL)/pkg/lib/fsl/
       directory=$(FTP_ROOT_DIR)/pkg/lib/fsl/
       files="fsl-*.tar.gz" 
  -	stable="none" unstable="fsl-0.1.8.tar.gz">
  +	stable="none" unstable="fsl-0.1.12.tar.gz">
   	
  Index: ossp-web/pkg/lib/index.wml
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 index.wml
  --- ossp-web/pkg/lib/index.wml	28 Jul 2002 08:11:01 -0000	1.19
  +++ ossp-web/pkg/lib/index.wml	30 Jul 2002 18:37:24 -0000	1.20
  @@ -82,6 +82,6 @@
   			done=15 stable=none unstable=none>
     <pkg_item name="fsl" longname="OSSP fsl" type="lib"
               desc="Faked/Flexible Syslog"
  -			done=95 stable=none unstable=0.1.5>
  +			done=100 stable=none unstable=0.1.12>
   </pkg_list>
   

From ossp-cvs-owner@ossp.org  Tue Jul 30 20:50:36 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8DB0C767D1; Tue, 30 Jul 2002 20:50:36 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl README fsl.pod
Message-Id: <20020730185036.8DB0C767D1@mail.ossp.org>
Date: Tue, 30 Jul 2002 20:50:36 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Jul-2002 20:50:36
  Branch: HEAD                             Handle: 2002073019503600

  Modified files:
    ossp-pkg/fsl            README fsl.pod

  Log:
    cleanup

  Summary:
    Revision    Changes     Path
    1.14        +8  -6      ossp-pkg/fsl/README
    1.17        +3  -1      ossp-pkg/fsl/fsl.pod
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/README
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 README
  --- ossp-pkg/fsl/README	30 Jul 2002 12:40:44 -0000	1.13
  +++ ossp-pkg/fsl/README	30 Jul 2002 18:50:36 -0000	1.14
  @@ -9,12 +9,14 @@
   
     ABSTRACT
   
  -  OSSP fsl offers the syslog(3) API otherwise provided by the Standard
  -  C Library (libc). Instead of writing to the syslogd(8) process, it
  -  uses the powerful OSSP l2 logging capabilities. It is a drop-in
  -  link-time replacement which enables any syslog(3) consumer to take
  -  advantage of OSSP l2 by just linking this library in before libc.
  -  The source code of the program remains unchanged.
  +  OSSP fsl offers the syslog(3) API otherwise provided by the Standard C
  +  Library (libc). Instead of writing to the syslogd(8) process, it uses
  +  the powerful OSSP l2 logging capabilities. It is a drop-in link-time
  +  replacement which enables any syslog(3) consumer to take advantage of
  +  OSSP l2 by just linking this library in before libc. The program is
  +  intended to apply OSSP l2 functionality to existing syslog(3) based
  +  third-party programs without the requirement to change the source code
  +  of the program.
   
     COPYRIGHT AND LICENSE
   
  Index: ossp-pkg/fsl/fsl.pod
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 fsl.pod
  --- ossp-pkg/fsl/fsl.pod	30 Jul 2002 11:50:00 -0000	1.16
  +++ ossp-pkg/fsl/fsl.pod	30 Jul 2002 18:50:36 -0000	1.17
  @@ -51,7 +51,9 @@
   uses the powerful B<OSSP l2> logging capabilities. It is a drop-in
   link-time replacement which enables any syslog(3) consumer to take
   advantage of B<OSSP l2> by just linking this library in before F<libc>.
  -The source code of the program remains unchanged.
  +The program is intended to apply B<OSSP l2> functionality to existing
  +syslog(3) based third-party programs without the requirement to change
  +the source code of the program.
   
   =head1 OPERATION
   

From ossp-cvs-owner@ossp.org  Tue Jul 30 20:51:51 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A6B2B76967; Tue, 30 Jul 2002 20:51:51 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl ChangeLog
Message-Id: <20020730185151.A6B2B76967@mail.ossp.org>
Date: Tue, 30 Jul 2002 20:51:51 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Jul-2002 20:51:51
  Branch: HEAD                             Handle: 2002073019515100

  Added files:
    ossp-pkg/fsl            ChangeLog

  Log:
    start a ChangeLog file

  Summary:
    Revision    Changes     Path
    1.1         +4  -0      ossp-pkg/fsl/ChangeLog
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/ChangeLog
  ============================================================
  $ cvs update -p -r1.1 ChangeLog
  
    ChangeLog
    =========
  

From ossp-cvs-owner@ossp.org  Tue Jul 30 21:08:28 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 940C676970; Tue, 30 Jul 2002 21:08:27 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 LICENSE Makefile.in README aclocal.m4 configur...
Message-Id: <20020730190827.940C676970@mail.ossp.org>
Date: Tue, 30 Jul 2002 21:08:27 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Jul-2002 21:08:27
  Branch: HEAD                             Handle: 2002073020082401

  Modified files:
    ossp-pkg/l2             LICENSE Makefile.in README aclocal.m4 configure.ac
                            devtool.conf l2-config.in l2-config.pod l2.h.in
                            l2.m4 l2.pod l2_ch_buffer.c l2_ch_fd.c
                            l2_ch_file.c l2_ch_filter.c l2_ch_irc.c
                            l2_ch_noop.c l2_ch_null.c l2_ch_pipe.c
                            l2_ch_prefix.c l2_ch_smtp.c l2_ch_socket.c
                            l2_ch_syslog.c l2_channel.c l2_env.c l2_p.h
                            l2_spec.c l2_spec_parse.y l2_spec_scan.l l2_test.c
                            l2_ut_fmtcb.c l2_ut_format.c l2_ut_format.h
                            l2_ut_level.c l2_ut_param.c l2_version.c l2tool.c
                            l2tool.pod

  Log:
    polish for release

  Summary:
    Revision    Changes     Path
    1.4         +2  -2      ossp-pkg/l2/LICENSE
    1.45        +2  -2      ossp-pkg/l2/Makefile.in
    1.7         +15 -15     ossp-pkg/l2/README
    1.13        +2  -2      ossp-pkg/l2/aclocal.m4
    1.23        +2  -2      ossp-pkg/l2/configure.ac
    1.5         +38 -3      ossp-pkg/l2/devtool.conf
    1.6         +2  -2      ossp-pkg/l2/l2-config.in
    1.6         +2  -2      ossp-pkg/l2/l2-config.pod
    1.30        +2  -2      ossp-pkg/l2/l2.h.in
    1.5         +2  -2      ossp-pkg/l2/l2.m4
    1.13        +2  -2      ossp-pkg/l2/l2.pod
    1.37        +2  -2      ossp-pkg/l2/l2_ch_buffer.c
    1.14        +2  -2      ossp-pkg/l2/l2_ch_fd.c
    1.24        +2  -2      ossp-pkg/l2/l2_ch_file.c
    1.18        +2  -2      ossp-pkg/l2/l2_ch_filter.c
    1.7         +2  -2      ossp-pkg/l2/l2_ch_irc.c
    1.4         +2  -2      ossp-pkg/l2/l2_ch_noop.c
    1.12        +2  -2      ossp-pkg/l2/l2_ch_null.c
    1.30        +2  -2      ossp-pkg/l2/l2_ch_pipe.c
    1.21        +2  -2      ossp-pkg/l2/l2_ch_prefix.c
    1.10        +2  -2      ossp-pkg/l2/l2_ch_smtp.c
    1.36        +2  -2      ossp-pkg/l2/l2_ch_socket.c
    1.31        +2  -2      ossp-pkg/l2/l2_ch_syslog.c
    1.29        +2  -2      ossp-pkg/l2/l2_channel.c
    1.9         +2  -2      ossp-pkg/l2/l2_env.c
    1.33        +2  -2      ossp-pkg/l2/l2_p.h
    1.9         +2  -2      ossp-pkg/l2/l2_spec.c
    1.8         +2  -2      ossp-pkg/l2/l2_spec_parse.y
    1.9         +2  -2      ossp-pkg/l2/l2_spec_scan.l
    1.50        +6  -6      ossp-pkg/l2/l2_test.c
    1.6         +2  -2      ossp-pkg/l2/l2_ut_fmtcb.c
    1.6         +2  -2      ossp-pkg/l2/l2_ut_format.c
    1.3         +2  -2      ossp-pkg/l2/l2_ut_format.h
    1.8         +2  -2      ossp-pkg/l2/l2_ut_level.c
    1.9         +2  -2      ossp-pkg/l2/l2_ut_param.c
    1.5         +10 -10     ossp-pkg/l2/l2_version.c
    1.3         +2  -2      ossp-pkg/l2/l2tool.c
    1.3         +2  -2      ossp-pkg/l2/l2tool.pod
  ____________________________________________________________________________

  Index: ossp-pkg/l2/LICENSE
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 LICENSE
  --- ossp-pkg/l2/LICENSE	2 Jan 2002 17:07:38 -0000	1.3
  +++ ossp-pkg/l2/LICENSE	30 Jul 2002 19:08:24 -0000	1.4
  @@ -1,10 +1,10 @@
   
  -  L2 - OSSP Logging Library
  +  OSSP l2 - Logging Library
     Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   
     This file is part of OSSP L2, a flexible logging library which
  -  can be found at http://www.ossp.org/pkg/l2/.
  +  can be found at http://www.ossp.org/pkg/lib/l2/.
   
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.44 -r1.45 Makefile.in
  --- ossp-pkg/l2/Makefile.in	9 Jul 2002 08:50:12 -0000	1.44
  +++ ossp-pkg/l2/Makefile.in	30 Jul 2002 19:08:24 -0000	1.45
  @@ -1,10 +1,10 @@
   ##
  -##  L2 - OSSP Logging Library
  +##  OSSP l2 - Logging Library
   ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
   ##  This file is part of OSSP L2, a flexible logging library which
  -##  can be found at http://www.ossp.org/pkg/l2/.
  +##  can be found at http://www.ossp.org/pkg/lib/l2/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/README
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 README
  --- ossp-pkg/l2/README	2 Jan 2002 17:07:38 -0000	1.6
  +++ ossp-pkg/l2/README	30 Jul 2002 19:08:24 -0000	1.7
  @@ -4,16 +4,16 @@
     | |___ / __/ 
     |_____|_____|
                  
  -  L2 - Logging Library
  -  Version 0.1.0 (13-Sep-2001)
  +  OSSP l2 -- Logging Library
  +  Version 0.9.0 (30-Jul-2002)
   
     ABSTRACT
   
  -  OSSP L2 is a C library providing a very flexible and sophisticated
  -  Unix logging facility. It is based on the model of arbitrary number
  -  of channels, stacked together in a top-down data flow tree structure
  -  with filtering channels in internal nodes and output channels on the
  -  leave nodes. 
  +  OSSP l2 is a C library providing a very flexible and sophisticated
  +  Unix logging facility. It is based on the model of arbitrary number of
  +  channels, stacked together in a top-down data flow tree structure with
  +  filtering channels in internal nodes and output channels on the leave
  +  nodes.
     
     Channel trees can be either constructed manually through lower-level
     API functions or all at once with a single API function controlled by
  @@ -25,18 +25,18 @@
     
     Channels are implemented by channel handlers which can be even
     customer supplied for creating own channels which seamlessly integrate
  -  into the framework. For convinience reasons, L2 already ships with
  -  pre-implemented filtering (noop, filter, prefix, buffer) and output
  -  (null, fd, file, pipe, socket, syslog, smtp) channels which already
  -  cover mostly all use cases of logging.
  +  into the framework. For convinience reasons, OSSP l2 already ships
  +  with pre-implemented filtering (noop, filter, prefix, buffer) and
  +  output (null, fd, file, pipe, socket, syslog, smtp) channels which
  +  already cover mostly all use cases of logging.
   
     COPYRIGHT AND LICENSE
   
     Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
     Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   
  -  This file is part of OSSP L2, a flexible logging library which
  -  can be found at http://www.ossp.org/pkg/l2/.
  +  This file is part of OSSP l2, a flexible logging library which
  +  can be found at http://www.ossp.org/pkg/lib/l2//.
   
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
  @@ -60,6 +60,6 @@
   
     The documentation and latest release can be found on
   
  -  o http://www.ossp.org/pkg/l2/
  -  o  ftp://ftp.ossp.org/pkg/l2/
  +  o http://www.ossp.org/pkg/lib/l2//
  +  o  ftp://ftp.ossp.org/pkg/lib/l2//
   
  Index: ossp-pkg/l2/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 aclocal.m4
  --- ossp-pkg/l2/aclocal.m4	25 Jul 2002 07:54:51 -0000	1.12
  +++ ossp-pkg/l2/aclocal.m4	30 Jul 2002 19:08:24 -0000	1.13
  @@ -1,10 +1,10 @@
   dnl ##
  -dnl ##  L2 - OSSP Logging Library
  +dnl ##  OSSP l2 - Logging Library
   dnl ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   dnl ##
   dnl ##  This file is part of OSSP L2, a flexible logging library which
  -dnl ##  can be found at http://www.ossp.org/pkg/l2/.
  +dnl ##  can be found at http://www.ossp.org/pkg/lib/l2/.
   dnl ##
   dnl ##  Permission to use, copy, modify, and distribute this software for
   dnl ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/configure.ac
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 configure.ac
  --- ossp-pkg/l2/configure.ac	25 Jul 2002 07:54:51 -0000	1.22
  +++ ossp-pkg/l2/configure.ac	30 Jul 2002 19:08:24 -0000	1.23
  @@ -1,10 +1,10 @@
   dnl ##
  -dnl ##  L2 - OSSP Logging Library
  +dnl ##  OSSP l2 - Logging Library
   dnl ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   dnl ##
   dnl ##  This file is part of OSSP L2, a flexible logging library which
  -dnl ##  can be found at http://www.ossp.org/pkg/l2/.
  +dnl ##  can be found at http://www.ossp.org/pkg/lib/l2/.
   dnl ##
   dnl ##  Permission to use, copy, modify, and distribute this software for
   dnl ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/devtool.conf
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 devtool.conf
  --- ossp-pkg/l2/devtool.conf	28 Jul 2002 08:04:53 -0000	1.4
  +++ ossp-pkg/l2/devtool.conf	30 Jul 2002 19:08:24 -0000	1.5
  @@ -20,13 +20,48 @@
           --enable-debug \
           "$@"
   
  +%release
  +    ./devtool version
  +    ./devtool dist
  +    ./devtool upload
  +
   %version
  -    ./shtool version -l c -n "OSSP l2" -p "l2_" -e l2_version.c
  +    ./shtool version -l c -n "OSSP l2" -p l2_ -e l2_version.c
  +    V=`./shtool version -l c -d long l2_version.c`
  +    sed -e "s/Version .*(.*)/Version $V/g" <README >README.n 
  +    mv README.n README
  +
  +%tag
  +    V=`./shtool version -l c -d short l2_version.c | sed -e 's;\.;_;g'`
  +    echo "+++ tagging CVS sources as L2_${V}"
  +    cvs tag L2_${V}
   
   %dist
  -    make distclean >/dev/null 2>&1
  +    echo "+++ removing old tarballs"
  +    rm -f l2-*.tar.gz
  +    echo "+++ generating"
  +    ./devtool autoclean
  +    ./devtool autogen
  +    echo "+++ configuring"
  +    ./configure
  +    echo "+++ building"
  +    make clean all man
  +    echo "+++ cleaning"
  +    make distclean
  +    echo "+++ fixing"
       ./shtool fixperm -v .
  +    echo "+++ rolling"
       V=`./shtool version -l c -d short l2_version.c`
       ./shtool tarball -o l2-${V}.tar.gz -d l2-${V} -u ossp -g ossp \
  -                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool.conf' -c 'gzip --best' .
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*,*.tar.gz,^#.*,.*~$' -c 'gzip --best' .
  +    ls -l l2-${V}.tar.gz
  +    echo "+++ testing"
  +    gunzip <l2-${V}.tar.gz | tar tvf - | head -10
  +    echo "[...]"
  +    gunzip <l2-${V}.tar.gz | tar tvf - | tail -10
  +
  +%upload
  +    echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/l2//"
  +    V=`./shtool version -l c -d short l2_version.c`
  +    scp l2-${V}.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/l2//
   
  Index: ossp-pkg/l2/l2-config.in
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 l2-config.in
  --- ossp-pkg/l2/l2-config.in	2 Jan 2002 17:07:38 -0000	1.5
  +++ ossp-pkg/l2/l2-config.in	30 Jul 2002 19:08:24 -0000	1.6
  @@ -1,11 +1,11 @@
   #!/bin/sh
   ##
  -##  L2 - OSSP Logging Library
  +##  OSSP l2 - Logging Library
   ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
   ##  This file is part of OSSP L2, a flexible logging library which
  -##  can be found at http://www.ossp.org/pkg/l2/.
  +##  can be found at http://www.ossp.org/pkg/lib/l2/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2-config.pod
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 l2-config.pod
  --- ossp-pkg/l2/l2-config.pod	2 Jan 2002 17:07:38 -0000	1.5
  +++ ossp-pkg/l2/l2-config.pod	30 Jul 2002 19:08:24 -0000	1.6
  @@ -1,10 +1,10 @@
   ##
  -##  L2 - OSSP Logging Library
  +##  OSSP l2 - Logging Library
   ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
   ##  This file is part of OSSP L2, a flexible logging library which
  -##  can be found at http://www.ossp.org/pkg/l2/.
  +##  can be found at http://www.ossp.org/pkg/lib/l2/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2.h.in
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 l2.h.in
  --- ossp-pkg/l2/l2.h.in	17 Jul 2002 11:22:08 -0000	1.29
  +++ ossp-pkg/l2/l2.h.in	30 Jul 2002 19:08:24 -0000	1.30
  @@ -1,10 +1,10 @@
   /*
  -**  L2 - OSSP Logging Library
  +**  OSSP l2 - Logging Library
   **  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.org/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2.m4
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 l2.m4
  --- ossp-pkg/l2/l2.m4	2 Jan 2002 17:07:38 -0000	1.4
  +++ ossp-pkg/l2/l2.m4	30 Jul 2002 19:08:24 -0000	1.5
  @@ -1,10 +1,10 @@
   dnl ##
  -dnl ##  L2 - OSSP Logging Library
  +dnl ##  OSSP l2 - Logging Library
   dnl ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   dnl ##
   dnl ##  This file is part of OSSP L2, a flexible logging library which
  -dnl ##  can be found at http://www.ossp.org/pkg/l2/.
  +dnl ##  can be found at http://www.ossp.org/pkg/lib/l2/.
   dnl ##
   dnl ##  Permission to use, copy, modify, and distribute this software for
   dnl ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2.pod
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 l2.pod
  --- ossp-pkg/l2/l2.pod	2 Jan 2002 17:07:38 -0000	1.12
  +++ ossp-pkg/l2/l2.pod	30 Jul 2002 19:08:24 -0000	1.13
  @@ -1,10 +1,10 @@
   ##
  -##  L2 - OSSP Logging Library
  +##  OSSP l2 - Logging Library
   ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
   ##  This file is part of OSSP L2, a flexible logging library which
  -##  can be found at http://www.ossp.org/pkg/l2/.
  +##  can be found at http://www.ossp.org/pkg/lib/l2/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2_ch_buffer.c
  ============================================================
  $ cvs diff -u -r1.36 -r1.37 l2_ch_buffer.c
  --- ossp-pkg/l2/l2_ch_buffer.c	2 Jan 2002 17:07:38 -0000	1.36
  +++ ossp-pkg/l2/l2_ch_buffer.c	30 Jul 2002 19:08:24 -0000	1.37
  @@ -1,10 +1,10 @@
   /*
  -**  L2 - OSSP Logging Library
  +**  OSSP l2 - Logging Library
   **  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.org/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2_ch_fd.c
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 l2_ch_fd.c
  --- ossp-pkg/l2/l2_ch_fd.c	2 Jan 2002 17:07:38 -0000	1.13
  +++ ossp-pkg/l2/l2_ch_fd.c	30 Jul 2002 19:08:24 -0000	1.14
  @@ -1,10 +1,10 @@
   /*
  -**  L2 - OSSP Logging Library
  +**  OSSP l2 - Logging Library
   **  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.org/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2_ch_file.c
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 l2_ch_file.c
  --- ossp-pkg/l2/l2_ch_file.c	29 Jul 2002 17:42:25 -0000	1.23
  +++ ossp-pkg/l2/l2_ch_file.c	30 Jul 2002 19:08:24 -0000	1.24
  @@ -1,10 +1,10 @@
   /*
  -**  L2 - OSSP Logging Library
  +**  OSSP l2 - Logging Library
   **  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.org/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2_ch_filter.c
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 l2_ch_filter.c
  --- ossp-pkg/l2/l2_ch_filter.c	5 Mar 2002 14:06:19 -0000	1.17
  +++ ossp-pkg/l2/l2_ch_filter.c	30 Jul 2002 19:08:24 -0000	1.18
  @@ -1,10 +1,10 @@
   /*
  -**  L2 - OSSP Logging Library
  +**  OSSP l2 - Logging Library
   **  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.org/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2_ch_irc.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 l2_ch_irc.c
  --- ossp-pkg/l2/l2_ch_irc.c	25 Jul 2002 13:33:00 -0000	1.6
  +++ ossp-pkg/l2/l2_ch_irc.c	30 Jul 2002 19:08:24 -0000	1.7
  @@ -1,10 +1,10 @@
   /*
  -**  L2 - OSSP Logging Library
  +**  OSSP l2 - Logging Library
   **  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.org/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2_ch_noop.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 l2_ch_noop.c
  --- ossp-pkg/l2/l2_ch_noop.c	2 Jan 2002 17:07:38 -0000	1.3
  +++ ossp-pkg/l2/l2_ch_noop.c	30 Jul 2002 19:08:24 -0000	1.4
  @@ -1,10 +1,10 @@
   /*
  -**  L2 - OSSP Logging Library
  +**  OSSP l2 - Logging Library
   **  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.org/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2_ch_null.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 l2_ch_null.c
  --- ossp-pkg/l2/l2_ch_null.c	2 Jan 2002 17:07:38 -0000	1.11
  +++ ossp-pkg/l2/l2_ch_null.c	30 Jul 2002 19:08:24 -0000	1.12
  @@ -1,10 +1,10 @@
   /*
  -**  L2 - OSSP Logging Library
  +**  OSSP l2 - Logging Library
   **  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.org/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2_ch_pipe.c
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 l2_ch_pipe.c
  --- ossp-pkg/l2/l2_ch_pipe.c	2 Jan 2002 17:07:38 -0000	1.29
  +++ ossp-pkg/l2/l2_ch_pipe.c	30 Jul 2002 19:08:24 -0000	1.30
  @@ -1,10 +1,10 @@
   /*
  -**  L2 - OSSP Logging Library
  +**  OSSP l2 - Logging Library
   **  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.org/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2_ch_prefix.c
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 l2_ch_prefix.c
  --- ossp-pkg/l2/l2_ch_prefix.c	25 Jul 2002 12:28:55 -0000	1.20
  +++ ossp-pkg/l2/l2_ch_prefix.c	30 Jul 2002 19:08:24 -0000	1.21
  @@ -1,10 +1,10 @@
   /*
  -**  L2 - OSSP Logging Library
  +**  OSSP l2 - Logging Library
   **  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.org/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2_ch_smtp.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 l2_ch_smtp.c
  --- ossp-pkg/l2/l2_ch_smtp.c	2 Jan 2002 17:07:38 -0000	1.9
  +++ ossp-pkg/l2/l2_ch_smtp.c	30 Jul 2002 19:08:24 -0000	1.10
  @@ -1,10 +1,10 @@
   /*
  -**  L2 - OSSP Logging Library
  +**  OSSP l2 - Logging Library
   **  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.org/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2_ch_socket.c
  ============================================================
  $ cvs diff -u -r1.35 -r1.36 l2_ch_socket.c
  --- ossp-pkg/l2/l2_ch_socket.c	2 Jan 2002 17:07:38 -0000	1.35
  +++ ossp-pkg/l2/l2_ch_socket.c	30 Jul 2002 19:08:25 -0000	1.36
  @@ -1,10 +1,10 @@
   /*
  -**  L2 - OSSP Logging Library
  +**  OSSP l2 - Logging Library
   **  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.org/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2_ch_syslog.c
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 l2_ch_syslog.c
  --- ossp-pkg/l2/l2_ch_syslog.c	25 Jul 2002 13:33:00 -0000	1.30
  +++ ossp-pkg/l2/l2_ch_syslog.c	30 Jul 2002 19:08:25 -0000	1.31
  @@ -1,10 +1,10 @@
   /*
  -**  L2 - OSSP Logging Library
  +**  OSSP l2 - Logging Library
   **  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.org/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2_channel.c
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 l2_channel.c
  --- ossp-pkg/l2/l2_channel.c	24 Jul 2002 09:36:54 -0000	1.28
  +++ ossp-pkg/l2/l2_channel.c	30 Jul 2002 19:08:25 -0000	1.29
  @@ -1,10 +1,10 @@
   /*
  -**  L2 - OSSP Logging Library
  +**  OSSP l2 - Logging Library
   **  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.org/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2_env.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 l2_env.c
  --- ossp-pkg/l2/l2_env.c	17 Jul 2002 13:22:02 -0000	1.8
  +++ ossp-pkg/l2/l2_env.c	30 Jul 2002 19:08:25 -0000	1.9
  @@ -1,10 +1,10 @@
   /*
  -**  L2 - OSSP Logging Library
  +**  OSSP l2 - Logging Library
   **  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.org/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2_p.h
  ============================================================
  $ cvs diff -u -r1.32 -r1.33 l2_p.h
  --- ossp-pkg/l2/l2_p.h	2 Jan 2002 17:07:38 -0000	1.32
  +++ ossp-pkg/l2/l2_p.h	30 Jul 2002 19:08:25 -0000	1.33
  @@ -1,9 +1,9 @@
   /*
  -**  L2 - OSSP Logging Library
  +**  OSSP l2 - Logging Library
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland GmbH
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.org/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2_spec.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 l2_spec.c
  --- ossp-pkg/l2/l2_spec.c	2 Jan 2002 17:07:38 -0000	1.8
  +++ ossp-pkg/l2/l2_spec.c	30 Jul 2002 19:08:25 -0000	1.9
  @@ -1,10 +1,10 @@
   /*
  -**  L2 - OSSP Logging Library
  +**  OSSP l2 - Logging Library
   **  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.org/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2_spec_parse.y
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 l2_spec_parse.y
  --- ossp-pkg/l2/l2_spec_parse.y	25 Jul 2002 09:13:13 -0000	1.7
  +++ ossp-pkg/l2/l2_spec_parse.y	30 Jul 2002 19:08:25 -0000	1.8
  @@ -1,11 +1,11 @@
   %{
   /*
  -**  L2 - OSSP Logging Library
  +**  OSSP l2 - Logging Library
   **  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.org/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2_spec_scan.l
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 l2_spec_scan.l
  --- ossp-pkg/l2/l2_spec_scan.l	25 Jul 2002 07:54:51 -0000	1.8
  +++ ossp-pkg/l2/l2_spec_scan.l	30 Jul 2002 19:08:25 -0000	1.9
  @@ -1,11 +1,11 @@
   %{
   /*
  -**  L2 - OSSP Logging Library
  +**  OSSP l2 - Logging Library
   **  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.org/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2_test.c
  ============================================================
  $ cvs diff -u -r1.49 -r1.50 l2_test.c
  --- ossp-pkg/l2/l2_test.c	2 Jan 2002 17:07:38 -0000	1.49
  +++ ossp-pkg/l2/l2_test.c	30 Jul 2002 19:08:25 -0000	1.50
  @@ -1,10 +1,10 @@
   /*
  -**  L2 - OSSP Logging Library
  +**  OSSP l2 - Logging Library
   **  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.org/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  @@ -89,9 +89,9 @@
              "  -> prefix(prefix=\"[%d-%m-%Y/%H:%M:%S] %L test[%P]: \", timezone=local)"
              "     -> buffer(size=800)"
   /*           "     -> buffer(size=800, timer=on)"*/
  -           "        -> file(path=l2_test.log, append=1, perm=420) ;"
  +           "        -> file(path=l2_test.log, append=1, perm=0644) ;"
              "  syslog(ident=L2-Test, facility=user, "
  -           "         remotehost=en1, logpid=1, target=remote)"
  +           "         remotehost=localhost, logpid=1, target=remote)"
              "}";
       fprintf(stderr, "configuring: %s\n", spec);
       if ((rv = l2_spec(&ch, env, "%s", spec)) != L2_OK)
  @@ -130,7 +130,7 @@
       /* create syslog channel */
       if ((rv = l2_channel_create(&chSyslog, env, "syslog")) != L2_OK)
           die(env, rv, "failed to create syslog channel");
  -    if ((rv = l2_channel_configure(chSyslog, "ident=L2-Test, facility=user, target=remote, remotehost=en1, logpid=1")) != L2_OK)
  +    if ((rv = l2_channel_configure(chSyslog, "ident=L2-Test, facility=user, target=remote, remotehost=localhost, logpid=1")) != L2_OK)
           die(env, rv, "failed to configure syslog channel");
       if ((rv = l2_channel_levels(chSyslog, L2_LEVEL_UPTO(L2_LEVEL_ERROR), L2_LEVEL_ALL)) != L2_OK)
           die(env, rv, "failed to level of syslog channel");
  @@ -138,7 +138,7 @@
       /* create smtp channel */
       if ((rv = l2_channel_create(&chSmtp, env, "smtp")) != L2_OK)
           die(env, rv, "failed to create smtp channel");
  -    if ((rv = l2_channel_configure(chSmtp, "rcpt=rse@engelschall.com, host=en1, port=25")) != L2_OK)
  +    if ((rv = l2_channel_configure(chSmtp, "rcpt=l2@localhost, host=localhost, port=25")) != L2_OK)
           die(env, rv, "failed to configure smtp channel");
       if ((rv = l2_channel_levels(chSmtp, L2_LEVEL_UPTO(L2_LEVEL_PANIC), L2_LEVEL_ALL)) != L2_OK)
           die(env, rv, "failed to level of smtp channel");
  Index: ossp-pkg/l2/l2_ut_fmtcb.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 l2_ut_fmtcb.c
  --- ossp-pkg/l2/l2_ut_fmtcb.c	17 Jul 2002 11:19:30 -0000	1.5
  +++ ossp-pkg/l2/l2_ut_fmtcb.c	30 Jul 2002 19:08:25 -0000	1.6
  @@ -1,10 +1,10 @@
   /*
  -**  L2 - OSSP Logging Library
  +**  OSSP l2 - Logging Library
   **  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.org/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2_ut_format.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 l2_ut_format.c
  --- ossp-pkg/l2/l2_ut_format.c	2 Jan 2002 17:07:38 -0000	1.5
  +++ ossp-pkg/l2/l2_ut_format.c	30 Jul 2002 19:08:25 -0000	1.6
  @@ -1,10 +1,10 @@
   /*
  -**  L2 - OSSP Logging Library
  +**  OSSP l2 - Logging Library
   **  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.org/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2_ut_format.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2_ut_format.h
  --- ossp-pkg/l2/l2_ut_format.h	2 Jan 2002 17:07:38 -0000	1.2
  +++ ossp-pkg/l2/l2_ut_format.h	30 Jul 2002 19:08:25 -0000	1.3
  @@ -1,9 +1,9 @@
   /*
  -**  L2 - OSSP Logging Library
  +**  OSSP l2 - Logging Library
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland GmbH
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.org/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2_ut_level.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 l2_ut_level.c
  --- ossp-pkg/l2/l2_ut_level.c	2 Jan 2002 17:07:38 -0000	1.7
  +++ ossp-pkg/l2/l2_ut_level.c	30 Jul 2002 19:08:25 -0000	1.8
  @@ -1,10 +1,10 @@
   /*
  -**  L2 - OSSP Logging Library
  +**  OSSP l2 - Logging Library
   **  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.org/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2_ut_param.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 l2_ut_param.c
  --- ossp-pkg/l2/l2_ut_param.c	29 Jul 2002 17:42:25 -0000	1.8
  +++ ossp-pkg/l2/l2_ut_param.c	30 Jul 2002 19:08:25 -0000	1.9
  @@ -1,10 +1,10 @@
   /*
  -**  L2 - OSSP Logging Library
  +**  OSSP l2 - Logging Library
   **  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.org/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2_version.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 l2_version.c
  --- ossp-pkg/l2/l2_version.c	8 Nov 2001 09:53:34 -0000	1.4
  +++ ossp-pkg/l2/l2_version.c	30 Jul 2002 19:08:25 -0000	1.5
  @@ -1,5 +1,5 @@
   /*
  -**  l2_version.c -- Version Information for OSSP L2 (syntax: C/C++)
  +**  l2_version.c -- Version Information for OSSP l2 (syntax: C/C++)
   **  [automatically generated and maintained by GNU shtool]
   */
   
  @@ -8,7 +8,7 @@
   #ifndef _L2_VERSION_C_
   #define _L2_VERSION_C_
   
  -#define L2_VERSION 0x002200
  +#define L2_VERSION 0x009200
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _L2_VERSION_C_AS_HEADER_
   
   l2_version_t l2_version = {
  -    0x002200,
  -    "0.2.0",
  -    "0.2.0 (08-Nov-2001)",
  -    "This is OSSP L2, Version 0.2.0 (08-Nov-2001)",
  -    "OSSP L2 0.2.0 (08-Nov-2001)",
  -    "OSSP L2/0.2.0",
  -    "@(#)OSSP L2 0.2.0 (08-Nov-2001)",
  -    "$Id: l2_version.c,v 1.4 2001/11/08 09:53:34 rse Exp $"
  +    0x009200,
  +    "0.9.0",
  +    "0.9.0 (30-Jul-2002)",
  +    "This is OSSP l2, Version 0.9.0 (30-Jul-2002)",
  +    "OSSP l2 0.9.0 (30-Jul-2002)",
  +    "OSSP l2/0.9.0",
  +    "@(#)OSSP l2 0.9.0 (30-Jul-2002)",
  +    "$Id: l2_version.c,v 1.5 2002/07/30 19:08:25 rse Exp $"
   };
   
   #endif /* _L2_VERSION_C_AS_HEADER_ */
  Index: ossp-pkg/l2/l2tool.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2tool.c
  --- ossp-pkg/l2/l2tool.c	2 Jan 2002 17:07:38 -0000	1.2
  +++ ossp-pkg/l2/l2tool.c	30 Jul 2002 19:08:25 -0000	1.3
  @@ -1,10 +1,10 @@
   /*
  -**  L2 - OSSP Logging Library
  +**  OSSP l2 - Logging Library
   **  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP L2, a flexible logging library which
  -**  can be found at http://www.ossp.org/pkg/l2/.
  +**  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/l2/l2tool.pod
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 l2tool.pod
  --- ossp-pkg/l2/l2tool.pod	2 Jan 2002 17:07:38 -0000	1.2
  +++ ossp-pkg/l2/l2tool.pod	30 Jul 2002 19:08:25 -0000	1.3
  @@ -1,10 +1,10 @@
   ##
  -##  L2 - OSSP Logging Library
  +##  OSSP l2 - Logging Library
   ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
   ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
   ##  This file is part of OSSP L2, a flexible logging library which
  -##  can be found at http://www.ossp.org/pkg/l2/.
  +##  can be found at http://www.ossp.org/pkg/lib/l2/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that

From ossp-cvs-owner@ossp.org  Tue Jul 30 21:12:31 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C969276970; Tue, 30 Jul 2002 21:12:30 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 README devtool.conf
Message-Id: <20020730191230.C969276970@mail.ossp.org>
Date: Tue, 30 Jul 2002 21:12:30 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Jul-2002 21:12:30
  Branch: HEAD                             Handle: 2002073020123000

  Modified files:
    ossp-pkg/l2             README devtool.conf

  Log:
    fix URLs

  Summary:
    Revision    Changes     Path
    1.8         +3  -3      ossp-pkg/l2/README
    1.6         +2  -2      ossp-pkg/l2/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/l2/README
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 README
  --- ossp-pkg/l2/README	30 Jul 2002 19:08:24 -0000	1.7
  +++ ossp-pkg/l2/README	30 Jul 2002 19:12:30 -0000	1.8
  @@ -36,7 +36,7 @@
     Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   
     This file is part of OSSP l2, a flexible logging library which
  -  can be found at http://www.ossp.org/pkg/lib/l2//.
  +  can be found at http://www.ossp.org/pkg/lib/l2/.
   
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
  @@ -60,6 +60,6 @@
   
     The documentation and latest release can be found on
   
  -  o http://www.ossp.org/pkg/lib/l2//
  -  o  ftp://ftp.ossp.org/pkg/lib/l2//
  +  o http://www.ossp.org/pkg/lib/l2/
  +  o  ftp://ftp.ossp.org/pkg/lib/l2/
   
  Index: ossp-pkg/l2/devtool.conf
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 devtool.conf
  --- ossp-pkg/l2/devtool.conf	30 Jul 2002 19:08:24 -0000	1.5
  +++ ossp-pkg/l2/devtool.conf	30 Jul 2002 19:12:30 -0000	1.6
  @@ -61,7 +61,7 @@
       gunzip <l2-${V}.tar.gz | tar tvf - | tail -10
   
   %upload
  -    echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/l2//"
  +    echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/l2/"
       V=`./shtool version -l c -d short l2_version.c`
  -    scp l2-${V}.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/l2//
  +    scp l2-${V}.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/l2/
   

From ossp-cvs-owner@ossp.org  Tue Jul 30 21:13:00 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 89A0F7698C; Tue, 30 Jul 2002 21:13:00 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 ChangeLog
Message-Id: <20020730191300.89A0F7698C@mail.ossp.org>
Date: Tue, 30 Jul 2002 21:13:00 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Jul-2002 21:13:00
  Branch: HEAD                             Handle: 2002073020130000

  Added files:
    ossp-pkg/l2             ChangeLog

  Log:
    add ChangeLog file

  Summary:
    Revision    Changes     Path
    1.3         +4  -0      ossp-pkg/l2/ChangeLog
  ____________________________________________________________________________

  Index: ossp-pkg/l2/ChangeLog
  ============================================================
  $ cvs update -p -r1.3 ChangeLog
  
    ChangeLog
    =========
  

From ossp-cvs-owner@ossp.org  Tue Jul 30 21:28:38 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F248E767D1; Tue, 30 Jul 2002 21:28:37 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg README VERSION cfg.pod
Message-Id: <20020730192837.F248E767D1@mail.ossp.org>
Date: Tue, 30 Jul 2002 21:28:37 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Jul-2002 21:28:37
  Branch: HEAD                             Handle: 2002073020283700

  Modified files:
    ossp-pkg/cfg            README VERSION cfg.pod

  Log:
    polishing for release

  Summary:
    Revision    Changes     Path
    1.2         +10 -3      ossp-pkg/cfg/README
    1.2         +1  -1      ossp-pkg/cfg/VERSION
    1.6         +9  -2      ossp-pkg/cfg/cfg.pod
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/README
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 README
  --- ossp-pkg/cfg/README	9 Jul 2002 08:29:19 -0000	1.1
  +++ ossp-pkg/cfg/README	30 Jul 2002 19:28:37 -0000	1.2
  @@ -6,7 +6,7 @@
               |___/ 
   
     OSSP cfg - Configuration Parsing
  -  Version 
  +  Version 0.9.0 (30-Jul-2002)
   
     ABSTRACT
   
  @@ -14,8 +14,15 @@
     configuration files. A configuration is sequence of directives. Each
     directive consists of zero or more tokens. Each token can be either
     a string or again a complete sequence. This means the configuration
  -  syntax has a recursive structure and this way allows to configure
  -  structures which require arbitrarily nested sections.
  +  syntax has a recursive structure and this way allows to create
  +  configurations with arbitrarily nested sections.
  +
  +  Additionally the configuration syntax provides complex
  +  single/double/balanced quoting of tokens, hexadecimal/octal/decimal
  +  character encodings, character escaping, C/C++ and Shell-style
  +  comments, etc. The library API allows importing a configuration text
  +  into an Abstract Syntax Tree (AST), traversing the AST and optionally
  +  exporting the AST again as a configuration text.
   
     COPYRIGHT AND LICENSE
   
  Index: ossp-pkg/cfg/VERSION
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 VERSION
  --- ossp-pkg/cfg/VERSION	9 Jul 2002 08:29:19 -0000	1.1
  +++ ossp-pkg/cfg/VERSION	30 Jul 2002 19:28:37 -0000	1.2
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP cfg (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP cfg, Version 0.1.0 (09-Jul-2002)
  +  This is OSSP cfg, Version 0.9.0 (30-Jul-2002)
   
  Index: ossp-pkg/cfg/cfg.pod
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 cfg.pod
  --- ossp-pkg/cfg/cfg.pod	28 Jul 2002 11:09:16 -0000	1.5
  +++ ossp-pkg/cfg/cfg.pod	30 Jul 2002 19:28:37 -0000	1.6
  @@ -44,8 +44,15 @@
   configuration files. A configuration is sequence of directives. Each
   directive consists of zero or more tokens. Each token can be either a
   string or again a complete sequence. This means the configuration syntax
  -has a recursive structure and this way allows to configure structures
  -which require arbitrarily nested sections.
  +has a recursive structure and this way allows to create configurations
  +with arbitrarily nested sections.
  +
  +Additionally the configuration syntax provides complex
  +single/double/balanced quoting of tokens, hexadecimal/octal/decimal
  +character encodings, character escaping, C/C++ and Shell-style comments,
  +etc. The library API allows importing a configuration text into an
  +Abstract Syntax Tree (AST), traversing the AST and optionally exporting
  +the AST again as a configuration text.
   
   =head2 CONFIGURATION SYNTAX
   

From ossp-cvs-owner@ossp.org  Tue Jul 30 21:33:08 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 55586769B9; Tue, 30 Jul 2002 21:33:08 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg ChangeLog
Message-Id: <20020730193308.55586769B9@mail.ossp.org>
Date: Tue, 30 Jul 2002 21:33:08 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Jul-2002 21:33:08
  Branch: HEAD                             Handle: 2002073020330700

  Added files:
    ossp-pkg/cfg            ChangeLog

  Log:
    add ChangeLog

  Summary:
    Revision    Changes     Path
    1.1         +4  -0      ossp-pkg/cfg/ChangeLog
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/ChangeLog
  ============================================================
  $ cvs update -p -r1.1 ChangeLog
  
    ChangeLog
    =========
  

From ossp-cvs-owner@ossp.org  Tue Jul 30 21:45:23 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E68E0769DF; Tue, 30 Jul 2002 21:45:22 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg devtool.conf
Message-Id: <20020730194522.E68E0769DF@mail.ossp.org>
Date: Tue, 30 Jul 2002 21:45:22 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Jul-2002 21:45:22
  Branch: HEAD                             Handle: 2002073020452200

  Modified files:
    ossp-pkg/cfg            devtool.conf

  Log:
    fix distribution rolling

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/cfg/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/devtool.conf
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.conf
  --- ossp-pkg/cfg/devtool.conf	28 Jul 2002 08:03:12 -0000	1.2
  +++ ossp-pkg/cfg/devtool.conf	30 Jul 2002 19:45:22 -0000	1.3
  @@ -31,7 +31,7 @@
       ./devtool autoclean
       ./devtool autogen
       echo "+++ configuring"
  -    ./configure
  +    ./devtool configure
       echo "+++ building"
       make clean all man
       echo "+++ cleaning"

From ossp-cvs-owner@ossp.org  Tue Jul 30 21:52:01 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0CA99767D1; Tue, 30 Jul 2002 21:52:00 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new news.txt ossp-web/pkg/lib/cfg index.wml ossp-...
Message-Id: <20020730195200.0CA99767D1@mail.ossp.org>
Date: Tue, 30 Jul 2002 21:52:00 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   30-Jul-2002 21:52:00
  Branch: HEAD                             Handle: 2002073020515901

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/cfg    index.wml
    ossp-web/pkg/lib/l2     index.wml

  Log:
    release OSSP l2 0.9.0 and OSSP l2 0.9.0

  Summary:
    Revision    Changes     Path
    1.17        +2  -0      ossp-web/new/news.txt
    1.5         +13 -5      ossp-web/pkg/lib/cfg/index.wml
    1.21        +2  -2      ossp-web/pkg/lib/index.wml
    1.4         +3  -3      ossp-web/pkg/lib/l2/index.wml
  ____________________________________________________________________________

  Index: ossp-web/new/news.txt
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 news.txt
  --- ossp-web/new/news.txt	30 Jul 2002 18:37:24 -0000	1.16
  +++ ossp-web/new/news.txt	30 Jul 2002 19:51:59 -0000	1.17
  @@ -1,3 +1,5 @@
  +30-Jul-2002: Released L<OSSP cfg> 0.9.0
  +30-Jul-2002: Released L<OSSP l2> 0.9.0
   30-Jul-2002: Released L<OSSP fsl> 0.1.12
   28-Jul-2002: Released L<OSSP mm> 1.2.1
   26-Jul-2002: Released L<OSSP mm> 1.2.0
  Index: ossp-web/pkg/lib/cfg/index.wml
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 index.wml
  --- ossp-web/pkg/lib/cfg/index.wml	26 Jul 2002 09:25:54 -0000	1.4
  +++ ossp-web/pkg/lib/cfg/index.wml	30 Jul 2002 19:52:00 -0000	1.5
  @@ -11,8 +11,16 @@
   configuration files. A configuration is sequence of directives. Each
   directive consists of zero or more tokens. Each token can be either
   a string or again a complete sequence. This means the configuration
  -syntax has a recursive structure and this way allows to configure
  -structures which require arbitrarily nested sections.
  +syntax has a recursive structure and this way allows to create
  +configurations with arbitrarily nested sections.
  +
  +<p>
  +Additionally the configuration syntax provides complex
  +single/double/balanced quoting of tokens, hexadecimal/octal/decimal
  +character encodings, character escaping, C/C++ and Shell-style
  +comments, etc. The library API allows importing a configuration text
  +into an Abstract Syntax Tree (AST), traversing the AST and optionally
  +exporting the AST again as a configuration text.
   
   <h2>Authors</h2>
   
  @@ -22,8 +30,8 @@
   
   <pkg_status
       stable="none"    stable_date="none"
  -    unstable="none"  unstable_date="none"
  -	done=80>
  +    unstable="0.9.0" unstable_date="30-Jul-2002"
  +	done=95>
   
   <h2>Source</h2>
   
  @@ -32,5 +40,5 @@
       url=$(FTP_ROOT_URL)/pkg/lib/cfg/
       directory=$(FTP_ROOT_DIR)/pkg/lib/cfg/
       files="cfg-*.tar.gz" 
  -	stable="none" unstable="none">
  +	stable="none" unstable="cfg-0.9.0.tar.gz">
   	
  Index: ossp-web/pkg/lib/index.wml
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 index.wml
  --- ossp-web/pkg/lib/index.wml	30 Jul 2002 18:37:24 -0000	1.20
  +++ ossp-web/pkg/lib/index.wml	30 Jul 2002 19:51:59 -0000	1.21
  @@ -28,7 +28,7 @@
   			done=100 stable=1.0.0 unstable=none>
     <pkg_item name="l2" longname="OSSP l2" type="lib"
               desc="Flexible Logging"
  -			done=80 stable=none unstable=none>
  +			done=95 stable=none unstable=0.9.0>
     <pkg_item name="var" longname="OSSP var" type="lib"
               desc="Variable Expansion"
   			done=95 stable=none unstable=0.9.0>
  @@ -70,7 +70,7 @@
   			done=50 stable=none unstable=none>
     <pkg_item name="cfg" longname="OSSP cfg" type="lib"
               desc="Configuration Parsing"
  -			done=80 stable=none unstable=none>
  +			done=95 stable=none unstable=0.9.0>
     <pkg_item name="adns" longname="OSSP adns" type="lib" derived=yes
               desc="Asynchronous DNS Resolving"
   			done=100 stable=none unstable=none>
  Index: ossp-web/pkg/lib/l2/index.wml
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 index.wml
  --- ossp-web/pkg/lib/l2/index.wml	13 Jul 2002 20:09:26 -0000	1.3
  +++ ossp-web/pkg/lib/l2/index.wml	30 Jul 2002 19:52:00 -0000	1.4
  @@ -38,8 +38,8 @@
   
   <pkg_status
       stable="none"    stable_date="none"
  -    unstable="none"  unstable_date="none"
  -	done=80>
  +    unstable="0.9.0" unstable_date="30-Jul-2002"
  +	done=95>
   
   <h2>Source</h2>
   
  @@ -48,5 +48,5 @@
       url=$(FTP_ROOT_URL)/pkg/lib/l2/
       directory=$(FTP_ROOT_DIR)/pkg/lib/l2/
       files="l2-*.tar.gz" 
  -	stable="none" unstable="none">
  +	stable="none" unstable="l2-0.9.0.tar.gz">
   	

From ossp-cvs-owner@ossp.org  Wed Jul 31 09:39:22 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BF890765EB; Wed, 31 Jul 2002 09:39:21 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl TODO fsl.pod ossp-pkg/l2 l2_ch_fd.c
Message-Id: <20020731073921.BF890765EB@mail.ossp.org>
Date: Wed, 31 Jul 2002 09:39:21 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   31-Jul-2002 09:39:21
  Branch: HEAD                             Handle: 197001010100001028097561

  Modified files:
    ossp-pkg/fsl            fsl.pod
    ossp-pkg/l2             l2_ch_fd.c
  Removed files:
    ossp-pkg/fsl            TODO

  Log:
    renamed L2 fd() channel argument "filedescriptor" to "fd"

  Summary:
    Revision    Changes     Path
    NONE        +0  -2      ossp-pkg/fsl/TODO
    1.18        +3  -3      ossp-pkg/fsl/fsl.pod
    1.15        +1  -1      ossp-pkg/l2/l2_ch_fd.c
  ____________________________________________________________________________

    Index: ossp-pkg/fsl/fsl.pod
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 fsl.pod
  --- ossp-pkg/fsl/fsl.pod	30 Jul 2002 18:50:36 -0000	1.17
  +++ ossp-pkg/fsl/fsl.pod	31 Jul 2002 07:39:20 -0000	1.18
  @@ -191,10 +191,10 @@
   =head2 Filedescriptor Output Channel (fd)
   
   The B<fd> channel passes messages poured in from upper channels to the
  -open file identified by the given I<filedescriptor>. Note that Unix
  +open file identified by the filedescriptor passed through I<fd>. Note that Unix
   usually allocates C<1> for F<stdout> and C<2> for F<stderr>.
   
  - o fd     (INT filedescriptor  m
  + o fd     (INT fd              m
              )
   
   =head2 File Output Channel (file)
  @@ -355,7 +355,7 @@
   (filedescriptor 2):
   
    ident .*
  - fd(filedescriptor=2)
  + fd(fd=2)
   
   =head2 Example 2: simple logfile writing
   
  Index: ossp-pkg/l2/l2_ch_fd.c
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 l2_ch_fd.c
  --- ossp-pkg/l2/l2_ch_fd.c	30 Jul 2002 19:08:24 -0000	1.14
  +++ ossp-pkg/l2/l2_ch_fd.c	31 Jul 2002 07:39:21 -0000	1.15
  @@ -66,7 +66,7 @@
           return L2_ERR_ARG;
   
       /* feed and call generic parameter parsing engine */
  -    L2_PARAM_SET(pa[0], filedescriptor, INT, &cfg->fd);
  +    L2_PARAM_SET(pa[0], fd, INT, &cfg->fd);
       L2_PARAM_END(pa[1]);
       l2_channel_env(ch, &env);
       rv = l2_util_setparams(env, pa, fmt, ap);

From ossp-cvs-owner@ossp.org  Wed Jul 31 13:39:14 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 103C3765EB; Wed, 31 Jul 2002 13:39:14 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.c
Message-Id: <20020731113914.103C3765EB@mail.ossp.org>
Date: Wed, 31 Jul 2002 13:39:14 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   31-Jul-2002 13:39:13
  Branch: HEAD                             Handle: 2002073112391300

  Modified files:
    ossp-pkg/fsl            fsl.c

  Log:
    avoid repetitive execution of bad l2specs

  Summary:
    Revision    Changes     Path
    1.42        +75 -39     ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.41 -r1.42 fsl.c
  --- ossp-pkg/fsl/fsl.c	30 Jul 2002 12:03:36 -0000	1.41
  +++ ossp-pkg/fsl/fsl.c	31 Jul 2002 11:39:13 -0000	1.42
  @@ -81,7 +81,8 @@
       FSL_ERR_USE,              /* invalid use */
       FSL_ERR_MEM,              /* no more memory available */
       FSL_ERR_SYS,              /* operating system error, see errno */
  -    FSL_ERR_CUS               /* error handled and logged, just run clean up sequence and goodbye */
  +    FSL_ERR_CUS,              /* error handled and logged, just run clean up sequence and goodbye */
  +    FSL_ERR_INT               /* internal error */
   } fsl_rc_t;
   
   /* file buffer handling sub-API */
  @@ -182,7 +183,9 @@
       int           maskpri;
       int           logopt;
       int           delayopen;
  -    int           openlog;
  +    int           triedopenlog;
  +    int           triedopenfsldebug;
  +    int           openfsldebugpermanenterror;
   } ctx = { 
       NULL,
       NULL,
  @@ -192,6 +195,8 @@
       LOG_UPTO(LOG_DEBUG),
       0,
       FALSE,
  +    FALSE,
  +    FALSE,
       FALSE
   };
   
  @@ -595,6 +600,68 @@
       return rc;
   }
   
  +static void closefsllog()
  +{
  +    if (ctx.l2_fslnch != NULL) {
  +        l2_channel_destroy(ctx.l2_fslnch);
  +        ctx.l2_fslnch = NULL;
  +    }
  +    if (ctx.l2_fslenv != NULL) {
  +        l2_env_destroy(ctx.l2_fslenv);
  +        ctx.l2_fslenv = NULL;
  +    }
  +    ctx.triedopenfsldebug = FALSE;
  +}
  +
  +static void openfsldebug()
  +{
  +    int rc = FSL_OK;
  +    char *argl2spec;
  +    l2_result_t   l2rv;
  +    char *cp; /* scratch variable */
  +    l2_channel_t *ch; /* scratch variable */
  +
  +    if (ctx.triedopenfsldebug || ctx.openfsldebugpermanenterror)
  +        return;
  +
  +    /* properly prepare for repeated execution */
  +    ctx.triedopenfsldebug = TRUE;
  +
  +    /* create OSSP l2 environment for fsl itself (internal logging) */
  +    if ((argl2spec = getenv("FSL_DEBUG")) == NULL)
  +        argl2spec = FSL_DEBUG;
  +    if (strlen(argl2spec) > 0) {
  +        if ((l2rv = l2_env_create(&ctx.l2_fslenv)) != L2_OK) {
  +            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: failed to create L2 environment (%d) for fsl", l2rv); CU(FSL_ERR_INT); }
  +        if ((l2rv = l2_env_levels(ctx.l2_fslenv, L2_LEVEL_ALL, L2_LEVEL_NONE)) != L2_OK) {
  +            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to set global logging level defaults %s(%d) for fsl", cp, l2rv); CU(FSL_ERR_INT); }
  +        if ((l2rv = l2_env_formatter(ctx.l2_fslenv, 'D', l2_util_fmt_dump, NULL)) != L2_OK) {
  +            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to register dump formatter %s(%d) for fsl", cp, l2rv); CU(FSL_ERR_INT); }
  +        if ((l2rv = l2_env_formatter(ctx.l2_fslenv, 'S', l2_util_fmt_string, NULL)) != L2_OK) {
  +            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to register string formatter %s(%d) for fsl", cp, l2rv); CU(FSL_ERR_INT); }
  +        if ((l2rv = l2_env_formatter(ctx.l2_fslenv, 'm', l2_util_fmt_errno, NULL)) != L2_OK) {
  +            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to register errno formatter %s(%d) for fsl", cp, l2rv); CU(FSL_ERR_INT); }
  +        if ((l2rv = l2_channel_create(&ctx.l2_fslnch, ctx.l2_fslenv, "noop")) != L2_OK) {
  +            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to create noop channel; %s(%d) for fsl", cp, l2rv); CU(FSL_ERR_INT); }
  +        if ((l2rv = l2_spec(&ch, ctx.l2_fslenv, "%s", argl2spec)) != L2_OK) {
  +            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to create stream from spec %s(%d) for fsl", cp, l2rv);
  +            if (l2rv == L2_ERR_ARG)
  +                CU(FSL_ERR_ARG);
  +            else
  +                CU(FSL_ERR_INT);
  +        }
  +        if ((l2rv = l2_channel_link(ctx.l2_fslnch, L2_LINK_CHILD, ch, NULL)) != L2_OK) {
  +            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to link child channel %s(%d) for fsl", cp, l2rv); CU(FSL_ERR_INT); }
  +        if ((l2rv = l2_channel_open(ctx.l2_fslnch)) != L2_OK) {
  +            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to open channel stream %s(%d) for fsl", cp, l2rv); CU(FSL_ERR_INT); }
  +    }
  +CUS:
  +    if (rc != FSL_OK)
  +        closefsllog();
  +    if (rc == FSL_ERR_ARG);
  +        ctx.openfsldebugpermanenterror = TRUE;
  +}
  +
   /* POSIX API function openlog(3) */
   void openlog(const char *ident, int logopt, int facility)
   {
  @@ -603,13 +670,11 @@
       fsl_rc_t rv;
       cfg_t           *cfg;
       cfg_rc_t         cfgrv;
  -    char *argl2spec;
       char *cp; /* scratch variable */
       int   i;  /* scratch variable */
       char *cpIdent;
       char *cpFacility;
       char *cpISF;
  -    l2_channel_t *ch; /* scratch variable */
       l2_result_t   l2rv;
   
       /* initialization */
  @@ -620,36 +685,14 @@
       cpIdent = NULL;
       cpISF = NULL;
   
  -    /* properly handle repeated execution */
  +    /* properly prepare for repeated execution */
       closelog();
  -    ctx.openlog = TRUE;
  +    ctx.triedopenlog = TRUE;
   
       /* create OSSP l2 environment for fsl itself (internal logging) */
  -    if ((argl2spec = getenv("FSL_DEBUG")) == NULL)
  -        argl2spec = FSL_DEBUG;
  -    if (strlen(argl2spec) > 0) {
  -        if ((l2rv = l2_env_create(&ctx.l2_fslenv)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: failed to create L2 environment (%d) for fsl", l2rv); CU(1); }
  -        if ((l2rv = l2_env_levels(ctx.l2_fslenv, L2_LEVEL_ALL, L2_LEVEL_NONE)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to set global logging level defaults %s(%d) for fsl", cp, l2rv); CU(1); }
  -        if ((l2rv = l2_env_formatter(ctx.l2_fslenv, 'D', l2_util_fmt_dump, NULL)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to register dump formatter %s(%d) for fsl", cp, l2rv); CU(1); }
  -        if ((l2rv = l2_env_formatter(ctx.l2_fslenv, 'S', l2_util_fmt_string, NULL)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to register string formatter %s(%d) for fsl", cp, l2rv); CU(1); }
  -        if ((l2rv = l2_env_formatter(ctx.l2_fslenv, 'm', l2_util_fmt_errno, NULL)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to register errno formatter %s(%d) for fsl", cp, l2rv); CU(1); }
  -        if ((l2rv = l2_channel_create(&ctx.l2_fslnch, ctx.l2_fslenv, "noop")) != L2_OK) {
  -            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to create noop channel; %s(%d) for fsl", cp, l2rv); CU(1); }
  -        if ((l2rv = l2_spec(&ch, ctx.l2_fslenv, "%s", argl2spec)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to create stream from spec %s(%d) for fsl", cp, l2rv); CU(1); }
  -        if ((l2rv = l2_channel_link(ctx.l2_fslnch, L2_LINK_CHILD, ch, NULL)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to link child channel %s(%d) for fsl", cp, l2rv); CU(1); }
  -        if ((l2rv = l2_channel_open(ctx.l2_fslnch)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to open channel stream %s(%d) for fsl", cp, l2rv); CU(1); }
  -    }
  +    openfsldebug();
   
       /* tracing */
  -    
       fsldebug(L2_LEVEL_TRACE, "openlog() ident=\"%s\", logopt=0x%.8lx, facility=0x%.8lx)", ident, logopt, facility);
   
       /* remember logopt and handle unsupported values */
  @@ -758,14 +801,7 @@
   void closelog(void)
   {
       fsldebug(L2_LEVEL_TRACE, "closelog()");
  -    if (ctx.l2_fslnch != NULL) {
  -        l2_channel_destroy(ctx.l2_fslnch);
  -        ctx.l2_fslnch = NULL;
  -    }
  -    if (ctx.l2_fslenv != NULL) {
  -        l2_env_destroy(ctx.l2_fslenv);
  -        ctx.l2_fslenv = NULL;
  -    }
  +    closefsllog();
       if (ctx.l2_nch != NULL) {
           l2_channel_destroy(ctx.l2_nch);
           ctx.l2_nch = NULL;
  @@ -781,7 +817,7 @@
       ctx.maskpri = LOG_UPTO(LOG_DEBUG);
       ctx.logopt = 0;
       ctx.delayopen = FALSE;
  -    ctx.openlog = FALSE;
  +    ctx.triedopenlog = FALSE;
       return;
   }
   
  @@ -822,7 +858,7 @@
       char *cp;
       
       /* check for previous omitted attempt of initialization */
  -    if (ctx.l2_nch == NULL && !ctx.openlog)
  +    if (ctx.l2_nch == NULL && !ctx.triedopenlog)
           openlog("fsl", 0, LOG_SYSLOG);
   
       /* check for previous proper initialization */

From ossp-cvs-owner@ossp.org  Wed Jul 31 14:58:04 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 23C4D767E8; Wed, 31 Jul 2002 14:58:04 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl Makefile.in README VERSION configure.ac devto...
Message-Id: <20020731125804.23C4D767E8@mail.ossp.org>
Date: Wed, 31 Jul 2002 14:58:04 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   31-Jul-2002 14:58:04
  Branch: HEAD                             Handle: 197001010100001028116683

  Added files:
    ossp-pkg/fsl            fsl_version.c
  Modified files:
    ossp-pkg/fsl            Makefile.in README configure.ac devtool.conf fsl.c
  Removed files:
    ossp-pkg/fsl            VERSION

  Log:
    now logging FSL version

  Summary:
    Revision    Changes     Path
    1.7         +5  -5      ossp-pkg/fsl/Makefile.in
    1.15        +1  -1      ossp-pkg/fsl/README
    NONE        +0  -6      ossp-pkg/fsl/VERSION
    1.10        +7  -1      ossp-pkg/fsl/configure.ac
    1.9         +7  -8      ossp-pkg/fsl/devtool.conf
    1.43        +4  -1      ossp-pkg/fsl/fsl.c
    1.1         +0  -0      ossp-pkg/fsl/fsl_version.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/Makefile.in
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 Makefile.in
  --- ossp-pkg/fsl/Makefile.in	27 Jul 2002 18:13:51 -0000	1.6
  +++ ossp-pkg/fsl/Makefile.in	31 Jul 2002 12:58:03 -0000	1.7
  @@ -101,14 +101,14 @@
   	@$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $(TST_NAME) $(TST_OBJS) $(LIB_NAME) $(LIBS)
   
   man: $(MAN_NAME)
  -$(MAN_NAME): fsl.pod
  -	V1=`$(SHTOOL) version -l txt -d short VERSION`; \
  -	V2=`$(SHTOOL) version -l txt -d long VERSION`; \
  +$(MAN_NAME): fsl.pod fsl_version.c
  +	VS=`$(SHTOOL) version -lc -dshort fsl_version.c`; \
  +	VL=`$(SHTOOL) version -lc -dlong fsl_version.c`; \
   	D=`$(SHTOOL) version -l txt -d long VERSION | sed -e 's;.*(;;' -e 's;).*;;'`; \
   	$(POD2MAN) --quotes=none \
   	           --section=3 --center="Faking/Flexible Syslog Library" \
  -	           --release="$$D" --date="OSSP fsl $$V1" fsl.pod | \
  -	sed -e "s;FSL_VERSION_STR;$$V2;" -e "s;FSL_CFGDIR;$(FSL_CFGDIR);g" >fsl.3
  +	           --release="$$D" --date="OSSP fsl $$VS" fsl.pod | \
  +	sed -e "s;FSL_VERSION_STR;$$VL;" -e "s;FSL_CFGDIR;$(FSL_CFGDIR);g" >fsl.3
   
   check: $(TST_NAME)
   	@$(LIBTOOL) --mode=execute ./$(TST_NAME)
  Index: ossp-pkg/fsl/README
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 README
  --- ossp-pkg/fsl/README	30 Jul 2002 18:50:36 -0000	1.14
  +++ ossp-pkg/fsl/README	31 Jul 2002 12:58:03 -0000	1.15
  @@ -5,7 +5,7 @@
     |_| |___/_|
                
     OSSP fsl - Faking/Flexible Syslog Library
  -  Version 0.1.12 (30-Jul-2002)
  +  Version 0.1.14 (31-Jul-2002)
   
     ABSTRACT
   
    Index: ossp-pkg/fsl/configure.ac
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 configure.ac
  --- ossp-pkg/fsl/configure.ac	30 Jul 2002 09:42:54 -0000	1.9
  +++ ossp-pkg/fsl/configure.ac	31 Jul 2002 12:58:03 -0000	1.10
  @@ -30,8 +30,14 @@
   
   AC_PREREQ(2.53)
   AC_INIT
  +
  +dnl #   announce our version
  +V=`./shtool version -lc -dlong fsl_version.c`
  +./shtool echo -e "Configuring %BOSSP fsl%b (Faking/Flexible Syslog Library), Version %B${V}%b"
  +echo "Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>"
  +echo "Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>"
  +
   FSL_VERSION_STR=`./shtool version -l txt -d long VERSION`
  -./shtool echo -e "Configuring %BOSSP fsl%b (Faking/Flexible Syslog Library), version %B${FSL_VERSION_STR}%b"
   AC_SUBST(FSL_VERSION_STR)
   
   AC_PROG_MAKE_SET
  Index: ossp-pkg/fsl/devtool.conf
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 devtool.conf
  --- ossp-pkg/fsl/devtool.conf	28 Jul 2002 08:04:25 -0000	1.8
  +++ ossp-pkg/fsl/devtool.conf	31 Jul 2002 12:58:03 -0000	1.9
  @@ -46,14 +46,13 @@
       ./devtool upload
   
   %version
  -    ./shtool version -l txt -n "OSSP fsl" -e VERSION
  -    V=`./shtool version -l txt -d long VERSION`
  -    sed -e "s/Version .*(.*)/Version $V/g" <README >README.n 
  -    mv README.n README
  -    cvs commit -m'bump version for release' VERSION README
  +    ./shtool version -l c -n "OSSP fsl" -p "fsl_" -e fsl_version.c
  +	V=`./shtool version -lc -dlong fsl_version.c`
  +	sed -e "s/Version .*(.*)/Version $V/g" <README >README.n && mv README.n README
  +    #cvs commit -m'bump version for release' README fsl_version.c
   
   %tag
  -    V=`./shtool version -l txt -d short VERSION | sed -e 's;\.;_;g'`
  +	V=`./shtool version -lc -dshort fsl_version.c` | sed -e 's;\.;_;g'`
       echo "+++ tagging CVS sources as FSL_${V}"
       cvs tag FSL_${V}
   
  @@ -72,7 +71,7 @@
       echo "+++ fixing"
       ./shtool fixperm -v .
       echo "+++ rolling"
  -    V=`./shtool version -l txt -d short VERSION`
  +	V=`./shtool version -lc -dshort fsl_version.c`
       ./shtool tarball -o fsl-${V}.tar.gz -d fsl-${V} -u ossp -g ossp \
                        -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*,*.tar.gz,^#.*,.*~$' -c 'gzip --best' .
       ls -l fsl-${V}.tar.gz
  @@ -83,6 +82,6 @@
   
   %upload
       echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/fsl/"
  -    V=`./shtool version -l txt -d short VERSION`
  +	V=`./shtool version -lc -dshort fsl_version.c`
       scp fsl-${V}.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/fsl/
   
  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.42 -r1.43 fsl.c
  --- ossp-pkg/fsl/fsl.c	31 Jul 2002 11:39:13 -0000	1.42
  +++ ossp-pkg/fsl/fsl.c	31 Jul 2002 12:58:03 -0000	1.43
  @@ -53,6 +53,9 @@
   /* autoconfiguration */
   #include "config.h"
   
  +/* version */
  +#include "fsl_version.c"
  +
   /* pcre static vector size */
   #define OVECSIZE 30
   
  @@ -693,7 +696,7 @@
       openfsldebug();
   
       /* tracing */
  -    fsldebug(L2_LEVEL_TRACE, "openlog() ident=\"%s\", logopt=0x%.8lx, facility=0x%.8lx)", ident, logopt, facility);
  +    fsldebug(L2_LEVEL_TRACE, "openlog() ident=\"%s\", logopt=0x%.8lx, facility=0x%.8lx; caught by FSL %s", ident, logopt, facility, fsl_version.v_gnu);
   
       /* remember logopt and handle unsupported values */
       ctx.logopt = logopt;
  Index: ossp-pkg/fsl/fsl_version.c
  ============================================================
  $ cvs update -p -r1.1 fsl_version.c
  /*
  **  fsl_version.c -- Version Information for OSSP fsl (syntax: C/C++)
  **  [automatically generated and maintained by GNU shtool]
  */
  
  #ifdef _FSL_VERSION_C_AS_HEADER_
  
  #ifndef _FSL_VERSION_C_
  #define _FSL_VERSION_C_
  
  #define FSL_VERSION 0x00120E
  
  typedef struct {
      const int   v_hex;
      const char *v_short;
      const char *v_long;
      const char *v_tex;
      const char *v_gnu;
      const char *v_web;
      const char *v_sccs;
      const char *v_rcs;
  } fsl_version_t;
  
  extern fsl_version_t fsl_version;
  
  #endif /* _FSL_VERSION_C_ */
  
  #else /* _FSL_VERSION_C_AS_HEADER_ */
  
  #define _FSL_VERSION_C_AS_HEADER_
  #include "fsl_version.c"
  #undef  _FSL_VERSION_C_AS_HEADER_
  
  fsl_version_t fsl_version = {
      0x00120E,
      "0.1.14",
      "0.1.14 (31-Jul-2002)",
      "This is OSSP fsl, Version 0.1.14 (31-Jul-2002)",
      "OSSP fsl 0.1.14 (31-Jul-2002)",
      "OSSP fsl/0.1.14",
      "@(#)OSSP fsl 0.1.14 (31-Jul-2002)",
      "$Id: fsl_version.c,v 1.1 2002/07/31 12:58:03 thl Exp $"
  };
  
  #endif /* _FSL_VERSION_C_AS_HEADER_ */
  

From ossp-cvs-owner@ossp.org  Wed Jul 31 15:20:51 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D8ABD767E8; Wed, 31 Jul 2002 15:20:50 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.c
Message-Id: <20020731132050.D8ABD767E8@mail.ossp.org>
Date: Wed, 31 Jul 2002 15:20:50 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   31-Jul-2002 15:20:50
  Branch: HEAD                             Handle: 2002073114205000

  Modified files:
    ossp-pkg/fsl            fsl.c

  Log:
    Oops! Null command caused openfsldebugpermanenterror being always set

  Summary:
    Revision    Changes     Path
    1.44        +1  -1      ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.43 -r1.44 fsl.c
  --- ossp-pkg/fsl/fsl.c	31 Jul 2002 12:58:03 -0000	1.43
  +++ ossp-pkg/fsl/fsl.c	31 Jul 2002 13:20:50 -0000	1.44
  @@ -661,7 +661,7 @@
   CUS:
       if (rc != FSL_OK)
           closefsllog();
  -    if (rc == FSL_ERR_ARG);
  +    if (rc == FSL_ERR_ARG)
           ctx.openfsldebugpermanenterror = TRUE;
   }
   

From ossp-cvs-owner@ossp.org  Wed Jul 31 16:09:35 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 44C46765EF; Wed, 31 Jul 2002 16:09:35 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl devtool.conf
Message-Id: <20020731140935.44C46765EF@mail.ossp.org>
Date: Wed, 31 Jul 2002 16:09:35 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   31-Jul-2002 16:09:35
  Branch: HEAD                             Handle: 2002073115093400

  Modified files:
    ossp-pkg/fsl            devtool.conf

  Log:
    reactivate version bumping

  Summary:
    Revision    Changes     Path
    1.10        +1  -1      ossp-pkg/fsl/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/devtool.conf
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 devtool.conf
  --- ossp-pkg/fsl/devtool.conf	31 Jul 2002 12:58:03 -0000	1.9
  +++ ossp-pkg/fsl/devtool.conf	31 Jul 2002 14:09:34 -0000	1.10
  @@ -49,7 +49,7 @@
       ./shtool version -l c -n "OSSP fsl" -p "fsl_" -e fsl_version.c
   	V=`./shtool version -lc -dlong fsl_version.c`
   	sed -e "s/Version .*(.*)/Version $V/g" <README >README.n && mv README.n README
  -    #cvs commit -m'bump version for release' README fsl_version.c
  +    cvs commit -m'bump version for release' README fsl_version.c
   
   %tag
   	V=`./shtool version -lc -dshort fsl_version.c` | sed -e 's;\.;_;g'`

From ossp-cvs-owner@ossp.org  Thu Aug  1 10:05:51 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E0DFB769CF; Thu,  1 Aug 2002 10:05:50 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.pod
Message-Id: <20020801080550.E0DFB769CF@mail.ossp.org>
Date: Thu,  1 Aug 2002 10:05:50 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   01-Aug-2002 10:05:50
  Branch: HEAD                             Handle: 2002080109055000

  Modified files:
    ossp-pkg/fsl            fsl.pod

  Log:
    remove developer internals from example and take mandatories into account

  Summary:
    Revision    Changes     Path
    1.19        +11 -6      ossp-pkg/fsl/fsl.pod
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.pod
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 fsl.pod
  --- ossp-pkg/fsl/fsl.pod	31 Jul 2002 07:39:20 -0000	1.18
  +++ ossp-pkg/fsl/fsl.pod	1 Aug 2002 08:05:50 -0000	1.19
  @@ -376,14 +376,15 @@
            regex="foo"
        ) 
        -> syslog(
  -         remotehost="localhost"
  +         remotehost="localhost",
  +         ident="l2"
        );
        info: prefix(
            prefix="[%b %d %H:%M:%S] <%L> [%P]"
        ) 
        -> {
            debug/error: buffer(
  -             size=1024
  +             size=65536
            ) 
            -> file(
                path="a"
  @@ -392,7 +393,8 @@
                size=65536
            ) -> 
            file(
  -             path="b"
  +             path="b",
  +             perm=0660
            )
        };
        prefix() -> {
  @@ -401,17 +403,20 @@
                regex="foo"
            ) 
            -> irc(
  -             host=irc.dev.de.cw.net
  +             host=irc.example.com,
  +             timeout=3
            );
            error: filter(
                nocase=1, 
                regex="foo"
            ) 
            -> smtp(
  -             host=sv1.dev.de.cw.net
  +             host=mail.example.com,
  +             rcpt=cfo@example.com
            );
            panic: smtp(
  -             host=sv1.dev.de.cw.net
  +             host=mail.example.com,
  +             rcpt=ceo@example.com
            )
        }
    };

From ossp-cvs-owner@ossp.org  Thu Aug  1 10:09:05 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E001F769CF; Thu,  1 Aug 2002 10:09:04 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc_config.c rc_const.h
Message-Id: <20020801080904.E001F769CF@mail.ossp.org>
Date: Thu,  1 Aug 2002 10:09:04 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   01-Aug-2002 10:09:04
  Branch: HEAD                             Handle: 2002080109090400

  Modified files:
    ossp-pkg/rc             rc_config.c rc_const.h

  Log:
    Rooted out magic numbers and made new default value section for strings.

  Summary:
    Revision    Changes     Path
    1.25        +3  -3      ossp-pkg/rc/rc_config.c
    1.11        +8  -0      ossp-pkg/rc/rc_const.h
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc_config.c
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 rc_config.c
  --- ossp-pkg/rc/rc_config.c	30 Jul 2002 16:32:40 -0000	1.24
  +++ ossp-pkg/rc/rc_config.c	1 Aug 2002 08:09:04 -0000	1.25
  @@ -296,7 +296,7 @@
       try { /* Test members for empty attributes */
           if (!configGetval(RC_EVL_VAL) && !configGetval(RC_EXC_VAL) \
               && !configGetval(RC_PRN_VAL))
  -            clioptSetval(RC_PRN_VAL, "1");
  +            clioptSetval(RC_PRN_VAL, RC_DEF_ON);
   
   /*        if (!configGetval(RC_USE_VAL))
           if (!configGetval(RC_HLP_VAL))
  @@ -345,14 +345,14 @@
           if (!configGetval(RC_ASS_VAL))*/
   
           if (!configGetval(RC_DEF_VAL))
  -            clioptSetval(RC_DEF_VAL, "^%(\\w+).*?\\n(.*?)^$");
  +            clioptSetval(RC_DEF_VAL, RC_DEF_DEF);
   
   /*        if (!configGetval(RC_REF_VAL))
           if (!configGetval(RC_PRM_VAL))
           if (!configGetval(RC_TRM_VAL))*/
   
           if (!configGetval(RC_NCF_VAL))
  -            clioptSetval(RC_NCF_VAL, "config");
  +            clioptSetval(RC_NCF_VAL, RC_DEF_NCF);
   
   /*        if (!configGetval(RC_CMN_VAL))
           if (!configGetval(RC_DFL_VAL))
  Index: ossp-pkg/rc/rc_const.h
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 rc_const.h
  --- ossp-pkg/rc/rc_const.h	30 Jul 2002 16:33:51 -0000	1.10
  +++ ossp-pkg/rc/rc_const.h	1 Aug 2002 08:09:04 -0000	1.11
  @@ -70,6 +70,7 @@
   #define RC_DFL_DESC "Name of the default section in a rcfile."
   #define RC_ERR_DESC "Name of the error section in a rcfile."
   
  +/* Option friendly names, should not include newline termination */
   #define RC_USE_NAME "usage"
   #define RC_DBG_NAME "debug"
   #define RC_VER_NAME "version"
  @@ -102,6 +103,7 @@
   #define RC_DFL_NAME "NameDefault"       
   #define RC_ERR_NAME "NameError"
   
  +/* Error and warning strings, should not include newline termination */
   #define RC_ERRSTR_OK  "Okay"
   #define RC_ERRSTR_USE "Usage"
   #define RC_ERRSTR_MEM "Memory"
  @@ -117,5 +119,11 @@
   #define RC_WRNSTR_NUL "NULLPointer"
   
   #define RC_GLOB_WILD  "all"
  +
  +/* Default values, do not include newlines and special chars must be escaped */
  +#define RC_DEF_ON     "1"                       /* Digital switch */
  +#define RC_DEF_OFF    "0"                       /* Digital switch */
  +#define RC_DEF_DEF    "^%(\\w+).*?\\n(.*?)^$"   /* Section definition */
  +#define RC_DEF_NCF    "config"                  /* Config section name */
   
   #endif /* __OSSPRC_CONST_H__ */

From ossp-cvs-owner@ossp.org  Thu Aug  1 10:55:06 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 50E53767E8; Thu,  1 Aug 2002 10:55:06 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc_anal.c ossp-pkg/rc/rc_test rcfuncs
Message-Id: <20020801085506.50E53767E8@mail.ossp.org>
Date: Thu,  1 Aug 2002 10:55:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   01-Aug-2002 10:55:06
  Branch: HEAD                             Handle: 2002080109550500

  Modified files:
    ossp-pkg/rc             rc_anal.c
    ossp-pkg/rc/rc_test     rcfuncs

  Log:
    Sqash double-slash pathname bug.

  Summary:
    Revision    Changes     Path
    1.9         +2  -1      ossp-pkg/rc/rc_anal.c
    1.4         +3  -1      ossp-pkg/rc/rc_test/rcfuncs
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc_anal.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 rc_anal.c
  --- ossp-pkg/rc/rc_anal.c	28 Jun 2002 17:43:23 -0000	1.8
  +++ ossp-pkg/rc/rc_anal.c	1 Aug 2002 08:55:05 -0000	1.9
  @@ -130,7 +130,8 @@
           if (*(kszPathexpr + strlen(kszPathexpr)) != '/') {
               (*ppInst)->m_szLocs = malloc(strlen(kszPathexpr) + 2 * sizeof(char));
               strcpy((*ppInst)->m_szLocs, kszPathexpr);
  -            strcat((*ppInst)->m_szLocs, "/");
  +            if ((char)*((*ppInst)->m_szLocs + strlen((*ppInst)->m_szLocs) - 1) != '/')
  +                strcat((*ppInst)->m_szLocs, "/");
           }
           else
               (*ppInst)->m_szLocs = strdup(kszPathexpr);
  Index: ossp-pkg/rc/rc_test/rcfuncs
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 rcfuncs
  --- ossp-pkg/rc/rc_test/rcfuncs	29 Jul 2002 15:51:43 -0000	1.3
  +++ ossp-pkg/rc/rc_test/rcfuncs	1 Aug 2002 08:55:05 -0000	1.4
  @@ -1,7 +1,7 @@
   echo "**** Funcfile ist hier und wirds gemerged ****"
   echo "And again" >>disfile.txt
   cat disfile.txt | md5 >>disfile.txt
  -uname -a
  +uname -pn
   
   echo "Peter SMEJ ist chef Entwickler."
   echo "Thomas LOTTERER ist chef Entwickler."
  @@ -9,3 +9,5 @@
   echo "Ralf ENGELSCHALL ist aber chef-chef Entwickler!"
   
   echo "**** Funcfile ist fertig, rc gehts weiter ****"
  +echo
  +

From ossp-cvs-owner@ossp.org  Thu Aug  1 11:33:25 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 37015769CE; Thu,  1 Aug 2002 11:33:25 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl README fsl_version.c
Message-Id: <20020801093325.37015769CE@mail.ossp.org>
Date: Thu,  1 Aug 2002 11:33:25 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Aug-2002 11:33:25
  Branch: HEAD                             Handle: 2002080110332400

  Modified files:
    ossp-pkg/fsl            README fsl_version.c

  Log:
    bump version for release

  Summary:
    Revision    Changes     Path
    1.16        +1  -1      ossp-pkg/fsl/README
    1.2         +9  -9      ossp-pkg/fsl/fsl_version.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/README
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 README
  --- ossp-pkg/fsl/README	31 Jul 2002 12:58:03 -0000	1.15
  +++ ossp-pkg/fsl/README	1 Aug 2002 09:33:24 -0000	1.16
  @@ -5,7 +5,7 @@
     |_| |___/_|
                
     OSSP fsl - Faking/Flexible Syslog Library
  -  Version 0.1.14 (31-Jul-2002)
  +  Version 0.1.13 (01-Aug-2002)
   
     ABSTRACT
   
  Index: ossp-pkg/fsl/fsl_version.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 fsl_version.c
  --- ossp-pkg/fsl/fsl_version.c	31 Jul 2002 12:58:03 -0000	1.1
  +++ ossp-pkg/fsl/fsl_version.c	1 Aug 2002 09:33:24 -0000	1.2
  @@ -8,7 +8,7 @@
   #ifndef _FSL_VERSION_C_
   #define _FSL_VERSION_C_
   
  -#define FSL_VERSION 0x00120E
  +#define FSL_VERSION 0x00120D
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _FSL_VERSION_C_AS_HEADER_
   
   fsl_version_t fsl_version = {
  -    0x00120E,
  -    "0.1.14",
  -    "0.1.14 (31-Jul-2002)",
  -    "This is OSSP fsl, Version 0.1.14 (31-Jul-2002)",
  -    "OSSP fsl 0.1.14 (31-Jul-2002)",
  -    "OSSP fsl/0.1.14",
  -    "@(#)OSSP fsl 0.1.14 (31-Jul-2002)",
  -    "$Id: fsl_version.c,v 1.1 2002/07/31 12:58:03 thl Exp $"
  +    0x00120D,
  +    "0.1.13",
  +    "0.1.13 (01-Aug-2002)",
  +    "This is OSSP fsl, Version 0.1.13 (01-Aug-2002)",
  +    "OSSP fsl 0.1.13 (01-Aug-2002)",
  +    "OSSP fsl/0.1.13",
  +    "@(#)OSSP fsl 0.1.13 (01-Aug-2002)",
  +    "$Id: fsl_version.c,v 1.2 2002/08/01 09:33:24 rse Exp $"
   };
   
   #endif /* _FSL_VERSION_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Thu Aug  1 11:36:53 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A527F769CE; Thu,  1 Aug 2002 11:36:53 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl Makefile.in configure.ac devtool.conf
Message-Id: <20020801093653.A527F769CE@mail.ossp.org>
Date: Thu,  1 Aug 2002 11:36:53 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Aug-2002 11:36:53
  Branch: HEAD                             Handle: 2002080110365300

  Modified files:
    ossp-pkg/fsl            Makefile.in configure.ac devtool.conf

  Log:
    cleanup

  Summary:
    Revision    Changes     Path
    1.8         +2  -2      ossp-pkg/fsl/Makefile.in
    1.11        +0  -3      ossp-pkg/fsl/configure.ac
    1.11        +1  -1      ossp-pkg/fsl/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/Makefile.in
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 Makefile.in
  --- ossp-pkg/fsl/Makefile.in	31 Jul 2002 12:58:03 -0000	1.7
  +++ ossp-pkg/fsl/Makefile.in	1 Aug 2002 09:36:53 -0000	1.8
  @@ -95,7 +95,7 @@
   
   $(LIB_NAME): $(LIB_OBJS)
   	@$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $(LIB_NAME) $(LIB_OBJS) $(LIB_DEPS) -rpath $(libdir) \
  -	    -version-info `$(SHTOOL) version -l txt -d libtool VERSION` $(LIBS)
  +	    -version-info `$(SHTOOL) version -lc -dlibtool fsl_version.c` $(LIBS)
   
   $(TST_NAME): $(TST_OBJS) $(LIB_NAME)
   	@$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $(TST_NAME) $(TST_OBJS) $(LIB_NAME) $(LIBS)
  @@ -104,7 +104,7 @@
   $(MAN_NAME): fsl.pod fsl_version.c
   	VS=`$(SHTOOL) version -lc -dshort fsl_version.c`; \
   	VL=`$(SHTOOL) version -lc -dlong fsl_version.c`; \
  -	D=`$(SHTOOL) version -l txt -d long VERSION | sed -e 's;.*(;;' -e 's;).*;;'`; \
  +	D=`$(SHTOOL) version -lc -dlong fsl_version.c | sed -e 's;.*(;;' -e 's;).*;;'`; \
   	$(POD2MAN) --quotes=none \
   	           --section=3 --center="Faking/Flexible Syslog Library" \
   	           --release="$$D" --date="OSSP fsl $$VS" fsl.pod | \
  Index: ossp-pkg/fsl/configure.ac
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 configure.ac
  --- ossp-pkg/fsl/configure.ac	31 Jul 2002 12:58:03 -0000	1.10
  +++ ossp-pkg/fsl/configure.ac	1 Aug 2002 09:36:53 -0000	1.11
  @@ -37,9 +37,6 @@
   echo "Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>"
   echo "Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>"
   
  -FSL_VERSION_STR=`./shtool version -l txt -d long VERSION`
  -AC_SUBST(FSL_VERSION_STR)
  -
   AC_PROG_MAKE_SET
   AC_PROG_CC
   AC_CHECK_DEBUGGING
  Index: ossp-pkg/fsl/devtool.conf
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 devtool.conf
  --- ossp-pkg/fsl/devtool.conf	31 Jul 2002 14:09:34 -0000	1.10
  +++ ossp-pkg/fsl/devtool.conf	1 Aug 2002 09:36:53 -0000	1.11
  @@ -49,11 +49,11 @@
       ./shtool version -l c -n "OSSP fsl" -p "fsl_" -e fsl_version.c
   	V=`./shtool version -lc -dlong fsl_version.c`
   	sed -e "s/Version .*(.*)/Version $V/g" <README >README.n && mv README.n README
  -    cvs commit -m'bump version for release' README fsl_version.c
   
   %tag
   	V=`./shtool version -lc -dshort fsl_version.c` | sed -e 's;\.;_;g'`
       echo "+++ tagging CVS sources as FSL_${V}"
  +    cvs commit -m 'flush pending changes before tagging'
       cvs tag FSL_${V}
   
   %dist

From ossp-cvs-owner@ossp.org  Thu Aug  1 11:38:44 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A8DE0769CE; Thu,  1 Aug 2002 11:38:44 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.pod
Message-Id: <20020801093844.A8DE0769CE@mail.ossp.org>
Date: Thu,  1 Aug 2002 11:38:44 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Aug-2002 11:38:44
  Branch: HEAD                             Handle: 2002080110384400

  Modified files:
    ossp-pkg/fsl            fsl.pod

  Log:
    joking

  Summary:
    Revision    Changes     Path
    1.20        +2  -1      ossp-pkg/fsl/fsl.pod
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.pod
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 fsl.pod
  --- ossp-pkg/fsl/fsl.pod	1 Aug 2002 08:05:50 -0000	1.19
  +++ ossp-pkg/fsl/fsl.pod	1 Aug 2002 09:38:44 -0000	1.20
  @@ -416,7 +416,8 @@
            );
            panic: smtp(
                host=mail.example.com,
  -             rcpt=ceo@example.com
  +             rcpt=ceo@example.com,
  +             subject="Attention: Company on risk!"
            )
        }
    };

From ossp-cvs-owner@ossp.org  Thu Aug  1 11:45:21 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 281D8769D5; Thu,  1 Aug 2002 11:45:20 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc 00TODO rc_anal.c
Message-Id: <20020801094520.281D8769D5@mail.ossp.org>
Date: Thu,  1 Aug 2002 11:45:20 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   01-Aug-2002 11:45:20
  Branch: HEAD                             Handle: 2002080110451900

  Modified files:
    ossp-pkg/rc             00TODO rc_anal.c

  Log:
    Fix rcfile globbing.

  Summary:
    Revision    Changes     Path
    1.33        +2  -0      ossp-pkg/rc/00TODO
    1.10        +10 -4      ossp-pkg/rc/rc_anal.c
  ____________________________________________________________________________

  Index: ossp-pkg/rc/00TODO
  ============================================================
  $ cvs diff -u -r1.32 -r1.33 00TODO
  --- ossp-pkg/rc/00TODO	30 Jul 2002 16:36:41 -0000	1.32
  +++ ossp-pkg/rc/00TODO	1 Aug 2002 09:45:19 -0000	1.33
  @@ -17,6 +17,8 @@
     Not efficient (reads whole files when only parts are needed...)
     What's going on with ^ in patterns? Something is broken.
     Resolve memory leaks with Dmalloc, ask for help.
  +  Rc file prefix rc. is hardcoded, and when wildcard is given, the prefix is
  +    used in selecting files. Location is not properly used. See rc_anal.c.
   
   Document
     Refs, pri, user, group, ci, go only in normal (not special) sections.
  Index: ossp-pkg/rc/rc_anal.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 rc_anal.c
  --- ossp-pkg/rc/rc_anal.c	1 Aug 2002 08:55:05 -0000	1.9
  +++ ossp-pkg/rc/rc_anal.c	1 Aug 2002 09:45:19 -0000	1.10
  @@ -64,6 +64,7 @@
       else { /* Only enter block with valid string, strdup can't handle NULL */
           (*ppInst)->m_szRcs = malloc(sizeof(char **));
           if (strcmp(kszName, RC_GLOB_WILD)) {
  +            (*ppInst)->m_szRcs = malloc(sizeof(*((*ppInst)->m_szRcs)));
               *(*ppInst)->m_szRcs = strdup("rc."); /* FIXME: Remove hardcoded */
               strcat(*(*ppInst)->m_szRcs, kszName);
           }
  @@ -184,8 +185,8 @@
   rc_return_t analGloblocs(rc_anal_t **ppInst)
   {
       struct dirent ***pppFiles = NULL;
  -    int nIter  = 0;
  -    int nCount = 0;
  +    int nCount = 0; /* How many globbed files we find */
  +    int nIter  = 0; /* Iterate over the number of globbed files */
   
       assert(*ppInst); /* Verify sanity */
   
  @@ -193,11 +194,13 @@
       pppFiles = malloc(sizeof(struct dirent));
       nCount = scandir((*ppInst)->m_szLocs, pppFiles, analFileselect, alphasort);
   
  -    /* Check out the health of this directory */
  +    /* Check out the health of this directory listing */
       if (nCount == -1)
           return(RC_THROW(RC_ERR_DIR));
  +    else /* Allocate for the string array to hold directory entry names */
  +        (*ppInst)->m_szRcs = malloc(sizeof((*((*ppInst)->m_szRcs))) * (nCount + 1));
   
  -    /* Loop through file index setting Rf file names according to dirent */
  +    /* Loop through file index setting rc file names according to dirent */
       for (nIter = 0; nIter < nCount; ++nIter)
           (*ppInst)->m_szRcs[nIter] = strdup((*pppFiles)[nIter]->d_name);
       (*ppInst)->m_szRcs[nIter] = NULL;
  @@ -239,6 +242,9 @@
   ************************************************/
   rc_return_t analDelete(rc_anal_t *pInst)
   {
  +/* FIXME: It could be that pInst needs to be a double pointer to */
  +/*        be properly used in destruction. Otherwise members are */
  +/*        just copies of the stack parameters passed in.         */
       int nIter = 0;
   
       while (pInst->m_szRcs[nIter])   /* Rc file names       */

From ossp-cvs-owner@ossp.org  Thu Aug  1 11:48:57 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 109B1765EB; Thu,  1 Aug 2002 11:48:56 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.pod
Message-Id: <20020801094856.109B1765EB@mail.ossp.org>
Date: Thu,  1 Aug 2002 11:48:56 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   01-Aug-2002 11:48:55
  Branch: HEAD                             Handle: 2002080110485500

  Modified files:
    ossp-pkg/fsl            fsl.pod

  Log:
    I think you mean 'at risk' and not 'on risk'. Nice joke.

  Summary:
    Revision    Changes     Path
    1.21        +1  -1      ossp-pkg/fsl/fsl.pod
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.pod
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 fsl.pod
  --- ossp-pkg/fsl/fsl.pod	1 Aug 2002 09:38:44 -0000	1.20
  +++ ossp-pkg/fsl/fsl.pod	1 Aug 2002 09:48:55 -0000	1.21
  @@ -417,7 +417,7 @@
            panic: smtp(
                host=mail.example.com,
                rcpt=ceo@example.com,
  -             subject="Attention: Company on risk!"
  +             subject="Attention: Company at risk!"
            )
        }
    };

From ossp-cvs-owner@ossp.org  Thu Aug  1 12:18:07 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4853D765EB; Thu,  1 Aug 2002 12:18:07 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl ChangeLog INSTALL README configure.ac fsl.ac ...
Message-Id: <20020801101807.4853D765EB@mail.ossp.org>
Date: Thu,  1 Aug 2002 12:18:07 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Aug-2002 12:18:07
  Branch: HEAD                             Handle: 197001010100001028193486

  Modified files:
    ossp-pkg/fsl            ChangeLog INSTALL README configure.ac fsl.ac
                            fsl.pod
  Removed files:
    ossp-pkg/fsl            fsl.sample.cfg

  Log:
    cleanups

  Summary:
    Revision    Changes     Path
    1.2         +13 -0      ossp-pkg/fsl/ChangeLog
    1.2         +3  -1      ossp-pkg/fsl/INSTALL
    1.17        +2  -1      ossp-pkg/fsl/README
    1.12        +2  -35     ossp-pkg/fsl/configure.ac
    1.3         +43 -2      ossp-pkg/fsl/fsl.ac
    1.22        +79 -4      ossp-pkg/fsl/fsl.pod
    NONE        +0  -19     ossp-pkg/fsl/fsl.sample.cfg
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/ChangeLog
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 ChangeLog
  --- ossp-pkg/fsl/ChangeLog	30 Jul 2002 18:51:51 -0000	1.1
  +++ ossp-pkg/fsl/ChangeLog	1 Aug 2002 10:18:06 -0000	1.2
  @@ -1,4 +1,17 @@
  +    __     _ 
  +   / _|___| |
  +  | |_/ __| |
  +  |  _\__ \ |
  +  |_| |___/_|
  +             
  +  OSSP fsl - Faking/Flexible Syslog Library
   
     ChangeLog
     =========
  +
  +  Changes between 0.1.* and 1.0.0 (09-Jul-2002 to 01-Aug-2002)
  +
  +    *) Switched to OSSP l2 for message logging
  +    *) Switched to OSSP cfg and OSSP pcre for configuration parsing
  +    *) Based on fakesyslog.c from OpenPKG 1.0
   
  Index: ossp-pkg/fsl/INSTALL
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 INSTALL
  --- ossp-pkg/fsl/INSTALL	27 Jul 2002 18:13:51 -0000	1.1
  +++ ossp-pkg/fsl/INSTALL	1 Aug 2002 10:18:06 -0000	1.2
  @@ -11,7 +11,9 @@
     To install OSSP fsl into /path/to/fsl/ perform
     the following steps in your shell:
         
  -    $ ./configure --prefix=/path/to/fsl
  +    $ ./configure --prefix=/path/to/fsl \
  +                 [--with-fsl-cfgdir=/path/to/fsl/cfg/dir] \
  +                 [--with-fsl-debug='...']
       $ make
       $ make install
   
  Index: ossp-pkg/fsl/README
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 README
  --- ossp-pkg/fsl/README	1 Aug 2002 09:33:24 -0000	1.16
  +++ ossp-pkg/fsl/README	1 Aug 2002 10:18:06 -0000	1.17
  @@ -47,8 +47,9 @@
   
     HOME AND DOCUMENTATION
   
  -  The documentation and latest release can be found on
  +  The documentation and latest sources can be found on
   
     o http://www.ossp.org/pkg/lib/fsl/
  +  o http://cvs.ossp.org/pkg/lib/fsl/
     o  ftp://ftp.ossp.org/pkg/lib/fsl/
   
  Index: ossp-pkg/fsl/configure.ac
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 configure.ac
  --- ossp-pkg/fsl/configure.ac	1 Aug 2002 09:36:53 -0000	1.11
  +++ ossp-pkg/fsl/configure.ac	1 Aug 2002 10:18:06 -0000	1.12
  @@ -34,6 +34,7 @@
   dnl #   announce our version
   V=`./shtool version -lc -dlong fsl_version.c`
   ./shtool echo -e "Configuring %BOSSP fsl%b (Faking/Flexible Syslog Library), Version %B${V}%b"
  +echo "Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>"
   echo "Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>"
   echo "Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>"
   
  @@ -94,41 +95,7 @@
   AC_SUBST(LIB_DEPS)
   AC_CONFIG_SUBDIRS([$SUBDIR_L2 $SUBDIR_CFG $SUBDIR_PCRE])
   
  -AC_MSG_CHECKING(for platform)
  -PLATFORM=`sh ./config.guess`
  -if test ".$PLATFORM" != .; then
  -    PLATFORM=`sh ./config.sub $PLATFORM`
  -fi
  -AC_MSG_RESULT([$PLATFORM])
  -case $PLATFORM in
  -    *-*-solaris2.[[6-9]]* )
  -        AC_DEFINE(HAVE_VSYSLOG_USVALIST, 1, [vsyslog(3) uses __va_list])
  -        ;;
  -    *-*-osf* )
  -        CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED"
  -        ;;
  -esac
  -
  -AC_MSG_CHECKING(for configuration directory)
  -AC_ARG_WITH(cfgdir,dnl
  -[  --with-cfgdir=PATH      set configuration directory (default=PREFIX/etc/fsl)],
  -[ fsl_cfgdir=$withval ],
  -[ fsl_cfgdir="${prefix}/etc/fsl" ]
  -)dnl
  -AC_DEFINE_UNQUOTED(FSL_CFGDIR, "$fsl_cfgdir", [Define configuration directory])
  -FSL_CFGDIR="$fsl_cfgdir"
  -AC_SUBST(FSL_CFGDIR)
  -AC_MSG_RESULT([$fsl_cfgdir])
  -
  -AC_MSG_CHECKING(for debugging using a l2spec)
  -AC_ARG_WITH(debug,dnl
  -[  --with-debug=L2SPEC     set debugging using a l2spec (default="")],
  -[ fsl_debug=$withval ],
  -[ fsl_debug="null()" ]
  -)dnl
  -AC_DEFINE_UNQUOTED(FSL_DEBUG,  "$fsl_debug",  [Define debugging using a l2spec])
  -AC_MSG_RESULT([$fsl_debug])
  -
  +dnl #   output generation
   AC_CONFIG_HEADERS(config.h)
   AC_CONFIG_FILES([Makefile fsl-config])
   AC_CONFIG_COMMANDS([adjustment], [chmod a+x fsl-config])
  Index: ossp-pkg/fsl/fsl.ac
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 fsl.ac
  --- ossp-pkg/fsl/fsl.ac	27 Jul 2002 15:37:21 -0000	1.2
  +++ ossp-pkg/fsl/fsl.ac	1 Aug 2002 10:18:06 -0000	1.3
  @@ -28,11 +28,52 @@
   dnl ##  fsl.ac: OSSP fsl Autoconf checks
   dnl ##
   
  -dnl #   Check for anything OSSP SA wants to know
  +dnl #   Check for anything OSSP fsl wants to know
   dnl #   configure.in:
   dnl #     FSL_CHECK_ALL
   
   AC_DEFUN(FSL_CHECK_ALL,[
  -    AC_CHECK_HEADERS(syslog.h)
  +
  +dnl #   header checking
  +AC_CHECK_HEADERS(syslog.h)
  +
  +dnl #   platform specific hacks
  +AC_MSG_CHECKING(for platform)
  +PLATFORM=`sh ./config.guess`
  +if test ".$PLATFORM" != .; then
  +    PLATFORM=`sh ./config.sub $PLATFORM`
  +fi
  +AC_MSG_RESULT([$PLATFORM])
  +case $PLATFORM in
  +    *-*-solaris2.[[6-9]]* )
  +        AC_DEFINE(HAVE_VSYSLOG_USVALIST, 1, [vsyslog(3) uses __va_list])
  +        ;;
  +    *-*-osf* )
  +        CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED"
  +        ;;
  +esac
  +
  +dnl #   built-time configuration parameter --with-cfgdir
  +AC_MSG_CHECKING(for configuration directory)
  +AC_ARG_WITH(fsl-cfgdir,dnl
  +[  --with-fsl-cfgdir=PATH  set configuration directory (default=PREFIX/etc/fsl)],
  +[ fsl_cfgdir=$withval ],
  +[ fsl_cfgdir="${prefix}/etc/fsl" ]
  +)dnl
  +AC_DEFINE_UNQUOTED(FSL_CFGDIR, "$fsl_cfgdir", [Define for OSSP fsl configuration directory])
  +FSL_CFGDIR="$fsl_cfgdir"
  +AC_SUBST(FSL_CFGDIR)
  +AC_MSG_RESULT([$fsl_cfgdir])
  +
  +dnl #   built-time configuration parameter --with-debug
  +AC_MSG_CHECKING(for debugging using a l2spec)
  +AC_ARG_WITH(fsl-debug,dnl
  +[  --with-fsl-debug=L2SPEC set internal debugging (default="")],
  +[ fsl_debug=$withval ],
  +[ fsl_debug="" ]
  +)dnl
  +AC_DEFINE_UNQUOTED(FSL_DEBUG, "$fsl_debug", [Define for OSSP fsl debugging])
  +AC_MSG_RESULT([$fsl_debug])
  +
   ])
   
  Index: ossp-pkg/fsl/fsl.pod
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 fsl.pod
  --- ossp-pkg/fsl/fsl.pod	1 Aug 2002 09:48:55 -0000	1.21
  +++ ossp-pkg/fsl/fsl.pod	1 Aug 2002 10:18:06 -0000	1.22
  @@ -78,7 +78,7 @@
   top "C<noop>" channel to form a single channel tree. Further calls to
   syslog(3) will then inject log messages into this channel tree.
   
  -=head1 OSSP L2 CHANNEL TREE SPECIFICATION
  +=head1 OSSP L2: CHANNEL TREE SPECIFICATION
   
   B<OSSP l2> builds its working configuration using a global environment
   object and channels which are interconnected to form a channel tree.
  @@ -165,7 +165,7 @@
   B<param_value>    ::= single-quoted, double-quoted
                      or unquoted text
   
  -=head1 AVAILABLE OSSP L2 CHANNELS
  +=head1 OSSP L2: AVAILABLE CHANNELS
   
   B<OSSP l2> provides various channels. The following lists their
   B<channel_name> prefixed with an 'C<o>' or a 'C<f>' indicating whether
  @@ -347,7 +347,7 @@
   use cannot use the I<target>=C<local> feature of B<OSSP l2>, because it
   would lead to a endless run-time loop! Be careful here, please.
   
  -=head1 EXAMPLES
  +=head1 OSSP L2: EXAMPLES
   
   =head2 Example 1: simple stderr logging
   
  @@ -368,7 +368,8 @@
   
   =head2 Example 3: complex logging
   
  -A very complex I<l2-spec> logging example where... FIXME...
  +A very complex I<l2-spec> logging example follows.
  +Figuring out the details is left as an exercise to the reader ;)
   
    noop
    -> {
  @@ -421,6 +422,80 @@
            )
        }
    };
  +
  +=head1 EXAMPLE
  +
  + #   map syslog(3) API priorities to OSSP l2 levels
  + #   Notes: - syslog(3) has no corresponding priority for OSSP l2 "trace"
  + #          - OSSP l2 has no corresponding level for syslog(3) emerg
  + map emerg   panic;
  + map alert   panic;
  + map crit    critical;
  + map err     error;
  + map warning warning;
  + map notice  notice;
  + map info    info;
  + map debug   debug;
  + 
  + #   equivalent of the usual INN syslog.conf(5) entries:
  + #   news.crit    @l_prefix@/var/inn/log/news.crit
  + #   news.err     @l_prefix@/var/inn/log/news.err
  + #   news.notice  @l_prefix@/var/inn/log/news.notice
  + ident (.+)/news q{
  +     prefix(
  +       prefix="%b %d %H:%M:%S %N $1[%P]: ", 
  +       timezone=local
  +     ) 
  +     -> {
  +         critical: file(
  +             path="@l_prefix@/var/inn/log/news.crit",
  +             append=1, 
  +             perm=0644
  +         );
  +         error: file(
  +             path="@l_prefix@/var/inn/log/news.err",
  +             append=1, 
  +             perm=0644
  +         );
  +         notice: file(
  +             path="@l_prefix@/var/inn/log/news.notice",
  +             append=1, 
  +             perm=0644
  +         )
  +     }
  + }
  + 
  + #   default logging
  + default (.+)/.+ q{
  +     debug: 
  +     prefix(
  +         prefix="%b %d %H:%M:%S <%L> $1[%P]: ", 
  +         timezone=local
  +     ) -> 
  +     file(
  +         path="@l_prefix@/var/fsl/default.log", 
  +         append=1, 
  +         perm=0644
  +     )
  + };
  +
  +=head1 ENVIRONMENT
  +
  +The following environment variables affect the execution of B<OSSP fsl>:
  +
  +=over 4
  +
  +=item C<FSL_DEBUG>
  +
  +This variable overrides the default value (hard-coded in B<OSSP fsl>
  +under built-time via C<--with-fsl-debug=>I<l2-spec>) under run-time.
  +The value has to be a valid B<OSSP l2> channel tree specification. An
  +empty value (either hard-coded or overridden) disables B<OSSP fsl>
  +debugging via B<OSSP l2> (but still logs errors to F<stderr>). A value
  +of "C<null>" instead disables debugging at all by discarding all
  +messages.
  +
  +=back
   
   =head1 FILES
   
  

From ossp-cvs-owner@ossp.org  Thu Aug  1 13:20:40 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CF381765EB; Thu,  1 Aug 2002 13:20:39 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg cfg_node.c
Message-Id: <20020801112039.CF381765EB@mail.ossp.org>
Date: Thu,  1 Aug 2002 13:20:39 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Aug-2002 13:20:39
  Branch: HEAD                             Handle: 2002080112203900

  Modified files:
    ossp-pkg/cfg            cfg_node.c

  Log:
    get rid of warning

  Summary:
    Revision    Changes     Path
    1.14        +2  -1      ossp-pkg/cfg/cfg_node.c
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/cfg_node.c
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 cfg_node.c
  --- ossp-pkg/cfg/cfg_node.c	18 Jul 2002 15:34:55 -0000	1.13
  +++ ossp-pkg/cfg/cfg_node.c	1 Aug 2002 11:20:39 -0000	1.14
  @@ -443,8 +443,9 @@
           fprintf(stderr, "step2: child node 0x%lx\n", (unsigned long)node);
           do {
               if (node->token != NULL) {
  +                size_t l;
                   token = node->token;
  -                size_t l = strlen(token);
  +                l = strlen(token);
                   fprintf(stderr, "step2: child node: \"%s\"\n", token);
                   if (   (l == 1 && l == nSel && token[0] == '*')
                       || (l == nSel && strncmp(token, cpSel, nSel) == 0)) {

From ossp-cvs-owner@ossp.org  Thu Aug  1 13:28:01 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 36597765EB; Thu,  1 Aug 2002 13:28:01 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pcre devtool.conf
Message-Id: <20020801112801.36597765EB@mail.ossp.org>
Date: Thu,  1 Aug 2002 13:28:01 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Aug-2002 13:28:01
  Branch: HEAD                             Handle: 2002080112280000

  Modified files:
    ossp-pkg/pcre           devtool.conf

  Log:
    require latest version

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/pcre/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/pcre/devtool.conf
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.conf
  --- ossp-pkg/pcre/devtool.conf	14 Mar 2002 15:32:48 -0000	1.2
  +++ ossp-pkg/pcre/devtool.conf	1 Aug 2002 11:28:00 -0000	1.3
  @@ -3,7 +3,7 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.0 "1.6.*" echo install mkdir fixperm tarball
  +    @autogen shtool   1.6.1 "1.6.*" echo install mkdir fixperm tarball
       @autogen libtool  1.4.2 "1.4*"
       @autogen autoconf 2.53  "2.5[3-9]*"
   

From ossp-cvs-owner@ossp.org  Thu Aug  1 13:41:06 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5EDDB765ED; Thu,  1 Aug 2002 13:41:06 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl .cvsignore Makefile.in fsl.ac fsl.c fsl.pod f...
Message-Id: <20020801114106.5EDDB765ED@mail.ossp.org>
Date: Thu,  1 Aug 2002 13:41:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Aug-2002 13:41:06
  Branch: HEAD                             Handle: 2002080112410500

  Added files:
    ossp-pkg/fsl            fsl_test.cfg
  Modified files:
    ossp-pkg/fsl            .cvsignore Makefile.in fsl.ac fsl.c fsl.pod

  Log:
    add support for FSL_PREFIX and FSL_DEBUG variables.

  Summary:
    Revision    Changes     Path
    1.2         +5  -2      ossp-pkg/fsl/.cvsignore
    1.9         +11 -2      ossp-pkg/fsl/Makefile.in
    1.4         +19 -5      ossp-pkg/fsl/fsl.ac
    1.45        +14 -9      ossp-pkg/fsl/fsl.c
    1.23        +18 -7      ossp-pkg/fsl/fsl.pod
    1.1         +27 -0      ossp-pkg/fsl/fsl_test.cfg
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/.cvsignore
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 .cvsignore
  --- ossp-pkg/fsl/.cvsignore	9 Jul 2002 09:42:09 -0000	1.1
  +++ ossp-pkg/fsl/.cvsignore	1 Aug 2002 11:41:05 -0000	1.2
  @@ -4,10 +4,13 @@
   config.h.in
   config.sub
   configure
  -libtool.m4
  -ltmain.sh
   fsl-config
   fsl.3
   fsl.h
   fsl_test
  +fsl_test.cfg
  +fsl_test.debug
  +fsl_test.syslog
  +libtool.m4
  +ltmain.sh
   shtool
  Index: ossp-pkg/fsl/Makefile.in
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 Makefile.in
  --- ossp-pkg/fsl/Makefile.in	1 Aug 2002 09:36:53 -0000	1.8
  +++ ossp-pkg/fsl/Makefile.in	1 Aug 2002 11:41:05 -0000	1.9
  @@ -60,6 +60,7 @@
   TST_OBJS    = fsl_test.o
   
   FSL_CFGDIR  = @FSL_CFGDIR@
  +FSL_PREFIX  = @FSL_PREFIX@
   
   SUBDIRS     = @SUBDIR_L2@ @SUBDIR_CFG@ @SUBDIR_PCRE@
   
  @@ -108,10 +109,17 @@
   	$(POD2MAN) --quotes=none \
   	           --section=3 --center="Faking/Flexible Syslog Library" \
   	           --release="$$D" --date="OSSP fsl $$VS" fsl.pod | \
  -	sed -e "s;FSL_VERSION_STR;$$VL;" -e "s;FSL_CFGDIR;$(FSL_CFGDIR);g" >fsl.3
  +	sed -e "s;FSL_VERSION_STR;$$VL;" \
  +	    -e "s;\@FSL_CFGDIR\@;$(FSL_CFGDIR);g" \
  +	    -e "s;\@FSL_PREFIX\@;$(FSL_PREFIX);g" >fsl.3
   
   check: $(TST_NAME)
  -	@$(LIBTOOL) --mode=execute ./$(TST_NAME)
  +	@$(RM) fsl_test.debug >/dev/null 2>&1 || true; \
  +	$(RM) fsl_test.syslog >/dev/null 2>&1 || true; \
  +	FSL_CFGDIR=.; export FSL_CFGDIR; \
  +	FSL_PREFIX=fsl_test.cfg; export FSL_PREFIX; \
  +	FSL_DEBUG="trace: file(path=fsl_test.debug)"; export FSL_DEBUG; \
  +	$(LIBTOOL) --mode=execute ./$(TST_NAME)
   
   install: all
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
  @@ -136,6 +144,7 @@
   	@$(MAKE) $(MFLAGS) _SUBDIRS_clean
   	-$(RM) $(LIB_NAME) $(LIB_OBJS)
   	-$(RM) $(TST_NAME) $(TST_OBJS)
  +	-$(RM) fsl_test.debug fsl_test.syslog >/dev/null 2>&1 || $(TRUE)
   	-$(RM) -r .libs >/dev/null 2>&1 || $(TRUE)
   	-$(RM) *.o *.lo
   
  Index: ossp-pkg/fsl/fsl.ac
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 fsl.ac
  --- ossp-pkg/fsl/fsl.ac	1 Aug 2002 10:18:06 -0000	1.3
  +++ ossp-pkg/fsl/fsl.ac	1 Aug 2002 11:41:05 -0000	1.4
  @@ -53,10 +53,10 @@
           ;;
   esac
   
  -dnl #   built-time configuration parameter --with-cfgdir
  +dnl #   built-time configuration parameter --with-fsl-cfgdir
   AC_MSG_CHECKING(for configuration directory)
   AC_ARG_WITH(fsl-cfgdir,dnl
  -[  --with-fsl-cfgdir=PATH  set configuration directory (default=PREFIX/etc/fsl)],
  +[  --with-fsl-cfgdir=PATH  set configuration directory (default="PREFIX/etc/fsl")],
   [ fsl_cfgdir=$withval ],
   [ fsl_cfgdir="${prefix}/etc/fsl" ]
   )dnl
  @@ -65,14 +65,28 @@
   AC_SUBST(FSL_CFGDIR)
   AC_MSG_RESULT([$fsl_cfgdir])
   
  -dnl #   built-time configuration parameter --with-debug
  +dnl #   built-time configuration parameter --with-fsl-prefix
  +AC_MSG_CHECKING(for configuration file prefix)
  +AC_ARG_WITH(fsl-prefix,dnl
  +[  --with-fsl-prefix=PATH  set configuration file prefix (default="fsl.")],
  +[ fsl_prefix=$withval ],
  +[ fsl_prefix="fsl." ]
  +)dnl
  +AC_DEFINE_UNQUOTED(FSL_PREFIX, "$fsl_prefix", [Define for OSSP fsl configuration file prefix])
  +FSL_PREFIX="$fsl_prefix"
  +AC_SUBST(FSL_PREFIX)
  +AC_MSG_RESULT([$fsl_prefix])
  +
  +dnl #   built-time configuration parameter --with-fsl-debug
   AC_MSG_CHECKING(for debugging using a l2spec)
   AC_ARG_WITH(fsl-debug,dnl
  -[  --with-fsl-debug=L2SPEC set internal debugging (default="")],
  +[  --with-fsl-debug=L2SPEC set internal debugging (default="null")],
   [ fsl_debug=$withval ],
  -[ fsl_debug="" ]
  +[ fsl_debug="null" ]
   )dnl
   AC_DEFINE_UNQUOTED(FSL_DEBUG, "$fsl_debug", [Define for OSSP fsl debugging])
  +FSL_DEBUG="$fsl_debug"
  +AC_SUBST(FSL_DEBUG)
   AC_MSG_RESULT([$fsl_debug])
   
   ])
  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.44 -r1.45 fsl.c
  --- ossp-pkg/fsl/fsl.c	31 Jul 2002 13:20:50 -0000	1.44
  +++ ossp-pkg/fsl/fsl.c	1 Aug 2002 11:41:05 -0000	1.45
  @@ -73,9 +73,6 @@
   #define CU(returncode) STMT( rc = returncode; goto CUS; )
   #define VCU STMT( goto CUS; )
   
  -/* prefix of configuration files */
  -#define FSL_PREFIX "fsl."
  -
   /* general return codes */
   typedef enum {
       FSL_OK = 0,               /* everything ok */
  @@ -277,24 +274,32 @@
       DIR *dp = NULL;
       struct dirent *de;
       char *filename = NULL;
  +    char *cfgdir;
  +    char *prefix;
       int n;
   
       if (buffer == NULL)
           CU(FSL_ERR_ARG);
  -    fsldebug(L2_LEVEL_TRACE, "readallfiles() globbing \"%s/%s*\"", FSL_CFGDIR, FSL_PREFIX);
   
  -    if ((dp = opendir(FSL_CFGDIR)) == NULL)
  +    if ((cfgdir = getenv("FSL_CFGDIR")) == NULL)
  +        cfgdir = FSL_CFGDIR;
  +    if ((prefix = getenv("FSL_PREFIX")) == NULL)
  +        prefix = FSL_PREFIX;
  +
  +    fsldebug(L2_LEVEL_TRACE, "readallfiles() globbing \"%s/%s*\"", cfgdir, prefix);
  +
  +    if ((dp = opendir(cfgdir)) == NULL)
           CU(FSL_ERR_SYS);
   
       rc = FSL_ERR_ARG;
       while ((de = readdir(dp)) != NULL) {
           n = strlen(de->d_name);
  -        if (   (n >= strlen(FSL_PREFIX))
  -            && (strncmp(de->d_name, FSL_PREFIX, strlen(FSL_PREFIX)) == 0)) {
  -            if ((filename = (char *)malloc(strlen(FSL_CFGDIR) + 1 + n + 1)) == NULL)
  +        if (   (n >= strlen(prefix))
  +            && (strncmp(de->d_name, prefix, strlen(prefix)) == 0)) {
  +            if ((filename = (char *)malloc(strlen(cfgdir) + 1 + n + 1)) == NULL)
                   CU(FSL_ERR_MEM);
               filename[0] = '\0';
  -            strcat(filename, FSL_CFGDIR);
  +            strcat(filename, cfgdir);
               strcat(filename, "/");
               strcat(filename, de->d_name);
               if (appendfiletobuffer(buffer, filename) == FSL_OK)
  Index: ossp-pkg/fsl/fsl.pod
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 fsl.pod
  --- ossp-pkg/fsl/fsl.pod	1 Aug 2002 10:18:06 -0000	1.22
  +++ ossp-pkg/fsl/fsl.pod	1 Aug 2002 11:41:05 -0000	1.23
  @@ -59,7 +59,7 @@
   
   If an application calls openlog(3) it passes an identification string
   (I<ident>) and a logging facility (I<facility>) along. B<OSSP fsl> reads all
  -configuration files matching "I<cfgdir>C</fsl.*>" and parses them using
  +configuration files matching "I<cfgdir>C</>I<prefix>C<*>" and parses them using
   B<OSSP cfg>. Sections are identified by "C<ident>I<match>C</>I<l2-spec>C<;>"
   directives.  The I<match> argument is an B<OSSP pcre> (Perl-compatible)
   regular expression that is matched against a string concatenated from
  @@ -354,7 +354,6 @@
   A very simple I<l2-spec> just writing everything to F<stderr>
   (filedescriptor 2):
   
  - ident .*
    fd(fd=2)
   
   =head2 Example 2: simple logfile writing
  @@ -485,6 +484,21 @@
   
   =over 4
   
  +=item C<FSL_CFGDIR>
  +
  +This variable overrides the default value (hard-coded in B<OSSP fsl>
  +under built-time via C<--with-fsl-cfgdir=>I<path>) under run-time. The
  +value has to point to an existing directory where configuration files
  +named "I<prefix>C<*>" (see below) exist. The default value is
  +"C<@FSL_CFGDIR@>".
  +
  +=item C<FSL_PREFIX>
  +
  +This variable overrides the default value (hard-coded in B<OSSP fsl>
  +under built-time via C<--with-fsl-prefix=>I<prefix>) under run-time.
  +The value has to be a valid partial Unix filename. The default value is
  +"C<@FSL_PREFIX@>".
  +
   =item C<FSL_DEBUG>
   
   This variable overrides the default value (hard-coded in B<OSSP fsl>
  @@ -501,12 +515,9 @@
   
   =over 4
   
  -=item F<FSL_CFGDIR/fsl.*>
  +=item F<@FSL_CFGDIR@/@FSL_PREFIX@*>
   
  -B<OSSP fsl> reads configuration sections located in these files. The
  -path FSL_CFGDIR of the directory containing these file(s) has to be
  -specified at build-time of B<OSSP fsl> via the F<configure> option
  -C<--with-cfgdir=>I<cfgdir>.
  +B<OSSP fsl> reads configuration sections located in these files. 
   
   =back
   
  Index: ossp-pkg/fsl/fsl_test.cfg
  ============================================================
  $ cvs update -p -r1.1 fsl_test.cfg
  
  #   map syslog(3) API priorities to OSSP l2 levels
  #   Notes: - syslog(3) has no corresponding priority for OSSP l2 "trace"
  #          - OSSP l2 has no corresponding level for syslog(3) emerg
  map emerg   panic;
  map alert   panic;
  map crit    critical;
  map err     error;
  map warning warning;
  map notice  notice;
  map info    info;
  map debug   debug;
  
  #   default logging specification
  default (.+)/.+ q{
      debug: 
      prefix(
          prefix="%b %d %H:%M:%S <%L> $1[%P]: ", 
          timezone=local
      ) -> 
      file(
          path="./fsl_test.syslog", 
          append=1, 
          perm=0644
      )
  };
  

From ossp-cvs-owner@ossp.org  Thu Aug  1 13:43:05 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 36704765ED; Thu,  1 Aug 2002 13:43:05 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl devtool.conf
Message-Id: <20020801114305.36704765ED@mail.ossp.org>
Date: Thu,  1 Aug 2002 13:43:05 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Aug-2002 13:43:05
  Branch: HEAD                             Handle: 2002080112430400

  Modified files:
    ossp-pkg/fsl            devtool.conf

  Log:
    fix devtool version command

  Summary:
    Revision    Changes     Path
    1.12        +1  -1      ossp-pkg/fsl/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/devtool.conf
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 devtool.conf
  --- ossp-pkg/fsl/devtool.conf	1 Aug 2002 09:36:53 -0000	1.11
  +++ ossp-pkg/fsl/devtool.conf	1 Aug 2002 11:43:04 -0000	1.12
  @@ -51,7 +51,7 @@
   	sed -e "s/Version .*(.*)/Version $V/g" <README >README.n && mv README.n README
   
   %tag
  -	V=`./shtool version -lc -dshort fsl_version.c` | sed -e 's;\.;_;g'`
  +	V=`./shtool version -lc -dshort fsl_version.c | sed -e 's;\.;_;g'`
       echo "+++ tagging CVS sources as FSL_${V}"
       cvs commit -m 'flush pending changes before tagging'
       cvs tag FSL_${V}

From ossp-cvs-owner@ossp.org  Thu Aug  1 13:43:27 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9068B765ED; Thu,  1 Aug 2002 13:43:27 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl README fsl_version.c
Message-Id: <20020801114327.9068B765ED@mail.ossp.org>
Date: Thu,  1 Aug 2002 13:43:27 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Aug-2002 13:43:27
  Branch: HEAD                             Handle: 2002080112432700

  Modified files:
    ossp-pkg/fsl            README fsl_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.18        +1  -1      ossp-pkg/fsl/README
    1.3         +9  -9      ossp-pkg/fsl/fsl_version.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/README
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 README
  --- ossp-pkg/fsl/README	1 Aug 2002 10:18:06 -0000	1.17
  +++ ossp-pkg/fsl/README	1 Aug 2002 11:43:27 -0000	1.18
  @@ -5,7 +5,7 @@
     |_| |___/_|
                
     OSSP fsl - Faking/Flexible Syslog Library
  -  Version 0.1.13 (01-Aug-2002)
  +  Version 0.9.0 (01-Aug-2002)
   
     ABSTRACT
   
  Index: ossp-pkg/fsl/fsl_version.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 fsl_version.c
  --- ossp-pkg/fsl/fsl_version.c	1 Aug 2002 09:33:24 -0000	1.2
  +++ ossp-pkg/fsl/fsl_version.c	1 Aug 2002 11:43:27 -0000	1.3
  @@ -8,7 +8,7 @@
   #ifndef _FSL_VERSION_C_
   #define _FSL_VERSION_C_
   
  -#define FSL_VERSION 0x00120D
  +#define FSL_VERSION 0x009200
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _FSL_VERSION_C_AS_HEADER_
   
   fsl_version_t fsl_version = {
  -    0x00120D,
  -    "0.1.13",
  -    "0.1.13 (01-Aug-2002)",
  -    "This is OSSP fsl, Version 0.1.13 (01-Aug-2002)",
  -    "OSSP fsl 0.1.13 (01-Aug-2002)",
  -    "OSSP fsl/0.1.13",
  -    "@(#)OSSP fsl 0.1.13 (01-Aug-2002)",
  -    "$Id: fsl_version.c,v 1.2 2002/08/01 09:33:24 rse Exp $"
  +    0x009200,
  +    "0.9.0",
  +    "0.9.0 (01-Aug-2002)",
  +    "This is OSSP fsl, Version 0.9.0 (01-Aug-2002)",
  +    "OSSP fsl 0.9.0 (01-Aug-2002)",
  +    "OSSP fsl/0.9.0",
  +    "@(#)OSSP fsl 0.9.0 (01-Aug-2002)",
  +    "$Id: fsl_version.c,v 1.3 2002/08/01 11:43:27 rse Exp $"
   };
   
   #endif /* _FSL_VERSION_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Thu Aug  1 13:47:28 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 181B2767CB; Thu,  1 Aug 2002 13:47:28 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new news.txt ossp-web/pkg/lib/fsl index.wml ossp-...
Message-Id: <20020801114728.181B2767CB@mail.ossp.org>
Date: Thu,  1 Aug 2002 13:47:28 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   01-Aug-2002 13:47:28
  Branch: HEAD                             Handle: 2002080112472601

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/fsl    index.wml

  Log:
    release OSSP fsl 0.9.0

  Summary:
    Revision    Changes     Path
    1.18        +1  -0      ossp-web/new/news.txt
    1.5         +2  -2      ossp-web/pkg/lib/fsl/index.wml
    1.22        +1  -1      ossp-web/pkg/lib/index.wml
  ____________________________________________________________________________

  Index: ossp-web/new/news.txt
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 news.txt
  --- ossp-web/new/news.txt	30 Jul 2002 19:51:59 -0000	1.17
  +++ ossp-web/new/news.txt	1 Aug 2002 11:47:26 -0000	1.18
  @@ -1,3 +1,4 @@
  +01-Aug-2002: Released L<OSSP fsl> 0.9.0
   30-Jul-2002: Released L<OSSP cfg> 0.9.0
   30-Jul-2002: Released L<OSSP l2> 0.9.0
   30-Jul-2002: Released L<OSSP fsl> 0.1.12
  Index: ossp-web/pkg/lib/fsl/index.wml
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 index.wml
  --- ossp-web/pkg/lib/fsl/index.wml	30 Jul 2002 18:37:26 -0000	1.4
  +++ ossp-web/pkg/lib/fsl/index.wml	1 Aug 2002 11:47:27 -0000	1.5
  @@ -35,7 +35,7 @@
   
   <pkg_status
       stable="none"    stable_date="none"
  -    unstable="0.1.12" unstable_date="30-Jul-2002"
  +    unstable="0.9.0" unstable_date="01-Aug-2002"
   	done=100>
   
   <h2>Source</h2>
  @@ -45,5 +45,5 @@
       url=$(FTP_ROOT_URL)/pkg/lib/fsl/
       directory=$(FTP_ROOT_DIR)/pkg/lib/fsl/
       files="fsl-*.tar.gz" 
  -	stable="none" unstable="fsl-0.1.12.tar.gz">
  +	stable="none" unstable="fsl-0.9.0.tar.gz">
   	
  Index: ossp-web/pkg/lib/index.wml
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 index.wml
  --- ossp-web/pkg/lib/index.wml	30 Jul 2002 19:51:59 -0000	1.21
  +++ ossp-web/pkg/lib/index.wml	1 Aug 2002 11:47:27 -0000	1.22
  @@ -82,6 +82,6 @@
   			done=15 stable=none unstable=none>
     <pkg_item name="fsl" longname="OSSP fsl" type="lib"
               desc="Faked/Flexible Syslog"
  -			done=100 stable=none unstable=0.1.12>
  +			done=100 stable=none unstable=0.9.0>
   </pkg_list>
   

From ossp-cvs-owner@ossp.org  Thu Aug  1 13:59:55 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 90416767CB; Thu,  1 Aug 2002 13:59:55 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc 00TODO rc.c rc_config.c
Message-Id: <20020801115955.90416767CB@mail.ossp.org>
Date: Thu,  1 Aug 2002 13:59:55 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   01-Aug-2002 13:59:55
  Branch: HEAD                             Handle: 2002080112595500

  Modified files:
    ossp-pkg/rc             00TODO rc.c rc_config.c

  Log:
    Moved call to configVerify to squash yet another early error bug.

  Summary:
    Revision    Changes     Path
    1.34        +3  -0      ossp-pkg/rc/00TODO
    1.41        +0  -1      ossp-pkg/rc/rc.c
    1.26        +1  -2      ossp-pkg/rc/rc_config.c
  ____________________________________________________________________________

  Index: ossp-pkg/rc/00TODO
  ============================================================
  $ cvs diff -u -r1.33 -r1.34 00TODO
  --- ossp-pkg/rc/00TODO	1 Aug 2002 09:45:19 -0000	1.33
  +++ ossp-pkg/rc/00TODO	1 Aug 2002 11:59:55 -0000	1.34
  @@ -23,6 +23,9 @@
   Document
     Refs, pri, user, group, ci, go only in normal (not special) sections.
   
  +Questions
  +  Should location regex specify a directory and prefix separately, or files*?
  +
   Consider
     Nice to have feature for ex, a pEx->pObj->strErr(pEx->Value);
     Removing the OSSP_RC_DEACT deactivation feature (thl.)
  Index: ossp-pkg/rc/rc.c
  ============================================================
  $ cvs diff -u -r1.40 -r1.41 rc.c
  --- ossp-pkg/rc/rc.c	29 Jul 2002 16:34:58 -0000	1.40
  +++ ossp-pkg/rc/rc.c	1 Aug 2002 11:59:55 -0000	1.41
  @@ -42,7 +42,6 @@
       try {                       /* Configuration block, config is built here  */
           configNew();            /* Construct a new config, add default values */
           configLoad(argc, (const char **)argv);   /* Load cli, env, and conf   */
  -        configVerify();         /* Test for usage, help and version options   */
           configDefaults();       /* Add default values to empty config members */
       }
       catch(Except)               /* Exceptions of the configuration block      */
  Index: ossp-pkg/rc/rc_config.c
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 rc_config.c
  --- ossp-pkg/rc/rc_config.c	1 Aug 2002 08:09:04 -0000	1.25
  +++ ossp-pkg/rc/rc_config.c	1 Aug 2002 11:59:55 -0000	1.26
  @@ -204,6 +204,7 @@
   
       try {       /* Parse option groups in order of priority          */
           clioptParseopts(nTotal, szArgvec);  /* Command line options  */
  +        configVerify();  /* Test for usage, help and version options */
           clioptParseargs();                  /* Command line args */
   /*        envoptParse(m_nLocks->pOpt);*/    /* Environment options   */
   /*        cnfoptParse(m_nLocks->pOpt);*/    /* Configfile options    */
  @@ -225,8 +226,6 @@
   {
       ex_t Except;
       short bStop = FALSE;
  -
  -
   
       try { /* Checks for legal option combination */
           /* I'm too braindead to remember digital logic theory from the */

From ossp-cvs-owner@ossp.org  Thu Aug  1 14:59:08 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0888B767CB; Thu,  1 Aug 2002 14:59:07 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm ChangeLog Makefile.in
Message-Id: <20020801125907.0888B767CB@mail.ossp.org>
Date: Thu,  1 Aug 2002 14:59:07 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Aug-2002 14:59:07
  Branch: HEAD                             Handle: 2002080113590700

  Modified files:
    ossp-pkg/mm             ChangeLog Makefile.in

  Log:
    Fixed Makefile.in: $(TRUE) was not defined.
    
    Submitted by: Will Day <wd@hpgx.net>

  Summary:
    Revision    Changes     Path
    1.37        +5  -0      ossp-pkg/mm/ChangeLog
    1.30        +1  -1      ossp-pkg/mm/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/mm/ChangeLog
  ============================================================
  $ cvs diff -u -r1.36 -r1.37 ChangeLog
  --- ossp-pkg/mm/ChangeLog	28 Jul 2002 07:54:41 -0000	1.36
  +++ ossp-pkg/mm/ChangeLog	1 Aug 2002 12:59:07 -0000	1.37
  @@ -13,6 +13,11 @@
       | |_ / __/ 
     __|_(_)_____|______________________________________________________
               
  + Changes between 1.2.1 and 1.2.2 (28-Jul-2000 to xx-Aug-2002)
  +
  +  *) Fixed Makefile.in: $(TRUE) was not defined.
  +     [Will Day <wd@hpgx.net>]
  +
    Changes between 1.2.0 and 1.2.1 (26-Jul-2000 to 28-Jul-2002)
   
     *) Fixed the package rolling: configure.ac was missing because
  Index: ossp-pkg/mm/Makefile.in
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 Makefile.in
  --- ossp-pkg/mm/Makefile.in	26 Jul 2002 13:04:39 -0000	1.29
  +++ ossp-pkg/mm/Makefile.in	1 Aug 2002 12:59:07 -0000	1.30
  @@ -121,7 +121,7 @@
   	-$(RM) $(OBJS)
   	-$(RM) $(LIBS)
   	-$(RM) core *.core *.bak *~
  -	-$(RM) -r .libs >/dev/null 2>&1 || $(TRUE)
  +	-$(RM) -r .libs >/dev/null 2>&1 || true
   	-$(RM) *.o *.lo
   
   distclean: clean

From ossp-cvs-owner@ossp.org  Thu Aug  1 15:25:34 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id ECF147645D; Thu,  1 Aug 2002 15:25:33 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc 00TODO rc_const.h rc_script.c rc_test.sh ossp-...
Message-Id: <20020801132533.ECF147645D@mail.ossp.org>
Date: Thu,  1 Aug 2002 15:25:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   01-Aug-2002 15:25:33
  Branch: HEAD                             Handle: 2002080114253201

  Modified files:
    ossp-pkg/rc             00TODO rc_const.h rc_script.c rc_test.sh
    ossp-pkg/rc/rc_test     rc.pam

  Log:
    Added generic parsing of section arguments, adjusted defaults and tests.

  Summary:
    Revision    Changes     Path
    1.35        +1  -0      ossp-pkg/rc/00TODO
    1.12        +1  -1      ossp-pkg/rc/rc_const.h
    1.9         +2  -2      ossp-pkg/rc/rc_script.c
    1.21        +37 -37     ossp-pkg/rc/rc_test.sh
    1.3         +7  -0      ossp-pkg/rc/rc_test/rc.pam
  ____________________________________________________________________________

  Index: ossp-pkg/rc/00TODO
  ============================================================
  $ cvs diff -u -r1.34 -r1.35 00TODO
  --- ossp-pkg/rc/00TODO	1 Aug 2002 11:59:55 -0000	1.34
  +++ ossp-pkg/rc/00TODO	1 Aug 2002 13:25:32 -0000	1.35
  @@ -22,6 +22,7 @@
   
   Document
     Refs, pri, user, group, ci, go only in normal (not special) sections.
  +  Section definition regular expressions need to follow a format ()\2.
   
   Questions
     Should location regex specify a directory and prefix separately, or files*?
  Index: ossp-pkg/rc/rc_const.h
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 rc_const.h
  --- ossp-pkg/rc/rc_const.h	1 Aug 2002 08:09:04 -0000	1.11
  +++ ossp-pkg/rc/rc_const.h	1 Aug 2002 13:25:32 -0000	1.12
  @@ -123,7 +123,7 @@
   /* Default values, do not include newlines and special chars must be escaped */
   #define RC_DEF_ON     "1"                       /* Digital switch */
   #define RC_DEF_OFF    "0"                       /* Digital switch */
  -#define RC_DEF_DEF    "^%(\\w+).*?\\n(.*?)^$"   /* Section definition */
  +#define RC_DEF_DEF    "^%(\\w+)[ \t]*(.*?)\\n(.*?)^$" /* Section definition */
   #define RC_DEF_NCF    "config"                  /* Config section name */
   
   #endif /* __OSSPRC_CONST_H__ */
  Index: ossp-pkg/rc/rc_script.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 rc_script.c
  --- ossp-pkg/rc/rc_script.c	30 Jul 2002 16:36:41 -0000	1.8
  +++ ossp-pkg/rc/rc_script.c	1 Aug 2002 13:25:32 -0000	1.9
  @@ -156,8 +156,8 @@
   
           /* Test the substring. If it matches our label, generate a subscript */
           if (!strncmp(piLabstart, kszSecname, nLabsize)) {
  -            piStart   = piBlocend + *(pnVec + 4);
  -            piEnd     = piBlocend + *(pnVec + 5);
  +            piStart   = piBlocend + *(pnVec + 6);
  +            piEnd     = piBlocend + *(pnVec + 7);
               szTempout = malloc(piEnd - piStart + sizeof(char));
               strncpy(szTempout, piStart, piEnd - piStart);
               *(szTempout + (piEnd - piStart)) = NULL;    /* Terminate outgoing */
  Index: ossp-pkg/rc/rc_test.sh
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 rc_test.sh
  --- ossp-pkg/rc/rc_test.sh	30 Jul 2002 16:36:41 -0000	1.20
  +++ ossp-pkg/rc/rc_test.sh	1 Aug 2002 13:25:32 -0000	1.21
  @@ -42,18 +42,18 @@
   #./rc -derv -L ./rc_test/rc.d/rc.%{RCFILE:s/^all$/*/} -c ./rc.conf -f ./rc_test/rcfuncs -t /tmp openssh stop sleep=4 start daily minsize=2097152
   
   # Test some long options, should fail for false combination usage
  -echo; echo "./rc --verbose --silent --print --NameConfig config --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" uucp stop sleep=6 start"
  -./rc --verbose --silent --print --NameConfig config --ParseSectionDef "^%(\w+).*?\n(.*?)^$" uucp stop sleep=6 start
  -echo; echo "./rc --query myvar --silent --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" zebra bing bang"
  -./rc --query myvar --silent --ParseSectionDef "^%(\w+).*?\n(.*?)^$" zebra bing bang
  -echo; echo "./rc --conf ./rc.conf --ParseSectionDef \"^<(.+?)\s*.*?>\n*(.*?)^<\/\1>\" --locate ./rc_test/ --query this barf test"
  -./rc --conf ./rc.conf --ParseSectionDef "^<(.+?)\s*.*?>\n*(.*?)^<\/\1>" --locate ./rc_test/ --query this barf test
  +echo; echo "./rc --verbose --silent --print --NameConfig config --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" uucp stop sleep=6 start"
  +./rc --verbose --silent --print --NameConfig config --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" uucp stop sleep=6 start
  +echo; echo "./rc --query myvar --silent --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" zebra bing bang"
  +./rc --query myvar --silent --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" zebra bing bang
  +echo; echo "./rc --conf ./rc.conf --ParseSectionDef \"^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>\" --locate ./rc_test/ --query this barf test"
  +./rc --conf ./rc.conf --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" --locate ./rc_test/ --query this barf test
   
   # Test minimal set of long options, should succeed
  -echo; echo "./rc --debug --version --ParseSectionDef \"^<(.+?)\s*.*?>\n*(.*?)^<\/\1>\" rsyncd nothing matters but the version"
  -./rc --debug --version --ParseSectionDef "^<(.+?)\s*.*?>\n*(.*?)^<\/\1>" rsyncd nothing matters but the version
  -echo; echo "./rc --conf $RCBASE/rc.conf --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" --locate $RCBASE/rc.d:./rc_test:/etc/rc --query all barf test"
  -./rc --conf $RCBASE/rc.conf --ParseSectionDef "^%(\w+).*?\n(.*?)^$" --locate $RCBASE/rc.d:./rc_test:/etc/rc --query all barf test
  +echo; echo "./rc --debug --version --ParseSectionDef \"^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>\" rsyncd nothing matters but the version"
  +./rc --debug --version --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" rsyncd nothing matters but the version
  +echo; echo "./rc --conf $RCBASE/rc.conf --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" --locate $RCBASE/rc.d:./rc_test:/etc/rc --query all barf test"
  +./rc --conf $RCBASE/rc.conf --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" --locate $RCBASE/rc.d:./rc_test:/etc/rc --query all barf test
   
   # FIXME these cases are not handled yet by our configuration FIXME #
   #echo; echo "./rc --debug --version"
  @@ -68,30 +68,30 @@
   #./rc --conf $RCBASE/rc.conf --tmp /tmp --debug --labels rsyncd
   # FIXME these cases are not handled yet by our configuration FIXME #
   
  -echo; echo "./rc --func rc_test/rcfuncs --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" --verbose openssh stop sleep=4 start"
  -./rc --func rc_test/rcfuncs --ParseSectionDef "^%(\w+).*?\n(.*?)^$" --verbose openssh stop sleep=4 start
  +echo; echo "./rc --func rc_test/rcfuncs --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" --verbose openssh stop sleep=4 start"
  +./rc --func rc_test/rcfuncs --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" --verbose openssh stop sleep=4 start
   echo; echo "./rc --func ./rc_test/rcfuncs --info --eval uucp restart"
   ./rc --func ./rc_test/rcfuncs --info --eval uucp restart
  -echo; echo "./rc --conf rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --ParseSectionDef \"^<(.+?)\s*.*?>\n*(.*?)^<\/\1>\" uucp start"
  -./rc --conf rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --ParseSectionDef "^<(.+?)\s*.*?>\n*(.*?)^<\/\1>" uucp start
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --ParseSectionDef \"^<(.+?)\s*.*?>\n*(.*?)^<\/\1>\" ntp sync"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --ParseSectionDef "^<(.+?)\s*.*?>\n*(.*?)^<\/\1>" ntp sync
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --silent --ParseSectionDef \"^<(.+?)\s*.*?>\n*(.*?)^<\/\1>\" ralf feed suppe"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --silent --ParseSectionDef "^<(.+?)\s*.*?>\n*(.*?)^<\/\1>" ralf feed suppe
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L rc_test --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" --tmp /tmp --silent samba search finish destroy"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L rc_test --ParseSectionDef "^%(\w+).*?\n(.*?)^$" --tmp /tmp --silent samba search finish destroy
  -
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" --tmp /tmp --silent all feed suppe"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test --ParseSectionDef "^%(\w+).*?\n(.*?)^$" --tmp /tmp --silent all feed suppe
  +echo; echo "./rc --conf rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --ParseSectionDef \"^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>\" uucp start"
  +./rc --conf rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" uucp start
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --ParseSectionDef \"^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>\" ntp sync"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" ntp sync
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --silent --ParseSectionDef \"^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>\" ralf feed suppe"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --silent --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" ralf feed suppe
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L rc_test --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" --tmp /tmp --silent samba search finish destroy"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L rc_test --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" --tmp /tmp --silent samba search finish destroy
  +
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" --tmp /tmp --silent all feed suppe"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" --tmp /tmp --silent all feed suppe
   
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" --tmp /tmp --silent --debug all config barf gag"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "^%(\w+).*?\n(.*?)^$" --tmp /tmp --silent --debug all config barf gag
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" --tmp /tmp --silent --debug all config barf gag"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" --tmp /tmp --silent --debug all config barf gag
   
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" --tmp /tmp --silent --debug --eval all config start"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "^%(\w+).*?\n(.*?)^$" --tmp /tmp --silent --debug --eval all config start
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" --tmp /tmp --silent --debug --eval all config start"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" --tmp /tmp --silent --debug --eval all config start
   
  -#echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" --tmp /tmp --silent --debug --exec all config start"
  -#./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "^%(\w+).*?\n(.*?)^$" --tmp /tmp --silent --debug --exec all config start
  +#echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" --tmp /tmp --silent --debug --exec all config start"
  +#./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" --tmp /tmp --silent --debug --exec all config start
   
   echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --print --debug pam info"
   ./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --print --debug pam info
  @@ -99,17 +99,17 @@
   echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --debug apache config start"
   ./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --debug apache config start
   
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef \"^<(.+?)\s*.*?>\n*(.*?)^<\/\1>\" --tmp /tmp --silent --debug all config start"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef "^<(.+?)\s*.*?>\n*(.*?)^<\/\1>" --tmp /tmp --silent --debug all config start
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef \"^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>\" --tmp /tmp --silent --debug all config start"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" --tmp /tmp --silent --debug all config start
   
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef \"^<(.+?)\s*.*?>\n*(.*?)^<\/\1>\" --tmp /tmp --silent --debug pam info"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef "^<(.+?)\s*.*?>\n*(.*?)^<\/\1>" --tmp /tmp --silent --debug pam info
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef \"^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>\" --tmp /tmp --silent --debug pam info"
  +./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" --tmp /tmp --silent --debug pam info
   
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func $RCBASE/rc.func -L $RCBASE/rc.d/ --ParseSectionDef \"^%(\w+).*?\n(.*?)^$\" --tmp /tmp --silent --debug dhcpd start"
  -./rc --conf ./rc_test/myrc.conf --func $RCBASE/rc.func -L $RCBASE/rc.d/ --ParseSectionDef "^%(\w+).*?\n(.*?)^$" --tmp /tmp --silent --debug dhcpd start
  +echo; echo "./rc --conf ./rc_test/myrc.conf --func $RCBASE/rc.func -L $RCBASE/rc.d/ --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" --tmp /tmp --silent --debug dhcpd start"
  +./rc --conf ./rc_test/myrc.conf --func $RCBASE/rc.func -L $RCBASE/rc.d/ --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" --tmp /tmp --silent --debug dhcpd start
   
  -echo; echo "./rc --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef \"^<(.+?)\s*.*?>\n*(.*?)^<\/\1>\" pam info"
  -./rc --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef "^<(.+?)\s*.*?>\n*(.*?)^<\/\1>" pam info
  +echo; echo "./rc --func ./rc_test/rcfuncs --exec --ParseSectionDef \"^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>\" -L ./rc_test pam autre"
  +./rc --func ./rc_test/rcfuncs --exec --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" -L ./rc_test pam autre
   
   echo; echo "./rc --func ./rc_test/rcfuncs -L ./rc_test/ dhcpd stop"
   ./rc --func ./rc_test/rcfuncs -L ./rc_test/ dhcpd stop
  Index: ossp-pkg/rc/rc_test/rc.pam
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 rc.pam
  --- ossp-pkg/rc/rc_test/rc.pam	10 Jul 2002 19:04:52 -0000	1.2
  +++ ossp-pkg/rc/rc_test/rc.pam	1 Aug 2002 13:25:33 -0000	1.3
  @@ -21,3 +21,10 @@
       echo "PAM Include Directory: ${pam_incdir}"
       echo "PAM Library Directory: ${pam_libdir}"
   </info>
  +
  +
  +<autre bif=55 borchert="epreuve">
  +    echo "Nada, just trying out the autre label with bif and borchert as options"
  +    echo
  +</autre>
  +

From ossp-cvs-owner@ossp.org  Thu Aug  1 16:31:40 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 820317645F; Thu,  1 Aug 2002 16:31:39 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc 00TODO rc_script.c ossp-pkg/rc/rc_test rc.dhcp...
Message-Id: <20020801143139.820317645F@mail.ossp.org>
Date: Thu,  1 Aug 2002 16:31:39 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   01-Aug-2002 16:31:39
  Branch: HEAD                             Handle: 2002080115313801

  Modified files:
    ossp-pkg/rc             00TODO rc_script.c
    ossp-pkg/rc/rc_test     rc.dhcpd

  Log:
    Some minor test changes and documentation.

  Summary:
    Revision    Changes     Path
    1.36        +6  -6      ossp-pkg/rc/00TODO
    1.10        +15 -0      ossp-pkg/rc/rc_script.c
    1.2         +6  -0      ossp-pkg/rc/rc_test/rc.dhcpd
  ____________________________________________________________________________

  Index: ossp-pkg/rc/00TODO
  ============================================================
  $ cvs diff -u -r1.35 -r1.36 00TODO
  --- ossp-pkg/rc/00TODO	1 Aug 2002 13:25:32 -0000	1.35
  +++ ossp-pkg/rc/00TODO	1 Aug 2002 14:31:38 -0000	1.36
  @@ -77,15 +77,15 @@
     -};
     -
   
  -Detailed ;-) project plan
  --------------------------
  -Release v0.8
  +Release plan
  +------------
  +Version 0.8 DropIn
     Milestone 1, Drop in replacement for OpenPKG.
  -Release v0.9
  +Version 0.9 FeatureComplete
     Milestone 2, Additional features in build.
  -Release v1.0
  +Version 1.0 StableRelease
     Milestone 3, Cleanup and bugfix.
  -Release v1.2
  +Version 1.2
     Milestone 4, Krasse L2 Logging und eigene Sprache
   
   Dreams
  Index: ossp-pkg/rc/rc_script.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 rc_script.c
  --- ossp-pkg/rc/rc_script.c	1 Aug 2002 13:25:32 -0000	1.9
  +++ ossp-pkg/rc/rc_script.c	1 Aug 2002 14:31:38 -0000	1.10
  @@ -144,6 +144,21 @@
       nVecsize *= RC_GOOD_MEASURE; /* Add redundancy factor for error margin */
   /*    pAwesome += RC_GOOD_VIBRATIONS;*/ /* Add good vibes for super action */
   
  +    /***********************************************************************/
  +    /* Reminder: PCRE writes vectors to help identify substrings           */
  +    /*           That means that in the following code we can              */
  +    /*           execute a compiled PCRE regex (ab)(\s)(.*)$               */
  +    /*                                                                     */
  +    /*           piBlocend + pnVec[0] = 'start of whole matched string'    */
  +    /*           piBlocend + pnVec[1] = 'end of whole matched string'      */
  +    /*           piBlocend + pnVec[2] = 'start of first substring ab'      */
  +    /*           piBlocend + pnVec[3] = 'end of first substring ab'        */
  +    /*           piBlocend + pnVec[4] = 'start of second substring \s'     */
  +    /*           piBlocend + pnVec[5] = 'end of second substring \s'       */
  +    /*           piBlocend + pnVec[6] = 'start of third substring .*'      */
  +    /*           piBlocend + pnVec[7] = 'end of third substring .*'        */
  +    /***********************************************************************/
  +
       /* Filter the rc file for the section label, do it here the first time */
       pnVec = calloc(nVecsize, sizeof(int));  /* 2/3 vec 1/3 scrapinfo */
       nFound = pcre_exec(pRegex, pExtra, *pScript,\
  Index: ossp-pkg/rc/rc_test/rc.dhcpd
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 rc.dhcpd
  --- ossp-pkg/rc/rc_test/rc.dhcpd	30 Jul 2002 16:36:42 -0000	1.1
  +++ ossp-pkg/rc/rc_test/rc.dhcpd	1 Aug 2002 14:31:39 -0000	1.2
  @@ -4,6 +4,7 @@
   
   %config
       dhcpd_enable="yes"
  +    hacking="ofcourse"
   
   %start -p 200 -u root
       opServiceEnabled dhcpd || exit 0
  @@ -14,6 +15,11 @@
       curl -s ftp://ftp.openpkg.org/current/SRC/ | grep openssl
       date
       echo $0
  +    if [ $hacking = ofcourse ]; then
  +        echo "Yes, of course"
  +    else
  +        echo "There is no hacking"
  +    fi
   #    cat $0
   
   %stop -p 200 -u root

From ossp-cvs-owner@ossp.org  Thu Aug  1 17:16:25 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AF1697645D; Thu,  1 Aug 2002 17:16:25 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc_proc.c
Message-Id: <20020801151625.AF1697645D@mail.ossp.org>
Date: Thu,  1 Aug 2002 17:16:25 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   01-Aug-2002 17:16:25
  Branch: HEAD                             Handle: 2002080116162500

  Modified files:
    ossp-pkg/rc             rc_proc.c

  Log:
    Okay okay, unfortunately it doesn't segfault anymore. I can put back in the
    original code, but I still think there's a rc_ex problem.

  Summary:
    Revision    Changes     Path
    1.15        +1  -3      ossp-pkg/rc/rc_proc.c
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc_proc.c
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	30 Jul 2002 16:36:41 -0000	1.14
  +++ ossp-pkg/rc/rc_proc.c	1 Aug 2002 15:16:25 -0000	1.15
  @@ -213,9 +213,7 @@
           scriptDump(pRc->m_pScript);
   
       else                                 /* Something is wrong here */
  -        fprintf(stderr, "Error: Placeholder, until problem with ex_ is fixed.\n");
  -/* FIXME!!: Ralf, following segfaults in ex */
  -/*        return(RC_THROW(RC_ERR_INT));*/
  +        return(RC_THROW(RC_ERR_INT));
   
       return(RC_THROW(RC_OK));
   }

From ossp-cvs-owner@ossp.org  Thu Aug  1 17:22:58 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 883797645D; Thu,  1 Aug 2002 17:22:58 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc_cliopt.c
Message-Id: <20020801152258.883797645D@mail.ossp.org>
Date: Thu,  1 Aug 2002 17:22:58 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   01-Aug-2002 17:22:58
  Branch: HEAD                             Handle: 2002080116225800

  Modified files:
    ossp-pkg/rc             rc_cliopt.c

  Log:
    Swap magic numbers for more friendly definitions.

  Summary:
    Revision    Changes     Path
    1.14        +12 -12     ossp-pkg/rc/rc_cliopt.c
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc_cliopt.c
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 rc_cliopt.c
  --- ossp-pkg/rc/rc_cliopt.c	5 Jul 2002 12:54:56 -0000	1.13
  +++ ossp-pkg/rc/rc_cliopt.c	1 Aug 2002 15:22:58 -0000	1.14
  @@ -196,29 +196,29 @@
       switch (cliOption) {
       /* Begin concrete (digital) options */
           case RC_USE_VAL:
  -            clioptSetval(cliOption, "1"); break;   /* Usage    */
  +            clioptSetval(cliOption, RC_DEF_ON); break;   /* Usage    */
           case RC_DBG_VAL:
  -            clioptSetval(cliOption, "1"); break;   /* Debug    */
  +            clioptSetval(cliOption, RC_DEF_ON); break;   /* Debug    */
           case RC_VER_VAL:
  -            clioptSetval(cliOption, "1"); break;   /* Version  */
  +            clioptSetval(cliOption, RC_DEF_ON); break;   /* Version  */
           case RC_EVL_VAL:                                   
  -            clioptSetval(cliOption, "1"); break;   /* Eval     */
  +            clioptSetval(cliOption, RC_DEF_ON); break;   /* Eval     */
           case RC_HLP_VAL:                                   
  -            clioptSetval(cliOption, "1"); break;   /* Help     */
  +            clioptSetval(cliOption, RC_DEF_ON); break;   /* Help     */
           case RC_INF_VAL:                                   
  -            clioptSetval(cliOption, "1"); break;   /* Info     */
  +            clioptSetval(cliOption, RC_DEF_ON); break;   /* Info     */
           case RC_LBL_VAL:                                   
  -            clioptSetval(cliOption, "1"); break;   /* Label    */
  +            clioptSetval(cliOption, RC_DEF_ON); break;   /* Label    */
           case RC_PRN_VAL:                                   
  -            clioptSetval(cliOption, "1"); break;   /* Print    */
  +            clioptSetval(cliOption, RC_DEF_ON); break;   /* Print    */
           case RC_SIL_VAL:                                   
  -            clioptSetval(cliOption, "1"); break;   /* Silent   */
  +            clioptSetval(cliOption, RC_DEF_ON); break;   /* Silent   */
           case RC_RAW_VAL:                                   
  -            clioptSetval(cliOption, "1"); break;   /* Raw      */
  +            clioptSetval(cliOption, RC_DEF_ON); break;   /* Raw      */
           case RC_VRB_VAL:                                   
  -            clioptSetval(cliOption, "1"); break;   /* Verbose  */
  +            clioptSetval(cliOption, RC_DEF_ON); break;   /* Verbose  */
           case RC_EXC_VAL:                                   
  -            clioptSetval(cliOption, "1"); break;   /* Exec     */
  +            clioptSetval(cliOption, RC_DEF_ON); break;   /* Exec     */
   
       /* Begin abstract (nondigital) options */
           case RC_LOC_VAL:

From ossp-cvs-owner@ossp.org  Thu Aug  1 17:27:02 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 220DF7645D; Thu,  1 Aug 2002 17:27:02 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.c
Message-Id: <20020801152702.220DF7645D@mail.ossp.org>
Date: Thu,  1 Aug 2002 17:27:02 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   01-Aug-2002 17:27:02
  Branch: HEAD                             Handle: 2002080116270100

  Modified files:
    ossp-pkg/fsl            fsl.c

  Log:
    use pcre_free()

  Summary:
    Revision    Changes     Path
    1.46        +57 -42     ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.45 -r1.46 fsl.c
  --- ossp-pkg/fsl/fsl.c	1 Aug 2002 11:41:05 -0000	1.45
  +++ ossp-pkg/fsl/fsl.c	1 Aug 2002 15:27:01 -0000	1.46
  @@ -429,6 +429,12 @@
       l2_channel_t     *ch; /* scratch variable */
       l2_result_t       l2rv;
       int               matchcount = 0;
  +    pcre       *pcreRegex = NULL;
  +    pcre_extra *pcreExtra = NULL;
  +    const char *cpError;
  +    int         iError;
  +    int         nMatch;
  +
   
       if ((cfg == NULL) || (cpISF == NULL) || (strlen(cpISF) < 3) || (mode < 0) || (mode > 1))
           return FSL_ERR_ARG;
  @@ -518,49 +524,50 @@
                     ) {
                   /*  process the directive using the three arguments found */
                   fsldebug(L2_LEVEL_DEBUG, "processcfg: argident=%s, argmatch=%s, argl2spec=%s", argident, argmatch, argl2spec);
  -                {
  -                    pcre       *pcreRegex;
  -                    pcre_extra *pcreExtra;
  -                    const char *cpError;
  -                    int         iError;
  -                    int         nMatch;
  -
  -                    /* compile regular expression into finite state machine and optimize */
  -                    if ((pcreRegex = pcre_compile(argmatch, PCRE_CASELESS, &cpError, &iError, NULL)) == NULL) {
  -                        fsldebug(L2_LEVEL_ERROR, "processcfg: pcre_compile() failed with error %s (%d)", cpError, iError); CU(FSL_ERR_CUS); }
  -                    pcreExtra = pcre_study(pcreRegex, 0, &cpError);
  -                    if (cpError != NULL) {
  -                        fsldebug(L2_LEVEL_ERROR, "processcfg: pcre_study() failed with error %s", cpError); CU(FSL_ERR_CUS); }
  -
  -                    nMatch = pcre_exec(pcreRegex, pcreExtra, cpISF, strlen(cpISF), 0, 0, ovec, OVECSIZE);
  -                    if (nMatch < 0)
  -                        fsldebug(L2_LEVEL_TRACE, "processcfg: matching ident/facility \"%s\" against section \"%s\" failed.", cpISF, argmatch);
  +
  +                /* compile regular expression into finite state machine and optimize */
  +                if ((pcreRegex = pcre_compile(argmatch, PCRE_CASELESS, &cpError, &iError, NULL)) == NULL) {
  +                    fsldebug(L2_LEVEL_ERROR, "processcfg: pcre_compile() failed with error %s (%d)", cpError, iError); CU(FSL_ERR_CUS); }
  +                pcreExtra = pcre_study(pcreRegex, 0, &cpError);
  +                if (cpError != NULL) {
  +                    fsldebug(L2_LEVEL_ERROR, "processcfg: pcre_study() failed with error %s", cpError); CU(FSL_ERR_CUS); }
  +
  +                nMatch = pcre_exec(pcreRegex, pcreExtra, cpISF, strlen(cpISF), 0, 0, ovec, OVECSIZE);
  +                if (nMatch < 0)
  +                    fsldebug(L2_LEVEL_TRACE, "processcfg: matching ident/facility \"%s\" against section \"%s\" failed.", cpISF, argmatch);
  +                else
  +                    if (nMatch == 0)
  +                        fsldebug(L2_LEVEL_TRACE, "processcfg: matching ident/facility \"%s\" against section \"%s\" succeeded, found $0", cpISF, argmatch);
                       else
  -                        if (nMatch == 0)
  -                            fsldebug(L2_LEVEL_TRACE, "processcfg: matching ident/facility \"%s\" against section \"%s\" succeeded, found $0", cpISF, argmatch);
  -                        else
  -                            fsldebug(L2_LEVEL_TRACE, "processcfg: matching ident/facility \"%s\" against section \"%s\" succeeded, found $0...$%d", cpISF, argmatch, (nMatch-1) > 9 ? 9 : (nMatch-1));
  -                    if (nMatch >= 1) {
  -                        pcre_get_substring_list(cpISF, ovec, nMatch, &acpMatch);
  -                        if (acpMatch != NULL)
  -                            for (i = 0; i < nMatch; i++)
  -                                fsldebug(L2_LEVEL_DEBUG, "processcfg: regex reference[%d]=\'%s\'", i, acpMatch[i] == NULL ? "(UNDEFINED)" : acpMatch[i]);
  -                        n = substcapture(argl2spec, strlen(argl2spec), acpMatch, nMatch, NULL);
  -                        if ((cp = (char *)malloc(n + 1)) == NULL) {
  -                            fsldebug(L2_LEVEL_ERROR, "processcfg: malloc() failed"); CU(FSL_ERR_CUS); }
  -                        if (substcapture(argl2spec, strlen(argl2spec), acpMatch, nMatch, cp) != n) {
  -                            fsldebug(L2_LEVEL_ERROR, "processcfg: substcapture() failed"); CU(FSL_ERR_CUS); }
  -                        argl2spec = cp;
  -                        fsldebug(L2_LEVEL_DEBUG, "processcfg: argident=%s, argmatch=%s, argl2spec=%s", argident, argmatch, argl2spec);
  -
  -                        /* create L2 channel throuh spec and link into root channel */
  -                        if ((l2rv = l2_spec(&ch, ctx.l2_env, "%s", argl2spec)) != L2_OK) {
  -                            cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "processcfg: logging failed to create stream from spec %s(%d)", cp, l2rv); CU(FSL_ERR_CUS); }
  -                        if ((l2rv = l2_channel_link(ctx.l2_nch, L2_LINK_CHILD, ch, NULL)) != L2_OK) {
  -                            cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "processcfg: logging failed to link child channel %s(%d)", cp, l2rv); CU(FSL_ERR_CUS); }
  -                        matchcount++;
  -                        free(argl2spec);
  -                    }
  +                        fsldebug(L2_LEVEL_TRACE, "processcfg: matching ident/facility \"%s\" against section \"%s\" succeeded, found $0...$%d", cpISF, argmatch, (nMatch-1) > 9 ? 9 : (nMatch-1));
  +                if (nMatch >= 1) {
  +                    pcre_get_substring_list(cpISF, ovec, nMatch, &acpMatch);
  +                    if (acpMatch != NULL)
  +                        for (i = 0; i < nMatch; i++)
  +                            fsldebug(L2_LEVEL_DEBUG, "processcfg: regex reference[%d]=\'%s\'", i, acpMatch[i] == NULL ? "(UNDEFINED)" : acpMatch[i]);
  +                    n = substcapture(argl2spec, strlen(argl2spec), acpMatch, nMatch, NULL);
  +                    if ((cp = (char *)malloc(n + 1)) == NULL) {
  +                        fsldebug(L2_LEVEL_ERROR, "processcfg: malloc() failed"); CU(FSL_ERR_CUS); }
  +                    if (substcapture(argl2spec, strlen(argl2spec), acpMatch, nMatch, cp) != n) {
  +                        fsldebug(L2_LEVEL_ERROR, "processcfg: substcapture() failed"); CU(FSL_ERR_CUS); }
  +                    argl2spec = cp;
  +                    fsldebug(L2_LEVEL_DEBUG, "processcfg: argident=%s, argmatch=%s, argl2spec=%s", argident, argmatch, argl2spec);
  +
  +                    /* create L2 channel throuh spec and link into root channel */
  +                    if ((l2rv = l2_spec(&ch, ctx.l2_env, "%s", argl2spec)) != L2_OK) {
  +                        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "processcfg: logging failed to create stream from spec %s(%d)", cp, l2rv); CU(FSL_ERR_CUS); }
  +                    if ((l2rv = l2_channel_link(ctx.l2_nch, L2_LINK_CHILD, ch, NULL)) != L2_OK) {
  +                        cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "processcfg: logging failed to link child channel %s(%d)", cp, l2rv); CU(FSL_ERR_CUS); }
  +                    matchcount++;
  +                    free(argl2spec);
  +                }
  +                if (pcreExtra != NULL) {
  +                    pcre_free(pcreExtra);
  +                    pcreExtra = NULL;
  +                }
  +                if (pcreRegex != NULL) {
  +                    pcre_free(pcreRegex);
  +                    pcreRegex = NULL;
                   }
               }
               else
  @@ -605,6 +612,14 @@
       else
           CU(FSL_OK);
   CUS:
  +    if (pcreExtra != NULL) {
  +        pcre_free(pcreExtra);
  +        pcreExtra = NULL;
  +    }
  +    if (pcreRegex != NULL) {
  +        pcre_free(pcreRegex);
  +        pcreRegex = NULL;
  +    }
       return rc;
   }
   

From ossp-cvs-owner@ossp.org  Thu Aug  1 17:31:29 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0D24B7645F; Thu,  1 Aug 2002 17:31:29 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl README fsl_version.c
Message-Id: <20020801153129.0D24B7645F@mail.ossp.org>
Date: Thu,  1 Aug 2002 17:31:29 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Aug-2002 17:31:28
  Branch: HEAD                             Handle: 2002080116312800

  Modified files:
    ossp-pkg/fsl            README fsl_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.19        +1  -1      ossp-pkg/fsl/README
    1.4         +9  -9      ossp-pkg/fsl/fsl_version.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/README
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 README
  --- ossp-pkg/fsl/README	1 Aug 2002 11:43:27 -0000	1.18
  +++ ossp-pkg/fsl/README	1 Aug 2002 15:31:28 -0000	1.19
  @@ -5,7 +5,7 @@
     |_| |___/_|
                
     OSSP fsl - Faking/Flexible Syslog Library
  -  Version 0.9.0 (01-Aug-2002)
  +  Version 1.0.0 (01-Aug-2002)
   
     ABSTRACT
   
  Index: ossp-pkg/fsl/fsl_version.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 fsl_version.c
  --- ossp-pkg/fsl/fsl_version.c	1 Aug 2002 11:43:27 -0000	1.3
  +++ ossp-pkg/fsl/fsl_version.c	1 Aug 2002 15:31:28 -0000	1.4
  @@ -8,7 +8,7 @@
   #ifndef _FSL_VERSION_C_
   #define _FSL_VERSION_C_
   
  -#define FSL_VERSION 0x009200
  +#define FSL_VERSION 0x100200
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _FSL_VERSION_C_AS_HEADER_
   
   fsl_version_t fsl_version = {
  -    0x009200,
  -    "0.9.0",
  -    "0.9.0 (01-Aug-2002)",
  -    "This is OSSP fsl, Version 0.9.0 (01-Aug-2002)",
  -    "OSSP fsl 0.9.0 (01-Aug-2002)",
  -    "OSSP fsl/0.9.0",
  -    "@(#)OSSP fsl 0.9.0 (01-Aug-2002)",
  -    "$Id: fsl_version.c,v 1.3 2002/08/01 11:43:27 rse Exp $"
  +    0x100200,
  +    "1.0.0",
  +    "1.0.0 (01-Aug-2002)",
  +    "This is OSSP fsl, Version 1.0.0 (01-Aug-2002)",
  +    "OSSP fsl 1.0.0 (01-Aug-2002)",
  +    "OSSP fsl/1.0.0",
  +    "@(#)OSSP fsl 1.0.0 (01-Aug-2002)",
  +    "$Id: fsl_version.c,v 1.4 2002/08/01 15:31:28 rse Exp $"
   };
   
   #endif /* _FSL_VERSION_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Thu Aug  1 17:40:34 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9F98A7645F; Thu,  1 Aug 2002 17:40:34 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new news.txt ossp-web/pkg/lib/fsl index.wml ossp-...
Message-Id: <20020801154034.9F98A7645F@mail.ossp.org>
Date: Thu,  1 Aug 2002 17:40:34 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   01-Aug-2002 17:40:34
  Branch: HEAD                             Handle: 2002080116403301

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/fsl    index.wml

  Log:
    release OSSP fsl 1.0.0

  Summary:
    Revision    Changes     Path
    1.19        +1  -0      ossp-web/new/news.txt
    1.6         +2  -2      ossp-web/pkg/lib/fsl/index.wml
    1.23        +1  -1      ossp-web/pkg/lib/index.wml
  ____________________________________________________________________________

  Index: ossp-web/new/news.txt
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 news.txt
  --- ossp-web/new/news.txt	1 Aug 2002 11:47:26 -0000	1.18
  +++ ossp-web/new/news.txt	1 Aug 2002 15:40:33 -0000	1.19
  @@ -1,3 +1,4 @@
  +01-Aug-2002: Released L<OSSP fsl> 1.0.0
   01-Aug-2002: Released L<OSSP fsl> 0.9.0
   30-Jul-2002: Released L<OSSP cfg> 0.9.0
   30-Jul-2002: Released L<OSSP l2> 0.9.0
  Index: ossp-web/pkg/lib/fsl/index.wml
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 index.wml
  --- ossp-web/pkg/lib/fsl/index.wml	1 Aug 2002 11:47:27 -0000	1.5
  +++ ossp-web/pkg/lib/fsl/index.wml	1 Aug 2002 15:40:34 -0000	1.6
  @@ -35,7 +35,7 @@
   
   <pkg_status
       stable="none"    stable_date="none"
  -    unstable="0.9.0" unstable_date="01-Aug-2002"
  +    unstable="1.0.0" unstable_date="01-Aug-2002"
   	done=100>
   
   <h2>Source</h2>
  @@ -45,5 +45,5 @@
       url=$(FTP_ROOT_URL)/pkg/lib/fsl/
       directory=$(FTP_ROOT_DIR)/pkg/lib/fsl/
       files="fsl-*.tar.gz" 
  -	stable="none" unstable="fsl-0.9.0.tar.gz">
  +	stable="fsl-1.0.0.tar.gz" unstable="none">
   	
  Index: ossp-web/pkg/lib/index.wml
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 index.wml
  --- ossp-web/pkg/lib/index.wml	1 Aug 2002 11:47:27 -0000	1.22
  +++ ossp-web/pkg/lib/index.wml	1 Aug 2002 15:40:33 -0000	1.23
  @@ -82,6 +82,6 @@
   			done=15 stable=none unstable=none>
     <pkg_item name="fsl" longname="OSSP fsl" type="lib"
               desc="Faked/Flexible Syslog"
  -			done=100 stable=none unstable=0.9.0>
  +			done=100 stable=none unstable=1.0.0>
   </pkg_list>
   

From ossp-cvs-owner@ossp.org  Thu Aug  1 17:54:46 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 676F77645D; Thu,  1 Aug 2002 17:54:46 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc_config.c rc_proc.c
Message-Id: <20020801155446.676F77645D@mail.ossp.org>
Date: Thu,  1 Aug 2002 17:54:46 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   01-Aug-2002 17:54:46
  Branch: HEAD                             Handle: 2002080116544500

  Modified files:
    ossp-pkg/rc             rc_config.c rc_proc.c

  Log:
    Found a new rc_ex bug, and couldn't fix it so I put in a hacky workaround.

  Summary:
    Revision    Changes     Path
    1.27        +6  -3      ossp-pkg/rc/rc_config.c
    1.16        +2  -5      ossp-pkg/rc/rc_proc.c
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc_config.c
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 rc_config.c
  --- ossp-pkg/rc/rc_config.c	1 Aug 2002 11:59:55 -0000	1.26
  +++ ossp-pkg/rc/rc_config.c	1 Aug 2002 15:54:45 -0000	1.27
  @@ -172,7 +172,7 @@
           RC_THROW(RC_ERR_USE);
       }
   
  -    return(NULL);   /* Not reached  */
  +    return(NULL);   /* Not reached */
   }
   
   const char **configGetsecs(void)
  @@ -202,7 +202,7 @@
   {
       ex_t Except;
   
  -    try {       /* Parse option groups in order of priority          */
  +    try {                /* Parse option groups in order of priority */
           clioptParseopts(nTotal, szArgvec);  /* Command line options  */
           configVerify();  /* Test for usage, help and version options */
           clioptParseargs();                  /* Command line args */
  @@ -270,7 +270,10 @@
               bStop = TRUE;
           }
           else if (configGetval(RC_INF_VAL)) {
  -            configInfo();
  +/* FIXME: Ralf! If an exception is thrown (or rethrown) into this context, */
  +/*        then the local handler (in five lines) either segfaults or hangs */
  +fprintf(stderr, "Hello user, OSSP rc is broken if you use --info. Thanks.\n\n                                - The management\n");
  +/*            configInfo();*/
               bStop = TRUE;
           }
       }
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	1 Aug 2002 15:16:25 -0000	1.15
  +++ ossp-pkg/rc/rc_proc.c	1 Aug 2002 15:54:45 -0000	1.16
  @@ -199,7 +199,6 @@
       /****************************************************/
       if (configGetval(RC_EVL_VAL))        /* Evaluate */
           fprintf(stderr, "Error: Evaluate is not implemented yet.\n"); /* FIX */
  -
       else if (configGetval(RC_EXC_VAL)) { /* Execute  */
               pszVec[0] = "/bin/sh";
               pszVec[1] = "-c";
  @@ -208,11 +207,9 @@
           if (execvp(*pszVec, pszVec) == -1)  /* launch                   */
               TRACE("Bad, execvp in child returned -1");
       }
  -
  -    else if (configGetval(RC_PRN_VAL))   /* Print    */
  +    else if (configGetval(RC_PRN_VAL))   /* Print */
           scriptDump(pRc->m_pScript);
  -
  -    else                                 /* Something is wrong here */
  +    else                                        /* Something is wrong here */
           return(RC_THROW(RC_ERR_INT));
   
       return(RC_THROW(RC_OK));

From ossp-cvs-owner@ossp.org  Thu Aug  1 23:23:44 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5E1E3767E8; Thu,  1 Aug 2002 23:23:44 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/fsl index.wml ossp-web/pkg/lib index.wml
Message-Id: <20020801212344.5E1E3767E8@mail.ossp.org>
Date: Thu,  1 Aug 2002 23:23:44 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   01-Aug-2002 23:23:44
  Branch: HEAD                             Handle: 2002080122234301

  Modified files:
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/fsl    index.wml

  Log:
    OSSP fsl is stable, now.

  Summary:
    Revision    Changes     Path
    1.7         +2  -2      ossp-web/pkg/lib/fsl/index.wml
    1.24        +1  -1      ossp-web/pkg/lib/index.wml
  ____________________________________________________________________________

  Index: ossp-web/pkg/lib/fsl/index.wml
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 index.wml
  --- ossp-web/pkg/lib/fsl/index.wml	1 Aug 2002 15:40:34 -0000	1.6
  +++ ossp-web/pkg/lib/fsl/index.wml	1 Aug 2002 21:23:44 -0000	1.7
  @@ -34,8 +34,8 @@
   <h2>Status</h2>
   
   <pkg_status
  -    stable="none"    stable_date="none"
  -    unstable="1.0.0" unstable_date="01-Aug-2002"
  +    stable="1.0.0"   stable_date="01-Aug-2002"
  +    unstable="none"  unstable_date="none"
   	done=100>
   
   <h2>Source</h2>
  Index: ossp-web/pkg/lib/index.wml
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 index.wml
  --- ossp-web/pkg/lib/index.wml	1 Aug 2002 15:40:33 -0000	1.23
  +++ ossp-web/pkg/lib/index.wml	1 Aug 2002 21:23:43 -0000	1.24
  @@ -82,6 +82,6 @@
   			done=15 stable=none unstable=none>
     <pkg_item name="fsl" longname="OSSP fsl" type="lib"
               desc="Faked/Flexible Syslog"
  -			done=100 stable=none unstable=1.0.0>
  +			done=100 stable=1.0.0 unstable=none>
   </pkg_list>
   

From ossp-cvs-owner@ossp.org  Fri Aug  2 12:56:22 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8F0C77645F; Fri,  2 Aug 2002 12:56:22 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl ChangeLog fsl.c
Message-Id: <20020802105622.8F0C77645F@mail.ossp.org>
Date: Fri,  2 Aug 2002 12:56:22 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Aug-2002 12:56:22
  Branch: HEAD                             Handle: 2002080211562101

  Modified files:
    ossp-pkg/fsl            ChangeLog fsl.c

  Log:
    Compile regular expressions with PCRE_ANCHORED to make sure
    they are anchored. This means the ident "bar/.*" does not match
    "foobar/quux". If it should it now has to be written ".*bar/quux".

  Summary:
    Revision    Changes     Path
    1.3         +8  -1      ossp-pkg/fsl/ChangeLog
    1.47        +1  -1      ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/ChangeLog
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 ChangeLog
  --- ossp-pkg/fsl/ChangeLog	1 Aug 2002 10:18:06 -0000	1.2
  +++ ossp-pkg/fsl/ChangeLog	2 Aug 2002 10:56:21 -0000	1.3
  @@ -9,7 +9,14 @@
     ChangeLog
     =========
   
  -  Changes between 0.1.* and 1.0.0 (09-Jul-2002 to 01-Aug-2002)
  +  Changes between 1.0.0 and 1.0.1 (01-Aug-2002 to xx-Aug-2002)
  +
  +    *) Compile regular expressions with PCRE_ANCHORED to make sure
  +       they are anchored. This means the ident "bar/.*" does not match
  +       "foobar/quux". If it should it now has to be written ".*bar/quux".
  +       [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +  Changes between *GENESIS* and 1.0.0 (09-Jul-2002 to 01-Aug-2002)
   
       *) Switched to OSSP l2 for message logging
       *) Switched to OSSP cfg and OSSP pcre for configuration parsing
  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.46 -r1.47 fsl.c
  --- ossp-pkg/fsl/fsl.c	1 Aug 2002 15:27:01 -0000	1.46
  +++ ossp-pkg/fsl/fsl.c	2 Aug 2002 10:56:22 -0000	1.47
  @@ -526,7 +526,7 @@
                   fsldebug(L2_LEVEL_DEBUG, "processcfg: argident=%s, argmatch=%s, argl2spec=%s", argident, argmatch, argl2spec);
   
                   /* compile regular expression into finite state machine and optimize */
  -                if ((pcreRegex = pcre_compile(argmatch, PCRE_CASELESS, &cpError, &iError, NULL)) == NULL) {
  +                if ((pcreRegex = pcre_compile(argmatch, PCRE_ANCHORED|PCRE_CASELESS, &cpError, &iError, NULL)) == NULL) {
                       fsldebug(L2_LEVEL_ERROR, "processcfg: pcre_compile() failed with error %s (%d)", cpError, iError); CU(FSL_ERR_CUS); }
                   pcreExtra = pcre_study(pcreRegex, 0, &cpError);
                   if (cpError != NULL) {

From ossp-cvs-owner@ossp.org  Fri Aug  2 13:00:25 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3FBA776966; Fri,  2 Aug 2002 13:00:25 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl ChangeLog fsl.c
Message-Id: <20020802110025.3FBA776966@mail.ossp.org>
Date: Fri,  2 Aug 2002 13:00:25 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Aug-2002 13:00:25
  Branch: HEAD                             Handle: 2002080212002300

  Modified files:
    ossp-pkg/fsl            ChangeLog fsl.c

  Log:
    Remove pcre_study(3) usage, because we do no repeated matchings
    and additionally (according to pcre(3)) studying for non-anchored
    patterns that do not have a single fixed starting character is
    useless.

  Summary:
    Revision    Changes     Path
    1.4         +6  -0      ossp-pkg/fsl/ChangeLog
    1.48        +1  -13     ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/ChangeLog
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 ChangeLog
  --- ossp-pkg/fsl/ChangeLog	2 Aug 2002 10:56:21 -0000	1.3
  +++ ossp-pkg/fsl/ChangeLog	2 Aug 2002 11:00:23 -0000	1.4
  @@ -11,6 +11,12 @@
   
     Changes between 1.0.0 and 1.0.1 (01-Aug-2002 to xx-Aug-2002)
   
  +    *) Remove pcre_study(3) usage, because we do no repeated matchings
  +       and additionally (according to pcre(3)) studying for non-anchored
  +       patterns that do not have a single fixed starting character is
  +       useless.
  +       [Ralf S. Engelschall <rse@engelschall.com>]
  +
       *) Compile regular expressions with PCRE_ANCHORED to make sure
          they are anchored. This means the ident "bar/.*" does not match
          "foobar/quux". If it should it now has to be written ".*bar/quux".
  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.47 -r1.48 fsl.c
  --- ossp-pkg/fsl/fsl.c	2 Aug 2002 10:56:22 -0000	1.47
  +++ ossp-pkg/fsl/fsl.c	2 Aug 2002 11:00:23 -0000	1.48
  @@ -430,7 +430,6 @@
       l2_result_t       l2rv;
       int               matchcount = 0;
       pcre       *pcreRegex = NULL;
  -    pcre_extra *pcreExtra = NULL;
       const char *cpError;
       int         iError;
       int         nMatch;
  @@ -528,11 +527,8 @@
                   /* compile regular expression into finite state machine and optimize */
                   if ((pcreRegex = pcre_compile(argmatch, PCRE_ANCHORED|PCRE_CASELESS, &cpError, &iError, NULL)) == NULL) {
                       fsldebug(L2_LEVEL_ERROR, "processcfg: pcre_compile() failed with error %s (%d)", cpError, iError); CU(FSL_ERR_CUS); }
  -                pcreExtra = pcre_study(pcreRegex, 0, &cpError);
  -                if (cpError != NULL) {
  -                    fsldebug(L2_LEVEL_ERROR, "processcfg: pcre_study() failed with error %s", cpError); CU(FSL_ERR_CUS); }
   
  -                nMatch = pcre_exec(pcreRegex, pcreExtra, cpISF, strlen(cpISF), 0, 0, ovec, OVECSIZE);
  +                nMatch = pcre_exec(pcreRegex, NULL, cpISF, strlen(cpISF), 0, 0, ovec, OVECSIZE);
                   if (nMatch < 0)
                       fsldebug(L2_LEVEL_TRACE, "processcfg: matching ident/facility \"%s\" against section \"%s\" failed.", cpISF, argmatch);
                   else
  @@ -561,10 +557,6 @@
                       matchcount++;
                       free(argl2spec);
                   }
  -                if (pcreExtra != NULL) {
  -                    pcre_free(pcreExtra);
  -                    pcreExtra = NULL;
  -                }
                   if (pcreRegex != NULL) {
                       pcre_free(pcreRegex);
                       pcreRegex = NULL;
  @@ -612,10 +604,6 @@
       else
           CU(FSL_OK);
   CUS:
  -    if (pcreExtra != NULL) {
  -        pcre_free(pcreExtra);
  -        pcreExtra = NULL;
  -    }
       if (pcreRegex != NULL) {
           pcre_free(pcreRegex);
           pcreRegex = NULL;

From ossp-cvs-owner@ossp.org  Fri Aug  2 13:06:05 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3F1427645F; Fri,  2 Aug 2002 13:06:05 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.pod
Message-Id: <20020802110605.3F1427645F@mail.ossp.org>
Date: Fri,  2 Aug 2002 13:06:05 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Aug-2002 13:06:05
  Branch: HEAD                             Handle: 2002080212060400

  Modified files:
    ossp-pkg/fsl            fsl.pod

  Log:
    Fixed various typos in fsl.pod

  Summary:
    Revision    Changes     Path
    1.24        +6  -6      ossp-pkg/fsl/fsl.pod
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.pod
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 fsl.pod
  --- ossp-pkg/fsl/fsl.pod	1 Aug 2002 11:41:05 -0000	1.23
  +++ ossp-pkg/fsl/fsl.pod	2 Aug 2002 11:06:04 -0000	1.24
  @@ -172,8 +172,8 @@
   it is operating as an output or filter channel. All parameters to
   B<param_names> are listed, including the type of each parameter which
   is either a string (C<STR>) or integer (C<INT>) and an 'C<m>' or 'C<o>'
  -indicating the paramter is optional or mandatory. Also, the default
  -value for each paramter is listed, if there is one.
  +indicating the parameter is optional or mandatory. Also, the default
  +value for each parameter is listed, if there is one.
   
   =head2 Buffering Filter Channel (buffer)
   
  @@ -246,7 +246,7 @@
   =head2 No Operation Filtering Channel (noop)
   
   The B<noop> channel can be used to divert incoming messages to multiple
  -pathes down the tree. Otherwise is does not do anything put passing the
  +channel paths down the tree. Otherwise is does not do anything put passing the
   messages along. It has no configuration parameters at all.
   
    f noop   ()
  @@ -291,7 +291,7 @@
    S string
    m errno
   
  -and finally remaining variables are expaned by strftime(3).
  +and finally remaining variables are expanded by strftime(3).
   
    f prefix (STR prefix          m [string]
              STR timezone        o [local|utc] =local
  @@ -426,7 +426,7 @@
   
    #   map syslog(3) API priorities to OSSP l2 levels
    #   Notes: - syslog(3) has no corresponding priority for OSSP l2 "trace"
  - #          - OSSP l2 has no corresponding level for syslog(3) emerg
  + #          - OSSP l2 has no corresponding level for syslog(3) "emerg"
    map emerg   panic;
    map alert   panic;
    map crit    critical;
  @@ -567,7 +567,7 @@
   
   B<OSSP fsl> was implemented in July 2002 by Thomas Lotterer
   <thomas@lotterer.net> for use in the B<OpenPKG> project as a replacement
  -for its old B<fakesyslog> library. It was prompted by the necessarity
  +for its old B<fakesyslog> library. It was prompted by the necessity
   to log to multiple files in the B<OpenPKG> F<inn> package and to write
   messages of particular log levels to different files in the B<OpenPKG>
   F<postfix> package.

From ossp-cvs-owner@ossp.org  Fri Aug  2 13:06:38 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 849E97645F; Fri,  2 Aug 2002 13:06:38 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl ChangeLog
Message-Id: <20020802110638.849E97645F@mail.ossp.org>
Date: Fri,  2 Aug 2002 13:06:38 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Aug-2002 13:06:38
  Branch: HEAD                             Handle: 2002080212063800

  Modified files:
    ossp-pkg/fsl            ChangeLog

  Log:
    cleanup

  Summary:
    Revision    Changes     Path
    1.5         +8  -0      ossp-pkg/fsl/ChangeLog
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/ChangeLog
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 ChangeLog
  --- ossp-pkg/fsl/ChangeLog	2 Aug 2002 11:00:23 -0000	1.4
  +++ ossp-pkg/fsl/ChangeLog	2 Aug 2002 11:06:38 -0000	1.5
  @@ -11,6 +11,9 @@
   
     Changes between 1.0.0 and 1.0.1 (01-Aug-2002 to xx-Aug-2002)
   
  +    *) Fixed various typos in fsl.pod.
  +       [Ralf S. Engelschall <rse@engelschall.com>]
  +
       *) Remove pcre_study(3) usage, because we do no repeated matchings
          and additionally (according to pcre(3)) studying for non-anchored
          patterns that do not have a single fixed starting character is
  @@ -25,6 +28,11 @@
     Changes between *GENESIS* and 1.0.0 (09-Jul-2002 to 01-Aug-2002)
   
       *) Switched to OSSP l2 for message logging
  +       [Thomas Lotterer <thomas@lotterer.net>]
  +
       *) Switched to OSSP cfg and OSSP pcre for configuration parsing
  +       [Thomas Lotterer <thomas@lotterer.net>]
  +
       *) Based on fakesyslog.c from OpenPKG 1.0
  +       [Ralf S. Engelschall <rse@engelschall.com>]
   

From ossp-cvs-owner@ossp.org  Fri Aug  2 13:08:07 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0CF2B7645F; Fri,  2 Aug 2002 13:08:07 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl THANKS
Message-Id: <20020802110807.0CF2B7645F@mail.ossp.org>
Date: Fri,  2 Aug 2002 13:08:07 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Aug-2002 13:08:06
  Branch: HEAD                             Handle: 2002080212080600

  Modified files:
    ossp-pkg/fsl            THANKS

  Log:
    give credit to Michael for his initial thinking and work on l2_syslog.c

  Summary:
    Revision    Changes     Path
    1.2         +1  -0      ossp-pkg/fsl/THANKS
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/THANKS
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 THANKS
  --- ossp-pkg/fsl/THANKS	27 Jul 2002 18:13:51 -0000	1.1
  +++ ossp-pkg/fsl/THANKS	2 Aug 2002 11:08:06 -0000	1.2
  @@ -5,4 +5,5 @@
     bugfixes, hints, gave platform feedback, etc. (in alphabetical order):
   
       o  Christoph Schug             <chris@schug.net>
  +    o  Michael Schloh v. Bennewitz <michael@schloh.com>
   

From ossp-cvs-owner@ossp.org  Fri Aug  2 13:17:43 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5C3B976978; Fri,  2 Aug 2002 13:17:43 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl THANKS fsl.pod
Message-Id: <20020802111743.5C3B976978@mail.ossp.org>
Date: Fri,  2 Aug 2002 13:17:43 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Aug-2002 13:17:43
  Branch: HEAD                             Handle: 2002080212174200

  Modified files:
    ossp-pkg/fsl            THANKS fsl.pod

  Log:
    give C&W DE proper credit

  Summary:
    Revision    Changes     Path
    1.3         +6  -0      ossp-pkg/fsl/THANKS
    1.25        +14 -6      ossp-pkg/fsl/fsl.pod
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/THANKS
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 THANKS
  --- ossp-pkg/fsl/THANKS	2 Aug 2002 11:08:06 -0000	1.2
  +++ ossp-pkg/fsl/THANKS	2 Aug 2002 11:17:42 -0000	1.3
  @@ -1,6 +1,12 @@
   
     THANKS
   
  +  Credit has to be given to the following sponsors for contributing
  +  hardware, network and manpower resources (in alphabetical order):
  +
  +    o  Cable & Wireless Deutschland GmbH
  +       <http://www.cw.com/de>
  +
     Credit has to be given to the following people who contributed ideas,
     bugfixes, hints, gave platform feedback, etc. (in alphabetical order):
   
  Index: ossp-pkg/fsl/fsl.pod
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 fsl.pod
  --- ossp-pkg/fsl/fsl.pod	2 Aug 2002 11:06:04 -0000	1.24
  +++ ossp-pkg/fsl/fsl.pod	2 Aug 2002 11:17:42 -0000	1.25
  @@ -565,12 +565,20 @@
   
   =head1 HISTORY
   
  -B<OSSP fsl> was implemented in July 2002 by Thomas Lotterer
  -<thomas@lotterer.net> for use in the B<OpenPKG> project as a replacement
  -for its old B<fakesyslog> library. It was prompted by the necessity
  -to log to multiple files in the B<OpenPKG> F<inn> package and to write
  -messages of particular log levels to different files in the B<OpenPKG>
  -F<postfix> package.
  +B<OSSP fsl> was implemented in July 2002 by I<Thomas Lotterer>
  +<thomas@lotterer.net> and I<Ralf S. Engelschall> <rse@engelschall.com>
  +under contract with I<Cable & Wireless Deutschland GmbH>
  +<http://www.cw.com/de>.
  +
  +It was originally intended for use in the B<OpenPKG> project as a
  +replacement for its old B<fakesyslog> library. It was prompted by the
  +necessity to log to multiple files in the B<OpenPKG> F<inn> package
  +and to write messages of particular log levels to different files in
  +the B<OpenPKG> F<postfix> package. 
  +
  +The resulting work was generously contributed as Open Source Software
  +to the B<OSSP> project by I<Cable & Wireless Deutschland GmbH>
  +<http://www.cw.com/de> for further development and maintainance.
   
   =head1 AUTHORS
   

From ossp-cvs-owner@ossp.org  Fri Aug  2 13:32:16 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A86877645F; Fri,  2 Aug 2002 13:32:16 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl AUTHORS ChangeLog INSTALL README THANKS
Message-Id: <20020802113216.A86877645F@mail.ossp.org>
Date: Fri,  2 Aug 2002 13:32:16 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Aug-2002 13:32:16
  Branch: HEAD                             Handle: 2002080212321600

  Modified files:
    ossp-pkg/fsl            AUTHORS ChangeLog INSTALL README THANKS

  Log:
    cosmetics before release

  Summary:
    Revision    Changes     Path
    1.2         +7  -0      ossp-pkg/fsl/AUTHORS
    1.6         +7  -8      ossp-pkg/fsl/ChangeLog
    1.3         +6  -6      ossp-pkg/fsl/INSTALL
    1.20        +10 -12     ossp-pkg/fsl/README
    1.4         +7  -0      ossp-pkg/fsl/THANKS
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/AUTHORS
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 AUTHORS
  --- ossp-pkg/fsl/AUTHORS	27 Jul 2002 18:13:51 -0000	1.1
  +++ ossp-pkg/fsl/AUTHORS	2 Aug 2002 11:32:16 -0000	1.2
  @@ -1,3 +1,10 @@
  +   _        ___  ____ ____  ____     __     _
  +  |_|_ _   / _ \/ ___/ ___||  _ \   / _|___| |
  +  _|_||_| | | | \___ \___ \| |_) | | |_/ __| |
  + |_||_|_| | |_| |___) |__) |  __/  |  _\__ \ |
  +  |_|_|_|  \___/|____/____/|_|     |_| |___/_|
  + 
  +  OSSP fsl - Faking/Flexible Syslog Library
   
     AUTHORS
   
  Index: ossp-pkg/fsl/ChangeLog
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 ChangeLog
  --- ossp-pkg/fsl/ChangeLog	2 Aug 2002 11:06:38 -0000	1.5
  +++ ossp-pkg/fsl/ChangeLog	2 Aug 2002 11:32:16 -0000	1.6
  @@ -1,13 +1,12 @@
  -    __     _ 
  -   / _|___| |
  -  | |_/ __| |
  -  |  _\__ \ |
  -  |_| |___/_|
  -             
  +   _        ___  ____ ____  ____     __     _
  +  |_|_ _   / _ \/ ___/ ___||  _ \   / _|___| |
  +  _|_||_| | | | \___ \___ \| |_) | | |_/ __| |
  + |_||_|_| | |_| |___) |__) |  __/  |  _\__ \ |
  +  |_|_|_|  \___/|____/____/|_|     |_| |___/_|
  + 
     OSSP fsl - Faking/Flexible Syslog Library
   
  -  ChangeLog
  -  =========
  +  CHANGELOG
   
     Changes between 1.0.0 and 1.0.1 (01-Aug-2002 to xx-Aug-2002)
   
  Index: ossp-pkg/fsl/INSTALL
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 INSTALL
  --- ossp-pkg/fsl/INSTALL	1 Aug 2002 10:18:06 -0000	1.2
  +++ ossp-pkg/fsl/INSTALL	2 Aug 2002 11:32:16 -0000	1.3
  @@ -1,9 +1,9 @@
  -    __     _ 
  -   / _|___| |
  -  | |_/ __| |
  -  |  _\__ \ |
  -  |_| |___/_|
  -             
  +   _        ___  ____ ____  ____     __     _
  +  |_|_ _   / _ \/ ___/ ___||  _ \   / _|___| |
  +  _|_||_| | | | \___ \___ \| |_) | | |_/ __| |
  + |_||_|_| | |_| |___) |__) |  __/  |  _\__ \ |
  +  |_|_|_|  \___/|____/____/|_|     |_| |___/_|
  + 
     OSSP fsl - Faking/Flexible Syslog Library
   
     INSTALLATION
  Index: ossp-pkg/fsl/README
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 README
  --- ossp-pkg/fsl/README	1 Aug 2002 15:31:28 -0000	1.19
  +++ ossp-pkg/fsl/README	2 Aug 2002 11:32:16 -0000	1.20
  @@ -1,9 +1,9 @@
  -    __     _ 
  -   / _|___| |
  -  | |_/ __| |
  -  |  _\__ \ |
  -  |_| |___/_|
  -             
  +   _        ___  ____ ____  ____     __     _
  +  |_|_ _   / _ \/ ___/ ___||  _ \   / _|___| |
  +  _|_||_| | | | \___ \___ \| |_) | | |_/ __| |
  + |_||_|_| | |_| |___) |__) |  __/  |  _\__ \ |
  +  |_|_|_|  \___/|____/____/|_|     |_| |___/_|
  + 
     OSSP fsl - Faking/Flexible Syslog Library
     Version 1.0.0 (01-Aug-2002)
   
  @@ -45,11 +45,9 @@
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
   
  -  HOME AND DOCUMENTATION
  +  INTERNET LOCATIONS
   
  -  The documentation and latest sources can be found on
  -
  -  o http://www.ossp.org/pkg/lib/fsl/
  -  o http://cvs.ossp.org/pkg/lib/fsl/
  -  o  ftp://ftp.ossp.org/pkg/lib/fsl/
  +  Homepage:     http://www.ossp.org/pkg/lib/fsl/
  +  Repository:   http://cvs.ossp.org/pkg/lib/fsl/
  +  Distribution:  ftp://ftp.ossp.org/pkg/lib/fsl/
   
  Index: ossp-pkg/fsl/THANKS
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 THANKS
  --- ossp-pkg/fsl/THANKS	2 Aug 2002 11:17:42 -0000	1.3
  +++ ossp-pkg/fsl/THANKS	2 Aug 2002 11:32:16 -0000	1.4
  @@ -1,3 +1,10 @@
  +   _        ___  ____ ____  ____     __     _
  +  |_|_ _   / _ \/ ___/ ___||  _ \   / _|___| |
  +  _|_||_| | | | \___ \___ \| |_) | | |_/ __| |
  + |_||_|_| | |_| |___) |__) |  __/  |  _\__ \ |
  +  |_|_|_|  \___/|____/____/|_|     |_| |___/_|
  + 
  +  OSSP fsl - Faking/Flexible Syslog Library
   
     THANKS
   

From ossp-cvs-owner@ossp.org  Fri Aug  2 13:33:10 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8A9C87645F; Fri,  2 Aug 2002 13:33:10 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl Makefile.in
Message-Id: <20020802113310.8A9C87645F@mail.ossp.org>
Date: Fri,  2 Aug 2002 13:33:10 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Aug-2002 13:33:10
  Branch: HEAD                             Handle: 2002080212331000

  Modified files:
    ossp-pkg/fsl            Makefile.in

  Log:
    allow 'make test', too.

  Summary:
    Revision    Changes     Path
    1.10        +1  -0      ossp-pkg/fsl/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/Makefile.in
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 Makefile.in
  --- ossp-pkg/fsl/Makefile.in	1 Aug 2002 11:41:05 -0000	1.9
  +++ ossp-pkg/fsl/Makefile.in	2 Aug 2002 11:33:10 -0000	1.10
  @@ -113,6 +113,7 @@
   	    -e "s;\@FSL_CFGDIR\@;$(FSL_CFGDIR);g" \
   	    -e "s;\@FSL_PREFIX\@;$(FSL_PREFIX);g" >fsl.3
   
  +test: check
   check: $(TST_NAME)
   	@$(RM) fsl_test.debug >/dev/null 2>&1 || true; \
   	$(RM) fsl_test.syslog >/dev/null 2>&1 || true; \

From ossp-cvs-owner@ossp.org  Fri Aug  2 13:33:33 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B4A41769A2; Fri,  2 Aug 2002 13:33:33 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl ChangeLog
Message-Id: <20020802113333.B4A41769A2@mail.ossp.org>
Date: Fri,  2 Aug 2002 13:33:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Aug-2002 13:33:33
  Branch: HEAD                             Handle: 2002080212333300

  Modified files:
    ossp-pkg/fsl            ChangeLog

  Log:
    remember changes

  Summary:
    Revision    Changes     Path
    1.7         +3  -0      ossp-pkg/fsl/ChangeLog
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/ChangeLog
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 ChangeLog
  --- ossp-pkg/fsl/ChangeLog	2 Aug 2002 11:32:16 -0000	1.6
  +++ ossp-pkg/fsl/ChangeLog	2 Aug 2002 11:33:33 -0000	1.7
  @@ -10,6 +10,9 @@
   
     Changes between 1.0.0 and 1.0.1 (01-Aug-2002 to xx-Aug-2002)
   
  +    *) Various source tree cleanups and polishing.
  +       [Ralf S. Engelschall <rse@engelschall.com>]
  +
       *) Fixed various typos in fsl.pod.
          [Ralf S. Engelschall <rse@engelschall.com>]
   

From ossp-cvs-owner@ossp.org  Fri Aug  2 13:35:55 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6592C7645F; Fri,  2 Aug 2002 13:35:55 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.c
Message-Id: <20020802113555.6592C7645F@mail.ossp.org>
Date: Fri,  2 Aug 2002 13:35:55 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Aug-2002 13:35:55
  Branch: HEAD                             Handle: 2002080212355500

  Modified files:
    ossp-pkg/fsl            fsl.c

  Log:
    Remove doubled "FSL" in "caught by FSL OSSP fsl 1.0.0".

  Summary:
    Revision    Changes     Path
    1.49        +1  -1      ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.48 -r1.49 fsl.c
  --- ossp-pkg/fsl/fsl.c	2 Aug 2002 11:00:23 -0000	1.48
  +++ ossp-pkg/fsl/fsl.c	2 Aug 2002 11:35:55 -0000	1.49
  @@ -704,7 +704,7 @@
       openfsldebug();
   
       /* tracing */
  -    fsldebug(L2_LEVEL_TRACE, "openlog() ident=\"%s\", logopt=0x%.8lx, facility=0x%.8lx; caught by FSL %s", ident, logopt, facility, fsl_version.v_gnu);
  +    fsldebug(L2_LEVEL_TRACE, "openlog() ident=\"%s\", logopt=0x%.8lx, facility=0x%.8lx; caught by %s", ident, logopt, facility, fsl_version.v_gnu);
   
       /* remember logopt and handle unsupported values */
       ctx.logopt = logopt;

From ossp-cvs-owner@ossp.org  Fri Aug  2 13:40:01 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 548D17645F; Fri,  2 Aug 2002 13:40:01 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl ChangeLog Makefile.in fsl.c
Message-Id: <20020802114001.548D17645F@mail.ossp.org>
Date: Fri,  2 Aug 2002 13:40:01 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Aug-2002 13:40:01
  Branch: HEAD                             Handle: 2002080212400000

  Modified files:
    ossp-pkg/fsl            ChangeLog Makefile.in fsl.c

  Log:
    Change building of fsl_version.c from direct inclusion
    to standard object linking.

  Summary:
    Revision    Changes     Path
    1.8         +4  -0      ossp-pkg/fsl/ChangeLog
    1.11        +1  -1      ossp-pkg/fsl/Makefile.in
    1.50        +2  -0      ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/ChangeLog
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 ChangeLog
  --- ossp-pkg/fsl/ChangeLog	2 Aug 2002 11:33:33 -0000	1.7
  +++ ossp-pkg/fsl/ChangeLog	2 Aug 2002 11:40:00 -0000	1.8
  @@ -10,6 +10,10 @@
   
     Changes between 1.0.0 and 1.0.1 (01-Aug-2002 to xx-Aug-2002)
   
  +    *) Change building of fsl_version.c from direct inclusion 
  +       to standard object linking.
  +       [Ralf S. Engelschall <rse@engelschall.com>]
  +
       *) Various source tree cleanups and polishing.
          [Ralf S. Engelschall <rse@engelschall.com>]
   
  Index: ossp-pkg/fsl/Makefile.in
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 Makefile.in
  --- ossp-pkg/fsl/Makefile.in	2 Aug 2002 11:33:10 -0000	1.10
  +++ ossp-pkg/fsl/Makefile.in	2 Aug 2002 11:40:00 -0000	1.11
  @@ -51,7 +51,7 @@
   POD2MAN     = pod2man
   
   LIB_NAME    = libfsl.la
  -LIB_OBJS    = fsl.lo
  +LIB_OBJS    = fsl.lo fsl_version.lo
   LIB_DEPS    = @LIB_DEPS@
   
   MAN_NAME    = fsl.3
  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.49 -r1.50 fsl.c
  --- ossp-pkg/fsl/fsl.c	2 Aug 2002 11:35:55 -0000	1.49
  +++ ossp-pkg/fsl/fsl.c	2 Aug 2002 11:40:00 -0000	1.50
  @@ -54,7 +54,9 @@
   #include "config.h"
   
   /* version */
  +#define _FSL_VERSION_C_AS_HEADER_
   #include "fsl_version.c"
  +#undef  _FSL_VERSION_C_AS_HEADER_
   
   /* pcre static vector size */
   #define OVECSIZE 30

From ossp-cvs-owner@ossp.org  Fri Aug  2 13:42:18 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3E9297645F; Fri,  2 Aug 2002 13:42:18 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl Makefile.in
Message-Id: <20020802114218.3E9297645F@mail.ossp.org>
Date: Fri,  2 Aug 2002 13:42:18 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Aug-2002 13:42:18
  Branch: HEAD                             Handle: 2002080212421700

  Modified files:
    ossp-pkg/fsl            Makefile.in

  Log:
    make sure people don't think nothing was tested at all

  Summary:
    Revision    Changes     Path
    1.12        +1  -0      ossp-pkg/fsl/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/Makefile.in
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 Makefile.in
  --- ossp-pkg/fsl/Makefile.in	2 Aug 2002 11:40:00 -0000	1.11
  +++ ossp-pkg/fsl/Makefile.in	2 Aug 2002 11:42:17 -0000	1.12
  @@ -121,6 +121,7 @@
   	FSL_PREFIX=fsl_test.cfg; export FSL_PREFIX; \
   	FSL_DEBUG="trace: file(path=fsl_test.debug)"; export FSL_DEBUG; \
   	$(LIBTOOL) --mode=execute ./$(TST_NAME)
  +	@echo "fsl_test.syslog:"; cat fsl_test.syslog
   
   install: all
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)

From ossp-cvs-owner@ossp.org  Fri Aug  2 13:43:02 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B967A7645F; Fri,  2 Aug 2002 13:43:02 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl ChangeLog README fsl_version.c
Message-Id: <20020802114302.B967A7645F@mail.ossp.org>
Date: Fri,  2 Aug 2002 13:43:02 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Aug-2002 13:43:02
  Branch: HEAD                             Handle: 2002080212430200

  Modified files:
    ossp-pkg/fsl            ChangeLog README fsl_version.c

  Log:
    prepare for release

  Summary:
    Revision    Changes     Path
    1.9         +1  -1      ossp-pkg/fsl/ChangeLog
    1.21        +1  -1      ossp-pkg/fsl/README
    1.5         +9  -9      ossp-pkg/fsl/fsl_version.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/ChangeLog
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 ChangeLog
  --- ossp-pkg/fsl/ChangeLog	2 Aug 2002 11:40:00 -0000	1.8
  +++ ossp-pkg/fsl/ChangeLog	2 Aug 2002 11:43:02 -0000	1.9
  @@ -8,7 +8,7 @@
   
     CHANGELOG
   
  -  Changes between 1.0.0 and 1.0.1 (01-Aug-2002 to xx-Aug-2002)
  +  Changes between 1.0.0 and 1.0.1 (01-Aug-2002 to 02-Aug-2002)
   
       *) Change building of fsl_version.c from direct inclusion 
          to standard object linking.
  Index: ossp-pkg/fsl/README
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 README
  --- ossp-pkg/fsl/README	2 Aug 2002 11:32:16 -0000	1.20
  +++ ossp-pkg/fsl/README	2 Aug 2002 11:43:02 -0000	1.21
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_| |___/_|
    
     OSSP fsl - Faking/Flexible Syslog Library
  -  Version 1.0.0 (01-Aug-2002)
  +  Version 1.0.1 (02-Aug-2002)
   
     ABSTRACT
   
  Index: ossp-pkg/fsl/fsl_version.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 fsl_version.c
  --- ossp-pkg/fsl/fsl_version.c	1 Aug 2002 15:31:28 -0000	1.4
  +++ ossp-pkg/fsl/fsl_version.c	2 Aug 2002 11:43:02 -0000	1.5
  @@ -8,7 +8,7 @@
   #ifndef _FSL_VERSION_C_
   #define _FSL_VERSION_C_
   
  -#define FSL_VERSION 0x100200
  +#define FSL_VERSION 0x100201
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _FSL_VERSION_C_AS_HEADER_
   
   fsl_version_t fsl_version = {
  -    0x100200,
  -    "1.0.0",
  -    "1.0.0 (01-Aug-2002)",
  -    "This is OSSP fsl, Version 1.0.0 (01-Aug-2002)",
  -    "OSSP fsl 1.0.0 (01-Aug-2002)",
  -    "OSSP fsl/1.0.0",
  -    "@(#)OSSP fsl 1.0.0 (01-Aug-2002)",
  -    "$Id: fsl_version.c,v 1.4 2002/08/01 15:31:28 rse Exp $"
  +    0x100201,
  +    "1.0.1",
  +    "1.0.1 (02-Aug-2002)",
  +    "This is OSSP fsl, Version 1.0.1 (02-Aug-2002)",
  +    "OSSP fsl 1.0.1 (02-Aug-2002)",
  +    "OSSP fsl/1.0.1",
  +    "@(#)OSSP fsl 1.0.1 (02-Aug-2002)",
  +    "$Id: fsl_version.c,v 1.5 2002/08/02 11:43:02 rse Exp $"
   };
   
   #endif /* _FSL_VERSION_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Fri Aug  2 13:43:17 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C111B769A2; Fri,  2 Aug 2002 13:43:17 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl_version.c
Message-Id: <20020802114317.C111B769A2@mail.ossp.org>
Date: Fri,  2 Aug 2002 13:43:17 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Aug-2002 13:43:17
  Branch: HEAD                             Handle: 2002080212431700

  Modified files:
    ossp-pkg/fsl            fsl_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.6         +0  -0      ossp-pkg/fsl/fsl_version.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl_version.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 fsl_version.c
  --- ossp-pkg/fsl/fsl_version.c	2 Aug 2002 11:43:02 -0000	1.5
  +++ ossp-pkg/fsl/fsl_version.c	2 Aug 2002 11:43:17 -0000	1.6
  @@ -39,7 +39,7 @@
       "OSSP fsl 1.0.1 (02-Aug-2002)",
       "OSSP fsl/1.0.1",
       "@(#)OSSP fsl 1.0.1 (02-Aug-2002)",
  -    "$Id: fsl_version.c,v 1.5 2002/08/02 11:43:02 rse Exp $"
  +    "$Id: fsl_version.c,v 1.6 2002/08/02 11:43:17 rse Exp $"
   };
   
   #endif /* _FSL_VERSION_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Fri Aug  2 13:55:15 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A0227767DB; Fri,  2 Aug 2002 13:55:15 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new news.txt ossp-web/pkg/lib/fsl index.wml ossp-...
Message-Id: <20020802115515.A0227767DB@mail.ossp.org>
Date: Fri,  2 Aug 2002 13:55:15 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   02-Aug-2002 13:55:15
  Branch: HEAD                             Handle: 2002080212551401

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/fsl    index.wml

  Log:
    release OSSP fsl 1.0.1

  Summary:
    Revision    Changes     Path
    1.20        +1  -0      ossp-web/new/news.txt
    1.8         +8  -3      ossp-web/pkg/lib/fsl/index.wml
    1.25        +1  -1      ossp-web/pkg/lib/index.wml
  ____________________________________________________________________________

  Index: ossp-web/new/news.txt
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 news.txt
  --- ossp-web/new/news.txt	1 Aug 2002 15:40:33 -0000	1.19
  +++ ossp-web/new/news.txt	2 Aug 2002 11:55:14 -0000	1.20
  @@ -1,3 +1,4 @@
  +02-Aug-2002: Released L<OSSP fsl> 1.0.1
   01-Aug-2002: Released L<OSSP fsl> 1.0.0
   01-Aug-2002: Released L<OSSP fsl> 0.9.0
   30-Jul-2002: Released L<OSSP cfg> 0.9.0
  Index: ossp-web/pkg/lib/fsl/index.wml
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 index.wml
  --- ossp-web/pkg/lib/fsl/index.wml	1 Aug 2002 21:23:44 -0000	1.7
  +++ ossp-web/pkg/lib/fsl/index.wml	2 Aug 2002 11:55:15 -0000	1.8
  @@ -29,12 +29,17 @@
   <h2>Authors</h2>
   
   <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  -<pkg_author name="Thomas Lotterer" mail="thl@dev.de.cw.net">
  +<pkg_author name="Thomas Lotterer" mail="thomas@lotterer.net">
  +
  +<h2>Sponsors</h2>
  +
  +<a href="http://www.cw.com/">Cable &amp; Wireless</a> <a href="http://www.cw.com/de/">Germany</a>
   
   <h2>Status</h2>
   
   <pkg_status
  -    stable="1.0.0"   stable_date="01-Aug-2002"
  +    genesis="Jul-2002"
  +    stable="1.0.1"   stable_date="02-Aug-2002"
       unstable="none"  unstable_date="none"
   	done=100>
   
  @@ -45,5 +50,5 @@
       url=$(FTP_ROOT_URL)/pkg/lib/fsl/
       directory=$(FTP_ROOT_DIR)/pkg/lib/fsl/
       files="fsl-*.tar.gz" 
  -	stable="fsl-1.0.0.tar.gz" unstable="none">
  +	stable="fsl-1.0.1.tar.gz" unstable="none">
   	
  Index: ossp-web/pkg/lib/index.wml
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 index.wml
  --- ossp-web/pkg/lib/index.wml	1 Aug 2002 21:23:43 -0000	1.24
  +++ ossp-web/pkg/lib/index.wml	2 Aug 2002 11:55:14 -0000	1.25
  @@ -82,6 +82,6 @@
   			done=15 stable=none unstable=none>
     <pkg_item name="fsl" longname="OSSP fsl" type="lib"
               desc="Faked/Flexible Syslog"
  -			done=100 stable=1.0.0 unstable=none>
  +			done=100 stable=1.0.1 unstable=none>
   </pkg_list>
   

From ossp-cvs-owner@ossp.org  Fri Aug  2 18:38:10 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A462E7645F; Fri,  2 Aug 2002 18:38:09 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc Makefile.in rc.h rc_private.h rc_sect.c
Message-Id: <20020802163809.A462E7645F@mail.ossp.org>
Date: Fri,  2 Aug 2002 18:38:09 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   02-Aug-2002 18:38:09
  Branch: HEAD                             Handle: 2002080217380900

  Added files:
    ossp-pkg/rc             rc_sect.c
  Modified files:
    ossp-pkg/rc             Makefile.in rc.h rc_private.h

  Log:
    Newly born section class for use in piecing together script fragments.

  Summary:
    Revision    Changes     Path
    1.31        +2  -2      ossp-pkg/rc/Makefile.in
    1.38        +11 -1      ossp-pkg/rc/rc.h
    1.20        +8  -0      ossp-pkg/rc/rc_private.h
    1.1         +144 -0     ossp-pkg/rc/rc_sect.c
  ____________________________________________________________________________

  Index: ossp-pkg/rc/Makefile.in
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 Makefile.in
  --- ossp-pkg/rc/Makefile.in	10 Jul 2002 19:02:24 -0000	1.30
  +++ ossp-pkg/rc/Makefile.in	2 Aug 2002 16:38:09 -0000	1.31
  @@ -59,10 +59,10 @@
   TARGET_PROGS    = rc
   TARGET_MANS     = rc.1 rc-sample.5
   
  -SRCS            = rc.c rc_error.c rc_anal.c rc_script.c rc_config.c \
  +SRCS            = rc.c rc_error.c rc_anal.c rc_script.c rc_sect.c rc_config.c \
                     rc_cliopt.c rc_proc.c rc_version.c rc_pcre.c rc_util.c
   
  -OBJS            = rc.o rc_error.o rc_anal.o rc_script.o rc_config.o \
  +OBJS            = rc.o rc_error.o rc_anal.o rc_script.o rc_sect.o rc_config.o \
                     rc_cliopt.o rc_proc.o rc_version.o rc_pcre.o rc_util.o
   
   SUBDIRS         = @SUBDIR_EX@ @SUBDIR_POPT@
  Index: ossp-pkg/rc/rc.h
  ============================================================
  $ cvs diff -u -r1.37 -r1.38 rc.h
  --- ossp-pkg/rc/rc.h	30 Jul 2002 16:36:41 -0000	1.37
  +++ ossp-pkg/rc/rc.h	2 Aug 2002 16:38:09 -0000	1.38
  @@ -112,10 +112,20 @@
   /* Script function prototypes */
   rc_script_t *scriptNew(void);
   rc_return_t scriptAppend(rc_script_t *, char *, size_t);
  -char *scriptSection(rc_script_t *, const char *);
  +rc_section_t *scriptSection(rc_script_t *, const char *);
   rc_return_t scriptDump(rc_script_t *);
   const char *scriptTostring(rc_script_t *);
   rc_return_t scriptDelete(rc_script_t *);
  +
  +/* Section function prototypes */
  +rc_section_t *sectionNew(void);
  +const int sectionGetpri(rc_section_t *);
  +const int sectionGetuid(rc_section_t *);
  +const char *sectionGetdata(rc_section_t *);
  +rc_return_t sectionSetpri(rc_section_t *, int);
  +rc_return_t sectionSetuid(rc_section_t *, int);
  +rc_return_t sectionSetdata(rc_section_t *, const char *);
  +rc_return_t sectionDelete(rc_section_t *);
   
   /* Processor function prototypes */
   rc_proc_t *procNew(void);
  Index: ossp-pkg/rc/rc_private.h
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 rc_private.h
  --- ossp-pkg/rc/rc_private.h	30 Jul 2002 16:36:41 -0000	1.19
  +++ ossp-pkg/rc/rc_private.h	2 Aug 2002 16:38:09 -0000	1.20
  @@ -74,6 +74,7 @@
   
   /* Analyser type */
   typedef struct {
  +    short m_nRcs;       /* How many rc files   */
       char **m_szRcs;     /* Rc file names       */
       char *m_szTmp;      /* Temp file name      */
       char *m_szFuncs;    /* Function file names */
  @@ -83,6 +84,13 @@
   
   /* Script type */
   typedef char * rc_script_t;
  +
  +/* Section type */
  +typedef struct {
  +    int nPri;
  +    int nUid;
  +    char *szData;
  +} rc_section_t;
   
   /* Processor class */
   typedef struct {
  Index: ossp-pkg/rc/rc_sect.c
  ============================================================
  $ cvs update -p -r1.1 rc_sect.c
  /*  OSSP rc - Run-command processor
  **  Copyright (c) 2002 Ralf S. Engelschall
  **  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **
  **  This file is part of OSSP rc, a portable Run-command processor
  **  which can be found at http://www.ossp.org/pkg/lib/rc/
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  rc_sect.c: Run-command processor ISO C source file
  */
  
  #include <string.h> /* For string copy and such data ops */
  
  #include "rc.h"     /* Public Rc interface */
  
  
  /************************************************
  * sectionNew(void)                              *
  * Construct a section                           *
  ************************************************/
  rc_section_t *sectionNew(void)
  {
      rc_section_t *pSec = NULL;
  
      /* Among other things, they make great coffee at Cable & Wireless */
      /* This code would probably have more bugs if the coffee was not as good */
      pSec = (rc_section_t *)malloc(sizeof(rc_section_t));
      *pSec = NULL;
  
      return(pSec);
  }
  
  /************************************************
  * sectionGetXXX(rc_section_t *)                 *
  * Accessor methods                              *
  ************************************************/
  const int sectionGetpri(rc_section_t *pSec)
  { /* Priority of section, used to order sections during exec|eval|print */
      if (pSec)
          return(pSec->nPri);
      else
          RC_THROW(RC_ERR_USE);
  
      return(0); /* Not reached */
  }
  
  const int sectionGetuid(rc_section_t *pSec)
  { /* Userid of section, used with setuid during exec or eval */
      if (pSec)
          return(pSec->nUid);
      else
          RC_THROW(RC_ERR_USE);
  
      return(0); /* Not reached */
  }
  
  const char *sectionGetdata(rc_section_t *pSec)
  { /* Data of section, this is the script body of the particular section */
      if (pSec && pSec->szData)
          return(pSec->szData);
      else
          RC_THROW(RC_ERR_USE);
  
      return(0); /* Not reached */
  }
  
  /************************************************
  * sectionSetXXX(rc_section_t *)                 *
  * Accessor methods                              *
  ************************************************/
  rc_return_t sectionSetpri(rc_section_t *pSec, int nPriority)
  { /* Priority of section, used to order sections during exec|eval|print */
      if (pSec) {
          pSec->nPri = nPriority;
          return(RC_THROW(RC_OK));
      }
  
      return(RC_THROW(RC_ERR_USE));
  }
  
  rc_return_t sectionSetuid(rc_section_t *pSec, int nUserid)
  { /* Userid of section, used with setuid during exec or eval */
      if (pSec) {
          pSec->nUid = nUserid;
          return(RC_THROW(RC_OK));
      }
  
      return(RC_THROW(RC_ERR_USE));
  }
  
  rc_return_t sectionSetdata(rc_section_t *pSec, const char *kszScript)
  { /* Data of section, this is the script body of the particular section */
      if (pSec) {
          if (pSec->szData) { /* The section data is already in use */
              free(pSec->szData);
              pSec->szData = malloc(strlen(kszScript) + sizeof(char));
              strcpy(pSec->szData, kszScript);
          }
          else { /* Set the data the usual way */
              pSec->szData = malloc(strlen(kszScript) + sizeof(char));
              strcpy(pSec->szData, kszScript);
          }
          return(RC_THROW(RC_OK));
      }
  
      return(RC_THROW(RC_ERR_USE));
  }
  
  /************************************************
  * sectionDelete(rc_section_t *)                 *
  * Destruct a section                            *
  ************************************************/
  rc_return_t sectionDelete(rc_section_t *pSec)
  {
      /* Cleanup our junk */
      if (pSec) {
          if (pSec->szData)
              free(pSec->szData);
          free(pSec);
      }
      else    /* Dumbass passed an empty section object */
          assert(FALSE);
  
      return(RC_THROW(RC_OK));
  }
  

From ossp-cvs-owner@ossp.org  Fri Aug  2 21:07:14 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 163987645F; Fri,  2 Aug 2002 21:07:14 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg AUTHORS ChangeLog Makefile.in README THANKS V...
Message-Id: <20020802190714.163987645F@mail.ossp.org>
Date: Fri,  2 Aug 2002 21:07:14 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Aug-2002 21:07:13
  Branch: HEAD                             Handle: 197001010100001028311632

  Added files:
    ossp-pkg/cfg            AUTHORS THANKS cfg_test.cfg cfg_vers.c
  Modified files:
    ossp-pkg/cfg            ChangeLog Makefile.in README cfg.h cfg_main.c
                            configure.ac devtool.conf
  Removed files:
    ossp-pkg/cfg            VERSION sample.cfg sample2.cfg

  Log:
    full source tree overhauling

  Summary:
    Revision    Changes     Path
    1.1         +15 -0      ossp-pkg/cfg/AUTHORS
    1.2         +17 -2      ossp-pkg/cfg/ChangeLog
    1.3         +28 -17     ossp-pkg/cfg/Makefile.in
    1.3         +11 -13     ossp-pkg/cfg/README
    1.1         +22 -0      ossp-pkg/cfg/THANKS
    NONE        +0  -6      ossp-pkg/cfg/VERSION
    1.12        +1  -0      ossp-pkg/cfg/cfg.h
    1.5         +8  -0      ossp-pkg/cfg/cfg_main.c
    1.1         +49 -0      ossp-pkg/cfg/cfg_test.cfg
    1.1         +0  -0      ossp-pkg/cfg/cfg_vers.c
    1.3         +1  -1      ossp-pkg/cfg/configure.ac
    1.4         +25 -10     ossp-pkg/cfg/devtool.conf
    NONE        +0  -49     ossp-pkg/cfg/sample.cfg
    NONE        +0  -14     ossp-pkg/cfg/sample2.cfg
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/AUTHORS
  ============================================================
  $ cvs update -p -r1.1 AUTHORS
     _        ___  ____ ____  ____          __       
    |_|_ _   / _ \/ ___/ ___||  _ \    ___ / _| __ _ 
    _|_||_| | | | \___ \___ \| |_) |  / __| |_ / _` |
   |_||_|_| | |_| |___) |__) |  __/  | (__|  _| (_| |
    |_|_|_|  \___/|____/____/|_|      \___|_|  \__, |
                                               |___/
    OSSP cfg - Configuration Parsing
  
    AUTHORS
  
    This is a list of authors who have written
    or edited major parts of the OSSP cfg sources.
  
    Ralf S. Engelschall   <rse@engelschall.com>
  
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	30 Jul 2002 19:33:07 -0000	1.1
  +++ ossp-pkg/cfg/ChangeLog	2 Aug 2002 19:07:12 -0000	1.2
  @@ -1,4 +1,19 @@
  +   _        ___  ____ ____  ____          __       
  +  |_|_ _   / _ \/ ___/ ___||  _ \    ___ / _| __ _ 
  +  _|_||_| | | | \___ \___ \| |_) |  / __| |_ / _` |
  + |_||_|_| | |_| |___) |__) |  __/  | (__|  _| (_| |
  +  |_|_|_|  \___/|____/____/|_|      \___|_|  \__, |
  +                                             |___/
  +  OSSP cfg - Configuration Parsing
  +  
  +  CHANGELOG
   
  -  ChangeLog
  -  =========
  +  Changes between 0.9.0 and 0.9.1 (01-Jul-2002 to 02-Aug-2002)
  +
  +   *) Switch from text-based VERSION file to C-based cfg_vers.c
  +      and use this to provide a cfg_version(3) API function.
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +   *) Source tree cleanups.
  +      [Ralf S. Engelschall <rse@engelschall.com>]
   
  Index: ossp-pkg/cfg/Makefile.in
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 Makefile.in
  --- ossp-pkg/cfg/Makefile.in	10 Jul 2002 12:00:23 -0000	1.2
  +++ ossp-pkg/cfg/Makefile.in	2 Aug 2002 19:07:12 -0000	1.3
  @@ -30,6 +30,7 @@
   
   @SET_MAKE@
   
  +#   installation paths
   DESTDIR     =
   prefix      = @prefix@
   exec_prefix = @exec_prefix@
  @@ -38,6 +39,7 @@
   includedir  = @includedir@
   mandir      = @mandir@
   
  +#   build tools
   CC          = @CC@
   CPPFLAGS    = @CPPFLAGS@
   CFLAGS      = @DEFS@ @CFLAGS@
  @@ -52,31 +54,36 @@
   FLEX        = @FLEX@
   BISON       = @BISON@
   
  +#   build objects
   LIB_NAME    = libcfg.la
   LIB_OBJS    = cfg_main.lo cfg_buf.lo cfg_grid.lo cfg_data.lo cfg_node.lo cfg_fmt.lo \
  -              cfg_syn.lo cfg_syn_parse.lo cfg_syn_scan.lo cfg_util.lo
  -
  +              cfg_syn.lo cfg_syn_parse.lo cfg_syn_scan.lo cfg_util.lo cfg_vers.lo
   TST_NAME    = cfg_test
   TST_OBJS    = cfg_test.o
   
  +#   recognized suffixes for implicit rules
   .SUFFIXES:
   .SUFFIXES: .c .o .lo
   
  +#   default target
   all: $(LIB_NAME) $(TST_NAME)
   
  +#   implicit rules for compilation
   .c.o:
   	$(CC) $(CPPFLAGS) $(CFLAGS) -c $<
  -
   .c.lo:
  -	@$(LIBTOOL) --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS) -c $<
  +	$(LIBTOOL) --quiet --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS) -c $<
   
  +#   explicit rule for library linking
   $(LIB_NAME): $(LIB_OBJS)
  -	@$(LIBTOOL) --mode=link $(CC) -o $(LIB_NAME) $(LIB_OBJS) -rpath $(libdir) \
  -	    -version-info `$(SHTOOL) version -l txt -d libtool VERSION`
  +	$(LIBTOOL) --quiet --mode=link $(CC) -o $(LIB_NAME) $(LIB_OBJS) -rpath $(libdir) \
  +	    -version-info `$(SHTOOL) version -l c -d libtool cfg_vers.c`
   
  +#   explicit rule for test program linking
   $(TST_NAME): $(TST_OBJS) $(LIB_NAME)
  -	@$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $(TST_NAME) $(TST_OBJS) $(LIB_NAME) $(LIBS)
  +	$(LIBTOOL) --quiet --mode=link $(CC) $(LDFLAGS) -o $(TST_NAME) $(TST_OBJS) $(LIB_NAME) $(LIBS)
   
  +#   explicit rules for compiler construction tools
   cfg_syn.c: cfg_syn.h cfg_syn_parse.h
   cfg_syn_scan.o: cfg_syn_scan.c cfg_syn_parse.h
   cfg_syn_scan.c: cfg_syn_scan.l
  @@ -84,23 +91,23 @@
   cfg_syn_parse.c cfg_syn_parse.h: cfg_syn_parse.y
   	$(BISON) -d -k -pcfg_syn_ -ocfg_syn_parse.c cfg_syn_parse.y
   
  +#   explicit rule for manual page construction
   man: cfg.3
   cfg.3: cfg.pod
  -	V1=`$(SHTOOL) version -l txt -d short VERSION`; \
  -	V2=`$(SHTOOL) version -l txt -d long VERSION`; \
  -	D=`$(SHTOOL) version -l txt -d long VERSION | sed -e 's;.*(;;' -e 's;).*;;'`; \
  +	V1=`$(SHTOOL) version -l c -d short cfg_vers.c`; \
  +	V2=`$(SHTOOL) version -l c -d long cfg_vers.c`; \
  +	D=`$(SHTOOL) version -l c -d long cfg_vers.c | sed -e 's;.*(;;' -e 's;).*;;'`; \
   	$(POD2MAN) --quotes=none \
   	           --section=3 --center="Configuration Parsing" \
   	           --release="$$D" --date="OSSP cfg $$V1" cfg.pod | \
   	sed -e "s;CFG_VERSION_STR;$$V2;" >cfg.3
   
  +#   running the test suite
  +test: check
   check: $(TST_NAME)
  -	@$(LIBTOOL) --mode=execute ./$(TST_NAME)
  -test1:
  -	./$(TST_NAME) sample.cfg
  -test2:
  -	./$(TST_NAME) sample2.cfg
  +	@./$(TST_NAME) cfg_test.cfg
   
  +#   perform installation procedure
   install:
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
  @@ -110,10 +117,11 @@
   	$(SHTOOL) install -c -m 755 cfg-config $(DESTDIR)$(bindir)/
   	$(SHTOOL) install -c -m 644 cfg.h $(DESTDIR)$(includedir)/
   	$(SHTOOL) install -c -m 644 cfg.3 $(DESTDIR)$(mandir)/man3/
  -	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libcfg.la $(DESTDIR)$(libdir)/
  +	$(LIBTOOL) --quiet --mode=install $(SHTOOL) install -c -m 644 libcfg.la $(DESTDIR)$(libdir)/
   
  +#   perform uninstallation procedure
   uninstall:
  -	@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libcfg.la
  +	$(LIBTOOL) --quiet --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libcfg.la
   	-$(RM) $(DESTDIR)$(mandir)/man3/cfg.3
   	-$(RM) $(DESTDIR)$(includedir)/cfg.h
   	-$(RM) $(DESTDIR)$(bindir)/cfg-config
  @@ -124,17 +132,20 @@
   	-$(RMDIR) $(DESTDIR)$(bindir) >/dev/null 2>&1 || $(TRUE)
   	-$(RMDIR) $(DESTDIR)$(prefix) >/dev/null 2>&1 || $(TRUE)
   
  +#   perform build clean up procedure
   clean:
   	-$(RM) $(LIB_NAME) $(LIB_OBJS)
   	-$(RM) $(TST_NAME) $(TST_OBJS)
   	-$(RM) -r .libs >/dev/null 2>&1 || $(TRUE)
   	-$(RM) *.o *.lo
   
  +#   perform distribution clean up procedure
   distclean: clean
   	-$(RM) config.log config.status config.cache
   	-$(RM) Makefile config.h cfg-config
   	-$(RM) libtool
   
  +#   perform developer clean up procedure
   realclean: distclean
   	-$(RM) cfg.3
   	-$(RM) configure config.h.in
  Index: ossp-pkg/cfg/README
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 README
  --- ossp-pkg/cfg/README	30 Jul 2002 19:28:37 -0000	1.2
  +++ ossp-pkg/cfg/README	2 Aug 2002 19:07:12 -0000	1.3
  @@ -1,12 +1,11 @@
  -         __       
  -    ___ / _| __ _ 
  -   / __| |_ / _` |
  -  | (__|  _| (_| |
  -   \___|_|  \__, |
  -            |___/ 
  -
  +   _        ___  ____ ____  ____          __       
  +  |_|_ _   / _ \/ ___/ ___||  _ \    ___ / _| __ _ 
  +  _|_||_| | | | \___ \___ \| |_) |  / __| |_ / _` |
  + |_||_|_| | |_| |___) |__) |  __/  | (__|  _| (_| |
  +  |_|_|_|  \___/|____/____/|_|      \___|_|  \__, |
  +                                             |___/
     OSSP cfg - Configuration Parsing
  -  Version 0.9.0 (30-Jul-2002)
  +  Version 0.9.1 (02-Aug-2002)
   
     ABSTRACT
   
  @@ -51,10 +50,9 @@
     OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGE.
   
  -  HOME AND DOCUMENTATION
  -
  -  The documentation and latest release can be found on
  +  INTERNET LOCATIONS
   
  -  o http://www.ossp.org/pkg/lib/cfg/
  -  o  ftp://ftp.ossp.org/pkg/lib/cfg/
  +  Homepage:     http://www.ossp.org/pkg/lib/cfg/
  +  Repository:   http://cvs.ossp.org/pkg/lib/cfg/
  +  Distribution:  ftp://ftp.ossp.org/pkg/lib/cfg/
   
  Index: ossp-pkg/cfg/THANKS
  ============================================================
  $ cvs update -p -r1.1 THANKS
     _        ___  ____ ____  ____          __       
    |_|_ _   / _ \/ ___/ ___||  _ \    ___ / _| __ _ 
    _|_||_| | | | \___ \___ \| |_) |  / __| |_ / _` |
   |_||_|_| | |_| |___) |__) |  __/  | (__|  _| (_| |
    |_|_|_|  \___/|____/____/|_|      \___|_|  \__, |
                                               |___/
  
    OSSP cfg - Configuration Parsing
  
    THANKS
  
    Credit has to be given to the following sponsors for contributing
    hardware, network and manpower resources (in alphabetical order):
  
      o  Cable & Wireless Deutschland GmbH
         <http://www.cw.com/de>
  
    Credit has to be given to the following people who contributed ideas,
    bugfixes, hints, gave platform feedback, etc. (in alphabetical order):
  
      o  Thomas Lotterer             <thomas@lotterer.net>
  
    Index: ossp-pkg/cfg/cfg.h
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 cfg.h
  --- ossp-pkg/cfg/cfg.h	18 Jul 2002 15:34:55 -0000	1.11
  +++ ossp-pkg/cfg/cfg.h	2 Aug 2002 19:07:12 -0000	1.12
  @@ -119,6 +119,7 @@
   cfg_rc_t   cfg_create      (cfg_t **cfg);
   cfg_rc_t   cfg_destroy     (cfg_t  *cfg);
   cfg_rc_t   cfg_error       (cfg_t  *cfg, cfg_rc_t rc, char **error);
  +long       cfg_version     (void);
   
   /* configuration import/export */
   cfg_rc_t   cfg_import      (cfg_t  *cfg, cfg_node_t  *node, cfg_fmt_t fmt, const char *in_ptr, size_t in_len);
  Index: ossp-pkg/cfg/cfg_main.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 cfg_main.c
  --- ossp-pkg/cfg/cfg_main.c	17 Jul 2002 15:04:08 -0000	1.4
  +++ ossp-pkg/cfg/cfg_main.c	2 Aug 2002 19:07:12 -0000	1.5
  @@ -39,6 +39,14 @@
   #include "cfg_data.h"
   #include "cfg_node.h"
   #include "cfg_syn.h"
  +#define _CFG_VERS_C_AS_HEADER_
  +#include "cfg_vers.c"
  +#undef  _CFG_VERS_C_AS_HEADER_
  +
  +long cfg_version(void)
  +{
  +    return __cfg_version.v_hex;
  +}
   
   cfg_rc_t cfg_create(cfg_t **cfg)
   {
  Index: ossp-pkg/cfg/cfg_test.cfg
  ============================================================
  $ cvs update -p -r1.1 cfg_test.cfg
  ##
  ##  cfg_test.cfg -- Test Suite Feature Testing Configuration
  ##
  
  "==== Shell-style EOL comments ====";
  #bar
    #bar
  foo1; #bar
  foo2;#bar
  foo3#bar      # fails
  "foo4"#bar    # works again
  ;
  
  "==== C++-style EOL comments ====";
  //bar
    //bar
  foo1; //bar
  foo2;//bar
  foo3//bar      # fails
  "foo4"//bar    # works again
  ;
  
  "==== C-style block comments ====";
  /*bar*/
    /*bar*/
  foo1; /*bar*/
  foo2;/*bar*/
  foo3/*bar*/    # fails
  "foo4"/*bar*/  # works again
  ;
  /* a C/C++ style block comment which 
     goes over multiple lines and even includes 
     some special / * ** * / characters and
     a nested /* co/**/mment */, too. */
  
  "==== Single-Quoted Strings ====";
  'foo';
  'foo bar';
  'foo\\bar\'baz';
  '\'';
  
  "==== Double-Quoted Strings ====";
  "foo\r\nbar\r\n";
  "foo\x1bbar\x{011b}baz";
  
  "==== Flexible-Quoted Strings ====";
  foo q{foo{bar{baz}bar}quux} bar;
  foo q{foo{bar{baz}\}bar}quux} bar;
  
  Index: ossp-pkg/cfg/cfg_vers.c
  ============================================================
  $ cvs update -p -r1.1 cfg_vers.c
  /*
  **  cfg_vers.c -- Version Information for OSSP cfg (syntax: C/C++)
  **  [automatically generated and maintained by GNU shtool]
  */
  
  #ifdef _CFG_VERS_C_AS_HEADER_
  
  #ifndef _CFG_VERS_C_
  #define _CFG_VERS_C_
  
  #define __CFG_VERSION 0x009201
  
  typedef struct {
      const int   v_hex;
      const char *v_short;
      const char *v_long;
      const char *v_tex;
      const char *v_gnu;
      const char *v_web;
      const char *v_sccs;
      const char *v_rcs;
  } __cfg_version_t;
  
  extern __cfg_version_t __cfg_version;
  
  #endif /* _CFG_VERS_C_ */
  
  #else /* _CFG_VERS_C_AS_HEADER_ */
  
  #define _CFG_VERS_C_AS_HEADER_
  #include "cfg_vers.c"
  #undef  _CFG_VERS_C_AS_HEADER_
  
  __cfg_version_t __cfg_version = {
      0x009201,
      "0.9.1",
      "0.9.1 (02-Aug-2002)",
      "This is OSSP cfg, Version 0.9.1 (02-Aug-2002)",
      "OSSP cfg 0.9.1 (02-Aug-2002)",
      "OSSP cfg/0.9.1",
      "@(#)OSSP cfg 0.9.1 (02-Aug-2002)",
      "$Id: cfg_vers.c,v 1.1 2002/08/02 19:07:12 rse Exp $"
  };
  
  #endif /* _CFG_VERS_C_AS_HEADER_ */
  
  Index: ossp-pkg/cfg/configure.ac
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 configure.ac
  --- ossp-pkg/cfg/configure.ac	25 Jul 2002 07:49:55 -0000	1.2
  +++ ossp-pkg/cfg/configure.ac	2 Aug 2002 19:07:12 -0000	1.3
  @@ -30,7 +30,7 @@
   
   AC_PREREQ(2.53)
   AC_INIT
  -CFG_VERSION_STR=`./shtool version -l txt -d long VERSION`
  +CFG_VERSION_STR=`./shtool version -l c -d long cfg_vers.c`
   ./shtool echo -e "Configuring %BOSSP cfg%b (Configuration Parsing), version %B${CFG_VERSION_STR}%b"
   AC_SUBST(CFG_VERSION_STR)
   
  Index: ossp-pkg/cfg/devtool.conf
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.conf
  --- ossp-pkg/cfg/devtool.conf	30 Jul 2002 19:45:22 -0000	1.3
  +++ ossp-pkg/cfg/devtool.conf	2 Aug 2002 19:07:12 -0000	1.4
  @@ -20,18 +20,30 @@
           --enable-debug \
           "$@"
   
  +%release
  +    ./devtool version
  +    ./devtool tag
  +    ./devtool dist
  +    ./devtool upload
  +
   %version
  -    ./shtool version -l txt -n "OSSP cfg" -e VERSION
  -    V=`./shtool version -l txt -d long VERSION`
  -    sed -e "s/Version .*(.*)/Version $V/g" <README >README.n 
  -    mv README.n README
  +    ./shtool version -l c -n "OSSP cfg" -p "__cfg_" -e cfg_vers.c
  +	V=`./shtool version -lc -dlong cfg_vers.c`
  +	sed -e "s/Version .*(.*)/Version $V/g" <README >README.n && mv README.n README
  +
  +%tag
  +	V=`./shtool version -lc -dshort cfg_vers.c | sed -e 's;\.;_;g'`
  +    echo "+++ tagging CVS sources as CFG_${V}"
  +    cvs tag CFG_${V}
   
   %dist
  +    echo "+++ removing old tarballs"
  +    rm -f cfg-*.tar.gz
       echo "+++ generating"
       ./devtool autoclean
       ./devtool autogen
       echo "+++ configuring"
  -    ./devtool configure
  +    ./configure
       echo "+++ building"
       make clean all man
       echo "+++ cleaning"
  @@ -39,14 +51,17 @@
       echo "+++ fixing"
       ./shtool fixperm -v .
       echo "+++ rolling"
  -    V=`./shtool version -l txt -d short VERSION`
  +	V=`./shtool version -lc -dshort cfg_vers.c`
       ./shtool tarball -o cfg-${V}.tar.gz -d cfg-${V} -u ossp -g ossp \
  -                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*,*.tar.gz' -c 'gzip --best' .
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*,*.tar.gz,^#.*,.*~$' -c 'gzip --best' .
       ls -l cfg-${V}.tar.gz
       echo "+++ testing"
  -    gunzip <cfg-${V}.tar.gz | tar tvf -
  +    gunzip <cfg-${V}.tar.gz | tar tvf - | head -10
  +    echo "[...]"
  +    gunzip <cfg-${V}.tar.gz | tar tvf - | tail -10
   
  -%release
  +%upload
       echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/cfg/"
  -    scp cfg-*.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/cfg/
  +	V=`./shtool version -lc -dshort cfg_vers.c`
  +    scp cfg-${V}.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/cfg/
   
    

From ossp-cvs-owner@ossp.org  Fri Aug  2 21:18:01 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EAB82767DB; Fri,  2 Aug 2002 21:18:00 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg .cvsignore ChangeLog Makefile.in cfg_test.out
Message-Id: <20020802191800.EAB82767DB@mail.ossp.org>
Date: Fri,  2 Aug 2002 21:18:00 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Aug-2002 21:18:00
  Branch: HEAD                             Handle: 2002080220180000

  Added files:
    ossp-pkg/cfg            cfg_test.out
  Modified files:
    ossp-pkg/cfg            .cvsignore ChangeLog Makefile.in

  Log:
    Enhanced test suite by comparing against previously saved output

  Summary:
    Revision    Changes     Path
    1.3         +1  -0      ossp-pkg/cfg/.cvsignore
    1.3         +3  -0      ossp-pkg/cfg/ChangeLog
    1.4         +10 -1      ossp-pkg/cfg/Makefile.in
    1.1         +23 -0      ossp-pkg/cfg/cfg_test.out
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/.cvsignore
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 .cvsignore
  --- ossp-pkg/cfg/.cvsignore	9 Jul 2002 08:29:19 -0000	1.2
  +++ ossp-pkg/cfg/.cvsignore	2 Aug 2002 19:18:00 -0000	1.3
  @@ -6,6 +6,7 @@
   cfg_syn_parse.h
   cfg_syn_scan.c
   cfg_test
  +cfg_test.try
   config.guess
   config.h
   config.h.in
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	2 Aug 2002 19:07:12 -0000	1.2
  +++ ossp-pkg/cfg/ChangeLog	2 Aug 2002 19:18:00 -0000	1.3
  @@ -10,6 +10,9 @@
   
     Changes between 0.9.0 and 0.9.1 (01-Jul-2002 to 02-Aug-2002)
   
  +   *) Enhanced test suite by comparing against previously saved output
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
      *) Switch from text-based VERSION file to C-based cfg_vers.c
         and use this to provide a cfg_version(3) API function.
         [Ralf S. Engelschall <rse@engelschall.com>]
  Index: ossp-pkg/cfg/Makefile.in
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 Makefile.in
  --- ossp-pkg/cfg/Makefile.in	2 Aug 2002 19:07:12 -0000	1.3
  +++ ossp-pkg/cfg/Makefile.in	2 Aug 2002 19:18:00 -0000	1.4
  @@ -105,7 +105,15 @@
   #   running the test suite
   test: check
   check: $(TST_NAME)
  -	@./$(TST_NAME) cfg_test.cfg
  +	@$(SHTOOL) echo -e "%BParsing cfg_test.cfg:%b"; \
  +	./$(TST_NAME) cfg_test.cfg 2>&1 | tee cfg_test.try
  +	-@diff -u3 cfg_test.out cfg_test.try >/dev/null 2>&1; \
  +	if [ $$? -ne 0 ]; then \
  +		$(SHTOOL) echo -e "%BATTENTION: Parsing Difference (cfg_test.cfg vs. cfg_test.out):%b"; \
  +	    diff -u3 cfg_test.out cfg_test.try; \
  +	fi
  +check-setup:
  +	@./$(TST_NAME) cfg_test.cfg >cfg_test.out
   
   #   perform installation procedure
   install:
  @@ -136,6 +144,7 @@
   clean:
   	-$(RM) $(LIB_NAME) $(LIB_OBJS)
   	-$(RM) $(TST_NAME) $(TST_OBJS)
  +	-$(RM) cfg_test.try
   	-$(RM) -r .libs >/dev/null 2>&1 || $(TRUE)
   	-$(RM) *.o *.lo
   
  Index: ossp-pkg/cfg/cfg_test.out
  ============================================================
  $ cvs update -p -r1.1 cfg_test.out
  "==== Shell-style EOL comments ====";
  foo1;
  foo2;
  foo3#bar foo4;
  "==== C++-style EOL comments ====";
  foo1;
  foo2;
  foo3//bar foo4;
  "==== C-style block comments ====";
  foo1;
  foo2;
  foo3/*bar*/ foo4;
  "==== Single-Quoted Strings ====";
  foo;
  "foo bar";
  "foo\\bar'baz";
  "'";
  "==== Double-Quoted Strings ====";
  "foo\r\nbar\r\n";
  "foo\x1bbar\x01\x1bbaz";
  "==== Flexible-Quoted Strings ====";
  foo "foo{bar{baz}bar}quux" bar;
  foo "foo{bar{baz}}bar}quux" bar

From ossp-cvs-owner@ossp.org  Fri Aug  2 22:08:45 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 92BC37645F; Fri,  2 Aug 2002 22:08:45 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc 00TODO
Message-Id: <20020802200845.92BC37645F@mail.ossp.org>
Date: Fri,  2 Aug 2002 22:08:45 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   02-Aug-2002 22:08:45
  Branch: HEAD                             Handle: 2002080221084500

  Modified files:
    ossp-pkg/rc             00TODO

  Log:
    Remember some good ideas, and a few questions.

  Summary:
    Revision    Changes     Path
    1.37        +8  -0      ossp-pkg/rc/00TODO
  ____________________________________________________________________________

  Index: ossp-pkg/rc/00TODO
  ============================================================
  $ cvs diff -u -r1.36 -r1.37 00TODO
  --- ossp-pkg/rc/00TODO	1 Aug 2002 14:31:38 -0000	1.36
  +++ ossp-pkg/rc/00TODO	2 Aug 2002 20:08:45 -0000	1.37
  @@ -7,6 +7,9 @@
     File rc.func totally undocumented, but logic should be clear.
     Check combo options for correctness, like config contains exc, evl, prn.
     Consider forking at rc_proc.c:procRun/exec so rc keeps in control afterwards.
  +  Remove termination of pRc->m_pAnal->m_szRcs[nIter] chain, obselete by m_nRcs.
  +  Work with Ralf to explore his idea of arbitrary section regex substring spec.
  +  Probably get rid of all warning exceptions, since ctrl flow doesn't continue.
     Control flow
       Explain logical ordering of multiple section spanning multiple rcfiles.
       Give example semantics of a common scenario.
  @@ -17,6 +20,8 @@
     Not efficient (reads whole files when only parts are needed...)
     What's going on with ^ in patterns? Something is broken.
     Resolve memory leaks with Dmalloc, ask for help.
  +  Original rc logic is probably wrong, because with globbing multiple
  +    sections of a rcfile are not kept together (logic copied anyways.)
     Rc file prefix rc. is hardcoded, and when wildcard is given, the prefix is
       used in selecting files. Location is not properly used. See rc_anal.c.
   
  @@ -32,6 +37,8 @@
     Removing the OSSP_RC_DEACT deactivation feature (thl.)
     Offer include directive in config file.
     Dynamic handling of command interpreter option.
  +  Use anchored regexs (PCRE_ANCHORED) so that bar/.* doesn't match foobar/quux.
  +  If a requested section doesn't exist, should the rcfile's %config be added?
     Interpreter option irgendwo dass hat global scope.
       Als variable in %config Section?
   
  @@ -45,6 +52,7 @@
     Use str_hash von ossp str or static RC_XXX_VAL array from rc_option.h.
     Restore lost multiple location merging logic.
     Use OSSP cfg library for dotconf parsing, ask Ralf to help.
  +  Make rc_section_t correspond to rc_section.c with own operators.
   
   Implementation
     Correct assertion, sanity check, and if () checks according to one standard.

From ossp-cvs-owner@ossp.org  Fri Aug  2 22:10:00 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 826C67645F; Fri,  2 Aug 2002 22:10:00 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc rc_anal.c rc_const.h rc_proc.c rc_script.c
Message-Id: <20020802201000.826C67645F@mail.ossp.org>
Date: Fri,  2 Aug 2002 22:10:00 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   02-Aug-2002 22:09:59
  Branch: HEAD                             Handle: 2002080221095900

  Modified files:
    ossp-pkg/rc             rc_anal.c rc_const.h rc_proc.c rc_script.c

  Log:
    Intermediate priority implementation flush. Build is broken.

  Summary:
    Revision    Changes     Path
    1.11        +2  -1      ossp-pkg/rc/rc_anal.c
    1.13        +2  -0      ossp-pkg/rc/rc_const.h
    1.17        +34 -13     ossp-pkg/rc/rc_proc.c
    1.11        +37 -18     ossp-pkg/rc/rc_script.c
  ____________________________________________________________________________

  Index: ossp-pkg/rc/rc_anal.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 rc_anal.c
  --- ossp-pkg/rc/rc_anal.c	1 Aug 2002 09:45:19 -0000	1.10
  +++ ossp-pkg/rc/rc_anal.c	2 Aug 2002 20:09:59 -0000	1.11
  @@ -203,7 +203,8 @@
       /* Loop through file index setting rc file names according to dirent */
       for (nIter = 0; nIter < nCount; ++nIter)
           (*ppInst)->m_szRcs[nIter] = strdup((*pppFiles)[nIter]->d_name);
  -    (*ppInst)->m_szRcs[nIter] = NULL;
  +    (*ppInst)->m_szRcs[nIter] = NULL; /* Terminate */
  +    (*ppInst)->m_nRcs = nCount; /* Store how many globbed files there are */
   
       /* Cleanup our Dirent object */
       if (pppFiles) {
  Index: ossp-pkg/rc/rc_const.h
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 rc_const.h
  --- ossp-pkg/rc/rc_const.h	1 Aug 2002 13:25:32 -0000	1.12
  +++ ossp-pkg/rc/rc_const.h	2 Aug 2002 20:09:59 -0000	1.13
  @@ -125,5 +125,7 @@
   #define RC_DEF_OFF    "0"                       /* Digital switch */
   #define RC_DEF_DEF    "^%(\\w+)[ \t]*(.*?)\\n(.*?)^$" /* Section definition */
   #define RC_DEF_NCF    "config"                  /* Config section name */
  +#define RC_DEF_PRG    "-p"                      /* Section priority string */
  +#define RC_DEF_PRI    200                       /* Section priority value */
   
   #endif /* __OSSPRC_CONST_H__ */
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	1 Aug 2002 15:54:45 -0000	1.16
  +++ ossp-pkg/rc/rc_proc.c	2 Aug 2002 20:09:59 -0000	1.17
  @@ -76,13 +76,15 @@
       int nFdrc     = 0;
       int nFdfunc   = 0;
       int nRet      = 0;
  +    int nRept     = 0;
       int nIter     = 0;
       ex_t Except;
   
  -    char *sBuf    = NULL;
  -    char *szSec   = NULL;
  -    char *szLocex = NULL;
  -    rc_script_t *pTempscript = NULL;
  +    char         *sBuf        = NULL;
  +    rc_section_t *pSec        = NULL;
  +    char         *szLocex     = NULL;
  +    rc_script_t  *pTempscript = NULL;
  +    rc_script_t  **ppParts    = NULL;
   
       assert(*pRc->m_pAnal->m_szRcs);
       sBuf = (char *)calloc(1, RC_READ_BUFSIZE);
  @@ -109,8 +111,13 @@
               RC_THROW(RC_ERR_IO);
       }
   
  +    /* Logic needed for multiple section combination with priorities */
  +    ppParts = malloc(sizeof(rc_script_t *) * pRc->m_pAnal->m_nRcs);
  +    for (nRept = 0; nRept < pRc->m_pAnal->m_nRcs; nRept++)
  +        ppParts[nRept] = scriptNew();
  +
       /* Iteratively read possibly globbed rc files */
  -    for (nIter = 0; pRc->m_pAnal->m_szRcs[nIter]; nIter++)
  +    for (nIter = 0; nIter < pRc->m_pAnal->m_nRcs; nIter++)
       {
           assert(*pRc->m_pAnal->m_szRcs); /* If one of these assertions fail, */
           assert(pRc->m_pAnal->m_szLocs); /* you've probably seen the ex_ bug */
  @@ -134,26 +141,31 @@
   
           try {
               /* Append config section if it exists */
  -            szSec = scriptSection(pTempscript, configGetval(RC_NCF_VAL));
  -            if (szSec) { /* Only operate if the section lookup succeeds */
  -                scriptAppend(pRc->m_pScript, szSec, strlen(szSec));
  -                scriptAppend(pRc->m_pScript, "\n", sizeof(char));
  -                free(szSec);    /* Cleanup */
  -                szSec = NULL;   /* Cleanup */
  +            pSec = scriptSection(pTempscript, configGetval(RC_NCF_VAL));
  +            if (pSec) { /* Only operate if the section lookup succeeds */
  +                scriptAppend(ppParts[nIter], sectionGetdata(pSec), strlen(sectionGetdata(pSec)));
  +                scriptAppend(ppParts[nIter], "\n", sizeof(char));
  +                sectionDelete(pSec);    /* Cleanup */
  +                pSec = NULL;            /* Cleanup */
               }
   
  +/* FIXME: Swap nested rcfile/section logic loops for section/rcfile ordering */
               for (i = 0; pRc->m_pAnal->m_pszSecs[i]; i++) { /* Iterate over */
                   /* Extract a section from the temp script, and append it */
                   szSec = scriptSection(pTempscript, pRc->m_pAnal->m_pszSecs[i]);
   
                   if (szSec) { /* Only call if the section lookup succeeds */
  +                    scriptAppend(ppParts[nIter], szSec, strlen(szSec));
  +                    scriptAppend(pRc->m_pScript, "\n", sizeof(char));
  +                }
  +/*                if (szSec) { -* Only call if the section lookup succeeds *-
                       scriptAppend(pRc->m_pScript, szSec, strlen(szSec));
                       scriptAppend(pRc->m_pScript, "\n", sizeof(char));
                   }
  -                else if (configGetval(RC_DBG_VAL)) /* Only show if debug set */
  +                else if (configGetval(RC_DBG_VAL)) -* Only show if debug set *-
                       fprintf(stderr, "#Warning: Missing section '%s' in %s!\n",\
                           pRc->m_pAnal->m_pszSecs[i],\
  -                        pRc->m_pAnal->m_szRcs[nIter]);
  +                        pRc->m_pAnal->m_szRcs[nIter]);*/
   
                   if (szSec) { /* Cleanup iterative section string */
                       free(szSec);
  @@ -175,6 +187,15 @@
       close(nFdfunc);     /* Close Func file handle */
   
       /* Memory cleanups */
  +    if (ppParts) {
  +        for (nRept = pRc->m_pAnal->m_nRcs - 1; nRept >= 0 ; nRept--) {
  +            if (ppParts[nRept]) {
  +                free(ppParts[nRept]);
  +                ppParts[nRept] = NULL;
  +        }
  +        free(ppParts);
  +        ppParts = NULL;
  +    }
       if (sBuf) {
           free(sBuf);
           sBuf = NULL;
  Index: ossp-pkg/rc/rc_script.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 rc_script.c
  --- ossp-pkg/rc/rc_script.c	1 Aug 2002 14:31:38 -0000	1.10
  +++ ossp-pkg/rc/rc_script.c	2 Aug 2002 20:09:59 -0000	1.11
  @@ -30,9 +30,10 @@
   #include <stdlib.h>
   #include <string.h>
   
  -#include "rc.h"         /* Public Rc interface      */
  -#include "rc_pcre.h"    /* For section parsing      */
  -#include "rc_config.h"  /* For configuration access */
  +#include "rc.h"         /* Public Rc interface        */
  +#include "rc_pcre.h"    /* For section parsing        */
  +#include "rc_config.h"  /* For configuration access   */
  +#include "rc_const.h"   /* For configuration defaults */
   
   
   /************************************************
  @@ -100,11 +101,12 @@
   * scriptSection(rc_script_t *, const char *)    *
   * Parse a script for a given section            *
   ************************************************/
  -char *scriptSection(rc_script_t *pScript, const char *kszSecname)
  +rc_section_t *scriptSection(rc_script_t *pScript, const char *kszSecname)
   {
  -    char *szTempout    = NULL;
  +    rc_section_t *pSec = NULL;
       char *piLabstart   = NULL;
       int   nLabsize     = NULL;
  +    char *piSubtemp    = NULL; /* To find priority and userid in substrings */
       char *piBlocend    = NULL; /* Misnomer used to control section looping */
       char *piStart      = NULL;
       char *piEnd        = NULL;
  @@ -145,18 +147,18 @@
   /*    pAwesome += RC_GOOD_VIBRATIONS;*/ /* Add good vibes for super action */
   
       /***********************************************************************/
  -    /* Reminder: PCRE writes vectors to help identify substrings           */
  +    /* Reminder: PCRE writes vectors to help identify substrings.          */
       /*           That means that in the following code we can              */
       /*           execute a compiled PCRE regex (ab)(\s)(.*)$               */
       /*                                                                     */
       /*           piBlocend + pnVec[0] = 'start of whole matched string'    */
       /*           piBlocend + pnVec[1] = 'end of whole matched string'      */
  -    /*           piBlocend + pnVec[2] = 'start of first substring ab'      */
  -    /*           piBlocend + pnVec[3] = 'end of first substring ab'        */
  -    /*           piBlocend + pnVec[4] = 'start of second substring \s'     */
  -    /*           piBlocend + pnVec[5] = 'end of second substring \s'       */
  -    /*           piBlocend + pnVec[6] = 'start of third substring .*'      */
  -    /*           piBlocend + pnVec[7] = 'end of third substring .*'        */
  +    /*           piBlocend + pnVec[2] = 'start of first substring (ab)'    */
  +    /*           piBlocend + pnVec[3] = 'end of first substring (ab)'      */
  +    /*           piBlocend + pnVec[4] = 'start of second substring (\s)'   */
  +    /*           piBlocend + pnVec[5] = 'end of second substring (\s)'     */
  +    /*           piBlocend + pnVec[6] = 'start of third substring (.*)'    */
  +    /*           piBlocend + pnVec[7] = 'end of third substring (.*)'      */
       /***********************************************************************/
   
       /* Filter the rc file for the section label, do it here the first time */
  @@ -169,18 +171,35 @@
           piLabstart = piBlocend + *(pnVec + 2);
           nLabsize   = *(pnVec + 3) - *(pnVec + 2);
   
  -        /* Test the substring. If it matches our label, generate a subscript */
  +        /* Test the substring. If it matches our label, make a new section */
           if (!strncmp(piLabstart, kszSecname, nLabsize)) {
  +            /* Handle the section body */
               piStart   = piBlocend + *(pnVec + 6);
               piEnd     = piBlocend + *(pnVec + 7);
  -            szTempout = malloc(piEnd - piStart + sizeof(char));
  -            strncpy(szTempout, piStart, piEnd - piStart);
  -            *(szTempout + (piEnd - piStart)) = NULL;    /* Terminate outgoing */
  -            return(szTempout);  /* Section found, so return the text */
  +            pSec = sectionNew();
  +            pSec->szData = malloc(piEnd - piStart + sizeof(char));
  +            strncpy(pSec->szData, piStart, piEnd - piStart);
  +            *(pSec->szData + (piEnd - piStart)) = NULL; /* Terminate outgoing */
  +
  +            /* Handle the section priority */
  +            piStart = piBlocend + *(pnVec + 4);
  +            piEnd   = piBlocend + *(pnVec + 5);
  +            /* FIXME: Implement --ParseSectionParam for extra gravy */
  +            piSubtemp = strnstr(piStart, RC_DEF_PRG, piEnd - piStart);
  +            if (piSubtemp) { /* Priority pattern found */
  +/* FIXME: Remove the 1 in the following line! */
  +                pSec->nPri = strtol(piSubtemp + strlen(RC_DEF_PRG) + 1, (char **)NULL, 10);
  +            }
  +            else /* Fallback to default value */
  +                pSec->nPri = RC_DEF_PRI;
  +
  +fprintf(stderr, "nPri ist %d!\n", pSec->nPri);
  +            /* Handle the section userid   */
  +            return(pSec);   /* Section found, so return the text */
           }
   
  +        /* Looks like we didn't find the section yet, so keep trying */
           piBlocend += *(pnVec + 1);  /* Find end of section block */
  -        /* Get ready for the next round of matching */
           nFound = pcre_exec(pRegex, pExtra, piBlocend,\
               strlen(piBlocend), 0, 0, pnVec, nVecsize);
       }

From ossp-cvs-owner@ossp.org  Sat Aug  3 12:23:43 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8E443765E5; Sat,  3 Aug 2002 12:23:42 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/path .cvsignore Makefile.in aclocal.m4 configure....
Message-Id: <20020803102342.8E443765E5@mail.ossp.org>
Date: Sat,  3 Aug 2002 12:23:42 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Aug-2002 12:23:42
  Branch: HEAD                             Handle: 2002080311234100

  Added files:
    ossp-pkg/path           .cvsignore
  Modified files:
    ossp-pkg/path           Makefile.in aclocal.m4 configure.ac devtool.conf
                            devtool.func path-config.in path.h path.pod
                            path_abs2rel.c path_basename.c path_dirname.c
                            path_rel2abs.c path_resolve.c path_test.c

  Log:
    source tree cleanups

  Summary:
    Revision    Changes     Path
    1.1         +11 -0      ossp-pkg/path/.cvsignore
    1.2         +8  -8      ossp-pkg/path/Makefile.in
    1.2         +115 -4     ossp-pkg/path/aclocal.m4
    1.3         +6  -10     ossp-pkg/path/configure.ac
    1.3         +1  -1      ossp-pkg/path/devtool.conf
    1.2         +2  -1      ossp-pkg/path/devtool.func
    1.2         +2  -2      ossp-pkg/path/path-config.in
    1.2         +34 -3      ossp-pkg/path/path.h
    1.2         +30 -1      ossp-pkg/path/path.pod
    1.2         +29 -0      ossp-pkg/path/path_abs2rel.c
    1.2         +29 -0      ossp-pkg/path/path_basename.c
    1.2         +29 -0      ossp-pkg/path/path_dirname.c
    1.2         +29 -0      ossp-pkg/path/path_rel2abs.c
    1.2         +29 -0      ossp-pkg/path/path_resolve.c
    1.2         +29 -0      ossp-pkg/path/path_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/path/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  Makefile
  config.guess
  config.h
  config.h.in
  config.sub
  configure
  libtool.m4
  ltmain.sh
  path-config
  path_test
  shtool
  Index: ossp-pkg/path/Makefile.in
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 Makefile.in
  --- ossp-pkg/path/Makefile.in	21 Jan 2002 13:32:35 -0000	1.1.1.1
  +++ ossp-pkg/path/Makefile.in	3 Aug 2002 10:23:41 -0000	1.2
  @@ -1,11 +1,11 @@
   ##
  -##  path - OSSP Path Library
  +##  OSSP path - Filesystem Path Manipulation
   ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP path, a filesystem path manipulation library
  -##  which can be found at http://www.ossp.org/pkg/path/.
  +##  which can be found at http://www.ossp.org/pkg/lib/path/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  @@ -64,17 +64,17 @@
   	$(CC) $(CPPFLAGS) $(CFLAGS) -c $<
   
   .c.lo:
  -	@$(LIBTOOL) --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS) -c $<
  +	$(LIBTOOL) --quiet --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS) -c $<
   
   $(LIB_NAME): $(LIB_OBJS)
  -	@$(LIBTOOL) --mode=link $(CC) -o $(LIB_NAME) $(LIB_OBJS) -rpath $(libdir) \
  +	$(LIBTOOL) --quiet --mode=link $(CC) -o $(LIB_NAME) $(LIB_OBJS) -rpath $(libdir) \
   	    -version-info `$(SHTOOL) version -l txt -d libtool VERSION`
   
   $(TST_NAME): $(TST_OBJS) $(LIB_NAME)
  -	@$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $(TST_NAME) $(TST_OBJS) $(LIB_NAME) $(LIBS)
  +	$(LIBTOOL) --quiet --mode=link $(CC) $(LDFLAGS) -o $(TST_NAME) $(TST_OBJS) $(LIB_NAME) $(LIBS)
   
   check: $(TST_NAME)
  -	@$(LIBTOOL) --mode=execute ./$(TST_NAME)
  +	$(LIBTOOL) --quiet --mode=execute ./$(TST_NAME)
   
   install:
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
  @@ -83,10 +83,10 @@
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libdir)
   	$(SHTOOL) install -c -m 755 path-config $(DESTDIR)$(bindir)/
   	$(SHTOOL) install -c -m 644 path.h $(DESTDIR)$(includedir)/
  -	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libpath.la $(DESTDIR)$(libdir)/
  +	$(LIBTOOL) --quiet --mode=install $(SHTOOL) install -c -m 644 libpath.la $(DESTDIR)$(libdir)/
   
   uninstall:
  -	@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libpath.la
  +	$(LIBTOOL) --quiet --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libpath.la
   	-$(RM) $(DESTDIR)$(includedir)/path.h
   	-$(RM) $(DESTDIR)$(bindir)/path-config
   	-$(RMDIR) $(DESTDIR)$(libdir) >/dev/null 2>&1 || $(TRUE)
  Index: ossp-pkg/path/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 aclocal.m4
  --- ossp-pkg/path/aclocal.m4	21 Jan 2002 13:32:34 -0000	1.1.1.1
  +++ ossp-pkg/path/aclocal.m4	3 Aug 2002 10:23:41 -0000	1.2
  @@ -1,11 +1,11 @@
   dnl ##
  -dnl ##  val - OSSP Value Library
  +dnl ##  OSSP fsl - Faking/Flexible Syslog Library
   dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
   dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
  -dnl ##  This file is part of OSSP val, a Value library which
  -dnl ##  can be found at http://www.ossp.org/pkg/val/.
  +dnl ##  This file is part of OSSP path, a filesystem path manipulation library
  +dnl ##  which can be found at http://www.ossp.org/pkg/lib/path/.
   dnl ##
   dnl ##  Permission to use, copy, modify, and distribute this software for
   dnl ##  any purpose with or without fee is hereby granted, provided that
  @@ -77,7 +77,6 @@
                 * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
       esac
       AC_COMPILER_OPTION(defdbg, -DDEBUG, -DDEBUG, CFLAGS="$CFLAGS -DDEBUG")
  -    AC_COMPILER_OPTION(ggdb3, -ggdb3, -ggdb3, CFLAGS="$CFLAGS -ggdb3")
       CFLAGS="$CFLAGS -pedantic"
       CFLAGS="$CFLAGS -Wall"
       WMORE="-Wshadow -Wpointer-arith -Wcast-align -Winline"
  @@ -114,4 +113,116 @@
       enable_shared=no
   fi
   ])
  +
  +dnl ##
  +dnl ##  Check for an external/extension library.
  +dnl ##  - is aware of <libname>-config style scripts
  +dnl ##  - searches under standard paths include, lib, etc.
  +dnl ##  - searches under subareas like .libs, etc.
  +dnl ##
  +dnl ##  configure.in:
  +dnl ##      AC_CHECK_EXTLIB(<realname>, <libname>, <func>, <header>,
  +dnl ##                      [<success-action> [, <fail-action>]])
  +dnl ##  Makefile.in:
  +dnl ##      CFLAGS  = @CFLAGS@
  +dnl ##      LDFLAGS = @LDFLAGS@
  +dnl ##      LIBS    = @LIBS@
  +dnl ##  shell:
  +dnl ##      $ ./configure --with-<libname>[=DIR]
  +dnl ##
  +
  +AC_DEFUN(AC_CHECK_EXTLIB,[dnl
  +AC_ARG_WITH($2, [dnl
  +[  --with-]m4_substr([$2[[=DIR]]                     ], 0, 19)[build with external $1 library (default=no)]], [dnl
  +    if test ".$with_$2" = .yes; then
  +        #   via config script in PATH
  +        $2_version=`($2-config --version) 2>/dev/null`
  +        if test ".$$2_version" != .; then
  +            CPPFLAGS="$CPPFLAGS `$2-config --cflags`"
  +            CFLAGS="$CFLAGS `$2-config --cflags`"
  +            LDFLAGS="$LDFLAGS `$2-config --ldflags`"
  +        fi
  +    else
  +        if test -d "$with_$2"; then
  +            found=0
  +            #   via config script
  +            for dir in $with_$2/bin $with_$2; do
  +                if test -f "$dir/$2-config" && test ! -f "$dir/$2-config.in"; then
  +                    $2_version=`($dir/$2-config --version) 2>/dev/null`
  +                    if test ".$$2_version" != .; then
  +                        CPPFLAGS="$CPPFLAGS `$dir/$2-config --cflags`"
  +                        CFLAGS="$CFLAGS `$dir/$2-config --cflags`"
  +                        LDFLAGS="$LDFLAGS `$dir/$2-config --ldflags`"
  +                        found=1
  +                        break
  +                    fi
  +                fi
  +            done
  +            #   in standard sub-areas
  +            if test ".$found" = .0; then
  +                for dir in $with_$2/include/$2 $with_$2/include $with_$2; do
  +                    if test -f "$dir/$4"; then
  +                        CPPFLAGS="$CPPFLAGS -I$dir"
  +                        CFLAGS="$CFLAGS -I$dir"
  +                        found=1
  +                        break
  +                    fi
  +                done
  +                for dir in $with_$2/lib/$2 $with_$2/lib $with_$2; do
  +                    if test -f "$dir/lib$2.la" && test -d "$dir/.libs"; then
  +                        LDFLAGS="$LDFLAGS -L$dir -L$dir/.libs"
  +                        found=1
  +                        break
  +                    elif test -f "$dir/lib$2.a" || test -f "$dir/lib$2.so"; then
  +                        LDFLAGS="$LDFLAGS -L$dir"
  +                        found=1
  +                        break
  +                    fi
  +                done
  +            fi
  +            #   in any sub-area
  +            if test ".$found" = .0; then
  +changequote(, )dnl
  +                for file in x `find $with_$2 -name "$4" -type f -print`; do
  +                    test .$file = .x && continue
  +                    dir=`echo $file | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;'`
  +                    CPPFLAGS="$CPPFLAGS -I$dir"
  +                    CFLAGS="$CFLAGS -I$dir"
  +                done
  +                for file in x `find $with_$2 -name "lib$2.[aso]" -type f -print`; do
  +                    test .$file = .x && continue
  +                    dir=`echo $file | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;'`
  +                    LDFLAGS="$LDFLAGS -L$dir"
  +                done
  +changequote([, ])dnl
  +            fi
  +        fi
  +    fi
  +    AC_HAVE_HEADERS($4)
  +    AC_CHECK_LIB($2, $3)
  +    with_$2=yes
  +    ac_var="ac_cv_header_`echo $4 | sed 'y%./+-%__p_%'`"
  +    eval "ac_val=\$$ac_var"
  +    if test ".$ac_val" != .yes; then
  +        with_$2=no
  +    fi
  +    if test ".$ac_cv_lib_$2_$3" != .yes; then
  +        with_$2=no
  +    fi
  +    if test ".$with_$2" = .no; then
  +        AC_ERROR([Unable to find $1 library])
  +    fi
  +    ], [dnl
  +if test ".$with_$2" = .; then
  +    with_$2=no
  +fi
  +    ])dnl
  +AC_MSG_CHECKING(whether to build against external $1 library)
  +if test ".$with_$2" = .yes; then
  +    ifelse([$5], , :, [$5])
  +else
  +    ifelse([$6], , :, [$6])
  +fi
  +AC_MSG_RESULT([$with_$2])
  +])dnl
   
  Index: ossp-pkg/path/configure.ac
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 configure.ac
  --- ossp-pkg/path/configure.ac	31 Jan 2002 09:10:05 -0000	1.2
  +++ ossp-pkg/path/configure.ac	3 Aug 2002 10:23:41 -0000	1.3
  @@ -1,11 +1,11 @@
   dnl ##
  -dnl ##  path - OSSP Path Library
  +dnl ##  OSSP path - Filesystem Path Manipulation
   dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
   dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP path, a filesystem path manipulation library
  -dnl ##  which can be found at http://www.ossp.org/pkg/path/.
  +dnl ##  which can be found at http://www.ossp.org/pkg/lib/path/.
   dnl ##
   dnl ##  Permission to use, copy, modify, and distribute this software for
   dnl ##  any purpose with or without fee is hereby granted, provided that
  @@ -28,14 +28,11 @@
   dnl ##  configure.ac: GNU Autoconf source script
   dnl ##
   
  -AC_PREREQ(2.52)
  -AC_REVISION(1.0)
  -AC_INIT(README)
  +AC_PREREQ(2.53)
  +AC_INIT
   
  -AC_DIVERT_PUSH(NOTICE)
   V=`./shtool version -l txt -d long VERSION`
   ./shtool echo -e "Configuring %BOSSP path%b (Filesystem Path Manipulations), Version %B${V}%b"
  -AC_DIVERT_POP()
   
   AC_SET_MAKE
   AC_PROG_CC
  @@ -45,8 +42,7 @@
   AC_PROG_LIBTOOL
   
   AC_CONFIG_HEADERS(config.h)
  -AC_CONFIG_FILES(Makefile path-config)
  +AC_CONFIG_FILES([Makefile path-config])
  +AC_CONFIG_COMMANDS([adjustment], [chmod a+x path-config])
   AC_OUTPUT
  -
  -chmod a+x path-config
   
  Index: ossp-pkg/path/devtool.conf
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.conf
  --- ossp-pkg/path/devtool.conf	28 Jul 2002 08:06:10 -0000	1.2
  +++ ossp-pkg/path/devtool.conf	3 Aug 2002 10:23:41 -0000	1.3
  @@ -5,7 +5,7 @@
   %autogen
       @autogen shtool   1.6.1 "1.6.*" all
       @autogen libtool  1.4.2 "1.4*"
  -    @autogen autoconf 2.52  "2.5.*"
  +    @autogen autoconf 2.53  "2.5.*"
   
   %autoclean
       @autoclean shtool
  Index: ossp-pkg/path/devtool.func
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 devtool.func
  --- ossp-pkg/path/devtool.func	21 Jan 2002 13:32:35 -0000	1.1.1.1
  +++ ossp-pkg/path/devtool.func	3 Aug 2002 10:23:41 -0000	1.2
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
   ##
   
   devtool_require () {
  @@ -33,6 +33,7 @@
               echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
               autoconf
               autoheader 2>&1 | grep -v "is unchanged"
  +            rm -rf autom4te.cache >/dev/null 2>&1
               ;;
           libtool )
               libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
  Index: ossp-pkg/path/path-config.in
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 path-config.in
  --- ossp-pkg/path/path-config.in	21 Jan 2002 13:32:35 -0000	1.1.1.1
  +++ ossp-pkg/path/path-config.in	3 Aug 2002 10:23:41 -0000	1.2
  @@ -1,12 +1,12 @@
   #!/bin/sh
   ##
  -##  path - OSSP Path Library
  +##  OSSP path - Filesystem Path Manipulation
   ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP path, a filesystem path manipulation library
  -##  which can be found at http://www.ossp.org/pkg/path/.
  +##  which can be found at http://www.ossp.org/pkg/lib/path/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/path/path.h
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 path.h
  --- ossp-pkg/path/path.h	21 Jan 2002 13:32:34 -0000	1.1.1.1
  +++ ossp-pkg/path/path.h	3 Aug 2002 10:23:41 -0000	1.2
  @@ -1,5 +1,35 @@
  -#ifndef _PATH_H_
  -#define _PATH_H_
  +/*
  +**  OSSP path - Filesystem Path Manipulation
  +**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**
  +**  This file is part of OSSP path, a filesystem path manipulation library
  +**  which can be found at http://www.ossp.org/pkg/lib/path/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  path.h: API definition
  +*/
  +
  +#ifndef __PATH_H__
  +#define __PATH_H__
   
   char *path_abs2rel  (char *, size_t, const char *, const char *);
   char *path_rel2abs  (char *, size_t, const char *, const char *);
  @@ -7,4 +37,5 @@
   char *path_dirname  (char *, size_t, const char *);
   char *path_basename (char *, size_t, const char *);
   
  -#endif /* _PATH_H_ */
  +#endif /* __PATH_H__ */
  +
  Index: ossp-pkg/path/path.pod
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 path.pod
  --- ossp-pkg/path/path.pod	21 Jan 2002 13:32:34 -0000	1.1.1.1
  +++ ossp-pkg/path/path.pod	3 Aug 2002 10:23:41 -0000	1.2
  @@ -1,9 +1,38 @@
  +##
  +##  OSSP path - Filesystem Path Manipulation
  +##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##
  +##  This file is part of OSSP path, a filesystem path manipulation library
  +##  which can be found at http://www.ossp.org/pkg/lib/path/.
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  path.pod: manual page
  +##
   
   =pod
   
   =head1 NAME
   
  -B<path> - Filesystem Path Manipulation Library
  +B<path> - Filesystem Path Manipulation
   
   =head1 SYNOPSIS
   
  Index: ossp-pkg/path/path_abs2rel.c
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 path_abs2rel.c
  --- ossp-pkg/path/path_abs2rel.c	21 Jan 2002 13:32:34 -0000	1.1.1.1
  +++ ossp-pkg/path/path_abs2rel.c	3 Aug 2002 10:23:41 -0000	1.2
  @@ -1,3 +1,32 @@
  +/*
  +**  OSSP path - Filesystem Path Manipulation
  +**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**
  +**  This file is part of OSSP path, a filesystem path manipulation library
  +**  which can be found at http://www.ossp.org/pkg/lib/path/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  path_abs2rel.c: absolute to relative path translation
  +*/
   
   /*
    * Copyright (c) 1997 Shigio Yamaguchi. All rights reserved.
  Index: ossp-pkg/path/path_basename.c
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 path_basename.c
  --- ossp-pkg/path/path_basename.c	21 Jan 2002 13:32:35 -0000	1.1.1.1
  +++ ossp-pkg/path/path_basename.c	3 Aug 2002 10:23:41 -0000	1.2
  @@ -1,3 +1,32 @@
  +/*
  +**  OSSP path - Filesystem Path Manipulation
  +**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**
  +**  This file is part of OSSP path, a filesystem path manipulation library
  +**  which can be found at http://www.ossp.org/pkg/lib/path/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  path_basename.c: base filename extraction
  +*/
   
   /*-
    * Copyright (c) 2000 Chris Costello <chris@FreeBSD.org>
  Index: ossp-pkg/path/path_dirname.c
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 path_dirname.c
  --- ossp-pkg/path/path_dirname.c	21 Jan 2002 13:32:35 -0000	1.1.1.1
  +++ ossp-pkg/path/path_dirname.c	3 Aug 2002 10:23:41 -0000	1.2
  @@ -1,3 +1,32 @@
  +/*
  +**  OSSP path - Filesystem Path Manipulation
  +**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**
  +**  This file is part of OSSP path, a filesystem path manipulation library
  +**  which can be found at http://www.ossp.org/pkg/lib/path/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  path_dirname.c: directory name extraction
  +*/
   
   /*-
    * Copyright (c) 2000 Chris Costello <chris@FreeBSD.org>
  Index: ossp-pkg/path/path_rel2abs.c
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 path_rel2abs.c
  --- ossp-pkg/path/path_rel2abs.c	21 Jan 2002 13:32:34 -0000	1.1.1.1
  +++ ossp-pkg/path/path_rel2abs.c	3 Aug 2002 10:23:41 -0000	1.2
  @@ -1,3 +1,32 @@
  +/*
  +**  OSSP path - Filesystem Path Manipulation
  +**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**
  +**  This file is part of OSSP path, a filesystem path manipulation library
  +**  which can be found at http://www.ossp.org/pkg/lib/path/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  path_rel2abs.c: relative to absolute path translation
  +*/
   
   /*
    * Copyright (c) 1997 Shigio Yamaguchi. All rights reserved.
  Index: ossp-pkg/path/path_resolve.c
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 path_resolve.c
  --- ossp-pkg/path/path_resolve.c	21 Jan 2002 13:32:35 -0000	1.1.1.1
  +++ ossp-pkg/path/path_resolve.c	3 Aug 2002 10:23:41 -0000	1.2
  @@ -1,3 +1,32 @@
  +/*
  +**  OSSP path - Filesystem Path Manipulation
  +**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**
  +**  This file is part of OSSP path, a filesystem path manipulation library
  +**  which can be found at http://www.ossp.org/pkg/lib/path/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  path_resolve.c: pathname resolving
  +*/
   
   /*
    * Copyright (c) 1994
  Index: ossp-pkg/path/path_test.c
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 path_test.c
  --- ossp-pkg/path/path_test.c	21 Jan 2002 13:32:35 -0000	1.1.1.1
  +++ ossp-pkg/path/path_test.c	3 Aug 2002 10:23:41 -0000	1.2
  @@ -1,3 +1,32 @@
  +/*
  +**  OSSP path - Filesystem Path Manipulation
  +**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**
  +**  This file is part of OSSP path, a filesystem path manipulation library
  +**  which can be found at http://www.ossp.org/pkg/lib/path/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  path_test.c: test suite
  +*/
   
   #include <stdio.h>
   #include <stdlib.h>

From ossp-cvs-owner@ossp.org  Sat Aug  3 23:00:19 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A1B62767E8; Sat,  3 Aug 2002 23:00:18 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/path Makefile.in TODO path.h path.pod path_temp.c...
Message-Id: <20020803210018.A1B62767E8@mail.ossp.org>
Date: Sat,  3 Aug 2002 23:00:18 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Aug-2002 23:00:18
  Branch: HEAD                             Handle: 2002080322001401

  Added files:
    ossp-pkg/path           path_temp.c path_util.c path_util.h
  Modified files:
    ossp-pkg/path           Makefile.in TODO path.h path.pod

  Log:
    add (still untested) full-featured path_temp() function

  Summary:
    Revision    Changes     Path
    1.3         +2  -1      ossp-pkg/path/Makefile.in
    1.2         +1  -3      ossp-pkg/path/TODO
    1.3         +15 -0      ossp-pkg/path/path.h
    1.3         +28 -21     ossp-pkg/path/path.pod
    1.1         +195 -0     ossp-pkg/path/path_temp.c
    1.1         +219 -0     ossp-pkg/path/path_util.c
    1.1         +41 -0      ossp-pkg/path/path_util.h
  ____________________________________________________________________________

  Index: ossp-pkg/path/Makefile.in
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 Makefile.in
  --- ossp-pkg/path/Makefile.in	3 Aug 2002 10:23:41 -0000	1.2
  +++ ossp-pkg/path/Makefile.in	3 Aug 2002 21:00:14 -0000	1.3
  @@ -50,7 +50,8 @@
   TRUE        = true
   
   LIB_NAME    = libpath.la
  -LIB_OBJS    = path_abs2rel.lo path_rel2abs.lo path_resolve.lo path_dirname.lo path_basename.lo 
  +LIB_OBJS    = path_abs2rel.lo path_rel2abs.lo path_resolve.lo \
  +              path_dirname.lo path_basename.lo path_temp.lo path_util.lo
   
   TST_NAME    = path_test
   TST_OBJS    = path_test.o
  Index: ossp-pkg/path/TODO
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 TODO
  --- ossp-pkg/path/TODO	21 Jan 2002 13:32:34 -0000	1.1.1.1
  +++ ossp-pkg/path/TODO	3 Aug 2002 21:00:14 -0000	1.2
  @@ -1,11 +1,9 @@
   
  -- add path_tmpfile() from BSD tmpfile(3) stuff
  +- restliche API auf path_rc_t umbauen
   - add glob(*) from shpat
   - add fnmatch(*) from shpat
   - add tilde() from shpath/bres or bash-2.05a
  -
   - merge with shpat und proc/getcwd
  -
   - MAXPATHLEN should be PATH_MAXPATHLEN und
     per AUtoconf herausgegfunden weredse
   - path_test.pl in C umschreiben und in path_test.c einbauen
  Index: ossp-pkg/path/path.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 path.h
  --- ossp-pkg/path/path.h	3 Aug 2002 10:23:41 -0000	1.2
  +++ ossp-pkg/path/path.h	3 Aug 2002 21:00:14 -0000	1.3
  @@ -31,11 +31,26 @@
   #ifndef __PATH_H__
   #define __PATH_H__
   
  +typedef enum {
  +    PATH_OK = 0,
  +    PATH_ERR_ARG,
  +    PATH_ERR_USE,
  +    PATH_ERR_INT,
  +    PATH_ERR_SYS,
  +    PATH_ERR_EXS
  +} path_rc_t;
  +
  +typedef enum {
  +    PATH_TEMP_FILE,
  +    PATH_TEMP_DIR
  +} path_temp_t;
  +
   char *path_abs2rel  (char *, size_t, const char *, const char *);
   char *path_rel2abs  (char *, size_t, const char *, const char *);
   char *path_resolve  (char *, size_t, const char *);
   char *path_dirname  (char *, size_t, const char *);
   char *path_basename (char *, size_t, const char *);
  +path_rc_t path_temp(path_temp_t id, const char *tmpl, char **res_ptr, size_t *res_size, int *res_fd);
   
   #endif /* __PATH_H__ */
   
  Index: ossp-pkg/path/path.pod
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 path.pod
  --- ossp-pkg/path/path.pod	3 Aug 2002 10:23:41 -0000	1.2
  +++ ossp-pkg/path/path.pod	3 Aug 2002 21:00:15 -0000	1.3
  @@ -32,7 +32,7 @@
   
   =head1 NAME
   
  -B<path> - Filesystem Path Manipulation
  +B<OSSP path> - Filesystem Path Manipulation
   
   =head1 SYNOPSIS
   
  @@ -50,10 +50,14 @@
   
   =head1 DESCRIPTION
   
  -B<Path> is a filesystem path conversion library. It allows one to
  -convert between absolute and relative paths and to resolve symlinks in a
  -path. The following Application Programming Interface (API) is provided
  -for this:
  +B<OSSP path> is a filesystem path manipulation library. It allows one
  +to convert between absolute and relative paths and to resolve symbolic
  +links in a path. 
  +
  +=head1 APPLICATION PROGRAMMING INTERFACE (API)
  +
  +The following Application Programming Interface (API) is provided by
  +B<OSSP path>:
   
   =over 4
   
  @@ -106,22 +110,24 @@
   
   =item char *B<path_dirname>(char *I<outbuf>, const size_t I<outsize>, const char *I<path>);
   
  -This function extracts the directory filename part from I<path> and stores it
  -into the caller supplied buffer at I<outbuf>, but never more than I<outsize>
  -bytes are written.  The function returns a pointer to I<outbuf> on success,
  -and C<NULL> on error.
  +This function extracts the directory filename part from I<path> and
  +stores it into the caller supplied buffer at I<outbuf>, but never more
  +than I<outsize> bytes are written. The function returns a pointer to
  +I<outbuf> on success, and C<NULL> on error.
   
   =item char *B<path_basename>(char *I<outbuf>, const size_t I<outsize>, const char *I<path>);
   
  -This function extracts the base filename part from I<path> and stores it into
  -the caller supplied buffer at I<outbuf>, but never more than I<outsize> bytes
  -are written.  The function returns a pointer to I<outbuf> on success, and
  -C<NULL> on error.
  +This function extracts the base filename part from I<path> and stores
  +it into the caller supplied buffer at I<outbuf>, but never more than
  +I<outsize> bytes are written. The function returns a pointer to
  +I<outbuf> on success, and C<NULL> on error.
   
   =back
   
   =head1 EXAMPLE
   
  +The code
  +
    char result[MAXPATHLEN];
    char *path = path_abs2rel(result, sizeof(result), "/usr/src/sys", "/usr/local/lib");
   
  @@ -179,8 +185,8 @@
   
    path == "../../../sys/kern"  /* It's correct but ... */
   
  -That is correct, but a little redundant. If you wish get the simple an-
  -swer 'C<kern>', do the following.
  +That is correct, but a little redundant. If you wish get the simple
  +answer 'C<kern>', do the following.
   
    path = path_abs2rel(r0, sizeof(r0), 
                        path_resolve(r1, sizeof(r1), "/sys/kern"), 
  @@ -194,12 +200,13 @@
   
   =head1 AUTHORS
   
  -The path_abs2rel() and path_rel2abs() function was originally written in
  -December 1997 by I<Shigio Yamaguchi> for his I<PathConvert> project. The
  -path_resolve() function is derived from FreeBSD's realpath(3) function
  -which was written in February 1994 by I<Jan-Simon Pendry>. The work off
  -of this code and the B<Path> library as a whole was written in January
  -2000 by I<Ralf S. Engelschall>.
  +The path_abs2rel(3) and path_rel2abs(3) function was originally written
  +in December 1997 by I<Shigio Yamaguchi> for his I<PathConvert> project.
  +The path_resolve(3) function is derived from FreeBSD's realpath(3)
  +function which was written in February 1994 by I<Jan-Simon Pendry>.
  +The work off of this code and the B<OSSP path> library as a whole was
  +written in January 2000 by I<Ralf S. Engelschall> for use in the B<OSSP>
  +project.
   
   =cut
   
  Index: ossp-pkg/path/path_temp.c
  ============================================================
  $ cvs update -p -r1.1 path_temp.c
  /*
  **  OSSP path - Filesystem Path Manipulation
  **  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP path, a filesystem path manipulation library
  **  which can be found at http://www.ossp.org/pkg/lib/path/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  path_temp.c: temporary pathname creation
  */
  
  #include <stdlib.h>
  #include <string.h>
  #include <stdarg.h>
  #include <unistd.h>
  #include <fcntl.h>
  #include <errno.h>
  #include <pwd.h>
  #include <sys/stat.h>
  #include <sys/param.h>
  #include <sys/types.h>
  #include <sys/time.h>
  
  #include "path.h"
  #include "path_util.h"
  
  static const char 
  path_temp_padchar[] = 
      "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
  
  path_rc_t 
  path_temp(
      path_temp_t id, 
      const char *tmpl, 
      char      **res_ptr, 
      size_t     *res_size,
      int        *res_fd)
  {
      char tmpl_def[MAXPATHLEN];
      char path[MAXPATHLEN];
      char *tmpdir;
      size_t n;
      char *user;
      char user_buf[4+((sizeof(long)*8)/3)+10]; 
      const char *cp;
      const char *cpT;
      char *cpP;
      struct passwd *pw;
      struct timeval tp;
      struct timezone tzp;
      pid_t pid;
      pid_t ppid;
      uid_t uid;
      int r;
      path_rc_t rc;
      int fd;
  
      /* argument sanity checks */
      if (res_ptr == NULL && res_fd == NULL)
          return PATH_ERR_ARG;
      if (id == PATH_TEMP_DIR && res_fd != NULL)
          return PATH_ERR_USE;
  
      /* determine temporary directory */
      if ((tmpdir = getenv("TMPDIR")) == NULL)
          tmpdir = getenv("TEMPDIR");
      if (tmpdir == NULL || tmpdir[0] == '\0')
          tmpdir = "/tmp";
  
      /* provide a reasonable fallback template */
      uid = getuid();
      if (tmpl == NULL || tmpl[0] == '\0') {
          /* none or empty template */
          if ((pw = getpwuid(uid)) != NULL)
              user = pw->pw_name;
          else {
              path_msnprintf(user_buf, sizeof(user_buf), "uid-%ld", (long)uid);
              user = user_buf;
          }
          n = strlen(tmpdir);
          path_msnprintf(tmpl_def, sizeof(tmpl_def), "%s%s%s.XXXXXXXX", 
                         tmpdir, (tmpdir[n-1] != '/' ? "/" : ""), user_buf);
          tmpl = tmpl_def;  
      }
      else if (tmpl[0] != '/') {
          /* non-absolute path template */
          n = strlen(tmpdir);
          path_msnprintf(tmpl_def, sizeof(tmpl_def), "%s%s%s", 
                         tmpdir, (tmpdir[n-1] != '/' ? "/" : ""), tmpl);
          if (strchr(tmpl_def, 'X') == NULL) {
              n = strlen(tmpl_def);
              path_msnprintf(tmpl_def+n, sizeof(tmpl_def)-n, ".XXXXXXXX");
          }
          tmpl = tmpl_def;  
      }
  
      /* seed PRNG as good as possible with POSIX features */
      gettimeofday(&tp, &tzp);
      pid = getpid();
      ppid = getppid();
      srand(  (unsigned int)tp.tv_sec 
            + (unsigned int)tp.tv_usec
            + (unsigned int)uid
            + (unsigned int)pid
            + (unsigned int)ppid);
  
      /* create initial path */
      n = 0;
      for (cpT = tmpl, cpP = path; *cpT != '\0'; cpT++, cpP++) {
          if (*cpT == 'X') {
              r = rand() % (sizeof(path_temp_padchar)-1);
              *cpP = path_temp_padchar[r];
              n++;
          }
          else
              *cpP = *cpT;
      }
      *cpP = '\0';
      if (n < 2)
          return PATH_ERR_ARG;
  
      /* try to find a good temporary path */
      rc = PATH_ERR_INT;
      fd = -1;
      for (;;) {
          /* try to create path */
          if (id == PATH_TEMP_FILE) {
              if ((fd = open(path, O_CREAT|O_EXCL|O_RDWR, 0600)) >= 0) {
                  rc = PATH_OK;
                  break;
              }
              if (errno != EEXIST)
                  return PATH_ERR_SYS;
          } 
          else if (id == PATH_TEMP_DIR) {
              if (mkdir(path, 0700) == 0) {
                  rc = PATH_OK;
                  break;
              }
              if (errno != EEXIST)
                  return PATH_ERR_SYS;
          } 
          else 
              return PATH_ERR_ARG;
  
          /* path collision found, so cycle through namespace */
          for (cpT = tmpl, cpP = path; *cpT != '\0'; cpT++, cpP++) {
              if (*cpT == 'X') {
                  cp = strchr(path_temp_padchar, *cpP);
                  if (cp == NULL || *++cp == '\0')
                      *cpP = path_temp_padchar[0];
                  else {
                      *cpP = *cp;
                      break;
                  }
              }
          }
          if (*cpT == '\0')
              return PATH_ERR_EXS;
      }
  
      /* provide results */
      if (rc == PATH_OK) {
          if (res_ptr != NULL)
              *res_ptr = strdup(path);
          else
              unlink(path);
          if (res_fd != NULL)
              *res_fd = fd;
          else
              close(fd);
      }
   
      return rc;
  }
  
  Index: ossp-pkg/path/path_util.c
  ============================================================
  $ cvs update -p -r1.1 path_util.c
  /*
  **  OSSP path - Filesystem Path Manipulation
  **  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP path, a filesystem path manipulation library
  **  which can be found at http://www.ossp.org/pkg/lib/path/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  path_util.c: utility functions
  */
  
  #include <stdio.h>
  #include <stdlib.h>
  #include <stdarg.h>
  #include <string.h>
  
  #include "path.h"
  #include "path_util.h"
  
  /* minimal output-independent vprintf(3) variant which supports %{c,s,d,%} only */
  int path_mvxprintf(int (*output)(void *ctx, const char *buffer, size_t bufsize), void *ctx, const char *format, va_list ap)
  {
      /* sufficient integer buffer: <available-bits> x log_10(2) + safety */
      char ibuf[((sizeof(int)*8)/3)+10]; 
      char libuf[((sizeof(long)*8)/3)+10]; 
      char *cp;
      char c;
      int d;
      long ld;
      int n;
      int bytes;
      int islong;
  
      if (format == NULL || ap == NULL)
          return -1;
      bytes = 0;
      while (*format != '\0') {
          if (*format == '%') {
              c = *(format+1);
              islong = 0;
              if (c == 'l') {
                  islong = 1;
                  format++;
                  c = *(format+1);
              }
              if (c == '%') {
                  /* expand "%%" */
                  cp = &c;
                  n = sizeof(char);
              }
              else if (c == 'c') {
                  /* expand "%c" */
                  c = (char)va_arg(ap, int);
                  cp = &c;
                  n = sizeof(char);
              }
              else if (c == 's') {
                  /* expand "%s" */
                  if ((cp = (char *)va_arg(ap, char *)) == NULL)
                      cp = "(null)";
                  n = strlen(cp);
              }
              else if (c == 'd') {
                  /* expand "%d" */
                  if (islong) {
                      ld = (long)va_arg(ap, long);
  #ifdef HAVE_SNPRINTF
                      snprintf(libuf, sizeof(libuf), "%ld", ld); /* explicitly secure */
  #else
                      sprintf(libuf, "%ld", ld);                 /* implicitly secure */
  #endif
                      cp = libuf;
                  }
                  else {
                      d = (int)va_arg(ap, int);
  #ifdef HAVE_SNPRINTF
                      snprintf(ibuf, sizeof(ibuf), "%d", d); /* explicitly secure */
  #else
                      sprintf(ibuf, "%d", d);                /* implicitly secure */
  #endif
                      cp = ibuf;
                  }
                  n = strlen(cp);
              }
              else {
                  /* any other "%X" */
                  cp = (char *)format;
                  n  = 2;
              }
              format += 2;
          }
          else {
              /* plain text */
              cp = (char *)format;
              if ((format = strchr(cp, '%')) == NULL)
                  format = strchr(cp, '\0');
              n = format - cp;
          }
          /* perform output operation */
          if (output != NULL)
              if ((n = output(ctx, cp, n)) == -1)
                  break;
          bytes += n;
      }
      return bytes;
  }
  
  /* output callback function context for path_mvsnprintf() */
  typedef struct {
      char *bufptr;
      size_t buflen;
  } path_mvsnprintf_cb_t;
  
  /* output callback function for path_mvsnprintf() */
  static int path_mvsnprintf_cb(void *_ctx, const char *buffer, size_t bufsize)
  {
      path_mvsnprintf_cb_t *ctx = (path_mvsnprintf_cb_t *)_ctx;
  
      if (bufsize > ctx->buflen)
          return -1;
      memcpy(ctx->bufptr, buffer, bufsize);
      ctx->bufptr += bufsize;
      ctx->buflen -= bufsize;
      return bufsize;
  }
  
  /* minimal vsnprintf(3) variant which supports %{c,s,d} only */
  int path_mvsnprintf(char *buffer, size_t bufsize, const char *format, va_list ap)
  {
      int n;
      path_mvsnprintf_cb_t ctx;
  
      if (format == NULL || ap == NULL)
          return -1;
      if (buffer != NULL && bufsize == 0)
          return -1;
      if (buffer == NULL) 
          /* just determine output length */
          n = path_mvxprintf(NULL, NULL, format, ap);
      else {
          /* perform real output */
          ctx.bufptr = buffer;
          ctx.buflen = bufsize;
          n = path_mvxprintf(path_mvsnprintf_cb, &ctx, format, ap);
          if (n != -1 && ctx.buflen == 0)
              n = -1;
          if (n != -1)
              *(ctx.bufptr) = '\0';
      }
      return n;
  }
  
  /* minimal snprintf(3) variant which supports %{c,s,d} only */
  int path_msnprintf(char *buffer, size_t bufsize, const char *format, ...)
  {
      int chars;
      va_list ap;
  
      /* pass through to va_list based variant */
      va_start(ap, format);
      chars = path_mvsnprintf(buffer, bufsize, format, ap);
      va_end(ap);
  
      return chars;
  }
  
  /* minimal vasnprintf(3) variant which supports %{c,s,d} only */
  char *path_mvasnprintf(const char *format, va_list ap)
  {
      char *buffer;
      size_t bufsize; 
      va_list apbak;
  
      apbak = ap;
      if ((bufsize = path_mvsnprintf(NULL, -1, format, ap)) == -1)
          return NULL;
      if ((buffer = malloc(bufsize+1)) == NULL)
          return NULL;
      ap = apbak;
      if ((bufsize = path_mvsnprintf(buffer, bufsize, format, ap)) == -1) {
          free(buffer);
          return NULL;
      }
      return buffer;
  }
  
  /* minimal asnprintf(3) variant which supports %{c,s,d} only */
  char *path_masnprintf(const char *format, ...)
  {
      char *buffer;
      va_list ap;
  
      /* pass through to va_list based variant */
      va_start(ap, format);
      buffer = path_mvasnprintf(format, ap);
      va_end(ap);
  
      return buffer;
  }
  
  Index: ossp-pkg/path/path_util.h
  ============================================================
  $ cvs update -p -r1.1 path_util.h
  /*
  **  OSSP path - Filesystem Path Manipulation
  **  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP path, a filesystem path manipulation library
  **  which can be found at http://www.ossp.org/pkg/lib/path/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  path_util.h: internal utility API
  */
  
  #ifndef __PATH_UTIL_H__
  #define __PATH_UTIL_H__
  
  int   path_mvxprintf   (int (*output)(void *ctx, const char *buffer, size_t bufsize), void *ctx, const char *format, va_list ap);
  int   path_mvsnprintf  (char *buffer, size_t bufsize, const char *format, va_list ap);
  int   path_msnprintf   (char *buffer, size_t bufsize, const char *format, ...);
  char *path_mvasnprintf (const char *format, va_list ap);
  char *path_masnprintf  (const char *format, ...);
  
  #endif /* __PATH_UTIL__ */
  

From ossp-cvs-owner@ossp.org  Tue Aug  6 13:34:33 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2CB2B767CB; Tue,  6 Aug 2002 13:34:33 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl_test.cfg
Message-Id: <20020806113433.2CB2B767CB@mail.ossp.org>
Date: Tue,  6 Aug 2002 13:34:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   06-Aug-2002 13:34:33
  Branch: HEAD                             Handle: 2002080612343200

  Modified files:
    ossp-pkg/fsl            fsl_test.cfg

  Log:
    test the node name expansion

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/fsl/fsl_test.cfg
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl_test.cfg
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 fsl_test.cfg
  --- ossp-pkg/fsl/fsl_test.cfg	1 Aug 2002 11:41:05 -0000	1.1
  +++ ossp-pkg/fsl/fsl_test.cfg	6 Aug 2002 11:34:32 -0000	1.2
  @@ -15,7 +15,7 @@
   default (.+)/.+ q{
       debug: 
       prefix(
  -        prefix="%b %d %H:%M:%S <%L> $1[%P]: ", 
  +        prefix="%b %d %H:%M:%S <%L> $1[%P]@%N: ", 
           timezone=local
       ) -> 
       file(

From ossp-cvs-owner@ossp.org  Tue Aug  6 14:55:07 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0359E765E5; Tue,  6 Aug 2002 14:55:06 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_prefix.c
Message-Id: <20020806125506.0359E765E5@mail.ossp.org>
Date: Tue,  6 Aug 2002 14:55:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   06-Aug-2002 14:55:06
  Branch: HEAD                             Handle: 2002080613550600

  Modified files:
    ossp-pkg/l2             l2_ch_prefix.c

  Log:
    fixed %N on solaris "... successful ... non-negative ... Otherwise,  -1 ..."

  Summary:
    Revision    Changes     Path
    1.22        +1  -1      ossp-pkg/l2/l2_ch_prefix.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_prefix.c
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 l2_ch_prefix.c
  --- ossp-pkg/l2/l2_ch_prefix.c	30 Jul 2002 19:08:24 -0000	1.21
  +++ ossp-pkg/l2/l2_ch_prefix.c	6 Aug 2002 12:55:06 -0000	1.22
  @@ -112,7 +112,7 @@
                       break;
                   }
                   case 'N': {
  -                    if (uname(&uts) == 0)
  +                    if (uname(&uts) != -1)
                           l2_util_sprintf(caBuf, sizeof(caBuf), uts.nodename);
                       else
                           l2_util_sprintf(caBuf, sizeof(caBuf), "localhost");

From ossp-cvs-owner@ossp.org  Wed Aug  7 18:01:21 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 145CC767F8; Wed,  7 Aug 2002 18:01:21 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp configure.ac
Message-Id: <20020807160121.145CC767F8@mail.ossp.org>
Date: Wed,  7 Aug 2002 18:01:21 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Aug-2002 18:01:20
  Branch: HEAD                             Handle: 2002080717012000

  Modified files:
    ossp-pkg/lmtp2nntp      configure.ac

  Log:
    bugfix Autoconf stuff

  Summary:
    Revision    Changes     Path
    1.28        +2  -2      ossp-pkg/lmtp2nntp/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/configure.ac
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 configure.ac
  --- ossp-pkg/lmtp2nntp/configure.ac	24 Apr 2002 09:37:16 -0000	1.27
  +++ ossp-pkg/lmtp2nntp/configure.ac	7 Aug 2002 16:01:20 -0000	1.28
  @@ -139,8 +139,8 @@
   dnl #   check for OSSP tai library
   AC_CHECK_EXTLIB([OSSP tai], 
                   tai, tai_create, tai.h, 
  -                [SUBDIR_PCRE=""], 
  -                [SUBDIR_PCRE="lib_tai"
  +                [SUBDIR_TAI=""], 
  +                [SUBDIR_TAI="lib_tai"
                    CPPFLAGS="$CPPFLAGS -Ilib_tai"
                    CFLAGS="$CFLAGS -Ilib_tai"
                    LDFLAGS="$LDFLAGS -Llib_tai/.libs"

From ossp-cvs-owner@ossp.org  Wed Aug  7 18:04:52 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7E0C0767F8; Wed,  7 Aug 2002 18:04:52 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp configure.ac
Message-Id: <20020807160452.7E0C0767F8@mail.ossp.org>
Date: Wed,  7 Aug 2002 18:04:52 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Aug-2002 18:04:52
  Branch: HEAD                             Handle: 2002080717045200

  Modified files:
    ossp-pkg/lmtp2nntp      configure.ac

  Log:
    another bugfix for the subdir handling

  Summary:
    Revision    Changes     Path
    1.29        +1  -1      ossp-pkg/lmtp2nntp/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/configure.ac
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 configure.ac
  --- ossp-pkg/lmtp2nntp/configure.ac	7 Aug 2002 16:01:20 -0000	1.28
  +++ ossp-pkg/lmtp2nntp/configure.ac	7 Aug 2002 16:04:52 -0000	1.29
  @@ -158,7 +158,7 @@
   export enable_shared
   enable_headline=no
   export enable_headline
  -AC_CONFIG_SUBDIRS([$SUBDIR_EX $SUBDIR_STR $SUBDIR_L2 $SUBDIR_SA $SUBDIR_VAR $SUBDIR_VAL $SUBDIR_POPT $SUBDIR_PCRE])
  +AC_CONFIG_SUBDIRS([$SUBDIR_EX $SUBDIR_STR $SUBDIR_L2 $SUBDIR_SA $SUBDIR_VAR $SUBDIR_VAL $SUBDIR_POPT $SUBDIR_PCRE $SUBDIR_TAI])
   
   dnl #   standard output generation
   AC_CONFIG_HEADERS(config.h)

From ossp-cvs-owner@ossp.org  Fri Aug  9 15:30:19 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id ED6F276966; Fri,  9 Aug 2002 15:30:18 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg cfg.pod
Message-Id: <20020809133018.ED6F276966@mail.ossp.org>
Date: Fri,  9 Aug 2002 15:30:18 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Aug-2002 15:30:18
  Branch: HEAD                             Handle: 2002080914301800

  Modified files:
    ossp-pkg/cfg            cfg.pod

  Log:
    start documentation

  Summary:
    Revision    Changes     Path
    1.7         +48 -1      ossp-pkg/cfg/cfg.pod
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/cfg.pod
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 cfg.pod
  --- ossp-pkg/cfg/cfg.pod	30 Jul 2002 19:28:37 -0000	1.6
  +++ ossp-pkg/cfg/cfg.pod	9 Aug 2002 13:30:18 -0000	1.7
  @@ -34,9 +34,56 @@
   
   B<OSSP cfg> - Configuration Parsing
   
  +=head1 VERSION
  +
  +OSSP cfg CFG_VERSION_STR
  +
   =head1 SYNOPSIS
   
  -...
  +=over 4
  +
  +=item B<API Header:>
  +
  +cfg.h
  +
  +=item B<API Types:>
  +
  +cfg_t,
  +cfg_rc_t,
  +cfg_node_type_t,
  +cfg_node_t,
  +cfg_node_attr_t,
  +cfg_fmt_t,
  +cfg_data_t,
  +cfg_data_ctrl_t,
  +cfg_data_cb_t,
  +cfg_data_attr_t
  +
  +=item B<API Functions:>
  +
  +cfg_create,     
  +cfg_destroy,    
  +cfg_error,      
  +cfg_version,    
  +cfg_import,     
  +cfg_export,     
  +cfg_node_create,
  +cfg_node_destroy,
  +cfg_node_clone, 
  +cfg_node_set,   
  +cfg_node_get,   
  +cfg_node_root,  
  +cfg_node_select,
  +cfg_node_find,  
  +cfg_node_apply, 
  +cfg_node_cmp,   
  +cfg_node_link,  
  +cfg_node_unlink,
  +cfg_data_set,   
  +cfg_data_get,   
  +cfg_data_ctrl
  +
  +=back
   
   =head1 DESCRIPTION
   

From ossp-cvs-owner@ossp.org  Fri Aug  9 22:37:12 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 69C8D767F8; Fri,  9 Aug 2002 22:37:12 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg cfg_data.c
Message-Id: <20020809203712.69C8D767F8@mail.ossp.org>
Date: Fri,  9 Aug 2002 22:37:12 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Aug-2002 22:37:12
  Branch: HEAD                             Handle: 2002080921371200

  Modified files:
    ossp-pkg/cfg            cfg_data.c

  Log:
    workaround for GCC <= 3.0

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-pkg/cfg/cfg_data.c
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/cfg_data.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 cfg_data.c
  --- ossp-pkg/cfg/cfg_data.c	17 Jul 2002 15:04:08 -0000	1.4
  +++ ossp-pkg/cfg/cfg_data.c	9 Aug 2002 20:37:12 -0000	1.5
  @@ -186,7 +186,7 @@
               break;
           }
           case CFG_DATA_ATTR_CTRL: {
  -            cfg_data_cb_t ctrl = (cfg_data_cb_t)va_arg(ap, void (*)(void));
  +            cfg_data_cb_t ctrl = (cfg_data_cb_t)va_arg(ap, cfg_data_cb_t);
               data->ctrl = ctrl;
               break;
           }

From ossp-cvs-owner@ossp.org  Sun Aug 11 15:49:19 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E3A94769DB; Sun, 11 Aug 2002 15:49:18 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web .wmlrc ossp-web/SHARE ossp.wml ossp_canvas.wml os...
Message-Id: <20020811134918.E3A94769DB@mail.ossp.org>
Date: Sun, 11 Aug 2002 15:49:18 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   11-Aug-2002 15:49:18
  Branch: HEAD                             Handle: 2002081114490810

  Added files:
    ossp-web/SHARE/ossp_img cw.png cw.xcf donate.gif
  Modified files:
    ossp-web                .wmlrc index.wml
    ossp-web/SHARE          ossp.wml ossp_canvas.wml ossp_navbar.wml
                            ossp_pkg.wml
    ossp-web/com            contributors.wml developers.wml index.wml
                            sponsors.wml users.wml
    ossp-web/pkg/lib/act    index.wml
    ossp-web/pkg/lib/cfg    index.wml
    ossp-web/pkg/lib/ex     index.wml
    ossp-web/pkg/lib/fsl    index.wml
    ossp-web/pkg/lib/l2     index.wml
    ossp-web/pkg/lib/mm     index.wml
    ossp-web/pkg/lib/pth    index.wml
    ossp-web/pkg/lib/sa     index.wml
    ossp-web/pkg/lib/str    index.wml
    ossp-web/pkg/lib/val    index.wml
    ossp-web/pkg/lib/var    index.wml
    ossp-web/pkg/tool/iselect index.wml
    ossp-web/pkg/tool/lmtp2nntp
                            index.wml
    ossp-web/pkg/tool/shiela index.wml
    ossp-web/pkg/tool/shtool index.wml
    ossp-web/pkg/tool/smake index.wml

  Log:
    flush the work of this afternoon: PayPal support, cleanups, etc

  Summary:
    Revision    Changes     Path
    1.3         +2  -1      ossp-web/.wmlrc
    1.5         +1  -0      ossp-web/SHARE/ossp.wml
    1.6         +11 -8      ossp-web/SHARE/ossp_canvas.wml
    1.1         BLOB        ossp-web/SHARE/ossp_img/cw.png
    1.1         BLOB        ossp-web/SHARE/ossp_img/cw.xcf
    1.1         BLOB        ossp-web/SHARE/ossp_img/donate.gif
    1.8         +1  -0      ossp-web/SHARE/ossp_navbar.wml
    1.6         +35 -0      ossp-web/SHARE/ossp_pkg.wml
    1.3         +2  -0      ossp-web/com/contributors.wml
    1.3         +2  -0      ossp-web/com/developers.wml
    1.2         +27 -0      ossp-web/com/index.wml
    1.3         +39 -10     ossp-web/com/sponsors.wml
    1.2         +42 -0      ossp-web/com/users.wml
    1.3         +26 -11     ossp-web/index.wml
    1.5         +4  -0      ossp-web/pkg/lib/act/index.wml
    1.6         +4  -0      ossp-web/pkg/lib/cfg/index.wml
    1.5         +5  -1      ossp-web/pkg/lib/ex/index.wml
    1.9         +4  -0      ossp-web/pkg/lib/fsl/index.wml
    1.5         +4  -0      ossp-web/pkg/lib/l2/index.wml
    1.7         +4  -0      ossp-web/pkg/lib/mm/index.wml
    1.3         +4  -0      ossp-web/pkg/lib/pth/index.wml
    1.4         +4  -0      ossp-web/pkg/lib/sa/index.wml
    1.4         +4  -0      ossp-web/pkg/lib/str/index.wml
    1.5         +4  -0      ossp-web/pkg/lib/val/index.wml
    1.6         +4  -0      ossp-web/pkg/lib/var/index.wml
    1.3         +4  -0      ossp-web/pkg/tool/iselect/index.wml
    1.9         +4  -0      ossp-web/pkg/tool/lmtp2nntp/index.wml
    1.3         +4  -0      ossp-web/pkg/tool/shiela/index.wml
    1.7         +4  -0      ossp-web/pkg/tool/shtool/index.wml
    1.3         +4  -0      ossp-web/pkg/tool/smake/index.wml
  ____________________________________________________________________________

  Index: ossp-web/.wmlrc
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 .wmlrc
  --- ossp-web/.wmlrc	13 Feb 2002 16:39:54 -0000	1.2
  +++ ossp-web/.wmlrc	11 Aug 2002 13:49:08 -0000	1.3
  @@ -8,7 +8,8 @@
   -D BASE_DIR~.
   -D IMG~SHARE/ossp_img
   -D IMGDOT_BASE~SHARE/ossp_img/ossp
  --D FTP_ROOT_DIR~../../ftp
  +-D FTP_ROOT_DIR~../ftp
   -D FTP_ROOT_URL=ftp://ftp.ossp.org
  +-D CVS_ROOT_URL=http://cvs.ossp.org
   -I SHARE
   
  Index: ossp-web/SHARE/ossp.wml
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 ossp.wml
  --- ossp-web/SHARE/ossp.wml	14 Feb 2002 17:02:49 -0000	1.4
  +++ ossp-web/SHARE/ossp.wml	11 Aug 2002 13:49:08 -0000	1.5
  @@ -21,4 +21,5 @@
   #use "ossp_info.wml"
   #use "ossp_newsflash.wml"
   #use "ossp_pkg.wml"
  +#use "ossp_donation.wml"
   
  Index: ossp-web/SHARE/ossp_canvas.wml
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 ossp_canvas.wml
  --- ossp-web/SHARE/ossp_canvas.wml	1 Apr 2002 11:07:33 -0000	1.5
  +++ ossp-web/SHARE/ossp_canvas.wml	11 Aug 2002 13:49:08 -0000	1.6
  @@ -61,14 +61,14 @@
       <td width=1 bgcolor="#c5c5c0"><imgdot width=1></td>
       <td bgcolor="#e5e5e0"><span class=headn>&nbsp;<a href="http://www.epaperwork.org/">ePaperwork</a>&nbsp;</span></td>
       <td width=1 bgcolor="#c5c5c0"><imgdot width=1></td>
  -    <td width=10 bgcolor="#d5d5d0"><imgdot width=10></td>
  -    <td width=1 bgcolor="#c5c5c0"><imgdot width=1></td>
  -    <td bgcolor="#e5e5e0"><span class=headn>&nbsp;<a href="http://www.engelschall.com/">EN</a>&nbsp;</span></td>
  -    <td width=1 bgcolor="#c5c5c0"><imgdot width=1></td>
  -    <td bgcolor="#e5e5e0"><span class=headn>&nbsp;<a href="http://dev.de.cw.net/">DevTeam</a>&nbsp;</span></td>
  -    <td width=1 bgcolor="#c5c5c0"><imgdot width=1></td>
  -    <td bgcolor="#e5e5e0"><span class=headn>&nbsp;<a href="http://www.cw.com/de">C&amp;W&nbsp</a>&nbsp;</span></td>
  -    <td width=1 bgcolor="#c5c5c0"><imgdot width=1></td>
  +    #<td width=10 bgcolor="#d5d5d0"><imgdot width=10></td>
  +    #<td width=1 bgcolor="#c5c5c0"><imgdot width=1></td>
  +    #<td bgcolor="#e5e5e0"><span class=headn>&nbsp;<a href="http://www.engelschall.com/">EN</a>&nbsp;</span></td>
  +    #<td width=1 bgcolor="#c5c5c0"><imgdot width=1></td>
  +    #<td bgcolor="#e5e5e0"><span class=headn>&nbsp;<a href="http://dev.de.cw.net/">DevTeam</a>&nbsp;</span></td>
  +    #<td width=1 bgcolor="#c5c5c0"><imgdot width=1></td>
  +    #<td bgcolor="#e5e5e0"><span class=headn>&nbsp;<a href="http://www.cw.com/de">C&amp;W&nbsp</a>&nbsp;</span></td>
  +    #<td width=1 bgcolor="#c5c5c0"><imgdot width=1></td>
       <td width=100%>&nbsp;</td>
       <td width=400 background="$(IMG)/ossp-bg-dark.jpg"><imgdot width=400></td>
     </tr>
  @@ -118,6 +118,9 @@
       <td width=20><imgdot width=20></td>
       <td valign=top align=left>
         {#PAGE_CANVAS_NB2#}
  +	  <p>
  +      <a href="http://www.cw.com/"><img src="$(IMG)/cw.png" alt="Cable & Wireless" border=0></a><br>
  +	  <font size=-1>[ <a href="$(ROOT)/com/sponsors.html">gold sponsor</a> ]</font>
         <br>
         <imgdot width=120>
       </td>
  Index: ossp-web/SHARE/ossp_img/cw.png
  ============================================================
  $ cvs update -p -r1.1 cw.png | uuencode cw.png
  ‰PNG
  
  
From ossp-cvs-owner@ossp.org  Sun Aug 11 15:49:34 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E528676A0A; Sun, 11 Aug 2002 15:49:33 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/SHARE ossp_donation.wml ossp-web/com donations.wm...
Message-Id: <20020811134933.E528676A0A@mail.ossp.org>
Date: Sun, 11 Aug 2002 15:49:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   11-Aug-2002 15:49:33
  Branch: HEAD                             Handle: 2002081114493300

  Added files:
    ossp-web/SHARE          ossp_donation.wml
    ossp-web/com            donations.wml

  Log:
    flush the work of this afternoon: PayPal support, cleanups, etc

  Summary:
    Revision    Changes     Path
    1.1         +34 -0      ossp-web/SHARE/ossp_donation.wml
    1.1         +56 -0      ossp-web/com/donations.wml
  ____________________________________________________________________________

  Index: ossp-web/SHARE/ossp_donation.wml
  ============================================================
  $ cvs update -p -r1.1 ossp_donation.wml
  ##
  ##  ossp_donation.wml -- PayPal Donation Macros
  ##  Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  <define-tag donation>
  <preserve project return/>
  <preserve name number/>
  <set-var %attributes/>
  <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
  <input type="hidden" name="cmd" value="_xclick">
  <input type="hidden" name="business" value="ossp-donation@ossp.org">
  <ifeq "<get-var project>" "" <group
    <set-var name="Open Source Support Donation (OSSP)">
    <set-var number="donation-ossp">
  /> <group
    <set-var name="Open Source Support Donation (OSSP <get-var project>)">
    <set-var number="donation-ossp-<get-var project>">
  />/>
  <input type="hidden" name="item_name" value="<get-var name>">
  <input type="hidden" name="item_number" value="<get-var number>">
  <input type="hidden" name="no_shipping" value="1">
  <ifeq "<get-var return>" "" <group
    <input type="hidden" name="return" value="<get-var return>">
    <input type="hidden" name="cancel_return" value="<get-var return>">
  />/>
  <input type="hidden" name="cn" value="Personal Donation Note:">
  #<input type="image" src="https://www.paypal.com/images/x-click-butcc-donate.gif" border="0" name="submit" alt="Online donation with PayPal!">
  <input type="image" src="$(IMG)/donate.gif" border="0" name="submit" alt="Online donation with PayPal!">
  </form>
  <restore name number/>
  <restore project return/>
  </define-tag>
  
  Index: ossp-web/com/donations.wml
  ============================================================
  $ cvs update -p -r1.1 donations.wml
  
  #use wml::ossp area=com:donations
  
  <title>Community: Donations</title>
  
  <h1>Community: Donations</h1>
  
  <a href="http://www.ossp.org/">OSSP</a> is a fully non-profit <a
  href="http://www.opensource.org/">Open Source Software</a> project with
  the goal of implementing high-quality Unix software components for use
  in the Unix Open Source community. It puts really a lot of private work
  on its idealistic developers, but nevertheless makes all of its results
  freely available to the interested public. Without sponsoring through
  donations from the individuals and companies all this would be not
  possible, of course.
  
  <p>
  You can sponsor the project by online donating money (see below) to the
  <a href="http://www.ossp.org/">OSSP</a> project. Every sponsor will be
  added to our <a href="sponsors.html"><b>Sponsors</b></a> page under one
  of the following three cathegories, depending on the total amount of
  money donation:
  
  <p>
  <table cellspacing=0 cellpadding=2>
  <tr>
  <td>
  	<ul>
  	  <li><b>Gold</b> Sponsor: USD $5000 or more
  	  <li><b>Silver</b> Sponsor: USD $500 or more
  	  <li><b>Bronze</b> Sponsor: USD $50 or more
  	</ul>
  </td>
  <td>
     &nbsp;
     &nbsp;
     &nbsp;
     &nbsp;
  </td>
  <td>
  	<donation>
  </td>
  </tr>
  </table>
  
  <p>
  We use the <a href="http://www.paypal.com/"><b>PayPal</b></a> service
  for secure online money transactions to us. Perform your money
  transaction online now by pressing the button above. If you want your
  donation to be anonymous then please put the word "<tt>anonymous</tt>"
  somewhere in the notes with your donation. If you would like to make
  a larger corporate donation (gold sponsoring) then we would certainly
  like to discuss that with you first. Please send a email to <a
  href="mailto:ossp-donation@ossp.org">ossp-donation@ossp.org</a> to talk
  to us.
  

From ossp-cvs-owner@ossp.org  Sun Aug 11 16:04:30 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3ADF0769C0; Sun, 11 Aug 2002 16:04:30 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/sit search.wml
Message-Id: <20020811140430.3ADF0769C0@mail.ossp.org>
Date: Sun, 11 Aug 2002 16:04:30 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   11-Aug-2002 16:04:30
  Branch: HEAD                             Handle: 2002081115042900

  Modified files:
    ossp-web/sit            search.wml

  Log:
    add Google Search form

  Summary:
    Revision    Changes     Path
    1.2         +25 -0      ossp-web/sit/search.wml
  ____________________________________________________________________________

  Index: ossp-web/sit/search.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 search.wml
  --- ossp-web/sit/search.wml	13 Feb 2002 16:35:09 -0000	1.1
  +++ ossp-web/sit/search.wml	11 Aug 2002 14:04:29 -0000	1.2
  @@ -5,3 +5,28 @@
   
   <h1>Website: Search</h1>
   
  +<p>
  +<!-- Search Google -->
  +<form method=GET action="http://www.google.com/custom">
  +  <table cellspacing=0 border=0>
  +    <tr valign=middle>
  +      <td>
  +        <input type=text   name=q size=25 maxlength=255 value="">
  +        <input type=submit name=sa value="Search!">
  +        <input type=hidden name=cof value="GIMP:#993333;T:#000000;LW:267;ALC:#993333;L:http://www.ossp.org/SHARE/ossp_img/ossp-logo.png;GFNT:#993333;LC:#993333;LH:120;BGC:#f5f5f0;AH:center;VLC:#993333;GALT:#000000;AWFID:4118930837b1e21f;">
  +        <font face=arial,sans-serif size=-1>
  +          <input type=hidden name=domains value="ossp.org">
  +          <br>
  +          <input type=radio name=sitesearch value="">
  +          Search WWW 
  +          <input type=radio name=sitesearch value="ossp.org" checked> 
  +          Search ossp.org
  +        </font>
  +        <br>
  +        </td>
  +    </tr>
  +  </table>
  +</form>
  +<!-- Search Google -->
  +
  +

From ossp-cvs-owner@ossp.org  Mon Aug 12 14:29:51 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 27D0B769B9; Mon, 12 Aug 2002 14:29:51 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/com donations.wml
Message-Id: <20020812122951.27D0B769B9@mail.ossp.org>
Date: Mon, 12 Aug 2002 14:29:51 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-web                         Date:   12-Aug-2002 14:29:51
  Branch: HEAD                             Handle: 2002081213295000

  Modified files:
    ossp-web/com            donations.wml

  Log:
    Cleanup, use four space indentation OR two space indentation but not both,
    replace tabs throughout.

  Summary:
    Revision    Changes     Path
    1.2         +10 -10     ossp-web/com/donations.wml
  ____________________________________________________________________________

  Index: ossp-web/com/donations.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 donations.wml
  --- ossp-web/com/donations.wml	11 Aug 2002 13:49:33 -0000	1.1
  +++ ossp-web/com/donations.wml	12 Aug 2002 12:29:50 -0000	1.2
  @@ -25,20 +25,20 @@
   <table cellspacing=0 cellpadding=2>
   <tr>
   <td>
  -	<ul>
  -	  <li><b>Gold</b> Sponsor: USD $5000 or more
  -	  <li><b>Silver</b> Sponsor: USD $500 or more
  -	  <li><b>Bronze</b> Sponsor: USD $50 or more
  -	</ul>
  +    <ul>
  +        <li><b>Gold</b> Sponsor: USD $5000 or more
  +        <li><b>Silver</b> Sponsor: USD $500 or more
  +        <li><b>Bronze</b> Sponsor: USD $50 or more
  +    </ul>
   </td>
   <td>
  -   &nbsp;
  -   &nbsp;
  -   &nbsp;
  -   &nbsp;
  +    &nbsp;
  +    &nbsp;
  +    &nbsp;
  +    &nbsp;
   </td>
   <td>
  -	<donation>
  +    <donation>
   </td>
   </tr>
   </table>

From ossp-cvs-owner@ossp.org  Mon Aug 12 14:31:40 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2C4B7769AC; Mon, 12 Aug 2002 14:31:40 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/com donations.wml
Message-Id: <20020812123140.2C4B7769AC@mail.ossp.org>
Date: Mon, 12 Aug 2002 14:31:40 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-web                         Date:   12-Aug-2002 14:31:40
  Branch: HEAD                             Handle: 2002081213313900

  Modified files:
    ossp-web/com            donations.wml

  Log:
    General editing including english usage, spelling, grammar, and style.

  Summary:
    Revision    Changes     Path
    1.3         +18 -20     ossp-web/com/donations.wml
  ____________________________________________________________________________

  Index: ossp-web/com/donations.wml
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 donations.wml
  --- ossp-web/com/donations.wml	12 Aug 2002 12:29:50 -0000	1.2
  +++ ossp-web/com/donations.wml	12 Aug 2002 12:31:39 -0000	1.3
  @@ -6,20 +6,19 @@
   <h1>Community: Donations</h1>
   
   <a href="http://www.ossp.org/">OSSP</a> is a fully non-profit <a
  -href="http://www.opensource.org/">Open Source Software</a> project with
  -the goal of implementing high-quality Unix software components for use
  -in the Unix Open Source community. It puts really a lot of private work
  -on its idealistic developers, but nevertheless makes all of its results
  -freely available to the interested public. Without sponsoring through
  -donations from the individuals and companies all this would be not
  -possible, of course.
  +href="http://www.opensource.org/">Open Source Software</a> project. It
  +aims to implement high quality Unix component software for use in the
  +Unix Open Source community. OSSP takes a lot of private work and its
  +idealistic developers bear this burden. Nevertheless, the fruits of
  +this collaborative effort are freely shared with the interested public.
  +Without sponsorship through donations from individuals and companies
  +this would be not possible, of course.
   
   <p>
  -You can sponsor the project by online donating money (see below) to the
  -<a href="http://www.ossp.org/">OSSP</a> project. Every sponsor will be
  -added to our <a href="sponsors.html"><b>Sponsors</b></a> page under one
  -of the following three cathegories, depending on the total amount of
  -money donation:
  +You can sponsor the <a href="http://www.ossp.org/">OSSP</a> project by
  +donating money online. Every sponsor will be added to our
  +<a href="sponsors.html"><b>Sponsors</b></a> page under one of the
  +following three categories, depending on the total amount donated:
   
   <p>
   <table cellspacing=0 cellpadding=2>
  @@ -45,12 +44,11 @@
   
   <p>
   We use the <a href="http://www.paypal.com/"><b>PayPal</b></a> service
  -for secure online money transactions to us. Perform your money
  -transaction online now by pressing the button above. If you want your
  -donation to be anonymous then please put the word "<tt>anonymous</tt>"
  -somewhere in the notes with your donation. If you would like to make
  -a larger corporate donation (gold sponsoring) then we would certainly
  -like to discuss that with you first. Please send a email to <a
  -href="mailto:ossp-donation@ossp.org">ossp-donation@ossp.org</a> to talk
  -to us.
  +for secure online money transactions. To perform a money transaction
  +online now, press the button above. To remain anonymous following your
  +donation, put the word "<tt>anonymous</tt>" somewhere in the
  +transaction's notes. We invite you to make a larger corporate donation
  +(gold sponsoring) as well, but would like to discuss it with you first.
  +Please send a email to <a href="mailto:ossp-donation@ossp.org">
  +ossp-donation@ossp.org</a> to talk to us.
   

From ossp-cvs-owner@ossp.org  Wed Aug 14 09:53:24 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8CF20769C0; Wed, 14 Aug 2002 09:53:24 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl ChangeLog README fsl_version.c
Message-Id: <20020814075324.8CF20769C0@mail.ossp.org>
Date: Wed, 14 Aug 2002 09:53:24 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   14-Aug-2002 09:53:24
  Branch: HEAD                             Handle: 2002081408532400

  Modified files:
    ossp-pkg/fsl            ChangeLog README fsl_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.10        +10 -0      ossp-pkg/fsl/ChangeLog
    1.22        +1  -1      ossp-pkg/fsl/README
    1.7         +9  -9      ossp-pkg/fsl/fsl_version.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/ChangeLog
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 ChangeLog
  --- ossp-pkg/fsl/ChangeLog	2 Aug 2002 11:43:02 -0000	1.9
  +++ ossp-pkg/fsl/ChangeLog	14 Aug 2002 07:53:24 -0000	1.10
  @@ -8,6 +8,16 @@
   
     CHANGELOG
   
  +  Changes between 1.0.1 and 1.0.2 (02-Aug-2002 to 14-Aug-2002)
  +
  +    *) Various source tree cleanups, polishing, version support and
  +       documentation updates in OSSP cfg.
  +       [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +    *) Fixed a bug in OSSP l2 where %N nodename expansion did not work
  +       causing the default of "localhost" to be returned on Solaris.
  +       [Thomas Lotterer <thomas@lotterer.net>]
  +
     Changes between 1.0.0 and 1.0.1 (01-Aug-2002 to 02-Aug-2002)
   
       *) Change building of fsl_version.c from direct inclusion 
  Index: ossp-pkg/fsl/README
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 README
  --- ossp-pkg/fsl/README	2 Aug 2002 11:43:02 -0000	1.21
  +++ ossp-pkg/fsl/README	14 Aug 2002 07:53:24 -0000	1.22
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_| |___/_|
    
     OSSP fsl - Faking/Flexible Syslog Library
  -  Version 1.0.1 (02-Aug-2002)
  +  Version 1.0.2 (14-Aug-2002)
   
     ABSTRACT
   
  Index: ossp-pkg/fsl/fsl_version.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 fsl_version.c
  --- ossp-pkg/fsl/fsl_version.c	2 Aug 2002 11:43:17 -0000	1.6
  +++ ossp-pkg/fsl/fsl_version.c	14 Aug 2002 07:53:24 -0000	1.7
  @@ -8,7 +8,7 @@
   #ifndef _FSL_VERSION_C_
   #define _FSL_VERSION_C_
   
  -#define FSL_VERSION 0x100201
  +#define FSL_VERSION 0x100202
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _FSL_VERSION_C_AS_HEADER_
   
   fsl_version_t fsl_version = {
  -    0x100201,
  -    "1.0.1",
  -    "1.0.1 (02-Aug-2002)",
  -    "This is OSSP fsl, Version 1.0.1 (02-Aug-2002)",
  -    "OSSP fsl 1.0.1 (02-Aug-2002)",
  -    "OSSP fsl/1.0.1",
  -    "@(#)OSSP fsl 1.0.1 (02-Aug-2002)",
  -    "$Id: fsl_version.c,v 1.6 2002/08/02 11:43:17 rse Exp $"
  +    0x100202,
  +    "1.0.2",
  +    "1.0.2 (14-Aug-2002)",
  +    "This is OSSP fsl, Version 1.0.2 (14-Aug-2002)",
  +    "OSSP fsl 1.0.2 (14-Aug-2002)",
  +    "OSSP fsl/1.0.2",
  +    "@(#)OSSP fsl 1.0.2 (14-Aug-2002)",
  +    "$Id: fsl_version.c,v 1.7 2002/08/14 07:53:24 thl Exp $"
   };
   
   #endif /* _FSL_VERSION_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Wed Aug 14 14:30:18 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 038BD767FE; Wed, 14 Aug 2002 14:30:17 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp lmtp2nntp_option.c
Message-Id: <20020814123017.038BD767FE@mail.ossp.org>
Date: Wed, 14 Aug 2002 14:30:17 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   14-Aug-2002 14:30:17
  Branch: HEAD                             Handle: 2002081413301600

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_option.c

  Log:
    consequently strdup and properly clean up; fix segfault reallocating too little space

  Summary:
    Revision    Changes     Path
    1.21        +9  -7      ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 lmtp2nntp_option.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	2 Jul 2002 07:49:01 -0000	1.20
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	14 Aug 2002 12:30:16 -0000	1.21
  @@ -319,18 +319,17 @@
   
           try {
               int largc;
  -            char *cpNew;
   
               v.largv = (char **)mallocex((1 + 1) * sizeof(char **));
               largc = 0;
  -            v.largv[largc++] = "leftover";
  +            v.largv[largc] = NULL;
  +            v.largv[largc++] = strdupex("leftover");
               v.largv[largc] = NULL;
               while ((cp = (char *)popt_getarg(poptCon)) != NULL) {
  -                v.largv = (char **)reallocex(v.largv, (largc + 2) * sizeof(char **));
  -                v.largv[largc++] = "--newsgroup";
  +                v.largv = (char **)reallocex(v.largv, (1 + largc + 2) * sizeof(char **));
  +                v.largv[largc++] = strdupex("--newsgroup");
                   v.largv[largc] = NULL;
  -                cpNew = strdupex(cp);
  -                v.largv[largc++] = cpNew;
  +                v.largv[largc++] = strdupex(cp);
                   v.largv[largc] = NULL;
               }
               if (largc > 1) {
  @@ -340,8 +339,11 @@
               }
           }
           cleanup {
  -            if (v.largv != NULL)
  +            if (v.largv != NULL) {
  +                for (i = 0; v.largv[i] != NULL; i++)
  +                    free(v.largv[i]);
                   free(v.largv);
  +            }
           }
           catch(ex) {
               rethrow;

From ossp-cvs-owner@ossp.org  Wed Aug 14 15:34:02 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E4BF5767EB; Wed, 14 Aug 2002 15:34:01 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tai tai.ac tai_lib.c
Message-Id: <20020814133401.E4BF5767EB@mail.ossp.org>
Date: Wed, 14 Aug 2002 15:34:01 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   14-Aug-2002 15:34:01
  Branch: HEAD                             Handle: 2002081414340100

  Modified files:
    ossp-pkg/tai            tai.ac tai_lib.c

  Log:
    fix tai_op() and add support for gmtime_r under Solaris

  Summary:
    Revision    Changes     Path
    1.2         +1  -0      ossp-pkg/tai/tai.ac
    1.6         +7  -6      ossp-pkg/tai/tai_lib.c
  ____________________________________________________________________________

  Index: ossp-pkg/tai/tai.ac
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 tai.ac
  --- ossp-pkg/tai/tai.ac	18 Apr 2002 09:10:46 -0000	1.1.1.1
  +++ ossp-pkg/tai/tai.ac	14 Aug 2002 13:34:01 -0000	1.2
  @@ -34,6 +34,7 @@
   
   AC_DEFUN(TAI_CHECK_ALL,[
       #   check for system functions
  +    CFLAGS="$CFLAGS -D_REENTRANT"
       AC_CHECK_FUNCS(gmtime_r timegm)
   ])
   
  Index: ossp-pkg/tai/tai_lib.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 tai_lib.c
  --- ossp-pkg/tai/tai_lib.c	29 May 2002 08:32:53 -0000	1.5
  +++ ossp-pkg/tai/tai_lib.c	14 Aug 2002 13:34:01 -0000	1.6
  @@ -254,12 +254,13 @@
           s1 = tai1->tai_sec + (60 * tai1->tai_min) + (60 * 60 * tai1->tai_hour) + (60 * 60 * 24 * tai1->tai_yday) + (60 * 60 * 24 * 365 * tai1->tai_year) + tai1->tai_gmtoff;
           s2 = tai2->tai_sec + (60 * tai2->tai_min) + (60 * 60 * tai2->tai_hour) + (60 * 60 * 24 * tai2->tai_yday) + (60 * 60 * 24 * 365 * tai2->tai_year) + tai2->tai_gmtoff;
           switch (op) {
  -            case TAI_OP_NE: rc = s2 != s1 ? TAI_OK: TAI_FALSE;
  -            case TAI_OP_EQ: rc = s2 == s1 ? TAI_OK: TAI_FALSE;
  -            case TAI_OP_LT: rc = s2 <  s1 ? TAI_OK: TAI_FALSE;
  -            case TAI_OP_LE: rc = s2 <= s1 ? TAI_OK: TAI_FALSE;
  -            case TAI_OP_GT: rc = s2 >  s1 ? TAI_OK: TAI_FALSE;
  -            case TAI_OP_GE: rc = s2 >= s1 ? TAI_OK: TAI_FALSE;
  +            case TAI_OP_NE: rc = (s2 != s1 ? TAI_OK : TAI_FALSE); break;
  +            case TAI_OP_EQ: rc = (s2 == s1 ? TAI_OK : TAI_FALSE); break;
  +            case TAI_OP_LT: rc = (s2 <  s1 ? TAI_OK : TAI_FALSE); break;
  +            case TAI_OP_LE: rc = (s2 <= s1 ? TAI_OK : TAI_FALSE); break;
  +            case TAI_OP_GT: rc = (s2 >  s1 ? TAI_OK : TAI_FALSE); break;
  +            case TAI_OP_GE: rc = (s2 >= s1 ? TAI_OK : TAI_FALSE); break;
  +            default: break; /* FIXME */
           }
       }
       va_end(ap); 

From ossp-cvs-owner@ossp.org  Wed Aug 14 16:28:28 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 25C9D767FB; Wed, 14 Aug 2002 16:28:28 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tai tai.ac tai_data.c tai_format.c tai_lib.c tai_...
Message-Id: <20020814142828.25C9D767FB@mail.ossp.org>
Date: Wed, 14 Aug 2002 16:28:28 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   14-Aug-2002 16:28:28
  Branch: HEAD                             Handle: 2002081415282700

  Modified files:
    ossp-pkg/tai            tai.ac tai_data.c tai_format.c tai_lib.c tai_p.h
                            tai_parse.c tai_test.c

  Log:
    hacking wild to get OSSP tai (just) working on Solaris

  Summary:
    Revision    Changes     Path
    1.3         +8  -1      ossp-pkg/tai/tai.ac
    1.2         +2  -0      ossp-pkg/tai/tai_data.c
    1.2         +6  -2      ossp-pkg/tai/tai_format.c
    1.7         +43 -13     ossp-pkg/tai/tai_lib.c
    1.4         +0  -1      ossp-pkg/tai/tai_p.h
    1.2         +2  -0      ossp-pkg/tai/tai_parse.c
    1.4         +0  -1      ossp-pkg/tai/tai_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/tai/tai.ac
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 tai.ac
  --- ossp-pkg/tai/tai.ac	14 Aug 2002 13:34:01 -0000	1.2
  +++ ossp-pkg/tai/tai.ac	14 Aug 2002 14:28:27 -0000	1.3
  @@ -33,8 +33,15 @@
   dnl #     TAI_CHECK_ALL
   
   AC_DEFUN(TAI_CHECK_ALL,[
  -    #   check for system functions
  +    #   gmtime_r hack for Solaris (FIXME)
       CFLAGS="$CFLAGS -D_REENTRANT"
  +
  +    #   check for system functions
       AC_CHECK_FUNCS(gmtime_r timegm)
  +
  +    #   determine whether "tm_gmtoff" exists in "struct tm"
  +    AC_CHECK_MEMBER(struct tm.tm_gmtoff, 
  +                    AC_DEFINE(HAVE_TM_GMTOFF, 1, [Define to 1 if "struct tm" has "tm_gmtoff"]),,
  +                    [#include <time.h>])
   ])
   
  Index: ossp-pkg/tai/tai_data.c
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 tai_data.c
  --- ossp-pkg/tai/tai_data.c	18 Apr 2002 09:10:46 -0000	1.1.1.1
  +++ ossp-pkg/tai/tai_data.c	14 Aug 2002 14:28:27 -0000	1.2
  @@ -25,7 +25,9 @@
    * SUCH DAMAGE.
    */
   
  +#if 0
   #include <sys/cdefs.h>
  +#endif
   #include <stddef.h>
   
   #if 0
  Index: ossp-pkg/tai/tai_format.c
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 tai_format.c
  --- ossp-pkg/tai/tai_format.c	18 Apr 2002 09:10:47 -0000	1.1.1.1
  +++ ossp-pkg/tai/tai_format.c	14 Aug 2002 14:28:27 -0000	1.2
  @@ -381,18 +381,20 @@
   					pt, ptlim);
   				continue;
   			case 'Z':
  +#if 0 /* FIXME */
   				if (t->tm_zone != NULL)
   					pt = _add(t->tm_zone, pt, ptlim);
   				else
  -#if 0 /* FIXME: strftime("%Z") or keep "?" */
  +                /* FIXME: strftime("%Z") or keep "?" */
   				if (t->tm_isdst == 0 || t->tm_isdst == 1) {
   					pt = _add(tzname[t->tm_isdst],
   						pt, ptlim);
   				} else  
   #endif
  -                                    pt = _add("?", pt, ptlim);
  +                pt = _add("?", pt, ptlim);
   				continue;
   			case 'z':
  +#if 0 /* FIXME */
   				{
   					long absoff;
   					if (t->tm_gmtoff >= 0) {
  @@ -407,6 +409,8 @@
   					pt = _conv((absoff % 3600) / 60, "%02d",
   						pt, ptlim);
   				};
  +#endif
  +                pt = _add("?", pt, ptlim);
   				continue;
   			case '+':
   				pt = _fmt(tptr->date_fmt, t, pt, ptlim);
  Index: ossp-pkg/tai/tai_lib.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 tai_lib.c
  --- ossp-pkg/tai/tai_lib.c	14 Aug 2002 13:34:01 -0000	1.6
  +++ ossp-pkg/tai/tai_lib.c	14 Aug 2002 14:28:27 -0000	1.7
  @@ -56,12 +56,40 @@
   {
       if (tai == NULL)
           return TAI_ERR_ARG;
  -    if (tai->tai_zone != NULL)
  -        free(tai->tai_zone);
       free(tai);
       return TAI_OK;
   }
   
  +#if 0
  +static time_t tai_utcoffset(void)
  +{
  +    time_t tL, tU;
  +    struct tm *tmL, *tmU;
  +    time_t offset;
  +
  +    /* determine local time (UTC based) */
  +    tL = time(NULL); /* theoretically this could be a constant value, too */
  +
  +    /* unpack local time (local time based) */
  +    tmL = localtime(&tL);
  +
  +    /* unpack local time (UTC based) */
  +    tmU = gmtime(&tL);
  +
  +    /* pack UTC-based local time back into local time */
  +    tU  = mktime(tmU);
  +
  +    /* local time adjustment for Daylight Saving Time (DST) */
  +    if (tmL->tm_isdst)
  +        tL += (60*60);
  +
  +    /* finally calculate the UTC offset */
  +    offset = (tL - tU);
  +
  +    return offset;
  +}
  +#endif
  +
   tai_rc_t tai_import(tai_t *tai, tai_type_t type, ...)
   {
       va_list ap;
  @@ -91,11 +119,11 @@
           tai->tai_wday   = stm->tm_wday;
           tai->tai_yday   = stm->tm_yday;
           tai->tai_isdst  = stm->tm_isdst;
  -        tai->tai_gmtoff = stm->tm_gmtoff;
  -        if (stm->tm_zone == NULL)
  -            tai->tai_zone = strdup("");
  -        else
  -            tai->tai_zone = strdup(stm->tm_zone);
  +#ifdef HAVE_TM_GMTOFF
  +        tai->tai_gmtoff = stm->tm_gmtoff; /* implicitly 0 */
  +#else
  +        tai->tai_gmtoff = 0;              /* explicitly 0 */
  +#endif
       }
       else if (type == TAI_TYPE_STRUCTTM) {
           /* import from struct tm */
  @@ -121,11 +149,11 @@
           tai->tai_wday   = stm->tm_wday;
           tai->tai_yday   = stm->tm_yday;
           tai->tai_isdst  = stm->tm_isdst;
  +#ifdef HAVE_TM_GMTOFF
           tai->tai_gmtoff = stm->tm_gmtoff;
  -        if (stm->tm_zone == NULL)
  -            tai->tai_zone = strdup("");
  -        else
  -            tai->tai_zone = strdup(stm->tm_zone);
  +#else
  +        tai->tai_gmtoff = 0;
  +#endif
       }
       else if (type == TAI_TYPE_UNIX) {
           /* import from time(3) FIXME */
  @@ -165,8 +193,9 @@
           stm->tm_wday   = tai->tai_wday;
           stm->tm_yday   = tai->tai_yday;
           stm->tm_isdst  = tai->tai_isdst;
  +#ifdef HAVE_TM_GMTOFF
           stm->tm_gmtoff = tai->tai_gmtoff;
  -        stm->tm_zone   = tai->tai_zone;
  +#endif
   #ifdef HAVE_TIMEGM
           /* non-standard timegm(3) makes our life easy */
           *pt = timegm(stm);
  @@ -191,8 +220,9 @@
           stm->tm_wday   = tai->tai_wday;
           stm->tm_yday   = tai->tai_yday;
           stm->tm_isdst  = tai->tai_isdst;
  +#ifdef HAVE_TM_GMTOFF
           stm->tm_gmtoff = tai->tai_gmtoff;
  -        stm->tm_zone   = strdup(tai->tai_zone);
  +#endif
       }
       else
           return TAI_ERR_IMP; /* FIXME */
  Index: ossp-pkg/tai/tai_p.h
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 tai_p.h
  --- ossp-pkg/tai/tai_p.h	1 May 2002 18:48:34 -0000	1.3
  +++ ossp-pkg/tai/tai_p.h	14 Aug 2002 14:28:27 -0000	1.4
  @@ -49,7 +49,6 @@
       int    tai_yday;   /* days since January 1 [0-365] */
       int    tai_isdst;  /* Daylight Savings Time flag */
       long   tai_gmtoff; /* offset from CUT in seconds */
  -    char  *tai_zone;   /* timezone abbreviation */
   };
   
   /*
  Index: ossp-pkg/tai/tai_parse.c
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 tai_parse.c
  --- ossp-pkg/tai/tai_parse.c	18 Apr 2002 09:10:45 -0000	1.1.1.1
  +++ ossp-pkg/tai/tai_parse.c	14 Aug 2002 14:28:27 -0000	1.2
  @@ -483,6 +483,7 @@
   
   		case 'Z':
   			{
  +#if 0 /* FIXME */
   			const char *cp;
   			char *zonestr;
   
  @@ -510,6 +511,7 @@
   				}
   				buf += cp - buf;
   			}
  +#endif
   			}
   			break;
   		}
  Index: ossp-pkg/tai/tai_test.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 tai_test.c
  --- ossp-pkg/tai/tai_test.c	29 May 2002 08:32:53 -0000	1.3
  +++ ossp-pkg/tai/tai_test.c	14 Aug 2002 14:28:27 -0000	1.4
  @@ -45,7 +45,6 @@
       tai_create(&tai);
       tai_import(tai, TAI_TYPE_UNIX);
       tai_format(tai, out, sizeof(out), "%a %Y-%m-%d %H:%M:%S %z");
  -    fprintf(stdout, "\n<%s>\n", out);
       tai_destroy(tai);
   }
   TS_TEST(test_object)

From ossp-cvs-owner@ossp.org  Wed Aug 14 23:19:02 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E4989767FA; Wed, 14 Aug 2002 23:19:01 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp Makefile.in README lmtp2nntp_config.c l...
Message-Id: <20020814211901.E4989767FA@mail.ossp.org>
Date: Wed, 14 Aug 2002 23:19:01 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   14-Aug-2002 23:19:01
  Branch: HEAD                             Handle: 2002081422190100

  Modified files:
    ossp-pkg/lmtp2nntp      Makefile.in README lmtp2nntp_config.c
                            lmtp2nntp_version.c

  Log:
    bump version for release

  Summary:
    Revision    Changes     Path
    1.50        +4  -4      ossp-pkg/lmtp2nntp/Makefile.in
    1.23        +1  -1      ossp-pkg/lmtp2nntp/README
    1.80        +1  -0      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.8         +9  -9      ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ____________________________________________________________________________

  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================
  $ cvs diff -u -r1.49 -r1.50 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	24 Apr 2002 09:37:16 -0000	1.49
  +++ ossp-pkg/lmtp2nntp/Makefile.in	14 Aug 2002 21:19:01 -0000	1.50
  @@ -131,12 +131,12 @@
   lmtp2nntp_main.o: lmtp2nntp_main.c lmtp2nntp_argz.h lmtp2nntp_shpat.h lmtp2nntp_daemon.h lmtp2nntp_global.h config.h lmtp2nntp_exwrap.h lmtp2nntp_option.h lmtp2nntp_config.h fixme.h lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_lmtp.h lmtp2nntp_version.c
   lmtp2nntp_daemon.o: lmtp2nntp_daemon.c config.h lmtp2nntp_daemon.h
   lmtp2nntp_lmtp.o: lmtp2nntp_lmtp.c lmtp2nntp_lmtp.h config.h
  -lmtp2nntp_nntp.o: lmtp2nntp_nntp.c lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_global.h config.h lmtp2nntp_exwrap.h fixme.h
  +lmtp2nntp_nntp.o: lmtp2nntp_nntp.c lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_global.h config.h lmtp2nntp_exwrap.h fixme.h 
   lmtp2nntp_argz.o: lmtp2nntp_argz.c lmtp2nntp_argz.h config.h
   lmtp2nntp_shpat.o: lmtp2nntp_shpat.c config.h lmtp2nntp_shpat.h
  -lmtp2nntp_msg.o: lmtp2nntp_msg.c lmtp2nntp_msg.h lmtp2nntp_global.h config.h lmtp2nntp_exwrap.h lmtp2nntp_argz.h fixme.h lmtp2nntp_nntp.h
  +lmtp2nntp_msg.o: lmtp2nntp_msg.c lmtp2nntp_msg.h lmtp2nntp_global.h config.h lmtp2nntp_exwrap.h lmtp2nntp_argz.h fixme.h lmtp2nntp_nntp.h 
   lmtp2nntp_option.o: lmtp2nntp_option.c lmtp2nntp_argz.h lmtp2nntp_global.h config.h lmtp2nntp_exwrap.h lmtp2nntp_option.h lmtp2nntp_config.h fixme.h lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_lmtp.h lmtp2nntp_version.c
   lmtp2nntp_config.o: lmtp2nntp_config.c lmtp2nntp_argz.h lmtp2nntp_global.h config.h lmtp2nntp_exwrap.h lmtp2nntp_option.h lmtp2nntp_config.h fixme.h lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_lmtp.h lmtp2nntp_version.c
  -lmtp2nntp_exwrap.o: lmtp2nntp_exwrap.c lmtp2nntp_global.h config.h lmtp2nntp_exwrap.h
  +lmtp2nntp_exwrap.o: lmtp2nntp_exwrap.c lmtp2nntp_global.h config.h lmtp2nntp_exwrap.h 
   lmtp2nntp_version.o: lmtp2nntp_version.c lmtp2nntp_version.c
  -lmtp2nntp_l2.o: lmtp2nntp_l2.c fixme.h lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_global.h config.h lmtp2nntp_exwrap.h
  +lmtp2nntp_l2.o: lmtp2nntp_l2.c fixme.h lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_global.h config.h lmtp2nntp_exwrap.h 
  Index: ossp-pkg/lmtp2nntp/README
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 README
  --- ossp-pkg/lmtp2nntp/README	29 May 2002 22:24:28 -0000	1.22
  +++ ossp-pkg/lmtp2nntp/README	14 Aug 2002 21:19:01 -0000	1.23
  @@ -7,7 +7,7 @@
                     |_|                        |_|    
   
     OSSP lmtp2nntp - Mail to News Gateway
  -  Version 1.2a5 (30-May-2002)
  +  Version 1.2a6 (14-Aug-2002)
   
     BEWARE! THIS IS ALPHA CODE
   
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================
  $ cvs diff -u -r1.79 -r1.80 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	17 Jul 2002 11:28:06 -0000	1.79
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	14 Aug 2002 21:19:01 -0000	1.80
  @@ -153,6 +153,7 @@
               fprintf(stderr, "%s:Error: logging failed to create \"%s\" channel\n", ctx->progname, l2_handler_var.name);
               CU(ERR_EXECUTION);
           }
  +        //FIXME rse!20020717 this l2_channel_configure call is currently a dummy! What is it used for?
           if ((rc = l2_channel_configure(ctx->l2, "", ctx->config_varctx)) != L2_OK) {
               fprintf(stderr, "%s:Error: logging failed to configure \"%s\" channel\n", ctx->progname, l2_handler_var.name);
               CU(ERR_EXECUTION);
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 lmtp2nntp_version.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	29 May 2002 22:24:28 -0000	1.7
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	14 Aug 2002 21:19:01 -0000	1.8
  @@ -8,7 +8,7 @@
   #ifndef _LMTP2NNTP_VERSION_C_
   #define _LMTP2NNTP_VERSION_C_
   
  -#define LMTP2NNTP_VERSION 0x102005
  +#define LMTP2NNTP_VERSION 0x102006
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _LMTP2NNTP_VERSION_C_AS_HEADER_
   
   lmtp2nntp_version_t lmtp2nntp_version = {
  -    0x102005,
  -    "1.2a5",
  -    "1.2a5 (30-May-2002)",
  -    "This is OSSP lmtp2nntp, Version 1.2a5 (30-May-2002)",
  -    "OSSP lmtp2nntp 1.2a5 (30-May-2002)",
  -    "OSSP lmtp2nntp/1.2a5",
  -    "@(#)OSSP lmtp2nntp 1.2a5 (30-May-2002)",
  -    "$Id: lmtp2nntp_version.c,v 1.7 2002/05/29 22:24:28 thl Exp $"
  +    0x102006,
  +    "1.2a6",
  +    "1.2a6 (14-Aug-2002)",
  +    "This is OSSP lmtp2nntp, Version 1.2a6 (14-Aug-2002)",
  +    "OSSP lmtp2nntp 1.2a6 (14-Aug-2002)",
  +    "OSSP lmtp2nntp/1.2a6",
  +    "@(#)OSSP lmtp2nntp 1.2a6 (14-Aug-2002)",
  +    "$Id: lmtp2nntp_version.c,v 1.8 2002/08/14 21:19:01 thl Exp $"
   };
   
   #endif /* _LMTP2NNTP_VERSION_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Wed Aug 14 23:27:22 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C4507767FA; Wed, 14 Aug 2002 23:27:21 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new news.txt
Message-Id: <20020814212721.C4507767FA@mail.ossp.org>
Date: Wed, 14 Aug 2002 23:27:21 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-web                         Date:   14-Aug-2002 23:27:21
  Branch: HEAD                             Handle: 2002081422272100

  Modified files:
    ossp-web/new            news.txt

  Log:
    updated fsl to v1.0.2

  Summary:
    Revision    Changes     Path
    1.21        +1  -0      ossp-web/new/news.txt
  ____________________________________________________________________________

  Index: ossp-web/new/news.txt
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 news.txt
  --- ossp-web/new/news.txt	2 Aug 2002 11:55:14 -0000	1.20
  +++ ossp-web/new/news.txt	14 Aug 2002 21:27:21 -0000	1.21
  @@ -1,3 +1,4 @@
  +14-Aug-2002: Released L<OSSP fsl> 1.0.2
   02-Aug-2002: Released L<OSSP fsl> 1.0.1
   01-Aug-2002: Released L<OSSP fsl> 1.0.0
   01-Aug-2002: Released L<OSSP fsl> 0.9.0

From ossp-cvs-owner@ossp.org  Wed Aug 14 23:29:23 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 80A0F767FA; Wed, 14 Aug 2002 23:29:23 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new news.txt ossp-web/pkg/tool/lmtp2nntp index.wm...
Message-Id: <20020814212923.80A0F767FA@mail.ossp.org>
Date: Wed, 14 Aug 2002 23:29:23 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-web                         Date:   14-Aug-2002 23:29:23
  Branch: HEAD                             Handle: 2002081422292201

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool/lmtp2nntp
                            index.wml

  Log:
    release lmtp2nntp v1.0.2a6

  Summary:
    Revision    Changes     Path
    1.22        +1  -0      ossp-web/new/news.txt
    1.10        +2  -2      ossp-web/pkg/tool/lmtp2nntp/index.wml
  ____________________________________________________________________________

  Index: ossp-web/new/news.txt
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 news.txt
  --- ossp-web/new/news.txt	14 Aug 2002 21:27:21 -0000	1.21
  +++ ossp-web/new/news.txt	14 Aug 2002 21:29:22 -0000	1.22
  @@ -1,3 +1,4 @@
  +14-Aug-2002: Released T<OSSP lmtp2nntp> 1.2a6
   14-Aug-2002: Released L<OSSP fsl> 1.0.2
   02-Aug-2002: Released L<OSSP fsl> 1.0.1
   01-Aug-2002: Released L<OSSP fsl> 1.0.0
  Index: ossp-web/pkg/tool/lmtp2nntp/index.wml
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 index.wml
  --- ossp-web/pkg/tool/lmtp2nntp/index.wml	11 Aug 2002 13:49:16 -0000	1.9
  +++ ossp-web/pkg/tool/lmtp2nntp/index.wml	14 Aug 2002 21:29:23 -0000	1.10
  @@ -31,7 +31,7 @@
   
   <pkg_status
       stable="1.1.1"   stable_date="13-Dec-2001"
  -    unstable="1.2a5" unstable_date="30-May-2002"
  +    unstable="1.2a6" unstable_date="14-Aug-2002"
   	done=100>
   
   <h2>Source</h2>
  @@ -40,7 +40,7 @@
       cvs=$(CVS_ROOT_URL)/pkg/tool/lmtp2nntp/
       url=$(FTP_ROOT_URL)/pkg/tool/lmtp2nntp/
       directory=$(FTP_ROOT_DIR)/pkg/tool/lmtp2nntp/
  -    files="lmtp2nntp-*.tar.gz" stable="lmtp2nntp-1.1.1.tar.gz" unstable="lmtp2nntp-1.2a5.tar.gz">
  +    files="lmtp2nntp-*.tar.gz" stable="lmtp2nntp-1.1.1.tar.gz" unstable="lmtp2nntp-1.2a6.tar.gz">
   
   <h2>Donation</h2>
   

From ossp-cvs-owner@ossp.org  Thu Aug 15 00:02:36 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9A512767FA; Thu, 15 Aug 2002 00:02:36 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/tool index.wml
Message-Id: <20020814220236.9A512767FA@mail.ossp.org>
Date: Thu, 15 Aug 2002 00:02:36 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-web                         Date:   15-Aug-2002 00:02:36
  Branch: HEAD                             Handle: 2002081423023600

  Modified files:
    ossp-web/pkg/tool       index.wml

  Log:
    release lmtp2nntp v1.2a6

  Summary:
    Revision    Changes     Path
    1.16        +1  -1      ossp-web/pkg/tool/index.wml
  ____________________________________________________________________________

  Index: ossp-web/pkg/tool/index.wml
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 index.wml
  --- ossp-web/pkg/tool/index.wml	13 Jul 2002 18:29:19 -0000	1.15
  +++ ossp-web/pkg/tool/index.wml	14 Aug 2002 22:02:36 -0000	1.16
  @@ -15,7 +15,7 @@
   		    done=100 stable="1.6.1" unstable=none>
     <pkg_item name="lmtp2nntp" longname="OSSP lmtp2nntp" type="tool"
               desc="Real-Time Mail to News Gateway"
  -            done=100 stable="1.1.1" unstable=1.2a5>
  +            done=100 stable="1.1.1" unstable=1.2a6>
     <pkg_item name="eperl" longname="OSSP eperl" type="tool"
               desc="Embedded Perl Language"
   	        done=100 stable="2.2.14" unstable="none">

From ossp-cvs-owner@ossp.org  Thu Aug 15 00:12:06 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E68FF767FA; Thu, 15 Aug 2002 00:12:05 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/fsl index.wml ossp-web/pkg/lib index.wml
Message-Id: <20020814221205.E68FF767FA@mail.ossp.org>
Date: Thu, 15 Aug 2002 00:12:05 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-web                         Date:   15-Aug-2002 00:12:05
  Branch: HEAD                             Handle: 2002081423120500

  Modified files:
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/fsl    index.wml

  Log:
    release fsl 1.0.2

  Summary:
    Revision    Changes     Path
    1.10        +2  -2      ossp-web/pkg/lib/fsl/index.wml
    1.26        +1  -1      ossp-web/pkg/lib/index.wml
  ____________________________________________________________________________

  Index: ossp-web/pkg/lib/fsl/index.wml
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 index.wml
  --- ossp-web/pkg/lib/fsl/index.wml	11 Aug 2002 13:49:12 -0000	1.9
  +++ ossp-web/pkg/lib/fsl/index.wml	14 Aug 2002 22:12:05 -0000	1.10
  @@ -39,7 +39,7 @@
   
   <pkg_status
       genesis="Jul-2002"
  -    stable="1.0.1"   stable_date="02-Aug-2002"
  +    stable="1.0.2"   stable_date="14-Aug-2002"
       unstable="none"  unstable_date="none"
   	done=100>
   
  @@ -50,7 +50,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/fsl/
       directory=$(FTP_ROOT_DIR)/pkg/lib/fsl/
       files="fsl-*.tar.gz" 
  -	stable="fsl-1.0.1.tar.gz" unstable="none">
  +	stable="fsl-1.0.2.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  Index: ossp-web/pkg/lib/index.wml
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 index.wml
  --- ossp-web/pkg/lib/index.wml	2 Aug 2002 11:55:14 -0000	1.25
  +++ ossp-web/pkg/lib/index.wml	14 Aug 2002 22:12:05 -0000	1.26
  @@ -82,6 +82,6 @@
   			done=15 stable=none unstable=none>
     <pkg_item name="fsl" longname="OSSP fsl" type="lib"
               desc="Faked/Flexible Syslog"
  -			done=100 stable=1.0.1 unstable=none>
  +			done=100 stable=1.0.2 unstable=none>
   </pkg_list>
   

From ossp-cvs-owner@ossp.org  Fri Aug 16 11:26:48 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7CECA769E0; Fri, 16 Aug 2002 11:26:48 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib index.wml ossp-web/pkg/tool index.wml
Message-Id: <20020816092648.7CECA769E0@mail.ossp.org>
Date: Fri, 16 Aug 2002 11:26:48 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   16-Aug-2002 11:26:48
  Branch: HEAD                             Handle: 2002081610264701

  Modified files:
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/tool       index.wml

  Log:
    more titles

  Summary:
    Revision    Changes     Path
    1.27        +2  -0      ossp-web/pkg/lib/index.wml
    1.17        +2  -0      ossp-web/pkg/tool/index.wml
  ____________________________________________________________________________

  Index: ossp-web/pkg/lib/index.wml
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 index.wml
  --- ossp-web/pkg/lib/index.wml	14 Aug 2002 22:12:05 -0000	1.26
  +++ ossp-web/pkg/lib/index.wml	16 Aug 2002 09:26:48 -0000	1.27
  @@ -3,6 +3,8 @@
   
   <title>Packages: Libraries</title>
   
  +<h1>Index of Libraries</h1>
  +
   The libraries OSSP provides are the passive components used in the
   OSSP platform. They are all stand-alone and fully reusable libraries
   and can be used fully separately. On these packages currently the main
  Index: ossp-web/pkg/tool/index.wml
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 index.wml
  --- ossp-web/pkg/tool/index.wml	14 Aug 2002 22:02:36 -0000	1.16
  +++ ossp-web/pkg/tool/index.wml	16 Aug 2002 09:26:47 -0000	1.17
  @@ -3,6 +3,8 @@
   
   <title>Packages: Tools</title>
   
  +<h1>Index of Tools</h1>
  +
   The tools OSSP provides are either developed for internal use in the
   OSSP project environment or for the build process of the other OSSP
   components. They are all small stand-alone applications and can be used

From ossp-cvs-owner@ossp.org  Fri Aug 16 11:45:08 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4F2E9769F9; Fri, 16 Aug 2002 11:45:08 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg 00TODO TODO
Message-Id: <20020816094508.4F2E9769F9@mail.ossp.org>
Date: Fri, 16 Aug 2002 11:45:08 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Aug-2002 11:45:08
  Branch: HEAD                             Handle: 197001010100001029487506

  Modified files:
    ossp-pkg/cfg            TODO
  Removed files:
    ossp-pkg/cfg            00TODO

  Log:
    we just need a single TODO file here

  Summary:
    Revision    Changes     Path
    NONE        +0  -210    ossp-pkg/cfg/00TODO
    1.2         +230 -1     ossp-pkg/cfg/TODO
  ____________________________________________________________________________

    Index: ossp-pkg/cfg/TODO
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 TODO
  --- ossp-pkg/cfg/TODO	29 Jul 2002 11:45:18 -0000	1.1
  +++ ossp-pkg/cfg/TODO	16 Aug 2002 09:45:06 -0000	1.2
  @@ -1,2 +1,231 @@
  +   _        ___  ____ ____  ____          __       
  +  |_|_ _   / _ \/ ___/ ___||  _ \    ___ / _| __ _ 
  +  _|_||_| | | | \___ \___ \| |_) |  / __| |_ / _` |
  + |_||_|_| | |_| |___) |__) |  __/  | (__|  _| (_| |
  +  |_|_|_|  \___/|____/____/|_|      \___|_|  \__, |
  +                                             |___/
  +  OSSP cfg - Configuration Parsing
  +
  +  TODO
  + 
  +  o finish/fix implementation of cfg_node_select()
  +  o implement cfg_node_find()
  +  o fix internal linkage with "left sibling" pointer
  +  o support for prefixes of all non-static symbols to better support embedding
  +  o finish cfg.pod manual page (function description!)
  +  o add ts-based test suite
  +  o add line tracking support
  +  o add pre-processor with at least includes
  +  o add config tree verification!
  +
  +  ==================================================================================
  +
  +- destroy haengt in Endlosschleife
  +- in scanner: use an combination of dynamic buffer and atomic symbol/token sub-library 
  +  to allow first tokens of mostly arbitrary size and then to store the tokens
  +  redundancy-free.
  +- Problem: \x00 oder \x{00} wird zu NUL-terminator -> use ptr+len instead
  +- caStr/cpStr durch yyless/yymore??
  +- syntax verification
  +- command line query tool
  +- error checking in scanner?
  +- OSSP ex support
  +- wieso geht sample.cfg nicht als Arg bei "make check"?
  +
  +- newline in error message
  +$ ./cfg_test sample2.cfg 
  +ERROR: <line 7, column 1: `1b;
  +<}> quu'>
  +
  +- cfg_t
  +
  +rewrite-uri <regex> <subst> { <rewrite-cond> }
  +rewrite-uri ^/(.*) /path/$1 --redirect=permanent q{
  +    %{SOURCE} != "x" 
  +};
  +
  +
  +Directory [--foo=A]
  +
  +Argument:
  +  - type:
  +    - keyword ("foo") via name
  +    - option ("--foo=BAR") via name & regex
  +    - argument ("foo") via regex
  +  - amount:
  +    - 1    
  +    - 0/1  ?
  +    - 0..n *
  +    - 1..n +
  +  - location:
  +    - by position
  +    - by name
  +  - lookup via:
  +    - name
  +    - position
  +    - regex match
  +
  +foo   * bar
  +foo   = bar|quux|...
  +foo   (bar baz quux)
  +
  +foo  ::= bar*         ;   kleene closure
  +foo  ::= bar|baz|quux ;   union
  +foo  ::= bar baz quux ;   concatenation
  +
  +foo  ::= {foo;...}    ;   sequence of ...
  +foo  ::= (...)        ;   grouping
  +foo  ::= "bar"        ;   fixed terminal
  +foo  ::= /bar/        ;   regex terminal
  +foo  ::= <A>          ;   arbitrary argument
  +foo  ::= <O>          ;   arbitrary option
  +
  +SEQ ::= "{" DIR DIR* "}"
  +DIR ::= TOK (" " TOK)* ";"
  +TOK ::= ...
  +
  +SEQ ::= DIR*     SEQ(dir,dir,...)
  +DIR ::= TOK+     DIR(tok,tok,...)
  +TOK ::= string   "..."
  +
  +config        ::= SEQ(directory|user|rewrite|access)
  +directory     ::= DIR("directory",<O>*,<A>) 
  +dir_options   ::= 
  +user          ::= DIR("user",/^[a-z]$/)
  +rewrite       ::= 
  +access        ::= "access" ("allow"|"deny"):action SEQ(access_list):acl
  +access_list   ::= m/^!?%{ID}$/
  +
  +acl           ::= "acl" TOK:name acl_list
  +acl_list      ::= SEQ(acl_entry)
  +acl_entry     ::= acl_action "from" net-addr:src "to" net-addr:dst 
  +acl_action    ::= "allow"|"deny"
  +net_addr      ::= net_hostname | net_ipv4addr | net_ipv6addr
  +
  +sequence all {
  +    directive --class 1;
  +};
  +directive --class 1 "foo" {
  +    option "bar" --occur=1
  +};
  +
  +---------------------------------------------------------------------------
  +
  +foo on;
  +bar /bla {
  +    foo off;
  +    baz --fuck {
  +        b1; b2 --nase=baer; b3; b4; b5;
  +    } --fuck2;
  +};
  +quux a1 a2 a3 a4;
  +quux;
  +
  +---------------------------------------------------------------------------
  +
  +sequence ROOT {
  +    directive foo; 
  +    directive bar;
  +    directive quux --count=1:oo;
  +};
  +sequence bar-seq {
  +    directive foo --count=0:1; 
  +    directive baz --count=1:oo;
  +};
  +directive foo { 
  +    token - on|off|yes|no;
  +};
  +directive bar {
  +    token path /.*; 
  +    sequence bar-seq;
  +};
  +directive baz { 
  +    option fuck; 
  +    option fuck2; 
  +    sequence {
  +        directive foo { 
  +            option nase (baer|hugo);
  +            option foo [0-9]; 
  +            token ip-address;
  +        };
  +    };
  +};
  +directive quux {
  +    token --count=0:oo a.*;
  +};
  +token ip-address b1|b2|b3|b4|b5;
  +
  +-------------------------------------------------------------------------------
  +
  +<config>     ::= "sequence" <count>? <name>;
  +               | "sequence" <count>? <name>? "{" <directive>* "}";
  +<directive>  ::= "directive" <token-count>? <name>;
  +               | "directive" <token-count>? <name>? "{" <option>* <token>+ };
  +<option>     ::= "option" <name> <regex>?;
  +<token>      ::= "token" <name>? <regex>;
  +<count>      ::= /^(\+|\*|\?|[0-9]+,[0-9]*|[0-9]*,[0-9]+|[0-9]+)$/
  +<name>       ::= /^[a-zA-Z][a-zA-Z0-9_.-]*$/
  +<regex>      ::= ...
  +
  +-------------------------------------------------------------------------------
  +
  +sequence ROOT {
  +    directive * "directive" {
  +
  +    directive * token-1 {
  +        token token "token";
  +        token name  /^[a-zA-Z][a-zA-Z0-9_.-]*$/;
  +        token regex /^.+$/;
  +    }
  +};
  +
  +-------------------------------------------------------------------------------
  +
  +directive token {
  +    opt1      { /.../ opt2=/.../ } { 
  +    directive { /^token$/ }; 
  +    name      { m/.../; m/^[a-zA-Z][a-zA-Z0-9_.-]*$/ } ?;
  +    name      { m/(...|[a-zA-Z][a-zA-Z0-9_.-]*$)/ } ?;
  +    regex     { m/^.+$/ };
  +};
  +directive acl   { directive=/^acl$/ addr=/^...|...$/+ };
  +
  +-------------------------------------------------------------------------------
  +
  +a?b((c|d)+e)?f
  +
  +A m/a/ ?
  +B m/b/ 
  +{
  +    {
  +        C m/c/ ;
  +        D m/d/ 
  +    } +
  +    E m/e/
  +} ? 
  +F f
  +
  +<directive-match> ::= <token-match>+
  +<token-match> ::= <name>? <regex> <quant>?
  +
  +-------------------------------------------------------------------------------
  +
  +<config>     ::= "sequence" <count>? <name>;
  +               | "sequence" <count>? <name>? "{" <directive>* "}";
  +<directive>  ::= "directive" <name>;
  +               | "directive" <name>? "{" <options> "}" "{" <tokens> "}";
  +
  +<options>     ::= <tok-match>+
  +<tokens>      ::= <dir-match>+
  +
  +<dir-match>   ::= <tok-match>+
  +<tok-match>   ::= <name>? <node-match> <quant>?
  +<node-match>  ::= "{" <dir-match> "}" | <regex>
  +
  +<option>     ::= "option" <name> <regex>?;
  +<token>      ::= "token" <name>? <regex>;
  +
  +<count>      ::= /^(\+|\*|\?|[0-9]+,[0-9]*|[0-9]*,[0-9]+|[0-9]+)$/
  +<name>       ::= /^[a-zA-Z][a-zA-Z0-9_.-]*$/
  +<regex>      ::= ...
   
  -- add support for prefixes of all non-static symbols to better support embedding

From ossp-cvs-owner@ossp.org  Mon Aug 19 13:32:24 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 29D79767D1; Mon, 19 Aug 2002 13:32:24 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/com contributors.wml developers.wml donations.wml...
Message-Id: <20020819113224.29D79767D1@mail.ossp.org>
Date: Mon, 19 Aug 2002 13:32:24 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-web                         Date:   19-Aug-2002 13:32:24
  Branch: HEAD                             Handle: 2002081912322300

  Modified files:
    ossp-web/com            contributors.wml developers.wml donations.wml
                            sponsors.wml users.wml

  Log:
    Remove duplicate titles in nearly complete Community section.

  Summary:
    Revision    Changes     Path
    1.4         +0  -2      ossp-web/com/contributors.wml
    1.4         +0  -2      ossp-web/com/developers.wml
    1.4         +0  -2      ossp-web/com/donations.wml
    1.4         +0  -2      ossp-web/com/sponsors.wml
    1.3         +0  -2      ossp-web/com/users.wml
  ____________________________________________________________________________

  Index: ossp-web/com/contributors.wml
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 contributors.wml
  --- ossp-web/com/contributors.wml	11 Aug 2002 13:49:10 -0000	1.3
  +++ ossp-web/com/contributors.wml	19 Aug 2002 11:32:23 -0000	1.4
  @@ -3,8 +3,6 @@
   
   <title>Community: Contributors</title>
   
  -<h1>Community: Contributors</h1>
  -
   The following people have contributed to the OSSP project:
   
   <p>
  Index: ossp-web/com/developers.wml
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 developers.wml
  --- ossp-web/com/developers.wml	11 Aug 2002 13:49:10 -0000	1.3
  +++ ossp-web/com/developers.wml	19 Aug 2002 11:32:23 -0000	1.4
  @@ -3,8 +3,6 @@
   
   <title>Community: Developers</title>
   
  -<h1>Community: Developers</h1>
  -
   The OSSP project team currently consists of the following developers:
   
   <p>
  Index: ossp-web/com/donations.wml
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 donations.wml
  --- ossp-web/com/donations.wml	12 Aug 2002 12:31:39 -0000	1.3
  +++ ossp-web/com/donations.wml	19 Aug 2002 11:32:23 -0000	1.4
  @@ -3,8 +3,6 @@
   
   <title>Community: Donations</title>
   
  -<h1>Community: Donations</h1>
  -
   <a href="http://www.ossp.org/">OSSP</a> is a fully non-profit <a
   href="http://www.opensource.org/">Open Source Software</a> project. It
   aims to implement high quality Unix component software for use in the
  Index: ossp-web/com/sponsors.wml
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 sponsors.wml
  --- ossp-web/com/sponsors.wml	11 Aug 2002 13:49:10 -0000	1.3
  +++ ossp-web/com/sponsors.wml	19 Aug 2002 11:32:23 -0000	1.4
  @@ -3,8 +3,6 @@
   
   <title>Community: Sponsors</title>
   
  -<h1>Community: Sponsors</h1>
  -
   OSSP is a fully non-profit <a href="http://www.opensource.org/">Open
   Source Software</a> project with the goal of implementing high-quality
   Unix software components for use in the Unix Open Source community. It
  Index: ossp-web/com/users.wml
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 users.wml
  --- ossp-web/com/users.wml	11 Aug 2002 13:49:10 -0000	1.2
  +++ ossp-web/com/users.wml	19 Aug 2002 11:32:23 -0000	1.3
  @@ -3,8 +3,6 @@
   
   <title>Community: Users</title>
   
  -<h1>Community: Users</h1>
  -
   <h2>Companies</h2>
   
   The following companies have successfully deployed OSSP software

From ossp-cvs-owner@ossp.org  Mon Aug 19 21:10:40 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B9B16767D1; Mon, 19 Aug 2002 21:10:39 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela .cvsignore ChangeLog Makefile.in README VE...
Message-Id: <20020819191039.B9B16767D1@mail.ossp.org>
Date: Mon, 19 Aug 2002 21:10:39 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-Aug-2002 21:10:39
  Branch: HEAD                             Handle: 197001010100001029780638

  Added files:
    ossp-pkg/shiela         configure.ac devtool devtool.conf devtool.func
  Modified files:
    ossp-pkg/shiela         .cvsignore ChangeLog Makefile.in README VERSION
                            shiela-install.pod shiela-install.sh shiela.pl
                            shiela.pod
  Removed files:
    ossp-pkg/shiela         configure configure.in shtool

  Log:
    Switched to the OSSP devtool build environment
    and upgraded to GNU shtool 1.6.1 and GNU autoconf 2.53.

  Summary:
    Revision    Changes     Path
    1.3         +2  -0      ossp-pkg/shiela/.cvsignore
    1.10        +5  -1      ossp-pkg/shiela/ChangeLog
    1.3         +1  -24     ossp-pkg/shiela/Makefile.in
    1.5         +1  -1      ossp-pkg/shiela/README
    1.4         +4  -1      ossp-pkg/shiela/VERSION
    NONE        +0  -0      ossp-pkg/shiela/configure
    1.1         +38 -0      ossp-pkg/shiela/configure.ac
    NONE        +0  -38     ossp-pkg/shiela/configure.in
    1.1         +47 -0      ossp-pkg/shiela/devtool
    1.1         +68 -0      ossp-pkg/shiela/devtool.conf
    1.1         +73 -0      ossp-pkg/shiela/devtool.func
    1.5         +1  -1      ossp-pkg/shiela/shiela-install.pod
    1.6         +1  -1      ossp-pkg/shiela/shiela-install.sh
    1.16        +1  -1      ossp-pkg/shiela/shiela.pl
    1.5         +1  -1      ossp-pkg/shiela/shiela.pod
    NONE        +0  -1443   ossp-pkg/shiela/shtool
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/.cvsignore
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 .cvsignore
  --- ossp-pkg/shiela/.cvsignore	10 Feb 2001 16:40:26 -0000	1.2
  +++ ossp-pkg/shiela/.cvsignore	19 Aug 2002 19:10:37 -0000	1.3
  @@ -3,3 +3,5 @@
   shiela.1
   shiela-install
   shiela-install.1
  +config.h
  +config.h.in
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	31 Dec 2001 15:00:31 -0000	1.9
  +++ ossp-pkg/shiela/ChangeLog	19 Aug 2002 19:10:37 -0000	1.10
  @@ -9,7 +9,11 @@
   
     ChangeLog
   
  -  Changes between 0.9.1 and 0.9.2 (10-Feb-2001 to xx-Jan-2002):
  +  Changes between 0.9.1 and 0.9.2 (10-Feb-2001 to 19-Aug-2002):
  +
  +   *) Switched to the OSSP devtool build environment
  +      and upgraded to GNU shtool 1.6.1 and GNU autoconf 2.53.
  +      [Ralf S. Engelschall]
   
      *) Fixed warning in dereferencing uninitialized variable.
         [Ralf S. Engelschall, Markus Sander]
  Index: ossp-pkg/shiela/Makefile.in
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 Makefile.in
  --- ossp-pkg/shiela/Makefile.in	10 Feb 2001 16:40:26 -0000	1.2
  +++ ossp-pkg/shiela/Makefile.in	19 Aug 2002 19:10:37 -0000	1.3
  @@ -66,28 +66,5 @@
   
   distclean: clean
   	$(RM) config.cache config.status config.log
  -	$(RM) Makefile
  -
  -dist: distclean
  -	@echo "Fixing source tree permissions"; \
  -	$(SHTOOL) fixperm *
  -	@V=`$(SHTOOL) version -l txt -d short VERSION`; \
  -	echo "Rolling tarball shiela-$${V}.tar.gz:"; \
  -	$(SHTOOL) tarball -o shiela-$${V}.tar.gz \
  -	                  -e 'CVS,\.cvsignore,^\.' -c 'gzip -9' -u ossp -g shiela .; \
  -	ls -l shiela-$${V}.tar.gz
  -
  -update-tools:
  -	shtoolize -q -o shtool echo mkdir install tarball fixperm version path
  -	$(RM) configure
  -	autoconf
  -
  -update-version:
  -	V=`./shtool version -l txt -d short VERSION`; \
  -    $(SED) -e "s/version = '.*'/version = '$$V'/" <shiela.pl >shiela.pl.n && mv shiela.pl.n shiela.pl; \
  -    $(SED) -e "s/version=\".*\"/version=\"$$V\"/" <shiela-install.sh >shiela-install.sh.n && mv shiela-install.sh.n shiela-install.sh; \
  -	V=`./shtool version -l txt -d long VERSION`; \
  -	$(SED) -e "s/Version .*(.*)/Version $$V/g" <README >README.n && mv README.n README; \
  -    $(SED) -e "s/B<OSSP Shiela> .*/B<OSSP Shiela> $$V/" <shiela.pod >shiela.pod.n && mv shiela.pod.n shiela.pod; \
  -    $(SED) -e "s/B<OSSP Shiela> .*/B<OSSP Shiela> $$V/" <shiela-install.pod >shiela-install.pod.n && mv shiela-install.pod.n shiela-install.pod
  +	$(RM) Makefile config.h
   
  Index: ossp-pkg/shiela/README
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 README
  --- ossp-pkg/shiela/README	31 Dec 2001 15:00:31 -0000	1.4
  +++ ossp-pkg/shiela/README	19 Aug 2002 19:10:37 -0000	1.5
  @@ -7,7 +7,7 @@
     OSSP Shiela - Access Control and Logging Facility for CVS
     Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>
   
  -  Version 0.9.2 (05-May-2001)
  +  Version 
   
     Shiela is an access control and logging facility for use with the
     Concurrent Versions System (CVS). It is intended to be hooked into CVS's
  Index: ossp-pkg/shiela/VERSION
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 VERSION
  --- ossp-pkg/shiela/VERSION	4 May 2001 13:25:18 -0000	1.3
  +++ ossp-pkg/shiela/VERSION	19 Aug 2002 19:10:37 -0000	1.4
  @@ -1,3 +1,6 @@
   
  -  This is OSSP Shiela, Version 0.9.2 (05-May-2001)
  +  VERSION -- Version Information for OSSP shiela (syntax: Text)
  +  [automatically generated and maintained by GNU shtool]
  +
  +  This is OSSP shiela, Version 0.9.2 (19-Aug-2002)
   
    Index: ossp-pkg/shiela/configure.ac
  ============================================================
  $ cvs update -p -r1.1 configure.ac
  
  AC_PREREQ(2.53)
  AC_INIT
  
  V=`./shtool version -ltxt -dlong VERSION`
  ./shtool echo -e "Configuring %BOSSP shiela%b, Version %B${V}%b"
  echo "Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>"
  
  AC_MSG_CHECKING(for Perl program)
  AC_ARG_WITH(perl,dnl
  [  --with-perl=PATH        force the use of a particular Perl program],
  with_perl="$withval",
  if test ".$with_perl" = .; then
      with_perl=`./shtool path -m perl5 perl`
  fi
  )dnl
  PATH_PERL="$with_perl"
  AC_SUBST(PATH_PERL)
  AC_MSG_RESULT($PATH_PERL)
  
  AC_MSG_CHECKING(for CVS program)
  AC_ARG_WITH(cvs,dnl
  [  --with-cvs=PATH         force the use of a particular CVS program],
  with_cvs="$withval",
  if test ".$with_cvs" = .; then
      with_perl=`./shtool path cvs`
  fi
  )dnl
  PATH_CVS="$with_cvs"
  AC_SUBST(PATH_CVS)
  AC_MSG_RESULT($PATH_CVS)
  
  AC_SET_MAKE
  
  AC_CONFIG_HEADERS(config.h)
  AC_CONFIG_FILES([Makefile])
  AC_OUTPUT
  
    Index: ossp-pkg/shiela/devtool
  ============================================================
  $ cvs update -p -r1.1 devtool
  #!/bin/sh
  ##
  ##  devtool -- Development Tool
  ##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  if [ $# -eq 0 ]; then
      echo "devtool:USAGE: devtool <command> [<arg> ...]" 1>&2
      exit 1
  fi
  
  cmd="$1"
  shift
  
  devtoolfunc="./devtool.func"
  
  if [ ! -f devtool.conf ]; then
      echo "devtool:ERROR: no devtool.conf in current directory" 1>&2
      exit 1
  fi
  
  cmdline=`grep "^%$cmd" devtool.conf`
  if [ ".$cmdline" = . ]; then
      echo "devtool:ERROR: command $cmd not found in devtool.conf" 1>&2
      exit 1
  fi
  
  if [ ".$TMPDIR" != . ]; then
      tmpdir="$TMPDIR"
  elif [ ".$TEMPDIR" != . ]; then
      tmpdir="$TEMPDIR"
  else
      tmpdir="/tmp"
  fi
  tmpfile="$tmpdir/rc.$$.tmp"
  
  rm -f $tmpfile
  touch $tmpfile
  echo ". $devtoolfunc" >>$tmpfile
  ( sed <devtool.conf -e "1,/^%common/d" -e '/^%.*/,$d'
    sed <devtool.conf -e "1,/^%$cmd/d" -e '/^%.*/,$d' ) |\
  sed -e 's;\([ 	]\)@\([a-zA-Z_][a-zA-Z0-9_]*\);\1devtool_\2;' >>$tmpfile
  
  sh $tmpfile "$@"
  
  rm -f $tmpfile >/dev/null 2>&1 || true
  
  Index: ossp-pkg/shiela/devtool.conf
  ============================================================
  $ cvs update -p -r1.1 devtool.conf
  ##
  ##  devtool.conf -- Development Tool Configuration
  ##
  
  %autogen
      @autogen shtool   1.6.1 "1.6.*" all
      @autogen autoconf 2.53  "2.5[3-9]*"
  
  %autoclean
      @autoclean shtool
      @autoclean autoconf
  
  %configure
      ./configure \
          --prefix=/tmp/shiela \
          "$@"
  
  %release
      ./devtool version
      ./devtool tag
      ./devtool dist
      ./devtool upload
  
  %version
      ./shtool version -ltxt -n "OSSP shiela" -e VERSION
  	V=`./shtool version -ltxt -dlong VERSION`
  	sed -e "s/Version .*(.*)/Version $V/g" <README >README.n && mv README.n README
      sed -e "s/version = '.*'/version = '$V'/" <shiela.pl >shiela.pl.n && mv shiela.pl.n shiela.pl
      sed -e "s/version=\".*\"/version=\"$V\"/" <shiela-install.sh >shiela-install.sh.n && mv shiela-install.sh.n shiela-install.sh
  	V=`./shtool version -l txt -d long VERSION`
  	sed -e "s/Version .*(.*)/Version $V/g" <README >README.n && mv README.n README
      sed -e "s/B<OSSP Shiela> .*/B<OSSP Shiela> $V/" <shiela.pod >shiela.pod.n && mv shiela.pod.n shiela.pod
      sed -e "s/B<OSSP Shiela> .*/B<OSSP Shiela> $V/" <shiela-install.pod >shiela-install.pod.n && mv shiela-install.pod.n shiela-install.pod
  
  %tag
  	V=`./shtool version -ltxt -dshort VERSION | sed -e 's;\.;_;g'`
      echo "+++ tagging CVS sources as SHIELA_${V}"
      cvs tag SHIELA_${V}
  
  %dist
      echo "+++ removing old tarballs"
      rm -f shiela-*.tar.gz
      echo "+++ generating"
      ./devtool autoclean
      ./devtool autogen
      echo "+++ configuring"
      ./configure
      echo "+++ building"
      make clean all man
      echo "+++ cleaning"
      make distclean
      echo "+++ fixing"
      ./shtool fixperm -v .
      echo "+++ rolling"
  	V=`./shtool version -ltxt -dshort VERSION`
      ./shtool tarball -o shiela-${V}.tar.gz -d shiela-${V} -u ossp -g ossp \
                       -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*,*.tar.gz,^#.*,.*~$' -c 'gzip --best' .
      ls -l shiela-${V}.tar.gz
      echo "+++ testing"
      gunzip <shiela-${V}.tar.gz | tar tvf - | head -10
      echo "[...]"
      gunzip <shiela-${V}.tar.gz | tar tvf - | tail -10
  
  %upload
      echo "+++ copying to ftp://ftp.ossp.org/pkg/tool/shiela/"
  	V=`./shtool version -ltxt -dshort VERSION`
      scp shiela-${V}.tar.gz master.ossp.org:/e/ossp/ftp/pkg/tool/shiela/
  
  Index: ossp-pkg/shiela/devtool.func
  ============================================================
  $ cvs update -p -r1.1 devtool.func
  ##
  ##  devtool.func -- Development Tool Functions
  ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  devtool_require () {
      t="$1"; o="$2"; p="$3"; e="$4"; a="$5"
      v=`($t $o | head -1 | awk "{ print \\\$$p; }") 2>/dev/null`
      if [ ".$v" = . ]; then
          echo "devtool:ERROR: unable to determine version of $t" 1>&2
          exit 1
      fi
      case "$v" in
          $e )
              ;;
          $a )
              echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
              ;;
          * )
              echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
              exit 1
              ;;
      esac
      echo "$v"
  }
  
  devtool_autogen () {
      tool=$1
      shift
      case $tool in
          autoconf )
              autoconf_version=`devtool_require autoconf --version 4 "$1" "$2"`
              echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
              autoconf
              autoheader 2>&1 | grep -v "is unchanged"
              rm -rf autom4te.cache >/dev/null 2>&1
              ;;
          libtool )
              libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
              echo "generating (GNU Libtool $libtoolize_version): ltmain.sh, libtool.m4, config.guess, config.sub"
              libtoolize --force --copy >/dev/null 2>&1
              cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
                  sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` libtool.m4
              ;;
          shtool )
              shtoolize_version=`devtool_require shtoolize -v 3 "$1" "$2"`
              echo "generating (GNU Shtool $shtoolize_version): shtool"
              shift
              shift
              shtoolize -q "$@"
              ;;
      esac
  }
  
  devtool_autoclean () {
      tool=$1
      shift
      case $tool in
          autoconf )
              echo "removing: configure config.h.in"
              rm -f configure config.h.in
              ;;
          libtool )
              echo "removing: ltmain.sh libtool.m4 config.guess config.sub"
              rm -f ltmain.sh libtool.m4 config.guess config.sub
              ;;
          shtool )
              echo "removing: shtool"
              rm -f shtool
              ;;
      esac
  }
  
  Index: ossp-pkg/shiela/shiela-install.pod
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 shiela-install.pod
  --- ossp-pkg/shiela/shiela-install.pod	31 Dec 2001 15:00:31 -0000	1.4
  +++ ossp-pkg/shiela/shiela-install.pod	19 Aug 2002 19:10:38 -0000	1.5
  @@ -32,7 +32,7 @@
   
   =head1 VERSION
   
  -B<OSSP Shiela> 0.9.2 (05-May-2001)
  +B<OSSP Shiela> 0.9.2 (19-Aug-2002)
   
   =head1 DESCRIPTION
   
  Index: ossp-pkg/shiela/shiela-install.sh
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 shiela-install.sh
  --- ossp-pkg/shiela/shiela-install.sh	31 Dec 2001 15:00:31 -0000	1.5
  +++ ossp-pkg/shiela/shiela-install.sh	19 Aug 2002 19:10:38 -0000	1.6
  @@ -25,7 +25,7 @@
   ##  shiela-install: Shiela repository install program (syntax: Bourne-Shell)
   ##
   
  -version="0.9.2"
  +version="0.9.2 (19-Aug-2002)"
   
   prefix="@prefix@"
   bindir="@bindir@"
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	31 Dec 2001 15:00:32 -0000	1.15
  +++ ossp-pkg/shiela/shiela.pl	19 Aug 2002 19:10:38 -0000	1.16
  @@ -25,7 +25,7 @@
   ##  shiela: Shiela control program (syntax: Perl)
   ##
   
  -my $version = '0.9.2';
  +my $version = '0.9.2 (19-Aug-2002)';
   
   require 5.005;
   
  Index: ossp-pkg/shiela/shiela.pod
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 shiela.pod
  --- ossp-pkg/shiela/shiela.pod	31 Dec 2001 15:00:32 -0000	1.4
  +++ ossp-pkg/shiela/shiela.pod	19 Aug 2002 19:10:38 -0000	1.5
  @@ -32,7 +32,7 @@
   
   =head1 VERSION
   
  -B<OSSP Shiela> 0.9.2 (05-May-2001)
  +B<OSSP Shiela> 0.9.2 (19-Aug-2002)
   
   =head1 DESCRIPTION
   
  

From ossp-cvs-owner@ossp.org  Mon Aug 19 21:15:11 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 59F9176986; Mon, 19 Aug 2002 21:15:11 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new news.txt ossp-web/pkg/tool index.wml ossp-web...
Message-Id: <20020819191511.59F9176986@mail.ossp.org>
Date: Mon, 19 Aug 2002 21:15:11 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   19-Aug-2002 21:15:11
  Branch: HEAD                             Handle: 2002081920150307

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/shiela index.wml

  Log:
    release OSSP shiela 0.9.2

  Summary:
    Revision    Changes     Path
    1.23        +1  -0      ossp-web/new/news.txt
    1.18        +1  -1      ossp-web/pkg/tool/index.wml
    1.4         +2  -2      ossp-web/pkg/tool/shiela/index.wml
  ____________________________________________________________________________

  Index: ossp-web/new/news.txt
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 news.txt
  --- ossp-web/new/news.txt	14 Aug 2002 21:29:22 -0000	1.22
  +++ ossp-web/new/news.txt	19 Aug 2002 19:15:03 -0000	1.23
  @@ -1,3 +1,4 @@
  +19-Aug-2002: Released T<OSSP shiela> 0.9.2
   14-Aug-2002: Released T<OSSP lmtp2nntp> 1.2a6
   14-Aug-2002: Released L<OSSP fsl> 1.0.2
   02-Aug-2002: Released L<OSSP fsl> 1.0.1
  Index: ossp-web/pkg/tool/index.wml
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 index.wml
  --- ossp-web/pkg/tool/index.wml	16 Aug 2002 09:26:47 -0000	1.17
  +++ ossp-web/pkg/tool/index.wml	19 Aug 2002 19:15:06 -0000	1.18
  @@ -26,7 +26,7 @@
   	        done=95 stable="none" unstable="4.0b1">
     <pkg_item name="shiela" longname="OSSP shiela" type="tool"
               desc="CVS Access Control and Logging"
  -	        done=95 stable="none" unstable="none">
  +	        done=95 stable="none" unstable="0.9.2">
     <pkg_item name="xenia" longname="OSSP xenia" type="tool"
               desc="CVS Browsing Server"
   	        done=20 stable="none" unstable="none">
  Index: ossp-web/pkg/tool/shiela/index.wml
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 index.wml
  --- ossp-web/pkg/tool/shiela/index.wml	11 Aug 2002 13:49:17 -0000	1.3
  +++ ossp-web/pkg/tool/shiela/index.wml	19 Aug 2002 19:15:10 -0000	1.4
  @@ -25,7 +25,7 @@
   
   <pkg_status
       stable="none"    stable_date="none"
  -    unstable="0.9.1" unstable_date="10-Feb-2001"
  +    unstable="0.9.2" unstable_date="19-Aug-2002"
   	done=95>
   
   <h2>Source</h2>
  @@ -35,7 +35,7 @@
       url=$(FTP_ROOT_URL)/pkg/tool/shiela/
       directory=$(FTP_ROOT_DIR)/pkg/tool/shiela/
       files="shiela-*.tar.gz" 
  -	stable="none" unstable="shiela-0.9.1.tar.gz">
  +	stable="none" unstable="shiela-0.9.2.tar.gz">
   	
   <h2>Donation</h2>
   

From ossp-cvs-owner@ossp.org  Wed Aug 21 15:26:28 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9FDA576978; Wed, 21 Aug 2002 15:26:27 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 Makefile.in
Message-Id: <20020821132627.9FDA576978@mail.ossp.org>
Date: Wed, 21 Aug 2002 15:26:27 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Aug-2002 15:26:27
  Branch: HEAD                             Handle: 2002082114262700

  Modified files:
    ossp-pkg/l2             Makefile.in

  Log:
    fix DESTDIR support

  Summary:
    Revision    Changes     Path
    1.46        +0  -5      ossp-pkg/l2/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/l2/Makefile.in
  ============================================================
  $ cvs diff -u -r1.45 -r1.46 Makefile.in
  --- ossp-pkg/l2/Makefile.in	30 Jul 2002 19:08:24 -0000	1.45
  +++ ossp-pkg/l2/Makefile.in	21 Aug 2002 13:26:27 -0000	1.46
  @@ -180,8 +180,6 @@
   
   #   perform standard installation procedure
   install: all
  -	$(MAKE) $(MFLAGS) install-std install-c
  -install-std:
   	$(SHTOOL) mkdir -p -f -m 755 $(DESTDIR)$(bindir)
   	$(SHTOOL) mkdir -p -f -m 755 $(DESTDIR)$(includedir)
   	$(SHTOOL) mkdir -p -f -m 755 $(DESTDIR)$(libdir)
  @@ -191,7 +189,6 @@
   	$(SHTOOL) install -c -m 644 l2-config.1 $(DESTDIR)$(mandir)/man1/l2-config.1
   	$(SHTOOL) install -c -m 755 l2tool $(DESTDIR)$(bindir)/l2tool
   	$(SHTOOL) install -c -m 644 l2tool.1 $(DESTDIR)$(mandir)/man1/l2tool.1
  -install-c:
   	$(SHTOOL) install -c -m 644 l2.3 $(DESTDIR)$(mandir)/man3/l2.3
   	$(SHTOOL) install -c -m 644 l2.h $(DESTDIR)$(includedir)/l2.h
   	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 \
  @@ -200,11 +197,9 @@
   #   perform standard uninstallation procedure
   uninstall:
   	$(MAKE) $(MFLAGS) uninstall-c uninstall-std
  -uninstall-c:
   	@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libl2.la
   	$(RM) $(DESTDIR)$(includedir)/l2.h
   	$(RM) $(DESTDIR)$(mandir)/man3/l2.3
  -uninstall-std:
   	$(RM) $(DESTDIR)$(mandir)/man1/l2tool.1
   	$(RM) $(DESTDIR)$(bindir)/l2tool
   	$(RM) $(DESTDIR)$(mandir)/man1/l2-config.1

From ossp-cvs-owner@ossp.org  Fri Aug 23 17:33:19 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 30F6576A53; Fri, 23 Aug 2002 17:33:19 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/path Makefile.in path.h path_self.c path_test.c
Message-Id: <20020823153319.30F6576A53@mail.ossp.org>
Date: Fri, 23 Aug 2002 17:33:19 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Aug-2002 17:33:19
  Branch: HEAD                             Handle: 2002082316331800

  Added files:
    ossp-pkg/path           path_self.c
  Modified files:
    ossp-pkg/path           Makefile.in path.h path_test.c

  Log:
    Add new path_self(3) function for finding the path to the own program

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/path/Makefile.in
    1.4         +4  -1      ossp-pkg/path/path.h
    1.1         +113 -0     ossp-pkg/path/path_self.c
    1.3         +99 -24     ossp-pkg/path/path_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/path/Makefile.in
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 Makefile.in
  --- ossp-pkg/path/Makefile.in	3 Aug 2002 21:00:14 -0000	1.3
  +++ ossp-pkg/path/Makefile.in	23 Aug 2002 15:33:18 -0000	1.4
  @@ -51,7 +51,7 @@
   
   LIB_NAME    = libpath.la
   LIB_OBJS    = path_abs2rel.lo path_rel2abs.lo path_resolve.lo \
  -              path_dirname.lo path_basename.lo path_temp.lo path_util.lo
  +              path_dirname.lo path_basename.lo path_temp.lo path_self.lo path_util.lo
   
   TST_NAME    = path_test
   TST_OBJS    = path_test.o
  Index: ossp-pkg/path/path.h
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 path.h
  --- ossp-pkg/path/path.h	3 Aug 2002 21:00:14 -0000	1.3
  +++ ossp-pkg/path/path.h	23 Aug 2002 15:33:18 -0000	1.4
  @@ -37,7 +37,9 @@
       PATH_ERR_USE,
       PATH_ERR_INT,
       PATH_ERR_SYS,
  -    PATH_ERR_EXS
  +    PATH_ERR_MEM,
  +    PATH_ERR_EXS,
  +    PATH_ERR_NFD
   } path_rc_t;
   
   typedef enum {
  @@ -51,6 +53,7 @@
   char *path_dirname  (char *, size_t, const char *);
   char *path_basename (char *, size_t, const char *);
   path_rc_t path_temp(path_temp_t id, const char *tmpl, char **res_ptr, size_t *res_size, int *res_fd);
  +path_rc_t path_self (char *res_buf, size_t res_size, const char *argv0);
   
   #endif /* __PATH_H__ */
   
  Index: ossp-pkg/path/path_self.c
  ============================================================
  $ cvs update -p -r1.1 path_self.c
  /*
  **  OSSP path - Filesystem Path Manipulation
  **  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP path, a filesystem path manipulation library
  **  which can be found at http://www.ossp.org/pkg/lib/path/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  path_self.c: resolve path to current program
  */
  
  #include <stdlib.h>
  #include <string.h>
  #include <sys/types.h>
  #include <sys/stat.h>
  #include <unistd.h>
  
  #include "path.h"
  
  #define PATH_DEFAULT "/bin:/sbin:/usr/bin:/usr/sbin:."
  
  path_rc_t path_self(char *res_buf, size_t res_size, const char *argv0)
  {
      char *path;
      size_t l;
      struct stat sb;
      char *cpB, *cpE;
      size_t argv0_len;
  
      if (res_buf == NULL || res_size == 0 || argv0 == NULL)
          return PATH_ERR_ARG;
  
      /* determine length of argv[0] */
      argv0_len = strlen(argv0);
  
      /* short-circuit if argv[0] already contains an absolute path */
      if (argv0[0] == '/') {
          if (argv0_len > res_size-1)
              return PATH_ERR_MEM;
          memcpy(res_buf, argv0, argv0_len);
          res_buf[argv0_len] = '\0';
          if (path_resolve(res_buf, res_size, res_buf) == NULL)
              return PATH_ERR_SYS;
          return PATH_OK;
      }
  
      /* short-circuit if argv[0] already contains a relative path */
      if (argv0[0] == '.') {
          if (getcwd(res_buf, res_size) == NULL)
              return PATH_ERR_SYS;
          l = strlen(res_buf);
          if (res_buf[l-1] == '/')
              l--;
          if (l+1+argv0_len+1 > res_size)
              return PATH_ERR_MEM;
          res_buf[l++] = '/';
          memcpy(res_buf+l, argv0, argv0_len);
          res_buf[l+argv0_len] = '\0';
          if (path_resolve(res_buf, res_size, res_buf) == NULL)
              return PATH_ERR_SYS;
          return PATH_OK;
      }
  
      /* else search argv[0] in $PATH */
      if ((path = getenv("PATH")) == NULL)
          path = PATH_DEFAULT;
      cpE = path;
      cpB = cpE;
      while (*cpE != '\0') {
          if ((cpE = strchr(cpB, ':')) == NULL)
              cpE = strchr(cpB, '\0');
          if ((l = cpE-cpB) > 0) {
              if (cpB[l-1] == '/')
                  l--;
              if (l+1+argv0_len+1 <= res_size) {
                  memcpy(res_buf, cpB, l);
                  res_buf[l++] = '/';
                  memcpy(res_buf+l, argv0, argv0_len);
                  res_buf[l+argv0_len] = '\0';
                  if (stat(res_buf, &sb) == 0) {
                      if (path_resolve(res_buf, res_size, res_buf) == NULL)
                          return PATH_ERR_SYS;
                      return PATH_OK;
                  }
              }
          }
          if (*cpE == '\0')
              break;
          cpB = cpE+1;
      }
  
      return PATH_ERR_NFD;
  }
  
  Index: ossp-pkg/path/path_test.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 path_test.c
  --- ossp-pkg/path/path_test.c	3 Aug 2002 10:23:41 -0000	1.2
  +++ ossp-pkg/path/path_test.c	23 Aug 2002 15:33:18 -0000	1.3
  @@ -37,33 +37,108 @@
   
   #include "path.h"
   
  +static void usage(const char *argv0, const char *error)
  +{
  +    if (error != NULL)
  +        fprintf(stderr, "error: %s\n", error);
  +    fprintf(stderr, "usage: %s abs2rel <path> [<base>]\n", argv0);
  +    fprintf(stderr, "usage: %s rel2abs <path> [<base>]\n", argv0);
  +    fprintf(stderr, "usage: %s resolve <path>\n", argv0);
  +    fprintf(stderr, "usage: %s dirname <path>\n", argv0);
  +    fprintf(stderr, "usage: %s basename <path>\n", argv0);
  +    fprintf(stderr, "usage: %s temp dir|file [<template>]\n", argv0);
  +    fprintf(stderr, "usage: %s self\n", argv0);
  +    if (error != NULL)
  +        exit(1);
  +    else
  +        exit(0);
  +}
  +
   int main(int argc, char *argv[])
   {
  -	char result[MAXPATHLEN];
  -	char cwd[MAXPATHLEN];
  +    char res[MAXPATHLEN];
  +    char cwd[MAXPATHLEN];
       char *rv;
   
  -	if (argc < 3) {
  -		fprintf(stderr, "usage: test abs2rel|rel2abs path [base]\n");
  -		exit(1);
  -	}
  -	if (argc == 3) {
  -		if (getcwd(cwd, MAXPATHLEN) == NULL) {
  -			fprintf(stderr, "cannot get current directory.\n");
  -			exit(1);
  -		}
  -	} else
  -		strcpy(cwd, argv[3]);
  -	
  -    if (strcmp(argv[1], "abs2rel") == 0)
  -	    rv = path_abs2rel(result, MAXPATHLEN, argv[2], cwd);
  -    else                                                  
  -	    rv = path_rel2abs(result, MAXPATHLEN, argv[2], cwd);
  -        
  -    if (rv != NULL)
  -		printf("%s\n", result);
  -	else
  -		printf("ERROR\n");
  -	exit(0);
  +    if ((argc >= 3 && argc <= 4) && strcmp(argv[1], "abs2rel") == 0) {
  +        if (argc == 3) {
  +            if (getcwd(cwd, MAXPATHLEN) == NULL) {
  +                fprintf(stderr, "error: cannot get current directory\n");
  +                exit(1);
  +            }
  +        } else
  +            strcpy(cwd, argv[3]);
  +        rv = path_abs2rel(res, sizeof(res), argv[2], cwd);
  +        if (rv != NULL)
  +            printf("%s\n", res);
  +        else
  +            printf("ERROR\n");
  +    }
  +    else if ((argc >= 3 && argc <= 4) && strcmp(argv[1], "rel2abs") == 0) {
  +        if (argc == 3) {
  +            if (getcwd(cwd, MAXPATHLEN) == NULL) {
  +                fprintf(stderr, "error: cannot get current directory\n");
  +                exit(1);
  +            }
  +        } else
  +            strcpy(cwd, argv[3]);
  +        rv = path_rel2abs(res, sizeof(res), argv[2], cwd);
  +        if (rv != NULL)
  +            printf("%s\n", res);
  +        else
  +            printf("ERROR\n");
  +    }
  +    else if (argc == 3 && strcmp(argv[1], "resolve") == 0) {
  +        rv = path_resolve(res, sizeof(res), argv[2]);
  +        if (rv != NULL)
  +            printf("%s\n", res);
  +        else
  +            printf("ERROR\n");
  +    }
  +    else if (argc == 3 && strcmp(argv[1], "dirname") == 0) {
  +        rv = path_dirname(res, sizeof(res), argv[2]);
  +        if (rv != NULL)
  +            printf("%s\n", res);
  +        else
  +            printf("ERROR\n");
  +    }
  +    else if (argc == 3 && strcmp(argv[1], "basename") == 0) {
  +        rv = path_basename(res, sizeof(res), argv[2]);
  +        if (rv != NULL)
  +            printf("%s\n", res);
  +        else
  +            printf("ERROR\n");
  +    }
  +    else if ((argc >= 3 && argc <= 4) && strcmp(argv[1], "temp") == 0) {
  +        path_temp_t id = 0;
  +        char *tmpl;
  +        char *result;
  +        size_t result_len;
  +        if (strcmp(argv[2], "dir") == 0)
  +            id = PATH_TEMP_DIR;
  +        else if (strcmp(argv[2], "file") == 0)
  +            id = PATH_TEMP_FILE;
  +        else
  +            usage(argv[0], "invalid temp id");
  +        tmpl = NULL;
  +        if (argc == 4)
  +            tmpl = argv[3];
  +        result = res;
  +        if (path_temp(id, tmpl, &result, &result_len, NULL) != PATH_OK)
  +            fprintf(stderr, "ERROR\n");
  +        else {
  +            fprintf(stderr, "%s\n", res);
  +            unlink(res);
  +        }
  +    }
  +    else if (argc == 2 && strcmp(argv[1], "self") == 0) {
  +        if (path_self(res, sizeof(res), argv[0]) != PATH_OK)
  +            fprintf(stderr, "ERROR\n");
  +        else
  +            fprintf(stderr, "%s\n", res);
  +    }
  +    else
  +        usage(argv[0], "invalid usage");
  +    exit(0);
   }
   

From ossp-cvs-owner@ossp.org  Mon Aug 26 20:40:34 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E0BA376A0F; Mon, 26 Aug 2002 20:40:33 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/path path_self.c
Message-Id: <20020826184033.E0BA376A0F@mail.ossp.org>
Date: Mon, 26 Aug 2002 20:40:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Aug-2002 20:40:33
  Branch: HEAD                             Handle: 2002082619403300

  Modified files:
    ossp-pkg/path           path_self.c

  Log:
    add support for /proc based determination (idea stolen by Perl's $^X)

  Summary:
    Revision    Changes     Path
    1.2         +12 -0      ossp-pkg/path/path_self.c
  ____________________________________________________________________________

  Index: ossp-pkg/path/path_self.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 path_self.c
  --- ossp-pkg/path/path_self.c	23 Aug 2002 15:33:18 -0000	1.1
  +++ ossp-pkg/path/path_self.c	26 Aug 2002 18:40:33 -0000	1.2
  @@ -80,6 +80,18 @@
           return PATH_OK;
       }
   
  +    /* else search for /proc entries (at least possible under Linux and FreeBSD) */
  +    if ((l = readlink("/proc/self/exe", res_buf, res_size-1)) == -1)
  +        l = readlink("/proc/curproc/file", res_buf, res_size-1);
  +    if (l > 0) {
  +        if (res_buf[l-1] == '\0')
  +           l--;
  +        res_buf[l] = '\0';
  +        if (strcmp(res_buf, "unknown") != 0)
  +            if (path_resolve(res_buf, res_size, res_buf) == NULL)
  +                return PATH_ERR_SYS;
  +    }
  +
       /* else search argv[0] in $PATH */
       if ((path = getenv("PATH")) == NULL)
           path = PATH_DEFAULT;

From ossp-cvs-owner@ossp.org  Tue Aug 27 21:04:34 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3EB09769AF; Tue, 27 Aug 2002 21:04:34 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/path Makefile.in path.h path_canon.c path_test.c ...
Message-Id: <20020827190434.3EB09769AF@mail.ossp.org>
Date: Tue, 27 Aug 2002 21:04:34 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   27-Aug-2002 21:04:34
  Branch: HEAD                             Handle: 2002082720043300

  Added files:
    ossp-pkg/path           path_canon.c
  Modified files:
    ossp-pkg/path           Makefile.in path.h path_test.c path_test.pl

  Log:
    add path_canon() function for non-physical-fs-based canonifcations of a path

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-pkg/path/Makefile.in
    1.5         +1  -0      ossp-pkg/path/path.h
    1.1         +144 -0     ossp-pkg/path/path_canon.c
    1.4         +6  -0      ossp-pkg/path/path_test.c
    1.2         +63 -42     ossp-pkg/path/path_test.pl
  ____________________________________________________________________________

  Index: ossp-pkg/path/Makefile.in
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 Makefile.in
  --- ossp-pkg/path/Makefile.in	23 Aug 2002 15:33:18 -0000	1.4
  +++ ossp-pkg/path/Makefile.in	27 Aug 2002 19:04:33 -0000	1.5
  @@ -50,7 +50,7 @@
   TRUE        = true
   
   LIB_NAME    = libpath.la
  -LIB_OBJS    = path_abs2rel.lo path_rel2abs.lo path_resolve.lo \
  +LIB_OBJS    = path_abs2rel.lo path_rel2abs.lo path_resolve.lo path_canon.lo \
                 path_dirname.lo path_basename.lo path_temp.lo path_self.lo path_util.lo
   
   TST_NAME    = path_test
  Index: ossp-pkg/path/path.h
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 path.h
  --- ossp-pkg/path/path.h	23 Aug 2002 15:33:18 -0000	1.4
  +++ ossp-pkg/path/path.h	27 Aug 2002 19:04:33 -0000	1.5
  @@ -52,6 +52,7 @@
   char *path_resolve  (char *, size_t, const char *);
   char *path_dirname  (char *, size_t, const char *);
   char *path_basename (char *, size_t, const char *);
  +path_rc_t path_canon(char *res_buf, size_t res_len, const char *path_buf, size_t path_len);
   path_rc_t path_temp(path_temp_t id, const char *tmpl, char **res_ptr, size_t *res_size, int *res_fd);
   path_rc_t path_self (char *res_buf, size_t res_size, const char *argv0);
   
  Index: ossp-pkg/path/path_canon.c
  ============================================================
  $ cvs update -p -r1.1 path_canon.c
  /*
  **  OSSP path - Filesystem Path Manipulation
  **  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP path, a filesystem path manipulation library
  **  which can be found at http://www.ossp.org/pkg/lib/path/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  src_canon.c: pathname canonification
  */
  
  #include <stdio.h>
  #include <string.h>
  
  #include "path.h"
  
  path_rc_t 
  path_canon(
      char       *res_buf, size_t res_len,
      const char *src_buf, size_t src_len)
  {
      char *res_ptr;
      char *res_end;
      const char *src_ptr;
      const char *src_end;
      size_t l;
  
      /* argument sanity checking */
      if (src_buf == NULL)
          return PATH_ERR_ARG;
  
      /* argument default provision */
      if (src_len == 0)
          src_len = strlen(src_buf);
      if (res_buf == NULL) {
          res_buf = (char *)src_buf;
          if (res_len == 0)
              res_len = src_len;
      }
      if (res_len == 0)
          res_len = strlen(res_buf);
  
      /* perform processing 
         (keep in mind that source and target can overlap) */
      res_ptr = res_buf;
      res_end = res_buf+res_len;
      src_ptr = src_buf;
      src_end = src_buf+src_len;
      
      while (src_ptr < src_end && res_ptr < res_end) {
          /* recognize path separator */
          if (*src_ptr == '/') {
              /* take over separator character once */
              *res_ptr++ = *src_ptr++;
              /* skip multiple separator characters */
              while (src_ptr < src_end && *src_ptr == '/')
                  src_ptr++;
              continue;
          }
  
          /* determine length of path element */
          l = 0;
          while (src_ptr+l < src_end && src_ptr[l] != '/')
              l++;
          if (l == 0)
              break;
  
          /* handle path element */
          if (l == 1 && src_ptr[0] == '.') {
              /* path element is current directory ("."),
                 so just skip over to next path element in source */
              src_ptr += 1;
              while (src_ptr < src_end && *src_ptr == '/')
                  src_ptr++;
          }
          else if (l == 2 && src_ptr[0] == '.' && src_ptr[1] == '.') {
              /* path element is parent directory (".."),
                 so skip over to next path element in source and
                 skip back last path element in result */
              if (   res_ptr == res_buf 
                  || (   res_ptr >= res_buf+3 
                      && res_ptr[-1] == '/' && res_ptr[-2] == '.' && res_ptr[-3] == '.')) {
                  /* path is relative and empty or already explicit directing
                     to the parent directory, so keep explicit parent specification */
                  while (src_ptr < src_end && res_ptr < res_end && src_ptr[0] != '/')
                      *res_ptr++ = *src_ptr++;
              }
              else {
                  /* there is already a path element in the 
                     result which can be removed */
                  src_ptr += 2;
                  while (res_ptr > res_buf && res_ptr[-1] == '/')
                      res_ptr--;
                  while (res_ptr > res_buf && res_ptr[-1] != '/')
                      res_ptr--;
                  if (res_ptr == res_buf && res_ptr[0] == '/')
                      res_ptr++;
                  while (src_ptr < src_end && src_ptr[0] == '/')
                      src_ptr++;
              }
          }
          else {
              /* path element something else, so copy 
                 it over from source to the result */
              while (src_ptr < src_end && res_ptr < res_end && src_ptr[0] != '/')
                  *res_ptr++ = *src_ptr++;
          }
      }
  
      /* remove tailing path separators */
      if (res_ptr > res_buf+1 && res_ptr[-1] == '/')
          res_ptr--;
  
      /* make sure we do not reduce to an empty (invalid) path */
      if (res_ptr == res_buf && res_ptr < res_end)
          *res_ptr++ = '.';
  
      /* append NUL terminating character */
      if (res_ptr >= res_end)
          return PATH_ERR_MEM;
      *res_ptr++ = '\0';
  
      return PATH_OK;
  }
  
  Index: ossp-pkg/path/path_test.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 path_test.c
  --- ossp-pkg/path/path_test.c	23 Aug 2002 15:33:18 -0000	1.3
  +++ ossp-pkg/path/path_test.c	27 Aug 2002 19:04:33 -0000	1.4
  @@ -95,6 +95,12 @@
           else
               printf("ERROR\n");
       }
  +    else if (argc == 3 && strcmp(argv[1], "canon") == 0) {
  +        if (path_canon(res, sizeof(res), argv[2], 0) == PATH_OK)
  +            printf("%s\n", res);
  +        else
  +            printf("ERROR\n");
  +    }
       else if (argc == 3 && strcmp(argv[1], "dirname") == 0) {
           rv = path_dirname(res, sizeof(res), argv[2]);
           if (rv != NULL)
  Index: ossp-pkg/path/path_test.pl
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 path_test.pl
  --- ossp-pkg/path/path_test.pl	21 Jan 2002 13:32:35 -0000	1.1.1.1
  +++ ossp-pkg/path/path_test.pl	27 Aug 2002 19:04:33 -0000	1.2
  @@ -1,52 +1,63 @@
   
   @abs2rel = (
  -        'a/b/c          /               a/b/c',
  -        'a/b/c          /a              a/b/c',
  -        '/a/b/c         a               ERROR',
  +    'a/b/c          /               a/b/c',
  +    'a/b/c          /a              a/b/c',
  +    '/a/b/c         a               ERROR',
   );
   
   @rel2abs = (
  -        '/a/b/c         /               /a/b/c',
  -        '/a/b/c         /a              /a/b/c',
  -        'a/b/c          a               ERROR',
  -        '..             /a              /',
  -        '../            /a              /',
  -        '../..          /a              /',
  -        '../../         /a              /',
  -        '../../..       /a              /',
  -        '../../../      /a              /',
  -        '../b           /a              /b',
  -        '../b/          /a              /b/',
  -        '../../b        /a              /b',
  -        '../../b/       /a              /b/',
  -        '../../../b     /a              /b',
  -        '../../../b/    /a              /b/',
  -        '../b/c         /a              /b/c',
  -        '../b/c/        /a              /b/c/',
  -        '../../b/c      /a              /b/c',
  -        '../../b/c/     /a              /b/c/',
  -        '../../../b/c   /a              /b/c',
  -        '../../../b/c/  /a              /b/c/',
  +    '/a/b/c         /               /a/b/c',
  +    '/a/b/c         /a              /a/b/c',
  +    'a/b/c          a               ERROR',
  +    '..             /a              /',
  +    '../            /a              /',
  +    '../..          /a              /',
  +    '../../         /a              /',
  +    '../../..       /a              /',
  +    '../../../      /a              /',
  +    '../b           /a              /b',
  +    '../b/          /a              /b/',
  +    '../../b        /a              /b',
  +    '../../b/       /a              /b/',
  +    '../../../b     /a              /b',
  +    '../../../b/    /a              /b/',
  +    '../b/c         /a              /b/c',
  +    '../b/c/        /a              /b/c/',
  +    '../../b/c      /a              /b/c',
  +    '../../b/c/     /a              /b/c/',
  +    '../../../b/c   /a              /b/c',
  +    '../../../b/c/  /a              /b/c/',
   );
   
   @common = (
  -        '/a/b/c         /a/b/c          .',
  -        '/a/b/c         /a/b/           c',
  -        '/a/b/c         /a/b            c',
  -        '/a/b/c         /a/             b/c',
  -        '/a/b/c         /a              b/c',
  -        '/a/b/c         /               a/b/c',
  -        '/a/b/c         /a/b/c          .',
  -        '/a/b/c         /a/b/c/         .',
  -        '/a/b/c/        /a/b/c          ./',
  -        '/a/b/          /a/b/c          ../',
  -        '/a/b           /a/b/c          ..',
  -        '/a/            /a/b/c          ../../',
  -        '/a             /a/b/c          ../..',
  -        '/              /a/b/c          ../../../',
  -        '/a/b/c         /a/b/z          ../c',
  -        '/a/b/c         /a/y/z          ../../b/c',
  -        '/a/b/c         /x/y/z          ../../../a/b/c',
  +    '/a/b/c         /a/b/c          .',
  +    '/a/b/c         /a/b/           c',
  +    '/a/b/c         /a/b            c',
  +    '/a/b/c         /a/             b/c',
  +    '/a/b/c         /a              b/c',
  +    '/a/b/c         /               a/b/c',
  +    '/a/b/c         /a/b/c          .',
  +    '/a/b/c         /a/b/c/         .',
  +    '/a/b/c/        /a/b/c          ./',
  +    '/a/b/          /a/b/c          ../',
  +    '/a/b           /a/b/c          ..',
  +    '/a/            /a/b/c          ../../',
  +    '/a             /a/b/c          ../..',
  +    '/              /a/b/c          ../../../',
  +    '/a/b/c         /a/b/z          ../c',
  +    '/a/b/c         /a/y/z          ../../b/c',
  +    '/a/b/c         /x/y/z          ../../../a/b/c',
  +);
  +
  +@canon = (
  +    'a              a',
  +    'a/             a',
  +    'a/b            a/b',
  +    'a////b         a/b',
  +    '.              .',
  +    'a/..           .',
  +    'a/../../..     ../..',
  +    '/a/../../../b  /b',
   );
   
   $cnt = 0;
  @@ -90,8 +101,18 @@
       if ($d[0] eq $result) {
           print STDERR "OK: rel2abs: $d[0] $d[1] -> $result\n";
       } else {
  -        print 'X';
           print STDERR "ERROR: rel2abs: $d[0] $d[1] -> $result (It should be '$d[2]')\n";
  +        $cnt++;
  +    }
  +}
  +
  +foreach (@canon) {
  +    @d = split;
  +    chop($result = `./$progname canon $d[0]`);
  +    if ($d[1] eq $result) {
  +        print STDERR "OK: canon: $d[0] -> $result\n";
  +    } else {
  +        print STDERR "ERROR: canon: $d[0] -> $result (It should be '$d[1]')\n";
           $cnt++;
       }
   }

From ossp-cvs-owner@ossp.org  Wed Aug 28 23:47:11 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1030E769BF; Wed, 28 Aug 2002 23:47:11 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc README
Message-Id: <20020828214711.1030E769BF@mail.ossp.org>
Date: Wed, 28 Aug 2002 23:47:11 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   28-Aug-2002 23:47:10
  Branch: HEAD                             Handle: 2002082822471000

  Modified files:
    ossp-pkg/rc             README

  Log:
    Testing CVS ossp repository SSH forwarding.

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-pkg/rc/README
  ____________________________________________________________________________

  Index: ossp-pkg/rc/README
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 README
  --- ossp-pkg/rc/README	26 Mar 2002 17:11:06 -0000	1.4
  +++ ossp-pkg/rc/README	28 Aug 2002 21:47:10 -0000	1.5
  @@ -8,7 +8,7 @@
   
     ABSTRACT
   
  -  The OSSP Run-command processor is a Duc.
  +  The OSSP Run-command processor is a Duck.
   
     COPYRIGHT AND LICENSE
   

From ossp-cvs-owner@ossp.org  Wed Sep  4 11:58:43 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F3C90764FF; Wed,  4 Sep 2002 11:58:42 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool THANKS sh.guessos
Message-Id: <20020904095842.F3C90764FF@mail.ossp.org>
Date: Wed,  4 Sep 2002 11:58:42 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   04-Sep-2002 11:58:42
  Branch: HEAD                             Handle: 2002090410584200

  Modified files:
    ossp-pkg/shtool         THANKS sh.guessos

  Log:
    Please review. Added support for guessing the Darwin OS.

  Summary:
    Revision    Changes     Path
    1.23        +1  -0      ossp-pkg/shtool/THANKS
    1.22        +4  -0      ossp-pkg/shtool/sh.guessos
  ____________________________________________________________________________

  Index: ossp-pkg/shtool/THANKS
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 THANKS
  --- ossp-pkg/shtool/THANKS	11 Jul 2002 17:23:24 -0000	1.22
  +++ ossp-pkg/shtool/THANKS	4 Sep 2002 09:58:42 -0000	1.23
  @@ -29,6 +29,7 @@
     o Peter Simons             <simons@cys.de>
     o Evgeny Stambulchik       <fnevgeny@plasma-gate.weizmann.ac.il>
     o Gopal Narayanan          <gopal@fcrao1.phast.umass.edu>
  +  o Miles Egan               <miles@pixar.com>
   
     ...and all other shtool users who gave me feedback but I've forgot.
   
  Index: ossp-pkg/shtool/sh.guessos
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 sh.guessos
  --- ossp-pkg/shtool/sh.guessos	23 Sep 2001 10:58:10 -0000	1.21
  +++ ossp-pkg/shtool/sh.guessos	4 Sep 2002 09:58:42 -0000	1.22
  @@ -210,6 +210,10 @@
          esac
          echo "${MACHINE}-apple-rhapsody${RELEASE}"; exit 0
          ;;
  +    Darwin:*:*:*)
  +       MACHINE=`uname -p`
  +       echo "${MACHINE}-apple-darwin${RELEASE}"; exit 0
  +       ;;
       "Mac OS":*:*:*)
          MACHINE=`uname -p`
          echo "${MACHINE}-apple-macos${RELEASE}"; exit 0

From ossp-cvs-owner@ossp.org  Wed Sep  4 14:11:18 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0578F764FD; Wed,  4 Sep 2002 14:11:17 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog
Message-Id: <20020904121117.0578F764FD@mail.ossp.org>
Date: Wed,  4 Sep 2002 14:11:17 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Sep-2002 14:11:17
  Branch: HEAD                             Handle: 2002090413111700

  Modified files:
    ossp-pkg/pth            ChangeLog

  Log:
    add header

  Summary:
    Revision    Changes     Path
    1.563       +2  -0      ossp-pkg/pth/ChangeLog
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.562 -r1.563 ChangeLog
  --- ossp-pkg/pth/ChangeLog	1 Jul 2002 12:54:54 -0000	1.562
  +++ ossp-pkg/pth/ChangeLog	4 Sep 2002 12:11:17 -0000	1.563
  @@ -19,6 +19,8 @@
       | |_ ___) |
     __|_(_)____/____________________________________________________________
   
  +  Changes between 1.4.1 and 1.5.0 (27-Jan-2002 to xx-Sep-2002)
  +
      *) Upgraded to Autoconf 2.53 environment and cleaned up internal
         Autoconf macro usage.
         [Ralf S. Engelschall]

From ossp-cvs-owner@ossp.org  Wed Sep  4 16:51:57 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BBB91764FF; Wed,  4 Sep 2002 16:51:56 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth configure.ac
Message-Id: <20020904145156.BBB91764FF@mail.ossp.org>
Date: Wed,  4 Sep 2002 16:51:56 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Sep-2002 16:51:56
  Branch: HEAD                             Handle: 2002090415515600

  Modified files:
    ossp-pkg/pth            configure.ac

  Log:
    flush pending AIX change

  Summary:
    Revision    Changes     Path
    1.4         +4  -0      ossp-pkg/pth/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/pth/configure.ac
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 configure.ac
  --- ossp-pkg/pth/configure.ac	1 Jul 2002 12:54:54 -0000	1.3
  +++ ossp-pkg/pth/configure.ac	4 Sep 2002 14:51:56 -0000	1.4
  @@ -118,6 +118,10 @@
           CPPFLAGS="$CPPFLAGS -D_POSIX_SOURCE";
           LIBS="$LIBS -lcposix -linet";
           ;;
  +    *-*-aix4.1*:cc )
  +        #   AIX 4.1.x' cc complains about our use of "volatile"
  +        CPPFLAGS="$CPPFLAGS '-Dvolatile=/**/'";
  +        ;;
   esac
   
   dnl ##

From ossp-cvs-owner@ossp.org  Thu Sep  5 09:27:38 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 30A44764FF; Thu,  5 Sep 2002 09:27:38 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa Makefile.in
Message-Id: <20020905072738.30A44764FF@mail.ossp.org>
Date: Thu,  5 Sep 2002 09:27:38 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Sep-2002 09:27:38
  Branch: HEAD                             Handle: 2002090508273700

  Modified files:
    ossp-pkg/sa             Makefile.in

  Log:
    fix name

  Summary:
    Revision    Changes     Path
    1.13        +2  -2      ossp-pkg/sa/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/sa/Makefile.in
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 Makefile.in
  --- ossp-pkg/sa/Makefile.in	31 Jan 2002 21:35:13 -0000	1.12
  +++ ossp-pkg/sa/Makefile.in	5 Sep 2002 07:27:37 -0000	1.13
  @@ -5,7 +5,7 @@
   ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP SA, a socket abstraction library which
  -##  can be found at http://www.ossp.org/pkg/sa/.
  +##  can be found at http://www.ossp.org/pkg/lib/sa/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  @@ -122,7 +122,7 @@
   	-$(RM) libtool
   
   realclean: distclean
  -	-$(RM) ex.3
  +	-$(RM) sa.3
   	-$(RM) configure config.h.in
   	-$(RM) shtool
   	-$(RM) ltmain.sh libtool.m4 config.guess config.sub

From ossp-cvs-owner@ossp.org  Sat Sep  7 21:58:56 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7588576505; Sat,  7 Sep 2002 21:58:56 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pcre Makefile.in
Message-Id: <20020907195856.7588576505@mail.ossp.org>
Date: Sat,  7 Sep 2002 21:58:56 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Sep-2002 21:58:56
  Branch: HEAD                             Handle: 2002090720585500

  Modified files:
    ossp-pkg/pcre           Makefile.in

  Log:
    do not build non-library parts with libtool

  Summary:
    Revision    Changes     Path
    1.8         +7  -7      ossp-pkg/pcre/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/pcre/Makefile.in
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 Makefile.in
  --- ossp-pkg/pcre/Makefile.in	7 Jan 2002 15:21:06 -0000	1.7
  +++ ossp-pkg/pcre/Makefile.in	7 Sep 2002 19:58:55 -0000	1.8
  @@ -28,7 +28,7 @@
   .SUFFIXES: .c .o .lo
   
   .c.o:
  -	$(LIBTOOL) --quiet --mode=compile $(CC) -c $(CFLAGS) $<
  +	$(CC) -c $(CFLAGS) $<
   .c.lo:
   	$(LIBTOOL) --quiet --mode=compile $(CC) -c $(CFLAGS) $<
   
  @@ -40,8 +40,8 @@
   	$(LIBTOOL) --quiet --mode=link $(CC) -o libpcreposix.la \
   	           pcreposix.lo -rpath $(libdir)
   
  -pcre_dftables: pcre_dftables.lo
  -	$(LIBTOOL) --quiet $(CC) $(LDFLAGS) -o pcre_dftables pcre_dftables.lo
  +pcre_dftables: pcre_dftables.o
  +	$(CC) $(LDFLAGS) -o pcre_dftables pcre_dftables.o
   
   pcre_chartables.c: pcre_dftables
   	./pcre_dftables >pcre_chartables.c
  @@ -53,11 +53,11 @@
   pcre_study.lo: pcre_study.c pcre.h pcre_internal.h
   pcre_match.lo: pcre_match.c pcre.h pcre_internal.h
   
  -pcre_test: pcre_test.lo libpcre.la libpcreposix.la
  -	$(LIBTOOL) --quiet --mode=link $(CC) $(LDFLAGS) -o pcre_test pcre_test.lo libpcre.la libpcreposix.la
  +pcre_test: pcre_test.o libpcre.la libpcreposix.la
  +	$(LIBTOOL) --quiet --mode=link $(CC) $(LDFLAGS) -o pcre_test pcre_test.o libpcre.la libpcreposix.la
   
  -pcregrep: pcregrep.lo libpcre.la
  -	$(LIBTOOL) --quiet --mode=link $(CC) $(LDFLAGS) -o pcregrep pcregrep.lo libpcre.la
  +pcregrep: pcregrep.o libpcre.la
  +	$(LIBTOOL) --quiet --mode=link $(CC) $(LDFLAGS) -o pcregrep pcregrep.o libpcre.la
   
   check: test
   test: all pcre_test

From ossp-cvs-owner@ossp.org  Sat Sep  7 22:12:25 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6410A764FD; Sat,  7 Sep 2002 22:12:25 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl ChangeLog
Message-Id: <20020907201225.6410A764FD@mail.ossp.org>
Date: Sat,  7 Sep 2002 22:12:25 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Sep-2002 22:12:25
  Branch: HEAD                             Handle: 2002090721122400

  Modified files:
    ossp-pkg/fsl            ChangeLog

  Log:
    Fixed build procedure in PCRE part in order to get rid
    of an accidentally included main() definition in libfsl.a

  Summary:
    Revision    Changes     Path
    1.11        +6  -0      ossp-pkg/fsl/ChangeLog
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/ChangeLog
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 ChangeLog
  --- ossp-pkg/fsl/ChangeLog	14 Aug 2002 07:53:24 -0000	1.10
  +++ ossp-pkg/fsl/ChangeLog	7 Sep 2002 20:12:24 -0000	1.11
  @@ -8,6 +8,12 @@
   
     CHANGELOG
   
  +  Changes between 1.0.2 and 1.0.3 (14-Aug-2002 to 07-Sep-2002)
  +
  +    *) Fixed build procedure in PCRE part in order to get rid
  +       of an accidentally included main() definition in libfsl.a
  +       [Ralf S. Engelschall <rse@engelschall.com>]
  +
     Changes between 1.0.1 and 1.0.2 (02-Aug-2002 to 14-Aug-2002)
   
       *) Various source tree cleanups, polishing, version support and

From ossp-cvs-owner@ossp.org  Sat Sep  7 22:12:50 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 01F0876519; Sat,  7 Sep 2002 22:12:49 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl README fsl_version.c
Message-Id: <20020907201249.01F0876519@mail.ossp.org>
Date: Sat,  7 Sep 2002 22:12:49 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Sep-2002 22:12:49
  Branch: HEAD                             Handle: 2002090721124900

  Modified files:
    ossp-pkg/fsl            README fsl_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.23        +1  -1      ossp-pkg/fsl/README
    1.8         +9  -9      ossp-pkg/fsl/fsl_version.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/README
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 README
  --- ossp-pkg/fsl/README	14 Aug 2002 07:53:24 -0000	1.22
  +++ ossp-pkg/fsl/README	7 Sep 2002 20:12:49 -0000	1.23
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_| |___/_|
    
     OSSP fsl - Faking/Flexible Syslog Library
  -  Version 1.0.2 (14-Aug-2002)
  +  Version 1.0.3 (07-Sep-2002)
   
     ABSTRACT
   
  Index: ossp-pkg/fsl/fsl_version.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 fsl_version.c
  --- ossp-pkg/fsl/fsl_version.c	14 Aug 2002 07:53:24 -0000	1.7
  +++ ossp-pkg/fsl/fsl_version.c	7 Sep 2002 20:12:49 -0000	1.8
  @@ -8,7 +8,7 @@
   #ifndef _FSL_VERSION_C_
   #define _FSL_VERSION_C_
   
  -#define FSL_VERSION 0x100202
  +#define FSL_VERSION 0x100203
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _FSL_VERSION_C_AS_HEADER_
   
   fsl_version_t fsl_version = {
  -    0x100202,
  -    "1.0.2",
  -    "1.0.2 (14-Aug-2002)",
  -    "This is OSSP fsl, Version 1.0.2 (14-Aug-2002)",
  -    "OSSP fsl 1.0.2 (14-Aug-2002)",
  -    "OSSP fsl/1.0.2",
  -    "@(#)OSSP fsl 1.0.2 (14-Aug-2002)",
  -    "$Id: fsl_version.c,v 1.7 2002/08/14 07:53:24 thl Exp $"
  +    0x100203,
  +    "1.0.3",
  +    "1.0.3 (07-Sep-2002)",
  +    "This is OSSP fsl, Version 1.0.3 (07-Sep-2002)",
  +    "OSSP fsl 1.0.3 (07-Sep-2002)",
  +    "OSSP fsl/1.0.3",
  +    "@(#)OSSP fsl 1.0.3 (07-Sep-2002)",
  +    "$Id: fsl_version.c,v 1.8 2002/09/07 20:12:49 rse Exp $"
   };
   
   #endif /* _FSL_VERSION_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Sat Sep  7 22:32:51 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DC493764FD; Sat,  7 Sep 2002 22:32:50 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new news.txt ossp-web/pkg/lib/fsl index.wml ossp-...
Message-Id: <20020907203250.DC493764FD@mail.ossp.org>
Date: Sat,  7 Sep 2002 22:32:50 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   07-Sep-2002 22:32:50
  Branch: HEAD                             Handle: 2002090721324901

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/fsl    index.wml

  Log:
    release OSSP fsl 1.0.3

  Summary:
    Revision    Changes     Path
    1.24        +1  -0      ossp-web/new/news.txt
    1.11        +2  -2      ossp-web/pkg/lib/fsl/index.wml
    1.28        +1  -1      ossp-web/pkg/lib/index.wml
  ____________________________________________________________________________

  Index: ossp-web/new/news.txt
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 news.txt
  --- ossp-web/new/news.txt	19 Aug 2002 19:15:03 -0000	1.23
  +++ ossp-web/new/news.txt	7 Sep 2002 20:32:49 -0000	1.24
  @@ -1,3 +1,4 @@
  +07-Sep-2002: Released L<OSSP fsl> 1.0.3
   19-Aug-2002: Released T<OSSP shiela> 0.9.2
   14-Aug-2002: Released T<OSSP lmtp2nntp> 1.2a6
   14-Aug-2002: Released L<OSSP fsl> 1.0.2
  Index: ossp-web/pkg/lib/fsl/index.wml
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 index.wml
  --- ossp-web/pkg/lib/fsl/index.wml	14 Aug 2002 22:12:05 -0000	1.10
  +++ ossp-web/pkg/lib/fsl/index.wml	7 Sep 2002 20:32:50 -0000	1.11
  @@ -39,7 +39,7 @@
   
   <pkg_status
       genesis="Jul-2002"
  -    stable="1.0.2"   stable_date="14-Aug-2002"
  +    stable="1.0.3"   stable_date="07-Sep-2002"
       unstable="none"  unstable_date="none"
   	done=100>
   
  @@ -50,7 +50,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/fsl/
       directory=$(FTP_ROOT_DIR)/pkg/lib/fsl/
       files="fsl-*.tar.gz" 
  -	stable="fsl-1.0.2.tar.gz" unstable="none">
  +	stable="fsl-1.0.3.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  Index: ossp-web/pkg/lib/index.wml
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 index.wml
  --- ossp-web/pkg/lib/index.wml	16 Aug 2002 09:26:48 -0000	1.27
  +++ ossp-web/pkg/lib/index.wml	7 Sep 2002 20:32:49 -0000	1.28
  @@ -84,6 +84,6 @@
   			done=15 stable=none unstable=none>
     <pkg_item name="fsl" longname="OSSP fsl" type="lib"
               desc="Faked/Flexible Syslog"
  -			done=100 stable=1.0.2 unstable=none>
  +			done=100 stable=1.0.3 unstable=none>
   </pkg_list>
   

From ossp-cvs-owner@ossp.org  Mon Sep  9 18:51:09 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9152C76524; Mon,  9 Sep 2002 18:51:09 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/com sponsors.wml
Message-Id: <20020909165109.9152C76524@mail.ossp.org>
Date: Mon,  9 Sep 2002 18:51:09 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   09-Sep-2002 18:51:09
  Branch: HEAD                             Handle: 2002090917510900

  Modified files:
    ossp-web/com            sponsors.wml

  Log:
    equal or more; and add Albert Lash

  Summary:
    Revision    Changes     Path
    1.5         +4  -4      ossp-web/com/sponsors.wml
  ____________________________________________________________________________

  Index: ossp-web/com/sponsors.wml
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 sponsors.wml
  --- ossp-web/com/sponsors.wml	19 Aug 2002 11:32:23 -0000	1.4
  +++ ossp-web/com/sponsors.wml	9 Sep 2002 16:51:09 -0000	1.5
  @@ -20,7 +20,7 @@
   <h2>Gold Sponsors</h2>
   
   Each of following individuals and companies donated (in total) money and/or
  -resources worth more than USD $5000.
  +resources worth USD $5000 and more.
   
   <ul>
     <li><a href="http://www.cw.com/"><img src="$(IMG)/cw.png" alt="Cable & Wireless" align=right border=0></a>
  @@ -31,7 +31,7 @@
   <h2>Silver Sponsors</h2>
   
   Each of following individuals and companies donated (in total) money and/or
  -resources worth more than USD $500.
  +resources worth USD $500 and more.
   
   <ul>
     <li><a href="http://www.engelschall.com/"><b>Ralf S. Engelschall</b></a> (1998-2002)<br>
  @@ -43,9 +43,9 @@
   <h2>Bronze Sponsors</h2>
   
   Each of following individuals and companies donated (in total) money and/or
  -resources worth more than USD $50.
  +resources worth USD $50 and more.
   
   <ul>
  -   <li>--
  +   <li><a href="mailto:alby@thirteen.net"><b>Albert Lash</b></a> (2002)
   </ul>
   

From ossp-cvs-owner@ossp.org  Thu Sep 12 11:02:06 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 21A0D7651D; Thu, 12 Sep 2002 11:02:05 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth HACKING README
Message-Id: <20020912090205.21A0D7651D@mail.ossp.org>
Date: Thu, 12 Sep 2002 11:02:05 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Sep-2002 11:02:05
  Branch: HEAD                             Handle: 2002091210020400

  Modified files:
    ossp-pkg/pth            HACKING README

  Log:
    update references to OSSP

  Summary:
    Revision    Changes     Path
    1.14        +6  -8      ossp-pkg/pth/HACKING
    1.196       +5  -2      ossp-pkg/pth/README
  ____________________________________________________________________________

  Index: ossp-pkg/pth/HACKING
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 HACKING
  --- ossp-pkg/pth/HACKING	30 Jan 2002 12:54:21 -0000	1.13
  +++ ossp-pkg/pth/HACKING	12 Sep 2002 09:02:04 -0000	1.14
  @@ -13,22 +13,20 @@
     ---------------------------
   
     Those who want to be always at the bleeding edge or even want to
  -  hack on the Pth sources can fetch the latest Pth source tree via
  -  Anonymous-CVS from a copy of the master source repository. This
  -  copy is updated in regular intervals from the authors original CVS
  -  repository and can be used for easily keeping local modifications in a
  -  checked out tree while the master version is updated over time.
  +  hack on the Pth sources can browse the latest Pth source tree on
  +  http://cvs.ossp.org/pkg/lib/pth/ or retrieve these sources via
  +  Anonymous-CVS from the OSSP master repository.
   
     For this you need CVS 1.10 or later. If you still don't have CVS installed,
     grab it from http://www.cvshome.org/ and install it first. Then you can
     check out the Pth source tree via the following steps:
   
  -    | $ CVSROOT=:pserver:anoncvs@cvs.engelschall.com:/e/cvs
  +    | $ CVSROOT=:pserver:anonymous@cvs.ossp.org:/e/ossp/cvs
       | $ export CVSROOT
       | $ cvs login
  -    | (Logging in to anoncvs@cvs.engelschall.com)
  +    | (Logging in to anonymous@cvs.ossp.org)
       | CVS password:
  -      [use `anoncvs' for the password]
  +      [use an empty password by just pressing RETURN]
       | $ cvs -z3 checkout pth
       | cvs server: Updating pth
       | U pth/.configure
  Index: ossp-pkg/pth/README
  ============================================================
  $ cvs diff -u -r1.195 -r1.196 README
  --- ossp-pkg/pth/README	27 Jan 2002 16:14:01 -0000	1.195
  +++ ossp-pkg/pth/README	12 Sep 2002 09:02:04 -0000	1.196
  @@ -76,8 +76,11 @@
   
     The documentation and latest release can be found on
   
  -  http://www.gnu.org/software/pth/
  -  ftp://ftp.gnu.org/gnu/pth/
  +  o OSSP: http://www.ossp.org/pkg/lib/pth/
  +  o OSSP:  ftp://ftp.ossp.org/pkg/lib/pth/
  +  o GNU:  http://www.gnu.org/software/pth/
  +  o GNU:   ftp://ftp.gnu.org/gnu/pth/
  +
                                          Ralf S. Engelschall
                                          rse@engelschall.com
                                          www.engelschall.com

From ossp-cvs-owner@ossp.org  Fri Sep 20 20:16:42 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 184BF7648E; Fri, 20 Sep 2002 20:16:42 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/popt VERSION popt.c popt.h
Message-Id: <20020920181642.184BF7648E@mail.ossp.org>
Date: Fri, 20 Sep 2002 20:16:42 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Sep-2002 20:16:41
  Branch: HEAD                             Handle: 2002092019164100

  Modified files:
    ossp-pkg/popt           VERSION popt.c popt.h

  Log:
    upgrade to POPT 1.7

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/popt/VERSION
    1.3         +233 -44    ossp-pkg/popt/popt.c
    1.3         +16 -4      ossp-pkg/popt/popt.h
  ____________________________________________________________________________

  Index: ossp-pkg/popt/VERSION
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 VERSION
  --- ossp-pkg/popt/VERSION	30 Jan 2002 14:05:32 -0000	1.1
  +++ ossp-pkg/popt/VERSION	20 Sep 2002 18:16:41 -0000	1.2
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP popt (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP popt, Version 0.1.0 (27-Jan-2002)
  +  This is OSSP popt, Version 1.7.0 (20-Sep-2002)
   
  Index: ossp-pkg/popt/popt.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 popt.c
  --- ossp-pkg/popt/popt.c	15 Mar 2002 08:49:48 -0000	1.2
  +++ ossp-pkg/popt/popt.c	20 Sep 2002 18:16:41 -0000	1.3
  @@ -25,7 +25,7 @@
    *
    *  NOTICE:
    *  This is an automatically generated, stripped down version of the
  - *  POPT 1.6.4 library from Red Hat, Inc. This version is still
  + *  POPT 1.7 library from Red Hat, Inc. This version is still
    *  distributed under above Open Source license, but Red Hat is no longer
    *  responsible for this version. Contact The OSSP Project instead.
    */
  @@ -34,7 +34,16 @@
   #include "config.h"
   #endif
   
  +#if defined (__GLIBC__) && defined(__LCLINT__)
  +
  +extern __const __int32_t *__ctype_tolower;
  +
  +extern __const __int32_t *__ctype_toupper;
  +
  +#endif
  +
   #include <ctype.h>
  +
   #include <errno.h>
   #include <fcntl.h>
   #include <limits.h>
  @@ -61,6 +70,8 @@
   #define alloca __builtin_alloca
   #endif
   
  +char *strdup(const char *str);
  +
   #include "popt.h"
   
   #ifndef H_POPTINT
  @@ -74,12 +85,15 @@
   }
   
   typedef unsigned int __pbm_bits;
  +
   #define	__PBM_NBITS		(8 * sizeof (__pbm_bits))
   #define	__PBM_IX(d)		((d) / __PBM_NBITS)
   #define __PBM_MASK(d)		((__pbm_bits) 1 << (((unsigned)(d)) % __PBM_NBITS))
  +
   typedef struct {
   	__pbm_bits bits[1];
   } pbm_set;
  +
   #define	__PBM_BITS(set)	((set)->bits)
   
   #define	PBM_ALLOC(d)	calloc(__PBM_IX (d) + 1, sizeof(__pbm_bits))
  @@ -90,36 +104,52 @@
   
   struct optionStackEntry {
   	int argc;
  +
   	const char **argv;
  +
   	pbm_set *argb;
   	int next;
  +
   	const char *nextArg;
  +
   	const char *nextCharArg;
  +
   	popt_item currAlias;
   	int stuffed;
   };
   
   struct popt_context_s {
   	struct optionStackEntry optionStack[POPT_OPTION_DEPTH];
  +
   	struct optionStackEntry *os;
  +
   	const char **leftovers;
   	int numLeftovers;
   	int nextLeftover;
  +
   	const struct popt_option *options;
   	int restLeftover;
  +
   	const char *appName;
  +
   	popt_item aliases;
   	int numAliases;
   	int flags;
  +
   	popt_item execs;
   	int numExecs;
  +
   	const char **finalArgv;
   	int finalArgvCount;
   	int finalArgvAlloced;
  +
   	popt_item doExec;
  +
   	const char *execPath;
   	int execAbsolute;
  +
   	const char *otherHelp;
  +
   	pbm_set *arg_strip;
   };
   
  @@ -133,7 +163,7 @@
   #define _(foo) foo
   #endif
   
  -#if defined(HAVE_DGETTEXT) && !defined(__LCLINT__)
  +#if defined(HAVE_DCGETTEXT) && !defined(__LCLINT__)
   #define D_(dom, str) dgettext(dom, str)
   #define POPT_(foo) D_("popt", foo)
   #else
  @@ -355,9 +385,11 @@
   	con->doExec = NULL;
   
   	if (con->finalArgv != NULL)
  -		for (i = 0; i < con->finalArgvCount; i++)
  +		for (i = 0; i < con->finalArgvCount; i++) {
   			con->finalArgv[i] = _free(con->finalArgv[i]);
   
  +		}
  +
   	con->finalArgvCount = 0;
   	con->arg_strip = PBM_FREE(con->arg_strip);
   	return;
  @@ -542,6 +574,7 @@
   		return POPT_ERROR_NOARG;
   
   	rc = execvp(argv[0], (char *const *)argv);
  +
   	return POPT_ERROR_ERRNO;
   }
   
  @@ -705,25 +738,25 @@
   
   }
   
  -static int poptSaveLong(const struct popt_option *opt, long aLong)
  +int poptSaveLong(long *arg, int argInfo, long aLong)
   {
  -	if (opt->arg == NULL)
  +	if (arg == NULL || (((unsigned long)arg) & (sizeof (*arg) - 1)))
   		return POPT_ERROR_NULLARG;
   
  -	if (opt->argInfo & POPT_ARGFLAG_NOT)
  +	if (argInfo & POPT_ARGFLAG_NOT)
   		aLong = ~aLong;
  -	switch (opt->argInfo & POPT_ARGFLAG_LOGICALOPS) {
  +	switch (argInfo & POPT_ARGFLAG_LOGICALOPS) {
   		case 0:
  -			*((long *)opt->arg) = aLong;
  +			*arg = aLong;
   			break;
   		case POPT_ARGFLAG_OR:
  -			*((long *)opt->arg) |= aLong;
  +			*arg |= aLong;
   			break;
   		case POPT_ARGFLAG_AND:
  -			*((long *)opt->arg) &= aLong;
  +			*arg &= aLong;
   			break;
   		case POPT_ARGFLAG_XOR:
  -			*((long *)opt->arg) ^= aLong;
  +			*arg ^= aLong;
   			break;
   		default:
   			return POPT_ERROR_BADOPERATION;
  @@ -732,25 +765,25 @@
   	return 0;
   }
   
  -static int poptSaveInt(const struct popt_option *opt, long aLong)
  +int poptSaveInt(int *arg, int argInfo, long aLong)
   {
  -	if (opt->arg == NULL)
  +	if (arg == NULL || (((unsigned long)arg) & (sizeof (*arg) - 1)))
   		return POPT_ERROR_NULLARG;
   
  -	if (opt->argInfo & POPT_ARGFLAG_NOT)
  +	if (argInfo & POPT_ARGFLAG_NOT)
   		aLong = ~aLong;
  -	switch (opt->argInfo & POPT_ARGFLAG_LOGICALOPS) {
  +	switch (argInfo & POPT_ARGFLAG_LOGICALOPS) {
   		case 0:
  -			*((int *)opt->arg) = aLong;
  +			*arg = aLong;
   			break;
   		case POPT_ARGFLAG_OR:
  -			*((int *)opt->arg) |= aLong;
  +			*arg |= aLong;
   			break;
   		case POPT_ARGFLAG_AND:
  -			*((int *)opt->arg) &= aLong;
  +			*arg &= aLong;
   			break;
   		case POPT_ARGFLAG_XOR:
  -			*((int *)opt->arg) ^= aLong;
  +			*arg ^= aLong;
   			break;
   		default:
   			return POPT_ERROR_BADOPERATION;
  @@ -896,12 +929,13 @@
   		if (opt == NULL)
   			return POPT_ERROR_BADOPT;
   		if (opt->arg && (opt->argInfo & POPT_ARG_MASK) == POPT_ARG_NONE) {
  -			if (poptSaveInt(opt, 1L))
  +			if (poptSaveInt((int *)opt->arg, opt->argInfo, 1L))
   				return POPT_ERROR_BADOPERATION;
   		}
   		else if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_VAL) {
   			if (opt->arg) {
  -				if (poptSaveInt(opt, (long)opt->val))
  +				if (poptSaveInt
  +					((int *)opt->arg, opt->argInfo, (long)opt->val))
   					return POPT_ERROR_BADOPERATION;
   			}
   		}
  @@ -967,13 +1001,15 @@
   								POPT_ARG_LONG) {
   								if (aLong == LONG_MIN || aLong == LONG_MAX)
   									return POPT_ERROR_OVERFLOW;
  -								if (poptSaveLong(opt, aLong))
  +								if (poptSaveLong
  +									((long *)opt->arg, opt->argInfo, aLong))
   									return POPT_ERROR_BADOPERATION;
   							}
   							else {
   								if (aLong > INT_MAX || aLong < INT_MIN)
   									return POPT_ERROR_OVERFLOW;
  -								if (poptSaveInt(opt, aLong))
  +								if (poptSaveInt
  +									((int *)opt->arg, opt->argInfo, aLong))
   									return POPT_ERROR_BADOPERATION;
   							}
   						}
  @@ -1419,6 +1455,101 @@
   	return rc;
   }
   
  +int poptConfigFileToString(FILE * fp, char **argstrp, int flags)
  +{
  +	char line[999];
  +	char *argstr;
  +	char *p;
  +	char *q;
  +	char *x;
  +	int t;
  +	int argvlen = 0;
  +	size_t maxlinelen = sizeof (line);
  +	size_t linelen;
  +	int maxargvlen = 480;
  +	int linenum = 0;
  +
  +	*argstrp = NULL;
  +
  +	if (fp == NULL)
  +		return POPT_ERROR_NULLARG;
  +
  +	argstr = calloc(maxargvlen, sizeof (*argstr));
  +	if (argstr == NULL)
  +		return POPT_ERROR_MALLOC;
  +
  +	while (fgets(line, (int)maxlinelen, fp) != NULL) {
  +		linenum++;
  +		p = line;
  +
  +		while (*p != '\0' && isspace(*p))
  +			p++;
  +
  +		linelen = strlen(p);
  +		if (linelen >= maxlinelen - 1)
  +			return POPT_ERROR_OVERFLOW;
  +
  +		if (*p == '\0' || *p == '\n')
  +			continue;
  +		if (*p == '#')
  +			continue;
  +
  +		q = p;
  +
  +		while (*q != '\0' && (!isspace(*q)) && *q != '=')
  +			q++;
  +
  +		if (isspace(*q)) {
  +			*q++ = '\0';
  +			while (*q != '\0' && isspace((int)*q))
  +				q++;
  +		}
  +		if (*q == '\0') {
  +			q[-1] = '\0';
  +			argvlen += (t = q - p) + (sizeof (" --") - 1);
  +			if (argvlen >= maxargvlen) {
  +				maxargvlen = (t > maxargvlen) ? t * 2 : maxargvlen * 2;
  +				argstr = realloc(argstr, maxargvlen);
  +				if (argstr == NULL)
  +					return POPT_ERROR_MALLOC;
  +			}
  +			strcat(argstr, " --");
  +			strcat(argstr, p);
  +			continue;
  +		}
  +		if (*q != '=')
  +			continue;
  +
  +		*q++ = '\0';
  +
  +		while (*q != '\0' && isspace(*q))
  +			q++;
  +		if (*q == '\0')
  +			continue;
  +
  +		x = p + linelen;
  +		while (isspace(*--x))
  +			*x = 0;
  +
  +		t = x - p;
  +		argvlen += t + (sizeof ("' --='") - 1);
  +		if (argvlen >= maxargvlen) {
  +			maxargvlen = (t > maxargvlen) ? t * 2 : maxargvlen * 2;
  +			argstr = realloc(argstr, maxargvlen);
  +			if (argstr == NULL)
  +				return POPT_ERROR_MALLOC;
  +		}
  +		strcat(argstr, " --");
  +		strcat(argstr, p);
  +		strcat(argstr, "=\"");
  +		strcat(argstr, q);
  +		strcat(argstr, "\"");
  +	}
  +
  +	*argstrp = argstr;
  +	return 0;
  +}
  +
   static void configLine(popt_context con, char *line)
   {
   
  @@ -1582,8 +1713,10 @@
   	rc = popt_readconfigfile(con, "/etc/popt");
   	if (rc)
   		return rc;
  +#if defined(HAVE_GETUID) && defined(HAVE_GETEUID)
   	if (getuid() != geteuid())
   		return 0;
  +#endif
   
   	if ((home = getenv("HOME"))) {
   		fn = alloca(strlen(home) + 20);
  @@ -1649,8 +1782,13 @@
   	switch (opt->argInfo & POPT_ARG_MASK) {
   		case POPT_ARG_NONE:
   			return POPT_("NONE");
  +#ifdef	DYING
   		case POPT_ARG_VAL:
   			return POPT_("VAL");
  +#else
  +		case POPT_ARG_VAL:
  +			return NULL;
  +#endif
   		case POPT_ARG_INT:
   			return POPT_("INT");
   		case POPT_ARG_LONG:
  @@ -1676,6 +1814,7 @@
   
   	if (le == NULL)
   		return NULL;
  +
   	*le = '\0';
   	*le++ = '(';
   	strcpy(le, defstr);
  @@ -1775,6 +1914,7 @@
   				opt->longName);
   	if (!*left)
   		goto out;
  +
   	if (argDescrip) {
   		char *le = left + strlen(left);
   
  @@ -1807,6 +1947,7 @@
   				case POPT_ARG_NONE:
   					break;
   				case POPT_ARG_VAL:
  +#ifdef	NOTNOW
   					{
   						long aLong = opt->val;
   						int ops = (opt->argInfo & POPT_ARGFLAG_LOGICALOPS);
  @@ -1837,6 +1978,7 @@
   
   						*le++ = ']';
   					}
  +#endif
   					break;
   				case POPT_ARG_INT:
   				case POPT_ARG_LONG:
  @@ -1875,9 +2017,10 @@
   	}
   
   	helpLength = strlen(help);
  +
   	while (helpLength > lineLength) {
   		const char *ch;
  -		char format[10];
  +		char format[16];
   
   		ch = help + lineLength - 1;
   		while (ch > help && !isspace(*ch))
  @@ -2011,6 +2154,7 @@
   
   	fprintf(fp, POPT_("Usage:"));
   	if (!(con->flags & POPT_CONTEXT_KEEP_FIRST)) {
  +
   		fn = con->optionStack->argv[0];
   
   		if (fn == NULL)
  @@ -2042,24 +2186,30 @@
   							 const struct popt_option *opt,
   							 const char *translation_domain)
   {
  -	int len = 3;
  +	int len = 4;
   	char shortStr[2] = { '\0', '\0' };
   	const char *item = shortStr;
   	const char *argDescrip = getArgDescrip(opt, translation_domain);
   
  -	if (opt->shortName != '\0') {
  -		if (!(opt->argInfo & POPT_ARG_MASK))
  -			return cursor;
  +	if (opt->shortName != '\0' && opt->longName != NULL) {
  +		len += 2;
  +		if (!(opt->argInfo & POPT_ARGFLAG_ONEDASH))
  +			len++;
  +		len += strlen(opt->longName);
  +	}
  +	else if (opt->shortName != '\0') {
   		len++;
   		shortStr[0] = opt->shortName;
   		shortStr[1] = '\0';
   	}
   	else if (opt->longName) {
  -		len += 1 + strlen(opt->longName);
  +		len += strlen(opt->longName);
  +		if (!(opt->argInfo & POPT_ARGFLAG_ONEDASH))
  +			len++;
   		item = opt->longName;
   	}
   
  -	if (len == 3)
  +	if (len == 4)
   		return cursor;
   
   	if (argDescrip)
  @@ -2070,11 +2220,20 @@
   		cursor = 7;
   	}
   
  -	fprintf(fp, " [-%s%s%s%s]",
  -			((opt->shortName
  -			  || (opt->argInfo & POPT_ARGFLAG_ONEDASH)) ? "" : "-"), item,
  -			(argDescrip ? (opt->shortName != '\0' ? " " : "=") : ""),
  -			(argDescrip ? argDescrip : ""));
  +	if (opt->longName && opt->shortName) {
  +		fprintf(fp, " [-%c|-%s%s%s%s]",
  +				opt->shortName,
  +				((opt->argInfo & POPT_ARGFLAG_ONEDASH) ? "" : "-"),
  +				opt->longName, (argDescrip ? " " : ""),
  +				(argDescrip ? argDescrip : ""));
  +	}
  +	else {
  +		fprintf(fp, " [-%s%s%s%s]",
  +				((opt->shortName
  +				  || (opt->argInfo & POPT_ARGFLAG_ONEDASH)) ? "" : "-"), item,
  +				(argDescrip ? (opt->shortName != '\0' ? " " : "=") : ""),
  +				(argDescrip ? argDescrip : ""));
  +	}
   
   	return cursor + len + 1;
   }
  @@ -2101,9 +2260,15 @@
   	return cursor;
   }
   
  -static int singleTableUsage(popt_context con, FILE * fp,
  -							int cursor, const struct popt_option *opt,
  -							const char *translation_domain)
  +typedef struct poptDone_s {
  +	int nopts;
  +	int maxopts;
  +	const void **opts;
  +}  *poptDone;
  +
  +static int singleTableUsage(popt_context con, FILE * fp, int cursor,
  +							const struct popt_option *opt,
  +							const char *translation_domain, poptDone done)
   {
   	if (opt != NULL)
   		for (; (opt->longName || opt->shortName || opt->arg); opt++) {
  @@ -2111,9 +2276,25 @@
   				translation_domain = (const char *)opt->arg;
   			}
   			else if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INCLUDE_TABLE) {
  -				if (opt->arg)
  -					cursor = singleTableUsage(con, fp, cursor, opt->arg,
  -											  translation_domain);
  +				if (done) {
  +					int i = 0;
  +					for (i = 0; i < done->nopts; i++) {
  +
  +						const void *that = done->opts[i];
  +
  +						if (that == NULL || that != opt->arg)
  +							continue;
  +						break;
  +					}
  +					if (opt->arg == NULL || i < done->nopts)
  +						continue;
  +
  +					if (done->nopts < done->maxopts)
  +						done->opts[done->nopts++] = (const void *)opt->arg;
  +
  +				}
  +				cursor = singleTableUsage(con, fp, cursor, opt->arg,
  +										  translation_domain, done);
   			}
   			else if ((opt->longName || opt->shortName) &&
   					 !(opt->argInfo & POPT_ARGFLAG_DOC_HIDDEN)) {
  @@ -2154,13 +2335,21 @@
   
   void popt_printusage(popt_context con, FILE * fp, int flags)
   {
  +	poptDone done = memset(alloca(sizeof (*done)), 0, sizeof (*done));
   	int cursor;
   
  +	done->nopts = 0;
  +	done->maxopts = 64;
  +	cursor = done->maxopts * sizeof (*done->opts);
  +
  +	done->opts = memset(alloca(cursor), 0, cursor);
  +	done->opts[done->nopts++] = (const void *)con->options;
  +
   	cursor = showHelpIntro(con, fp);
   	cursor += showShortOptions(con->options, fp, NULL);
  -	(void)singleTableUsage(con, fp, cursor, con->options, NULL);
  -	(void)itemUsage(fp, cursor, con->aliases, con->numAliases, NULL);
  -	(void)itemUsage(fp, cursor, con->execs, con->numExecs, NULL);
  +	cursor = singleTableUsage(con, fp, cursor, con->options, NULL, done);
  +	cursor = itemUsage(fp, cursor, con->aliases, con->numAliases, NULL);
  +	cursor = itemUsage(fp, cursor, con->execs, con->numExecs, NULL);
   
   	if (con->otherHelp) {
   		cursor += strlen(con->otherHelp) + 1;
  Index: ossp-pkg/popt/popt.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 popt.h
  --- ossp-pkg/popt/popt.h	15 Mar 2002 08:49:49 -0000	1.2
  +++ ossp-pkg/popt/popt.h	20 Sep 2002 18:16:41 -0000	1.3
  @@ -25,7 +25,7 @@
    *
    *  NOTICE:
    *  This is an automatically generated, stripped down version of the
  - *  POPT 1.6.4 library from Red Hat, Inc. This version is still
  + *  POPT 1.7 library from Red Hat, Inc. This version is still
    *  distributed under above Open Source license, but Red Hat is no longer
    *  responsible for this version. Contact The OSSP Project instead.
    */
  @@ -118,10 +118,12 @@
   }  *popt_item;
   
   extern struct popt_option popt_aliasOptions[];
  +
   #define POPT_AUTOALIAS { NULL, '\0', POPT_ARG_INCLUDE_TABLE, popt_aliasOptions, \
   			0, "Options implemented via popt alias/exec:", NULL },
   
   extern struct popt_option popt_helpoptions[];
  +
   #define POPT_AUTOHELP { NULL, '\0', POPT_ARG_INCLUDE_TABLE, popt_helpoptions, \
   			0, "Help options:", NULL },
   
  @@ -135,9 +137,10 @@
   
   #endif
   
  -enum popt_callbackreason { POPT_CALLBACK_REASON_PRE,
  -	POPT_CALLBACK_REASON_POST,
  -	POPT_CALLBACK_REASON_OPTION
  +enum popt_callbackreason {
  +	POPT_CALLBACK_REASON_PRE = 0,
  +	POPT_CALLBACK_REASON_POST = 1,
  +	POPT_CALLBACK_REASON_OPTION = 2
   };
   
   #ifdef __cplusplus
  @@ -189,6 +192,9 @@
   	int popt_parseargvstring(const char *s,
   							 int *argcPtr, const char ***argvPtr);
   
  +	int poptConfigFileToString(FILE * fp, char **argstrp, int flags)
  +	   ;
  +
   	const char *const popt_strerror(const int error);
   
   	void popt_setexecpath(popt_context con, const char *path,
  @@ -205,6 +211,12 @@
   	const char *popt_getinvocationname(popt_context con);
   
   	int popt_strippedargv(popt_context con, int argc, char **argv);
  +
  +	int poptSaveLong(long *arg, int argInfo, long aLong)
  +	   ;
  +
  +	int poptSaveInt(int *arg, int argInfo, long aLong)
  +	   ;
   
   #ifdef  __cplusplus
   }

From ossp-cvs-owner@ossp.org  Sun Sep 22 09:35:41 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 426E17644D; Sun, 22 Sep 2002 09:35:41 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ut_format.c
Message-Id: <20020922073541.426E17644D@mail.ossp.org>
Date: Sun, 22 Sep 2002 09:35:41 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Sep-2002 09:35:41
  Branch: HEAD                             Handle: 2002092208354000

  Modified files:
    ossp-pkg/l2             l2_ut_format.c

  Log:
    fix memory leak

  Summary:
    Revision    Changes     Path
    1.7         +3  -1      ossp-pkg/l2/l2_ut_format.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ut_format.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 l2_ut_format.c
  --- ossp-pkg/l2/l2_ut_format.c	30 Jul 2002 19:08:25 -0000	1.6
  +++ ossp-pkg/l2/l2_ut_format.c	22 Sep 2002 07:35:40 -0000	1.7
  @@ -1137,8 +1137,10 @@
       if ((s = malloc(rv+1)) == NULL)
           return NULL;
       ap = apbak;
  -    if ((rv = l2_util_vsprintf(s, rv+1, fmt, ap)) == -1)
  +    if ((rv = l2_util_vsprintf(s, rv+1, fmt, ap)) == -1) {
  +        free(s);
           return NULL;
  +    }
       return s;
   }
   

From ossp-cvs-owner@ossp.org  Sun Sep 22 09:36:43 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 825FE7644D; Sun, 22 Sep 2002 09:36:43 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa TODO
Message-Id: <20020922073643.825FE7644D@mail.ossp.org>
Date: Sun, 22 Sep 2002 09:36:43 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Sep-2002 09:36:43
  Branch: HEAD                             Handle: 2002092208364300

  Modified files:
    ossp-pkg/sa             TODO

  Log:
    remember

  Summary:
    Revision    Changes     Path
    1.35        +8  -0      ossp-pkg/sa/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.34 -r1.35 TODO
  --- ossp-pkg/sa/TODO	1 Apr 2002 12:22:22 -0000	1.34
  +++ ossp-pkg/sa/TODO	22 Sep 2002 07:36:43 -0000	1.35
  @@ -2,6 +2,14 @@
   TODO
   ----
   
  +Solaris 2.6:
  +./libtool --mode=compile --quiet /usr/opkg/bin/cc -c  -O -pipe -I. l2_env.c
  +In file included from l2_p.h:43,
  +from l2_env.c:30:
  +l2_ut_sa.h:161: parse error before "socklen_t"
  +l2_ut_sa.h:163: parse error before "socklen_t"
  +make[2]: *** [l2_env.lo] Error 1
  +
   - more test cases to cover full API and especially the client/server usage
   - more documentation to fully describe API
   

From ossp-cvs-owner@ossp.org  Tue Sep 24 14:53:48 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 02C9E76488; Tue, 24 Sep 2002 14:53:47 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/SHARE ossp_css.wml ossp_navbar.wml ossp_page.wml ...
Message-Id: <20020924125347.02C9E76488@mail.ossp.org>
Date: Tue, 24 Sep 2002 14:53:47 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   24-Sep-2002 14:53:47
  Branch: HEAD                             Handle: 2002092413534403

  Added files:
    ossp-web/doc            license-gpl.txt license-lgpl.txt license-mit.txt
  Modified files:
    ossp-web                index.wml
    ossp-web/SHARE          ossp_css.wml ossp_navbar.wml ossp_page.wml
    ossp-web/doc            index.wml license.wml summary.wml
    ossp-web/new            events.txt events.wml index.wml news.txt news.wml
    ossp-web/pkg            index.wml

  Log:
    update website, remove references to still not done areas, etc.

  Summary:
    Revision    Changes     Path
    1.6         +6  -1      ossp-web/SHARE/ossp_css.wml
    1.9         +14 -14     ossp-web/SHARE/ossp_navbar.wml
    1.3         +8  -2      ossp-web/SHARE/ossp_page.wml
    1.2         +4  -0      ossp-web/doc/index.wml
    1.1         +24 -0      ossp-web/doc/license-gpl.txt
    1.1         +24 -0      ossp-web/doc/license-lgpl.txt
    1.1         +27 -0      ossp-web/doc/license-mit.txt
    1.2         +63 -1      ossp-web/doc/license.wml
    1.2         +27 -1      ossp-web/doc/summary.wml
    1.4         +1  -1      ossp-web/index.wml
    1.3         +5  -1      ossp-web/new/events.txt
    1.2         +4  -1      ossp-web/new/events.wml
    1.2         +15 -0      ossp-web/new/index.wml
    1.25        +1  -1      ossp-web/new/news.txt
    1.2         +4  -1      ossp-web/new/news.wml
    1.4         +27 -23     ossp-web/pkg/index.wml
  ____________________________________________________________________________

  Index: ossp-web/SHARE/ossp_css.wml
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 ossp_css.wml
  --- ossp-web/SHARE/ossp_css.wml	15 Feb 2002 11:56:20 -0000	1.5
  +++ ossp-web/SHARE/ossp_css.wml	24 Sep 2002 12:53:45 -0000	1.6
  @@ -33,7 +33,12 @@
   }
   
   /* we use teletype font for code */
  -H1,H2,H3,H4,H5,H6 { 
  +H1 { 
  +    font-family: tahoma,helvetica,lucida,arial,sans-serif; 
  +	margin-bottom: 4px;
  +    color: #666699;
  +}
  +H2,H3,H4,H5,H6 { 
       font-family: tahoma,helvetica,lucida,arial,sans-serif; 
   	margin-bottom: 4px;
       color: #993333;
  Index: ossp-web/SHARE/ossp_navbar.wml
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 ossp_navbar.wml
  --- ossp-web/SHARE/ossp_navbar.wml	11 Aug 2002 13:49:08 -0000	1.8
  +++ ossp-web/SHARE/ossp_navbar.wml	24 Sep 2002 12:53:45 -0000	1.9
  @@ -160,38 +160,38 @@
     <navbar:button txt="News"             url=new/                     id=new  menu=new>
     <navbar:button txt="Documents"        url=doc/                     id=doc  menu=doc>
     <navbar:button txt="Packages"         url=pkg/                     id=pkg  menu=pkg>
  -  <navbar:button txt="Sources"          url=src/                     id=src  menu=src>
  -  <navbar:button txt="Support"          url=sup/                     id=sup  menu=sup>
  +  #TODO# <navbar:button txt="Sources"          url=src/                     id=src  menu=src>
  +  #TODO# <navbar:button txt="Support"          url=sup/                     id=sup  menu=sup>
     <navbar:button txt="Community"        url=com/                     id=com  menu=com>
     <navbar:button txt="Related"          url=rel/                     id=rel  menu=rel>
  -  <navbar:button txt="Website"          url=sit/                     id=sit  menu=sit>
  +  #TODO# <navbar:button txt="Website"          url=sit/                     id=sit  menu=sit>
   </nb:stage1>
   
   <nb:stage2 new>
     #   News
     <navbar:button txt="What's New"       url=new/news.html            id=new:news>
  -  <navbar:button txt="Press Releases"   url=new/pr.html              id=new:pr>
  -  <navbar:button txt="In The Press"     url=new/press.html           id=new:press>
     <navbar:button txt="Project Events"   url=new/events.html          id=new:events>
  +  #TODO# <navbar:button txt="Press Releases"   url=new/pr.html              id=new:pr>
  +  #TODO# <navbar:button txt="In The Press"     url=new/press.html           id=new:press>
   </nb:stage2>
   <nb:stage2 doc>
     #   Documents
     <navbar:button txt="Project Summary"  url=doc/summary.html         id=doc:summary>
  -  <navbar:button txt="White Papers"     url=doc/whitepaper.html      id=doc:whitepaper>
  -  <navbar:button txt="Presentations"    url=doc/presentation.html    id=doc:presentation>
  -  <navbar:button txt="Articles"         url=doc/article.html         id=doc:article>
  -  <navbar:button txt="User Manual"      url=doc/usrman.html          id=doc:usrman>
  -  <navbar:button txt="Developer Manual" url=doc/devman.html          id=doc:devman>
  -  <navbar:button txt="F.A.Q. List"      url=doc/faq.html             id=doc:faq>
  +  #TODO# <navbar:button txt="White Papers"     url=doc/whitepaper.html      id=doc:whitepaper>
  +  #TODO# <navbar:button txt="Presentations"    url=doc/presentation.html    id=doc:presentation>
  +  #TODO# <navbar:button txt="Articles"         url=doc/article.html         id=doc:article>
  +  #TODO# <navbar:button txt="User Manual"      url=doc/usrman.html          id=doc:usrman>
  +  #TODO# <navbar:button txt="Developer Manual" url=doc/devman.html          id=doc:devman>
  +  #TODO# <navbar:button txt="F.A.Q. List"      url=doc/faq.html             id=doc:faq>
     <navbar:button txt="Licensing"        url=doc/license.html         id=doc:license>
   </nb:stage2>
   <nb:stage2 pkg>
     #   Packages
     <navbar:button txt="Tools"            url=pkg/tool/                id=pkg:tool>
  -  <navbar:button txt="Bootstrap"        url=pkg/boot/                id=pkg:boot>
  +  #TODO# <navbar:button txt="Bootstrap"        url=pkg/boot/                id=pkg:boot>
     <navbar:button txt="Libraries"        url=pkg/lib/                 id=pkg:lib>
  -  <navbar:button txt="Kernel"           url=pkg/kern/                id=pkg:kern>
  -  <navbar:button txt="Modules"          url=pkg/mod/                 id=pkg:mod>
  +  #TODO# <navbar:button txt="Kernel"           url=pkg/kern/                id=pkg:kern>
  +  #TODO# <navbar:button txt="Modules"          url=pkg/mod/                 id=pkg:mod>
   </nb:stage2>
   <nb:stage2 src>
     #   Sources
  Index: ossp-web/SHARE/ossp_page.wml
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 ossp_page.wml
  --- ossp-web/SHARE/ossp_page.wml	16 Mar 2002 19:18:58 -0000	1.2
  +++ ossp-web/SHARE/ossp_page.wml	24 Sep 2002 12:53:45 -0000	1.3
  @@ -9,7 +9,7 @@
   <html>
     <head>
       {#PAGE_HEAD#}
  -    <title*>OSSP: {#PAGE_TITLE#}</title*>
  +    <title*>OSSP: {#PAGE_TITLE#}{#PAGE_SUBTITLE#}</title*>
     </head>
     <body status="OSSP: {#PAGE_TITLE#}" {#PAGE_BODY_ATTR#}>
       :PAGE_HEAD][PAGE_BODY:
  @@ -24,7 +24,13 @@
   #   allow us to divert title information
   ..PAGE_TITLE!>>Error: Undefined Title!<<..
   <define-tag title endtag=required>
  -..PAGE_TITLE>>%body<<..
  +..!PAGE_TITLE>>%body<<..
  +</define-tag>
  +
  +#   allow us to divert sub-title information
  +..PAGE_SUBTITLE!>><<..
  +<define-tag subtitle endtag=required>
  +..!PAGE_SUBTITLE>>: %body<<..
   </define-tag>
   
   #   allow us to divert header information
  Index: ossp-web/doc/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/doc/index.wml	13 Feb 2002 16:35:03 -0000	1.1
  +++ ossp-web/doc/index.wml	24 Sep 2002 12:53:45 -0000	1.2
  @@ -5,3 +5,7 @@
   
   <h1>Project Documentation</h1>
   
  +<a href="summary.html"><h2>Project Summary</h2></a>
  +
  +<a href="license.html"><h2>Licensing</h2></a>
  +
  Index: ossp-web/doc/license-gpl.txt
  ============================================================
  $ cvs update -p -r1.1 license-gpl.txt
  
    OSSP foo -- Foo Library
    Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
    Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
    Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  
    This file is part of OSSP foo, a foo library which
    can be found at http://www.ossp.org/pkg/foo/.
  
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License
    as published by the Free Software Foundation; either version
    2.0 of the License, or (at your option) any later version.
  
    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    General Public License for more details.
  
    You should have received a copy of the GNU General Public License
    along with this library; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
    USA, or contact The OSSP Project <ossp@ossp.org>.
  
  Index: ossp-web/doc/license-lgpl.txt
  ============================================================
  $ cvs update -p -r1.1 license-lgpl.txt
  
    OSSP foo -- Foo Library
    Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
    Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
    Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  
    This file is part of OSSP foo, a foo library which
    can be found at http://www.ossp.org/pkg/foo/.
  
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.
  
    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    Lesser General Public License for more details.
  
    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
    USA, or contact The OSSP Project <ossp@ossp.org>.
  
  Index: ossp-web/doc/license-mit.txt
  ============================================================
  $ cvs update -p -r1.1 license-mit.txt
  
    OSSP foo -- Foo Library
    Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
    Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
    Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  
    This file is part of OSSP foo, a foo library which
    can be found at http://www.ossp.org/pkg/foo/.
  
    Permission to use, copy, modify, and distribute this software for
    any purpose with or without fee is hereby granted, provided that
    the above copyright notice and this permission notice appear in all
    copies.
  
    THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
    WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
    IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
    CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
    USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    SUCH DAMAGE.
  
  Index: ossp-web/doc/license.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 license.wml
  --- ossp-web/doc/license.wml	13 Feb 2002 16:35:03 -0000	1.1
  +++ ossp-web/doc/license.wml	24 Sep 2002 12:53:46 -0000	1.2
  @@ -1,7 +1,69 @@
   
   #use wml::ossp area=doc:license
   
  -<title>Documentation: Licensing and Copyrights</title>
  +<title>Documentation</title>
  +
  +<subtitle>Licensing and Copyrights</subtitle>
   
   <h1>Licensing and Copyrights</h1>
  +
  +The OSSP project uses three distinguished and OSI-approved <a
  +href="http://www.opensource.org/">Open Source</a> software distribution
  +licenses:
  +
  +<ul>
  +  <li><a href="http://www.gnu.org/licenses/gpl.html"><b>GNU General Public License</b> (2.0)</a><br>
  +      <a href="http://www.gnu.org/licenses/gpl.html">http://www.gnu.org/licenses/gpl.html</a>
  +	  <p>
  +      This is the strongest license, meaning it applies the most
  +      restrictions. It is used in OSSP mainly for stand-alone tools which
  +      are not included (by copying) into other components.  The
  +	  intention is to make sure the covered software remains
  +      fully free software and allow others to use it mostly everywhere only
  +      under certain strong restrictions.
  +  <p> 
  +  <li><a href="http://www.gnu.org/licenses/lgpl.html"><b>GNU Lesser General Public License</b> (2.1)</a><br>
  +      <a href="http://www.gnu.org/licenses/lgpl.html">http://www.gnu.org/licenses/lgpl.html</a>
  +	  <p>
  +      This is the compromise license, meaning it applies a reasonable
  +      set of restrictions but without making too much trouble for the
  +      user. It is used in OSSP mainly for libraries which should be
  +      strongly protected but which are not included (by copying) into
  +      other libraries (as sub-components). The intention is to make sure
  +      the covered software remains mostly fully free software and allow
  +      others to use it mostly everywhere without too strong
  +      restrictions.
  +  <p>
  +  <li><a href="http://www.opensource.org/licenses/mit-license.php"><b>MIT-Style License</b></a><br>
  +	  <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>
  +	  <p>
  +      This is the weakest license, meaning it applies the least
  +      restrictions. It is used in OSSP mainly for libraries which
  +      are potentially included (by copying) into other libraries (as
  +      sub-components). The intention is to make sure the covered
  +      software can be used really everywhere and for every reason
  +      without any real restrictions.
  +</ul>
  +
  +All OSSP software components are covered by one of the three licenses
  +above. They clearly indicate this with an obvious license declarations
  +at the top of each source file. The used declarations follow:
  +
  +<h2>GNU General Public License</h2>
  +
  +<font size=-1><tt><pre>
  +#include "license-gpl.txt"
  +</pre></tt></font>
  +
  +<h2>GNU Lesser General Public License</h2>
  +
  +<font size=-1><tt><pre>
  +#include "license-lgpl.txt"
  +</pre></tt></font>
  +
  +<h2>MIT License</h2>
  +
  +<font size=-1><tt><pre>
  +#include "license-mit.txt"
  +</pre></tt></font>
   
  Index: ossp-web/doc/summary.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 summary.wml
  --- ossp-web/doc/summary.wml	13 Feb 2002 16:35:03 -0000	1.1
  +++ ossp-web/doc/summary.wml	24 Sep 2002 12:53:46 -0000	1.2
  @@ -1,7 +1,33 @@
   
   #use wml::ossp area=doc:summary
   
  -<title>Documentation: Project Summary</title>
  +<title>Documentation</title>
  +
  +<subtitle>Project Summary</subtitle>
   
   <h1>Project Summary</h1>
  +
  +<p>
  +OSSP is a fully non-profit <a href="http://www.opensource.org/"><b>Open
  +Source Software</b></a> project, founded by <a
  +href="http://www.engelschall.com/">Ralf S. Engelschall</a> in
  +1998. The goal is the implementation of high-quality Unix software
  +components, ranging from <a href="$(ROOT)/pkg/lib/sa/">networking</a>,
  +<a href="$(ROOT)/pkg/lib/pth/">multi-threading</a> and <a
  +href="$(ROOT)/pkg/lib/act/">algorithmic</a> libraries to <a
  +href="$(ROOT)/pkg/tool/lmtp2nntp/">networking</a> servers and <a
  +href="$(ROOT)/pkg/tool/shtool/">development</a> tools.
  +
  +<p>
  +OSSP itself actually can be considered a meta-project, consisting of
  +numerous <a href="$(ROOT)/pkg/"><b>projects</b></a>. Each project is
  +a solution to a particular problem and usually released separately. At
  +a later stage, all sub-projects together could form something like a
  +<i>Next Generation Internet Server Platform</i> (NGISP). 
  +
  +<p>
  +But the NGISP goal is just a long-term one. The short-term goals of OSSP
  +are to provide the individual software components for making the life
  +easier of developers in the Internet Services field.
  +
   
  Index: ossp-web/index.wml
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 index.wml
  --- ossp-web/index.wml	11 Aug 2002 13:49:08 -0000	1.3
  +++ ossp-web/index.wml	24 Sep 2002 12:53:44 -0000	1.4
  @@ -12,7 +12,7 @@
   1998. The goal is the implementation of high-quality Unix software
   components, ranging from <a href="$(ROOT)/pkg/lib/sa/">networking</a>,
   <a href="$(ROOT)/pkg/lib/pth/">multi-threading</a> and <a
  -href="$(ROOT)/pkg/lib/act/">algorithmc</a> libraries to <a
  +href="$(ROOT)/pkg/lib/act/">algorithmic</a> libraries to <a
   href="$(ROOT)/pkg/tool/lmtp2nntp/">networking</a> servers and <a
   href="$(ROOT)/pkg/tool/shtool/">development</a> tools.
   
  Index: ossp-web/new/events.txt
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 events.txt
  --- ossp-web/new/events.txt	13 Feb 2002 21:35:23 -0000	1.2
  +++ ossp-web/new/events.txt	24 Sep 2002 12:53:46 -0000	1.3
  @@ -1 +1,5 @@
  -31-Feb-2002: OSSP lmtp2nntp 1.2.0
  +Q4/2002: OSSP lmtp2nntp 1.2.0
  +Q3/2002: OSSP fsl 1.0
  +Q2/2002: OSSP cfg 0.9
  +Q1/2002: OSSP ex 1.0.0
  +Q1/2002: OSSP l2 0.9
  Index: ossp-web/new/events.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 events.wml
  --- ossp-web/new/events.wml	13 Feb 2002 16:35:04 -0000	1.1
  +++ ossp-web/new/events.wml	24 Sep 2002 12:53:46 -0000	1.2
  @@ -3,7 +3,10 @@
   
   <title>News: Events</title>
   
  -The following is a complete list of all scheduled project events:
  +<h1>Project Events</h1>
  +
  +The following is a complete list of all forthcoming project milestones
  +in chronological order (next event first).
   
   <p>
   <newsflash from="events.txt" nohead>
  Index: ossp-web/new/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/new/index.wml	13 Feb 2002 16:35:04 -0000	1.1
  +++ ossp-web/new/index.wml	24 Sep 2002 12:53:46 -0000	1.2
  @@ -5,3 +5,18 @@
   
   <h1>Project News</h1>
   
  +<a href="news.html"><h2>What's New</h2></a>
  +
  +On the <a href="news.html"><b>What's New</b></a> page we summarize all
  +OSSP project news in reverse chronological order (newest first). Mainly
  +these are announcements of new software versions. Visit this page
  +to get a brief summary on the project history. For convinience reasons,
  +the first (latest) entries of this page are always included in the <a
  +href="$(ROOT)"><b>Title</b></a> page.
  +
  +<a href="events.html"><h2>Project Events</h2></a>
  +
  +On the <a href="events.html"><b>Project Events</b></a> page we summarize
  +all forthcoming project milestones in chronological order (next event
  +first). Mainly these are milestones in software development phases.
  +
  Index: ossp-web/new/news.txt
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 news.txt
  --- ossp-web/new/news.txt	7 Sep 2002 20:32:49 -0000	1.24
  +++ ossp-web/new/news.txt	24 Sep 2002 12:53:46 -0000	1.25
  @@ -55,4 +55,4 @@
   26-Apr-1999: Released T<GNU shtool> 1.1.0
   22-Apr-1999: Released T<GNU shtool> 1.0.0
   28-Mar-1999: Released T<OSSP mm> 1.0.0
  -12-Mar-1999: Genesis of the OSSP project
  +17-Nov-1998: Genesis of the OSSP project
  Index: ossp-web/new/news.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 news.wml
  --- ossp-web/new/news.wml	13 Feb 2002 16:35:04 -0000	1.1
  +++ ossp-web/new/news.wml	24 Sep 2002 12:53:46 -0000	1.2
  @@ -3,7 +3,10 @@
   
   <title>News: What's New</title>
   
  -The following is a complete list of all News entries:
  +<h1>What's New</h1>
  +
  +The following is a complete list of all OSSP project news in reverse
  +chronological order (newest first). 
   
   <p>
   <newsflash from="news.txt" nohead>
  Index: ossp-web/pkg/index.wml
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 index.wml
  --- ossp-web/pkg/index.wml	18 Feb 2002 07:53:12 -0000	1.3
  +++ ossp-web/pkg/index.wml	24 Sep 2002 12:53:47 -0000	1.4
  @@ -3,6 +3,10 @@
   
   <title>Packages</title>
   
  +<subtitle>Package Sets</subtitle>
  +
  +<h1>Package Sets</h1>
  +
   OSSP consists of a large set of packages (or components). They are split
   into the following cathegories:
   
  @@ -14,14 +18,14 @@
   fully separately. 
   [<a href="tool/">more</a>]
        
  -<h2>Bootstrap</h2>
  -
  -The bootstrap packages will be the necessary tools and libraries for
  -bootstrapping the OSSP developer and end-user build environments.
  -Currently this package category still does not exists. It will be
  -created later by integrating packages from the <i>Tools</i> and
  -<i>Libraries</i> cathegories.
  -[<a href="boot/">more</a>]
  +# <h2>Bootstrap</h2>
  +# 
  +# The bootstrap packages will be the necessary tools and libraries for
  +# bootstrapping the OSSP developer and end-user build environments.
  +# Currently this package category still does not exists. It will be
  +# created later by integrating packages from the <i>Tools</i> and
  +# <i>Libraries</i> cathegories.
  +# [<a href="boot/">more</a>]
   
   <h2>Libraries</h2>
   
  @@ -32,18 +36,18 @@
   platform.
   [<a href="lib/">more</a>]
   
  -<h2>Kernel</h2>
  -
  -The kernel packages will form the microkernel part of the OSSP platform.
  -It will use the <i>Libraries</i> packages to provide the run-time
  -environment for the <i>Modules</i> packages.
  -[<a href="kern/">more</a>]
  -
  -<h2>Modules</h2>
  -
  -The modules OSSP will be the active components used in the OSSP
  -platform. They use the <i>Libraries</i> and the OSSP <i>Kernel</i>
  -packages to provide the actual OSSP server functionality. They
  -can be used only within the OSSP platform.
  -[<a href="mod/">more</a>]
  -
  +# <h2>Kernel</h2>
  +# 
  +# The kernel packages will form the microkernel part of the OSSP platform.
  +# It will use the <i>Libraries</i> packages to provide the run-time
  +# environment for the <i>Modules</i> packages.
  +# [<a href="kern/">more</a>]
  + 
  +# <h2>Modules</h2>
  +# 
  +# The modules OSSP will be the active components used in the OSSP
  +# platform. They use the <i>Libraries</i> and the OSSP <i>Kernel</i>
  +# packages to provide the actual OSSP server functionality. They
  +# can be used only within the OSSP platform.
  +# [<a href="mod/">more</a>]
  + 

From ossp-cvs-owner@ossp.org  Tue Sep 24 16:50:37 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9738B76488; Tue, 24 Sep 2002 16:50:37 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog pthread.h.in
Message-Id: <20020924145037.9738B76488@mail.ossp.org>
Date: Tue, 24 Sep 2002 16:50:37 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Sep-2002 16:50:37
  Branch: HEAD                             Handle: 2002092415503601

  Modified files:
    ossp-pkg/pth            ChangeLog pthread.h.in

  Log:
    Add #define _PTHREAD_T to pthread.h to guard under SCO UnixWare 7
    and OpenUNIX 8.
    
    Submitted by: Jonathan Schilling <jls@caldera.com>

  Summary:
    Revision    Changes     Path
    1.564       +4  -0      ossp-pkg/pth/ChangeLog
    1.62        +1  -0      ossp-pkg/pth/pthread.h.in
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.563 -r1.564 ChangeLog
  --- ossp-pkg/pth/ChangeLog	4 Sep 2002 12:11:17 -0000	1.563
  +++ ossp-pkg/pth/ChangeLog	24 Sep 2002 14:50:36 -0000	1.564
  @@ -21,6 +21,10 @@
   
     Changes between 1.4.1 and 1.5.0 (27-Jan-2002 to xx-Sep-2002)
   
  +   *) Add #define _PTHREAD_T to pthread.h to guard under SCO UnixWare 7 
  +      and OpenUNIX 8.
  +      [Jonathan Schilling <jls@caldera.com>]
  +
      *) Upgraded to Autoconf 2.53 environment and cleaned up internal
         Autoconf macro usage.
         [Ralf S. Engelschall]
  Index: ossp-pkg/pth/pthread.h.in
  ============================================================
  $ cvs diff -u -r1.61 -r1.62 pthread.h.in
  --- ossp-pkg/pth/pthread.h.in	27 Jan 2002 11:03:41 -0000	1.61
  +++ ossp-pkg/pth/pthread.h.in	24 Sep 2002 14:50:37 -0000	1.62
  @@ -40,6 +40,7 @@
    */
   #define PTHREAD
   #define PTHREAD_H
  +#define _PTHREAD_T
   #define _PTHREAD_H
   #define _PTHREAD_H_
   #define PTHREAD_INCLUDED

From ossp-cvs-owner@ossp.org  Tue Sep 24 16:52:50 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 15CDC76488; Tue, 24 Sep 2002 16:52:50 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog THANKS
Message-Id: <20020924145250.15CDC76488@mail.ossp.org>
Date: Tue, 24 Sep 2002 16:52:50 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Sep-2002 16:52:50
  Branch: HEAD                             Handle: 2002092415524900

  Modified files:
    ossp-pkg/pth            ChangeLog THANKS

  Log:
    fix address and give credit

  Summary:
    Revision    Changes     Path
    1.565       +1  -1      ossp-pkg/pth/ChangeLog
    1.85        +1  -0      ossp-pkg/pth/THANKS
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.564 -r1.565 ChangeLog
  --- ossp-pkg/pth/ChangeLog	24 Sep 2002 14:50:36 -0000	1.564
  +++ ossp-pkg/pth/ChangeLog	24 Sep 2002 14:52:49 -0000	1.565
  @@ -23,7 +23,7 @@
   
      *) Add #define _PTHREAD_T to pthread.h to guard under SCO UnixWare 7 
         and OpenUNIX 8.
  -      [Jonathan Schilling <jls@caldera.com>]
  +      [Jonathan Schilling <jls@sco.com>]
   
      *) Upgraded to Autoconf 2.53 environment and cleaned up internal
         Autoconf macro usage.
  Index: ossp-pkg/pth/THANKS
  ============================================================
  $ cvs diff -u -r1.84 -r1.85 THANKS
  --- ossp-pkg/pth/THANKS	27 Apr 2002 11:18:57 -0000	1.84
  +++ ossp-pkg/pth/THANKS	24 Sep 2002 14:52:49 -0000	1.85
  @@ -87,6 +87,7 @@
       o  David Ronis                 <ronis@ronispc.chem.mcgill.ca>
       o  Keith Rose                  <keith@avocetsys.com>
       o  Michele Satriani            <satriani@info.uniroma2.it>
  +    o  Jonathan Schilling          <jls@sco.com>
       o  David W. Schuler            <schuld@btv.ibm.com>
       o  Peter Simons                <simons@cys.de>
       o  Robert S. Tau               <rst@mit.edu>

From ossp-cvs-owner@ossp.org  Tue Sep 24 17:26:10 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7EA2376488; Tue, 24 Sep 2002 17:26:10 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/pth index.wml pth.png
Message-Id: <20020924152610.7EA2376488@mail.ossp.org>
Date: Tue, 24 Sep 2002 17:26:10 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   24-Sep-2002 17:26:10
  Branch: HEAD                             Handle: 2002092416261000

  Added files:
    ossp-web/pkg/lib/pth    pth.png
  Modified files:
    ossp-web/pkg/lib/pth    index.wml

  Log:
    add logo

  Summary:
    Revision    Changes     Path
    1.4         +2  -0      ossp-web/pkg/lib/pth/index.wml
    1.1         BLOB        ossp-web/pkg/lib/pth/pth.png
  ____________________________________________________________________________

  Index: ossp-web/pkg/lib/pth/index.wml
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 index.wml
  --- ossp-web/pkg/lib/pth/index.wml	11 Aug 2002 13:49:13 -0000	1.3
  +++ ossp-web/pkg/lib/pth/index.wml	24 Sep 2002 15:26:10 -0000	1.4
  @@ -5,6 +5,8 @@
   
   <h1>Portable Threads</h1>
   
  +<img src="pth.png" alt="" align=right>
  +
   <h2>Abstract</h2>
   
   Pth is a very portable POSIX/ANSI-C based library for Unix platforms which
  Index: ossp-web/pkg/lib/pth/pth.png
  ============================================================
  $ cvs update -p -r1.1 pth.png | uuencode pth.png
  ‰PNG
  
  
From ossp-cvs-owner@ossp.org  Wed Oct  2 10:34:05 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D1C55769DF; Wed,  2 Oct 2002 10:34:04 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.pod
Message-Id: <20021002083404.D1C55769DF@mail.ossp.org>
Date: Wed,  2 Oct 2002 10:34:04 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   02-Oct-2002 10:34:04
  Branch: HEAD                             Handle: 2002100209340400

  Modified files:
    ossp-pkg/fsl            fsl.pod

  Log:
    rewrite infinite loop description and offer workaround

  Summary:
    Revision    Changes     Path
    1.26        +4  -3      ossp-pkg/fsl/fsl.pod
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.pod
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 fsl.pod
  --- ossp-pkg/fsl/fsl.pod	2 Aug 2002 11:17:42 -0000	1.25
  +++ ossp-pkg/fsl/fsl.pod	2 Oct 2002 08:34:04 -0000	1.26
  @@ -343,9 +343,10 @@
               INT logpid          o [0=no,1=yes]       =1
               );
   
  -NOTICE: Because B<OSSP fsl> implements the syslog(3) library API itself,
  -use cannot use the I<target>=C<local> feature of B<OSSP l2>, because it
  -would lead to a endless run-time loop! Be careful here, please.
  +WARNING: Because B<OSSP fsl> is a syslog(3) redirector it must not use
  +the I<target>=C<local> feature of B<OSSP l2>. It would point back to
  +itself and end up in a infinite run-time loop! However, it's safe to use
  +I<target>=C<remote> with I<remotehost> being set to the local host.
   
   =head1 OSSP L2: EXAMPLES
   

From ossp-cvs-owner@ossp.org  Wed Oct  2 14:25:03 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0C596769E2; Wed,  2 Oct 2002 14:25:02 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/SHARE ossp_pkg.wml
Message-Id: <20021002122502.0C596769E2@mail.ossp.org>
Date: Wed,  2 Oct 2002 14:25:02 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   02-Oct-2002 14:25:02
  Branch: HEAD                             Handle: 2002100213250200

  Modified files:
    ossp-web/SHARE          ossp_pkg.wml

  Log:
    support for CVSTrac based bug reporting and manpage rendering

  Summary:
    Revision    Changes     Path
    1.7         +16 -2      ossp-web/SHARE/ossp_pkg.wml
  ____________________________________________________________________________

  Index: ossp-web/SHARE/ossp_pkg.wml
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 ossp_pkg.wml
  --- ossp-web/SHARE/ossp_pkg.wml	11 Aug 2002 13:49:08 -0000	1.6
  +++ ossp-web/SHARE/ossp_pkg.wml	2 Oct 2002 12:25:02 -0000	1.7
  @@ -151,16 +151,22 @@
   </define-tag>
   
   <define-tag pkg_status>
  -<preserve stable unstable stable_date unstable_date done>
  +<preserve name assign stable unstable stable_date unstable_date done>
   <set-var %attributes>
   <table cellspacing=0 cellpadding=0 border=0> 
     <tr>
       <td>Stable Version:&nbsp;&nbsp;</td><td class=heavy><get-var stable></td><td>&nbsp;(<get-var stable_date>)</td>
  +	<td>
  +        &nbsp;&nbsp;[<a href="http://cvs.ossp.org/tktnew?w=<get-var assign>&s=<get-var name>&v=<get-var stable>">Bug Reporting</a>]
  +    </td>
     </tr>
     <ifeq "<get-var unstable>" "none" "" <group
       <tr>
         <td>Unstable Version:&nbsp;&nbsp;</td><td class=heavy><get-var unstable></td><td>&nbsp;(<get-var unstable_date>)</td>
       </tr>
  +	<td>
  +        &nbsp;&nbsp;[<a href="http://cvs.ossp.org/tktnew?w=<get-var assign>&s=<get-var name>&v=<get-var unstable>">Bug Reporting</a>]
  +    </td>
     >>
     <ifeq "<get-var done>" "100" "" <group
       <tr>
  @@ -168,7 +174,8 @@
       </tr>
     >>
   </table>
  -<restore stable unstable stable_date unstable_date done>
  +#  <a href="ftp://ftp.ossp.org/pkg/<get-var type>/<get-var name>/<get-var name>-<get-var stable>.tar.gz"><get-var stable></a>
  +<restore name assign stable unstable stable_date unstable_date done>
   </define-tag>
   
   <define-tag pkg_author>
  @@ -211,5 +218,12 @@
   </tr>
   </table>
   <restore name return>
  +</define-tag>
  +
  +<define-tag pkg_manpage>
  +<preserve name sect path>
  +<set-var %attributes>
  +  <a href="$(ROOT)/man/man.cgi<get-var path>"><get-var name></a>(<get-var sect>)
  +<restore name sect path>
   </define-tag>
   

From ossp-cvs-owner@ossp.org  Wed Oct  2 14:25:21 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3656B76A04; Wed,  2 Oct 2002 14:25:21 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/pth index.wml
Message-Id: <20021002122521.3656B76A04@mail.ossp.org>
Date: Wed,  2 Oct 2002 14:25:21 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   02-Oct-2002 14:25:21
  Branch: HEAD                             Handle: 2002100213252000

  Modified files:
    ossp-web/pkg/lib/pth    index.wml

  Log:
    use bug reporting and manpage rendering

  Summary:
    Revision    Changes     Path
    1.5         +8  -0      ossp-web/pkg/lib/pth/index.wml
  ____________________________________________________________________________

  Index: ossp-web/pkg/lib/pth/index.wml
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 index.wml
  --- ossp-web/pkg/lib/pth/index.wml	24 Sep 2002 15:26:10 -0000	1.4
  +++ ossp-web/pkg/lib/pth/index.wml	2 Oct 2002 12:25:20 -0000	1.5
  @@ -39,6 +39,13 @@
   href="http://www.gnu.org/software/pth/">http://www.gnu.org/software/pth/</a>
   and <a href="ftp://ftp.gnu.org/gnu/pth/">ftp://ftp.gnu.org/gnu/pth/</a>.
   
  +<h2>Documentation</h2>
  +
  +<pkg_manpage name="pth" sect=3 path="/pkg/lib/pth/pth.pod">,
  +<pkg_manpage name="pth-config" sect=1 path="/pkg/lib/pth/pth-config.pod">,
  +<pkg_manpage name="pthread" sect=3 path="/pkg/lib/pth/pthread.pod">,
  +<pkg_manpage name="pthread-config" sect=1 path="/pkg/lib/pth/pthread-config.pod">.
  +
   <h2>Authors</h2>
   
   <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  @@ -46,6 +53,7 @@
   <h2>Status</h2>
   
   <pkg_status
  +    name="pth" assign="rse"
       stable="1.4.1"   stable_date="27-Jan-2002"
       unstable="none"  unstable_date="none"
   	done=100>

From ossp-cvs-owner@ossp.org  Wed Oct  2 14:29:46 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 03FAE769E2; Wed,  2 Oct 2002 14:29:45 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/str index.wml
Message-Id: <20021002122945.03FAE769E2@mail.ossp.org>
Date: Wed,  2 Oct 2002 14:29:45 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   02-Oct-2002 14:29:45
  Branch: HEAD                             Handle: 2002100213294500

  Modified files:
    ossp-web/pkg/lib/str    index.wml

  Log:
    use bug reporting and manpage rendering

  Summary:
    Revision    Changes     Path
    1.5         +6  -0      ossp-web/pkg/lib/str/index.wml
  ____________________________________________________________________________

  Index: ossp-web/pkg/lib/str/index.wml
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 index.wml
  --- ossp-web/pkg/lib/str/index.wml	11 Aug 2002 13:49:14 -0000	1.4
  +++ ossp-web/pkg/lib/str/index.wml	2 Oct 2002 12:29:45 -0000	1.5
  @@ -13,6 +13,11 @@
   main intention is to provide a more convinient and compact API plus a more
   generalized functionality. 
   
  +<h2>Documentation</h2>
  +
  +<pkg_manpage name="str" sect=3 path="/pkg/lib/str/str.pod">,
  +<pkg_manpage name="str-config" sect=1 path="/pkg/lib/str/str-config.pod">.
  +
   <h2>Authors</h2>
   
   <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  @@ -20,6 +25,7 @@
   <h2>Status</h2>
   
   <pkg_status
  +    name="str" assign="rse"
       stable="none"    stable_date="none"
       unstable="0.9.7" unstable_date="01-Apr-2002"
   	done=80>

From ossp-cvs-owner@ossp.org  Wed Oct  2 14:44:46 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BBFDC769E6; Wed,  2 Oct 2002 14:44:45 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/act index.wml ossp-web/pkg/lib/adns index...
Message-Id: <20021002124445.BBFDC769E6@mail.ossp.org>
Date: Wed,  2 Oct 2002 14:44:45 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   02-Oct-2002 14:44:45
  Branch: HEAD                             Handle: 2002100213443411

  Modified files:
    ossp-web/pkg/lib/act    index.wml
    ossp-web/pkg/lib/adns   index.wml
    ossp-web/pkg/lib/cache  index.wml
    ossp-web/pkg/lib/cfg    index.wml
    ossp-web/pkg/lib/err    index.wml
    ossp-web/pkg/lib/ex     index.wml
    ossp-web/pkg/lib/fsl    index.wml
    ossp-web/pkg/lib/hook   index.wml
    ossp-web/pkg/lib/l2     index.wml
    ossp-web/pkg/lib/mm     index.wml
    ossp-web/pkg/lib/mux    index.wml
    ossp-web/pkg/lib/path   index.wml
    ossp-web/pkg/lib/pcbe   index.wml
    ossp-web/pkg/lib/pcre   index.wml
    ossp-web/pkg/lib/popt   index.wml
    ossp-web/pkg/lib/proc   index.wml
    ossp-web/pkg/lib/res    index.wml
    ossp-web/pkg/lib/sa     index.wml
    ossp-web/pkg/lib/sio    index.wml
    ossp-web/pkg/lib/val    index.wml
    ossp-web/pkg/lib/var    index.wml
    ossp-web/pkg/lib/xds    index.wml

  Log:
    use bug reporting and manpage rendering

  Summary:
    Revision    Changes     Path
    1.6         +5  -0      ossp-web/pkg/lib/act/index.wml
    1.4         +1  -0      ossp-web/pkg/lib/adns/index.wml
    1.4         +1  -0      ossp-web/pkg/lib/cache/index.wml
    1.7         +6  -0      ossp-web/pkg/lib/cfg/index.wml
    1.2         +1  -0      ossp-web/pkg/lib/err/index.wml
    1.6         +6  -0      ossp-web/pkg/lib/ex/index.wml
    1.12        +6  -0      ossp-web/pkg/lib/fsl/index.wml
    1.4         +1  -0      ossp-web/pkg/lib/hook/index.wml
    1.6         +1  -0      ossp-web/pkg/lib/l2/index.wml
    1.8         +6  -0      ossp-web/pkg/lib/mm/index.wml
    1.4         +1  -0      ossp-web/pkg/lib/mux/index.wml
    1.4         +1  -0      ossp-web/pkg/lib/path/index.wml
    1.4         +1  -0      ossp-web/pkg/lib/pcbe/index.wml
    1.4         +1  -0      ossp-web/pkg/lib/pcre/index.wml
    1.4         +1  -0      ossp-web/pkg/lib/popt/index.wml
    1.4         +1  -0      ossp-web/pkg/lib/proc/index.wml
    1.4         +1  -0      ossp-web/pkg/lib/res/index.wml
    1.5         +6  -0      ossp-web/pkg/lib/sa/index.wml
    1.4         +1  -0      ossp-web/pkg/lib/sio/index.wml
    1.6         +6  -0      ossp-web/pkg/lib/val/index.wml
    1.7         +6  -0      ossp-web/pkg/lib/var/index.wml
    1.4         +1  -0      ossp-web/pkg/lib/xds/index.wml
  ____________________________________________________________________________

  Index: ossp-web/pkg/lib/act/index.wml
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 index.wml
  --- ossp-web/pkg/lib/act/index.wml	11 Aug 2002 13:49:10 -0000	1.5
  +++ ossp-web/pkg/lib/act/index.wml	2 Oct 2002 12:44:34 -0000	1.6
  @@ -10,6 +10,10 @@
   OSSP act is a lower level data structure library for abstract container types.
   [...]
   
  +<h2>Documentation</h2>
  +
  +<pkg_manpage name="act" sect=3 path="/pkg/lib/act/act.pod">.
  +
   <h2>Authors</h2>
   
   <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  @@ -17,6 +21,7 @@
   <h2>Status</h2>
   
   <pkg_status
  +    name="act" assign="rse"
       stable="none"    stable_date="none"
       unstable="none"  unstable_date="none"
   	done=25>
  Index: ossp-web/pkg/lib/adns/index.wml
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 index.wml
  --- ossp-web/pkg/lib/adns/index.wml	13 Jul 2002 20:09:23 -0000	1.3
  +++ ossp-web/pkg/lib/adns/index.wml	2 Oct 2002 12:44:34 -0000	1.4
  @@ -25,6 +25,7 @@
   <h2>Status</h2>
   
   <pkg_status
  +    name="adns" assign="rse"
       stable="none"    stable_date="none"
       unstable="none"  unstable_date="none"
   	done=100>
  Index: ossp-web/pkg/lib/cache/index.wml
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 index.wml
  --- ossp-web/pkg/lib/cache/index.wml	13 Jul 2002 20:09:23 -0000	1.3
  +++ ossp-web/pkg/lib/cache/index.wml	2 Oct 2002 12:44:35 -0000	1.4
  @@ -18,6 +18,7 @@
   <h2>Status</h2>
   
   <pkg_status
  +    name="cache" assign="rse"
       stable="none"    stable_date="none"
       unstable="none"  unstable_date="none"
   	done=15>
  Index: ossp-web/pkg/lib/cfg/index.wml
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 index.wml
  --- ossp-web/pkg/lib/cfg/index.wml	11 Aug 2002 13:49:11 -0000	1.6
  +++ ossp-web/pkg/lib/cfg/index.wml	2 Oct 2002 12:44:35 -0000	1.7
  @@ -22,6 +22,11 @@
   into an Abstract Syntax Tree (AST), traversing the AST and optionally
   exporting the AST again as a configuration text.
   
  +<h2>Documentation</h2>
  +
  +<pkg_manpage name="cfg" sect=3 path="/pkg/lib/cfg/cfg.pod">,
  +<pkg_manpage name="cfg-config" sect=1 path="/pkg/lib/cfg/cfg-config.pod">.
  +
   <h2>Authors</h2>
   
   <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  @@ -29,6 +34,7 @@
   <h2>Status</h2>
   
   <pkg_status
  +    name="cfg" assign="rse"
       stable="none"    stable_date="none"
       unstable="0.9.0" unstable_date="30-Jul-2002"
   	done=95>
  Index: ossp-web/pkg/lib/err/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/lib/err/index.wml	13 Jul 2002 20:09:24 -0000	1.1
  +++ ossp-web/pkg/lib/err/index.wml	2 Oct 2002 12:44:36 -0000	1.2
  @@ -16,6 +16,7 @@
   <h2>Status</h2>
   
   <pkg_status
  +    name="err" assign="rse"
       stable="none"    stable_date="none"
       unstable="none"  unstable_date="none"
   	done=50>
  Index: ossp-web/pkg/lib/ex/index.wml
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 index.wml
  --- ossp-web/pkg/lib/ex/index.wml	11 Aug 2002 13:49:11 -0000	1.5
  +++ ossp-web/pkg/lib/ex/index.wml	2 Oct 2002 12:44:36 -0000	1.6
  @@ -24,6 +24,11 @@
   Additionally the OSSP ex facility provides advanced exception handling
   features like shielded and deferred exceptions.
   
  +<h2>Documentation</h2>
  +
  +<pkg_manpage name="ex" sect=3 path="/pkg/lib/ex/ex.pod">,
  +<pkg_manpage name="ex-config" sect=1 path="/pkg/lib/ex/ex-config.pod">.
  +
   <h2>Authors</h2>
   
   <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  @@ -31,6 +36,7 @@
   <h2>Status</h2>
   
   <pkg_status
  +    name="ex" assign="rse"
       stable="1.0.0"   stable_date="30-Mar-2002"
       unstable="none"  unstable_date=""
   	done=100>
  Index: ossp-web/pkg/lib/fsl/index.wml
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 index.wml
  --- ossp-web/pkg/lib/fsl/index.wml	7 Sep 2002 20:32:50 -0000	1.11
  +++ ossp-web/pkg/lib/fsl/index.wml	2 Oct 2002 12:44:37 -0000	1.12
  @@ -26,6 +26,11 @@
   allowed to directly use the original syslog(3) facility in order to allow
   multiple installation instances.
   
  +<h2>Documentation</h2>
  +
  +<pkg_manpage name="fsl" sect=3 path="/pkg/lib/fsl/fsl.pod">,
  +<pkg_manpage name="fsl-config" sect=1 path="/pkg/lib/fsl/fsl-config.pod">.
  +
   <h2>Authors</h2>
   
   <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  @@ -38,6 +43,7 @@
   <h2>Status</h2>
   
   <pkg_status
  +    name="fsl" assign="thl"
       genesis="Jul-2002"
       stable="1.0.3"   stable_date="07-Sep-2002"
       unstable="none"  unstable_date="none"
  Index: ossp-web/pkg/lib/hook/index.wml
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 index.wml
  --- ossp-web/pkg/lib/hook/index.wml	13 Jul 2002 20:09:25 -0000	1.3
  +++ ossp-web/pkg/lib/hook/index.wml	2 Oct 2002 12:44:38 -0000	1.4
  @@ -16,6 +16,7 @@
   <h2>Status</h2>
   
   <pkg_status
  +    name="hook" assign="rse"
       stable="none"    stable_date="none"
       unstable="none"  unstable_date="none"
   	done=50>
  Index: ossp-web/pkg/lib/l2/index.wml
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 index.wml
  --- ossp-web/pkg/lib/l2/index.wml	11 Aug 2002 13:49:12 -0000	1.5
  +++ ossp-web/pkg/lib/l2/index.wml	2 Oct 2002 12:44:38 -0000	1.6
  @@ -37,6 +37,7 @@
   <h2>Status</h2>
   
   <pkg_status
  +    name="l2" assign="rse"
       stable="none"    stable_date="none"
       unstable="0.9.0" unstable_date="30-Jul-2002"
   	done=95>
  Index: ossp-web/pkg/lib/mm/index.wml
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 index.wml
  --- ossp-web/pkg/lib/mm/index.wml	11 Aug 2002 13:49:13 -0000	1.7
  +++ ossp-web/pkg/lib/mm/index.wml	2 Oct 2002 12:44:39 -0000	1.8
  @@ -15,6 +15,11 @@
   convenient and well known way to work with data structures inside those shared
   memory segments.
   
  +<h2>Documentation</h2>
  +
  +<pkg_manpage name="mm" sect=3 path="/pkg/lib/mm/mm.pod">,
  +<pkg_manpage name="mm-config" sect=1 path="/pkg/lib/mm/mm-config.pod">.
  +
   <h2>Authors</h2>
   
   <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  @@ -22,6 +27,7 @@
   <h2>Status</h2>
   
   <pkg_status
  +    name="mm" assign="rse"
       stable="1.2.1"   stable_date="28-Jul-2002"
       unstable="none"  unstable_date="none"
   	done=100>
  Index: ossp-web/pkg/lib/mux/index.wml
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 index.wml
  --- ossp-web/pkg/lib/mux/index.wml	13 Jul 2002 20:09:27 -0000	1.3
  +++ ossp-web/pkg/lib/mux/index.wml	2 Oct 2002 12:44:39 -0000	1.4
  @@ -18,6 +18,7 @@
   <h2>Status</h2>
   
   <pkg_status
  +    name="mux" assign="rse"
       stable="none"    stable_date="none"
       unstable="none"  unstable_date="none"
   	done=15>
  Index: ossp-web/pkg/lib/path/index.wml
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 index.wml
  --- ossp-web/pkg/lib/path/index.wml	13 Jul 2002 20:09:27 -0000	1.3
  +++ ossp-web/pkg/lib/path/index.wml	2 Oct 2002 12:44:40 -0000	1.4
  @@ -19,6 +19,7 @@
   <h2>Status</h2>
   
   <pkg_status
  +    name="path" assign="rse"
       stable="none"    stable_date="none"
       unstable="none"  unstable_date="none"
   	done=70>
  Index: ossp-web/pkg/lib/pcbe/index.wml
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 index.wml
  --- ossp-web/pkg/lib/pcbe/index.wml	13 Jul 2002 20:09:28 -0000	1.3
  +++ ossp-web/pkg/lib/pcbe/index.wml	2 Oct 2002 12:44:40 -0000	1.4
  @@ -18,6 +18,7 @@
   <h2>Status</h2>
   
   <pkg_status
  +    name="pcbe" assign="rse"
       stable="none"    stable_date="none"
       unstable="none"  unstable_date="none"
   	done=15>
  Index: ossp-web/pkg/lib/pcre/index.wml
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 index.wml
  --- ossp-web/pkg/lib/pcre/index.wml	13 Jul 2002 20:09:29 -0000	1.3
  +++ ossp-web/pkg/lib/pcre/index.wml	2 Oct 2002 12:44:41 -0000	1.4
  @@ -27,6 +27,7 @@
   <h2>Status</h2>
   
   <pkg_status
  +    name="pcre" assign="rse"
       stable="none"    stable_date="none"
       unstable="none"  unstable_date="none"
   	done=100>
  Index: ossp-web/pkg/lib/popt/index.wml
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 index.wml
  --- ossp-web/pkg/lib/popt/index.wml	13 Jul 2002 20:09:29 -0000	1.3
  +++ ossp-web/pkg/lib/popt/index.wml	2 Oct 2002 12:44:41 -0000	1.4
  @@ -33,6 +33,7 @@
   <h2>Status</h2>
   
   <pkg_status
  +    name="popt" assign="rse"
       stable="none"    stable_date="none"
       unstable="none"  unstable_date="none"
   	done=100>
  Index: ossp-web/pkg/lib/proc/index.wml
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 index.wml
  --- ossp-web/pkg/lib/proc/index.wml	13 Jul 2002 20:09:30 -0000	1.3
  +++ ossp-web/pkg/lib/proc/index.wml	2 Oct 2002 12:44:42 -0000	1.4
  @@ -19,6 +19,7 @@
   <h2>Status</h2>
   
   <pkg_status
  +    name="proc" assign="rse"
       stable="none"    stable_date="none"
       unstable="none"  unstable_date="none"
   	done=30>
  Index: ossp-web/pkg/lib/res/index.wml
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 index.wml
  --- ossp-web/pkg/lib/res/index.wml	13 Jul 2002 20:09:31 -0000	1.3
  +++ ossp-web/pkg/lib/res/index.wml	2 Oct 2002 12:44:42 -0000	1.4
  @@ -18,6 +18,7 @@
   <h2>Status</h2>
   
   <pkg_status
  +    name="res" assign="rse"
       stable="none"    stable_date="none"
       unstable="none"  unstable_date="none"
   	done=15>
  Index: ossp-web/pkg/lib/sa/index.wml
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 index.wml
  --- ossp-web/pkg/lib/sa/index.wml	11 Aug 2002 13:49:14 -0000	1.4
  +++ ossp-web/pkg/lib/sa/index.wml	2 Oct 2002 12:44:43 -0000	1.5
  @@ -13,6 +13,11 @@
   key features: address abstraction (local, IPv4, and IPv6), type abstraction,
   I/O timeouts, I/O stream buffering and convenience I/O functions.
   
  +<h2>Documentation</h2>
  +
  +<pkg_manpage name="sa" sect=3 path="/pkg/lib/sa/sa.pod">,
  +<pkg_manpage name="sa-config" sect=1 path="/pkg/lib/sa/sa-config.pod">.
  +
   <h2>Authors</h2>
   
   <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  @@ -20,6 +25,7 @@
   <h2>Status</h2>
   
   <pkg_status
  +    name="sa" assign="rse"
       stable="none"    stable_date="none"
       unstable="0.9.1" unstable_date="15-Mar-2002"
   	done=95>
  Index: ossp-web/pkg/lib/sio/index.wml
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 index.wml
  --- ossp-web/pkg/lib/sio/index.wml	13 Jul 2002 20:09:32 -0000	1.3
  +++ ossp-web/pkg/lib/sio/index.wml	2 Oct 2002 12:44:43 -0000	1.4
  @@ -16,6 +16,7 @@
   <h2>Status</h2>
   
   <pkg_status
  +    name="sio" assign="rse"
       stable="none"    stable_date="none"
       unstable="none"  unstable_date="none"
   	done=15>
  Index: ossp-web/pkg/lib/val/index.wml
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 index.wml
  --- ossp-web/pkg/lib/val/index.wml	11 Aug 2002 13:49:15 -0000	1.5
  +++ ossp-web/pkg/lib/val/index.wml	2 Oct 2002 12:44:44 -0000	1.6
  @@ -19,6 +19,11 @@
   flexible configuration parsing and supporting loosly-coupled DSO-based module
   architectures.
   
  +<h2>Documentation</h2>
  +
  +<pkg_manpage name="val" sect=3 path="/pkg/lib/val/val.pod">,
  +<pkg_manpage name="val-config" sect=1 path="/pkg/lib/val/val-config.pod">.
  +
   <h2>Authors</h2>
   
   <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  @@ -27,6 +32,7 @@
   <h2>Status</h2>
   
   <pkg_status
  +    name="val" assign="rse"
       stable="none"    stable_date="none"
       unstable="0.9.0"  unstable_date="15-Mar-2002"
   	done=100>
  Index: ossp-web/pkg/lib/var/index.wml
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 index.wml
  --- ossp-web/pkg/lib/var/index.wml	11 Aug 2002 13:49:15 -0000	1.6
  +++ ossp-web/pkg/lib/var/index.wml	2 Oct 2002 12:44:44 -0000	1.7
  @@ -37,6 +37,11 @@
   </font>
   </blockquote>
   
  +<h2>Documentation</h2>
  +
  +<pkg_manpage name="var" sect=3 path="/pkg/lib/var/var.pod">,
  +<pkg_manpage name="var-config" sect=1 path="/pkg/lib/var/var-config.pod">.
  +
   <h2>Authors</h2>
   
   <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  @@ -45,6 +50,7 @@
   <h2>Status</h2>
   
   <pkg_status
  +    name="var" assign="rse"
       stable="none"    stable_date="none"
       unstable="0.9.0" unstable_date="08-Mar-2002"
   	done=100>
  Index: ossp-web/pkg/lib/xds/index.wml
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 index.wml
  --- ossp-web/pkg/lib/xds/index.wml	13 Jul 2002 20:09:34 -0000	1.3
  +++ ossp-web/pkg/lib/xds/index.wml	2 Oct 2002 12:44:45 -0000	1.4
  @@ -28,6 +28,7 @@
   <h2>Status</h2>
   
   <pkg_status
  +    name="xds" assign="rse"
       stable="none"    stable_date="none"
       unstable="none"  unstable_date="none"
   	done=100>

From ossp-cvs-owner@ossp.org  Wed Oct  2 14:46:20 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 01995769E2; Wed,  2 Oct 2002 14:46:19 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/tool/lmtp2nntp index.wml ossp-web/pkg/tool/sh...
Message-Id: <20021002124619.01995769E2@mail.ossp.org>
Date: Wed,  2 Oct 2002 14:46:19 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   02-Oct-2002 14:46:19
  Branch: HEAD                             Handle: 2002100213461900

  Modified files:
    ossp-web/pkg/tool/lmtp2nntp
                            index.wml
    ossp-web/pkg/tool/shtool index.wml

  Log:
    use bug reporting and manpage rendering

  Summary:
    Revision    Changes     Path
    1.11        +5  -0      ossp-web/pkg/tool/lmtp2nntp/index.wml
    1.8         +6  -0      ossp-web/pkg/tool/shtool/index.wml
  ____________________________________________________________________________

  Index: ossp-web/pkg/tool/lmtp2nntp/index.wml
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 index.wml
  --- ossp-web/pkg/tool/lmtp2nntp/index.wml	14 Aug 2002 21:29:23 -0000	1.10
  +++ ossp-web/pkg/tool/lmtp2nntp/index.wml	2 Oct 2002 12:46:19 -0000	1.11
  @@ -22,6 +22,10 @@
   delivery status notification which indicates successful completed
   action, persistent transient failure or permanent failure.
   
  +<h2>Documentation</h2>
  +
  +<pkg_manpage name="lmtp2nntp" sect=1 path="/pkg/lib/lmtp2nntp/lmtp2nntp.pod">.
  +
   <h2>Authors</h2>
   
   <pkg_author name="Thomas Lotterer" mail="thomas.lotterer@cw.com">
  @@ -30,6 +34,7 @@
   <h2>Status</h2>
   
   <pkg_status
  +    name="lmtp2nntp" assign="thl"
       stable="1.1.1"   stable_date="13-Dec-2001"
       unstable="1.2a6" unstable_date="14-Aug-2002"
   	done=100>
  Index: ossp-web/pkg/tool/shtool/index.wml
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 index.wml
  --- ossp-web/pkg/tool/shtool/index.wml	11 Aug 2002 13:49:17 -0000	1.7
  +++ ossp-web/pkg/tool/shtool/index.wml	2 Oct 2002 12:46:19 -0000	1.8
  @@ -27,6 +27,11 @@
   href="http://www.gnu.org/software/shtool/">http://www.gnu.org/software/shtool/</a>
   and <a href="ftp://ftp.gnu.org/gnu/shtool/">ftp://ftp.gnu.org/gnu/shtool/</a>.
   
  +<h2>Documentation</h2>
  +
  +<pkg_manpage name="shtool" sect=1 path="/pkg/lib/shtool/shtool.pod">,
  +<pkg_manpage name="shtoolize" sect=1 path="/pkg/lib/shtool/shtoolize.pod">.
  +
   <h2>Authors</h2>
   
   <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  @@ -34,6 +39,7 @@
   <h2>Status</h2>
   
   <pkg_status
  +    name="shtool" assign="rse"
       stable="1.6.1"   stable_date="12-Jul-2002"
       unstable="none"  unstable_date="none"
   	done=100>

From ossp-cvs-owner@ossp.org  Wed Oct  2 14:48:46 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 18BDC769C4; Wed,  2 Oct 2002 14:48:46 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/SHARE ossp_canvas.wml ossp_navbar.wml ossp_pkg.wm...
Message-Id: <20021002124846.18BDC769C4@mail.ossp.org>
Date: Wed,  2 Oct 2002 14:48:46 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   02-Oct-2002 14:48:46
  Branch: HEAD                             Handle: 2002100213484500

  Modified files:
    ossp-web/SHARE          ossp_canvas.wml ossp_navbar.wml ossp_pkg.wml

  Log:
    flush pending changes

  Summary:
    Revision    Changes     Path
    1.7         +7  -0      ossp-web/SHARE/ossp_canvas.wml
    1.10        +1  -1      ossp-web/SHARE/ossp_navbar.wml
    1.8         +10 -4      ossp-web/SHARE/ossp_pkg.wml
  ____________________________________________________________________________

  Index: ossp-web/SHARE/ossp_canvas.wml
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 ossp_canvas.wml
  --- ossp-web/SHARE/ossp_canvas.wml	11 Aug 2002 13:49:08 -0000	1.6
  +++ ossp-web/SHARE/ossp_canvas.wml	2 Oct 2002 12:48:45 -0000	1.7
  @@ -121,6 +121,13 @@
   	  <p>
         <a href="http://www.cw.com/"><img src="$(IMG)/cw.png" alt="Cable & Wireless" border=0></a><br>
   	  <font size=-1>[ <a href="$(ROOT)/com/sponsors.html">gold sponsor</a> ]</font>
  +	  <p>
  +	  <table width=100% cellspacing=0 cellpadding=0 border=0>
  +	  <tr><td>Home:</td><td align=right><span class=nb1n><a href="http://www.ossp.org/">www.ossp.org</a></span></td></tr>
  +	  <tr><td>Repo:</td><td align=right><span class=nb1n><a href="http://cvs.ossp.org/">cvs.ossp.org</a></span></td></tr>
  +	  <tr><td>Dist:</td><td align=right><span class=nb1n><a href="ftp://ftp.ossp.org/">ftp.ossp.org</a></span></td></tr>
  +	  </table>
  +	  </span>
         <br>
         <imgdot width=120>
       </td>
  Index: ossp-web/SHARE/ossp_navbar.wml
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 ossp_navbar.wml
  --- ossp-web/SHARE/ossp_navbar.wml	24 Sep 2002 12:53:45 -0000	1.9
  +++ ossp-web/SHARE/ossp_navbar.wml	2 Oct 2002 12:48:45 -0000	1.10
  @@ -161,7 +161,7 @@
     <navbar:button txt="Documents"        url=doc/                     id=doc  menu=doc>
     <navbar:button txt="Packages"         url=pkg/                     id=pkg  menu=pkg>
     #TODO# <navbar:button txt="Sources"          url=src/                     id=src  menu=src>
  -  #TODO# <navbar:button txt="Support"          url=sup/                     id=sup  menu=sup>
  +  <navbar:button txt="Support"          url=sup/                     id=sup  menu=sup>
     <navbar:button txt="Community"        url=com/                     id=com  menu=com>
     <navbar:button txt="Related"          url=rel/                     id=rel  menu=rel>
     #TODO# <navbar:button txt="Website"          url=sit/                     id=sit  menu=sit>
  Index: ossp-web/SHARE/ossp_pkg.wml
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 ossp_pkg.wml
  --- ossp-web/SHARE/ossp_pkg.wml	2 Oct 2002 12:25:02 -0000	1.7
  +++ ossp-web/SHARE/ossp_pkg.wml	2 Oct 2002 12:48:45 -0000	1.8
  @@ -157,16 +157,22 @@
     <tr>
       <td>Stable Version:&nbsp;&nbsp;</td><td class=heavy><get-var stable></td><td>&nbsp;(<get-var stable_date>)</td>
   	<td>
  -        &nbsp;&nbsp;[<a href="http://cvs.ossp.org/tktnew?w=<get-var assign>&s=<get-var name>&v=<get-var stable>">Bug Reporting</a>]
  +        <ifeq "<get-var name>" "" "" <group
  +          <ifeq "<get-var stable>" "none" "" <group
  +            &nbsp;&nbsp;[<a href="http://cvs.ossp.org/tktnew?w=<get-var assign>&s=<get-var name>&v=<get-var stable>">Bug&nbsp;Reporting</a>]
  +		  >>
  +		>>
       </td>
     </tr>
     <ifeq "<get-var unstable>" "none" "" <group
       <tr>
         <td>Unstable Version:&nbsp;&nbsp;</td><td class=heavy><get-var unstable></td><td>&nbsp;(<get-var unstable_date>)</td>
  +  	  <td>
  +          <ifeq "<get-var name>" "" "" <group
  +            &nbsp;&nbsp;[<a href="http://cvs.ossp.org/tktnew?w=<get-var assign>&s=<get-var name>&v=<get-var unstable>">Bug&nbsp;Reporting</a>]
  +	      >>
  +      </td>
       </tr>
  -	<td>
  -        &nbsp;&nbsp;[<a href="http://cvs.ossp.org/tktnew?w=<get-var assign>&s=<get-var name>&v=<get-var unstable>">Bug Reporting</a>]
  -    </td>
     >>
     <ifeq "<get-var done>" "100" "" <group
       <tr>

From ossp-cvs-owner@ossp.org  Sat Oct  5 17:49:24 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5BDD0769E5; Sat,  5 Oct 2002 17:49:24 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg TODO cfg.pod
Message-Id: <20021005154924.5BDD0769E5@mail.ossp.org>
Date: Sat,  5 Oct 2002 17:49:24 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Oct-2002 17:49:24
  Branch: HEAD                             Handle: 2002100516492300

  Modified files:
    ossp-pkg/cfg            TODO cfg.pod

  Log:
    flush pending changes

  Summary:
    Revision    Changes     Path
    1.3         +4  -4      ossp-pkg/cfg/TODO
    1.8         +9  -0      ossp-pkg/cfg/cfg.pod
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/TODO
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 TODO
  --- ossp-pkg/cfg/TODO	16 Aug 2002 09:45:06 -0000	1.2
  +++ ossp-pkg/cfg/TODO	5 Oct 2002 15:49:23 -0000	1.3
  @@ -17,13 +17,13 @@
     o add line tracking support
     o add pre-processor with at least includes
     o add config tree verification!
  +  o cfg.tok: in scanner: use an combination of dynamic buffer and atomic
  +    symbol/token sub-library to allow first tokens of mostly arbitrary
  +    size and then to store the tokens redundancy-free.
  +  o named parameters [--]name=value (options)
   
     ==================================================================================
   
  -- destroy haengt in Endlosschleife
  -- in scanner: use an combination of dynamic buffer and atomic symbol/token sub-library 
  -  to allow first tokens of mostly arbitrary size and then to store the tokens
  -  redundancy-free.
   - Problem: \x00 oder \x{00} wird zu NUL-terminator -> use ptr+len instead
   - caStr/cpStr durch yyless/yymore??
   - syntax verification
  Index: ossp-pkg/cfg/cfg.pod
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 cfg.pod
  --- ossp-pkg/cfg/cfg.pod	9 Aug 2002 13:30:18 -0000	1.7
  +++ ossp-pkg/cfg/cfg.pod	5 Oct 2002 15:49:23 -0000	1.8
  @@ -269,6 +269,15 @@
   
   B<token>            ::= "Plain-Text Token String"
   
  +=head1 IMPLEMENTATION ISSUES
  +
  +Goal: non-hardcoded syntax tokens, only hard-coded syntax structure
  +Goal: time-efficient parsing
  +Goal: space-efficient storage
  +Goal: representation of configuration as AST
  +Goal: manipulation (annotation, etc) of AST via API
  +Goal: dynamic syntax verification
  +
   =head1 HISTORY
   
   B<OSSP cfg> was implemented in lots of small steps over a very

From ossp-cvs-owner@ossp.org  Sun Oct  6 10:10:43 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 373B6769E5; Sun,  6 Oct 2002 10:10:43 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg configure.ac devtool.conf
Message-Id: <20021006081043.373B6769E5@mail.ossp.org>
Date: Sun,  6 Oct 2002 10:10:43 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Oct-2002 10:10:43
  Branch: HEAD                             Handle: 2002100609104200

  Modified files:
    ossp-pkg/cfg            configure.ac devtool.conf

  Log:
    update tool version checks

  Summary:
    Revision    Changes     Path
    1.4         +2  -2      ossp-pkg/cfg/configure.ac
    1.5         +1  -1      ossp-pkg/cfg/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/configure.ac
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 configure.ac
  --- ossp-pkg/cfg/configure.ac	2 Aug 2002 19:07:12 -0000	1.3
  +++ ossp-pkg/cfg/configure.ac	6 Oct 2002 08:10:42 -0000	1.4
  @@ -28,7 +28,7 @@
   dnl ##  configure.ac: GNU Autoconf source script
   dnl ##
   
  -AC_PREREQ(2.53)
  +AC_PREREQ(2.54)
   AC_INIT
   CFG_VERSION_STR=`./shtool version -l c -d long cfg_vers.c`
   ./shtool echo -e "Configuring %BOSSP cfg%b (Configuration Parsing), version %B${CFG_VERSION_STR}%b"
  @@ -41,7 +41,7 @@
   sinclude(libtool.m4)
   AC_PROG_LIBTOOL
   
  -AC_CHECK_BISON(BISON, 1.30, [1.3[[0-9]]|1.[[4-9]]])
  +AC_CHECK_BISON(BISON, 1.30, [1.3[[0-9]]|1.[[4-9]][[0-9]]])
   AC_CHECK_FLEX(FLEX, 2.5.10, [2.5.1[[0-9]]|2.[[6-9]].*])
   
   sinclude(cfg.ac)
  Index: ossp-pkg/cfg/devtool.conf
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 devtool.conf
  --- ossp-pkg/cfg/devtool.conf	2 Aug 2002 19:07:12 -0000	1.4
  +++ ossp-pkg/cfg/devtool.conf	6 Oct 2002 08:10:42 -0000	1.5
  @@ -5,7 +5,7 @@
   %autogen
       @autogen shtool   1.6.1 "1.6.*" all
       @autogen libtool  1.4.2 "1.4*"
  -    @autogen autoconf 2.53  "2.5[3-9]*"
  +    @autogen autoconf 2.54  "2.5[4-9]*"
   
   %autoclean
       @autoclean shtool

From ossp-cvs-owner@ossp.org  Sun Oct  6 10:42:06 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8BA67769E5; Sun,  6 Oct 2002 10:42:06 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg configure.ac
Message-Id: <20021006084206.8BA67769E5@mail.ossp.org>
Date: Sun,  6 Oct 2002 10:42:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Oct-2002 10:42:06
  Branch: HEAD                             Handle: 2002100609420600

  Modified files:
    ossp-pkg/cfg            configure.ac

  Log:
    allow flex 2.5.21 to be accepted, too

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-pkg/cfg/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/configure.ac
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 configure.ac
  --- ossp-pkg/cfg/configure.ac	6 Oct 2002 08:10:42 -0000	1.4
  +++ ossp-pkg/cfg/configure.ac	6 Oct 2002 08:42:06 -0000	1.5
  @@ -42,7 +42,7 @@
   AC_PROG_LIBTOOL
   
   AC_CHECK_BISON(BISON, 1.30, [1.3[[0-9]]|1.[[4-9]][[0-9]]])
  -AC_CHECK_FLEX(FLEX, 2.5.10, [2.5.1[[0-9]]|2.[[6-9]].*])
  +AC_CHECK_FLEX(FLEX, 2.5.10, [2.5.1[[0-9]]|2.5.[[2-9]][[0-9]]|2.[[6-9]].*])
   
   sinclude(cfg.ac)
   CFG_CHECK_ALL

From ossp-cvs-owner@ossp.org  Sun Oct  6 20:40:36 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E256B76A12; Sun,  6 Oct 2002 20:40:35 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sorp BRAINSTORM.txt SPEC.txt
Message-Id: <20021006184035.E256B76A12@mail.ossp.org>
Date: Sun,  6 Oct 2002 20:40:35 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Oct-2002 20:40:35
  Branch: HEAD                             Handle: 2002100619403500

  Added files:
    ossp-pkg/sorp           BRAINSTORM.txt SPEC.txt

  Log:
    fill OSSP sorp area with already existing material

  Summary:
    Revision    Changes     Path
    1.1         +65 -0      ossp-pkg/sorp/BRAINSTORM.txt
    1.1         +141 -0     ossp-pkg/sorp/SPEC.txt
  ____________________________________________________________________________

  Index: ossp-pkg/sorp/BRAINSTORM.txt
  ============================================================
  $ cvs update -p -r1.1 BRAINSTORM.txt
  
  OSSP sorp BRAINSTORMING
  =======================
  
  Currently:
  - PESP: Apache+mod_rewrite+MySQL+mod_proxy
  - IT Intranet: Apache+mod_rewrite+mod_proxy
  - IS Intranet: Apache+mod_php+MySQL
  
  Purposes:
  - HTTPS to HTTP gateway
  - HTTPS sticky pass-through
  - user single-sign on & sticky authentication (user-id|client-cert -> session id)
  - remote session tracking (session id -> user id + information) 
  - load balancing over multiple backend servers
  - backend response caching
  
  Possibilities:
  - Apache+mod_rewrite+mod_proxy+?
  - Pound: http://www.apsis.ch/pound/
  - Squid?
  - Apache mod_proxy_add_forward: http://develooper.com/code/mpaf/
    Apache mod_rpad: http://stderr.net/apache/rpaf/
  - Stunnel
  - Symbion SSL Proxy: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/sslproxy/
  
  Libraries:
  - libcurl
  - pth
  - sa
  - cfg
  
  Prerequisites:
  - polling abstraction library (kqueue, poll, select, /dev/poll, etc) for Pth and stand-alone
  - SSL support for OSSP sa
  
  Applications:
  - NMIT PESP web portal frontend server
  - IT Operations Intranet frontend server
  - IS Operations North Europe Intranet frontend server
    - MOF
    - ChangeLog
    - Team.xmldb
    - ChangeLog
  
  Tables
  ======
  
  Session
  -------
  session_id       /* unique session id */
  session_expire   /* expire time of session */
  session_scope    /* scope/grade/level of session (login, visit, etc.) */
  account_id       /* unique account id (attached user account) */
  
  Account
  -------
  account_id       /* unique account id */
  account_pw       /* password of account */
  account_name     /* realname of account holder */
  account_location /* realname of account holder */
  ...
  groups...
  
  
  Index: ossp-pkg/sorp/SPEC.txt
  ============================================================
  $ cvs update -p -r1.1 SPEC.txt
  
  OSSP sorp SPECIFICATION
  =======================
  
  Mandatory Requirements
  ----------------------
  
  o URL rewriting on redirects and in HTML content (hyperlinks)
    (important for full backend hiding and avoiding of by-passing traffic)
  
  o full HTTP/1.0 and HTTP/1.1 compliant frontend service
    (important for full conformance with browser features and performance)
    => apache, squid, ??
  
  o HTTPS/HTTP 1.0/1.1 to HTTPS/HTTP 1.0/1.1 proxy functionality for
    backend service
    (to reduce load and complexity on backends)
    => apache, squid, ??
  
  o forwarding of client IP and HTTP/1.1 "Host:" header to backend servers
    (for correct logging and virtual hosting on backends)
    => apache mod_xxx, ??
  
  o backend service selection based on
    - HTTP/1.1 Host header
      (for real virtual hosting on frontend)
    - URL rewriting rule (or at least URL prefix matching)
      (for seamless linking of backends into frontend URL namespace)
    - user authentication information
      (for sticky user backends, etc.)
    => apache mod_rewrite?
  
  o user single sign-on with stickyness and automatic sign-on expiring
    (for comfortable sign-on over browser restarts and security)
  
  o authentication via one or more of the following credentials:
    - userid+passwd
      (for standard authentication)
    - SSL client certificate
      (for elegant authentication)
    - host-based ACL
      (for by-pass authentication)
  
  - authentication backends:
    - Kerberos Tickets?
    - LDAP?
    - SQL?
    - S/Key OTP?
    - PAM?
    - SASL?
    - Local PW
  
  o mapping of incoming (and successfully authenticated) authentication method
    and identity to perhaps different authentication method and identity on 
    backend server communication.
  
  o automatic session tracking in frontend service
    (for reducing complexity on backends)
    - via HTTP Cookie key "session" (read-write)
    - via URL QUERY_STRING key "session" (read-write)
    - via SSL client certificate (read-only)
  
  o easy remote session information retrival from backend servers
    (for storing sessions on frontend only and still have on backends)
  
  o extendable user session information set
    (for flexibility in the backends and to avoid DBs there, too)
  
  o easy administration of user accounts (passwords!)
    and session information via Web UI
    (for obvious administration of whole setup)
  
  o allow bookmarking of subpages by redirecting from subpage
    request to login on missing session and after loggin in again back to subpage
    (for supporting subpage bootmarking)
  
  Optional Requirements
  ---------------------
  
  o HTTPS sticky pass-through connections
    (for HTTPS on backends)
  
  o server side include (SSI) or other dynamic content expansion
    in backend response on frontend server
    (for global navigation bars, headers, footers, etc)
  
  o load balancing over multiple backend servers
    (for performance)
  
  o automatic backend disabling on downtime/error if multiple backends exist
  
  o caching of backend responses
    (for performance)
  
  o content manipulations
    - splash screen additions
    - header/footer/css additions
    - watermark additions
    (for global services)
  
  o pre-fetching from backend servers of inline images and referenced pages
  
  Run-time Pseudocode
  -------------------
  
    read client-request (CReq) from client
    create backend-request (BReq) by copying CReq
    extract request URL
    select backend URL and insert into BReq as new URL
    extract from IReq and remove from BReq authentication id
       1. from QUERY_STRING 
       2. from HTTP Cookie header
       3. from SSL client certificate
  
    if (URL requires authentication) {
        check authenentication id;
        if (not exists or is invalid authentication id) {
            ...
            stop;
        }
        optionally map authentication id according to backend URL
        insert (optionally mapped) authentication id into BReq as
           - QUERY_STRING addition
           - HTTP Cookie header
    }
    send BReq request to backend server
    read BRes response header from backend server
    extract response code from BReq
    filter BRes to IRes
    if (redirect) {
        inverse map Location header according to backend selection rules
    }
    if (code eq 200/OK and content-type == HTML) {
        while body is read in junks
            inverse map hyperlinks according to backend selection rules
    }
    else {
        while body is read in junks
            pass through unchanged
    }
  

From ossp-cvs-owner@ossp.org  Sun Oct  6 20:42:38 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 80C9476A12; Sun,  6 Oct 2002 20:42:38 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sorp BRAINSTORM.txt
Message-Id: <20021006184238.80C9476A12@mail.ossp.org>
Date: Sun,  6 Oct 2002 20:42:38 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Oct-2002 20:42:38
  Branch: HEAD                             Handle: 2002100619423800

  Modified files:
    ossp-pkg/sorp           BRAINSTORM.txt

  Log:
    remember issues from last week

  Summary:
    Revision    Changes     Path
    1.2         +30 -0      ossp-pkg/sorp/BRAINSTORM.txt
  ____________________________________________________________________________

  Index: ossp-pkg/sorp/BRAINSTORM.txt
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 BRAINSTORM.txt
  --- ossp-pkg/sorp/BRAINSTORM.txt	6 Oct 2002 18:40:35 -0000	1.1
  +++ ossp-pkg/sorp/BRAINSTORM.txt	6 Oct 2002 18:42:38 -0000	1.2
  @@ -62,4 +62,34 @@
   ...
   groups...
   
  +Possible Approaches
  +===================
  +
  +1. Extending SQUID+unofficial patches
  +   Squid selbst kann Reverse Proxy spielen, aber kein Content Rewriting.
  +   Fuer Content Rewriting gibt es aber unofficial Patches. Wir muessten
  +   also "nur" die Sign-On Funktionalitaet einbauen. Allerdings weisz ich
  +   nicht wie gut Squid bei HTTPS als _ORIGIN_ Server ist.
  +
  +2. Extending Apache2.0+mod_proxy+mod_ssl
  +   mod_proxy kann Reverse Proxy spielen, mod_ssl HTTPS reden und der
  +   Kernel kann Content-Rewriting. Wir muessten also "nur" die Sign-On
  +   Funktionalitaet einbauen als ein mod_sorp. Allerdings ist der Apache
  +   2.0 ein dermassener Dreck IMHO (siehe angehaengte Mail), dasz dieser
  +   Ansatz zwar sexy klingt, aber irgendwie mir gar nicht recht gefaellt.
  +
  +3. Extending Pound
  +   Pound ist ein recht junger Pthread-basierter HTTP/HTTPS Reverse
  +   Proxy, der recht klein und schnuckelig ist und auch leicht
  +   erweiterbar. Wir muessten das Content-Rewriting und die Sign-On
  +   Funktionalitaet einbauen. Allerdings bin ich mir bei der HTTP
  +   Compliance von Pound nicht so recht sicher.
  +
  +4. Writing OSSP sorp
  +   Das ist der ambitionierteste Ansatz. Allerdings auch der sauberste
  +   und zukunftstraechtigste. Insbesondere weil wir im OSSP Projekt
  +   sowieso eine HTTP Komponente brauchen. Ausserdem haben wir mit den
  +   bereits existierenden OSSP Libraries schon fast alle Komponenten
  +   beisammen, die wir brauchen um eine eigene Loesung ohne zu groszen
  +   Aufwand stemmen zu koennen.
   

From ossp-cvs-owner@ossp.org  Mon Oct  7 07:02:14 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 01B24769E5; Mon,  7 Oct 2002 07:02:12 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool ChangeLog THANKS sh.echo
Message-Id: <20021007050212.01B24769E5@mail.ossp.org>
Date: Mon,  7 Oct 2002 07:02:12 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Oct-2002 07:02:12
  Branch: HEAD                             Handle: 2002100706021200

  Modified files:
    ossp-pkg/shtool         ChangeLog THANKS sh.echo

  Log:
    Try the terminal 'init' sequence before 'reset' for bold mode
    restoring in order to make sure the terminal is not cleared.
    Additionally, fallback to a consistent no-bold mode.
    
    Submitted by: Mirko Liss <mirko.liss@web.de>

  Summary:
    Revision    Changes     Path
    1.171       +7  -0      ossp-pkg/shtool/ChangeLog
    1.24        +1  -0      ossp-pkg/shtool/THANKS
    1.31        +3  -1      ossp-pkg/shtool/sh.echo
  ____________________________________________________________________________

  Index: ossp-pkg/shtool/ChangeLog
  ============================================================
  $ cvs diff -u -r1.170 -r1.171 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	13 Jul 2002 18:13:58 -0000	1.170
  +++ ossp-pkg/shtool/ChangeLog	7 Oct 2002 05:02:12 -0000	1.171
  @@ -9,6 +9,13 @@
   
    ChangeLog
   
  + Changes between 1.6.1 and 1.6.2 (12-Jul-2002 to xx-Oct-2002):
  +
  +   *) Try the terminal 'init' sequence before 'reset' for bold mode
  +      restoring in order to make sure the terminal is not cleared.
  +      Additionally, fallback to a consistent no-bold mode.
  +      [Mirko Liss <mirko.liss@web.de>]
  +
    Changes between 1.6.0 and 1.6.1 (01-Feb-2002 to 12-Jul-2002):
   
      *) Removed not-existing --min-size option from the usage
  Index: ossp-pkg/shtool/THANKS
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 THANKS
  --- ossp-pkg/shtool/THANKS	4 Sep 2002 09:58:42 -0000	1.23
  +++ ossp-pkg/shtool/THANKS	7 Oct 2002 05:02:12 -0000	1.24
  @@ -20,6 +20,7 @@
     o Jim Jagielski            <jim@jaguNET.com>
     o Martin Kraemer           <Martin.Kraemer@MchP.Siemens.De>
     o Thomas Linden            <tom@izb.net>
  +  o Mirko Liss               <mirko.liss@web.de>
     o Liones                   <liones@myrealbox.com>
     o Markus F.X.J. Oberhumer  <markus.oberhumer@jk.uni-linz.ac.at>
     o Benjamin Saller          <case@appliedtheory.com>
  Index: ossp-pkg/shtool/sh.echo
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 sh.echo
  --- ossp-pkg/shtool/sh.echo	23 Feb 2002 09:18:03 -0000	1.30
  +++ ossp-pkg/shtool/sh.echo	7 Oct 2002 05:02:12 -0000	1.31
  @@ -76,7 +76,7 @@
                               fi
                           done
                           if [ ".$term_bold" != . ]; then
  -                            for seq in sgr0 me rmso reset; do # 'reset' is last
  +                            for seq in sgr0 me rmso init reset; do # 'reset' is last
                                   norm="`$dir/$tool $seq 2>/dev/null`"
                                   if [ ".$norm" != . ]; then
                                       term_norm="$norm"
  @@ -95,6 +95,8 @@
       esac
       if [ ".$term_bold" = . -o ".$term_norm" = . ]; then
           echo "$msgprefix:Warning: unable to determine terminal sequence for bold mode" 1>&2
  +        term_bold=''
  +        term_norm=''
       fi
   fi
   

From ossp-cvs-owner@ossp.org  Mon Oct  7 15:49:34 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6100A76A03; Mon,  7 Oct 2002 15:49:33 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio BRAINSTORM.fig BRAINSTORM.txt ossp-pkg/sio/BR...
Message-Id: <20021007134933.6100A76A03@mail.ossp.org>
Date: Mon,  7 Oct 2002 15:49:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Oct-2002 15:49:33
  Branch: HEAD                             Handle: 2002100714493101

  Added files:
    ossp-pkg/sio            BRAINSTORM.fig BRAINSTORM.txt
    ossp-pkg/sio/BRAINSTORM apache-buff.txt apache-stackedio.txt att-sfio.txt
                            bsd-stdio.txt openssl-bio.txt panos-sio.txt
                            postfix-vstream.txt stash-buf.txt substdio.txt

  Log:
    start an OSSP sio area

  Summary:
    Revision    Changes     Path
    1.1         +241 -0     ossp-pkg/sio/BRAINSTORM.fig
    1.1         +304 -0     ossp-pkg/sio/BRAINSTORM.txt
    1.1         +236 -0     ossp-pkg/sio/BRAINSTORM/apache-buff.txt
    1.1         +997 -0     ossp-pkg/sio/BRAINSTORM/apache-stackedio.txt
    1.1         +2442 -0    ossp-pkg/sio/BRAINSTORM/att-sfio.txt
    1.1         +165 -0     ossp-pkg/sio/BRAINSTORM/bsd-stdio.txt
    1.1         +1089 -0    ossp-pkg/sio/BRAINSTORM/openssl-bio.txt
    1.1         +462 -0     ossp-pkg/sio/BRAINSTORM/panos-sio.txt
    1.1         +396 -0     ossp-pkg/sio/BRAINSTORM/postfix-vstream.txt
    1.1         +652 -0     ossp-pkg/sio/BRAINSTORM/stash-buf.txt
    1.1         +396 -0     ossp-pkg/sio/BRAINSTORM/substdio.txt
  ____________________________________________________________________________

  Index: ossp-pkg/sio/BRAINSTORM.fig
  ============================================================
  $ cvs update -p -r1.1 BRAINSTORM.fig
  #FIG 3.2
  Landscape
  Center
  Inches
  Letter  
  181.80
  Single
  -2
  1200 2
  0 32 #cccccc
  0 33 #f0f0f0
  6 2700 1950 3450 2250
  6 2700 1950 3450 2250
  2 2 0 1 0 0 100 0 20 0.000 0 0 -1 0 0 5
  	 2700 1950 2775 1950 2775 2250 2700 2250 2700 1950
  2 2 0 1 0 33 101 0 20 0.000 0 0 -1 0 0 5
  	 2775 1950 3375 1950 3375 2250 2775 2250 2775 1950
  2 2 0 1 0 0 100 0 20 0.000 0 0 -1 0 0 5
  	 3375 1950 3450 1950 3450 2250 3375 2250 3375 1950
  -6
  -6
  6 1350 1875 1800 2325
  2 2 0 1 0 0 100 0 20 0.000 0 0 -1 0 0 5
  	 1725 1950 1800 1950 1800 2250 1725 2250 1725 1950
  2 3 0 1 0 33 101 0 20 0.000 0 0 -1 0 0 5
  	 1725 1950 1350 1875 1350 2325 1725 2250 1725 1950
  -6
  6 3900 1950 4650 2250
  6 3900 1950 4650 2250
  2 2 0 1 0 0 100 0 20 0.000 0 0 -1 0 0 5
  	 3900 1950 3975 1950 3975 2250 3900 2250 3900 1950
  2 2 0 1 0 33 101 0 20 0.000 0 0 -1 0 0 5
  	 3975 1950 4575 1950 4575 2250 3975 2250 3975 1950
  2 2 0 1 0 0 100 0 20 0.000 0 0 -1 0 0 5
  	 4575 1950 4650 1950 4650 2250 4575 2250 4575 1950
  -6
  -6
  6 1500 3300 1950 3750
  2 2 0 1 0 0 100 0 20 0.000 0 0 -1 0 0 5
  	 1875 3375 1950 3375 1950 3675 1875 3675 1875 3375
  2 3 0 1 0 33 101 0 20 0.000 0 0 -1 0 0 5
  	 1875 3375 1500 3300 1500 3750 1875 3675 1875 3375
  -6
  6 1500 3900 1950 4350
  2 2 0 1 0 0 100 0 20 0.000 0 0 -1 0 0 5
  	 1875 3975 1950 3975 1950 4275 1875 4275 1875 3975
  2 3 0 1 0 33 101 0 20 0.000 0 0 -1 0 0 5
  	 1875 3975 1500 3900 1500 4350 1875 4275 1875 3975
  -6
  6 1500 4500 1950 4950
  2 2 0 1 0 0 100 0 20 0.000 0 0 -1 0 0 5
  	 1875 4575 1950 4575 1950 4875 1875 4875 1875 4575
  2 3 0 1 0 33 101 0 20 0.000 0 0 -1 0 0 5
  	 1875 4575 1500 4500 1500 4950 1875 4875 1875 4575
  -6
  6 2025 3975 2775 4275
  6 2025 3975 2775 4275
  2 2 0 1 0 0 100 0 20 0.000 0 0 -1 0 0 5
  	 2025 3975 2100 3975 2100 4275 2025 4275 2025 3975
  2 2 0 1 0 33 101 0 20 0.000 0 0 -1 0 0 5
  	 2100 3975 2700 3975 2700 4275 2100 4275 2100 3975
  2 2 0 1 0 0 100 0 20 0.000 0 0 -1 0 0 5
  	 2700 3975 2775 3975 2775 4275 2700 4275 2700 3975
  -6
  -6
  6 2025 4500 2475 4950
  2 2 0 1 0 0 100 0 20 0.000 0 0 -1 0 0 5
  	 2100 4575 2025 4575 2025 4875 2100 4875 2100 4575
  2 3 0 1 0 33 101 0 20 0.000 0 0 -1 0 0 5
  	 2100 4575 2475 4500 2475 4950 2100 4875 2100 4575
  -6
  6 1500 5100 1950 5550
  2 2 0 1 0 0 100 0 20 0.000 0 0 -1 0 0 5
  	 1875 5175 1950 5175 1950 5475 1875 5475 1875 5175
  2 3 0 1 0 33 101 0 20 0.000 0 0 -1 0 0 5
  	 1875 5175 1500 5100 1500 5550 1875 5475 1875 5175
  -6
  6 2025 5175 2775 5475
  6 2025 5175 2775 5475
  2 2 0 1 0 0 100 0 20 0.000 0 0 -1 0 0 5
  	 2025 5175 2100 5175 2100 5475 2025 5475 2025 5175
  2 2 0 1 0 33 101 0 20 0.000 0 0 -1 0 0 5
  	 2100 5175 2700 5175 2700 5475 2100 5475 2100 5175
  2 2 0 1 0 0 100 0 20 0.000 0 0 -1 0 0 5
  	 2700 5175 2775 5175 2775 5475 2700 5475 2700 5175
  -6
  -6
  6 2850 5100 3300 5550
  2 2 0 1 0 0 100 0 20 0.000 0 0 -1 0 0 5
  	 2925 5175 2850 5175 2850 5475 2925 5475 2925 5175
  2 3 0 1 0 33 101 0 20 0.000 0 0 -1 0 0 5
  	 2925 5175 3300 5100 3300 5550 2925 5475 2925 5175
  -6
  6 1500 5700 2250 6000
  6 1500 5700 2250 6000
  2 2 0 1 0 0 100 0 20 0.000 0 0 -1 0 0 5
  	 1500 5700 1575 5700 1575 6000 1500 6000 1500 5700
  2 2 0 1 0 33 101 0 20 0.000 0 0 -1 0 0 5
  	 1575 5700 2175 5700 2175 6000 1575 6000 1575 5700
  2 2 0 1 0 0 100 0 20 0.000 0 0 -1 0 0 5
  	 2175 5700 2250 5700 2250 6000 2175 6000 2175 5700
  -6
  -6
  6 788 3225 1387 3787
  3 3 0 1 0 32 101 0 20 0.000 0 0 0 12
  	 975 3300 825 3375 825 3525 825 3600 900 3750 1050 3750
  	 1125 3675 1350 3675 1275 3450 1275 3300 1050 3225 975 3300
  	 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000
  	 -1.000 -1.000 -1.000 -1.000
  4 0 0 100 0 20 12 0.0000 4 120 195 968 3555 net\001
  -6
  6 2100 3375 2550 3675
  2 4 0 1 0 32 100 0 20 0.000 0 0 7 0 0 5
  	 2550 3675 2100 3675 2100 3375 2550 3375 2550 3675
  4 0 0 100 0 20 12 0.0000 4 120 225 2205 3563 app\001
  -6
  6 900 3900 1350 4350
  2 3 0 1 0 32 101 0 20 0.000 0 0 -1 0 0 6
  	 900 4050 900 4350 1200 4350 1200 4050 1125 4050 900 4050
  2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
  	 1200 4050 1350 3900
  2 3 0 1 0 32 101 0 20 0.000 0 0 -1 0 0 7
  	 900 4050 1200 4050 1200 4350 1350 4200 1350 3900 1050 3900
  	 900 4050
  4 0 0 100 0 20 12 0.0000 4 135 180 975 4260 file\001
  -6
  6 863 4500 1462 5062
  3 3 0 1 0 32 101 0 20 0.000 0 0 0 12
  	 1050 4575 900 4650 900 4800 900 4875 975 5025 1125 5025
  	 1200 4950 1425 4950 1350 4725 1350 4575 1125 4500 1050 4575
  	 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000
  	 -1.000 -1.000 -1.000 -1.000
  4 0 0 100 0 20 12 0.0000 4 120 195 1043 4830 net\001
  -6
  6 900 5700 1350 6000
  2 4 0 1 0 32 100 0 20 0.000 0 0 7 0 0 5
  	 1350 6000 900 6000 900 5700 1350 5700 1350 6000
  4 0 0 100 0 20 12 0.0000 4 120 225 1005 5888 app\001
  -6
  6 2400 5700 2850 6000
  2 4 0 1 0 32 100 0 20 0.000 0 0 7 0 0 5
  	 2850 6000 2400 6000 2400 5700 2850 5700 2850 6000
  4 0 0 100 0 20 12 0.0000 4 120 225 2505 5888 app\001
  -6
  6 900 5100 1350 5550
  2 3 0 1 0 32 101 0 20 0.000 0 0 -1 0 0 6
  	 900 5250 900 5550 1200 5550 1200 5250 1125 5250 900 5250
  2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
  	 1200 5250 1350 5100
  2 3 0 1 0 32 101 0 20 0.000 0 0 -1 0 0 7
  	 900 5250 1200 5250 1200 5550 1350 5400 1350 5100 1050 5100
  	 900 5250
  4 0 0 100 0 20 12 0.0000 4 135 180 975 5460 file\001
  -6
  6 2550 4500 3000 4950
  2 3 0 1 0 32 101 0 20 0.000 0 0 -1 0 0 6
  	 2550 4650 2550 4950 2850 4950 2850 4650 2775 4650 2550 4650
  2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
  	 2850 4650 3000 4500
  2 3 0 1 0 32 101 0 20 0.000 0 0 -1 0 0 7
  	 2550 4650 2850 4650 2850 4950 3000 4800 3000 4500 2700 4500
  	 2550 4650
  4 0 0 100 0 20 12 0.0000 4 135 180 2625 4860 file\001
  -6
  6 2925 3975 3375 4275
  2 4 0 1 0 32 100 0 20 0.000 0 0 7 0 0 5
  	 3375 4275 2925 4275 2925 3975 3375 3975 3375 4275
  4 0 0 100 0 20 12 0.0000 4 120 225 3030 4163 app\001
  -6
  6 3450 5100 3900 5550
  2 3 0 1 0 32 101 0 20 0.000 0 0 -1 0 0 6
  	 3450 5250 3450 5550 3750 5550 3750 5250 3675 5250 3450 5250
  2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
  	 3750 5250 3900 5100
  2 3 0 1 0 32 101 0 20 0.000 0 0 -1 0 0 7
  	 3450 5250 3750 5250 3750 5550 3900 5400 3900 5100 3600 5100
  	 3450 5250
  4 0 0 100 0 20 12 0.0000 4 135 180 3525 5460 file\001
  -6
  2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
  	1 1 1.00 60.00 120.00
  	 3300 1275 2700 1875
  2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
  	1 1 1.00 60.00 120.00
  	 3375 1275 3900 1875
  2 1 2 1 32 7 100 0 -1 1.000 0 0 -1 1 1 2
  	1 0 1.00 60.00 120.00
  	1 0 1.00 60.00 120.00
  	 1800 2100 2700 2100
  2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
  	1 1 1.00 60.00 120.00
  	 3225 1275 1800 1875
  2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
  	1 1 1.00 60.00 120.00
  	 2550 2775 2250 2175
  2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
  	1 1 1.00 60.00 120.00
  	 3450 1275 4575 1875
  2 1 0 4 4 7 100 0 -1 0.000 0 0 -1 1 0 2
  	1 1 2.00 105.00 120.00
  	 2175 3150 2025 3450
  2 1 0 4 4 7 100 0 -1 0.000 0 0 -1 1 0 2
  	1 1 2.00 105.00 120.00
  	 3000 3750 2850 4050
  2 1 0 4 4 7 100 0 -1 0.000 0 0 -1 1 0 2
  	1 1 2.00 105.00 120.00
  	 2175 4350 2025 4650
  2 1 0 4 4 7 100 0 -1 0.000 0 0 -1 1 0 2
  	1 1 2.00 105.00 120.00
  	 2925 5025 2775 5325
  2 1 0 4 4 7 100 0 -1 0.000 0 0 -1 1 0 2
  	1 1 2.00 105.00 120.00
  	 2400 5625 2250 5925
  2 1 0 4 4 7 100 0 -1 0.000 0 0 -1 1 0 2
  	1 1 2.00 105.00 120.00
  	 1275 5625 1500 5850
  4 0 0 100 0 18 12 0.0000 4 180 360 2925 2550 pipe\001
  4 0 0 100 0 18 12 0.0000 4 135 1680 1875 3000 internal connection\001
  4 0 0 100 0 18 24 0.0000 4 45 315 3525 2100 ...\001
  4 0 0 100 0 18 12 0.0000 4 180 360 4050 2550 pipe\001
  4 0 0 100 0 18 12 0.0000 4 180 360 1350 2550 plug\001
  4 0 0 100 0 18 12 0.0000 4 135 300 3150 1200 API\001
  4 0 0 100 0 20 10 0.0000 4 105 210 1800 5925 null\001
  4 0 0 100 0 20 10 0.0000 4 105 240 1575 5400 file1\001
  4 0 0 100 0 20 10 0.0000 4 105 195 2325 5400 zlib\001
  4 0 0 100 0 20 10 0.0000 4 105 240 3000 5400 file2\001
  4 0 0 100 0 20 10 0.0000 4 105 360 1500 4800 socket\001
  4 0 0 100 0 20 10 0.0000 4 105 165 2250 4800 file\001
  4 0 0 100 0 20 10 0.0000 4 105 195 2250 4200 zlib\001
  4 0 0 100 0 20 10 0.0000 4 105 165 1575 4200 file\001
  4 0 0 100 0 20 10 0.0000 4 105 360 1425 3525 socket\001
  4 0 0 100 0 18 12 0.0000 4 135 165 600 5400 4.\001
  4 0 0 100 0 18 12 0.0000 4 135 165 600 5925 5.\001
  4 0 0 100 0 18 12 0.0000 4 135 165 600 4800 3.\001
  4 0 0 100 0 18 12 0.0000 4 135 165 600 4200 2.\001
  4 0 0 100 0 18 12 0.0000 4 135 165 600 3600 1.\001
  4 0 0 100 0 20 12 0.0000 4 165 1965 4050 3600 application reads from a socket\001
  4 0 0 100 0 20 12 0.0000 4 165 2640 4050 4200 application writes  data compressed to file\001
  4 0 0 100 0 20 12 0.0000 4 165 2445 4050 4800 application transfers from file to socket\001
  4 0 0 100 0 20 12 0.0000 4 165 2310 4050 5400 application filters data from file to file\001
  4 0 0 100 0 20 12 0.0000 4 165 2400 4050 5925 two applications/threads communicate\001
  Index: ossp-pkg/sio/BRAINSTORM.txt
  ============================================================
  $ cvs update -p -r1.1 BRAINSTORM.txt
  
  Names:
  o SIO = simple/streams/stacked I/O
  o FIO = fast I/O
  o IOL = IO Lite (achtung)
  o LIO = Lite/Layered IO
  o AIO = Abstracted I/O
  
  Connectors/Plugs:
  o Memory
    SIO_PLUG *sio_plug_mem(uchar *buf, ulong len, uchar *(cb)(ulong));
    - connect to preallocated buffer + callback function for more buffer allocs
    - connect internally to auto-growing buffer(s)
  o File
    constructors:
    - from fd
    - from FILE
    - from pathname
  o Socket
    - UDP
    - TCP
  o FILE*-2-SIO
  o fd-2-SIO
  o file-2-SIO
  o TCP/socket-2-SIO
  o UDP/socket-2-SIO
  o Pipe/FIFO-2-SIO
  o Null
    Discard Plug
    SIO *sio_plug_null(void)
  
  Filters:
  o Transparent; sio_pipe_trans
  o Regex-Matching-Filter
  o Regex-Subst-Filter
  o MD5/SHA1/DES/IDEA
  o Zlib/LZO
  o SSL
  
  IO Models (according to Stevens: Unix Network programming I, p. 144)
  o blocking I/O
  o nonblocking I/O (NO_HANG, NONBLK)
  o I/O multiplexing (select and poll)
  o signal driven I/O (SIGIO)
  o asynchronous I/O (POSIX aio_xxx)
  
  Data Structures
  o Rings internal
  o malloc(3) and mm_malloc(3) aware
  
  Buffering-Modes:
  o flush after timeout, close and exit() + explicit via flush()
  o no buffering at all
  o Chunking for HTTP Support!
  o only read is buffered
  o only write is buffered
  o read & write is buffered
  
  Buffering:
  o filter koennen window/buffer size einstellen
  o filter geben an ob sie shrinken/expandieren/gleichlassen oder random sind
  o source connector kann eventuell Buffer vom User direkt nutzen
  o umgekehrt kann auch user buffer wird von target connector genutzt werden
  o application koennte auch bei write angeben, dasz buffer destroyed
    werden darf und dasz er eventuell groesser ist als die daten,
    die aus ihm geschrieben werden -> nuetzlich fuer expanding filters
    bei der Ausgabe.
  
  Optimierungen:
  o mmap muss moeglich sein
  o if target connector = socket & source connector = file => try to use sendfile(2) 
  o if target connector = file   & source connector = file => try to use mmap(2)
  o wenn I/O ohne filters dann no buffering oder nur wenn chunks zu klein
  o wann es geht writev() und readv() nutzen, um Buffers zu koppeln beim I/O
  o sockets haben fuer read/write() einen low water mark (siehe setsockopt)
  o FreeBSD 4.0's accept_filter(9) mechanism to check for HTTP request
  
  NOTES:
  o Timeouts muessen generell unterstuetzt werden
  o Error handling optional mit callbackfunction+void
  o Callback functions for exceptional things
  o Socket-Connector muss z.B. shutdown() erlauben
  o man sollte meta-data (mtime, inode, etc.) von SIO connector rausfinden
    koennen und setzen koennen
  o Chunking muss moeglich sein (HTTP?)
  o Read sollte lesen bis: 
    - number of bytes read
    - found a char of class [a-z]
    - found a string "foo"
    - found a regex "..."
  o man sollte auf jedem SIO seek()en koennen
  o man sollte SIOs in FILEs umwandeln koennen???
  o bei Socket Plugs muss shutdown() also eine Seite moeglich sein
  
  Architecture:
  o three types of objects (siehe SIO.fig):
    - plugs (Stecker/Anschluesse) for socket, file, mem, etc.
    - pipes (Rohre/Verbindungen) 
    - pipelines (the Kombination von plugs und pipes zu einer Einheit)
  o buffered I/O: es gibt eine buffer-pipe, das ist alles
    unbuffered I/O ist also eine Pipleline wo kein buffer-pipe dabei ist
  
  Conversions:
  - ASCII2EBCDIC and vice versa conversions
  
  o SIO Disciplines for Virtual Filesystem Stuff
    URLs as pathname open various network things, tarballs, etc.
    file, http, ftp, extfs
    ?? vfs, libfetch, libcurl ??
  
  Performance Gains:
  - use sendfile()
  - use TCP_CORK
  - use ...
  
  Filter classes (from Apache discussions):
   1) content-generator                (files, CGI, database, etc)
   2) content-filter/munger/processor  (SSI, PHP, etc)
   3) content-encoding                 (gzip?)
   4) digest/message processor?        (mod_auth_digest)
   5) transport-encoding               (HTTP chunking)
   6) socket-encoding                  (SSL)
  
  Fuer Zero-Copy:
  The data the user program writes must be page sized and start on a page
  boundary in order for it to be run through the zero copy send code.
  
  Ideas:
  http://sourceforge.net/projects/paip
  
  -----------------
  
  API Functions:
  sio_rc_t sio_attach    (sio_t **sio, int fd);
  sio_rc_t sio_deattach  (sio_t *sio, int *fd);
  sio_rc_t sio_setbuffer (sio_t *sio, size_t newsize, size_t *oldsize);
  sio_rc_t sio_readvec   (sio_t *sio, void **vec, size_t *veclen);
  sio_rc_t sio_read      (sio_t *sio, void *buf, size_t *buflen);
  sio_rc_t sio_readline  (sio_t *sio, void *buf, size_t *buflen);
  sio_rc_t sio_readchar  (sio_t *sio, char *c);
  sio_rc_t sio_putback   (sio_t *sio, void *buf, size_t buflen);
  sio_rc_t sio_undo      (sio_t *sio);
  sio_rc_t sio_writevec  (sio_t *sio, void **vec, size_t veclen);
  sio_rc_t sio_write     (sio_t *sio, void *buf, size_t buflen);
  sio_rc_t sio_writestr  (sio_t *sio, char *str);
  sio_rc_t sio_writeline (sio_t *sio, void *buf, size_t buflen);
  sio_rc_t sio_writechar (sio_t *sio, char c);
  sio_rc_t sio_print     (sio_t *sio, char *fmt, ...);
  sio_rc_t sio_printv    (sio_t *sio, char *fmt, va_list ap);
  sio_rc_t sio_flush     (sio_t *sio);
  sio_rc_t sio_error     (sio_t *sio, char **error);
  
  sio_rc_t sio_read (sio_t *sio, sio_ioflags_t flags, ...);
  sio_rc_t sio_write(sio_t *sio, sio_ioflags_t flags, ...);
  
    SIO_CHR | SIO_STR | SIO_BUF | SIO_FMT | SIO_STRVEC | SIO_BUFVEC
       type of objects: character, nul-terminated string or buffer+size or
       format string based
    SIO_MULT 
       multiple objects are passed in call
    SIO_NULLEND 
       whether size of vector is indicated by NULL or given
  
    SIO_COPY
       objects are copied to library 
       (internal its SIO_GIFT after copy!)
    SIO_GIFT
       objects are gifted to library
    SIO_LOAN
       objects are just loaned to library
  
  sio_read(sio, SIO_BUF, buf, buflen, &readlen);
  sio_read(sio, SIO_LINE, buf, buflen, &readlen);
  
  sio_write(sio, SIO_STR, "foo");
  sio_write(sio, SIO_STR|SIO_MULT, "foo", "bar", NULL);
  sio_write(sio, SIO_VEC|SIO_STR, vec, veclen);
  sio_write(sio, SIO_VEC|SIO_STR|SIO_NULLEND, vec);
  sio_write(sio, SIO_BUF, buf, buflen);
  sio_write(sio, SIO_BUF|SIO_MULT, buf, buflen, buf2, buflen2, NULL);
  sio_write(sio, SIO_VEC|SIO_BUF, vec, veclen);
  sio_write(sio, SIO_VEC|SIO_BUF|SIO_NULLEND, vec);
  sio_write(sio, SIO_STR|SIO_MULT, line, "\r\n", NULL);
  sio_write(sio, SIO_CHR, c);
  sio_write(sio, SIO_BUF, &c, 1);
  sio_write(sio, SIO_FMT, "%c%s%S%b%B", c, cp, cpvec, cpvecsize, buf, bufsize, bufvec, bufvecsize);
  
  API Comfort:
     sio_writestr("..") -> sio_write(SIO_STR, "..");
  API Standard:
     sio_write(SIO_STR, char *x) -> sio_output(x, strlen(x));
     sio_write(SIO_VEC, char *x) -> for... sio_output(x.ptr, x.len); done
  API Basic:
     sio_output
  
  1. Was ist mit seekable fds (files!)?
     seek, tell,
  2. Top-level filtering and chaining?
     tie, untie
  
  -----------------
  IDEA:
    - SIO (Socket IO)
    - BIO (Buffered/Filtered I/O)
    - BA/BB (Buffer Aggregates, Bucket Brigades -- ACT) 
  
  -----------------
  
  brigate ::= bucket *
  bucket  ::= <buf,len,type>
  
  -----------------
  
  /* SFIO: sfreserve?
   *       sfpool ?
   */
  
  /*
   * Data structures
   */
  
  /* the general SIO API */
  typedef struct sio_st sio_t;
  
  /* I/O vector entry (similar to POSIX struct iovec) for sio_{read,write}v() */
  typdef struct sio_iovec_st 
      char   *iov_base;   /* Base address. */
      size_t  iov_len;    /* Length. */
  } sio_iovec_t;
  
  typedef long sio_off_t;
  
  typedef sio_uint8_t;
  typedef sio_uint16_t;
  typedef sio_uint32_t;
  
  #define SIO_SEEK_SET
  #define SIO_SEEK_CUR
  #define SIO_SEEK_END
  
  /*
   * Values
   */
  #define SIO_EOF (-1)
  
  /*
   * Stream Disciplines
   */
  sio_disc_t *sio_disc_null   (void);
  sio_disc_t *sio_disc_anon   (void);
  sio_disc_t *sio_disc_fd     (int fd, ...);
  sio_disc_t *sio_disc_socket (int fd, int type /*tcp,udp*/, ...);
  sio_disc_t *sio_disc_pipe   (int fd, ...);
  sio_disc_t *sio_disc_file   (FILE *fp, ...);
  sio_disc_t *sio_disc_url    (const char *url, ...);
  
  /*
   * Stream Handling
   */
  sio_t      *sio_new      (sio_disc_t *disc);
  sio_t      *sio_dup      (sio_t *sio);
  int         sio_free     (sio_t *sio);
  
  /* 
   * I/O Operations 
   */
  sio_size_t  sio_read     (sio_t *sio, void *buf, size_t bytes);
  sio_size_t  sio_write    (sio_t *sio, void *buf, size_t bytes);
  sio_size_t  sio_writev   (sio_t *sio, const sio_iovec_t *iov, int iovcnt);
  sio_size_t  sio_writev   (sio_t *sio, const sio_iovec_t *iov, int iovcnt);
  sio_off_t   sio_seek     (sio_t *sio, sio_off_t offset, int type);
  sio_size_t  sio_move     (sio_t *siow, sio_t *sior, int n, int rsc);
  int         sio_getc     (sio_t *sio);
  int         sio_putc     (sio_t *sio, int c);
  int         sio_nputc    (sio_t *sio, int c, sio_size_t n);
  int         sio_ungetc   (sio_t *sio, int c);
  char       *sio_getr     (sio_t *sio, int rsc, int type);
  sio_size_t *sio_putr     (sio_t *sio, const char *str, int rsc);
  
  /*
   * Data Formatting
   */
  sio_site_t  sio_printf   (sio_t *sio, const char *fmt, ...);
  sio_site_t  sio_vprintf  (sio_t *sio, const char *fmt, va_list ap);
  sio_site_t  sio_scanf    (sio_t *sio, const char *fmt, ...);
  sio_site_t  sio_vscanf   (sio_t *sio, const char *fmt, va_list ap);
  
  /*
   * Buffering & Synchronization 
   */
  int         sio_sync     (sio_t *sio);
  int         sio_purge    (sio_t *sio);
  int         sio_poll     (sio_poll_t *pl, sio_size_t pn, sio_time_t timeout);
  int         sio_eof      (sio_t *sio);
  
  /*
   * Stream Control
   */
  long        sio_ctrl     (sio_t *sio, int cmd, ...);
  int         sio_top      (sio_t *sio);
  int         sio_push     (sio_t *sio, sio_t *top);
  int         sio_pop      (sio_t *sio);
  int         sio_swap     (sio_t *sio1, sio_t *sio2);
  
  Index: ossp-pkg/sio/BRAINSTORM/apache-buff.txt
  ============================================================
  $ cvs update -p -r1.1 apache-buff.txt
  /* ====================================================================
   * Copyright (c) 1996-1999 The Apache Group.  All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer. 
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. All advertising materials mentioning features or use of this
   *    software must display the following acknowledgment:
   *    "This product includes software developed by the Apache Group
   *    for use in the Apache HTTP server project (http://www.apache.org/)."
   *
   * 4. The names "Apache Server" and "Apache Group" must not be used to
   *    endorse or promote products derived from this software without
   *    prior written permission. For written permission, please contact
   *    apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * 6. Redistributions of any form whatsoever must retain the following
   *    acknowledgment:
   *    "This product includes software developed by the Apache Group
   *    for use in the Apache HTTP server project (http://www.apache.org/)."
   *
   * THIS SOFTWARE IS PROVIDED BY THE APACHE GROUP ``AS IS'' AND ANY
   * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE APACHE GROUP OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
   * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
   * OF THE POSSIBILITY OF SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Group and was originally based
   * on public domain software written at the National Center for
   * Supercomputing Applications, University of Illinois, Urbana-Champaign.
   * For more information on the Apache Group and the Apache HTTP server
   * project, please see <http://www.apache.org/>.
   *
   */
  
  #ifndef APACHE_BUFF_H
  #define APACHE_BUFF_H
  
  #ifdef __cplusplus
  extern "C" {
  #endif
  
  #ifdef B_SFIO
  #include "sfio.h"
  #endif
  
  #include <stdarg.h>
  
  /* Reading is buffered */
  #define B_RD     (1)
  /* Writing is buffered */
  #define B_WR     (2)
  #define B_RDWR   (3)
  /* At end of file, or closed stream; no further input allowed */
  #define B_EOF    (4)
  /* No further output possible */
  #define B_EOUT   (8)
  /* A read error has occurred */
  #define B_RDERR (16)
  /* A write error has occurred */
  #define B_WRERR (32)
  #ifdef B_ERROR  /* in SVR4: sometimes defined in /usr/include/sys/buf.h */
  #undef B_ERROR
  #endif
  #define B_ERROR (48)
  /* Use chunked writing */
  #define B_CHUNK (64)
  /* bflush() if a read would block */
  #define B_SAFEREAD (128)
  /* buffer is a socket */
  #define B_SOCKET (256)
  #ifdef CHARSET_EBCDIC
  #define B_ASCII2EBCDIC 0x40000000  /* Enable conversion for this buffer */
  #define B_EBCDIC2ASCII 0x80000000  /* Enable conversion for this buffer */
  #endif /*CHARSET_EBCDIC*/
  
  typedef struct buff_struct BUFF;
  
  struct buff_struct {
      int flags;			/* flags */
      unsigned char *inptr;	/* pointer to next location to read */
      int incnt;			/* number of bytes left to read from input buffer;
  				 * always 0 if had a read error  */
      int outchunk;		/* location of chunk header when chunking */
      int outcnt;			/* number of byte put in output buffer */
      unsigned char *inbase;
      unsigned char *outbase;
      int bufsiz;
      void (*error) (BUFF *fb, int op, void *data);
      void *error_data;
      long int bytes_sent;	/* number of bytes actually written */
  
      ap_pool *pool;
  
  /* could also put pointers to the basic I/O routines here */
      int fd;			/* the file descriptor */
      int fd_in;			/* input file descriptor, if different */
  #ifdef WIN32
      HANDLE hFH;			/* Windows filehandle */
  #endif
  
      /* transport handle, for RPC binding handle or some such */
      void *t_handle;
  
  #ifdef B_SFIO
      Sfio_t *sf_in;
      Sfio_t *sf_out;
  #endif
  };
  
  #ifdef B_SFIO
  typedef struct {
      Sfdisc_t disc;
      BUFF *buff;
  } apache_sfio;
  
  extern Sfdisc_t *bsfio_new(pool *p, BUFF *b);
  #endif
  
  /* Options to bset/getopt */
  #define BO_BYTECT (1)
  
  /* Stream creation and modification */
  API_EXPORT(BUFF *) ap_bcreate(pool *p, int flags);
  API_EXPORT(void) ap_bpushfd(BUFF *fb, int fd_in, int fd_out);
  #ifdef WIN32
  API_EXPORT(void) ap_bpushh(BUFF *fb, HANDLE hFH);
  #endif
  API_EXPORT(int) ap_bsetopt(BUFF *fb, int optname, const void *optval);
  API_EXPORT(int) ap_bgetopt(BUFF *fb, int optname, void *optval);
  API_EXPORT(int) ap_bsetflag(BUFF *fb, int flag, int value);
  API_EXPORT(int) ap_bclose(BUFF *fb);
  
  #define ap_bgetflag(fb, flag)	((fb)->flags & (flag))
  
  /* Error handling */
  API_EXPORT(void) ap_bonerror(BUFF *fb, void (*error) (BUFF *, int, void *),
  			  void *data);
  
  /* I/O */
  API_EXPORT(int) ap_bread(BUFF *fb, void *buf, int nbyte);
  API_EXPORT(int) ap_bgets(char *s, int n, BUFF *fb);
  API_EXPORT(int) ap_blookc(char *buff, BUFF *fb);
  API_EXPORT(int) ap_bskiplf(BUFF *fb);
  API_EXPORT(int) ap_bwrite(BUFF *fb, const void *buf, int nbyte);
  API_EXPORT(int) ap_bflush(BUFF *fb);
  API_EXPORT(int) ap_bputs(const char *x, BUFF *fb);
  API_EXPORT(int) ap_bvputs(BUFF *fb,...);
  API_EXPORT_NONSTD(int) ap_bprintf(BUFF *fb, const char *fmt,...)
  				__attribute__((format(printf,2,3)));
  API_EXPORT(int) ap_vbprintf(BUFF *fb, const char *fmt, va_list vlist);
  
  /* Internal routines */
  API_EXPORT(int) ap_bflsbuf(int c, BUFF *fb);
  API_EXPORT(int) ap_bfilbuf(BUFF *fb);
  
  #ifndef CHARSET_EBCDIC
  
  #define ap_bgetc(fb)   ( ((fb)->incnt == 0) ? ap_bfilbuf(fb) : \
  		    ((fb)->incnt--, *((fb)->inptr++)) )
  
  #define ap_bputc(c, fb) ((((fb)->flags & (B_EOUT|B_WRERR|B_WR)) != B_WR || \
  		     (fb)->outcnt == (fb)->bufsiz) ? ap_bflsbuf(c, (fb)) : \
  		     ((fb)->outbase[(fb)->outcnt++] = (c), 0))
  
  #else /*CHARSET_EBCDIC*/
  
  #define ap_bgetc(fb)   ( ((fb)->incnt == 0) ? ap_bfilbuf(fb) : \
  		    ((fb)->incnt--, (fb->flags & B_ASCII2EBCDIC)\
  		    ?os_toebcdic[(unsigned char)*((fb)->inptr++)]:*((fb)->inptr++)) )
  
  #define ap_bputc(c, fb) ((((fb)->flags & (B_EOUT|B_WRERR|B_WR)) != B_WR || \
  		     (fb)->outcnt == (fb)->bufsiz) ? ap_bflsbuf(c, (fb)) : \
  		     ((fb)->outbase[(fb)->outcnt++] = (fb->flags & B_EBCDIC2ASCII)\
  		     ?os_toascii[(unsigned char)c]:(c), 0))
  
  #endif /*CHARSET_EBCDIC*/
  struct child_info {
  #ifdef WIN32
      /*
       *  These handles are used by ap_call_exec to call 
       *  create process with pipe handles.
       */
      HANDLE hPipeInputRead;
      HANDLE hPipeOutputWrite;
      HANDLE hPipeErrorWrite;
  #else
      /* 
       * We need to put a dummy member in here to avoid compilation
       * errors under certain Unix compilers, like SGI's and HPUX's,
       * which fail to compile a zero-sized struct.  Of course
       * it would be much nicer if there was actually a use for this
       * structure under Unix.  Aah the joys of x-platform code.
       */
      int dummy;
  #endif
  };
  API_EXPORT(int) ap_bspawn_child(pool *, int (*)(void *, child_info *), void *,
  					enum kill_conditions, BUFF **pipe_in, BUFF **pipe_out,
  					BUFF **pipe_err);
  
  /* enable non-blocking operations */
  API_EXPORT(int) ap_bnonblock(BUFF *fb, int direction);
  /* and get an fd to select() on */
  API_EXPORT(int) ap_bfileno(BUFF *fb, int direction);
  
  /* bflush() if a read now would block, but don't actually read anything */
  API_EXPORT(void) ap_bhalfduplex(BUFF *fb);
  
  #ifdef __cplusplus
  }
  #endif
  
  #endif	/* !APACHE_BUFF_H */
  Index: ossp-pkg/sio/BRAINSTORM/apache-stackedio.txt
  ============================================================
  $ cvs update -p -r1.1 apache-stackedio.txt
  [djg: comments like this are from dean]
  
  This past summer, Alexei and I wrote a spec for an I/O Filters API... 
  this proposal addresses one part of that -- 'stacked' I/O with buff.c. 
  
  We have a couple of options for stacked I/O: we can either use existing
  code, such as sfio, or we can rewrite buff.c to do it.  We've gone over
  the first possibility at length, though, and there were problems with each
  implemenation which was mentioned (licensing and compatibility,
  specifically); so far as I know, those remain issues. 
  
  Btw -- sfio will be supported w/in this model... it just wouldn't be the
  basis for the model's implementation. 
  
       -- Ed Korthof        |  Web Server Engineer --
       -- ed@organic.com    |  Organic Online, Inc --
       -- (415) 278-5676    |  Fax: (415) 284-6891 --
  
  ---------------------------------------------------------------------------
  Stacked I/O With BUFFs
  	Sections:
  
  	1.) Overview
  	2.) The API
  		User-supplied structures
  		API functions
  	3.) Detailed Description
  		The bfilter structure
  		The bbottomfilter structure
  		The BUFF structure
  		Public functions in buff.c
  	4.) Efficiency Considerations
  		Buffering
  		Memory copies
  		Function chaining
  		writev
  	5.) Code in buff.c
  		Default Functions
  		Heuristics for writev
  		Writing
  		Reading
  		Flushing data
  		Closing stacks and filters
  		Flags and Options
  
  *************************************************************************
  		Overview
  
  The intention of this API is to make Apache's BUFF structure modular
  while retaining high efficiency.  Basically, it involves rewriting
  buff.c to provide 'stacked' I/O -- where the data passed through a
  series of 'filters', which may modify it.
  
  There are two parts to this, the core code for BUFF structures, and the
  "filters" used to implement new behavior.  "filter" is used to refer to
  both the sets of 5 functions, as shown in the bfilter structure in the
  next section, and to BUFFs which are created using a specific bfliter.
  These will also be occasionally refered to as "user-supplied", though
  the Apache core will need to use these as well for basic functions.
  
  The user-supplied functions should use only the public BUFF API, rather
  than any internal details or functions.  One thing which may not be
  clear is that in the core BUFF functions, the BUFF pointer passed in
  refers to the BUFF on which the operation will happen.  OTOH, in the
  user-supplied code, the BUFF passed in is the next buffer down the
  chain, not the current one.
  
  *************************************************************************
  		The API
  
  	User-supplied structures
  
  First, the bfilter structure is used in all filters:
      typedef struct {
        int (*writev)(BUFF *, void *, struct iovect *, int);
        int (*read)(BUFF *, void *, char *, int);
        int (*write)(BUFF *, void *, const char *, int);
        int (*flush)(BUFF *, void *, const char *, int, bfilter *);
        int (*transmitfile)(BUFF *, void *, file_info_ptr *);
        void (*close)(BUFF *, void *);
      } bfilter;
  
  bfilters are placed into a BUFF structure along with a
  user-supplied void * pointer.
  
  Second, the following structure is for use with a filter which can
  sit at the bottom of the stack:
  
      typedef struct {
        void *(*bgetfileinfo)(BUFF *, void *);
        void (*bpushfileinfo)(BUFF *, void *, void *);
      } bbottomfilter;
  
  
  	BUFF API functions
  
  The following functions are new BUFF API functions:
  
  For filters:
  
  BUFF * bcreatestack(pool *p, int flags, struct bfilter *,
                      struct bbottomfilter *, void *);
  BUFF * bpushfilter (BUFF *, struct bfilter *, void *);
  BUFF * bpushbuffer (BUFF *, BUFF *);
  BUFF * bpopfilter(BUFF *);
  BUFF * bpopbuffer(BUFF *);
  void bclosestack(BUFF *);
  
  For BUFFs in general:
  
  int btransmitfile(BUFF *, file_info_ptr *);
  int bsetstackopts(BUFF *, int, const void *);
  int bsetstackflags(BUFF *, int, int);
  
  Note that a new flag is needed for bsetstackflags:
  B_MAXBUFFERING
  
  The current bcreate should become
  
  BUFF * bcreatebuffer (pool *p, int flags, struct bfilter *, void *);
  
  *************************************************************************
  		Detailed Explanation
  
  	bfilter structure
  
  The void * pointer used in all these functions, as well as those in the
  bbottomfilter structure and the filter API functions, is always the same
  pointer w/in an individual BUFF.
  
  The first function in a bfilter structure is 'writev'; this is only
  needed for high efficiency writing, generally at the level of the system
  interface.  In it's absence, multiple writes will be done w/ 'write'.
  Note that defining 'writev' means you must define 'write'.
  
  The second is 'write'; this is the generic writing function, taking a BUFF
  * to which to write, a block of text, and the length of that block of
  text.  The expected return is the number of characters (out of that block
  of text) which were successfully processed (rather than the number of
  characters actually written). 
  
  The third is 'read'; this is the generic reading function, taking a BUFF *
  from which to read data, and a void * buffer in which to put text, and the
  number of characters to put in that buffer.  The expected return is the
  number of characters placed in the buffer.
  
  The fourth is 'flush'; this is intended to force the buffer to spit out
  any data it may have been saving, as well as to clear any data the
  BUFF code was storing.  If the third argument is non-null, then it
  contains more text to be printed; that text need not be null terminated,
  but the fourth argument contains the length of text to be processed.  The
  expected return value should be the number of characters handled out
  from the third argument (0 if there are none), or -1 on error.  Finally,
  the fifth argument is a pointer to the bfilter struct containing this
  function, so that it may use the write or writev functions in it.   Note
  that general buffering is handled by BUFF's internal code, and module
  writers should not store data for performance reasons.
  
  The fifth is 'transmitfile', which takes as its arguments a buffer to
  which to write (if non-null), the void * pointer containing configuration
  (or other) information for this filter, and a system-dependent pointer
  (the file_info_ptr structure will be defined on a per-system basis)
  containing information required to print the 'file' in question.
  This is intended to allow zero-copy TCP in Win32.
  
  The sixth is 'close'; this is what is called when the connection is being
  closed.  The 'close' should not be passed on to the next filter in the
  stack.  Most filters will not need to use this, but if database handles
  or some other object is created, this is the point at which to remove it.
  Note that flush is called automatically before this.
  
  	bbottomfilter Structure
  
  The first function, bgetfileinfo, is designed to allow Apache to get
  information from a BUFF struct regarding the input and output sources.
  This is currently used to get the input file number to select on a
  socket to see if there's data waiting to be read.  The information
  returned is platform specific; the void * pointer passed in holds
  the void * pointer passed to all user-supplied functions.
  
  The second function, bpushfileinfo, is used to push file information
  onto a buffer, so that the buffer can be fully constructed and ready
  to handle data as soon as possible after a client has connected.
  The first void * pointer holds platform specific information (in
  Unix, it would be a pair of file descriptors); the second holds the
  void * pointer passed to all user-supplied functions.
  
  [djg: I don't think I really agree with the distinction here between
  the bottom and the other filters.  Take the select() example, it's
  valid for any layer to define a fd that can be used for select...
  in fact it's the topmost layer that should really get to make this
  definition.  Or maybe I just have your top and bottom flipped.  In
  any event I think this should be part of the filter structure and
  not separate.]
  
  	The BUFF structure
  
  A couple of changes are needed for this structure: remove fd and
  fd_in; add a bfilter structure; add a pointer to a bbottomfilter;
  add three pointers to the next BUFFs: one for the next BUFF in the
  stack, one for the next BUFF which implements write, and one
  for the next BUFF which implements read.
  
  
  	Public functions in buff.c
  
  BUFF * bpushfilter (BUFF *, struct bfilter *, void *);
  
  This function adds the filter functions from bfilter, stacking them on
  top of the BUFF.  It returns the new top BUFF, or NULL on error.
  
  BUFF * bpushbuffer (BUFF *, BUFF *);
  
  This function places the second buffer on the top of the stack that
  the first one is on.  It returns the new top BUFF, or NULL on error.
  
  BUFF * bpopfilter(BUFF *);
  BUFF * bpopbuffer(BUFF *);
  
  Unattaches the top-most filter from the stack, and returns the new
  top-level BUFF, or NULL on error or when there are no BUFFs
  remaining.  The two are synonymous.
  
  void bclosestack(BUFF *);
  
  Closes the I/O stack, removing all the filters in it.
  
  BUFF * bcreatestack(pool *p, int flags, struct bfilter *,
                      struct bbottomfilter *, void *);
  
  This creates an I/O stack.  It returns NULL on error.
  
  BUFF * bcreatebuffer(pool *p, int flags, struct bfilter *, void *);
  
  This creates a BUFF for later use with bpushbuffer.  The BUFF is
  not set up to be used as an I/O stack, however.  It returns NULL
  on error.
  
  int bsetstackopts(BUFF *, int, const void *);
  int bsetstackflags(BUFF *, int, int);
  
  These functions, respectively, set options on all the BUFFs in a
  stack.  The new flag, B_MAXBUFFERING is used to disable a feature
  described in the next section, whereby only the first and last
  BUFFs will buffer data.
  
  *************************************************************************
  		Efficiency Considerations
  
  	Buffering
  
  All input and output is buffered by the standard buffering code.
  People writing code to use buff.c should not concern themselves with
  buffering for efficiency, and should not buffer except when necessary.
  
  The write function will typically be called with large blocks of text;
  the read function will attempt to place the specified number of bytes
  into the buffer.
  
  Dean noted that there are possible problems w/ multiple buffers;
  further, some applications must not be buffered.  This can be
  partially dealt with by turning off buffering, or by flushing the
  data when appropriate.
  
  However, some potential problems arise anyway.  The simplest example
  involves shrinking transformations; suppose that you have a set
  of filters, A, B, and C, such that A outputs less text than it
  recieves, as does B (say A strips comments, and B gzips the result).
  Then after a write to A which fills the buffer, A writes to B.
  However, A won't write enough to fill B's buffer, so a memory copy
  will be needed.  This continues till B's buffer fills up, then
  B will write to C's buffer -- with the same effect.
  
  [djg: I don't think this is the issue I was really worried about --
  in the case of shrinking transformations you are already doing 
  non-trivial amounts of CPU activity with the data, and there's
  no copying of data that you can eliminate anyway.  I do recognize
  that there are non-CPU intensive filters -- such as DMA-capable
  hardware crypto cards.  I don't think they're hard to support in
  a zero-copy manner though.]
  
  The maximum additional number of bytes which will be copied in this
  scenario is on the order of nk, where n is the total number of bytes,
  and k is the number of filters doing shrinking transformations.
  
  There are several possible solutions to this issue.  The first
  is to turn off buffering in all but the first filter and the
  last filter.  This reduces the number of unnecessary byte copies
  to at most one per byte, however it means that the functions in
  the stack will get called more frequently; but it is the default
  behavior, overridable by setting the B_MAXBUFFERING with
  bsetstackflags.  Most filters won't involve a net shrinking
  transformation, so even this will rarely be an issue; however,
  if the filters do involve a net shrinking transformation, for
  the sake of network-efficiency (sending reasonably sized blocks),
  it may be more efficient anyway.
  
  A second solution is more general use of writev for communication
  between different buffers.  This complicates the programing work,
  however.
  
  
  	Memory copies
  
  Each write function is passed a pointer to constant text; if any changes
  are being made to the text, it must be copied.  However, if no changes
  are made to the text (or to some smaller part of it), then it may be
  sent to the next filter without any additional copying.  This should
  provide the minimal necessary memory copies.
  
  [djg: Unfortunately this makes it hard to support page-flipping and
  async i/o because you don't have any reference counts on the data.
  But I go into a little detail that already in docs/page_io.]
  
  	Function chaining
  
  In order to avoid unnecessary function chaining for reads and writes,
  when a filter is pushed onto the stack, the buff.c code will determine
  which is the next BUFF which contains a read or write function, and
  reads and writes, respectively, will go directly to that BUFF.
  
  	writev
  
  writev is a function for efficient writing to the system; in terms of
  this API, however, it also works for dealing with multiple blocks of
  text without doing unnecessary byte copies.  It is not required.
  
  Currently, the system level writev is used in two contexts: for
  chunking and when a block of text is writen which, combined with
  the text already in the buffer, would make the buffer overflow.
  
  writev would be implemented both by the default bottom level filter
  and by the chunking filter for these operations.  In addition, writev
  may, be used, as noted above, to pass multiple blocks of text w/o
  copying them into a single buffer.  Note that if the next filter does
  not implement writev, however, this will be equivalent to repeated
  calls to write, which may or may not be more efficient.  Up to
  IOV_MAX-2 blocks of text may be passed along in this manner.  Unlike
  the system writev call, the writev in this API should be called only
  once, with a array with iovec's and a count as to the number of
  iovecs in it.
  
  If a bfilter defines writev, writev will be called whether or not
  NO_WRITEV is set; hence, it should deal with that case in a reasonable
  manner.
  
  [djg: We can't guarantee atomicity of writev() when we emulate it.
  Probably not a problem, just an observation.]
  
  *************************************************************************
  		Code in buff.c
  
  	Default Functions
  
  The default actions are generally those currently performed by Apache,
  save that they they'll only attempt to write to a buffer, and they'll
  return an error if there are no more buffers.  That is, you must implement
  read, write, and flush in the bottom-most filter.
  
  Except for close(), the default code will simply pass the function call
  on to the next filter in the stack.  Some samples follow.
  
  	Heuristics for writev
  
  Currently, we call writev for chunking, and when we get a enough so that
  the total overflows the buffer.  Since chunking is going to become a
  filter, the chunking filter will use writev; in addition, bwrite will
  trigger bwritev as shown (note that system specific information should
  be kept at the filter level):
  
  in bwrite:
  
      if (fb->outcnt > 0 && nbyte + fb->outcnt >= fb->bufsiz) {
          /* build iovec structs */
          struct iovec vec[2];
          vec[0].iov_base = (void *) fb->outbase;
          vec[0].iov_len = fb->outcnt;
          fb->outcnt = 0;
          vec[1].iov_base = (void *)buff;
          vec[1].iov_length = nbyte;
          return bwritev (fb, vec, 2);
      } else if (nbye >= fb->bufsiz) {
          return write_with_errors(fb,buff,nbyte);
      }
  
  Note that the code above takes the place of large_write (as well
  as taking code from it).
  
  So, bwritev would look something like this (copying and pasting freely
  from the current source for writev_it_all, which could be replaced):
  
  -----
  int bwritev (BUFF * fb, struct iovec * vec, int nvecs) {
      if (!fb)
          return -1; /* the bottom level filter implemented neither write nor
                      * writev. */
      if (fb->bfilter.bwritev) {
          return bf->bfilter.writev(fb->next, vec, nvecs);
      } else if (fb->bfilter.write) {
          /* while it's nice an easy to build the vector and crud, it's painful
           * to deal with partial writes (esp. w/ the vector)
           */
          int i = 0,rv;
          while (i < nvecs) {
              do {
                  rv = fb->bfilter.write(fb, vec[i].iov_base, vec[i].iov_len);
              } while (rv == -1 && (errno == EINTR || errno == EAGAIN)
                       && !(fb->flags & B_EOUT));
              if (rv == -1) {
                  if (errno != EINTR && errno != EAGAIN) {
                      doerror (fb, B_WR);
                  }
                  return -1;
              }
              fb->bytes_sent += rv;
              /* recalculate vec to deal with partial writes */
              while (rv > 0) {
                  if (rv < vec[i].iov_len) {
                      vec[i].iov_base = (char *)vec[i].iov_base + rv;
                      vec[i].iov_len -= rv;
                      rv = 0;
                      if (vec[i].iov_len == 0) {
                          ++i;
                      }
                  } else {
                      rv -= vec[i].iov_len;
                      ++i;
                  }
              }
              if (fb->flags & B_EOUT)
                  return -1;
          }
          /* if we got here, we wrote it all */
          return 0;
      } else {
          return bwritev(fb->next,vec,nvecs);
      }
  }
  -----
  The default filter's writev function will pretty much like
  writev_it_all.
  
  
  	Writing
  
  The general case for writing data is significantly simpler with this
  model.  Because special cases are not dealt with in the BUFF core,
  a single internal interface to writing data is possible; I'm going
  to assume it's reasonable to standardize on write_with_errors, but
  some other function may be more appropriate.
  
  In the revised bwrite (which I'll ommit for brievity), the following
  must be done:
  	check for error conditions
  	check to see if any buffering is done; if not, send the data
  		directly to the write_with_errors function
  	check to see if we should use writev or write_with_errors
  		as above
  	copy the data to the buffer (we know it fits since we didn't
  		need writev or write_with_errors)
  
  The other work the current bwrite is doing is
  	ifdef'ing around NO_WRITEV
  	numerous decisions regarding whether or not to send chunks
  
  Generally, buff.c has a number of functions whose entire purpose is
  to handle particular special cases wrt chunking, all of which could
  be simplified with a chunking filter.
  
  write_with_errors would not need to change; buff_write would.  Here
  is a new version of it:
  
  -----
  /* the lowest level writing primitive */
  static ap_inline int buff_write(BUFF *fb, const void *buf, int nbyte)
  {
      if (fb->bfilter.write)
          return fb->bfilter.write(fb->next_writer,buff,nbyte);
      else
          return bwrite(fb->next_writer,buff,nbyte);
  }
  -----
  
  If the btransmitfile function is called on a buffer which doesn't implement
  it, the system will attempt to read data from the file identified
  by the file_info_ptr structure and use other methods to write to it.
  
  	Reading
  
  One of the basic reading functions in Apache 1.3b3 is buff_read;
  here is how it would look within this spec:
  
  -----
  /* the lowest level reading primitive */
  static ap_inline int buff_read(BUFF *fb, void *buf, int nbyte)
  {
      int rv;
  
      if (!fb)
          return -1; /* the bottom level filter is not set up properly */
  
      if (fb->bfilter.read)
          return fb->bfilter.read(fb->next_reader,buf,nbyte,fb->bfilter_info);
      else
          return bread(fb->next_reader,buff,nbyte);
  }
  -----
  The code currently in buff_read would become part of the default
  filter.
  
  
  	Flushing data
  
  flush will get passed on down the stack automatically, with recursive
  calls to bflush.  The user-supplied flush function will be called then,
  and also before close is called.  The user-supplied flush should not
  call flush on the next buffer.
  
  [djg: Poorly written "expanding" filters can cause some nastiness
  here.  In order to flush a layer you have to write out your current
  buffer, and that may cause the layer below to overflow a buffer and
  flush it.  If the filter is expanding then it may have to add more to
  the buffer before flushing it to the layer below.  It's possible that
  the layer below will end up having to flush twice.  It's a case where
  writev-like capabilities are useful.]
  
  	Closing Stacks and Filters
  
  When a filter is removed from the stack, flush will be called then close
  will be called.  When the entire stack is being closed, this operation
  will be done automatically on each filter within the stack; generally,
  filters should not operate on other filters further down the stack,
  except to pass data along when flush is called.
  
  	Flags and Options
  
  Changes to flags and options using the current functions only affect
  one buffer.  To affect all the buffers on down the chain, use
  bsetstackopts or bsetstackflags.
  
  bgetopt is currently only used to grab a count of the bytes sent;
  it will continue to provide that functionality.  bgetflags is
  used to provide information on whether or not the connection is
  still open; it'll continue to provide that functionality as well.
  
  The core BUFF operations will remain, though some operations which
  are done via flags and options will be done by attaching appropriate
  filters instead (eg. chunking).
  
  [djg: I'd like to consider filesystem metadata as well -- we only need
  a few bits of metadata to do HTTP: file size and last modified.  We
  need an etag generation function, it is specific to the filters in
  use.  You see, I'm envisioning a bottom layer which pulls data out of
  a database rather than reading from a file.]
  
  -------
  
  This file is there so that I do not have to remind myself
  about the reasons for Layered IO, apart from the obvious one.
  
  0. To get away from a 1 to 1 mapping
  
     i.e. a single URI can cause multiple backend requests, 
     in arbitrary configurations, such as in paralel, tunnel/piped, 
     or in some sort of funnel mode. Such multiple backend
     requests, with fully layered IO can be treated exactly
     like any URI request; and recursion is born :-)
  
  1. To do on the fly charset conversion
  
     Be, theoretically, be able to send out your content using
     latin1, latin2 or any other charset; generated from static
     _and_ dynamic content in other charsets (typically unicode
     encoded as UTF7 or UTF8). Such conversion is prompted by
     things like the user-agent string, a cookie, or other hints
     about the capabilities of the OS, language preferences and
     other (in)capabilities of the final receipient. 
  
  2. To be able to do fancy templates
  
     Have your application/cgi sending out an XML structure of
     field/value pair-ed contents; which is substituted into a 
     template by the web server; possibly based on information 
     accessible/known to the webserver which you do not want to 
     be known to the backend script. Ideally that template would
     be just as easy to generate by a backend as well (see 0).
  
  3. On the fly translation
  
     And other general text and output mungling, such as translating
     an english page in spanish whilst it goes through your Proxy,
     or JPEG-ing a GIF generated by mod_perl+gd.
  
  Dw.
  ---------
  
  From dgaudet@arctic.org Fri Feb 20 00:36:52 1998
  Date: Fri, 20 Feb 1998 00:35:37 -0800 (PST)
  From: Dean Gaudet <dgaudet@arctic.org>
  To: new-httpd@apache.org
  Subject: page-based i/o
  X-Comment: Visit http://www.arctic.org/~dgaudet/legal for information regarding copyright and disclaimer.
  Reply-To: new-httpd@apache.org
  
  Ed asked me for more details on what I mean when I talk about "paged based
  zero copy i/o". 
  
  While writing mod_mmap_static I was thinking about the primitives that the
  core requires of the filesystem.  What exactly is it that ties us into the
  filesystem?  and how would we abstract it?  The metadata (last modified
  time, file length) is actually pretty easy to abstract.  It's also easy to
  define an "index" function so that MultiViews and such can be implemented. 
  And with layered I/O we can hide the actual details of how you access
  these "virtual" files. 
  
  But therein lies an inefficiency.  If we had only bread() for reading
  virtual files, then we would enforce at least one copy of the data. 
  bread() supplies the place that the caller wants to see the data, and so
  the bread() code has to copy it.  But there's very little reason that
  bread() callers have to supply the buffer... bread() itself could supply
  the buffer.  Call this new interface page_read().  It looks something like
  this:
  
      typedef struct {
  	const void *data;
  	size_t data_len; /* amt of data on page which is valid */
  	... other stuff necessary for managing the page pool ...
      } a_page_head;
  
      /* returns NULL if an error or EOF occurs, on EOF errno will be
       * set to 0
       */
      a_page_head *page_read(BUFF *fb);
  
      /* queues entire page for writing, returns 0 on success, -1 on
       * error
       */
      int page_write(BUFF *fb, a_page_head *);
  
  It's very important that a_page_head structures point to the data page
  rather than be part of the data page.  This way we can build a_page_head
  structures which refer to parts of mmap()d memory.
  
  This stuff is a little more tricky to do, but is a big win for performance.
  With this integrated into our layered I/O it means that we can have
  zero-copy performance while still getting the advantages of layering.
  
  But note I'm glossing over a bunch of details... like the fact that we
  have to decide if a_page_heads are shared data, and hence need reference
  counting (i.e. I said "queues for writing" up there, which means some
  bit of the a_page_head data has to be kept until its actually written).
  Similarly for the page data.
  
  There are other tricks in this area that we can take advantage of --
  like interprocess communication on architectures that do page flipping.
  On these boxes if you write() something that's page-aligned and page-sized
  to a pipe or unix socket, and the other end read()s into a page-aligned
  page-sized buffer then the kernel can get away without copying any data.
  It just marks the two pages as shared copy-on-write, and only when
  they're written to will the copy be made.  So to make this work, your
  writer uses a ring of 2+ page-aligned/sized buffers so that it's not
  writing on something the reader is still reading.
  
  Dean
  
  ----
  
  For details on HPUX and avoiding extra data copies, see
  <ftp://ftp.cup.hp.com/dist/networking/briefs/copyavoid.pdf>.
  
  (note that if you get the postscript version instead, you have to 
  manually edit it to remove the front page before any version of 
  ghostscript that I have used will read it)
  
  ----
  
  I've been told by an engineer in Sun's TCP/IP group that zero-copy TCP
  in Solaris 2.6 occurs when:
  
      - you've got the right interface card (OC-12 ATM card I think)
      - you use write()
      - your write buffer is 16k aligned and a multiple of 16k in size
  
  We currently get the 16k stuff for free by using mmap().  But sun's
  current code isn't smart enough to deal with our initial writev()
  of the headers and first part of the response.
  
  ----
  
  Systems that have a system call to efficiently send the contents of a 
  descriptor across the network.  This is probably the single best way
  to do static content on systems that support it.
  
  HPUX: (10.30 and on)
  
        ssize_t sendfile(int s, int fd, off_t offset, size_t nbytes,
                const struct iovec *hdtrl, int flags);
  
        (allows you to add headers and trailers in the form of iovec
        structs)  Marc has a man page; ask if you want a copy.  Not included
        due to copyright issues.  man page also available from 
        http://docs.hp.com/ (in particular, 
        http://docs.hp.com:80/dynaweb/hpux11/hpuxen1a/rvl3en1a/@Generic__BookTextView/59894;td=3 )
  
  Windows NT:
  
  	BOOL TransmitFile(     SOCKET hSocket, 
  	    HANDLE hFile, 
  	    DWORD nNumberOfBytesToWrite, 
  	    DWORD nNumberOfBytesPerSend, 
  	    LPOVERLAPPED lpOverlapped, 
  	    LPTRANSMIT_FILE_BUFFERS lpTransmitBuffers, 
  	    DWORD dwFlags 
  	   ); 
  
  	(does it start from the current position in the handle?  I would
  	hope so, or else it is pretty dumb.)
  
  	lpTransmitBuffers allows for headers and trailers.
  
  	Documentation at:
  
  	http://premium.microsoft.com/msdn/library/sdkdoc/wsapiref_3pwy.htm
  	http://premium.microsoft.com/msdn/library/conf/html/sa8ff.htm
  
  	Even less related to page based IO: just context switching:
  	AcceptEx does an accept(), and returns the start of the
  	input data.  see:
  
  	http://premium.microsoft.com/msdn/library/sdkdoc/pdnds/sock2/wsapiref_17jm.htm
  
  	What this means is you require one less syscall to do a
  	typical request, especially if you have a cache of handles
  	so you don't have to do an open or close.  Hmm.  Interesting
  	question: then, if TransmitFile starts from the current
  	position, you need a mutex around the seek and the
  	TransmitFile.  If not, you are just limited (eg. byte
  	ranges) in what you can use it for.
  
  	Also note that TransmitFile can specify TF_REUSE_SOCKET, so that
  	after use the same socket handle can be passed to AcceptEx.  
  	Obviously only good where we don't have a persistent connection
  	to worry about.
  
  ----
  
  Note that all this is shot to bloody hell by HTTP-NG's multiplexing.
  If fragment sizes are big enough, it could still be worthwhile to
  do copy avoidence.  It also causes performance issues because of
  its credit system that limits how much you can write in a single
  chunk.
  
  Don't tell me that if HTTP-NG becomes popular we will seen vendors 
  embedding SMUX (or whatever multiplexing is used) in the kernel to
  get around this stuff.  There we go, Apache with a loadable kernel
  module.  
  
  ----
  
  Larry McVoy's document for SGI regarding sendfile/TransmitFile:
  ftp://ftp.bitmover.com/pub/splice.ps.gz
  From dgaudet@arctic.org Sun Jun 20 11:07:58 1999
  Path: engelschall.com!mail2news!apache.org!new-httpd-owner-rse+apache=en.muc.de
  From: dgaudet@arctic.org (Dean Gaudet)
  Newsgroups: en.lists.apache-new-httpd
  Subject: mpm update
  Date: 19 Jun 1999 07:17:00 +0200
  Organization: Mail2News at engelschall.com
  Lines: 104
  Approved: postmaster@m2ndom
  Message-ID: <Pine.LNX.3.96dg4.990618172933.27639Y-100000@twinlark.arctic.org>
  Reply-To: new-httpd@apache.org
  NNTP-Posting-Host: en1.engelschall.com
  X-Trace: en1.engelschall.com 929769420 64417 141.1.129.1 (19 Jun 1999 05:17:00 GMT)
  X-Complaints-To: postmaster@engelschall.com
  NNTP-Posting-Date: 19 Jun 1999 05:17:00 GMT
  X-Mail2News-Gateway: mail2news.engelschall.com
  Xref: engelschall.com en.lists.apache-new-httpd:31056
  
  I imported mpm-3 into the apache-2.0 repository (tag mpm-3 if you want
  it).
  
  Then I threw in a bunch of my recent email ramblings, because I'm getting
  tired of repeating them, mostly off-list to folks who ask "why doesn't
  apache do XYZ?"  I intend to be more proactive in this area, because it
  can only help. 
  
  Then I ripped up BUFF and broke lots of stuff and put in a first crack at
  layering.  Info on that below.
  
  If you check out the tree, and build it (using Configuration.mpm) you
  should be able to serve up the top page of the manual, that's all I've
  tested so far ;) 
  
  Dean
  
  goals? we need an i/o abstraction which has these properties:
  
  - buffered and non-buffered modes
  
      The buffered mode should look like FILE *.
  
      The non-buffered mode should look more like read(2)/write(2).
  
  - blocking and non-blocking modes
  
      The blocking mode is the "easy" mode -- it's what most module writers
      will see.  The non-blocking mode is the "hard" mode, this is where
      module writers wanting to squeeze out some speed will have to play.
      In order to build async/sync hybrid models we need the
      non-blocking i/o abstraction.
  
  - timed reads and writes (for blocking cases)
  
      This is part of my jihad against asynchronous notification.
  
  - i/o filtering or layering
  
      Yet another Holy Grail of computing.  But I digress.  These are
      hard when you take into consideration non-blocking i/o -- you have
      to keep lots of state.  I expect our core filters will all support
      non-blocking i/o, well at least the ones I need to make sure we kick
      ass on benchmarks.  A filter can deny a switch to non-blocking mode,
      the server will have to recover gracefully (ha).
  
  - copy-avoidance
  
      Hey what about zero copy a la IO-Lite?  After having experienced it
      in a production setting I'm no longer convinced of its benefits.
      There is an enormous amount of overhead keeping lists of buffers,
      and reference counts, and cleanup functions, and such which requires
      a lot of tuning to get right.  I think there may be something here,
      but it's not a cakewalk.
  
      What I do know is that the heuristics I put into apache-1.3 to choose
      writev() at times are almost as good as what you can get from doing
      full zero-copy in the cases we *currently* care about.  To put it
      another way, let's wait another generation to deal with zero copy.
  
      But sendfile/transmitfile/etc. those are still interesting.
  
      So instead of listing "zero copy" as a property, I'll list
      "copy-avoidance".
  
  So far?
  
  - ap_bungetc added
  - ap_blookc changed to return the character, rather than take a char *buff
  - in theory, errno is always useful on return from a BUFF routine
  - ap_bhalfduplex, B_SAFEREAD will be re-implemented using a layer I think
  - chunking gone for now, will return as a layer
  - ebcdic gone for now... it should be a layer
  
  - ap_iol.h defined, first crack at the layers...
  
      Step back a second to think on it.  Much like we have fread(3)
      and read(2), I've got a BUFF and an ap_iol abstraction.  An ap_iol
      could use a BUFF if it requires some form of buffering, but many
      won't require buffering... or can do a better job themselves.
  
      Consider filters such as:
  	- ebcdic -> ascii
  	- encryption
  	- compression
      These all share the property that no matter what, they're going to make
      an extra copy of the data.  In some cases they can do it in place (read)
      or into a fixed buffer... in most cases their buffering requirements
      are different than what BUFF offers.
  
      Consider a filter such as chunking.  This could actually use the writev
      method to get its job done... depends on the chunks being used.  This
      is where zero-copy would be really nice, but we can get by with a few
      heuristics.
  
      At any rate -- the NSPR folks didn't see any reason to included a
      buffered i/o abstraction on top of their layered i/o abstraction... so
      I feel like I'm not the only one who's thinking this way.
  
  - iol_unix.c implemented... should hold us for a bit
  
  
  
  
  From dgaudet@arctic.org Mon Jun 28 19:06:50 1999
  Path: engelschall.com!mail2news!apache.org!new-httpd-owner-rse+apache=en.muc.de
  From: dgaudet@arctic.org (Dean Gaudet)
  Newsgroups: en.lists.apache-new-httpd
  Subject: Re: async routines
  Date: 28 Jun 1999 17:33:24 +0200
  Organization: Mail2News at engelschall.com
  Lines: 96
  Approved: postmaster@m2ndom
  Message-ID: <Pine.LNX.3.96dg4.990628081527.31647G-100000@twinlark.arctic.org>
  Reply-To: new-httpd@apache.org
  NNTP-Posting-Host: en1.engelschall.com
  X-Trace: en1.engelschall.com 930584004 99816 141.1.129.1 (28 Jun 1999 15:33:24 GMT)
  X-Complaints-To: postmaster@engelschall.com
  NNTP-Posting-Date: 28 Jun 1999 15:33:24 GMT
  X-Mail2News-Gateway: mail2news.engelschall.com
  Xref: engelschall.com en.lists.apache-new-httpd:31280
  
  [hope you don't mind me cc'ing new-httpd zach, I think others will be
  interested.]
  
  On Mon, 28 Jun 1999, Zach Brown wrote:
  
  > so dean, I was wading through the mpm code to see if I could munge the
  > sigwait stuff into it.
  > 
  > as far as I could tell, the http protocol routines are still blocking.
  > what does the future hold in the way for async routines? :)  I basically
  > need a way to do something like..
  
  You're still waiting for me to get the async stuff in there... I've done
  part of the work -- the BUFF layer now supports non-blocking sockets. 
  
  However, the HTTP code will always remain blocking.  There's no way I'm
  going to try to educate the world in how to write async code... and since
  our HTTP code has arbitrary call outs to third party modules... It'd
  have a drastic effect on everyone to make this change.
  
  But I honestly don't think this is a problem.  Here's my observations:
  
  All the popular HTTP clients send their requests in one packet (or two
  in the case of a POST and netscape).  So the HTTP code would almost
  never have to block while processing the request.  It may block while
  processing a POST -- something which someone else can worry about later,
  my code won't be any worse than what we already have in apache.  So
  any effort we put into making the HTTP parsing code async-safe would
  be wasted on the 99.9% case.
  
  Most responses fit in the socket's send buffer, and again don't require
  async support.  But we currently do the lingering_close() routine which
  could easily use async support.  Large responses also could use async
  support.
  
  The goal of HTTP parsing is to figure out which response object to
  send.  In most cases we can reduce that to a bunch of common response
  types:
  
  - copying a file to the socket
  - copying a pipe/socket to the socket  (IPC, CGIs)
  - copying a mem region to the socket (mmap, some dynamic responses)
  
  So what we do is we modify the response handlers only.  We teach them
  about how to send async responses.
  
  There will be a few new primitives which will tell the core "the response
  fits one of these categories, please handle it".  The core will do the
  rest -- and for MPMs which support async handling, the core will return
  to the MPM and let the MPM do the work async...  the MPM will call a
  completion function supplied by the core.  (Note that this will simplify
  things for lots of folks... for example, it'll let us move range request
  handling to a common spot so that more than just default_handler
  can support it.)
  
  I expect this to be a simple message passing protocol (pass by reference).
  Well rather, that's how I expect to implement it in ASH -- where I'll
  have a single thread per-process doing the select/poll stuff; and the
  other threads are in a pool that handles the protocol stuff.  For your
  stuff you may want to do it another way -- but we'll be using a common
  structure that the core knows about... and that structure will look like
  a message:
  
      struct msg {
  	enum {
  	    MSG_SEND_FILE,
  	    MSG_SEND_PIPE,
  	    MSG_SEND_MEM,
  	    MSG_LINGERING_CLOSE,
  	    MSG_WAIT_FOR_READ,	/* for handling keep-alives */
  	    ...
  	} type;
  	BUFF *client;
  	void (*completion)(struct msg *, int status);
  	union {
  	    ... extra data here for whichver types need it ...;
  	} x;
      };
  
  The nice thing about this is that these operations are protocol
  independant... at this level there's no knowledge of HTTP, so the same
  MPM core could be used to implement other protocols.
  
  > so as I was thinking about this stuff, I realized it might be neat to have
  > 'classes' of non blocking pending work and have different threads with
  > differnt priorities hacking on it.  Say we have a very high priority
  > thread that accepts connectoins, does initial header parsing, and
  > sendfile()ing data out.  We could have lower priority threads that are
  > spinning doing 'harder' BUFF work like an encryption layer or gziping
  > content, whatever.
  
  You should be able to implement this in your MPM easily I think... because
  you'll see the different message types and can distribute them as needed.
  
  Dean
  
  Index: ossp-pkg/sio/BRAINSTORM/att-sfio.txt
  ============================================================
  $ cvs update -p -r1.1 att-sfio.txt
  
  
  
  SFIO(3)                                                   SFIO(3)
  
  
  NNAAMMEE
         ssffiioo - safe/fast string/file input/output
  
  SSYYNNOOPPSSIISS
         #include   <sfio.h>
  
     DDAATTAA TTYYPPEESS
         Void_t;
         Sfoff_t;
         Sflong_t;
         Sfulong_t;
         Sfdouble_t;
  
         Sfio_t;
  
         Sfdisc_t;
         ssize_t    (*Sfread_f)(Sfio_t*, Void_t*, size_t, Sfdisc_t*);
         ssize_t    (*Sfwrite_f)(Sfio_t*, const Void_t*, size_t, Sfdisc_t*);
         Sfoff_t    (*Sfseek_f)(Sfio_t*, Sfoff_t, int, Sfdisc_t*);
         int        (*Sfexcept_f)(Sfio_t*, int, Void_t*, Sfdisc_t*);
  
         Sffmt_t;
         int        (*Sffmtext_f)(Sfio_t*, Void_t*, Sffmt_t*);
         int        (*Sffmtevent_f)(Sfio_t*, int, Void_t*, Sffmt_t*);
  
         SFIO_VERSION
  
     BBIITT FFLLAAGGSS
         SF_STRING
         SF_READ
         SF_WRITE
         SF_APPEND
         SF_LINE
         SF_SHARE
         SF_PUBLIC
         SF_MALLOC
         SF_STATIC
         SF_IOCHECK
         SF_BUFCONST
         SF_WHOLE
  
     OOPPEENNIINNGG//CCLLOOSSIINNGG SSTTRREEAAMMSS
         Sfio_t*    sfnew(Sfio_t* f, Void_t* buf, size_t size, int fd, int flags);
         Sfio_t*    sfopen(Sfio_t* f, const char* string, const char* mode);
         Sfio_t*    sfpopen(Sfio_t* f, const char* cmd, const char* mode);
         Sfio_t*    sftmp(size_t size);
         int        sfclose(Sfio_t* f);
  
     IINNPPUUTT//OOUUTTPPUUTT OOPPEERRAATTIIOONNSS
         int        sfgetc(Sfio_t* f);
         int        sfputc(Sfio_t* f, int c);
         int        sfnputc(Sfio_t* f, int c, int n);
         int        sfungetc(Sfio_t* f, int c);
  
  
  
  
                            05 August 1999                        1
  
  
  
  
  
  SFIO(3)                                                   SFIO(3)
  
  
         Sfulong_t  sfgetu(Sfio_t* f);
         int        sfputu(Sfio_t* f, Sfulong_t v);
         Sflong_t   sfgetl(Sfio_t* f);
         int        sfputl(Sfio_t* f, Sflong_t v);
         Sfdouble_t sfgetd(Sfio_t* f);
         int        sfputd(Sfio_t* f, Sfdouble_t v);
  
         char*      sfgetr(Sfio_t* f, int rsc, int type);
         ssize_t    sfputr(Sfio_t* f, const char* s, int rsc);
         Sfoff_t    sfmove(Sfio_t* fr, Sfio_t* fw, Sfoff_t n, int rsc);
  
         ssize_t    sfread(Sfio_t* f, Void_t* buf, size_t n);
         ssize_t    sfwrite(Sfio_t* f, const Void_t* buf, size_t n);
         Sfoff_t    sfseek(Sfio_t* f, Sfoff_t offset, int type);
         Void_t*    sfreserve(Sfio_t* f, ssize_t n, int lock);
  
     DDAATTAA FFOORRMMAATTTTIINNGG
         int        sfscanf(Sfio_t* f, const char* format, ...);
         int        sfsscanf(const char* s, const char* format, ...);
         int        sfvsscanf(const char* s, const char* format, va_list args);
         int        sfvscanf(Sfio_t* f, const char* format, va_list args);
  
         int        sfprintf(Sfio_t* f, const char* format, ...);
         char*      sfprints(const char* format, ...);
         int        sfsprintf(char* s, int n, const char* format, ...);
         int        sfvsprintf(char* s, int n, const char* format, va_list args);
         int        sfvprintf(Sfio_t* f, const char* format, va_list args);
  
         Sffmt_t;
         int        (*Sffmtext_f)(Sfio_t* f, Void_t* v, Sffmt_t* fe);
         int        (*Sffmtevent_f)(Sfio_t* f, int type, Void_t* v, Sffmt_t* fe);
         void       va_copy(va_list to, va_list fr);
         long       sffmtversion(Sffmt_t* fe, type);
  
     BBUUFFFFEERRIINNGG,, SSYYNNCCHHRROONNIIZZAATTIIOONN
         Void_t*    sfsetbuf(Sfio_t* f, Void_t* buf, size_t size);
         int        sfsync(Sfio_t* f);
         int        sfpoll(Sfio_t** flist, int n, int timeout);
         Sfio_t*    sfpool(Sfio_t* f, Sfio_t* poolf, int mode);
         int        sfpurge(Sfio_t* f);
  
     DDIISSCCIIPPLLIINNEE,, EEVVEENNTT HHAANNDDLLIINNGG
         Sfdisc_t*  sfdisc(Sfio_t* f, Sfdisc_t* disc);
         int        sfraise(Sfio_t* f, int type, Void_t* data);
         ssize_t    sfrd(Sfio_t* f, Void_t* buf, size_t n, Sfdisc_t* disc);
         ssize_t    sfwr(Sfio_t* f, const Void_t* buf, size_t n, Sfdisc_t* disc);
         Sfoff_t    sfsk(Sfio_t* f, Sfoff_t offset, int type, Sfdisc_t* disc);
  
     SSTTRREEAAMM CCOONNTTRROOLL
         int        sfset(Sfio_t* f, int flags, int i);
         int        sfsetfd(Sfio_t* f, int fd);
         Sfio_t*    sfstack(Sfio_t* base, Sfio_t* top);
         Sfio_t*    sfswap(Sfio_t* f1, Sfio_t* f2);
  
  
  
  
                            05 August 1999                        2
  
  
  
  
  
  SFIO(3)                                                   SFIO(3)
  
  
     SSTTRREEAAMM IINNFFOORRMMAATTIIOONN
         Sfoff_t    sfsize(Sfio_t* f);
         Sfoff_t    sftell(Sfio_t* f);
         ssize_t    sfvalue(Sfio_t* f);
         int        sffileno(Sfio_t* f);
  
         int        sfstacked(Sfio_t* f);
         int        sfeof(Sfio_t* f);
         int        sferror(Sfio_t* f);
         int        sfclrerr(Sfio_t* f);
         int        sfclrlock(Sfio_t* f);
  
         int        sfnotify(void (*notify)(Sfio_t* f, int type, int fd));
  
     MMIISSCCEELLLLAANNEEOOUUSS FFUUNNCCTTIIOONNSS
         ssize_t    sfslen();
         int        sfulen(Sfulong_t v);
         int        sfllen(Sflong_t v);
         int        sfdlen(Sfdouble_t v);
         ssize_t    sfpkrd(int fd, Void_t* buf, size_t n,
                           int rsc, long tm, int peek);
  
     FFUULLLL SSTTRRUUCCTTUURREE SSFFIIOO__TT
         #include   <sfio_t.h>
         #define    SFNEW(buf,size,file,flags,disc)
  
     EEXXAAMMPPLLEE DDIISSCCIIPPLLIINNEESS
         int        sfdcdio(Sfio_t* f, size_t bufsize);
         int        sfdcdos(Sfio_t* f);
         int        sfdcfilter(Sfio_t* f, const char* cmd);
         int        sfdclzw(Sfio_t* f);
         int        sfdcseekable(Sfio_t* f);
         int        sfdcslow(Sfio_t* f);
         int        sfdcsubstream(Sfio_t* f, Sfio_t* parent,
                                  Sfoff_t offset, Sfoff_t extent);
         int        sfdctee(Sfio_t* f, Sfio_t* tee);
         int        sfdcunion(Sfio_t* f, Sfio_t** array, int n);
  
     SSTTDDIIOO--CCOOMMPPAATTIIBBIILLIITTYY
         #include   <stdio.h>
         cc ... -lstdio -lsfio
  
  DDEESSCCRRIIPPTTIIOONN
         Sfio  is  a  library  of  I/O functions to manage buffered
         streams.  Each Sfio stream is a _f_i_l_e _s_t_r_e_a_m,  representing
         a  file  (see open(2)), or a _s_t_r_i_n_g _s_t_r_e_a_m, representing a
         memory  segment.   Beyond  the  usual  I/O  operations  on
         streams,  Sfio  provides I/O disciplines for extended data
         processing, stream stacks for recursive stream processing,
         and  stream pools for automatic data synchronization.  The
         sfprintf()/sfscanf()  functions  allow   applications   to
         define  their  own formatting patterns as well as to rede-
         fine existing patterns.
  
  
  
  
                            05 August 1999                        3
  
  
  
  
  
  SFIO(3)                                                   SFIO(3)
  
  
         A  discipline  defines  analogues  of  the  system   calls
         read(2),  write(2)  and  lseek(2).   Such  system calls or
         their discipline replacements are used to  process  stream
         data.  Henceforth, ``_s_y_s_t_e_m _c_a_l_l'' will mean a system call
         or its discipline replacement.
  
         A system call is said to cause an exception if its  return
         value  is  non-positive.   Unless  overridden by exception
         handlers (see sfdisc()), an interrupted system call (errno
         ==  EINTR on UNIX systems) will be automatically reinvoked
         to continue the ongoing operation.
  
         The buffer of a stream is typically a memory segment allo-
         cated  via malloc(3) or supplied by the application.  File
         streams may also use memory mapping (mmap(2)) if  that  is
         more efficient.  When memory mapping is used, the underly-
         ing file should not  be  truncated  while  the  stream  is
         active.   Memory  mapping  can  be turned off using sfset-
         buf().
  
         There are three _s_t_a_n_d_a_r_d _s_t_r_e_a_m_s: sfstdin for input  (file
         descriptor  0 on UNIX systems), sfstdout for normal output
         (file descriptor 1), and sfstderr for error  output  (file
         descriptor 2).
  
  
  
     DDAATTAA TTYYPPEESS
       VVooiidd__tt**
         This  defines  a type suitable to exchange data of unknown
         types between application and Sfio.   Void_t  is  a  macro
         defined as void for ANSI-C and C++ and char for other com-
         pilation environments.
  
  
       SSffooffff__tt
         This defines an integral  type  suitable  to  address  the
         largest possible file extent.
  
  
       SSffuulloonngg__tt,, SSfflloonngg__tt,, SSffddoouubbllee__tt
         These  are  respectively  the  largest  unsigned  integer,
         signed integer, and floating  point  value  types  on  the
         local platform.
  
  
       SSffiioo__tt
         This defines the stream type.
  
  
       SSffddiisscc__tt
       ssssiizzee__tt ((**SSffrreeaadd__ff))((SSffiioo__tt**,, VVooiidd__tt**,, ssiizzee__tt,, SSffddiisscc__tt**))
  
  
  
  
  
                            05 August 1999                        4
  
  
  
  
  
  SFIO(3)                                                   SFIO(3)
  
  
         ssssiizzee__tt   ((**SSffwwrriittee__ff))((SSffiioo__tt**,,   ccoonnsstt  VVooiidd__tt**,,  ssiizzee__tt,,
         SSffddiisscc__tt**))
       SSffooffff__tt ((**SSffsseeeekk__ff))((SSffiioo__tt**,, SSffooffff__tt,, iinntt,, SSffddiisscc__tt**))
       iinntt ((**SSffeexxcceepptt__ff))((SSffiioo__tt**,, iinntt,, VVooiidd__tt**,, SSffddiisscc__tt**))
         Sfdisc_t defines a stream discipline structure.  Sfread_f,
         Sfwrite_f  and  Sfseek_f are the types of discipline func-
         tions to replace the system calls: read(2),  write(2)  and
         lseek(2).   Sfexcept_f  is  the  type of an event-handling
         function.  See sfdisc() for more details.
  
  
       SSffffmmtt__tt
       iinntt ((**SSffffmmtteexxtt__ff))((SSffiioo__tt**,, VVooiidd__tt**,, SSffffmmtt__tt**))
       iinntt ((**SSffffmmtteevveenntt__ff))((SSffiioo__tt**,, iinntt,, VVooiidd__tt**,, SSffffmmtt__tt**))
         Sffmt_t defines a formatting environment that can be  used
         to  extend  scanning  and formatting in the sfprint()/sfs-
         canf() functions. Sffmtext_f and Sffmtevent_f  define  the
         types  of  extension  functions definable in Sffmt_t.  See
         Sffmt_t below for more details.
  
  
       SSFFIIOO__VVEERRSSIIOONN
         This is a macro value of type long int  that  defines  the
         current   version   number   of  Sfio.  For  example,  the
         Sfio1998's version number is 19980501L (which  also  indi-
         cates its release date).
  
  
     BBIITT FFLLAAGGSS
         A number of bit flags control stream operations.  They are
         set either at stream initialization or by calling sfset().
         Following are the flags:
  
         SF_STRING:
                The stream is memory-based.
  
         SF_READ, SF_WRITE, SF_APPEND:
                Flags SF_READ and SF_WRITE indicate readability and
                writability.   Flag  SF_APPEND  asserts  that   the
                stream is a file opened in append mode (see open(2)
                and fcntl(2)) so that data is always output at  the
                end of file.  On systems without direct support for
                append mode, Sfio uses lseek(2) or  its  discipline
                replacement to approximate this behavior.
  
         SF_LINE:
                The   stream  is  line-oriented.   For  a  SF_WRITE
                stream, this means that buffered  data  is  flushed
                whenever  a new-line character, \n, is output.  For
                a SF_READ stream, SF_LINE is only significant  dur-
                ing  calls  to  functions  in the sfscanf() family.
                SF_LINE is set on initialization of any stream rep-
                resenting a terminal device.
  
  
  
  
                            05 August 1999                        5
  
  
  
  
  
  SFIO(3)                                                   SFIO(3)
  
  
         SF_SHARE, SF_PUBLIC:
                Flag   SF_SHARE  means  that  the  underlying  file
                descriptor is shared by independent  entities  (for
                example, multiple processes).
  
                For a seekable file stream, SF_SHARE means that the
                logical stream and the physical file positions will
                be  made  the  same before a system call to perform
                physical I/O.  There are  different  possibilities.
                If SF_PUBLIC is not set, the physical file position
                is made equal to the logical stream  position.   If
                SF_PUBLIC  is  set,  there  are  two cases.  If the
                physical file position has changed  from  its  last
                known position, the logical stream position is made
                equal to the new physical file position.   Finally,
                if  the  physical file location remains the same as
                its last known position, the physical file position
                is made the same as the logical stream position.
  
                For  an  unseekable stream (e.g., pipes or terminal
                devices), if  possible,  SF_SHARE  means  that  the
                block   and   record   I/O   operations  (sfread(),
                sfwrite(),  sfmove(),  sfgetr(),  sfputr(),   sfre-
                serve(),  sfscanf()  and  sfvprintf()) will ensure:
                (1) after each writing  operation,  the  stream  is
                synchronized  and  (2)  each reading operation only
                reads the requested amount.   Note,  however,  that
                (2) is not always possible without proper OS facil-
                ities such as recv(2) or streamio(4).
  
                A standard stream that is seekable will be initial-
                ized with SF_SHARE|SF_PUBLIC.
  
         SF_MALLOC:
                The  stream  buffer  was obtained via malloc(3) and
                can be reallocated or freed.
  
         SF_STATIC:
                The stream  structure  should  not  be  freed  when
                closed (sfclose()).  This flag is used by an appli-
                cations that allocate their own stream  structures.
                Such applications must use the header file sfio_t.h
                instead of sfio.h.
  
         SF_IOCHECK:
                If the stream has a discipline  exception  handler,
                exceptions will be raised in sfsync(), sfpurge() or
                before a  system  call  read(2)  or  write(2)  (see
                sfdisc()).
  
         SF_BUFCONST:
                The  application  guarantees  that  a stream buffer
                obtained via sfreserve() or sfgetr()  will  not  be
                modified.    This   allows   Sfio  to  tune  buffer
  
  
  
                            05 August 1999                        6
  
  
  
  
  
  SFIO(3)                                                   SFIO(3)
  
  
                management and memory maps.  For example, a memory-
                mapped  stream  will  map  with  MAP_SHARED  on and
                PROT_WRITE off so that the file itself will  likely
                be the backing store for mapped pages.
  
         SF_WHOLE:
                This  flag guarantees that data written in any sin-
                gle sfwrite() or sfputr() call will always be  out-
                put  as a whole to the output device.  This is use-
                ful  in  certain  applications  (e.g.,  networking)
                where a complex object must be output without being
                split in different system  calls.   Note  that  the
                respective  stream still buffers data as the buffer
                can accomodate.
  
  
  
     OOPPEENNIINNGG//CCLLOOSSIINNGG SSTTRREEAAMMSS
       SSffiioo__tt** ssffnneeww((SSffiioo__tt** ff,, VVooiidd__tt** bbuuff,, ssiizzee__tt ssiizzee,,  iinntt  ffdd,,
         iinntt ffllaaggss))
         This  function creates or renews a stream.  It returns the
         new stream on success and NULL on error.
  
         f:     If f is NULL, a new stream is created.   Otherwise,
                f  is reused.  In this case, if flags does not have
                SF_EOF, f shall  be  closed  via  sfclose()  before
                being  reused.   During  a  stream renewal, buffer,
                pool and  discipline  stack  are  preserved.   Note
                that,  except  for  SF_STATIC  streams,  renewing a
                stream already  closed  will  result  in  undefined
                behavior.
  
         buf, size:
                These determine a buffering scheme.  See sfsetbuf()
                for more details.
  
         fd:    If  SF_STRING  is  specified  in  flags,  this   is
                ignored.  Otherwise, fd is a file descriptor (e.g.,
                from open(2)) to use for raw data I/O.   Note  that
                Sfio  supports  unseekable  file descriptors opened
                for both read and write, e.g., sockets.
  
         flags: This is composed from SF_EOF and bit values defined
                in the BBIITT FFLLAAGGSS section.
  
  
        SSffiioo__tt**  ssffooppeenn((SSffiioo__tt**  ff,, ccoonnsstt cchhaarr** ssttrriinngg,, ccoonnsstt cchhaarr**
         mmooddee))
         If string is NULL and f is a file stream that has not per-
         formed  any  I/O operation, sfopen() will change the modes
         of f according to mode.  In this case, sfopen() returns  f
         on success and NULL on error.  This somewhat unusual usage
         of sfopen() is good for changing the predefined  modes  of
         standard streams.
  
  
  
                            05 August 1999                        7
  
  
  
  
  
  SFIO(3)                                                   SFIO(3)
  
  
         sfopen()  is normally used to create a new stream or renew
         a stream.  In this case, it returns the new stream on suc-
         cess  and  NULL  on  error.  Below are the meanings of the
         arguments:
  
         f:     This is treated as in sfnew().
  
         string:
                This is a file name or a string to perform I/O  on.
  
         mode:  This  is composed from the set of letters {s, r, w,
                +, a, x, b, t}.
  
                s specifies opening a string stream.  string can be
                a  null-terminated  string  or  NULL.  Specifying s
                alone is equivalent to specifying sr.  If s is  not
                specified, string defines a file name.
  
                r  and  w specify read and write modes.  Write mode
                creates and/or truncates the given file to make  an
                empty  file.   The  +  modifier  indicates that the
                stream is opened for both read and write.
  
                a specifies append mode, i.e., data is always  out-
                put at end of file.
  
                x specifies exclusive mode, i.e., a file opened for
                writing should not already exist.
  
                b and t specify binary and text modes.
  
  
       SSffiioo__tt** ssffppooppeenn((SSffiioo__tt** ff,,  ccoonnsstt  cchhaarr**  ccmmdd,,  ccoonnsstt  cchhaarr**
         mmooddee))
         This  function  opens  a  stream  that  corresponds to the
         coprocess cmd.  The argument mode should be composed  from
         r,  w, and +.  The argument f, if not NULL, is a stream to
         be renewed  (see  sfnew()).   sfpopen()  returns  the  new
         stream or NULL on error.
  
         The  standard  input/output  of  cmd  is  connected to the
         application via a pipe if the stream is opened  for  writ-
         ing/reading.  If the stream is opened for both reading and
         writing, there  will  be  two  different  associated  file
         descriptors,  one for each type of I/O (note the effect on
         sffileno()).
  
         On opening a coprocess for writing (i.e., mode contains  w
         or +), the signal handler for SIGPIPE in the parent appli-
         cation will be set to SIG_IGN if it  is  SIG_DFL  at  that
         time.   This  protects  the  parent application from being
         accidentally killed on any attempt to write to a coprocess
         that  closes  its  reading end.  Applications that need to
         detect  such  write  errors  should  use  disciplines  and
  
  
  
                            05 August 1999                        8
  
  
  
  
  
  SFIO(3)                                                   SFIO(3)
  
  
         exception handlers (see sfdisc()).
  
         The  command  cmd  is  executed by an _i_n_t_e_r_p_r_e_t_e_r which is
         either /bin/sh or an executable  command  defined  by  the
         environment  variable  SHELL.   In either case, the inter-
         preter is invoked with 2 arguments,  respectively  -c  and
         the  given command cmd. When the interpreter is /bin/sh or
         /bin/ksh, sfpopen() may execute the command cmd itself  if
         there are no shell meta-characters in cmd.
  
  
       SSffiioo__tt** ssffttmmpp((ssiizzee__tt ssiizzee))
         This  function  creates  a  stream for temporary data.  It
         returns the new stream or NULL on error.
  
         A stream created by sftmp() can be completely or partially
         memory-resident.   If  size is SF_UNBOUND, the stream is a
         pure string stream.  If size is zero, the stream is a pure
         file  stream.  Otherwise, the stream is first created as a
         string stream but when its buffer grows larger  than  size
         or  on any attempt to change disciplines, a temporary file
         is  created.   Two  environment  variables,  TMPPATH   and
         TMPDIR,  direct  where  temporary files are created.  TMP-
         PATH, if  defined,  specifies  a  colon-separated  set  of
         directories  to be used in a round-robin fashion to create
         files.  If TMPPATH is undefined, TMPDIR  can  be  used  to
         specify a single directory to create files.  If neither of
         TMPPATH and TMPDIR are defined, /tmp is used.
  
  
       iinntt ssffcclloossee((SSffiioo__tt** ff))
         This function closes the stream f and frees its resources.
         SF_STATIC should be used if the stream space is to be pre-
         served.  If f is the base of  a  stream  stack  (see  sfs-
         tack()),  all  streams on the stack are closed.  If f is a
         sfpopen-stream, sfclose() waits until the associated  com-
         mand  terminates  and  returns its exit status.  sfclose()
         returns -1 for failure and 0 for success.
  
         SF_READ|SF_SHARE and  SF_WRITE  streams  are  synchronized
         before  closing  (see  sfsync()).   If  f has disciplines,
         their exception handlers will be called twice.  The  first
         exception  handler  call  has  the type argument as one of
         SF_CLOSE or SF_NEW (see sfdisc().)  The latter, SF_NEW  is
         used  when a stream is being closed via sfnew() so that it
         can be renewed.  The second call uses type as SF_FINAL and
         is  done  after  all closing operations have succeeded but
         before the stream itself is deallocated.  In either  case,
         if   the  exception  handler  returns  a  negative  value,
         sfclose() will immediately  return  this  value.   If  the
         exception handler returns a positive value, sfclose() will
         immediately return a zero value.
  
  
  
  
  
                            05 August 1999                        9
  
  
  
  
  
  SFIO(3)                                                   SFIO(3)
  
  
     IINNPPUUTT//OOUUPPUUTT OOPPEERRAATTIIOONNSS
       iinntt ssffggeettcc((SSffiioo__tt** ff))
       iinntt ssffppuuttcc((SSffiioo__tt** ff,, iinntt cc))
         These functions  read/write  a  byte   from/to  stream  f.
         sfgetc()  returns  the byte read or -1 on error.  sfputc()
         returns c on success and -1 on error.
  
  
       ssssiizzee__tt ssffnnppuuttcc((SSffiioo__tt** ff,, iinntt cc,, ssiizzee__tt nn))
         This function attempts to write the byte c to f  n  times.
         It  returns  the number of bytes actually written or -1 on
         failure.
  
  
       iinntt ssffuunnggeettcc((SSffiioo__tt** ff,, iinntt cc))
         This function pushes the byte c back into f.  If c matches
         the  byte  immediately  before  the  current  position  in
         buffered data, the current position is  simply  backed  up
         (note  the  effect  on sftell() and sfseek()). There is no
         theoretical limit on the  number  of  bytes  that  can  be
         pushed  back  into a stream. Pushed back bytes not part of
         buffered data will be  discarded  on  any  operation  that
         implies  buffer  synchronization.  sfungetc() returns c on
         success and -1 on failure.
  
  
       SSffuulloonngg__tt ssffggeettuu((SSffiioo__tt** ff))
       iinntt ssffppuuttuu((SSffiioo__tt** ff,, SSffuulloonngg__tt vv))
         These functions read and write Sfulong_t values in a  com-
         pact  variable-length portable format.  Portability across
         a write architecture and a read architecture requires that
         the  bit order in a byte is the same on both architectures
         and the written value is storable in an Sfulong_t  on  the
         read  architecture.  sfgetu() returns the value read or -1
         on error.  sfputu() returns the number of bytes written or
         -1 on error.  See also sfulen().
  
  
       SSfflloonngg__tt ssffggeettll((SSffiioo__tt** ff))
       iinntt ssffppuuttll((SSffiioo__tt** ff,, SSfflloonngg__tt vv))
         These  functions  are similar to sfgetu() and sfputu() but
         for reading and writing  (signed)  Sflong_t  values.   See
         also sfllen().
  
  
       SSffddoouubbllee__tt ssffggeettdd((SSffiioo__tt** ff))
       iinntt ssffppuuttdd((SSffiioo__tt** ff,, SSffddoouubbllee__tt vv))
         These functions read and write Sfdouble_t values.  In this
         case, portability depends on the input and  output  archi-
         tectures  having the same floating point value representa-
         tion.  Values are coded and  decoded  using  ldexp(3)  and
         frexp(3) so they are constrained to the sizes supported by
         these functions.  See also sfdlen().
  
  
  
  
                            05 August 1999                       10
  
  
  
  
  
  SFIO(3)                                                   SFIO(3)
  
  
       cchhaarr** ssffggeettrr((SSffiioo__tt** ff,, iinntt rrsscc,, iinntt ttyyppee))
         This function reads a record of data ending in the  record
         separator  rsc.  After sfgetr() returns, the length of the
         record even if it is  incomplete  can  be  retrieved  with
         sfvalue().   sfgetr()  returns  the  record on success and
         NULL on error.
  
         The type argument is composed of some subset of the  below
         bit flags:
  
         SF_STRING:
                A  null  byte  will replace the record separator to
                make the record into a C  string.   Otherwise,  the
                record separator is left alone.
  
         SF_LOCKR:
                Upon  successfully obtaining a record r, the stream
                will be locked from  further  access  until  it  is
                released with a call sfread(f,r,0).
  
         SF_LASTR:
                This should be used only after a failed sfgetr() to
                retrieve the last incomplete record. In this  case,
                rsc is ignored.
  
  
       ssssiizzee__tt ssffppuuttrr((SSffiioo__tt** ff,, ccoonnsstt cchhaarr** ss,, iinntt rrsscc))
         This  function  writes  the null-terminated string s to f.
         If rsc is non-negative, (unsigned char)rsc is output after
         the  string.  sfputr() returns the number of bytes written
         or -1 on failure.
  
  
       SSffooffff__tt ssffmmoovvee((SSffiioo__tt** ffrr,, SSffiioo__tt** ffww,, SSffooffff__tt nn,, iinntt rrsscc))
         This function moves objects from input stream fr to output
         stream  fw.   sfmove() returns the number of objects moved
         or -1 on failure.
  
         An object is either a byte or a  record.   The  latter  is
         indicated by a non-negative value for the record separator
         character rsc.  If n is negative, all of fr will be moved.
         Otherwise,  n indicates the number of objects to move.  If
         either fr or fw is NULL, it acts as if it is a stream cor-
         responding  to /dev/null, the UNIX device that has no read
         data and throws away any write  data.   For  example,  the
         call sfmove(f,(Sfio_t*)0,(Sfoff_t)(-1),'\n') simply counts
         the number of lines in stream f.
  
  
       ssssiizzee__tt ssffrreeaadd((SSffiioo__tt** ff,, VVooiidd__tt** bbuuff,, ssiizzee__tt nn))
         This function reads up to n bytes from f into buffer  buf.
         It  returns  the  number  of  bytes actually read or -1 on
         error.
  
  
  
  
                            05 August 1999                       11
  
  
  
  
  
  SFIO(3)                                                   SFIO(3)
  
  
       ssssiizzee__tt ssffwwrriittee((SSffiioo__tt** ff,, ccoonnsstt VVooiidd__tt** bbuuff,, ssiizzee__tt nn))
         This function writes n bytes from  buf  to  f.   If  f  is
         SF_STRING, and the buffer is not large enough, an SF_WRITE
         exception shall be raised.  sfwrite() returns  the  number
         of bytes written or -1 on failure.
  
  
       SSffooffff__tt ssffsseeeekk((SSffiioo__tt** ff,, SSffooffff__tt ooffffsseett,, iinntt ttyyppee))
         This  function  sets a new I/O position for f.  It returns
         the new position or -1 on failure.
  
         If the stream is a SF_STRING stream and the new address is
         beyond  the  current  buffer  extent, an SF_SEEK exception
         will be raised (see sfdisc()).
  
         The new position is determined based on  offset  and  type
         which is composed from the bit flags:
  
         0 or SEEK_SET:
                offset is the desired position.
  
         1 or SEEK_CUR:
                offset  is  relative  to  the current position (see
                SF_PUBLIC below).
  
         2 or SEEK_END:
                offset is relative to the physical end of file.
  
         SF_SHARE:
                The stream is treated as if it has the control  bit
                SF_SHARE  on.  This implies that a system call seek
                will be done to ensure that the location seeking to
                is valid.
  
         SF_PUBLIC:
                The  stream is treated as if it has the control bit
                SF_PUBLIC on.  If the physical  file  position  has
                changed  from  its last known location, the current
                position is taken as  the  new  physical  position.
                Otherwise,  the  current  position  is  the logical
                stream position.
  
  
       VVooiidd__tt** ssffrreesseerrvvee((SSffiioo__tt** ff,, ssssiizzee__tt nn,, iinntt lloocckk))
         This function reserves a data block from f.  For a SF_READ
         stream,  a  data  block  is  a  segment  of data and for a
         SF_WRITE stream, it is a buffer suitable for writing.  For
         consistency, a stream opened with SF_READ|SF_WRITE will be
         treated as if it is a SF_READ stream (see sfset() for set-
         ting a particular mode.)  sfreserve() returns the obtained
         data block on success and NULL on failure.
  
         After a sfreserve() call,  whether  or  not  it  succeeds,
         sfvalue() can be used to obtain the size of the (may-have-
  
  
  
                            05 August 1999                       12
  
  
  
  
  
  SFIO(3)                                                   SFIO(3)
  
  
         been) available data block.
  
         n != 0:
                f will be filled or flushed as  necessary  to  make
                available  a  data block of size at least the abso-
                lute value of n.  If this is successful and lock is
                non-positive,  the I/O position will advance by the
                size of the available data block when n is negative
                or  by  exactly n when n is positive.  For example,
                sfreserve(f,-1,0)  returns  a  positive  size  data
                block  and  advances  the I/O position by its size.
                On the other hand, sfreserve(f,1,0) returns a posi-
                tive  size data block and advances the I/O position
                by exactly 1.
  
         n == 0:
                If lock is zero, f will be  filled  or  flushed  as
                necessary to ensure that a positive-size data block
                is available.  If lock  is  non-zero,  no  fill  or
                flush  will  be performed.  In addition, if lock is
                positive, f will be  locked  from  further  access.
                Therefore,  an  application  can  lock f with sfre-
                serve(f,0,1).
  
         lock:  When lock is positive, there are restrictions.   If
                f  is  SF_READ  and  not  using memory-mapping (see
                sfsetbuf()), reservation must be limited to  stream
                buffer  size.  If f is SF_READ|SF_SHARE and unseek-
                able, sfreserve() will peek at incoming data  using
                either   recv(2)  or  streamio(4)  without  reading
                ahead.  In this case, if peeking is  not  supported
                by  the underlying platform, sfreserve() will fail.
                Note that SF_SHARE is automatically on for  sfstdin
                so programs (e.g., //bbiinn//ssoorrtt) that will consume all
                of input anyway should turn this bit off to  reduce
                the number of system calls.
  
                If  a  reservation  successfully  results in a data
                block data, and lock is positive,  the  stream  I/O
                position  does  not  advance  and  f will be locked
                until  unlocked  with  sfread/sfwrite(f,data,size).
                sfread()  should  be  used  on read-only stream and
                sfwrite() should be used on write-only  stream.   A
                stream in both read and write modes can release the
                lock with either call (with associated  operational
                semantics!)
  
  
  
     DDAATTAA FFOORRMMAATTTTIINNGG
         Data printing and scanning are done via the sfprintf() and
         sfscanf() family of functions.  These functions are  simi-
         lar  to  their ANSI-C fprintf() and fscanf() counterparts.
         However, the Sfio versions have  been  extended  for  both
  
  
  
                            05 August 1999                       13
  
  
  
  
  
  SFIO(3)                                                   SFIO(3)
  
  
         portability  and generality.  In particular, a notion of a
         formatting environment stack is introduced.  Each  format-
         ting  element  on  the stack defines a separate _f_o_r_m_a_t_t_i_n_g
         _p_a_i_r of a format specification string, char*  format  (the
         usual second argument in the formatting functions), and an
         argument list, va_list args (the third argument  in  func-
         tions  sfvprintf() and sfvscanf()).  A formatting environ-
         ment element  may  also  specify  extension  functions  to
         obtain  or  assign  arguments and to provide new semantics
         for  pattern  processing.   To  simplify  the  description
         below,  whenever  we  talk  about an argument list, unless
         noted otherwise, it is understood that this  means  either
         the true argument list when there is no extension function
         or the action to be taken by such a function in processing
         arguments.  The manipulation of the formatting environment
         stack is done via the pattern ! discussed below.
  
  
     %%!! aanndd SSffffmmtt__tt
         The pattern  %!  manipulates  the  formatting  environment
         stack  to (1) change the top environment to a new environ-
         ment, (2) stack a new environment on top  of  the  current
         top,  or  (3)  pop the top environment.  The bottom of the
         environment stack always contains  a  virtual  environment
         with  the  original formatting pair and without any exten-
         sion functions.
  
         The top environment of a stack, say fe,  is  automatically
         popped whenever its format string is completely processed.
         In this case, its  event-handling  function  (if  any)  is
         called  as (*eventf)(f,SF_FINAL,NIL(Void_t*),fe).  The top
         environment can also be popped by giving an argument  NULL
         to  %!   or  by returning a negative value in an extension
         function.  In these cases, the event-handling function  is
         called  as  (*eventf)(f,SF_DPOP,form,fe) where form is the
         remainder of the format string. A  negative  return  value
         from the event handling function will prevent the environ-
         ment from being popped.
  
         A formatting environment is a structure  of  type  Sffmt_t
         which contains the following elements:
  
             Sffmtext_f   extf;   /* extension processor        */
             Sffmtevent_f eventf; /* event handler              */
  
             char*        form;   /* format string to stack     */
             va_list      args;   /* corresponding arg list     */
  
             int          fmt;    /* pattern being processed    */
             ssize_t      size;   /* object size                */
             int          flags;  /* formatting control flags   */
             int          width;  /* width of field             */
             int          precis; /* precision required         */
             int          base;   /* conversion base            */
  
  
  
                            05 August 1999                       14
  
  
  
  
  
  SFIO(3)                                                   SFIO(3)
  
  
             char*        t_str;  /* type string in parentheses */
             int          n_str;  /* length of t_str            */
  
         The  first four elements of Sffmt_t must be defined by the
         application.   The  two  function  fields  should  not  be
         changed  during processing.  Other elements of Sffmt_t are
         set on calls to the extension function  Sffmt_t.extf  and,
         in turn, can be modified by this function to redirect for-
         matting or scanning.  For example, consider a call from  a
         sfprintf()  function  to  process  an  unknown  pattern %t
         (which we may take to mean ``time'') based on a formatting
         environment  fe.   fe->extf  may reset fe->fmt to `d' upon
         returing to cause sfprintf() to process  the  value  being
         formatted as an integer.
  
         Below are the fields of Sffmt_t:
  
         extf:  extf  is  a function to extend scanning and format-
                ting patterns.  Its usage is discussed below.
  
         eventf:
                This is a function to process events  as  discussed
                earlier.
  
         form and args:
                This  is  the  formatting  pair  of a specification
                string and corresponding argument  list.   When  an
                environment fe is being inserted into the stack, if
                fe->form is NULL, the top environment is changed to
                fe  and its associated extension functions but pro-
                cessing of the current formatting  pair  continues.
                On the other hand, if fe->form is not NULL, the new
                environment is pushed onto the stack so  that  pat-
                tern  processing will start with the new formatting
                pair as well as any associated extension functions.
                During  processing,  whenever  extf is called, form
                and args will be set to the current values  of  the
                formatting pair in use.
  
         fmt:   This is the pattern being processed.
  
         size:  This is the size of the object being processed.
  
         flags: This  is  a collection of bits defining the format-
                ting flags specified for  the  pattern.   The  bits
                are:
  
                SFFMT_LEFT: Flag - in sfprintf().
  
                SFFMT_SIGN: Flag + in sfprintf().
  
                SFFMT_BLANK: Flag _s_p_a_c_e in sfprintf().
  
                SFFMT_ZERO: Flag 0 in sfprintf().
  
  
  
                            05 August 1999                       15
  
  
  
  
  
  SFIO(3)                                                   SFIO(3)
  
  
                SFFMT_THOUSAND: Flag ' in sfprintf().
  
                SFFMT_LONG: Flag l in sfprintf() and sfscanf().
  
                SFFMT_LLONG: Flag ll in sfprintf() and sfscanf().
  
                SFFMT_SHORT: Flag h in sfprintf() and sfscanf().
  
                SFFMT_LDOUBLE:  Flag L in sfprintf() and sfscanf().
  
                SFFMT_IFLAG: flag I in sfprintf() and sfscanf().
  
                SFFMT_ALTER: Flag # in sfprintf() and sfscanf().
  
                SFFMT_SKIP: Flag * in sfscanf().
  
                SFFMT_ARGPOS: This  indicates  argument  processing
                for pos$.
  
                SFFMT_VALUE:  This  is  set by fe->extf to indicate
                that it is returning a value to be formatted or the
                address of an object to be assigned.
  
  
         width: This is the field width.
  
         precis:
                This is the precision.
  
         base:  This is the conversion base.
  
         t_str and n_str:
                This is the type string and its size.
  
  
       iinntt ((**SSffffmmtteexxtt__ff))((SSffiioo__tt** ff,, VVooiidd__tt** vv,, SSffffmmtt__tt** ffee))
         This  is  the  type  of the extension function fe->extf to
         process patterns and arguments.  Arguments are always pro-
         cessed  in  order  and fe->extf is called exactly once per
         argument.  Note that, when pos$ (below) is not  used  any-
         where  in  a  format string, each argument is used exactly
         once per a corresponding pattern.  In that case,  fe->extf
         is  called as soon as the pattern is recognized and before
         any scanning or formatting.  On the other hand, when  pos$
         is used in a format string, an argument may be used multi-
         ple times.  In this case, all arguments shall be processed
         in  order  by  calling  fe->extf exactly once per argument
         before any pattern processing.  This case is signified  by
         the flag SFFMT_ARGPOS in fe->flags.
  
         In  addition  to  the  predefined  formatting patterns and
         other application-defined patterns, fe->extf may be called
         with  fe->fmt  being  one  of  `(' (left parenthesis), `.'
         (dot), and `I'.  The left parenthesis requests a string to
  
  
  
                            05 August 1999                       16
  
  
  
  
  
  SFIO(3)                                                   SFIO(3)
  
  
         be used as the type string discussed below.  In this case,
         upon returning, fe->extf should set the fe->size field  to
         be  the  length of the string or a negative value to indi-
         cate a null-terminated string.  The dot requests an  inte-
         ger  for  width,  precision,  or  base.  In this case, the
         fe->size field will indicate how many dots  have  appeared
         in the pattern specification.  The `I' requests an integer
         to define the object size.
  
         f:     This is the input/output stream in the calling for-
                matting  function.   During a call to fe->extf, the
                stream shall be unlocked so that fe->extf can  read
                from or write to it as appropriate.
  
         v:     For  both  sfscanf()  and  sfprintf()  functions, v
                points to a location suitable for storing any prim-
                itive  data  types,  i.e., scalars or pointers.  On
                return, fe->extf treats v as discussed below.
  
         fe:    This is the current formatting environment.
  
         The return value rv of fe->extf directs  further  process-
         ing.   There are two cases.  When pos$ is present, a nega-
         tive return value means to ignore fe in  further  argument
         processing while a non-negative return value is treated as
         the case rv  ==  0  below.   When  pos$  is  not  present,
         fe->extf is called per argument immediately before pattern
         processing and its return values are treated as below:
  
         rv < 0:
                The environment stack is immediately popped.
  
         rv == 0:
                The extension function has not consumed (in a scan-
                ning  case) or output (in a printing case) data out
                of or into the given stream  f.   The  fields  fmt,
                flags,  size,  width,  precis  and base of fe shall
                direct further processing.
  
                For sfprintf() functions, if fe->flags has the  bit
                SFFMT_VALUE,  fe->extf  should  have  set *v to the
                value to be processed; otherwise, a value should be
                obtained  from  the  argument  list.  Likewise, for
                sfscanf()  functions,  SFFMT_VALUE  means  that  *v
                should  have  a  suitable  address;  otherwise,  an
                address to assign value should be obtained from the
                argument list.
  
                When  pos$ is present, if fe->extf changes fe->fmt,
                this pattern shall be used regardless of  the  pat-
                tern  defined  in  the  format string. On the other
                hand, if fe->fmt is unchanged by fe->extf, the pat-
                tern  in  the  format string is used.  In any case,
                the  effective  pattern  should  be  one   of   the
  
  
  
                            05 August 1999                       17
  
  
  
  
  
  SFIO(3)                                                   SFIO(3)
  
  
                standardly defined pattern.  Otherwise, it shall be
                treated as unmatched.
  
         rv > 0:
                The extension function has accessed the stream f to
                the  extent of rv bytes.  Processing of the current
                pattern ceases except that, for scanning functions,
                if  fe->flags  does not contain the bit SFFMT_SKIP,
                the assignment count shall increase by 1.
  
  
     vvooiidd vvaa__ccooppyy((vvaa__lliisstt ttoo,, vvaa__lliisstt ffrr))
         This macro function portably copies the argument  list  fr
         to  the  argument  list  to.  It should be used to set the
         field Sffmt_t.args.
  
  
     lloonngg ssffffmmttvveerrssiioonn((SSffffmmtt__tt** ffee,, iinntt ttyyppee))
         This macro function initializes the formatting environment
         fe  with  a version number if type is non-zero. Otherwise,
         it returns the current value of the version number of  fe.
         This  is useful for applications to find out when the for-
         mat of the structure Sffmt_t changes.  Note that the  ver-
         sion  number  corresponds to the Sfio version number which
         is defined in the macro value SFIO_VERSION.
  
  
       iinntt ssffpprriinnttff((SSffiioo__tt** ff,, ccoonnsstt cchhaarr** ffoorrmmaatt,, ......))
       cchhaarr** ssffpprriinnttss((ccoonnsstt cchhaarr** ffoorrmmaatt,, ......))
       iinntt ssffsspprriinnttff((cchhaarr** ss,, iinntt nn,, ccoonnsstt cchhaarr** ffoorrmmaatt,, ......))
       iinntt ssffvvsspprriinnttff((cchhaarr** ss,, iinntt nn,, ccoonnsstt cchhaarr**  ffoorrmmaatt,,  vvaa__lliisstt
         aarrggss))
       iinntt ssffvvpprriinnttff((SSffiioo__tt** ff,, ccoonnsstt cchhaarr** ffoorrmmaatt,, vvaa__lliisstt aarrggss))
         These   functions  format  output  data.   sfprintf()  and
         sfvprintf() write to output  stream  f.   sfsprintf()  and
         sfvsprintf()  write  to  buffer  s  which  is  of  size n.
         sfprints() constructs output in some Sfio-defined  buffer.
         sfvprintf()  is  the  underlying  primitive  for the other
         functions.  Except for sfprints() which  returns  a  null-
         terminated string or NULL, other functions return the num-
         ber of output bytes or -1 on failure.
  
         The  length   of   string   constructed   by   sfprints(),
         sfsprintf(), or sfvsprintf() can be retrieved by sfslen().
  
         The standard patterns are: n, s, c, %, h, i, d, p,  u,  o,
         x,  X,  g,  G, e, E, f and !.  Except for ! which shall be
         described  below,  see   the   ANSI-C   specification   of
         fprintf(3)  for  details  on the other patterns.  Let z be
         some pattern type. A  formatting  pattern  is  defined  as
         below:
  
             %[pos$][flag][width][.precision][.base][(type)]z
  
  
  
  
                            05 August 1999                       18
  
  
  
  
  
  SFIO(3)                                                   SFIO(3)
  
  
         pos$:  A  pattern  can specify which argument in the argu-
                ment list to use.  This is done via pos$ where  pos
                is  the  argument position.  Arguments are numbered
                so that the first argument after format is at posi-
                tion 1.  If pos is not specified, the argument fol-
                lowing the most recently used  one  will  be  used.
                The  pattern  %!  (see below) cannot be used subse-
                quent to a usage of pos$.  Doing so may cause unex-
                pected behaviors.
  
         flag:  The flag characters are h, l, L, I, -, +, _s_p_a_c_e, 0,
                ' and #.
  
                Flag I defines the size or type of the object being
                formatted.   There  are  two cases: (1) I by itself
                and (2) I followed by either a  decimal  number  or
                `*'.
  
                In  the  first case, for integer and floating point
                patterns, the  object  type  is  taken  to  be  the
                largest  appropriate  type  (i.e., one of Sflong_t,
                Sfulong_t or Sfdouble_t).   For  conversion  speci-
                fiers s and c, the flag is ignored.
  
                In  the  second  case,  a given decimal value would
                define a size while `*' would cause the size to  be
                obtained from the argument list.  Then, if the con-
                version specifier  is  s,  this  size  defines  the
                length  of  the  string  or strings being formatted
                (see the discussion of base  below).   For  integer
                and  floating  point  patterns, the size is used to
                select a type from one of the below lists as  indi-
                cated by the conversion specifier:
  
                    Sflong_t, long, int, short
                    Sfulong_t, unsigned long, unsigned int, unsigned short
                    Sfdouble_t, double, float
  
                The  selection  algorithm always matches types from
                left to right in any given list.   Although  selec-
                tion is generally based on sizes in bytes, for com-
                patibility with Microsoft-C, the size 64 is matched
                with  an  appropriate  type with the same number of
                bits, if any.  If the given size does not match any
                of  the  listed  types,  it shall match one of int,
                unsigned int, and double as defined by the  format-
                ting pattern.
  
                Below  are a few examples of using the I flag.  The
                first example prints  an  Sflong_t  integer.   This
                example  is actually not portable and only works on
                platforms where sizeof(Sflong_t) is 8.  The  second
                example  shows  how  to  that  portably.  The third
                example specifies printing a string of  length  16.
  
  
  
                            05 August 1999                       19
  
  
  
  
  
  SFIO(3)                                                   SFIO(3)
  
  
                This  length shall be used regardless of whether or
                not the given string is shorter or longer than  16.
                The last example shows the use of the pattern %n to
                assign the amount of data  already  output  into  a
                short integer n_output.
  
                    sfprintf(sfstdout,"%I8d", Sflong_obj);
                    sfprintf(sfstdout,"%I*d", sizeof(Sflong_obj), Sflong_obj);
                    sfprintf(sfstdout,"%I*s", 16, s);
                    sfprintf(sfstdout,"%d%I*n", 1001, sizeof(short), &n_output);
  
                Flags  h,  l,  and  L are the ANSI-C conventions to
                select the types of input  objects.   For  example,
                %hd  indicates  a  short  int while %ld indicates a
                long int.  The flags ll and L address  respectively
                the largest integer and floating value types, i.e.,
                Sfulong_t, Sflong_t, and Sfdouble_t.
  
                Flag - left-justifies data within the field (other-
                wise, right-justification).
  
                Flag  +  means that a signed conversion will always
                begin with a plus or minus sign.
  
                Flag _s_p_a_c_e is ignored if + is specified; otherwise,
                it  means  that  if the first character of a signed
                conversion is not a sign or if the result is empty,
                a space will be prepended.
  
                Flag 0 means padding with zeros on the left.
  
                Flag ' outputs thousands-separator used by the cur-
                rent locale.  setlocale(3) should have been used to
                set the desired locale.
  
                Flag  # indicates an alternative format processing.
                For %o, the first digit is always a zero.   For  %x
                and  %X, a non-zero result will have a prefix 0x or
                0X. For %e, %E, %f, %g, and %G, the  result  always
                contains  a  decimal point. For %g and %G, trailing
                zeros will not be removed. For %d, %i and  %u,  the
                form  is  _b_a_s_e_#_n_u_m_b_e_r  where _b_a_s_e is the conversion
                base and _n_u_m_b_e_r is represented by digits  for  this
                _b_a_s_e.  For example, a base 2 conversion with %#..2d
                for 10 is 2#1010 instead of 1010  as  printed  with
                %..2d.
  
         width: This  defines  the  width  of the printing field. A
                value to be printed will be justified and padded if
                necessary to fill out the field width.
  
         precis:
                After  a  first  dot  appears,  an  integral  value
                defines a  precision.   For  floating  point  value
  
  
  
                            05 August 1999                       20
  
  
  
  
  
  SFIO(3)                                                   SFIO(3)
  
  
                patterns, precision is the number of precision dig-
                its.  For %c, precision defines the number of times
                to  repeat  the character being formatted.  For %s,
                precision defines the maximum number of  characters
                to output.
  
         base:  After  a  second  dot  appears,  an  integral value
                defines a conversion base.
  
                For %i, %d, and %u, a conversion base should be  in
                the inclusive range [2,64].  If base is not in this
                range, it is defined to be 10.  The digits to  rep-
                resent numbers are:
  
                    01234567890
                    abcdefghijklmnopqrstuvwxyz
                    ABCDEFGHIJKLMNOPQRSTUVWXYZ
                    @_
  
                For  %s,  when  base is defined (i.e., at least two
                dots appeared in the  pattern  specification),  the
                input  argument  is taken as a NULL-terminated list
                of strings instead of a single string.  Each string
                is formatted based on the usual width and precision
                rules.  If base is non-zero, it  defines  an  ASCII
                character  used  to separate the formatted strings.
                Below is an example showing both the call  and  the
                result  of printing a NULL-terminated list of three
                strings apple, orange, and grape:
  
                    sfprintf(sfstdout,"%..*s",',',list);
                    apple,orange,grape
  
                Likewise, for %c, when base is defined,  the  input
                argument  is  taken  as  a  null-terminated  string
                instead of a single character.  Each  character  is
                formatted  based  on the normal width and precision
                rules.   In  addition,  if  base  is  non-zero,  it
                defines  an  ASCII  character  used to separate the
                formatted characters if there are more than one.
  
         (str): This defines a string  str  to  be  passed  to  the
                extension function Sffmt_t.extf.  Parentheses shall
                be balanced.  If str is *, the string  is  obtained
                from the argument list.
  
  
  
       iinntt ssffssccaannff((SSffiioo__tt** ff,, ccoonnsstt cchhaarr** ffoorrmmaatt,, ......))
       iinntt ssffssssccaannff((ccoonnsstt cchhaarr** ss,, ccoonnsstt cchhaarr** ffoorrmmaatt,, ......))
        iinntt  ssffvvssssccaannff((ccoonnsstt  cchhaarr**  ss,, ccoonnsstt cchhaarr** ffoorrmmaatt,, vvaa__lliisstt
         aarrggss))
  
  
  
  
  
                            05 August 1999                       21
  
  
  
  
  
  SFIO(3)                                                   SFIO(3)
  
  
       iinntt ssffvvssccaannff((SSffiioo__tt** ff,, ccoonnsstt cchhaarr** ffoorrmmaatt,, vvaa__lliisstt aarrggss))
         These functions scan data items.  sfscanf() scans from the
         input  stream f while sfsscanf() and sfvsscanf() scan from
         the null-terminated string s.  sfvscanf() is the  underly-
         ing  primitive  that  performs  the actual scanning.  Item
         types are  determined  from  patterns  in  string  format.
         These  functions  return  the number of items successfully
         scanned or -1 on error.
  
         A white space character (blank, tab, or new-line) in  for-
         mat  normally  matches  a  maximal sequence of input white
         space characters.  However, if  the  input  stream  is  in
         SF_LINE  mode  (see  sfset()),  a  new-line character only
         matches white spaces up to an  input  new-line  character.
         This  is  useful  to  avoid  blocking  when scanning typed
         inputs.
  
         The standard scan patterns are: i, d, u, o, x, X, p, n, f,
         e,  E,  g, G, c, %, s, [] and !.  Except for ! which shall
         be  described  below,  see  the  ANSI-C  specification  of
         fscanf(3)  for  details  on other patterns.  Let z be some
         pattern type. A formatting pattern is specified as below:
  
             %[*][pos$][width][.width.base][(type)][flag]z
  
  
         pos$:  A pattern can specify which argument in  the  argu-
                ment  list to use.  This is done via pos$ where pos
                is the argument position.  Arguments  are  numbered
                so that the first argument after format is at posi-
                tion 1.  If pos is not specified, the argument fol-
                lowing  the  most  recently  used one will be used.
                The pattern %! (see below) cannot  be  used  subse-
                quent to a usage of pos$.
  
         *:     This discards the corresponding scanned item.
  
         width and base:
                width  defines  the maximum number of bytes to scan
                and base defines the  base  of  an  integral  value
                being  scanned.  The `.' (dot) notation also allows
                specifying a `*' (star) to obtain  the  value  from
                the  argument  list.  The  below  example specifies
                scanning 4 bytes to obtain the value of an  integer
                in  base 10. At the end of scanning, the variable v
                should have the value 1234.
  
                    sfsscanf("12345678","%.*.*d", 4, 10, &v);
  
  
         (str): This defines a string  str  to  be  passed  to  the
                extension function Sffmt_t.extf.  Parentheses shall
                be balanced.  If str is *, the string  is  obtained
                from the argument list.
  
  
  
                            05 August 1999                       22
  
  
  
  
  
  SFIO(3)                                                   SFIO(3)
  
  
         flag:  This is #, I, or some sequence of h, l, and L.
  
                Flag  #  is significant for pattern %i and %[.  For
                %i, it means that the # symbol does  not  have  its
                usual meaning in an input sequence base#value.  For
                example, the scanning result of %#i on input 2#1001
                is 2 and the next sfgetc() call will return #.  For
                %[, if the next character in the input stream  does
                not  match  the  given  scan  set  of characters, #
                causes a match to a null string instead of a  fail-
                ure.
  
                Flag I defines the size or type of the object being
                formatted.  There are two cases: (1)  I  by  itself
                and  (2)  I  followed by either a decimal number or
                `*'.
  
                In the first case, for integer and  floating  point
                patterns,  the  object  type  is  taken  to  be the
                largest appropriate type (i.e.,  one  of  Sflong_t,
                Sfulong_t or Sfdouble_t).  For string patterns such
                as %s, the flag is ignored.
  
                In the second case, a  given  decimal  value  would
                define  a size while `*' would cause the size to be
                obtained from the argument list.  For  string  pat-
                terns  such  as  %s  or  %[,  this size defines the
                length of the buffer to store scanned data.  Speci-
                fying  a buffer size only limits the amount of data
                copied into the buffer.  Scanned  data  beyond  the
                buffer  limit  will  be discarded.  For integer and
                floating point patterns, the size is used to select
                a  type from one of the below lists as indicated by
                the conversion specifier:
  
                    Sflong_t, long, int, short
                    Sfulong_t, unsigned long, unsigned int, unsigned short
                    Sfdouble_t, double, float
  
                The selection algorithm always matches  types  from
                left  to  right in any given list.  Although selec-
                tion is generally based on sizes in bytes, for com-
                patibility with Microsoft-C, the size 64 is matched
                with an appropriate type with the  same  number  of
                bits, if any.  If the given size does not match any
                of the listed types, it shall  match  one  of  int,
                unsigned  int,  and double as indicated by the for-
                matting pattern.
  
                Below are examples of using the I flag.  The  first
                example  scans  a 64-bit integer.  The second scans
                some floating point value whose size is  explicitly
                computed  and  given.   The  last  example  scans a
                string into a buffer with the given size 128.  Note
  
  
  
                            05 August 1999                       23
  
  
  
  
  
  SFIO(3)                                                   SFIO(3)
  
  
                that if the scanned string is longer than 127, only
                the first  127  bytes  shall  be  copied  into  the
                buffer.  The rest of the scanned data shall be dis-
                carded.
  
                     sfscanf(sfstdin,"%I64d", &int64_obj);
                     sfscanf(sfstdin,"%I*f", sizeof(float_obj), &float_obj);
                     sfscanf(sfstdin,"%I*s", 128, buffer);
  
                Flags h, l, and L are the  ANSI-C  conventions  for
                indicating  the  type  of  a  scanned element.  For
                example, %hd means scanning a short int.  The flags
                ll and L mean respectively scanning an integer or a
                floating  point  value  with  largest  size   (i.e,
                Sflong_t or Sfdouble_t).
  
         The %i, %d and %u patterns scan numbers in bases from 2 to
         64.  %i scans integral values in self-describing  formats.
         Except for octal, decimal and hexadecimal numbers with the
         usual formats, numbers in general bases are assumed to  be
         of  the form: _b_a_s_e_#_v_a_l_u_e where _b_a_s_e is a number in base 10
         and _v_a_l_u_e is a number in the  given  base.   For  example,
         2#1001  is  the binary representation of the decimal value
         9.  If _b_a_s_e is 36 or less, the digits for _v_a_l_u_e can be any
         combination  of  [0-9], [a-z], [A-Z] where upper and lower
         case digits are not distinguishable.  If  _b_a_s_e  is  larger
         than 36, the set of digits is:
  
             0123456789
             abcdefghijklmnopqrstuvwxyz
             ABCDEFGHIJKLMNOPQRSTUVWXYZ
             @_
  
  
  
     BBUUFFFFEERRIINNGG,, SSYYNNCCHHRROONNIIZZAATTIIOONN
       VVooiidd__tt** ssffsseettbbuuff((SSffiioo__tt** ff,, VVooiidd__tt** bbuuff,, ssiizzee__tt ssiizzee))
         This  function sets the buffering scheme for the stream f.
         Except for buffer inquiry (see the case size == 0,) f will
         be  synchronized before any buffer modification.  If a new
         buffer is successfully set and the old buffer has not been
         deallocated,  sfsetbuf()  returns  the  address of the old
         buffer.  Otherwise, it returns NULL.
  
         After a sfsetbuf() call, sfvalue() returns the size of the
         returned buffer.
  
         size == SF_UNBOUND:
                Sfio  will  pick a suitable buffer size.  If buf is
                NULL, Sfio will  also  pick  a  suitable  buffering
                scheme  (such  as  memory  mapping.)  If buf is not
                NULL, its actual value is ignored  but  the  buffer
                will  be allocated via malloc(3).  This can be used
                to avoid memory mapping.
  
  
  
                            05 August 1999                       24
  
  
  
  
  
  SFIO(3)                                                   SFIO(3)
  
  
         size > 0:
                This is the suggested size to use for buffering  or
                memory  mapping.   If buf is NULL, Sfio will pick a
                suitable buffering scheme as discussed  above.   If
                buf  is  not  NULL,  then  buf and size determine a
                buffer of the given size.
  
         size == 0:
                If buf is NULL, the stream will be unbuffered.   If
                buf  is  not  NULL,  sfsetbuf()  simply returns the
                stream buffer.  In this case, no  attempt  will  be
                made to synchronize the stream.
  
  
       iinntt ssffssyynncc((SSffiioo__tt** ff))
         This  function synchronizes the logical and physical views
         of stream f.  For a SF_WRITE stream, this means  to  write
         out  any  buffered  data.   For  a  seekable  SF_READ file
         stream, the physical file position  is  aligned  with  the
         logical  stream  position and, if SF_SHARE is on, buffered
         data is discarded.  If f is NULL, all streams are synchro-
         nized.   If  f  is  the  base  of a stream stack (see sfs-
         tack()), all stacked streams are synchronized.  Note  that
         a  stacked stream can only be synchronized this way.  If f
         is in a pool (see sfpool()) but not being  the  head,  the
         pool  head  is  synchronized.  After a successful synchro-
         nization, if f has flag SF_IOCHECK,  a  SF_SYNC  event  is
         raised.  sfsync() returns a negative value for failure and
         0 for success.
  
  
       iinntt ssffppoollll((SSffiioo__tt**** fflliisstt,, iinntt nn,, iinntt ttiimmeeoouutt))
         This function polls a set of streams to see if I/O  opera-
         tions  can be performed on them without blocking.  This is
         useful for multiplexing I/O over a set of streams.   If  a
         stream  has  a  discipline,  the exception function may be
         called before and after the stream is polled (see sfdisc()
         for  details).   sfpoll()  returns  the  number  of  ready
         streams or -1 on failure.
  
         flist and n:
                flist is an array of n streams to be polled.   Upon
                return,  ready  streams  are  moved to the front of
                flist in the same relative order.
  
         timeout:
                This defines an ellapse  time  in  milliseconds  to
                wait  to  see  if  any stream is ready for I/O.  If
                timeout is negative, sfpoll() will block until some
                stream  become ready.  Note that SF_STRING and nor-
                mal file streams never block and are  always  ready
                for  I/O.   If  a  stream  with discipline is being
                polled and its readiness  is  as  yet  undetermined
                (e.g.,  empty  buffer,)  the  discipline  exception
  
  
  
                            05 August 1999                       25
  
  
  
  
  
  SFIO(3)                                                   SFIO(3)
  
  
                function will be called with SF_DPOLL before normal
                actions are taken.
  
  
       SSffiioo__tt** ssffppooooll((SSffiioo__tt** ff,, SSffiioo__tt** ppoooollff,, iinntt mmooddee))
         This  function  manipulates  pools of streams.  In a pool,
         only one stream is at the head and can have buffered data.
         All  other  streams  in  the pool will be synchronized.  A
         stream becomes head when it is used for  some  I/O  opera-
         tion.  sfpool() returns NULL on failure.
  
         f and poolf:
                If  f  is NULL, sfpool() simply returns the head of
                the pool containing poolf.  If f is  not  NULL  and
                poolf is NULL, f is deleted from its pool.  In this
                case, if no other stream from  the  same  pool  can
                become  head, sfpool() will return NULL; otherwise,
                it returns some stream from the  remainder  of  the
                pool.  If both f and poolf are not NULL, f is moved
                from its current pool (if any) into the  same  pool
                with poolf.  In this case, poolf is returned.
  
         mode:  If  poolf  is  already  in a pool, mode is ignored.
                Otherwise,  mode  should  be  0  or  SF_SHARE.    A
                SF_SHARE  pool contains streams with SF_WRITE mode.
                In addition,  on  change  to  a  new  head  stream,
                buffered  write  data of the current head is trans-
                ferred to the new head.
  
  
       iinntt ssffppuurrggee((SSffiioo__tt** ff))
         This function discards all buffered data  unless  f  is  a
         SF_STRING  stream.   Note  that  if  f is a SF_READ stream
         based on an unseekable device, purged  data  will  not  be
         recoverable.   If  f  is  a sfpopen-stream opened for both
         read and write, data of both the read and write pipe  ends
         will  be  purged (see sfset() to selectively turn off read
         or write mode if one set of  data  is  to  be  preserved.)
         After  purging,  if  f  has  flag  SF_IOCHECK,  the  event
         SF_PURGE is raised.  sfpurge() returns -1 for failure  and
         0 for success.
  
  
  
     DDIISSCCIIPPLLIINNEE,, EEVVEENNTT--HHAANNDDLLIINNGG
         A  file stream uses the system calls read(2), write(2) and
         lseek(2) to read, write and  position  in  the  underlying
         file.   Disciplines enable application-defined I/O methods
         including exception handling and data pre/post-processing.
  
  
       SSffddiisscc__tt** ssffddiisscc((SSffiioo__tt** ff,, SSffddiisscc__tt** ddiisscc))
         Each  stream has a discipline stack whose bottom is a vir-
         tual discipline  representing  the  actual  system  calls.
  
  
  
                            05 August 1999                       26
  
  
  
  
  
  SFIO(3)                                                   SFIO(3)
  
  
         sfdisc()  manipulates the discipline stack of stream f.  f
         will be synchronized before any discipline stack manipula-
         tion.   After  a successful discipline stack manipulation,
         the stream I/O position (see sfseek()  and  sftell())  and
         extent  (see sfsize()) are updated to reflect that defined
         by  the  top  discipline.   If  disc  is   SF_POPDISC   or
         (Sfdisc_t*)0,  the  top  element  of the stack, if any, is
         popped and its address is returned.   Otherwise,  disc  is
         pushed  onto  the discipline stack.  In this case, if suc-
         cessful, sfdisc() returns the discipline that  was  pushed
         down.  sfdisc() returns NULL on failure.
  
         Note that a discipline can be used only on one stream at a
         time.  An application should take care to allocate differ-
         ent  discipline structures for use with different streams.
         A discipline structure is of the type Sfdisc_t which  con-
         tains the following public fields:
  
             Sfread_f   readf;
             Sfwrite_f  writef;
             Sfseek_f   seekf;
             Sfexcept_f exceptf;
  
  
         The first three fields of Sfdisc_t specify alternative I/O
         functions.  If any of them is NULL, it is inherited from a
         discipline  pushed earlier on the stack.  Note that a file
         stream  always  has  read(2),   write(2),   lseek(2)   and
         NIL(Sfexcept_f)  as  the _l_o_g_i_c_a_l _b_o_t_t_o_m _d_i_s_c_i_p_l_i_n_e.  Argu-
         ments to I/O discipline functions have the same meaning as
         that  of the functions sfrd(), sfwr() and sfsk() described
         below.
  
         The exception function, (*exceptf)() announces exceptional
         events   during   I/O   operations.    It   is  called  as
         (*exceptf)(Sfio_t* f, int type, Void_t*  value,  Sfdisc_t*
         disc).   Unless  noted  otherwise,  the  return  value  of
         (*exceptf)() is used as follows:
  
         <0:    The on-going operation shall terminate.
  
         >0:    If the event was raised due to an  I/O  error,  the
                error  has been repaired and the on-going operation
                shall continue normally.
  
         =0:    The on-going  operation  performs  default  actions
                with  respect to the raised event.  For example, on
                a reading error or reaching end of  file,  the  top
                stream of a stack will be popped and closed and the
                on-going  operation  continue  with  the  new   top
                stream.
  
         The  argument type of (*exceptf)() identifies the particu-
         lar exceptional event:
  
  
  
                            05 August 1999                       27
  
  
  
  
  
  SFIO(3)                                                   SFIO(3)
  
  
         SF_LOCKED:
                The stream is in a locked state.
  
         SF_READ, SF_WRITE:
                These events are raised around reading and  writing
                operations.
  
                If  SF_IOCHECK  is  on,  SF_READ  and  SF_WRITE are
                raised  immediately  before  read(2)  and  write(2)
                calls.   In  this  case,  *((ssize_t*)value) is the
                amount of data to be processed.  The  return  value
                of  (*exceptf)(),  if  negative, indicates that the
                stream is not ready for I/O and the calling  opera-
                tion  will  abort with failure.  If it is positive,
                the stream is ready for I/O but the  amount  should
                be  restricted  to  the  amount  specified  by this
                value.  If the return value is zero, the I/O opera-
                tion is carried out normally.
  
                SF_READ  and  SF_WRITE are also raised on operation
                failures.  In such a  case,  *((ssize_t*)value)  is
                the return value from the failed operation.
  
         SF_SEEK:
                This event is raised when a seek operation fails.
  
         SF_NEW, SF_CLOSE, SF_FINAL:
                These  events  are  raised during a stream closing.
                SF_NEW is raised for a stream about to be closed to
                be renewed (see sfnew()).  SF_CLOSE is raised for a
                stream about to  be  closed.   SF_FINAL  is  raised
                after a stream has been closed and before its space
                is to be  destroyed  (see  sfclose()).   For  these
                events,  a  non-zero return value from (*exceptf)()
                causes sfclose() to  return  immediately  with  the
                same value.
  
         SF_DPUSH, SF_DPOP, SF_DBUFFER:
                Events  SF_DPUSH and SF_DPOP are raised when a dis-
                cipline  is  about  to   be   pushed   or   popped.
                (Sfdisc_t*)value  is  the  to-be top discipline, if
                any.
  
                A stream buffer is always synchronized before push-
                ing  or popping a discipline.  If this synchroniza-
                tion  fails,  SF_DBUFFER  will   be   raised   with
                *((size_t*)value)  being  the  amount  of  buffered
                data.  If the return value of exceptf is  positive,
                the  push  or pop operation will continue normally;
                otherwise, sfdisc() returns failure.
  
         SF_DPOLL:
                This event is raised by  sfpoll()  to  see  if  the
                stream  is ready for I/O.  *((int*)value) indicates
  
  
  
                            05 August 1999                       28
  
  
  
  
  
  SFIO(3)                                                   SFIO(3)
  
  
                a time-out interval to  wait.   A  negative  return
                value  from  the exception function means blocking.
                A positive return value means non-blocking.  A zero
                return  value  means that sfpoll() should query the
                stream file descriptor using default methods.
  
         SF_READY:
                This event is raised by  sfpoll()  for  each  ready
                stream  after  they  are  determined.   A  negative
                return  value  from  the  exeption  handler  causes
                sfpoll() to return immediately with the same return
                value.  A positive return value causes sfpoll()  to
                retry polling the whole set of streams.
  
         SF_SYNC, SF_PURGE:
                If SF_IOCHECK is set, these events are raised imme-
                diately after sfsync()  or  sfpurge()  successfully
                complete  their  operations and before they return.
                Note that sfsync() is implied when  a  SF_WRITE  or
                SF_SHARE|SF_READ  stream is closed.  Note also that
                SF_SYNC is not raised  for  a  stream  synchronized
                during a call sfsync((Sfio_t*)0).
  
         SF_ATEXIT:
                This  event  is  raised for each open stream before
                the process exits.
  
  
       iinntt ssffrraaiissee((SSffiioo__tt** ff,, iinntt ttyyppee,, VVooiidd__tt** ddaattaa))
         This function calls all exception  handlers  of  stream  f
         with  the event type and associated data.  If an exception
         handler returns  a  non-zero  value,  sfraise()  immediate
         returns the same value.  Application-defined events should
         start from the value SF_EVENT so  as  to  avoid  confusion
         with system-defined events, sfraise() returns 0 on success
         and -1 on failure.
  
  
       ssssiizzee__tt ssffrrdd((SSffiioo__tt** ff,, VVooiidd__tt**  bbuuff,,  ssiizzee__tt  nn,,  SSffddiisscc__tt**
         ddiisscc))
        ssssiizzee__tt  ssffwwrr((SSffiioo__tt**  ff,,  ccoonnsstt  VVooiidd__tt**  bbuuff,,  ssiizzee__tt  nn,,
         SSffddiisscc__tt** ddiisscc))
       SSffooffff__tt ssffsskk((SSffiioo__tt** ff,, SSffooffff__tt ooffffsseett,, iinntt ttyyppee,,  SSffddiisscc__tt**
         ddiisscc))
         These functions provides safe methods for a discipline I/O
         function to invoke earlier discipline I/O functions and to
         properly  handle  exceptions.   They should not be used in
         any other context.  sfrd() and sfwr() return the number of
         bytes  read or written.  sfsk() returns the new seek posi-
         tion.  On error, all three  functions  return  a  negative
         value  which  should  be  -1  or the value returned by the
         exception handler.
  
  
  
  
  
                            05 August 1999                       29
  
  
  
  
  
  SFIO(3)                                                   SFIO(3)
  
  
     SSTTRREEAAMM CCOONNTTRROOLL
       iinntt ssffsseett((SSffiioo__tt** ff,, iinntt ffllaaggss,, iinntt sseett))
         This function sets control flags for  the  stream  f.   It
         returns the previous set of flags or 0 on error.
  
         Settable   flags   are:   SF_READ,  SF_WRITE,  SF_IOCHECK,
         SF_LINE, SF_SHARE,  SF_PUBLIC,  SF_MALLOC,  SF_STATIC  and
         SF_BUFCONST.  Note that SF_READ and SF_WRITE can be turned
         on  or  off   only   if   the   stream   was   opened   as
         SF_READ|SF_WRITE.   Turning off one of them means that the
         stream is to be treated exclusively in the other mode.  It
         is not possible to turn off both.  If legal, an attempt to
         turn on either SF_READ or SF_WRITE will cause  the  stream
         to be in the given I/O mode.
  
         set == 0:
                If  flags is zero, the current set of flags is sim-
                ply returned.  Note that when  a  stream  is  first
                opened,  not  all  of its flags are initialized yet
                (more below). If flags is non-zero, an  attempt  is
                made to turn off the specified flags.
  
         set != 0:
                If  flags is zero, the stream is initialized if not
                yet done so.  Then the  current  set  of  flags  is
                returned.  If flags is non-zero, an attempt is made
                to turn on the specified flags.
  
  
       iinntt ssffsseettffdd((SSffiioo__tt** ff,, iinntt ffdd))
         This function changes the file descriptor of f.  Before  a
         change is realized, (*notify)(f,SF_SETFD,newfd) (see sfno-
         tify()) is called.  sfsetfd() returns -1  on  failure  and
         the new file descriptor on success.
  
         fd >= 0:
                If  the current file descriptor is non-negative, it
                will be changed using dup(3) to a value  larger  or
                equal  to fd.  Upon a successful change, the previ-
                ous file descriptor will be closed.  If the current
                file  descriptor  is negative, it will be set to fd
                and the stream will be reinitialized.
  
         fd < 0:
                The stream is synchronized (see sfsync())  and  its
                file  descriptor  will be set to this value.  Then,
                except for sfclose(), the stream will be inaccessi-
                ble  until  a future sfsetfd() call resets the file
                descriptor  to   a   non-negative   value.    Thus,
                sfsetfd(f,-1) can be used to avoid closing the file
                descriptor of f when f is closed.
  
  
  
  
  
  
                            05 August 1999                       30
  
  
  
  
  
  SFIO(3)                                                   SFIO(3)
  
  
       SSffiioo__tt** ssffssttaacckk((SSffiioo__tt** bbaassee,, SSffiioo__tt** ttoopp))
         This function stacks or  unstacks  stream.   Every  stream
         stack  is  identified  by  a base stream via which all I/O
         operations  are  performed.   However,  an  I/O  operation
         always  takes effect on the top stream.  If the top stream
         reaches the end of file or has an unrecoverable error con-
         dition,  it  is  automatically popped and closed (see also
         sfdisc() for alternative handling of these conditions).
  
         base:  This is the base stream of the  stack.   If  it  is
                NULL, sfstack() does nothing and returns top.
  
         top:   If  this is SF_POPSTACK or (Sfio_t*)0, the stack is
                popped and sfstack()  returns  the  popped  stream.
                Otherwise,  top is pushed on top of the stack iden-
                tified by  base  and  sfstack()  returns  the  base
                stream.
  
  
       SSffiioo__tt** ssffsswwaapp((SSffiioo__tt** ff11,, SSffiioo__tt** ff22))
         This  function swaps contents of f1 and f2.  This fails if
         either stream is in a stream stack but not  being  a  base
         stream.   If  f2 is NULL, a new stream is constructed as a
         duplicate of f1.  sfswap() returns f2 or f1  duplicate  on
         success and NULL on failure.
  
  
  
     SSTTRREEAAMM IINNFFOORRMMAATTIIOONN
       SSffooffff__tt ssffssiizzee((SSffiioo__tt** ff))
         This  function returns the size of stream f (see sfnew()).
         If f is not seekable or if its size is  not  determinable,
         sfsize() returns -1.
  
  
       SSffooffff__tt ssfftteellll((SSffiioo__tt** ff))
         This  function  returns the current I/O position in stream
         f.  Note that if f is SF_APPEND and  a  writing  operation
         was  just  performed,  the  current I/O position is at the
         physical end of file.  If f is unseekable, sftell  returns
         the  number  of bytes read from or written to f.  See also
         sfungetc().
  
  
       ssssiizzee__tt ssffvvaalluuee((SSffiioo__tt** ff))
         This function returns the  string  or  buffer  length  for
         sfreserve(), sfsetbuf(), and sfgetr().
  
  
       iinntt ssffffiilleennoo((SSffiioo__tt** ff))
         This function returns the file descriptor of stream f.
  
  
  
  
  
  
                            05 August 1999                       31
  
  
  
  
  
  SFIO(3)                                                   SFIO(3)
  
  
       iinntt ssffssttaacckkeedd((SSffiioo__tt** ff))
         This  function  returns  a  non-zero value if stream f has
         been stacked.
  
  
       iinntt ssffeeooff((SSffiioo__tt** ff))
       iinntt ssffeerrrroorr((SSffiioo__tt** ff))
       iinntt ssffccllrreerrrr((SSffiioo__tt** ff))
         sfeof() tells whether or not the stream has an end-of-file
         condition.   sferror() tells whether or not the stream has
         an error condition.  sfclrerr()  clears  both  end-of-file
         and  error  conditions.   The end-of-file and error condi-
         tions are also cleared on an I/O operation.
  
  
       iinntt ssffccllrrlloocckk((SSffiioo__tt** ff))
         This function restores the stream back to a normal  state.
         This  means  clearing  locks  and  possibly  throwing away
         unprocessed data.  As such, this operation is  unsafe  and
         should  be  used  with  care.  For example, it may be used
         before a long jump (longjmp(3)) out of some discipline I/O
         function  to  restore  the internal stream states.  sfclr-
         lock() returns the current set of flags.
  
  
       iinntt ssffnnoottiiffyy((((vvooiidd((**))nnoottiiffyy))((SSffiioo__tt**,, iinntt,, iinntt)) ))
         This  sets  a  function  (*notify)()  to  be   called   as
         (*notify)(f,type,file)  on  various  stream events.  Argu-
         ments f and file are stream and related  file  descriptor.
         Argument type indicates the reason for the call:
  
         SF_NEW:
                f  is  being opened and file is the underlying file
                descriptor.
  
         SF_CLOSE:
                f and file are being closed.
  
         SF_SETFD:
                The file descriptor of f is being changed  to  file
                (see sfsetfd().)
  
         SF_READ:
                An attempt to change f to read mode failed.
  
         SF_WRITE:
                An attempt to change f to write mode failed.
  
  
  
     MMIISSCCEELLLLAANNEEOOUUSS FFUUNNCCTTIIOONNSS
       ssssiizzee__tt ssffsslleenn(())
         This  function  returns  the  length of a string just con-
         structed  by  sfsprintf()   or   sfprints().    See   also
  
  
  
                            05 August 1999                       32
  
  
  
  
  
  SFIO(3)                                                   SFIO(3)
  
  
         sfvalue().
  
  
       iinntt ssffuulleenn((SSffuulloonngg__tt vv))
       iinntt ssfflllleenn((SSfflloonngg__tt vv))
       iinntt ssffddlleenn((SSffddoouubbllee__tt vv))
         These  functions  return  respectively the number of bytes
         required to code the  Sfulong_t,  Sflong_t  or  Sfdouble_t
         value v by sfputu(), sfputl() or sfputd().
  
  
        ssssiizzee__tt  ssffppkkrrdd((iinntt  ffdd,, cchhaarr** bbuuff,, ssiizzee__tt nn,, iinntt rrsscc,, lloonngg
         ttmm,, iinntt aaccttiioonn))
         This function acts directly on the file descriptor fd.  It
         does a combination of peeking on incoming data and a time-
         out read.  Upon success, it returns the  number  of  bytes
         received.   A return value of 0 means that the end-of-file
         condition has been detected.  A negative value  represents
         an error.
  
         buf, n:
                These  define  a  buffer  and its size to read data
                into.
  
         rsc:   If >=0,  this  defines  a  record  separator.   See
                action for detail.
  
         tm:    If  >=0,  this defines a time interval in millisec-
                onds to wait for incoming data.
  
         action:
                When rsc >= 0, the absolute  value  of  action,  _r,
                determines  the  number  of records to be read.  If
                action > 0, sfpkrd() will peek on incoming data but
                will not read past it. Therefore, a future sfpkrd()
                or read(2) will see the same data again.  If action
                == 0, sfpkrd() will not peek.  If action < 0, there
                are two cases: if rsc < 0, sfpkrd() reads n  bytes;
                otherwise,  exactly  _r  records will be read.  Note
                that, in the last case,  reading  records  from  an
                unseekable  device  may  be  slow if the underlying
                platform does not allow peeking on such a device.
  
  
  
     FFUULLLL SSTTRRUUCCTTUURREE SSFFIIOO__TT
       ##iinncclluuddee <<ssffiioo__tt..hh>>
         Most applications based on Sfio only need to  include  the
         header  file  sfio.h  which  defines an abbreviated Sfio_t
         structure without certain fields private  to  Sfio.   How-
         ever,  there  are times (e.g., debugging) when an applica-
         tion may require more details about the full Sfio_t struc-
         ture.  In such cases, the header file sfio_t.h can be used
         in place of sfio.h.  Note that an application  doing  this
  
  
  
                            05 August 1999                       33
  
  
  
  
  
  SFIO(3)                                                   SFIO(3)
  
  
         will become sensitive to changes in the internal architec-
         ture of Sfio.
  
  
       ##ddeeffiinnee SSFFNNEEWW((bbuuff,,ssiizzee,,ffiillee,,ffllaaggss,,ddiisscc))
         This macro function is defined  in  sfio_t.h  for  use  in
         static initialization of an Sfio_t structure.  It requires
         five arguments:
  
         buf, size:
                These define a buffer and its size.
  
         file:  This defines the underlying file descriptor if any.
  
         flags: This is composed from bit flags described above.
  
         disc:  This defines a discipline if any.
  
  
  
     EEXXAAMMPPLLEE DDIISSCCIIPPLLIINNEESS
         The  below  functions  create  disciplines and insert them
         into the given streams f. These functions return 0 on suc-
         cess and -1 on failure.
  
  
     iinntt ssffddccddiioo((SSffiioo__tt** ff,, ssiizzee__tt bbuuffssiizzee))
         This  creates a discipline that uses the direct IO feature
         available on file systems such as SGI's XFS  to  speed  up
         IO.   The  argument  bufsize suggests a buffer size to use
         for data transfer.
  
  
     iinntt ssffddccddooss((SSffiioo__tt** ff))
         This creates a discipline to  read  DOS  text  files.   It
         basically transforms pairs of \r\n to \n.
  
  
     iinntt ssffddccffiilltteerr((SSffiioo__tt** ff,, ccoonnsstt cchhaarr** ccmmdd))
         This  creates  a  discipline that sends data from f to the
         given command cmd to process, then  reads  back  the  pro-
         cessed data.
  
  
     iinntt ssffddccllzzww((SSffiioo__tt** ff))
         This creates a discipline that would decompress data in f.
         The stream f should have data from a source compressed  by
         the Unix ccoommpprreessss program.
  
  
     iinntt ssffddccsseeeekkaabbllee((SSffiioo__tt** ff))
         This creates a discipline that makes an unseekable reading
         stream seekable.
  
  
  
  
                            05 August 1999                       34
  
  
  
  
  
  SFIO(3)                                                   SFIO(3)
  
  
     iinntt ssffddccssllooww((SSffiioo__tt** ff))
         This creates a discipline that makes all  Sfio  operations
         return immediately on interrupts. This is useful for deal-
         ing with slow devices.
  
  
     iinntt ssffddccssuubbssttrreeaamm((SSffiioo__tt** ff,, SSffiioo__tt** ppaarreenntt,,  SSffooffff__tt  ooffffsseett,,
         SSffooffff__tt eexxtteenntt))
         This  creates a discipline that makes f acts as if it cor-
         responds exactly to the subsection of parent  starting  at
         offset with size extent.
  
  
     iinntt ssffddcctteeee((SSffiioo__tt** ff,, SSffiioo__tt** tteeee))
         This  creates  a  discipline that copies to the stream tee
         any data written to f.
  
  
     iinntt ssffddccuunniioonn((SSffiioo__tt** ff,, SSffiioo__tt**** aarrrraayy,, iinntt nn))
         This creates a discipline that makes f act as if it is the
         concatenation of the n streams given in array.
  
  
  
     SSTTDDIIOO--CCOOMMPPAATTIIBBIILLIITTYY
         Sfio  provides  two  compatibility packages to Stdio-based
         applications, a source level interface and a binary  level
         library.   These  packages provide a union of functions in
         popular Stdio implementations.
  
         The  source  Stdio-compatibility  interface  provides  the
         header  file  stdio.h  that  defines  a  set  of macros or
         inlined functions to map Stdio calls to Sfio  ones.   This
         mapping  may benignly extend or change the meaning of cer-
         tain original Stdio operations. For  example,  the  Sfio's
         version  of  popen()  allows  a coprocess to be opened for
         both reading and writing unlike the  original  call  which
         only  allows  a  coprocess to be opened for a single mode.
         Similarly, the Sfio's fopen() call can be used  to  create
         string streams in addition to file streams.
  
         The  binary  Stdio-compatibility library, libstdio.a, pro-
         vides a complete implementation of Stdio  functions  suit-
         able for linking applications already compiled with native
         header stdio.h.  Functions in this implementation are also
         slightly altered or extended as discussed above.
  
         Below are the supported Stdio functions:
  
         FILE*  fopen(const char* file, const char* mode);
         FILE*  freopen(const char* file, const char* mode, FILE* stream);
         FILE*  fdopen(int filedesc, const char* mode);
         FILE*  popen(const char* command, const char* mode);
         FILE*  tmpfile();
  
  
  
                            05 August 1999                       35
  
  
  
  
  
  SFIO(3)                                                   SFIO(3)
  
  
         int    fclose(FILE* stream);
         int    pclose(FILE* stream);
  
         void   setbuf(FILE* stream, char* buf);
         int    setvbuf(FILE* stream, char* buf, int mode, size_t size);
         void   setbuffer(FILE* stream, char* buf, size_t size);
         int    setlinebuf(FILE* stream);
         int    fflush(FILE* stream);
         int    fpurge(FILE* stream);
  
         int    fseek(FILE* stream, long offset, int whence);
         void   rewind(FILE* stream);
         int    fgetpos(FILE* stream, fpos_t* pos);
         int    fsetpos(FILE* stream, fpos_t* pos);
         long   ftell(FILE* stream);
  
         int    getc(FILE* stream);
         int    fgetc(FILE* stream);
         int    getchar(void);
         int    ungetc(int c, FILE* stream);
         int    getw(FILE* stream);
         char*  gets(char* s);
         char*  fgets(char* s, int n, FILE* stream);
         size_t fread(Void_t* ptr, size_t size, size_t nelt, FILE* stream);
  
         int    putc(int c, FILE* stream);
         int    fputc(int c, FILE* stream);
         int    putchar(int c);
         int    putw(int w, FILE* stream);
         int    puts(const char* s, FILE* stream);
         int    fputs(const char* s, FILE* stream);
         size_t fwrite(const Void_t* ptr, size_t size, size_t nelt, FILE* stream);
  
         int    fscanf(FILE* stream, const char* format, ...);
         int    vfscanf(FILE* stream, const char* format, va_list args);
         int    _doscan(FILE* stream, const char* format, va_list args);
         int    scanf(const char* format, ...);
         int    vscanf(const char* format, va_list args);
         int    sscanf(const char* s, const char* format, ...);
         int    vsscanf(const char* s, const char* format, va_list args);
  
         int    fprintf(FILE* stream, const char* format, ...);
         int    vfprintf(FILE* stream, const char* format, va_list args);
         int    _doprnt(FILE* stream, const char* format, va_list args);
         int    printf(const char* format, ...);
         int    vprintf(const char* format, va_list args);
         int    sprintf(const char* s, const char* format, ...);
         int    snprintf(const char* s, int n, const char* format, ...);
         int    vsprintf(const char* s, const char* format, va_list args);
         int    vsnprintf(const char* s, int n, const char* format, va_list args);
  
         int    feof(FILE* stream);
         int    ferror(FILE* stream);
         int    clearerr(FILE* stream);
  
  
  
                            05 August 1999                       36
  
  
  
  
  
  SFIO(3)                                                   SFIO(3)
  
  
     RREECCEENNTT CCHHAANNGGEESS
         A  few  exception  types  have  been added. In particular,
         exception handlers  shall  be  raised  with  SF_LOCKED  on
         accessing  a  locked  stream.  Before a process exits, the
         event SF_ATEXIT is raised for each open stream.
  
         A number of disciplines have been added for  various  pro-
         cessing  functions.   Of  interests are disciplines to use
         the direct I/O feature on IRIX6.2, read  DOS  text  files,
         and decompress files compressed by Unix _c_o_m_p_r_e_s_s.
  
         Various new stream and function flags have been added. For
         example, the third argument of sfgetr() is now  a  set  of
         bit  flags and not just a three-value object. However, the
         old semantics of this argument of sfgetr() is  still  sup-
         ported.
  
         The    sfopen()   call   has   been   extended   so   that
         sfopen(f,NULL,mode) can be used to changed the mode  of  a
         file  stream before any I/O operations.  This is most use-
         ful for changing the modes of the standard streams.
  
         The buffering strategy has been significantly enhanced for
         streams  that perform many seek operations. Also, the han-
         dling of stream and file positions have been better clari-
         fied  so  that  applications  that  share file descriptors
         across streams and/or processes can be sure that the  file
         states will be consistent.
  
  
  AAUUTTHHOORRSS
         Kiem-Phong Vo, kpv@research.att.com,
         David G. Korn, dgk@research.att.com, and
         Glenn S. Fowler, gsf@research.att.com.
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
                            05 August 1999                       37
  
  
  Index: ossp-pkg/sio/BRAINSTORM/bsd-stdio.txt
  ============================================================
  $ cvs update -p -r1.1 bsd-stdio.txt
  
  STDIO(3)	       FreeBSD Library Functions Manual 	      STDIO(3)
  
  NAME
       stdio - standard input/output library functions
  
  SYNOPSIS
       #include <stdio.h>
       FILE *stdin;
       FILE *stdout;
       FILE *stderr;
  
  DESCRIPTION
       The standard I/O library provides a simple and efficient buffered stream
       I/O interface.  Input and output is mapped into logical data streams and
       the physical I/O characteristics are concealed. The functions and macros
       are listed below; more information is available from the individual man
       pages.
  
       A stream is associated with an external file (which may be a physical de-
       vice) by opening a file, which may involve creating a new file. Creating
       an existing file causes its former contents to be discarded.  If a file
       can support positioning requests (such as a disk file, as opposed to a
       terminal) then a file position indicator associated with the stream is
       positioned at the start of the file (byte zero), unless the file is
       opened with append mode. If append mode is used, the position indicator
       will be placed at the end-of-file.  The position indicator is maintained
       by subsequent reads, writes and positioning requests. All input occurs as
       if the characters were read by successive calls to the fgetc(3) function;
       all output takes place as if all characters were written by successive
       calls to the fputc(3) function.
  
       A file is disassociated from a stream by closing the file.  Output
       streams are flushed (any unwritten buffer contents are transferred to the
       host environment) before the stream is disassociated from the file.  The
       value of a pointer to a FILE object is indeterminate (garbage) after a
       file is closed.
  
       A file may be subsequently reopened, by the same or another program exe-
       cution, and its contents reclaimed or modified (if it can be repositioned
       at the start).  If the main function returns to its original caller, or
       the exit(3) function is called, all open files are closed (hence all out-
       put streams are flushed) before program termination.  Other methods of
       program termination may not close files properly and hence buffered out-
       put may be lost.  In particular, _exit(2) does not flush stdio files.
       Neither does an exit due to a signal.  Buffers are flushed by abort(3) as
       required by POSIX, although previous implementations did not.
  
       This implementation makes no distinction between ``text'' and ``binary''
       streams.  In effect, all streams are binary.  No translation is performed
       and no extra padding appears on any stream.
  
       At program startup, three streams are predefined and need not be opened
       explicitly:
  	   o   standard input (for reading conventional input),
  	   o   standard output (for writing conventional output), and
  	   o   standard error (for writing diagnostic output).
       These streams are abbreviated stdin, stdout and stderr. Initially, the
       standard error stream is unbuffered; the standard input and output
       streams are fully buffered if and only if the streams do not refer to an
       interactive or ``terminal'' device, as determined by the isatty(3) func-
       tion.  In fact, all freshly-opened streams that refer to terminal devices
       default to line buffering, and pending output to such streams is written
       automatically whenever such an input stream is read.  Note that this ap-
       plies only to ``true reads''; if the read request can be satisfied by ex-
       isting buffered data, no automatic flush will occur.  In these cases, or
       when a large amount of computation is done after printing part of a line
       on an output terminal, it is necessary to fflush(3) the standard output
       before going off and computing so that the output will appear.  Alterna-
       tively, these defaults may be modified via the setvbuf(3) function.
  
       The stdio library is a part of the library libc and routines are automat-
       ically loaded as needed by the C compiler.  The SYNOPSIS sections of the
       following manual pages indicate which include files are to be used, what
       the compiler declaration for the function looks like and which external
       variables are of interest.
  
       The following are defined as macros; these names may not be re-used with-
       out first removing their current definitions with #undef: BUFSIZ, EOF,
       FILENAME_MAX, FOPEN_MAX, L_cuserid, L_ctermid, L_tmpnam, NULL, P_tmpdir,
       SEEK_CUR, SEEK_END, SEEK_SET, TMP_MAX, clearerr, feof, ferror, fileno,
       fropen, fwopen, getc, getchar, putc, putchar, stderr, stdin, stdout,
       vfscanf. Function versions of the macro functions clearerr(), feof(),
       ferror(), fileno(), getc(), getchar(), putc(), and putchar() exist and
       will be used if the macro definitions are explicitly removed.
  
  SEE ALSO
       close(2),	open(2),  read(2),  write(2)
  
  BUGS
       The standard buffered functions do not interact well with certain other
       library and system functions, especially vfork(2).
  
  STANDARDS
       The stdio library conforms to ISO 9899: 1990 (``ISO C'').
  
  LIST OF FUNCTIONS
       Function	    Description
       asprintf	    formatted output conversion
       clearerr	    check and reset stream status
       fclose	    close a stream
       fdopen	    stream open functions
       feof	    check and reset stream status
       ferror	    check and reset stream status
       fflush	    flush a stream
       fgetc	    get next character or word from input stream
       fgetln	    get a line from a stream
       fgetpos	    reposition a stream
       fgets	    get a line from a stream
       fileno	    check and reset stream status
       fopen	    stream open functions
       fprintf	    formatted output conversion
       fpurge	    flush a stream
       fputc	    output a character or word to a stream
       fputs	    output a line to a stream
       fread	    binary stream input/output
       freopen	    stream open functions
       fropen	    open a stream
       fscanf	    input format conversion
       fseek	    reposition a stream
       fsetpos	    reposition a stream
       ftell	    reposition a stream
       funopen	    open a stream
       fwopen	    open a stream
       fwrite	    binary stream input/output
       getc	    get next character or word from input stream
       getchar	    get next character or word from input stream
       gets	    get a line from a stream
       getw	    get next character or word from input stream
       mkdtemp	    create unique temporary file
       mkstemp	    create unique temporary file
       mktemp	    create unique temporary file
       perror	    system error messages
       printf	    formatted output conversion
       putc	    output a character or word to a stream
       putchar	    output a character or word to a stream
       puts	    output a line to a stream
       putw	    output a character or word to a stream
       remove	    remove directory entry
       rewind	    reposition a stream
       scanf	    input format conversion
       setbuf	    stream buffering operations
       setbuffer	    stream buffering operations
       setlinebuf     stream buffering operations
       setvbuf	    stream buffering operations
       snprintf	    formatted output conversion
       sprintf	    formatted output conversion
       sscanf	    input format conversion
       strerror	    system error messages
       sys_errlist    system error messages
       sys_nerr	    system error messages
       tempnam	    temporary file routines
       tmpfile	    temporary file routines
       tmpnam	    temporary file routines
       ungetc	    un-get character from input stream
       vasprintf	    formatted output conversion
       vfprintf	    formatted output conversion
       vfscanf	    input format conversion
       vprintf	    formatted output conversion
       vscanf	    input format conversion
       vsnprintf	    formatted output conversion
       vsprintf	    formatted output conversion
       vsscanf	    input format conversion
  
  4th Berkeley Distribution	April 19, 1994				     3
  Index: ossp-pkg/sio/BRAINSTORM/openssl-bio.txt
  ============================================================
  $ cvs update -p -r1.1 openssl-bio.txt
  
  BIO Routines
  
  This documentation is rather sparse, you are probably best 
  off looking at the code for specific details.
  
  The BIO library is a IO abstraction that was originally 
  inspired by the need to have callbacks to perform IO to FILE 
  pointers when using Windows 3.1 DLLs.  There are two types 
  of BIO; a source/sink type and a filter type.
  The source/sink methods are as follows:
  -	BIO_s_mem()  memory buffer - a read/write byte array that
  	grows until memory runs out :-).
  -	BIO_s_file()  FILE pointer - A wrapper around the normal 
  	'FILE *' commands, good for use with stdin/stdout.
  -	BIO_s_fd()  File descriptor - A wrapper around file 
  	descriptors, often used with pipes.
  -	BIO_s_socket()  Socket - Used around sockets.  It is 
  	mostly in the Microsoft world that sockets are different 
  	from file descriptors and there are all those ugly winsock 
  	commands.
  -	BIO_s_null()  Null - read nothing and write nothing.; a 
  	useful endpoint for filter type BIO's specifically things 
  	like the message digest BIO.
  
  The filter types are
  -	BIO_f_buffer()  IO buffering - does output buffering into 
  	larger chunks and performs input buffering to allow gets() 
  	type functions.
  -	BIO_f_md()  Message digest - a transparent filter that can 
  	be asked to return a message digest for the data that has 
  	passed through it.
  -	BIO_f_cipher()  Encrypt or decrypt all data passing 
  	through the filter.
  -	BIO_f_base64()  Base64 decode on read and encode on write.
  -	BIO_f_ssl()  A filter that performs SSL encryption on the 
  	data sent through it.
  
  Base BIO functions.
  The BIO library has a set of base functions that are 
  implemented for each particular type.  Filter BIOs will 
  normally call the equivalent function on the source/sink BIO 
  that they are layered on top of after they have performed 
  some modification to the data stream.  Multiple filter BIOs 
  can be 'push' into a stack of modifers, so to read from a 
  file, unbase64 it, then decrypt it, a BIO_f_cipher, 
  BIO_f_base64 and a BIO_s_file would probably be used.  If a 
  sha-1 and md5 message digest needed to be generated, a stack 
  two BIO_f_md() BIOs and a BIO_s_null() BIO could be used.
  The base functions are
  -	BIO *BIO_new(BIO_METHOD *type); Create  a new BIO of  type 'type'.
  -	int BIO_free(BIO *a); Free a BIO structure.  Depending on 
  	the configuration, this will free the underlying data 
  	object for a source/sink BIO.
  -	int BIO_read(BIO *b, char *data, int len); Read upto 'len' 
  	bytes into 'data'. 
  -	int BIO_gets(BIO *bp,char *buf, int size); Depending on 
  	the BIO, this can either be a 'get special' or a get one 
  	line of data, as per fgets();
  -	int BIO_write(BIO *b, char *data, int len); Write 'len' 
  	bytes from 'data' to the 'b' BIO.
  -	int BIO_puts(BIO *bp,char *buf); Either a 'put special' or 
  	a write null terminated string as per fputs().
  -	long BIO_ctrl(BIO *bp,int cmd,long larg,char *parg);  A 
  	control function which is used to manipulate the BIO 
  	structure and modify it's state and or report on it.  This 
  	function is just about never used directly, rather it 
  	should be used in conjunction with BIO_METHOD specific 
  	macros.
  -	BIO *BIO_push(BIO *new_top, BIO *old); new_top is apped to the
  	top of the 'old' BIO list.  new_top should be a filter BIO.
  	All writes will go through 'new_top' first and last on read.
  	'old' is returned.
  -	BIO *BIO_pop(BIO *bio); the new topmost BIO is returned, NULL if
  	there are no more.
  
  If a particular low level BIO method is not supported 
  (normally BIO_gets()), -2 will be returned if that method is 
  called.  Otherwise the IO methods (read, write, gets, puts) 
  will return the number of bytes read or written, and 0 or -1 
  for error (or end of input).  For the -1 case, 
  BIO_should_retry(bio) can be called to determine if it was a 
  genuine error or a temporary problem.  -2 will also be 
  returned if the BIO has not been initalised yet, in all 
  cases, the correct error codes are set (accessible via the 
  ERR library).
  
  
  The following functions are convenience functions:
  -	int BIO_printf(BIO *bio, char * format, ..);  printf but 
  	to a BIO handle.
  -	long BIO_ctrl_int(BIO *bp,int cmd,long larg,int iarg); a 
  	convenience function to allow a different argument types 
  	to be passed to BIO_ctrl().
  -	int BIO_dump(BIO *b,char *bytes,int len); output 'len' 
  	bytes from 'bytes' in a hex dump debug format.
  -	long BIO_debug_callback(BIO *bio, int cmd, char *argp, int 
  	argi, long argl, long ret) - a default debug BIO callback, 
  	this is mentioned below.  To use this one normally has to 
  	use the BIO_set_callback_arg() function to assign an 
  	output BIO for the callback to use.
  -	BIO *BIO_find_type(BIO *bio,int type); when there is a 'stack'
  	of BIOs, this function scan the list and returns the first
  	that is of type 'type', as listed in buffer.h under BIO_TYPE_XXX.
  -	void BIO_free_all(BIO *bio); Free the bio and all other BIOs
  	in the list.  It walks the bio->next_bio list.
  
  
  
  Extra commands are normally implemented as macros calling BIO_ctrl().
  -	BIO_number_read(BIO *bio) - the number of bytes processed 
  	by BIO_read(bio,.).
  -	BIO_number_written(BIO *bio) - the number of bytes written 
  	by BIO_write(bio,.).
  -	BIO_reset(BIO *bio) - 'reset' the BIO.
  -	BIO_eof(BIO *bio) - non zero if we are at the current end 
  	of input.
  -	BIO_set_close(BIO *bio, int close_flag) - set the close flag.
  -	BIO_get_close(BIO *bio) - return the close flag.
  	BIO_pending(BIO *bio) - return the number of bytes waiting 
  	to be read (normally buffered internally).
  -	BIO_flush(BIO *bio) - output any data waiting to be output.
  -	BIO_should_retry(BIO *io) - after a BIO_read/BIO_write 
  	operation returns 0 or -1, a call to this function will 
  	return non zero if you should retry the call later (this 
  	is for non-blocking IO).
  -	BIO_should_read(BIO *io) - we should retry when data can 
  	be read.
  -	BIO_should_write(BIO *io) - we should retry when data can 
  	be written.
  -	BIO_method_name(BIO *io) - return a string for the method name.
  -	BIO_method_type(BIO *io) - return the unique ID of the BIO method.
  -	BIO_set_callback(BIO *io,  long (*callback)(BIO *io, int 
  	cmd, char *argp, int argi, long argl, long ret); - sets 
  	the debug callback.
  -	BIO_get_callback(BIO *io) - return the assigned function 
  	as mentioned above.
  -	BIO_set_callback_arg(BIO *io, char *arg)  - assign some 
  	data against the BIO.  This is normally used by the debug 
  	callback but could in reality be used for anything.  To 
  	get an idea of how all this works, have a look at the code 
  	in the default debug callback mentioned above.  The 
  	callback can modify the return values.
  
  Details of the BIO_METHOD structure.
  typedef struct bio_method_st
          {
  	int type;
  	char *name;
  	int (*bwrite)();
  	int (*bread)();
  	int (*bputs)();
  	int (*bgets)();
  	long (*ctrl)();
  	int (*create)();
  	int (*destroy)();
  	} BIO_METHOD;
  
  The 'type' is the numeric type of the BIO, these are listed in buffer.h;
  'Name' is a textual representation of the BIO 'type'.
  The 7 function pointers point to the respective function 
  methods, some of which can be NULL if not implemented.
  The BIO structure
  typedef struct bio_st
  	{
  	BIO_METHOD *method;
  	long (*callback)(BIO * bio, int mode, char *argp, int 
  		argi, long argl, long ret);
  	char *cb_arg; /* first argument for the callback */
  	int init;
  	int shutdown;
  	int flags;      /* extra storage */
  	int num;
  	char *ptr;
  	struct bio_st *next_bio; /* used by filter BIOs */
  	int references;
  	unsigned long num_read;
  	unsigned long num_write;
  	} BIO;
  
  -	'Method' is the BIO method.
  -	'callback', when configured, is called before and after 
  	each BIO method is called for that particular BIO.  This 
  	is intended primarily for debugging and of informational feedback.
  -	'init' is 0 when the BIO can be used for operation.  
  	Often, after a BIO is created, a number of operations may 
  	need to be performed before it is available for use.  An 
  	example is for BIO_s_sock().  A socket needs to be 
  	assigned to the BIO before it can be used.
  -	'shutdown', this flag indicates if the underlying 
  	comunication primative being used should be closed/freed 
  	when the BIO is closed.
  -	'flags' is used to hold extra state.  It is primarily used 
  	to hold information about why a non-blocking operation 
  	failed and to record startup protocol information for the 
  	SSL BIO.
  -	'num' and 'ptr' are used to hold instance specific state 
  	like file descriptors or local data structures.
  -	'next_bio' is used by filter BIOs to hold the pointer of the
  	next BIO in the chain. written data is sent to this BIO and
  	data read is taken from it.
  -	'references' is used to indicate the number of pointers to 
  	this structure.  This needs to be '1' before a call to 
  	BIO_free() is made if the BIO_free() function is to 
  	actually free() the structure, otherwise the reference 
  	count is just decreased.  The actual BIO subsystem does 
  	not really use this functionality but it is useful when 
  	used in more advanced applicaion.
  -	num_read and num_write are the total number of bytes 
  	read/written via the 'read()' and 'write()' methods.
  
  BIO_ctrl operations.
  The following is the list of standard commands passed as the 
  second parameter to BIO_ctrl() and should be supported by 
  all BIO as best as possible.  Some are optional, some are 
  manditory, in any case, where is makes sense, a filter BIO 
  should pass such requests to underlying BIO's.
  -	BIO_CTRL_RESET	- Reset the BIO back to an initial state.
  -	BIO_CTRL_EOF	- return 0 if we are not at the end of input, 
  	non 0 if we are.
  -	BIO_CTRL_INFO	- BIO specific special command, normal
  	information return.
  -	BIO_CTRL_SET	- set IO specific parameter.
  -	BIO_CTRL_GET	- get IO specific parameter.
  -	BIO_CTRL_GET_CLOSE - Get the close on BIO_free() flag, one 
  	of BIO_CLOSE or BIO_NOCLOSE.
  -	BIO_CTRL_SET_CLOSE - Set the close on BIO_free() flag.
  -	BIO_CTRL_PENDING - Return the number of bytes available 
  	for instant reading
  -	BIO_CTRL_FLUSH	- Output pending data, return number of bytes output.
  -	BIO_CTRL_SHOULD_RETRY - After an IO error (-1 returned) 
  	should we 'retry' when IO is possible on the underlying IO object.
  -	BIO_CTRL_RETRY_TYPE - What kind of IO are we waiting on.
  
  The following command is a special BIO_s_file() specific option.
  -	BIO_CTRL_SET_FILENAME - specify a file to open for IO.
  
  The BIO_CTRL_RETRY_TYPE needs a little more explanation.  
  When performing non-blocking IO, or say reading on a memory 
  BIO, when no data is present (or cannot be written), 
  BIO_read() and/or BIO_write() will return -1.  
  BIO_should_retry(bio) will return true if this is due to an 
  IO condition rather than an actual error.  In the case of 
  BIO_s_mem(), a read when there is no data will return -1 and 
  a should retry when there is more 'read' data.
  The retry type is deduced from 2 macros
  BIO_should_read(bio) and BIO_should_write(bio).
  Now while it may appear obvious that a BIO_read() failure 
  should indicate that a retry should be performed when more 
  read data is available, this is often not true when using 
  things like an SSL BIO.  During the SSL protocol startup 
  multiple reads and writes are performed, triggered by any 
  SSL_read or SSL_write.
  So to write code that will transparently handle either a 
  socket or SSL BIO,
  	i=BIO_read(bio,..)
  	if (I == -1)
  		{
  		if (BIO_should_retry(bio))
  			{
  			if (BIO_should_read(bio))
  				{
  				/* call us again when BIO can be read */
  				}
  			if (BIO_should_write(bio))
  				{
  				/* call us again when BIO can be written */
  				}
  			}
  		}
  
  At this point in time only read and write conditions can be 
  used but in the future I can see the situation for other 
  conditions, specifically with SSL there could be a condition 
  of a X509 certificate lookup taking place and so the non-
  blocking BIO_read would require a retry when the certificate 
  lookup subsystem has finished it's lookup.  This is all 
  makes more sense and is easy to use in a event loop type 
  setup.
  When using the SSL BIO, either SSL_read() or SSL_write()s 
  can be called during the protocol startup and things will 
  still work correctly.
  The nice aspect of the use of the BIO_should_retry() macro 
  is that all the errno codes that indicate a non-fatal error 
  are encapsulated in one place.  The Windows specific error 
  codes and WSAGetLastError() calls are also hidden from the 
  application.
  
  Notes on each BIO method.
  Normally buffer.h is just required but depending on the 
  BIO_METHOD, ssl.h or evp.h will also be required.
  
  BIO_METHOD *BIO_s_mem(void);
  -	BIO_set_mem_buf(BIO *bio, BUF_MEM *bm, int close_flag) - 
  	set the underlying BUF_MEM structure for the BIO to use.
  -	BIO_get_mem_ptr(BIO *bio, char **pp) - if pp is not NULL, 
  	set it to point to the memory array and return the number 
  	of bytes available.
  A read/write BIO.  Any data written is appended to the 
  memory array and any read is read from the front.  This BIO 
  can be used for read/write at the same time. BIO_gets() is 
  supported in the fgets() sense.
  BIO_CTRL_INFO can be used to retrieve pointers to the memory 
  buffer and it's length.
  
  BIO_METHOD *BIO_s_file(void);
  -	BIO_set_fp(BIO *bio, FILE *fp, int close_flag) - set 'FILE *' to use.
  -	BIO_get_fp(BIO *bio, FILE **fp) - get the 'FILE *' in use.
  -	BIO_read_filename(BIO *bio, char *name) - read from file.
  -	BIO_write_filename(BIO *bio, char *name) - write to file.
  -	BIO_append_filename(BIO *bio, char *name) - append to file.
  This BIO sits over the normal system fread()/fgets() type 
  functions. Gets() is supported.  This BIO in theory could be 
  used for read and write but it is best to think of each BIO 
  of this type as either a read or a write BIO, not both.
  
  BIO_METHOD *BIO_s_socket(void);
  BIO_METHOD *BIO_s_fd(void);
  -	BIO_sock_should_retry(int i) - the underlying function 
  	used to determine if a call should be retried; the 
  	argument is the '0' or '-1' returned by the previous BIO 
  	operation.
  -	BIO_fd_should_retry(int i) - same as the 
  -	BIO_sock_should_retry() except that it is different internally.
  -	BIO_set_fd(BIO *bio, int fd, int close_flag) - set the 
  	file descriptor to use
  -	BIO_get_fd(BIO *bio, int *fd) - get the file descriptor.
  These two methods are very similar.  Gets() is not 
  supported, if you want this functionality, put a 
  BIO_f_buffer() onto it.  This BIO is bi-directional if the 
  underlying file descriptor is.  This is normally the case 
  for sockets but not the case for stdio descriptors.
  
  BIO_METHOD *BIO_s_null(void);
  Read and write as much data as you like, it all disappears 
  into this BIO.
  
  BIO_METHOD *BIO_f_buffer(void);
  -	BIO_get_buffer_num_lines(BIO *bio) - return the number of 
  	complete lines in the buffer.
  -	BIO_set_buffer_size(BIO *bio, long size) - set the size of 
  	the buffers.
  This type performs input and output buffering.  It performs 
  both at the same time.  The size of the buffer can be set 
  via the set buffer size option.  Data buffered for output is 
  only written when the buffer fills.
  
  BIO_METHOD *BIO_f_ssl(void);
  -	BIO_set_ssl(BIO *bio, SSL *ssl, int close_flag) - the SSL 
  	structure to use.
  -	BIO_get_ssl(BIO *bio, SSL **ssl) - get the SSL structure 
  	in use.
  The SSL bio is a little different from normal BIOs because 
  the underlying SSL structure is a little different.  A SSL 
  structure performs IO via a read and write BIO.  These can 
  be different and are normally set via the
  SSL_set_rbio()/SSL_set_wbio() calls.  The SSL_set_fd() calls 
  are just wrappers that create socket BIOs and then call 
  SSL_set_bio() where the read and write BIOs are the same.  
  The BIO_push() operation makes the SSLs IO BIOs the same, so 
  make sure the BIO pushed is capable of two directional 
  traffic.  If it is not, you will have to install the BIOs 
  via the more conventional SSL_set_bio() call.  BIO_pop() will retrieve
  the 'SSL read' BIO.
  
  BIO_METHOD *BIO_f_md(void);
  -	BIO_set_md(BIO *bio, EVP_MD *md) - set the message digest 
  	to use.
  -	BIO_get_md(BIO *bio, EVP_MD **mdp) - return the digest 
  	method in use in mdp, return 0 if not set yet.
  -	BIO_reset() reinitializes the digest (EVP_DigestInit()) 
  	and passes the reset to the underlying BIOs.
  All data read or written via BIO_read() or BIO_write() to 
  this BIO will be added to the calculated digest.  This 
  implies that this BIO is only one directional.  If read and 
  write operations are performed, two separate BIO_f_md() BIOs 
  are reuqired to generate digests on both the input and the 
  output.  BIO_gets(BIO *bio, char *md, int size) will place the 
  generated digest into 'md' and return the number of bytes.  
  The EVP_MAX_MD_SIZE should probably be used to size the 'md' 
  array.  Reading the digest will also reset it.
  
  BIO_METHOD *BIO_f_cipher(void);
  -	BIO_reset() reinitializes the cipher.
  -	BIO_flush() should be called when the last bytes have been 
  	output to flush the final block of block ciphers.
  -	BIO_get_cipher_status(BIO *b), when called after the last 
  	read from a cipher BIO, returns non-zero if the data 
  	decrypted correctly, otherwise, 0.
  -	BIO_set_cipher(BIO *b, EVP_CIPHER *c, unsigned char *key, 
  	unsigned char *iv, int encrypt)   This function is used to 
  	setup a cipher BIO.  The length of key and iv are 
  	specified by the choice of EVP_CIPHER.  Encrypt is 1 to 
  	encrypt and 0 to decrypt.
  
  BIO_METHOD *BIO_f_base64(void);
  -	BIO_flush() should be called when the last bytes have been output.
  This BIO base64 encodes when writing and base64 decodes when 
  reading.  It will scan the input until a suitable begin line 
  is found.  After reading data, BIO_reset() will reset the 
  BIO to start scanning again.  Do not mix reading and writing 
  on the same base64 BIO.  It is meant as a single stream BIO.
  
  Directions	type
  both		BIO_s_mem()
  one/both	BIO_s_file()
  both		BIO_s_fd()
  both		BIO_s_socket() 
  both		BIO_s_null()
  both		BIO_f_buffer()
  one		BIO_f_md()  
  one		BIO_f_cipher()  
  one		BIO_f_base64()  
  both		BIO_f_ssl()
  
  It is easy to mix one and two directional BIOs, all one has 
  to do is to keep two separate BIO pointers for reading and 
  writing and be careful about usage of underlying BIOs.  The 
  SSL bio by it's very nature has to be two directional but 
  the BIO_push() command will push the one BIO into the SSL 
  BIO for both reading and writing.
  
  The best example program to look at is apps/enc.c and/or perhaps apps/dgst.c.
  
  
  /* crypto/bio/bio.h */
  /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
   * All rights reserved.
   *
   * This package is an SSL implementation written
   * by Eric Young (eay@cryptsoft.com).
   * The implementation was written so as to conform with Netscapes SSL.
   * 
   * This library is free for commercial and non-commercial use as long as
   * the following conditions are aheared to.  The following conditions
   * apply to all code found in this distribution, be it the RC4, RSA,
   * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
   * included with this distribution is covered by the same copyright terms
   * except that the holder is Tim Hudson (tjh@cryptsoft.com).
   * 
   * Copyright remains Eric Young's, and as such any Copyright notices in
   * the code are not to be removed.
   * If this package is used in a product, Eric Young should be given attribution
   * as the author of the parts of the library used.
   * This can be in the form of a textual message at program startup or
   * in documentation (online or textual) provided with the package.
   * 
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   * 1. Redistributions of source code must retain the copyright
   *    notice, this list of conditions and the following disclaimer.
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in the
   *    documentation and/or other materials provided with the distribution.
   * 3. All advertising materials mentioning features or use of this software
   *    must display the following acknowledgement:
   *    "This product includes cryptographic software written by
   *     Eric Young (eay@cryptsoft.com)"
   *    The word 'cryptographic' can be left out if the rouines from the library
   *    being used are not cryptographic related :-).
   * 4. If you include any Windows specific code (or a derivative thereof) from 
   *    the apps directory (application code) you must include an acknowledgement:
   *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
   * 
   * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * 
   * The licence and distribution terms for any publically available version or
   * derivative of this code cannot be changed.  i.e. this code cannot simply be
   * copied and put under another distribution licence
   * [including the GNU Public Licence.]
   */
  
  #ifndef HEADER_BIO_H
  #define HEADER_BIO_H
  
  #ifdef  __cplusplus
  extern "C" {
  #endif
  
  #include <stdio.h>
  #include <stdlib.h>
  #include <openssl/crypto.h>
  
  /* These are the 'types' of BIOs */
  #define BIO_TYPE_NONE		0
  #define BIO_TYPE_MEM		(1|0x0400)
  #define BIO_TYPE_FILE		(2|0x0400)
  
  #define BIO_TYPE_FD		(4|0x0400|0x0100)
  #define BIO_TYPE_SOCKET		(5|0x0400|0x0100)
  #define BIO_TYPE_NULL		(6|0x0400)
  #define BIO_TYPE_SSL		(7|0x0200)
  #define BIO_TYPE_MD		(8|0x0200)		/* pasive filter */
  #define BIO_TYPE_BUFFER		(9|0x0200)		/* filter */
  #define BIO_TYPE_CIPHER		(10|0x0200)		/* filter */
  #define BIO_TYPE_BASE64		(11|0x0200)		/* filter */
  #define BIO_TYPE_CONNECT	(12|0x0400|0x0100)	/* socket - connect */
  #define BIO_TYPE_ACCEPT		(13|0x0400|0x0100)	/* socket for accept */
  #define BIO_TYPE_PROXY_CLIENT	(14|0x0200)		/* client proxy BIO */
  #define BIO_TYPE_PROXY_SERVER	(15|0x0200)		/* server proxy BIO */
  #define BIO_TYPE_NBIO_TEST	(16|0x0200)		/* server proxy BIO */
  #define BIO_TYPE_NULL_FILTER	(17|0x0200)
  #define BIO_TYPE_BER		(18|0x0200)		/* BER -> bin filter */
  #define BIO_TYPE_BIO		(19|0x0400)		/* (half a) BIO pair */
  
  #define BIO_TYPE_DESCRIPTOR	0x0100	/* socket, fd, connect or accept */
  #define BIO_TYPE_FILTER		0x0200
  #define BIO_TYPE_SOURCE_SINK	0x0400
  
  /* BIO_FILENAME_READ|BIO_CLOSE to open or close on free.
   * BIO_set_fp(in,stdin,BIO_NOCLOSE); */
  #define BIO_NOCLOSE		0x00
  #define BIO_CLOSE		0x01
  
  /* These are used in the following macros and are passed to
   * BIO_ctrl() */
  #define BIO_CTRL_RESET		1  /* opt - rewind/zero etc */
  #define BIO_CTRL_EOF		2  /* opt - are we at the eof */
  #define BIO_CTRL_INFO		3  /* opt - extra tit-bits */
  #define BIO_CTRL_SET		4  /* man - set the 'IO' type */
  #define BIO_CTRL_GET		5  /* man - get the 'IO' type */
  #define BIO_CTRL_PUSH		6  /* opt - internal, used to signify change */
  #define BIO_CTRL_POP		7  /* opt - internal, used to signify change */
  #define BIO_CTRL_GET_CLOSE	8  /* man - set the 'close' on free */
  #define BIO_CTRL_SET_CLOSE	9  /* man - set the 'close' on free */
  #define BIO_CTRL_PENDING	10  /* opt - is their more data buffered */
  #define BIO_CTRL_FLUSH		11  /* opt - 'flush' buffered output */
  #define BIO_CTRL_DUP		12  /* man - extra stuff for 'duped' BIO */
  #define BIO_CTRL_WPENDING	13  /* opt - number of bytes still to write */
  /* callback is int cb(BIO *bio,state,ret); */
  #define BIO_CTRL_SET_CALLBACK	14  /* opt - set callback function */
  #define BIO_CTRL_GET_CALLBACK	15  /* opt - set callback function */
  
  #define BIO_CTRL_SET_FILENAME	30	/* BIO_s_file special */
  
  /* modifiers */
  #define BIO_FP_READ		0x02
  #define BIO_FP_WRITE		0x04
  #define BIO_FP_APPEND		0x08
  #define BIO_FP_TEXT		0x10
  
  #define BIO_FLAGS_READ		0x01
  #define BIO_FLAGS_WRITE		0x02
  #define BIO_FLAGS_IO_SPECIAL	0x04
  #define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL)
  #define BIO_FLAGS_SHOULD_RETRY	0x08
  
  /* Used in BIO_gethostbyname() */
  #define BIO_GHBN_CTRL_HITS		1
  #define BIO_GHBN_CTRL_MISSES		2
  #define BIO_GHBN_CTRL_CACHE_SIZE	3
  #define BIO_GHBN_CTRL_GET_ENTRY		4
  #define BIO_GHBN_CTRL_FLUSH		5
  
  /* Mostly used in the SSL BIO */
  /* Not used anymore
   * #define BIO_FLAGS_PROTOCOL_DELAYED_READ 0x10
   * #define BIO_FLAGS_PROTOCOL_DELAYED_WRITE 0x20
   * #define BIO_FLAGS_PROTOCOL_STARTUP	0x40
   */
  
  #define BIO_FLAGS_BASE64_NO_NL	0x100
  
  /* This is used with memory BIOs: it means we shouldn't free up or change the
   * data in any way.
   */
  #define BIO_FLAGS_MEM_RDONLY	0x200
  
  #define BIO_set_flags(b,f) ((b)->flags|=(f))
  #define BIO_get_flags(b) ((b)->flags)
  #define BIO_set_retry_special(b) \
  		((b)->flags|=(BIO_FLAGS_IO_SPECIAL|BIO_FLAGS_SHOULD_RETRY))
  #define BIO_set_retry_read(b) \
  		((b)->flags|=(BIO_FLAGS_READ|BIO_FLAGS_SHOULD_RETRY))
  #define BIO_set_retry_write(b) \
  		((b)->flags|=(BIO_FLAGS_WRITE|BIO_FLAGS_SHOULD_RETRY))
  
  /* These are normally used internally in BIOs */
  #define BIO_clear_flags(b,f) ((b)->flags&= ~(f))
  #define BIO_clear_retry_flags(b) \
  		((b)->flags&= ~(BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY))
  #define BIO_get_retry_flags(b) \
  		((b)->flags&(BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY))
  
  /* These shouldbe used by the application to tell why we should retry */
  #define BIO_should_read(a)		((a)->flags & BIO_FLAGS_READ)
  #define BIO_should_write(a)		((a)->flags & BIO_FLAGS_WRITE)
  #define BIO_should_io_special(a)	((a)->flags & BIO_FLAGS_IO_SPECIAL)
  #define BIO_retry_type(a)		((a)->flags & BIO_FLAGS_RWS)
  #define BIO_should_retry(a)		((a)->flags & BIO_FLAGS_SHOULD_RETRY)
  
  /* The next two are used in conjunction with the
   * BIO_should_io_special() condition.  After this returns true,
   * BIO *BIO_get_retry_BIO(BIO *bio, int *reason); will walk the BIO 
   * stack and return the 'reason' for the special and the offending BIO.
   * Given a BIO, BIO_get_retry_reason(bio) will return the code. */
  /* Returned from the SSL bio when the certificate retrieval code had an error */
  #define BIO_RR_SSL_X509_LOOKUP		0x01
  /* Returned from the connect BIO when a connect would have blocked */
  #define BIO_RR_CONNECT			0x02
  
  /* These are passed by the BIO callback */
  #define BIO_CB_FREE	0x01
  #define BIO_CB_READ	0x02
  #define BIO_CB_WRITE	0x03
  #define BIO_CB_PUTS	0x04
  #define BIO_CB_GETS	0x05
  #define BIO_CB_CTRL	0x06
  
  /* The callback is called before and after the underling operation,
   * The BIO_CB_RETURN flag indicates if it is after the call */
  #define BIO_CB_RETURN	0x80
  #define BIO_CB_return(a) ((a)|BIO_CB_RETURN))
  #define BIO_cb_pre(a)	(!((a)&BIO_CB_RETURN))
  #define BIO_cb_post(a)	((a)&BIO_CB_RETURN)
  
  #define BIO_set_callback(b,cb)		((b)->callback=(cb))
  #define BIO_set_callback_arg(b,arg)	((b)->cb_arg=(char *)(arg))
  #define BIO_get_callback_arg(b)		((b)->cb_arg)
  #define BIO_get_callback(b)		((b)->callback)
  #define BIO_method_name(b)		((b)->method->name)
  #define BIO_method_type(b)		((b)->method->type)
  
  #ifndef WIN16
  typedef struct bio_method_st
  	{
  	int type;
  	const char *name;
  	int (*bwrite)();
  	int (*bread)();
  	int (*bputs)();
  	int (*bgets)();
  	long (*ctrl)();
  	int (*create)();
  	int (*destroy)();
  	} BIO_METHOD;
  #else
  typedef struct bio_method_st
  	{
  	int type;
  	const char *name;
  	int (_far *bwrite)();
  	int (_far *bread)();
  	int (_far *bputs)();
  	int (_far *bgets)();
  	long (_far *ctrl)();
  	int (_far *create)();
  	int (_far *destroy)();
  	} BIO_METHOD;
  #endif
  
  typedef struct bio_st
  	{
  	BIO_METHOD *method;
  	/* bio, mode, argp, argi, argl, ret */
  	long (*callback)(struct bio_st *,int,const char *,int, long,long);
  	char *cb_arg; /* first argument for the callback */
  
  	int init;
  	int shutdown;
  	int flags;	/* extra storage */
  	int retry_reason;
  	int num;
  	void *ptr;
  	struct bio_st *next_bio;	/* used by filter BIOs */
  	struct bio_st *prev_bio;	/* used by filter BIOs */
  	int references;
  	unsigned long num_read;
  	unsigned long num_write;
  
  	CRYPTO_EX_DATA ex_data;
  	} BIO;
  
  typedef struct bio_f_buffer_ctx_struct
  	{
  	/* BIO *bio; */ /* this is now in the BIO struct */
  	int ibuf_size;	/* how big is the input buffer */
  	int obuf_size;	/* how big is the output buffer */
  
  	char *ibuf;		/* the char array */
  	int ibuf_len;		/* how many bytes are in it */
  	int ibuf_off;		/* write/read offset */
  
  	char *obuf;		/* the char array */
  	int obuf_len;		/* how many bytes are in it */
  	int obuf_off;		/* write/read offset */
  	} BIO_F_BUFFER_CTX;
  
  /* connect BIO stuff */
  #define BIO_CONN_S_BEFORE		1
  #define BIO_CONN_S_GET_IP		2
  #define BIO_CONN_S_GET_PORT		3
  #define BIO_CONN_S_CREATE_SOCKET	4
  #define BIO_CONN_S_CONNECT		5
  #define BIO_CONN_S_OK			6
  #define BIO_CONN_S_BLOCKED_CONNECT	7
  #define BIO_CONN_S_NBIO			8
  /*#define BIO_CONN_get_param_hostname	BIO_ctrl */
  
  #define BIO_number_read(b)	((b)->num_read)
  #define BIO_number_written(b)	((b)->num_write)
  
  #define BIO_C_SET_CONNECT			100
  #define BIO_C_DO_STATE_MACHINE			101
  #define BIO_C_SET_NBIO				102
  #define BIO_C_SET_PROXY_PARAM			103
  #define BIO_C_SET_FD				104
  #define BIO_C_GET_FD				105
  #define BIO_C_SET_FILE_PTR			106
  #define BIO_C_GET_FILE_PTR			107
  #define BIO_C_SET_FILENAME			108
  #define BIO_C_SET_SSL				109
  #define BIO_C_GET_SSL				110
  #define BIO_C_SET_MD				111
  #define BIO_C_GET_MD				112
  #define BIO_C_GET_CIPHER_STATUS			113
  #define BIO_C_SET_BUF_MEM			114
  #define BIO_C_GET_BUF_MEM_PTR			115
  #define BIO_C_GET_BUFF_NUM_LINES		116
  #define BIO_C_SET_BUFF_SIZE			117
  #define BIO_C_SET_ACCEPT			118
  #define BIO_C_SSL_MODE				119
  #define BIO_C_GET_MD_CTX			120
  #define BIO_C_GET_PROXY_PARAM			121
  #define BIO_C_SET_BUFF_READ_DATA		122 /* data to read first */
  #define BIO_C_GET_CONNECT			123
  #define BIO_C_GET_ACCEPT			124
  #define BIO_C_SET_SSL_RENEGOTIATE_BYTES		125
  #define BIO_C_GET_SSL_NUM_RENEGOTIATES		126
  #define BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT	127
  #define BIO_C_FILE_SEEK				128
  #define BIO_C_GET_CIPHER_CTX			129
  #define BIO_C_SET_BUF_MEM_EOF_RETURN		130/*return end of input value*/
  #define BIO_C_SET_BIND_MODE			131
  #define BIO_C_GET_BIND_MODE			132
  #define BIO_C_FILE_TELL				133
  #define BIO_C_GET_SOCKS				134
  #define BIO_C_SET_SOCKS				135
  
  #define BIO_C_SET_WRITE_BUF_SIZE		136/* for BIO_s_bio */
  #define BIO_C_GET_WRITE_BUF_SIZE		137
  #define BIO_C_MAKE_BIO_PAIR			138
  #define BIO_C_DESTROY_BIO_PAIR			139
  #define BIO_C_GET_WRITE_GUARANTEE		140
  #define BIO_C_GET_READ_REQUEST			141
  #define BIO_C_SHUTDOWN_WR			142
  #define BIO_C_NREAD0				143
  #define BIO_C_NREAD				144
  #define BIO_C_NWRITE0				145
  #define BIO_C_NWRITE				146
  #define BIO_C_RESET_READ_REQUEST		147
  
  
  #define BIO_set_app_data(s,arg)		BIO_set_ex_data(s,0,(char *)arg)
  #define BIO_get_app_data(s)		BIO_get_ex_data(s,0)
  
  /* BIO_s_connect() and BIO_s_socks4a_connect() */
  #define BIO_set_conn_hostname(b,name) BIO_ctrl(b,BIO_C_SET_CONNECT,0,(char *)name)
  #define BIO_set_conn_port(b,port) BIO_ctrl(b,BIO_C_SET_CONNECT,1,(char *)port)
  #define BIO_set_conn_ip(b,ip)	  BIO_ctrl(b,BIO_C_SET_CONNECT,2,(char *)ip)
  #define BIO_set_conn_int_port(b,port) BIO_ctrl(b,BIO_C_SET_CONNECT,3,(char *)port)
  #define BIO_get_conn_hostname(b)  BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,0)
  #define BIO_get_conn_port(b)      BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,1)
  #define BIO_get_conn_ip(b,ip) BIO_ptr_ctrl(b,BIO_C_SET_CONNECT,2)
  #define BIO_get_conn_int_port(b,port) BIO_int_ctrl(b,BIO_C_SET_CONNECT,3,port)
  
  
  #define BIO_set_nbio(b,n)	BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL)
  
  /* BIO_s_accept_socket() */
  #define BIO_set_accept_port(b,name) BIO_ctrl(b,BIO_C_SET_ACCEPT,0,(char *)name)
  #define BIO_get_accept_port(b)	BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,0)
  /* #define BIO_set_nbio(b,n)	BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL) */
  #define BIO_set_nbio_accept(b,n) BIO_ctrl(b,BIO_C_SET_ACCEPT,1,(n)?"a":NULL)
  #define BIO_set_accept_bios(b,bio) BIO_ctrl(b,BIO_C_SET_ACCEPT,2,(char *)bio)
  
  #define BIO_BIND_NORMAL			0
  #define BIO_BIND_REUSEADDR_IF_UNUSED	1
  #define BIO_BIND_REUSEADDR		2
  #define BIO_set_bind_mode(b,mode) BIO_ctrl(b,BIO_C_SET_BIND_MODE,mode,NULL)
  #define BIO_get_bind_mode(b,mode) BIO_ctrl(b,BIO_C_GET_BIND_MODE,0,NULL)
  
  #define BIO_do_connect(b)	BIO_do_handshake(b)
  #define BIO_do_accept(b)	BIO_do_handshake(b)
  #define BIO_do_handshake(b)	BIO_ctrl(b,BIO_C_DO_STATE_MACHINE,0,NULL)
  
  /* BIO_s_proxy_client() */
  #define BIO_set_url(b,url)	BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,0,(char *)(url))
  #define BIO_set_proxies(b,p)	BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,1,(char *)(p))
  /* BIO_set_nbio(b,n) */
  #define BIO_set_filter_bio(b,s) BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,2,(char *)(s))
  /* BIO *BIO_get_filter_bio(BIO *bio); */
  #define BIO_set_proxy_cb(b,cb) BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,3,(char *)(cb))
  #define BIO_set_proxy_header(b,sk) BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,4,(char *)sk)
  #define BIO_set_no_connect_return(b,bool) BIO_int_ctrl(b,BIO_C_SET_PROXY_PARAM,5,bool)
  
  #define BIO_get_proxy_header(b,skp) BIO_ctrl(b,BIO_C_GET_PROXY_PARAM,0,(char *)skp)
  #define BIO_get_proxies(b,pxy_p) BIO_ctrl(b,BIO_C_GET_PROXY_PARAM,1,(char *)(pxy_p))
  #define BIO_get_url(b,url)	BIO_ctrl(b,BIO_C_GET_PROXY_PARAM,2,(char *)(url))
  #define BIO_get_no_connect_return(b)	BIO_ctrl(b,BIO_C_GET_PROXY_PARAM,5,NULL)
  
  #define BIO_set_fd(b,fd,c)	BIO_int_ctrl(b,BIO_C_SET_FD,c,fd)
  #define BIO_get_fd(b,c)		BIO_ctrl(b,BIO_C_GET_FD,0,(char *)c)
  
  #define BIO_set_fp(b,fp,c)	BIO_ctrl(b,BIO_C_SET_FILE_PTR,c,(char *)fp)
  #define BIO_get_fp(b,fpp)	BIO_ctrl(b,BIO_C_GET_FILE_PTR,0,(char *)fpp)
  
  #define BIO_seek(b,ofs)	(int)BIO_ctrl(b,BIO_C_FILE_SEEK,ofs,NULL)
  #define BIO_tell(b)	(int)BIO_ctrl(b,BIO_C_FILE_TELL,0,NULL)
  
  /* name is cast to lose const, but might be better to route through a function
     so we can do it safely */
  #ifdef CONST_STRICT
  /* If you are wondering why this isn't defined, its because CONST_STRICT is
   * purely a compile-time kludge to allow const to be checked.
   */
  int BIO_read_filename(BIO *b,const char *name);
  #else
  #define BIO_read_filename(b,name) BIO_ctrl(b,BIO_C_SET_FILENAME, \
  		BIO_CLOSE|BIO_FP_READ,(char *)name)
  #endif
  #define BIO_write_filename(b,name) BIO_ctrl(b,BIO_C_SET_FILENAME, \
  		BIO_CLOSE|BIO_FP_WRITE,name)
  #define BIO_append_filename(b,name) BIO_ctrl(b,BIO_C_SET_FILENAME, \
  		BIO_CLOSE|BIO_FP_APPEND,name)
  #define BIO_rw_filename(b,name) BIO_ctrl(b,BIO_C_SET_FILENAME, \
  		BIO_CLOSE|BIO_FP_READ|BIO_FP_WRITE,name)
  
  /* WARNING WARNING, this ups the reference count on the read bio of the
   * SSL structure.  This is because the ssl read BIO is now pointed to by
   * the next_bio field in the bio.  So when you free the BIO, make sure
   * you are doing a BIO_free_all() to catch the underlying BIO. */
  #define BIO_set_ssl(b,ssl,c)	BIO_ctrl(b,BIO_C_SET_SSL,c,(char *)ssl)
  #define BIO_get_ssl(b,sslp)	BIO_ctrl(b,BIO_C_GET_SSL,0,(char *)sslp)
  #define BIO_set_ssl_mode(b,client)	BIO_ctrl(b,BIO_C_SSL_MODE,client,NULL)
  #define BIO_set_ssl_renegotiate_bytes(b,num) \
  	BIO_ctrl(b,BIO_C_SET_SSL_RENEGOTIATE_BYTES,num,NULL);
  #define BIO_get_num_renegotiates(b) \
  	BIO_ctrl(b,BIO_C_SET_SSL_NUM_RENEGOTIATES,0,NULL);
  #define BIO_set_ssl_renegotiate_timeout(b,seconds) \
  	BIO_ctrl(b,BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT,seconds,NULL);
  
  /* defined in evp.h */
  /* #define BIO_set_md(b,md)	BIO_ctrl(b,BIO_C_SET_MD,1,(char *)md) */
  
  #define BIO_get_mem_data(b,pp)	BIO_ctrl(b,BIO_CTRL_INFO,0,(char *)pp)
  #define BIO_set_mem_buf(b,bm,c)	BIO_ctrl(b,BIO_C_SET_BUF_MEM,c,(char *)bm)
  #define BIO_get_mem_ptr(b,pp)	BIO_ctrl(b,BIO_C_GET_BUF_MEM_PTR,0,(char *)pp)
  #define BIO_set_mem_eof_return(b,v) \
  				BIO_ctrl(b,BIO_C_SET_BUF_MEM_EOF_RETURN,v,NULL)
  
  /* For the BIO_f_buffer() type */
  #define BIO_get_buffer_num_lines(b)	BIO_ctrl(b,BIO_C_GET_BUFF_NUM_LINES,0,NULL)
  #define BIO_set_buffer_size(b,size)	BIO_ctrl(b,BIO_C_SET_BUFF_SIZE,size,NULL)
  #define BIO_set_read_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,0)
  #define BIO_set_write_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,1)
  #define BIO_set_buffer_read_data(b,buf,num) BIO_ctrl(b,BIO_C_SET_BUFF_READ_DATA,num,buf)
  
  /* Don't use the next one unless you know what you are doing :-) */
  #define BIO_dup_state(b,ret)	BIO_ctrl(b,BIO_CTRL_DUP,0,(char *)(ret))
  
  #define BIO_reset(b)		(int)BIO_ctrl(b,BIO_CTRL_RESET,0,NULL)
  #define BIO_eof(b)		(int)BIO_ctrl(b,BIO_CTRL_EOF,0,NULL)
  #define BIO_set_close(b,c)	(int)BIO_ctrl(b,BIO_CTRL_SET_CLOSE,(c),NULL)
  #define BIO_get_close(b)	(int)BIO_ctrl(b,BIO_CTRL_GET_CLOSE,0,NULL)
  #define BIO_pending(b)		(int)BIO_ctrl(b,BIO_CTRL_PENDING,0,NULL)
  #define BIO_wpending(b)		(int)BIO_ctrl(b,BIO_CTRL_WPENDING,0,NULL)
  /* ...pending macros have inappropriate return type */
  size_t BIO_ctrl_pending(BIO *b);
  size_t BIO_ctrl_wpending(BIO *b);
  #define BIO_flush(b)		(int)BIO_ctrl(b,BIO_CTRL_FLUSH,0,NULL)
  #define BIO_get_info_callback(b,cbp) (int)BIO_ctrl(b,BIO_CTRL_GET_CALLBACK,0,(char *)cbp)
  #define BIO_set_info_callback(b,cb) (int)BIO_ctrl(b,BIO_CTRL_SET_CALLBACK,0,(char *)cb)
  
  /* For the BIO_f_buffer() type */
  #define BIO_buffer_get_num_lines(b) BIO_ctrl(b,BIO_CTRL_GET,0,NULL)
  
  /* For BIO_s_bio() */
  #define BIO_set_write_buf_size(b,size) (int)BIO_ctrl(b,BIO_C_SET_WRITE_BUF_SIZE,size,NULL)
  #define BIO_get_write_buf_size(b,size) (size_t)BIO_ctrl(b,BIO_C_GET_WRITE_BUF_SIZE,size,NULL)
  #define BIO_make_bio_pair(b1,b2)   (int)BIO_ctrl(b1,BIO_C_MAKE_BIO_PAIR,0,b2)
  #define BIO_destroy_bio_pair(b)    (int)BIO_ctrl(b,BIO_C_DESTROY_BIO_PAIR,0,NULL)
  /* macros with inappropriate type -- but ...pending macros use int too: */
  #define BIO_get_write_guarantee(b) (int)BIO_ctrl(b,BIO_C_GET_WRITE_GUARANTEE,0,NULL)
  #define BIO_get_read_request(b)    (int)BIO_ctrl(b,BIO_C_GET_READ_REQUEST,0,NULL)
  size_t BIO_ctrl_get_write_guarantee(BIO *b);
  size_t BIO_ctrl_get_read_request(BIO *b);
  int BIO_ctrl_reset_read_request(BIO *b);
  
  #ifdef NO_STDIO
  #define NO_FP_API
  #endif
  
  
  /* These two aren't currently implemented */
  /* int BIO_get_ex_num(BIO *bio); */
  /* void BIO_set_ex_free_func(BIO *bio,int idx,void (*cb)()); */
  int BIO_set_ex_data(BIO *bio,int idx,char *data);
  char *BIO_get_ex_data(BIO *bio,int idx);
  int BIO_get_ex_new_index(long argl, char *argp, int (*new_func)(),
  	int (*dup_func)(), void (*free_func)());
  
  #  if defined(WIN16) && defined(_WINDLL)
  BIO_METHOD *BIO_s_file_internal(void);
  BIO *BIO_new_file_internal(char *filename, char *mode);
  BIO *BIO_new_fp_internal(FILE *stream, int close_flag);
  #    define BIO_s_file	BIO_s_file_internal
  #    define BIO_new_file	BIO_new_file_internal
  #    define BIO_new_fp	BIO_new_fp_internal
  #  else /* FP_API */
  BIO_METHOD *BIO_s_file(void );
  BIO *BIO_new_file(const char *filename, const char *mode);
  BIO *BIO_new_fp(FILE *stream, int close_flag);
  #    define BIO_s_file_internal		BIO_s_file
  #    define BIO_new_file_internal	BIO_new_file
  #    define BIO_new_fp_internal		BIO_s_file
  #  endif /* FP_API */
  BIO *	BIO_new(BIO_METHOD *type);
  int	BIO_set(BIO *a,BIO_METHOD *type);
  int	BIO_free(BIO *a);
  int	BIO_read(BIO *b, void *data, int len);
  int	BIO_gets(BIO *bp,char *buf, int size);
  int	BIO_write(BIO *b, const char *data, int len);
  int	BIO_puts(BIO *bp,const char *buf);
  long	BIO_ctrl(BIO *bp,int cmd,long larg,void *parg);
  char *	BIO_ptr_ctrl(BIO *bp,int cmd,long larg);
  long	BIO_int_ctrl(BIO *bp,int cmd,long larg,int iarg);
  BIO *	BIO_push(BIO *b,BIO *append);
  BIO *	BIO_pop(BIO *b);
  void	BIO_free_all(BIO *a);
  BIO *	BIO_find_type(BIO *b,int bio_type);
  BIO *	BIO_get_retry_BIO(BIO *bio, int *reason);
  int	BIO_get_retry_reason(BIO *bio);
  BIO *	BIO_dup_chain(BIO *in);
  
  int BIO_nread0(BIO *bio, char **buf);
  int BIO_nread(BIO *bio, char **buf, int num);
  int BIO_nwrite0(BIO *bio, char **buf);
  int BIO_nwrite(BIO *bio, char **buf, int num);
  
  #ifndef WIN16
  long BIO_debug_callback(BIO *bio,int cmd,const char *argp,int argi,
  	long argl,long ret);
  #else
  long _far _loadds BIO_debug_callback(BIO *bio,int cmd,const char *argp,int argi,
  	long argl,long ret);
  #endif
  
  BIO_METHOD *BIO_s_mem(void);
  BIO *BIO_new_mem_buf(void *buf, int len);
  BIO_METHOD *BIO_s_socket(void);
  BIO_METHOD *BIO_s_connect(void);
  BIO_METHOD *BIO_s_accept(void);
  BIO_METHOD *BIO_s_fd(void);
  BIO_METHOD *BIO_s_log(void);
  BIO_METHOD *BIO_s_bio(void);
  BIO_METHOD *BIO_s_null(void);
  BIO_METHOD *BIO_f_null(void);
  BIO_METHOD *BIO_f_buffer(void);
  BIO_METHOD *BIO_f_nbio_test(void);
  /* BIO_METHOD *BIO_f_ber(void); */
  
  int BIO_sock_should_retry(int i);
  int BIO_sock_non_fatal_error(int error);
  int BIO_fd_should_retry(int i);
  int BIO_fd_non_fatal_error(int error);
  int BIO_dump(BIO *b,const char *bytes,int len);
  
  struct hostent *BIO_gethostbyname(const char *name);
  /* We might want a thread-safe interface too:
   * struct hostent *BIO_gethostbyname_r(const char *name,
   *     struct hostent *result, void *buffer, size_t buflen);
   * or something similar (caller allocates a struct hostent,
   * pointed to by "result", and additional buffer space for the various
   * substructures; if the buffer does not suffice, NULL is returned
   * and an appropriate error code is set).
   */
  int BIO_sock_error(int sock);
  int BIO_socket_ioctl(int fd, long type, unsigned long *arg);
  int BIO_socket_nbio(int fd,int mode);
  int BIO_get_port(const char *str, unsigned short *port_ptr);
  int BIO_get_host_ip(const char *str, unsigned char *ip);
  int BIO_get_accept_socket(char *host_port,int mode);
  int BIO_accept(int sock,char **ip_port);
  int BIO_sock_init(void );
  void BIO_sock_cleanup(void);
  int BIO_set_tcp_ndelay(int sock,int turn_on);
  
  void ERR_load_BIO_strings(void );
  
  BIO *BIO_new_socket(int sock, int close_flag);
  BIO *BIO_new_fd(int fd, int close_flag);
  BIO *BIO_new_connect(char *host_port);
  BIO *BIO_new_accept(char *host_port);
  
  int BIO_new_bio_pair(BIO **bio1, size_t writebuf1,
  	BIO **bio2, size_t writebuf2);
  /* If successful, returns 1 and in *bio1, *bio2 two BIO pair endpoints.
   * Otherwise returns 0 and sets *bio1 and *bio2 to NULL.
   * Size 0 uses default value.
   */
  
  void BIO_copy_next_retry(BIO *b);
  
  long BIO_ghbn_ctrl(int cmd,int iarg,char *parg);
  
  int BIO_printf(BIO *bio, ...);
  
  /* BEGIN ERROR CODES */
  /* The following lines are auto generated by the script mkerr.pl. Any changes
   * made after this point may be overwritten when the script is next run.
   */
  
  /* Error codes for the BIO functions. */
  
  /* Function codes. */
  #define BIO_F_ACPT_STATE				 100
  #define BIO_F_BIO_ACCEPT				 101
  #define BIO_F_BIO_BER_GET_HEADER			 102
  #define BIO_F_BIO_CTRL					 103
  #define BIO_F_BIO_GETHOSTBYNAME				 120
  #define BIO_F_BIO_GETS					 104
  #define BIO_F_BIO_GET_ACCEPT_SOCKET			 105
  #define BIO_F_BIO_GET_HOST_IP				 106
  #define BIO_F_BIO_GET_PORT				 107
  #define BIO_F_BIO_MAKE_PAIR				 121
  #define BIO_F_BIO_NEW					 108
  #define BIO_F_BIO_NEW_FILE				 109
  #define BIO_F_BIO_NEW_MEM_BUF				 126
  #define BIO_F_BIO_NREAD					 123
  #define BIO_F_BIO_NREAD0				 124
  #define BIO_F_BIO_NWRITE				 125
  #define BIO_F_BIO_NWRITE0				 122
  #define BIO_F_BIO_PUTS					 110
  #define BIO_F_BIO_READ					 111
  #define BIO_F_BIO_SOCK_INIT				 112
  #define BIO_F_BIO_WRITE					 113
  #define BIO_F_BUFFER_CTRL				 114
  #define BIO_F_CONN_STATE				 115
  #define BIO_F_FILE_CTRL					 116
  #define BIO_F_MEM_WRITE					 117
  #define BIO_F_SSL_NEW					 118
  #define BIO_F_WSASTARTUP				 119
  
  /* Reason codes. */
  #define BIO_R_ACCEPT_ERROR				 100
  #define BIO_R_BAD_FOPEN_MODE				 101
  #define BIO_R_BAD_HOSTNAME_LOOKUP			 102
  #define BIO_R_BROKEN_PIPE				 124
  #define BIO_R_CONNECT_ERROR				 103
  #define BIO_R_ERROR_SETTING_NBIO			 104
  #define BIO_R_ERROR_SETTING_NBIO_ON_ACCEPTED_SOCKET	 105
  #define BIO_R_ERROR_SETTING_NBIO_ON_ACCEPT_SOCKET	 106
  #define BIO_R_GETHOSTBYNAME_ADDR_IS_NOT_AF_INET		 107
  #define BIO_R_INVALID_ARGUMENT				 125
  #define BIO_R_INVALID_IP_ADDRESS			 108
  #define BIO_R_IN_USE					 123
  #define BIO_R_KEEPALIVE					 109
  #define BIO_R_NBIO_CONNECT_ERROR			 110
  #define BIO_R_NO_ACCEPT_PORT_SPECIFIED			 111
  #define BIO_R_NO_HOSTNAME_SPECIFIED			 112
  #define BIO_R_NO_PORT_DEFINED				 113
  #define BIO_R_NO_PORT_SPECIFIED				 114
  #define BIO_R_NULL_PARAMETER				 115
  #define BIO_R_TAG_MISMATCH				 116
  #define BIO_R_UNABLE_TO_BIND_SOCKET			 117
  #define BIO_R_UNABLE_TO_CREATE_SOCKET			 118
  #define BIO_R_UNABLE_TO_LISTEN_SOCKET			 119
  #define BIO_R_UNINITIALIZED				 120
  #define BIO_R_UNSUPPORTED_METHOD			 121
  #define BIO_R_WRITE_TO_READ_ONLY_BIO			 126
  #define BIO_R_WSASTARTUP				 122
  
  #ifdef  __cplusplus
  }
  #endif
  #endif
  
  Index: ossp-pkg/sio/BRAINSTORM/panos-sio.txt
  ============================================================
  $ cvs update -p -r1.1 panos-sio.txt
  
  
  
  SIO(3X)                                                   SIO(3X)
  
  
  NNAAMMEE
         Sread,  Sgetc,  Srdline,  Sfetch,  Swrite,  Sputc, Sprint,
         Sprintv,  Sdone,  Sundo,  Stie,  Suntie,  Sflush,  Sclose,
         Sbuftype,   Smorefds,   Sgetchar,   Sputchar,  SIOLINELEN,
         SIOMAXLINELEN - fast stream I/O
  
  SSYYNNOOPPSSIISS
         ##iinncclluuddee ""ssiioo..hh""
  
         iinntt SSrreeaadd(( ffdd,, bbuuff,, nnbbyytteess ))
         iinntt ffdd ;;
         cchhaarr **bbuuff ;;
         iinntt nnbbyytteess ;;
  
         iinntt SSggeettcc(( ffdd ))
         iinntt ffdd ;;
  
         cchhaarr **SSrrddlliinnee(( ffdd ))
         iinntt ffdd ;;
  
         cchhaarr **SSffeettcchh(( ffdd,, lleennggtthh ))
         iinntt ffdd ;;
         lloonngg **lleennggtthh ;;
  
         iinntt SSwwrriittee(( ffdd,, bbuuff,, nnbbyytteess ))
         iinntt ffdd ;;
         cchhaarr **bbuuff ;;
         iinntt nnbbyytteess ;;
  
         iinntt SSppuuttcc(( ffdd,, cc ))
         iinntt ffdd ;;
         cchhaarr cc ;;
  
         iinntt SSpprriinntt(( ffdd,, ffoorrmmaatt [[ ,, ...... ]] ))
         iinntt ffdd ;;
         cchhaarr **ffoorrmmaatt ;;
  
         iinntt SSpprriinnttvv(( ffdd,, ffoorrmmaatt,, aapp ))
         iinntt ffdd ;;
         cchhaarr **ffoorrmmaatt ;;
         vvaa__lliisstt aapp ;;
  
         iinntt SSddoonnee(( ffdd ))
         iinntt ffdd ;;
  
         iinntt SSuunnddoo(( ffdd,, ttyyppee ))
         iinntt ffdd ;;
         iinntt ttyyppee ;;
  
         iinntt SSttiiee(( iiffdd,, ooffdd ))
         iinntt iiffdd,, ooffdd ;;
  
         iinntt SSuunnttiiee(( ffdd ))
         iinntt ffdd ;;
  
  
  
                             29 May 1992                          1
  
  
  
  
  
  SIO(3X)                                                   SIO(3X)
  
  
         iinntt SSbbuuffttyyppee(( ffdd,, ttyyppee ))
         iinntt ffdd,, ttyyppee ;;
  
         iinntt SSmmoorreeffddss(())
  
         iinntt SSfflluusshh(( ffdd ))
         iinntt ffdd ;;
  
         iinntt SScclloossee(( ffdd ))
         iinntt ffdd ;;
  
         iinntt SSggeettcchhaarr(( ffdd ))
         iinntt ffdd ;;
  
         iinntt SSppuuttcchhaarr(( ffdd,, cc ))
         iinntt ffdd;;
         cchhaarr cc ;;
  
         iinntt SSIIOOLLIINNEELLEENN(( ffdd ))
         iinntt ffdd ;;
  
         iinntt SSIIOOMMAAXXLLIINNEELLEENN(( ffdd ))
         iinntt ffdd ;;
  
  DDEESSCCRRIIPPTTIIOONN
         The _S_I_O library provides support for _s_t_r_e_a_m  I/O  on  file
         descriptors.   The  first  argument  of  every function or
         macro is a file descriptor. The  file  descriptor  may  be
         used  either  for  input  or  for  output,  but  not both.
         Attempting to use a descriptor for both input  and  output
         will  cause the call for the latter use to fail.  When you
         are done with using a file descriptor, you  should  inform
         _S_I_O  by  invoking  SSddoonnee(()) (unless the program is about to
         call _e_x_i_t_(_3_)).  You can also use SSddoonnee(()) if  you  want  to
         perform  a  different  type  of operation on the same file
         descriptor (e.g. first you were reading data from the file
         descriptor and then you want to write some data).  Another
         possibility is to do stream I/O at different file  offsets
         by  using  SSddoonnee(())  before using llsseeeekk((22)) to move to a new
         file offset.
  
         I/O operations on different file descriptors do not inter-
         fere  (unless the file descriptors refer to the same file,
         in which case the results are undefined).
  
         For disk files, I/O always starts at the current file off-
         set.   If  that  offset is not a multiple of the preferred
         block size for file system I/O, performance  will  not  be
         optimal  (the  preferred block size is determined from the
         _s_t___b_l_k_s_i_z_e field in _s_t_r_u_c_t  _s_t_a_t).   For  optimal  perfor-
         mance,  it  is  recommended  that  no I/O operations (like
         _r_e_a_d_(_2_) or _w_r_i_t_e_(_2_)) are applied to the file descriptor if
         it is to be used by _S_I_O.
  
  
  
  
                             29 May 1992                          2
  
  
  
  
  
  SIO(3X)                                                   SIO(3X)
  
  
         Read  I/O is either buffered, or is done using memory map-
         ping whenever that is possible and appropriate.
  
         The library functions that do stream I/O  resemble  system
         calls (for example SSrreeaadd(()) resembles _r_e_a_d_(_2_)) so that mod-
         ifying a program that uses the system calls to use the _S_I_O
         functions is easy (e.g. just replace _r_e_a_d_(_2_) with SSrreeaadd(());
         the function signatures as well as the return  values  are
         exactly  the  same;  also  make  sure  to replace calls to
         _c_l_o_s_e_(_2_) with SScclloossee(())).
  
         _S_I_O uses the underlying system calls _r_e_a_d_(_2_) and  _w_r_i_t_e_(_2_)
         to  do  I/O  (except  when reading files using memory map-
         ping).  These calls may  be  interrupted  (i.e.  they  may
         return -1 with _e_r_r_n_o set to EINTR). Such interruptions are
         ignored by _S_I_O which simply reissues the system call (this
         means that a _S_I_O call will never fail because the underly-
         ing I/O system call was interrupted).
  
         SSrreeaadd(()) reads _n_b_y_t_e_s bytes from the stream associated with
         file descriptor _f_d into the buffer pointed to by _b_u_f.
  
         SSggeettcc(())  reads a character from the stream associated with
         file descriptor _f_d.  It returns SSIIOO__EEOOFF if the end of file
         has been reached.
  
         SSggeettcchhaarr(()) (a macro) performs exactly the same function as
         SSggeettcc(()) but it is much faster.
  
         SSrrddlliinnee(()) reads a line from  the  stream  associated  with
         file descriptor _f_d.  The newline at the end of the line is
         replaced by a NUL byte. Lines longer than the maximum line
         length supported by _S_I_O will have characters deleted.
  
         SSIIOOLLIINNEELLEENN(())  (a  macro)  returns  the  length of the line
         returned by the last call to SSrrddlliinnee(()) (the value returned
         by  SSIIOOLLIINNEELLEENN(()) is valid only after SSrrddlliinnee(()) and as long
         as no other _S_I_O calls are performed on that file  descrip-
         tor).
  
         SSIIOOMMAAXXLLIINNEELLEENN(())  (a macro) returns the maximul line length
         supported by _S_I_O for the file descriptor. As a side-effect
         it initializes _f_d for input.
  
         SSffeettcchh(())  returns a pointer to data coming from the stream
         associated with file descriptor _f_d.  The  amount  of  data
         available  is indicated by the _l_e_n_g_t_h argument. One possi-
         ble use for this function is to copy files.
  
         SSwwrriittee(()) writes _n_b_y_t_e_s bytes to the stream associated with
         file descriptor _f_d from the buffer pointed to by _b_u_f.
  
         SSppuuttcc(()) writes a single character to the stream associated
         with file descriptor _f_d.
  
  
  
                             29 May 1992                          3
  
  
  
  
  
  SIO(3X)                                                   SIO(3X)
  
  
         SSppuuttcchhaarr(()) (a macro) performs exactly the same function as
         SSppuuttcc(()) but it is much faster.
  
         SSpprriinntt(())  imitates the behavior of printf(3) as defined in
         the ANSI C Standard. There are some limitations. Check the
         SSpprriinntt(()) man page for more information.
  
         SSpprriinnttvv(())  is  the  same as SSpprriinntt(()) except that it uses a
         _v_a_r_a_r_g_s argument list.
  
         SSuunnddoo(()) returns the characters returned by the  last  call
         to  SSrrddlliinnee(()), SSggeettcc(()) or SSggeettcchhaarr(()) to the stream so that
         they can be reread. The _t_y_p_e argument to  SSuunnddoo(())  can  be
         SSIIOO__UUNNDDOO__LLIINNEE  or  SSIIOO__UUNNDDOO__CCHHAARR  depending on whether the
         call whose effect needs to  be  undone  was  SSrrddlliinnee(())  or
         SSggeettcc(())/SSggeettcchhaarr(())  respectively.   There  is  no check on
         whether the last function invoked on _f_d  was  one  of  the
         above  and the results are undefined if there is no corre-
         spondence between the _t_y_p_e and the last operation  on  _f_d.
         (i.e. the result is undefined if you try SSIIOO__UUNNDDOO__CCHHAARR and
         the last operation was not SSggeettcchhaarr(()) or SSggeettcc(())).
  
         SSttiiee(()) ties the file descriptor _i_f_d to the file descriptor
         _o_f_d.   This  means that whenever a _r_e_a_d_(_2_) is done on _i_f_d,
         it is preceded by a _w_r_i_t_e_(_2_) on _o_f_d.  For  filters  it  is
         useful  to do _S_t_i_e_( _0_, _1 _) to maximize concurrency.  It is
         also useful to do the same thing when you issue prompts to
         the user and you want the user reply to appear on the same
         line with the prompt.  _i_f_d, _o_f_d  will be  initialized  for
         input, output respectively (if any of them is initialized,
         it must be for the appropriate stream type (input or  out-
         put)).   If  _i_f_d  was tied to another file descriptor, the
         old tie is broken.
  
         SSuunnttiiee(()) undoes the effect of  SSttiiee(())  for  the  specified
         input file descriptor.
  
         SSbbuuffttyyppee(())  determines  the  buffering type for the output
         stream associated with file  descriptor  _f_d.   By  default
         output  directed  to  terminals  is  line buffered, output
         directed  to  file  descriptor  2  (standard   error)   is
         unbuffered  and everything else is fully buffered.  Possi-
         ble values for the _t_y_p_e argument are
  
                SSIIOO__FFUULLLLBBUUFF    for full buffering
  
                SSIIOO__LLIINNEEBBUUFF    for line buffering
  
                SSIIOO__NNOOBBUUFF      for no buffering
  
         SSmmoorreeffddss(()) should be used to inform SSIIOO that the number of
         available file descriptors has been increased. SSIIOO uses an
         array of internal stream descriptors which are indexed  by
         the  file  descriptor  number. Some operating systems (ex.
  
  
  
                             29 May 1992                          4
  
  
  
  
  
  SIO(3X)                                                   SIO(3X)
  
  
         SunOS 4.1[.x]) allow the number of available file descrip-
         tors  to vary. If that number is increased beyond its ini-
         tial value SSIIOO needs to know in  order  to  allocate  more
         stream descriptors.
  
         SSddoonnee(())  flushes  any  buffered output for _f_d and releases
         the _S_I_O resources used. SSddoonnee(()) is useful in case the pro-
         gram  needs  to  reprocess  the  data of a file descriptor
         (assuming the file descriptor corresponds to a file).  The
         program can call SSddoonnee(()), _l_s_e_e_k_(_2_) to the beginning of the
         file and then proceed to reread the file.
  
         SSfflluusshh(()) causes any buffered stream output to  be  written
         to  the  file  descriptor.  If its argument is the special
         value  SSIIOO__FFLLUUSSHH__AALLLL  then  all  output  streams  will  be
         flushed.
  
         SScclloossee(())  closes  a  file  descriptor used for stream I/O,
         flushes any buffered output and releases the _S_I_O resources
         used.
  
  EEXXAAMMPPLLEESS
         The  following code implements a (poor) substitute for the
         tee command (it copies standard input to a file as well as
         to standard output).
                ##iinncclluuddee ""ssiioo..hh""
                mmaaiinn(( aarrggcc,, aarrggvv ))
                     iinntt aarrggcc ;;
                     cchhaarr **aarrggvv[[]] ;;
                {{
                     cchhaarr **ffiillee == ((aarrggcc >> 11)) ?? aarrggvv[[ 11 ]] :: ""tteeee..ffiillee"" ;;
                     iinntt ffdd == ccrreeaatt(( ffiillee,, 00664444 )) ;;
                     lloonngg lleennggtthh ;;
                     cchhaarr **ss ;;
                     wwhhiillee (( ss == SSffeettcchh(( 00,, &&lleennggtthh )) ))
                     {{
                          SSwwrriittee(( 11,, ss,, lleennggtthh )) ;;
                          SSwwrriittee(( ffdd,, ss,, lleennggtthh )) ;;
                     }}
                     eexxiitt(( 00 )) ;;
                }}
  
  RREETTUURRNN VVAALLUUEESS
         SSrreeaadd(())  returns  the  number  of bytes read on success (0
         means end-of-file) or SSIIOO__EERRRR on failure (_e_r_r_n_o is set  to
         indicate the error).
  
         SSggeettcc(())  returns  the  character  read on success, SIO_EOF
         when the end-of-file is reached,  or  SSIIOO__EERRRR  on  failure
         (_e_r_r_n_o is set to indicate the error).
  
         SSrrddlliinnee(())  returns  a pointer to the next line on success.
         On failure or when the end-of-file is reached  it  returns
         NULL.   If  the  end-of-file is reached _e_r_r_n_o is set to 0,
  
  
  
                             29 May 1992                          5
  
  
  
  
  
  SIO(3X)                                                   SIO(3X)
  
  
         otherwise it indicates the error.
  
         SSffeettcchh(()) returns a pointer to file data on success.   (the
         _l_e_n_g_t_h  argument  indicates how many bytes are available).
         On failure or when the end-of-file is reached  it  returns
         NULL.   If  the  end-of-file is reached _e_r_r_n_o is set to 0,
         otherwise it indicates the error.
  
         SSwwrriittee(()) returns the number of bytes written on success or
         SSIIOO__EERRRR on failure (_e_r_r_n_o is set to indicate the error).
  
         SSppuuttcc(())  returns the character it was given as an argument
         on success  SSpprriinntt(())  returns  the  number  of  characters
         printed  on success or SSIIOO__EERRRR on failure (_e_r_r_n_o is set to
         indicate the error).
  
         SSddoonnee(()) returns 00 on success or SSIIOO__EERRRR on failure  (_e_r_r_n_o
         is set to indicate the error).
  
         SSuunnddoo(())  returns 00 on success or SSIIOO__EERRRR on failure (_e_r_r_n_o
         is set to indicate the error).
  
         SSttiiee(()) returns 00 on success or SSIIOO__EERRRR on  failure  (_e_r_r_n_o
         is set to indicate the error).
  
         SSuunnttiiee(()) returns 00 on success or SSIIOO__EERRRR on failure (_e_r_r_n_o
         is set to EEBBAADDFF if there was no tied file descriptor).
  
         SSbbuuffttyyppee(()) returns 00 on  success  or  SSIIOO__EERRRR  on  failure
         (_e_r_r_n_o  is set to EEBBAADDFF if this is not an output stream or
         to EEIINNVVAALL if an unknown _t_y_p_e is specified).
  
         SSmmoorreeffddss(()) returns 00 on  success  or  SSIIOO__EERRRR  on  failure
         (because of lack of memory).
  
         SSfflluusshh(()) returns 00 on success or SSIIOO__EERRRR on failure (_e_r_r_n_o
         is set to indicate the error).
  
         SScclloossee(()) returns 00 on success or SSIIOO__EERRRR on failure (_e_r_r_n_o
         is set to indicate the error).
  
         SSggeettcchhaarr(())  returns the character read on success, SIO_EOF
         when the end-of-file is reached,  or  SSIIOO__EERRRR  on  failure
         (_e_r_r_n_o is set to indicate the error).
  
         SSppuuttcchhaarr(())  returns the character it was given as an argu-
         ment on success or SSIIOO__EERRRR on failure  (_e_r_r_n_o  is  set  to
         indicate the error).
  
         SSIIOOLLIINNEELLEENN(())  returns  the length of the last line read by
         SSrrddlliinnee(()).
  
         SSIIOOMMAAXXLLIINNEELLEENN(()) returns the length  of  the  longest  line
         supported  by  _S_I_O on success or SSIIOO__EERRRR on failure (_e_r_r_n_o
  
  
  
                             29 May 1992                          6
  
  
  
  
  
  SIO(3X)                                                   SIO(3X)
  
  
         is set to indicate the error).
  
         Attempting a read operation on  a  descriptor  opened  for
         writing  or  vice  versa  will cause the operation to fail
         with _e_r_r_n_o set to EEBBAADDFF.
  
         The first _S_I_O operation on a descriptor must be a read  or
         write  operation.  It  cannot be a control operation (like
         SSfflluusshh(())). Such an operation will fail with _e_r_r_n_o  set  to
         EEBBAADDFF.
  
  
         NNOOTTEE 11::        SSttiiee(()) is an input/output operation for the
                        respective file descriptors, not a  control
                        operation. SSuunnttiiee(()) is a control operation.
  
         NNOOTTEE 22::        SSIIOO__EERRRR is defined to be --11.
  
  SSEEEE AALLSSOO
         Sprint(3)
  
  BBUUGGSS
         If the operating system does not provide for invocation of
         a  finalization  function upon exit, the program will have
         to explicitly flush all  output  streams.   The  following
         operating  systems  provide  such  a  facility: SunOS 4.x,
         Ultrix 4.x, SunOS 5.x
  
         Socket file descriptors can be used for input as  well  as
         output but SSIIOO does not support this.
  
         The current implementation will not try to use memory map-
         ping to read a file if the file offset is not 0  (it  will
         use buffered I/O instead).
  
         Pointers  returned  by SSffeettcchh(()) point to read-only memory.
         Attempting to modify this memory will result in a  segmen-
         tation violation.
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
                             29 May 1992                          7
  
  
  Index: ossp-pkg/sio/BRAINSTORM/postfix-vstream.txt
  ============================================================
  $ cvs update -p -r1.1 postfix-vstream.txt
  
  
  
  VSTREAM(3)                                             VSTREAM(3)
  
  
  NNAAMMEE
         vstream - light-weight buffered I/O package
  
  SSYYNNOOPPSSIISS
         #include <vstream.h>
  
         VSTREAM *vstream_fopen(path, flags, mode)
         char    *path;
         int     flags;
         int     mode;
  
         VSTREAM *vstream_fdopen(fd, flags)
         int     fd;
         int     flags;
  
         int     vstream_fclose(stream)
         VSTREAM *stream;
  
         VSTREAM *vstream_printf(format, ...)
         char    *format;
  
         VSTREAM *vstream_fprintf(stream, format, ...)
         VSTREAM *stream;
         char    *format;
  
         int     VSTREAM_GETC(stream)
         VSTREAM *stream;
  
         int     VSTREAM_PUTC(ch, stream)
         int     ch;
  
         int     VSTREAM_GETCHAR(void)
  
         int     VSTREAM_PUTCHAR(ch)
         int     ch;
  
         int     vstream_ungetc(stream, ch)
         VSTREAM *stream;
         int     ch;
  
         int     vstream_fputs(str, stream)
         char    *str;
         VSTREAM *stream;
  
         long    vstream_ftell(stream)
         VSTREAM *stream;
  
         long    vstream_fseek(stream, offset, whence)
         VSTREAM *stream;
         long    offset;
         int     whence;
  
         int     vstream_fflush(stream)
         VSTREAM *stream;
  
  
  
                                                                  1
  
  
  
  
  
  VSTREAM(3)                                             VSTREAM(3)
  
  
         int     vstream_fread(stream, buf, len)
         VSTREAM *stream;
         char    *buf;
         int     len;
  
         int     vstream_fwrite(stream, buf, len)
         VSTREAM *stream;
         char    *buf;
         int     len;
  
         void    vstream_control(stream, name, ...)
         VSTREAM *stream;
         int     name;
  
         int     vstream_fileno(stream)
         VSTREAM *stream;
  
         int     vstream_ferror(stream)
         VSTREAM *stream;
  
         int     vstream_feof(stream)
         VSTREAM *stream;
  
         int     vstream_clearerr(stream)
         VSTREAM *stream;
  
         char    *VSTREAM_PATH(stream)
         VSTREAM *stream;
  
         char    *vstream_vfprintf(vp, format, ap)
         char    *format;
         va_list *ap;
  
         int     vstream_peek(stream)
         VSTREAM *stream;
  
  DDEESSCCRRIIPPTTIIOONN
         The  _v_s_t_r_e_a_m  module  implements light-weight buffered I/O
         similar to the standard I/O routines.
  
         The interface is implemented in terms of VSTREAM structure
         pointers,  also  called  streams.  For  convenience, three
         streams  are  predefined:  VSTREAM_IN,  VSTREAM_OUT,   and
         VSTREAM_ERR.  These  streams are connected to the standard
         input, output and error file descriptors, respectively.
  
         Although the interface is patterned after the standard I/O
         library, there are some major differences:
  
         +o      File  descriptors  are  not  limited  to  the range
                0..255. This was reason #1 to write these  routines
                in the first place.
  
         +o      The  application  can  switch  between  reading and
  
  
  
                                                                  2
  
  
  
  
  
  VSTREAM(3)                                             VSTREAM(3)
  
  
                writing on the same stream without having  to  per-
                form  a  flush  or  seek  operation, and can change
                write position without having to flush.   This  was
                reason  #2.  Upon  position  or  direction  change,
                unread input is discarded, and unwritten output  is
                flushed   automatically.  Exception:  with  double-
                buffered streams, unread  input  is  not  discarded
                upon  change  of I/O direction, and output flushing
                is delayed until the read buffer must be  refilled.
  
         +o      A  bidirectional stream can read and write with the
                same buffer and file descriptor,  or  it  can  have
                separate  read/write  buffers  and/or file descrip-
                tors.
  
         +o      No automatic flushing of VSTREAM_OUT  upon  program
                exit,  or of VSTREAM_ERR at any time. No unbuffered
                or line buffered modes.  This functionality may  be
                added when it is really needed.
  
         vstream_fopen()  opens  the  named  file  and associates a
         buffered stream with it.  The _p_a_t_h, _f_l_a_g_s and  _m_o_d_e  argu-
         ments  are passed on to the open(2) routine. The result is
         a null pointer in case of problems. The _p_a_t_h  argument  is
         copied and can be looked up with VSTREAM_PATH().
  
         vstream_fdopen()  takes  an  open  file  and  associates a
         buffered stream with it. The _f_l_a_g_s argument specifies  how
         the  file  was opened. vstream_fdopen() either succeeds or
         never returns.
  
         vstream_fclose() closes the  named  buffered  stream.  The
         result  is  0  in  case of success, VSTREAM_EOF in case of
         problems.
  
         vstream_fprintf() formats its arguments according  to  the
         _f_o_r_m_a_t argument and writes the result to the named stream.
         The result is the stream argument. It understands  the  s,
         c, d, u, o, x, X, e, f and g format types, the l modifier,
         field width and precision, sign, and padding with zeros or
         spaces.  In  addition, vstream_fprintf() recognizes the %m
         format specifier and expands it to the error message  cor-
         responding  to the current value of the global _e_r_r_n_o vari-
         able.
  
         vstream_printf() performs formatted output to the standard
         output stream.
  
         VSTREAM_GETC()  reads  the  next  character from the named
         stream.  The result is  VSTREAM_EOF  when  end-of-file  is
         reached or if a read error was detected. VSTREAM_GETC() is
         an unsafe macro that evaluates some  arguments  more  than
         once.
  
  
  
  
                                                                  3
  
  
  
  
  
  VSTREAM(3)                                             VSTREAM(3)
  
  
         VSTREAM_GETCHAR()        is       an       alias       for
         VSTREAM_GETC(VSTREAM_IN).
  
         VSTREAM_PUTC() appends  the  specified  character  to  the
         specified  stream.  The result is the stored character, or
         VSTREAM_EOF in case  of  problems.  VSTREAM_PUTC()  is  an
         unsafe macro that evaluates some arguments more than once.
  
         VSTREAM_PUTCHAR(c)  is  an   alias   for   VSTREAM_PUTC(c,
         VSTREAM_OUT).
  
         vstream_unget() pushes back a character onto the specified
         stream and returns the character, or VSTREAM_EOF  in  case
         of  problems.   It is an error to push back before reading
         (or immediately  after  changing  the  stream  offset  via
         vstream_fseek()).  Upon successful return, vstream_unget()
         clears the end-of-file stream flag.
  
         vstream_fputs() appends the given  null-terminated  string
         to  the specified buffered stream. The result is 0 in case
         of success, VSTREAM_EOF in case of problems.
  
         vstream_ftell() returns the file offset for the  specified
         stream,  -1  if  the stream is connected to a non-seekable
         file.
  
         vstream_fseek() changes the file  position  for  the  next
         read or write operation. Unwritten output is flushed. With
         unidirectional streams, unread  input  is  discarded.  The
         _o_f_f_s_e_t  argument  specifies  the  file  position  from the
         beginning of the file (_w_h_e_n_c_e is SEEK_SET), from the  cur-
         rent  file position (_w_h_e_n_c_e is SEEK_CUR), or from the file
         end (SEEK_END). The result value is the file  offset  from
         the beginning of the file, -1 in case of problems.
  
         vstream_fflush() flushes unwritten data to a file that was
         opened in read-write or write-only mode.  vstream_fflush()
         returns 0 in case of success, VSTREAM_EOF in case of prob-
         lems. It is an error to flush a read-only stream.
  
         vstream_fread() and vstream_fwrite()  perform  unformatted
         I/O on the named stream. The result value is the number of
         bytes transferred. A short count is returned  in  case  of
         end-of-file or error conditions.
  
         vstream_control()  allows the user to fine tune the behav-
         ior of the specified stream.  The arguments are a list  of
         (name, value) pairs, terminated with VSTREAM_CTL_END.  The
         following lists the names and the types of the correspond-
         ing value arguments.
  
         VSTREAM_CTL_READ_FN (int (*)(int, void *, unsigned))
                The  argument  specifies  an  alternative  for  the
                read(2) function, for example, a read function that
  
  
  
                                                                  4
  
  
  
  
  
  VSTREAM(3)                                             VSTREAM(3)
  
  
                enforces a time limit.
  
         VSTREAM_CTL_WRITE_FN (int (*)(int, void *, unsigned))
                The  argument  specifies  an  alternative  for  the
                write(2) function, for example,  a  write  function
                that enforces a time limit.
  
         VSTREAM_CTL_PATH (char *)
                Updates   the  stored  pathname  of  the  specified
                stream. The pathname is copied.
  
         VSTREAM_CTL_DOUBLE (no value)
                Use separate buffers for reading and  for  writing.
                This  prevents  unread  input  from being discarded
                upon change of I/O direction.
  
         VSTREAM_CTL_READ_FD (int)
                The argument specifies the file  descriptor  to  be
                used  for reading.  This feature is limited to dou-
                ble-buffered streams, and  makes  the  stream  non-
                seekable.
  
         VSTREAM_CTL_WRITE_FD (int)
                The  argument  specifies  the file descriptor to be
                used for writing.  This feature is limited to  dou-
                ble-buffered  streams,  and  makes  the stream non-
                seekable.
  
         VSTREAM_CTL_WAITPID_FN (int (*)(pid_t, WAIT_STATUS_T *,
                int))
                A  pointer to function that behaves like waitpid().
                This information is used  by  the  vstream_pclose()
                routine.
  
         vstream_fileno()  gives  access to the file handle associ-
         ated with a buffered stream. With streams that have  sepa-
         rate  read/write  file descriptors, the result is the cur-
         rent descriptor.
  
         VSTREAM_PATH() is an unsafe macro that  returns  the  name
         stored with vstream_fopen() or with vstream_control(). The
         macro is unsafe because it evaluates some  arguments  more
         than once.
  
         vstream_ferror()  (vstream_feof()) returns non-zero when a
         previous operation on the specified stream caused an error
         (end-of-file) condition.
  
         vstream_clearerr()  resets the error and end-of-file indi-
         cation of specified stream, and returns no useful  result.
  
         vstream_vfprintf()  provides  an  alternate  interface for
         formatting an argument list according to a format  string.
  
  
  
  
                                                                  5
  
  
  
  
  
  VSTREAM(3)                                             VSTREAM(3)
  
  
         vstream_peek()  returns  the number of characters that can
         be read from the named stream without refilling  the  read
         buffer.
  
  DDIIAAGGNNOOSSTTIICCSS
         Panics: interface violations. Fatal errors: out of memory.
  
  SSEEEE AALLSSOO
         vbuf_print(3) formatting engine
  
  BBUUGGSS
         Should use mmap() on reasonable systems.
  
  LLIICCEENNSSEE
         The Secure Mailer license must be  distributed  with  this
         software.
  
  AAUUTTHHOORR((SS))
         Wietse Venema
         IBM T.J. Watson Research
         P.O. Box 704
         Yorktown Heights, NY 10598, USA
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
                                                                  6
  
  
  Index: ossp-pkg/sio/BRAINSTORM/stash-buf.txt
  ============================================================
  $ cvs update -p -r1.1 stash-buf.txt
  /* -*- mode: c ; c-file-style: "canonware-c-style" -*-
   ****************************************************************************
   *
   * Copyright (C) 1996-1999 Jason Evans <jasone@canonware.com>.
   * All rights reserved.
   * 
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   * 1. Redistributions of source code must retain the above copyright
   *    notice(s), this list of conditions and the following disclaimer as
   *    the first lines of this file unmodified other than the possible
   *    addition of one or more copyright notices.
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice(s), this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   * 
   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY
   * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) BE
   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
   * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
   * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
   * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
   * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   *
   ****************************************************************************
   *
   * Version: s19990524a
   *
   * <<< Description >>>
   *
   * The buf and bufc classes implement a buffer abstraction.  These classes are
   * designed specifically to handle streaming and transparent extensible
   * buffering of data for applications such as socket programs.  The main
   * features include:
   *
   * - Dynamically extensible and contractible buffering.
   * - Internal reference counting, which avoids copying between buf's, and allows
   *   for compact usage of memory buffers.
   * - 8, 32, and 64 bit read functions for arbitrary byte offsets (within the
   *   valid data range) within buf's.
   * - 8, 32, and 64 bit, and string, write/append functions for arbitrary byte
   *   offsets.
   * - Easy ability to use with readv() and writev().
   *
   ****************************************************************************/
  
  /* Pseudo-opaque typedefs. */
  typedef struct cw_buf_s cw_buf_t;
  typedef struct cw_bufc_s cw_bufc_t;
  
  /* Opaque typedef. */
  typedef struct cw_bufel_s cw_bufel_t;
  
  /* The following data types should be considered opaque. */
  struct cw_bufc_s
  {
  #if (defined(_LIBSTASH_DBG) || defined(_LIBSTASH_DEBUG))
    cw_uint32_t magic;
  #endif
  #ifdef _CW_REENTRANT
    cw_mtx_t lock;
  #endif
    void (*dealloc_func)(void *, void *);
    void * dealloc_arg;
    void (*buffer_dealloc_func)(void *, void *);
    void * buffer_dealloc_arg;
    cw_uint32_t ref_count;
    cw_bool_t is_writeable;
    cw_uint32_t buf_size;
    cw_uint8_t * buf;
  };
  
  struct cw_buf_s
  {
  #if (defined(_LIBSTASH_DBG) || defined(_LIBSTASH_DEBUG))
    cw_uint32_t magic;
  #endif
    cw_bool_t is_malloced;
  #ifdef _CW_REENTRANT
    cw_bool_t is_threadsafe;
    cw_mtx_t lock;
  #endif
    cw_uint32_t size;
  
    cw_uint32_t array_size;
    cw_uint32_t array_num_valid;
    cw_uint32_t array_start;
    cw_uint32_t array_end;
    cw_bool_t is_cumulative_valid;
    cw_bool_t is_cached_bufel_valid;
    cw_uint32_t cached_bufel;
    cw_bufel_t * bufel_array;
    cw_uint32_t * cumulative_index;
    struct iovec * iov;
  };
  
  /****************************************************************************
   *
   * <<< Input(s) >>>
   *
   * a_buf : Pointer to space for a buf, or NULL.
   *
   * a_is_thread_safe : FALSE == not thread safe, TRUE == thread safe.
   *
   * <<< Output(s) >>>
   *
   * retval : Pointer to a buf, or NULL.
   *          NULL : Memory allocation error.
   *
   * <<< Description >>>
   *
   * Constructor.
   *
   ****************************************************************************/
  #ifdef _CW_REENTRANT
  cw_buf_t *
  buf_new(cw_buf_t * a_buf, cw_bool_t a_is_threadsafe);
  #else
  cw_buf_t *
  buf_new(cw_buf_t * a_buf);
  #endif
  
  /****************************************************************************
   *
   * <<< Input(s) >>>
   *
   * a_buf : Pointer to a buf.
   *
   * <<< Output(s) >>>
   *
   * None.
   *
   * <<< Description >>>
   *
   * Destructor.
   *
   ****************************************************************************/
  void
  buf_delete(cw_buf_t * a_buf);
  
  /****************************************************************************
   *
   * <<< Input(s) >>>
   *
   * a_buf : Pointer to a buf.
   *
   * a_prefix : Pointer to a string that represents a string to be prefixed to
   *            each line of output.
   *
   * <<< Output(s) >>>
   *
   * None.
   *
   * <<< Description >>>
   *
   * Dump the internal state of a_buf to cw_g_log.
   *
   ****************************************************************************/
  void
  buf_dump(cw_buf_t * a_buf, const char * a_prefix);
  
  /****************************************************************************
   *
   * <<< Input(s) >>>
   *
   * a_buf : Pointer to a buf.
   *
   * <<< Output(s) >>>
   *
   * retval : Number of bytes of valid data.
   *
   * <<< Description >>>
   *
   * Return the amount of valid data in bytes.
   *
   ****************************************************************************/
  cw_uint32_t
  buf_get_size(cw_buf_t * a_buf);
  
  /****************************************************************************
   *
   * <<< Input(s) >>>
   *
   * a_buf : Pointer to a buf.
   *
   * <<< Output(s) >>>
   *
   * retval : Number of bufel's in a_buf (same as iovec count in buf_get_iovec()).
   *
   * <<< Description >>>
   *
   * Return the number of bufel's in a_buf.
   *
   ****************************************************************************/
  cw_uint32_t
  buf_get_num_bufels(cw_buf_t * a_buf);
  
  /****************************************************************************
   *
   * <<< Input(s) >>>
   *
   * a_buf : Pointer to a buf.
   *
   * a_max_data : Maximum number of bytes of space to include in the iovec.
   *
   * a_is_sys_iovec : If TRUE, limit *r_iovec_count to the maximum iovec count
   *                  supported by this system for readv()/writev().
   *
   * a_iovec_count : Pointer to an int.
   *
   * <<< Output(s) >>>
   *
   * retval : Pointer to an iovec array that represents the internal data buffers
   *          in a_buf.
   *
   * *r_iovec_count : Number of valid iovec structures in retval.
   *
   * <<< Description >>>
   *
   * Build an iovec array that represents the valid data in a_buf's internal
   * buffers (up to a_max_data bytes) and return a pointer to it.
   *
   ****************************************************************************/
  const struct iovec *
  buf_get_iovec(cw_buf_t * a_buf, cw_uint32_t a_max_data,
  	      cw_bool_t a_is_sys_iovec, int * r_iovec_count);
  
  /****************************************************************************
   *
   * <<< Input(s) >>>
   *
   * a_a : Pointer to a buf.
   *
   * a_b : Pointer to a buf.
   *
   * a_preserve : If TRUE, preserve a_b (don't modify it).  If FALSE, release the
   *              data in a_b after catenating a_b to a_a.
   *
   * <<< Output(s) >>>
   *
   * retval : FALSE == success, TRUE == error.
   *          TRUE : Memory allocation error.
   *
   * <<< Description >>>
   *
   * Catenate two bufs.  a_b is left unmodified if a_preserve is TRUE.
   *
   ****************************************************************************/
  cw_bool_t
  buf_catenate_buf(cw_buf_t * a_a, cw_buf_t * a_b, cw_bool_t a_preserve);
  
  /****************************************************************************
   *
   * <<< Input(s) >>>
   *
   * a_a : Pointer to a buf.
   *
   * a_b : Pointer to a buf.
   *
   * a_offset : Offset at which to split a_b.
   *
   * <<< Output(s) >>>
   *
   * retval : FALSE == success, TRUE == error.
   *          TRUE : Memory allocation error.  a_a and a_b are returned to their
   *                 original states.
   *
   * <<< Description >>>
   *
   * Split a_b at offset a_offset.  Append the data before a_offset to a_a, and
   * leave the remainder in a_b.
   *
   ****************************************************************************/
  cw_bool_t
  buf_split(cw_buf_t * a_a, cw_buf_t * a_b, cw_uint32_t a_offset);
  
  /****************************************************************************
   *
   * <<< Input(s) >>>
   *
   * a_buf : Pointer to a buf.
   *
   * a_bufel : Pointer to a bufel.
   *
   * <<< Output(s) >>>
   *
   * retval : FALSE == success, TRUE == error.
   *          TRUE : Memory allocation error.  a_buf is still valid.
   *
   * <<< Description >>>
   *
   * Prepend the data from a_bufel to a_buf.  a_bufel is not modified.
   *
   ****************************************************************************/
  cw_bool_t
  buf_prepend_bufel(cw_buf_t * a_buf, cw_bufel_t * a_bufel);
  
  
  /****************************************************************************
   *
   * <<< Input(s) >>>
   *
   * a_buf : Pointer to a buf.
   *
   * a_bufc : Pointer to a bufc.
   *
   * a_beg_offset : Offset of first valid byte in a_bufc's memory buffer.
   *
   * a_end_offset : Offset of first byte past the valid range of bytes in a_bufc's
   *                memory buffer.
   *
   * <<< Output(s) >>>
   *
   * retval : FALSE == success, TRUE == error.
   *          TRUE : Memory allocation error.  a_buf is still valid.
   *
   * <<< Description >>>
   *
   * Prepend a_bufc, bytes a_beg_offset .. (a_end_offset - 1) to a_buf.
   *
   ****************************************************************************/
  cw_bool_t
  buf_prepend_bufc(cw_buf_t * a_buf, cw_bufc_t * a_bufc,
  		 cw_uint32_t a_beg_offset, cw_uint32_t a_end_offset);
  
  /****************************************************************************
   *
   * <<< Input(s) >>>
   *
   * a_buf : Pointer to a buf.
   *
   * a_bufc : Pointer to a bufc.
   *
   * a_beg_offset : Offset of first valid byte in a_bufc's memory buffer.
   *
   * a_end_offset : Offset of first byte past the valid range of bytes in a_bufc's
   *                memory buffer.
   *
   * <<< Output(s) >>>
   *
   * retval : FALSE == success, TRUE == error.
   *          TRUE : Memory allocation error.  a_buf is still valid.
   *
   * <<< Description >>>
   *
   * Append a_bufc, bytes a_beg_offset .. (a_end_offset - 1) to a_buf.
   *
   ****************************************************************************/
  cw_bool_t
  buf_append_bufc(cw_buf_t * a_buf, cw_bufc_t * a_bufc,
  		cw_uint32_t a_beg_offset, cw_uint32_t a_end_offset);
  
  /****************************************************************************
   *
   * <<< Input(s) >>>
   *
   * a_buf : Pointer to a buf.
   *
   * a_bufel : Pointer to a bufel.
   *
   * <<< Output(s) >>>
   *
   * retval : FALSE == success, TRUE == error.
   *          TRUE : Memory allocation error.  a_buf is still valid.
   *
   * <<< Description >>>
   *
   * Append the data from a_bufel to a_buf.  a_bufel is not modified.
   *
   ****************************************************************************/
  cw_bool_t
  buf_append_bufel(cw_buf_t * a_buf, cw_bufel_t * a_bufel);
  
  /****************************************************************************
   *
   * <<< Input(s) >>>
   *
   * a_buf : Pointer to a buf.
   *
   * a_amount : Number of bytes of data to release from the head of a_buf.
   *
   * <<< Output(s) >>>
   *
   * retval : FALSE == success, TRUE == error.
   *
   * <<< Description >>>
   *
   * Release a_amount bytes from the head of a_buf.
   *
   ****************************************************************************/
  cw_bool_t
  buf_release_head_data(cw_buf_t * a_buf, cw_uint32_t a_amount);
  
  /****************************************************************************
   *
   * <<< Input(s) >>>
   *
   * a_buf : Pointer to a buf.
   *
   * a_amount : Number of bytes of data to release from the tail of a_buf.
   *
   * <<< Output(s) >>>
   *
   * retval : FALSE == success, TRUE == error.
   *
   * <<< Description >>>
   *
   * Release a_amount bytes from the tail of a_buf.
   *
   ****************************************************************************/
  cw_bool_t
  buf_release_tail_data(cw_buf_t * a_buf, cw_uint32_t a_amount);
  
  /****************************************************************************
   *
   * <<< Input(s) >>>
   *
   * a_buf : Pointer to a buf.
   *
   * a_offset : Offset in bytes of uint8 to return.
   *
   * <<< Output(s) >>>
   *
   * retval : Value of the uint8 at offset a_offset in a_buf.
   *
   * <<< Description >>>
   *
   * Return the uint8 at offset a_offset.
   *
   ****************************************************************************/
  cw_uint8_t
  buf_get_uint8(cw_buf_t * a_buf, cw_uint32_t a_offset);
  
  /****************************************************************************
   *
   * <<< Input(s) >>>
   *
   * a_buf : Pointer to a buf.
   *
   * a_offset : Offset in bytes of uint32 to return.
   *
   * <<< Output(s) >>>
   *
   * retval : Value of the uint32 at offset a_offset in a_buf.
   *
   * <<< Description >>>
   *
   * Return the uint32 at offset a_offset.
   *
   ****************************************************************************/
  cw_uint32_t
  buf_get_uint32(cw_buf_t * a_buf, cw_uint32_t a_offset);
  
  /****************************************************************************
   *
   * <<< Input(s) >>>
   *
   * a_buf : Pointer to a buf.
   *
   * a_offset : Offset in bytes of uint64 to return.
   *
   * <<< Output(s) >>>
   *
   * retval : Value of the uint64 at offset a_offset in a_buf.
   *
   * <<< Description >>>
   *
   * Return the uint64 at offset a_offset.
   *
   ****************************************************************************/
  cw_uint64_t
  buf_get_uint64(cw_buf_t * a_buf, cw_uint32_t a_offset);
  
  /****************************************************************************
   *
   * <<< Input(s) >>>
   *
   * a_buf : Pointer to a buf.
   *
   * a_offset : Offset in bytes of data to set. (a_offset <= buf_get_size(a_buf))
   *
   * a_val : Value to set data at a_offset to.
   *
   * <<< Output(s) >>>
   *
   * retval : FALSE == success, TRUE == error.
   *          TRUE : memory allocation error.
   *
   * <<< Description >>>
   *
   * Set the uint8 at a_offset to a_val.
   *
   ****************************************************************************/
  cw_bool_t
  buf_set_uint8(cw_buf_t * a_buf, cw_uint32_t a_offset, cw_uint8_t a_val);
  
  /****************************************************************************
   *
   * <<< Input(s) >>>
   *
   * a_buf : Pointer to a buf.
   *
   * a_offset : Offset in bytes of data to set. (a_offset <= buf_get_size(a_buf))
   *
   * a_val : Value to set data at a_offset to.
   *
   * <<< Output(s) >>>
   *
   * retval : FALSE == success, TRUE == error.
   *          TRUE : memory allocation error.
   *
   * <<< Description >>>
   *
   * Set the uint32 at a_offset to a_val.
   *
   ****************************************************************************/
  cw_bool_t
  buf_set_uint32(cw_buf_t * a_buf, cw_uint32_t a_offset, cw_uint32_t a_val);
  
  /****************************************************************************
   *
   * <<< Input(s) >>>
   *
   * a_buf : Pointer to a buf.
   *
   * a_offset : Offset in bytes of data to set. (a_offset <= buf_get_size(a_buf))
   *
   * a_val : Value to set data at a_offset to.
   *
   * <<< Output(s) >>>
   *
   * retval : FALSE == success, TRUE == error.
   *          TRUE : memory allocation error.
   *
   * <<< Description >>>
   *
   * Set the uint64 at a_offset to a_val.
   *
   ****************************************************************************/
  cw_bool_t
  buf_set_uint64(cw_buf_t * a_buf, cw_uint32_t a_offset, cw_uint64_t a_val);
  
  /****************************************************************************
   *
   * <<< Input(s) >>>
   *
   * a_buf : Pointer to a buf.
   *
   * a_offset : Offset in bytes of data to set. (a_offset <= buf_get_size(a_buf))
   *
   * a_length : Number of bytes to copy from a_val.
   *
   * a_val : Value to set data at a_offset to.
   *
   * a_is_writeable : FALSE == non-writeable buffer, TRUE == writeable buffer.
   *
   * <<< Output(s) >>>
   *
   * retval : FALSE == success, TRUE == error.
   *          TRUE : memory allocation error.
   *
   * <<< Description >>>
   *
   * Copy a_offset bytes from a_val to a_buf at offset a_offset.
   *
   ****************************************************************************/
  cw_bool_t
  buf_set_range(cw_buf_t * a_buf, cw_uint32_t a_offset, cw_uint32_t a_length,
  	      cw_uint8_t * a_val, cw_bool_t a_is_writeable);
  
  /****************************************************************************
   *
   * <<< Input(s) >>>
   *
   * a_bufc : Pointer to space for a bufc, or NULL.
   *
   * a_dealloc_func : Pointer to a deallocation function for a_bufc, or NULL.
   *                  Ignored if a_bufc == NULL.
   *
   * a_dealloc_arg : First argument to a_dealloc_func.
   *
   * <<< Output(s) >>>
   *
   * retval : Pointer to an initialized bufc, or NULL.
   *          NULL : Memory allocation error.
   *
   * <<< Description >>>
   *
   * Constructor.  The return value should be used in a call to bufc_set_buffer(),
   * then bufel_set_bufc().  bufc_delete() can be called at any time up until the
   * call to bufel_set_bufc() to deallocate, but should not be called thereafter.
   *
   ****************************************************************************/
  cw_bufc_t *
  bufc_new(cw_bufc_t * a_bufc,
  	 void (*a_dealloc_func)(void * dealloc_arg, void * bufel),
  	 void * a_dealloc_arg);
  
  /****************************************************************************
   *
   * <<< Input(s) >>>
   *
   * a_bufc : Pointer to a bufc.
   *
   * <<< Output(s) >>>
   *
   * None.
   *
   * <<< Description >>>
   *
   * Destructor.  Only call this if a_bufc was never used in a call to
   * bufel_set_bufc().
   *
   ****************************************************************************/
  void
  bufc_delete(cw_bufc_t * a_bufc);
  
  /****************************************************************************
   *
   * <<< Input(s) >>>
   *
   * a_bufc : Pointer to a bufc.
   *
   * a_buffer : Pointer to a buffer.
   *
   * a_size : Size of *a_buffer.
   *
   * a_dealloc_func : Pointer to a deallocation function for a_buffer, or NULL.
   *
   * a_dealloc_arg : First argument to a_dealloc_func.
   *
   * <<< Output(s) >>>
   *
   * None.
   *
   * <<< Description >>>
   *
   * Set a_bufc's internal data buffer to a_buffer, with size a_size, and
   * deallocation function a_dealloc_func(a_dealloc_arg, a_buffer).
   *
   ****************************************************************************/
  void
  bufc_set_buffer(cw_bufc_t * a_bufc, void * a_buffer, cw_uint32_t a_size,
  		cw_bool_t a_is_writeable,
  		void (*a_dealloc_func)(void * dealloc_arg, void * buffer),
  		void * a_dealloc_arg);
  Index: ossp-pkg/sio/BRAINSTORM/substdio.txt
  ============================================================
  $ cvs update -p -r1.1 substdio.txt
  
  
  
  substdio(3)                                           substdio(3)
  
  
  NNAAMMEE
         substdio - the Sub-Standard Input/Output Library
  
  SSYYNNTTAAXX
         ##iinncclluuddee <<ssuubbssttddiioo..hh>>
  
         void ssuubbssttddiioo__ffddbbuuff(&_s,_o_p,_f_d,_b_u_f,_l_e_n);
  
         int ssuubbssttddiioo__ffiilleennoo(&_s);
  
         substdio _s;
         int (*_o_p)();
         int _f_d;
         char *_b_u_f;
         int _l_e_n;
  
  DDEESSCCRRIIPPTTIIOONN
         ssuubbssttddiioo  is  the Sub-Standard I/O Library.  ssuubbssttddiioo con-
         tains only a few of the features of stdio; it is  a  fast,
         lightweight, low-level library, suitable for use as a com-
         ponent of higher-level I/O libraries.
  
         The point of ssuubbssttddiioo is to  provide  buffered  I/O.   The
         basic object in ssuubbssttddiioo is the ssuubbssttddiioo structure; a ssuubb--
         ssttddiioo variable stores an operation, a  descriptor,  and  a
         pointer  into a buffer of some nonzero length.  The ssuubbsstt--
         ddiioo operations read data  from  the  buffer,  filling  the
         buffer as necessary using the operation on the descriptor,
         or write data to the buffer, flushing the buffer as neces-
         sary  using  the  operation  on the descriptor.  Input and
         output operations cannot be mixed.
  
         ssuubbssttddiioo__ffddbbuuff initializes a ssuubbssttddiioo variable.  The oper-
         ation is _o_p.  The descriptor is _f_d.  The buffer is _b_u_f, an
         array of _l_e_n chars.
  
         _o_p will be called as _o_p(_f_d,_x,_n).  Here _x is a  pointer  to
         an  array  of  characters  of  length _n; _o_p must read some
         characters from _f_d to that array, or write some characters
         to  _f_d  from that array.  The return value from _o_p must be
         the number of characters read or  written.   0  characters
         read  means  end of input; 0 characters written means that
         the write operation should be tried again immediately.  On
         error,  _o_p  must  return  -1, setting eerrrrnnoo appropriately,
         without reading or  writing  anything.   Most  errors  are
         returned  directly to the ssuubbssttddiioo caller, but an error of
         eerrrroorr__iinnttrr means that the operation should be tried  again
         immediately.
  
         There is a SSUUBBSSTTDDIIOO__FFDDBBUUFF macro that can be used to stati-
         cally initialize a ssuubbssttddiioo variable:
  
            substdio s = SUBSTDIO_FDBUF(op,fd,buf,len);
  
  
  
  
                                                                  1
  
  
  
  
  
  substdio(3)                                           substdio(3)
  
  
         ssuubbssttddiioo__ffiilleennoo returns the descriptor for an  initialized
         ssuubbssttddiioo variable.
  
  SSEEEE AALLSSOO
         substdio_in(3),     substdio_out(3),     substdio_copy(3),
         error(3)
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
                                                                  2
  
  
  
  
  
  substdio_in(3)                                     substdio_in(3)
  
  
  NNAAMMEE
         substdio_in - substdio input routines
  
  SSYYNNTTAAXX
         ##iinncclluuddee <<ssuubbssttddiioo..hh>>
  
         int ssuubbssttddiioo__ggeett(&_s,_t_o,_l_e_n);
  
         int ssuubbssttddiioo__bbggeett(&_s,_t_o,_l_e_n);
  
         int ssuubbssttddiioo__ffeeeedd(&_s);
  
         char *ssuubbssttddiioo__ppeeeekk(&_s);
  
         void ssuubbssttddiioo__sseeeekk(&_s,_l_e_n);
  
         substdio _s;
         char *_t_o;
         int _l_e_n;
  
  DDEESSCCRRIIPPTTIIOONN
         ssuubbssttddiioo__ggeett  reads at most _l_e_n characters from _s into the
         character array _t_o.  It returns the number  of  characters
         read,  0  for  end of file, or -1 for error, setting eerrrrnnoo
         appropriately.
  
         ssuubbssttddiioo__bbggeett has the same function as ssuubbssttddiioo__ggeett.   The
         difference  is what happens when there is no buffered data
         and _l_e_n exceeds the buffer  size:  ssuubbssttddiioo__ggeett  tries  to
         read  _l_e_n  characters, whereas ssuubbssttddiioo__bbggeett tries to read
         one buffer of characters.   In  some  cases  ssuubbssttddiioo__bbggeett
         will be more efficient than ssuubbssttddiioo__ggeett.
  
         ssuubbssttddiioo__ffeeeedd  makes  sure that there is buffered data, so
         that the next ssuubbssttddiioo__ggeett or ssuubbssttddiioo__bbggeett will  succeed.
         If the buffer is empty, ssuubbssttddiioo__ffeeeedd tries to fill it; it
         returns 0 for end of file, -1 for error, or the number  of
         buffered characters on success.  If the buffer already had
         data, ssuubbssttddiioo__ffeeeedd leaves it alone and returns the number
         of buffered characters.
  
         ssuubbssttddiioo__ppeeeekk returns a pointer to the buffered data.
  
         ssuubbssttddiioo__sseeeekk  throws  away _l_e_n buffered characters, as if
         they had been read.  _l_e_n must be at least 0  and  at  most
         the amount of buffered data.
  
         The ssuubbssttddiioo__PPEEEEKK and ssuubbssttddiioo__SSEEEEKK macros behave the same
         way as ssuubbssttddiioo__ppeeeekk and ssuubbssttddiioo__sseeeekk  but  may  evaluate
         their arguments several times.
  
         The  point  of  ssuubbssttddiioo__ppeeeekk and ssuubbssttddiioo__sseeeekk is to read
         data without unnecessary copies.  Sample code:
  
  
  
  
                                                                  1
  
  
  
  
  
  substdio_in(3)                                     substdio_in(3)
  
  
           for (;;) {
             n = substdio_feed(s);
             if (n <= 0) return n;
             x = substdio_PEEK(s);
             handle(x,n);
             substdio_SEEK(s,n);
           }
  
         The SSUUBBSSTTDDIIOO__IINNSSIIZZEE macro is defined as a reasonably large
         input buffer size for ssuubbssttddiioo__ffddbbuuff.
  
  IINNTTEERRNNAALLSS
         When  a  ssuubbssttddiioo  variable  _s is used for input, there is
         free buffer space from _s..xx to _s..xx + _s..nn; data is  buffered
         from _s..xx + _s..nn to _s..xx + _s..nn + _s..pp; the total buffer length
         is _s..nn + _s..pp.
  
  SSEEEE AALLSSOO
         substdio(3)
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
                                                                  2
  
  
  
  
  
  substdio_out(3)                                   substdio_out(3)
  
  
  NNAAMMEE
         substdio_out - substdio output routines
  
  SSYYNNTTAAXX
         ##iinncclluuddee <<ssuubbssttddiioo..hh>>
  
         int ssuubbssttddiioo__ppuutt(&_s,_f_r_o_m,_l_e_n);
         int ssuubbssttddiioo__ppuuttss(&_s,_f_r_o_m);
  
         int ssuubbssttddiioo__bbppuutt(&_s,_f_r_o_m,_l_e_n);
         int ssuubbssttddiioo__bbppuuttss(&_s,_f_r_o_m);
  
         int ssuubbssttddiioo__fflluusshh(&_s);
  
         int ssuubbssttddiioo__ppuuttfflluusshh(&_s,_f_r_o_m,_l_e_n);
         int ssuubbssttddiioo__ppuuttssfflluusshh(&_s,_f_r_o_m);
  
         substdio _s;
         char *_f_r_o_m;
         int _l_e_n;
  
  DDEESSCCRRIIPPTTIIOONN
         ssuubbssttddiioo__ppuutt writes _l_e_n characters to _s out of the charac-
         ter array _f_r_o_m.  It returns 0 on success, -1 on error.
  
         ssuubbssttddiioo__bbppuutt has the same function as ssuubbssttddiioo__ppuutt.   The
         difference  is  how the buffer is flushed when there isn't
         enough room for _l_e_n characters: ssuubbssttddiioo__ppuutt  flushes  the
         buffered  data before copying the new data, whereas ssuubbsstt--
         ddiioo__bbppuutt fills the buffer with new data before flushing.
  
         ssuubbssttddiioo__fflluusshh forces all data  to  be  written  from  the
         internal buffer.  It returns 0 on success, -1 on error.
  
         ssuubbssttddiioo__ppuuttfflluusshh  is  similar to ssuubbssttddiioo__ppuutt followed by
         ssuubbssttddiioo__fflluusshh, but it avoids all internal copies.
  
         ssuubbssttddiioo__ppuuttss, ssuubbssttddiioo__bbppuuttss, and ssuubbssttddiioo__ppuuttssfflluusshh  are
         the same as ssuubbssttddiioo__ppuutt, ssuubbssttddiioo__bbppuutt, and ssuubbssttddiioo__ppuutt--
         fflluusshh except that _f_r_o_m must be a  0-terminated  string  of
         characters.   The string, not including the 0, is written.
  
         The SSUUBBSSTTDDIIOO__OOUUTTSSIIZZEE macro  is  defined  as  a  reasonably
         large output buffer size for ssuubbssttddiioo__ffddbbuuff.
  
  IINNTTEERRNNAALLSS
         When  a  ssuubbssttddiioo  variable  _s is used for output, data is
         buffered from _s..xx to _s..xx + _s..pp; there is free buffer space
         from to _s..xx + _s..pp to _s..xx + _s..nn; the total buffer length is
         _s..nn.
  
  SSEEEE AALLSSOO
         substdio(3)
  
  
  
  
                                                                  1
  
  
  
  
  
  substdio_copy(3)                                 substdio_copy(3)
  
  
  NNAAMMEE
         substdio_copy - copy an entire input to an output
  
  SSYYNNTTAAXX
         ##iinncclluuddee <<ssuubbssttddiioo..hh>>
  
         int ssuubbssttddiioo__ccooppyy(&_s_o_u_t,&_s_i_n);
  
         substdio _s_o_u_t;
         substdio _s_i_n;
  
  DDEESSCCRRIIPPTTIIOONN
         ssuubbssttddiioo__ccooppyy reads characters from _s_i_n until end of file,
         writing each character to _s_o_u_t.  It then  returns  0.   It
         does not flush _s_o_u_t.
  
         Upon  a _s_i_n error, ssuubbssttddiioo__ccooppyy returns -2, leaving eerrrrnnoo
         set appropriately.
  
         Upon a _s_o_u_t error, ssuubbssttddiioo__ccooppyy returns -3, leaving eerrrrnnoo
         set appropriately.
  
  SSEEEE AALLSSOO
         substdio(3)
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
                                                                  1
  
  

From ossp-cvs-owner@ossp.org  Mon Oct  7 15:49:52 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1700676A63; Mon,  7 Oct 2002 15:49:52 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Message-Id: <20021007134952.1700676A63@mail.ossp.org>
Date: Mon,  7 Oct 2002 15:49:52 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: CVSROOT                          Date:   07-Oct-2002 15:49:52
  Branch: HEAD                             Handle: 2002100714495100

  Modified files:
    CVSROOT                 modules

  Log:
    add sio and sorp

  Summary:
    Revision    Changes     Path
    1.60        +2  -0      CVSROOT/modules
  ____________________________________________________________________________

  Index: CVSROOT/modules
  ============================================================
  $ cvs diff -u -r1.59 -r1.60 modules
  --- CVSROOT/modules	9 Jul 2002 07:02:25 -0000	1.59
  +++ CVSROOT/modules	7 Oct 2002 13:49:51 -0000	1.60
  @@ -82,6 +82,8 @@
   cfg             ossp-pkg/cfg
   fsl             ossp-pkg/fsl
   uuidgen         ossp-pkg/uuidgen
  +sio             ossp-pkg/sio
  +sorp            ossp-pkg/sorp
   
   #   the OSSP applications
   eperl           ossp-pkg/eperl

From ossp-cvs-owner@ossp.org  Mon Oct  7 16:01:02 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1760B76A2A; Mon,  7 Oct 2002 16:00:56 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/BRAINSTORM Apache-Dean-Thoughts.txt CS95-441....
Message-Id: <20021007140056.1760B76A2A@mail.ossp.org>
Date: Mon,  7 Oct 2002 16:00:56 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Oct-2002 16:00:54
  Branch: HEAD                             Handle: 2002100715003805

  Added files:
    ossp-pkg/sio/BRAINSTORM Apache-Dean-Thoughts.txt CS95-441.ps.L
                            CS95-441.ps.gz IO-Lite-TR97-269.ps.gz
                            IO-Lite-iol98.ps.gz IO-Lite-presentation.ps.gz
                            IO-Lite.txt IO.MAIL apache-stackedio asf-ideas.txt
                            brustoloni-abs.txt brustoloni-abs.txt.L c10k.html
                            c10k.html.L c10k.ps.gz copyavoid.pdf
                            copyavoid.pdf.L copyavoid.ps.gz dean.txt
                            doc_SFmtg.txt doc_bucket_brigades.txt
                            doc_dean_iol.txt doc_greg_filters.txt
                            doc_page_io.txt doc_stacked_io.txt doc_wishes.txt
                            ewa.thesis.ps.L ewa.thesis.ps.gz infocom98.ps.L
                            infocom98.ps.gz io-events.html io-events.html.L
                            io-events.ps.gz iolib-eval-rse.txt osdi96.ps.L
                            osdi96.ps.gz smli_tr-95-39.L smli_tr-95-39.pdf
                            smli_tr-95-39.ps.gz smli_tr-99-76.ps splice.ps.gz
                            splice.ps.gz.L thesis.ps.L thesis.ps.gz
                            tr96-169.ps.L tr96-169.ps.gz

  Log:
    add more brainstorming stuff from RSE

  Summary:
    Revision    Changes     Path
    1.1         +114 -0     ossp-pkg/sio/BRAINSTORM/Apache-Dean-Thoughts.txt
    1.1         +1  -0      ossp-pkg/sio/BRAINSTORM/CS95-441.ps.L
    1.1         BLOB        ossp-pkg/sio/BRAINSTORM/CS95-441.ps.gz
    1.1         BLOB        ossp-pkg/sio/BRAINSTORM/IO-Lite-TR97-269.ps.gz
    1.1         BLOB        ossp-pkg/sio/BRAINSTORM/IO-Lite-iol98.ps.gz
    1.1         BLOB        ossp-pkg/sio/BRAINSTORM/IO-Lite-presentation.ps.gz
    1.1         +74 -0      ossp-pkg/sio/BRAINSTORM/IO-Lite.txt
    1.1         +39 -0      ossp-pkg/sio/BRAINSTORM/IO.MAIL
    1.1         +883 -0     ossp-pkg/sio/BRAINSTORM/apache-stackedio
    1.1         +328 -0     ossp-pkg/sio/BRAINSTORM/asf-ideas.txt
    1.1         +141 -0     ossp-pkg/sio/BRAINSTORM/brustoloni-abs.txt
    1.1         +1  -0      ossp-pkg/sio/BRAINSTORM/brustoloni-abs.txt.L
    1.1         +281 -0     ossp-pkg/sio/BRAINSTORM/c10k.html
    1.1         +1  -0      ossp-pkg/sio/BRAINSTORM/c10k.html.L
    1.1         BLOB        ossp-pkg/sio/BRAINSTORM/c10k.ps.gz
    1.1         BLOB        ossp-pkg/sio/BRAINSTORM/copyavoid.pdf
    1.1         +1  -0      ossp-pkg/sio/BRAINSTORM/copyavoid.pdf.L
    1.1         BLOB        ossp-pkg/sio/BRAINSTORM/copyavoid.ps.gz
    1.1         +1191 -0    ossp-pkg/sio/BRAINSTORM/dean.txt
    1.1         +172 -0     ossp-pkg/sio/BRAINSTORM/doc_SFmtg.txt
    1.1         +381 -0     ossp-pkg/sio/BRAINSTORM/doc_bucket_brigades.txt
    1.1         +496 -0     ossp-pkg/sio/BRAINSTORM/doc_dean_iol.txt
    1.1         +102 -0     ossp-pkg/sio/BRAINSTORM/doc_greg_filters.txt
    1.1         +166 -0     ossp-pkg/sio/BRAINSTORM/doc_page_io.txt
    1.1         +1312 -0    ossp-pkg/sio/BRAINSTORM/doc_stacked_io.txt
    1.1         +269 -0     ossp-pkg/sio/BRAINSTORM/doc_wishes.txt
    1.1         +1  -0      ossp-pkg/sio/BRAINSTORM/ewa.thesis.ps.L
    1.1         BLOB        ossp-pkg/sio/BRAINSTORM/ewa.thesis.ps.gz
    1.1         +1  -0      ossp-pkg/sio/BRAINSTORM/infocom98.ps.L
    1.1         BLOB        ossp-pkg/sio/BRAINSTORM/infocom98.ps.gz
    1.1         +354 -0     ossp-pkg/sio/BRAINSTORM/io-events.html
    1.1         +1  -0      ossp-pkg/sio/BRAINSTORM/io-events.html.L
    1.1         BLOB        ossp-pkg/sio/BRAINSTORM/io-events.ps.gz
    1.1         +28 -0      ossp-pkg/sio/BRAINSTORM/iolib-eval-rse.txt
    1.1         +1  -0      ossp-pkg/sio/BRAINSTORM/osdi96.ps.L
    1.1         BLOB        ossp-pkg/sio/BRAINSTORM/osdi96.ps.gz
    1.1         +2  -0      ossp-pkg/sio/BRAINSTORM/smli_tr-95-39.L
    1.1         BLOB        ossp-pkg/sio/BRAINSTORM/smli_tr-95-39.pdf
    1.1         BLOB        ossp-pkg/sio/BRAINSTORM/smli_tr-95-39.ps.gz
    1.1         +8960 -0    ossp-pkg/sio/BRAINSTORM/smli_tr-99-76.ps
    1.1         BLOB        ossp-pkg/sio/BRAINSTORM/splice.ps.gz
    1.1         +1  -0      ossp-pkg/sio/BRAINSTORM/splice.ps.gz.L
    1.1         +1  -0      ossp-pkg/sio/BRAINSTORM/thesis.ps.L
    1.1         BLOB        ossp-pkg/sio/BRAINSTORM/thesis.ps.gz
    1.1         +1  -0      ossp-pkg/sio/BRAINSTORM/tr96-169.ps.L
    1.1         BLOB        ossp-pkg/sio/BRAINSTORM/tr96-169.ps.gz
  ____________________________________________________________________________

  Index: ossp-pkg/sio/BRAINSTORM/Apache-Dean-Thoughts.txt
  ============================================================
  $ cvs update -p -r1.1 Apache-Dean-Thoughts.txt
  From dgaudet@arctic.org Mon Jun 28 19:06:50 1999
  Path: engelschall.com!mail2news!apache.org!new-httpd-owner-rse+apache=en.muc.de
  From: dgaudet@arctic.org (Dean Gaudet)
  Newsgroups: en.lists.apache-new-httpd
  Subject: Re: async routines
  Date: 28 Jun 1999 17:33:24 +0200
  Organization: Mail2News at engelschall.com
  Lines: 96
  Approved: postmaster@m2ndom
  Message-ID: <Pine.LNX.3.96dg4.990628081527.31647G-100000@twinlark.arctic.org>
  Reply-To: new-httpd@apache.org
  NNTP-Posting-Host: en1.engelschall.com
  X-Trace: en1.engelschall.com 930584004 99816 141.1.129.1 (28 Jun 1999 15:33:24 GMT)
  X-Complaints-To: postmaster@engelschall.com
  NNTP-Posting-Date: 28 Jun 1999 15:33:24 GMT
  X-Mail2News-Gateway: mail2news.engelschall.com
  Xref: engelschall.com en.lists.apache-new-httpd:31280
  
  [hope you don't mind me cc'ing new-httpd zach, I think others will be
  interested.]
  
  On Mon, 28 Jun 1999, Zach Brown wrote:
  
  > so dean, I was wading through the mpm code to see if I could munge the
  > sigwait stuff into it.
  > 
  > as far as I could tell, the http protocol routines are still blocking.
  > what does the future hold in the way for async routines? :)  I basically
  > need a way to do something like..
  
  You're still waiting for me to get the async stuff in there... I've done
  part of the work -- the BUFF layer now supports non-blocking sockets. 
  
  However, the HTTP code will always remain blocking.  There's no way I'm
  going to try to educate the world in how to write async code... and since
  our HTTP code has arbitrary call outs to third party modules... It'd
  have a drastic effect on everyone to make this change.
  
  But I honestly don't think this is a problem.  Here's my observations:
  
  All the popular HTTP clients send their requests in one packet (or two
  in the case of a POST and netscape).  So the HTTP code would almost
  never have to block while processing the request.  It may block while
  processing a POST -- something which someone else can worry about later,
  my code won't be any worse than what we already have in apache.  So
  any effort we put into making the HTTP parsing code async-safe would
  be wasted on the 99.9% case.
  
  Most responses fit in the socket's send buffer, and again don't require
  async support.  But we currently do the lingering_close() routine which
  could easily use async support.  Large responses also could use async
  support.
  
  The goal of HTTP parsing is to figure out which response object to
  send.  In most cases we can reduce that to a bunch of common response
  types:
  
  - copying a file to the socket
  - copying a pipe/socket to the socket  (IPC, CGIs)
  - copying a mem region to the socket (mmap, some dynamic responses)
  
  So what we do is we modify the response handlers only.  We teach them
  about how to send async responses.
  
  There will be a few new primitives which will tell the core "the response
  fits one of these categories, please handle it".  The core will do the
  rest -- and for MPMs which support async handling, the core will return
  to the MPM and let the MPM do the work async...  the MPM will call a
  completion function supplied by the core.  (Note that this will simplify
  things for lots of folks... for example, it'll let us move range request
  handling to a common spot so that more than just default_handler
  can support it.)
  
  I expect this to be a simple message passing protocol (pass by reference).
  Well rather, that's how I expect to implement it in ASH -- where I'll
  have a single thread per-process doing the select/poll stuff; and the
  other threads are in a pool that handles the protocol stuff.  For your
  stuff you may want to do it another way -- but we'll be using a common
  structure that the core knows about... and that structure will look like
  a message:
  
      struct msg {
  	enum {
  	    MSG_SEND_FILE,
  	    MSG_SEND_PIPE,
  	    MSG_SEND_MEM,
  	    MSG_LINGERING_CLOSE,
  	    MSG_WAIT_FOR_READ,	/* for handling keep-alives */
  	    ...
  	} type;
  	BUFF *client;
  	void (*completion)(struct msg *, int status);
  	union {
  	    ... extra data here for whichver types need it ...;
  	} x;
      };
  
  The nice thing about this is that these operations are protocol
  independant... at this level there's no knowledge of HTTP, so the same
  MPM core could be used to implement other protocols.
  
  > so as I was thinking about this stuff, I realized it might be neat to have
  > 'classes' of non blocking pending work and have different threads with
  > differnt priorities hacking on it.  Say we have a very high priority
  > thread that accepts connectoins, does initial header parsing, and
  > sendfile()ing data out.  We could have lower priority threads that are
  > spinning doing 'harder' BUFF work like an encryption layer or gziping
  > content, whatever.
  
  You should be able to implement this in your MPM easily I think... because
  you'll see the different message types and can distribute them as needed.
  
  Dean
  
  Index: ossp-pkg/sio/BRAINSTORM/CS95-441.ps.L
  ============================================================
  $ cvs update -p -r1.1 CS95-441.ps.L
  http://www.cs.ucsd.edu/groups/csl/pubs/conf/sosp95.html
  Index: ossp-pkg/sio/BRAINSTORM/CS95-441.ps.gz
  ============================================================
  $ cvs update -p -r1.1 CS95-441.ps.gz | uuencode CS95-441.ps.gz
  ‹êM7CS95-441.ps
From ossp-cvs-owner@ossp.org  Mon Oct  7 16:01:39 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 50AAE76A2C; Mon,  7 Oct 2002 16:01:39 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/BRAINSTORM IO-Lite-summary-rse.txt
Message-Id: <20021007140139.50AAE76A2C@mail.ossp.org>
Date: Mon,  7 Oct 2002 16:01:39 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Oct-2002 16:01:39
  Branch: HEAD                             Handle: 2002100715013800

  Added files:
    ossp-pkg/sio/BRAINSTORM IO-Lite-summary-rse.txt

  Log:
    add more brainstorming stuff from RSE

  Summary:
    Revision    Changes     Path
    1.1         +17 -0      ossp-pkg/sio/BRAINSTORM/IO-Lite-summary-rse.txt
  ____________________________________________________________________________

  Index: ossp-pkg/sio/BRAINSTORM/IO-Lite-summary-rse.txt
  ============================================================
  $ cvs update -p -r1.1 IO-Lite-summary-rse.txt
  
  IO-Lite: 1998/1999
       - uses immutable/read-only blocks of data
       - assembles user data out of these blocks
         via "buffer aggregates" which are
         mainly ordered lists of <pointer,len> pairs
         to the read-only buffers.
       - uses an own user-land API dealing
         with buffer aggregates instead of
         continous buffers
       - required kernel support (wants to
         do page-remapping and copy-on-write)
         for really optimized I/O
       => not directly useable for user-land I/O lib
          wegen den Kernel-basierten Optis, aber die Idee der buffer aggregates
          kann interessant sein.
  

From ossp-cvs-owner@ossp.org  Mon Oct  7 16:02:18 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3B5E676A23; Mon,  7 Oct 2002 16:02:18 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio SPEC.txt
Message-Id: <20021007140218.3B5E676A23@mail.ossp.org>
Date: Mon,  7 Oct 2002 16:02:18 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Oct-2002 16:02:18
  Branch: HEAD                             Handle: 2002100715021700

  Added files:
    ossp-pkg/sio            SPEC.txt

  Log:
    start of specification ;)

  Summary:
    Revision    Changes     Path
    1.1         +4  -0      ossp-pkg/sio/SPEC.txt
  ____________________________________________________________________________

  Index: ossp-pkg/sio/SPEC.txt
  ============================================================
  $ cvs update -p -r1.1 SPEC.txt
  
  OSSP sio Specification
  ======================
  

From ossp-cvs-owner@ossp.org  Fri Oct 11 17:27:40 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5F63276555; Fri, 11 Oct 2002 17:27:40 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.ac sa.c sa.h
Message-Id: <20021011152740.5F63276555@mail.ossp.org>
Date: Fri, 11 Oct 2002 17:27:40 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Oct-2002 17:27:40
  Branch: HEAD                             Handle: 2002101116273900

  Modified files:
    ossp-pkg/sa             sa.ac sa.c sa.h

  Log:
    - fix inet_ntoa(3) usage
    - fallback to usage of inet_addr(3) if inet_aton(3) does not exists
    - add casts for arguments to [gs]etsockopt(3) to shut down warnings
    
    (This especially gets OSSP sa running under dead Solaris 2.6...)

  Summary:
    Revision    Changes     Path
    1.11        +1  -1      ossp-pkg/sa/sa.ac
    1.59        +19 -11     ossp-pkg/sa/sa.c
    1.31        +1  -1      ossp-pkg/sa/sa.h
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.ac
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 sa.ac
  --- ossp-pkg/sa/sa.ac	15 Mar 2002 10:47:36 -0000	1.10
  +++ ossp-pkg/sa/sa.ac	11 Oct 2002 15:27:39 -0000	1.11
  @@ -72,7 +72,7 @@
       AC_CHECK_HEADERS(string.h sys/types.h sys/socket.h netdb.h netinet/in.h)
   
       #   check for system functions
  -    AC_CHECK_FUNCS(inet_aton inet_pton inet_ntoa inet_ntop snprintf)
  +    AC_CHECK_FUNCS(inet_addr inet_aton inet_pton inet_ntoa inet_ntop snprintf)
   
       dnl # check for network/socket size type
       SA_CHECK_TYPEDEF(socklen_t, sys/socket.h)
  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.58 -r1.59 sa.c
  --- ossp-pkg/sa/sa.c	15 Mar 2002 10:47:36 -0000	1.58
  +++ ossp-pkg/sa/sa.c	11 Oct 2002 15:27:39 -0000	1.59
  @@ -240,10 +240,17 @@
       struct in_addr in_val;
   
       if (family == AF_INET) {
  +#if defined(HAVE_INET_ATON)
           /* at least for IPv4 we can rely on the old inet_aton(3)
              and for IPv6 inet_pton(3) would exist anyway */
           if (inet_aton(strptr, &in_val) == 0)
               return 0;
  +#elif defined(HAVE_INET_ADDR)
  +        /* at least for IPv4 try to rely on the even older inet_addr(3) */
  +        memset(&in_val, '\0', sizeof(in_val));
  +        if ((in_val.s_addr = inet_addr(strptr)) == ((in_addr_t)-1))
  +            return 0;
  +#endif
           memcpy(addrptr, &in_val, sizeof(struct in_addr));
           return 1;
       }
  @@ -258,14 +265,14 @@
   #ifdef HAVE_INET_NTOP
       return inet_ntop(family, src, dst, size);
   #else
  -    struct in_addr in_val;
       char *cp;
       int n;
   
       if (family == AF_INET) {
  +#ifdef HAVE_INET_NTOA
           /* at least for IPv4 we can rely on the old inet_ntoa(3)
              and for IPv6 inet_ntop(3) would exist anyway */
  -        if ((cp = inet_ntoa(src)) == NULL) 
  +        if ((cp = inet_ntoa(*((struct in_addr *)src))) == NULL) 
               return NULL;
           n = strlen(cp);
           if (n > size-1)
  @@ -273,6 +280,7 @@
           memcpy(dst, cp, n);
           dst[n] = '\0';
           return dst;
  +#endif
       }
       errno = EAFNOSUPPORT;
       return NULL;
  @@ -814,8 +822,8 @@
           ucp1 = (const unsigned char *)&(((struct sockaddr_in6 *)saa1->saBuf)->sin6_addr);
           ucp2 = (const unsigned char *)&(((struct sockaddr_in6 *)saa2->saBuf)->sin6_addr);
           nBits = 128;
  -#endif
       }
  +#endif
       else
           return SA_RC(SA_ERR_INT);
   
  @@ -862,14 +870,14 @@
       if (sa->fdSocket != -1) {
           if (SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_READ])) {
               if (setsockopt(sa->fdSocket, SOL_SOCKET, SO_RCVTIMEO,
  -                           &sa->tvTimeout[SA_TIMEOUT_READ],
  -                           sizeof(sa->tvTimeout[SA_TIMEOUT_READ])) < 0)
  +                           (const void *)(&sa->tvTimeout[SA_TIMEOUT_READ]),
  +                           (socklen_t)(sizeof(sa->tvTimeout[SA_TIMEOUT_READ]))) < 0)
                   return SA_RC(SA_ERR_SYS);
           }
           if (SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_WRITE])) {
               if (setsockopt(sa->fdSocket, SOL_SOCKET, SO_SNDTIMEO,
  -                           &sa->tvTimeout[SA_TIMEOUT_WRITE],
  -                           sizeof(sa->tvTimeout[SA_TIMEOUT_WRITE])) < 0)
  +                           (const void *)(&sa->tvTimeout[SA_TIMEOUT_WRITE]),
  +                           (socklen_t)(sizeof(sa->tvTimeout[SA_TIMEOUT_WRITE]))) < 0)
                   return SA_RC(SA_ERR_SYS);
           }
       }
  @@ -1150,7 +1158,7 @@
                   break;
               }
               if (setsockopt(sa->fdSocket, IPPROTO_TCP, TCP_NODELAY, 
  -                           (void *)&mode, sizeof(mode)) < 0)
  +                           (const void *)&mode, (socklen_t)sizeof(mode)) < 0)
                   rv = SA_ERR_SYS;
   #else
               rv = SA_ERR_IMP;
  @@ -1165,7 +1173,7 @@
                   break;
               }
               if (setsockopt(sa->fdSocket, SOL_SOCKET, SO_LINGER, 
  -                           linger, sizeof(struct linger)) < 0)
  +                           (const void *)linger, (socklen_t)sizeof(struct linger)) < 0)
                   rv = SA_ERR_SYS;
   #else
               rv = SA_ERR_IMP;
  @@ -1192,7 +1200,7 @@
                   default: flag = 0; break;
               }
               if (setsockopt(sa->fdSocket, SOL_SOCKET, flag, 
  -                           (void *)&mode, sizeof(mode)) < 0)
  +                           (const void *)&mode, (socklen_t)sizeof(mode)) < 0)
                   rv = SA_ERR_SYS;
               break;
           }
  @@ -1349,7 +1357,7 @@
   
           /* fetch pending error */
           len = sizeof(error);
  -        if (getsockopt(sa->fdSocket, SOL_SOCKET, SO_ERROR, &error, &len) < 0)
  +        if (getsockopt(sa->fdSocket, SOL_SOCKET, SO_ERROR, (void *)&error, &len) < 0)
               error = errno;
   
           done:
  Index: ossp-pkg/sa/sa.h
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 sa.h
  --- ossp-pkg/sa/sa.h	15 Mar 2002 10:47:36 -0000	1.30
  +++ ossp-pkg/sa/sa.h	11 Oct 2002 15:27:39 -0000	1.31
  @@ -43,7 +43,7 @@
   
   /* fallback for POSIX socklen_t */
   #if defined(HAVE_CONFIG_H) && !defined(HAVE_SOCKLEN_T)
  -#define socklen_t int
  +typedef int socklen_t;
   #endif
   
   /* embedding support */

From ossp-cvs-owner@ossp.org  Fri Oct 11 17:28:18 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B06E576A37; Fri, 11 Oct 2002 17:28:18 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa TODO
Message-Id: <20021011152818.B06E576A37@mail.ossp.org>
Date: Fri, 11 Oct 2002 17:28:18 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Oct-2002 17:28:18
  Branch: HEAD                             Handle: 2002101116281800

  Modified files:
    ossp-pkg/sa             TODO

  Log:
    now fixed, too.

  Summary:
    Revision    Changes     Path
    1.36        +0  -9      ossp-pkg/sa/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.35 -r1.36 TODO
  --- ossp-pkg/sa/TODO	22 Sep 2002 07:36:43 -0000	1.35
  +++ ossp-pkg/sa/TODO	11 Oct 2002 15:28:18 -0000	1.36
  @@ -2,17 +2,8 @@
   TODO
   ----
   
  -Solaris 2.6:
  -./libtool --mode=compile --quiet /usr/opkg/bin/cc -c  -O -pipe -I. l2_env.c
  -In file included from l2_p.h:43,
  -from l2_env.c:30:
  -l2_ut_sa.h:161: parse error before "socklen_t"
  -l2_ut_sa.h:163: parse error before "socklen_t"
  -make[2]: *** [l2_env.lo] Error 1
  -
   - more test cases to cover full API and especially the client/server usage
   - more documentation to fully describe API
  -
   
   CANDO
   -----

From ossp-cvs-owner@ossp.org  Fri Oct 11 17:32:31 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D926E7654A; Fri, 11 Oct 2002 17:32:30 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new news.txt ossp-web/pkg/lib index.wml ossp-web/...
Message-Id: <20021011153230.D926E7654A@mail.ossp.org>
Date: Fri, 11 Oct 2002 17:32:30 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   11-Oct-2002 17:32:30
  Branch: HEAD                             Handle: 2002101116322901

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/sa     index.wml

  Log:
    release OSSP sa 0.9.2

  Summary:
    Revision    Changes     Path
    1.26        +1  -0      ossp-web/new/news.txt
    1.29        +1  -1      ossp-web/pkg/lib/index.wml
    1.6         +2  -2      ossp-web/pkg/lib/sa/index.wml
  ____________________________________________________________________________

  Index: ossp-web/new/news.txt
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 news.txt
  --- ossp-web/new/news.txt	24 Sep 2002 12:53:46 -0000	1.25
  +++ ossp-web/new/news.txt	11 Oct 2002 15:32:29 -0000	1.26
  @@ -1,3 +1,4 @@
  +11-Oct-2002: Released L<OSSP sa> 0.9.2
   07-Sep-2002: Released L<OSSP fsl> 1.0.3
   19-Aug-2002: Released T<OSSP shiela> 0.9.2
   14-Aug-2002: Released T<OSSP lmtp2nntp> 1.2a6
  Index: ossp-web/pkg/lib/index.wml
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 index.wml
  --- ossp-web/pkg/lib/index.wml	7 Sep 2002 20:32:49 -0000	1.28
  +++ ossp-web/pkg/lib/index.wml	11 Oct 2002 15:32:29 -0000	1.29
  @@ -24,7 +24,7 @@
   			done=100 stable=1.2.1 unstable=none>
     <pkg_item name="sa" longname="OSSP sa" type="lib"
               desc="Socket Abstraction"
  -			done=95 stable=none unstable=0.9.1>
  +			done=95 stable=none unstable=0.9.2>
     <pkg_item name="ex" longname="OSSP ex" type="lib"
               desc="Exception Handling"
   			done=100 stable=1.0.0 unstable=none>
  Index: ossp-web/pkg/lib/sa/index.wml
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 index.wml
  --- ossp-web/pkg/lib/sa/index.wml	2 Oct 2002 12:44:43 -0000	1.5
  +++ ossp-web/pkg/lib/sa/index.wml	11 Oct 2002 15:32:30 -0000	1.6
  @@ -27,7 +27,7 @@
   <pkg_status
       name="sa" assign="rse"
       stable="none"    stable_date="none"
  -    unstable="0.9.1" unstable_date="15-Mar-2002"
  +    unstable="0.9.2" unstable_date="11-Oct-2002"
   	done=95>
   
   <h2>Source</h2>
  @@ -37,7 +37,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/sa/
       directory=$(FTP_ROOT_DIR)/pkg/lib/sa/
       files="sa-*.tar.gz" 
  -	stable="none" unstable="sa-0.9.1.tar.gz">
  +	stable="none" unstable="sa-0.9.2.tar.gz">
   	
   <h2>Donation</h2>
   

From ossp-cvs-owner@ossp.org  Fri Oct 11 18:00:50 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DA30C76A32; Fri, 11 Oct 2002 18:00:49 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 README configure.ac devtool.conf l2_ut_sa.ac l...
Message-Id: <20021011160049.DA30C76A32@mail.ossp.org>
Date: Fri, 11 Oct 2002 18:00:49 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Oct-2002 18:00:49
  Branch: HEAD                             Handle: 2002101117004800

  Modified files:
    ossp-pkg/l2             README configure.ac devtool.conf l2_ut_sa.ac
                            l2_ut_sa.c l2_ut_sa.h l2_version.c

  Log:
    upgrade to OSSP sa 0.9.2 and release OSSP l2 0.9.1 with it

  Summary:
    Revision    Changes     Path
    1.9         +1  -1      ossp-pkg/l2/README
    1.24        +2  -2      ossp-pkg/l2/configure.ac
    1.7         +1  -1      ossp-pkg/l2/devtool.conf
    1.6         +7  -7      ossp-pkg/l2/l2_ut_sa.ac
    1.18        +292 -183   ossp-pkg/l2/l2_ut_sa.c
    1.14        +13 -7      ossp-pkg/l2/l2_ut_sa.h
    1.6         +9  -9      ossp-pkg/l2/l2_version.c
  ____________________________________________________________________________

  Index: ossp-pkg/l2/README
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 README
  --- ossp-pkg/l2/README	30 Jul 2002 19:12:30 -0000	1.8
  +++ ossp-pkg/l2/README	11 Oct 2002 16:00:48 -0000	1.9
  @@ -5,7 +5,7 @@
     |_____|_____|
                  
     OSSP l2 -- Logging Library
  -  Version 0.9.0 (30-Jul-2002)
  +  Version 0.9.1 (11-Oct-2002)
   
     ABSTRACT
   
  Index: ossp-pkg/l2/configure.ac
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 configure.ac
  --- ossp-pkg/l2/configure.ac	30 Jul 2002 19:08:24 -0000	1.23
  +++ ossp-pkg/l2/configure.ac	11 Oct 2002 16:00:48 -0000	1.24
  @@ -44,8 +44,8 @@
   AC_CHECK_MAINTAINER
   AC_CONFIGURE_LIBTOOL
   
  -AC_CHECK_BISON(BISON, 1.30, [1.3[[0-9]]|1.[[4-9]]])
  -AC_CHECK_FLEX(FLEX, 2.5.10, [2.5.1[[0-9]]|2.[[6-9]].*])
  +AC_CHECK_BISON(BISON, 1.30, [1.3[[0-9]]|1.[[4-9]][[0-9]]])
  +AC_CHECK_FLEX(FLEX, 2.5.10, [2.5.1[[0-9]]|2.5.[[2-9]][[0-9]]|2.[[6-9]].*])
   
   AC_CHECK_LIB(nsl, gethostname)
   if test ".`echo $LIBS | grep nsl`" = . ;then
  Index: ossp-pkg/l2/devtool.conf
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 devtool.conf
  --- ossp-pkg/l2/devtool.conf	30 Jul 2002 19:12:30 -0000	1.6
  +++ ossp-pkg/l2/devtool.conf	11 Oct 2002 16:00:48 -0000	1.7
  @@ -5,7 +5,7 @@
   %autogen
       @autogen shtool   1.6.1 "1.6.*" all
       @autogen libtool  1.4.2 "1.4*"
  -    @autogen autoconf 2.53  "2.5[3-9]*"
  +    @autogen autoconf 2.54  "2.5[4-9]*"
   
   %autoclean
       @autoclean shtool
  Index: ossp-pkg/l2/l2_ut_sa.ac
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 l2_ut_sa.ac
  --- ossp-pkg/l2/l2_ut_sa.ac	14 Mar 2002 15:29:23 -0000	1.5
  +++ ossp-pkg/l2/l2_ut_sa.ac	11 Oct 2002 16:00:48 -0000	1.6
  @@ -1,11 +1,11 @@
   dnl ##
  -dnl ##  SA - OSSP Socket Abstraction Library
  -dnl ##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  OSSP sa - Socket Abstraction
  +dnl ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
  -dnl ##  This file is part of OSSP SA, a socket abstraction library which
  -dnl ##  can be found at http://www.ossp.org/pkg/sa/.
  +dnl ##  This file is part of OSSP sa, a socket abstraction library which
  +dnl ##  can be found at http://www.ossp.org/pkg/lib/sa/.
   dnl ##
   dnl ##  Permission to use, copy, modify, and distribute this software for
   dnl ##  any purpose with or without fee is hereby granted, provided that
  @@ -72,7 +72,7 @@
       AC_CHECK_HEADERS(string.h sys/types.h sys/socket.h netdb.h netinet/in.h)
   
       #   check for system functions
  -    AC_CHECK_FUNCS(inet_aton inet_pton inet_ntoa inet_ntop snprintf)
  +    AC_CHECK_FUNCS(inet_addr inet_aton inet_pton inet_ntoa inet_ntop snprintf)
   
       dnl # check for network/socket size type
       SA_CHECK_TYPEDEF(socklen_t, sys/socket.h)
  Index: ossp-pkg/l2/l2_ut_sa.c
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 l2_ut_sa.c
  --- ossp-pkg/l2/l2_ut_sa.c	31 Oct 2001 21:26:11 -0000	1.17
  +++ ossp-pkg/l2/l2_ut_sa.c	11 Oct 2002 16:00:48 -0000	1.18
  @@ -1,11 +1,11 @@
   /*
  -**  SA - OSSP Socket Abstraction Library
  -**  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  OSSP sa - Socket Abstraction
  +**  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
  -**  This file is part of OSSP SA, a socket abstraction library which
  -**  can be found at http://www.ossp.org/pkg/sa/.
  +**  This file is part of OSSP sa, a socket abstraction library which
  +**  can be found at http://www.ossp.org/pkg/lib/sa/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  @@ -45,12 +45,25 @@
   #include <sys/time.h>    /* for "struct timeval" */
   #include <sys/un.h>      /* for "struct sockaddr_un" */
   #include <netinet/in.h>  /* for "struct sockaddr_in[6]" */
  -#include <sys/socket.h>  /* for "AF_XXX" and "SOCK_XXX" */
  +#include <sys/socket.h>  /* for "PF_XXX", "AF_XXX" and "SOCK_XXX" */
   #include <arpa/inet.h>   /* for "inet_XtoX" */
   
   /* include own API header */
   #include "l2_ut_sa.h"
   
  +/* unique library identifier */
  +const char sa_id[] = "OSSP sa";
  +
  +/* support for OSSP ex based exception throwing */
  +#ifdef WITH_EX
  +#include "ex.h"
  +#define SA_RC(rv) \
  +    (  (rv) != SA_OK && (ex_catching && !ex_shielding) \
  +     ? (ex_throw(sa_id, NULL, (rv)), (rv)) : (rv) )
  +#else
  +#define SA_RC(rv) (rv)
  +#endif /* WITH_EX */
  +
   /* boolean values */
   #ifndef FALSE
   #define FALSE (0)
  @@ -64,6 +77,17 @@
   #define AF_LOCAL AF_UNIX
   #endif
   
  +/* backward compatibility for PF_XXX (still unused) */
  +#if !defined(PF_LOCAL) && defined(AF_LOCAL)
  +#define PF_LOCAL AF_LOCAL
  +#endif
  +#if !defined(PF_INET) && defined(AF_INET)
  +#define PF_INET AF_INET
  +#endif
  +#if !defined(PF_INET6) && defined(AF_INET6)
  +#define PF_INET6 AF_INET6
  +#endif
  +
   /* backward compatibility for ssize_t */
   #if defined(HAVE_CONFIG_H) && !defined(HAVE_SSIZE_T)
   #define ssize_t long
  @@ -130,14 +154,14 @@
       do { \
           (sa)->scSysCall.sc_##fn.fptr.any = (void (*)())(ptr); \
           (sa)->scSysCall.sc_##fn.fctx = (ctx); \
  -    } while(0)
  +    } while (0)
   
   /* system call structure assignment macro */
   #define SA_SC_COPY(sa1, sa2, fn) \
       do { \
           (sa1)->scSysCall.sc_##fn.fptr.any = (sa2)->scSysCall.sc_##fn.fptr.any; \
           (sa1)->scSysCall.sc_##fn.fctx     = (sa2)->scSysCall.sc_##fn.fctx; \
  -    } while(0)
  +    } while (0)
   
   /* system call function call macros */
   #define SA_SC_CALL_0(sa, fn) \
  @@ -214,10 +238,17 @@
       struct in_addr in_val;
   
       if (family == AF_INET) {
  +#if defined(HAVE_INET_ATON)
           /* at least for IPv4 we can rely on the old inet_aton(3)
              and for IPv6 inet_pton(3) would exist anyway */
           if (inet_aton(strptr, &in_val) == 0)
               return 0;
  +#elif defined(HAVE_INET_ADDR)
  +        /* at least for IPv4 try to rely on the even older inet_addr(3) */
  +        memset(&in_val, '\0', sizeof(in_val));
  +        if ((in_val.s_addr = inet_addr(strptr)) == ((in_addr_t)-1))
  +            return 0;
  +#endif
           memcpy(addrptr, &in_val, sizeof(struct in_addr));
           return 1;
       }
  @@ -232,14 +263,14 @@
   #ifdef HAVE_INET_NTOP
       return inet_ntop(family, src, dst, size);
   #else
  -    struct in_addr in_val;
       char *cp;
       int n;
   
       if (family == AF_INET) {
  +#ifdef HAVE_INET_NTOA
           /* at least for IPv4 we can rely on the old inet_ntoa(3)
              and for IPv6 inet_ntop(3) would exist anyway */
  -        if ((cp = inet_ntoa(src)) == NULL) 
  +        if ((cp = inet_ntoa(*((struct in_addr *)src))) == NULL) 
               return NULL;
           n = strlen(cp);
           if (n > size-1)
  @@ -247,6 +278,7 @@
           memcpy(dst, cp, n);
           dst[n] = '\0';
           return dst;
  +#endif
       }
       errno = EAFNOSUPPORT;
       return NULL;
  @@ -356,13 +388,13 @@
       else {
           /* perform real output */
           ctx.bufptr = buffer;
  -        ctx.buflen = bufsize - 1;
  +        ctx.buflen = bufsize;
           n = sa_mvxprintf(sa_mvsnprintf_cb, &ctx, format, ap);
  +        if (n != -1 && ctx.buflen == 0)
  +            n = -1;
  +        if (n != -1)
  +            *(ctx.bufptr) = '\0';
       }
  -    if (n != -1 && ctx.buflen == 0)
  -        n = -1;
  -    if (n != -1)
  -        *(ctx.bufptr) = '\0';
       return n;
   }
   
  @@ -387,11 +419,11 @@
   
       /* argument sanity check(s) */
       if (saap == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* allocate and initialize new address object */
       if ((saa = (sa_addr_t *)malloc(sizeof(sa_addr_t))) == NULL)
  -        return SA_ERR_MEM;
  +        return SA_RC(SA_ERR_MEM);
       saa->nFamily = 0;
       saa->saBuf   = NULL;
       saa->slBuf   = 0;
  @@ -407,7 +439,7 @@
   {
       /* argument sanity check(s) */
       if (saa == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* free address objects and sub-object(s) */
       if (saa->saBuf != NULL)
  @@ -436,7 +468,7 @@
       char *cpHost;
       char *cpPort;
       char *cpProto;
  -    int nPort;
  +    unsigned int nPort;
       const char *cpPath;
       char uribuf[1024];
       char *cp;
  @@ -445,7 +477,7 @@
   
       /* argument sanity check(s) */
       if (saa == NULL || uri == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* on-the-fly create or just take over URI */
       va_start(ap, uri);
  @@ -472,12 +504,12 @@
           /* fill-in socket address structure */
           n = strlen(cpPath);
           if (n == 0)
  -            return SA_ERR_ARG;
  +            return SA_RC(SA_ERR_ARG);
           if ((n+1) > sizeof(un.sun_path))
  -            return SA_ERR_MEM;
  +            return SA_RC(SA_ERR_MEM);
           if (cpPath[0] != '/') {
               if (getcwd(un.sun_path, sizeof(un.sun_path)-(n+1)) == NULL)
  -                return SA_ERR_MEM;
  +                return SA_RC(SA_ERR_MEM);
               cp = un.sun_path + strlen(un.sun_path);
           }
           else
  @@ -497,22 +529,22 @@
           if (cpHost[0] == '[') {
               /* IPv6 address (see RFC2732) */
   #ifndef AF_INET6
  -            return SA_ERR_IMP;
  +            return SA_RC(SA_ERR_IMP);
   #else
               bIPv6 = TRUE;
               cpHost++;
               if ((cp = strchr(cpHost, ']')) == NULL)
  -                return SA_ERR_ARG;
  +                return SA_RC(SA_ERR_ARG);
               *cp++ = '\0';
               if (*cp != ':')
  -                return SA_ERR_ARG;
  +                return SA_RC(SA_ERR_ARG);
               cp++;
   #endif
           }
           else {
               /* IPv4 address or hostname */
               if ((cp = strrchr(cpHost, ':')) == NULL)
  -                return SA_ERR_ARG;
  +                return SA_RC(SA_ERR_ARG);
               *cp++ = '\0';
           }
           cpPort = cp;
  @@ -532,10 +564,10 @@
               }
           }
           if (bNumeric)
  -            nPort = atoi(cpPort);
  +            nPort = (unsigned int)atoi(cpPort);
           else {
               if ((se = getservbyname(cpPort, cpProto)) == NULL)
  -                return SA_ERR_SYS;
  +                return SA_RC(SA_ERR_SYS);
               nPort = ntohs(se->s_port);
           }
   
  @@ -585,19 +617,19 @@
               }
   #endif
               else
  -                return SA_ERR_ARG;
  +                return SA_RC(SA_ERR_ARG);
           }
           else
  -            return SA_ERR_ARG;
  +            return SA_RC(SA_ERR_ARG);
       }
       else
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* fill-in result address structure */
       if (saa->saBuf != NULL)
           free(saa->saBuf);
       if ((saa->saBuf = (struct sockaddr *)malloc(sl)) == NULL)
  -        return SA_ERR_MEM;
  +        return SA_RC(SA_ERR_MEM);
       memcpy(saa->saBuf, sa, sl);
       saa->slBuf = sl;
       saa->nFamily = sf;
  @@ -610,7 +642,7 @@
   {
       /* argument sanity check(s) */
       if (saa == NULL || sabuf == NULL || salen == 0)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* make sure we import only supported addresses */
       if (!(   sabuf->sa_family == AF_LOCAL
  @@ -619,13 +651,13 @@
             || sabuf->sa_family == AF_INET6
   #endif
            ))
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* create result address structure */
       if (saa->saBuf != NULL)
           free(saa->saBuf);
       if ((saa->saBuf = (struct sockaddr *)malloc(salen)) == NULL)
  -        return SA_ERR_MEM;
  +        return SA_RC(SA_ERR_MEM);
       memcpy(saa->saBuf, sabuf, salen);
       saa->slBuf = salen;
   
  @@ -645,11 +677,11 @@
       struct sockaddr_in6 *sa6;
   #endif
       char caHost[512];
  -    int nPort;
  +    unsigned int nPort;
   
       /* argument sanity check(s) */
       if (saa == NULL || uri == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* export object contents */
       if (saa->nFamily == AF_LOCAL) {
  @@ -680,7 +712,7 @@
       }
   #endif
       else
  -        return SA_ERR_INT;
  +        return SA_RC(SA_ERR_INT);
   
       /* pass result to caller */
       *uri = strdup(uribuf);
  @@ -693,11 +725,11 @@
   {
       /* argument sanity check(s) */
       if (saa == NULL || sabuf == NULL || salen == 0)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* export underlying address structure */
       if ((*sabuf = (struct sockaddr *)malloc(saa->slBuf)) == NULL)
  -        return SA_ERR_MEM;
  +        return SA_RC(SA_ERR_MEM);
       memmove(*sabuf, saa->saBuf, saa->slBuf);
       *salen = saa->slBuf;
   
  @@ -715,10 +747,12 @@
       int i;
       const unsigned char *ucp0;
   #endif
  +    unsigned int np1, np2;
  +    int bMatchPort;
   
       /* argument sanity check(s) */
  -    if (saa1 == NULL || saa2 == NULL || prefixlen < -1)
  -        return SA_ERR_ARG;
  +    if (saa1 == NULL || saa2 == NULL)
  +        return SA_RC(SA_ERR_ARG);
   
       /* short circuiting for wildcard matching */
       if (prefixlen == 0)
  @@ -726,18 +760,20 @@
   
       /* determine address representation pointer and size */
       if (saa1->nFamily == AF_LOCAL) {
  +        np1  = 0;
  +        np2  = 0;
           ucp1 = (const unsigned char *)(((struct sockaddr_un *)saa1->saBuf)->sun_path);
           ucp2 = (const unsigned char *)(((struct sockaddr_un *)saa2->saBuf)->sun_path);
           l1 = strlen(((struct sockaddr_un *)saa1->saBuf)->sun_path) * 8;
           l2 = strlen(((struct sockaddr_un *)saa2->saBuf)->sun_path) * 8;
  -        if (prefixlen == -1) {
  +        if (prefixlen < 0) {
               if (l1 != l2)
  -                return SA_ERR_MTC;
  +                return SA_RC(SA_ERR_MTC);
               nBits = l1;
           }
           else {
               if (l1 < prefixlen || l2 < prefixlen)
  -                return SA_ERR_MTC;
  +                return SA_RC(SA_ERR_MTC);
               nBits = prefixlen;
           }
       }
  @@ -747,12 +783,16 @@
           /* special case of comparing a regular IPv4 address (1.2.3.4) with an 
              "IPv4-mapped IPv6 address" (::ffff:1.2.3.4). For details see RFC 2373. */
           if (saa1->nFamily == AF_INET6) {
  +            np1  = (unsigned int)(((struct sockaddr_in6 *)saa1->saBuf)->sin6_port);
  +            np2  = (unsigned int)(((struct sockaddr_in  *)saa2->saBuf)->sin_port);
               ucp1 = (const unsigned char *)&(((struct sockaddr_in6 *)saa1->saBuf)->sin6_addr);
               ucp2 = (const unsigned char *)&(((struct sockaddr_in  *)saa2->saBuf)->sin_addr);
               ucp0 = ucp1;
               ucp1 += 12;
           }
           else {
  +            np1  = (unsigned int)(((struct sockaddr_in  *)saa1->saBuf)->sin_port);
  +            np2  = (unsigned int)(((struct sockaddr_in6 *)saa2->saBuf)->sin6_port);
               ucp1 = (const unsigned char *)&(((struct sockaddr_in  *)saa1->saBuf)->sin_addr);
               ucp2 = (const unsigned char *)&(((struct sockaddr_in6 *)saa2->saBuf)->sin6_addr);
               ucp0 = ucp2;
  @@ -760,34 +800,42 @@
           }
           for (i = 0; i < 10; i++)
               if (ucp0[i] != 0x00)
  -                return SA_ERR_MTC;
  +                return SA_RC(SA_ERR_MTC);
           if (!(ucp0[10] == 0xFF && ucp0[11] == 0xFF))
  -            return SA_ERR_MTC;
  +            return SA_RC(SA_ERR_MTC);
           nBits = 32;
       }
   #endif
       else if (saa1->nFamily == AF_INET) {
  +        np1  = (unsigned int)(((struct sockaddr_in *)saa1->saBuf)->sin_port);
  +        np2  = (unsigned int)(((struct sockaddr_in *)saa2->saBuf)->sin_port);
           ucp1 = (const unsigned char *)&(((struct sockaddr_in *)saa1->saBuf)->sin_addr);
           ucp2 = (const unsigned char *)&(((struct sockaddr_in *)saa2->saBuf)->sin_addr);
           nBits = 32;
       }
   #ifdef AF_INET6
       else if (saa1->nFamily == AF_INET6) {
  +        np1  = (unsigned int)(((struct sockaddr_in6 *)saa1->saBuf)->sin6_port);
  +        np2  = (unsigned int)(((struct sockaddr_in6 *)saa2->saBuf)->sin6_port);
           ucp1 = (const unsigned char *)&(((struct sockaddr_in6 *)saa1->saBuf)->sin6_addr);
           ucp2 = (const unsigned char *)&(((struct sockaddr_in6 *)saa2->saBuf)->sin6_addr);
           nBits = 128;
  -#endif
       }
  +#endif
       else
  -        return SA_ERR_INT;
  +        return SA_RC(SA_ERR_INT);
   
       /* make sure we do not compare than possible */
  -    if (prefixlen > nBits)
  -        return SA_ERR_ARG;
  +    if (prefixlen > (nBits+1))
  +        return SA_RC(SA_ERR_ARG);
   
  -    /* support equal matching (= all bits) */
  -    if (prefixlen == -1)
  +    /* support equal matching (= all bits plus optionally port) */
  +    bMatchPort = FALSE;
  +    if (prefixlen < 0) {
  +        if (prefixlen < -1)
  +            bMatchPort = TRUE;
           prefixlen = nBits;
  +    }
   
       /* perform address representation comparison 
          (assumption guaranteed by API: network byte order is used) */
  @@ -795,15 +843,21 @@
       nBits  = (prefixlen % 8);
       if (nBytes > 0) {
           if (memcmp(ucp1, ucp2, nBytes) != 0)
  -            return SA_ERR_MTC;
  +            return SA_RC(SA_ERR_MTC);
       }
       if (nBits > 0) {
           uc1 = ucp1[nBytes];
           uc2 = ucp2[nBytes];
           mask = (0xFF << (8-nBits)) & 0xFF;
           if ((uc1 & mask) != (uc2 & mask))
  -            return SA_ERR_MTC;
  +            return SA_RC(SA_ERR_MTC);
       }
  +
  +    /* optionally perform additional port matching */
  +    if (bMatchPort)
  +        if (np1 != np2)
  +            return SA_RC(SA_ERR_MTC);
  +
       return SA_OK;
   }
   
  @@ -814,15 +868,15 @@
       if (sa->fdSocket != -1) {
           if (SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_READ])) {
               if (setsockopt(sa->fdSocket, SOL_SOCKET, SO_RCVTIMEO,
  -                           &sa->tvTimeout[SA_TIMEOUT_READ],
  -                           sizeof(sa->tvTimeout[SA_TIMEOUT_READ])) < 0)
  -                return SA_ERR_SYS;
  +                           (const void *)(&sa->tvTimeout[SA_TIMEOUT_READ]),
  +                           (socklen_t)(sizeof(sa->tvTimeout[SA_TIMEOUT_READ]))) < 0)
  +                return SA_RC(SA_ERR_SYS);
           }
           if (SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_WRITE])) {
               if (setsockopt(sa->fdSocket, SOL_SOCKET, SO_SNDTIMEO,
  -                           &sa->tvTimeout[SA_TIMEOUT_WRITE],
  -                           sizeof(sa->tvTimeout[SA_TIMEOUT_WRITE])) < 0)
  -                return SA_ERR_SYS;
  +                           (const void *)(&sa->tvTimeout[SA_TIMEOUT_WRITE]),
  +                           (socklen_t)(sizeof(sa->tvTimeout[SA_TIMEOUT_WRITE]))) < 0)
  +                return SA_RC(SA_ERR_SYS);
           }
       }
   #endif
  @@ -834,16 +888,17 @@
   {
       int nType;
       int nProto;
  +#if !(defined(IPPROTO_TCP) && defined(IPPROTO_UDP))
       struct protoent *pe;
  -    char *cpProto;
  +#endif
   
       /* argument sanity check(s) */
       if (sa == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* only perform operation if socket still does not exist */
       if (sa->fdSocket != -1)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* determine socket type */
       if (sa->eType == SA_TYPE_STREAM)
  @@ -851,7 +906,7 @@
       else if (sa->eType == SA_TYPE_DATAGRAM)
           nType = SOCK_DGRAM;
       else
  -        return SA_ERR_INT;
  +        return SA_RC(SA_ERR_INT);
   
       /* determine socket protocol */
       if (nFamily == AF_LOCAL) 
  @@ -861,22 +916,31 @@
   #else
       else if (nFamily == AF_INET) {
   #endif
  +#if defined(IPPROTO_TCP) && defined(IPPROTO_UDP)
  +        if (nType == SOCK_STREAM)
  +            nProto = IPPROTO_TCP;
  +        else if (nType == SOCK_DGRAM)
  +            nProto = IPPROTO_UDP;
  +        else
  +            return SA_RC(SA_ERR_INT);
  +#else
           if (nType == SOCK_STREAM)
  -            cpProto = "tcp";
  +            pe = getprotobyname("tcp");
           else if (nType == SOCK_DGRAM)
  -            cpProto = "udp";
  +            pe = getprotobyname("udp");
           else
  -            return SA_ERR_INT;
  -        if ((pe = getprotobyname(cpProto)) == NULL)
  -            return SA_ERR_SYS;
  +            return SA_RC(SA_ERR_INT);
  +        if (pe == NULL)
  +            return SA_RC(SA_ERR_SYS);
           nProto = pe->p_proto;
  +#endif
       }
       else
  -        return SA_ERR_INT;
  +        return SA_RC(SA_ERR_INT);
   
       /* create the underlying socket */
       if ((sa->fdSocket = socket(nFamily, nType, nProto)) == -1)
  -        return SA_ERR_SYS;
  +        return SA_RC(SA_ERR_SYS);
   
       /* optionally set kernel timeouts */
       sa_socket_settimeouts(sa);
  @@ -889,11 +953,11 @@
   {
       /* argument sanity check(s) */
       if (sa == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* check context */
       if (sa->fdSocket == -1)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* close socket */
       close(sa->fdSocket);
  @@ -910,11 +974,11 @@
   
       /* argument sanity check(s) */
       if (sap == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* allocate and initialize socket object */
       if ((sa = (sa_t *)malloc(sizeof(sa_t))) == NULL)
  -        return SA_ERR_MEM;
  +        return SA_RC(SA_ERR_MEM);
   
       /* init object attributes */
       sa->eType          = SA_TYPE_STREAM;
  @@ -952,7 +1016,7 @@
   {
       /* argument sanity check(s) */
       if (sa == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* kill underlying socket */
       sa_socket_kill(sa);
  @@ -972,9 +1036,9 @@
   {
       /* argument sanity check(s) */
       if (sa == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
       if (!(type == SA_TYPE_STREAM || type == SA_TYPE_DATAGRAM))
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* kill underlying socket if type changes */
       if (sa->eType != type)
  @@ -993,7 +1057,7 @@
   
       /* argument sanity check(s) */
       if (sa == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       if (id == SA_TIMEOUT_ALL) {
           for (i = 0; i < (sizeof(sa->tvTimeout)/sizeof(sa->tvTimeout[0])); i++) {
  @@ -1019,19 +1083,19 @@
   
       /* argument sanity check(s) */
       if (sa == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       if (id == SA_BUFFER_READ) {
           /* configure read/incoming buffer */
           if (sa->nReadLen > size)
  -            return SA_ERR_USE;
  +            return SA_RC(SA_ERR_USE);
           if (size > 0) {
               if (sa->cpReadBuf == NULL)
                   cp = (char *)malloc(size);
               else
                   cp = (char *)realloc(sa->cpReadBuf, size);
               if (cp == NULL)
  -                return SA_ERR_SYS;
  +                return SA_RC(SA_ERR_SYS);
               sa->cpReadBuf = cp;
               sa->nReadSize = size;
           }
  @@ -1045,14 +1109,14 @@
       else if (id == SA_BUFFER_WRITE) {
           /* configure write/outgoing buffer */
           if (sa->nWriteLen > size)
  -            return SA_ERR_USE;
  +            return SA_RC(SA_ERR_USE);
           if (size > 0) {
               if (sa->cpWriteBuf == NULL)
                   cp = (char *)malloc(size);
               else
                   cp = (char *)realloc(sa->cpWriteBuf, size);
               if (cp == NULL)
  -                return SA_ERR_SYS;
  +                return SA_RC(SA_ERR_SYS);
               sa->cpWriteBuf = cp;
               sa->nWriteSize = size;
           }
  @@ -1063,7 +1127,8 @@
               sa->nWriteSize = 0;
           }
       }
  -        return SA_ERR_ARG;
  +    else
  +        return SA_RC(SA_ERR_ARG);
   
       return SA_OK;
   }
  @@ -1076,7 +1141,7 @@
   
       /* argument sanity check(s) */
       if (sa == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* process option */
       rv = SA_OK;
  @@ -1091,17 +1156,60 @@
                   break;
               }
               if (setsockopt(sa->fdSocket, IPPROTO_TCP, TCP_NODELAY, 
  -                           (void *)&mode, sizeof(mode)) < 0)
  +                           (const void *)&mode, (socklen_t)sizeof(mode)) < 0)
                   rv = SA_ERR_SYS;
   #else
               rv = SA_ERR_IMP;
   #endif
               break;
           }
  +        case SA_OPTION_LINGER: {
  +#if defined(SO_LINGER)
  +            struct linger *linger = (struct linger *)va_arg(ap, void *);
  +            if (sa->fdSocket == -1) {
  +                rv = SA_ERR_USE;
  +                break;
  +            }
  +            if (setsockopt(sa->fdSocket, SOL_SOCKET, SO_LINGER, 
  +                           (const void *)linger, (socklen_t)sizeof(struct linger)) < 0)
  +                rv = SA_ERR_SYS;
  +#else
  +            rv = SA_ERR_IMP;
  +#endif
  +            break;
  +        }
  +        case SA_OPTION_REUSEADDR:
  +#ifdef SA_OPTION_REUSEPORT
  +        case SA_OPTION_REUSEPORT: 
  +#endif
  +        {
  +            /* enable/disable reusability of binding to address or port */
  +            int mode = ((int)va_arg(ap, int) ? 1 : 0);
  +            int flag;
  +            if (sa->fdSocket == -1) {
  +                rv = SA_ERR_USE;
  +                break;
  +            }
  +            switch (id) {
  +                case SA_OPTION_REUSEADDR: flag = SO_REUSEADDR; break;
  +#ifdef SA_OPTION_REUSEPORT
  +                case SA_OPTION_REUSEPORT: flag = SO_REUSEPORT; break;
  +#endif
  +                default: flag = 0; break;
  +            }
  +            if (setsockopt(sa->fdSocket, SOL_SOCKET, flag, 
  +                           (const void *)&mode, (socklen_t)sizeof(mode)) < 0)
  +                rv = SA_ERR_SYS;
  +            break;
  +        }
           case SA_OPTION_NONBLOCK: {
               /* enable/disable non-blocking I/O mode */
               int flags;
               int mode = (int)va_arg(ap, int);
  +            if (sa->fdSocket == -1) {
  +                rv = SA_ERR_USE;
  +                break;
  +            }
               if ((flags = fcntl(sa->fdSocket, F_GETFL, 0)) < 0) {
                   rv = SA_ERR_SYS;
                   break;
  @@ -1120,31 +1228,32 @@
       }
       va_end(ap);
   
  -    return rv;
  +    return SA_RC(rv);
   }
   
   /* override system call */
   sa_rc_t sa_syscall(sa_t *sa, sa_syscall_t id, void (*fptr)(), void *fctx)
   {
  +    sa_rc_t rv;
  +
  +    /* argument sanity check(s) */
       if (sa == NULL || fptr == NULL)
  -        return SA_ERR_ARG;
  -    if (id == SA_SYSCALL_CONNECT)
  -        SA_SC_ASSIGN(sa, connect, fptr, fctx); 
  -    else if (id == SA_SYSCALL_ACCEPT)
  -        SA_SC_ASSIGN(sa, accept, fptr, fctx); 
  -    else if (id == SA_SYSCALL_SELECT)
  -        SA_SC_ASSIGN(sa, select, fptr, fctx); 
  -    else if (id == SA_SYSCALL_READ)
  -        SA_SC_ASSIGN(sa, read, fptr, fctx); 
  -    else if (id == SA_SYSCALL_WRITE)
  -        SA_SC_ASSIGN(sa, write, fptr, fctx); 
  -    else if (id == SA_SYSCALL_RECVFROM)
  -        SA_SC_ASSIGN(sa, recvfrom, fptr, fctx); 
  -    else if (id == SA_SYSCALL_SENDTO)
  -        SA_SC_ASSIGN(sa, sendto, fptr, fctx); 
  -    else
  -        return SA_ERR_ARG;
  -    return SA_OK;
  +        return SA_RC(SA_ERR_ARG);
  +
  +    /* assign system call */
  +    rv = SA_OK;
  +    switch (id) {
  +        case SA_SYSCALL_CONNECT:  SA_SC_ASSIGN(sa, connect,  fptr, fctx); break;
  +        case SA_SYSCALL_ACCEPT:   SA_SC_ASSIGN(sa, accept,   fptr, fctx); break;
  +        case SA_SYSCALL_SELECT:   SA_SC_ASSIGN(sa, select,   fptr, fctx); break;
  +        case SA_SYSCALL_READ:     SA_SC_ASSIGN(sa, read,     fptr, fctx); break;
  +        case SA_SYSCALL_WRITE:    SA_SC_ASSIGN(sa, write,    fptr, fctx); break;
  +        case SA_SYSCALL_RECVFROM: SA_SC_ASSIGN(sa, recvfrom, fptr, fctx); break;
  +        case SA_SYSCALL_SENDTO:   SA_SC_ASSIGN(sa, sendto,   fptr, fctx); break;
  +        default: rv = SA_ERR_ARG; 
  +    }
  +
  +    return SA_RC(rv);
   }
   
   /* bind socket to a local address */
  @@ -1155,12 +1264,12 @@
   
       /* argument sanity check(s) */
       if (sa == NULL || laddr == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* lazy creation of underlying socket */
       if (sa->fdSocket == -1)
           if ((rv = sa_socket_init(sa, laddr->nFamily)) != SA_OK)
  -            return rv;
  +            return SA_RC(rv);
   
       /* remove a possibly existing old Unix Domain socket on filesystem */
       if (laddr->nFamily == AF_LOCAL) {
  @@ -1170,7 +1279,7 @@
   
       /* perform bind operation on underlying socket */
       if (bind(sa->fdSocket, laddr->saBuf, laddr->slBuf) == -1)
  -        return SA_ERR_SYS;
  +        return SA_RC(SA_ERR_SYS);
   
       return SA_OK;
   }
  @@ -1185,16 +1294,16 @@
   
       /* argument sanity check(s) */
       if (sa == NULL || raddr == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* connecting is only possible for stream communication */ 
       if (sa->eType != SA_TYPE_STREAM)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* lazy creation of underlying socket */
       if (sa->fdSocket == -1)
           if ((rv = sa_socket_init(sa, raddr->nFamily)) != SA_OK)
  -            return rv;
  +            return SA_RC(rv);
   
       rv = SA_OK;
       if (SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_CONNECT])) {
  @@ -1246,7 +1355,7 @@
   
           /* fetch pending error */
           len = sizeof(error);
  -        if (getsockopt(sa->fdSocket, SOL_SOCKET, SO_ERROR, &error, &len) < 0)
  +        if (getsockopt(sa->fdSocket, SOL_SOCKET, SO_ERROR, (void *)&error, &len) < 0)
               error = errno;
   
           done:
  @@ -1262,7 +1371,7 @@
               rv = SA_ERR_SYS;
           }
       }
  -    return rv;
  +    return SA_RC(rv);
   }
   
   /* listen on socket for connections */
  @@ -1270,19 +1379,19 @@
   {
       /* argument sanity check(s) */
       if (sa == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* listening is only possible for stream communication */ 
       if (sa->eType != SA_TYPE_STREAM)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* at least sa_bind() has to be already performed */
       if (sa->fdSocket == -1)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* perform listen operation on underlying socket */
       if (listen(sa->fdSocket, backlog) == -1)
  -        return SA_ERR_SYS;
  +        return SA_RC(SA_ERR_SYS);
   
       return SA_OK;
   }
  @@ -1306,15 +1415,15 @@
   
       /* argument sanity check(s) */
       if (sa == NULL || caddr == NULL || csa == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* accepting connections is only possible for stream communication */ 
       if (sa->eType != SA_TYPE_STREAM)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* at least sa_listen() has to be already performed */
       if (sa->fdSocket == -1)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* if timeout is enabled, perform a smart-blocking wait */
       if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_ACCEPT])) {
  @@ -1325,28 +1434,28 @@
                                &sa->tvTimeout[SA_TIMEOUT_ACCEPT]);
           } while (n == -1 && errno == EINTR);
           if (n == 0) 
  -            return SA_ERR_TMT;
  +            return SA_RC(SA_ERR_TMT);
           if (n <= 0)
  -            return SA_ERR_SYS;
  +            return SA_RC(SA_ERR_SYS);
       }
   
       /* perform accept operation on underlying socket */
       sa_len = sizeof(sa_buf);
       if ((s = SA_SC_CALL_3(sa, accept, sa->fdSocket, (struct sockaddr *)&sa_buf, &sa_len)) == -1)
  -        return SA_ERR_SYS;
  +        return SA_RC(SA_ERR_SYS);
   
       /* create result address object */
       if ((rv = sa_addr_create(caddr)) != SA_OK)
  -        return rv;
  +        return SA_RC(rv);
       if ((rv = sa_addr_s2a(*caddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK) {
           sa_addr_destroy(*caddr);
  -        return rv;
  +        return SA_RC(rv);
       }
   
       /* create result socket object */
       if ((rv = sa_create(csa)) != SA_OK) {
           sa_addr_destroy(*caddr);
  -        return rv;
  +        return SA_RC(rv);
       }
   
       /* fill-in child socket */
  @@ -1384,27 +1493,27 @@
   
       /* argument sanity check(s) */
       if (sa == NULL || raddr == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* peers exist only for stream communication */ 
       if (sa->eType != SA_TYPE_STREAM)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* at least sa_connect() or sa_accept() has to be already performed */
       if (sa->fdSocket == -1)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* determine remote address of underlying socket */
       sa_len = sizeof(sa_buf);
       if (getpeername(sa->fdSocket, (struct sockaddr *)&sa_buf, &sa_len) < 0)
  -        return SA_ERR_SYS;
  +        return SA_RC(SA_ERR_SYS);
   
       /* create result address object */
       if ((rv = sa_addr_create(raddr)) != SA_OK)
  -        return rv;
  +        return SA_RC(rv);
       if ((rv = sa_addr_s2a(*raddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK) {
           sa_addr_destroy(*raddr);
  -        return rv;
  +        return SA_RC(rv);
       }
   
       return SA_OK;
  @@ -1424,23 +1533,23 @@
   
       /* argument sanity check(s) */
       if (sa == NULL || laddr == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* at least sa_bind() has to be already performed */
       if (sa->fdSocket == -1)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* determine local address of underlying socket */
       sa_len = sizeof(sa_buf);
       if (getsockname(sa->fdSocket, (struct sockaddr *)&sa_buf, &sa_len) < 0)
  -        return SA_ERR_SYS;
  +        return SA_RC(SA_ERR_SYS);
   
       /* create result address object */
       if ((rv = sa_addr_create(laddr)) != SA_OK)
  -        return rv;
  +        return SA_RC(rv);
       if ((rv = sa_addr_s2a(*laddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK) {
           sa_addr_destroy(*laddr);
  -        return rv;
  +        return SA_RC(rv);
       }
   
       return SA_OK;
  @@ -1451,11 +1560,11 @@
   {
       /* argument sanity check(s) */
       if (sa == NULL || fd == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* if still no socket exists, say this explicitly */
       if (sa->fdSocket == -1)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* pass socket to caller */
       *fd = sa->fdSocket;
  @@ -1506,19 +1615,19 @@
   {
       int n;
       sa_rc_t rv;
  -    size_t res;
  +    int res;
   
       /* argument sanity check(s) */
       if (sa == NULL || cpBuf == NULL || nBufReq == 0)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* reading is only possible for stream communication */ 
       if (sa->eType != SA_TYPE_STREAM)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* at least a connection has to exist */
       if (sa->fdSocket == -1)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* perform read operation */
       rv = SA_OK;
  @@ -1537,7 +1646,7 @@
       else {
           /* user-space buffered I/O */
           res = 0;
  -        while (1) {
  +        for (;;) {
               if (nBufReq <= sa->nReadLen) {
                   /* buffer holds enough data, so just use this */
                   memmove(cpBuf, sa->cpReadBuf, nBufReq);
  @@ -1592,9 +1701,9 @@
   
       /* pass number of actually read bytes to caller */ 
       if (nBufRes != NULL)
  -        *nBufRes = res;
  +        *nBufRes = (size_t)res;
   
  -    return rv;
  +    return SA_RC(rv);
   }
   
   /* read data from socket until [CR]LF (convinience function) */
  @@ -1607,15 +1716,15 @@
   
       /* argument sanity check(s) */
       if (sa == NULL || cpBuf == NULL || nBufReq == 0)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* reading is only possible for stream communication */ 
       if (sa->eType != SA_TYPE_STREAM)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* at least a connection has to exist */
       if (sa->fdSocket == -1)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* we just perform a plain sa_read() per character, because if
          buffers are enabled, this is not as stupid as it looks at the first
  @@ -1639,7 +1748,7 @@
       if (nBufRes != NULL)
           *nBufRes = res;
   
  -    return rv;
  +    return SA_RC(rv);
   }
   
   /* internal raw write operation */
  @@ -1683,21 +1792,21 @@
   /* write data to socket */
   sa_rc_t sa_write(sa_t *sa, const char *cpBuf, size_t nBufReq, size_t *nBufRes)
   {
  -    size_t n;
  -    size_t res;
  +    int n;
  +    int res;
       sa_rc_t rv;
   
       /* argument sanity check(s) */
       if (sa == NULL || cpBuf == NULL || nBufReq == 0)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* writing is only possible for stream communication */ 
       if (sa->eType != SA_TYPE_STREAM)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* at least a connection has to exist */
       if (sa->fdSocket == -1)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       rv = SA_OK;
       if (sa->nWriteSize == 0) {
  @@ -1740,9 +1849,9 @@
   
       /* pass number of actually written bytes to caller */
       if (nBufRes != NULL)
  -        *nBufRes = res;
  +        *nBufRes = (size_t)res;
   
  -    return rv;
  +    return SA_RC(rv);
   }
   
   /* output callback function context for sa_writef() */
  @@ -1771,15 +1880,15 @@
   
       /* argument sanity check(s) */
       if (sa == NULL || cpFmt == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* writing is only possible for stream communication */ 
       if (sa->eType != SA_TYPE_STREAM)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* at least a connection has to exist */
       if (sa->fdSocket == -1)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* format string into temporary buffer */
       va_start(ap, cpFmt);
  @@ -1794,20 +1903,20 @@
   /* flush write/outgoing I/O buffer */
   sa_rc_t sa_flush(sa_t *sa)
   {
  -    size_t n;
  +    int n;
       sa_rc_t rv;
   
       /* argument sanity check(s) */
       if (sa == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* flushing is only possible for stream communication */ 
       if (sa->eType != SA_TYPE_STREAM)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* at least a connection has to exist */
       if (sa->fdSocket == -1)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* try to flush buffer */
       rv = SA_OK;
  @@ -1825,7 +1934,7 @@
           }
           sa->nWriteLen = 0;
       }
  -    return rv;
  +    return SA_RC(rv);
   }
   
   /* shutdown a socket connection */
  @@ -1835,15 +1944,15 @@
   
       /* argument sanity check(s) */
       if (sa == NULL || flags == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* shutdown is only possible for stream communication */ 
       if (sa->eType != SA_TYPE_STREAM)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* at least a connection has to exist */
       if (sa->fdSocket == -1)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* determine flags for shutdown(2) */
       how = 0;
  @@ -1854,11 +1963,11 @@
       else if (strcmp(flags, "rw") == 0)
           how = SHUT_RDWR;
       else
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* perform shutdown operation on underlying socket */
       if (shutdown(sa->fdSocket, how) == -1)
  -        return SA_ERR_SYS;
  +        return SA_RC(SA_ERR_SYS);
   
       return SA_OK;
   }
  @@ -1879,15 +1988,15 @@
   
       /* argument sanity check(s) */
       if (sa == NULL || buf == NULL || buflen == 0 || raddr == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* receiving is only possible for datagram communication */ 
       if (sa->eType != SA_TYPE_DATAGRAM)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* at least a sa_bind() has to be performed */
       if (sa->fdSocket == -1)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* if timeout is enabled, perform explicit/smart blocking instead 
          of implicitly/hard blocking in the recvfrom(2) system call */
  @@ -1901,14 +2010,14 @@
           if (n == 0) 
               errno = ETIMEDOUT;
           if (n <= 0)
  -            return SA_ERR_SYS;
  +            return SA_RC(SA_ERR_SYS);
       }
   
       /* perform receive operation on underlying socket */
       sa_len = sizeof(sa_buf);
       if ((n = SA_SC_CALL_6(sa, recvfrom, sa->fdSocket, buf, buflen, 0, 
                             (struct sockaddr *)&sa_buf, &sa_len)) == -1)
  -        return SA_ERR_SYS;
  +        return SA_RC(SA_ERR_SYS);
   
       /* create result address object */
       if ((rv = sa_addr_create(raddr)) != SA_OK)
  @@ -1934,11 +2043,11 @@
   
       /* argument sanity check(s) */
       if (sa == NULL || buf == NULL || buflen == 0 || raddr == NULL)
  -        return SA_ERR_ARG;
  +        return SA_RC(SA_ERR_ARG);
   
       /* sending is only possible for datagram communication */ 
       if (sa->eType != SA_TYPE_DATAGRAM)
  -        return SA_ERR_USE;
  +        return SA_RC(SA_ERR_USE);
   
       /* lazy creation of underlying socket */
       if (sa->fdSocket == -1)
  @@ -1957,12 +2066,12 @@
           if (n == 0) 
               errno = ETIMEDOUT;
           if (n <= 0)
  -            return SA_ERR_SYS;
  +            return SA_RC(SA_ERR_SYS);
       }
   
       /* perform send operation on underlying socket */
       if ((n = SA_SC_CALL_6(sa, sendto, sa->fdSocket, buf, buflen, 0, raddr->saBuf, raddr->slBuf)) == -1)
  -        return SA_ERR_SYS;
  +        return SA_RC(SA_ERR_SYS);
   
       /* pass actual number of sent bytes to caller */
       if (bufdone != NULL)
  Index: ossp-pkg/l2/l2_ut_sa.h
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 l2_ut_sa.h
  --- ossp-pkg/l2/l2_ut_sa.h	30 Nov 2001 09:51:09 -0000	1.13
  +++ ossp-pkg/l2/l2_ut_sa.h	11 Oct 2002 16:00:48 -0000	1.14
  @@ -1,11 +1,11 @@
   /*
  -**  SA - OSSP Socket Abstraction Library
  -**  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  OSSP sa - Socket Abstraction
  +**  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
  -**  This file is part of OSSP SA, a socket abstraction library which
  -**  can be found at http://www.ossp.org/pkg/sa/.
  +**  This file is part of OSSP sa, a socket abstraction library which
  +**  can be found at http://www.ossp.org/pkg/lib/sa/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  @@ -43,7 +43,7 @@
   
   /* fallback for POSIX socklen_t */
   #if defined(HAVE_CONFIG_H) && !defined(HAVE_SOCKLEN_T)
  -#define socklen_t int
  +typedef int socklen_t;
   #endif
   
   /* embedding support */
  @@ -138,6 +138,9 @@
   /* list of options */
   typedef enum {
       SA_OPTION_NAGLE,
  +    SA_OPTION_LINGER,
  +    SA_OPTION_REUSEADDR,
  +    SA_OPTION_REUSEPORT,
       SA_OPTION_NONBLOCK
   } sa_option_t;
   
  @@ -151,6 +154,9 @@
       SA_SYSCALL_RECVFROM,
       SA_SYSCALL_SENDTO
   } sa_syscall_t;
  +
  +/* unique library identifier */
  +extern const char sa_id[];
   
   /* address object operations */
   sa_rc_t sa_addr_create  (sa_addr_t **saa);
  Index: ossp-pkg/l2/l2_version.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 l2_version.c
  --- ossp-pkg/l2/l2_version.c	30 Jul 2002 19:08:25 -0000	1.5
  +++ ossp-pkg/l2/l2_version.c	11 Oct 2002 16:00:48 -0000	1.6
  @@ -8,7 +8,7 @@
   #ifndef _L2_VERSION_C_
   #define _L2_VERSION_C_
   
  -#define L2_VERSION 0x009200
  +#define L2_VERSION 0x009201
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _L2_VERSION_C_AS_HEADER_
   
   l2_version_t l2_version = {
  -    0x009200,
  -    "0.9.0",
  -    "0.9.0 (30-Jul-2002)",
  -    "This is OSSP l2, Version 0.9.0 (30-Jul-2002)",
  -    "OSSP l2 0.9.0 (30-Jul-2002)",
  -    "OSSP l2/0.9.0",
  -    "@(#)OSSP l2 0.9.0 (30-Jul-2002)",
  -    "$Id: l2_version.c,v 1.5 2002/07/30 19:08:25 rse Exp $"
  +    0x009201,
  +    "0.9.1",
  +    "0.9.1 (11-Oct-2002)",
  +    "This is OSSP l2, Version 0.9.1 (11-Oct-2002)",
  +    "OSSP l2 0.9.1 (11-Oct-2002)",
  +    "OSSP l2/0.9.1",
  +    "@(#)OSSP l2 0.9.1 (11-Oct-2002)",
  +    "$Id: l2_version.c,v 1.6 2002/10/11 16:00:48 rse Exp $"
   };
   
   #endif /* _L2_VERSION_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Fri Oct 11 18:06:13 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2FEA57654A; Fri, 11 Oct 2002 18:06:13 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new news.txt ossp-web/pkg/lib index.wml ossp-web/...
Message-Id: <20021011160613.2FEA57654A@mail.ossp.org>
Date: Fri, 11 Oct 2002 18:06:13 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   11-Oct-2002 18:06:13
  Branch: HEAD                             Handle: 2002101117061101

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/l2     index.wml

  Log:
    release OSSP l2 0.9.1

  Summary:
    Revision    Changes     Path
    1.27        +1  -0      ossp-web/new/news.txt
    1.30        +1  -1      ossp-web/pkg/lib/index.wml
    1.7         +2  -2      ossp-web/pkg/lib/l2/index.wml
  ____________________________________________________________________________

  Index: ossp-web/new/news.txt
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 news.txt
  --- ossp-web/new/news.txt	11 Oct 2002 15:32:29 -0000	1.26
  +++ ossp-web/new/news.txt	11 Oct 2002 16:06:11 -0000	1.27
  @@ -1,3 +1,4 @@
  +11-Oct-2002: Released L<OSSP l2> 0.9.1
   11-Oct-2002: Released L<OSSP sa> 0.9.2
   07-Sep-2002: Released L<OSSP fsl> 1.0.3
   19-Aug-2002: Released T<OSSP shiela> 0.9.2
  Index: ossp-web/pkg/lib/index.wml
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 index.wml
  --- ossp-web/pkg/lib/index.wml	11 Oct 2002 15:32:29 -0000	1.29
  +++ ossp-web/pkg/lib/index.wml	11 Oct 2002 16:06:11 -0000	1.30
  @@ -30,7 +30,7 @@
   			done=100 stable=1.0.0 unstable=none>
     <pkg_item name="l2" longname="OSSP l2" type="lib"
               desc="Flexible Logging"
  -			done=95 stable=none unstable=0.9.0>
  +			done=95 stable=none unstable=0.9.1>
     <pkg_item name="var" longname="OSSP var" type="lib"
               desc="Variable Expansion"
   			done=95 stable=none unstable=0.9.0>
  Index: ossp-web/pkg/lib/l2/index.wml
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 index.wml
  --- ossp-web/pkg/lib/l2/index.wml	2 Oct 2002 12:44:38 -0000	1.6
  +++ ossp-web/pkg/lib/l2/index.wml	11 Oct 2002 16:06:12 -0000	1.7
  @@ -39,7 +39,7 @@
   <pkg_status
       name="l2" assign="rse"
       stable="none"    stable_date="none"
  -    unstable="0.9.0" unstable_date="30-Jul-2002"
  +    unstable="0.9.1" unstable_date="11-Oct-2002"
   	done=95>
   
   <h2>Source</h2>
  @@ -49,7 +49,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/l2/
       directory=$(FTP_ROOT_DIR)/pkg/lib/l2/
       files="l2-*.tar.gz" 
  -	stable="none" unstable="l2-0.9.0.tar.gz">
  +	stable="none" unstable="l2-0.9.1.tar.gz">
   	
   <h2>Donation</h2>
   

From ossp-cvs-owner@ossp.org  Mon Oct 14 10:04:47 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 70F8776555; Mon, 14 Oct 2002 10:04:47 +0200 (CEST)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.c al.h al_test.c
Message-Id: <20021014080447.70F8776555@mail.ossp.org>
Date: Mon, 14 Oct 2002 10:04:47 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   14-Oct-2002 10:04:47
  Branch: HEAD                             Handle: 2002101409044600

  Added files:
    ossp-pkg/sio            al.c al.h al_test.c

  Log:
    first iteration through buffer data type

  Summary:
    Revision    Changes     Path
    1.1         +675 -0     ossp-pkg/sio/al.c
    1.1         +45 -0      ossp-pkg/sio/al.h
    1.1         +76 -0      ossp-pkg/sio/al_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.c
  ============================================================
  $ cvs update -p -r1.1 al.c
  #include <stddef.h>
  #include <stdlib.h>
  #include <string.h>
  
  #define LIST(elem) \
      struct { elem *head, *tail; }
  #define NODE(elem) \
      struct { elem *next, *prev; }
  
  #define HEAD(q,l)       ((q)->l.head)
  #define TAIL(q,l)       ((q)->l.tail)
  #define NEXT(n,l)       ((n)->l.next)
  #define PREV(n,l)       ((n)->l.prev)
  
  #define LISTINIT(q,l) \
  do { \
      HEAD(q,l) = NULL; \
      TAIL(q,l) = NULL;  \
  } while(0)
  
  #define NODEINIT(n,l) \
  do { \
      NEXT(n,l) = NULL; \
      PREV(n,l) = NULL; \
  } while(0)
  
  #define ADDTAIL(q,l,n) \
  do { \
      if (TAIL(q,l)) { \
          NEXT(TAIL(q,l),l) = (n); \
          PREV(n,l) = TAIL(q,l); \
      } else { \
          PREV(n,l) = NULL; \
          HEAD(q,l) = (n); \
      } \
      TAIL(q,l) = (n); \
      NEXT(n,l) = NULL; \
  } while (0)
  
  #define ADDHEAD(q,l,n) \
  do { \
      if (HEAD(q,l)) { \
          PREV(HEAD(q,l),l) = (n); \
          NEXT(n,l) = HEAD(q,l); \
      } else { \
          NEXT(n,l) = NULL; \
          TAIL(q,l) = (n); \
      } \
      HEAD(q,l) = (n); \
      PREV(n,l) = NULL; \
  } while (0)
  
  #define REMHEAD(q,l,n) \
  do { \
      (n) = HEAD(q,l); \
      if (n) { \
          HEAD(q,l) = NEXT(n,l); \
          if (HEAD(q,l)) \
              PREV(HEAD(q,l),l) = NULL; \
          else \
              TAIL(q,l) = NULL; \
      } \
  } while(0)
  
  #define REMTAIL(q,l,n) \
  do { \
      (n) = TAIL(q,l); \
      if (n) { \
          TAIL(q,l) = PREV(n,l); \
          if (TAIL(q,l)) \
              NEXT(TAIL(q,l),l) = NULL; \
          else \
              HEAD(q,l) = NULL; \
      } \
  } while(0)
  
  #define REMOVE(q,l,n) \
  do { \
      if (PREV(n,l)) \
          NEXT(PREV(n,l),l) = NEXT(n,l); \
      if (NEXT(n,l)) \
          PREV(NEXT(n,l),l) = PREV(n,l); \
  } while (0)
  
  #define ISEMPTY(q,l)      (HEAD(q,l) == NULL)
  #define FOREACH(q,l,n)    for (n = HEAD(q,l); n; n = NEXT(n,l))
  #define FOREACHR(q,l,n)   for (n = TAIL(q,l); n; n = PREV(n,l))
  #define FOREACHD(q,l,n,r) for (n = TAIL(q,l); n && (r = PREV(n,l), 1); n = r)
  
  #include "al.h"
  
  /* unique library identifier */
  const char al_id[] = "OSSP al";
  
  /* support for OSSP ex based exception throwing */
  #ifdef WITH_EX
  #include "ex.h"
  #define AL_RC(rv) \
      (  (rv) != AL_OK && (ex_catching && !ex_shielding) \
       ? (ex_throw(al_id, NULL, (rv)), (rv)) : (rv) )
  #else
  #define AL_RC(rv) (rv)
  #endif /* WITH_EX */
  
  struct al_st {
      LIST(al_chunk_t) chunks;
      size_t           bytes;
  };
  
  struct al_chunk_st {
      NODE(al_chunk_t) chunks;
      al_buffer_t      *buf;
      size_t           begin, end;
  };
  
  struct al_buffer_st {
      unsigned char  *mem;
      size_t         size;
      int            usecount;
      int            freemem;
  };
  
  struct al_tx_st {
      al_td_t       dir;
      al_chunk_t    *cur;
      size_t        skip;
      size_t        togo;
      al_chunk_t    view;
  };
  
  /* number of bytes described by a chunk */
  #define AL_CHUNK_LEN(alc) \
      ((alc)->end - (alc)->begin)
  
  /* memory pointer into a chunk, offset must be less than length */
  #define AL_CHUNK_PTR(alc, off) \
      ((alc)->buf->mem + (alc)->begin + (off))
  
  /* number of bytes of a span that are stored in a chunk */
  #define AL_CHUNK_SPAN(alc, off, n) \
      ((n) == AL_BYTES_ALL || (n) > AL_CHUNK_LEN(alc) - (off) ? \
      AL_CHUNK_LEN(alc) - (off) : (n))
  
  /* number of bytes a chunk can be grown to the end */
  #define AL_CHUNK_RESERVE(alc) \
      ((alc) \
      ? (alc)->buf->usecount > 1 ? 0 : (alc)->buf->size - (alc)->end \
      : 0)
  
  /* grow chunk to the end */
  #define AL_RESIZE(al, alc, n) \
      do { (alc)->end += n; (al)->bytes += (n); } while (0)
  
  /* number of bytes a chunk can be grown to the beginning */
  #define AL_CHUNK_PRESERVE(alc) \
      ((alc) \
      ? (alc)->buf->usecount > 1 ? 0 : (alc)->begin \
      : 0)
  
  /* grow chunk to the beginning */
  #define AL_PRESIZE(al, alc, n) \
      do { (alc)->begin -= n; (al)->bytes += (n); } while (0)
  
  #define AL_NEW_BUFFERSIZE 100
  #define AL_MAX_FREECHUNKS 500
  
  /*
   * allocate backing store and its control structure from heap
   * can be freed when usecount drops to zero
   */
  static
  al_rc_t new_buffer(al_buffer_t **bufp)
  {
      size_t n = AL_NEW_BUFFERSIZE;
      al_buffer_t *buf;
  
      if ((buf = (al_buffer_t *)malloc(sizeof(al_buffer_t))) == NULL)
          return AL_ERR_MEM;
  
      if ((buf->mem = malloc(n)) == NULL) {
          free(buf);
          return AL_ERR_MEM;
      }
  
      buf->freemem  = 1;
      buf->size     = n;
      buf->usecount = 0;
  
      *bufp = buf;
      return AL_OK;
  }
  
  static
  al_rc_t dispose_buffer(al_buffer_t *buf)
  {
      /* must not happen */
      if (buf->usecount != 0)
          return AL_ERR_INT;
  
      if (buf->freemem)
          free(buf->mem);
  
      free(buf);
      return AL_OK;
  }
  
  /*
   * allocate only control structure for backing store from heap
   * and attach to existing memory
   * only the control structure will be freed later
   */
  static
  al_rc_t make_buffer(char *p, size_t n, al_buffer_t **bufp)
  {
      al_buffer_t *buf;
  
      if ((buf = (al_buffer_t *)malloc(sizeof(al_buffer_t))) == NULL)
          return AL_ERR_MEM;
  
      buf->mem      = p;
  
      buf->freemem  = 0;
      buf->size     = n;
      buf->usecount = 0;
  
      *bufp = buf;
      return AL_OK;
  }
  
  /*
   * allocate chunks from heap and attach to backing store
   * keep some freed chunks in a freelist to avoid expensive malloc()
   * and excessive fragmentation
   * maintain usage count of backing store
   * free backing store when no longer in use, this also includes
   * the case where new_chunk fails and the buffer has no other
   * users
   */
  static
  struct {
      LIST(al_chunk_t) chunks;
  } alc_freelist;
  static
  int alc_freecount = 0;
  
  static
  al_rc_t new_chunk(al_buffer_t *buf, al_chunk_t **alcp)
  {
      al_chunk_t *alc;
  
      if (ISEMPTY(&alc_freelist, chunks)) {
          if ((alc = (al_chunk_t *)malloc(sizeof(al_chunk_t))) == NULL) {
              if (buf->usecount == 0)
                  dispose_buffer(buf);
              return AL_ERR_MEM;
          }
      } else {
          REMHEAD(&alc_freelist, chunks, alc);
          --alc_freecount;
      }
  
      NODEINIT(alc, chunks);
      alc->buf   = buf;
      alc->begin = 0;
      alc->end   = 0;
  
      ++buf->usecount;
  
      *alcp = alc;
      return AL_OK;
  }
  
  static
  void dispose_chunk(al_chunk_t *alc)
  {
          --alc->buf->usecount;
          if (alc->buf->usecount == 0)
              dispose_buffer(alc->buf);
          alc->buf = NULL;
  
          /* stop freelist from growing infinitely */
          if (alc_freecount >= AL_MAX_FREECHUNKS) {
              free(alc);
          } else {
              ADDTAIL(&alc_freelist, chunks, alc);
              ++alc_freecount;
          }
  }
  
  /*
   *  find chunk that represents a particular offset
   *  if off is negative, treat it as relative offset from the end
   *  a reference to the chunk is stored in *alcp
   *  the relative offset into the chunk is stored in *skipp
   *  return AL_ERR_EOF when no such chunk can be found
   */
  static
  al_rc_t al_seek(al_t *al, size_t off, al_chunk_t **alcp, size_t *skipp)
  {
      al_chunk_t *cur;
      size_t pos;
      size_t chunksize;
  
      if (off >= 0) {
          pos = 0;
          FOREACH(al,chunks,cur) {
              chunksize = AL_CHUNK_LEN(cur);
              if (pos <= off && off < pos+chunksize) {
                  *alcp  = cur;
                  *skipp = off - pos;
                  return AL_OK;
              }
              if (pos+chunksize >= off)
                  return AL_ERR_EOF;
              pos += chunksize;
          }
      } else {
          off += al->bytes;
          pos  = al->bytes;
          FOREACHR(al,chunks,cur) {
              chunksize = AL_CHUNK_LEN(cur);
              pos -= chunksize;
              if (pos <= off && off < pos+chunksize) {
                  *alcp  = cur;
                  *skipp = off - pos;
                  return AL_OK;
              }
              if (pos+chunksize < off)
                  return AL_ERR_EOF;
          }
      }
  
      return AL_ERR_EOF;
  }
  
  #if 0
  #include <stdio.h>
  static
  void dump(al_t *al)
  {
      al_chunk_t *cur;
  
      printf("AL: %x\n", al);
      FOREACH(al,chunks,cur) {
          printf(" C: %x (%d @ %x + %d < %d)\n",
              cur,
              cur->buf->size,cur->buf->mem,
              cur->begin,cur->end);
      }
      printf("--\n\n");
  }
  #endif
  
  /******************************************************************/
  
  /*
   * allocate an empty assembly line
   * dispose all chunks and all allocated backing store
   */
  al_rc_t al_create(al_t **alp)
  {
      al_t *al;
  
      /* argument sanity check(s) */
      if (alp == NULL)
              return AL_RC(AL_ERR_ARG);
  
      /* allocate and initialize new assembly line object */
      if ((al = (al_t *)malloc(sizeof(al_t))) == NULL)
              return AL_RC(AL_ERR_MEM);
  
      LISTINIT(al,chunks);
      al->bytes = 0;
  
      /* pass object to caller */
      *alp = al;
  
      return AL_OK;
  }
  
  al_rc_t al_destroy(al_t *al)
  {
      al_chunk_t *cur, *pred;
  
      /* argument sanity check(s) */
      if (al == NULL)
              return AL_RC(AL_ERR_ARG);
  
      /* free chunks and backing store */
      FOREACHD(al,chunks,cur,pred) {
          dispose_chunk(cur);
      }
  
      /* free object itself */
      free(al);
  
      return AL_OK;
  }
  
  al_rc_t al_append_bytes(al_t *al, const char *src, size_t n)
  {
      al_rc_t rc;
      al_chunk_t *cur;
      al_buffer_t *buf;
      size_t res, step;
      char *dst;
  
      cur = TAIL(al,chunks);
      res = AL_CHUNK_RESERVE(cur);
  
      while (n > 0) {
          if (res == 0) {
              rc = new_buffer(&buf);
              /* XXX handle error */
              rc = new_chunk(buf,&cur);
              /* XXX handle error */
              res = AL_CHUNK_RESERVE(cur);
              ADDTAIL(al, chunks, cur);
          }
          step = n;
          if (step > res)
              step = res;
  
          dst = AL_CHUNK_PTR(cur, AL_CHUNK_LEN(cur));
          memcpy(dst, src, step);
  
          src += step;
          AL_RESIZE(al, cur, step);
          n   -= step;
          res = AL_CHUNK_RESERVE(cur);
      }
  
      return AL_OK;
  }
  
  al_rc_t al_prepend_bytes(al_t *al, const char *src, size_t n)
  {
      al_rc_t rc;
      al_chunk_t *cur;
      al_buffer_t *buf;
      size_t res, step;
      char *dst;
  
      cur = HEAD(al,chunks);
      res = AL_CHUNK_PRESERVE(cur);
  
      src += n;
  
      while (n > 0) {
          if (res == 0) {
              rc = new_buffer(&buf);
              if (rc != AL_OK) return rc;
              rc = new_chunk(buf,&cur);
              if (rc != AL_OK) return rc;
              res = AL_CHUNK_PRESERVE(cur);
              ADDHEAD(al, chunks, cur);
          }
          step = n;
          if (step > res)
              step = res;
  
          src -= step;
          AL_RESIZE(al, cur, step);
          n   -= step;
          res = AL_CHUNK_RESERVE(cur);
  
          dst = AL_CHUNK_PTR(cur, 0);
          memcpy(dst, src, step);
      }
  
      return AL_OK;
  }
  
  al_rc_t al_attach_buffer(al_t *al, char *p, size_t n)
  {
      al_rc_t rc;
      al_buffer_t *buf;
      al_chunk_t  *cur;
  
      rc = make_buffer(p, n, &buf);
      if (rc != AL_OK) return rc;
      rc = new_chunk(buf, &cur);
      if (rc != AL_OK) return rc;
      ADDTAIL(al, chunks, cur);
  
      /* validate data in buffer */
      AL_RESIZE(al, cur, n);
  
      return AL_OK;
  }
  
  al_rc_t al_splice(al_t *al, size_t off, size_t n, al_t *tal)
  {
      al_rc_t rc;
      al_chunk_t *cur, *next;
      size_t skip, len, step;
  
      if (n == AL_BYTES_ALL) n = al->bytes - off;
  
      rc = al_seek(al, off, &cur, &skip);
      if (rc != AL_OK) return rc;
  printf("initial seek %d -> %p + %d\n",off,cur,skip);
      while (n > 0) {
          /* check if a partial chunk was selected */
          next = NEXT(cur, chunks);
          len  = AL_CHUNK_LEN(cur);
          if (skip > 0 || n < len - skip) {
              /* copy span from src chunk to target */
              step = len - skip;
              if (n < step)
                  step = n;
  printf("partial copy (%p + %d) + %d bytes\n",cur,skip,step);
              if (tal != NULL)
                  al_append_bytes(tal, AL_CHUNK_PTR(cur, skip), step);
              /* cut span from src chunk */
              if (skip == 0) {
  printf("shrink at begin\n");
                  AL_PRESIZE(al, cur, -step);
              } else {
                  /* align trailing bytes */
                  if (len > (skip+step)) {
  printf("align chunk buffer (%d + %d) <- %d\n",skip,step,len-(skip+step));
                      memmove(
                          AL_CHUNK_PTR(cur, skip),
                          AL_CHUNK_PTR(cur, skip+step),
                          len - (skip+step)
                      );
                  }
  printf("shrink at end\n");
                  AL_RESIZE(al, cur, -step);
              }
          } else {
              step = len;
  printf("hand over chunk %d\n",step);
              REMOVE(al, chunks, cur);
              al->bytes -= step;
              if (tal != NULL) {
                  ADDTAIL(tal, chunks, cur);
                  tal->bytes += step;
              } else {
                  dispose_chunk(cur);
              }
          }
          n   -= step;
          off += step;
          cur  = next;
          skip = 0;
      }
  
      return AL_ERR_INT;
  }
  
  al_rc_t al_truncate(al_t *al, size_t off, size_t n)
  {
      return al_splice(al, off, n, NULL);
  }
  
  al_rc_t al_traverse(al_t *al, size_t off, size_t n, al_td_t dir, al_tx_t *txp)
  {
      al_rc_t rc;
  
      if (n == AL_BYTES_ALL) n = al->bytes - off;
  
      txp->cur = NULL;
  
      rc = al_seek(al, off, &txp->cur, &txp->skip);
      if (rc != AL_OK) return AL_OK;
  
      txp->dir  = dir;
      txp->togo = n;
  
      return AL_OK;
  }
  
  al_rc_t al_traverse_next(al_t *al, al_tx_t *txp, al_chunk_t **alcp)
  {
      size_t step;
  
      if (txp->cur == NULL)
          return AL_ERR_EOF;
  
      step = AL_CHUNK_LEN(txp->cur);
      if (step > txp->togo)
          step = txp->togo;
  
      /*
       * synthetic chunk which is NOT maintained in usecount
       * MUST NOT BE USED for modifications to chunk list
       * MUST NOT BE USED for modifications to chunk size
       * ALLOWED is read access to chunk content
       * ALLOWED is modification in place of chunk content
       */
      txp->view        = *(txp->cur);
      txp->view.begin += txp->skip;
      txp->view.end    = txp->view.begin + step;
  
      switch (txp->dir) {
      case AL_FORWARD:
          txp->cur   = NEXT(txp->cur,chunks);
          txp->togo -= step;
          break;
      case AL_BACKWARD:
          txp->cur   = PREV(txp->cur,chunks);
          txp->togo -= step;
          break;
      }
  
      *alcp = &txp->view;
      return AL_OK;
  }
  
  al_rc_t al_traverse_cb(al_t *al, size_t off, size_t n, al_td_t dir,
                         al_rc_t (*cb)(al_chunk_t *, void *), void *u)
  {
      al_rc_t rc;
      al_tx_t tx;
      al_chunk_t *view;
  
      rc = al_traverse(al, off, n, dir, &tx);
      if (rc != AL_OK) return rc;
  
      while ((rc = al_traverse_next(al, &tx, &view)) == AL_OK) {
          rc = cb(view, u);
          if (rc != AL_OK)
              break;
      }
  
      if (rc != AL_ERR_EOF)
          return rc;
  
      return AL_OK;
  }
  
  al_rc_t al_flatten(al_t *al, size_t off, size_t n, char *dst)
  {
      al_rc_t rc;
      al_tx_t tx;
      al_chunk_t *view;
      size_t step;
  
      rc = al_traverse(al, off, n, AL_FORWARD, &tx);
      if (rc != AL_OK) return rc;
  
      while ((rc = al_traverse_next(al, &tx, &view)) == AL_OK) {
          step = AL_CHUNK_LEN(view);
          memmove(dst, AL_CHUNK_PTR(view,0), step);
          dst += step;
      }
  
      if (rc != AL_ERR_EOF)
          return rc;
  
      return AL_OK;
  }
  
  size_t al_bytes(const al_t *al)
  {
      return al->bytes;
  }
  
  size_t al_chunk_len(al_chunk_t *alc)
  {
      return AL_CHUNK_LEN(alc);
  }
  
  size_t al_chunk_span(al_chunk_t *alc, size_t off, size_t n)
  {
      return AL_CHUNK_SPAN(alc, off, n);
  }
  
  char *al_chunk_ptr(al_chunk_t *alc, size_t off)
  {
      return AL_CHUNK_PTR(alc, off);
  }
  
  Index: ossp-pkg/sio/al.h
  ============================================================
  $ cvs update -p -r1.1 al.h
  typedef enum {
      AL_OK,
      AL_ERR_ARG,
      AL_ERR_MEM,
      AL_ERR_EOF,
      AL_ERR_INT
  } al_rc_t;
  
  struct al_st;
  typedef struct al_st al_t;
  
  struct al_chunk_st;
  typedef struct al_chunk_st al_chunk_t;
  
  struct al_buffer_st;
  typedef struct al_buffer_st al_buffer_t;
  
  typedef enum {
      AL_FORWARD,
      AL_BACKWARD
  } al_td_t;
  
  #define AL_BYTES_ALL (-1)
  
  struct al_tx_st;
  typedef struct al_tx_st al_tx_t;
  
  al_rc_t al_create(al_t **alp);
  al_rc_t al_destroy(al_t *al);
  al_rc_t al_append_bytes(al_t *al, const char *src, size_t n);
  al_rc_t al_prepend_bytes(al_t *al, const char *src, size_t n);
  al_rc_t al_attach_buffer(al_t *al, char *p, size_t n);
  al_rc_t al_splice(al_t *al, size_t off, size_t n, al_t *tal);
  al_rc_t al_truncate(al_t *al, size_t off, size_t n);
  al_rc_t al_traverse(al_t *al, size_t off, size_t n, al_td_t dir, al_tx_t *txp);
  al_rc_t al_traverse_next(al_t *al, al_tx_t *txp, al_chunk_t **alcp);
  al_rc_t al_traverse_cb(al_t *al, size_t off, size_t n, al_td_t dir,
                         al_rc_t (*cb)(al_chunk_t *, void *), void *u);
  al_rc_t al_flatten(al_t *al, size_t off, size_t n, char *dst);
  
  size_t al_bytes(const al_t *al);
  size_t al_chunk_len(al_chunk_t *alc);
  size_t al_chunk_span(al_chunk_t *alc, size_t off, size_t n);
  char *al_chunk_ptr(al_chunk_t *alc, size_t off);
  
  Index: ossp-pkg/sio/al_test.c
  ============================================================
  $ cvs update -p -r1.1 al_test.c
  #include <stdlib.h>
  #include <stdio.h>
  #include <string.h>
  
  #include "al.h"
  
  #define S(s) s, strlen(s)
  
  al_rc_t printchunk(al_chunk_t *alc, void *u)
  {
      printf("C: %8p = %8p + %d\n",
          alc,
          al_chunk_ptr(alc, 0),
          al_chunk_len(alc));
  
      return AL_OK;
  }
  
  #define DUMP(tag,al) do {\
  printf("+DUMP(%s)\n",tag);\
  al_traverse_cb(al, 0, al_bytes(al), AL_FORWARD, printchunk, NULL);\
  printf("-DUMP(%s)\n\n",tag);\
  } while (0)
  
  int main()
  {
      al_t *al, *al2;
      char buf[10000];
      size_t n;
      char baf[] = "Mittendrin\n";
      int i;
  
      al_create(&al);
      al_create(&al2);
  
      al_append_bytes(al, S("Hello world\n"));
      al_attach_buffer(al, S(baf));
  
      for (i=0; i<500; ++i)
          al_append_bytes(al, S("Huhu world\n"));
  
      al_append_bytes(al, S("Hello world\n"));
  
  
      DUMP("ALL",al);
  #if 1
      al_splice(al, 102, 200, al2);
  #else
      al_splice(al, 102, 200, NULL);
  #endif
      DUMP("SPLICED",al);
      DUMP("BUFFER",al2);
  
      printf("RESULT\n");
      n = al_bytes(al);
      if (n > 10000) n = 10000;
      al_flatten(al, 0, n, buf);
      fwrite(">>", 2, 1, stdout);
      fwrite(buf, n, 1, stdout);
      fwrite("<<", 2, 1, stdout);
  
      printf("BUFFER\n");
      n = al_bytes(al2);
      if (n > 10000) n = 10000;
      al_flatten(al2, 0, n, buf);
      fwrite(">>", 2, 1, stdout);
      fwrite(buf, n, 1, stdout);
      fwrite("<<", 2, 1, stdout);
  
  
      al_destroy(al2);
      al_destroy(al);
  
  
      return 0;
  }

From ossp-cvs-owner@ossp.org  Mon Oct 14 10:05:50 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CE84476555; Mon, 14 Oct 2002 10:05:49 +0200 (CEST)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio BRAINSTORM.txt
Message-Id: <20021014080549.CE84476555@mail.ossp.org>
Date: Mon, 14 Oct 2002 10:05:49 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   14-Oct-2002 10:05:49
  Branch: HEAD                             Handle: 2002101409054900

  Modified files:
    ossp-pkg/sio            BRAINSTORM.txt

  Log:
    more brains storming

  Summary:
    Revision    Changes     Path
    1.2         +61 -0      ossp-pkg/sio/BRAINSTORM.txt
  ____________________________________________________________________________

  Index: ossp-pkg/sio/BRAINSTORM.txt
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 BRAINSTORM.txt
  --- ossp-pkg/sio/BRAINSTORM.txt	7 Oct 2002 13:49:31 -0000	1.1
  +++ ossp-pkg/sio/BRAINSTORM.txt	14 Oct 2002 08:05:49 -0000	1.2
  @@ -302,3 +302,64 @@
   int         sio_pop      (sio_t *sio);
   int         sio_swap     (sio_t *sio1, sio_t *sio2);
   
  +###########################################################################
  +
  +mlelstv sez:
  +
  +sio pipe:
  +- two chains of handlers for reading and writing
  +- "bucket brigade"-buffers, degenerates to static buffer(ptr,len)
  +- handler degenerates to (handle,read(2),write(2)) ?
  +
  +dispatching:
  +- sio_strategy(chain)
  +  h = chain;
  +  while (h) {
  +      if h->call(sio) // reader or writer
  +        h = h->next;
  +      else
  +        h = h->prev;
  +  }
  +
  +? eof/error propagation -> global flags, (byte offset ?)
  +
  +- sio_write(buf)
  +  push sio->writebuffer, buf;
  +  sio_strategy(sio->writers);
  +  buf = pop sio->writebuffer;
  +
  +- sio_read(bound)
  +  sio->readbuffer->append(buf);
  +  sio_strategy(sio->readers);
  +  pop sio->readbuffer;
  +
  +
  +buffer:
  +- bytestream(policy for chunks ?)
  +- drop bytestream
  +- append bytes to bytestream (ptr, len) == copy
  +- prepend bytes to bytestream (ptr, len) == copy
  +- append static buffer to bytestream
  +- splice bytestream into new bytestream (offset, length, dest)
  +- truncate bytestream (offset, length) == splice but drop data
  +- traverse chunks of bytestream forward (offset, length)
  +- traverse chunks of bytestream reverse (offset, length)
  +- splice last chunk from bytestream (convenience function)
  +- splice first chunk from bytestream (convenience function)
  +- flatten chunks of bytestream into target buffer (convenience function)
  +- garbage collection ? pullup ? seek cache ?
  +- read consistency while traversing ?
  +
  +bytestream, chunks, buffer
  +
  +chunk memory allocator needed
  +buffer memory allocator ?
  +
  +---
  +
  +stdio "emulation"
  +
  +fixed buffer <-> bytestream
  +EOF handling
  +
  +

From ossp-cvs-owner@ossp.org  Mon Oct 14 11:17:21 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 96BF5765DC; Mon, 14 Oct 2002 11:17:21 +0200 (CEST)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.c
Message-Id: <20021014091721.96BF5765DC@mail.ossp.org>
Date: Mon, 14 Oct 2002 11:17:21 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   14-Oct-2002 11:17:21
  Branch: HEAD                             Handle: 2002101410172100

  Modified files:
    ossp-pkg/sio            al.c

  Log:
    added memory allocation policy
    needs to pass through context to lower functions

  Summary:
    Revision    Changes     Path
    1.2         +45 -28     ossp-pkg/sio/al.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 al.c
  --- ossp-pkg/sio/al.c	14 Oct 2002 08:04:46 -0000	1.1
  +++ ossp-pkg/sio/al.c	14 Oct 2002 09:17:21 -0000	1.2
  @@ -102,9 +102,19 @@
   #define AL_RC(rv) (rv)
   #endif /* WITH_EX */
   
  +typedef struct {
  +    void   *(*malloc)(size_t);
  +    void   (*free)(void *);
  +    void   *(*balloc)(size_t);
  +    void   (*bfree)(void *);
  +    size_t new_buffersize;
  +    int    max_freechunks;
  +} al_memops_t;
  +
   struct al_st {
       LIST(al_chunk_t) chunks;
       size_t           bytes;
  +    al_memops_t      m;
   };
   
   struct al_chunk_st {
  @@ -161,24 +171,21 @@
   #define AL_PRESIZE(al, alc, n) \
       do { (alc)->begin -= n; (al)->bytes += (n); } while (0)
   
  -#define AL_NEW_BUFFERSIZE 100
  -#define AL_MAX_FREECHUNKS 500
  -
   /*
    * allocate backing store and its control structure from heap
    * can be freed when usecount drops to zero
    */
   static
  -al_rc_t new_buffer(al_buffer_t **bufp)
  +al_rc_t new_buffer(al_t *al, al_buffer_t **bufp)
   {
  -    size_t n = AL_NEW_BUFFERSIZE;
  +    size_t n = al->m.new_buffersize;
       al_buffer_t *buf;
   
  -    if ((buf = (al_buffer_t *)malloc(sizeof(al_buffer_t))) == NULL)
  +    if ((buf = (al_buffer_t *)(al->m.malloc)(sizeof(al_buffer_t))) == NULL)
           return AL_ERR_MEM;
   
  -    if ((buf->mem = malloc(n)) == NULL) {
  -        free(buf);
  +    if ((buf->mem = (al->m.balloc)(n)) == NULL) {
  +        (al->m.free)(buf);
           return AL_ERR_MEM;
       }
   
  @@ -191,16 +198,16 @@
   }
   
   static
  -al_rc_t dispose_buffer(al_buffer_t *buf)
  +al_rc_t dispose_buffer(al_t *al, al_buffer_t *buf)
   {
       /* must not happen */
       if (buf->usecount != 0)
           return AL_ERR_INT;
   
       if (buf->freemem)
  -        free(buf->mem);
  +        (al->m.bfree)(buf->mem);
   
  -    free(buf);
  +    (al->m.free)(buf);
       return AL_OK;
   }
   
  @@ -210,11 +217,11 @@
    * only the control structure will be freed later
    */
   static
  -al_rc_t make_buffer(char *p, size_t n, al_buffer_t **bufp)
  +al_rc_t make_buffer(al_t *al, char *p, size_t n, al_buffer_t **bufp)
   {
       al_buffer_t *buf;
   
  -    if ((buf = (al_buffer_t *)malloc(sizeof(al_buffer_t))) == NULL)
  +    if ((buf = (al_buffer_t *)(al->m.malloc)(sizeof(al_buffer_t))) == NULL)
           return AL_ERR_MEM;
   
       buf->mem      = p;
  @@ -244,14 +251,14 @@
   int alc_freecount = 0;
   
   static
  -al_rc_t new_chunk(al_buffer_t *buf, al_chunk_t **alcp)
  +al_rc_t new_chunk(al_t *al, al_buffer_t *buf, al_chunk_t **alcp)
   {
       al_chunk_t *alc;
   
       if (ISEMPTY(&alc_freelist, chunks)) {
  -        if ((alc = (al_chunk_t *)malloc(sizeof(al_chunk_t))) == NULL) {
  +        if ((alc = (al_chunk_t *)(al->m.malloc)(sizeof(al_chunk_t))) == NULL) {
               if (buf->usecount == 0)
  -                dispose_buffer(buf);
  +                dispose_buffer(al,buf);
               return AL_ERR_MEM;
           }
       } else {
  @@ -271,16 +278,16 @@
   }
   
   static
  -void dispose_chunk(al_chunk_t *alc)
  +void dispose_chunk(al_t *al, al_chunk_t *alc)
   {
           --alc->buf->usecount;
           if (alc->buf->usecount == 0)
  -            dispose_buffer(alc->buf);
  +            dispose_buffer(al,alc->buf);
           alc->buf = NULL;
   
           /* stop freelist from growing infinitely */
  -        if (alc_freecount >= AL_MAX_FREECHUNKS) {
  -            free(alc);
  +        if (alc_freecount >= al->m.max_freechunks) {
  +            (al->m.free)(alc);
           } else {
               ADDTAIL(&alc_freelist, chunks, alc);
               ++alc_freecount;
  @@ -366,12 +373,21 @@
               return AL_RC(AL_ERR_ARG);
   
       /* allocate and initialize new assembly line object */
  +    /* XXX - what malloc ? */
       if ((al = (al_t *)malloc(sizeof(al_t))) == NULL)
               return AL_RC(AL_ERR_MEM);
   
       LISTINIT(al,chunks);
       al->bytes = 0;
   
  +    /* memory policy */
  +    al->m.malloc = malloc;    /* structure allocation */
  +    al->m.free   = free;
  +    al->m.balloc = malloc;    /* buffer allocation */
  +    al->m.bfree  = free;
  +    al->m.new_buffersize = 4096;
  +    al->m.max_freechunks = 500;
  +
       /* pass object to caller */
       *alp = al;
   
  @@ -388,10 +404,11 @@
   
       /* free chunks and backing store */
       FOREACHD(al,chunks,cur,pred) {
  -        dispose_chunk(cur);
  +        dispose_chunk(al,cur);
       }
   
       /* free object itself */
  +    /* XXX - which free() ? */
       free(al);
   
       return AL_OK;
  @@ -410,9 +427,9 @@
   
       while (n > 0) {
           if (res == 0) {
  -            rc = new_buffer(&buf);
  +            rc = new_buffer(al, &buf);
               /* XXX handle error */
  -            rc = new_chunk(buf,&cur);
  +            rc = new_chunk(al,buf,&cur);
               /* XXX handle error */
               res = AL_CHUNK_RESERVE(cur);
               ADDTAIL(al, chunks, cur);
  @@ -448,9 +465,9 @@
   
       while (n > 0) {
           if (res == 0) {
  -            rc = new_buffer(&buf);
  +            rc = new_buffer(al, &buf);
               if (rc != AL_OK) return rc;
  -            rc = new_chunk(buf,&cur);
  +            rc = new_chunk(al,buf,&cur);
               if (rc != AL_OK) return rc;
               res = AL_CHUNK_PRESERVE(cur);
               ADDHEAD(al, chunks, cur);
  @@ -477,9 +494,9 @@
       al_buffer_t *buf;
       al_chunk_t  *cur;
   
  -    rc = make_buffer(p, n, &buf);
  +    rc = make_buffer(al, p, n, &buf);
       if (rc != AL_OK) return rc;
  -    rc = new_chunk(buf, &cur);
  +    rc = new_chunk(al,buf, &cur);
       if (rc != AL_OK) return rc;
       ADDTAIL(al, chunks, cur);
   
  @@ -538,7 +555,7 @@
                   ADDTAIL(tal, chunks, cur);
                   tal->bytes += step;
               } else {
  -                dispose_chunk(cur);
  +                dispose_chunk(al,cur);
               }
           }
           n   -= step;

From ossp-cvs-owner@ossp.org  Mon Oct 14 14:32:17 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CFF4476555; Mon, 14 Oct 2002 14:32:16 +0200 (CEST)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.c al.h al_test.c
Message-Id: <20021014123216.CFF4476555@mail.ossp.org>
Date: Mon, 14 Oct 2002 14:32:16 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   14-Oct-2002 14:32:16
  Branch: HEAD                             Handle: 2002101413321600

  Modified files:
    ossp-pkg/sio            al.c al.h al_test.c

  Log:
    splice operation
    traversal needs alloc/free function for context
    lost of comments

  Summary:
    Revision    Changes     Path
    1.3         +232 -33    ossp-pkg/sio/al.c
    1.2         +4  -3      ossp-pkg/sio/al.h
    1.2         +79 -26     ossp-pkg/sio/al_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 al.c
  --- ossp-pkg/sio/al.c	14 Oct 2002 09:17:21 -0000	1.2
  +++ ossp-pkg/sio/al.c	14 Oct 2002 12:32:16 -0000	1.3
  @@ -12,6 +12,8 @@
   #define NEXT(n,l)       ((n)->l.next)
   #define PREV(n,l)       ((n)->l.prev)
   
  +#define ISEMPTY(q,l)    (HEAD(q,l) == NULL)
  +
   #define LISTINIT(q,l) \
   do { \
       HEAD(q,l) = NULL; \
  @@ -82,7 +84,41 @@
           PREV(NEXT(n,l),l) = PREV(n,l); \
   } while (0)
   
  -#define ISEMPTY(q,l)      (HEAD(q,l) == NULL)
  +#define INSERT(q,l,i,n) \
  +do { \
  +    if (PREV(i,l)) { \
  +        PREV(n,l) = PREV(i,l); \
  +        NEXT(PREV(i,l),l) = (n); \
  +    } \
  +    PREV(i,l) = (n); \
  +    NEXT(n,l) = (i); \
  +} while (0)
  +
  +#define APPENDLIST(q1,l,q2) \
  +do { \
  +    if (TAIL(q1,l)) { \
  +        NEXT(TAIL(q1,l),l) = HEAD(q2,l); \
  +        PREV(HEAD(q2,l),l) = TAIL(q1,l); \
  +    } else { \
  +        HEAD(q1,l) = HEAD(q2,l); \
  +    } \
  +    TAIL(q1,l) = TAIL(q2,l); \
  +    LISTINIT(q2,l); \
  +} while(0)
  +
  +#define INSERTLIST(q1,l,i,q2) \
  +do { \
  +    if (PREV(i,l)) { \
  +        NEXT(PREV(i,l),l) = HEAD(q2,l); \
  +    } else { \
  +        HEAD(q1,l) = HEAD(q2,l); \
  +    } \
  +    PREV(HEAD(q2,l),l) = PREV(i,l); \
  +    NEXT(TAIL(q2,l),l) = (i); \
  +    PREV(i,l) = TAIL(q2,l); \
  +    LISTINIT(q2,l); \
  +} while(0)
  +
   #define FOREACH(q,l,n)    for (n = HEAD(q,l); n; n = NEXT(n,l))
   #define FOREACHR(q,l,n)   for (n = TAIL(q,l); n; n = PREV(n,l))
   #define FOREACHD(q,l,n,r) for (n = TAIL(q,l); n && (r = PREV(n,l), 1); n = r)
  @@ -173,6 +209,7 @@
   
   /*
    * allocate backing store and its control structure from heap
  + *
    * can be freed when usecount drops to zero
    */
   static
  @@ -278,6 +315,27 @@
   }
   
   static
  +al_rc_t split_chunk(al_t *al, al_chunk_t *orig, size_t off, al_chunk_t **alcp)
  +{
  +    al_rc_t rc;
  +    al_chunk_t *alc;
  +    size_t len = AL_CHUNK_LEN(orig);
  +
  +    if (off < 0 || off > len)
  +        return AL_ERR_ARG;
  +
  +    rc = new_chunk(al, orig->buf, &alc);
  +    if (rc != AL_OK) return rc;
  +
  +    alc->begin  = orig->begin;
  +    alc->end    = orig->begin+off;
  +    orig->begin = alc->end;
  +
  +    *alcp = alc;
  +    return AL_OK;
  +}
  +
  +static
   void dispose_chunk(al_t *al, al_chunk_t *alc)
   {
           --alc->buf->usecount;
  @@ -361,7 +419,7 @@
   /******************************************************************/
   
   /*
  - * allocate an empty assembly line
  + * allocate an empty assembly list
    * dispose all chunks and all allocated backing store
    */
   al_rc_t al_create(al_t **alp)
  @@ -372,7 +430,7 @@
       if (alp == NULL)
               return AL_RC(AL_ERR_ARG);
   
  -    /* allocate and initialize new assembly line object */
  +    /* allocate and initialize new assembly list object */
       /* XXX - what malloc ? */
       if ((al = (al_t *)malloc(sizeof(al_t))) == NULL)
               return AL_RC(AL_ERR_MEM);
  @@ -414,6 +472,9 @@
       return AL_OK;
   }
   
  +/*
  + * copy bytes into buffer, FIFO
  + */
   al_rc_t al_append_bytes(al_t *al, const char *src, size_t n)
   {
       al_rc_t rc;
  @@ -450,6 +511,9 @@
       return AL_OK;
   }
   
  +/*
  + * copy bytes into buffer, LIFO
  + */
   al_rc_t al_prepend_bytes(al_t *al, const char *src, size_t n)
   {
       al_rc_t rc;
  @@ -488,6 +552,14 @@
       return AL_OK;
   }
   
  +/*
  + * append a caller supplied buffer
  + *
  + * buffer must exist until list is destroyed
  + * XXX - buffer can have multiple refs caused by splice operations
  + * XXX - some list operations modify the buffer
  + *
  + */
   al_rc_t al_attach_buffer(al_t *al, char *p, size_t n)
   {
       al_rc_t rc;
  @@ -506,72 +578,167 @@
       return AL_OK;
   }
   
  -al_rc_t al_splice(al_t *al, size_t off, size_t n, al_t *tal)
  +/*
  + *
  + *
  + *
  + */
  +al_rc_t al_splice(al_t *al, size_t off, size_t n, al_t *nal, al_t *tal)
   {
       al_rc_t rc;
       al_chunk_t *cur, *next;
  -    size_t skip, len, step;
  +    size_t pos, skip, len, step;
   
  +    /* simplify API */
       if (n == AL_BYTES_ALL) n = al->bytes - off;
   
  -    rc = al_seek(al, off, &cur, &skip);
  +    pos = off;
  +
  +    /*
  +     * seek to beginning, return EOF when seek position does not exist
  +     * EOD must be a valid seek position so that we can append data
  +     */
  +    rc = al_seek(al, pos, &cur, &skip);
       if (rc != AL_OK) return rc;
  -printf("initial seek %d -> %p + %d\n",off,cur,skip);
  -    while (n > 0) {
  -        /* check if a partial chunk was selected */
  +
  +    /* as long as there is data to move */
  +    while (n > 0 && cur != NULL) {
           next = NEXT(cur, chunks);
           len  = AL_CHUNK_LEN(cur);
  +
  +        /*
  +         * check if partial chunk was selected
  +         * if skip > 0 we have to preserve bytes at the beginning
  +         * if skip == 0 && n < len-skip we have to preserve bytes at the end
  +         */
           if (skip > 0 || n < len - skip) {
  -            /* copy span from src chunk to target */
  -            step = len - skip;
  -            if (n < step)
  -                step = n;
  -printf("partial copy (%p + %d) + %d bytes\n",cur,skip,step);
  +
  +            /* compute number of bytes to process */
  +            step = AL_CHUNK_SPAN(cur, skip, n);
  +
               if (tal != NULL)
                   al_append_bytes(tal, AL_CHUNK_PTR(cur, skip), step);
  -            /* cut span from src chunk */
  +
  +            /*
  +             * cut span from src chunk
  +             * if skip == 0, simply shrink the chunk from the beginning
  +             * if skip > 0, compute number of bytes to preserve,
  +             *              align buffer and shrink chunk from the end
  +             */
               if (skip == 0) {
  -printf("shrink at begin\n");
                   AL_PRESIZE(al, cur, -step);
               } else {
                   /* align trailing bytes */
                   if (len > (skip+step)) {
  -printf("align chunk buffer (%d + %d) <- %d\n",skip,step,len-(skip+step));
                       memmove(
                           AL_CHUNK_PTR(cur, skip),
                           AL_CHUNK_PTR(cur, skip+step),
                           len - (skip+step)
                       );
                   }
  -printf("shrink at end\n");
                   AL_RESIZE(al, cur, -step);
               }
  +
           } else {
  +
  +            /*
  +             * the whole chunk has to be moved, simply move it
  +             * to the target chain
  +             * manual accounting for total size
  +             */
               step = len;
  -printf("hand over chunk %d\n",step);
               REMOVE(al, chunks, cur);
               al->bytes -= step;
               if (tal != NULL) {
                   ADDTAIL(tal, chunks, cur);
                   tal->bytes += step;
               } else {
  -                dispose_chunk(al,cur);
  +                dispose_chunk(al, cur);
               }
  +
           }
           n   -= step;
  -        off += step;
  +        pos += step;
           cur  = next;
           skip = 0;
  +
  +        if (cur == NULL)
  +            break;
       }
   
  -    return AL_ERR_INT;
  +    /*
  +     * now splice in replacement chunks
  +     */
  +    if (nal && !ISEMPTY(nal,chunks)) {
  +        al_chunk_t *ins;
  +
  +        /* rewind */
  +        rc = al_seek(al, off, &ins, &skip);
  +        if (rc != AL_OK) return rc;
  +
  +        if (ins == NULL) {
  +
  +            /*
  +             * simple case where list end is 'replaced'
  +             */
  +            APPENDLIST(al,chunks,nal);
  +
  +        } else {
  +
  +            /*
  +             * if beginning and end were in same chunk we have to split this
  +             * chunk in two for a copyless insert operation
  +             */
  +            if (skip > 0) {
  +                al_chunk_t *twin;
  +                rc = split_chunk(al, ins, skip, &twin);
  +                if (rc != AL_OK) return rc;
  +
  +                INSERT(al,chunks,ins,twin);
  +            }
  +            INSERTLIST(al,chunks,ins,nal);
  +
  +        }
  +
  +        al->bytes += nal->bytes;
  +        nal->bytes = 0;
  +    }
  +
  +
  +    return AL_OK;
  +}
  +
  +/*
  + * list traversal requires a context. It needs to be
  + * malloced to keep its inner structure private
  + */
  +al_rc_t al_txalloc(al_t *al, al_tx_t **txpp)
  +{
  +    al_tx_t *txp;
  +
  +    txp = (al_tx_t*)(al->m.malloc)(sizeof(al_tx_t));
  +    if (txp == NULL)
  +        return AL_ERR_MEM;
  +
  +    *txpp = txp;
  +    return AL_OK;
   }
   
  -al_rc_t al_truncate(al_t *al, size_t off, size_t n)
  +/*
  + * free traversal context using proper policy function
  + */
  +al_rc_t al_txfree(al_t *al, al_tx_t *txp)
   {
  -    return al_splice(al, off, n, NULL);
  +    (al->m.free)(txp);
  +    return AL_OK;
   }
   
  +/*
  + * initiate list traversal
  + *
  + * - do initial seek, fail if position does not exist
  + * - save traversal parameters
  + */
   al_rc_t al_traverse(al_t *al, size_t off, size_t n, al_td_t dir, al_tx_t *txp)
   {
       al_rc_t rc;
  @@ -581,7 +748,7 @@
       txp->cur = NULL;
   
       rc = al_seek(al, off, &txp->cur, &txp->skip);
  -    if (rc != AL_OK) return AL_OK;
  +    if (rc != AL_OK) return rc;
   
       txp->dir  = dir;
       txp->togo = n;
  @@ -589,6 +756,13 @@
       return AL_OK;
   }
   
  +/*
  + * list traversal step
  + *
  + * return EOF if at end of list
  + * clip view chunk to traversal bounds
  + * advance chunk cursor according to traversal direction
  + */
   al_rc_t al_traverse_next(al_t *al, al_tx_t *txp, al_chunk_t **alcp)
   {
       size_t step;
  @@ -626,11 +800,19 @@
       return AL_OK;
   }
   
  +/*
  + * full list traversal with callback
  + *
  + * traversal is aborted when callback return != AL_OK
  + * reaching EOF (and also aborting with AL_ERR_EOF) is not an error
  + *
  + * traversal context is kept on stack (XXX ?)
  + */
   al_rc_t al_traverse_cb(al_t *al, size_t off, size_t n, al_td_t dir,
                          al_rc_t (*cb)(al_chunk_t *, void *), void *u)
   {
       al_rc_t rc;
  -    al_tx_t tx;
  +    al_tx_t tx;                /* XXX - private tx structure on stack */
       al_chunk_t *view;
   
       rc = al_traverse(al, off, n, dir, &tx);
  @@ -648,21 +830,31 @@
       return AL_OK;
   }
   
  -al_rc_t al_flatten(al_t *al, size_t off, size_t n, char *dst)
  +/*
  + * full list traversal with data copy to linear buffer
  + *
  + * returns actual number of bytes copied
  + *
  + * traversal context is kept on stack (XXX ?)
  + */
  +al_rc_t al_flatten(al_t *al, size_t off, size_t n, char *dst, size_t *lenp)
   {
       al_rc_t rc;
  -    al_tx_t tx;
  +    al_tx_t tx;                /* XXX - private tx structure on stack */
       al_chunk_t *view;
  -    size_t step;
  +    size_t step, total;
   
       rc = al_traverse(al, off, n, AL_FORWARD, &tx);
       if (rc != AL_OK) return rc;
   
  +    total = 0;
       while ((rc = al_traverse_next(al, &tx, &view)) == AL_OK) {
           step = AL_CHUNK_LEN(view);
           memmove(dst, AL_CHUNK_PTR(view,0), step);
  -        dst += step;
  +        dst   += step;
  +        total += step;
       }
  +    *lenp = total;
   
       if (rc != AL_ERR_EOF)
           return rc;
  @@ -670,21 +862,28 @@
       return AL_OK;
   }
   
  +/*
  + * relay macros to caller
  + *
  + * al_bytes      - total number of bytes in list
  + * al_chunk_len  - number of bytes in chunk
  + * al_chunk_span - clip interval (off,off+n( against chunk length
  + * al_chunk_ptr  - return memory pointer to byte within chunk
  + *
  + * off must be a valid offset within (0,len(
  + */
   size_t al_bytes(const al_t *al)
   {
       return al->bytes;
   }
  -
   size_t al_chunk_len(al_chunk_t *alc)
   {
       return AL_CHUNK_LEN(alc);
   }
  -
   size_t al_chunk_span(al_chunk_t *alc, size_t off, size_t n)
   {
       return AL_CHUNK_SPAN(alc, off, n);
   }
  -
   char *al_chunk_ptr(al_chunk_t *alc, size_t off)
   {
       return AL_CHUNK_PTR(alc, off);
  Index: ossp-pkg/sio/al.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 al.h
  --- ossp-pkg/sio/al.h	14 Oct 2002 08:04:46 -0000	1.1
  +++ ossp-pkg/sio/al.h	14 Oct 2002 12:32:16 -0000	1.2
  @@ -30,13 +30,14 @@
   al_rc_t al_append_bytes(al_t *al, const char *src, size_t n);
   al_rc_t al_prepend_bytes(al_t *al, const char *src, size_t n);
   al_rc_t al_attach_buffer(al_t *al, char *p, size_t n);
  -al_rc_t al_splice(al_t *al, size_t off, size_t n, al_t *tal);
  -al_rc_t al_truncate(al_t *al, size_t off, size_t n);
  +al_rc_t al_splice(al_t *al, size_t off, size_t n, al_t *nal, al_t *tal);
  +al_rc_t al_txalloc(al_t *al, al_tx_t **txpp);
  +al_rc_t al_txfree(al_t *al, al_tx_t *txp);
   al_rc_t al_traverse(al_t *al, size_t off, size_t n, al_td_t dir, al_tx_t *txp);
   al_rc_t al_traverse_next(al_t *al, al_tx_t *txp, al_chunk_t **alcp);
   al_rc_t al_traverse_cb(al_t *al, size_t off, size_t n, al_td_t dir,
                          al_rc_t (*cb)(al_chunk_t *, void *), void *u);
  -al_rc_t al_flatten(al_t *al, size_t off, size_t n, char *dst);
  +al_rc_t al_flatten(al_t *al, size_t off, size_t n, char *dst, size_t *lenp);
   
   size_t al_bytes(const al_t *al);
   size_t al_chunk_len(al_chunk_t *alc);
  Index: ossp-pkg/sio/al_test.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 al_test.c
  --- ossp-pkg/sio/al_test.c	14 Oct 2002 08:04:46 -0000	1.1
  +++ ossp-pkg/sio/al_test.c	14 Oct 2002 12:32:16 -0000	1.2
  @@ -1,6 +1,7 @@
   #include <stdlib.h>
   #include <stdio.h>
   #include <string.h>
  +#include <ctype.h>
   
   #include "al.h"
   
  @@ -8,10 +9,28 @@
   
   al_rc_t printchunk(al_chunk_t *alc, void *u)
   {
  -    printf("C: %8p = %8p + %d\n",
  -        alc,
  -        al_chunk_ptr(alc, 0),
  -        al_chunk_len(alc));
  +    char buf[40];
  +    char   *p = al_chunk_ptr(alc,0);
  +    size_t  n = al_chunk_len(alc);
  +    int     k;
  +
  +    k=0;
  +    while (n > 0 && k < sizeof(buf)-5) {
  +        if (isprint(*p)) {
  +            buf[k++] = *p;
  +        } else {
  +            sprintf(buf+k,"<%2.2x>",*p);
  +            k += 4;
  +        }
  +        ++p;
  +        --n;
  +    }
  +    buf[k] = '\0';
  +
  +    printf("C: %08lx + %-6d = %s\n",
  +        (long)al_chunk_ptr(alc, 0),
  +        al_chunk_len(alc),
  +        buf);
   
       return AL_OK;
   }
  @@ -22,16 +41,50 @@
   printf("-DUMP(%s)\n\n",tag);\
   } while (0)
   
  -int main()
  +void print(const char *tag, al_t *al)
   {
  -    al_t *al, *al2;
       char buf[10000];
  -    size_t n;
  +    size_t n, len;
  +
  +    printf("%s\n",tag);
  +    n = al_bytes(al);
  +    if (n > sizeof(buf)) n = sizeof(buf);
  +    al_flatten(al, 0, n, buf, &len);
  +    fwrite(">>", 2, 1, stdout);
  +    fwrite(buf, len, 1, stdout);
  +    fwrite("<<", 2, 1, stdout);
  +    printf("\n\n");
  +}
  +
  +void checklen(al_t *al)
  +{
  +    al_tx_t *tx; 
  +    al_chunk_t *cur;
  +    size_t total, total2;
  +
  +    total = 0;
  +
  +    al_txalloc(al, &tx);
  +    al_traverse(al, 0, -1, AL_FORWARD, tx);
  +    while (al_traverse_next(al, tx, &cur) == AL_OK)
  +        total += al_chunk_len(cur);
  +    al_txfree(al, tx);
  +
  +    total2 = al_bytes(al);
  +
  +    if (total != total2)
  +        printf("ERROR: al_bytes(%p): %d != %d\n",al,total,total2);
  +}
  +
  +int main()
  +{
  +    al_t *al, *al2, *al3;
       char baf[] = "Mittendrin\n";
       int i;
   
       al_create(&al);
       al_create(&al2);
  +    al_create(&al3);
   
       al_append_bytes(al, S("Hello world\n"));
       al_attach_buffer(al, S(baf));
  @@ -41,33 +94,33 @@
   
       al_append_bytes(al, S("Hello world\n"));
   
  +    al_append_bytes(al3, S("HUHU WORLD\n"));
  +
  +
  +    DUMP("DATA",al);
  +    DUMP("BUFFER",al2);
  +    DUMP("REPLACEMENT", al3);
   
  -    DUMP("ALL",al);
   #if 1
  -    al_splice(al, 102, 200, al2);
  +    al_splice(al, 102, 200, al3, al2);
   #else
  -    al_splice(al, 102, 200, NULL);
  +    al_splice(al, 102, 200, NULL, NULL);
   #endif
  -    DUMP("SPLICED",al);
  -    DUMP("BUFFER",al2);
   
  -    printf("RESULT\n");
  -    n = al_bytes(al);
  -    if (n > 10000) n = 10000;
  -    al_flatten(al, 0, n, buf);
  -    fwrite(">>", 2, 1, stdout);
  -    fwrite(buf, n, 1, stdout);
  -    fwrite("<<", 2, 1, stdout);
  +    checklen(al);
  +    checklen(al2);
  +    checklen(al3);
   
  -    printf("BUFFER\n");
  -    n = al_bytes(al2);
  -    if (n > 10000) n = 10000;
  -    al_flatten(al2, 0, n, buf);
  -    fwrite(">>", 2, 1, stdout);
  -    fwrite(buf, n, 1, stdout);
  -    fwrite("<<", 2, 1, stdout);
  +    DUMP("SPLICED",al);
  +    print("RESULT", al);
  +
  +    DUMP("BUFFER",al2);
  +    print("BUFFER", al2);
   
  +    DUMP("REPLACEMENT", al3);
  +    print("REPLACEMENT", al3);
   
  +    al_destroy(al3);
       al_destroy(al2);
       al_destroy(al);
   

From ossp-cvs-owner@ossp.org  Mon Oct 14 15:34:26 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A828576555; Mon, 14 Oct 2002 15:34:25 +0200 (CEST)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.c al.h al_test.c
Message-Id: <20021014133425.A828576555@mail.ossp.org>
Date: Mon, 14 Oct 2002 15:34:25 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   14-Oct-2002 15:34:25
  Branch: HEAD                             Handle: 2002101414342500

  Modified files:
    ossp-pkg/sio            al.c al.h al_test.c

  Log:
    code cleanup
    get rid of AL_ALL_BYTES, not very useful

  Summary:
    Revision    Changes     Path
    1.4         +44 -22     ossp-pkg/sio/al.c
    1.3         +1  -2      ossp-pkg/sio/al.h
    1.3         +36 -17     ossp-pkg/sio/al_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 al.c
  --- ossp-pkg/sio/al.c	14 Oct 2002 12:32:16 -0000	1.3
  +++ ossp-pkg/sio/al.c	14 Oct 2002 13:34:25 -0000	1.4
  @@ -2,6 +2,8 @@
   #include <stdlib.h>
   #include <string.h>
   
  +/****************************************************************************/
  +
   #define LIST(elem) \
       struct { elem *head, *tail; }
   #define NODE(elem) \
  @@ -123,6 +125,8 @@
   #define FOREACHR(q,l,n)   for (n = TAIL(q,l); n; n = PREV(n,l))
   #define FOREACHD(q,l,n,r) for (n = TAIL(q,l); n && (r = PREV(n,l), 1); n = r)
   
  +/****************************************************************************/
  +
   #include "al.h"
   
   /* unique library identifier */
  @@ -184,7 +188,7 @@
   
   /* number of bytes of a span that are stored in a chunk */
   #define AL_CHUNK_SPAN(alc, off, n) \
  -    ((n) == AL_BYTES_ALL || (n) > AL_CHUNK_LEN(alc) - (off) ? \
  +    ((n) > AL_CHUNK_LEN(alc) - (off) ? \
       AL_CHUNK_LEN(alc) - (off) : (n))
   
   /* number of bytes a chunk can be grown to the end */
  @@ -357,41 +361,50 @@
    *  if off is negative, treat it as relative offset from the end
    *  a reference to the chunk is stored in *alcp
    *  the relative offset into the chunk is stored in *skipp
  + *  return AL_OK and *alcp == NULL if positioned exactly to end of list
    *  return AL_ERR_EOF when no such chunk can be found
    */
   static
   al_rc_t al_seek(al_t *al, size_t off, al_chunk_t **alcp, size_t *skipp)
   {
       al_chunk_t *cur;
  -    size_t pos;
  +    size_t pos, end;
       size_t chunksize;
   
       if (off >= 0) {
           pos = 0;
           FOREACH(al,chunks,cur) {
               chunksize = AL_CHUNK_LEN(cur);
  -            if (pos <= off && off < pos+chunksize) {
  +            end = pos+chunksize;
  +            if (pos <= off && off < end) {
                   *alcp  = cur;
                   *skipp = off - pos;
                   return AL_OK;
               }
  -            if (pos+chunksize >= off)
  -                return AL_ERR_EOF;
  -            pos += chunksize;
  +            if (end > off)
  +                break;
  +            pos = end;
  +        }
  +        /* seek to EOF position is ok */
  +        if (pos == off) {
  +            *alcp  = NULL;
  +            *skipp = 0;
  +            return AL_OK;
           }
       } else {
           off += al->bytes;
           pos  = al->bytes;
           FOREACHR(al,chunks,cur) {
               chunksize = AL_CHUNK_LEN(cur);
  +            end  = pos;
               pos -= chunksize;
  -            if (pos <= off && off < pos+chunksize) {
  +            if (pos <= off && off < end) {
                   *alcp  = cur;
                   *skipp = off - pos;
                   return AL_OK;
               }
  -            if (pos+chunksize < off)
  -                return AL_ERR_EOF;
  +            if (pos < off)
  +                break;
           }
       }
   
  @@ -416,7 +429,7 @@
   }
   #endif
   
  -/******************************************************************/
  +/****************************************************************************/
   
   /*
    * allocate an empty assembly list
  @@ -589,19 +602,15 @@
       al_chunk_t *cur, *next;
       size_t pos, skip, len, step;
   
  -    /* simplify API */
  -    if (n == AL_BYTES_ALL) n = al->bytes - off;
  -
  -    pos = off;
  -
       /*
        * seek to beginning, return EOF when seek position does not exist
        * EOD must be a valid seek position so that we can append data
        */
  -    rc = al_seek(al, pos, &cur, &skip);
  +    rc = al_seek(al, off, &cur, &skip);
       if (rc != AL_OK) return rc;
   
       /* as long as there is data to move */
  +    pos = off;
       while (n > 0 && cur != NULL) {
           next = NEXT(cur, chunks);
           len  = AL_CHUNK_LEN(cur);
  @@ -661,9 +670,6 @@
           pos += step;
           cur  = next;
           skip = 0;
  -
  -        if (cur == NULL)
  -            break;
       }
   
       /*
  @@ -704,7 +710,6 @@
           nal->bytes = 0;
       }
   
  -
       return AL_OK;
   }
   
  @@ -743,8 +748,6 @@
   {
       al_rc_t rc;
   
  -    if (n == AL_BYTES_ALL) n = al->bytes - off;
  -
       txp->cur = NULL;
   
       rc = al_seek(al, off, &txp->cur, &txp->skip);
  @@ -887,5 +890,24 @@
   char *al_chunk_ptr(al_chunk_t *alc, size_t off)
   {
       return AL_CHUNK_PTR(alc, off);
  +}
  +
  +/*
  + * convert error code into human readable form
  + */
  +const char *al_error(al_rc_t rc)
  +{
  +    const char *mess;
  +
  +    switch (rc) {
  +    case AL_OK:       mess = "Everything Ok"; break;
  +    case AL_ERR_ARG:  mess = "Invalid Argument"; break;
  +    case AL_ERR_MEM:  mess = "Not Enough Memory"; break;
  +    case AL_ERR_EOF:  mess = "End Of Data"; break;
  +    case AL_ERR_INT:  mess = "Internal Error"; break;
  +    default:          mess = "Invalid Result Code"; break;
  +    }
  +
  +    return mess;
   }
   
  Index: ossp-pkg/sio/al.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 al.h
  --- ossp-pkg/sio/al.h	14 Oct 2002 12:32:16 -0000	1.2
  +++ ossp-pkg/sio/al.h	14 Oct 2002 13:34:25 -0000	1.3
  @@ -20,8 +20,6 @@
       AL_BACKWARD
   } al_td_t;
   
  -#define AL_BYTES_ALL (-1)
  -
   struct al_tx_st;
   typedef struct al_tx_st al_tx_t;
   
  @@ -44,3 +42,4 @@
   size_t al_chunk_span(al_chunk_t *alc, size_t off, size_t n);
   char *al_chunk_ptr(al_chunk_t *alc, size_t off);
   
  +const char *al_error(al_rc_t rc);
  Index: ossp-pkg/sio/al_test.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 al_test.c
  --- ossp-pkg/sio/al_test.c	14 Oct 2002 12:32:16 -0000	1.2
  +++ ossp-pkg/sio/al_test.c	14 Oct 2002 13:34:25 -0000	1.3
  @@ -7,17 +7,16 @@
   
   #define S(s) s, strlen(s)
   
  -al_rc_t printchunk(al_chunk_t *alc, void *u)
  +const char *fill(char *p, int n)
   {
  -    char buf[40];
  -    char   *p = al_chunk_ptr(alc,0);
  -    size_t  n = al_chunk_len(alc);
  -    int     k;
  +    static char buf[4 * 80 + 1];
  +    int k;
   
       k=0;
       while (n > 0 && k < sizeof(buf)-5) {
           if (isprint(*p)) {
  -            buf[k++] = *p;
  +            buf[k] = *p;
  +            k += 1;
           } else {
               sprintf(buf+k,"<%2.2x>",*p);
               k += 4;
  @@ -27,10 +26,26 @@
       }
       buf[k] = '\0';
   
  -    printf("C: %08lx + %-6d = %s\n",
  +    return (const char *)buf;
  +}
  +
  +al_rc_t printchunk(al_chunk_t *alc, void *u)
  +{
  +    size_t len, pre, post;
  +
  +    len = al_chunk_len(alc);
  +    pre  = 20; if (pre > len) pre = len;
  +    post = 20; if (post > len-pre) post = len-pre;
  +
  +    printf("C: %08lx + %-6d = ",
           (long)al_chunk_ptr(alc, 0),
  -        al_chunk_len(alc),
  -        buf);
  +        al_chunk_len(alc));
  +    fputs(fill(al_chunk_ptr(alc,0),pre), stdout);
  +    if (post > 0) {
  +        fputs(" .. ", stdout);
  +        fputs(fill(al_chunk_ptr(alc,len-post),post), stdout);
  +    }
  +    fputs("\n", stdout);
   
       return AL_OK;
   }
  @@ -43,17 +58,22 @@
   
   void print(const char *tag, al_t *al)
   {
  -    char buf[10000];
  +    char *buf;
       size_t n, len;
   
  -    printf("%s\n",tag);
       n = al_bytes(al);
  -    if (n > sizeof(buf)) n = sizeof(buf);
  +    buf = (char *)malloc(n);
  +    if (buf == NULL) abort();
  +
       al_flatten(al, 0, n, buf, &len);
  +
  +    printf("%s = %d of %d\n",tag,len,n);
       fwrite(">>", 2, 1, stdout);
       fwrite(buf, len, 1, stdout);
       fwrite("<<", 2, 1, stdout);
       printf("\n\n");
  +
  +    free(buf);
   }
   
   void checklen(al_t *al)
  @@ -78,6 +98,7 @@
   
   int main()
   {
  +    al_rc_t rc;
       al_t *al, *al2, *al3;
       char baf[] = "Mittendrin\n";
       int i;
  @@ -96,23 +117,21 @@
   
       al_append_bytes(al3, S("HUHU WORLD\n"));
   
  -
       DUMP("DATA",al);
       DUMP("BUFFER",al2);
       DUMP("REPLACEMENT", al3);
   
   #if 1
  -    al_splice(al, 102, 200, al3, al2);
  -#else
  -    al_splice(al, 102, 200, NULL, NULL);
  +    rc = al_splice(al, al_bytes(al)-500, 500, al3, al2);
   #endif
  +    printf("splice result: %d (%s)\n\n",rc,al_error(rc));
   
       checklen(al);
       checklen(al2);
       checklen(al3);
   
       DUMP("SPLICED",al);
  -    print("RESULT", al);
  +    print("SPLICED", al);
   
       DUMP("BUFFER",al2);
       print("BUFFER", al2);

From ossp-cvs-owner@ossp.org  Mon Oct 14 15:45:47 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8E837765E0; Mon, 14 Oct 2002 15:45:47 +0200 (CEST)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.c
Message-Id: <20021014134547.8E837765E0@mail.ossp.org>
Date: Mon, 14 Oct 2002 15:45:47 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   14-Oct-2002 15:45:47
  Branch: HEAD                             Handle: 2002101414454700

  Modified files:
    ossp-pkg/sio            al.c

  Log:
    stop traversal at span boundary
    code cleanup

  Summary:
    Revision    Changes     Path
    1.5         +6  -1      ossp-pkg/sio/al.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 al.c
  --- ossp-pkg/sio/al.c	14 Oct 2002 13:34:25 -0000	1.4
  +++ ossp-pkg/sio/al.c	14 Oct 2002 13:45:47 -0000	1.5
  @@ -770,7 +770,10 @@
   {
       size_t step;
   
  -    if (txp->cur == NULL)
  +    if (txp->togo <= 0)     /* XXX - togo can be negative from bad input */
  +        return AL_ERR_EOF;
  +
  +    if (txp->cur == NULL)   /* premature EOF */
           return AL_ERR_EOF;
   
       step = AL_CHUNK_LEN(txp->cur);
  @@ -846,6 +849,8 @@
       al_tx_t tx;                /* XXX - private tx structure on stack */
       al_chunk_t *view;
       size_t step, total;
  +
  +    *lenp = 0; /* keep caller on safe side */
   
       rc = al_traverse(al, off, n, AL_FORWARD, &tx);
       if (rc != AL_OK) return rc;

From ossp-cvs-owner@ossp.org  Mon Oct 14 17:26:05 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B9422765DC; Mon, 14 Oct 2002 17:26:04 +0200 (CEST)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.c al_test.c
Message-Id: <20021014152604.B9422765DC@mail.ossp.org>
Date: Mon, 14 Oct 2002 17:26:04 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   14-Oct-2002 17:26:04
  Branch: HEAD                             Handle: 2002101416260400

  Modified files:
    ossp-pkg/sio            al.c al_test.c

  Log:
    INSERT/REMOVE didn't maintain list header
    test code

  Summary:
    Revision    Changes     Path
    1.6         +32 -9      ossp-pkg/sio/al.c
    1.4         +14 -5      ossp-pkg/sio/al_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 al.c
  --- ossp-pkg/sio/al.c	14 Oct 2002 13:45:47 -0000	1.5
  +++ ossp-pkg/sio/al.c	14 Oct 2002 15:26:04 -0000	1.6
  @@ -1,6 +1,10 @@
  +#include <assert.h>
   #include <stddef.h>
   #include <stdlib.h>
   #include <string.h>
  +#ifdef TEST
  +#include <stdio.h>
  +#endif
   
   /****************************************************************************/
   
  @@ -82,16 +86,24 @@
   do { \
       if (PREV(n,l)) \
           NEXT(PREV(n,l),l) = NEXT(n,l); \
  +    else \
  +        HEAD(q,l) = NEXT(n,l); \
       if (NEXT(n,l)) \
           PREV(NEXT(n,l),l) = PREV(n,l); \
  +    else \
  +        TAIL(q,l) = PREV(n,l); \
  +    NEXT(n,l) = NULL; \
  +    PREV(n,l) = NULL; \
   } while (0)
   
   #define INSERT(q,l,i,n) \
   do { \
       if (PREV(i,l)) { \
  -        PREV(n,l) = PREV(i,l); \
           NEXT(PREV(i,l),l) = (n); \
  +    } else { \
  +        HEAD(q,l) = (n); \
       } \
  +    PREV(n,l) = PREV(i,l); \
       PREV(i,l) = (n); \
       NEXT(n,l) = (i); \
   } while (0)
  @@ -342,6 +354,8 @@
   static
   void dispose_chunk(al_t *al, al_chunk_t *alc)
   {
  +        assert(NEXT(alc,chunks) == NULL && PREV(alc,chunks) == NULL);
  +
           --alc->buf->usecount;
           if (alc->buf->usecount == 0)
               dispose_buffer(al,alc->buf);
  @@ -411,20 +425,24 @@
       return AL_ERR_EOF;
   }
   
  -#if 0
  -#include <stdio.h>
  +#ifdef TEST
   static
   void dump(al_t *al)
   {
       al_chunk_t *cur;
  +    size_t total;
   
  -    printf("AL: %x\n", al);
  +    printf("AL: %p\n", al);
  +    total = 0;
       FOREACH(al,chunks,cur) {
  -        printf(" C: %x (%d @ %x + %d < %d)\n",
  +        printf(" C: %p (%d @ %p + %d < %d (use=%d))\n",
               cur,
               cur->buf->size,cur->buf->mem,
  -            cur->begin,cur->end);
  +            cur->begin,cur->end,
  +            cur->buf->usecount);
  +        total += AL_CHUNK_LEN(cur);
       }
  +    printf("size = %d == %d\n",al->bytes,total);
       printf("--\n\n");
   }
   #endif
  @@ -456,7 +474,11 @@
       al->m.free   = free;
       al->m.balloc = malloc;    /* buffer allocation */
       al->m.bfree  = free;
  +#ifdef TEST
  +    al->m.new_buffersize = 42;
  +#else
       al->m.new_buffersize = 4096;
  +#endif
       al->m.max_freechunks = 500;
   
       /* pass object to caller */
  @@ -475,6 +497,7 @@
   
       /* free chunks and backing store */
       FOREACHD(al,chunks,cur,pred) {
  +        REMOVE(al,chunks,cur);
           dispose_chunk(al,cur);
       }
   
  @@ -658,11 +681,11 @@
               step = len;
               REMOVE(al, chunks, cur);
               al->bytes -= step;
  -            if (tal != NULL) {
  +            if (tal == NULL) {
  +                dispose_chunk(al, cur);
  +            } else {
                   ADDTAIL(tal, chunks, cur);
                   tal->bytes += step;
  -            } else {
  -                dispose_chunk(al, cur);
               }
   
           }
  Index: ossp-pkg/sio/al_test.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 al_test.c
  --- ossp-pkg/sio/al_test.c	14 Oct 2002 13:34:25 -0000	1.3
  +++ ossp-pkg/sio/al_test.c	14 Oct 2002 15:26:04 -0000	1.4
  @@ -76,7 +76,7 @@
       free(buf);
   }
   
  -void checklen(al_t *al)
  +void checklen(const char *tag, al_t *al)
   {
       al_tx_t *tx; 
       al_chunk_t *cur;
  @@ -93,7 +93,8 @@
       total2 = al_bytes(al);
   
       if (total != total2)
  -        printf("ERROR: al_bytes(%p): %d != %d\n",al,total,total2);
  +        printf("ERROR: al_bytes(%s=%p): count %d != sum %d\n",
  +            tag,al,total,total2);
   }
   
   int main()
  @@ -126,9 +127,9 @@
   #endif
       printf("splice result: %d (%s)\n\n",rc,al_error(rc));
   
  -    checklen(al);
  -    checklen(al2);
  -    checklen(al3);
  +    checklen("SPLICED",al);
  +    checklen("BUFFER",al2);
  +    checklen("REPLACEMENT",al3);
   
       DUMP("SPLICED",al);
       print("SPLICED", al);
  @@ -139,8 +140,16 @@
       DUMP("REPLACEMENT", al3);
       print("REPLACEMENT", al3);
   
  +    printf("free REPLACEMENT\n");
  +    fflush(stdout);
       al_destroy(al3);
  +
  +    printf("free BUFFER\n");
  +    fflush(stdout);
       al_destroy(al2);
  +
  +    printf("free SPLICED\n");
  +    fflush(stdout);
       al_destroy(al);
   
   

From ossp-cvs-owner@ossp.org  Mon Oct 14 17:41:38 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E55FC76555; Mon, 14 Oct 2002 17:41:37 +0200 (CEST)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.c al.h al_test.c
Message-Id: <20021014154137.E55FC76555@mail.ossp.org>
Date: Mon, 14 Oct 2002 17:41:37 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   14-Oct-2002 17:41:37
  Branch: HEAD                             Handle: 2002101416413700

  Modified files:
    ossp-pkg/sio            al.c al.h al_test.c

  Log:
    al_copy function, like al_flatten but into a target assembly list

  Summary:
    Revision    Changes     Path
    1.7         +32 -0      ossp-pkg/sio/al.c
    1.4         +1  -0      ossp-pkg/sio/al.h
    1.5         +13 -3      ossp-pkg/sio/al_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 al.c
  --- ossp-pkg/sio/al.c	14 Oct 2002 15:26:04 -0000	1.6
  +++ ossp-pkg/sio/al.c	14 Oct 2002 15:41:37 -0000	1.7
  @@ -615,8 +615,14 @@
   }
   
   /*
  + * this is the central function to manipulate assembly lists
    *
  + * cut arbitrary spans from list into a destination buffer (or drop it)
  + * insert (destructive move) content from another list into the cut
    *
  + * this is analog to perls splice function, except that
  + * -> the output is not stored in the target buffer but is appended
  + * -> the replacement data is moved and not copied.
    *
    */
   al_rc_t al_splice(al_t *al, size_t off, size_t n, al_t *nal, al_t *tal)
  @@ -886,6 +892,32 @@
           total += step;
       }
       *lenp = total;
  +
  +    if (rc != AL_ERR_EOF)
  +        return rc;
  +
  +    return AL_OK;
  +}
  +
  +/*
  + * full list traversal with data copy to target assembly list
  + *
  + * traversal context is kept on stack (XXX ?)
  + */
  +al_rc_t al_copy(al_t *al, size_t off, size_t n, al_t *tal)
  +{
  +    al_rc_t rc;
  +    al_tx_t tx;                /* XXX - private tx structure on stack */
  +    al_chunk_t *view;
  +    size_t step;
  +
  +    rc = al_traverse(al, off, n, AL_FORWARD, &tx);
  +    if (rc != AL_OK) return rc;
  +
  +    while ((rc = al_traverse_next(al, &tx, &view)) == AL_OK) {
  +        step = AL_CHUNK_LEN(view);
  +        al_append_bytes(tal, AL_CHUNK_PTR(view,0), step);
  +    }
   
       if (rc != AL_ERR_EOF)
           return rc;
  Index: ossp-pkg/sio/al.h
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 al.h
  --- ossp-pkg/sio/al.h	14 Oct 2002 13:34:25 -0000	1.3
  +++ ossp-pkg/sio/al.h	14 Oct 2002 15:41:37 -0000	1.4
  @@ -36,6 +36,7 @@
   al_rc_t al_traverse_cb(al_t *al, size_t off, size_t n, al_td_t dir,
                          al_rc_t (*cb)(al_chunk_t *, void *), void *u);
   al_rc_t al_flatten(al_t *al, size_t off, size_t n, char *dst, size_t *lenp);
  +al_rc_t al_copy(al_t *al, size_t off, size_t n, al_t *tal);
   
   size_t al_bytes(const al_t *al);
   size_t al_chunk_len(al_chunk_t *alc);
  Index: ossp-pkg/sio/al_test.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 al_test.c
  --- ossp-pkg/sio/al_test.c	14 Oct 2002 15:26:04 -0000	1.4
  +++ ossp-pkg/sio/al_test.c	14 Oct 2002 15:41:37 -0000	1.5
  @@ -100,7 +100,7 @@
   int main()
   {
       al_rc_t rc;
  -    al_t *al, *al2, *al3;
  +    al_t *al, *al2, *al3, *al4;
       char baf[] = "Mittendrin\n";
       int i;
   
  @@ -122,15 +122,17 @@
       DUMP("BUFFER",al2);
       DUMP("REPLACEMENT", al3);
   
  -#if 1
       rc = al_splice(al, al_bytes(al)-500, 500, al3, al2);
  -#endif
       printf("splice result: %d (%s)\n\n",rc,al_error(rc));
   
       checklen("SPLICED",al);
       checklen("BUFFER",al2);
       checklen("REPLACEMENT",al3);
   
  +    al_create(&al4);
  +    rc = al_copy(al, al_bytes(al)-42, 38, al4);
  +    printf("copy result: %d (%s)\n\n",rc,al_error(rc));
  +
       DUMP("SPLICED",al);
       print("SPLICED", al);
   
  @@ -152,6 +154,14 @@
       fflush(stdout);
       al_destroy(al);
   
  +
  +
  +    DUMP("COPY", al4);
  +    print("COPY", al4);
  +
  +    printf("free COPY\n");
  +    fflush(stdout);
  +    al_destroy(al4);
   
       return 0;
   }

From ossp-cvs-owner@ossp.org  Mon Oct 14 17:44:03 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8897576555; Mon, 14 Oct 2002 17:44:03 +0200 (CEST)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.c
Message-Id: <20021014154403.8897576555@mail.ossp.org>
Date: Mon, 14 Oct 2002 17:44:03 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   14-Oct-2002 17:44:03
  Branch: HEAD                             Handle: 2002101416440300

  Modified files:
    ossp-pkg/sio            al.c

  Log:
    remove debugging assert()

  Summary:
    Revision    Changes     Path
    1.8         +0  -3      ossp-pkg/sio/al.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 al.c
  --- ossp-pkg/sio/al.c	14 Oct 2002 15:41:37 -0000	1.7
  +++ ossp-pkg/sio/al.c	14 Oct 2002 15:44:03 -0000	1.8
  @@ -1,4 +1,3 @@
  -#include <assert.h>
   #include <stddef.h>
   #include <stdlib.h>
   #include <string.h>
  @@ -354,8 +353,6 @@
   static
   void dispose_chunk(al_t *al, al_chunk_t *alc)
   {
  -        assert(NEXT(alc,chunks) == NULL && PREV(alc,chunks) == NULL);
  -
           --alc->buf->usecount;
           if (alc->buf->usecount == 0)
               dispose_buffer(al,alc->buf);

From ossp-cvs-owner@ossp.org  Tue Oct 15 15:13:07 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 03E03765DF; Tue, 15 Oct 2002 15:13:06 +0200 (CEST)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.c
Message-Id: <20021015131306.03E03765DF@mail.ossp.org>
Date: Tue, 15 Oct 2002 15:13:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   15-Oct-2002 15:13:06
  Branch: HEAD                             Handle: 2002101514130600

  Modified files:
    ossp-pkg/sio            al.c

  Log:
    EX support
    more comments
    insert failure path moved to top of al_splice
    chunk copy failure path leaves data structures intact ?!

  Summary:
    Revision    Changes     Path
    1.9         +113 -42    ossp-pkg/sio/al.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 al.c
  --- ossp-pkg/sio/al.c	14 Oct 2002 15:44:03 -0000	1.8
  +++ ossp-pkg/sio/al.c	15 Oct 2002 13:13:06 -0000	1.9
  @@ -507,6 +507,9 @@
   
   /*
    * copy bytes into buffer, FIFO
  + *
  + * stops copy operation when a new buffer cannot be created
  + * but leaves data structure consistent
    */
   al_rc_t al_append_bytes(al_t *al, const char *src, size_t n)
   {
  @@ -516,15 +519,19 @@
       size_t res, step;
       char *dst;
   
  +    /* argument sanity check(s) */
  +    if (al == NULL || src == NULL || n < 0)
  +            return AL_RC(AL_ERR_ARG);
  +
       cur = TAIL(al,chunks);
       res = AL_CHUNK_RESERVE(cur);
   
       while (n > 0) {
           if (res == 0) {
               rc = new_buffer(al, &buf);
  -            /* XXX handle error */
  +            if (rc != AL_OK) return AL_RC(rc);
               rc = new_chunk(al,buf,&cur);
  -            /* XXX handle error */
  +            if (rc != AL_OK) return AL_RC(rc);
               res = AL_CHUNK_RESERVE(cur);
               ADDTAIL(al, chunks, cur);
           }
  @@ -546,6 +553,9 @@
   
   /*
    * copy bytes into buffer, LIFO
  + *
  + * stops copy operation when a new buffer cannot be created
  + * but leaves data structure consistent
    */
   al_rc_t al_prepend_bytes(al_t *al, const char *src, size_t n)
   {
  @@ -555,6 +565,10 @@
       size_t res, step;
       char *dst;
   
  +    /* argument sanity check(s) */
  +    if (al == NULL || src == NULL || n < 0)
  +            return AL_RC(AL_ERR_ARG);
  +
       cur = HEAD(al,chunks);
       res = AL_CHUNK_PRESERVE(cur);
   
  @@ -563,9 +577,9 @@
       while (n > 0) {
           if (res == 0) {
               rc = new_buffer(al, &buf);
  -            if (rc != AL_OK) return rc;
  +            if (rc != AL_OK) return AL_RC(rc);
               rc = new_chunk(al,buf,&cur);
  -            if (rc != AL_OK) return rc;
  +            if (rc != AL_OK) return AL_RC(rc);
               res = AL_CHUNK_PRESERVE(cur);
               ADDHEAD(al, chunks, cur);
           }
  @@ -599,10 +613,14 @@
       al_buffer_t *buf;
       al_chunk_t  *cur;
   
  +    /* argument sanity check(s) */
  +    if (al == NULL || p == NULL || n < 0)
  +            return AL_RC(AL_ERR_ARG);
  +
       rc = make_buffer(al, p, n, &buf);
  -    if (rc != AL_OK) return rc;
  +    if (rc != AL_OK) return AL_RC(rc);
       rc = new_chunk(al,buf, &cur);
  -    if (rc != AL_OK) return rc;
  +    if (rc != AL_OK) return AL_RC(rc);
       ADDTAIL(al, chunks, cur);
   
       /* validate data in buffer */
  @@ -625,17 +643,51 @@
   al_rc_t al_splice(al_t *al, size_t off, size_t n, al_t *nal, al_t *tal)
   {
       al_rc_t rc;
  -    al_chunk_t *cur, *next;
  +    al_chunk_t *cur, *next, *ins, *splitbuf;
       size_t pos, skip, len, step;
  +    int doinsert;
  +
  +    /* argument sanity check(s) */
  +    if (al == NULL || n < 0)
  +            return AL_RC(AL_ERR_ARG);
  +
  +    /* optimization: treat an empty list as no insertion at all */
  +    doinsert = (nal != NULL) && !ISEMPTY(nal,chunks);
   
       /*
        * seek to beginning, return EOF when seek position does not exist
        * EOD must be a valid seek position so that we can append data
        */
       rc = al_seek(al, off, &cur, &skip);
  -    if (rc != AL_OK) return rc;
  +    if (rc != AL_OK) return AL_RC(rc);
  +    
  +    /*
  +     * remember insertion point
  +     *
  +     * caveat: if the first chunk is removed from input the insertion
  +     *         point shifts to the next chunk (or EOD -> NULL pointer)
  +     */
  +    ins = cur;
   
  -    /* as long as there is data to move */
  +    /*
  +     * if the first chunk is not removed completely it needs to be
  +     * split into two halves to allow insertion of new chunks later
  +     * from nal
  +     *
  +     * splitting at this point preserves all data in case the
  +     * allocation of the split buffer fails
  +     */
  +    if (doinsert) {
  +        if (ins != NULL && skip > 0 && skip+n < AL_CHUNK_LEN(ins)) {
  +            rc = split_chunk(al, ins, skip, &splitbuf);
  +            if (rc != AL_OK) return AL_RC(rc);
  +            INSERT(al,chunks,ins,splitbuf);
  +        }
  +    }
  +
  +    /*
  +     * as long as there is data to move
  +     */
       pos = off;
       while (n > 0 && cur != NULL) {
           next = NEXT(cur, chunks);
  @@ -651,8 +703,22 @@
               /* compute number of bytes to process */
               step = AL_CHUNK_SPAN(cur, skip, n);
   
  -            if (tal != NULL)
  -                al_append_bytes(tal, AL_CHUNK_PTR(cur, skip), step);
  +            /* copy data to target */
  +            if (tal != NULL) {
  +                /*
  +                 * XXX - this operation can fail
  +                 */
  +                size_t before = tal->bytes;
  +
  +                rc = al_append_bytes(tal, AL_CHUNK_PTR(cur, skip), step);
  +                if (rc != AL_OK) {
  +                    /* correct step size to actual size */
  +                    step = tal->bytes - before;
  +                }
  +
  +            } else {
  +                rc = AL_OK;
  +            }
   
               /*
                * cut span from src chunk
  @@ -674,6 +740,12 @@
                   AL_RESIZE(al, cur, -step);
               }
   
  +            /*
  +             * bail out from failed al_append_bytes operation above
  +             *
  +             */
  +            if (rc != AL_OK) return AL_RC(rc);
  +
           } else {
   
               /*
  @@ -683,6 +755,18 @@
                */
               step = len;
               REMOVE(al, chunks, cur);
  +
  +            /*
  +             * when the insertion point is removed, we have to adjust
  +             * the insertion point
  +             *
  +             * if the insertion point was the last chunk we get a NULL
  +             * next pointer and the insertion method switches to APPEND
  +             * mode
  +             */
  +            if (cur == ins)
  +                ins = next;
  +
               al->bytes -= step;
               if (tal == NULL) {
                   dispose_chunk(al, cur);
  @@ -701,39 +785,26 @@
       /*
        * now splice in replacement chunks
        */
  -    if (nal && !ISEMPTY(nal,chunks)) {
  -        al_chunk_t *ins;
  -
  -        /* rewind */
  -        rc = al_seek(al, off, &ins, &skip);
  -        if (rc != AL_OK) return rc;
  -
  -        if (ins == NULL) {
  +    if (doinsert) {
   
  +        if (ins != NULL) {
               /*
  -             * simple case where list end is 'replaced'
  +             * complex case where list is inserted
  +             *
  +             * the original list has already been modified so
  +             * that we can simply insert between two chunks
                */
  -            APPENDLIST(al,chunks,nal);
  -
  +            INSERTLIST(al,chunks,ins,nal);
           } else {
  -
               /*
  -             * if beginning and end were in same chunk we have to split this
  -             * chunk in two for a copyless insert operation
  +             * simple case where list end is 'replaced'
                */
  -            if (skip > 0) {
  -                al_chunk_t *twin;
  -                rc = split_chunk(al, ins, skip, &twin);
  -                if (rc != AL_OK) return rc;
  -
  -                INSERT(al,chunks,ins,twin);
  -            }
  -            INSERTLIST(al,chunks,ins,nal);
  -
  +            APPENDLIST(al,chunks,nal);
           }
   
           al->bytes += nal->bytes;
           nal->bytes = 0;
  +
       }
   
       return AL_OK;
  @@ -749,7 +820,7 @@
   
       txp = (al_tx_t*)(al->m.malloc)(sizeof(al_tx_t));
       if (txp == NULL)
  -        return AL_ERR_MEM;
  +        return AL_RC(AL_ERR_MEM);
   
       *txpp = txp;
       return AL_OK;
  @@ -777,7 +848,7 @@
       txp->cur = NULL;
   
       rc = al_seek(al, off, &txp->cur, &txp->skip);
  -    if (rc != AL_OK) return rc;
  +    if (rc != AL_OK) return AL_RC(rc);
   
       txp->dir  = dir;
       txp->togo = n;
  @@ -848,7 +919,7 @@
       al_chunk_t *view;
   
       rc = al_traverse(al, off, n, dir, &tx);
  -    if (rc != AL_OK) return rc;
  +    if (rc != AL_OK) return AL_RC(rc);
   
       while ((rc = al_traverse_next(al, &tx, &view)) == AL_OK) {
           rc = cb(view, u);
  @@ -857,7 +928,7 @@
       }
   
       if (rc != AL_ERR_EOF)
  -        return rc;
  +        return AL_RC(rc);
   
       return AL_OK;
   }
  @@ -879,7 +950,7 @@
       *lenp = 0; /* keep caller on safe side */
   
       rc = al_traverse(al, off, n, AL_FORWARD, &tx);
  -    if (rc != AL_OK) return rc;
  +    if (rc != AL_OK) return AL_RC(rc);
   
       total = 0;
       while ((rc = al_traverse_next(al, &tx, &view)) == AL_OK) {
  @@ -891,7 +962,7 @@
       *lenp = total;
   
       if (rc != AL_ERR_EOF)
  -        return rc;
  +        return AL_RC(rc);
   
       return AL_OK;
   }
  @@ -909,7 +980,7 @@
       size_t step;
   
       rc = al_traverse(al, off, n, AL_FORWARD, &tx);
  -    if (rc != AL_OK) return rc;
  +    if (rc != AL_OK) return AL_RC(rc);
   
       while ((rc = al_traverse_next(al, &tx, &view)) == AL_OK) {
           step = AL_CHUNK_LEN(view);
  @@ -917,7 +988,7 @@
       }
   
       if (rc != AL_ERR_EOF)
  -        return rc;
  +        return AL_RC(rc);
   
       return AL_OK;
   }

From ossp-cvs-owner@ossp.org  Tue Oct 15 19:23:20 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 71924765E2; Tue, 15 Oct 2002 19:23:20 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog pthread.c pthread.h.in
Message-Id: <20021015172320.71924765E2@mail.ossp.org>
Date: Tue, 15 Oct 2002 19:23:20 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Oct-2002 19:23:20
  Branch: HEAD                             Handle: 2002101518231900

  Modified files:
    ossp-pkg/pth            ChangeLog pthread.c pthread.h.in

  Log:
    The manual page stated that system(3) is supported in the "Soft System
    Call Mapping", but in fact it was forgotten in the implementation.
    
    Submitted by: Jonathan Schilling <jls@sco.com>

  Summary:
    Revision    Changes     Path
    1.566       +5  -0      ossp-pkg/pth/ChangeLog
    1.58        +6  -0      ossp-pkg/pth/pthread.c
    1.63        +1  -0      ossp-pkg/pth/pthread.h.in
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.565 -r1.566 ChangeLog
  --- ossp-pkg/pth/ChangeLog	24 Sep 2002 14:52:49 -0000	1.565
  +++ ossp-pkg/pth/ChangeLog	15 Oct 2002 17:23:19 -0000	1.566
  @@ -21,6 +21,11 @@
   
     Changes between 1.4.1 and 1.5.0 (27-Jan-2002 to xx-Sep-2002)
   
  +   *) The manual page stated that system(3) is supported in the
  +      "Soft System Call Mapping", but in fact it was forgotten in the
  +      implementation.
  +      [Jonathan Schilling <jls@sco.com>]
  +
      *) Add #define _PTHREAD_T to pthread.h to guard under SCO UnixWare 7 
         and OpenUNIX 8.
         [Jonathan Schilling <jls@sco.com>]
  Index: ossp-pkg/pth/pthread.c
  ============================================================
  $ cvs diff -u -r1.57 -r1.58 pthread.c
  --- ossp-pkg/pth/pthread.c	27 Jan 2002 11:03:41 -0000	1.57
  +++ ossp-pkg/pth/pthread.c	15 Oct 2002 17:23:19 -0000	1.58
  @@ -1057,6 +1057,12 @@
       return pth_sleep(sec);
   }
   
  +int __pthread_system(const char *cmd)
  +{
  +    pthread_initialize();
  +    return pth_system(cmd);
  +}
  +
   int __pthread_sigwait(const sigset_t *set, int *sig)
   {
       pthread_initialize();
  Index: ossp-pkg/pth/pthread.h.in
  ============================================================
  $ cvs diff -u -r1.62 -r1.63 pthread.h.in
  --- ossp-pkg/pth/pthread.h.in	24 Sep 2002 14:50:37 -0000	1.62
  +++ ossp-pkg/pth/pthread.h.in	15 Oct 2002 17:23:19 -0000	1.63
  @@ -504,6 +504,7 @@
   #if _POSIX_THREAD_SYSCALL_SOFT && !defined(_PTHREAD_PRIVATE)
   #define fork       __pthread_fork
   #define sleep      __pthread_sleep
  +#define system     __pthread_system
   #define sigwait    __pthread_sigwait
   #define waitpid    __pthread_waitpid
   #define connect    __pthread_connect

From ossp-cvs-owner@ossp.org  Tue Oct 15 20:17:30 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CEC35765E2; Tue, 15 Oct 2002 20:17:29 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog pth_lib.c
Message-Id: <20021015181729.CEC35765E2@mail.ossp.org>
Date: Tue, 15 Oct 2002 20:17:29 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Oct-2002 20:17:29
  Branch: HEAD                             Handle: 2002101519172800

  Modified files:
    ossp-pkg/pth            ChangeLog pth_lib.c

  Log:
    Fixed a long-standing termination bug in pth_exit(3):
    The event handler of pth_exit(3) didn't let pth_exit(3) finish if
    there were any threads on the "dead queue" (where non-detached
    terminated threads are put). Instead it re-entered the scheduler
    which in turn aborted with "**Pth** SCHEDULER INTERNAL ERROR: no
    more thread(s) available to schedule!?!?". This is now fixed by
    not counting the "dead queue" for the determination whether the
    process as a whole should terminate or not.
    
    Submitted by: Jonathan Schilling <jls@sco.com>

  Summary:
    Revision    Changes     Path
    1.567       +10 -0      ossp-pkg/pth/ChangeLog
    1.49        +10 -1      ossp-pkg/pth/pth_lib.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.566 -r1.567 ChangeLog
  --- ossp-pkg/pth/ChangeLog	15 Oct 2002 17:23:19 -0000	1.566
  +++ ossp-pkg/pth/ChangeLog	15 Oct 2002 18:17:28 -0000	1.567
  @@ -21,6 +21,16 @@
   
     Changes between 1.4.1 and 1.5.0 (27-Jan-2002 to xx-Sep-2002)
   
  +   *) Fixed a long-standing termination bug in pth_exit(3): 
  +      The event handler of pth_exit(3) didn't let pth_exit(3) finish if
  +      there were any threads on the "dead queue" (where non-detached
  +      terminated threads are put). Instead it re-entered the scheduler
  +      which in turn aborted with "**Pth** SCHEDULER INTERNAL ERROR: no
  +      more thread(s) available to schedule!?!?". This is now fixed by
  +      not counting the "dead queue" for the determination whether the
  +      process as a whole should terminate or not.
  +      [Jonathan Schilling <jls@sco.com>]
  +
      *) The manual page stated that system(3) is supported in the
         "Soft System Call Mapping", but in fact it was forgotten in the
         implementation.
  Index: ossp-pkg/pth/pth_lib.c
  ============================================================
  $ cvs diff -u -r1.48 -r1.49 pth_lib.c
  --- ossp-pkg/pth/pth_lib.c	30 Jan 2002 13:07:08 -0000	1.48
  +++ ossp-pkg/pth/pth_lib.c	15 Oct 2002 18:17:28 -0000	1.49
  @@ -379,12 +379,21 @@
   
       /* NOTICE: THIS FUNCTION EXECUTES
          FROM WITHIN THE SCHEDULER THREAD! */
  +
  +    /* calculate number of still existing threads in system. Only
  +       skipped queue is pth_DQ (dead queue). This queue does not
  +       count here, because those threads are non-detached but already
  +       terminated ones -- and if we are the only remaining thread (which
  +       also wants to terminate and not join those threads) we can signal
  +       us through the scheduled event (for which we are running as the
  +       test function inside the scheduler) that the whole process can
  +       terminate now. */
       rc = 0;
       rc += pth_pqueue_elements(&pth_NQ);
       rc += pth_pqueue_elements(&pth_RQ);
       rc += pth_pqueue_elements(&pth_WQ);
       rc += pth_pqueue_elements(&pth_SQ);
  -    rc += pth_pqueue_elements(&pth_DQ);
  +
       if (rc == 1 /* just our main thread */)
           return TRUE;
       else

From ossp-cvs-owner@ossp.org  Tue Oct 15 20:23:39 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id ED331765E2; Tue, 15 Oct 2002 20:23:37 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth pthread.h.in
Message-Id: <20021015182337.ED331765E2@mail.ossp.org>
Date: Tue, 15 Oct 2002 20:23:37 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Oct-2002 20:23:37
  Branch: HEAD                             Handle: 2002101519233700

  Modified files:
    ossp-pkg/pth            pthread.h.in

  Log:
    add a missing prototype for the new pthread_system wrapper

  Summary:
    Revision    Changes     Path
    1.64        +1  -0      ossp-pkg/pth/pthread.h.in
  ____________________________________________________________________________

  Index: ossp-pkg/pth/pthread.h.in
  ============================================================
  $ cvs diff -u -r1.63 -r1.64 pthread.h.in
  --- ossp-pkg/pth/pthread.h.in	15 Oct 2002 17:23:19 -0000	1.63
  +++ ossp-pkg/pth/pthread.h.in	15 Oct 2002 18:23:37 -0000	1.64
  @@ -484,6 +484,7 @@
   
   extern pid_t              __pthread_fork(void);
   extern unsigned int       __pthread_sleep(unsigned int);
  +extern int                __pthread_system(const char *);
   extern int                __pthread_sigwait(const sigset_t *, int *);
   extern pid_t              __pthread_waitpid(pid_t, int *, int);
   extern int                __pthread_connect(int, struct sockaddr *, socklen_t);

From ossp-cvs-owner@ossp.org  Tue Oct 15 20:23:53 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4CF8C76A46; Tue, 15 Oct 2002 20:23:53 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth devtool.conf
Message-Id: <20021015182353.4CF8C76A46@mail.ossp.org>
Date: Tue, 15 Oct 2002 20:23:53 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Oct-2002 20:23:53
  Branch: HEAD                             Handle: 2002101519235200

  Modified files:
    ossp-pkg/pth            devtool.conf

  Log:
    switch to latest Autoconf for now

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-pkg/pth/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/pth/devtool.conf
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 devtool.conf
  --- ossp-pkg/pth/devtool.conf	28 Jul 2002 08:07:17 -0000	1.4
  +++ ossp-pkg/pth/devtool.conf	15 Oct 2002 18:23:52 -0000	1.5
  @@ -5,7 +5,7 @@
   %autogen
       @autogen shtool   1.6.1 "1.6.*" echo version scpp mkdir install fixperm tarball
       @autogen libtool  1.4.2 "1.4*"
  -    @autogen autoconf 2.53  "2.5.*"
  +    @autogen autoconf 2.54  "2.5.*"
   
   %autoclean
       @autoclean shtool

From ossp-cvs-owner@ossp.org  Tue Oct 15 20:24:35 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F03EB765E2; Tue, 15 Oct 2002 20:24:34 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog
Message-Id: <20021015182434.F03EB765E2@mail.ossp.org>
Date: Tue, 15 Oct 2002 20:24:34 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Oct-2002 20:24:34
  Branch: HEAD                             Handle: 2002101519243400

  Modified files:
    ossp-pkg/pth            ChangeLog

  Log:
    switch to latest Autoconf for now

  Summary:
    Revision    Changes     Path
    1.568       +1  -1      ossp-pkg/pth/ChangeLog
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.567 -r1.568 ChangeLog
  --- ossp-pkg/pth/ChangeLog	15 Oct 2002 18:17:28 -0000	1.567
  +++ ossp-pkg/pth/ChangeLog	15 Oct 2002 18:24:34 -0000	1.568
  @@ -40,7 +40,7 @@
         and OpenUNIX 8.
         [Jonathan Schilling <jls@sco.com>]
   
  -   *) Upgraded to Autoconf 2.53 environment and cleaned up internal
  +   *) Upgraded to Autoconf 2.54 environment and cleaned up internal
         Autoconf macro usage.
         [Ralf S. Engelschall]
   

From ossp-cvs-owner@ossp.org  Tue Oct 15 22:34:26 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3A469765DF; Tue, 15 Oct 2002 22:34:26 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ANNOUNCE ChangeLog HACKING HISTORY INSTALL Ma...
Message-Id: <20021015203426.3A469765DF@mail.ossp.org>
Date: Tue, 15 Oct 2002 22:34:26 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Oct-2002 22:34:26
  Branch: HEAD                             Handle: 2002101521342201

  Modified files:
    ossp-pkg/pth            ANNOUNCE ChangeLog HACKING HISTORY INSTALL
                            Makefile.in THANKS USERS aclocal.m4 config.param
                            configure.ac devtool devtool.func pth-config.in
                            pth.pod pth.spec pth_debug.c pth_high.c pth_lib.c
                            pth_ring.c pth_string.c pthread-config.in
                            pthread.c pthread.pod striptease.mk striptease.pl
                            test_philo.c

  Log:
    remove trailing whitespaces

  Summary:
    Revision    Changes     Path
    1.14        +1  -1      ossp-pkg/pth/ANNOUNCE
    1.569       +37 -37     ossp-pkg/pth/ChangeLog
    1.15        +2  -2      ossp-pkg/pth/HACKING
    1.11        +3  -3      ossp-pkg/pth/HISTORY
    1.32        +2  -2      ossp-pkg/pth/INSTALL
    1.147       +1  -1      ossp-pkg/pth/Makefile.in
    1.86        +1  -1      ossp-pkg/pth/THANKS
    1.4         +2  -2      ossp-pkg/pth/USERS
    1.96        +6  -6      ossp-pkg/pth/aclocal.m4
    1.18        +1  -1      ossp-pkg/pth/config.param
    1.5         +2  -2      ossp-pkg/pth/configure.ac
    1.2         +1  -1      ossp-pkg/pth/devtool
    1.3         +1  -1      ossp-pkg/pth/devtool.func
    1.24        +1  -1      ossp-pkg/pth/pth-config.in
    1.154       +5  -5      ossp-pkg/pth/pth.pod
    1.10        +1  -1      ossp-pkg/pth/pth.spec
    1.27        +1  -1      ossp-pkg/pth/pth_debug.c
    1.84        +2  -2      ossp-pkg/pth/pth_high.c
    1.50        +10 -10     ossp-pkg/pth/pth_lib.c
    1.22        +1  -1      ossp-pkg/pth/pth_ring.c
    1.7         +4  -4      ossp-pkg/pth/pth_string.c
    1.20        +1  -1      ossp-pkg/pth/pthread-config.in
    1.59        +1  -1      ossp-pkg/pth/pthread.c
    1.23        +1  -1      ossp-pkg/pth/pthread.pod
    1.7         +1  -1      ossp-pkg/pth/striptease.mk
    1.14        +1  -1      ossp-pkg/pth/striptease.pl
    1.19        +1  -1      ossp-pkg/pth/test_philo.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ANNOUNCE
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 ANNOUNCE
  --- ossp-pkg/pth/ANNOUNCE	24 Mar 2001 16:33:33 -0000	1.13
  +++ ossp-pkg/pth/ANNOUNCE	15 Oct 2002 20:34:22 -0000	1.14
  @@ -38,7 +38,7 @@
     Solaris, HPUX, Tru64, AIX, IRIX, UnixWare and SCO, to more esoteric
     flavors like SINIX, ReliantUNIX, ISC, SCO, NCR, AmigaOS, Rhapsody
     (MacOS X), FTX, AUX and Win32/Cygwin.
  -  
  +
     Additionally the auto-configuration mechanism allows GNU Pth to
     automatically adjusts itself to run also on mostly all remaining Unix
     platforms, including ancient versions for which a multi-threading
  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.568 -r1.569 ChangeLog
  --- ossp-pkg/pth/ChangeLog	15 Oct 2002 18:24:34 -0000	1.568
  +++ ossp-pkg/pth/ChangeLog	15 Oct 2002 20:34:22 -0000	1.569
  @@ -13,15 +13,15 @@
     of just the user-visible and/or major changes please have a look at
     the NEWS file.
   
  -     _   ____  
  -    / | | ___| 
  -    | | |___ \ 
  +     _   ____
  +    / | | ___|
  +    | | |___ \
       | |_ ___) |
     __|_(_)____/____________________________________________________________
   
     Changes between 1.4.1 and 1.5.0 (27-Jan-2002 to xx-Sep-2002)
   
  -   *) Fixed a long-standing termination bug in pth_exit(3): 
  +   *) Fixed a long-standing termination bug in pth_exit(3):
         The event handler of pth_exit(3) didn't let pth_exit(3) finish if
         there were any threads on the "dead queue" (where non-detached
         terminated threads are put). Instead it re-entered the scheduler
  @@ -36,7 +36,7 @@
         implementation.
         [Jonathan Schilling <jls@sco.com>]
   
  -   *) Add #define _PTHREAD_T to pthread.h to guard under SCO UnixWare 7 
  +   *) Add #define _PTHREAD_T to pthread.h to guard under SCO UnixWare 7
         and OpenUNIX 8.
         [Jonathan Schilling <jls@sco.com>]
   
  @@ -58,12 +58,12 @@
         Switched to Autoconf 2.52 and Libtool 1.4.2 environment.
         [Ralf S. Engelschall]
   
  -     _  _  _   
  -    / || || |  
  -    | || || |_ 
  +     _  _  _
  +    / || || |
  +    | || || |_
       | ||__   _|
  -  __|_(_) |_|_____________________________________________________________ 
  -    
  +  __|_(_) |_|_____________________________________________________________
  +
     Changes between 1.4.0 and 1.4.1 (24-Mar-2001 to 27-Jan-2002)
   
      *) Internally make sure an invalid file-descriptor (integer not
  @@ -74,13 +74,13 @@
         if an fd in the "struct pollfd" is invalid.
         [Ralf S. Engelschall, Archie Cobbs <archie@packetdesign.com>]
   
  -   *) Correctly support PTH_FDMODE_NONBLOCK in pth_connect and pth_accept. 
  +   *) Correctly support PTH_FDMODE_NONBLOCK in pth_connect and pth_accept.
         [Archie Cobbs <archie@packetdesign.com>]
   
      *) Fixed typos in manual page.
  -      [Michael Schloh v. Bennewitz <michael.schloh@de.cw.net>, 
  +      [Michael Schloh v. Bennewitz <michael.schloh@de.cw.net>,
          Takashi Ishihara <tishihara@ucdavis.edu>]
  -   
  +
      *) For portability reasons changed definition of PTH_EXT_SFIO to 0/1
         instead of FALSE/TRUE because some external definitions use a
         casted value and hence make trouble on plain #if constructs.
  @@ -97,7 +97,7 @@
         PTH_ATTR_JOINABLE references in the manual page.
         [Takashi Ishihara <tishihara@ucdavis.edu>]
   
  -   *) Fixed a (not very subtle) bug in pth_writev_ev() that screwed up 
  +   *) Fixed a (not very subtle) bug in pth_writev_ev() that screwed up
         output if a partial write happened.
         [Mark Burton <markb@ordern.com>]
   
  @@ -136,7 +136,7 @@
         [Ralf S. Engelschall, Bill Apt <babt@us.ibm.com>]
   
      *) Added ENOSYS-stubs for pthread_attr_{set,get}guardsize()
  -      to the Pthread API to be more complete with POSIX/SUSv2 specs. 
  +      to the Pthread API to be more complete with POSIX/SUSv2 specs.
         [Ralf S. Engelschall, Bill Apt <babt@us.ibm.com>]
   
      *) Added still missing soft system call mapping to Pth and Pthread
  @@ -151,11 +151,11 @@
         [Archie Cobbs <archie@packetdesign.com>]
   
      *) Added `#define _BITS_SIGTHREAD_H' to pthread.h to avoid inclusion
  -      of bits/sigthread.h (from signal.h) on Linux running glibc6 2.2. 
  +      of bits/sigthread.h (from signal.h) on Linux running glibc6 2.2.
         [Tomas Pihl <tomas.pihl@netinsight.net>]
   
      *) Added support to Makefile.in for DESTDIR variable. This allows
  -      easier rolling of installation tarballs (for instance from within 
  +      easier rolling of installation tarballs (for instance from within
         RPM or similar facilities) by using "make install DESTDIR=/tmp/pth".
         [Brad Smith <brad@comstyle.com>, Ralf S. Engelschall]
   
  @@ -201,7 +201,7 @@
   
      *) Fixed (unused) pth_time_mul() function: operator & replaced by %
         [Tim Harris <tim.harris@snellwilcox.com>]
  -   
  +
      *) Use --disable-lock for ltconfig.
         [Ralf S. Engelschall]
   
  @@ -219,7 +219,7 @@
      *) Upgraded rse-pmt.ps paper to latest version as it was
         published on USENIX 2000.
         [Ralf S. Engelschall]
  -      
  +
      *) Stack boundary fixes for Interactive Unix support
         (--with-mctx-dsp=sjljisc). This allows one also to use this
         variant for Interix on Window-NT (a POSIX.1 compliant subsystem).
  @@ -278,7 +278,7 @@
         [Ralf S. Engelschall]
   
      *) Added a RPM spec file pth.spec which allows one to build RPM
  -      packages directly from the Pth distribution tarball through a 
  +      packages directly from the Pth distribution tarball through a
         simple `rpm -tb pth-1.X.Y.tar.gz' call.
         [Daniel Richard G. <straker@MIT.EDU>]
   
  @@ -293,7 +293,7 @@
         not all users have /sbin in their $PATH.
         [Jeff Trawick <trawick@ibm.net>]
   
  -   *) Added eight new I/O functions pth_{recv,recvfrom,send,sendto}[_ev](3) 
  +   *) Added eight new I/O functions pth_{recv,recvfrom,send,sendto}[_ev](3)
         which correspond to the counterparts in UNIX98 (SUSv2).
         [Ralf S. Engelschall]
   
  @@ -318,36 +318,36 @@
   
     Changes between 1.3.6 and 1.3.7 (01-Jul-2000 to 29-Jul-2000)
   
  -   *) Backport from GNU Pth 1.4a3: 
  +   *) Backport from GNU Pth 1.4a3:
         Upgraded to GNU shtool 1.5.1. This fixes especially the
         compilation problems under Solaris which were caused by a too
         unportable `shtool version' command from 1.5.0.
         [Ralf S. Engelschall]
   
  -   *) Backport from GNU Pth 1.4a3: 
  +   *) Backport from GNU Pth 1.4a3:
         Fixed (unused) pth_time_mul() function: operator & replaced by %
         [Tim Harris <tim.harris@snellwilcox.com>]
   
     Changes between 1.3.5 and 1.3.6 (17-Apr-2000 to 01-Jul-2000)
   
  -   *) Backport from GNU Pth 1.4a2: 
  +   *) Backport from GNU Pth 1.4a2:
         Upgraded to GNU Shtool 1.5.0
         [Ralf S. Engelschall]
   
  -   *) Backport from GNU Pth 1.4a2: 
  +   *) Backport from GNU Pth 1.4a2:
         Added OS/390 support to config.sub.
         [Greg Ames <gregames@raleigh.ibm.com>]
   
  -   *) Backport from GNU Pth 1.4a2: 
  +   *) Backport from GNU Pth 1.4a2:
         Upgraded rse-pmt.ps paper to latest version as it was
         published on USENIX 2000.
         [Ralf S. Engelschall]
   
  -   *) Backport from GNU Pth 1.4a2: 
  +   *) Backport from GNU Pth 1.4a2:
         Upgraded to GNU libtool 1.3.5
         [Ralf S. Engelschall]
   
  -   *) Backport from GNU Pth 1.4a2: 
  +   *) Backport from GNU Pth 1.4a2:
         Allow for convinience reasons pth_usleep() to accept also
         arguments greater than 1000000.
         [Harvinder Sawhney <hsawhney@hotmail.com>]
  @@ -364,7 +364,7 @@
      *) Merged from Pth 1.4a1:
         Fixed usage of `volatile' qualifier in pointer context.
         [Ralf S. Engelschall]
  -   
  +
      *) Merged from Pth 1.4a1:
         Now pth.h and pthread.h include the non-standard <sys/select.h>
         header on brain-dead platforms (like AIX) to get the definition of
  @@ -530,7 +530,7 @@
         different), it was decided to kick it out at all.
         [Ralf S. Engelschall]
   
  -   *) Make sure pth_connect[_ev]() doesn't block by internally 
  +   *) Make sure pth_connect[_ev]() doesn't block by internally
         switching to non-blocking mode temporarily if necessary.
         [Chris Leishman <chris_leishman@freeonline.com.au>, Ralf S. Engelschall]
   
  @@ -567,7 +567,7 @@
         [Eric Hanchrow <offby1@blarg.net>]
   
      *) Use SYS__newselect instead of SYS_select under Linux and
  -      --enable-syscall-hard because SYS_select is a dummy stub which 
  +      --enable-syscall-hard because SYS_select is a dummy stub which
         always just returns -1 and errno = EFAULT.
         [Artem Gr <artem@bizlink.ru>, Ralf S. Engelschall]
   
  @@ -642,14 +642,14 @@
         [Ralf S. Engelschall]
   
      *) Adjusted all copyright messages to include the forthcoming
  -      new year 2000, too. 
  +      new year 2000, too.
         [Ralf S. Engelschall]
   
      *) Fixed $DIFS in pth-config.in and pthread-config.in
         (the tab was lost) and cleaned up pth-config.in a little bit.
         [Ralf S. Engelschall]
   
  -   *) Upgraded from GNU libtool 1.3.3 to 1.3.4 
  +   *) Upgraded from GNU libtool 1.3.3 to 1.3.4
         and from GNU shtool 1.4.6 to 1.4.7.
         [Ralf S. Engelschall]
   
  @@ -746,7 +746,7 @@
   
      *) Backport from Pth 1.3b1:
         Use SYS__newselect instead of SYS_select under Linux and
  -      --enable-syscall-hard because SYS_select is a dummy stub which 
  +      --enable-syscall-hard because SYS_select is a dummy stub which
         always just returns -1 and errno = EFAULT.
         [Artem Gr <artem@bizlink.ru>, Ralf S. Engelschall]
   
  @@ -758,7 +758,7 @@
         Added a workround in Makefile.in (replaced "rm -r" with
         "rm" + "rmdir") for brain-dead AmigaOS.
         [Kriton Kyrimis <kyrimis@cti.gr>]
  -   
  +
      *) Backport from Pth 1.3a5:
         Fixed example in Pth manual page: peer_len wasn't initialized.
         [Sami Niemi <saminiemi@usa.net>, Ralf S. Engelschall]
  @@ -789,7 +789,7 @@
         [Igor A. Minyukoff, Ralf S. Engelschall]
   
      *) Backport from Pth 1.3a2:
  -      Upgraded from GNU libtool 1.3.3 to 1.3.4 
  +      Upgraded from GNU libtool 1.3.3 to 1.3.4
         and from GNU shtool 1.4.6 to 1.4.7.
         [Ralf S. Engelschall]
   
  @@ -804,7 +804,7 @@
         Fixed return code semantics for error situation in both
         pth_write(3) and pth_writev(3).
         [Rob Quinn <rquinn@sec.sprint.net>, Ralf S. Engelschall]
  -   
  +
      *) Backport from Pth 1.3a1:
         Changed AC_CHECK_STRUCTATTR macro from a too weak AC_TRY_EGREP to a
         AC_TRY_LINK based approach to make sure the ss_sp/ss_base checks do not
  Index: ossp-pkg/pth/HACKING
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 HACKING
  --- ossp-pkg/pth/HACKING	12 Sep 2002 09:02:04 -0000	1.14
  +++ ossp-pkg/pth/HACKING	15 Oct 2002 20:34:22 -0000	1.15
  @@ -1,7 +1,7 @@
      ____  _   _
     |  _ \| |_| |__
     | |_) | __| '_ \
  -  |  __/| |_| | | |                   ``Real hackers can write assembly 
  +  |  __/| |_| | | |                   ``Real hackers can write assembly
     |_|    \__|_| |_|                     code in any language.''
   
     GNU Pth - The GNU Portable Threads
  @@ -87,7 +87,7 @@
     USERS ................. List of packages utilizing Pth
   
     acconfig.h ............ Autoconf header (the input for pth_acdef.h.in)
  -  acheader.m4 ........... Autoconf macros for use with autoheader 
  +  acheader.m4 ........... Autoconf macros for use with autoheader
     aclocal.m4 ............ Autoconf macros (for configure)
     config.guess .......... Autoconf platform guessing tool (part I)
     config.param .......... Autoconf command line parameter collections
  Index: ossp-pkg/pth/HISTORY
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 HISTORY
  --- ossp-pkg/pth/HISTORY	27 Jan 2002 13:16:20 -0000	1.10
  +++ ossp-pkg/pth/HISTORY	15 Oct 2002 20:34:22 -0000	1.11
  @@ -1,14 +1,14 @@
      ____  _   _
     |  _ \| |_| |_
  -  | |_) | __| '_ \          
  +  | |_) | __| '_ \
     |  __/| |_| | | |         ``Release early and often.''
     |_|    \__|_| |_|              -- Eric S. Raymond
  -                              
  +
     GNU Pth - The GNU Portable Threads
   
     HISTORY
     =======
  -  
  +
     The following list provides an overview of the released GNU Pth
     versions and this way shows its history and evolution.
   
  Index: ossp-pkg/pth/INSTALL
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 INSTALL
  --- ossp-pkg/pth/INSTALL	30 Jan 2002 13:07:08 -0000	1.31
  +++ ossp-pkg/pth/INSTALL	15 Oct 2002 20:34:22 -0000	1.32
  @@ -133,7 +133,7 @@
         sjlje ... setjmp(3)/longjmp(3) [emulated = plus sigprocmask(2)]
         sjljlx .. setjmp(3)/longjmp(3), specific for anchient Linux version
         sjljisc . setjmp(3)/longjmp(3), specific for Interactive Unix (ISC)
  -      sjljw32 . setjmp(3)/longjmp(3), specific for Win32/CygWin 
  +      sjljw32 . setjmp(3)/longjmp(3), specific for Win32/CygWin
   
     --with-mctx-stk=ID       [EXPERTS ONLY]
         This forces Pth to use a particular machine context stack setup
  @@ -214,5 +214,5 @@
     for variables like `CC', `cache_file', and `prefix'.  `configure' looks for
     `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site'
     if it exists.  Or, you can set the `CONFIG_SITE' environment variable to
  -  the location of the site script. 
  +  the location of the site script.
   
  Index: ossp-pkg/pth/Makefile.in
  ============================================================
  $ cvs diff -u -r1.146 -r1.147 Makefile.in
  --- ossp-pkg/pth/Makefile.in	30 Jan 2002 13:15:33 -0000	1.146
  +++ ossp-pkg/pth/Makefile.in	15 Oct 2002 20:34:22 -0000	1.147
  @@ -45,7 +45,7 @@
   mandir      = @mandir@
   datadir     = @datadir@
   
  -DESTDIR     = 
  +DESTDIR     =
   
   ##
   ##  ____ TOOL DEFINITIONS ___________________________________________
  Index: ossp-pkg/pth/THANKS
  ============================================================
  $ cvs diff -u -r1.85 -r1.86 THANKS
  --- ossp-pkg/pth/THANKS	24 Sep 2002 14:52:49 -0000	1.85
  +++ ossp-pkg/pth/THANKS	15 Oct 2002 20:34:22 -0000	1.86
  @@ -74,7 +74,7 @@
       o  Giwon On                    <Giwon.On@KOM.tu-darmstadt.de>
       o  Takeshi OTOFUJI             <otofuji@quartet.ipc.akita-u.ac.jp>
       o  Kent Overstreet             <kent@hotmail.com>
  -    o  Staehli Patrik              <patrik.staehli@siemens.ch> 
  +    o  Staehli Patrik              <patrik.staehli@siemens.ch>
       o  Pete                        <pfv@grex.org>
       o  Michael Petuschak           <mp@bolivar.carrier.kiev.ua>
       o  Tomas Pihl                  <tomas.pihl@netinsight.net>
  Index: ossp-pkg/pth/USERS
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 USERS
  --- ossp-pkg/pth/USERS	4 Mar 2000 11:33:32 -0000	1.3
  +++ ossp-pkg/pth/USERS	15 Oct 2002 20:34:22 -0000	1.4
  @@ -1,9 +1,9 @@
      ____  _   _
     |  _ \| |_| |_
  -  | |_) | __| '_ \          
  +  | |_) | __| '_ \
     |  __/| |_| | | |         ``DejaGNU: The strong feeling that there
     |_|    \__|_| |_|           is already a GNU-tool for your problem.''
  -                              
  +
     GNU Pth - The GNU Portable Threads
   
     USERS
  Index: ossp-pkg/pth/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.95 -r1.96 aclocal.m4
  --- ossp-pkg/pth/aclocal.m4	1 Jul 2002 12:54:54 -0000	1.95
  +++ ossp-pkg/pth/aclocal.m4	15 Oct 2002 20:34:22 -0000	1.96
  @@ -23,8 +23,8 @@
   dnl ##  aclocal.m4: Pth Autoconf macros
   dnl ##
                           dnl # ``"Reuse an expert's code" is the right
  -                        dnl #   advice for most people. But it's a useless 
  -                        dnl #   advice for the experts writing the code 
  +                        dnl #   advice for most people. But it's a useless
  +                        dnl #   advice for the experts writing the code
                           dnl #   in the first place.'
                           dnl #               -- Dan J. Bernstein
   
  @@ -331,9 +331,9 @@
   #include <sys/types.h>
     ],[
       long long X = 2, Y = 1, Z;
  -    Z = X / Y; 
  +    Z = X / Y;
     ],
  -    ac_cv_type_longlong=yes, 
  +    ac_cv_type_longlong=yes,
       ac_cv_type_longlong=no
     )dnl
    ])dnl
  @@ -350,9 +350,9 @@
   #include <sys/types.h>
     ],[
       long double X = 2, Y = 1, Z;
  -    Z = X / Y; 
  +    Z = X / Y;
     ],
  -    ac_cv_type_longdouble=yes, 
  +    ac_cv_type_longdouble=yes,
       ac_cv_type_longdouble=no
     )dnl
    ])dnl
  Index: ossp-pkg/pth/config.param
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 config.param
  --- ossp-pkg/pth/config.param	27 Jan 2002 11:03:40 -0000	1.17
  +++ ossp-pkg/pth/config.param	15 Oct 2002 20:34:22 -0000	1.18
  @@ -28,7 +28,7 @@
   common {
   }
   
  -#   build for testing 
  +#   build for testing
   #   (done on all testing platforms)
   test {
       --prefix=/tmp/pth
  Index: ossp-pkg/pth/configure.ac
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 configure.ac
  --- ossp-pkg/pth/configure.ac	4 Sep 2002 14:51:56 -0000	1.4
  +++ ossp-pkg/pth/configure.ac	15 Oct 2002 20:34:22 -0000	1.5
  @@ -579,7 +579,7 @@
   AC_SUBST(TEST_PTHREAD)
   
   dnl #   whether to build against OSSP ex library
  -AC_CHECK_EXTLIB(OSSP ex, ex, __ex_ctx, ex.h, 
  +AC_CHECK_EXTLIB(OSSP ex, ex, __ex_ctx, ex.h,
                   AC_DEFINE(PTH_EX, 1, [define if using OSSP ex in GNU pth]))
   
   dnl #   whether to build against Sfio library
  @@ -588,7 +588,7 @@
   AC_SUBST(PTH_EXT_SFIO)
   
   dnl #   whether to build against Dmalloc library
  -AC_CHECK_EXTLIB(Dmalloc, dmalloc, dmalloc_debug, dmalloc.h, 
  +AC_CHECK_EXTLIB(Dmalloc, dmalloc, dmalloc_debug, dmalloc.h,
                   AC_DEFINE(PTH_DMALLOC, 1, [define if using Dmalloc in GNU pth]))
   
   dnl ##
  Index: ossp-pkg/pth/devtool
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 devtool
  --- ossp-pkg/pth/devtool	30 Jan 2002 12:54:22 -0000	1.1
  +++ ossp-pkg/pth/devtool	15 Oct 2002 20:34:22 -0000	1.2
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  devtool -- Development Tool
  -##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   if [ $# -eq 0 ]; then
  Index: ossp-pkg/pth/devtool.func
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.func
  --- ossp-pkg/pth/devtool.func	1 Jul 2002 12:54:54 -0000	1.2
  +++ ossp-pkg/pth/devtool.func	15 Oct 2002 20:34:22 -0000	1.3
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   devtool_require () {
  Index: ossp-pkg/pth/pth-config.in
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 pth-config.in
  --- ossp-pkg/pth/pth-config.in	27 Jan 2002 11:03:40 -0000	1.23
  +++ ossp-pkg/pth/pth-config.in	15 Oct 2002 20:34:22 -0000	1.24
  @@ -24,7 +24,7 @@
   ##  pth-config.in: Pth library build utility
   ##
   
  -DIFS=' 	
  +DIFS=' 
   '
   
   prefix="@prefix@"
  Index: ossp-pkg/pth/pth.pod
  ============================================================
  $ cvs diff -u -r1.153 -r1.154 pth.pod
  --- ossp-pkg/pth/pth.pod	27 Apr 2002 11:18:57 -0000	1.153
  +++ ossp-pkg/pth/pth.pod	15 Oct 2002 20:34:22 -0000	1.154
  @@ -552,8 +552,8 @@
   a thread never directly switches to another thread. A thread always
   yields execution to the scheduler and the scheduler dispatches to the
   next thread. So a freshly spawned thread has to be kept somewhere until
  -the scheduler gets a chance to pick it up for scheduling. That is 
  -what the B<NEW> queue is for. 
  +the scheduler gets a chance to pick it up for scheduling. That is
  +what the B<NEW> queue is for.
   
   The purpose of the B<DEAD> queue is to support thread joining. When a
   thread is marked to be unjoinable, it is directly kicked out of the
  @@ -799,13 +799,13 @@
   This sets the attribute field I<field> in I<attr> to a value
   specified as an additional argument on the variable argument
   list. The following attribute I<fields> and argument pairs can
  -be used: 
  +be used:
   
    PTH_ATTR_PRIO           int
    PTH_ATTR_NAME           char *
    PTH_ATTR_JOINABLE       int
    PTH_ATTR_CANCEL_STATE   unsigned int
  - PTH_ATTR_STACK_SIZE     unsigned int 
  + PTH_ATTR_STACK_SIZE     unsigned int
    PTH_ATTR_STACK_ADDR     char *
   
   =item int B<pth_attr_get>(pth_attr_t I<attr>, int I<field>, ...);
  @@ -1644,7 +1644,7 @@
   
   This is a variant of the 4.2BSD connect(2) function. It establishes a
   connection on a socket I<s> to target specified in I<addr> and I<addrlen>.
  -The difference between connect(2) and pth_connect(3) is that 
  +The difference between connect(2) and pth_connect(3) is that
   pth_connect(3) suspends only the execution of the current thread and not the
   whole process.  For more details about the arguments and return code semantics
   see connect(2).
  Index: ossp-pkg/pth/pth.spec
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 pth.spec
  --- ossp-pkg/pth/pth.spec	27 Jan 2002 16:14:02 -0000	1.9
  +++ ossp-pkg/pth/pth.spec	15 Oct 2002 20:34:22 -0000	1.10
  @@ -20,7 +20,7 @@
   ##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
   ##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
   ##
  -##  pth.spec: RPM specification 
  +##  pth.spec: RPM specification
   ##
   
   #   This is a specification file for the RedHat Package Manager (RPM).
  Index: ossp-pkg/pth/pth_debug.c
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 pth_debug.c
  --- ossp-pkg/pth/pth_debug.c	27 Jan 2002 11:03:40 -0000	1.26
  +++ ossp-pkg/pth/pth_debug.c	15 Oct 2002 20:34:22 -0000	1.27
  @@ -86,7 +86,7 @@
       pth_dumpqueue(fp, "NEW", &pth_NQ);
       pth_dumpqueue(fp, "READY", &pth_RQ);
       fprintf(fp, "| Thread Queue RUNNING:\n");
  -    fprintf(fp, "|   1. thread 0x%lx (\"%s\")\n", 
  +    fprintf(fp, "|   1. thread 0x%lx (\"%s\")\n",
               (unsigned long)pth_current, pth_current->name);
       pth_dumpqueue(fp, "WAITING", &pth_WQ);
       pth_dumpqueue(fp, "SUSPENDED", &pth_SQ);
  Index: ossp-pkg/pth/pth_high.c
  ============================================================
  $ cvs diff -u -r1.83 -r1.84 pth_high.c
  --- ossp-pkg/pth/pth_high.c	27 Jan 2002 13:15:28 -0000	1.83
  +++ ossp-pkg/pth/pth_high.c	15 Oct 2002 20:34:22 -0000	1.84
  @@ -152,7 +152,7 @@
   
       for (;;) {
           /* do a non-blocking poll for the pid */
  -        while (   (pid = pth_sc(waitpid)(wpid, status, options|WNOHANG)) < 0 
  +        while (   (pid = pth_sc(waitpid)(wpid, status, options|WNOHANG)) < 0
                  && errno == EINTR) ;
   
           /* if pid was found or caller requested a polling return immediately */
  @@ -1008,7 +1008,7 @@
   
   /* advance the virtual pointer of a struct iov */
   intern void pth_writev_iov_advance(const struct iovec *riov, int riovcnt, size_t advance,
  -                                   struct iovec **liov, int *liovcnt, 
  +                                   struct iovec **liov, int *liovcnt,
                                      struct iovec *tiov, int tiovcnt)
   {
       int i;
  Index: ossp-pkg/pth/pth_lib.c
  ============================================================
  $ cvs diff -u -r1.49 -r1.50 pth_lib.c
  --- ossp-pkg/pth/pth_lib.c	15 Oct 2002 18:17:28 -0000	1.49
  +++ ossp-pkg/pth/pth_lib.c	15 Oct 2002 20:34:22 -0000	1.50
  @@ -88,7 +88,7 @@
       pth_attr_set(t_attr, PTH_ATTR_STACK_ADDR,   NULL);
       pth_sched = pth_spawn(t_attr, pth_scheduler, NULL);
       if (pth_sched == NULL) {
  -        errno_shield { 
  +        errno_shield {
               pth_attr_destroy(t_attr);
               pth_scheduler_kill();
           }
  @@ -104,7 +104,7 @@
       pth_attr_set(t_attr, PTH_ATTR_STACK_ADDR,   NULL);
       pth_main = pth_spawn(t_attr, (void *(*)(void *))(-1), NULL);
       if (pth_main == NULL) {
  -        errno_shield { 
  +        errno_shield {
               pth_attr_destroy(t_attr);
               pth_scheduler_kill();
           }
  @@ -130,7 +130,7 @@
   /* kill the package internals */
   int pth_kill(void)
   {
  -    if (pth_current != pth_main) 
  +    if (pth_current != pth_main)
           return_errno(FALSE, EPERM);
       pth_debug1("pth_kill: enter");
       pth_thread_cleanup(pth_main);
  @@ -163,7 +163,7 @@
               rc += 1; /* pth_current only */
           if (query & PTH_CTRL_GETTHREADS_WAITING)
               rc += pth_pqueue_elements(&pth_WQ);
  -        if (query & PTH_CTRL_GETTHREADS_SUSPENDED) 
  +        if (query & PTH_CTRL_GETTHREADS_SUSPENDED)
               rc += pth_pqueue_elements(&pth_SQ);
           if (query & PTH_CTRL_GETTHREADS_DEAD)
               rc += pth_pqueue_elements(&pth_DQ);
  @@ -240,8 +240,8 @@
           t->prio        = pth_current->prio;
           t->joinable    = pth_current->joinable;
           t->cancelstate = pth_current->cancelstate;
  -        pth_snprintf(t->name, PTH_TCB_NAMELEN, "%s.child@%d=0x%lx", 
  -                     pth_current->name, (unsigned int)time(NULL), 
  +        pth_snprintf(t->name, PTH_TCB_NAMELEN, "%s.child@%d=0x%lx",
  +                     pth_current->name, (unsigned int)time(NULL),
                        (unsigned long)pth_current);
       }
       else {
  @@ -432,10 +432,10 @@
           abort(); /* not reached! */
       }
       else {
  -        /* 
  -         * main thread is special: exit the _process_ 
  -         * [double-cast to avoid warnings because of size] 
  -         */ 
  +        /*
  +         * main thread is special: exit the _process_
  +         * [double-cast to avoid warnings because of size]
  +         */
           pth_kill();
           exit((int)((long)value));
           abort(); /* not reached! */
  Index: ossp-pkg/pth/pth_ring.c
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 pth_ring.c
  --- ossp-pkg/pth/pth_ring.c	27 Jan 2002 11:03:41 -0000	1.21
  +++ ossp-pkg/pth/pth_ring.c	15 Oct 2002 20:34:23 -0000	1.22
  @@ -44,7 +44,7 @@
   /* initialize ring; O(1) */
   intern void pth_ring_init(pth_ring_t *r)
   {
  -    if (r == NULL) 
  +    if (r == NULL)
           return;
       r->r_hook  = NULL;
       r->r_nodes = 0;
  Index: ossp-pkg/pth/pth_string.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 pth_string.c
  --- ossp-pkg/pth/pth_string.c	27 Jan 2002 11:03:41 -0000	1.6
  +++ ossp-pkg/pth/pth_string.c	15 Oct 2002 20:34:23 -0000	1.7
  @@ -22,7 +22,7 @@
   **
   **  pth_string.c: Pth replacement string functions
   */
  -                              /* ``A new release is where old bad 
  +                              /* ``A new release is where old bad
                                      assumptions are replaced by new
                                      bad assumptions.''               */
   
  @@ -646,9 +646,9 @@
   
   intern int
   pth_vsnprintf(
  -    char *str, 
  -    size_t count, 
  -    const char *fmt, 
  +    char *str,
  +    size_t count,
  +    const char *fmt,
       va_list args)
   {
       size_t retlen;
  Index: ossp-pkg/pth/pthread-config.in
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 pthread-config.in
  --- ossp-pkg/pth/pthread-config.in	27 Jan 2002 11:03:41 -0000	1.19
  +++ ossp-pkg/pth/pthread-config.in	15 Oct 2002 20:34:23 -0000	1.20
  @@ -24,7 +24,7 @@
   ##  pthread-config.in: Pth library build utility [Pthread API]
   ##
   
  -DIFS=' 	
  +DIFS=' 
   '
   
   prefix="@prefix@"
  Index: ossp-pkg/pth/pthread.c
  ============================================================
  $ cvs diff -u -r1.58 -r1.59 pthread.c
  --- ossp-pkg/pth/pthread.c	15 Oct 2002 17:23:19 -0000	1.58
  +++ ossp-pkg/pth/pthread.c	15 Oct 2002 20:34:23 -0000	1.59
  @@ -385,7 +385,7 @@
   
   /*
   **  CONCURRENCY ROUTINES
  -**  
  +**
   **  We just have to provide the interface, because SUSv2 says:
   **  "The pthread_setconcurrency() function allows an application to
   **  inform the threads implementation of its desired concurrency
  Index: ossp-pkg/pth/pthread.pod
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 pthread.pod
  --- ossp-pkg/pth/pthread.pod	27 Jan 2002 11:03:41 -0000	1.22
  +++ ossp-pkg/pth/pthread.pod	15 Oct 2002 20:34:23 -0000	1.23
  @@ -28,7 +28,7 @@
   ##  Copyright (C) 1997 The Open Group, All Rights Reserved.
   ##
   ##
  -                              # ``The trouble with computers is that they 
  +                              # ``The trouble with computers is that they
                                 #   do what you tell them, not what you want.''
   
   =pod
  Index: ossp-pkg/pth/striptease.mk
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 striptease.mk
  --- ossp-pkg/pth/striptease.mk	27 Jan 2002 11:03:41 -0000	1.6
  +++ ossp-pkg/pth/striptease.mk	15 Oct 2002 20:34:23 -0000	1.7
  @@ -22,7 +22,7 @@
   ##
   ##  striptease.mk: Pth Makefile input for stripped down version
   ##
  -                              # ``The "micro" in "microkernel" was 
  +                              # ``The "micro" in "microkernel" was
                                 #   originally intended to mean 'small':
                                 #   Believe it or not.'' -- Ripley
   @SET_MAKE@
  Index: ossp-pkg/pth/striptease.pl
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 striptease.pl
  --- ossp-pkg/pth/striptease.pl	27 Jan 2002 10:59:41 -0000	1.13
  +++ ossp-pkg/pth/striptease.pl	15 Oct 2002 20:34:23 -0000	1.14
  @@ -22,7 +22,7 @@
   ##
   ##  striptease.pl: Strip down the Pth source tree to its minimum
   ##
  -                              # ``Mobius strippers never 
  +                              # ``Mobius strippers never
                                 #   show you their back side.''
   require 5.000;
   
  Index: ossp-pkg/pth/test_philo.c
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 test_philo.c
  --- ossp-pkg/pth/test_philo.c	27 Jan 2002 11:03:41 -0000	1.18
  +++ ossp-pkg/pth/test_philo.c	15 Oct 2002 20:34:23 -0000	1.19
  @@ -181,7 +181,7 @@
       /* spawn the philosopher threads */
       for (i = 0; i < PHILNUM; i++) {
           if (((tab->tid)[i] =
  -              pth_spawn(PTH_ATTR_DEFAULT, philosopher, 
  +              pth_spawn(PTH_ATTR_DEFAULT, philosopher,
                           &((tab->self)[i]))) == NULL) {
               perror("pth_spawn");
               exit(1);

From ossp-cvs-owner@ossp.org  Tue Oct 15 23:14:28 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 47AB3765DF; Tue, 15 Oct 2002 23:14:28 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog pth.h.in pth_high.c
Message-Id: <20021015211428.47AB3765DF@mail.ossp.org>
Date: Tue, 15 Oct 2002 23:14:28 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Oct-2002 23:14:28
  Branch: HEAD                             Handle: 2002101522142700

  Modified files:
    ossp-pkg/pth            ChangeLog pth.h.in pth_high.c

  Log:
    Added support to pth_poll(3) for the poll(2) XPG.4 flags
    POLLD{RD,WR}{NORM,BAND}.
    
    Submitted by: Jason Evans <jasone@canonware.com>
    Final shaping by: Ralf S. Engelschall

  Summary:
    Revision    Changes     Path
    1.570       +4  -0      ossp-pkg/pth/ChangeLog
    1.132       +13 -0      ossp-pkg/pth/pth.h.in
    1.85        +24 -7      ossp-pkg/pth/pth_high.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.569 -r1.570 ChangeLog
  --- ossp-pkg/pth/ChangeLog	15 Oct 2002 20:34:22 -0000	1.569
  +++ ossp-pkg/pth/ChangeLog	15 Oct 2002 21:14:27 -0000	1.570
  @@ -21,6 +21,10 @@
   
     Changes between 1.4.1 and 1.5.0 (27-Jan-2002 to xx-Sep-2002)
   
  +   *) Added support to pth_poll(3) for the poll(2) XPG.4 flags
  +      POLLD{RD,WR}{NORM,BAND}.
  +      [Jason Evans <jasone@canonware.com>, Ralf S. Engelschall]
  +
      *) Fixed a long-standing termination bug in pth_exit(3):
         The event handler of pth_exit(3) didn't let pth_exit(3) finish if
         there were any threads on the "dead queue" (where non-detached
  Index: ossp-pkg/pth/pth.h.in
  ============================================================
  $ cvs diff -u -r1.131 -r1.132 pth.h.in
  --- ossp-pkg/pth/pth.h.in	27 Jan 2002 11:03:40 -0000	1.131
  +++ ossp-pkg/pth/pth.h.in	15 Oct 2002 21:14:27 -0000	1.132
  @@ -317,7 +317,20 @@
   #define PTH_FAKE_POLL @PTH_FAKE_POLL@
   #if !(PTH_FAKE_POLL)
   /* use vendor poll(2) environment */
  +#define _XOPEN_SOURCE
   #include <poll.h>
  +#ifndef POLLRDNORM
  +#define POLLRDNORM POLLIN
  +#endif
  +#ifndef POLLRDBAND
  +#define POLLRDBAND POLLIN
  +#endif
  +#ifndef POLLWRNORM
  +#define POLLWRNORM POLLOUT
  +#endif
  +#ifndef POLLWRBAND
  +#define POLLWRBAND POLLOUT
  +#endif
   #ifndef INFTIM
   #define INFTIM (-1)
   #endif
  Index: ossp-pkg/pth/pth_high.c
  ============================================================
  $ cvs diff -u -r1.84 -r1.85 pth_high.c
  --- ossp-pkg/pth/pth_high.c	15 Oct 2002 20:34:22 -0000	1.84
  +++ ossp-pkg/pth/pth_high.c	15 Oct 2002 21:14:27 -0000	1.85
  @@ -413,13 +413,19 @@
       for(i = 0; i < nfd; i++) {
           if (!pth_util_fd_valid(pfd[i].fd))
               return_errno(-1, EBADF);
  -        if (pfd[i].events & POLLIN)
  +        if (pfd[i].events & (POLLIN|POLLRDNORM))
               FD_SET(pfd[i].fd, &rfds);
  -        if (pfd[i].events & POLLOUT)
  +        /* see select(2): "the only exceptional condition detectable
  +           is out-of-band data received on a socket", hence we push
  +           POLLWRBAND events onto wfds instead of efds. */
  +        if (pfd[i].events & (POLLOUT|POLLWRNORM|POLLWRBAND))
               FD_SET(pfd[i].fd, &wfds);
  -        if (pfd[i].events & POLLPRI)
  +        if (pfd[i].events & (POLLPRI|POLLRDBAND))
               FD_SET(pfd[i].fd, &efds);
  -        if (pfd[i].fd >= maxfd && (pfd[i].events & (POLLIN|POLLOUT|POLLPRI)))
  +        if (   pfd[i].fd >= maxfd
  +            && (pfd[i].events & (POLLIN|POLLOUT|POLLPRI|
  +                                 POLLRDNORM|POLLRDBAND|
  +                                 POLLWRNORM|POLLWRBAND)))
               maxfd = pfd[i].fd;
       }
       if (maxfd == -1)
  @@ -439,7 +445,10 @@
                   continue;
               }
               if (FD_ISSET(pfd[i].fd, &rfds)) {
  -                pfd[i].revents |= POLLIN;
  +                if (pfd[i].events & POLLIN)
  +                    pfd[i].revents |= POLLIN;
  +                if (pfd[i].events & POLLRDNORM)
  +                    pfd[i].revents |= POLLRDNORM;
                   ok++;
                   /* support for POLLHUP */
                   if (recv(pfd[i].fd, data, 64, MSG_PEEK) == -1) {
  @@ -452,11 +461,19 @@
                   }
               }
               if (FD_ISSET(pfd[i].fd, &wfds)) {
  -                pfd[i].revents |= POLLOUT;
  +                if (pfd[i].events & POLLOUT)
  +                    pfd[i].revents |= POLLOUT;
  +                if (pfd[i].events & POLLWRNORM)
  +                    pfd[i].revents |= POLLWRNORM;
  +                if (pfd[i].events & POLLWRBAND)
  +                    pfd[i].revents |= POLLWRBAND;
                   ok++;
               }
               if (FD_ISSET(pfd[i].fd, &efds)) {
  -                pfd[i].revents |= POLLPRI;
  +                if (pfd[i].events & POLLPRI)
  +                    pfd[i].revents |= POLLPRI;
  +                if (pfd[i].events & POLLRDBAND)
  +                    pfd[i].revents |= POLLRDBAND;
                   ok++;
               }
               if (ok)

From ossp-cvs-owner@ossp.org  Tue Oct 15 23:15:39 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EF72976A36; Tue, 15 Oct 2002 23:15:38 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth THANKS
Message-Id: <20021015211538.EF72976A36@mail.ossp.org>
Date: Tue, 15 Oct 2002 23:15:38 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Oct-2002 23:15:38
  Branch: HEAD                             Handle: 2002101522153800

  Modified files:
    ossp-pkg/pth            THANKS

  Log:
    add Jason Evans to THANKS file, too.

  Summary:
    Revision    Changes     Path
    1.87        +1  -0      ossp-pkg/pth/THANKS
  ____________________________________________________________________________

  Index: ossp-pkg/pth/THANKS
  ============================================================
  $ cvs diff -u -r1.86 -r1.87 THANKS
  --- ossp-pkg/pth/THANKS	15 Oct 2002 20:34:22 -0000	1.86
  +++ ossp-pkg/pth/THANKS	15 Oct 2002 21:15:38 -0000	1.87
  @@ -28,6 +28,7 @@
       o  Philippe Defert             <Philippe.Defert@cern.ch>
       o  David Dureau                <david.dureau@cea.fr>
       o  Lars Eilebrecht             <lars@hyperreal.org>
  +    o  Jason Evans                 <jasone@canonware.com>
       o  Alex Fiori                  <alex@linuxbr.com>
       o  Flux                        <flux@iae.nl>
       o  Thomas Foks                 <Thomas.Foks@hub.de>

From ossp-cvs-owner@ossp.org  Wed Oct 16 09:59:01 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D269C765E2; Wed, 16 Oct 2002 09:59:00 +0200 (CEST)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.c al.h
Message-Id: <20021016075900.D269C765E2@mail.ossp.org>
Date: Wed, 16 Oct 2002 09:59:00 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   16-Oct-2002 09:59:00
  Branch: HEAD                             Handle: 2002101608590000

  Modified files:
    ossp-pkg/sio            al.c al.h

  Log:
    move private al_buffer_t declaration to .c file

  Summary:
    Revision    Changes     Path
    1.10        +3  -0      ossp-pkg/sio/al.c
    1.5         +0  -3      ossp-pkg/sio/al.h
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 al.c
  --- ossp-pkg/sio/al.c	15 Oct 2002 13:13:06 -0000	1.9
  +++ ossp-pkg/sio/al.c	16 Oct 2002 07:59:00 -0000	1.10
  @@ -153,6 +153,9 @@
   #define AL_RC(rv) (rv)
   #endif /* WITH_EX */
   
  +struct al_buffer_st;
  +typedef struct al_buffer_st al_buffer_t;
  +
   typedef struct {
       void   *(*malloc)(size_t);
       void   (*free)(void *);
  Index: ossp-pkg/sio/al.h
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 al.h
  --- ossp-pkg/sio/al.h	14 Oct 2002 15:41:37 -0000	1.4
  +++ ossp-pkg/sio/al.h	16 Oct 2002 07:59:00 -0000	1.5
  @@ -12,9 +12,6 @@
   struct al_chunk_st;
   typedef struct al_chunk_st al_chunk_t;
   
  -struct al_buffer_st;
  -typedef struct al_buffer_st al_buffer_t;
  -
   typedef enum {
       AL_FORWARD,
       AL_BACKWARD

From ossp-cvs-owner@ossp.org  Wed Oct 16 11:28:18 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 48D6E765E2; Wed, 16 Oct 2002 11:28:18 +0200 (CEST)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.c
Message-Id: <20021016092818.48D6E765E2@mail.ossp.org>
Date: Wed, 16 Oct 2002 11:28:18 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   16-Oct-2002 11:28:18
  Branch: HEAD                             Handle: 2002101610281700

  Modified files:
    ossp-pkg/sio            al.c

  Log:
    optimization for short sizes was buggy.
    clarify comments

  Summary:
    Revision    Changes     Path
    1.11        +18 -7      ossp-pkg/sio/al.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 al.c
  --- ossp-pkg/sio/al.c	16 Oct 2002 07:59:00 -0000	1.10
  +++ ossp-pkg/sio/al.c	16 Oct 2002 09:28:17 -0000	1.11
  @@ -673,15 +673,26 @@
       ins = cur;
   
       /*
  -     * if the first chunk is not removed completely it needs to be
  -     * split into two halves to allow insertion of new chunks later
  -     * from nal
  +     * the inseration point is either behind the list or
  +     * within the current chunk
  +     *
  +     * if it is behind the list:
  +     * -> insert operation switches to append mode
  +     *
  +     * if the insertion point is at the beginning of the current chunk:
  +     * -> insertion point moves later if the chunk is removed
  +     *
  +     * if the inseration point is in the middle of the current chunk:
  +     * -> chunk is split into two so that the insertion
  +     *    point is at the beginning of the second part
  +     *
  +     * insertion point cannot be at EOD of the chunk
        *
        * splitting at this point preserves all data in case the
        * allocation of the split buffer fails
        */
       if (doinsert) {
  -        if (ins != NULL && skip > 0 && skip+n < AL_CHUNK_LEN(ins)) {
  +        if (ins != NULL && skip > 0) {
               rc = split_chunk(al, ins, skip, &splitbuf);
               if (rc != AL_OK) return AL_RC(rc);
               INSERT(al,chunks,ins,splitbuf);
  @@ -760,11 +771,11 @@
               REMOVE(al, chunks, cur);
   
               /*
  -             * when the insertion point is removed, we have to adjust
  +             * when the insertion chunk is removed, we have to adjust
                * the insertion point
                *
  -             * if the insertion point was the last chunk we get a NULL
  -             * next pointer and the insertion method switches to APPEND
  +             * if the insertion chunk was the last chunk we get a NULL
  +             * next pointer and the insertion method switches to append
                * mode
                */
               if (cur == ins)

From ossp-cvs-owner@ossp.org  Wed Oct 16 11:31:55 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BA952765DA; Wed, 16 Oct 2002 11:31:55 +0200 (CEST)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.c
Message-Id: <20021016093155.BA952765DA@mail.ossp.org>
Date: Wed, 16 Oct 2002 11:31:55 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   16-Oct-2002 11:31:55
  Branch: HEAD                             Handle: 2002101610315500

  Modified files:
    ossp-pkg/sio            al.c

  Log:
    code cleanup

  Summary:
    Revision    Changes     Path
    1.12        +27 -27     ossp-pkg/sio/al.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 al.c
  --- ossp-pkg/sio/al.c	16 Oct 2002 09:28:17 -0000	1.11
  +++ ossp-pkg/sio/al.c	16 Oct 2002 09:31:55 -0000	1.12
  @@ -828,24 +828,24 @@
    * list traversal requires a context. It needs to be
    * malloced to keep its inner structure private
    */
  -al_rc_t al_txalloc(al_t *al, al_tx_t **txpp)
  +al_rc_t al_txalloc(al_t *al, al_tx_t **txp)
   {
  -    al_tx_t *txp;
  +    al_tx_t *tx;
   
  -    txp = (al_tx_t*)(al->m.malloc)(sizeof(al_tx_t));
  -    if (txp == NULL)
  +    tx = (al_tx_t*)(al->m.malloc)(sizeof(al_tx_t));
  +    if (tx == NULL)
           return AL_RC(AL_ERR_MEM);
   
  -    *txpp = txp;
  +    *txp = tx;
       return AL_OK;
   }
   
   /*
    * free traversal context using proper policy function
    */
  -al_rc_t al_txfree(al_t *al, al_tx_t *txp)
  +al_rc_t al_txfree(al_t *al, al_tx_t *tx)
   {
  -    (al->m.free)(txp);
  +    (al->m.free)(tx);
       return AL_OK;
   }
   
  @@ -855,17 +855,17 @@
    * - do initial seek, fail if position does not exist
    * - save traversal parameters
    */
  -al_rc_t al_traverse(al_t *al, size_t off, size_t n, al_td_t dir, al_tx_t *txp)
  +al_rc_t al_traverse(al_t *al, size_t off, size_t n, al_td_t dir, al_tx_t *tx)
   {
       al_rc_t rc;
   
  -    txp->cur = NULL;
  +    tx->cur = NULL;
   
  -    rc = al_seek(al, off, &txp->cur, &txp->skip);
  +    rc = al_seek(al, off, &tx->cur, &tx->skip);
       if (rc != AL_OK) return AL_RC(rc);
   
  -    txp->dir  = dir;
  -    txp->togo = n;
  +    tx->dir  = dir;
  +    tx->togo = n;
   
       return AL_OK;
   }
  @@ -877,19 +877,19 @@
    * clip view chunk to traversal bounds
    * advance chunk cursor according to traversal direction
    */
  -al_rc_t al_traverse_next(al_t *al, al_tx_t *txp, al_chunk_t **alcp)
  +al_rc_t al_traverse_next(al_t *al, al_tx_t *tx, al_chunk_t **alcp)
   {
       size_t step;
   
  -    if (txp->togo <= 0)     /* XXX - togo can be negative from bad input */
  +    if (tx->togo <= 0)     /* XXX - togo can be negative from bad input */
           return AL_ERR_EOF;
   
  -    if (txp->cur == NULL)   /* premature EOF */
  +    if (tx->cur == NULL)   /* premature EOF */
           return AL_ERR_EOF;
   
  -    step = AL_CHUNK_LEN(txp->cur);
  -    if (step > txp->togo)
  -        step = txp->togo;
  +    step = AL_CHUNK_LEN(tx->cur);
  +    if (step > tx->togo)
  +        step = tx->togo;
   
       /*
        * synthetic chunk which is NOT maintained in usecount
  @@ -898,22 +898,22 @@
        * ALLOWED is read access to chunk content
        * ALLOWED is modification in place of chunk content
        */
  -    txp->view        = *(txp->cur);
  -    txp->view.begin += txp->skip;
  -    txp->view.end    = txp->view.begin + step;
  +    tx->view        = *(tx->cur);
  +    tx->view.begin += tx->skip;
  +    tx->view.end    = tx->view.begin + step;
   
  -    switch (txp->dir) {
  +    switch (tx->dir) {
       case AL_FORWARD:
  -        txp->cur   = NEXT(txp->cur,chunks);
  -        txp->togo -= step;
  +        tx->cur   = NEXT(tx->cur,chunks);
  +        tx->togo -= step;
           break;
       case AL_BACKWARD:
  -        txp->cur   = PREV(txp->cur,chunks);
  -        txp->togo -= step;
  +        tx->cur   = PREV(tx->cur,chunks);
  +        tx->togo -= step;
           break;
       }
   
  -    *alcp = &txp->view;
  +    *alcp = &tx->view;
       return AL_OK;
   }
   

From ossp-cvs-owner@ossp.org  Wed Oct 16 12:11:36 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0CEC7765DA; Wed, 16 Oct 2002 12:11:36 +0200 (CEST)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.pod
Message-Id: <20021016101136.0CEC7765DA@mail.ossp.org>
Date: Wed, 16 Oct 2002 12:11:36 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   16-Oct-2002 12:11:35
  Branch: HEAD                             Handle: 2002101611113500

  Added files:
    ossp-pkg/sio            al.pod

  Log:
    initial submit, typos ? never !

  Summary:
    Revision    Changes     Path
    1.1         +399 -0     ossp-pkg/sio/al.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.pod
  ============================================================
  $ cvs update -p -r1.1 al.pod
  ##
  ##  OSSP al - Assembly Lists
  ##  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  ##
  ##  This file is part of OSSP al, an abstract datatype of a data buffer
  ##  that can assemble, move and truncate data but avoids actual copying.
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  al.pod: assembly lists library manual page
  ##
  
  =pod
  
  =head1 NAME
  
  B<OSSP al> - Assembly Lists
  
  =head1 VERSION
  
  B<OSSP al AL_VERSION_STR>
  
  =head1 SYNOPSIS
  
  =over 4
  
  =item B<Abstract Data Types>:
  
  al_rc_t,
  al_t,
  al_tx_t,
  al_td_t,
  al_chunk_t.
  
  =item B<Assembly List Operations>:
  
  al_create,
  al_destroy,
  al_append_bytes,
  al_prepend_bytes,
  al_attach_buffer,
  al_splice,
  al_bytes.
  
  =item B<Traversal Operations>:
  
  al_txalloc,
  al_txfree,
  al_traverse,
  al_traverse_next,
  al_traverse_cb.
  
  =item B<Convenience Operations>:
  
  al_flatten,
  al_copy.
  
  =item B<Chunk Operations>:
  
  al_chunk_len,
  al_chunk_span,
  al_chunk_ptr.
  
  =item B<Error Handling>:
  
  al_error.
  
  =back
  
  =head1 DESCRIPTION
  
  B<OSSP al> defines an abstract type of a data buffer that can
  assemble, move and truncate data but avoids actual copying.
  
  It provides the following key features:
  
  =over 4
  
  =back
  
  =head1 DATA TYPES
  
  B<OSSP al> uses five data types in its API:
  
  =over 4
  
  =item B<al_rc_t> (Return Code Type)
  
  This is an exported enumerated integer type with the following possible
  values:
  
   AL_OK       Everything Ok
   AL_ERR_ARG  Invalid Argument
   AL_ERR_MEM  Not Enough Memory
   AL_ERR_EOF  End Of Communication
   AL_ERR_INT  Internal Error
  
  =item B<al_t> (Assembly List Type)
  
  This is an opaque data type representing a data buffer.
  Only pointers to this abstract data type are used in the API.
  
  =item B<al_tx_t> (Traversal Context Type)
  
  This is an opaque data type representing a the state of a buffer
  traversal operation. Only pointers to this abstract data type are
  used in the API.
  
  =item B<al_td_t> (Traversal Direction Type)
  
  This is an exported enumerated integer type with the following possible
  values:
  
   AL_FORWARD    traverse list from beginning to end
   AL_BACKWARD   traverse list from end to beginning
  
  =item B<al_chunk_t> (Chunk Type)
  
  This is an opaque data type representing a chunk of a buffer during
  a traversal operation. Only pointers to this abstract data type are
  used in the API. The B<al_chunk_t> type is used to generate a pointer
  and byte count to access the data in the buffer.
  
  =back
  
  =head1 FUNCTIONS
  
  B<OSSP al> provides a bunch of API functions, all modelled after the
  same prototype: "C<al_rc_t> C<al_>I<name>C<(al_>[C<chunk>]C<_t *,>
  ...C<)>". This means every function returns C<al_rc_t> to indicate its
  success (C<AL_OK>) or failure (C<AL_ERR_XXX>) by returning a return code
  (the corresponding describing text can be determined by passing this
  return code to C<al_error>). Each function name starts with the common
  prefix C<al_> and receives a C<al_t> (or C<al_chunk_t>) object on which
  it operates as its first argument.
  
  =head2 Assembly List Operations
  
  =over 4
  
  =item al_rc_t B<al_create>(al_t **I<alp>);
  
  Create an assembly list abstraction object. 
  The object is stored in I<alp> on success.
  
  Example: C<al_t *al; sa_create(&al);>
  
  =item al_rc_t B<al_destroy>(al_t *I<al>);
  
  Destroy an assembly list abstraction object.
  The object I<al> is invalid after this call succeeded.
  
  Example: C<al_destroy(al);>
  
  =item al_rc_t B<al_append_bytes>(al_t *I<al>, const char *I<src>, size_t I<n>);
  
  Append I<n> bytes from a storage array at I<src> to the assembly list, the
  bytes are copied, memory is allocated as necessary.
  
  Example: C<al_append_bytes(al, "Goodbye cruel world\n", 20);>
  
  =item al_rc_t B<al_prepend_bytes>(al_t *I<al>, const char *I<src>, size_t I<n>);
  
  Prepend I<n> bytes from a storage array at I<src> to the assembly list, the
  bytes are copied, memory is allocated as necessary.
  
  Example: C<al_prepend_bytes(al, "Hello world\n", 12);>
  
  =item al_rc_t B<al_attach_buffer>(al_t *I<al>, char *I<p>, size_t I<n>);
  
  Attach the storage array starting at I<p> with size <n> at the end of
  the assembly list. Its content will become part of the assembly list
  and is subject to assembly list operations. The storage array must stay
  in scope for the whole life time of the assembly list, there is no way
  to detach it from the assembly list.
  
  Example: C<char store[] = "foo\n"; al_attach_buffer(al, store, sizeof(store));>
  
  =item al_rc_t B<al_splice>(al_t *I<al>, size_t I<off>, size_t I<n>, al_t *I<nal>, al_t *I<tal>);
  
  This is the general data move operation modelled after the perl operator
  B<splice>.
  
  I<off> and I<n> are byte counts that define a span of bytes within the
  source assembly list I<al>. These bytes are moved to the target list
  I<tal> while the content of the new list I<nal> is moved to the source
  to replace the selected span.
  
  There are two deviations from the perl operator to avoid copying:
  
  The move to the target list I<tal> appends the data to its end.
  The move from the new list I<nal> removes the data from its origin.
  
  The target list I<tal> may be B<NULL>, the data bytes that would
  be moved to the target are then discard. This avoids creation
  and destruction of a dummy target.
  
  The new list I<nal> may be B<NULL>, then nothing is inserted into
  the source. This avoids creation and destruction of an empty list.
  
  Examples:
  
   al_t *source;
   al_t *insertion;
   al_t *buffer;
  
   al_create(&source);
   al_create(&insertion);
   al_create(&buffer);
  
   al_append_bytes(source, "Hello world\n", 12);
   al_append_bytes(insertion, "Goodbye cruel", 13);
  
   al_splice(source, 0, 5, insertion, buffer);
  
  The buffer now holds the string "Hello".
  The source now holds the string "Goodbye cruel world\n".
  The insertion is now empty.
  
   al_append_bytes(insertion, "brave", 5);
   al_splice(source, 8, 5, insertion, NULL);
  
  The source now holds the string "Goodbye brave world\n".
  The insertion is now empty.
  
   al_append_bytes(insertion, "B", 1);
   al_splice(source, 0, 8, NULL, buffer);
   al_splice(source, 0, 1, insertion, NULL);
   al_append_bytes(insertion, "\n", 1);
   al_splice(buffer, al_bytes(buffer)-1, 1, insertion, NULL),
  
  The source now holds the string "Brave world\n".
  The buffer now holds the string "HelloGoodbye\n".
  The insertion is empty.
  
  =item size_t B<al_bytes>(const al_t *I<al>);
  
  Returns the number of bytes stored in the assembly list.
  
  Example: C<al_t *al; size_t count; count = al_bytes(al);>
  
  =back
  
  =head2 Traversal Operations
  
  =over 4
  
  =item al_rc_t B<al_txalloc>(al_t *I<al>, al_tx_t **txp);
  
  Allocate a traversal context.
  
  Example: C<al_tx_t *tx; al_txalloc(&tx);>
  
  =item al_rc_t B<al_free>(al_t *I<al>, al_tx_t *tx);
  
  Free a traversal context.
  
  Example: C<al_tx_t *tx; al_txfree(tx);>
  
  =item al_rc_t B<al_traverse>(al_t *I<al>, size_t I<off>, size_t I<n>, al_td_t I<dir>, al_tx_t *I<tx>);
  
  Start traversing the assembly list I<al> beginning at byte offset I<off>
  for up to I<n> bytes in direction I<dir>. The state of the traversal is
  stored in the supplied context I<tx>.
  
  This function fails when the offset is outside the assembly list bounds.
  
  =item al_rc_t B<al_traverse_next>(al_t *I<al>, al_tx_t *I<tx>, al_chunk_t **I<alcp>);
  
  Complete a traversal step on the assembly list I<al> using the initialized
  context I<tx>. In each step a chunk descriptor is filled and stored in
  I<alcp>. All bytes of the chunk are guaranteed to be stored in a flat
  array and can be accessed through the chunk operations described below.
  
  The function returns AL_ERR_EOF when it passes the end (or beginning
  in case of backward traversal) of the list.
  
  =item al_rc_t B<al_traverse_cb>(al_t *I<al>, size_t I<off>, size_t I<n>, al_td_t I<dir>, al_rc_t (*I<cb>)(al_chunk_t *, void *), void *u);
  
  B<al_traverse_cb> is a wrapper function that does a full list traversal in
  a single call. In every step a chunk descriptor is passed to the callback
  function I<cb> together with a user supplied pointer I<u>. When the
  callback function returns anything but AL_OK the traversal is aborted
  and B<al_traverse_cb> returns with that result code.
  
  =back
  
  =head2 Convenience Operations
  
  =over 4
  
  =item al_rc_t B<al_flatten>(al_t *I<al>, size_t I<off>, size_t I<n>, char *I<dst>, size_t *I<lenp>);
  
  I<off> and I<n> are byte counts that define a span of bytes with the
  assembly list I<al>. These bytes are copied to the storage array I<dst>
  which must be sized appropriately.
  I<off> must be a valid offset, I<n> must be positive but may exceed
  the size of the assembly list.
  The actual number of bytes that is copied to the destination is stored
  in I<lenp>.
  
  Example:
  
   al_t *al;
   char buffer[42];
   size_t actual;
  
   al_flatten(al, 500, 42, buffer, &actual);
  
  =item al_rc_t B<al_copy>(al_t *I<al>, size_t I<off>, size_t I<n>, al_t *I<tal);
  
  I<off> and I<n> are byte counts that define a span of bytes within the
  assembly list I<al>. These bytes are appended to the target list I<tal>,
  memory is allocated as necessary.
  I<off> must be a valid offset, I<n> must be positive but may exceed
  the size of the assembly list.
  
  Example:
  
   al_t *al;
   al_t *tal;
  
   al_create(&tal);
   al_flatten(al, 500, 42, tal);
  
  =back
  
  =head2 Chunk Operations
  
  =over 4
  
  =item size_t B<al_chunk_len>(al_chunk_t *I<alc>);
  
  Returns the number of bytes in a chunk.
  
  =item size_t B<al_chunk_span>(al_chunk_t *I<alc>, size_t I<off>, size_t I<n>);
  
  I<off> and I<n> are byte counts that define a span of bytes.
  B<al_chunk_span> returns the number of bytes that are stored in the chunk.
  I<off> must be a valid offset, I<n> must be positive but may exceed
  the size of the chunk.
  
  =item char *B<al_chunk_ptr>(al_chunk_t *I<alc>, size_t I<off>);
  
  Returns the pointer to the byte at offset I<off> within the chunk I<alc>.
  I<off> must be positive and must not exceed the size of the chunk.
  Since all bytes of the chunk are guaranteed to be stored in a flat
  array the pointer can be used to reference every byte within the chunk.
  
  Example:
  
   al_chunk_t *alc;
   char *start, *end;
  
   start = al_chunk_ptr(alc, 0);
   end   = start + al_chunk_len(alc) - 1;
  
  =back
  
  =head2 Error Handling
  
  =over 4
  
  =item const char *B<al_error>(al_rc_t I<rv>);
  
  =back
  
  =head1 SEE ALSO
  
  =head1 HISTORY
  
  B<OSSP al> was invented in October 2002 by Michael van Elst
  E<lt>mlelstv@dev.de.cw.netE<gt> for use inside the OSSP project.
  
  =head1 AUTHORS
  
   Michael van Elst
   mlelstv@dev.de.cw.net
  
  =cut
  

From ossp-cvs-owner@ossp.org  Wed Oct 16 13:13:55 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 42B4D765DA; Wed, 16 Oct 2002 13:13:55 +0200 (CEST)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.h
Message-Id: <20021016111355.42B4D765DA@mail.ossp.org>
Date: Wed, 16 Oct 2002 13:13:55 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   16-Oct-2002 13:13:55
  Branch: HEAD                             Handle: 2002101612135400

  Modified files:
    ossp-pkg/sio            al.h

  Log:
    code cleanup

  Summary:
    Revision    Changes     Path
    1.6         +4  -4      ossp-pkg/sio/al.h
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.h
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 al.h
  --- ossp-pkg/sio/al.h	16 Oct 2002 07:59:00 -0000	1.5
  +++ ossp-pkg/sio/al.h	16 Oct 2002 11:13:54 -0000	1.6
  @@ -26,10 +26,10 @@
   al_rc_t al_prepend_bytes(al_t *al, const char *src, size_t n);
   al_rc_t al_attach_buffer(al_t *al, char *p, size_t n);
   al_rc_t al_splice(al_t *al, size_t off, size_t n, al_t *nal, al_t *tal);
  -al_rc_t al_txalloc(al_t *al, al_tx_t **txpp);
  -al_rc_t al_txfree(al_t *al, al_tx_t *txp);
  -al_rc_t al_traverse(al_t *al, size_t off, size_t n, al_td_t dir, al_tx_t *txp);
  -al_rc_t al_traverse_next(al_t *al, al_tx_t *txp, al_chunk_t **alcp);
  +al_rc_t al_txalloc(al_t *al, al_tx_t **txp);
  +al_rc_t al_txfree(al_t *al, al_tx_t *tx);
  +al_rc_t al_traverse(al_t *al, size_t off, size_t n, al_td_t dir, al_tx_t *tx);
  +al_rc_t al_traverse_next(al_t *al, al_tx_t *tx, al_chunk_t **alcp);
   al_rc_t al_traverse_cb(al_t *al, size_t off, size_t n, al_td_t dir,
                          al_rc_t (*cb)(al_chunk_t *, void *), void *u);
   al_rc_t al_flatten(al_t *al, size_t off, size_t n, char *dst, size_t *lenp);

From ossp-cvs-owner@ossp.org  Wed Oct 16 13:45:30 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6AB6976A37; Wed, 16 Oct 2002 13:45:30 +0200 (CEST)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.c
Message-Id: <20021016114530.6AB6976A37@mail.ossp.org>
Date: Wed, 16 Oct 2002 13:45:30 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   16-Oct-2002 13:45:30
  Branch: HEAD                             Handle: 2002101612453000

  Modified files:
    ossp-pkg/sio            al.c

  Log:
    use default signedness in API and internally

  Summary:
    Revision    Changes     Path
    1.13        +1  -1      ossp-pkg/sio/al.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.c
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 al.c
  --- ossp-pkg/sio/al.c	16 Oct 2002 09:31:55 -0000	1.12
  +++ ossp-pkg/sio/al.c	16 Oct 2002 11:45:30 -0000	1.13
  @@ -178,7 +178,7 @@
   };
   
   struct al_buffer_st {
  -    unsigned char  *mem;
  +    char           *mem;
       size_t         size;
       int            usecount;
       int            freemem;

From ossp-cvs-owner@ossp.org  Wed Oct 16 13:50:43 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 22C7776A32; Wed, 16 Oct 2002 13:50:43 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.pod
Message-Id: <20021016115043.22C7776A32@mail.ossp.org>
Date: Wed, 16 Oct 2002 13:50:43 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Oct-2002 13:50:43
  Branch: HEAD                             Handle: 2002101612504200

  Modified files:
    ossp-pkg/sio            al.pod

  Log:
    remove an unneccessary 'a' and speak about the Perl language, not the perl program ;)

  Summary:
    Revision    Changes     Path
    1.2         +2  -2      ossp-pkg/sio/al.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.pod
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 al.pod
  --- ossp-pkg/sio/al.pod	16 Oct 2002 10:11:35 -0000	1.1
  +++ ossp-pkg/sio/al.pod	16 Oct 2002 11:50:42 -0000	1.2
  @@ -120,7 +120,7 @@
   
   =item B<al_tx_t> (Traversal Context Type)
   
  -This is an opaque data type representing a the state of a buffer
  +This is an opaque data type representing the state of a buffer
   traversal operation. Only pointers to this abstract data type are
   used in the API.
   
  @@ -204,7 +204,7 @@
   I<tal> while the content of the new list I<nal> is moved to the source
   to replace the selected span.
   
  -There are two deviations from the perl operator to avoid copying:
  +There are two deviations from the Perl operator to avoid copying:
   
   The move to the target list I<tal> appends the data to its end.
   The move from the new list I<nal> removes the data from its origin.

From ossp-cvs-owner@ossp.org  Wed Oct 16 14:37:09 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 94A62765DA; Wed, 16 Oct 2002 14:37:09 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.c al.h al.pod al_test.c
Message-Id: <20021016123709.94A62765DA@mail.ossp.org>
Date: Wed, 16 Oct 2002 14:37:09 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Oct-2002 14:37:09
  Branch: HEAD                             Handle: 2002101613370800

  Modified files:
    ossp-pkg/sio            al.c al.h al.pod al_test.c

  Log:
    add the usual amount of license fun

  Summary:
    Revision    Changes     Path
    1.14        +31 -0      ossp-pkg/sio/al.c
    1.7         +37 -0      ossp-pkg/sio/al.h
    1.3         +5  -2      ossp-pkg/sio/al.pod
    1.6         +31 -0      ossp-pkg/sio/al_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.c
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 al.c
  --- ossp-pkg/sio/al.c	16 Oct 2002 11:45:30 -0000	1.13
  +++ ossp-pkg/sio/al.c	16 Oct 2002 12:37:08 -0000	1.14
  @@ -1,3 +1,34 @@
  +/*
  +**  OSSP al -- Assembly Lists
  +**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  +**
  +**  This file is part of OSSP al, an abstract datatype of a data buffer
  +**  that can assemble, move and truncate data but avoids actual copying.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  al.c: assembly lists library implementation
  +*/
  +
   #include <stddef.h>
   #include <stdlib.h>
   #include <string.h>
  Index: ossp-pkg/sio/al.h
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 al.h
  --- ossp-pkg/sio/al.h	16 Oct 2002 11:13:54 -0000	1.6
  +++ ossp-pkg/sio/al.h	16 Oct 2002 12:37:08 -0000	1.7
  @@ -1,3 +1,37 @@
  +/*
  +**  OSSP al -- Assembly Lists
  +**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  +**
  +**  This file is part of OSSP al, an abstract datatype of a data buffer
  +**  that can assemble, move and truncate data but avoids actual copying.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  al.h: assembly lists public API definition
  +*/
  +
  +#ifndef __AL_H__
  +#define __AL_H__
  +
   typedef enum {
       AL_OK,
       AL_ERR_ARG,
  @@ -41,3 +75,6 @@
   char *al_chunk_ptr(al_chunk_t *alc, size_t off);
   
   const char *al_error(al_rc_t rc);
  +
  +#endif /* __AL_H__ */
  +
  Index: ossp-pkg/sio/al.pod
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 al.pod
  --- ossp-pkg/sio/al.pod	16 Oct 2002 11:50:42 -0000	1.2
  +++ ossp-pkg/sio/al.pod	16 Oct 2002 12:37:08 -0000	1.3
  @@ -1,8 +1,9 @@
   ##
   ##  OSSP al - Assembly Lists
  -##  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
   ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
   ##
   ##  This file is part of OSSP al, an abstract datatype of a data buffer
   ##  that can assemble, move and truncate data but avoids actual copying.
  @@ -388,7 +389,9 @@
   =head1 HISTORY
   
   B<OSSP al> was invented in October 2002 by Michael van Elst
  -E<lt>mlelstv@dev.de.cw.netE<gt> for use inside the OSSP project.
  +E<lt>mlelstv@dev.de.cw.netE<gt> under contract with Cable & Wireless
  +Germany E<lt>http://www.cw.com/deE<gt> for use inside the OSSP project
  +E<lt>http://www.ossp.org/E<gt>.
   
   =head1 AUTHORS
   
  Index: ossp-pkg/sio/al_test.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 al_test.c
  --- ossp-pkg/sio/al_test.c	14 Oct 2002 15:41:37 -0000	1.5
  +++ ossp-pkg/sio/al_test.c	16 Oct 2002 12:37:08 -0000	1.6
  @@ -1,3 +1,34 @@
  +/*
  +**  OSSP al -- Assembly Lists
  +**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  +**
  +**  This file is part of OSSP al, an abstract datatype of a data buffer
  +**  that can assemble, move and truncate data but avoids actual copying.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  al_test.c: assembly lists library, minimal test suite
  +*/
  +
   #include <stdlib.h>
   #include <stdio.h>
   #include <string.h>

From ossp-cvs-owner@ossp.org  Wed Oct 16 14:51:37 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 83B75765E2; Wed, 16 Oct 2002 14:51:37 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.pod
Message-Id: <20021016125137.83B75765E2@mail.ossp.org>
Date: Wed, 16 Oct 2002 14:51:37 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Oct-2002 14:51:37
  Branch: HEAD                             Handle: 2002101613513700

  Modified files:
    ossp-pkg/sio            al.pod

  Log:
    fix typo

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/sio/al.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.pod
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 al.pod
  --- ossp-pkg/sio/al.pod	16 Oct 2002 12:37:08 -0000	1.3
  +++ ossp-pkg/sio/al.pod	16 Oct 2002 12:51:37 -0000	1.4
  @@ -162,7 +162,7 @@
   Create an assembly list abstraction object. 
   The object is stored in I<alp> on success.
   
  -Example: C<al_t *al; sa_create(&al);>
  +Example: C<al_t *al; al_create(&al);>
   
   =item al_rc_t B<al_destroy>(al_t *I<al>);
   

From ossp-cvs-owner@ossp.org  Wed Oct 16 16:20:49 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5CE02765E2; Wed, 16 Oct 2002 16:20:49 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al_test.c
Message-Id: <20021016142049.5CE02765E2@mail.ossp.org>
Date: Wed, 16 Oct 2002 16:20:49 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   16-Oct-2002 16:20:49
  Branch: HEAD                             Handle: 2002101615204800

  Modified files:
    ossp-pkg/sio            al_test.c

  Log:
    I assume this is a copy and paste error, but is not syntactically wrong in any
    case.

  Summary:
    Revision    Changes     Path
    1.7         +1  -1      ossp-pkg/sio/al_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al_test.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 al_test.c
  --- ossp-pkg/sio/al_test.c	16 Oct 2002 12:37:08 -0000	1.6
  +++ ossp-pkg/sio/al_test.c	16 Oct 2002 14:20:48 -0000	1.7
  @@ -145,7 +145,7 @@
       for (i=0; i<500; ++i)
           al_append_bytes(al, S("Huhu world\n"));
   
  -    al_append_bytes(al, S("Hello world\n"));
  +    al_append_bytes(al2, S("Hello world\n"));
   
       al_append_bytes(al3, S("HUHU WORLD\n"));
   

From ossp-cvs-owner@ossp.org  Thu Oct 17 12:17:55 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 29DD2765E0; Thu, 17 Oct 2002 12:17:55 +0200 (CEST)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.c
Message-Id: <20021017101755.29DD2765E0@mail.ossp.org>
Date: Thu, 17 Oct 2002 12:17:55 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   17-Oct-2002 12:17:55
  Branch: HEAD                             Handle: 2002101711175400

  Modified files:
    ossp-pkg/sio            al.c

  Log:
    make comment clearer about not resizing chunks in a shared buffer

  Summary:
    Revision    Changes     Path
    1.15        +10 -2      ossp-pkg/sio/al.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.c
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 al.c
  --- ossp-pkg/sio/al.c	16 Oct 2002 12:37:08 -0000	1.14
  +++ ossp-pkg/sio/al.c	17 Oct 2002 10:17:54 -0000	1.15
  @@ -236,7 +236,11 @@
       ((n) > AL_CHUNK_LEN(alc) - (off) ? \
       AL_CHUNK_LEN(alc) - (off) : (n))
   
  -/* number of bytes a chunk can be grown to the end */
  +/*
  + * number of bytes a chunk can be grown to the end
  + * we must not grow a chunk in a shared buffer since
  + * we do not track other chunks sharing the buffer
  + */
   #define AL_CHUNK_RESERVE(alc) \
       ((alc) \
       ? (alc)->buf->usecount > 1 ? 0 : (alc)->buf->size - (alc)->end \
  @@ -246,7 +250,11 @@
   #define AL_RESIZE(al, alc, n) \
       do { (alc)->end += n; (al)->bytes += (n); } while (0)
   
  -/* number of bytes a chunk can be grown to the beginning */
  +/*
  + * number of bytes a chunk can be grown to the beginning
  + * we must not grow a chunk in a shared buffer since
  + * we do not track other chunks sharing the buffer
  + */
   #define AL_CHUNK_PRESERVE(alc) \
       ((alc) \
       ? (alc)->buf->usecount > 1 ? 0 : (alc)->begin \

From ossp-cvs-owner@ossp.org  Thu Oct 17 13:42:44 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4D21E765DA; Thu, 17 Oct 2002 13:42:44 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.c
Message-Id: <20021017114244.4D21E765DA@mail.ossp.org>
Date: Thu, 17 Oct 2002 13:42:44 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   17-Oct-2002 13:42:44
  Branch: HEAD                             Handle: 2002101712424300

  Modified files:
    ossp-pkg/sio            al.c

  Log:
    using REMTAIL ... closer approximity to the CPU

  Summary:
    Revision    Changes     Path
    1.16        +5  -0      ossp-pkg/sio/al.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.c
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 al.c
  --- ossp-pkg/sio/al.c	17 Oct 2002 10:17:54 -0000	1.15
  +++ ossp-pkg/sio/al.c	17 Oct 2002 11:42:43 -0000	1.16
  @@ -356,6 +356,11 @@
               return AL_ERR_MEM;
           }
       } else {
  +        /* thl: FIXME i would suggest using REMTAIL() here because dispose_chunk
  +         *            puts the latest disposed chunks at the end of the list and
  +         *            those latest data should have a closer approximation to the
  +         *            CPU in terms of internal cache, external cache, RAM and VM
  +         */
           REMHEAD(&alc_freelist, chunks, alc);
           --alc_freecount;
       }

From ossp-cvs-owner@ossp.org  Thu Oct 17 14:23:14 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 01E3F765E0; Thu, 17 Oct 2002 14:23:13 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.pod
Message-Id: <20021017122313.01E3F765E0@mail.ossp.org>
Date: Thu, 17 Oct 2002 14:23:13 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   17-Oct-2002 14:23:13
  Branch: HEAD                             Handle: 2002101713231300

  Modified files:
    ossp-pkg/sio            al.pod

  Log:
    typo

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-pkg/sio/al.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.pod
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 al.pod
  --- ossp-pkg/sio/al.pod	16 Oct 2002 12:51:37 -0000	1.4
  +++ ossp-pkg/sio/al.pod	17 Oct 2002 12:23:13 -0000	1.5
  @@ -270,7 +270,7 @@
   
   Example: C<al_tx_t *tx; al_txalloc(&tx);>
   
  -=item al_rc_t B<al_free>(al_t *I<al>, al_tx_t *tx);
  +=item al_rc_t B<al_txfree>(al_t *I<al>, al_tx_t *tx);
   
   Free a traversal context.
   

From ossp-cvs-owner@ossp.org  Thu Oct 17 15:15:09 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6FE6A765DA; Thu, 17 Oct 2002 15:15:09 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.pod
Message-Id: <20021017131509.6FE6A765DA@mail.ossp.org>
Date: Thu, 17 Oct 2002 15:15:09 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   17-Oct-2002 15:15:09
  Branch: HEAD                             Handle: 2002101714150700

  Modified files:
    ossp-pkg/sio            al.pod

  Log:
    mention callback returning AL_ERR_EOF

  Summary:
    Revision    Changes     Path
    1.6         +4  -2      ossp-pkg/sio/al.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.pod
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 al.pod
  --- ossp-pkg/sio/al.pod	17 Oct 2002 12:23:13 -0000	1.5
  +++ ossp-pkg/sio/al.pod	17 Oct 2002 13:15:07 -0000	1.6
  @@ -299,8 +299,10 @@
   B<al_traverse_cb> is a wrapper function that does a full list traversal in
   a single call. In every step a chunk descriptor is passed to the callback
   function I<cb> together with a user supplied pointer I<u>. When the
  -callback function returns anything but AL_OK the traversal is aborted
  -and B<al_traverse_cb> returns with that result code.
  +callback function returns AL_OK the traversal continues, when it returns
  +AL_ERR_EOF the traversal is aborted and AL_OK is returned to the original
  +caller. Any other return code returned by the callback is passed to the
  +original caller verbatim.
   
   =back
   

From ossp-cvs-owner@ossp.org  Thu Oct 17 16:16:51 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6F176765DA; Thu, 17 Oct 2002 16:16:51 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.c
Message-Id: <20021017141651.6F176765DA@mail.ossp.org>
Date: Thu, 17 Oct 2002 16:16:51 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   17-Oct-2002 16:16:51
  Branch: HEAD                             Handle: 2002101715165100

  Modified files:
    ossp-pkg/sio            al.c

  Log:
    decouple pos/neg. offset handling from search direction decision

  Summary:
    Revision    Changes     Path
    1.17        +6  -2      ossp-pkg/sio/al.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.c
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 al.c
  --- ossp-pkg/sio/al.c	17 Oct 2002 11:42:43 -0000	1.16
  +++ ossp-pkg/sio/al.c	17 Oct 2002 14:16:51 -0000	1.17
  @@ -429,7 +429,11 @@
       size_t pos, end;
       size_t chunksize;
   
  -    if (off >= 0) {
  +    if (off < 0) /* off is negative */
  +        off += al->bytes;
  +
  +    if ((al->bytes / 2) >= off) { /* FIXME poor man's heuristic */
  +        /* forward search */
           pos = 0;
           FOREACH(al,chunks,cur) {
               chunksize = AL_CHUNK_LEN(cur);
  @@ -450,7 +454,7 @@
               return AL_OK;
           }
       } else {
  -        off += al->bytes;
  +        /* reverse search */
           pos  = al->bytes;
           FOREACHR(al,chunks,cur) {
               chunksize = AL_CHUNK_LEN(cur);

From ossp-cvs-owner@ossp.org  Thu Oct 17 16:17:34 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C559E769F3; Thu, 17 Oct 2002 16:17:33 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.h
Message-Id: <20021017141733.C559E769F3@mail.ossp.org>
Date: Thu, 17 Oct 2002 16:17:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   17-Oct-2002 16:17:33
  Branch: HEAD                             Handle: 2002101715173300

  Modified files:
    ossp-pkg/sio            al.h

  Log:
    cosmetics

  Summary:
    Revision    Changes     Path
    1.8         +13 -14     ossp-pkg/sio/al.h
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.h
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 al.h
  --- ossp-pkg/sio/al.h	16 Oct 2002 12:37:08 -0000	1.7
  +++ ossp-pkg/sio/al.h	17 Oct 2002 14:17:33 -0000	1.8
  @@ -54,25 +54,24 @@
   struct al_tx_st;
   typedef struct al_tx_st al_tx_t;
   
  -al_rc_t al_create(al_t **alp);
  -al_rc_t al_destroy(al_t *al);
  -al_rc_t al_append_bytes(al_t *al, const char *src, size_t n);
  +al_rc_t al_create       (al_t **alp);
  +al_rc_t al_destroy      (al_t *al);
  +al_rc_t al_append_bytes (al_t *al, const char *src, size_t n);
   al_rc_t al_prepend_bytes(al_t *al, const char *src, size_t n);
   al_rc_t al_attach_buffer(al_t *al, char *p, size_t n);
  -al_rc_t al_splice(al_t *al, size_t off, size_t n, al_t *nal, al_t *tal);
  -al_rc_t al_txalloc(al_t *al, al_tx_t **txp);
  -al_rc_t al_txfree(al_t *al, al_tx_t *tx);
  -al_rc_t al_traverse(al_t *al, size_t off, size_t n, al_td_t dir, al_tx_t *tx);
  +al_rc_t al_txalloc      (al_t *al, al_tx_t **txp);
  +al_rc_t al_txfree       (al_t *al, al_tx_t *tx);
   al_rc_t al_traverse_next(al_t *al, al_tx_t *tx, al_chunk_t **alcp);
  -al_rc_t al_traverse_cb(al_t *al, size_t off, size_t n, al_td_t dir,
  -                       al_rc_t (*cb)(al_chunk_t *, void *), void *u);
  -al_rc_t al_flatten(al_t *al, size_t off, size_t n, char *dst, size_t *lenp);
  -al_rc_t al_copy(al_t *al, size_t off, size_t n, al_t *tal);
  +al_rc_t al_traverse     (al_t *al, size_t off, size_t n, al_td_t dir, al_tx_t *tx);
  +al_rc_t al_traverse_cb  (al_t *al, size_t off, size_t n, al_td_t dir, al_rc_t (*cb)(al_chunk_t *, void *), void *u);
  +al_rc_t al_copy         (al_t *al, size_t off, size_t n, al_t *tal);
  +al_rc_t al_splice       (al_t *al, size_t off, size_t n, al_t *nal, al_t *tal);
  +al_rc_t al_flatten      (al_t *al, size_t off, size_t n, char *dst, size_t *lenp);
   
  -size_t al_bytes(const al_t *al);
  -size_t al_chunk_len(al_chunk_t *alc);
  +size_t al_bytes     (const al_t *al);
  +size_t al_chunk_len (al_chunk_t *alc);
   size_t al_chunk_span(al_chunk_t *alc, size_t off, size_t n);
  -char *al_chunk_ptr(al_chunk_t *alc, size_t off);
  +char  *al_chunk_ptr (al_chunk_t *alc, size_t off);
   
   const char *al_error(al_rc_t rc);
   

From ossp-cvs-owner@ossp.org  Thu Oct 17 16:57:45 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3FD51765DA; Thu, 17 Oct 2002 16:57:45 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.pod
Message-Id: <20021017145745.3FD51765DA@mail.ossp.org>
Date: Thu, 17 Oct 2002 16:57:45 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-Oct-2002 16:57:45
  Branch: HEAD                             Handle: 2002101715574400

  Modified files:
    ossp-pkg/sio            al.pod

  Log:
    flush a little bit of cleanups

  Summary:
    Revision    Changes     Path
    1.7         +5  -5      ossp-pkg/sio/al.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.pod
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 al.pod
  --- ossp-pkg/sio/al.pod	17 Oct 2002 13:15:07 -0000	1.6
  +++ ossp-pkg/sio/al.pod	17 Oct 2002 14:57:44 -0000	1.7
  @@ -173,22 +173,22 @@
   
   =item al_rc_t B<al_append_bytes>(al_t *I<al>, const char *I<src>, size_t I<n>);
   
  -Append I<n> bytes from a storage array at I<src> to the assembly list, the
  +Append I<n> bytes from a storage array at I<src> to the assembly list. The
   bytes are copied, memory is allocated as necessary.
   
   Example: C<al_append_bytes(al, "Goodbye cruel world\n", 20);>
   
   =item al_rc_t B<al_prepend_bytes>(al_t *I<al>, const char *I<src>, size_t I<n>);
   
  -Prepend I<n> bytes from a storage array at I<src> to the assembly list, the
  +Prepend I<n> bytes from a storage array at I<src> to the assembly list. The
   bytes are copied, memory is allocated as necessary.
   
   Example: C<al_prepend_bytes(al, "Hello world\n", 12);>
   
   =item al_rc_t B<al_attach_buffer>(al_t *I<al>, char *I<p>, size_t I<n>);
   
  -Attach the storage array starting at I<p> with size <n> at the end of
  -the assembly list. Its content will become part of the assembly list
  +Attach the storage array starting at I<p> with size I<n> at the end of
  +the assembly list. Its content becomes part of the assembly list
   and is subject to assembly list operations. The storage array must stay
   in scope for the whole life time of the assembly list, there is no way
   to detach it from the assembly list.
  @@ -211,7 +211,7 @@
   The move from the new list I<nal> removes the data from its origin.
   
   The target list I<tal> may be B<NULL>, the data bytes that would
  -be moved to the target are then discard. This avoids creation
  +be moved to the target are then discarded. This avoids creation
   and destruction of a dummy target.
   
   The new list I<nal> may be B<NULL>, then nothing is inserted into

From ossp-cvs-owner@ossp.org  Thu Oct 17 17:02:50 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E9E0B765E0; Thu, 17 Oct 2002 17:02:49 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.c al.h al.pod al_test.c
Message-Id: <20021017150249.E9E0B765E0@mail.ossp.org>
Date: Thu, 17 Oct 2002 17:02:49 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-Oct-2002 17:02:49
  Branch: HEAD                             Handle: 2002101716024900

  Modified files:
    ossp-pkg/sio            al.c al.h al.pod al_test.c

  Log:
    Ok, as arranged with Michael: use 'assembly line' as the official long name

  Summary:
    Revision    Changes     Path
    1.18        +13 -13     ossp-pkg/sio/al.c
    1.9         +2  -2      ossp-pkg/sio/al.h
    1.8         +33 -33     ossp-pkg/sio/al.pod
    1.8         +2  -2      ossp-pkg/sio/al_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.c
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 al.c
  --- ossp-pkg/sio/al.c	17 Oct 2002 14:16:51 -0000	1.17
  +++ ossp-pkg/sio/al.c	17 Oct 2002 15:02:49 -0000	1.18
  @@ -1,5 +1,5 @@
   /*
  -**  OSSP al -- Assembly Lists
  +**  OSSP al -- Assembly Line
   **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
   **  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  @@ -26,7 +26,7 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  al.c: assembly lists library implementation
  +**  al.c: assembly line library implementation
   */
   
   #include <stddef.h>
  @@ -498,7 +498,7 @@
   /****************************************************************************/
   
   /*
  - * allocate an empty assembly list
  + * allocate an empty assembly line
    * dispose all chunks and all allocated backing store
    */
   al_rc_t al_create(al_t **alp)
  @@ -509,7 +509,7 @@
       if (alp == NULL)
               return AL_RC(AL_ERR_ARG);
   
  -    /* allocate and initialize new assembly list object */
  +    /* allocate and initialize new assembly line object */
       /* XXX - what malloc ? */
       if ((al = (al_t *)malloc(sizeof(al_t))) == NULL)
               return AL_RC(AL_ERR_MEM);
  @@ -681,7 +681,7 @@
   }
   
   /*
  - * this is the central function to manipulate assembly lists
  + * this is the central function to manipulate assembly line
    *
    * cut arbitrary spans from list into a destination buffer (or drop it)
    * insert (destructive move) content from another list into the cut
  @@ -873,7 +873,7 @@
   }
   
   /*
  - * list traversal requires a context. It needs to be
  + * assembly line traversal requires a context. It needs to be
    * malloced to keep its inner structure private
    */
   al_rc_t al_txalloc(al_t *al, al_tx_t **txp)
  @@ -898,7 +898,7 @@
   }
   
   /*
  - * initiate list traversal
  + * initiate assembly line traversal
    *
    * - do initial seek, fail if position does not exist
    * - save traversal parameters
  @@ -919,9 +919,9 @@
   }
   
   /*
  - * list traversal step
  + * assembly line traversal step
    *
  - * return EOF if at end of list
  + * return EOF if at end of assembly line
    * clip view chunk to traversal bounds
    * advance chunk cursor according to traversal direction
    */
  @@ -966,7 +966,7 @@
   }
   
   /*
  - * full list traversal with callback
  + * full assembly line traversal with callback
    *
    * traversal is aborted when callback return != AL_OK
    * reaching EOF (and also aborting with AL_ERR_EOF) is not an error
  @@ -996,7 +996,7 @@
   }
   
   /*
  - * full list traversal with data copy to linear buffer
  + * full assembly line traversal with data copy to linear buffer
    *
    * returns actual number of bytes copied
    *
  @@ -1030,7 +1030,7 @@
   }
   
   /*
  - * full list traversal with data copy to target assembly list
  + * full assembly line traversal with data copy to target assembly line
    *
    * traversal context is kept on stack (XXX ?)
    */
  @@ -1058,7 +1058,7 @@
   /*
    * relay macros to caller
    *
  - * al_bytes      - total number of bytes in list
  + * al_bytes      - total number of bytes in assembly line
    * al_chunk_len  - number of bytes in chunk
    * al_chunk_span - clip interval (off,off+n( against chunk length
    * al_chunk_ptr  - return memory pointer to byte within chunk
  Index: ossp-pkg/sio/al.h
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 al.h
  --- ossp-pkg/sio/al.h	17 Oct 2002 14:17:33 -0000	1.8
  +++ ossp-pkg/sio/al.h	17 Oct 2002 15:02:49 -0000	1.9
  @@ -1,5 +1,5 @@
   /*
  -**  OSSP al -- Assembly Lists
  +**  OSSP al -- Assembly Line
   **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
   **  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  @@ -26,7 +26,7 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  al.h: assembly lists public API definition
  +**  al.h: assembly line public API definition
   */
   
   #ifndef __AL_H__
  Index: ossp-pkg/sio/al.pod
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 al.pod
  --- ossp-pkg/sio/al.pod	17 Oct 2002 14:57:44 -0000	1.7
  +++ ossp-pkg/sio/al.pod	17 Oct 2002 15:02:49 -0000	1.8
  @@ -1,5 +1,5 @@
   ##
  -##  OSSP al - Assembly Lists
  +##  OSSP al - Assembly Line
   ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  @@ -26,14 +26,14 @@
   ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   ##  SUCH DAMAGE.
   ##
  -##  al.pod: assembly lists library manual page
  +##  al.pod: assembly line library manual page
   ##
   
   =pod
   
   =head1 NAME
   
  -B<OSSP al> - Assembly Lists
  +B<OSSP al> - Assembly Line
   
   =head1 VERSION
   
  @@ -51,7 +51,7 @@
   al_td_t,
   al_chunk_t.
   
  -=item B<Assembly List Operations>:
  +=item B<Assembly Line Operations>:
   
   al_create,
   al_destroy,
  @@ -114,7 +114,7 @@
    AL_ERR_EOF  End Of Communication
    AL_ERR_INT  Internal Error
   
  -=item B<al_t> (Assembly List Type)
  +=item B<al_t> (Assembly Line Type)
   
   This is an opaque data type representing a data buffer.
   Only pointers to this abstract data type are used in the API.
  @@ -130,8 +130,8 @@
   This is an exported enumerated integer type with the following possible
   values:
   
  - AL_FORWARD    traverse list from beginning to end
  - AL_BACKWARD   traverse list from end to beginning
  + AL_FORWARD    traverse assembly line from beginning to end
  + AL_BACKWARD   traverse assembly line from end to beginning
   
   =item B<al_chunk_t> (Chunk Type)
   
  @@ -153,34 +153,34 @@
   prefix C<al_> and receives a C<al_t> (or C<al_chunk_t>) object on which
   it operates as its first argument.
   
  -=head2 Assembly List Operations
  +=head2 Assembly Line Operations
   
   =over 4
   
   =item al_rc_t B<al_create>(al_t **I<alp>);
   
  -Create an assembly list abstraction object. 
  +Create an assembly line abstraction object. 
   The object is stored in I<alp> on success.
   
   Example: C<al_t *al; al_create(&al);>
   
   =item al_rc_t B<al_destroy>(al_t *I<al>);
   
  -Destroy an assembly list abstraction object.
  +Destroy an assembly line abstraction object.
   The object I<al> is invalid after this call succeeded.
   
   Example: C<al_destroy(al);>
   
   =item al_rc_t B<al_append_bytes>(al_t *I<al>, const char *I<src>, size_t I<n>);
   
  -Append I<n> bytes from a storage array at I<src> to the assembly list. The
  +Append I<n> bytes from a storage array at I<src> to the assembly line. The
   bytes are copied, memory is allocated as necessary.
   
   Example: C<al_append_bytes(al, "Goodbye cruel world\n", 20);>
   
   =item al_rc_t B<al_prepend_bytes>(al_t *I<al>, const char *I<src>, size_t I<n>);
   
  -Prepend I<n> bytes from a storage array at I<src> to the assembly list. The
  +Prepend I<n> bytes from a storage array at I<src> to the assembly line. The
   bytes are copied, memory is allocated as necessary.
   
   Example: C<al_prepend_bytes(al, "Hello world\n", 12);>
  @@ -188,10 +188,10 @@
   =item al_rc_t B<al_attach_buffer>(al_t *I<al>, char *I<p>, size_t I<n>);
   
   Attach the storage array starting at I<p> with size I<n> at the end of
  -the assembly list. Its content becomes part of the assembly list
  -and is subject to assembly list operations. The storage array must stay
  -in scope for the whole life time of the assembly list, there is no way
  -to detach it from the assembly list.
  +the assembly line. Its content becomes part of the assembly line
  +and is subject to assembly line operations. The storage array must stay
  +in scope for the whole life time of the assembly line, there is no way
  +to detach it from the assembly line.
   
   Example: C<char store[] = "foo\n"; al_attach_buffer(al, store, sizeof(store));>
   
  @@ -201,21 +201,21 @@
   B<splice>.
   
   I<off> and I<n> are byte counts that define a span of bytes within the
  -source assembly list I<al>. These bytes are moved to the target list
  -I<tal> while the content of the new list I<nal> is moved to the source
  +source assembly line I<al>. These bytes are moved to the target assembly line
  +I<tal> while the content of the new assembly line I<nal> is moved to the source
   to replace the selected span.
   
   There are two deviations from the Perl operator to avoid copying:
   
  -The move to the target list I<tal> appends the data to its end.
  -The move from the new list I<nal> removes the data from its origin.
  +The move to the target assembly line I<tal> appends the data to its end.
  +The move from the new assembly line I<nal> removes the data from its origin.
   
  -The target list I<tal> may be B<NULL>, the data bytes that would
  +The target assembly line I<tal> may be B<NULL>, the data bytes that would
   be moved to the target are then discarded. This avoids creation
   and destruction of a dummy target.
   
  -The new list I<nal> may be B<NULL>, then nothing is inserted into
  -the source. This avoids creation and destruction of an empty list.
  +The new assembly line I<nal> may be B<NULL>, then nothing is inserted into
  +the source. This avoids creation and destruction of an empty assembly line.
   
   Examples:
   
  @@ -254,7 +254,7 @@
   
   =item size_t B<al_bytes>(const al_t *I<al>);
   
  -Returns the number of bytes stored in the assembly list.
  +Returns the number of bytes stored in the assembly line.
   
   Example: C<al_t *al; size_t count; count = al_bytes(al);>
   
  @@ -278,25 +278,25 @@
   
   =item al_rc_t B<al_traverse>(al_t *I<al>, size_t I<off>, size_t I<n>, al_td_t I<dir>, al_tx_t *I<tx>);
   
  -Start traversing the assembly list I<al> beginning at byte offset I<off>
  +Start traversing the assembly line I<al> beginning at byte offset I<off>
   for up to I<n> bytes in direction I<dir>. The state of the traversal is
   stored in the supplied context I<tx>.
   
  -This function fails when the offset is outside the assembly list bounds.
  +This function fails when the offset is outside the assembly line bounds.
   
   =item al_rc_t B<al_traverse_next>(al_t *I<al>, al_tx_t *I<tx>, al_chunk_t **I<alcp>);
   
  -Complete a traversal step on the assembly list I<al> using the initialized
  +Complete a traversal step on the assembly line I<al> using the initialized
   context I<tx>. In each step a chunk descriptor is filled and stored in
   I<alcp>. All bytes of the chunk are guaranteed to be stored in a flat
   array and can be accessed through the chunk operations described below.
   
   The function returns AL_ERR_EOF when it passes the end (or beginning
  -in case of backward traversal) of the list.
  +in case of backward traversal) of the assembly line.
   
   =item al_rc_t B<al_traverse_cb>(al_t *I<al>, size_t I<off>, size_t I<n>, al_td_t I<dir>, al_rc_t (*I<cb>)(al_chunk_t *, void *), void *u);
   
  -B<al_traverse_cb> is a wrapper function that does a full list traversal in
  +B<al_traverse_cb> is a wrapper function that does a full assembly line traversal in
   a single call. In every step a chunk descriptor is passed to the callback
   function I<cb> together with a user supplied pointer I<u>. When the
   callback function returns AL_OK the traversal continues, when it returns
  @@ -313,10 +313,10 @@
   =item al_rc_t B<al_flatten>(al_t *I<al>, size_t I<off>, size_t I<n>, char *I<dst>, size_t *I<lenp>);
   
   I<off> and I<n> are byte counts that define a span of bytes with the
  -assembly list I<al>. These bytes are copied to the storage array I<dst>
  +assembly line I<al>. These bytes are copied to the storage array I<dst>
   which must be sized appropriately.
   I<off> must be a valid offset, I<n> must be positive but may exceed
  -the size of the assembly list.
  +the size of the assembly line.
   The actual number of bytes that is copied to the destination is stored
   in I<lenp>.
   
  @@ -331,10 +331,10 @@
   =item al_rc_t B<al_copy>(al_t *I<al>, size_t I<off>, size_t I<n>, al_t *I<tal);
   
   I<off> and I<n> are byte counts that define a span of bytes within the
  -assembly list I<al>. These bytes are appended to the target list I<tal>,
  +assembly line I<al>. These bytes are appended to the target assembly line I<tal>,
   memory is allocated as necessary.
   I<off> must be a valid offset, I<n> must be positive but may exceed
  -the size of the assembly list.
  +the size of the assembly line.
   
   Example:
   
  Index: ossp-pkg/sio/al_test.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 al_test.c
  --- ossp-pkg/sio/al_test.c	16 Oct 2002 14:20:48 -0000	1.7
  +++ ossp-pkg/sio/al_test.c	17 Oct 2002 15:02:49 -0000	1.8
  @@ -1,5 +1,5 @@
   /*
  -**  OSSP al -- Assembly Lists
  +**  OSSP al -- Assembly Line
   **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
   **  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  @@ -26,7 +26,7 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  al_test.c: assembly lists library, minimal test suite
  +**  al_test.c: assembly line library, minimal test suite
   */
   
   #include <stdlib.h>

From ossp-cvs-owner@ossp.org  Fri Oct 18 10:57:35 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3F6B5765DA; Fri, 18 Oct 2002 10:57:35 +0200 (CEST)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio list.h
Message-Id: <20021018085735.3F6B5765DA@mail.ossp.org>
Date: Fri, 18 Oct 2002 10:57:35 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   18-Oct-2002 10:57:35
  Branch: HEAD                             Handle: 2002101809573400

  Added files:
    ossp-pkg/sio            list.h

  Log:
    extracted generic list macros from al.c

  Summary:
    Revision    Changes     Path
    1.1         +160 -0     ossp-pkg/sio/list.h
  ____________________________________________________________________________

  Index: ossp-pkg/sio/list.h
  ============================================================
  $ cvs update -p -r1.1 list.h
  /*
  **  OSSP al -- Assembly Line
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  **
  **  This file is part of OSSP al, an abstract datatype of a data buffer
  **  that can assemble, move and truncate data but avoids actual copying.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  list.h: generic double-linked list macros
  */
  
  #define LIST(elem) \
      struct { elem *head, *tail; }
  #define NODE(elem) \
      struct { elem *next, *prev; }
  
  #define HEAD(q,l)       ((q)->l.head)
  #define TAIL(q,l)       ((q)->l.tail)
  #define NEXT(n,l)       ((n)->l.next)
  #define PREV(n,l)       ((n)->l.prev)
  
  #define ISEMPTY(q,l)    (HEAD(q,l) == NULL)
  
  #define LISTINIT(q,l) \
  do { \
      HEAD(q,l) = NULL; \
      TAIL(q,l) = NULL;  \
  } while(0)
  
  #define NODEINIT(n,l) \
  do { \
      NEXT(n,l) = NULL; \
      PREV(n,l) = NULL; \
  } while(0)
  
  #define ADDTAIL(q,l,n) \
  do { \
      if (TAIL(q,l)) { \
          NEXT(TAIL(q,l),l) = (n); \
          PREV(n,l) = TAIL(q,l); \
      } else { \
          PREV(n,l) = NULL; \
          HEAD(q,l) = (n); \
      } \
      TAIL(q,l) = (n); \
      NEXT(n,l) = NULL; \
  } while (0)
  
  #define ADDHEAD(q,l,n) \
  do { \
      if (HEAD(q,l)) { \
          PREV(HEAD(q,l),l) = (n); \
          NEXT(n,l) = HEAD(q,l); \
      } else { \
          NEXT(n,l) = NULL; \
          TAIL(q,l) = (n); \
      } \
      HEAD(q,l) = (n); \
      PREV(n,l) = NULL; \
  } while (0)
  
  #define REMHEAD(q,l,n) \
  do { \
      (n) = HEAD(q,l); \
      if (n) { \
          HEAD(q,l) = NEXT(n,l); \
          if (HEAD(q,l)) \
              PREV(HEAD(q,l),l) = NULL; \
          else \
              TAIL(q,l) = NULL; \
      } \
  } while(0)
  
  #define REMTAIL(q,l,n) \
  do { \
      (n) = TAIL(q,l); \
      if (n) { \
          TAIL(q,l) = PREV(n,l); \
          if (TAIL(q,l)) \
              NEXT(TAIL(q,l),l) = NULL; \
          else \
              HEAD(q,l) = NULL; \
      } \
  } while(0)
  
  #define REMOVE(q,l,n) \
  do { \
      if (PREV(n,l)) \
          NEXT(PREV(n,l),l) = NEXT(n,l); \
      else \
          HEAD(q,l) = NEXT(n,l); \
      if (NEXT(n,l)) \
          PREV(NEXT(n,l),l) = PREV(n,l); \
      else \
          TAIL(q,l) = PREV(n,l); \
      NEXT(n,l) = NULL; \
      PREV(n,l) = NULL; \
  } while (0)
  
  #define INSERT(q,l,i,n) \
  do { \
      if (PREV(i,l)) { \
          NEXT(PREV(i,l),l) = (n); \
      } else { \
          HEAD(q,l) = (n); \
      } \
      PREV(n,l) = PREV(i,l); \
      PREV(i,l) = (n); \
      NEXT(n,l) = (i); \
  } while (0)
  
  #define APPENDLIST(q1,l,q2) \
  do { \
      if (TAIL(q1,l)) { \
          NEXT(TAIL(q1,l),l) = HEAD(q2,l); \
          PREV(HEAD(q2,l),l) = TAIL(q1,l); \
      } else { \
          HEAD(q1,l) = HEAD(q2,l); \
      } \
      TAIL(q1,l) = TAIL(q2,l); \
      LISTINIT(q2,l); \
  } while(0)
  
  #define INSERTLIST(q1,l,i,q2) \
  do { \
      if (PREV(i,l)) { \
          NEXT(PREV(i,l),l) = HEAD(q2,l); \
      } else { \
          HEAD(q1,l) = HEAD(q2,l); \
      } \
      PREV(HEAD(q2,l),l) = PREV(i,l); \
      NEXT(TAIL(q2,l),l) = (i); \
      PREV(i,l) = TAIL(q2,l); \
      LISTINIT(q2,l); \
  } while(0)
  
  #define FOREACH(q,l,n)    for (n = HEAD(q,l); n; n = NEXT(n,l))
  #define FOREACHR(q,l,n)   for (n = TAIL(q,l); n; n = PREV(n,l))
  #define FOREACHD(q,l,n,r) for (n = TAIL(q,l); n && (r = PREV(n,l), 1); n = r)
  

From ossp-cvs-owner@ossp.org  Fri Oct 18 10:58:20 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3CAC2765DA; Fri, 18 Oct 2002 10:58:20 +0200 (CEST)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.c
Message-Id: <20021018085820.3CAC2765DA@mail.ossp.org>
Date: Fri, 18 Oct 2002 10:58:20 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   18-Oct-2002 10:58:20
  Branch: HEAD                             Handle: 2002101809581900

  Modified files:
    ossp-pkg/sio            al.c

  Log:
    moved generic list macros to separate header

  Summary:
    Revision    Changes     Path
    1.19        +1  -132    ossp-pkg/sio/al.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.c
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 al.c
  --- ossp-pkg/sio/al.c	17 Oct 2002 15:02:49 -0000	1.18
  +++ ossp-pkg/sio/al.c	18 Oct 2002 08:58:19 -0000	1.19
  @@ -36,138 +36,7 @@
   #include <stdio.h>
   #endif
   
  -/****************************************************************************/
  -
  -#define LIST(elem) \
  -    struct { elem *head, *tail; }
  -#define NODE(elem) \
  -    struct { elem *next, *prev; }
  -
  -#define HEAD(q,l)       ((q)->l.head)
  -#define TAIL(q,l)       ((q)->l.tail)
  -#define NEXT(n,l)       ((n)->l.next)
  -#define PREV(n,l)       ((n)->l.prev)
  -
  -#define ISEMPTY(q,l)    (HEAD(q,l) == NULL)
  -
  -#define LISTINIT(q,l) \
  -do { \
  -    HEAD(q,l) = NULL; \
  -    TAIL(q,l) = NULL;  \
  -} while(0)
  -
  -#define NODEINIT(n,l) \
  -do { \
  -    NEXT(n,l) = NULL; \
  -    PREV(n,l) = NULL; \
  -} while(0)
  -
  -#define ADDTAIL(q,l,n) \
  -do { \
  -    if (TAIL(q,l)) { \
  -        NEXT(TAIL(q,l),l) = (n); \
  -        PREV(n,l) = TAIL(q,l); \
  -    } else { \
  -        PREV(n,l) = NULL; \
  -        HEAD(q,l) = (n); \
  -    } \
  -    TAIL(q,l) = (n); \
  -    NEXT(n,l) = NULL; \
  -} while (0)
  -
  -#define ADDHEAD(q,l,n) \
  -do { \
  -    if (HEAD(q,l)) { \
  -        PREV(HEAD(q,l),l) = (n); \
  -        NEXT(n,l) = HEAD(q,l); \
  -    } else { \
  -        NEXT(n,l) = NULL; \
  -        TAIL(q,l) = (n); \
  -    } \
  -    HEAD(q,l) = (n); \
  -    PREV(n,l) = NULL; \
  -} while (0)
  -
  -#define REMHEAD(q,l,n) \
  -do { \
  -    (n) = HEAD(q,l); \
  -    if (n) { \
  -        HEAD(q,l) = NEXT(n,l); \
  -        if (HEAD(q,l)) \
  -            PREV(HEAD(q,l),l) = NULL; \
  -        else \
  -            TAIL(q,l) = NULL; \
  -    } \
  -} while(0)
  -
  -#define REMTAIL(q,l,n) \
  -do { \
  -    (n) = TAIL(q,l); \
  -    if (n) { \
  -        TAIL(q,l) = PREV(n,l); \
  -        if (TAIL(q,l)) \
  -            NEXT(TAIL(q,l),l) = NULL; \
  -        else \
  -            HEAD(q,l) = NULL; \
  -    } \
  -} while(0)
  -
  -#define REMOVE(q,l,n) \
  -do { \
  -    if (PREV(n,l)) \
  -        NEXT(PREV(n,l),l) = NEXT(n,l); \
  -    else \
  -        HEAD(q,l) = NEXT(n,l); \
  -    if (NEXT(n,l)) \
  -        PREV(NEXT(n,l),l) = PREV(n,l); \
  -    else \
  -        TAIL(q,l) = PREV(n,l); \
  -    NEXT(n,l) = NULL; \
  -    PREV(n,l) = NULL; \
  -} while (0)
  -
  -#define INSERT(q,l,i,n) \
  -do { \
  -    if (PREV(i,l)) { \
  -        NEXT(PREV(i,l),l) = (n); \
  -    } else { \
  -        HEAD(q,l) = (n); \
  -    } \
  -    PREV(n,l) = PREV(i,l); \
  -    PREV(i,l) = (n); \
  -    NEXT(n,l) = (i); \
  -} while (0)
  -
  -#define APPENDLIST(q1,l,q2) \
  -do { \
  -    if (TAIL(q1,l)) { \
  -        NEXT(TAIL(q1,l),l) = HEAD(q2,l); \
  -        PREV(HEAD(q2,l),l) = TAIL(q1,l); \
  -    } else { \
  -        HEAD(q1,l) = HEAD(q2,l); \
  -    } \
  -    TAIL(q1,l) = TAIL(q2,l); \
  -    LISTINIT(q2,l); \
  -} while(0)
  -
  -#define INSERTLIST(q1,l,i,q2) \
  -do { \
  -    if (PREV(i,l)) { \
  -        NEXT(PREV(i,l),l) = HEAD(q2,l); \
  -    } else { \
  -        HEAD(q1,l) = HEAD(q2,l); \
  -    } \
  -    PREV(HEAD(q2,l),l) = PREV(i,l); \
  -    NEXT(TAIL(q2,l),l) = (i); \
  -    PREV(i,l) = TAIL(q2,l); \
  -    LISTINIT(q2,l); \
  -} while(0)
  -
  -#define FOREACH(q,l,n)    for (n = HEAD(q,l); n; n = NEXT(n,l))
  -#define FOREACHR(q,l,n)   for (n = TAIL(q,l); n; n = PREV(n,l))
  -#define FOREACHD(q,l,n,r) for (n = TAIL(q,l); n && (r = PREV(n,l), 1); n = r)
  -
  -/****************************************************************************/
  +#include "list.h"
   
   #include "al.h"
   

From ossp-cvs-owner@ossp.org  Fri Oct 18 11:09:19 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7F22A765E0; Fri, 18 Oct 2002 11:09:19 +0200 (CEST)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.c al.h al.pod
Message-Id: <20021018090919.7F22A765E0@mail.ossp.org>
Date: Fri, 18 Oct 2002 11:09:19 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   18-Oct-2002 11:09:19
  Branch: HEAD                             Handle: 2002101810091800

  Modified files:
    ossp-pkg/sio            al.c al.h al.pod

  Log:
    added al_traverse_end to API, to allow future cleanup/locking

  Summary:
    Revision    Changes     Path
    1.20        +17 -0      ossp-pkg/sio/al.c
    1.10        +2  -1      ossp-pkg/sio/al.h
    1.9         +10 -0      ossp-pkg/sio/al.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.c
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 al.c
  --- ossp-pkg/sio/al.c	18 Oct 2002 08:58:19 -0000	1.19
  +++ ossp-pkg/sio/al.c	18 Oct 2002 09:09:18 -0000	1.20
  @@ -835,6 +835,17 @@
   }
   
   /*
  + * assembly line traversal end
  + *
  + * to free resources allocated/locked during traversal
  + * currently a NOOP
  + */
  +al_rc_t al_traverse_end(al_t *al, al_tx_t *tx, int final)
  +{
  +    return AL_OK;
  +}
  +
  +/*
    * full assembly line traversal with callback
    *
    * traversal is aborted when callback return != AL_OK
  @@ -858,6 +869,8 @@
               break;
       }
   
  +    (void) al_traverse_end(al, &tx, 1);
  +
       if (rc != AL_ERR_EOF)
           return AL_RC(rc);
   
  @@ -892,6 +905,8 @@
       }
       *lenp = total;
   
  +    (void) al_traverse_end(al, &tx, 1);
  +
       if (rc != AL_ERR_EOF)
           return AL_RC(rc);
   
  @@ -917,6 +932,8 @@
           step = AL_CHUNK_LEN(view);
           al_append_bytes(tal, AL_CHUNK_PTR(view,0), step);
       }
  +
  +    (void) al_traverse_end(al, &tx, 1);
   
       if (rc != AL_ERR_EOF)
           return AL_RC(rc);
  Index: ossp-pkg/sio/al.h
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 al.h
  --- ossp-pkg/sio/al.h	17 Oct 2002 15:02:49 -0000	1.9
  +++ ossp-pkg/sio/al.h	18 Oct 2002 09:09:18 -0000	1.10
  @@ -61,8 +61,9 @@
   al_rc_t al_attach_buffer(al_t *al, char *p, size_t n);
   al_rc_t al_txalloc      (al_t *al, al_tx_t **txp);
   al_rc_t al_txfree       (al_t *al, al_tx_t *tx);
  -al_rc_t al_traverse_next(al_t *al, al_tx_t *tx, al_chunk_t **alcp);
   al_rc_t al_traverse     (al_t *al, size_t off, size_t n, al_td_t dir, al_tx_t *tx);
  +al_rc_t al_traverse_next(al_t *al, al_tx_t *tx, al_chunk_t **alcp);
  +al_rc_t al_traverse_end (al_t *al, al_tx_t *tx, int final);
   al_rc_t al_traverse_cb  (al_t *al, size_t off, size_t n, al_td_t dir, al_rc_t (*cb)(al_chunk_t *, void *), void *u);
   al_rc_t al_copy         (al_t *al, size_t off, size_t n, al_t *tal);
   al_rc_t al_splice       (al_t *al, size_t off, size_t n, al_t *nal, al_t *tal);
  Index: ossp-pkg/sio/al.pod
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 al.pod
  --- ossp-pkg/sio/al.pod	17 Oct 2002 15:02:49 -0000	1.8
  +++ ossp-pkg/sio/al.pod	18 Oct 2002 09:09:18 -0000	1.9
  @@ -67,6 +67,7 @@
   al_txfree,
   al_traverse,
   al_traverse_next,
  +al_traverse_end,
   al_traverse_cb.
   
   =item B<Convenience Operations>:
  @@ -284,6 +285,7 @@
   
   This function fails when the offset is outside the assembly line bounds.
   
  +
   =item al_rc_t B<al_traverse_next>(al_t *I<al>, al_tx_t *I<tx>, al_chunk_t **I<alcp>);
   
   Complete a traversal step on the assembly line I<al> using the initialized
  @@ -293,6 +295,14 @@
   
   The function returns AL_ERR_EOF when it passes the end (or beginning
   in case of backward traversal) of the assembly line.
  +
  +=item al_rc_t B<al_traverse_end>(al_t *I<al>, al_tx_t *I<tx>, int final);
  +
  +Clean up internal state of traversal. If I<final> is zero, you may
  +continue the traversal later by calling B<al_traverse_next>. If
  +I<final> is non-zero you need to start a new traversal. It is
  +mandatory that every traversal that was started is finished by
  +a call to B<al_traverse_end> with I<final> set to a non-zero value.
   
   =item al_rc_t B<al_traverse_cb>(al_t *I<al>, size_t I<off>, size_t I<n>, al_td_t I<dir>, al_rc_t (*I<cb>)(al_chunk_t *, void *), void *u);
   

From ossp-cvs-owner@ossp.org  Fri Oct 18 11:10:10 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AAC2E765E0; Fri, 18 Oct 2002 11:10:10 +0200 (CEST)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al_test.c
Message-Id: <20021018091010.AAC2E765E0@mail.ossp.org>
Date: Fri, 18 Oct 2002 11:10:10 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   18-Oct-2002 11:10:10
  Branch: HEAD                             Handle: 2002101810101000

  Modified files:
    ossp-pkg/sio            al_test.c

  Log:
    use al_traverse_end() as required by API

  Summary:
    Revision    Changes     Path
    1.9         +1  -0      ossp-pkg/sio/al_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al_test.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 al_test.c
  --- ossp-pkg/sio/al_test.c	17 Oct 2002 15:02:49 -0000	1.8
  +++ ossp-pkg/sio/al_test.c	18 Oct 2002 09:10:10 -0000	1.9
  @@ -119,6 +119,7 @@
       al_traverse(al, 0, -1, AL_FORWARD, tx);
       while (al_traverse_next(al, tx, &cur) == AL_OK)
           total += al_chunk_len(cur);
  +    al_traverse_end(al, tx, 1);
       al_txfree(al, tx);
   
       total2 = al_bytes(al);

From ossp-cvs-owner@ossp.org  Fri Oct 18 12:20:27 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 04DFE765DA; Fri, 18 Oct 2002 12:20:26 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.c
Message-Id: <20021018102026.04DFE765DA@mail.ossp.org>
Date: Fri, 18 Oct 2002 12:20:26 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Oct-2002 12:20:26
  Branch: HEAD                             Handle: 2002101811202600

  Modified files:
    ossp-pkg/sio            al.c

  Log:
    Before diving into the semantics, bring syntax into standard
    OSSP shape by applying the following cosmetics:
    
    - add newlines between "if" and "return" at some statements
    - make sure indentation is exactly 4 spaces (were 8 at dispose_chunk, etc)
    - consistently use no braces for "if" or "else" clauses if only single
      statement exists in body.
    - we do not indicate the not-used-return-code via (void) on statements,
      because both every compiler and human is smart enough to see the
      intention.
    
    THERE ARE NO FUNCTIONAL CHANGES IN THIS COMMIT AT ALL.

  Summary:
    Revision    Changes     Path
    1.21        +147 -114   ossp-pkg/sio/al.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.c
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 al.c
  --- ossp-pkg/sio/al.c	18 Oct 2002 09:09:18 -0000	1.20
  +++ ossp-pkg/sio/al.c	18 Oct 2002 10:20:26 -0000	1.21
  @@ -102,8 +102,8 @@
   
   /* number of bytes of a span that are stored in a chunk */
   #define AL_CHUNK_SPAN(alc, off, n) \
  -    ((n) > AL_CHUNK_LEN(alc) - (off) ? \
  -    AL_CHUNK_LEN(alc) - (off) : (n))
  +    ((n) > (AL_CHUNK_LEN(alc) - (off)) ? \
  +    (AL_CHUNK_LEN(alc) - (off)) : (n))
   
   /*
    * number of bytes a chunk can be grown to the end
  @@ -111,9 +111,11 @@
    * we do not track other chunks sharing the buffer
    */
   #define AL_CHUNK_RESERVE(alc) \
  -    ((alc) \
  -    ? (alc)->buf->usecount > 1 ? 0 : (alc)->buf->size - (alc)->end \
  -    : 0)
  +    (  (alc) != NULL \
  +     ? (  (alc)->buf->usecount > 1 \
  +        ? 0 \
  +        : (alc)->buf->size - (alc)->end) \
  +     : 0)
   
   /* grow chunk to the end */
   #define AL_RESIZE(al, alc, n) \
  @@ -125,9 +127,11 @@
    * we do not track other chunks sharing the buffer
    */
   #define AL_CHUNK_PRESERVE(alc) \
  -    ((alc) \
  -    ? (alc)->buf->usecount > 1 ? 0 : (alc)->begin \
  -    : 0)
  +    ( (alc) != NULL \
  +     ? (  (alc)->buf->usecount > 1 \
  +        ? 0 \
  +        : (alc)->begin) \
  +     : 0)
   
   /* grow chunk to the beginning */
   #define AL_PRESIZE(al, alc, n) \
  @@ -138,8 +142,8 @@
    *
    * can be freed when usecount drops to zero
    */
  -static
  -al_rc_t new_buffer(al_t *al, al_buffer_t **bufp)
  +static al_rc_t
  +new_buffer(al_t *al, al_buffer_t **bufp)
   {
       size_t n = al->m.new_buffersize;
       al_buffer_t *buf;
  @@ -160,8 +164,8 @@
       return AL_OK;
   }
   
  -static
  -al_rc_t dispose_buffer(al_t *al, al_buffer_t *buf)
  +static al_rc_t
  +dispose_buffer(al_t *al, al_buffer_t *buf)
   {
       /* must not happen */
       if (buf->usecount != 0)
  @@ -179,8 +183,8 @@
    * and attach to existing memory
    * only the control structure will be freed later
    */
  -static
  -al_rc_t make_buffer(al_t *al, char *p, size_t n, al_buffer_t **bufp)
  +static al_rc_t
  +make_buffer(al_t *al, char *p, size_t n, al_buffer_t **bufp)
   {
       al_buffer_t *buf;
   
  @@ -206,15 +210,13 @@
    * the case where new_chunk fails and the buffer has no other
    * users
    */
  -static
  -struct {
  +static struct {
       LIST(al_chunk_t) chunks;
   } alc_freelist;
  -static
  -int alc_freecount = 0;
  +static int alc_freecount = 0;
   
  -static
  -al_rc_t new_chunk(al_t *al, al_buffer_t *buf, al_chunk_t **alcp)
  +static al_rc_t
  +new_chunk(al_t *al, al_buffer_t *buf, al_chunk_t **alcp)
   {
       al_chunk_t *alc;
   
  @@ -239,14 +241,14 @@
       alc->begin = 0;
       alc->end   = 0;
   
  -    ++buf->usecount;
  +    buf->usecount++;
   
       *alcp = alc;
       return AL_OK;
   }
   
  -static
  -al_rc_t split_chunk(al_t *al, al_chunk_t *orig, size_t off, al_chunk_t **alcp)
  +static al_rc_t
  +split_chunk(al_t *al, al_chunk_t *orig, size_t off, al_chunk_t **alcp)
   {
       al_rc_t rc;
       al_chunk_t *alc;
  @@ -256,7 +258,8 @@
           return AL_ERR_ARG;
   
       rc = new_chunk(al, orig->buf, &alc);
  -    if (rc != AL_OK) return rc;
  +    if (rc != AL_OK)
  +        return rc;
   
       alc->begin  = orig->begin;
       alc->end    = orig->begin+off;
  @@ -266,21 +269,21 @@
       return AL_OK;
   }
   
  -static
  -void dispose_chunk(al_t *al, al_chunk_t *alc)
  +static void
  +dispose_chunk(al_t *al, al_chunk_t *alc)
   {
  -        --alc->buf->usecount;
  -        if (alc->buf->usecount == 0)
  -            dispose_buffer(al,alc->buf);
  -        alc->buf = NULL;
  -
  -        /* stop freelist from growing infinitely */
  -        if (alc_freecount >= al->m.max_freechunks) {
  -            (al->m.free)(alc);
  -        } else {
  -            ADDTAIL(&alc_freelist, chunks, alc);
  -            ++alc_freecount;
  -        }
  +    alc->buf->usecount--;
  +    if (alc->buf->usecount == 0)
  +        dispose_buffer(al,alc->buf);
  +    alc->buf = NULL;
  +
  +    /* stop freelist from growing infinitely */
  +    if (alc_freecount >= al->m.max_freechunks)
  +        (al->m.free)(alc);
  +    else {
  +        ADDTAIL(&alc_freelist, chunks, alc);
  +        alc_freecount++;
  +    }
   }
   
   /*
  @@ -291,8 +294,8 @@
    *  return AL_OK and *alcp == NULL if positioned exactly to end of list
    *  return AL_ERR_EOF when no such chunk can be found
    */
  -static
  -al_rc_t al_seek(al_t *al, size_t off, al_chunk_t **alcp, size_t *skipp)
  +static al_rc_t
  +al_seek(al_t *al, size_t off, al_chunk_t **alcp, size_t *skipp)
   {
       al_chunk_t *cur;
       size_t pos, end;
  @@ -343,8 +346,8 @@
   }
   
   #ifdef TEST
  -static
  -void dump(al_t *al)
  +static void
  +dump(al_t *al)
   {
       al_chunk_t *cur;
       size_t total;
  @@ -370,18 +373,19 @@
    * allocate an empty assembly line
    * dispose all chunks and all allocated backing store
    */
  -al_rc_t al_create(al_t **alp)
  +al_rc_t
  +al_create(al_t **alp)
   {
       al_t *al;
   
       /* argument sanity check(s) */
       if (alp == NULL)
  -            return AL_RC(AL_ERR_ARG);
  +        return AL_RC(AL_ERR_ARG);
   
       /* allocate and initialize new assembly line object */
       /* XXX - what malloc ? */
       if ((al = (al_t *)malloc(sizeof(al_t))) == NULL)
  -            return AL_RC(AL_ERR_MEM);
  +        return AL_RC(AL_ERR_MEM);
   
       LISTINIT(al,chunks);
       al->bytes = 0;
  @@ -404,13 +408,14 @@
       return AL_OK;
   }
   
  -al_rc_t al_destroy(al_t *al)
  +al_rc_t
  +al_destroy(al_t *al)
   {
       al_chunk_t *cur, *pred;
   
       /* argument sanity check(s) */
       if (al == NULL)
  -            return AL_RC(AL_ERR_ARG);
  +        return AL_RC(AL_ERR_ARG);
   
       /* free chunks and backing store */
       FOREACHD(al,chunks,cur,pred) {
  @@ -431,7 +436,8 @@
    * stops copy operation when a new buffer cannot be created
    * but leaves data structure consistent
    */
  -al_rc_t al_append_bytes(al_t *al, const char *src, size_t n)
  +al_rc_t
  +al_append_bytes(al_t *al, const char *src, size_t n)
   {
       al_rc_t rc;
       al_chunk_t *cur;
  @@ -441,7 +447,7 @@
   
       /* argument sanity check(s) */
       if (al == NULL || src == NULL || n < 0)
  -            return AL_RC(AL_ERR_ARG);
  +        return AL_RC(AL_ERR_ARG);
   
       cur = TAIL(al,chunks);
       res = AL_CHUNK_RESERVE(cur);
  @@ -449,9 +455,11 @@
       while (n > 0) {
           if (res == 0) {
               rc = new_buffer(al, &buf);
  -            if (rc != AL_OK) return AL_RC(rc);
  +            if (rc != AL_OK)
  +                return AL_RC(rc);
               rc = new_chunk(al,buf,&cur);
  -            if (rc != AL_OK) return AL_RC(rc);
  +            if (rc != AL_OK)
  +                return AL_RC(rc);
               res = AL_CHUNK_RESERVE(cur);
               ADDTAIL(al, chunks, cur);
           }
  @@ -477,7 +485,8 @@
    * stops copy operation when a new buffer cannot be created
    * but leaves data structure consistent
    */
  -al_rc_t al_prepend_bytes(al_t *al, const char *src, size_t n)
  +al_rc_t
  +al_prepend_bytes(al_t *al, const char *src, size_t n)
   {
       al_rc_t rc;
       al_chunk_t *cur;
  @@ -487,7 +496,7 @@
   
       /* argument sanity check(s) */
       if (al == NULL || src == NULL || n < 0)
  -            return AL_RC(AL_ERR_ARG);
  +        return AL_RC(AL_ERR_ARG);
   
       cur = HEAD(al,chunks);
       res = AL_CHUNK_PRESERVE(cur);
  @@ -497,9 +506,11 @@
       while (n > 0) {
           if (res == 0) {
               rc = new_buffer(al, &buf);
  -            if (rc != AL_OK) return AL_RC(rc);
  +            if (rc != AL_OK)
  +                return AL_RC(rc);
               rc = new_chunk(al,buf,&cur);
  -            if (rc != AL_OK) return AL_RC(rc);
  +            if (rc != AL_OK)
  +                return AL_RC(rc);
               res = AL_CHUNK_PRESERVE(cur);
               ADDHEAD(al, chunks, cur);
           }
  @@ -527,7 +538,8 @@
    * XXX - some list operations modify the buffer
    *
    */
  -al_rc_t al_attach_buffer(al_t *al, char *p, size_t n)
  +al_rc_t
  +al_attach_buffer(al_t *al, char *p, size_t n)
   {
       al_rc_t rc;
       al_buffer_t *buf;
  @@ -535,12 +547,14 @@
   
       /* argument sanity check(s) */
       if (al == NULL || p == NULL || n < 0)
  -            return AL_RC(AL_ERR_ARG);
  +        return AL_RC(AL_ERR_ARG);
   
       rc = make_buffer(al, p, n, &buf);
  -    if (rc != AL_OK) return AL_RC(rc);
  +    if (rc != AL_OK)
  +        return AL_RC(rc);
       rc = new_chunk(al,buf, &cur);
  -    if (rc != AL_OK) return AL_RC(rc);
  +    if (rc != AL_OK)
  +        return AL_RC(rc);
       ADDTAIL(al, chunks, cur);
   
       /* validate data in buffer */
  @@ -560,7 +574,8 @@
    * -> the replacement data is moved and not copied.
    *
    */
  -al_rc_t al_splice(al_t *al, size_t off, size_t n, al_t *nal, al_t *tal)
  +al_rc_t
  +al_splice(al_t *al, size_t off, size_t n, al_t *nal, al_t *tal)
   {
       al_rc_t rc;
       al_chunk_t *cur, *next, *ins, *splitbuf;
  @@ -569,7 +584,7 @@
   
       /* argument sanity check(s) */
       if (al == NULL || n < 0)
  -            return AL_RC(AL_ERR_ARG);
  +        return AL_RC(AL_ERR_ARG);
   
       /* optimization: treat an empty list as no insertion at all */
       doinsert = (nal != NULL) && !ISEMPTY(nal,chunks);
  @@ -579,8 +594,9 @@
        * EOD must be a valid seek position so that we can append data
        */
       rc = al_seek(al, off, &cur, &skip);
  -    if (rc != AL_OK) return AL_RC(rc);
  -    
  +    if (rc != AL_OK)
  +        return AL_RC(rc);
  +
       /*
        * remember insertion point
        *
  @@ -611,7 +627,8 @@
       if (doinsert) {
           if (ins != NULL && skip > 0) {
               rc = split_chunk(al, ins, skip, &splitbuf);
  -            if (rc != AL_OK) return AL_RC(rc);
  +            if (rc != AL_OK)
  +                return AL_RC(rc);
               INSERT(al,chunks,ins,splitbuf);
           }
       }
  @@ -642,14 +659,12 @@
                   size_t before = tal->bytes;
   
                   rc = al_append_bytes(tal, AL_CHUNK_PTR(cur, skip), step);
  -                if (rc != AL_OK) {
  +                if (rc != AL_OK)
                       /* correct step size to actual size */
                       step = tal->bytes - before;
  -                }
   
  -            } else {
  +            } else
                   rc = AL_OK;
  -            }
   
               /*
                * cut span from src chunk
  @@ -657,9 +672,9 @@
                * if skip > 0, compute number of bytes to preserve,
                *              align buffer and shrink chunk from the end
                */
  -            if (skip == 0) {
  +            if (skip == 0)
                   AL_PRESIZE(al, cur, -step);
  -            } else {
  +            else {
                   /* align trailing bytes */
                   if (len > (skip+step)) {
                       memmove(
  @@ -675,10 +690,10 @@
                * bail out from failed al_append_bytes operation above
                *
                */
  -            if (rc != AL_OK) return AL_RC(rc);
  -
  -        } else {
  -
  +            if (rc != AL_OK)
  +                return AL_RC(rc);
  +        }
  +        else {
               /*
                * the whole chunk has to be moved, simply move it
                * to the target chain
  @@ -699,13 +714,12 @@
                   ins = next;
   
               al->bytes -= step;
  -            if (tal == NULL) {
  +            if (tal == NULL)
                   dispose_chunk(al, cur);
  -            } else {
  +            else {
                   ADDTAIL(tal, chunks, cur);
                   tal->bytes += step;
               }
  -
           }
           n   -= step;
           pos += step;
  @@ -717,7 +731,6 @@
        * now splice in replacement chunks
        */
       if (doinsert) {
  -
           if (ins != NULL) {
               /*
                * complex case where list is inserted
  @@ -745,7 +758,8 @@
    * assembly line traversal requires a context. It needs to be
    * malloced to keep its inner structure private
    */
  -al_rc_t al_txalloc(al_t *al, al_tx_t **txp)
  +al_rc_t
  +al_txalloc(al_t *al, al_tx_t **txp)
   {
       al_tx_t *tx;
   
  @@ -760,7 +774,8 @@
   /*
    * free traversal context using proper policy function
    */
  -al_rc_t al_txfree(al_t *al, al_tx_t *tx)
  +al_rc_t
  +al_txfree(al_t *al, al_tx_t *tx)
   {
       (al->m.free)(tx);
       return AL_OK;
  @@ -772,14 +787,16 @@
    * - do initial seek, fail if position does not exist
    * - save traversal parameters
    */
  -al_rc_t al_traverse(al_t *al, size_t off, size_t n, al_td_t dir, al_tx_t *tx)
  +al_rc_t
  +al_traverse(al_t *al, size_t off, size_t n, al_td_t dir, al_tx_t *tx)
   {
       al_rc_t rc;
   
       tx->cur = NULL;
   
       rc = al_seek(al, off, &tx->cur, &tx->skip);
  -    if (rc != AL_OK) return AL_RC(rc);
  +    if (rc != AL_OK)
  +        return AL_RC(rc);
   
       tx->dir  = dir;
       tx->togo = n;
  @@ -794,7 +811,8 @@
    * clip view chunk to traversal bounds
    * advance chunk cursor according to traversal direction
    */
  -al_rc_t al_traverse_next(al_t *al, al_tx_t *tx, al_chunk_t **alcp)
  +al_rc_t
  +al_traverse_next(al_t *al, al_tx_t *tx, al_chunk_t **alcp)
   {
       size_t step;
   
  @@ -820,14 +838,14 @@
       tx->view.end    = tx->view.begin + step;
   
       switch (tx->dir) {
  -    case AL_FORWARD:
  -        tx->cur   = NEXT(tx->cur,chunks);
  -        tx->togo -= step;
  -        break;
  -    case AL_BACKWARD:
  -        tx->cur   = PREV(tx->cur,chunks);
  -        tx->togo -= step;
  -        break;
  +        case AL_FORWARD:
  +            tx->cur   = NEXT(tx->cur,chunks);
  +            tx->togo -= step;
  +            break;
  +        case AL_BACKWARD:
  +            tx->cur   = PREV(tx->cur,chunks);
  +            tx->togo -= step;
  +            break;
       }
   
       *alcp = &tx->view;
  @@ -853,15 +871,17 @@
    *
    * traversal context is kept on stack (XXX ?)
    */
  -al_rc_t al_traverse_cb(al_t *al, size_t off, size_t n, al_td_t dir,
  -                       al_rc_t (*cb)(al_chunk_t *, void *), void *u)
  +al_rc_t
  +al_traverse_cb(al_t *al, size_t off, size_t n, al_td_t dir,
  +               al_rc_t (*cb)(al_chunk_t *, void *), void *u)
   {
       al_rc_t rc;
       al_tx_t tx;                /* XXX - private tx structure on stack */
       al_chunk_t *view;
   
       rc = al_traverse(al, off, n, dir, &tx);
  -    if (rc != AL_OK) return AL_RC(rc);
  +    if (rc != AL_OK)
  +        return AL_RC(rc);
   
       while ((rc = al_traverse_next(al, &tx, &view)) == AL_OK) {
           rc = cb(view, u);
  @@ -869,7 +889,7 @@
               break;
       }
   
  -    (void) al_traverse_end(al, &tx, 1);
  +    al_traverse_end(al, &tx, 1);
   
       if (rc != AL_ERR_EOF)
           return AL_RC(rc);
  @@ -884,7 +904,8 @@
    *
    * traversal context is kept on stack (XXX ?)
    */
  -al_rc_t al_flatten(al_t *al, size_t off, size_t n, char *dst, size_t *lenp)
  +al_rc_t
  +al_flatten(al_t *al, size_t off, size_t n, char *dst, size_t *lenp)
   {
       al_rc_t rc;
       al_tx_t tx;                /* XXX - private tx structure on stack */
  @@ -894,18 +915,19 @@
       *lenp = 0; /* keep caller on safe side */
   
       rc = al_traverse(al, off, n, AL_FORWARD, &tx);
  -    if (rc != AL_OK) return AL_RC(rc);
  +    if (rc != AL_OK)
  +        return AL_RC(rc);
   
       total = 0;
       while ((rc = al_traverse_next(al, &tx, &view)) == AL_OK) {
           step = AL_CHUNK_LEN(view);
  -        memmove(dst, AL_CHUNK_PTR(view,0), step);
  +        memmove(dst, AL_CHUNK_PTR(view, 0), step);
           dst   += step;
           total += step;
       }
       *lenp = total;
   
  -    (void) al_traverse_end(al, &tx, 1);
  +    al_traverse_end(al, &tx, 1);
   
       if (rc != AL_ERR_EOF)
           return AL_RC(rc);
  @@ -918,7 +940,8 @@
    *
    * traversal context is kept on stack (XXX ?)
    */
  -al_rc_t al_copy(al_t *al, size_t off, size_t n, al_t *tal)
  +al_rc_t
  +al_copy(al_t *al, size_t off, size_t n, al_t *tal)
   {
       al_rc_t rc;
       al_tx_t tx;                /* XXX - private tx structure on stack */
  @@ -926,14 +949,15 @@
       size_t step;
   
       rc = al_traverse(al, off, n, AL_FORWARD, &tx);
  -    if (rc != AL_OK) return AL_RC(rc);
  +    if (rc != AL_OK)
  +        return AL_RC(rc);
   
       while ((rc = al_traverse_next(al, &tx, &view)) == AL_OK) {
           step = AL_CHUNK_LEN(view);
  -        al_append_bytes(tal, AL_CHUNK_PTR(view,0), step);
  +        al_append_bytes(tal, AL_CHUNK_PTR(view, 0), step);
       }
   
  -    (void) al_traverse_end(al, &tx, 1);
  +    al_traverse_end(al, &tx, 1);
   
       if (rc != AL_ERR_EOF)
           return AL_RC(rc);
  @@ -951,19 +975,27 @@
    *
    * off must be a valid offset within (0,len(
    */
  -size_t al_bytes(const al_t *al)
  +
  +size_t
  +al_bytes(const al_t *al)
   {
       return al->bytes;
   }
  -size_t al_chunk_len(al_chunk_t *alc)
  +
  +size_t
  +al_chunk_len(al_chunk_t *alc)
   {
       return AL_CHUNK_LEN(alc);
   }
  -size_t al_chunk_span(al_chunk_t *alc, size_t off, size_t n)
  +
  +size_t
  +al_chunk_span(al_chunk_t *alc, size_t off, size_t n)
   {
       return AL_CHUNK_SPAN(alc, off, n);
   }
  -char *al_chunk_ptr(al_chunk_t *alc, size_t off)
  +
  +char *
  +al_chunk_ptr(al_chunk_t *alc, size_t off)
   {
       return AL_CHUNK_PTR(alc, off);
   }
  @@ -971,17 +1003,18 @@
   /*
    * convert error code into human readable form
    */
  -const char *al_error(al_rc_t rc)
  +const char *
  +al_error(al_rc_t rc)
   {
       const char *mess;
   
       switch (rc) {
  -    case AL_OK:       mess = "Everything Ok"; break;
  -    case AL_ERR_ARG:  mess = "Invalid Argument"; break;
  -    case AL_ERR_MEM:  mess = "Not Enough Memory"; break;
  -    case AL_ERR_EOF:  mess = "End Of Data"; break;
  -    case AL_ERR_INT:  mess = "Internal Error"; break;
  -    default:          mess = "Invalid Result Code"; break;
  +        case AL_OK:       mess = "Everything Ok"; break;
  +        case AL_ERR_ARG:  mess = "Invalid Argument"; break;
  +        case AL_ERR_MEM:  mess = "Not Enough Memory"; break;
  +        case AL_ERR_EOF:  mess = "End Of Data"; break;
  +        case AL_ERR_INT:  mess = "Internal Error"; break;
  +        default:          mess = "Invalid Result Code"; break;
       }
   
       return mess;

From ossp-cvs-owner@ossp.org  Fri Oct 18 12:21:42 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D8173765DA; Fri, 18 Oct 2002 12:21:41 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio list.h
Message-Id: <20021018102141.D8173765DA@mail.ossp.org>
Date: Fri, 18 Oct 2002 12:21:41 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Oct-2002 12:21:41
  Branch: HEAD                             Handle: 2002101811214100

  Modified files:
    ossp-pkg/sio            list.h

  Log:
    add standard protect to avoid double-inclusions

  Summary:
    Revision    Changes     Path
    1.2         +5  -0      ossp-pkg/sio/list.h
  ____________________________________________________________________________

  Index: ossp-pkg/sio/list.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 list.h
  --- ossp-pkg/sio/list.h	18 Oct 2002 08:57:34 -0000	1.1
  +++ ossp-pkg/sio/list.h	18 Oct 2002 10:21:41 -0000	1.2
  @@ -29,6 +29,9 @@
   **  list.h: generic double-linked list macros
   */
   
  +#ifndef __LIST_H__
  +#define __LIST_H__
  +
   #define LIST(elem) \
       struct { elem *head, *tail; }
   #define NODE(elem) \
  @@ -157,4 +160,6 @@
   #define FOREACH(q,l,n)    for (n = HEAD(q,l); n; n = NEXT(n,l))
   #define FOREACHR(q,l,n)   for (n = TAIL(q,l); n; n = PREV(n,l))
   #define FOREACHD(q,l,n,r) for (n = TAIL(q,l); n && (r = PREV(n,l), 1); n = r)
  +
  +#endif /* __LIST_H__ */
   

From ossp-cvs-owner@ossp.org  Fri Oct 18 13:02:00 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CFF7D765E0; Fri, 18 Oct 2002 13:01:59 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.c al.h al_test.c
Message-Id: <20021018110159.CFF7D765E0@mail.ossp.org>
Date: Fri, 18 Oct 2002 13:01:59 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Oct-2002 13:01:59
  Branch: HEAD                             Handle: 2002101812015900

  Modified files:
    ossp-pkg/sio            al.c al.h al_test.c

  Log:
    Be pedantic about consistent argument orders and move al_tx_t argument
    to second position where it is for all other al_tx_t based functions:
    
    -al_traverse(al_t *al, size_t off, size_t n, al_td_t dir, al_tx_t *tx)
    +al_traverse(al_t *al, al_tx_t *tx, size_t off, size_t n, al_td_t dir)

  Summary:
    Revision    Changes     Path
    1.22        +4  -4      ossp-pkg/sio/al.c
    1.11        +1  -1      ossp-pkg/sio/al.h
    1.10        +1  -1      ossp-pkg/sio/al_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.c
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 al.c
  --- ossp-pkg/sio/al.c	18 Oct 2002 10:20:26 -0000	1.21
  +++ ossp-pkg/sio/al.c	18 Oct 2002 11:01:59 -0000	1.22
  @@ -788,7 +788,7 @@
    * - save traversal parameters
    */
   al_rc_t
  -al_traverse(al_t *al, size_t off, size_t n, al_td_t dir, al_tx_t *tx)
  +al_traverse(al_t *al, al_tx_t *tx, size_t off, size_t n, al_td_t dir)
   {
       al_rc_t rc;
   
  @@ -879,7 +879,7 @@
       al_tx_t tx;                /* XXX - private tx structure on stack */
       al_chunk_t *view;
   
  -    rc = al_traverse(al, off, n, dir, &tx);
  +    rc = al_traverse(al, &tx, off, n, dir);
       if (rc != AL_OK)
           return AL_RC(rc);
   
  @@ -914,7 +914,7 @@
   
       *lenp = 0; /* keep caller on safe side */
   
  -    rc = al_traverse(al, off, n, AL_FORWARD, &tx);
  +    rc = al_traverse(al, &tx, off, n, AL_FORWARD);
       if (rc != AL_OK)
           return AL_RC(rc);
   
  @@ -948,7 +948,7 @@
       al_chunk_t *view;
       size_t step;
   
  -    rc = al_traverse(al, off, n, AL_FORWARD, &tx);
  +    rc = al_traverse(al, &tx, off, n, AL_FORWARD);
       if (rc != AL_OK)
           return AL_RC(rc);
   
  Index: ossp-pkg/sio/al.h
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 al.h
  --- ossp-pkg/sio/al.h	18 Oct 2002 09:09:18 -0000	1.10
  +++ ossp-pkg/sio/al.h	18 Oct 2002 11:01:59 -0000	1.11
  @@ -61,7 +61,7 @@
   al_rc_t al_attach_buffer(al_t *al, char *p, size_t n);
   al_rc_t al_txalloc      (al_t *al, al_tx_t **txp);
   al_rc_t al_txfree       (al_t *al, al_tx_t *tx);
  -al_rc_t al_traverse     (al_t *al, size_t off, size_t n, al_td_t dir, al_tx_t *tx);
  +al_rc_t al_traverse     (al_t *al, al_tx_t *tx, size_t off, size_t n, al_td_t dir);
   al_rc_t al_traverse_next(al_t *al, al_tx_t *tx, al_chunk_t **alcp);
   al_rc_t al_traverse_end (al_t *al, al_tx_t *tx, int final);
   al_rc_t al_traverse_cb  (al_t *al, size_t off, size_t n, al_td_t dir, al_rc_t (*cb)(al_chunk_t *, void *), void *u);
  Index: ossp-pkg/sio/al_test.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 al_test.c
  --- ossp-pkg/sio/al_test.c	18 Oct 2002 09:10:10 -0000	1.9
  +++ ossp-pkg/sio/al_test.c	18 Oct 2002 11:01:59 -0000	1.10
  @@ -116,7 +116,7 @@
       total = 0;
   
       al_txalloc(al, &tx);
  -    al_traverse(al, 0, -1, AL_FORWARD, tx);
  +    al_traverse(al, tx, 0, -1, AL_FORWARD);
       while (al_traverse_next(al, tx, &cur) == AL_OK)
           total += al_chunk_len(cur);
       al_traverse_end(al, tx, 1);

From ossp-cvs-owner@ossp.org  Fri Oct 18 13:03:07 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6B7B7765E0; Fri, 18 Oct 2002 13:03:07 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al_test.c
Message-Id: <20021018110307.6B7B7765E0@mail.ossp.org>
Date: Fri, 18 Oct 2002 13:03:07 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Oct-2002 13:03:07
  Branch: HEAD                             Handle: 2002101812030700

  Modified files:
    ossp-pkg/sio            al_test.c

  Log:
    shutdown remaining gcc warnings

  Summary:
    Revision    Changes     Path
    1.11        +6  -6      ossp-pkg/sio/al_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al_test.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 al_test.c
  --- ossp-pkg/sio/al_test.c	18 Oct 2002 11:01:59 -0000	1.10
  +++ ossp-pkg/sio/al_test.c	18 Oct 2002 11:03:07 -0000	1.11
  @@ -38,7 +38,7 @@
   
   #define S(s) s, strlen(s)
   
  -const char *fill(char *p, int n)
  +static const char *fill(char *p, int n)
   {
       static char buf[4 * 80 + 1];
       int k;
  @@ -60,7 +60,7 @@
       return (const char *)buf;
   }
   
  -al_rc_t printchunk(al_chunk_t *alc, void *u)
  +static al_rc_t printchunk(al_chunk_t *alc, void *u)
   {
       size_t len, pre, post;
   
  @@ -87,7 +87,7 @@
   printf("-DUMP(%s)\n\n",tag);\
   } while (0)
   
  -void print(const char *tag, al_t *al)
  +static void print(const char *tag, al_t *al)
   {
       char *buf;
       size_t n, len;
  @@ -107,7 +107,7 @@
       free(buf);
   }
   
  -void checklen(const char *tag, al_t *al)
  +static void checklen(const char *tag, al_t *al)
   {
       al_tx_t *tx; 
       al_chunk_t *cur;
  @@ -126,10 +126,10 @@
   
       if (total != total2)
           printf("ERROR: al_bytes(%s=%p): count %d != sum %d\n",
  -            tag,al,total,total2);
  +            tag,(void *)al,total,total2);
   }
   
  -int main()
  +int main(int argc, char *argv[])
   {
       al_rc_t rc;
       al_t *al, *al2, *al3, *al4;

From ossp-cvs-owner@ossp.org  Fri Oct 18 13:18:25 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DDC1D765DA; Fri, 18 Oct 2002 13:18:24 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al_todo.txt
Message-Id: <20021018111824.DDC1D765DA@mail.ossp.org>
Date: Fri, 18 Oct 2002 13:18:24 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Oct-2002 13:18:24
  Branch: HEAD                             Handle: 2002101812182400

  Added files:
    ossp-pkg/sio            al_todo.txt

  Log:
    add an OSSP al todo list where I already assembled some of Thomas'
    points plus the first bunch of feedback points I'Ve on my list.

  Summary:
    Revision    Changes     Path
    1.1         +76 -0      ossp-pkg/sio/al_todo.txt
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al_todo.txt
  ============================================================
  $ cvs update -p -r1.1 al_todo.txt
  
  o rse: memory chunk maintainance
    A piece of memory usually has the following 4 attributes which fully
    describe it:
  
    memory location: <pointer,length,size,refcount>
    memory type:     STACK|HEAP|SHMEM|CUSTOM
    memory scope:    LOAN|GIFT|[COPY]
    memory access:   READ_ONLY|READ_WRITE
  
    With the current al_chunk_t/al_buffer_t such a description is only
    partly possible, although IMHO (after efficiency) this flexibility in
    describing arbitrary memory chunks has to be #1 priority.
  
    Currently only al_attach_buffer() allows insertion of externally
    provided memory chunks. But these then have to be malloc(3)'ed and
    are not allowed to be allocated differently. For this the CUSTOM type
    would allow arbitrary memory chunks to be specified for an application
    provided destruction callback exists.
  
  o rse: al.pod, DESCRIPTION:
    perhaps add the buzzwords "zero-copy" and "efficient" somewhere just
    to make sure people recognize that OSSP al is not "just another
    trivial buffer library" ;)
    
  o rse: al.pod, al_attach_buffer:
    scope still does not say anything about the content, i.e., is it
    allowed that the application still changes the content (as long as the
    size does not change)?
  
  o rse: recommended renamings: 
    public:
      al_txalloc     -> al_tx_create
      al_txfree      -> al_tx_destroy
      al_traverse    -> al_traverse_start
      al_traverse_cb -> al_apply
    private:
      new_buffer     -> buffer_new
      dispose_buffer -> buffer_dispose
      make_buffer    -> buffer_make
      new_chunk      -> chunk_new
      split_chunk    -> chunk_split
      dispose_chunk  -> chunk_dispose
  
  o thl: sanity checks and return of AL_ERR_ARG
  
  o thl: Es fehlt eine al_configure() call mit dem man die al_memops_t
    beeinflussen kann.
  
  o thl: Beim splicen entstehen shared buffers und deren bisherige Behandlung
    ist rudimentaer, sorgt aber bereits fuer merklich Overhead usecount
    in al_buffer_t). Das transferieren von Teilen solcher shared buffer
    von einer al in eine andere ist derzeit ein Limit der Library.
    Ein versehentliches anhaengen von Daten in anscheinend freie
    Bufferbereiche, die aber doch von anderen Chunks genutzt werden,
    wird derzeit schlicht durch Totalverweigerung der Nutzung von
    evtl. freien Bufferbereichen bei shared buffers verhindert, indem
    AL_CHUNK_RESERVE() einfach immer "null Platz" fuer shared buffer
    (usecount > 1) zurueckgibt. Aehnliches gilt fuer das gift/loan
    Verhalten, wegen al_attach_buffer() muss extra ein freemem flag
    mitgescheift werden. Aber es wird gemacht und
    funktioniert und ich wuesste auch keinen besseren Weg.
   
  o thl: Es ist weder in der Doku noch im Code beruecksichtigt, dass
    die Assembly List zwischen al_traverse() und al_txfree() nicht
    veraendert werden darf. Ist auch nicht ganz so einfach zu erklaeren,
    denn veraendern heisst z.B. splicen. Appenden und prependen stoert
    wohl nicht. Es gehen aber die waehrend des traversals dazugekommenen
    Daten dem al_traverse_next() durch die Lappen, da die Datenmenge beim
    al_traverse() berechnet wird.
   
  o rse: the library is not threadsafe nor even reentrant because there
    are two static variables: alc_freelist, alc_freecount.
  
  o rse: the list.h macros lack a common prefix.
  

From ossp-cvs-owner@ossp.org  Fri Oct 18 14:08:53 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DA6D2765E0; Fri, 18 Oct 2002 14:08:52 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.c
Message-Id: <20021018120852.DA6D2765E0@mail.ossp.org>
Date: Fri, 18 Oct 2002 14:08:52 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Oct-2002 14:08:52
  Branch: HEAD                             Handle: 2002101813085200

  Modified files:
    ossp-pkg/sio            al.c

  Log:
    Undocumented internal code is usually always ok (at least as long as it
    is self-describing enough ;-), but undocumented internal data is most of
    the time nasty. It especially makes it hard to review anything in-depth
    because only the author has all of the gory details in mind all the
    time. Hence internal data should be documented at least a little bit to
    make clear for what each structure member is for. So, here it is. Feel
    free to fix my quick descriptions.

  Summary:
    Revision    Changes     Path
    1.23        +22 -21     ossp-pkg/sio/al.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.c
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 al.c
  --- ossp-pkg/sio/al.c	18 Oct 2002 11:01:59 -0000	1.22
  +++ ossp-pkg/sio/al.c	18 Oct 2002 12:08:52 -0000	1.23
  @@ -57,39 +57,40 @@
   typedef struct al_buffer_st al_buffer_t;
   
   typedef struct {
  -    void   *(*malloc)(size_t);
  -    void   (*free)(void *);
  -    void   *(*balloc)(size_t);
  -    void   (*bfree)(void *);
  -    size_t new_buffersize;
  -    int    max_freechunks;
  +    void           *(*malloc)(size_t); /* malloc(3) style function (for al_chunk_t) */
  +    void            (*free)(void *);   /* free(3)   style function (for al_chunk_t) */
  +    void           *(*balloc)(size_t); /* malloc(3) style function (for al_buffer_t) */
  +    void            (*bfree)(void *);  /* free(3)   style function (for al_buffer_t) */
  +    size_t            new_buffersize;  /* default size for memory underlying al_buffer_t */
  +    int               max_freechunks;  /* maximum number of cached al_chunk_t objects */
   } al_memops_t;
   
   struct al_st {
  -    LIST(al_chunk_t) chunks;
  -    size_t           bytes;
  -    al_memops_t      m;
  +    LIST(al_chunk_t)  chunks;          /* list header for al_chunk_t objects */
  +    size_t            bytes;           /* total cached number of bytes in chunk */
  +    al_memops_t       m;               /* assembly line memory operations (see above) */
   };
   
   struct al_chunk_st {
  -    NODE(al_chunk_t) chunks;
  -    al_buffer_t      *buf;
  -    size_t           begin, end;
  +    NODE(al_chunk_t)  chunks;          /* list node for al_chunk_t object chaining */
  +    al_buffer_t      *buf;             /* (non-exlusively) referenced buffer object */
  +    size_t            begin;           /* offset into buf->mem where data starts */
  +    size_t            end;             /* offset into buf->mem where data ends */
   };
   
   struct al_buffer_st {
  -    char           *mem;
  -    size_t         size;
  -    int            usecount;
  -    int            freemem;
  +    char             *mem;             /* reference to underlying chunk of data */
  +    size_t            size;            /* size of underlying chunk of data */
  +    int               usecount;        /* reference count (from al_chunk_t) */
  +    int               freemem;         /* boolean flag whether chunk of data has to be free(3)ed */
   };
   
   struct al_tx_st {
  -    al_td_t       dir;
  -    al_chunk_t    *cur;
  -    size_t        skip;
  -    size_t        togo;
  -    al_chunk_t    view;
  +    al_td_t           dir;             /* traversal direction */
  +    al_chunk_t       *cur;             /* current chunk during traveral steps */
  +    size_t            skip;            /* number of bytes to skip for traversal */
  +    size_t            togo;            /* number of bytes left for traversal */
  +    al_chunk_t        view;            /* synthetic chunk for returning during traversal steps */
   };
   
   /* number of bytes described by a chunk */

From ossp-cvs-owner@ossp.org  Fri Oct 18 14:23:36 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1E608765DA; Fri, 18 Oct 2002 14:23:36 +0200 (CEST)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.pod
Message-Id: <20021018122336.1E608765DA@mail.ossp.org>
Date: Fri, 18 Oct 2002 14:23:36 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   18-Oct-2002 14:23:36
  Branch: HEAD                             Handle: 2002101813233500

  Modified files:
    ossp-pkg/sio            al.pod

  Log:
    document change in al_attach_buffer API

  Summary:
    Revision    Changes     Path
    1.10        +7  -4      ossp-pkg/sio/al.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.pod
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 al.pod
  --- ossp-pkg/sio/al.pod	18 Oct 2002 09:09:18 -0000	1.9
  +++ ossp-pkg/sio/al.pod	18 Oct 2002 12:23:35 -0000	1.10
  @@ -186,15 +186,18 @@
   
   Example: C<al_prepend_bytes(al, "Hello world\n", 12);>
   
  -=item al_rc_t B<al_attach_buffer>(al_t *I<al>, char *I<p>, size_t I<n>);
  +=item al_rc_t B<al_attach_buffer>(al_t *I<al>, char *I<p>, size_t I<n>, void (*I<freemem>)(char *, size_t, void *), void *I<u>);
   
   Attach the storage array starting at I<p> with size I<n> at the end of
   the assembly line. Its content becomes part of the assembly line
   and is subject to assembly line operations. The storage array must stay
  -in scope for the whole life time of the assembly line, there is no way
  -to detach it from the assembly line.
  +in scope until it is no longer referenced by the assembly line. When
  +this happens the function I<freemem> is called with the original pointer
  +I<p>, size I<n> and an arbitrary pointer I<u>. Passing a NULL pointer
  +for I<freemem> is valid, then no callback takes place, which might be
  +appropriate for static buffers.
   
  -Example: C<char store[] = "foo\n"; al_attach_buffer(al, store, sizeof(store));>
  +Example: C<char store[] = "foo\n"; al_attach_buffer(al, store, sizeof(store), NULL, NULL);>
   
   =item al_rc_t B<al_splice>(al_t *I<al>, size_t I<off>, size_t I<n>, al_t *I<nal>, al_t *I<tal>);
   

From ossp-cvs-owner@ossp.org  Fri Oct 18 14:24:54 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 209FC765DA; Fri, 18 Oct 2002 14:24:54 +0200 (CEST)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.c al.h al_test.c
Message-Id: <20021018122454.209FC765DA@mail.ossp.org>
Date: Fri, 18 Oct 2002 14:24:54 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   18-Oct-2002 14:24:54
  Branch: HEAD                             Handle: 2002101813245300

  Modified files:
    ossp-pkg/sio            al.c al.h al_test.c

  Log:
    change in al_attach_buffer API
    
    back out rse's change to al_traverse parameters.
    parameter order is:   object ptr(if any), input parameters, output parameters

  Summary:
    Revision    Changes     Path
    1.24        +26 -13     ossp-pkg/sio/al.c
    1.12        +2  -2      ossp-pkg/sio/al.h
    1.12        +7  -2      ossp-pkg/sio/al_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.c
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 al.c
  --- ossp-pkg/sio/al.c	18 Oct 2002 12:08:52 -0000	1.23
  +++ ossp-pkg/sio/al.c	18 Oct 2002 12:24:53 -0000	1.24
  @@ -82,7 +82,8 @@
       char             *mem;             /* reference to underlying chunk of data */
       size_t            size;            /* size of underlying chunk of data */
       int               usecount;        /* reference count (from al_chunk_t) */
  -    int               freemem;         /* boolean flag whether chunk of data has to be free(3)ed */
  +    void           (*freemem)(char *p, size_t n, void *u); /* callback function to reclaim memory when it is no longer referenced */
  +    void           *userdata;          /* arbitrary pointer to pass context data to the callback function */
   };
   
   struct al_tx_st {
  @@ -139,6 +140,17 @@
       do { (alc)->begin -= n; (al)->bytes += (n); } while (0)
   
   /*
  + * callback to release buffer memory allocated by the library
  + */
  +static
  +void freemem(char *p, size_t n, void *u)
  +{
  +printf("*** FREEMEM(LIBRARY) buffer %p size %d\n",p,n);
  +    al_t *al = (al_t *)u;
  +    (al->m.bfree)(p);
  +}
  +
  +/*
    * allocate backing store and its control structure from heap
    *
    * can be freed when usecount drops to zero
  @@ -157,7 +169,8 @@
           return AL_ERR_MEM;
       }
   
  -    buf->freemem  = 1;
  +    buf->freemem  = freemem;
  +    buf->userdata = NULL;
       buf->size     = n;
       buf->usecount = 0;
   
  @@ -173,7 +186,7 @@
           return AL_ERR_INT;
   
       if (buf->freemem)
  -        (al->m.bfree)(buf->mem);
  +        (buf->freemem)(buf->mem, buf->size, buf->userdata);
   
       (al->m.free)(buf);
       return AL_OK;
  @@ -184,8 +197,8 @@
    * and attach to existing memory
    * only the control structure will be freed later
    */
  -static al_rc_t
  -make_buffer(al_t *al, char *p, size_t n, al_buffer_t **bufp)
  +static
  +al_rc_t make_buffer(al_t *al, char *p, size_t n, void (*freemem)(char *, size_t, void *), void *u, al_buffer_t **bufp)
   {
       al_buffer_t *buf;
   
  @@ -194,7 +207,8 @@
   
       buf->mem      = p;
   
  -    buf->freemem  = 0;
  +    buf->freemem  = freemem;
  +    buf->userdata = u;
       buf->size     = n;
       buf->usecount = 0;
   
  @@ -539,8 +553,7 @@
    * XXX - some list operations modify the buffer
    *
    */
  -al_rc_t
  -al_attach_buffer(al_t *al, char *p, size_t n)
  +al_rc_t al_attach_buffer(al_t *al, char *p, size_t n, void (*freemem)(char *, size_t, void *), void *u)
   {
       al_rc_t rc;
       al_buffer_t *buf;
  @@ -550,7 +563,7 @@
       if (al == NULL || p == NULL || n < 0)
           return AL_RC(AL_ERR_ARG);
   
  -    rc = make_buffer(al, p, n, &buf);
  +    rc = make_buffer(al, p, n, freemem, u, &buf);
       if (rc != AL_OK)
           return AL_RC(rc);
       rc = new_chunk(al,buf, &cur);
  @@ -789,7 +802,7 @@
    * - save traversal parameters
    */
   al_rc_t
  -al_traverse(al_t *al, al_tx_t *tx, size_t off, size_t n, al_td_t dir)
  +al_traverse(al_t *al, size_t off, size_t n, al_td_t dir, al_tx_t *tx)
   {
       al_rc_t rc;
   
  @@ -880,7 +893,7 @@
       al_tx_t tx;                /* XXX - private tx structure on stack */
       al_chunk_t *view;
   
  -    rc = al_traverse(al, &tx, off, n, dir);
  +    rc = al_traverse(al, off, n, dir, &tx);
       if (rc != AL_OK)
           return AL_RC(rc);
   
  @@ -915,7 +928,7 @@
   
       *lenp = 0; /* keep caller on safe side */
   
  -    rc = al_traverse(al, &tx, off, n, AL_FORWARD);
  +    rc = al_traverse(al, off, n, AL_FORWARD, &tx);
       if (rc != AL_OK)
           return AL_RC(rc);
   
  @@ -949,7 +962,7 @@
       al_chunk_t *view;
       size_t step;
   
  -    rc = al_traverse(al, &tx, off, n, AL_FORWARD);
  +    rc = al_traverse(al, off, n, AL_FORWARD, &tx);
       if (rc != AL_OK)
           return AL_RC(rc);
   
  Index: ossp-pkg/sio/al.h
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 al.h
  --- ossp-pkg/sio/al.h	18 Oct 2002 11:01:59 -0000	1.11
  +++ ossp-pkg/sio/al.h	18 Oct 2002 12:24:53 -0000	1.12
  @@ -58,10 +58,10 @@
   al_rc_t al_destroy      (al_t *al);
   al_rc_t al_append_bytes (al_t *al, const char *src, size_t n);
   al_rc_t al_prepend_bytes(al_t *al, const char *src, size_t n);
  -al_rc_t al_attach_buffer(al_t *al, char *p, size_t n);
  +al_rc_t al_attach_buffer(al_t *al, char *p, size_t n, void (*freemem)(char *, size_t, void *), void *u);
   al_rc_t al_txalloc      (al_t *al, al_tx_t **txp);
   al_rc_t al_txfree       (al_t *al, al_tx_t *tx);
  -al_rc_t al_traverse     (al_t *al, al_tx_t *tx, size_t off, size_t n, al_td_t dir);
  +al_rc_t al_traverse     (al_t *al, size_t off, size_t n, al_td_t dir, al_tx_t *tx);
   al_rc_t al_traverse_next(al_t *al, al_tx_t *tx, al_chunk_t **alcp);
   al_rc_t al_traverse_end (al_t *al, al_tx_t *tx, int final);
   al_rc_t al_traverse_cb  (al_t *al, size_t off, size_t n, al_td_t dir, al_rc_t (*cb)(al_chunk_t *, void *), void *u);
  Index: ossp-pkg/sio/al_test.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 al_test.c
  --- ossp-pkg/sio/al_test.c	18 Oct 2002 11:03:07 -0000	1.11
  +++ ossp-pkg/sio/al_test.c	18 Oct 2002 12:24:53 -0000	1.12
  @@ -116,7 +116,7 @@
       total = 0;
   
       al_txalloc(al, &tx);
  -    al_traverse(al, tx, 0, -1, AL_FORWARD);
  +    al_traverse(al, 0, -1, AL_FORWARD, tx);
       while (al_traverse_next(al, tx, &cur) == AL_OK)
           total += al_chunk_len(cur);
       al_traverse_end(al, tx, 1);
  @@ -129,6 +129,11 @@
               tag,(void *)al,total,total2);
   }
   
  +void reclaim(char *p, size_t n, void *u)
  +{
  +    printf("*** reclaiming buffer %p size %d ***\n",p,n);
  +}
  +
   int main(int argc, char *argv[])
   {
       al_rc_t rc;
  @@ -141,7 +146,7 @@
       al_create(&al3);
   
       al_append_bytes(al, S("Hello world\n"));
  -    al_attach_buffer(al, S(baf));
  +    al_attach_buffer(al, S(baf), reclaim, NULL);
   
       for (i=0; i<500; ++i)
           al_append_bytes(al, S("Huhu world\n"));

From ossp-cvs-owner@ossp.org  Fri Oct 18 14:31:50 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AFA5A765E0; Fri, 18 Oct 2002 14:31:50 +0200 (CEST)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.c
Message-Id: <20021018123150.AFA5A765E0@mail.ossp.org>
Date: Fri, 18 Oct 2002 14:31:50 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   18-Oct-2002 14:31:50
  Branch: HEAD                             Handle: 2002101813315000

  Modified files:
    ossp-pkg/sio            al.c

  Log:
    after splitting initial chunk, the split offset ("skip") needs
    to be reset to zero.

  Summary:
    Revision    Changes     Path
    1.25        +1  -0      ossp-pkg/sio/al.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.c
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 al.c
  --- ossp-pkg/sio/al.c	18 Oct 2002 12:24:53 -0000	1.24
  +++ ossp-pkg/sio/al.c	18 Oct 2002 12:31:50 -0000	1.25
  @@ -644,6 +644,7 @@
               if (rc != AL_OK)
                   return AL_RC(rc);
               INSERT(al,chunks,ins,splitbuf);
  +            skip = 0;
           }
       }
   

From ossp-cvs-owner@ossp.org  Fri Oct 18 14:41:21 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D1975765E0; Fri, 18 Oct 2002 14:41:20 +0200 (CEST)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.c
Message-Id: <20021018124120.D1975765E0@mail.ossp.org>
Date: Fri, 18 Oct 2002 14:41:20 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   18-Oct-2002 14:41:20
  Branch: HEAD                             Handle: 2002101813412000

  Modified files:
    ossp-pkg/sio            al.c

  Log:
    correctly initialize callback userdata
    get rid of debug printf

  Summary:
    Revision    Changes     Path
    1.26        +1  -2      ossp-pkg/sio/al.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.c
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 al.c
  --- ossp-pkg/sio/al.c	18 Oct 2002 12:31:50 -0000	1.25
  +++ ossp-pkg/sio/al.c	18 Oct 2002 12:41:20 -0000	1.26
  @@ -145,7 +145,6 @@
   static
   void freemem(char *p, size_t n, void *u)
   {
  -printf("*** FREEMEM(LIBRARY) buffer %p size %d\n",p,n);
       al_t *al = (al_t *)u;
       (al->m.bfree)(p);
   }
  @@ -170,7 +169,7 @@
       }
   
       buf->freemem  = freemem;
  -    buf->userdata = NULL;
  +    buf->userdata = (void *)al;
       buf->size     = n;
       buf->usecount = 0;
   

From ossp-cvs-owner@ossp.org  Fri Oct 18 15:53:29 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DA3EE765DA; Fri, 18 Oct 2002 15:53:28 +0200 (CEST)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al_todo.txt
Message-Id: <20021018135328.DA3EE765DA@mail.ossp.org>
Date: Fri, 18 Oct 2002 15:53:28 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   18-Oct-2002 15:53:28
  Branch: HEAD                             Handle: 2002101814532800

  Modified files:
    ossp-pkg/sio            al_todo.txt

  Log:
    my answers

  Summary:
    Revision    Changes     Path
    1.2         +79 -1      ossp-pkg/sio/al_todo.txt
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al_todo.txt
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 al_todo.txt
  --- ossp-pkg/sio/al_todo.txt	18 Oct 2002 11:18:24 -0000	1.1
  +++ ossp-pkg/sio/al_todo.txt	18 Oct 2002 13:53:28 -0000	1.2
  @@ -18,16 +18,47 @@
     would allow arbitrary memory chunks to be specified for an application
     provided destruction callback exists.
   
  +x mlelstv:
  +  insertion of externally provided memory chunks is the
  +  exception, not the rule. Previously it couldn't be malloc'ed
  +  because it was almost impossible to free it later. The latest
  +  change to the API provides the necessary destruction callback.
  +
  +  I don't see specific "memory types" yet. Currently memory can be
  +  allocated and freed. If we support "memory types" we need
  +  a specific "memory" library that abstracts from these types
  +  beyond malloc() and free(). Things like cache-coherency or
  +  atomic access come to my mind.
  +
  +  Memory scopes are implied by the specific operations:
  +  user API:   LOAN == al_attach_buffer (and COPY with al_*_bytes)
  +  internally: GIFT == al_splice (and COPY)
  +  Providing public GIFT semantic requires to expose the internal
  +  memory allocator. That's why I use LOAN.
  +  
  +  No ideas about "memory access" types yet. What is the use for
  +  a "read-only" assembly line ?
  +
   o rse: al.pod, DESCRIPTION:
     perhaps add the buzzwords "zero-copy" and "efficient" somewhere just
     to make sure people recognize that OSSP al is not "just another
     trivial buffer library" ;)
  +
  +x mlelstv:
  +  it is "copy avoidance" but not "zero-copy".
     
   o rse: al.pod, al_attach_buffer:
     scope still does not say anything about the content, i.e., is it
     allowed that the application still changes the content (as long as the
     size does not change)?
   
  +x mlelstv:
  +  the buffer is loaned to the library. Previously you wouldn't know
  +  when it is returnd (and thus available). Now a callback function
  +  is used to hand the buffer back.
  +  The same mechanism is used internally for buffers allocated by
  +  the library.
  +
   o rse: recommended renamings: 
     public:
       al_txalloc     -> al_tx_create
  @@ -42,11 +73,29 @@
       split_chunk    -> chunk_split
       dispose_chunk  -> chunk_dispose
   
  +x mlelstv:
  +  alloc/free vs create/destroy:   al_tx_t is no object, thus
  +  no constructor, just an allocator. And that's denoted in the
  +  function name.
  +
  +  al_apply sounds neat, but then al_traverse* need some neat
  +  names too.
  +
  +  private naming: I don't like the change. Current names
  +  are english phrases. "new" (== verb) "buffer" (== subject).
  +
   o thl: sanity checks and return of AL_ERR_ARG
   
  +x mlelstv:
  +  ACK
  +
   o thl: Es fehlt eine al_configure() call mit dem man die al_memops_t
     beeinflussen kann.
   
  +x mlelstv:
  +  memops sind bisher private, sind sie ausreichend fuer public API ?
  +  Ich glaube nicht. Und "erweiterbare" APIs wuerde ich gerne vermeiden.
  +
   o thl: Beim splicen entstehen shared buffers und deren bisherige Behandlung
     ist rudimentaer, sorgt aber bereits fuer merklich Overhead usecount
     in al_buffer_t). Das transferieren von Teilen solcher shared buffer
  @@ -60,6 +109,17 @@
     Verhalten, wegen al_attach_buffer() muss extra ein freemem flag
     mitgescheift werden. Aber es wird gemacht und
     funktioniert und ich wuesste auch keinen besseren Weg.
  +
  +x mlelstv:
  +  usecount is notwendig, wenn man zukuenftig aliasing (== copy-on-write)
  +  unterstuetzen will.
  +
  +  Eine feinere Behandlung von shared buffers wuerde ich, gerade wegen
  +  des Overheads, vermeiden wollen. Buffer-Sharing dient nicht dem
  +  Sparen von Speicher sondern dem Verhindern von Kopieroperationen.
  +
  +  freemem ist nicht laenger ein Flag, sondern ein (optionaler) Callback.
  +  Flexibler.
    
   o thl: Es ist weder in der Doku noch im Code beruecksichtigt, dass
     die Assembly List zwischen al_traverse() und al_txfree() nicht
  @@ -68,9 +128,27 @@
     wohl nicht. Es gehen aber die waehrend des traversals dazugekommenen
     Daten dem al_traverse_next() durch die Lappen, da die Datenmenge beim
     al_traverse() berechnet wird.
  - 
  +
  +x mlelstv:
  +  Korrekt. Erster Ansatz ist ein al_traverse_end() mit dem man ein
  +  Traversal abschliesst (oder temporaer abschliesst, damit die notwendige
  +  Re-Initialisierung automatisch wieder vorgenommen werden kann).
  +
   o rse: the library is not threadsafe nor even reentrant because there
     are two static variables: alc_freelist, alc_freecount.
   
  +x mlelstv:
  +  ACK
  +
  +  solution 1: keep per al_t freelists, simple, but doesn't allow
  +              a shared freelist.
  +  solution 2: add global context that can be hooked into thread libraries.
  +  solution 3: defer problem to a grid allocator library
  +
  +  I suggest solution 3 :)
  +
   o rse: the list.h macros lack a common prefix.
  +
  +x mlelstv:
  +  wenn schon dann XML namespaces.... >-)
   

From ossp-cvs-owner@ossp.org  Fri Oct 18 16:12:12 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CCD8D765E0; Fri, 18 Oct 2002 16:12:11 +0200 (CEST)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.c
Message-Id: <20021018141211.CCD8D765E0@mail.ossp.org>
Date: Fri, 18 Oct 2002 16:12:11 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   18-Oct-2002 16:12:11
  Branch: HEAD                             Handle: 2002101815121100

  Modified files:
    ossp-pkg/sio            al.c

  Log:
    beautification

  Summary:
    Revision    Changes     Path
    1.27        +2  -2      ossp-pkg/sio/al.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.c
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 al.c
  --- ossp-pkg/sio/al.c	18 Oct 2002 12:41:20 -0000	1.26
  +++ ossp-pkg/sio/al.c	18 Oct 2002 14:12:11 -0000	1.27
  @@ -82,8 +82,8 @@
       char             *mem;             /* reference to underlying chunk of data */
       size_t            size;            /* size of underlying chunk of data */
       int               usecount;        /* reference count (from al_chunk_t) */
  -    void           (*freemem)(char *p, size_t n, void *u); /* callback function to reclaim memory when it is no longer referenced */
  -    void           *userdata;          /* arbitrary pointer to pass context data to the callback function */
  +    void            (*freemem)(char *p, size_t n, void *u); /* callback function to reclaim memory when it is no longer referenced */
  +    void             *userdata;          /* arbitrary pointer to pass context data to the callback function */
   };
   
   struct al_tx_st {

From ossp-cvs-owner@ossp.org  Fri Oct 18 16:52:39 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C0499765DA; Fri, 18 Oct 2002 16:52:38 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al_todo.txt
Message-Id: <20021018145238.C0499765DA@mail.ossp.org>
Date: Fri, 18 Oct 2002 16:52:38 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Oct-2002 16:52:38
  Branch: HEAD                             Handle: 2002101815523800

  Modified files:
    ossp-pkg/sio            al_todo.txt

  Log:
    remember this issue for reconsideration

  Summary:
    Revision    Changes     Path
    1.3         +28 -0      ossp-pkg/sio/al_todo.txt
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al_todo.txt
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 al_todo.txt
  --- ossp-pkg/sio/al_todo.txt	18 Oct 2002 13:53:28 -0000	1.2
  +++ ossp-pkg/sio/al_todo.txt	18 Oct 2002 14:52:38 -0000	1.3
  @@ -152,3 +152,31 @@
   x mlelstv:
     wenn schon dann XML namespaces.... >-)
   
  +o rse:
  +   al_rc_t al_txalloc      (al_t *al, al_tx_t **tx);
  +   al_rc_t al_txfree       (al_t *al, al_tx_t  *tx);
  +  -al_rc_t al_traverse     (al_t *al, size_t off, size_t n, al_td_t dir, al_tx_t *tx);
  +  +al_rc_t al_traverse     (al_t *al, al_tx_t  *tx, size_t off, size_t n, al_td_t dir);
  +   al_rc_t al_traverse_next(al_t *al, al_tx_t  *tx, al_chunk_t **alcp);
  +   al_rc_t al_traverse_end (al_t *al, al_tx_t  *tx, int final);
  +
  +  mlelstv:
  +  parameter order is: object ptr(if any), input parameters, output parameters
  +
  +  rse:
  +  Nun, generell ist deine "obj-ptr, input[, ...], output[, ...]"
  +  Reihenfolge voellig ok. Der Punkt ist nur, dasz es eigentlich
  +  "obj-ptr[, ...], input, [,...], output, [,...]" ist, sprich es
  +  kann durchaus bei Sub-APIs mehrere Object Pointer geben. Und
  +  genau das ist bei dir ja der Fall IMHO. Denn das al_tx_t und die
  +  Functions al_txalloc, al_txfree, al_traverse, al_traverse_next und
  +  al_traverse_end bilden bei dir ja eine solche Sub-API. Und deswegen
  +  wuerde ich das al_tx_t auch als zweites Argument bei al_traverse
  +  sehen. Denn obendrein: wenn es man es genau nimmt, ist das al_tx_t
  +  ja nicht nur bei al_traverse ein Output Parameter, denn die anderen
  +  Funktionen aendern ihn ja auch ab. Wenn man also streng zwischen Input
  +  und Output-Parameters unterscheidet, dann duerften Input Parameter
  +  also nie veraendert werden (wenn sie nicht eh per Kopie reingehen).
  +  Die Input/Output-Regel ist also streng genommen bereits durch
  +  al_traverse_next gebrochen IMHO.
  +

From ossp-cvs-owner@ossp.org  Fri Oct 18 17:53:18 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EB41C765E2; Fri, 18 Oct 2002 17:53:17 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al_test.c
Message-Id: <20021018155317.EB41C765E2@mail.ossp.org>
Date: Fri, 18 Oct 2002 17:53:17 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Oct-2002 17:53:17
  Branch: HEAD                             Handle: 2002101816531700

  Modified files:
    ossp-pkg/sio            al_test.c

  Log:
    shutdown warning

  Summary:
    Revision    Changes     Path
    1.13        +1  -1      ossp-pkg/sio/al_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al_test.c
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 al_test.c
  --- ossp-pkg/sio/al_test.c	18 Oct 2002 12:24:53 -0000	1.12
  +++ ossp-pkg/sio/al_test.c	18 Oct 2002 15:53:17 -0000	1.13
  @@ -129,7 +129,7 @@
               tag,(void *)al,total,total2);
   }
   
  -void reclaim(char *p, size_t n, void *u)
  +static void reclaim(char *p, size_t n, void *u)
   {
       printf("*** reclaiming buffer %p size %d ***\n",p,n);
   }

From ossp-cvs-owner@ossp.org  Sun Oct 20 13:45:13 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B91E176A32; Sun, 20 Oct 2002 13:45:12 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog configure.ac pth_lib.c pth_p.h.in p...
Message-Id: <20021020114512.B91E176A32@mail.ossp.org>
Date: Sun, 20 Oct 2002 13:45:12 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Oct-2002 13:45:12
  Branch: HEAD                             Handle: 2002102012451000

  Modified files:
    ossp-pkg/pth            ChangeLog configure.ac pth_lib.c pth_p.h.in
                            pth_syscall.c

  Log:
    Completely rewrote the "hard syscall mapping".
    
    Previously the internal syscall exit points were based on syscall(2)
    only. This is problematic because it by-passes the C library glue
    code which sometimes performs necessary assembly fiddling in order
    to call the underlying system calls correctly. Additionally,
    syscall(2) does not exists everywhere.
    
    Now the internal exit points are based on a by-syscall dynamically
    selected combination of RTLD_NEXT+dlsym(2), dlopen(2)+dlsym(2) and
    the known syscall(2) (in this fallback order). This way the "hard
    syscall mapping" is a lot more portable and flexible.
    
    Initial implementation by: Jonathan Schilling <jls@sco.com>
    Enhanced implementation by: Ralf S. Engelschall

  Summary:
    Revision    Changes     Path
    1.571       +14 -0      ossp-pkg/pth/ChangeLog
    1.6         +37 -1      ossp-pkg/pth/configure.ac
    1.51        +4  -0      ossp-pkg/pth/pth_lib.c
    1.32        +3  -0      ossp-pkg/pth/pth_p.h.in
    1.23        +396 -170   ossp-pkg/pth/pth_syscall.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.570 -r1.571 ChangeLog
  --- ossp-pkg/pth/ChangeLog	15 Oct 2002 21:14:27 -0000	1.570
  +++ ossp-pkg/pth/ChangeLog	20 Oct 2002 11:45:10 -0000	1.571
  @@ -21,6 +21,20 @@
   
     Changes between 1.4.1 and 1.5.0 (27-Jan-2002 to xx-Sep-2002)
   
  +   *) Completely rewrote the "hard syscall mapping". 
  +
  +      Previously the internal syscall exit points were based on syscall(2)
  +      only. This is problematic because it by-passes the C library glue
  +      code which sometimes performs necessary assembly fiddling in order
  +      to call the underlying system calls correctly. Additionally,
  +      syscall(2) does not exists everywhere.
  +
  +      Now the internal exit points are based on a by-syscall dynamically
  +      selected combination of RTLD_NEXT+dlsym(2), dlopen(2)+dlsym(2) and
  +      the known syscall(2) (in this fallback order). This way the "hard
  +      syscall mapping" is a lot more portable and flexible.
  +      [Ralf S. Engelschall, Jonathan Schilling <jls@sco.com>]
  +
      *) Added support to pth_poll(3) for the poll(2) XPG.4 flags
         POLLD{RD,WR}{NORM,BAND}.
         [Jason Evans <jasone@canonware.com>, Ralf S. Engelschall]
  Index: ossp-pkg/pth/configure.ac
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 configure.ac
  --- ossp-pkg/pth/configure.ac	15 Oct 2002 20:34:22 -0000	1.5
  +++ ossp-pkg/pth/configure.ac	20 Oct 2002 11:45:10 -0000	1.6
  @@ -463,9 +463,45 @@
   
   AC_MSG_PART(System Call Mapping)
   
  -AC_CHECK_FUNCS(syscall)
  +dnl #   check for syscall(2)
   AC_CHECK_HEADERS(sys/syscall.h sys/socketcall.h)
  +AC_CHECK_FUNCS(syscall)
   AC_CHECK_DEFINE(SYS_read, sys/syscall.h)
  +
  +dnl #   check for dlsym(3) with RTLD_NEXT
  +AC_CHECK_HEADERS(dlfcn.h)
  +AC_CHECK_LIB(dl, dlsym)
  +AC_CHECK_FUNCS(dlopen dlsym dlclose)
  +AC_CHECK_DEFINE(RTLD_NEXT, dlfcn.h)
  +
  +dnl #   check for path to dynamic C library
  +AC_MSG_CHECKING([for syscall dynamic libraries])
  +pth_syscall_libs=""
  +dirs=`echo "$LDFLAGS" |\
  +      sed -e 's;-L\([[^ ]]*\);<\1>;g' |\
  +      sed -e 's;^[[^<]]*<;;' -e 's;>[[^<]]*<; ;g' -e 's;>.*$;;'`
  +dirs="$dirs /usr/lib /lib"
  +libs=`echo "$LIBS" |\
  +      sed -e 's;-l\([[^ ]]*\);<\1>;g' |\
  +      sed -e 's;^[[^<]]*<;;' -e 's;>[[^<]]*<; ;g' -e 's;>.*$;;'`
  +libs="$libs c"
  +for lib in $libs; do
  +    for dir in $dirs; do
  +        for ext in so sl; do
  +            if test -f "${dir}/lib${lib}.${ext}"; then
  +                if test ".$pth_syscall_libs" = .; then
  +                    pth_syscall_libs="${dir}/lib${lib}.${ext}"
  +                else
  +                    pth_syscall_libs="${pth_syscall_libs}:${dir}/lib${lib}.${ext}"
  +                fi
  +            fi
  +        done
  +    done
  +done
  +AC_MSG_RESULT([$pth_syscall_libs])
  +AC_DEFINE_UNQUOTED(PTH_SYSCALL_LIBS, 
  +                   ["$pth_syscall_libs"],
  +                   [define for the paths to syscall dynamic libraries])
   
   AC_MSG_CHECKING([whether soft system call mapping is used])
   AC_ARG_ENABLE(syscall-soft,dnl
  Index: ossp-pkg/pth/pth_lib.c
  ============================================================
  $ cvs diff -u -r1.50 -r1.51 pth_lib.c
  --- ossp-pkg/pth/pth_lib.c	15 Oct 2002 20:34:22 -0000	1.50
  +++ ossp-pkg/pth/pth_lib.c	20 Oct 2002 11:45:10 -0000	1.51
  @@ -69,6 +69,9 @@
   
       pth_debug1("pth_init: enter");
   
  +    /* initialize syscall wrapping */
  +    pth_syscall_init();
  +
       /* initialize the scheduler */
       pth_scheduler_init();
   
  @@ -138,6 +141,7 @@
       pth_initialized = FALSE;
       pth_tcb_free(pth_sched);
       pth_tcb_free(pth_main);
  +    pth_syscall_kill();
   #ifdef PTH_EX
       __ex_ctx       = __ex_ctx_default;
       __ex_terminate = __ex_terminate_default;
  Index: ossp-pkg/pth/pth_p.h.in
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 pth_p.h.in
  --- ossp-pkg/pth/pth_p.h.in	30 Jan 2002 13:34:40 -0000	1.31
  +++ ossp-pkg/pth/pth_p.h.in	20 Oct 2002 11:45:10 -0000	1.32
  @@ -64,6 +64,9 @@
   #ifdef HAVE_NET_ERRNO_H
   #include <net/errno.h>
   #endif
  +#ifdef HAVE_DLFCN_H
  +#include <dlfcn.h>
  +#endif
   
   /* dmalloc support */
   #ifdef PTH_DMALLOC
  Index: ossp-pkg/pth/pth_syscall.c
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 pth_syscall.c
  --- ossp-pkg/pth/pth_syscall.c	27 Jan 2002 11:03:41 -0000	1.22
  +++ ossp-pkg/pth/pth_syscall.c	20 Oct 2002 11:45:10 -0000	1.23
  @@ -29,309 +29,535 @@
                                                    -- Unknown         */
   #include "pth_p.h"
   
  -#if cpp
  +/* some exported variables for object layer checks */
  +int pth_syscall_soft = PTH_SYSCALL_SOFT;
  +int pth_syscall_hard = PTH_SYSCALL_HARD;
   
  +#if cpp
   #if PTH_SYSCALL_HARD
  +/* hard syscall mapping */
  +#if HAVE_SYS_SYSCALL_H
   #include <sys/syscall.h>
  +#endif
   #ifdef HAVE_SYS_SOCKETCALL_H
   #include <sys/socketcall.h>
   #endif
  -#define pth_sc(func) PTH_SC_##func
  -#else
  +#define pth_sc(func) pth_sc_##func
  +#else /* !PTH_SYSCALL_HARD */
  +/* no hard syscall mapping */
   #define pth_sc(func) func
  +#endif /* PTH_SYSCALL_HARD */
  +#endif /* cpp */
  +
  +/* internal data structures */
  +#if cpp
  +#if PTH_SYSCALL_HARD
  +typedef int (*pth_syscall_fct_t)();
  +typedef struct {
  +    char             *name;    /* name of system/function call */
  +    pth_syscall_fct_t addr;    /* address of wrapped system/function call */
  +} pth_syscall_fct_tab_t;
  +typedef struct {
  +    char             *path;    /* path to dynamic library */
  +    void             *handle;  /* handle of dynamic library */
  +} pth_syscall_lib_tab_t;
  +#endif
   #endif
   
  -#endif /* cpp */
  +#if PTH_SYSCALL_HARD
   
  -/* some exported variables for object layer checks */
  -int pth_syscall_soft = PTH_SYSCALL_SOFT;
  -int pth_syscall_hard = PTH_SYSCALL_HARD;
  +/* NUL-spiked copy of library paths */
  +static char *pth_syscall_libs = NULL;
   
  -/* Pth hard wrapper for syscall fork(2) */
  -#if cpp
  -#if defined(SYS_fork)
  -#define PTH_SC_fork() ((pid_t)syscall(SYS_fork))
  -#else
  -#define PTH_SC_fork fork
  +/* table of dynamic libraries and their resolving handles */
  +static pth_syscall_lib_tab_t pth_syscall_lib_tab[128] = {
  +    { NULL, NULL }
  +};
  +
  +/* table of syscalls and their resolved function pointers */
  +intern pth_syscall_fct_tab_t pth_syscall_fct_tab[] = {
  +    /* Notice: order must match the macro values above */
  +#define PTH_SCF_fork          0
  +#define PTH_SCF_waitpid       1
  +#define PTH_SCF_system        2
  +#define PTH_SCF_sleep         3
  +#define PTH_SCF_sigprocmask   4
  +#define PTH_SCF_sigwait       5
  +#define PTH_SCF_select        6
  +#define PTH_SCF_poll          7
  +#define PTH_SCF_connect       8
  +#define PTH_SCF_accept        9
  +#define PTH_SCF_read          10
  +#define PTH_SCF_write         11
  +#define PTH_SCF_readv         12
  +#define PTH_SCF_writev        13
  +#define PTH_SCF_recv          14
  +#define PTH_SCF_send          15
  +#define PTH_SCF_recvfrom      16
  +#define PTH_SCF_sendto        17
  +#define PTH_SCF_pread         18
  +#define PTH_SCF_pwrite        19
  +    { "fork",        NULL },
  +    { "waitpid",     NULL },
  +    { "system",      NULL },
  +    { "sleep",       NULL },
  +    { "sigprocmask", NULL },
  +    { "sigwait",     NULL },
  +    { "select",      NULL },
  +    { "poll",        NULL },
  +    { "connect",     NULL },
  +    { "accept",      NULL },
  +    { "read",        NULL },
  +    { "write",       NULL },
  +    { "readv",       NULL },
  +    { "writev",      NULL },
  +    { "recv",        NULL },
  +    { "send",        NULL },
  +    { "recvfrom",    NULL },
  +    { "sendto",      NULL },
  +    { "pread",       NULL },
  +    { "pwrite",      NULL },
  +    { NULL,          NULL }
  +};
   #endif
  -#endif /* cpp */
  -#if PTH_SYSCALL_HARD && defined(SYS_fork)
  +
  +/* syscall wrapping initialization */
  +intern void pth_syscall_init(void)
  +{
  +#if PTH_SYSCALL_HARD
  +    int i;
  +    int j;
  +    char *cpLib;
  +    char *cp;
  +
  +    /* fill paths of libraries into internal table */
  +    pth_syscall_libs = strdup(PTH_SYSCALL_LIBS);
  +    cpLib = pth_syscall_libs;
  +    for (i = 0; i < (sizeof(pth_syscall_lib_tab)/sizeof(pth_syscall_lib_tab_t))-1; ) {
  +        if ((cp = strchr(cpLib, ':')) != NULL)
  +            *cp++ = '\0';
  +        pth_syscall_lib_tab[i].path   = cpLib;
  +        pth_syscall_lib_tab[i].handle = NULL;
  +        i++;
  +        if (cp != NULL)
  +            cpLib = cp;
  +        else
  +            break;
  +    }
  +    pth_syscall_lib_tab[i].path = NULL;
  +
  +#if defined(HAVE_DLOPEN) && defined(HAVE_DLSYM)
  +    /* determine addresses of syscall functions */
  +    for (i = 0; pth_syscall_fct_tab[i].name != NULL; i++) {
  +
  +        /* attempt #1: fetch from implicit successor libraries */
  +#if defined(HAVE_DLSYM) && defined(HAVE_RTLD_NEXT)
  +        pth_syscall_fct_tab[i].addr = (pth_syscall_fct_t)
  +            dlsym(RTLD_NEXT, pth_syscall_fct_tab[i].name);
  +#endif
  +
  +        /* attempt #2: fetch from explicitly loaded C library */
  +        if (pth_syscall_fct_tab[i].addr == NULL) {
  +
  +            /* first iteration: try resolve from already loaded libraries */
  +            for (j = 0; pth_syscall_lib_tab[j].path != NULL; j++) {
  +                if (pth_syscall_lib_tab[j].handle != NULL) {
  +                    pth_syscall_fct_tab[i].addr = (pth_syscall_fct_t)
  +                        dlsym(pth_syscall_lib_tab[j].handle,
  +                              pth_syscall_fct_tab[i].name);
  +                    if (pth_syscall_fct_tab[i].addr != NULL)
  +                        break;
  +                }
  +            }
  +
  +            /* second iteration: try to load more libraries for resolving */
  +            if (pth_syscall_fct_tab[i].addr == NULL) {
  +                for (j = 0; pth_syscall_lib_tab[j].path != NULL; j++) {
  +                    if (pth_syscall_lib_tab[j].handle == NULL) {
  +                        if ((pth_syscall_lib_tab[j].handle =
  +                             dlopen(pth_syscall_lib_tab[j].path, RTLD_LAZY)) == NULL)
  +                            continue;
  +                        pth_syscall_fct_tab[i].addr = (pth_syscall_fct_t)
  +                            dlsym(pth_syscall_lib_tab[j].handle,
  +                                  pth_syscall_fct_tab[i].name);
  +                        if (pth_syscall_fct_tab[i].addr != NULL)
  +                            break;
  +                    }
  +                }
  +            }
  +        }
  +    }
  +#endif
  +#endif
  +    return;
  +}
  +
  +/* syscall wrapping initialization */
  +intern void pth_syscall_kill(void)
  +{
  +#if PTH_SYSCALL_HARD
  +    int i;
  +
  +#if defined(HAVE_DLOPEN) && defined(HAVE_DLSYM)
  +    /* unload all explicitly loaded libraries */
  +    for (i = 0; pth_syscall_lib_tab[i].path != NULL; i++) {
  +        if (pth_syscall_lib_tab[i].handle != NULL) {
  +            dlclose(pth_syscall_lib_tab[i].handle);
  +            pth_syscall_lib_tab[i].handle = NULL;
  +        }
  +        pth_syscall_lib_tab[i].path = NULL;
  +    }
  +#endif
  +    free(pth_syscall_libs);
  +    pth_syscall_libs = NULL;
  +#endif
  +    return;
  +}
  +
  +#if PTH_SYSCALL_HARD
  +
  +/* utility macro for returning syscall errors */
  +#define PTH_SYSCALL_ERROR(return_val,errno_val,syscall) \
  +    do { fprintf(stderr, \
  +                 "pth:WARNING: unable to perform syscall `%s': " \
  +                 "no implementation resolvable\n", syscall); \
  +         errno = (errno_val); \
  +         return (return_val); \
  +    } while (0)
  +
  +/* ==== Pth hard syscall wrapper for fork(2) ==== */
   pid_t fork(void)
   {
  +    /* external entry point for application */
       pth_implicit_init();
       return pth_fork();
   }
  +intern pid_t pth_sc_fork(void)
  +{
  +    /* internal exit point for Pth */
  +    if (pth_syscall_fct_tab[PTH_SCF_fork].addr != NULL)
  +        return ((pid_t (*)(void))
  +               pth_syscall_fct_tab[PTH_SCF_fork].addr)
  +               ();
  +#if defined(HAVE_SYSCALL) && defined(SYS_fork)
  +    else return (pid_t)syscall(SYS_fork);
  +#else
  +    else PTH_SYSCALL_ERROR(-1, ENOSYS, "fork");
   #endif
  +}
   
  -/* Pth hard wrapper for sleep(3) [internally fully emulated] */
  -#if PTH_SYSCALL_HARD
  +/* ==== Pth hard syscall wrapper for sleep(3) ==== */
   unsigned int sleep(unsigned int sec)
   {
  +    /* external entry point for application */
       pth_implicit_init();
       return pth_sleep(sec);
   }
  -#endif
  +/* NOTICE: internally fully emulated, so still no
  +   internal exit point pth_sc_sleep necessary! */
   
  -/* Pth hard wrapper for system(3) [internally fully emulated] */
  -#if PTH_SYSCALL_HARD
  +/* ==== Pth hard syscall wrapper for system(3) ==== */
   int system(const char *cmd)
   {
  +    /* external entry point for application */
       pth_implicit_init();
       return pth_system(cmd);
   }
  -#endif
  +/* NOTICE: internally fully emulated, so still no
  +   internal exit point pth_sc_system necessary! */
   
  -/* Pth hard wrapper for sigprocmask(2) */
  -#if cpp
  -#if defined(SYS_sigprocmask)
  -#define PTH_SC_sigprocmask(a1,a2,a3) ((int)syscall(SYS_sigprocmask,(a1),(a2),(a3)))
  -#else
  -#define PTH_SC_sigprocmask sigprocmask
  -#endif
  -#endif /* cpp */
  -#if PTH_SYSCALL_HARD && defined(SYS_sigprocmask)
  +/* ==== Pth hard syscall wrapper for sigprocmask(2) ==== */
   int sigprocmask(int how, const sigset_t *set, sigset_t *oset)
   {
  +    /* external entry point for application */
       pth_implicit_init();
       return pth_sigmask(how, set, oset);
   }
  +intern int pth_sc_sigprocmask(int how, const sigset_t *set, sigset_t *oset)
  +{
  +    /* internal exit point for Pth */
  +    if (pth_syscall_fct_tab[PTH_SCF_sigprocmask].addr != NULL)
  +        return ((int (*)(int, const sigset_t *, sigset_t *))
  +               pth_syscall_fct_tab[PTH_SCF_sigprocmask].addr)
  +               (how, set, oset);
  +#if defined(HAVE_SYSCALL) && defined(SYS_sigprocmask)
  +    else return (int)syscall(SYS_sigprocmask, how, set, oset);
  +#else
  +    else PTH_SYSCALL_ERROR(-1, ENOSYS, "sigprocmask");
   #endif
  +}
   
  -/* Pth hard wrapper for sigwait(3) [internally fully emulated] */
  -#if PTH_SYSCALL_HARD
  +/* ==== Pth hard syscall wrapper for sigwait(3) ==== */
   int sigwait(const sigset_t *set, int *sigp)
   {
  +    /* external entry point for application */
       pth_implicit_init();
       return pth_sigwait(set, sigp);
   }
  -#endif
  +/* NOTICE: internally fully emulated, so still no
  +   internal exit point pth_sc_sigwait necessary! */
   
  -/* Pth hard wrapper for syscall waitpid(2) */
  -#if cpp
  -#if defined(SYS_waitpid)
  -#define PTH_SC_waitpid(a1,a2,a3) ((int)syscall(SYS_waitpid,(a1),(a2),(a3)))
  -#else
  -#define PTH_SC_waitpid waitpid
  -#endif
  -#endif /* cpp */
  -#if PTH_SYSCALL_HARD && defined(SYS_waitpid)
  +/* ==== Pth hard syscall wrapper for waitpid(2) ==== */
   pid_t waitpid(pid_t wpid, int *status, int options)
   {
  +    /* external entry point for application */
       pth_implicit_init();
       return pth_waitpid(wpid, status, options);
   }
  -#endif
  -
  -#if defined(SYS_socketcall) && defined(SOCKOP_connect) && defined(SOCKOP_accept) /* mainly Linux */
  -intern int _pth_socketcall(int call, ...)
  +intern pid_t pth_sc_waitpid(pid_t wpid, int *status, int options)
   {
  -    va_list ap;
  -    unsigned long args[3];
  -
  -    va_start(ap, call);
  -    switch (call) {
  -        case SOCKOP_connect:
  -            args[0] = (unsigned long)va_arg(ap, int);
  -            args[1] = (unsigned long)va_arg(ap, struct sockaddr *);
  -            args[2] = (unsigned long)va_arg(ap, int);
  -            break;
  -        case SOCKOP_accept:
  -            args[0] = (unsigned long)va_arg(ap, int);
  -            args[1] = (unsigned long)va_arg(ap, struct sockaddr *);
  -            args[2] = (unsigned long)va_arg(ap, int *);
  -            break;
  -    }
  -    va_end(ap);
  -    return syscall(SYS_socketcall, call, args);
  -}
  -#endif
  -
  -/* Pth hard wrapper for syscall connect(2) */
  -#if cpp
  -#if defined(SYS_connect)
  -#define PTH_SC_connect(a1,a2,a3) ((int)syscall(SYS_connect,(a1),(a2),(a3)))
  -#elif defined(SYS_socketcall) && defined(SOCKOP_connect) /* mainly Linux */
  -#define PTH_SC_connect(a1,a2,a3) ((int)_pth_socketcall(SOCKOP_connect,(a1),(a2),(a3)))
  +    /* internal exit point for Pth */
  +    if (pth_syscall_fct_tab[PTH_SCF_waitpid].addr != NULL)
  +        return ((pid_t (*)(pid_t, int *, int))
  +               pth_syscall_fct_tab[PTH_SCF_waitpid].addr)
  +               (wpid, status, options);
  +#if defined(HAVE_SYSCALL) && defined(SYS_waitpid)
  +    else return (pid_t)syscall(SYS_waitpid, wpid, status, options);
   #else
  -#define PTH_SC_connect connect
  +    else PTH_SYSCALL_ERROR(-1, ENOSYS, "waitpid");
   #endif
  -#endif /* cpp */
  -#if PTH_SYSCALL_HARD &&\
  -    (defined(SYS_connect) || (defined(SYS_socketcall) && defined(SOCKOP_connect)))
  +}
  +
  +/* ==== Pth hard syscall wrapper for connect(2) ==== */
   int connect(int s, const struct sockaddr *addr, socklen_t addrlen)
   {
  +    /* external entry point for application */
       pth_implicit_init();
       return pth_connect(s, addr, addrlen);
   }
  -#endif
  -
  -/* Pth hard wrapper for syscall accept(2) */
  -#if cpp
  -#if defined(SYS_accept)
  -#define PTH_SC_accept(a1,a2,a3) ((int)syscall(SYS_accept,(a1),(a2),(a3)))
  -#elif defined(SYS_socketcall) && defined(SOCKOP_accept) /* mainly Linux */
  -#define PTH_SC_accept(a1,a2,a3) ((int)_pth_socketcall(SOCKOP_accept,(a1),(a2),(a3)))
  +intern int pth_sc_connect(int s, const struct sockaddr *addr, socklen_t addrlen)
  +{
  +    /* internal exit point for Pth */
  +    if (pth_syscall_fct_tab[PTH_SCF_connect].addr != NULL)
  +        return ((int (*)(int, const struct sockaddr *, socklen_t))
  +               pth_syscall_fct_tab[PTH_SCF_connect].addr)
  +               (s, addr, addrlen);
  +#if defined(HAVE_SYSCALL) && defined(SYS_connect)
  +    else return (int)syscall(SYS_connect, s, addr, addrlen);
  +#elif defined(HAVE_SYSCALL) && defined(SYS_socketcall) && defined(SOCKOP_connect)
  +    else {
  +        unsigned long args[3];
  +        args[0] = (unsigned long)s;
  +        args[1] = (unsigned long)addr;
  +        args[2] = (unsigned long)addrlen;
  +        return (int)syscall(SYS_socketcall, SOCKOP_connect, args);
  +    }
   #else
  -#define PTH_SC_accept accept
  +    else PTH_SYSCALL_ERROR(-1, ENOSYS, "connect");
   #endif
  -#endif /* cpp */
  -#if PTH_SYSCALL_HARD &&\
  -    (defined(SYS_accept) || (defined(SYS_socketcall) && defined(SOCKOP_accept)))
  +}
  +
  +/* ==== Pth hard syscall wrapper for accept(2) ==== */
   int accept(int s, struct sockaddr *addr, socklen_t *addrlen)
   {
  +    /* external entry point for application */
       pth_implicit_init();
       return pth_accept(s, addr, addrlen);
   }
  -#endif
  -
  -/* Pth hard wrapper for syscall select(2) */
  -#if cpp
  -#if defined(SYS__newselect) /* mainly Linux */
  -#define PTH_SC_select(a1,a2,a3,a4,a5) ((int)syscall(SYS__newselect,(a1),(a2),(a3),(a4),(a5)))
  -#elif defined(SYS_select)
  -#define PTH_SC_select(a1,a2,a3,a4,a5) ((int)syscall(SYS_select,(a1),(a2),(a3),(a4),(a5)))
  +intern int pth_sc_accept(int s, struct sockaddr *addr, socklen_t *addrlen)
  +{
  +    /* internal exit point for Pth */
  +    if (pth_syscall_fct_tab[PTH_SCF_accept].addr != NULL)
  +        return ((int (*)(int, struct sockaddr *, socklen_t *))
  +               pth_syscall_fct_tab[PTH_SCF_accept].addr)
  +               (s, addr, addrlen);
  +#if defined(HAVE_SYSCALL) && defined(SYS_accept)
  +    else return (int)syscall(SYS_accept, s, addr, addrlen);
  +#elif defined(HAVE_SYSCALL) && defined(SYS_socketcall) && defined(SOCKOP_accept)
  +    else {
  +        unsigned long args[3];
  +        args[0] = (unsigned long)s;
  +        args[1] = (unsigned long)addr;
  +        args[2] = (unsigned long)addrlen;
  +        return (int)syscall(SYS_socketcall, SOCKOP_accept, args);
  +    }
   #else
  -#define PTH_SC_select select
  +    else PTH_SYSCALL_ERROR(-1, ENOSYS, "accept");
   #endif
  -#endif /* cpp */
  -#if PTH_SYSCALL_HARD && (defined(SYS__newselect) || defined(SYS_select))
  +}
  +
  +/* ==== Pth hard syscall wrapper for select(2) ==== */
   int select(int nfds, fd_set *readfds, fd_set *writefds,
              fd_set *exceptfds, struct timeval *timeout)
   {
  +    /* external entry point for application */
       pth_implicit_init();
       return pth_select(nfds, readfds, writefds, exceptfds, timeout);
   }
  -#endif
  -
  -/* Pth hard wrapper for syscall poll(2) */
  -#if cpp
  -#if defined(SYS_poll)
  -#define PTH_SC_poll(a1,a2,a3) ((int)syscall(SYS_poll,(a1),(a2),(a3)))
  +intern int pth_sc_select(int nfds, fd_set *readfds, fd_set *writefds,
  +                         fd_set *exceptfds, struct timeval *timeout)
  +{
  +    /* internal exit point for Pth */
  +    if (pth_syscall_fct_tab[PTH_SCF_select].addr != NULL)
  +        return ((int (*)(int, fd_set *, fd_set *, fd_set *, struct timeval *))
  +               pth_syscall_fct_tab[PTH_SCF_select].addr)
  +               (nfds, readfds, writefds, exceptfds, timeout);
  +#if defined(HAVE_SYSCALL) && defined(SYS__newselect)
  +    else return (int)syscall(SYS__newselect, nfds, readfds, writefds, exceptfds, timeout);
  +#elif defined(HAVE_SYSCALL) && defined(SYS_select)
  +    else return (int)syscall(SYS_select, nfds, readfds, writefds, exceptfds, timeout);
   #else
  -#define PTH_SC_poll poll
  +    else PTH_SYSCALL_ERROR(-1, ENOSYS, "accept");
   #endif
  -#endif /* cpp */
  -#if PTH_SYSCALL_HARD && defined(SYS_poll)
  +}
  +
  +/* ==== Pth hard syscall wrapper for poll(2) ==== */
   int poll(struct pollfd *pfd, nfds_t nfd, int timeout)
   {
  +    /* external entry point for application */
       pth_implicit_init();
       return pth_poll(pfd, nfd, timeout);
   }
  -#endif
  +/* NOTICE: internally fully emulated, so still no
  +   internal exit point pth_sc_poll necessary! */
   
  -/* Pth hard wrapper for syscall read(2) */
  -#if cpp
  -#if defined(SYS_read)
  -#define PTH_SC_read(a1,a2,a3) ((ssize_t)syscall(SYS_read,(a1),(a2),(a3)))
  -#else
  -#define PTH_SC_read read
  -#endif
  -#endif /* cpp */
  -#if PTH_SYSCALL_HARD && defined(SYS_read)
  +/* ==== Pth hard syscall wrapper for read(2) ==== */
   ssize_t read(int fd, void *buf, size_t nbytes)
   {
  +    /* external entry point for application */
       pth_implicit_init();
       return pth_read(fd, buf, nbytes);
   }
  -#endif
  -
  -/* Pth hard wrapper for syscall write(2) */
  -#if cpp
  -#if defined(SYS_write)
  -#define PTH_SC_write(a1,a2,a3) ((ssize_t)syscall(SYS_write,(a1),(a2),(a3)))
  +intern ssize_t pth_sc_read(int fd, void *buf, size_t nbytes)
  +{
  +    /* internal exit point for Pth */
  +    if (pth_syscall_fct_tab[PTH_SCF_read].addr != NULL)
  +        return ((ssize_t (*)(int, void *, size_t))
  +               pth_syscall_fct_tab[PTH_SCF_read].addr)
  +               (fd, buf, nbytes);
  +#if defined(HAVE_SYSCALL) && defined(SYS_read)
  +    else return (ssize_t)syscall(SYS_read, fd, buf, nbytes);
   #else
  -#define PTH_SC_write write
  +    else PTH_SYSCALL_ERROR(-1, ENOSYS, "read");
   #endif
  -#endif /* cpp */
  -#if PTH_SYSCALL_HARD && defined(SYS_write)
  +}
  +
  +/* ==== Pth hard syscall wrapper for write(2) ==== */
   ssize_t write(int fd, const void *buf, size_t nbytes)
   {
  +    /* external entry point for application */
       pth_implicit_init();
       return pth_write(fd, buf, nbytes);
   }
  -#endif
  -
  -/* Pth hard wrapper for syscall readv(2) */
  -#if cpp
  -#if defined(SYS_readv)
  -#define PTH_SC_readv(a1,a2,a3) ((ssize_t)syscall(SYS_readv,(a1),(a2),(a3)))
  +intern ssize_t pth_sc_write(int fd, const void *buf, size_t nbytes)
  +{
  +    /* internal exit point for Pth */
  +    if (pth_syscall_fct_tab[PTH_SCF_write].addr != NULL)
  +        return ((ssize_t (*)(int, const void *, size_t))
  +               pth_syscall_fct_tab[PTH_SCF_write].addr)
  +               (fd, buf, nbytes);
  +#if defined(HAVE_SYSCALL) && defined(SYS_write)
  +    else return (ssize_t)syscall(SYS_write, fd, buf, nbytes);
   #else
  -#define PTH_SC_readv readv
  +    else PTH_SYSCALL_ERROR(-1, ENOSYS, "write");
   #endif
  -#endif /* cpp */
  -#if PTH_SYSCALL_HARD && defined(SYS_readv)
  +}
  +
  +/* ==== Pth hard syscall wrapper for readv(2) ==== */
   ssize_t readv(int fd, const struct iovec *iov, int iovcnt)
   {
  +    /* external entry point for application */
       pth_implicit_init();
       return pth_readv(fd, iov, iovcnt);
   }
  -#endif
  -
  -/* Pth hard wrapper for syscall writev(2) */
  -#if cpp
  -#if defined(SYS_writev)
  -#define PTH_SC_writev(a1,a2,a3) ((ssize_t)syscall(SYS_writev,(a1),(a2),(a3)))
  +intern ssize_t pth_sc_readv(int fd, const struct iovec *iov, int iovcnt)
  +{
  +    /* internal exit point for Pth */
  +    if (pth_syscall_fct_tab[PTH_SCF_readv].addr != NULL)
  +        return ((ssize_t (*)(int, const struct iovec *, int))
  +               pth_syscall_fct_tab[PTH_SCF_readv].addr)
  +               (fd, iov, iovcnt);
  +#if defined(HAVE_SYSCALL) && defined(SYS_readv)
  +    else return (ssize_t)syscall(SYS_readv, fd, iov, iovcnt);
   #else
  -#define PTH_SC_writev writev
  +    else PTH_SYSCALL_ERROR(-1, ENOSYS, "readv");
   #endif
  -#endif /* cpp */
  -#if PTH_SYSCALL_HARD && defined(SYS_writev)
  +}
  +
  +/* ==== Pth hard syscall wrapper for writev(2) ==== */
   ssize_t writev(int fd, const struct iovec *iov, int iovcnt)
   {
  +    /* external entry point for application */
       pth_implicit_init();
       return pth_writev(fd, iov, iovcnt);
   }
  +intern ssize_t pth_sc_writev(int fd, const struct iovec *iov, int iovcnt)
  +{
  +    /* internal exit point for Pth */
  +    if (pth_syscall_fct_tab[PTH_SCF_writev].addr != NULL)
  +        return ((ssize_t (*)(int, const struct iovec *, int))
  +               pth_syscall_fct_tab[PTH_SCF_writev].addr)
  +               (fd, iov, iovcnt);
  +#if defined(HAVE_SYSCALL) && defined(SYS_writev)
  +    else return (ssize_t)syscall(SYS_writev, fd, iov, iovcnt);
  +#else
  +    else PTH_SYSCALL_ERROR(-1, ENOSYS, "writev");
   #endif
  +}
   
  -/* Pth hard wrapper for pread(3) [internally fully emulated] */
  -#if PTH_SYSCALL_HARD
  +/* ==== Pth hard syscall wrapper for pread(2) ==== */
   ssize_t pread(int, void *, size_t, off_t);
   ssize_t pread(int fd, void *buf, size_t nbytes, off_t offset)
   {
  +    /* external entry point for application */
       pth_implicit_init();
       return pth_pread(fd, buf, nbytes, offset);
   }
  -#endif
  +/* NOTICE: internally fully emulated, so still no
  +   internal exit point pth_sc_pread necessary! */
   
  -/* Pth hard wrapper for pwrite(3) [internally fully emulated] */
  -#if PTH_SYSCALL_HARD
  +/* ==== Pth hard syscall wrapper for pwrite(2) ==== */
   ssize_t pwrite(int, const void *, size_t, off_t);
   ssize_t pwrite(int fd, const void *buf, size_t nbytes, off_t offset)
   {
  +    /* external entry point for application */
       pth_implicit_init();
       return pth_pwrite(fd, buf, nbytes, offset);
   }
  -#endif
  +/* NOTICE: internally fully emulated, so still no
  +   internal exit point pth_sc_pwrite necessary! */
   
  -/* Pth hard wrapper for syscall recvfrom(2) */
  -#if cpp
  -#if defined(SYS_recvfrom)
  -#define PTH_SC_recvfrom(a1,a2,a3,a4,a5,a6) ((ssize_t)syscall(SYS_recvfrom,(a1),(a2),(a3),(a4),(a5),(a6)))
  -#else
  -#define PTH_SC_recvfrom recvfrom
  -#endif
  -#endif /* cpp */
  -#if PTH_SYSCALL_HARD && defined(SYS_recvfrom)
  +/* ==== Pth hard syscall wrapper for recvfrom(2) ==== */
   ssize_t recvfrom(int fd, void *buf, size_t nbytes, int flags, struct sockaddr *from, socklen_t *fromlen)
   {
  +    /* external entry point for application */
       pth_implicit_init();
       return pth_recvfrom(fd, buf, nbytes, flags, from, fromlen);
   }
  -#endif
  -
  -/* Pth hard wrapper for syscall sendto(2) */
  -#if cpp
  -#if defined(SYS_sendto)
  -#define PTH_SC_sendto(a1,a2,a3,a4,a5,a6) ((ssize_t)syscall(SYS_sendto,(a1),(a2),(a3),(a4),(a5),(a6)))
  +intern ssize_t pth_sc_recvfrom(int fd, void *buf, size_t nbytes, int flags, struct sockaddr *from, socklen_t *fromlen)
  +{
  +    /* internal exit point for Pth */
  +    if (pth_syscall_fct_tab[PTH_SCF_recvfrom].addr != NULL)
  +        return ((ssize_t (*)(int, void *, size_t, int, struct sockaddr *, socklen_t *))
  +               pth_syscall_fct_tab[PTH_SCF_recvfrom].addr)
  +               (fd, buf, nbytes, flags, from, fromlen);
  +#if defined(HAVE_SYSCALL) && defined(SYS_recvfrom)
  +    else return (ssize_t)syscall(SYS_recvfrom, fd, buf, nbytes, flags, from, fromlen);
   #else
  -#define PTH_SC_sendto sendto
  +    else PTH_SYSCALL_ERROR(-1, ENOSYS, "recvfrom");
   #endif
  -#endif /* cpp */
  -#if PTH_SYSCALL_HARD && defined(SYS_sendto)
  +}
  +
  +/* ==== Pth hard syscall wrapper for sendto(2) ==== */
   ssize_t sendto(int fd, const void *buf, size_t nbytes, int flags, const struct sockaddr *to, socklen_t tolen)
   {
  +    /* external entry point for application */
       pth_implicit_init();
       return pth_sendto(fd, buf, nbytes, flags, to, tolen);
   }
  +intern ssize_t pth_sc_sendto(int fd, const void *buf, size_t nbytes, int flags, const struct sockaddr *to, socklen_t tolen)
  +{
  +    /* internal exit point for Pth */
  +    if (pth_syscall_fct_tab[PTH_SCF_sendto].addr != NULL)
  +        return ((ssize_t (*)(int, const void *, size_t, int, const struct sockaddr *, socklen_t))
  +               pth_syscall_fct_tab[PTH_SCF_recvfrom].addr)
  +               (fd, buf, nbytes, flags, to, tolen);
  +#if defined(HAVE_SYSCALL) && defined(SYS_sendto)
  +    else return (ssize_t)syscall(SYS_sendto, fd, buf, nbytes, flags, to, tolen);
  +#else
  +    else PTH_SYSCALL_ERROR(-1, ENOSYS, "sendto");
   #endif
  +}
  +
  +#endif /* PTH_SYSCALL_HARD */
   

From ossp-cvs-owner@ossp.org  Sun Oct 20 13:55:04 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D80C676605; Sun, 20 Oct 2002 13:55:03 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog NEWS
Message-Id: <20021020115503.D80C676605@mail.ossp.org>
Date: Sun, 20 Oct 2002 13:55:03 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Oct-2002 13:55:03
  Branch: HEAD                             Handle: 2002102012550300

  Modified files:
    ossp-pkg/pth            ChangeLog NEWS

  Log:
    cleanups and updates

  Summary:
    Revision    Changes     Path
    1.572       +1  -1      ossp-pkg/pth/ChangeLog
    1.33        +8  -0      ossp-pkg/pth/NEWS
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.571 -r1.572 ChangeLog
  --- ossp-pkg/pth/ChangeLog	20 Oct 2002 11:45:10 -0000	1.571
  +++ ossp-pkg/pth/ChangeLog	20 Oct 2002 11:55:03 -0000	1.572
  @@ -19,7 +19,7 @@
       | |_ ___) |
     __|_(_)____/____________________________________________________________
   
  -  Changes between 1.4.1 and 1.5.0 (27-Jan-2002 to xx-Sep-2002)
  +  Changes between 1.4.1 and 1.5.0 (27-Jan-2002 to xx-Oct-2002)
   
      *) Completely rewrote the "hard syscall mapping". 
   
  Index: ossp-pkg/pth/NEWS
  ============================================================
  $ cvs diff -u -r1.32 -r1.33 NEWS
  --- ossp-pkg/pth/NEWS	24 Mar 2001 16:31:50 -0000	1.32
  +++ ossp-pkg/pth/NEWS	20 Oct 2002 11:55:03 -0000	1.33
  @@ -12,6 +12,14 @@
     This is a list of user-visible and/or major changes to GNU Pth.
     For more details please have a look at the ChangeLog file.
   
  +  Changes between 1.4 and 1.5 (24-Mar-2001 to xx-Oct-2002)
  +
  +   *) Completely rewrote the "hard syscall mapping". 
  +   *) Added support to pth_poll(3) for POLLD{RD,WR}{NORM,BAND}.
  +   *) Fixed a long-standing termination bug in pth_exit(3).
  +   *) Upgraded to Autoconf 2.54 environment.
  +   *) Add optional support for OSSP ex based exception handling.
  +
     Changes between 1.3 and 1.4 (19-Feb-2000 to 24-Mar-2001)
   
      *) Support for non-standard but required <sys/select.h> header

From ossp-cvs-owner@ossp.org  Sun Oct 20 14:12:22 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5432D76A1D; Sun, 20 Oct 2002 14:12:22 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth pth_syscall.c
Message-Id: <20021020121222.5432D76A1D@mail.ossp.org>
Date: Sun, 20 Oct 2002 14:12:22 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Oct-2002 14:12:22
  Branch: HEAD                             Handle: 2002102013122100

  Modified files:
    ossp-pkg/pth            pth_syscall.c

  Log:
    ops, remove extra wrapper which breaks under --disable-syscall-hard

  Summary:
    Revision    Changes     Path
    1.24        +0  -2      ossp-pkg/pth/pth_syscall.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/pth_syscall.c
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 pth_syscall.c
  --- ossp-pkg/pth/pth_syscall.c	20 Oct 2002 11:45:10 -0000	1.23
  +++ ossp-pkg/pth/pth_syscall.c	20 Oct 2002 12:12:21 -0000	1.24
  @@ -51,7 +51,6 @@
   
   /* internal data structures */
   #if cpp
  -#if PTH_SYSCALL_HARD
   typedef int (*pth_syscall_fct_t)();
   typedef struct {
       char             *name;    /* name of system/function call */
  @@ -61,7 +60,6 @@
       char             *path;    /* path to dynamic library */
       void             *handle;  /* handle of dynamic library */
   } pth_syscall_lib_tab_t;
  -#endif
   #endif
   
   #if PTH_SYSCALL_HARD

From ossp-cvs-owner@ossp.org  Sun Oct 20 15:49:29 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AA65576605; Sun, 20 Oct 2002 15:49:29 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog THANKS aclocal.m4 configure.ac
Message-Id: <20021020134929.AA65576605@mail.ossp.org>
Date: Sun, 20 Oct 2002 15:49:29 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Oct-2002 15:49:29
  Branch: HEAD                             Handle: 2002102014492801

  Modified files:
    ossp-pkg/pth            ChangeLog THANKS aclocal.m4 configure.ac

  Log:
    Add Autoconf support for brain-dead GNU Hurd.
    
    Submitted by: B. Douglas Hilton <doug.hilton@engineer.com>

  Summary:
    Revision    Changes     Path
    1.573       +3  -0      ossp-pkg/pth/ChangeLog
    1.88        +1  -0      ossp-pkg/pth/THANKS
    1.97        +5  -0      ossp-pkg/pth/aclocal.m4
    1.7         +7  -0      ossp-pkg/pth/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.572 -r1.573 ChangeLog
  --- ossp-pkg/pth/ChangeLog	20 Oct 2002 11:55:03 -0000	1.572
  +++ ossp-pkg/pth/ChangeLog	20 Oct 2002 13:49:28 -0000	1.573
  @@ -21,6 +21,9 @@
   
     Changes between 1.4.1 and 1.5.0 (27-Jan-2002 to xx-Oct-2002)
   
  +   *) Add Autoconf support for GNU Hurd.
  +      [B. Douglas Hilton <doug.hilton@engineer.com>]
  +
      *) Completely rewrote the "hard syscall mapping". 
   
         Previously the internal syscall exit points were based on syscall(2)
  Index: ossp-pkg/pth/THANKS
  ============================================================
  $ cvs diff -u -r1.87 -r1.88 THANKS
  --- ossp-pkg/pth/THANKS	15 Oct 2002 21:15:38 -0000	1.87
  +++ ossp-pkg/pth/THANKS	20 Oct 2002 13:49:29 -0000	1.88
  @@ -41,6 +41,7 @@
       o  Eric Hanchrow               <offby1@blarg.net>
       o  Ben Harris                  <bjh21@cam.ac.uk>
       o  Tim Harris                  <tim_harris@snellwilcox.com>
  +    o  B. Douglas Hilton           <doug.hilton@engineer.com>
       o  Barnett Hsu                 <barnett@cs.ucr.edu>
       o  Jarkko Hietaniemi           <jhi@iki.fi>
       o  David Hill                  <david@wmol.com>
  Index: ossp-pkg/pth/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.96 -r1.97 aclocal.m4
  --- ossp-pkg/pth/aclocal.m4	15 Oct 2002 20:34:22 -0000	1.96
  +++ ossp-pkg/pth/aclocal.m4	20 Oct 2002 13:49:29 -0000	1.97
  @@ -1087,6 +1087,11 @@
               no  ) ac_cv_check_sjlj=ssjlj  ;;
           esac
           ;;
  +    *86-*-gnu0* )
  +        #   GNU/Hurd is similar to linux 2.0 in that it has
  +        #   non-functional stubs for sigstack and sigaltstack.
  +        ac_cv_check_sjlj=sjljlx
  +        ;;
       *-*-isc* )
           ac_cv_check_sjlj=sjljisc
           ;;
  Index: ossp-pkg/pth/configure.ac
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 configure.ac
  --- ossp-pkg/pth/configure.ac	20 Oct 2002 11:45:10 -0000	1.6
  +++ ossp-pkg/pth/configure.ac	20 Oct 2002 13:49:29 -0000	1.7
  @@ -400,6 +400,13 @@
   fi
   AC_SUBST(PTH_STACK_GROWTH)
   
  +dnl #  GNU Hurd has a broken libc which has stubs for sigaltstack and
  +dnl #  sigstack. When the following Autoconf checks for them are run, it
  +dnl #  even crashes the system. So we have to disable these checks here.
  +case $PLATFORM in
  +    *86-*-gnu0* ) ac_cv_func_sigaltstack="no"; ac_cv_func_sigstack="no" ;;
  +esac
  +
   dnl #  how to specify stacks for the various functions
   AC_CHECK_STACKSETUP(makecontext, pth_skaddr_makecontext, pth_sksize_makecontext)
   AC_CHECK_STACKSETUP(sigaltstack, pth_skaddr_sigaltstack, pth_sksize_sigaltstack)

From ossp-cvs-owner@ossp.org  Sun Oct 20 18:10:39 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EB00876A14; Sun, 20 Oct 2002 18:10:38 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth pth_high.c
Message-Id: <20021020161038.EB00876A14@mail.ossp.org>
Date: Sun, 20 Oct 2002 18:10:38 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Oct-2002 18:10:38
  Branch: HEAD                             Handle: 2002102017103800

  Modified files:
    ossp-pkg/pth            pth_high.c

  Log:
    fix left-over from cut & paste

  Summary:
    Revision    Changes     Path
    1.86        +1  -1      ossp-pkg/pth/pth_high.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/pth_high.c
  ============================================================
  $ cvs diff -u -r1.85 -r1.86 pth_high.c
  --- ossp-pkg/pth/pth_high.c	15 Oct 2002 21:14:27 -0000	1.85
  +++ ossp-pkg/pth/pth_high.c	20 Oct 2002 16:10:38 -0000	1.86
  @@ -362,7 +362,7 @@
       return rc;
   }
   
  -/* Pth variant of select(2) */
  +/* Pth variant of poll(2) */
   int pth_poll(struct pollfd *pfd, nfds_t nfd, int timeout)
   {
       return pth_poll_ev(pfd, nfd, timeout, NULL);

From ossp-cvs-owner@ossp.org  Sun Oct 20 18:19:40 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 282CC76605; Sun, 20 Oct 2002 18:19:40 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog pth_high.c
Message-Id: <20021020161940.282CC76605@mail.ossp.org>
Date: Sun, 20 Oct 2002 18:19:40 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Oct-2002 18:19:40
  Branch: HEAD                             Handle: 2002102017193900

  Modified files:
    ossp-pkg/pth            ChangeLog pth_high.c

  Log:
    Changes three direct sigprocmask(2) calls with the
    corresponding "hard syscall mapping" macro calls.
    
    Submitted by: Nick Hudson <skrll@netbsd.org>

  Summary:
    Revision    Changes     Path
    1.574       +4  -0      ossp-pkg/pth/ChangeLog
    1.87        +3  -3      ossp-pkg/pth/pth_high.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.573 -r1.574 ChangeLog
  --- ossp-pkg/pth/ChangeLog	20 Oct 2002 13:49:28 -0000	1.573
  +++ ossp-pkg/pth/ChangeLog	20 Oct 2002 16:19:39 -0000	1.574
  @@ -21,6 +21,10 @@
   
     Changes between 1.4.1 and 1.5.0 (27-Jan-2002 to xx-Oct-2002)
   
  +   *) Changes three direct sigprocmask(2) calls with the corresponding
  +      "hard syscall mapping" macro calls.
  +      [Nick Hudson <skrll@netbsd.org>]
  +
      *) Add Autoconf support for GNU Hurd.
         [B. Douglas Hilton <doug.hilton@engineer.com>]
   
  Index: ossp-pkg/pth/pth_high.c
  ============================================================
  $ cvs diff -u -r1.86 -r1.87 pth_high.c
  --- ossp-pkg/pth/pth_high.c	20 Oct 2002 16:10:38 -0000	1.86
  +++ ossp-pkg/pth/pth_high.c	20 Oct 2002 16:19:39 -0000	1.87
  @@ -195,7 +195,7 @@
       /* block SIGCHLD signal */
       sigemptyset(&ss_block);
       sigaddset(&ss_block, SIGCHLD);
  -    sigprocmask(SIG_BLOCK, &ss_block, &ss_old);
  +    pth_sc(sigprocmask)(SIG_BLOCK, &ss_block, &ss_old);
   
       /* fork the current process */
       pstat = -1;
  @@ -207,7 +207,7 @@
               /* restore original signal dispositions and execute the command */
               sigaction(SIGINT,  &sa_int,  NULL);
               sigaction(SIGQUIT, &sa_quit, NULL);
  -            sigprocmask(SIG_SETMASK, &ss_old, NULL);
  +            pth_sc(sigprocmask)(SIG_SETMASK, &ss_old, NULL);
   
               /* stop the Pth scheduling */
               pth_scheduler_kill();
  @@ -227,7 +227,7 @@
       /* restore original signal dispositions and execute the command */
       sigaction(SIGINT,  &sa_int,  NULL);
       sigaction(SIGQUIT, &sa_quit, NULL);
  -    sigprocmask(SIG_SETMASK, &ss_old, NULL);
  +    pth_sc(sigprocmask)(SIG_SETMASK, &ss_old, NULL);
   
       /* return error or child process result code */
       return (pid == -1 ? -1 : pstat);

From ossp-cvs-owner@ossp.org  Sun Oct 20 18:22:03 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8FB4D76605; Sun, 20 Oct 2002 18:22:03 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog pth_syscall.c
Message-Id: <20021020162203.8FB4D76605@mail.ossp.org>
Date: Sun, 20 Oct 2002 18:22:03 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Oct-2002 18:22:03
  Branch: HEAD                             Handle: 2002102017220300

  Modified files:
    ossp-pkg/pth            ChangeLog pth_syscall.c

  Log:
    Added "hard syscall mapping" support for using
    SYS___sigprocmask14 instead of SYS_sigprocmask on NetBSD.
    
    Submitted by: Nick Hudson <skrll@netbsd.org>

  Summary:
    Revision    Changes     Path
    1.575       +4  -0      ossp-pkg/pth/ChangeLog
    1.25        +6  -4      ossp-pkg/pth/pth_syscall.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.574 -r1.575 ChangeLog
  --- ossp-pkg/pth/ChangeLog	20 Oct 2002 16:19:39 -0000	1.574
  +++ ossp-pkg/pth/ChangeLog	20 Oct 2002 16:22:03 -0000	1.575
  @@ -21,6 +21,10 @@
   
     Changes between 1.4.1 and 1.5.0 (27-Jan-2002 to xx-Oct-2002)
   
  +   *) Added "hard syscall mapping" support for using 
  +      SYS___sigprocmask14 instead of SYS_sigprocmask on NetBSD.
  +      [Nick Hudson <skrll@netbsd.org>]
  +
      *) Changes three direct sigprocmask(2) calls with the corresponding
         "hard syscall mapping" macro calls.
         [Nick Hudson <skrll@netbsd.org>]
  Index: ossp-pkg/pth/pth_syscall.c
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 pth_syscall.c
  --- ossp-pkg/pth/pth_syscall.c	20 Oct 2002 12:12:21 -0000	1.24
  +++ ossp-pkg/pth/pth_syscall.c	20 Oct 2002 16:22:03 -0000	1.25
  @@ -278,7 +278,9 @@
           return ((int (*)(int, const sigset_t *, sigset_t *))
                  pth_syscall_fct_tab[PTH_SCF_sigprocmask].addr)
                  (how, set, oset);
  -#if defined(HAVE_SYSCALL) && defined(SYS_sigprocmask)
  +#if defined(HAVE_SYSCALL) && defined(SYS___sigprocmask14) /* NetBSD */
  +    else return (int)syscall(SYS___sigprocmask14, how, set, oset);
  +#elif defined(HAVE_SYSCALL) && defined(SYS_sigprocmask)
       else return (int)syscall(SYS_sigprocmask, how, set, oset);
   #else
       else PTH_SYSCALL_ERROR(-1, ENOSYS, "sigprocmask");
  @@ -332,7 +334,7 @@
                  (s, addr, addrlen);
   #if defined(HAVE_SYSCALL) && defined(SYS_connect)
       else return (int)syscall(SYS_connect, s, addr, addrlen);
  -#elif defined(HAVE_SYSCALL) && defined(SYS_socketcall) && defined(SOCKOP_connect)
  +#elif defined(HAVE_SYSCALL) && defined(SYS_socketcall) && defined(SOCKOP_connect) /* Linux */
       else {
           unsigned long args[3];
           args[0] = (unsigned long)s;
  @@ -361,7 +363,7 @@
                  (s, addr, addrlen);
   #if defined(HAVE_SYSCALL) && defined(SYS_accept)
       else return (int)syscall(SYS_accept, s, addr, addrlen);
  -#elif defined(HAVE_SYSCALL) && defined(SYS_socketcall) && defined(SOCKOP_accept)
  +#elif defined(HAVE_SYSCALL) && defined(SYS_socketcall) && defined(SOCKOP_accept) /* Linux */
       else {
           unsigned long args[3];
           args[0] = (unsigned long)s;
  @@ -390,7 +392,7 @@
           return ((int (*)(int, fd_set *, fd_set *, fd_set *, struct timeval *))
                  pth_syscall_fct_tab[PTH_SCF_select].addr)
                  (nfds, readfds, writefds, exceptfds, timeout);
  -#if defined(HAVE_SYSCALL) && defined(SYS__newselect)
  +#if defined(HAVE_SYSCALL) && defined(SYS__newselect) /* Linux */
       else return (int)syscall(SYS__newselect, nfds, readfds, writefds, exceptfds, timeout);
   #elif defined(HAVE_SYSCALL) && defined(SYS_select)
       else return (int)syscall(SYS_select, nfds, readfds, writefds, exceptfds, timeout);

From ossp-cvs-owner@ossp.org  Sun Oct 20 19:49:04 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5FD8976605; Sun, 20 Oct 2002 19:49:04 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth pth_high.c
Message-Id: <20021020174904.5FD8976605@mail.ossp.org>
Date: Sun, 20 Oct 2002 19:49:04 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Oct-2002 19:49:04
  Branch: HEAD                             Handle: 2002102018490300

  Modified files:
    ossp-pkg/pth            pth_high.c

  Log:
    add extra sanity check for nfds in pth_select

  Summary:
    Revision    Changes     Path
    1.88        +4  -0      ossp-pkg/pth/pth_high.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/pth_high.c
  ============================================================
  $ cvs diff -u -r1.87 -r1.88 pth_high.c
  --- ossp-pkg/pth/pth_high.c	20 Oct 2002 16:19:39 -0000	1.87
  +++ ossp-pkg/pth/pth_high.c	20 Oct 2002 17:49:03 -0000	1.88
  @@ -258,6 +258,10 @@
       pth_implicit_init();
       pth_debug2("pth_select_ev: called from thread \"%s\"", pth_current->name);
   
  +    /* sanity checking */
  +    if (!pth_util_fd_valid(nfd-1))
  +        return_errno(-1, EINVAL);
  +
       /* first deal with the special situation of a plain microsecond delay */
       if (nfd == 0 && rfds == NULL && wfds == NULL && efds == NULL && timeout != NULL) {
           if (timeout->tv_sec < 0 || timeout->tv_usec < 0)

From ossp-cvs-owner@ossp.org  Sun Oct 20 19:52:28 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EA53176605; Sun, 20 Oct 2002 19:52:27 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth THANKS
Message-Id: <20021020175227.EA53176605@mail.ossp.org>
Date: Sun, 20 Oct 2002 19:52:27 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Oct-2002 19:52:27
  Branch: HEAD                             Handle: 2002102018522700

  Modified files:
    ossp-pkg/pth            THANKS

  Log:
    give proper credit

  Summary:
    Revision    Changes     Path
    1.89        +2  -1      ossp-pkg/pth/THANKS
  ____________________________________________________________________________

  Index: ossp-pkg/pth/THANKS
  ============================================================
  $ cvs diff -u -r1.88 -r1.89 THANKS
  --- ossp-pkg/pth/THANKS	20 Oct 2002 13:49:29 -0000	1.88
  +++ ossp-pkg/pth/THANKS	20 Oct 2002 17:52:27 -0000	1.89
  @@ -42,7 +42,6 @@
       o  Ben Harris                  <bjh21@cam.ac.uk>
       o  Tim Harris                  <tim_harris@snellwilcox.com>
       o  B. Douglas Hilton           <doug.hilton@engineer.com>
  -    o  Barnett Hsu                 <barnett@cs.ucr.edu>
       o  Jarkko Hietaniemi           <jhi@iki.fi>
       o  David Hill                  <david@wmol.com>
       o  Michael Holzapfel           <michael@Harz.ime.rwth-aachen.de>
  @@ -50,6 +49,8 @@
       o  Roman Hodek                 <Roman.Hodek@informatik.uni-erlangen.de>
       o  Thomas Hoffmann             <hoffmann@ehmgs2.et.tu-dresden.de>
       o  Samuel A Horwitz            <horwitz@argoscomp.com>
  +    o  Barnett Hsu                 <barnett@cs.ucr.edu>
  +    o  Nick Hudson                 <skrll@netbsd.org>
       o  Andrew Hunter               <esvce@dcs.warwick.ac.uk>
       o  Takashi Ishihara            <tishihara@ucdavis.edu>
       o  Jim Jagielski               <jim@jaguNET.com>

From ossp-cvs-owner@ossp.org  Mon Oct 21 11:45:42 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5392776AE6; Mon, 21 Oct 2002 11:45:42 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT shiela.cfg
Message-Id: <20021021094542.5392776AE6@mail.ossp.org>
Date: Mon, 21 Oct 2002 11:45:42 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: CVSROOT                          Date:   21-Oct-2002 11:45:42
  Branch: HEAD                             Handle: 2002102110454100

  Modified files:
    CVSROOT                 shiela.cfg

  Log:
    Add import and other administration permissions for development members.

  Summary:
    Revision    Changes     Path
    1.30        +1  -1      CVSROOT/shiela.cfg
  ____________________________________________________________________________

  Index: CVSROOT/shiela.cfg
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 shiela.cfg
  --- CVSROOT/shiela.cfg	7 Oct 2002 14:05:10 -0000	1.29
  +++ CVSROOT/shiela.cfg	21 Oct 2002 09:45:41 -0000	1.30
  @@ -66,7 +66,7 @@
       Modules {
           Module CVSROOT "CVS Administrative Files" {
               Acl modules *:core *:devel *:contrib;
  -            Acl *       *:core;
  +            Acl *       *:core *:devel;
               Log passwd  none;
               Log modules mail.diff:ossp-cvs@ossp.org 
                           mail.diff:ossp-core@ossp.org file:CVSLOGS/CVSROOT;

From ossp-cvs-owner@ossp.org  Mon Oct 21 11:55:31 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3E01876A74; Mon, 21 Oct 2002 11:55:31 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT shiela.cfg
Message-Id: <20021021095531.3E01876A74@mail.ossp.org>
Date: Mon, 21 Oct 2002 11:55:31 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: CVSROOT                          Date:   21-Oct-2002 11:55:31
  Branch: HEAD                             Handle: 2002102110553000

  Modified files:
    CVSROOT                 shiela.cfg

  Log:
    Add administration permissions for development users.

  Summary:
    Revision    Changes     Path
    1.32        +3  -2      CVSROOT/shiela.cfg
  ____________________________________________________________________________

  Index: CVSROOT/shiela.cfg
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 shiela.cfg
  --- CVSROOT/shiela.cfg	21 Oct 2002 09:49:17 -0000	1.31
  +++ CVSROOT/shiela.cfg	21 Oct 2002 09:55:30 -0000	1.32
  @@ -74,9 +74,10 @@
                           mail.diff:ossp-core@ossp.org file:CVSLOGS/CVSROOT;
           };
           Module ossp-adm "OSSP Project Administration" {
  -            Acl *        *:core;
  +            Acl *        *:core *:devel;
               Log *:VENDOR mail.url:ossp-core@ossp.org  file:CVSLOGS/ossp-adm;
  -            Log *        mail.diff:ossp-core@ossp.org file:CVSLOGS/ossp-adm;
  +            Log *        mail.diff:ossp-cvs@ossp.org
  +                         mail.diff:ossp-core@ossp.org file:CVSLOGS/ossp-adm;
           };
           Module ossp-srv "OSSP Server Platform" {
               Acl *:VENDOR *:core *:devel;

From ossp-cvs-owner@ossp.org  Mon Oct 21 14:45:56 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BC2C676A74; Mon, 21 Oct 2002 14:45:55 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.c
Message-Id: <20021021124555.BC2C676A74@mail.ossp.org>
Date: Mon, 21 Oct 2002 14:45:55 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   21-Oct-2002 14:45:55
  Branch: HEAD                             Handle: 2002102113455500

  Modified files:
    ossp-pkg/fsl            fsl.c

  Log:
    Fixed problem reported by martin.konold@erfrakon.de:
    In fsl's vsyslog() when handling delayed open and
    "If the log file is not writable by fsl the application
    using fsl segfaults." The error condition was checked
    and logged but operation unintentionally continued.

  Summary:
    Revision    Changes     Path
    1.51        +1  -0      ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.50 -r1.51 fsl.c
  --- ossp-pkg/fsl/fsl.c	2 Aug 2002 11:40:00 -0000	1.50
  +++ ossp-pkg/fsl/fsl.c	21 Oct 2002 12:45:55 -0000	1.51
  @@ -883,6 +883,7 @@
           if ((l2rv = l2_channel_open(ctx.l2_nch)) != L2_OK) {
               cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "vsyslog: logging failed to open channel stream %s(%d) delayed", cp, l2rv);
               closelog();
  +            return;
           }
           fsldebug(L2_LEVEL_TRACE, "vsyslog: logging succeeded to open channel stream delayed");
           ctx.delayopen = FALSE;

From ossp-cvs-owner@ossp.org  Mon Oct 21 14:51:24 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E87AD76A70; Mon, 21 Oct 2002 14:51:23 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl README fsl.c fsl_version.c
Message-Id: <20021021125123.E87AD76A70@mail.ossp.org>
Date: Mon, 21 Oct 2002 14:51:23 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   21-Oct-2002 14:51:23
  Branch: HEAD                             Handle: 2002102113512300

  Modified files:
    ossp-pkg/fsl            README fsl.c fsl_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.24        +1  -1      ossp-pkg/fsl/README
    1.52        +1  -1      ossp-pkg/fsl/fsl.c
    1.9         +9  -9      ossp-pkg/fsl/fsl_version.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/README
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 README
  --- ossp-pkg/fsl/README	7 Sep 2002 20:12:49 -0000	1.23
  +++ ossp-pkg/fsl/README	21 Oct 2002 12:51:23 -0000	1.24
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_| |___/_|
    
     OSSP fsl - Faking/Flexible Syslog Library
  -  Version 1.0.3 (07-Sep-2002)
  +  Version 1.0.4 (21-Oct-2002)
   
     ABSTRACT
   
  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.51 -r1.52 fsl.c
  --- ossp-pkg/fsl/fsl.c	21 Oct 2002 12:45:55 -0000	1.51
  +++ ossp-pkg/fsl/fsl.c	21 Oct 2002 12:51:23 -0000	1.52
  @@ -798,7 +798,7 @@
           free(cpISF);
       if (cpIdent != NULL)
           free(cpIdent);
  -#if 0 /* FIXME */
  +#if 1 /* FIXME */
       if (cfg != NULL)
           if ((cfgrv = cfg_destroy(cfg)) != CFG_OK) {
               (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_destroy() failed with error %s (%d)", cp, cfgrv); CU(1); }
  Index: ossp-pkg/fsl/fsl_version.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 fsl_version.c
  --- ossp-pkg/fsl/fsl_version.c	7 Sep 2002 20:12:49 -0000	1.8
  +++ ossp-pkg/fsl/fsl_version.c	21 Oct 2002 12:51:23 -0000	1.9
  @@ -8,7 +8,7 @@
   #ifndef _FSL_VERSION_C_
   #define _FSL_VERSION_C_
   
  -#define FSL_VERSION 0x100203
  +#define FSL_VERSION 0x100204
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _FSL_VERSION_C_AS_HEADER_
   
   fsl_version_t fsl_version = {
  -    0x100203,
  -    "1.0.3",
  -    "1.0.3 (07-Sep-2002)",
  -    "This is OSSP fsl, Version 1.0.3 (07-Sep-2002)",
  -    "OSSP fsl 1.0.3 (07-Sep-2002)",
  -    "OSSP fsl/1.0.3",
  -    "@(#)OSSP fsl 1.0.3 (07-Sep-2002)",
  -    "$Id: fsl_version.c,v 1.8 2002/09/07 20:12:49 rse Exp $"
  +    0x100204,
  +    "1.0.4",
  +    "1.0.4 (21-Oct-2002)",
  +    "This is OSSP fsl, Version 1.0.4 (21-Oct-2002)",
  +    "OSSP fsl 1.0.4 (21-Oct-2002)",
  +    "OSSP fsl/1.0.4",
  +    "@(#)OSSP fsl 1.0.4 (21-Oct-2002)",
  +    "$Id: fsl_version.c,v 1.9 2002/10/21 12:51:23 thl Exp $"
   };
   
   #endif /* _FSL_VERSION_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Mon Oct 21 15:03:18 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BA5307642C; Mon, 21 Oct 2002 15:03:17 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl_version.c
Message-Id: <20021021130317.BA5307642C@mail.ossp.org>
Date: Mon, 21 Oct 2002 15:03:17 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   21-Oct-2002 15:03:17
  Branch: HEAD                             Handle: 2002102114031700

  Modified files:
    ossp-pkg/fsl            fsl_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.10        +0  -0      ossp-pkg/fsl/fsl_version.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl_version.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 fsl_version.c
  --- ossp-pkg/fsl/fsl_version.c	21 Oct 2002 12:51:23 -0000	1.9
  +++ ossp-pkg/fsl/fsl_version.c	21 Oct 2002 13:03:17 -0000	1.10
  @@ -39,7 +39,7 @@
       "OSSP fsl 1.0.4 (21-Oct-2002)",
       "OSSP fsl/1.0.4",
       "@(#)OSSP fsl 1.0.4 (21-Oct-2002)",
  -    "$Id: fsl_version.c,v 1.9 2002/10/21 12:51:23 thl Exp $"
  +    "$Id: fsl_version.c,v 1.10 2002/10/21 13:03:17 thl Exp $"
   };
   
   #endif /* _FSL_VERSION_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Mon Oct 21 15:22:14 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 957A576512; Mon, 21 Oct 2002 15:22:14 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl_version.c
Message-Id: <20021021132214.957A576512@mail.ossp.org>
Date: Mon, 21 Oct 2002 15:22:14 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   21-Oct-2002 15:22:14
  Branch: HEAD                             Handle: 2002102114221400

  Modified files:
    ossp-pkg/fsl            fsl_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.11        +0  -0      ossp-pkg/fsl/fsl_version.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl_version.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 fsl_version.c
  --- ossp-pkg/fsl/fsl_version.c	21 Oct 2002 13:03:17 -0000	1.10
  +++ ossp-pkg/fsl/fsl_version.c	21 Oct 2002 13:22:14 -0000	1.11
  @@ -39,7 +39,7 @@
       "OSSP fsl 1.0.4 (21-Oct-2002)",
       "OSSP fsl/1.0.4",
       "@(#)OSSP fsl 1.0.4 (21-Oct-2002)",
  -    "$Id: fsl_version.c,v 1.10 2002/10/21 13:03:17 thl Exp $"
  +    "$Id: fsl_version.c,v 1.11 2002/10/21 13:22:14 thl Exp $"
   };
   
   #endif /* _FSL_VERSION_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Mon Oct 21 17:14:05 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F0A6976500; Mon, 21 Oct 2002 17:14:04 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ut_sa.c l2_ut_sa.h
Message-Id: <20021021151404.F0A6976500@mail.ossp.org>
Date: Mon, 21 Oct 2002 17:14:04 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Oct-2002 17:14:04
  Branch: HEAD                             Handle: 2002102116140400

  Modified files:
    ossp-pkg/l2             l2_ut_sa.c l2_ut_sa.h

  Log:
    we are sure that config.h exists

  Summary:
    Revision    Changes     Path
    1.19        +1  -1      ossp-pkg/l2/l2_ut_sa.c
    1.15        +1  -1      ossp-pkg/l2/l2_ut_sa.h
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ut_sa.c
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 l2_ut_sa.c
  --- ossp-pkg/l2/l2_ut_sa.c	11 Oct 2002 16:00:48 -0000	1.18
  +++ ossp-pkg/l2/l2_ut_sa.c	21 Oct 2002 15:14:04 -0000	1.19
  @@ -89,7 +89,7 @@
   #endif
   
   /* backward compatibility for ssize_t */
  -#if defined(HAVE_CONFIG_H) && !defined(HAVE_SSIZE_T)
  +#if !defined(HAVE_SSIZE_T)
   #define ssize_t long
   #endif
   
  Index: ossp-pkg/l2/l2_ut_sa.h
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 l2_ut_sa.h
  --- ossp-pkg/l2/l2_ut_sa.h	11 Oct 2002 16:00:48 -0000	1.14
  +++ ossp-pkg/l2/l2_ut_sa.h	21 Oct 2002 15:14:04 -0000	1.15
  @@ -42,7 +42,7 @@
   #include "l2_config.h"
   
   /* fallback for POSIX socklen_t */
  -#if defined(HAVE_CONFIG_H) && !defined(HAVE_SOCKLEN_T)
  +#if !defined(HAVE_SOCKLEN_T)
   typedef int socklen_t;
   #endif
   

From ossp-cvs-owner@ossp.org  Mon Oct 21 17:19:06 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 70B9976527; Mon, 21 Oct 2002 17:19:06 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT shiela.cfg
Message-Id: <20021021151906.70B9976527@mail.ossp.org>
Date: Mon, 21 Oct 2002 17:19:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: CVSROOT                          Date:   21-Oct-2002 17:19:06
  Branch: HEAD                             Handle: 2002102116190500

  Modified files:
    CVSROOT                 shiela.cfg

  Log:
    try to fix shiela config

  Summary:
    Revision    Changes     Path
    1.33        +5  -6      CVSROOT/shiela.cfg
  ____________________________________________________________________________

  Index: CVSROOT/shiela.cfg
  ============================================================
  $ cvs diff -u -r1.32 -r1.33 shiela.cfg
  --- CVSROOT/shiela.cfg	21 Oct 2002 09:55:30 -0000	1.32
  +++ CVSROOT/shiela.cfg	21 Oct 2002 15:19:05 -0000	1.33
  @@ -66,18 +66,16 @@
       Modules {
           Module CVSROOT "CVS Administrative Files" {
               Acl modules *:core *:devel *:contrib;
  -            Acl *       *:core *:devel;
  +            Acl *       *:core;
               Log passwd  none;
               Log modules mail.diff:ossp-cvs@ossp.org 
                           mail.diff:ossp-core@ossp.org file:CVSLOGS/CVSROOT;
  -            Log *       mail.diff:ossp-cvs@ossp.org 
  -                        mail.diff:ossp-core@ossp.org file:CVSLOGS/CVSROOT;
  +            Log *       mail.diff:ossp-core@ossp.org file:CVSLOGS/CVSROOT;
           };
           Module ossp-adm "OSSP Project Administration" {
  -            Acl *        *:core *:devel;
  +            Acl *        *:core;
               Log *:VENDOR mail.url:ossp-core@ossp.org  file:CVSLOGS/ossp-adm;
  -            Log *        mail.diff:ossp-cvs@ossp.org
  -                         mail.diff:ossp-core@ossp.org file:CVSLOGS/ossp-adm;
  +            Log *        mail.diff:ossp-core@ossp.org file:CVSLOGS/ossp-adm;
           };
           Module ossp-srv "OSSP Server Platform" {
               Acl *:VENDOR *:core *:devel;
  @@ -88,6 +86,7 @@
           Module ossp-pkg "OSSP Stand-Alone Packages" {
               Acl *:vendor *:core *:devel *:contrib;
               Acl *:VENDOR *:core *:devel *:contrib;
  +            Acl *:*      *:core *:devel *:contrib;
               Acl *        *:core *:devel *:contrib;
               Log *:vendor mail.url:ossp-cvs@ossp.org  file:CVSLOGS/ossp-pkg;
               Log *:VENDOR mail.url:ossp-cvs@ossp.org  file:CVSLOGS/ossp-pkg;

From ossp-cvs-owner@ossp.org  Mon Oct 21 17:19:44 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E6C9476519; Mon, 21 Oct 2002 17:19:42 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq AUTHORS ChangeLog Makefile Makefile.in NEW...
Message-Id: <20021021151942.E6C9476519@mail.ossp.org>
Date: Mon, 21 Oct 2002 17:19:42 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   21-Oct-2002 17:19:42
  Branch: OSSP_VEN                         Handle: 2002102116193700

  Added files:              (Branch: OSSP_VEN)
    ossp-pkg/titraq         AUTHORS ChangeLog Makefile Makefile.in NEWS README
                            TODO ac_config.h ac_config.h.in aclocal.m4
                            adddlg.h config.guess config.sub configure
                            configure.in devtool devtool.conf devtool.func
                            idle.cpp idle.h kaccelmenuwatch.cpp
                            kaccelmenuwatch.h karm.cpp karm.h karmui.rc
                            ktimewidget.cpp ktimewidget.h loging.cpp loging.h
                            main.cpp preferences.cpp preferences.h print.cpp
                            print.h shtool task.cpp task.h titraq.conf.pod
                            titraq.pod titraq_test.sh titraq_version.c
                            toolicons.h top.cpp top.h version.h

  Log:
    Birth of OSSP titraq GUI for Cable & Wireless Muenchen accounting system.
    
    [Release Tag: OSSP_REL]

  Summary:
    Revision    Changes     Path
    1.1.1.1     +2  -0      ossp-pkg/titraq/AUTHORS
    1.1.1.1     +3  -0      ossp-pkg/titraq/ChangeLog
    1.1.1.1     +150 -0     ossp-pkg/titraq/Makefile
    1.1.1.1     +150 -0     ossp-pkg/titraq/Makefile.in
    1.1.1.1     BLOB        ossp-pkg/titraq/NEWS
    1.1.1.1     BLOB        ossp-pkg/titraq/README
    1.1.1.1     +69 -0      ossp-pkg/titraq/TODO
    1.1.1.1     +63 -0      ossp-pkg/titraq/ac_config.h
    1.1.1.1     +62 -0      ossp-pkg/titraq/ac_config.h.in
    1.1.1.1     +419 -0     ossp-pkg/titraq/aclocal.m4
    1.1.1.1     +69 -0      ossp-pkg/titraq/adddlg.h
    1.1.1.1     +1363 -0    ossp-pkg/titraq/config.guess
    1.1.1.1     +1470 -0    ossp-pkg/titraq/config.sub
    1.1.1.1     BLOB        ossp-pkg/titraq/configure
    1.1.1.1     +96 -0      ossp-pkg/titraq/configure.in
    1.1.1.1     +46 -0      ossp-pkg/titraq/devtool
    1.1.1.1     +27 -0      ossp-pkg/titraq/devtool.conf
    1.1.1.1     +73 -0      ossp-pkg/titraq/devtool.func
    1.1.1.1     +112 -0     ossp-pkg/titraq/idle.cpp
    1.1.1.1     +95 -0      ossp-pkg/titraq/idle.h
    1.1.1.1     +117 -0     ossp-pkg/titraq/kaccelmenuwatch.cpp
    1.1.1.1     +113 -0     ossp-pkg/titraq/kaccelmenuwatch.h
    1.1.1.1     +464 -0     ossp-pkg/titraq/karm.cpp
    1.1.1.1     +88 -0      ossp-pkg/titraq/karm.h
    1.1.1.1     +29 -0      ossp-pkg/titraq/karmui.rc
    1.1.1.1     +117 -0     ossp-pkg/titraq/ktimewidget.cpp
    1.1.1.1     +20 -0      ossp-pkg/titraq/ktimewidget.h
    1.1.1.1     +120 -0     ossp-pkg/titraq/loging.cpp
    1.1.1.1     +32 -0      ossp-pkg/titraq/loging.h
    1.1.1.1     +15 -0      ossp-pkg/titraq/main.cpp
    1.1.1.1     +240 -0     ossp-pkg/titraq/preferences.cpp
    1.1.1.1     +74 -0      ossp-pkg/titraq/preferences.h
    1.1.1.1     +156 -0     ossp-pkg/titraq/print.cpp
    1.1.1.1     +32 -0      ossp-pkg/titraq/print.h
    1.1.1.1     +3450 -0    ossp-pkg/titraq/shtool
    1.1.1.1     +118 -0     ossp-pkg/titraq/task.cpp
    1.1.1.1     +92 -0      ossp-pkg/titraq/task.h
    1.1.1.1     +49 -0      ossp-pkg/titraq/titraq.conf.pod
    1.1.1.1     +65 -0      ossp-pkg/titraq/titraq.pod
    1.1.1.1     +1  -0      ossp-pkg/titraq/titraq_test.sh
    1.1.1.1     +46 -0      ossp-pkg/titraq/titraq_version.c
    1.1.1.1     +164 -0     ossp-pkg/titraq/toolicons.h
    1.1.1.1     +241 -0     ossp-pkg/titraq/top.cpp
    1.1.1.1     +58 -0      ossp-pkg/titraq/top.h
    1.1.1.1     +4  -0      ossp-pkg/titraq/version.h
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/AUTHORS
  ============================================================
  $ cvs update -p -r1.1.1.1 AUTHORS
  Michael Schloh von Bennewitz
  Index: ossp-pkg/titraq/ChangeLog
  ============================================================
  $ cvs update -p -r1.1.1.1 ChangeLog
  Geschichte des OSSP titraq in Vorwaerts Cronordnung
  
  020527 Projekt Erzeugung
  Index: ossp-pkg/titraq/Makefile
  ============================================================
  $ cvs update -p -r1.1.1.1 Makefile
  ##
  ##  OSSP titraq - Graphical user interface for time accounting
  ##  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  ##  Copyright (c) 2002 Ralf S. Engelschall
  ##
  ##  This file is part of OSSP GUI, a graphical user interface
  ##  for OSSP which can be found at http://www.ossp.org/
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  Makefile.in: Plain old documentation file
  ##
  
  
  
  DESTDIR         =
  prefix          = /tmp/titraq
  exec_prefix     = ${prefix}
  bindir          = ${exec_prefix}/bin
  sbindir         = ${exec_prefix}/sbin
  libdir          = ${exec_prefix}/lib
  includedir      = ${prefix}/include
  mandir          = ${prefix}/man
  
  CC              = gcc
  CXX             = g++
  CFLAGS          = -g -O2 -D_THREAD_SAFE -pthread -DHAVE_CONFIG_H
  CXXFLAGS        = -O2 -D_THREAD_SAFE -pthread -pipe -DQT_NO_DEBUG -I/sw/include/qt -I/usr/X11R6/include -DHAVE_CONFIG_H
  CPPFLAGS        =  -DQT_THREAD_SUPPORT
  CXXCPP          = g++ -E -DQT_THREAD_SUPPORT
  LDFLAGS         =  -L/sw/lib -R/sw/lib -L/usr/X11R6/lib
  LIBS            = -D_THREAD_SAFE -pthread  -lqt-mt -lX11 -lXext -lSM -lm -lXrender -lXinerama -lGL -lICE
  
  # Qt-specific variables
  QTBASE          = /sw
  UIC             = /sw/bin/uic
  MOC             = /sw/bin/moc
  
  RM              = rm -f
  STRIP           = strip
  CHMOD           = chmod
  RMDIR           = rmdir
  SHTOOL          = ./shtool
  POD2MAN         = pod2man
  TRUE            = true
  
  PROG_NAME       = titraq
  
  TARGET          = $(TARGET_PROGS) $(TARGET_MANS)
  TARGET_PROGS    = titraq
  TARGET_MANS     = titraq.1 titraq.conf.5
  
  SRCS            = main.cpp titraq.cpp titraq_version.c
  
  OBJS            = main.o titraq.o titraq_version.o
  
  # Qt meta object compiler
  MOC_IN          = titraq.h
  MOC_OUT         = moc_titraq.cpp
  MOC_OBJ         = moc_titraq.o
  
  .SUFFIXES:
  .SUFFIXES: .c .cc .cpp .cxx .o
  .c.o:
  	$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $<
  
  .cc.o:
  	$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $<
  
  .cpp.o:
  	$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $<
  
  .cxx.o:
  	$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $<
  
  all: Makefile $(TARGET)
  
  $(PROG_NAME): $(OBJS) $(MOC_OBJ)
  	$(CXX) $(LDFLAGS) -o $@ $+ $(LIBS)
  
  $(MOC_OBJ): $(MOC_OUT) $(MOC_IN)
  	$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $(MOC_OUT)
  
  $(MOC_OUT): $(MOC) $(MOC_IN)
  	$(MOC) $(MOC_IN) -o $(MOC_OUT)
  
  titraq.1: titraq.pod
  	VS=`$(SHTOOL) version -lc -dshort titraq_version.c`; \
  	VL=`$(SHTOOL) version -lc -dlong titraq_version.c`; \
  	$(POD2MAN) --section=5 --center="Graphical user interface" \
                 --release="$$VS" --date="$$VL" \
                 titraq.pod >titraq.1
  
  titraq.conf.5: titraq.conf.pod
  	VS=`$(SHTOOL) version -lc -dshort titraq_version.c`; \
  	VL=`$(SHTOOL) version -lc -dlong titraq_version.c`; \
  	$(POD2MAN) --section=5 --center="Graphical user interface config file" \
                 --release="$$VS" --date="$$VL" \
                 titraq.conf.pod >titraq.conf.5
  
  install:
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man1
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man5
  	$(SHTOOL) install -c -m 644 titraq $(DESTDIR)$(bindir)/titraq
  	$(SHTOOL) install -c -m 644 titraq.1 $(DESTDIR)$(mandir)/man1/titraq.1
  	$(SHTOOL) install -c -m 644 titraq.conf.5 $(DESTDIR)$(mandir)/man5/titraq.conf.5
  
  uninstall:
  	$(RM) $(DESTDIR)$(bindir)/titraq
  	$(RM) $(DESTDIR)$(mandir)/man1/titraq.1
  	$(RM) $(DESTDIR)$(mandir)/man5/titraq.conf.5
  
  clean:
  	$(RM) $(TARGET) $(OBJS) $(MOC_OBJ) $(PROG_NAME).core titraq_pcre.tab
  
  distclean: clean
  	$(RM) config.log config.status config.cache # Generated by ./configure
  	$(RM) Makefile ac_config.h                  # Generated by ./configure
  	$(RM) $(MOC_OUT)                         # Generated by $(MOC)
  
  realclean: distclean
  	$(RM) configure ac_config.h.in*             # Generated by Autoconf
  	$(RM) configure.lineno                      # Generated by Autoconf
  	$(RM) shtool                                # Generated by Devtool
  
  check: test
  test: titraq
  	$(CHMOD) 755 titraq_test.sh > /dev/null 2>&1
  	./titraq_test.sh
  
  .PHONY: install uninstall clean distclean realclean check test
  Index: ossp-pkg/titraq/Makefile.in
  ============================================================
  $ cvs update -p -r1.1.1.1 Makefile.in
  ##
  ##  OSSP titraq - Graphical user interface for time accounting
  ##  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  ##  Copyright (c) 2002 Ralf S. Engelschall
  ##
  ##  This file is part of OSSP GUI, a graphical user interface
  ##  for OSSP which can be found at http://www.ossp.org/
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  Makefile.in: Plain old documentation file
  ##
  
  @SET_MAKE@
  
  DESTDIR         =
  prefix          = @prefix@
  exec_prefix     = @exec_prefix@
  bindir          = @bindir@
  sbindir         = @sbindir@
  libdir          = @libdir@
  includedir      = @includedir@
  mandir          = @mandir@
  
  CC              = @CC@
  CXX             = @CXX@
  CFLAGS          = @CFLAGS@ @DEFS@
  CXXFLAGS        = @CXXFLAGS@ @DEFS@
  CPPFLAGS        = @CPPFLAGS@
  CXXCPP          = @CXXCPP@
  LDFLAGS         = @LDFLAGS@
  LIBS            = @LIBS@
  
  # Qt-specific variables
  QTBASE          = @QTBASE@
  UIC             = @UIC@
  MOC             = @MOC@
  
  RM              = rm -f
  STRIP           = strip
  CHMOD           = chmod
  RMDIR           = rmdir
  SHTOOL          = ./shtool
  POD2MAN         = pod2man
  TRUE            = true
  
  PROG_NAME       = titraq
  
  TARGET          = $(TARGET_PROGS) $(TARGET_MANS)
  TARGET_PROGS    = titraq
  TARGET_MANS     = titraq.1 titraq.conf.5
  
  SRCS            = main.cpp titraq.cpp titraq_version.c
  
  OBJS            = main.o titraq.o titraq_version.o
  
  # Qt meta object compiler
  MOC_IN          = titraq.h
  MOC_OUT         = moc_titraq.cpp
  MOC_OBJ         = moc_titraq.o
  
  .SUFFIXES:
  .SUFFIXES: .c .cc .cpp .cxx .o
  .c.o:
  	$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $<
  
  .cc.o:
  	$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $<
  
  .cpp.o:
  	$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $<
  
  .cxx.o:
  	$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $<
  
  all: Makefile $(TARGET)
  
  $(PROG_NAME): $(OBJS) $(MOC_OBJ)
  	$(CXX) $(LDFLAGS) -o $@ $+ $(LIBS)
  
  $(MOC_OBJ): $(MOC_OUT) $(MOC_IN)
  	$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $(MOC_OUT)
  
  $(MOC_OUT): $(MOC) $(MOC_IN)
  	$(MOC) $(MOC_IN) -o $(MOC_OUT)
  
  titraq.1: titraq.pod
  	VS=`$(SHTOOL) version -lc -dshort titraq_version.c`; \
  	VL=`$(SHTOOL) version -lc -dlong titraq_version.c`; \
  	$(POD2MAN) --section=5 --center="Graphical user interface" \
                 --release="$$VS" --date="$$VL" \
                 titraq.pod >titraq.1
  
  titraq.conf.5: titraq.conf.pod
  	VS=`$(SHTOOL) version -lc -dshort titraq_version.c`; \
  	VL=`$(SHTOOL) version -lc -dlong titraq_version.c`; \
  	$(POD2MAN) --section=5 --center="Graphical user interface config file" \
                 --release="$$VS" --date="$$VL" \
                 titraq.conf.pod >titraq.conf.5
  
  install:
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man1
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man5
  	$(SHTOOL) install -c -m 644 titraq $(DESTDIR)$(bindir)/titraq
  	$(SHTOOL) install -c -m 644 titraq.1 $(DESTDIR)$(mandir)/man1/titraq.1
  	$(SHTOOL) install -c -m 644 titraq.conf.5 $(DESTDIR)$(mandir)/man5/titraq.conf.5
  
  uninstall:
  	$(RM) $(DESTDIR)$(bindir)/titraq
  	$(RM) $(DESTDIR)$(mandir)/man1/titraq.1
  	$(RM) $(DESTDIR)$(mandir)/man5/titraq.conf.5
  
  clean:
  	$(RM) $(TARGET) $(OBJS) $(MOC_OBJ) $(PROG_NAME).core titraq_pcre.tab
  
  distclean: clean
  	$(RM) config.log config.status config.cache # Generated by ./configure
  	$(RM) Makefile ac_config.h                  # Generated by ./configure
  	$(RM) $(MOC_OUT)                         # Generated by $(MOC)
  
  realclean: distclean
  	$(RM) configure ac_config.h.in*             # Generated by Autoconf
  	$(RM) configure.lineno                      # Generated by Autoconf
  	$(RM) shtool                                # Generated by Devtool
  
  check: test
  test: titraq
  	$(CHMOD) 755 titraq_test.sh > /dev/null 2>&1
  	./titraq_test.sh
  
  .PHONY: install uninstall clean distclean realclean check test
  Index: ossp-pkg/titraq/NEWS
  ============================================================
  $ cvs update -p -r1.1.1.1 NEWS | uuencode NEWS
  Index: ossp-pkg/titraq/README
  ============================================================
  $ cvs update -p -r1.1.1.1 README | uuencode README
  Index: ossp-pkg/titraq/TODO
  ============================================================
  $ cvs update -p -r1.1.1.1 TODO
                     ***************************************
                     *                                     *
                     *   TODO: OSSP titraq Specification   *
                     *                                     *
                     ***************************************
  
  Consider
  --------
  
  Must do
  -------
  
  Dreams
  ------
  
  Document
  --------
  
  Project plan
  ------------
      Prototype
      Release v0.8    Milestone 1, Alpha
      Release v0.9    Milestone 2, Beta
      Release v1.0    Milestone 3,
      Release v1.2    Milestone 4,
  
  Requirements
  ------------
  
  Deliverables
  ------------
      Binaries
        titraq           Verwendung
  
      Designdocs
        titraq_design.ps Systemdiagramme
  
      Manpage
        titraq.1         Hauptinfo
        titraq.conf.5    Beschreibung des Configdatei
  
      Geliefert         
        titraq.conf      Ausgekommentet Beispieldatei
  
  Pseudocode
  ----------
      parse command line
      parse titraq.conf file
      show control window
  
  Test case
  ---------
      Pre:
      tar zxvf titraq-0.9.tar
      cd titraq-0.9
      ./configure
      make
      su
      make install
  
      Assume:
      OS has Qt 3.0.5 or newer multithreaded library
  
      Begin:
      $ titraq
  
      Output:
      Post:
      Procedure:
  Index: ossp-pkg/titraq/ac_config.h
  ============================================================
  $ cvs update -p -r1.1.1.1 ac_config.h
  /* ac_config.h.  Generated by configure.  */
  /* ac_config.h.in.  Generated from configure.in by autoheader.  */
  
  /* Define to 1 if you have the <dmalloc.h> header file. */
  /* #undef HAVE_DMALLOC_H */
  
  /* Define to 1 if you have the <inttypes.h> header file. */
  #define HAVE_INTTYPES_H 1
  
  /* Define to 1 if you have the `dmalloc' library (-ldmalloc). */
  /* #undef HAVE_LIBDMALLOC */
  
  /* Define to 1 if you have the <memory.h> header file. */
  #define HAVE_MEMORY_H 1
  
  /* Define if you have POSIX threads libraries and header files. */
  #define HAVE_PTHREAD 1
  
  /* Define to 1 if you have the <stdint.h> header file. */
  /* #undef HAVE_STDINT_H */
  
  /* Define to 1 if you have the <stdlib.h> header file. */
  #define HAVE_STDLIB_H 1
  
  /* Define to 1 if you have the <strings.h> header file. */
  #define HAVE_STRINGS_H 1
  
  /* Define to 1 if you have the <string.h> header file. */
  #define HAVE_STRING_H 1
  
  /* Define to 1 if you have the <sys/stat.h> header file. */
  #define HAVE_SYS_STAT_H 1
  
  /* Define to 1 if you have the <sys/types.h> header file. */
  #define HAVE_SYS_TYPES_H 1
  
  /* Define to 1 if you have the <unistd.h> header file. */
  #define HAVE_UNISTD_H 1
  
  /* Define to the address where bug reports for this package should be sent. */
  #define PACKAGE_BUGREPORT ""
  
  /* Define to the full name of this package. */
  #define PACKAGE_NAME ""
  
  /* Define to the full name and version of this package. */
  #define PACKAGE_STRING ""
  
  /* Define to the one symbol short name of this package. */
  #define PACKAGE_TARNAME ""
  
  /* Define to the version of this package. */
  #define PACKAGE_VERSION ""
  
  /* Define to the necessary symbol if this constant uses a non-standard name on
     your system. */
  /* #undef PTHREAD_CREATE_JOINABLE */
  
  /* Define to 1 if you have the ANSI C header files. */
  #define STDC_HEADERS 1
  
  /* Define to 1 if building with Dmalloc */
  /* #undef WITH_DMALLOC */
  Index: ossp-pkg/titraq/ac_config.h.in
  ============================================================
  $ cvs update -p -r1.1.1.1 ac_config.h.in
  /* ac_config.h.in.  Generated from configure.in by autoheader.  */
  
  /* Define to 1 if you have the <dmalloc.h> header file. */
  #undef HAVE_DMALLOC_H
  
  /* Define to 1 if you have the <inttypes.h> header file. */
  #undef HAVE_INTTYPES_H
  
  /* Define to 1 if you have the `dmalloc' library (-ldmalloc). */
  #undef HAVE_LIBDMALLOC
  
  /* Define to 1 if you have the <memory.h> header file. */
  #undef HAVE_MEMORY_H
  
  /* Define if you have POSIX threads libraries and header files. */
  #undef HAVE_PTHREAD
  
  /* Define to 1 if you have the <stdint.h> header file. */
  #undef HAVE_STDINT_H
  
  /* Define to 1 if you have the <stdlib.h> header file. */
  #undef HAVE_STDLIB_H
  
  /* Define to 1 if you have the <strings.h> header file. */
  #undef HAVE_STRINGS_H
  
  /* Define to 1 if you have the <string.h> header file. */
  #undef HAVE_STRING_H
  
  /* Define to 1 if you have the <sys/stat.h> header file. */
  #undef HAVE_SYS_STAT_H
  
  /* Define to 1 if you have the <sys/types.h> header file. */
  #undef HAVE_SYS_TYPES_H
  
  /* Define to 1 if you have the <unistd.h> header file. */
  #undef HAVE_UNISTD_H
  
  /* Define to the address where bug reports for this package should be sent. */
  #undef PACKAGE_BUGREPORT
  
  /* Define to the full name of this package. */
  #undef PACKAGE_NAME
  
  /* Define to the full name and version of this package. */
  #undef PACKAGE_STRING
  
  /* Define to the one symbol short name of this package. */
  #undef PACKAGE_TARNAME
  
  /* Define to the version of this package. */
  #undef PACKAGE_VERSION
  
  /* Define to the necessary symbol if this constant uses a non-standard name on
     your system. */
  #undef PTHREAD_CREATE_JOINABLE
  
  /* Define to 1 if you have the ANSI C header files. */
  #undef STDC_HEADERS
  
  /* Define to 1 if building with Dmalloc */
  #undef WITH_DMALLOC
  Index: ossp-pkg/titraq/aclocal.m4
  ============================================================
  $ cvs update -p -r1.1.1.1 aclocal.m4
  ##
  ##  OSSP titraq - Graphical user interface for time accounting
  ##  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  ##  Copyright (c) 2002 Ralf S. Engelschall
  ##
  ##  This file is part of OSSP GUI, a graphical user interface
  ##  for OSSP which can be found at http://www.ossp.org/
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  aclocal.m4: Plain old documentation file
  ##
  
  
  dnl ##
  dnl ##  Support for Platform IDs
  dnl ##
  dnl ##  configure.in:
  dnl ##    AC_PLATFORM(<variable>)
  dnl ##
  
  AC_DEFUN(AC_PLATFORM,[
  if test ".$host" != .NONE && test ".$host" != .; then
      $1="$host"
  else
      $1=`${CONFIG_SHELL-/bin/sh} $srcdir/config.guess`
  fi
  $1=`${CONFIG_SHELL-/bin/sh} $srcdir/config.sub $$1` || exit 1
  AC_SUBST($1)
  if test ".$enable_subdir" != .yes; then
      echo "Platform: ${TB}${$1}${TN}"
  fi
  ])dnl
  
  
  dnl ##
  dnl ##  Support for Configuration Headers
  dnl ##
  dnl ##  configure.in:
  dnl ##    AC_HEADLINE(<short-name>, <long-name>,
  dnl ##                <vers-var>, <vers-file>,
  dnl ##                <copyright>)
  dnl ##
  
  AC_DEFUN(AC_HEADLINE,[dnl
  #   configuration header
  if test ".`echo dummy [$]@ | grep help`" = .; then
      #   bootstrapping shtool
      ac_prog=[$]0
  changequote(, )dnl
      ac_srcdir=`echo $ac_prog | sed -e 's%/[^/][^/]*$%%' -e 's%\([^/]\)/*$%\1%'`
  changequote([, ])dnl
      test ".$ac_srcdir" = ".$ac_prog" && ac_srcdir=.
      ac_shtool="$ac_srcdir/shtool"
  
      #   find out terminal sequences
      TB=`$ac_shtool echo -n -e %B 2>/dev/null`
      TN=`$ac_shtool echo -n -e %b 2>/dev/null`
  
      #   find out package version
      $3_STR="`$ac_shtool version -l c -d long $ac_srcdir/$4`"
      AC_SUBST($3_STR)
   
      #   friendly header ;)
      if test ".$enable_headline" != .no; then
          echo "Configuring ${TB}$1${TN} ($2), Version ${TB}${$3_STR}${TN}"
          echo "$5"
      fi
  
      #   additionally find out hex version
      $3_HEX="`$ac_shtool version -l c -d hex $ac_srcdir/$4`"
      AC_SUBST($3_HEX)
  fi
  ])dnl
  
  
  dnl ##
  dnl ##  Check whether compiler option works
  dnl ##
  dnl ##  configure.in:
  dnl ##    AC_COMPILER_OPTION(<name>, <display>, <option>,
  dnl ##                       <action-success>, <action-failure>)
  dnl ##
  
  AC_DEFUN(AC_COMPILER_OPTION,[dnl
  AC_MSG_CHECKING(whether compiler option(s) $2 work)
  AC_CACHE_VAL(ac_cv_compiler_option_$1,[
  SAVE_CXXFLAGS="$CXXFLAGS"
  CXXFLAGS="$CXXFLAGS $3"
  AC_LANG(C++)
  AC_TRY_COMPILE([],[], ac_cv_compiler_option_$1=yes, ac_cv_compiler_option_$1=no)
  CXXFLAGS="$SAVE_CXXFLAGS"
  ])dnl
  if test ".$ac_cv_compiler_option_$1" = .yes; then
      ifelse([$4], , :, [$4])
  else
      ifelse([$5], , :, [$5])
  fi
  AC_MSG_RESULT([$ac_cv_compiler_option_$1])
  ])dnl
  
  
  dnl ##
  dnl ##  Check the Qt implementation path
  dnl ##
  dnl ##  configure.in:
  dnl ##    AC_CHECK_QT
  dnl ##
  
  AC_DEFUN(AC_CHECK_QT,[dnl
  AC_ARG_WITH(qtdir,dnl
  [  --with-qtdir=[DIR]    prefix where Qt is installed], qtdir=$withval,)
  AC_MSG_CHECKING(the Qt installation path)
  
  dnl ## Ensure that we have a basic path to start searching
  if test -x "$qtdir";
  then
      QTBASE=$qtdir
      AC_MSG_RESULT(${QTBASE})
  elif test -x "${QTDIR}";
  then
      QTBASE="${QTDIR}"
      AC_MSG_RESULT(${QTBASE})
  else
      AC_MSG_RESULT(not found)
      AC_MSG_ERROR([Neither \$QTDIR nor --with-qtdir=[DIR] paths exist])
  fi
  
  dnl ## Now search for libs and headers
  changequote(, )dnl
  for file in x `find $QTBASE/include -name "qapplication.h" -print`; do
      test .$file = .x && continue
      c_dir=`echo $file | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;'`
  done
  
  dnl ## Shared object library is scanned
  dnl ## FIXME Merge static and dynamic library search blocks
  for file in x `find $QTBASE/lib -name "libqt*.so" -print`; do
      test .$file = .x && continue
      l_dir=`echo $file | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;'`
      lib=`echo $file | sed -e 's;^.*/\(.*\)$;\1;' -e 's;lib\(.*\)\.so;\1;'`
  done
  
  dnl ## But the static library is preferred
  for file in x `find $QTBASE/lib -name "libqt*.a" -print`; do
      test .$file = .x && continue
      l_dir=`echo $file | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;'`
      lib=`echo $file | sed -e 's;^.*/\(.*\)$;\1;' -e 's;lib\(.*\)\.a;\1;'`
  done
  changequote([, ])dnl
  
  dnl ## Append paths of libs and headers
  dnl ## FIXME Remove this qt-mt check and do --enable-threads instead
  if test ".$lib" = .qt-mt; then
      LIBS="$LIBS -l$lib"
  else
      LIBS="$LIBS -l$lib"
  fi
  LDFLAGS="$LDFLAGS -L$l_dir -R$l_dir"
  CPPFLAGS="$CPPFLAGS -DQT_THREAD_SUPPORT"
  CXXCPP="$CXXCPP -DQT_THREAD_SUPPORT"
  CXXFLAGS="$CXXFLAGS -I$c_dir"
  ])
  
  
  dnl ##
  dnl ##  UIC check, should come after the Qt check
  dnl ##
  dnl ##  configure.in:
  dnl ##    AC_CHECK_UIC
  dnl ##
  
  AC_DEFUN(AC_CHECK_UIC,[dnl
  AC_MSG_CHECKING(UIC location)
  if test -x ${QTBASE}/bin/uic
  then
      UIC=${QTBASE}/bin/uic
      AC_MSG_RESULT(${QTBASE}/bin/uic)
  else
      UIC=uic
      AC_MSG_RESULT(assumed present)
  fi
  ])
  
  
  dnl ##
  dnl ##  MOC check, should come after the Qt check
  dnl ##
  dnl ##  configure.in:
  dnl ##    AC_CHECK_MOC
  dnl ##
  
  AC_DEFUN(AC_CHECK_MOC,[dnl
  AC_MSG_CHECKING(MOC location)
  if test -x ${QTBASE}/bin/moc
  then
      MOC=${QTBASE}/bin/moc
      AC_MSG_RESULT(${QTBASE}/bin/moc)
  else
      MOC=moc
      AC_MSG_RESULT(assumed present)
  fi
  ])
  
  
  dnl ##
  dnl ##  Debugging Support
  dnl ##
  dnl ##  configure.in:
  dnl ##    AC_CHECK_DEBUGGING
  dnl ##
  
  AC_DEFUN(AC_CHECK_DEBUGGING,[dnl
  AC_ARG_ENABLE(debug,dnl
  [  --enable-debug          build for debugging (default=no)],
  [dnl
  if test ".$ac_cv_prog_gcc" = ".yes"; then
      case "$CXXFLAGS" in
          *-O* ) ;;
             * ) CXXFLAGS="$CXXFLAGS -O2" ;;
      esac
      case "$CXXFLAGS" in
          *-g* ) ;;
             * ) CXXFLAGS="$CXXFLAGS -g" ;;
      esac
      case "$CXXFLAGS" in
          *-pipe* ) ;;
                * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CXXFLAGS="$CXXFLAGS -pipe") ;;
      esac
      AC_COMPILER_OPTION(defdbg, -DDEBUG, -DDEBUG, CXXFLAGS="$CXXFLAGS -DDEBUG")
  dnl    AC_COMPILER_OPTION(ggdb3, -ggdb3, -ggdb3, CXXFLAGS="$CXXFLAGS -ggdb3")
      CXXFLAGS="$CXXFLAGS -pedantic"
      CXXFLAGS="$CXXFLAGS -Wall"
      WMORE="-Wshadow -Wpointer-arith -Wcast-align -Winline"
      WMORE="$WMORE -Wmissing-prototypes -Wmissing-declarations -Wnested-externs"
      AC_COMPILER_OPTION(wmore, -W<xxx>, $WMORE, CXXFLAGS="$CXXFLAGS $WMORE")
      AC_COMPILER_OPTION(wnolonglong, -Wno-long-long, -Wno-long-long, CXXFLAGS="$CXXFLAGS -Wno-long-long")
  else
      case "$CXXFLAGS" in
          *-g* ) ;;
             * ) CXXFLAGS="$CXXFLAGS -g" ;;
      esac
  fi
  msg="enabled"
  dnl AC_DEFINE(DEBUG, 1, [Define to 1 if you want to enable debugging])
  ],[
  if test ".$ac_cv_prog_gcc" = ".yes"; then
  case "$CXXFLAGS" in
      *-pipe* ) ;;
            * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CXXFLAGS="$CXXFLAGS -pipe") ;;
  esac
  fi
  case "$CXXFLAGS" in
      *-g* ) CXXFLAGS=`echo "$CXXFLAGS" |\
                     sed -e 's/ -g / /g' -e 's/ -g$//' -e 's/^-g //g' -e 's/^-g$//'` ;;
  esac
  case "$CXXFLAGS" in
      *-g* ) CXXFLAGS=`echo "$CXXFLAGS" |\
                       sed -e 's/ -g / /g' -e 's/ -g$//' -e 's/^-g //g' -e 's/^-g$//'` ;;
  esac
  
  CXXFLAGS="$CXXFLAGS -DQT_NO_DEBUG"
  msg=disabled
  ])dnl
  AC_MSG_CHECKING(for compilation debug mode)
  AC_MSG_RESULT([$msg])
  if test ".$msg" = .enabled; then
      enable_shared=no
  fi
  ])
  
  define(AC_IFALLYES,[dnl
  ac_rc=yes
  for ac_spec in $1; do
      ac_type=`echo "$ac_spec" | sed -e 's/:.*$//'`
      ac_item=`echo "$ac_spec" | sed -e 's/^.*://'`
      case $ac_type in
          header [)]
              ac_item=`echo "$ac_item" | sed 'y%./+-%__p_%'`
              ac_var="ac_cv_header_$ac_item"
              ;;
          file [)]
              ac_item=`echo "$ac_item" | sed 'y%./+-%__p_%'`
              ac_var="ac_cv_file_$ac_item"
              ;;
          func    [)] ac_var="ac_cv_func_$ac_item"   ;;
          lib     [)] ac_var="ac_cv_lib_$ac_item"    ;;
          define  [)] ac_var="ac_cv_define_$ac_item" ;;
          typedef [)] ac_var="ac_cv_typedef_$ac_item" ;;
          custom  [)] ac_var="$ac_item" ;;
      esac
      eval "ac_val=\$$ac_var"
      if test ".$ac_val" != .yes; then
          ac_rc=no
          break
      fi
  done
  if test ".$ac_rc" = .yes; then
      :
      $2
  else
      :
      $3
  fi
  ])
  
  
  dnl ##
  dnl ##  Check for an external/extension library.
  dnl ##  - is aware of <libname>-config style scripts
  dnl ##  - searches under standard paths include, lib, etc.
  dnl ##  - searches under subareas like .libs, etc.
  dnl ##
  dnl ##  configure.in:
  dnl ##      AC_CHECK_EXTLIB(<realname>, <libname>, <func>, <header>,
  dnl ##                      [<success-action> [, <fail-action>]])
  dnl ##  Makefile.in:
  dnl ##      CFLAGS  = @CFLAGS@
  dnl ##      LDFLAGS = @LDFLAGS@
  dnl ##      LIBS    = @LIBS@
  dnl ##  shell:
  dnl ##      $ ./configure --with-<libname>[=DIR]
  dnl ##
  
  AC_DEFUN(AC_CHECK_EXTLIB,[dnl
  AC_ARG_WITH($2, [dnl
  [  --with-]m4_substr([$2[[=DIR]]                     ], 0, 19)[build with external $1 library (default=no)]], [dnl
      if test ".$with_$2" = .yes; then
          #   via config script
          $2_version=`($2-config --version) 2>/dev/null`
          if test ".$$2_version" != .; then
              CFLAGS="$CFLAGS `$2-config --cflags`"
              LDFLAGS="$LDFLAGS `$2-config --ldflags`"
          fi
      else
          if test -d "$with_$2"; then
              found=0
              #   via config script
              for dir in $with_$2/bin $with_$2; do
                  if test -f "$dir/$2-config"; then
                      $2_version=`($dir/$2-config --version) 2>/dev/null`
                      if test ".$$2_version" != .; then
                          CFLAGS="$CFLAGS `$dir/$2-config --cflags`"
                          LDFLAGS="$LDFLAGS `$dir/$2-config --ldflags`"
                          found=1
                          break
                      fi
                  fi
              done
              #   via standard paths
              if test ".$found" = .0; then
                  for dir in $with_$2/include/$2 $with_$2/include $with_$2; do
                      if test -f "$dir/$4"; then
                          CFLAGS="$CFLAGS -I$dir"
                          found=1
                          break
                      fi
                  done
                  for dir in $with_$2/lib/$2 $with_$2/lib $with_$2; do
                      if test -f "$dir/lib$2.a" -o -f "$dir/lib$2.so"; then
                          LDFLAGS="$LDFLAGS -L$dir"
                          found=1
                          break
                      fi
                  done
              fi
              #   in any subarea
              if test ".$found" = .0; then
  changequote(, )dnl
                  for file in x `find $with_$2 -name "$4" -type f -print`; do
                      test .$file = .x && continue
                      dir=`echo $file | sed -e 's;[[^/]]*$;;' -e 's;\(.\)/$;\1;'`
                      CFLAGS="$CFLAGS -I$dir"
                  done
                  for file in x `find $with_$2 -name "lib$2.[[aso]]" -type f -print`; do
                      test .$file = .x && continue
                      dir=`echo $file | sed -e 's;[[^/]]*$;;' -e 's;\(.\)/$;\1;'`
                      LDFLAGS="$LDFLAGS -L$dir"
                  done
  changequote([, ])dnl
              fi
          fi
      fi
      AC_HAVE_HEADERS($4)
      AC_CHECK_LIB($2, $3)
      AC_IFALLYES(header:$4 lib:$2_$3, with_$2=yes, with_$2=no)
      if test ".$with_$2" = .no; then
          AC_ERROR([Unable to find $1 library])
      fi
      ], [dnl
  if test ".$with_$2" = .; then
      with_$2=no
  fi
      ])dnl
  AC_MSG_CHECKING(whether to build against external $1 library)
  if test ".$with_$2" = .yes; then
      ifelse([$5], , :, [$5])
  else
      ifelse([$6], , :, [$6])
  fi
  AC_MSG_RESULT([$with_$2])
  ])dnl
  Index: ossp-pkg/titraq/adddlg.h
  ============================================================
  $ cvs update -p -r1.1.1.1 adddlg.h
  /*
   *   karm
   *   This file only: Copyright (C) 1999  Espen Sand, espensa@online.no
   *
   *   This program is free software; you can redistribute it and/or modify
   *   it under the terms of the GNU General Public License as published by
   *   the Free Software Foundation; either version 2 of the License, or
   *   (at your option) any later version.
   *
   *   This program is distributed in the hope that it will be useful,
   *   but WITHOUT ANY WARRANTY; without even the implied warranty of
   *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   *   GNU General Public License for more details.
   *
   *   You should have received a copy of the GNU General Public License
   *   along with this program; if not, write to the Free Software
   *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
   *
   */
  
  #ifndef KarmAddDlg_included
  #define KarmAddDlg_included
  
  #include <stdlib.h>
  #include <kdialogbase.h>
  #include <qvalidator.h>
  #include "adddlg.h"
  class QLineEdit;
  class KTimeWidget;
  class QRadioButton;
  
  class AddTaskDialog : public KDialogBase
  {
    Q_OBJECT
  
    public:
      AddTaskDialog(QString caption, bool editDlg);
      void setTask(const QString &name, long time, long sessionTime );
      QString taskName( void ) const;
  	  void status( long *total, long *totalDiff, long *session, long *sessionDiff ) const;
  	
    private slots:
  	void slotAbsolutePressed();
  	void slotRelativePressed();
    void enterWhatsThis();
  
    private:
    	QLineEdit* _name;
  	  KTimeWidget* _totalTW;
  	  KTimeWidget* _sessionTW;
  	  KTimeWidget* _diffTW;
  	  QComboBox* _operator;
  
  	  long origTotal;
    	long origSession;
  
  	  QRadioButton *_absoluteRB;
  	  QRadioButton *_relativeRB;
  
    	QLabel* _totalLA;
  	  QLabel* _sessionLA;
  };
  
  
  
  
  
  #endif // KarmAddDlg_included
  
  Index: ossp-pkg/titraq/config.guess
  ============================================================
  $ cvs update -p -r1.1.1.1 config.guess
  #! /bin/sh
  # Attempt to guess a canonical system name.
  #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
  #   2000, 2001, 2002 Free Software Foundation, Inc.
  
  timestamp='2002-09-03'
  
  # This file is free software; you can redistribute it and/or modify it
  # under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 2 of the License, or
  # (at your option) any later version.
  #
  # This program is distributed in the hope that it will be useful, but
  # WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  # General Public License for more details.
  #
  # You should have received a copy of the GNU General Public License
  # along with this program; if not, write to the Free Software
  # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  #
  # As a special exception to the GNU General Public License, if you
  # distribute this file as part of a program that contains a
  # configuration script generated by Autoconf, you may include it under
  # the same distribution terms that you use for the rest of that program.
  
  # Originally written by Per Bothner <per@bothner.com>.
  # Please send patches to <config-patches@gnu.org>.  Submit a context
  # diff and a properly formatted ChangeLog entry.
  #
  # This script attempts to guess a canonical system name similar to
  # config.sub.  If it succeeds, it prints the system name on stdout, and
  # exits with 0.  Otherwise, it exits with 1.
  #
  # The plan is that this can be called by configure scripts if you
  # don't specify an explicit build system type.
  
  me=`echo "$0" | sed -e 's,.*/,,'`
  
  usage="\
  Usage: $0 [OPTION]
  
  Output the configuration name of the system \`$me' is run on.
  
  Operation modes:
    -h, --help         print this help, then exit
    -t, --time-stamp   print date of last modification, then exit
    -v, --version      print version number, then exit
  
  Report bugs and patches to <config-patches@gnu.org>."
  
  version="\
  GNU config.guess ($timestamp)
  
  Originally written by Per Bothner.
  Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
  Free Software Foundation, Inc.
  
  This is free software; see the source for copying conditions.  There is NO
  warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
  
  help="
  Try \`$me --help' for more information."
  
  # Parse command line
  while test $# -gt 0 ; do
    case $1 in
      --time-stamp | --time* | -t )
         echo "$timestamp" ; exit 0 ;;
      --version | -v )
         echo "$version" ; exit 0 ;;
      --help | --h* | -h )
         echo "$usage"; exit 0 ;;
      -- )     # Stop option processing
         shift; break ;;
      - )	# Use stdin as input.
         break ;;
      -* )
         echo "$me: invalid option $1$help" >&2
         exit 1 ;;
      * )
         break ;;
    esac
  done
  
  if test $# != 0; then
    echo "$me: too many arguments$help" >&2
    exit 1
  fi
  
  trap 'exit 1' 1 2 15
  
  # CC_FOR_BUILD -- compiler used by this script. Note that the use of a
  # compiler to aid in system detection is discouraged as it requires
  # temporary files to be created and, as you can see below, it is a
  # headache to deal with in a portable fashion.
  
  # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
  # use `HOST_CC' if defined, but it is deprecated.
  
  # This shell variable is my proudest work .. or something. --bje
  
  set_cc_for_build='tmpdir=${TMPDIR-/tmp}/config-guess-$$ ;
  (old=`umask` && umask 077 && mkdir $tmpdir && umask $old && unset old)
     || (echo "$me: cannot create $tmpdir" >&2 && exit 1) ;
  dummy=$tmpdir/dummy ;
  files="$dummy.c $dummy.o $dummy.rel $dummy" ;
  trap '"'"'rm -f $files; rmdir $tmpdir; exit 1'"'"' 1 2 15 ;
  case $CC_FOR_BUILD,$HOST_CC,$CC in
   ,,)    echo "int x;" > $dummy.c ;
  	for c in cc gcc c89 c99 ; do
  	  if ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ; then
  	     CC_FOR_BUILD="$c"; break ;
  	  fi ;
  	done ;
  	rm -f $files ;
  	if test x"$CC_FOR_BUILD" = x ; then
  	  CC_FOR_BUILD=no_compiler_found ;
  	fi
  	;;
   ,,*)   CC_FOR_BUILD=$CC ;;
   ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
  esac ;
  unset files'
  
  # This is needed to find uname on a Pyramid OSx when run in the BSD universe.
  # (ghazi@noc.rutgers.edu 1994-08-24)
  if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
  	PATH=$PATH:/.attbin ; export PATH
  fi
  
  UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
  UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
  UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
  UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
  
  # Note: order is significant - the case branches are not exclusive.
  
  case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
      *:NetBSD:*:*)
  	# NetBSD (nbsd) targets should (where applicable) match one or
  	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
  	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
  	# switched to ELF, *-*-netbsd* would select the old
  	# object file format.  This provides both forward
  	# compatibility and a consistent mechanism for selecting the
  	# object file format.
  	#
  	# Note: NetBSD doesn't particularly care about the vendor
  	# portion of the name.  We always set it to "unknown".
  	sysctl="sysctl -n hw.machine_arch"
  	UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
  	    /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
  	case "${UNAME_MACHINE_ARCH}" in
  	    armeb) machine=armeb-unknown ;;
  	    arm*) machine=arm-unknown ;;
  	    sh3el) machine=shl-unknown ;;
  	    sh3eb) machine=sh-unknown ;;
  	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
  	esac
  	# The Operating System including object format, if it has switched
  	# to ELF recently, or will in the future.
  	case "${UNAME_MACHINE_ARCH}" in
  	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
  		eval $set_cc_for_build
  		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
  			| grep __ELF__ >/dev/null
  		then
  		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
  		    # Return netbsd for either.  FIX?
  		    os=netbsd
  		else
  		    os=netbsdelf
  		fi
  		;;
  	    *)
  	        os=netbsd
  		;;
  	esac
  	# The OS release
  	release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
  	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
  	# contains redundant information, the shorter form:
  	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
  	echo "${machine}-${os}${release}"
  	exit 0 ;;
      amiga:OpenBSD:*:*)
  	echo m68k-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      arc:OpenBSD:*:*)
  	echo mipsel-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      hp300:OpenBSD:*:*)
  	echo m68k-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      mac68k:OpenBSD:*:*)
  	echo m68k-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      macppc:OpenBSD:*:*)
  	echo powerpc-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      mvme68k:OpenBSD:*:*)
  	echo m68k-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      mvme88k:OpenBSD:*:*)
  	echo m88k-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      mvmeppc:OpenBSD:*:*)
  	echo powerpc-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      pmax:OpenBSD:*:*)
  	echo mipsel-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      sgi:OpenBSD:*:*)
  	echo mipseb-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      sun3:OpenBSD:*:*)
  	echo m68k-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      wgrisc:OpenBSD:*:*)
  	echo mipsel-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      *:OpenBSD:*:*)
  	echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
  	exit 0 ;;
      alpha:OSF1:*:*)
  	if test $UNAME_RELEASE = "V4.0"; then
  		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
  	fi
  	# A Vn.n version is a released version.
  	# A Tn.n version is a released field test version.
  	# A Xn.n version is an unreleased experimental baselevel.
  	# 1.2 uses "1.2" for uname -r.
  	eval $set_cc_for_build
  	cat <<EOF >$dummy.s
  	.data
  \$Lformat:
  	.byte 37,100,45,37,120,10,0	# "%d-%x\n"
  
  	.text
  	.globl main
  	.align 4
  	.ent main
  main:
  	.frame \$30,16,\$26,0
  	ldgp \$29,0(\$27)
  	.prologue 1
  	.long 0x47e03d80 # implver \$0
  	lda \$2,-1
  	.long 0x47e20c21 # amask \$2,\$1
  	lda \$16,\$Lformat
  	mov \$0,\$17
  	not \$1,\$18
  	jsr \$26,printf
  	ldgp \$29,0(\$26)
  	mov 0,\$16
  	jsr \$26,exit
  	.end main
  EOF
  	$CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
  	if test "$?" = 0 ; then
  		case `$dummy` in
  			0-0)
  				UNAME_MACHINE="alpha"
  				;;
  			1-0)
  				UNAME_MACHINE="alphaev5"
  				;;
  			1-1)
  				UNAME_MACHINE="alphaev56"
  				;;
  			1-101)
  				UNAME_MACHINE="alphapca56"
  				;;
  			2-303)
  				UNAME_MACHINE="alphaev6"
  				;;
  			2-307)
  				UNAME_MACHINE="alphaev67"
  				;;
  			2-1307)
  				UNAME_MACHINE="alphaev68"
  				;;
  			3-1307)
  				UNAME_MACHINE="alphaev7"
  				;;
  		esac
  	fi
  	rm -f $dummy.s $dummy && rmdir $tmpdir
  	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
  	exit 0 ;;
      Alpha\ *:Windows_NT*:*)
  	# How do we know it's Interix rather than the generic POSIX subsystem?
  	# Should we change UNAME_MACHINE based on the output of uname instead
  	# of the specific Alpha model?
  	echo alpha-pc-interix
  	exit 0 ;;
      21064:Windows_NT:50:3)
  	echo alpha-dec-winnt3.5
  	exit 0 ;;
      Amiga*:UNIX_System_V:4.0:*)
  	echo m68k-unknown-sysv4
  	exit 0;;
      *:[Aa]miga[Oo][Ss]:*:*)
  	echo ${UNAME_MACHINE}-unknown-amigaos
  	exit 0 ;;
      *:[Mm]orph[Oo][Ss]:*:*)
  	echo ${UNAME_MACHINE}-unknown-morphos
  	exit 0 ;;
      *:OS/390:*:*)
  	echo i370-ibm-openedition
  	exit 0 ;;
      arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
  	echo arm-acorn-riscix${UNAME_RELEASE}
  	exit 0;;
      SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
  	echo hppa1.1-hitachi-hiuxmpp
  	exit 0;;
      Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
  	# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
  	if test "`(/bin/universe) 2>/dev/null`" = att ; then
  		echo pyramid-pyramid-sysv3
  	else
  		echo pyramid-pyramid-bsd
  	fi
  	exit 0 ;;
      NILE*:*:*:dcosx)
  	echo pyramid-pyramid-svr4
  	exit 0 ;;
      DRS?6000:UNIX_SV:4.2*:7*)
  	case `/usr/bin/uname -p` in
  	    sparc) echo sparc-icl-nx7 && exit 0 ;;
  	esac ;;
      sun4H:SunOS:5.*:*)
  	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
  	exit 0 ;;
      sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
  	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
  	exit 0 ;;
      i86pc:SunOS:5.*:*)
  	echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
  	exit 0 ;;
      sun4*:SunOS:6*:*)
  	# According to config.sub, this is the proper way to canonicalize
  	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
  	# it's likely to be more like Solaris than SunOS4.
  	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
  	exit 0 ;;
      sun4*:SunOS:*:*)
  	case "`/usr/bin/arch -k`" in
  	    Series*|S4*)
  		UNAME_RELEASE=`uname -v`
  		;;
  	esac
  	# Japanese Language versions have a version number like `4.1.3-JL'.
  	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
  	exit 0 ;;
      sun3*:SunOS:*:*)
  	echo m68k-sun-sunos${UNAME_RELEASE}
  	exit 0 ;;
      sun*:*:4.2BSD:*)
  	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
  	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
  	case "`/bin/arch`" in
  	    sun3)
  		echo m68k-sun-sunos${UNAME_RELEASE}
  		;;
  	    sun4)
  		echo sparc-sun-sunos${UNAME_RELEASE}
  		;;
  	esac
  	exit 0 ;;
      aushp:SunOS:*:*)
  	echo sparc-auspex-sunos${UNAME_RELEASE}
  	exit 0 ;;
      # The situation for MiNT is a little confusing.  The machine name
      # can be virtually everything (everything which is not
      # "atarist" or "atariste" at least should have a processor
      # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
      # to the lowercase version "mint" (or "freemint").  Finally
      # the system name "TOS" denotes a system which is actually not
      # MiNT.  But MiNT is downward compatible to TOS, so this should
      # be no problem.
      atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
          echo m68k-atari-mint${UNAME_RELEASE}
  	exit 0 ;;
      atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
  	echo m68k-atari-mint${UNAME_RELEASE}
          exit 0 ;;
      *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
          echo m68k-atari-mint${UNAME_RELEASE}
  	exit 0 ;;
      milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
          echo m68k-milan-mint${UNAME_RELEASE}
          exit 0 ;;
      hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
          echo m68k-hades-mint${UNAME_RELEASE}
          exit 0 ;;
      *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
          echo m68k-unknown-mint${UNAME_RELEASE}
          exit 0 ;;
      powerpc:machten:*:*)
  	echo powerpc-apple-machten${UNAME_RELEASE}
  	exit 0 ;;
      RISC*:Mach:*:*)
  	echo mips-dec-mach_bsd4.3
  	exit 0 ;;
      RISC*:ULTRIX:*:*)
  	echo mips-dec-ultrix${UNAME_RELEASE}
  	exit 0 ;;
      VAX*:ULTRIX*:*:*)
  	echo vax-dec-ultrix${UNAME_RELEASE}
  	exit 0 ;;
      2020:CLIX:*:* | 2430:CLIX:*:*)
  	echo clipper-intergraph-clix${UNAME_RELEASE}
  	exit 0 ;;
      mips:*:*:UMIPS | mips:*:*:RISCos)
  	eval $set_cc_for_build
  	sed 's/^	//' << EOF >$dummy.c
  #ifdef __cplusplus
  #include <stdio.h>  /* for printf() prototype */
  	int main (int argc, char *argv[]) {
  #else
  	int main (argc, argv) int argc; char *argv[]; {
  #endif
  	#if defined (host_mips) && defined (MIPSEB)
  	#if defined (SYSTYPE_SYSV)
  	  printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
  	#endif
  	#if defined (SYSTYPE_SVR4)
  	  printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
  	#endif
  	#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
  	  printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
  	#endif
  	#endif
  	  exit (-1);
  	}
  EOF
  	$CC_FOR_BUILD $dummy.c -o $dummy \
  	  && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
  	  && rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0
  	rm -f $dummy.c $dummy && rmdir $tmpdir
  	echo mips-mips-riscos${UNAME_RELEASE}
  	exit 0 ;;
      Motorola:PowerMAX_OS:*:*)
  	echo powerpc-motorola-powermax
  	exit 0 ;;
      Motorola:*:4.3:PL8-*)
  	echo powerpc-harris-powermax
  	exit 0 ;;
      Night_Hawk:*:*:PowerMAX_OS)
  	echo powerpc-harris-powermax
  	exit 0 ;;
      Night_Hawk:Power_UNIX:*:*)
  	echo powerpc-harris-powerunix
  	exit 0 ;;
      m88k:CX/UX:7*:*)
  	echo m88k-harris-cxux7
  	exit 0 ;;
      m88k:*:4*:R4*)
  	echo m88k-motorola-sysv4
  	exit 0 ;;
      m88k:*:3*:R3*)
  	echo m88k-motorola-sysv3
  	exit 0 ;;
      AViiON:dgux:*:*)
          # DG/UX returns AViiON for all architectures
          UNAME_PROCESSOR=`/usr/bin/uname -p`
  	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
  	then
  	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
  	       [ ${TARGET_BINARY_INTERFACE}x = x ]
  	    then
  		echo m88k-dg-dgux${UNAME_RELEASE}
  	    else
  		echo m88k-dg-dguxbcs${UNAME_RELEASE}
  	    fi
  	else
  	    echo i586-dg-dgux${UNAME_RELEASE}
  	fi
   	exit 0 ;;
      M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
  	echo m88k-dolphin-sysv3
  	exit 0 ;;
      M88*:*:R3*:*)
  	# Delta 88k system running SVR3
  	echo m88k-motorola-sysv3
  	exit 0 ;;
      XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
  	echo m88k-tektronix-sysv3
  	exit 0 ;;
      Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
  	echo m68k-tektronix-bsd
  	exit 0 ;;
      *:IRIX*:*:*)
  	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
  	exit 0 ;;
      ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
  	echo romp-ibm-aix      # uname -m gives an 8 hex-code CPU id
  	exit 0 ;;              # Note that: echo "'`uname -s`'" gives 'AIX '
      i*86:AIX:*:*)
  	echo i386-ibm-aix
  	exit 0 ;;
      ia64:AIX:*:*)
  	if [ -x /usr/bin/oslevel ] ; then
  		IBM_REV=`/usr/bin/oslevel`
  	else
  		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
  	fi
  	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
  	exit 0 ;;
      *:AIX:2:3)
  	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
  		eval $set_cc_for_build
  		sed 's/^		//' << EOF >$dummy.c
  		#include <sys/systemcfg.h>
  
  		main()
  			{
  			if (!__power_pc())
  				exit(1);
  			puts("powerpc-ibm-aix3.2.5");
  			exit(0);
  			}
  EOF
  		$CC_FOR_BUILD $dummy.c -o $dummy && $dummy && rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0
  		rm -f $dummy.c $dummy && rmdir $tmpdir
  		echo rs6000-ibm-aix3.2.5
  	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
  		echo rs6000-ibm-aix3.2.4
  	else
  		echo rs6000-ibm-aix3.2
  	fi
  	exit 0 ;;
      *:AIX:*:[45])
  	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
  	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
  		IBM_ARCH=rs6000
  	else
  		IBM_ARCH=powerpc
  	fi
  	if [ -x /usr/bin/oslevel ] ; then
  		IBM_REV=`/usr/bin/oslevel`
  	else
  		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
  	fi
  	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
  	exit 0 ;;
      *:AIX:*:*)
  	echo rs6000-ibm-aix
  	exit 0 ;;
      ibmrt:4.4BSD:*|romp-ibm:BSD:*)
  	echo romp-ibm-bsd4.4
  	exit 0 ;;
      ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
  	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
  	exit 0 ;;                           # report: romp-ibm BSD 4.3
      *:BOSX:*:*)
  	echo rs6000-bull-bosx
  	exit 0 ;;
      DPX/2?00:B.O.S.:*:*)
  	echo m68k-bull-sysv3
  	exit 0 ;;
      9000/[34]??:4.3bsd:1.*:*)
  	echo m68k-hp-bsd
  	exit 0 ;;
      hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
  	echo m68k-hp-bsd4.4
  	exit 0 ;;
      9000/[34678]??:HP-UX:*:*)
  	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
  	case "${UNAME_MACHINE}" in
  	    9000/31? )            HP_ARCH=m68000 ;;
  	    9000/[34]?? )         HP_ARCH=m68k ;;
  	    9000/[678][0-9][0-9])
  		if [ -x /usr/bin/getconf ]; then
  		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
                      sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
                      case "${sc_cpu_version}" in
                        523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
                        528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
                        532)                      # CPU_PA_RISC2_0
                          case "${sc_kernel_bits}" in
                            32) HP_ARCH="hppa2.0n" ;;
                            64) HP_ARCH="hppa2.0w" ;;
  			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
                          esac ;;
                      esac
  		fi
  		if [ "${HP_ARCH}" = "" ]; then
  		    eval $set_cc_for_build
  		    sed 's/^              //' << EOF >$dummy.c
  
                #define _HPUX_SOURCE
                #include <stdlib.h>
                #include <unistd.h>
  
                int main ()
                {
                #if defined(_SC_KERNEL_BITS)
                    long bits = sysconf(_SC_KERNEL_BITS);
                #endif
                    long cpu  = sysconf (_SC_CPU_VERSION);
  
                    switch (cpu)
                	{
                	case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
                	case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
                	case CPU_PA_RISC2_0:
                #if defined(_SC_KERNEL_BITS)
                	    switch (bits)
                		{
                		case 64: puts ("hppa2.0w"); break;
                		case 32: puts ("hppa2.0n"); break;
                		default: puts ("hppa2.0"); break;
                		} break;
                #else  /* !defined(_SC_KERNEL_BITS) */
                	    puts ("hppa2.0"); break;
                #endif
                	default: puts ("hppa1.0"); break;
                	}
                    exit (0);
                }
  EOF
  		    (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null) && HP_ARCH=`$dummy`
  		    if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi
  		    rm -f $dummy.c $dummy && rmdir $tmpdir
  		fi ;;
  	esac
  	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
  	exit 0 ;;
      ia64:HP-UX:*:*)
  	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
  	echo ia64-hp-hpux${HPUX_REV}
  	exit 0 ;;
      3050*:HI-UX:*:*)
  	eval $set_cc_for_build
  	sed 's/^	//' << EOF >$dummy.c
  	#include <unistd.h>
  	int
  	main ()
  	{
  	  long cpu = sysconf (_SC_CPU_VERSION);
  	  /* The order matters, because CPU_IS_HP_MC68K erroneously returns
  	     true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
  	     results, however.  */
  	  if (CPU_IS_PA_RISC (cpu))
  	    {
  	      switch (cpu)
  		{
  		  case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
  		  case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
  		  case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
  		  default: puts ("hppa-hitachi-hiuxwe2"); break;
  		}
  	    }
  	  else if (CPU_IS_HP_MC68K (cpu))
  	    puts ("m68k-hitachi-hiuxwe2");
  	  else puts ("unknown-hitachi-hiuxwe2");
  	  exit (0);
  	}
  EOF
  	$CC_FOR_BUILD $dummy.c -o $dummy && $dummy && rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0
  	rm -f $dummy.c $dummy && rmdir $tmpdir
  	echo unknown-hitachi-hiuxwe2
  	exit 0 ;;
      9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
  	echo hppa1.1-hp-bsd
  	exit 0 ;;
      9000/8??:4.3bsd:*:*)
  	echo hppa1.0-hp-bsd
  	exit 0 ;;
      *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
  	echo hppa1.0-hp-mpeix
  	exit 0 ;;
      hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
  	echo hppa1.1-hp-osf
  	exit 0 ;;
      hp8??:OSF1:*:*)
  	echo hppa1.0-hp-osf
  	exit 0 ;;
      i*86:OSF1:*:*)
  	if [ -x /usr/sbin/sysversion ] ; then
  	    echo ${UNAME_MACHINE}-unknown-osf1mk
  	else
  	    echo ${UNAME_MACHINE}-unknown-osf1
  	fi
  	exit 0 ;;
      parisc*:Lites*:*:*)
  	echo hppa1.1-hp-lites
  	exit 0 ;;
      C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
  	echo c1-convex-bsd
          exit 0 ;;
      C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
  	if getsysinfo -f scalar_acc
  	then echo c32-convex-bsd
  	else echo c2-convex-bsd
  	fi
          exit 0 ;;
      C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
  	echo c34-convex-bsd
          exit 0 ;;
      C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
  	echo c38-convex-bsd
          exit 0 ;;
      C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
  	echo c4-convex-bsd
          exit 0 ;;
      CRAY*Y-MP:*:*:*)
  	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
  	exit 0 ;;
      CRAY*[A-Z]90:*:*:*)
  	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
  	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
  	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
  	      -e 's/\.[^.]*$/.X/'
  	exit 0 ;;
      CRAY*TS:*:*:*)
  	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
  	exit 0 ;;
      CRAY*T3D:*:*:*)
  	echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
  	exit 0 ;;
      CRAY*T3E:*:*:*)
  	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
  	exit 0 ;;
      CRAY*SV1:*:*:*)
  	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
  	exit 0 ;;
      F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
  	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
          FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
          FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
          echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
          exit 0 ;;
      i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
  	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
  	exit 0 ;;
      sparc*:BSD/OS:*:*)
  	echo sparc-unknown-bsdi${UNAME_RELEASE}
  	exit 0 ;;
      *:BSD/OS:*:*)
  	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
  	exit 0 ;;
      *:FreeBSD:*:*)
  	# Determine whether the default compiler uses glibc.
  	eval $set_cc_for_build
  	sed 's/^	//' << EOF >$dummy.c
  	#include <features.h>
  	#if __GLIBC__ >= 2
  	LIBC=gnu
  	#else
  	LIBC=
  	#endif
  EOF
  	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
  	rm -f $dummy.c && rmdir $tmpdir
  	echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC}
  	exit 0 ;;
      i*:CYGWIN*:*)
  	echo ${UNAME_MACHINE}-pc-cygwin
  	exit 0 ;;
      i*:MINGW*:*)
  	echo ${UNAME_MACHINE}-pc-mingw32
  	exit 0 ;;
      i*:PW*:*)
  	echo ${UNAME_MACHINE}-pc-pw32
  	exit 0 ;;
      x86:Interix*:3*)
  	echo i386-pc-interix3
  	exit 0 ;;
      i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
  	# How do we know it's Interix rather than the generic POSIX subsystem?
  	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
  	# UNAME_MACHINE based on the output of uname instead of i386?
  	echo i386-pc-interix
  	exit 0 ;;
      i*:UWIN*:*)
  	echo ${UNAME_MACHINE}-pc-uwin
  	exit 0 ;;
      p*:CYGWIN*:*)
  	echo powerpcle-unknown-cygwin
  	exit 0 ;;
      prep*:SunOS:5.*:*)
  	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
  	exit 0 ;;
      *:GNU:*:*)
  	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
  	exit 0 ;;
      i*86:Minix:*:*)
  	echo ${UNAME_MACHINE}-pc-minix
  	exit 0 ;;
      arm*:Linux:*:*)
  	echo ${UNAME_MACHINE}-unknown-linux-gnu
  	exit 0 ;;
      ia64:Linux:*:*)
  	echo ${UNAME_MACHINE}-unknown-linux-gnu
  	exit 0 ;;
      m68*:Linux:*:*)
  	echo ${UNAME_MACHINE}-unknown-linux-gnu
  	exit 0 ;;
      mips:Linux:*:*)
  	eval $set_cc_for_build
  	sed 's/^	//' << EOF >$dummy.c
  	#undef CPU
  	#undef mips
  	#undef mipsel
  	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
  	CPU=mipsel
  	#else
  	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
  	CPU=mips
  	#else
  	CPU=
  	#endif
  	#endif
  EOF
  	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
  	rm -f $dummy.c && rmdir $tmpdir
  	test x"${CPU}" != x && echo "${CPU}-pc-linux-gnu" && exit 0
  	;;
      ppc:Linux:*:*)
  	echo powerpc-unknown-linux-gnu
  	exit 0 ;;
      ppc64:Linux:*:*)
  	echo powerpc64-unknown-linux-gnu
  	exit 0 ;;
      alpha:Linux:*:*)
  	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
  	  EV5)   UNAME_MACHINE=alphaev5 ;;
  	  EV56)  UNAME_MACHINE=alphaev56 ;;
  	  PCA56) UNAME_MACHINE=alphapca56 ;;
  	  PCA57) UNAME_MACHINE=alphapca56 ;;
  	  EV6)   UNAME_MACHINE=alphaev6 ;;
  	  EV67)  UNAME_MACHINE=alphaev67 ;;
  	  EV68*) UNAME_MACHINE=alphaev68 ;;
          esac
  	objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
  	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
  	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
  	exit 0 ;;
      parisc:Linux:*:* | hppa:Linux:*:*)
  	# Look for CPU level
  	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
  	  PA7*) echo hppa1.1-unknown-linux-gnu ;;
  	  PA8*) echo hppa2.0-unknown-linux-gnu ;;
  	  *)    echo hppa-unknown-linux-gnu ;;
  	esac
  	exit 0 ;;
      parisc64:Linux:*:* | hppa64:Linux:*:*)
  	echo hppa64-unknown-linux-gnu
  	exit 0 ;;
      s390:Linux:*:* | s390x:Linux:*:*)
  	echo ${UNAME_MACHINE}-ibm-linux
  	exit 0 ;;
      sh*:Linux:*:*)
  	echo ${UNAME_MACHINE}-unknown-linux-gnu
  	exit 0 ;;
      sparc:Linux:*:* | sparc64:Linux:*:*)
  	echo ${UNAME_MACHINE}-unknown-linux-gnu
  	exit 0 ;;
      x86_64:Linux:*:*)
  	echo x86_64-unknown-linux-gnu
  	exit 0 ;;
      i*86:Linux:*:*)
  	# The BFD linker knows what the default object file format is, so
  	# first see if it will tell us. cd to the root directory to prevent
  	# problems with other programs or directories called `ld' in the path.
  	# Set LC_ALL=C to ensure ld outputs messages in English.
  	ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
  			 | sed -ne '/supported targets:/!d
  				    s/[ 	][ 	]*/ /g
  				    s/.*supported targets: *//
  				    s/ .*//
  				    p'`
          case "$ld_supported_targets" in
  	  elf32-i386)
  		TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
  		;;
  	  a.out-i386-linux)
  		echo "${UNAME_MACHINE}-pc-linux-gnuaout"
  		exit 0 ;;
  	  coff-i386)
  		echo "${UNAME_MACHINE}-pc-linux-gnucoff"
  		exit 0 ;;
  	  "")
  		# Either a pre-BFD a.out linker (linux-gnuoldld) or
  		# one that does not give us useful --help.
  		echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
  		exit 0 ;;
  	esac
  	# Determine whether the default compiler is a.out or elf
  	eval $set_cc_for_build
  	sed 's/^	//' << EOF >$dummy.c
  	#include <features.h>
  	#ifdef __ELF__
  	# ifdef __GLIBC__
  	#  if __GLIBC__ >= 2
  	LIBC=gnu
  	#  else
  	LIBC=gnulibc1
  	#  endif
  	# else
  	LIBC=gnulibc1
  	# endif
  	#else
  	#ifdef __INTEL_COMPILER
  	LIBC=gnu
  	#else
  	LIBC=gnuaout
  	#endif
  	#endif
  EOF
  	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
  	rm -f $dummy.c && rmdir $tmpdir
  	test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
  	test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
  	;;
      i*86:DYNIX/ptx:4*:*)
  	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
  	# earlier versions are messed up and put the nodename in both
  	# sysname and nodename.
  	echo i386-sequent-sysv4
  	exit 0 ;;
      i*86:UNIX_SV:4.2MP:2.*)
          # Unixware is an offshoot of SVR4, but it has its own version
          # number series starting with 2...
          # I am not positive that other SVR4 systems won't match this,
  	# I just have to hope.  -- rms.
          # Use sysv4.2uw... so that sysv4* matches it.
  	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
  	exit 0 ;;
      i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
  	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
  	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
  		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
  	else
  		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
  	fi
  	exit 0 ;;
      i*86:*:5:[78]*)
  	case `/bin/uname -X | grep "^Machine"` in
  	    *486*)	     UNAME_MACHINE=i486 ;;
  	    *Pentium)	     UNAME_MACHINE=i586 ;;
  	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
  	esac
  	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
  	exit 0 ;;
      i*86:*:3.2:*)
  	if test -f /usr/options/cb.name; then
  		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
  		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
  	elif /bin/uname -X 2>/dev/null >/dev/null ; then
  		UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
  		(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
  		(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
  			&& UNAME_MACHINE=i586
  		(/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
  			&& UNAME_MACHINE=i686
  		(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
  			&& UNAME_MACHINE=i686
  		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
  	else
  		echo ${UNAME_MACHINE}-pc-sysv32
  	fi
  	exit 0 ;;
      i*86:*DOS:*:*)
  	echo ${UNAME_MACHINE}-pc-msdosdjgpp
  	exit 0 ;;
      pc:*:*:*)
  	# Left here for compatibility:
          # uname -m prints for DJGPP always 'pc', but it prints nothing about
          # the processor, so we play safe by assuming i386.
  	echo i386-pc-msdosdjgpp
          exit 0 ;;
      Intel:Mach:3*:*)
  	echo i386-pc-mach3
  	exit 0 ;;
      paragon:*:*:*)
  	echo i860-intel-osf1
  	exit 0 ;;
      i860:*:4.*:*) # i860-SVR4
  	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
  	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
  	else # Add other i860-SVR4 vendors below as they are discovered.
  	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
  	fi
  	exit 0 ;;
      mini*:CTIX:SYS*5:*)
  	# "miniframe"
  	echo m68010-convergent-sysv
  	exit 0 ;;
      mc68k:UNIX:SYSTEM5:3.51m)
  	echo m68k-convergent-sysv
  	exit 0 ;;
      M68*:*:R3V[567]*:*)
  	test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
      3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0)
  	OS_REL=''
  	test -r /etc/.relid \
  	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
  	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
  	  && echo i486-ncr-sysv4.3${OS_REL} && exit 0
  	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
  	  && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
      3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
          /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
            && echo i486-ncr-sysv4 && exit 0 ;;
      m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
  	echo m68k-unknown-lynxos${UNAME_RELEASE}
  	exit 0 ;;
      mc68030:UNIX_System_V:4.*:*)
  	echo m68k-atari-sysv4
  	exit 0 ;;
      i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
  	echo i386-unknown-lynxos${UNAME_RELEASE}
  	exit 0 ;;
      TSUNAMI:LynxOS:2.*:*)
  	echo sparc-unknown-lynxos${UNAME_RELEASE}
  	exit 0 ;;
      rs6000:LynxOS:2.*:*)
  	echo rs6000-unknown-lynxos${UNAME_RELEASE}
  	exit 0 ;;
      PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
  	echo powerpc-unknown-lynxos${UNAME_RELEASE}
  	exit 0 ;;
      SM[BE]S:UNIX_SV:*:*)
  	echo mips-dde-sysv${UNAME_RELEASE}
  	exit 0 ;;
      RM*:ReliantUNIX-*:*:*)
  	echo mips-sni-sysv4
  	exit 0 ;;
      RM*:SINIX-*:*:*)
  	echo mips-sni-sysv4
  	exit 0 ;;
      *:SINIX-*:*:*)
  	if uname -p 2>/dev/null >/dev/null ; then
  		UNAME_MACHINE=`(uname -p) 2>/dev/null`
  		echo ${UNAME_MACHINE}-sni-sysv4
  	else
  		echo ns32k-sni-sysv
  	fi
  	exit 0 ;;
      PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
                        # says <Richard.M.Bartel@ccMail.Census.GOV>
          echo i586-unisys-sysv4
          exit 0 ;;
      *:UNIX_System_V:4*:FTX*)
  	# From Gerald Hewes <hewes@openmarket.com>.
  	# How about differentiating between stratus architectures? -djm
  	echo hppa1.1-stratus-sysv4
  	exit 0 ;;
      *:*:*:FTX*)
  	# From seanf@swdc.stratus.com.
  	echo i860-stratus-sysv4
  	exit 0 ;;
      *:VOS:*:*)
  	# From Paul.Green@stratus.com.
  	echo hppa1.1-stratus-vos
  	exit 0 ;;
      mc68*:A/UX:*:*)
  	echo m68k-apple-aux${UNAME_RELEASE}
  	exit 0 ;;
      news*:NEWS-OS:6*:*)
  	echo mips-sony-newsos6
  	exit 0 ;;
      R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
  	if [ -d /usr/nec ]; then
  	        echo mips-nec-sysv${UNAME_RELEASE}
  	else
  	        echo mips-unknown-sysv${UNAME_RELEASE}
  	fi
          exit 0 ;;
      BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
  	echo powerpc-be-beos
  	exit 0 ;;
      BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
  	echo powerpc-apple-beos
  	exit 0 ;;
      BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
  	echo i586-pc-beos
  	exit 0 ;;
      SX-4:SUPER-UX:*:*)
  	echo sx4-nec-superux${UNAME_RELEASE}
  	exit 0 ;;
      SX-5:SUPER-UX:*:*)
  	echo sx5-nec-superux${UNAME_RELEASE}
  	exit 0 ;;
      SX-6:SUPER-UX:*:*)
  	echo sx6-nec-superux${UNAME_RELEASE}
  	exit 0 ;;
      Power*:Rhapsody:*:*)
  	echo powerpc-apple-rhapsody${UNAME_RELEASE}
  	exit 0 ;;
      *:Rhapsody:*:*)
  	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
  	exit 0 ;;
      *:Darwin:*:*)
  	echo `uname -p`-apple-darwin${UNAME_RELEASE}
  	exit 0 ;;
      *:procnto*:*:* | *:QNX:[0123456789]*:*)
  	UNAME_PROCESSOR=`uname -p`
  	if test "$UNAME_PROCESSOR" = "x86"; then
  		UNAME_PROCESSOR=i386
  		UNAME_MACHINE=pc
  	fi
  	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
  	exit 0 ;;
      *:QNX:*:4*)
  	echo i386-pc-qnx
  	exit 0 ;;
      NSR-[DGKLNPTVW]:NONSTOP_KERNEL:*:*)
  	echo nsr-tandem-nsk${UNAME_RELEASE}
  	exit 0 ;;
      *:NonStop-UX:*:*)
  	echo mips-compaq-nonstopux
  	exit 0 ;;
      BS2000:POSIX*:*:*)
  	echo bs2000-siemens-sysv
  	exit 0 ;;
      DS/*:UNIX_System_V:*:*)
  	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
  	exit 0 ;;
      *:Plan9:*:*)
  	# "uname -m" is not consistent, so use $cputype instead. 386
  	# is converted to i386 for consistency with other x86
  	# operating systems.
  	if test "$cputype" = "386"; then
  	    UNAME_MACHINE=i386
  	else
  	    UNAME_MACHINE="$cputype"
  	fi
  	echo ${UNAME_MACHINE}-unknown-plan9
  	exit 0 ;;
      i*86:OS/2:*:*)
  	# If we were able to find `uname', then EMX Unix compatibility
  	# is probably installed.
  	echo ${UNAME_MACHINE}-pc-os2-emx
  	exit 0 ;;
      *:TOPS-10:*:*)
  	echo pdp10-unknown-tops10
  	exit 0 ;;
      *:TENEX:*:*)
  	echo pdp10-unknown-tenex
  	exit 0 ;;
      KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
  	echo pdp10-dec-tops20
  	exit 0 ;;
      XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
  	echo pdp10-xkl-tops20
  	exit 0 ;;
      *:TOPS-20:*:*)
  	echo pdp10-unknown-tops20
  	exit 0 ;;
      *:ITS:*:*)
  	echo pdp10-unknown-its
  	exit 0 ;;
      i*86:XTS-300:*:STOP)
  	echo ${UNAME_MACHINE}-unknown-stop
  	exit 0 ;;
      i*86:atheos:*:*)
  	echo ${UNAME_MACHINE}-unknown-atheos
  	exit 0 ;;
  esac
  
  #echo '(No uname command or uname output not recognized.)' 1>&2
  #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
  
  eval $set_cc_for_build
  cat >$dummy.c <<EOF
  #ifdef _SEQUENT_
  # include <sys/types.h>
  # include <sys/utsname.h>
  #endif
  main ()
  {
  #if defined (sony)
  #if defined (MIPSEB)
    /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
       I don't know....  */
    printf ("mips-sony-bsd\n"); exit (0);
  #else
  #include <sys/param.h>
    printf ("m68k-sony-newsos%s\n",
  #ifdef NEWSOS4
            "4"
  #else
  	  ""
  #endif
           ); exit (0);
  #endif
  #endif
  
  #if defined (__arm) && defined (__acorn) && defined (__unix)
    printf ("arm-acorn-riscix"); exit (0);
  #endif
  
  #if defined (hp300) && !defined (hpux)
    printf ("m68k-hp-bsd\n"); exit (0);
  #endif
  
  #if defined (NeXT)
  #if !defined (__ARCHITECTURE__)
  #define __ARCHITECTURE__ "m68k"
  #endif
    int version;
    version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
    if (version < 4)
      printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
    else
      printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
    exit (0);
  #endif
  
  #if defined (MULTIMAX) || defined (n16)
  #if defined (UMAXV)
    printf ("ns32k-encore-sysv\n"); exit (0);
  #else
  #if defined (CMU)
    printf ("ns32k-encore-mach\n"); exit (0);
  #else
    printf ("ns32k-encore-bsd\n"); exit (0);
  #endif
  #endif
  #endif
  
  #if defined (__386BSD__)
    printf ("i386-pc-bsd\n"); exit (0);
  #endif
  
  #if defined (sequent)
  #if defined (i386)
    printf ("i386-sequent-dynix\n"); exit (0);
  #endif
  #if defined (ns32000)
    printf ("ns32k-sequent-dynix\n"); exit (0);
  #endif
  #endif
  
  #if defined (_SEQUENT_)
      struct utsname un;
  
      uname(&un);
  
      if (strncmp(un.version, "V2", 2) == 0) {
  	printf ("i386-sequent-ptx2\n"); exit (0);
      }
      if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
  	printf ("i386-sequent-ptx1\n"); exit (0);
      }
      printf ("i386-sequent-ptx\n"); exit (0);
  
  #endif
  
  #if defined (vax)
  # if !defined (ultrix)
  #  include <sys/param.h>
  #  if defined (BSD)
  #   if BSD == 43
        printf ("vax-dec-bsd4.3\n"); exit (0);
  #   else
  #    if BSD == 199006
        printf ("vax-dec-bsd4.3reno\n"); exit (0);
  #    else
        printf ("vax-dec-bsd\n"); exit (0);
  #    endif
  #   endif
  #  else
      printf ("vax-dec-bsd\n"); exit (0);
  #  endif
  # else
      printf ("vax-dec-ultrix\n"); exit (0);
  # endif
  #endif
  
  #if defined (alliant) && defined (i860)
    printf ("i860-alliant-bsd\n"); exit (0);
  #endif
  
    exit (1);
  }
  EOF
  
  $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && $dummy && rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0
  rm -f $dummy.c $dummy && rmdir $tmpdir
  
  # Apollos put the system type in the environment.
  
  test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
  
  # Convex versions that predate uname can use getsysinfo(1)
  
  if [ -x /usr/convex/getsysinfo ]
  then
      case `getsysinfo -f cpu_type` in
      c1*)
  	echo c1-convex-bsd
  	exit 0 ;;
      c2*)
  	if getsysinfo -f scalar_acc
  	then echo c32-convex-bsd
  	else echo c2-convex-bsd
  	fi
  	exit 0 ;;
      c34*)
  	echo c34-convex-bsd
  	exit 0 ;;
      c38*)
  	echo c38-convex-bsd
  	exit 0 ;;
      c4*)
  	echo c4-convex-bsd
  	exit 0 ;;
      esac
  fi
  
  cat >&2 <<EOF
  $0: unable to guess system type
  
  This script, last modified $timestamp, has failed to recognize
  the operating system you are using. It is advised that you
  download the most up to date version of the config scripts from
  
      ftp://ftp.gnu.org/pub/gnu/config/
  
  If the version you run ($0) is already up to date, please
  send the following data and any information you think might be
  pertinent to <config-patches@gnu.org> in order to provide the needed
  information to handle your system.
  
  config.guess timestamp = $timestamp
  
  uname -m = `(uname -m) 2>/dev/null || echo unknown`
  uname -r = `(uname -r) 2>/dev/null || echo unknown`
  uname -s = `(uname -s) 2>/dev/null || echo unknown`
  uname -v = `(uname -v) 2>/dev/null || echo unknown`
  
  /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
  /bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
  
  hostinfo               = `(hostinfo) 2>/dev/null`
  /bin/universe          = `(/bin/universe) 2>/dev/null`
  /usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
  /bin/arch              = `(/bin/arch) 2>/dev/null`
  /usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
  /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
  
  UNAME_MACHINE = ${UNAME_MACHINE}
  UNAME_RELEASE = ${UNAME_RELEASE}
  UNAME_SYSTEM  = ${UNAME_SYSTEM}
  UNAME_VERSION = ${UNAME_VERSION}
  EOF
  
  exit 1
  
  # Local variables:
  # eval: (add-hook 'write-file-hooks 'time-stamp)
  # time-stamp-start: "timestamp='"
  # time-stamp-format: "%:y-%02m-%02d"
  # time-stamp-end: "'"
  # End:
  Index: ossp-pkg/titraq/config.sub
  ============================================================
  $ cvs update -p -r1.1.1.1 config.sub
  #! /bin/sh
  # Configuration validation subroutine script.
  #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
  #   2000, 2001, 2002 Free Software Foundation, Inc.
  
  timestamp='2002-09-05'
  
  # This file is (in principle) common to ALL GNU software.
  # The presence of a machine in this file suggests that SOME GNU software
  # can handle that machine.  It does not imply ALL GNU software can.
  #
  # This file is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 2 of the License, or
  # (at your option) any later version.
  #
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  #
  # You should have received a copy of the GNU General Public License
  # along with this program; if not, write to the Free Software
  # Foundation, Inc., 59 Temple Place - Suite 330,
  # Boston, MA 02111-1307, USA.
  
  # As a special exception to the GNU General Public License, if you
  # distribute this file as part of a program that contains a
  # configuration script generated by Autoconf, you may include it under
  # the same distribution terms that you use for the rest of that program.
  
  # Please send patches to <config-patches@gnu.org>.  Submit a context
  # diff and a properly formatted ChangeLog entry.
  #
  # Configuration subroutine to validate and canonicalize a configuration type.
  # Supply the specified configuration type as an argument.
  # If it is invalid, we print an error message on stderr and exit with code 1.
  # Otherwise, we print the canonical config type on stdout and succeed.
  
  # This file is supposed to be the same for all GNU packages
  # and recognize all the CPU types, system types and aliases
  # that are meaningful with *any* GNU software.
  # Each package is responsible for reporting which valid configurations
  # it does not support.  The user should be able to distinguish
  # a failure to support a valid configuration from a meaningless
  # configuration.
  
  # The goal of this file is to map all the various variations of a given
  # machine specification into a single specification in the form:
  #	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
  # or in some cases, the newer four-part form:
  #	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
  # It is wrong to echo any other type of specification.
  
  me=`echo "$0" | sed -e 's,.*/,,'`
  
  usage="\
  Usage: $0 [OPTION] CPU-MFR-OPSYS
         $0 [OPTION] ALIAS
  
  Canonicalize a configuration name.
  
  Operation modes:
    -h, --help         print this help, then exit
    -t, --time-stamp   print date of last modification, then exit
    -v, --version      print version number, then exit
  
  Report bugs and patches to <config-patches@gnu.org>."
  
  version="\
  GNU config.sub ($timestamp)
  
  Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
  Free Software Foundation, Inc.
  
  This is free software; see the source for copying conditions.  There is NO
  warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
  
  help="
  Try \`$me --help' for more information."
  
  # Parse command line
  while test $# -gt 0 ; do
    case $1 in
      --time-stamp | --time* | -t )
         echo "$timestamp" ; exit 0 ;;
      --version | -v )
         echo "$version" ; exit 0 ;;
      --help | --h* | -h )
         echo "$usage"; exit 0 ;;
      -- )     # Stop option processing
         shift; break ;;
      - )	# Use stdin as input.
         break ;;
      -* )
         echo "$me: invalid option $1$help"
         exit 1 ;;
  
      *local*)
         # First pass through any local machine types.
         echo $1
         exit 0;;
  
      * )
         break ;;
    esac
  done
  
  case $# in
   0) echo "$me: missing argument$help" >&2
      exit 1;;
   1) ;;
   *) echo "$me: too many arguments$help" >&2
      exit 1;;
  esac
  
  # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
  # Here we must recognize all the valid KERNEL-OS combinations.
  maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
  case $maybe_os in
    nto-qnx* | linux-gnu* | freebsd*-gnu* | storm-chaos* | os2-emx* | windows32-* | rtmk-nova*)
      os=-$maybe_os
      basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
      ;;
    *)
      basic_machine=`echo $1 | sed 's/-[^-]*$//'`
      if [ $basic_machine != $1 ]
      then os=`echo $1 | sed 's/.*-/-/'`
      else os=; fi
      ;;
  esac
  
  ### Let's recognize common machines as not being operating systems so
  ### that things like config.sub decstation-3100 work.  We also
  ### recognize some manufacturers as not being operating systems, so we
  ### can provide default operating systems below.
  case $os in
  	-sun*os*)
  		# Prevent following clause from handling this invalid input.
  		;;
  	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
  	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
  	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
  	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
  	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
  	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
  	-apple | -axis)
  		os=
  		basic_machine=$1
  		;;
  	-sim | -cisco | -oki | -wec | -winbond)
  		os=
  		basic_machine=$1
  		;;
  	-scout)
  		;;
  	-wrs)
  		os=-vxworks
  		basic_machine=$1
  		;;
  	-chorusos*)
  		os=-chorusos
  		basic_machine=$1
  		;;
   	-chorusrdb)
   		os=-chorusrdb
  		basic_machine=$1
   		;;
  	-hiux*)
  		os=-hiuxwe2
  		;;
  	-sco5)
  		os=-sco3.2v5
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  		;;
  	-sco4)
  		os=-sco3.2v4
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  		;;
  	-sco3.2.[4-9]*)
  		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  		;;
  	-sco3.2v[4-9]*)
  		# Don't forget version if it is 3.2v4 or newer.
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  		;;
  	-sco*)
  		os=-sco3.2v2
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  		;;
  	-udk*)
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  		;;
  	-isc)
  		os=-isc2.2
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  		;;
  	-clix*)
  		basic_machine=clipper-intergraph
  		;;
  	-isc*)
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  		;;
  	-lynx*)
  		os=-lynxos
  		;;
  	-ptx*)
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
  		;;
  	-windowsnt*)
  		os=`echo $os | sed -e 's/windowsnt/winnt/'`
  		;;
  	-psos*)
  		os=-psos
  		;;
  	-mint | -mint[0-9]*)
  		basic_machine=m68k-atari
  		os=-mint
  		;;
  esac
  
  # Decode aliases for certain CPU-COMPANY combinations.
  case $basic_machine in
  	# Recognize the basic CPU types without company name.
  	# Some are omitted here because they have special meanings below.
  	1750a | 580 \
  	| a29k \
  	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
  	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
  	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
  	| clipper \
  	| d10v | d30v | dlx | dsp16xx \
  	| fr30 | frv \
  	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
  	| i370 | i860 | i960 | ia64 \
  	| ip2k \
  	| m32r | m68000 | m68k | m88k | mcore \
  	| mips | mipsbe | mipseb | mipsel | mipsle \
  	| mips16 \
  	| mips64 | mips64el \
  	| mips64vr | mips64vrel \
  	| mips64orion | mips64orionel \
  	| mips64vr4100 | mips64vr4100el \
  	| mips64vr4300 | mips64vr4300el \
  	| mips64vr5000 | mips64vr5000el \
  	| mipsisa32 | mipsisa32el \
  	| mipsisa64 | mipsisa64el \
  	| mipsisa64sb1 | mipsisa64sb1el \
  	| mipsisa64sr71k | mipsisa64sr71kel \
  	| mipstx39 | mipstx39el \
  	| mn10200 | mn10300 \
  	| ns16k | ns32k \
  	| openrisc | or32 \
  	| pdp10 | pdp11 | pj | pjl \
  	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
  	| pyramid \
  	| sh | sh[1234] | sh3e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
  	| sh64 | sh64le \
  	| sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \
  	| strongarm \
  	| tahoe | thumb | tic80 | tron \
  	| v850 | v850e \
  	| we32k \
  	| x86 | xscale | xstormy16 | xtensa \
  	| z8k)
  		basic_machine=$basic_machine-unknown
  		;;
  	m6811 | m68hc11 | m6812 | m68hc12)
  		# Motorola 68HC11/12.
  		basic_machine=$basic_machine-unknown
  		os=-none
  		;;
  	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
  		;;
  
  	# We use `pc' rather than `unknown'
  	# because (1) that's what they normally are, and
  	# (2) the word "unknown" tends to confuse beginning users.
  	i*86 | x86_64)
  	  basic_machine=$basic_machine-pc
  	  ;;
  	# Object if more than one company name word.
  	*-*-*)
  		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
  		exit 1
  		;;
  	# Recognize the basic CPU types with company name.
  	580-* \
  	| a29k-* \
  	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
  	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
  	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
  	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
  	| avr-* \
  	| bs2000-* \
  	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* \
  	| clipper-* | cydra-* \
  	| d10v-* | d30v-* | dlx-* \
  	| elxsi-* \
  	| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
  	| h8300-* | h8500-* \
  	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
  	| i*86-* | i860-* | i960-* | ia64-* \
  	| ip2k-* \
  	| m32r-* \
  	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
  	| m88110-* | m88k-* | mcore-* \
  	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
  	| mips16-* \
  	| mips64-* | mips64el-* \
  	| mips64vr-* | mips64vrel-* \
  	| mips64orion-* | mips64orionel-* \
  	| mips64vr4100-* | mips64vr4100el-* \
  	| mips64vr4300-* | mips64vr4300el-* \
  	| mips64vr5000-* | mips64vr5000el-* \
  	| mipsisa32-* | mipsisa32el-* \
  	| mipsisa64-* | mipsisa64el-* \
  	| mipsisa64sb1-* | mipsisa64sb1el-* \
  	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
  	| mipstx39 | mipstx39el \
  	| none-* | np1-* | ns16k-* | ns32k-* \
  	| orion-* \
  	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
  	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
  	| pyramid-* \
  	| romp-* | rs6000-* \
  	| sh-* | sh[1234]-* | sh3e-* | sh[34]eb-* | shbe-* \
  	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
  	| sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
  	| sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
  	| tahoe-* | thumb-* | tic30-* | tic4x-* | tic54x-* | tic80-* | tron-* \
  	| v850-* | v850e-* | vax-* \
  	| we32k-* \
  	| x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
  	| xtensa-* \
  	| ymp-* \
  	| z8k-*)
  		;;
  	# Recognize the various machine names and aliases which stand
  	# for a CPU type and a company and sometimes even an OS.
  	386bsd)
  		basic_machine=i386-unknown
  		os=-bsd
  		;;
  	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
  		basic_machine=m68000-att
  		;;
  	3b*)
  		basic_machine=we32k-att
  		;;
  	a29khif)
  		basic_machine=a29k-amd
  		os=-udi
  		;;
  	adobe68k)
  		basic_machine=m68010-adobe
  		os=-scout
  		;;
  	alliant | fx80)
  		basic_machine=fx80-alliant
  		;;
  	altos | altos3068)
  		basic_machine=m68k-altos
  		;;
  	am29k)
  		basic_machine=a29k-none
  		os=-bsd
  		;;
  	amdahl)
  		basic_machine=580-amdahl
  		os=-sysv
  		;;
  	amiga | amiga-*)
  		basic_machine=m68k-unknown
  		;;
  	amigaos | amigados)
  		basic_machine=m68k-unknown
  		os=-amigaos
  		;;
  	amigaunix | amix)
  		basic_machine=m68k-unknown
  		os=-sysv4
  		;;
  	apollo68)
  		basic_machine=m68k-apollo
  		os=-sysv
  		;;
  	apollo68bsd)
  		basic_machine=m68k-apollo
  		os=-bsd
  		;;
  	aux)
  		basic_machine=m68k-apple
  		os=-aux
  		;;
  	balance)
  		basic_machine=ns32k-sequent
  		os=-dynix
  		;;
  	c90)
  		basic_machine=c90-cray
  		os=-unicos
  		;;
  	convex-c1)
  		basic_machine=c1-convex
  		os=-bsd
  		;;
  	convex-c2)
  		basic_machine=c2-convex
  		os=-bsd
  		;;
  	convex-c32)
  		basic_machine=c32-convex
  		os=-bsd
  		;;
  	convex-c34)
  		basic_machine=c34-convex
  		os=-bsd
  		;;
  	convex-c38)
  		basic_machine=c38-convex
  		os=-bsd
  		;;
  	cray | j90)
  		basic_machine=j90-cray
  		os=-unicos
  		;;
  	crds | unos)
  		basic_machine=m68k-crds
  		;;
  	cris | cris-* | etrax*)
  		basic_machine=cris-axis
  		;;
  	da30 | da30-*)
  		basic_machine=m68k-da30
  		;;
  	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
  		basic_machine=mips-dec
  		;;
  	decsystem10* | dec10*)
  		basic_machine=pdp10-dec
  		os=-tops10
  		;;
  	decsystem20* | dec20*)
  		basic_machine=pdp10-dec
  		os=-tops20
  		;;
  	delta | 3300 | motorola-3300 | motorola-delta \
  	      | 3300-motorola | delta-motorola)
  		basic_machine=m68k-motorola
  		;;
  	delta88)
  		basic_machine=m88k-motorola
  		os=-sysv3
  		;;
  	dpx20 | dpx20-*)
  		basic_machine=rs6000-bull
  		os=-bosx
  		;;
  	dpx2* | dpx2*-bull)
  		basic_machine=m68k-bull
  		os=-sysv3
  		;;
  	ebmon29k)
  		basic_machine=a29k-amd
  		os=-ebmon
  		;;
  	elxsi)
  		basic_machine=elxsi-elxsi
  		os=-bsd
  		;;
  	encore | umax | mmax)
  		basic_machine=ns32k-encore
  		;;
  	es1800 | OSE68k | ose68k | ose | OSE)
  		basic_machine=m68k-ericsson
  		os=-ose
  		;;
  	fx2800)
  		basic_machine=i860-alliant
  		;;
  	genix)
  		basic_machine=ns32k-ns
  		;;
  	gmicro)
  		basic_machine=tron-gmicro
  		os=-sysv
  		;;
  	go32)
  		basic_machine=i386-pc
  		os=-go32
  		;;
  	h3050r* | hiux*)
  		basic_machine=hppa1.1-hitachi
  		os=-hiuxwe2
  		;;
  	h8300hms)
  		basic_machine=h8300-hitachi
  		os=-hms
  		;;
  	h8300xray)
  		basic_machine=h8300-hitachi
  		os=-xray
  		;;
  	h8500hms)
  		basic_machine=h8500-hitachi
  		os=-hms
  		;;
  	harris)
  		basic_machine=m88k-harris
  		os=-sysv3
  		;;
  	hp300-*)
  		basic_machine=m68k-hp
  		;;
  	hp300bsd)
  		basic_machine=m68k-hp
  		os=-bsd
  		;;
  	hp300hpux)
  		basic_machine=m68k-hp
  		os=-hpux
  		;;
  	hp3k9[0-9][0-9] | hp9[0-9][0-9])
  		basic_machine=hppa1.0-hp
  		;;
  	hp9k2[0-9][0-9] | hp9k31[0-9])
  		basic_machine=m68000-hp
  		;;
  	hp9k3[2-9][0-9])
  		basic_machine=m68k-hp
  		;;
  	hp9k6[0-9][0-9] | hp6[0-9][0-9])
  		basic_machine=hppa1.0-hp
  		;;
  	hp9k7[0-79][0-9] | hp7[0-79][0-9])
  		basic_machine=hppa1.1-hp
  		;;
  	hp9k78[0-9] | hp78[0-9])
  		# FIXME: really hppa2.0-hp
  		basic_machine=hppa1.1-hp
  		;;
  	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
  		# FIXME: really hppa2.0-hp
  		basic_machine=hppa1.1-hp
  		;;
  	hp9k8[0-9][13679] | hp8[0-9][13679])
  		basic_machine=hppa1.1-hp
  		;;
  	hp9k8[0-9][0-9] | hp8[0-9][0-9])
  		basic_machine=hppa1.0-hp
  		;;
  	hppa-next)
  		os=-nextstep3
  		;;
  	hppaosf)
  		basic_machine=hppa1.1-hp
  		os=-osf
  		;;
  	hppro)
  		basic_machine=hppa1.1-hp
  		os=-proelf
  		;;
  	i370-ibm* | ibm*)
  		basic_machine=i370-ibm
  		;;
  # I'm not sure what "Sysv32" means.  Should this be sysv3.2?
  	i*86v32)
  		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
  		os=-sysv32
  		;;
  	i*86v4*)
  		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
  		os=-sysv4
  		;;
  	i*86v)
  		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
  		os=-sysv
  		;;
  	i*86sol2)
  		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
  		os=-solaris2
  		;;
  	i386mach)
  		basic_machine=i386-mach
  		os=-mach
  		;;
  	i386-vsta | vsta)
  		basic_machine=i386-unknown
  		os=-vsta
  		;;
  	iris | iris4d)
  		basic_machine=mips-sgi
  		case $os in
  		    -irix*)
  			;;
  		    *)
  			os=-irix4
  			;;
  		esac
  		;;
  	isi68 | isi)
  		basic_machine=m68k-isi
  		os=-sysv
  		;;
  	m88k-omron*)
  		basic_machine=m88k-omron
  		;;
  	magnum | m3230)
  		basic_machine=mips-mips
  		os=-sysv
  		;;
  	merlin)
  		basic_machine=ns32k-utek
  		os=-sysv
  		;;
  	mingw32)
  		basic_machine=i386-pc
  		os=-mingw32
  		;;
  	miniframe)
  		basic_machine=m68000-convergent
  		;;
  	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
  		basic_machine=m68k-atari
  		os=-mint
  		;;
  	mips3*-*)
  		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
  		;;
  	mips3*)
  		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
  		;;
  	mmix*)
  		basic_machine=mmix-knuth
  		os=-mmixware
  		;;
  	monitor)
  		basic_machine=m68k-rom68k
  		os=-coff
  		;;
  	morphos)
  		basic_machine=powerpc-unknown
  		os=-morphos
  		;;
  	msdos)
  		basic_machine=i386-pc
  		os=-msdos
  		;;
  	mvs)
  		basic_machine=i370-ibm
  		os=-mvs
  		;;
  	ncr3000)
  		basic_machine=i486-ncr
  		os=-sysv4
  		;;
  	netbsd386)
  		basic_machine=i386-unknown
  		os=-netbsd
  		;;
  	netwinder)
  		basic_machine=armv4l-rebel
  		os=-linux
  		;;
  	news | news700 | news800 | news900)
  		basic_machine=m68k-sony
  		os=-newsos
  		;;
  	news1000)
  		basic_machine=m68030-sony
  		os=-newsos
  		;;
  	news-3600 | risc-news)
  		basic_machine=mips-sony
  		os=-newsos
  		;;
  	necv70)
  		basic_machine=v70-nec
  		os=-sysv
  		;;
  	next | m*-next )
  		basic_machine=m68k-next
  		case $os in
  		    -nextstep* )
  			;;
  		    -ns2*)
  		      os=-nextstep2
  			;;
  		    *)
  		      os=-nextstep3
  			;;
  		esac
  		;;
  	nh3000)
  		basic_machine=m68k-harris
  		os=-cxux
  		;;
  	nh[45]000)
  		basic_machine=m88k-harris
  		os=-cxux
  		;;
  	nindy960)
  		basic_machine=i960-intel
  		os=-nindy
  		;;
  	mon960)
  		basic_machine=i960-intel
  		os=-mon960
  		;;
  	nonstopux)
  		basic_machine=mips-compaq
  		os=-nonstopux
  		;;
  	np1)
  		basic_machine=np1-gould
  		;;
  	nsr-tandem)
  		basic_machine=nsr-tandem
  		;;
  	op50n-* | op60c-*)
  		basic_machine=hppa1.1-oki
  		os=-proelf
  		;;
  	or32 | or32-*)
  		basic_machine=or32-unknown
  		os=-coff
  		;;
  	OSE68000 | ose68000)
  		basic_machine=m68000-ericsson
  		os=-ose
  		;;
  	os68k)
  		basic_machine=m68k-none
  		os=-os68k
  		;;
  	pa-hitachi)
  		basic_machine=hppa1.1-hitachi
  		os=-hiuxwe2
  		;;
  	paragon)
  		basic_machine=i860-intel
  		os=-osf
  		;;
  	pbd)
  		basic_machine=sparc-tti
  		;;
  	pbb)
  		basic_machine=m68k-tti
  		;;
  	pc532 | pc532-*)
  		basic_machine=ns32k-pc532
  		;;
  	pentium | p5 | k5 | k6 | nexgen | viac3)
  		basic_machine=i586-pc
  		;;
  	pentiumpro | p6 | 6x86 | athlon | athlon_*)
  		basic_machine=i686-pc
  		;;
  	pentiumii | pentium2)
  		basic_machine=i686-pc
  		;;
  	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
  		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
  		;;
  	pentiumpro-* | p6-* | 6x86-* | athlon-*)
  		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
  		;;
  	pentiumii-* | pentium2-*)
  		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
  		;;
  	pn)
  		basic_machine=pn-gould
  		;;
  	power)	basic_machine=power-ibm
  		;;
  	ppc)	basic_machine=powerpc-unknown
  		;;
  	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
  		;;
  	ppcle | powerpclittle | ppc-le | powerpc-little)
  		basic_machine=powerpcle-unknown
  		;;
  	ppcle-* | powerpclittle-*)
  		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
  		;;
  	ppc64)	basic_machine=powerpc64-unknown
  		;;
  	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
  		;;
  	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
  		basic_machine=powerpc64le-unknown
  		;;
  	ppc64le-* | powerpc64little-*)
  		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
  		;;
  	ps2)
  		basic_machine=i386-ibm
  		;;
  	pw32)
  		basic_machine=i586-unknown
  		os=-pw32
  		;;
  	rom68k)
  		basic_machine=m68k-rom68k
  		os=-coff
  		;;
  	rm[46]00)
  		basic_machine=mips-siemens
  		;;
  	rtpc | rtpc-*)
  		basic_machine=romp-ibm
  		;;
  	s390 | s390-*)
  		basic_machine=s390-ibm
  		;;
  	s390x | s390x-*)
  		basic_machine=s390x-ibm
  		;;
  	sa29200)
  		basic_machine=a29k-amd
  		os=-udi
  		;;
  	sb1)
  		basic_machine=mipsisa64sb1-unknown
  		;;
  	sb1el)
  		basic_machine=mipsisa64sb1el-unknown
  		;;
  	sequent)
  		basic_machine=i386-sequent
  		;;
  	sh)
  		basic_machine=sh-hitachi
  		os=-hms
  		;;
  	sparclite-wrs | simso-wrs)
  		basic_machine=sparclite-wrs
  		os=-vxworks
  		;;
  	sps7)
  		basic_machine=m68k-bull
  		os=-sysv2
  		;;
  	spur)
  		basic_machine=spur-unknown
  		;;
  	st2000)
  		basic_machine=m68k-tandem
  		;;
  	stratus)
  		basic_machine=i860-stratus
  		os=-sysv4
  		;;
  	sun2)
  		basic_machine=m68000-sun
  		;;
  	sun2os3)
  		basic_machine=m68000-sun
  		os=-sunos3
  		;;
  	sun2os4)
  		basic_machine=m68000-sun
  		os=-sunos4
  		;;
  	sun3os3)
  		basic_machine=m68k-sun
  		os=-sunos3
  		;;
  	sun3os4)
  		basic_machine=m68k-sun
  		os=-sunos4
  		;;
  	sun4os3)
  		basic_machine=sparc-sun
  		os=-sunos3
  		;;
  	sun4os4)
  		basic_machine=sparc-sun
  		os=-sunos4
  		;;
  	sun4sol2)
  		basic_machine=sparc-sun
  		os=-solaris2
  		;;
  	sun3 | sun3-*)
  		basic_machine=m68k-sun
  		;;
  	sun4)
  		basic_machine=sparc-sun
  		;;
  	sun386 | sun386i | roadrunner)
  		basic_machine=i386-sun
  		;;
  	sv1)
  		basic_machine=sv1-cray
  		os=-unicos
  		;;
  	symmetry)
  		basic_machine=i386-sequent
  		os=-dynix
  		;;
  	t3d)
  		basic_machine=alpha-cray
  		os=-unicos
  		;;
  	t3e)
  		basic_machine=alphaev5-cray
  		os=-unicos
  		;;
  	t90)
  		basic_machine=t90-cray
  		os=-unicos
  		;;
          tic4x | c4x*)
  		basic_machine=tic4x-unknown
  		os=-coff
  		;;
  	tic54x | c54x*)
  		basic_machine=tic54x-unknown
  		os=-coff
  		;;
  	tx39)
  		basic_machine=mipstx39-unknown
  		;;
  	tx39el)
  		basic_machine=mipstx39el-unknown
  		;;
  	toad1)
  		basic_machine=pdp10-xkl
  		os=-tops20
  		;;
  	tower | tower-32)
  		basic_machine=m68k-ncr
  		;;
  	udi29k)
  		basic_machine=a29k-amd
  		os=-udi
  		;;
  	ultra3)
  		basic_machine=a29k-nyu
  		os=-sym1
  		;;
  	v810 | necv810)
  		basic_machine=v810-nec
  		os=-none
  		;;
  	vaxv)
  		basic_machine=vax-dec
  		os=-sysv
  		;;
  	vms)
  		basic_machine=vax-dec
  		os=-vms
  		;;
  	vpp*|vx|vx-*)
  		basic_machine=f301-fujitsu
  		;;
  	vxworks960)
  		basic_machine=i960-wrs
  		os=-vxworks
  		;;
  	vxworks68)
  		basic_machine=m68k-wrs
  		os=-vxworks
  		;;
  	vxworks29k)
  		basic_machine=a29k-wrs
  		os=-vxworks
  		;;
  	w65*)
  		basic_machine=w65-wdc
  		os=-none
  		;;
  	w89k-*)
  		basic_machine=hppa1.1-winbond
  		os=-proelf
  		;;
  	windows32)
  		basic_machine=i386-pc
  		os=-windows32-msvcrt
  		;;
  	xps | xps100)
  		basic_machine=xps100-honeywell
  		;;
  	ymp)
  		basic_machine=ymp-cray
  		os=-unicos
  		;;
  	z8k-*-coff)
  		basic_machine=z8k-unknown
  		os=-sim
  		;;
  	none)
  		basic_machine=none-none
  		os=-none
  		;;
  
  # Here we handle the default manufacturer of certain CPU types.  It is in
  # some cases the only manufacturer, in others, it is the most popular.
  	w89k)
  		basic_machine=hppa1.1-winbond
  		;;
  	op50n)
  		basic_machine=hppa1.1-oki
  		;;
  	op60c)
  		basic_machine=hppa1.1-oki
  		;;
  	romp)
  		basic_machine=romp-ibm
  		;;
  	rs6000)
  		basic_machine=rs6000-ibm
  		;;
  	vax)
  		basic_machine=vax-dec
  		;;
  	pdp10)
  		# there are many clones, so DEC is not a safe bet
  		basic_machine=pdp10-unknown
  		;;
  	pdp11)
  		basic_machine=pdp11-dec
  		;;
  	we32k)
  		basic_machine=we32k-att
  		;;
  	sh3 | sh4 | sh3eb | sh4eb | sh[1234]le | sh3ele)
  		basic_machine=sh-unknown
  		;;
  	sh64)
  		basic_machine=sh64-unknown
  		;;
  	sparc | sparcv9 | sparcv9b)
  		basic_machine=sparc-sun
  		;;
  	cydra)
  		basic_machine=cydra-cydrome
  		;;
  	orion)
  		basic_machine=orion-highlevel
  		;;
  	orion105)
  		basic_machine=clipper-highlevel
  		;;
  	mac | mpw | mac-mpw)
  		basic_machine=m68k-apple
  		;;
  	pmac | pmac-mpw)
  		basic_machine=powerpc-apple
  		;;
  	*-unknown)
  		# Make sure to match an already-canonicalized machine name.
  		;;
  	*)
  		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
  		exit 1
  		;;
  esac
  
  # Here we canonicalize certain aliases for manufacturers.
  case $basic_machine in
  	*-digital*)
  		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
  		;;
  	*-commodore*)
  		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
  		;;
  	*)
  		;;
  esac
  
  # Decode manufacturer-specific aliases for certain operating systems.
  
  if [ x"$os" != x"" ]
  then
  case $os in
          # First match some system type aliases
          # that might get confused with valid system types.
  	# -solaris* is a basic system type, with this one exception.
  	-solaris1 | -solaris1.*)
  		os=`echo $os | sed -e 's|solaris1|sunos4|'`
  		;;
  	-solaris)
  		os=-solaris2
  		;;
  	-svr4*)
  		os=-sysv4
  		;;
  	-unixware*)
  		os=-sysv4.2uw
  		;;
  	-gnu/linux*)
  		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
  		;;
  	# First accept the basic system types.
  	# The portable systems comes first.
  	# Each alternative MUST END IN A *, to match a version number.
  	# -sysv* is not here because it comes later, after sysvr4.
  	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
  	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
  	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
  	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
  	      | -aos* \
  	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
  	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
  	      | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
  	      | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
  	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
  	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
  	      | -chorusos* | -chorusrdb* \
  	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
  	      | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
  	      | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
  	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
  	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
  	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
  	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* | -powermax*)
  	# Remember, each alternative MUST END IN *, to match a version number.
  		;;
  	-qnx*)
  		case $basic_machine in
  		    x86-* | i*86-*)
  			;;
  		    *)
  			os=-nto$os
  			;;
  		esac
  		;;
  	-nto*)
  		os=-nto-qnx
  		;;
  	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
  	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
  	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
  		;;
  	-mac*)
  		os=`echo $os | sed -e 's|mac|macos|'`
  		;;
  	-linux*)
  		os=`echo $os | sed -e 's|linux|linux-gnu|'`
  		;;
  	-sunos5*)
  		os=`echo $os | sed -e 's|sunos5|solaris2|'`
  		;;
  	-sunos6*)
  		os=`echo $os | sed -e 's|sunos6|solaris3|'`
  		;;
  	-opened*)
  		os=-openedition
  		;;
  	-wince*)
  		os=-wince
  		;;
  	-osfrose*)
  		os=-osfrose
  		;;
  	-osf*)
  		os=-osf
  		;;
  	-utek*)
  		os=-bsd
  		;;
  	-dynix*)
  		os=-bsd
  		;;
  	-acis*)
  		os=-aos
  		;;
  	-atheos*)
  		os=-atheos
  		;;
  	-386bsd)
  		os=-bsd
  		;;
  	-ctix* | -uts*)
  		os=-sysv
  		;;
  	-nova*)
  		os=-rtmk-nova
  		;;
  	-ns2 )
  		os=-nextstep2
  		;;
  	-nsk*)
  		os=-nsk
  		;;
  	# Preserve the version number of sinix5.
  	-sinix5.*)
  		os=`echo $os | sed -e 's|sinix|sysv|'`
  		;;
  	-sinix*)
  		os=-sysv4
  		;;
  	-triton*)
  		os=-sysv3
  		;;
  	-oss*)
  		os=-sysv3
  		;;
  	-svr4)
  		os=-sysv4
  		;;
  	-svr3)
  		os=-sysv3
  		;;
  	-sysvr4)
  		os=-sysv4
  		;;
  	# This must come after -sysvr4.
  	-sysv*)
  		;;
  	-ose*)
  		os=-ose
  		;;
  	-es1800*)
  		os=-ose
  		;;
  	-xenix)
  		os=-xenix
  		;;
  	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
  		os=-mint
  		;;
  	-none)
  		;;
  	*)
  		# Get rid of the `-' at the beginning of $os.
  		os=`echo $os | sed 's/[^-]*-//'`
  		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
  		exit 1
  		;;
  esac
  else
  
  # Here we handle the default operating systems that come with various machines.
  # The value should be what the vendor currently ships out the door with their
  # machine or put another way, the most popular os provided with the machine.
  
  # Note that if you're going to try to match "-MANUFACTURER" here (say,
  # "-sun"), then you have to tell the case statement up towards the top
  # that MANUFACTURER isn't an operating system.  Otherwise, code above
  # will signal an error saying that MANUFACTURER isn't an operating
  # system, and we'll never get to this point.
  
  case $basic_machine in
  	*-acorn)
  		os=-riscix1.2
  		;;
  	arm*-rebel)
  		os=-linux
  		;;
  	arm*-semi)
  		os=-aout
  		;;
  	# This must come before the *-dec entry.
  	pdp10-*)
  		os=-tops20
  		;;
  	pdp11-*)
  		os=-none
  		;;
  	*-dec | vax-*)
  		os=-ultrix4.2
  		;;
  	m68*-apollo)
  		os=-domain
  		;;
  	i386-sun)
  		os=-sunos4.0.2
  		;;
  	m68000-sun)
  		os=-sunos3
  		# This also exists in the configure program, but was not the
  		# default.
  		# os=-sunos4
  		;;
  	m68*-cisco)
  		os=-aout
  		;;
  	mips*-cisco)
  		os=-elf
  		;;
  	mips*-*)
  		os=-elf
  		;;
  	or32-*)
  		os=-coff
  		;;
  	*-tti)	# must be before sparc entry or we get the wrong os.
  		os=-sysv3
  		;;
  	sparc-* | *-sun)
  		os=-sunos4.1.1
  		;;
  	*-be)
  		os=-beos
  		;;
  	*-ibm)
  		os=-aix
  		;;
  	*-wec)
  		os=-proelf
  		;;
  	*-winbond)
  		os=-proelf
  		;;
  	*-oki)
  		os=-proelf
  		;;
  	*-hp)
  		os=-hpux
  		;;
  	*-hitachi)
  		os=-hiux
  		;;
  	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
  		os=-sysv
  		;;
  	*-cbm)
  		os=-amigaos
  		;;
  	*-dg)
  		os=-dgux
  		;;
  	*-dolphin)
  		os=-sysv3
  		;;
  	m68k-ccur)
  		os=-rtu
  		;;
  	m88k-omron*)
  		os=-luna
  		;;
  	*-next )
  		os=-nextstep
  		;;
  	*-sequent)
  		os=-ptx
  		;;
  	*-crds)
  		os=-unos
  		;;
  	*-ns)
  		os=-genix
  		;;
  	i370-*)
  		os=-mvs
  		;;
  	*-next)
  		os=-nextstep3
  		;;
  	*-gould)
  		os=-sysv
  		;;
  	*-highlevel)
  		os=-bsd
  		;;
  	*-encore)
  		os=-bsd
  		;;
  	*-sgi)
  		os=-irix
  		;;
  	*-siemens)
  		os=-sysv4
  		;;
  	*-masscomp)
  		os=-rtu
  		;;
  	f30[01]-fujitsu | f700-fujitsu)
  		os=-uxpv
  		;;
  	*-rom68k)
  		os=-coff
  		;;
  	*-*bug)
  		os=-coff
  		;;
  	*-apple)
  		os=-macos
  		;;
  	*-atari*)
  		os=-mint
  		;;
  	*)
  		os=-none
  		;;
  esac
  fi
  
  # Here we handle the case where we know the os, and the CPU type, but not the
  # manufacturer.  We pick the logical manufacturer.
  vendor=unknown
  case $basic_machine in
  	*-unknown)
  		case $os in
  			-riscix*)
  				vendor=acorn
  				;;
  			-sunos*)
  				vendor=sun
  				;;
  			-aix*)
  				vendor=ibm
  				;;
  			-beos*)
  				vendor=be
  				;;
  			-hpux*)
  				vendor=hp
  				;;
  			-mpeix*)
  				vendor=hp
  				;;
  			-hiux*)
  				vendor=hitachi
  				;;
  			-unos*)
  				vendor=crds
  				;;
  			-dgux*)
  				vendor=dg
  				;;
  			-luna*)
  				vendor=omron
  				;;
  			-genix*)
  				vendor=ns
  				;;
  			-mvs* | -opened*)
  				vendor=ibm
  				;;
  			-ptx*)
  				vendor=sequent
  				;;
  			-vxsim* | -vxworks* | -windiss*)
  				vendor=wrs
  				;;
  			-aux*)
  				vendor=apple
  				;;
  			-hms*)
  				vendor=hitachi
  				;;
  			-mpw* | -macos*)
  				vendor=apple
  				;;
  			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
  				vendor=atari
  				;;
  			-vos*)
  				vendor=stratus
  				;;
  		esac
  		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
  		;;
  esac
  
  echo $basic_machine$os
  exit 0
  
  # Local variables:
  # eval: (add-hook 'write-file-hooks 'time-stamp)
  # time-stamp-start: "timestamp='"
  # time-stamp-format: "%:y-%02m-%02d"
  # time-stamp-end: "'"
  # End:
  Index: ossp-pkg/titraq/configure
  ============================================================
  $ cvs update -p -r1.1.1.1 configure | uuencode configure
  Index: ossp-pkg/titraq/configure.in
  ============================================================
  $ cvs update -p -r1.1.1.1 configure.in
  ##
  ##  OSSP titraq - Graphical user interface for time accounting
  ##  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  ##  Copyright (c) 2002 Ralf S. Engelschall
  ##
  ##  This file is part of OSSP GUI, a graphical user interface
  ##  for OSSP which can be found at http://www.ossp.org/
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  configure.in: Plain old documentation file
  ##
  
  dnl Version requirement and information
  AC_PREREQ(2.53)
  AC_REVISION(1.0)
  
  dnl Process this file with autoconf
  AC_INIT
  AC_CONFIG_HEADER(ac_config.h)
  AC_LANG_CPLUSPLUS
  
  dnl Checks basic requirements
  AC_PROG_CXX
  AC_PROG_CXXCPP
  AC_PROG_INSTALL
  
  AC_PROG_CC
  AC_PROG_CPP
  AC_PROG_CC_STDC
  AC_HEADER_STDC
  
  dnl Portable thread conf from acx_pthread.m4 autoconf macro
  ACX_PTHREAD
  CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
  CXXFLAGS="$CXXFLAGS $PTHREAD_CFLAGS"
  LIBS="$PTHREAD_CFLAGS $LIBS"
  
  dnl Check other requirements
  AC_PROG_MAKE_SET
  AC_CHECK_DEBUGGING
  
  dnl Check for Dmalloc library
  AC_CHECK_EXTLIB([Dmalloc],
                  dmalloc, dmalloc_debug, dmalloc.h,
                  [AC_DEFINE(WITH_DMALLOC, 1, [Define to 1 if building with Dmalloc])])
  
  dnl Find out where the Qt implementation resides
  AC_CHECK_QT
  AC_SUBST(QTBASE)
  AC_CHECK_UIC
  AC_SUBST(UIC)
  AC_CHECK_MOC
  AC_SUBST(MOC)
  
  dnl Check our X environment
  AC_PATH_X
  if test ".$no_x" = .yes; then
      AC_ERROR([X11 includes and libraries are required, but none were found.])
  else
      CXXFLAGS="$CXXFLAGS -I$x_includes"
      LDFLAGS="$LDFLAGS -L$x_libraries"
      LIBS="$LIBS -lX11 -lXext -lSM -lm"
  fi
  
  dnl Check typical FreeBSD resources
  AC_CHECK_LIB(Xrender, XRenderFindFormat, [LIBS="$LIBS -lXrender"])
  AC_CHECK_LIB(Xinerama, XineramaIsActive, [LIBS="$LIBS -lXinerama"])
  AC_CHECK_LIB(GL, glBegin, [LIBS="$LIBS -lGL"])
  AC_CHECK_LIB(ICE, IceOpenConnection, [LIBS="$LIBS -lICE"])
  AC_CHECK_LIB(dl, dlopen, [LIBS="$LIBS -ldl"])
  
  enable_shared=no
  export enable_shared
  enable_headline=no
  export enable_headline
  
  dnl Make all the necessary Makefiles
  AC_OUTPUT(Makefile)
  Index: ossp-pkg/titraq/devtool
  ============================================================
  $ cvs update -p -r1.1.1.1 devtool
  #! /bin/sh
  ##
  ##  devtool -- Development Tool
  ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  if [ $# -eq 0 ]; then
      echo "devtool:USAGE: devtool <command> [<arg> ...]" 1>&2
      exit 1
  fi
  
  cmd="$1"
  shift
  
  devtoolfunc="./devtool.func"
  
  if [ ! -f devtool.conf ]; then
      echo "devtool:ERROR: no devtool.conf in current directory" 1>&2
      exit 1
  fi
  
  cmdline=`grep "^%$cmd" devtool.conf`
  if [ ".$cmdline" = . ]; then
      echo "devtool:ERROR: command $cmd not found in devtool.conf" 1>&2
      exit 1
  fi
  
  if [ ".$TMPDIR" != . ]; then
      tmpdir="$TMPDIR"
  elif [ ".$TEMPDIR" != . ]; then
      tmpdir="$TEMPDIR"
  else
      tmpdir="/tmp"
  fi
  tmpfile="$tmpdir/titraq.$$.tmp"
  
  rm -f $tmpfile
  touch $tmpfile
  echo ". $devtoolfunc" >>$tmpfile
  ( sed <devtool.conf -e "1,/^%common/d" -e '/^%.*/,$d'
    sed <devtool.conf -e "1,/^%$cmd/d" -e '/^%.*/,$d' ) |\
  sed -e 's;\([ 	]\)@\([a-zA-Z_][a-zA-Z0-9_]*\);\1devtool_\2;' >>$tmpfile
  
  sh $tmpfile "$@"
  
  rm -f $tmpfile >/dev/null 2>&1 || true
  Index: ossp-pkg/titraq/devtool.conf
  ============================================================
  $ cvs update -p -r1.1.1.1 devtool.conf
  ##
  ##  devtool.conf -- Development Tool Configuration
  ##
  
  %autogen
      @autogen shtool   1.6.1 "1.6.*" all
      @autogen autoconf 2.54  "2.5[3-9]*"
  
  %autoclean
      @autoclean shtool
      @autoclean autoconf
  
  %configure
      ./configure \
          --prefix=/tmp/titraq \
          --disable-shared \
          "$@"
  
  %version
      ./shtool version -l c -n "OSSP titraq" -p "titraq_" -e titraq_version.c
  
  %dist
      make distclean >/dev/null 2>&1
      ./shtool fixperm -v .
      V=`./shtool version -l txt -d short titraq_version.c`
      ./shtool tarball -o titraq-${V}.tar.gz -d titraq-${V} -u ossp -g ossp \
                       -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool.conf' -c 'gzip --best' .
  Index: ossp-pkg/titraq/devtool.func
  ============================================================
  $ cvs update -p -r1.1.1.1 devtool.func
  ##
  ##  devtool.func -- Development Tool Functions
  ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  devtool_require () {
      t="$1"; o="$2"; p="$3"; e="$4"; a="$5"
      v=`($t $o | head -1 | awk "{ print \\\$$p; }") 2>/dev/null`
      if [ ".$v" = . ]; then
          echo "devtool:ERROR: unable to determine version of $t" 1>&2
          exit 1
      fi
      case "$v" in
          $e )
              ;;
          $a )
              echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
              ;;
          * )
              echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
              exit 1
              ;;
      esac
      echo "$v"
  }
  
  devtool_autogen () {
      tool=$1
      shift
      case $tool in
          autoconf )
              autoconf_version=`devtool_require autoconf --version 4 "$1" "$2"`
              echo "generating (GNU Autoconf $autoconf_version): configure ac_config.h.in"
              autoconf
              autoheader 2>&1 | grep -v "is unchanged"
              rm -rf autom4te.cache >/dev/null 2>&1
              ;;
          libtool )
              libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
              echo "generating (GNU Libtool $libtoolize_version): ltmain.sh, libtool.m4, config.guess, config.sub"
              libtoolize --force --copy >/dev/null 2>&1
              cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
                  sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` libtool.m4
              ;;
          shtool )
              shtoolize_version=`devtool_require shtoolize -v 3 "$1" "$2"`
              echo "generating (GNU Shtool $shtoolize_version): shtool"
              shift
              shift
              shtoolize -q "$@"
              ;;
      esac
  }
  
  devtool_autoclean () {
      tool=$1
      shift
      case $tool in
          autoconf )
              echo "removing: config.h.in ac_config.h.in"
              rm -f configure config.h.in
              rm -f configure ac_config.h.in
              ;;
          libtool )
              echo "removing: ltmain.sh libtool.m4 config.guess config.sub"
              rm -f ltmain.sh libtool.m4 config.guess config.sub
              ;;
          shtool )
              echo "removing: shtool"
              rm -f shtool
              ;;
      esac
  }
  Index: ossp-pkg/titraq/idle.cpp
  ============================================================
  $ cvs update -p -r1.1.1.1 idle.cpp
  #include "idle.h"
  #include <qmessagebox.h>
  #include <klocale.h>
  #include <qtimer.h>
  #include <qdatetime.h>
  
  IdleTimer::IdleTimer(int maxIdle) 
  {
    _maxIdle = maxIdle;
  
  #ifdef HAVE_LIBXSS
    int event_base, error_base;
    if(XScreenSaverQueryExtension(qt_xdisplay(), &event_base, &error_base)) {
      _idleDetectionPossible = true;
    }
    else {
      _idleDetectionPossible = false;
    }
  
    _timer = new QTimer(this);
    connect(_timer, SIGNAL(timeout()), this, SLOT(check()));
  #else
    _idleDetectionPossible = false;
  #endif // HAVE_LIBXSS
  
  }
  
  bool IdleTimer::isIdleDetectionPossible()
  {
    return _idleDetectionPossible;
  }
  
  void IdleTimer::check() 
  {
  #ifdef HAVE_LIBXSS
    if (_idleDetectionPossible) {
      _mit_info = XScreenSaverAllocInfo ();
      XScreenSaverQueryInfo(qt_xdisplay(), qt_xrootwin(), _mit_info);
      int idleMinutes = (_mit_info->idle/1000)/secsPerMinutes;;
      if (idleMinutes >= _maxIdle) {
        informOverrun(idleMinutes);
      }
    }
  #endif // HAVE_LIBXSS
  }
  
  void IdleTimer::setMaxIdle(int maxIdle)
  {
    _maxIdle = maxIdle;
  }
  
  #ifdef HAVE_LIBXSS
  void IdleTimer::informOverrun(int idleMinutes) 
  {
    if (!_overAllIdleDetect) {
      return; // In the preferences the user has indicated that he do not
              // want idle detection.
    }
  
    _timer->stop();
    
    QDateTime start = QDateTime::currentDateTime();
    QDateTime idleStart = start.addSecs(-60 * _maxIdle);
    QString backThen;
    backThen.sprintf("%d:%02d", idleStart.time().hour(), idleStart.time().minute());
    
    int id =  QMessageBox::warning(0,i18n("Idle detection"),
                                       i18n("Desktop has been idle since %1."
                                            " What should we do?").arg(backThen),
                                       i18n("Revert and Stop"), i18n("Revert and Continue"),
                                       i18n("Continue Timing"),0,2);
    QDateTime end = QDateTime::currentDateTime();
    int diff = start.secsTo(end)/secsPerMinutes;
  
    if (id == 0) {
      // Revert And Stop
      emit(extractTime(idleMinutes+diff));
      emit(stopTimer());
    }
    else if (id == 1) {
      // Revert and Continue
      emit(extractTime(idleMinutes+diff));
      _timer->start(testInterval);
    }
    else {
      // Continue
      _timer->start(testInterval);      
    }
  }
  #endif // HAVE_LIBXSS
  
  void IdleTimer::startIdleDetection() 
  {
  #ifdef HAVE_LIBXSS
    if (!_timer->isActive())
      _timer->start(testInterval);
  #endif //HAVE_LIBXSS
  }
  
  void IdleTimer::stopIdleDetection()
  {
  #ifdef HAVE_LIBXSS
    if (_timer->isActive())
      _timer->stop();
  #endif // HAVE_LIBXSS
  }
  void IdleTimer::toggleOverAllIdleDetection(bool on) 
  {
    _overAllIdleDetect = on;
  }
  
  #include "idle.moc"
  Index: ossp-pkg/titraq/idle.h
  ============================================================
  $ cvs update -p -r1.1.1.1 idle.h
  #ifndef __IDLETIMER
  #define __IDLETIMER
  #include <qobject.h>
  #include "config.h"
  
  class QTimer;
  
  #ifdef HAVE_LIBXSS
   #include <X11/Xlib.h>
   #include <X11/Xutil.h>
   #include <X11/extensions/scrnsaver.h>
  #endif // HAVE_LIBXSS
  
  // Seconds per minutes - usefull for speeding debugging up!
  const int secsPerMinutes = 60;
  
  // Minutes between each idle overrun test.
  const int testInterval= secsPerMinutes * 1000;
  
  class IdleTimer :public QObject
  {
  Q_OBJECT
  
  public:
    /**
       Initializes and idle test timer
       @param maxIdle minutes before the idle timer will go off.
    **/
    IdleTimer(int maxIdle);
  
    /**
       Returns true if it is possible to do idle detection.
       Idle detection relys on a feature in the X server, which might not
       allways be present.
    **/
    bool isIdleDetectionPossible();
  
  signals:
    /**
       Tells the listener to extract time from current timing.
       The time to extract is due to the idle time since the dialog wass
       shown, and until the user answers the dialog.
       @param minutes Minutes to extract.
    **/
    void extractTime(int minutes);
    
    /** 
        Tells the listener to stop timing
     **/
    void stopTimer();
  
  public slots:  
    /**
       Sets the maximum allowed idle.
       @param maxIdle Maximum allowed idle time in minutes
    **/
    void setMaxIdle(int maxIdle);
  
    /**
       Starts detecting idle time
    **/
    void startIdleDetection();
    
    /** 
        Stops detecting idle time.
    **/
    void stopIdleDetection();
  
    /**
       Sets whether idle detection should be done at all
       @param on If true idle detection is done based on @ref
       startIdleDetection and @ref stopIdleDetection
    **/
    void toggleOverAllIdleDetection(bool);
    
    
  protected:
  #ifdef HAVE_LIBXSS
    void informOverrun(int idle);
  #endif // HAVE_LIBXSS
  
  protected slots:
    void check();
    
  private:
  #ifdef HAVE_LIBXSS
    XScreenSaverInfo *_mit_info;
  #endif
    bool _idleDetectionPossible;
    bool _overAllIdleDetect; // Based on preferences.
    int _maxIdle;
    QTimer *_timer;
  };
  
  #endif // __IDLETIMER
  Index: ossp-pkg/titraq/kaccelmenuwatch.cpp
  ============================================================
  $ cvs update -p -r1.1.1.1 kaccelmenuwatch.cpp
  /*
  * kaccelmenuwatch.cpp -- Implementation of class KAccelMenuWatch.
  * Author:	Sirtaj Singh Kang
  * Version:	$Id: kaccelmenuwatch.cpp,v 1.1.1.1 2002/10/21 15:19:37 ms Exp $
  * Generated:	Thu Jan  7 15:05:26 EST 1999
  */
  
  #include <assert.h>
  #include "kaccelmenuwatch.h"
  
  KAccelMenuWatch::KAccelMenuWatch( KAccel *accel, QObject *parent )
  	: QObject( parent ),
  	_accel( accel ),
  	_menu ( 0 )
  {
  	_accList.setAutoDelete( true );
  	_menuList.setAutoDelete( false );
  }
  
  void KAccelMenuWatch::setMenu( QPopupMenu *menu )
  {
  	assert( menu );
  
  	// we use  _menuList to ensure that the signal is
  	// connected only once per menu.
  
  	if ( !_menuList.findRef( menu ) ) {
  		_menuList.append( menu );
  		connect( menu, SIGNAL(destroyed()),
  			this, SLOT(removeDeadMenu()) );
  	}
  
  	_menu = menu;
  }
  
  void KAccelMenuWatch::connectAccel( int itemId, const char *action )
  {
  	AccelItem *item = newAccelItem( _menu, itemId, StringAccel ) ;
  	item->action	= action;
  }
  
  void KAccelMenuWatch::connectAccel( int itemId, KStdAccel::StdAccel accel )
  {
  	AccelItem *item = newAccelItem( _menu, itemId, StdAccel ) ;
  	item->stdAction	= accel;
  }
  
  void KAccelMenuWatch::updateMenus()
  {
  	assert( _accel != 0 );
  
  	QPtrListIterator<AccelItem> iter( _accList );
  	AccelItem *item;
  
  	for( ; (item = iter.current()) ; ++iter ) {
  		switch( item->type ) {
  			case StringAccel:
  				_accel->changeMenuAccel( item->menu,
  					item->itemId,
  					item->action );
  				break;
  			case StdAccel:
  				_accel->changeMenuAccel( item->menu,
  					item->itemId,
  					item->stdAction );
  				break;
  			default:
  				break;
  		}
  	}
  
  }
  
  void KAccelMenuWatch::removeDeadMenu()
  {
  	QPopupMenu *sdr = (QPopupMenu *) sender();
  	assert( sdr );
  
  	if ( !_menuList.findRef( sdr ) ) {
  		return;
  	}
  
  	// remove all accels
  
  	AccelItem *accel;
  	for ( accel = _accList.first(); accel; accel = _accList.next() ) {
  
  loop:
  		if( accel && accel->menu == sdr ) {
  			_accList.remove();
  			accel = _accList.current();
  			goto loop;
  		}
  	}
  
  
  	// remove from menu list
  	_menuList.remove( sdr );
  
  	return;
  }
  
  KAccelMenuWatch::AccelItem *KAccelMenuWatch::newAccelItem( QPopupMenu *,
  		int itemId, AccelType type )
  {
  	AccelItem *item = new AccelItem;
  
  	item->menu	= _menu;
  	item->itemId	= itemId;
  	item->type	= type;
  
  	_accList.append( item );
  
  	return item;
  }
  
  #include "kaccelmenuwatch.moc"
  Index: ossp-pkg/titraq/kaccelmenuwatch.h
  ============================================================
  $ cvs update -p -r1.1.1.1 kaccelmenuwatch.h
  /*
  * kaccelmenuwatch.h -- Declaration of class KAccelMenuWatch.
  * Generated by newclass on Thu Jan  7 15:05:26 EST 1999.
  */
  #ifndef SSK_KACCELMENUWATCH_H
  #define SSK_KACCELMENUWATCH_H
  
  #include <qobject.h>
  #include <qpopupmenu.h>
  #include <qptrlist.h>
  
  #include <kaccel.h>
  
  /**
  * Easy updating of menu accels when changing a @ref KAccel object.
  *
  * Since a KAccel object does not keep track of menu items to which it
  * is connected, we normally have to manually call 
  * @ref KAccel::changeMenuAccel again for each update of the KAccel object.
  *
  * With KAccelMenuWatch you provide the kaccel object and the menu
  * items to which it connects, and if you update the kaccel you just have
  * to call @ref ::updateMenus and the menu items will be updated.
  *
  * It is safe to delete menus that have connections handled by this class.
  * On deletion of a menu, all associated accelerators will be deleted.
  *
  * Note that you _have_ to call updateMenus after you connect the
  * accelerators, as they are not activated till then.
  *
   @author Sirtaj Singh Kang (taj@kde.org)
  * @version $Id: kaccelmenuwatch.h,v 1.1.1.1 2002/10/21 15:19:37 ms Exp $
  */
  class KAccelMenuWatch : public QObject
  {
  	Q_OBJECT
  
  private:
  	enum AccelType { StdAccel, StringAccel };
  
  	typedef struct AccelItem {
  		QPopupMenu	*menu;
  		int 		itemId;
  
  		AccelType	type;
  
  		// only one of these is used at a time
  		QString		action;
  		KStdAccel::StdAccel stdAction;
  		
  	} AccelItem;
  
  	KAccel		 *_accel;
  	QPtrList<AccelItem> _accList;
  	QPtrList<QPopupMenu> _menuList;
  
  	QPopupMenu	*_menu;
  
  	KAccelMenuWatch::AccelItem *newAccelItem( QPopupMenu *menu, 
  			int itemId, AccelType type );
  
  public:
  	/**
  	* KAccelMenuWatch Constructor
  	*/
  	KAccelMenuWatch( KAccel *accel, QObject *parent = 0 );
  
  	/**
  	* KAccelMenuWatch Destructor
  	*/
  	virtual ~KAccelMenuWatch() {}
  
  	/** 
  	 * Set the menu on which connectAccel calls will operate.
  	 * All subsequent calls to connectAccel will be associated
  	 * with this menu. You can call this function any number of
  	 * times, so multiple menus can be handled.
  	 */
  	void setMenu( QPopupMenu *menu );
  
  	/** 
  	 * Return the last menu set with @ref ::setMenu, or 0 if none
  	 * has been set.
  	 */
  	QPopupMenu *currentMenu() const  { return _menu; }
  
  	/** 
  	 * Connect the menu item identified to currentMenu()/id to
  	 * the accelerator action.
  	 */
  	void connectAccel( int itemId, const char *action );
  
  	/** 
  	 * Same as above, but connects to standard accelerators.
  	 */
  	void connectAccel( int itemId, KStdAccel::StdAccel );
  	
  public slots:
  	/** 
  	 * Updates all menu accelerators. Call this after all accelerators
  	 * have been connected or the kaccel object has been updated.
  	 */
  	void updateMenus();
  
  private slots:
  	void removeDeadMenu();
  
  private:
  	KAccelMenuWatch& operator=( const KAccelMenuWatch& );
  	KAccelMenuWatch( const KAccelMenuWatch& );
  };
  
  #endif // SSK_KACCELMENUWATCH_H
  Index: ossp-pkg/titraq/karm.cpp
  ============================================================
  $ cvs update -p -r1.1.1.1 karm.cpp
  #include <qptrstack.h>
  #include <sys/types.h>
  #include <dirent.h>
  #include <stdlib.h>
  #include <sys/stat.h>
  
  #include <qlistbox.h>
  #include <qlayout.h>
  #include <qtextstream.h>
  #include <qfile.h>
  #include <qtimer.h>
  
  #include <kapplication.h>
  #include <kconfig.h>
  #include <klocale.h>
  #include <kmenubar.h>
  #include <ktoolbar.h>
  #include <kmessagebox.h>
  
  #include "task.h"
  #include "karm.h"
  #include "adddlg.h"
  #include "idle.h"
  #include "preferences.h"
  
  #define T_LINESIZE 1023
  
  Karm::Karm( QWidget *parent, const char *name )
    : QListView( parent, name )
  {
    _preferences = Preferences::instance();
  
    connect(this, SIGNAL(doubleClicked(QListViewItem *)),
            this, SLOT(changeTimer(QListViewItem *)));
  
    addColumn(i18n("Task Name"));
    addColumn(i18n("Session Time"));
    addColumn(i18n("Total Time"));
    setAllColumnsShowFocus(true);
  
    // set up the minuteTimer
    _minuteTimer = new QTimer(this);
    connect(_minuteTimer, SIGNAL(timeout()), this, SLOT(minuteUpdate()));
    _minuteTimer->start(1000 * secsPerMinutes);
  
    // Set up the idle detection.
    _idleTimer = new IdleTimer(_preferences->idlenessTimeout());
    connect(_idleTimer, SIGNAL(extractTime(int)), this, SLOT(extractTime(int)));
    connect(_idleTimer, SIGNAL(stopTimer()), this, SLOT(stopAllTimers()));
    connect(_preferences, SIGNAL(idlenessTimeout(int)), _idleTimer, SLOT(setMaxIdle(int)));
    connect(_preferences, SIGNAL(detectIdleness(bool)), _idleTimer, SLOT(toggleOverAllIdleDetection(bool)));
    if (!_idleTimer->isIdleDetectionPossible())
      _preferences->disableIdleDetection();
  
    // Setup auto save timer
    _autoSaveTimer = new QTimer(this);
    connect(_preferences, SIGNAL(autoSave(bool)), this, SLOT(autoSaveChanged(bool)));
    connect(_preferences, SIGNAL(autoSavePeriod(int)),
            this, SLOT(autoSavePeriodChanged(int)));
    connect(_autoSaveTimer, SIGNAL(timeout()), this, SLOT(save()));
  }
  
  Karm::~Karm()
  {
    save();
  }
  
  void Karm::load()
  {
    QFile f(_preferences->saveFile());
  
    if( !f.exists() )
      return;
  
    if( !f.open( IO_ReadOnly ) )
      return;
  
    QString line;
  
    QPtrStack<Task> stack;
    Task *task;
  
    QTextStream stream(&f);
  
    while( !stream.atEnd() ) {
      //lukas: this breaks for non-latin1 chars!!!
      //if ( file.readLine( line, T_LINESIZE ) == 0 )
      //	break;
  
      line = stream.readLine();
  
      if (line.isNull())
  	break;
  
      long minutes;
      int level;
      QString name;
  
      if (!parseLine(line, &minutes, &name, &level))
        continue;
  
      unsigned int stackLevel = stack.count();
      for (unsigned int i = level; i<=stackLevel ; i++) {
        stack.pop();
      }
  
      if (level == 1) {
        task = new Task(name, minutes, 0, this);
      }
      else {
        Task *parent = stack.top();
        task = new Task(name, minutes, 0, parent);
        setRootIsDecorated(true);
        parent->setOpen(true);
      }
      stack.push(task);
    }
    f.close();
  
  	setSelected(firstChild(), true);
  	setCurrentItem(firstChild());
  }
  
  bool Karm::parseLine(QString line, long *time, QString *name, int *level)
  {
    if (line.find('#') == 0) {
      // A comment line
      return false;
    }
  
    int index = line.find('\t');
    if (index == -1) {
      // This doesn't seem like a valid record
      return false;
    }
  
    QString levelStr = line.left(index);
    QString rest = line.remove(0,index+1);
  
    index = rest.find('\t');
    if (index == -1) {
      // This doesn't seem like a valid record
      return false;
    }
  
    QString timeStr = rest.left(index);
    *name = rest.remove(0,index+1);
  
    bool ok;
    *time = timeStr.toLong(&ok);
  
    if (!ok) {
      // the time field was not a number
      return false;
    }
    *level = levelStr.toInt(&ok);
    if (!ok) {
      // the time field was not a number
      return false;
    }
    return true;
  }
  
  void Karm::save()
  {
   QFile f(_preferences->saveFile());
  
   if ( !f.open( IO_WriteOnly | IO_Truncate ) ) {
     QString msg = i18n( "There was an error trying to save your data file.\n"
                         "Time accumulated during this session will not be saved!\n");
     KMessageBox::error(0, msg );
     return;
   }
   const char * comment = "# Karm save data\n";
  
   f.writeBlock(comment, strlen(comment));  //comment
   f.flush();
  
   QTextStream stream(&f);
  
   for (QListViewItem *child =firstChild(); child; child = child->nextSibling()) {
     writeTaskToFile(&stream, child, 1);
   }
   f.close();
  }
  
  void Karm::writeTaskToFile(QTextStream *strm, QListViewItem *item, int level)
  {
    Task * task = (Task *) item;
    //lukas: correct version for non-latin1 users
    QString _line = QString::fromLatin1("%1\t%2\t%3\n").arg(level).
            arg(task->totalTime()).arg(task->name());
  
    *strm << _line;
  
    QListViewItem * child;
    for (child=item->firstChild(); child; child=child->nextSibling()) {
      writeTaskToFile(strm, child, level+1);
    }
  }
  
  void Karm::startTimer()
  {
    Task *item = ((Task *) currentItem());
    if (item != 0 && activeTasks.findRef(item) == -1) {
      _idleTimer->startIdleDetection();
      item->setRunning(true);
      activeTasks.append(item);
      emit updateButtons();
    }
  }
  
  void Karm::stopAllTimers()
  {
    for(unsigned int i=0; i<activeTasks.count();i++) {
      activeTasks.at(i)->setRunning(false);
    }
    _idleTimer->stopIdleDetection();
    activeTasks.clear();
    emit updateButtons();
  }
  
  void Karm::resetSessionTimeForAllTasks()
  {
    QListViewItemIterator item( firstChild());
    for ( ; item.current(); ++item ) {
      Task * task = (Task *) item.current();
      long sessionTime = task->sessionTime();
      long totalTime   = task->totalTime();
      task->setSessionTime(0);
      task->setTotalTime(totalTime - sessionTime);
    }
  }
  
  void Karm::stopCurrentTimer()
  {
    Task *item = ((Task *) currentItem());
    if (item != 0 && activeTasks.findRef(item) != -1) {
      activeTasks.removeRef(item);
      item->setRunning(false);
      if (activeTasks.count()== 0)
        _idleTimer->stopIdleDetection();
      emit updateButtons();
    }
  }
  
  void Karm::changeTimer(QListViewItem *)
  {
    Task *item = ((Task *) currentItem());
    if (item != 0 && activeTasks.findRef(item) == -1) {
      // Stop all the other timers.
      for (unsigned int i=0; i<activeTasks.count();i++) {
        (activeTasks.at(i))->setRunning(false);
      }
      activeTasks.clear();
  
      // Start the new timer.
      startTimer();
    }
    else {
      stopCurrentTimer();
    }
  }
  
  void Karm::minuteUpdate()
  {
    addTimeToActiveTasks(1);
    if (activeTasks.count() != 0)
      emit(timerTick());
  }
  
  void Karm::addTimeToActiveTasks(int minutes)
  {
    for(unsigned int i=0; i<activeTasks.count();i++) {
      Task *task = activeTasks.at(i);
      QListViewItem *item = task;
      while (item) {
        ((Task *) item)->incrementTime(minutes);
        item = item->parent();
      }
    }
  }
  
  void Karm::newTask()
  {
    newTask(i18n("New Task"), 0);
  }
  
  void Karm::newTask(QString caption, QListViewItem *parent)
  {
    AddTaskDialog *dialog = new AddTaskDialog(caption, false);
    int result = dialog->exec();
  
    if (result == QDialog::Accepted) {
      QString taskName = i18n("Unnamed Task");
      if (!dialog->taskName().isEmpty()) {
        taskName = dialog->taskName();
      }
  
      long total, totalDiff, session, sessionDiff;
      dialog->status( &total, &totalDiff, &session, &sessionDiff );
      Task *task;
  
      if( sessionDiff != 0 ) {
        emit sessionTimeChanged( sessionDiff );
      }
  
      if (parent == 0)
        task = new Task(taskName, total, session, this);
      else
        task = new Task(taskName, total, session, parent);
  
      updateParents( (QListViewItem *) task, totalDiff, sessionDiff );
      setCurrentItem(task);
      setSelected(task, true);
    }
    delete dialog;
  }
  
  void Karm::newSubTask()
  {
    QListViewItem *item = currentItem();
    if(!item)
      return;
    newTask(i18n("New Sub Task"), item);
    item->setOpen(true);
    setRootIsDecorated(true);
  }
  
  void Karm::editTask()
  {
    Task *task = (Task *) currentItem();
    if (!task)
    return;
  
    AddTaskDialog *dialog = new AddTaskDialog(i18n("Edit Task"), true);
    dialog->setTask(task->name(),
                    task->totalTime(),
                    task->sessionTime());
    int result = dialog->exec();
    if (result == QDialog::Accepted) {
      QString taskName = i18n("Unnamed Task");
      if (!dialog->taskName().isEmpty()) {
        taskName = dialog->taskName();
      }
      task->setName(taskName);
  
      // update session time as well if the time was changed
      long total, session, totalDiff, sessionDiff;
      dialog->status( &total, &totalDiff, &session, &sessionDiff );
  
      if( sessionDiff != 0 ) {
        emit sessionTimeChanged( sessionDiff );
      }
      task->setTotalTime( total);
      task->setSessionTime( session );
  
      // Update the parents for this task.
      updateParents( (QListViewItem *) task, totalDiff, sessionDiff );
    }
    delete dialog;
  }
  
  void Karm::updateParents( QListViewItem* task, long totalDiff, long sessionDiff )
  {
    QListViewItem *item = task->parent();
    while (item) {
      Task *parrentTask = (Task *) item;
      parrentTask->setTotalTime(parrentTask->totalTime()+totalDiff);
      parrentTask->setSessionTime(parrentTask->sessionTime()+sessionDiff);
      item = item->parent();
    }
  }
  
  void Karm::deleteTask()
  {
    Task *item = ((Task *) currentItem());
    if (item == 0) {
      KMessageBox::information(0,i18n("No task selected"));
      return;
    }
  
    int response;
    if (item->childCount() == 0) {
      response = KMessageBox::questionYesNo(0,
                   i18n( "Are you sure you want to delete the task named\n\"%1\"").arg(item->name()),
                   i18n( "Deleting Task"));
    }
    else {
      response = KMessageBox::questionYesNo(0,
                   i18n( "Are you sure you want to delete the task named\n\"%1\"\n"
                         "NOTE: all its subtasks will also be deleted!").arg(item->name()),
                   i18n( "Deleting Task"));
    }
  
    if (response == KMessageBox::Yes) {
  
      // Remove chilren from the active set of tasks.
      stopChildCounters(item);
  
      // Stop idle detection if no more counters is running
      if (activeTasks.count() == 0) {
        _idleTimer->stopIdleDetection();
      }
  
      long sessionTime = item->sessionTime();
      long totalTime   = item->totalTime();
  
      if( sessionTime != 0 ) {
        emit sessionTimeChanged( -sessionTime );
      }
      updateParents( (QListViewItem *) item, -totalTime, -sessionTime );
      
      delete item;
      
      // remove root decoration if there is no more children.
      bool anyChilds = false;
      for(QListViewItem *child=firstChild(); child; child=child->nextSibling()) {
        if (child->childCount() != 0) {
          anyChilds = true;
          break;
        }
      }
      if (!anyChilds) {
        setRootIsDecorated(false);
      }
    }
  }
  
  void Karm::stopChildCounters(Task *item)
  {
    for (QListViewItem *child=item->firstChild(); child; child=child->nextSibling()) {
      stopChildCounters((Task *)child);
    }
    activeTasks.removeRef(item);
  }
  
  
  void Karm::extractTime(int minutes)
  {
    addTimeToActiveTasks(-minutes);
    emit(sessionTimeChanged(-minutes));
  }
  
  void Karm::autoSaveChanged(bool on)
  {
    if (on) {
      if (!_autoSaveTimer->isActive()) {
        _autoSaveTimer->start(_preferences->autoSavePeriod()*1000*secsPerMinutes);
      }
    }
    else {
      if (_autoSaveTimer->isActive()) {
        _autoSaveTimer->stop();
      }
    }
  }
  
  void Karm::autoSavePeriodChanged(int /*minutes*/)
  {
    autoSaveChanged(_preferences->autoSave());
  }
  
  #include "karm.moc"
  Index: ossp-pkg/titraq/karm.h
  ============================================================
  $ cvs update -p -r1.1.1.1 karm.h
  #ifndef SSK_KARM_H
  #define SSK_KARM_H
  
  #include <stdio.h>
  #include <stdlib.h>
  
  #include <qsplitter.h>
  #include <qlistview.h>
  #include <qptrlist.h>
  #include <qtextstream.h>
  
  class KMenuBar;
  class KToolBar;
  class QListBox;
  class AddTaskDialog;
  class IdleTimer;
  class QTimer;
  class Preferences;
  class Task;
  
  class Karm : public QListView
  {
      Q_OBJECT
  
  private: // member variables
      IdleTimer *_idleTimer;
      QTimer *_minuteTimer;
      QTimer *_autoSaveTimer;
  
      Preferences *_preferences;
  
      QPtrList<Task> activeTasks;
  
  public:
      Karm( QWidget *parent = 0, const char *name = 0 );
      virtual ~Karm();
      static QString formatTime(long minutes);
  
  private:
      void updateParents( QListViewItem* task, long totalDiff, long sesssionDiff );
  
  public slots:
      /*
      File format:
      zero or more lines of
      1 		number
      time	in minutes
      string	task name
      */
      void load();
      void save();
      void writeTaskToFile(QTextStream *, QListViewItem *, int);
      bool parseLine(QString line, long *time, QString *name, int *level);
      void stopCurrentTimer();
      void stopAllTimers();
      void startTimer();
      void changeTimer(QListViewItem *);
      void newTask();
      void newTask(QString caption, QListViewItem *parent);
      void newSubTask();
      void editTask();
      void deleteTask();
      void extractTime(int minutes);
      void resetSessionTimeForAllTasks();
  
  protected slots:
      void autoSaveChanged(bool);
      void autoSavePeriodChanged(int period);
      void minuteUpdate();
  
  signals:
      void sessionTimeChanged( long difference );
      void timerTick();
      void updateButtons();
  
  protected slots:
      void stopChildCounters(Task *item);
      void addTimeToActiveTasks(int minutes);
  };
  
  inline QString Karm::formatTime( long minutes )
  {
      QString time;
      time.sprintf("%ld:%02ld", minutes / 60, labs(minutes % 60));
      return time;
  }
  
  #endif
  Index: ossp-pkg/titraq/karmui.rc
  ============================================================
  $ cvs update -p -r1.1.1.1 karmui.rc
  <!DOCTYPE kpartgui ><kpartgui name="karm" version="2" >
  <MenuBar>
  	<Menu name="file" >
  		<text>File</text>
  		<Action name="reset_session_time" />
  	</Menu>
  	<Menu name="clock" >
  		<text>Clock</text>
  		<Action name="start" />
  		<Action name="stop" />
  	</Menu>
  	<Menu name="task" >
  		<text>Task</text>
  		<Action name="new_task" />
  		<Action name="new_sub_task" />
  		<Action name="delete_task" />
  		<Action name="edit_task" />
  	</Menu>
  </MenuBar>
  <ToolBar alreadyVisited="1" position="Top" iconText="IconOnly" noMerge="1" name="mainToolBar" >
  	<text>Main Toolbar</text>
  	<Action name="start" />
  	<Action name="stop" />
  	<Action name="new_task" />
  	<Action name="new_sub_task" />
  	<Action name="delete_task" />
  	<Action name="edit_task" />
  </ToolBar>
  </kpartgui>
  Index: ossp-pkg/titraq/ktimewidget.cpp
  ============================================================
  $ cvs update -p -r1.1.1.1 ktimewidget.cpp
  #include <qlayout.h>
  #include <qlineedit.h>
  #include <qlabel.h>
  #include "ktimewidget.h"
  #include <qvalidator.h>
  #include <kdebug.h>
  #include <stdlib.h>
  
  enum ValidatorType { HOUR, MINUTE };
  
  class TimeValidator :public QValidator
  {
  public:
  	TimeValidator(ValidatorType tp, QWidget *parent=0, const char *name=0) :QValidator(parent, name)
  	{
  		_tp = tp;
  	}
  	State validate(QString &str, int &) const
  	{
  		if (str.isEmpty())
  			return Acceptable;
  
  		bool ok;
  		int val = str.toInt( &ok );
  		if ( ! ok )
  			return Invalid;
  
  		if ( str.contains('-') != 0 )
  			return Invalid;
  
  		if ( _tp==MINUTE && val >= 60  )
  			return Invalid;
  		else
  			return Acceptable;
  	}
  
  public:
  	ValidatorType _tp;
  };
  
  
  class KarmLineEdit :public QLineEdit
  {
  
  public:
  	KarmLineEdit( QWidget* parent, const char* name = 0 ) :QLineEdit( parent, name )
  	{
  	}
  
  protected:
  
  	virtual void keyPressEvent( QKeyEvent *event ) {
  		QLineEdit::keyPressEvent( event );
  		if ( text().length() == 2 && !event->text().isEmpty() )
  			focusNextPrevChild(true);
  	}
  };
  
  
  
  
  KTimeWidget::KTimeWidget(  QWidget* parent, const char* name ) : QWidget(parent, name)
  {
  	QHBoxLayout *layout = new QHBoxLayout(this);
  
  	_hourLE = new QLineEdit( this);
  
          // Hours lineedit: make room for up to 5 digits
  	_hourLE->setFixedWidth(fontMetrics().maxWidth()*5 + 2*_hourLE->frameWidth() + 2);
  	layout->addWidget(_hourLE);
  	TimeValidator *validator = new TimeValidator( HOUR, _hourLE, "Validator for _hourLE");
  	_hourLE->setValidator( validator );
  	_hourLE->setAlignment( Qt::AlignRight );
  
  
  	QLabel *dot = new QLabel(QString::fromLatin1( " : " ), this);
  	layout->addWidget(dot);
  
  	_minuteLE = new KarmLineEdit(this);
  
          // Minutes lineedit: Make room for 2 digits
  	_minuteLE->setFixedWidth(fontMetrics().maxWidth()*2 + 2*_minuteLE->frameWidth() + 2);
  	layout->addWidget(_minuteLE);
  	validator = new TimeValidator( MINUTE, _minuteLE, "Validator for _minuteLE");
  	_minuteLE->setValidator( validator );
  	_minuteLE->setMaxLength(2);
  	_minuteLE->setAlignment( Qt::AlignRight );
  
  	layout->addStretch(1);
  	setFocusProxy( _hourLE );
  }
  
  void KTimeWidget::setTime( int hour, int minute )
  {
  	QString dummy;
  
  	dummy.setNum( hour );
  	_hourLE->setText( dummy );
  
  	dummy.setNum( abs(minute) );
  	if (abs(minute) < 10 ) {
  		dummy = QString::fromLatin1( "0" ) + dummy;
  	}
  	_minuteLE->setText( dummy );
  }
  
  long KTimeWidget::time() const
  {
  	bool ok;
  	int h, m;
  
  	h = _hourLE->text().toInt( &ok );
  	m = _minuteLE->text().toInt( &ok );
  
  	// if h is negative, we have to *subtract* m
  	return h * 60 + ( ( h < 0) ? -1 : 1 ) * m;
  }
  Index: ossp-pkg/titraq/ktimewidget.h
  ============================================================
  $ cvs update -p -r1.1.1.1 ktimewidget.h
  
  #ifndef KTIMEWIDGET_H_
  #define KTIMEWIDGET_H_
  
  class QLineEdit;
  class KarmLineEdit;
  
  class KTimeWidget :public QWidget 
  {
  public:
  	KTimeWidget( QWidget* parent = 0, const char* name = 0 );
  	void setTime( int hour, int minute );
  	long time() const;
  
  private:
  	QLineEdit *_hourLE;
  	KarmLineEdit *_minuteLE;
  };
  
  #endif
  Index: ossp-pkg/titraq/loging.cpp
  ============================================================
  $ cvs update -p -r1.1.1.1 loging.cpp
  #include "loging.h"
  #include "task.h"
  #include "preferences.h"
  #include <qdatetime.h>
  #include <qstring.h>
  #include <qfile.h>
  #include <qtextstream.h>
  #include <qregexp.h>
  #include <iostream>
  
  #define LOG_START				1
  #define LOG_STOP				2
  #define LOG_NEW_TOTAL_TIME		3
  #define LOG_NEW_SESSION_TIME	4
  
  Loging *Loging::_instance = 0;
  
  Loging::Loging()
  {
  	_preferences = Preferences::instance();
  }
  
  void Loging::start( Task * task)
  {
  	log(task, LOG_START);
  }
  
  void Loging::stop( Task * task)
  {
  	log(task, LOG_STOP);
  }
  
  // when time is reset...
  void Loging::newTotalTime( Task * task, long minutes)
  {
  	log(task, LOG_NEW_TOTAL_TIME, minutes);
  }
  void Loging::newSessionTime( Task * task, long minutes)
  {
  	log(task, LOG_NEW_SESSION_TIME, minutes);
  }
  
  void Loging::log( Task * task, short type, long minutes)
  {
  
  	if(_preferences->timeLoging()) {
  		QFile f(_preferences->timeLog());
  
  		if ( f.open( IO_WriteOnly | IO_Append) ) {
  			QTextStream out( &f );        // use a text stream
  
  			if( type == LOG_START) {
  				out << "<starting         ";
  			} else if( type == LOG_STOP ) {
  				out << "<stopping         ";
  			} else if( type == LOG_NEW_TOTAL_TIME) {
  				out << "<new_total_time   ";
  			} else if( type == LOG_NEW_SESSION_TIME) {
  				out << "<new_session_time ";
  			} else {
  				std::cerr << "Programming error!";
  			}
  
  			out << "task=\"" << constructTaskName(task) << "\" "
  			    << "date=\"" << QDateTime::currentDateTime().toString() << "\" ";
  			  
  			if ( type == LOG_NEW_TOTAL_TIME || type == LOG_NEW_SESSION_TIME) {
  				out << "new_total=\"" << minutes  << "\" ";
  			}
  			
  			out << "/>\n";
  
  			f.close();
  		} else {
  			std::cerr << "Couldn't write to time-log file";
  		}
  	}
  }
  
  Loging *Loging::instance()
  {
    if (_instance == 0) {
      _instance = new Loging();
    }
    return _instance;
  }
  
  QString Loging::constructTaskName(Task *task)
  {
  	QListViewItem *item = task;
  	
  	QString name = escapeXML(task->name());
  	
  	while( ( item = item->parent() ) )
  	{
  		name = escapeXML(((Task *)item)->name()) + name.prepend('/');
  	}
  
  	return name;
  }
  
  // why the hell do I need to do this?!?
  #define QS(c) QString::fromLatin1(c)
  
  QString Loging::escapeXML( QString string)
  {
  	QString result = QString(string);
  	result.replace( QRegExp(QS("&")),  QS("&amp;")  );
  	result.replace( QRegExp(QS("<")),  QS("&lt;")   );
  	result.replace( QRegExp(QS(">")),  QS("&gt;")   );
  	result.replace( QRegExp(QS("'")),  QS("&apos;") );
  	result.replace( QRegExp(QS("\"")), QS("&quot;") );
  	// protect also our task-separator
  	result.replace( QRegExp(QS("/")),  QS("&slash;") );
  
  	return result;
  }
  
  Loging::~Loging() {
  }
  Index: ossp-pkg/titraq/loging.h
  ============================================================
  $ cvs update -p -r1.1.1.1 loging.h
  #ifndef _LOGING_H_
  #define _LOGING_H_
  
  #include "preferences.h"
  #include <qstring.h>
  
  class Task;
  
  class Loging {
  
  private:
    Preferences *_preferences;
    static Loging *_instance;
    void log( Task *task, short type, long minutes = 0);
  
  public:
    static Loging *instance();
    Loging();
    ~Loging();
    void start( Task *task);
    void stop( Task *task);
    void newTotalTime( Task *task, long minutes);
    void newSessionTime( Task *task, long minutes);
    QString constructTaskName(Task *task);
    QString escapeXML( QString string);
  
  };
  
  #endif
  
  
  
  Index: ossp-pkg/titraq/main.cpp
  ============================================================
  $ cvs update -p -r1.1.1.1 main.cpp
  #include <qapplication.h>
  #include "version.h"
  //#include "top.h"
  
  int main(int argc, char *argv[])
  {
      QApplication App(argc, argv);
  
      KarmWindow *karm = new KarmWindow;
  
      App.setMainWidget(karm);
      karm->show();
  
      return App.exec();
  }
  Index: ossp-pkg/titraq/preferences.cpp
  ============================================================
  $ cvs update -p -r1.1.1.1 preferences.cpp
  #undef Unsorted // for --enable-final
  #include "preferences.h"
  #include <qcheckbox.h>
  #include <klineedit.h>
  #include <qlabel.h>
  #include <qlayout.h>
  #include <qspinbox.h>
  #include <klocale.h>
  #include <qvbox.h>
  #include <qframe.h>
  #include <kconfig.h>
  #include <kapplication.h>
  #include <kglobal.h>
  #include <kstandarddirs.h>
  #include <kurlrequester.h>
  
  Preferences *Preferences::_instance = 0;
  
  Preferences::Preferences() : KDialogBase(KDialogBase::Tabbed, i18n("Preferences"),
                                           KDialogBase::Ok | KDialogBase::Cancel,
                                           KDialogBase::Ok)
  {
    //----------------------------------------------------------------------
    // Saving
    //----------------------------------------------------------------------
    QVBox *autoSaveMenu = addVBoxPage(i18n("Saving"));
  
    QHBox *box3 = new QHBox(autoSaveMenu);
    new QLabel(i18n("File to save time information to:"), box3, "save label");
    _saveFileW = new KURLRequester(box3, "_saveFileW");
  
    _doAutoSaveW = new QCheckBox(i18n("Automatically save tasks"), autoSaveMenu, "_doAutoSaveW");
  
    connect(_doAutoSaveW, SIGNAL(clicked()),
            this, SLOT(autoSaveCheckBoxChanged()));
  
     _doTimeLogingW = new QCheckBox(i18n("Do time logging"), autoSaveMenu,
     								 "_doTimeLogingW");
     connect(_doTimeLogingW, SIGNAL(clicked()),
   		  this, SLOT(timeLogingCheckBoxChanged()));
     
     QHBox *box4 = new QHBox(autoSaveMenu);
     _timeLogingLabelW = new QLabel(i18n("File to log the times to"), box4,
                                 "save label");
     _timeLogW = new KURLRequester(box4, "_timeLogW");
  
  
    QHBox *box2 = new QHBox(autoSaveMenu);
    _autoSaveLabelW = new QLabel(i18n("Minutes between each auto save:"), box2,
                                 "_autoSaveLabelW");
    _autoSaveValueW = new QSpinBox(1, 60*24, 1, box2, "_autoSaveValueW");
  
    //----------------------------------------------------------------------
    // Idle Detection Setup
    //----------------------------------------------------------------------
    idleMenu = addVBoxPage(i18n("Idle Detection"));
  
    _doIdleDetectionW = new QCheckBox(i18n("Try to detect idleness"),
                                     idleMenu,"_doIdleDetectionW");
    connect(_doIdleDetectionW, SIGNAL(clicked()),
            this, SLOT(idleDetectCheckBoxChanged()));
  
    QHBox *box1 = new QHBox(idleMenu);
    _idleDetectLabelW = new QLabel(i18n("Minutes before informing about idleness:"), box1);
    _idleDetectValueW = new QSpinBox(1,60*24, 1, box1, "_idleDetectValueW");
  }
  
  Preferences *Preferences::instance()
  {
    if (_instance == 0) {
      _instance = new Preferences();
    }
    return _instance;
  }
  
  
  void Preferences::disableIdleDetection()
  {
    idleMenu->setEnabled(false);
  }
  
  
  //--------------------------------------------------------------------------------
  //                            SLOTS
  //--------------------------------------------------------------------------------
  
  void Preferences::showDialog()
  {
  
    // set all widgets
    _saveFileW->lineEdit()->setText(_saveFileV);
  
    _doTimeLogingW->setChecked(_doTimeLogingV);
    _timeLogW->lineEdit()->setText(_timeLogV);
  
    _doIdleDetectionW->setChecked(_doIdleDetectionV);
    _idleDetectValueW->setValue(_idleDetectValueV);
  
    _doAutoSaveW->setChecked(_doAutoSaveV);
    _autoSaveValueW->setValue(_autoSaveValueV);
  
    idleDetectCheckBoxChanged();
    show();
  }
  
  void Preferences::slotOk()
  {
    _saveFileV = _saveFileW->lineEdit()->text();
    _timeLogV = _timeLogW->lineEdit()->text();
    _doTimeLogingV    = _doTimeLogingW->isChecked();
    _doIdleDetectionV = _doIdleDetectionW->isChecked();
    _idleDetectValueV = _idleDetectValueW->value();
    _doAutoSaveV    = _doAutoSaveW->isChecked();
    _autoSaveValueV = _autoSaveValueW->value();
  
    emitSignals();
    save();
    KDialogBase::slotOk();
  }
  
  void Preferences::slotCancel()
  {
    KDialogBase::slotCancel();
  }
  
  void Preferences::idleDetectCheckBoxChanged()
  {
    bool enabled = _doIdleDetectionW->isChecked();
    _idleDetectLabelW->setEnabled(enabled);
    _idleDetectValueW->setEnabled(enabled);
  }
  
  void Preferences::autoSaveCheckBoxChanged()
  {
    bool enabled = _doAutoSaveW->isChecked();
    _autoSaveLabelW->setEnabled(enabled);
    _autoSaveValueW->setEnabled(enabled);
  }
  
  void Preferences::timeLogingCheckBoxChanged()
  {
    bool enabled = _doTimeLogingW->isChecked();
    _timeLogingLabelW->setEnabled(enabled);
    _timeLogW->setEnabled(enabled);
  }
  
  void Preferences::emitSignals()
  {
    emit(saveFile(_saveFileV));
    emit(timeLoging(_doTimeLogingV));
    emit(timeLog(_timeLogV));
    emit(detectIdleness(_doIdleDetectionV));
    emit(idlenessTimeout(_idleDetectValueV));
    emit(autoSave(_doAutoSaveV));
    emit(autoSavePeriod(_autoSaveValueV));
    emit(setupChanged());
  }
  
  QString Preferences::saveFile()
  {
    return _saveFileV;
  }
  
  QString Preferences::timeLog()
  {
    return _timeLogV;
  }
  
  bool Preferences::detectIdleness()
  {
    return _doIdleDetectionV;
  }
  
  int Preferences::idlenessTimeout()
  {
    return _idleDetectValueV;
  }
  
  bool Preferences::autoSave()
  {
    return _doAutoSaveV;
  }
  
  bool Preferences::timeLoging() 
  {
    return _doTimeLogingV;
  }
  
  int Preferences::autoSavePeriod()
  {
    return _autoSaveValueV;
  }
  
  
  //--------------------------------------------------------------------------------
  //                                  Load and Save
  //--------------------------------------------------------------------------------
  void Preferences::load()
  {
    KConfig &config = *kapp->config();
  
    config.setGroup( QString::fromLatin1("Idle detection") );
    _doIdleDetectionV = config.readBoolEntry(QString::fromLatin1("enabled"), true );
    _idleDetectValueV = config.readNumEntry(QString::fromLatin1("period"), 15);
  
    config.setGroup( QString::fromLatin1("Saving") );
    _saveFileV      = config.readEntry(QString::fromLatin1("file"),
                                       locateLocal("appdata",
                                                   QString::fromLatin1("karmdata.txt")));
    _doTimeLogingV  = config.readBoolEntry(QString::fromLatin1("time loging"),
    false);
    _timeLogV   = config.readEntry(QString::fromLatin1("time log file"),
    								 locateLocal("appdata",
                                               QString::fromLatin1("karmlog.txt")));
    _doAutoSaveV    = config.readBoolEntry(QString::fromLatin1("auto save"), true);
    _autoSaveValueV = config.readNumEntry(QString::fromLatin1("auto save period"), 5);
  
    emitSignals();
  }
  
  void Preferences::save()
  {
    KConfig &config = *KGlobal::config();
  
    config.setGroup( QString::fromLatin1("Idle detection"));
    config.writeEntry( QString::fromLatin1("enabled"), _doIdleDetectionV);
    config.writeEntry( QString::fromLatin1("period"), _idleDetectValueV);
  
    config.setGroup( QString::fromLatin1("Saving"));
    config.writeEntry( QString::fromLatin1("file"), _saveFileV);
    config.writeEntry( QString::fromLatin1("time loging"), _doTimeLogingV);
    config.writeEntry( QString::fromLatin1("time log file"), _timeLogV);
    config.writeEntry( QString::fromLatin1("auto save"), _doAutoSaveV);
    config.writeEntry( QString::fromLatin1("auto save period"), _autoSaveValueV);
  
    config.sync();
  
  }
  
  #include "preferences.moc"
  Index: ossp-pkg/titraq/preferences.h
  ============================================================
  $ cvs update -p -r1.1.1.1 preferences.h
  #ifndef __preferences_h
  #define __preferences_h
  
  #include <kdialogbase.h>
  
  class QCheckBox;
  class QLabel;
  class QSpinBox;
  class KURLRequester;
  
  class Preferences :public KDialogBase 
  {
  Q_OBJECT
  
  public:
    static Preferences *instance();
    void disableIdleDetection();
    
     // Retrive information about settings
    bool detectIdleness();
    int idlenessTimeout();
    QString saveFile();
    bool timeLoging();
    QString timeLog();
    bool autoSave();
    int autoSavePeriod();
  
  public slots:
    void showDialog();
    void load();
    void save();
    
  
  signals:  
    void detectIdleness(bool on);
    void idlenessTimeout(int minutes);
    void saveFile(QString);
    void timeLoging(bool on);
    void timeLog(QString);
    void autoSave(bool on);
    void autoSavePeriod(int minutes);
    void setupChanged();
    
  protected slots:
    virtual void slotOk();
    virtual void slotCancel();
    void idleDetectCheckBoxChanged();
    void autoSaveCheckBoxChanged();
    void timeLogingCheckBoxChanged();
    
  protected:
    void emitSignals();
  
  private:
    Preferences();
    static Preferences *_instance;
    bool _unsavedChanges;
  
    // Widgets in the dialog (All variables ends in W to indicate that they are Widgets)
    QCheckBox *_doIdleDetectionW, *_doAutoSaveW, *_doTimeLogingW;
    QLabel    *_idleDetectLabelW, *_autoSaveLabelW, *_timeLogingLabelW;
    QSpinBox  *_idleDetectValueW, *_autoSaveValueW;
    KURLRequester *_saveFileW, *_timeLogW;
    QVBox *idleMenu;
    
    // Values for the preferences. (All variables in in V to indicate they are Values)
    bool _doIdleDetectionV, _doAutoSaveV, _doTimeLogingV;
    int  _idleDetectValueV, _autoSaveValueV;
    QString _saveFileV, _timeLogV;
    
  };
  
  #endif
  
  Index: ossp-pkg/titraq/print.cpp
  ============================================================
  $ cvs update -p -r1.1.1.1 print.cpp
  #include <iostream>
  #include "task.h"
  #include "print.h"
  #include "klocale.h"
  #include <qpainter.h>
  #include <qpaintdevicemetrics.h>
  #include <qdatetime.h>
  
  const int levelIndent = 10;
  
  MyPrinter::MyPrinter(const Karm *karm)
  {
    _karm = karm;
  }
  
  void MyPrinter::print()
  {
  	if (setup()) {
  		// setup
  		QPainter painter(this);
  		QPaintDeviceMetrics deviceMetrics(this);
  		QFontMetrics metrics = painter.fontMetrics();
  		pageHeight = deviceMetrics.height();
  		int pageWidth = deviceMetrics.width();
      xMargin = margins().width();
      yMargin = margins().height();
      yoff = yMargin;
      lineHeight = metrics.height();
      
  
  		// Calculate the totals
      // Note the totals are only calculated at the top most levels, as the
      // totals are increased together with its children.
      int totalTotal = 0;
      int sessionTotal = 0;
  		for (QListViewItem *child = _karm->firstChild(); child;
  				 child = child->nextSibling()) {
  			Task *task = (Task *) child;
  
        totalTotal += task->totalTime();
        sessionTotal += task->sessionTime();
  		}
  
      // Calculate the needed width for each of the fields
      totalTimeWidth = QMAX(metrics.width(i18n("Total")),
                            metrics.width(Karm::formatTime(totalTotal)));
      sessionTimeWidth = QMAX(metrics.width(i18n("Session")),
                              metrics.width(Karm::formatTime(sessionTotal)));
  
      nameFieldWidth = pageWidth - xMargin - totalTimeWidth - sessionTimeWidth - 2*5;
      
      int maxReqNameFieldWidth= metrics.width(i18n("Task Name "));
  		
      for (QListViewItem *child = _karm->firstChild(); child;
           child = child->nextSibling()) {
        int width = calculateReqNameWidth(child, metrics, 0);
        maxReqNameFieldWidth = QMAX(maxReqNameFieldWidth, width);
      }
      nameFieldWidth = QMIN(nameFieldWidth, maxReqNameFieldWidth);
  
      int realPageWidth = nameFieldWidth + totalTimeWidth + sessionTimeWidth + 2*5;
  
  		// Print the header
  		QFont origFont, newFont;
  		origFont = painter.font();
  		newFont = origFont;
  		newFont.setPixelSize(origFont.pixelSize() * 1.5);
  		painter.setFont(newFont);
  		
  		int height = metrics.height();
  		QString now = QDateTime::currentDateTime().toString();
  		
  		painter.drawText(xMargin, yoff, pageWidth, height,
  				 QPainter::AlignCenter, 
  				 i18n("KArm - %1").arg(now));
  		
  		painter.setFont(origFont);
  		yoff += height + 10;
  
      // Print the second header.
      printLine(i18n("Total"), i18n("Session"), i18n("Task Name"), painter, 0);
  		
      yoff += 4;
      painter.drawLine(xMargin, yoff, xMargin + realPageWidth, yoff);
      yoff += 2;
      
      // Now print the actual content
      for (QListViewItem *child = _karm->firstChild(); child;
         child = child->nextSibling()) {
        printTask(child, painter, 0);
      }
      
  
      yoff += 4;
      painter.drawLine(xMargin, yoff, xMargin + realPageWidth, yoff);
      yoff += 2;
      
      // Print the Totals
      printLine(Karm::formatTime(totalTotal),
                Karm::formatTime(sessionTotal),
                QString(), painter, 0);
      
      
  	}
  }
  
  int MyPrinter::calculateReqNameWidth(QListViewItem *item,
                                       QFontMetrics &metrics,
                                       int level) 
  {
    Task *task = (Task *) item;
    int width = metrics.width(task->name()) + level * levelIndent;
  
    for (QListViewItem *child = item->firstChild(); child;
         child = child->nextSibling()) {
      int childWidth = calculateReqNameWidth(child, metrics, level+1);
      width = QMAX(width, childWidth);
    }
    return width;
  }
  
  void MyPrinter::printTask(QListViewItem *item, QPainter &painter, int level)
  {
    Task *task = (Task *) item;
    QString totalTime = Karm::formatTime(task->totalTime());
    QString sessionTime = Karm::formatTime(task->sessionTime());
    QString name = task->name();
    printLine(totalTime, sessionTime, name, painter, level);
  
    for (QListViewItem *child = item->firstChild(); child;
         child = child->nextSibling()) {
      printTask(child, painter, level+1);
    }      
  }
  
  void MyPrinter::printLine(QString total, QString session, QString name, 
                            QPainter &painter, int level)
  {
    int xoff = xMargin + 10 * level;
    
    painter.drawText(xoff, yoff, nameFieldWidth, lineHeight, QPainter::AlignLeft, name);
    xoff = xMargin + nameFieldWidth;
    
    painter.drawText(xoff, yoff, sessionTimeWidth, lineHeight, QPainter::AlignRight, session);
    xoff += sessionTimeWidth+ 5;
    
    painter.drawText(xoff, yoff, totalTimeWidth, lineHeight, QPainter::AlignRight, total);
    xoff += totalTimeWidth+5;
  
    yoff += lineHeight;
    
    if (yoff + 2* lineHeight > pageHeight) {
      newPage();
      yoff = yMargin;
    }
  }
  Index: ossp-pkg/titraq/print.h
  ============================================================
  $ cvs update -p -r1.1.1.1 print.h
  #ifndef ___print_h
  #define ___print_h
  
  #undef Color // X11 headers
  #undef GrayScale // X11 headers
  #include <kprinter.h>
  #include <qpainter.h>
  #include "karm.h"
  
  class MyPrinter :public KPrinter
  {
  public:
    MyPrinter(const Karm *karm);
    void print();
    void printLine(QString total, QString session, QString name, QPainter &, int);
    void printTask(QListViewItem *item, QPainter &,int level);  
    int calculateReqNameWidth(QListViewItem *item, QFontMetrics &metrics, int level);
    
  private:
    const Karm *_karm;
  
    int xMargin, yMargin;
    int yoff;
    int totalTimeWidth;
    int sessionTimeWidth;
    int nameFieldWidth;
    int lineHeight;
    int pageHeight;  
  };
  
  #endif
  
  Index: ossp-pkg/titraq/shtool
  ============================================================
  $ cvs update -p -r1.1.1.1 shtool
  #!/bin/sh
  ##
  ##  GNU shtool -- The GNU Portable Shell Tool
  ##  Copyright (c) 1994-2002 Ralf S. Engelschall <rse@engelschall.com>
  ##
  ##  See http://www.gnu.org/software/shtool/ for more information.
  ##  See ftp://ftp.gnu.org/gnu/shtool/ for latest version.
  ##
  ##  Version:  1.6.1 (12-Jul-2002)
  ##  Contents: all available modules
  ##
  
  ##
  ##  This program is free software; you can redistribute it and/or modify
  ##  it under the terms of the GNU General Public License as published by
  ##  the Free Software Foundation; either version 2 of the License, or
  ##  (at your option) any later version.
  ##
  ##  This program is distributed in the hope that it will be useful,
  ##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  ##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  ##  General Public License for more details.
  ##
  ##  You should have received a copy of the GNU General Public License
  ##  along with this program; if not, write to the Free Software
  ##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  ##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  ##
  ##  NOTICE: Given that you include this file verbatim into your own
  ##  source tree, you are justified in saying that it remains separate
  ##  from your package, and that this way you are simply just using GNU
  ##  shtool. So, in this situation, there is no requirement that your
  ##  package itself is licensed under the GNU General Public License in
  ##  order to take advantage of GNU shtool.
  ##
  
  ##
  ##  Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]
  ##
  ##  Available commands:
  ##    echo       Print string with optional construct expansion
  ##    mdate      Pretty-print modification time of a file or dir
  ##    table      Pretty-print a field-separated list as a table
  ##    prop       Display progress with a running propeller
  ##    move       Move files with simultaneous substitution
  ##    install    Install a program, script or datafile
  ##    mkdir      Make one or more directories
  ##    mkln       Make link with calculation of relative paths
  ##    mkshadow   Make a shadow tree through symbolic links
  ##    fixperm    Fix file permissions inside a source tree
  ##    rotate     Logfile rotation
  ##    tarball    Roll distribution tarballs
  ##    subst      Apply sed(1) substitution operations
  ##    guessos    Simple operating system guesser
  ##    arx        Extended archive command
  ##    slo        Separate linker options by library class
  ##    scpp       Sharing C Pre-Processor
  ##    version    Maintain a version information file
  ##    path       Deal with program paths
  ##
  
  if [ $# -eq 0 ]; then
      echo "$0:Error: invalid command line" 1>&2
      echo "$0:Hint:  run \`$0 -h' for usage" 1>&2
      exit 1
  fi
  if [ ".$1" = ".-h" -o ".$1" = ".--help" ]; then
      echo "This is GNU shtool, version 1.6.1 (12-Jul-2002)"
      echo "Copyright (c) 1994-2002 Ralf S. Engelschall <rse@engelschall.com>"
      echo "Report bugs to <bug-shtool@gnu.org>"
      echo ''
      echo "Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]"
      echo ''
      echo 'Available global <options>:'
      echo '  -v, --version   display shtool version information'
      echo '  -h, --help      display shtool usage help page (this one)'
      echo '  -d, --debug     display shell trace information'
      echo '  -r, --recreate  recreate this shtool script via shtoolize'
      echo ''
      echo 'Available <cmd-name> [<cmd-options>] [<cmd-args>]:'
      echo '  echo     [-n|--newline] [-e|--expand] [<str> ...]'
      echo '  mdate    [-n|--newline] [-z|--zero] [-s|--shorten] [-d|--digits]'
      echo '           [-f|--field-sep <str>] [-o|--order <spec>] <path>'
      echo '  table    [-F|--field-sep <sep>] [-w|--width <width>] [-c|--columns'
      echo '           <cols>] [-s|--strip <strip>] <str><sep><str>...'
      echo '  prop     [-p|--prefix <str>]'
      echo '  move     [-v|--verbose] [-t|--trace] [-e|--expand] [-p|--preserve]'
      echo '           <src-file> <dst-file>'
      echo '  install  [-v|--verbose] [-t|--trace] [-c|--copy] [-C|--compare-copy]'
      echo '           [-s|--strip] [-m|--mode <mode>] [-o|--owner <owner>]'
      echo '           [-g|--group <group>] [-e|--exec <sed-cmd>] <file> [<file>'
      echo '           ...] <path>'
      echo '  mkdir    [-t|--trace] [-f|--force] [-p|--parents] [-m|--mode'
      echo '           <mode>] <dir> [<dir> ...]'
      echo '  mkln     [-t|--trace] [-f|--force] [-s|--symbolic] <src-path>'
      echo '           [<src-path> ...] <dst-path>'
      echo '  mkshadow [-v|--verbose] [-t|--trace] [-a|--all] <src-dir> <dst-dir>'
      echo '  fixperm  [-v|--verbose] [-t|--trace] <path> [<path> ...]'
      echo '  rotate   [-v|--verbose] [-t|--trace] [-f|--force] [-n|--num-files'
      echo '           <count>] [-s|--size <size>] [-c|--copy] [-r|--remove]'
      echo '           [-a|--archive-dir <dir>] [-z|--compress [<tool>:]<level>]'
      echo '           [-b|--background] [-d|--delay] [-p|--pad <len>] [-o|--owner'
      echo '           <owner>] [-g|--group <group>] [-m|--mode <mode>] [-M|--migrate'
      echo '           <cmd>] [-P|--prolog <cmd>] [-E|--epilog <cmd>] <file> [...]'
      echo '  tarball  [-t|--trace] [-v|--verbose] [-o|--output <tarball>]'
      echo '           [-c|--compress <prog>] [-d|--directory <dir>] [-u|--user'
      echo '           <user>] [-g|--group <group>] [-e|--exclude <pattern>]'
      echo '           <path> [<path> ...]'
      echo '  subst    [-v|--verbose] [-t|--trace] [-n|--nop] [-s|--stealth]'
      echo '           [-i|--interactive] [-b|--backup <ext>] [-e|--exec <cmd>]'
      echo '           [-f|--file <cmd-file>] [<file>] [...]'
      echo '  guessos  '
      echo '  arx      [-t|--trace] [-C|--command <cmd>] <op> <archive> [<file>'
      echo '           ...]'
      echo '  slo      [-p|--prefix <str>] -- -L<dir> -l<lib> [-L<dir> -l<lib>'
      echo '           ...]'
      echo '  scpp     [-v|--verbose] [-p|--preserve] [-f|--filter <filter>]'
      echo '           [-o|--output <ofile>] [-t|--template <tfile>] [-M|--mark'
      echo '           <mark>] [-D|--define <dname>] [-C|--class <cname>]'
      echo '           <file> [<file> ...]'
      echo '  version  [-l|--language <lang>] [-n|--name <name>] [-p|--prefix'
      echo '           <prefix>] [-s|--set <version>] [-e|--edit] [-i|--increase'
      echo '           <knob>] [-d|--display <type>] <file>'
      echo '  path     [-s|--suppress] [-r|--reverse] [-d|--dirname] [-b|--basename]'
      echo '           [-m|--magic] [-p|--path <path>] <str> [<str> ...]'
      echo ''
      exit 0
  fi
  if [ ".$1" = ".-v" -o ".$1" = ."--version" ]; then
      echo "GNU shtool 1.6.1 (12-Jul-2002)"
      exit 0
  fi
  if [ ".$1" = ".-r" -o ".$1" = ."--recreate" ]; then
      shtoolize -oshtool all
      exit 0
  fi
  if [ ".$1" = ".-d" -o ".$1" = ."--debug" ]; then
      shift
      set -x
  fi
  name=`echo "$0" | sed -e 's;.*/\([^/]*\)$;\1;' -e 's;-sh$;;' -e 's;\.sh$;;'`
  case "$name" in
      echo|mdate|table|prop|move|install|mkdir|mkln|mkshadow|fixperm|rotate|tarball|subst|guessos|arx|slo|scpp|version|path )
          #   implicit tool command selection
          tool="$name"
          ;;
      * )
          #   explicit tool command selection
          tool="$1"
          shift
          ;;
  esac
  arg_spec=""
  opt_spec=""
  gen_tmpfile=no
  
  ##
  ##  DISPATCH INTO SCRIPT PROLOG
  ##
  
  case $tool in
      echo )
          str_tool="echo"
          str_usage="[-n|--newline] [-e|--expand] [<str> ...]"
          arg_spec="0+"
          opt_spec="n.e."
          opt_alias="n:newline,e:expand"
          opt_n=no
          opt_e=no
          ;;
      mdate )
          str_tool="mdate"
          str_usage="[-n|--newline] [-z|--zero] [-s|--shorten] [-d|--digits] [-f|--field-sep <str>] [-o|--order <spec>] <path>"
          arg_spec="1="
          opt_spec="n.z.s.d.f:o:"
          opt_alias="n:newline,z:zero,s:shorten,d:digits,f:field-sep,o:order"
          opt_n=no
          opt_z=no
          opt_s=no
          opt_d=no
          opt_f=" "
          opt_o="dmy"
          ;;
      table )
          str_tool="table"
          str_usage="[-F|--field-sep <sep>] [-w|--width <width>] [-c|--columns <cols>] [-s|--strip <strip>] <str><sep><str>..."
          arg_spec="1+"
          opt_spec="F:w:c:s:"
          opt_alias="F:field-sep,w:width,c:columns,s:strip"
          opt_F=":"
          opt_w=15
          opt_c=3
          opt_s=79
          ;;
      prop )
          str_tool="prop"
          str_usage="[-p|--prefix <str>]"
          arg_spec="0="
          opt_spec="p:"
          opt_alias="p:prefix"
          opt_p=""
          ;;
      move )
          str_tool="move"
          str_usage="[-v|--verbose] [-t|--trace] [-e|--expand] [-p|--preserve] <src-file> <dst-file>"
          arg_spec="2="
          opt_spec="v.t.e.p."
          opt_alias="v:verbose,t:trace,e:expand,p:preserve"
          opt_v=no
          opt_t=no
          opt_e=no
          opt_p=no
          ;;
      install )
          str_tool="install"
          str_usage="[-v|--verbose] [-t|--trace] [-c|--copy] [-C|--compare-copy] [-s|--strip] [-m|--mode <mode>] [-o|--owner <owner>] [-g|--group <group>] [-e|--exec <sed-cmd>] <file> [<file> ...] <path>"
          arg_spec="2+"
          opt_spec="v.t.c.C.s.m:o:g:e+"
          opt_alias="v:verbose,t:trace,c:copy,C:compare-copy,s:strip,m:mode,o:owner,g:group,e:exec"
          opt_v=no
          opt_t=no
          opt_c=no
          opt_C=no
          opt_s=no
          opt_m="0755"
          opt_o=""
          opt_g=""
          opt_e=""
          ;;
      mkdir )
          str_tool="mkdir"
          str_usage="[-t|--trace] [-f|--force] [-p|--parents] [-m|--mode <mode>] <dir> [<dir> ...]"
          arg_spec="1+"
          opt_spec="t.f.p.m:"
          opt_alias="t:trace,f:force,p:parents,m:mode"
          opt_t=no
          opt_f=no
          opt_p=no
          opt_m=""
          ;;
      mkln )
          str_tool="mkln"
          str_usage="[-t|--trace] [-f|--force] [-s|--symbolic] <src-path> [<src-path> ...] <dst-path>"
          arg_spec="2+"
          opt_spec="t.f.s."
          opt_alias="t:trace,f:force,s:symbolic"
          opt_t=no
          opt_f=no
          opt_s=no
          ;;
      mkshadow )
          str_tool="mkshadow"
          str_usage="[-v|--verbose] [-t|--trace] [-a|--all] <src-dir> <dst-dir>"
          arg_spec="2="
          opt_spec="v.t.a."
          opt_alias="v:verbose,t:trace,a:all"
          opt_v=no
          opt_t=no
          opt_a=no
          ;;
      fixperm )
          str_tool="fixperm"
          str_usage="[-v|--verbose] [-t|--trace] <path> [<path> ...]"
          arg_spec="1+"
          opt_spec="v.t."
          opt_alias="v:verbose,t:trace"
          opt_v=no
          opt_t=no
          ;;
      rotate )
          str_tool="rotate"
          str_usage="[-v|--verbose] [-t|--trace] [-f|--force] [-n|--num-files <count>] [-s|--size <size>] [-c|--copy] [-r|--remove] [-a|--archive-dir <dir>] [-z|--compress [<tool>:]<level>] [-b|--background] [-d|--delay] [-p|--pad <len>] [-o|--owner <owner>] [-g|--group <group>] [-m|--mode <mode>] [-M|--migrate <cmd>] [-P|--prolog <cmd>] [-E|--epilog <cmd>] <file> [...]"
          arg_spec="1+"
          opt_spec="v.t.f.n:s:c.r.a:z:b.d.p:o:g:m:M:P:E:"
          opt_alias="v:verbose,t:trace,f:force,n:num-files,s:size,c:copy,r:remove,a:archive-dir,z:compress,b:background,d:delay,p:pad,o:owner,g:group,m:mode,M:migrate,P:prolog,E:epilog"
          opt_v=no
          opt_t=no
          opt_f=no
          opt_n=10
          opt_s=""
          opt_c=no
          opt_r=no
          opt_a=""
          opt_z=""
          opt_b=no
          opt_d=no
          opt_p=1
          opt_o=""
          opt_g=""
          opt_m=""
          opt_M=""
          opt_P=""
          opt_E=""
          ;;
      tarball )
          str_tool="tarball"
          str_usage="[-t|--trace] [-v|--verbose] [-o|--output <tarball>] [-c|--compress <prog>] [-d|--directory <dir>] [-u|--user <user>] [-g|--group <group>] [-e|--exclude <pattern>] <path> [<path> ...]"
          gen_tmpfile=yes
          arg_spec="1+"
          opt_spec="t.v.o:c:d:u:g:e:"
          opt_alias="t:trace,v:verbose,o:output,c:compress,d:directory,u:user,g:group,e:exclude"
          opt_t=no
          opt_v=no
          opt_o=""
          opt_c=""
          opt_d=""
          opt_u=""
          opt_g=""
          opt_e="CVS,\\.cvsignore,\\.[oa]\$"
          ;;
      subst )
          str_tool="subst"
          str_usage="[-v|--verbose] [-t|--trace] [-n|--nop] [-s|--stealth] [-i|--interactive] [-b|--backup <ext>] [-e|--exec <cmd>] [-f|--file <cmd-file>] [<file>] [...]"
          gen_tmpfile=yes
          arg_spec="0+"
          opt_spec="v.t.n.s.i.b:e+f:"
          opt_alias="v:verbose,t:trace,n:nop,s:stealth,i:interactive,b:backup,e:exec,f:file"
          opt_v=no
          opt_t=no
          opt_n=no
          opt_s=no
          opt_i=no
          opt_b=""
          opt_e=""
          opt_f=""
          ;;
      guessos )
          str_tool="guessos"
          str_usage=""
          arg_spec="0="
          opt_spec=""
          opt_alias=""
          ;;
      arx )
          str_tool="arx"
          str_usage="[-t|--trace] [-C|--command <cmd>] <op> <archive> [<file> ...]"
          arg_spec="2+"
          opt_spec="t.C:"
          opt_alias="t:trace,C:command"
          opt_t=no
          opt_C="ar"
          ;;
      slo )
          str_tool="slo"
          str_usage="[-p|--prefix <str>] -- -L<dir> -l<lib> [-L<dir> -l<lib> ...]"
          arg_spec="1+"
          opt_spec="p:"
          opt_alias="p:prefix"
          opt_p="SLO_"
          ;;
      scpp )
          str_tool="scpp"
          str_usage="[-v|--verbose] [-p|--preserve] [-f|--filter <filter>] [-o|--output <ofile>] [-t|--template <tfile>] [-M|--mark <mark>] [-D|--define <dname>] [-C|--class <cname>] <file> [<file> ...]"
          gen_tmpfile=yes
          arg_spec="1+"
          opt_spec="v.p.f+o:t:M:D:C:"
          opt_alias="v:verbose,p:preserve,f:filter,o:output,t:template,M:mark,D:define,C:class"
          opt_v=no
          opt_p=no
          opt_f=""
          opt_o="lib.h"
          opt_t="lib.h.in"
          opt_M="%%MARK%%"
          opt_D="cpp"
          opt_C="intern"
          ;;
      version )
          str_tool="version"
          str_usage="[-l|--language <lang>] [-n|--name <name>] [-p|--prefix <prefix>] [-s|--set <version>] [-e|--edit] [-i|--increase <knob>] [-d|--display <type>] <file>"
          arg_spec="1="
          opt_spec="l:n:p:s:i:e.d:"
          opt_alias="l:language,n:name,p:prefix,s:set,e:edit,i:increase,d:display"
          opt_l="txt"
          opt_n="unknown"
          opt_p=""
          opt_s=""
          opt_e="no"
          opt_i=""
          opt_d="short"
          ;;
      path )
          str_tool="path"
          str_usage="[-s|--suppress] [-r|--reverse] [-d|--dirname] [-b|--basename] [-m|--magic] [-p|--path <path>] <str> [<str> ...]"
          gen_tmpfile=yes
          arg_spec="1+"
          opt_spec="s.r.d.b.m.p:"
          opt_alias="s:suppress,r:reverse,d:dirname,b:basename,m:magic,p:path"
          opt_s=no
          opt_r=no
          opt_d=no
          opt_b=no
          opt_m=no
          opt_p="$PATH"
          ;;
      -* )
          echo "$0:Error: unknown option \`$tool'" 2>&1
          echo "$0:Hint:  run \`$0 -h' for usage" 2>&1
          exit 1
          ;;
      * )
          echo "$0:Error: unknown command \`$tool'" 2>&1
          echo "$0:Hint:  run \`$0 -h' for usage" 2>&1
          exit 1
          ;;
  esac
  
  ##
  ##  COMMON UTILITY CODE
  ##
  
  #   commonly used ASCII values
  ASC_TAB="	"
  ASC_NL="
  "
  
  #   determine name of tool
  if [ ".$tool" != . ]; then
      #   used inside shtool script
      toolcmd="$0 $tool"
      toolcmdhelp="shtool $tool"
      msgprefix="shtool:$tool"
  else
      #   used as standalone script
      toolcmd="$0"
      toolcmdhelp="sh $0"
      msgprefix="$str_tool"
  fi
  
  #   parse argument specification string
  eval `echo $arg_spec |\
        sed -e 's/^\([0-9]*\)\([+=]\)/arg_NUMS=\1; arg_MODE=\2/'`
  
  #   parse option specification string
  eval `echo h.$opt_spec |\
        sed -e 's/\([a-zA-Z0-9]\)\([.:+]\)/opt_MODE_\1=\2;/g'`
  
  #   parse option alias string
  eval `echo h:help,$opt_alias |\
        tr 'x-' 'x_' | sed -e 's/\([a-zA-Z0-9]\):\([^,]*\),*/opt_ALIAS_\2=\1;/g'`
  
  #   interate over argument line
  opt_PREV=''
  while [ $# -gt 0 ]; do
      #   special option stops processing
      if [ ".$1" = ".--" ]; then
          shift
          break
      fi
  
      #   determine option and argument
      opt_ARG_OK=no
      if [ ".$opt_PREV" != . ]; then
          #   merge previous seen option with argument
          opt_OPT="$opt_PREV"
          opt_ARG="$1"
          opt_ARG_OK=yes
          opt_PREV=''
      else
          #   split argument into option and argument
          case "$1" in
              --[a-zA-Z0-9]*=*)
                  eval `echo "x$1" |\
                        sed -e 's/^x--\([a-zA-Z0-9-]*\)=\(.*\)$/opt_OPT="\1";opt_ARG="\2"/'`
                  opt_STR=`echo $opt_OPT | tr 'x-' 'x_'`
                  eval "opt_OPT=\${opt_ALIAS_${opt_STR}-${opt_OPT}}"
                  ;;
              --[a-zA-Z0-9]*)
                  opt_OPT=`echo "x$1" | cut -c4-`
                  opt_STR=`echo $opt_OPT | tr 'x-' 'x_'`
                  eval "opt_OPT=\${opt_ALIAS_${opt_STR}-${opt_OPT}}"
                  opt_ARG=''
                  ;;
              -[a-zA-Z0-9]*)
                  eval `echo "x$1" |\
                        sed -e 's/^x-\([a-zA-Z0-9]\)/opt_OPT="\1";/' \
                            -e 's/";\(.*\)$/"; opt_ARG="\1"/'`
                  ;;
              -[a-zA-Z0-9])
                  opt_OPT=`echo "x$1" | cut -c3-`
                  opt_ARG=''
                  ;;
              *)
                  break
                  ;;
          esac
      fi
  
      #   eat up option
      shift
  
      #   determine whether option needs an argument
      eval "opt_MODE=\$opt_MODE_${opt_OPT}"
      if [ ".$opt_ARG" = . -a ".$opt_ARG_OK" != .yes ]; then
          if [ ".$opt_MODE" = ".:" -o ".$opt_MODE" = ".+" ]; then
              opt_PREV="$opt_OPT"
              continue
          fi
      fi
  
      #   process option
      case $opt_MODE in
          '.' )
              #   boolean option
              eval "opt_${opt_OPT}=yes"
              ;;
          ':' )
              #   option with argument (multiple occurances override)
              eval "opt_${opt_OPT}=\"\$opt_ARG\""
              ;;
          '+' )
              #   option with argument (multiple occurances append)
              eval "opt_${opt_OPT}=\"\$opt_${opt_OPT}\${ASC_NL}\$opt_ARG\""
              ;;
          * )
              echo "$msgprefix:Error: unknown option: \`$opt_OPT'" 1>&2
              echo "$msgprefix:Hint:  run \`$toolcmdhelp -h' or \`man shtool' for details" 1>&2
              exit 1
              ;;
      esac
  done
  if [ ".$opt_PREV" != . ]; then
      echo "$msgprefix:Error: missing argument to option \`$opt_PREV'" 1>&2
      echo "$msgprefix:Hint:  run \`$toolcmdhelp -h' or \`man shtool' for details" 1>&2
      exit 1
  fi
  
  #   process help option
  if [ ".$opt_h" = .yes ]; then
      echo "Usage: $toolcmdhelp $str_usage"
      exit 0
  fi
  
  #   complain about incorrect number of arguments
  case $arg_MODE in
      '=' )
          if [ $# -ne $arg_NUMS ]; then
              echo "$msgprefix:Error: invalid number of arguments (exactly $arg_NUMS expected)" 1>&2
              echo "$msgprefix:Hint:  run \`$toolcmd -h' or \`man shtool' for details" 1>&2
              exit 1
          fi
          ;;
      '+' )
          if [ $# -lt $arg_NUMS ]; then
              echo "$msgprefix:Error: invalid number of arguments (at least $arg_NUMS expected)" 1>&2
              echo "$msgprefix:Hint:  run \`$toolcmd -h' or \`man shtool' for details" 1>&2
              exit 1
          fi
          ;;
  esac
  
  #   establish a temporary file on request
  if [ ".$gen_tmpfile" = .yes ]; then
      if [ ".$TMPDIR" != . ]; then
          tmpdir="$TMPDIR"
      elif [ ".$TEMPDIR" != . ]; then
          tmpdir="$TEMPDIR"
      else
          tmpdir="/tmp"
      fi
      tmpfile="$tmpdir/.shtool.$$"
      rm -f $tmpfile >/dev/null 2>&1
      touch $tmpfile
      chmod 600 $tmpfile
  fi
  
  ##
  ##  DISPATCH INTO SCRIPT BODY
  ##
  
  case $tool in
  
  echo )
      ##
      ##  echo -- Print string with optional construct expansion
      ##  Copyright (c) 1998-2002 Ralf S. Engelschall <rse@engelschall.com>
      ##  Originally written for WML as buildinfo
      ##
      
      text="$*"
      
      #   check for broken escape sequence expansion
      seo=''
      bytes=`echo '\1' | wc -c | awk '{ printf("%s", $1); }'`
      if [ ".$bytes" != .3 ]; then
          bytes=`echo -E '\1' | wc -c | awk '{ printf("%s", $1); }'`
          if [ ".$bytes" = .3 ]; then
              seo='-E'
          fi
      fi
      
      #   check for existing -n option (to suppress newline)
      minusn=''
      bytes=`echo -n 123 2>/dev/null | wc -c | awk '{ printf("%s", $1); }'`
      if [ ".$bytes" = .3 ]; then
          minusn='-n'
      fi
      
      #   determine terminal bold sequence
      term_bold=''
      term_norm=''
      if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[Bb]'`" != . ]; then
          case $TERM in
              #   for the most important terminal types we directly know the sequences
              xterm|xterm*|vt220|vt220*)
                  term_bold=`awk 'BEGIN { printf("%c%c%c%c", 27, 91, 49, 109); }' </dev/null 2>/dev/null`
                  term_norm=`awk 'BEGIN { printf("%c%c%c", 27, 91, 109); }' </dev/null 2>/dev/null`
                  ;;
              vt100|vt100*)
                  term_bold=`awk 'BEGIN { printf("%c%c%c%c%c%c", 27, 91, 49, 109, 0, 0); }' </dev/null 2>/dev/null`
                  term_norm=`awk 'BEGIN { printf("%c%c%c%c%c", 27, 91, 109, 0, 0); }' </dev/null 2>/dev/null`
                  ;;
              #   for all others, we try to use a possibly existing `tput' or `tcout' utility
              * )
                  paths=`echo $PATH | sed -e 's/:/ /g'`
                  for tool in tput tcout; do
                      for dir in $paths; do
                          if [ -r "$dir/$tool" ]; then
                              for seq in bold md smso; do # 'smso' is last
                                  bold="`$dir/$tool $seq 2>/dev/null`"
                                  if [ ".$bold" != . ]; then
                                      term_bold="$bold"
                                      break
                                  fi
                              done
                              if [ ".$term_bold" != . ]; then
                                  for seq in sgr0 me rmso reset; do # 'reset' is last
                                      norm="`$dir/$tool $seq 2>/dev/null`"
                                      if [ ".$norm" != . ]; then
                                          term_norm="$norm"
                                          break
                                      fi
                                  done
                              fi
                              break
                          fi
                      done
                      if [ ".$term_bold" != . -a ".$term_norm" != . ]; then
                          break;
                      fi
                  done
                  ;;
          esac
          if [ ".$term_bold" = . -o ".$term_norm" = . ]; then
              echo "$msgprefix:Warning: unable to determine terminal sequence for bold mode" 1>&2
          fi
      fi
      
      #   determine user name
      username=''
      if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[uUgG]'`" != . ]; then
          username="$LOGNAME"
          if [ ".$username" = . ]; then
              username="$USER"
              if [ ".$username" = . ]; then
                  username="`(whoami) 2>/dev/null |\
                             awk '{ printf("%s", $1); }'`"
                  if [ ".$username" = . ]; then
                      username="`(who am i) 2>/dev/null |\
                                 awk '{ printf("%s", $1); }'`"
                      if [ ".$username" = . ]; then
                          username='unknown'
                      fi
                  fi
              fi
          fi
      fi
      
      #   determine user id
      userid=''
      if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%U'`" != . ]; then
          userid="`(id -u) 2>/dev/null`"
          if [ ".$userid" = . ]; then
              str="`(id) 2>/dev/null`"
              if [ ".`echo $str | grep '^uid[ 	]*=[ 	]*[0-9]*('`" != . ]; then
                  userid=`echo $str | sed -e 's/^uid[ 	]*=[ 	]*//' -e 's/(.*//'`
              fi
              if [ ".$userid" = . ]; then
                  userid=`egrep "^${username}:" /etc/passwd 2>/dev/null | \
                          sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'`
                  if [ ".$userid" = . ]; then
                      userid=`(ypcat passwd) 2>/dev/null |
                              egrep "^${username}:" | \
                              sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'`
                      if [ ".$userid" = . ]; then
                          userid='?'
                      fi
                  fi
              fi
          fi
      fi
      
      #   determine (primary) group id
      groupid=''
      if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[gG]'`" != . ]; then
          groupid=`egrep "^${username}:" /etc/passwd 2>/dev/null | \
                   sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
          if [ ".$groupid" = . ]; then
              groupid=`(ypcat passwd) 2>/dev/null | egrep "^${username}:" | \
                       sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
              if [ ".$groupid" = . ]; then
                  groupid='?'
              fi
          fi
      fi
      
      #   determine (primary) group name
      groupname=''
      if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%g'`" != . ]; then
          groupname=`egrep "^[^:]*:[^:]*:${groupid}:" /etc/group 2>/dev/null | \
                     sed -e 's/:.*$//'`
          if [ ".$groupname" = . ]; then
              groupname=`(ypcat group) 2>/dev/null | \
                         egrep "^[^:]*:[^:]*:${groupid}:" | \
                         sed -e 's/:.*$//'`
              if [ ".$groupname" = . ]; then
                  groupname='?'
              fi
          fi
      fi
      
      #   determine host and domain name
      hostname=''
      domainname=''
      if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%h'`" != . ]; then
          hostname="`(uname -n) 2>/dev/null |\
                     awk '{ printf("%s", $1); }'`"
          if [ ".$hostname" = . ]; then
              hostname="`(hostname) 2>/dev/null |\
                         awk '{ printf("%s", $1); }'`"
              if [ ".$hostname" = . ]; then
                  hostname='unknown'
              fi
          fi
          case $hostname in
              *.* )
                  domainname=".`echo $hostname | cut -d. -f2-`"
                  hostname="`echo $hostname | cut -d. -f1`"
                  ;;
          esac
      fi
      if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%d'`" != . ]; then
          if [ ".$domainname" = . ]; then
              if [ -f /etc/resolv.conf ]; then
                  domainname="`egrep '^[ 	]*domain' /etc/resolv.conf | sed -e 'q' |\
                               sed -e 's/.*domain//' \
                                   -e 's/^[ 	]*//' -e 's/^ *//' -e 's/^	*//' \
                                   -e 's/^\.//' -e 's/^/./' |\
                               awk '{ printf("%s", $1); }'`"
                  if [ ".$domainname" = . ]; then
                      domainname="`egrep '^[ 	]*search' /etc/resolv.conf | sed -e 'q' |\
                                   sed -e 's/.*search//' \
                                       -e 's/^[ 	]*//' -e 's/^ *//' -e 's/^	*//' \
                                       -e 's/ .*//' -e 's/	.*//' \
                                       -e 's/^\.//' -e 's/^/./' |\
                                   awk '{ printf("%s", $1); }'`"
                  fi
              fi
          fi
      fi
      
      #   determine current time
      time_day=''
      time_month=''
      time_year=''
      time_monthname=''
      if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[DMYm]'`" != . ]; then
          time_day=`date '+%d'`
          time_month=`date '+%m'`
          time_year=`date '+%Y' 2>/dev/null`
          if [ ".$time_year" = . ]; then
              time_year=`date '+%y'`
              case $time_year in
                  [5-9][0-9]) time_year="19$time_year" ;;
                  [0-4][0-9]) time_year="20$time_year" ;;
              esac
          fi
          case $time_month in
              1|01) time_monthname='Jan' ;;
              2|02) time_monthname='Feb' ;;
              3|03) time_monthname='Mar' ;;
              4|04) time_monthname='Apr' ;;
              5|05) time_monthname='May' ;;
              6|06) time_monthname='Jun' ;;
              7|07) time_monthname='Jul' ;;
              8|08) time_monthname='Aug' ;;
              9|09) time_monthname='Sep' ;;
                10) time_monthname='Oct' ;;
                11) time_monthname='Nov' ;;
                12) time_monthname='Dec' ;;
          esac
      fi
      
      #   expand special ``%x'' constructs
      if [ ".$opt_e" = .yes ]; then
          text=`echo $seo "$text" |\
                sed -e "s/%B/${term_bold}/g" \
                    -e "s/%b/${term_norm}/g" \
                    -e "s/%u/${username}/g" \
                    -e "s/%U/${userid}/g" \
                    -e "s/%g/${groupname}/g" \
                    -e "s/%G/${groupid}/g" \
                    -e "s/%h/${hostname}/g" \
                    -e "s/%d/${domainname}/g" \
                    -e "s/%D/${time_day}/g" \
                    -e "s/%M/${time_month}/g" \
                    -e "s/%Y/${time_year}/g" \
                    -e "s/%m/${time_monthname}/g" 2>/dev/null`
      fi
      
      #   create output
      if [ .$opt_n = .no ]; then
          echo $seo "$text"
      else
          #   the harder part: echo -n is best, because
          #   awk may complain about some \xx sequences.
          if [ ".$minusn" != . ]; then
              echo $seo $minusn "$text"
          else
              echo dummy | awk '{ printf("%s", TEXT); }' TEXT="$text"
          fi
      fi
      ;;
  
  mdate )
      ##
      ##  mdate -- Pretty-print modification time of a file or dir
      ##  Copyright (c) 1995-1997 Free Software Foundation, Inc.
      ##  Originally idea and basis code by Ulrich Drepper
      ##  Enhanced by Ralf S. Engelschall for shtool
      ##
      
      fod="$1"
      case "$opt_o" in
          [dmy][dmy][dmy] )
              ;;
          * ) echo "$msgprefix:Error: invalid argument to option \`-o': $opt_o" 1>&2
              exit 1
              ;;
      esac
      if [ ! -r "$fod" ]; then
          echo "$msgprefix:Error: file or directory not found: $fod" 1>&2
          exit 1
      fi
      
      #   prevent "date" giving response in another language
      LANG=C;    export LANG
      LC_ALL=C;  export LC_ALL
      LC_TIME=C; export LC_TIME
      
      #   get the extended ls output of the file or directory.
      if ls -L /dev/null >/dev/null 2>&1; then
          set - x`ls -L -l -d $fod`
      else
          set - x`ls -l -d $fod`
      fi
      
      #   The month is at least the fourth argument
      #   (3 shifts here, the next inside the loop).
      shift; shift; shift
      
      #   Find the month. Next argument is day, followed by the year or time.
      month=""
      while [ ".$month" = . ]; do
          shift
          case $1 in
              Jan) month=January;   nummonth=1  ;;
              Feb) month=February;  nummonth=2  ;;
              Mar) month=March;     nummonth=3  ;;
              Apr) month=April;     nummonth=4  ;;
              May) month=May;       nummonth=5  ;;
              Jun) month=June;      nummonth=6  ;;
              Jul) month=July;      nummonth=7  ;;
              Aug) month=August;    nummonth=8  ;;
              Sep) month=September; nummonth=9  ;;
              Oct) month=October;   nummonth=10 ;;
              Nov) month=November;  nummonth=11 ;;
              Dec) month=December;  nummonth=12 ;;
          esac
      done
      day="$2"
      year="$3"
      
      #   We finally have to deal with the problem that the "ls" output
      #   gives either the time of the day or the year.
      case $year in
          *:*)
              this_year=`date '+%Y' 2>/dev/null`
              if [ ".$this_year" = . ]; then
                  this_year=`date '+%y'`
                  case $this_year in
                      [5-9][0-9]) this_year="19$this_year" ;;
                      [0-4][0-9]) this_year="20$this_year" ;;
                  esac
              fi
              #   for the following months of the last year the time notation
              #   is usually also used for files modified in the last year.
              this_month=`date '+%m'`
              if (expr $nummonth \> $this_month) >/dev/null; then
                  this_year=`expr $this_year - 1`
              fi
              year="$this_year"
              ;;
      esac
      
      #   Optionally fill day and month with leeding zeros
      if [ ".$opt_z" = .yes ]; then
          case $day in
              [0-9][0-9] ) ;;
                   [0-9] ) day="0$day" ;;
          esac
          case $nummonth in
              [0-9][0-9] ) ;;
                   [0-9] ) nummonth="0$nummonth" ;;
          esac
      fi
      
      #   Optionally use digits for month
      if [ ".$opt_d" = .yes ]; then
          month="$nummonth"
      fi
      
      #   Optionally shorten the month name to three characters
      if [ ".$opt_s" = .yes ]; then
          month=`echo $month | cut -c1-3`
      fi
      
      #   Output the resulting date string
      echo dummy | awk '{
          for (i = 0; i < 3; i++) {
              now = substr(order, 1, 1);
              order = substr(order, 2);
              if (now == "d")
                  out = day;
              else if (now == "m")
                  out = month;
              else if (now == "y")
                  out = year;
              if (i < 2)
                  printf("%s%s", out, field);
              else
                  printf("%s", out);
          }
          if (newline != "yes")
              printf("\n");
      }' "day=$day" "month=$month" "year=$year" \
         "field=$opt_f" "order=$opt_o" "newline=$opt_n"
      ;;
  
  table )
      ##
      ##  table -- Pretty-print a field-separated list as a table
      ##  Copyright (c) 1998-2002 Ralf S. Engelschall <rse@engelschall.com>
      ##  Originally written for Apache
      ##
      
      if [ $opt_c -gt 4 ]; then
          echo "$msgprefix:Error: Invalid number of colums (1..4 allowed only)" 1>&2
          exit 1
      fi
      case "x$opt_F" in
          x? ) ;;
          *  ) echo "$msgprefix:Error: Invalid separator (one char allowed only)" 1>&2; exit 1 ;;
      esac
      
      #   split the list into a table
      list=`
          IFS="$opt_F"
          for entry in $*; do
              if [ ".$entry" != . ]; then
                  echo "$entry"
              fi
          done |\
          awk "
              BEGIN { list = \"\"; n = 0; }
              {
                  list = list \\$1;
                  n = n + 1;
                  if (n < $opt_c) {
                      list = list \":\";
                  }
                  if (n == $opt_c) {
                      list = list \"\\n\";
                      n = 0;
                  }
              }
              END { print list; }
           "
      `
      
      #   format table cells and make sure table
      #   doesn't exceed maximum width
      OIFS="$IFS"
      IFS='
  '
      for entry in $list; do
          case $opt_c in
              1 ) eval "echo \"\${entry}\" | awk -F: '{ printf(\"%-${opt_w}s\\n\", \$1); }'" ;;
              2 ) eval "echo \"\${entry}\" | awk -F: '{ printf(\"%-${opt_w}s %-${opt_w}s\\n\", \$1, \$2); }'" ;;
              3 ) eval "echo \"\${entry}\" | awk -F: '{ printf(\"%-${opt_w}s %-${opt_w}s %-${opt_w}s\\n\", \$1, \$2, \$3); }'" ;;
              4 ) eval "echo \"\${entry}\" | awk -F: '{ printf(\"%-${opt_w}s %-${opt_w}s %-${opt_w}s %-${opt_w}s\\n\", \$1, \$2, \$3, \$4); }'" ;;
          esac
      done |\
      awk "{
          if (length(\$0) > $opt_s) {
              printf(\"%s\\n\", substr(\$0, 0, $opt_s-1));
          } else {
              print \$0;
          }
      }"
      IFS="$OIFS"
      ;;
  
  prop )
      ##
      ##  prop -- Display progress with a running propeller
      ##  Copyright (c) 1998-2002 Ralf S. Engelschall <rse@engelschall.com>
      ##  Originally written for mod_ssl
      ##
      
      perl=''
      for dir in `echo $PATH | sed -e 's/:/ /g'` .; do
          if [ -f "$dir/perl" ]; then
              perl="$dir/perl"
              break
          fi
      done
      if [ ".$perl" != . ]; then
          #   Perl is preferred because writing to STDERR in
          #   Perl really writes immediately as one would expect
          $perl -e '
              @p = ("|","/","-","\\");
              $i = 0;
              while (<STDIN>) {
                  printf(STDERR "\r%s...%s\b", $ARGV[0], $p[$i++]);
                  $i = 0 if ($i > 3);
              }
              printf(STDERR "\r%s    \n", $ARGV[0]);
          ' "$opt_p"
      else
          #   But if Perl doesn't exists we use Awk even
          #   some Awk's buffer even the /dev/stderr writing :-(
          awk '
              BEGIN {
                  split("|#/#-#\\", p, "#");
                  i = 1;
              }
              {
                  printf("\r%s%c\b", prefix, p[i++]) > "/dev/stderr";
                  if (i > 4) { i = 1; }
              }
              END {
                  printf("\r%s    \n", prefix) > "/dev/stderr";
              }
          ' "prefix=$opt_p"
      fi
      ;;
  
  move )
      ##
      ##  move -- Move files with simultaneous substitution
      ##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
      ##  Originally written for shtool
      ##
      
      src="$1"
      dst="$2"
      
      #   consistency checks
      if [ ".$src" = . -o ".$dst" = . ]; then
          echo "$msgprefix:Error: Invalid arguments" 1>&2
          exit 1
      fi
      if [ ".$src" = ".$dst" ]; then
          echo "$msgprefix:Error: Source and destination files are the same" 1>&2
          exit 1
      fi
      expsrc="$src"
      if [ ".$opt_e" = .yes ]; then
          expsrc="`echo $expsrc`"
      fi
      if [ ".$opt_e" = .yes ]; then
          if [ ".`echo "$src" | sed -e 's;^.*\\*.*$;;'`" = ".$src" ]; then
              echo "$msgprefix:Error: Source doesn't contain wildcard ('*'): $dst" 1>&2
              exit 1
          fi
          if [ ".`echo "$dst" | sed -e 's;^.*%[1-9].*$;;'`" = ".$dst" ]; then
              echo "$msgprefix:Error: Destination doesn't contain substitution ('%N'): $dst" 1>&2
              exit 1
          fi
          if [ ".$expsrc" = ".$src" ]; then
              echo "$msgprefix:Error: Sources not found or no asterisk : $src" 1>&2
              exit 1
          fi
      else
          if [ ! -r "$src" ]; then
              echo "$msgprefix:Error: Source not found: $src" 1>&2
              exit 1
          fi
      fi
      
      #   determine substitution patterns
      if [ ".$opt_e" = .yes ]; then
          srcpat=`echo "$src" | sed -e 's/\\./\\\\./g' -e 's/;/\\;/g' -e 's;\\*;\\\\(.*\\\\);g'`
          dstpat=`echo "$dst" | sed -e 's;%\([1-9]\);\\\\\1;g'`
      fi
      
      #   iterate over source(s)
      for onesrc in $expsrc; do
          if [ .$opt_e = .yes ]; then
              onedst=`echo $onesrc | sed -e "s;$srcpat;$dstpat;"`
          else
              onedst="$dst"
          fi
          errorstatus=0
          if [ ".$opt_v" = .yes ]; then
              echo "$onesrc -> $onedst"
          fi
          if [ ".$opt_p" = .yes ]; then
              if [ -r $onedst ]; then
                  if cmp -s $onesrc $onedst; then
                      if [ ".$opt_t" = .yes ]; then
                          echo "rm -f $onesrc" 1>&2
                      fi
                      rm -f $onesrc || errorstatus=$?
                  else
                      if [ ".$opt_t" = .yes ]; then
                          echo "mv -f $onesrc $onedst" 1>&2
                      fi
                      mv -f $onesrc $onedst || errorstatus=$?
                  fi
              else
                  if [ ".$opt_t" = .yes ]; then
                      echo "mv -f $onesrc $onedst" 1>&2
                  fi
                  mv -f $onesrc $onedst || errorstatus=$?
              fi
          else
              if [ ".$opt_t" = .yes ]; then
                  echo "mv -f $onesrc $onedst" 1>&2
              fi
              mv -f $onesrc $onedst || errorstatus=$?
          fi
          if [ $errorstatus -ne 0 ]; then
              break;
          fi
      done
      exit $errorstatus
      ;;
  
  install )
      ##
      ##  install -- Install a program, script or datafile
      ##  Copyright (c) 1997-2002 Ralf S. Engelschall <rse@engelschall.com>
      ##  Originally written for shtool
      ##
      
      #   determine source(s) and destination
      argc=$#
      srcs=""
      while [ $# -gt 1 ]; do
          srcs="$srcs $1"
          shift
      done
      dstpath="$1"
      
      #   type check for destination
      dstisdir=0
      if [ -d $dstpath ]; then
          dstpath=`echo "$dstpath" | sed -e 's:/$::'`
          dstisdir=1
      fi
      
      #   consistency check for destination
      if [ $argc -gt 2 -a $dstisdir = 0 ]; then
          echo "$msgprefix:Error: multiple sources require destination to be directory" 1>&2
          exit 1
      fi
      
      #   iterate over all source(s)
      for src in $srcs; do
          dst=$dstpath
      
          #   if destination is a directory, append the input filename
          if [ $dstisdir = 1 ]; then
              dstfile=`echo "$src" | sed -e 's;.*/\([^/]*\)$;\1;'`
              dst="$dst/$dstfile"
          fi
      
          #   check for correct arguments
          if [ ".$src" = ".$dst" ]; then
              echo "$msgprefix:Warning: source and destination are the same - skipped" 1>&2
              continue
          fi
          if [ -d "$src" ]; then
              echo "$msgprefix:Warning: source \`$src' is a directory - skipped" 1>&2
              continue
          fi
      
          #   make a temp file name in the destination directory
          dsttmp=`echo $dst |\
                  sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;' -e 's;^$;.;' \
                      -e "s;\$;/#INST@$$#;"`
      
          #   verbosity
          if [ ".$opt_v" = .yes ]; then
              echo "$src -> $dst" 1>&2
          fi
      
          #   copy or move the file name to the temp name
          #   (because we might be not allowed to change the source)
          if [ ".$opt_C" = .yes ]; then
              opt_c=yes
          fi
          if [ ".$opt_c" = .yes ]; then
              if [ ".$opt_t" = .yes ]; then
                  echo "cp $src $dsttmp" 1>&2
              fi
              cp $src $dsttmp || exit $?
          else
              if [ ".$opt_t" = .yes ]; then
                  echo "mv $src $dsttmp" 1>&2
              fi
              mv $src $dsttmp || exit $?
          fi
      
          #   adjust the target file
          if [ ".$opt_e" != . ]; then
              sed='sed'
              OIFS="$IFS"; IFS="$ASC_NL"; set -- $opt_e; IFS="$OIFS"
              for e
              do
                  sed="$sed -e '$e'"
              done
              cp $dsttmp $dsttmp.old
              eval "$sed <$dsttmp.old >$dsttmp" || exit $?
              rm -f $dsttmp.old
          fi
          if [ ".$opt_s" = .yes ]; then
              if [ ".$opt_t" = .yes ]; then
                  echo "strip $dsttmp" 1>&2
              fi
              strip $dsttmp || exit $?
          fi
          if [ ".$opt_o" != . ]; then
              if [ ".$opt_t" = .yes ]; then
                  echo "chown $opt_o $dsttmp" 1>&2
              fi
              chown $opt_o $dsttmp || exit $?
          fi
          if [ ".$opt_g" != . ]; then
              if [ ".$opt_t" = .yes ]; then
                  echo "chgrp $opt_g $dsttmp" 1>&2
              fi
              chgrp $opt_g $dsttmp || exit $?
          fi
          if [ ".$opt_m" != ".-" ]; then
              if [ ".$opt_t" = .yes ]; then
                  echo "chmod $opt_m $dsttmp" 1>&2
              fi
              chmod $opt_m $dsttmp || exit $?
          fi
      
          #   determine whether to do a quick install
          #   (has to be done _after_ the strip was already done)
          quick=no
          if [ ".$opt_C" = .yes ]; then
              if [ -r $dst ]; then
                  if cmp -s $src $dst; then
                      quick=yes
                  fi
              fi
          fi
      
          #   finally, install the file to the real destination
          if [ $quick = yes ]; then
              if [ ".$opt_t" = .yes ]; then
                  echo "rm -f $dsttmp" 1>&2
              fi
              rm -f $dsttmp
          else
              if [ ".$opt_t" = .yes ]; then
                  echo "rm -f $dst && mv $dsttmp $dst" 1>&2
              fi
              rm -f $dst && mv $dsttmp $dst
          fi
      done
      ;;
  
  mkdir )
      ##
      ##  mkdir -- Make one or more directories
      ##  Copyright (c) 1996-2002 Ralf S. Engelschall <rse@engelschall.com>
      ##  Originally written for public domain by Noah Friedman <friedman@prep.ai.mit.edu>
      ##  Cleaned up and enhanced for shtool
      ##
      
      errstatus=0
      for p in ${1+"$@"}; do
          #   if the directory already exists...
          if [ -d "$p" ]; then
              if [ ".$opt_f" = .no -a ".$opt_p" = .no ]; then
                  echo "$msgprefix:Error: directory already exists: $p" 1>&2
                  errstatus=1
                  break
              else
                  continue
              fi
          fi
          #   if the directory has to be created...
          if [ ".$opt_p" = .no ]; then
              if [ ".$opt_t" = .yes ]; then
                  echo "mkdir $p" 1>&2
              fi
              mkdir $p || errstatus=$?
              if [ ".$opt_m" != . ]; then
                  if [ ".$opt_t" = .yes ]; then
                      echo "chmod $opt_m $p" 1>&2
                  fi
                  chmod $opt_m $p || errstatus=$?
              fi
          else
              #   the smart situation
              set fnord `echo ":$p" |\
                         sed -e 's/^:\//%/' \
                             -e 's/^://' \
                             -e 's/\// /g' \
                             -e 's/^%/\//'`
              shift
              pathcomp=''
              for d in ${1+"$@"}; do
                  pathcomp="$pathcomp$d"
                  case "$pathcomp" in
                      -* ) pathcomp="./$pathcomp" ;;
                  esac
                  if [ ! -d "$pathcomp" ]; then
                      if [ ".$opt_t" = .yes ]; then
                          echo "mkdir $pathcomp" 1>&2
                      fi
                      mkdir $pathcomp || errstatus=$?
                      if [ ".$opt_m" != . ]; then
                          if [ ".$opt_t" = .yes ]; then
                              echo "chmod $opt_m $pathcomp" 1>&2
                          fi
                          chmod $opt_m $pathcomp || errstatus=$?
                      fi
                  fi
                  pathcomp="$pathcomp/"
              done
          fi
      done
      exit $errstatus
      ;;
  
  mkln )
      ##
      ##  mkln -- Make link with calculation of relative paths
      ##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
      ##  Originally written for shtool
      ##
      
      args=$?
      srcs=""
      while [ $# -gt 1 ]; do
          srcs="$srcs $1"
          shift
      done
      dst="$1"
      if [ ! -d $dst ]; then
          if [ $args -gt 2 ]; then
              echo "$msgprefix:Error: multiple sources not allowed when target isn't a directory" 1>&2
              exit 1
          fi
      fi
      
      #   determine link options
      lnopt=""
      if [ ".$opt_f" = .yes ]; then
          lnopt="$lnopt -f"
      fi
      if [ ".$opt_s" = .yes ]; then
          lnopt="$lnopt -s"
      fi
      
      #   iterate over sources
      for src in $srcs; do
          #   determine if one of the paths is an absolute path,
          #   because then we _have_ to use an absolute symlink
          oneisabs=0
          srcisabs=0
          dstisabs=0
          case $src in
              /* ) oneisabs=1; srcisabs=1 ;;
          esac
          case $dst in
              /* ) oneisabs=1; dstisabs=1 ;;
          esac
      
          #   split source and destination into dir and base name
          if [ -d $src ]; then
              srcdir=`echo $src | sed -e 's;/*$;;'`
              srcbase=""
          else
              srcdir=`echo  $src | sed -e 's;^[^/]*$;;' -e 's;^\(.*/\)[^/]*$;\1;' -e 's;\(.\)/$;\1;'`
              srcbase=`echo $src | sed -e 's;.*/\([^/]*\)$;\1;'`
          fi
          if [ -d $dst ]; then
              dstdir=`echo $dst | sed -e 's;/*$;;'`
              dstbase=""
          else
              dstdir=`echo  $dst | sed -e 's;^[^/]*$;;' -e 's;^\(.*/\)[^/]*$;\1;' -e 's;\(.\)/$;\1;'`
              dstbase=`echo $dst | sed -e 's;.*/\([^/]*\)$;\1;'`
          fi
      
          #   consistency check
          if [ ".$dstdir" != . ]; then
              if [ ! -d $dstdir ]; then
                  echo "$msgprefix:Error: destination directory not found: $dstdir" 1>&2
                  exit 1
              fi
          fi
      
          #   make sure the source is reachable from the destination
          if [ $dstisabs = 1 ]; then
              if [ $srcisabs = 0 ]; then
                  if [ -d $srcdir ]; then
                      srcdir="`cd $srcdir; pwd | sed -e 's;/*$;;'`"
                      srcisabs=1
                      oneisabs=1
                  fi
              fi
          fi
      
          #   split away a common prefix
          prefix=""
          if [ ".$srcdir" = ".$dstdir" -a ".$srcdir" != . ]; then
              prefix="$srcdir/"
              srcdir=""
              dstdir=""
          else
              while [ ".$srcdir" != . -a ".$dstdir" != . ]; do
                  presrc=`echo $srcdir | sed -e 's;^\([^/]*\)/.*;\1;'`
                  predst=`echo $dstdir | sed -e 's;^\([^/]*\)/.*;\1;'`
                  if [ ".$presrc" != ".$predst" ]; then
                      break
                  fi
                  prefix="$prefix$presrc/"
                  srcdir=`echo $srcdir | sed -e 's;^[^/]*/*;;'`
                  dstdir=`echo $dstdir | sed -e 's;^[^/]*/*;;'`
              done
          fi
      
          #   destination prefix is just the common prefix
          dstpre="$prefix"
      
          #   determine source prefix which is the reverse directory
          #   step-up corresponding to the destination directory
          srcpre=""
          if [ $oneisabs = 0 ] || [ ".$prefix" != . -a ".$prefix" != ./ ]; then
              pl="$dstdir/"
              OIFS="$IFS"; IFS='/'
              for pe in $pl; do
                  [ ".$pe" = . ] && continue
                  srcpre="../$srcpre"
              done
              IFS="$OIFS"
          else
              if [ $srcisabs = 1 ]; then
                  srcpre="$prefix"
              fi
          fi
      
          #   determine destination symlink name
          if [ ".$dstbase" = . ]; then
              if [ ".$srcbase" != . ]; then
                  dstbase="$srcbase"
              else
                  dstbase=`echo "$prefix$srcdir" | sed -e 's;/*$;;' -e 's;.*/\([^/]*\)$;\1;'`
              fi
          fi
      
          #   now finalize source and destination directory paths
          srcdir=`echo $srcdir | sed -e 's;\([^/]\)$;\1/;'`
          dstdir=`echo $dstdir | sed -e 's;\([^/]\)$;\1/;'`
      
          #   run the final link command
          if [ ".$opt_t" = .yes ]; then
              echo "ln$lnopt $srcpre$srcdir$srcbase $dstpre$dstdir$dstbase"
          fi
          eval ln$lnopt $srcpre$srcdir$srcbase $dstpre$dstdir$dstbase
      done
      ;;
  
  mkshadow )
      ##
      ##  mkshadow -- Make a shadow tree through symbolic links
      ##  Copyright (c) 1998-2002 Ralf S. Engelschall <rse@engelschall.com>
      ##  Originally written for Apache
      ##
      
      #   source and destination directory
      src=`echo "$1" | sed -e 's:/$::' -e 's:^\./\(.\):\1:'`
      dst=`echo "$2" | sed -e 's:/$::' -e 's:^\./\(.\):\1:'`
      
      #   check whether source exists
      if [ ! -d $src ]; then
          echo "$msgprefix:Error: source directory not found: \`$src'" 1>&2
          exit 1
      fi
      
      #   determine if one of the paths is an absolute path,
      #   because then we have to use an absolute symlink
      oneisabs=0
      case $src in
          /* ) oneisabs=1 ;;
      esac
      case $dst in
          /* ) oneisabs=1 ;;
      esac
      
      #   determine reverse directory for destination directory
      dstrevdir=''
      if [ $oneisabs = 0 ]; then
          #   derive reverse path from forward path
          pwd=`pwd`
          OIFS="$IFS"; IFS='/'
          for pe in $dst; do
              if [ "x$pe" = "x.." ]; then
                  OIFS2="$IFS"; IFS="$DIFS"
                  eval `echo "$pwd" |\
                        sed -e 's:\([^/]*\)$:; dir="\1":' \
                            -e 's:^\(.*\)/[^/]*;:pwd="\1";:'\
                            -e 's:^;:pwd="";:'`
                  dstrevdir="$dir/$dstrevdir"
                  IFS="$OIFS2"
              else
                  dstrevdir="../$dstrevdir"
              fi
          done
          IFS="$OIFS"
      else
          src="`cd $src; pwd`";
      fi
      
      #   create directory tree at destination
      if [ ! -d $dst ]; then
          if [ ".$opt_t" = .yes ]; then
              echo "mkdir $dst" 1>&2
          fi
          mkdir $dst
      fi
      if [ ".$opt_a" = .yes ]; then
          DIRS=`cd $src; find . -type d -print |\
                sed -e '/^\.$/d' -e 's:^\./::'`
      else
          DIRS=`cd $src; find . -type d -print |\
                sed -e '/\/CVS/d' -e '/^\.$/d' -e 's:^\./::'`
      fi
      for dir in $DIRS; do
          if [ ".$opt_t" = .yes ]; then
              echo "mkdir $dst/$dir" 1>&2
          fi
          mkdir $dst/$dir
      done
      
      #   fill directory tree with symlinks to files
      if [ ".$opt_a" = .yes ]; then
          FILES="`cd $src; find . -depth -print |\
                  sed -e 's/^\.\///'`"
      else
          FILES="`cd $src; find . -depth -print |\
                  sed -e '/\.o$/d' -e '/\.a$/d' -e '/\.so$/d' \
                      -e '/\.cvsignore$/d' -e '/\/CVS/d' \
                      -e '/\/\.#/d' -e '/\.orig$/d' \
                      -e 's/^\.\///'`"
      fi
      for file in $FILES; do
           #  don't use `-type f' above for find because of symlinks
           if [ -d "$src/$file" ]; then
               continue
           fi
           basename=`echo $file | sed -e 's:^.*/::'`
           dir=`echo $file | sed -e 's:[^/]*$::' -e 's:/$::' -e 's:$:/:' -e 's:^/$::'`
           from=`echo "$src/$file" | sed -e 's/^\.\///'`
           to="$dst/$dir$basename"
           if [ $oneisabs = 0 ]; then
               if [ ".$dir" != . ]; then
                   subdir=`echo $dir | sed -e 's:/$::'`
                   #   derive reverse path from forward path
                   revdir=''
                   OIFS="$IFS"; IFS='/'
                   for pe in $subdir; do
                       revdir="../$revdir"
                   done
                   IFS="$OIFS"
                   #   finalize from
                   from="$revdir$from"
               fi
               from="$dstrevdir$from"
           fi
           if [ ".$opt_v" = .yes ]; then
               echo "    $to" 1>&2
           fi
           if [ ".$opt_t" = .yes ]; then
               echo "ln -s $from $to" 1>&2
           fi
           ln -s $from $to
      done
      ;;
  
  fixperm )
      ##
      ##  fixperm -- Fix file permissions inside a source tree
      ##  Copyright (c) 1996-2002 Ralf S. Engelschall <rse@engelschall.com>
      ##  Originally written for ePerl
      ##
      
      paths="$*"
      
      #   check whether the test command supports the -x option
      if [ -x /bin/sh ] 2>/dev/null; then
          minusx="-x"
      else
          minusx="-r"
      fi
      
      #   iterate over paths
      for p in $paths; do
          for file in `find $p -depth -print`; do
              if [ -f $file ]; then
                  if [ $minusx $file ]; then
                      if [ ".$opt_v" = .yes ]; then
                          echo "-rwxrwxr-x $file" 2>&1
                      fi
                      if [ ".$opt_t" = .yes ]; then
                          echo "chmod 775 $file" 2>&1
                      fi
                      chmod 775 $file
                  else
                      if [ ".$opt_v" = .yes ]; then
                          echo "-rw-rw-r-- $file" 2>&1
                      fi
                      if [ ".$opt_t" = .yes ]; then
                          echo "chmod 664 $file" 2>&1
                      fi
                      chmod 664 $file
                  fi
                  continue
              fi
              if [ -d $file ]; then
                  if [ ".$opt_v" = .yes ]; then
                      echo "drwxrwxr-x $file" 2>&1
                  fi
                  if [ ".$opt_t" = .yes ]; then
                      echo "chmod 775 $file" 2>&1
                  fi
                  chmod 775 $file
                  continue
              fi
              if [ ".$opt_v" = .yes ]; then
                  echo "?????????? $file" 2>&1
              fi
          done
      done
      ;;
  
  rotate )
      ##
      ##  rotate -- Logfile rotation
      ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
      ##  Originally written for use in OpenPKG
      ##
      
      #   make sure we have at least one file to rotate
      if [ ".$opt_n" = .0 ]; then
          echo "$msgprefix:Error: invalid argument \`$opt_n' to option -n." 1>&2
          exit 1
      fi
      
      #   canonicalize -s option argument
      if [ ".$opt_s" != . ]; then
          if [ ".`expr $opt_s : '[0-9]*$'`" != .0 ]; then
              :
          elif [ ".`expr $opt_s : '[0-9]*[Kk]$'`" != .0 ]; then
              opt_s=`expr $opt_s : '\([0-9]*\)[Kk]$'`
              opt_s=`expr $opt_s \* 1024`
          elif [ ".`expr $opt_s : '[0-9]*[Mm]$'`" != .0 ]; then
              opt_s=`expr $opt_s : '\([0-9]*\)[Mm]$'`
              opt_s=`expr $opt_s \* 1048576` # 1024*1024
          elif [ ".`expr $opt_s : '[0-9]*[Gg]$'`" != .0 ]; then
              opt_s=`expr $opt_s : '\([0-9]*\)[Gg]$'`
              opt_s=`expr $opt_s \* 1073741824` # 1024*1024*1024
          else
              echo "$msgprefix:Error: invalid argument \`$opt_s' to option -s." 1>&2
              exit 1
          fi
      fi
      
      #   option -d/-z consistency
      if [ ".$opt_d" = .yes -a ".$opt_z" = . ]; then
          echo "$msgprefix:Error: option -d requires option -z." 1>&2
          exit 1
      fi
      
      #   make sure target directory exists
      if [ ".$opt_a" != . ]; then
          if [ ! -d $opt_a ]; then
              if [ ".$opt_f" = .no ]; then
                  echo "$msgprefix:Error: archive directory \`$opt_a' does not exist." 1>&2
                  exit 1
              fi
              mkdir $opt_a || exit $?
              chmod 755 $opt_a
          fi
          if [ ! -w $opt_a ]; then
              echo "$msgprefix:Error: archive directory \`$opt_a' not writable." 1>&2
              exit 1
          fi
      fi
      
      #   determine compression approach
      if [ ".$opt_z" != . ]; then
          comp_lvl="$opt_z"
          comp_prg=""
          case $comp_lvl in
              *:* ) eval `echo $comp_lvl |\
                          sed -e 's%^\(.*\):\(.*\)$%comp_prg="\1"; comp_lvl="\2"%'` ;;
          esac
      
          #   compression level consistency
          case $comp_lvl in
              [0-9] )
                  ;;
              * ) echo "$msgprefix:Error: invalid compression level \`$comp_lvl'" 1>&2
                  exit 1
                  ;;
          esac
      
          #   determine a suitable compression tool
          if [ ".$comp_prg" = . ]; then
              #   check whether the test command supports the -x option
              if [ -x /bin/sh ] 2>/dev/null; then
                  minusx="-x"
              else
                  minusx="-r"
              fi
              #   search for tools in $PATH
              paths="`echo $PATH |\
                      sed -e 's%/*:%:%g' -e 's%/*$%%' \
                          -e 's/^:/.:/' -e 's/::/:.:/g' -e 's/:$/:./' \
                          -e 's/:/ /g'`"
              for prg in bzip2 gzip compress; do
                  for path in $paths; do
                      if [ $minusx "$path/$prg" -a ! -d "$path/$prg" ]; then
                          comp_prg="$prg"
                          break
                      fi
                  done
                  if [ ".$comp_prg" != . ]; then
                      break
                  fi
              done
              if [ ".$comp_prg" = . ]; then
                  echo "$msgprefix:Error: no suitable compression tool found in \$PATH" 1>&2
                  exit 1
              fi
          fi
      
          #   determine standard compression extension
          #   and make sure it is a known tool
          case $comp_prg in
              */bzip2    | bzip2    ) comp_ext="bz2" comp_lvl="-$comp_lvl" ;;
              */gzip     | gzip     ) comp_ext="gz"  comp_lvl="-$comp_lvl" ;;
              */compress | compress ) comp_ext="Z";  comp_lvl=""           ;;
              * ) echo "$msgprefix:Error: tool \`$comp_prg' is not a known compression tool" 1>&2
                  exit 1
                  ;;
          esac
          comp_suf=".$comp_ext"
      fi
      
      #   iterate over all given logfile arguments
      for file in $*; do
          #   make sure the logfile exists
          if [ ! -f $file ]; then
              if [ ".$opt_f" = .yes ]; then
                  continue
              fi
              echo "$msgprefix:Error: logfile \`$file' not found" 1>&2
              exit 1
          fi
      
          #   determine log directory (where original logfile is placed)
          ldir="."
          case $file in
              */* ) eval `echo $file | sed -e 's%^\(.*\)/\([^/]*\)$%ldir="\1"; file="\2";%'` ;;
          esac
      
          #   determine archive directory (where rotated logfiles are placed)
          adir="$ldir"
          if [ ".$opt_a" != . ]; then
              case "$opt_a" in
                  /* | ./* ) adir="$opt_a" ;;
                  * ) adir="$ldir/$opt_a"  ;;
              esac
          fi
      
          #   optionally take logfile size into account
          if [ ".$opt_s" != . ]; then
              #   determine size of logfile
              set -- `ls -l $ldir/$file | sed -e 's; -> .*$;;' -e 's;[ 	][ 	]*; ;g'`
              n=`expr $# - 4`
              eval "size=\`echo \${$n}\`"
      
              #   skip logfile if size is still too small
              if [ $size -lt $opt_s ]; then
                  if [ ".$opt_v" = .yes ]; then
                      echo "$ldir/$file: still too small in size -- skipping"
                  fi
                  continue
              fi
          fi
      
          #   verbosity
          if [ ".$opt_v" = .yes ]; then
              echo "rotating $ldir/$file"
          fi
      
          #   execute prolog
          if [ ".$opt_P" != . ]; then
              if [ ".$opt_t" = .yes ]; then
                  echo "$opt_P"
              fi
              eval $opt_P
              [ $? -ne 0 ] && exit $?
          fi
      
          #   kick away out-rotated logfile
          n=`expr $opt_n - 1`
          n=`echo dummy | awk "{ printf(\"%0${opt_p}d\", n); }" n=$n`
          if [ -f "${adir}/${file}.${n}${comp_suf}" ]; then
              #   optionally migrate away the out-rotated logfile
              if [ ".$opt_M" != . ]; then
                  if [ ".$opt_t" = .yes ]; then
                      echo "$opt_M ${adir}/${file}.${n}${comp_suf}"
                  fi
                  eval "$opt_M ${adir}/${file}.${n}${comp_suf}"
                  [ $? -ne 0 ] && exit $?
              fi
              #   finally get rid of the out-rotated logfile
              if [ ".$opt_t" = .yes ]; then
                  echo "rm -f ${adir}/${file}.${n}${comp_suf}"
              fi
              rm -f ${adir}/${file}.${n}${comp_suf} || exit $?
          fi
      
          #   rotate already archived logfiles
          while [ $n -gt 0 ]; do
              m=$n
              n=`expr $n - 1`
              n=`echo dummy | awk "{ printf(\"%0${opt_p}d\", n); }" n=$n`
              if [ $n -eq 0 -a ".$opt_d" = .yes ]; then
                  #   special case: first rotation file under delayed compression situation
                  if [ ! -f "${adir}/${file}.${n}" ]; then
                      continue
                  fi
      
                  #   compress file (delayed)
                  if [ ".$opt_b" = .yes ]; then
                      if [ ".$opt_t" = .yes ]; then
                          echo "mv ${adir}/${file}.${n} ${adir}/${file}.${m}"
                      fi
                      mv ${adir}/${file}.${n} ${adir}/${file}.${m} || exit $?
                      if [ ".$opt_t" = .yes ]; then
                          echo "(${comp_prg} ${comp_lvl} <${adir}/${file}.${m} >${adir}/${file}.${m}${comp_suf}; rm -f ${adir}/${file}.${m}) &"
                      fi
                      ( ${comp_prg} ${comp_lvl} \
                            <${adir}/${file}.${m} \
                            >${adir}/${file}.${m}${comp_suf} || exit $?
                        rm -f ${adir}/${file}.${m} || exit $?
                      ) </dev/null >/dev/null 2>&1 &
                  else
                      if [ ".$opt_t" = .yes ]; then
                          echo "${comp_prg} ${comp_lvl} <${adir}/${file}.${n} >${adir}/${file}.${m}${comp_suf}"
                      fi
                      ${comp_prg} ${comp_lvl} \
                          <${adir}/${file}.${n} \
                          >${adir}/${file}.${m}${comp_suf} || exit $?
                      if [ ".$opt_t" = .yes ]; then
                          echo "rm -f ${adir}/${file}.${n}"
                      fi
                      rm -f ${adir}/${file}.${n} || exit $?
                  fi
      
                  #   fix file attributes
                  if [ ".$opt_o" != . ]; then
                      if [ ".$opt_t" = .yes ]; then
                          echo "chown $opt_o ${adir}/${file}.${m}${comp_suf}"
                      fi
                      chown $opt_o ${adir}/${file}.${m}${comp_suf} || exit $?
                  fi
                  if [ ".$opt_g" != . ]; then
                      if [ ".$opt_t" = .yes ]; then
                          echo "chgrp $opt_g ${adir}/${file}.${m}${comp_suf}"
                      fi
                      chgrp $opt_g ${adir}/${file}.${m}${comp_suf} || exit $?
                  fi
                  if [ ".$opt_m" != . ]; then
                      if [ ".$opt_t" = .yes ]; then
                          echo "chmod $opt_m ${adir}/${file}.${m}${comp_suf}"
                      fi
                      chmod $opt_m ${adir}/${file}.${m}${comp_suf} || exit $?
                  fi
              else
                  #   standard case: second and following rotation file
                  if [ ! -f "${adir}/${file}.${n}${comp_suf}" ]; then
                      continue
                  fi
                  if [ ".$opt_t" = .yes ]; then
                      echo "mv ${adir}/${file}.${n}${comp_suf} ${adir}/${file}.${m}${comp_suf}"
                  fi
                  mv ${adir}/${file}.${n}${comp_suf} ${adir}/${file}.${m}${comp_suf} || exit $?
              fi
          done
      
          #   move away current logfile
          if [ ".$opt_c" = .yes ]; then
              #   approach: copy[+truncate]
              if [ ".$opt_t" = .yes ]; then
                  echo "cp -p ${ldir}/${file} ${adir}/${file}.${n}"
              fi
              cp -p ${ldir}/${file} ${adir}/${file}.${n} || exit $?
              if [ ".$opt_r" = .no ]; then
                  if [ ".$opt_t" = .yes ]; then
                      echo "cp /dev/null ${ldir}/${file}"
                  fi
                  cp /dev/null ${ldir}/${file} || exit $?
              fi
          else
              #   approach: move[+touch]
              if [ ".$opt_t" = .yes ]; then
                  echo "mv ${ldir}/${file} ${adir}/${file}.${n}"
              fi
              mv ${ldir}/${file} ${adir}/${file}.${n} || exit $?
              if [ ".$opt_r" = .no ]; then
                  if [ ".$opt_t" = .yes ]; then
                      echo "touch ${ldir}/${file}"
                  fi
                  touch ${ldir}/${file} || exit $?
                  #   fix file attributes
                  if [ ".$opt_o" != . ]; then
                      if [ ".$opt_t" = .yes ]; then
                          echo "chown $opt_o ${ldir}/${file}"
                      fi
                      chown $opt_o ${ldir}/${file} || exit $?
                  fi
                  if [ ".$opt_g" != . ]; then
                      if [ ".$opt_t" = .yes ]; then
                          echo "chgrp $opt_g ${ldir}/${file}"
                      fi
                      chgrp $opt_g ${ldir}/${file} || exit $?
                  fi
                  if [ ".$opt_m" != . ]; then
                      if [ ".$opt_t" = .yes ]; then
                          echo "chmod $opt_m ${ldir}/${file}"
                      fi
                      chmod $opt_m ${ldir}/${file} || exit $?
                  fi
              fi
          fi
      
          #   regular compression step
          if [ ".$opt_z" != . -a ".$opt_d" = .no ]; then
              #   compress file
              if [ ".$opt_b" = .yes ]; then
                  if [ ".$opt_t" = .yes ]; then
                      echo "(${comp_prg} ${comp_lvl} <${adir}/${file}.${n} >${adir}/${file}.${n}${comp_suf}; rm -f ${adir}/${file}.${n}) &"
                  fi
                  ( ${comp_prg} ${comp_lvl} \
                        <${adir}/${file}.${n} \
                        >${adir}/${file}.${n}${comp_suf} || exit $?
                    rm -f ${adir}/${file}.${n} || exit $?
                  ) </dev/null >/dev/null 2>&1 &
              else
                  if [ ".$opt_t" = .yes ]; then
                      echo "${comp_prg} ${comp_lvl} <${adir}/${file}.${n} >${adir}/${file}.${n}${comp_suf}"
                  fi
                  ${comp_prg} ${comp_lvl} \
                      <${adir}/${file}.${n} \
                      >${adir}/${file}.${n}${comp_suf} || exit $?
                  if [ ".$opt_t" = .yes ]; then
                      echo "rm -f ${opt_a}${file}.${n}"
                  fi
                  rm -f ${adir}/${file}.${n} || exit $?
              fi
      
              #   fix file attributes
              if [ ".$opt_o" != . ]; then
                  if [ ".$opt_t" = .yes ]; then
                      echo "chown $opt_o ${adir}/${file}.${n}${comp_suf}"
                  fi
                  chown $opt_o ${adir}/${file}.${n}${comp_suf} || exit $?
              fi
              if [ ".$opt_g" != . ]; then
                  if [ ".$opt_t" = .yes ]; then
                      echo "chgrp $opt_g ${adir}/${file}.${n}${comp_suf}"
                  fi
                  chgrp $opt_g ${adir}/${file}.${n}${comp_suf} || exit $?
              fi
              if [ ".$opt_m" != . ]; then
                  if [ ".$opt_t" = .yes ]; then
                      echo "chmod $opt_m ${adir}/${file}.${n}${comp_suf}"
                  fi
                  chmod $opt_m ${adir}/${file}.${n}${comp_suf} || exit $?
              fi
          fi
      
          #   execute epilog
          if [ ".$opt_E" != . ]; then
              if [ ".$opt_t" = .yes ]; then
                  echo "$opt_E"
              fi
              eval $opt_E
              [ $? -ne 0 ] && exit $?
          fi
      done
      ;;
  
  tarball )
      ##
      ##  tarball -- Roll distribution tarballs
      ##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
      ##  Originally written for shtool
      ##
      
      srcs="$*"
      
      #   check whether the test command supports the -x option
      if [ -x /bin/sh ] 2>/dev/null; then
          minusx="-x"
      else
          minusx="-r"
      fi
      
      #   find the tools
      paths="`echo $PATH |\
              sed -e 's%/*:%:%g' -e 's%/*$%%' \
                  -e 's/^:/.:/' -e 's/::/:.:/g' -e 's/:$/:./' \
                  -e 's/:/ /g'`"
      for spec in find:gfind,find tar:gtar,tar tardy:tardy,tarcust; do
          prg=`echo $spec | sed -e 's/:.*$//'`
          tools=`echo $spec | sed -e 's/^.*://'`
          eval "prg_${prg}=''"
          #   iterate over tools
          for tool in `echo $tools | sed -e 's/,/ /g'`; do
              #   iterate over paths
              for path in $paths; do
                  if [ $minusx "$path/$tool" -a ! -d "$path/$tool" ]; then
                      eval "prg_${prg}=\"$path/$tool\""
                      break
                  fi
              done
              eval "val=\$prg_${prg}"
              if [ ".$val" != . ]; then
                  break
              fi
          done
      done
      
      #   expand source paths
      exclude=''
      for pat in `echo $opt_e | sed 's/,/ /g'`; do
          exclude="$exclude | grep -v '$pat'"
      done
      if [ ".$opt_t" = .yes ]; then
          echo "cp /dev/null $tmpfile.lst" 1>&2
      fi
      cp /dev/null $tmpfile.lst
      for src in $srcs; do
          if [ -d $src ]; then
              if [ ".$opt_t" = .yes ]; then
                  echo "(cd $src && $prg_find . -type f -depth -print) | sed -e 's:^\\.\$::' -e 's:^\\./::' | cat $exclude >>$tmpfile.lst" 1>&2
              fi
              (cd $src && $prg_find . -type f -depth -print) |\
              sed -e 's:^\.$::' -e 's:^\./::' | eval cat $exclude >>$tmpfile.lst
          else
              if [ ".$opt_t" = .yes ]; then
                  echo "echo $src >>$tmpfile.lst" 1>&2
              fi
              echo $src >>$tmpfile.lst
          fi
      done
      sort <$tmpfile.lst >$tmpfile.lst.n
      mv $tmpfile.lst.n $tmpfile.lst
      if [ ".$opt_v" = .yes ]; then
          cat $tmpfile.lst | sed -e 's/^/  /' 1>&2
      fi
      
      #   determine tarball file and directory name
      if [ ".$opt_o" != . ]; then
          tarfile="$opt_o"
          if [ ".$opt_d" != . ]; then
              tarname="$opt_d"
          else
              tarname=`echo $tarfile | sed -e 's/\.tar.*$//' -e 's;.*/\([^/]*\)$;\1;'`
          fi
      else
          if [ ".$opt_d" != . ]; then
              tarname="$opt_d"
          elif [ -d "$from" ]; then
              tarname=`echo $from | sed -e 's;.*/\([^/]*\)$;\1;'`
          else
              tarname="out"
          fi
          tarfile="$tarname.tar"
      fi
      
      #   roll the tarball
      compress=''
      if [ ".$opt_c" != . ]; then
          compress="| $opt_c"
      fi
      if [ ".$prg_tardy" != . ]; then
          #   the elegant hackers way
          tardy_opt="--prefix=$tarname"
          tardy_opt="$tardy_opt --user_number=0 --group_number=0" # security!
          if [ ".$opt_u" != . ]; then
              tardy_opt="$tardy_opt --user_name=$opt_u"
          fi
          if [ ".$opt_g" != . ]; then
              tardy_opt="$tardy_opt --group_name=$opt_g"
          fi
          if [ ".$opt_t" = .yes ]; then
              echo "cat $tmpfile.lst | xargs $prg_tar cf - | $prg_tardy $tardy_opt | cat $compress >$tmpfile.out" 1>&2
          fi
          cat $tmpfile.lst |\
          xargs $prg_tar cf - |\
          $prg_tardy $tardy_opt |\
          eval cat $compress >$tmpfile.out
          if [ ".$opt_t" = .yes ]; then
              echo "cp $tmpfile.out $tarfile" 1>&2
          fi
          cp $tmpfile.out $tarfile
      else
          #  the portable standard way
          if [ ".$opt_t" = .yes ]; then
              echo "mkdir $tmpdir/$tarname" 1>&2
          fi
          mkdir $tmpdir/$tarname || exit 1
          if [ ".$opt_t" = .yes ]; then
              echo "cat $tmpfile.lst | xargs $prg_tar cf - | (cd $tmpdir/$tarname && $prg_tar xf -)" 1>&2
          fi
          cat $tmpfile.lst |\
          xargs $prg_tar cf - |\
          (cd $tmpdir/$tarname && $prg_tar xf -)
          if [ ".$opt_u" != . ]; then
              if [ ".$opt_t" = .yes ]; then
                  echo "chown -R $opt_u $tmpdir/$tarname >/dev/null 2>&1" 2>&1
              fi
              chown -R $opt_u $tmpdir/$tarname >/dev/null 2>&1 ||\
              echo "$msgprefix:Warning: cannot set user name \`$opt_u' (would require root priviledges)"
          fi
          if [ ".$opt_g" != . ]; then
              if [ ".$opt_t" = .yes ]; then
                  echo "chgrp -R $opt_g $tmpdir/$tarname >/dev/null 2>&1" 2>&1
              fi
              chgrp -R $opt_g $tmpdir/$tarname >/dev/null 2>&1 ||\
              echo "$msgprefix:Warning: cannot set group name \`$opt_g' (would require root priviledges)"
          fi
          if [ ".$opt_t" = .yes ]; then
              echo "(cd $tmpdir && $prg_find $tarname -type f -depth -print | sort | xargs $prg_tar cf -) | cat $compress >$tmpfile.out" 1>&2
          fi
          (cd $tmpdir && $prg_find $tarname -type f -depth -print | sort | xargs $prg_tar cf -) |\
          eval cat $compress >$tmpfile.out
          if [ ".$opt_t" = .yes ]; then
              echo "cp $tmpfile.out $tarfile" 1>&2
          fi
          cp $tmpfile.out $tarfile
          if [ ".$opt_t" = .yes ]; then
              echo "rm -rf $tmpdir/$tarname" 1>&2
          fi
          rm -rf $tmpdir/$tarname
      fi
      
      #   cleanup
      if [ ".$opt_t" = .yes ]; then
          echo "rm -f $tmpfile.lst $tmpfile.out" 1>&2
      fi
      rm -f $tmpfile.lst $tmpfile.out
      ;;
  
  subst )
      ##
      ##  subst -- Apply sed(1) substitution operations
      ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
      ##  Originally written for OpenPKG's rpmtool
      ##
      
      #   remember optional list of file(s)
      files="$*"
      
      #   parameter consistency check
      if [ $# -eq 0 -a ".$opt_b" != . ]; then
          echo "$msgprefix:Error: option -b cannot be applied to stdin" 1>&2
          exit 1
      fi
      if [ $# -eq 0 -a ".$opt_s" = .yes ]; then
          echo "$msgprefix:Error: option -s cannot be applied to stdin" 1>&2
          exit 1
      fi
      
      #   build underlying sed(1) command
      sedcmd='sed'
      if [ ".$opt_e" != . ]; then
          OIFS="$IFS"; IFS="$ASC_NL"; set -- $opt_e; IFS="$OIFS"
          for e
          do
              sedcmd="$sedcmd -e '$e'" 
          done
      elif [ ".$opt_f" != . ]; then
          if [ ! -f $opt_f ]; then
              echo "$msgprefix:Error: command file \`$opt_f' not found or not a regular file" 1>&2
              exit 1
          fi
          sedcmd="$sedcmd -f '$opt_f'"
      else
          echo "$msgprefix:Error: either -e option(s) or -f option required" 1>&2
          exit 1
      fi
      
      #   determine extension for original file
      orig=".orig"
      if [ ".$opt_b" != . ]; then
          orig="$opt_b"
      fi
      
      #   apply sed(1) operation(s)
      if [ ".$files" != . ]; then
          #   apply operation(s) to files
          for file in $files; do
              test ".$file" = . && continue
              if [ ! -f $file ]; then
                  echo "$msgprefix:Warning: file \`$file' not found or not a regular file" 1>&2
                  continue
              fi
      
              #   handle interactive mode
              if [ ".$opt_i" = .yes ]; then
                  eval "$sedcmd <$file >$file.new"
                  skip=no
                  if cmp $file $file.new >/dev/null 2>&1; then
                      rm -f $file.new
                      skip=yes
                  else
                      (diff -U1 $file $file.new >$tmpfile) 2>/dev/null
                      if [ ".`cat $tmpfile`" = . ]; then
                          (diff -C1 $file $file.new >$tmpfile) 2>/dev/null
                          if [ ".`cat $tmpfile`" = . ]; then
                              echo "$msgprefix:Warning: unable to show difference for file \`$file'" 1>&2
                              cp /dev/null $tmpfile
                          fi
                      fi
                      rm -f $file.new
                      cat $tmpfile
                      echo dummy | awk '{ printf("%s", TEXT); }' TEXT=">>> Apply [Y/n]: "
                      read input
                      if [ ".$input" != .Y ] &&\
                         [ ".$input" != .y ] &&\
                         [ ".$input" != . ]; then
                         skip=yes
                      fi
                  fi
                  if [ ".$skip" = .yes ]; then
                      if [ ".$opt_v" = .yes ]; then
                          echo "file \`$file' -- skipped" 1>&2
                      fi
                      continue
                  fi
              fi
      
              #   apply sed(1) operation(s)
              if [ ".$opt_v" = .yes ]; then
                  echo "patching \`$file'" 1>&2
              fi
              if [ ".$opt_t" = .yes ]; then
                  echo "\$ cp -p $file $file$orig"
                  echo "\$ $sedcmd <$file$orig >$file"
              fi
              if [ ".$opt_n" = .no ]; then
                  cp -p $file $file$orig
                  eval "$sedcmd <$file$orig >$file"
              fi
      
              #   optionally fix timestamp
              if [ ".$opt_s" = .yes ]; then
                  if [ ".$opt_t" = .yes ]; then
                      echo "\$ touch -r $file$orig $file"
                  fi
                  if [ ".$opt_n" = .no ]; then
                      touch -r $file$orig $file
                  fi
              fi
      
              #   optionally remove preserved original file
              if [ ".$opt_b" = . ]; then
                  if [ ".$opt_t" = .yes ]; then
                      echo "\$ rm -f $file$orig"
                  fi
                  if [ ".$opt_n" = .no ]; then
                      rm -f $file$orig
                  fi
              fi
          done
      else
          #   apply operation(s) to stdin/stdout
          if [ ".$opt_v" = .yes ]; then
              echo "patching <stdin>" 1>&2
          fi
          if [ ".$opt_t" = .yes ]; then
              echo "\$ $sedcmd"
          fi
          if [ ".$opt_n" = .no ]; then
              eval "$sedcmd"
          fi
      fi
      ;;
  
  guessos )
      ##
      ##  guessos -- Simple operating system guesser
      ##  Copyright (c) 1996-1999 The Apache Group, http://www.apache.org/
      ##  The Apache license applies (see http://www.apache.org/docs/LICENSE)
      ##  Originally written for Apache
      ##
      
      MACHINE=`(uname -m) 2>/dev/null` || MACHINE=`(uname -p) 2>/dev/null` || MACHINE="unknown"
      RELEASE=`(uname -r) 2>/dev/null` || RELEASE="unknown"
       SYSTEM=`(uname -s) 2>/dev/null` ||  SYSTEM="unknown"
      VERSION=`(uname -v) 2>/dev/null` || VERSION="unknown"
      
      XREL=`(uname -X) 2>/dev/null | grep "^Release" | awk '{print $3}'`
      if [ "x$XREL" != "x" ]; then
          if [ -f /etc/kconfig ]; then
              case "$XREL" in
                  4.0|4.1) echo "${MACHINE}-whatever-isc4"; exit 0 ;;
              esac
          else
          case "$XREL" in
              3.2v4.2)
                  echo "whatever-whatever-sco3"; exit 0
                  ;;
              3.2v5.0*)
                  echo "whatever-whatever-sco5"; exit 0
                  ;;
              4.2MP)
                  if [ "x$VERSION" = "x2.1.1" ]; then
                      echo "${MACHINE}-whatever-unixware211"; exit 0
                  elif [ "x$VERSION" = "x2.1.2" ]; then
                      echo "${MACHINE}-whatever-unixware212"; exit 0
                  else
                      echo "${MACHINE}-whatever-unixware2"; exit 0
                  fi
                  ;;
              4.2)
                  echo "whatever-whatever-unixware1"; exit 0
                  ;;
              5)
                  case "$VERSION" in
                      7*) echo "${MACHINE}-whatever-unixware7"; exit 0 ;;
                  esac
                  ;;
          esac
          fi
      fi
      case "${SYSTEM}:${RELEASE}:${VERSION}:${MACHINE}" in
          MiNT:*)
              echo "m68k-atari-mint"; exit 0
              ;;
          A/UX:*)
              echo "m68k-apple-aux3"; exit 0
              ;;
          AIX:*)
              MACH=`echo $MACHINE | sed -e 's;[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F];;'`
              echo "${MACH}-ibm-aix${VERSION}.${RELEASE}"; exit 0
              ;;
          dgux:*)
              echo "${MACHINE}-dg-dgux"; exit 0
              ;;
          HI-UX:*)
              echo "${MACHINE}-hi-hiux"; exit 0
              ;;
          HP-UX:*)
              HPUXVER=`echo ${RELEASE}|sed -e 's/[^.]*.[0B]*//'`
              MACHINE=`echo ${MACHINE}|sed -e 's:/:_:'`
              echo "${MACHINE}-hp-hpux${HPUXVER}"; exit 0
              ;;
          IRIX:*)
              if [ -f /usr/lib32/mips4/libm.so ]; then
                  echo "${MACHINE}/32-sgi-irix${RELEASE}"; exit 0
              else
                  echo "${MACHINE}-sgi-irix${RELEASE}"; exit 0
              fi
              ;;
          IRIX64:*)
              echo "${MACHINE}/64-sgi-irix${RELEASE}"; exit 0
              ;;
          Linux:*)
              V='whatever'
              case "$MACHINE" in
                  i?86) V='pc' ;;
              esac
              R=''
              case "$RELEASE" in
                  [1-9].*) R=`echo $RELEASE | cut -c1` ;;
              esac
              echo "${MACHINE}-${V}-linux-gnu${R}"; exit 0
              ;;
          LynxOS:*)
              echo "${MACHINE}-lynx-lynxos"; exit 0
              ;;
          BSD/386|BSD/OS:3.*)
              echo "${MACHINE}-whatever-bsdi3"; exit 0
              ;;
          BSD/386:*:*:*486*|BSD/OS:*:*:*:*486*)
              echo "i486-whatever-bsdi"; exit 0
              ;;
          BSD/386:*|BSD/OS:*)
              echo "${MACHINE}-whatever-bsdi"; exit 0
              ;;
          FreeBSD:*)
              VERS=`echo ${RELEASE} | sed -e 's/[-(].*//'`
              MACH=`/sbin/sysctl -n hw.model`
              ARCH='whatever'
              case ${MACH} in
                 *386*       ) MACH="i386"     ;;
                 *486*       ) MACH="i486"     ;;
                 Pentium\ II*) MACH="i686"     ;;
                 Pentium*    ) MACH="i586"     ;;
                 Alpha*      ) MACH="alpha"    ;;
                 *           ) MACH="$MACHINE" ;;
              esac
              case ${MACH} in
                 i[0-9]86 ) ARCH="pc" ;;
              esac
              echo "${MACH}-${ARCH}-freebsd${VERS}"; exit 0
              ;;
          NetBSD:*:*:*486*)
              echo "i486-whatever-netbsd${RELEASE}"; exit 0
              ;;
          NetBSD:*)
              echo "${MACHINE}-whatever-netbsd${RELEASE}"; exit 0
              ;;
          OpenBSD:*)
              echo "${MACHINE}-whatever-openbsd"; exit 0
              ;;
          OSF1:*:*:*alpha*)
              VERS=`echo $RELEASE | sed -e 's;^V;;'`
              echo "${MACHINE}-dec-osf${VERS}"; exit 0
              ;;
          QNX:*)
              if [ "$VERSION" -gt 422 ]; then
                  echo "${MACHINE}-qssl-qnx32"
              else
                  echo "${MACHINE}-qssl-qnx"
              fi
              exit 0
              ;;
          Paragon*:*:*:*)
              echo "i860-intel-osf1"; exit 0
              ;;
          SunOS:5.*)
              VERSION=`echo $RELEASE | sed -e 's;^5\.;;'`
              echo "${MACHINE}-sun-solaris2.${VERSION}"; exit 0
              ;;
          SunOS:*)
              echo "${MACHINE}-sun-sunos4"; exit 0
              ;;
          UNIX_System_V:4.*:*)
              echo "${MACHINE}-whatever-sysv4"; exit 0
              ;;
          unix:3.0.9*:*:88k)
              echo "${MACHINE}-encore-sysv4"; exit 0
              ;;
          *:4*:R4*:m88k)
              echo "${MACHINE}-whatever-sysv4"; exit 0
              ;;
          UnixWare:5:99*:*)
              # Gemini, beta release of next rev of unixware
              echo "${MACHINE}-whatever-unixware212"; exit 0
              ;;
          DYNIX/ptx:4*:*)
              echo "${MACHINE}-whatever-sysv4"; exit 0
              ;;
          *:4.0:3.0:[345][0-9]?? | *:4.0:3.0:3[34]??[/,]* | library:*)
              echo "x86-ncr-sysv4"; exit 0
              ;;
          ULTRIX:*)
              echo "${MACHINE}-unknown-ultrix"; exit 0
              ;;
          SINIX-?:* | ReliantUNIX-?:*)
              echo "${MACHINE}-siemens-sysv4"; exit 0
              ;;
          POSIX*BS2000)
              echo "${MACHINE}-siemens-sysv4"; exit 0
              ;;
          machten:*)
             echo "${MACHINE}-tenon-${SYSTEM}"; exit 0;
             ;;
          ConvexOS:*:11.*:*)
             echo "${MACHINE}-v11-${SYSTEM}"; exit 0;
             ;;
          UNIX_SV:*:*:maxion)
             echo "${MACHINE}-ccur-sysv4"; exit 0;
             ;;
          PowerMAX_OS:*:*:Night_Hawk)
             MACHINE=`uname -p`
             echo "${MACHINE}-concurrent-powermax"; exit 0;
             ;;
          UNIX_SV:*)
             if [ -d /usr/nec ];then
                 echo "mips-nec-sysv4"; exit 0;
             fi
             ;;
          NonStop-UX:4.[02]*:[BC]*:*)
             echo "${MACHINE}-tandem-sysv4"; exit 0;
             ;;
          Rhapsody:*:*:*)
             case "${MACHINE}" in
                 "Power Macintosh") MACHINE=powerpc ;;
             esac
             echo "${MACHINE}-apple-rhapsody${RELEASE}"; exit 0
             ;;
          "Mac OS":*:*:*)
             MACHINE=`uname -p`
             echo "${MACHINE}-apple-macos${RELEASE}"; exit 0
             ;;
          "RISC iX":*)
             echo "arm-whatever-riscix"; exit 0;
             ;;
          *:4.0:2:*)
             echo "whatever-unisys-sysv4"; exit 0;
             ;;
          *:*:dcosx:NILE*)
             echo "pyramid-pyramid-svr4"; exit 0;
             ;;
          *:*:*:"DRS 6000")
             echo "drs6000-whatever-whatever"; exit 0;
             ;;
          AmigaOS:*:*:* )
             echo "${MACHINE}-whatever-${SYSTEM}${RELEASE}"; exit 0
             ;;
      esac
      
      # Now NeXT
      ISNEXT=`(hostinfo) 2>/dev/null`
      case "$ISNEXT" in
          *NeXT*)
               # Swiped from a friendly uname clone for NEXT/OPEN Step.
               NEXTOSVER="`hostinfo | sed -n 's/.*NeXT Mach \([0-9\.]*\).*/\1/p'`"
               if [ "$NEXTOSVER" -gt 3.3 ]; then
                   NEXTOS="openstep"
               else
                   NEXTOS="nextstep"
               fi
               NEXTREL="`hostinfo | sed -n 's/.*NeXT Mach \([0-9\.]*\).*/\1/p'`"
               NEXTARCH=`arch`
               echo "${NEXTARCH}-next-${NEXTOS}${NEXTREL}" ; exit 0
               ;;
      esac
      
      # Fallback
      echo "${MACHINE}-unknown-${SYSTEM}/${RELEASE}/${VERSION}"
      ;;
  
  arx )
      ##
      ##  arx -- Extended archive command
      ##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
      ##  Originally written for shtool
      ##
      
      ar_prg="$opt_C"
      ar_cmd="$1"; shift
      archive="$1"; shift
      files="$*"
      
      #   walk through the file list and expand archives members
      tmpdir=`echo $archive | sed -e 's;[^/]*$;.arx;'`
      nfiles=''
      if [ ".$files" != . ]; then
          for file in $files; do
              if [ ! -f $file ]; then
                  echo "$msgprefix:Error: input file not found: $file" 1>&2
                  exit 1
              fi
              case $file in
                  *.a )
                      if [ ! -d $tmpdir ]; then
                          if [ ".$opt_t" = .yes ]; then
                              echo "mkdir $tmpdir" 1>&2
                          fi
                          mkdir $tmpdir
                      fi
                      case $tmpdir in
                           .arx )
                               from="../$file"
                               ;;
                           * )
                               dir=`echo $file | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;' -e 's;^$;.;'`
                               base=`echo $file | sed -e 's;.*/\([^/]*\)$;\1;'`
                               from="`cd $dir; pwd`/$base"
                               ;;
                      esac
                      if [ ".$opt_t" = .yes ]; then
                          echo "(cd $tmpdir && $ar_prg x $from)" 1>&2
                      fi
                      (cd $tmpdir && eval $ar_prg x $from)
                      if [ $? -ne 0 ]; then
                          echo "$msgprefix:Error: member extraction failed for archive: $file" 1>&2
                          exit 1
                      fi
                      for member in - `eval $ar_prg t $file | sed -e '/_\.SYMDEF/d'`; do
                          [ ".$member" = .- ] && continue
                          nfiles="$nfiles $tmpdir/$member"
                      done
                      ;;
                  * )
                      nfiles="$nfiles $file"
                      ;;
              esac
          done
      fi
      
      #   run the final archive command
      if [ ".$opt_t" = .yes ]; then
          echo "$ar_prg $ar_cmd $archive $nfiles" 1>&2
      fi
      eval $ar_prg $ar_cmd $archive $nfiles
      if [ $? -ne 0 ]; then
          echo "$msgprefix:Error: archive command failed" 1>&2
          exit $?
      fi
      
      #   cleanup and die gracefully
      if [ -d $tmpdir ]; then
          if [ ".$opt_t" = .yes ]; then
              echo "rm -rf $tmpdir" 1>&2
          fi
          rm -rf $tmpdir
      fi
      ;;
  
  slo )
      ##
      ##  slo -- Separate linker options by library class
      ##  Copyright (c) 1998-2002 Ralf S. Engelschall <rse@engelschall.com>
      ##  Originally written for Apache
      ##
      
      DIFS="$IFS"
      
      #   parse out -L and -l options from command line
      DIRS=''
      LIBS=''
      ARGV=''
      optprev=''
      for opt
      do
          #   concatenate with previous option if exists
          if [ ".$optprev" != . ]; then
              opt="${optprev}${opt}";
              optprev=''
          fi
          #   remember options for arg if used stand-alone
          if [ ".$opt" = ".-L" -o ".$opt" = ".-l" ]; then
              optprev="$opt"
              continue;
          fi
          #   split argument into option plus option argument
          arg="`echo $opt | cut -c3-`"
          opt="`echo $opt | cut -c1-2`"
          #   store into containers
          case $opt in
              -L) DIRS="$DIRS:$arg" ;;
              -l) LIBS="$LIBS:$arg" ;;
               *) ARGV="$ARGV $opt" ;;
          esac
      done
      
      #   set linker default directories
      DIRS_DEFAULT='/lib:/usr/lib'
      if [ ".$LD_LIBRARY_PATH" != . ]; then
          DIRS_DEFAULT="$DIRS_DEFAULT:$LD_LIBRARY_PATH"
      fi
      
      #   sort options by class
      DIRS_OBJ=''
      LIBS_OBJ=''
      DIRS_PIC=''
      LIBS_PIC=''
      DIRS_DSO=''
      LIBS_DSO=''
      
      #    for each library...
      OIFS="$IFS"; IFS=':'
      for lib in $LIBS; do
          [ ".$lib" = . ] && continue
      
          found='no'
          found_indefdir='no'
          found_type=''
          found_dir=''
      
          #    for each directory...
          OIFS2="$IFS"; IFS=":$DIFS"
          for dir in ${DIRS} switch-to-defdirs ${DIRS_DEFAULT}; do
              [ ".$dir" = . ] && continue
              [ ".$dir" = .switch-to-defdirs ] && found_indefdir=yes
              [ ! -d $dir ] && continue
      
              #    search the file
              OIFS3="$IFS"; IFS="$DIFS"
              for file in '' `cd $dir && ls lib${lib}.* 2>/dev/null`; do
                   [ ".$file" = . ] && continue
                   case $file in
                       *.so|*.so.[0-9]*|*.sl|*.sl.[0-9]* )
                            found=yes;
                            found_type=DSO;
                            break
                            ;;
                       *.lo|*.la )
                            found=yes;
                            found_type=PIC
                            ;;
                       *.a )
                            if [ ".$found_type" = . ]; then
                                found=yes
                                found_type=OBJ
                            fi
                            ;;
                   esac
              done
              IFS="$OIFS3"
              if [ ".$found" = .yes ]; then
                  found_dir="$dir"
                  break
              fi
          done
          IFS="$OIFS2"
      
          if [ ".$found" = .yes ]; then
              if [ ".$found_indefdir" != .yes ]; then
                  eval "dirlist=\"\${DIRS_${found_type}}:\""
                  if [ ".`echo \"$dirlist\" | fgrep :$found_dir:`" = . ]; then
                      eval "DIRS_${found_type}=\"\$DIRS_${found_type}:${found_dir}\""
                  fi
                  eval "LIBS_${found_type}=\"\$LIBS_${found_type}:$lib\""
              else
                  eval "LIBS_${found_type}=\"\$LIBS_${found_type}:$lib\""
              fi
          else
              LIBS_OBJ="$LIBS_OBJ:$lib"
              #dirlist="`echo $DIRS $DIRS_DEFAULT | sed -e 's/:/ /g'`"
              #echo "slo:Warning: library \"$lib\" not found in any of the following dirs:" 2>&1
              #echo "slo:Warning: $dirlist" 1>&1
          fi
      done
      IFS="$OIFS"
      
      #   also pass-through unused dirs even if it's useless
      OIFS="$IFS"; IFS=':'
      for dir in $DIRS; do
          dirlist="${DIRS_OBJ}:${DIRS_PIC}:${DIRS_DSO}:"
          if [ ".`echo \"$dirlist\" | fgrep :$dir:`" = . ]; then
              DIRS_OBJ="$DIRS_OBJ:$dir"
          fi
      done
      IFS="$OIFS"
      
      #   reassemble the options but separated by type
      for type in OBJ PIC DSO; do
          OIFS="$IFS"; IFS=':'
          eval "libs=\"\$LIBS_${type}\""
          opts=''
          for lib in $libs; do
              [ ".$lib" = . ] && continue
              opts="$opts -l$lib"
          done
          eval "LIBS_${type}=\"$opts\""
      
          eval "dirs=\"\$DIRS_${type}\""
          opts=''
          for dir in $dirs; do
              [ ".$dir" = . ] && continue
              opts="$opts -L$dir"
          done
          eval "DIRS_${type}=\"$opts\""
          IFS="$OIFS"
      done
      
      #   give back results
      for var in ARGV DIRS_OBJ LIBS_OBJ DIRS_PIC LIBS_PIC DIRS_DSO LIBS_DSO; do
          eval "val=\"\$${var}\""
          val="`echo $val | sed -e 's/^ *//'`"
          echo "${opt_p}${var}=\"${val}\""
      done
      ;;
  
  scpp )
      ##
      ##  scpp -- Sharing C Pre-Processor
      ##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
      ##  Originally written for GNU Pth
      ##
      
      srcs="$*"
      output="${opt_o}.n"
      
      #   find a reasonable Awk
      awk=''
      paths=`echo $PATH |\
             sed -e 's%/*:%:%g' -e 's%/$%%' \
                 -e 's/^:/.:/' -e 's/::/:.:/g' -e 's/:$/:./' \
                 -e 's/:/ /g'`
      for name in gawk nawk awk; do
          for path in $paths; do
              if [ -r "$path/$name" ]; then
                  awk="$path/$name"
                  break
              fi
          done
          if [ ".$awk" != . ]; then
              break
          fi
      done
      if [ ".$awk" = . ]; then
          echo "$msgprefix:Error: cannot find a reasonable Awk" 1>&2
          exit 1
      fi
      
      #   parse source file(s)
      if [ ".$opt_v" = .yes ]; then
          echo "Parsing:" | $awk '{ printf("%s", $0); }' 1>&2
      fi
      for src in $srcs; do
          if [ ".$opt_v" = .yes ]; then
              echo $src | $awk '{ printf(" %s", $0); }' 1>&2
          fi
          if [ ".$opt_f" != . ]; then
              inputcmd="sed"
              OIFS="$IFS"; IFS="$ASC_NL"; set -- $opt_f; IFS="$OIFS"
              for e
              do
                  inputcmd="$inputcmd -e '$e'"
              done
              inputcmd="$inputcmd $src"
          else
              inputcmd="cat $src"
          fi
          $inputcmd |\
          $awk '
             BEGIN {
                 ln    = 0;
                 fln   = 0;
                 level = 0;
                 mode  = "";
                 store = "";
             }
             {
                 ln++;
             }
             /^#if.*/ {
                 level++;
             }
             /^#if [a-zA-Z_][a-zA-Z0-9_]* *$/ {
                 if ($2 == define) {
                     mode = "D";
                     printf("D:#line %d \"%s\"\n", ln, src);
                     next;
                 }
             }
             /^#endif.*/ {
                 level--;
                 if (mode == "D" && level == 0) {
                     mode = "";
                     next;
                 }
             }
             /^[a-zA-Z_][a-zA-Z0-9_].*;.*/ {
                 if ($1 == class) {
                     printf("V:#line %d \"%s\"\n", ln, src);
                     printf("V:%s\n", $0);
                     printf("J:%s\n", $0);
                     next;
                 }
             }
             /^[a-zA-Z_][a-zA-Z0-9_].*=.*/ {
                 if ($1 == class) {
                     printf("V:#line %d \"%s\"\n", ln, src);
                     printf("V:%s\n", $0);
                     printf("J:%s\n", $0);
                     next;
                 }
             }
             /^[a-zA-Z_][a-zA-Z0-9_]*/ {
                 if ($1 == class) {
                     fln = ln;
                     store = $0;
                     mode = "F";
                     next;
                 }
             }
             /^\{ *$/ {
                 if (mode == "F") {
                     printf("F:#line %d \"%s\"\n", fln, src);
                     printf("F:%s;\n", store);
                     printf("I:%s;\n", store);
                     store = "";
                     mode = "";
                     next;
                 }
             }
             {
                 if (mode == "D")
                     printf("D:%s\n", $0);
                 else if (mode == "F")
                     store = store " " $0;
             }
          ' "src=$src" "define=$opt_D" "class=$opt_C" >>$tmpfile
      done
      if [ ".$opt_v" = .yes ]; then
          echo "" 1>&2
      fi
      
      #   start generating output header
      echo "/* $opt_o -- autogenerated from $opt_t, DO NOT EDIT! */" >$output
      echo "#line 1 \"$opt_t\"" >>$output
      sed <$opt_t -e "1,/^${opt_M} *\$/p" -e 'd' |\
      sed -e "/^${opt_M} *\$/d" >>$output
      
      #   merge in the define blocks
      grep '^D:' $tmpfile | sed -e 's/^D://' >>$output
      
      #   generate standard prolog
      echo "#line 1 \"_ON_THE_FLY_\"" >>$output
      echo "" >>$output
      echo "/* make sure the scpp source extensions are skipped */" >>$output
      echo "#define $opt_D 0" >>$output
      echo "#define $opt_C /**/" >>$output
      
      #   generate namespace hiding for variables
      echo "" >>$output
      echo "/* move intern variables to hidden namespace */" >>$output
      grep '^J:' $tmpfile | sed >>$output \
          -e 's/^J://' \
          -e 's/  */ /g' \
          -e 's/^[^=;]*[ *]\([a-zA-Z0-9_]*\)\[\];.*$/#define \1 __\1/' \
          -e 's/^[^=;]*[ *]\([a-zA-Z0-9_]*\)\[\] =.*$/#define \1 __\1/' \
          -e 's/^[^=;]*[ *]\([a-zA-Z0-9_]*\);.*$/#define \1 __\1/' \
          -e 's/^[^=;]*[ *]\([a-zA-Z0-9_]*\) =.*$/#define \1 __\1/'
      
      #   generate namespace hiding for functions
      echo "" >>$output
      echo "/* move intern functions to hidden namespace */" >>$output
      grep '^I:' $tmpfile | sed >>$output \
          -e 's/^I://' \
          -e 's/\([ (]\) */\1/g' \
          -e 's/ *\([),]\)/\1/g' \
          -e 's/^[^(]*[ *]\([a-zA-Z0-9_]*\)(.*$/#define \1 __\1/'
      
      #   generate prototypes for variables
      echo "" >>$output
      echo "/* prototypes for intern variables */" >>$output
      grep '^V:' $tmpfile | sed >>$output \
          -e 's/^V://' \
          -e 's/  */ /g' \
          -e 's/^\([^=;]*[ *][a-zA-Z0-9_]*\[\]\);.*$/\1;/' \
          -e 's/^\([^=;]*[ *][a-zA-Z0-9_]*\[\]\) =.*$/\1;/' \
          -e 's/^\([^=;]*[ *][a-zA-Z0-9_]*\);.*$/\1;/' \
          -e 's/^\([^=;]*[ *][a-zA-Z0-9_]*\) =.*$/\1;/' \
          -e 's/ ;/;/g' \
          -e "s/^$opt_C /extern /"
      
      #   generate prototypes for functions
      echo "" >>$output
      echo "/* prototypes for intern functions */" >>$output
      grep '^F:' $tmpfile | sed >>$output \
          -e 's/^F://' \
          -e 's/\([ (]\) */\1/g' \
          -e 's/ *\([),]\)/\1/g' \
          -e 's/\([* ]\)[a-zA-Z0-9_]*,/\1,/g' \
          -e 's/\([* ]\)[a-zA-Z0-9_]*);/\1);/g' \
          -e 's/(\*[a-zA-Z0-9_]*)(/(*)(/g' \
          -e 's/\([ (]\) */\1/g' \
          -e 's/ *\([),]\)/\1/g' \
          -e "s/^$opt_C /extern /"
      
      #   finish generating output header
      n=`(echo ''; sed <$opt_t -e "1,/^${opt_M} *\$/p" -e 'd') |\
         wc -l | sed -e 's;^ *\([0-9]*\) *$;\1;'`
      echo "#line $n \"$opt_t\"" >>$output
      sed <$opt_t -e "/^${opt_M} *\$/,\$p" -e 'd' |\
      sed -e "/^${opt_M} *\$/d" >>$output
      
      #   create final output file
      if [ -f $opt_o ]; then
          if [ ".$opt_p" = .yes ]; then
              grep -v '^#line' $opt_o  >$tmpfile.o
              grep -v '^#line' $output >$tmpfile.n
              out_old="$tmpfile.o"
              out_new="$tmpfile.n"
          else
              out_old="$opt_o"
              out_new="$output"
          fi
          if cmp -s $out_old $out_new; then
              :
          else
              cp $output $opt_o
          fi
      else
          cp $output $opt_o
      fi
      rm -f $output
      rm -f $tmpfile $tmpfile.* >/dev/null 2>&1
      ;;
  
  version )
      ##
      ##  version -- Maintain a version information file
      ##  Copyright (c) 1994-2002 Ralf S. Engelschall <rse@engelschall.com>
      ##  Originally written for ePerl, rewritten from scratch for shtool
      ##
      
      file="$1"
      
      #   determine prefix and name
      name="$opt_n"
      prefix="$opt_p"
      
      #   determine current version
      triple="$opt_s"
      if [ ".$triple" != . ]; then
          #   use given triple
          if [ ".`echo $triple | grep '[0-9]*.[0-9]*[sabp.][0-9]*'`" = . ]; then
              echo "$msgprefix:Error: invalid argument to option \`-s': \`$opt_s'" 1>&2
              exit 1
          fi
          eval `echo $triple |\
                sed -e 's%\([0-9]*\)\.\([0-9]*\)\([sabp.]\)\([0-9]*\).*%\
                ver="\1";rev="\2";typ="\3";lev="\4"%'`
          tim=calc
      elif [ -r $file ]; then
          #   determine triple from given file
          eval `grep 'Version [0-9]*.[0-9]*[sabp.][0-9]* ([0-9]*-[a-zA-Z]*-[0-9]*)' $file |\
                sed -e 's%.*Version \([0-9]*\)\.\([0-9]*\)\([sabp.]\)\([0-9]*\) (\([0-9]*-[a-zA-Z]*-[0-9]*\)).*%\
                ver="\1";rev="\2";typ="\3";lev="\4";tim="\5"%' -e 'q'`
      else
          #   intialise to first version
          ver=0
          rev=1
          typ=.
          lev=0
          tim=calc
      fi
      
      #   determine new version in batch
      if [ ".$opt_i" != . ]; then
          case $opt_i in
              v ) ver=`expr $ver + 1`
                  rev=0
                  lev=0
                  ;;
              r ) rev=`expr $rev + 1`
                  lev=0
                  ;;
              l ) lev=`expr $lev + 1`
                  ;;
              * ) echo "$msgprefix:Error: invalid argument to option \`-i': \`$opt_i'" 1>&2
                  exit 1
                  ;;
          esac
          tim=calc
      fi
      
      #   determine new version interactively
      if [ ".$opt_e" = .yes ]; then
          echo "old version: ${ver}.${rev}${typ}${lev}"
          while [ 1 ]; do
              echo dummy | awk '{ printf("new version: "); }'
              read triple
              case $triple in
                  [0-9]*.[0-9]*[sabp.][0-9]* )
                      ;;
                  * ) echo "$msgprefix:Error: invalid version string entered: \`$triple'" 1>&2
                      continue
                      ;;
              esac
              break
          done
          eval `echo $triple |\
                sed -e 's%^\([0-9]*\)\.\([0-9]*\)\([sabp.]\)\([0-9]*\)$%\
                ver="\1";rev="\2";typ="\3";lev="\4"%'`
          tim=calc
      fi
      
      #   determine hexadecimal and libtool value of version
      case $typ in
          a     ) typnum=0;  levnum=$lev ;;
          b     ) typnum=1;  levnum=$lev ;;
          p | . ) typnum=2;  levnum=$lev ;;
          s     ) typnum=15; levnum=255  ;; # snapshots are special
      esac
      hex=`echo "$ver:$rev:$typnum:$levnum" |\
           awk -F: '{ printf("0x%x%02x%1x%02x", $1, $2, $3, $4); }' |\
           tr 'abcdef' 'ABCDEF'`
      ltv=`echo "$ver:$rev:$typnum:$levnum" |\
           awk -F: '{ printf("%d:%d", $1*10 + $2, $3*10 + $4); }'`
      
      #   determine date
      if [ ".$tim" = .calc ]; then
          day=`date '+%d'`
          month=`date '+%m'`
          year=`date '+%Y' 2>/dev/null`
          if [ ".$time_year" = . ]; then
              year=`date '+%y'`
              case $year in
                  [5-9][0-9]) year="19$year" ;;
                  [0-4][0-9]) year="20$year" ;;
              esac
          fi
          case $month in
              1|01) month='Jan' ;;
              2|02) month='Feb' ;;
              3|03) month='Mar' ;;
              4|04) month='Apr' ;;
              5|05) month='May' ;;
              6|06) month='Jun' ;;
              7|07) month='Jul' ;;
              8|08) month='Aug' ;;
              9|09) month='Sep' ;;
                10) month='Oct' ;;
                11) month='Nov' ;;
                12) month='Dec' ;;
          esac
          tim="${day}-${month}-${year}"
      fi
      
      #   perform result actions
      mode=show
      if [ ".$opt_i" != . ]; then
          mode=edit
      elif [ ".$opt_e" = .yes ]; then
          mode=edit
      elif [ ".$opt_s" != . ]; then
          mode=edit
      fi
      if [ ".$mode" = .show ]; then
          #   just display the current version
          case $opt_d in
              short )
                  echo "${ver}.${rev}${typ}${lev}"
                  ;;
              long )
                  echo "${ver}.${rev}${typ}${lev} ($tim)"
                  ;;
              libtool )
                  echo "${ltv}"
                  ;;
              hex )
                  echo "${hex}"
                  ;;
              * ) echo "$msgprefix:Error: invalid argument to option \`-d': \`$opt_d'" 1>&2
                  exit 1
                  ;;
          esac
      else
          #   update the version file
      
          #   pre-generate various strings
          triple="${ver}.${rev}${typ}${lev}"
          vHex="$hex"
          vShort="${triple}"
          vLong="${triple} (${tim})"
          vTeX="This is ${name}, Version ${triple} (${tim})"
          vGNU="${name} ${triple} (${tim})"
          vWeb="${name}/${triple}"
          vSCCS="@(#)${name} ${triple} (${tim})"
          vRCS="\$Id: shtool,v 1.1.1.1 2002/10/21 15:19:37 ms Exp ${name} ${triple} (${tim}) \$"
      
          #   determine string out of filename
          #   (do NOT try to optimize this in any way because of portability)
          filestr=`echo $file |\
                   tr 'abcdefghijklmnopqrstuvwxyz./%+' \
                      'ABCDEFGHIJKLMNOPQRSTUVWXYZ____' | sed -e 's/-/_/g'`
      
          #   generate uppercase prefix
          prefixupper=`echo $prefix |\
                       tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
      
          #   create the version file according the the selected language
          echo "new version: ${vLong}"
      
          cp /dev/null $file
          case $opt_l in
              txt )
                  echo >>$file ""
                  echo >>$file "  ${file} -- Version Information for ${name} (syntax: Text)"
                  echo >>$file "  [automatically generated and maintained by GNU shtool]"
                  echo >>$file ""
                  echo >>$file "  $vTeX"
                  echo >>$file ""
                  ;;
              c )
                  echo >>$file "/*"
                  echo >>$file "**  ${file} -- Version Information for ${name} (syntax: C/C++)"
                  echo >>$file "**  [automatically generated and maintained by GNU shtool]"
                  echo >>$file "*/"
                  echo >>$file ""
                  echo >>$file "#ifdef _${filestr}_AS_HEADER_"
                  echo >>$file ""
                  echo >>$file "#ifndef _${filestr}_"
                  echo >>$file "#define _${filestr}_"
                  echo >>$file ""
                  echo >>$file "#define ${prefixupper}VERSION ${vHex}"
                  echo >>$file ""
                  echo >>$file "typedef struct {"
                  echo >>$file "    const int   v_hex;"
                  echo >>$file "    const char *v_short;"
                  echo >>$file "    const char *v_long;"
                  echo >>$file "    const char *v_tex;"
                  echo >>$file "    const char *v_gnu;"
                  echo >>$file "    const char *v_web;"
                  echo >>$file "    const char *v_sccs;"
                  echo >>$file "    const char *v_rcs;"
                  echo >>$file "} ${prefix}version_t;"
                  echo >>$file ""
                  echo >>$file "extern ${prefix}version_t ${prefix}version;"
                  echo >>$file ""
                  echo >>$file "#endif /* _${filestr}_ */"
                  echo >>$file ""
                  echo >>$file "#else /* _${filestr}_AS_HEADER_ */"
                  echo >>$file ""
                  echo >>$file "#define _${filestr}_AS_HEADER_"
                  echo >>$file "#include \"${file}\""
                  echo >>$file "#undef  _${filestr}_AS_HEADER_"
                  echo >>$file ""
                  echo >>$file "${prefix}version_t ${prefix}version = {"
                  echo >>$file "    ${vHex},"
                  echo >>$file "    \"${vShort}\","
                  echo >>$file "    \"${vLong}\","
                  echo >>$file "    \"${vTeX}\","
                  echo >>$file "    \"${vGNU}\","
                  echo >>$file "    \"${vWeb}\","
                  echo >>$file "    \"${vSCCS}\","
                  echo >>$file "    \"${vRCS}\""
                  echo >>$file "};"
                  echo >>$file ""
                  echo >>$file "#endif /* _${filestr}_AS_HEADER_ */"
                  echo >>$file ""
                  ;;
              perl )
                  echo >>$file "##"
                  echo >>$file "##  ${file} -- Version Information for ${name} (syntax: Perl)"
                  echo >>$file "##  [automatically generated and maintained by GNU shtool]"
                  echo >>$file "##"
                  echo >>$file ""
                  echo >>$file "my \$${prefix}version = {"
                  echo >>$file "    'v_hex'   => ${vHex},"
                  echo >>$file "    'v_short' => \"${vShort}\","
                  echo >>$file "    'v_long'  => \"${vLong}\","
                  echo >>$file "    'v_tex'   => \"${vTeX}\","
                  echo >>$file "    'v_gnu'   => \"${vGNU}\","
                  echo >>$file "    'v_web'   => \"${vWeb}\","
                  echo >>$file "    'v_sccs'  => \"${vSCCS}\","
                  echo >>$file "    'v_rcs'   => \"\\${vRCS}/\""
                  echo >>$file "};"
                  echo >>$file ""
                  echo >>$file "1;"
                  echo >>$file ""
                  ;;
              python )
                  echo >>$file "##"
                  echo >>$file "##  ${file} -- Version Information for ${name} (syntax: Python)"
                  echo >>$file "##  [automatically generated and maintained by GNU shtool]"
                  echo >>$file "##"
                  echo >>$file ""
                  echo >>$file "class ${prefix}version:"
                  echo >>$file "    v_hex       = ${vHex}"
                  echo >>$file "    v_short     = \"${vShort}\""
                  echo >>$file "    v_long      = \"${vLong}\""
                  echo >>$file "    v_tex       = \"${vTeX}\""
                  echo >>$file "    v_gnu       = \"${vGNU}\""
                  echo >>$file "    v_web       = \"${vWeb}\""
                  echo >>$file "    v_sccs      = \"${vSCCS}\""
                  echo >>$file "    v_rcs       = \"${vRCS}\""
                  echo >>$file ""
                  ;;
              * ) echo "$msgprefix:Error: invalid argument to option \`-l': \`$opt_l'" 1>&2
                  exit 1
                  ;;
          esac
      fi
      ;;
  
  path )
      ##
      ##  path -- Deal with program paths
      ##  Copyright (c) 1998-2002 Ralf S. Engelschall <rse@engelschall.com>
      ##  Originally written for Apache
      ##
      
      namelist="$*"
      
      #   check whether the test command supports the -x option
      if [ -x /bin/sh ] 2>/dev/null; then
          minusx="-x"
      else
          minusx="-r"
      fi
      
      #   split path string
      paths="`echo $opt_p |\
              sed -e 's/^:/.:/' \
                  -e 's/::/:.:/g' \
                  -e 's/:$/:./' \
                  -e 's/:/ /g'`"
      
      #   SPECIAL REQUEST
      #   translate forward to reverse path
      if [ ".$opt_r" = .yes ]; then
          if [ "x$namelist" = "x." ]; then
              rp='.'
          else
              rp=''
              for pe in `IFS="$IFS/"; echo $namelist`; do
                  rp="../$rp"
              done
          fi
          echo $rp | sed -e 's:/$::'
          exit 0
      fi
      
      #   SPECIAL REQUEST
      #   strip out directory or base name
      if [ ".$opt_d" = .yes ]; then
          echo "$namelist" |\
          sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;'
          exit 0
      fi
      if [ ".$opt_b" = .yes ]; then
          echo "$namelist" |\
          sed -e 's;.*/\([^/]*\)$;\1;'
          exit 0
      fi
      
      #   MAGIC SITUATION
      #   Perl Interpreter (perl)
      if [ ".$opt_m" = .yes  -a ".$namelist" = .perl ]; then
          rm -f $tmpfile >/dev/null 2>&1
          touch $tmpfile
          found=0
          pc=99
          for dir in $paths; do
              dir=`echo $dir | sed -e 's;/*$;;'`
              nc=99
              for name in perl perl5 miniperl; do
                   if [ $minusx "$dir/$name" -a ! -d "$dir/$name" ]; then
                       perl="$dir/$name"
                       pv=`$perl -e 'printf("%.3f", $]);'`
                       echo "$pv:$pc:$nc:$perl" >>$tmpfile
                       found=1
                   fi
                   nc=`expr $nc - 1`
              done
              pc=`expr $pc - 1`
          done
          if [ $found = 1 ]; then
              perl="`cat $tmpfile | sort -r -u | sed -e 'q' | cut -d: -f4`"
              rm -f $tmpfile >/dev/null 2>&1
              echo "$perl"
              exit 0
          fi
          rm -f $tmpfile >/dev/null 2>&1
          exit 1
      fi
      
      #   MAGIC SITUATION
      #   C pre-processor (cpp)
      if [ ".$opt_m" = .yes -a ".$namelist" = .cpp ]; then
          echo >$tmpfile.c "#include <assert.h>"
          echo >>$tmpfile.c "Syntax Error"
          #   1. try the standard cc -E approach
          cpp="${CC-cc} -E"
          (eval "$cpp $tmpfile.c >/dev/null") 2>$tmpfile.out
          my_error=`grep -v '^ *+' $tmpfile.out`
          if [ ".$my_error" != . ]; then
              #   2. try the cc -E approach and GCC's -traditional-ccp option
              cpp="${CC-cc} -E -traditional-cpp"
              (eval "$cpp $tmpfile.c >/dev/null") 2>$tmpfile.out
              my_error=`grep -v '^ *+' $tmpfile.out`
              if [ ".$my_error" != . ]; then
                  #   3. try a standalone cpp command in path and lib dirs
                  for path in $paths /lib /usr/lib /usr/local/lib; do
                      path=`echo $path | sed -e 's;/*$;;'`
                      if [ $minusx "$path/cpp" -a ! -d "$path/cpp" ]; then
                          cpp="$path/cpp"
                          break
                      fi
                  done
                  if [ ".$cpp" != . ]; then
                      (eval "$cpp $tmpfile.c >/dev/null") 2>$tmpfile.out
                      my_error=`grep -v '^ *+' $tmpfile.out`
                      if [ ".$my_error" != . ]; then
                          #   ok, we gave up...
                          cpp=''
                      fi
                  fi
              fi
          fi
          rm -f $tmpfile >/dev/null 2>&1
          rm -f $tmpfile.c $tmpfile.out >/dev/null 2>&1
          if [ ".$cpp" != . ]; then
              echo "$cpp"
              exit 0
          fi
          exit 1
      fi
      
      #   STANDARD SITUATION
      #   iterate over names
      for name in $namelist; do
          #   iterate over paths
          for path in $paths; do
              path=`echo $path | sed -e 's;/*$;;'`
              if [ $minusx "$path/$name" -a ! -d "$path/$name" ]; then
                  if [ ".$opt_s" != .yes ]; then
                      echo "$path/$name"
                  fi
                  exit 0
              fi
          done
      done
      exit 1
      ;;
  
  esac
  
  exit 0
  
  ##EOF##
  Index: ossp-pkg/titraq/task.cpp
  ============================================================
  $ cvs update -p -r1.1.1.1 task.cpp
  #include <ctype.h>
  #include <qfile.h>
  #include <stdlib.h>
  #include <stdio.h>
  #include <kiconloader.h>
  #include <qtimer.h>
  #include"task.h"
  #include"loging.h"
  
  
  QPtrVector<QPixmap> *Task::icons = 0;
  
  Task::Task(const QString& taskName, long minutes, long sessionTime, QListView *parent)
  	: QObject(), QListViewItem(parent)
  {
    init(taskName, minutes, sessionTime);
  };
  
  Task::Task(const QString& taskName, long minutes, long sessionTime, QListViewItem *parent)
    :QObject(), QListViewItem(parent)
  {
    init(taskName, minutes, sessionTime);
  }
  
  void Task::init(const QString& taskName, long minutes, long sessionTime)
  {
    if (icons == 0) {
      icons = new QPtrVector<QPixmap>(8);
      for (int i=0; i<8; i++) {
        QPixmap *icon = new QPixmap();
        QString name;
        name.sprintf("watch-%d.xpm",i);
        *icon = UserIcon(name);
        icons->insert(i,icon);
      }
    }
  
    // is this the right place?
    _loging = Loging::instance();
  
    _name = taskName.stripWhiteSpace();
    _totalTime = minutes;
    _sessionTime = sessionTime;
    _timer = new QTimer(this);
    connect(_timer, SIGNAL(timeout()), this, SLOT(updateActiveIcon()));
    setPixmap(1, UserIcon(QString::fromLatin1("empty-watch.xpm")));
    update();
    _i = 0;
  }
  
  
  void Task::setRunning(bool on)
  {
    if (on) {
      if (!_timer->isActive()) {
        _timer->start(1000);
        _loging->start(this);
        _i=7;
        updateActiveIcon();
      }
    }
    else {
      if (_timer->isActive()) {
        _timer->stop();
        _loging->stop(this);
        setPixmap(1, UserIcon(QString::fromLatin1("empty-watch.xpm")));
      }
    }
  }
  
  bool Task::isRunning() const
  {
    return _timer->isActive();
  }
  
  void Task::setName( const QString& name )
  {
    _name = name;
    update();
  }
  
  void Task::setTotalTime ( long minutes )
  {
    _totalTime = minutes;
    _loging->newTotalTime( this, minutes);
    update();
  }
  
  void Task::setSessionTime ( long minutes )
  {
    _sessionTime = minutes;
    _loging->newSessionTime( this, minutes);
    update();
  }
  
  
  void Task::incrementTime( long minutes )
  {
    _totalTime += minutes;
    _sessionTime += minutes;
    update();
  }
  
  void Task::decrementTime(long minutes)
  {
    _totalTime -= minutes;
    _sessionTime -= minutes;
    update();
  }
  
  
  void Task::updateActiveIcon()
  {
    _i = (_i+1) % 8;
    setPixmap(1, *(*icons)[_i]);
  }
  
  #include "task.moc"
  Index: ossp-pkg/titraq/task.h
  ============================================================
  $ cvs update -p -r1.1.1.1 task.h
  #ifndef ssk_karm_h
  #define ssk_karm_h
  
  #include <qstring.h>
  #include <qptrlist.h>
  #include <qobject.h>
  #include <qlistview.h>
  #include <qptrvector.h>
  #include <qpixmap.h>
  #include "karm.h"
  #include "loging.h"
  
  class QFile;
  class QTimer;
  class Loging;
  
  /**
  	Encapsulates a task.
  */
  
  class Task :public QObject, public QListViewItem
  {
  Q_OBJECT
  
  public:
  	/** constructor */
  	Task(const QString& taskame, long minutes, long sessionTime, QListView *parent = 0);
  	Task(const QString& taskame, long minutes, long sessionTime, QListViewItem *parent = 0);
    void init(const QString& taskame, long minutes, long sessionTime);
  
  	/**increments the total task time
  	* @param minutes to increment by
  	*/
  	void incrementTime( long minutes );
  
  	/** decrements the total task time
  	* @param minutes to decrement by
  	*/
  	void decrementTime( long minutes );
  
  	/** sets the total time accumulated by the task
  	* @param minutes time in minutes
  	*/
  	void setTotalTime ( long minutes );
  	void setSessionTime ( long minutes );
  
  	/** returns the total time accumulated by the task
  	* @return total time in minutes
  	*/
  	long totalTime() const
  		{ return _totalTime; };
  
  	long sessionTime() const
  		{ return _sessionTime; };
  
  	/** sets the name of the task
  	* @param name	a pointer to the name. A deep copy will be made.
  	*/
  	void setName( const QString& name );
  
  	/** returns the name of this task.
  	* @return a pointer to the name.
  	*/
  	QString name() const
  		{ return _name; };
  
  	/** Updates the content of the QListViewItem with respect to _name and _totalTime
  	 */
  	inline void update() {
  		setText(0, _name);
  		setText(1, Karm::formatTime(_sessionTime));
  		setText(2, Karm::formatTime(_totalTime));
  	}
  
    void setRunning(bool on);
    bool isRunning() const;
  
  protected slots:
    void updateActiveIcon();
  
  private:
    QString _name;
    long _totalTime;
    long _sessionTime;
    QTimer *_timer;
    int _i;
    static QPtrVector<QPixmap> *icons;
    Loging *_loging;
  
  };
  
  #endif
  Index: ossp-pkg/titraq/titraq.conf.pod
  ============================================================
  $ cvs update -p -r1.1.1.1 titraq.conf.pod
  ##
  ##  OSSP titraq - Graphical user interface for time accounting
  ##  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  ##  Copyright (c) 2002 Ralf S. Engelschall
  ##
  ##  This file is part of OSSP GUI, a graphical user interface
  ##  for OSSP which can be found at http://www.ossp.org/
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  titraq.conf.pod: Plain old documentation file
  ##
  
  =pod
  
  =head1 NAME
  
  B<titraq.conf> - OSSP titraq configuration file
  
  =head1 DESCRIPTION
  
  =head1 EXAMPLES
  
  =head1 SEE ALSO
  
  titraq(1)
  
  =head1 AUTHOR
  
  Michael Schloh von Bennewitz
  
  =cut
  Index: ossp-pkg/titraq/titraq.pod
  ============================================================
  $ cvs update -p -r1.1.1.1 titraq.pod
  ##
  ##  OSSP titraq - Graphical user interface for time accounting
  ##  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  ##  Copyright (c) 2002 Ralf S. Engelschall
  ##
  ##  This file is part of OSSP GUI, a graphical user interface
  ##  for OSSP which can be found at http://www.ossp.org/
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  titraq.pod: Plain old documentation file
  ##
  
  =pod
  
  =head1 NAME
  
  B<titraq> - OSSP titraq time accounting
  
  =head1 SYNOPSIS
  
  =head1 DESCRIPTION
  
  =head1 OPTIONS
  
  =item B<-?>|B<--usage>
  
  print short usage summary, then exit.
  
  =head1 ENVIRONMENT
  
  =head1 RETURN VALUE
  
  =head1 EXAMPLES
  
  =head1 FILES
  
  =head1 SEE ALSO
  
  titraq.conf(5)
  
  =head1 AUTHOR
  
  Michael Schloh von Bennewitz
  
  =head1 HISTORY
  
  =cut
  Index: ossp-pkg/titraq/titraq_test.sh
  ============================================================
  $ cvs update -p -r1.1.1.1 titraq_test.sh
  echo "Sorry, this test doesn't do anything yet."
  Index: ossp-pkg/titraq/titraq_version.c
  ============================================================
  $ cvs update -p -r1.1.1.1 titraq_version.c
  /*
  **  titraq_version.c -- Version Information for OSSP titraq (syntax: C/C++)
  **  [automatically generated and maintained by GNU shtool]
  */
  
  #ifdef _TITRAQ_VERSION_C_AS_HEADER_
  
  #ifndef _TITRAQ_VERSION_C_
  #define _TITRAQ_VERSION_C_
  
  #define TITRAQ_VERSION 0x001200
  
  typedef struct {
      const int   v_hex;
      const char *v_short;
      const char *v_long;
      const char *v_tex;
      const char *v_gnu;
      const char *v_web;
      const char *v_sccs;
      const char *v_rcs;
  } titraq_version_t;
  
  extern titraq_version_t titraq_version;
  
  #endif /* _TITRAQ_VERSION_C_ */
  
  #else /* _TITRAQ_VERSION_C_AS_HEADER_ */
  
  #define _TITRAQ_VERSION_C_AS_HEADER_
  #include "titraq_version.c"
  #undef  _TITRAQ_VERSION_C_AS_HEADER_
  
  titraq_version_t titraq_version = {
      0x001200,
      "0.1.0",
      "0.1.0 (27-May-2002)",
      "This is OSSP titraq, Version 0.1.0 (27-May-2002)",
      "OSSP titraq 0.1.0 (27-May-2002)",
      "OSSP titraq/0.1.0",
      "@(#)OSSP titraq 0.1.0 (27-May-2002)",
      "$Id: titraq_version.c,v 1.1.1.1 2002/10/21 15:19:37 ms Exp $"
  };
  
  #endif /* _TITRAQ_VERSION_C_AS_HEADER_ */
  
  Index: ossp-pkg/titraq/toolicons.h
  ============================================================
  $ cvs update -p -r1.1.1.1 toolicons.h
  /* Generated by qembed */
  static const unsigned int  clock_xpm_len = 765;
  static const unsigned char clock_xpm_data[] = {
      0x2f,0x2a,0x20,0x58,0x50,0x4d,0x20,0x2a,0x2f,0x0a,0x73,0x74,0x61,0x74,
      0x69,0x63,0x20,0x63,0x68,0x61,0x72,0x20,0x2a,0x6d,0x61,0x67,0x69,0x63,
      0x6b,0x5b,0x5d,0x20,0x3d,0x20,0x7b,0x0a,0x2f,0x2a,0x20,0x63,0x6f,0x6c,
      0x75,0x6d,0x6e,0x73,0x20,0x72,0x6f,0x77,0x73,0x20,0x63,0x6f,0x6c,0x6f,
      0x72,0x73,0x20,0x63,0x68,0x61,0x72,0x73,0x2d,0x70,0x65,0x72,0x2d,0x70,
      0x69,0x78,0x65,0x6c,0x20,0x2a,0x2f,0x0a,0x22,0x32,0x32,0x20,0x32,0x32,
      0x20,0x36,0x20,0x31,0x22,0x2c,0x0a,0x22,0x20,0x20,0x63,0x20,0x23,0x30,
      0x30,0x38,0x30,0x38,0x30,0x22,0x2c,0x0a,0x22,0x2e,0x20,0x63,0x20,0x23,
      0x38,0x30,0x38,0x30,0x30,0x30,0x22,0x2c,0x0a,0x22,0x58,0x20,0x63,0x20,
      0x23,0x38,0x30,0x38,0x30,0x38,0x30,0x22,0x2c,0x0a,0x22,0x6f,0x20,0x63,
      0x20,0x23,0x63,0x30,0x63,0x30,0x63,0x30,0x22,0x2c,0x0a,0x22,0x4f,0x20,
      0x63,0x20,0x47,0x72,0x61,0x79,0x31,0x30,0x30,0x22,0x2c,0x0a,0x22,0x2b,
      0x20,0x63,0x20,0x4e,0x6f,0x6e,0x65,0x22,0x2c,0x0a,0x2f,0x2a,0x20,0x70,
      0x69,0x78,0x65,0x6c,0x73,0x20,0x2a,0x2f,0x0a,0x22,0x2b,0x2b,0x2b,0x2b,
      0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,
      0x2b,0x2b,0x2b,0x2b,0x22,0x2c,0x0a,0x22,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,
      0x2b,0x2b,0x2b,0x6f,0x6f,0x6f,0x6f,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,
      0x2b,0x2b,0x22,0x2c,0x0a,0x22,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x6f,0x6f,
      0x6f,0x58,0x20,0x20,0x58,0x6f,0x6f,0x6f,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,
      0x22,0x2c,0x0a,0x22,0x2b,0x2b,0x2b,0x2b,0x2b,0x6f,0x58,0x58,0x58,0x4f,
      0x20,0x20,0x4f,0x58,0x58,0x58,0x6f,0x2b,0x2b,0x2b,0x2b,0x2b,0x22,0x2c,
      0x0a,0x22,0x2b,0x2b,0x2b,0x2b,0x6f,0x58,0x4f,0x4f,0x4f,0x4f,0x20,0x20,
      0x4f,0x4f,0x4f,0x4f,0x58,0x6f,0x2b,0x2b,0x2b,0x2b,0x22,0x2c,0x0a,0x22,
      0x2b,0x2b,0x2b,0x6f,0x58,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,
      0x4f,0x4f,0x4f,0x58,0x6f,0x2b,0x2b,0x2b,0x22,0x2c,0x0a,0x22,0x2b,0x2b,
      0x6f,0x58,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,
      0x4f,0x4f,0x58,0x6f,0x2b,0x2b,0x22,0x2c,0x0a,0x22,0x2b,0x2b,0x6f,0x58,
      0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,
      0x58,0x6f,0x2b,0x2b,0x22,0x2c,0x0a,0x22,0x2b,0x2b,0x6f,0x58,0x4f,0x4f,
      0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x20,0x4f,0x4f,0x4f,0x4f,0x58,0x6f,
      0x2b,0x2b,0x22,0x2c,0x0a,0x22,0x2b,0x6f,0x58,0x4f,0x4f,0x4f,0x4f,0x4f,
      0x4f,0x4f,0x4f,0x4f,0x20,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x58,0x6f,0x2b,
      0x22,0x2c,0x0a,0x22,0x2b,0x6f,0x58,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,
      0x20,0x20,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x58,0x6f,0x2b,0x22,0x2c,
      0x0a,0x22,0x2b,0x6f,0x58,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x20,0x20,
      0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x58,0x6f,0x2b,0x22,0x2c,0x0a,0x22,
      0x2b,0x6f,0x58,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x20,0x4f,
      0x4f,0x4f,0x4f,0x4f,0x4f,0x58,0x6f,0x2b,0x22,0x2c,0x0a,0x22,0x2b,0x2b,
      0x6f,0x58,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x20,0x4f,0x4f,
      0x4f,0x4f,0x58,0x6f,0x2b,0x2b,0x22,0x2c,0x0a,0x22,0x2b,0x2b,0x6f,0x58,
      0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x20,0x4f,0x4f,0x4f,
      0x58,0x6f,0x2b,0x2b,0x22,0x2c,0x0a,0x22,0x2b,0x2b,0x6f,0x58,0x4f,0x4f,
      0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x20,0x4f,0x4f,0x58,0x6f,
      0x2b,0x2b,0x22,0x2c,0x0a,0x22,0x2b,0x2b,0x2b,0x6f,0x58,0x4f,0x4f,0x4f,
      0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x58,0x6f,0x2b,0x2b,0x2b,
      0x22,0x2c,0x0a,0x22,0x2b,0x2b,0x2b,0x2b,0x6f,0x58,0x4f,0x4f,0x4f,0x4f,
      0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x58,0x6f,0x2b,0x2b,0x2b,0x2b,0x22,0x2c,
      0x0a,0x22,0x2b,0x2b,0x2b,0x2b,0x2b,0x6f,0x58,0x58,0x58,0x4f,0x4f,0x4f,
      0x4f,0x58,0x58,0x58,0x6f,0x2b,0x2b,0x2b,0x2b,0x2b,0x22,0x2c,0x0a,0x22,
      0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x6f,0x6f,0x6f,0x58,0x58,0x58,0x58,0x6f,
      0x6f,0x6f,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x22,0x2c,0x0a,0x22,0x2b,0x2b,
      0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x6f,0x6f,0x6f,0x6f,0x2b,0x2b,0x2b,
      0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x22,0x2c,0x0a,0x22,0x2b,0x2b,0x2b,0x2b,
      0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,
      0x2b,0x2b,0x2b,0x2b,0x22,0x0a,0x7d,0x3b,0x0a
  };
  
  
  static const unsigned int  clockedit_xpm_len = 819;
  static const unsigned char clockedit_xpm_data[] = {
      0x2f,0x2a,0x20,0x58,0x50,0x4d,0x20,0x2a,0x2f,0x0a,0x73,0x74,0x61,0x74,
      0x69,0x63,0x20,0x63,0x68,0x61,0x72,0x20,0x2a,0x6d,0x61,0x67,0x69,0x63,
      0x6b,0x5b,0x5d,0x20,0x3d,0x20,0x7b,0x0a,0x2f,0x2a,0x20,0x63,0x6f,0x6c,
      0x75,0x6d,0x6e,0x73,0x20,0x72,0x6f,0x77,0x73,0x20,0x63,0x6f,0x6c,0x6f,
      0x72,0x73,0x20,0x63,0x68,0x61,0x72,0x73,0x2d,0x70,0x65,0x72,0x2d,0x70,
      0x69,0x78,0x65,0x6c,0x20,0x2a,0x2f,0x0a,0x22,0x32,0x32,0x20,0x32,0x32,
      0x20,0x31,0x30,0x20,0x31,0x22,0x2c,0x0a,0x22,0x20,0x20,0x63,0x20,0x42,
      0x6c,0x61,0x63,0x6b,0x22,0x2c,0x0a,0x22,0x2e,0x20,0x63,0x20,0x23,0x30,
      0x30,0x38,0x30,0x38,0x30,0x22,0x2c,0x0a,0x22,0x58,0x20,0x63,0x20,0x52,
      0x65,0x64,0x22,0x2c,0x0a,0x22,0x6f,0x20,0x63,0x20,0x4d,0x61,0x67,0x65,
      0x6e,0x74,0x61,0x22,0x2c,0x0a,0x22,0x4f,0x20,0x63,0x20,0x23,0x38,0x30,
      0x38,0x30,0x30,0x30,0x22,0x2c,0x0a,0x22,0x2b,0x20,0x63,0x20,0x59,0x65,
      0x6c,0x6c,0x6f,0x77,0x22,0x2c,0x0a,0x22,0x40,0x20,0x63,0x20,0x23,0x38,
      0x30,0x38,0x30,0x38,0x30,0x22,0x2c,0x0a,0x22,0x23,0x20,0x63,0x20,0x23,
      0x63,0x30,0x63,0x30,0x63,0x30,0x22,0x2c,0x0a,0x22,0x24,0x20,0x63,0x20,
      0x47,0x72,0x61,0x79,0x31,0x30,0x30,0x22,0x2c,0x0a,0x22,0x25,0x20,0x63,
      0x20,0x4e,0x6f,0x6e,0x65,0x22,0x2c,0x0a,0x2f,0x2a,0x20,0x70,0x69,0x78,
      0x65,0x6c,0x73,0x20,0x2a,0x2f,0x0a,0x22,0x25,0x25,0x25,0x25,0x25,0x25,
      0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,
      0x25,0x25,0x22,0x2c,0x0a,0x22,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,
      0x25,0x23,0x23,0x23,0x23,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,
      0x22,0x2c,0x0a,0x22,0x25,0x25,0x25,0x25,0x25,0x25,0x23,0x23,0x23,0x40,
      0x2e,0x2e,0x40,0x23,0x23,0x23,0x23,0x23,0x23,0x25,0x25,0x25,0x22,0x2c,
      0x0a,0x22,0x25,0x25,0x25,0x25,0x25,0x23,0x40,0x40,0x23,0x23,0x23,0x23,
      0x23,0x23,0x40,0x40,0x23,0x6f,0x6f,0x6f,0x25,0x25,0x22,0x2c,0x0a,0x22,
      0x25,0x25,0x25,0x25,0x23,0x40,0x24,0x23,0x24,0x24,0x2e,0x2e,0x24,0x24,
      0x23,0x4f,0x4f,0x6f,0x6f,0x6f,0x23,0x25,0x22,0x2c,0x0a,0x22,0x25,0x25,
      0x25,0x23,0x40,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x4f,0x4f,
      0x4f,0x4f,0x6f,0x6f,0x23,0x25,0x22,0x2c,0x0a,0x22,0x25,0x25,0x23,0x40,
      0x24,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x4f,0x4f,0x2b,0x4f,0x4f,
      0x4f,0x23,0x25,0x25,0x22,0x2c,0x0a,0x22,0x25,0x25,0x23,0x40,0x23,0x24,
      0x24,0x24,0x24,0x24,0x24,0x23,0x4f,0x4f,0x4f,0x2b,0x2b,0x4f,0x4f,0x23,
      0x25,0x25,0x22,0x2c,0x0a,0x22,0x25,0x25,0x23,0x23,0x24,0x24,0x24,0x24,
      0x24,0x24,0x23,0x4f,0x4f,0x2b,0x2b,0x2b,0x4f,0x4f,0x23,0x23,0x25,0x25,
      0x22,0x2c,0x0a,0x22,0x25,0x23,0x40,0x23,0x24,0x24,0x24,0x24,0x24,0x23,
      0x4f,0x4f,0x4f,0x2b,0x2b,0x4f,0x4f,0x24,0x23,0x40,0x23,0x25,0x22,0x2c,
      0x0a,0x22,0x25,0x23,0x40,0x23,0x24,0x24,0x24,0x24,0x23,0x4f,0x4f,0x2b,
      0x2b,0x2b,0x4f,0x4f,0x24,0x24,0x23,0x40,0x23,0x25,0x22,0x2c,0x0a,0x22,
      0x25,0x23,0x40,0x23,0x24,0x24,0x24,0x23,0x4f,0x4f,0x4f,0x2b,0x2b,0x4f,
      0x4f,0x24,0x24,0x24,0x23,0x40,0x23,0x25,0x22,0x2c,0x0a,0x22,0x25,0x23,
      0x40,0x23,0x24,0x24,0x23,0x4f,0x4f,0x2b,0x2b,0x2b,0x4f,0x4f,0x24,0x24,
      0x24,0x24,0x23,0x40,0x23,0x25,0x22,0x2c,0x0a,0x22,0x25,0x25,0x23,0x23,
      0x24,0x23,0x4f,0x4f,0x4f,0x2b,0x2b,0x4f,0x4f,0x2e,0x24,0x24,0x24,0x24,
      0x23,0x23,0x25,0x25,0x22,0x2c,0x0a,0x22,0x25,0x25,0x23,0x40,0x23,0x4f,
      0x4f,0x2b,0x2b,0x2b,0x4f,0x4f,0x24,0x24,0x2e,0x24,0x24,0x23,0x40,0x23,
      0x25,0x25,0x22,0x2c,0x0a,0x22,0x25,0x25,0x23,0x40,0x4f,0x4f,0x4f,0x2b,
      0x2b,0x4f,0x4f,0x24,0x24,0x24,0x24,0x2e,0x23,0x24,0x40,0x23,0x25,0x25,
      0x22,0x2c,0x0a,0x22,0x25,0x25,0x25,0x4f,0x4f,0x2b,0x2b,0x2b,0x4f,0x4f,
      0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x40,0x23,0x25,0x25,0x25,0x22,0x2c,
      0x0a,0x22,0x25,0x25,0x4f,0x4f,0x2b,0x2b,0x2b,0x4f,0x4f,0x24,0x24,0x24,
      0x24,0x24,0x23,0x24,0x40,0x23,0x25,0x25,0x25,0x25,0x22,0x2c,0x0a,0x22,
      0x25,0x25,0x20,0x4f,0x2b,0x2b,0x4f,0x4f,0x23,0x23,0x23,0x23,0x23,0x23,
      0x40,0x40,0x23,0x25,0x25,0x25,0x25,0x25,0x22,0x2c,0x0a,0x22,0x25,0x20,
      0x4f,0x4f,0x4f,0x4f,0x4f,0x23,0x23,0x40,0x40,0x40,0x40,0x23,0x23,0x23,
      0x25,0x25,0x25,0x25,0x25,0x25,0x22,0x2c,0x0a,0x22,0x25,0x20,0x4f,0x4f,
      0x20,0x4f,0x25,0x25,0x25,0x23,0x23,0x23,0x23,0x25,0x25,0x25,0x25,0x25,
      0x25,0x25,0x25,0x25,0x22,0x2c,0x0a,0x22,0x25,0x20,0x20,0x20,0x25,0x25,
      0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,
      0x25,0x25,0x22,0x0a,0x7d,0x3b,0x0a
  };
  
  const char * delete_xpm[] = {
  /* width height num_colors chars_per_pixel */
  "22 22 3 1",
  /* colors */
  " 	c white",
  ".	c none",
  "X	c black",
  /* pixels */
  "......................",
  "......................",
  "......................",
  "......................",
  "......................",
  "....XX ........XX ....",
  "....XXXX .....XX .....",
  ".....XXXX ...XX ......",
  ".......XXX .X ........",
  "........XXXXX ........",
  ".........XXX .........",
  "........XXXXX ........",
  ".......XXX .XX .......",
  "......XXX ...XX ......",
  ".....XXX .....X ......",
  ".....XXX ......X .....",
  "......X ..............",
  "................X ....",
  "......................",
  "......................",
  "......................",
  "......................"};
  
  struct {
      unsigned int         size;
      const unsigned char *data;
      const char          *name;
  } embed_vec[] = {
      { 765, clock_xpm_data, "clock.xpm" },
      { 819, clockedit_xpm_data, "clockedit.xpm" },
      { 0, 0, "dummy" }
  };
  Index: ossp-pkg/titraq/top.cpp
  ============================================================
  $ cvs update -p -r1.1.1.1 top.cpp
  /*
  * Top Level window for KArm.
  * Distributed under the GPL.
  */
  
  
  /*
   * $Id: top.cpp,v 1.1.1.1 2002/10/21 15:19:37 ms Exp $
   */
  
  #include "top.h"
  #include <qstring.h>
  #include <qkeycode.h>
  #include <qlayout.h>
  #include <qpixmap.h>
  #include <qpopupmenu.h>
  #include <kconfig.h>
  #include <kaccel.h>
  #include <kapplication.h>
  #include <kdockwindow.h>
  #include <kglobal.h>
  #include <kiconloader.h>
  #include <klocale.h>
  #include <kmenubar.h>
  #include <kaction.h>
  #include <kstdaction.h>
  #include <qvbox.h>
  #include <qtimer.h>
  
  #include "kaccelmenuwatch.h"
  #include "karm.h"
  #include "print.h"
  #include "task.h"
  #include "preferences.h"
  #include <kstatusbar.h>
  
  KarmWindow::KarmWindow() : KMainWindow(0),
  	_accel( new KAccel( this ) ),
  	_watcher( new KAccelMenuWatch( _accel, this ) ),
  	_karm( new Karm( this ) ),
  	_totalTime( 0 )
  {
    setCentralWidget( _karm );
    connect( _karm, SIGNAL( sessionTimeChanged( long ) ),
  		   this, SLOT( updateTime( long ) ) );
    connect(_karm, SIGNAL(currentChanged ( QListViewItem * )),this,SLOT(slotSelectionChanged()));
    connect(_karm, SIGNAL(selectionChanged  ( QListViewItem * )),this,SLOT(slotSelectionChanged()));
    connect(_karm, SIGNAL( updateButtons() ), this, SLOT(slotSelectionChanged()));
    // status bar
    statusBar()->insertItem( i18n( "This session: %1" )
                             .arg(QString::fromLatin1("0:00")), 0, 0, true );
  
    // setup PreferenceDialog.
    _preferences = Preferences::instance();
  
    // popup menus
    makeMenus();
    _watcher->updateMenus();
  
    // connections
    connect( _karm, SIGNAL(timerTick()), this, SLOT(updateTime()));
  
    _preferences->load();
    loadGeometry();
  
    // FIXME: this shouldnt stay. We need to check whether the
    // file exists and if not, create a blank one and ask whether
    // we want to add a task.
    _karm->load();
  
    KDockWindow *dockWindow = new KDockWindow(this,"doc widget");
    dockWindow->setPixmap( SmallIcon( QString::fromLatin1( "karm" ) ) );
    dockWindow->show();
    slotSelectionChanged();
  }
  
  void KarmWindow::slotSelectionChanged()
  {
    Task* item= static_cast<Task *>(_karm->currentItem());
    actionDelete->setEnabled(item);
    actionEdit->setEnabled(item);
    actionStart->setEnabled(item && !item->isRunning());
    actionStop->setEnabled(item && item->isRunning());
  }
  
  void KarmWindow::save()
  {
    _karm->save();
    saveGeometry();
  }
  
  void KarmWindow::quit()
  {
    _karm->stopAllTimers();
    save();
    kapp->quit();
  }
  
  
  KarmWindow::~KarmWindow()
  {
    quit();
  }
  
  /**
   * Updates the total time tally by one minute.
   */
  void KarmWindow::updateTime()
  {
    _totalTime++;
    updateStatusBar();
  }
  
  /**
   * Updates the total time tally by the value specified in newval.
   */
  void KarmWindow::updateTime( long difference )
  {
    _totalTime += difference;
    updateStatusBar();
  }
  
  void KarmWindow::updateStatusBar()
  {
    QString time = Karm::formatTime( _totalTime );
    statusBar()->changeItem( i18n("This session: %1" ).arg(time), 0);
  }
  
  void KarmWindow::saveProperties( KConfig* )
  {
    _karm->stopAllTimers();
    _karm->save();
  }
  
  void KarmWindow::keyBindings()
  {
    KKeyDialog::configureKeys( actionCollection(), xmlFile());
  }
  
  void KarmWindow::resetSessionTime()
  {
    _totalTime = 0;
    statusBar()->changeItem( i18n("This session: %1").arg(QString::fromLatin1("0:00")), 0 );
  	_karm->resetSessionTimeForAllTasks();
  }
  
  
  void KarmWindow::makeMenus()
  {
    KAction
      *actionKeyBindings,
      *actionResetSession,
      *actionNew,
      *actionNewSub;
  
    (void) KStdAction::quit(this, SLOT(quit()), actionCollection());
    (void) KStdAction::print(this, SLOT(print()), actionCollection());
    actionKeyBindings = KStdAction::keyBindings(this, SLOT(keyBindings()),actionCollection());
    (void) KStdAction::preferences(_preferences, SLOT(showDialog()),actionCollection());
    (void) KStdAction::save(_preferences, SLOT(save()),actionCollection());
    actionResetSession = new KAction(i18n("&Reset Session Times"), CTRL + Key_R,this,
                                     SLOT(resetSessionTime()),actionCollection(),
                                     "reset_session_time");
    actionStart = new KAction(i18n("&Start"), QString::fromLatin1("1rightarrow"),
                              Key_S ,_karm,
                              SLOT(startTimer()),actionCollection(),"start");
    actionStop = new KAction(i18n("S&top"), QString::fromLatin1("stop"),
                             Key_Escape,_karm,
                             SLOT(stopCurrentTimer()),actionCollection(),"stop");
    actionNew = new KAction(i18n("New..."), QString::fromLatin1("filenew"),
                               CTRL+Key_N,
                               _karm, SLOT(newTask()),
                               actionCollection(), "new_task");
    actionNewSub = new KAction(i18n("New Subtask..."), QString::fromLatin1("kmultiple"),
                               CTRL+ALT+Key_N,
                               _karm, SLOT(newSubTask()),
                               actionCollection(), "new_sub_task");
    actionDelete = new KAction(i18n("&Delete"), QString::fromLatin1("editdelete"),
                               Key_Delete,_karm,
                               SLOT(deleteTask()),actionCollection(),"delete_task");
    actionEdit = new KAction(i18n("&Edit..."), QString::fromLatin1("edit"),
                             CTRL + Key_E,_karm,
                             SLOT(editTask()),actionCollection(),"edit_task");
    createGUI( QString::fromLatin1("karmui.rc") );
  
    // Tool tops must be set after the createGUI.
    actionKeyBindings->setToolTip(i18n("Configure key bindings"));
    actionKeyBindings->setWhatsThis(i18n("This will let you configure keybindings which is specific to karm"));
  
    actionResetSession->setToolTip(i18n("Reset session time"));
    actionResetSession->setWhatsThis(i18n("This will reset the session time for all tasks."));
  
    actionStart->setToolTip(i18n("Start timing for selected task"));
    actionStart->setWhatsThis(i18n("This will start timing for the selected task.\n"
                              "It is even possible to time several tasks simultaneously.\n\n"
                              "You may also start timing of a tasks by double clicking the left mouse "
                              "button on a given task. This will, however, stop timing of other tasks."));
  
    actionStop->setToolTip(i18n("Stop timing of the selected task"));
    actionStop->setWhatsThis(i18n("Stop timing of the selected task"));
  
    actionNew->setToolTip(i18n("Create new top level task"));
    actionNew->setWhatsThis(i18n("This will create a new top level task."));
  
    actionDelete->setToolTip(i18n("Delete selected task"));
    actionDelete->setWhatsThis(i18n("This will delete the selected task and all its subtasks."));
  
    actionEdit->setToolTip(i18n("Edit name or times for selected task"));
    actionEdit->setWhatsThis(i18n("This will bring up a dialog box where you may edit the parameters for the selected task."));
    slotSelectionChanged();
  }
  
  void KarmWindow::print()
  {
    MyPrinter printer(_karm);
    printer.print();
  }
  
  void KarmWindow::loadGeometry()
  {
    KConfig &config = *kapp->config();
  
    config.setGroup( QString::fromLatin1("Main Window Geometry") );
    int w = config.readNumEntry( QString::fromLatin1("Width"), 100 );
    int h = config.readNumEntry( QString::fromLatin1("Height"), 100 );
    w = QMAX( w, sizeHint().width() );
    h = QMAX( h, sizeHint().height() );
    resize(w, h);
  }
  
  
  void KarmWindow::saveGeometry()
  {
    KConfig &config = *KGlobal::config();
    config.setGroup( QString::fromLatin1("Main Window Geometry"));
    config.writeEntry( QString::fromLatin1("Width"), width());
    config.writeEntry( QString::fromLatin1("Height"), height());
    config.sync();
  }
  
  #include "top.moc"
  Index: ossp-pkg/titraq/top.h
  ============================================================
  $ cvs update -p -r1.1.1.1 top.h
  #ifndef KARM_TOP_H
  #define KARM_TOP_H
  
  #include <qmainwindow.h>
  
  class QPopupMenu;
  class Karm;
  class KAccel;
  class KAccelMenuWatch;
  class Preferences;
  class QTimer;
  
  class KarmWindow : public QMainWindow
  {
    Q_OBJECT
  
  private:
    KAccel		*_accel;
    KAccelMenuWatch	*_watcher;
    Karm		*_karm;
    long		_totalTime;
    Preferences *_preferences;
  
    public:
      KarmWindow();
      virtual ~KarmWindow();
  
    public slots:
  	void updateTime( long difference );
  
  protected slots:
    void keyBindings();
    void resetSessionTime(); 
    void updateTime();
    void updateStatusBar();
    void save();
    void quit();
    void print();
    void slotSelectionChanged();
  protected:
    virtual void saveProperties( QConfig* );
    void saveGeometry();
    void loadGeometry();
  
    private:
      void makeMenus();
      KDialogBase *dialog;
    KAction 
      *actionStart,
      *actionStop,
      *actionDelete,
      *actionEdit;
  
  };
  
  #endif
  
  
  Index: ossp-pkg/titraq/version.h
  ============================================================
  $ cvs update -p -r1.1.1.1 version.h
  
  #ifndef KARM_VERSION
  #define KARM_VERSION "1.2"
  #endif

From ossp-cvs-owner@ossp.org  Mon Oct 21 17:21:00 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A0E4D76512; Mon, 21 Oct 2002 17:21:00 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl ChangeLog README fsl_version.c
Message-Id: <20021021152100.A0E4D76512@mail.ossp.org>
Date: Mon, 21 Oct 2002 17:21:00 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   21-Oct-2002 17:21:00
  Branch: HEAD                             Handle: 2002102116210000

  Modified files:
    ossp-pkg/fsl            ChangeLog README fsl_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.12        +14 -0      ossp-pkg/fsl/ChangeLog
    1.25        +1  -1      ossp-pkg/fsl/README
    1.12        +9  -9      ossp-pkg/fsl/fsl_version.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/ChangeLog
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 ChangeLog
  --- ossp-pkg/fsl/ChangeLog	7 Sep 2002 20:12:24 -0000	1.11
  +++ ossp-pkg/fsl/ChangeLog	21 Oct 2002 15:21:00 -0000	1.12
  @@ -8,6 +8,20 @@
   
     CHANGELOG
   
  +  Changes between 1.0.4 and 1.0.5 (21-Oct-2002)
  +
  +    *) added support for Solaris 2.6
  +       [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +  Changes between 1.0.3 and 1.0.4 (07-Sep-2002 to 21-Oct-2002)
  +
  +    *) Fixed problem reported by martin.konold@erfrakon.de: In fsl's
  +       vsyslog() when handling delayed open and "If the log file is not
  +       writable by fsl the application using fsl segfaults." The error
  +       condition was checked and logged but operation unintentionally
  +       continued
  +       [Thomas Lotterer <thomas@lotterer.net>]
  +
     Changes between 1.0.2 and 1.0.3 (14-Aug-2002 to 07-Sep-2002)
   
       *) Fixed build procedure in PCRE part in order to get rid
  Index: ossp-pkg/fsl/README
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 README
  --- ossp-pkg/fsl/README	21 Oct 2002 12:51:23 -0000	1.24
  +++ ossp-pkg/fsl/README	21 Oct 2002 15:21:00 -0000	1.25
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_| |___/_|
    
     OSSP fsl - Faking/Flexible Syslog Library
  -  Version 1.0.4 (21-Oct-2002)
  +  Version 1.0.5 (21-Oct-2002)
   
     ABSTRACT
   
  Index: ossp-pkg/fsl/fsl_version.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 fsl_version.c
  --- ossp-pkg/fsl/fsl_version.c	21 Oct 2002 13:22:14 -0000	1.11
  +++ ossp-pkg/fsl/fsl_version.c	21 Oct 2002 15:21:00 -0000	1.12
  @@ -8,7 +8,7 @@
   #ifndef _FSL_VERSION_C_
   #define _FSL_VERSION_C_
   
  -#define FSL_VERSION 0x100204
  +#define FSL_VERSION 0x100205
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _FSL_VERSION_C_AS_HEADER_
   
   fsl_version_t fsl_version = {
  -    0x100204,
  -    "1.0.4",
  -    "1.0.4 (21-Oct-2002)",
  -    "This is OSSP fsl, Version 1.0.4 (21-Oct-2002)",
  -    "OSSP fsl 1.0.4 (21-Oct-2002)",
  -    "OSSP fsl/1.0.4",
  -    "@(#)OSSP fsl 1.0.4 (21-Oct-2002)",
  -    "$Id: fsl_version.c,v 1.11 2002/10/21 13:22:14 thl Exp $"
  +    0x100205,
  +    "1.0.5",
  +    "1.0.5 (21-Oct-2002)",
  +    "This is OSSP fsl, Version 1.0.5 (21-Oct-2002)",
  +    "OSSP fsl 1.0.5 (21-Oct-2002)",
  +    "OSSP fsl/1.0.5",
  +    "@(#)OSSP fsl 1.0.5 (21-Oct-2002)",
  +    "$Id: fsl_version.c,v 1.12 2002/10/21 15:21:00 thl Exp $"
   };
   
   #endif /* _FSL_VERSION_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Mon Oct 21 18:38:23 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7408C76534; Mon, 21 Oct 2002 18:38:23 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules shiela.msg
Message-Id: <20021021163823.7408C76534@mail.ossp.org>
Date: Mon, 21 Oct 2002 18:38:23 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: CVSROOT                          Date:   21-Oct-2002 18:38:23
  Branch: HEAD                             Handle: 2002102117382200

  Modified files:
    CVSROOT                 modules shiela.msg

  Log:
    Added OSSP titraq and removed redundant shiela message lines.

  Summary:
    Revision    Changes     Path
    1.61        +1  -0      CVSROOT/modules
    1.2         +0  -5      CVSROOT/shiela.msg
  ____________________________________________________________________________

  Index: CVSROOT/modules
  ============================================================
  $ cvs diff -u -r1.60 -r1.61 modules
  --- CVSROOT/modules	7 Oct 2002 13:49:51 -0000	1.60
  +++ CVSROOT/modules	21 Oct 2002 16:38:22 -0000	1.61
  @@ -90,6 +90,7 @@
   shiela          ossp-pkg/shiela
   shtool          ossp-pkg/shtool
   sugar           ossp-pkg/sugar
  +titraq          ossp-pkg/titraq
   
   #   the OSSP applications (third-party)
   cvs             ossp-pkg/cvs
  Index: CVSROOT/shiela.msg
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 shiela.msg
  --- CVSROOT/shiela.msg	13 Jun 2000 09:18:36 -0000	1.1
  +++ CVSROOT/shiela.msg	21 Oct 2002 16:38:22 -0000	1.2
  @@ -1,9 +1,4 @@
   
  -PR:
  -Submitted by:
  -Reviewed by:
  -Approved by:
  -Obtained from:
   CVS: ----------------------------------------------------------------------
   CVS: PR:            Fill this in if a problem report is affected
   CVS: Submitted by:  Fill this in if someone else sent you the change

From ossp-cvs-owner@ossp.org  Mon Oct 21 18:52:23 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3186276527; Mon, 21 Oct 2002 18:52:23 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq Makefile.in aclocal.m4 adddlg.cpp configur...
Message-Id: <20021021165223.3186276527@mail.ossp.org>
Date: Mon, 21 Oct 2002 18:52:23 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   21-Oct-2002 18:52:23
  Branch: HEAD                             Handle: 2002102117522101

  Modified files:
    ossp-pkg/titraq         Makefile.in aclocal.m4 adddlg.cpp configure.in
                            kaccelmenuwatch.cpp kaccelmenuwatch.h karm.cpp
                            main.cpp preferences.h titraq_version.c top.cpp
                            top.h

  Log:
    First KDE strips, and limited documentation changes.

  Summary:
    Revision    Changes     Path
    1.2         +4  -4      ossp-pkg/titraq/Makefile.in
    1.2         +1  -1      ossp-pkg/titraq/aclocal.m4
    1.2         +0  -0      ossp-pkg/titraq/adddlg.cpp
    1.2         +1  -1      ossp-pkg/titraq/configure.in
    1.2         +0  -0      ossp-pkg/titraq/kaccelmenuwatch.cpp
    1.2         +0  -0      ossp-pkg/titraq/kaccelmenuwatch.h
    1.2         +5  -6      ossp-pkg/titraq/karm.cpp
    1.2         +1  -1      ossp-pkg/titraq/main.cpp
    1.2         +3  -2      ossp-pkg/titraq/preferences.h
    1.2         +0  -0      ossp-pkg/titraq/titraq_version.c
    1.2         +1  -1      ossp-pkg/titraq/top.cpp
    1.2         +2  -3      ossp-pkg/titraq/top.h
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/Makefile.in
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 Makefile.in
  --- ossp-pkg/titraq/Makefile.in	21 Oct 2002 15:19:37 -0000	1.1.1.1
  +++ ossp-pkg/titraq/Makefile.in	21 Oct 2002 16:52:21 -0000	1.2
  @@ -25,7 +25,7 @@
   ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   ##  SUCH DAMAGE.
   ##
  -##  Makefile.in: Plain old documentation file
  +##  Makefile.in: Makefile for use with configure
   ##
   
   @SET_MAKE@
  @@ -67,12 +67,12 @@
   TARGET_PROGS    = titraq
   TARGET_MANS     = titraq.1 titraq.conf.5
   
  -SRCS            = main.cpp titraq.cpp titraq_version.c
  +SRCS            = main.cpp karm.cpp titraq_version.c
   
  -OBJS            = main.o titraq.o titraq_version.o
  +OBJS            = main.o karm.o titraq_version.o
   
   # Qt meta object compiler
  -MOC_IN          = titraq.h
  +MOC_IN          = karm.h
   MOC_OUT         = moc_titraq.cpp
   MOC_OBJ         = moc_titraq.o
   
  Index: ossp-pkg/titraq/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 aclocal.m4
  --- ossp-pkg/titraq/aclocal.m4	21 Oct 2002 15:19:37 -0000	1.1.1.1
  +++ ossp-pkg/titraq/aclocal.m4	21 Oct 2002 16:52:21 -0000	1.2
  @@ -25,7 +25,7 @@
   ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   ##  SUCH DAMAGE.
   ##
  -##  aclocal.m4: Plain old documentation file
  +##  aclocal.m4: Autoconf M4 macros
   ##
   
   
  Index: ossp-pkg/titraq/adddlg.cpp
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 adddlg.cpp
  --- ossp-pkg/titraq/adddlg.cpp	21 Oct 2002 15:19:37 -0000	1.1.1.1
  +++ ossp-pkg/titraq/adddlg.cpp	21 Oct 2002 16:52:21 -0000	1.2
  @@ -19,7 +19,7 @@
    *   along with this program; if not, write to the Free Software
    *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    *
  - * $Id: adddlg.cpp,v 1.1.1.1 2002/10/21 15:19:37 ms Exp $
  + * $Id: adddlg.cpp,v 1.2 2002/10/21 16:52:21 ms Exp $
    */
   #include <qlabel.h>
   #include <qlineedit.h>
  Index: ossp-pkg/titraq/configure.in
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 configure.in
  --- ossp-pkg/titraq/configure.in	21 Oct 2002 15:19:37 -0000	1.1.1.1
  +++ ossp-pkg/titraq/configure.in	21 Oct 2002 16:52:22 -0000	1.2
  @@ -25,7 +25,7 @@
   ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   ##  SUCH DAMAGE.
   ##
  -##  configure.in: Plain old documentation file
  +##  configure.in: Autoconf configure template
   ##
   
   dnl Version requirement and information
  Index: ossp-pkg/titraq/kaccelmenuwatch.cpp
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 kaccelmenuwatch.cpp
  --- ossp-pkg/titraq/kaccelmenuwatch.cpp	21 Oct 2002 15:19:37 -0000	1.1.1.1
  +++ ossp-pkg/titraq/kaccelmenuwatch.cpp	21 Oct 2002 16:52:22 -0000	1.2
  @@ -1,7 +1,7 @@
   /*
   * kaccelmenuwatch.cpp -- Implementation of class KAccelMenuWatch.
   * Author:	Sirtaj Singh Kang
  -* Version:	$Id: kaccelmenuwatch.cpp,v 1.1.1.1 2002/10/21 15:19:37 ms Exp $
  +* Version:	$Id: kaccelmenuwatch.cpp,v 1.2 2002/10/21 16:52:22 ms Exp $
   * Generated:	Thu Jan  7 15:05:26 EST 1999
   */
   
  Index: ossp-pkg/titraq/kaccelmenuwatch.h
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 kaccelmenuwatch.h
  --- ossp-pkg/titraq/kaccelmenuwatch.h	21 Oct 2002 15:19:37 -0000	1.1.1.1
  +++ ossp-pkg/titraq/kaccelmenuwatch.h	21 Oct 2002 16:52:22 -0000	1.2
  @@ -29,7 +29,7 @@
   * accelerators, as they are not activated till then.
   *
    @author Sirtaj Singh Kang (taj@kde.org)
  -* @version $Id: kaccelmenuwatch.h,v 1.1.1.1 2002/10/21 15:19:37 ms Exp $
  +* @version $Id: kaccelmenuwatch.h,v 1.2 2002/10/21 16:52:22 ms Exp $
   */
   class KAccelMenuWatch : public QObject
   {
  Index: ossp-pkg/titraq/karm.cpp
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 karm.cpp
  --- ossp-pkg/titraq/karm.cpp	21 Oct 2002 15:19:37 -0000	1.1.1.1
  +++ ossp-pkg/titraq/karm.cpp	21 Oct 2002 16:52:22 -0000	1.2
  @@ -10,12 +10,11 @@
   #include <qfile.h>
   #include <qtimer.h>
   
  -#include <kapplication.h>
  -#include <kconfig.h>
  -#include <klocale.h>
  -#include <kmenubar.h>
  -#include <ktoolbar.h>
  -#include <kmessagebox.h>
  +#include <qapplication.h>
  +#include <qconfig.h>
  +#include <qmenubar.h>
  +#include <qtoolbar.h>
  +#include <qmessagebox.h>
   
   #include "task.h"
   #include "karm.h"
  Index: ossp-pkg/titraq/main.cpp
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 main.cpp
  --- ossp-pkg/titraq/main.cpp	21 Oct 2002 15:19:37 -0000	1.1.1.1
  +++ ossp-pkg/titraq/main.cpp	21 Oct 2002 16:52:22 -0000	1.2
  @@ -1,6 +1,6 @@
   #include <qapplication.h>
   #include "version.h"
  -//#include "top.h"
  +#include "top.h"
   
   int main(int argc, char *argv[])
   {
  Index: ossp-pkg/titraq/preferences.h
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 preferences.h
  --- ossp-pkg/titraq/preferences.h	21 Oct 2002 15:19:37 -0000	1.1.1.1
  +++ ossp-pkg/titraq/preferences.h	21 Oct 2002 16:52:22 -0000	1.2
  @@ -1,14 +1,15 @@
   #ifndef __preferences_h
   #define __preferences_h
   
  -#include <kdialogbase.h>
  +#include <qdialog.h>
  +#include <qvbox.h>
   
   class QCheckBox;
   class QLabel;
   class QSpinBox;
   class KURLRequester;
   
  -class Preferences :public KDialogBase 
  +class Preferences :public QDialog
   {
   Q_OBJECT
   
  Index: ossp-pkg/titraq/titraq_version.c
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 titraq_version.c
  --- ossp-pkg/titraq/titraq_version.c	21 Oct 2002 15:19:37 -0000	1.1.1.1
  +++ ossp-pkg/titraq/titraq_version.c	21 Oct 2002 16:52:22 -0000	1.2
  @@ -39,7 +39,7 @@
       "OSSP titraq 0.1.0 (27-May-2002)",
       "OSSP titraq/0.1.0",
       "@(#)OSSP titraq 0.1.0 (27-May-2002)",
  -    "$Id: titraq_version.c,v 1.1.1.1 2002/10/21 15:19:37 ms Exp $"
  +    "$Id: titraq_version.c,v 1.2 2002/10/21 16:52:22 ms Exp $"
   };
   
   #endif /* _TITRAQ_VERSION_C_AS_HEADER_ */
  Index: ossp-pkg/titraq/top.cpp
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 top.cpp
  --- ossp-pkg/titraq/top.cpp	21 Oct 2002 15:19:37 -0000	1.1.1.1
  +++ ossp-pkg/titraq/top.cpp	21 Oct 2002 16:52:22 -0000	1.2
  @@ -5,7 +5,7 @@
   
   
   /*
  - * $Id: top.cpp,v 1.1.1.1 2002/10/21 15:19:37 ms Exp $
  + * $Id: top.cpp,v 1.2 2002/10/21 16:52:22 ms Exp $
    */
   
   #include "top.h"
  @@ -34,7 +34,7 @@
   #include "preferences.h"
   #include <kstatusbar.h>
   
  -KarmWindow::KarmWindow() : KMainWindow(0),
  +KarmWindow::KarmWindow() : QMainWindow(0),
   	_accel( new KAccel( this ) ),
   	_watcher( new KAccelMenuWatch( _accel, this ) ),
   	_karm( new Karm( this ) ),
  Index: ossp-pkg/titraq/top.h
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 top.h
  --- ossp-pkg/titraq/top.h	21 Oct 2002 15:19:37 -0000	1.1.1.1
  +++ ossp-pkg/titraq/top.h	21 Oct 2002 16:52:22 -0000	1.2
  @@ -38,14 +38,13 @@
     void print();
     void slotSelectionChanged();
   protected:
  -  virtual void saveProperties( QConfig* );
     void saveGeometry();
     void loadGeometry();
   
     private:
       void makeMenus();
  -    KDialogBase *dialog;
  -  KAction 
  +    QDialog *dialog;
  +  QObject 
       *actionStart,
       *actionStop,
       *actionDelete,

From ossp-cvs-owner@ossp.org  Tue Oct 22 14:57:21 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D9B9876A00; Tue, 22 Oct 2002 14:57:20 +0200 (CEST)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio.c sio.h sio_fd.c sio_module.h sio_null.c
Message-Id: <20021022125720.D9B9876A00@mail.ossp.org>
Date: Tue, 22 Oct 2002 14:57:20 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   22-Oct-2002 14:57:20
  Branch: HEAD                             Handle: 2002102213572000

  Added files:
    ossp-pkg/sio            sio.c sio.h sio_fd.c sio_module.h sio_null.c

  Log:
    initial commit

  Summary:
    Revision    Changes     Path
    1.1         +409 -0     ossp-pkg/sio/sio.c
    1.1         +74 -0      ossp-pkg/sio/sio.h
    1.1         +160 -0     ossp-pkg/sio/sio_fd.c
    1.1         +11 -0      ossp-pkg/sio/sio_module.h
    1.1         +99 -0      ossp-pkg/sio/sio_null.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio.c
  ============================================================
  $ cvs update -p -r1.1 sio.c
  /*
  **  OSSP sio -- stream I/O
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  **
  **  This file is part of OSSP sio, a library implementing layered I/O 
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  sio.c: stream I/O library implementation
  */
  
  #include <stddef.h>
  #include <stdlib.h>
  
  #include "al.h"
  #include "sio.h"
  #include "sio_module.h"
  #include "list.h"
  
  /****************************************************************************/
  
  /* unique library identifier */
  const char sio_id[] = "OSSP sio";
  
  /* support for OSSP ex based exception throwing */
  #ifdef WITH_EX
  #include "ex.h"
  #define SIO_RC(rv) \
      (  (rv) != SIO_OK && (ex_catching && !ex_shielding) \
           ? (ex_throw(sio_id, NULL, (rv)), (rv)) : (rv) )
  #else
  #define SIO_RC(rv) (rv)
  #endif /* WITH_EX */
  
  
  struct sio_halfduplex_st;
  typedef struct sio_halfduplex_st sio_halfduplex_t;
  struct sio_halfduplex_st {
      NODE(sio_halfduplex_t) hd;
      sio_stage_t *stage;
      sio_rc_t (*func)(sio_t *, al_t *, void *);
  };
  
  struct sio_st {
      struct {
          LIST(sio_halfduplex_t) hd;
          al_t                   *al;
      } readers;
      struct {
          LIST(sio_halfduplex_t) hd;
          al_t                   *al;
      } writers;
  };
  
  struct sio_stage_st {
      sio_halfduplex_t reader;
      sio_halfduplex_t writer;
      void *userdata;
      sio_module_t *module;
      sio_mode_t rw;
  };
  
  /****************************************************************************/
  
  static
  sio_rc_t sio_strategy(sio_t *sio, sio_halfduplex_t *chain, al_t *al)
  {
      sio_rc_t rc;
      sio_halfduplex_t *h;
  
      h = chain;
      while (h != NULL) {
          rc = h->func(sio, al, h->stage->userdata);
          if (rc == SIO_UPSTREAM)
              h = NEXT(h,hd);
          else if (rc == SIO_DOWNSTREAM)
              h = NEXT(h,hd);
          else
              break;
      }
  
      return SIO_OK;
  }
  
  /**************************************************************************/
  
  sio_rc_t sio_create(sio_t **siop)
  {
      sio_t *sio;
  
      /* argument sanity check(s) */
      if (siop == NULL)
          return SIO_RC(SIO_ERR_ARG);
  
      sio = (sio_t *)malloc(sizeof(sio_t));
      if (sio == NULL)
          return SIO_RC(SIO_ERR_MEM);
  
      LISTINIT(&sio->readers,hd);
      LISTINIT(&sio->writers,hd);
  
      *siop = sio;
  
      return SIO_OK;
  }
  
  sio_rc_t sio_destroy(sio_t *sio)
  {
      /* argument sanity check(s) */
      if (sio == NULL)
          return SIO_RC(SIO_ERR_ARG);
  
      free(sio);
  
      return SIO_OK;
  }
  
  sio_rc_t sio_create_stage(sio_t *sio, sio_module_t *siom, sio_stage_t **siosp)
  {
      sio_rc_t rc;
      sio_stage_t *sios;
      void *u;
  
      /* argument sanity check(s) */
      if (sio == NULL || siom == NULL || siosp == NULL)
          return SIO_RC(SIO_ERR_ARG);
  
      sios = (sio_stage_t *)malloc(sizeof(sio_stage_t));
      if (sios == NULL)
          return SIO_RC(SIO_ERR_MEM);
  
      NODEINIT(&sios->reader,hd);
      NODEINIT(&sios->writer,hd);
      sios->module       = siom;
      sios->userdata     = u;
      sios->rw           = SIO_MODE_INVALID;
      sios->reader.func  = siom->input;
      sios->reader.stage = sios;
      sios->writer.func  = siom->output;
      sios->writer.stage = sios;
  
      rc = sios->module->init(sio, sios->userdata);
  
      return SIO_RC(rc);
  }
  
  sio_rc_t sio_cofigure_stage(sio_t *sio, sio_stage_t *sios, void *obj, void *value)
  {
      sio_rc_t rc;
  
      /* argument sanity check(s) */
      if (sio == NULL || sios == NULL)
          return SIO_RC(SIO_ERR_ARG);
  
      rc = sios->module->configure(sio, sios->userdata, obj, value);
  
      return SIO_RC(rc);
  }
  
  sio_rc_t sio_destroy_stage(sio_t *sio, sio_stage_t *sios)
  {
      sio_rc_t rc;
  
      /* argument sanity check(s) */
      if (sio == NULL || sios == NULL)
          return SIO_RC(SIO_ERR_ARG);
  
      rc = sios->module->cleanup(sio, sios->userdata);
      free(sios);
  
      return SIO_OK;
  }
  
  sio_rc_t sio_attach(sio_t *sio, sio_stage_t *sios, sio_mode_t rw)
  {
      sio_rc_t rc;
  
      /* argument sanity check(s) */
      if (sio == NULL || sios == NULL)
          return SIO_RC(SIO_ERR_ARG);
  
      /* is module already attached ? */
      if (sios->rw != SIO_MODE_INVALID)
          return SIO_RC(SIO_ERR_ARG);
  
      /* prepare module for being attached */
      rc = sios->module->open(sio, sios->userdata);
      if (rc != SIO_OK) return SIO_RC(rc);
  
      switch (rw) {
      case SIO_MODE_READ:
          ADDTAIL(&sio->readers,hd,&sios->reader);
          break;
      case SIO_MODE_WRITE:
          ADDTAIL(&sio->writers,hd,&sios->writer);
          break;
      case SIO_MODE_READWRITE:
          ADDTAIL(&sio->readers,hd,&sios->reader);
          ADDTAIL(&sio->writers,hd,&sios->writer);
          break;
      default:
          return SIO_RC(SIO_ERR_ARG);
      }
  
      /* Remember the lists that sios has been attached to */
      sios->rw = rw;
  
      return SIO_OK;
  }
  
  sio_rc_t sio_detach(sio_t *sio, sio_stage_t *sios)
  {
      sio_rc_t rc;
  
      /* argument sanity check(s) */
      if (sio == NULL || sios == NULL)
          return SIO_RC(SIO_ERR_ARG);
  
      switch (sios->rw) {
      case SIO_MODE_READ:
          REMOVE(&sio->readers,hd,&sios->reader);
          break;
      case SIO_MODE_WRITE:
          REMOVE(&sio->writers,hd,&sios->writer);
          break;
      case SIO_MODE_READWRITE:
          REMOVE(&sio->readers,hd,&sios->reader);
          REMOVE(&sio->writers,hd,&sios->writer);
          break;
      default:
          return SIO_RC(SIO_ERR_ARG);
          break;
      }
  
      rc = sios->module->close(sio, sios->userdata);
  
      return SIO_RC(rc);
  }
  
  sio_rc_t sio_input(sio_t *sio, al_t *al, size_t limit)
  {
      sio_rc_t rc;
      al_t *src = sio->readers.al;
      size_t n;
  
      /* argument sanity check(s) */
      if (sio == NULL || al == NULL)
          return SIO_RC(SIO_ERR_ARG);
  
      n = al_bytes(src);
      if (n == 0) {
  
          rc = sio_strategy(sio, HEAD(&sio->readers,hd), src);
          if (rc != SIO_OK) return SIO_RC(rc);
  
          n = al_bytes(src);
          if (n == 0)
              return SIO_RC(SIO_ERR_EOF);
  
      }
  
      if (n > limit)
          n = limit;
  
      (void) al_splice(src, 0, n, NULL, al); /* XXX - error handling ? */
  
      return SIO_OK;
  }
  
  sio_rc_t sio_discard(sio_t *sio)
  {
      sio_rc_t rc;
      al_t *src = sio->readers.al;
      size_t n;
  
      /* argument sanity check(s) */
      if (sio == NULL)
          return SIO_RC(SIO_ERR_ARG);
  
      while ((n = al_bytes(src)) > 0) {
          rc = sio_strategy(sio, HEAD(&sio->readers,hd), src);
          if (rc != SIO_OK)
              break;
      }
  
      if (rc == SIO_ERR_EOF)
          return SIO_OK;
  
      return SIO_RC(rc);
  }
  
  sio_rc_t sio_output(sio_t *sio, al_t *al)
  {
      sio_rc_t rc;
      al_t *dst = sio->writers.al;
      size_t n;
  
      /* argument sanity check(s) */
      if (sio == NULL || al == NULL)
          return SIO_RC(SIO_ERR_ARG);
  
      n = al_bytes(dst);
      al_splice(dst, n, 0, al, NULL);
  
      rc = sio_strategy(sio, HEAD(&sio->writers,hd), dst);
  
      return SIO_RC(rc);
  }
  
  sio_rc_t sio_flush(sio_t *sio)
  {
      sio_rc_t rc;
      al_t *dst = sio->writers.al;
      size_t n;
  
      /* argument sanity check(s) */
      if (sio == NULL)
          return SIO_RC(SIO_ERR_ARG);
  
      while ((n = al_bytes(dst)) > 0) {
          rc = sio_strategy(sio, HEAD(&sio->writers,hd), sio->writers.al);
          if (rc != SIO_OK)
              break;
      }
  
      return SIO_RC(rc);
  }
  
  sio_rc_t sio_read(sio_t *sio, char *dst, size_t n, size_t *actualp)
  {
      al_rc_t arc;
      sio_rc_t rc;
      al_t *al;
  
      arc = al_create(&al);
      if (arc != AL_OK) return SIO_RC(SIO_ERR_INT);
  
      rc = sio_input(sio, al, n);
      if (rc == AL_OK) {
          arc = al_flatten(al, 0, n, dst, actualp);
          if (arc != AL_OK)
              rc = SIO_ERR_INT;
      }
  
      arc = al_destroy(al);
      if (arc != AL_OK) return SIO_RC(SIO_ERR_INT);
  
      return SIO_RC(rc);
  }
  
  sio_rc_t sio_write(sio_t *sio, char *src, size_t n, size_t *actualp)
  {
      al_rc_t arc;
      sio_rc_t rc;
      al_t *al;
  
      arc = al_create(&al);
      if (arc != AL_OK) return SIO_RC(SIO_ERR_INT);
  
      arc = al_append_bytes(al, src, n);
      if (arc != AL_OK)
          rc = SIO_ERR_INT;
      else
          rc = sio_output(sio, al);
  
      arc = al_destroy(al);
      if (arc != AL_OK) return SIO_RC(SIO_ERR_INT);
  
      return SIO_RC(rc);
  }
  
  const char *sio_error(sio_rc_t rc)
  {
      const char *mess;
  
      switch (rc) {
      case SIO_OK:         mess = "Everything Ok"; break;
      case SIO_ERR_ARG:    mess = "Invalid Argument"; break;
      case SIO_ERR_MEM:    mess = "Not Enough Memory"; break;
      case SIO_ERR_EOF:    mess = "End Of Data"; break;
      case SIO_ERR_SYS:    mess = "Operating System Error"; break;
      case SIO_ERR_INT:    mess = "Internal Error"; break;
      case SIO_UPSTREAM:   mess = "Invoke Upstream Stage"; break;
      case SIO_DOWNSTREAM: mess = "Invoke Downstream Stage"; break;
      default:             mess = "Invalid Result Code"; break;
      }
  
      return mess;
  }
  
  Index: ossp-pkg/sio/sio.h
  ============================================================
  $ cvs update -p -r1.1 sio.h
  /*
  **  OSSP sio -- Stream I/O
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  **
  **  This file is part of OSSP sio, a library implementing layered I/O
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  sio.h: stream I/O public API definition
  */
  
  typedef enum {
      SIO_OK,
      SIO_ERR_ARG,
      SIO_ERR_MEM,
      SIO_ERR_EOF,
      SIO_ERR_SYS,
      SIO_ERR_INT,
      SIO_UPSTREAM,
      SIO_DOWNSTREAM
  } sio_rc_t;
  
  typedef enum {
      SIO_MODE_INVALID,
      SIO_MODE_READ,
      SIO_MODE_WRITE,
      SIO_MODE_READWRITE
  } sio_mode_t;
  
  struct sio_st;
  typedef struct sio_st sio_t;
  
  struct sio_stage_st;
  typedef struct sio_stage_st sio_stage_t;
  
  struct sio_module_st;
  typedef struct sio_module_st sio_module_t;
  
  sio_rc_t sio_create(sio_t **siop);
  sio_rc_t sio_destroy(sio_t *sio);
  
  sio_rc_t sio_create_stage(sio_t *sio, sio_module_t *sioh, sio_stage_t **siosp);
  sio_rc_t sio_destroy_stage(sio_t *sio, sio_stage_t *sios);
  sio_rc_t sio_configure_stage(sio_t *sio, sio_stage_t *sios, void *o, void *v);
  
  sio_rc_t sio_attach(sio_t *sio, sio_stage_t *sios, sio_mode_t rw);
  sio_rc_t sio_detach(sio_t *sio, sio_stage_t *sios);
  
  sio_rc_t sio_input(sio_t *sio, al_t *al, size_t limit);
  sio_rc_t sio_output(sio_t *sio, al_t *al);
  
  sio_rc_t sio_read(sio_t *sio, char *dst, size_t n, size_t *actualp);
  sio_rc_t sio_write(sio_t *sio, char *src, size_t n, size_t *actualp);
  
  const char *sio_error(sio_rc_t rc);
  Index: ossp-pkg/sio/sio_fd.c
  ============================================================
  $ cvs update -p -r1.1 sio_fd.c
  #include <stddef.h>
  #include <stdlib.h>
  #include <string.h>
  #include <sys/types.h>
  #include <sys/uio.h>
  #include <unistd.h>
  
  #include "al.h"
  #include "sio.h"
  #include "sio_module.h"
  
  typedef struct {
      int fd;
      size_t buflen;
      char *buf;
      size_t actual;
  } private_t;
  
  /*
   * create stage
   *
   * allocate private instance data
   */
  static
  sio_rc_t fd_init(sio_t *sio, void **u)
  {
      private_t *mydata;
      
      mydata = (private_t *)malloc(sizeof(private_t));
      if (mydata == NULL)
          return SIO_ERR_MEM;
  
      mydata->fd     = -1;
      mydata->buflen = 0;
      mydata->buf    = NULL;
  
      *u = mydata;
  
      return SIO_OK;
  }
  
  /*
   * configure stage
   *
   */
  static
  sio_rc_t fd_configure(sio_t *sio, void *u, void *obj, void *value)
  {
      private_t *mydata = (private_t *)u;
      const char *name = (const char *)obj;
      char *newbuf;
  
      if (!strcmp(name, "fd")) {
          mydata->fd = *(int *)value;
      } else if (!strcmp(name, "buflen")) {
          mydata->buflen = *(int *)value;
          newbuf = realloc(mydata->buf, mydata->buflen);
          if (newbuf == NULL)
              return SIO_ERR_MEM;
          mydata->buf = newbuf;
      } else {
          return SIO_ERR_ARG;
      }
  
      return SIO_OK;
  }
  
  /*
   * destroy stage
   */
  static
  sio_rc_t fd_cleanup(sio_t *sio, void *u)
  {
      private_t *mydata = (private_t *)u;
  
      if (mydata->buf) free(mydata->buf);
      free(mydata);
  
      return SIO_OK;
  }
  
  static
  sio_rc_t fd_open(sio_t *sio, void *u)
  {
      return SIO_OK;
  }
  
  static
  sio_rc_t fd_close(sio_t *sio, void *u)
  {
      return SIO_OK;
  }
  
  static
  sio_rc_t fd_input(sio_t *sio, al_t *al, void *u)
  {
      private_t *mydata = (private_t *)u;
      size_t actual;
  
      if (mydata->buf == NULL)
          return SIO_ERR_ARG;
  
      actual = read(mydata->fd, mydata->buf, mydata->buflen);
      if (actual < 0)
          return SIO_ERR_SYS;
  
      al_append_bytes(al, mydata->buf, actual);
  
      return SIO_OK;
  }
  
  static
  al_rc_t fd_output_chunk(al_chunk_t *alc, void *u)
  {
      private_t *mydata = (private_t *)u;
      char   *p;
      size_t n, actual;
  
      p = al_chunk_ptr(alc, 0);
      n = al_chunk_len(alc);
  
      actual = write(mydata->fd, p, n);
      if (actual < 0)
          return AL_ERR_EOF;
  
      mydata->actual += actual;
  
      return AL_OK;
  }
  
  static
  sio_rc_t fd_output(sio_t *sio, al_t *al, void *u)
  {
      private_t *mydata = (private_t *)u;
      al_rc_t arc;
      size_t n = al_bytes(al);
  
      mydata->actual = 0;
  
      arc = al_traverse_cb(al, 0, n, AL_FORWARD, fd_output_chunk, u);
      if (arc != AL_OK) return SIO_ERR_INT;
  
      arc = al_splice(al, 0, mydata->actual, NULL, NULL);
      if (arc != AL_OK) return SIO_ERR_INT;
  
      return SIO_OK;
  }
  
  sio_module_t sio_fd_module = {
      "fd",
      fd_init,
      fd_configure,
      fd_cleanup,
      fd_open,
      fd_close,
      fd_input,
      fd_output
  };
  
  
  Index: ossp-pkg/sio/sio_module.h
  ============================================================
  $ cvs update -p -r1.1 sio_module.h
  struct sio_module_st {
      const char *name;
      sio_rc_t (*init)      (sio_t *, void **);
      sio_rc_t (*configure) (sio_t *, void *, void *, void *);
      sio_rc_t (*cleanup)   (sio_t *, void *);
      sio_rc_t (*open)      (sio_t *, void *);
      sio_rc_t (*close)     (sio_t *, void *);
      sio_rc_t (*input)     (sio_t *, al_t *, void *);
      sio_rc_t (*output)    (sio_t *, al_t *, void *);
  };
  
  Index: ossp-pkg/sio/sio_null.c
  ============================================================
  $ cvs update -p -r1.1 sio_null.c
  #include <stddef.h>
  #include <stdlib.h>
  
  #include "al.h"
  #include "sio.h"
  #include "sio_module.h"
  
  typedef struct {
      int a;
      float b;
      char *c;
  } private_t;
  
  /*
   * create stage
   *
   * allocate private instance data
   */
  static
  sio_rc_t null_init(sio_t *sio, void **u)
  {
      private_t *mydata;
      
      mydata = (private_t *)malloc(sizeof(private_t));
      if (mydata == NULL)
          return SIO_ERR_MEM;
  
      mydata->a = 42;
      mydata->b = 42.0;
      mydata->c = "42";
  
      *u = mydata;
  
      return SIO_OK;
  }
  
  /*
   * configure stage
   *
   * pass two void pointers
   */
  static
  sio_rc_t null_configure(sio_t *sio, void *u, void *obj, void *val)
  {
      private_t *mydata = (private_t *)u;
  
      mydata->a = *(int *)val;
  
      return SIO_OK;
  }
  
  /*
   * destroy stage
   */
  static
  sio_rc_t null_cleanup(sio_t *sio, void *u)
  {
      private_t *mydata = (private_t *)u;
  
      free(mydata);
  
      return SIO_OK;
  }
  
  static
  sio_rc_t null_open(sio_t *sio, void *u)
  {
      return SIO_OK;
  }
  
  static
  sio_rc_t null_close(sio_t *sio, void *u)
  {
      return SIO_OK;
  }
  
  static
  sio_rc_t null_input(sio_t *sio, al_t *al, void *u)
  {
      return SIO_OK;
  }
  
  static
  sio_rc_t null_output(sio_t *sio, al_t *al, void *u)
  {
      return SIO_OK;
  }
  
  sio_module_t sio_null_module = {
      "null",
      null_init,
      null_configure,
      null_cleanup,
      null_open,
      null_close,
      null_input,
      null_output
  };
  

From ossp-cvs-owner@ossp.org  Tue Oct 22 15:01:36 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CAB6676527; Tue, 22 Oct 2002 15:01:35 +0200 (CEST)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio BRAINSTORM.txt
Message-Id: <20021022130135.CAB6676527@mail.ossp.org>
Date: Tue, 22 Oct 2002 15:01:35 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   22-Oct-2002 15:01:35
  Branch: HEAD                             Handle: 2002102214013500

  Modified files:
    ossp-pkg/sio            BRAINSTORM.txt

  Log:
    ideas for error/eof/urgent-data handling

  Summary:
    Revision    Changes     Path
    1.3         +19 -0      ossp-pkg/sio/BRAINSTORM.txt
  ____________________________________________________________________________

  Index: ossp-pkg/sio/BRAINSTORM.txt
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 BRAINSTORM.txt
  --- ossp-pkg/sio/BRAINSTORM.txt	14 Oct 2002 08:05:49 -0000	1.2
  +++ ossp-pkg/sio/BRAINSTORM.txt	22 Oct 2002 13:01:35 -0000	1.3
  @@ -363,3 +363,22 @@
   EOF handling
   
   
  +###########################################################################
  +
  +mlelstv sez:
  +
  +ideas for error/eof/urgent-data handling
  +
  +-> multiple assembly lines per stream
  +   - too big ?
  +   - synchronization between "bands" required
  +
  +-> "urgent" pointer similar to TCP ?
  +   + trivial implementation
  +   - only single condition for multiple causes
  +
  +-> in-band multiplexing of labeled streams
  +   + synchonization is implicit
  +   + any number of conditions
  +   - needs support in AL (coalescing/merging)
  +

From ossp-cvs-owner@ossp.org  Tue Oct 22 17:09:45 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5F76476527; Tue, 22 Oct 2002 17:09:45 +0200 (CEST)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.c
Message-Id: <20021022150945.5F76476527@mail.ossp.org>
Date: Tue, 22 Oct 2002 17:09:45 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   22-Oct-2002 17:09:45
  Branch: HEAD                             Handle: 2002102216094400

  Modified files:
    ossp-pkg/sio            al.c

  Log:
    prepend used wrong macros (cut&paste error)
    traverse_next didn't compute step correctly and didn't clear skip
    from initial seek when moving to next/previous chunk

  Summary:
    Revision    Changes     Path
    1.28        +6  -5      ossp-pkg/sio/al.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.c
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 al.c
  --- ossp-pkg/sio/al.c	18 Oct 2002 14:12:11 -0000	1.27
  +++ ossp-pkg/sio/al.c	22 Oct 2002 15:09:44 -0000	1.28
  @@ -533,9 +533,9 @@
               step = res;
   
           src -= step;
  -        AL_RESIZE(al, cur, step);
  +        AL_PRESIZE(al, cur, step);
           n   -= step;
  -        res = AL_CHUNK_RESERVE(cur);
  +        res = AL_CHUNK_PRESERVE(cur);
   
           dst = AL_CHUNK_PTR(cur, 0);
           memcpy(dst, src, step);
  @@ -836,9 +836,8 @@
       if (tx->cur == NULL)   /* premature EOF */
           return AL_ERR_EOF;
   
  -    step = AL_CHUNK_LEN(tx->cur);
  -    if (step > tx->togo)
  -        step = tx->togo;
  +    /* compute number of bytes to process */
  +    step = AL_CHUNK_SPAN(tx->cur, tx->skip, tx->togo);
   
       /*
        * synthetic chunk which is NOT maintained in usecount
  @@ -855,10 +854,12 @@
           case AL_FORWARD:
               tx->cur   = NEXT(tx->cur,chunks);
               tx->togo -= step;
  +            tx->skip  = 0;
               break;
           case AL_BACKWARD:
               tx->cur   = PREV(tx->cur,chunks);
               tx->togo -= step;
  +            tx->skip  = 0;
               break;
       }
   

From ossp-cvs-owner@ossp.org  Tue Oct 22 17:33:17 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7100476527; Tue, 22 Oct 2002 17:33:17 +0200 (CEST)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.c al.h al.pod al_test.c
Message-Id: <20021022153317.7100476527@mail.ossp.org>
Date: Tue, 22 Oct 2002 17:33:17 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   22-Oct-2002 17:33:17
  Branch: HEAD                             Handle: 2002102216331600

  Modified files:
    ossp-pkg/sio            al.c al.h al.pod al_test.c

  Log:
    significant API change.
    now support data labels.

  Summary:
    Revision    Changes     Path
    1.29        +102 -61    ossp-pkg/sio/al.c
    1.13        +16 -12     ossp-pkg/sio/al.h
    1.11        +44 -18     ossp-pkg/sio/al.pod
    1.14        +21 -13     ossp-pkg/sio/al_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.c
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 al.c
  --- ossp-pkg/sio/al.c	22 Oct 2002 15:09:44 -0000	1.28
  +++ ossp-pkg/sio/al.c	22 Oct 2002 15:33:16 -0000	1.29
  @@ -76,6 +76,7 @@
       al_buffer_t      *buf;             /* (non-exlusively) referenced buffer object */
       size_t            begin;           /* offset into buf->mem where data starts */
       size_t            end;             /* offset into buf->mem where data ends */
  +    al_label_t        label;           /* tag data with a label, chunks with distinct labels are not coalesced */
   };
   
   struct al_buffer_st {
  @@ -91,6 +92,7 @@
       al_chunk_t       *cur;             /* current chunk during traveral steps */
       size_t            skip;            /* number of bytes to skip for traversal */
       size_t            togo;            /* number of bytes left for traversal */
  +    al_label_t        label;           /* label filter or NULL */
       al_chunk_t        view;            /* synthetic chunk for returning during traversal steps */
   };
   
  @@ -107,14 +109,22 @@
       ((n) > (AL_CHUNK_LEN(alc) - (off)) ? \
       (AL_CHUNK_LEN(alc) - (off)) : (n))
   
  +/* return chunk label */
  +#define AL_CHUNK_LABEL(alc) \
  +    ((alc)->label)
  +
  +/* check wether labels match */
  +#define AL_SAME_LABEL(alc,label) \
  +    ((label) == NULL || AL_CHUNK_LABEL(alc) == (label))
  +
   /*
    * number of bytes a chunk can be grown to the end
    * we must not grow a chunk in a shared buffer since
    * we do not track other chunks sharing the buffer
    */
  -#define AL_CHUNK_RESERVE(alc) \
  +#define AL_CHUNK_RESERVE(alc,label) \
       (  (alc) != NULL \
  -     ? (  (alc)->buf->usecount > 1 \
  +     ? (  (alc)->buf->usecount > 1 || !AL_SAME_LABEL(alc,label) \
           ? 0 \
           : (alc)->buf->size - (alc)->end) \
        : 0)
  @@ -128,9 +138,9 @@
    * we must not grow a chunk in a shared buffer since
    * we do not track other chunks sharing the buffer
    */
  -#define AL_CHUNK_PRESERVE(alc) \
  +#define AL_CHUNK_PRESERVE(alc,label) \
       ( (alc) != NULL \
  -     ? (  (alc)->buf->usecount > 1 \
  +     ? (  (alc)->buf->usecount > 1 || !AL_SAME_LABEL(alc,label) \
           ? 0 \
           : (alc)->begin) \
        : 0)
  @@ -230,7 +240,7 @@
   static int alc_freecount = 0;
   
   static al_rc_t
  -new_chunk(al_t *al, al_buffer_t *buf, al_chunk_t **alcp)
  +new_chunk(al_t *al, al_buffer_t *buf, al_label_t label, al_chunk_t **alcp)
   {
       al_chunk_t *alc;
   
  @@ -254,6 +264,7 @@
       alc->buf   = buf;
       alc->begin = 0;
       alc->end   = 0;
  +    alc->label = label;
   
       buf->usecount++;
   
  @@ -271,7 +282,7 @@
       if (off < 0 || off > len)
           return AL_ERR_ARG;
   
  -    rc = new_chunk(al, orig->buf, &alc);
  +    rc = new_chunk(al, orig->buf, orig->label, &alc);
       if (rc != AL_OK)
           return rc;
   
  @@ -290,6 +301,7 @@
       if (alc->buf->usecount == 0)
           dispose_buffer(al,alc->buf);
       alc->buf = NULL;
  +    alc->label = NULL;
   
       /* stop freelist from growing infinitely */
       if (alc_freecount >= al->m.max_freechunks)
  @@ -369,8 +381,9 @@
       printf("AL: %p\n", al);
       total = 0;
       FOREACH(al,chunks,cur) {
  -        printf(" C: %p (%d @ %p + %d < %d (use=%d))\n",
  +        printf(" C: %p [%p] (%d @ %p + %d < %d (use=%d))\n",
               cur,
  +            cur->label,
               cur->buf->size,cur->buf->mem,
               cur->begin,cur->end,
               cur->buf->usecount);
  @@ -451,7 +464,7 @@
    * but leaves data structure consistent
    */
   al_rc_t
  -al_append_bytes(al_t *al, const char *src, size_t n)
  +al_append_bytes(al_t *al, const char *src, size_t n, al_label_t label)
   {
       al_rc_t rc;
       al_chunk_t *cur;
  @@ -464,17 +477,17 @@
           return AL_RC(AL_ERR_ARG);
   
       cur = TAIL(al,chunks);
  -    res = AL_CHUNK_RESERVE(cur);
  +    res = AL_CHUNK_RESERVE(cur,label);
   
       while (n > 0) {
           if (res == 0) {
               rc = new_buffer(al, &buf);
               if (rc != AL_OK)
                   return AL_RC(rc);
  -            rc = new_chunk(al,buf,&cur);
  +            rc = new_chunk(al,buf,label,&cur);
               if (rc != AL_OK)
                   return AL_RC(rc);
  -            res = AL_CHUNK_RESERVE(cur);
  +            res = AL_CHUNK_RESERVE(cur,label);
               ADDTAIL(al, chunks, cur);
           }
           step = n;
  @@ -487,7 +500,7 @@
           src += step;
           AL_RESIZE(al, cur, step);
           n   -= step;
  -        res = AL_CHUNK_RESERVE(cur);
  +        res = AL_CHUNK_RESERVE(cur,label);
       }
   
       return AL_OK;
  @@ -500,7 +513,7 @@
    * but leaves data structure consistent
    */
   al_rc_t
  -al_prepend_bytes(al_t *al, const char *src, size_t n)
  +al_prepend_bytes(al_t *al, const char *src, size_t n, al_label_t label)
   {
       al_rc_t rc;
       al_chunk_t *cur;
  @@ -513,7 +526,7 @@
           return AL_RC(AL_ERR_ARG);
   
       cur = HEAD(al,chunks);
  -    res = AL_CHUNK_PRESERVE(cur);
  +    res = AL_CHUNK_PRESERVE(cur,label);
   
       src += n;
   
  @@ -522,10 +535,10 @@
               rc = new_buffer(al, &buf);
               if (rc != AL_OK)
                   return AL_RC(rc);
  -            rc = new_chunk(al,buf,&cur);
  +            rc = new_chunk(al,buf,label,&cur);
               if (rc != AL_OK)
                   return AL_RC(rc);
  -            res = AL_CHUNK_PRESERVE(cur);
  +            res = AL_CHUNK_PRESERVE(cur,label);
               ADDHEAD(al, chunks, cur);
           }
           step = n;
  @@ -535,7 +548,7 @@
           src -= step;
           AL_PRESIZE(al, cur, step);
           n   -= step;
  -        res = AL_CHUNK_PRESERVE(cur);
  +        res = AL_CHUNK_PRESERVE(cur,label);
   
           dst = AL_CHUNK_PTR(cur, 0);
           memcpy(dst, src, step);
  @@ -552,7 +565,8 @@
    * XXX - some list operations modify the buffer
    *
    */
  -al_rc_t al_attach_buffer(al_t *al, char *p, size_t n, void (*freemem)(char *, size_t, void *), void *u)
  +al_rc_t al_attach_buffer(al_t *al, char *p, size_t n, al_label_t label,
  +                         void (*freemem)(char *, size_t, void *), void *u)
   {
       al_rc_t rc;
       al_buffer_t *buf;
  @@ -565,7 +579,7 @@
       rc = make_buffer(al, p, n, freemem, u, &buf);
       if (rc != AL_OK)
           return AL_RC(rc);
  -    rc = new_chunk(al,buf, &cur);
  +    rc = new_chunk(al,buf,label,&cur);
       if (rc != AL_OK)
           return AL_RC(rc);
       ADDTAIL(al, chunks, cur);
  @@ -672,7 +686,8 @@
                    */
                   size_t before = tal->bytes;
   
  -                rc = al_append_bytes(tal, AL_CHUNK_PTR(cur, skip), step);
  +                rc = al_append_bytes(tal, AL_CHUNK_PTR(cur, skip),
  +                                     step, AL_CHUNK_LABEL(cur));
                   if (rc != AL_OK)
                       /* correct step size to actual size */
                       step = tal->bytes - before;
  @@ -802,7 +817,7 @@
    * - save traversal parameters
    */
   al_rc_t
  -al_traverse(al_t *al, size_t off, size_t n, al_td_t dir, al_tx_t *tx)
  +al_traverse(al_t *al, size_t off, size_t n, al_td_t dir, al_label_t label, al_tx_t *tx)
   {
       al_rc_t rc;
   
  @@ -812,8 +827,9 @@
       if (rc != AL_OK)
           return AL_RC(rc);
   
  -    tx->dir  = dir;
  -    tx->togo = n;
  +    tx->dir   = dir;
  +    tx->togo  = n;
  +    tx->label = label;
   
       return AL_OK;
   }
  @@ -830,38 +846,40 @@
   {
       size_t step;
   
  -    if (tx->togo <= 0)     /* XXX - togo can be negative from bad input */
  -        return AL_ERR_EOF;
  +    do {
  +        if (tx->togo <= 0)     /* XXX - togo can be negative from bad input */
  +            return AL_ERR_EOF;
   
  -    if (tx->cur == NULL)   /* premature EOF */
  -        return AL_ERR_EOF;
  +        if (tx->cur == NULL)   /* premature EOF */
  +            return AL_ERR_EOF;
   
  -    /* compute number of bytes to process */
  -    step = AL_CHUNK_SPAN(tx->cur, tx->skip, tx->togo);
  +        /* compute number of bytes to process */
  +        step = AL_CHUNK_SPAN(tx->cur, tx->skip, tx->togo);
   
  -    /*
  -     * synthetic chunk which is NOT maintained in usecount
  -     * MUST NOT BE USED for modifications to chunk list
  -     * MUST NOT BE USED for modifications to chunk size
  -     * ALLOWED is read access to chunk content
  -     * ALLOWED is modification in place of chunk content
  -     */
  -    tx->view        = *(tx->cur);
  -    tx->view.begin += tx->skip;
  -    tx->view.end    = tx->view.begin + step;
  -
  -    switch (tx->dir) {
  -        case AL_FORWARD:
  -            tx->cur   = NEXT(tx->cur,chunks);
  -            tx->togo -= step;
  -            tx->skip  = 0;
  -            break;
  -        case AL_BACKWARD:
  -            tx->cur   = PREV(tx->cur,chunks);
  -            tx->togo -= step;
  -            tx->skip  = 0;
  -            break;
  -    }
  +        /*
  +         * synthetic chunk which is NOT maintained in usecount
  +         * MUST NOT BE USED for modifications to chunk list
  +         * MUST NOT BE USED for modifications to chunk size
  +         * ALLOWED is read access to chunk content
  +         * ALLOWED is modification in place of chunk content
  +         */
  +        tx->view        = *(tx->cur);
  +        tx->view.begin += tx->skip;
  +        tx->view.end    = tx->view.begin + step;
  +
  +        switch (tx->dir) {
  +            case AL_FORWARD:
  +                tx->cur   = NEXT(tx->cur,chunks);
  +                tx->togo -= step;
  +                tx->skip  = 0;
  +                break;
  +            case AL_BACKWARD:
  +                tx->cur   = PREV(tx->cur,chunks);
  +                tx->togo -= step;
  +                tx->skip  = 0;
  +                break;
  +        }
  +    } while (!AL_SAME_LABEL(&tx->view, tx->label));
   
       *alcp = &tx->view;
       return AL_OK;
  @@ -887,14 +905,14 @@
    * traversal context is kept on stack (XXX ?)
    */
   al_rc_t
  -al_traverse_cb(al_t *al, size_t off, size_t n, al_td_t dir,
  +al_traverse_cb(al_t *al, size_t off, size_t n, al_td_t dir, al_label_t label,
                  al_rc_t (*cb)(al_chunk_t *, void *), void *u)
   {
       al_rc_t rc;
       al_tx_t tx;                /* XXX - private tx structure on stack */
       al_chunk_t *view;
   
  -    rc = al_traverse(al, off, n, dir, &tx);
  +    rc = al_traverse(al, off, n, dir, label, &tx);
       if (rc != AL_OK)
           return AL_RC(rc);
   
  @@ -917,10 +935,15 @@
    *
    * returns actual number of bytes copied
    *
  + * Do not copy if destination pointer is NULL, but still count.
  + * This can be used to precalculate the size of the needed linear
  + * buffer with n set to some arbitrary huge value.
  + *
    * traversal context is kept on stack (XXX ?)
    */
   al_rc_t
  -al_flatten(al_t *al, size_t off, size_t n, char *dst, size_t *lenp)
  +al_flatten(al_t *al, size_t off, size_t n, al_label_t label,
  +           char *dst, size_t *lenp)
   {
       al_rc_t rc;
       al_tx_t tx;                /* XXX - private tx structure on stack */
  @@ -929,15 +952,19 @@
   
       *lenp = 0; /* keep caller on safe side */
   
  -    rc = al_traverse(al, off, n, AL_FORWARD, &tx);
  +    rc = al_traverse(al, off, n, AL_FORWARD, label, &tx);
       if (rc != AL_OK)
           return AL_RC(rc);
   
       total = 0;
       while ((rc = al_traverse_next(al, &tx, &view)) == AL_OK) {
           step = AL_CHUNK_LEN(view);
  -        memmove(dst, AL_CHUNK_PTR(view, 0), step);
  -        dst   += step;
  +
  +        if (dst != NULL) {
  +            memmove(dst, AL_CHUNK_PTR(view, 0), step);
  +            dst   += step;
  +        }
  +
           total += step;
       }
       *lenp = total;
  @@ -956,20 +983,20 @@
    * traversal context is kept on stack (XXX ?)
    */
   al_rc_t
  -al_copy(al_t *al, size_t off, size_t n, al_t *tal)
  +al_copy(al_t *al, size_t off, size_t n, al_label_t label, al_t *tal)
   {
       al_rc_t rc;
       al_tx_t tx;                /* XXX - private tx structure on stack */
       al_chunk_t *view;
       size_t step;
   
  -    rc = al_traverse(al, off, n, AL_FORWARD, &tx);
  +    rc = al_traverse(al, off, n, AL_FORWARD, label, &tx);
       if (rc != AL_OK)
           return AL_RC(rc);
   
       while ((rc = al_traverse_next(al, &tx, &view)) == AL_OK) {
           step = AL_CHUNK_LEN(view);
  -        al_append_bytes(tal, AL_CHUNK_PTR(view, 0), step);
  +        al_append_bytes(tal, AL_CHUNK_PTR(view, 0), step, AL_CHUNK_LABEL(view));
       }
   
       al_traverse_end(al, &tx, 1);
  @@ -986,6 +1013,8 @@
    * al_bytes      - total number of bytes in assembly line
    * al_chunk_len  - number of bytes in chunk
    * al_chunk_span - clip interval (off,off+n( against chunk length
  + * al_chunk_label- return chunk label
  + * al_same_label - check if label matches with chunk label
    * al_chunk_ptr  - return memory pointer to byte within chunk
    *
    * off must be a valid offset within (0,len(
  @@ -1007,6 +1036,18 @@
   al_chunk_span(al_chunk_t *alc, size_t off, size_t n)
   {
       return AL_CHUNK_SPAN(alc, off, n);
  +}
  +
  +al_label_t
  +al_chunk_label(al_chunk_t *alc)
  +{
  +    return AL_CHUNK_LABEL(alc);
  +}
  +
  +int
  +al_same_label(al_chunk_t *alc, al_label_t label)
  +{
  +    return AL_SAME_LABEL(alc, label);
   }
   
   char *
  Index: ossp-pkg/sio/al.h
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 al.h
  --- ossp-pkg/sio/al.h	18 Oct 2002 12:24:53 -0000	1.12
  +++ ossp-pkg/sio/al.h	22 Oct 2002 15:33:16 -0000	1.13
  @@ -46,6 +46,8 @@
   struct al_chunk_st;
   typedef struct al_chunk_st al_chunk_t;
   
  +typedef void *al_label_t;
  +
   typedef enum {
       AL_FORWARD,
       AL_BACKWARD
  @@ -56,25 +58,27 @@
   
   al_rc_t al_create       (al_t **alp);
   al_rc_t al_destroy      (al_t *al);
  -al_rc_t al_append_bytes (al_t *al, const char *src, size_t n);
  -al_rc_t al_prepend_bytes(al_t *al, const char *src, size_t n);
  -al_rc_t al_attach_buffer(al_t *al, char *p, size_t n, void (*freemem)(char *, size_t, void *), void *u);
  +al_rc_t al_append_bytes (al_t *al, const char *src, size_t n, al_label_t label);
  +al_rc_t al_prepend_bytes(al_t *al, const char *src, size_t n, al_label_t label);
  +al_rc_t al_attach_buffer(al_t *al, char *p, size_t n, al_label_t label, void (*freemem)(char *, size_t, void *), void *u);
   al_rc_t al_txalloc      (al_t *al, al_tx_t **txp);
   al_rc_t al_txfree       (al_t *al, al_tx_t *tx);
  -al_rc_t al_traverse     (al_t *al, size_t off, size_t n, al_td_t dir, al_tx_t *tx);
  +al_rc_t al_traverse     (al_t *al, size_t off, size_t n, al_td_t dir, al_label_t label, al_tx_t *tx);
   al_rc_t al_traverse_next(al_t *al, al_tx_t *tx, al_chunk_t **alcp);
   al_rc_t al_traverse_end (al_t *al, al_tx_t *tx, int final);
  -al_rc_t al_traverse_cb  (al_t *al, size_t off, size_t n, al_td_t dir, al_rc_t (*cb)(al_chunk_t *, void *), void *u);
  -al_rc_t al_copy         (al_t *al, size_t off, size_t n, al_t *tal);
  +al_rc_t al_traverse_cb  (al_t *al, size_t off, size_t n, al_td_t dir, al_label_t, al_rc_t (*cb)(al_chunk_t *, void *), void *u);
  +al_rc_t al_copy         (al_t *al, size_t off, size_t n, al_label_t label, al_t *tal);
   al_rc_t al_splice       (al_t *al, size_t off, size_t n, al_t *nal, al_t *tal);
  -al_rc_t al_flatten      (al_t *al, size_t off, size_t n, char *dst, size_t *lenp);
  +al_rc_t al_flatten      (al_t *al, size_t off, size_t n, al_label_t label, char *dst, size_t *lenp);
   
  -size_t al_bytes     (const al_t *al);
  -size_t al_chunk_len (al_chunk_t *alc);
  -size_t al_chunk_span(al_chunk_t *alc, size_t off, size_t n);
  -char  *al_chunk_ptr (al_chunk_t *alc, size_t off);
  +size_t     al_bytes      (const al_t *al);
  +size_t     al_chunk_len  (al_chunk_t *alc);
  +al_label_t al_chunk_label(al_chunk_t *alc);
  +int        al_same_label (al_chunk_t *alc, al_label_t label);
  +size_t     al_chunk_span (al_chunk_t *alc, size_t off, size_t n);
  +char      *al_chunk_ptr  (al_chunk_t *alc, size_t off);
   
  -const char *al_error(al_rc_t rc);
  +const char *al_error      (al_rc_t rc);
   
   #endif /* __AL_H__ */
   
  Index: ossp-pkg/sio/al.pod
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 al.pod
  --- ossp-pkg/sio/al.pod	18 Oct 2002 12:23:35 -0000	1.10
  +++ ossp-pkg/sio/al.pod	22 Oct 2002 15:33:16 -0000	1.11
  @@ -79,6 +79,8 @@
   
   al_chunk_len,
   al_chunk_span,
  +al_chunk_label,
  +al_same_label,
   al_chunk_ptr.
   
   =item B<Error Handling>:
  @@ -100,7 +102,7 @@
   
   =head1 DATA TYPES
   
  -B<OSSP al> uses five data types in its API:
  +B<OSSP al> uses six data types in its API:
   
   =over 4
   
  @@ -141,6 +143,14 @@
   used in the API. The B<al_chunk_t> type is used to generate a pointer
   and byte count to access the data in the buffer.
   
  +=item B<al_label_t> (Label Type)
  +
  +This is a pointer type representing a specific data flavour. You
  +can restrict traversal operations to data that was marked with
  +the specific flavour. Usually you would cast a pointer to the
  +object that maintains the data to B<al_label_t>. You may use
  +NULL as a label but on traversal NULL matches any label.
  +
   =back
   
   =head1 FUNCTIONS
  @@ -172,21 +182,22 @@
   
   Example: C<al_destroy(al);>
   
  -=item al_rc_t B<al_append_bytes>(al_t *I<al>, const char *I<src>, size_t I<n>);
  +=item al_rc_t B<al_append_bytes>(al_t *I<al>, const char *I<src>, size_t I<n>, al_label_t I<label>);
   
   Append I<n> bytes from a storage array at I<src> to the assembly line. The
  -bytes are copied, memory is allocated as necessary.
  +bytes are copied, memory is allocated as necessary. The data is tagged
  +with I<label>.
   
  -Example: C<al_append_bytes(al, "Goodbye cruel world\n", 20);>
  +Example: C<al_append_bytes(al, "Goodbye cruel world\n", 20, NULL);>
   
  -=item al_rc_t B<al_prepend_bytes>(al_t *I<al>, const char *I<src>, size_t I<n>);
  +=item al_rc_t B<al_prepend_bytes>(al_t *I<al>, const char *I<src>, size_t I<n>, al_label_t I<label>);
   
   Prepend I<n> bytes from a storage array at I<src> to the assembly line. The
   bytes are copied, memory is allocated as necessary.
   
  -Example: C<al_prepend_bytes(al, "Hello world\n", 12);>
  +Example: C<al_prepend_bytes(al, "Hello world\n", 12, NULL);>
   
  -=item al_rc_t B<al_attach_buffer>(al_t *I<al>, char *I<p>, size_t I<n>, void (*I<freemem>)(char *, size_t, void *), void *I<u>);
  +=item al_rc_t B<al_attach_buffer>(al_t *I<al>, char *I<p>, size_t I<n>, al_label_t I<label>, void (*I<freemem>)(char *, size_t, void *), void *I<u>);
   
   Attach the storage array starting at I<p> with size I<n> at the end of
   the assembly line. Its content becomes part of the assembly line
  @@ -197,7 +208,7 @@
   for I<freemem> is valid, then no callback takes place, which might be
   appropriate for static buffers.
   
  -Example: C<char store[] = "foo\n"; al_attach_buffer(al, store, sizeof(store), NULL, NULL);>
  +Example: C<char store[] = "foo\n"; al_attach_buffer(al, store, sizeof(store), NULL, NULL, NULL);>
   
   =item al_rc_t B<al_splice>(al_t *I<al>, size_t I<off>, size_t I<n>, al_t *I<nal>, al_t *I<tal>);
   
  @@ -231,8 +242,8 @@
    al_create(&insertion);
    al_create(&buffer);
   
  - al_append_bytes(source, "Hello world\n", 12);
  - al_append_bytes(insertion, "Goodbye cruel", 13);
  + al_append_bytes(source, "Hello world\n", 12, NULL);
  + al_append_bytes(insertion, "Goodbye cruel", 13, NULL);
   
    al_splice(source, 0, 5, insertion, buffer);
   
  @@ -240,16 +251,16 @@
   The source now holds the string "Goodbye cruel world\n".
   The insertion is now empty.
   
  - al_append_bytes(insertion, "brave", 5);
  + al_append_bytes(insertion, "brave", 5, NULL);
    al_splice(source, 8, 5, insertion, NULL);
   
   The source now holds the string "Goodbye brave world\n".
   The insertion is now empty.
   
  - al_append_bytes(insertion, "B", 1);
  + al_append_bytes(insertion, "B", 1, NULL);
    al_splice(source, 0, 8, NULL, buffer);
    al_splice(source, 0, 1, insertion, NULL);
  - al_append_bytes(insertion, "\n", 1);
  + al_append_bytes(insertion, "\n", 1, NULL);
    al_splice(buffer, al_bytes(buffer)-1, 1, insertion, NULL),
   
   The source now holds the string "Brave world\n".
  @@ -280,11 +291,12 @@
   
   Example: C<al_tx_t *tx; al_txfree(tx);>
   
  -=item al_rc_t B<al_traverse>(al_t *I<al>, size_t I<off>, size_t I<n>, al_td_t I<dir>, al_tx_t *I<tx>);
  +=item al_rc_t B<al_traverse>(al_t *I<al>, size_t I<off>, size_t I<n>, al_td_t I<dir>, al_label_t I<label>, al_tx_t *I<tx>);
   
   Start traversing the assembly line I<al> beginning at byte offset I<off>
  -for up to I<n> bytes in direction I<dir>. The state of the traversal is
  -stored in the supplied context I<tx>.
  +for up to I<n> bytes in direction I<dir>. If I<label> is not NULL then
  +you will see only data that was tagged with I<label>. The state of the
  +traversal is stored in the supplied context I<tx>.
   
   This function fails when the offset is outside the assembly line bounds.
   
  @@ -307,7 +319,7 @@
   mandatory that every traversal that was started is finished by
   a call to B<al_traverse_end> with I<final> set to a non-zero value.
   
  -=item al_rc_t B<al_traverse_cb>(al_t *I<al>, size_t I<off>, size_t I<n>, al_td_t I<dir>, al_rc_t (*I<cb>)(al_chunk_t *, void *), void *u);
  +=item al_rc_t B<al_traverse_cb>(al_t *I<al>, size_t I<off>, size_t I<n>, al_td_t I<dir>, al_label_t I<label>, al_rc_t (*I<cb>)(al_chunk_t *, void *), void *u);
   
   B<al_traverse_cb> is a wrapper function that does a full assembly line traversal in
   a single call. In every step a chunk descriptor is passed to the callback
  @@ -332,6 +344,10 @@
   the size of the assembly line.
   The actual number of bytes that is copied to the destination is stored
   in I<lenp>.
  +If I<dst> is NULL then no data is copied but the number of bytes is
  +still counted in I<lenp>. This can be used to precalculate the size
  +of the needed storage array by passing an arbitrary high maximum size
  +as I<n>.
   
   Example:
   
  @@ -341,7 +357,7 @@
   
    al_flatten(al, 500, 42, buffer, &actual);
   
  -=item al_rc_t B<al_copy>(al_t *I<al>, size_t I<off>, size_t I<n>, al_t *I<tal);
  +=item al_rc_t B<al_copy>(al_t *I<al>, size_t I<off>, size_t I<n>, al_t *I<tal>);
   
   I<off> and I<n> are byte counts that define a span of bytes within the
   assembly line I<al>. These bytes are appended to the target assembly line I<tal>,
  @@ -373,6 +389,16 @@
   B<al_chunk_span> returns the number of bytes that are stored in the chunk.
   I<off> must be a valid offset, I<n> must be positive but may exceed
   the size of the chunk.
  +
  +=item al_label_t B<al_chunk_label>(al_chunk_t *I<alc>);
  +
  +Return the label that was used to tag the data in I<alc>. This can
  +be NULL.
  +
  +=item int B<al_same_label>(al_chunk_t *I<alc>, al_label_t *I<label>);
  +
  +Return true if I<label> matches the label that was used to tag the data
  +in I<alc>. A NULL I<label> matches everything.
   
   =item char *B<al_chunk_ptr>(al_chunk_t *I<alc>, size_t I<off>);
   
  Index: ossp-pkg/sio/al_test.c
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 al_test.c
  --- ossp-pkg/sio/al_test.c	18 Oct 2002 15:53:17 -0000	1.13
  +++ ossp-pkg/sio/al_test.c	22 Oct 2002 15:33:16 -0000	1.14
  @@ -36,6 +36,11 @@
   
   #include "al.h"
   
  +/* get unique pointers */
  +static char label, label2;
  +#define LABEL  ((al_label_t)&label)
  +#define LABEL2 ((al_label_t)&label2)
  +
   #define S(s) s, strlen(s)
   
   static const char *fill(char *p, int n)
  @@ -65,12 +70,13 @@
       size_t len, pre, post;
   
       len = al_chunk_len(alc);
  -    pre  = 20; if (pre > len) pre = len;
  -    post = 20; if (post > len-pre) post = len-pre;
  +    pre  = 16; if (pre > len) pre = len;
  +    post = 16; if (post > len-pre) post = len-pre;
   
  -    printf("C: %08lx + %-6d = ",
  +    printf("C: %08lx + %-6d [%08lx] = ",
           (long)al_chunk_ptr(alc, 0),
  -        al_chunk_len(alc));
  +        al_chunk_len(alc),
  +        (long)al_chunk_label(alc));
       fputs(fill(al_chunk_ptr(alc,0),pre), stdout);
       if (post > 0) {
           fputs(" .. ", stdout);
  @@ -83,7 +89,7 @@
   
   #define DUMP(tag,al) do {\
   printf("+DUMP(%s)\n",tag);\
  -al_traverse_cb(al, 0, al_bytes(al), AL_FORWARD, printchunk, NULL);\
  +al_traverse_cb(al, 0, al_bytes(al), AL_FORWARD, LABEL, printchunk, NULL);\
   printf("-DUMP(%s)\n\n",tag);\
   } while (0)
   
  @@ -92,11 +98,13 @@
       char *buf;
       size_t n, len;
   
  +    return;
  +
       n = al_bytes(al);
       buf = (char *)malloc(n);
       if (buf == NULL) abort();
   
  -    al_flatten(al, 0, n, buf, &len);
  +    al_flatten(al, 0, n, LABEL, buf, &len);
   
       printf("%s = %d of %d\n",tag,len,n);
       fwrite(">>", 2, 1, stdout);
  @@ -116,7 +124,7 @@
       total = 0;
   
       al_txalloc(al, &tx);
  -    al_traverse(al, 0, -1, AL_FORWARD, tx);
  +    al_traverse(al, 0, -1, AL_FORWARD, NULL, tx);
       while (al_traverse_next(al, tx, &cur) == AL_OK)
           total += al_chunk_len(cur);
       al_traverse_end(al, tx, 1);
  @@ -145,15 +153,15 @@
       al_create(&al2);
       al_create(&al3);
   
  -    al_append_bytes(al, S("Hello world\n"));
  -    al_attach_buffer(al, S(baf), reclaim, NULL);
  +    al_append_bytes(al, S("Hello world\n"), LABEL);
  +    al_attach_buffer(al, S(baf), LABEL, reclaim, NULL);
   
       for (i=0; i<500; ++i)
  -        al_append_bytes(al, S("Huhu world\n"));
  +        al_append_bytes(al, S("Huhu world\n"), LABEL);
   
  -    al_append_bytes(al2, S("Hello world\n"));
  +    al_append_bytes(al2, S("Hello world\n"), LABEL);
   
  -    al_append_bytes(al3, S("HUHU WORLD\n"));
  +    al_append_bytes(al3, S("HUHU WORLD\n"), LABEL2);
   
       DUMP("DATA",al);
       DUMP("BUFFER",al2);
  @@ -167,7 +175,7 @@
       checklen("REPLACEMENT",al3);
   
       al_create(&al4);
  -    rc = al_copy(al, al_bytes(al)-42, 38, al4);
  +    rc = al_copy(al, al_bytes(al)-42, 38, LABEL, al4);
       printf("copy result: %d (%s)\n\n",rc,al_error(rc));
   
       DUMP("SPLICED",al);

From ossp-cvs-owner@ossp.org  Wed Oct 23 15:55:50 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D40F476527; Wed, 23 Oct 2002 15:55:49 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog pth.pod pth_msg.c
Message-Id: <20021023135549.D40F476527@mail.ossp.org>
Date: Wed, 23 Oct 2002 15:55:49 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Oct-2002 15:55:49
  Branch: HEAD                             Handle: 2002102314554900

  Modified files:
    ossp-pkg/pth            ChangeLog pth.pod pth_msg.c

  Log:
    Matthew Mondor <mmondor@gobot.ca> wrote:
    
    > I noticed that pth_msgport_create(), although inspired from the AmigaOS
    > API, does not support NULL for port identifyer, which would be very
    > useful for thread-specific private message ports (mmftpd uses those and
    > unfortunately currently has to generate unique strings to create ports).
    > AmigaOS had this functionality...
    
    So, make him happy and allow NULL from now on, too.

  Summary:
    Revision    Changes     Path
    1.576       +5  -0      ossp-pkg/pth/ChangeLog
    1.155       +4  -3      ossp-pkg/pth/pth.pod
    1.23        +1  -3      ossp-pkg/pth/pth_msg.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.575 -r1.576 ChangeLog
  --- ossp-pkg/pth/ChangeLog	20 Oct 2002 16:22:03 -0000	1.575
  +++ ossp-pkg/pth/ChangeLog	23 Oct 2002 13:55:49 -0000	1.576
  @@ -21,6 +21,11 @@
   
     Changes between 1.4.1 and 1.5.0 (27-Jan-2002 to xx-Oct-2002)
   
  +   *) Allow a NULL name for pth_msgport_create() in order to
  +      support locally scoped message ports which are not searched via
  +      pth_msgport_find().
  +      [Ralf S. Engelschall, Matthew Mondor <mmondor@gobot.ca>]
  +
      *) Added "hard syscall mapping" support for using 
         SYS___sigprocmask14 instead of SYS_sigprocmask on NetBSD.
         [Nick Hudson <skrll@netbsd.org>]
  Index: ossp-pkg/pth/pth.pod
  ============================================================
  $ cvs diff -u -r1.154 -r1.155 pth.pod
  --- ossp-pkg/pth/pth.pod	15 Oct 2002 20:34:22 -0000	1.154
  +++ ossp-pkg/pth/pth.pod	23 Oct 2002 13:55:49 -0000	1.155
  @@ -1266,9 +1266,10 @@
   
   =item pth_msgport_t B<pth_msgport_create>(const char *I<name>);
   
  -This returns a pointer to a new message port with name I<name>. The I<name>
  -can be used by other threads via pth_msgport_find(3) to find the message port
  -in case they do not know directly the pointer to the message port.
  +This returns a pointer to a new message port. If name I<name>
  +is not C<NULL>, the I<name> can be used by other threads via
  +pth_msgport_find(3) to find the message port in case they do not know
  +directly the pointer to the message port.
   
   =item void B<pth_msgport_destroy>(pth_msgport_t I<mp>);
   
  Index: ossp-pkg/pth/pth_msg.c
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 pth_msg.c
  --- ossp-pkg/pth/pth_msg.c	27 Jan 2002 11:03:40 -0000	1.22
  +++ ossp-pkg/pth/pth_msg.c	23 Oct 2002 13:55:49 -0000	1.23
  @@ -46,9 +46,7 @@
   {
       pth_msgport_t mp;
   
  -    /* check input */
  -    if (name == NULL)
  -        return_errno(NULL, EINVAL);
  +    /* Notice: "name" is allowed to be NULL */
   
       /* allocate message port structure */
       if ((mp = (pth_msgport_t)malloc(sizeof(struct pth_msgport_st))) == NULL)

From ossp-cvs-owner@ossp.org  Wed Oct 23 15:59:30 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AB74476527; Wed, 23 Oct 2002 15:59:30 +0200 (CEST)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.c
Message-Id: <20021023135930.AB74476527@mail.ossp.org>
Date: Wed, 23 Oct 2002 15:59:30 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   23-Oct-2002 15:59:30
  Branch: HEAD                             Handle: 2002102314593000

  Modified files:
    ossp-pkg/sio            al.c

  Log:
    seeking backwards to EOF position is obviously ok as well

  Summary:
    Revision    Changes     Path
    1.30        +6  -0      ossp-pkg/sio/al.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.c
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 al.c
  --- ossp-pkg/sio/al.c	22 Oct 2002 15:33:16 -0000	1.29
  +++ ossp-pkg/sio/al.c	23 Oct 2002 13:59:30 -0000	1.30
  @@ -354,6 +354,12 @@
       } else {
           /* reverse search */
           pos  = al->bytes;
  +        /* seek to EOF position is ok */
  +        if (pos == off) {
  +            *alcp  = NULL;
  +            *skipp = 0;
  +            return AL_OK;
  +        }
           FOREACHR(al,chunks,cur) {
               chunksize = AL_CHUNK_LEN(cur);
               end  = pos;

From ossp-cvs-owner@ossp.org  Wed Oct 23 16:04:01 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5B894765DE; Wed, 23 Oct 2002 16:04:01 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog pth.h.in pth.pod pth_high.c pth_p.h...
Message-Id: <20021023140401.5B894765DE@mail.ossp.org>
Date: Wed, 23 Oct 2002 16:04:01 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Oct-2002 16:04:01
  Branch: HEAD                             Handle: 2002102315040000

  Modified files:
    ossp-pkg/pth            ChangeLog pth.h.in pth.pod pth_high.c pth_p.h.in
                            pthread.c

  Log:
    Added pth_nanosleep() function.
    
    Obtained from: NetBSD, Nick Hudson <skrll@netbsd.org>

  Summary:
    Revision    Changes     Path
    1.577       +3  -0      ossp-pkg/pth/ChangeLog
    1.133       +7  -4      ossp-pkg/pth/pth.h.in
    1.156       +13 -0      ossp-pkg/pth/pth.pod
    1.89        +39 -0      ossp-pkg/pth/pth_high.c
    1.33        +8  -0      ossp-pkg/pth/pth_p.h.in
    1.60        +0  -7      ossp-pkg/pth/pthread.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.576 -r1.577 ChangeLog
  --- ossp-pkg/pth/ChangeLog	23 Oct 2002 13:55:49 -0000	1.576
  +++ ossp-pkg/pth/ChangeLog	23 Oct 2002 14:04:00 -0000	1.577
  @@ -21,6 +21,9 @@
   
     Changes between 1.4.1 and 1.5.0 (27-Jan-2002 to xx-Oct-2002)
   
  +   *) Added pth_nanosleep() function.
  +      [Nick Hudson <skrll@netbsd.org>, Ralf S. Engelschall]
  +
      *) Allow a NULL name for pth_msgport_create() in order to
         support locally scoped message ports which are not searched via
         pth_msgport_find().
  Index: ossp-pkg/pth/pth.h.in
  ============================================================
  $ cvs diff -u -r1.132 -r1.133 pth.h.in
  --- ossp-pkg/pth/pth.h.in	15 Oct 2002 21:14:27 -0000	1.132
  +++ ossp-pkg/pth/pth.h.in	23 Oct 2002 14:04:00 -0000	1.133
  @@ -39,10 +39,11 @@
   #endif
   
       /* essential headers */
  -#include <sys/types.h>     /* for ssize_t, off_t */
  -#include <sys/time.h>      /* for struct timeval */
  -#include <sys/socket.h>    /* for sockaddr       */
  -#include <sys/signal.h>    /* for sigset_t       */
  +#include <sys/types.h>     /* for ssize_t, off_t  */
  +#include <time.h>          /* for struct timespec */
  +#include <sys/time.h>      /* for struct timeval  */
  +#include <sys/socket.h>    /* for sockaddr        */
  +#include <sys/signal.h>    /* for sigset_t        */
   @EXTRA_INCLUDE_SYS_SELECT_H@
   
       /* fallbacks for essential typedefs */
  @@ -58,6 +59,7 @@
   
       /* extra structure definitions */
   struct timeval;
  +struct timespec;
   
       /* essential values */
   #ifndef FALSE
  @@ -492,6 +494,7 @@
   extern ssize_t        pth_sendto_ev(int, const void *, size_t, int, const struct sockaddr *, socklen_t, pth_event_t);
   
       /* standard replacement functions */
  +extern int            pth_nanosleep(const struct timespec *, struct timespec *);
   extern int            pth_usleep(unsigned int);
   extern unsigned int   pth_sleep(unsigned int);
   extern pid_t          pth_waitpid(pid_t, int *, int);
  Index: ossp-pkg/pth/pth.pod
  ============================================================
  $ cvs diff -u -r1.155 -r1.156 pth.pod
  --- ossp-pkg/pth/pth.pod	23 Oct 2002 13:55:49 -0000	1.155
  +++ ossp-pkg/pth/pth.pod	23 Oct 2002 14:04:00 -0000	1.156
  @@ -156,6 +156,7 @@
   
   =item B<Standard POSIX Replacement API>
   
  +pth_nanosleep,
   pth_usleep,
   pth_sleep,
   pth_waitpid,
  @@ -1584,6 +1585,18 @@
   the whole process in case the file descriptors will block.
   
   =over 4
  +
  +=item int B<pth_nanosleep>(const struct timespec *I<rqtp>, struct timespec *I<rmtp>);
  +
  +This is a variant of the POSIX nanosleep(3) function. It suspends the
  +current threads execution until the amount of time in I<rqtp> elapsed.
  +The thread is guaranteed to not wake up before this time, but because
  +of the non-preemptive scheduling nature of B<Pth>, it can be awakened
  +later, of course. If I<rmtp> is not C<NULL>, the C<timespec> structure
  +it references is updated to contain the unslept amount (the request time
  +minus the time actually slept time). The difference between nanosleep(3)
  +and pth_nanosleep(3) is that that pth_nanosleep(3) suspends only the
  +execution of the current thread and not the whole process.
   
   =item int B<pth_usleep>(unsigned int I<usec>);
   
  Index: ossp-pkg/pth/pth_high.c
  ============================================================
  $ cvs diff -u -r1.88 -r1.89 pth_high.c
  --- ossp-pkg/pth/pth_high.c	20 Oct 2002 17:49:03 -0000	1.88
  +++ ossp-pkg/pth/pth_high.c	23 Oct 2002 14:04:00 -0000	1.89
  @@ -35,6 +35,45 @@
   
   #include "pth_p.h"
   
  +/* Pth variant of nanosleep(2) */
  +int pth_nanosleep(const struct timespec *rqtp, struct timespec *rmtp)
  +{
  +    pth_time_t until;
  +    pth_time_t offset;
  +    pth_time_t now;
  +    pth_event_t ev;
  +    static pth_key_t ev_key = PTH_KEY_INIT;
  +
  +    /* consistency checks for POSIX conformance */
  +    if (rqtp == NULL)
  +        return_errno(-1, EFAULT);
  +    if (rqtp->tv_nsec < 0 || rqtp->tv_nsec > (1000*1000000))
  +        return_errno(-1, EINVAL);
  +
  +    /* short-circuit */
  +    if (rqtp->tv_sec == 0 && rqtp->tv_nsec == 0)
  +        return 0;
  +
  +    /* calculate asleep time */
  +    offset = pth_time((long)(rqtp->tv_sec), (long)(rqtp->tv_nsec) / 1000);
  +    pth_time_set(&until, PTH_TIME_NOW);
  +    pth_time_add(&until, &offset);
  +
  +    /* and let thread sleep until this time is elapsed */
  +    ev = pth_event(PTH_EVENT_TIME|PTH_MODE_STATIC, &ev_key, until);
  +    pth_wait(ev);
  +
  +    /* optionally provide amount of slept time */
  +    if (rmtp != NULL) {
  +        pth_time_set(&now, PTH_TIME_NOW);
  +        pth_time_sub(&until, &now);
  +        rmtp->tv_sec  = until.tv_sec;
  +        rmtp->tv_nsec = until.tv_usec * 1000;
  +    }
  +
  +    return 0;
  +}
  +
   /* Pth variant of usleep(3) */
   int pth_usleep(unsigned int usec)
   {
  Index: ossp-pkg/pth/pth_p.h.in
  ============================================================
  $ cvs diff -u -r1.32 -r1.33 pth_p.h.in
  --- ossp-pkg/pth/pth_p.h.in	20 Oct 2002 11:45:10 -0000	1.32
  +++ ossp-pkg/pth/pth_p.h.in	23 Oct 2002 14:04:00 -0000	1.33
  @@ -104,6 +104,14 @@
   #endif
   #endif
   
  +/* fallback definition for struct timespec */
  +#ifndef HAVE_STRUCT_TIMESPEC
  +struct timespec {
  +    time_t  tv_sec;     /* seconds */
  +    long    tv_nsec;    /* and nanoseconds */
  +};
  +#endif
  +
   /* compiler happyness: avoid ``empty compilation unit'' problem */
   #define COMPILER_HAPPYNESS(name) \
       int __##name##_unit = 0;
  Index: ossp-pkg/pth/pthread.c
  ============================================================
  $ cvs diff -u -r1.59 -r1.60 pthread.c
  --- ossp-pkg/pth/pthread.c	15 Oct 2002 20:34:23 -0000	1.59
  +++ ossp-pkg/pth/pthread.c	23 Oct 2002 14:04:00 -0000	1.60
  @@ -989,13 +989,6 @@
       return OK;
   }
   
  -#ifndef HAVE_STRUCT_TIMESPEC
  -struct timespec {
  -    time_t  tv_sec;     /* seconds */
  -    long    tv_nsec;    /* and nanoseconds */
  -};
  -#endif
  -
   int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex,
                              const struct timespec *abstime)
   {

From ossp-cvs-owner@ossp.org  Wed Oct 23 18:49:30 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AB9B376527; Wed, 23 Oct 2002 18:49:29 +0200 (CEST)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.c al.h al.pod al_test.c
Message-Id: <20021023164929.AB9B376527@mail.ossp.org>
Date: Wed, 23 Oct 2002 18:49:29 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   23-Oct-2002 18:49:29
  Branch: HEAD                             Handle: 2002102317492900

  Modified files:
    ossp-pkg/sio            al.c al.h al.pod al_test.c

  Log:
    new span traversal mode
    add direction to al_flatten to support span traversal
    utility method al_firstlabel

  Summary:
    Revision    Changes     Path
    1.31        +72 -10     ossp-pkg/sio/al.c
    1.14        +5  -2      ossp-pkg/sio/al.h
    1.12        +16 -12     ossp-pkg/sio/al.pod
    1.15        +1  -1      ossp-pkg/sio/al_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.c
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 al.c
  --- ossp-pkg/sio/al.c	23 Oct 2002 13:59:30 -0000	1.30
  +++ ossp-pkg/sio/al.c	23 Oct 2002 16:49:29 -0000	1.31
  @@ -579,7 +579,7 @@
       al_chunk_t  *cur;
   
       /* argument sanity check(s) */
  -    if (al == NULL || p == NULL || n < 0)
  +    if (al == NULL || p == NULL || n <= 0)
           return AL_RC(AL_ERR_ARG);
   
       rc = make_buffer(al, p, n, freemem, u, &buf);
  @@ -874,12 +874,27 @@
           tx->view.end    = tx->view.begin + step;
   
           switch (tx->dir) {
  +        case AL_FORWARD:
  +        case AL_BACKWARD:
  +            break;
  +        case AL_FORWARD_SPAN:
  +        case AL_BACKWARD_SPAN:
  +            if (!AL_SAME_LABEL(&tx->view, tx->label)) {
  +                tx->togo = 0;
  +                return AL_ERR_EOF;
  +            }
  +            break;
  +        }
  +
  +        switch (tx->dir) {
               case AL_FORWARD:
  +            case AL_FORWARD_SPAN:
                   tx->cur   = NEXT(tx->cur,chunks);
                   tx->togo -= step;
                   tx->skip  = 0;
                   break;
               case AL_BACKWARD:
  +            case AL_BACKWARD_SPAN:
                   tx->cur   = PREV(tx->cur,chunks);
                   tx->togo -= step;
                   tx->skip  = 0;
  @@ -948,7 +963,7 @@
    * traversal context is kept on stack (XXX ?)
    */
   al_rc_t
  -al_flatten(al_t *al, size_t off, size_t n, al_label_t label,
  +al_flatten(al_t *al, size_t off, size_t n, al_td_t dir, al_label_t label,
              char *dst, size_t *lenp)
   {
       al_rc_t rc;
  @@ -958,20 +973,42 @@
   
       *lenp = 0; /* keep caller on safe side */
   
  -    rc = al_traverse(al, off, n, AL_FORWARD, label, &tx);
  +    rc = al_traverse(al, off, n, dir, label, &tx);
       if (rc != AL_OK)
           return AL_RC(rc);
   
  +    switch (dir) {
  +    case AL_FORWARD:
  +    case AL_FORWARD_SPAN:
  +        break;
  +    case AL_BACKWARD:
  +    case AL_BACKWARD_SPAN:
  +        dst += n;
  +        break;
  +    }
  +
       total = 0;
  -    while ((rc = al_traverse_next(al, &tx, &view)) == AL_OK) {
  -        step = AL_CHUNK_LEN(view);
   
  -        if (dst != NULL) {
  -            memmove(dst, AL_CHUNK_PTR(view, 0), step);
  -            dst   += step;
  +    if (dst == NULL) {
  +        while ((rc = al_traverse_next(al, &tx, &view)) == AL_OK)
  +            total += AL_CHUNK_LEN(view);
  +    } else {
  +        while ((rc = al_traverse_next(al, &tx, &view)) == AL_OK) {
  +            step = AL_CHUNK_LEN(view);
  +            switch (dir) {
  +            case AL_FORWARD:
  +            case AL_FORWARD_SPAN:
  +                memmove(dst, AL_CHUNK_PTR(view, 0), step);
  +                dst   += step;
  +                break;
  +            case AL_BACKWARD:
  +            case AL_BACKWARD_SPAN:
  +                dst   -= step;
  +                memmove(dst, AL_CHUNK_PTR(view, 0), step);
  +                break;
  +            }
  +            total += step;
           }
  -
  -        total += step;
       }
       *lenp = total;
   
  @@ -1011,6 +1048,31 @@
           return AL_RC(rc);
   
       return AL_OK;
  +}
  +
  +/*
  + * traverse assembly line and retrieve first chunk
  + *
  + * traversal context is kept on stack (XXX ?)
  + */
  +al_rc_t
  +al_firstlabel(al_t *al, size_t off, size_t n, al_td_t dir, al_label_t label,
  +              al_label_t *labelp)
  +{
  +    al_rc_t rc;
  +    al_tx_t tx;                /* XXX - private tx structure on stack */
  +    al_chunk_t *view;
  +
  +    rc = al_traverse(al, off, n, dir, label, &tx);
  +    if (rc != AL_OK)
  +        return AL_RC(rc);
  +
  +    if ((rc = al_traverse_next(al, &tx, &view)) == AL_OK)
  +        *labelp = AL_CHUNK_LABEL(view);
  +
  +    al_traverse_end(al, &tx, 1);
  +
  +    return rc;
   }
   
   /*
  Index: ossp-pkg/sio/al.h
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 al.h
  --- ossp-pkg/sio/al.h	22 Oct 2002 15:33:16 -0000	1.13
  +++ ossp-pkg/sio/al.h	23 Oct 2002 16:49:29 -0000	1.14
  @@ -50,7 +50,9 @@
   
   typedef enum {
       AL_FORWARD,
  -    AL_BACKWARD
  +    AL_BACKWARD,
  +    AL_FORWARD_SPAN,
  +    AL_BACKWARD_SPAN
   } al_td_t;
   
   struct al_tx_st;
  @@ -69,7 +71,8 @@
   al_rc_t al_traverse_cb  (al_t *al, size_t off, size_t n, al_td_t dir, al_label_t, al_rc_t (*cb)(al_chunk_t *, void *), void *u);
   al_rc_t al_copy         (al_t *al, size_t off, size_t n, al_label_t label, al_t *tal);
   al_rc_t al_splice       (al_t *al, size_t off, size_t n, al_t *nal, al_t *tal);
  -al_rc_t al_flatten      (al_t *al, size_t off, size_t n, al_label_t label, char *dst, size_t *lenp);
  +al_rc_t al_flatten      (al_t *al, size_t off, size_t n, al_td_t dir, al_label_t label, char *dst, size_t *lenp);
  +al_rc_t al_firstlabel   (al_t *al, size_t off, size_t n, al_td_t dir, al_label_t label, al_label_t *labelp);
   
   size_t     al_bytes      (const al_t *al);
   size_t     al_chunk_len  (al_chunk_t *alc);
  Index: ossp-pkg/sio/al.pod
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 al.pod
  --- ossp-pkg/sio/al.pod	22 Oct 2002 15:33:16 -0000	1.11
  +++ ossp-pkg/sio/al.pod	23 Oct 2002 16:49:29 -0000	1.12
  @@ -122,6 +122,14 @@
   This is an opaque data type representing a data buffer.
   Only pointers to this abstract data type are used in the API.
   
  +=item B<al_label_t> (Label Type)
  +
  +This is an opaque pointer type representing a specific data flavour.
  +You can restrict traversal operations to data that was marked with
  +the specific flavour. Usually you would cast a pointer to the
  +object that maintains the data to B<al_label_t>. You may use
  +NULL as a label but on traversal NULL matches any label.
  +
   =item B<al_tx_t> (Traversal Context Type)
   
   This is an opaque data type representing the state of a buffer
  @@ -133,8 +141,10 @@
   This is an exported enumerated integer type with the following possible
   values:
   
  - AL_FORWARD    traverse assembly line from beginning to end
  - AL_BACKWARD   traverse assembly line from end to beginning
  + AL_FORWARD        traverse assembly line from beginning to end
  + AL_BACKWARD       traverse assembly line from end to beginning
  + AL_FORWARD_SPAN   like AL_FORWARD, but stop when label does not match
  + AL_BACKWARD_SPAN  like AL_BACKWARD, but stop when label does not match
   
   =item B<al_chunk_t> (Chunk Type)
   
  @@ -143,14 +153,6 @@
   used in the API. The B<al_chunk_t> type is used to generate a pointer
   and byte count to access the data in the buffer.
   
  -=item B<al_label_t> (Label Type)
  -
  -This is a pointer type representing a specific data flavour. You
  -can restrict traversal operations to data that was marked with
  -the specific flavour. Usually you would cast a pointer to the
  -object that maintains the data to B<al_label_t>. You may use
  -NULL as a label but on traversal NULL matches any label.
  -
   =back
   
   =head1 FUNCTIONS
  @@ -335,7 +337,7 @@
   
   =over 4
   
  -=item al_rc_t B<al_flatten>(al_t *I<al>, size_t I<off>, size_t I<n>, char *I<dst>, size_t *I<lenp>);
  +=item al_rc_t B<al_flatten>(al_t *I<al>, size_t I<off>, size_t I<n>, al_td_t I<dir>, char *I<dst>, size_t *I<lenp>);
   
   I<off> and I<n> are byte counts that define a span of bytes with the
   assembly line I<al>. These bytes are copied to the storage array I<dst>
  @@ -348,6 +350,8 @@
   still counted in I<lenp>. This can be used to precalculate the size
   of the needed storage array by passing an arbitrary high maximum size
   as I<n>.
  +If I<dir> denotes a backwards traversal the storage array is filled
  +from its end.
   
   Example:
   
  @@ -355,7 +359,7 @@
    char buffer[42];
    size_t actual;
   
  - al_flatten(al, 500, 42, buffer, &actual);
  + al_flatten(al, 500, 42, AL_FORWARD, buffer, &actual);
   
   =item al_rc_t B<al_copy>(al_t *I<al>, size_t I<off>, size_t I<n>, al_t *I<tal>);
   
  Index: ossp-pkg/sio/al_test.c
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 al_test.c
  --- ossp-pkg/sio/al_test.c	22 Oct 2002 15:33:16 -0000	1.14
  +++ ossp-pkg/sio/al_test.c	23 Oct 2002 16:49:29 -0000	1.15
  @@ -104,7 +104,7 @@
       buf = (char *)malloc(n);
       if (buf == NULL) abort();
   
  -    al_flatten(al, 0, n, LABEL, buf, &len);
  +    al_flatten(al, 0, n, AL_FORWARD, LABEL, buf, &len);
   
       printf("%s = %d of %d\n",tag,len,n);
       fwrite(">>", 2, 1, stdout);

From ossp-cvs-owner@ossp.org  Wed Oct 23 19:02:08 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C31FD765DE; Wed, 23 Oct 2002 19:02:06 +0200 (CEST)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.pod
Message-Id: <20021023170206.C31FD765DE@mail.ossp.org>
Date: Wed, 23 Oct 2002 19:02:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   23-Oct-2002 19:02:06
  Branch: HEAD                             Handle: 2002102318020600

  Modified files:
    ossp-pkg/sio            al.pod

  Log:
    document al_firstlabel

  Summary:
    Revision    Changes     Path
    1.13        +10 -2      ossp-pkg/sio/al.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.pod
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 al.pod
  --- ossp-pkg/sio/al.pod	23 Oct 2002 16:49:29 -0000	1.12
  +++ ossp-pkg/sio/al.pod	23 Oct 2002 17:02:06 -0000	1.13
  @@ -73,7 +73,8 @@
   =item B<Convenience Operations>:
   
   al_flatten,
  -al_copy.
  +al_copy,
  +al_firstlabel.
   
   =item B<Chunk Operations>:
   
  @@ -361,7 +362,7 @@
   
    al_flatten(al, 500, 42, AL_FORWARD, buffer, &actual);
   
  -=item al_rc_t B<al_copy>(al_t *I<al>, size_t I<off>, size_t I<n>, al_t *I<tal>);
  +=item al_rc_t B<al_copy>(al_t *I<al>, size_t I<off>, size_t I<n>, al_td_t I<dir>, al_t *I<tal>);
   
   I<off> and I<n> are byte counts that define a span of bytes within the
   assembly line I<al>. These bytes are appended to the target assembly line I<tal>,
  @@ -376,6 +377,13 @@
   
    al_create(&tal);
    al_flatten(al, 500, 42, tal);
  +
  +=item al_rc_t B<al_firstlabel>(al_t *I<al>, size_t I<off>, size_t I<n>, al_td_t I<dir>, al_label_t *I<labelp>);
  +
  +I<off> and I<n> are byte counts that define a span of bytes within the
  +assembly line I<al>. The label that was attached to the first byte
  +within the defined span is stored in I<labelp>, otherwise B<al_firstlabel>
  +returns an error.
   
   =back
   

From ossp-cvs-owner@ossp.org  Wed Oct 23 19:05:12 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C8155765DE; Wed, 23 Oct 2002 19:05:11 +0200 (CEST)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio.c sio.h sio_buffer.c sio_fd.c sio_hole.c ...
Message-Id: <20021023170511.C8155765DE@mail.ossp.org>
Date: Wed, 23 Oct 2002 19:05:11 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   23-Oct-2002 19:05:11
  Branch: HEAD                             Handle: 2002102318051000

  Added files:
    ossp-pkg/sio            sio_buffer.c sio_hole.c sio_test.c
  Modified files:
    ossp-pkg/sio            sio.c sio.h sio_fd.c sio_module.h sio_null.c

  Log:
    snapshot

  Summary:
    Revision    Changes     Path
    1.2         +212 -72    ossp-pkg/sio/sio.c
    1.2         +9  -1      ossp-pkg/sio/sio.h
    1.1         +195 -0     ossp-pkg/sio/sio_buffer.c
    1.2         +75 -34     ossp-pkg/sio/sio_fd.c
    1.1         +113 -0     ossp-pkg/sio/sio_hole.c
    1.2         +11 -2      ossp-pkg/sio/sio_module.h
    1.2         +21 -7      ossp-pkg/sio/sio_null.c
    1.1         +46 -0      ossp-pkg/sio/sio_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 sio.c
  --- ossp-pkg/sio/sio.c	22 Oct 2002 12:57:20 -0000	1.1
  +++ ossp-pkg/sio/sio.c	23 Oct 2002 17:05:10 -0000	1.2
  @@ -57,19 +57,27 @@
   struct sio_halfduplex_st {
       NODE(sio_halfduplex_t) hd;
       sio_stage_t *stage;
  +    sio_halfduplex_t *cross;
  +    al_t *al;
       sio_rc_t (*func)(sio_t *, al_t *, void *);
   };
   
   struct sio_st {
       struct {
  -        LIST(sio_halfduplex_t) hd;
  +        LIST(sio_halfduplex_t)  hd;
           al_t                   *al;
       } readers;
       struct {
  -        LIST(sio_halfduplex_t) hd;
  +        LIST(sio_halfduplex_t)  hd;
           al_t                   *al;
       } writers;
  +    sio_labelnum_t             label_data;
  +    sio_labelnum_t             label_error;
  +    sio_labelnum_t             label_eof;
   };
  +#define SIO_LABEL_DATA(sio)  ((void*)&(sio)->label_data)
  +#define SIO_LABEL_ERROR(sio) ((void*)&(sio)->label_error)
  +#define SIO_LABEL_EOF(sio)   ((void*)&(sio)->label_eof)
   
   struct sio_stage_st {
       sio_halfduplex_t reader;
  @@ -82,23 +90,38 @@
   /****************************************************************************/
   
   static
  -sio_rc_t sio_strategy(sio_t *sio, sio_halfduplex_t *chain, al_t *al)
  +sio_rc_t sio_strategy(sio_t *sio, sio_halfduplex_t *chain)
   {
       sio_rc_t rc;
       sio_halfduplex_t *h;
   
  +    /*
  +     * call stage and direct data upstream/downstream
  +     * according to response code
  +     *
  +     * if we the stage does not return a direction,
  +     * simply end the code
  +     *
  +     * if we drop off the chain, simply result SIO_OK
  +     *
  +     */
       h = chain;
       while (h != NULL) {
  -        rc = h->func(sio, al, h->stage->userdata);
  +        rc = h->func(sio, h->al, h->stage->userdata);
           if (rc == SIO_UPSTREAM)
               h = NEXT(h,hd);
           else if (rc == SIO_DOWNSTREAM)
  -            h = NEXT(h,hd);
  +            h = PREV(h,hd);
  +        else if (rc == SIO_XSTREAM)
  +            h = h->cross;
           else
               break;
       }
   
  -    return SIO_OK;
  +    if (h == NULL)
  +        rc = SIO_OK;
  +
  +    return rc;
   }
   
   /**************************************************************************/
  @@ -118,6 +141,10 @@
       LISTINIT(&sio->readers,hd);
       LISTINIT(&sio->writers,hd);
   
  +    sio->label_data  = SIO_LN_DATA;
  +    sio->label_error = SIO_LN_ERROR;
  +    sio->label_eof   = SIO_LN_EOF;
  +
       *siop = sio;
   
       return SIO_OK;
  @@ -138,7 +165,6 @@
   {
       sio_rc_t rc;
       sio_stage_t *sios;
  -    void *u;
   
       /* argument sanity check(s) */
       if (sio == NULL || siom == NULL || siosp == NULL)
  @@ -151,19 +177,26 @@
       NODEINIT(&sios->reader,hd);
       NODEINIT(&sios->writer,hd);
       sios->module       = siom;
  -    sios->userdata     = u;
  +    sios->userdata     = NULL;
       sios->rw           = SIO_MODE_INVALID;
       sios->reader.func  = siom->input;
       sios->reader.stage = sios;
       sios->writer.func  = siom->output;
       sios->writer.stage = sios;
   
  -    rc = sios->module->init(sio, sios->userdata);
  +    rc = sios->module->init(sio, &sios->userdata);
  +    if (rc != SIO_OK) {
  +        free(sios);
  +        return SIO_RC(rc);
  +    }
  +
  +    *siosp = sios;
   
       return SIO_RC(rc);
   }
   
  -sio_rc_t sio_cofigure_stage(sio_t *sio, sio_stage_t *sios, void *obj, void *value)
  +sio_rc_t sio_configure_stage(sio_t *sio, sio_stage_t *sios,
  +                             void *obj, void *value)
   {
       sio_rc_t rc;
   
  @@ -190,39 +223,104 @@
       return SIO_OK;
   }
   
  +static
  +sio_rc_t sio_create_al(sio_t *sio, sio_mode_t rw)
  +{
  +    al_rc_t arc;
  +    int freereader = 0;
  +
  +    if (rw == SIO_MODE_READ || rw == SIO_MODE_READWRITE) {
  +        if (ISEMPTY(&sio->readers,hd)) {
  +            arc = al_create(&sio->readers.al);
  +            if (arc != AL_OK)
  +                return SIO_ERR_INT;
  +            freereader = 1;
  +        }
  +    }
  +    if (rw == SIO_MODE_WRITE || rw == SIO_MODE_READWRITE) {
  +        if (ISEMPTY(&sio->writers,hd)) {
  +            arc = al_create(&sio->writers.al);
  +            if (arc != AL_OK) {
  +                if (freereader)
  +                    al_destroy(sio->readers.al);
  +                return SIO_ERR_INT;
  +            }
  +        }
  +    }
  +
  +    return SIO_OK;
  +}
  +
  +static
  +sio_rc_t sio_destroy_al(sio_t *sio, sio_mode_t rw)
  +{
  +    if (rw == SIO_MODE_READ || rw == SIO_MODE_READWRITE) {
  +        if (ISEMPTY(&sio->readers,hd)) {
  +            al_destroy(sio->readers.al);
  +            sio->readers.al = NULL;
  +        }
  +    }
  +    if (rw == SIO_MODE_WRITE || rw == SIO_MODE_READWRITE) {
  +        if (ISEMPTY(&sio->writers,hd)) {
  +            al_destroy(sio->writers.al);
  +            sio->writers.al = NULL;
  +        }
  +    }
  +
  +    return SIO_OK;
  +}
  +
   sio_rc_t sio_attach(sio_t *sio, sio_stage_t *sios, sio_mode_t rw)
   {
       sio_rc_t rc;
  +    int freereader = 0;
   
       /* argument sanity check(s) */
       if (sio == NULL || sios == NULL)
           return SIO_RC(SIO_ERR_ARG);
  -
  -    /* is module already attached ? */
  -    if (sios->rw != SIO_MODE_INVALID)
  -        return SIO_RC(SIO_ERR_ARG);
  -
  -    /* prepare module for being attached */
  -    rc = sios->module->open(sio, sios->userdata);
  -    if (rc != SIO_OK) return SIO_RC(rc);
  -
       switch (rw) {
       case SIO_MODE_READ:
  -        ADDTAIL(&sio->readers,hd,&sios->reader);
  -        break;
       case SIO_MODE_WRITE:
  -        ADDTAIL(&sio->writers,hd,&sios->writer);
  -        break;
       case SIO_MODE_READWRITE:
  -        ADDTAIL(&sio->readers,hd,&sios->reader);
  -        ADDTAIL(&sio->writers,hd,&sios->writer);
           break;
       default:
           return SIO_RC(SIO_ERR_ARG);
       }
   
  -    /* Remember the lists that sios has been attached to */
  -    sios->rw = rw;
  +    /* is module already attached ? */
  +    if (sios->rw != SIO_MODE_INVALID)
  +        return SIO_RC(SIO_ERR_ARG);
  +
  +    /* create assembly lines (if aready existing) */
  +    rc = sio_create_al(sio, rw);
  +    if (rc != SIO_OK)
  +        return SIO_RC(rc);
  +
  +    if (rw == SIO_MODE_READ || rw == SIO_MODE_READWRITE) {
  +        rc = sios->module->openr(sio, sio->readers.al, sios->userdata);
  +        if (rc != SIO_OK) {
  +            sio_destroy_al(sio, rw);
  +            return SIO_ERR_INT;
  +        }
  +        ADDTAIL(&sio->readers,hd,&sios->reader);
  +        freereader = 1;
  +    }
  +    if (rw == SIO_MODE_WRITE || rw == SIO_MODE_READWRITE) {
  +        rc = sios->module->openw(sio, sio->writers.al, sios->userdata);
  +        if (rc != SIO_OK) {
  +            if (freereader) {
  +                REMOVE(&sio->readers,hd,&sios->reader);
  +                sios->module->closer(sio, sio->readers.al, sios->userdata);
  +            }
  +            sio_destroy_al(sio, rw);
  +            return SIO_ERR_INT;
  +        }
  +        ADDTAIL(&sio->writers,hd,&sios->writer);
  +    }
  +
  +    sios->reader.al = sio->readers.al;
  +    sios->writer.al = sio->writers.al;
  +    sios->rw        = rw;
   
       return SIO_OK;
   }
  @@ -237,21 +335,33 @@
   
       switch (sios->rw) {
       case SIO_MODE_READ:
  -        REMOVE(&sio->readers,hd,&sios->reader);
  -        break;
       case SIO_MODE_WRITE:
  -        REMOVE(&sio->writers,hd,&sios->writer);
  -        break;
       case SIO_MODE_READWRITE:
  -        REMOVE(&sio->readers,hd,&sios->reader);
  -        REMOVE(&sio->writers,hd,&sios->writer);
           break;
       default:
           return SIO_RC(SIO_ERR_ARG);
  -        break;
       }
   
  -    rc = sios->module->close(sio, sios->userdata);
  +    rc = SIO_OK;
  +    if (sios->rw == SIO_MODE_WRITE || sios->rw == SIO_MODE_READWRITE) {
  +        REMOVE(&sio->writers,hd,&sios->writer);
  +        rc = sios->module->closew(sio, sio->writers.al, sios->userdata);
  +    }
  +    if (sios->rw == SIO_MODE_READ || sios->rw == SIO_MODE_READWRITE) {
  +        REMOVE(&sio->readers,hd,&sios->reader);
  +        if (rc == SIO_OK)
  +            rc = sios->module->closer(sio, sio->readers.al, sios->userdata);
  +        else
  +            /* XXX - double error handling ? */
  +            sios->module->closer(sio, sio->readers.al, sios->userdata);
  +    }
  +
  +    sios->writer.al = NULL;
  +    sios->reader.al = NULL;
  +
  +    sio_destroy_al(sio, sios->rw);
  +
  +    sios->rw = SIO_MODE_INVALID;
   
       return SIO_RC(rc);
   }
  @@ -259,17 +369,23 @@
   sio_rc_t sio_input(sio_t *sio, al_t *al, size_t limit)
   {
       sio_rc_t rc;
  -    al_t *src = sio->readers.al;
  +    sio_halfduplex_t *h;
  +    al_t *src;
       size_t n;
   
       /* argument sanity check(s) */
       if (sio == NULL || al == NULL)
           return SIO_RC(SIO_ERR_ARG);
   
  +    h = HEAD(&sio->readers,hd);
  +    if (h == NULL)
  +        return SIO_RC(SIO_ERR_ARG);
  +
  +    src = h->al;
       n = al_bytes(src);
       if (n == 0) {
   
  -        rc = sio_strategy(sio, HEAD(&sio->readers,hd), src);
  +        rc = sio_strategy(sio, h);
           if (rc != SIO_OK) return SIO_RC(rc);
   
           n = al_bytes(src);
  @@ -286,61 +402,55 @@
       return SIO_OK;
   }
   
  -sio_rc_t sio_discard(sio_t *sio)
  -{
  -    sio_rc_t rc;
  -    al_t *src = sio->readers.al;
  -    size_t n;
  -
  -    /* argument sanity check(s) */
  -    if (sio == NULL)
  -        return SIO_RC(SIO_ERR_ARG);
  -
  -    while ((n = al_bytes(src)) > 0) {
  -        rc = sio_strategy(sio, HEAD(&sio->readers,hd), src);
  -        if (rc != SIO_OK)
  -            break;
  -    }
  -
  -    if (rc == SIO_ERR_EOF)
  -        return SIO_OK;
  -
  -    return SIO_RC(rc);
  -}
  -
   sio_rc_t sio_output(sio_t *sio, al_t *al)
   {
       sio_rc_t rc;
  -    al_t *dst = sio->writers.al;
  +    al_rc_t arc;
  +    sio_halfduplex_t *h;
  +    al_t *dst;
       size_t n;
   
       /* argument sanity check(s) */
       if (sio == NULL || al == NULL)
           return SIO_RC(SIO_ERR_ARG);
   
  +    h = HEAD(&sio->writers,hd);
  +    if (h == NULL)
  +        return SIO_RC(SIO_ERR_ARG);
  +    dst = h->al;
  +
       n = al_bytes(dst);
  -    al_splice(dst, n, 0, al, NULL);
  +    arc = al_splice(dst, n, 0, al, NULL);
  +    if (arc != AL_OK)
  +        return SIO_RC(SIO_ERR_INT);
   
  -    rc = sio_strategy(sio, HEAD(&sio->writers,hd), dst);
  +    rc = sio_strategy(sio, h);
   
       return SIO_RC(rc);
   }
   
  -sio_rc_t sio_flush(sio_t *sio)
  +sio_rc_t sio_push(sio_t *sio)
   {
       sio_rc_t rc;
  -    al_t *dst = sio->writers.al;
  -    size_t n;
  +    al_rc_t arc;
  +    sio_halfduplex_t *h;
  +    al_t *dst;
  +    char eof = '\0';
   
       /* argument sanity check(s) */
       if (sio == NULL)
           return SIO_RC(SIO_ERR_ARG);
   
  -    while ((n = al_bytes(dst)) > 0) {
  -        rc = sio_strategy(sio, HEAD(&sio->writers,hd), sio->writers.al);
  -        if (rc != SIO_OK)
  -            break;
  -    }
  +    h = HEAD(&sio->writers,hd);
  +    if (h == NULL)
  +        return SIO_RC(SIO_ERR_ARG);
  +    dst = h->al;
  +
  +    arc = al_append_bytes(dst, &eof, 1, SIO_LABEL_EOF(sio));
  +    if (arc != AL_OK)
  +        return SIO_RC(SIO_ERR_INT);
  +
  +    rc = sio_strategy(sio, h);
   
       return SIO_RC(rc);
   }
  @@ -351,12 +461,16 @@
       sio_rc_t rc;
       al_t *al;
   
  +    if (n == 0)
  +        return SIO_OK;
  +
       arc = al_create(&al);
       if (arc != AL_OK) return SIO_RC(SIO_ERR_INT);
   
       rc = sio_input(sio, al, n);
       if (rc == AL_OK) {
  -        arc = al_flatten(al, 0, n, dst, actualp);
  +        arc = al_flatten(al, 0, n, AL_FORWARD_SPAN, SIO_LABEL_DATA(sio),
  +                         dst, actualp);
           if (arc != AL_OK)
               rc = SIO_ERR_INT;
       }
  @@ -373,10 +487,13 @@
       sio_rc_t rc;
       al_t *al;
   
  +    if (n == 0)
  +        return SIO_OK;
  +
       arc = al_create(&al);
       if (arc != AL_OK) return SIO_RC(SIO_ERR_INT);
   
  -    arc = al_append_bytes(al, src, n);
  +    arc = al_append_bytes(al, src, n, SIO_LABEL_DATA(sio));
       if (arc != AL_OK)
           rc = SIO_ERR_INT;
       else
  @@ -401,9 +518,32 @@
       case SIO_ERR_INT:    mess = "Internal Error"; break;
       case SIO_UPSTREAM:   mess = "Invoke Upstream Stage"; break;
       case SIO_DOWNSTREAM: mess = "Invoke Downstream Stage"; break;
  +    case SIO_XSTREAM:    mess = "Invoke Crossstream Stage"; break;
       default:             mess = "Invalid Result Code"; break;
       }
   
       return mess;
  +}
  +
  +sio_rc_t sio_label(sio_t *sio, sio_labelnum_t ln, void **p)
  +{
  +    void *label;
  +
  +    switch (ln) {
  +    case SIO_LN_DATA:
  +        label = SIO_LABEL_DATA(sio);
  +        break;
  +    case SIO_LN_ERROR:
  +        label = SIO_LABEL_ERROR(sio);
  +        break;
  +    case SIO_LN_EOF:
  +        label = SIO_LABEL_EOF(sio);
  +        break;
  +    default:
  +        return SIO_ERR_ARG;
  +    }
  +
  +    *p = label;
  +    return SIO_OK;
   }
   
  Index: ossp-pkg/sio/sio.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 sio.h
  --- ossp-pkg/sio/sio.h	22 Oct 2002 12:57:20 -0000	1.1
  +++ ossp-pkg/sio/sio.h	23 Oct 2002 17:05:10 -0000	1.2
  @@ -28,6 +28,9 @@
   **  sio.h: stream I/O public API definition
   */
   
  +#ifndef __SIO_H__
  +#define __SIO_H__
  +
   typedef enum {
       SIO_OK,
       SIO_ERR_ARG,
  @@ -36,7 +39,8 @@
       SIO_ERR_SYS,
       SIO_ERR_INT,
       SIO_UPSTREAM,
  -    SIO_DOWNSTREAM
  +    SIO_DOWNSTREAM,
  +    SIO_XSTREAM
   } sio_rc_t;
   
   typedef enum {
  @@ -71,4 +75,8 @@
   sio_rc_t sio_read(sio_t *sio, char *dst, size_t n, size_t *actualp);
   sio_rc_t sio_write(sio_t *sio, char *src, size_t n, size_t *actualp);
   
  +sio_rc_t sio_push(sio_t *sio);
  +
   const char *sio_error(sio_rc_t rc);
  +
  +#endif /* __SIO_H__ */
  Index: ossp-pkg/sio/sio_buffer.c
  ============================================================
  $ cvs update -p -r1.1 sio_buffer.c
  #include <stddef.h>
  #include <stdlib.h>
  #include <string.h>
  
  #include "al.h"
  #include "sio.h"
  #include "sio_module.h"
  
  typedef struct {
      size_t outputsize;
      al_tx_t *outputtx;
      size_t inputsize;
      al_t *input, *output;
  } private_t;
  
  /*
   * create stage
   *
   * allocate private instance data
   */
  static
  sio_rc_t buffer_init(sio_t *sio, void **u)
  {
      private_t *mydata;
      
      mydata = (private_t *)malloc(sizeof(private_t));
      if (mydata == NULL)
          return SIO_ERR_MEM;
  
      mydata->inputsize    = 0;
      mydata->outputsize   = 0;
  
      *u = mydata;
  
      return SIO_OK;
  }
  
  /*
   * configure stage
   *
   * pass two void pointers
   */
  static
  sio_rc_t buffer_configure(sio_t *sio, void *u, void *obj, void *val)
  {
      private_t *mydata = (private_t *)u;
      const char *name = (const char *)obj;
  
      if (!strcmp(name, "inputsize")) {
          mydata->inputsize = *(size_t *)val;
      } else if (!strcmp(name, "outputsize")) {
          mydata->outputsize = *(size_t *)val;
      } else {
          return SIO_ERR_ARG;
      }
  
      return SIO_OK;
  }
  
  /*
   * destroy stage
   */
  static
  sio_rc_t buffer_cleanup(sio_t *sio, void *u)
  {
      private_t *mydata = (private_t *)u;
  
      free(mydata);
  
      return SIO_OK;
  }
  
  static
  sio_rc_t buffer_openr(sio_t *sio, al_t *al, void *u)
  {
      private_t *mydata = (private_t *)u;
      al_rc_t arc;
  
      arc = al_create(&mydata->input);
      if (arc != AL_OK)
          return SIO_ERR_INT;
  
      return SIO_OK;
  }
  
  static
  sio_rc_t buffer_closer(sio_t *sio, al_t *al, void *u)
  {
      private_t *mydata = (private_t *)u;
  
      al_destroy(mydata->input);
      mydata->input = NULL;
  
      return SIO_OK;
  }
  
  static
  sio_rc_t buffer_openw(sio_t *sio, al_t *al, void *u)
  {
      private_t *mydata = (private_t *)u;
      al_rc_t arc;
  
      arc = al_txalloc(al, &mydata->outputtx);
      if (arc != AL_OK)
          return SIO_ERR_INT;
  
      arc = al_create(&mydata->output);
      if (arc != AL_OK) {
          al_txfree(al, mydata->outputtx);
          return SIO_ERR_INT;
      }
  
      return SIO_OK;
  }
  
  static
  sio_rc_t buffer_closew(sio_t *sio, al_t *al, void *u)
  {
      private_t *mydata = (private_t *)u;
  
      al_destroy(mydata->output);
      mydata->output = NULL;
      al_txfree(al, mydata->outputtx);
      mydata->outputtx = NULL;
  
      return SIO_OK;
  }
  
  static
  sio_rc_t buffer_inout(sio_t *sio, al_t *al, al_t *buf, size_t size,
                        sio_rc_t up, sio_rc_t down)
  {
      size_t avail, data, needed;
      al_rc_t arc;
      al_label_t label;
  
      arc = al_splice(buf, al_bytes(buf), 0, al, NULL);
      if (arc != AL_OK)
          return SIO_ERR_INT;
  
      avail = al_bytes(buf);
      if (avail <= 0)
          return down;
  
      arc = al_firstlabel(buf, 0, 1, AL_FORWARD, NULL, &label);
      if (arc != AL_OK)
          return SIO_ERR_INT;
  
      al_flatten(buf, 0, avail, AL_FORWARD_SPAN, label, NULL, &data);
  
      needed = size;
      if (data < avail)
          needed = 1;
  
      if (data >= needed) {
          if (data >= size)
              data = size;
          al_splice(buf, 0, data, NULL, al);
          return up;
      }
  
      return down;
  }
  
  static
  sio_rc_t buffer_input(sio_t *sio, al_t *al, void *u)
  {
      private_t *mydata = (private_t *)u;
  
      return buffer_inout(sio, al, mydata->input, mydata->inputsize,
                          SIO_DOWNSTREAM, SIO_UPSTREAM);
  }
  
  static
  sio_rc_t buffer_output(sio_t *sio, al_t *al, void *u)
  {
      private_t *mydata = (private_t *)u;
  
      return buffer_inout(sio, al, mydata->output, mydata->outputsize,
                          SIO_UPSTREAM, SIO_DOWNSTREAM);
  }
  
  sio_module_t sio_module_buffer = {
      "buffer",
      buffer_init,
      buffer_configure,
      buffer_cleanup,
      buffer_openr,
      buffer_closer,
      buffer_openw,
      buffer_closew,
      buffer_input,
      buffer_output
  };
  
  Index: ossp-pkg/sio/sio_fd.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 sio_fd.c
  --- ossp-pkg/sio/sio_fd.c	22 Oct 2002 12:57:20 -0000	1.1
  +++ ossp-pkg/sio/sio_fd.c	23 Oct 2002 17:05:10 -0000	1.2
  @@ -10,10 +10,17 @@
   #include "sio_module.h"
   
   typedef struct {
  +    char *mem;
  +    size_t size;
  +} buffer_t;
  +
  +typedef struct {
       int fd;
  -    size_t buflen;
  -    char *buf;
  -    size_t actual;
  +    buffer_t input;
  +    size_t written;
  +    void *label_data;
  +    void *label_error;
  +    void *label_eof;
   } private_t;
   
   /*
  @@ -30,9 +37,14 @@
       if (mydata == NULL)
           return SIO_ERR_MEM;
   
  -    mydata->fd     = -1;
  -    mydata->buflen = 0;
  -    mydata->buf    = NULL;
  +    mydata->fd           = -1;
  +
  +    mydata->input.mem    = NULL;
  +    mydata->input.size   = 0;
  +
  +    sio_label(sio, SIO_LN_DATA,  &mydata->label_data);
  +    sio_label(sio, SIO_LN_ERROR, &mydata->label_error);
  +    sio_label(sio, SIO_LN_EOF,   &mydata->label_eof);
   
       *u = mydata;
   
  @@ -44,20 +56,15 @@
    *
    */
   static
  -sio_rc_t fd_configure(sio_t *sio, void *u, void *obj, void *value)
  +sio_rc_t fd_configure(sio_t *sio, void *u, void *obj, void *val)
   {
       private_t *mydata = (private_t *)u;
       const char *name = (const char *)obj;
  -    char *newbuf;
   
       if (!strcmp(name, "fd")) {
  -        mydata->fd = *(int *)value;
  +        mydata->fd = *(int *)val;
       } else if (!strcmp(name, "buflen")) {
  -        mydata->buflen = *(int *)value;
  -        newbuf = realloc(mydata->buf, mydata->buflen);
  -        if (newbuf == NULL)
  -            return SIO_ERR_MEM;
  -        mydata->buf = newbuf;
  +        mydata->input.size = *(size_t *)val;
       } else {
           return SIO_ERR_ARG;
       }
  @@ -71,22 +78,50 @@
   static
   sio_rc_t fd_cleanup(sio_t *sio, void *u)
   {
  +    return SIO_OK;
  +}
  +
  +static
  +sio_rc_t fd_openr(sio_t *sio, al_t *al, void *u)
  +{
       private_t *mydata = (private_t *)u;
  +    buffer_t *buf = &mydata->input;
  +    char *p;
  +    size_t n;
  +
  +    n = buf->size;
  +    p = realloc(buf->mem, n);
  +    if (p != NULL)
  +        buf->mem = p;
   
  -    if (mydata->buf) free(mydata->buf);
  -    free(mydata);
  +    if (buf->mem == NULL)
  +        return SIO_ERR_MEM;
   
       return SIO_OK;
   }
   
   static
  -sio_rc_t fd_open(sio_t *sio, void *u)
  +sio_rc_t fd_closer(sio_t *sio, al_t *al, void *u)
  +{
  +    private_t *mydata = (private_t *)u;
  +    buffer_t *buf = &mydata->input;
  +
  +    if (buf->mem != NULL) {
  +        free(buf->mem);
  +        buf->mem = NULL;
  +    }
  +
  +    return SIO_OK;
  +}
  +
  +static
  +sio_rc_t fd_openw(sio_t *sio, al_t *al, void *u)
   {
       return SIO_OK;
   }
   
   static
  -sio_rc_t fd_close(sio_t *sio, void *u)
  +sio_rc_t fd_closew(sio_t *sio, al_t *al, void *u)
   {
       return SIO_OK;
   }
  @@ -95,18 +130,21 @@
   sio_rc_t fd_input(sio_t *sio, al_t *al, void *u)
   {
       private_t *mydata = (private_t *)u;
  +    buffer_t *buf = &mydata->input;
       size_t actual;
   
  -    if (mydata->buf == NULL)
  -        return SIO_ERR_ARG;
  -
  -    actual = read(mydata->fd, mydata->buf, mydata->buflen);
  -    if (actual < 0)
  -        return SIO_ERR_SYS;
  +    actual = read(mydata->fd, buf->mem, buf->size);
  +    if (actual < 0) {
  +        al_append_bytes(al, NULL, 0, mydata->label_error);
  +        return SIO_OK;
  +    } else if (actual == 0) {
  +        al_append_bytes(al, NULL, 0, mydata->label_eof);
  +        return SIO_OK;
  +    }
   
  -    al_append_bytes(al, mydata->buf, actual);
  +    al_append_bytes(al, buf->mem, actual, mydata->label_data);
   
  -    return SIO_OK;
  +    return SIO_DOWNSTREAM;
   }
   
   static
  @@ -123,7 +161,7 @@
       if (actual < 0)
           return AL_ERR_EOF;
   
  -    mydata->actual += actual;
  +    mydata->written += actual;
   
       return AL_OK;
   }
  @@ -135,24 +173,27 @@
       al_rc_t arc;
       size_t n = al_bytes(al);
   
  -    mydata->actual = 0;
  +    mydata->written = 0;
   
  -    arc = al_traverse_cb(al, 0, n, AL_FORWARD, fd_output_chunk, u);
  +    arc = al_traverse_cb(al, 0, n, AL_FORWARD, mydata->label_data,
  +                         fd_output_chunk, u);
       if (arc != AL_OK) return SIO_ERR_INT;
   
  -    arc = al_splice(al, 0, mydata->actual, NULL, NULL);
  +    arc = al_splice(al, 0, mydata->written, NULL, NULL);
       if (arc != AL_OK) return SIO_ERR_INT;
   
  -    return SIO_OK;
  +    return SIO_DOWNSTREAM;
   }
   
  -sio_module_t sio_fd_module = {
  +sio_module_t sio_module_fd = {
       "fd",
       fd_init,
       fd_configure,
       fd_cleanup,
  -    fd_open,
  -    fd_close,
  +    fd_openr,
  +    fd_closer,
  +    fd_openw,
  +    fd_closew,
       fd_input,
       fd_output
   };
  Index: ossp-pkg/sio/sio_hole.c
  ============================================================
  $ cvs update -p -r1.1 sio_hole.c
  #include <stddef.h>
  #include <stdlib.h>
  
  #include "al.h"
  #include "sio.h"
  #include "sio_module.h"
  
  typedef struct {
  } private_t;
  
  /*
   * create stage
   *
   * allocate private instance data
   */
  static
  sio_rc_t hole_init(sio_t *sio, void **u)
  {
      private_t *mydata;
      
      mydata = (private_t *)malloc(sizeof(private_t));
      if (mydata == NULL)
          return SIO_ERR_MEM;
  
      *u = mydata;
  
      return SIO_OK;
  }
  
  /*
   * configure stage
   *
   * pass two void pointers
   */
  static
  sio_rc_t hole_configure(sio_t *sio, void *u, void *obj, void *val)
  {
      return SIO_ERR_ARG;
  }
  
  /*
   * destroy stage
   */
  static
  sio_rc_t hole_cleanup(sio_t *sio, void *u)
  {
      private_t *mydata = (private_t *)u;
  
      free(mydata);
  
      return SIO_OK;
  }
  
  static
  sio_rc_t hole_openr(sio_t *sio, al_t *al, void *u)
  {
      return SIO_OK;
  }
  
  static
  sio_rc_t hole_closer(sio_t *sio, al_t *al, void *u)
  {
      return SIO_OK;
  }
  
  static
  sio_rc_t hole_openw(sio_t *sio, al_t *al, void *u)
  {
      return SIO_OK;
  }
  
  static
  sio_rc_t hole_closew(sio_t *sio, al_t *al, void *u)
  {
      return SIO_OK;
  }
  
  static
  sio_rc_t hole_input(sio_t *sio, al_t *al, void *u)
  {
      size_t feed = al_bytes(al);
  
      /* drop all data into the bit bucket */
      if (feed > 0) {
          al_splice(al, 0, feed, NULL, NULL);
          return SIO_DOWNSTREAM;
      }
  
      return SIO_UPSTREAM;
  }
  
  static
  sio_rc_t hole_output(sio_t *sio, al_t *al, void *u)
  {
      /* drop all data into the bit bucket */
      al_splice(al, 0, al_bytes(al), NULL, NULL);
  
      return SIO_DOWNSTREAM;
  }
  
  sio_module_t sio_module_hole = {
      "hole",
      hole_init,
      hole_configure,
      hole_cleanup,
      hole_openr,
      hole_closer,
      hole_openw,
      hole_closew,
      hole_input,
      hole_output
  };
  
  Index: ossp-pkg/sio/sio_module.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 sio_module.h
  --- ossp-pkg/sio/sio_module.h	22 Oct 2002 12:57:20 -0000	1.1
  +++ ossp-pkg/sio/sio_module.h	23 Oct 2002 17:05:10 -0000	1.2
  @@ -3,9 +3,18 @@
       sio_rc_t (*init)      (sio_t *, void **);
       sio_rc_t (*configure) (sio_t *, void *, void *, void *);
       sio_rc_t (*cleanup)   (sio_t *, void *);
  -    sio_rc_t (*open)      (sio_t *, void *);
  -    sio_rc_t (*close)     (sio_t *, void *);
  +    sio_rc_t (*openr)     (sio_t *, al_t *, void *);
  +    sio_rc_t (*closer)    (sio_t *, al_t *, void *);
  +    sio_rc_t (*openw)     (sio_t *, al_t *, void *);
  +    sio_rc_t (*closew)    (sio_t *, al_t *, void *);
       sio_rc_t (*input)     (sio_t *, al_t *, void *);
       sio_rc_t (*output)    (sio_t *, al_t *, void *);
   };
   
  +typedef enum {
  +    SIO_LN_DATA,
  +    SIO_LN_ERROR,
  +    SIO_LN_EOF
  +} sio_labelnum_t;
  +
  +sio_rc_t sio_label(sio_t *, sio_labelnum_t label, void **labelp);
  Index: ossp-pkg/sio/sio_null.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 sio_null.c
  --- ossp-pkg/sio/sio_null.c	22 Oct 2002 12:57:20 -0000	1.1
  +++ ossp-pkg/sio/sio_null.c	23 Oct 2002 17:05:10 -0000	1.2
  @@ -63,36 +63,50 @@
   }
   
   static
  -sio_rc_t null_open(sio_t *sio, void *u)
  +sio_rc_t null_openr(sio_t *sio, al_t *al, void *u)
   {
       return SIO_OK;
   }
   
   static
  -sio_rc_t null_close(sio_t *sio, void *u)
  +sio_rc_t null_closer(sio_t *sio, al_t *al, void *u)
   {
       return SIO_OK;
   }
   
   static
  -sio_rc_t null_input(sio_t *sio, al_t *al, void *u)
  +sio_rc_t null_openw(sio_t *sio, al_t *al, void *u)
   {
       return SIO_OK;
   }
   
   static
  -sio_rc_t null_output(sio_t *sio, al_t *al, void *u)
  +sio_rc_t null_closew(sio_t *sio, al_t *al, void *u)
   {
       return SIO_OK;
   }
   
  -sio_module_t sio_null_module = {
  +static
  +sio_rc_t null_input(sio_t *sio, al_t *al, void *u)
  +{
  +    return SIO_DOWNSTREAM;
  +}
  +
  +static
  +sio_rc_t null_output(sio_t *sio, al_t *al, void *u)
  +{
  +    return SIO_UPSTREAM;
  +}
  +
  +sio_module_t sio_module_null = {
       "null",
       null_init,
       null_configure,
       null_cleanup,
  -    null_open,
  -    null_close,
  +    null_openr,
  +    null_closer,
  +    null_openw,
  +    null_closew,
       null_input,
       null_output
   };
  Index: ossp-pkg/sio/sio_test.c
  ============================================================
  $ cvs update -p -r1.1 sio_test.c
  #include <stdio.h>
  
  #include "al.h"
  #include "sio.h"
  
  extern sio_module_t sio_module_fd;
  extern sio_module_t sio_module_buffer;
  
  #define e(f) rc = f; printf("%s = %s\n",#f, sio_error(rc)); fflush(stdout);
  
  int main(int argc, char *argv[])
  {
      sio_rc_t rc;
      sio_t *sio;
      sio_stage_t *sios_fd, *sios_buffer;
      int fd;
      char buf[] = "Hello world\n";
      size_t actual;
      size_t buflen = 1000;
  
      fd = fileno(stdout);
  
      e(sio_create(&sio));
  
      e(sio_create_stage(sio, &sio_module_buffer, &sios_buffer));
      e(sio_configure_stage(sio, sios_buffer, "outputsize", &buflen));
      e(sio_create_stage(sio, &sio_module_fd, &sios_fd));
      e(sio_configure_stage(sio, sios_fd, "fd", &fd));
  
      e(sio_attach(sio, sios_buffer, SIO_MODE_WRITE));
      e(sio_attach(sio, sios_fd, SIO_MODE_WRITE));
  
      e(sio_write(sio, buf, sizeof(buf)-1, &actual));
  
      e(sio_push(sio));
  
      e(sio_detach(sio, sios_fd));
      e(sio_detach(sio, sios_buffer));
  
      e(sio_destroy_stage(sio, sios_fd));
      e(sio_destroy_stage(sio, sios_buffer));
  
      e(sio_destroy(sio));
  
      return 0;
  }

From ossp-cvs-owner@ossp.org  Thu Oct 24 09:46:02 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 475C2767F9; Thu, 24 Oct 2002 09:46:02 +0200 (CEST)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio.c
Message-Id: <20021024074602.475C2767F9@mail.ossp.org>
Date: Thu, 24 Oct 2002 09:46:02 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   24-Oct-2002 09:46:02
  Branch: HEAD                             Handle: 2002102408460100

  Modified files:
    ossp-pkg/sio            sio.c

  Log:
    initialize cross pointers

  Summary:
    Revision    Changes     Path
    1.3         +3  -0      ossp-pkg/sio/sio.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 sio.c
  --- ossp-pkg/sio/sio.c	23 Oct 2002 17:05:10 -0000	1.2
  +++ ossp-pkg/sio/sio.c	24 Oct 2002 07:46:01 -0000	1.3
  @@ -184,6 +184,9 @@
       sios->writer.func  = siom->output;
       sios->writer.stage = sios;
   
  +    sios->reader.cross = &sios->writer;
  +    sios->writer.cross = &sios->reader;
  +
       rc = sios->module->init(sio, &sios->userdata);
       if (rc != SIO_OK) {
           free(sios);

From ossp-cvs-owner@ossp.org  Thu Oct 24 11:07:52 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D647776527; Thu, 24 Oct 2002 11:07:51 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog pth_high.c pth_p.h.in pth_util.c
Message-Id: <20021024090751.D647776527@mail.ossp.org>
Date: Thu, 24 Oct 2002 11:07:51 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Oct-2002 11:07:51
  Branch: HEAD                             Handle: 2002102410075100

  Modified files:
    ossp-pkg/pth            ChangeLog pth_high.c pth_p.h.in pth_util.c

  Log:
    Added POSIX-compliant sanity checks for bad filedescriptors
    to mostly all filedescriptor-based I/O functions in pth_high.c

  Summary:
    Revision    Changes     Path
    1.578       +4  -0      ossp-pkg/pth/ChangeLog
    1.90        +22 -16     ossp-pkg/pth/pth_high.c
    1.34        +5  -0      ossp-pkg/pth/pth_p.h.in
    1.22        +8  -7      ossp-pkg/pth/pth_util.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.577 -r1.578 ChangeLog
  --- ossp-pkg/pth/ChangeLog	23 Oct 2002 14:04:00 -0000	1.577
  +++ ossp-pkg/pth/ChangeLog	24 Oct 2002 09:07:51 -0000	1.578
  @@ -21,6 +21,10 @@
   
     Changes between 1.4.1 and 1.5.0 (27-Jan-2002 to xx-Oct-2002)
   
  +   *) Added POSIX-compliant sanity checks for bad filedescriptors
  +      to mostly all filedescriptor-based I/O functions in pth_high.c
  +      [Ralf S. Engelschall]
  +
      *) Added pth_nanosleep() function.
         [Nick Hudson <skrll@netbsd.org>, Ralf S. Engelschall]
   
  Index: ossp-pkg/pth/pth_high.c
  ============================================================
  $ cvs diff -u -r1.89 -r1.90 pth_high.c
  --- ossp-pkg/pth/pth_high.c	23 Oct 2002 14:04:00 -0000	1.89
  +++ ossp-pkg/pth/pth_high.c	24 Oct 2002 09:07:51 -0000	1.90
  @@ -297,8 +297,8 @@
       pth_implicit_init();
       pth_debug2("pth_select_ev: called from thread \"%s\"", pth_current->name);
   
  -    /* sanity checking */
  -    if (!pth_util_fd_valid(nfd-1))
  +    /* POSIX compliance */
  +    if (nfd < 0 || nfd > FD_SETSIZE)
           return_errno(-1, EINVAL);
   
       /* first deal with the special situation of a plain microsecond delay */
  @@ -544,6 +544,10 @@
       pth_implicit_init();
       pth_debug2("pth_connect_ev: enter from thread \"%s\"", pth_current->name);
   
  +    /* POSIX compliance */
  +    if (!pth_util_fd_valid(s))
  +        return_errno(-1, EBADF);
  +
       /* force filedescriptor into non-blocking mode */
       fdmode = pth_fdmode(s, PTH_FDMODE_NONBLOCK);
   
  @@ -595,6 +599,10 @@
       pth_implicit_init();
       pth_debug2("pth_accept_ev: enter from thread \"%s\"", pth_current->name);
   
  +    /* POSIX compliance */
  +    if (!pth_util_fd_valid(s))
  +        return_errno(-1, EBADF);
  +
       /* force filedescriptor into non-blocking mode */
       fdmode = pth_fdmode(s, PTH_FDMODE_NONBLOCK);
   
  @@ -653,6 +661,8 @@
       /* POSIX compliance */
       if (nbytes == 0)
           return 0;
  +    if (!pth_util_fd_valid(fd))
  +        return_errno(-1, EBADF);
   
       /* poll filedescriptor if not already in non-blocking operation */
       if (pth_fdmode(fd, PTH_FDMODE_POLL) == PTH_FDMODE_BLOCK) {
  @@ -660,8 +670,6 @@
           /* now directly poll filedescriptor for readability
              to avoid unneccessary (and resource consuming because of context
              switches, etc) event handling through the scheduler */
  -        if (!pth_util_fd_valid(fd))
  -            return_errno(-1, EBADF);
           FD_ZERO(&fds);
           FD_SET(fd, &fds);
           delay.tv_sec  = 0;
  @@ -720,6 +728,8 @@
       /* POSIX compliance */
       if (nbytes == 0)
           return 0;
  +    if (!pth_util_fd_valid(fd))
  +        return_errno(-1, EBADF);
   
       /* force filedescriptor into non-blocking mode */
       fdmode = pth_fdmode(fd, PTH_FDMODE_NONBLOCK);
  @@ -730,10 +740,6 @@
           /* now directly poll filedescriptor for writeability
              to avoid unneccessary (and resource consuming because of context
              switches, etc) event handling through the scheduler */
  -        if (!pth_util_fd_valid(fd)) {
  -            pth_fdmode(fd, fdmode);
  -            return_errno(-1, EBADF);
  -        }
           FD_ZERO(&fds);
           FD_SET(fd, &fds);
           delay.tv_sec  = 0;
  @@ -817,6 +823,8 @@
       /* POSIX compliance */
       if (iovcnt <= 0 || iovcnt > UIO_MAXIOV)
           return_errno(-1, EINVAL);
  +    if (!pth_util_fd_valid(fd))
  +        return_errno(-1, EBADF);
   
       /* poll filedescriptor if not already in non-blocking operation */
       if (pth_fdmode(fd, PTH_FDMODE_POLL) == PTH_FDMODE_BLOCK) {
  @@ -824,8 +832,6 @@
           /* first directly poll filedescriptor for readability
              to avoid unneccessary (and resource consuming because of context
              switches, etc) event handling through the scheduler */
  -        if (!pth_util_fd_valid(fd))
  -            return_errno(-1, EBADF);
           FD_ZERO(&fds);
           FD_SET(fd, &fds);
           delay.tv_sec  = 0;
  @@ -939,6 +945,8 @@
       /* POSIX compliance */
       if (iovcnt <= 0 || iovcnt > UIO_MAXIOV)
           return_errno(-1, EINVAL);
  +    if (!pth_util_fd_valid(fd))
  +        return_errno(-1, EBADF);
   
       /* force filedescriptor into non-blocking mode */
       fdmode = pth_fdmode(fd, PTH_FDMODE_NONBLOCK);
  @@ -968,12 +976,6 @@
           /* first directly poll filedescriptor for writeability
              to avoid unneccessary (and resource consuming because of context
              switches, etc) event handling through the scheduler */
  -        if (!pth_util_fd_valid(fd)) {
  -            pth_fdmode(fd, fdmode);
  -            if (iovcnt > sizeof(tiov_stack))
  -                free(tiov);
  -            return_errno(-1, EBADF);
  -        }
           FD_ZERO(&fds);
           FD_SET(fd, &fds);
           delay.tv_sec  = 0;
  @@ -1244,6 +1246,8 @@
       /* POSIX compliance */
       if (nbytes == 0)
           return 0;
  +    if (!pth_util_fd_valid(fd))
  +        return_errno(-1, EBADF);
   
       /* poll filedescriptor if not already in non-blocking operation */
       if (pth_fdmode(fd, PTH_FDMODE_POLL) == PTH_FDMODE_BLOCK) {
  @@ -1323,6 +1327,8 @@
       /* POSIX compliance */
       if (nbytes == 0)
           return 0;
  +    if (!pth_util_fd_valid(fd))
  +        return_errno(-1, EBADF);
   
       /* force filedescriptor into non-blocking mode */
       fdmode = pth_fdmode(fd, PTH_FDMODE_NONBLOCK);
  Index: ossp-pkg/pth/pth_p.h.in
  ============================================================
  $ cvs diff -u -r1.33 -r1.34 pth_p.h.in
  --- ossp-pkg/pth/pth_p.h.in	23 Oct 2002 14:04:00 -0000	1.33
  +++ ossp-pkg/pth/pth_p.h.in	24 Oct 2002 09:07:51 -0000	1.34
  @@ -104,6 +104,11 @@
   #endif
   #endif
   
  +/* fallback definition for fdset_t size */
  +#if !defined(FD_SETSIZE)
  +#define FD_SETSIZE 1024
  +#endif
  +
   /* fallback definition for struct timespec */
   #ifndef HAVE_STRUCT_TIMESPEC
   struct timespec {
  Index: ossp-pkg/pth/pth_util.c
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 pth_util.c
  --- ossp-pkg/pth/pth_util.c	27 Jan 2002 13:15:28 -0000	1.21
  +++ ossp-pkg/pth/pth_util.c	24 Oct 2002 09:07:51 -0000	1.22
  @@ -92,13 +92,14 @@
   }
   
   /* check whether a file-descriptor is valid */
  -#if cpp
  -#if !defined(FD_SETSIZE)
  -#define FD_SETSIZE 1024
  -#endif
  -#define pth_util_fd_valid(fd) \
  -    ((fd) >= 0 && (fd) <= (FD_SETSIZE-1))
  -#endif
  +intern int pth_util_fd_valid(int fd)
  +{
  +    if (fd < 0 || fd >= FD_SETSIZE)
  +        return FALSE;
  +    if (fcntl(fd, F_GETFL) == -1 && errno == EBADF)
  +        return FALSE;
  +    return TRUE;
  +}
   
   /* merge input fd set into output fds */
   intern void pth_util_fds_merge(int nfd,

From ossp-cvs-owner@ossp.org  Thu Oct 24 11:39:01 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id ABC8676527; Thu, 24 Oct 2002 11:39:01 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth pth_msg.c
Message-Id: <20021024093901.ABC8676527@mail.ossp.org>
Date: Thu, 24 Oct 2002 11:39:01 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Oct-2002 11:39:01
  Branch: HEAD                             Handle: 2002102410390100

  Modified files:
    ossp-pkg/pth            pth_msg.c

  Log:
    fix type

  Summary:
    Revision    Changes     Path
    1.24        +1  -1      ossp-pkg/pth/pth_msg.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/pth_msg.c
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 pth_msg.c
  --- ossp-pkg/pth/pth_msg.c	23 Oct 2002 13:55:49 -0000	1.23
  +++ ossp-pkg/pth/pth_msg.c	24 Oct 2002 09:39:01 -0000	1.24
  @@ -131,7 +131,7 @@
       pth_message_t *m;
   
       if (mp == NULL)
  -        return_errno(FALSE, EINVAL);
  +        return_errno(NULL, EINVAL);
       m = (pth_message_t *)pth_ring_pop(&mp->mp_queue);
       return m;
   }

From ossp-cvs-owner@ossp.org  Thu Oct 24 15:54:36 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5910176527; Thu, 24 Oct 2002 15:54:36 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth devtool.conf
Message-Id: <20021024135436.5910176527@mail.ossp.org>
Date: Thu, 24 Oct 2002 15:54:36 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Oct-2002 15:54:36
  Branch: HEAD                             Handle: 2002102414543500

  Modified files:
    ossp-pkg/pth            devtool.conf

  Log:
    expect libtool 1.4.3 (accept 1.4.x) and fix Autoconf check

  Summary:
    Revision    Changes     Path
    1.6         +2  -2      ossp-pkg/pth/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/pth/devtool.conf
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 devtool.conf
  --- ossp-pkg/pth/devtool.conf	15 Oct 2002 18:23:52 -0000	1.5
  +++ ossp-pkg/pth/devtool.conf	24 Oct 2002 13:54:35 -0000	1.6
  @@ -4,8 +4,8 @@
   
   %autogen
       @autogen shtool   1.6.1 "1.6.*" echo version scpp mkdir install fixperm tarball
  -    @autogen libtool  1.4.2 "1.4*"
  -    @autogen autoconf 2.54  "2.5.*"
  +    @autogen libtool  1.4.3 "1.4*"
  +    @autogen autoconf 2.54  "2.5*"
   
   %autoclean
       @autoclean shtool

From ossp-cvs-owner@ossp.org  Thu Oct 24 16:01:38 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 33BD476537; Thu, 24 Oct 2002 16:01:38 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog pth_lib.c
Message-Id: <20021024140138.33BD476537@mail.ossp.org>
Date: Thu, 24 Oct 2002 16:01:38 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Oct-2002 16:01:38
  Branch: HEAD                             Handle: 2002102415013700

  Modified files:
    ossp-pkg/pth            ChangeLog pth_lib.c

  Log:
    Cleaned and speeded up the pth_exit() processing.

  Summary:
    Revision    Changes     Path
    1.579       +3  -0      ossp-pkg/pth/ChangeLog
    1.52        +28 -24     ossp-pkg/pth/pth_lib.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.578 -r1.579 ChangeLog
  --- ossp-pkg/pth/ChangeLog	24 Oct 2002 09:07:51 -0000	1.578
  +++ ossp-pkg/pth/ChangeLog	24 Oct 2002 14:01:37 -0000	1.579
  @@ -21,6 +21,9 @@
   
     Changes between 1.4.1 and 1.5.0 (27-Jan-2002 to xx-Oct-2002)
   
  +   *) Cleaned and speeded up the pth_exit() processing.
  +      [Ralf S. Engelschall]
  +
      *) Added POSIX-compliant sanity checks for bad filedescriptors
         to mostly all filedescriptor-based I/O functions in pth_high.c
         [Ralf S. Engelschall]
  Index: ossp-pkg/pth/pth_lib.c
  ============================================================
  $ cvs diff -u -r1.51 -r1.52 pth_lib.c
  --- ossp-pkg/pth/pth_lib.c	20 Oct 2002 11:45:10 -0000	1.51
  +++ ossp-pkg/pth/pth_lib.c	24 Oct 2002 14:01:37 -0000	1.52
  @@ -203,9 +203,11 @@
   
       /* just jump into the start routine */
       data = (*pth_current->start_func)(pth_current->start_arg);
  -    /* and do an implicit exit of the tread with the result value */
  +
  +    /* and do an implicit exit of the thread with the result value */
       pth_exit(data);
  -    /* no return! */
  +
  +    /* NOTREACHED */
       abort();
   }
   pth_t pth_spawn(pth_attr_t attr, void *(*func)(void *), void *arg)
  @@ -227,9 +229,9 @@
   
       /* allocate a new thread control block */
       stacksize = (attr == PTH_ATTR_DEFAULT ? 64*1024 : attr->a_stacksize);
  -    stackaddr = (attr == PTH_ATTR_DEFAULT ? NULL : attr->a_stackaddr);
  +    stackaddr = (attr == PTH_ATTR_DEFAULT ? NULL    : attr->a_stackaddr);
       if ((t = pth_tcb_alloc(stacksize, stackaddr)) == NULL)
  -        return NULL; /* errno is inherited */
  +        return NULL;
   
       /* configure remaining attributes */
       if (attr != PTH_ATTR_DEFAULT) {
  @@ -281,7 +283,7 @@
       t->data_value = NULL;
       t->data_count = 0;
   
  -    /* initialize cancellaton stuff */
  +    /* initialize cancellation stuff */
       t->cancelreq   = FALSE;
       t->cleanups    = NULL;
   
  @@ -376,13 +378,13 @@
       return;
   }
   
  -/* terminates the current thread */
  +/* terminate the current thread */
   static int pth_exit_cb(void *arg)
   {
       int rc;
   
  -    /* NOTICE: THIS FUNCTION EXECUTES
  -       FROM WITHIN THE SCHEDULER THREAD! */
  +    /* BE CAREFUL HERE: THIS FUNCTION EXECUTES
  +       FROM WITHIN THE _SCHEDULER_ THREAD! */
   
       /* calculate number of still existing threads in system. Only
          skipped queue is pth_DQ (dead queue). This queue does not
  @@ -409,41 +411,43 @@
   
       pth_debug2("pth_exit: marking thread \"%s\" as dead", pth_current->name);
   
  -    /* main thread is special:
  -       wait until it is the last thread */
  +    /* the main thread is special, because its termination
  +       would terminate the whole process, so we have to delay 
  +       its termination until it is really the last thread */
       if (pth_current == pth_main) {
  -        ev = pth_event(PTH_EVENT_FUNC, pth_exit_cb);
  -        pth_wait(ev);
  -        pth_event_free(ev, PTH_FREE_THIS);
  +        if (!pth_exit_cb(NULL)) {
  +            ev = pth_event(PTH_EVENT_FUNC, pth_exit_cb);
  +            pth_wait(ev);
  +            pth_event_free(ev, PTH_FREE_THIS);
  +        }
       }
   
       /* execute cleanups */
       pth_thread_cleanup(pth_current);
   
  -    /* mark the current thread as dead, so the scheduler removes us */
  -    pth_current->join_arg = value;
  -    pth_current->state = PTH_STATE_DEAD;
  -
       if (pth_current != pth_main) {
           /*
  -         * Now we explicitly switch into the scheduler and let it
  -         * reap the current thread structure; we can't free it here,
  -         * or we'd be running on a stack which malloc() regards as
  -         * free memory, which would be a somewhat perilous situation.
  +         * Now mark the current thread as dead, explicitly switch into the
  +         * scheduler and let it reap the current thread structure; we can't
  +         * free it here, or we'd be running on a stack which malloc() regards
  +         * as free memory, which would be a somewhat perilous situation.
            */
  +        pth_current->join_arg = value;
  +        pth_current->state = PTH_STATE_DEAD;
           pth_debug2("pth_exit: switching from thread \"%s\" to scheduler", pth_current->name);
           pth_mctx_switch(&pth_current->mctx, &pth_sched->mctx);
  -        abort(); /* not reached! */
       }
       else {
           /*
            * main thread is special: exit the _process_
  -         * [double-cast to avoid warnings because of size]
  +         * [double-casted to avoid warnings because of size]
            */
           pth_kill();
           exit((int)((long)value));
  -        abort(); /* not reached! */
       }
  +
  +    /* NOTREACHED */
  +    abort();
   }
   
   /* waits for the termination of the specified thread */

From ossp-cvs-owner@ossp.org  Thu Oct 24 17:21:16 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B239C765DE; Thu, 24 Oct 2002 17:21:15 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog pth.m4 pth_attr.c pth_cancel.c pth_...
Message-Id: <20021024152115.B239C765DE@mail.ossp.org>
Date: Thu, 24 Oct 2002 17:21:15 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Oct-2002 17:21:15
  Branch: HEAD                             Handle: 2002102416211301

  Modified files:
    ossp-pkg/pth            ChangeLog pth.m4 pth_attr.c pth_cancel.c
                            pth_clean.c pth_data.c pth_debug.c pth_errno.c
                            pth_event.c pth_ext.c pth_fork.c pth_high.c
                            pth_lib.c pth_mctx.c pth_msg.c pth_ring.c
                            pth_sync.c pth_tcb.c pthread.c

  Log:
    Internally switch from "errno_shield {...}" to "pth_shield {...}"
    and from "return_errno(..)" to "return pth_error(...)" in order to
    make the internal error handling a little bit more consistent.

  Summary:
    Revision    Changes     Path
    1.580       +5  -0      ossp-pkg/pth/ChangeLog
    1.10        +8  -8      ossp-pkg/pth/pth.m4
    1.17        +22 -22     ossp-pkg/pth/pth_attr.c
    1.26        +7  -7      ossp-pkg/pth/pth_cancel.c
    1.17        +2  -2      ossp-pkg/pth/pth_clean.c
    1.29        +9  -9      ossp-pkg/pth/pth_data.c
    1.28        +1  -1      ossp-pkg/pth/pth_debug.c
    1.24        +8  -8      ossp-pkg/pth/pth_errno.c
    1.59        +13 -13     ossp-pkg/pth/pth_event.c
    1.11        +2  -2      ossp-pkg/pth/pth_ext.c
    1.14        +1  -1      ossp-pkg/pth/pth_fork.c
    1.91        +47 -47     ossp-pkg/pth/pth_high.c
    1.53        +27 -27     ossp-pkg/pth/pth_lib.c
    1.57        +1  -1      ossp-pkg/pth/pth_mctx.c
    1.25        +6  -6      ossp-pkg/pth/pth_msg.c
    1.23        +1  -1      ossp-pkg/pth/pth_ring.c
    1.37        +24 -24     ossp-pkg/pth/pth_sync.c
    1.39        +1  -1      ossp-pkg/pth/pth_tcb.c
    1.61        +95 -95     ossp-pkg/pth/pthread.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.579 -r1.580 ChangeLog
  --- ossp-pkg/pth/ChangeLog	24 Oct 2002 14:01:37 -0000	1.579
  +++ ossp-pkg/pth/ChangeLog	24 Oct 2002 15:21:13 -0000	1.580
  @@ -21,6 +21,11 @@
   
     Changes between 1.4.1 and 1.5.0 (27-Jan-2002 to xx-Oct-2002)
   
  +   *) Internally switch from "errno_shield {...}" to "pth_shield {...}"
  +      and from "return_errno(..)" to "return pth_error(...)" in order to
  +      make the internal error handling a little bit more consistent.
  +      [Ralf S. Engelschall]
  +
      *) Cleaned and speeded up the pth_exit() processing.
         [Ralf S. Engelschall]
   
  Index: ossp-pkg/pth/pth.m4
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 pth.m4
  --- ossp-pkg/pth/pth.m4	30 Jan 2002 12:54:24 -0000	1.9
  +++ ossp-pkg/pth/pth.m4	24 Oct 2002 15:21:13 -0000	1.10
  @@ -40,7 +40,7 @@
   dnl ##
   dnl
   dnl #   auxilliary macros
  -AC_DEFUN(_AC_PTH_ERROR, [dnl
  +AC_DEFUN(_AC_pth_error, [dnl
   AC_MSG_RESULT([*FAILED*])
   define(_ac_pth_line,dnl
   "+------------------------------------------------------------------------+")
  @@ -208,7 +208,7 @@
       _AC_PTH_VERBOSE([    o type: $_pth_type])
       if test ".$_pth_version" = .; then
           if test ".$with_pth" != .yes; then
  -             _AC_PTH_ERROR([dnl
  +             _AC_pth_error([dnl
                Unable to locate GNU Pth under $with_pth.
                Please specify the correct path to either a GNU Pth installation tree
                (use --with-pth=DIR if you used --prefix=DIR for installing GNU Pth in
  @@ -216,7 +216,7 @@
                path to a pth-X.Y.Z/ directory; but make sure the package is already
                built, i.e., the "configure; make" step was already performed there).])
           else
  -             _AC_PTH_ERROR([dnl
  +             _AC_pth_error([dnl
                Unable to locate GNU Pth in any system-wide location (see \$PATH).
                Please specify the correct path to either a GNU Pth installation tree
                (use --with-pth=DIR if you used --prefix=DIR for installing GNU Pth in
  @@ -256,7 +256,7 @@
           fi
       fi
       if test ".$_ok" = .0; then
  -        _AC_PTH_ERROR([dnl
  +        _AC_pth_error([dnl
           Found Pth version $_pth_version, but required at least version $_req_version.
           Upgrade Pth under $_pth_location to $_req_version or higher first, please.])
       fi
  @@ -303,7 +303,7 @@
           _AC_PTH_VERBOSE([    o pre-processor test])
           AC_TRY_CPP(_code1, _ok=yes, _ok=no)
           if test ".$_ok" != .yes; then
  -            _AC_PTH_ERROR([dnl
  +            _AC_pth_error([dnl
               Found GNU Pth $_pth_version under $_pth_location, but
               was unable to perform a sanity pre-processor check. This means
               the GNU Pth header pth.h was not found.
  @@ -315,7 +315,7 @@
           _AC_PTH_VERBOSE([    o link check])
           AC_TRY_LINK(_code1, _code2, _ok=yes, _ok=no)
           if test ".$_ok" != .yes; then
  -            _AC_PTH_ERROR([dnl
  +            _AC_pth_error([dnl
               Found GNU Pth $_pth_version under $_pth_location, but
               was unable to perform a sanity linker check. This means
               the GNU Pth library libpth.a was not found.
  @@ -330,7 +330,7 @@
           AC_TRY_RUN(_code1 _code2, _ok=`cat conftestval`, _ok=no, _ok=no)
           if test ".$_ok" != .yes; then
               if test ".$_ok" = .no; then
  -                _AC_PTH_ERROR([dnl
  +                _AC_pth_error([dnl
                   Found GNU Pth $_pth_version under $_pth_location, but
                   was unable to perform a sanity execution check. This usually
                   means that the GNU Pth shared library libpth.so is present
  @@ -345,7 +345,7 @@
                   >> LIBS="$LIBS"
                   See config.log for possibly more details.])
               else
  -                _AC_PTH_ERROR([dnl
  +                _AC_pth_error([dnl
                   Found GNU Pth $_pth_version under $_pth_location, but
                   was unable to perform a sanity run-time check. This usually
                   means that the GNU Pth library failed to work and possibly
  Index: ossp-pkg/pth/pth_attr.c
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 pth_attr.c
  --- ossp-pkg/pth/pth_attr.c	27 Jan 2002 11:03:40 -0000	1.16
  +++ ossp-pkg/pth/pth_attr.c	24 Oct 2002 15:21:13 -0000	1.17
  @@ -51,9 +51,9 @@
       pth_attr_t a;
   
       if (t == NULL)
  -        return_errno(FALSE, EINVAL);
  +        return pth_error((pth_attr_t)NULL, EINVAL);
       if ((a = (pth_attr_t)malloc(sizeof(struct pth_attr_st))) == NULL)
  -        return_errno(NULL, ENOMEM);
  +        return pth_error((pth_attr_t)NULL, ENOMEM);
       a->a_tid = t;
       return a;
   }
  @@ -63,7 +63,7 @@
       pth_attr_t a;
   
       if ((a = (pth_attr_t)malloc(sizeof(struct pth_attr_st))) == NULL)
  -        return_errno(NULL, ENOMEM);
  +        return pth_error((pth_attr_t)NULL, ENOMEM);
       a->a_tid = NULL;
       pth_attr_init(a);
       return a;
  @@ -72,7 +72,7 @@
   int pth_attr_destroy(pth_attr_t a)
   {
       if (a == NULL)
  -        return_errno(FALSE, EINVAL);
  +        return pth_error(FALSE, EINVAL);
       free(a);
       return TRUE;
   }
  @@ -80,9 +80,9 @@
   int pth_attr_init(pth_attr_t a)
   {
       if (a == NULL)
  -        return_errno(FALSE, EINVAL);
  +        return pth_error(FALSE, EINVAL);
       if (a->a_tid != NULL)
  -        return_errno(FALSE, EPERM);
  +        return pth_error(FALSE, EPERM);
       a->a_prio = PTH_PRIO_STD;
       pth_util_cpystrn(a->a_name, "unknown", PTH_TCB_NAMELEN);
       a->a_joinable = TRUE;
  @@ -117,7 +117,7 @@
   intern int pth_attr_ctrl(int cmd, pth_attr_t a, int op, va_list ap)
   {
       if (a == NULL)
  -        return_errno(FALSE, EINVAL);
  +        return pth_error(FALSE, EINVAL);
       switch (op) {
           case PTH_ATTR_PRIO: {
               /* priority */
  @@ -182,7 +182,7 @@
               unsigned int val, *src, *dst;
               if (cmd == PTH_ATTR_SET) {
                   if (a->a_tid != NULL)
  -                    return_errno(FALSE, EPERM);
  +                    return pth_error(FALSE, EPERM);
                   src = &val; val = va_arg(ap, unsigned int);
                   dst = &a->a_stacksize;
               }
  @@ -198,7 +198,7 @@
               char *val, **src, **dst;
               if (cmd == PTH_ATTR_SET) {
                   if (a->a_tid != NULL)
  -                    return_errno(FALSE, EPERM);
  +                    return pth_error(FALSE, EPERM);
                   src = &val; val = va_arg(ap, char *);
                   dst = &a->a_stackaddr;
               }
  @@ -212,7 +212,7 @@
           case PTH_ATTR_TIME_SPAWN: {
               pth_time_t *dst;
               if (cmd == PTH_ATTR_SET)
  -                return_errno(FALSE, EPERM);
  +                return pth_error(FALSE, EPERM);
               dst = va_arg(ap, pth_time_t *);
               if (a->a_tid != NULL)
                   pth_time_set(dst, &a->a_tid->spawned);
  @@ -223,7 +223,7 @@
           case PTH_ATTR_TIME_LAST: {
               pth_time_t *dst;
               if (cmd == PTH_ATTR_SET)
  -                return_errno(FALSE, EPERM);
  +                return pth_error(FALSE, EPERM);
               dst = va_arg(ap, pth_time_t *);
               if (a->a_tid != NULL)
                   pth_time_set(dst, &a->a_tid->lastran);
  @@ -234,7 +234,7 @@
           case PTH_ATTR_TIME_RAN: {
               pth_time_t *dst;
               if (cmd == PTH_ATTR_SET)
  -                return_errno(FALSE, EPERM);
  +                return pth_error(FALSE, EPERM);
               dst = va_arg(ap, pth_time_t *);
               if (a->a_tid != NULL)
                   pth_time_set(dst, &a->a_tid->running);
  @@ -245,9 +245,9 @@
           case PTH_ATTR_START_FUNC: {
               void *(**dst)(void *);
               if (cmd == PTH_ATTR_SET)
  -                return_errno(FALSE, EPERM);
  +                return pth_error(FALSE, EPERM);
               if (a->a_tid == NULL)
  -                return_errno(FALSE, EACCES);
  +                return pth_error(FALSE, EACCES);
               dst = (void *(**)(void *))va_arg(ap, void *);
               *dst = a->a_tid->start_func;
               break;
  @@ -255,9 +255,9 @@
           case PTH_ATTR_START_ARG: {
               void **dst;
               if (cmd == PTH_ATTR_SET)
  -                return_errno(FALSE, EPERM);
  +                return pth_error(FALSE, EPERM);
               if (a->a_tid == NULL)
  -                return_errno(FALSE, EACCES);
  +                return pth_error(FALSE, EACCES);
               dst = va_arg(ap, void **);
               *dst = a->a_tid->start_arg;
               break;
  @@ -265,9 +265,9 @@
           case PTH_ATTR_STATE: {
               pth_state_t *dst;
               if (cmd == PTH_ATTR_SET)
  -                return_errno(FALSE, EPERM);
  +                return pth_error(FALSE, EPERM);
               if (a->a_tid == NULL)
  -                return_errno(FALSE, EACCES);
  +                return pth_error(FALSE, EACCES);
               dst = va_arg(ap, pth_state_t *);
               *dst = a->a_tid->state;
               break;
  @@ -275,9 +275,9 @@
           case PTH_ATTR_EVENTS: {
               pth_event_t *dst;
               if (cmd == PTH_ATTR_SET)
  -                return_errno(FALSE, EPERM);
  +                return pth_error(FALSE, EPERM);
               if (a->a_tid == NULL)
  -                return_errno(FALSE, EACCES);
  +                return pth_error(FALSE, EACCES);
               dst = va_arg(ap, pth_event_t *);
               *dst = a->a_tid->events;
               break;
  @@ -285,13 +285,13 @@
           case PTH_ATTR_BOUND: {
               int *dst;
               if (cmd == PTH_ATTR_SET)
  -                return_errno(FALSE, EPERM);
  +                return pth_error(FALSE, EPERM);
               dst = va_arg(ap, int *);
               *dst = (a->a_tid != NULL ? TRUE : FALSE);
               break;
           }
           default:
  -            return_errno(FALSE, EINVAL);
  +            return pth_error(FALSE, EINVAL);
       }
       return TRUE;
   }
  Index: ossp-pkg/pth/pth_cancel.c
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 pth_cancel.c
  --- ossp-pkg/pth/pth_cancel.c	27 Jan 2002 11:03:40 -0000	1.25
  +++ ossp-pkg/pth/pth_cancel.c	24 Oct 2002 15:21:13 -0000	1.26
  @@ -56,15 +56,15 @@
       pth_pqueue_t *q;
   
       if (thread == NULL)
  -        return_errno(FALSE, EINVAL);
  +        return pth_error(FALSE, EINVAL);
   
       /* the current thread cannot be cancelled */
       if (thread == pth_current)
  -        return_errno(FALSE, EINVAL);
  +        return pth_error(FALSE, EINVAL);
   
       /* the thread has to be at least still alive */
       if (thread->state == PTH_STATE_DEAD)
  -        return_errno(FALSE, EPERM);
  +        return pth_error(FALSE, EPERM);
   
       /* now mark the thread as cancelled */
       thread->cancelreq = TRUE;
  @@ -81,9 +81,9 @@
               default:                q = NULL;
           }
           if (q == NULL)
  -            return_errno(FALSE, ESRCH);
  +            return pth_error(FALSE, ESRCH);
           if (!pth_pqueue_contains(q, thread))
  -            return_errno(FALSE, ESRCH);
  +            return pth_error(FALSE, ESRCH);
           pth_pqueue_delete(q, thread);
   
           /* execute cleanups */
  @@ -108,11 +108,11 @@
   int pth_abort(pth_t thread)
   {
       if (thread == NULL)
  -        return_errno(FALSE, EINVAL);
  +        return pth_error(FALSE, EINVAL);
   
       /* the current thread cannot be aborted */
       if (thread == pth_current)
  -        return_errno(FALSE, EINVAL);
  +        return pth_error(FALSE, EINVAL);
   
       if (thread->state == PTH_STATE_DEAD && thread->joinable) {
           /* if thread is already terminated, just join it */
  Index: ossp-pkg/pth/pth_clean.c
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 pth_clean.c
  --- ossp-pkg/pth/pth_clean.c	27 Jan 2002 11:03:40 -0000	1.16
  +++ ossp-pkg/pth/pth_clean.c	24 Oct 2002 15:21:13 -0000	1.17
  @@ -44,9 +44,9 @@
       pth_cleanup_t *cleanup;
   
       if (func == NULL)
  -        return_errno(FALSE, EINVAL);
  +        return pth_error(FALSE, EINVAL);
       if ((cleanup = (pth_cleanup_t *)malloc(sizeof(pth_cleanup_t))) == NULL)
  -        return_errno(FALSE, ENOMEM);
  +        return pth_error(FALSE, ENOMEM);
       cleanup->func = func;
       cleanup->arg  = arg;
       cleanup->next = pth_current->cleanups;
  Index: ossp-pkg/pth/pth_data.c
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 pth_data.c
  --- ossp-pkg/pth/pth_data.c	27 Jan 2002 11:03:40 -0000	1.28
  +++ ossp-pkg/pth/pth_data.c	24 Oct 2002 15:21:13 -0000	1.29
  @@ -43,15 +43,15 @@
               return TRUE;
           }
       }
  -    return_errno(FALSE, EAGAIN);
  +    return pth_error(FALSE, EAGAIN);
   }
   
   int pth_key_delete(pth_key_t key)
   {
       if (key >= PTH_KEY_MAX)
  -        return_errno(FALSE, EINVAL);
  +        return pth_error(FALSE, EINVAL);
       if (!pth_keytab[key].used)
  -        return_errno(FALSE, EINVAL);
  +        return pth_error(FALSE, EINVAL);
       pth_keytab[key].used = FALSE;
       return TRUE;
   }
  @@ -59,13 +59,13 @@
   int pth_key_setdata(pth_key_t key, const void *value)
   {
       if (key >= PTH_KEY_MAX)
  -        return_errno(FALSE, EINVAL);
  +        return pth_error(FALSE, EINVAL);
       if (!pth_keytab[key].used)
  -        return_errno(FALSE, EINVAL);
  +        return pth_error(FALSE, EINVAL);
       if (pth_current->data_value == NULL) {
           pth_current->data_value = (const void **)calloc(1, sizeof(void *)*PTH_KEY_MAX);
           if (pth_current->data_value == NULL)
  -            return_errno(FALSE, ENOMEM);
  +            return pth_error(FALSE, ENOMEM);
       }
       if (pth_current->data_value[key] == NULL) {
           if (value != NULL)
  @@ -82,11 +82,11 @@
   void *pth_key_getdata(pth_key_t key)
   {
       if (key >= PTH_KEY_MAX)
  -        return_errno(NULL, EINVAL);
  +        return pth_error((void *)NULL, EINVAL);
       if (!pth_keytab[key].used)
  -        return_errno(NULL, EINVAL);
  +        return pth_error((void *)NULL, EINVAL);
       if (pth_current->data_value == NULL)
  -        return NULL;
  +        return (void *)NULL;
       return (void *)pth_current->data_value[key];
   }
   
  Index: ossp-pkg/pth/pth_debug.c
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 pth_debug.c
  --- ossp-pkg/pth/pth_debug.c	15 Oct 2002 20:34:22 -0000	1.27
  +++ ossp-pkg/pth/pth_debug.c	24 Oct 2002 15:21:13 -0000	1.28
  @@ -58,7 +58,7 @@
       static char str[1024];
       size_t n;
   
  -    errno_shield {
  +    pth_shield {
           va_start(ap, fmt);
           if (file != NULL)
               pth_snprintf(str, sizeof(str), "%d:%s:%04d: ", (int)getpid(), file, line);
  Index: ossp-pkg/pth/pth_errno.c
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 pth_errno.c
  --- ossp-pkg/pth/pth_errno.c	27 Jan 2002 11:03:40 -0000	1.23
  +++ ossp-pkg/pth/pth_errno.c	24 Oct 2002 15:21:13 -0000	1.24
  @@ -30,7 +30,7 @@
   #if cpp
   
   /* enclose errno in a block */
  -#define errno_shield \
  +#define pth_shield \
           for ( pth_errno_storage = errno, \
                 pth_errno_flag = TRUE; \
                 pth_errno_flag; \
  @@ -39,14 +39,14 @@
   
   /* return plus setting an errno value */
   #if defined(PTH_DEBUG)
  -#define return_errno(return_val,errno_val) \
  -        do { errno = (errno_val); \
  -             pth_debug4("return 0x%lx with errno %d(\"%s\")", \
  -                        (unsigned long)(return_val), (errno), strerror((errno))); \
  -             return (return_val); } while (0)
  +#define pth_error(return_val,errno_val) \
  +        (errno = (errno_val), \
  +        pth_debug4("return 0x%lx with errno %d(\"%s\")", \
  +                   (unsigned long)(return_val), (errno), strerror((errno))), \
  +        (return_val))
   #else
  -#define return_errno(return_val,errno_val) \
  -        do { errno = (errno_val); return (return_val); } while (0)
  +#define pth_error(return_val,errno_val) \
  +        (errno = (errno_val), (return_val))
   #endif
   
   #endif /* cpp */
  Index: ossp-pkg/pth/pth_event.c
  ============================================================
  $ cvs diff -u -r1.58 -r1.59 pth_event.c
  --- ossp-pkg/pth/pth_event.c	27 Jan 2002 13:15:28 -0000	1.58
  +++ ossp-pkg/pth/pth_event.c	24 Oct 2002 15:21:13 -0000	1.59
  @@ -92,7 +92,7 @@
           ev = (pth_event_t)malloc(sizeof(struct pth_event_st));
       }
       if (ev == NULL)
  -        return NULL; /* errno is already set */
  +        return pth_error((pth_event_t)NULL, errno);
   
       /* create new event ring out of event or insert into existing ring */
       if (spec & PTH_MODE_CHAIN) {
  @@ -115,7 +115,7 @@
           /* filedescriptor event */
           int fd = va_arg(ap, int);
           if (!pth_util_fd_valid(fd))
  -            return_errno(NULL, EBADF);
  +            return pth_error((pth_event_t)NULL, EBADF);
           ev->ev_type = PTH_EVENT_FD;
           ev->ev_goal = (int)(spec & (PTH_UNTIL_FD_READABLE|\
                                       PTH_UNTIL_FD_WRITEABLE|\
  @@ -201,7 +201,7 @@
           ev->ev_args.FUNC.tv    = va_arg(ap, pth_time_t);
       }
       else
  -        return_errno(NULL, EINVAL);
  +        return pth_error((pth_event_t)NULL, EINVAL);
   
       va_end(ap);
   
  @@ -213,7 +213,7 @@
   unsigned long pth_event_typeof(pth_event_t ev)
   {
       if (ev == NULL)
  -        return_errno(0, EINVAL);
  +        return pth_error(0, EINVAL);
       return (ev->ev_type | ev->ev_goal);
   }
   
  @@ -223,7 +223,7 @@
       va_list ap;
   
       if (ev == NULL)
  -        return_errno(FALSE, EINVAL);
  +        return pth_error(FALSE, EINVAL);
       va_start(ap, ev);
   
       /* extract event specific ingredients */
  @@ -274,7 +274,7 @@
           *tv   = ev->ev_args.FUNC.tv;
       }
       else
  -        return_errno(FALSE, EINVAL);
  +        return pth_error(FALSE, EINVAL);
       va_end(ap);
       return TRUE;
   }
  @@ -289,7 +289,7 @@
       va_list ap;
   
       if (evf == NULL)
  -        return_errno(NULL, EINVAL);
  +        return pth_error((pth_event_t)NULL, EINVAL);
   
       /* open ring */
       va_start(ap, evf);
  @@ -318,7 +318,7 @@
       pth_event_t ring;
   
       if (ev == NULL)
  -        return_errno(NULL, EINVAL);
  +        return pth_error((pth_event_t)NULL, EINVAL);
       ring = NULL;
       if (!(ev->ev_next == ev && ev->ev_prev == ev)) {
           ring = ev->ev_next;
  @@ -334,7 +334,7 @@
   int pth_event_occurred(pth_event_t ev)
   {
       if (ev == NULL)
  -        return_errno(FALSE, EINVAL);
  +        return pth_error(FALSE, EINVAL);
       return ev->ev_occurred;
   }
   
  @@ -342,14 +342,14 @@
   pth_event_t pth_event_walk(pth_event_t ev, unsigned int direction)
   {
       if (ev == NULL)
  -        return_errno(NULL, EINVAL);
  +        return pth_error((pth_event_t)NULL, EINVAL);
       do {
           if (direction & PTH_WALK_NEXT)
               ev = ev->ev_next;
           else if (direction & PTH_WALK_PREV)
               ev = ev->ev_prev;
           else
  -            return_errno(NULL, EINVAL);
  +            return pth_error((pth_event_t)NULL, EINVAL);
       } while ((direction & PTH_UNTIL_OCCURRED) && !(ev->ev_occurred));
       return ev;
   }
  @@ -361,7 +361,7 @@
       pth_event_t evn;
   
       if (ev == NULL)
  -        return_errno(FALSE, EINVAL);
  +        return pth_error(FALSE, EINVAL);
       if (mode == PTH_FREE_THIS) {
           ev->ev_prev->ev_next = ev->ev_next;
           ev->ev_next->ev_prev = ev->ev_prev;
  @@ -386,7 +386,7 @@
   
       /* at least a waiting ring is required */
       if (ev_ring == NULL)
  -        return_errno(-1, EINVAL);
  +        return pth_error(-1, EINVAL);
       pth_debug2("pth_wait: enter from thread \"%s\"", pth_current->name);
   
       /* mark all events in waiting ring as still not occurred */
  Index: ossp-pkg/pth/pth_ext.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 pth_ext.c
  --- ossp-pkg/pth/pth_ext.c	27 Jan 2002 11:03:40 -0000	1.10
  +++ ossp-pkg/pth/pth_ext.c	24 Oct 2002 15:21:13 -0000	1.11
  @@ -90,14 +90,14 @@
       Sfdisc_t *disc;
   
       if ((disc = (Sfdisc_t *)malloc(sizeof(Sfdisc_t))) == NULL)
  -        return NULL;
  +        return pth_error((SFdisc_t *)NULL, errno);
       disc->readf   = pth_sfio_read;
       disc->writef  = pth_sfio_write;
       disc->seekf   = pth_sfio_seek;
       disc->exceptf = pth_sfio_except;
       return disc;
   #else
  -    return_errno(NULL, ENOSYS);
  +    return pth_error((Sfdisc_t *)NULL, ENOSYS);
   #endif /* PTH_EXT_SFIO */
   }
   
  Index: ossp-pkg/pth/pth_fork.c
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 pth_fork.c
  --- ossp-pkg/pth/pth_fork.c	27 Jan 2002 11:03:40 -0000	1.13
  +++ ossp-pkg/pth/pth_fork.c	24 Oct 2002 15:21:13 -0000	1.14
  @@ -43,7 +43,7 @@
                       void (*child)(void *), void *arg)
   {
       if (pth_atfork_idx > PTH_ATFORK_MAX-1)
  -        return_errno(FALSE, ENOMEM);
  +        return pth_error(FALSE, ENOMEM);
       pth_atfork_list[pth_atfork_idx].prepare = prepare;
       pth_atfork_list[pth_atfork_idx].parent  = parent;
       pth_atfork_list[pth_atfork_idx].child   = child;
  Index: ossp-pkg/pth/pth_high.c
  ============================================================
  $ cvs diff -u -r1.90 -r1.91 pth_high.c
  --- ossp-pkg/pth/pth_high.c	24 Oct 2002 09:07:51 -0000	1.90
  +++ ossp-pkg/pth/pth_high.c	24 Oct 2002 15:21:13 -0000	1.91
  @@ -46,9 +46,9 @@
   
       /* consistency checks for POSIX conformance */
       if (rqtp == NULL)
  -        return_errno(-1, EFAULT);
  +        return pth_error(-1, EFAULT);
       if (rqtp->tv_nsec < 0 || rqtp->tv_nsec > (1000*1000000))
  -        return_errno(-1, EINVAL);
  +        return pth_error(-1, EINVAL);
   
       /* short-circuit */
       if (rqtp->tv_sec == 0 && rqtp->tv_nsec == 0)
  @@ -152,7 +152,7 @@
       int sig;
   
       if (set == NULL || sigp == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
   
       /* check whether signal is already pending */
       if (sigpending(&pending) < 0)
  @@ -173,7 +173,7 @@
       if (ev_extra != NULL) {
           pth_event_isolate(ev);
           if (!pth_event_occurred(ev))
  -            return_errno(EINTR, EINTR);
  +            return pth_error(EINTR, EINTR);
       }
   
       /* nothing to do, scheduler has already set *sigp for us */
  @@ -299,12 +299,12 @@
   
       /* POSIX compliance */
       if (nfd < 0 || nfd > FD_SETSIZE)
  -        return_errno(-1, EINVAL);
  +        return pth_error(-1, EINVAL);
   
       /* first deal with the special situation of a plain microsecond delay */
       if (nfd == 0 && rfds == NULL && wfds == NULL && efds == NULL && timeout != NULL) {
           if (timeout->tv_sec < 0 || timeout->tv_usec < 0)
  -            return_errno(-1, EINVAL);
  +            return pth_error(-1, EINVAL);
           if (timeout->tv_sec == 0 && timeout->tv_usec < 500000) {
               /* very small delays are acceptable to be performed directly */
               while (   pth_sc(select)(0, NULL, NULL, NULL, timeout) < 0
  @@ -320,7 +320,7 @@
               if (ev_extra != NULL) {
                   pth_event_isolate(ev);
                   if (!pth_event_occurred(ev))
  -                    return_errno(-1, EINTR);
  +                    return pth_error(-1, EINTR);
               }
           }
           /* POSIX compliance */
  @@ -401,7 +401,7 @@
           }
       }
       if (ev_extra != NULL && !selected)
  -        return_errno(-1, EINTR);
  +        return pth_error(-1, EINTR);
       return rc;
   }
   
  @@ -427,7 +427,7 @@
   
       /* poll(2) semantics */
       if (pfd == NULL)
  -        return_errno(-1, EFAULT);
  +        return pth_error(-1, EFAULT);
   
       /* convert timeout number into a timeval structure */
       ptv = &tv;
  @@ -446,7 +446,7 @@
           ptv->tv_usec = (timeout % 1000) * 1000;
       }
       else
  -        return_errno(-1, EINVAL);
  +        return pth_error(-1, EINVAL);
   
       /* create fd sets and determine max fd */
       maxfd = -1;
  @@ -455,7 +455,7 @@
       FD_ZERO(&efds);
       for(i = 0; i < nfd; i++) {
           if (!pth_util_fd_valid(pfd[i].fd))
  -            return_errno(-1, EBADF);
  +            return pth_error(-1, EBADF);
           if (pfd[i].events & (POLLIN|POLLRDNORM))
               FD_SET(pfd[i].fd, &rfds);
           /* see select(2): "the only exceptional condition detectable
  @@ -472,7 +472,7 @@
               maxfd = pfd[i].fd;
       }
       if (maxfd == -1)
  -        return_errno(-1, EINVAL);
  +        return pth_error(-1, EINVAL);
   
       /* examine fd sets */
       rc = pth_select_ev(maxfd+1, &rfds, &wfds, &efds, ptv, ev_extra);
  @@ -546,7 +546,7 @@
   
       /* POSIX compliance */
       if (!pth_util_fd_valid(s))
  -        return_errno(-1, EBADF);
  +        return pth_error(-1, EBADF);
   
       /* force filedescriptor into non-blocking mode */
       fdmode = pth_fdmode(s, PTH_FDMODE_NONBLOCK);
  @@ -557,7 +557,7 @@
           ;
   
       /* restore filedescriptor mode */
  -    errno_shield { pth_fdmode(s, fdmode); }
  +    pth_shield { pth_fdmode(s, fdmode); }
   
       /* if it is still on progress wait until socket is really writeable */
       if (rv == -1 && errno == EINPROGRESS && fdmode != PTH_FDMODE_NONBLOCK) {
  @@ -568,14 +568,14 @@
           if (ev_extra != NULL) {
               pth_event_isolate(ev);
               if (!pth_event_occurred(ev))
  -                return_errno(-1, EINTR);
  +                return pth_error(-1, EINTR);
           }
           errlen = sizeof(err);
           if (getsockopt(s, SOL_SOCKET, SO_ERROR, (void *)&err, &errlen) == -1)
               return -1;
           if (err == 0)
               return 0;
  -        return_errno(rv, err);
  +        return pth_error(rv, err);
       }
   
       pth_debug2("pth_connect_ev: leave to thread \"%s\"", pth_current->name);
  @@ -601,7 +601,7 @@
   
       /* POSIX compliance */
       if (!pth_util_fd_valid(s))
  -        return_errno(-1, EBADF);
  +        return pth_error(-1, EBADF);
   
       /* force filedescriptor into non-blocking mode */
       fdmode = pth_fdmode(s, PTH_FDMODE_NONBLOCK);
  @@ -624,13 +624,13 @@
               pth_event_isolate(ev);
               if (!pth_event_occurred(ev)) {
                   pth_fdmode(s, fdmode);
  -                return_errno(-1, EINTR);
  +                return pth_error(-1, EINTR);
               }
           }
       }
   
       /* restore filedescriptor mode */
  -    errno_shield {
  +    pth_shield {
           pth_fdmode(s, fdmode);
           if (rv != -1)
               pth_fdmode(rv, fdmode);
  @@ -662,7 +662,7 @@
       if (nbytes == 0)
           return 0;
       if (!pth_util_fd_valid(fd))
  -        return_errno(-1, EBADF);
  +        return pth_error(-1, EBADF);
   
       /* poll filedescriptor if not already in non-blocking operation */
       if (pth_fdmode(fd, PTH_FDMODE_POLL) == PTH_FDMODE_BLOCK) {
  @@ -687,7 +687,7 @@
               if (ev_extra != NULL) {
                   pth_event_isolate(ev);
                   if (!pth_event_occurred(ev))
  -                    return_errno(-1, EINTR);
  +                    return pth_error(-1, EINTR);
               }
           }
       }
  @@ -729,7 +729,7 @@
       if (nbytes == 0)
           return 0;
       if (!pth_util_fd_valid(fd))
  -        return_errno(-1, EBADF);
  +        return pth_error(-1, EBADF);
   
       /* force filedescriptor into non-blocking mode */
       fdmode = pth_fdmode(fd, PTH_FDMODE_NONBLOCK);
  @@ -760,7 +760,7 @@
                       pth_event_isolate(ev);
                       if (!pth_event_occurred(ev)) {
                           pth_fdmode(fd, fdmode);
  -                        return_errno(-1, EINTR);
  +                        return pth_error(-1, EINTR);
                       }
                   }
               }
  @@ -796,7 +796,7 @@
       }
   
       /* restore filedescriptor mode */
  -    errno_shield { pth_fdmode(fd, fdmode); }
  +    pth_shield { pth_fdmode(fd, fdmode); }
   
       pth_debug2("pth_write_ev: leave to thread \"%s\"", pth_current->name);
       return rv;
  @@ -822,9 +822,9 @@
   
       /* POSIX compliance */
       if (iovcnt <= 0 || iovcnt > UIO_MAXIOV)
  -        return_errno(-1, EINVAL);
  +        return pth_error(-1, EINVAL);
       if (!pth_util_fd_valid(fd))
  -        return_errno(-1, EBADF);
  +        return pth_error(-1, EBADF);
   
       /* poll filedescriptor if not already in non-blocking operation */
       if (pth_fdmode(fd, PTH_FDMODE_POLL) == PTH_FDMODE_BLOCK) {
  @@ -849,7 +849,7 @@
               if (ev_extra != NULL) {
                   pth_event_isolate(ev);
                   if (!pth_event_occurred(ev))
  -                    return_errno(-1, EINTR);
  +                    return pth_error(-1, EINTR);
               }
           }
       }
  @@ -882,11 +882,11 @@
       bytes = 0;
       for (i = 0; i < iovcnt; i++) {
           if (iov[i].iov_len <= 0)
  -            return_errno((ssize_t)(-1), EINVAL);
  +            return pth_error((ssize_t)(-1), EINVAL);
           bytes += iov[i].iov_len;
       }
       if (bytes <= 0)
  -        return_errno((ssize_t)(-1), EINVAL);
  +        return pth_error((ssize_t)(-1), EINVAL);
   
       /* allocate a temporary buffer */
       if ((buffer = (char *)malloc(bytes)) == NULL)
  @@ -909,7 +909,7 @@
       }
   
       /* remove the temporary buffer */
  -    errno_shield { free(buffer); }
  +    pth_shield { free(buffer); }
   
       /* return number of read bytes */
       return(rv);
  @@ -944,9 +944,9 @@
   
       /* POSIX compliance */
       if (iovcnt <= 0 || iovcnt > UIO_MAXIOV)
  -        return_errno(-1, EINVAL);
  +        return pth_error(-1, EINVAL);
       if (!pth_util_fd_valid(fd))
  -        return_errno(-1, EBADF);
  +        return pth_error(-1, EBADF);
   
       /* force filedescriptor into non-blocking mode */
       fdmode = pth_fdmode(fd, PTH_FDMODE_NONBLOCK);
  @@ -957,7 +957,7 @@
           if (iovcnt > sizeof(tiov_stack)) {
               tiovcnt = (sizeof(struct iovec) * UIO_MAXIOV);
               if ((tiov = (struct iovec *)malloc(tiovcnt)) == NULL)
  -                return -1 /* errno is set */;
  +                return pth_error(-1, errno);
           }
           else {
               tiovcnt = sizeof(tiov_stack);
  @@ -997,7 +997,7 @@
                           pth_fdmode(fd, fdmode);
                           if (iovcnt > sizeof(tiov_stack))
                               free(tiov);
  -                        return_errno(-1, EINTR);
  +                        return pth_error(-1, EINTR);
                       }
                   }
               }
  @@ -1047,7 +1047,7 @@
       }
   
       /* restore filedescriptor mode */
  -    errno_shield { pth_fdmode(fd, fdmode); }
  +    pth_shield { pth_fdmode(fd, fdmode); }
   
       pth_debug2("pth_writev_ev: leave to thread \"%s\"", pth_current->name);
       return rv;
  @@ -1117,11 +1117,11 @@
       bytes = 0;
       for (i = 0; i < iovcnt; i++) {
           if (iov[i].iov_len <= 0)
  -            return_errno((ssize_t)(-1), EINVAL);
  +            return pth_error((ssize_t)(-1), EINVAL);
           bytes += iov[i].iov_len;
       }
       if (bytes <= 0)
  -        return_errno((ssize_t)(-1), EINVAL);
  +        return pth_error((ssize_t)(-1), EINVAL);
   
       /* allocate a temporary buffer to hold the data */
       if ((buffer = (char *)malloc(bytes)) == NULL)
  @@ -1142,7 +1142,7 @@
       rv = pth_sc(write)(fd, buffer, bytes);
   
       /* remove the temporary buffer */
  -    errno_shield { free(buffer); }
  +    pth_shield { free(buffer); }
   
       return(rv);
   }
  @@ -1173,7 +1173,7 @@
       rc = pth_read(fd, buf, nbytes);
   
       /* restore the old offset situation */
  -    errno_shield { lseek(fd, old_offset, SEEK_SET); }
  +    pth_shield { lseek(fd, old_offset, SEEK_SET); }
   
       /* unprotect and return result of read */
       pth_mutex_release(&mutex);
  @@ -1206,7 +1206,7 @@
       rc = pth_write(fd, buf, nbytes);
   
       /* restore the old offset situation */
  -    errno_shield { lseek(fd, old_offset, SEEK_SET); }
  +    pth_shield { lseek(fd, old_offset, SEEK_SET); }
   
       /* unprotect and return result of write */
       pth_mutex_release(&mutex);
  @@ -1247,7 +1247,7 @@
       if (nbytes == 0)
           return 0;
       if (!pth_util_fd_valid(fd))
  -        return_errno(-1, EBADF);
  +        return pth_error(-1, EBADF);
   
       /* poll filedescriptor if not already in non-blocking operation */
       if (pth_fdmode(fd, PTH_FDMODE_POLL) == PTH_FDMODE_BLOCK) {
  @@ -1256,7 +1256,7 @@
              to avoid unneccessary (and resource consuming because of context
              switches, etc) event handling through the scheduler */
           if (!pth_util_fd_valid(fd))
  -            return_errno(-1, EBADF);
  +            return pth_error(-1, EBADF);
           FD_ZERO(&fds);
           FD_SET(fd, &fds);
           delay.tv_sec  = 0;
  @@ -1274,7 +1274,7 @@
               if (ev_extra != NULL) {
                   pth_event_isolate(ev);
                   if (!pth_event_occurred(ev))
  -                    return_errno(-1, EINTR);
  +                    return pth_error(-1, EINTR);
               }
           }
       }
  @@ -1328,7 +1328,7 @@
       if (nbytes == 0)
           return 0;
       if (!pth_util_fd_valid(fd))
  -        return_errno(-1, EBADF);
  +        return pth_error(-1, EBADF);
   
       /* force filedescriptor into non-blocking mode */
       fdmode = pth_fdmode(fd, PTH_FDMODE_NONBLOCK);
  @@ -1341,7 +1341,7 @@
              switches, etc) event handling through the scheduler */
           if (!pth_util_fd_valid(fd)) {
               pth_fdmode(fd, fdmode);
  -            return_errno(-1, EBADF);
  +            return pth_error(-1, EBADF);
           }
           FD_ZERO(&fds);
           FD_SET(fd, &fds);
  @@ -1363,7 +1363,7 @@
                       pth_event_isolate(ev);
                       if (!pth_event_occurred(ev)) {
                           pth_fdmode(fd, fdmode);
  -                        return_errno(-1, EINTR);
  +                        return pth_error(-1, EINTR);
                       }
                   }
               }
  @@ -1399,7 +1399,7 @@
       }
   
       /* restore filedescriptor mode */
  -    errno_shield { pth_fdmode(fd, fdmode); }
  +    pth_shield { pth_fdmode(fd, fdmode); }
   
       pth_debug2("pth_sendto_ev: leave to thread \"%s\"", pth_current->name);
       return rv;
  Index: ossp-pkg/pth/pth_lib.c
  ============================================================
  $ cvs diff -u -r1.52 -r1.53 pth_lib.c
  --- ossp-pkg/pth/pth_lib.c	24 Oct 2002 14:01:37 -0000	1.52
  +++ ossp-pkg/pth/pth_lib.c	24 Oct 2002 15:21:13 -0000	1.53
  @@ -63,7 +63,7 @@
       /* support for implicit initialization calls
          and to prevent multiple explict initialization, too */
       if (pth_initialized)
  -        return_errno(FALSE, EPERM);
  +        return pth_error(FALSE, EPERM);
       else
           pth_initialized = TRUE;
   
  @@ -91,7 +91,7 @@
       pth_attr_set(t_attr, PTH_ATTR_STACK_ADDR,   NULL);
       pth_sched = pth_spawn(t_attr, pth_scheduler, NULL);
       if (pth_sched == NULL) {
  -        errno_shield {
  +        pth_shield {
               pth_attr_destroy(t_attr);
               pth_scheduler_kill();
           }
  @@ -107,7 +107,7 @@
       pth_attr_set(t_attr, PTH_ATTR_STACK_ADDR,   NULL);
       pth_main = pth_spawn(t_attr, (void *(*)(void *))(-1), NULL);
       if (pth_main == NULL) {
  -        errno_shield {
  +        pth_shield {
               pth_attr_destroy(t_attr);
               pth_scheduler_kill();
           }
  @@ -134,7 +134,7 @@
   int pth_kill(void)
   {
       if (pth_current != pth_main)
  -        return_errno(FALSE, EPERM);
  +        return pth_error(FALSE, EPERM);
       pth_debug1("pth_kill: enter");
       pth_thread_cleanup(pth_main);
       pth_scheduler_kill();
  @@ -192,7 +192,7 @@
           rc = -1;
       va_end(ap);
       if (rc == -1)
  -        return_errno(-1, EINVAL);
  +        return pth_error(-1, EINVAL);
       return rc;
   }
   
  @@ -221,7 +221,7 @@
   
       /* consistency */
       if (func == NULL)
  -        return_errno(NULL, EINVAL);
  +        return pth_error((pth_t)NULL, EINVAL);
   
       /* support the special case of main() */
       if (func == (void *(*)(void *))(-1))
  @@ -231,7 +231,7 @@
       stacksize = (attr == PTH_ATTR_DEFAULT ? 64*1024 : attr->a_stacksize);
       stackaddr = (attr == PTH_ATTR_DEFAULT ? NULL    : attr->a_stackaddr);
       if ((t = pth_tcb_alloc(stacksize, stackaddr)) == NULL)
  -        return NULL;
  +        return pth_error((pth_t)NULL, errno);
   
       /* configure remaining attributes */
       if (attr != PTH_ATTR_DEFAULT) {
  @@ -299,8 +299,8 @@
       if (t->stacksize > 0) { /* the "main thread" (indicated by == 0) is special! */
           if (!pth_mctx_set(&t->mctx, pth_spawn_trampoline,
                             t->stack, ((char *)t->stack+t->stacksize))) {
  -            errno_shield { pth_tcb_free(t); }
  -            return NULL;
  +            pth_shield { pth_tcb_free(t); }
  +            return pth_error((pth_t)NULL, errno);
           }
       }
   
  @@ -330,7 +330,7 @@
       struct sigaction sa;
   
       if (t == NULL || t == pth_current || (sig < 0 || sig > PTH_NSIG))
  -        return_errno(FALSE, EINVAL);
  +        return pth_error(FALSE, EINVAL);
       if (sig == 0)
           /* just test whether thread exists */
           return pth_thread_exists(t);
  @@ -357,7 +357,7 @@
               if (!pth_pqueue_contains(&pth_WQ, t))
                   if (!pth_pqueue_contains(&pth_SQ, t))
                       if (!pth_pqueue_contains(&pth_DQ, t))
  -                        return_errno(FALSE, ESRCH); /* not found */
  +                        return pth_error(FALSE, ESRCH); /* not found */
       return TRUE;
   }
   
  @@ -458,11 +458,11 @@
   
       pth_debug2("pth_join: joining thread \"%s\"", tid == NULL ? "-ANY-" : tid->name);
       if (tid == pth_current)
  -        return_errno(FALSE, EDEADLK);
  +        return pth_error(FALSE, EDEADLK);
       if (tid != NULL && !tid->joinable)
  -        return_errno(FALSE, EINVAL);
  +        return pth_error(FALSE, EINVAL);
       if (pth_ctrl(PTH_CTRL_GETTHREADS) == 1)
  -        return_errno(FALSE, EDEADLK);
  +        return pth_error(FALSE, EDEADLK);
       if (tid == NULL)
           tid = pth_pqueue_head(&pth_DQ);
       if (tid == NULL || (tid != NULL && tid->state != PTH_STATE_DEAD)) {
  @@ -472,7 +472,7 @@
       if (tid == NULL)
           tid = pth_pqueue_head(&pth_DQ);
       if (tid == NULL || (tid != NULL && tid->state != PTH_STATE_DEAD))
  -        return_errno(FALSE, EIO);
  +        return pth_error(FALSE, EIO);
       if (value != NULL)
           *value = tid->join_arg;
       pth_pqueue_delete(&pth_DQ, tid);
  @@ -495,7 +495,7 @@
               default:               q = NULL;
           }
           if (q == NULL || !pth_pqueue_contains(q, to))
  -            return_errno(FALSE, EINVAL);
  +            return pth_error(FALSE, EINVAL);
       }
   
       /* give a favored thread maximum priority in his queue */
  @@ -521,9 +521,9 @@
       pth_pqueue_t *q;
   
       if (t == NULL)
  -        return_errno(FALSE, EINVAL);
  +        return pth_error(FALSE, EINVAL);
       if (t == pth_sched || t == pth_current)
  -        return_errno(FALSE, EPERM);
  +        return pth_error(FALSE, EPERM);
       switch (t->state) {
           case PTH_STATE_NEW:     q = &pth_NQ; break;
           case PTH_STATE_READY:   q = &pth_RQ; break;
  @@ -531,9 +531,9 @@
           default:                q = NULL;
       }
       if (q == NULL)
  -        return_errno(FALSE, EPERM);
  +        return pth_error(FALSE, EPERM);
       if (!pth_pqueue_contains(q, t))
  -        return_errno(FALSE, ESRCH);
  +        return pth_error(FALSE, ESRCH);
       pth_pqueue_delete(q, t);
       pth_pqueue_insert(&pth_SQ, PTH_PRIO_STD, t);
       pth_debug2("pth_suspend: suspend thread \"%s\"\n", t->name);
  @@ -546,11 +546,11 @@
       pth_pqueue_t *q;
   
       if (t == NULL)
  -        return_errno(FALSE, EINVAL);
  +        return pth_error(FALSE, EINVAL);
       if (t == pth_sched || t == pth_current)
  -        return_errno(FALSE, EPERM);
  +        return pth_error(FALSE, EPERM);
       if (!pth_pqueue_contains(&pth_SQ, t))
  -        return_errno(FALSE, EPERM);
  +        return pth_error(FALSE, EPERM);
       pth_pqueue_delete(&pth_SQ, t);
       switch (t->state) {
           case PTH_STATE_NEW:     q = &pth_NQ; break;
  @@ -569,7 +569,7 @@
       int fdmode;
       int oldmode;
   
  -    /* retrieve old mode (usually cheap) */
  +    /* retrieve old mode (usually a very cheap operation) */
       if ((fdmode = fcntl(fd, F_GETFL, NULL)) == -1)
           oldmode = PTH_FDMODE_ERROR;
       else if (fdmode & O_NONBLOCKING)
  @@ -577,7 +577,7 @@
       else
           oldmode = PTH_FDMODE_BLOCK;
   
  -    /* set new mode (usually expensive) */
  +    /* set new mode (usually a more expensive operation) */
       if (oldmode == PTH_FDMODE_BLOCK && newmode == PTH_FDMODE_NONBLOCK)
           fcntl(fd, F_SETFL, (fdmode | O_NONBLOCKING));
       if (oldmode == PTH_FDMODE_NONBLOCK && newmode == PTH_FDMODE_BLOCK)
  @@ -595,7 +595,7 @@
       static pth_key_t ev_key = PTH_KEY_INIT;
   
       if (pth_time_cmp(&naptime, PTH_TIME_ZERO) == 0)
  -        return_errno(FALSE, EINVAL);
  +        return pth_error(FALSE, EINVAL);
       pth_time_set(&until, PTH_TIME_NOW);
       pth_time_add(&until, &naptime);
       ev = pth_event(PTH_EVENT_TIME|PTH_MODE_STATIC, &ev_key, until);
  @@ -607,7 +607,7 @@
   int pth_once(pth_once_t *oncectrl, void (*constructor)(void *), void *arg)
   {
       if (oncectrl == NULL || constructor == NULL)
  -        return_errno(FALSE, EINVAL);
  +        return pth_error(FALSE, EINVAL);
       if (*oncectrl != TRUE)
           constructor(arg);
       *oncectrl = TRUE;
  Index: ossp-pkg/pth/pth_mctx.c
  ============================================================
  $ cvs diff -u -r1.56 -r1.57 pth_mctx.c
  --- ossp-pkg/pth/pth_mctx.c	27 Jan 2002 11:03:40 -0000	1.56
  +++ ossp-pkg/pth/pth_mctx.c	24 Oct 2002 15:21:14 -0000	1.57
  @@ -315,7 +315,7 @@
           return FALSE;
       sigaltstack(NULL, &ss);
       if (!(ss.ss_flags & SS_DISABLE))
  -        return_errno(FALSE, EIO);
  +        return pth_error(FALSE, EIO);
       if (!(oss.ss_flags & SS_DISABLE))
           sigaltstack(&oss, NULL);
   #elif PTH_MCTX_STK(ss)
  Index: ossp-pkg/pth/pth_msg.c
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 pth_msg.c
  --- ossp-pkg/pth/pth_msg.c	24 Oct 2002 09:39:01 -0000	1.24
  +++ ossp-pkg/pth/pth_msg.c	24 Oct 2002 15:21:14 -0000	1.25
  @@ -50,7 +50,7 @@
   
       /* allocate message port structure */
       if ((mp = (pth_msgport_t)malloc(sizeof(struct pth_msgport_st))) == NULL)
  -        return_errno(NULL, ENOMEM);
  +        return pth_error((pth_msgport_t)NULL, ENOMEM);
   
       /* initialize structure */
       mp->mp_name  = name;
  @@ -92,7 +92,7 @@
   
       /* check input */
       if (name == NULL)
  -        return_errno(NULL, EINVAL);
  +        return pth_error((pth_msgport_t)NULL, EINVAL);
   
       /* iterate over message ports */
       mp = mpf = (pth_msgport_t)pth_ring_first(&pth_msgport);
  @@ -112,7 +112,7 @@
   int pth_msgport_pending(pth_msgport_t mp)
   {
       if (mp == NULL)
  -        return_errno(-1, EINVAL);
  +        return pth_error(-1, EINVAL);
       return pth_ring_elements(&mp->mp_queue);
   }
   
  @@ -120,7 +120,7 @@
   int pth_msgport_put(pth_msgport_t mp, pth_message_t *m)
   {
       if (mp == NULL)
  -        return_errno(FALSE, EINVAL);
  +        return pth_error(FALSE, EINVAL);
       pth_ring_append(&mp->mp_queue, (pth_ringnode_t *)m);
       return TRUE;
   }
  @@ -131,7 +131,7 @@
       pth_message_t *m;
   
       if (mp == NULL)
  -        return_errno(NULL, EINVAL);
  +        return pth_error((pth_message_t *)NULL, EINVAL);
       m = (pth_message_t *)pth_ring_pop(&mp->mp_queue);
       return m;
   }
  @@ -140,7 +140,7 @@
   int pth_msgport_reply(pth_message_t *m)
   {
       if (m == NULL)
  -        return_errno(FALSE, EINVAL);
  +        return pth_error(FALSE, EINVAL);
       return pth_msgport_put(m->m_replyport, m);
   }
   
  Index: ossp-pkg/pth/pth_ring.c
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 pth_ring.c
  --- ossp-pkg/pth/pth_ring.c	15 Oct 2002 20:34:23 -0000	1.22
  +++ ossp-pkg/pth/pth_ring.c	24 Oct 2002 15:21:14 -0000	1.23
  @@ -228,7 +228,7 @@
       int rc;
   
       if (r == NULL || rns == NULL)
  -        return_errno(FALSE, EINVAL);
  +        return pth_error(FALSE, EINVAL);
       rc = FALSE;
       rn = r->r_hook;
       if (rn != NULL) {
  Index: ossp-pkg/pth/pth_sync.c
  ============================================================
  $ cvs diff -u -r1.36 -r1.37 pth_sync.c
  --- ossp-pkg/pth/pth_sync.c	27 Jan 2002 11:03:41 -0000	1.36
  +++ ossp-pkg/pth/pth_sync.c	24 Oct 2002 15:21:14 -0000	1.37
  @@ -35,7 +35,7 @@
   int pth_mutex_init(pth_mutex_t *mutex)
   {
       if (mutex == NULL)
  -        return_errno(FALSE, EINVAL);
  +        return pth_error(FALSE, EINVAL);
       mutex->mx_state = PTH_MUTEX_INITIALIZED;
       mutex->mx_owner = NULL;
       mutex->mx_count = 0;
  @@ -51,9 +51,9 @@
   
       /* consistency checks */
       if (mutex == NULL)
  -        return_errno(FALSE, EINVAL);
  +        return pth_error(FALSE, EINVAL);
       if (!(mutex->mx_state & PTH_MUTEX_INITIALIZED))
  -        return_errno(FALSE, EDEADLK);
  +        return pth_error(FALSE, EDEADLK);
   
       /* still not locked, so simply acquire mutex? */
       if (!(mutex->mx_state & PTH_MUTEX_LOCKED)) {
  @@ -75,7 +75,7 @@
   
       /* should we just tryonly? */
       if (tryonly)
  -        return_errno(FALSE, EBUSY);
  +        return pth_error(FALSE, EBUSY);
   
       /* else wait for mutex to become unlocked.. */
       pth_debug1("pth_mutex_acquire: wait until mutex is unlocked");
  @@ -87,7 +87,7 @@
           if (ev_extra != NULL) {
               pth_event_isolate(ev);
               if (!pth_event_occurred(ev))
  -                return_errno(FALSE, EINTR);
  +                return pth_error(FALSE, EINTR);
           }
           if (!(mutex->mx_state & PTH_MUTEX_LOCKED))
               break;
  @@ -106,13 +106,13 @@
   {
       /* consistency checks */
       if (mutex == NULL)
  -        return_errno(FALSE, EINVAL);
  +        return pth_error(FALSE, EINVAL);
       if (!(mutex->mx_state & PTH_MUTEX_INITIALIZED))
  -        return_errno(FALSE, EDEADLK);
  +        return pth_error(FALSE, EDEADLK);
       if (!(mutex->mx_state & PTH_MUTEX_LOCKED))
  -        return_errno(FALSE, EDEADLK);
  +        return pth_error(FALSE, EDEADLK);
       if (mutex->mx_owner != pth_current)
  -        return_errno(FALSE, EACCES);
  +        return pth_error(FALSE, EACCES);
   
       /* decrement recursion counter and release mutex */
       mutex->mx_count--;
  @@ -149,7 +149,7 @@
   int pth_rwlock_init(pth_rwlock_t *rwlock)
   {
       if (rwlock == NULL)
  -        return_errno(FALSE, EINVAL);
  +        return pth_error(FALSE, EINVAL);
       rwlock->rw_state = PTH_RWLOCK_INITIALIZED;
       rwlock->rw_readers = 0;
       pth_mutex_init(&(rwlock->rw_mutex_rd));
  @@ -161,9 +161,9 @@
   {
       /* consistency checks */
       if (rwlock == NULL)
  -        return_errno(FALSE, EINVAL);
  +        return pth_error(FALSE, EINVAL);
       if (!(rwlock->rw_state & PTH_RWLOCK_INITIALIZED))
  -        return_errno(FALSE, EDEADLK);
  +        return pth_error(FALSE, EDEADLK);
   
       /* acquire lock */
       if (op == PTH_RWLOCK_RW) {
  @@ -180,7 +180,7 @@
           if (rwlock->rw_readers == 1) {
               if (!pth_mutex_acquire(&(rwlock->rw_mutex_rw), tryonly, ev_extra)) {
                   rwlock->rw_readers--;
  -                errno_shield { pth_mutex_release(&(rwlock->rw_mutex_rd)); }
  +                pth_shield { pth_mutex_release(&(rwlock->rw_mutex_rd)); }
                   return FALSE;
               }
           }
  @@ -194,9 +194,9 @@
   {
       /* consistency checks */
       if (rwlock == NULL)
  -        return_errno(FALSE, EINVAL);
  +        return pth_error(FALSE, EINVAL);
       if (!(rwlock->rw_state & PTH_RWLOCK_INITIALIZED))
  -        return_errno(FALSE, EDEADLK);
  +        return pth_error(FALSE, EDEADLK);
   
       /* release lock */
       if (rwlock->rw_mode == PTH_RWLOCK_RW) {
  @@ -212,7 +212,7 @@
           if (rwlock->rw_readers == 0) {
               if (!pth_mutex_release(&(rwlock->rw_mutex_rw))) {
                   rwlock->rw_readers++;
  -                errno_shield { pth_mutex_release(&(rwlock->rw_mutex_rd)); }
  +                pth_shield { pth_mutex_release(&(rwlock->rw_mutex_rd)); }
                   return FALSE;
               }
           }
  @@ -229,7 +229,7 @@
   int pth_cond_init(pth_cond_t *cond)
   {
       if (cond == NULL)
  -        return_errno(FALSE, EINVAL);
  +        return pth_error(FALSE, EINVAL);
       cond->cn_state   = PTH_COND_INITIALIZED;
       cond->cn_waiters = 0;
       return TRUE;
  @@ -257,9 +257,9 @@
   
       /* consistency checks */
       if (cond == NULL || mutex == NULL)
  -        return_errno(FALSE, EINVAL);
  +        return pth_error(FALSE, EINVAL);
       if (!(cond->cn_state & PTH_COND_INITIALIZED))
  -        return_errno(FALSE, EDEADLK);
  +        return pth_error(FALSE, EDEADLK);
   
       /* check whether we can do a short-circuit wait */
       if (    (cond->cn_state & PTH_COND_SIGNALED)
  @@ -302,9 +302,9 @@
   {
       /* consistency checks */
       if (cond == NULL)
  -        return_errno(FALSE, EINVAL);
  +        return pth_error(FALSE, EINVAL);
       if (!(cond->cn_state & PTH_COND_INITIALIZED))
  -        return_errno(FALSE, EDEADLK);
  +        return pth_error(FALSE, EDEADLK);
   
       /* do something only if there is at least one waiters (POSIX semantics) */
       if (cond->cn_waiters > 0) {
  @@ -331,7 +331,7 @@
   int pth_barrier_init(pth_barrier_t *barrier, int threshold)
   {
       if (barrier == NULL || threshold <= 0)
  -        return_errno(FALSE, EINVAL);
  +        return pth_error(FALSE, EINVAL);
       if (!pth_mutex_init(&(barrier->br_mutex)))
           return FALSE;
       if (!pth_cond_init(&(barrier->br_cond)))
  @@ -349,9 +349,9 @@
       int rv;
   
       if (barrier == NULL)
  -        return_errno(FALSE, EINVAL);
  +        return pth_error(FALSE, EINVAL);
       if (!(barrier->br_state & PTH_BARRIER_INITIALIZED))
  -        return_errno(FALSE, EINVAL);
  +        return pth_error(FALSE, EINVAL);
   
       if (!pth_mutex_acquire(&(barrier->br_mutex), FALSE, NULL))
           return FALSE;
  Index: ossp-pkg/pth/pth_tcb.c
  ============================================================
  $ cvs diff -u -r1.38 -r1.39 pth_tcb.c
  --- ossp-pkg/pth/pth_tcb.c	30 Jan 2002 13:07:08 -0000	1.38
  +++ ossp-pkg/pth/pth_tcb.c	24 Oct 2002 15:21:14 -0000	1.39
  @@ -116,7 +116,7 @@
               t->stack = (char *)(stackaddr);
           else {
               if ((t->stack = (char *)malloc(stacksize)) == NULL) {
  -                errno_shield { free(t); }
  +                pth_shield { free(t); }
                   return NULL;
               }
           }
  Index: ossp-pkg/pth/pthread.c
  ============================================================
  $ cvs diff -u -r1.60 -r1.61 pthread.c
  --- ossp-pkg/pth/pthread.c	23 Oct 2002 14:04:00 -0000	1.60
  +++ ossp-pkg/pth/pthread.c	24 Oct 2002 15:21:14 -0000	1.61
  @@ -80,7 +80,7 @@
   
       pthread_initialize();
       if (attr == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       if ((na = pth_attr_new()) == NULL)
           return errno;
       (*attr) = (pthread_attr_t)na;
  @@ -92,7 +92,7 @@
       pth_attr_t na;
   
       if (attr == NULL || *attr == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       na = (pth_attr_t)(*attr);
       pth_attr_destroy(na);
       *attr = NULL;
  @@ -102,71 +102,71 @@
   int pthread_attr_setinheritsched(pthread_attr_t *attr, int inheritsched)
   {
       if (attr == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       /* not supported */
  -    return_errno(ENOSYS, ENOSYS);
  +    return pth_error(ENOSYS, ENOSYS);
   }
   
   int pthread_attr_getinheritsched(const pthread_attr_t *attr, int *inheritsched)
   {
       if (attr == NULL || inheritsched == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       /* not supported */
  -    return_errno(ENOSYS, ENOSYS);
  +    return pth_error(ENOSYS, ENOSYS);
   }
   
   int pthread_attr_setschedparam(pthread_attr_t *attr, struct sched_param *schedparam)
   {
       if (attr == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       /* not supported */
  -    return_errno(ENOSYS, ENOSYS);
  +    return pth_error(ENOSYS, ENOSYS);
   }
   
   int pthread_attr_getschedparam(const pthread_attr_t *attr, struct sched_param *schedparam)
   {
       if (attr == NULL || schedparam == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       /* not supported */
  -    return_errno(ENOSYS, ENOSYS);
  +    return pth_error(ENOSYS, ENOSYS);
   }
   
   int pthread_attr_setschedpolicy(pthread_attr_t *attr, int schedpolicy)
   {
       if (attr == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       /* not supported */
  -    return_errno(ENOSYS, ENOSYS);
  +    return pth_error(ENOSYS, ENOSYS);
   }
   
   int pthread_attr_getschedpolicy(const pthread_attr_t *attr, int *schedpolicy)
   {
       if (attr == NULL || schedpolicy == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       /* not supported */
  -    return_errno(ENOSYS, ENOSYS);
  +    return pth_error(ENOSYS, ENOSYS);
   }
   
   int pthread_attr_setscope(pthread_attr_t *attr, int scope)
   {
       if (attr == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       /* not supported */
  -    return_errno(ENOSYS, ENOSYS);
  +    return pth_error(ENOSYS, ENOSYS);
   }
   
   int pthread_attr_getscope(const pthread_attr_t *attr, int *scope)
   {
       if (attr == NULL || scope == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       /* not supported */
  -    return_errno(ENOSYS, ENOSYS);
  +    return pth_error(ENOSYS, ENOSYS);
   }
   
   int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize)
   {
       if (attr == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       if (!pth_attr_set((pth_attr_t)(*attr), PTH_ATTR_STACK_SIZE, (unsigned int)stacksize))
           return errno;
       return OK;
  @@ -175,7 +175,7 @@
   int pthread_attr_getstacksize(const pthread_attr_t *attr, size_t *stacksize)
   {
       if (attr == NULL || stacksize == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       if (!pth_attr_get((pth_attr_t)(*attr), PTH_ATTR_STACK_SIZE, (unsigned int *)stacksize))
           return errno;
       return OK;
  @@ -184,7 +184,7 @@
   int pthread_attr_setstackaddr(pthread_attr_t *attr, void *stackaddr)
   {
       if (attr == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       if (!pth_attr_set((pth_attr_t)(*attr), PTH_ATTR_STACK_ADDR, (char *)stackaddr))
           return errno;
       return OK;
  @@ -193,7 +193,7 @@
   int pthread_attr_getstackaddr(const pthread_attr_t *attr, void **stackaddr)
   {
       if (attr == NULL || stackaddr == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       if (!pth_attr_get((pth_attr_t)(*attr), PTH_ATTR_STACK_ADDR, (char **)stackaddr))
           return errno;
       return OK;
  @@ -204,13 +204,13 @@
       int s;
   
       if (attr == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       if (detachstate == PTHREAD_CREATE_DETACHED)
           s = FALSE;
       else  if (detachstate == PTHREAD_CREATE_JOINABLE)
           s = TRUE;
       else
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       if (!pth_attr_set((pth_attr_t)(*attr), PTH_ATTR_JOINABLE, s))
           return errno;
       return OK;
  @@ -221,7 +221,7 @@
       int s;
   
       if (attr == NULL || detachstate == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       if (!pth_attr_get((pth_attr_t)(*attr), PTH_ATTR_JOINABLE, &s))
           return errno;
       if (s == TRUE)
  @@ -234,23 +234,23 @@
   int pthread_attr_setguardsize(pthread_attr_t *attr, int stacksize)
   {
       if (attr == NULL || stacksize < 0)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       /* not supported */
  -    return_errno(ENOSYS, ENOSYS);
  +    return pth_error(ENOSYS, ENOSYS);
   }
   
   int pthread_attr_getguardsize(const pthread_attr_t *attr, int *stacksize)
   {
       if (attr == NULL || stacksize == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       /* not supported */
  -    return_errno(ENOSYS, ENOSYS);
  +    return pth_error(ENOSYS, ENOSYS);
   }
   
   int pthread_attr_setname_np(pthread_attr_t *attr, char *name)
   {
       if (attr == NULL || name == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       if (!pth_attr_set((pth_attr_t)(*attr), PTH_ATTR_NAME, name))
           return errno;
       return OK;
  @@ -259,7 +259,7 @@
   int pthread_attr_getname_np(const pthread_attr_t *attr, char **name)
   {
       if (attr == NULL || name == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       if (!pth_attr_get((pth_attr_t)(*attr), PTH_ATTR_NAME, name))
           return errno;
       return OK;
  @@ -268,7 +268,7 @@
   int pthread_attr_setprio_np(pthread_attr_t *attr, int prio)
   {
       if (attr == NULL || (prio < PTH_PRIO_MIN || prio > PTH_PRIO_MAX))
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       if (!pth_attr_set((pth_attr_t)(*attr), PTH_ATTR_PRIO, prio))
           return errno;
       return OK;
  @@ -277,7 +277,7 @@
   int pthread_attr_getprio_np(const pthread_attr_t *attr, int *prio)
   {
       if (attr == NULL || prio == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       if (!pth_attr_get((pth_attr_t)(*attr), PTH_ATTR_PRIO, prio))
           return errno;
       return OK;
  @@ -295,16 +295,16 @@
   
       pthread_initialize();
       if (thread == NULL || start_routine == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       if (pth_ctrl(PTH_CTRL_GETTHREADS) >= PTHREAD_THREADS_MAX)
  -        return_errno(EAGAIN, EAGAIN);
  +        return pth_error(EAGAIN, EAGAIN);
       if (attr != NULL)
           na = (pth_attr_t)(*attr);
       else
           na = PTH_ATTR_DEFAULT;
       *thread = (pthread_t)pth_spawn(na, start_routine, arg);
       if (*thread == NULL)
  -        return_errno(EAGAIN, EAGAIN);
  +        return pth_error(EAGAIN, EAGAIN);
       return OK;
   }
   
  @@ -313,7 +313,7 @@
       pth_attr_t na;
   
       if (thread == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       if ((na = pth_attr_of((pth_t)thread)) == NULL)
           return errno;
       if (!pth_attr_set(na, PTH_ATTR_JOINABLE, FALSE))
  @@ -363,7 +363,7 @@
   {
       pthread_initialize();
       if (once_control == NULL || init_routine == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       if (*once_control != 1)
           init_routine();
       *once_control = 1;
  @@ -403,7 +403,7 @@
   int pthread_setconcurrency(int new_level)
   {
       if (new_level < 0)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       pthread_concurrency = new_level;
       return OK;
   }
  @@ -515,13 +515,13 @@
   int pthread_setschedparam(pthread_t pthread, int policy, const struct sched_param *param)
   {
       /* not supported */
  -    return_errno(ENOSYS, ENOSYS);
  +    return pth_error(ENOSYS, ENOSYS);
   }
   
   int pthread_getschedparam(pthread_t pthread, int *policy, struct sched_param *param)
   {
       /* not supported */
  -    return_errno(ENOSYS, ENOSYS);
  +    return pth_error(ENOSYS, ENOSYS);
   }
   
   /*
  @@ -577,7 +577,7 @@
       struct pthread_atfork_st *info;
   
       if (pthread_atfork_idx > PTH_ATFORK_MAX-1)
  -        return_errno(ENOMEM, ENOMEM);
  +        return pth_error(ENOMEM, ENOMEM);
       info = &pthread_atfork_info[pthread_atfork_idx++];
       info->prepare = prepare;
       info->parent  = parent;
  @@ -597,7 +597,7 @@
   {
       pthread_initialize();
       if (attr == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       /* nothing to do for us */
       return OK;
   }
  @@ -605,7 +605,7 @@
   int pthread_mutexattr_destroy(pthread_mutexattr_t *attr)
   {
       if (attr == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       /* nothing to do for us */
       return OK;
   }
  @@ -613,65 +613,65 @@
   int pthread_mutexattr_setprioceiling(pthread_mutexattr_t *attr, int prioceiling)
   {
       if (attr == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       /* not supported */
  -    return_errno(ENOSYS, ENOSYS);
  +    return pth_error(ENOSYS, ENOSYS);
   }
   
   int pthread_mutexattr_getprioceiling(pthread_mutexattr_t *attr, int *prioceiling)
   {
       if (attr == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       /* not supported */
  -    return_errno(ENOSYS, ENOSYS);
  +    return pth_error(ENOSYS, ENOSYS);
   }
   
   int pthread_mutexattr_setprotocol(pthread_mutexattr_t *attr, int protocol)
   {
       if (attr == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       /* not supported */
  -    return_errno(ENOSYS, ENOSYS);
  +    return pth_error(ENOSYS, ENOSYS);
   }
   
   int pthread_mutexattr_getprotocol(pthread_mutexattr_t *attr, int *protocol)
   {
       if (attr == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       /* not supported */
  -    return_errno(ENOSYS, ENOSYS);
  +    return pth_error(ENOSYS, ENOSYS);
   }
   
   int pthread_mutexattr_setpshared(pthread_mutexattr_t *attr, int pshared)
   {
       if (attr == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       /* not supported */
  -    return_errno(ENOSYS, ENOSYS);
  +    return pth_error(ENOSYS, ENOSYS);
   }
   
   int pthread_mutexattr_getpshared(pthread_mutexattr_t *attr, int *pshared)
   {
       if (attr == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       /* not supported */
  -    return_errno(ENOSYS, ENOSYS);
  +    return pth_error(ENOSYS, ENOSYS);
   }
   
   int pthread_mutexattr_settype(pthread_mutexattr_t *attr, int type)
   {
       if (attr == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       /* not supported */
  -    return_errno(ENOSYS, ENOSYS);
  +    return pth_error(ENOSYS, ENOSYS);
   }
   
   int pthread_mutexattr_gettype(pthread_mutexattr_t *attr, int *type)
   {
       if (attr == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       /* not supported */
  -    return_errno(ENOSYS, ENOSYS);
  +    return pth_error(ENOSYS, ENOSYS);
   }
   
   /*
  @@ -684,7 +684,7 @@
   
       pthread_initialize();
       if (mutex == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       if ((m = (pth_mutex_t *)malloc(sizeof(pth_mutex_t))) == NULL)
           return errno;
       if (!pth_mutex_init(m))
  @@ -696,7 +696,7 @@
   int pthread_mutex_destroy(pthread_mutex_t *mutex)
   {
       if (mutex == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       free(*mutex);
       *mutex = NULL;
       return OK;
  @@ -705,29 +705,29 @@
   int pthread_mutex_setprioceiling(pthread_mutex_t *mutex, int prioceiling, int *old_ceiling)
   {
       if (mutex == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       if (*mutex == PTHREAD_MUTEX_INITIALIZER)
           if (pthread_mutex_init(mutex, NULL) != OK)
               return errno;
       /* not supported */
  -    return_errno(ENOSYS, ENOSYS);
  +    return pth_error(ENOSYS, ENOSYS);
   }
   
   int pthread_mutex_getprioceiling(pthread_mutex_t *mutex, int *prioceiling)
   {
       if (mutex == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       if (*mutex == PTHREAD_MUTEX_INITIALIZER)
           if (pthread_mutex_init(mutex, NULL) != OK)
               return errno;
       /* not supported */
  -    return_errno(ENOSYS, ENOSYS);
  +    return pth_error(ENOSYS, ENOSYS);
   }
   
   int pthread_mutex_lock(pthread_mutex_t *mutex)
   {
       if (mutex == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       if (*mutex == PTHREAD_MUTEX_INITIALIZER)
           if (pthread_mutex_init(mutex, NULL) != OK)
               return errno;
  @@ -739,7 +739,7 @@
   int pthread_mutex_trylock(pthread_mutex_t *mutex)
   {
       if (mutex == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       if (*mutex == PTHREAD_MUTEX_INITIALIZER)
           if (pthread_mutex_init(mutex, NULL) != OK)
               return errno;
  @@ -751,7 +751,7 @@
   int pthread_mutex_unlock(pthread_mutex_t *mutex)
   {
       if (mutex == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       if (*mutex == PTHREAD_MUTEX_INITIALIZER)
           if (pthread_mutex_init(mutex, NULL) != OK)
               return errno;
  @@ -768,7 +768,7 @@
   {
       pthread_initialize();
       if (attr == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       /* nothing to do for us */
       return OK;
   }
  @@ -776,7 +776,7 @@
   int pthread_rwlockattr_destroy(pthread_rwlockattr_t *attr)
   {
       if (attr == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       /* nothing to do for us */
       return OK;
   }
  @@ -784,17 +784,17 @@
   int pthread_rwlockattr_setpshared(pthread_rwlockattr_t *attr, int pshared)
   {
       if (attr == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       /* not supported */
  -    return_errno(ENOSYS, ENOSYS);
  +    return pth_error(ENOSYS, ENOSYS);
   }
   
   int pthread_rwlockattr_getpshared(const pthread_rwlockattr_t *attr, int *pshared)
   {
       if (attr == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       /* not supported */
  -    return_errno(ENOSYS, ENOSYS);
  +    return pth_error(ENOSYS, ENOSYS);
   }
   
   /*
  @@ -807,7 +807,7 @@
   
       pthread_initialize();
       if (rwlock == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       if ((rw = (pth_rwlock_t *)malloc(sizeof(pth_rwlock_t))) == NULL)
           return errno;
       if (!pth_rwlock_init(rw))
  @@ -819,7 +819,7 @@
   int pthread_rwlock_destroy(pthread_rwlock_t *rwlock)
   {
       if (rwlock == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       free(*rwlock);
       *rwlock = NULL;
       return OK;
  @@ -828,7 +828,7 @@
   int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock)
   {
       if (rwlock == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       if (*rwlock == PTHREAD_RWLOCK_INITIALIZER)
           if (pthread_rwlock_init(rwlock, NULL) != OK)
               return errno;
  @@ -840,7 +840,7 @@
   int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock)
   {
       if (rwlock == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       if (*rwlock == PTHREAD_RWLOCK_INITIALIZER)
           if (pthread_rwlock_init(rwlock, NULL) != OK)
               return errno;
  @@ -852,7 +852,7 @@
   int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock)
   {
       if (rwlock == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       if (*rwlock == PTHREAD_RWLOCK_INITIALIZER)
           if (pthread_rwlock_init(rwlock, NULL) != OK)
               return errno;
  @@ -864,7 +864,7 @@
   int pthread_rwlock_trywrlock(pthread_rwlock_t *rwlock)
   {
       if (rwlock == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       if (*rwlock == PTHREAD_RWLOCK_INITIALIZER)
           if (pthread_rwlock_init(rwlock, NULL) != OK)
               return errno;
  @@ -876,7 +876,7 @@
   int pthread_rwlock_unlock(pthread_rwlock_t *rwlock)
   {
       if (rwlock == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       if (*rwlock == PTHREAD_RWLOCK_INITIALIZER)
           if (pthread_rwlock_init(rwlock, NULL) != OK)
               return errno;
  @@ -893,7 +893,7 @@
   {
       pthread_initialize();
       if (attr == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       /* nothing to do for us */
       return OK;
   }
  @@ -901,7 +901,7 @@
   int pthread_condattr_destroy(pthread_condattr_t *attr)
   {
       if (attr == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       /* nothing to do for us */
       return OK;
   }
  @@ -909,17 +909,17 @@
   int pthread_condattr_setpshared(pthread_condattr_t *attr, int pshared)
   {
       if (attr == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       /* not supported */
  -    return_errno(ENOSYS, ENOSYS);
  +    return pth_error(ENOSYS, ENOSYS);
   }
   
   int pthread_condattr_getpshared(pthread_condattr_t *attr, int *pshared)
   {
       if (attr == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       /* not supported */
  -    return_errno(ENOSYS, ENOSYS);
  +    return pth_error(ENOSYS, ENOSYS);
   }
   
   /*
  @@ -932,7 +932,7 @@
   
       pthread_initialize();
       if (cond == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       if ((cn = (pth_cond_t *)malloc(sizeof(pth_cond_t))) == NULL)
           return errno;
       if (!pth_cond_init(cn))
  @@ -944,7 +944,7 @@
   int pthread_cond_destroy(pthread_cond_t *cond)
   {
       if (cond == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       free(*cond);
       *cond = NULL;
       return OK;
  @@ -953,7 +953,7 @@
   int pthread_cond_broadcast(pthread_cond_t *cond)
   {
       if (cond == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       if (*cond == PTHREAD_COND_INITIALIZER)
           if (pthread_cond_init(cond, NULL) != OK)
               return errno;
  @@ -965,7 +965,7 @@
   int pthread_cond_signal(pthread_cond_t *cond)
   {
       if (cond == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       if (*cond == PTHREAD_COND_INITIALIZER)
           if (pthread_cond_init(cond, NULL) != OK)
               return errno;
  @@ -977,7 +977,7 @@
   int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)
   {
       if (cond == NULL || mutex == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       if (*cond == PTHREAD_COND_INITIALIZER)
           if (pthread_cond_init(cond, NULL) != OK)
               return errno;
  @@ -996,13 +996,13 @@
       static pth_key_t ev_key = PTH_KEY_INIT;
   
       if (cond == NULL || mutex == NULL || abstime == NULL)
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
   #ifdef __amigaos__
       if (abstime->ts_sec < 0 || abstime->ts_nsec < 0 || abstime->ts_nsec >= 1000000000)
   #else
       if (abstime->tv_sec < 0 || abstime->tv_nsec < 0 || abstime->tv_nsec >= 1000000000)
   #endif
  -        return_errno(EINVAL, EINVAL);
  +        return pth_error(EINVAL, EINVAL);
       if (*cond == PTHREAD_COND_INITIALIZER)
           if (pthread_cond_init(cond, NULL) != OK)
               return errno;

From ossp-cvs-owner@ossp.org  Thu Oct 24 17:33:48 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CE8B576537; Thu, 24 Oct 2002 17:33:47 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth pth.m4
Message-Id: <20021024153347.CE8B576537@mail.ossp.org>
Date: Thu, 24 Oct 2002 17:33:47 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Oct-2002 17:33:47
  Branch: HEAD                             Handle: 2002102416334700

  Modified files:
    ossp-pkg/pth            pth.m4

  Log:
    back-out accidential change

  Summary:
    Revision    Changes     Path
    1.11        +8  -8      ossp-pkg/pth/pth.m4
  ____________________________________________________________________________

  Index: ossp-pkg/pth/pth.m4
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 pth.m4
  --- ossp-pkg/pth/pth.m4	24 Oct 2002 15:21:13 -0000	1.10
  +++ ossp-pkg/pth/pth.m4	24 Oct 2002 15:33:47 -0000	1.11
  @@ -40,7 +40,7 @@
   dnl ##
   dnl
   dnl #   auxilliary macros
  -AC_DEFUN(_AC_pth_error, [dnl
  +AC_DEFUN(_AC_PTH_ERROR, [dnl
   AC_MSG_RESULT([*FAILED*])
   define(_ac_pth_line,dnl
   "+------------------------------------------------------------------------+")
  @@ -208,7 +208,7 @@
       _AC_PTH_VERBOSE([    o type: $_pth_type])
       if test ".$_pth_version" = .; then
           if test ".$with_pth" != .yes; then
  -             _AC_pth_error([dnl
  +             _AC_PTH_ERROR([dnl
                Unable to locate GNU Pth under $with_pth.
                Please specify the correct path to either a GNU Pth installation tree
                (use --with-pth=DIR if you used --prefix=DIR for installing GNU Pth in
  @@ -216,7 +216,7 @@
                path to a pth-X.Y.Z/ directory; but make sure the package is already
                built, i.e., the "configure; make" step was already performed there).])
           else
  -             _AC_pth_error([dnl
  +             _AC_PTH_ERROR([dnl
                Unable to locate GNU Pth in any system-wide location (see \$PATH).
                Please specify the correct path to either a GNU Pth installation tree
                (use --with-pth=DIR if you used --prefix=DIR for installing GNU Pth in
  @@ -256,7 +256,7 @@
           fi
       fi
       if test ".$_ok" = .0; then
  -        _AC_pth_error([dnl
  +        _AC_PTH_ERROR([dnl
           Found Pth version $_pth_version, but required at least version $_req_version.
           Upgrade Pth under $_pth_location to $_req_version or higher first, please.])
       fi
  @@ -303,7 +303,7 @@
           _AC_PTH_VERBOSE([    o pre-processor test])
           AC_TRY_CPP(_code1, _ok=yes, _ok=no)
           if test ".$_ok" != .yes; then
  -            _AC_pth_error([dnl
  +            _AC_PTH_ERROR([dnl
               Found GNU Pth $_pth_version under $_pth_location, but
               was unable to perform a sanity pre-processor check. This means
               the GNU Pth header pth.h was not found.
  @@ -315,7 +315,7 @@
           _AC_PTH_VERBOSE([    o link check])
           AC_TRY_LINK(_code1, _code2, _ok=yes, _ok=no)
           if test ".$_ok" != .yes; then
  -            _AC_pth_error([dnl
  +            _AC_PTH_ERROR([dnl
               Found GNU Pth $_pth_version under $_pth_location, but
               was unable to perform a sanity linker check. This means
               the GNU Pth library libpth.a was not found.
  @@ -330,7 +330,7 @@
           AC_TRY_RUN(_code1 _code2, _ok=`cat conftestval`, _ok=no, _ok=no)
           if test ".$_ok" != .yes; then
               if test ".$_ok" = .no; then
  -                _AC_pth_error([dnl
  +                _AC_PTH_ERROR([dnl
                   Found GNU Pth $_pth_version under $_pth_location, but
                   was unable to perform a sanity execution check. This usually
                   means that the GNU Pth shared library libpth.so is present
  @@ -345,7 +345,7 @@
                   >> LIBS="$LIBS"
                   See config.log for possibly more details.])
               else
  -                _AC_pth_error([dnl
  +                _AC_PTH_ERROR([dnl
                   Found GNU Pth $_pth_version under $_pth_location, but
                   was unable to perform a sanity run-time check. This usually
                   means that the GNU Pth library failed to work and possibly

From ossp-cvs-owner@ossp.org  Thu Oct 24 21:07:40 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 65D3A76537; Thu, 24 Oct 2002 21:07:40 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq TODO adddlg.h karm.cpp karm.h task.cpp tas...
Message-Id: <20021024190740.65D3A76537@mail.ossp.org>
Date: Thu, 24 Oct 2002 21:07:40 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   24-Oct-2002 21:07:40
  Branch: HEAD                             Handle: 2002102420073900

  Modified files:
    ossp-pkg/titraq         TODO adddlg.h karm.cpp karm.h task.cpp task.h

  Log:
    Stripping KDE objects, and replacing as many of them with their nearest Qt
    relatives if possible.

  Summary:
    Revision    Changes     Path
    1.2         +21 -0      ossp-pkg/titraq/TODO
    1.2         +2  -2      ossp-pkg/titraq/adddlg.h
    1.3         +41 -148    ossp-pkg/titraq/karm.cpp
    1.2         +2  -5      ossp-pkg/titraq/karm.h
    1.2         +0  -13     ossp-pkg/titraq/task.cpp
    1.2         +0  -3      ossp-pkg/titraq/task.h
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/TODO
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 TODO
  --- ossp-pkg/titraq/TODO	21 Oct 2002 15:19:37 -0000	1.1.1.1
  +++ ossp-pkg/titraq/TODO	24 Oct 2002 19:07:39 -0000	1.2
  @@ -9,6 +9,27 @@
   
   Must do
   -------
  +Replace lost icons.
  +
  +Stripped
  +--------
  +main.cpp
  +karm.h
  +karm.cpp
  +task.h
  +task.cpp
  +toolicons.h
  +
  +Not yet
  +-------
  +kaccelmenuwatch.h
  +kaccelmenuwatch.cpp
  +ktimewidget.h
  +ktimewidget.cpp
  +adddlg.h
  +adddlg.cpp
  +top.h
  +top.cpp
   
   Dreams
   ------
  Index: ossp-pkg/titraq/adddlg.h
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 adddlg.h
  --- ossp-pkg/titraq/adddlg.h	21 Oct 2002 15:19:37 -0000	1.1.1.1
  +++ ossp-pkg/titraq/adddlg.h	24 Oct 2002 19:07:39 -0000	1.2
  @@ -22,14 +22,14 @@
   #define KarmAddDlg_included
   
   #include <stdlib.h>
  -#include <kdialogbase.h>
  +#include <qdialog.h>
   #include <qvalidator.h>
   #include "adddlg.h"
   class QLineEdit;
   class KTimeWidget;
   class QRadioButton;
   
  -class AddTaskDialog : public KDialogBase
  +class AddTaskDialog : public QDialog
   {
     Q_OBJECT
   
  Index: ossp-pkg/titraq/karm.cpp
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 karm.cpp
  --- ossp-pkg/titraq/karm.cpp	21 Oct 2002 16:52:22 -0000	1.2
  +++ ossp-pkg/titraq/karm.cpp	24 Oct 2002 19:07:39 -0000	1.3
  @@ -16,47 +16,21 @@
   #include <qtoolbar.h>
   #include <qmessagebox.h>
   
  +#include <iostream>
   #include "task.h"
   #include "karm.h"
   #include "adddlg.h"
  -#include "idle.h"
  -#include "preferences.h"
   
   #define T_LINESIZE 1023
   
  -Karm::Karm( QWidget *parent, const char *name )
  -  : QListView( parent, name )
  +Karm::Karm (QWidget *parent, const char *name) : QListView(parent, name)
   {
  -  _preferences = Preferences::instance();
  -
  -  connect(this, SIGNAL(doubleClicked(QListViewItem *)),
  +  connect (this, SIGNAL(doubleClicked(QListViewItem *)),
             this, SLOT(changeTimer(QListViewItem *)));
   
  -  addColumn(i18n("Task Name"));
  -  addColumn(i18n("Session Time"));
  -  addColumn(i18n("Total Time"));
  -  setAllColumnsShowFocus(true);
  -
     // set up the minuteTimer
     _minuteTimer = new QTimer(this);
     connect(_minuteTimer, SIGNAL(timeout()), this, SLOT(minuteUpdate()));
  -  _minuteTimer->start(1000 * secsPerMinutes);
  -
  -  // Set up the idle detection.
  -  _idleTimer = new IdleTimer(_preferences->idlenessTimeout());
  -  connect(_idleTimer, SIGNAL(extractTime(int)), this, SLOT(extractTime(int)));
  -  connect(_idleTimer, SIGNAL(stopTimer()), this, SLOT(stopAllTimers()));
  -  connect(_preferences, SIGNAL(idlenessTimeout(int)), _idleTimer, SLOT(setMaxIdle(int)));
  -  connect(_preferences, SIGNAL(detectIdleness(bool)), _idleTimer, SLOT(toggleOverAllIdleDetection(bool)));
  -  if (!_idleTimer->isIdleDetectionPossible())
  -    _preferences->disableIdleDetection();
  -
  -  // Setup auto save timer
  -  _autoSaveTimer = new QTimer(this);
  -  connect(_preferences, SIGNAL(autoSave(bool)), this, SLOT(autoSaveChanged(bool)));
  -  connect(_preferences, SIGNAL(autoSavePeriod(int)),
  -          this, SLOT(autoSavePeriodChanged(int)));
  -  connect(_autoSaveTimer, SIGNAL(timeout()), this, SLOT(save()));
   }
   
   Karm::~Karm()
  @@ -66,58 +40,13 @@
   
   void Karm::load()
   {
  -  QFile f(_preferences->saveFile());
  -
  -  if( !f.exists() )
  -    return;
  -
  -  if( !f.open( IO_ReadOnly ) )
  -    return;
  -
     QString line;
   
     QPtrStack<Task> stack;
     Task *task;
   
  -  QTextStream stream(&f);
  -
  -  while( !stream.atEnd() ) {
  -    //lukas: this breaks for non-latin1 chars!!!
  -    //if ( file.readLine( line, T_LINESIZE ) == 0 )
  -    //	break;
  -
  -    line = stream.readLine();
  -
  -    if (line.isNull())
  -	break;
  -
  -    long minutes;
  -    int level;
  -    QString name;
  -
  -    if (!parseLine(line, &minutes, &name, &level))
  -      continue;
  -
  -    unsigned int stackLevel = stack.count();
  -    for (unsigned int i = level; i<=stackLevel ; i++) {
  -      stack.pop();
  -    }
  -
  -    if (level == 1) {
  -      task = new Task(name, minutes, 0, this);
  -    }
  -    else {
  -      Task *parent = stack.top();
  -      task = new Task(name, minutes, 0, parent);
  -      setRootIsDecorated(true);
  -      parent->setOpen(true);
  -    }
  -    stack.push(task);
  -  }
  -  f.close();
  -
  -	setSelected(firstChild(), true);
  -	setCurrentItem(firstChild());
  +  setSelected(firstChild(), true);
  +  setCurrentItem(firstChild());
   }
   
   bool Karm::parseLine(QString line, long *time, QString *name, int *level)
  @@ -162,25 +91,8 @@
   
   void Karm::save()
   {
  - QFile f(_preferences->saveFile());
  -
  - if ( !f.open( IO_WriteOnly | IO_Truncate ) ) {
  -   QString msg = i18n( "There was an error trying to save your data file.\n"
  -                       "Time accumulated during this session will not be saved!\n");
  -   KMessageBox::error(0, msg );
  -   return;
  - }
  - const char * comment = "# Karm save data\n";
  -
  - f.writeBlock(comment, strlen(comment));  //comment
  - f.flush();
  -
  - QTextStream stream(&f);
  -
  - for (QListViewItem *child =firstChild(); child; child = child->nextSibling()) {
  -   writeTaskToFile(&stream, child, 1);
  - }
  - f.close();
  +  const char * comment = "# Karm save data\n";
  +  std::cout << "Saving data!" << std::endl;
   }
   
   void Karm::writeTaskToFile(QTextStream *strm, QListViewItem *item, int level)
  @@ -202,7 +114,6 @@
   {
     Task *item = ((Task *) currentItem());
     if (item != 0 && activeTasks.findRef(item) == -1) {
  -    _idleTimer->startIdleDetection();
       item->setRunning(true);
       activeTasks.append(item);
       emit updateButtons();
  @@ -214,7 +125,6 @@
     for(unsigned int i=0; i<activeTasks.count();i++) {
       activeTasks.at(i)->setRunning(false);
     }
  -  _idleTimer->stopIdleDetection();
     activeTasks.clear();
     emit updateButtons();
   }
  @@ -238,7 +148,6 @@
       activeTasks.removeRef(item);
       item->setRunning(false);
       if (activeTasks.count()== 0)
  -      _idleTimer->stopIdleDetection();
       emit updateButtons();
     }
   }
  @@ -282,7 +191,7 @@
   
   void Karm::newTask()
   {
  -  newTask(i18n("New Task"), 0);
  +  newTask("New Task", 0);
   }
   
   void Karm::newTask(QString caption, QListViewItem *parent)
  @@ -291,7 +200,7 @@
     int result = dialog->exec();
   
     if (result == QDialog::Accepted) {
  -    QString taskName = i18n("Unnamed Task");
  +    QString taskName = "Unnamed Task";
       if (!dialog->taskName().isEmpty()) {
         taskName = dialog->taskName();
       }
  @@ -321,7 +230,7 @@
     QListViewItem *item = currentItem();
     if(!item)
       return;
  -  newTask(i18n("New Sub Task"), item);
  +  newTask("New Sub Task", item);
     item->setOpen(true);
     setRootIsDecorated(true);
   }
  @@ -332,13 +241,13 @@
     if (!task)
     return;
   
  -  AddTaskDialog *dialog = new AddTaskDialog(i18n("Edit Task"), true);
  +  AddTaskDialog *dialog = new AddTaskDialog("Edit Task", true);
     dialog->setTask(task->name(),
                     task->totalTime(),
                     task->sessionTime());
     int result = dialog->exec();
     if (result == QDialog::Accepted) {
  -    QString taskName = i18n("Unnamed Task");
  +    QString taskName = "Unnamed Task";
       if (!dialog->taskName().isEmpty()) {
         taskName = dialog->taskName();
       }
  @@ -375,55 +284,46 @@
   {
     Task *item = ((Task *) currentItem());
     if (item == 0) {
  -    KMessageBox::information(0,i18n("No task selected"));
  +    std::cout << "No task selected" << std::endl;
       return;
     }
   
     int response;
     if (item->childCount() == 0) {
  -    response = KMessageBox::questionYesNo(0,
  -                 i18n( "Are you sure you want to delete the task named\n\"%1\"").arg(item->name()),
  -                 i18n( "Deleting Task"));
  +    std::cout << "MessageBox, Are you sure you want to delete the task...?" << std::endl;
     }
     else {
  -    response = KMessageBox::questionYesNo(0,
  -                 i18n( "Are you sure you want to delete the task named\n\"%1\"\n"
  -                       "NOTE: all its subtasks will also be deleted!").arg(item->name()),
  -                 i18n( "Deleting Task"));
  +    std::cout << "MessageBox, Are you sure you want to delete the task...?" << std::endl;
     }
   
  -  if (response == KMessageBox::Yes) {
  -
  -    // Remove chilren from the active set of tasks.
  -    stopChildCounters(item);
  +  // Remove chilren from the active set of tasks.
  +  stopChildCounters(item);
   
  -    // Stop idle detection if no more counters is running
  -    if (activeTasks.count() == 0) {
  -      _idleTimer->stopIdleDetection();
  -    }
  +  // Stop idle detection if no more counters is running
  +  if (activeTasks.count() == 0) {
  +  }
   
  -    long sessionTime = item->sessionTime();
  -    long totalTime   = item->totalTime();
  +  long sessionTime = item->sessionTime();
  +  long totalTime   = item->totalTime();
   
  -    if( sessionTime != 0 ) {
  -      emit sessionTimeChanged( -sessionTime );
  -    }
  -    updateParents( (QListViewItem *) item, -totalTime, -sessionTime );
  -    
  -    delete item;
  -    
  -    // remove root decoration if there is no more children.
  -    bool anyChilds = false;
  -    for(QListViewItem *child=firstChild(); child; child=child->nextSibling()) {
  -      if (child->childCount() != 0) {
  -        anyChilds = true;
  -        break;
  -      }
  -    }
  -    if (!anyChilds) {
  -      setRootIsDecorated(false);
  +  if( sessionTime != 0 ) {
  +    emit sessionTimeChanged( -sessionTime );
  +  }
  +  updateParents( (QListViewItem *) item, -totalTime, -sessionTime );
  +  
  +  delete item;
  +  
  +  // remove root decoration if there is no more children.
  +  bool anyChilds = false;
  +  for(QListViewItem *child=firstChild(); child; child=child->nextSibling()) {
  +    if (child->childCount() != 0) {
  +      anyChilds = true;
  +      break;
       }
     }
  +  if (!anyChilds) {
  +    setRootIsDecorated(false);
  +  }
   }
   
   void Karm::stopChildCounters(Task *item)
  @@ -443,21 +343,14 @@
   
   void Karm::autoSaveChanged(bool on)
   {
  -  if (on) {
  -    if (!_autoSaveTimer->isActive()) {
  -      _autoSaveTimer->start(_preferences->autoSavePeriod()*1000*secsPerMinutes);
  -    }
  -  }
  -  else {
  -    if (_autoSaveTimer->isActive()) {
  -      _autoSaveTimer->stop();
  -    }
  +  if (_autoSaveTimer->isActive()) {
  +    _autoSaveTimer->stop();
     }
   }
   
   void Karm::autoSavePeriodChanged(int /*minutes*/)
   {
  -  autoSaveChanged(_preferences->autoSave());
  +  std::cout << "autoSavePeriodChanged!" << std::endl;
   }
   
   #include "karm.moc"
  Index: ossp-pkg/titraq/karm.h
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 karm.h
  --- ossp-pkg/titraq/karm.h	21 Oct 2002 15:19:37 -0000	1.1.1.1
  +++ ossp-pkg/titraq/karm.h	24 Oct 2002 19:07:39 -0000	1.2
  @@ -9,13 +9,12 @@
   #include <qptrlist.h>
   #include <qtextstream.h>
   
  -class KMenuBar;
  -class KToolBar;
  +class QMenuBar;
  +class QToolBar;
   class QListBox;
   class AddTaskDialog;
   class IdleTimer;
   class QTimer;
  -class Preferences;
   class Task;
   
   class Karm : public QListView
  @@ -26,8 +25,6 @@
       IdleTimer *_idleTimer;
       QTimer *_minuteTimer;
       QTimer *_autoSaveTimer;
  -
  -    Preferences *_preferences;
   
       QPtrList<Task> activeTasks;
   
  Index: ossp-pkg/titraq/task.cpp
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 task.cpp
  --- ossp-pkg/titraq/task.cpp	21 Oct 2002 15:19:37 -0000	1.1.1.1
  +++ ossp-pkg/titraq/task.cpp	24 Oct 2002 19:07:39 -0000	1.2
  @@ -2,10 +2,8 @@
   #include <qfile.h>
   #include <stdlib.h>
   #include <stdio.h>
  -#include <kiconloader.h>
   #include <qtimer.h>
   #include"task.h"
  -#include"loging.h"
   
   
   QPtrVector<QPixmap> *Task::icons = 0;
  @@ -30,20 +28,14 @@
         QPixmap *icon = new QPixmap();
         QString name;
         name.sprintf("watch-%d.xpm",i);
  -      *icon = UserIcon(name);
  -      icons->insert(i,icon);
       }
     }
   
  -  // is this the right place?
  -  _loging = Loging::instance();
  -
     _name = taskName.stripWhiteSpace();
     _totalTime = minutes;
     _sessionTime = sessionTime;
     _timer = new QTimer(this);
     connect(_timer, SIGNAL(timeout()), this, SLOT(updateActiveIcon()));
  -  setPixmap(1, UserIcon(QString::fromLatin1("empty-watch.xpm")));
     update();
     _i = 0;
   }
  @@ -54,7 +46,6 @@
     if (on) {
       if (!_timer->isActive()) {
         _timer->start(1000);
  -      _loging->start(this);
         _i=7;
         updateActiveIcon();
       }
  @@ -62,8 +53,6 @@
     else {
       if (_timer->isActive()) {
         _timer->stop();
  -      _loging->stop(this);
  -      setPixmap(1, UserIcon(QString::fromLatin1("empty-watch.xpm")));
       }
     }
   }
  @@ -82,14 +71,12 @@
   void Task::setTotalTime ( long minutes )
   {
     _totalTime = minutes;
  -  _loging->newTotalTime( this, minutes);
     update();
   }
   
   void Task::setSessionTime ( long minutes )
   {
     _sessionTime = minutes;
  -  _loging->newSessionTime( this, minutes);
     update();
   }
   
  Index: ossp-pkg/titraq/task.h
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 task.h
  --- ossp-pkg/titraq/task.h	21 Oct 2002 15:19:37 -0000	1.1.1.1
  +++ ossp-pkg/titraq/task.h	24 Oct 2002 19:07:39 -0000	1.2
  @@ -8,11 +8,9 @@
   #include <qptrvector.h>
   #include <qpixmap.h>
   #include "karm.h"
  -#include "loging.h"
   
   class QFile;
   class QTimer;
  -class Loging;
   
   /**
   	Encapsulates a task.
  @@ -85,7 +83,6 @@
     QTimer *_timer;
     int _i;
     static QPtrVector<QPixmap> *icons;
  -  Loging *_loging;
   
   };
   

From ossp-cvs-owner@ossp.org  Fri Oct 25 13:53:29 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 51C9576A15; Fri, 25 Oct 2002 13:53:29 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog pth_high.c
Message-Id: <20021025115329.51C9576A15@mail.ossp.org>
Date: Fri, 25 Oct 2002 13:53:29 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Oct-2002 13:53:29
  Branch: HEAD                             Handle: 2002102512532800

  Modified files:
    ossp-pkg/pth            ChangeLog pth_high.c

  Log:
    More POSIX compliance for pth_select() in case of invalid
    timeout values and invalid filedescriptors.

  Summary:
    Revision    Changes     Path
    1.581       +4  -0      ossp-pkg/pth/ChangeLog
    1.92        +9  -0      ossp-pkg/pth/pth_high.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.580 -r1.581 ChangeLog
  --- ossp-pkg/pth/ChangeLog	24 Oct 2002 15:21:13 -0000	1.580
  +++ ossp-pkg/pth/ChangeLog	25 Oct 2002 11:53:28 -0000	1.581
  @@ -21,6 +21,10 @@
   
     Changes between 1.4.1 and 1.5.0 (27-Jan-2002 to xx-Oct-2002)
   
  +   *) More POSIX compliance for pth_select() in case of invalid
  +      timeout values and invalid filedescriptors.
  +      [Ralf S. Engelschall]
  +
      *) Internally switch from "errno_shield {...}" to "pth_shield {...}"
         and from "return_errno(..)" to "return pth_error(...)" in order to
         make the internal error handling a little bit more consistent.
  Index: ossp-pkg/pth/pth_high.c
  ============================================================
  $ cvs diff -u -r1.91 -r1.92 pth_high.c
  --- ossp-pkg/pth/pth_high.c	24 Oct 2002 15:21:13 -0000	1.91
  +++ ossp-pkg/pth/pth_high.c	25 Oct 2002 11:53:28 -0000	1.92
  @@ -300,6 +300,13 @@
       /* POSIX compliance */
       if (nfd < 0 || nfd > FD_SETSIZE)
           return pth_error(-1, EINVAL);
  +    if (timeout != NULL) {
  +        if (   timeout->tv_sec  < 0
  +            || timeout->tv_sec  > 100000000 /* about 3 years */
  +            || timeout->tv_usec < 0
  +            || timeout->tv_usec >= 1000000  /* a full second */)
  +            return pth_error(-1, EINVAL);
  +    }
   
       /* first deal with the special situation of a plain microsecond delay */
       if (nfd == 0 && rfds == NULL && wfds == NULL && efds == NULL && timeout != NULL) {
  @@ -371,6 +378,8 @@
               return 0;
           }
       }
  +    if (rc < 0 && errno == EBADF)
  +        return pth_error(-1, EBADF);
   
       /* suspend current thread until one fd is ready or the timeout occurred */
       rc = -1;

From ossp-cvs-owner@ossp.org  Fri Oct 25 13:56:17 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8806676A15; Fri, 25 Oct 2002 13:56:17 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog pth.h.in pth.pod pth_high.c pth_sys...
Message-Id: <20021025115617.8806676A15@mail.ossp.org>
Date: Fri, 25 Oct 2002 13:56:17 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Oct-2002 13:56:17
  Branch: HEAD                             Handle: 2002102512561600

  Modified files:
    ossp-pkg/pth            ChangeLog pth.h.in pth.pod pth_high.c
                            pth_syscall.c

  Log:
    Add a Pth variant of the new POSIX pselect(2) function, including
    soft and hard syscall mapping support for it.

  Summary:
    Revision    Changes     Path
    1.582       +4  -0      ossp-pkg/pth/ChangeLog
    1.134       +2  -0      ossp-pkg/pth/pth.h.in
    1.157       +10 -0      ossp-pkg/pth/pth.pod
    1.93        +32 -0      ossp-pkg/pth/pth_high.c
    1.26        +12 -0      ossp-pkg/pth/pth_syscall.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.581 -r1.582 ChangeLog
  --- ossp-pkg/pth/ChangeLog	25 Oct 2002 11:53:28 -0000	1.581
  +++ ossp-pkg/pth/ChangeLog	25 Oct 2002 11:56:16 -0000	1.582
  @@ -21,6 +21,10 @@
   
     Changes between 1.4.1 and 1.5.0 (27-Jan-2002 to xx-Oct-2002)
   
  +   *) Add a Pth variant of the new POSIX pselect(2) function, including
  +      soft and hard syscall mapping support for it.
  +      [Ralf S. Engelschall]
  +
      *) More POSIX compliance for pth_select() in case of invalid
         timeout values and invalid filedescriptors.
         [Ralf S. Engelschall]
  Index: ossp-pkg/pth/pth.h.in
  ============================================================
  $ cvs diff -u -r1.133 -r1.134 pth.h.in
  --- ossp-pkg/pth/pth.h.in	23 Oct 2002 14:04:00 -0000	1.133
  +++ ossp-pkg/pth/pth.h.in	25 Oct 2002 11:56:16 -0000	1.134
  @@ -504,6 +504,7 @@
   extern int            pth_connect(int, const struct sockaddr *, socklen_t);
   extern int            pth_accept(int, struct sockaddr *, socklen_t *);
   extern int            pth_select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
  +extern int            pth_pselect(int, fd_set *, fd_set *, fd_set *, const struct timespec *, const sigset_t *);
   extern int            pth_poll(struct pollfd *, nfds_t, int);
   extern ssize_t        pth_read(int, void *, size_t);
   extern ssize_t        pth_write(int, const void *, size_t);
  @@ -527,6 +528,7 @@
   #define sigprocmask   pth_sigmask
   #define sigwait       pth_sigwait
   #define select        pth_select
  +#define pselect       pth_pselect
   #define poll          pth_poll
   #define connect       pth_connect
   #define accept        pth_accept
  Index: ossp-pkg/pth/pth.pod
  ============================================================
  $ cvs diff -u -r1.156 -r1.157 pth.pod
  --- ossp-pkg/pth/pth.pod	23 Oct 2002 14:04:00 -0000	1.156
  +++ ossp-pkg/pth/pth.pod	25 Oct 2002 11:56:16 -0000	1.157
  @@ -166,6 +166,7 @@
   pth_accept,
   pth_connect,
   pth_select,
  +pth_pselect,
   pth_poll,
   pth_read,
   pth_readv,
  @@ -1680,6 +1681,15 @@
   see if some of their descriptors are ready for reading, are ready for writing,
   or have an exceptional condition pending, respectively.  For more details
   about the arguments and return code semantics see select(2).
  +
  +=item int B<pth_pselect>(int I<nfd>, fd_set *I<rfds>, fd_set *I<wfds>, fd_set *I<efds>, const struct timespec *I<timeout>, const sigset_t *I<sigmask>);
  +
  +This is a variant of the POSIX pselect(2) function, which in turn
  +is a stronger variant of 4.2BSD select(2). The difference is that
  +the higher-resolution C<struct timespec> is passed instead of the
  +lower-resolution C<struct timeval> and that a signal mask is specified
  +which is temporarily set while waiting for input. For more details about
  +the arguments and return code semantics see pselect(2) and select(2).
   
   =item int B<pth_poll>(struct pollfd *I<fds>, unsigned int I<nfd>, int I<timeout>);
   
  Index: ossp-pkg/pth/pth_high.c
  ============================================================
  $ cvs diff -u -r1.92 -r1.93 pth_high.c
  --- ossp-pkg/pth/pth_high.c	25 Oct 2002 11:53:28 -0000	1.92
  +++ ossp-pkg/pth/pth_high.c	25 Oct 2002 11:56:16 -0000	1.93
  @@ -414,6 +414,38 @@
       return rc;
   }
   
  +/* Pth variant of pth_pselect(2) */
  +int pth_pselect(int nfds, fd_set *rfds, fd_set *wfds, fd_set *efds,
  +                const struct timespec *ts, const sigset_t *mask)
  +{
  +    sigset_t omask;
  +    struct timeval tv;
  +    struct timeval *tvp;
  +    int rv;
  +
  +    /* convert timeout */
  +    if (ts != NULL) {
  +        tv.tv_sec  = ts->tv_sec;
  +        tv.tv_usec = ts->tv_nsec / 1000;
  +        tvp = &tv;
  +    }
  +    else
  +        tvp = NULL;
  +
  +    /* optionally set signal mask */
  +    if (mask != NULL)
  +        if (pth_sc(sigprocmask)(SIG_SETMASK, mask, &omask) < 0)
  +            return pth_error(-1, errno);
  +
  +    rv = pth_select(nfds, rfds, wfds, efds, tvp);
  +
  +    /* optionally set signal mask */
  +    if (mask != NULL)
  +        pth_shield { pth_sc(sigprocmask)(SIG_SETMASK, &omask, NULL); }
  +
  +    return rv;
  +}
  +
   /* Pth variant of poll(2) */
   int pth_poll(struct pollfd *pfd, nfds_t nfd, int timeout)
   {
  Index: ossp-pkg/pth/pth_syscall.c
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 pth_syscall.c
  --- ossp-pkg/pth/pth_syscall.c	20 Oct 2002 16:22:03 -0000	1.25
  +++ ossp-pkg/pth/pth_syscall.c	25 Oct 2002 11:56:16 -0000	1.26
  @@ -401,6 +401,18 @@
   #endif
   }
   
  +/* ==== Pth hard syscall wrapper for pselect(2) ==== */
  +int pselect(int, fd_set *, fd_set *, fd_set *, const struct timespec *, const sigset_t *);
  +int pselect(int nfds, fd_set *rfds, fd_set *wfds, fd_set *efds,
  +            const struct timespec *ts, const sigset_t *mask)
  +{
  +    /* external entry point for application */
  +    pth_implicit_init();
  +    return pth_pselect(nfds, rfds, wfds, efds, ts, mask);
  +}
  +/* NOTICE: internally fully emulated, so still no
  +   internal exit point pth_sc_pselect necessary! */
  +
   /* ==== Pth hard syscall wrapper for poll(2) ==== */
   int poll(struct pollfd *pfd, nfds_t nfd, int timeout)
   {

From ossp-cvs-owner@ossp.org  Fri Oct 25 13:59:18 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6513976A15; Fri, 25 Oct 2002 13:59:18 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth pth_high.c
Message-Id: <20021025115918.6513976A15@mail.ossp.org>
Date: Fri, 25 Oct 2002 13:59:18 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Oct-2002 13:59:18
  Branch: HEAD                             Handle: 2002102512591800

  Modified files:
    ossp-pkg/pth            pth_high.c

  Log:
    also complain on EINVAL immediately without asking the scheduler

  Summary:
    Revision    Changes     Path
    1.94        +2  -2      ossp-pkg/pth/pth_high.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/pth_high.c
  ============================================================
  $ cvs diff -u -r1.93 -r1.94 pth_high.c
  --- ossp-pkg/pth/pth_high.c	25 Oct 2002 11:56:16 -0000	1.93
  +++ ossp-pkg/pth/pth_high.c	25 Oct 2002 11:59:18 -0000	1.94
  @@ -378,8 +378,8 @@
               return 0;
           }
       }
  -    if (rc < 0 && errno == EBADF)
  -        return pth_error(-1, EBADF);
  +    if (rc < 0 && (errno == EINVAL || errno == EBADF))
  +        return pth_error(-1, errno);
   
       /* suspend current thread until one fd is ready or the timeout occurred */
       rc = -1;

From ossp-cvs-owner@ossp.org  Fri Oct 25 15:29:03 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E4C9E76A15; Fri, 25 Oct 2002 15:29:02 +0200 (CEST)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.c list.h
Message-Id: <20021025132902.E4C9E76A15@mail.ossp.org>
Date: Fri, 25 Oct 2002 15:29:02 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   25-Oct-2002 15:29:02
  Branch: HEAD                             Handle: 2002102514290200

  Modified files:
    ossp-pkg/sio            al.c list.h

  Log:
    optimize al_splice to unlink/relink several chunks in a single step
    added necessary list macros to list.h

  Summary:
    Revision    Changes     Path
    1.32        +29 -9      ossp-pkg/sio/al.c
    1.3         +33 -29     ossp-pkg/sio/list.h
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.c
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 al.c
  --- ossp-pkg/sio/al.c	23 Oct 2002 16:49:29 -0000	1.31
  +++ ossp-pkg/sio/al.c	25 Oct 2002 13:29:02 -0000	1.32
  @@ -611,7 +611,7 @@
   al_splice(al_t *al, size_t off, size_t n, al_t *nal, al_t *tal)
   {
       al_rc_t rc;
  -    al_chunk_t *cur, *next, *ins, *splitbuf;
  +    al_chunk_t *cur, *start, *end, *next, *ins, *splitbuf;
       size_t pos, skip, len, step;
       int doinsert;
   
  @@ -730,12 +730,14 @@
           }
           else {
               /*
  -             * the whole chunk has to be moved, simply move it
  -             * to the target chain
  +             * the whole chunk has to be moved,
  +             *
  +             * scan ahead for more such chunks to unlink
  +             * and relink a whole chain in a single operation
  +             *
  +             * move the chunks to the target chain
                * manual accounting for total size
                */
  -            step = len;
  -            REMOVE(al, chunks, cur);
   
               /*
                * when the insertion chunk is removed, we have to adjust
  @@ -745,14 +747,32 @@
                * next pointer and the insertion method switches to append
                * mode
                */
  +
  +            step  = len;
  +            start = cur;
  +            end   = cur;
  +
               if (cur == ins)
                   ins = next;
   
  +            while (next && step + (len = AL_CHUNK_LEN(next)) <= n) {
  +                step += len;
  +                end  = next;
  +                next = NEXT(next, chunks);
  +                if (end == ins)
  +                    ins = next;
  +            }
  +            REMOVE2(al, chunks, start, end);
  +
               al->bytes -= step;
  -            if (tal == NULL)
  -                dispose_chunk(al, cur);
  -            else {
  -                ADDTAIL(tal, chunks, cur);
  +            if (tal == NULL) {
  +                do {
  +                    cur = start;
  +                    start = NEXT(cur, chunks);
  +                    dispose_chunk(al, cur);
  +                } while (cur != end);
  +            } else {
  +                ADDTAIL2(tal, chunks, start, end);
                   tal->bytes += step;
               }
           }
  Index: ossp-pkg/sio/list.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 list.h
  --- ossp-pkg/sio/list.h	18 Oct 2002 10:21:41 -0000	1.2
  +++ ossp-pkg/sio/list.h	25 Oct 2002 13:29:02 -0000	1.3
  @@ -56,31 +56,33 @@
       PREV(n,l) = NULL; \
   } while(0)
   
  -#define ADDTAIL(q,l,n) \
  +#define ADDTAIL2(q,l,n1,n2) \
   do { \
       if (TAIL(q,l)) { \
  -        NEXT(TAIL(q,l),l) = (n); \
  -        PREV(n,l) = TAIL(q,l); \
  +        NEXT(TAIL(q,l),l) = (n1); \
  +        PREV(n1,l) = TAIL(q,l); \
       } else { \
  -        PREV(n,l) = NULL; \
  -        HEAD(q,l) = (n); \
  +        HEAD(q,l) = (n1); \
  +        PREV(n1,l) = NULL; \
       } \
  -    TAIL(q,l) = (n); \
  -    NEXT(n,l) = NULL; \
  +    TAIL(q,l) = (n2); \
  +    NEXT(n2,l) = NULL; \
   } while (0)
  +#define ADDTAIL(q,l,n) ADDTAIL2(q,l,n,n)
   
  -#define ADDHEAD(q,l,n) \
  +#define ADDHEAD2(q,l,n1,n2) \
   do { \
       if (HEAD(q,l)) { \
  -        PREV(HEAD(q,l),l) = (n); \
  -        NEXT(n,l) = HEAD(q,l); \
  +        PREV(HEAD(q,l),l) = (n2); \
  +        NEXT(n2,l) = HEAD(q,l); \
       } else { \
  -        NEXT(n,l) = NULL; \
  -        TAIL(q,l) = (n); \
  +        TAIL(q,l) = (n2); \
  +        NEXT(n2,l) = NULL; \
       } \
  -    HEAD(q,l) = (n); \
  -    PREV(n,l) = NULL; \
  +    HEAD(q,l) = (n1); \
  +    PREV(n1,l) = NULL; \
   } while (0)
  +#define ADDHEAD(q,l,n) ADDHEAD2(q,l,n,n)
   
   #define REMHEAD(q,l,n) \
   do { \
  @@ -106,31 +108,33 @@
       } \
   } while(0)
   
  -#define REMOVE(q,l,n) \
  +#define REMOVE2(q,l,n1,n2) \
   do { \
  -    if (PREV(n,l)) \
  -        NEXT(PREV(n,l),l) = NEXT(n,l); \
  +    if (PREV(n1,l)) \
  +        NEXT(PREV(n1,l),l) = NEXT(n2,l); \
       else \
  -        HEAD(q,l) = NEXT(n,l); \
  -    if (NEXT(n,l)) \
  -        PREV(NEXT(n,l),l) = PREV(n,l); \
  +        HEAD(q,l) = NEXT(n2,l); \
  +    if (NEXT(n2,l)) \
  +        PREV(NEXT(n2,l),l) = PREV(n1,l); \
       else \
  -        TAIL(q,l) = PREV(n,l); \
  -    NEXT(n,l) = NULL; \
  -    PREV(n,l) = NULL; \
  +        TAIL(q,l) = PREV(n1,l); \
  +    NEXT(n2,l) = NULL; \
  +    PREV(n1,l) = NULL; \
   } while (0)
  +#define REMOVE(q,l,n) REMOVE2(q,l,n,n)
   
  -#define INSERT(q,l,i,n) \
  +#define INSERT2(q,l,i,n1,n2) \
   do { \
       if (PREV(i,l)) { \
  -        NEXT(PREV(i,l),l) = (n); \
  +        NEXT(PREV(i,l),l) = (n1); \
       } else { \
  -        HEAD(q,l) = (n); \
  +        HEAD(q,l) = (n1); \
       } \
  -    PREV(n,l) = PREV(i,l); \
  -    PREV(i,l) = (n); \
  -    NEXT(n,l) = (i); \
  +    PREV(n1,l) = PREV(i,l); \
  +    PREV(i,l) = (n2); \
  +    NEXT(n2,l) = (i); \
   } while (0)
  +#define INSERT(q,l,i,n) INSERT2(q,l,i,n,n)
   
   #define APPENDLIST(q1,l,q2) \
   do { \

From ossp-cvs-owner@ossp.org  Fri Oct 25 17:27:29 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9753676A16; Fri, 25 Oct 2002 17:27:29 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c
Message-Id: <20021025152729.9753676A16@mail.ossp.org>
Date: Fri, 25 Oct 2002 17:27:29 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Oct-2002 17:27:29
  Branch: HEAD                             Handle: 2002102516272900

  Modified files:
    ossp-pkg/sa             sa.c

  Log:
    Fix error processing logic in sa_read().
    
    Submitted by: Ulrich Dessauer <udessauer@agnitas.de>

  Summary:
    Revision    Changes     Path
    1.60        +1  -1      ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.59 -r1.60 sa.c
  --- ossp-pkg/sa/sa.c	11 Oct 2002 15:27:39 -0000	1.59
  +++ ossp-pkg/sa/sa.c	25 Oct 2002 15:27:29 -0000	1.60
  @@ -1688,7 +1688,7 @@
                       else if (n < 0)
                           /* error on this read, but perhaps ok as a whole */
                           rv = (res == 0 ? SA_ERR_SYS : SA_OK);
  -                    if (n == 0)
  +                    else if (n == 0)
                           /* EOF on this read, but perhaps ok as a whole */
                           rv = (res == 0 ? SA_ERR_EOF : SA_OK);
                       else {

From ossp-cvs-owner@ossp.org  Fri Oct 25 18:04:06 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 760D2769FB; Fri, 25 Oct 2002 18:04:06 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.pod
Message-Id: <20021025160406.760D2769FB@mail.ossp.org>
Date: Fri, 25 Oct 2002 18:04:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Oct-2002 18:04:06
  Branch: HEAD                             Handle: 2002102517040600

  Modified files:
    ossp-pkg/sa             sa.pod

  Log:
    enhance rendering and fix lingering semantics

  Summary:
    Revision    Changes     Path
    1.26        +23 -15     ossp-pkg/sa/sa.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.pod
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 sa.pod
  --- ossp-pkg/sa/sa.pod	15 Mar 2002 10:47:36 -0000	1.25
  +++ ossp-pkg/sa/sa.pod	25 Oct 2002 16:04:06 -0000	1.26
  @@ -437,21 +437,29 @@
   
   The adjusted option is controlled by I<id>. The number and type of
   the expected following argument(s) are dependent on the particular
  -option. Currently the following options are implement (option arguments
  -in parenthesis): C<SA_OPTION_NAGLE> (C<int> I<yesno>) for enabling
  -(I<yesno>=C<1>) or disabling (I<yesno>=C<0>) Nagle's Algorithm
  -(see RFC898); C<SA_OPTION_LINGER> (C<struct linger *>I<linger>) for enabling
  -(C<linger-E<gt>l_onoff>=C<1>) or disabling (C<linger-E<gt>l_onoff>=C<0>
  -and C<linger-E<gt>l_linger=>I<seconds>) lingering on close (see
  -C<struct linger> in F<sys/socket.h>); C<SA_OPTION_REUSEADDR> (C<int>
  -I<yesno>) for enabling (I<yesno>=C<1>) or disabling (I<yesno>=C<0>)
  -the reusability of the address on binding (see C<SO_REUSEADDR>
  -of setsockopt(2)), C<SA_OPTION_REUSEPORT> (C<int> I<yesno>) for
  -enabling (I<yesno>=C<1>) or disabling (I<yesno>=C<0>) the reusability
  -of the port on binding (see C<SO_REUSEPORT> of setsockopt(2)),
  -C<SA_OPTION_NONBLOCK> (C<int> I<yesno>) for enabling (I<yesno>=C<1>) or
  -disabling (I<yesno>=C<0>) non-blocking I/O mode (see C<O_NONBLOCK> of
  -fcntl(2)).
  +option. Currently the following options are implemented (option arguments
  +in parenthesis): 
  +
  +C<SA_OPTION_NAGLE> (C<int> I<yesno>) for enabling (I<yesno>=C<1>) or
  +disabling (I<yesno> == C<0>) Nagle's Algorithm (see RFC898).
  +
  +C<SA_OPTION_LINGER> (C<struct linger *>I<linger>) for enabling
  +(C<linger-E<gt>l_onoff> == C<1> and C<linger-E<gt>l_linger> ==
  +I<seconds>) or disabling (C<linger-E<gt>l_onoff> == C<0>) lingering
  +on close (see C<SO_LINGER> of setsockopt(2) and C<struct linger> in
  +F<sys/socket.h>).
  +
  +C<SA_OPTION_REUSEADDR> (C<int> I<yesno>) for enabling (I<yesno> ==
  +C<1>) or disabling (I<yesno> == C<0>) the reusability of the address on
  +binding (see C<SO_REUSEADDR> of setsockopt(2)).
  +
  +C<SA_OPTION_REUSEPORT> (C<int> I<yesno>) for enabling (I<yesno> == C<1>)
  +or disabling (I<yesno> == C<0>) the reusability of the port on binding
  +(see C<SO_REUSEPORT> of setsockopt(2)).
  +
  +C<SA_OPTION_NONBLOCK> (C<int> I<yesno>) for enabling (I<yesno> == C<1>)
  +or disabling (I<yesno> == C<0>) non-blocking I/O mode (see C<O_NONBLOCK>
  +of fcntl(2)).
   
   Example: C<sa_option(sa, SA_OPTION_NONBLOCK, 1);>
   

From ossp-cvs-owner@ossp.org  Fri Oct 25 18:07:42 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 50A8B769FB; Fri, 25 Oct 2002 18:07:42 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.pod
Message-Id: <20021025160742.50A8B769FB@mail.ossp.org>
Date: Fri, 25 Oct 2002 18:07:42 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Oct-2002 18:07:42
  Branch: HEAD                             Handle: 2002102517074100

  Modified files:
    ossp-pkg/sa             sa.pod

  Log:
    better rendering of sa_syscall documentation

  Summary:
    Revision    Changes     Path
    1.27        +14 -7      ossp-pkg/sa/sa.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.pod
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 sa.pod
  --- ossp-pkg/sa/sa.pod	25 Oct 2002 16:04:06 -0000	1.26
  +++ ossp-pkg/sa/sa.pod	25 Oct 2002 16:07:41 -0000	1.27
  @@ -483,13 +483,20 @@
   
   Possible values for I<id> are (expected prototypes behind I<fptr> are
   given in parenthesis): 
  -C<SA_SYSCALL_CONNECT>  ("C<int (*)([void *,] int, const struct sockaddr *, socklen_t)>", see connect(2)),
  -C<SA_SYSCALL_ACCEPT>   ("C<int (*)([void *,] int, struct sockaddr *, socklen_t *)>", see accept(2)),
  -C<SA_SYSCALL_SELECT>   ("C<int (*)([void *,] int, fd_set *, fd_set *, fd_set *, struct timeval *)>", see select(2)),
  -C<SA_SYSCALL_READ>     ("C<ssize_t (*)([void *,] int, void *, size_t)>", see read(2)), 
  -C<SA_SYSCALL_WRITE>    ("C<ssize_t (*)([void *,] int, const void *, size_t)>", see write(2)), 
  -C<SA_SYSCALL_RECVFROM> ("C<ssize_t (*)([void *,] int, void *, size_t, int, struct sockaddr *, socklen_t *)>", see recvfrom(2)), 
  -C<SA_SYSCALL_SENDTO>   ("C<ssize_t (*)([void *,] int, const void *, size_t, int, const struct sockaddr *, socklen_t)>", see sendto(2)).
  +
  +C<SA_SYSCALL_CONNECT>: "C<int (*)([void *,] int, const struct sockaddr *, socklen_t)>", see connect(2).
  +
  +C<SA_SYSCALL_ACCEPT>: "C<int (*)([void *,] int, struct sockaddr *, socklen_t *)>", see accept(2).
  +
  +C<SA_SYSCALL_SELECT>: "C<int (*)([void *,] int, fd_set *, fd_set *, fd_set *, struct timeval *)>", see select(2).
  +
  +C<SA_SYSCALL_READ>: "C<ssize_t (*)([void *,] int, void *, size_t)>", see read(2). 
  +
  +C<SA_SYSCALL_WRITE>: "C<ssize_t (*)([void *,] int, const void *, size_t)>", see write(2). 
  +
  +C<SA_SYSCALL_RECVFROM>: "C<ssize_t (*)([void *,] int, void *, size_t, int, struct sockaddr *, socklen_t *)>", see recvfrom(2). 
  +
  +C<SA_SYSCALL_SENDTO>: "C<ssize_t (*)([void *,] int, const void *, size_t, int, const struct sockaddr *, socklen_t)>", see sendto(2).
   
   Example: 
   

From ossp-cvs-owner@ossp.org  Fri Oct 25 19:36:08 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A5E95769FB; Fri, 25 Oct 2002 19:36:08 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.pod
Message-Id: <20021025173608.A5E95769FB@mail.ossp.org>
Date: Fri, 25 Oct 2002 19:36:08 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Oct-2002 19:36:08
  Branch: HEAD                             Handle: 2002102518360800

  Modified files:
    ossp-pkg/sa             sa.pod

  Log:
    fix typos

  Summary:
    Revision    Changes     Path
    1.28        +4  -4      ossp-pkg/sa/sa.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.pod
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 sa.pod
  --- ossp-pkg/sa/sa.pod	25 Oct 2002 16:07:41 -0000	1.27
  +++ ossp-pkg/sa/sa.pod	25 Oct 2002 17:36:08 -0000	1.28
  @@ -128,7 +128,7 @@
   
   =item B<Address Abstraction>
   
  -Most of the uglyness in the Unix I<Socket> API is the necessarity to
  +Most of the ugliness in the Unix I<Socket> API is the necessity to
   have to deal with the various address structures (C<struct sockaddr_xx>)
   which exist because of both the different communication types and
   addressing schemes. B<OSSP sa> fully hides this by providing an abstract
  @@ -174,7 +174,7 @@
   by sa_buffer()) for achieving higher I/O performance by doing I/O
   operations on larger aggregated messages and with less required system
   calls. Additionally if B<OSSP sa> is used for stream communication, for
  -convinience reasons line-oriented reading (sa_readln()) and formatted
  +convenience reasons line-oriented reading (sa_readln()) and formatted
   writing (see sa_writef()) is provided, modelled after STDIO's fgets(3)
   and fprintf(3). Both features fully leverage from the I/O buffering.
   
  @@ -275,7 +275,7 @@
   
   =item sa_rc_t B<sa_addr_s2a>(sa_addr_t *I<saa>, const struct sockaddr *I<sabuf>, socklen_t I<salen>);
   
  -Import an address by converting from a tranditional C<struct sockaddr>
  +Import an address by converting from a traditional C<struct sockaddr>
   object to the corresponding address abstraction.
   
   The accepted addresses for I<sabuf> are: C<struct sockaddr_un>
  @@ -570,7 +570,7 @@
   request on the queue of pending connections. It creates a new socket
   abstraction object (returned in I<csa>) and a new socket address
   abstraction object (returned in I<caddr>) describing the connection. The
  -caller has to destroy these objects laters. If no pending connections
  +caller has to destroy these objects later. If no pending connections
   are present on the queue, it blocks the caller until a connection is
   present.
   

From ossp-cvs-owner@ossp.org  Fri Oct 25 20:10:44 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C7E08769FB; Fri, 25 Oct 2002 20:10:43 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.pod
Message-Id: <20021025181043.C7E08769FB@mail.ossp.org>
Date: Fri, 25 Oct 2002 20:10:43 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Oct-2002 20:10:43
  Branch: HEAD                             Handle: 2002102519104300

  Modified files:
    ossp-pkg/sa             sa.pod

  Log:
    cleanup the manual page (first part)

  Summary:
    Revision    Changes     Path
    1.29        +106 -76    ossp-pkg/sa/sa.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.pod
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 sa.pod
  --- ossp-pkg/sa/sa.pod	25 Oct 2002 17:36:08 -0000	1.28
  +++ ossp-pkg/sa/sa.pod	25 Oct 2002 18:10:43 -0000	1.29
  @@ -158,24 +158,24 @@
   =item B<I/O Timeouts>
   
   Each I/O function in B<OSSP sa> is aware of timeouts (set by
  -sa_timeout()), i.e., all I/O operations return C<SA_ERR_TMT> if the
  -timeout expired before the I/O operation was able to succeed. This
  -allows one to easily program less-blocking network services. B<OSSP
  -sa> internally implements these timeouts either through the
  -C<SO_{SND,RCV}TIMEO> feature on more modern I<Socket> implementations
  -or through traditional select(2). This way high performance is achieved
  -on modern platforms while the full functionality still is available on
  -older platforms.
  +sa_timeout(3)), i.e., all I/O operations return C<SA_ERR_TMT> if
  +the timeout expired before the I/O operation was able to succeed.
  +This allows one to easily program less-blocking network services.
  +B<OSSP sa> internally implements these timeouts either through the
  +C<SO_>{C<SND>,C<RCV>}C<TIMEO> feature on more modern I<Socket>
  +implementations or through traditional select(2). This way high
  +performance is achieved on modern platforms while the full functionality
  +still is available on older platforms.
   
   =item B<I/O Stream Buffering>
   
   If B<OSSP sa> is used for stream communication, internally all I/O
   operations can be performed through input and/or output buffers (set
  -by sa_buffer()) for achieving higher I/O performance by doing I/O
  +by sa_buffer(3)) for achieving higher I/O performance by doing I/O
   operations on larger aggregated messages and with less required system
   calls. Additionally if B<OSSP sa> is used for stream communication, for
  -convenience reasons line-oriented reading (sa_readln()) and formatted
  -writing (see sa_writef()) is provided, modelled after STDIO's fgets(3)
  +convenience reasons line-oriented reading (sa_readln(3)) and formatted
  +writing (see sa_writef(3)) is provided, modelled after STDIO's fgets(3)
   and fprintf(3). Both features fully leverage from the I/O buffering.
   
   =back
  @@ -217,26 +217,32 @@
   =head1 FUNCTIONS
   
   B<OSSP sa> provides a bunch of API functions, all modelled after the
  -same prototype: "C<sa_rc_t> C<sa_>I<name>C<(sa_>[C<addr_>]C<_t *,>
  -...C<)>". This means every function returns C<sa_rc_t> to indicate its
  -success (C<SA_OK>) or failure (C<SA_ERR_XXX>) by returning a return code
  -(the corresponding describing text can be determined by passing this
  -return code to C<sa_error>). Each function name starts with the common
  -prefix C<sa_> and receives a C<sa_t> (or C<sa_addr_t>) object on which
  +same prototype:
  +
  +C<sa_rc_t> B<sa_>I<name>C<(sa_>[C<addr_>]C<_t *,> ...C<)>
  +
  +This means, every function returns C<sa_rc_t> to indicate its success
  +(C<SA_OK>) or failure (C<SA_ERR_>I<XXX>) by returning a return code (the
  +corresponding describing text can be determined by passing this return
  +code to sa_error(3)). Each function name starts with the common prefix
  +C<sa_> and receives a C<sa_t> (or C<sa_addr_t>) object handle on which
   it operates as its first argument.
   
   =head2 Address Object Operations
   
  +This API part provides operations for the creation and destruction of
  +address abstraction C<sa_addr_t>.
  +
   =over 4
   
  -=item sa_rc_t B<sa_addr_create>(sa_addr_t **I<saa>);
  +=item C<sa_rc_t >B<sa_addr_create>C<(sa_addr_t **>I<saa>C<);>
   
   Create a socket address abstraction object. 
   The object is stored in I<saa> on success.
   
   Example: C<sa_addr_t *saa; sa_addr_create(&saa);>
   
  -=item sa_rc_t B<sa_addr_destroy>(sa_addr_t *I<saa>);
  +=item C<sa_rc_t >B<sa_addr_destroy>C<(sa_addr_t *>I<saa>C<);>
   
   Destroy a socket address abstraction object.
   The object I<saa> is invalid after this call succeeded.
  @@ -247,9 +253,12 @@
   
   =head2 Address Operations
   
  +This API part provides operations for working with the address
  +abstraction C<sa_addr_t>.
  +
   =over 4
   
  -=item sa_rc_t B<sa_addr_u2a>(sa_addr_t *I<saa>, const char *I<uri>, ...);
  +=item C<sa_rc_t >B<sa_addr_u2a>C<(sa_addr_t *>I<saa>C<, const char *>I<uri>C<, ...);>
   
   Import an address into by converting from an URI specification to the
   corresponding address abstraction. 
  @@ -263,17 +272,16 @@
   in dotted decimal notation ("C<127.0.0.1>"), an IPv6 address in
   colon-separated (optionally abbreviated) hexadecimal notation ("C<::1>")
   or a to-be-resolved hostname ("C<localhost.example.com>"). I<port> has
  -to be either a decimal port in the range C<1>...C<65535> or a port
  -name ("C<smtp>"). If I<port> is specified as a name, it is resolved as
  -a TCP port by default. To force resolving a I<port> name via a
  -particular protocol, I<protocol> can be specified as either "C<tcp>" or
  -"C<udp>".
  +to be either a decimal port in the range C<1>...C<65535> or a port name
  +("C<smtp>"). If I<port> is specified as a name, it is resolved as a TCP
  +port by default. To force resolving a I<port> name via a particular
  +protocol, I<protocol> can be specified as either "C<tcp>" or "C<udp>".
   
   The result is stored in I<saa> on success.
   
   Example: C<sa_addr_u2a(saa, "inet://192.168.0.1:smtp");>
   
  -=item sa_rc_t B<sa_addr_s2a>(sa_addr_t *I<saa>, const struct sockaddr *I<sabuf>, socklen_t I<salen>);
  +=item C<sa_rc_t >B<sa_addr_s2a>C<(sa_addr_t *>I<saa>C<, const struct sockaddr *>I<sabuf>C<, socklen_t >I<salen>C<);>
   
   Import an address by converting from a traditional C<struct sockaddr>
   object to the corresponding address abstraction.
  @@ -281,13 +289,13 @@
   The accepted addresses for I<sabuf> are: C<struct sockaddr_un>
   (C<AF_LOCAL>), C<struct sockaddr_in> (C<AF_INET>) and C<struct
   sockaddr_in6> (C<AF_INET6>). The I<salen> is the corresponding
  -C<sizeof()> of the underlying structure.
  +C<sizeof(...)> of the particular underyling structure.
   
   The result is stored in I<saa> on success.
   
   Example: C<sockaddr_in in; sa_addr_s2a(saa, (struct sockaddr *)&in, (socklen_t)sizeof(in));>
   
  -=item sa_rc_t B<sa_addr_a2u>(sa_addr_t *I<saa>, char **I<uri>);
  +=item C<sa_rc_t >B<sa_addr_a2u>C<(sa_addr_t *>I<saa>C<, char **>I<uri>C<);>
   
   Export an address by converting from the address abstraction to the
   corresponding URI specification. 
  @@ -296,7 +304,7 @@
   Domain> addresses and "C<inet://>I<addr>C<:>I<port>" for I<Internet
   Domain> addresses. Notice that I<addr> and I<port> are returned in
   numerical (unresolved) way. Additionally, because usually one cannot map
  -bi-directionally between TCP or UDP port names and the numerical value,
  +bidirectionally between TCP or UDP port names and the numerical value,
   there is no distinction between TCP and UDP here.
   
   The result is stored in I<uri> on success.
  @@ -304,21 +312,21 @@
   
   Example: C<char *uri; sa_addr_a2u(saa, &uri);>
   
  -=item sa_rc_t B<sa_addr_a2s>(sa_addr_t *I<saa>, struct sockaddr **I<sabuf>, socklen_t *I<salen>);
  +=item C<sa_rc_t >B<sa_addr_a2s>C<(sa_addr_t *>I<saa>C<, struct sockaddr **>I<sabuf>C<, socklen_t *>I<salen>C<);>
   
   Export an address by converting from the address abstraction to the
   corresponding traditional C<struct sockaddr> object. 
   
  -The result is one of the following underlying address structures: C<struct
  -sockaddr_un> (C<AF_LOCAL>), C<struct sockaddr_in> (C<AF_INET>) and C<struct
  -sockaddr_in6> (C<AF_INET6>). 
  +The result is one of the following particular underlying address
  +structures: C<struct sockaddr_un> (C<AF_LOCAL>), C<struct sockaddr_in>
  +(C<AF_INET>) and C<struct sockaddr_in6> (C<AF_INET6>).
   
   The result is stored in I<sabuf> and I<salen> on success.
   The caller has to free(3) the I<sabuf> buffer later.
   
   Example: C<struct sockaddr sabuf, socklen_t salen; sa_addr_a2s(saa, &sa, &salen);>
   
  -=item sa_rc_t B<sa_addr_match>(sa_addr_t *I<saa1>, sa_addr_t *I<saa2>, size_t I<prefixlen>);
  +=item C<sa_rc_t >B<sa_addr_match>C<(sa_addr_t *>I<saa1>C<, sa_addr_t *>I<saa2>C<, size_t >I<prefixlen>C<);>
   
   Match two address abstractions up to a specified prefix.
   
  @@ -337,7 +345,7 @@
   
   This especially can be used to implement Access Control Lists (ACL)
   without having to fiddle around with the underlying representation.
  -For this make I<saa1> the to be checked address and I<saa2> plus
  +For this, make I<saa1> the to be checked address and I<saa2> plus
   I<prefixlen> the ACL pattern as shown in the following example.
   
   Example:
  @@ -367,16 +375,19 @@
   
   =head2 Socket Object Operations
   
  +This API part provides operations for the creation and destruction of
  +socket abstraction C<sa_t>.
  +
   =over 4
   
  -=item sa_rc_t B<sa_create>(sa_t **I<sa>);
  +=item C<sa_rc_t >B<sa_create>C<(sa_t **>I<sa>C<);>
   
   Create a socket abstraction object.
   The object is stored in I<sa> on success.
   
   Example: C<sa_t *sa; sa_create(&sa);>
   
  -=item sa_rc_t B<sa_destroy>(sa_t *I<sa>);
  +=item C<sa_rc_t >B<sa_destroy>C<(sa_t *>I<sa>C<);>
   
   Destroy a socket abstraction object.
   The object I<sa> is invalid after this call succeeded.
  @@ -384,12 +395,15 @@
   Example: C<sa_destroy(sa);>
   
   =back
  -            
  +
   =head2 Socket Parameter Operations
   
  +This API part provides operations for parameterizing the socket
  +abstraction C<sa_t>.
  +
   =over 4
   
  -=item sa_rc_t B<sa_type>(sa_t *I<sa>, sa_type_t I<type>);
  +=item C<sa_rc_t >B<sa_type>C<(sa_t *>I<sa>C<, sa_type_t >I<type>C<);>
   
   Assign a particular communication protocol type to the socket
   abstraction object.
  @@ -406,39 +420,40 @@
   
   Example: C<sa_type(sa, SA_TYPE_STREAM);>
   
  -=item sa_rc_t B<sa_timeout>(sa_t *I<sa>, sa_timeout_t I<id>, long I<sec>, long I<usec>);
  +=item C<sa_rc_t >B<sa_timeout>C<(sa_t *>I<sa>C<, sa_timeout_t >I<id>C<, long >I<sec>C<, long >I<usec>C<);>
   
  -Assign one or more communication timeouts to the socket abstraction object.
  +Assign one or more communication timeouts to the socket abstraction
  +object.
   
   Possible values for I<id> are: C<SA_TIMEOUT_ACCEPT> (affecting
  -sa_accept()), C<SA_TIMEOUT_CONNECT> (affecting sa_connect()),
  -C<SA_TIMEOUT_READ> (affecting sa_read(), sa_readln() and sa_recv())
  -and C<SA_TIMEOUT_WRITE> (affecting sa_write(), sa_writef() and
  -sa_send()). Additionally you can set all four timeouts at once by using
  +sa_accept(3)), C<SA_TIMEOUT_CONNECT> (affecting sa_connect(3)),
  +C<SA_TIMEOUT_READ> (affecting sa_read(3), sa_readln(3) and sa_recv(3))
  +and C<SA_TIMEOUT_WRITE> (affecting sa_write(3), sa_writef(3) and
  +sa_send(3)). Additionally you can set all four timeouts at once by using
   C<SA_TIMEOUT_ALL>. The default is that no communication timeouts are
   used which is equal to I<sec>=C<0>/I<usec>=C<0>.
   
   Example: C<sa_timeout(sa, SA_TIMEOUT_ALL, 30, 0);>
   
  -=item sa_rc_t B<sa_buffer>(sa_t *I<sa>, sa_buffer_t I<id>, size_t I<size>);
  +=item C<sa_rc_t >B<sa_buffer>C<(sa_t *>I<sa>C<, sa_buffer_t >I<id>C<, size_t >I<size>C<);>
   
   Assign I/O communication buffers to the socket abstraction object.
   
  -Possible values for I<id> are: C<SA_BUFFER_READ> (affecting sa_read()
  -and sa_readln()) and C<SA_BUFFER_WRITE> (affecting sa_write() and
  -sa_writef()). The default is that no communication buffers are
  -used which is equal to I<size>=C<0>.
  +Possible values for I<id> are: C<SA_BUFFER_READ> (affecting sa_read(3)
  +and sa_readln(3)) and C<SA_BUFFER_WRITE> (affecting sa_write(3) and
  +sa_writef(3)). The default is that no communication buffers are used
  +which is equal to I<size>=C<0>.
   
   Example: C<sa_buffer(sa, SA_BUFFER_READ, 16384);>
   
  -=item sa_rc_t B<sa_option>(sa_t *I<sa>, sa_option_t I<id>, ...);
  +=item C<sa_rc_t >B<sa_option>C<(sa_t *>I<sa>C<, sa_option_t >I<id>C<, ...);>
   
   Adjust various options of the socket abstraction object.
   
  -The adjusted option is controlled by I<id>. The number and type of
  -the expected following argument(s) are dependent on the particular
  -option. Currently the following options are implemented (option arguments
  -in parenthesis): 
  +The adjusted option is controlled by I<id>. The number and type of the
  +expected following argument(s) are dependent on the particular option.
  +Currently the following options are implemented (option arguments in
  +parenthesis):
   
   C<SA_OPTION_NAGLE> (C<int> I<yesno>) for enabling (I<yesno>=C<1>) or
   disabling (I<yesno> == C<0>) Nagle's Algorithm (see RFC898).
  @@ -451,11 +466,11 @@
   
   C<SA_OPTION_REUSEADDR> (C<int> I<yesno>) for enabling (I<yesno> ==
   C<1>) or disabling (I<yesno> == C<0>) the reusability of the address on
  -binding (see C<SO_REUSEADDR> of setsockopt(2)).
  +binding via sa_bind(3) (see C<SO_REUSEADDR> of setsockopt(2)).
   
   C<SA_OPTION_REUSEPORT> (C<int> I<yesno>) for enabling (I<yesno> == C<1>)
   or disabling (I<yesno> == C<0>) the reusability of the port on binding
  -(see C<SO_REUSEPORT> of setsockopt(2)).
  +via sa_bind(3) (see C<SO_REUSEPORT> of setsockopt(2)).
   
   C<SA_OPTION_NONBLOCK> (C<int> I<yesno>) for enabling (I<yesno> == C<1>)
   or disabling (I<yesno> == C<0>) non-blocking I/O mode (see C<O_NONBLOCK>
  @@ -463,9 +478,10 @@
   
   Example: C<sa_option(sa, SA_OPTION_NONBLOCK, 1);>
   
  -=item sa_rc_t B<sa_syscall>(sa_t *I<sa>, sa_syscall_t I<id>, void (*I<fptr>)(), void *I<fctx>);
  +=item C<sa_rc_t >B<sa_syscall>C<(sa_t *>I<sa>C<, sa_syscall_t >I<id>C<, void (*>I<fptr>C<)(), void *>I<fctx>C<);>
   
  -Divert I/O communication related system calls to user supplied callback functions.
  +Divert I/O communication related system calls to user supplied callback
  +functions.
   
   This allows you to override mostly all I/O related system calls B<OSSP
   sa> internally performs while communicating. This can be used to adapt
  @@ -484,25 +500,33 @@
   Possible values for I<id> are (expected prototypes behind I<fptr> are
   given in parenthesis): 
   
  -C<SA_SYSCALL_CONNECT>: "C<int (*)([void *,] int, const struct sockaddr *, socklen_t)>", see connect(2).
  +C<SA_SYSCALL_CONNECT>: "C<int (*)([void *,] int, const struct sockaddr
  +*, socklen_t)>", see connect(2).
   
  -C<SA_SYSCALL_ACCEPT>: "C<int (*)([void *,] int, struct sockaddr *, socklen_t *)>", see accept(2).
  +C<SA_SYSCALL_ACCEPT>: "C<int (*)([void *,] int, struct sockaddr *,
  +socklen_t *)>", see accept(2).
   
  -C<SA_SYSCALL_SELECT>: "C<int (*)([void *,] int, fd_set *, fd_set *, fd_set *, struct timeval *)>", see select(2).
  +C<SA_SYSCALL_SELECT>: "C<int (*)([void *,] int, fd_set *, fd_set *,
  +fd_set *, struct timeval *)>", see select(2).
   
  -C<SA_SYSCALL_READ>: "C<ssize_t (*)([void *,] int, void *, size_t)>", see read(2). 
  +C<SA_SYSCALL_READ>: "C<ssize_t (*)([void *,] int, void *, size_t)>", see
  +read(2).
   
  -C<SA_SYSCALL_WRITE>: "C<ssize_t (*)([void *,] int, const void *, size_t)>", see write(2). 
  +C<SA_SYSCALL_WRITE>: "C<ssize_t (*)([void *,] int, const void *,
  +size_t)>", see write(2).
   
  -C<SA_SYSCALL_RECVFROM>: "C<ssize_t (*)([void *,] int, void *, size_t, int, struct sockaddr *, socklen_t *)>", see recvfrom(2). 
  +C<SA_SYSCALL_RECVFROM>: "C<ssize_t (*)([void *,] int, void *, size_t,
  +int, struct sockaddr *, socklen_t *)>", see recvfrom(2).
   
  -C<SA_SYSCALL_SENDTO>: "C<ssize_t (*)([void *,] int, const void *, size_t, int, const struct sockaddr *, socklen_t)>", see sendto(2).
  +C<SA_SYSCALL_SENDTO>: "C<ssize_t (*)([void *,] int, const void *,
  +size_t, int, const struct sockaddr *, socklen_t)>", see sendto(2).
   
   Example: 
   
    FILE *trace_fp = ...;
   
  - ssize_t trace_read(void *ctx, int fd, void *buf, size_t len)
  + ssize_t 
  + trace_read(void *ctx, int fd, void *buf, size_t len)
    {
        FILE *fp = (FILE *)ctx; 
        ssize_t rv;
  @@ -510,7 +534,8 @@
   
        rv = read(fd, buf, len);
        errno_saved = errno;
  -     fprintf(fp, "read(%d, %lx, %d) = %d\n", fd, (long)buf, len, rv);
  +     fprintf(fp, "read(%d, %lx, %d) = %d\n", 
  +             fd, (long)buf, len, rv);
        errno = errno_saved;
        return rv;
    }
  @@ -521,23 +546,26 @@
   
   =head2 Socket Connection Operations
   
  +This API part provides operations for stream-oriented data communication
  +through the socket abstraction C<sa_t>.
  +
   =over 4
   
  -=item sa_rc_t B<sa_bind>(sa_t *I<sa>, sa_addr_t *I<laddr>);
  +=item C<sa_rc_t >B<sa_bind>C<(sa_t *>I<sa>C<, sa_addr_t *>I<laddr>C<);>
   
   Bind socket abstraction object to a local protocol address.
   
   This assigns the local protocol address I<laddr>. When a socket is
  -created ) it exists in an address family space but has no protocol
  +created, it exists in an address family space but has no protocol
   address assigned. This call requests that I<laddr> be used as the local
   address. For servers this is the address they later listen on (see
  -sa_listen()) for incoming connections, for clients this is the address
  -used for outgoing connections (see sa_connect()). Internally this
  +sa_listen(3)) for incoming connections, for clients this is the address
  +used for outgoing connections (see sa_connect(3)). Internally this
   directly maps to bind(2).
   
   Example: C<sa_bind(sa, laddr);>
   
  -=item sa_rc_t B<sa_connect>(sa_t *I<sa>, sa_addr_t *I<raddr>);
  +=item C<sa_rc_t >B<sa_connect>C<(sa_t *>I<sa>C<, sa_addr_t *>I<raddr>C<);>
   
   Initiate an outgoing connection on a socket abstraction object.
   
  @@ -551,7 +579,7 @@
   
   Example: C<sa_connect(sa, raddr);>
   
  -=item sa_rc_t B<sa_listen>(sa_t *I<sa>, int I<backlog>);
  +=item C<sa_rc_t >B<sa_listen>C<(sa_t *>I<sa>C<, int >I<backlog>C<);>
   
   Listen for incoming connections on a socket abstraction object.
   
  @@ -562,7 +590,7 @@
   
   Example: C<sa_listen(sa, 128);>
   
  -=item sa_rc_t B<sa_accept>(sa_t *I<sa>, sa_addr_t **I<caddr>, sa_t **I<csa>);
  +=item C<sa_rc_t >B<sa_accept>C<(sa_t *>I<sa>C<, sa_addr_t **>I<caddr>C<, sa_t **>I<csa>C<);>
   
   Accept incoming connection on a socket abstraction object.
   
  @@ -583,7 +611,9 @@
        ...
    }
   
  -=item sa_rc_t B<sa_getremote>(sa_t *I<sa>, sa_addr_t **I<raddr>);
  +=item C<sa_rc_t >B<sa_getremote>C<(sa_t *>I<sa>C<, sa_addr_t **>I<raddr>C<);>
  +
  +FIXME
   
   =item sa_rc_t B<sa_getlocal>(sa_t *I<sa>, sa_addr_t **I<laddr>);
   

From ossp-cvs-owner@ossp.org  Fri Oct 25 21:53:23 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3636E76A16; Fri, 25 Oct 2002 21:53:23 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa TODO
Message-Id: <20021025195323.3636E76A16@mail.ossp.org>
Date: Fri, 25 Oct 2002 21:53:23 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Oct-2002 21:53:23
  Branch: HEAD                             Handle: 2002102520532200

  Modified files:
    ossp-pkg/sa             TODO

  Log:
    remember issue

  Summary:
    Revision    Changes     Path
    1.37        +3  -0      ossp-pkg/sa/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.36 -r1.37 TODO
  --- ossp-pkg/sa/TODO	11 Oct 2002 15:28:18 -0000	1.36
  +++ ossp-pkg/sa/TODO	25 Oct 2002 19:53:22 -0000	1.37
  @@ -8,6 +8,9 @@
   CANDO
   -----
   
  +o provide "satool", a command line interface to the OSSP sa API.
  +  Can optionally use readline or libedit, etc.
  +
   o support for SSL/TLS via small abstraction layer on top of OpenSSL and
     gnutls libraries.
   

From ossp-cvs-owner@ossp.org  Fri Oct 25 22:27:33 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9A59D76A16; Fri, 25 Oct 2002 22:27:33 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa devtool.conf
Message-Id: <20021025202733.9A59D76A16@mail.ossp.org>
Date: Fri, 25 Oct 2002 22:27:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Oct-2002 22:27:33
  Branch: HEAD                             Handle: 2002102521273300

  Modified files:
    ossp-pkg/sa             devtool.conf

  Log:
    upgrade to latest stuff

  Summary:
    Revision    Changes     Path
    1.9         +2  -2      ossp-pkg/sa/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/sa/devtool.conf
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 devtool.conf
  --- ossp-pkg/sa/devtool.conf	28 Jul 2002 08:01:35 -0000	1.8
  +++ ossp-pkg/sa/devtool.conf	25 Oct 2002 20:27:33 -0000	1.9
  @@ -4,8 +4,8 @@
   
   %autogen
       @autogen shtool   1.6.1 "1.6.*" all
  -    @autogen libtool  1.4.2 "1.4*"
  -    @autogen autoconf 2.53  "2.5[3-9]*"
  +    @autogen libtool  1.4.3 "1.4*"
  +    @autogen autoconf 2.54  "2.5[3-9]*"
   
   %autoclean
       @autoclean shtool

From ossp-cvs-owner@ossp.org  Fri Oct 25 22:45:43 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B2F8476A1F; Fri, 25 Oct 2002 22:45:43 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.pod
Message-Id: <20021025204543.B2F8476A1F@mail.ossp.org>
Date: Fri, 25 Oct 2002 22:45:43 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Oct-2002 22:45:43
  Branch: HEAD                             Handle: 2002102521454300

  Modified files:
    ossp-pkg/sa             sa.pod

  Log:
    more documentation, but enough for today

  Summary:
    Revision    Changes     Path
    1.30        +54 -6      ossp-pkg/sa/sa.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.pod
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 sa.pod
  --- ossp-pkg/sa/sa.pod	25 Oct 2002 18:10:43 -0000	1.29
  +++ ossp-pkg/sa/sa.pod	25 Oct 2002 20:45:43 -0000	1.30
  @@ -82,11 +82,11 @@
   sa_accept,  
   sa_getremote,
   sa_getlocal,
  -sa_getfd,
   sa_shutdown.
   
   =item B<Socket Input/Output Operations (Stream Communication)>:
   
  +sa_getfd,
   sa_read,
   sa_readln,
   sa_write,
  @@ -546,8 +546,8 @@
   
   =head2 Socket Connection Operations
   
  -This API part provides operations for stream-oriented data communication
  -through the socket abstraction C<sa_t>.
  +This API part provides connection operations for stream-oriented data
  +communication through the socket abstraction C<sa_t>.
   
   =over 4
   
  @@ -613,20 +613,65 @@
   
   =item C<sa_rc_t >B<sa_getremote>C<(sa_t *>I<sa>C<, sa_addr_t **>I<raddr>C<);>
   
  -FIXME
  +Get address abstraction of remote side of communication.
  +
  +This determines the address of the communication peer and creates a new
  +socket address abstraction object (returned in I<raddr>) describing
  +the peer address. The application has to destroy I<raddr> later with
  +sa_addr_destroy(3).
  +
  +Example: C<sa_addr_t *raddr; sa_getremote(sa, &raddr);>
   
   =item sa_rc_t B<sa_getlocal>(sa_t *I<sa>, sa_addr_t **I<laddr>);
   
  -=item sa_rc_t B<sa_getfd>(sa_t *I<sa>, int *I<fd>);
  +Get address abstraction of local side of communication.
  +
  +This determines the address of the local communication side and
  +creates a new socket address abstraction object (returned in I<laddr>)
  +describing the local address. The application has to destroy I<laddr>
  +later with sa_addr_destroy(3).
  +
  +Example: C<sa_addr_t *laddr; sa_getlocal(sa, &laddr);>
   
   =item sa_rc_t B<sa_shutdown>(sa_t *I<sa>, char *I<flags>);
   
  +Shut down part of the full-duplex connection.
  +
  +This performs a shut down of the connection descriped in I<sa>. The
  +flags string can be either "C<r>" (indicating the read channel of the
  +communication is shut down only), "C<w>" (indicating the write channel
  +of the communication is shut down only), or "C<rw>" (indicating both the
  +read and write channels of the communication are shut down). Internally
  +this directly maps to shutdown(2).
  +
  +Example: C<sa_shutdown(sa, "w");>
  +
   =back
   
   =head2 Socket Input/Output Operations (Stream Communication)
   
  +This API part provides I/O operations for stream-oriented data
  +communication through the socket abstraction C<sa_t>.
  +
   =over 4
   
  +=item sa_rc_t B<sa_getfd>(sa_t *I<sa>, int *I<fd>);
  +
  +Get underlying socket filedescriptor.
  +
  +This peeks into the underlying socket filedescriptor B<OSSP sa>
  +allocated internally for the communication. This can be used for
  +adjusting the socket communication (via fcntl(2), setsockopt(2), etc)
  +directly.
  +
  +Think twice before using this, then think once more. After all that,
  +think again. With enough thought, the need for directly manipulating the
  +underlying socket can often be eliminated. At least remember that all
  +your direct socket operations fully by-pass B<OSSP sa> and this way can
  +leads to nasty side-effects.
  +
  +Example: C<int fd; sa_getfd(sa, &fd);>
  +
   =item sa_rc_t B<sa_read>(sa_t *I<sa>, char *I<buf>, size_t I<buflen>, size_t *I<bufdone>);
   
   =item sa_rc_t B<sa_readln>(sa_t *I<sa>, char *I<buf>, size_t I<buflen>, size_t *I<bufdone>);
  @@ -639,7 +684,10 @@
   
   =back
   
  -=head2 Socket Input/Output Operations (Stream Communication)
  +=head2 Socket Input/Output Operations (Datagram Communication)
  +
  +This API part provides operations for datagram-oriented data
  +communication through the socket abstraction C<sa_t>.
   
   =over 4
   

From ossp-cvs-owner@ossp.org  Sat Oct 26 13:11:06 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DD537769E6; Sat, 26 Oct 2002 13:11:05 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c
Message-Id: <20021026111105.DD537769E6@mail.ossp.org>
Date: Sat, 26 Oct 2002 13:11:05 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Oct-2002 13:11:05
  Branch: HEAD                             Handle: 2002102612110500

  Modified files:
    ossp-pkg/sa             sa.c

  Log:
    be smart enough also for people who cannot read

  Summary:
    Revision    Changes     Path
    1.61        +1  -1      ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.60 -r1.61 sa.c
  --- ossp-pkg/sa/sa.c	25 Oct 2002 15:27:29 -0000	1.60
  +++ ossp-pkg/sa/sa.c	26 Oct 2002 11:11:05 -0000	1.61
  @@ -1962,7 +1962,7 @@
           how = SHUT_RD;
       else if (strcmp(flags, "w") == 0)
           how = SHUT_WR;
  -    else if (strcmp(flags, "rw") == 0)
  +    else if (strcmp(flags, "rw") == 0 || strcmp(flags, "wr") == 0)
           how = SHUT_RDWR;
       else
           return SA_RC(SA_ERR_ARG);

From ossp-cvs-owner@ossp.org  Sat Oct 26 17:45:34 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0FC0376A0A; Sat, 26 Oct 2002 17:45:33 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa INSTALL README TODO devtool.conf sa-config.in ...
Message-Id: <20021026154533.0FC0376A0A@mail.ossp.org>
Date: Sat, 26 Oct 2002 17:45:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Oct-2002 17:45:33
  Branch: HEAD                             Handle: 2002102616453200

  Modified files:
    ossp-pkg/sa             INSTALL README TODO devtool.conf sa-config.in
                            sa.ac sa.c sa.pod sa_test.c

  Log:
    strip trailing whitespaces

  Summary:
    Revision    Changes     Path
    1.2         +2  -2      ossp-pkg/sa/INSTALL
    1.6         +1  -1      ossp-pkg/sa/README
    1.38        +2  -2      ossp-pkg/sa/TODO
    1.10        +1  -1      ossp-pkg/sa/devtool.conf
    1.5         +1  -1      ossp-pkg/sa/sa-config.in
    1.12        +4  -4      ossp-pkg/sa/sa.ac
    1.62        +41 -41     ossp-pkg/sa/sa.c
    1.31        +33 -33     ossp-pkg/sa/sa.pod
    1.17        +6  -6      ossp-pkg/sa/sa_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/INSTALL
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 INSTALL
  --- ossp-pkg/sa/INSTALL	31 Jan 2002 21:35:13 -0000	1.1
  +++ ossp-pkg/sa/INSTALL	26 Oct 2002 15:45:32 -0000	1.2
  @@ -1,4 +1,4 @@
  -   ___  __ _ 
  +   ___  __ _
     / __|/ _` |
     \__ \ (_| |
     |___/\__,_|
  @@ -9,7 +9,7 @@
   
     To install OSSP sa into /path/to/sa/ perform
     the following steps in your shell:
  -      
  +
       $ ./configure --prefix=/path/to/sa
       $ make
       $ make check
  Index: ossp-pkg/sa/README
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 README
  --- ossp-pkg/sa/README	15 Mar 2002 10:47:36 -0000	1.5
  +++ ossp-pkg/sa/README	26 Oct 2002 15:45:32 -0000	1.6
  @@ -1,4 +1,4 @@
  -   ___  __ _ 
  +   ___  __ _
     / __|/ _` |
     \__ \ (_| |
     |___/\__,_|
  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.37 -r1.38 TODO
  --- ossp-pkg/sa/TODO	25 Oct 2002 19:53:22 -0000	1.37
  +++ ossp-pkg/sa/TODO	26 Oct 2002 15:45:32 -0000	1.38
  @@ -33,7 +33,7 @@
     http://www.v6.wide.ad.jp/Presentations/ai3-penang0010-v6programming/mgp00015.html
   
   o Nagle's Algorithm and Flushing of Output Buffers.
  -   
  +
     The kernel performs Nagle's Algorithm (see RFC 896 and search for "nagle
     algorithm" on www.whatis.com [currently
     http://searchnetworking.techtarget.com/sDefinition/0,,sid7_gci754347,00.html]
  @@ -55,7 +55,7 @@
     This can be done by internally switching to always use writev(2),
     providing an emulation for writev(2) ala Pth and by basing the write
     calls always on writev.
  -  
  +
   o Kernel Read/Write Buffer Adjustments.
   
     BSD Sockets usually provide (see setsockopt(2)):
  Index: ossp-pkg/sa/devtool.conf
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 devtool.conf
  --- ossp-pkg/sa/devtool.conf	25 Oct 2002 20:27:33 -0000	1.9
  +++ ossp-pkg/sa/devtool.conf	26 Oct 2002 15:45:32 -0000	1.10
  @@ -22,7 +22,7 @@
   %version
       ./shtool version -l txt -n "OSSP sa" -e VERSION
       V=`./shtool version -l txt -d long VERSION`
  -    sed -e "s/Version .*(.*)/Version $V/g" <README >README.n 
  +    sed -e "s/Version .*(.*)/Version $V/g" <README >README.n
       mv README.n README
   
   %dist
  Index: ossp-pkg/sa/sa-config.in
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 sa-config.in
  --- ossp-pkg/sa/sa-config.in	15 Mar 2002 10:47:36 -0000	1.4
  +++ ossp-pkg/sa/sa-config.in	26 Oct 2002 15:45:32 -0000	1.5
  @@ -29,7 +29,7 @@
   ##  sa-config.in: SA library build utility
   ##
   
  -DIFS=' 	
  +DIFS=' 
   '
   
   prefix="@prefix@"
  Index: ossp-pkg/sa/sa.ac
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 sa.ac
  --- ossp-pkg/sa/sa.ac	11 Oct 2002 15:27:39 -0000	1.11
  +++ ossp-pkg/sa/sa.ac	26 Oct 2002 15:45:32 -0000	1.12
  @@ -42,8 +42,8 @@
   changequote(<<,>>)dnl
   <<(^|[^a-zA-Z_0-9])$1[^a-zA-Z_0-9]>>dnl
   changequote([,]), [
  -#include <$2>], 
  -            ac_cv_typedef_$1=yes, 
  +#include <$2>],
  +            ac_cv_typedef_$1=yes,
               ac_cv_typedef_$1=no
           )
       ])dnl
  @@ -62,12 +62,12 @@
       AC_CHECK_LIB(nsl, gethostname)
       if test ".`echo $LIBS | grep nsl`" = .; then
           AC_CHECK_LIB(nsl, gethostbyname)
  -    fi  
  +    fi
       AC_CHECK_LIB(socket, accept)
   
       #   make sure some platforms find their IPv6 library
       AC_CHECK_LIB(inet6, getaddrinfo)
  -    
  +
       #   check for system headers
       AC_CHECK_HEADERS(string.h sys/types.h sys/socket.h netdb.h netinet/in.h)
   
  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.61 -r1.62 sa.c
  --- ossp-pkg/sa/sa.c	26 Oct 2002 11:11:05 -0000	1.61
  +++ ossp-pkg/sa/sa.c	26 Oct 2002 15:45:32 -0000	1.62
  @@ -205,7 +205,7 @@
       SA_SC_DECLARE_6(ssize_t, recvfrom, int, void *, size_t, int, struct sockaddr *, socklen_t *)
       SA_SC_DECLARE_6(ssize_t, sendto,   int, const void *, size_t, int, const struct sockaddr *, socklen_t)
   } sa_syscall_tab_t;
  - 
  +
   /* socket abstraction object */
   struct sa_st {
       sa_type_t        eType;            /* socket type (stream or datagram) */
  @@ -272,7 +272,7 @@
   #ifdef HAVE_INET_NTOA
           /* at least for IPv4 we can rely on the old inet_ntoa(3)
              and for IPv6 inet_ntop(3) would exist anyway */
  -        if ((cp = inet_ntoa(*((struct in_addr *)src))) == NULL) 
  +        if ((cp = inet_ntoa(*((struct in_addr *)src))) == NULL)
               return NULL;
           n = strlen(cp);
           if (n > size-1)
  @@ -291,7 +291,7 @@
   static int sa_mvxprintf(int (*output)(void *ctx, const char *buffer, size_t bufsize), void *ctx, const char *format, va_list ap)
   {
       /* sufficient integer buffer: <available-bits> x log_10(2) + safety */
  -    char ibuf[((sizeof(int)*8)/3)+10]; 
  +    char ibuf[((sizeof(int)*8)/3)+10];
       char *cp;
       char c;
       int d;
  @@ -384,7 +384,7 @@
           return -1;
       if (buffer != NULL && bufsize == 0)
           return -1;
  -    if (buffer == NULL) 
  +    if (buffer == NULL)
           /* just determine output length */
           n = sa_mvxprintf(NULL, NULL, format, ap);
       else {
  @@ -491,7 +491,7 @@
       sl = 0;
       sf = 0;
   
  -    /* parse URI and resolve contents. 
  +    /* parse URI and resolve contents.
          The following syntax is recognized:
          - unix:<path>
          - inet://<host>:<port>[#(tcp|udp)] */
  @@ -611,7 +611,7 @@
               else if (he->h_addrtype == AF_INET6) {
                   sa6.sin6_family = AF_INET6;
                   sa6.sin6_port = htons(nPort);
  -                memcpy(&sa6.sin6_addr.s6_addr, he->h_addr_list[0], 
  +                memcpy(&sa6.sin6_addr.s6_addr, he->h_addr_list[0],
                          sizeof(sa6.sin6_addr.s6_addr));
                   sa = (struct sockaddr *)&sa6;
                   sl = sizeof(sa6);
  @@ -693,7 +693,7 @@
               || saa->slBuf < sizeof(struct sockaddr_un))
               /* in case the remote side of a Unix Domain socket was not
                  bound, a "struct sockaddr_un" can occur with a length less
  -               than the expected one. Then there is actually no path at all. 
  +               than the expected one. Then there is actually no path at all.
                  This has been verified under FreeBSD, Linux and Solaris. */
               sa_msnprintf(uribuf, sizeof(uribuf), "unix:/NOT-BOUND");
           else
  @@ -782,7 +782,7 @@
   #ifdef AF_INET6
       else if (   (saa1->nFamily == AF_INET  && saa2->nFamily == AF_INET6)
                || (saa1->nFamily == AF_INET6 && saa2->nFamily == AF_INET )) {
  -        /* special case of comparing a regular IPv4 address (1.2.3.4) with an 
  +        /* special case of comparing a regular IPv4 address (1.2.3.4) with an
              "IPv4-mapped IPv6 address" (::ffff:1.2.3.4). For details see RFC 2373. */
           if (saa1->nFamily == AF_INET6) {
               np1  = (unsigned int)(((struct sockaddr_in6 *)saa1->saBuf)->sin6_port);
  @@ -839,7 +839,7 @@
           prefixlen = nBits;
       }
   
  -    /* perform address representation comparison 
  +    /* perform address representation comparison
          (assumption guaranteed by API: network byte order is used) */
       nBytes = (prefixlen / 8);
       nBits  = (prefixlen % 8);
  @@ -911,7 +911,7 @@
           return SA_RC(SA_ERR_INT);
   
       /* determine socket protocol */
  -    if (nFamily == AF_LOCAL) 
  +    if (nFamily == AF_LOCAL)
           nProto = 0;
   #ifdef AF_INET6
       else if (nFamily == AF_INET || nFamily == AF_INET6) {
  @@ -1157,7 +1157,7 @@
                   rv = SA_ERR_USE;
                   break;
               }
  -            if (setsockopt(sa->fdSocket, IPPROTO_TCP, TCP_NODELAY, 
  +            if (setsockopt(sa->fdSocket, IPPROTO_TCP, TCP_NODELAY,
                              (const void *)&mode, (socklen_t)sizeof(mode)) < 0)
                   rv = SA_ERR_SYS;
   #else
  @@ -1172,7 +1172,7 @@
                   rv = SA_ERR_USE;
                   break;
               }
  -            if (setsockopt(sa->fdSocket, SOL_SOCKET, SO_LINGER, 
  +            if (setsockopt(sa->fdSocket, SOL_SOCKET, SO_LINGER,
                              (const void *)linger, (socklen_t)sizeof(struct linger)) < 0)
                   rv = SA_ERR_SYS;
   #else
  @@ -1182,7 +1182,7 @@
           }
           case SA_OPTION_REUSEADDR:
   #ifdef SA_OPTION_REUSEPORT
  -        case SA_OPTION_REUSEPORT: 
  +        case SA_OPTION_REUSEPORT:
   #endif
           {
               /* enable/disable reusability of binding to address or port */
  @@ -1199,7 +1199,7 @@
   #endif
                   default: flag = 0; break;
               }
  -            if (setsockopt(sa->fdSocket, SOL_SOCKET, flag, 
  +            if (setsockopt(sa->fdSocket, SOL_SOCKET, flag,
                              (const void *)&mode, (socklen_t)sizeof(mode)) < 0)
                   rv = SA_ERR_SYS;
               break;
  @@ -1252,7 +1252,7 @@
           case SA_SYSCALL_WRITE:    SA_SC_ASSIGN(sa, write,    fptr, fctx); break;
           case SA_SYSCALL_RECVFROM: SA_SC_ASSIGN(sa, recvfrom, fptr, fctx); break;
           case SA_SYSCALL_SENDTO:   SA_SC_ASSIGN(sa, sendto,   fptr, fctx); break;
  -        default: rv = SA_ERR_ARG; 
  +        default: rv = SA_ERR_ARG;
       }
   
       return SA_RC(rv);
  @@ -1298,7 +1298,7 @@
       if (sa == NULL || raddr == NULL)
           return SA_RC(SA_ERR_ARG);
   
  -    /* connecting is only possible for stream communication */ 
  +    /* connecting is only possible for stream communication */
       if (sa->eType != SA_TYPE_STREAM)
           return SA_RC(SA_ERR_USE);
   
  @@ -1331,7 +1331,7 @@
   
           /* ok if connect completed immediately */
           if (n == 0)
  -            goto done; 
  +            goto done;
   
           /* wait for read or write possibility */
           FD_ZERO(&rset);
  @@ -1383,7 +1383,7 @@
       if (sa == NULL)
           return SA_RC(SA_ERR_ARG);
   
  -    /* listening is only possible for stream communication */ 
  +    /* listening is only possible for stream communication */
       if (sa->eType != SA_TYPE_STREAM)
           return SA_RC(SA_ERR_USE);
   
  @@ -1419,7 +1419,7 @@
       if (sa == NULL || caddr == NULL || csa == NULL)
           return SA_RC(SA_ERR_ARG);
   
  -    /* accepting connections is only possible for stream communication */ 
  +    /* accepting connections is only possible for stream communication */
       if (sa->eType != SA_TYPE_STREAM)
           return SA_RC(SA_ERR_USE);
   
  @@ -1435,7 +1435,7 @@
               n = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &fds, NULL, NULL,
                                &sa->tvTimeout[SA_TIMEOUT_ACCEPT]);
           } while (n == -1 && errno == EINTR);
  -        if (n == 0) 
  +        if (n == 0)
               return SA_RC(SA_ERR_TMT);
           if (n <= 0)
               return SA_RC(SA_ERR_SYS);
  @@ -1497,7 +1497,7 @@
       if (sa == NULL || raddr == NULL)
           return SA_RC(SA_ERR_ARG);
   
  -    /* peers exist only for stream communication */ 
  +    /* peers exist only for stream communication */
       if (sa->eType != SA_TYPE_STREAM)
           return SA_RC(SA_ERR_USE);
   
  @@ -1582,14 +1582,14 @@
       fd_set fds;
   #endif
   
  -    /* if timeout is enabled, perform explicit/smart blocking instead 
  +    /* if timeout is enabled, perform explicit/smart blocking instead
          of implicitly/hard blocking in the read(2) system call */
   #if !(defined(SO_RCVTIMEO) && defined(SO_SNDTIMEO))
       if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_READ])) {
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
           do {
  -            rv = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &fds, NULL, NULL, 
  +            rv = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &fds, NULL, NULL,
                                 &sa->tvTimeout[SA_TIMEOUT_READ]);
           } while (rv == -1 && errno == EINTR);
           if (rv == 0) {
  @@ -1623,7 +1623,7 @@
       if (sa == NULL || cpBuf == NULL || nBufReq == 0)
           return SA_RC(SA_ERR_ARG);
   
  -    /* reading is only possible for stream communication */ 
  +    /* reading is only possible for stream communication */
       if (sa->eType != SA_TYPE_STREAM)
           return SA_RC(SA_ERR_USE);
   
  @@ -1701,7 +1701,7 @@
           }
       }
   
  -    /* pass number of actually read bytes to caller */ 
  +    /* pass number of actually read bytes to caller */
       if (nBufRes != NULL)
           *nBufRes = (size_t)res;
   
  @@ -1720,7 +1720,7 @@
       if (sa == NULL || cpBuf == NULL || nBufReq == 0)
           return SA_RC(SA_ERR_ARG);
   
  -    /* reading is only possible for stream communication */ 
  +    /* reading is only possible for stream communication */
       if (sa->eType != SA_TYPE_STREAM)
           return SA_RC(SA_ERR_USE);
   
  @@ -1761,14 +1761,14 @@
       fd_set fds;
   #endif
   
  -    /* if timeout is enabled, perform explicit/smart blocking instead 
  +    /* if timeout is enabled, perform explicit/smart blocking instead
          of implicitly/hard blocking in the write(2) system call */
   #if !(defined(SO_RCVTIMEO) && defined(SO_SNDTIMEO))
       if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_WRITE])) {
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
           do {
  -            rv = SA_SC_CALL_5(sa, select, sa->fdSocket+1, NULL, &fds, NULL, 
  +            rv = SA_SC_CALL_5(sa, select, sa->fdSocket+1, NULL, &fds, NULL,
                                 &sa->tvTimeout[SA_TIMEOUT_WRITE]);
           } while (rv == -1 && errno == EINTR);
           if (rv == 0) {
  @@ -1802,7 +1802,7 @@
       if (sa == NULL || cpBuf == NULL || nBufReq == 0)
           return SA_RC(SA_ERR_ARG);
   
  -    /* writing is only possible for stream communication */ 
  +    /* writing is only possible for stream communication */
       if (sa->eType != SA_TYPE_STREAM)
           return SA_RC(SA_ERR_USE);
   
  @@ -1884,7 +1884,7 @@
       if (sa == NULL || cpFmt == NULL)
           return SA_RC(SA_ERR_ARG);
   
  -    /* writing is only possible for stream communication */ 
  +    /* writing is only possible for stream communication */
       if (sa->eType != SA_TYPE_STREAM)
           return SA_RC(SA_ERR_USE);
   
  @@ -1912,7 +1912,7 @@
       if (sa == NULL)
           return SA_RC(SA_ERR_ARG);
   
  -    /* flushing is only possible for stream communication */ 
  +    /* flushing is only possible for stream communication */
       if (sa->eType != SA_TYPE_STREAM)
           return SA_RC(SA_ERR_USE);
   
  @@ -1948,7 +1948,7 @@
       if (sa == NULL || flags == NULL)
           return SA_RC(SA_ERR_ARG);
   
  -    /* shutdown is only possible for stream communication */ 
  +    /* shutdown is only possible for stream communication */
       if (sa->eType != SA_TYPE_STREAM)
           return SA_RC(SA_ERR_USE);
   
  @@ -1992,7 +1992,7 @@
       if (sa == NULL || buf == NULL || buflen == 0 || raddr == NULL)
           return SA_RC(SA_ERR_ARG);
   
  -    /* receiving is only possible for datagram communication */ 
  +    /* receiving is only possible for datagram communication */
       if (sa->eType != SA_TYPE_DATAGRAM)
           return SA_RC(SA_ERR_USE);
   
  @@ -2000,16 +2000,16 @@
       if (sa->fdSocket == -1)
           return SA_RC(SA_ERR_USE);
   
  -    /* if timeout is enabled, perform explicit/smart blocking instead 
  +    /* if timeout is enabled, perform explicit/smart blocking instead
          of implicitly/hard blocking in the recvfrom(2) system call */
       if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_READ])) {
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
           do {
  -            n = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &fds, NULL, NULL, 
  +            n = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &fds, NULL, NULL,
                                &sa->tvTimeout[SA_TIMEOUT_READ]);
           } while (n == -1 && errno == EINTR);
  -        if (n == 0) 
  +        if (n == 0)
               errno = ETIMEDOUT;
           if (n <= 0)
               return SA_RC(SA_ERR_SYS);
  @@ -2017,7 +2017,7 @@
   
       /* perform receive operation on underlying socket */
       sa_len = sizeof(sa_buf);
  -    if ((n = SA_SC_CALL_6(sa, recvfrom, sa->fdSocket, buf, buflen, 0, 
  +    if ((n = SA_SC_CALL_6(sa, recvfrom, sa->fdSocket, buf, buflen, 0,
                             (struct sockaddr *)&sa_buf, &sa_len)) == -1)
           return SA_RC(SA_ERR_SYS);
   
  @@ -2047,7 +2047,7 @@
       if (sa == NULL || buf == NULL || buflen == 0 || raddr == NULL)
           return SA_RC(SA_ERR_ARG);
   
  -    /* sending is only possible for datagram communication */ 
  +    /* sending is only possible for datagram communication */
       if (sa->eType != SA_TYPE_DATAGRAM)
           return SA_RC(SA_ERR_USE);
   
  @@ -2056,16 +2056,16 @@
           if ((rv = sa_socket_init(sa, raddr->nFamily)) != SA_OK)
               return rv;
   
  -    /* if timeout is enabled, perform explicit/smart blocking instead 
  +    /* if timeout is enabled, perform explicit/smart blocking instead
          of implicitly/hard blocking in the sendto(2) system call */
       if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_WRITE])) {
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
           do {
  -            n = SA_SC_CALL_5(sa, select, sa->fdSocket+1, NULL, &fds, NULL, 
  +            n = SA_SC_CALL_5(sa, select, sa->fdSocket+1, NULL, &fds, NULL,
                                &sa->tvTimeout[SA_TIMEOUT_WRITE]);
           } while (n == -1 && errno == EINTR);
  -        if (n == 0) 
  +        if (n == 0)
               errno = ETIMEDOUT;
           if (n <= 0)
               return SA_RC(SA_ERR_SYS);
  Index: ossp-pkg/sa/sa.pod
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 sa.pod
  --- ossp-pkg/sa/sa.pod	25 Oct 2002 20:45:43 -0000	1.30
  +++ ossp-pkg/sa/sa.pod	26 Oct 2002 15:45:32 -0000	1.31
  @@ -64,22 +64,22 @@
   =item B<Socket Object Operations>:
   
   sa_create,
  -sa_destroy. 
  +sa_destroy.
   
   =item B<Socket Parameter Operations>:
   
   sa_type,
   sa_timeout,
  -sa_buffer, 
  -sa_option, 
  -sa_syscall. 
  +sa_buffer,
  +sa_option,
  +sa_syscall.
   
   =item B<Socket Connection Operations>:
   
   sa_bind,
   sa_connect,
   sa_listen,
  -sa_accept,  
  +sa_accept,
   sa_getremote,
   sa_getlocal,
   sa_shutdown.
  @@ -91,7 +91,7 @@
   sa_readln,
   sa_write,
   sa_writef,
  -sa_flush.   
  +sa_flush.
   
   =item B<Socket Input/Output Operations (Datagram Communication)>:
   
  @@ -204,7 +204,7 @@
   
   =item B<sa_addr_t> (Socket Address Abstraction Type)
   
  -This is an opaque data type representing a socket address. 
  +This is an opaque data type representing a socket address.
   Only pointers to this abstract data type are used in the API.
   
   =item B<sa_t> (Socket Abstraction Type)
  @@ -237,7 +237,7 @@
   
   =item C<sa_rc_t >B<sa_addr_create>C<(sa_addr_t **>I<saa>C<);>
   
  -Create a socket address abstraction object. 
  +Create a socket address abstraction object.
   The object is stored in I<saa> on success.
   
   Example: C<sa_addr_t *saa; sa_addr_create(&saa);>
  @@ -261,7 +261,7 @@
   =item C<sa_rc_t >B<sa_addr_u2a>C<(sa_addr_t *>I<saa>C<, const char *>I<uri>C<, ...);>
   
   Import an address into by converting from an URI specification to the
  -corresponding address abstraction. 
  +corresponding address abstraction.
   
   The supported syntax for I<uri> is: "C<unix:>I<path>" for I<Unix Domain>
   addresses and "C<inet://>I<addr>C<:>I<port>[C<#>I<protocol>]" for
  @@ -298,7 +298,7 @@
   =item C<sa_rc_t >B<sa_addr_a2u>C<(sa_addr_t *>I<saa>C<, char **>I<uri>C<);>
   
   Export an address by converting from the address abstraction to the
  -corresponding URI specification. 
  +corresponding URI specification.
   
   The result is a string of the form "C<unix:>I<path>" for I<Unix
   Domain> addresses and "C<inet://>I<addr>C<:>I<port>" for I<Internet
  @@ -315,7 +315,7 @@
   =item C<sa_rc_t >B<sa_addr_a2s>C<(sa_addr_t *>I<saa>C<, struct sockaddr **>I<sabuf>C<, socklen_t *>I<salen>C<);>
   
   Export an address by converting from the address abstraction to the
  -corresponding traditional C<struct sockaddr> object. 
  +corresponding traditional C<struct sockaddr> object.
   
   The result is one of the following particular underlying address
   structures: C<struct sockaddr_un> (C<AF_LOCAL>), C<struct sockaddr_in>
  @@ -498,7 +498,7 @@
   to pass the call through to the replaced actual system call or not.
   
   Possible values for I<id> are (expected prototypes behind I<fptr> are
  -given in parenthesis): 
  +given in parenthesis):
   
   C<SA_SYSCALL_CONNECT>: "C<int (*)([void *,] int, const struct sockaddr
   *, socklen_t)>", see connect(2).
  @@ -521,20 +521,20 @@
   C<SA_SYSCALL_SENDTO>: "C<ssize_t (*)([void *,] int, const void *,
   size_t, int, const struct sockaddr *, socklen_t)>", see sendto(2).
   
  -Example: 
  +Example:
   
    FILE *trace_fp = ...;
   
  - ssize_t 
  + ssize_t
    trace_read(void *ctx, int fd, void *buf, size_t len)
    {
  -     FILE *fp = (FILE *)ctx; 
  +     FILE *fp = (FILE *)ctx;
        ssize_t rv;
        int errno_saved;
   
        rv = read(fd, buf, len);
        errno_saved = errno;
  -     fprintf(fp, "read(%d, %lx, %d) = %d\n", 
  +     fprintf(fp, "read(%d, %lx, %d) = %d\n",
                fd, (long)buf, len, rv);
        errno = errno_saved;
        return rv;
  @@ -602,7 +602,7 @@
   are present on the queue, it blocks the caller until a connection is
   present.
   
  -Example: 
  +Example:
   
    sa_addr_t *clt_saa;
    sa_t      *clt_sa;
  @@ -710,7 +710,7 @@
   =head2 Standards
   
   R. Gilligan, S. Thomson, J. Bound, W. Stevens:
  -"Basic Socket Interface Extensions for IPv6", 
  +"Basic Socket Interface Extensions for IPv6",
   RFC 2553, March 1999.
   
   W. Stevens:
  @@ -718,15 +718,15 @@
   B<RFC 2292>, February 1998.
   
   R. Fielding, L. Masinter, T. Berners-Lee:
  -"Uniform Resource Identifiers: Generic Syntax", 
  +"Uniform Resource Identifiers: Generic Syntax",
   B<RFC 2396>, August 1998.
   
   R. Hinden, S. Deering:
   "IP Version 6 Addressing Architecture",
   B<RFC 2373>, July 1998.
   
  -R. Hinden, B. Carpenter, L. Masinter: 
  -"Format for Literal IPv6 Addresses in URL's", 
  +R. Hinden, B. Carpenter, L. Masinter:
  +"Format for Literal IPv6 Addresses in URL's",
   B<RFC 2732>, December 1999.
   
   =head2 Papers
  @@ -747,21 +747,21 @@
   =head2 Manual Pages
   
   socket(2)
  -accept(2), 
  -bind(2), 
  -connect(2), 
  -getpeername(2), 
  +accept(2),
  +bind(2),
  +connect(2),
  +getpeername(2),
   getsockname(2),
  -getsockopt(2), 
  -ioctl(2), 
  -listen(2), 
  -read(2), 
  -recv(2), 
  +getsockopt(2),
  +ioctl(2),
  +listen(2),
  +read(2),
  +recv(2),
   select(2),
   send(2),
  -shutdown(2), 
  -socketpair(2), 
  -write(2), 
  +shutdown(2),
  +socketpair(2),
  +write(2),
   getprotoent(3),
   protocols(4)
   
  Index: ossp-pkg/sa/sa_test.c
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 sa_test.c
  --- ossp-pkg/sa/sa_test.c	15 Mar 2002 10:47:36 -0000	1.16
  +++ ossp-pkg/sa/sa_test.c	26 Oct 2002 15:45:32 -0000	1.17
  @@ -55,9 +55,9 @@
           char *out;
       } table[] = {
           /* positive tests */
  -        { "inet://0.0.0.0:0", SA_OK, "inet://0.0.0.0:0" }, 
  +        { "inet://0.0.0.0:0", SA_OK, "inet://0.0.0.0:0" },
           { "inet://127.0.0.1:514", SA_OK, "inet://127.0.0.1:514" },
  -        { "inet://localhost:syslog#udp", SA_OK, "inet://127.0.0.1:514" }, 
  +        { "inet://localhost:syslog#udp", SA_OK, "inet://127.0.0.1:514" },
           { "inet://localhost:smtp", SA_OK, "inet://127.0.0.1:25" },
           { "unix:/tmp/socket", SA_OK, "unix:/tmp/socket" },
           /* negative tests */
  @@ -69,7 +69,7 @@
   
       ts_test_check(TS_CTX, "sa_addr_create");
       if ((rv = sa_addr_create(&saa)) != SA_OK)
  -        ts_test_fail(TS_CTX, "sa_addr_create -> %d[%s] (expected %d[%s])", 
  +        ts_test_fail(TS_CTX, "sa_addr_create -> %d[%s] (expected %d[%s])",
                        rv, sa_error(rv), SA_OK, sa_error(SA_OK));
       for (i = 0; i < sizeof(table)/sizeof(table[0]); i++) {
           ts_test_check(TS_CTX, "sa_addr_u2a(\"%s\")", table[i].in);
  @@ -82,12 +82,12 @@
                            rv, sa_error(rv), SA_OK, sa_error(SA_OK));
           if (table[i].rv == SA_OK)
               if (strcmp(cp, table[i].out) != 0)
  -                ts_test_fail(TS_CTX, "sa_addr_a2u -> \"%s\" (expected \"%s\")", 
  +                ts_test_fail(TS_CTX, "sa_addr_a2u -> \"%s\" (expected \"%s\")",
                                cp, table[i].out);
       }
       ts_test_check(TS_CTX, "sa_addr_destroy");
       if ((rv = sa_addr_destroy(saa)) != SA_OK)
  -        ts_test_fail(TS_CTX, "sa_addr_destroy -> %d[%s] (expected %d[%s])", 
  +        ts_test_fail(TS_CTX, "sa_addr_destroy -> %d[%s] (expected %d[%s])",
                        rv, sa_error(rv), SA_OK, sa_error(SA_OK));
   }
   
  @@ -127,7 +127,7 @@
               continue;
           if ((rv = sa_addr_u2a(saa2, table[i].acl)) != SA_OK)
               continue;
  -        ts_test_check(TS_CTX, "sa_addr_match(\"%s\", \"%s\", %d)", 
  +        ts_test_check(TS_CTX, "sa_addr_match(\"%s\", \"%s\", %d)",
                         table[i].in, table[i].acl, table[i].prefixlen);
           if ((rv = sa_addr_match(saa1, saa2, table[i].prefixlen)) != table[i].rv)
               ts_test_fail(TS_CTX, "sa_addr_match -> %d[%s] (expected %d[%s])",

From ossp-cvs-owner@ossp.org  Sat Oct 26 19:59:31 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CBDE7769FF; Sat, 26 Oct 2002 19:59:30 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa ChangeLog NEWS README THANKS TODO VERSION sa.p...
Message-Id: <20021026175930.CBDE7769FF@mail.ossp.org>
Date: Sat, 26 Oct 2002 19:59:30 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Oct-2002 19:59:30
  Branch: HEAD                             Handle: 2002102618592901

  Added files:
    ossp-pkg/sa             ChangeLog THANKS
  Modified files:
    ossp-pkg/sa             NEWS README TODO VERSION sa.pod

  Log:
    cleanup source tree

  Summary:
    Revision    Changes     Path
    1.1         +54 -0      ossp-pkg/sa/ChangeLog
    1.2         +9  -9      ossp-pkg/sa/NEWS
    1.7         +6  -5      ossp-pkg/sa/README
    1.1         +23 -0      ossp-pkg/sa/THANKS
    1.39        +84 -74     ossp-pkg/sa/TODO
    1.4         +1  -1      ossp-pkg/sa/VERSION
    1.32        +6  -5      ossp-pkg/sa/sa.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sa/ChangeLog
  ============================================================
  $ cvs update -p -r1.1 ChangeLog
     _        ___  ____ ____  ____
    |_|_ _   / _ \/ ___/ ___||  _ \   ___  __ _
    _|_||_| | | | \___ \___ \| |_) | / __|/ _` |
   |_||_|_| | |_| |___) |__) |  __/  \__ \ (_| |
    |_|_|_|  \___/|____/____/|_|     |___/\__,_|
  
    OSSP sa - Socket Abstraction
  
    CHANGELOG
  
    This is a list of all changes to OSSP sa.
    For a more brief summary please have a look at the NEWS file.
  
    Changes between 0.9.2 and 0.9.3 (11-Oct-2002 to xx-Oct-2002)
  
     o Finished writing the documentation (manual page sa.pod).
       [Ralf S. Engelschall]
  
     o Fixed return code and error handling in sa_read(3).
       [Ulrich Dessauer <udessauer@agnitas.de>]
  
     o Upgraded build environment to GNU autoconf 2.54 and GNU libtool 1.4.3.
       [Ralf S. Engelschall]
  
     o Source tree cleanups and polishing.
       [Ralf S. Engelschall]
  
    Changes between 0.9.1 and 0.9.2 (15-Mar-2002 to 11-Oct-2002)
  
     o Check for inet_addr, inet_aton, inet_pton, inet_ntoa and inet_ntop
       under configure time and use this to use reasonable fallbacks for
       the underlying usage of address manipulation functions.
       [Ralf S. Engelschall]
  
     o Upgraded build environment to GNU shtool 1.6.1.
       [Ralf S. Engelschall]
  
     o Fixed "make realclean" target.
       [Ralf S. Engelschall]
  
    Changes between 0.9.0 and 0.9.1 (31-Jan-2002 to 15-Mar-2002)
  
     o Removed gcc -ggdb3 option under --enable-debug.
       [Ralf S. Engelschall]
  
     o Upgraded build environment to GNU autoconf 2.53 and GNU shtool 1.6.0.
       [Ralf S. Engelschall]
  
     o Fixed internal snprintf implementation
       [Ralf S. Engelschall]
  
     o Fixed internal test suite library
       [Ralf S. Engelschall]
  
  Index: ossp-pkg/sa/NEWS
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 NEWS
  --- ossp-pkg/sa/NEWS	15 Mar 2002 10:50:08 -0000	1.1
  +++ ossp-pkg/sa/NEWS	26 Oct 2002 17:59:30 -0000	1.2
  @@ -1,13 +1,13 @@
  +   _        ___  ____ ____  ____
  +  |_|_ _   / _ \/ ___/ ___||  _ \   ___  __ _
  +  _|_||_| | | | \___ \___ \| |_) | / __|/ _` |
  + |_||_|_| | |_| |___) |__) |  __/  \__ \ (_| |
  +  |_|_|_|  \___/|____/____/|_|     |___/\__,_|
   
  -  NEWS
  -  ====
  -
  -  This is a list of user-visible and/or major changes to OSSP sa.
  -  For more details please have a look at the ChangeLog file.
  +  OSSP sa - Socket Abstraction
   
  -  Changes between 0.9.0 and 0.9.1 (31-Jan-2002 to 15-Mar-2002)
  +  NEWS
   
  -   o upgraded build environment to autoconf 2.53 and shtool 1.6.0
  -   o fixed internal snprintf implementation
  -   o fixed internal test suite library
  +  This is a list of major changes to OSSP sa. For more detailed
  +  change descriptions, please have a look at the ChangeLog file.
   
  Index: ossp-pkg/sa/README
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 README
  --- ossp-pkg/sa/README	26 Oct 2002 15:45:32 -0000	1.6
  +++ ossp-pkg/sa/README	26 Oct 2002 17:59:30 -0000	1.7
  @@ -1,10 +1,11 @@
  -   ___  __ _
  -  / __|/ _` |
  -  \__ \ (_| |
  -  |___/\__,_|
  +   _        ___  ____ ____  ____
  +  |_|_ _   / _ \/ ___/ ___||  _ \   ___  __ _
  +  _|_||_| | | | \___ \___ \| |_) | / __|/ _` |
  + |_||_|_| | |_| |___) |__) |  __/  \__ \ (_| |
  +  |_|_|_|  \___/|____/____/|_|     |___/\__,_|
   
     OSSP sa - Socket Abstraction
  -  Version 0.9.1 (15-Mar-2002)
  +  Version 0.9.3 (26-Oct-2002)
   
     ABSTRACT
   
  Index: ossp-pkg/sa/THANKS
  ============================================================
  $ cvs update -p -r1.1 THANKS
     _        ___  ____ ____  ____
    |_|_ _   / _ \/ ___/ ___||  _ \   ___  __ _
    _|_||_| | | | \___ \___ \| |_) | / __|/ _` |
   |_||_|_| | |_| |___) |__) |  __/  \__ \ (_| |
    |_|_|_|  \___/|____/____/|_|     |___/\__,_|
  
    OSSP sa - Socket Abstraction
  
    THANKS
  
    Credit has to be given to the following sponsors for contributing
    hardware, network and manpower resources (in alphabetical order):
  
      o  Cable & Wireless Deutschland GmbH
         <http://www.cw.com/de>
  
    Credit has to be given to the following people who contributed ideas,
    bugfixes, hints, gave platform feedback, etc. (in alphabetical order):
  
      o  Ulrich Dessauer             <udessauer@agnitas.de>
      o  Michael van Elst            <mlelstv@serpens.de>
      o  Thomas Lotterer             <thomas@lotterer.net>
  
  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.38 -r1.39 TODO
  --- ossp-pkg/sa/TODO	26 Oct 2002 15:45:32 -0000	1.38
  +++ ossp-pkg/sa/TODO	26 Oct 2002 17:59:30 -0000	1.39
  @@ -1,79 +1,89 @@
  +   _        ___  ____ ____  ____
  +  |_|_ _   / _ \/ ___/ ___||  _ \   ___  __ _
  +  _|_||_| | | | \___ \___ \| |_) | / __|/ _` |
  + |_||_|_| | |_| |___) |__) |  __/  \__ \ (_| |
  +  |_|_|_|  \___/|____/____/|_|     |___/\__,_|
   
  -TODO
  -----
  +  OSSP sa - Socket Abstraction
   
  -- more test cases to cover full API and especially the client/server usage
  -- more documentation to fully describe API
  +  TODO
  +  ----
   
  -CANDO
  ------
  +  o what about actually written bytes in case of sa_writef?
   
  -o provide "satool", a command line interface to the OSSP sa API.
  -  Can optionally use readline or libedit, etc.
  -
  -o support for SSL/TLS via small abstraction layer on top of OpenSSL and
  -  gnutls libraries.
  -
  -o Consistently use PF_XXX instead of AF_XXX whenever not directly
  -  address related things are done in order to even closer conform to POSIX.
  -
  -o Support for newer DNS Resolving Functions.
  -
  -  In IPv6 land there are usually the newer DNS resolving functions
  -  getaddrinfo(3) and getnameinfo(3). Perhaps we should support these in
  -  favor of gethostbyname(3) and gethostbyaddr(3) because the chance is
  -  higher that they support IPv6 in case we are in IPv6 land.
  -
  -o DNS Resolving and multiple results.
  -
  -  On DNS resolving name, multiple result addresses can be returned.  Either
  -  because of Round-Robin entries, multi-homed hosts or because of hosts
  -  talking both IPv4 and IPv6, etc. Each address has to be tried on
  -  socket+connect. What to do? For some hints see:
  -  http://www.v6.wide.ad.jp/Presentations/ai3-penang0010-v6programming/mgp00015.html
  -
  -o Nagle's Algorithm and Flushing of Output Buffers.
  -
  -  The kernel performs Nagle's Algorithm (see RFC 896 and search for "nagle
  -  algorithm" on www.whatis.com [currently
  -  http://searchnetworking.techtarget.com/sDefinition/0,,sid7_gci754347,00.html]
  -  on his internal output buffers. Although we flush our user-space output
  -  buffers only if we really perform a read(2) (and not if the read is going to
  -  be served entirely from the local buffer) this does not mean that really
  -  every character the remote has already sent is also already read by us.
  -  Because the kernel also has a read buffer. Optimal behaviour would be that
  -  we flush out output buffer only if the read(2) would block. OTOH flushing
  -  out buffers means performing a write(2) and this again is buffered in the
  -  kernel, too. So performing an optimal read->write->read->write->... sequence
  -  is very complex and non-trivial to implement. Especially because even using
  -  Nagle's Algorithm always is not the right choice (see
  -  http://www.w3.org/Protocols/HTTP/Performance/Nagle/ for details), especially
  -  when it comes to pipelining protocols.
  -
  -o Support for writev(2).
  -
  -  This can be done by internally switching to always use writev(2),
  -  providing an emulation for writev(2) ala Pth and by basing the write
  -  calls always on writev.
  -
  -o Kernel Read/Write Buffer Adjustments.
  -
  -  BSD Sockets usually provide (see setsockopt(2)):
  -
  -      SO_SNDBUF          set buffer size for output
  -      SO_RCVBUF          set buffer size for input
  -      SO_SNDLOWAT        set minimum count for output
  -      SO_RCVLOWAT        set minimum count for input
  -
  -  This would mean that we could also allow the control
  -  of the kernel buffers via
  -
  -      SA_BUFFER_KREAD
  -      SA_BUFFER_KWRITE
  -
  -  Unfortunately the whole kernel buffer issue is very complex, because
  -  according to STEVENS there are both minimum and maximum sizes and both
  -  borders heavily depend on the currently used protocol (TCP or UDP) and
  -  the MTU of the underlying network, etc. This all together seems like
  -  opening a can of worms if we provide SA_BUFFER_K{READ,WRITE}.
  +  o more test cases to cover full API and especially the client/server usage
  +
  +  o more documentation to fully describe API
  +
  +  CANDO
  +  -----
  +
  +  o provide "satool", a command line interface to the OSSP sa API.
  +    Can optionally use readline or libedit, etc.
  +
  +  o support for SSL/TLS via small abstraction layer on top of OpenSSL and
  +    gnutls libraries.
  +
  +  o Consistently use PF_XXX instead of AF_XXX whenever not directly
  +    address related things are done in order to even closer conform to POSIX.
  +
  +  o Support for newer DNS Resolving Functions.
  +
  +    In IPv6 land there are usually the newer DNS resolving functions
  +    getaddrinfo(3) and getnameinfo(3). Perhaps we should support these in
  +    favor of gethostbyname(3) and gethostbyaddr(3) because the chance is
  +    higher that they support IPv6 in case we are in IPv6 land.
  +
  +  o DNS Resolving and multiple results.
  +
  +    On DNS resolving name, multiple result addresses can be returned.  Either
  +    because of Round-Robin entries, multi-homed hosts or because of hosts
  +    talking both IPv4 and IPv6, etc. Each address has to be tried on
  +    socket+connect. What to do? For some hints see:
  +    http://www.v6.wide.ad.jp/Presentations/ai3-penang0010-v6programming/mgp00015.html
  +
  +  o Nagle's Algorithm and Flushing of Output Buffers.
  +
  +    The kernel performs Nagle's Algorithm (see RFC 896 and search for "nagle
  +    algorithm" on www.whatis.com [currently
  +    http://searchnetworking.techtarget.com/sDefinition/0,,sid7_gci754347,00.html]
  +    on his internal output buffers. Although we flush our user-space output
  +    buffers only if we really perform a read(2) (and not if the read is going to
  +    be served entirely from the local buffer) this does not mean that really
  +    every character the remote has already sent is also already read by us.
  +    Because the kernel also has a read buffer. Optimal behaviour would be that
  +    we flush out output buffer only if the read(2) would block. OTOH flushing
  +    out buffers means performing a write(2) and this again is buffered in the
  +    kernel, too. So performing an optimal read->write->read->write->... sequence
  +    is very complex and non-trivial to implement. Especially because even using
  +    Nagle's Algorithm always is not the right choice (see
  +    http://www.w3.org/Protocols/HTTP/Performance/Nagle/ for details), especially
  +    when it comes to pipelining protocols.
  +
  +  o Support for writev(2).
  +
  +    This can be done by internally switching to always use writev(2),
  +    providing an emulation for writev(2) ala Pth and by basing the write
  +    calls always on writev.
  +
  +  o Kernel Read/Write Buffer Adjustments.
  +
  +    BSD Sockets usually provide (see setsockopt(2)):
  +
  +        SO_SNDBUF          set buffer size for output
  +        SO_RCVBUF          set buffer size for input
  +        SO_SNDLOWAT        set minimum count for output
  +        SO_RCVLOWAT        set minimum count for input
  +
  +    This would mean that we could also allow the control
  +    of the kernel buffers via
  +
  +        SA_BUFFER_KREAD
  +        SA_BUFFER_KWRITE
  +
  +    Unfortunately the whole kernel buffer issue is very complex, because
  +    according to STEVENS there are both minimum and maximum sizes and both
  +    borders heavily depend on the currently used protocol (TCP or UDP) and
  +    the MTU of the underlying network, etc. This all together seems like
  +    opening a can of worms if we provide SA_BUFFER_K{READ,WRITE}.
   
  Index: ossp-pkg/sa/VERSION
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 VERSION
  --- ossp-pkg/sa/VERSION	15 Mar 2002 10:47:36 -0000	1.3
  +++ ossp-pkg/sa/VERSION	26 Oct 2002 17:59:30 -0000	1.4
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP sa (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP sa, Version 0.9.1 (15-Mar-2002)
  +  This is OSSP sa, Version 0.9.3 (26-Oct-2002)
   
  Index: ossp-pkg/sa/sa.pod
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 sa.pod
  --- ossp-pkg/sa/sa.pod	26 Oct 2002 15:45:32 -0000	1.31
  +++ ossp-pkg/sa/sa.pod	26 Oct 2002 17:59:30 -0000	1.32
  @@ -768,11 +768,12 @@
   =head1 HISTORY
   
   B<OSSP sa> was invented in August 2001 by Ralf S. Engelschall
  -E<lt>rse@engelschall.comE<gt> for use inside the OSSP project. Its
  -creation was prompted by the requirement to implement an SMTP logging
  -channel for B<OSSP l2> (logging library). Its initial code was derived
  -from a predecessor sub-library originally written for socket address
  -abstraction inside B<OSSP lmtp2nntp>.
  +E<lt>rse@engelschall.comE<gt> under contract with Cable & Wireless
  +Germany E<lt>http://www.cw.com/deE<gt> for use inside the OSSP project.
  +Its creation was prompted by the requirement to implement an SMTP
  +logging channel for B<OSSP l2> (logging library). Its initial code was
  +derived from a predecessor sub-library originally written for socket
  +address abstraction inside B<OSSP lmtp2nntp>.
   
   =head1 AUTHORS
   

From ossp-cvs-owner@ossp.org  Sat Oct 26 20:01:25 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F3B63769E6; Sat, 26 Oct 2002 20:01:24 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa TODO
Message-Id: <20021026180124.F3B63769E6@mail.ossp.org>
Date: Sat, 26 Oct 2002 20:01:24 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Oct-2002 20:01:24
  Branch: HEAD                             Handle: 2002102619012400

  Modified files:
    ossp-pkg/sa             TODO

  Log:
    remember already started sub-project

  Summary:
    Revision    Changes     Path
    1.40        +2  -0      ossp-pkg/sa/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.39 -r1.40 TODO
  --- ossp-pkg/sa/TODO	26 Oct 2002 17:59:30 -0000	1.39
  +++ ossp-pkg/sa/TODO	26 Oct 2002 18:01:24 -0000	1.40
  @@ -18,6 +18,8 @@
     CANDO
     -----
   
  +  o provide Perl glue module SA.
  +
     o provide "satool", a command line interface to the OSSP sa API.
       Can optionally use readline or libedit, etc.
   

From ossp-cvs-owner@ossp.org  Sat Oct 26 20:28:17 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 82C3E769FF; Sat, 26 Oct 2002 20:28:16 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa TODO sa.pod
Message-Id: <20021026182816.82C3E769FF@mail.ossp.org>
Date: Sat, 26 Oct 2002 20:28:16 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Oct-2002 20:28:16
  Branch: HEAD                             Handle: 2002102619281501

  Modified files:
    ossp-pkg/sa             TODO sa.pod

  Log:
    finish documentation

  Summary:
    Revision    Changes     Path
    1.41        +0  -2      ossp-pkg/sa/TODO
    1.33        +110 -24    ossp-pkg/sa/sa.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.40 -r1.41 TODO
  --- ossp-pkg/sa/TODO	26 Oct 2002 18:01:24 -0000	1.40
  +++ ossp-pkg/sa/TODO	26 Oct 2002 18:28:15 -0000	1.41
  @@ -13,8 +13,6 @@
   
     o more test cases to cover full API and especially the client/server usage
   
  -  o more documentation to fully describe API
  -
     CANDO
     -----
   
  Index: ossp-pkg/sa/sa.pod
  ============================================================
  $ cvs diff -u -r1.32 -r1.33 sa.pod
  --- ossp-pkg/sa/sa.pod	26 Oct 2002 17:59:30 -0000	1.32
  +++ ossp-pkg/sa/sa.pod	26 Oct 2002 18:28:16 -0000	1.33
  @@ -618,26 +618,26 @@
   This determines the address of the communication peer and creates a new
   socket address abstraction object (returned in I<raddr>) describing
   the peer address. The application has to destroy I<raddr> later with
  -sa_addr_destroy(3).
  +sa_addr_destroy(3). Internally this maps to getpeername(2).
   
   Example: C<sa_addr_t *raddr; sa_getremote(sa, &raddr);>
   
  -=item sa_rc_t B<sa_getlocal>(sa_t *I<sa>, sa_addr_t **I<laddr>);
  +=item C<sa_rc_t >B<sa_getlocal>C<(sa_t *>I<sa>C<, sa_addr_t **>I<laddr>C<);>
   
   Get address abstraction of local side of communication.
   
   This determines the address of the local communication side and
   creates a new socket address abstraction object (returned in I<laddr>)
   describing the local address. The application has to destroy I<laddr>
  -later with sa_addr_destroy(3).
  +later with sa_addr_destroy(3). Internally this maps to getsockname(2).
   
   Example: C<sa_addr_t *laddr; sa_getlocal(sa, &laddr);>
   
  -=item sa_rc_t B<sa_shutdown>(sa_t *I<sa>, char *I<flags>);
  +=item C<sa_rc_t >B<sa_shutdown>C<(sa_t *>I<sa>C<, char *>I<flags>C<);>
   
   Shut down part of the full-duplex connection.
   
  -This performs a shut down of the connection descriped in I<sa>. The
  +This performs a shut down of the connection described in I<sa>. The
   flags string can be either "C<r>" (indicating the read channel of the
   communication is shut down only), "C<w>" (indicating the write channel
   of the communication is shut down only), or "C<rw>" (indicating both the
  @@ -655,7 +655,7 @@
   
   =over 4
   
  -=item sa_rc_t B<sa_getfd>(sa_t *I<sa>, int *I<fd>);
  +=item C<sa_rc_t >B<sa_getfd>C<(sa_t *>I<sa>C<, int *>I<fd>C<);>
   
   Get underlying socket filedescriptor.
   
  @@ -672,37 +672,123 @@
   
   Example: C<int fd; sa_getfd(sa, &fd);>
   
  -=item sa_rc_t B<sa_read>(sa_t *I<sa>, char *I<buf>, size_t I<buflen>, size_t *I<bufdone>);
  +=item C<sa_rc_t >B<sa_read>C<(sa_t *>I<sa>C<, char *>I<buf>C<, size_t >I<buflen>C<, size_t *>I<bufdone>C<);>
   
  -=item sa_rc_t B<sa_readln>(sa_t *I<sa>, char *I<buf>, size_t I<buflen>, size_t *I<bufdone>);
  +Read a chunk of data from socket into own buffer.
   
  -=item sa_rc_t B<sa_write>(sa_t *I<sa>, const char *I<buf>, size_t I<buflen>, size_t *I<bufdone>);
  +This reads from the socket (optionally through the internal read buffer)
  +up to a maximum of I<buflen> bytes into buffer I<buf>. The actual number
  +of read bytes is stored in I<bufdone>. This internally maps to read(2).
   
  -=item sa_rc_t B<sa_writef>(sa_t *I<sa>, const char *I<fmt>, ...);
  +Example: C<char buf[1024]; size_t n; sa_read(sa, buf, sizeof(buf), &n);>
   
  -=item sa_rc_t B<sa_flush>(sa_t *I<sa>);
  +=item C<sa_rc_t >B<sa_readln>C<(sa_t *>I<sa>C<, char *>I<buf>C<, size_t >I<buflen>C<, size_t *>I<bufdone>C<);>
  +
  +Read a line of data from socket into own buffer.
  +
  +This reads from the socket (optionally through the internal read buffer)
  +up to a maximum of I<buflen> bytes into buffer I<buf>, but only as long
  +as no line terminating newline character (0x0a) was found. The line
  +terminating newline character is stored in the buffer, too. The actual
  +number of read bytes is stored in I<bufdone>. This internally maps to
  +sa_read(3).
  +
  +Keep in mind that for efficiency reasons, line-oriented I/O usually
  +always should be performed with read buffer (see sa_option(3) and
  +C<SA_BUFFER_READ>). Without such a read buffer, the performance is
  +cruel, because single character read(2) operations would be performed on
  +the underlying socket.
  +
  +Example: C<char buf[1024]; size_t n; sa_readln(sa, buf, sizeof(buf), &n);>
  +
  +=item C<sa_rc_t >B<sa_write>C<(sa_t *>I<sa>C<, const char *>I<buf>C<, size_t >I<buflen>C<, size_t *>I<bufdone>C<);>
  +
  +Write a chunk of data to socket from own buffer.
  +
  +This writes to the socket (optionally through the internal write buffer)
  +I<buflen> bytes from buffer I<buf>. In case of a partial write, the
  +actual number of written bytes is stored in I<bufdone>. This internally
  +maps to write(2).
  +
  +Example: C<sa_write(sa, cp, strlen(cp), NULL);>
  +
  +=item C<sa_rc_t >B<sa_writef>C<(sa_t *>I<sa>C<, const char *>I<fmt>C<, ...);>
  +
  +Write formatted data data to socket.
  +
  +This formats a string according to the printf(3)-style format
  +specification I<fmt> and sends the result to the socket (optionally
  +through the internal write buffer). In case of a partial socket
  +write, the not written data of the formatted string is internally
  +discarded. Hence using a write buffer is strongly recommended here
  +(see sa_option(3) and C<SA_BUFFER_WRITE>). This internally maps to
  +sa_write(3).
  +
  +The underlying string formatting engine is just a minimal one and for
  +security and independence reasons intentionally not directly based on
  +s[n]printf(3). It understands only the following format specifications:
  +"C<%%>", "C<%c>" (C<char>), "C<%s>" (C<char *>) and "C<%d>" (C<int>)
  +without any precision and padding possibilities. It is intended for
  +minimal formatting only. If you need more sophisticated formatting, you
  +have to format first into an own buffer via s[n]printf(3) and then write
  +this to the socket via sa_write(3) instead.
  +
  +Example: C<sa_writef(sa, "%s=%d\n", cp, i);>
  +
  +=item C<sa_rc_t >B<sa_flush>C<(sa_t *>I<sa>C<);>
  +
  +Flush still pending outgoing data to socket.
  +
  +This writes all still pending outgoing data for the internal write
  +buffer (see sa_option(3) and C<SA_BUFFER_WRITE>) to the socket. This
  +internally maps to write(2).
  +
  +Example: C<sa_flush(sa);>
   
   =back
   
   =head2 Socket Input/Output Operations (Datagram Communication)
   
  -This API part provides operations for datagram-oriented data
  +This API part provides I/O operations for datagram-oriented data
   communication through the socket abstraction C<sa_t>.
   
   =over 4
   
   =item sa_rc_t B<sa_recv>(sa_t *I<sa>, char *I<buf>, size_t I<buflen>, size_t *I<bufdone>, sa_addr_t **I<raddr>);
   
  +Receive a chunk of data from remote address via socket into own buffer.
  +
  +This receives from the remote address specified in I<raddr> via the
  +socket up to a maximum of I<buflen> bytes into buffer I<buf>. The actual
  +number of received bytes is stored in I<bufdone>. This internally maps
  +to recvfrom(2).
  +
  +Example: C<char buf[1024]; size_t n; sa_recv(sa, buf, sizeof(buf), &n, saa);>
  +
   =item sa_rc_t B<sa_send>(sa_t *I<sa>, const char *I<buf>, size_t I<buflen>, size_t *I<bufdone>, sa_addr_t *I<raddr>);
   
  +Send a chunk of data to remote address via socket from own buffer.
  +
  +This sends to the remote address specified in I<raddr> via the socket
  +I<buflen> bytes from buffer I<buf>. The actual number of sent bytes is
  +stored in I<bufdone>. This internally maps to sendto(2).
  +
  +Example: C<sa_send(sa, buf, strlen(buf), NULL, saa);>
  +
   =back
   
   =head2 Socket Error Handling
   
  +This API part provides error handling operations only.
  +
   =over 4
   
   =item char *B<sa_error>(sa_rc_t I<rv>);
   
  +Return the string representation corresponding to the return code
  +value I<rv>. The returned string has to be treated read-only by the
  +application and is not required to be deallocated.
  +
   =back
   
   =head1 SEE ALSO
  @@ -710,43 +796,43 @@
   =head2 Standards
   
   R. Gilligan, S. Thomson, J. Bound, W. Stevens:
  -"Basic Socket Interface Extensions for IPv6",
  -RFC 2553, March 1999.
  +I<"Basic Socket Interface Extensions for IPv6">,
  +B<RFC 2553>, March 1999.
   
   W. Stevens:
  -"Advanced Sockets API for IPv6",
  +I<"Advanced Sockets API for IPv6">,
   B<RFC 2292>, February 1998.
   
   R. Fielding, L. Masinter, T. Berners-Lee:
  -"Uniform Resource Identifiers: Generic Syntax",
  +I<"Uniform Resource Identifiers: Generic Syntax">,
   B<RFC 2396>, August 1998.
   
   R. Hinden, S. Deering:
  -"IP Version 6 Addressing Architecture",
  +I<"IP Version 6 Addressing Architecture">,
   B<RFC 2373>, July 1998.
   
   R. Hinden, B. Carpenter, L. Masinter:
  -"Format for Literal IPv6 Addresses in URL's",
  +I<"Format for Literal IPv6 Addresses in URL's">,
   B<RFC 2732>, December 1999.
   
   =head2 Papers
   
   Stuart Sechrest:
  -"An Introductory 4.4BSD Interprocess Communication Tutorial",
  +I<"An Introductory 4.4BSD Interprocess Communication Tutorial">,
   FreeBSD 4.4 (/usr/share/doc/psd/20.ipctut/).
   
   Samuel J. Leffler, Robert S. Fabry, William N. Joy, Phil Lapsley:
  -"An Advanced 4.4BSD Interprocess Communication Tutorial",
  +I<"An Advanced 4.4BSD Interprocess Communication Tutorial">,
   FreeBSD 4.4 (/usr/share/doc/psd/21.ipc/).
   
   Craig Metz:
  -"Protocol Independence Using the Sockets API"
  +I<"Protocol Independence Using the Sockets API">,
   http://www.usenix.org/publications/library/proceedings/usenix2000/freenix/metzprotocol.html,
   USENIX Annual Technical Conference, June 2000.
   
   =head2 Manual Pages
   
  -socket(2)
  +socket(2),
   accept(2),
   bind(2),
   connect(2),
  @@ -763,7 +849,7 @@
   socketpair(2),
   write(2),
   getprotoent(3),
  -protocols(4)
  +protocols(4).
   
   =head1 HISTORY
   
  @@ -775,7 +861,7 @@
   derived from a predecessor sub-library originally written for socket
   address abstraction inside B<OSSP lmtp2nntp>.
   
  -=head1 AUTHORS
  +=head1 AUTHOR
   
    Ralf S. Engelschall
    rse@engelschall.com

From ossp-cvs-owner@ossp.org  Sun Oct 27 08:55:18 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9CE7276A00; Sun, 27 Oct 2002 08:55:18 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa TODO
Message-Id: <20021027075518.9CE7276A00@mail.ossp.org>
Date: Sun, 27 Oct 2002 08:55:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   27-Oct-2002 08:55:18
  Branch: HEAD                             Handle: 2002102707551800

  Modified files:
    ossp-pkg/sa             TODO

  Log:
    move to cando section

  Summary:
    Revision    Changes     Path
    1.42        +3  -2      ossp-pkg/sa/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.41 -r1.42 TODO
  --- ossp-pkg/sa/TODO	26 Oct 2002 18:28:15 -0000	1.41
  +++ ossp-pkg/sa/TODO	27 Oct 2002 07:55:18 -0000	1.42
  @@ -9,12 +9,13 @@
     TODO
     ----
   
  -  o what about actually written bytes in case of sa_writef?
  -
     o more test cases to cover full API and especially the client/server usage
   
     CANDO
     -----
  +
  +  o what about actually written bytes in case of sa_writef?
  +    Should we internally retry somehow?
   
     o provide Perl glue module SA.
   

From ossp-cvs-owner@ossp.org  Sun Oct 27 08:56:32 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 04CDA76A00; Sun, 27 Oct 2002 08:56:31 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa TODO
Message-Id: <20021027075631.04CDA76A00@mail.ossp.org>
Date: Sun, 27 Oct 2002 08:56:31 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   27-Oct-2002 08:56:31
  Branch: HEAD                             Handle: 2002102707563100

  Modified files:
    ossp-pkg/sa             TODO

  Log:
    remember before working on it

  Summary:
    Revision    Changes     Path
    1.43        +3  -0      ossp-pkg/sa/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.42 -r1.43 TODO
  --- ossp-pkg/sa/TODO	27 Oct 2002 07:55:18 -0000	1.42
  +++ ossp-pkg/sa/TODO	27 Oct 2002 07:56:31 -0000	1.43
  @@ -11,6 +11,9 @@
   
     o more test cases to cover full API and especially the client/server usage
   
  +  o SA_OPTION_REUSE{ADDR,PORT} has to be done _before_ sa_bind(3) but
  +    currently the underlying socket is still not allocated there.
  +
     CANDO
     -----
   

From ossp-cvs-owner@ossp.org  Tue Oct 29 18:46:32 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A146676A00; Tue, 29 Oct 2002 18:46:31 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth devtool.conf
Message-Id: <20021029174631.A146676A00@mail.ossp.org>
Date: Tue, 29 Oct 2002 18:46:31 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Oct-2002 18:46:31
  Branch: HEAD                             Handle: 2002102917463100

  Modified files:
    ossp-pkg/pth            devtool.conf

  Log:
    use better snapshot tarball name

  Summary:
    Revision    Changes     Path
    1.7         +2  -2      ossp-pkg/pth/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/pth/devtool.conf
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 devtool.conf
  --- ossp-pkg/pth/devtool.conf	24 Oct 2002 13:54:35 -0000	1.6
  +++ ossp-pkg/pth/devtool.conf	29 Oct 2002 17:46:31 -0000	1.7
  @@ -37,8 +37,8 @@
   %snap
       make distclean >/dev/null 2>&1
       ./shtool fixperm -v .
  -    V=`./shtool version -lc -d short pth_vers.c`
  -    ./shtool tarball -o pth-${V}-SNAP.tar.gz -d pth-${V} -u gnu -g pth \
  +    D=`date '+%Y%m%d'`
  +    ./shtool tarball -o pth-SNAP-${D}.tar.gz -d pth-SNAP-${D} -u gnu -g pth \
                        -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*' -c 'gzip --best' .
   
   %striptease

From ossp-cvs-owner@ossp.org  Tue Oct 29 18:51:29 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E712976A00; Tue, 29 Oct 2002 18:51:28 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth devtool.conf
Message-Id: <20021029175128.E712976A00@mail.ossp.org>
Date: Tue, 29 Oct 2002 18:51:28 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Oct-2002 18:51:28
  Branch: HEAD                             Handle: 2002102917512800

  Modified files:
    ossp-pkg/pth            devtool.conf

  Log:
    use an even more complete tarball rolling program

  Summary:
    Revision    Changes     Path
    1.8         +18 -2      ossp-pkg/pth/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/pth/devtool.conf
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 devtool.conf
  --- ossp-pkg/pth/devtool.conf	29 Oct 2002 17:46:31 -0000	1.7
  +++ ossp-pkg/pth/devtool.conf	29 Oct 2002 17:51:28 -0000	1.8
  @@ -28,18 +28,34 @@
       ./shtool version -lc -n 'GNU Pth' -p pth_internal_ -e pth_vers.c
   
   %dist
  -    make distclean >/dev/null 2>&1
  +    rm -f pth-*.tar.gz
  +    ./devtool autoclean
  +    ./devtool autogen
  +    ./configure
  +    make clean all
  +    make distclean
       ./shtool fixperm -v .
       V=`./shtool version -lc -d short pth_vers.c`
       ./shtool tarball -o pth-${V}.tar.gz -d pth-${V} -u gnu -g pth \
                        -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*' -c 'gzip --best' .
  +    ls -l pth-${V}.tar.gz
  +    gunzip <pth-${V}.tar.gz | tar tvf - | head -10; echo "[...]"
  +    gunzip <pth-${V}.tar.gz | tar tvf - | tail -10
   
   %snap
  -    make distclean >/dev/null 2>&1
  +    rm -f pth-*.tar.gz
  +    ./devtool autoclean
  +    ./devtool autogen
  +    ./configure
  +    make clean all
  +    make distclean
       ./shtool fixperm -v .
       D=`date '+%Y%m%d'`
       ./shtool tarball -o pth-SNAP-${D}.tar.gz -d pth-SNAP-${D} -u gnu -g pth \
                        -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*' -c 'gzip --best' .
  +    ls -l pth-SNAP-${D}.tar.gz
  +    gunzip <pth-SNAP-${D}.tar.gz | tar tvf - | head -10; echo "[...]"
  +    gunzip <pth-SNAP-${D}.tar.gz | tar tvf - | tail -10
   
   %striptease
       perl striptease.pl

From ossp-cvs-owner@ossp.org  Tue Oct 29 18:52:56 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7EB7F76A00; Tue, 29 Oct 2002 18:52:56 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa devtool.conf
Message-Id: <20021029175256.7EB7F76A00@mail.ossp.org>
Date: Tue, 29 Oct 2002 18:52:56 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Oct-2002 18:52:56
  Branch: HEAD                             Handle: 2002102917525600

  Modified files:
    ossp-pkg/sa             devtool.conf

  Log:
    use an even more complete tarball rolling program

  Summary:
    Revision    Changes     Path
    1.11        +22 -12     ossp-pkg/sa/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/sa/devtool.conf
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 devtool.conf
  --- ossp-pkg/sa/devtool.conf	26 Oct 2002 15:45:32 -0000	1.10
  +++ ossp-pkg/sa/devtool.conf	29 Oct 2002 17:52:56 -0000	1.11
  @@ -26,24 +26,34 @@
       mv README.n README
   
   %dist
  -    echo "+++ generating"
  +    rm -f sa-*.tar.gz
       ./devtool autoclean
       ./devtool autogen
  -    echo "+++ configuring"
       ./configure
  -    echo "+++ building"
  -    make clean all man
  -    echo "+++ cleaning"
  +    make clean all
       make distclean
  -    echo "+++ fixing"
       ./shtool fixperm -v .
  -    echo "+++ rolling"
  -    V=`./shtool version -l txt -d short VERSION`
  -    ./shtool tarball -o sa-${V}.tar.gz -d sa-${V} -u ossp -g ossp \
  -                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*,*.tar.gz' -c 'gzip --best' .
  +    V=`./shtool version -lc -d short sa_vers.c`
  +    ./shtool tarball -o sa-${V}.tar.gz -d sa-${V} -u gnu -g sa \
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*' -c 'gzip --best' .
       ls -l sa-${V}.tar.gz
  -    echo "+++ testing"
  -    gunzip <sa-${V}.tar.gz | tar tvf -
  +    gunzip <sa-${V}.tar.gz | tar tvf - | head -10; echo "[...]"
  +    gunzip <sa-${V}.tar.gz | tar tvf - | tail -10
  +
  +%snap
  +    rm -f sa-*.tar.gz
  +    ./devtool autoclean
  +    ./devtool autogen
  +    ./configure
  +    make clean all
  +    make distclean
  +    ./shtool fixperm -v .
  +    D=`date '+%Y%m%d'`
  +    ./shtool tarball -o sa-SNAP-${D}.tar.gz -d sa-SNAP-${D} -u gnu -g sa \
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*' -c 'gzip --best' .
  +    ls -l sa-SNAP-${D}.tar.gz
  +    gunzip <sa-SNAP-${D}.tar.gz | tar tvf - | head -10; echo "[...]"
  +    gunzip <sa-SNAP-${D}.tar.gz | tar tvf - | tail -10
   
   %release
       echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/sa/"

From ossp-cvs-owner@ossp.org  Wed Oct 30 09:42:17 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C1F22763B1; Wed, 30 Oct 2002 09:42:16 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa ChangeLog sa.c sa.h sa.pod
Message-Id: <20021030084216.C1F22763B1@mail.ossp.org>
Date: Wed, 30 Oct 2002 09:42:16 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Oct-2002 09:42:16
  Branch: HEAD                             Handle: 2002103008421600

  Modified files:
    ossp-pkg/sa             ChangeLog sa.c sa.h sa.pod

  Log:
    Rewrote the implementation of sa_option(3) in order to make options
    configurable _before_ the underlying socket is implicitly
    allocated. This fixes especially sa_option(sa, SA_OPTION_REUSEADDR, 1)
    before sa_bind().

  Summary:
    Revision    Changes     Path
    1.2         +6  -0      ossp-pkg/sa/ChangeLog
    1.63        +163 -66    ossp-pkg/sa/sa.c
    1.32        +5  -5      ossp-pkg/sa/sa.h
    1.34        +3  -5      ossp-pkg/sa/sa.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sa/ChangeLog
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 ChangeLog
  --- ossp-pkg/sa/ChangeLog	26 Oct 2002 17:59:29 -0000	1.1
  +++ ossp-pkg/sa/ChangeLog	30 Oct 2002 08:42:16 -0000	1.2
  @@ -13,6 +13,12 @@
   
     Changes between 0.9.2 and 0.9.3 (11-Oct-2002 to xx-Oct-2002)
   
  +   o Rewrote the implementation of sa_option(3) in order to make options
  +     configurable _before_ the underlying socket is implicitly
  +     allocated. This fixes especially sa_option(sa, SA_OPTION_REUSEADDR, 1) 
  +     before sa_bind().
  +     [Ralf S. Engelschall, Michael van Elst <mlelstv@dev.de.cw.net>]
  +
      o Finished writing the documentation (manual page sa.pod).
        [Ralf S. Engelschall]
   
  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.62 -r1.63 sa.c
  --- ossp-pkg/sa/sa.c	26 Oct 2002 15:45:32 -0000	1.62
  +++ ossp-pkg/sa/sa.c	30 Oct 2002 08:42:16 -0000	1.63
  @@ -206,6 +206,12 @@
       SA_SC_DECLARE_6(ssize_t, sendto,   int, const void *, size_t, int, const struct sockaddr *, socklen_t)
   } sa_syscall_tab_t;
   
  +/* socket option information */
  +typedef struct {
  +    int todo;
  +    int value;
  +} sa_optinfo_t;
  +
   /* socket abstraction object */
   struct sa_st {
       sa_type_t        eType;            /* socket type (stream or datagram) */
  @@ -218,6 +224,7 @@
       int              nWriteSize;       /* write buffer current size */
       char            *cpWriteBuf;       /* write buffer memory chunk */
       sa_syscall_tab_t scSysCall;        /* table of system calls */
  +    sa_optinfo_t     optInfo[5];       /* option storage */
   };
   
   /* socket address abstraction object */
  @@ -866,25 +873,120 @@
   /* set timeouts if timeouts or done in kernel */
   static sa_rc_t sa_socket_settimeouts(sa_t *sa)
   {
  +    /* stop processing if socket is still not allocated */
  +    if (sa->fdSocket == -1)
  +        return SA_OK;
  +
   #if defined(SO_RCVTIMEO) && defined(SO_SNDTIMEO)
  -    if (sa->fdSocket != -1) {
  -        if (SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_READ])) {
  -            if (setsockopt(sa->fdSocket, SOL_SOCKET, SO_RCVTIMEO,
  -                           (const void *)(&sa->tvTimeout[SA_TIMEOUT_READ]),
  -                           (socklen_t)(sizeof(sa->tvTimeout[SA_TIMEOUT_READ]))) < 0)
  -                return SA_RC(SA_ERR_SYS);
  -        }
  -        if (SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_WRITE])) {
  -            if (setsockopt(sa->fdSocket, SOL_SOCKET, SO_SNDTIMEO,
  -                           (const void *)(&sa->tvTimeout[SA_TIMEOUT_WRITE]),
  -                           (socklen_t)(sizeof(sa->tvTimeout[SA_TIMEOUT_WRITE]))) < 0)
  -                return SA_RC(SA_ERR_SYS);
  -        }
  +    if (SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_READ])) {
  +        if (setsockopt(sa->fdSocket, SOL_SOCKET, SO_RCVTIMEO,
  +                       (const void *)(&sa->tvTimeout[SA_TIMEOUT_READ]),
  +                       (socklen_t)(sizeof(sa->tvTimeout[SA_TIMEOUT_READ]))) < 0)
  +            return SA_RC(SA_ERR_SYS);
  +    }
  +    if (SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_WRITE])) {
  +        if (setsockopt(sa->fdSocket, SOL_SOCKET, SO_SNDTIMEO,
  +                       (const void *)(&sa->tvTimeout[SA_TIMEOUT_WRITE]),
  +                       (socklen_t)(sizeof(sa->tvTimeout[SA_TIMEOUT_WRITE]))) < 0)
  +            return SA_RC(SA_ERR_SYS);
       }
   #endif
       return SA_OK;
   }
   
  +/* set socket options */
  +static sa_rc_t sa_socket_setoptions(sa_t *sa)
  +{
  +    int i;
  +    sa_rc_t rv;
  +
  +    /* stop processing if socket is still not allocated */
  +    if (sa->fdSocket == -1)
  +        return SA_OK;
  +
  +    /* check for pending options */
  +    rv = SA_OK;
  +    for (i = 0; i < (sizeof(sa->optInfo)/sizeof(sa->optInfo[0])); i++) {
  +        if (sa->optInfo[i].todo) {
  +            switch (i) {
  +                /* enable/disable Nagle's Algorithm (see RFC898) */
  +                case SA_OPTION_NAGLE: {
  +#if defined(IPPROTO_TCP) && defined(TCP_NODELAY)
  +                    int mode = sa->optInfo[i].value;
  +                    if (setsockopt(sa->fdSocket, IPPROTO_TCP, TCP_NODELAY,
  +                                   (const void *)&mode,
  +                                   (socklen_t)sizeof(mode)) < 0)
  +                        rv = SA_ERR_SYS;
  +                    else
  +                        sa->optInfo[i].todo = FALSE;
  +#endif
  +                    break;
  +                }
  +                /* enable/disable linger close semantics */
  +                case SA_OPTION_LINGER: {
  +#if defined(SO_LINGER)
  +                    struct linger linger;
  +                    linger.l_onoff  = (sa->optInfo[i].value == 0 ? 0 : 1);
  +                    linger.l_linger = sa->optInfo[i].value;
  +                    if (setsockopt(sa->fdSocket, SOL_SOCKET, SO_LINGER,
  +                                   (const void *)&linger,
  +                                   (socklen_t)sizeof(struct linger)) < 0)
  +                        rv = SA_ERR_SYS;
  +                    else
  +                        sa->optInfo[i].todo = FALSE;
  +#endif
  +                    break;
  +                }
  +                /* enable/disable reusability of binding to address */
  +                case SA_OPTION_REUSEADDR: {
  +#if defined(SO_REUSEADDR)
  +                    int mode = sa->optInfo[i].value;
  +                    if (setsockopt(sa->fdSocket, SOL_SOCKET, SO_REUSEADDR,
  +                                   (const void *)&mode, (socklen_t)sizeof(mode)) < 0)
  +                        rv = SA_ERR_SYS;
  +                    else
  +                        sa->optInfo[i].todo = FALSE;
  +#endif
  +                    break;
  +                }
  +                /* enable/disable reusability of binding to port */
  +                case SA_OPTION_REUSEPORT: {
  +#if defined(SO_REUSEPORT)
  +                    int mode = sa->optInfo[i].value;
  +                    if (setsockopt(sa->fdSocket, SOL_SOCKET, SO_REUSEPORT,
  +                                   (const void *)&mode, (socklen_t)sizeof(mode)) < 0)
  +                        rv = SA_ERR_SYS;
  +                    else
  +                        sa->optInfo[i].todo = FALSE;
  +#endif
  +                    break;
  +                }
  +                /* enable/disable non-blocking I/O mode */
  +                case SA_OPTION_NONBLOCK: {
  +                    int mode = sa->optInfo[i].value;
  +                    int flags;
  +                    if ((flags = fcntl(sa->fdSocket, F_GETFL, 0)) < 0) {
  +                        rv = SA_ERR_SYS;
  +                        break;
  +                    }
  +                    if (mode == 0)
  +                        flags &= ~(O_NONBLOCK);
  +                    else
  +                        flags |= O_NONBLOCK;
  +                    if (fcntl(sa->fdSocket, F_SETFL, flags) < 0)
  +                        rv = SA_ERR_SYS;
  +                    else
  +                        sa->optInfo[i].todo = FALSE;
  +                    break;
  +                }
  +                default: /* NOTREACHED */ break;
  +            }
  +        }
  +    }
  +
  +    return SA_RC(rv);
  +}
  +
   /* internal lazy/delayed initialization of underlying socket */
   static sa_rc_t sa_socket_init(sa_t *sa, int nFamily)
   {
  @@ -893,6 +995,7 @@
   #if !(defined(IPPROTO_TCP) && defined(IPPROTO_UDP))
       struct protoent *pe;
   #endif
  +    sa_rc_t rv;
   
       /* argument sanity check(s) */
       if (sa == NULL)
  @@ -945,7 +1048,12 @@
           return SA_RC(SA_ERR_SYS);
   
       /* optionally set kernel timeouts */
  -    sa_socket_settimeouts(sa);
  +    if ((rv = sa_socket_settimeouts(sa)) != SA_OK)
  +        return SA_RC(rv);
  +
  +    /* optionally configure changed options */
  +    if ((rv = sa_socket_setoptions(sa)) != SA_OK)
  +        return SA_RC(rv);
   
       return SA_OK;
   }
  @@ -998,6 +1106,12 @@
           sa->tvTimeout[i].tv_usec = 0;
       }
   
  +    /* init options object attributes */
  +    for (i = 0; i < (sizeof(sa->optInfo)/sizeof(sa->optInfo[0])); i++) {
  +        sa->optInfo[i].todo  = FALSE;
  +        sa->optInfo[i].value = 0;
  +    }
  +
       /* init syscall object attributes */
       SA_SC_ASSIGN(sa, connect,  connect,  NULL);
       SA_SC_ASSIGN(sa, accept,   accept,   NULL);
  @@ -1056,6 +1170,7 @@
   sa_rc_t sa_timeout(sa_t *sa, sa_timeout_t id, long sec, long usec)
   {
       int i;
  +    sa_rc_t rv;
   
       /* argument sanity check(s) */
       if (sa == NULL)
  @@ -1072,8 +1187,9 @@
           sa->tvTimeout[id].tv_usec = usec;
       }
   
  -    /* optionally set kernel timeouts */
  -    sa_socket_settimeouts(sa);
  +    /* try to already set timeouts */
  +    if ((rv = sa_socket_settimeouts(sa)) != SA_OK)
  +        return SA_RC(rv);
   
       return SA_OK;
   }
  @@ -1150,16 +1266,10 @@
       va_start(ap, id);
       switch (id) {
           case SA_OPTION_NAGLE: {
  -            /* enable/disable Nagle's Algorithm (see RFC898) */
   #if defined(IPPROTO_TCP) && defined(TCP_NODELAY)
               int mode = ((int)va_arg(ap, int) ? 1 : 0);
  -            if (sa->fdSocket == -1) {
  -                rv = SA_ERR_USE;
  -                break;
  -            }
  -            if (setsockopt(sa->fdSocket, IPPROTO_TCP, TCP_NODELAY,
  -                           (const void *)&mode, (socklen_t)sizeof(mode)) < 0)
  -                rv = SA_ERR_SYS;
  +            sa->optInfo[SA_OPTION_NAGLE].value = mode;
  +            sa->optInfo[SA_OPTION_NAGLE].todo = TRUE;
   #else
               rv = SA_ERR_IMP;
   #endif
  @@ -1167,61 +1277,40 @@
           }
           case SA_OPTION_LINGER: {
   #if defined(SO_LINGER)
  -            struct linger *linger = (struct linger *)va_arg(ap, void *);
  -            if (sa->fdSocket == -1) {
  -                rv = SA_ERR_USE;
  -                break;
  -            }
  -            if (setsockopt(sa->fdSocket, SOL_SOCKET, SO_LINGER,
  -                           (const void *)linger, (socklen_t)sizeof(struct linger)) < 0)
  -                rv = SA_ERR_SYS;
  +            int amount = ((int)va_arg(ap, int) ? 1 : 0);
  +            sa->optInfo[SA_OPTION_LINGER].value = amount;
  +            sa->optInfo[SA_OPTION_LINGER].todo = TRUE;
   #else
               rv = SA_ERR_IMP;
   #endif
               break;
           }
           case SA_OPTION_REUSEADDR:
  -#ifdef SA_OPTION_REUSEPORT
  -        case SA_OPTION_REUSEPORT:
  +        {
  +#if defined(SO_REUSEADDR)
  +            int mode = ((int)va_arg(ap, int) ? 1 : 0);
  +            sa->optInfo[SA_OPTION_REUSEADDR].value = mode;
  +            sa->optInfo[SA_OPTION_REUSEADDR].todo = TRUE;
  +#else
  +            rv = SA_ERR_IMP;
   #endif
  +            break;
  +        }
  +        case SA_OPTION_REUSEPORT:
           {
  -            /* enable/disable reusability of binding to address or port */
  +#if defined(SO_REUSEPORT)
               int mode = ((int)va_arg(ap, int) ? 1 : 0);
  -            int flag;
  -            if (sa->fdSocket == -1) {
  -                rv = SA_ERR_USE;
  -                break;
  -            }
  -            switch (id) {
  -                case SA_OPTION_REUSEADDR: flag = SO_REUSEADDR; break;
  -#ifdef SA_OPTION_REUSEPORT
  -                case SA_OPTION_REUSEPORT: flag = SO_REUSEPORT; break;
  +            sa->optInfo[SA_OPTION_REUSEPORT].value = mode;
  +            sa->optInfo[SA_OPTION_REUSEPORT].todo = TRUE;
  +#else
  +            rv = SA_ERR_IMP;
   #endif
  -                default: flag = 0; break;
  -            }
  -            if (setsockopt(sa->fdSocket, SOL_SOCKET, flag,
  -                           (const void *)&mode, (socklen_t)sizeof(mode)) < 0)
  -                rv = SA_ERR_SYS;
               break;
           }
           case SA_OPTION_NONBLOCK: {
  -            /* enable/disable non-blocking I/O mode */
  -            int flags;
               int mode = (int)va_arg(ap, int);
  -            if (sa->fdSocket == -1) {
  -                rv = SA_ERR_USE;
  -                break;
  -            }
  -            if ((flags = fcntl(sa->fdSocket, F_GETFL, 0)) < 0) {
  -                rv = SA_ERR_SYS;
  -                break;
  -            }
  -            if (mode == 0)
  -                flags &= ~(O_NONBLOCK);
  -            else
  -                flags |= O_NONBLOCK;
  -            if (fcntl(sa->fdSocket, F_SETFL, flags) < 0)
  -                rv = SA_ERR_SYS;
  +            sa->optInfo[SA_OPTION_NONBLOCK].value = mode;
  +            sa->optInfo[SA_OPTION_NONBLOCK].todo = TRUE;
               break;
           }
           default: {
  @@ -1230,7 +1319,15 @@
       }
       va_end(ap);
   
  -    return SA_RC(rv);
  +    /* if an error already occured, stop here */
  +    if (rv != SA_OK)
  +        return SA_RC(rv);
  +
  +    /* else already (re)set) options (if possible) */
  +    if ((rv = sa_socket_setoptions(sa)) != SA_OK)
  +        return SA_RC(rv);
  +
  +    return SA_OK;
   }
   
   /* override system call */
  Index: ossp-pkg/sa/sa.h
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 sa.h
  --- ossp-pkg/sa/sa.h	11 Oct 2002 15:27:39 -0000	1.31
  +++ ossp-pkg/sa/sa.h	30 Oct 2002 08:42:16 -0000	1.32
  @@ -137,11 +137,11 @@
   
   /* list of options */
   typedef enum {
  -    SA_OPTION_NAGLE,
  -    SA_OPTION_LINGER,
  -    SA_OPTION_REUSEADDR,
  -    SA_OPTION_REUSEPORT,
  -    SA_OPTION_NONBLOCK
  +    SA_OPTION_NAGLE     = 0,
  +    SA_OPTION_LINGER    = 1,
  +    SA_OPTION_REUSEADDR = 2,
  +    SA_OPTION_REUSEPORT = 3,
  +    SA_OPTION_NONBLOCK  = 4
   } sa_option_t;
   
   /* list of system calls */
  Index: ossp-pkg/sa/sa.pod
  ============================================================
  $ cvs diff -u -r1.33 -r1.34 sa.pod
  --- ossp-pkg/sa/sa.pod	26 Oct 2002 18:28:16 -0000	1.33
  +++ ossp-pkg/sa/sa.pod	30 Oct 2002 08:42:16 -0000	1.34
  @@ -458,11 +458,9 @@
   C<SA_OPTION_NAGLE> (C<int> I<yesno>) for enabling (I<yesno>=C<1>) or
   disabling (I<yesno> == C<0>) Nagle's Algorithm (see RFC898).
   
  -C<SA_OPTION_LINGER> (C<struct linger *>I<linger>) for enabling
  -(C<linger-E<gt>l_onoff> == C<1> and C<linger-E<gt>l_linger> ==
  -I<seconds>) or disabling (C<linger-E<gt>l_onoff> == C<0>) lingering
  -on close (see C<SO_LINGER> of setsockopt(2) and C<struct linger> in
  -F<sys/socket.h>).
  +C<SA_OPTION_LINGER> (C<int> I<amount>) for enabling (I<amount> ==
  +I<seconds> E<gt> C<0>) or disabling (I<amount> == C<0>) lingering on
  +close (see C<SO_LINGER> of setsockopt(2)).
   
   C<SA_OPTION_REUSEADDR> (C<int> I<yesno>) for enabling (I<yesno> ==
   C<1>) or disabling (I<yesno> == C<0>) the reusability of the address on

From ossp-cvs-owner@ossp.org  Wed Oct 30 09:43:16 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 890F6763E5; Wed, 30 Oct 2002 09:43:16 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa TODO
Message-Id: <20021030084316.890F6763E5@mail.ossp.org>
Date: Wed, 30 Oct 2002 09:43:16 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Oct-2002 09:43:16
  Branch: HEAD                             Handle: 2002103008431600

  Modified files:
    ossp-pkg/sa             TODO

  Log:
    now done

  Summary:
    Revision    Changes     Path
    1.44        +0  -3      ossp-pkg/sa/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.43 -r1.44 TODO
  --- ossp-pkg/sa/TODO	27 Oct 2002 07:56:31 -0000	1.43
  +++ ossp-pkg/sa/TODO	30 Oct 2002 08:43:16 -0000	1.44
  @@ -11,9 +11,6 @@
   
     o more test cases to cover full API and especially the client/server usage
   
  -  o SA_OPTION_REUSE{ADDR,PORT} has to be done _before_ sa_bind(3) but
  -    currently the underlying socket is still not allocated there.
  -
     CANDO
     -----
   

From ossp-cvs-owner@ossp.org  Wed Oct 30 10:21:53 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C9A7976362; Wed, 30 Oct 2002 10:21:52 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c
Message-Id: <20021030092152.C9A7976362@mail.ossp.org>
Date: Wed, 30 Oct 2002 10:21:52 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Oct-2002 10:21:52
  Branch: HEAD                             Handle: 2002103009215200

  Modified files:
    ossp-pkg/sa             sa.c

  Log:
    flush write buffer on write-side shutdown

  Summary:
    Revision    Changes     Path
    1.64        +4  -0      ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.63 -r1.64 sa.c
  --- ossp-pkg/sa/sa.c	30 Oct 2002 08:42:16 -0000	1.63
  +++ ossp-pkg/sa/sa.c	30 Oct 2002 09:21:52 -0000	1.64
  @@ -2064,6 +2064,10 @@
       else
           return SA_RC(SA_ERR_ARG);
   
  +    /* flush write buffers */
  +    if ((how & SHUT_WR) || (how & SHUT_RDWR))
  +        sa_flush(sa);
  +
       /* perform shutdown operation on underlying socket */
       if (shutdown(sa->fdSocket, how) == -1)
           return SA_RC(SA_ERR_SYS);

From ossp-cvs-owner@ossp.org  Wed Oct 30 10:41:52 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EEE1C763B1; Wed, 30 Oct 2002 10:41:51 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa_test.c
Message-Id: <20021030094151.EEE1C763B1@mail.ossp.org>
Date: Wed, 30 Oct 2002 10:41:51 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Oct-2002 10:41:51
  Branch: HEAD                             Handle: 2002103009415100

  Modified files:
    ossp-pkg/sa             sa_test.c

  Log:
    first cut for more covering test suite: client/server test via TCP stream communication

  Summary:
    Revision    Changes     Path
    1.18        +109 -1     ossp-pkg/sa/sa_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa_test.c
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 sa_test.c
  --- ossp-pkg/sa/sa_test.c	26 Oct 2002 15:45:32 -0000	1.17
  +++ ossp-pkg/sa/sa_test.c	30 Oct 2002 09:41:51 -0000	1.18
  @@ -38,6 +38,9 @@
   #include <time.h>
   #include <sys/utsname.h>
   #include <unistd.h>
  +#include <errno.h>
  +#include <sys/types.h>
  +#include <sys/wait.h>
   
   #include "ts.h"
   #include "sa.h"
  @@ -137,10 +140,115 @@
       sa_addr_destroy(saa2);
   }
   
  +#define ex(proc, cmd) \
  +    do { \
  +        sa_rc_t __rv; \
  +        ts_test_check(TS_CTX, "%s: %s", #proc, #cmd); \
  +        if ((__rv = (cmd)) != SA_OK) { \
  +            if (__rv == SA_ERR_SYS) \
  +                ts_test_fail(TS_CTX, "%s -> error: %s (rc=%d) (system: %s)", \
  +                             #cmd, sa_error(__rv), __rv, strerror(errno)); \
  +            else \
  +                ts_test_fail(TS_CTX, "%s -> error: %s (rc=%d)", \
  +                             #cmd, sa_error(__rv), __rv); \
  +        } \
  +    } while (0)
  +
  +#define MSG_SRV_WELCOME "Welcome client\n"
  +#define MSG_CLT_WELCOME "Welcome server\n"
  +#define MSG_SRV_GOODBYE "Goodbye client\n"
  +#define MSG_CLT_GOODBYE "Goodbye server\n"
  +
   /* test: client/server stream communication */
   TS_TEST(test_sa_stream)
   {
  -    /* FIXME */
  +    sa_t *sa_clt;
  +    sa_t *sa_srv;
  +    sa_addr_t *saa_srv;
  +    sa_addr_t *saa_clt;
  +    pid_t pid_srv;
  +    sa_t *sa_cld;
  +    sa_addr_t *saa_cld;
  +    char buf_srv[1024];
  +    char buf_clt[1024];
  +    size_t l;
  +
  +    if ((pid_srv = fork()) == 0) {
  +        /*
  +        ** SERVER
  +        */
  +
  +        /* create server socket */
  +        ex(SRV, sa_create(&sa_srv));
  +        ex(SRV, sa_option(sa_srv, SA_OPTION_REUSEADDR, 1));
  +        ex(SRV, sa_option(sa_srv, SA_OPTION_REUSEPORT, 1));
  +        ex(SRV, sa_timeout(sa_srv, SA_TIMEOUT_ALL, 10, 0));
  +
  +        /* bind socket to local port */
  +        ex(SRV, sa_addr_create(&saa_srv));
  +        ex(SRV, sa_addr_u2a(saa_srv, "inet://127.0.0.1:12345#tcp"));
  +        ex(SRV, sa_addr_destroy(saa_srv));
  +        ex(SRV, sa_bind(sa_srv, saa_srv));
  +
  +        /* receive client connection */
  +        ex(SRV, sa_listen(sa_srv, 10));
  +        ex(SRV, sa_accept(sa_srv, &saa_cld, &sa_cld));
  +
  +        /* communicate with client */
  +        ex(SRV, sa_writef(sa_cld, "%s", MSG_SRV_WELCOME));
  +        ex(SRV, sa_readln(sa_cld, buf_srv, sizeof(buf_srv), &l));
  +        if (strcmp(buf_srv, MSG_CLT_WELCOME) != 0)
  +            ts_test_fail(TS_CTX, "server: got \"%s\", expected \"%s\"",
  +                         buf_srv, MSG_CLT_WELCOME);
  +        ex(SRV, sa_writef(sa_cld, "%s", MSG_SRV_GOODBYE));
  +        ex(SRV, sa_shutdown(sa_cld, "w"));
  +        ex(SRV, sa_readln(sa_cld, buf_srv, sizeof(buf_srv), &l));
  +        if (strcmp(buf_srv, MSG_CLT_GOODBYE) != 0)
  +            ts_test_fail(TS_CTX, "server: got \"%s\", expected \"%s\"",
  +                         buf_srv, MSG_CLT_GOODBYE);
  +        ex(SRV, sa_shutdown(sa_cld, "r"));
  +
  +        /* destroy client connection */
  +        ex(SRV, sa_destroy(sa_cld));
  +        ex(SRV, sa_addr_destroy(saa_cld));
  +
  +        /* destroy server socket and die */
  +        ex(SRV, sa_destroy(sa_srv));
  +        exit(0);
  +    }
  +    else {
  +        /*
  +        ** CLIENT
  +        **/
  +        sleep(2);
  +
  +        /* create client socket */
  +        ex(CLT, sa_create(&sa_clt));
  +        ex(CLT, sa_timeout(sa_clt, SA_TIMEOUT_ALL, 10, 0));
  +
  +        /* connect to server */
  +        ex(CLT, sa_addr_create(&saa_clt));
  +        ex(CLT, sa_addr_u2a(saa_clt, "inet://127.0.0.1:12345#tcp"));
  +        ex(CLT, sa_addr_destroy(saa_clt));
  +        ex(CLT, sa_connect(sa_clt, saa_clt));
  +
  +        /* communicate with server */
  +        ex(CLT, sa_readln(sa_clt, buf_clt, sizeof(buf_clt), &l));
  +        if (strcmp(buf_clt, MSG_SRV_WELCOME) != 0)
  +            ts_test_fail(TS_CTX, "client: got \"%s\", expected \"%s\"",
  +                         buf_clt, MSG_SRV_WELCOME);
  +        ex(CLT, sa_writef(sa_clt, "%s", MSG_CLT_WELCOME));
  +        ex(CLT, sa_readln(sa_clt, buf_clt, sizeof(buf_clt), &l));
  +        if (strcmp(buf_clt, MSG_SRV_GOODBYE) != 0)
  +            ts_test_fail(TS_CTX, "client: got \"%s\", expected \"%s\"",
  +                         buf_clt, MSG_SRV_GOODBYE);
  +        ex(CLT, sa_writef(sa_clt, "%s", MSG_CLT_GOODBYE));
  +        ex(CLT, sa_shutdown(sa_clt, "rw"));
  +
  +        /* destroy server connection and wait for server to exit */
  +        ex(CLT, sa_destroy(sa_clt));
  +        waitpid(pid_srv, NULL, 0);
  +    }
   }
   
   /* test: client/server datagram communication */

From ossp-cvs-owner@ossp.org  Wed Oct 30 17:21:52 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B112076362; Wed, 30 Oct 2002 17:21:51 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool ChangeLog sh.echo
Message-Id: <20021030162151.B112076362@mail.ossp.org>
Date: Wed, 30 Oct 2002 17:21:51 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Oct-2002 17:21:51
  Branch: HEAD                             Handle: 2002103016215100

  Modified files:
    ossp-pkg/shtool         ChangeLog sh.echo

  Log:
    Support bold font on 'cygwin' terminals.
    
    Submitted by: Marcus Boerger <marcus.boerger@t-online.de>

  Summary:
    Revision    Changes     Path
    1.172       +3  -0      ossp-pkg/shtool/ChangeLog
    1.32        +1  -1      ossp-pkg/shtool/sh.echo
  ____________________________________________________________________________

  Index: ossp-pkg/shtool/ChangeLog
  ============================================================
  $ cvs diff -u -r1.171 -r1.172 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	7 Oct 2002 05:02:12 -0000	1.171
  +++ ossp-pkg/shtool/ChangeLog	30 Oct 2002 16:21:51 -0000	1.172
  @@ -11,6 +11,9 @@
   
    Changes between 1.6.1 and 1.6.2 (12-Jul-2002 to xx-Oct-2002):
   
  +   *) Support bold font on 'cygwin' terminals.
  +      [Marcus Boerger <marcus.boerger@t-online.de>]
  +
      *) Try the terminal 'init' sequence before 'reset' for bold mode
         restoring in order to make sure the terminal is not cleared.
         Additionally, fallback to a consistent no-bold mode.
  Index: ossp-pkg/shtool/sh.echo
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 sh.echo
  --- ossp-pkg/shtool/sh.echo	7 Oct 2002 05:02:12 -0000	1.31
  +++ ossp-pkg/shtool/sh.echo	30 Oct 2002 16:21:51 -0000	1.32
  @@ -58,7 +58,7 @@
               term_bold=`awk 'BEGIN { printf("%c%c%c%c", 27, 91, 49, 109); }' </dev/null 2>/dev/null`
               term_norm=`awk 'BEGIN { printf("%c%c%c", 27, 91, 109); }' </dev/null 2>/dev/null`
               ;;
  -        vt100|vt100*)
  +        vt100|vt100*|cygwin)
               term_bold=`awk 'BEGIN { printf("%c%c%c%c%c%c", 27, 91, 49, 109, 0, 0); }' </dev/null 2>/dev/null`
               term_norm=`awk 'BEGIN { printf("%c%c%c%c%c", 27, 91, 109, 0, 0); }' </dev/null 2>/dev/null`
               ;;

From ossp-cvs-owner@ossp.org  Wed Oct 30 19:43:08 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9E91E763E5; Wed, 30 Oct 2002 19:43:08 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.pod
Message-Id: <20021030184308.9E91E763E5@mail.ossp.org>
Date: Wed, 30 Oct 2002 19:43:08 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Oct-2002 19:43:08
  Branch: HEAD                             Handle: 2002103018430800

  Modified files:
    ossp-pkg/sa             sa.pod

  Log:
    remember important point

  Summary:
    Revision    Changes     Path
    1.35        +2  -1      ossp-pkg/sa/sa.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.pod
  ============================================================
  $ cvs diff -u -r1.34 -r1.35 sa.pod
  --- ossp-pkg/sa/sa.pod	30 Oct 2002 08:42:16 -0000	1.34
  +++ ossp-pkg/sa/sa.pod	30 Oct 2002 18:43:08 -0000	1.35
  @@ -687,7 +687,8 @@
   This reads from the socket (optionally through the internal read buffer)
   up to a maximum of I<buflen> bytes into buffer I<buf>, but only as long
   as no line terminating newline character (0x0a) was found. The line
  -terminating newline character is stored in the buffer, too. The actual
  +terminating newline character is stored in the buffer plus a (not
  +counted) terminating C<NUL> character ('C<\0>'), too. The actual
   number of read bytes is stored in I<bufdone>. This internally maps to
   sa_read(3).
   

From ossp-cvs-owner@ossp.org  Wed Oct 30 19:46:23 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E161F76362; Wed, 30 Oct 2002 19:46:22 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa TODO sa_test.c
Message-Id: <20021030184622.E161F76362@mail.ossp.org>
Date: Wed, 30 Oct 2002 19:46:22 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Oct-2002 19:46:22
  Branch: HEAD                             Handle: 2002103018462200

  Modified files:
    ossp-pkg/sa             TODO sa_test.c

  Log:
    puhhh... finally finish test suite

  Summary:
    Revision    Changes     Path
    1.45        +0  -2      ossp-pkg/sa/TODO
    1.19        +87 -18     ossp-pkg/sa/sa_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.44 -r1.45 TODO
  --- ossp-pkg/sa/TODO	30 Oct 2002 08:43:16 -0000	1.44
  +++ ossp-pkg/sa/TODO	30 Oct 2002 18:46:22 -0000	1.45
  @@ -9,8 +9,6 @@
     TODO
     ----
   
  -  o more test cases to cover full API and especially the client/server usage
  -
     CANDO
     -----
   
  Index: ossp-pkg/sa/sa_test.c
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 sa_test.c
  --- ossp-pkg/sa/sa_test.c	30 Oct 2002 09:41:51 -0000	1.18
  +++ ossp-pkg/sa/sa_test.c	30 Oct 2002 18:46:22 -0000	1.19
  @@ -154,11 +154,6 @@
           } \
       } while (0)
   
  -#define MSG_SRV_WELCOME "Welcome client\n"
  -#define MSG_CLT_WELCOME "Welcome server\n"
  -#define MSG_SRV_GOODBYE "Goodbye client\n"
  -#define MSG_CLT_GOODBYE "Goodbye server\n"
  -
   /* test: client/server stream communication */
   TS_TEST(test_sa_stream)
   {
  @@ -173,6 +168,11 @@
       char buf_clt[1024];
       size_t l;
   
  +#define MSG_TCP_SRV_WELCOME "Welcome client\n"
  +#define MSG_TCP_CLT_WELCOME "Welcome server\n"
  +#define MSG_TCP_SRV_GOODBYE "Goodbye client\n"
  +#define MSG_TCP_CLT_GOODBYE "Goodbye server\n"
  +
       if ((pid_srv = fork()) == 0) {
           /*
           ** SERVER
  @@ -195,17 +195,17 @@
           ex(SRV, sa_accept(sa_srv, &saa_cld, &sa_cld));
   
           /* communicate with client */
  -        ex(SRV, sa_writef(sa_cld, "%s", MSG_SRV_WELCOME));
  +        ex(SRV, sa_writef(sa_cld, "%s", MSG_TCP_SRV_WELCOME));
           ex(SRV, sa_readln(sa_cld, buf_srv, sizeof(buf_srv), &l));
  -        if (strcmp(buf_srv, MSG_CLT_WELCOME) != 0)
  +        if (strcmp(buf_srv, MSG_TCP_CLT_WELCOME) != 0)
               ts_test_fail(TS_CTX, "server: got \"%s\", expected \"%s\"",
  -                         buf_srv, MSG_CLT_WELCOME);
  -        ex(SRV, sa_writef(sa_cld, "%s", MSG_SRV_GOODBYE));
  +                         buf_srv, MSG_TCP_CLT_WELCOME);
  +        ex(SRV, sa_writef(sa_cld, "%s", MSG_TCP_SRV_GOODBYE));
           ex(SRV, sa_shutdown(sa_cld, "w"));
           ex(SRV, sa_readln(sa_cld, buf_srv, sizeof(buf_srv), &l));
  -        if (strcmp(buf_srv, MSG_CLT_GOODBYE) != 0)
  +        if (strcmp(buf_srv, MSG_TCP_CLT_GOODBYE) != 0)
               ts_test_fail(TS_CTX, "server: got \"%s\", expected \"%s\"",
  -                         buf_srv, MSG_CLT_GOODBYE);
  +                         buf_srv, MSG_TCP_CLT_GOODBYE);
           ex(SRV, sa_shutdown(sa_cld, "r"));
   
           /* destroy client connection */
  @@ -234,15 +234,15 @@
   
           /* communicate with server */
           ex(CLT, sa_readln(sa_clt, buf_clt, sizeof(buf_clt), &l));
  -        if (strcmp(buf_clt, MSG_SRV_WELCOME) != 0)
  +        if (strcmp(buf_clt, MSG_TCP_SRV_WELCOME) != 0)
               ts_test_fail(TS_CTX, "client: got \"%s\", expected \"%s\"",
  -                         buf_clt, MSG_SRV_WELCOME);
  -        ex(CLT, sa_writef(sa_clt, "%s", MSG_CLT_WELCOME));
  +                         buf_clt, MSG_TCP_SRV_WELCOME);
  +        ex(CLT, sa_writef(sa_clt, "%s", MSG_TCP_CLT_WELCOME));
           ex(CLT, sa_readln(sa_clt, buf_clt, sizeof(buf_clt), &l));
  -        if (strcmp(buf_clt, MSG_SRV_GOODBYE) != 0)
  +        if (strcmp(buf_clt, MSG_TCP_SRV_GOODBYE) != 0)
               ts_test_fail(TS_CTX, "client: got \"%s\", expected \"%s\"",
  -                         buf_clt, MSG_SRV_GOODBYE);
  -        ex(CLT, sa_writef(sa_clt, "%s", MSG_CLT_GOODBYE));
  +                         buf_clt, MSG_TCP_SRV_GOODBYE);
  +        ex(CLT, sa_writef(sa_clt, "%s", MSG_TCP_CLT_GOODBYE));
           ex(CLT, sa_shutdown(sa_clt, "rw"));
   
           /* destroy server connection and wait for server to exit */
  @@ -254,7 +254,76 @@
   /* test: client/server datagram communication */
   TS_TEST(test_sa_datagram)
   {
  -    /* FIXME */
  +    sa_t *sa_clt;
  +    sa_t *sa_srv;
  +    sa_addr_t *saa_srv;
  +    sa_addr_t *saa_clt;
  +    pid_t pid_srv;
  +    char buf_srv[1024];
  +    char buf_clt[1024];
  +    size_t l;
  +
  +#define MSG_UDP_CLT_REQUEST  "Who are you?\n"
  +#define MSG_UDP_SRV_RESPONSE "I'm god\n"
  +
  +    if ((pid_srv = fork()) == 0) {
  +        /*
  +        ** SERVER
  +        */
  +
  +        /* create server socket */
  +        ex(SRV, sa_create(&sa_srv));
  +        ex(SRV, sa_type(sa_srv, SA_TYPE_DATAGRAM));
  +        ex(SRV, sa_option(sa_srv, SA_OPTION_REUSEADDR, 1));
  +        ex(SRV, sa_option(sa_srv, SA_OPTION_REUSEPORT, 1));
  +        ex(SRV, sa_timeout(sa_srv, SA_TIMEOUT_ALL, 10, 0));
  +
  +        /* bind socket to local port */
  +        ex(SRV, sa_addr_create(&saa_srv));
  +        ex(SRV, sa_addr_u2a(saa_srv, "inet://127.0.0.1:12345#udp"));
  +        ex(SRV, sa_addr_destroy(saa_srv));
  +        ex(SRV, sa_bind(sa_srv, saa_srv));
  +
  +        /* communicate with client */
  +        ex(SRV, sa_recv(sa_srv, buf_srv, sizeof(buf_srv), &l, &saa_clt));
  +        if (strncmp(buf_srv, MSG_UDP_CLT_REQUEST, l) != 0)
  +            ts_test_fail(TS_CTX, "server: got \"%s\", expected \"%s\"",
  +                         buf_srv, MSG_UDP_CLT_REQUEST);
  +        ex(SRV, sa_send(sa_srv, MSG_UDP_SRV_RESPONSE,
  +                        strlen(MSG_UDP_SRV_RESPONSE), &l, saa_clt));
  +        ex(SRV, sa_addr_destroy(saa_clt));
  +
  +        /* destroy server socket and die */
  +        ex(SRV, sa_destroy(sa_srv));
  +        exit(0);
  +    }
  +    else {
  +        /*
  +        ** CLIENT
  +        **/
  +        sleep(2);
  +
  +        /* create client socket */
  +        ex(CLT, sa_create(&sa_clt));
  +        ex(CLT, sa_type(sa_clt, SA_TYPE_DATAGRAM));
  +        ex(CLT, sa_timeout(sa_clt, SA_TIMEOUT_ALL, 10, 0));
  +
  +        /* communicate with server */
  +        ex(CLT, sa_addr_create(&saa_srv));
  +        ex(CLT, sa_addr_u2a(saa_srv, "inet://127.0.0.1:12345#udp"));
  +        ex(CLT, sa_send(sa_clt, MSG_UDP_CLT_REQUEST,
  +                        strlen(MSG_UDP_CLT_REQUEST), &l, saa_srv));
  +        ex(CLT, sa_addr_destroy(saa_srv));
  +        ex(CLT, sa_recv(sa_clt, buf_clt, sizeof(buf_clt), &l, &saa_srv));
  +        if (strncmp(buf_clt, MSG_UDP_SRV_RESPONSE, l) != 0)
  +            ts_test_fail(TS_CTX, "client: got \"%s\", expected \"%s\"",
  +                         buf_clt, MSG_UDP_SRV_RESPONSE);
  +        ex(CLT, sa_addr_destroy(saa_srv));
  +
  +        /* destroy server connection and wait for server to exit */
  +        ex(CLT, sa_destroy(sa_clt));
  +        waitpid(pid_srv, NULL, 0);
  +    }
   }
   
   /* test: exception handling */

From ossp-cvs-owner@ossp.org  Wed Oct 30 20:01:32 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 04012763E5; Wed, 30 Oct 2002 20:01:31 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa ChangeLog
Message-Id: <20021030190131.04012763E5@mail.ossp.org>
Date: Wed, 30 Oct 2002 20:01:31 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Oct-2002 20:01:31
  Branch: HEAD                             Handle: 2002103019013100

  Modified files:
    ossp-pkg/sa             ChangeLog

  Log:
    now done

  Summary:
    Revision    Changes     Path
    1.3         +4  -0      ossp-pkg/sa/ChangeLog
  ____________________________________________________________________________

  Index: ossp-pkg/sa/ChangeLog
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 ChangeLog
  --- ossp-pkg/sa/ChangeLog	30 Oct 2002 08:42:16 -0000	1.2
  +++ ossp-pkg/sa/ChangeLog	30 Oct 2002 19:01:31 -0000	1.3
  @@ -13,6 +13,10 @@
   
     Changes between 0.9.2 and 0.9.3 (11-Oct-2002 to xx-Oct-2002)
   
  +   o Finished implementation of test suite in order to cover
  +     mostly all functionality of the API.
  +     [Ralf S. Engelschall]
  +
      o Rewrote the implementation of sa_option(3) in order to make options
        configurable _before_ the underlying socket is implicitly
        allocated. This fixes especially sa_option(sa, SA_OPTION_REUSEADDR, 1) 

From ossp-cvs-owner@ossp.org  Wed Oct 30 20:09:36 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 35768763E5; Wed, 30 Oct 2002 20:09:36 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa ChangeLog sa.c sa.h sa.pod sa_test.c
Message-Id: <20021030190936.35768763E5@mail.ossp.org>
Date: Wed, 30 Oct 2002 20:09:36 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Oct-2002 20:09:36
  Branch: HEAD                             Handle: 2002103019093500

  Modified files:
    ossp-pkg/sa             ChangeLog sa.c sa.h sa.pod sa_test.c

  Log:
    Added a function sa_sendf(3) which is a convience wrapper to
    sa_send(3) for sending formatted data. This is similar to what
    sa_writef(3) does for sa_write(3).
    
    The difference is just that sa_writef(3) does not need a temporary
    buffer (because can use the stream I/O write buffer) while sa_sendf(3)
    requires a temporary buffer for its operation. Nevertheless the
    temporary buffer is allocated only if the formatted data is large.
    For small formatted data a fast stack-based buffer is used for higher
    performance.

  Summary:
    Revision    Changes     Path
    1.4         +10 -0      ossp-pkg/sa/ChangeLog
    1.65        +40 -0      ossp-pkg/sa/sa.c
    1.33        +1  -0      ossp-pkg/sa/sa.h
    1.36        +26 -5      ossp-pkg/sa/sa.pod
    1.20        +2  -4      ossp-pkg/sa/sa_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/ChangeLog
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 ChangeLog
  --- ossp-pkg/sa/ChangeLog	30 Oct 2002 19:01:31 -0000	1.3
  +++ ossp-pkg/sa/ChangeLog	30 Oct 2002 19:09:35 -0000	1.4
  @@ -13,6 +13,16 @@
   
     Changes between 0.9.2 and 0.9.3 (11-Oct-2002 to xx-Oct-2002)
   
  +   o Added a function sa_sendf(3) which is a convience wrapper
  +     to sa_send(3) for sending formatted data. This is similar to what
  +     sa_writef(3) does for sa_write(3). The difference is just that
  +     sa_writef(3) does not need a temporary buffer (because can use the
  +     stream I/O write buffer) while sa_sendf(3) requires a temporary
  +     buffer for its operation. Nevertheless the temporary buffer is
  +     allocated only if the formatted data is large. For small formatted
  +     data a fast stack-based buffer is used for higher performance.
  +     [Ralf S. Engelschall]
  +
      o Finished implementation of test suite in order to cover
        mostly all functionality of the API.
        [Ralf S. Engelschall]
  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.64 -r1.65 sa.c
  --- ossp-pkg/sa/sa.c	30 Oct 2002 09:21:52 -0000	1.64
  +++ ossp-pkg/sa/sa.c	30 Oct 2002 19:09:35 -0000	1.65
  @@ -2183,6 +2183,46 @@
       return SA_OK;
   }
   
  +/* send formatted string to socket (convinience function) */
  +sa_rc_t sa_sendf(sa_t *sa, sa_addr_t *raddr, const char *cpFmt, ...)
  +{
  +    va_list ap;
  +    size_t nBuf;
  +    char *cpBuf;
  +    sa_rc_t rv;
  +    char caBuf[1024];
  +
  +    /* argument sanity check(s) */
  +    if (sa == NULL || raddr == NULL || cpFmt == NULL)
  +        return SA_RC(SA_ERR_ARG);
  +
  +    /* format string into temporary buffer */
  +    va_start(ap, cpFmt);
  +    nBuf = sa_mvsnprintf(NULL, NULL, cpFmt, ap);
  +    va_end(ap);
  +    if ((nBuf+1) > sizeof(caBuf)) {
  +        /* requires a larger buffer, so allocate dynamically */
  +        if ((cpBuf = (char *)malloc(nBuf+1)) == NULL)
  +            return SA_RC(SA_ERR_SYS);
  +    }
  +    else {
  +        /* fits into small buffer, so allocate statically */
  +        cpBuf = caBuf;
  +    }
  +    va_start(ap, cpFmt);
  +    sa_mvsnprintf(cpBuf, nBuf+1, cpFmt, ap);
  +    va_end(ap);
  +
  +    /* pass-through to sa_send() */
  +    rv = sa_send(sa, cpBuf, nBuf, NULL, raddr);
  +
  +    /* cleanup dynamically allocated buffer */
  +    if ((nBuf+1) > sizeof(caBuf))
  +        free(cpBuf);
  +
  +    return rv;
  +}
  +
   /* return error string */
   char *sa_error(sa_rc_t rv)
   {
  Index: ossp-pkg/sa/sa.h
  ============================================================
  $ cvs diff -u -r1.32 -r1.33 sa.h
  --- ossp-pkg/sa/sa.h	30 Oct 2002 08:42:16 -0000	1.32
  +++ ossp-pkg/sa/sa.h	30 Oct 2002 19:09:35 -0000	1.33
  @@ -200,6 +200,7 @@
   /* socket input/output operations (datagram communication) */
   sa_rc_t sa_recv         (sa_t *sa, char *buf, size_t buflen, size_t *bufdone, sa_addr_t **raddr);
   sa_rc_t sa_send         (sa_t *sa, const char *buf, size_t buflen, size_t *bufdone, sa_addr_t *raddr);
  +sa_rc_t sa_sendf        (sa_t *sa, sa_addr_t *raddr, const char *fmt, ...);
   
   /* error handling operations */
   char   *sa_error        (sa_rc_t rv);
  Index: ossp-pkg/sa/sa.pod
  ============================================================
  $ cvs diff -u -r1.35 -r1.36 sa.pod
  --- ossp-pkg/sa/sa.pod	30 Oct 2002 18:43:08 -0000	1.35
  +++ ossp-pkg/sa/sa.pod	30 Oct 2002 19:09:35 -0000	1.36
  @@ -96,7 +96,8 @@
   =item B<Socket Input/Output Operations (Datagram Communication)>:
   
   sa_recv,
  -sa_send.
  +sa_send,
  +sa_sendf.
   
   =item B<Socket Error Handling>:
   
  @@ -428,10 +429,10 @@
   Possible values for I<id> are: C<SA_TIMEOUT_ACCEPT> (affecting
   sa_accept(3)), C<SA_TIMEOUT_CONNECT> (affecting sa_connect(3)),
   C<SA_TIMEOUT_READ> (affecting sa_read(3), sa_readln(3) and sa_recv(3))
  -and C<SA_TIMEOUT_WRITE> (affecting sa_write(3), sa_writef(3) and
  -sa_send(3)). Additionally you can set all four timeouts at once by using
  -C<SA_TIMEOUT_ALL>. The default is that no communication timeouts are
  -used which is equal to I<sec>=C<0>/I<usec>=C<0>.
  +and C<SA_TIMEOUT_WRITE> (affecting sa_write(3), sa_writef(3),
  +sa_send(3), and sa_sendf(3)). Additionally you can set all four timeouts
  +at once by using C<SA_TIMEOUT_ALL>. The default is that no communication
  +timeouts are used which is equal to I<sec>=C<0>/I<usec>=C<0>.
   
   Example: C<sa_timeout(sa, SA_TIMEOUT_ALL, 30, 0);>
   
  @@ -773,6 +774,26 @@
   stored in I<bufdone>. This internally maps to sendto(2).
   
   Example: C<sa_send(sa, buf, strlen(buf), NULL, saa);>
  +
  +=item sa_rc_t B<sa_sendf>(sa_t *I<sa>, sa_addr_t *I<raddr>, const char *I<fmt>, ...)
  +
  +Send formatted data data to remote address via socket.
  +
  +This formats a string according to the printf(3)-style format
  +specification I<fmt> and sends the result to the socket as a single
  +piece of data chunk. In case of a partial socket write, the not written
  +data of the formatted string is internally discarded.
  +
  +The underlying string formatting engine is just a minimal one and for
  +security and independence reasons intentionally not directly based on
  +s[n]printf(3). It understands only the following format specifications:
  +"C<%%>", "C<%c>" (C<char>), "C<%s>" (C<char *>) and "C<%d>" (C<int>)
  +without any precision and padding possibilities. It is intended for
  +minimal formatting only. If you need more sophisticated formatting, you
  +have to format first into an own buffer via s[n]printf(3) and then send
  +this to the remote address via sa_send(3) instead.
  +
  +Example: C<sa_sendf(sa, saa, "%s=%d\n", cp, i);>
   
   =back
   
  Index: ossp-pkg/sa/sa_test.c
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 sa_test.c
  --- ossp-pkg/sa/sa_test.c	30 Oct 2002 18:46:22 -0000	1.19
  +++ ossp-pkg/sa/sa_test.c	30 Oct 2002 19:09:35 -0000	1.20
  @@ -289,8 +289,7 @@
           if (strncmp(buf_srv, MSG_UDP_CLT_REQUEST, l) != 0)
               ts_test_fail(TS_CTX, "server: got \"%s\", expected \"%s\"",
                            buf_srv, MSG_UDP_CLT_REQUEST);
  -        ex(SRV, sa_send(sa_srv, MSG_UDP_SRV_RESPONSE,
  -                        strlen(MSG_UDP_SRV_RESPONSE), &l, saa_clt));
  +        ex(SRV, sa_sendf(sa_srv, saa_clt, "%s", MSG_UDP_SRV_RESPONSE));
           ex(SRV, sa_addr_destroy(saa_clt));
   
           /* destroy server socket and die */
  @@ -311,8 +310,7 @@
           /* communicate with server */
           ex(CLT, sa_addr_create(&saa_srv));
           ex(CLT, sa_addr_u2a(saa_srv, "inet://127.0.0.1:12345#udp"));
  -        ex(CLT, sa_send(sa_clt, MSG_UDP_CLT_REQUEST,
  -                        strlen(MSG_UDP_CLT_REQUEST), &l, saa_srv));
  +        ex(CLT, sa_sendf(sa_clt, saa_srv, "%s", MSG_UDP_CLT_REQUEST));
           ex(CLT, sa_addr_destroy(saa_srv));
           ex(CLT, sa_recv(sa_clt, buf_clt, sizeof(buf_clt), &l, &saa_srv));
           if (strncmp(buf_clt, MSG_UDP_SRV_RESPONSE, l) != 0)

From ossp-cvs-owner@ossp.org  Wed Oct 30 20:13:00 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C324B763E5; Wed, 30 Oct 2002 20:13:00 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa README VERSION
Message-Id: <20021030191300.C324B763E5@mail.ossp.org>
Date: Wed, 30 Oct 2002 20:13:00 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Oct-2002 20:13:00
  Branch: HEAD                             Handle: 2002103019130000

  Modified files:
    ossp-pkg/sa             README VERSION

  Log:
    bump version for release

  Summary:
    Revision    Changes     Path
    1.8         +1  -1      ossp-pkg/sa/README
    1.5         +1  -1      ossp-pkg/sa/VERSION
  ____________________________________________________________________________

  Index: ossp-pkg/sa/README
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 README
  --- ossp-pkg/sa/README	26 Oct 2002 17:59:30 -0000	1.7
  +++ ossp-pkg/sa/README	30 Oct 2002 19:13:00 -0000	1.8
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/\__,_|
   
     OSSP sa - Socket Abstraction
  -  Version 0.9.3 (26-Oct-2002)
  +  Version 0.9.4 (30-Oct-2002)
   
     ABSTRACT
   
  Index: ossp-pkg/sa/VERSION
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 VERSION
  --- ossp-pkg/sa/VERSION	26 Oct 2002 17:59:30 -0000	1.4
  +++ ossp-pkg/sa/VERSION	30 Oct 2002 19:13:00 -0000	1.5
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP sa (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP sa, Version 0.9.3 (26-Oct-2002)
  +  This is OSSP sa, Version 0.9.4 (30-Oct-2002)
   

From ossp-cvs-owner@ossp.org  Wed Oct 30 20:14:49 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1A0DA763E5; Wed, 30 Oct 2002 20:14:49 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa devtool.conf
Message-Id: <20021030191449.1A0DA763E5@mail.ossp.org>
Date: Wed, 30 Oct 2002 20:14:49 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Oct-2002 20:14:49
  Branch: HEAD                             Handle: 2002103019144800

  Modified files:
    ossp-pkg/sa             devtool.conf

  Log:
    fix tarball rolling

  Summary:
    Revision    Changes     Path
    1.12        +1  -1      ossp-pkg/sa/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/sa/devtool.conf
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 devtool.conf
  --- ossp-pkg/sa/devtool.conf	29 Oct 2002 17:52:56 -0000	1.11
  +++ ossp-pkg/sa/devtool.conf	30 Oct 2002 19:14:48 -0000	1.12
  @@ -33,7 +33,7 @@
       make clean all
       make distclean
       ./shtool fixperm -v .
  -    V=`./shtool version -lc -d short sa_vers.c`
  +    V=`./shtool version -l txt -d short VERSION`
       ./shtool tarball -o sa-${V}.tar.gz -d sa-${V} -u gnu -g sa \
                        -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*' -c 'gzip --best' .
       ls -l sa-${V}.tar.gz

From ossp-cvs-owner@ossp.org  Wed Oct 30 20:16:01 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2E2A4763E9; Wed, 30 Oct 2002 20:16:01 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa ChangeLog
Message-Id: <20021030191601.2E2A4763E9@mail.ossp.org>
Date: Wed, 30 Oct 2002 20:16:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Oct-2002 20:16:01
  Branch: HEAD                             Handle: 2002103019155900

  Modified files:
    ossp-pkg/sa             ChangeLog

  Log:
    polish for release

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-pkg/sa/ChangeLog
  ____________________________________________________________________________

  Index: ossp-pkg/sa/ChangeLog
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 ChangeLog
  --- ossp-pkg/sa/ChangeLog	30 Oct 2002 19:09:35 -0000	1.4
  +++ ossp-pkg/sa/ChangeLog	30 Oct 2002 19:15:59 -0000	1.5
  @@ -11,7 +11,7 @@
     This is a list of all changes to OSSP sa.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 0.9.2 and 0.9.3 (11-Oct-2002 to xx-Oct-2002)
  +  Changes between 0.9.2 and 0.9.3 (11-Oct-2002 to 30-Oct-2002)
   
      o Added a function sa_sendf(3) which is a convience wrapper
        to sa_send(3) for sending formatted data. This is similar to what

From ossp-cvs-owner@ossp.org  Wed Oct 30 20:17:01 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BACF176362; Wed, 30 Oct 2002 20:17:01 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa README VERSION
Message-Id: <20021030191701.BACF176362@mail.ossp.org>
Date: Wed, 30 Oct 2002 20:17:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Oct-2002 20:17:01
  Branch: HEAD                             Handle: 2002103019170100

  Modified files:
    ossp-pkg/sa             README VERSION

  Log:
    ops, 0.9.3 is the next release version number

  Summary:
    Revision    Changes     Path
    1.9         +1  -1      ossp-pkg/sa/README
    1.6         +1  -1      ossp-pkg/sa/VERSION
  ____________________________________________________________________________

  Index: ossp-pkg/sa/README
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 README
  --- ossp-pkg/sa/README	30 Oct 2002 19:13:00 -0000	1.8
  +++ ossp-pkg/sa/README	30 Oct 2002 19:17:01 -0000	1.9
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/\__,_|
   
     OSSP sa - Socket Abstraction
  -  Version 0.9.4 (30-Oct-2002)
  +  Version 0.9.3 (30-Oct-2002)
   
     ABSTRACT
   
  Index: ossp-pkg/sa/VERSION
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 VERSION
  --- ossp-pkg/sa/VERSION	30 Oct 2002 19:13:00 -0000	1.5
  +++ ossp-pkg/sa/VERSION	30 Oct 2002 19:17:01 -0000	1.6
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP sa (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP sa, Version 0.9.4 (30-Oct-2002)
  +  This is OSSP sa, Version 0.9.3 (30-Oct-2002)
   

From ossp-cvs-owner@ossp.org  Wed Oct 30 20:19:52 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E68B376362; Wed, 30 Oct 2002 20:19:51 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new news.txt ossp-web/pkg/lib index.wml ossp-web/...
Message-Id: <20021030191951.E68B376362@mail.ossp.org>
Date: Wed, 30 Oct 2002 20:19:51 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   30-Oct-2002 20:19:51
  Branch: HEAD                             Handle: 2002103019195001

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/sa     index.wml

  Log:
    release OSSP sa 0.9.3

  Summary:
    Revision    Changes     Path
    1.28        +3  -0      ossp-web/new/news.txt
    1.31        +2  -2      ossp-web/pkg/lib/index.wml
    1.7         +2  -2      ossp-web/pkg/lib/sa/index.wml
  ____________________________________________________________________________

  Index: ossp-web/new/news.txt
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 news.txt
  --- ossp-web/new/news.txt	11 Oct 2002 16:06:11 -0000	1.27
  +++ ossp-web/new/news.txt	30 Oct 2002 19:19:50 -0000	1.28
  @@ -1,3 +1,6 @@
  +30-Oct-2002: Released L<OSSP sa> 0.9.3
  +21-Oct-2002: Released L<OSSP fsl> 1.0.5
  +21-Oct-2002: Released L<OSSP fsl> 1.0.4
   11-Oct-2002: Released L<OSSP l2> 0.9.1
   11-Oct-2002: Released L<OSSP sa> 0.9.2
   07-Sep-2002: Released L<OSSP fsl> 1.0.3
  Index: ossp-web/pkg/lib/index.wml
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 index.wml
  --- ossp-web/pkg/lib/index.wml	11 Oct 2002 16:06:11 -0000	1.30
  +++ ossp-web/pkg/lib/index.wml	30 Oct 2002 19:19:50 -0000	1.31
  @@ -24,7 +24,7 @@
   			done=100 stable=1.2.1 unstable=none>
     <pkg_item name="sa" longname="OSSP sa" type="lib"
               desc="Socket Abstraction"
  -			done=95 stable=none unstable=0.9.2>
  +			done=95 stable=none unstable=0.9.3>
     <pkg_item name="ex" longname="OSSP ex" type="lib"
               desc="Exception Handling"
   			done=100 stable=1.0.0 unstable=none>
  @@ -84,6 +84,6 @@
   			done=15 stable=none unstable=none>
     <pkg_item name="fsl" longname="OSSP fsl" type="lib"
               desc="Faked/Flexible Syslog"
  -			done=100 stable=1.0.3 unstable=none>
  +			done=100 stable=1.0.5 unstable=none>
   </pkg_list>
   
  Index: ossp-web/pkg/lib/sa/index.wml
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 index.wml
  --- ossp-web/pkg/lib/sa/index.wml	11 Oct 2002 15:32:30 -0000	1.6
  +++ ossp-web/pkg/lib/sa/index.wml	30 Oct 2002 19:19:51 -0000	1.7
  @@ -27,7 +27,7 @@
   <pkg_status
       name="sa" assign="rse"
       stable="none"    stable_date="none"
  -    unstable="0.9.2" unstable_date="11-Oct-2002"
  +    unstable="0.9.3" unstable_date="30-Oct-2002"
   	done=95>
   
   <h2>Source</h2>
  @@ -37,7 +37,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/sa/
       directory=$(FTP_ROOT_DIR)/pkg/lib/sa/
       files="sa-*.tar.gz" 
  -	stable="none" unstable="sa-0.9.2.tar.gz">
  +	stable="none" unstable="sa-0.9.3.tar.gz">
   	
   <h2>Donation</h2>
   

From ossp-cvs-owner@ossp.org  Wed Oct 30 20:21:16 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 02DEC76362; Wed, 30 Oct 2002 20:21:15 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa devtool.conf
Message-Id: <20021030192115.02DEC76362@mail.ossp.org>
Date: Wed, 30 Oct 2002 20:21:15 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Oct-2002 20:21:15
  Branch: HEAD                             Handle: 2002103019211500

  Modified files:
    ossp-pkg/sa             devtool.conf

  Log:
    shit, also build manpages

  Summary:
    Revision    Changes     Path
    1.13        +2  -2      ossp-pkg/sa/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/sa/devtool.conf
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 devtool.conf
  --- ossp-pkg/sa/devtool.conf	30 Oct 2002 19:14:48 -0000	1.12
  +++ ossp-pkg/sa/devtool.conf	30 Oct 2002 19:21:15 -0000	1.13
  @@ -30,7 +30,7 @@
       ./devtool autoclean
       ./devtool autogen
       ./configure
  -    make clean all
  +    make clean all man
       make distclean
       ./shtool fixperm -v .
       V=`./shtool version -l txt -d short VERSION`
  @@ -45,7 +45,7 @@
       ./devtool autoclean
       ./devtool autogen
       ./configure
  -    make clean all
  +    make clean all man
       make distclean
       ./shtool fixperm -v .
       D=`date '+%Y%m%d'`

From ossp-cvs-owner@ossp.org  Wed Oct 30 21:22:07 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5725476362; Wed, 30 Oct 2002 21:22:07 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa ChangeLog sa.c sa.h sa.pod sa_test.c
Message-Id: <20021030202207.5725476362@mail.ossp.org>
Date: Wed, 30 Oct 2002 21:22:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Oct-2002 21:22:07
  Branch: HEAD                             Handle: 2002103020220600

  Modified files:
    ossp-pkg/sa             ChangeLog sa.c sa.h sa.pod sa_test.c

  Log:
    API Cleanups: use politically correct use "extern" keyword in sa.h;
    use leading underscores for variables names in prototypes; move
    "raddr" argument to second position in sa_{send,recv,sendf}.

  Summary:
    Revision    Changes     Path
    1.6         +7  -0      ossp-pkg/sa/ChangeLog
    1.66        +3  -3      ossp-pkg/sa/sa.c
    1.34        +31 -31     ossp-pkg/sa/sa.h
    1.37        +2  -2      ossp-pkg/sa/sa.pod
    1.21        +2  -2      ossp-pkg/sa/sa_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/ChangeLog
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 ChangeLog
  --- ossp-pkg/sa/ChangeLog	30 Oct 2002 19:15:59 -0000	1.5
  +++ ossp-pkg/sa/ChangeLog	30 Oct 2002 20:22:06 -0000	1.6
  @@ -11,6 +11,13 @@
     This is a list of all changes to OSSP sa.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 0.9.3 and x.x.x (30-Oct-2002 to xx-Nov-2002)
  +
  +   o API Cleanups: use politically correct use "extern" keyword in sa.h;
  +     use leading underscores for variables names in prototypes; move
  +     "raddr" argument to second position in sa_{send,recv,sendf}.
  +     [Ralf S. Engelschall]
  +
     Changes between 0.9.2 and 0.9.3 (11-Oct-2002 to 30-Oct-2002)
   
      o Added a function sa_sendf(3) which is a convience wrapper
  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.65 -r1.66 sa.c
  --- ossp-pkg/sa/sa.c	30 Oct 2002 19:09:35 -0000	1.65
  +++ ossp-pkg/sa/sa.c	30 Oct 2002 20:22:06 -0000	1.66
  @@ -2076,7 +2076,7 @@
   }
   
   /* receive data via socket */
  -sa_rc_t sa_recv(sa_t *sa, char *buf, size_t buflen, size_t *bufdone, sa_addr_t **raddr)
  +sa_rc_t sa_recv(sa_t *sa, sa_addr_t **raddr, char *buf, size_t buflen, size_t *bufdone)
   {
       sa_rc_t rv;
       union {
  @@ -2138,7 +2138,7 @@
   }
   
   /* send data via socket */
  -sa_rc_t sa_send(sa_t *sa, const char *buf, size_t buflen, size_t *bufdone, sa_addr_t *raddr)
  +sa_rc_t sa_send(sa_t *sa, sa_addr_t *raddr, const char *buf, size_t buflen, size_t *bufdone)
   {
       size_t n;
       fd_set fds;
  @@ -2214,7 +2214,7 @@
       va_end(ap);
   
       /* pass-through to sa_send() */
  -    rv = sa_send(sa, cpBuf, nBuf, NULL, raddr);
  +    rv = sa_send(sa, raddr, cpBuf, nBuf, NULL);
   
       /* cleanup dynamically allocated buffer */
       if ((nBuf+1) > sizeof(caBuf))
  Index: ossp-pkg/sa/sa.h
  ============================================================
  $ cvs diff -u -r1.33 -r1.34 sa.h
  --- ossp-pkg/sa/sa.h	30 Oct 2002 19:09:35 -0000	1.33
  +++ ossp-pkg/sa/sa.h	30 Oct 2002 20:22:06 -0000	1.34
  @@ -159,51 +159,51 @@
   extern const char sa_id[];
   
   /* address object operations */
  -sa_rc_t sa_addr_create  (sa_addr_t **saa);
  -sa_rc_t sa_addr_destroy (sa_addr_t *saa);
  +extern sa_rc_t sa_addr_create  (sa_addr_t **__saa);
  +extern sa_rc_t sa_addr_destroy (sa_addr_t  *__saa);
   
   /* address operations */
  -sa_rc_t sa_addr_u2a     (sa_addr_t *saa, const char *uri, ...);
  -sa_rc_t sa_addr_s2a     (sa_addr_t *saa, const struct sockaddr *sabuf, socklen_t salen);
  -sa_rc_t sa_addr_a2u     (sa_addr_t *saa, char **uri);
  -sa_rc_t sa_addr_a2s     (sa_addr_t *saa, struct sockaddr **sabuf, socklen_t *salen);
  -sa_rc_t sa_addr_match   (sa_addr_t *saa1, sa_addr_t *saa2, int prefixlen);
  +extern sa_rc_t sa_addr_u2a     (sa_addr_t  *__saa, const char *__uri, ...);
  +extern sa_rc_t sa_addr_s2a     (sa_addr_t  *__saa, const struct sockaddr *__sabuf, socklen_t __salen);
  +extern sa_rc_t sa_addr_a2u     (sa_addr_t  *__saa, char **__uri);
  +extern sa_rc_t sa_addr_a2s     (sa_addr_t  *__saa, struct sockaddr **__sabuf, socklen_t *__salen);
  +extern sa_rc_t sa_addr_match   (sa_addr_t  *__saa1, sa_addr_t *__saa2, int __prefixlen);
   
   /* socket object operations */
  -sa_rc_t sa_create       (sa_t **sa);
  -sa_rc_t sa_destroy      (sa_t *sa);
  +extern sa_rc_t sa_create       (sa_t **__sa);
  +extern sa_rc_t sa_destroy      (sa_t  *__sa);
   
   /* socket parameter operations */
  -sa_rc_t sa_type         (sa_t *sa, sa_type_t type);
  -sa_rc_t sa_timeout      (sa_t *sa, sa_timeout_t id, long sec, long usec);
  -sa_rc_t sa_buffer       (sa_t *sa, sa_buffer_t  id, size_t size);
  -sa_rc_t sa_option       (sa_t *sa, sa_option_t  id, ...);
  -sa_rc_t sa_syscall      (sa_t *sa, sa_syscall_t id, void (*fptr)(), void *fctx);
  +extern sa_rc_t sa_type         (sa_t  *__sa, sa_type_t    __id);
  +extern sa_rc_t sa_timeout      (sa_t  *__sa, sa_timeout_t __id, long __sec, long __usec);
  +extern sa_rc_t sa_buffer       (sa_t  *__sa, sa_buffer_t  __id, size_t __size);
  +extern sa_rc_t sa_option       (sa_t  *__sa, sa_option_t  __id, ...);
  +extern sa_rc_t sa_syscall      (sa_t  *__sa, sa_syscall_t __id, void (*__fptr)(), void *__fctx);
   
   /* socket connection operations */
  -sa_rc_t sa_bind         (sa_t *sa, sa_addr_t *laddr);
  -sa_rc_t sa_connect      (sa_t *sa, sa_addr_t *raddr);
  -sa_rc_t sa_listen       (sa_t *sa, int backlog);
  -sa_rc_t sa_accept       (sa_t *sa, sa_addr_t **caddr, sa_t **csa);
  -sa_rc_t sa_getremote    (sa_t *sa, sa_addr_t **raddr);
  -sa_rc_t sa_getlocal     (sa_t *sa, sa_addr_t **laddr);
  -sa_rc_t sa_getfd        (sa_t *sa, int *fd);
  -sa_rc_t sa_shutdown     (sa_t *sa, char *flags);
  +extern sa_rc_t sa_bind         (sa_t  *__sa, sa_addr_t  *__laddr);
  +extern sa_rc_t sa_connect      (sa_t  *__sa, sa_addr_t  *__raddr);
  +extern sa_rc_t sa_listen       (sa_t  *__sa, int __backlog);
  +extern sa_rc_t sa_accept       (sa_t  *__sa, sa_addr_t **__caddr, sa_t **__csa);
  +extern sa_rc_t sa_getremote    (sa_t  *__sa, sa_addr_t **__raddr);
  +extern sa_rc_t sa_getlocal     (sa_t  *__sa, sa_addr_t **__laddr);
  +extern sa_rc_t sa_getfd        (sa_t  *__sa, int *__fd);
  +extern sa_rc_t sa_shutdown     (sa_t  *__sa, char *__flags);
   
   /* socket input/output operations (stream communication) */
  -sa_rc_t sa_read         (sa_t *sa, char *buf, size_t buflen, size_t *bufdone);
  -sa_rc_t sa_readln       (sa_t *sa, char *buf, size_t buflen, size_t *bufdone);
  -sa_rc_t sa_write        (sa_t *sa, const char *buf, size_t buflen, size_t *bufdone);
  -sa_rc_t sa_writef       (sa_t *sa, const char *fmt, ...);
  -sa_rc_t sa_flush        (sa_t *sa);
  +extern sa_rc_t sa_read         (sa_t  *__sa, char       *__buf, size_t __buflen, size_t *__bufdone);
  +extern sa_rc_t sa_readln       (sa_t  *__sa, char       *__buf, size_t __buflen, size_t *__bufdone);
  +extern sa_rc_t sa_write        (sa_t  *__sa, const char *__buf, size_t __buflen, size_t *__bufdone);
  +extern sa_rc_t sa_writef       (sa_t  *__sa, const char *__fmt, ...);
  +extern sa_rc_t sa_flush        (sa_t  *__sa);
   
   /* socket input/output operations (datagram communication) */
  -sa_rc_t sa_recv         (sa_t *sa, char *buf, size_t buflen, size_t *bufdone, sa_addr_t **raddr);
  -sa_rc_t sa_send         (sa_t *sa, const char *buf, size_t buflen, size_t *bufdone, sa_addr_t *raddr);
  -sa_rc_t sa_sendf        (sa_t *sa, sa_addr_t *raddr, const char *fmt, ...);
  +extern sa_rc_t sa_recv         (sa_t  *__sa, sa_addr_t **__raddr, char       *__buf, size_t __buflen, size_t *__bufdone);
  +extern sa_rc_t sa_send         (sa_t  *__sa, sa_addr_t  *__raddr, const char *__buf, size_t __buflen, size_t *__bufdone);
  +extern sa_rc_t sa_sendf        (sa_t  *__sa, sa_addr_t  *__raddr, const char *__fmt, ...);
   
   /* error handling operations */
  -char   *sa_error        (sa_rc_t rv);
  +extern char   *sa_error        (sa_rc_t __rv);
   
   /* cleanup */
   #if defined(HAVE_CONFIG_H) && !defined(HAVE_SOCKLEN_T)
  Index: ossp-pkg/sa/sa.pod
  ============================================================
  $ cvs diff -u -r1.36 -r1.37 sa.pod
  --- ossp-pkg/sa/sa.pod	30 Oct 2002 19:09:35 -0000	1.36
  +++ ossp-pkg/sa/sa.pod	30 Oct 2002 20:22:06 -0000	1.37
  @@ -754,7 +754,7 @@
   
   =over 4
   
  -=item sa_rc_t B<sa_recv>(sa_t *I<sa>, char *I<buf>, size_t I<buflen>, size_t *I<bufdone>, sa_addr_t **I<raddr>);
  +=item sa_rc_t B<sa_recv>(sa_t *I<sa>, sa_addr_t **I<raddr>, char *I<buf>, size_t I<buflen>, size_t *I<bufdone>);
   
   Receive a chunk of data from remote address via socket into own buffer.
   
  @@ -765,7 +765,7 @@
   
   Example: C<char buf[1024]; size_t n; sa_recv(sa, buf, sizeof(buf), &n, saa);>
   
  -=item sa_rc_t B<sa_send>(sa_t *I<sa>, const char *I<buf>, size_t I<buflen>, size_t *I<bufdone>, sa_addr_t *I<raddr>);
  +=item sa_rc_t B<sa_send>(sa_t *I<sa>, sa_addr_t *I<raddr>, const char *I<buf>, size_t I<buflen>, size_t *I<bufdone>);
   
   Send a chunk of data to remote address via socket from own buffer.
   
  Index: ossp-pkg/sa/sa_test.c
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 sa_test.c
  --- ossp-pkg/sa/sa_test.c	30 Oct 2002 19:09:35 -0000	1.20
  +++ ossp-pkg/sa/sa_test.c	30 Oct 2002 20:22:06 -0000	1.21
  @@ -285,7 +285,7 @@
           ex(SRV, sa_bind(sa_srv, saa_srv));
   
           /* communicate with client */
  -        ex(SRV, sa_recv(sa_srv, buf_srv, sizeof(buf_srv), &l, &saa_clt));
  +        ex(SRV, sa_recv(sa_srv, &saa_clt, buf_srv, sizeof(buf_srv), &l));
           if (strncmp(buf_srv, MSG_UDP_CLT_REQUEST, l) != 0)
               ts_test_fail(TS_CTX, "server: got \"%s\", expected \"%s\"",
                            buf_srv, MSG_UDP_CLT_REQUEST);
  @@ -312,7 +312,7 @@
           ex(CLT, sa_addr_u2a(saa_srv, "inet://127.0.0.1:12345#udp"));
           ex(CLT, sa_sendf(sa_clt, saa_srv, "%s", MSG_UDP_CLT_REQUEST));
           ex(CLT, sa_addr_destroy(saa_srv));
  -        ex(CLT, sa_recv(sa_clt, buf_clt, sizeof(buf_clt), &l, &saa_srv));
  +        ex(CLT, sa_recv(sa_clt, &saa_srv, buf_clt, sizeof(buf_clt), &l));
           if (strncmp(buf_clt, MSG_UDP_SRV_RESPONSE, l) != 0)
               ts_test_fail(TS_CTX, "client: got \"%s\", expected \"%s\"",
                            buf_clt, MSG_UDP_SRV_RESPONSE);

From ossp-cvs-owner@ossp.org  Wed Oct 30 21:24:02 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CFFF776362; Wed, 30 Oct 2002 21:24:01 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa ChangeLog sa.pod
Message-Id: <20021030202401.CFFF776362@mail.ossp.org>
Date: Wed, 30 Oct 2002 21:24:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Oct-2002 21:24:01
  Branch: HEAD                             Handle: 2002103020240100

  Modified files:
    ossp-pkg/sa             ChangeLog sa.pod

  Log:
    Cleanup markup in manual page (sa.pod)

  Summary:
    Revision    Changes     Path
    1.7         +3  -0      ossp-pkg/sa/ChangeLog
    1.38        +4  -4      ossp-pkg/sa/sa.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sa/ChangeLog
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 ChangeLog
  --- ossp-pkg/sa/ChangeLog	30 Oct 2002 20:22:06 -0000	1.6
  +++ ossp-pkg/sa/ChangeLog	30 Oct 2002 20:24:01 -0000	1.7
  @@ -13,6 +13,9 @@
   
     Changes between 0.9.3 and x.x.x (30-Oct-2002 to xx-Nov-2002)
   
  +   o Cleanup markup in manual page (sa.pod)
  +     [Ralf S. Engelschall]
  +
      o API Cleanups: use politically correct use "extern" keyword in sa.h;
        use leading underscores for variables names in prototypes; move
        "raddr" argument to second position in sa_{send,recv,sendf}.
  Index: ossp-pkg/sa/sa.pod
  ============================================================
  $ cvs diff -u -r1.37 -r1.38 sa.pod
  --- ossp-pkg/sa/sa.pod	30 Oct 2002 20:22:06 -0000	1.37
  +++ ossp-pkg/sa/sa.pod	30 Oct 2002 20:24:01 -0000	1.38
  @@ -754,7 +754,7 @@
   
   =over 4
   
  -=item sa_rc_t B<sa_recv>(sa_t *I<sa>, sa_addr_t **I<raddr>, char *I<buf>, size_t I<buflen>, size_t *I<bufdone>);
  +=item C<sa_rc_t >B<sa_recv>C<(sa_t *>I<sa>C<, sa_addr_t **>I<raddr>C<, char *>I<buf>C<, size_t >I<buflen>C<, size_t *>I<bufdone>C<);>
   
   Receive a chunk of data from remote address via socket into own buffer.
   
  @@ -765,7 +765,7 @@
   
   Example: C<char buf[1024]; size_t n; sa_recv(sa, buf, sizeof(buf), &n, saa);>
   
  -=item sa_rc_t B<sa_send>(sa_t *I<sa>, sa_addr_t *I<raddr>, const char *I<buf>, size_t I<buflen>, size_t *I<bufdone>);
  +=item C<sa_rc_t >B<sa_send>C<(sa_t *>I<sa>C<, sa_addr_t *>I<raddr>C<, const char *>I<buf>C<, size_t >I<buflen>C<, size_t *>I<bufdone>C<);>
   
   Send a chunk of data to remote address via socket from own buffer.
   
  @@ -775,7 +775,7 @@
   
   Example: C<sa_send(sa, buf, strlen(buf), NULL, saa);>
   
  -=item sa_rc_t B<sa_sendf>(sa_t *I<sa>, sa_addr_t *I<raddr>, const char *I<fmt>, ...)
  +=item C<sa_rc_t >B<sa_sendf>C<(sa_t *>I<sa>C<, sa_addr_t *>I<raddr>C<, const char *>I<fmt>C<, ...);>
   
   Send formatted data data to remote address via socket.
   
  @@ -803,7 +803,7 @@
   
   =over 4
   
  -=item char *B<sa_error>(sa_rc_t I<rv>);
  +=item C<char *>B<sa_error>C<(sa_rc_t >I<rv>C<);>
   
   Return the string representation corresponding to the return code
   value I<rv>. The returned string has to be treated read-only by the

From ossp-cvs-owner@ossp.org  Thu Oct 31 08:17:47 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D6794763EF; Thu, 31 Oct 2002 08:17:46 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa AUTHORS ChangeLog INSTALL NEWS README TODO VER...
Message-Id: <20021031071746.D6794763EF@mail.ossp.org>
Date: Thu, 31 Oct 2002 08:17:46 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Oct-2002 08:17:46
  Branch: HEAD                             Handle: 2002103107174501

  Modified files:
    ossp-pkg/sa             AUTHORS ChangeLog INSTALL NEWS README TODO VERSION

  Log:
    polish for OSSP sa 1.0.0 release

  Summary:
    Revision    Changes     Path
    1.2         +7  -0      ossp-pkg/sa/AUTHORS
    1.8         +5  -2      ossp-pkg/sa/ChangeLog
    1.3         +7  -6      ossp-pkg/sa/INSTALL
    1.3         +2  -0      ossp-pkg/sa/NEWS
    1.10        +1  -1      ossp-pkg/sa/README
    1.46        +6  -2      ossp-pkg/sa/TODO
    1.7         +1  -1      ossp-pkg/sa/VERSION
  ____________________________________________________________________________

  Index: ossp-pkg/sa/AUTHORS
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 AUTHORS
  --- ossp-pkg/sa/AUTHORS	15 Mar 2002 10:50:08 -0000	1.1
  +++ ossp-pkg/sa/AUTHORS	31 Oct 2002 07:17:45 -0000	1.2
  @@ -1,3 +1,10 @@
  +   _        ___  ____ ____  ____
  +  |_|_ _   / _ \/ ___/ ___||  _ \   ___  __ _
  +  _|_||_| | | | \___ \___ \| |_) | / __|/ _` |
  + |_||_|_| | |_| |___) |__) |  __/  \__ \ (_| |
  +  |_|_|_|  \___/|____/____/|_|     |___/\__,_|
  +
  +  OSSP sa - Socket Abstraction
   
     AUTHORS
   
  Index: ossp-pkg/sa/ChangeLog
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 ChangeLog
  --- ossp-pkg/sa/ChangeLog	30 Oct 2002 20:24:01 -0000	1.7
  +++ ossp-pkg/sa/ChangeLog	31 Oct 2002 07:17:46 -0000	1.8
  @@ -11,7 +11,10 @@
     This is a list of all changes to OSSP sa.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 0.9.3 and x.x.x (30-Oct-2002 to xx-Nov-2002)
  +  Changes between 0.9.3 and 1.0.0 (30-Oct-2002 to 31-Oct-2002)
  +
  +   o Various source tree cleanups.
  +     [Ralf S. Engelschall]
   
      o Cleanup markup in manual page (sa.pod)
        [Ralf S. Engelschall]
  @@ -39,7 +42,7 @@
   
      o Rewrote the implementation of sa_option(3) in order to make options
        configurable _before_ the underlying socket is implicitly
  -     allocated. This fixes especially sa_option(sa, SA_OPTION_REUSEADDR, 1) 
  +     allocated. This fixes especially sa_option(sa, SA_OPTION_REUSEADDR, 1)
        before sa_bind().
        [Ralf S. Engelschall, Michael van Elst <mlelstv@dev.de.cw.net>]
   
  Index: ossp-pkg/sa/INSTALL
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 INSTALL
  --- ossp-pkg/sa/INSTALL	26 Oct 2002 15:45:32 -0000	1.2
  +++ ossp-pkg/sa/INSTALL	31 Oct 2002 07:17:46 -0000	1.3
  @@ -1,9 +1,10 @@
  -   ___  __ _
  -  / __|/ _` |
  -  \__ \ (_| |
  -  |___/\__,_|
  +   _        ___  ____ ____  ____
  +  |_|_ _   / _ \/ ___/ ___||  _ \   ___  __ _
  +  _|_||_| | | | \___ \___ \| |_) | / __|/ _` |
  + |_||_|_| | |_| |___) |__) |  __/  \__ \ (_| |
  +  |_|_|_|  \___/|____/____/|_|     |___/\__,_|
   
  -  OSSP sa -- Socket Abstraction Library
  +  OSSP sa - Socket Abstraction
   
     INSTALLATION
   
  @@ -13,5 +14,5 @@
       $ ./configure --prefix=/path/to/sa
       $ make
       $ make check
  -    $ make install
  +    $ make install [DESTDIR=/path/to/temp/root]
   
  Index: ossp-pkg/sa/NEWS
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 NEWS
  --- ossp-pkg/sa/NEWS	26 Oct 2002 17:59:30 -0000	1.2
  +++ ossp-pkg/sa/NEWS	31 Oct 2002 07:17:46 -0000	1.3
  @@ -11,3 +11,5 @@
     This is a list of major changes to OSSP sa. For more detailed
     change descriptions, please have a look at the ChangeLog file.
   
  +  -NONE-
  +
  Index: ossp-pkg/sa/README
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 README
  --- ossp-pkg/sa/README	30 Oct 2002 19:17:01 -0000	1.9
  +++ ossp-pkg/sa/README	31 Oct 2002 07:17:46 -0000	1.10
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/\__,_|
   
     OSSP sa - Socket Abstraction
  -  Version 0.9.3 (30-Oct-2002)
  +  Version 1.0.0 (31-Oct-2002)
   
     ABSTRACT
   
  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.45 -r1.46 TODO
  --- ossp-pkg/sa/TODO	30 Oct 2002 18:46:22 -0000	1.45
  +++ ossp-pkg/sa/TODO	31 Oct 2002 07:17:46 -0000	1.46
  @@ -7,10 +7,14 @@
     OSSP sa - Socket Abstraction
   
     TODO
  -  ----
  +
  +  The following items still have to be done:
  +
  +  -NONE-
   
     CANDO
  -  -----
  +
  +  The following items can be done if wished and time permits:
   
     o what about actually written bytes in case of sa_writef?
       Should we internally retry somehow?
  Index: ossp-pkg/sa/VERSION
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 VERSION
  --- ossp-pkg/sa/VERSION	30 Oct 2002 19:17:01 -0000	1.6
  +++ ossp-pkg/sa/VERSION	31 Oct 2002 07:17:46 -0000	1.7
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP sa (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP sa, Version 0.9.3 (30-Oct-2002)
  +  This is OSSP sa, Version 1.0.0 (31-Oct-2002)
   

From ossp-cvs-owner@ossp.org  Thu Oct 31 08:20:10 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BE102763EF; Thu, 31 Oct 2002 08:20:10 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa ChangeLog sa.c
Message-Id: <20021031072010.BE102763EF@mail.ossp.org>
Date: Thu, 31 Oct 2002 08:20:10 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Oct-2002 08:20:10
  Branch: HEAD                             Handle: 2002103107201000

  Modified files:
    ossp-pkg/sa             ChangeLog sa.c

  Log:
    Consistently return SA_ERR_MEM instead of SA_ERR_SYS
    if memory allocations failed.

  Summary:
    Revision    Changes     Path
    1.9         +4  -0      ossp-pkg/sa/ChangeLog
    1.67        +3  -3      ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/ChangeLog
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 ChangeLog
  --- ossp-pkg/sa/ChangeLog	31 Oct 2002 07:17:46 -0000	1.8
  +++ ossp-pkg/sa/ChangeLog	31 Oct 2002 07:20:10 -0000	1.9
  @@ -12,6 +12,10 @@
     For a more brief summary please have a look at the NEWS file.
   
     Changes between 0.9.3 and 1.0.0 (30-Oct-2002 to 31-Oct-2002)
  +   
  +   o Consistently return SA_ERR_MEM instead of SA_ERR_SYS
  +     if memory allocations failed.
  +     [Ralf S. Engelschall]
   
      o Various source tree cleanups.
        [Ralf S. Engelschall]
  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.66 -r1.67 sa.c
  --- ossp-pkg/sa/sa.c	30 Oct 2002 20:22:06 -0000	1.66
  +++ ossp-pkg/sa/sa.c	31 Oct 2002 07:20:10 -0000	1.67
  @@ -1213,7 +1213,7 @@
               else
                   cp = (char *)realloc(sa->cpReadBuf, size);
               if (cp == NULL)
  -                return SA_RC(SA_ERR_SYS);
  +                return SA_RC(SA_ERR_MEM);
               sa->cpReadBuf = cp;
               sa->nReadSize = size;
           }
  @@ -1234,7 +1234,7 @@
               else
                   cp = (char *)realloc(sa->cpWriteBuf, size);
               if (cp == NULL)
  -                return SA_RC(SA_ERR_SYS);
  +                return SA_RC(SA_ERR_MEM);
               sa->cpWriteBuf = cp;
               sa->nWriteSize = size;
           }
  @@ -2203,7 +2203,7 @@
       if ((nBuf+1) > sizeof(caBuf)) {
           /* requires a larger buffer, so allocate dynamically */
           if ((cpBuf = (char *)malloc(nBuf+1)) == NULL)
  -            return SA_RC(SA_ERR_SYS);
  +            return SA_RC(SA_ERR_MEM);
       }
       else {
           /* fits into small buffer, so allocate statically */

From ossp-cvs-owner@ossp.org  Fri Nov  1 09:44:03 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0CAE0763E9; Fri,  1 Nov 2002 09:44:02 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa ChangeLog README VERSION
Message-Id: <20021101084402.0CAE0763E9@mail.ossp.org>
Date: Fri,  1 Nov 2002 09:44:02 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Nov-2002 09:44:02
  Branch: HEAD                             Handle: 2002110108440200

  Modified files:
    ossp-pkg/sa             ChangeLog README VERSION

  Log:
    final adjustments for OSSP sa 1.0.0 release

  Summary:
    Revision    Changes     Path
    1.10        +1  -1      ossp-pkg/sa/ChangeLog
    1.11        +1  -1      ossp-pkg/sa/README
    1.8         +1  -1      ossp-pkg/sa/VERSION
  ____________________________________________________________________________

  Index: ossp-pkg/sa/ChangeLog
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 ChangeLog
  --- ossp-pkg/sa/ChangeLog	31 Oct 2002 07:20:10 -0000	1.9
  +++ ossp-pkg/sa/ChangeLog	1 Nov 2002 08:44:02 -0000	1.10
  @@ -11,7 +11,7 @@
     This is a list of all changes to OSSP sa.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 0.9.3 and 1.0.0 (30-Oct-2002 to 31-Oct-2002)
  +  Changes between 0.9.3 and 1.0.0 (30-Oct-2002 to 01-Nov-2002)
      
      o Consistently return SA_ERR_MEM instead of SA_ERR_SYS
        if memory allocations failed.
  Index: ossp-pkg/sa/README
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 README
  --- ossp-pkg/sa/README	31 Oct 2002 07:17:46 -0000	1.10
  +++ ossp-pkg/sa/README	1 Nov 2002 08:44:02 -0000	1.11
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/\__,_|
   
     OSSP sa - Socket Abstraction
  -  Version 1.0.0 (31-Oct-2002)
  +  Version 
   
     ABSTRACT
   
  Index: ossp-pkg/sa/VERSION
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 VERSION
  --- ossp-pkg/sa/VERSION	31 Oct 2002 07:17:46 -0000	1.7
  +++ ossp-pkg/sa/VERSION	1 Nov 2002 08:44:02 -0000	1.8
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP sa (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP sa, Version 1.0.0 (31-Oct-2002)
  +  This is OSSP sa, Version 1.0.0 (01-Nov-2002)
   

From ossp-cvs-owner@ossp.org  Fri Nov  1 09:51:54 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3E0A87643F; Fri,  1 Nov 2002 09:51:54 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/sa socket.png socket.xcf
Message-Id: <20021101085154.3E0A87643F@mail.ossp.org>
Date: Fri,  1 Nov 2002 09:51:54 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   01-Nov-2002 09:51:54
  Branch: HEAD                             Handle: 2002110108515300

  Added files:
    ossp-web/pkg/lib/sa     socket.png socket.xcf

  Log:
    add logo

  Summary:
    Revision    Changes     Path
    1.1         BLOB        ossp-web/pkg/lib/sa/socket.png
    1.1         BLOB        ossp-web/pkg/lib/sa/socket.xcf
  ____________________________________________________________________________

  Index: ossp-web/pkg/lib/sa/socket.png
  ============================================================
  $ cvs update -p -r1.1 socket.png | uuencode socket.png
  ‰PNG
  
  
From ossp-cvs-owner@ossp.org  Fri Nov  1 09:59:17 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D7F497643F; Fri,  1 Nov 2002 09:59:16 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/SHARE ossp_navbar.wml ossp_pkg.wml ossp-web/new n...
Message-Id: <20021101085916.D7F497643F@mail.ossp.org>
Date: Fri,  1 Nov 2002 09:59:16 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   01-Nov-2002 09:59:16
  Branch: HEAD                             Handle: 2002110108591303

  Modified files:
    ossp-web/SHARE          ossp_navbar.wml ossp_pkg.wml
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/fsl    index.wml
    ossp-web/pkg/lib/sa     index.wml
    ossp-web/sup            index.wml

  Log:
    release OSSP sa 1.0.0 and cleanup some website edges

  Summary:
    Revision    Changes     Path
    1.11        +7  -7      ossp-web/SHARE/ossp_navbar.wml
    1.9         +2  -2      ossp-web/SHARE/ossp_pkg.wml
    1.29        +1  -0      ossp-web/new/news.txt
    1.13        +2  -2      ossp-web/pkg/lib/fsl/index.wml
    1.32        +27 -27     ossp-web/pkg/lib/index.wml
    1.8         +89 -5      ossp-web/pkg/lib/sa/index.wml
    1.2         +4  -0      ossp-web/sup/index.wml
  ____________________________________________________________________________

  Index: ossp-web/SHARE/ossp_navbar.wml
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 ossp_navbar.wml
  --- ossp-web/SHARE/ossp_navbar.wml	2 Oct 2002 12:48:45 -0000	1.10
  +++ ossp-web/SHARE/ossp_navbar.wml	1 Nov 2002 08:59:13 -0000	1.11
  @@ -247,29 +247,29 @@
   <nb:stage3 pkg:lib>
     #   Packages, Libraries
     <navbar:button txt="GNU pth"          url=pkg/lib/pth/             id=pkg:lib:pth>
  -  <navbar:button txt="OSSP str"         url=pkg/lib/str/             id=pkg:lib:str>
     <navbar:button txt="OSSP mm"          url=pkg/lib/mm/              id=pkg:lib:mm>
  -  <navbar:button txt="OSSP sa"          url=pkg/lib/sa/              id=pkg:lib:sa>
     <navbar:button txt="OSSP ex"          url=pkg/lib/ex/              id=pkg:lib:ex>
  -  <navbar:button txt="OSSP l2"          url=pkg/lib/l2/              id=pkg:lib:l2>
  +  <navbar:button txt="OSSP sa"          url=pkg/lib/sa/              id=pkg:lib:sa>
  +  <navbar:button txt="OSSP fsl"         url=pkg/lib/fsl/             id=pkg:lib:fsl>
     <navbar:button txt="OSSP var"         url=pkg/lib/var/             id=pkg:lib:var>
     <navbar:button txt="OSSP val"         url=pkg/lib/val/             id=pkg:lib:val>
     <navbar:button txt="OSSP xds"         url=pkg/lib/xds/             id=pkg:lib:xds>
  +  <navbar:button txt="OSSP str"         url=pkg/lib/str/             id=pkg:lib:str>
  +  <navbar:button txt="OSSP l2"          url=pkg/lib/l2/              id=pkg:lib:l2>
     <navbar:button txt="OSSP cfg"         url=pkg/lib/cfg/             id=pkg:lib:cfg>
     <navbar:button txt="OSSP act"         url=pkg/lib/act/             id=pkg:lib:act>
     <navbar:button txt="OSSP cache"       url=pkg/lib/cache/           id=pkg:lib:cache>
     <navbar:button txt="OSSP path"        url=pkg/lib/path/            id=pkg:lib:path>
     <navbar:button txt="OSSP proc"        url=pkg/lib/proc/            id=pkg:lib:proc>
  -  <navbar:button txt="OSSP pcre"        url=pkg/lib/pcre/            id=pkg:lib:pcre>
     <navbar:button txt="OSSP pcbe"        url=pkg/lib/pcbe/            id=pkg:lib:pcbe>
  -  <navbar:button txt="OSSP popt"        url=pkg/lib/popt/            id=pkg:lib:popt>
     <navbar:button txt="OSSP sio"         url=pkg/lib/sio/             id=pkg:lib:sio>
     <navbar:button txt="OSSP res"         url=pkg/lib/res/             id=pkg:lib:res>
     <navbar:button txt="OSSP hook"        url=pkg/lib/hook/            id=pkg:lib:hook>
  -  <navbar:button txt="OSSP adns"        url=pkg/lib/adns/            id=pkg:lib:adns>
     <navbar:button txt="OSSP mux"         url=pkg/lib/mux/             id=pkg:lib:mux>
     <navbar:button txt="OSSP err"         url=pkg/lib/err/             id=pkg:lib:err>
  -  <navbar:button txt="OSSP fsl"         url=pkg/lib/fsl/             id=pkg:lib:fsl>
  +  <navbar:button txt="OSSP popt"        url=pkg/lib/popt/            id=pkg:lib:popt>
  +  <navbar:button txt="OSSP pcre"        url=pkg/lib/pcre/            id=pkg:lib:pcre>
  +  <navbar:button txt="OSSP adns"        url=pkg/lib/adns/            id=pkg:lib:adns>
   </nb:stage3>
   
   #   render the navigation bar
  Index: ossp-web/SHARE/ossp_pkg.wml
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 ossp_pkg.wml
  --- ossp-web/SHARE/ossp_pkg.wml	2 Oct 2002 12:48:45 -0000	1.8
  +++ ossp-web/SHARE/ossp_pkg.wml	1 Nov 2002 08:59:13 -0000	1.9
  @@ -88,8 +88,8 @@
                  'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
   	$ncol = ($ncol + 1) % 2;
   	my $type = "N";
  -	$type = "S" if ($f eq $stable);
  -	$type = "U" if ($f eq $unstable);
  +	$type = "S" if ($f =~ m|$stable|);
  +	$type = "U" if ($f =~ m|$unstable|);
       my $class = "files${ncol}${type}";
       $f = "<a href=\"".$url."/".$f."\" class=$class>$f</a>";
       my $e = "<tr class=$class>" .
  Index: ossp-web/new/news.txt
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 news.txt
  --- ossp-web/new/news.txt	30 Oct 2002 19:19:50 -0000	1.28
  +++ ossp-web/new/news.txt	1 Nov 2002 08:59:14 -0000	1.29
  @@ -1,3 +1,4 @@
  +01-Nov-2002: Released L<OSSP sa> 1.0.0
   30-Oct-2002: Released L<OSSP sa> 0.9.3
   21-Oct-2002: Released L<OSSP fsl> 1.0.5
   21-Oct-2002: Released L<OSSP fsl> 1.0.4
  Index: ossp-web/pkg/lib/fsl/index.wml
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 index.wml
  --- ossp-web/pkg/lib/fsl/index.wml	2 Oct 2002 12:44:37 -0000	1.12
  +++ ossp-web/pkg/lib/fsl/index.wml	1 Nov 2002 08:59:15 -0000	1.13
  @@ -45,7 +45,7 @@
   <pkg_status
       name="fsl" assign="thl"
       genesis="Jul-2002"
  -    stable="1.0.3"   stable_date="07-Sep-2002"
  +    stable="1.0.5"   stable_date="21-Oct-2002"
       unstable="none"  unstable_date="none"
   	done=100>
   
  @@ -56,7 +56,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/fsl/
       directory=$(FTP_ROOT_DIR)/pkg/lib/fsl/
       files="fsl-*.tar.gz" 
  -	stable="fsl-1.0.3.tar.gz" unstable="none">
  +	stable="fsl-1.0.5.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  Index: ossp-web/pkg/lib/index.wml
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 index.wml
  --- ossp-web/pkg/lib/index.wml	30 Oct 2002 19:19:50 -0000	1.31
  +++ ossp-web/pkg/lib/index.wml	1 Nov 2002 08:59:14 -0000	1.32
  @@ -16,51 +16,51 @@
     <pkg_item name="pth" longname="GNU pth" type="lib"
               desc="Portable Threads"
   			done=100 stable=1.4.1 unstable=none>
  -  <pkg_item name="str" longname="OSSP str" type="lib"
  -            desc="String Handling"
  -			done=80 stable=none unstable=0.9.7>
     <pkg_item name="mm" longname="OSSP mm" type="lib"
               desc="Shared Memory Allocation"
   			done=100 stable=1.2.1 unstable=none>
  -  <pkg_item name="sa" longname="OSSP sa" type="lib"
  -            desc="Socket Abstraction"
  -			done=95 stable=none unstable=0.9.3>
     <pkg_item name="ex" longname="OSSP ex" type="lib"
               desc="Exception Handling"
   			done=100 stable=1.0.0 unstable=none>
  -  <pkg_item name="l2" longname="OSSP l2" type="lib"
  -            desc="Flexible Logging"
  -			done=95 stable=none unstable=0.9.1>
  +  <pkg_item name="sa" longname="OSSP sa" type="lib"
  +            desc="Socket Abstraction"
  +			done=100 stable=1.0.0 unstable=none>
  +  <pkg_item name="fsl" longname="OSSP fsl" type="lib"
  +            desc="Faked/Flexible Syslog"
  +			done=100 stable=1.0.5 unstable=none>
     <pkg_item name="var" longname="OSSP var" type="lib"
               desc="Variable Expansion"
   			done=95 stable=none unstable=0.9.0>
     <pkg_item name="val" longname="OSSP val" type="lib"
               desc="Value Access"
   			done=95 stable=none unstable=0.9.0>
  +  <pkg_item name="xds" longname="OSSP xds" type="lib"
  +            desc="Extensible Data Serialization"
  +			done=95 stable=none unstable=none>
  +  <pkg_item name="str" longname="OSSP str" type="lib"
  +            desc="String Handling"
  +			done=80 stable=none unstable=0.9.7>
  +  <pkg_item name="l2" longname="OSSP l2" type="lib"
  +            desc="Flexible Logging"
  +			done=95 stable=none unstable=0.9.1>
  +  <pkg_item name="cfg" longname="OSSP cfg" type="lib"
  +            desc="Configuration Parsing"
  +			done=95 stable=none unstable=0.9.0>
     <pkg_item name="act" longname="OSSP act" type="lib"
               desc="Abstract Container Types"
   			done=25 stable=none unstable=none>
     <pkg_item name="cache" longname="OSSP cache" type="lib"
               desc="User-Space Cache"
   			done=15 stable=none unstable=none>
  -  <pkg_item name="xds" longname="OSSP xds" type="lib"
  -            desc="Extensible Data Serialization"
  -			done=95 stable=none unstable=none>
     <pkg_item name="path" longname="OSSP path" type="lib"
               desc="Filesystem Path Manipulations"
   			done=70 stable=none unstable=none>
     <pkg_item name="proc" longname="OSSP proc" type="lib"
               desc="Process Management"
   			done=30 stable=none unstable=none>
  -  <pkg_item name="pcre" longname="OSSP pcre" type="lib" derived=yes
  -            desc="Perl Compatible Regular Expressions"
  -			done=100 stable=none unstable=none>
     <pkg_item name="pcbe" longname="OSSP pcbe" type="lib"
               desc="Perl Style Boolean Expressions"
   			done=15 stable=none unstable=none>
  -  <pkg_item name="popt" longname="OSSP popt" type="lib" derived=yes
  -            desc="Option Parsing"
  -			done=95 stable=none unstable=none>
     <pkg_item name="sio" longname="OSSP sio" type="lib"
               desc="Stream I/O"
   			done=15 stable=none unstable=none>
  @@ -70,20 +70,20 @@
     <pkg_item name="hook" longname="OSSP hook" type="lib"
               desc="API Hooks"
   			done=50 stable=none unstable=none>
  -  <pkg_item name="cfg" longname="OSSP cfg" type="lib"
  -            desc="Configuration Parsing"
  -			done=95 stable=none unstable=0.9.0>
  -  <pkg_item name="adns" longname="OSSP adns" type="lib" derived=yes
  -            desc="Asynchronous DNS Resolving"
  -			done=100 stable=none unstable=none>
     <pkg_item name="mux" longname="OSSP mux" type="lib"
               desc="Multiplexing Protocol"
   			done=15 stable=none unstable=none>
     <pkg_item name="err" longname="OSSP err" type="lib"
               desc="Error Stacks"
   			done=15 stable=none unstable=none>
  -  <pkg_item name="fsl" longname="OSSP fsl" type="lib"
  -            desc="Faked/Flexible Syslog"
  -			done=100 stable=1.0.5 unstable=none>
  +  <pkg_item name="popt" longname="OSSP popt" type="lib" derived=yes
  +            desc="Option Parsing"
  +			done=100 stable=none unstable=none>
  +  <pkg_item name="pcre" longname="OSSP pcre" type="lib" derived=yes
  +            desc="Perl Compatible Regular Expressions"
  +			done=100 stable=none unstable=none>
  +  <pkg_item name="adns" longname="OSSP adns" type="lib" derived=yes
  +            desc="Asynchronous DNS Resolving"
  +			done=100 stable=none unstable=none>
   </pkg_list>
   
  Index: ossp-web/pkg/lib/sa/index.wml
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 index.wml
  --- ossp-web/pkg/lib/sa/index.wml	30 Oct 2002 19:19:51 -0000	1.7
  +++ ossp-web/pkg/lib/sa/index.wml	1 Nov 2002 08:59:15 -0000	1.8
  @@ -5,14 +5,98 @@
   
   <h1>Socket Abstraction</h1>
   
  +<img src="socket.png" alt="" align=right>
  +
   <h2>Abstract</h2>
   
  -OSSP sa is an abstraction library for the Unix socket application programming
  +<b>OSSP</b> sa is an abstraction library for the Unix socket application programming
   interface (API) featuring stream and datagram oriented communication over Unix
   Domain and Internet Domain (TCP and UDP) sockets. It provides the following
   key features: address abstraction (local, IPv4, and IPv6), type abstraction,
   I/O timeouts, I/O stream buffering and convenience I/O functions.
   
  +It provides the following key features:
  +
  +<ul>
  +<li><b>Stand-Alone, Self-Contained, Embeddable</b>
  +<br>
  +<font size=-1>
  +Although there are various Open Source libraries available which provide
  +a similar abstraction approach, they all either lack important features
  +or unfortunately depend on other companion libraries. <b>OSSP sa</b> fills
  +this gap by providing all important features (see following points) as a
  +stand-alone and fully self-contained library. This way <b>OSSP sa</b> can be
  +trivially embedded as a sub-library into other libraries. It especially
  +provides additional support for namespace-safe embedding of its API in
  +order to avoid symbol conflicts.
  +</font>
  +
  +<p>
  +<li><b>Address Abstraction</b>
  +<br>
  +<font size=-1>
  +Most of the ugliness in the Unix <i>Socket</i> API is the necessity to
  +have to deal with the various address structures (<tt>struct sockaddr_xx</tt>)
  +which exist because of both the different communication types and
  +addressing schemes. <b>OSSP sa</b> fully hides this by providing an abstract
  +and opaque address type (<tt>sa_addr_t</tt>) together with utility functions
  +which allow one to convert from the traditional <tt>struct sockaddr</tt> or
  +URI specification to the <tt>sa_addr_t</tt> and vice versa without having to
  +deal with special cases related to the underlying particular C<struct
  +sockaddr_xx>. <b>OSSP sa</b> support <i>Unix Domain</i> and both IPv4 and IPv6
  +<i>Internet Domain</i> addressing.
  +</font>
  +
  +<p>
  +<li><b>Type Abstraction</b>
  +<br>
  +<font size=-1>
  +Some other subtle details in the Unix <i>Socket</i> API make the life hard
  +in practice: <tt>socklen_t</tt> and <tt>ssize_t</tt>. These two types originally
  +were (and on some platforms still are) plain integers or unsigned
  +integers while POSIX later introduced own types for them (and even
  +revised these types after some time again). This is nasty, because
  +for 100% type-correct API usage (especially important on 64-bit
  +machines where pointers to different integer types make trouble), every
  +application has to check whether the newer types exists, and if not
  +provide own definitions which map to the still actually used integer
  +type on the underlying platform. <b>OSSP sa</b> hides most of this in its
  +API and for <tt>socklen_t</tt> provides a backward-compatibility definition.
  +Instead of <tt>ssize_t</tt> it can use <tt>size_t</tt> because <b>OSSP sa</b> does not use
  +traditional Unix return code semantics.
  +</font>
  +
  +<p>
  +<li><b>I/O Timeouts</b>
  +<br>
  +<font size=-1>
  +Each I/O function in <b>OSSP sa</b> is aware of timeouts (set by
  +sa_timeout(3)), i.e., all I/O operations return <tt>SA_ERR_TMT</tt> if
  +the timeout expired before the I/O operation was able to succeed.
  +This allows one to easily program less-blocking network services.
  +<b>OSSP sa</b> internally implements these timeouts either through the
  +<tt>SO_</tt>{<tt>SND</tt>,<tt>RCV</tt>}<tt>TIMEO</tt> feature on more modern <i>Socket</i>
  +implementations or through traditional select(2). This way high
  +performance is achieved on modern platforms while the full functionality
  +still is available on older platforms.
  +</font>
  +
  +<p>
  +<li><b>I/O Stream Buffering</b>
  +<br>
  +<font size=-1>
  +If <b>OSSP sa</b> is used for stream communication, internally all I/O
  +operations can be performed through input and/or output buffers (set
  +by sa_buffer(3)) for achieving higher I/O performance by doing I/O
  +operations on larger aggregated messages and with less required system
  +calls. Additionally if <b>OSSP sa</b> is used for stream communication, for
  +convenience reasons line-oriented reading (sa_readln(3)) and formatted
  +writing (see sa_writef(3)) is provided, modelled after STDIO's fgets(3)
  +and fprintf(3). Both features fully leverage from the I/O buffering.
  +</font>
  +
  +</ul>
  +
   <h2>Documentation</h2>
   
   <pkg_manpage name="sa" sect=3 path="/pkg/lib/sa/sa.pod">,
  @@ -26,9 +110,9 @@
   
   <pkg_status
       name="sa" assign="rse"
  -    stable="none"    stable_date="none"
  -    unstable="0.9.3" unstable_date="30-Oct-2002"
  -	done=95>
  +    stable="1.0.0"    stable_date="01-Nov-2002"
  +    unstable="none" unstable_date="none"
  +	done=100>
   
   <h2>Source</h2>
   
  @@ -37,7 +121,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/sa/
       directory=$(FTP_ROOT_DIR)/pkg/lib/sa/
       files="sa-*.tar.gz" 
  -	stable="none" unstable="sa-0.9.3.tar.gz">
  +	stable="sa-1\.0\.0\.tar\.gz" unstable="sa-SNAP.*\.tar.gz">
   	
   <h2>Donation</h2>
   
  Index: ossp-web/sup/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/sup/index.wml	13 Feb 2002 16:35:11 -0000	1.1
  +++ ossp-web/sup/index.wml	1 Nov 2002 08:59:16 -0000	1.2
  @@ -5,3 +5,7 @@
   
   <h1>Project Support</h1>
   
  +<a href="bugdb.html"><h2>Bug Database</h2></a>
  +
  +<a href="forums.html"><h2>Support Forums</h2></a>
  +

From ossp-cvs-owner@ossp.org  Sat Nov  2 13:14:11 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D5480763B1; Sat,  2 Nov 2002 13:14:10 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool ChangeLog sh.scpp
Message-Id: <20021102121410.D5480763B1@mail.ossp.org>
Date: Sat,  2 Nov 2002 13:14:10 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Nov-2002 13:14:10
  Branch: HEAD                             Handle: 2002110212141000

  Modified files:
    ossp-pkg/shtool         ChangeLog sh.scpp

  Log:
    Fixed 'shtool scpp -f ...'. The arguments to option -f
    were not evaluated correctly.

  Summary:
    Revision    Changes     Path
    1.173       +4  -0      ossp-pkg/shtool/ChangeLog
    1.22        +3  -3      ossp-pkg/shtool/sh.scpp
  ____________________________________________________________________________

  Index: ossp-pkg/shtool/ChangeLog
  ============================================================
  $ cvs diff -u -r1.172 -r1.173 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	30 Oct 2002 16:21:51 -0000	1.172
  +++ ossp-pkg/shtool/ChangeLog	2 Nov 2002 12:14:10 -0000	1.173
  @@ -11,6 +11,10 @@
   
    Changes between 1.6.1 and 1.6.2 (12-Jul-2002 to xx-Oct-2002):
   
  +   *) Fixed 'shtool scpp -f ...'. The arguments to option -f 
  +      were not evaluated correctly.
  +      [Ralf S. Engelschall]
  +
      *) Support bold font on 'cygwin' terminals.
         [Marcus Boerger <marcus.boerger@t-online.de>]
   
  Index: ossp-pkg/shtool/sh.scpp
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 sh.scpp
  --- ossp-pkg/shtool/sh.scpp	31 Dec 2001 15:06:04 -0000	1.21
  +++ ossp-pkg/shtool/sh.scpp	2 Nov 2002 12:14:10 -0000	1.22
  @@ -76,11 +76,11 @@
           do
               inputcmd="$inputcmd -e '$e'"
           done
  -        inputcmd="$inputcmd $src"
  +        inputcmd="$inputcmd '$src'"
       else
  -        inputcmd="cat $src"
  +        inputcmd="cat '$src'"
       fi
  -    $inputcmd |\
  +    eval $inputcmd |\
       $awk '
          BEGIN {
              ln    = 0;

From ossp-cvs-owner@ossp.org  Sat Nov  2 13:32:30 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 17F41763B1; Sat,  2 Nov 2002 13:32:30 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool devtool.conf
Message-Id: <20021102123230.17F41763B1@mail.ossp.org>
Date: Sat,  2 Nov 2002 13:32:30 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Nov-2002 13:32:30
  Branch: HEAD                             Handle: 2002110212322900

  Modified files:
    ossp-pkg/shtool         devtool.conf

  Log:
    upgrade to Autoconf 2.54

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/shtool/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/shtool/devtool.conf
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.conf
  --- ossp-pkg/shtool/devtool.conf	11 Jul 2002 17:23:25 -0000	1.3
  +++ ossp-pkg/shtool/devtool.conf	2 Nov 2002 12:32:29 -0000	1.4
  @@ -3,7 +3,7 @@
   ##
   
   %autogen
  -    @autogen autoconf 2.53 "2.5.*"
  +    @autogen autoconf 2.54 "2.5*"
   
   %autoclean
       @autoclean autoconf

From ossp-cvs-owner@ossp.org  Sat Nov  2 13:35:57 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E5614763B1; Sat,  2 Nov 2002 13:35:56 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool ChangeLog sh.mkdir shtool.pod
Message-Id: <20021102123556.E5614763B1@mail.ossp.org>
Date: Sat,  2 Nov 2002 13:35:56 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Nov-2002 13:35:56
  Branch: HEAD                             Handle: 2002110212355600

  Modified files:
    ossp-pkg/shtool         ChangeLog sh.mkdir shtool.pod

  Log:
    Add -o|--owner and -g|--group options to "shtool mkdir".

  Summary:
    Revision    Changes     Path
    1.174       +3  -0      ossp-pkg/shtool/ChangeLog
    1.19        +29 -3      ossp-pkg/shtool/sh.mkdir
    1.60        +5  -2      ossp-pkg/shtool/shtool.pod
  ____________________________________________________________________________

  Index: ossp-pkg/shtool/ChangeLog
  ============================================================
  $ cvs diff -u -r1.173 -r1.174 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	2 Nov 2002 12:14:10 -0000	1.173
  +++ ossp-pkg/shtool/ChangeLog	2 Nov 2002 12:35:56 -0000	1.174
  @@ -11,6 +11,9 @@
   
    Changes between 1.6.1 and 1.6.2 (12-Jul-2002 to xx-Oct-2002):
   
  +   *) Add -o|--owner and -g|--group options to "shtool mkdir".
  +      [Ralf S. Engelschall]
  +
      *) Fixed 'shtool scpp -f ...'. The arguments to option -f 
         were not evaluated correctly.
         [Ralf S. Engelschall]
  Index: ossp-pkg/shtool/sh.mkdir
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 sh.mkdir
  --- ossp-pkg/shtool/sh.mkdir	31 Dec 2001 15:06:04 -0000	1.18
  +++ ossp-pkg/shtool/sh.mkdir	2 Nov 2002 12:35:56 -0000	1.19
  @@ -21,14 +21,16 @@
   ##
   
   str_tool="mkdir"
  -str_usage="[-t|--trace] [-f|--force] [-p|--parents] [-m|--mode <mode>] <dir> [<dir> ...]"
  +str_usage="[-t|--trace] [-f|--force] [-p|--parents] [-m|--mode <mode>] [-o|--owner <owner>] [-g|--group <group>] <dir> [<dir> ...]"
   arg_spec="1+"
  -opt_spec="t.f.p.m:"
  -opt_alias="t:trace,f:force,p:parents,m:mode"
  +opt_spec="t.f.p.m:o:g:"
  +opt_alias="t:trace,f:force,p:parents,m:mode,o:owner,g:group"
   opt_t=no
   opt_f=no
   opt_p=no
   opt_m=""
  +opt_o=""
  +opt_g=""
   
   . ./sh.common
   
  @@ -50,6 +52,18 @@
               echo "mkdir $p" 1>&2
           fi
           mkdir $p || errstatus=$?
  +        if [ ".$opt_o" != . ]; then
  +            if [ ".$opt_t" = .yes ]; then
  +                echo "chown $opt_o $p" 1>&2
  +            fi
  +            chown $opt_o $p || errstatus=$?
  +        fi
  +        if [ ".$opt_g" != . ]; then
  +            if [ ".$opt_t" = .yes ]; then
  +                echo "chgrp $opt_g $p" 1>&2
  +            fi
  +            chgrp $opt_g $p || errstatus=$?
  +        fi
           if [ ".$opt_m" != . ]; then
               if [ ".$opt_t" = .yes ]; then
                   echo "chmod $opt_m $p" 1>&2
  @@ -75,6 +89,18 @@
                       echo "mkdir $pathcomp" 1>&2
                   fi
                   mkdir $pathcomp || errstatus=$?
  +                if [ ".$opt_o" != . ]; then
  +                    if [ ".$opt_t" = .yes ]; then
  +                        echo "chown $opt_o $pathcomp" 1>&2
  +                    fi
  +                    chown $opt_o $pathcomp || errstatus=$?
  +                fi
  +                if [ ".$opt_g" != . ]; then
  +                    if [ ".$opt_t" = .yes ]; then
  +                        echo "chgrp $opt_g $pathcomp" 1>&2
  +                    fi
  +                    chgrp $opt_g $pathcomp || errstatus=$?
  +                fi
                   if [ ".$opt_m" != . ]; then
                       if [ ".$opt_t" = .yes ]; then
                           echo "chmod $opt_m $pathcomp" 1>&2
  Index: ossp-pkg/shtool/shtool.pod
  ============================================================
  $ cvs diff -u -r1.59 -r1.60 shtool.pod
  --- ossp-pkg/shtool/shtool.pod	11 Jul 2002 17:23:25 -0000	1.59
  +++ ossp-pkg/shtool/shtool.pod	2 Nov 2002 12:35:56 -0000	1.60
  @@ -445,7 +445,7 @@
        shtool install -c -m 644 foo.man $(mandir)/man1/foo.1
        shtool install -c -m 644 -e "s/@p@/$prefix/g" foo.conf $(etcdir)/
   
  -=item B<mkdir> [B<-t>|B<--trace>] [B<-f>|B<--force>] [B<-p>|B<--parents>] [B<-m>|B<--mode> I<mode>] I<dir> [I<dir> ...]
  +=item B<mkdir> [B<-t>|B<--trace>] [B<-f>|B<--force>] [B<-p>|B<--parents>] [B<-m>|B<--mode> I<mode>] [B<-o>|B<--owner> I<owner>] [B<-g>|B<--group> I<group>] I<dir> [I<dir> ...]
   
   This is a mkdir(1) style command providing support for automatic parent
   directory creation (if option ``B<-p>'' is used), directory permission
  @@ -453,7 +453,10 @@
   the formats specified to the chmod(1) command) and smart skipping if
   I<dir> already exists (triggered by the force option ``B<-f>''). Option
   ``B<-t>'' (trace) can be used to enable the output of the essential
  -shell commands which are executed.
  +shell commands which are executed. The target directory is created with
  +owner/group set to the current active uid/gid, but if this script is
  +called as root (uid 0) the options ``B<-o>'' and ``B<-g>'' can be used
  +to override this.
   
   The trick of this command is that it provides both a portable ``B<-p>''
   functionality and the ability to be smart if the directory already exists

From ossp-cvs-owner@ossp.org  Sat Nov  2 13:39:56 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DFE05763B1; Sat,  2 Nov 2002 13:39:55 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool configure.ac
Message-Id: <20021102123955.DFE05763B1@mail.ossp.org>
Date: Sat,  2 Nov 2002 13:39:55 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Nov-2002 13:39:55
  Branch: HEAD                             Handle: 2002110212395500

  Modified files:
    ossp-pkg/shtool         configure.ac

  Log:
    fix config.status usage

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/shtool/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/shtool/configure.ac
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 configure.ac
  --- ossp-pkg/shtool/configure.ac	11 Jul 2002 17:23:24 -0000	1.2
  +++ ossp-pkg/shtool/configure.ac	2 Nov 2002 12:39:55 -0000	1.3
  @@ -50,6 +50,6 @@
   fi
   
   AC_CONFIG_FILES(Makefile shtoolize)
  +AC_CONFIG_COMMANDS([adjustment], [chmod a+x shtoolize])
   AC_OUTPUT
  -chmod a+x shtoolize
   

From ossp-cvs-owner@ossp.org  Sat Nov  2 13:46:20 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C52B87643F; Sat,  2 Nov 2002 13:46:19 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool ChangeLog sh.install shtool.pod
Message-Id: <20021102124619.C52B87643F@mail.ossp.org>
Date: Sat,  2 Nov 2002 13:46:19 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Nov-2002 13:46:19
  Branch: HEAD                             Handle: 2002110212461900

  Modified files:
    ossp-pkg/shtool         ChangeLog sh.install shtool.pod

  Log:
    Map "shtool install -d <dir> [...]" internally to "shtool mkdir -f -p -m
    755 <dir> [...]" in order to support the BSD-style "install -d" variant.
    
    Idea (and initial patch) submitted by: Alan Eldridge <alane@geeksrus.net>

  Summary:
    Revision    Changes     Path
    1.175       +5  -0      ossp-pkg/shtool/ChangeLog
    1.25        +27 -4      ossp-pkg/shtool/sh.install
    1.61        +4  -2      ossp-pkg/shtool/shtool.pod
  ____________________________________________________________________________

  Index: ossp-pkg/shtool/ChangeLog
  ============================================================
  $ cvs diff -u -r1.174 -r1.175 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	2 Nov 2002 12:35:56 -0000	1.174
  +++ ossp-pkg/shtool/ChangeLog	2 Nov 2002 12:46:19 -0000	1.175
  @@ -11,6 +11,11 @@
   
    Changes between 1.6.1 and 1.6.2 (12-Jul-2002 to xx-Oct-2002):
   
  +   *) Map "shtool install -d <dir> [...]" internally to "shtool mkdir
  +      -f -p -m 755 <dir> [...]" in order to support the BSD-style
  +      "install -d" variant.
  +      [Ralf S. Engelschall, Alan Eldridge <alane@geeksrus.net>]
  +
      *) Add -o|--owner and -g|--group options to "shtool mkdir".
         [Ralf S. Engelschall]
   
  Index: ossp-pkg/shtool/sh.install
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 sh.install
  --- ossp-pkg/shtool/sh.install	31 Dec 2001 15:06:04 -0000	1.24
  +++ ossp-pkg/shtool/sh.install	2 Nov 2002 12:46:19 -0000	1.25
  @@ -20,12 +20,13 @@
   ##
   
   str_tool="install"
  -str_usage="[-v|--verbose] [-t|--trace] [-c|--copy] [-C|--compare-copy] [-s|--strip] [-m|--mode <mode>] [-o|--owner <owner>] [-g|--group <group>] [-e|--exec <sed-cmd>] <file> [<file> ...] <path>"
  -arg_spec="2+"
  -opt_spec="v.t.c.C.s.m:o:g:e+"
  -opt_alias="v:verbose,t:trace,c:copy,C:compare-copy,s:strip,m:mode,o:owner,g:group,e:exec"
  +str_usage="[-v|--verbose] [-t|--trace] [-d|--mkdir] [-c|--copy] [-C|--compare-copy] [-s|--strip] [-m|--mode <mode>] [-o|--owner <owner>] [-g|--group <group>] [-e|--exec <sed-cmd>] <file> [<file> ...] <path>"
  +arg_spec="1+"
  +opt_spec="v.t.d.c.C.s.m:o:g:e+"
  +opt_alias="v:verbose,t:trace,d:mkdir,c:copy,C:compare-copy,s:strip,m:mode,o:owner,g:group,e:exec"
   opt_v=no
   opt_t=no
  +opt_d=no
   opt_c=no
   opt_C=no
   opt_s=no
  @@ -35,6 +36,28 @@
   opt_e=""
   
   . ./sh.common
  +
  +#   special case: "shtool install -d <dir> [...]" internally
  +#   maps to "shtool mkdir -f -p -m 755 <dir> [...]"
  +if [ "$opt_d" = yes ]; then
  +    cmd="$0 mkdir -f -p -m 755"
  +    if [ ".$opt_o" != . ]; then
  +        cmd="$cmd -o '$opt_o'"
  +    fi
  +    if [ ".$opt_g" != . ]; then
  +        cmd="$cmd -g '$opt_g'"
  +    fi
  +    if [ ".$opt_v" = .yes ]; then
  +        cmd="$cmd -v"
  +    fi
  +    if [ ".$opt_t" = .yes ]; then
  +        cmd="$cmd -t"
  +    fi
  +    for dir in "$@"; do
  +        eval "$cmd $dir" || exit $?
  +    done
  +    exit 0
  +fi
   
   #   determine source(s) and destination
   argc=$#
  Index: ossp-pkg/shtool/shtool.pod
  ============================================================
  $ cvs diff -u -r1.60 -r1.61 shtool.pod
  --- ossp-pkg/shtool/shtool.pod	2 Nov 2002 12:35:56 -0000	1.60
  +++ ossp-pkg/shtool/shtool.pod	2 Nov 2002 12:46:19 -0000	1.61
  @@ -414,7 +414,7 @@
        lex scanner.l
        shtool move -t -p lex.yy.c scanner.c
   
  -=item B<install> [B<-v>|B<--verbose>] [B<-t>|B<--trace>] [B<-c>|B<--copy>] [B<-C>|B<--compare-copy>] [B<-s>|B<--strip>] [B<-m>|B<--mode> I<mode>] [B<-o>|B<--owner> I<owner>] [B<-g>|B<--group> I<group>] [B<-e>|B<--exec> I<sed-cmd>] I<file> I<path>
  +=item B<install> [B<-v>|B<--verbose>] [B<-t>|B<--trace>] [B<-c>|B<--copy>] [B<-C>|B<--compare-copy>] [B<-s>|B<--strip>] [B<-m>|B<--mode> I<mode>] [B<-o>|B<--owner> I<owner>] [B<-g>|B<--group> I<group>] [B<-e>|B<--exec> I<sed-cmd>] [B<-d>|B<--mkdir>] I<file> I<path>
   
   This command installs a program, script or datafile (dependent on I<mode>) in
   a portable way while providing all important options of the BSD install(1)
  @@ -434,7 +434,9 @@
   the output of the essential shell commands which are executed.
   
   The trick of this command is that it provides the functionality of BSD
  -install(1) in a portable emulated way.
  +install(1) in a portable emulated way. For even more compatibility,
  +the BSD "B<shtool> C<install -d>" usage is internally mapped to the
  +"B<shtool> C<mkdir -f -p -m 755>" command.
   
   Example:
   

From ossp-cvs-owner@ossp.org  Sat Nov  2 13:48:18 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9135B7643F; Sat,  2 Nov 2002 13:48:18 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool THANKS
Message-Id: <20021102124818.9135B7643F@mail.ossp.org>
Date: Sat,  2 Nov 2002 13:48:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Nov-2002 13:48:18
  Branch: HEAD                             Handle: 2002110212481800

  Modified files:
    ossp-pkg/shtool         THANKS

  Log:
    give proper credit

  Summary:
    Revision    Changes     Path
    1.25        +2  -0      ossp-pkg/shtool/THANKS
  ____________________________________________________________________________

  Index: ossp-pkg/shtool/THANKS
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 THANKS
  --- ossp-pkg/shtool/THANKS	7 Oct 2002 05:02:12 -0000	1.24
  +++ ossp-pkg/shtool/THANKS	2 Nov 2002 12:48:18 -0000	1.25
  @@ -13,6 +13,8 @@
     stuff, bugfixes, hints etc. (in alphabetical order):
   
     o Denis Barbier            <barbier@imacs.polytechnique.fr>
  +  o Marcus Boerger           <marcus.boerger@t-online.de>
  +  o Alan Eldridge            <alane@geeksrus.net>
     o Scott R. Every           <scott@emji.net>
     o Daniel Richard G.        <straker@MIT.EDU>
     o Dean Gaudet              <dgaudet@arctic.org>

From ossp-cvs-owner@ossp.org  Sat Nov  2 13:49:49 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1457F7643F; Sat,  2 Nov 2002 13:49:49 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool ChangeLog NEWS README VERSION shtool.spec
Message-Id: <20021102124949.1457F7643F@mail.ossp.org>
Date: Sat,  2 Nov 2002 13:49:49 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Nov-2002 13:49:48
  Branch: HEAD                             Handle: 2002110212494800

  Modified files:
    ossp-pkg/shtool         ChangeLog NEWS README VERSION shtool.spec

  Log:
    polish for release

  Summary:
    Revision    Changes     Path
    1.176       +1  -1      ossp-pkg/shtool/ChangeLog
    1.5         +3  -1      ossp-pkg/shtool/NEWS
    1.87        +1  -1      ossp-pkg/shtool/README
    1.65        +1  -1      ossp-pkg/shtool/VERSION
    1.16        +1  -1      ossp-pkg/shtool/shtool.spec
  ____________________________________________________________________________

  Index: ossp-pkg/shtool/ChangeLog
  ============================================================
  $ cvs diff -u -r1.175 -r1.176 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	2 Nov 2002 12:46:19 -0000	1.175
  +++ ossp-pkg/shtool/ChangeLog	2 Nov 2002 12:49:48 -0000	1.176
  @@ -9,7 +9,7 @@
   
    ChangeLog
   
  - Changes between 1.6.1 and 1.6.2 (12-Jul-2002 to xx-Oct-2002):
  + Changes between 1.6.1 and 1.6.2 (12-Jul-2002 to 02-Nov-2002):
   
      *) Map "shtool install -d <dir> [...]" internally to "shtool mkdir
         -f -p -m 755 <dir> [...]" in order to support the BSD-style
  Index: ossp-pkg/shtool/NEWS
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 NEWS
  --- ossp-pkg/shtool/NEWS	13 Jul 2002 18:13:58 -0000	1.4
  +++ ossp-pkg/shtool/NEWS	2 Nov 2002 12:49:48 -0000	1.5
  @@ -9,8 +9,10 @@
     This is a list of user-visible and/or major changes to GNU shtool.
     For more details please have a look at the ChangeLog file.
   
  -  Changes between 1.5 and 1.6 (14-Jun-2001 to 12-Jul-2002)
  +  Changes between 1.5 and 1.6 (14-Jun-2001 to 02-Nov-2002)
   
  +   *) Added `shtool install -d' variant.
  +   *) Added `shtool mkdir [-o] [-g]' variant.
      *) Added new `shtool subst' command.
      *) Added new `shtool rotate' command.
      *) Added GNU long-option support (`--xxxx').
  Index: ossp-pkg/shtool/README
  ============================================================
  $ cvs diff -u -r1.86 -r1.87 README
  --- ossp-pkg/shtool/README	13 Jul 2002 18:13:58 -0000	1.86
  +++ ossp-pkg/shtool/README	2 Nov 2002 12:49:48 -0000	1.87
  @@ -10,7 +10,7 @@
     http://www.gnu.org/software/shtool/
     ftp://ftp.gnu.org/gnu/shtool/
   
  -  Version 1.6.1 (12-Jul-2002)
  +  Version 1.6.2 (02-Nov-2002)
   
     The GNU shtool program is a compilation of small but very stable and
     portable shell scripts into a single shell tool. All ingredients
  Index: ossp-pkg/shtool/VERSION
  ============================================================
  $ cvs diff -u -r1.64 -r1.65 VERSION
  --- ossp-pkg/shtool/VERSION	13 Jul 2002 18:13:58 -0000	1.64
  +++ ossp-pkg/shtool/VERSION	2 Nov 2002 12:49:48 -0000	1.65
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for GNU shtool (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is GNU shtool, Version 1.6.1 (12-Jul-2002)
  +  This is GNU shtool, Version 1.6.2 (02-Nov-2002)
   
  Index: ossp-pkg/shtool/shtool.spec
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 shtool.spec
  --- ossp-pkg/shtool/shtool.spec	11 Jul 2002 17:23:25 -0000	1.15
  +++ ossp-pkg/shtool/shtool.spec	2 Nov 2002 12:49:48 -0000	1.16
  @@ -30,7 +30,7 @@
   %define prefix /usr/local
   %endif
   
  -%define ver 1.6.1
  +%define ver 1.6.2
   %define rel 0
   
   Name:       shtool

From ossp-cvs-owner@ossp.org  Sat Nov  2 14:03:25 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 789C1763B1; Sat,  2 Nov 2002 14:03:24 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new news.txt ossp-web/pkg/tool index.wml ossp-web...
Message-Id: <20021102130324.789C1763B1@mail.ossp.org>
Date: Sat,  2 Nov 2002 14:03:24 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   02-Nov-2002 14:03:24
  Branch: HEAD                             Handle: 2002110213032202

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/shtool index.wml

  Log:
    release OSSP/GNU shtool 1.6.2

  Summary:
    Revision    Changes     Path
    1.30        +1  -0      ossp-web/new/news.txt
    1.19        +1  -1      ossp-web/pkg/tool/index.wml
    1.9         +2  -2      ossp-web/pkg/tool/shtool/index.wml
  ____________________________________________________________________________

  Index: ossp-web/new/news.txt
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 news.txt
  --- ossp-web/new/news.txt	1 Nov 2002 08:59:14 -0000	1.29
  +++ ossp-web/new/news.txt	2 Nov 2002 13:03:22 -0000	1.30
  @@ -1,3 +1,4 @@
  +02-Nov-2002: Released T<OSSP shtool> 1.6.2
   01-Nov-2002: Released L<OSSP sa> 1.0.0
   30-Oct-2002: Released L<OSSP sa> 0.9.3
   21-Oct-2002: Released L<OSSP fsl> 1.0.5
  Index: ossp-web/pkg/tool/index.wml
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 index.wml
  --- ossp-web/pkg/tool/index.wml	19 Aug 2002 19:15:06 -0000	1.18
  +++ ossp-web/pkg/tool/index.wml	2 Nov 2002 13:03:23 -0000	1.19
  @@ -14,7 +14,7 @@
   <pkg_list>
     <pkg_item name="shtool" longname="GNU shtool" type="tool"
               desc="Portable Shell Tool"
  -		    done=100 stable="1.6.1" unstable=none>
  +		    done=100 stable="1.6.2" unstable=none>
     <pkg_item name="lmtp2nntp" longname="OSSP lmtp2nntp" type="tool"
               desc="Real-Time Mail to News Gateway"
               done=100 stable="1.1.1" unstable=1.2a6>
  Index: ossp-web/pkg/tool/shtool/index.wml
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 index.wml
  --- ossp-web/pkg/tool/shtool/index.wml	2 Oct 2002 12:46:19 -0000	1.8
  +++ ossp-web/pkg/tool/shtool/index.wml	2 Nov 2002 13:03:24 -0000	1.9
  @@ -40,7 +40,7 @@
   
   <pkg_status
       name="shtool" assign="rse"
  -    stable="1.6.1"   stable_date="12-Jul-2002"
  +    stable="1.6.2"   stable_date="02-Nov-2002"
       unstable="none"  unstable_date="none"
   	done=100>
   
  @@ -51,7 +51,7 @@
       url=$(FTP_ROOT_URL)/pkg/tool/shtool/
       directory=$(FTP_ROOT_DIR)/pkg/tool/shtool/
       files="shtool-*.tar.gz" 
  -	stable="shtool-1.6.1.tar.gz" unstable="none">
  +	stable="shtool-1.6.2.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   

From ossp-cvs-owner@ossp.org  Sat Nov  2 14:10:00 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CF8C9763B1; Sat,  2 Nov 2002 14:09:59 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth devtool.conf
Message-Id: <20021102130959.CF8C9763B1@mail.ossp.org>
Date: Sat,  2 Nov 2002 14:09:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Nov-2002 14:09:59
  Branch: HEAD                             Handle: 2002110213095900

  Modified files:
    ossp-pkg/pth            devtool.conf

  Log:
    upgrade to shtool 1.6.2

  Summary:
    Revision    Changes     Path
    1.9         +1  -1      ossp-pkg/pth/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/pth/devtool.conf
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 devtool.conf
  --- ossp-pkg/pth/devtool.conf	29 Oct 2002 17:51:28 -0000	1.8
  +++ ossp-pkg/pth/devtool.conf	2 Nov 2002 13:09:59 -0000	1.9
  @@ -3,7 +3,7 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.1 "1.6.*" echo version scpp mkdir install fixperm tarball
  +    @autogen shtool   1.6.2 "1.6.*" echo version scpp mkdir install fixperm tarball
       @autogen libtool  1.4.3 "1.4*"
       @autogen autoconf 2.54  "2.5*"
   

From ossp-cvs-owner@ossp.org  Sun Nov  3 10:24:43 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4D0D576449; Sun,  3 Nov 2002 10:24:43 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth test_mp.c test_pthread.c test_select.c test_s...
Message-Id: <20021103092443.4D0D576449@mail.ossp.org>
Date: Sun,  3 Nov 2002 10:24:43 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Nov-2002 10:24:43
  Branch: HEAD                             Handle: 2002110309244200

  Modified files:
    ossp-pkg/pth            test_mp.c test_pthread.c test_select.c test_std.c

  Log:
    add a bunch of cookies

  Summary:
    Revision    Changes     Path
    1.41        +2  -1      ossp-pkg/pth/test_mp.c
    1.14        +3  -1      ossp-pkg/pth/test_pthread.c
    1.15        +2  -1      ossp-pkg/pth/test_select.c
    1.17        +4  -1      ossp-pkg/pth/test_std.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/test_mp.c
  ============================================================
  $ cvs diff -u -r1.40 -r1.41 test_mp.c
  --- ossp-pkg/pth/test_mp.c	27 Jan 2002 11:03:41 -0000	1.40
  +++ ossp-pkg/pth/test_mp.c	3 Nov 2002 09:24:42 -0000	1.41
  @@ -22,7 +22,8 @@
   **
   **  test_mp.c: Pth test program (message port handling)
   */
  -
  +                             /* ``Failure is not an option.
  +                                It comes bundled with software.'' */
   #include <stdio.h>
   #include <stdlib.h>
   #include <string.h>
  Index: ossp-pkg/pth/test_pthread.c
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 test_pthread.c
  --- ossp-pkg/pth/test_pthread.c	27 Jan 2002 11:03:41 -0000	1.13
  +++ ossp-pkg/pth/test_pthread.c	3 Nov 2002 09:24:42 -0000	1.14
  @@ -22,7 +22,9 @@
   **
   **  test_pthread.c: Pth test program (pthread API)
   */
  -
  +                             /* ``You can check out any time you
  +                                like, but you can never leave.''
  +                                -- The Eagles, Hotel California */
   #ifdef GLOBAL
   #include <pthread.h>
   #else
  Index: ossp-pkg/pth/test_select.c
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 test_select.c
  --- ossp-pkg/pth/test_select.c	27 Jan 2002 11:03:41 -0000	1.14
  +++ ossp-pkg/pth/test_select.c	3 Nov 2002 09:24:42 -0000	1.15
  @@ -22,7 +22,8 @@
   **
   **  test_select.c: Pth test program (select)
   */
  -
  +                             /* ``Most computer problems are located
  +                                between the keyboard and the chair.'' */
   #include <stdio.h>
   #include <stdlib.h>
   #include <string.h>
  Index: ossp-pkg/pth/test_std.c
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 test_std.c
  --- ossp-pkg/pth/test_std.c	27 Jan 2002 11:03:41 -0000	1.16
  +++ ossp-pkg/pth/test_std.c	3 Nov 2002 09:24:42 -0000	1.17
  @@ -22,7 +22,10 @@
   **
   **  test_std.c: Pth standard test program
   */
  -
  +                             /* ``Understanding a problem is knowing why
  +                                it is hard to solve it, and why the most
  +                                straightforward approaches won't work.''
  +                                                  -- Karl Popper        */
   #include <stdio.h>
   #include <stdlib.h>
   #include <string.h>

From ossp-cvs-owner@ossp.org  Sun Nov  3 10:59:34 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E997D76449; Sun,  3 Nov 2002 10:59:33 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth .cvsignore ChangeLog Makefile.in pth.h.in pth...
Message-Id: <20021103095933.E997D76449@mail.ossp.org>
Date: Sun,  3 Nov 2002 10:59:33 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Nov-2002 10:59:33
  Branch: HEAD                             Handle: 2002110309593201

  Added files:
    ossp-pkg/pth            pth_uctx.c test_uctx.c
  Modified files:
    ossp-pkg/pth            .cvsignore ChangeLog Makefile.in pth.h.in pth.pod

  Log:
    Added a stand-alone sub-API for manual user-space context switching.
    It is somewhat modeled after the POSIX ucontext(3) facility and
    consists of an opaque data type pth_uctx_t and the management functions
    pth_uctx_create(), pth_uctx_make(), pth_uctx_save(), pth_uctx_restore(),
    pth_uctx_switch() and pth_uctx_destroy(). These functions are based on
    the same underlying machine context switching facility (pth_mctx) the
    threads in GNU Pth are using. This facility can be used to implement
    co-routines without a full real multithreading environment or even to
    implement an own multithreading environment.

  Summary:
    Revision    Changes     Path
    1.21        +1  -0      ossp-pkg/pth/.cvsignore
    1.583       +13 -0      ossp-pkg/pth/ChangeLog
    1.148       +11 -4      ossp-pkg/pth/Makefile.in
    1.135       +12 -0      ossp-pkg/pth/pth.h.in
    1.158       +89 -0      ossp-pkg/pth/pth.pod
    1.1         +235 -0     ossp-pkg/pth/pth_uctx.c
    1.1         +151 -0     ossp-pkg/pth/test_uctx.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/.cvsignore
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 .cvsignore
  --- ossp-pkg/pth/.cvsignore	30 Jan 2002 13:05:22 -0000	1.20
  +++ ossp-pkg/pth/.cvsignore	3 Nov 2002 09:59:32 -0000	1.21
  @@ -36,5 +36,6 @@
   test_pthread
   test_select
   test_sfio
  +test_uctx
   test_sig
   test_std
  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.582 -r1.583 ChangeLog
  --- ossp-pkg/pth/ChangeLog	25 Oct 2002 11:56:16 -0000	1.582
  +++ ossp-pkg/pth/ChangeLog	3 Nov 2002 09:59:32 -0000	1.583
  @@ -21,6 +21,19 @@
   
     Changes between 1.4.1 and 1.5.0 (27-Jan-2002 to xx-Oct-2002)
   
  +   *) Added a stand-alone sub-API for manual user-space context
  +      switching. It is somewhat modeled after the POSIX ucontext(3)
  +      facility and consists of an opaque data type pth_uctx_t and
  +      the management functions pth_uctx_create(), pth_uctx_make(),
  +      pth_uctx_save(), pth_uctx_restore(), pth_uctx_switch() and
  +      pth_uctx_destroy(). These functions are based on the same
  +      underlying machine context switching facility (pth_mctx)
  +      the threads in GNU Pth are using. This facility can be used
  +      to implement co-routines without a full real multithreading
  +      environment or even to implement an own multithreading
  +      environment.
  +      [Ralf S. Engelschall]
  +
      *) Add a Pth variant of the new POSIX pselect(2) function, including
         soft and hard syscall mapping support for it.
         [Ralf S. Engelschall]
  Index: ossp-pkg/pth/Makefile.in
  ============================================================
  $ cvs diff -u -r1.147 -r1.148 Makefile.in
  --- ossp-pkg/pth/Makefile.in	15 Oct 2002 20:34:22 -0000	1.147
  +++ ossp-pkg/pth/Makefile.in	3 Nov 2002 09:59:32 -0000	1.148
  @@ -88,19 +88,19 @@
   TARGET_LIBS = libpth.la @LIBPTHREAD_LA@
   TARGET_MANS = $(S)pth-config.1 $(S)pth.3 @PTHREAD_CONFIG_1@ @PTHREAD_3@
   TARGET_TEST = test_std test_mp test_misc test_philo test_sig \
  -              test_select test_httpd test_sfio @TEST_PTHREAD@
  +              test_select test_httpd test_sfio test_uctx @TEST_PTHREAD@
   
   #   object files for library generation
   #   (order is just aesthically important)
  -LOBJS = pth_debug.lo pth_ring.lo pth_pqueue.lo pth_time.lo pth_errno.lo \
  -        pth_mctx.lo pth_tcb.lo pth_sched.lo pth_attr.lo pth_lib.lo pth_event.lo \
  +LOBJS = pth_debug.lo pth_ring.lo pth_pqueue.lo pth_time.lo pth_errno.lo pth_mctx.lo \
  +        pth_uctx.lo pth_tcb.lo pth_sched.lo pth_attr.lo pth_lib.lo pth_event.lo \
           pth_data.lo pth_clean.lo pth_cancel.lo pth_msg.lo pth_sync.lo pth_fork.lo \
           pth_util.lo pth_high.lo pth_syscall.lo pth_ext.lo pth_compat.lo pth_string.lo
   
   #   source files for header generation
   #   (order is important and has to follow dependencies in pth_p.h)
   HSRCS = $(S)pth_compat.c $(S)pth_debug.c $(S)pth_syscall.c $(S)pth_errno.c $(S)pth_ring.c $(S)pth_mctx.c \
  -        $(S)pth_clean.c $(S)pth_time.c $(S)pth_tcb.c $(S)pth_util.c $(S)pth_pqueue.c $(S)pth_event.c \
  +        $(S)pth_uctx.c $(S)pth_clean.c $(S)pth_time.c $(S)pth_tcb.c $(S)pth_util.c $(S)pth_pqueue.c $(S)pth_event.c \
           $(S)pth_sched.c $(S)pth_data.c $(S)pth_msg.c $(S)pth_cancel.c $(S)pth_sync.c $(S)pth_attr.c $(S)pth_lib.c \
           $(S)pth_fork.c $(S)pth_high.c $(S)pth_ext.c $(S)pth_string.c
   
  @@ -209,6 +209,8 @@
   	$(LIBTOOL) --mode=link --quiet $(CC) $(LDFLAGS) -o test_select test_select.o test_common.o libpth.la $(LIBS)
   test_sfio: test_sfio.o test_common.o libpth.la
   	$(LIBTOOL) --mode=link --quiet $(CC) $(LDFLAGS) -o test_sfio test_sfio.o test_common.o libpth.la $(LIBS)
  +test_uctx: test_uctx.o test_common.o libpth.la
  +	$(LIBTOOL) --mode=link --quiet $(CC) $(LDFLAGS) -o test_uctx test_uctx.o test_common.o libpth.la $(LIBS)
   test_pthread: test_pthread.o test_common.o libpthread.la
   	$(LIBTOOL) --mode=link --quiet $(CC) $(LDFLAGS) -o test_pthread test_pthread.o test_common.o libpthread.la $(LIBS)
   
  @@ -371,6 +373,8 @@
   	./test_select
   test-sfio: test_sfio
   	./test_sfio
  +test-uctx: test_uctx
  +	./test_uctx
   test-pthread: test_pthread
   	./test_pthread
   debug: debug-std
  @@ -390,6 +394,8 @@
   	TEST=test_select && $(_DEBUG)
   debug-sfio: test_sfio
   	TEST=test_sfio && $(_DEBUG)
  +debug-uctx: test_uctx
  +	TEST=test_uctx && $(_DEBUG)
   debug-pthread: test_pthread
   	TEST=test_pthread && $(_DEBUG)
   
  @@ -445,5 +451,6 @@
   test_pthread.o: test_pthread.c pthread.h
   test_select.o: test_select.c pth.h
   test_sfio.o: test_sfio.c pth.h
  +test_uctx.o: test_uctx.c pth.h
   test_sig.o: test_sig.c pth.h
   test_std.o: test_std.c pth.h
  Index: ossp-pkg/pth/pth.h.in
  ============================================================
  $ cvs diff -u -r1.134 -r1.135 pth.h.in
  --- ossp-pkg/pth/pth.h.in	25 Oct 2002 11:56:16 -0000	1.134
  +++ ossp-pkg/pth/pth.h.in	3 Nov 2002 09:59:32 -0000	1.135
  @@ -306,6 +306,10 @@
       pth_mutex_t   br_mutex;
   };
   
  +    /* the user-space context structure */
  +typedef struct pth_uctx_st *pth_uctx_t;
  +struct pth_uctx_st;
  +
       /* filedescriptor blocking modes */
   enum {
       PTH_FDMODE_ERROR = -1,
  @@ -474,6 +478,14 @@
   extern int            pth_cond_notify(pth_cond_t *, int);
   extern int            pth_barrier_init(pth_barrier_t *, int);
   extern int            pth_barrier_reach(pth_barrier_t *);
  +
  +    /* user-space context functions */
  +extern int            pth_uctx_create(pth_uctx_t *);
  +extern int            pth_uctx_make(pth_uctx_t, char *, size_t, const sigset_t *, void (*)(void *), void *, pth_uctx_t);
  +extern int            pth_uctx_save(pth_uctx_t);
  +extern int            pth_uctx_restore(pth_uctx_t);
  +extern int            pth_uctx_switch(pth_uctx_t, pth_uctx_t);
  +extern int            pth_uctx_destroy(pth_uctx_t);
   
       /* extension functions */
   extern Sfdisc_t      *pth_sfiodisc(void);
  Index: ossp-pkg/pth/pth.pod
  ============================================================
  $ cvs diff -u -r1.157 -r1.158 pth.pod
  --- ossp-pkg/pth/pth.pod	25 Oct 2002 11:56:16 -0000	1.157
  +++ ossp-pkg/pth/pth.pod	3 Nov 2002 09:59:33 -0000	1.158
  @@ -138,6 +138,15 @@
   pth_barrier_init,
   pth_barrier_reach.
   
  +=item B<User-Space Context>
  +
  +pth_uctx_create,
  +pth_uctx_make,
  +pth_uctx_save,
  +pth_uctx_restore,
  +pth_uctx_switch,
  +pth_uctx_destroy.
  +
   =item B<Generalized POSIX Replacement API>
   
   pth_sigwait_ev,
  @@ -1461,6 +1470,86 @@
   the first nor the last thread; C<PTH_BARRIER_HEADLIGHT> for the thread which
   reached the barrier as the first thread and C<PTH_BARRIER_TAILLIGHT> for the
   thread which reached the barrier as the last thread.
  +
  +=back
  +
  +=head2 User-Space Context
  +
  +The following functions provide a stand-alone sub-API for user-space
  +context switching. It internally is based on the same underlying machine
  +context switching mechanism the threads in B<GNU Pth> are based on.
  +Hence these functions you can use for implementing your own simple
  +user-space threads. The C<pth_uctx_t> context is somewhat modeled after
  +POSIX ucontext(3).
  +
  +The time required to create (via pth_uctx_make(3)) a user-space context
  +can range from just a few microseconds up to a more dramatical time
  +(depending on the machine context switching method which is available on
  +the platform). On the other hand, the raw performance in switching the
  +user-space contexts is always very good (nearly independent of the used
  +machine context switching method). For instance, on an Intel Pentium-III
  +CPU with 800Mhz running under FreeBSD 4 one usually achieves about
  +260,000 user-space context switches (via pth_uctx_switch(3)) per second.
  +
  +=over 4
  +
  +=item int B<pth_uctx_create>(pth_uctx_t *I<uctx>);
  +
  +This function creates a user-space context and stores it into I<uctx>.
  +There is still no underlying user-space context configured. You still
  +have to do this with pth_uctx_make(3) or pth_uctx_set(3). On success,
  +this function returns C<TRUE>, else C<FALSE>.
  +
  +=item int B<pth_uctx_make>(pth_uctx_t I<uctx>, char *I<sk_addr>, size_t I<sk_size>, const sigset_t *I<sigmask>, void (*I<start_func>)(void *), void *I<start_arg>, pth_uctx_t I<uctx_after>);
  +
  +This function makes a new user-space context in I<uctx> which will
  +operate on the run-time stack I<sk_addr> (which is of maximum
  +size I<sk_size>), with the signals in I<sigmask> blocked (if
  +I<sigmask> is not C<NULL>) and starting to execute with the call
  +I<start_func>(I<start_arg>). If I<sk_addr> is C<NULL>, a stack
  +is dynamically allocated. The stack size I<sk_size> has to be at
  +least 16384 (16KB). If the start function I<start_func> returns and
  +I<uctx_after> is not C<NULL>, an implicit user-space context switch
  +to this context is performed. Else (if I<uctx_after> is C<NULL>) the
  +process is terminated with exit(3). This function is somewhat modeled
  +after POSIX makecontext(3). On success, this function returns C<TRUE>,
  +else C<FALSE>.
  +
  +=item int B<pth_uctx_save>(pth_uctx_t I<uctx>);
  +
  +This function saves the current user-space context in I<uctx> for later
  +restoring by either pth_uctx_restore(3) or pth_uctx_switch(3). This
  +function is somewhat modeled after POSIX getcontext(3). If I<uctx> is
  +C<NULL>, C<FALSE> is returned instead of C<TRUE>. This is the only error
  +possible.
  +
  +=item int B<pth_uctx_restore>(pth_uctx_t I<uctx>);
  +
  +This function restores the current user-space context from I<uctx>,
  +which previously had to be set with either pth_uctx_make(3) or
  +pth_uctx_save(3). This function is somewhat modeled after POSIX
  +setcontext(3). If I<uctx> is C<NULL> or I<uctx> contains no valid
  +user-space context, C<FALSE> is returned instead of C<TRUE>. These are
  +the only errors possible.
  +
  +=item int B<pth_uctx_switch>(pth_uctx_t I<uctx_from>, pth_uctx_t I<uctx_to>);
  +
  +This function saves the current user-space context in I<uctx_from> for
  +later restoring by either pth_uctx_restore(3) or pth_uctx_switch(3) and
  +restores the new user-space context from I<uctx>, which previously
  +had to be set with either pth_uctx_make(3) or pth_uctx_save(3). This
  +function is somewhat modeled after POSIX swapcontext(3). If I<uctx_from>
  +or I<uctx_to> are C<NULL> or if I<uctx_to> contains no valid user-space
  +context, C<FALSE> is returned instead of C<TRUE>. These are the only
  +errors possible.
  +
  +=item int B<pth_uctx_destroy>(pth_uctx_t I<uctx>);
  +
  +This function destroys the user-space context in I<uctx>. The run-time
  +stack associated with the user-space context is deallocated only if it
  +was given by the application (see I<sk_addr> of pth_uctx_create(3)).
  +If I<uctx> is C<NULL>, C<FALSE> is returned instead of C<TRUE>. This
  +is the only error possible.
   
   =back
   
  Index: ossp-pkg/pth/pth_uctx.c
  ============================================================
  $ cvs update -p -r1.1 pth_uctx.c
  /*
  **  GNU Pth - The GNU Portable Threads
  **  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  **
  **  This file is part of GNU Pth, a non-preemptive thread scheduling
  **  library which can be found at http://www.gnu.org/software/pth/.
  **
  **  This library is free software; you can redistribute it and/or
  **  modify it under the terms of the GNU Lesser General Public
  **  License as published by the Free Software Foundation; either
  **  version 2.1 of the License, or (at your option) any later version.
  **
  **  This library is distributed in the hope that it will be useful,
  **  but WITHOUT ANY WARRANTY; without even the implied warranty of
  **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  **  Lesser General Public License for more details.
  **
  **  You should have received a copy of the GNU Lesser General Public
  **  License along with this library; if not, write to the Free Software
  **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  **  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  **
  **  pth_uctx.c: Pth user-space context handling (stand-alone sub-API)
  */
                               /* ``It worries me however, to realize
                                  how tough an ass-hole I have had to
                                  be, in order to get to stick to the
                                  principle of doing things right,
                                  rather than "just hack it in".''
                                  -- Poul-Henning Kamp <phk@FreeBSD.org> */
  #include "pth_p.h"
  
  /* user-space context structure */
  struct pth_uctx_st {
      int         uc_stack_own; /* whether stack were allocated by us */
      char       *uc_stack_ptr; /* pointer to start address of stack area */
      size_t      uc_stack_len; /* size of stack area */
      int         uc_mctx_set;  /* whether uc_mctx is set */
      pth_mctx_t  uc_mctx;      /* saved underlying machine context */
  };
  
  /* create user-space context structure */
  int
  pth_uctx_create(
      pth_uctx_t *puctx)
  {
      pth_uctx_t uctx;
  
      /* argument sanity checking */
      if (puctx == NULL)
          return pth_error(FALSE, EINVAL);
  
      /* allocate the context structure */
      if ((uctx = (pth_uctx_t)malloc(sizeof(struct pth_uctx_st))) == NULL)
          return pth_error(FALSE, errno);
  
      /* initialize the context structure */
      uctx->uc_stack_own = FALSE;
      uctx->uc_stack_ptr = NULL;
      uctx->uc_stack_len = 0;
      uctx->uc_mctx_set  = FALSE;
      memset((void *)&uctx->uc_mctx, 0, sizeof(pth_mctx_t));
  
      /* pass result to caller */
      *puctx = uctx;
  
      return TRUE;
  }
  
  /* trampoline context */
  typedef struct {
      pth_mctx_t *mctx_parent;
      pth_uctx_t  uctx_this;
      pth_uctx_t  uctx_after;
      void      (*start_func)(void *);
      void       *start_arg;
  } pth_uctx_trampoline_t;
  pth_uctx_trampoline_t pth_uctx_trampoline_ctx;
  
  /* trampoline function for pth_uctx_make() */
  static void pth_uctx_trampoline(void)
  {
      volatile pth_uctx_trampoline_t ctx;
  
      /* move context information from global to local storage */
      ctx.mctx_parent = pth_uctx_trampoline_ctx.mctx_parent;
      ctx.uctx_this   = pth_uctx_trampoline_ctx.uctx_this;
      ctx.uctx_after  = pth_uctx_trampoline_ctx.uctx_after;
      ctx.start_func  = pth_uctx_trampoline_ctx.start_func;
      ctx.start_arg   = pth_uctx_trampoline_ctx.start_arg;
  
      /* switch back to parent */
      pth_mctx_switch(&(ctx.uctx_this->uc_mctx), ctx.mctx_parent);
  
      /* enter start function */
      (*ctx.start_func)(ctx.start_arg);
  
      /* switch to successor user-space context */
      if (ctx.uctx_after != NULL)
          pth_uctx_restore(ctx.uctx_after);
  
      /* terminate process (the only reasonable thing to do here) */
      exit(0);
  
      /* NOTREACHED */
      return;
  }
  
  /* make setup of user-space context structure */
  int
  pth_uctx_make(
      pth_uctx_t uctx,
      char *sk_addr, size_t sk_size,
      const sigset_t *sigmask,
      void (*start_func)(void *), void *start_arg,
      pth_uctx_t uctx_after)
  {
      pth_mctx_t mctx_parent;
      sigset_t ss;
  
      /* argument sanity checking */
      if (uctx == NULL || start_func == NULL || sk_size < 16*1024)
          return pth_error(FALSE, EINVAL);
  
      /* configure run-time stack */
      if (sk_addr == NULL) {
          if ((sk_addr = (char *)malloc(sk_size)) == NULL)
              return pth_error(FALSE, errno);
          uctx->uc_stack_own = TRUE;
      }
      else
          uctx->uc_stack_own = FALSE;
      uctx->uc_stack_ptr = sk_addr;
      uctx->uc_stack_len = sk_size;
  
      /* configure the underlying machine context */
      if (!pth_mctx_set(&uctx->uc_mctx, pth_uctx_trampoline,
                        uctx->uc_stack_ptr, uctx->uc_stack_ptr+uctx->uc_stack_len))
          return pth_error(FALSE, errno);
  
      /* move context information into global storage for the trampoline jump */
      pth_uctx_trampoline_ctx.mctx_parent = &mctx_parent;
      pth_uctx_trampoline_ctx.uctx_this   = uctx;
      pth_uctx_trampoline_ctx.uctx_after  = uctx_after;
      pth_uctx_trampoline_ctx.start_func  = start_func;
      pth_uctx_trampoline_ctx.start_arg   = start_arg;
  
      /* optionally establish temporary signal mask */
      if (sigmask != NULL)
          sigprocmask(SIG_SETMASK, sigmask, &ss);
  
      /* perform the trampoline step */
      pth_mctx_switch(&mctx_parent, &uctx->uc_mctx);
  
      /* optionally restore original signal mask */
      if (sigmask != NULL)
          sigprocmask(SIG_SETMASK, &ss, NULL);
  
      /* finally flag that the context is now configured */
      uctx->uc_mctx_set = TRUE;
  
      return TRUE;
  }
  
  /* save current user-space context */
  int
  pth_uctx_save(
      pth_uctx_t uctx)
  {
      /* argument sanity checking */
      if (uctx == NULL)
          return pth_error(FALSE, EINVAL);
  
      /* save underlying machine context */
      pth_mctx_save(&uctx->uc_mctx);
      uctx->uc_mctx_set = TRUE;
  
      return TRUE;
  }
  
  /* restore current user-space context */
  int
  pth_uctx_restore(
      pth_uctx_t uctx)
  {
      /* argument sanity checking */
      if (uctx == NULL)
          return pth_error(FALSE, EINVAL);
      if (!(uctx->uc_mctx_set))
          return pth_error(FALSE, EPERM);
  
      /* restore underlying machine context */
      pth_mctx_restore(&uctx->uc_mctx);
  
      return TRUE;
  }
  
  /* switch from current to other user-space context */
  int
  pth_uctx_switch(
      pth_uctx_t uctx_from,
      pth_uctx_t uctx_to)
  {
      /* argument sanity checking */
      if (uctx_from == NULL || uctx_to == NULL)
          return pth_error(FALSE, EINVAL);
      if (!(uctx_to->uc_mctx_set))
          return pth_error(FALSE, EPERM);
  
      /* switch underlying machine context */
      uctx_from->uc_mctx_set = TRUE;
      pth_mctx_switch(&uctx_from->uc_mctx, &uctx_to->uc_mctx);
  
      return TRUE;
  }
  
  /* destroy user-space context structure */
  int
  pth_uctx_destroy(
      pth_uctx_t uctx)
  {
      /* argument sanity checking */
      if (uctx == NULL)
          return pth_error(FALSE, EINVAL);
  
      /* deallocate dynamically allocated stack */
      if (uctx->uc_stack_own && uctx->uc_stack_ptr != NULL)
          free(uctx->uc_stack_ptr);
  
      /* deallocate context structure */
      free(uctx);
  
      return TRUE;
  }
  
  Index: ossp-pkg/pth/test_uctx.c
  ============================================================
  $ cvs update -p -r1.1 test_uctx.c
  /*
  **  GNU Pth - The GNU Portable Threads
  **  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  **
  **  This file is part of GNU Pth, a non-preemptive thread scheduling
  **  library which can be found at http://www.gnu.org/software/pth/.
  **
  **  This library is free software; you can redistribute it and/or
  **  modify it under the terms of the GNU Lesser General Public
  **  License as published by the Free Software Foundation; either
  **  version 2.1 of the License, or (at your option) any later version.
  **
  **  This library is distributed in the hope that it will be useful,
  **  but WITHOUT ANY WARRANTY; without even the implied warranty of
  **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  **  Lesser General Public License for more details.
  **
  **  You should have received a copy of the GNU Lesser General Public
  **  License along with this library; if not, write to the Free Software
  **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  **  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  **
  **  test_uctx.c: Pth test program (user-space context switching)
  */
                               /* ``Engineering does not require science.
                                  Science helps a lot, but people built
                                  perfectly good brick walls long before
                                  they knew why cement works.''
                                                          -- Alan Cox */
  #include <stdio.h>
  #include <time.h>
  
  #include "pth.h"
  
  volatile pth_uctx_t uctx[10];
  
  /*
   *  Test 1: master and worker "threads"
   */
  
  volatile int worker_done[10];
  
  static void worker(void *ctx)
  {
      volatile int n = (int)ctx;
      volatile int i = 0;
  
      fprintf(stderr, "worker #%d: enter\n", n);
      for (i = 0; i < 100; i++) {
          fprintf(stderr, "worker #%d: working (step %d)\n", n, i);
          pth_uctx_switch(uctx[n], uctx[0]);
      }
      worker_done[n] = TRUE;
      fprintf(stderr, "worker #%d: exit\n", n);
      return;
  }
  
  static void test_working(void)
  {
      volatile int i;
      volatile int todo;
  
      fprintf(stderr, "master: startup\n");
  
      fprintf(stderr, "master: create contexts\n");
      pth_uctx_create((pth_uctx_t *)&uctx[0]);
      worker_done[0] = FALSE;
      for (i = 1; i < 10; i++) {
          worker_done[i] = FALSE;
          pth_uctx_create((pth_uctx_t *)&uctx[i]);
          pth_uctx_make(uctx[i], NULL, 32*1024, NULL, worker, (void *)i, uctx[0]);
      }
  
      do {
          todo = 0;
          for (i = 1; i < 10; i++) {
              if (!worker_done[i]) {
                  fprintf(stderr, "master: switching to worker #%d\n", i);
                  pth_uctx_switch(uctx[0], uctx[i]);
                  fprintf(stderr, "master: came back from worker #%d\n", i);
                  todo = 1;
              }
          }
      } while (todo);
  
      fprintf(stderr, "master: destroy contexts\n");
      for (i = 1; i < 10; i++)
          pth_uctx_destroy(uctx[i]);
      pth_uctx_destroy(uctx[0]);
  
      fprintf(stderr, "master: exit\n");
      return;
  }
  
  /*
   *  Test 2: raw switching performance
   */
  
  #define DO_SWITCHES 10000000
  
  time_t       stat_start;
  time_t       stat_end;
  volatile int stat_switched;
  
  static void dummy(void *ctx)
  {
      while (1) {
          stat_switched++;
          pth_uctx_switch(uctx[1], uctx[0]);
      }
      return;
  }
  
  static void test_performance(void)
  {
      volatile int i;
  
      pth_uctx_create((pth_uctx_t *)&uctx[0]);
      pth_uctx_create((pth_uctx_t *)&uctx[1]);
      pth_uctx_make(uctx[1], NULL, 32*1024, NULL, dummy, NULL, uctx[0]);
  
      fprintf(stderr, "\n");
      fprintf(stderr, "Performing %d user-space context switches... "
              "be patient!\n", DO_SWITCHES);
  
      stat_start = time(NULL);
      stat_switched = 0;
      for (i = 0; i < DO_SWITCHES; i++) {
          stat_switched++;
          pth_uctx_switch(uctx[0], uctx[1]);
      }
      stat_end = time(NULL);
  
      pth_uctx_destroy(uctx[0]);
      pth_uctx_destroy(uctx[1]);
  
      fprintf(stderr, "We required %d seconds for performing the test, "
              "so this means we can\n", (int)(stat_end-stat_start));
      fprintf(stderr, "perform %d user-space context switches per second "
              "on this platform.\n", DO_SWITCHES/(int)(stat_end-stat_start));
      fprintf(stderr, "\n");
      return;
  }
  
  int main(int argc, char *argv[])
  {
      test_working();
      test_performance();
      return 0;
  }
  

From ossp-cvs-owner@ossp.org  Sun Nov  3 11:04:36 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4206A7643F; Sun,  3 Nov 2002 11:04:36 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth THANKS
Message-Id: <20021103100436.4206A7643F@mail.ossp.org>
Date: Sun,  3 Nov 2002 11:04:36 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Nov-2002 11:04:36
  Branch: HEAD                             Handle: 2002110310043500

  Modified files:
    ossp-pkg/pth            THANKS

  Log:
    give proper credit for triggering the pth_uctx_xx implementation

  Summary:
    Revision    Changes     Path
    1.90        +1  -0      ossp-pkg/pth/THANKS
  ____________________________________________________________________________

  Index: ossp-pkg/pth/THANKS
  ============================================================
  $ cvs diff -u -r1.89 -r1.90 THANKS
  --- ossp-pkg/pth/THANKS	20 Oct 2002 17:52:27 -0000	1.89
  +++ ossp-pkg/pth/THANKS	3 Nov 2002 10:04:35 -0000	1.90
  @@ -71,6 +71,7 @@
       o  Xhemil Meco                 <xmeco@isdnet.net>
       o  Aaron Metzger               <ametzger@varcom.com>
       o  Igor A. Minyukoff           <iam@inser.loniis.spb.su>
  +    o  Matthew Mondor              <mmondor@gobot.ca>
       o  Eric Newton                 <ecn@smart.net>
       o  Sami Niemi                  <saminiemi@usa.net>
       o  Alexandre Oliva             <oliva@dcc.unicamp.br>

From ossp-cvs-owner@ossp.org  Sun Nov  3 12:06:56 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9F8407643F; Sun,  3 Nov 2002 12:06:56 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth config.param devtool.conf
Message-Id: <20021103110656.9F8407643F@mail.ossp.org>
Date: Sun,  3 Nov 2002 12:06:56 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Nov-2002 12:06:56
  Branch: HEAD                             Handle: 2002110311065600

  Modified files:
    ossp-pkg/pth            config.param devtool.conf

  Log:
    provide 'devtool install' command and cleanup devel params

  Summary:
    Revision    Changes     Path
    1.19        +5  -4      ossp-pkg/pth/config.param
    1.10        +8  -0      ossp-pkg/pth/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/pth/config.param
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 config.param
  --- ossp-pkg/pth/config.param	15 Oct 2002 20:34:22 -0000	1.18
  +++ ossp-pkg/pth/config.param	3 Nov 2002 11:06:56 -0000	1.19
  @@ -40,8 +40,8 @@
   #   build for debugging
   #   (developer machine only)
   install {
  -    CC=pgcc IF test -f /sw/bin/pgcc
  -    --prefix=/sw/pkg/pth
  +    CC=/usr/opkg/bin/gcc IF test -f /usr/opkg/bin/gcc
  +    --prefix=/usr/opkg/local/PKG/pth IF test -d /usr/opkg/local/PKG/pth/
       --enable-batch
       --enable-pthread
       --enable-optimize
  @@ -55,12 +55,13 @@
   #   [Hint: dmalloc -l dmalloc.log -i 1 debug3]
   devel {
       CC=/usr/opkg/bin/gcc IF test -f /usr/opkg/bin/gcc
  -    --prefix=/sw/pkg/pth IF test -d /sw/pkg/pth/
  +    --prefix=/usr/opkg/local/PKG/pth IF test -d /usr/opkg/local/PKG/pth/
       --enable-batch
       --enable-debug
       --enable-pthread
       --enable-maintainer
       --enable-syscall-soft
  -    --with-dmalloc=/sw/pkg/dmalloc IF test -d /sw/pkg/dmalloc/
  +    --enable-syscall-hard
  +    --with-dmalloc=/usr/opkg IF test -f /usr/opkg/bin/dmalloc
   }
   
  Index: ossp-pkg/pth/devtool.conf
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 devtool.conf
  --- ossp-pkg/pth/devtool.conf	2 Nov 2002 13:09:59 -0000	1.9
  +++ ossp-pkg/pth/devtool.conf	3 Nov 2002 11:06:56 -0000	1.10
  @@ -24,6 +24,14 @@
           --with-param=$param \
           "$@"
   
  +%install
  +    ./devtool autoclean
  +    ./devtool autogen
  +    ./devtool configure install
  +    make clean
  +    make all
  +    make install
  +
   %version
       ./shtool version -lc -n 'GNU Pth' -p pth_internal_ -e pth_vers.c
   

From ossp-cvs-owner@ossp.org  Sun Nov  3 12:15:10 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B83FB7643F; Sun,  3 Nov 2002 12:15:09 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog pth.h.in pth.pod pth_attr.c pth_lib...
Message-Id: <20021103111509.B83FB7643F@mail.ossp.org>
Date: Sun,  3 Nov 2002 12:15:09 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Nov-2002 12:15:09
  Branch: HEAD                             Handle: 2002110311150401

  Modified files:
    ossp-pkg/pth            ChangeLog pth.h.in pth.pod pth_attr.c pth_lib.c
                            pth_sched.c pth_tcb.c

  Log:
    Added thread attribute PTH_ATTR_DISPATCHES which (in bounded
    attribute objects) is incremented every time the context
    is switched to the associated thread. This can be used for
    statistical information.

  Summary:
    Revision    Changes     Path
    1.584       +6  -0      ossp-pkg/pth/ChangeLog
    1.136       +1  -0      ossp-pkg/pth/pth.h.in
    1.159       +18 -8      ossp-pkg/pth/pth.pod
    1.18        +15 -0      ossp-pkg/pth/pth_attr.c
    1.54        +3  -0      ossp-pkg/pth/pth_lib.c
    1.82        +1  -0      ossp-pkg/pth/pth_sched.c
    1.40        +1  -0      ossp-pkg/pth/pth_tcb.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.583 -r1.584 ChangeLog
  --- ossp-pkg/pth/ChangeLog	3 Nov 2002 09:59:32 -0000	1.583
  +++ ossp-pkg/pth/ChangeLog	3 Nov 2002 11:15:04 -0000	1.584
  @@ -21,6 +21,12 @@
   
     Changes between 1.4.1 and 1.5.0 (27-Jan-2002 to xx-Oct-2002)
   
  +   *) Added thread attribute PTH_ATTR_DISPATCHES which (in bounded
  +      attribute objects) is incremented every time the context
  +      is switched to the associated thread. This can be used for
  +      statistical information.
  +      [Ralf S. Engelschall]
  +
      *) Added a stand-alone sub-API for manual user-space context
         switching. It is somewhat modeled after the POSIX ucontext(3)
         facility and consists of an opaque data type pth_uctx_t and
  Index: ossp-pkg/pth/pth.h.in
  ============================================================
  $ cvs diff -u -r1.135 -r1.136 pth.h.in
  --- ossp-pkg/pth/pth.h.in	3 Nov 2002 09:59:32 -0000	1.135
  +++ ossp-pkg/pth/pth.h.in	3 Nov 2002 11:15:04 -0000	1.136
  @@ -151,6 +151,7 @@
       PTH_ATTR_CANCEL_STATE,   /* RW [unsigned int]      thread cancellation state         */
       PTH_ATTR_STACK_SIZE,     /* RW [unsigned int]      stack size                        */
       PTH_ATTR_STACK_ADDR,     /* RW [char *]            stack lower address               */
  +    PTH_ATTR_DISPATCHES,     /* RO [int]               total number of thread dispatches */
       PTH_ATTR_TIME_SPAWN,     /* RO [pth_time_t]        time thread was spawned           */
       PTH_ATTR_TIME_LAST,      /* RO [pth_time_t]        time thread was last dispatched   */
       PTH_ATTR_TIME_RAN,       /* RO [pth_time_t]        time thread was running           */
  Index: ossp-pkg/pth/pth.pod
  ============================================================
  $ cvs diff -u -r1.158 -r1.159 pth.pod
  --- ossp-pkg/pth/pth.pod	3 Nov 2002 09:59:33 -0000	1.158
  +++ ossp-pkg/pth/pth.pod	3 Nov 2002 11:15:04 -0000	1.159
  @@ -714,6 +714,11 @@
   Name of thread (up to 40 characters are stored only), mainly for debugging
   purposes.
   
  +=item C<PTH_ATTR_DISPATCHES> (read-write) [C<int>]
  +
  +In bounded attribute objects, this field is incremented every time the
  +context is switched to the associated thread.
  +
   =item C<PTH_ATTR_JOINABLE> (read-write> [C<int>]
   
   The thread detachment type, C<TRUE> indicates a joinable thread,
  @@ -799,8 +804,9 @@
   
   This initializes an attribute object I<attr> to the default values:
   C<PTH_ATTR_PRIO> := C<PTH_PRIO_STD>, C<PTH_ATTR_NAME> := `C<unknown>',
  -C<PTH_ATTR_JOINABLE> := C<TRUE>, C<PTH_ATTR_CANCELSTATE> :=
  -C<PTH_CANCEL_DEFAULT>, C<PTH_ATTR_STACK_SIZE> := 64*1024 and
  +C<PTH_ATTR_DISPATCHES> := C<0>, C<PTH_ATTR_JOINABLE> := C<TRUE>,
  +C<PTH_ATTR_CANCELSTATE> := C<PTH_CANCEL_DEFAULT>,
  +C<PTH_ATTR_STACK_SIZE> := 64*1024 and
   C<PTH_ATTR_STACK_ADDR> := C<NULL>. All other C<PTH_ATTR_*> attributes are
   read-only attributes and don't receive default values in I<attr>, because they
   exists only for bounded attribute objects.
  @@ -814,6 +820,7 @@
   
    PTH_ATTR_PRIO           int
    PTH_ATTR_NAME           char *
  + PTH_ATTR_DISPATCHES     int
    PTH_ATTR_JOINABLE       int
    PTH_ATTR_CANCEL_STATE   unsigned int
    PTH_ATTR_STACK_SIZE     unsigned int
  @@ -828,6 +835,7 @@
   
    PTH_ATTR_PRIO           int *
    PTH_ATTR_NAME           char **
  + PTH_ATTR_DISPATCHES     int *
    PTH_ATTR_JOINABLE       int *
    PTH_ATTR_CANCEL_STATE   unsigned int *
    PTH_ATTR_STACK_SIZE     unsigned int *
  @@ -860,12 +868,14 @@
   This spawns a new thread with the attributes given in I<attr> (or
   C<PTH_ATTR_DEFAULT> for default attributes - which means that thread priority,
   joinability and cancel state are inherited from the current thread) with the
  -starting point at routine I<entry>. This entry routine is called as
  -`pth_exit(I<entry>(I<arg>))' inside the new thread unit, i.e., I<entry>'s
  -return value is fed to an implicit pth_exit(3). So the thread usually can exit
  -by just returning. Nevertheless the thread can also exit explicitly at any
  -time by calling pth_exit(3). But keep in mind that calling the POSIX function
  -exit(3) still terminates the complete process and not just the current thread.
  +starting point at routine I<entry>; the dispatch count is not inherited from
  +the current thread if I<attr> is not specified - rather, it is initialized
  +to zero.  This entry routine is called as `pth_exit(I<entry>(I<arg>))' inside
  +the new thread unit, i.e., I<entry>'s return value is fed to an implicit
  +pth_exit(3). So the thread can also exit by just returning. Nevertheless
  +the thread can also exit explicitly at any time by calling pth_exit(3). But
  +keep in mind that calling the POSIX function exit(3) still terminates the
  +complete process and not just the current thread.
   
   There is no B<Pth>-internal limit on the number of threads one can spawn,
   except the limit implied by the available virtual memory. B<Pth> internally
  Index: ossp-pkg/pth/pth_attr.c
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 pth_attr.c
  --- ossp-pkg/pth/pth_attr.c	24 Oct 2002 15:21:13 -0000	1.17
  +++ ossp-pkg/pth/pth_attr.c	3 Nov 2002 11:15:04 -0000	1.18
  @@ -37,6 +37,7 @@
   struct pth_attr_st {
       pth_t        a_tid;
       int          a_prio;
  +    int          a_dispatches;
       char         a_name[PTH_TCB_NAMELEN];
       int          a_joinable;
       unsigned int a_cancelstate;
  @@ -85,6 +86,7 @@
           return pth_error(FALSE, EPERM);
       a->a_prio = PTH_PRIO_STD;
       pth_util_cpystrn(a->a_name, "unknown", PTH_TCB_NAMELEN);
  +    a->a_dispatches = 0;
       a->a_joinable = TRUE;
       a->a_cancelstate = PTH_CANCEL_DEFAULT;
       a->a_stacksize = 64*1024;
  @@ -148,6 +150,19 @@
                   *dst = src;
               }
               break;
  +        }
  +        case PTH_ATTR_DISPATCHES: {
  +            /* incremented on every context switch */
  +            int val, *src, *dst;
  +            if (cmd == PTH_ATTR_SET) {
  +                src = &val; val = va_arg(ap, int);
  +                dst = (a->a_tid != NULL ? &a->a_tid->dispatches : &a->a_dispatches);
  +            }
  +            else {
  +                src = (a->a_tid != NULL ? &a->a_tid->dispatches : &a->a_dispatches);
  +                dst = va_arg(ap, int *);
  +            }
  +            *dst = *src;
           }
           case PTH_ATTR_JOINABLE: {
               /* detachment type */
  Index: ossp-pkg/pth/pth_lib.c
  ============================================================
  $ cvs diff -u -r1.53 -r1.54 pth_lib.c
  --- ossp-pkg/pth/pth_lib.c	24 Oct 2002 15:21:13 -0000	1.53
  +++ ossp-pkg/pth/pth_lib.c	3 Nov 2002 11:15:04 -0000	1.54
  @@ -239,6 +239,7 @@
           t->prio        = attr->a_prio;
           t->joinable    = attr->a_joinable;
           t->cancelstate = attr->a_cancelstate;
  +        t->dispatches  = attr->a_dispatches;
           pth_util_cpystrn(t->name, attr->a_name, PTH_TCB_NAMELEN);
       }
       else if (pth_current != NULL) {
  @@ -246,6 +247,7 @@
           t->prio        = pth_current->prio;
           t->joinable    = pth_current->joinable;
           t->cancelstate = pth_current->cancelstate;
  +        t->dispatches  = 0;
           pth_snprintf(t->name, PTH_TCB_NAMELEN, "%s.child@%d=0x%lx",
                        pth_current->name, (unsigned int)time(NULL),
                        (unsigned long)pth_current);
  @@ -255,6 +257,7 @@
           t->prio        = PTH_PRIO_STD;
           t->joinable    = TRUE;
           t->cancelstate = PTH_CANCEL_DEFAULT;
  +        t->dispatches  = 0;
           pth_snprintf(t->name, PTH_TCB_NAMELEN,
                        "user/%x", (unsigned int)time(NULL));
       }
  Index: ossp-pkg/pth/pth_sched.c
  ============================================================
  $ cvs diff -u -r1.81 -r1.82 pth_sched.c
  --- ossp-pkg/pth/pth_sched.c	27 Jan 2002 11:03:41 -0000	1.81
  +++ ossp-pkg/pth/pth_sched.c	3 Nov 2002 11:15:05 -0000	1.82
  @@ -240,6 +240,7 @@
           pth_time_add(&pth_sched->running, &running);
   
           /* ** ENTERING THREAD ** - by switching the machine context */
  +        pth_current->dispatches++;
           pth_mctx_switch(&pth_sched->mctx, &pth_current->mctx);
   
           /* update scheduler times */
  Index: ossp-pkg/pth/pth_tcb.c
  ============================================================
  $ cvs diff -u -r1.39 -r1.40 pth_tcb.c
  --- ossp-pkg/pth/pth_tcb.c	24 Oct 2002 15:21:14 -0000	1.39
  +++ ossp-pkg/pth/pth_tcb.c	3 Nov 2002 11:15:05 -0000	1.40
  @@ -40,6 +40,7 @@
       /* standard thread control block ingredients */
       int            prio;                 /* base priority of thread                     */
       char           name[PTH_TCB_NAMELEN];/* name of thread (mainly for debugging)       */
  +    int            dispatches;           /* total number of thread dispatches           */
       pth_state_t    state;                /* current state indicator for thread          */
   
       /* timing */

From ossp-cvs-owner@ossp.org  Sun Nov  3 12:24:50 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C2A767643F; Sun,  3 Nov 2002 12:24:49 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog NEWS pth_vers.c
Message-Id: <20021103112449.C2A767643F@mail.ossp.org>
Date: Sun,  3 Nov 2002 12:24:49 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Nov-2002 12:24:49
  Branch: HEAD                             Handle: 2002110311244900

  Modified files:
    ossp-pkg/pth            ChangeLog NEWS pth_vers.c

  Log:
    cleanups for next release already in advance

  Summary:
    Revision    Changes     Path
    1.585       +1  -1      ossp-pkg/pth/ChangeLog
    1.34        +7  -0      ossp-pkg/pth/NEWS
    1.141       +9  -9      ossp-pkg/pth/pth_vers.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.584 -r1.585 ChangeLog
  --- ossp-pkg/pth/ChangeLog	3 Nov 2002 11:15:04 -0000	1.584
  +++ ossp-pkg/pth/ChangeLog	3 Nov 2002 11:24:49 -0000	1.585
  @@ -19,7 +19,7 @@
       | |_ ___) |
     __|_(_)____/____________________________________________________________
   
  -  Changes between 1.4.1 and 1.5.0 (27-Jan-2002 to xx-Oct-2002)
  +  Changes between 1.4.1 and 1.5.0 (27-Jan-2002 to xx-Nov-2002)
   
      *) Added thread attribute PTH_ATTR_DISPATCHES which (in bounded
         attribute objects) is incremented every time the context
  Index: ossp-pkg/pth/NEWS
  ============================================================
  $ cvs diff -u -r1.33 -r1.34 NEWS
  --- ossp-pkg/pth/NEWS	20 Oct 2002 11:55:03 -0000	1.33
  +++ ossp-pkg/pth/NEWS	3 Nov 2002 11:24:49 -0000	1.34
  @@ -14,6 +14,13 @@
   
     Changes between 1.4 and 1.5 (24-Mar-2001 to xx-Oct-2002)
   
  +   *) Added thread attribute PTH_ATTR_DISPATCHES.
  +   *) Added sub-API pth_uctx_* for user-space context switching.
  +   *) Add a Pth variant of the new POSIX pselect(2) function.
  +   *) Internally cleaned up the error handling macros.
  +   *) Added POSIX-compliant sanity checks for bad fds.
  +   *) Added pth_nanosleep() function.
  +   *) Allow a NULL name for pth_msgport_create()
      *) Completely rewrote the "hard syscall mapping". 
      *) Added support to pth_poll(3) for POLLD{RD,WR}{NORM,BAND}.
      *) Fixed a long-standing termination bug in pth_exit(3).
  Index: ossp-pkg/pth/pth_vers.c
  ============================================================
  $ cvs diff -u -r1.140 -r1.141 pth_vers.c
  --- ossp-pkg/pth/pth_vers.c	27 Jan 2002 16:14:02 -0000	1.140
  +++ ossp-pkg/pth/pth_vers.c	3 Nov 2002 11:24:49 -0000	1.141
  @@ -8,7 +8,7 @@
   #ifndef _PTH_VERS_C_
   #define _PTH_VERS_C_
   
  -#define PTH_INTERNAL_VERSION 0x105101
  +#define PTH_INTERNAL_VERSION 0x105200
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _PTH_VERS_C_AS_HEADER_
   
   pth_internal_version_t pth_internal_version = {
  -    0x105101,
  -    "1.5b1",
  -    "1.5b1 (27-Jan-2002)",
  -    "This is GNU Pth, Version 1.5b1 (27-Jan-2002)",
  -    "GNU Pth 1.5b1 (27-Jan-2002)",
  -    "GNU Pth/1.5b1",
  -    "@(#)GNU Pth 1.5b1 (27-Jan-2002)",
  -    "$Id: GNU Pth 1.5b1 (27-Jan-2002) $"
  +    0x105200,
  +    "1.5.0",
  +    "1.5.0 (03-Nov-2002)",
  +    "This is GNU Pth, Version 1.5.0 (03-Nov-2002)",
  +    "GNU Pth 1.5.0 (03-Nov-2002)",
  +    "GNU Pth/1.5.0",
  +    "@(#)GNU Pth 1.5.0 (03-Nov-2002)",
  +    "$Id: GNU Pth 1.5.0 (03-Nov-2002) $"
   };
   
   #endif /* _PTH_VERS_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Sun Nov  3 13:21:01 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EE8EC7643F; Sun,  3 Nov 2002 13:21:00 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth aclocal.m4
Message-Id: <20021103122100.EE8EC7643F@mail.ossp.org>
Date: Sun,  3 Nov 2002 13:21:00 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Nov-2002 13:21:00
  Branch: HEAD                             Handle: 2002110312210000

  Modified files:
    ossp-pkg/pth            aclocal.m4

  Log:
    the value seemed to have changed recently

  Summary:
    Revision    Changes     Path
    1.98        +4  -4      ossp-pkg/pth/aclocal.m4
  ____________________________________________________________________________

  Index: ossp-pkg/pth/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.97 -r1.98 aclocal.m4
  --- ossp-pkg/pth/aclocal.m4	20 Oct 2002 13:49:29 -0000	1.97
  +++ ossp-pkg/pth/aclocal.m4	3 Nov 2002 12:21:00 -0000	1.98
  @@ -900,7 +900,7 @@
   AC_DEFUN(AC_CHECK_STACKGROWTH,[dnl
   AC_MSG_CHECKING(for direction of stack growth)
   AC_CACHE_VAL(ac_cv_check_stackgrowth, [
  -cross_compile=no
  +cross_compiling=no
   AC_TRY_RUN(
   changequote(<<, >>)dnl
   <<
  @@ -955,7 +955,7 @@
   AC_MSG_CHECKING(for signal-mask aware setjmp(3)/longjmp(3))
   AC_CACHE_VAL(ac_cv_check_sjlj, [
   AC_IFALLYES(func:setjmp func:longjmp, ac_cv_check_sjlj=sjlje, ac_cv_check_sjlj=none)
  -cross_compile=no
  +cross_compiling=no
   for testtype in ssjlj sjlj usjlj; do
   OCFLAGS="$CFLAGS"
   CFLAGS="$CFLAGS -DTEST_${testtype}"
  @@ -1128,7 +1128,7 @@
   
   AC_DEFUN(AC_CHECK_NSIG,[dnl
   AC_MSG_CHECKING(for number of signals)
  -cross_compile=no
  +cross_compiling=no
   AC_TRY_RUN(
   changequote(<<, >>)dnl
   <<
  @@ -1394,7 +1394,7 @@
       dnl #   setup compile environment
       OCFLAGS="$CFLAGS"
       CFLAGS="$CFLAGS -DTEST_$1"
  -    cross_compile=no
  +    cross_compiling=no
       dnl #   compile and run the test program
       AC_TRY_RUN([
   #include <stdio.h>

From ossp-cvs-owner@ossp.org  Sun Nov  3 17:31:35 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5F7D976449; Sun,  3 Nov 2002 17:31:35 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog aclocal.m4 configure.ac pth.h.in pt...
Message-Id: <20021103163135.5F7D976449@mail.ossp.org>
Date: Sun,  3 Nov 2002 17:31:35 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Nov-2002 17:31:35
  Branch: HEAD                             Handle: 2002110316313400

  Modified files:
    ossp-pkg/pth            ChangeLog aclocal.m4 configure.ac pth.h.in
                            pthread.h.in

  Log:
    Add Autoconf option --with-fdsetsize=NUM which allows to
    force a particular (usually higher than the default) FD_SETSIZE
    value for building Pth. Additionally Pth makes sure that the
    application using Pth does not use an even larger size.
    
    Original patch by: Nick Hudson <skrll@netbsd.org>

  Summary:
    Revision    Changes     Path
    1.586       +6  -0      ossp-pkg/pth/ChangeLog
    1.99        +60 -0      ossp-pkg/pth/aclocal.m4
    1.8         +3  -0      ossp-pkg/pth/configure.ac
    1.137       +7  -0      ossp-pkg/pth/pth.h.in
    1.65        +9  -0      ossp-pkg/pth/pthread.h.in
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.585 -r1.586 ChangeLog
  --- ossp-pkg/pth/ChangeLog	3 Nov 2002 11:24:49 -0000	1.585
  +++ ossp-pkg/pth/ChangeLog	3 Nov 2002 16:31:34 -0000	1.586
  @@ -21,6 +21,12 @@
   
     Changes between 1.4.1 and 1.5.0 (27-Jan-2002 to xx-Nov-2002)
   
  +   *) Add Autoconf option --with-fdsetsize=NUM which allows to
  +      force a particular (usually higher than the default) FD_SETSIZE
  +      value for building Pth. Additionally Pth makes sure that the
  +      application using Pth does not use an even larger size.
  +      [Nick Hudson <skrll@netbsd.org>, Ralf S. Engelschall]
  +
      *) Added thread attribute PTH_ATTR_DISPATCHES which (in bounded
         attribute objects) is incremented every time the context
         is switched to the associated thread. This can be used for
  Index: ossp-pkg/pth/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.98 -r1.99 aclocal.m4
  --- ossp-pkg/pth/aclocal.m4	3 Nov 2002 12:21:00 -0000	1.98
  +++ ossp-pkg/pth/aclocal.m4	3 Nov 2002 16:31:34 -0000	1.99
  @@ -1168,6 +1168,66 @@
   ])
   
   dnl ##
  +dnl ##  Check for FD_SETSIZE
  +dnl ##
  +dnl ##  configure.in:
  +dnl ##    AC_CHECK_FDSETSIZE(<varname>)
  +
  +AC_DEFUN(AC_CHECK_FDSETSIZE,[dnl
  +dnl #   1. determine default value
  +AC_MSG_CHECKING(for default value of FD_SETSIZE)
  +cross_compiling=no
  +AC_TRY_RUN(
  +changequote(<<, >>)dnl
  +<<
  +#include <stdio.h>
  +#include <sys/types.h>
  +#include <unistd.h>
  +int main(int argc, char *argv[])
  +{
  +    FILE *fp;
  +    int ac_fdsetsize;
  +#if defined(FD_SETSIZE)
  +    ac_fdsetsize = FD_SETSIZE;
  +#else
  +    ac_fdsetsize = (sizeof(fd_set)*8);
  +#endif
  +    if ((fp = fopen("conftestval", "w")) == NULL)
  +        exit(1);
  +    fprintf(fp, "%d\n", ac_fdsetsize);
  +    fclose(fp);
  +    exit(0);
  +}
  +>>
  +changequote([, ])dnl
  +,
  +ac_fdsetsize=`cat conftestval`,
  +ac_fdsetsize=1024,
  +ac_fdsetsize=1024
  +)
  +AC_MSG_RESULT([$ac_fdsetsize])
  +$1="$ac_fdsetsize"
  +AC_SUBST($1)
  +
  +dnl #   2. allow user to force a particular value
  +AC_ARG_WITH(fdsetsize,dnl
  +[  --with-fdsetsize=NUM    set FD_SETSIZE while building GNU Pth],[
  +case $withval in
  +    [[1-9]][[0-9]]|[[1-9]][[0-9]][[0-9]]|[[1-9]][[0-9]][[0-9]][[0-9]]) $1=$withval ;;
  +    * ) AC_ERROR([invalid FD_SETSIZE specified -- allowed: 10-9999]) ;;
  +esac
  +dnl # we cannot use the usual
  +dnl # AC_DEFINE_UNQUOTED(FD_SETSIZE, $$1, [Define to the maximum size of fd_set])
  +dnl # here, because FD_SETSIZE has to be defined already before any other
  +dnl # system headers are included. Hence we have to use CPPFLAGS.
  +CPPFLAGS="$CPPFLAGS -DFD_SETSIZE=$$1"
  +AC_MSG_CHECKING([for overridden FD_SETSIZE value])
  +AC_MSG_RESULT([$$1])
  +])
  +
  +])
  +
  +dnl ##
   dnl ##  Check for an external/extension library.
   dnl ##  - is aware of <libname>-config style scripts
   dnl ##  - searches under standard paths include, lib, etc.
  Index: ossp-pkg/pth/configure.ac
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 configure.ac
  --- ossp-pkg/pth/configure.ac	20 Oct 2002 13:49:29 -0000	1.7
  +++ ossp-pkg/pth/configure.ac	3 Nov 2002 16:31:34 -0000	1.8
  @@ -157,6 +157,9 @@
   dnl #  check for the number of signals
   AC_CHECK_NSIG(PTH_NSIG)
   
  +dnl #  check for size of fd_set (FDSETSIZE)
  +AC_CHECK_FDSETSIZE(PTH_FDSETSIZE)
  +
   dnl # check whether poll(2)'s input stuff has to be faked
   AC_CHECK_FUNCS(poll)
   AC_CHECK_DEFINE(POLLIN, poll.h)
  Index: ossp-pkg/pth/pth.h.in
  ============================================================
  $ cvs diff -u -r1.136 -r1.137 pth.h.in
  --- ossp-pkg/pth/pth.h.in	3 Nov 2002 11:15:04 -0000	1.136
  +++ ossp-pkg/pth/pth.h.in	3 Nov 2002 16:31:34 -0000	1.137
  @@ -87,6 +87,13 @@
   #define END_DECLARATION   /*nop*/
   #endif
   
  +    /* check if the user requests a bigger FD_SETSIZE than we can handle */
  +#if defined(FD_SETSIZE)
  +#if FD_SETSIZE > @PTH_FDSETSIZE@
  +#error "FD_SETSIZE is larger than what GNU Pth can handle."
  +#endif
  +#endif
  +
   BEGIN_DECLARATION
   
       /* some global constants */
  Index: ossp-pkg/pth/pthread.h.in
  ============================================================
  $ cvs diff -u -r1.64 -r1.65 pthread.h.in
  --- ossp-pkg/pth/pthread.h.in	15 Oct 2002 18:23:37 -0000	1.64
  +++ ossp-pkg/pth/pthread.h.in	3 Nov 2002 16:31:34 -0000	1.65
  @@ -63,6 +63,15 @@
   #endif
   
   /*
  + * Check if the user requests a bigger FD_SETSIZE than we can handle
  + */
  +#if defined(FD_SETSIZE)
  +#if FD_SETSIZE > @PTH_FDSETSIZE@
  +#error "FD_SETSIZE is larger than what GNU Pth can handle."
  +#endif
  +#endif
  +
  +/*
    * Protect namespace, because possibly existing vendor Pthread stuff
    * would certainly conflict with our defintions of pthread*_t.
    */

From ossp-cvs-owner@ossp.org  Sun Nov  3 17:53:27 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id ADB6A7643F; Sun,  3 Nov 2002 17:53:27 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth pth_syscall.c
Message-Id: <20021103165327.ADB6A7643F@mail.ossp.org>
Date: Sun,  3 Nov 2002 17:53:27 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Nov-2002 17:53:27
  Branch: HEAD                             Handle: 2002110316532700

  Modified files:
    ossp-pkg/pth            pth_syscall.c

  Log:
    Prevent system includes from declaring the syscalls in order to avoid
    prototype mismatches. In theory those mismatches should not happen
    at all, but slight (but still compatible) differences (ssize_t vs.
    size_t, etc) can lead to a compile-time failure (although run-time
    would be ok). Hence protect ourself from this situation.

  Summary:
    Revision    Changes     Path
    1.27        +72 -0      ossp-pkg/pth/pth_syscall.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/pth_syscall.c
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 pth_syscall.c
  --- ossp-pkg/pth/pth_syscall.c	25 Oct 2002 11:56:16 -0000	1.26
  +++ ossp-pkg/pth/pth_syscall.c	3 Nov 2002 16:53:27 -0000	1.27
  @@ -27,6 +27,36 @@
                                     forces to help you shoot yourself
                                     in the foot for free.''
                                                    -- Unknown         */
  +/*
  + * Prevent system includes from declaring the syscalls in order to avoid
  + * prototype mismatches. In theory those mismatches should not happen
  + * at all, but slight (but still compatible) differences (ssize_t vs.
  + * size_t, etc) can lead to a compile-time failure (although run-time
  + * would be ok). Hence protect ourself from this situation.
  + */
  +#define fork          __pth_sys_fork
  +#define waitpid       __pth_sys_waitpid
  +#define system        __pth_sys_system
  +#define sleep         __pth_sys_sleep
  +#define sigprocmask   __pth_sys_sigmask
  +#define sigwait       __pth_sys_sigwait
  +#define select        __pth_sys_select
  +#define pselect       __pth_sys_pselect
  +#define poll          __pth_sys_poll
  +#define connect       __pth_sys_connect
  +#define accept        __pth_sys_accept
  +#define read          __pth_sys_read
  +#define write         __pth_sys_write
  +#define readv         __pth_sys_readv
  +#define writev        __pth_sys_writev
  +#define recv          __pth_sys_recv
  +#define send          __pth_sys_send
  +#define recvfrom      __pth_sys_recvfrom
  +#define sendto        __pth_sys_sendto
  +#define pread         __pth_sys_pread
  +#define pwrite        __pth_sys_pwrite
  +
  +/* include the private header and this way system headers */
   #include "pth_p.h"
   
   /* some exported variables for object layer checks */
  @@ -49,6 +79,32 @@
   #endif /* PTH_SYSCALL_HARD */
   #endif /* cpp */
   
  +/*
  + * Unprotect us from the namespace conflict with the
  + * syscall prototypes in system headers.
  + */
  +#undef fork
  +#undef waitpid
  +#undef system
  +#undef sleep
  +#undef sigprocmask
  +#undef sigwait
  +#undef select
  +#undef pselect
  +#undef poll
  +#undef connect
  +#undef accept
  +#undef read
  +#undef write
  +#undef readv
  +#undef writev
  +#undef recv
  +#undef send
  +#undef recvfrom
  +#undef sendto
  +#undef pread
  +#undef pwrite
  +
   /* internal data structures */
   #if cpp
   typedef int (*pth_syscall_fct_t)();
  @@ -224,6 +280,7 @@
       } while (0)
   
   /* ==== Pth hard syscall wrapper for fork(2) ==== */
  +pid_t fork(void);
   pid_t fork(void)
   {
       /* external entry point for application */
  @@ -245,6 +302,7 @@
   }
   
   /* ==== Pth hard syscall wrapper for sleep(3) ==== */
  +unsigned int sleep(unsigned int);
   unsigned int sleep(unsigned int sec)
   {
       /* external entry point for application */
  @@ -255,6 +313,7 @@
      internal exit point pth_sc_sleep necessary! */
   
   /* ==== Pth hard syscall wrapper for system(3) ==== */
  +int system(const char *);
   int system(const char *cmd)
   {
       /* external entry point for application */
  @@ -265,6 +324,7 @@
      internal exit point pth_sc_system necessary! */
   
   /* ==== Pth hard syscall wrapper for sigprocmask(2) ==== */
  +int sigprocmask(int, const sigset_t *, sigset_t *);
   int sigprocmask(int how, const sigset_t *set, sigset_t *oset)
   {
       /* external entry point for application */
  @@ -288,6 +348,7 @@
   }
   
   /* ==== Pth hard syscall wrapper for sigwait(3) ==== */
  +int sigwait(const sigset_t *, int *);
   int sigwait(const sigset_t *set, int *sigp)
   {
       /* external entry point for application */
  @@ -298,6 +359,7 @@
      internal exit point pth_sc_sigwait necessary! */
   
   /* ==== Pth hard syscall wrapper for waitpid(2) ==== */
  +pid_t waitpid(pid_t, int *, int);
   pid_t waitpid(pid_t wpid, int *status, int options)
   {
       /* external entry point for application */
  @@ -319,6 +381,7 @@
   }
   
   /* ==== Pth hard syscall wrapper for connect(2) ==== */
  +int connect(int, const struct sockaddr *, socklen_t);
   int connect(int s, const struct sockaddr *addr, socklen_t addrlen)
   {
       /* external entry point for application */
  @@ -348,6 +411,7 @@
   }
   
   /* ==== Pth hard syscall wrapper for accept(2) ==== */
  +int accept(int, struct sockaddr *, socklen_t *);
   int accept(int s, struct sockaddr *addr, socklen_t *addrlen)
   {
       /* external entry point for application */
  @@ -377,6 +441,7 @@
   }
   
   /* ==== Pth hard syscall wrapper for select(2) ==== */
  +int select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
   int select(int nfds, fd_set *readfds, fd_set *writefds,
              fd_set *exceptfds, struct timeval *timeout)
   {
  @@ -414,6 +479,7 @@
      internal exit point pth_sc_pselect necessary! */
   
   /* ==== Pth hard syscall wrapper for poll(2) ==== */
  +int poll(struct pollfd *, nfds_t, int);
   int poll(struct pollfd *pfd, nfds_t nfd, int timeout)
   {
       /* external entry point for application */
  @@ -424,6 +490,7 @@
      internal exit point pth_sc_poll necessary! */
   
   /* ==== Pth hard syscall wrapper for read(2) ==== */
  +ssize_t read(int, void *, size_t);
   ssize_t read(int fd, void *buf, size_t nbytes)
   {
       /* external entry point for application */
  @@ -445,6 +512,7 @@
   }
   
   /* ==== Pth hard syscall wrapper for write(2) ==== */
  +ssize_t write(int, const void *, size_t);
   ssize_t write(int fd, const void *buf, size_t nbytes)
   {
       /* external entry point for application */
  @@ -466,6 +534,7 @@
   }
   
   /* ==== Pth hard syscall wrapper for readv(2) ==== */
  +ssize_t readv(int, const struct iovec *, int);
   ssize_t readv(int fd, const struct iovec *iov, int iovcnt)
   {
       /* external entry point for application */
  @@ -487,6 +556,7 @@
   }
   
   /* ==== Pth hard syscall wrapper for writev(2) ==== */
  +ssize_t writev(int, const struct iovec *, int);
   ssize_t writev(int fd, const struct iovec *iov, int iovcnt)
   {
       /* external entry point for application */
  @@ -530,6 +600,7 @@
      internal exit point pth_sc_pwrite necessary! */
   
   /* ==== Pth hard syscall wrapper for recvfrom(2) ==== */
  +ssize_t recvfrom(int, void *, size_t, int, struct sockaddr *, socklen_t *);
   ssize_t recvfrom(int fd, void *buf, size_t nbytes, int flags, struct sockaddr *from, socklen_t *fromlen)
   {
       /* external entry point for application */
  @@ -551,6 +622,7 @@
   }
   
   /* ==== Pth hard syscall wrapper for sendto(2) ==== */
  +ssize_t sendto(int, const void *, size_t, int, const struct sockaddr *, socklen_t);
   ssize_t sendto(int fd, const void *buf, size_t nbytes, int flags, const struct sockaddr *to, socklen_t tolen)
   {
       /* external entry point for application */

From ossp-cvs-owner@ossp.org  Sun Nov  3 20:06:20 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E6A0B76449; Sun,  3 Nov 2002 20:06:19 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog aclocal.m4
Message-Id: <20021103190619.E6A0B76449@mail.ossp.org>
Date: Sun,  3 Nov 2002 20:06:19 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Nov-2002 20:06:19
  Branch: HEAD                             Handle: 2002110319061900

  Modified files:
    ossp-pkg/pth            ChangeLog aclocal.m4

  Log:
    Upgraded to latest version of the OSSP Autoconf macro
    AC_CHECK_EXTLIB in order to fix problems with the current
    Autoconf 2.54 environment.

  Summary:
    Revision    Changes     Path
    1.587       +5  -0      ossp-pkg/pth/ChangeLog
    1.100       +22 -14     ossp-pkg/pth/aclocal.m4
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.586 -r1.587 ChangeLog
  --- ossp-pkg/pth/ChangeLog	3 Nov 2002 16:31:34 -0000	1.586
  +++ ossp-pkg/pth/ChangeLog	3 Nov 2002 19:06:19 -0000	1.587
  @@ -21,6 +21,11 @@
   
     Changes between 1.4.1 and 1.5.0 (27-Jan-2002 to xx-Nov-2002)
   
  +   *) Upgraded to latest version of the OSSP Autoconf macro
  +      AC_CHECK_EXTLIB in order to fix problems with the current
  +      Autoconf 2.54 environment.
  +      [Ralf S. Engelschall]
  +
      *) Add Autoconf option --with-fdsetsize=NUM which allows to
         force a particular (usually higher than the default) FD_SETSIZE
         value for building Pth. Additionally Pth makes sure that the
  Index: ossp-pkg/pth/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.99 -r1.100 aclocal.m4
  --- ossp-pkg/pth/aclocal.m4	3 Nov 2002 16:31:34 -0000	1.99
  +++ ossp-pkg/pth/aclocal.m4	3 Nov 2002 19:06:19 -0000	1.100
  @@ -1245,10 +1245,10 @@
   dnl ##
   
   AC_DEFUN(AC_CHECK_EXTLIB,[dnl
  -AC_ARG_WITH($2,[dnl
  -[  --with-]m4_substr([$2[[=DIR]]                 ], 0, 19)[build against $1 library (default=no)]],[dnl
  +AC_ARG_WITH($2, [dnl
  +[  --with-]m4_substr([$2[[=DIR]]                     ], 0, 19)[build with external $1 library (default=no)]], [dnl
       if test ".$with_$2" = .yes; then
  -        #   via config script
  +        #   via config script in PATH
           $2_version=`($2-config --version) 2>/dev/null`
           if test ".$$2_version" != .; then
               CPPFLAGS="$CPPFLAGS `$2-config --cflags`"
  @@ -1271,7 +1271,7 @@
                       fi
                   fi
               done
  -            #   via standard paths
  +            #   in standard sub-areas
               if test ".$found" = .0; then
                   for dir in $with_$2/include/$2 $with_$2/include $with_$2; do
                       if test -f "$dir/$4"; then
  @@ -1286,43 +1286,51 @@
                           LDFLAGS="$LDFLAGS -L$dir -L$dir/.libs"
                           found=1
                           break
  -                    elif test -f "$dir/lib$2.a" -o -f "$dir/lib$2.so"; then
  +                    elif test -f "$dir/lib$2.a" || test -f "$dir/lib$2.so"; then
                           LDFLAGS="$LDFLAGS -L$dir"
                           found=1
                           break
                       fi
                   done
               fi
  -            #   in any subarea
  +            #   in any sub-area
               if test ".$found" = .0; then
   changequote(, )dnl
                   for file in x `find $with_$2 -name "$4" -type f -print`; do
                       test .$file = .x && continue
  -                    dir=`echo $file | sed -e 's;[[^/]]*$;;' -e 's;\(.\)/$;\1;'`
  +                    dir=`echo $file | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;'`
                       CPPFLAGS="$CPPFLAGS -I$dir"
                       CFLAGS="$CFLAGS -I$dir"
                   done
  -                for file in x `find $with_$2 -name "lib$2.[[aso]]" -type f -print`; do
  +                for file in x `find $with_$2 -name "lib$2.[aso]" -type f -print`; do
                       test .$file = .x && continue
  -                    dir=`echo $file | sed -e 's;[[^/]]*$;;' -e 's;\(.\)/$;\1;'`
  +                    dir=`echo $file | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;'`
                       LDFLAGS="$LDFLAGS -L$dir"
                   done
   changequote([, ])dnl
               fi
           fi
       fi
  -    AC_CHECK_HEADER($4)
  +    AC_HAVE_HEADERS($4)
       AC_CHECK_LIB($2, $3)
  -    AC_IFALLYES(header:$4 lib:$2_$3, with_$2=yes, with_$2=no)
  +    with_$2=yes
  +    ac_var="ac_cv_header_`echo $4 | sed 'y%./+-%__p_%'`"
  +    eval "ac_val=\$$ac_var"
  +    if test ".$ac_val" != .yes; then
  +        with_$2=no
  +    fi
  +    if test ".$ac_cv_lib_$2_$3" != .yes; then
  +        with_$2=no
  +    fi
       if test ".$with_$2" = .no; then
           AC_ERROR([Unable to find $1 library])
       fi
  -,
  +    ], [dnl
   if test ".$with_$2" = .; then
       with_$2=no
   fi
  -])dnl
  -AC_MSG_CHECKING(whether to build against $1 library)
  +    ])dnl
  +AC_MSG_CHECKING(whether to build against external $1 library)
   if test ".$with_$2" = .yes; then
       ifelse([$5], , :, [$5])
   else

From ossp-cvs-owner@ossp.org  Mon Nov  4 14:14:51 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 46EB47643F; Mon,  4 Nov 2002 14:14:51 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.c
Message-Id: <20021104131451.46EB47643F@mail.ossp.org>
Date: Mon,  4 Nov 2002 14:14:51 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   04-Nov-2002 14:14:51
  Branch: HEAD                             Handle: 2002110413145000

  Modified files:
    ossp-pkg/sio            al.c

  Log:
    prepending to a zero length chunk is now possible, the chunk
    is aligned to the end of the buffer

  Summary:
    Revision    Changes     Path
    1.33        +15 -3      ossp-pkg/sio/al.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.c
  ============================================================
  $ cvs diff -u -r1.32 -r1.33 al.c
  --- ossp-pkg/sio/al.c	25 Oct 2002 13:29:02 -0000	1.32
  +++ ossp-pkg/sio/al.c	4 Nov 2002 13:14:50 -0000	1.33
  @@ -137,17 +137,29 @@
    * number of bytes a chunk can be grown to the beginning
    * we must not grow a chunk in a shared buffer since
    * we do not track other chunks sharing the buffer
  + *
  + * empty chunks can be aligned with end
    */
   #define AL_CHUNK_PRESERVE(alc,label) \
       ( (alc) != NULL \
        ? (  (alc)->buf->usecount > 1 || !AL_SAME_LABEL(alc,label) \
           ? 0 \
  -        : (alc)->begin) \
  +        : (alc)->end <= (alc)->begin ? \
  +          (alc)->buf->size \
  +          : (alc)->begin) \
        : 0)
   
  -/* grow chunk to the beginning */
  +/*
  + * grow chunk to the beginning
  + *
  + * empty chunks can be aligned with end
  + */
   #define AL_PRESIZE(al, alc, n) \
  -    do { (alc)->begin -= n; (al)->bytes += (n); } while (0)
  +    do { \
  +        if ((alc)->end <= (alc)->begin) \
  +            (alc)->end = (alc)->begin = (alc)->buf->size; \
  +        (alc)->begin -= n; (al)->bytes += (n); \
  +    } while (0)
   
   /*
    * callback to release buffer memory allocated by the library

From ossp-cvs-owner@ossp.org  Tue Nov  5 14:04:56 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 708607648D; Tue,  5 Nov 2002 14:04:56 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa Makefile.in
Message-Id: <20021105130456.708607648D@mail.ossp.org>
Date: Tue,  5 Nov 2002 14:04:56 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Nov-2002 14:04:56
  Branch: HEAD                             Handle: 2002110513045600

  Modified files:
    ossp-pkg/sa             Makefile.in

  Log:
    be consistent in headers

  Summary:
    Revision    Changes     Path
    1.14        +2  -2      ossp-pkg/sa/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/sa/Makefile.in
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 Makefile.in
  --- ossp-pkg/sa/Makefile.in	5 Sep 2002 07:27:37 -0000	1.13
  +++ ossp-pkg/sa/Makefile.in	5 Nov 2002 13:04:56 -0000	1.14
  @@ -1,10 +1,10 @@
   ##
  -##  SA - OSSP Socket Abstraction Library
  +##  OSSP sa - Socket Abstraction
   ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
  -##  This file is part of OSSP SA, a socket abstraction library which
  +##  This file is part of OSSP sa, a socket abstraction library which
   ##  can be found at http://www.ossp.org/pkg/lib/sa/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for

From ossp-cvs-owner@ossp.org  Tue Nov  5 14:23:37 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D8C0476482; Tue,  5 Nov 2002 14:23:36 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio.c sio_hello.c sio_hole.c sio_null.c sio_s...
Message-Id: <20021105132336.D8C0476482@mail.ossp.org>
Date: Tue,  5 Nov 2002 14:23:36 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   05-Nov-2002 14:23:36
  Branch: HEAD                             Handle: 2002110513233600

  Added files:
    ossp-pkg/sio            sio_hello.c sio_sa.c
  Modified files:
    ossp-pkg/sio            sio.c sio_hole.c sio_null.c sio_test.c

  Log:
    snapshot
    - sio_strategy now has a default direction triggered by SIO_OK result
    - added structure tag to aid debugging
    - sio_hole eats all data and returns downstream (correct ?)
    - sio_null now uses default directio
    - sio_sa puts wrapper on sa objects
    - sio_hello.c implements a trivial protocol handler

  Summary:
    Revision    Changes     Path
    1.4         +29 -3      ossp-pkg/sio/sio.c
    1.1         +302 -0     ossp-pkg/sio/sio_hello.c
    1.2         +3  -7      ossp-pkg/sio/sio_hole.c
    1.3         +2  -2      ossp-pkg/sio/sio_null.c
    1.1         +224 -0     ossp-pkg/sio/sio_sa.c
    1.2         +56 -15     ossp-pkg/sio/sio_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 sio.c
  --- ossp-pkg/sio/sio.c	24 Oct 2002 07:46:01 -0000	1.3
  +++ ossp-pkg/sio/sio.c	5 Nov 2002 13:23:36 -0000	1.4
  @@ -58,6 +58,8 @@
       NODE(sio_halfduplex_t) hd;
       sio_stage_t *stage;
       sio_halfduplex_t *cross;
  +    const char *tag;
  +    sio_rc_t rc_with_data, rc_no_data;
       al_t *al;
       sio_rc_t (*func)(sio_t *, al_t *, void *);
   };
  @@ -99,15 +101,28 @@
        * call stage and direct data upstream/downstream
        * according to response code
        *
  +     * if stage directs SIO_OK, chose default direction
  +     * depending on data in assembly line
  +     *
        * if we the stage does not return a direction,
        * simply end the code
        *
        * if we drop off the chain, simply result SIO_OK
        *
        */
  -    h = chain;
  +    rc = SIO_UPSTREAM;
  +    h  = chain;
       while (h != NULL) {
           rc = h->func(sio, h->al, h->stage->userdata);
  +
  +        /* chose default direction */
  +        if (rc == SIO_OK) {
  +            if (al_bytes(h->al) > 0)
  +                rc = h->rc_with_data;
  +            else
  +                rc = h->rc_no_data;
  +        }
  +
           if (rc == SIO_UPSTREAM)
               h = NEXT(h,hd);
           else if (rc == SIO_DOWNSTREAM)
  @@ -176,16 +191,27 @@
   
       NODEINIT(&sios->reader,hd);
       NODEINIT(&sios->writer,hd);
  +
       sios->module       = siom;
  +
       sios->userdata     = NULL;
       sios->rw           = SIO_MODE_INVALID;
  -    sios->reader.func  = siom->input;
  +    sios->reader.func  = sios->module->input;
       sios->reader.stage = sios;
  -    sios->writer.func  = siom->output;
  +    sios->writer.func  = sios->module->output;
       sios->writer.stage = sios;
   
       sios->reader.cross = &sios->writer;
       sios->writer.cross = &sios->reader;
  +
  +    sios->reader.tag   = "reader";
  +    sios->writer.tag   = "writer";
  +
  +    /* default rules */
  +    sios->reader.rc_with_data = SIO_DOWNSTREAM;
  +    sios->reader.rc_no_data   = SIO_UPSTREAM;
  +    sios->writer.rc_with_data = SIO_UPSTREAM;
  +    sios->writer.rc_no_data   = SIO_DOWNSTREAM;
   
       rc = sios->module->init(sio, &sios->userdata);
       if (rc != SIO_OK) {
  Index: ossp-pkg/sio/sio_hello.c
  ============================================================
  $ cvs update -p -r1.1 sio_hello.c
  
  #include <stdlib.h>
  #include <string.h>
  #include <assert.h>
  
  #include "al.h"
  #include "sio.h"
  #include "sio_module.h"
  
  #define PROMPT "Login: "
  #define NPROMPT (sizeof(PROMPT)-1)
  
  #define PASSWD "Geheim\r\n"
  #define NPASS (sizeof(PASSWD)-1)
  
  /*
   * protocol states
   */
  typedef enum {
      INIT,      /* setting up protocol, save output or switch to writer */
      PROMPTING, /* sending prompt string as writer */
      PROMPTED,  /* continue sending, switch to reader when done */
      WAIT,      /* gather password as reader, flush buffer if good */
      GOOD,      /* default null operation */
      BAD        /* drop output, return eof on input */
  } state_t;
  
  typedef struct {
      al_t *al_in, *al_out;  /* cache input and output stream */
      state_t state;
      char passwd[NPASS];    /* input buffer */
      int  npass;            /* characters in input buffer */
      al_t *pre;             /* saved output during protocol */
      int isoutput;          /* remember originator of protocol */
      void *data_label;      /* al labels used by SIO */
      void *eof_label;
      char eof;              /* eof label buffer */
  } private_t;
  
  /***********************************************************************/
  
  /*
   * create stage
   *
   * allocate private instance data
   */
  static
  sio_rc_t hello_init(sio_t *sio, void **u)
  {
      private_t *my;
      
      my = (private_t *)malloc(sizeof(private_t));
      if (my == NULL)
          return SIO_ERR_MEM;
  
      sio_label(sio, SIO_LN_DATA, &my->data_label);
      sio_label(sio, SIO_LN_EOF, &my->eof_label);
  
      my->eof   = '\0';
  
      *u = my;
  
      return SIO_OK;
  }
  
  /*
   * configure stage
   *
   * pass two void pointers
   */
  static
  sio_rc_t hello_configure(sio_t *sio, void *u, void *obj, void *val)
  {
      return SIO_ERR_ARG;
  }
  
  /*
   * destroy stage
   */
  static
  sio_rc_t hello_cleanup(sio_t *sio, void *u)
  {
      private_t *my = (private_t *)u;
  
      al_destroy(my->pre);
  
      free(my);
  
      return SIO_OK;
  }
  
  static
  void hello_setup(sio_t *sio, private_t *my)
  {
      my->state  = INIT;
      my->npass  = 0;
  }
  
  static
  sio_rc_t hello_openr(sio_t *sio, al_t *al, void *u)
  {
      private_t *my = (private_t *)u;
  
      hello_setup(sio,my);
      my->al_in = al;
  
      return SIO_OK;
  }
  
  static
  sio_rc_t hello_closer(sio_t *sio, al_t *al, void *u)
  {
      return SIO_OK;
  }
  
  static
  sio_rc_t hello_openw(sio_t *sio, al_t *al, void *u)
  {
      private_t *my = (private_t *)u;
  
      hello_setup(sio,my);
      al_create(&my->pre);
      my->al_out = al;
  
      return SIO_OK;
  }
  
  static
  sio_rc_t hello_closew(sio_t *sio, al_t *al, void *u)
  {
      private_t *my = (private_t *)u;
  
      al_destroy(my->pre);
      my->pre = NULL;
  
      return SIO_OK;
  }
  
  /************************************************************************/
  
  static
  void hello_clearinput(private_t *my)
  {
      al_splice(my->al_in, 0, al_bytes(my->al_in), NULL, NULL);
  }
  
  static
  void hello_clearoutput(private_t *my)
  {
      al_splice(my->al_out, 0, al_bytes(my->al_out), NULL, NULL);
  }
  
  /*
   * gather input in password buffer
   * return true if enough bytes or if no more data follows
   */
  static
  int hello_readpasswd(private_t *my)
  {
      size_t actual;
  
      al_flatten(my->al_in, 0, NPASS - my->npass, AL_FORWARD_SPAN, my->data_label,
                 my->passwd, &actual);
      al_splice(my->al_in, 0, actual, NULL, NULL);
      my->npass += actual;
  
      /* flush input when buffer full or labels are switching */
      return my->npass == NPASS || al_bytes(my->al_in) > 0;
  }
  
  /*
   * write eof token to input stream
   */
  static
  void hello_writeeof(private_t *my)
  {
      hello_clearinput(my);
      al_append_bytes(my->al_in, &my->eof, sizeof(my->eof), my->eof_label);
  }
  
  /*
   * defer initial output until protocol is done
   */
  static
  void hello_saveoutput(private_t *my)
  {
      al_splice(my->pre, al_bytes(my->pre), 0, my->al_out, NULL);
  }
  
  /*
   * restore saved output after handshake completed successfully
   */
  static
  void hello_restoreoutput(private_t *my)
  {
      al_splice(my->al_out, 0, 0, my->pre, NULL);
  }
  
  /*
   * write prompt string to output
   */
  static
  void hello_sendprompt(private_t *my)
  {
          al_prepend_bytes(my->al_out, PROMPT, NPROMPT, my->data_label);
  }
  
  /************************************************************************/
  
  #define GOTO(s, c) do { my->state = (s); rc = (c); } while(0)
  
  static
  sio_rc_t hello_protocol(sio_t *sio, private_t *my, int isoutput)
  {
      sio_rc_t rc = SIO_ERR_INT;
      int good;
  
      switch (my->state) {
      case INIT:
          if (isoutput) {
              my->isoutput = 1;
              hello_saveoutput(my);
              GOTO(PROMPTING, SIO_UPSTREAM);
          } else {
              my->isoutput = 0;
              GOTO(PROMPTING, SIO_XSTREAM);
          }
          break;
      case PROMPTING:
          assert(isoutput == 1);
          hello_sendprompt(my);
          GOTO(PROMPTED, SIO_UPSTREAM);
          break;
      case PROMPTED:
          assert(isoutput == 1);
          GOTO(WAIT, SIO_XSTREAM);
          break;
      case WAIT:
          assert(isoutput == 0);
          if (!hello_readpasswd(my))
              GOTO(WAIT, SIO_UPSTREAM);
          else {
              good = my->npass == NPASS &&
                     memcmp(my->passwd, PASSWD, NPASS) == 0;
              if (!good) {
                  if (my->isoutput)
                      GOTO(BAD, SIO_XSTREAM);
                  else {
                      hello_writeeof(my);
                      GOTO(BAD, SIO_DOWNSTREAM);
                  }
              } else if (my->isoutput) {
                  hello_restoreoutput(my);
                  GOTO(GOOD, SIO_XSTREAM);
              } else
                  GOTO(GOOD, SIO_OK);
          }
  
          break;
      case GOOD:
          GOTO(GOOD, SIO_OK);             /* default action */
          break;
      case BAD:
          if (isoutput)
              hello_clearoutput(my);
          else
              hello_writeeof(my);
  
          GOTO(BAD, SIO_DOWNSTREAM);
          break;
      }
  
      return rc;
  }
  
  /************************************************************************/
  
  static
  sio_rc_t hello_input(sio_t *sio, al_t *al, void *u)
  {
      return hello_protocol(sio, (private_t *)u, 0);
  }
  
  static
  sio_rc_t hello_output(sio_t *sio, al_t *al, void *u)
  {
      return hello_protocol(sio, (private_t *)u, 1);
  }
  
  sio_module_t sio_module_hello = {
      "hello",
      hello_init,
      hello_configure,
      hello_cleanup,
      hello_openr,
      hello_closer,
      hello_openw,
      hello_closew,
      hello_input,
      hello_output
  };
  
  Index: ossp-pkg/sio/sio_hole.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 sio_hole.c
  --- ossp-pkg/sio/sio_hole.c	23 Oct 2002 17:05:10 -0000	1.1
  +++ ossp-pkg/sio/sio_hole.c	5 Nov 2002 13:23:36 -0000	1.2
  @@ -6,6 +6,7 @@
   #include "sio_module.h"
   
   typedef struct {
  +    int dummy;
   } private_t;
   
   /*
  @@ -78,15 +79,10 @@
   static
   sio_rc_t hole_input(sio_t *sio, al_t *al, void *u)
   {
  -    size_t feed = al_bytes(al);
  -
       /* drop all data into the bit bucket */
  -    if (feed > 0) {
  -        al_splice(al, 0, feed, NULL, NULL);
  -        return SIO_DOWNSTREAM;
  -    }
  +    al_splice(al, 0, al_bytes(al), NULL, NULL);
   
  -    return SIO_UPSTREAM;
  +    return SIO_DOWNSTREAM;
   }
   
   static
  Index: ossp-pkg/sio/sio_null.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 sio_null.c
  --- ossp-pkg/sio/sio_null.c	23 Oct 2002 17:05:10 -0000	1.2
  +++ ossp-pkg/sio/sio_null.c	5 Nov 2002 13:23:36 -0000	1.3
  @@ -89,13 +89,13 @@
   static
   sio_rc_t null_input(sio_t *sio, al_t *al, void *u)
   {
  -    return SIO_DOWNSTREAM;
  +    return SIO_OK;
   }
   
   static
   sio_rc_t null_output(sio_t *sio, al_t *al, void *u)
   {
  -    return SIO_UPSTREAM;
  +    return SIO_OK;
   }
   
   sio_module_t sio_module_null = {
  Index: ossp-pkg/sio/sio_sa.c
  ============================================================
  $ cvs update -p -r1.1 sio_sa.c
  #include <stddef.h>
  #include <stdlib.h>
  #include <string.h>
  #include <sys/types.h>
  #include <sys/uio.h>
  #include <unistd.h>
  
  #include "al.h"
  #include "sio.h"
  #include "sio_module.h"
  
  #include "sa.h"
  
  typedef struct {
      char *mem;
      size_t size;
  } buffer_t;
  
  typedef struct {
      sa_t *sa;
      buffer_t input;
      size_t written;
      void *label_data;
      void *label_error;
      void *label_eof;
      char eof;
      char error;
  } private_t;
  
  /*
   * create stage
   *
   * allocate private instance data
   */
  static
  sio_rc_t sa_init(sio_t *sio, void **u)
  {
      private_t *my;
      
      my = (private_t *)malloc(sizeof(private_t));
      if (my == NULL)
          return SIO_ERR_MEM;
  
      my->sa           = NULL;
  
      my->input.mem    = NULL;
      my->input.size   = 0;
  
      sio_label(sio, SIO_LN_DATA,  &my->label_data);
      sio_label(sio, SIO_LN_ERROR, &my->label_error);
      sio_label(sio, SIO_LN_EOF,   &my->label_eof);
  
      my->eof   = '\0';
      my->error = '\0';
  
      *u = my;
  
      return SIO_OK;
  }
  
  /*
   * configure stage
   *
   */
  static
  sio_rc_t sa_configure(sio_t *sio, void *u, void *obj, void *val)
  {
      private_t *my = (private_t *)u;
      const char *name = (const char *)obj;
  
      if (!strcmp(name, "sa")) {
          my->sa = (sa_t *)val;
      } else if (!strcmp(name, "buflen")) {
          my->input.size = *(size_t *)val;
      } else {
          return SIO_ERR_ARG;
      }
  
      return SIO_OK;
  }
  
  /*
   * destroy stage
   */
  static
  sio_rc_t sa_cleanup(sio_t *sio, void *u)
  {
      return SIO_OK;
  }
  
  static
  sio_rc_t sa_openr(sio_t *sio, al_t *al, void *u)
  {
      private_t *my = (private_t *)u;
      buffer_t *buf = &my->input;
      char *p;
      size_t n;
  
      n = buf->size;
      p = realloc(buf->mem, n);
      if (p != NULL)
          buf->mem = p;
  
      if (buf->mem == NULL)
          return SIO_ERR_MEM;
  
      return SIO_OK;
  }
  
  static
  sio_rc_t sa_closer(sio_t *sio, al_t *al, void *u)
  {
      private_t *my = (private_t *)u;
      buffer_t *buf = &my->input;
  
      if (buf->mem != NULL) {
          free(buf->mem);
          buf->mem = NULL;
      }
  
      return SIO_OK;
  }
  
  static
  sio_rc_t sa_openw(sio_t *sio, al_t *al, void *u)
  {
      return SIO_OK;
  }
  
  static
  sio_rc_t sa_closew(sio_t *sio, al_t *al, void *u)
  {
      return SIO_OK;
  }
  
  static
  void sa_writeeof(al_t *al, private_t *my)
  {
      al_splice(al, 0, al_bytes(al), NULL, NULL);
      al_append_bytes(al, &my->eof, sizeof(my->eof), my->label_eof);
  }
  
  static
  void sa_writeerror(al_t *al, private_t *my)
  {
      al_splice(al, 0, al_bytes(al), NULL, NULL);
      al_append_bytes(al, &my->error, sizeof(my->error), my->label_error);
  }
  
  static
  sio_rc_t sa_input(sio_t *sio, al_t *al, void *u)
  {
      private_t *my = (private_t *)u;
      buffer_t *buf = &my->input;
      size_t actual;
      sa_rc_t src;
  
      src = sa_read(my->sa, buf->mem, buf->size, &actual);
      if (src != SA_OK) {
          sa_writeerror(al, my);
          return SIO_DOWNSTREAM;
      } else if (src == SA_ERR_EOF) {
          sa_writeeof(al, my);
          return SIO_DOWNSTREAM;
      }
  
      al_append_bytes(al, buf->mem, actual, my->label_data);
  
      return SIO_DOWNSTREAM;
  }
  
  static
  al_rc_t sa_output_chunk(al_chunk_t *alc, void *u)
  {
      private_t *my = (private_t *)u;
      char   *p;
      size_t n, actual;
      sa_rc_t src;
  
      p = al_chunk_ptr(alc, 0);
      n = al_chunk_len(alc);
  
      src = sa_write(my->sa, p, n, &actual);
      if (src != SA_OK)
          return AL_ERR_EOF;
  
      my->written += actual; /* XXX not used */
  
      return AL_OK;
  }
  
  static
  sio_rc_t sa_output(sio_t *sio, al_t *al, void *u)
  {
      private_t *my = (private_t *)u;
      al_rc_t arc;
      size_t n = al_bytes(al);
  
      my->written = 0;
  
      arc = al_traverse_cb(al, 0, n, AL_FORWARD, my->label_data,
                           sa_output_chunk, u);
      if (arc != AL_OK) return SIO_ERR_INT;
  
      arc = al_splice(al, 0, al_bytes(al), NULL, NULL);
      if (arc != AL_OK) return SIO_ERR_INT;
  
      return SIO_DOWNSTREAM;
  }
  
  sio_module_t sio_module_sa = {
      "sa",
      sa_init,
      sa_configure,
      sa_cleanup,
      sa_openr,
      sa_closer,
      sa_openw,
      sa_closew,
      sa_input,
      sa_output
  };
  
  
  Index: ossp-pkg/sio/sio_test.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 sio_test.c
  --- ossp-pkg/sio/sio_test.c	23 Oct 2002 17:05:10 -0000	1.1
  +++ ossp-pkg/sio/sio_test.c	5 Nov 2002 13:23:36 -0000	1.2
  @@ -3,44 +3,85 @@
   #include "al.h"
   #include "sio.h"
   
  -extern sio_module_t sio_module_fd;
  +#include "sa.h"
  +
  +extern sio_module_t sio_module_sa;
  +extern sio_module_t sio_module_hello;
   extern sio_module_t sio_module_buffer;
   
   #define e(f) rc = f; printf("%s = %s\n",#f, sio_error(rc)); fflush(stdout);
  +#define s(f) src = f; printf("%s = %s\n",#f, sa_error(src)); fflush(stdout);
   
   int main(int argc, char *argv[])
   {
       sio_rc_t rc;
       sio_t *sio;
  -    sio_stage_t *sios_fd, *sios_buffer;
  -    int fd;
  +    sio_stage_t *sios_sa, *sios_hello, *sios_buffer;
  +
  +    sa_rc_t src;
  +    sa_addr_t *saa;
  +    sa_t *msa, *sa;
  +    char *uri;
  +
       char buf[] = "Hello world\n";
  +
       size_t actual;
  -    size_t buflen = 1000;
  +    size_t buflen;
   
  -    fd = fileno(stdout);
  +    s(sa_create(&msa));
  +    s(sa_option(msa, SA_OPTION_REUSEADDR, 1));
   
  -    e(sio_create(&sio));
  +    s(sa_addr_create(&saa));
  +    uri = "inet://localhost:25001#tcp";
  +    s(sa_addr_u2a(saa, uri));
  +    s(sa_bind(msa,saa));
  +    s(sa_addr_destroy(saa));
  +    uri = NULL;
   
  +    e(sio_create(&sio));
  +    e(sio_create_stage(sio, &sio_module_sa, &sios_sa));
  +    e(sio_create_stage(sio, &sio_module_hello, &sios_hello));
       e(sio_create_stage(sio, &sio_module_buffer, &sios_buffer));
  +
  +    buflen = 256;
  +    e(sio_configure_stage(sio, sios_sa, "buflen", &buflen));
  +
  +    buflen = 1000;
       e(sio_configure_stage(sio, sios_buffer, "outputsize", &buflen));
  -    e(sio_create_stage(sio, &sio_module_fd, &sios_fd));
  -    e(sio_configure_stage(sio, sios_fd, "fd", &fd));
   
  -    e(sio_attach(sio, sios_buffer, SIO_MODE_WRITE));
  -    e(sio_attach(sio, sios_fd, SIO_MODE_WRITE));
  +    s(sa_listen(msa, 5));
  +
  +    for(;;) {
  +
  +        s(sa_accept(msa, &saa, &sa));
  +        s(sa_addr_a2u(saa, &uri));
  +        printf("Connection from %s\n",uri);
  +        s(sa_addr_destroy(saa));
  +
  +        e(sio_configure_stage(sio, sios_sa, "sa", sa));
   
  -    e(sio_write(sio, buf, sizeof(buf)-1, &actual));
  +        e(sio_attach(sio, sios_buffer, SIO_MODE_WRITE));
  +        e(sio_attach(sio, sios_hello, SIO_MODE_READWRITE));
  +        e(sio_attach(sio, sios_sa, SIO_MODE_READWRITE));
   
  -    e(sio_push(sio));
  +        e(sio_write(sio, buf, sizeof(buf)-1, &actual));
  +        e(sio_push(sio));
  +
  +        e(sio_detach(sio, sios_sa));
  +        e(sio_detach(sio, sios_hello));
  +        e(sio_detach(sio, sios_buffer));
  +
  +        sa_destroy(sa);
  +    }
   
  -    e(sio_detach(sio, sios_fd));
  -    e(sio_detach(sio, sios_buffer));
   
  -    e(sio_destroy_stage(sio, sios_fd));
       e(sio_destroy_stage(sio, sios_buffer));
  +    e(sio_destroy_stage(sio, sios_hello));
  +    e(sio_destroy_stage(sio, sios_sa));
   
       e(sio_destroy(sio));
  +
  +    sa_destroy(msa);
   
       return 0;
   }

From ossp-cvs-owner@ossp.org  Tue Nov  5 15:51:38 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D7FCA76482; Tue,  5 Nov 2002 15:51:37 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.c
Message-Id: <20021105145137.D7FCA76482@mail.ossp.org>
Date: Tue,  5 Nov 2002 15:51:37 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   05-Nov-2002 15:51:37
  Branch: HEAD                             Handle: 2002110514513700

  Modified files:
    ossp-pkg/sio            al.c

  Log:
    size_t is unsigned -> get rid of possible negative offsets that weren't used
    anywhere. remove sanity checks for 'unsigned < 0'.

  Summary:
    Revision    Changes     Path
    1.34        +1  -5      ossp-pkg/sio/al.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.c
  ============================================================
  $ cvs diff -u -r1.33 -r1.34 al.c
  --- ossp-pkg/sio/al.c	4 Nov 2002 13:14:50 -0000	1.33
  +++ ossp-pkg/sio/al.c	5 Nov 2002 14:51:37 -0000	1.34
  @@ -291,7 +291,7 @@
       al_chunk_t *alc;
       size_t len = AL_CHUNK_LEN(orig);
   
  -    if (off < 0 || off > len)
  +    if (off > len)
           return AL_ERR_ARG;
   
       rc = new_chunk(al, orig->buf, orig->label, &alc);
  @@ -326,7 +326,6 @@
   
   /*
    *  find chunk that represents a particular offset
  - *  if off is negative, treat it as relative offset from the end
    *  a reference to the chunk is stored in *alcp
    *  the relative offset into the chunk is stored in *skipp
    *  return AL_OK and *alcp == NULL if positioned exactly to end of list
  @@ -338,9 +337,6 @@
       al_chunk_t *cur;
       size_t pos, end;
       size_t chunksize;
  -
  -    if (off < 0) /* off is negative */
  -        off += al->bytes;
   
       if ((al->bytes / 2) >= off) { /* FIXME poor man's heuristic */
           /* forward search */

From ossp-cvs-owner@ossp.org  Tue Nov  5 15:52:25 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 569C776482; Tue,  5 Nov 2002 15:52:25 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al_test.c
Message-Id: <20021105145225.569C776482@mail.ossp.org>
Date: Tue,  5 Nov 2002 15:52:25 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   05-Nov-2002 15:52:25
  Branch: HEAD                             Handle: 2002110514522400

  Modified files:
    ossp-pkg/sio            al_test.c

  Log:
    fix parameter
    remove compiler warning (signed/unsigned comparison)

  Summary:
    Revision    Changes     Path
    1.16        +5  -4      ossp-pkg/sio/al_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al_test.c
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 al_test.c
  --- ossp-pkg/sio/al_test.c	23 Oct 2002 16:49:29 -0000	1.15
  +++ ossp-pkg/sio/al_test.c	5 Nov 2002 14:52:24 -0000	1.16
  @@ -46,10 +46,11 @@
   static const char *fill(char *p, int n)
   {
       static char buf[4 * 80 + 1];
  +    int max = sizeof(buf)-5;
       int k;
   
       k=0;
  -    while (n > 0 && k < sizeof(buf)-5) {
  +    while (n > 0 && k < max) {
           if (isprint(*p)) {
               buf[k] = *p;
               k += 1;
  @@ -95,11 +96,10 @@
   
   static void print(const char *tag, al_t *al)
   {
  +#if 0
       char *buf;
       size_t n, len;
   
  -    return;
  -
       n = al_bytes(al);
       buf = (char *)malloc(n);
       if (buf == NULL) abort();
  @@ -113,6 +113,7 @@
       printf("\n\n");
   
       free(buf);
  +#endif
   }
   
   static void checklen(const char *tag, al_t *al)
  @@ -124,7 +125,7 @@
       total = 0;
   
       al_txalloc(al, &tx);
  -    al_traverse(al, 0, -1, AL_FORWARD, NULL, tx);
  +    al_traverse(al, 0, al_bytes(al), AL_FORWARD, NULL, tx);
       while (al_traverse_next(al, tx, &cur) == AL_OK)
           total += al_chunk_len(cur);
       al_traverse_end(al, tx, 1);

From ossp-cvs-owner@ossp.org  Tue Nov  5 16:48:58 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0644F76482; Tue,  5 Nov 2002 16:48:57 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio.c
Message-Id: <20021105154857.0644F76482@mail.ossp.org>
Date: Tue,  5 Nov 2002 16:48:57 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   05-Nov-2002 16:48:57
  Branch: HEAD                             Handle: 2002110515485700

  Modified files:
    ossp-pkg/sio            sio.c

  Log:
    code cleanup

  Summary:
    Revision    Changes     Path
    1.5         +4  -7      ossp-pkg/sio/sio.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 sio.c
  --- ossp-pkg/sio/sio.c	5 Nov 2002 13:23:36 -0000	1.4
  +++ ossp-pkg/sio/sio.c	5 Nov 2002 15:48:57 -0000	1.5
  @@ -77,9 +77,9 @@
       sio_labelnum_t             label_error;
       sio_labelnum_t             label_eof;
   };
  -#define SIO_LABEL_DATA(sio)  ((void*)&(sio)->label_data)
  -#define SIO_LABEL_ERROR(sio) ((void*)&(sio)->label_error)
  -#define SIO_LABEL_EOF(sio)   ((void*)&(sio)->label_eof)
  +#define SIO_LABEL_DATA(sio)  ((al_label_t *)&(sio)->label_data)
  +#define SIO_LABEL_ERROR(sio) ((al_label_t *)&(sio)->label_error)
  +#define SIO_LABEL_EOF(sio)   ((al_label_t *)&(sio)->label_eof)
   
   struct sio_stage_st {
       sio_halfduplex_t reader;
  @@ -497,12 +497,9 @@
       if (arc != AL_OK) return SIO_RC(SIO_ERR_INT);
   
       rc = sio_input(sio, al, n);
  -    if (rc == AL_OK) {
  +    if (rc == SIO_OK)
           arc = al_flatten(al, 0, n, AL_FORWARD_SPAN, SIO_LABEL_DATA(sio),
                            dst, actualp);
  -        if (arc != AL_OK)
  -            rc = SIO_ERR_INT;
  -    }
   
       arc = al_destroy(al);
       if (arc != AL_OK) return SIO_RC(SIO_ERR_INT);

From ossp-cvs-owner@ossp.org  Tue Nov  5 16:52:22 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 34EC776482; Tue,  5 Nov 2002 16:52:22 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio.c sio_buffer.c sio_fd.c sio_hello.c sio_m...
Message-Id: <20021105155222.34EC776482@mail.ossp.org>
Date: Tue,  5 Nov 2002 16:52:22 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   05-Nov-2002 16:52:22
  Branch: HEAD                             Handle: 2002110515522100

  Modified files:
    ossp-pkg/sio            sio.c sio_buffer.c sio_fd.c sio_hello.c
                            sio_module.h sio_sa.c

  Log:
    code cleanup

  Summary:
    Revision    Changes     Path
    1.6         +4  -4      ossp-pkg/sio/sio.c
    1.2         +53 -31     ossp-pkg/sio/sio_buffer.c
    1.3         +43 -37     ossp-pkg/sio/sio_fd.c
    1.2         +2  -2      ossp-pkg/sio/sio_hello.c
    1.3         +1  -1      ossp-pkg/sio/sio_module.h
    1.2         +34 -34     ossp-pkg/sio/sio_sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 sio.c
  --- ossp-pkg/sio/sio.c	5 Nov 2002 15:48:57 -0000	1.5
  +++ ossp-pkg/sio/sio.c	5 Nov 2002 15:52:21 -0000	1.6
  @@ -77,9 +77,9 @@
       sio_labelnum_t             label_error;
       sio_labelnum_t             label_eof;
   };
  -#define SIO_LABEL_DATA(sio)  ((al_label_t *)&(sio)->label_data)
  -#define SIO_LABEL_ERROR(sio) ((al_label_t *)&(sio)->label_error)
  -#define SIO_LABEL_EOF(sio)   ((al_label_t *)&(sio)->label_eof)
  +#define SIO_LABEL_DATA(sio)  ((al_label_t)&(sio)->label_data)
  +#define SIO_LABEL_ERROR(sio) ((al_label_t)&(sio)->label_error)
  +#define SIO_LABEL_EOF(sio)   ((al_label_t)&(sio)->label_eof)
   
   struct sio_stage_st {
       sio_halfduplex_t reader;
  @@ -551,7 +551,7 @@
       return mess;
   }
   
  -sio_rc_t sio_label(sio_t *sio, sio_labelnum_t ln, void **p)
  +sio_rc_t sio_label(sio_t *sio, sio_labelnum_t ln, al_label_t *p)
   {
       void *label;
   
  Index: ossp-pkg/sio/sio_buffer.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 sio_buffer.c
  --- ossp-pkg/sio/sio_buffer.c	23 Oct 2002 17:05:10 -0000	1.1
  +++ ossp-pkg/sio/sio_buffer.c	5 Nov 2002 15:52:21 -0000	1.2
  @@ -11,6 +11,7 @@
       al_tx_t *outputtx;
       size_t inputsize;
       al_t *input, *output;
  +    al_label_t data_label;
   } private_t;
   
   /*
  @@ -21,16 +22,18 @@
   static
   sio_rc_t buffer_init(sio_t *sio, void **u)
   {
  -    private_t *mydata;
  +    private_t *my;
       
  -    mydata = (private_t *)malloc(sizeof(private_t));
  -    if (mydata == NULL)
  +    my = (private_t *)malloc(sizeof(private_t));
  +    if (my == NULL)
           return SIO_ERR_MEM;
   
  -    mydata->inputsize    = 0;
  -    mydata->outputsize   = 0;
  +    my->inputsize    = 0;
  +    my->outputsize   = 0;
   
  -    *u = mydata;
  +    sio_label(sio, SIO_LN_DATA, &my->data_label);
  +
  +    *u = my;
   
       return SIO_OK;
   }
  @@ -43,13 +46,13 @@
   static
   sio_rc_t buffer_configure(sio_t *sio, void *u, void *obj, void *val)
   {
  -    private_t *mydata = (private_t *)u;
  +    private_t *my = (private_t *)u;
       const char *name = (const char *)obj;
   
       if (!strcmp(name, "inputsize")) {
  -        mydata->inputsize = *(size_t *)val;
  +        my->inputsize = *(size_t *)val;
       } else if (!strcmp(name, "outputsize")) {
  -        mydata->outputsize = *(size_t *)val;
  +        my->outputsize = *(size_t *)val;
       } else {
           return SIO_ERR_ARG;
       }
  @@ -63,9 +66,9 @@
   static
   sio_rc_t buffer_cleanup(sio_t *sio, void *u)
   {
  -    private_t *mydata = (private_t *)u;
  +    private_t *my = (private_t *)u;
   
  -    free(mydata);
  +    free(my);
   
       return SIO_OK;
   }
  @@ -73,10 +76,10 @@
   static
   sio_rc_t buffer_openr(sio_t *sio, al_t *al, void *u)
   {
  -    private_t *mydata = (private_t *)u;
  +    private_t *my = (private_t *)u;
       al_rc_t arc;
   
  -    arc = al_create(&mydata->input);
  +    arc = al_create(&my->input);
       if (arc != AL_OK)
           return SIO_ERR_INT;
   
  @@ -86,10 +89,10 @@
   static
   sio_rc_t buffer_closer(sio_t *sio, al_t *al, void *u)
   {
  -    private_t *mydata = (private_t *)u;
  +    private_t *my = (private_t *)u;
   
  -    al_destroy(mydata->input);
  -    mydata->input = NULL;
  +    al_destroy(my->input);
  +    my->input = NULL;
   
       return SIO_OK;
   }
  @@ -97,16 +100,16 @@
   static
   sio_rc_t buffer_openw(sio_t *sio, al_t *al, void *u)
   {
  -    private_t *mydata = (private_t *)u;
  +    private_t *my = (private_t *)u;
       al_rc_t arc;
   
  -    arc = al_txalloc(al, &mydata->outputtx);
  +    arc = al_txalloc(al, &my->outputtx);
       if (arc != AL_OK)
           return SIO_ERR_INT;
   
  -    arc = al_create(&mydata->output);
  +    arc = al_create(&my->output);
       if (arc != AL_OK) {
  -        al_txfree(al, mydata->outputtx);
  +        al_txfree(al, my->outputtx);
           return SIO_ERR_INT;
       }
   
  @@ -116,18 +119,29 @@
   static
   sio_rc_t buffer_closew(sio_t *sio, al_t *al, void *u)
   {
  -    private_t *mydata = (private_t *)u;
  +    private_t *my = (private_t *)u;
   
  -    al_destroy(mydata->output);
  -    mydata->output = NULL;
  -    al_txfree(al, mydata->outputtx);
  -    mydata->outputtx = NULL;
  +    al_destroy(my->output);
  +    my->output = NULL;
  +    al_txfree(al, my->outputtx);
  +    my->outputtx = NULL;
   
       return SIO_OK;
   }
   
  +/*
  + * buffer logic
  + *
  + * gather data from producer
  + * if buffer size reached or label changes then push data to consumer
  + * (read -> downstream, write -> upstream)
  + *
  + * buffer size depends on label type
  + *
  + */
   static
  -sio_rc_t buffer_inout(sio_t *sio, al_t *al, al_t *buf, size_t size,
  +sio_rc_t buffer_inout(sio_t *sio, al_t *al, private_t *my,
  +                      al_t *buf, size_t size,
                         sio_rc_t up, sio_rc_t down)
   {
       size_t avail, data, needed;
  @@ -148,7 +162,13 @@
   
       al_flatten(buf, 0, avail, AL_FORWARD_SPAN, label, NULL, &data);
   
  -    needed = size;
  +    /* non-data is not buffered */
  +    if (label == my->data_label)
  +        needed = size;
  +    else
  +        needed = 1;
  +
  +    /* flush if there is extra data (that must have a different label) */
       if (data < avail)
           needed = 1;
   
  @@ -165,18 +185,20 @@
   static
   sio_rc_t buffer_input(sio_t *sio, al_t *al, void *u)
   {
  -    private_t *mydata = (private_t *)u;
  +    private_t *my = (private_t *)u;
   
  -    return buffer_inout(sio, al, mydata->input, mydata->inputsize,
  +    return buffer_inout(sio, al, my,
  +                        my->input, my->inputsize,
                           SIO_DOWNSTREAM, SIO_UPSTREAM);
   }
   
   static
   sio_rc_t buffer_output(sio_t *sio, al_t *al, void *u)
   {
  -    private_t *mydata = (private_t *)u;
  +    private_t *my = (private_t *)u;
   
  -    return buffer_inout(sio, al, mydata->output, mydata->outputsize,
  +    return buffer_inout(sio, al, my,
  +                        my->output, my->outputsize,
                           SIO_UPSTREAM, SIO_DOWNSTREAM);
   }
   
  Index: ossp-pkg/sio/sio_fd.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 sio_fd.c
  --- ossp-pkg/sio/sio_fd.c	23 Oct 2002 17:05:10 -0000	1.2
  +++ ossp-pkg/sio/sio_fd.c	5 Nov 2002 15:52:21 -0000	1.3
  @@ -18,9 +18,10 @@
       int fd;
       buffer_t input;
       size_t written;
  -    void *label_data;
  -    void *label_error;
  -    void *label_eof;
  +    al_label_t data_label;
  +    al_label_t error_label;
  +    al_label_t eof_label;
  +    char eof, error;
   } private_t;
   
   /*
  @@ -31,22 +32,25 @@
   static
   sio_rc_t fd_init(sio_t *sio, void **u)
   {
  -    private_t *mydata;
  +    private_t *my;
       
  -    mydata = (private_t *)malloc(sizeof(private_t));
  -    if (mydata == NULL)
  +    my = (private_t *)malloc(sizeof(private_t));
  +    if (my == NULL)
           return SIO_ERR_MEM;
   
  -    mydata->fd           = -1;
  +    my->fd           = -1;
   
  -    mydata->input.mem    = NULL;
  -    mydata->input.size   = 0;
  +    my->input.mem    = NULL;
  +    my->input.size   = 0;
   
  -    sio_label(sio, SIO_LN_DATA,  &mydata->label_data);
  -    sio_label(sio, SIO_LN_ERROR, &mydata->label_error);
  -    sio_label(sio, SIO_LN_EOF,   &mydata->label_eof);
  +    sio_label(sio, SIO_LN_DATA,  &my->data_label);
  +    sio_label(sio, SIO_LN_ERROR, &my->error_label);
  +    sio_label(sio, SIO_LN_EOF,   &my->eof_label);
   
  -    *u = mydata;
  +    my->eof          = '\0';
  +    my->error        = '\0';
  +
  +    *u = my;
   
       return SIO_OK;
   }
  @@ -58,13 +62,13 @@
   static
   sio_rc_t fd_configure(sio_t *sio, void *u, void *obj, void *val)
   {
  -    private_t *mydata = (private_t *)u;
  +    private_t *my = (private_t *)u;
       const char *name = (const char *)obj;
   
       if (!strcmp(name, "fd")) {
  -        mydata->fd = *(int *)val;
  +        my->fd = *(int *)val;
       } else if (!strcmp(name, "buflen")) {
  -        mydata->input.size = *(size_t *)val;
  +        my->input.size = *(size_t *)val;
       } else {
           return SIO_ERR_ARG;
       }
  @@ -84,8 +88,8 @@
   static
   sio_rc_t fd_openr(sio_t *sio, al_t *al, void *u)
   {
  -    private_t *mydata = (private_t *)u;
  -    buffer_t *buf = &mydata->input;
  +    private_t *my = (private_t *)u;
  +    buffer_t *buf = &my->input;
       char *p;
       size_t n;
   
  @@ -103,8 +107,8 @@
   static
   sio_rc_t fd_closer(sio_t *sio, al_t *al, void *u)
   {
  -    private_t *mydata = (private_t *)u;
  -    buffer_t *buf = &mydata->input;
  +    private_t *my = (private_t *)u;
  +    buffer_t *buf = &my->input;
   
       if (buf->mem != NULL) {
           free(buf->mem);
  @@ -129,20 +133,20 @@
   static
   sio_rc_t fd_input(sio_t *sio, al_t *al, void *u)
   {
  -    private_t *mydata = (private_t *)u;
  -    buffer_t *buf = &mydata->input;
  +    private_t *my = (private_t *)u;
  +    buffer_t *buf = &my->input;
       size_t actual;
   
  -    actual = read(mydata->fd, buf->mem, buf->size);
  +    actual = read(my->fd, buf->mem, buf->size);
       if (actual < 0) {
  -        al_append_bytes(al, NULL, 0, mydata->label_error);
  -        return SIO_OK;
  +        al_appendbytes(al, &my->eof, sizeof(my->eof), my->error_label);
  +        return SIO_DOWNSTREAM;
       } else if (actual == 0) {
  -        al_append_bytes(al, NULL, 0, mydata->label_eof);
  -        return SIO_OK;
  +        al_appendbytes(al, &my->error, sizeof(my->error), my->eof_label);
  +        return SIO_DOWNSTREAM;
       }
   
  -    al_append_bytes(al, buf->mem, actual, mydata->label_data);
  +    al_append_bytes(al, buf->mem, actual, my->data_label);
   
       return SIO_DOWNSTREAM;
   }
  @@ -150,18 +154,18 @@
   static
   al_rc_t fd_output_chunk(al_chunk_t *alc, void *u)
   {
  -    private_t *mydata = (private_t *)u;
  +    private_t *my = (private_t *)u;
       char   *p;
       size_t n, actual;
   
       p = al_chunk_ptr(alc, 0);
       n = al_chunk_len(alc);
   
  -    actual = write(mydata->fd, p, n);
  +    actual = write(my->fd, p, n);
       if (actual < 0)
           return AL_ERR_EOF;
   
  -    mydata->written += actual;
  +    my->written += actual;
   
       return AL_OK;
   }
  @@ -169,18 +173,20 @@
   static
   sio_rc_t fd_output(sio_t *sio, al_t *al, void *u)
   {
  -    private_t *mydata = (private_t *)u;
  +    private_t *my = (private_t *)u;
       al_rc_t arc;
       size_t n = al_bytes(al);
   
  -    mydata->written = 0;
  +    my->written = 0;
   
  -    arc = al_traverse_cb(al, 0, n, AL_FORWARD, mydata->label_data,
  +    arc = al_traverse_cb(al, 0, n, AL_FORWARD, my->data_label,
                            fd_output_chunk, u);
  -    if (arc != AL_OK) return SIO_ERR_INT;
  +    if (arc != AL_OK)
  +        return SIO_ERR_DOWNSTREAM;
   
  -    arc = al_splice(al, 0, mydata->written, NULL, NULL);
  -    if (arc != AL_OK) return SIO_ERR_INT;
  +    arc = al_splice(al, 0, my->written, NULL, NULL);
  +    if (arc != AL_OK)
  +        return SIO_ERR_DOWNSTREAM;
   
       return SIO_DOWNSTREAM;
   }
  Index: ossp-pkg/sio/sio_hello.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 sio_hello.c
  --- ossp-pkg/sio/sio_hello.c	5 Nov 2002 13:23:36 -0000	1.1
  +++ ossp-pkg/sio/sio_hello.c	5 Nov 2002 15:52:21 -0000	1.2
  @@ -32,8 +32,8 @@
       int  npass;            /* characters in input buffer */
       al_t *pre;             /* saved output during protocol */
       int isoutput;          /* remember originator of protocol */
  -    void *data_label;      /* al labels used by SIO */
  -    void *eof_label;
  +    al_label_t data_label; /* al labels used by SIO */
  +    al_label_t eof_label;
       char eof;              /* eof label buffer */
   } private_t;
   
  Index: ossp-pkg/sio/sio_module.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 sio_module.h
  --- ossp-pkg/sio/sio_module.h	23 Oct 2002 17:05:10 -0000	1.2
  +++ ossp-pkg/sio/sio_module.h	5 Nov 2002 15:52:21 -0000	1.3
  @@ -17,4 +17,4 @@
       SIO_LN_EOF
   } sio_labelnum_t;
   
  -sio_rc_t sio_label(sio_t *, sio_labelnum_t label, void **labelp);
  +sio_rc_t sio_label(sio_t *, sio_labelnum_t, al_label_t *);
  Index: ossp-pkg/sio/sio_sa.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 sio_sa.c
  --- ossp-pkg/sio/sio_sa.c	5 Nov 2002 13:23:36 -0000	1.1
  +++ ossp-pkg/sio/sio_sa.c	5 Nov 2002 15:52:21 -0000	1.2
  @@ -20,9 +20,9 @@
       sa_t *sa;
       buffer_t input;
       size_t written;
  -    void *label_data;
  -    void *label_error;
  -    void *label_eof;
  +    al_label_t data_label;
  +    al_label_t error_label;
  +    al_label_t eof_label;
       char eof;
       char error;
   } private_t;
  @@ -33,7 +33,7 @@
    * allocate private instance data
    */
   static
  -sio_rc_t sa_init(sio_t *sio, void **u)
  +sio_rc_t saw_init(sio_t *sio, void **u)
   {
       private_t *my;
       
  @@ -46,9 +46,9 @@
       my->input.mem    = NULL;
       my->input.size   = 0;
   
  -    sio_label(sio, SIO_LN_DATA,  &my->label_data);
  -    sio_label(sio, SIO_LN_ERROR, &my->label_error);
  -    sio_label(sio, SIO_LN_EOF,   &my->label_eof);
  +    sio_label(sio, SIO_LN_DATA,  &my->data_label);
  +    sio_label(sio, SIO_LN_ERROR, &my->error_label);
  +    sio_label(sio, SIO_LN_EOF,   &my->eof_label);
   
       my->eof   = '\0';
       my->error = '\0';
  @@ -63,7 +63,7 @@
    *
    */
   static
  -sio_rc_t sa_configure(sio_t *sio, void *u, void *obj, void *val)
  +sio_rc_t saw_configure(sio_t *sio, void *u, void *obj, void *val)
   {
       private_t *my = (private_t *)u;
       const char *name = (const char *)obj;
  @@ -83,13 +83,13 @@
    * destroy stage
    */
   static
  -sio_rc_t sa_cleanup(sio_t *sio, void *u)
  +sio_rc_t saw_cleanup(sio_t *sio, void *u)
   {
       return SIO_OK;
   }
   
   static
  -sio_rc_t sa_openr(sio_t *sio, al_t *al, void *u)
  +sio_rc_t saw_openr(sio_t *sio, al_t *al, void *u)
   {
       private_t *my = (private_t *)u;
       buffer_t *buf = &my->input;
  @@ -108,7 +108,7 @@
   }
   
   static
  -sio_rc_t sa_closer(sio_t *sio, al_t *al, void *u)
  +sio_rc_t saw_closer(sio_t *sio, al_t *al, void *u)
   {
       private_t *my = (private_t *)u;
       buffer_t *buf = &my->input;
  @@ -122,33 +122,33 @@
   }
   
   static
  -sio_rc_t sa_openw(sio_t *sio, al_t *al, void *u)
  +sio_rc_t saw_openw(sio_t *sio, al_t *al, void *u)
   {
       return SIO_OK;
   }
   
   static
  -sio_rc_t sa_closew(sio_t *sio, al_t *al, void *u)
  +sio_rc_t saw_closew(sio_t *sio, al_t *al, void *u)
   {
       return SIO_OK;
   }
   
   static
  -void sa_writeeof(al_t *al, private_t *my)
  +void saw_writeeof(al_t *al, private_t *my)
   {
       al_splice(al, 0, al_bytes(al), NULL, NULL);
  -    al_append_bytes(al, &my->eof, sizeof(my->eof), my->label_eof);
  +    al_append_bytes(al, &my->eof, sizeof(my->eof), my->eof_label);
   }
   
   static
  -void sa_writeerror(al_t *al, private_t *my)
  +void saw_writeerror(al_t *al, private_t *my)
   {
       al_splice(al, 0, al_bytes(al), NULL, NULL);
  -    al_append_bytes(al, &my->error, sizeof(my->error), my->label_error);
  +    al_append_bytes(al, &my->error, sizeof(my->error), my->error_label);
   }
   
   static
  -sio_rc_t sa_input(sio_t *sio, al_t *al, void *u)
  +sio_rc_t saw_input(sio_t *sio, al_t *al, void *u)
   {
       private_t *my = (private_t *)u;
       buffer_t *buf = &my->input;
  @@ -157,20 +157,20 @@
   
       src = sa_read(my->sa, buf->mem, buf->size, &actual);
       if (src != SA_OK) {
  -        sa_writeerror(al, my);
  +        saw_writeerror(al, my);
           return SIO_DOWNSTREAM;
       } else if (src == SA_ERR_EOF) {
  -        sa_writeeof(al, my);
  +        saw_writeeof(al, my);
           return SIO_DOWNSTREAM;
       }
   
  -    al_append_bytes(al, buf->mem, actual, my->label_data);
  +    al_append_bytes(al, buf->mem, actual, my->data_label);
   
       return SIO_DOWNSTREAM;
   }
   
   static
  -al_rc_t sa_output_chunk(al_chunk_t *alc, void *u)
  +al_rc_t saw_output_chunk(al_chunk_t *alc, void *u)
   {
       private_t *my = (private_t *)u;
       char   *p;
  @@ -190,7 +190,7 @@
   }
   
   static
  -sio_rc_t sa_output(sio_t *sio, al_t *al, void *u)
  +sio_rc_t saw_output(sio_t *sio, al_t *al, void *u)
   {
       private_t *my = (private_t *)u;
       al_rc_t arc;
  @@ -198,8 +198,8 @@
   
       my->written = 0;
   
  -    arc = al_traverse_cb(al, 0, n, AL_FORWARD, my->label_data,
  -                         sa_output_chunk, u);
  +    arc = al_traverse_cb(al, 0, n, AL_FORWARD, my->data_label,
  +                         saw_output_chunk, u);
       if (arc != AL_OK) return SIO_ERR_INT;
   
       arc = al_splice(al, 0, al_bytes(al), NULL, NULL);
  @@ -210,15 +210,15 @@
   
   sio_module_t sio_module_sa = {
       "sa",
  -    sa_init,
  -    sa_configure,
  -    sa_cleanup,
  -    sa_openr,
  -    sa_closer,
  -    sa_openw,
  -    sa_closew,
  -    sa_input,
  -    sa_output
  +    saw_init,
  +    saw_configure,
  +    saw_cleanup,
  +    saw_openr,
  +    saw_closer,
  +    saw_openw,
  +    saw_closew,
  +    saw_input,
  +    saw_output
   };
   
   

From ossp-cvs-owner@ossp.org  Tue Nov  5 16:57:51 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D260876482; Tue,  5 Nov 2002 16:57:50 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio_fd.c
Message-Id: <20021105155750.D260876482@mail.ossp.org>
Date: Tue,  5 Nov 2002 16:57:50 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   05-Nov-2002 16:57:50
  Branch: HEAD                             Handle: 2002110515575000

  Modified files:
    ossp-pkg/sio            sio_fd.c

  Log:
    fix typos

  Summary:
    Revision    Changes     Path
    1.4         +4  -4      ossp-pkg/sio/sio_fd.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio_fd.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 sio_fd.c
  --- ossp-pkg/sio/sio_fd.c	5 Nov 2002 15:52:21 -0000	1.3
  +++ ossp-pkg/sio/sio_fd.c	5 Nov 2002 15:57:50 -0000	1.4
  @@ -139,10 +139,10 @@
   
       actual = read(my->fd, buf->mem, buf->size);
       if (actual < 0) {
  -        al_appendbytes(al, &my->eof, sizeof(my->eof), my->error_label);
  +        al_append_bytes(al, &my->eof, sizeof(my->eof), my->error_label);
           return SIO_DOWNSTREAM;
       } else if (actual == 0) {
  -        al_appendbytes(al, &my->error, sizeof(my->error), my->eof_label);
  +        al_append_bytes(al, &my->error, sizeof(my->error), my->eof_label);
           return SIO_DOWNSTREAM;
       }
   
  @@ -182,11 +182,11 @@
       arc = al_traverse_cb(al, 0, n, AL_FORWARD, my->data_label,
                            fd_output_chunk, u);
       if (arc != AL_OK)
  -        return SIO_ERR_DOWNSTREAM;
  +        return SIO_DOWNSTREAM;
   
       arc = al_splice(al, 0, my->written, NULL, NULL);
       if (arc != AL_OK)
  -        return SIO_ERR_DOWNSTREAM;
  +        return SIO_DOWNSTREAM;
   
       return SIO_DOWNSTREAM;
   }

From ossp-cvs-owner@ossp.org  Tue Nov  5 17:05:26 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B08167648D; Tue,  5 Nov 2002 17:05:25 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio_fd.c
Message-Id: <20021105160525.B08167648D@mail.ossp.org>
Date: Tue,  5 Nov 2002 17:05:25 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   05-Nov-2002 17:05:25
  Branch: HEAD                             Handle: 2002110516052500

  Modified files:
    ossp-pkg/sio            sio_fd.c

  Log:
    eat all output, even when write failed. Otherwise sio_buffer will
    insist until we deliver...

  Summary:
    Revision    Changes     Path
    1.5         +3  -2      ossp-pkg/sio/sio_fd.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio_fd.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 sio_fd.c
  --- ossp-pkg/sio/sio_fd.c	5 Nov 2002 15:57:50 -0000	1.4
  +++ ossp-pkg/sio/sio_fd.c	5 Nov 2002 16:05:25 -0000	1.5
  @@ -156,7 +156,8 @@
   {
       private_t *my = (private_t *)u;
       char   *p;
  -    size_t n, actual;
  +    size_t n;
  +    int actual;
   
       p = al_chunk_ptr(alc, 0);
       n = al_chunk_len(alc);
  @@ -184,7 +185,7 @@
       if (arc != AL_OK)
           return SIO_DOWNSTREAM;
   
  -    arc = al_splice(al, 0, my->written, NULL, NULL);
  +    arc = al_splice(al, 0, al_bytes(al), NULL, NULL);
       if (arc != AL_OK)
           return SIO_DOWNSTREAM;
   

From ossp-cvs-owner@ossp.org  Tue Nov  5 17:12:39 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 988CB7648F; Tue,  5 Nov 2002 17:12:39 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio.c
Message-Id: <20021105161239.988CB7648F@mail.ossp.org>
Date: Tue,  5 Nov 2002 17:12:39 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   05-Nov-2002 17:12:39
  Branch: HEAD                             Handle: 2002110516123900

  Modified files:
    ossp-pkg/sio            sio.c

  Log:
    pass through error code from open routines

  Summary:
    Revision    Changes     Path
    1.7         +2  -2      ossp-pkg/sio/sio.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 sio.c
  --- ossp-pkg/sio/sio.c	5 Nov 2002 15:52:21 -0000	1.6
  +++ ossp-pkg/sio/sio.c	5 Nov 2002 16:12:39 -0000	1.7
  @@ -329,7 +329,7 @@
           rc = sios->module->openr(sio, sio->readers.al, sios->userdata);
           if (rc != SIO_OK) {
               sio_destroy_al(sio, rw);
  -            return SIO_ERR_INT;
  +            return SIO_RC(rc);
           }
           ADDTAIL(&sio->readers,hd,&sios->reader);
           freereader = 1;
  @@ -342,7 +342,7 @@
                   sios->module->closer(sio, sio->readers.al, sios->userdata);
               }
               sio_destroy_al(sio, rw);
  -            return SIO_ERR_INT;
  +            return SIO_RC(rc);
           }
           ADDTAIL(&sio->writers,hd,&sios->writer);
       }

From ossp-cvs-owner@ossp.org  Tue Nov  5 17:18:47 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 59E2776482; Tue,  5 Nov 2002 17:18:47 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio_fd.c
Message-Id: <20021105161847.59E2776482@mail.ossp.org>
Date: Tue,  5 Nov 2002 17:18:47 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   05-Nov-2002 17:18:47
  Branch: HEAD                             Handle: 2002110516184600

  Modified files:
    ossp-pkg/sio            sio_fd.c

  Log:
    more sanity checking

  Summary:
    Revision    Changes     Path
    1.6         +3  -0      ossp-pkg/sio/sio_fd.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio_fd.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 sio_fd.c
  --- ossp-pkg/sio/sio_fd.c	5 Nov 2002 16:05:25 -0000	1.5
  +++ ossp-pkg/sio/sio_fd.c	5 Nov 2002 16:18:46 -0000	1.6
  @@ -94,6 +94,9 @@
       size_t n;
   
       n = buf->size;
  +    if (n == 0)
  +        return SIO_ERR_ARG;
  +
       p = realloc(buf->mem, n);
       if (p != NULL)
           buf->mem = p;

From ossp-cvs-owner@ossp.org  Tue Nov  5 17:53:56 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 61ED77648F; Tue,  5 Nov 2002 17:53:56 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio.c
Message-Id: <20021105165356.61ED77648F@mail.ossp.org>
Date: Tue,  5 Nov 2002 17:53:56 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   05-Nov-2002 17:53:56
  Branch: HEAD                             Handle: 2002110516535500

  Modified files:
    ossp-pkg/sio            sio.c

  Log:
    add special state flags (error, eof)
    sio_read now parses assembly line for data and signalling chunks
    and sets flags accordingly.

  Summary:
    Revision    Changes     Path
    1.8         +70 -6      ossp-pkg/sio/sio.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 sio.c
  --- ossp-pkg/sio/sio.c	5 Nov 2002 16:12:39 -0000	1.7
  +++ ossp-pkg/sio/sio.c	5 Nov 2002 16:53:55 -0000	1.8
  @@ -30,6 +30,7 @@
   
   #include <stddef.h>
   #include <stdlib.h>
  +#include <string.h>
   
   #include "al.h"
   #include "sio.h"
  @@ -73,9 +74,12 @@
           LIST(sio_halfduplex_t)  hd;
           al_t                   *al;
       } writers;
  -    sio_labelnum_t             label_data;
  -    sio_labelnum_t             label_error;
  -    sio_labelnum_t             label_eof;
  +    sio_labelnum_t              label_data;
  +    sio_labelnum_t              label_error;
  +    sio_labelnum_t              label_eof;
  +    int                         eof_flag;
  +    int                         error_flag;
  +    char                       *dst;
   };
   #define SIO_LABEL_DATA(sio)  ((al_label_t)&(sio)->label_data)
   #define SIO_LABEL_ERROR(sio) ((al_label_t)&(sio)->label_error)
  @@ -484,6 +488,24 @@
       return SIO_RC(rc);
   }
   
  +al_rc_t sio_readchunk(al_chunk_t *alc, void *u)
  +{
  +    sio_t *sio = (sio_t *)u;
  +    size_t len;
  +
  +    if (al_same_label(alc, SIO_LABEL_DATA(sio))) {
  +        len = al_chunk_len(alc);
  +        memcpy(sio->dst, al_chunk_ptr(alc,0), len);
  +        sio->dst += len;
  +    } else if (al_same_label(alc, SIO_LABEL_ERROR(sio))) {
  +        sio->error_flag = 1;
  +    } else if (al_same_label(alc, SIO_LABEL_EOF(sio))) {
  +        sio->eof_flag = 1;
  +    }
  +
  +    return AL_OK;
  +}
  +
   sio_rc_t sio_read(sio_t *sio, char *dst, size_t n, size_t *actualp)
   {
       al_rc_t arc;
  @@ -497,9 +519,11 @@
       if (arc != AL_OK) return SIO_RC(SIO_ERR_INT);
   
       rc = sio_input(sio, al, n);
  -    if (rc == SIO_OK)
  -        arc = al_flatten(al, 0, n, AL_FORWARD_SPAN, SIO_LABEL_DATA(sio),
  -                         dst, actualp);
  +    if (rc == SIO_OK) {
  +        sio->dst = dst;
  +        al_traverse_cb(al, 0, n, AL_FORWARD, NULL, sio_readchunk, (void*)sio);
  +        *actualp = sio->dst - dst;
  +    }
   
       arc = al_destroy(al);
       if (arc != AL_OK) return SIO_RC(SIO_ERR_INT);
  @@ -529,6 +553,46 @@
       if (arc != AL_OK) return SIO_RC(SIO_ERR_INT);
   
       return SIO_RC(rc);
  +}
  +
  +int sio_flag(sio_t *sio, sio_flag_t fl)
  +{
  +    int rc;
  +
  +    switch (fl) {
  +    case SIO_FLAG_ERROR:
  +        rc = sio->error_flag;
  +        break;
  +    case SIO_FLAG_EOF:
  +        rc = sio->eof_flag;
  +        break;
  +    default:
  +        rc = 0;
  +        break;
  +    }
  +
  +    return rc;
  +}
  +
  +int sio_clearflag(sio_t *sio, sio_flag_t fl)
  +{
  +    int rc;
  +
  +    switch (fl) {
  +    case SIO_FLAG_ERROR:
  +        rc = sio->error_flag;
  +        sio->error_flag = 0;
  +        break;
  +    case SIO_FLAG_EOF:
  +        rc = sio->eof_flag;
  +        sio->eof_flag = 0;
  +        break;
  +    default:
  +        rc = 0;
  +        break;
  +    }
  +
  +    return rc;
   }
   
   const char *sio_error(sio_rc_t rc)

From ossp-cvs-owner@ossp.org  Tue Nov  5 18:20:22 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9A0D57648F; Tue,  5 Nov 2002 18:20:22 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio_hello.c
Message-Id: <20021105172022.9A0D57648F@mail.ossp.org>
Date: Tue,  5 Nov 2002 18:20:22 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   05-Nov-2002 18:20:22
  Branch: HEAD                             Handle: 2002110517202200

  Modified files:
    ossp-pkg/sio            sio_hello.c

  Log:
    comments
    code cleanup

  Summary:
    Revision    Changes     Path
    1.3         +112 -5     ossp-pkg/sio/sio_hello.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio_hello.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 sio_hello.c
  --- ossp-pkg/sio/sio_hello.c	5 Nov 2002 15:52:21 -0000	1.2
  +++ ossp-pkg/sio/sio_hello.c	5 Nov 2002 17:20:22 -0000	1.3
  @@ -197,6 +197,15 @@
   }
   
   /*
  + * kill saved output
  + */
  +static
  +void hello_dropsaved(private_t *my)
  +{
  +    al_splice(my->pre, 0, al_bytes(my->pre), NULL, NULL);
  +}
  +
  +/*
    * write prompt string to output
    */
   static
  @@ -207,6 +216,19 @@
   
   /************************************************************************/
   
  +/*
  + *
  + *   simple protocol
  + *
  + *   send prompt to socket
  + *   wait for password from socket
  + *   if password correct -> normal communication
  + *   else                -> drop output, eof on input
  + *
  + */
  +
  +
  +/* jump to next state */
   #define GOTO(s, c) do { my->state = (s); rc = (c); } while(0)
   
   static
  @@ -216,36 +238,104 @@
       int good;
   
       switch (my->state) {
  +
       case INIT:
  +
  +        /*
  +         * save origin (input, output) so that
  +         * we can complete correctly after handshake
  +         * is done
  +         *
  +         * if caller starts with write, preserve data
  +         *
  +         * if caller starts with read, switch to writer
  +         *
  +         */
           if (isoutput) {
               my->isoutput = 1;
               hello_saveoutput(my);
               GOTO(PROMPTING, SIO_UPSTREAM);
  +            /*
  +             * FALL THROUGH to next state
  +             *
  +             * XXX = fall through is ugly
  +             * XXX + efficient, no extra pass through scheduler
  +             * XXX - scheduler doesn't support loops yet, we
  +             *       could simulate this with extra states that
  +             *       ping-pong back to the "right" side (ugh!)
  +             */
           } else {
               my->isoutput = 0;
               GOTO(PROMPTING, SIO_XSTREAM);
  +            break;
           }
  -        break;
  +        /* FALL THROUGH */
  +
       case PROMPTING:
  +
           assert(isoutput == 1);
  +        /*
  +         *  only called on output stream
  +         *
  +         *  either fall through from INIT as writer
  +         *  or scheduled via SIO_XSTREAM from reader
  +         *  maybe there should be a SIO_STAY ?
  +         *
  +         *  send prompt string, schedule upstream
  +         */
           hello_sendprompt(my);
           GOTO(PROMPTED, SIO_UPSTREAM);
           break;
  +
  +
       case PROMPTED:
  +
           assert(isoutput == 1);
  -        GOTO(WAIT, SIO_XSTREAM);
  +        /*
  +         * only called on output stream
  +         *
  +         * switch back to reader when output is flushed
  +         * otherwise retry upstream
  +         *
  +         */
  +        if (al_bytes(my->al_out) > 0)
  +            GOTO(PROMPTED, SIO_UPSTREAM);
  +        else
  +            GOTO(WAIT, SIO_XSTREAM);
           break;
  +
       case WAIT:
  +
           assert(isoutput == 0);
  +        /*
  +         * only called on input stream
  +         *
  +         * if not enough data and no signalling chunks,
  +         * schedule upstream to deliver more
  +         *
  +         * check password
  +         * if password bad (incomplete or wrong)
  +         *     state will be BAD
  +         *     -> if origin was writer, drop saved initial write
  +         *        schedule writer
  +         *     -> if origin was reader, signal EOF, send downstream
  +         * else
  +         *     state will be GOOD
  +         *     -> if origin was writer, push saved initial write
  +         *        schedule writer
  +         *     -> if origin was reader, default action for reading
  +         *
  +         */
           if (!hello_readpasswd(my))
               GOTO(WAIT, SIO_UPSTREAM);
           else {
               good = my->npass == NPASS &&
                      memcmp(my->passwd, PASSWD, NPASS) == 0;
               if (!good) {
  -                if (my->isoutput)
  +                if (my->isoutput) {
  +                    hello_dropsaved(my);
                       GOTO(BAD, SIO_XSTREAM);
  -                else {
  +                } else {
                       hello_writeeof(my);
                       GOTO(BAD, SIO_DOWNSTREAM);
                   }
  @@ -255,12 +345,29 @@
               } else
                   GOTO(GOOD, SIO_OK);
           }
  -
           break;
  +
       case GOOD:
  +
  +        /*
  +         * default action
  +         *
  +         * on input  -> deliver data downstream, gather data upstream
  +         * on output -> deliver data upstream, gather data downstream
  +         *
  +         */
           GOTO(GOOD, SIO_OK);             /* default action */
           break;
  +
       case BAD:
  +
  +        /*
  +         * black hole
  +         *
  +         * on input  -> signal EOF, send downstream
  +         * on output -> drop data, return downstream
  +         *
  +         */
           if (isoutput)
               hello_clearoutput(my);
           else

From ossp-cvs-owner@ossp.org  Tue Nov  5 18:30:39 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 35AB0764F5; Tue,  5 Nov 2002 18:30:39 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio_buffer.c
Message-Id: <20021105173039.35AB0764F5@mail.ossp.org>
Date: Tue,  5 Nov 2002 18:30:39 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   05-Nov-2002 18:30:39
  Branch: HEAD                             Handle: 2002110517303800

  Modified files:
    ossp-pkg/sio            sio_buffer.c

  Log:
    utilize default action

  Summary:
    Revision    Changes     Path
    1.3         +6  -11     ossp-pkg/sio/sio_buffer.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio_buffer.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 sio_buffer.c
  --- ossp-pkg/sio/sio_buffer.c	5 Nov 2002 15:52:21 -0000	1.2
  +++ ossp-pkg/sio/sio_buffer.c	5 Nov 2002 17:30:38 -0000	1.3
  @@ -141,8 +141,7 @@
    */
   static
   sio_rc_t buffer_inout(sio_t *sio, al_t *al, private_t *my,
  -                      al_t *buf, size_t size,
  -                      sio_rc_t up, sio_rc_t down)
  +                      al_t *buf, size_t size)
   {
       size_t avail, data, needed;
       al_rc_t arc;
  @@ -154,7 +153,7 @@
   
       avail = al_bytes(buf);
       if (avail <= 0)
  -        return down;
  +        return SIO_OK;
   
       arc = al_firstlabel(buf, 0, 1, AL_FORWARD, NULL, &label);
       if (arc != AL_OK)
  @@ -176,10 +175,10 @@
           if (data >= size)
               data = size;
           al_splice(buf, 0, data, NULL, al);
  -        return up;
  +        return SIO_OK;
       }
   
  -    return down;
  +    return SIO_OK;
   }
   
   static
  @@ -187,9 +186,7 @@
   {
       private_t *my = (private_t *)u;
   
  -    return buffer_inout(sio, al, my,
  -                        my->input, my->inputsize,
  -                        SIO_DOWNSTREAM, SIO_UPSTREAM);
  +    return buffer_inout(sio, al, my, my->input, my->inputsize);
   }
   
   static
  @@ -197,9 +194,7 @@
   {
       private_t *my = (private_t *)u;
   
  -    return buffer_inout(sio, al, my,
  -                        my->output, my->outputsize,
  -                        SIO_UPSTREAM, SIO_DOWNSTREAM);
  +    return buffer_inout(sio, al, my, my->output, my->outputsize);
   }
   
   sio_module_t sio_module_buffer = {

From ossp-cvs-owner@ossp.org  Tue Nov  5 19:15:52 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B533F764F5; Tue,  5 Nov 2002 19:15:51 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq Makefile.in kaccelmenuwatch.h karm.cpp top...
Message-Id: <20021105181551.B533F764F5@mail.ossp.org>
Date: Tue,  5 Nov 2002 19:15:51 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   05-Nov-2002 19:15:51
  Branch: HEAD                             Handle: 2002110518155000

  Modified files:
    ossp-pkg/titraq         Makefile.in kaccelmenuwatch.h karm.cpp top.cpp
                            top.h

  Log:
    Strip more KDE.

  Summary:
    Revision    Changes     Path
    1.3         +2  -2      ossp-pkg/titraq/Makefile.in
    1.3         +11 -11     ossp-pkg/titraq/kaccelmenuwatch.h
    1.4         +1  -1      ossp-pkg/titraq/karm.cpp
    1.3         +99 -109    ossp-pkg/titraq/top.cpp
    1.3         +6  -6      ossp-pkg/titraq/top.h
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/Makefile.in
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 Makefile.in
  --- ossp-pkg/titraq/Makefile.in	21 Oct 2002 16:52:21 -0000	1.2
  +++ ossp-pkg/titraq/Makefile.in	5 Nov 2002 18:15:50 -0000	1.3
  @@ -67,9 +67,9 @@
   TARGET_PROGS    = titraq
   TARGET_MANS     = titraq.1 titraq.conf.5
   
  -SRCS            = main.cpp karm.cpp titraq_version.c
  +SRCS            = main.cpp top.cpp karm.cpp titraq_version.c
   
  -OBJS            = main.o karm.o titraq_version.o
  +OBJS            = main.o top.o karm.o titraq_version.o
   
   # Qt meta object compiler
   MOC_IN          = karm.h
  Index: ossp-pkg/titraq/kaccelmenuwatch.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 kaccelmenuwatch.h
  --- ossp-pkg/titraq/kaccelmenuwatch.h	21 Oct 2002 16:52:22 -0000	1.2
  +++ ossp-pkg/titraq/kaccelmenuwatch.h	5 Nov 2002 18:15:50 -0000	1.3
  @@ -9,7 +9,7 @@
   #include <qpopupmenu.h>
   #include <qptrlist.h>
   
  -#include <kaccel.h>
  +#include <qaccel.h>
   
   /**
   * Easy updating of menu accels when changing a @ref KAccel object.
  @@ -29,7 +29,7 @@
   * accelerators, as they are not activated till then.
   *
    @author Sirtaj Singh Kang (taj@kde.org)
  -* @version $Id: kaccelmenuwatch.h,v 1.2 2002/10/21 16:52:22 ms Exp $
  +* @version $Id: kaccelmenuwatch.h,v 1.3 2002/11/05 18:15:50 ms Exp $
   */
   class KAccelMenuWatch : public QObject
   {
  @@ -46,29 +46,29 @@
   
   		// only one of these is used at a time
   		QString		action;
  -		KStdAccel::StdAccel stdAction;
  +//		KStdAccel::StdAccel stdAction;
   		
   	} AccelItem;
   
  -	KAccel		 *_accel;
  +//	KAccel		 *_accel;
   	QPtrList<AccelItem> _accList;
   	QPtrList<QPopupMenu> _menuList;
   
   	QPopupMenu	*_menu;
   
  -	KAccelMenuWatch::AccelItem *newAccelItem( QPopupMenu *menu, 
  -			int itemId, AccelType type );
  +//	KAccelMenuWatch::AccelItem *newAccelItem( QPopupMenu *menu, 
  +//			int itemId, AccelType type );
   
   public:
   	/**
   	* KAccelMenuWatch Constructor
   	*/
  -	KAccelMenuWatch( KAccel *accel, QObject *parent = 0 );
  +//	KAccelMenuWatch( KAccel *accel, QObject *parent = 0 );
   
   	/**
   	* KAccelMenuWatch Destructor
   	*/
  -	virtual ~KAccelMenuWatch() {}
  +//	virtual ~KAccelMenuWatch() {}
   
   	/** 
   	 * Set the menu on which connectAccel calls will operate.
  @@ -93,7 +93,7 @@
   	/** 
   	 * Same as above, but connects to standard accelerators.
   	 */
  -	void connectAccel( int itemId, KStdAccel::StdAccel );
  +//	void connectAccel( int itemId, KStdAccel::StdAccel );
   	
   public slots:
   	/** 
  @@ -106,8 +106,8 @@
   	void removeDeadMenu();
   
   private:
  -	KAccelMenuWatch& operator=( const KAccelMenuWatch& );
  -	KAccelMenuWatch( const KAccelMenuWatch& );
  +//	KAccelMenuWatch& operator=( const KAccelMenuWatch& );
  +//	KAccelMenuWatch( const KAccelMenuWatch& );
   };
   
   #endif // SSK_KACCELMENUWATCH_H
  Index: ossp-pkg/titraq/karm.cpp
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 karm.cpp
  --- ossp-pkg/titraq/karm.cpp	24 Oct 2002 19:07:39 -0000	1.3
  +++ ossp-pkg/titraq/karm.cpp	5 Nov 2002 18:15:50 -0000	1.4
  @@ -353,4 +353,4 @@
     std::cout << "autoSavePeriodChanged!" << std::endl;
   }
   
  -#include "karm.moc"
  +//#include "karm.moc"
  Index: ossp-pkg/titraq/top.cpp
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 top.cpp
  --- ossp-pkg/titraq/top.cpp	21 Oct 2002 16:52:22 -0000	1.2
  +++ ossp-pkg/titraq/top.cpp	5 Nov 2002 18:15:50 -0000	1.3
  @@ -4,39 +4,30 @@
   */
   
   
  -/*
  - * $Id: top.cpp,v 1.2 2002/10/21 16:52:22 ms Exp $
  - */
  -
   #include "top.h"
   #include <qstring.h>
   #include <qkeycode.h>
   #include <qlayout.h>
   #include <qpixmap.h>
   #include <qpopupmenu.h>
  -#include <kconfig.h>
  -#include <kaccel.h>
  -#include <kapplication.h>
  -#include <kdockwindow.h>
  -#include <kglobal.h>
  -#include <kiconloader.h>
  -#include <klocale.h>
  -#include <kmenubar.h>
  -#include <kaction.h>
  -#include <kstdaction.h>
  +#include <qconfig.h>
  +#include <qaccel.h>
  +#include <qapplication.h>
  +#include <qdockwindow.h>
  +#include <qglobal.h>
  +#include <qmenubar.h>
  +#include <qaction.h>
   #include <qvbox.h>
   #include <qtimer.h>
   
   #include "kaccelmenuwatch.h"
   #include "karm.h"
  -#include "print.h"
   #include "task.h"
  -#include "preferences.h"
  -#include <kstatusbar.h>
  +#include <qstatusbar.h>
   
   KarmWindow::KarmWindow() : QMainWindow(0),
  -	_accel( new KAccel( this ) ),
  -	_watcher( new KAccelMenuWatch( _accel, this ) ),
  +//	_accel( new KAccel( this ) ),
  +//	_watcher( new KAccelMenuWatch( _accel, this ) ),
   	_karm( new Karm( this ) ),
   	_totalTime( 0 )
   {
  @@ -47,20 +38,19 @@
     connect(_karm, SIGNAL(selectionChanged  ( QListViewItem * )),this,SLOT(slotSelectionChanged()));
     connect(_karm, SIGNAL( updateButtons() ), this, SLOT(slotSelectionChanged()));
     // status bar
  -  statusBar()->insertItem( i18n( "This session: %1" )
  -                           .arg(QString::fromLatin1("0:00")), 0, 0, true );
  +//  statusBar()->insertItem("This session: %1", 0, 0, true );
   
     // setup PreferenceDialog.
  -  _preferences = Preferences::instance();
  +//  _preferences = Preferences::instance();
   
     // popup menus
     makeMenus();
  -  _watcher->updateMenus();
  +//  _watcher->updateMenus();
   
     // connections
     connect( _karm, SIGNAL(timerTick()), this, SLOT(updateTime()));
   
  -  _preferences->load();
  +//  _preferences->load();
     loadGeometry();
   
     // FIXME: this shouldnt stay. We need to check whether the
  @@ -68,19 +58,19 @@
     // we want to add a task.
     _karm->load();
   
  -  KDockWindow *dockWindow = new KDockWindow(this,"doc widget");
  -  dockWindow->setPixmap( SmallIcon( QString::fromLatin1( "karm" ) ) );
  -  dockWindow->show();
  +//  QDockWindow *dockWindow = new QDockWindow(this,"doc widget");
  +//  dockWindow->setPixmap( SmallIcon( QString::fromLatin1( "karm" ) ) );
  +//  dockWindow->show();
     slotSelectionChanged();
   }
   
   void KarmWindow::slotSelectionChanged()
   {
     Task* item= static_cast<Task *>(_karm->currentItem());
  -  actionDelete->setEnabled(item);
  -  actionEdit->setEnabled(item);
  -  actionStart->setEnabled(item && !item->isRunning());
  -  actionStop->setEnabled(item && item->isRunning());
  +//  actionDelete->setEnabled(item);
  +//  actionEdit->setEnabled(item);
  +//  actionStart->setEnabled(item && !item->isRunning());
  +//  actionStop->setEnabled(item && item->isRunning());
   }
   
   void KarmWindow::save()
  @@ -93,7 +83,7 @@
   {
     _karm->stopAllTimers();
     save();
  -  kapp->quit();
  +//  kapp->quit();
   }
   
   
  @@ -123,119 +113,119 @@
   void KarmWindow::updateStatusBar()
   {
     QString time = Karm::formatTime( _totalTime );
  -  statusBar()->changeItem( i18n("This session: %1" ).arg(time), 0);
  +//  statusBar()->changeItem("This session: %1", 0);
   }
   
  -void KarmWindow::saveProperties( KConfig* )
  -{
  -  _karm->stopAllTimers();
  -  _karm->save();
  -}
  -
  -void KarmWindow::keyBindings()
  -{
  -  KKeyDialog::configureKeys( actionCollection(), xmlFile());
  -}
  +//void KarmWindow::saveProperties( KConfig* )
  +//{
  +//  _karm->stopAllTimers();
  +//  _karm->save();
  +//}
  +
  +//void KarmWindow::keyBindings()
  +//{
  +//  KKeyDialog::configureKeys( actionCollection(), xmlFile());
  +//}
   
   void KarmWindow::resetSessionTime()
   {
     _totalTime = 0;
  -  statusBar()->changeItem( i18n("This session: %1").arg(QString::fromLatin1("0:00")), 0 );
  +//  statusBar()->changeItem("This session: %1", 0 );
   	_karm->resetSessionTimeForAllTasks();
   }
   
   
   void KarmWindow::makeMenus()
   {
  -  KAction
  +  QAction
       *actionKeyBindings,
       *actionResetSession,
       *actionNew,
       *actionNewSub;
   
  -  (void) KStdAction::quit(this, SLOT(quit()), actionCollection());
  -  (void) KStdAction::print(this, SLOT(print()), actionCollection());
  -  actionKeyBindings = KStdAction::keyBindings(this, SLOT(keyBindings()),actionCollection());
  -  (void) KStdAction::preferences(_preferences, SLOT(showDialog()),actionCollection());
  -  (void) KStdAction::save(_preferences, SLOT(save()),actionCollection());
  -  actionResetSession = new KAction(i18n("&Reset Session Times"), CTRL + Key_R,this,
  -                                   SLOT(resetSessionTime()),actionCollection(),
  -                                   "reset_session_time");
  -  actionStart = new KAction(i18n("&Start"), QString::fromLatin1("1rightarrow"),
  -                            Key_S ,_karm,
  -                            SLOT(startTimer()),actionCollection(),"start");
  -  actionStop = new KAction(i18n("S&top"), QString::fromLatin1("stop"),
  -                           Key_Escape,_karm,
  -                           SLOT(stopCurrentTimer()),actionCollection(),"stop");
  -  actionNew = new KAction(i18n("New..."), QString::fromLatin1("filenew"),
  -                             CTRL+Key_N,
  -                             _karm, SLOT(newTask()),
  -                             actionCollection(), "new_task");
  -  actionNewSub = new KAction(i18n("New Subtask..."), QString::fromLatin1("kmultiple"),
  -                             CTRL+ALT+Key_N,
  -                             _karm, SLOT(newSubTask()),
  -                             actionCollection(), "new_sub_task");
  -  actionDelete = new KAction(i18n("&Delete"), QString::fromLatin1("editdelete"),
  -                             Key_Delete,_karm,
  -                             SLOT(deleteTask()),actionCollection(),"delete_task");
  -  actionEdit = new KAction(i18n("&Edit..."), QString::fromLatin1("edit"),
  -                           CTRL + Key_E,_karm,
  -                           SLOT(editTask()),actionCollection(),"edit_task");
  -  createGUI( QString::fromLatin1("karmui.rc") );
  +//  (void) KStdAction::quit(this, SLOT(quit()), actionCollection());
  +//  (void) KStdAction::print(this, SLOT(print()), actionCollection());
  +//  actionKeyBindings = KStdAction::keyBindings(this, SLOT(keyBindings()),actionCollection());
  +//  (void) KStdAction::preferences(_preferences, SLOT(showDialog()),actionCollection());
  +//  (void) KStdAction::save(_preferences, SLOT(save()),actionCollection());
  +//  actionResetSession = new KAction("&Reset Session Times", CTRL + Key_R,this,
  +//                                   SLOT(resetSessionTime()),actionCollection(),
  +//                                   "reset_session_time");
  +//  actionStart = new KAction("&Start", QString::fromLatin1("1rightarrow"),
  +//                            Key_S ,_karm,
  +//                            SLOT(startTimer()),actionCollection(),"start");
  +//  actionStop = new KAction("S&top", QString::fromLatin1("stop"),
  +//                           Key_Escape,_karm,
  +//                           SLOT(stopCurrentTimer()),actionCollection(),"stop");
  +//  actionNew = new KAction("New...", QString::fromLatin1("filenew"),
  +//                             CTRL+Key_N,
  +//                             _karm, SLOT(newTask()),
  +//                             actionCollection(), "new_task");
  +//  actionNewSub = new KAction("New Subtask...", QString::fromLatin1("kmultiple"),
  +//                             CTRL+ALT+Key_N,
  +//                             _karm, SLOT(newSubTask()),
  +//                             actionCollection(), "new_sub_task");
  +//  actionDelete = new KAction("&Delete", QString::fromLatin1("editdelete"),
  +//                             Key_Delete,_karm,
  +//                             SLOT(deleteTask()),actionCollection(),"delete_task");
  +//  actionEdit = new KAction("&Edit...", QString::fromLatin1("edit"),
  +//                           CTRL + Key_E,_karm,
  +//                           SLOT(editTask()),actionCollection(),"edit_task");
  +//  createGUI( QString::fromLatin1("karmui.rc") );
   
     // Tool tops must be set after the createGUI.
  -  actionKeyBindings->setToolTip(i18n("Configure key bindings"));
  -  actionKeyBindings->setWhatsThis(i18n("This will let you configure keybindings which is specific to karm"));
  +//  actionKeyBindings->setToolTip("Configure key bindings");
  +//  actionKeyBindings->setWhatsThis("This will let you configure keybindings which is specific to karm");
   
  -  actionResetSession->setToolTip(i18n("Reset session time"));
  -  actionResetSession->setWhatsThis(i18n("This will reset the session time for all tasks."));
  +//  actionResetSession->setToolTip("Reset session time");
  +//  actionResetSession->setWhatsThis("This will reset the session time for all tasks.");
   
  -  actionStart->setToolTip(i18n("Start timing for selected task"));
  -  actionStart->setWhatsThis(i18n("This will start timing for the selected task.\n"
  -                            "It is even possible to time several tasks simultaneously.\n\n"
  -                            "You may also start timing of a tasks by double clicking the left mouse "
  -                            "button on a given task. This will, however, stop timing of other tasks."));
  +//  actionStart->setToolTip("Start timing for selected task");
  +//  actionStart->setWhatsThis("This will start timing for the selected task.\n"
  +//                            "It is even possible to time several tasks simultaneously.\n\n"
  +//                            "You may also start timing of a tasks by double clicking the left mouse "
  +//                            "button on a given task. This will, however, stop timing of other tasks.");
   
  -  actionStop->setToolTip(i18n("Stop timing of the selected task"));
  -  actionStop->setWhatsThis(i18n("Stop timing of the selected task"));
  +//  actionStop->setToolTip("Stop timing of the selected task");
  +//  actionStop->setWhatsThis("Stop timing of the selected task");
   
  -  actionNew->setToolTip(i18n("Create new top level task"));
  -  actionNew->setWhatsThis(i18n("This will create a new top level task."));
  +//  actionNew->setToolTip("Create new top level task");
  +//  actionNew->setWhatsThis("This will create a new top level task.");
   
  -  actionDelete->setToolTip(i18n("Delete selected task"));
  -  actionDelete->setWhatsThis(i18n("This will delete the selected task and all its subtasks."));
  +//  actionDelete->setToolTip("Delete selected task");
  +//  actionDelete->setWhatsThis("This will delete the selected task and all its subtasks.");
   
  -  actionEdit->setToolTip(i18n("Edit name or times for selected task"));
  -  actionEdit->setWhatsThis(i18n("This will bring up a dialog box where you may edit the parameters for the selected task."));
  +//  actionEdit->setToolTip("Edit name or times for selected task");
  +//  actionEdit->setWhatsThis("This will bring up a dialog box where you may edit the parameters for the selected task.");
     slotSelectionChanged();
   }
   
  -void KarmWindow::print()
  -{
  -  MyPrinter printer(_karm);
  -  printer.print();
  -}
  +//void KarmWindow::print()
  +//{
  +//  MyPrinter printer(_karm);
  +//  printer.print();
  +//}
   
   void KarmWindow::loadGeometry()
   {
  -  KConfig &config = *kapp->config();
  +//  KConfig &config = *kapp->config();
   
  -  config.setGroup( QString::fromLatin1("Main Window Geometry") );
  -  int w = config.readNumEntry( QString::fromLatin1("Width"), 100 );
  -  int h = config.readNumEntry( QString::fromLatin1("Height"), 100 );
  -  w = QMAX( w, sizeHint().width() );
  -  h = QMAX( h, sizeHint().height() );
  -  resize(w, h);
  +//  config.setGroup( QString::fromLatin1("Main Window Geometry") );
  +//  int w = config.readNumEntry( QString::fromLatin1("Width"), 100 );
  +//  int h = config.readNumEntry( QString::fromLatin1("Height"), 100 );
  +//  w = QMAX( w, sizeHint().width() );
  +//  h = QMAX( h, sizeHint().height() );
  +//  resize(w, h);
   }
   
   
   void KarmWindow::saveGeometry()
   {
  -  KConfig &config = *KGlobal::config();
  -  config.setGroup( QString::fromLatin1("Main Window Geometry"));
  -  config.writeEntry( QString::fromLatin1("Width"), width());
  -  config.writeEntry( QString::fromLatin1("Height"), height());
  -  config.sync();
  +//  KConfig &config = *KGlobal::config();
  +//  config.setGroup( QString::fromLatin1("Main Window Geometry"));
  +//  config.writeEntry( QString::fromLatin1("Width"), width());
  +//  config.writeEntry( QString::fromLatin1("Height"), height());
  +//  config.sync();
   }
   
  -#include "top.moc"
  +//#include "top.moc"
  Index: ossp-pkg/titraq/top.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 top.h
  --- ossp-pkg/titraq/top.h	21 Oct 2002 16:52:22 -0000	1.2
  +++ ossp-pkg/titraq/top.h	5 Nov 2002 18:15:50 -0000	1.3
  @@ -5,9 +5,9 @@
   
   class QPopupMenu;
   class Karm;
  -class KAccel;
  -class KAccelMenuWatch;
  -class Preferences;
  +//class KAccel;
  +//class KAccelMenuWatch;
  +//class Preferences;
   class QTimer;
   
   class KarmWindow : public QMainWindow
  @@ -15,11 +15,11 @@
     Q_OBJECT
   
   private:
  -  KAccel		*_accel;
  -  KAccelMenuWatch	*_watcher;
  +//  KAccel		*_accel;
  +//  KAccelMenuWatch	*_watcher;
     Karm		*_karm;
     long		_totalTime;
  -  Preferences *_preferences;
  +//  Preferences *_preferences;
   
     public:
       KarmWindow();

From ossp-cvs-owner@ossp.org  Tue Nov  5 20:39:10 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4BB567648D; Tue,  5 Nov 2002 20:39:10 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog pth.h.in pth.pod pth_event.c pth_hi...
Message-Id: <20021105193910.4BB567648D@mail.ossp.org>
Date: Tue,  5 Nov 2002 20:39:10 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Nov-2002 20:39:10
  Branch: HEAD                             Handle: 2002110519390801

  Modified files:
    ossp-pkg/pth            ChangeLog pth.h.in pth.pod pth_event.c pth_high.c
                            pth_sched.c pth_sync.c pthread.c test_mp.c

  Log:
    1. The function "int pth_event_occurred(pth_event_t)" was replaced
    with "pth_status_t pth_event_status(pth_event_t)" where pth_status_t
    can have values of PTH_STATUS_PENDING (replacing the old FALSE return
    value of pth_event_occurred), PTH_STATUS_OCCURRED (replacing
    the old TRUE return value of pth_event_occurred), and
    PTH_STATUS_FAILED (a new return value indicating an error in
    processing the event). This was scheduler/event-manager errors can
    be indicated which happended while processing the event. For
    backward compatibility reasons, a macro pth_event_occurred() was
    added. This will be removed soon.
    
    2. Use the new PTH_STATUS_FAILED event status in the scheduler's
    event-manager for filedescriptor events if the internal select(2)
    call returned with an error. Additionally this PTH_STATUS_FAILED
    is recognized by the high-level API functions (pth_select, etc)
    and produce the necessary POSIX conforming return codes (usually
    -1 and errno == EBADF).
    
    Parts submitted by: Thanh Luu <tluu@synapcity.com>

  Summary:
    Revision    Changes     Path
    1.588       +20 -0      ossp-pkg/pth/ChangeLog
    1.138       +13 -1      ossp-pkg/pth/pth.h.in
    1.160       +15 -11     ossp-pkg/pth/pth.pod
    1.60        +15 -15     ossp-pkg/pth/pth_event.c
    1.95        +14 -12     ossp-pkg/pth/pth_high.c
    1.83        +67 -9      ossp-pkg/pth/pth_sched.c
    1.38        +1  -1      ossp-pkg/pth/pth_sync.c
    1.62        +1  -1      ossp-pkg/pth/pthread.c
    1.42        +1  -1      ossp-pkg/pth/test_mp.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.587 -r1.588 ChangeLog
  --- ossp-pkg/pth/ChangeLog	3 Nov 2002 19:06:19 -0000	1.587
  +++ ossp-pkg/pth/ChangeLog	5 Nov 2002 19:39:08 -0000	1.588
  @@ -21,6 +21,26 @@
   
     Changes between 1.4.1 and 1.5.0 (27-Jan-2002 to xx-Nov-2002)
   
  +   *) Use the new PTH_STATUS_FAILED event status in the scheduler's
  +      event-manager for filedescriptor events if the internal select(2)
  +      call returned with an error. Additionally this PTH_STATUS_FAILED
  +      is recognized by the high-level API functions (pth_select, etc)
  +      and produce the necessary POSIX conforming return codes (usually
  +      -1 and errno == EBADF).
  +      [Ralf S. Engelschall, Thanh Luu <tluu@synapcity.com>]
  +
  +   *) The function "int pth_event_occurred(pth_event_t)" was replaced
  +      with "pth_status_t pth_event_status(pth_event_t)" where pth_status_t 
  +      can have values of PTH_STATUS_PENDING (replacing the old FALSE return 
  +      value of pth_event_occurred), PTH_STATUS_OCCURRED (replacing
  +      the old TRUE return value of pth_event_occurred), and
  +      PTH_STATUS_FAILED (a new return value indicating an error in
  +      processing the event). This was scheduler/event-manager errors can
  +      be indicated which happended while processing the event. For
  +      backward compatibility reasons, a macro pth_event_occurred() was
  +      added. This will be removed soon.
  +      [Ralf S. Engelschall]
  +
      *) Upgraded to latest version of the OSSP Autoconf macro
         AC_CHECK_EXTLIB in order to fix problems with the current
         Autoconf 2.54 environment.
  Index: ossp-pkg/pth/pth.h.in
  ============================================================
  $ cvs diff -u -r1.137 -r1.138 pth.h.in
  --- ossp-pkg/pth/pth.h.in	3 Nov 2002 16:31:34 -0000	1.137
  +++ ossp-pkg/pth/pth.h.in	5 Nov 2002 19:39:09 -0000	1.138
  @@ -209,6 +209,13 @@
   #define PTH_WALK_NEXT                _BIT(1)
   #define PTH_WALK_PREV                _BIT(2)
   
  +    /* event status codes */
  +typedef enum {
  +    PTH_STATUS_PENDING,
  +    PTH_STATUS_OCCURRED,
  +    PTH_STATUS_FAILED
  +} pth_status_t;
  +
       /* the key type and init value */
   typedef int pth_key_t;
   #define PTH_KEY_INIT (-1)
  @@ -447,7 +454,7 @@
   extern pth_event_t    pth_event_concat(pth_event_t, ...);
   extern pth_event_t    pth_event_isolate(pth_event_t);
   extern pth_event_t    pth_event_walk(pth_event_t, unsigned int);
  -extern int            pth_event_occurred(pth_event_t);
  +extern pth_status_t   pth_event_status(pth_event_t);
   extern int            pth_event_free(pth_event_t, int);
   
       /* key-based storage functions */
  @@ -563,6 +570,11 @@
   #define pread         pth_pread
   #define pwrite        pth_pwrite
   #endif
  +
  +    /* backward compatibility (Pth < 1.5.0) */
  +#define pth_event_occurred(ev) \
  +    (   pth_event_status(ev) == PTH_STATUS_OCCURRED \
  +     || pth_event_status(ev) == PTH_STATUS_FAILED   )
   
   #endif /* _PTH_H_ */
   
  Index: ossp-pkg/pth/pth.pod
  ============================================================
  $ cvs diff -u -r1.159 -r1.160 pth.pod
  --- ossp-pkg/pth/pth.pod	3 Nov 2002 11:15:04 -0000	1.159
  +++ ossp-pkg/pth/pth.pod	5 Nov 2002 19:39:09 -0000	1.160
  @@ -93,7 +93,7 @@
   pth_event_concat,
   pth_event_isolate,
   pth_event_walk,
  -pth_event_occurred,
  +pth_event_status,
   pth_event_free.
   
   =item B<Key-Based Storage>
  @@ -970,11 +970,12 @@
   This is the link between the scheduler and the event facility (see below for
   the various pth_event_xxx() functions). It's modeled like select(2), i.e., one
   gives this function one or more events (in the event ring specified by I<ev>)
  -on which the current thread wants to wait.  The scheduler awakes the thread
  -when one ore more of them occurred after tagging them as occurred. The I<ev>
  -argument is a I<pointer> to an event ring which isn't changed except for the
  -tagging. pth_wait(3) returns the number of occurred events and the application
  -can use pth_event_occurred(3) to test which events occurred.
  +on which the current thread wants to wait. The scheduler awakes the
  +thread when one ore more of them occurred or failed after tagging
  +them as such. The I<ev> argument is a I<pointer> to an event ring
  +which isn't changed except for the tagging. pth_wait(3) returns the
  +number of occurred or failed events and the application can use
  +pth_event_status(3) to test which events occurred or failed.
   
   =item int B<pth_cancel>(pth_t I<tid>);
   
  @@ -1236,12 +1237,15 @@
   OR-ed into I<direction> to walk to the next/previous occurred event in the
   ring I<ev>.
   
  -=item int B<pth_event_occurred>(pth_event_t I<ev>);
  +=item pth_status_t B<pth_event_status>(pth_event_t I<ev>);
   
  -This checks whether the event I<ev> occurred. This is a fast operation because
  -only a tag on I<ev> is checked which was either set or still not set by the
  -scheduler. In other words: This doesn't check the event itself, it just checks
  -the last knowledge of the scheduler.
  +This returns the status of event I<ev>. This is a fast operation
  +because only a tag on I<ev> is checked which was either set or still
  +not set by the scheduler. In other words: This doesn't check the
  +event itself, it just checks the last knowledge of the scheduler. The
  +possible returned status codes are: C<PTH_STATUS_PENDING> (event is
  +still pending), C<PTH_STATUS_OCCURRED> (event successfully occurred),
  +C<PTH_STATUS_FAILED> (event failed).
   
   =item int B<pth_event_free>(pth_event_t I<ev>, int I<mode>);
   
  Index: ossp-pkg/pth/pth_event.c
  ============================================================
  $ cvs diff -u -r1.59 -r1.60 pth_event.c
  --- ossp-pkg/pth/pth_event.c	24 Oct 2002 15:21:13 -0000	1.59
  +++ ossp-pkg/pth/pth_event.c	5 Nov 2002 19:39:09 -0000	1.60
  @@ -34,7 +34,7 @@
   struct pth_event_st {
       struct pth_event_st *ev_next;
       struct pth_event_st *ev_prev;
  -    int ev_occurred;
  +    pth_status_t ev_status;
       int ev_type;
       int ev_goal;
       union {
  @@ -108,7 +108,7 @@
       }
   
       /* initialize common ingredients */
  -    ev->ev_occurred = FALSE;
  +    ev->ev_status = PTH_STATUS_PENDING;
   
       /* initialize event specific ingredients */
       if (spec & PTH_EVENT_FD) {
  @@ -330,12 +330,12 @@
       return ring;
   }
   
  -/* determine whether the event is occurred */
  -int pth_event_occurred(pth_event_t ev)
  +/* determine status of the event */
  +pth_status_t pth_event_status(pth_event_t ev)
   {
       if (ev == NULL)
           return pth_error(FALSE, EINVAL);
  -    return ev->ev_occurred;
  +    return ev->ev_status;
   }
   
   /* walk to next or previous event in an event ring */
  @@ -350,7 +350,7 @@
               ev = ev->ev_prev;
           else
               return pth_error((pth_event_t)NULL, EINVAL);
  -    } while ((direction & PTH_UNTIL_OCCURRED) && !(ev->ev_occurred));
  +    } while ((direction & PTH_UNTIL_OCCURRED) && (ev->ev_status != PTH_STATUS_OCCURRED));
       return ev;
   }
   
  @@ -381,7 +381,7 @@
   /* wait for one or more events */
   int pth_wait(pth_event_t ev_ring)
   {
  -    int occurred;
  +    int nonpending;
       pth_event_t ev;
   
       /* at least a waiting ring is required */
  @@ -389,10 +389,10 @@
           return pth_error(-1, EINVAL);
       pth_debug2("pth_wait: enter from thread \"%s\"", pth_current->name);
   
  -    /* mark all events in waiting ring as still not occurred */
  +    /* mark all events in waiting ring as still pending */
       ev = ev_ring;
       do {
  -        ev->ev_occurred = FALSE;
  +        ev->ev_status = PTH_STATUS_PENDING;
           pth_debug2("pth_wait: waiting on event 0x%lx", (unsigned long)ev);
           ev = ev->ev_next;
       } while (ev != ev_ring);
  @@ -411,19 +411,19 @@
       /* unlink event ring from current thread */
       pth_current->events = NULL;
   
  -    /* count number of actually occurred events */
  +    /* count number of actually occurred (or failed) events */
       ev = ev_ring;
  -    occurred = 0;
  +    nonpending = 0;
       do {
  -        if (ev->ev_occurred) {
  -            pth_debug2("pth_wait: occurred event 0x%lx", (unsigned long)ev);
  -            occurred++;
  +        if (ev->ev_status != PTH_STATUS_PENDING) {
  +            pth_debug2("pth_wait: non-pending event 0x%lx", (unsigned long)ev);
  +            nonpending++;
           }
           ev = ev->ev_next;
       } while (ev != ev_ring);
   
       /* leave to current thread with number of occurred events */
       pth_debug2("pth_wait: leave to thread \"%s\"", pth_current->name);
  -    return occurred;
  +    return nonpending;
   }
   
  Index: ossp-pkg/pth/pth_high.c
  ============================================================
  $ cvs diff -u -r1.94 -r1.95 pth_high.c
  --- ossp-pkg/pth/pth_high.c	25 Oct 2002 11:59:18 -0000	1.94
  +++ ossp-pkg/pth/pth_high.c	5 Nov 2002 19:39:09 -0000	1.95
  @@ -172,7 +172,7 @@
       pth_wait(ev);
       if (ev_extra != NULL) {
           pth_event_isolate(ev);
  -        if (!pth_event_occurred(ev))
  +        if (pth_event_status(ev) != PTH_STATUS_OCCURRED)
               return pth_error(EINTR, EINTR);
       }
   
  @@ -326,7 +326,7 @@
               pth_wait(ev);
               if (ev_extra != NULL) {
                   pth_event_isolate(ev);
  -                if (!pth_event_occurred(ev))
  +                if (pth_event_status(ev) != PTH_STATUS_OCCURRED)
                       return pth_error(-1, EINTR);
               }
           }
  @@ -396,11 +396,11 @@
       pth_wait(ev);
       selected = FALSE;
       pth_event_isolate(ev_select);
  -    if (pth_event_occurred(ev_select))
  +    if (pth_event_status(ev_select) == PTH_STATUS_OCCURRED)
           selected = TRUE;
       if (timeout != NULL) {
           pth_event_isolate(ev_timeout);
  -        if (pth_event_occurred(ev_timeout)) {
  +        if (pth_event_status(ev_timeout) == PTH_STATUS_OCCURRED) {
               selected = TRUE;
               /* POSIX compliance */
               if (rfds != NULL) FD_ZERO(rfds);
  @@ -409,6 +409,8 @@
               rc = 0;
           }
       }
  +    if (pth_event_status(ev_select) == PTH_STATUS_FAILED)
  +        return pth_error(-1, EBADF);
       if (ev_extra != NULL && !selected)
           return pth_error(-1, EINTR);
       return rc;
  @@ -608,7 +610,7 @@
           pth_wait(ev);
           if (ev_extra != NULL) {
               pth_event_isolate(ev);
  -            if (!pth_event_occurred(ev))
  +            if (pth_event_status(ev) != PTH_STATUS_OCCURRED)
                   return pth_error(-1, EINTR);
           }
           errlen = sizeof(err);
  @@ -663,7 +665,7 @@
           /* check for the extra events */
           if (ev_extra != NULL) {
               pth_event_isolate(ev);
  -            if (!pth_event_occurred(ev)) {
  +            if (pth_event_status(ev) != PTH_STATUS_OCCURRED) {
                   pth_fdmode(s, fdmode);
                   return pth_error(-1, EINTR);
               }
  @@ -727,7 +729,7 @@
               n = pth_wait(ev);
               if (ev_extra != NULL) {
                   pth_event_isolate(ev);
  -                if (!pth_event_occurred(ev))
  +                if (pth_event_status(ev) != PTH_STATUS_OCCURRED)
                       return pth_error(-1, EINTR);
               }
           }
  @@ -799,7 +801,7 @@
                   pth_wait(ev);
                   if (ev_extra != NULL) {
                       pth_event_isolate(ev);
  -                    if (!pth_event_occurred(ev)) {
  +                    if (pth_event_status(ev) != PTH_STATUS_OCCURRED) {
                           pth_fdmode(fd, fdmode);
                           return pth_error(-1, EINTR);
                       }
  @@ -889,7 +891,7 @@
               n = pth_wait(ev);
               if (ev_extra != NULL) {
                   pth_event_isolate(ev);
  -                if (!pth_event_occurred(ev))
  +                if (pth_event_status(ev) != PTH_STATUS_OCCURRED)
                       return pth_error(-1, EINTR);
               }
           }
  @@ -1034,7 +1036,7 @@
                   pth_wait(ev);
                   if (ev_extra != NULL) {
                       pth_event_isolate(ev);
  -                    if (!pth_event_occurred(ev)) {
  +                    if (pth_event_status(ev) != PTH_STATUS_OCCURRED) {
                           pth_fdmode(fd, fdmode);
                           if (iovcnt > sizeof(tiov_stack))
                               free(tiov);
  @@ -1314,7 +1316,7 @@
               n = pth_wait(ev);
               if (ev_extra != NULL) {
                   pth_event_isolate(ev);
  -                if (!pth_event_occurred(ev))
  +                if (pth_event_status(ev) != PTH_STATUS_OCCURRED)
                       return pth_error(-1, EINTR);
               }
           }
  @@ -1402,7 +1404,7 @@
                   pth_wait(ev);
                   if (ev_extra != NULL) {
                       pth_event_isolate(ev);
  -                    if (!pth_event_occurred(ev)) {
  +                    if (pth_event_status(ev) != PTH_STATUS_OCCURRED) {
                           pth_fdmode(fd, fdmode);
                           return pth_error(-1, EINTR);
                       }
  Index: ossp-pkg/pth/pth_sched.c
  ============================================================
  $ cvs diff -u -r1.82 -r1.83 pth_sched.c
  --- ossp-pkg/pth/pth_sched.c	3 Nov 2002 11:15:05 -0000	1.82
  +++ ossp-pkg/pth/pth_sched.c	5 Nov 2002 19:39:09 -0000	1.83
  @@ -368,7 +368,7 @@
   }
   
   /*
  - * Look whether some events already occurred and move
  + * Look whether some events already occurred (or failed) and move
    * corresponding threads from waiting queue back to ready queue.
    */
   intern void pth_sched_eventmanager(pth_time_t *now, int dopoll)
  @@ -441,7 +441,7 @@
           /* ...check whether events occurred */
           ev = evh = t->events;
           do {
  -            if (!ev->ev_occurred) {
  +            if (ev->ev_status == PTH_STATUS_PENDING) {
                   this_occurred = FALSE;
   
                   /* Filedescriptor I/O */
  @@ -559,7 +559,7 @@
                   /* tag event if it has occurred */
                   if (this_occurred) {
                       pth_debug2("pth_sched_eventmanager: [non-I/O] event occurred for thread \"%s\"", t->name);
  -                    ev->ev_occurred = TRUE;
  +                    ev->ev_status = PTH_STATUS_OCCURRED;
                       any_occurred = TRUE;
                   }
               }
  @@ -633,7 +633,7 @@
               /* it was an explicit timer event, standing for its own */
               pth_debug2("pth_sched_eventmanager: [timeout] event occurred for thread \"%s\"",
                          nexttimer_thread->name);
  -            nexttimer_ev->ev_occurred = TRUE;
  +            nexttimer_ev->ev_status = PTH_STATUS_OCCURRED;
           }
       }
   
  @@ -655,6 +655,9 @@
          additionally if a thread has one occurred event, we move it from the
          waiting queue to the ready queue */
   
  +    /* pre-configure a raw polling timeout for later checks (see below) */
  +    pth_time_set(&delay, PTH_TIME_ZERO);
  +
       /* for all threads in the waiting queue... */
       t = pth_pqueue_head(&pth_WQ);
       while (t != NULL) {
  @@ -668,7 +671,7 @@
                   /*
                    * Late handling for still not occured events
                    */
  -                if (!ev->ev_occurred) {
  +                if (ev->ev_status == PTH_STATUS_PENDING) {
                       /* Filedescriptor I/O */
                       if (ev->ev_type == PTH_EVENT_FD) {
                           if (   (   ev->ev_goal & PTH_UNTIL_FD_READABLE
  @@ -679,7 +682,33 @@
                                   && FD_ISSET(ev->ev_args.FD.fd, &efds)) ) {
                               pth_debug2("pth_sched_eventmanager: "
                                          "[I/O] event occurred for thread \"%s\"", t->name);
  -                            ev->ev_occurred = TRUE;
  +                            ev->ev_status = PTH_STATUS_OCCURRED;
  +                        }
  +                        else if (rc < 0) {
  +                            /* re-check particular filedescriptor */
  +                            int rc2;
  +                            if (ev->ev_goal & PTH_UNTIL_FD_READABLE)
  +                                FD_SET(ev->ev_args.FD.fd, &rfds);
  +                            if (ev->ev_goal & PTH_UNTIL_FD_WRITEABLE)
  +                                FD_SET(ev->ev_args.FD.fd, &wfds);
  +                            if (ev->ev_goal & PTH_UNTIL_FD_EXCEPTION)
  +                                FD_SET(ev->ev_args.FD.fd, &efds);
  +                            while ((rc2 = pth_sc(select)(ev->ev_args.FD.fd+1, &rfds, &wfds, &efds, &delay)) < 0
  +                                   && errno == EINTR) ;
  +                            if (rc2 > 0) {
  +                                /* cleanup afterwards for next iteration */
  +                                FD_CLR(ev->ev_args.FD.fd, &rfds);
  +                                FD_CLR(ev->ev_args.FD.fd, &wfds);
  +                                FD_CLR(ev->ev_args.FD.fd, &efds);
  +                            } else if (rc2 < 0) {
  +                                /* cleanup afterwards for next iteration */
  +                                FD_ZERO(&rfds);
  +                                FD_ZERO(&wfds);
  +                                FD_ZERO(&efds);
  +                                ev->ev_status = PTH_STATUS_FAILED;
  +                                pth_debug2("pth_sched_eventmanager: "
  +                                           "[I/O] event failed for thread \"%s\"", t->name);
  +                            }
                           }
                       }
                       /* Filedescriptor Set I/O */
  @@ -694,10 +723,39 @@
                                                       ev->ev_args.SELECT.efds, &efds);
                               if (ev->ev_args.SELECT.n != NULL)
                                   *(ev->ev_args.SELECT.n) = n;
  -                            ev->ev_occurred = TRUE;
  +                            ev->ev_status = PTH_STATUS_OCCURRED;
                               pth_debug2("pth_sched_eventmanager: "
                                          "[I/O] event occurred for thread \"%s\"", t->name);
                           }
  +                        else if (rc < 0) {
  +                            /* re-check particular filedescriptor set */
  +                            int rc2;
  +                            fd_set *prfds = NULL;
  +                            fd_set *pwfds = NULL;
  +                            fd_set *pefds = NULL;
  +                            fd_set trfds;
  +                            fd_set twfds;
  +                            fd_set tefds;
  +                            if (ev->ev_args.SELECT.rfds) {
  +                                memcpy(&trfds, ev->ev_args.SELECT.rfds, sizeof(rfds));
  +                                prfds = &trfds;
  +                            }
  +                            if (ev->ev_args.SELECT.wfds) {
  +                                memcpy(&twfds, ev->ev_args.SELECT.wfds, sizeof(wfds));
  +                                pwfds = &twfds;
  +                            }
  +                            if (ev->ev_args.SELECT.efds) {
  +                                memcpy(&tefds, ev->ev_args.SELECT.efds, sizeof(efds));
  +                                pefds = &tefds;
  +                            }
  +                            while ((rc2 = pth_sc(select)(ev->ev_args.SELECT.nfd+1, prfds, pwfds, pefds, &delay)) < 0
  +                                   && errno == EINTR) ;
  +                            if (rc2 < 0) {
  +                                ev->ev_status = PTH_STATUS_FAILED;
  +                                pth_debug2("pth_sched_eventmanager: "
  +                                           "[I/O] event failed for thread \"%s\"", t->name);
  +                            }
  +                        }
                       }
                       /* Signal Set */
                       else if (ev->ev_type == PTH_EVENT_SIGS) {
  @@ -709,7 +767,7 @@
                                       pth_debug2("pth_sched_eventmanager: "
                                                  "[signal] event occurred for thread \"%s\"", t->name);
                                       sigdelset(&pth_sigraised, sig);
  -                                    ev->ev_occurred = TRUE;
  +                                    ev->ev_status = PTH_STATUS_OCCURRED;
                                   }
                               }
                           }
  @@ -731,7 +789,7 @@
                   }
   
                   /* local to global mapping */
  -                if (ev->ev_occurred)
  +                if (ev->ev_status != PTH_STATUS_PENDING)
                       any_occurred = TRUE;
               } while ((ev = ev->ev_next) != evh);
           }
  Index: ossp-pkg/pth/pth_sync.c
  ============================================================
  $ cvs diff -u -r1.37 -r1.38 pth_sync.c
  --- ossp-pkg/pth/pth_sync.c	24 Oct 2002 15:21:14 -0000	1.37
  +++ ossp-pkg/pth/pth_sync.c	5 Nov 2002 19:39:09 -0000	1.38
  @@ -86,7 +86,7 @@
           pth_wait(ev);
           if (ev_extra != NULL) {
               pth_event_isolate(ev);
  -            if (!pth_event_occurred(ev))
  +            if (pth_event_status(ev) == PTH_STATUS_PENDING)
                   return pth_error(FALSE, EINTR);
           }
           if (!(mutex->mx_state & PTH_MUTEX_LOCKED))
  Index: ossp-pkg/pth/pthread.c
  ============================================================
  $ cvs diff -u -r1.61 -r1.62 pthread.c
  --- ossp-pkg/pth/pthread.c	24 Oct 2002 15:21:14 -0000	1.61
  +++ ossp-pkg/pth/pthread.c	5 Nov 2002 19:39:09 -0000	1.62
  @@ -1018,7 +1018,7 @@
       );
       if (!pth_cond_await((pth_cond_t *)(*cond), (pth_mutex_t *)(*mutex), ev))
           return errno;
  -    if (pth_event_occurred(ev))
  +    if (pth_event_status(ev) == PTH_STATUS_OCCURRED)
           return ETIMEDOUT;
       return OK;
   }
  Index: ossp-pkg/pth/test_mp.c
  ============================================================
  $ cvs diff -u -r1.41 -r1.42 test_mp.c
  --- ossp-pkg/pth/test_mp.c	3 Nov 2002 09:24:42 -0000	1.41
  +++ ossp-pkg/pth/test_mp.c	5 Nov 2002 19:39:09 -0000	1.42
  @@ -143,7 +143,7 @@
           else
               evt = pth_event(PTH_EVENT_TIME|PTH_MODE_REUSE, evt, pth_timeout(20,0));
           n = pth_readline_ev(STDIN_FILENO, caLine, MAXLINELEN, evt);
  -        if (n == -1 && pth_event_occurred(evt)) {
  +        if (n == -1 && pth_event_status(evt) == PTH_STATUS_OCCURRED) {
               fprintf(stderr, "main: Hey, what are you waiting for? Type in something!\n");
               continue;
           }

From ossp-cvs-owner@ossp.org  Tue Nov  5 20:43:07 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C4E507648D; Tue,  5 Nov 2002 20:43:06 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth pth_sched.c
Message-Id: <20021105194306.C4E507648D@mail.ossp.org>
Date: Tue,  5 Nov 2002 20:43:06 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Nov-2002 20:43:06
  Branch: HEAD                             Handle: 2002110519430600

  Modified files:
    ossp-pkg/pth            pth_sched.c

  Log:
    fix typo

  Summary:
    Revision    Changes     Path
    1.84        +1  -1      ossp-pkg/pth/pth_sched.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/pth_sched.c
  ============================================================
  $ cvs diff -u -r1.83 -r1.84 pth_sched.c
  --- ossp-pkg/pth/pth_sched.c	5 Nov 2002 19:39:09 -0000	1.83
  +++ ossp-pkg/pth/pth_sched.c	5 Nov 2002 19:43:06 -0000	1.84
  @@ -651,7 +651,7 @@
       }
   
       /* now comes the final cleanup loop where we've to
  -       do two jobs: first we've to the late handling of the fd I/O events and
  +       do two jobs: first we've to do the late handling of the fd I/O events and
          additionally if a thread has one occurred event, we move it from the
          waiting queue to the ready queue */
   

From ossp-cvs-owner@ossp.org  Tue Nov  5 20:47:08 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4AD1D7648F; Tue,  5 Nov 2002 20:47:08 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth pth_high.c
Message-Id: <20021105194708.4AD1D7648F@mail.ossp.org>
Date: Tue,  5 Nov 2002 20:47:08 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Nov-2002 20:47:08
  Branch: HEAD                             Handle: 2002110519470700

  Modified files:
    ossp-pkg/pth            pth_high.c

  Log:
    use even more POSIX conforming semantics

  Summary:
    Revision    Changes     Path
    1.96        +5  -1      ossp-pkg/pth/pth_high.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/pth_high.c
  ============================================================
  $ cvs diff -u -r1.95 -r1.96 pth_high.c
  --- ossp-pkg/pth/pth_high.c	5 Nov 2002 19:39:09 -0000	1.95
  +++ ossp-pkg/pth/pth_high.c	5 Nov 2002 19:47:07 -0000	1.96
  @@ -719,10 +719,12 @@
           delay.tv_usec = 0;
           while ((n = pth_sc(select)(fd+1, &fds, NULL, NULL, &delay)) < 0
                  && errno == EINTR) ;
  +        if (n < 0 && (errno == EINVAL || errno == EBADF))
  +            return pth_error(-1, errno);
   
           /* if filedescriptor is still not readable,
              let thread sleep until it is or the extra event occurs */
  -        if (n < 1) {
  +        if (n == 0) {
               ev = pth_event(PTH_EVENT_FD|PTH_UNTIL_FD_READABLE|PTH_MODE_STATIC, &ev_key, fd);
               if (ev_extra != NULL)
                   pth_event_concat(ev, ev_extra, NULL);
  @@ -789,6 +791,8 @@
           delay.tv_usec = 0;
           while ((n = pth_sc(select)(fd+1, NULL, &fds, NULL, &delay)) < 0
                  && errno == EINTR) ;
  +        if (n < 0 && (errno == EINVAL || errno == EBADF))
  +            return pth_error(-1, errno);
   
           rv = 0;
           for (;;) {

From ossp-cvs-owner@ossp.org  Wed Nov  6 20:05:40 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1B2567648D; Wed,  6 Nov 2002 20:05:40 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa devtool.conf
Message-Id: <20021106190540.1B2567648D@mail.ossp.org>
Date: Wed,  6 Nov 2002 20:05:40 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Nov-2002 20:05:39
  Branch: HEAD                             Handle: 2002110619053900

  Modified files:
    ossp-pkg/sa             devtool.conf

  Log:
    upgrade to latest and greatest GNU shtool

  Summary:
    Revision    Changes     Path
    1.14        +1  -1      ossp-pkg/sa/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/sa/devtool.conf
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 devtool.conf
  --- ossp-pkg/sa/devtool.conf	30 Oct 2002 19:21:15 -0000	1.13
  +++ ossp-pkg/sa/devtool.conf	6 Nov 2002 19:05:39 -0000	1.14
  @@ -3,7 +3,7 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.1 "1.6.*" all
  +    @autogen shtool   1.6.2 "1.6.*" all
       @autogen libtool  1.4.3 "1.4*"
       @autogen autoconf 2.54  "2.5[3-9]*"
   

From ossp-cvs-owner@ossp.org  Thu Nov  7 07:24:09 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1B81F764E9; Thu,  7 Nov 2002 07:24:09 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa ChangeLog sa.c
Message-Id: <20021107062409.1B81F764E9@mail.ossp.org>
Date: Thu,  7 Nov 2002 07:24:09 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Nov-2002 07:24:08
  Branch: HEAD                             Handle: 2002110706240800

  Modified files:
    ossp-pkg/sa             ChangeLog sa.c

  Log:
    Fixed two compile-time warnings.
    
    Submitted by: Alvaro Lopez Ortega <alvaro@alobbs.com>

  Summary:
    Revision    Changes     Path
    1.11        +5  -0      ossp-pkg/sa/ChangeLog
    1.68        +3  -3      ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/ChangeLog
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 ChangeLog
  --- ossp-pkg/sa/ChangeLog	1 Nov 2002 08:44:02 -0000	1.10
  +++ ossp-pkg/sa/ChangeLog	7 Nov 2002 06:24:08 -0000	1.11
  @@ -11,6 +11,11 @@
     This is a list of all changes to OSSP sa.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 1.0.0 and 1.0.1 (01-Nov-2002 to xx-Nov-2002)
  +
  +   o Fixed two compile-time warnings.
  +     [Alvaro Lopez Ortega <alvaro@alobbs.com>]
  +
     Changes between 0.9.3 and 1.0.0 (30-Oct-2002 to 01-Nov-2002)
      
      o Consistently return SA_ERR_MEM instead of SA_ERR_SYS
  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.67 -r1.68 sa.c
  --- ossp-pkg/sa/sa.c	31 Oct 2002 07:20:10 -0000	1.67
  +++ ossp-pkg/sa/sa.c	7 Nov 2002 06:24:08 -0000	1.68
  @@ -1966,8 +1966,8 @@
       sa_writef_cb_t *ctx = (sa_writef_cb_t *)_ctx;
   
       if ((ctx->rv = sa_write(ctx->sa, buffer, bufsize, &n)) != SA_OK)
  -        n = -1;
  -    return n;
  +        return -1;
  +    return (int)n;
   }
   
   /* write formatted string to socket (convinience function) */
  @@ -2198,7 +2198,7 @@
   
       /* format string into temporary buffer */
       va_start(ap, cpFmt);
  -    nBuf = sa_mvsnprintf(NULL, NULL, cpFmt, ap);
  +    nBuf = sa_mvsnprintf(NULL, 0, cpFmt, ap);
       va_end(ap);
       if ((nBuf+1) > sizeof(caBuf)) {
           /* requires a larger buffer, so allocate dynamically */

From ossp-cvs-owner@ossp.org  Thu Nov  7 07:25:01 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 77617764E9; Thu,  7 Nov 2002 07:25:01 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa THANKS
Message-Id: <20021107062501.77617764E9@mail.ossp.org>
Date: Thu,  7 Nov 2002 07:25:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Nov-2002 07:25:01
  Branch: HEAD                             Handle: 2002110706250100

  Modified files:
    ossp-pkg/sa             THANKS

  Log:
    Give credit where credit is due

  Summary:
    Revision    Changes     Path
    1.2         +1  -0      ossp-pkg/sa/THANKS
  ____________________________________________________________________________

  Index: ossp-pkg/sa/THANKS
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 THANKS
  --- ossp-pkg/sa/THANKS	26 Oct 2002 17:59:30 -0000	1.1
  +++ ossp-pkg/sa/THANKS	7 Nov 2002 06:25:01 -0000	1.2
  @@ -20,4 +20,5 @@
       o  Ulrich Dessauer             <udessauer@agnitas.de>
       o  Michael van Elst            <mlelstv@serpens.de>
       o  Thomas Lotterer             <thomas@lotterer.net>
  +    o  Alvaro Lopez Ortega         <alvaro@alobbs.com>
   

From ossp-cvs-owner@ossp.org  Thu Nov  7 11:08:33 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1701A764AE; Thu,  7 Nov 2002 11:08:33 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa ChangeLog
Message-Id: <20021107100833.1701A764AE@mail.ossp.org>
Date: Thu,  7 Nov 2002 11:08:33 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Nov-2002 11:08:32
  Branch: HEAD                             Handle: 2002110710083200

  Modified files:
    ossp-pkg/sa             ChangeLog

  Log:
    remember change

  Summary:
    Revision    Changes     Path
    1.12        +3  -0      ossp-pkg/sa/ChangeLog
  ____________________________________________________________________________

  Index: ossp-pkg/sa/ChangeLog
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 ChangeLog
  --- ossp-pkg/sa/ChangeLog	7 Nov 2002 06:24:08 -0000	1.11
  +++ ossp-pkg/sa/ChangeLog	7 Nov 2002 10:08:32 -0000	1.12
  @@ -16,6 +16,9 @@
      o Fixed two compile-time warnings.
        [Alvaro Lopez Ortega <alvaro@alobbs.com>]
   
  +   o Upgraded build environment to GNU shtool 1.6.2
  +     [Ralf S. Engelschall]
  +
     Changes between 0.9.3 and 1.0.0 (30-Oct-2002 to 01-Nov-2002)
      
      o Consistently return SA_ERR_MEM instead of SA_ERR_SYS

From ossp-cvs-owner@ossp.org  Thu Nov  7 11:34:20 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C04C1764AE; Thu,  7 Nov 2002 11:34:19 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa README VERSION
Message-Id: <20021107103419.C04C1764AE@mail.ossp.org>
Date: Thu,  7 Nov 2002 11:34:19 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Nov-2002 11:34:19
  Branch: HEAD                             Handle: 2002110710341900

  Modified files:
    ossp-pkg/sa             README VERSION

  Log:
    fix README and bump version for release

  Summary:
    Revision    Changes     Path
    1.12        +1  -1      ossp-pkg/sa/README
    1.9         +1  -1      ossp-pkg/sa/VERSION
  ____________________________________________________________________________

  Index: ossp-pkg/sa/README
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 README
  --- ossp-pkg/sa/README	1 Nov 2002 08:44:02 -0000	1.11
  +++ ossp-pkg/sa/README	7 Nov 2002 10:34:19 -0000	1.12
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/\__,_|
   
     OSSP sa - Socket Abstraction
  -  Version 
  +  Version 1.0.1 (07-Nov-2002)
   
     ABSTRACT
   
  Index: ossp-pkg/sa/VERSION
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 VERSION
  --- ossp-pkg/sa/VERSION	1 Nov 2002 08:44:02 -0000	1.8
  +++ ossp-pkg/sa/VERSION	7 Nov 2002 10:34:19 -0000	1.9
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP sa (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP sa, Version 1.0.0 (01-Nov-2002)
  +  This is OSSP sa, Version 1.0.1 (07-Nov-2002)
   

From ossp-cvs-owner@ossp.org  Thu Nov  7 13:17:07 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 841637648D; Thu,  7 Nov 2002 13:17:07 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa ChangeLog sa.c
Message-Id: <20021107121707.841637648D@mail.ossp.org>
Date: Thu,  7 Nov 2002 13:17:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Nov-2002 13:17:07
  Branch: HEAD                             Handle: 2002110712170600

  Modified files:
    ossp-pkg/sa             ChangeLog sa.c

  Log:
    Ported to brain-dead OpenUNIX where shutdown(3)'s SHUT_XX values
    are not easily available and where variables named sa_len conflict
    with structure fields in vendor headers.

  Summary:
    Revision    Changes     Path
    1.13        +5  -0      ossp-pkg/sa/ChangeLog
    1.69        +30 -17     ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/ChangeLog
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 ChangeLog
  --- ossp-pkg/sa/ChangeLog	7 Nov 2002 10:08:32 -0000	1.12
  +++ ossp-pkg/sa/ChangeLog	7 Nov 2002 12:17:06 -0000	1.13
  @@ -13,6 +13,11 @@
   
     Changes between 1.0.0 and 1.0.1 (01-Nov-2002 to xx-Nov-2002)
   
  +   o Ported to brain-dead OpenUNIX where shutdown(3)'s SHUT_XX values
  +     are not easily available and where variables named sa_len conflict
  +     with structure fields in vendor headers.
  +     [Ralf S. Engelschall]
  +
      o Fixed two compile-time warnings.
        [Alvaro Lopez Ortega <alvaro@alobbs.com>]
   
  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.68 -r1.69 sa.c
  --- ossp-pkg/sa/sa.c	7 Nov 2002 06:24:08 -0000	1.68
  +++ ossp-pkg/sa/sa.c	7 Nov 2002 12:17:06 -0000	1.69
  @@ -47,7 +47,7 @@
   #include <sys/time.h>    /* for "struct timeval" */
   #include <sys/un.h>      /* for "struct sockaddr_un" */
   #include <netinet/in.h>  /* for "struct sockaddr_in[6]" */
  -#include <sys/socket.h>  /* for "PF_XXX", "AF_XXX" and "SOCK_XXX" */
  +#include <sys/socket.h>  /* for "PF_XXX", "AF_XXX", "SOCK_XXX" and "SHUT_XX" */
   #include <arpa/inet.h>   /* for "inet_XtoX" */
   
   /* include own API header */
  @@ -90,6 +90,19 @@
   #define PF_INET6 AF_INET6
   #endif
   
  +/* backward compatibility for SHUT_XX. Some platforms (like brain-dead
  +   OpenUNIX) define those only if _XOPEN_SOURCE is defined, but unfortunately
  +   then fail in their other vendor includes due to internal inconsistencies. */
  +#if !defined(SHUT_RD)
  +#define SHUT_RD 0
  +#endif
  +#if !defined(SHUT_WR)
  +#define SHUT_WR 1
  +#endif
  +#if !defined(SHUT_RDWR)
  +#define SHUT_RDWR 2
  +#endif
  +
   /* backward compatibility for ssize_t */
   #if defined(HAVE_CONFIG_H) && !defined(HAVE_SSIZE_T)
   #define ssize_t long
  @@ -1508,7 +1521,7 @@
           struct sockaddr_in6 sa6;
   #endif
       } sa_buf;
  -    socklen_t sa_len;
  +    socklen_t sa_size;
       int s;
       int i;
   
  @@ -1539,14 +1552,14 @@
       }
   
       /* perform accept operation on underlying socket */
  -    sa_len = sizeof(sa_buf);
  -    if ((s = SA_SC_CALL_3(sa, accept, sa->fdSocket, (struct sockaddr *)&sa_buf, &sa_len)) == -1)
  +    sa_size = sizeof(sa_buf);
  +    if ((s = SA_SC_CALL_3(sa, accept, sa->fdSocket, (struct sockaddr *)&sa_buf, &sa_size)) == -1)
           return SA_RC(SA_ERR_SYS);
   
       /* create result address object */
       if ((rv = sa_addr_create(caddr)) != SA_OK)
           return SA_RC(rv);
  -    if ((rv = sa_addr_s2a(*caddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK) {
  +    if ((rv = sa_addr_s2a(*caddr, (struct sockaddr *)&sa_buf, sa_size)) != SA_OK) {
           sa_addr_destroy(*caddr);
           return SA_RC(rv);
       }
  @@ -1588,7 +1601,7 @@
           struct sockaddr_in6 sa6;
   #endif
       } sa_buf;
  -    socklen_t sa_len;
  +    socklen_t sa_size;
   
       /* argument sanity check(s) */
       if (sa == NULL || raddr == NULL)
  @@ -1603,14 +1616,14 @@
           return SA_RC(SA_ERR_USE);
   
       /* determine remote address of underlying socket */
  -    sa_len = sizeof(sa_buf);
  -    if (getpeername(sa->fdSocket, (struct sockaddr *)&sa_buf, &sa_len) < 0)
  +    sa_size = sizeof(sa_buf);
  +    if (getpeername(sa->fdSocket, (struct sockaddr *)&sa_buf, &sa_size) < 0)
           return SA_RC(SA_ERR_SYS);
   
       /* create result address object */
       if ((rv = sa_addr_create(raddr)) != SA_OK)
           return SA_RC(rv);
  -    if ((rv = sa_addr_s2a(*raddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK) {
  +    if ((rv = sa_addr_s2a(*raddr, (struct sockaddr *)&sa_buf, sa_size)) != SA_OK) {
           sa_addr_destroy(*raddr);
           return SA_RC(rv);
       }
  @@ -1628,7 +1641,7 @@
           struct sockaddr_in6 sa6;
   #endif
       } sa_buf;
  -    socklen_t sa_len;
  +    socklen_t sa_size;
   
       /* argument sanity check(s) */
       if (sa == NULL || laddr == NULL)
  @@ -1639,14 +1652,14 @@
           return SA_RC(SA_ERR_USE);
   
       /* determine local address of underlying socket */
  -    sa_len = sizeof(sa_buf);
  -    if (getsockname(sa->fdSocket, (struct sockaddr *)&sa_buf, &sa_len) < 0)
  +    sa_size = sizeof(sa_buf);
  +    if (getsockname(sa->fdSocket, (struct sockaddr *)&sa_buf, &sa_size) < 0)
           return SA_RC(SA_ERR_SYS);
   
       /* create result address object */
       if ((rv = sa_addr_create(laddr)) != SA_OK)
           return SA_RC(rv);
  -    if ((rv = sa_addr_s2a(*laddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK) {
  +    if ((rv = sa_addr_s2a(*laddr, (struct sockaddr *)&sa_buf, sa_size)) != SA_OK) {
           sa_addr_destroy(*laddr);
           return SA_RC(rv);
       }
  @@ -2085,7 +2098,7 @@
           struct sockaddr_in6 sa6;
   #endif
       } sa_buf;
  -    socklen_t sa_len;
  +    socklen_t sa_size;
       size_t n;
       fd_set fds;
   
  @@ -2117,15 +2130,15 @@
       }
   
       /* perform receive operation on underlying socket */
  -    sa_len = sizeof(sa_buf);
  +    sa_size = sizeof(sa_buf);
       if ((n = SA_SC_CALL_6(sa, recvfrom, sa->fdSocket, buf, buflen, 0,
  -                          (struct sockaddr *)&sa_buf, &sa_len)) == -1)
  +                          (struct sockaddr *)&sa_buf, &sa_size)) == -1)
           return SA_RC(SA_ERR_SYS);
   
       /* create result address object */
       if ((rv = sa_addr_create(raddr)) != SA_OK)
           return rv;
  -    if ((rv = sa_addr_s2a(*raddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK) {
  +    if ((rv = sa_addr_s2a(*raddr, (struct sockaddr *)&sa_buf, sa_size)) != SA_OK) {
           sa_addr_destroy(*raddr);
           return rv;
       }

From ossp-cvs-owner@ossp.org  Thu Nov  7 13:44:13 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E972B764E9; Thu,  7 Nov 2002 13:44:12 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa ChangeLog sa.c ts.c
Message-Id: <20021107124412.E972B764E9@mail.ossp.org>
Date: Thu,  7 Nov 2002 13:44:12 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Nov-2002 13:44:12
  Branch: HEAD                             Handle: 2002110712441200

  Modified files:
    ossp-pkg/sa             ChangeLog sa.c ts.c

  Log:
    Make sure that "va_list" variables are not compared against NULL
    because this is not possible on all platforms.

  Summary:
    Revision    Changes     Path
    1.14        +4  -0      ossp-pkg/sa/ChangeLog
    1.70        +2  -2      ossp-pkg/sa/sa.c
    1.6         +2  -2      ossp-pkg/sa/ts.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/ChangeLog
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 ChangeLog
  --- ossp-pkg/sa/ChangeLog	7 Nov 2002 12:17:06 -0000	1.13
  +++ ossp-pkg/sa/ChangeLog	7 Nov 2002 12:44:12 -0000	1.14
  @@ -13,6 +13,10 @@
   
     Changes between 1.0.0 and 1.0.1 (01-Nov-2002 to xx-Nov-2002)
   
  +   o Make sure that "va_list" variables are not compared against NULL
  +     because this is not possible on all platforms.
  +     [Ralf S. Engelschall]
  +
      o Ported to brain-dead OpenUNIX where shutdown(3)'s SHUT_XX values
        are not easily available and where variables named sa_len conflict
        with structure fields in vendor headers.
  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.69 -r1.70 sa.c
  --- ossp-pkg/sa/sa.c	7 Nov 2002 12:17:06 -0000	1.69
  +++ ossp-pkg/sa/sa.c	7 Nov 2002 12:44:12 -0000	1.70
  @@ -318,7 +318,7 @@
       int n;
       int bytes;
   
  -    if (format == NULL || ap == NULL)
  +    if (format == NULL)
           return -1;
       bytes = 0;
       while (*format != '\0') {
  @@ -400,7 +400,7 @@
       int n;
       sa_mvsnprintf_cb_t ctx;
   
  -    if (format == NULL || ap == NULL)
  +    if (format == NULL)
           return -1;
       if (buffer != NULL && bufsize == 0)
           return -1;
  Index: ossp-pkg/sa/ts.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 ts.c
  --- ossp-pkg/sa/ts.c	8 Mar 2002 23:08:39 -0000	1.5
  +++ ossp-pkg/sa/ts.c	7 Nov 2002 12:44:12 -0000	1.6
  @@ -126,7 +126,7 @@
       int n;
       int bytes;
   
  -    if (format == NULL || ap == NULL)
  +    if (format == NULL)
           return -1;
       bytes = 0;
       while (*format != '\0') {
  @@ -200,7 +200,7 @@
       int n;
       va_list ap2;
   
  -    if (format == NULL || ap == NULL)
  +    if (format == NULL)
           return NULL;
       ap2 = ap;
       if ((n = ts_suite_mvxprintf(NULL, 0, format, ap)) == -1)

From ossp-cvs-owner@ossp.org  Thu Nov  7 13:44:42 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5EDF67652D; Thu,  7 Nov 2002 13:44:42 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa ChangeLog
Message-Id: <20021107124442.5EDF67652D@mail.ossp.org>
Date: Thu,  7 Nov 2002 13:44:42 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Nov-2002 13:44:42
  Branch: HEAD                             Handle: 2002110712444100

  Modified files:
    ossp-pkg/sa             ChangeLog

  Log:
    prepare for release

  Summary:
    Revision    Changes     Path
    1.15        +1  -1      ossp-pkg/sa/ChangeLog
  ____________________________________________________________________________

  Index: ossp-pkg/sa/ChangeLog
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 ChangeLog
  --- ossp-pkg/sa/ChangeLog	7 Nov 2002 12:44:12 -0000	1.14
  +++ ossp-pkg/sa/ChangeLog	7 Nov 2002 12:44:41 -0000	1.15
  @@ -11,7 +11,7 @@
     This is a list of all changes to OSSP sa.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 1.0.0 and 1.0.1 (01-Nov-2002 to xx-Nov-2002)
  +  Changes between 1.0.0 and 1.0.1 (01-Nov-2002 to 07-Nov-2002)
   
      o Make sure that "va_list" variables are not compared against NULL
        because this is not possible on all platforms.

From ossp-cvs-owner@ossp.org  Thu Nov  7 13:49:44 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E7A6B7648D; Thu,  7 Nov 2002 13:49:43 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new news.txt ossp-web/pkg/lib index.wml ossp-web/...
Message-Id: <20021107124943.E7A6B7648D@mail.ossp.org>
Date: Thu,  7 Nov 2002 13:49:43 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   07-Nov-2002 13:49:43
  Branch: HEAD                             Handle: 2002110712494201

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/sa     index.wml

  Log:
    release OSSP sa 1.0.1

  Summary:
    Revision    Changes     Path
    1.31        +1  -0      ossp-web/new/news.txt
    1.33        +1  -1      ossp-web/pkg/lib/index.wml
    1.9         +2  -2      ossp-web/pkg/lib/sa/index.wml
  ____________________________________________________________________________

  Index: ossp-web/new/news.txt
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 news.txt
  --- ossp-web/new/news.txt	2 Nov 2002 13:03:22 -0000	1.30
  +++ ossp-web/new/news.txt	7 Nov 2002 12:49:42 -0000	1.31
  @@ -1,3 +1,4 @@
  +07-Nov-2002: Released L<OSSP sa> 1.0.1
   02-Nov-2002: Released T<OSSP shtool> 1.6.2
   01-Nov-2002: Released L<OSSP sa> 1.0.0
   30-Oct-2002: Released L<OSSP sa> 0.9.3
  Index: ossp-web/pkg/lib/index.wml
  ============================================================
  $ cvs diff -u -r1.32 -r1.33 index.wml
  --- ossp-web/pkg/lib/index.wml	1 Nov 2002 08:59:14 -0000	1.32
  +++ ossp-web/pkg/lib/index.wml	7 Nov 2002 12:49:43 -0000	1.33
  @@ -24,7 +24,7 @@
   			done=100 stable=1.0.0 unstable=none>
     <pkg_item name="sa" longname="OSSP sa" type="lib"
               desc="Socket Abstraction"
  -			done=100 stable=1.0.0 unstable=none>
  +			done=100 stable=1.0.1 unstable=none>
     <pkg_item name="fsl" longname="OSSP fsl" type="lib"
               desc="Faked/Flexible Syslog"
   			done=100 stable=1.0.5 unstable=none>
  Index: ossp-web/pkg/lib/sa/index.wml
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 index.wml
  --- ossp-web/pkg/lib/sa/index.wml	1 Nov 2002 08:59:15 -0000	1.8
  +++ ossp-web/pkg/lib/sa/index.wml	7 Nov 2002 12:49:43 -0000	1.9
  @@ -110,7 +110,7 @@
   
   <pkg_status
       name="sa" assign="rse"
  -    stable="1.0.0"    stable_date="01-Nov-2002"
  +    stable="1.0.1"    stable_date="07-Nov-2002"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -121,7 +121,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/sa/
       directory=$(FTP_ROOT_DIR)/pkg/lib/sa/
       files="sa-*.tar.gz" 
  -	stable="sa-1\.0\.0\.tar\.gz" unstable="sa-SNAP.*\.tar.gz">
  +	stable="sa-1\.0\.1\.tar\.gz" unstable="sa-SNAP.*\.tar.gz">
   	
   <h2>Donation</h2>
   

From ossp-cvs-owner@ossp.org  Thu Nov  7 14:05:44 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CA2C7764E9; Thu,  7 Nov 2002 14:05:43 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa TODO
Message-Id: <20021107130543.CA2C7764E9@mail.ossp.org>
Date: Thu,  7 Nov 2002 14:05:43 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Nov-2002 14:05:43
  Branch: HEAD                             Handle: 2002110713054300

  Modified files:
    ossp-pkg/sa             TODO

  Log:
    remember issue

  Summary:
    Revision    Changes     Path
    1.47        +3  -0      ossp-pkg/sa/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/sa/TODO
  ============================================================
  $ cvs diff -u -r1.46 -r1.47 TODO
  --- ossp-pkg/sa/TODO	31 Oct 2002 07:17:46 -0000	1.46
  +++ ossp-pkg/sa/TODO	7 Nov 2002 13:05:43 -0000	1.47
  @@ -16,6 +16,9 @@
   
     The following items can be done if wished and time permits:
   
  +  o Add support for more socket options, for instance SO_BROADCAST for
  +    enabling permission to transmit broadcast messages.
  +
     o what about actually written bytes in case of sa_writef?
       Should we internally retry somehow?
   

From ossp-cvs-owner@ossp.org  Thu Nov  7 14:27:57 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 497DE7648D; Thu,  7 Nov 2002 14:27:57 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth pth_high.c
Message-Id: <20021107132757.497DE7648D@mail.ossp.org>
Date: Thu,  7 Nov 2002 14:27:57 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Nov-2002 14:27:57
  Branch: HEAD                             Handle: 2002110713275600

  Modified files:
    ossp-pkg/pth            pth_high.c

  Log:
    more POSIX conformance for pth_send/pth_recv

  Summary:
    Revision    Changes     Path
    1.97        +6  -2      ossp-pkg/pth/pth_high.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/pth_high.c
  ============================================================
  $ cvs diff -u -r1.96 -r1.97 pth_high.c
  --- ossp-pkg/pth/pth_high.c	5 Nov 2002 19:47:07 -0000	1.96
  +++ ossp-pkg/pth/pth_high.c	7 Nov 2002 13:27:56 -0000	1.97
  @@ -1310,10 +1310,12 @@
           delay.tv_usec = 0;
           while ((n = pth_sc(select)(fd+1, &fds, NULL, NULL, &delay)) < 0
                  && errno == EINTR) ;
  +        if (n < 0 && (errno == EINVAL || errno == EBADF))
  +            return pth_error(-1, errno);
   
           /* if filedescriptor is still not readable,
              let thread sleep until it is or the extra event occurs */
  -        if (n < 1) {
  +        if (n == 0) {
               ev = pth_event(PTH_EVENT_FD|PTH_UNTIL_FD_READABLE|PTH_MODE_STATIC, &ev_key, fd);
               if (ev_extra != NULL)
                   pth_event_concat(ev, ev_extra, NULL);
  @@ -1396,12 +1398,14 @@
           delay.tv_usec = 0;
           while ((n = pth_sc(select)(fd+1, NULL, &fds, NULL, &delay)) < 0
                  && errno == EINTR) ;
  +        if (n < 0 && (errno == EINVAL || errno == EBADF))
  +            return pth_error(-1, errno);
   
           rv = 0;
           for (;;) {
               /* if filedescriptor is still not writeable,
                  let thread sleep until it is or event occurs */
  -            if (n < 1) {
  +            if (n == 0) {
                   ev = pth_event(PTH_EVENT_FD|PTH_UNTIL_FD_WRITEABLE|PTH_MODE_STATIC, &ev_key, fd);
                   if (ev_extra != NULL)
                       pth_event_concat(ev, ev_extra, NULL);

From ossp-cvs-owner@ossp.org  Thu Nov  7 16:07:55 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CA76F764E9; Thu,  7 Nov 2002 16:07:54 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth pth_high.c
Message-Id: <20021107150754.CA76F764E9@mail.ossp.org>
Date: Thu,  7 Nov 2002 16:07:54 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Nov-2002 16:07:54
  Branch: HEAD                             Handle: 2002110715075400

  Modified files:
    ossp-pkg/pth            pth_high.c

  Log:
    recognize fcntl(3) errors in pth_fdmode

  Summary:
    Revision    Changes     Path
    1.98        +10 -5      ossp-pkg/pth/pth_high.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/pth_high.c
  ============================================================
  $ cvs diff -u -r1.97 -r1.98 pth_high.c
  --- ossp-pkg/pth/pth_high.c	7 Nov 2002 13:27:56 -0000	1.97
  +++ ossp-pkg/pth/pth_high.c	7 Nov 2002 15:07:54 -0000	1.98
  @@ -592,7 +592,8 @@
           return pth_error(-1, EBADF);
   
       /* force filedescriptor into non-blocking mode */
  -    fdmode = pth_fdmode(s, PTH_FDMODE_NONBLOCK);
  +    if ((fdmode = pth_fdmode(s, PTH_FDMODE_NONBLOCK)) == PTH_FDMODE_ERROR)
  +        return pth_error(-1, EBADF);
   
       /* try to connect */
       while (   (rv = pth_sc(connect)(s, (struct sockaddr *)addr, addrlen)) == -1
  @@ -647,7 +648,8 @@
           return pth_error(-1, EBADF);
   
       /* force filedescriptor into non-blocking mode */
  -    fdmode = pth_fdmode(s, PTH_FDMODE_NONBLOCK);
  +    if ((fdmode = pth_fdmode(s, PTH_FDMODE_NONBLOCK)) == PTH_FDMODE_ERROR)
  +        return pth_error(-1, EBADF);
   
       /* poll socket via accept */
       ev = NULL;
  @@ -777,7 +779,8 @@
           return pth_error(-1, EBADF);
   
       /* force filedescriptor into non-blocking mode */
  -    fdmode = pth_fdmode(fd, PTH_FDMODE_NONBLOCK);
  +    if ((fdmode = pth_fdmode(fd, PTH_FDMODE_NONBLOCK)) == PTH_FDMODE_ERROR)
  +        return pth_error(-1, EBADF);
   
       /* poll filedescriptor if not already in non-blocking operation */
       if (fdmode != PTH_FDMODE_NONBLOCK) {
  @@ -996,7 +999,8 @@
           return pth_error(-1, EBADF);
   
       /* force filedescriptor into non-blocking mode */
  -    fdmode = pth_fdmode(fd, PTH_FDMODE_NONBLOCK);
  +    if ((fdmode = pth_fdmode(fd, PTH_FDMODE_NONBLOCK)) == PTH_FDMODE_ERROR)
  +        return pth_error(-1, EBADF);
   
       /* poll filedescriptor if not already in non-blocking operation */
       if (fdmode != PTH_FDMODE_NONBLOCK) {
  @@ -1380,7 +1384,8 @@
           return pth_error(-1, EBADF);
   
       /* force filedescriptor into non-blocking mode */
  -    fdmode = pth_fdmode(fd, PTH_FDMODE_NONBLOCK);
  +    if ((fdmode = pth_fdmode(fd, PTH_FDMODE_NONBLOCK)) == PTH_FDMODE_ERROR)
  +        return pth_error(-1, EBADF);
   
       /* poll filedescriptor if not already in non-blocking operation */
       if (fdmode != PTH_FDMODE_NONBLOCK) {

From ossp-cvs-owner@ossp.org  Thu Nov  7 16:21:07 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1CF037648D; Thu,  7 Nov 2002 16:21:07 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog pth_high.c
Message-Id: <20021107152107.1CF037648D@mail.ossp.org>
Date: Thu,  7 Nov 2002 16:21:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Nov-2002 16:21:07
  Branch: HEAD                             Handle: 2002110715210600

  Modified files:
    ossp-pkg/pth            ChangeLog pth_high.c

  Log:
    Check for PTH_FDMODE_ERROR error conditions internally, too.

  Summary:
    Revision    Changes     Path
    1.589       +3  -0      ossp-pkg/pth/ChangeLog
    1.99        +18 -3      ossp-pkg/pth/pth_high.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.588 -r1.589 ChangeLog
  --- ossp-pkg/pth/ChangeLog	5 Nov 2002 19:39:08 -0000	1.588
  +++ ossp-pkg/pth/ChangeLog	7 Nov 2002 15:21:06 -0000	1.589
  @@ -21,6 +21,9 @@
   
     Changes between 1.4.1 and 1.5.0 (27-Jan-2002 to xx-Nov-2002)
   
  +   *) Check for PTH_FDMODE_ERROR error conditions internally, too.
  +      [Ralf S. Engelschall]
  +
      *) Use the new PTH_STATUS_FAILED event status in the scheduler's
         event-manager for filedescriptor events if the internal select(2)
         call returned with an error. Additionally this PTH_STATUS_FAILED
  Index: ossp-pkg/pth/pth_high.c
  ============================================================
  $ cvs diff -u -r1.98 -r1.99 pth_high.c
  --- ossp-pkg/pth/pth_high.c	7 Nov 2002 15:07:54 -0000	1.98
  +++ ossp-pkg/pth/pth_high.c	7 Nov 2002 15:21:06 -0000	1.99
  @@ -698,6 +698,7 @@
       pth_event_t ev;
       static pth_key_t ev_key = PTH_KEY_INIT;
       fd_set fds;
  +    int fdmode;
       int n;
   
       pth_implicit_init();
  @@ -709,8 +710,12 @@
       if (!pth_util_fd_valid(fd))
           return pth_error(-1, EBADF);
   
  +    /* check mode of filedescriptor */
  +    if ((fdmode = pth_fdmode(fd, PTH_FDMODE_POLL)) == PTH_FDMODE_ERROR)
  +        return pth_error(-1, EBADF);
  +
       /* poll filedescriptor if not already in non-blocking operation */
  -    if (pth_fdmode(fd, PTH_FDMODE_POLL) == PTH_FDMODE_BLOCK) {
  +    if (fdmode == PTH_FDMODE_BLOCK) {
   
           /* now directly poll filedescriptor for readability
              to avoid unneccessary (and resource consuming because of context
  @@ -865,6 +870,7 @@
       pth_event_t ev;
       static pth_key_t ev_key = PTH_KEY_INIT;
       fd_set fds;
  +    int fdmode;
       int n;
   
       pth_implicit_init();
  @@ -876,8 +882,12 @@
       if (!pth_util_fd_valid(fd))
           return pth_error(-1, EBADF);
   
  +    /* check mode of filedescriptor */
  +    if ((fdmode = pth_fdmode(fd, PTH_FDMODE_POLL)) == PTH_FDMODE_ERROR)
  +        return pth_error(-1, EBADF);
  +
       /* poll filedescriptor if not already in non-blocking operation */
  -    if (pth_fdmode(fd, PTH_FDMODE_POLL) == PTH_FDMODE_BLOCK) {
  +    if (fdmode == PTH_FDMODE_BLOCK) {
   
           /* first directly poll filedescriptor for readability
              to avoid unneccessary (and resource consuming because of context
  @@ -1289,6 +1299,7 @@
       pth_event_t ev;
       static pth_key_t ev_key = PTH_KEY_INIT;
       fd_set fds;
  +    int fdmode;
       int n;
   
       pth_implicit_init();
  @@ -1300,8 +1311,12 @@
       if (!pth_util_fd_valid(fd))
           return pth_error(-1, EBADF);
   
  +    /* check mode of filedescriptor */
  +    if ((fdmode = pth_fdmode(fd, PTH_FDMODE_POLL)) == PTH_FDMODE_ERROR)
  +        return pth_error(-1, EBADF);
  +
       /* poll filedescriptor if not already in non-blocking operation */
  -    if (pth_fdmode(fd, PTH_FDMODE_POLL) == PTH_FDMODE_BLOCK) {
  +    if (fdmode == PTH_FDMODE_BLOCK) {
   
           /* now directly poll filedescriptor for readability
              to avoid unneccessary (and resource consuming because of context

From ossp-cvs-owner@ossp.org  Thu Nov  7 16:28:53 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CA9E07648D; Thu,  7 Nov 2002 16:28:52 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.pod
Message-Id: <20021107152852.CA9E07648D@mail.ossp.org>
Date: Thu,  7 Nov 2002 16:28:52 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   07-Nov-2002 16:28:52
  Branch: HEAD                             Handle: 2002110715285200

  Modified files:
    ossp-pkg/sio            al.pod

  Log:
    add description for al_error

  Summary:
    Revision    Changes     Path
    1.14        +2  -0      ossp-pkg/sio/al.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.pod
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 al.pod
  --- ossp-pkg/sio/al.pod	23 Oct 2002 17:02:06 -0000	1.13
  +++ ossp-pkg/sio/al.pod	7 Nov 2002 15:28:52 -0000	1.14
  @@ -435,6 +435,8 @@
   
   =item const char *B<al_error>(al_rc_t I<rv>);
   
  +Retrieve a string that describes the return code I<rv> in english.
  +
   =back
   
   =head1 SEE ALSO

From ossp-cvs-owner@ossp.org  Thu Nov  7 16:29:08 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8875576531; Thu,  7 Nov 2002 16:29:08 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio.pod
Message-Id: <20021107152908.8875576531@mail.ossp.org>
Date: Thu,  7 Nov 2002 16:29:08 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   07-Nov-2002 16:29:08
  Branch: HEAD                             Handle: 2002110715290800

  Added files:
    ossp-pkg/sio            sio.pod

  Log:
    initial commit

  Summary:
    Revision    Changes     Path
    1.1         +407 -0     ossp-pkg/sio/sio.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio.pod
  ============================================================
  $ cvs update -p -r1.1 sio.pod
  ##
  ##  OSSP sio - Stream I/O
  ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  ##  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  ##
  ##  This file is part of OSSP al, an abstract datatype of a data buffer
  ##  that can assemble, move and truncate data but avoids actual copying.
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  sio.pod: stream I/O library manual page
  ##
  
  =pod
  
  =head1 NAME
  
  B<OSSP sio> - Stream I/O
  
  =head1 VERSION
  
  B<OSSP SIO SIO_VERSION_STR>
  
  =head1 SYNOPSIS
  
  =over 4
  
  =item B<Abstract Data Types>:
  
  sio_rc_t,
  sio_mode_t,
  sio_flag_t,
  sio_t,
  sio_stage_t,
  sio_module_t,
  sio_labelnum_t.
  
  =item B<Stream Operations>:
  
  sio_create,
  sio_destroy,
  sio_input,
  sio_output,
  sio_read,
  sio_write,
  sio_push,
  sio_flag,
  sio_clearflag.
  
  =item B<Stage Operations>:
  
  sio_create_stage,
  sio_destroy_stage,
  sio_configure_stage,
  sio_attach,
  sio_detach.
  
  =item B<Error Handling>:
  
  sio_error.
  
  =item B<Internal Stage Operations>:
  
  sio_label,
  sios->init,
  sios->configure,
  sios->cleanup,
  sios->openr,
  sios->closer,
  sios->openw,
  sios->closew,
  sios->input,
  sios->output.
  
  =back
  
  =head1 DESCRIPTION
  
  B<OSSP sio> defines an abstract type of a pair of half-duplex data pipes.
  
  It provides the following key features:
  
  =over 4
  
  =back
  
  =head1 DATA TYPES
  
  B<OSSP sio> uses six data types in its API:
  
  =over 4
  
  =item B<sio_rc_t> (Return Code Type)
  
  This is an exported enumerated integer type with the following possible
  values:
  
   SIO_OK         Everything Ok
   SIO_ERR_ARG    Invalid Argument
   SIO_ERR_MEM    Not Enough Memory
   SIO_ERR_EOF    End Of Communication
   SIO_ERR_INT    Internal Error
   SIO_UPSTREAM   Invoke Upstream Stage
   SIO_DOWNSTREAM Invoke Downstream Stage
   SIO_XSTREAM    Invoke Crossstream Stage
  
  =item B<sio_mode_t> (Attach Mode Type)
  
  This is an exported enumerated integer type with the following possible
  values:
  
   SIO_MODE_INVALID   Stage is not attached
   SIO_MODE_READ      Stage is attached for reading
   SIO_MODE_WRITE     Stage is attached for writing
   SIO_MODE_READWRITE Stage is attached for reading and writing
  
  =item B<sio_mode_t> (Attach Mode Type)
  
  This is an exported enumerated integer type with the following possible
  values:
  
   SIO_FLAG_ERROR     Identify the error flag
   SIO_FLAG_EOF       Identify the end-of-file flag
  
  =item B<sio_t> (Stream I/O Type)
  
  This is an opaque data type representing apair of two half-duplex data
  pipes. Only pointers to this abstract data type are used in the API.
  
  =item B<sio_stage_t> (Stream Stage Type)
  
  This is an opaque pointer type representing a processing node on
  a data pipe.
  
  =item B<sio_module_t> (Stream Stage Module Type)
  
  This is an opaque data type representing the methods of a stream
  stage. Only pointers to this abstract data type are used in the API.
  
  =item B<sio_labelnum_t> (Data Label Type)
  
  This is an exported enumerated integer type with the following possible
  values:
  
   SIO_LN_DATA        Label number for user data chunks
   SIO_LN_ERROR       Label number for error data chunks
   SIO_LN_EOF         Label number for end-of-file data chunks
  
  =back
  
  =head1 FUNCTIONS
  
  B<OSSP sio> provides a bunch of API functions, all modelled after the
  same prototype: "C<sio_rc_t> C<sio_>I<name>C<(sio__t *,>...C<)>".
  This means every function returns C<sio_rc_t> to indicate its
  success (C<SIO_OK>) or failure (C<SIO_ERR_XXX>) by returning a return code
  (the corresponding describing text can be determined by passing this
  return code to C<sio_error>). Each function name starts with the common
  prefix C<sio_> and receives a C<sio_t> object on which it operates as
  its first argument.
  
  =head2 Stream Operations
  
  =over 4
  
  =item sio_rc_t B<sio_create>(sio_t **I<siop>);
  
  Create a stream object. The object is stored in I<siop> on success.
  
  =item sio_rc_t B<sio_destroy>(sio_t *I<sio>);
  
  Destroy the stream object I<sio>. The object is invalid after this
  call succeeded.
  
  =item sio_rc_t B<sio_input>(sio_t *I<sio>, al_t *I<al>, size_t limit);
  
  Pull data from stream object I<sio>, the data is appended to the
  assembly line I<al> and will contain no more than I<limit> bytes.
  
  =item sio_rc_t B<sio_output>(sio_t *I<sio>, al_t *I<al>);
  
  Push data to stream object I<sio>, the data is spliced from the
  assembly line I<al>. When the stream has no place for all data
  in the assembly line then part (or all) of it will stay in I<al>.
  
  =item sio_rc_t B<sio_read>(sio_t *I<sio>, char *I<dst>, size_t I<n>, size_t *<actualp>);
  
  Copy up to I<n> user data bytes from stream I<sio> and store them into
  the buffer I<dst>. The actual number of bytes copied is stored in I<actualp>.
  Error chunks and end-of-file chunks passing down the stream will set
  the corresponding flags and can be queried with B<sio_flag>.
  
  =item sio_rc_t B<sio_write>(sio_t *I<sio>, char *I<src>, size_t I<n>, size_t *<actualp>);
  
  Copy I<n> bytes from buffer I<src> to stream object I<sio>. I<actualp>
  stores the actual number of bytes copied in case the stream has no
  place for the whole buffer. The bytes will be labeled as user data
  inside the stream.
  
  =item sio_rc_t B<sio_push>(sio_t *I<sio>);
  
  Push an end-of-file chunk up the stream I<sio> to trigger stages
  to flush internal buffers. It depends on the stages wether they
  honor this request.
  
  =item int B<sio_flag>(sio_t *I<sio>, sio_flag_t I<fl>);
  
  Query internal flags of the stream I<sio>. Currently you can
  specify the flags B<SIO_FLAG_ERROR> and B<SIO_FLAG_EOF>. The
  return value should be treated as a boolean.
  
  =item int B<sio_clearflag>(sio_t *I<sio>, sio_flag_t I<fl>);
  
  Clear internal flags of the stream I<sio>. Currently you can
  specify the flags B<SIO_FLAG_ERROR> and B<SIO_FLAG_EOF>. The
  function returns the previous state of the flag.
  
  =back
  
  =head2 Stage Operations
  
  =over 4
  
  =item sio_rc_t B<sio_create_stage>(sio_t *I<sio>, sio_module_t *<siom>, sio_stage_t **I<siosp>);
  
  Create a stage object for processing data in stream I<sio> using methods
  from module I<siom>. The object is stored in I<siosp> on success.
  
  =item sio_rc_t B<sio_destroy_stage>(sio_t *I<sio>, sio_stage_t *I<sios>);
  
  Destroy the stage object I<sios>. The object is invalid after this call
  succeeded.
  
  =item sio_rc_t B<sio_configure_stage>(sio_t *I<sio>, sio_stage_t *I<sios>, void *I<o>, void *I<v>);
  
  Pass additional data to stage object I<sios>. The data is specific to
  the stage and passed as two void pointers. Most stages will cast
  I<o> to a const char * and interpret it as a parameter name and will
  cast I<v> to a pointer to the value of that parameter.
  
  =back
  
  =head2 Error Handling
  
  =over 4
  
  =item const char *B<sio_error>(sio_rc_t I<rv>);
  
  Retrieve a string that describes the return code I<rv> in english.
  
  =back
  
  =head2 B<Internal Stage Operations>:
  
  The I<sio_label> method is used internally by stages that implement
  a standard I/O model where data and signalling events (error, end-of-file)
  are sent synchronously within the data stream.
  
  =over 4
  
  =item sio_rc_t B<sio_label>(sio_t *I<sio>, sio_labelnum_t I<ln>, al_label_t *<labelp>);
  
  Map the generic B<OSSP sio> data label number I<ln> to a B<OSSP al> label
  value and store the result in I<labelp>.
  
  =back
  
  A stage module implements the following functions and exports them
  in a global I<sio_module_t> variable which is declared as following:
  
   typedef struct {
       const char *name;
       sio_rc_t (*init)      (sio_t *, void **);
       sio_rc_t (*configure) (sio_t *, void *, void *, void *);
       sio_rc_t (*cleanup)   (sio_t *, void *);
       sio_rc_t (*openr)     (sio_t *, al_t *, void *);
       sio_rc_t (*closer)    (sio_t *, al_t *, void *);
       sio_rc_t (*openw)     (sio_t *, al_t *, void *);
       sio_rc_t (*closew)    (sio_t *, al_t *, void *);
       sio_rc_t (*input)     (sio_t *, al_t *, void *);
       sio_rc_t (*output)    (sio_t *, al_t *, void *);
   } sio_module_t;
  
  Applications reference this variable to create stage intances with
  B<sio_create_stage>.
  
  =over 4
  
  =item sio_rc_t B<sios-E<gt>init>(sio_t *I<sio>, void **I<up>);
  
  Initialize a stage, a pointer to private per-instance data
  will be stored in I<up> and will be passed to the subsequent
  methods.
  
  =item sio_rc_t B<sios-E<gt>configure>(sio_t *I<sio>, void *I<u>, void *I<o>, void *I<v>);
  
  Pass additional data to a stage. The data is specific to
  the stage and passed as two void pointers. Most stages will cast
  I<o> to a const char * and interpret it as a parameter name and will
  cast I<v> to a pointer to the value of that parameter.
  
  =item sio_rc_t B<sios-E<gt>cleanup>(sio_t *I<sio>, void *I<u>);
  
  Deinitialize a stage and free all ressources allocated at init time.
  
  =item sio_rc_t B<sios-E<gt>openr>(sio_t *I<sio>, al_t *I<al>, void *I<u>);
  
  Open a stage for reading. The stage will be attached at the stream
  top on success.
  
  =item sio_rc_t B<sios-E<gt>closer>(sio_t *I<sio>, al_t *I<al>, void *I<u>);
  
  Close a stage for reading and free all ressources allocated at openr time.
  
  =item sio_rc_t B<sios-E<gt>openw>(sio_t *I<sio>, al_t *I<al>, void *I<u>);
  
  Open a stage for writing. The stage will be attached at the stream
  top on success.
  
  =item sio_rc_t B<sios-E<gt>closew>(sio_t *I<sio>, al_t *I<al>, void *I<u>);
  
  Close a stage for writing and free all ressources allocated at openw time.
  
  =item sio_rc_t B<sios-E<gt>input>(sio_t *I<sio>, al_t *I<al>, void *I<u>);
  
  Transport data downstream to a reader, if there is no data then pull
  more from upstream stages.
  The special return codes B<SIO_UPSTREAM> and B<SIO_DOWNSTREAM> can be
  used to force either direction, the standard code B<SIO_OK> lets the
  scheduler determine the direction depending on the input assembly line.
  The special return code B<SIO_XSTREAM> will schedule the corresponding
  output side of the stream.
  Any other code will abort the scheduler and leave the stream in an
  inconsistent state.
  
  =item sio_rc_t B<sios-E<gt>output>(sio_t *I<sio>, al_t *I<al>, void *I<u>);
  
  Transport data upstream from a writer. if there is no data then request
  more data from downstream stages.
  The special return codes B<SIO_UPSTREAM> and B<SIO_DOWNSTREAM> can be
  used to force either direction, the standard code B<SIO_OK> lets the
  scheduler determine the direction depending on the input assembly line.
  The special return code B<SIO_XSTREAM> will schedule the corresponding
  input side of the stream.
  Any other code will abort the scheduler and leave the stream in an
  inconsistent state.
  
  =back
  
  =head1 THEORY
  
  A B<OSSP sio> stream is a pair of two half-duplex data pipes. Each data
  pipe consists of an B<OSSP al> assembly line and a chain of processing
  nodes called stages.
  
  An input operation schedules the stage on the input half, each stage
  passes data from the top-most stage downstream to a reader.
  The top-most stage needs to a be a producer, e.g.
  an object corresponding to a file descriptor open for reading.
  
  An output operation schedules the stage on the output half, each stage
  passes data upstream from a writer to the top-most stage.
  The top-most stage needs to be a consumer, e.g.
  an object corresponding to a file descriptor open for writing.
  
  A stage can implement complex protocols by telling the scheduler
  to cross sides and invoke the output stage on input operations
  and vice versa. The stage must then implement a state machine
  that directs the scheduler back to the originating side to
  keep I/O semantics consistent.
  
  =head1 SEE ALSO
  
  B<OSSP al>
  
  =head1 HISTORY
  
  B<OSSP sio> was invented in October 2002 by Michael van Elst
  E<lt>mlelstv@dev.de.cw.netE<gt> under contract with Cable & Wireless
  Germany E<lt>http://www.cw.com/deE<gt> for use inside the OSSP project
  E<lt>http://www.ossp.org/E<gt>.
  
  =head1 AUTHORS
  
   Michael van Elst
   mlelstv@dev.de.cw.net
  
  =cut
  

From ossp-cvs-owner@ossp.org  Thu Nov  7 16:29:53 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 773A27648D; Thu,  7 Nov 2002 16:29:53 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio.h
Message-Id: <20021107152953.773A27648D@mail.ossp.org>
Date: Thu,  7 Nov 2002 16:29:53 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   07-Nov-2002 16:29:53
  Branch: HEAD                             Handle: 2002110715295300

  Modified files:
    ossp-pkg/sio            sio.h

  Log:
    flag operations
    beautify prototype

  Summary:
    Revision    Changes     Path
    1.3         +9  -1      ossp-pkg/sio/sio.h
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 sio.h
  --- ossp-pkg/sio/sio.h	23 Oct 2002 17:05:10 -0000	1.2
  +++ ossp-pkg/sio/sio.h	7 Nov 2002 15:29:53 -0000	1.3
  @@ -50,6 +50,11 @@
       SIO_MODE_READWRITE
   } sio_mode_t;
   
  +typedef enum {
  +    SIO_FLAG_ERROR,
  +    SIO_FLAG_EOF
  +} sio_flag_t;
  +
   struct sio_st;
   typedef struct sio_st sio_t;
   
  @@ -62,7 +67,7 @@
   sio_rc_t sio_create(sio_t **siop);
   sio_rc_t sio_destroy(sio_t *sio);
   
  -sio_rc_t sio_create_stage(sio_t *sio, sio_module_t *sioh, sio_stage_t **siosp);
  +sio_rc_t sio_create_stage(sio_t *sio, sio_module_t *siom, sio_stage_t **siosp);
   sio_rc_t sio_destroy_stage(sio_t *sio, sio_stage_t *sios);
   sio_rc_t sio_configure_stage(sio_t *sio, sio_stage_t *sios, void *o, void *v);
   
  @@ -76,6 +81,9 @@
   sio_rc_t sio_write(sio_t *sio, char *src, size_t n, size_t *actualp);
   
   sio_rc_t sio_push(sio_t *sio);
  +
  +int sio_flag(sio_t *sio, sio_flag_t fl);
  +int sio_clearflag(sio_t *sio, sio_flag_t fl);
   
   const char *sio_error(sio_rc_t rc);
   

From ossp-cvs-owner@ossp.org  Thu Nov  7 16:38:42 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7429D764E9; Thu,  7 Nov 2002 16:38:41 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog pth_sched.c
Message-Id: <20021107153841.7429D764E9@mail.ossp.org>
Date: Thu,  7 Nov 2002 16:38:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Nov-2002 16:38:41
  Branch: HEAD                             Handle: 2002110715384000

  Modified files:
    ossp-pkg/pth            ChangeLog pth_sched.c

  Log:
    Fix dropping of scheduler thread pools and this way fix memory leak.

  Summary:
    Revision    Changes     Path
    1.590       +3  -0      ossp-pkg/pth/ChangeLog
    1.85        +5  -5      ossp-pkg/pth/pth_sched.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.589 -r1.590 ChangeLog
  --- ossp-pkg/pth/ChangeLog	7 Nov 2002 15:21:06 -0000	1.589
  +++ ossp-pkg/pth/ChangeLog	7 Nov 2002 15:38:40 -0000	1.590
  @@ -21,6 +21,9 @@
   
     Changes between 1.4.1 and 1.5.0 (27-Jan-2002 to xx-Nov-2002)
   
  +   *) Fix dropping of scheduler thread pools and this way fix memory leak.
  +      [Ralf S. Engelschall]
  +
      *) Check for PTH_FDMODE_ERROR error conditions internally, too.
         [Ralf S. Engelschall]
   
  Index: ossp-pkg/pth/pth_sched.c
  ============================================================
  $ cvs diff -u -r1.84 -r1.85 pth_sched.c
  --- ossp-pkg/pth/pth_sched.c	5 Nov 2002 19:43:06 -0000	1.84
  +++ ossp-pkg/pth/pth_sched.c	7 Nov 2002 15:38:40 -0000	1.85
  @@ -81,27 +81,27 @@
       pth_t t;
   
       /* clear the new queue */
  -    while ((t = pth_pqueue_delmax(&pth_NQ)) != NULL);
  +    while ((t = pth_pqueue_delmax(&pth_NQ)) != NULL)
           pth_tcb_free(t);
       pth_pqueue_init(&pth_NQ);
   
       /* clear the ready queue */
  -    while ((t = pth_pqueue_delmax(&pth_RQ)) != NULL);
  +    while ((t = pth_pqueue_delmax(&pth_RQ)) != NULL)
           pth_tcb_free(t);
       pth_pqueue_init(&pth_RQ);
   
       /* clear the waiting queue */
  -    while ((t = pth_pqueue_delmax(&pth_WQ)) != NULL);
  +    while ((t = pth_pqueue_delmax(&pth_WQ)) != NULL)
           pth_tcb_free(t);
       pth_pqueue_init(&pth_WQ);
   
       /* clear the suspend queue */
  -    while ((t = pth_pqueue_delmax(&pth_SQ)) != NULL);
  +    while ((t = pth_pqueue_delmax(&pth_SQ)) != NULL)
           pth_tcb_free(t);
       pth_pqueue_init(&pth_SQ);
   
       /* clear the dead queue */
  -    while ((t = pth_pqueue_delmax(&pth_DQ)) != NULL);
  +    while ((t = pth_pqueue_delmax(&pth_DQ)) != NULL)
           pth_tcb_free(t);
       pth_pqueue_init(&pth_DQ);
       return;

From ossp-cvs-owner@ossp.org  Thu Nov  7 16:54:07 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B7D267648D; Thu,  7 Nov 2002 16:54:07 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth README devtool.conf pth_vers.c
Message-Id: <20021107155407.B7D267648D@mail.ossp.org>
Date: Thu,  7 Nov 2002 16:54:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Nov-2002 16:54:07
  Branch: HEAD                             Handle: 2002110715540700

  Modified files:
    ossp-pkg/pth            README devtool.conf pth_vers.c

  Log:
    Fix "devtool version" and switch from 1.5b0 to 2.0b0 because I finally
    decided that it's time for a major version bump. Because the latest
    changes are not small ones, especially the new pth_uctx_* sub-API, etc.

  Summary:
    Revision    Changes     Path
    1.197       +1  -1      ossp-pkg/pth/README
    1.11        +3  -0      ossp-pkg/pth/devtool.conf
    1.142       +9  -9      ossp-pkg/pth/pth_vers.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/README
  ============================================================
  $ cvs diff -u -r1.196 -r1.197 README
  --- ossp-pkg/pth/README	12 Sep 2002 09:02:04 -0000	1.196
  +++ ossp-pkg/pth/README	7 Nov 2002 15:54:07 -0000	1.197
  @@ -5,7 +5,7 @@
     |_|    \__|_| |_|                     the impossible.''
   
     GNU Pth - The GNU Portable Threads
  -  Version 1.5b1 (27-Jan-2002)
  +  Version 2.0b0 (07-Nov-2002)
   
     ABSTRACT
   
  Index: ossp-pkg/pth/devtool.conf
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 devtool.conf
  --- ossp-pkg/pth/devtool.conf	3 Nov 2002 11:06:56 -0000	1.10
  +++ ossp-pkg/pth/devtool.conf	7 Nov 2002 15:54:07 -0000	1.11
  @@ -34,6 +34,9 @@
   
   %version
       ./shtool version -lc -n 'GNU Pth' -p pth_internal_ -e pth_vers.c
  +    V=`./shtool version -lc -dlong pth_vers.c`
  +    sed -e "s/Version .*(.*)/Version $V/g" <README >README.n
  +    mv README.n README
   
   %dist
       rm -f pth-*.tar.gz
  Index: ossp-pkg/pth/pth_vers.c
  ============================================================
  $ cvs diff -u -r1.141 -r1.142 pth_vers.c
  --- ossp-pkg/pth/pth_vers.c	3 Nov 2002 11:24:49 -0000	1.141
  +++ ossp-pkg/pth/pth_vers.c	7 Nov 2002 15:54:07 -0000	1.142
  @@ -8,7 +8,7 @@
   #ifndef _PTH_VERS_C_
   #define _PTH_VERS_C_
   
  -#define PTH_INTERNAL_VERSION 0x105200
  +#define PTH_INTERNAL_VERSION 0x200100
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _PTH_VERS_C_AS_HEADER_
   
   pth_internal_version_t pth_internal_version = {
  -    0x105200,
  -    "1.5.0",
  -    "1.5.0 (03-Nov-2002)",
  -    "This is GNU Pth, Version 1.5.0 (03-Nov-2002)",
  -    "GNU Pth 1.5.0 (03-Nov-2002)",
  -    "GNU Pth/1.5.0",
  -    "@(#)GNU Pth 1.5.0 (03-Nov-2002)",
  -    "$Id: GNU Pth 1.5.0 (03-Nov-2002) $"
  +    0x200100,
  +    "2.0b0",
  +    "2.0b0 (07-Nov-2002)",
  +    "This is GNU Pth, Version 2.0b0 (07-Nov-2002)",
  +    "GNU Pth 2.0b0 (07-Nov-2002)",
  +    "GNU Pth/2.0b0",
  +    "@(#)GNU Pth 2.0b0 (07-Nov-2002)",
  +    "$Id: GNU Pth 2.0b0 (07-Nov-2002) $"
   };
   
   #endif /* _PTH_VERS_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Thu Nov  7 17:09:24 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 10361764E9; Thu,  7 Nov 2002 17:09:24 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog NEWS
Message-Id: <20021107160924.10361764E9@mail.ossp.org>
Date: Thu,  7 Nov 2002 17:09:24 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Nov-2002 17:09:23
  Branch: HEAD                             Handle: 2002110716092300

  Modified files:
    ossp-pkg/pth            ChangeLog NEWS

  Log:
    polish for release

  Summary:
    Revision    Changes     Path
    1.591       +7  -7      ossp-pkg/pth/ChangeLog
    1.35        +1  -1      ossp-pkg/pth/NEWS
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.590 -r1.591 ChangeLog
  --- ossp-pkg/pth/ChangeLog	7 Nov 2002 15:38:40 -0000	1.590
  +++ ossp-pkg/pth/ChangeLog	7 Nov 2002 16:09:23 -0000	1.591
  @@ -13,13 +13,13 @@
     of just the user-visible and/or major changes please have a look at
     the NEWS file.
   
  -     _   ____
  -    / | | ___|
  -    | | |___ \
  -    | |_ ___) |
  -  __|_(_)____/____________________________________________________________
  -
  -  Changes between 1.4.1 and 1.5.0 (27-Jan-2002 to xx-Nov-2002)
  +     ____    ___  
  +    |___ \  / _ \ 
  +      __) || | | |
  +     / __/ | |_| |
  +  __|_____(_)___/_________________________________________________________
  +                  
  +  Changes between 1.4.1 and 2.0b0 (27-Jan-2002 to 07-Nov-2002)
   
      *) Fix dropping of scheduler thread pools and this way fix memory leak.
         [Ralf S. Engelschall]
  Index: ossp-pkg/pth/NEWS
  ============================================================
  $ cvs diff -u -r1.34 -r1.35 NEWS
  --- ossp-pkg/pth/NEWS	3 Nov 2002 11:24:49 -0000	1.34
  +++ ossp-pkg/pth/NEWS	7 Nov 2002 16:09:23 -0000	1.35
  @@ -12,7 +12,7 @@
     This is a list of user-visible and/or major changes to GNU Pth.
     For more details please have a look at the ChangeLog file.
   
  -  Changes between 1.4 and 1.5 (24-Mar-2001 to xx-Oct-2002)
  +  Changes between 1.4 and 2.0 (24-Mar-2001 to xx-Nov-2002)
   
      *) Added thread attribute PTH_ATTR_DISPATCHES.
      *) Added sub-API pth_uctx_* for user-space context switching.

From ossp-cvs-owner@ossp.org  Thu Nov  7 17:11:45 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DA7DE764E9; Thu,  7 Nov 2002 17:11:44 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new news.txt ossp-web/pkg/lib index.wml ossp-web/...
Message-Id: <20021107161144.DA7DE764E9@mail.ossp.org>
Date: Thu,  7 Nov 2002 17:11:44 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   07-Nov-2002 17:11:44
  Branch: HEAD                             Handle: 2002110716114301

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/pth    index.wml

  Log:
    release of GNU Pth 2.0b0

  Summary:
    Revision    Changes     Path
    1.32        +1  -0      ossp-web/new/news.txt
    1.34        +1  -1      ossp-web/pkg/lib/index.wml
    1.6         +3  -3      ossp-web/pkg/lib/pth/index.wml
  ____________________________________________________________________________

  Index: ossp-web/new/news.txt
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 news.txt
  --- ossp-web/new/news.txt	7 Nov 2002 12:49:42 -0000	1.31
  +++ ossp-web/new/news.txt	7 Nov 2002 16:11:43 -0000	1.32
  @@ -1,3 +1,4 @@
  +07-Nov-2002: Released L<GNU pth> 2.0b0
   07-Nov-2002: Released L<OSSP sa> 1.0.1
   02-Nov-2002: Released T<OSSP shtool> 1.6.2
   01-Nov-2002: Released L<OSSP sa> 1.0.0
  Index: ossp-web/pkg/lib/index.wml
  ============================================================
  $ cvs diff -u -r1.33 -r1.34 index.wml
  --- ossp-web/pkg/lib/index.wml	7 Nov 2002 12:49:43 -0000	1.33
  +++ ossp-web/pkg/lib/index.wml	7 Nov 2002 16:11:43 -0000	1.34
  @@ -15,7 +15,7 @@
   <pkg_list>
     <pkg_item name="pth" longname="GNU pth" type="lib"
               desc="Portable Threads"
  -			done=100 stable=1.4.1 unstable=none>
  +			done=100 stable=1.4.1 unstable=2.0b0>
     <pkg_item name="mm" longname="OSSP mm" type="lib"
               desc="Shared Memory Allocation"
   			done=100 stable=1.2.1 unstable=none>
  Index: ossp-web/pkg/lib/pth/index.wml
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 index.wml
  --- ossp-web/pkg/lib/pth/index.wml	2 Oct 2002 12:25:20 -0000	1.5
  +++ ossp-web/pkg/lib/pth/index.wml	7 Nov 2002 16:11:44 -0000	1.6
  @@ -54,8 +54,8 @@
   
   <pkg_status
       name="pth" assign="rse"
  -    stable="1.4.1"   stable_date="27-Jan-2002"
  -    unstable="none"  unstable_date="none"
  +    stable="1.4.1" stable_date="27-Jan-2002"
  +    unstable="2.0b0" unstable_date="07-Nov-2002"
   	done=100>
   
   <h2>Source</h2>
  @@ -65,7 +65,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/pth/
       directory=$(FTP_ROOT_DIR)/pkg/lib/pth/
       files="pth-*.tar.gz" 
  -	stable="pth-1.4.1.tar.gz" unstable="none">
  +	stable="pth-1\.4\.1\.tar\.gz" unstable="pth-2\.0b0\.tar\.gz">
   	
   <h2>Donation</h2>
   

From ossp-cvs-owner@ossp.org  Fri Nov  8 09:59:33 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D03317648C; Fri,  8 Nov 2002 09:59:32 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio_hole.c sio_null.c
Message-Id: <20021108085932.D03317648C@mail.ossp.org>
Date: Fri,  8 Nov 2002 09:59:32 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   08-Nov-2002 09:59:32
  Branch: HEAD                             Handle: 2002110808593200

  Modified files:
    ossp-pkg/sio            sio_hole.c sio_null.c

  Log:
    less cluttering name for private data pointer

  Summary:
    Revision    Changes     Path
    1.3         +6  -6      ossp-pkg/sio/sio_hole.c
    1.4         +11 -11     ossp-pkg/sio/sio_null.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio_hole.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 sio_hole.c
  --- ossp-pkg/sio/sio_hole.c	5 Nov 2002 13:23:36 -0000	1.2
  +++ ossp-pkg/sio/sio_hole.c	8 Nov 2002 08:59:32 -0000	1.3
  @@ -17,13 +17,13 @@
   static
   sio_rc_t hole_init(sio_t *sio, void **u)
   {
  -    private_t *mydata;
  +    private_t *my;
       
  -    mydata = (private_t *)malloc(sizeof(private_t));
  -    if (mydata == NULL)
  +    my = (private_t *)malloc(sizeof(private_t));
  +    if (my == NULL)
           return SIO_ERR_MEM;
   
  -    *u = mydata;
  +    *u = my;
   
       return SIO_OK;
   }
  @@ -45,9 +45,9 @@
   static
   sio_rc_t hole_cleanup(sio_t *sio, void *u)
   {
  -    private_t *mydata = (private_t *)u;
  +    private_t *my = (private_t *)u;
   
  -    free(mydata);
  +    free(my);
   
       return SIO_OK;
   }
  Index: ossp-pkg/sio/sio_null.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 sio_null.c
  --- ossp-pkg/sio/sio_null.c	5 Nov 2002 13:23:36 -0000	1.3
  +++ ossp-pkg/sio/sio_null.c	8 Nov 2002 08:59:32 -0000	1.4
  @@ -19,17 +19,17 @@
   static
   sio_rc_t null_init(sio_t *sio, void **u)
   {
  -    private_t *mydata;
  +    private_t *my;
       
  -    mydata = (private_t *)malloc(sizeof(private_t));
  -    if (mydata == NULL)
  +    my = (private_t *)malloc(sizeof(private_t));
  +    if (my == NULL)
           return SIO_ERR_MEM;
   
  -    mydata->a = 42;
  -    mydata->b = 42.0;
  -    mydata->c = "42";
  +    my->a = 42;
  +    my->b = 42.0;
  +    my->c = "42";
   
  -    *u = mydata;
  +    *u = my;
   
       return SIO_OK;
   }
  @@ -42,9 +42,9 @@
   static
   sio_rc_t null_configure(sio_t *sio, void *u, void *obj, void *val)
   {
  -    private_t *mydata = (private_t *)u;
  +    private_t *my = (private_t *)u;
   
  -    mydata->a = *(int *)val;
  +    my->a = *(int *)val;
   
       return SIO_OK;
   }
  @@ -55,9 +55,9 @@
   static
   sio_rc_t null_cleanup(sio_t *sio, void *u)
   {
  -    private_t *mydata = (private_t *)u;
  +    private_t *my = (private_t *)u;
   
  -    free(mydata);
  +    free(my);
   
       return SIO_OK;
   }

From ossp-cvs-owner@ossp.org  Fri Nov  8 11:34:25 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 315A77648D; Fri,  8 Nov 2002 11:34:25 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio.c sio.h sio_hello.c
Message-Id: <20021108103425.315A77648D@mail.ossp.org>
Date: Fri,  8 Nov 2002 11:34:25 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   08-Nov-2002 11:34:25
  Branch: HEAD                             Handle: 2002110810342400

  Modified files:
    ossp-pkg/sio            sio.c sio.h sio_hello.c

  Log:
    add SIO_LOOP status to simplify protocol state machine

  Summary:
    Revision    Changes     Path
    1.9         +3  -0      ossp-pkg/sio/sio.c
    1.4         +2  -1      ossp-pkg/sio/sio.h
    1.4         +2  -12     ossp-pkg/sio/sio_hello.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 sio.c
  --- ossp-pkg/sio/sio.c	5 Nov 2002 16:53:55 -0000	1.8
  +++ ossp-pkg/sio/sio.c	8 Nov 2002 10:34:24 -0000	1.9
  @@ -133,6 +133,8 @@
               h = PREV(h,hd);
           else if (rc == SIO_XSTREAM)
               h = h->cross;
  +        else if (rc == SIO_LOOP)
  +            h = h;
           else
               break;
       }
  @@ -609,6 +611,7 @@
       case SIO_UPSTREAM:   mess = "Invoke Upstream Stage"; break;
       case SIO_DOWNSTREAM: mess = "Invoke Downstream Stage"; break;
       case SIO_XSTREAM:    mess = "Invoke Crossstream Stage"; break;
  +    case SIO_LOOP:       mess = "Loop through current Stage"; break;
       default:             mess = "Invalid Result Code"; break;
       }
   
  Index: ossp-pkg/sio/sio.h
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 sio.h
  --- ossp-pkg/sio/sio.h	7 Nov 2002 15:29:53 -0000	1.3
  +++ ossp-pkg/sio/sio.h	8 Nov 2002 10:34:24 -0000	1.4
  @@ -40,7 +40,8 @@
       SIO_ERR_INT,
       SIO_UPSTREAM,
       SIO_DOWNSTREAM,
  -    SIO_XSTREAM
  +    SIO_XSTREAM,
  +    SIO_LOOP
   } sio_rc_t;
   
   typedef enum {
  Index: ossp-pkg/sio/sio_hello.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 sio_hello.c
  --- ossp-pkg/sio/sio_hello.c	5 Nov 2002 17:20:22 -0000	1.3
  +++ ossp-pkg/sio/sio_hello.c	8 Nov 2002 10:34:24 -0000	1.4
  @@ -254,22 +254,12 @@
           if (isoutput) {
               my->isoutput = 1;
               hello_saveoutput(my);
  -            GOTO(PROMPTING, SIO_UPSTREAM);
  -            /*
  -             * FALL THROUGH to next state
  -             *
  -             * XXX = fall through is ugly
  -             * XXX + efficient, no extra pass through scheduler
  -             * XXX - scheduler doesn't support loops yet, we
  -             *       could simulate this with extra states that
  -             *       ping-pong back to the "right" side (ugh!)
  -             */
  +            GOTO(PROMPTING, SIO_LOOP);
           } else {
               my->isoutput = 0;
               GOTO(PROMPTING, SIO_XSTREAM);
  -            break;
           }
  -        /* FALL THROUGH */
  +        break;
   
       case PROMPTING:
   

From ossp-cvs-owner@ossp.org  Fri Nov  8 11:36:35 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A17F97648D; Fri,  8 Nov 2002 11:36:35 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio.pod
Message-Id: <20021108103635.A17F97648D@mail.ossp.org>
Date: Fri,  8 Nov 2002 11:36:35 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   08-Nov-2002 11:36:35
  Branch: HEAD                             Handle: 2002110810363500

  Modified files:
    ossp-pkg/sio            sio.pod

  Log:
    more documentation of stages
    SIO_LOOP

  Summary:
    Revision    Changes     Path
    1.2         +156 -2     ossp-pkg/sio/sio.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio.pod
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 sio.pod
  --- ossp-pkg/sio/sio.pod	7 Nov 2002 15:29:08 -0000	1.1
  +++ ossp-pkg/sio/sio.pod	8 Nov 2002 10:36:35 -0000	1.2
  @@ -121,6 +121,7 @@
    SIO_UPSTREAM   Invoke Upstream Stage
    SIO_DOWNSTREAM Invoke Downstream Stage
    SIO_XSTREAM    Invoke Crossstream Stage
  + SIO_LOOP       Loop through current Stage
   
   =item B<sio_mode_t> (Attach Mode Type)
   
  @@ -347,7 +348,8 @@
   used to force either direction, the standard code B<SIO_OK> lets the
   scheduler determine the direction depending on the input assembly line.
   The special return code B<SIO_XSTREAM> will schedule the corresponding
  -output side of the stream.
  +output side of the stream and the code B<SIO_LOOP> instructs the
  +scheduler to call the same stage again.
   Any other code will abort the scheduler and leave the stream in an
   inconsistent state.
   
  @@ -359,7 +361,8 @@
   used to force either direction, the standard code B<SIO_OK> lets the
   scheduler determine the direction depending on the input assembly line.
   The special return code B<SIO_XSTREAM> will schedule the corresponding
  -input side of the stream.
  +input side of the stream and the code B<SIO_LOOP> instructiosn the
  +scheduler to call the same stage again.
   Any other code will abort the scheduler and leave the stream in an
   inconsistent state.
   
  @@ -386,6 +389,157 @@
   and vice versa. The stage must then implement a state machine
   that directs the scheduler back to the originating side to
   keep I/O semantics consistent.
  +
  +=head2 Stage Modules
  +
  +=over 4
  +
  +=item Private data per instance
  +
  +Private data needs to be encapsuled into a structure that can
  +be referenced with a single pointer.
  +
  + typedef struct {
  +     int a;
  +     float b;
  +     char *c;
  + } private_t;
  +
  + static
  + sio_rc_t XXX_init(sio_t *sio, void **up) {
  +
  +     private_t *my;
  +
  +     my = (private_t *)malloc(sizeof(private_t));
  +     if (my == NULL)
  +         return SIO_ERR_MEM;
  +
  +     /* initialize private data... */
  +
  +     /* pass back to SIO, the pointer will be passed
  +      * to every other function in the module.
  +      */
  +     *up = my;
  +     return SIO_OK;
  + }
  +
  +The init function is called when the stage is created with
  +B<sio_create_stage> and a corresponding cleanup function is called
  +when the stage is detroyed with B<sio_destroy_stage>.
  +
  + static
  + sio_rc_t XXX_cleanup(sio_t *sio, void *u)
  + {
  +     private_t *my = (private_t *)u;
  +
  +     /* deinitialize private data... */
  +
  +     /* free memory */
  +     free(my);
  +
  +     return SIO_OK;
  + }
  +
  +Most stages require parameters to complete initialization. These
  +parameters are passed through B<sio_configure_stage> to the
  +configure function of the module.
  +
  + static
  + sio_rc_t XXX_configure(sio_t *sio, void *u, void *o, void *v)
  + {
  +     private_t *my = (private_t *)u;
  +     const char *name = (const char *)o;
  +
  +     if (strcmp(name, "parameter1") == 0) {
  +         /* fetch parameter by reference */
  +         int par1 = *(int *)v;
  +         /* store parameter1 */
  +         my->a = par1;
  +     } elsif (strcmp(name, "parameter2") == 0) {
  +         /* fetch parameter by reference */
  +         float par2 = *(float *)v;
  +         /* store parameter2 */
  +         my->b = par2;
  +     } elsif (strcmp(name, "parameter2") == 0) {
  +         /* XXX - fetch parameter by value */
  +         char *par3 = (char *)v;
  +         /* store parameter2 */
  +         my->c = par3;
  +     } else {
  +         return SIO_ERR_ARG;
  +     }
  +
  +     return SIO_OK;
  + }
  +
  +=item Attaching and detaching stages
  +
  +A data pipe consists of one or more processing nodes, that operate
  +on a shared B<OSSP al> assembly line. B<OSSP sio> will call the
  +corresponding B<sios-E<gt>openr> and B<sios-E<gt>openw> functions
  +before attaching a node to the input pipe or the output pipe
  +respectively.
  +The functions B<sios-E<gt>closer> and B<sios-E<gt>closew> are
  +then called after detaching a node.
  +
  +=item Input and Output
  +
  +The input and output functions of all stages on a data pipe are
  +called by a scheduler which is started by calling the API functions
  +B<sio_input> and B<sio_output>. The scheduler first calls the
  +bottom-most stage which then returns a special status code
  +to direct the scheduler either upstream to the next stage
  +or downstream to the previous stage.
  +
  +The standard action of an input stage is to push data downstream:
  +
  + if (can deliver data)
  +     put data on assembly line
  +     return SIO_DOWNSTREAM
  + else
  +     return SIO_UPSTREAM
  +
  +The standard action of an output stage is the reverse to push
  +data upstream:
  +
  + if (can deliver data)
  +     put data on assembly line
  +     return SIO_UPSTREAM
  + else
  +     return SIO_DOWNSTREAM
  +
  +In many situations this can be handled by the scheduler:
  +
  + put data on assembly line
  + return SIO_OK
  +
  +which then interprets any data on the assembly line as
  +ready to be delivered.
  +
  +=item Top-Most Stage
  +
  +The top-most stage behaves differently since it has no
  +upstream peer to send data to or fetch data from. Instead
  +it needs to discard output data and block until it can
  +deliver data. The only valid return code is therefore
  +SIO_DOWNSTREAM.
  +
  +=item Standard Input and Output
  +
  +The basic <OSSP sio> operation does not support failure
  +modes, in particular: end-of-file conditions and errors.
  +This is implemented on top using the <OSSP al> data labelling
  +capability.
  +
  +=item Full-Duplex Protocol Operation
  +
  +The two halfs of a <OSSP sio> stream are separated by design:
  +B<sio_input> schedules all stages attached to the input
  +assembly line and B<sio_output> schedules all stages attached
  +to the output assembly line.
  +
  +
  +=back
   
   =head1 SEE ALSO
   

From ossp-cvs-owner@ossp.org  Fri Nov  8 12:03:16 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 86B257648D; Fri,  8 Nov 2002 12:03:14 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio.pod
Message-Id: <20021108110314.86B257648D@mail.ossp.org>
Date: Fri,  8 Nov 2002 12:03:14 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   08-Nov-2002 12:03:14
  Branch: HEAD                             Handle: 2002110811031300

  Modified files:
    ossp-pkg/sio            sio.pod

  Log:
    protocol pseudo-code example

  Summary:
    Revision    Changes     Path
    1.3         +80 -3      ossp-pkg/sio/sio.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio.pod
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 sio.pod
  --- ossp-pkg/sio/sio.pod	8 Nov 2002 10:36:35 -0000	1.2
  +++ ossp-pkg/sio/sio.pod	8 Nov 2002 11:03:13 -0000	1.3
  @@ -405,7 +405,6 @@
        char *c;
    } private_t;
   
  - static
    sio_rc_t XXX_init(sio_t *sio, void **up) {
   
        private_t *my;
  @@ -427,7 +426,6 @@
   B<sio_create_stage> and a corresponding cleanup function is called
   when the stage is detroyed with B<sio_destroy_stage>.
   
  - static
    sio_rc_t XXX_cleanup(sio_t *sio, void *u)
    {
        private_t *my = (private_t *)u;
  @@ -444,7 +442,6 @@
   parameters are passed through B<sio_configure_stage> to the
   configure function of the module.
   
  - static
    sio_rc_t XXX_configure(sio_t *sio, void *u, void *o, void *v)
    {
        private_t *my = (private_t *)u;
  @@ -537,6 +534,86 @@
   B<sio_input> schedules all stages attached to the input
   assembly line and B<sio_output> schedules all stages attached
   to the output assembly line.
  +
  +A full-duplex protocol however needs to mix input and output
  +operations. This can be done by telling the scheduler to
  +cross sides with the result code SIO_XSTREAM and by maintaining
  +a state machine that directs the scheduler back to the
  +originating track.
  +
  +Example:
  +
  + sio_rc_t XXX_openr(sio_t *sio, al_t *al, void *u)
  + {
  +     private_t *my = (private_t *)u;
  +     ... 
  +     /* cache reference to input assembly line */
  +     my->al_in = al;
  +     my->state = INIT;
  +     ...
  + }
  + sio_rc_t XXX_openw(sio_t *sio, al_t *al, void *u)
  + {
  +     private_t *my = (private_t *)u;
  +     ... 
  +     /* cache reference to output assembly line */
  +     my->al_out = al;
  +     my->state = INIT;
  +     ...
  + }
  + sio_rc_t XXX_input(sio_t *sio, al_t *al, void *u)
  + {
  +     return XXX_protocol(sio, (private_t *)u, 0);
  + }
  + sio_rc_t XXX_output(sio_t *sio, al_t *al, void *u)
  + {
  +     return XXX_protocol(sio, (private_t *)u, 1);
  + }
  +
  +
  + sio_rc_t XXX_protocol(sio_t *sio, private_t *my, int isoutput)
  + {
  +     switch (my->state) {
  +     case INIT:
  +        my->isoutput = isoutput;
  +        my->state    = NEXT;
  +        ...
  +        /* protocol needs global assembly lines,
  +         * we need to put aside any data */
  +        XXX_preserve_al(my);
  +
  +        /* protocol starts with output */
  +        if (isoutput) {
  +
  +            return SIO_LOOP;    /* next state on this side */
  +        } else
  +            return SIO_XSTREAM; /* next state on other side */
  +
  +     case NEXT:
  +     ....
  +     case INPUT:
  +        al_append_bytes(my->al_in, ...);
  +     ...
  +     case OUTPUT:
  +        al_append_bytes(my->al_out, ...);
  +     ...
  +     case LAST:
  +        ...
  +        my->state = DONE;
  +
  +        /* restore global asembly lines */
  +        XXX_restore_output(my);
  +
  +        if (isoutput != my->isoutput)
  +            return SIO_XSTREAM;
  +        else
  +            return SIO_LOOP;
  +
  +     case DONE:
  +     ...
  +     }
  +     ...
  + }
   
   
   =back

From ossp-cvs-owner@ossp.org  Fri Nov  8 12:10:42 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E25F47648D; Fri,  8 Nov 2002 12:10:41 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio_hello.c
Message-Id: <20021108111041.E25F47648D@mail.ossp.org>
Date: Fri,  8 Nov 2002 12:10:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   08-Nov-2002 12:10:41
  Branch: HEAD                             Handle: 2002110811104100

  Modified files:
    ossp-pkg/sio            sio_hello.c

  Log:
    align example protocol module with documentation

  Summary:
    Revision    Changes     Path
    1.5         +46 -25     ossp-pkg/sio/sio_hello.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio_hello.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 sio_hello.c
  --- ossp-pkg/sio/sio_hello.c	8 Nov 2002 10:34:24 -0000	1.4
  +++ ossp-pkg/sio/sio_hello.c	8 Nov 2002 11:10:41 -0000	1.5
  @@ -30,7 +30,8 @@
       state_t state;
       char passwd[NPASS];    /* input buffer */
       int  npass;            /* characters in input buffer */
  -    al_t *pre;             /* saved output during protocol */
  +    al_t *pre_in;          /* saved during protocol */
  +    al_t *pre_out;         /* saved during protocol */
       int isoutput;          /* remember originator of protocol */
       al_label_t data_label; /* al labels used by SIO */
       al_label_t eof_label;
  @@ -56,7 +57,9 @@
       sio_label(sio, SIO_LN_DATA, &my->data_label);
       sio_label(sio, SIO_LN_EOF, &my->eof_label);
   
  -    my->eof   = '\0';
  +    my->eof     = '\0';
  +    my->pre_in  = NULL;
  +    my->pre_out = NULL;
   
       *u = my;
   
  @@ -82,8 +85,6 @@
   {
       private_t *my = (private_t *)u;
   
  -    al_destroy(my->pre);
  -
       free(my);
   
       return SIO_OK;
  @@ -102,6 +103,10 @@
       private_t *my = (private_t *)u;
   
       hello_setup(sio,my);
  +
  +    if (al_create(&my->pre_in) != AL_OK)
  +        return SIO_ERR_INT;
  +
       my->al_in = al;
   
       return SIO_OK;
  @@ -110,6 +115,11 @@
   static
   sio_rc_t hello_closer(sio_t *sio, al_t *al, void *u)
   {
  +    private_t *my = (private_t *)u;
  +
  +    al_destroy(my->pre_in);
  +    my->pre_in = NULL;
  +
       return SIO_OK;
   }
   
  @@ -119,7 +129,10 @@
       private_t *my = (private_t *)u;
   
       hello_setup(sio,my);
  -    al_create(&my->pre);
  +
  +    if (al_create(&my->pre_out) != AL_OK)
  +        return SIO_ERR_INT;
  +
       my->al_out = al;
   
       return SIO_OK;
  @@ -130,8 +143,8 @@
   {
       private_t *my = (private_t *)u;
   
  -    al_destroy(my->pre);
  -    my->pre = NULL;
  +    al_destroy(my->pre_out);
  +    my->pre_out = NULL;
   
       return SIO_OK;
   }
  @@ -179,30 +192,33 @@
   }
   
   /*
  - * defer initial output until protocol is done
  + * defer initial data until protocol is done
    */
   static
  -void hello_saveoutput(private_t *my)
  +void hello_save(private_t *my)
   {
  -    al_splice(my->pre, al_bytes(my->pre), 0, my->al_out, NULL);
  +    al_splice(my->pre_in,  al_bytes(my->pre_in),  0, my->al_in, NULL);
  +    al_splice(my->pre_out, al_bytes(my->pre_out), 0, my->al_out, NULL);
   }
   
   /*
    * restore saved output after handshake completed successfully
    */
   static
  -void hello_restoreoutput(private_t *my)
  +void hello_restore(private_t *my)
   {
  -    al_splice(my->al_out, 0, 0, my->pre, NULL);
  +    al_splice(my->al_in,  0, 0, my->pre_in,  NULL);
  +    al_splice(my->al_out, 0, 0, my->pre_out, NULL);
   }
   
   /*
  - * kill saved output
  + * kill saved data
    */
   static
   void hello_dropsaved(private_t *my)
   {
  -    al_splice(my->pre, 0, al_bytes(my->pre), NULL, NULL);
  +    al_splice(my->pre_in,  0, al_bytes(my->pre_in),  NULL, NULL);
  +    al_splice(my->pre_out, 0, al_bytes(my->pre_out), NULL, NULL);
   }
   
   /*
  @@ -211,7 +227,7 @@
   static
   void hello_sendprompt(private_t *my)
   {
  -        al_prepend_bytes(my->al_out, PROMPT, NPROMPT, my->data_label);
  +    al_prepend_bytes(my->al_out, PROMPT, NPROMPT, my->data_label);
   }
   
   /************************************************************************/
  @@ -246,17 +262,20 @@
            * we can complete correctly after handshake
            * is done
            *
  -         * if caller starts with write, preserve data
  +         * save global assembly lines
  +         *
  +         * if caller starts with write, stay
            *
            * if caller starts with read, switch to writer
            *
            */
  +
  +        hello_save(my);
  +        my->isoutput = isoutput;
  +
           if (isoutput) {
  -            my->isoutput = 1;
  -            hello_saveoutput(my);
               GOTO(PROMPTING, SIO_LOOP);
           } else {
  -            my->isoutput = 0;
               GOTO(PROMPTING, SIO_XSTREAM);
           }
           break;
  @@ -322,18 +341,20 @@
               good = my->npass == NPASS &&
                      memcmp(my->passwd, PASSWD, NPASS) == 0;
               if (!good) {
  +                hello_dropsaved(my);
                   if (my->isoutput) {
  -                    hello_dropsaved(my);
                       GOTO(BAD, SIO_XSTREAM);
                   } else {
                       hello_writeeof(my);
                       GOTO(BAD, SIO_DOWNSTREAM);
                   }
  -            } else if (my->isoutput) {
  -                hello_restoreoutput(my);
  -                GOTO(GOOD, SIO_XSTREAM);
  -            } else
  -                GOTO(GOOD, SIO_OK);
  +            } else {
  +                hello_restore(my);
  +                if (isoutput != my->isoutput) {
  +                    GOTO(GOOD, SIO_XSTREAM);
  +                } else
  +                    GOTO(GOOD, SIO_LOOP);
  +            }
           }
           break;
   

From ossp-cvs-owner@ossp.org  Fri Nov  8 12:12:29 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C85747648D; Fri,  8 Nov 2002 12:12:28 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio_hello.c
Message-Id: <20021108111228.C85747648D@mail.ossp.org>
Date: Fri,  8 Nov 2002 12:12:28 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   08-Nov-2002 12:12:28
  Branch: HEAD                             Handle: 2002110811122800

  Modified files:
    ossp-pkg/sio            sio_hello.c

  Log:
    more alignments, code cleanup

  Summary:
    Revision    Changes     Path
    1.6         +2  -3      ossp-pkg/sio/sio_hello.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio_hello.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 sio_hello.c
  --- ossp-pkg/sio/sio_hello.c	8 Nov 2002 11:10:41 -0000	1.5
  +++ ossp-pkg/sio/sio_hello.c	8 Nov 2002 11:12:28 -0000	1.6
  @@ -342,11 +342,10 @@
                      memcmp(my->passwd, PASSWD, NPASS) == 0;
               if (!good) {
                   hello_dropsaved(my);
  -                if (my->isoutput) {
  +                if (isoutput != my->isoutput) {
                       GOTO(BAD, SIO_XSTREAM);
                   } else {
  -                    hello_writeeof(my);
  -                    GOTO(BAD, SIO_DOWNSTREAM);
  +                    GOTO(BAD, SIO_LOOP);
                   }
               } else {
                   hello_restore(my);

From ossp-cvs-owner@ossp.org  Fri Nov  8 12:28:10 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2DB29764E9; Fri,  8 Nov 2002 12:28:10 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth PORTING
Message-Id: <20021108112810.2DB29764E9@mail.ossp.org>
Date: Fri,  8 Nov 2002 12:28:10 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Nov-2002 12:28:10
  Branch: HEAD                             Handle: 2002110811280900

  Modified files:
    ossp-pkg/pth            PORTING

  Log:
    upgrade PORTING file (now auto-generated)

  Summary:
    Revision    Changes     Path
    1.188       +217 -166   ossp-pkg/pth/PORTING
  ____________________________________________________________________________

  Index: ossp-pkg/pth/PORTING
  ============================================================
  $ cvs diff -u -r1.187 -r1.188 PORTING
  --- ossp-pkg/pth/PORTING	1 Jul 2002 12:54:54 -0000	1.187
  +++ ossp-pkg/pth/PORTING	8 Nov 2002 11:28:09 -0000	1.188
  @@ -14,172 +14,223 @@
     The Pth package was successfully tested on the following platforms
     (and should automatically adjust to other platforms, of course):
   
  -  __PLATFORM_ID_______________________ __MACHINE_CONTEXT__ __STACK__ __VERSION__
  -  i686-pc-freebsd3.4                  | sjlj/ssjlj/sas    | down    | 1.3.0
  -  i586-pc-freebsd3.1                  | sjlj/ssjlj/sas    | down    | 1.3.3
  -  i686-pc-freebsd3.1                  | sjlj/ssjlj/sas    | down    | 1.3.0
  -  i586-pc-freebsd3.2                  | sjlj/ssjlj/sas    | down    | 1.2.0
  -  i686-pc-freebsd3.2                  | sjlj/ssjlj/sas    | down    | 1.3.5
  -  i386-pc-freebsd3.2                  | sjlj/ssjlj/sas    | down    | 1.3.7
  -  i386-pc-freebsd3.3                  | sjlj/ssjlj/sas    | down    | 1.2.1
  -  i486-pc-freebsd3.3                  | sjlj/ssjlj/sas    | down    | 1.2.1
  -  i586-pc-freebsd3.3                  | sjlj/ssjlj/sas    | down    | 1.3a5
  -  i686-pc-freebsd3.3                  | sjlj/ssjlj/sas    | down    | 1.2.0
  -  i386-pc-freebsd3.4                  | sjlj/ssjlj/sas    | down    | 1.3a2
  -  i586-pc-freebsd3.4                  | sjlj/ssjlj/sas    | down    | 1.2.2
  -  i686-pc-freebsd3.5                  | sjlj/ssjlj/sas    | down    | 1.4a2
  -  i686-pc-freebsd4.0                  | sjlj/ssjlj/sas    | down    | 1.3.0
  -  i586-pc-freebsd4.0                  | sjlj/ssjlj/sas    | down    | 1.3b2
  -  i586-pc-freebsd4.1                  | sjlj/ssjlj/sas    | down    | 1.3.7
  -  i686-pc-freebsd4.1                  | sjlj/ssjlj/sas    | down    | 1.4a3
  -  i686-pc-freebsd4.1.1                | sjlj/ssjlj/sas    | down    | 1.4a4
  -  i686-pc-freebsd4.1.1                | sjlj/ssjlj/sas    | down    | 1.3.7
  -  i686-pc-freebsd4.2                  | sjlj/ssjlj/sas    | down    | 1.4a3
  -  i686-pc-freebsd4.3                  | sjlj/ssjlj/sas    | down    | 1.4a4
  -  i686-pc-freebsd4.2                  | sjlj/ssjlj/sas    | down    | 1.3.7
  -  i586-pc-freebsd5.0                  | sjlj/ssjlj/sas    | down    | 1.3.4
  -  i386-unknown-freebsd4.6             | sjlj/ssjlj/sas    | down    | 1.5b1
  -  alpha-unknown-freebsd4.0            | sjlj/ssjlj/sas    | down    | 1.3.0
  -  alpha-unknown-freebsd5.0            | sjlj/ssjlj/sas    | down    | 1.3.5
  -  powerpc-unknown-netbsd              | sjlj/ssjlj/sas    | down    | 1.3.2
  -  i386-unknown-netbsd1.4              | sjlj/ssjlj/sas    | down    | 1.3.0
  -  i386-unknown-netbsd1.4.1            | sjlj/ssjlj/sas    | down    | 1.3.0
  -  sparc-unknown-netbsd1.4.1           | sjlj/ssjlj/sas    | down    | 1.2b8
  -  alpha-unknown-netbsd1.4.1           | sjlj/ssjlj/sas    | down    | 1.3.2
  -  mipsel-unknown-netbsd1.4.2          | sjlj/ssjlj/sas    | down    | 1.3.5
  -  i386-unknown-netbsd1.4.2            | sjlj/ssjlj/sas    | down    | 1.3.6
  -  m68k-cbm-netbsd1.4.1                | sjlj/ssjlj/sas    | down    | 1.3a5
  -  m68k-apple-netbsd1.4.1              | sjlj/ssjlj/sas    | down    | 1.2b5
  -  i386-unknown-netbsd1.4T             | sjlj/ssjlj/sas    | down    | 1.3.5
  -  powerpc-apple-netbsd1.4.2           | sjlj/ssjlj/sas    | down    | 1.3.5
  -  i386-unknown-netbsd1.4.2            | sjlj/ssjlj/sas    | down    | 1.4a2
  -  alpha-unknown-netbsd1.3.3           | sjlj/ssjlj/sas    | down    | 1.1.4
  -  i386-unknown-netbsd1.3.3            | sjlj/ssjlj/sas    | down    | 1.1.5
  -  m68k-apple-netbsd1.3.3              | sjlj/ssjlj/sas    | down    | 1.3.7
  -  mips-dec-netbsd1.5                  | sjlj/ssjlj/sas    | down    | 1.3.7
  -  sparc--netbsd                       | sjlj/ssjlj/sas    | down    | 1.3.7
  -  alpha-unknown-netbsd1.5.1           | sjlj/ssjlj/sas    | down    | 1.4a2
  -  i386-unknown-openbsd2.5             | sjlj/ssjlj/sas    | down    | 1.2b5
  -  sparc-unknown-openbsd2.6            | sjlj/ssjlj/sas    | down    | 1.2.0
  -  i386-unknown-openbsd2.6             | sjlj/ssjlj/sas    | down    | 1.2.1
  -  i386-unknown-openbsd2.7             | sjlj/ssjlj/sas    | down    | 1.3.7
  -  i386-unknown-openbsd2.8             | sjlj/ssjlj/sas    | down    | 1.4a2
  -  i386-pc-bsdi4.0                     | sjlj/ssjlj/sas    | down    | 1.3.3
  -  i386-pc-bsdi4.1                     | sjlj/ssjlj/sas    | down    | 1.3.7
  -  armv4l-unknown-linux-gnu            | sjlj/ssjlj/sas    | down    | 1.2b8
  -  i586-redhat-linux-gnu2.0glibc2.0    | sjlj/sjljlx/none  | down    | 1.3.0
  -  i586-redhat-linux-gnu2.2glibc2.0    | sjlj/sjljlx/none  | down    | 1.3a2
  -  i686-redhat-linux-gnu2.2glibc2.0    | sjlj/sjljlx/none  | down    | 1.3a1
  -  i686-redhat-linux-gnu2.2glibc2.1    | sjlj/ssjlj/sas    | down    | 1.3b2
  -  i586-redhat-linux-gnu2.2glibc2.1    | sjlj/ssjlj/sas    | down    | 1.3.1
  -  i686-redhat-linux-gnu2.3glibc2.0    | sjlj/sjljlx/none  | down    | 1.3a4
  -  i586-redhat-linux-gnu2.2glibc2.1    | sjlj/ssjlj/sas    | down    | 1.3.1
  -  i686-redhat-linux-gnu2.2glibc2.1    | sjlj/ssjlj/sas    | down    | 1.3.3
  -  i486-redhat-linux-gnu2.2glibc2.1    | sjlj/ssjlj/sas    | down    | 1.3.5
  -  i586-redhat-linux-gnu2.2glibc1      | sjlj/ssjlj/sas    | down    | 1.3.7
  -  i586-redhat-linux-gnu2.2glibc2.2    | sjlj/ssjlj/sas    | down    | 1.3.7
  -  i686-redhat-linux-gnu2.2glibc2.2    | sjlj/ssjlj/sas    | down    | 1.3.7
  -  i686-redhat-linux-gnu2.4glibc2.2    | sjlj/ssjlj/sas    | down    | 1.3.7
  -  powerpc-redhat-linux-gnu2.2glibc2.1 | sjlj/ssjlj/sas    | down    | 1.3.7
  -  i586-suse-linux-gnu2.2glibc2.0      | sjlj/sjljlx/none  | down    | 1.3.7
  -  i686-suse-linux-gnu2.2glibc2.0      | sjlj/sjljlx/none  | down    | 1.3.1
  -  i586-suse-linux-gnu2.2glibc2.1      | sjlj/ssjlj/sas    | down    | 1.3.2
  -  i686-suse-linux-gnu2.2glibc2.1      | sjlj/ssjlj/sas    | down    | 1.3.2
  -  i686-suse-linux-gnu2.2glibc2.1      | sjlj/ssjlj/sas    | down    | 1.3.2
  -  i486-gnu-linux-gnu2.0glibc1         | sjlj/sjljlx/none  | down    | 1.3.7
  -  i586-gnu-linux-gnu2.4glibc2.1       | sjlj/ssjlj/sas    | down    | 1.3.7
  -  i586-gnu-linux-gnu2.0glibc1         | sjlj/sjljlx/none  | down    | 1.3.1
  -  i586-gnu-linux-gnu2.2glibc1         | sjlj/sjljlx/none  | down    | 1.3.1
  -  i686-gnu-linux-gnu2.2glibc1         | sjlj/sjljlx/none  | down    | 1.3.5
  -  i586-gnu-linux-gnu2.2glibc2.1       | sjlj/ssjlj/sas    | down    | 1.3.0
  -  i686-gnu-linux-gnu2.2glibc2.1       | sjlj/ssjlj/sas    | down    | 1.3.5
  -  i686-gnu-linux-gnu2.0glibc1         | sjlj/sjljlx/none  | down    | 1.3.5
  -  i586-gnu-linux-gnu2.2glibc2.0       | sjlj/sjljlx/none  | down    | 1.3.3
  -  i586-debian-linux-gnu2.2glibc2.0    | sjlj/sjljlx/none  | down    | 1.3.0
  -  i686-debian-linux-gnu2.2glibc2.1    | sjlj/ssjlj/sas    | down    | 1.3.5
  -  i586-debian-linux-gnu2.3glibc2.1    | sjlj/ssjlj/sas    | down    | 1.3.3
  -  i586-debian-linux-gnu2.4glibc2.1    | sjlj/ssjlj/sas    | down    | 1.3.6
  -  mips-debian-linux-gnu2.4glibc2.2    | sjlj/ssjlj/sas    | down    | 1.4.0
  -  i686-va-linux-gnu2.2glibc2.1        | sjlj/ssjlj/sas    | down    | 1.3.5
  -  i686-slackware-linux-gnu            | sjlj/ssjlj/sas    | down    | 1.3.0
  -  i586-turbolinux-linux-gnu2.2glibc2.0| sjlj/sjljlx/none  | down    | 1.3.3
  -  i686-va-linux-gnu2.2glibc2.1        | sjlj/ssjlj/sas    | down    | 1.3.3
  -  i486-pc-linux-gnu                   | sjlj/sjljlx/none  | down    | 1.2.1
  -  i586-pc-linux-gnu                   | sjlj/sjljlx/none  | down    | 1.2.1
  -  i686-pc-linux-gnu                   | sjlj/sjljlx/none  | down    | 1.2.0
  -  i386-redhat-linux-gnu               | sjlj/sjljlx/none  | down    | 1.3a1
  -  i486-pc-linux-gnulibc1              | sjlj/sjljlx/none  | down    | 1.2.1
  -  i586-pc-linux-gnulibc1              | sjlj/sjljlx/none  | down    | 1.2.0
  -  i686-pc-linux-gnulibc1              | sjlj/sjljlx/none  | down    | 1.2.0
  -  alpha-redhat-linux-gnu2.2glibc2.1   | sjlj/ssjlj/sas    | down    | 1.3.5
  -  sparc64-redhat-linux-gnu2.2glibc2.1 | sjlj/ssjlj/sas    | down    | 1.3.5
  -  sparc-redhat-linux-gnu2.2glibc2.1   | sjlj/ssjlj/sas    | down    | 1.3.3
  -  sparc-unknown-linux-gnu             | sjlj/ssjlj/sas    | down    | 1.2.3
  -  alphaev56-unknown-linux-gnu         | sjlj/ssjlj/sas    | down    | 1.2.0
  -  alphaev6-unknown-linux-gnu          | sjlj/ssjlj/sas    | down    | 1.2.0
  -  powerpc-unknown-linux-gnu           | sjls/ssjlj/sas    | down    | 1.2.0
  -  powerpc-debian-linux-gnu2.2glibc2.1 | sjlj/ssjlj/sas    | down    | 1.3.5
  -  sparc-sun-solaris2.9                | mcsc/sc/mc        | down    | 1.4.1
  -  sparc-sun-solaris2.8                | mcsc/sc/mc        | down    | 1.4a2
  -  sparc-sun-solaris2.7                | mcsc/sc/mc        | down    | 1.2.0
  -  sparc-sun-solaris2.6                | mcsc/sc/mc        | down    | 1.3.0
  -  sparc-sun-solaris2.5                | mcsc/sc/mc        | down    | 1.1.4
  -  sparc-sun-solaris2.5.1              | mcsc/sc/mc        | down    | 1.2.0
  -  sparc-sun-solaris2.8                | mcsc/sc/mc        | down    | 1.3.2
  -  sparc-sun-sunos4.1.3_U1             | sjlj/ssjlj/ss     | down    | 1.1.4
  -  sparc-sun-sunos4.1.4                | sjlj/ssjlj/ss     | down    | 1.1.6
  -  i386-pc-sysv5uw7                    | mcsc/sc/mc        | down    | 1.3.0
  -  i386-pc-sysv5uw7.1.0                | mcsc/sc/mc        | down    | 1.3.5
  -  i386-pc-sysv5uw7.1.1                | mcsc/sc/mc        | down    | 1.3.3
  -  i386-pc-sysv4.2uw2.1.3              | mcsc/sc/mc        | down    | 1.3.0
  -  i386-pc-sysv4.2uw2.1                | mcsc/sc/mc        | down    | 1.1.6
  -  i586-pc-sco3.2v5.0.2                | sjlj/ssjlj/sas    | down    | 1.3.2
  -  i586-pc-sco3.2v5.0.4                | sjlj/ssjlj/sas    | down    | 1.2.0
  -  i686-pc-sco3.2v5.0.4                | sjlj/ssjlj/sas    | down    | 1.3.5
  -  i386-pc-sco3.2v5.0.5                | sjlj/ssjlj/sas    | down    | 1.2.1
  -  i686-pc-sco3.2v5.0.5                | sjlj/ssjlj/sas    | down    | 1.2.1
  -  i386-pc-sco3.2v5.0.5                | sjlj/ssjlj/sas    | down    | 1.2.2
  -  rs6000-ibm-aix4.3.2.0               | mcsc/sc/mc        | down    | 1.1.5
  -  rs6000-ibm-aix4.2.1.0               | mcsc/sc/mc        | down    | 1.1.5
  -  powerpc-ibm-aix4.1.4.0              | mcsc/sc/mc        | down    | 1.1.6
  -  powerpc-ibm-aix4.1.5.0              | mcsc/sc/mc        | down    | 1.1.5
  -  rs6000-ibm-aix4.1.5.0               | sjlj/ssjlj/ss     | down    | 1.3.5
  -  powerpc-ibm-aix4.2.1.0              | mcsc/sc/mc        | down    | 1.1.6
  -  powerpc-ibm-aix4.3.2.0              | mcsc/sc/mc        | down    | 1.2.1
  -  rs6000-ibm-aix4.3.3.0               | mcsc/sc/mc        | down    | 1.3.5
  -  powerpc-ibm-aix4.3.3.0              | mcsc/sc/mc        | down    | 1.3.5
  -  rs6000-ibm-aix4.2.0.0               | mcsc/sc/mc        | down    | 1.3.7
  -  m68k-hp-hpux9.10                    | sjlj/ssjlj/ss     | down    | 1.2.0
  -  hppa1.1-hp-hpux10.01                | sjlj/ssjlj/ss     | up      | 1.3.3
  -  hppa1.1-hp-hpux10.10                | sjlj/ssjlj/sas    | up      | 1.3.7
  -  hppa1.1-hp-hpux10.20                | sjlj/ssjlj/sas    | up      | 1.3.0
  -  hppa2.0-hp-hpux10.20                | sjlj/ssjlj/sas    | up      | 1.3.0
  -  hppa1.1-hp-hpux11.00                | mcsc/sc/mc        | up      | 1.2.3
  -  hppa2.0n-hp-hpux11.00               | mcsc/sc/mc        | up      | 1.2.1
  -  hppa2.0w-hp-hpux11.00               | mcsc/sc/mc        | up      | 1.4a1
  -  mips-sgi-irix5.3                    | sjlj/ssjlj/sas    | down    | 1.2.2
  -  mips-sgi-irix6.5                    | mcsc/sc/mc        | down    | 1.2b1
  -  mips-sgi-irix6.3                    | mcsc/sc/mc        | down    | 1.3.7
  -  i386-pc-isc4.0                      | sjlj/sjljisc/none | down    | 1.2b2
  -  powerpc-apple-rhapsody5.5           | sjlj/ssjlj/sas    | down    | 1.2b3
  -  powerpc-apple-netbsd1.4.1           | sjlj/ssjlj/sas    | down    | 1.2.1
  -  alpha-dec-osf4.0e                   | mcsc/sc/mc        | down    | 1.3.3
  -  alpha-dec-osf4.0f                   | mcsc/sc/mc        | down    | 1.2.1
  -  alphaev56-dec-osf4.0d               | mcsc/sc/mc        | down    | 1.2b6
  -  alphaev56-dec-osf4.0e               | mcsc/sc/mc        | down    | 1.3.4
  -  alphaev56-dec-osf4.0f               | mcsc/sc/mc        | down    | 1.2.0
  -  alphaev6-dec-osf4.0f                | mcsc/sc/mc        | down    | 1.3.5
  -  alphaev6-dec-osf5.0                 | mcsc/sc/mc        | down    | 1.2.0
  -  alpha-dec-osf5.0                    | mcsc/sc/mc        | down    | 1.2.1
  -  m68k-unknown-amigaos                | sjlj/ssjlj/ss     | down    | 1.2.1
  -  m68k-cbm-amigaos                    | sjlj/ssjlj/ss     | down    | 1.3.5
  -  i586-ncr-sysv4.3.03                 | mcsc/sc/mc        | down    | 1.2.1
  -  mips-sni-sysv4                      | mcsc/sc/mc        | down    | 1.2.3
  -  hppa1.1-stratus-sysv4               | mcsc/sc/mc        | up      | 1.3.1
  -  powerpc-apple-macosX                | sjlj/ssjlj/sas    | down    | 1.3.2
  -  i686-pc-cygwin                      | sjlj/sjljw32/none | down    | 1.3.6
  -  i386-pc-interix                     | sjlj/sjljisc/none | down    | 1.3.5
  -  mips-compaq-nonstopux               | sjlj/ssjlj/sas    | down    | 1.3.7
  +  __PLATFORM_ID_________________________ __MACHINE_CONTEXT__ _STACK_ _VERSION_
  +  i386-unknown-freebsd4.7               | sjlj/ssjlj/sas    | down  | 2.0b0
  +  i386-pc-solaris2.8                    | mcsc/sc/mc        | down  | 1.4.1
  +  i686-gnu-linux-gnu2.2glibc2.2         | sjlj/ssjlj/sas    | down  | 1.4.1
  +  i386-pc-sysv4.2uw2.1.2                | mcsc/sc/mc        | down  | 1.4.1
  +  alpha-portbld-freebsd4.6.2            | sjlj/ssjlj/sas    | down  | 1.4.1
  +  i586-pc-freebsd4.6                    | sjlj/ssjlj/sas    | down  | 1.4.1
  +  m68k--netbsdelf                       | sjlj/ssjlj/sas    | down  | 1.4.1
  +  alpha-unknown-freebsd4.6              | sjlj/ssjlj/sas    | down  | 1.4.1
  +  powerpc-apple-darwin6.1               | sjlj/ssjlj/sas    | down  | 1.4.1
  +  powerpc-apple-netbsd1.5.2             | sjlj/ssjlj/sas    | down  | 1.4.1
  +  i386-pclocal-interix                  | sjlj/sjljisc/none | down  | 1.4.1
  +  powerpc-ibm-aix4.3.1.0                | mcsc/sc/mc        | down  | 1.4.1
  +  alpha-unknown-netbsd1.5.3.            | sjlj/ssjlj/sas    | down  | 1.4.1
  +  alphaev56-dec-osf4.0a                 | mcsc/sc/mc        | down  | 1.4.1
  +  i686-redhat-linux-gnu2.2glibc1        | sjlj/ssjlj/sas    | down  | 1.4.1
  +  i386-portbld-freebsd4.4               | sjlj/ssjlj/sas    | down  | 1.4.1
  +  i686-pc-sco3.2v5.0.6                  | sjlj/ssjlj/sas    | down  | 1.4.1
  +  i386-portbld-freebsd4.5               | sjlj/ssjlj/sas    | down  | 1.4.1
  +  i386-portbld-freebsd4.6               | sjlj/ssjlj/sas    | down  | 1.4.1
  +  i686-pc-freebsd4.6                    | sjlj/ssjlj/sas    | down  | 1.4.1
  +  i686-pc-freebsd4.5                    | sjlj/ssjlj/sas    | down  | 1.4.1
  +  i386-portbld-freebsd4.7               | sjlj/ssjlj/sas    | down  | 1.4.1
  +  rs6000-ibm-aix5.1.0.0                 | mcsc/sc/mc        | down  | 1.4.1
  +  i386-unknown-gnu0.2                   | sjlj/sjljlx/none  | down  | 1.4.1
  +  sparc--netbsdelf                      | sjlj/ssjlj/sas    | down  | 1.4.1
  +  sparc-sun-solaris2.9                  | mcsc/sc/mc        | down  | 1.4.1
  +  sparc-unknown-netbsd1.5.2             | sjlj/ssjlj/sas    | down  | 1.4.1
  +  sparc-unknown-netbsd1.6               | sjlj/ssjlj/sas    | down  | 1.4.1
  +  i586-pc-freebsd4.5                    | sjlj/ssjlj/sas    | down  | 1.4.1
  +  vax--netbsdelf                        | sjlj/ssjlj/sas    | down  | 1.4.1
  +  i386-unknown-netbsd1.5.2              | sjlj/ssjlj/sas    | down  | 1.4.1
  +  i386-unknown-netbsd1.5ZA              | sjlj/ssjlj/sas    | down  | 1.4.1
  +  i386-unknown-netbsd1.6                | sjlj/ssjlj/sas    | down  | 1.4.1
  +  i386-unknown-netbsd1.6.               | sjlj/ssjlj/sas    | down  | 1.4.1
  +  i386--netbsdelf                       | sjlj/ssjlj/sas    | down  | 1.4.1
  +  i686-debian-linux-gnu2.4glibc2.1      | sjlj/ssjlj/sas    | down  | 1.4.1
  +  i586-debian-linux-gnu2.2glibs2.2      | mcsc/sc/mc        | down  | 1.4.1
  +  i586-gnu-linux-gnu2.4glibc2.2         | mcsc/sc/mc        | down  | 1.4.1
  +  i586-sco-sysv5                        | mcsc/sc/mc        | down  | 1.4.1
  +  i586-redhat-linux-gnu2.4glibc2.3      | mcsc/sc/mc        | down  | 1.4.1
  +  i386-pc-freebsd4.0-gnu                | mcsc/sc/mc        | down  | 1.4.1
  +  i386-pc-freebsd4.3                    | sjlj/ssjlj/sas    | down  | 1.4.1
  +  i386-pc-freebsd4.5                    | sjlj/ssjlj/sas    | down  | 1.4.1
  +  i686-suse-linux-gnu2.4glibc2.2        | mcsc/sc/mc        | down  | 1.4.1
  +  m68k--netbsd                          | sjlj/ssjlj/sas    | down  | 1.4.1
  +  i686-gnu-linux-gnu2.4glibc2.2         | mcsc/sc/mc        | down  | 1.4.1
  +  i386-pc-sco3.2v5.0.6                  | sjlj/ssjlj/sas    | down  | 1.4.1
  +  i386--freebsd4.4                      | sjlj/ssjlj/sas    | down  | 1.4.0
  +  i386--freebsd4.5                      | sjlj/ssjlj/sas    | down  | 1.4.0
  +  powerpc-yellowdog-linux-gnu2.4glibc2. | sjlj/ssjlj/sas    | down  | 1.4.0
  +  i586-pc-cygwin                        | sjlj/sjljw32/none | down  | 1.4.0
  +  i586-redhat-linux-gnu2.4glibc2.2      | mcsc/sc/mc        | down  | 1.4.0
  +  mips-debian-linux-gnu2.4glibc2.2      | sjlj/ssjlj/sas    | down  | 1.4.0
  +  i386-portbld-freebsd4.3               | sjlj/ssjlj/sas    | down  | 1.4.0
  +  powerpc-yellowdog-linux-gnu2.4glibc2. | sjlj/ssjlj/sas    | down  | 1.4.0
  +  powerpc-apple-darwin6.0               | sjlj/ssjlj/sas    | down  | 1.4.0
  +  i686-debian-linux-gnu2.2glibc2.2      | mcsc/sc/mc        | down  | 1.4.0
  +  i386-unknown-openbsd3.0               | sjlj/ssjlj/sas    | down  | 1.4.0
  +  sparc-unknown-openbsd2.9              | sjlj/ssjlj/sas    | down  | 1.4.0
  +  arm-redhat-linux-gnu2.2glibc2.1       | sjlj/ssjlj/sas    | down  | 1.4.0
  +  i686-debian-linux-gnu2.4glibc2.2      | mcsc/sc/mc        | down  | 1.4.0
  +  i586-debian-linux-gnu2.2glibc2.2      | sjlj/ssjlj/sas    | down  | 1.4.0
  +  i686-pc-freebsd4.3                    | sjlj/ssjlj/sas    | down  | 1.4a4
  +  i686-pc-freebsd4.1                    | sjlj/ssjlj/sas    | down  | 1.4a3
  +  i386-unknown-netbsd1.4.2              | sjlj/ssjlj/sas    | down  | 1.4a2
  +  i686-pc-freebsd3.5                    | sjlj/ssjlj/sas    | down  | 1.4a2
  +  alpha-unknown-netbsd1.5.1             | sjlj/ssjlj/sas    | down  | 1.4a2
  +  hppa2.0w-hp-hpux11.00                 | mcsc/sc/mc        | up    | 1.4a1
  +  i586-redhat-linux-gnu2.2glibc1        | sjlj/ssjlj/sas    | down  | 1.3.7
  +  i686-redhat-linux-gnu2.4glibc2.2      | sjlj/ssjlj/sas    | down  | 1.3.7
  +  i686-redhat-linux-gnu2.2glibc2.2      | sjlj/ssjlj/sas    | down  | 1.3.7
  +  i586-gnu-linux-gnu2.4glibc2.1         | sjlj/ssjlj/sas    | down  | 1.3.7
  +  i386-unknown-openbsd2.7               | sjlj/ssjlj/sas    | down  | 1.3.7
  +  i586-suse-linux-gnu2.2glibc2.0        | sjlj/sjljlx/none  | down  | 1.3.7
  +  i386-unknown-openbsd2.8               | sjlj/ssjlj/sas    | down  | 1.3.7
  +  i486-gnu-linux-gnu2.0glibc1           | sjlj/sjljlx/none  | down  | 1.3.7
  +  m68k-apple-netbsd1.3.3                | sjlj/ssjlj/sas    | down  | 1.3.7
  +  mips-compaq-nonstopux                 | sjlj/ssjlj/sas    | down  | 1.3.7
  +  mips-dec-netbsd1.5                    | sjlj/ssjlj/sas    | down  | 1.3.7
  +  hppa1.1-hp-hpux10.10                  | sjlj/ssjlj/sas    | up    | 1.3.7
  +  i586-pc-freebsd4.1                    | sjlj/ssjlj/sas    | down  | 1.3.7
  +  i686-pc-freebsd4.2                    | sjlj/ssjlj/sas    | down  | 1.3.7
  +  mips-sgi-irix6.3                      | mcsc/sc/mc        | down  | 1.3.7
  +  i686-pc-freebsd4.1.1                  | sjlj/ssjlj/sas    | down  | 1.3.7
  +  powerpc-redhat-linux-gnu2.2glibc2.1   | sjlj/ssjlj/sas    | down  | 1.3.7
  +  i386-pc-bsdi4.1                       | sjlj/ssjlj/sas    | down  | 1.3.7
  +  i386-pc-freebsd3.2                    | sjlj/ssjlj/sas    | down  | 1.3.7
  +  rs6000-ibm-aix4.2.0.0                 | mcsc/sc/mc        | down  | 1.3.7
  +  sparc--netbsd                         | sjlj/ssjlj/sas    | down  | 1.3.7
  +  i586-redhat-linux-gnu2.2glibc2.2      | sjlj/ssjlj/sas    | down  | 1.3.7
  +  i686-pc-cygwin                        | sjlj/sjljw32/none | down  | 1.3.6
  +  i586-debian-linux-gnu2.4glibc2.1      | sjlj/ssjlj/sas    | down  | 1.3.6
  +  powerpc-apple-netbsd1.4.2             | sjlj/ssjlj/sas    | down  | 1.3.5
  +  alpha-redhat-linux-gnu2.2glibc2.1     | sjlj/ssjlj/sas    | down  | 1.3.5
  +  alpha-unknown-freebsd5.0              | sjlj/ssjlj/sas    | down  | 1.3.5
  +  i486-redhat-linux-gnu2.2glibc2.1      | sjlj/ssjlj/sas    | down  | 1.3.5
  +  powerpc-debian-linux-gnu2.2glibc2.1   | sjlj/ssjlj/sas    | down  | 1.3.5
  +  powerpc-ibm-aix4.3.3.0                | mcsc/sc/mc        | down  | 1.3.5
  +  i686-pc-sco3.2v5.0.4                  | sjlj/ssjlj/sas    | down  | 1.3.5
  +  alphaev6-dec-osf4.0f                  | mcsc/sc/mc        | down  | 1.3.5
  +  i686-gnu-linux-gnu2.2glibc2.1         | sjlj/ssjlj/sas    | down  | 1.3.5
  +  rs6000-ibm-aix4.1.5.0                 | sjlj/ssjlj/ss     | down  | 1.3.5
  +  rs6000-ibm-aix4.3.3.0                 | mcsc/sc/mc        | down  | 1.3.5
  +  i686-pc-freebsd3.2                    | sjlj/ssjlj/sas    | down  | 1.3.5
  +  i386-pc-interix                       | sjlj/sjljisc/none | down  | 1.3.5
  +  i386-unknown-netbsd1.4T               | sjlj/ssjlj/sas    | down  | 1.3.5
  +  i386-pc-sysv5uw7.1.0                  | mcsc/sc/mc        | down  | 1.3.5
  +  m68k-cbm-amigaos                      | sjlj/ssjlj/ss     | down  | 1.3.5
  +  i686-gnu-linux-gnu2.0glibc1           | sjlj/sjljlx/none  | down  | 1.3.5
  +  sparc64-redhat-linux-gnu2.2glibc2.1   | sjlj/ssjlj/sas    | down  | 1.3.5
  +  mipsel-unknown-netbsd1.4.2            | sjlj/ssjlj/sas    | down  | 1.3.5
  +  i686-gnu-linux-gnu2.2glibc1           | sjlj/sjljlx/none  | down  | 1.3.5
  +  i686-debian-linux-gnu2.2glibc2.1      | sjlj/ssjlj/sas    | down  | 1.3.5
  +  alphaev56-dec-osf4.0e                 | mcsc/sc/mc        | down  | 1.3.4
  +  i586-pc-freebsd5.0                    | sjlj/ssjlj/sas    | down  | 1.3.4
  +  i686-redhat-linux-gnu2.2glibc2.1      | sjlj/ssjlj/sas    | down  | 1.3.3
  +  i686-va-linux-gnu2.2glibc2.1          | sjlj/ssjlj/sas    | down  | 1.3.3
  +  hppa1.1-hp-hpux10.01                  | sjlj/ssjlj/ss     | up    | 1.3.3
  +  sparc-redhat-linux-gnu2.2glibc2.1     | sjlj/ssjlj/sas    | down  | 1.3.3
  +  i386-pc-bsdi4.0                       | sjlj/ssjlj/sas    | down  | 1.3.3
  +  i586-pc-freebsd3.1                    | sjlj/ssjlj/sas    | down  | 1.3.3
  +  i586-gnu-linux-gnu2.2glibc2.0         | sjlj/sjljlx/none  | down  | 1.3.3
  +  alpha-dec-osf4.0e                     | mcsc/sc/mc        | down  | 1.3.3
  +  i386-pc-sysv5uw7.1.1                  | mcsc/sc/mc        | down  | 1.3.3
  +  i586-debian-linux-gnu2.3glibc2.1      | sjlj/ssjlj/sas    | down  | 1.3.3
  +  powerpc-ibm-aix4.1.3.0                | sjlj/ssjlj/ss     | down  | 1.3.3
  +  powerpc-apple-macosX                  | sjlj/ssjlj/sas    | down  | 1.3.2
  +  i586-suse-linux-gnu2.2glibc2.1        | sjlj/ssjlj/sas    | down  | 1.3.2
  +  powerpc-unknown-netbsd                | sjlj/ssjlj/sas    | down  | 1.3.2
  +  sparc-sun-solaris2.8                  | mcsc/sc/mc        | down  | 1.3.2
  +  alpha-unknown-netbsd1.4.1             | sjlj/ssjlj/sas    | down  | 1.3.2
  +  i686-suse-linux-gnu2.2glibc2.1        | sjlj/ssjlj/sas    | down  | 1.3.2
  +  i586-pc-sco3.2v5.0.2                  | sjlj/ssjlj/sas    | down  | 1.3.2
  +  i586-redhat-linux-gnu2.2glibc2.1      | sjlj/ssjlj/sas    | down  | 1.3.1
  +  i586-gnu-linux-gnu2.0glibc1           | sjlj/sjljlx/none  | down  | 1.3.1
  +  i686-suse-linux-gnu2.2glibc2.0        | sjlj/sjljlx/none  | down  | 1.3.1
  +  hppa1.1-stratus-sysv4                 | mcsc/sc/mc        | up    | 1.3.1
  +  i586-gnu-linux-gnu2.2glibc1           | sjlj/sjljlx/none  | down  | 1.3.1
  +  i686-pc-freebsd4.0                    | sjlj/ssjlj/sas    | down  | 1.3.0
  +  i686-slackware-linux-gnu              | sjlj/ssjlj/sas    | down  | 1.3.0
  +  alpha-unknown-freebsd4.0              | sjlj/ssjlj/sas    | down  | 1.3.0
  +  hppa1.1-hp-hpux10.20                  | sjlj/ssjlj/sas    | up    | 1.3.0
  +  hppa2.0-hp-hpux10.20                  | sjlj/ssjlj/sas    | up    | 1.3.0
  +  i386-pc-sysv4.2uw2.1.3                | mcsc/sc/mc        | down  | 1.3.0
  +  i386-pc-sysv5uw7                      | mcsc/sc/mc        | down  | 1.3.0
  +  sparc-sun-solaris2.6                  | mcsc/sc/mc        | down  | 1.3.0
  +  i386-unknown-netbsd1.4                | sjlj/ssjlj/sas    | down  | 1.3.0
  +  i386-unknown-netbsd1.4.1              | sjlj/ssjlj/sas    | down  | 1.3.0
  +  i586-debian-linux-gnu2.2glibc2.0      | sjlj/sjljlx/none  | down  | 1.3.0
  +  i586-gnu-linux-gnu2.2glibc2.1         | sjlj/ssjlj/sas    | down  | 1.3.0
  +  i586-redhat-linux-gnu2.0glibc2.0      | sjlj/sjljlx/none  | down  | 1.3.0
  +  i686-pc-freebsd3.1                    | sjlj/ssjlj/sas    | down  | 1.3.0
  +  i686-pc-freebsd3.4                    | sjlj/ssjlj/sas    | down  | 1.3.0
  +  i586-pc-freebsd4.0                    | sjlj/ssjlj/sas    | down  | 1.3b2
  +  i586-pc-freebsd3.3                    | sjlj/ssjlj/sas    | down  | 1.3a5
  +  m68k-cbm-netbsd1.4.1                  | sjlj/ssjlj/sas    | down  | 1.3a5
  +  i686-redhat-linux-gnu2.3glibc2.0      | sjlj/sjljlx/none  | down  | 1.3a4
  +  i386--netbsd                          | sjlj/ssjlj/sas    | down  | 1.3a2
  +  i386-pc-freebsd3.4                    | sjlj/ssjlj/sas    | down  | 1.3a2
  +  i586-redhat-linux-gnu2.2glibc2.0      | sjlj/sjljlx/none  | down  | 1.3a2
  +  i686-redhat-linux-gnu2.2glibc2.0      | sjlj/sjljlx/none  | down  | 1.3a1
  +  i386-redhat-linux-gnu                 | sjlj/sjljlx/none  | down  | 1.3a1
  +  sparc-unknown-linux-gnu               | sjlj/ssjlj/sas    | down  | 1.2.3
  +  hppa1.1-hp-hpux11.00                  | mcsc/sc/mc        | up    | 1.2.3
  +  mips-sni-sysv4                        | mcsc/sc/mc        | down  | 1.2.3
  +  i586-pc-freebsd3.4                    | sjlj/ssjlj/sas    | down  | 1.2.2
  +  mips-sgi-irix5.3                      | sjlj/ssjlj/sas    | down  | 1.2.2
  +  i386-pc-sco3.2v5.0.5                  | sjlj/ssjlj/sas    | down  | 1.2.2
  +  powerpc-apple-netbsd1.4.1             | sjlj/ssjlj/sas    | down  | 1.2.1
  +  i586-ncr-sysv4.3.03                   | mcsc/sc/mc        | down  | 1.2.1
  +  i486-pc-linux-gnulibc1                | sjlj/sjljlx/none  | down  | 1.2.1
  +  i486-pc-linux-gnu                     | sjlj/sjljlx/none  | down  | 1.2.1
  +  i386-pc-freebsd3.3                    | sjlj/ssjlj/sas    | down  | 1.2.1
  +  i486-pc-freebsd3.3                    | sjlj/ssjlj/sas    | down  | 1.2.1
  +  powerpc-ibm-aix4.3.2.0                | mcsc/sc/mc        | down  | 1.2.1
  +  m68k-unknown-amigaos                  | sjlj/ssjlj/ss     | down  | 1.2.1
  +  i386-unknown-openbsd2.6               | sjlj/ssjlj/sas    | down  | 1.2.1
  +  hppa2.0n-hp-hpux11.00                 | mcsc/sc/mc        | up    | 1.2.1
  +  i686-pc-sco3.2v5.0.5                  | sjlj/ssjlj/sas    | down  | 1.2.1
  +  alpha-dec-osf5.0                      | mcsc/sc/mc        | down  | 1.2.1
  +  alpha-dec-osf4.0f                     | mcsc/sc/mc        | down  | 1.2.1
  +  i586-pc-linux-gnu                     | sjlj/sjljlx/none  | down  | 1.2.1
  +  i586-pc-freebsd3.2                    | sjlj/ssjlj/sas    | down  | 1.2.0
  +  i586-pc-linux-gnulibc1                | sjlj/sjljlx/none  | down  | 1.2.0
  +  m68k-hp-hpux9.10                      | sjlj/ssjlj/ss     | down  | 1.2.0
  +  alphaev56-dec-osf4.0f                 | mcsc/sc/mc        | down  | 1.2.0
  +  sparc-sun-solaris2.5.1                | mcsc/sc/mc        | down  | 1.2.0
  +  sparc-sun-solaris2.7                  | mcsc/sc/mc        | down  | 1.2.0
  +  powerpc-unknown-linux-gnu             | sjls/ssjlj/sas    | down  | 1.2.0
  +  sparc-unknown-openbsd2.6              | sjlj/ssjlj/sas    | down  | 1.2.0
  +  alphaev6-unknown-linux-gnu            | sjlj/ssjlj/sas    | down  | 1.2.0
  +  alphaev6-dec-osf5.0                   | mcsc/sc/mc        | down  | 1.2.0
  +  i686-pc-linux-gnu                     | sjlj/sjljlx/none  | down  | 1.2.0
  +  i686-pc-freebsd3.3                    | sjlj/ssjlj/sas    | down  | 1.2.0
  +  i586-pc-sco3.2v5.0.4                  | sjlj/ssjlj/sas    | down  | 1.2.0
  +  i686-pc-linux-gnulibc1                | sjlj/sjljlx/none  | down  | 1.2.0
  +  alphaev56-unknown-linux-gnu           | sjlj/ssjlj/sas    | down  | 1.2.0
  +  armv4l-unknown-linux-gnu              | sjlj/ssjlj/sas    | down  | 1.2b8
  +  sparc-unknown-netbsd1.4.1             | sjlj/ssjlj/sas    | down  | 1.2b8
  +  alphaev56-dec-osf4.0d                 | mcsc/sc/mc        | down  | 1.2b6
  +  m68k-apple-netbsd1.4.1                | sjlj/ssjlj/sas    | down  | 1.2b5
  +  i386-unknown-openbsd2.5               | sjlj/ssjlj/sas    | down  | 1.2b5
  +  powerpc-apple-rhapsody5.5             | sjlj/ssjlj/sas    | down  | 1.2b3
  +  i386-pc-isc4.0                        | sjlj/sjljisc/none | down  | 1.2b2
  +  mips-sgi-irix6.5                      | mcsc/sc/mc        | down  | 1.2b1
  +  i386-pc-sysv4.2uw2.1                  | mcsc/sc/mc        | down  | 1.1.6
  +  sparc-sun-sunos4.1.4                  | sjlj/ssjlj/ss     | down  | 1.1.6
  +  powerpc-ibm-aix4.1.4.0                | mcsc/sc/mc        | down  | 1.1.6
  +  powerpc-ibm-aix4.2.1.0                | mcsc/sc/mc        | down  | 1.1.6
  +  rs6000-ibm-aix4.3.2.0                 | mcsc/sc/mc        | down  | 1.1.5
  +  rs6000-ibm-aix4.2.1.0                 | mcsc/sc/mc        | down  | 1.1.5
  +  i386-unknown-netbsd1.3.3              | sjlj/ssjlj/sas    | down  | 1.1.5
  +  powerpc-ibm-aix4.1.5.0                | mcsc/sc/mc        | down  | 1.1.5
  +  sparc-sun-sunos4.1.3_U1               | sjlj/ssjlj/ss     | down  | 1.1.4
  +  sparc-sun-solaris2.5                  | mcsc/sc/mc        | down  | 1.1.4
  +  alpha-unknown-netbsd1.3.3             | sjlj/ssjlj/sas    | down  | 1.1.4
   
     HINTS FOR PORTING TO NEW PLATFORMS
   

From ossp-cvs-owner@ossp.org  Fri Nov  8 12:32:18 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E27727648D; Fri,  8 Nov 2002 12:32:17 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog
Message-Id: <20021108113217.E27727648D@mail.ossp.org>
Date: Fri,  8 Nov 2002 12:32:17 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Nov-2002 12:32:17
  Branch: HEAD                             Handle: 2002110811321700

  Modified files:
    ossp-pkg/pth            ChangeLog

  Log:
    Updated PORTING file to include community feedback from
    the last months.

  Summary:
    Revision    Changes     Path
    1.592       +6  -0      ossp-pkg/pth/ChangeLog
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.591 -r1.592 ChangeLog
  --- ossp-pkg/pth/ChangeLog	7 Nov 2002 16:09:23 -0000	1.591
  +++ ossp-pkg/pth/ChangeLog	8 Nov 2002 11:32:17 -0000	1.592
  @@ -19,6 +19,12 @@
        / __/ | |_| |
     __|_____(_)___/_________________________________________________________
                     
  +  Changes between 2.0b0 and 2.0b1 (07-Nov-2002 to xx-Nov-2002)
  +
  +   *) Updated PORTING file to include community feedback from
  +      the last months.
  +      [Ralf S. Engelschall]
  +
     Changes between 1.4.1 and 2.0b0 (27-Jan-2002 to 07-Nov-2002)
   
      *) Fix dropping of scheduler thread pools and this way fix memory leak.

From ossp-cvs-owner@ossp.org  Fri Nov  8 13:21:36 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F08EA764E9; Fri,  8 Nov 2002 13:21:35 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq AUTHORS ChangeLog Makefile.in README TODO ...
Message-Id: <20021108122135.F08EA764E9@mail.ossp.org>
Date: Fri,  8 Nov 2002 13:21:35 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   08-Nov-2002 13:21:35
  Branch: HEAD                             Handle: 2002110812213401

  Added files:
    ossp-pkg/titraq/gfx     cw.xpm osspfull.xpm ossplogo.xpm
  Modified files:
    ossp-pkg/titraq         AUTHORS ChangeLog Makefile.in README TODO
                            configure.in main.cpp titraq_version.c

  Log:
    Abandonment of all karm sources, and total reworking of project titraq.

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/titraq/AUTHORS
    1.2         +1  -1      ossp-pkg/titraq/ChangeLog
    1.4         +12 -7      ossp-pkg/titraq/Makefile.in
    1.2         +9  -0      ossp-pkg/titraq/README
    1.3         +6  -22     ossp-pkg/titraq/TODO
    1.3         +3  -2      ossp-pkg/titraq/configure.in
    1.1         +54 -0      ossp-pkg/titraq/gfx/cw.xpm
    1.1         +601 -0     ossp-pkg/titraq/gfx/osspfull.xpm
    1.1         +118 -0     ossp-pkg/titraq/gfx/ossplogo.xpm
    1.3         +43 -7      ossp-pkg/titraq/main.cpp
    1.3         +1  -2      ossp-pkg/titraq/titraq_version.c
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/AUTHORS
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 AUTHORS
  --- ossp-pkg/titraq/AUTHORS	21 Oct 2002 15:19:37 -0000	1.1.1.1
  +++ ossp-pkg/titraq/AUTHORS	8 Nov 2002 12:21:34 -0000	1.2
  @@ -1,2 +1,2 @@
   Michael Schloh von Bennewitz
  -michael.schloh@cw.com
  \ No newline at end of file
  +michael@schloh.com
  Index: ossp-pkg/titraq/ChangeLog
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 ChangeLog
  --- ossp-pkg/titraq/ChangeLog	21 Oct 2002 15:19:37 -0000	1.1.1.1
  +++ ossp-pkg/titraq/ChangeLog	8 Nov 2002 12:21:34 -0000	1.2
  @@ -1,3 +1,3 @@
   Geschichte des OSSP titraq in Vorwaerts Cronordnung
   
  -020527 Projekt Erzeugung
  +021108 Projekt Erzeugung
  Index: ossp-pkg/titraq/Makefile.in
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 Makefile.in
  --- ossp-pkg/titraq/Makefile.in	5 Nov 2002 18:15:50 -0000	1.3
  +++ ossp-pkg/titraq/Makefile.in	8 Nov 2002 12:21:34 -0000	1.4
  @@ -62,17 +62,17 @@
   TRUE            = true
   
   PROG_NAME       = titraq
  -
  -TARGET          = $(TARGET_PROGS) $(TARGET_MANS)
   TARGET_PROGS    = titraq
   TARGET_MANS     = titraq.1 titraq.conf.5
   
  -SRCS            = main.cpp top.cpp karm.cpp titraq_version.c
  +SRCS            = main.cpp titraq.cpp titraq_version.c
  +
  +OBJS            = main.o titraq.o titraq_version.o
   
  -OBJS            = main.o top.o karm.o titraq_version.o
  +GRAFX           = gfx/ossplogo.xpm
   
   # Qt meta object compiler
  -MOC_IN          = karm.h
  +MOC_IN          = titraq.h
   MOC_OUT         = moc_titraq.cpp
   MOC_OBJ         = moc_titraq.o
   
  @@ -90,7 +90,10 @@
   .cxx.o:
   	$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $<
   
  -all: Makefile $(TARGET)
  +all: Makefile $(TARGET_PROGS) $(TARGET_MANS)
  +
  +#$(PROG_NAME): Makefile $(OBJS) $(MOC_OBJ) $(GRAFX)
  +#	$(CXX) $(LDFLAGS) -o $@ $(OBJS) $(MOC_OBJ) $(LIBS)
   
   $(PROG_NAME): $(OBJS) $(MOC_OBJ)
   	$(CXX) $(LDFLAGS) -o $@ $+ $(LIBS)
  @@ -130,7 +133,9 @@
   	$(RM) $(DESTDIR)$(mandir)/man5/titraq.conf.5
   
   clean:
  -	$(RM) $(TARGET) $(OBJS) $(MOC_OBJ) $(PROG_NAME).core titraq_pcre.tab
  +	$(RM) $(TARGET_PROGS) $(OBJS) $(MOC_OBJ)
  +    $(RM) titraq.conf.5 titraq.1
  +    $(RM) titraq_pcre.tab *.core
   
   distclean: clean
   	$(RM) config.log config.status config.cache # Generated by ./configure
  Index: ossp-pkg/titraq/README
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 README
  --- ossp-pkg/titraq/README	21 Oct 2002 15:19:37 -0000	1.1.1.1
  +++ ossp-pkg/titraq/README	8 Nov 2002 12:21:34 -0000	1.2
  @@ -0,0 +1,9 @@
  +To build titraq:
  +  ./devtool autogen
  +  ./devtool configure
  +  make
  +
  +Expect:
  +  Executable 'titraq' statically linked to Qt and X libs
  +  Stand alone executable
  +
  Index: ossp-pkg/titraq/TODO
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 TODO
  --- ossp-pkg/titraq/TODO	24 Oct 2002 19:07:39 -0000	1.2
  +++ ossp-pkg/titraq/TODO	8 Nov 2002 12:21:34 -0000	1.3
  @@ -9,27 +9,6 @@
   
   Must do
   -------
  -Replace lost icons.
  -
  -Stripped
  ---------
  -main.cpp
  -karm.h
  -karm.cpp
  -task.h
  -task.cpp
  -toolicons.h
  -
  -Not yet
  --------
  -kaccelmenuwatch.h
  -kaccelmenuwatch.cpp
  -ktimewidget.h
  -ktimewidget.cpp
  -adddlg.h
  -adddlg.cpp
  -top.h
  -top.cpp
   
   Dreams
   ------
  @@ -65,9 +44,14 @@
   
   Pseudocode
   ----------
  +    initialize
       parse command line
       parse titraq.conf file
  +    load titraq.dat file
       show control window
  +    wait for quit
  +    save titraq.dat file
  +    finish
   
   Test case
   ---------
  @@ -80,7 +64,7 @@
       make install
   
       Assume:
  -    OS has Qt 3.0.5 or newer multithreaded library
  +    OS has Qt 3.0.6 or newer multithreaded library
   
       Begin:
       $ titraq
  Index: ossp-pkg/titraq/configure.in
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 configure.in
  --- ossp-pkg/titraq/configure.in	21 Oct 2002 16:52:22 -0000	1.2
  +++ ossp-pkg/titraq/configure.in	8 Nov 2002 12:21:34 -0000	1.3
  @@ -51,7 +51,7 @@
   ACX_PTHREAD
   CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
   CXXFLAGS="$CXXFLAGS $PTHREAD_CFLAGS"
  -LIBS="$PTHREAD_CFLAGS $LIBS"
  +LIBS="`echo $PTHREAD_CFLAGS | sed -e 's;.*\(-[[pmk]]thread[[s]]*\).*;\1;'` $LIBS"
   
   dnl Check other requirements
   AC_PROG_MAKE_SET
  @@ -80,7 +80,8 @@
       LIBS="$LIBS -lX11 -lXext -lSM -lm"
   fi
   
  -dnl Check typical FreeBSD resources
  +dnl Check some X resources, typical of XFree86
  +AC_CHECK_LIB(Xft, XftFreeTypeOpen, [LIBS="$LIBS -lXft"])
   AC_CHECK_LIB(Xrender, XRenderFindFormat, [LIBS="$LIBS -lXrender"])
   AC_CHECK_LIB(Xinerama, XineramaIsActive, [LIBS="$LIBS -lXinerama"])
   AC_CHECK_LIB(GL, glBegin, [LIBS="$LIBS -lGL"])
  Index: ossp-pkg/titraq/gfx/cw.xpm
  ============================================================
  $ cvs update -p -r1.1 cw.xpm
  /* XPM */
  static char * cw_xpm[] = {
  "42 43 8 1",
  " 	c None",
  ".	c #E2E2F3",
  "+	c #A4A4CB",
  "@	c #8080AD",
  "#	c #595990",
  "$	c #34346D",
  "%	c #C6C6E3",
  "&	c #FFFFFF",
  "               .+@@@#@@@@+.               ",
  "               +$$$$$#$$$$%               ",
  "                ....                      ",
  "          .%+@####$$%      .@+%.          ",
  "        %#$$$$##@@@@%      +$$$$@.        ",
  "        .@@%........%%. .....%+@@.        ",
  "        .%+###$$$$$$$$% #$$$#.            ",
  "     +@#$$$##@@+++%%%%. %+@@@.            ",
  "    .$$#+%.&.%%++@@        ..             ",
  "     %.%++@#$$$$$$#.      .#$$#@+         ",
  "   .+@$$$$##@+%..&&&.....  %+@#$@  +@%.   ",
  "  .$$#@%%%%   .@##########+    ..  +$$$%  ",
  "  .+%.%+@#$+  .###@@@@@###+         .+@.  ",
  "  .+#$$$$@+. ....%%%%%%    ..             ",
  " @$$#++%..+@##$$$$$$$$#   .###@           ",
  " %+%..   @$###@+%%%%%%.    @#$#     ..    ",
  " %@#$#.   ...%%+@@##.   @@++%..     #$#@. ",
  "%$$@+%.++@##$$$$####.   #$$$$$##@%  %@#$$.",
  ".%..+#$$$$#@++..           %%+#$$+     %+ ",
  ".+@$$#@+%%.   +@#########@@@+. .%.        ",
  "+$#+%..+#$$. .#############$$+            ",
  " .%@#$$$#@%  ..%%.    .%%%%..             ",
  "%#$$#@+%%%+@##$$$#    @$$$$##@++%%        ",
  "%#+..%@$$$$$#@++%.    .%%++@#$$$$$%       ",
  "   +$$#@%+%..++@@@######@@%  ..%++.       ",
  "   %@%%%%   @$$$#########$+               ",
  "   .+#$$$   .%.&&&&&..&...         .#+.   ",
  " %#$$#@+%.%%++@###$#$$#% %#@++%    .$$$#. ",
  " %#+..%@#$$$$$##@@@@@@@  .#$$$$%     .@#. ",
  "  .+#$$$#++%%%%%%%    .++%..%%+.          ",
  "  .$$@+...+@##$$$$.   +$$$@               ",
  "   ..+##$$$$#@@+%.     ..+.               ",
  "    @$#@++%%%+++@@@@#@@@@                 ",
  "    %%..+@#$$$$$$$$$$$$$#     .#@+.       ",
  "      #$$$@+%%..........      .#$$$#      ",
  "      +@.%%+%  .#$$$$$$#$##@     %++      ",
  "        @$$$@   +@+++++@@@#@              ",
  "        +@@+..%%%%%+++%  .%..             ",
  "            #$$$$$$$$$#  #$$$@            ",
  "           .@@+%+%%%.%.  %++@+            ",
  "                 +@@@@@@%                 ",
  "                 #$#$$$$+                 ",
  "                  ......                  "};
  Index: ossp-pkg/titraq/gfx/osspfull.xpm
  ============================================================
  $ cvs update -p -r1.1 osspfull.xpm
  /* XPM */
  static char * ossplogo_xpm[] = {
  "96 95 503 2",
  "  	c None",
  ". 	c #DDDDDD",
  "+ 	c #DBDBDB",
  "@ 	c #ACACAC",
  "# 	c #E9E9E9",
  "$ 	c #F2F2F2",
  "% 	c #EDEDED",
  "& 	c #E7E7E7",
  "* 	c #DEDEDE",
  "= 	c #EBEBEB",
  "- 	c #F4F4F4",
  "; 	c #F0F0F0",
  "> 	c #AAAAAA",
  ", 	c #3A3A3A",
  "' 	c #E3E3E3",
  ") 	c #EFEFEF",
  "! 	c #FBFBFB",
  "~ 	c #FAFAFA",
  "{ 	c #EEEEEE",
  "] 	c #E0E0E0",
  "^ 	c #F5F5F5",
  "/ 	c #FEFEFE",
  "( 	c #F9F9F9",
  "_ 	c #BDBDBD",
  ": 	c #505050",
  "< 	c #D8D8D8",
  "[ 	c #E8E8E8",
  "} 	c #FFFFFF",
  "| 	c #FCFCFC",
  "1 	c #F6F6F6",
  "2 	c #EAEAEA",
  "3 	c #E6E6E6",
  "4 	c #D9D9D9",
  "5 	c #E2E2E2",
  "6 	c #FDFDFD",
  "7 	c #D5D5D5",
  "8 	c #777777",
  "9 	c #080808",
  "0 	c #F3F3F3",
  "a 	c #F8F8F8",
  "b 	c #ECECEC",
  "c 	c #D7D7D7",
  "d 	c #9E9E9E",
  "e 	c #222222",
  "f 	c #CACACA",
  "g 	c #E5E5E5",
  "h 	c #D4D4D4",
  "i 	c #F7F7F7",
  "j 	c #C8C8C8",
  "k 	c #606060",
  "l 	c #0D0D0D",
  "m 	c #C2C2C2",
  "n 	c #909090",
  "o 	c #9F9F9F",
  "p 	c #3F3F3F",
  "q 	c #AEAEAE",
  "r 	c #F1F1F1",
  "s 	c #D2D2D2",
  "t 	c #E1E1E1",
  "u 	c #DFDFDF",
  "v 	c #A9A9A9",
  "w 	c #6B6B6B",
  "x 	c #737373",
  "y 	c #D1D1D1",
  "z 	c #858585",
  "A 	c #1E1E1E",
  "B 	c #B3B3B3",
  "C 	c #D6D6D6",
  "D 	c #CFCFCF",
  "E 	c #D3D3D3",
  "F 	c #A2A2A2",
  "G 	c #373737",
  "H 	c #8D8D8D",
  "I 	c #888888",
  "J 	c #767676",
  "K 	c #7C7C7C",
  "L 	c #B5B5B5",
  "M 	c #555555",
  "N 	c #000000",
  "O 	c #060606",
  "P 	c #848484",
  "Q 	c #DCDCDC",
  "R 	c #C3C3C3",
  "S 	c #656565",
  "T 	c #8B8B8B",
  "U 	c #8F8F8F",
  "V 	c #9B9B9B",
  "W 	c #585858",
  "X 	c #C7C7C7",
  "Y 	c #7F7F7F",
  "Z 	c #171717",
  "` 	c #111111",
  " .	c #B7B7B7",
  "..	c #969696",
  "+.	c #6E6E6E",
  "@.	c #010101",
  "#.	c #A6A6A6",
  "$.	c #A7A7A7",
  "%.	c #CDCDCD",
  "&.	c #DADADA",
  "*.	c #9C9C9C",
  "=.	c #7E7E7E",
  "-.	c #070707",
  ";.	c #D0D0D0",
  ">.	c #9A9A9A",
  ",.	c #878787",
  "'.	c #939393",
  ").	c #1B1B1B",
  "!.	c #6A6A6A",
  "~.	c #6D6D6D",
  "{.	c #B8B8B8",
  "].	c #959595",
  "^.	c #B4B4B4",
  "/.	c #7D7D7D",
  "(.	c #B1B1B1",
  "_.	c #393939",
  ":.	c #E4E4E4",
  "<.	c #494949",
  "[.	c #0C0C0C",
  "}.	c #666666",
  "|.	c #C1C1C1",
  "1.	c #898989",
  "2.	c #BFBFBF",
  "3.	c #797979",
  "4.	c #5F5F5F",
  "5.	c #050505",
  "6.	c #646464",
  "7.	c #0E0E0E",
  "8.	c #212121",
  "9.	c #808080",
  "0.	c #7B7B7B",
  "a.	c #676767",
  "b.	c #9D9D9D",
  "c.	c #CCCCCC",
  "d.	c #787878",
  "e.	c #464646",
  "f.	c #141414",
  "g.	c #686868",
  "h.	c #AFAFAF",
  "i.	c #BCBCBC",
  "j.	c #4D4D4D",
  "k.	c #C9C9C9",
  "l.	c #2E2E2E",
  "m.	c #BEBEBE",
  "n.	c #CECECE",
  "o.	c #242424",
  "p.	c #A8A8A8",
  "q.	c #868686",
  "r.	c #C6C6C6",
  "s.	c #B0B0B0",
  "t.	c #979797",
  "u.	c #919191",
  "v.	c #C5C5C5",
  "w.	c #C4C4C4",
  "x.	c #7A7A7A",
  "y.	c #A1A1A1",
  "z.	c #303030",
  "A.	c #696969",
  "B.	c #151515",
  "C.	c #707070",
  "D.	c #818181",
  "E.	c #BABABA",
  "F.	c #A4A4A4",
  "G.	c #444444",
  "H.	c #0F0F0F",
  "I.	c #A3A3A3",
  "J.	c #515151",
  "K.	c #BBBBBB",
  "L.	c #040404",
  "M.	c #363636",
  "N.	c #989898",
  "O.	c #3E3E3E",
  "P.	c #626262",
  "Q.	c #4F4F4F",
  "R.	c #B6B6B6",
  "S.	c #999999",
  "T.	c #8C8C8C",
  "U.	c #929292",
  "V.	c #1F1F1F",
  "W.	c #ADADAD",
  "X.	c #454545",
  "Y.	c #757575",
  "Z.	c #727272",
  "`.	c #828282",
  " +	c #8E8E8E",
  ".+	c #6C6C6C",
  "++	c #2B2B2B",
  "@+	c #090909",
  "#+	c #0A0A0A",
  "$+	c #121212",
  "%+	c #2D2D2D",
  "&+	c #191919",
  "*+	c #565656",
  "=+	c #020202",
  "-+	c #101010",
  ";+	c #414141",
  ">+	c #949494",
  ",+	c #4E4E4E",
  "'+	c #CBCBCB",
  ")+	c #616161",
  "!+	c #5D5D5D",
  "~+	c #B2B2B2",
  "{+	c #232323",
  "]+	c #C0C0C0",
  "^+	c #1D1D1D",
  "/+	c #545454",
  "(+	c #2A2A2A",
  "_+	c #484848",
  ":+	c #838383",
  "<+	c #A0A0A0",
  "[+	c #181818",
  "}+	c #B9B9B9",
  "|+	c #8A8A8A",
  "1+	c #0B0B0B",
  "2+	c #717171",
  "3+	c #747474",
  "4+	c #343434",
  "5+	c #A5A5A5",
  "6+	c #424242",
  "7+	c #595959",
  "8+	c #5B5B5B",
  "9+	c #5E5E5E",
  "0+	c #333333",
  "a+	c #030303",
  "b+	c #2C2C2C",
  "c+	c #4A4A4A",
  "d+	c #131313",
  "e+	c #898787",
  "f+	c #7C7373",
  "g+	c #735F5F",
  "h+	c #6D5454",
  "i+	c #684B4B",
  "j+	c #6F5757",
  "k+	c #7B6D6D",
  "l+	c #A9A8A8",
  "m+	c #888484",
  "n+	c #7A6E6E",
  "o+	c #6F5959",
  "p+	c #6C5252",
  "q+	c #664848",
  "r+	c #7B6B6B",
  "s+	c #A3A1A1",
  "t+	c #9C9B9B",
  "u+	c #6F6F6F",
  "v+	c #6A5F5F",
  "w+	c #693737",
  "x+	c #722F2F",
  "y+	c #6E2727",
  "z+	c #6F2323",
  "A+	c #722222",
  "B+	c #752121",
  "C+	c #742121",
  "D+	c #6E2222",
  "E+	c #6D3D3D",
  "F+	c #ACA6A6",
  "G+	c #999595",
  "H+	c #694D4D",
  "I+	c #613232",
  "J+	c #672A2A",
  "K+	c #6A2424",
  "L+	c #6F2222",
  "M+	c #732222",
  "N+	c #772121",
  "O+	c #762222",
  "P+	c #702222",
  "Q+	c #6D3131",
  "R+	c #603F3F",
  "S+	c #756868",
  "T+	c #732A2A",
  "U+	c #852222",
  "V+	c #892222",
  "W+	c #8E2323",
  "X+	c #942424",
  "Y+	c #992525",
  "Z+	c #9C2727",
  "`+	c #9A2626",
  " @	c #741E1E",
  ".@	c #A18B8B",
  "+@	c #C3C1C1",
  "@@	c #624949",
  "#@	c #652121",
  "$@	c #711F1F",
  "%@	c #7D2020",
  "&@	c #862222",
  "*@	c #8F2424",
  "=@	c #962525",
  "-@	c #9B2626",
  ";@	c #9D2727",
  ">@	c #9B2727",
  ",@	c #892323",
  "'@	c #5D1818",
  ")@	c #535353",
  "!@	c #313131",
  "~@	c #252525",
  "{@	c #908D8D",
  "]@	c #713535",
  "^@	c #912323",
  "/@	c #A52828",
  "(@	c #B12C2C",
  "_@	c #B82E2E",
  ":@	c #BB2E2E",
  "<@	c #BD2F2F",
  "[@	c #B42C2C",
  "}@	c #7F2C2C",
  "|@	c #C3B3B3",
  "1@	c #705D5D",
  "2@	c #631C1C",
  "3@	c #842020",
  "4@	c #9F2727",
  "5@	c #AC2A2A",
  "6@	c #B42D2D",
  "7@	c #B92E2E",
  "8@	c #BC2E2E",
  "9@	c #BE2F2F",
  "0@	c #A92929",
  "a@	c #6B1A1A",
  "b@	c #774949",
  "c@	c #8E2424",
  "d@	c #AE2A2A",
  "e@	c #C02F2F",
  "f@	c #C73131",
  "g@	c #C83232",
  "h@	c #C53030",
  "i@	c #A32828",
  "j@	c #8F5D5D",
  "k@	c #E2DDDD",
  "l@	c #A6A2A2",
  "m@	c #643030",
  "n@	c #872222",
  "o@	c #B22C2C",
  "p@	c #BF3030",
  "q@	c #C53131",
  "r@	c #C83131",
  "s@	c #C93232",
  "t@	c #B52C2C",
  "u@	c #701B1B",
  "v@	c #7E6060",
  "w@	c #842222",
  "x@	c #C33030",
  "y@	c #CB3232",
  "z@	c #C13030",
  "A@	c #8B2626",
  "B@	c #C5B8B8",
  "C@	c #8B7777",
  "D@	c #842A2A",
  "E@	c #B52D2D",
  "F@	c #C63131",
  "G@	c #CB3333",
  "H@	c #CC3333",
  "I@	c #B82D2D",
  "J@	c #711C1C",
  "K@	c #0A0202",
  "L@	c #867575",
  "M@	c #7C2222",
  "N@	c #A52929",
  "O@	c #CA3232",
  "P@	c #C23030",
  "Q@	c #902929",
  "R@	c #B3A4A4",
  "S@	c #CBCACA",
  "T@	c #B3B1B1",
  "U@	c #846E6E",
  "V@	c #852F2F",
  "W@	c #AF2C2C",
  "X@	c #721C1C",
  "Y@	c #827474",
  "Z@	c #782121",
  "`@	c #A12828",
  " #	c #B02C2C",
  ".#	c #934141",
  "+#	c #8A5F5F",
  "@#	c #8D7979",
  "##	c #928585",
  "$#	c #857777",
  "%#	c #756161",
  "&#	c #674343",
  "*#	c #702E2E",
  "=#	c #882727",
  "-#	c #AA2A2A",
  ";#	c #C03030",
  ">#	c #725E5E",
  ",#	c #9E2727",
  "'#	c #BC2F2F",
  ")#	c #B82F2F",
  "!#	c #A63030",
  "~#	c #8C2D2D",
  "{#	c #792B2B",
  "]#	c #722929",
  "^#	c #732626",
  "/#	c #782323",
  "(#	c #832222",
  "_#	c #942525",
  ":#	c #888787",
  "<#	c #6A6868",
  "[#	c #643F3F",
  "}#	c #BF2F2F",
  "|#	c #AD2B2B",
  "1#	c #9F2828",
  "2#	c #972626",
  "3#	c #972525",
  "4#	c #A02727",
  "5#	c #AB2A2A",
  "6#	c #A5A2A2",
  "7#	c #5D3737",
  "8#	c #571E1E",
  "9#	c #4E2525",
  "0#	c #706464",
  "a#	c #8A8989",
  "b#	c #7A7070",
  "c#	c #682828",
  "d#	c #B72D2D",
  "e#	c #B62D2D",
  "f#	c #877A7A",
  "g#	c #632222",
  "h#	c #731F1F",
  "i#	c #751F1F",
  "j#	c #6E2323",
  "k#	c #662828",
  "l#	c #6D2B2B",
  "m#	c #7D2626",
  "n#	c #AE2B2B",
  "o#	c #CA3333",
  "p#	c #775F5F",
  "q#	c #6E1F1F",
  "r#	c #8B2222",
  "s#	c #AB2B2B",
  "t#	c #A62C2C",
  "u#	c #9F2A2A",
  "v#	c #A02828",
  "w#	c #CFCDCD",
  "x#	c #785959",
  "y#	c #982525",
  "z#	c #C12F2F",
  "A#	c #BA2D2D",
  "B#	c #DBDADA",
  "C#	c #886E6E",
  "D#	c #752020",
  "E#	c #C43030",
  "F#	c #E9E8E8",
  "G#	c #9B8A8A",
  "H#	c #752727",
  "I#	c #9C2626",
  "J#	c #A53030",
  "K#	c #A43E3E",
  "L#	c #AF3535",
  "M#	c #C33131",
  "N#	c #BAB2B2",
  "O#	c #773D3D",
  "P#	c #812222",
  "Q#	c #8A3636",
  "R#	c #AD8484",
  "S#	c #CAB7B7",
  "T#	c #A76F6F",
  "U#	c #B13030",
  "V#	c #E3E1E1",
  "W#	c #AD9999",
  "X#	c #A27E7E",
  "Y#	c #C9B5B5",
  "Z#	c #F0EDED",
  "`#	c #A68D8D",
  " $	c #9D3131",
  ".$	c #ECEAEA",
  "+$	c #ABA0A0",
  "@$	c #873636",
  "#$	c #AA2B2B",
  "$$	c #721D1D",
  "%$	c #C0BEBE",
  "&$	c #794343",
  "*$	c #962626",
  "=$	c #785353",
  "-$	c #8A2323",
  ";$	c #B12B2B",
  ">$	c #816969",
  ",$	c #7F2222",
  "'$	c #877777",
  ")$	c #7A2222",
  "!$	c #A42828",
  "~$	c #636363",
  "{$	c #827373",
  "]$	c #6E5959",
  "^$	c #0A0303",
  "/$	c #B0AFAF",
  "($	c #643E3E",
  "_$	c #7C2121",
  ":$	c #C93131",
  "<$	c #868080",
  "[$	c #5D2626",
  "}$	c #8F2323",
  "|$	c #0B0303",
  "1$	c #383838",
  "2$	c #3D3D3D",
  "3$	c #2F2F2F",
  "4$	c #474747",
  "5$	c #453838",
  "6$	c #471313",
  "7$	c #4A1212",
  "8$	c #561515",
  "9$	c #5F1717",
  "0$	c #611818",
  "a$	c #621818",
  "b$	c #641818",
  "c$	c #541515",
  "d$	c #050101",
  "                                                                                                                                                                                                ",
  "                                                                                                                                                                                                ",
  "                                          . + @                                               # $ % &                                                                                           ",
  "                                      * = - ; > ,                                           ' ) ! ~ - { #                                                                                       ",
  "                                  ] = ^ ! / ( _ :                                         < [ ( / } / | 1 ; 2 3                                                                                 ",
  "                            4 5 % - ! / } } 6 7 8 9                                       + 0 / } } } } / | a 0 b [                                                                             ",
  "                        c 5 b ^ | / } } } } / = d e                                     f g ~ } } } } } } } } / ~ - { &                                                                         ",
  "                    h ' % i | / } } } } } } } a j k l         # m n                     f { 6 } } } } } } } } } } / | i ; 2 3                                                                   ",
  "                  ] b 1 | / } } } } } } } } } / b o p       # ^ ' q                     j r / / / } } } } } } } } } } / 6 a $ 2 g                                                               ",
  "            s t % a 6 / } } } } } } } } } } } } 6 u v w x y 0 ! ! . z A                 B 4 g * t 0 / } } } } } } } } } } } / | ^ % [                                                           ",
  "        C 5 b a | / } } } } } } } } } } } } } } } ! # D E % ~ / / 0 F G                   H I J K L - / } } } } } } } } } } } } / | i ; # 3                                                     ",
  "    + ' { a 6 / } } } } } } } } } } } } } } } } } } / | ! 6 / / / ! _ M                       N O P ' 6 } } } } } } } } } } } } } } / / ( $ Q                                                   ",
  ") = ) i | / } } } } } } } } } } } } } } } } } } } } } } } / 1 [ 3 2 R S N                         T ] 6 } } } } } } } } } } } } } } } } } | 7 d                                                 ",
  "3 % | / } } } } } } } } } } } } } } } } } } } } } } } } } i m U H o V W                           > & 6 } } } } } } } } } } } } } } } } } | X K                                                 ",
  "  ] a } } } } } } } } } } } } } } } } } } } } } } } } } / g Y Z `                                 j $ } } } } } } } } } } } } } } } } } } a  ...L c & 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 c     ",
  "  < { 6 } } } } } } } } } } } } } } } } } } } } } } } } / Q +.@.                    ;             u ~ } } } } } } } } } } } / / / / } } } r #.$.%.2 1 a a a a a a a a a a a a a a a a a a &.*.  ",
  "    t i } } } } } } } } } } } } } } } } } } } } } } } } / g =.-.                  # ; c         * $ / } } } } } } } } } } | { D ;.b 6 } 6 Q >.q C $ 6 } } } } } } } } } } } } } } } } } 6 &.,.  ",
  "    4 % 6 } } } } } } } } } } } } } } } } } } } } } } } } ; '.).                5 % ( 3 X     ] { ! } } } } } } } } } } 6 & q !.~.B { / ^ {.].^.. 1 / } } } } } } } } } } } } } } } } } / 4 /.  ",
  "      t a } } } } } } } } } } } } } } } } } } } } } } } } ( (._.              Q & ( / ~ # :.) 0 ! } } } } } } } } } } / 0 $.<.O [.}.|.{ X 1.'.2.3 ( } } } } } } } } } } } } } } } } } } / 4 3.  ",
  "      4 { 6 } } } } } } } } } } } } } } } } } } } } } } } 6 D 4.5.            . 0 / } / | a ( | / } } } } } } } } } } ! E 6.7.N   8.9.> 0.a.b.c.{ | } } } } } } } } } } } } } } } } } } / 4 d.  ",
  "        5 a / } } } } } } } } } } } } } } } } } } } } } } } 2 ..).          %.3 | } } } } / / } } } } } } } } } } } } - q e           e.f.g.h.Q 1 / } } } } } } } } } } } } } } } } } } / 4 d.  ",
  "        &.) 6 } } } } } } } } } } } } } } } } } } } } } } } i i.j.          D $ / } } } } } } } } } } } } } } } } } / = V 9               H k.b ! } } } } } } } } } } } } } } } } } } } / 4 d.  ",
  "          ' a } } } } } } } } } } } } } } } / / / } } } } } 6 :.'.l.        < ( } } } } } } } } } } } } } } } } } } / t ,.                m.:.a } } } } } } } } } } } } } } } } } } } } / 4 d.  ",
  "          &.{ 6 } } } } } } } } } } / ! $ [ u t ; 6 } } } } } ~ n.z o.    p.+ ~ / } } } } } } } } } } } } } } } } } / ] q.    g * r.    %.' 1 6 } } } } } } } } } } } } } } } } } } } } / 4 d.  ",
  "            5 ~ } } } } } } } } } / ; ;.s.t.q.u.v.- / } } } } / r w.x.    o R 4 3 - ! / / } } } } } } } } } } } } } / = s.  m 2 % t < + { ^ / } } } } } } } } } } } } } } } } } } } } } / 4 d.  ",
  "            c ; 6 } } } } } } } ! ' y.k z.Z     o { | } } } / | 3 B A.B.    C.C.D.d E.4 ; 6 } } } } } } } } } } } } } ! = :.{ 0 g ' ^ i ~ 6 } } } } } } } } } } } } } } } } } } } } } } / 4 d.  ",
  "              :.( } } } } } } / [ F.G.H.        _ 0 | / / | ^ + I.k f.          Z z.J.9.^.' ~ } } } } } } } } } } } } } 6 ( ~ ( h 7 $ ~ / } } } } } } } } } } } } } } } } } } } } } } } / 4 d.  ",
  "              4 ) / } } } } } | K.M L.          u - i ) ] X #.8 M.                    H.G.N.+ | } } } } } } } } } } } } } } } i r.w.&.3 a / } } } } } } } } } } } } } } } } } } } } } } / 4 8   ",
  "                5 ! } } } } } ~ q O.@.          ] < _ #.T P._.                            Q.B 0 } } } } } } } } } } } } } } } r R.S.T.U.f ^ / } } } } } } } } } } } } } } } } } } } } } / 4 8   ",
  "                c r / } } } } 6 c u.,                                                       > % / } / / / / } } } } } } } } / g '.j.V.7.b.3 / } } } } } } } } } } } } } } } } } } } } } / 4 8   ",
  "                  ' ~ } } } } } a . W.+.X.                                                  ;.- / | b Q < u 2 0 ~ / } } } } | E !.7.@.N u.. 6 } } } } } } } } } } } } } } } } } } } } } / 4 8   ",
  "                  4 r / } } } } } | ' $.q.Y.                                              u { ! / % y.Z.A.x.U.v r.] r 6 } } ^ B G.N     `.s ! } } } } } } } } } } } } } } } } } } } } } / 4 8   ",
  "                    ' ! } } } } / ( s V  +.+++                                          # - ! / 6 s M @+-.#+$+%+J.Y.F < 0 ~ &.9.&+        c.1 } } } } } } / ! i ^ i ! 6 } } } } } } } } / 4 8   ",
  "                    4 $ / } / ! { D b. +1.*+[.                                        j + a / / | ;.J.N         =+-+O.P m.] p.;+          c.; / } } } } | # y i.^.|.E g i / } } } } } } / 4 8   ",
  "                      t { 3 h E.o >+t.y.N.,+N                 = 5 ^.                    I.'+= ( ! . 0.                f.)+I.)+-.          %.= 6 } } } a y n x C.x J =.U.2.b / } } } } } / 4 8   ",
  "                      c.i.F D.!++.'.~+m i.J {+          ] 3 b ^ $ w.}.                    P p.]+;.f I                     ,+^+            y 2 6 } } / = *.+.=.T ..N.>+,.*.&.6 } } } } } / 4 8   ",
  "                                /+p.c & = y |.s 4 ] g 2 r i ! / 6 g U                       (+_+k w <.                                    C = 6 } } / # ..~.T.(.m %.'+@ p.t 6 } } } } } / 4 8   ",
  "                                  ;.{ ( ! ( 1 i a ( ! | 6 / } } } i R.M                         9 #+                                      * ) 6 } } / - 2.~.1.f ' % * v %.$ / } } } } } / 4 8   ",
  "                                3 0 | / } } / / / } } } } } } } } / C 3.                                                                  :.^ / } } } 6 & ..:+n.r ( ;.R.% ~ / } } } } } / < 8   ",
  "                            ' b - ! / } } } } } } } } } } } } } } } :.H B.                u C f m B <+                    2 & & :.* 7     Q & r i ~ ~ a # F.,.w.{ a %.R 7 . b - a ~ ~ i { v.Y.  ",
  "                2 4 c + * 3 ) i | / } } } } } } } } } } } / | a ( | g n [+            b r $ 0 ; { # 4 {.            0 r r - ^ 1 ^ 0 [ j 2._ $.@ {.R X }+d d.|+2.[ ( u {.V U y.W.E.r.r. .o /.*+  ",
  "                :.{ r - i ! 6 / } } } } } } } } } } } } / - f q K.%.m K 1+            4 - / / / / 6 r ^.          4 g ~ 6 / / / / / 0 (.#.E.p.U =.0.8 Z.Z.,.d r.& ~ ( [ ;.~+T.=.3.3.Y.2+C.3.6.  ",
  "                ;.) 6 / } } } } } } } } } } } } } } } } 6 C 3+4+J.Y.8 <.              y ; / } } } / *  +            j ^ / } } } } / # S.'.^.w.i.@ o S.S.b.$.{.C { ! / ! % &.m B 5+*.N.N.b.N.w   ",
  "                  ' | } } } } } } } } } } } } } } } } } ~ {.G N                       D 2 / } } } ( @ 6+            (.* | } } } } / * q.I ~+< ' ] < E D D 7 u ) ( / } / ~ - = :.. C y n.D ]+=.  ",
  "                  + i } } } } } } } } } } } } } } } } } a (.(+N                       n.3 6 } } } ^ U.^+              * ~ } } } } / C 9.1.}+' 0 1 0 ; { { r ^ ~ / } } } / 6 ! a ^ $ ) { { 4 |+  ",
  "                  n.; / } } } } } } } } } } } } } } } } ~ }+4+                        s 3 6 } } } a ~+7+            ) ; | } } } } 6 c.0. +|.= ! / / 6 6 6 / / } } } } } } } } } / / 6 | | :. +l ",
  "                  w.& 6 } } } } } } } } } } } } } } } } 6 c.8+                        c [ 6 } } } 6 & k.{.E.;.3 { 0 1 ~ / } } } } 6 c.Y U.X { | } / } } } } } } } } } } } } } } } } } } } 3 U [.",
  "                    + ~ } } } } } } } } } } } } } } } } / 2 ].A         4             5 { / } } } } 6 a r b % $ ^ ( | / } } } } } 6 < q.n k.) ~ - $ ~ / } } } } } } } } } } } } } } } } } 3 U [.",
  "                    E 0 / } } } } } } } } } } } } } } } } ! f .+      { * q           b ^ / } } } } } } / / 6 / / / } } } } } } } / [ <+z _ Q j B (.%.^ / } } } } } } } } } } } } } } } } 3 U [.",
  "                    k.= 6 } } } } } } } } } } } } } } } } / { ^.P.  t 1 r m.p.n       0 ~ } } } } } } } } } } } } } } } } } } } } / i %.U.>+> w.3 '+~+u a / } } } } } } } } } } } } } } } 3 U [.",
  "                      t ~ } } } } } } } } } } } } } } } } } 6 { c t - ! 6 t v y.(.;.% ( / } } } } } } } } } } } } } } } } } } } } } / 1 + 7 2 ^ ( . #.m.[ ~ } } } } } } } } } } } } } } } 3 U [.",
  "                      C 1 } } } } } } } } } } } } } } } } } } 6 ~ ~ 6 / / 1 _ o L 4 ; | } } } } } } } } } } } } } } } } } } } } } } } / ! a ~ 6 / & I.F.7 ^ 6 } } } } } } } } } } } } } } 3 U [.",
  "                      c.% 6 } } } } } } } } } } } } } } } } } } / } } } } 6 u F F.'+# ! } } } } } } } } } } } } } } } } } } } } } } } } / / / / / [ *.n R % | } } } } } } } } } } } } } } 3 U [.",
  "                      X :.| } } } } } } } } } } } } } } } } } } } } } } } } ^ q u.v s ^ 6 } } } } } } } } } } } } } } } } } } } } } } / 1 [ 2 i 6 t U |+i.# ! } } } } } } } } } } } } } } 3 U [.",
  "                        + i } } } } } } } } } } } } } } } } } } } } } } } } 6 ]+S *+>+' ! } } } } } } } } } } } } } } } } } } } } } } ( m.,.t.R # f =. +i.# ~ } } } } } } } } } } } } } } 3 U [.",
  "                        s ; / } } } } } } } } } } } } } } } } } } } } } / / 6 '+<.$+6.s a } } } } } } } } } } } } } } } } } } } } } 6 * 9.k 9+d.@ d d.N.R = ! } } } } } } } } } } } } } } 3 U [.",
  "                        X [ | } } } } } } } } } } } } } } } } } } / 6 i { 5 . m ,+5.j.X 0 / } } } } } } } } } } } } } } } } } } } / ( 2..+:+1.0.C.Y.H > n.; 6 } } } } } } } } } } } } } } 3 U [.",
  "                          . ( } } } } } } } } } } } } } } } } / ( = %.p.U 0.x 0.;+@._.i.% / } } } } } } } } } } } } } } } } } } } / ; #.3+'. .|.}+L  .j t 1 / } } } } } } } } } } } } } } 3 U [.",
  "                          7 - / } } } } } } } } } } } } } } | % R t.9+0+$+O a+L.=+    i.2 / } } } } / 6 a 0 ) $ a | / } } } } } } / 3 T./.I.;.& = :.u :.r | } } } } } } } } } } } } } } } 3 U [.",
  "                          '+= 6 } } } } } } } } } } } } / - '+U.: Z =+                v.& / } } } / 0 h p.n z U.v w.t ~ / } } } } / + :+z (.u ^ | ~ a ( 6 } } } } } } } } } } } } } } } } 3 U [.",
  "                            ' ~ } } } / 6 ! ~ ~ 6 / } } ( w.x b+5.                    '+g 6 } } } ! R `.+.Y.0.0.x.9.F.g 6 } } } } 6 E =.T K.& ~ } } / / } } } } } } } } } } } } } } } } } 3 U [.",
  "                            4 ^ / / a # ;.|.{.w.* a / } & =.f.N                       E 3 6 } } } ^ >+g.,.t.$.h.W.>. +< ~ / } } } 6 j x.u.w.b ! } } } } } } } } } } } } } } } } } } } } } 3 U [.",
  "                            ;.% i g 2.S.w W c+}.F 5 ! / & Y d+                        < # 6 } } } i #.A.T B %.< < ~+#.& ! } } } } 6 %.9.'.j ) | } } } } } } } } } } } } } } } } } } } } } 3 U [.",
  "                            j &.|.u.J.o.5.      )+7 1 / 1 |.C.                        t % / } } } 6 E I q.m # 0 ' v 7 1 6 } } } } / 4 q.u.f ; | 6 | ! | 6 / } } } } } } } } / / 6 | ! | 6 3 U [.",
  "                              R 9.  -+^+          ] i / / r j T                       :.; 6 / / } / { s.:+m.) ( y _ & 1 | / / } } / :.t.1.]+Q Q y j ]+k.C % ~ / } } } / ~ 0 3 + %.w.m.k.C < U.l ",
  "                                  1.n $._ %.E c.w.2 ( / / | t 5+}.1.k.' # [ 5 Q s     E ;.* 2 $ 1 r c $.P  .# a E i.K.|.s ' % ^ 1 r + s.:+H e+f+g+h+i+j+k+l++ | / } ! # R $.m+n+o+p+q+j+r+s+t+` ",
  "                                + < < t % - i r :.2 1 1 b %.>.I n q C { a ( ( 1 #  .R.R I.].].*.b.'.9.u+u.{.:.i ) '+~+H ,.H ].d b.].P d.v+w+x+y+z+A+B+C+D+E+F+; / 6 u G+H+I+J+K+L+M+N+O+P+Q+R+  ",
  "                                . ) ^ ( 6 / } | g m i.~+<+A.<.8 b.m.] ^ / } } / 2 '.d v._ y.I 0.8 J =.H F.R 3 a 6 0 t 2.F 1.=.3.J 8 x.z S+T+U+V+W+X+Y+Z+`+ @.@2 6 ~ +@@@#@$@%@&@*@=@-@;@>@,@'@  ",
  "                                u i / } } } / ; s.)@!@~@      a.$.C ; ! } } } 6 < 3+1.2.c C k.i.^.s.~+}+k.. r | } 6 i # &.c.m {.~+h.(.R.{@]@^@/@(@_@:@<@[@}@|@0 / | D 1@2@3@4@5@6@7@8@9@9@0@a@  ",
  "                                u i } } } } / 4 K l             q ] ~ / } } } ! k.A.q.|.t { 2 ' * + + * [ r ~ / } } 6 ( 0 % & t . &.&.Q R.b@c@d@e@f@g@h@i@j@k@( / / # l@m@n@o@p@q@r@g@s@s@t@u@  ",
  "                                u i } } } } 6 c.k =+            n.b / } } } } ~ _ )+T k.= ! | ~ a i i a ! 6 } } } } } / / 6 ! ( i 1 1 i E v@w@5@x@y@y@z@A@B@) | / / a C C@D@E@F@G@H@H@H@H@I@J@K@",
  "                                u i } } } } / ] >.c+            ; i / } } } } a ^.!+u.;.) 6 } } / / / / } } } } } } } } } } } } / / / / ] L@M@N@z@O@y@P@Q@R@S@. :.] y T@U@V@W@x@G@H@H@H@H@I@X@K@",
  "                                u i } } } } / ( :.c.r.%.t = r ^ ( 6 } } } } } a {.k '.7 $ 6 / / / } } } } } } } } } } } } } } / / / } / u Y@Z@`@9@s@H@r@ #.#+#@###$#%#&#*#=#-#;#y@H@H@H@H@I@X@K@",
  "                                u i } } } } } / | i 0 ; 0 1 ( | / } } } } } } ! r.w T h ; ) &.s # | / } } } } } } } } } } / a * s t 1 | D >#Z@,#'#s@H@H@f@)#!#~#{#]#^#/#(#_#W@z@y@H@H@H@H@I@X@K@",
  "                                u i } } } } } } } } / / / / / } } } } } } } } 6 * P 0.E.%.i.L t. .% 6 } } } } } } } } } } ! < :#<#U.v.u > [#M@4@<@s@H@H@H@r@}#|#1#2#_#3#4#5#'#F@G@H@H@H@H@I@X@K@",
  "                                u i } } } } } } } } } } } } } } } } } } } } } / 1 R ].*.i.* [ ~+ +D a / } } } } } } } } } { 6#7#8#9#0#a#b#c#U+N@p@O@H@H@H@G@s@x@<@d#e#d#'#z@f@G@H@H@H@H@H@I@X@K@",
  "                                u i } } } } } } } } } } } } } } } } } } } } } } / r * u { i a '+=.L % | } } } } } } } } / u f#g#h#i#j#k#l#m#X+n#x@y@H@H@H@H@H@G@s@f@f@f@s@o#G@H@H@H@H@H@H@I@X@K@",
  "                                u i } } } } } } } } } } } } } } } } } } } } } } } / 6 6 6 / 6 < `...&.1 / } } } } } } } 6 D p#q#r#i@s#t#u#v#5@<@r@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@I@X@K@",
  "                                u i } } } } } } } } } } } } } } } } } } } } } } } } / 6 / / 6 C x.T D r / } } } } } } } 6 w#x#i#y#[@z#z#:@A#}#F@y@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@I@X@K@",
  "                                u i } } } } } } } } } } } } } } } } } } } } } } } ! b &.g i ! k.g.T '+{ 6 } } } } } } } / B#C#D#4@:@h@E#F@r@O@y@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@I@X@K@",
  "                                u i } } } } } } } } } } } } } } } } } } } } } } / g F.0.N.j ' q !+>+%.{ 6 } } } } } } } / F#G#H#I#d@J#K#L#M#y@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@I@X@K@",
  "                                u i } } } } } } } } } } } } } } } } } } } } } } ~ E.6.w Y.|+F.Y 2+y.h r 6 } } } } } } } } - N#O#P#Q#R#S#T#U#f@y@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@I@X@K@",
  "                                u i } } } } } } } } } } } } } } } } } } } } } / r ].9+T.*.N.T.D.N.R.* ^ / } } } } } } } } | V#W#X#Y#Z#{ `# $8@F@G@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@I@X@K@",
  "                                u i } } } } } } } } } } } } } } } } } } } } } 6 g K !.o |.D v.K.m.;.= ~ } } } } } } } } } / ~ { .$1 | i +$@$#$}#O@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@I@$$K@",
  "                                u i } } } } } } } } } } } } } } } } } } } } } | s w d.B 4 ) ) [ g b i / } } } } } } } } } } / / / / / | %$&$*$d#g@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@I@$$K@",
  "                                u i } } } } } } } } } } } } } } } } } } } } } ! w.6.z ]+3 ( | ~ a ~ / } } } } } } } } } } } } } } } } / D =$-$;$q@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@I@$$K@",
  "                                u i } } } } } } } } } } } } } } } } } } } } } ( }+)+H c.b | } } } } } } } } } } } } } } } } } } } } } / + >$,$0@P@y@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@I@$$K@",
  "                                u i } } } } } } } } } } } } } } } } } } } } } 1 (.7+>+s ; 6 } } } } } } } } } } } } } } } } } } } } } / 5 '$)$!$e@O@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@I@$$K@",
  "                                u i } } } } } } } } } } } } } } } } } } } } } a E.~$>+c 0 / } } } } } } } } } } } } } } } } } } } } } / * {$N+4@9@s@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@I@$$K@",
  "                                u i } } } } } } } } } } } } } } } } } } } } } ! r.w  +C 0 / } } } } } } } } } } } } } } } } } } } } } / n.]$Z@;@'#s@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@I@$$^$",
  "                                + ; ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ 0 c :+Y k.{ ( ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ i /$($_$4@8@:$y@y@y@y@y@y@y@y@y@y@y@y@y@y@y@y@y@y@y@I@$$^$",
  "                                w.L @ p.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.p.> V 2+b.B K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.{.<$[$ @}$/@n# # # # # # # # # # # # # # # # # # # #N@J@|$",
  "                                    1$z.%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+!@2$3$Q.j.c+4$e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.4$5$6$7$8$9$0$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$b$c$  ",
  "                                                                                                                                                    d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$d$    ",
  "                                                                                                                                                                                                "};
  Index: ossp-pkg/titraq/gfx/ossplogo.xpm
  ============================================================
  $ cvs update -p -r1.1 ossplogo.xpm
  /* XPM */
  static char * ossplogo_xpm[] = {
  "16 15 100 2",
  "  	c None",
  ". 	c #AAAAAA",
  "+ 	c #909090",
  "@ 	c #9B9B9B",
  "# 	c #C6C6C6",
  "$ 	c #FEFEFE",
  "% 	c #FDFDFD",
  "& 	c #A2A2A2",
  "* 	c #888888",
  "= 	c #8A8A8A",
  "- 	c #FBFBFB",
  "; 	c #BFBFBF",
  "> 	c #D7D7D7",
  ", 	c #FFFFFF",
  "' 	c #EEEEEE",
  ") 	c #737373",
  "! 	c #FCFCFC",
  "~ 	c #CCCCCC",
  "{ 	c #C4C4C4",
  "] 	c #E2E2E2",
  "^ 	c #E3E3E3",
  "/ 	c #D5D5D5",
  "( 	c #4F4F4F",
  "_ 	c #CFCFCF",
  ": 	c #646464",
  "< 	c #D2D2D2",
  "[ 	c #434343",
  "} 	c #C2C2C2",
  "| 	c #DCDCDC",
  "1 	c #6E6E6E",
  "2 	c #AFAFAF",
  "3 	c #E0E0E0",
  "4 	c #F8F8F8",
  "5 	c #9F9F9F",
  "6 	c #EDEDED",
  "7 	c #949494",
  "8 	c #979797",
  "9 	c #919191",
  "0 	c #7F7F7F",
  "a 	c #7D7D7D",
  "b 	c #CDCDCD",
  "c 	c #999999",
  "d 	c #F4F4F4",
  "e 	c #EBEBEB",
  "f 	c #626262",
  "g 	c #E4E4E4",
  "h 	c #474747",
  "i 	c #C1C1C1",
  "j 	c #E7E7E7",
  "k 	c #C7C7C7",
  "l 	c #393939",
  "m 	c #F1F1F1",
  "n 	c #797979",
  "o 	c #DDDDDD",
  "p 	c #EFEFEF",
  "q 	c #D6D6D6",
  "r 	c #F3F3F3",
  "s 	c #4C4C4C",
  "t 	c #F9F9F9",
  "u 	c #F5F5F5",
  "v 	c #9C9C9C",
  "w 	c #FAFAFA",
  "x 	c #B8B8B8",
  "y 	c #D4D4D4",
  "z 	c #BDBDBD",
  "A 	c #A5A5A5",
  "B 	c #DBDBDB",
  "C 	c #F6F6F6",
  "D 	c #B6B6B6",
  "E 	c #D8D8D8",
  "F 	c #E5E5E5",
  "G 	c #D9D9D9",
  "H 	c #757575",
  "I 	c #BCBCBC",
  "J 	c #C9C9C9",
  "K 	c #CBCBCB",
  "L 	c #DFDFDF",
  "M 	c #934E4E",
  "N 	c #B68080",
  "O 	c #BCA4A4",
  "P 	c #A13B3B",
  "Q 	c #371A1A",
  "R 	c #777777",
  "S 	c #BAA5A5",
  "T 	c #A54343",
  "U 	c #BF4141",
  "V 	c #A74141",
  "W 	c #CA3333",
  "X 	c #3D0F0F",
  "Y 	c #B1B1B1",
  "Z 	c #B47474",
  "` 	c #C03939",
  " .	c #CD3333",
  "..	c #CC3333",
  "+.	c #C5C5C5",
  "@.	c #AC5050",
  "#.	c #3B3B3B",
  "$.	c #3C3C3C",
  "%.	c #301212",
  "&.	c #3C0F0F",
  "      .       + @               ",
  "  # $ % & *   = - % ;           ",
  "> , , , '     ) ! ! ~ { ] ^ ^   ",
  "  % $ / % ( _ , , / : < , , , [ ",
  "  } |   1     2 3 4 5 6 , , , [ ",
  "    7 8 9 0   a       < { b , [ ",
  "  c d , e f   g h c ^ i } j k l ",
  "    , , m n   - o d p q r , , s ",
  "    t , , u v w , , w x y , , s ",
  "    z A B     C D E F G ! , ! s ",
  "      o H I J K b L } M N O P Q ",
  "    R ! B % q G ! $ S T U V W X ",
  "    R , , , g Y p % Z `  ... .X ",
  "    R , , , +.r , , , @. .....X ",
  "              #.$.$.$.%.&.&.&.  "};
  Index: ossp-pkg/titraq/main.cpp
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 main.cpp
  --- ossp-pkg/titraq/main.cpp	21 Oct 2002 16:52:22 -0000	1.2
  +++ ossp-pkg/titraq/main.cpp	8 Nov 2002 12:21:34 -0000	1.3
  @@ -1,15 +1,51 @@
   #include <qapplication.h>
  -#include "version.h"
  -#include "top.h"
  +#include <qtable.h>
  +#include <qimage.h>
  +#include <qpixmap.h>
  +#include <qstringlist.h>
   
  -int main(int argc, char *argv[])
  +#include "titraq.h"
  +
  +// OSSP logo: static const char *ossplogo_xpm[]
  +#include "gfx/ossplogo.xpm"
  +
  +// Table size
  +const int numRows = 10;
  +const int numCols = 6;
  +
  +int main(int argc, char **argv)
   {
  -    QApplication App(argc, argv);
  +    QApplication App(argc, argv);			
  +
  +    QTable table(numRows, numCols);
  +
  +    QHeader *header = table.horizontalHeader();
  +    header->setLabel(0, QObject::tr("Klein"), 40);
  +    header->setLabel(1, QObject::tr("Krasse Checkung"));
  +    header->setLabel(5, QObject::tr("Combo Buxen"));
  +    header->setMovingEnabled(TRUE);
  +
  +    QImage img(ossplogo_xpm);
  +    QPixmap pix = img.scaleHeight(table.rowHeight(3));
  +    table.setPixmap(3, 2, pix);
  +    table.setText(3, 2, "OSSP");
  +
  +    QStringList comboEntries;
  +    comboEntries << "uno" << "dos" << "tres" << "quatro";
   
  -    KarmWindow *karm = new KarmWindow;
  +    for (int i = 0; i < numRows; ++i){
  +	QComboTableItem * item = new QComboTableItem(&table, comboEntries, FALSE);
  +	item->setCurrentItem(i % 4);
  +	table.setItem(i, 5, item);
  +    }	
  +    for (int j = 0; j < numRows; ++j)
  +	table.setItem(j, 1, new QCheckTableItem(&table, "Checkung"));
   
  -    App.setMainWidget(karm);
  -    karm->show();
  +//    Titraqform *pMainform = new Titraqform;
  +//    App.setMainWidget(pMainform);
  +//    pMainform->show();
   
  +    App.setMainWidget(&table);
  +    table.show();
       return App.exec();
   }
  Index: ossp-pkg/titraq/titraq_version.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 titraq_version.c
  --- ossp-pkg/titraq/titraq_version.c	21 Oct 2002 16:52:22 -0000	1.2
  +++ ossp-pkg/titraq/titraq_version.c	8 Nov 2002 12:21:34 -0000	1.3
  @@ -39,8 +39,7 @@
       "OSSP titraq 0.1.0 (27-May-2002)",
       "OSSP titraq/0.1.0",
       "@(#)OSSP titraq 0.1.0 (27-May-2002)",
  -    "$Id: titraq_version.c,v 1.2 2002/10/21 16:52:22 ms Exp $"
  +    "$Id: titraq_version.c,v 1.3 2002/11/08 12:21:34 ms Exp $"
   };
   
   #endif /* _TITRAQ_VERSION_C_AS_HEADER_ */
  -

From ossp-cvs-owner@ossp.org  Fri Nov  8 13:25:04 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7CA6F764E9; Fri,  8 Nov 2002 13:25:04 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq adddlg.cpp adddlg.h idle.cpp idle.h kaccel...
Message-Id: <20021108122504.7CA6F764E9@mail.ossp.org>
Date: Fri,  8 Nov 2002 13:25:04 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   08-Nov-2002 13:25:04
  Branch: HEAD                             Handle: 1970010101000000

  Removed files:
    ossp-pkg/titraq         adddlg.cpp adddlg.h idle.cpp idle.h
                            kaccelmenuwatch.cpp kaccelmenuwatch.h karm.cpp
                            karm.h karmui.rc ktimewidget.cpp ktimewidget.h
                            loging.cpp loging.h preferences.cpp preferences.h
                            print.cpp print.h task.cpp task.h toolicons.h
                            top.cpp top.h version.h

  Log:
    Really abandon the karm sources.

  Summary:
    Revision    Changes     Path
    NONE        +0  -239    ossp-pkg/titraq/adddlg.cpp
    NONE        +0  -69     ossp-pkg/titraq/adddlg.h
    NONE        +0  -112    ossp-pkg/titraq/idle.cpp
    NONE        +0  -95     ossp-pkg/titraq/idle.h
    NONE        +0  -117    ossp-pkg/titraq/kaccelmenuwatch.cpp
    NONE        +0  -113    ossp-pkg/titraq/kaccelmenuwatch.h
    NONE        +0  -356    ossp-pkg/titraq/karm.cpp
    NONE        +0  -85     ossp-pkg/titraq/karm.h
    NONE        +0  -29     ossp-pkg/titraq/karmui.rc
    NONE        +0  -117    ossp-pkg/titraq/ktimewidget.cpp
    NONE        +0  -20     ossp-pkg/titraq/ktimewidget.h
    NONE        +0  -120    ossp-pkg/titraq/loging.cpp
    NONE        +0  -32     ossp-pkg/titraq/loging.h
    NONE        +0  -240    ossp-pkg/titraq/preferences.cpp
    NONE        +0  -75     ossp-pkg/titraq/preferences.h
    NONE        +0  -156    ossp-pkg/titraq/print.cpp
    NONE        +0  -32     ossp-pkg/titraq/print.h
    NONE        +0  -105    ossp-pkg/titraq/task.cpp
    NONE        +0  -89     ossp-pkg/titraq/task.h
    NONE        +0  -164    ossp-pkg/titraq/toolicons.h
    NONE        +0  -231    ossp-pkg/titraq/top.cpp
    NONE        +0  -57     ossp-pkg/titraq/top.h
    NONE        +0  -4      ossp-pkg/titraq/version.h
  ____________________________________________________________________________

                                              

From ossp-cvs-owner@ossp.org  Fri Nov  8 13:27:58 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 062AF764E9; Fri,  8 Nov 2002 13:27:57 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq titraq.cpp titraq.h
Message-Id: <20021108122757.062AF764E9@mail.ossp.org>
Date: Fri,  8 Nov 2002 13:27:57 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   08-Nov-2002 13:27:57
  Branch: HEAD                             Handle: 2002110812275700

  Added files:
    ossp-pkg/titraq         titraq.cpp titraq.h

  Log:
    Write the general framework for the main control window.

  Summary:
    Revision    Changes     Path
    1.1         +92 -0      ossp-pkg/titraq/titraq.cpp
    1.1         +39 -0      ossp-pkg/titraq/titraq.h
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/titraq.cpp
  ============================================================
  $ cvs update -p -r1.1 titraq.cpp
  #include "titraq.h"
  
  #include <qvariant.h>
  #include <qlineedit.h>
  #include <qpushbutton.h>
  #include <qtable.h>
  #include <qmime.h>
  #include <qdragobject.h>
  #include <qlayout.h>
  #include <qtooltip.h>
  #include <qwhatsthis.h>
  #include <qimage.h>
  #include <qpixmap.h>
  
  // Used in initialization of the application
  void Titraqform::init()
  {
      pDeletebutton->setBackgroundColor(darkYellow);
      pMaintable->setFocus();
  }
  
  //
  // Construct a Titraqform which is a child of 'pParent', with the 
  // name 'kszName' and widget flags set to 'Flags'
  //
  
  Titraqform::Titraqform(QWidget *pParent,  const char *kszName, bool bModal,
      WFlags Flags) : QDialog(pParent, kszName, bModal, Flags)
  {
      if (!kszName)
      setName("Titraqform");
      resize(600, 480); 
      setCaption(trUtf8("OpenPKG Friend"));
      pTitraqformlayout = new QVBoxLayout(this, 11, 6, "pTitraqformlayout"); 
  
      // Contains the package layout and control layout
      pMainlayout = new QVBoxLayout(0, 0, 6, "pMainlayout"); 
  
      // Contains the table control and status line control
      pPackagelayout = new QVBoxLayout(0, 0, 6, "pPackagelayout"); 
  
      pMaintable = new QTable(this, "pMaintable");
      pMaintable->setNumRows(10);
      pMaintable->setNumCols(6);
      pMaintable->setReadOnly(FALSE);
      pPackagelayout->addWidget(pMaintable);
  
      pStatusline = new QLineEdit(this, "pStatusline");
      pStatusline->setFrameShape(QLineEdit::LineEditPanel);
      pStatusline->setFrameShadow(QLineEdit::Sunken);
      pStatusline->setFrame(TRUE);
      pStatusline->setReadOnly(TRUE);
      pPackagelayout->addWidget(pStatusline);
      pMainlayout->addLayout(pPackagelayout);
  
      // Contains all the push button controls
      pControllayout = new QHBoxLayout(0, 0, 6, "pControllayout"); 
  
      pInstallbutton = new QPushButton(this, "pInstallbutton");
      pInstallbutton->setCursor(QCursor(13));
      pInstallbutton->setText(trUtf8("&Install"));
      pInstallbutton->setFlat(FALSE);
      pControllayout->addWidget(pInstallbutton);
  
      pDeletebutton = new QPushButton(this, "pDeletebutton");
      pDeletebutton->setCursor(QCursor(13));
      pDeletebutton->setText(trUtf8("&Delete"));
      pControllayout->addWidget(pDeletebutton);
  
      pVerifybutton = new QPushButton(this, "VerifyButton");
      pVerifybutton->setCursor(QCursor(13));
      pVerifybutton->setText(trUtf8("&Verify"));
      pControllayout->addWidget(pVerifybutton);
  
      pCommitbutton = new QPushButton(this, "pCommitbutton");
      pCommitbutton->setPaletteBackgroundColor(QColor(186, 156, 144));
      pCommitbutton->setCursor(QCursor(13));
      pCommitbutton->setText(trUtf8("&Commit"));
      pControllayout->addWidget(pCommitbutton);
      pMainlayout->addLayout(pControllayout);
      pTitraqformlayout->addLayout(pMainlayout);
  
      init(); // signals and slots connections
  }
  
  //
  // Destroy the object and free any allocated resources
  //
  Titraqform::~Titraqform()
  {
      // Qt deletes child widgets for us
  }
  Index: ossp-pkg/titraq/titraq.h
  ============================================================
  $ cvs update -p -r1.1 titraq.h
  #ifndef OPKGFORM_H
  #define OPKGFORM_H
  
  #include <qvariant.h>
  #include <qdialog.h>
  class QVBoxLayout; 
  class QHBoxLayout; 
  class QGridLayout; 
  class QLineEdit;
  class QPushButton;
  class QTable;
  
  class Titraqform : public QDialog
  { 
      Q_OBJECT
  
  public:
      Titraqform(QWidget *pParent = 0, const char *kszName = 0,
          bool bModal = FALSE, WFlags Flags = 0);
      ~Titraqform();
  
      QTable *pMaintable;
      QLineEdit *pStatusline;
      QPushButton *pInstallbutton;
      QPushButton *pDeletebutton;
      QPushButton *pVerifybutton;
      QPushButton *pCommitbutton;
  
  protected slots:
      virtual void init();
  
  protected:
      QVBoxLayout *pTitraqformlayout;
      QVBoxLayout *pMainlayout;
      QVBoxLayout *pPackagelayout;
      QHBoxLayout *pControllayout;
  };
  
  #endif // OPKGFORM_H

From ossp-cvs-owner@ossp.org  Fri Nov  8 13:34:05 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A0A647648D; Fri,  8 Nov 2002 13:34:05 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq .cvsignore Makefile.in
Message-Id: <20021108123405.A0A647648D@mail.ossp.org>
Date: Fri,  8 Nov 2002 13:34:05 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   08-Nov-2002 13:34:05
  Branch: HEAD                             Handle: 2002110812340500

  Added files:
    ossp-pkg/titraq         .cvsignore
  Modified files:
    ossp-pkg/titraq         Makefile.in

  Log:
    Fix Makefile tabs and add ignore file.

  Summary:
    Revision    Changes     Path
    1.1         +13 -0      ossp-pkg/titraq/.cvsignore
    1.5         +2  -2      ossp-pkg/titraq/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  Makefile
  ac_config.h
  ac_config.h.in
  ac_config.h.in~
  configure
  configure.lineno
  config.log
  config.status
  moc_titraq.cpp
  titraq
  titraq.1
  titraq.conf.5
  shtool
  Index: ossp-pkg/titraq/Makefile.in
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 Makefile.in
  --- ossp-pkg/titraq/Makefile.in	8 Nov 2002 12:21:34 -0000	1.4
  +++ ossp-pkg/titraq/Makefile.in	8 Nov 2002 12:34:05 -0000	1.5
  @@ -134,8 +134,8 @@
   
   clean:
   	$(RM) $(TARGET_PROGS) $(OBJS) $(MOC_OBJ)
  -    $(RM) titraq.conf.5 titraq.1
  -    $(RM) titraq_pcre.tab *.core
  +	$(RM) titraq.conf.5 titraq.1
  +	$(RM) titraq_pcre.tab *.core
   
   distclean: clean
   	$(RM) config.log config.status config.cache # Generated by ./configure

From ossp-cvs-owner@ossp.org  Fri Nov  8 13:38:40 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 308297648D; Fri,  8 Nov 2002 13:38:40 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog pth_high.c
Message-Id: <20021108123840.308297648D@mail.ossp.org>
Date: Fri,  8 Nov 2002 13:38:40 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Nov-2002 13:38:40
  Branch: HEAD                             Handle: 2002110812383900

  Modified files:
    ossp-pkg/pth            ChangeLog pth_high.c

  Log:
    Fix poll(2) semantics: remove POLLRDNORM from polling
    result if POLLHUP is detected.
    
    Hint by: Paolo Bonzini <bonzini@gnu.org>

  Summary:
    Revision    Changes     Path
    1.593       +4  -0      ossp-pkg/pth/ChangeLog
    1.100       +1  -0      ossp-pkg/pth/pth_high.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.592 -r1.593 ChangeLog
  --- ossp-pkg/pth/ChangeLog	8 Nov 2002 11:32:17 -0000	1.592
  +++ ossp-pkg/pth/ChangeLog	8 Nov 2002 12:38:39 -0000	1.593
  @@ -21,6 +21,10 @@
                     
     Changes between 2.0b0 and 2.0b1 (07-Nov-2002 to xx-Nov-2002)
   
  +   *) Fix poll(2) semantics: remove POLLRDNORM from polling
  +      result if POLLHUP is detected.
  +      [Paolo Bonzini <bonzini@gnu.org>]
  +
      *) Updated PORTING file to include community feedback from
         the last months.
         [Ralf S. Engelschall]
  Index: ossp-pkg/pth/pth_high.c
  ============================================================
  $ cvs diff -u -r1.99 -r1.100 pth_high.c
  --- ossp-pkg/pth/pth_high.c	7 Nov 2002 15:21:06 -0000	1.99
  +++ ossp-pkg/pth/pth_high.c	8 Nov 2002 12:38:39 -0000	1.100
  @@ -541,6 +541,7 @@
                       if (   errno == ESHUTDOWN    || errno == ECONNRESET
                           || errno == ECONNABORTED || errno == ENETRESET) {
                           pfd[i].revents &= ~(POLLIN);
  +                        pfd[i].revents &= ~(POLLRDNORM);
                           pfd[i].revents |= POLLHUP;
                           ok--;
                       }

From ossp-cvs-owner@ossp.org  Fri Nov  8 16:35:31 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B34087648D; Fri,  8 Nov 2002 16:35:30 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth pth_high.c
Message-Id: <20021108153530.B34087648D@mail.ossp.org>
Date: Fri,  8 Nov 2002 16:35:30 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Nov-2002 16:35:30
  Branch: HEAD                             Handle: 2002110815353000

  Modified files:
    ossp-pkg/pth            pth_high.c

  Log:
    maintain size only at a single position

  Summary:
    Revision    Changes     Path
    1.101       +1  -1      ossp-pkg/pth/pth_high.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/pth_high.c
  ============================================================
  $ cvs diff -u -r1.100 -r1.101 pth_high.c
  --- ossp-pkg/pth/pth_high.c	8 Nov 2002 12:38:39 -0000	1.100
  +++ ossp-pkg/pth/pth_high.c	8 Nov 2002 15:35:30 -0000	1.101
  @@ -537,7 +537,7 @@
                       pfd[i].revents |= POLLRDNORM;
                   ok++;
                   /* support for POLLHUP */
  -                if (recv(pfd[i].fd, data, 64, MSG_PEEK) == -1) {
  +                if (recv(pfd[i].fd, data, sizeof(data), MSG_PEEK) == -1) {
                       if (   errno == ESHUTDOWN    || errno == ECONNRESET
                           || errno == ECONNABORTED || errno == ENETRESET) {
                           pfd[i].revents &= ~(POLLIN);

From ossp-cvs-owner@ossp.org  Fri Nov  8 17:05:57 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CCAB97648D; Fri,  8 Nov 2002 17:05:55 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog pth.h.in pth.pod pth_syscall.c
Message-Id: <20021108160555.CCAB97648D@mail.ossp.org>
Date: Fri,  8 Nov 2002 17:05:55 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Nov-2002 17:05:55
  Branch: HEAD                             Handle: 2002110816055401

  Modified files:
    ossp-pkg/pth            ChangeLog pth.h.in pth.pod pth_syscall.c

  Log:
    Added soft and hard syscall mapping for nanosleep(3) and
    usleep(3) functions.

  Summary:
    Revision    Changes     Path
    1.594       +4  -0      ossp-pkg/pth/ChangeLog
    1.139       +2  -0      ossp-pkg/pth/pth.h.in
    1.161       +5  -5      ossp-pkg/pth/pth.pod
    1.28        +47 -17     ossp-pkg/pth/pth_syscall.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.593 -r1.594 ChangeLog
  --- ossp-pkg/pth/ChangeLog	8 Nov 2002 12:38:39 -0000	1.593
  +++ ossp-pkg/pth/ChangeLog	8 Nov 2002 16:05:54 -0000	1.594
  @@ -21,6 +21,10 @@
                     
     Changes between 2.0b0 and 2.0b1 (07-Nov-2002 to xx-Nov-2002)
   
  +   *) Added soft and hard syscall mapping for nanosleep(3) and
  +      usleep(3) functions. 
  +      [Ralf S. Engelschall]
  +
      *) Fix poll(2) semantics: remove POLLRDNORM from polling
         result if POLLHUP is detected.
         [Paolo Bonzini <bonzini@gnu.org>]
  Index: ossp-pkg/pth/pth.h.in
  ============================================================
  $ cvs diff -u -r1.138 -r1.139 pth.h.in
  --- ossp-pkg/pth/pth.h.in	5 Nov 2002 19:39:09 -0000	1.138
  +++ ossp-pkg/pth/pth.h.in	8 Nov 2002 16:05:54 -0000	1.139
  @@ -551,6 +551,8 @@
   #define fork          pth_fork
   #define waitpid       pth_waitpid
   #define system        pth_system
  +#define nanosleep     pth_nanosleep
  +#define usleep        pth_usleep
   #define sleep         pth_sleep
   #define sigprocmask   pth_sigmask
   #define sigwait       pth_sigwait
  Index: ossp-pkg/pth/pth.pod
  ============================================================
  $ cvs diff -u -r1.160 -r1.161 pth.pod
  --- ossp-pkg/pth/pth.pod	5 Nov 2002 19:39:09 -0000	1.160
  +++ ossp-pkg/pth/pth.pod	8 Nov 2002 16:05:55 -0000	1.161
  @@ -2267,9 +2267,9 @@
   building B<Pth> with C<--enable-syscall-soft>. This then triggers some
   C<#define>'s in the C<pth.h> header which map for instance read(3) to
   pth_read(3), etc. Currently the following functions are mapped: fork(2),
  -sleep(3), sigwait(3), waitpid(2), system(3), select(2), poll(2),
  -connect(2), accept(2), read(2), write(2), recv(2), send(2), recvfrom(2),
  -sendto(2).
  +nanosleep(3), usleep(3), sleep(3), sigwait(3), waitpid(2), system(3),
  +select(2), poll(2), connect(2), accept(2), read(2), write(2), recv(2),
  +send(2), recvfrom(2), sendto(2).
   
   The drawback of this approach is just that really all source files
   of the application where these function calls occur have to include
  @@ -2284,8 +2284,8 @@
   C<--enable-syscall-hard>. This then builds wrapper functions (for instances
   read(3)) into the B<Pth> library which internally call the real B<Pth>
   replacement functions (pth_read(3)). Currently the following functions
  -are mapped: fork(2), sleep(3), waitpid(2), system(3), select(2),
  -poll(2), connect(2), accept(2), read(2), write(2).
  +are mapped: fork(2), nanosleep(3), usleep(3), sleep(3), waitpid(2),
  +system(3), select(2), poll(2), connect(2), accept(2), read(2), write(2).
   
   The drawback of this approach is that it depends on syscall(2) interface
   and prototype conflicts can occur while building the wrapper functions
  Index: ossp-pkg/pth/pth_syscall.c
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 pth_syscall.c
  --- ossp-pkg/pth/pth_syscall.c	3 Nov 2002 16:53:27 -0000	1.27
  +++ ossp-pkg/pth/pth_syscall.c	8 Nov 2002 16:05:55 -0000	1.28
  @@ -37,6 +37,8 @@
   #define fork          __pth_sys_fork
   #define waitpid       __pth_sys_waitpid
   #define system        __pth_sys_system
  +#define nanosleep     __pth_sys_nanosleep
  +#define usleep        __pth_sys_usleep
   #define sleep         __pth_sys_sleep
   #define sigprocmask   __pth_sys_sigmask
   #define sigwait       __pth_sys_sigwait
  @@ -86,6 +88,8 @@
   #undef fork
   #undef waitpid
   #undef system
  +#undef nanosleep
  +#undef usleep
   #undef sleep
   #undef sigprocmask
   #undef sigwait
  @@ -134,26 +138,30 @@
   #define PTH_SCF_fork          0
   #define PTH_SCF_waitpid       1
   #define PTH_SCF_system        2
  -#define PTH_SCF_sleep         3
  -#define PTH_SCF_sigprocmask   4
  -#define PTH_SCF_sigwait       5
  -#define PTH_SCF_select        6
  -#define PTH_SCF_poll          7
  -#define PTH_SCF_connect       8
  -#define PTH_SCF_accept        9
  -#define PTH_SCF_read          10
  -#define PTH_SCF_write         11
  -#define PTH_SCF_readv         12
  -#define PTH_SCF_writev        13
  -#define PTH_SCF_recv          14
  -#define PTH_SCF_send          15
  -#define PTH_SCF_recvfrom      16
  -#define PTH_SCF_sendto        17
  -#define PTH_SCF_pread         18
  -#define PTH_SCF_pwrite        19
  +#define PTH_SCF_nanosleep     3
  +#define PTH_SCF_usleep        4
  +#define PTH_SCF_sleep         5
  +#define PTH_SCF_sigprocmask   6
  +#define PTH_SCF_sigwait       7
  +#define PTH_SCF_select        8
  +#define PTH_SCF_poll          9
  +#define PTH_SCF_connect       10
  +#define PTH_SCF_accept        11
  +#define PTH_SCF_read          12
  +#define PTH_SCF_write         13
  +#define PTH_SCF_readv         14
  +#define PTH_SCF_writev        15
  +#define PTH_SCF_recv          16
  +#define PTH_SCF_send          17
  +#define PTH_SCF_recvfrom      18
  +#define PTH_SCF_sendto        19
  +#define PTH_SCF_pread         20
  +#define PTH_SCF_pwrite        21
       { "fork",        NULL },
       { "waitpid",     NULL },
       { "system",      NULL },
  +    { "nanosleep",   NULL },
  +    { "usleep",      NULL },
       { "sleep",       NULL },
       { "sigprocmask", NULL },
       { "sigwait",     NULL },
  @@ -300,6 +308,28 @@
       else PTH_SYSCALL_ERROR(-1, ENOSYS, "fork");
   #endif
   }
  +
  +/* ==== Pth hard syscall wrapper for nanosleep(3) ==== */
  +int nanosleep(const struct timespec *, struct timespec *);
  +int nanosleep(const struct timespec *rqtp, struct timespec *rmtp)
  +{
  +    /* external entry point for application */
  +    pth_implicit_init();
  +    return pth_nanosleep(rqtp, rmtp);
  +}
  +/* NOTICE: internally fully emulated, so still no
  +   internal exit point pth_sc_nanosleep necessary! */
  +
  +/* ==== Pth hard syscall wrapper for usleep(3) ==== */
  +int usleep(unsigned int);
  +int usleep(unsigned int sec)
  +{
  +    /* external entry point for application */
  +    pth_implicit_init();
  +    return pth_usleep(sec);
  +}
  +/* NOTICE: internally fully emulated, so still no
  +   internal exit point pth_sc_usleep necessary! */
   
   /* ==== Pth hard syscall wrapper for sleep(3) ==== */
   unsigned int sleep(unsigned int);

From ossp-cvs-owner@ossp.org  Fri Nov  8 17:17:47 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A41E2764E9; Fri,  8 Nov 2002 17:17:47 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog pth_sched.c
Message-Id: <20021108161747.A41E2764E9@mail.ossp.org>
Date: Fri,  8 Nov 2002 17:17:47 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Nov-2002 17:17:47
  Branch: HEAD                             Handle: 2002110816174700

  Modified files:
    ossp-pkg/pth            ChangeLog pth_sched.c

  Log:
    Make sure that in the even manager a polling-only select(2) call uses
    a correctly initialized timeout parameter. Because SUSv3 says: "Upon
    successful completion, the select() function may modify the object
    pointed to by the timeout argument."

  Summary:
    Revision    Changes     Path
    1.595       +4  -0      ossp-pkg/pth/ChangeLog
    1.86        +2  -3      ossp-pkg/pth/pth_sched.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.594 -r1.595 ChangeLog
  --- ossp-pkg/pth/ChangeLog	8 Nov 2002 16:05:54 -0000	1.594
  +++ ossp-pkg/pth/ChangeLog	8 Nov 2002 16:17:47 -0000	1.595
  @@ -21,6 +21,10 @@
                     
     Changes between 2.0b0 and 2.0b1 (07-Nov-2002 to xx-Nov-2002)
   
  +   *) Make sure that in the even manager a polling-only select(2) call
  +      uses a correctly initialized timeout parameter.
  +      [Ralf S. Engelschall]
  +
      *) Added soft and hard syscall mapping for nanosleep(3) and
         usleep(3) functions. 
         [Ralf S. Engelschall]
  Index: ossp-pkg/pth/pth_sched.c
  ============================================================
  $ cvs diff -u -r1.85 -r1.86 pth_sched.c
  --- ossp-pkg/pth/pth_sched.c	7 Nov 2002 15:38:40 -0000	1.85
  +++ ossp-pkg/pth/pth_sched.c	8 Nov 2002 16:17:47 -0000	1.86
  @@ -655,9 +655,6 @@
          additionally if a thread has one occurred event, we move it from the
          waiting queue to the ready queue */
   
  -    /* pre-configure a raw polling timeout for later checks (see below) */
  -    pth_time_set(&delay, PTH_TIME_ZERO);
  -
       /* for all threads in the waiting queue... */
       t = pth_pqueue_head(&pth_WQ);
       while (t != NULL) {
  @@ -693,6 +690,7 @@
                                   FD_SET(ev->ev_args.FD.fd, &wfds);
                               if (ev->ev_goal & PTH_UNTIL_FD_EXCEPTION)
                                   FD_SET(ev->ev_args.FD.fd, &efds);
  +                            pth_time_set(&delay, PTH_TIME_ZERO);
                               while ((rc2 = pth_sc(select)(ev->ev_args.FD.fd+1, &rfds, &wfds, &efds, &delay)) < 0
                                      && errno == EINTR) ;
                               if (rc2 > 0) {
  @@ -748,6 +746,7 @@
                                   memcpy(&tefds, ev->ev_args.SELECT.efds, sizeof(efds));
                                   pefds = &tefds;
                               }
  +                            pth_time_set(&delay, PTH_TIME_ZERO);
                               while ((rc2 = pth_sc(select)(ev->ev_args.SELECT.nfd+1, prfds, pwfds, pefds, &delay)) < 0
                                      && errno == EINTR) ;
                               if (rc2 < 0) {

From ossp-cvs-owner@ossp.org  Fri Nov  8 17:20:16 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2E88A764E9; Fri,  8 Nov 2002 17:20:16 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth pth_high.c
Message-Id: <20021108162016.2E88A764E9@mail.ossp.org>
Date: Fri,  8 Nov 2002 17:20:16 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Nov-2002 17:20:16
  Branch: HEAD                             Handle: 2002110816201500

  Modified files:
    ossp-pkg/pth            pth_high.c

  Log:
    cosmetics: be conistent with pth_select_ev parameter names

  Summary:
    Revision    Changes     Path
    1.102       +3  -3      ossp-pkg/pth/pth_high.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/pth_high.c
  ============================================================
  $ cvs diff -u -r1.101 -r1.102 pth_high.c
  --- ossp-pkg/pth/pth_high.c	8 Nov 2002 15:35:30 -0000	1.101
  +++ ossp-pkg/pth/pth_high.c	8 Nov 2002 16:20:15 -0000	1.102
  @@ -273,10 +273,10 @@
   }
   
   /* Pth variant of select(2) */
  -int pth_select(int nfds, fd_set *readfds, fd_set *writefds,
  -               fd_set *exceptfds, struct timeval *timeout)
  +int pth_select(int nfds, fd_set *rfds, fd_set *wfds,
  +               fd_set *efds, struct timeval *timeout)
   {
  -    return pth_select_ev(nfds, readfds, writefds, exceptfds, timeout, NULL);
  +    return pth_select_ev(nfds, rfds, wfds, efds, timeout, NULL);
   }
   
   /* Pth variant of select(2) with extra events */

From ossp-cvs-owner@ossp.org  Fri Nov  8 20:12:14 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 88DA07648D; Fri,  8 Nov 2002 20:12:14 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog pth_high.c
Message-Id: <20021108191214.88DA07648D@mail.ossp.org>
Date: Fri,  8 Nov 2002 20:12:14 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Nov-2002 20:12:14
  Branch: HEAD                             Handle: 2002110819121300

  Modified files:
    ossp-pkg/pth            ChangeLog pth_high.c

  Log:
    Make pth_select(2) more compliant to POSIX.1-2001/SUSv3 select(2).
    This especially fixes the polling-only situation (timeout = (0,0)).

  Summary:
    Revision    Changes     Path
    1.596       +4  -0      ossp-pkg/pth/ChangeLog
    1.103       +46 -44     ossp-pkg/pth/pth_high.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.595 -r1.596 ChangeLog
  --- ossp-pkg/pth/ChangeLog	8 Nov 2002 16:17:47 -0000	1.595
  +++ ossp-pkg/pth/ChangeLog	8 Nov 2002 19:12:13 -0000	1.596
  @@ -21,6 +21,10 @@
                     
     Changes between 2.0b0 and 2.0b1 (07-Nov-2002 to xx-Nov-2002)
   
  +   *) Make pth_select(2) more compliant to POSIX.1-2001/SUSv3 select(2).
  +      This especially fixes the polling-only situation (timeout = (0,0)).
  +      [Ralf S. Engelschall]
  +
      *) Make sure that in the even manager a polling-only select(2) call
         uses a correctly initialized timeout parameter.
         [Ralf S. Engelschall]
  Index: ossp-pkg/pth/pth_high.c
  ============================================================
  $ cvs diff -u -r1.102 -r1.103 pth_high.c
  --- ossp-pkg/pth/pth_high.c	8 Nov 2002 16:20:15 -0000	1.102
  +++ ossp-pkg/pth/pth_high.c	8 Nov 2002 19:12:13 -0000	1.103
  @@ -297,28 +297,27 @@
       pth_implicit_init();
       pth_debug2("pth_select_ev: called from thread \"%s\"", pth_current->name);
   
  -    /* POSIX compliance */
  +    /* POSIX.1-2001/SUSv3 compliance */
       if (nfd < 0 || nfd > FD_SETSIZE)
           return pth_error(-1, EINVAL);
       if (timeout != NULL) {
           if (   timeout->tv_sec  < 0
  -            || timeout->tv_sec  > 100000000 /* about 3 years */
               || timeout->tv_usec < 0
  -            || timeout->tv_usec >= 1000000  /* a full second */)
  +            || timeout->tv_usec >= 1000000 /* a full second */)
               return pth_error(-1, EINVAL);
  +        if (timeout->tv_sec > 31*24*60*60)
  +            timeout->tv_sec = 31*24*60*60;
       }
   
       /* first deal with the special situation of a plain microsecond delay */
       if (nfd == 0 && rfds == NULL && wfds == NULL && efds == NULL && timeout != NULL) {
  -        if (timeout->tv_sec < 0 || timeout->tv_usec < 0)
  -            return pth_error(-1, EINVAL);
  -        if (timeout->tv_sec == 0 && timeout->tv_usec < 500000) {
  +        if (timeout->tv_sec == 0 && timeout->tv_usec <= 10000 /* 1/100 second */) {
               /* very small delays are acceptable to be performed directly */
               while (   pth_sc(select)(0, NULL, NULL, NULL, timeout) < 0
                      && errno == EINTR) ;
           }
           else {
  -            /* larger delays have to use the scheduler */
  +            /* larger delays have to go through the scheduler */
               ev = pth_event(PTH_EVENT_TIME|PTH_MODE_STATIC, &ev_key_timeout,
                              pth_timeout(timeout->tv_sec, timeout->tv_usec));
               if (ev_extra != NULL)
  @@ -330,58 +329,57 @@
                       return pth_error(-1, EINTR);
               }
           }
  -        /* POSIX compliance */
  +        /* POSIX.1-2001/SUSv3 compliance */
           if (rfds != NULL) FD_ZERO(rfds);
           if (wfds != NULL) FD_ZERO(wfds);
           if (efds != NULL) FD_ZERO(efds);
           return 0;
       }
   
  -    /* now directly poll filedescriptor sets to avoid unneccessary
  +    /* now directly poll filedescriptor sets to avoid unnecessary
          (and resource consuming because of context switches, etc) event
          handling through the scheduler. We've to be carefully here, because not
  -       all platforms guarranty us that the sets are unmodified if an error
  -       or timeout occured. */
  +       all platforms guaranty us that the sets are unmodified if an error
  +       or timeout occurred. */
       delay.tv_sec  = 0;
       delay.tv_usec = 0;
       rtmp = NULL;
       if (rfds != NULL) {
  -        rspare = *rfds;
  +        memcpy(&rspare, rfds, sizeof(fd_set));
           rtmp = &rspare;
       }
       wtmp = NULL;
       if (wfds != NULL) {
  -        wspare = *wfds;
  +        memcpy(&wspare, wfds, sizeof(fd_set));
           wtmp = &wspare;
       }
       etmp = NULL;
       if (efds != NULL) {
  -        espare = *efds;
  +        memcpy(&espare, efds, sizeof(fd_set));
           etmp = &espare;
       }
  -    while ((rc = pth_sc(select)(nfd, rtmp, wtmp, etmp, &delay)) < 0 && errno == EINTR) ;
  -    if (rc > 0) {
  +    while ((rc = pth_sc(select)(nfd, rtmp, wtmp, etmp, &delay)) < 0
  +           && errno == EINTR)
  +        ;
  +    if (rc < 0)
  +        /* pass-through immediate error */
  +        return pth_error(-1, errno);
  +    else if (   rc > 0
  +             || (   rc == 0
  +                 && timeout != NULL
  +                 && pth_time_cmp(timeout, PTH_TIME_ZERO) == 0)) {
  +        /* pass-through immediate success */
           if (rfds != NULL)
  -            *rfds = rspare;
  +            memcpy(rfds, &rspare, sizeof(fd_set));
           if (wfds != NULL)
  -            *wfds = wspare;
  +            memcpy(wfds, &wspare, sizeof(fd_set));
           if (efds != NULL)
  -            *efds = espare;
  +            memcpy(efds, &espare, sizeof(fd_set));
           return rc;
       }
  -    if (rc == 0 && timeout != NULL) {
  -        if (pth_time_cmp(timeout, PTH_TIME_ZERO) == 0) {
  -            /* POSIX compliance */
  -            if (rfds != NULL) FD_ZERO(rfds);
  -            if (wfds != NULL) FD_ZERO(wfds);
  -            if (efds != NULL) FD_ZERO(efds);
  -            return 0;
  -        }
  -    }
  -    if (rc < 0 && (errno == EINVAL || errno == EBADF))
  -        return pth_error(-1, errno);
   
  -    /* suspend current thread until one fd is ready or the timeout occurred */
  +    /* suspend current thread until one filedescriptor
  +       is ready or the timeout occurred */
       rc = -1;
       ev = ev_select = pth_event(PTH_EVENT_SELECT|PTH_MODE_STATIC,
                                  &ev_key_select, &rc, nfd, rfds, wfds, efds);
  @@ -394,25 +392,29 @@
       if (ev_extra != NULL)
           pth_event_concat(ev, ev_extra, NULL);
       pth_wait(ev);
  +    if (ev_extra != NULL)
  +        pth_event_isolate(ev_extra);
  +    if (timeout != NULL)
  +        pth_event_isolate(ev_timeout);
  +
  +    /* select return code semantics */
  +    if (pth_event_status(ev_select) == PTH_STATUS_FAILED)
  +        return pth_error(-1, EBADF);
       selected = FALSE;
  -    pth_event_isolate(ev_select);
       if (pth_event_status(ev_select) == PTH_STATUS_OCCURRED)
           selected = TRUE;
  -    if (timeout != NULL) {
  -        pth_event_isolate(ev_timeout);
  -        if (pth_event_status(ev_timeout) == PTH_STATUS_OCCURRED) {
  -            selected = TRUE;
  -            /* POSIX compliance */
  -            if (rfds != NULL) FD_ZERO(rfds);
  -            if (wfds != NULL) FD_ZERO(wfds);
  -            if (efds != NULL) FD_ZERO(efds);
  -            rc = 0;
  -        }
  +    if (   timeout != NULL
  +        && pth_event_status(ev_timeout) == PTH_STATUS_OCCURRED) {
  +        selected = TRUE;
  +        /* POSIX.1-2001/SUSv3 compliance */
  +        if (rfds != NULL) FD_ZERO(rfds);
  +        if (wfds != NULL) FD_ZERO(wfds);
  +        if (efds != NULL) FD_ZERO(efds);
  +        rc = 0;
       }
  -    if (pth_event_status(ev_select) == PTH_STATUS_FAILED)
  -        return pth_error(-1, EBADF);
       if (ev_extra != NULL && !selected)
           return pth_error(-1, EINTR);
  +
       return rc;
   }
   

From ossp-cvs-owner@ossp.org  Fri Nov  8 20:46:42 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9258F764E9; Fri,  8 Nov 2002 20:46:42 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio.c
Message-Id: <20021108194642.9258F764E9@mail.ossp.org>
Date: Fri,  8 Nov 2002 20:46:42 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   08-Nov-2002 20:46:42
  Branch: HEAD                             Handle: 2002110819464200

  Modified files:
    ossp-pkg/sio            sio.c

  Log:
    initialize SIO_XSTREAM pointers only when stage is attached
    read-write.

  Summary:
    Revision    Changes     Path
    1.10        +12 -2      ossp-pkg/sio/sio.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 sio.c
  --- ossp-pkg/sio/sio.c	8 Nov 2002 10:34:24 -0000	1.9
  +++ ossp-pkg/sio/sio.c	8 Nov 2002 19:46:42 -0000	1.10
  @@ -207,8 +207,8 @@
       sios->writer.func  = sios->module->output;
       sios->writer.stage = sios;
   
  -    sios->reader.cross = &sios->writer;
  -    sios->writer.cross = &sios->reader;
  +    sios->reader.cross = NULL;
  +    sios->writer.cross = NULL;
   
       sios->reader.tag   = "reader";
       sios->writer.tag   = "writer";
  @@ -353,6 +353,11 @@
           ADDTAIL(&sio->writers,hd,&sios->writer);
       }
   
  +    if (rw == SIO_MODE_READWRITE) {
  +        sios->reader.cross = &sios->writer;
  +        sios->writer.cross = &sios->reader;
  +    }
  +
       sios->reader.al = sio->readers.al;
       sios->writer.al = sio->writers.al;
       sios->rw        = rw;
  @@ -389,6 +394,11 @@
           else
               /* XXX - double error handling ? */
               sios->module->closer(sio, sio->readers.al, sios->userdata);
  +    }
  +
  +    if (sios->rw == SIO_MODE_READWRITE) {
  +        sios->reader.cross = NULL;
  +        sios->writer.cross = NULL;
       }
   
       sios->writer.al = NULL;

From ossp-cvs-owner@ossp.org  Fri Nov  8 21:26:03 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 22C33764E9; Fri,  8 Nov 2002 21:26:03 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog pth_high.c
Message-Id: <20021108202603.22C33764E9@mail.ossp.org>
Date: Fri,  8 Nov 2002 21:26:03 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Nov-2002 21:26:03
  Branch: HEAD                             Handle: 2002110820260200

  Modified files:
    ossp-pkg/pth            ChangeLog pth_high.c

  Log:
    Make pth_poll(3) more compliant to POSIX.1-2001/SUSv3 poll(2).
    
    Parts submitted by: Nick Hudson <skrll@netbsd.org>

  Summary:
    Revision    Changes     Path
    1.597       +4  -1      ossp-pkg/pth/ChangeLog
    1.104       +68 -57     ossp-pkg/pth/pth_high.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.596 -r1.597 ChangeLog
  --- ossp-pkg/pth/ChangeLog	8 Nov 2002 19:12:13 -0000	1.596
  +++ ossp-pkg/pth/ChangeLog	8 Nov 2002 20:26:02 -0000	1.597
  @@ -21,7 +21,10 @@
                     
     Changes between 2.0b0 and 2.0b1 (07-Nov-2002 to xx-Nov-2002)
   
  -   *) Make pth_select(2) more compliant to POSIX.1-2001/SUSv3 select(2).
  +   *) Make pth_poll(3) more compliant to POSIX.1-2001/SUSv3 poll(2).
  +      [Ralf S. Engelschall, Nick Hudson <skrll@netbsd.org>]
  +
  +   *) Make pth_select(3) more compliant to POSIX.1-2001/SUSv3 select(2).
         This especially fixes the polling-only situation (timeout = (0,0)).
         [Ralf S. Engelschall]
   
  Index: ossp-pkg/pth/pth_high.c
  ============================================================
  $ cvs diff -u -r1.103 -r1.104 pth_high.c
  --- ossp-pkg/pth/pth_high.c	8 Nov 2002 19:12:13 -0000	1.103
  +++ ossp-pkg/pth/pth_high.c	8 Nov 2002 20:26:02 -0000	1.104
  @@ -461,18 +461,20 @@
              INTERNALLY THE SCHEDULER IS ONLY select(2) BASED!! */
   int pth_poll_ev(struct pollfd *pfd, nfds_t nfd, int timeout, pth_event_t ev_extra)
   {
  -    fd_set rfds, wfds, efds;
  +    fd_set rfds, wfds, efds, xfds;
       struct timeval tv, *ptv;
  -    int maxfd, rc, ok;
  +    int maxfd, rc, n;
       unsigned int i;
       char data[64];
   
       pth_implicit_init();
       pth_debug2("pth_poll_ev: called from thread \"%s\"", pth_current->name);
   
  -    /* poll(2) semantics */
  +    /* argument sanity checks */
       if (pfd == NULL)
           return pth_error(-1, EFAULT);
  +    if (nfd < 0 || nfd > FD_SETSIZE)
  +        return pth_error(-1, EINVAL);
   
       /* convert timeout number into a timeval structure */
       ptv = &tv;
  @@ -487,7 +489,7 @@
       }
       else if (timeout > 0) {
           /* return after timeout */
  -        ptv->tv_sec  = timeout / 1000;
  +        ptv->tv_sec  = (timeout / 1000);
           ptv->tv_usec = (timeout % 1000) * 1000;
       }
       else
  @@ -498,14 +500,19 @@
       FD_ZERO(&rfds);
       FD_ZERO(&wfds);
       FD_ZERO(&efds);
  -    for(i = 0; i < nfd; i++) {
  -        if (!pth_util_fd_valid(pfd[i].fd))
  -            return pth_error(-1, EBADF);
  +    FD_ZERO(&xfds);
  +    for (i = 0; i < nfd; i++) {
  +        /* convert into fd_sets but remember that BSD select(2) says
  +           "the only exceptional condition detectable is out-of-band
  +           data received on a socket", hence we push POLLWRBAND events
  +           onto wfds instead of efds. Additionally, remember invalid
  +           filedescriptors in an extra fd_set xfds. */
  +        if (!pth_util_fd_valid(pfd[i].fd)) {
  +            FD_SET(pfd[i].fd, &xfds);
  +            continue;
  +        }
           if (pfd[i].events & (POLLIN|POLLRDNORM))
               FD_SET(pfd[i].fd, &rfds);
  -        /* see select(2): "the only exceptional condition detectable
  -           is out-of-band data received on a socket", hence we push
  -           POLLWRBAND events onto wfds instead of efds. */
           if (pfd[i].events & (POLLOUT|POLLWRNORM|POLLWRBAND))
               FD_SET(pfd[i].fd, &wfds);
           if (pfd[i].events & (POLLPRI|POLLRDBAND))
  @@ -516,60 +523,64 @@
                                    POLLWRNORM|POLLWRBAND)))
               maxfd = pfd[i].fd;
       }
  -    if (maxfd == -1)
  -        return pth_error(-1, EINVAL);
   
  -    /* examine fd sets */
  -    rc = pth_select_ev(maxfd+1, &rfds, &wfds, &efds, ptv, ev_extra);
  +    /* examine fd sets with pth_select(3) */
  +    rc = -1;
  +    if (maxfd != -1) {
  +        rc = pth_select_ev(maxfd+1, &rfds, &wfds, &efds, ptv, ev_extra);
  +        if (rc < 0)
  +            return pth_error(-1, errno);
  +        else if (rc == 0)
  +            return 0;
  +    }
   
  -    /* establish results */
  -    if (rc > 0) {
  -        rc = 0;
  -        for (i = 0; i < nfd; i++) {
  -            ok = 0;
  -            pfd[i].revents = 0;
  -            if (pfd[i].fd < 0) {
  +    /* POSIX.1-2001/SUSv3 compliant result establishment */
  +    n = 0;
  +    for (i = 0; i < nfd; i++) {
  +        pfd[i].revents = 0;
  +        if (FD_ISSET(pfd[i].fd, &xfds)) {
  +            if (pfd[i].fd >= 0) {
                   pfd[i].revents |= POLLNVAL;
  -                continue;
  -            }
  -            if (FD_ISSET(pfd[i].fd, &rfds)) {
  -                if (pfd[i].events & POLLIN)
  -                    pfd[i].revents |= POLLIN;
  -                if (pfd[i].events & POLLRDNORM)
  -                    pfd[i].revents |= POLLRDNORM;
  -                ok++;
  -                /* support for POLLHUP */
  -                if (recv(pfd[i].fd, data, sizeof(data), MSG_PEEK) == -1) {
  -                    if (   errno == ESHUTDOWN    || errno == ECONNRESET
  -                        || errno == ECONNABORTED || errno == ENETRESET) {
  -                        pfd[i].revents &= ~(POLLIN);
  -                        pfd[i].revents &= ~(POLLRDNORM);
  -                        pfd[i].revents |= POLLHUP;
  -                        ok--;
  -                    }
  -                }
  +                n++;
               }
  -            if (FD_ISSET(pfd[i].fd, &wfds)) {
  -                if (pfd[i].events & POLLOUT)
  -                    pfd[i].revents |= POLLOUT;
  -                if (pfd[i].events & POLLWRNORM)
  -                    pfd[i].revents |= POLLWRNORM;
  -                if (pfd[i].events & POLLWRBAND)
  -                    pfd[i].revents |= POLLWRBAND;
  -                ok++;
  -            }
  -            if (FD_ISSET(pfd[i].fd, &efds)) {
  -                if (pfd[i].events & POLLPRI)
  -                    pfd[i].revents |= POLLPRI;
  -                if (pfd[i].events & POLLRDBAND)
  -                    pfd[i].revents |= POLLRDBAND;
  -                ok++;
  +            continue;
  +        }
  +        if (maxfd == -1)
  +            continue;
  +        if (FD_ISSET(pfd[i].fd, &rfds)) {
  +            if (pfd[i].events & POLLIN)
  +                pfd[i].revents |= POLLIN;
  +            if (pfd[i].events & POLLRDNORM)
  +                pfd[i].revents |= POLLRDNORM;
  +            n++;
  +            /* support for POLLHUP */
  +            if (   recv(pfd[i].fd, data, sizeof(data), MSG_PEEK) == -1
  +                && (   errno == ESHUTDOWN    || errno == ECONNRESET
  +                    || errno == ECONNABORTED || errno == ENETRESET    )) {
  +                pfd[i].revents &= ~(POLLIN);
  +                pfd[i].revents &= ~(POLLRDNORM);
  +                pfd[i].revents |= POLLHUP;
               }
  -            if (ok)
  -                rc++;
  +        }
  +        else if (FD_ISSET(pfd[i].fd, &wfds)) {
  +            if (pfd[i].events & POLLOUT)
  +                pfd[i].revents |= POLLOUT;
  +            if (pfd[i].events & POLLWRNORM)
  +                pfd[i].revents |= POLLWRNORM;
  +            if (pfd[i].events & POLLWRBAND)
  +                pfd[i].revents |= POLLWRBAND;
  +            n++;
  +        }
  +        else if (FD_ISSET(pfd[i].fd, &efds)) {
  +            if (pfd[i].events & POLLPRI)
  +                pfd[i].revents |= POLLPRI;
  +            if (pfd[i].events & POLLRDBAND)
  +                pfd[i].revents |= POLLRDBAND;
  +            n++;
           }
       }
  -    return rc;
  +
  +    return n;
   }
   
   /* Pth variant of connect(2) */

From ossp-cvs-owner@ossp.org  Fri Nov  8 21:27:28 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A365C764E9; Fri,  8 Nov 2002 21:27:28 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog README pth_vers.c
Message-Id: <20021108202728.A365C764E9@mail.ossp.org>
Date: Fri,  8 Nov 2002 21:27:28 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Nov-2002 21:27:28
  Branch: HEAD                             Handle: 2002110820272800

  Modified files:
    ossp-pkg/pth            ChangeLog README pth_vers.c

  Log:
    update version for release

  Summary:
    Revision    Changes     Path
    1.598       +1  -1      ossp-pkg/pth/ChangeLog
    1.198       +1  -1      ossp-pkg/pth/README
    1.143       +9  -9      ossp-pkg/pth/pth_vers.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.597 -r1.598 ChangeLog
  --- ossp-pkg/pth/ChangeLog	8 Nov 2002 20:26:02 -0000	1.597
  +++ ossp-pkg/pth/ChangeLog	8 Nov 2002 20:27:28 -0000	1.598
  @@ -19,7 +19,7 @@
        / __/ | |_| |
     __|_____(_)___/_________________________________________________________
                     
  -  Changes between 2.0b0 and 2.0b1 (07-Nov-2002 to xx-Nov-2002)
  +  Changes between 2.0b0 and 2.0b1 (07-Nov-2002 to 08-Nov-2002)
   
      *) Make pth_poll(3) more compliant to POSIX.1-2001/SUSv3 poll(2).
         [Ralf S. Engelschall, Nick Hudson <skrll@netbsd.org>]
  Index: ossp-pkg/pth/README
  ============================================================
  $ cvs diff -u -r1.197 -r1.198 README
  --- ossp-pkg/pth/README	7 Nov 2002 15:54:07 -0000	1.197
  +++ ossp-pkg/pth/README	8 Nov 2002 20:27:28 -0000	1.198
  @@ -5,7 +5,7 @@
     |_|    \__|_| |_|                     the impossible.''
   
     GNU Pth - The GNU Portable Threads
  -  Version 2.0b0 (07-Nov-2002)
  +  Version 2.0b1 (08-Nov-2002)
   
     ABSTRACT
   
  Index: ossp-pkg/pth/pth_vers.c
  ============================================================
  $ cvs diff -u -r1.142 -r1.143 pth_vers.c
  --- ossp-pkg/pth/pth_vers.c	7 Nov 2002 15:54:07 -0000	1.142
  +++ ossp-pkg/pth/pth_vers.c	8 Nov 2002 20:27:28 -0000	1.143
  @@ -8,7 +8,7 @@
   #ifndef _PTH_VERS_C_
   #define _PTH_VERS_C_
   
  -#define PTH_INTERNAL_VERSION 0x200100
  +#define PTH_INTERNAL_VERSION 0x200101
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _PTH_VERS_C_AS_HEADER_
   
   pth_internal_version_t pth_internal_version = {
  -    0x200100,
  -    "2.0b0",
  -    "2.0b0 (07-Nov-2002)",
  -    "This is GNU Pth, Version 2.0b0 (07-Nov-2002)",
  -    "GNU Pth 2.0b0 (07-Nov-2002)",
  -    "GNU Pth/2.0b0",
  -    "@(#)GNU Pth 2.0b0 (07-Nov-2002)",
  -    "$Id: GNU Pth 2.0b0 (07-Nov-2002) $"
  +    0x200101,
  +    "2.0b1",
  +    "2.0b1 (08-Nov-2002)",
  +    "This is GNU Pth, Version 2.0b1 (08-Nov-2002)",
  +    "GNU Pth 2.0b1 (08-Nov-2002)",
  +    "GNU Pth/2.0b1",
  +    "@(#)GNU Pth 2.0b1 (08-Nov-2002)",
  +    "$Id: GNU Pth 2.0b1 (08-Nov-2002) $"
   };
   
   #endif /* _PTH_VERS_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Fri Nov  8 21:31:25 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C2ADF7648D; Fri,  8 Nov 2002 21:31:25 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new news.txt ossp-web/pkg/lib index.wml ossp-web/...
Message-Id: <20021108203125.C2ADF7648D@mail.ossp.org>
Date: Fri,  8 Nov 2002 21:31:25 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   08-Nov-2002 21:31:25
  Branch: HEAD                             Handle: 2002110820312401

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/pth    index.wml

  Log:
    release GNU Pth 2.0b1

  Summary:
    Revision    Changes     Path
    1.33        +1  -0      ossp-web/new/news.txt
    1.35        +1  -1      ossp-web/pkg/lib/index.wml
    1.7         +1  -1      ossp-web/pkg/lib/pth/index.wml
  ____________________________________________________________________________

  Index: ossp-web/new/news.txt
  ============================================================
  $ cvs diff -u -r1.32 -r1.33 news.txt
  --- ossp-web/new/news.txt	7 Nov 2002 16:11:43 -0000	1.32
  +++ ossp-web/new/news.txt	8 Nov 2002 20:31:24 -0000	1.33
  @@ -1,3 +1,4 @@
  +08-Nov-2002: Released L<GNU pth> 2.0b1
   07-Nov-2002: Released L<GNU pth> 2.0b0
   07-Nov-2002: Released L<OSSP sa> 1.0.1
   02-Nov-2002: Released T<OSSP shtool> 1.6.2
  Index: ossp-web/pkg/lib/index.wml
  ============================================================
  $ cvs diff -u -r1.34 -r1.35 index.wml
  --- ossp-web/pkg/lib/index.wml	7 Nov 2002 16:11:43 -0000	1.34
  +++ ossp-web/pkg/lib/index.wml	8 Nov 2002 20:31:24 -0000	1.35
  @@ -15,7 +15,7 @@
   <pkg_list>
     <pkg_item name="pth" longname="GNU pth" type="lib"
               desc="Portable Threads"
  -			done=100 stable=1.4.1 unstable=2.0b0>
  +			done=100 stable=1.4.1 unstable=2.0b1>
     <pkg_item name="mm" longname="OSSP mm" type="lib"
               desc="Shared Memory Allocation"
   			done=100 stable=1.2.1 unstable=none>
  Index: ossp-web/pkg/lib/pth/index.wml
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 index.wml
  --- ossp-web/pkg/lib/pth/index.wml	7 Nov 2002 16:11:44 -0000	1.6
  +++ ossp-web/pkg/lib/pth/index.wml	8 Nov 2002 20:31:25 -0000	1.7
  @@ -55,7 +55,7 @@
   <pkg_status
       name="pth" assign="rse"
       stable="1.4.1" stable_date="27-Jan-2002"
  -    unstable="2.0b0" unstable_date="07-Nov-2002"
  +    unstable="2.0b1" unstable_date="08-Nov-2002"
   	done=100>
   
   <h2>Source</h2>

From ossp-cvs-owner@ossp.org  Fri Nov  8 21:37:13 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4E80E7648D; Fri,  8 Nov 2002 21:37:13 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/pth index.wml
Message-Id: <20021108203713.4E80E7648D@mail.ossp.org>
Date: Fri,  8 Nov 2002 21:37:13 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   08-Nov-2002 21:37:13
  Branch: HEAD                             Handle: 2002110820371200

  Modified files:
    ossp-web/pkg/lib/pth    index.wml

  Log:
    fix for 2.0b1

  Summary:
    Revision    Changes     Path
    1.8         +1  -1      ossp-web/pkg/lib/pth/index.wml
  ____________________________________________________________________________

  Index: ossp-web/pkg/lib/pth/index.wml
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 index.wml
  --- ossp-web/pkg/lib/pth/index.wml	8 Nov 2002 20:31:25 -0000	1.7
  +++ ossp-web/pkg/lib/pth/index.wml	8 Nov 2002 20:37:12 -0000	1.8
  @@ -65,7 +65,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/pth/
       directory=$(FTP_ROOT_DIR)/pkg/lib/pth/
       files="pth-*.tar.gz" 
  -	stable="pth-1\.4\.1\.tar\.gz" unstable="pth-2\.0b0\.tar\.gz">
  +	stable="pth-1\.4\.1\.tar\.gz" unstable="pth-2\.0b1\.tar\.gz">
   	
   <h2>Donation</h2>
   

From ossp-cvs-owner@ossp.org  Sat Nov  9 09:07:27 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F1AF2764E9; Sat,  9 Nov 2002 09:07:26 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth NEWS
Message-Id: <20021109080726.F1AF2764E9@mail.ossp.org>
Date: Sat,  9 Nov 2002 09:07:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Nov-2002 09:07:26
  Branch: HEAD                             Handle: 2002110908072600

  Modified files:
    ossp-pkg/pth            NEWS

  Log:
    more NEWS

  Summary:
    Revision    Changes     Path
    1.36        +5  -1      ossp-pkg/pth/NEWS
  ____________________________________________________________________________

  Index: ossp-pkg/pth/NEWS
  ============================================================
  $ cvs diff -u -r1.35 -r1.36 NEWS
  --- ossp-pkg/pth/NEWS	7 Nov 2002 16:09:23 -0000	1.35
  +++ ossp-pkg/pth/NEWS	9 Nov 2002 08:07:26 -0000	1.36
  @@ -14,6 +14,10 @@
   
     Changes between 1.4 and 2.0 (24-Mar-2001 to xx-Nov-2002)
   
  +   *) Make pth_poll(3) more compliant to POSIX.1-2001/SUSv3 poll(2).
  +   *) Make pth_select(3) more compliant to POSIX.1-2001/SUSv3 select(2).
  +   *) Replaced pth_event_occurred() with pth_event_status().
  +   *) Add Autoconf option --with-fdsetsize=NUM for enlarging FD_SETSIZE.
      *) Added thread attribute PTH_ATTR_DISPATCHES.
      *) Added sub-API pth_uctx_* for user-space context switching.
      *) Add a Pth variant of the new POSIX pselect(2) function.
  @@ -24,7 +28,7 @@
      *) Completely rewrote the "hard syscall mapping". 
      *) Added support to pth_poll(3) for POLLD{RD,WR}{NORM,BAND}.
      *) Fixed a long-standing termination bug in pth_exit(3).
  -   *) Upgraded to Autoconf 2.54 environment.
  +   *) Upgraded to Autoconf 2.54, Shtool 1.6.2 and Libtool 1.4.3.
      *) Add optional support for OSSP ex based exception handling.
   
     Changes between 1.3 and 1.4 (19-Feb-2000 to 24-Mar-2001)

From ossp-cvs-owner@ossp.org  Sat Nov  9 09:24:41 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5F953764F4; Sat,  9 Nov 2002 09:24:41 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/pth index.wml
Message-Id: <20021109082441.5F953764F4@mail.ossp.org>
Date: Sat,  9 Nov 2002 09:24:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   09-Nov-2002 09:24:41
  Branch: HEAD                             Handle: 2002110908244100

  Modified files:
    ossp-web/pkg/lib/pth    index.wml

  Log:
    more information about project

  Summary:
    Revision    Changes     Path
    1.9         +7  -0      ossp-web/pkg/lib/pth/index.wml
  ____________________________________________________________________________

  Index: ossp-web/pkg/lib/pth/index.wml
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 index.wml
  --- ossp-web/pkg/lib/pth/index.wml	8 Nov 2002 20:37:12 -0000	1.8
  +++ ossp-web/pkg/lib/pth/index.wml	9 Nov 2002 08:24:41 -0000	1.9
  @@ -39,6 +39,13 @@
   href="http://www.gnu.org/software/pth/">http://www.gnu.org/software/pth/</a>
   and <a href="ftp://ftp.gnu.org/gnu/pth/">ftp://ftp.gnu.org/gnu/pth/</a>.
   
  +<p>
  +GNU Pth releases are officially announced on <a
  +href="mailto:pth-users@gnu.org">pth-users@gnu.org</a> and on <a
  +href="http://freshmeat.net/">Freshmeat</a>. The Freshmeat <a
  +href="http://freshmeat.net/projects/gnupth/">GNU pth project page</a> 
  +gives more details.
  +
   <h2>Documentation</h2>
   
   <pkg_manpage name="pth" sect=3 path="/pkg/lib/pth/pth.pod">,

From ossp-cvs-owner@ossp.org  Sat Nov  9 12:30:17 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C712976986; Sat,  9 Nov 2002 12:30:16 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog pthread.c pthread.h.in
Message-Id: <20021109113016.C712976986@mail.ossp.org>
Date: Sat,  9 Nov 2002 12:30:16 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Nov-2002 12:30:16
  Branch: HEAD                             Handle: 2002110911301401

  Modified files:
    ossp-pkg/pth            ChangeLog pthread.c pthread.h.in

  Log:
    Added soft syscall mapping for nanosleep(3) and
    usleep(3) functions also to the Pthread API.

  Summary:
    Revision    Changes     Path
    1.599       +6  -0      ossp-pkg/pth/ChangeLog
    1.63        +12 -0      ossp-pkg/pth/pthread.c
    1.66        +4  -0      ossp-pkg/pth/pthread.h.in
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.598 -r1.599 ChangeLog
  --- ossp-pkg/pth/ChangeLog	8 Nov 2002 20:27:28 -0000	1.598
  +++ ossp-pkg/pth/ChangeLog	9 Nov 2002 11:30:14 -0000	1.599
  @@ -19,6 +19,12 @@
        / __/ | |_| |
     __|_____(_)___/_________________________________________________________
                     
  +  Changes between 2.0b1 and 2.0b2 (08-Nov-2002 to xx-Nov-2002)
  +
  +   *) Added soft syscall mapping for nanosleep(3) and
  +      usleep(3) functions also to the Pthread API. 
  +      [Ralf S. Engelschall]
  +
     Changes between 2.0b0 and 2.0b1 (07-Nov-2002 to 08-Nov-2002)
   
      *) Make pth_poll(3) more compliant to POSIX.1-2001/SUSv3 poll(2).
  Index: ossp-pkg/pth/pthread.c
  ============================================================
  $ cvs diff -u -r1.62 -r1.63 pthread.c
  --- ossp-pkg/pth/pthread.c	5 Nov 2002 19:39:09 -0000	1.62
  +++ ossp-pkg/pth/pthread.c	9 Nov 2002 11:30:15 -0000	1.63
  @@ -1056,6 +1056,18 @@
       return pth_system(cmd);
   }
   
  +int __pthread_nanosleep(const struct timespec *rqtp, struct timespec *rmtp)
  +{
  +    pthread_initialize();
  +    return pth_nanosleep(rqtp, rmtp);
  +}
  +
  +int __pthread_usleep(unsigned int sec)
  +{
  +    pthread_initialize();
  +    return pth_usleep(sec);
  +}
  +
   int __pthread_sigwait(const sigset_t *set, int *sig)
   {
       pthread_initialize();
  Index: ossp-pkg/pth/pthread.h.in
  ============================================================
  $ cvs diff -u -r1.65 -r1.66 pthread.h.in
  --- ossp-pkg/pth/pthread.h.in	3 Nov 2002 16:31:34 -0000	1.65
  +++ ossp-pkg/pth/pthread.h.in	9 Nov 2002 11:30:15 -0000	1.66
  @@ -493,6 +493,8 @@
   
   extern pid_t              __pthread_fork(void);
   extern unsigned int       __pthread_sleep(unsigned int);
  +extern int                __pthread_nanosleep(const struct timespec *, struct timespec *);
  +extern int                __pthread_usleep(unsigned int);
   extern int                __pthread_system(const char *);
   extern int                __pthread_sigwait(const sigset_t *, int *);
   extern pid_t              __pthread_waitpid(pid_t, int *, int);
  @@ -514,6 +516,8 @@
   #if _POSIX_THREAD_SYSCALL_SOFT && !defined(_PTHREAD_PRIVATE)
   #define fork       __pthread_fork
   #define sleep      __pthread_sleep
  +#define nanosleep  __pthread_nanosleep
  +#define usleep     __pthread_usleep
   #define system     __pthread_system
   #define sigwait    __pthread_sigwait
   #define waitpid    __pthread_waitpid

From ossp-cvs-owner@ossp.org  Sat Nov  9 15:00:42 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 079CC76986; Sat,  9 Nov 2002 15:00:41 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth configure.ac
Message-Id: <20021109140041.079CC76986@mail.ossp.org>
Date: Sat,  9 Nov 2002 15:00:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Nov-2002 15:00:41
  Branch: HEAD                             Handle: 2002110914004100

  Modified files:
    ossp-pkg/pth            configure.ac

  Log:
    use a more correct warning text

  Summary:
    Revision    Changes     Path
    1.9         +3  -3      ossp-pkg/pth/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/pth/configure.ac
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 configure.ac
  --- ossp-pkg/pth/configure.ac	3 Nov 2002 16:31:34 -0000	1.8
  +++ ossp-pkg/pth/configure.ac	9 Nov 2002 14:00:41 -0000	1.9
  @@ -553,9 +553,9 @@
   AC_MSG_RESULT([$msg])
   AC_SUBST(PTH_SYSCALL_HARD)
   if test ".$enable_syscall_hard" = .yes; then
  -    echo "${TB}Warning: The hard system call mapping variant is still work in progress.${TN}"
  -    echo "${TB}         Do neither expect it to compile on all platforms (because of${TN}"
  -    echo "${TB}         conflicts with vendor prototypes) nor to actually work!${TN}"
  +    echo "${TB}Warning: The hard system call mapping variant is an experimental feature.${TN}"
  +    echo "${TB}         It is not guaranteed to work if the mapped system calls on your${TN}"
  +    echo "${TB}         platform do not 100% comply to the POSIX.1-2001/SUSv3 prototypes.${TN}"
   fi
   
   

From ossp-cvs-owner@ossp.org  Sat Nov  9 15:15:56 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 88AF576604; Sat,  9 Nov 2002 15:15:56 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg cfg_main.c
Message-Id: <20021109141556.88AF576604@mail.ossp.org>
Date: Sat,  9 Nov 2002 15:15:56 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Nov-2002 15:15:56
  Branch: HEAD                             Handle: 2002110914155500

  Modified files:
    ossp-pkg/cfg            cfg_main.c

  Log:
    fix intermediate memory leak

  Summary:
    Revision    Changes     Path
    1.6         +4  -1      ossp-pkg/cfg/cfg_main.c
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/cfg_main.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 cfg_main.c
  --- ossp-pkg/cfg/cfg_main.c	2 Aug 2002 19:07:12 -0000	1.5
  +++ ossp-pkg/cfg/cfg_main.c	9 Nov 2002 14:15:55 -0000	1.6
  @@ -60,9 +60,12 @@
       (*cfg)->szError[0]     = '\0';
       (*cfg)->szErrorInfo[0] = '\0';
       (*cfg)->rcErrorInfo    = CFG_OK;
  -    if ((rc = cfg_grid_create(&((*cfg)->grid_nodes), sizeof(cfg_node_t), 512)) != CFG_OK)
  +    if ((rc = cfg_grid_create(&((*cfg)->grid_nodes), sizeof(cfg_node_t), 512)) != CFG_OK) {
  +        free(*cfg);
           return rc;
  +    }
       if ((rc = cfg_grid_create(&((*cfg)->grid_tokens), 8192, 1)) != CFG_OK) {
  +        free(*cfg);
           cfg_grid_destroy((*cfg)->grid_nodes);
           return rc;
       }

From ossp-cvs-owner@ossp.org  Sat Nov  9 15:25:25 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7894C764F4; Sat,  9 Nov 2002 15:25:25 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg devtool.conf
Message-Id: <20021109142525.7894C764F4@mail.ossp.org>
Date: Sat,  9 Nov 2002 15:25:25 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Nov-2002 15:25:25
  Branch: HEAD                             Handle: 2002110914252500

  Modified files:
    ossp-pkg/cfg            devtool.conf

  Log:
    expect latest and greatest

  Summary:
    Revision    Changes     Path
    1.6         +2  -2      ossp-pkg/cfg/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/devtool.conf
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 devtool.conf
  --- ossp-pkg/cfg/devtool.conf	6 Oct 2002 08:10:42 -0000	1.5
  +++ ossp-pkg/cfg/devtool.conf	9 Nov 2002 14:25:25 -0000	1.6
  @@ -3,8 +3,8 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.1 "1.6.*" all
  -    @autogen libtool  1.4.2 "1.4*"
  +    @autogen shtool   1.6.2 "1.6.*" all
  +    @autogen libtool  1.4.3 "1.4*"
       @autogen autoconf 2.54  "2.5[4-9]*"
   
   %autoclean

From ossp-cvs-owner@ossp.org  Sat Nov  9 15:34:02 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D34F9767ED; Sat,  9 Nov 2002 15:34:01 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg cfg_syn_scan.l configure.ac
Message-Id: <20021109143401.D34F9767ED@mail.ossp.org>
Date: Sat,  9 Nov 2002 15:34:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Nov-2002 15:34:01
  Branch: HEAD                             Handle: 2002110914340100

  Modified files:
    ossp-pkg/cfg            cfg_syn_scan.l configure.ac

  Log:
    ok, with the latest and greatest plus a little tweaking it works again

  Summary:
    Revision    Changes     Path
    1.12        +2  -1      ossp-pkg/cfg/cfg_syn_scan.l
    1.6         +1  -1      ossp-pkg/cfg/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/cfg_syn_scan.l
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 cfg_syn_scan.l
  --- ossp-pkg/cfg/cfg_syn_scan.l	25 Jul 2002 07:49:55 -0000	1.11
  +++ ossp-pkg/cfg/cfg_syn_scan.l	9 Nov 2002 14:34:01 -0000	1.12
  @@ -66,7 +66,8 @@
   /* scanner options */
   %pointer
   %option stack
  -%option reentrant-bison
  +%option reentrant
  +%option bison-bridge
   %option never-interactive
   %option noyywrap
   
  Index: ossp-pkg/cfg/configure.ac
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 configure.ac
  --- ossp-pkg/cfg/configure.ac	6 Oct 2002 08:42:06 -0000	1.5
  +++ ossp-pkg/cfg/configure.ac	9 Nov 2002 14:34:01 -0000	1.6
  @@ -41,7 +41,7 @@
   sinclude(libtool.m4)
   AC_PROG_LIBTOOL
   
  -AC_CHECK_BISON(BISON, 1.30, [1.3[[0-9]]|1.[[4-9]][[0-9]]])
  +AC_CHECK_BISON(BISON, 1.75, [1.7[[5-9]]|1.[[8-9]][[0-9]]])
   AC_CHECK_FLEX(FLEX, 2.5.10, [2.5.1[[0-9]]|2.5.[[2-9]][[0-9]]|2.[[6-9]].*])
   
   sinclude(cfg.ac)

From ossp-cvs-owner@ossp.org  Sat Nov  9 15:37:46 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 39228767ED; Sat,  9 Nov 2002 15:37:46 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 configure.ac devtool.conf l2_spec_scan.l
Message-Id: <20021109143746.39228767ED@mail.ossp.org>
Date: Sat,  9 Nov 2002 15:37:46 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Nov-2002 15:37:46
  Branch: HEAD                             Handle: 2002110914374500

  Modified files:
    ossp-pkg/l2             configure.ac devtool.conf l2_spec_scan.l

  Log:
    ok, with the latest and greatest plus a little tweaking it works again.

  Summary:
    Revision    Changes     Path
    1.25        +2  -2      ossp-pkg/l2/configure.ac
    1.8         +2  -2      ossp-pkg/l2/devtool.conf
    1.10        +2  -1      ossp-pkg/l2/l2_spec_scan.l
  ____________________________________________________________________________

  Index: ossp-pkg/l2/configure.ac
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 configure.ac
  --- ossp-pkg/l2/configure.ac	11 Oct 2002 16:00:48 -0000	1.24
  +++ ossp-pkg/l2/configure.ac	9 Nov 2002 14:37:45 -0000	1.25
  @@ -27,7 +27,7 @@
   dnl ##  configure.in: Autoconf specification
   dnl ##
   
  -AC_PREREQ(2.53)
  +AC_PREREQ(2.54)
   AC_INIT
   AC_HEADLINE(dnl
   OSSP l2, Logging Library, dnl
  @@ -44,7 +44,7 @@
   AC_CHECK_MAINTAINER
   AC_CONFIGURE_LIBTOOL
   
  -AC_CHECK_BISON(BISON, 1.30, [1.3[[0-9]]|1.[[4-9]][[0-9]]])
  +AC_CHECK_BISON(BISON, 1.75, [1.7[[5-9]]|1.[[8-9]][[0-9]]])
   AC_CHECK_FLEX(FLEX, 2.5.10, [2.5.1[[0-9]]|2.5.[[2-9]][[0-9]]|2.[[6-9]].*])
   
   AC_CHECK_LIB(nsl, gethostname)
  Index: ossp-pkg/l2/devtool.conf
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 devtool.conf
  --- ossp-pkg/l2/devtool.conf	11 Oct 2002 16:00:48 -0000	1.7
  +++ ossp-pkg/l2/devtool.conf	9 Nov 2002 14:37:45 -0000	1.8
  @@ -3,8 +3,8 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.1 "1.6.*" all
  -    @autogen libtool  1.4.2 "1.4*"
  +    @autogen shtool   1.6.2 "1.6.*" all
  +    @autogen libtool  1.4.3 "1.4*"
       @autogen autoconf 2.54  "2.5[4-9]*"
   
   %autoclean
  Index: ossp-pkg/l2/l2_spec_scan.l
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 l2_spec_scan.l
  --- ossp-pkg/l2/l2_spec_scan.l	30 Jul 2002 19:08:25 -0000	1.9
  +++ ossp-pkg/l2/l2_spec_scan.l	9 Nov 2002 14:37:45 -0000	1.10
  @@ -57,7 +57,8 @@
   /* scanner options */
   %pointer
   %option stack
  -%option reentrant-bison
  +%option reentrant
  +%option bison-bridge
   %option never-interactive
   %option noyywrap
   

From ossp-cvs-owner@ossp.org  Sat Nov  9 15:44:32 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0D504767ED; Sat,  9 Nov 2002 15:44:32 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2 l2_ch_socket.c l2_ch_syslog.c l2_ut_sa.ac l2_u...
Message-Id: <20021109144432.0D504767ED@mail.ossp.org>
Date: Sat,  9 Nov 2002 15:44:32 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Nov-2002 15:44:31
  Branch: HEAD                             Handle: 2002110914443100

  Modified files:
    ossp-pkg/l2             l2_ch_socket.c l2_ch_syslog.c l2_ut_sa.ac
                            l2_ut_sa.c l2_ut_sa.h

  Log:
    Upgrade to OSSP sa 1.0.1

  Summary:
    Revision    Changes     Path
    1.37        +1  -1      ossp-pkg/l2/l2_ch_socket.c
    1.32        +2  -2      ossp-pkg/l2/l2_ch_syslog.c
    1.7         +4  -4      ossp-pkg/l2/l2_ut_sa.ac
    1.20        +284 -130   ossp-pkg/l2/l2_ut_sa.c
    1.16        +36 -35     ossp-pkg/l2/l2_ut_sa.h
  ____________________________________________________________________________

  Index: ossp-pkg/l2/l2_ch_socket.c
  ============================================================
  $ cvs diff -u -r1.36 -r1.37 l2_ch_socket.c
  --- ossp-pkg/l2/l2_ch_socket.c	30 Jul 2002 19:08:25 -0000	1.36
  +++ ossp-pkg/l2/l2_ch_socket.c	9 Nov 2002 14:44:31 -0000	1.37
  @@ -151,7 +151,7 @@
           if (strcmp(cfg->szProto, "tcp") == 0)
               rc = sa_write(cfg->saRemote, buf, sizeRemain, &sizeWrite);
           else
  -            rc = sa_send(cfg->saRemote, buf, sizeRemain, &sizeWrite, cfg->saaRemote);
  +            rc = sa_send(cfg->saRemote, cfg->saaRemote, buf, sizeRemain, &sizeWrite);
           if (rc != SA_OK)
               return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
           sizeRemain = sizeRemain - sizeWrite; /* how much is left? */
  Index: ossp-pkg/l2/l2_ch_syslog.c
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 l2_ch_syslog.c
  --- ossp-pkg/l2/l2_ch_syslog.c	30 Jul 2002 19:08:25 -0000	1.31
  +++ ossp-pkg/l2/l2_ch_syslog.c	9 Nov 2002 14:44:31 -0000	1.32
  @@ -297,8 +297,8 @@
                                   cfg->szIdent, buf);
           if ((n = strlen(caBuf)) > 1024)
               return L2_ERR_IO;
  -        if ((rc = sa_send(cfg->saRemoteSock, caBuf, n, 
  -                          NULL, cfg->saaRemoteAddr)) != SA_OK)
  +        if ((rc = sa_send(cfg->saRemoteSock, cfg->saaRemoteAddr,
  +                          caBuf, n, NULL)) != SA_OK)
               return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_IO);
       }
   
  Index: ossp-pkg/l2/l2_ut_sa.ac
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 l2_ut_sa.ac
  --- ossp-pkg/l2/l2_ut_sa.ac	11 Oct 2002 16:00:48 -0000	1.6
  +++ ossp-pkg/l2/l2_ut_sa.ac	9 Nov 2002 14:44:31 -0000	1.7
  @@ -42,8 +42,8 @@
   changequote(<<,>>)dnl
   <<(^|[^a-zA-Z_0-9])$1[^a-zA-Z_0-9]>>dnl
   changequote([,]), [
  -#include <$2>], 
  -            ac_cv_typedef_$1=yes, 
  +#include <$2>],
  +            ac_cv_typedef_$1=yes,
               ac_cv_typedef_$1=no
           )
       ])dnl
  @@ -62,12 +62,12 @@
       AC_CHECK_LIB(nsl, gethostname)
       if test ".`echo $LIBS | grep nsl`" = .; then
           AC_CHECK_LIB(nsl, gethostbyname)
  -    fi  
  +    fi
       AC_CHECK_LIB(socket, accept)
   
       #   make sure some platforms find their IPv6 library
       AC_CHECK_LIB(inet6, getaddrinfo)
  -    
  +
       #   check for system headers
       AC_CHECK_HEADERS(string.h sys/types.h sys/socket.h netdb.h netinet/in.h)
   
  Index: ossp-pkg/l2/l2_ut_sa.c
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 l2_ut_sa.c
  --- ossp-pkg/l2/l2_ut_sa.c	21 Oct 2002 15:14:04 -0000	1.19
  +++ ossp-pkg/l2/l2_ut_sa.c	9 Nov 2002 14:44:31 -0000	1.20
  @@ -45,7 +45,7 @@
   #include <sys/time.h>    /* for "struct timeval" */
   #include <sys/un.h>      /* for "struct sockaddr_un" */
   #include <netinet/in.h>  /* for "struct sockaddr_in[6]" */
  -#include <sys/socket.h>  /* for "PF_XXX", "AF_XXX" and "SOCK_XXX" */
  +#include <sys/socket.h>  /* for "PF_XXX", "AF_XXX", "SOCK_XXX" and "SHUT_XX" */
   #include <arpa/inet.h>   /* for "inet_XtoX" */
   
   /* include own API header */
  @@ -88,6 +88,19 @@
   #define PF_INET6 AF_INET6
   #endif
   
  +/* backward compatibility for SHUT_XX. Some platforms (like brain-dead
  +   OpenUNIX) define those only if _XOPEN_SOURCE is defined, but unfortunately
  +   then fail in their other vendor includes due to internal inconsistencies. */
  +#if !defined(SHUT_RD)
  +#define SHUT_RD 0
  +#endif
  +#if !defined(SHUT_WR)
  +#define SHUT_WR 1
  +#endif
  +#if !defined(SHUT_RDWR)
  +#define SHUT_RDWR 2
  +#endif
  +
   /* backward compatibility for ssize_t */
   #if !defined(HAVE_SSIZE_T)
   #define ssize_t long
  @@ -203,7 +216,13 @@
       SA_SC_DECLARE_6(ssize_t, recvfrom, int, void *, size_t, int, struct sockaddr *, socklen_t *)
       SA_SC_DECLARE_6(ssize_t, sendto,   int, const void *, size_t, int, const struct sockaddr *, socklen_t)
   } sa_syscall_tab_t;
  - 
  +
  +/* socket option information */
  +typedef struct {
  +    int todo;
  +    int value;
  +} sa_optinfo_t;
  +
   /* socket abstraction object */
   struct sa_st {
       sa_type_t        eType;            /* socket type (stream or datagram) */
  @@ -216,6 +235,7 @@
       int              nWriteSize;       /* write buffer current size */
       char            *cpWriteBuf;       /* write buffer memory chunk */
       sa_syscall_tab_t scSysCall;        /* table of system calls */
  +    sa_optinfo_t     optInfo[5];       /* option storage */
   };
   
   /* socket address abstraction object */
  @@ -270,7 +290,7 @@
   #ifdef HAVE_INET_NTOA
           /* at least for IPv4 we can rely on the old inet_ntoa(3)
              and for IPv6 inet_ntop(3) would exist anyway */
  -        if ((cp = inet_ntoa(*((struct in_addr *)src))) == NULL) 
  +        if ((cp = inet_ntoa(*((struct in_addr *)src))) == NULL)
               return NULL;
           n = strlen(cp);
           if (n > size-1)
  @@ -289,14 +309,14 @@
   static int sa_mvxprintf(int (*output)(void *ctx, const char *buffer, size_t bufsize), void *ctx, const char *format, va_list ap)
   {
       /* sufficient integer buffer: <available-bits> x log_10(2) + safety */
  -    char ibuf[((sizeof(int)*8)/3)+10]; 
  +    char ibuf[((sizeof(int)*8)/3)+10];
       char *cp;
       char c;
       int d;
       int n;
       int bytes;
   
  -    if (format == NULL || ap == NULL)
  +    if (format == NULL)
           return -1;
       bytes = 0;
       while (*format != '\0') {
  @@ -378,11 +398,11 @@
       int n;
       sa_mvsnprintf_cb_t ctx;
   
  -    if (format == NULL || ap == NULL)
  +    if (format == NULL)
           return -1;
       if (buffer != NULL && bufsize == 0)
           return -1;
  -    if (buffer == NULL) 
  +    if (buffer == NULL)
           /* just determine output length */
           n = sa_mvxprintf(NULL, NULL, format, ap);
       else {
  @@ -489,7 +509,7 @@
       sl = 0;
       sf = 0;
   
  -    /* parse URI and resolve contents. 
  +    /* parse URI and resolve contents.
          The following syntax is recognized:
          - unix:<path>
          - inet://<host>:<port>[#(tcp|udp)] */
  @@ -609,7 +629,7 @@
               else if (he->h_addrtype == AF_INET6) {
                   sa6.sin6_family = AF_INET6;
                   sa6.sin6_port = htons(nPort);
  -                memcpy(&sa6.sin6_addr.s6_addr, he->h_addr_list[0], 
  +                memcpy(&sa6.sin6_addr.s6_addr, he->h_addr_list[0],
                          sizeof(sa6.sin6_addr.s6_addr));
                   sa = (struct sockaddr *)&sa6;
                   sl = sizeof(sa6);
  @@ -691,7 +711,7 @@
               || saa->slBuf < sizeof(struct sockaddr_un))
               /* in case the remote side of a Unix Domain socket was not
                  bound, a "struct sockaddr_un" can occur with a length less
  -               than the expected one. Then there is actually no path at all. 
  +               than the expected one. Then there is actually no path at all.
                  This has been verified under FreeBSD, Linux and Solaris. */
               sa_msnprintf(uribuf, sizeof(uribuf), "unix:/NOT-BOUND");
           else
  @@ -780,7 +800,7 @@
   #ifdef AF_INET6
       else if (   (saa1->nFamily == AF_INET  && saa2->nFamily == AF_INET6)
                || (saa1->nFamily == AF_INET6 && saa2->nFamily == AF_INET )) {
  -        /* special case of comparing a regular IPv4 address (1.2.3.4) with an 
  +        /* special case of comparing a regular IPv4 address (1.2.3.4) with an
              "IPv4-mapped IPv6 address" (::ffff:1.2.3.4). For details see RFC 2373. */
           if (saa1->nFamily == AF_INET6) {
               np1  = (unsigned int)(((struct sockaddr_in6 *)saa1->saBuf)->sin6_port);
  @@ -837,7 +857,7 @@
           prefixlen = nBits;
       }
   
  -    /* perform address representation comparison 
  +    /* perform address representation comparison
          (assumption guaranteed by API: network byte order is used) */
       nBytes = (prefixlen / 8);
       nBits  = (prefixlen % 8);
  @@ -864,25 +884,120 @@
   /* set timeouts if timeouts or done in kernel */
   static sa_rc_t sa_socket_settimeouts(sa_t *sa)
   {
  +    /* stop processing if socket is still not allocated */
  +    if (sa->fdSocket == -1)
  +        return SA_OK;
  +
   #if defined(SO_RCVTIMEO) && defined(SO_SNDTIMEO)
  -    if (sa->fdSocket != -1) {
  -        if (SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_READ])) {
  -            if (setsockopt(sa->fdSocket, SOL_SOCKET, SO_RCVTIMEO,
  -                           (const void *)(&sa->tvTimeout[SA_TIMEOUT_READ]),
  -                           (socklen_t)(sizeof(sa->tvTimeout[SA_TIMEOUT_READ]))) < 0)
  -                return SA_RC(SA_ERR_SYS);
  -        }
  -        if (SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_WRITE])) {
  -            if (setsockopt(sa->fdSocket, SOL_SOCKET, SO_SNDTIMEO,
  -                           (const void *)(&sa->tvTimeout[SA_TIMEOUT_WRITE]),
  -                           (socklen_t)(sizeof(sa->tvTimeout[SA_TIMEOUT_WRITE]))) < 0)
  -                return SA_RC(SA_ERR_SYS);
  -        }
  +    if (SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_READ])) {
  +        if (setsockopt(sa->fdSocket, SOL_SOCKET, SO_RCVTIMEO,
  +                       (const void *)(&sa->tvTimeout[SA_TIMEOUT_READ]),
  +                       (socklen_t)(sizeof(sa->tvTimeout[SA_TIMEOUT_READ]))) < 0)
  +            return SA_RC(SA_ERR_SYS);
  +    }
  +    if (SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_WRITE])) {
  +        if (setsockopt(sa->fdSocket, SOL_SOCKET, SO_SNDTIMEO,
  +                       (const void *)(&sa->tvTimeout[SA_TIMEOUT_WRITE]),
  +                       (socklen_t)(sizeof(sa->tvTimeout[SA_TIMEOUT_WRITE]))) < 0)
  +            return SA_RC(SA_ERR_SYS);
       }
   #endif
       return SA_OK;
   }
   
  +/* set socket options */
  +static sa_rc_t sa_socket_setoptions(sa_t *sa)
  +{
  +    int i;
  +    sa_rc_t rv;
  +
  +    /* stop processing if socket is still not allocated */
  +    if (sa->fdSocket == -1)
  +        return SA_OK;
  +
  +    /* check for pending options */
  +    rv = SA_OK;
  +    for (i = 0; i < (sizeof(sa->optInfo)/sizeof(sa->optInfo[0])); i++) {
  +        if (sa->optInfo[i].todo) {
  +            switch (i) {
  +                /* enable/disable Nagle's Algorithm (see RFC898) */
  +                case SA_OPTION_NAGLE: {
  +#if defined(IPPROTO_TCP) && defined(TCP_NODELAY)
  +                    int mode = sa->optInfo[i].value;
  +                    if (setsockopt(sa->fdSocket, IPPROTO_TCP, TCP_NODELAY,
  +                                   (const void *)&mode,
  +                                   (socklen_t)sizeof(mode)) < 0)
  +                        rv = SA_ERR_SYS;
  +                    else
  +                        sa->optInfo[i].todo = FALSE;
  +#endif
  +                    break;
  +                }
  +                /* enable/disable linger close semantics */
  +                case SA_OPTION_LINGER: {
  +#if defined(SO_LINGER)
  +                    struct linger linger;
  +                    linger.l_onoff  = (sa->optInfo[i].value == 0 ? 0 : 1);
  +                    linger.l_linger = sa->optInfo[i].value;
  +                    if (setsockopt(sa->fdSocket, SOL_SOCKET, SO_LINGER,
  +                                   (const void *)&linger,
  +                                   (socklen_t)sizeof(struct linger)) < 0)
  +                        rv = SA_ERR_SYS;
  +                    else
  +                        sa->optInfo[i].todo = FALSE;
  +#endif
  +                    break;
  +                }
  +                /* enable/disable reusability of binding to address */
  +                case SA_OPTION_REUSEADDR: {
  +#if defined(SO_REUSEADDR)
  +                    int mode = sa->optInfo[i].value;
  +                    if (setsockopt(sa->fdSocket, SOL_SOCKET, SO_REUSEADDR,
  +                                   (const void *)&mode, (socklen_t)sizeof(mode)) < 0)
  +                        rv = SA_ERR_SYS;
  +                    else
  +                        sa->optInfo[i].todo = FALSE;
  +#endif
  +                    break;
  +                }
  +                /* enable/disable reusability of binding to port */
  +                case SA_OPTION_REUSEPORT: {
  +#if defined(SO_REUSEPORT)
  +                    int mode = sa->optInfo[i].value;
  +                    if (setsockopt(sa->fdSocket, SOL_SOCKET, SO_REUSEPORT,
  +                                   (const void *)&mode, (socklen_t)sizeof(mode)) < 0)
  +                        rv = SA_ERR_SYS;
  +                    else
  +                        sa->optInfo[i].todo = FALSE;
  +#endif
  +                    break;
  +                }
  +                /* enable/disable non-blocking I/O mode */
  +                case SA_OPTION_NONBLOCK: {
  +                    int mode = sa->optInfo[i].value;
  +                    int flags;
  +                    if ((flags = fcntl(sa->fdSocket, F_GETFL, 0)) < 0) {
  +                        rv = SA_ERR_SYS;
  +                        break;
  +                    }
  +                    if (mode == 0)
  +                        flags &= ~(O_NONBLOCK);
  +                    else
  +                        flags |= O_NONBLOCK;
  +                    if (fcntl(sa->fdSocket, F_SETFL, flags) < 0)
  +                        rv = SA_ERR_SYS;
  +                    else
  +                        sa->optInfo[i].todo = FALSE;
  +                    break;
  +                }
  +                default: /* NOTREACHED */ break;
  +            }
  +        }
  +    }
  +
  +    return SA_RC(rv);
  +}
  +
   /* internal lazy/delayed initialization of underlying socket */
   static sa_rc_t sa_socket_init(sa_t *sa, int nFamily)
   {
  @@ -891,6 +1006,7 @@
   #if !(defined(IPPROTO_TCP) && defined(IPPROTO_UDP))
       struct protoent *pe;
   #endif
  +    sa_rc_t rv;
   
       /* argument sanity check(s) */
       if (sa == NULL)
  @@ -909,7 +1025,7 @@
           return SA_RC(SA_ERR_INT);
   
       /* determine socket protocol */
  -    if (nFamily == AF_LOCAL) 
  +    if (nFamily == AF_LOCAL)
           nProto = 0;
   #ifdef AF_INET6
       else if (nFamily == AF_INET || nFamily == AF_INET6) {
  @@ -943,7 +1059,12 @@
           return SA_RC(SA_ERR_SYS);
   
       /* optionally set kernel timeouts */
  -    sa_socket_settimeouts(sa);
  +    if ((rv = sa_socket_settimeouts(sa)) != SA_OK)
  +        return SA_RC(rv);
  +
  +    /* optionally configure changed options */
  +    if ((rv = sa_socket_setoptions(sa)) != SA_OK)
  +        return SA_RC(rv);
   
       return SA_OK;
   }
  @@ -996,6 +1117,12 @@
           sa->tvTimeout[i].tv_usec = 0;
       }
   
  +    /* init options object attributes */
  +    for (i = 0; i < (sizeof(sa->optInfo)/sizeof(sa->optInfo[0])); i++) {
  +        sa->optInfo[i].todo  = FALSE;
  +        sa->optInfo[i].value = 0;
  +    }
  +
       /* init syscall object attributes */
       SA_SC_ASSIGN(sa, connect,  connect,  NULL);
       SA_SC_ASSIGN(sa, accept,   accept,   NULL);
  @@ -1054,6 +1181,7 @@
   sa_rc_t sa_timeout(sa_t *sa, sa_timeout_t id, long sec, long usec)
   {
       int i;
  +    sa_rc_t rv;
   
       /* argument sanity check(s) */
       if (sa == NULL)
  @@ -1070,8 +1198,9 @@
           sa->tvTimeout[id].tv_usec = usec;
       }
   
  -    /* optionally set kernel timeouts */
  -    sa_socket_settimeouts(sa);
  +    /* try to already set timeouts */
  +    if ((rv = sa_socket_settimeouts(sa)) != SA_OK)
  +        return SA_RC(rv);
   
       return SA_OK;
   }
  @@ -1095,7 +1224,7 @@
               else
                   cp = (char *)realloc(sa->cpReadBuf, size);
               if (cp == NULL)
  -                return SA_RC(SA_ERR_SYS);
  +                return SA_RC(SA_ERR_MEM);
               sa->cpReadBuf = cp;
               sa->nReadSize = size;
           }
  @@ -1116,7 +1245,7 @@
               else
                   cp = (char *)realloc(sa->cpWriteBuf, size);
               if (cp == NULL)
  -                return SA_RC(SA_ERR_SYS);
  +                return SA_RC(SA_ERR_MEM);
               sa->cpWriteBuf = cp;
               sa->nWriteSize = size;
           }
  @@ -1148,16 +1277,10 @@
       va_start(ap, id);
       switch (id) {
           case SA_OPTION_NAGLE: {
  -            /* enable/disable Nagle's Algorithm (see RFC898) */
   #if defined(IPPROTO_TCP) && defined(TCP_NODELAY)
               int mode = ((int)va_arg(ap, int) ? 1 : 0);
  -            if (sa->fdSocket == -1) {
  -                rv = SA_ERR_USE;
  -                break;
  -            }
  -            if (setsockopt(sa->fdSocket, IPPROTO_TCP, TCP_NODELAY, 
  -                           (const void *)&mode, (socklen_t)sizeof(mode)) < 0)
  -                rv = SA_ERR_SYS;
  +            sa->optInfo[SA_OPTION_NAGLE].value = mode;
  +            sa->optInfo[SA_OPTION_NAGLE].todo = TRUE;
   #else
               rv = SA_ERR_IMP;
   #endif
  @@ -1165,61 +1288,40 @@
           }
           case SA_OPTION_LINGER: {
   #if defined(SO_LINGER)
  -            struct linger *linger = (struct linger *)va_arg(ap, void *);
  -            if (sa->fdSocket == -1) {
  -                rv = SA_ERR_USE;
  -                break;
  -            }
  -            if (setsockopt(sa->fdSocket, SOL_SOCKET, SO_LINGER, 
  -                           (const void *)linger, (socklen_t)sizeof(struct linger)) < 0)
  -                rv = SA_ERR_SYS;
  +            int amount = ((int)va_arg(ap, int) ? 1 : 0);
  +            sa->optInfo[SA_OPTION_LINGER].value = amount;
  +            sa->optInfo[SA_OPTION_LINGER].todo = TRUE;
   #else
               rv = SA_ERR_IMP;
   #endif
               break;
           }
           case SA_OPTION_REUSEADDR:
  -#ifdef SA_OPTION_REUSEPORT
  -        case SA_OPTION_REUSEPORT: 
  +        {
  +#if defined(SO_REUSEADDR)
  +            int mode = ((int)va_arg(ap, int) ? 1 : 0);
  +            sa->optInfo[SA_OPTION_REUSEADDR].value = mode;
  +            sa->optInfo[SA_OPTION_REUSEADDR].todo = TRUE;
  +#else
  +            rv = SA_ERR_IMP;
   #endif
  +            break;
  +        }
  +        case SA_OPTION_REUSEPORT:
           {
  -            /* enable/disable reusability of binding to address or port */
  +#if defined(SO_REUSEPORT)
               int mode = ((int)va_arg(ap, int) ? 1 : 0);
  -            int flag;
  -            if (sa->fdSocket == -1) {
  -                rv = SA_ERR_USE;
  -                break;
  -            }
  -            switch (id) {
  -                case SA_OPTION_REUSEADDR: flag = SO_REUSEADDR; break;
  -#ifdef SA_OPTION_REUSEPORT
  -                case SA_OPTION_REUSEPORT: flag = SO_REUSEPORT; break;
  +            sa->optInfo[SA_OPTION_REUSEPORT].value = mode;
  +            sa->optInfo[SA_OPTION_REUSEPORT].todo = TRUE;
  +#else
  +            rv = SA_ERR_IMP;
   #endif
  -                default: flag = 0; break;
  -            }
  -            if (setsockopt(sa->fdSocket, SOL_SOCKET, flag, 
  -                           (const void *)&mode, (socklen_t)sizeof(mode)) < 0)
  -                rv = SA_ERR_SYS;
               break;
           }
           case SA_OPTION_NONBLOCK: {
  -            /* enable/disable non-blocking I/O mode */
  -            int flags;
               int mode = (int)va_arg(ap, int);
  -            if (sa->fdSocket == -1) {
  -                rv = SA_ERR_USE;
  -                break;
  -            }
  -            if ((flags = fcntl(sa->fdSocket, F_GETFL, 0)) < 0) {
  -                rv = SA_ERR_SYS;
  -                break;
  -            }
  -            if (mode == 0)
  -                flags &= ~(O_NONBLOCK);
  -            else
  -                flags |= O_NONBLOCK;
  -            if (fcntl(sa->fdSocket, F_SETFL, flags) < 0)
  -                rv = SA_ERR_SYS;
  +            sa->optInfo[SA_OPTION_NONBLOCK].value = mode;
  +            sa->optInfo[SA_OPTION_NONBLOCK].todo = TRUE;
               break;
           }
           default: {
  @@ -1228,7 +1330,15 @@
       }
       va_end(ap);
   
  -    return SA_RC(rv);
  +    /* if an error already occured, stop here */
  +    if (rv != SA_OK)
  +        return SA_RC(rv);
  +
  +    /* else already (re)set) options (if possible) */
  +    if ((rv = sa_socket_setoptions(sa)) != SA_OK)
  +        return SA_RC(rv);
  +
  +    return SA_OK;
   }
   
   /* override system call */
  @@ -1250,7 +1360,7 @@
           case SA_SYSCALL_WRITE:    SA_SC_ASSIGN(sa, write,    fptr, fctx); break;
           case SA_SYSCALL_RECVFROM: SA_SC_ASSIGN(sa, recvfrom, fptr, fctx); break;
           case SA_SYSCALL_SENDTO:   SA_SC_ASSIGN(sa, sendto,   fptr, fctx); break;
  -        default: rv = SA_ERR_ARG; 
  +        default: rv = SA_ERR_ARG;
       }
   
       return SA_RC(rv);
  @@ -1296,7 +1406,7 @@
       if (sa == NULL || raddr == NULL)
           return SA_RC(SA_ERR_ARG);
   
  -    /* connecting is only possible for stream communication */ 
  +    /* connecting is only possible for stream communication */
       if (sa->eType != SA_TYPE_STREAM)
           return SA_RC(SA_ERR_USE);
   
  @@ -1329,7 +1439,7 @@
   
           /* ok if connect completed immediately */
           if (n == 0)
  -            goto done; 
  +            goto done;
   
           /* wait for read or write possibility */
           FD_ZERO(&rset);
  @@ -1381,7 +1491,7 @@
       if (sa == NULL)
           return SA_RC(SA_ERR_ARG);
   
  -    /* listening is only possible for stream communication */ 
  +    /* listening is only possible for stream communication */
       if (sa->eType != SA_TYPE_STREAM)
           return SA_RC(SA_ERR_USE);
   
  @@ -1409,7 +1519,7 @@
           struct sockaddr_in6 sa6;
   #endif
       } sa_buf;
  -    socklen_t sa_len;
  +    socklen_t sa_size;
       int s;
       int i;
   
  @@ -1417,7 +1527,7 @@
       if (sa == NULL || caddr == NULL || csa == NULL)
           return SA_RC(SA_ERR_ARG);
   
  -    /* accepting connections is only possible for stream communication */ 
  +    /* accepting connections is only possible for stream communication */
       if (sa->eType != SA_TYPE_STREAM)
           return SA_RC(SA_ERR_USE);
   
  @@ -1433,21 +1543,21 @@
               n = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &fds, NULL, NULL,
                                &sa->tvTimeout[SA_TIMEOUT_ACCEPT]);
           } while (n == -1 && errno == EINTR);
  -        if (n == 0) 
  +        if (n == 0)
               return SA_RC(SA_ERR_TMT);
           if (n <= 0)
               return SA_RC(SA_ERR_SYS);
       }
   
       /* perform accept operation on underlying socket */
  -    sa_len = sizeof(sa_buf);
  -    if ((s = SA_SC_CALL_3(sa, accept, sa->fdSocket, (struct sockaddr *)&sa_buf, &sa_len)) == -1)
  +    sa_size = sizeof(sa_buf);
  +    if ((s = SA_SC_CALL_3(sa, accept, sa->fdSocket, (struct sockaddr *)&sa_buf, &sa_size)) == -1)
           return SA_RC(SA_ERR_SYS);
   
       /* create result address object */
       if ((rv = sa_addr_create(caddr)) != SA_OK)
           return SA_RC(rv);
  -    if ((rv = sa_addr_s2a(*caddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK) {
  +    if ((rv = sa_addr_s2a(*caddr, (struct sockaddr *)&sa_buf, sa_size)) != SA_OK) {
           sa_addr_destroy(*caddr);
           return SA_RC(rv);
       }
  @@ -1489,13 +1599,13 @@
           struct sockaddr_in6 sa6;
   #endif
       } sa_buf;
  -    socklen_t sa_len;
  +    socklen_t sa_size;
   
       /* argument sanity check(s) */
       if (sa == NULL || raddr == NULL)
           return SA_RC(SA_ERR_ARG);
   
  -    /* peers exist only for stream communication */ 
  +    /* peers exist only for stream communication */
       if (sa->eType != SA_TYPE_STREAM)
           return SA_RC(SA_ERR_USE);
   
  @@ -1504,14 +1614,14 @@
           return SA_RC(SA_ERR_USE);
   
       /* determine remote address of underlying socket */
  -    sa_len = sizeof(sa_buf);
  -    if (getpeername(sa->fdSocket, (struct sockaddr *)&sa_buf, &sa_len) < 0)
  +    sa_size = sizeof(sa_buf);
  +    if (getpeername(sa->fdSocket, (struct sockaddr *)&sa_buf, &sa_size) < 0)
           return SA_RC(SA_ERR_SYS);
   
       /* create result address object */
       if ((rv = sa_addr_create(raddr)) != SA_OK)
           return SA_RC(rv);
  -    if ((rv = sa_addr_s2a(*raddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK) {
  +    if ((rv = sa_addr_s2a(*raddr, (struct sockaddr *)&sa_buf, sa_size)) != SA_OK) {
           sa_addr_destroy(*raddr);
           return SA_RC(rv);
       }
  @@ -1529,7 +1639,7 @@
           struct sockaddr_in6 sa6;
   #endif
       } sa_buf;
  -    socklen_t sa_len;
  +    socklen_t sa_size;
   
       /* argument sanity check(s) */
       if (sa == NULL || laddr == NULL)
  @@ -1540,14 +1650,14 @@
           return SA_RC(SA_ERR_USE);
   
       /* determine local address of underlying socket */
  -    sa_len = sizeof(sa_buf);
  -    if (getsockname(sa->fdSocket, (struct sockaddr *)&sa_buf, &sa_len) < 0)
  +    sa_size = sizeof(sa_buf);
  +    if (getsockname(sa->fdSocket, (struct sockaddr *)&sa_buf, &sa_size) < 0)
           return SA_RC(SA_ERR_SYS);
   
       /* create result address object */
       if ((rv = sa_addr_create(laddr)) != SA_OK)
           return SA_RC(rv);
  -    if ((rv = sa_addr_s2a(*laddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK) {
  +    if ((rv = sa_addr_s2a(*laddr, (struct sockaddr *)&sa_buf, sa_size)) != SA_OK) {
           sa_addr_destroy(*laddr);
           return SA_RC(rv);
       }
  @@ -1580,14 +1690,14 @@
       fd_set fds;
   #endif
   
  -    /* if timeout is enabled, perform explicit/smart blocking instead 
  +    /* if timeout is enabled, perform explicit/smart blocking instead
          of implicitly/hard blocking in the read(2) system call */
   #if !(defined(SO_RCVTIMEO) && defined(SO_SNDTIMEO))
       if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_READ])) {
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
           do {
  -            rv = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &fds, NULL, NULL, 
  +            rv = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &fds, NULL, NULL,
                                 &sa->tvTimeout[SA_TIMEOUT_READ]);
           } while (rv == -1 && errno == EINTR);
           if (rv == 0) {
  @@ -1621,7 +1731,7 @@
       if (sa == NULL || cpBuf == NULL || nBufReq == 0)
           return SA_RC(SA_ERR_ARG);
   
  -    /* reading is only possible for stream communication */ 
  +    /* reading is only possible for stream communication */
       if (sa->eType != SA_TYPE_STREAM)
           return SA_RC(SA_ERR_USE);
   
  @@ -1686,7 +1796,7 @@
                       else if (n < 0)
                           /* error on this read, but perhaps ok as a whole */
                           rv = (res == 0 ? SA_ERR_SYS : SA_OK);
  -                    if (n == 0)
  +                    else if (n == 0)
                           /* EOF on this read, but perhaps ok as a whole */
                           rv = (res == 0 ? SA_ERR_EOF : SA_OK);
                       else {
  @@ -1699,7 +1809,7 @@
           }
       }
   
  -    /* pass number of actually read bytes to caller */ 
  +    /* pass number of actually read bytes to caller */
       if (nBufRes != NULL)
           *nBufRes = (size_t)res;
   
  @@ -1718,7 +1828,7 @@
       if (sa == NULL || cpBuf == NULL || nBufReq == 0)
           return SA_RC(SA_ERR_ARG);
   
  -    /* reading is only possible for stream communication */ 
  +    /* reading is only possible for stream communication */
       if (sa->eType != SA_TYPE_STREAM)
           return SA_RC(SA_ERR_USE);
   
  @@ -1759,14 +1869,14 @@
       fd_set fds;
   #endif
   
  -    /* if timeout is enabled, perform explicit/smart blocking instead 
  +    /* if timeout is enabled, perform explicit/smart blocking instead
          of implicitly/hard blocking in the write(2) system call */
   #if !(defined(SO_RCVTIMEO) && defined(SO_SNDTIMEO))
       if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_WRITE])) {
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
           do {
  -            rv = SA_SC_CALL_5(sa, select, sa->fdSocket+1, NULL, &fds, NULL, 
  +            rv = SA_SC_CALL_5(sa, select, sa->fdSocket+1, NULL, &fds, NULL,
                                 &sa->tvTimeout[SA_TIMEOUT_WRITE]);
           } while (rv == -1 && errno == EINTR);
           if (rv == 0) {
  @@ -1800,7 +1910,7 @@
       if (sa == NULL || cpBuf == NULL || nBufReq == 0)
           return SA_RC(SA_ERR_ARG);
   
  -    /* writing is only possible for stream communication */ 
  +    /* writing is only possible for stream communication */
       if (sa->eType != SA_TYPE_STREAM)
           return SA_RC(SA_ERR_USE);
   
  @@ -1867,8 +1977,8 @@
       sa_writef_cb_t *ctx = (sa_writef_cb_t *)_ctx;
   
       if ((ctx->rv = sa_write(ctx->sa, buffer, bufsize, &n)) != SA_OK)
  -        n = -1;
  -    return n;
  +        return -1;
  +    return (int)n;
   }
   
   /* write formatted string to socket (convinience function) */
  @@ -1882,7 +1992,7 @@
       if (sa == NULL || cpFmt == NULL)
           return SA_RC(SA_ERR_ARG);
   
  -    /* writing is only possible for stream communication */ 
  +    /* writing is only possible for stream communication */
       if (sa->eType != SA_TYPE_STREAM)
           return SA_RC(SA_ERR_USE);
   
  @@ -1910,7 +2020,7 @@
       if (sa == NULL)
           return SA_RC(SA_ERR_ARG);
   
  -    /* flushing is only possible for stream communication */ 
  +    /* flushing is only possible for stream communication */
       if (sa->eType != SA_TYPE_STREAM)
           return SA_RC(SA_ERR_USE);
   
  @@ -1946,7 +2056,7 @@
       if (sa == NULL || flags == NULL)
           return SA_RC(SA_ERR_ARG);
   
  -    /* shutdown is only possible for stream communication */ 
  +    /* shutdown is only possible for stream communication */
       if (sa->eType != SA_TYPE_STREAM)
           return SA_RC(SA_ERR_USE);
   
  @@ -1960,11 +2070,15 @@
           how = SHUT_RD;
       else if (strcmp(flags, "w") == 0)
           how = SHUT_WR;
  -    else if (strcmp(flags, "rw") == 0)
  +    else if (strcmp(flags, "rw") == 0 || strcmp(flags, "wr") == 0)
           how = SHUT_RDWR;
       else
           return SA_RC(SA_ERR_ARG);
   
  +    /* flush write buffers */
  +    if ((how & SHUT_WR) || (how & SHUT_RDWR))
  +        sa_flush(sa);
  +
       /* perform shutdown operation on underlying socket */
       if (shutdown(sa->fdSocket, how) == -1)
           return SA_RC(SA_ERR_SYS);
  @@ -1973,7 +2087,7 @@
   }
   
   /* receive data via socket */
  -sa_rc_t sa_recv(sa_t *sa, char *buf, size_t buflen, size_t *bufdone, sa_addr_t **raddr)
  +sa_rc_t sa_recv(sa_t *sa, sa_addr_t **raddr, char *buf, size_t buflen, size_t *bufdone)
   {
       sa_rc_t rv;
       union {
  @@ -1982,7 +2096,7 @@
           struct sockaddr_in6 sa6;
   #endif
       } sa_buf;
  -    socklen_t sa_len;
  +    socklen_t sa_size;
       size_t n;
       fd_set fds;
   
  @@ -1990,7 +2104,7 @@
       if (sa == NULL || buf == NULL || buflen == 0 || raddr == NULL)
           return SA_RC(SA_ERR_ARG);
   
  -    /* receiving is only possible for datagram communication */ 
  +    /* receiving is only possible for datagram communication */
       if (sa->eType != SA_TYPE_DATAGRAM)
           return SA_RC(SA_ERR_USE);
   
  @@ -1998,31 +2112,31 @@
       if (sa->fdSocket == -1)
           return SA_RC(SA_ERR_USE);
   
  -    /* if timeout is enabled, perform explicit/smart blocking instead 
  +    /* if timeout is enabled, perform explicit/smart blocking instead
          of implicitly/hard blocking in the recvfrom(2) system call */
       if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_READ])) {
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
           do {
  -            n = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &fds, NULL, NULL, 
  +            n = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &fds, NULL, NULL,
                                &sa->tvTimeout[SA_TIMEOUT_READ]);
           } while (n == -1 && errno == EINTR);
  -        if (n == 0) 
  +        if (n == 0)
               errno = ETIMEDOUT;
           if (n <= 0)
               return SA_RC(SA_ERR_SYS);
       }
   
       /* perform receive operation on underlying socket */
  -    sa_len = sizeof(sa_buf);
  -    if ((n = SA_SC_CALL_6(sa, recvfrom, sa->fdSocket, buf, buflen, 0, 
  -                          (struct sockaddr *)&sa_buf, &sa_len)) == -1)
  +    sa_size = sizeof(sa_buf);
  +    if ((n = SA_SC_CALL_6(sa, recvfrom, sa->fdSocket, buf, buflen, 0,
  +                          (struct sockaddr *)&sa_buf, &sa_size)) == -1)
           return SA_RC(SA_ERR_SYS);
   
       /* create result address object */
       if ((rv = sa_addr_create(raddr)) != SA_OK)
           return rv;
  -    if ((rv = sa_addr_s2a(*raddr, (struct sockaddr *)&sa_buf, sa_len)) != SA_OK) {
  +    if ((rv = sa_addr_s2a(*raddr, (struct sockaddr *)&sa_buf, sa_size)) != SA_OK) {
           sa_addr_destroy(*raddr);
           return rv;
       }
  @@ -2035,7 +2149,7 @@
   }
   
   /* send data via socket */
  -sa_rc_t sa_send(sa_t *sa, const char *buf, size_t buflen, size_t *bufdone, sa_addr_t *raddr)
  +sa_rc_t sa_send(sa_t *sa, sa_addr_t *raddr, const char *buf, size_t buflen, size_t *bufdone)
   {
       size_t n;
       fd_set fds;
  @@ -2045,7 +2159,7 @@
       if (sa == NULL || buf == NULL || buflen == 0 || raddr == NULL)
           return SA_RC(SA_ERR_ARG);
   
  -    /* sending is only possible for datagram communication */ 
  +    /* sending is only possible for datagram communication */
       if (sa->eType != SA_TYPE_DATAGRAM)
           return SA_RC(SA_ERR_USE);
   
  @@ -2054,16 +2168,16 @@
           if ((rv = sa_socket_init(sa, raddr->nFamily)) != SA_OK)
               return rv;
   
  -    /* if timeout is enabled, perform explicit/smart blocking instead 
  +    /* if timeout is enabled, perform explicit/smart blocking instead
          of implicitly/hard blocking in the sendto(2) system call */
       if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_WRITE])) {
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
           do {
  -            n = SA_SC_CALL_5(sa, select, sa->fdSocket+1, NULL, &fds, NULL, 
  +            n = SA_SC_CALL_5(sa, select, sa->fdSocket+1, NULL, &fds, NULL,
                                &sa->tvTimeout[SA_TIMEOUT_WRITE]);
           } while (n == -1 && errno == EINTR);
  -        if (n == 0) 
  +        if (n == 0)
               errno = ETIMEDOUT;
           if (n <= 0)
               return SA_RC(SA_ERR_SYS);
  @@ -2078,6 +2192,46 @@
           *bufdone = n;
   
       return SA_OK;
  +}
  +
  +/* send formatted string to socket (convinience function) */
  +sa_rc_t sa_sendf(sa_t *sa, sa_addr_t *raddr, const char *cpFmt, ...)
  +{
  +    va_list ap;
  +    size_t nBuf;
  +    char *cpBuf;
  +    sa_rc_t rv;
  +    char caBuf[1024];
  +
  +    /* argument sanity check(s) */
  +    if (sa == NULL || raddr == NULL || cpFmt == NULL)
  +        return SA_RC(SA_ERR_ARG);
  +
  +    /* format string into temporary buffer */
  +    va_start(ap, cpFmt);
  +    nBuf = sa_mvsnprintf(NULL, 0, cpFmt, ap);
  +    va_end(ap);
  +    if ((nBuf+1) > sizeof(caBuf)) {
  +        /* requires a larger buffer, so allocate dynamically */
  +        if ((cpBuf = (char *)malloc(nBuf+1)) == NULL)
  +            return SA_RC(SA_ERR_MEM);
  +    }
  +    else {
  +        /* fits into small buffer, so allocate statically */
  +        cpBuf = caBuf;
  +    }
  +    va_start(ap, cpFmt);
  +    sa_mvsnprintf(cpBuf, nBuf+1, cpFmt, ap);
  +    va_end(ap);
  +
  +    /* pass-through to sa_send() */
  +    rv = sa_send(sa, raddr, cpBuf, nBuf, NULL);
  +
  +    /* cleanup dynamically allocated buffer */
  +    if ((nBuf+1) > sizeof(caBuf))
  +        free(cpBuf);
  +
  +    return rv;
   }
   
   /* return error string */
  Index: ossp-pkg/l2/l2_ut_sa.h
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 l2_ut_sa.h
  --- ossp-pkg/l2/l2_ut_sa.h	21 Oct 2002 15:14:04 -0000	1.15
  +++ ossp-pkg/l2/l2_ut_sa.h	9 Nov 2002 14:44:31 -0000	1.16
  @@ -137,11 +137,11 @@
   
   /* list of options */
   typedef enum {
  -    SA_OPTION_NAGLE,
  -    SA_OPTION_LINGER,
  -    SA_OPTION_REUSEADDR,
  -    SA_OPTION_REUSEPORT,
  -    SA_OPTION_NONBLOCK
  +    SA_OPTION_NAGLE     = 0,
  +    SA_OPTION_LINGER    = 1,
  +    SA_OPTION_REUSEADDR = 2,
  +    SA_OPTION_REUSEPORT = 3,
  +    SA_OPTION_NONBLOCK  = 4
   } sa_option_t;
   
   /* list of system calls */
  @@ -159,50 +159,51 @@
   extern const char sa_id[];
   
   /* address object operations */
  -sa_rc_t sa_addr_create  (sa_addr_t **saa);
  -sa_rc_t sa_addr_destroy (sa_addr_t *saa);
  +extern sa_rc_t sa_addr_create  (sa_addr_t **__saa);
  +extern sa_rc_t sa_addr_destroy (sa_addr_t  *__saa);
   
   /* address operations */
  -sa_rc_t sa_addr_u2a     (sa_addr_t *saa, const char *uri, ...);
  -sa_rc_t sa_addr_s2a     (sa_addr_t *saa, const struct sockaddr *sabuf, socklen_t salen);
  -sa_rc_t sa_addr_a2u     (sa_addr_t *saa, char **uri);
  -sa_rc_t sa_addr_a2s     (sa_addr_t *saa, struct sockaddr **sabuf, socklen_t *salen);
  -sa_rc_t sa_addr_match   (sa_addr_t *saa1, sa_addr_t *saa2, int prefixlen);
  +extern sa_rc_t sa_addr_u2a     (sa_addr_t  *__saa, const char *__uri, ...);
  +extern sa_rc_t sa_addr_s2a     (sa_addr_t  *__saa, const struct sockaddr *__sabuf, socklen_t __salen);
  +extern sa_rc_t sa_addr_a2u     (sa_addr_t  *__saa, char **__uri);
  +extern sa_rc_t sa_addr_a2s     (sa_addr_t  *__saa, struct sockaddr **__sabuf, socklen_t *__salen);
  +extern sa_rc_t sa_addr_match   (sa_addr_t  *__saa1, sa_addr_t *__saa2, int __prefixlen);
   
   /* socket object operations */
  -sa_rc_t sa_create       (sa_t **sa);
  -sa_rc_t sa_destroy      (sa_t *sa);
  +extern sa_rc_t sa_create       (sa_t **__sa);
  +extern sa_rc_t sa_destroy      (sa_t  *__sa);
   
   /* socket parameter operations */
  -sa_rc_t sa_type         (sa_t *sa, sa_type_t type);
  -sa_rc_t sa_timeout      (sa_t *sa, sa_timeout_t id, long sec, long usec);
  -sa_rc_t sa_buffer       (sa_t *sa, sa_buffer_t  id, size_t size);
  -sa_rc_t sa_option       (sa_t *sa, sa_option_t  id, ...);
  -sa_rc_t sa_syscall      (sa_t *sa, sa_syscall_t id, void (*fptr)(), void *fctx);
  +extern sa_rc_t sa_type         (sa_t  *__sa, sa_type_t    __id);
  +extern sa_rc_t sa_timeout      (sa_t  *__sa, sa_timeout_t __id, long __sec, long __usec);
  +extern sa_rc_t sa_buffer       (sa_t  *__sa, sa_buffer_t  __id, size_t __size);
  +extern sa_rc_t sa_option       (sa_t  *__sa, sa_option_t  __id, ...);
  +extern sa_rc_t sa_syscall      (sa_t  *__sa, sa_syscall_t __id, void (*__fptr)(), void *__fctx);
   
   /* socket connection operations */
  -sa_rc_t sa_bind         (sa_t *sa, sa_addr_t *laddr);
  -sa_rc_t sa_connect      (sa_t *sa, sa_addr_t *raddr);
  -sa_rc_t sa_listen       (sa_t *sa, int backlog);
  -sa_rc_t sa_accept       (sa_t *sa, sa_addr_t **caddr, sa_t **csa);
  -sa_rc_t sa_getremote    (sa_t *sa, sa_addr_t **raddr);
  -sa_rc_t sa_getlocal     (sa_t *sa, sa_addr_t **laddr);
  -sa_rc_t sa_getfd        (sa_t *sa, int *fd);
  -sa_rc_t sa_shutdown     (sa_t *sa, char *flags);
  +extern sa_rc_t sa_bind         (sa_t  *__sa, sa_addr_t  *__laddr);
  +extern sa_rc_t sa_connect      (sa_t  *__sa, sa_addr_t  *__raddr);
  +extern sa_rc_t sa_listen       (sa_t  *__sa, int __backlog);
  +extern sa_rc_t sa_accept       (sa_t  *__sa, sa_addr_t **__caddr, sa_t **__csa);
  +extern sa_rc_t sa_getremote    (sa_t  *__sa, sa_addr_t **__raddr);
  +extern sa_rc_t sa_getlocal     (sa_t  *__sa, sa_addr_t **__laddr);
  +extern sa_rc_t sa_getfd        (sa_t  *__sa, int *__fd);
  +extern sa_rc_t sa_shutdown     (sa_t  *__sa, char *__flags);
   
   /* socket input/output operations (stream communication) */
  -sa_rc_t sa_read         (sa_t *sa, char *buf, size_t buflen, size_t *bufdone);
  -sa_rc_t sa_readln       (sa_t *sa, char *buf, size_t buflen, size_t *bufdone);
  -sa_rc_t sa_write        (sa_t *sa, const char *buf, size_t buflen, size_t *bufdone);
  -sa_rc_t sa_writef       (sa_t *sa, const char *fmt, ...);
  -sa_rc_t sa_flush        (sa_t *sa);
  +extern sa_rc_t sa_read         (sa_t  *__sa, char       *__buf, size_t __buflen, size_t *__bufdone);
  +extern sa_rc_t sa_readln       (sa_t  *__sa, char       *__buf, size_t __buflen, size_t *__bufdone);
  +extern sa_rc_t sa_write        (sa_t  *__sa, const char *__buf, size_t __buflen, size_t *__bufdone);
  +extern sa_rc_t sa_writef       (sa_t  *__sa, const char *__fmt, ...);
  +extern sa_rc_t sa_flush        (sa_t  *__sa);
   
   /* socket input/output operations (datagram communication) */
  -sa_rc_t sa_recv         (sa_t *sa, char *buf, size_t buflen, size_t *bufdone, sa_addr_t **raddr);
  -sa_rc_t sa_send         (sa_t *sa, const char *buf, size_t buflen, size_t *bufdone, sa_addr_t *raddr);
  +extern sa_rc_t sa_recv         (sa_t  *__sa, sa_addr_t **__raddr, char       *__buf, size_t __buflen, size_t *__bufdone);
  +extern sa_rc_t sa_send         (sa_t  *__sa, sa_addr_t  *__raddr, const char *__buf, size_t __buflen, size_t *__bufdone);
  +extern sa_rc_t sa_sendf        (sa_t  *__sa, sa_addr_t  *__raddr, const char *__fmt, ...);
   
   /* error handling operations */
  -char   *sa_error        (sa_rc_t rv);
  +extern char   *sa_error        (sa_rc_t __rv);
   
   /* cleanup */
   #if defined(HAVE_CONFIG_H) && !defined(HAVE_SOCKLEN_T)

From ossp-cvs-owner@ossp.org  Sat Nov  9 15:45:12 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A4835767EE; Sat,  9 Nov 2002 15:45:12 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pcre devtool.conf
Message-Id: <20021109144512.A4835767EE@mail.ossp.org>
Date: Sat,  9 Nov 2002 15:45:12 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Nov-2002 15:45:12
  Branch: HEAD                             Handle: 2002110914451200

  Modified files:
    ossp-pkg/pcre           devtool.conf

  Log:
    upgrade to latest expected versions

  Summary:
    Revision    Changes     Path
    1.4         +3  -3      ossp-pkg/pcre/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/pcre/devtool.conf
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.conf
  --- ossp-pkg/pcre/devtool.conf	1 Aug 2002 11:28:00 -0000	1.3
  +++ ossp-pkg/pcre/devtool.conf	9 Nov 2002 14:45:12 -0000	1.4
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.1 "1.6.*" echo install mkdir fixperm tarball
  -    @autogen libtool  1.4.2 "1.4*"
  -    @autogen autoconf 2.53  "2.5[3-9]*"
  +    @autogen shtool   1.6.2 "1.6.*" echo install mkdir fixperm tarball
  +    @autogen libtool  1.4.3 "1.4*"
  +    @autogen autoconf 2.54  "2.5[3-9]*"
   
   %autoclean
       @autoclean shtool

From ossp-cvs-owner@ossp.org  Sat Nov  9 15:45:35 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C918D76B1B; Sat,  9 Nov 2002 15:45:34 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl configure.ac devtool.conf
Message-Id: <20021109144534.C918D76B1B@mail.ossp.org>
Date: Sat,  9 Nov 2002 15:45:34 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Nov-2002 15:45:34
  Branch: HEAD                             Handle: 2002110914453400

  Modified files:
    ossp-pkg/fsl            configure.ac devtool.conf

  Log:
    upgrade to latest expected versions

  Summary:
    Revision    Changes     Path
    1.13        +1  -1      ossp-pkg/fsl/configure.ac
    1.13        +3  -3      ossp-pkg/fsl/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/configure.ac
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 configure.ac
  --- ossp-pkg/fsl/configure.ac	1 Aug 2002 10:18:06 -0000	1.12
  +++ ossp-pkg/fsl/configure.ac	9 Nov 2002 14:45:34 -0000	1.13
  @@ -28,7 +28,7 @@
   dnl ##  configure.ac: GNU Autoconf source script
   dnl ##
   
  -AC_PREREQ(2.53)
  +AC_PREREQ(2.54)
   AC_INIT
   
   dnl #   announce our version
  Index: ossp-pkg/fsl/devtool.conf
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 devtool.conf
  --- ossp-pkg/fsl/devtool.conf	1 Aug 2002 11:43:04 -0000	1.12
  +++ ossp-pkg/fsl/devtool.conf	9 Nov 2002 14:45:34 -0000	1.13
  @@ -10,9 +10,9 @@
       done
   
   %autogen
  -    @autogen shtool   1.6.1 "1.6.*" all
  -    @autogen libtool  1.4.2 "1.4*"
  -    @autogen autoconf 2.53  "2.5[3-9]*"
  +    @autogen shtool   1.6.2 "1.6.*" all
  +    @autogen libtool  1.4.3 "1.4*"
  +    @autogen autoconf 2.54  "2.5[4-9]*"
   
       for name in l2 cfg pcre; do
           echo "===> lib_${name} (devtool autogen)"

From ossp-cvs-owner@ossp.org  Sat Nov  9 15:49:05 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B1D6E767EE; Sat,  9 Nov 2002 15:49:05 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.c
Message-Id: <20021109144905.B1D6E767EE@mail.ossp.org>
Date: Sat,  9 Nov 2002 15:49:05 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Nov-2002 15:49:05
  Branch: HEAD                             Handle: 2002110914490500

  Modified files:
    ossp-pkg/fsl            fsl.c

  Log:
    who said that cfg_destroy() now works? We've to reinvestigate...

  Summary:
    Revision    Changes     Path
    1.53        +1  -1      ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.52 -r1.53 fsl.c
  --- ossp-pkg/fsl/fsl.c	21 Oct 2002 12:51:23 -0000	1.52
  +++ ossp-pkg/fsl/fsl.c	9 Nov 2002 14:49:05 -0000	1.53
  @@ -798,7 +798,7 @@
           free(cpISF);
       if (cpIdent != NULL)
           free(cpIdent);
  -#if 1 /* FIXME */
  +#if 0 /* FIXME */
       if (cfg != NULL)
           if ((cfgrv = cfg_destroy(cfg)) != CFG_OK) {
               (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_destroy() failed with error %s (%d)", cp, cfgrv); CU(1); }

From ossp-cvs-owner@ossp.org  Sat Nov  9 17:07:53 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D1D2E76ADA; Sat,  9 Nov 2002 17:07:52 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth pth_sched.c
Message-Id: <20021109160752.D1D2E76ADA@mail.ossp.org>
Date: Sat,  9 Nov 2002 17:07:52 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Nov-2002 17:07:52
  Branch: HEAD                             Handle: 2002110916075200

  Modified files:
    ossp-pkg/pth            pth_sched.c

  Log:
    fix grammar while I'm poking around here ;)

  Summary:
    Revision    Changes     Path
    1.87        +4  -4      ossp-pkg/pth/pth_sched.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/pth_sched.c
  ============================================================
  $ cvs diff -u -r1.86 -r1.87 pth_sched.c
  --- ossp-pkg/pth/pth_sched.c	8 Nov 2002 16:17:47 -0000	1.86
  +++ ossp-pkg/pth/pth_sched.c	9 Nov 2002 16:07:52 -0000	1.87
  @@ -123,9 +123,9 @@
    * Update the average scheduler load.
    *
    * This is called on every context switch, but we have to adjust the
  - * average load value every second, only. When we're called more than
  + * average load value every second, only. If we're called more than
    * once per second we handle this by just calculating anything once
  - * and then do NOPs until the next ticks is over. When the scheduler
  + * and then do NOPs until the next ticks is over. If the scheduler
    * waited for more than once second (or a thread CPU burst lasted for
    * more than once second) we simulate the missing calculations. That's
    * no problem because we can assume that the number of ready threads
  @@ -320,7 +320,7 @@
           }
   
           /*
  -         * When previous thread is now marked as dead, kick it out
  +         * If previous thread is now marked as dead, kick it out
            */
           if (pth_current->state == PTH_STATE_DEAD) {
               pth_debug2("pth_scheduler: marking thread \"%s\" as dead", pth_current->name);
  @@ -332,7 +332,7 @@
           }
   
           /*
  -         * When thread wants to wait for an event
  +         * If thread wants to wait for an event
            * move it to waiting queue now
            */
           if (pth_current != NULL && pth_current->state == PTH_STATE_WAITING) {

From ossp-cvs-owner@ossp.org  Sat Nov  9 17:29:27 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0B5D0767EE; Sat,  9 Nov 2002 17:29:27 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog pth_lib.c pth_sched.c
Message-Id: <20021109162927.0B5D0767EE@mail.ossp.org>
Date: Sat,  9 Nov 2002 17:29:27 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Nov-2002 17:29:26
  Branch: HEAD                             Handle: 2002110916292600

  Modified files:
    ossp-pkg/pth            ChangeLog pth_lib.c pth_sched.c

  Log:
    Fixed error handling in pth_init(3): it now correctly
    returns an error instead of abort(3)'ing.

  Summary:
    Revision    Changes     Path
    1.600       +4  -0      ossp-pkg/pth/ChangeLog
    1.55        +6  -1      ossp-pkg/pth/pth_lib.c
    1.88        +9  -9      ossp-pkg/pth/pth_sched.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.599 -r1.600 ChangeLog
  --- ossp-pkg/pth/ChangeLog	9 Nov 2002 11:30:14 -0000	1.599
  +++ ossp-pkg/pth/ChangeLog	9 Nov 2002 16:29:26 -0000	1.600
  @@ -21,6 +21,10 @@
                     
     Changes between 2.0b1 and 2.0b2 (08-Nov-2002 to xx-Nov-2002)
   
  +   *) Fixed error handling in pth_init(3): it now correctly
  +      returns an error instead of abort(3)'ing.
  +      [Ralf S. Engelschall]
  +
      *) Added soft syscall mapping for nanosleep(3) and
         usleep(3) functions also to the Pthread API. 
         [Ralf S. Engelschall]
  Index: ossp-pkg/pth/pth_lib.c
  ============================================================
  $ cvs diff -u -r1.54 -r1.55 pth_lib.c
  --- ossp-pkg/pth/pth_lib.c	3 Nov 2002 11:15:04 -0000	1.54
  +++ ossp-pkg/pth/pth_lib.c	9 Nov 2002 16:29:26 -0000	1.55
  @@ -73,7 +73,10 @@
       pth_syscall_init();
   
       /* initialize the scheduler */
  -    pth_scheduler_init();
  +    if (!pth_scheduler_init()) {
  +        pth_shield { pth_syscall_kill(); }
  +        return pth_error(FALSE, EAGAIN);
  +    }
   
   #ifdef PTH_EX
       /* optional support for exceptional handling */
  @@ -94,6 +97,7 @@
           pth_shield {
               pth_attr_destroy(t_attr);
               pth_scheduler_kill();
  +            pth_syscall_kill();
           }
           return FALSE;
       }
  @@ -110,6 +114,7 @@
           pth_shield {
               pth_attr_destroy(t_attr);
               pth_scheduler_kill();
  +            pth_syscall_kill();
           }
           return FALSE;
       }
  Index: ossp-pkg/pth/pth_sched.c
  ============================================================
  $ cvs diff -u -r1.87 -r1.88 pth_sched.c
  --- ossp-pkg/pth/pth_sched.c	9 Nov 2002 16:07:52 -0000	1.87
  +++ ossp-pkg/pth/pth_sched.c	9 Nov 2002 16:29:26 -0000	1.88
  @@ -47,16 +47,15 @@
   static pth_time_t   pth_loadtickgap = PTH_TIME(1,0);
   
   /* initialize the scheduler ingredients */
  -intern void pth_scheduler_init(void)
  +intern int pth_scheduler_init(void)
   {
       /* create the internal signal pipe */
  -    if (pipe(pth_sigpipe) == -1) {
  -        fprintf(stderr, "**Pth** INIT: Cannot create internal pipe: %s\n",
  -                strerror(errno));
  -        abort();
  -    }
  -    pth_fdmode(pth_sigpipe[0], PTH_FDMODE_NONBLOCK);
  -    pth_fdmode(pth_sigpipe[1], PTH_FDMODE_NONBLOCK);
  +    if (pipe(pth_sigpipe) == -1)
  +        return pth_error(FALSE, errno);
  +    if (pth_fdmode(pth_sigpipe[0], PTH_FDMODE_NONBLOCK) == PTH_FDMODE_ERROR)
  +        return pth_error(FALSE, errno);
  +    if (pth_fdmode(pth_sigpipe[1], PTH_FDMODE_NONBLOCK) == PTH_FDMODE_ERROR)
  +        return pth_error(FALSE, errno);
   
       /* initialize the essential threads */
       pth_sched   = NULL;
  @@ -72,7 +71,8 @@
       /* initialize load support */
       pth_loadval = 1.0;
       pth_time_set(&pth_loadticknext, PTH_TIME_NOW);
  -    return;
  +
  +    return TRUE;
   }
   
   /* drop all threads (except for the currently active one) */

From ossp-cvs-owner@ossp.org  Sat Nov  9 17:55:24 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 30DF3767EE; Sat,  9 Nov 2002 17:55:24 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg cfg_grid.c
Message-Id: <20021109165524.30DF3767EE@mail.ossp.org>
Date: Sat,  9 Nov 2002 17:55:24 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   09-Nov-2002 17:55:24
  Branch: HEAD                             Handle: 2002110916552300

  Modified files:
    ossp-pkg/cfg            cfg_grid.c

  Log:
    fix cfg_grid_destroy

  Summary:
    Revision    Changes     Path
    1.3         +1  -0      ossp-pkg/cfg/cfg_grid.c
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/cfg_grid.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 cfg_grid.c
  --- ossp-pkg/cfg/cfg_grid.c	17 Jul 2002 15:04:08 -0000	1.2
  +++ ossp-pkg/cfg/cfg_grid.c	9 Nov 2002 16:55:23 -0000	1.3
  @@ -319,6 +319,7 @@
       while (seg_last != CFG_RING_SENTINEL(&grid->g_seg, cfg_grid_seg_t, gs_link)) {
           seg = CFG_RING_NEXT(seg_last, gs_link);
           free(seg_last);
  +        seg_last = seg;
       }
   
       /* destroy top-level grid structure */

From ossp-cvs-owner@ossp.org  Sat Nov  9 19:25:22 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 09F50767EE; Sat,  9 Nov 2002 19:25:21 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.c
Message-Id: <20021109182521.09F50767EE@mail.ossp.org>
Date: Sat,  9 Nov 2002 19:25:21 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Nov-2002 19:25:21
  Branch: HEAD                             Handle: 2002110918252100

  Modified files:
    ossp-pkg/fsl            fsl.c

  Log:
    cfg_destroy now works

  Summary:
    Revision    Changes     Path
    1.54        +0  -2      ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.53 -r1.54 fsl.c
  --- ossp-pkg/fsl/fsl.c	9 Nov 2002 14:49:05 -0000	1.53
  +++ ossp-pkg/fsl/fsl.c	9 Nov 2002 18:25:21 -0000	1.54
  @@ -798,11 +798,9 @@
           free(cpISF);
       if (cpIdent != NULL)
           free(cpIdent);
  -#if 0 /* FIXME */
       if (cfg != NULL)
           if ((cfgrv = cfg_destroy(cfg)) != CFG_OK) {
               (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_destroy() failed with error %s (%d)", cp, cfgrv); CU(1); }
  -#endif
       if (buf.base != NULL)
           free(buf.base);
       if (rc != 0)

From ossp-cvs-owner@ossp.org  Sat Nov  9 19:30:32 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CFCD376B24; Sat,  9 Nov 2002 19:30:31 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg THANKS ossp-pkg/fsl ChangeLog THANKS
Message-Id: <20021109183031.CFCD376B24@mail.ossp.org>
Date: Sat,  9 Nov 2002 19:30:31 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Nov-2002 19:30:31
  Branch: HEAD                             Handle: 2002110918302901

  Modified files:
    ossp-pkg/cfg            THANKS
    ossp-pkg/fsl            ChangeLog THANKS

  Log:
    update for release

  Summary:
    Revision    Changes     Path
    1.2         +1  -0      ossp-pkg/cfg/THANKS
    1.13        +11 -0      ossp-pkg/fsl/ChangeLog
    1.5         +1  -0      ossp-pkg/fsl/THANKS
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/THANKS
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 THANKS
  --- ossp-pkg/cfg/THANKS	2 Aug 2002 19:07:12 -0000	1.1
  +++ ossp-pkg/cfg/THANKS	9 Nov 2002 18:30:30 -0000	1.2
  @@ -19,4 +19,5 @@
     bugfixes, hints, gave platform feedback, etc. (in alphabetical order):
   
       o  Thomas Lotterer             <thomas@lotterer.net>
  +    o  Michael van Elst            <mlelstv@dev.de.cw.net>
   
  Index: ossp-pkg/fsl/ChangeLog
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 ChangeLog
  --- ossp-pkg/fsl/ChangeLog	21 Oct 2002 15:21:00 -0000	1.12
  +++ ossp-pkg/fsl/ChangeLog	9 Nov 2002 18:30:29 -0000	1.13
  @@ -8,6 +8,17 @@
   
     CHANGELOG
   
  +  Changes between 1.0.5 and 1.0.6 (09-Nov-2002)
  +
  +    *) Upgraded to the latest OSSP l2 and OSSP cfg and this way fixed
  +       cfg_destroy() problems and support for latest GNU Bison and GNU
  +       Flex.
  +       [Ralf S. Engelschall, Michael van Elst]
  +
  +    *) Upgraded build environment to GNU Autoconf 2.54, GNU Libtool
  +       1.4.3 and GNU Shtool 1.6.2.
  +       [Ralf S. Engelschall <rse@engelschall.com>]
  +
     Changes between 1.0.4 and 1.0.5 (21-Oct-2002)
   
       *) added support for Solaris 2.6
  Index: ossp-pkg/fsl/THANKS
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 THANKS
  --- ossp-pkg/fsl/THANKS	2 Aug 2002 11:32:16 -0000	1.4
  +++ ossp-pkg/fsl/THANKS	9 Nov 2002 18:30:29 -0000	1.5
  @@ -19,4 +19,5 @@
   
       o  Christoph Schug             <chris@schug.net>
       o  Michael Schloh v. Bennewitz <michael@schloh.com>
  +    o  Michael van Elst            <mlelstv@dev.de.cw.net>
   

From ossp-cvs-owner@ossp.org  Sat Nov  9 19:36:06 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6136B764E9; Sat,  9 Nov 2002 19:36:06 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl README fsl_version.c
Message-Id: <20021109183606.6136B764E9@mail.ossp.org>
Date: Sat,  9 Nov 2002 19:36:06 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Nov-2002 19:36:06
  Branch: HEAD                             Handle: 2002110918360500

  Modified files:
    ossp-pkg/fsl            README fsl_version.c

  Log:
    bump for release

  Summary:
    Revision    Changes     Path
    1.26        +1  -1      ossp-pkg/fsl/README
    1.13        +9  -9      ossp-pkg/fsl/fsl_version.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/README
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 README
  --- ossp-pkg/fsl/README	21 Oct 2002 15:21:00 -0000	1.25
  +++ ossp-pkg/fsl/README	9 Nov 2002 18:36:05 -0000	1.26
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_| |___/_|
    
     OSSP fsl - Faking/Flexible Syslog Library
  -  Version 1.0.5 (21-Oct-2002)
  +  Version 1.0.6 (09-Nov-2002)
   
     ABSTRACT
   
  Index: ossp-pkg/fsl/fsl_version.c
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 fsl_version.c
  --- ossp-pkg/fsl/fsl_version.c	21 Oct 2002 15:21:00 -0000	1.12
  +++ ossp-pkg/fsl/fsl_version.c	9 Nov 2002 18:36:05 -0000	1.13
  @@ -8,7 +8,7 @@
   #ifndef _FSL_VERSION_C_
   #define _FSL_VERSION_C_
   
  -#define FSL_VERSION 0x100205
  +#define FSL_VERSION 0x100206
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _FSL_VERSION_C_AS_HEADER_
   
   fsl_version_t fsl_version = {
  -    0x100205,
  -    "1.0.5",
  -    "1.0.5 (21-Oct-2002)",
  -    "This is OSSP fsl, Version 1.0.5 (21-Oct-2002)",
  -    "OSSP fsl 1.0.5 (21-Oct-2002)",
  -    "OSSP fsl/1.0.5",
  -    "@(#)OSSP fsl 1.0.5 (21-Oct-2002)",
  -    "$Id: fsl_version.c,v 1.12 2002/10/21 15:21:00 thl Exp $"
  +    0x100206,
  +    "1.0.6",
  +    "1.0.6 (09-Nov-2002)",
  +    "This is OSSP fsl, Version 1.0.6 (09-Nov-2002)",
  +    "OSSP fsl 1.0.6 (09-Nov-2002)",
  +    "OSSP fsl/1.0.6",
  +    "@(#)OSSP fsl 1.0.6 (09-Nov-2002)",
  +    "$Id: fsl_version.c,v 1.13 2002/11/09 18:36:05 rse Exp $"
   };
   
   #endif /* _FSL_VERSION_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Sat Nov  9 19:58:28 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4895076500; Sat,  9 Nov 2002 19:58:28 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl devtool.conf
Message-Id: <20021109185828.4895076500@mail.ossp.org>
Date: Sat,  9 Nov 2002 19:58:28 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Nov-2002 19:58:28
  Branch: HEAD                             Handle: 2002110918582700

  Modified files:
    ossp-pkg/fsl            devtool.conf

  Log:
    require --enable-maintainer for rolling tarball

  Summary:
    Revision    Changes     Path
    1.14        +1  -1      ossp-pkg/fsl/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/devtool.conf
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 devtool.conf
  --- ossp-pkg/fsl/devtool.conf	9 Nov 2002 14:45:34 -0000	1.13
  +++ ossp-pkg/fsl/devtool.conf	9 Nov 2002 18:58:27 -0000	1.14
  @@ -63,7 +63,7 @@
       ./devtool autoclean
       ./devtool autogen
       echo "+++ configuring"
  -    ./configure
  +    ./devtool configure
       echo "+++ building"
       make clean all man
       echo "+++ cleaning"

From ossp-cvs-owner@ossp.org  Sat Nov  9 20:03:49 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 265EF76519; Sat,  9 Nov 2002 20:03:48 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new news.txt ossp-web/pkg/lib/fsl index.wml ossp-...
Message-Id: <20021109190348.265EF76519@mail.ossp.org>
Date: Sat,  9 Nov 2002 20:03:48 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   09-Nov-2002 20:03:48
  Branch: HEAD                             Handle: 2002110919034601

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/fsl    index.wml

  Log:
    release OSSP fsl 1.0.6

  Summary:
    Revision    Changes     Path
    1.34        +1  -0      ossp-web/new/news.txt
    1.14        +2  -2      ossp-web/pkg/lib/fsl/index.wml
    1.36        +1  -1      ossp-web/pkg/lib/index.wml
  ____________________________________________________________________________

  Index: ossp-web/new/news.txt
  ============================================================
  $ cvs diff -u -r1.33 -r1.34 news.txt
  --- ossp-web/new/news.txt	8 Nov 2002 20:31:24 -0000	1.33
  +++ ossp-web/new/news.txt	9 Nov 2002 19:03:46 -0000	1.34
  @@ -1,3 +1,4 @@
  +09-Nov-2002: Released L<OSSP fsl> 1.0.6
   08-Nov-2002: Released L<GNU pth> 2.0b1
   07-Nov-2002: Released L<GNU pth> 2.0b0
   07-Nov-2002: Released L<OSSP sa> 1.0.1
  Index: ossp-web/pkg/lib/fsl/index.wml
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 index.wml
  --- ossp-web/pkg/lib/fsl/index.wml	1 Nov 2002 08:59:15 -0000	1.13
  +++ ossp-web/pkg/lib/fsl/index.wml	9 Nov 2002 19:03:47 -0000	1.14
  @@ -45,7 +45,7 @@
   <pkg_status
       name="fsl" assign="thl"
       genesis="Jul-2002"
  -    stable="1.0.5"   stable_date="21-Oct-2002"
  +    stable="1.0.6" stable_date="09-Nov-2002"
       unstable="none"  unstable_date="none"
   	done=100>
   
  @@ -56,7 +56,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/fsl/
       directory=$(FTP_ROOT_DIR)/pkg/lib/fsl/
       files="fsl-*.tar.gz" 
  -	stable="fsl-1.0.5.tar.gz" unstable="none">
  +	stable="fsl-1.0.6.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  Index: ossp-web/pkg/lib/index.wml
  ============================================================
  $ cvs diff -u -r1.35 -r1.36 index.wml
  --- ossp-web/pkg/lib/index.wml	8 Nov 2002 20:31:24 -0000	1.35
  +++ ossp-web/pkg/lib/index.wml	9 Nov 2002 19:03:47 -0000	1.36
  @@ -27,7 +27,7 @@
   			done=100 stable=1.0.1 unstable=none>
     <pkg_item name="fsl" longname="OSSP fsl" type="lib"
               desc="Faked/Flexible Syslog"
  -			done=100 stable=1.0.5 unstable=none>
  +			done=100 stable=1.0.6 unstable=none>
     <pkg_item name="var" longname="OSSP var" type="lib"
               desc="Variable Expansion"
   			done=95 stable=none unstable=0.9.0>

From ossp-cvs-owner@ossp.org  Sun Nov 10 13:12:25 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 59853764E9; Sun, 10 Nov 2002 13:12:25 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg AUTHORS ChangeLog README THANKS TODO aclocal....
Message-Id: <20021110121225.59853764E9@mail.ossp.org>
Date: Sun, 10 Nov 2002 13:12:25 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Nov-2002 13:12:25
  Branch: HEAD                             Handle: 2002111012122300

  Modified files:
    ossp-pkg/cfg            AUTHORS ChangeLog README THANKS TODO aclocal.m4
                            cfg-config.in cfg.pod cfg_buf.c cfg_data.c
                            cfg_fmt.c cfg_fmt.h cfg_grid.c cfg_main.c
                            cfg_node.c cfg_node.h cfg_syn.c cfg_syn_parse.y
                            cfg_syn_scan.l cfg_test.c cfg_test.cfg

  Log:
    remove trailing whitespaces

  Summary:
    Revision    Changes     Path
    1.2         +2  -2      ossp-pkg/cfg/AUTHORS
    1.4         +4  -4      ossp-pkg/cfg/ChangeLog
    1.4         +2  -2      ossp-pkg/cfg/README
    1.3         +2  -2      ossp-pkg/cfg/THANKS
    1.4         +24 -24     ossp-pkg/cfg/TODO
    1.2         +2  -2      ossp-pkg/cfg/aclocal.m4
    1.2         +1  -1      ossp-pkg/cfg/cfg-config.in
    1.9         +22 -22     ossp-pkg/cfg/cfg.pod
    1.6         +2  -2      ossp-pkg/cfg/cfg_buf.c
    1.6         +2  -2      ossp-pkg/cfg/cfg_data.c
    1.3         +37 -37     ossp-pkg/cfg/cfg_fmt.c
    1.3         +7  -7      ossp-pkg/cfg/cfg_fmt.h
    1.4         +22 -22     ossp-pkg/cfg/cfg_grid.c
    1.7         +5  -5      ossp-pkg/cfg/cfg_main.c
    1.15        +33 -33     ossp-pkg/cfg/cfg_node.c
    1.7         +1  -1      ossp-pkg/cfg/cfg_node.h
    1.14        +9  -9      ossp-pkg/cfg/cfg_syn.c
    1.4         +16 -16     ossp-pkg/cfg/cfg_syn_parse.y
    1.13        +2  -2      ossp-pkg/cfg/cfg_syn_scan.l
    1.9         +1  -1      ossp-pkg/cfg/cfg_test.c
    1.2         +2  -2      ossp-pkg/cfg/cfg_test.cfg
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/AUTHORS
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 AUTHORS
  --- ossp-pkg/cfg/AUTHORS	2 Aug 2002 19:07:12 -0000	1.1
  +++ ossp-pkg/cfg/AUTHORS	10 Nov 2002 12:12:23 -0000	1.2
  @@ -1,5 +1,5 @@
  -   _        ___  ____ ____  ____          __       
  -  |_|_ _   / _ \/ ___/ ___||  _ \    ___ / _| __ _ 
  +   _        ___  ____ ____  ____          __
  +  |_|_ _   / _ \/ ___/ ___||  _ \    ___ / _| __ _
     _|_||_| | | | \___ \___ \| |_) |  / __| |_ / _` |
    |_||_|_| | |_| |___) |__) |  __/  | (__|  _| (_| |
     |_|_|_|  \___/|____/____/|_|      \___|_|  \__, |
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	2 Aug 2002 19:18:00 -0000	1.3
  +++ ossp-pkg/cfg/ChangeLog	10 Nov 2002 12:12:23 -0000	1.4
  @@ -1,14 +1,14 @@
  -   _        ___  ____ ____  ____          __       
  -  |_|_ _   / _ \/ ___/ ___||  _ \    ___ / _| __ _ 
  +   _        ___  ____ ____  ____          __
  +  |_|_ _   / _ \/ ___/ ___||  _ \    ___ / _| __ _
     _|_||_| | | | \___ \___ \| |_) |  / __| |_ / _` |
    |_||_|_| | |_| |___) |__) |  __/  | (__|  _| (_| |
     |_|_|_|  \___/|____/____/|_|      \___|_|  \__, |
                                                |___/
     OSSP cfg - Configuration Parsing
  -  
  +
     CHANGELOG
   
  -  Changes between 0.9.0 and 0.9.1 (01-Jul-2002 to 02-Aug-2002)
  +  Changes between 0.9.0 and 0.9.1 (01-Jul-2002 to xx-Nov-2002)
   
      *) Enhanced test suite by comparing against previously saved output
         [Ralf S. Engelschall <rse@engelschall.com>]
  Index: ossp-pkg/cfg/README
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 README
  --- ossp-pkg/cfg/README	2 Aug 2002 19:07:12 -0000	1.3
  +++ ossp-pkg/cfg/README	10 Nov 2002 12:12:23 -0000	1.4
  @@ -1,5 +1,5 @@
  -   _        ___  ____ ____  ____          __       
  -  |_|_ _   / _ \/ ___/ ___||  _ \    ___ / _| __ _ 
  +   _        ___  ____ ____  ____          __
  +  |_|_ _   / _ \/ ___/ ___||  _ \    ___ / _| __ _
     _|_||_| | | | \___ \___ \| |_) |  / __| |_ / _` |
    |_||_|_| | |_| |___) |__) |  __/  | (__|  _| (_| |
     |_|_|_|  \___/|____/____/|_|      \___|_|  \__, |
  Index: ossp-pkg/cfg/THANKS
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 THANKS
  --- ossp-pkg/cfg/THANKS	9 Nov 2002 18:30:30 -0000	1.2
  +++ ossp-pkg/cfg/THANKS	10 Nov 2002 12:12:23 -0000	1.3
  @@ -1,5 +1,5 @@
  -   _        ___  ____ ____  ____          __       
  -  |_|_ _   / _ \/ ___/ ___||  _ \    ___ / _| __ _ 
  +   _        ___  ____ ____  ____          __
  +  |_|_ _   / _ \/ ___/ ___||  _ \    ___ / _| __ _
     _|_||_| | | | \___ \___ \| |_) |  / __| |_ / _` |
    |_||_|_| | |_| |___) |__) |  __/  | (__|  _| (_| |
     |_|_|_|  \___/|____/____/|_|      \___|_|  \__, |
  Index: ossp-pkg/cfg/TODO
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 TODO
  --- ossp-pkg/cfg/TODO	5 Oct 2002 15:49:23 -0000	1.3
  +++ ossp-pkg/cfg/TODO	10 Nov 2002 12:12:23 -0000	1.4
  @@ -1,5 +1,5 @@
  -   _        ___  ____ ____  ____          __       
  -  |_|_ _   / _ \/ ___/ ___||  _ \    ___ / _| __ _ 
  +   _        ___  ____ ____  ____          __
  +  |_|_ _   / _ \/ ___/ ___||  _ \    ___ / _| __ _
     _|_||_| | | | \___ \___ \| |_) |  / __| |_ / _` |
    |_||_|_| | |_| |___) |__) |  __/  | (__|  _| (_| |
     |_|_|_|  \___/|____/____/|_|      \___|_|  \__, |
  @@ -7,7 +7,7 @@
     OSSP cfg - Configuration Parsing
   
     TODO
  - 
  +
     o finish/fix implementation of cfg_node_select()
     o implement cfg_node_find()
     o fix internal linkage with "left sibling" pointer
  @@ -33,7 +33,7 @@
   - wieso geht sample.cfg nicht als Arg bei "make check"?
   
   - newline in error message
  -$ ./cfg_test sample2.cfg 
  +$ ./cfg_test sample2.cfg
   ERROR: <line 7, column 1: `1b;
   <}> quu'>
   
  @@ -41,7 +41,7 @@
   
   rewrite-uri <regex> <subst> { <rewrite-cond> }
   rewrite-uri ^/(.*) /path/$1 --redirect=permanent q{
  -    %{SOURCE} != "x" 
  +    %{SOURCE} != "x"
   };
   
   
  @@ -53,7 +53,7 @@
       - option ("--foo=BAR") via name & regex
       - argument ("foo") via regex
     - amount:
  -    - 1    
  +    - 1
       - 0/1  ?
       - 0..n *
       - 1..n +
  @@ -89,16 +89,16 @@
   TOK ::= string   "..."
   
   config        ::= SEQ(directory|user|rewrite|access)
  -directory     ::= DIR("directory",<O>*,<A>) 
  -dir_options   ::= 
  +directory     ::= DIR("directory",<O>*,<A>)
  +dir_options   ::=
   user          ::= DIR("user",/^[a-z]$/)
  -rewrite       ::= 
  +rewrite       ::=
   access        ::= "access" ("allow"|"deny"):action SEQ(access_list):acl
   access_list   ::= m/^!?%{ID}$/
   
   acl           ::= "acl" TOK:name acl_list
   acl_list      ::= SEQ(acl_entry)
  -acl_entry     ::= acl_action "from" net-addr:src "to" net-addr:dst 
  +acl_entry     ::= acl_action "from" net-addr:src "to" net-addr:dst
   acl_action    ::= "allow"|"deny"
   net_addr      ::= net_hostname | net_ipv4addr | net_ipv6addr
   
  @@ -124,28 +124,28 @@
   ---------------------------------------------------------------------------
   
   sequence ROOT {
  -    directive foo; 
  +    directive foo;
       directive bar;
       directive quux --count=1:oo;
   };
   sequence bar-seq {
  -    directive foo --count=0:1; 
  +    directive foo --count=0:1;
       directive baz --count=1:oo;
   };
  -directive foo { 
  +directive foo {
       token - on|off|yes|no;
   };
   directive bar {
  -    token path /.*; 
  +    token path /.*;
       sequence bar-seq;
   };
  -directive baz { 
  -    option fuck; 
  -    option fuck2; 
  +directive baz {
  +    option fuck;
  +    option fuck2;
       sequence {
  -        directive foo { 
  +        directive foo {
               option nase (baer|hugo);
  -            option foo [0-9]; 
  +            option foo [0-9];
               token ip-address;
           };
       };
  @@ -182,8 +182,8 @@
   -------------------------------------------------------------------------------
   
   directive token {
  -    opt1      { /.../ opt2=/.../ } { 
  -    directive { /^token$/ }; 
  +    opt1      { /.../ opt2=/.../ } {
  +    directive { /^token$/ };
       name      { m/.../; m/^[a-zA-Z][a-zA-Z0-9_.-]*$/ } ?;
       name      { m/(...|[a-zA-Z][a-zA-Z0-9_.-]*$)/ } ?;
       regex     { m/^.+$/ };
  @@ -195,14 +195,14 @@
   a?b((c|d)+e)?f
   
   A m/a/ ?
  -B m/b/ 
  +B m/b/
   {
       {
           C m/c/ ;
  -        D m/d/ 
  +        D m/d/
       } +
       E m/e/
  -} ? 
  +} ?
   F f
   
   <directive-match> ::= <token-match>+
  Index: ossp-pkg/cfg/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 aclocal.m4
  --- ossp-pkg/cfg/aclocal.m4	9 Jul 2002 08:29:19 -0000	1.1
  +++ ossp-pkg/cfg/aclocal.m4	10 Nov 2002 12:12:23 -0000	1.2
  @@ -244,7 +244,7 @@
   if test ".$enable_maintainer" = .yes; then
       bison_version=""
       for prog in bison bison-beta bison-alpha bison-snap; do
  -        AC_PATH_PROG($1, $prog, NA) 
  +        AC_PATH_PROG($1, $prog, NA)
           if test ".$$1" != .NA; then
               bison_version=`($$1 --version | head -1 | sed -e 's;^[[^0-9]]*\([[0-9]][[0-9.]]*\).*;\1;') 2>/dev/null`
               case "$bison_version" in
  @@ -273,7 +273,7 @@
   if test ".$enable_maintainer" = .yes; then
       flex_version=""
       for prog in flex flex-beta flex-alpha flex-snap; do
  -        AC_PATH_PROG($1, $prog, NA) 
  +        AC_PATH_PROG($1, $prog, NA)
           if test ".$$1" != .NA; then
               flex_version=`($$1 --version | head -1 | sed -e 's;^[[^0-9]]*\([[0-9]][[0-9.]]*\).*;\1;') 2>/dev/null`
               case "$flex_version" in
  Index: ossp-pkg/cfg/cfg-config.in
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 cfg-config.in
  --- ossp-pkg/cfg/cfg-config.in	9 Jul 2002 08:29:19 -0000	1.1
  +++ ossp-pkg/cfg/cfg-config.in	10 Nov 2002 12:12:23 -0000	1.2
  @@ -29,7 +29,7 @@
   ##  cfg-config.in: OSSP cfg build utility
   ##
   
  -DIFS=' 	
  +DIFS=' 
   '
   
   prefix="@prefix@"
  Index: ossp-pkg/cfg/cfg.pod
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 cfg.pod
  --- ossp-pkg/cfg/cfg.pod	5 Oct 2002 15:49:23 -0000	1.8
  +++ ossp-pkg/cfg/cfg.pod	10 Nov 2002 12:12:23 -0000	1.9
  @@ -61,26 +61,26 @@
   
   =item B<API Functions:>
   
  -cfg_create,     
  -cfg_destroy,    
  -cfg_error,      
  -cfg_version,    
  -cfg_import,     
  -cfg_export,     
  +cfg_create,
  +cfg_destroy,
  +cfg_error,
  +cfg_version,
  +cfg_import,
  +cfg_export,
   cfg_node_create,
   cfg_node_destroy,
  -cfg_node_clone, 
  -cfg_node_set,   
  -cfg_node_get,   
  -cfg_node_root,  
  +cfg_node_clone,
  +cfg_node_set,
  +cfg_node_get,
  +cfg_node_root,
   cfg_node_select,
  -cfg_node_find,  
  -cfg_node_apply, 
  -cfg_node_cmp,   
  -cfg_node_link,  
  +cfg_node_find,
  +cfg_node_apply,
  +cfg_node_cmp,
  +cfg_node_link,
   cfg_node_unlink,
  -cfg_data_set,   
  -cfg_data_get,   
  +cfg_data_set,
  +cfg_data_get,
   cfg_data_ctrl
   
   =back
  @@ -110,7 +110,7 @@
                | B<directive>
                | B<directive> B<SEP> B<sequence>
   
  -B<directive>  ::= B<token> 
  +B<directive>  ::= B<token>
                | B<token> B<directive>
   
   B<token>      ::= B<OPEN> B<sequence> B<CLOSE>
  @@ -224,7 +224,7 @@
    parent  ..
    lbroth  ->
    rbroth  <-
  - child[1] 
  + child[1]
    child[L]
   
    virtualhost[2].directory
  @@ -238,8 +238,8 @@
   B<select>           ::= I<empty>
                      | B<select-step> B<select>
   
  -B<select-step>      ::= B<select-direction> 
  -                     B<select-pattern> 
  +B<select-step>      ::= B<select-direction>
  +                     B<select-pattern>
                        B<select-filter>
   
   B<select-direction> ::= "./"        # current node
  @@ -253,7 +253,7 @@
                      | "//"        # descendant nodes
   
   B<select-pattern>   ::= /</ B<regex> />/
  -                   | B<token> 
  +                   | B<token>
   
   B<select-filter>    ::= I<empty>
                      | /\[/ B<filter-range> /\]/
  @@ -262,7 +262,7 @@
                      | B<num> /,/          # short for: num,-1
                      | /,/ B<num>          # short for: 1,num
                      | B<num> /,/ B<num>
  -                   
  +
   B<num>              ::= /^[+-]?[0-9]+/
   
   B<regex>            ::= "Regular Expression (PCRE-based)"
  Index: ossp-pkg/cfg/cfg_buf.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 cfg_buf.c
  --- ossp-pkg/cfg/cfg_buf.c	17 Jul 2002 15:04:08 -0000	1.5
  +++ ossp-pkg/cfg/cfg_buf.c	10 Nov 2002 12:12:23 -0000	1.6
  @@ -112,8 +112,8 @@
           return CFG_ERR_FMT;
       if ((rc = cfg_buf_resize(buf, n)) != CFG_OK)
           return rc;
  -    if ((n = cfg_fmt_vsprintf(buf->buf_ptr + buf->buf_len, 
  -                              buf->buf_size - buf->buf_len, 
  +    if ((n = cfg_fmt_vsprintf(buf->buf_ptr + buf->buf_len,
  +                              buf->buf_size - buf->buf_len,
                                 fmt, ap)) == -1)
           return CFG_ERR_FMT;
       buf->buf_len += n;
  Index: ossp-pkg/cfg/cfg_data.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 cfg_data.c
  --- ossp-pkg/cfg/cfg_data.c	9 Aug 2002 20:37:12 -0000	1.5
  +++ ossp-pkg/cfg/cfg_data.c	10 Nov 2002 12:12:23 -0000	1.6
  @@ -128,7 +128,7 @@
                   data2->value.s = NULL;
           }
           else {
  -            memcpy((void *)&(data2->value), 
  +            memcpy((void *)&(data2->value),
                      (void *)&(data->value), sizeof(cfg_data_value_t));
           }
       }
  @@ -162,7 +162,7 @@
           case CFG_DATA_ATTR_VALUE: {
               switch (data->type) {
                   case CFG_DATA_TYPE_PTR: {
  -                    data->value.p = (void *)va_arg(ap, void *); 
  +                    data->value.p = (void *)va_arg(ap, void *);
                       break;
                   }
                   case CFG_DATA_TYPE_STR: {
  Index: ossp-pkg/cfg/cfg_fmt.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 cfg_fmt.c
  --- ossp-pkg/cfg/cfg_fmt.c	17 Jul 2002 15:04:08 -0000	1.2
  +++ ossp-pkg/cfg/cfg_fmt.c	10 Nov 2002 12:12:23 -0000	1.3
  @@ -129,7 +129,7 @@
   #define FLOAT_DIGITS    6
   #define EXPONENT_LENGTH 10
   
  -/* NUM_BUF_SIZE is the size of the buffer used for arithmetic 
  +/* NUM_BUF_SIZE is the size of the buffer used for arithmetic
      conversions. This is a magic number; do NOT decrease it! */
   #define NUM_BUF_SIZE    512
   #define NDIG            80
  @@ -149,7 +149,7 @@
   #define cfg_fmt_islower(c)  (islower(((unsigned char)(c))))
   #define cfg_fmt_tolower(c)  (tolower((unsigned char)(c)))
   
  -/* 
  +/*
    * Convert decimal number to its string representation. The number of
    * digits is specified by ndigit decpt is set to the position of the
    * decimal point sign is set to 0 for positive, 1 for negative. buf must
  @@ -164,10 +164,10 @@
   
   static char *
   cfg_fmt_cvt(
  -    double arg, 
  -    int ndigits, 
  -    int *decpt, 
  -    int *sign, 
  +    double arg,
  +    int ndigits,
  +    int *decpt,
  +    int *sign,
       int eflag,
       char *buf)
   {
  @@ -243,9 +243,9 @@
   
   static char *
   cfg_fmt_gcvt(
  -    double number, 
  -    int ndigit, 
  -    char *buf, 
  +    double number,
  +    int ndigit,
  +    char *buf,
       int altform)
   {
       int sign;
  @@ -327,7 +327,7 @@
   }
   
   /*
  - * Convert a string to decimal value 
  + * Convert a string to decimal value
    */
   #define NUM(c) ((c) - '0')
   #define STR_TO_DEC(str, num) {    \
  @@ -337,7 +337,7 @@
           num += NUM(*str++) ;      \
       }                             \
   }
  -     
  +
   /*
    * This macro does zero padding so that the precision requirement is
    * satisfied. The padding is done by adding '0's to the left of the
  @@ -352,7 +352,7 @@
       }
   
   /*
  - * This macro does padding. 
  + * This macro does padding.
    * The padding is done by printing the character ch.
    */
   #define PAD(width, len, ch) \
  @@ -386,9 +386,9 @@
    */
   static char *
   conv_10(
  -    register long_int num, 
  +    register long_int num,
       register int is_unsigned,
  -    register int *is_negative, 
  +    register int *is_negative,
       char *buf_end,
       register size_t *len)
   {
  @@ -401,7 +401,7 @@
       }
       else {
           *is_negative = (num < 0);
  -        /* On a 2's complement machine, negating the most negative integer 
  +        /* On a 2's complement machine, negating the most negative integer
              results in a number that cannot be represented as a signed integer.
              Here is what we do to obtain the number's magnitude:
                   a. add 1 to the number
  @@ -428,9 +428,9 @@
   
   static char *
   conv_10_quad(
  -    quad_int num, 
  +    quad_int num,
       register int is_unsigned,
  -    register int *is_negative, 
  +    register int *is_negative,
       char *buf_end,
       register size_t *len)
   {
  @@ -443,7 +443,7 @@
       }
       else {
           *is_negative = (num < 0);
  -        /* On a 2's complement machine, negating the most negative integer 
  +        /* On a 2's complement machine, negating the most negative integer
              result in a number that cannot be represented as a signed integer.
              Here is what we do to obtain the number's magnitude:
                   a. add 1 to the number
  @@ -475,12 +475,12 @@
    */
   static char *
   conv_fp(
  -    register char format, 
  +    register char format,
       register double num,
  -    int add_dp, 
  -    int precision, 
  +    int add_dp,
  +    int precision,
       int *is_negative,
  -    char *buf, 
  +    char *buf,
       size_t *len)
   {
       register char *s = buf;
  @@ -536,7 +536,7 @@
           *s++ = format;          /* either e or E */
           decimal_point--;
           if (decimal_point != 0) {
  -            p = conv_10((long_int) decimal_point, FALSE, &exponent_is_negative, 
  +            p = conv_10((long_int) decimal_point, FALSE, &exponent_is_negative,
                           &temp[EXPONENT_LENGTH], &t_len);
               *s++ = exponent_is_negative ? '-' : '+';
               /* Make sure the exponent has at least 2 digits */
  @@ -573,10 +573,10 @@
   
   static char *
   conv_p2(
  -    register u_long_int num, 
  +    register u_long_int num,
       register int nbits,
  -    char format, 
  -    char *buf_end, 
  +    char format,
  +    char *buf_end,
       register size_t *len)
   {
       register int mask = (1 << nbits) - 1;
  @@ -593,10 +593,10 @@
   
   static char *
   conv_p2_quad(
  -    u_quad_int num, 
  +    u_quad_int num,
       register int nbits,
  -    char format, 
  -    char *buf_end, 
  +    char format,
  +    char *buf_end,
       register size_t *len)
   {
       register int mask = (1 << nbits) - 1;
  @@ -611,14 +611,14 @@
       return p;
   }
   
  -/* 
  +/*
    * cfg_fmt_format(), the generic printf-style formatting routine
    * and heart of this piece of source.
    */
  -int 
  +int
   cfg_fmt_format(
  -    cfg_fmt_format_t *vbuff, 
  -    const char *fmt, 
  +    cfg_fmt_format_t *vbuff,
  +    const char *fmt,
       va_list ap)
   {
       register char *sp;
  @@ -912,7 +912,7 @@
                       else {
                           /* use &num_buf[1], so that we have room for the sign */
                           s = conv_fp(*fmt, fp_num, alternate_form,
  -                                    (adjust_precision == FALSE) ? FLOAT_DIGITS : precision, 
  +                                    (adjust_precision == FALSE) ? FLOAT_DIGITS : precision,
                                       &is_negative, &num_buf[1], &s_len);
                           if (is_negative)
                               prefix_char = '-';
  @@ -987,7 +987,7 @@
                       break;
   
                   /*
  -                 * Pointer argument type. 
  +                 * Pointer argument type.
                    */
                   case 'p':
   #if defined(SIZEOF_LONG_LONG) && (SIZEOF_LONG_LONG == SIZEOF_VOID_P)
  @@ -1021,7 +1021,7 @@
                       s = NULL;
                       if (vbuff->format != NULL) {
                           vbuff->format(vbuff,
  -                                      &prefix_char, &pad_char, &s, &s_len, 
  +                                      &prefix_char, &pad_char, &s, &s_len,
                                         num_buf, NUM_BUF_SIZE, extinfo, *fmt, &ap);
                           if (s == NULL)
                               return -1;
  @@ -1052,7 +1052,7 @@
               }
   
               /*
  -             * Print the string s. 
  +             * Print the string s.
                */
               for (i = s_len; i != 0; i--) {
                   INS_CHAR(*s, sp, bep, cc);
  Index: ossp-pkg/cfg/cfg_fmt.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 cfg_fmt.h
  --- ossp-pkg/cfg/cfg_fmt.h	17 Jul 2002 15:04:08 -0000	1.2
  +++ ossp-pkg/cfg/cfg_fmt.h	10 Nov 2002 12:12:23 -0000	1.3
  @@ -51,17 +51,17 @@
           char *num_buf,                   /* input  arg: temporary buffer */
           int num_buf_size,                /* input  arg: temporary buffer len */
           char *extinfo,                   /* input  arg: extension information */
  -        char fmt_char,                   /* input  arg: current formatting character */ 
  +        char fmt_char,                   /* input  arg: current formatting character */
           va_list *ap                      /* in/out arg: variable argument pointer */
       );
   
       /* arbitrary passed-through application data */
  -    union { 
  -        int i;                        
  -        long l; 
  -        double d; 
  -        void *vp; 
  -    } data[6];                           
  +    union {
  +        int i;
  +        long l;
  +        double d;
  +        void *vp;
  +    } data[6];
   };
   
   typedef struct cfg_fmt_format_st cfg_fmt_format_t;
  Index: ossp-pkg/cfg/cfg_grid.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 cfg_grid.c
  --- ossp-pkg/cfg/cfg_grid.c	9 Nov 2002 16:55:23 -0000	1.3
  +++ ossp-pkg/cfg/cfg_grid.c	10 Nov 2002 12:12:23 -0000	1.4
  @@ -34,7 +34,7 @@
    *  size objects. Inside OSSP cfg we have lots of those objects and
    *  if we would manage them directly through malloc(3) it would be to
    *  run-time expensive and waste too much total memory.
  - *  
  + *
    *  It works by collecting together larger segments (cfg_grid_seg_t) of
    *  those fixed size objects (cfg_grid_tile_t) and linking them into
    *  a top-level grid structure (cfg_grid_t). The number of tiles in a
  @@ -45,7 +45,7 @@
    *  arranged as a linear array after a heading linkage structure. The
    *  free tiles are remembered in a single linked list. So the grid in
    *  memory looks like this:
  - *  
  + *
    *  -----BEGIN EMBEDDED OBJECT-----
    *  Content-type: application/fig
    *  Description: grid memory allocator memory architecture
  @@ -199,7 +199,7 @@
       int                            g_tile_num_first;   /* number of tiles in first segment */
   };
   
  -/* 
  +/*
    * Align a size to the next larger or equal size which is likely to have the
    * longest *relevant* CPU-specific memory word alignment restrictions.
    */
  @@ -216,10 +216,10 @@
   }
   
   /* create a grid segment [INTERNAL] */
  -static cfg_rc_t 
  +static cfg_rc_t
   cfg_grid_seg_create(
  -    cfg_grid_seg_t **pseg, 
  -    size_t tile_size, 
  +    cfg_grid_seg_t **pseg,
  +    size_t tile_size,
       int tile_num)
   {
       size_t seg_top_size;
  @@ -275,7 +275,7 @@
           return CFG_ERR_ARG;
       if (tile_num < 1)
           return CFG_ERR_ARG;
  -    
  +
       /* determine (aligned) sizes */
       tile_size = cfg_mem_align(tile_size);
   
  @@ -303,13 +303,13 @@
   }
   
   /* destroy a grid */
  -cfg_rc_t 
  +cfg_rc_t
   cfg_grid_destroy(
       cfg_grid_t *grid)
   {
       cfg_grid_seg_t *seg;
       cfg_grid_seg_t *seg_last;
  -    
  +
       /* consistency checks */
       if (grid == NULL)
           return CFG_ERR_ARG;
  @@ -385,9 +385,9 @@
   }
   
   /* find grid segment where tile is stored [INTERNAL] */
  -static cfg_rc_t 
  +static cfg_rc_t
   cfg_grid_seg_find(
  -    cfg_grid_t *grid, 
  +    cfg_grid_t *grid,
       cfg_grid_seg_t **pseg,
       cfg_grid_tile_t *tile)
   {
  @@ -395,7 +395,7 @@
   
       seg = CFG_RING_FIRST(&grid->g_seg);
       while (seg != CFG_RING_SENTINEL(&grid->g_seg, cfg_grid_seg_t, gs_link)) {
  -        if (   seg->gs_tile_base <= tile 
  +        if (   seg->gs_tile_base <= tile
               && tile < (seg->gs_tile_base+(grid->g_tile_size*seg->gs_tile_num))) {
               if (pseg != NULL)
                   *pseg = seg;
  @@ -407,9 +407,9 @@
   }
   
   /* free a tile to a grid */
  -cfg_rc_t 
  +cfg_rc_t
   cfg_grid_free(
  -    cfg_grid_t *grid, 
  +    cfg_grid_t *grid,
       void *_tile)
   {
       cfg_grid_seg_t *seg;
  @@ -422,7 +422,7 @@
       /* consistency checks */
       if (grid == NULL || tile == NULL)
           return CFG_ERR_ARG;
  -    
  +
       /* find segment of tile */
       if ((rc = cfg_grid_seg_find(grid, &seg, tile)) != CFG_OK)
           return rc;
  @@ -443,13 +443,13 @@
   }
   
   /* test whether a tile is inside a grid */
  -cfg_rc_t 
  +cfg_rc_t
   cfg_grid_inside(
  -    cfg_grid_t *grid, 
  +    cfg_grid_t *grid,
       void *_tile)
   {
       cfg_grid_tile_t *tile;
  -    
  +
       /* cast to internal structure */
       tile = (cfg_grid_tile_t *)_tile;
   
  @@ -462,11 +462,11 @@
   }
   
   /* determine grid statistics */
  -cfg_rc_t 
  +cfg_rc_t
   cfg_grid_stat(
  -    cfg_grid_t *grid, 
  -    int *pchunks, 
  -    int *pbytes_mgmt, int *pbytes_used, int *pbytes_free, 
  +    cfg_grid_t *grid,
  +    int *pchunks,
  +    int *pbytes_mgmt, int *pbytes_used, int *pbytes_free,
       int *ptiles_used, int *ptiles_free)
   {
       cfg_grid_seg_t *seg;
  Index: ossp-pkg/cfg/cfg_main.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 cfg_main.c
  --- ossp-pkg/cfg/cfg_main.c	9 Nov 2002 14:15:55 -0000	1.6
  +++ ossp-pkg/cfg/cfg_main.c	10 Nov 2002 12:12:23 -0000	1.7
  @@ -166,8 +166,8 @@
           }
       }
       /* FIXME: CFG_FMT_XML */
  -    else 
  -        return CFG_ERR_INT; 
  +    else
  +        return CFG_ERR_INT;
   
       /* FIXME: merge: cfg->root[node] := cfg->root[node] + root */
       cfg->root = root;
  @@ -190,11 +190,11 @@
               return rv;
       }
       /* FIXME: CFG_FMT_XML */
  -    else 
  -        return CFG_ERR_INT; 
  +    else
  +        return CFG_ERR_INT;
   
       /* provide output */
  -    if (ex_len == 0) 
  +    if (ex_len == 0)
           *ex_ptr = output;
       else {
           n = strlen(output);
  Index: ossp-pkg/cfg/cfg_node.c
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 cfg_node.c
  --- ossp-pkg/cfg/cfg_node.c	1 Aug 2002 11:20:39 -0000	1.14
  +++ ossp-pkg/cfg/cfg_node.c	10 Nov 2002 12:12:23 -0000	1.15
  @@ -260,7 +260,7 @@
               cfg_node_t *n;
               if (k == NULL)
                   return CFG_ERR_ARG;
  -            *k = 0; 
  +            *k = 0;
               n = node;
               while ((n = n->parent) != NULL)
                   (*k)++;
  @@ -316,18 +316,18 @@
       return CFG_OK;
   }
   
  -static cfg_rc_t 
  +static cfg_rc_t
   cfg_node_select_step1(
       cfg_t *, cfg_node_t *, cfg_node_t ***, long *, const char *);
  -static cfg_rc_t 
  +static cfg_rc_t
   cfg_node_select_step2(
       cfg_t *, cfg_node_t *, cfg_node_t ***, long *, const char *, const char *, size_t, long, long, long *);
   
  -static cfg_rc_t 
  +static cfg_rc_t
   cfg_node_select_step3(
  -    cfg_t *cfg, 
  -    cfg_node_t *node, 
  -    cfg_node_t ***result_vec, long *result_len, 
  +    cfg_t *cfg,
  +    cfg_node_t *node,
  +    cfg_node_t ***result_vec, long *result_len,
       const char *spec,
       const char *cpSel, size_t nSel,
       long nFilMin, long nFilMax,
  @@ -359,11 +359,11 @@
       return rc;
   }
   
  -static cfg_rc_t 
  +static cfg_rc_t
   cfg_node_select_step2(
  -    cfg_t *cfg, 
  -    cfg_node_t *node, 
  -    cfg_node_t ***result_vec, long *result_len, 
  +    cfg_t *cfg,
  +    cfg_node_t *node,
  +    cfg_node_t ***result_vec, long *result_len,
       const char *spec,
       const char *cpSel, size_t nSel,
       long nFilMin, long nFilMax,
  @@ -459,11 +459,11 @@
       return rc;
   }
   
  -static cfg_rc_t 
  +static cfg_rc_t
   cfg_node_select_step1(
  -    cfg_t *cfg, 
  -    cfg_node_t *node, 
  -    cfg_node_t ***result_vec, long *result_len, 
  +    cfg_t *cfg,
  +    cfg_node_t *node,
  +    cfg_node_t ***result_vec, long *result_len,
       const char *spec)
   {
       const char *cpSel; size_t nSel;
  @@ -481,7 +481,7 @@
           return CFG_OK;
   
       /* determine selection step information */
  -    cpSel = spec; 
  +    cpSel = spec;
       nSel = strcspn(cpSel, "[/");
       cp = cpSel+nSel;
       nFilMin = 1;
  @@ -548,10 +548,10 @@
   
   cfg_rc_t
   cfg_node_select(
  -    cfg_t *cfg, 
  -    cfg_node_t *node, 
  -    cfg_node_t ***result_vec, 
  -    const char *fmt, 
  +    cfg_t *cfg,
  +    cfg_node_t *node,
  +    cfg_node_t ***result_vec,
  +    const char *fmt,
       ...)
   {
       cfg_rc_t rc;
  @@ -594,22 +594,22 @@
       return CFG_OK;
   }
   
  -cfg_rc_t 
  +cfg_rc_t
   cfg_node_find(
  -    cfg_t *cfg, 
  -    cfg_node_t *node, 
  +    cfg_t *cfg,
  +    cfg_node_t *node,
       cfg_rc_t (*cb_fct_cmp)(cfg_t *, cfg_node_t *, void *),
  -    void *cb_ctx_cmp, 
  +    void *cb_ctx_cmp,
       cfg_node_t **cont)
   {
       /* FIXME */
       return CFG_ERR_INT;
   }
   
  -cfg_rc_t 
  +cfg_rc_t
   cfg_node_apply(
  -    cfg_t *cfg, 
  -    cfg_node_t *node, 
  +    cfg_t *cfg,
  +    cfg_node_t *node,
       cfg_rc_t (*cb_fct_cmp)(cfg_t *, cfg_node_t *, void *),
       void *cb_ctx_cmp,
       cfg_rc_t (*cb_fct_cb)(cfg_t *, cfg_node_t *, void *),
  @@ -625,12 +625,12 @@
           if (rc != CFG_ERR_NDE)
               return rc;
           if (node->child1 != NULL)
  -            if ((rc = cfg_node_apply(cfg, node->child1, 
  +            if ((rc = cfg_node_apply(cfg, node->child1,
                                        cb_fct_cmp, cb_ctx_cmp,
                                        cb_fct_cb, cb_ctx_cb)) != CFG_OK)
                   return rc;
           if (node->rbroth != NULL)
  -            if ((rc = cfg_node_apply(cfg, node->rbroth, 
  +            if ((rc = cfg_node_apply(cfg, node->rbroth,
                                        cb_fct_cmp, cb_ctx_cmp,
                                        cb_fct_cb, cb_ctx_cb)) != CFG_OK)
                   return rc;
  @@ -640,8 +640,8 @@
   
   cfg_rc_t
   cfg_node_cmp(
  -    cfg_t *cfg, 
  -    cfg_node_t *node, 
  +    cfg_t *cfg,
  +    cfg_node_t *node,
       void *token)
   {
       if (cfg == NULL || node == NULL || token == NULL)
  @@ -669,7 +669,7 @@
               n->parent = node->parent;
               n = n->rbroth;
           }
  -        n->rbroth = node->rbroth; 
  +        n->rbroth = node->rbroth;
           node->rbroth = node2;
       }
       else if (attr == CFG_NODE_ATTR_CHILD1) {
  @@ -684,7 +684,7 @@
           node->child1 = node2;
       }
       /* FIXME more linkage possibilities */
  -    else 
  +    else
           return CFG_ERR_ARG;
       return CFG_OK;
   }
  Index: ossp-pkg/cfg/cfg_node.h
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 cfg_node.h
  --- ossp-pkg/cfg/cfg_node.h	17 Jul 2002 15:04:08 -0000	1.6
  +++ ossp-pkg/cfg/cfg_node.h	10 Nov 2002 12:12:23 -0000	1.7
  @@ -46,7 +46,7 @@
       char           *token;   /* pointer to corresponding token string */
   
       /* node annotation */
  -    cfg_data_t      data;    /* annotation data */ 
  +    cfg_data_t      data;    /* annotation data */
   
       /* node source location */
       char           *srcname; /* name of original source configuration */
  Index: ossp-pkg/cfg/cfg_syn.c
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 cfg_syn.c
  --- ossp-pkg/cfg/cfg_syn.c	18 Jul 2002 15:34:55 -0000	1.13
  +++ ossp-pkg/cfg/cfg_syn.c	10 Nov 2002 12:12:23 -0000	1.14
  @@ -48,16 +48,16 @@
   
   /* build a node tree according to a textual specification */
   cfg_rc_t cfg_syn_import(
  -    cfg_t *cfg, 
  -    cfg_node_t **node, 
  +    cfg_t *cfg,
  +    cfg_node_t **node,
       const char *in_ptr,
       size_t in_len,
  -    char *err_buf, 
  +    char *err_buf,
       size_t err_len)
   {
       cfg_syn_ctx_t ctx;
       void *yyscan;
  -    
  +
       /* argument sanity checking */
       if (node == NULL || in_ptr == NULL || in_len == 0)
           return CFG_ERR_ARG;
  @@ -66,7 +66,7 @@
       cfg_syn_lex_init(&yyscan);
       cfg_syn_set_extra(&ctx, yyscan);
   
  -    /* establish our own context which is passed 
  +    /* establish our own context which is passed
          through the parser and scanner */
       ctx.inputptr = in_ptr;
       ctx.inputbuf = in_ptr;
  @@ -155,7 +155,7 @@
       *cp++ = '\0';
   
       /* remember parsing error: part I (context part) */
  -    cfg_fmt_sprintf(ctx->err_buf, ctx->err_len, 
  +    cfg_fmt_sprintf(ctx->err_buf, ctx->err_len,
                       "line %d, column %d: `%s'",
                       line, column, cpBuf);
       free(cpBuf);
  @@ -227,7 +227,7 @@
   
       plain = 1;
       for (cp = token; *cp != '\0'; cp++) {
  -        if (   !isprint((int)(*cp)) 
  +        if (   !isprint((int)(*cp))
               || strchr(" \n\r\t\b\f;{}\\\"'", (int)(*cp)) != NULL) {
               plain = 0;
               break;
  @@ -307,8 +307,8 @@
   }
   
   cfg_rc_t cfg_syn_export(
  -    cfg_t *cfg, 
  -    cfg_node_t *node, 
  +    cfg_t *cfg,
  +    cfg_node_t *node,
       char **output)
   {
       cfg_buf_t *buf;
  Index: ossp-pkg/cfg/cfg_syn_parse.y
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 cfg_syn_parse.y
  --- ossp-pkg/cfg/cfg_syn_parse.y	10 Jul 2002 12:00:23 -0000	1.3
  +++ ossp-pkg/cfg/cfg_syn_parse.y	10 Nov 2002 12:12:23 -0000	1.4
  @@ -43,10 +43,10 @@
   #define YYPARSE_PARAM ctx
   #define YYLEX_PARAM   CTX->yyscan
   
  -/* provide an explicit prototype for the yylex() function but use 
  -   "void *" instead of correct type because at this point in the 
  +/* provide an explicit prototype for the yylex() function but use
  +   "void *" instead of correct type because at this point in the
      generation process we have the types still not available */
  -extern int yylex(/*YYSTYPE*/ void *lvalp, 
  +extern int yylex(/*YYSTYPE*/ void *lvalp,
                    /*YYLTYPE*/ void *llocp, cfg_syn_ctx_t *ctx);
   
   /* generate verbose error messages and remember them inside the context */
  @@ -90,7 +90,7 @@
   %right T_OPEN
   %right T_CLOSE
   
  -/* grammar start rule 
  +/* grammar start rule
      (technically redundant but explicit to be sure) */
   %start configuration
   
  @@ -113,13 +113,13 @@
       ;
   
   directives
  -    : /* empty */ { 
  +    : /* empty */ {
           $$ = NULL;
         }
  -    | directive { 
  -        $$ = $1; 
  +    | directive {
  +        $$ = $1;
         }
  -    | directive T_SEP directives { 
  +    | directive T_SEP directives {
           cfg_node_set(CTX->cfg, $1, CFG_NODE_ATTR_RBROTH, $3);
           $$ = $1;
         }
  @@ -135,22 +135,22 @@
         }
       ;
   
  -tokens 
  -    : token { 
  -        $$ = $1; 
  +tokens
  +    : token {
  +        $$ = $1;
         }
  -    | token tokens { 
  +    | token tokens {
           cfg_node_set(CTX->cfg, $1, CFG_NODE_ATTR_RBROTH, $2);
           $$ = $1;
         }
       ;
   
   token
  -    : T_OPEN sequence T_CLOSE { 
  -        $$ = $2; 
  +    : T_OPEN sequence T_CLOSE {
  +        $$ = $2;
         }
       | string {
  -        $$ = $1; 
  +        $$ = $1;
         }
       ;
   
  @@ -160,7 +160,7 @@
           cfg_node_create(CTX->cfg, &n);
           cfg_node_set(CTX->cfg, n, CFG_NODE_ATTR_TYPE, CFG_NODE_TYPE_ARG);
           cfg_node_set(CTX->cfg, n, CFG_NODE_ATTR_TOKEN, $1);
  -        $$ = n; 
  +        $$ = n;
         }
       ;
   
  Index: ossp-pkg/cfg/cfg_syn_scan.l
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 cfg_syn_scan.l
  --- ossp-pkg/cfg/cfg_syn_scan.l	9 Nov 2002 14:34:01 -0000	1.12
  +++ ossp-pkg/cfg/cfg_syn_scan.l	10 Nov 2002 12:12:23 -0000	1.13
  @@ -79,7 +79,7 @@
   %x SS_CO_C
   
   /* the delimiting character for flexible quoting has to one a
  -   special character c, i.e., one of !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ or 
  +   special character c, i.e., one of !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ or
      in C code: isprint(c) && !isspace(c) && !iscntrl(c) && !isalpha(i) && !isdigit(i) */
   FQDEL   [\!\"\#\$\%\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\@\[\\\]\^\_\`\{\|\}\~]
   FQDELN [^\!\"\#\$\%\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\@\[\\\]\^\_\`\{\|\}\~]
  @@ -354,7 +354,7 @@
           nibble = (unsigned char)(hex - 'a' + 10);
       else if (hex >= 'A' && hex <= 'F')
           nibble = (unsigned char)(hex - 'A' + 10);
  -    else 
  +    else
           nibble = -1;
       return nibble;
   }
  Index: ossp-pkg/cfg/cfg_test.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 cfg_test.c
  --- ossp-pkg/cfg/cfg_test.c	24 Jul 2002 10:04:15 -0000	1.8
  +++ ossp-pkg/cfg/cfg_test.c	10 Nov 2002 12:12:23 -0000	1.9
  @@ -6,7 +6,7 @@
   #include "cfg.h"
   #include "cfg_util.h"
   
  -int main(int argc, char *argv[]) 
  +int main(int argc, char *argv[])
   {
       cfg_rc_t rc;
       char *im_ptr;
  Index: ossp-pkg/cfg/cfg_test.cfg
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 cfg_test.cfg
  --- ossp-pkg/cfg/cfg_test.cfg	2 Aug 2002 19:07:12 -0000	1.1
  +++ ossp-pkg/cfg/cfg_test.cfg	10 Nov 2002 12:12:23 -0000	1.2
  @@ -28,8 +28,8 @@
   foo3/*bar*/    # fails
   "foo4"/*bar*/  # works again
   ;
  -/* a C/C++ style block comment which 
  -   goes over multiple lines and even includes 
  +/* a C/C++ style block comment which
  +   goes over multiple lines and even includes
      some special / * ** * / characters and
      a nested /* co/**/mment */, too. */
   

From ossp-cvs-owner@ossp.org  Mon Nov 11 15:44:55 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DAEB776AE1; Mon, 11 Nov 2002 15:44:54 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/SHARE/ossp_img cw.png ossp-dashes.png ossp-logo.p...
Message-Id: <20021111144454.DAEB776AE1@mail.ossp.org>
Date: Mon, 11 Nov 2002 15:44:54 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-web                         Date:   11-Nov-2002 15:44:54
  Branch: HEAD                             Handle: 2002111114445400

  Modified files:
    ossp-web/SHARE/ossp_img cw.png ossp-dashes.png ossp-logo.png

  Log:
    Reformat PNG files to properly display on Internet Exploder.

  Summary:
    Revision    Changes     Path
    1.2         BLOB        ossp-web/SHARE/ossp_img/cw.png
    1.2         BLOB        ossp-web/SHARE/ossp_img/ossp-dashes.png
    1.2         BLOB        ossp-web/SHARE/ossp_img/ossp-logo.png
  ____________________________________________________________________________

  Index: ossp-web/SHARE/ossp_img/cw.png
  ============================================================
  $ cvs update -p -r1.1 cw.png >cw.png.old
  $ cvs update -p -r1.2 cw.png >cw.png.new
  $ diff -u cw.png.old cw.png.new
  Binary files cw.png.old and cw.png.new differ
  Index: ossp-web/SHARE/ossp_img/ossp-dashes.png
  ============================================================
  $ cvs update -p -r1.1 ossp-dashes.png >ossp-dashes.png.old
  $ cvs update -p -r1.2 ossp-dashes.png >ossp-dashes.png.new
  $ diff -u ossp-dashes.png.old ossp-dashes.png.new
  Index: ossp-web/SHARE/ossp_img/ossp-logo.png
  ============================================================
  $ cvs update -p -r1.1 ossp-logo.png >ossp-logo.png.old
  $ cvs update -p -r1.2 ossp-logo.png >ossp-logo.png.new
  $ diff -u ossp-logo.png.old ossp-logo.png.new

From ossp-cvs-owner@ossp.org  Mon Nov 11 16:23:05 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E7D4676A5D; Mon, 11 Nov 2002 16:23:04 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/SHARE/ossp_img cw.png ossp-dashes.png ossp-logo.p...
Message-Id: <20021111152304.E7D4676A5D@mail.ossp.org>
Date: Mon, 11 Nov 2002 16:23:04 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-web                         Date:   11-Nov-2002 16:23:04
  Branch: HEAD                             Handle: 2002111115230400

  Modified files:
    ossp-web/SHARE/ossp_img cw.png ossp-dashes.png ossp-logo.png

  Log:
    Back out PNG format changes, because they didn't work as expected.

  Summary:
    Revision    Changes     Path
    1.3         BLOB        ossp-web/SHARE/ossp_img/cw.png
    1.3         BLOB        ossp-web/SHARE/ossp_img/ossp-dashes.png
    1.3         BLOB        ossp-web/SHARE/ossp_img/ossp-logo.png
  ____________________________________________________________________________

  Index: ossp-web/SHARE/ossp_img/cw.png
  ============================================================
  $ cvs update -p -r1.2 cw.png >cw.png.old
  $ cvs update -p -r1.3 cw.png >cw.png.new
  $ diff -u cw.png.old cw.png.new
  Binary files cw.png.old and cw.png.new differ
  Index: ossp-web/SHARE/ossp_img/ossp-dashes.png
  ============================================================
  $ cvs update -p -r1.2 ossp-dashes.png >ossp-dashes.png.old
  $ cvs update -p -r1.3 ossp-dashes.png >ossp-dashes.png.new
  $ diff -u ossp-dashes.png.old ossp-dashes.png.new
  Index: ossp-web/SHARE/ossp_img/ossp-logo.png
  ============================================================
  $ cvs update -p -r1.2 ossp-logo.png >ossp-logo.png.old
  $ cvs update -p -r1.3 ossp-logo.png >ossp-logo.png.new
  $ diff -u ossp-logo.png.old ossp-logo.png.new

From ossp-cvs-owner@ossp.org  Mon Nov 11 22:39:09 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1414F76AE1; Mon, 11 Nov 2002 22:39:09 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq TODO main.cpp titraq.cpp titraq.h
Message-Id: <20021111213909.1414F76AE1@mail.ossp.org>
Date: Mon, 11 Nov 2002 22:39:09 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   11-Nov-2002 22:39:08
  Branch: HEAD                             Handle: 2002111121390800

  Modified files:
    ossp-pkg/titraq         TODO main.cpp titraq.cpp titraq.h

  Log:
    Flush changes ending in a more complete application frame.

  Summary:
    Revision    Changes     Path
    1.4         +2  -0      ossp-pkg/titraq/TODO
    1.4         +7  -41     ossp-pkg/titraq/main.cpp
    1.2         +79 -50     ossp-pkg/titraq/titraq.cpp
    1.2         +34 -19     ossp-pkg/titraq/titraq.h
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/TODO
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 TODO
  --- ossp-pkg/titraq/TODO	8 Nov 2002 12:21:34 -0000	1.3
  +++ ossp-pkg/titraq/TODO	11 Nov 2002 21:39:08 -0000	1.4
  @@ -9,6 +9,8 @@
   
   Must do
   -------
  +Add GUID
  +Add Ex_ID
   
   Dreams
   ------
  Index: ossp-pkg/titraq/main.cpp
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 main.cpp
  --- ossp-pkg/titraq/main.cpp	8 Nov 2002 12:21:34 -0000	1.3
  +++ ossp-pkg/titraq/main.cpp	11 Nov 2002 21:39:08 -0000	1.4
  @@ -1,51 +1,17 @@
   #include <qapplication.h>
  -#include <qtable.h>
  -#include <qimage.h>
  -#include <qpixmap.h>
  -#include <qstringlist.h>
  +#include <qcdestyle.h>
   
   #include "titraq.h"
   
  -// OSSP logo: static const char *ossplogo_xpm[]
  -#include "gfx/ossplogo.xpm"
  -
  -// Table size
  -const int numRows = 10;
  -const int numCols = 6;
  -
   int main(int argc, char **argv)
   {
  -    QApplication App(argc, argv);			
  -
  -    QTable table(numRows, numCols);
  -
  -    QHeader *header = table.horizontalHeader();
  -    header->setLabel(0, QObject::tr("Klein"), 40);
  -    header->setLabel(1, QObject::tr("Krasse Checkung"));
  -    header->setLabel(5, QObject::tr("Combo Buxen"));
  -    header->setMovingEnabled(TRUE);
  -
  -    QImage img(ossplogo_xpm);
  -    QPixmap pix = img.scaleHeight(table.rowHeight(3));
  -    table.setPixmap(3, 2, pix);
  -    table.setText(3, 2, "OSSP");
  -
  -    QStringList comboEntries;
  -    comboEntries << "uno" << "dos" << "tres" << "quatro";
  -
  -    for (int i = 0; i < numRows; ++i){
  -	QComboTableItem * item = new QComboTableItem(&table, comboEntries, FALSE);
  -	item->setCurrentItem(i % 4);
  -	table.setItem(i, 5, item);
  -    }	
  -    for (int j = 0; j < numRows; ++j)
  -	table.setItem(j, 1, new QCheckTableItem(&table, "Checkung"));
  +    QApplication App(argc, argv);
   
  -//    Titraqform *pMainform = new Titraqform;
  -//    App.setMainWidget(pMainform);
  -//    pMainform->show();
  +    // The main Titraq application window
  +    Titraqform *pMainform = new Titraqform;
  +    App.setMainWidget(pMainform);
  +    App.setStyle(new QCDEStyle);    // Change style to CDE
  +    pMainform->show();              // Finally start the show
   
  -    App.setMainWidget(&table);
  -    table.show();
       return App.exec();
   }
  Index: ossp-pkg/titraq/titraq.cpp
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 titraq.cpp
  --- ossp-pkg/titraq/titraq.cpp	8 Nov 2002 12:27:57 -0000	1.1
  +++ ossp-pkg/titraq/titraq.cpp	11 Nov 2002 21:39:08 -0000	1.2
  @@ -1,16 +1,10 @@
  -#include "titraq.h"
  -
  -#include <qvariant.h>
  -#include <qlineedit.h>
  -#include <qpushbutton.h>
  -#include <qtable.h>
  -#include <qmime.h>
  -#include <qdragobject.h>
  -#include <qlayout.h>
  +// System interface
   #include <qtooltip.h>
   #include <qwhatsthis.h>
  -#include <qimage.h>
  -#include <qpixmap.h>
  +
  +// User interface
  +#include "titraq.h"         // Main classes
  +#include "gfx/ossplogo.xpm" // OSSP logo: static const char *ossplogo_xpm[]
   
   // Used in initialization of the application
   void Titraqform::init()
  @@ -20,67 +14,102 @@
   }
   
   //
  -// Construct a Titraqform which is a child of 'pParent', with the 
  +// Construct a Titraqform which is a child of 'pParent', with the
   // name 'kszName' and widget flags set to 'Flags'
   //
  -
   Titraqform::Titraqform(QWidget *pParent,  const char *kszName, bool bModal,
       WFlags Flags) : QDialog(pParent, kszName, bModal, Flags)
   {
       if (!kszName)
       setName("Titraqform");
  -    resize(600, 480); 
  -    setCaption(trUtf8("OpenPKG Friend"));
  -    pTitraqformlayout = new QVBoxLayout(this, 11, 6, "pTitraqformlayout"); 
  -
  -    // Contains the package layout and control layout
  -    pMainlayout = new QVBoxLayout(0, 0, 6, "pMainlayout"); 
  +    resize(600, 480);
  +    setCaption(trUtf8("OSSP Titraq"));
   
  -    // Contains the table control and status line control
  -    pPackagelayout = new QVBoxLayout(0, 0, 6, "pPackagelayout"); 
  +    // Control layouts for form, table, and status line
  +    pTitraqformlayout = new QVBoxLayout(this, 11, 6, "pTitraqformlayout");
  +    pMainlayout = new QVBoxLayout(0, 0, 6, "pMainlayout");       // For layouts
  +    pPackagelayout = new QVBoxLayout(0, 0, 6, "pPackagelayout"); // For table
   
  +    // The table itself
       pMaintable = new QTable(this, "pMaintable");
  -    pMaintable->setNumRows(10);
  -    pMaintable->setNumCols(6);
  -    pMaintable->setReadOnly(FALSE);
  -    pPackagelayout->addWidget(pMaintable);
  -
  -    pStatusline = new QLineEdit(this, "pStatusline");
  -    pStatusline->setFrameShape(QLineEdit::LineEditPanel);
  -    pStatusline->setFrameShadow(QLineEdit::Sunken);
  -    pStatusline->setFrame(TRUE);
  -    pStatusline->setReadOnly(TRUE);
  -    pPackagelayout->addWidget(pStatusline);
  +    pMaintable->setNumRows(knRows);
  +    pMaintable->setNumCols(knCols);
  +    pMaintable->setReadOnly(false);                 // Not read only
  +    pMaintable->setColumnMovingEnabled(true);
  +    pMaintable->setSelectionMode(QTable::MultiRow); // Multi row selection
  +    pMaintable->setLeftMargin(0);           // Get rid of the vertical header
  +    pMaintable->verticalHeader()->hide();   // by hiding it with a margin of 0
  +    pMaintable->horizontalHeader()->setResizeEnabled(false);
  +    pMaintable->setColumnStretchable(5, true);
  +
  +    // Table header row
  +    pTablehead = pMaintable->horizontalHeader();
  +    pTablehead->setLabel(0, QObject::tr("Date"), 76);
  +    pTablehead->setLabel(1, QObject::tr("Begin"));
  +    pTablehead->setLabel(2, QObject::tr("End"));
  +    pTablehead->setLabel(3, QObject::tr("Amount"), 52);
  +    pTablehead->setLabel(4, QObject::tr("Task"), 60);
  +    pTablehead->setLabel(5, QObject::tr("Remark"));
  +    pTablehead->setMovingEnabled(true);
  +
  +    // Icon table items
  +    pIconimage = new QImage(ossplogo_xpm);
  +    pIconpixmap = new QPixmap(pIconimage->scaleHeight(pMaintable->rowHeight(6)));
  +    pMaintable->setPixmap(3, 2, *pIconpixmap);
  +    pMaintable->setText(3, 2, "OSSP Titraq");
  +
  +    // Set contents of a generic combobox
  +    pComboentries = new QStringList;
  +    *pComboentries << "uno" << "dos" << "tres" << "quatro";
  +
  +    // Make the combobox items for all rows
  +    for (int i = 0; i < knRows; ++i) {
  +        QComboTableItem *pComboitem = new QComboTableItem(pMaintable, *pComboentries, false);
  +        pComboitem->setCurrentItem(i % 4);
  +        pMaintable->setItem(i, 4, pComboitem);
  +    }
  +
  +    // Make the checkbox items for all rows
  +    for (int j = 0; j < knRows; ++j)
  +        pMaintable->setItem(j, 1, new QCheckTableItem(pMaintable, "Checkung"));
  +
  +    pPackagelayout->addWidget(pMaintable); // Finally add the table widget
  +
  +    // Bottom output line
  +    pStatus = new QLineEdit(this, "pStatus");
  +    pStatus->setFrameShape(QLineEdit::LineEditPanel);
  +    pStatus->setFrameShadow(QLineEdit::Sunken);
  +    pStatus->setFrame(true);
  +    pStatus->setReadOnly(true);
  +    pPackagelayout->addWidget(pStatus);
       pMainlayout->addLayout(pPackagelayout);
   
  -    // Contains all the push button controls
  -    pControllayout = new QHBoxLayout(0, 0, 6, "pControllayout"); 
  +    // Control layout for push buttons
  +    pControllayout = new QHBoxLayout(0, 0, 6, "pControllayout"); // For buttons
   
  -    pInstallbutton = new QPushButton(this, "pInstallbutton");
  -    pInstallbutton->setCursor(QCursor(13));
  -    pInstallbutton->setText(trUtf8("&Install"));
  -    pInstallbutton->setFlat(FALSE);
  -    pControllayout->addWidget(pInstallbutton);
  +    // Tuple push button add
  +    pAddbutton = new QPushButton(this, "AddButton");
  +    pAddbutton->setCursor(QCursor(13));
  +    pAddbutton->setText(trUtf8("&Add"));
  +    pControllayout->addWidget(pAddbutton);
   
  +    // Tuple push button delete
       pDeletebutton = new QPushButton(this, "pDeletebutton");
       pDeletebutton->setCursor(QCursor(13));
       pDeletebutton->setText(trUtf8("&Delete"));
  +    pDeletebutton->setFlat(false);
       pControllayout->addWidget(pDeletebutton);
   
  -    pVerifybutton = new QPushButton(this, "VerifyButton");
  -    pVerifybutton->setCursor(QCursor(13));
  -    pVerifybutton->setText(trUtf8("&Verify"));
  -    pControllayout->addWidget(pVerifybutton);
  -
  -    pCommitbutton = new QPushButton(this, "pCommitbutton");
  -    pCommitbutton->setPaletteBackgroundColor(QColor(186, 156, 144));
  -    pCommitbutton->setCursor(QCursor(13));
  -    pCommitbutton->setText(trUtf8("&Commit"));
  -    pControllayout->addWidget(pCommitbutton);
  +    // Tuple push button write
  +    pWritebutton = new QPushButton(this, "pWritebutton");
  +    pWritebutton->setPaletteBackgroundColor(QColor(186, 156, 144));
  +    pWritebutton->setCursor(QCursor(13));
  +    pWritebutton->setText(trUtf8("&Write"));
  +    pControllayout->addWidget(pWritebutton);
       pMainlayout->addLayout(pControllayout);
       pTitraqformlayout->addLayout(pMainlayout);
   
  -    init(); // signals and slots connections
  +    init(); // Initialize signal and slot connections
   }
   
   //
  Index: ossp-pkg/titraq/titraq.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 titraq.h
  --- ossp-pkg/titraq/titraq.h	8 Nov 2002 12:27:57 -0000	1.1
  +++ ossp-pkg/titraq/titraq.h	11 Nov 2002 21:39:08 -0000	1.2
  @@ -1,39 +1,54 @@
   #ifndef OPKGFORM_H
   #define OPKGFORM_H
   
  -#include <qvariant.h>
   #include <qdialog.h>
  -class QVBoxLayout; 
  -class QHBoxLayout; 
  -class QGridLayout; 
  -class QLineEdit;
  -class QPushButton;
  -class QTable;
  +#include <qtable.h>
  +#include <qheader.h>
  +#include <qimage.h>
  +#include <qpixmap.h>
  +#include <qstringlist.h>
  +#include <qpushbutton.h>
  +#include <qlineedit.h>
  +#include <qlayout.h>
   
  +
  +// Main table size
  +const int knRows = 18;
  +const int knCols = 6;
  +
  +// Main application form window
   class Titraqform : public QDialog
  -{ 
  -    Q_OBJECT
  +{
  +    Q_OBJECT    // Needed for MOC object model generation
   
   public:
       Titraqform(QWidget *pParent = 0, const char *kszName = 0,
  -        bool bModal = FALSE, WFlags Flags = 0);
  +        bool bModal = false, WFlags Flags = 0);
       ~Titraqform();
   
  +    // Table, cells, and entries in package layout
       QTable *pMaintable;
  -    QLineEdit *pStatusline;
  -    QPushButton *pInstallbutton;
  +    QHeader *pTablehead;
  +    QImage *pIconimage;
  +    QPixmap *pIconpixmap;
  +    QStringList *pComboentries;
  +
  +    // Push buttons in control layout
  +    QPushButton *pAddbutton;
       QPushButton *pDeletebutton;
  -    QPushButton *pVerifybutton;
  -    QPushButton *pCommitbutton;
  +    QPushButton *pWritebutton;
  +
  +    // Line edit for status
  +    QLineEdit *pStatus;
   
   protected slots:
  -    virtual void init();
  +    virtual void init();            // Override init to include custom controls
   
   protected:
  -    QVBoxLayout *pTitraqformlayout;
  -    QVBoxLayout *pMainlayout;
  -    QVBoxLayout *pPackagelayout;
  -    QHBoxLayout *pControllayout;
  +    QVBoxLayout *pTitraqformlayout; // Main form layout
  +    QVBoxLayout *pMainlayout;       // Package and control layouts
  +    QVBoxLayout *pPackagelayout;    // Main table control
  +    QHBoxLayout *pControllayout;    // Lower control buttons
   };
   
   #endif // OPKGFORM_H

From ossp-cvs-owner@ossp.org  Tue Nov 12 14:09:01 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A43ED76A14; Tue, 12 Nov 2002 14:09:00 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl fsl.c
Message-Id: <20021112130900.A43ED76A14@mail.ossp.org>
Date: Tue, 12 Nov 2002 14:09:00 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   12-Nov-2002 14:09:00
  Branch: HEAD                             Handle: 2002111213085900

  Modified files:
    ossp-pkg/fsl            fsl.c

  Log:
    cosmetics

  Summary:
    Revision    Changes     Path
    1.55        +2  -2      ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  Index: ossp-pkg/fsl/fsl.c
  ============================================================
  $ cvs diff -u -r1.54 -r1.55 fsl.c
  --- ossp-pkg/fsl/fsl.c	9 Nov 2002 18:25:21 -0000	1.54
  +++ ossp-pkg/fsl/fsl.c	12 Nov 2002 13:08:59 -0000	1.55
  @@ -232,7 +232,7 @@
       if (filename == NULL || buffer == NULL)
           CU(FSL_ERR_ARG);
   
  -    fsldebug(L2_LEVEL_TRACE, "appendfiletobuffer() filename=\"%s\")", filename);
  +    fsldebug(L2_LEVEL_TRACE, "appendfiletobuffer() filename=\"%s\"", filename);
   
       if ((fd = open(filename, O_RDONLY)) == -1)
           CU(FSL_ERR_SYS);
  @@ -496,7 +496,7 @@
           if (cfgnume == 0) {
               fsldebug(L2_LEVEL_ERROR, "processcfg: syntax error, invalid argument \"%s\"", cfgargtoka[0]); CU(FSL_ERR_CUS); }
           if (cfgnume != cfgnumc) {
  -            fsldebug(L2_LEVEL_ERROR, "processcfg: directive missing arguments, expected %d, got %d", cfgnume, cfgnumc); CU(FSL_ERR_CUS); }
  +            fsldebug(L2_LEVEL_ERROR, "processcfg: invalid number of arguments for directive, expected %d, got %d", cfgnume, cfgnumc); CU(FSL_ERR_CUS); }
   
           for (i = 1; i < cfgnume; i++) {
               /*  process right brother of argument, check if it is an argument and has a valid token attached */

From ossp-cvs-owner@ossp.org  Tue Nov 12 20:16:03 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6CDDF76A43; Tue, 12 Nov 2002 20:16:03 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq titraq.cpp titraq.h
Message-Id: <20021112191603.6CDDF76A43@mail.ossp.org>
Date: Tue, 12 Nov 2002 20:16:03 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   12-Nov-2002 20:16:03
  Branch: HEAD                             Handle: 2002111219160000

  Modified files:
    ossp-pkg/titraq         titraq.cpp titraq.h

  Log:
    Change from QDialog to QMainWindow, reframe widget layouts, add more buttons,
    add tool tips, handle quit action, fill table items with meaningful widgets,
    resize columns, add autocompletion of tasks, chew potatoes, cook rice.

  Summary:
    Revision    Changes     Path
    1.3         +127 -25    ossp-pkg/titraq/titraq.cpp
    1.3         +10 -6      ossp-pkg/titraq/titraq.h
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/titraq.cpp
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 titraq.cpp
  --- ossp-pkg/titraq/titraq.cpp	11 Nov 2002 21:39:08 -0000	1.2
  +++ ossp-pkg/titraq/titraq.cpp	12 Nov 2002 19:16:00 -0000	1.3
  @@ -1,6 +1,12 @@
   // System interface
  +#include <qapplication.h>
   #include <qtooltip.h>
  -#include <qwhatsthis.h>
  +#include <qdatetime.h>
  +#include <qdatetimeedit.h>
  +#include <qspinbox.h>
  +#include <qstringlist.h>
  +#include <qcombobox.h>
  +#include <qcursor.h>
   
   // User interface
   #include "titraq.h"         // Main classes
  @@ -9,24 +15,32 @@
   // Used in initialization of the application
   void Titraqform::init()
   {
  -    pDeletebutton->setBackgroundColor(darkYellow);
  -    pMaintable->setFocus();
  +    pAddbutton->setPaletteBackgroundColor(QColor(196, 196, 176));
  +    pDeletebutton->setPaletteBackgroundColor(QColor(196, 196, 176));
  +    pWritebutton->setPaletteBackgroundColor(QColor(196, 196, 176));
  +    pQuitbutton->setPaletteBackgroundColor(QColor(196, 196, 176));
  +    pMaintable->setCurrentCell(0, 0);   // Set the initial focus
  +    pMaintable->setFocus();             // Focus on the table
   }
   
   //
   // Construct a Titraqform which is a child of 'pParent', with the
   // name 'kszName' and widget flags set to 'Flags'
   //
  -Titraqform::Titraqform(QWidget *pParent,  const char *kszName, bool bModal,
  -    WFlags Flags) : QDialog(pParent, kszName, bModal, Flags)
  +Titraqform::Titraqform(QWidget *pParent,  const char *kszName, WFlags Flags) :
  +    QMainWindow(pParent, kszName, Flags)
   {
       if (!kszName)
       setName("Titraqform");
       resize(600, 480);
       setCaption(trUtf8("OSSP Titraq"));
   
  +    // Create a central frame and associated layout for QMainWindow
  +    QFrame *pCenframe = new QFrame(this);
  +    this->setCentralWidget(pCenframe);
  +
       // Control layouts for form, table, and status line
  -    pTitraqformlayout = new QVBoxLayout(this, 11, 6, "pTitraqformlayout");
  +    pTitraqformlayout = new QVBoxLayout(pCenframe, 11, 6, "pTitraqformlayout");
       pMainlayout = new QVBoxLayout(0, 0, 6, "pMainlayout");       // For layouts
       pPackagelayout = new QVBoxLayout(0, 0, 6, "pPackagelayout"); // For table
   
  @@ -35,7 +49,7 @@
       pMaintable->setNumRows(knRows);
       pMaintable->setNumCols(knCols);
       pMaintable->setReadOnly(false);                 // Not read only
  -    pMaintable->setColumnMovingEnabled(true);
  +    pMaintable->setColumnMovingEnabled(true);       // Ctrl-drag of headers
       pMaintable->setSelectionMode(QTable::MultiRow); // Multi row selection
       pMaintable->setLeftMargin(0);           // Get rid of the vertical header
       pMaintable->verticalHeader()->hide();   // by hiding it with a margin of 0
  @@ -44,36 +58,89 @@
   
       // Table header row
       pTablehead = pMaintable->horizontalHeader();
  -    pTablehead->setLabel(0, QObject::tr("Date"), 76);
  -    pTablehead->setLabel(1, QObject::tr("Begin"));
  -    pTablehead->setLabel(2, QObject::tr("End"));
  +    pTablehead->setLabel(0, QObject::tr("Date"), 96);
  +    pTablehead->setLabel(1, QObject::tr("Begin"), 80);
  +    pTablehead->setLabel(2, QObject::tr("End"), 80);
       pTablehead->setLabel(3, QObject::tr("Amount"), 52);
  -    pTablehead->setLabel(4, QObject::tr("Task"), 60);
  +    pTablehead->setLabel(4, QObject::tr("Task"), 70);
       pTablehead->setLabel(5, QObject::tr("Remark"));
       pTablehead->setMovingEnabled(true);
   
  -    // Icon table items
  +    // Icon image items
       pIconimage = new QImage(ossplogo_xpm);
       pIconpixmap = new QPixmap(pIconimage->scaleHeight(pMaintable->rowHeight(6)));
  -    pMaintable->setPixmap(3, 2, *pIconpixmap);
  -    pMaintable->setText(3, 2, "OSSP Titraq");
  +    pMaintable->setItem(0, 0, new QTableItem(pMaintable, QTableItem::Never, "OSSP trac"));
  +    pMaintable->setPixmap(0, 0, *pIconpixmap);
  +
  +//    // Make a generic table item for all rows
  +//    for (int i = 1; i < knRows; ++i)
  +//        pMaintable->setItem(i, 0, new QTableItem(pMaintable, QTableItem::Always, ("Enter")));
  +
  +    // Make the date selector for all rows
  +    for (int i = 1; i < knRows; ++i) {
  +        QDate *pSylvestre = new QDate(2002, 12, 31);
  +        QDateEdit *pDateEdit = new QDateEdit(*pSylvestre, pMaintable, "Date");
  +        pMaintable->setCellWidget(i, 0, pDateEdit);
  +    }
  +
  +    // Make the time start selector for all rows
  +    for (int i = 0; i < knRows; ++i) {
  +        QTimeEdit *pStart = new QTimeEdit(QTime::currentTime(), pMaintable, "Start");
  +        pMaintable->setCellWidget(i, 1, pStart);
  +    }
  +
  +    // Make the time end selector for all rows
  +    for (int i = 0; i < knRows; ++i) {
  +        QTimeEdit *pEnd = new QTimeEdit(QTime::currentTime(), pMaintable, "End");
  +        pMaintable->setCellWidget(i, 2, pEnd);
  +    }
  +
  +    // Make the amount selector for all rows
  +    for (int i = 0; i < knRows; ++i) {
  +        QSpinBox *pAmount = new QSpinBox(pMaintable, "Amount");
  +        pMaintable->setCellWidget(i, 3, pAmount);
  +    }
   
  -    // Set contents of a generic combobox
  -    pComboentries = new QStringList;
  -    *pComboentries << "uno" << "dos" << "tres" << "quatro";
  +    // Populate the task stringlist
  +    pTaskentries = new QStringList;
  +    *pTaskentries << "titraq" << "opgui" << "email"<< "admin" << "pmod" << "psod" << "meeting" << "training";
   
       // Make the combobox items for all rows
       for (int i = 0; i < knRows; ++i) {
  -        QComboTableItem *pComboitem = new QComboTableItem(pMaintable, *pComboentries, false);
  -        pComboitem->setCurrentItem(i % 4);
  -        pMaintable->setItem(i, 4, pComboitem);
  +        QComboBox *pTasks = new QComboBox(true, pMaintable, "Tasks");
  +        pTasks->insertStringList(*pTaskentries);
  +        pTasks->setCurrentText(NULL);
  +        pTasks->setAutoCompletion(true);
  +        pMaintable->setCellWidget(i, 4, pTasks);
       }
   
  -    // Make the checkbox items for all rows
  -    for (int j = 0; j < knRows; ++j)
  -        pMaintable->setItem(j, 1, new QCheckTableItem(pMaintable, "Checkung"));
  +//    // Make the listbox for all rows
  +//    for (int i = 0; i < knRows; ++i) {
  +//        QListBox *pTasks = new QListBox(pMaintable, "Tasks");
  +//        pTasks->insertStringList(*pTaskentries);
  +//        pTasks->setCurrentItem(i % 8);
  +//        pMaintable->setCellWidget(i, 4, pTasks);
  +//    }
  +
  +//    // Populate a listbox for the task combobox
  +//    QListBox *pListasks = new QListBox(pMaintable);
  +//    pListasks->insertItem("titraq");
  +//    pListasks->insertItem("opgui");
  +//    pListasks->insertItem("email");
  +//    pListasks->insertItem("admin");
  +//    pListasks->insertItem("pmod");
  +//    pListasks->insertItem("psod");
  +//    pListasks->insertItem("meeting");
  +//    pListasks->insertItem("training");
  +
  +//    // Make the combobox items for all rows
  +//    for (int i = 0; i < knRows; ++i) {
  +//        QComboTableItem *pTasks = new QComboTableItem(pMaintable, *pTaskentries, false);
  +//        pTasks->setCurrentItem(i % 8);
  +//        pMaintable->setItem(i, 4, pTasks);
  +//    }
   
  -    pPackagelayout->addWidget(pMaintable); // Finally add the table widget
  +    pPackagelayout->addWidget(pMaintable);  // Finally add the table widget
   
       // Bottom output line
       pStatus = new QLineEdit(this, "pStatus");
  @@ -81,6 +148,7 @@
       pStatus->setFrameShadow(QLineEdit::Sunken);
       pStatus->setFrame(true);
       pStatus->setReadOnly(true);
  +    QToolTip::add(pStatus, trUtf8("&Status line"));
       pPackagelayout->addWidget(pStatus);
       pMainlayout->addLayout(pPackagelayout);
   
  @@ -91,6 +159,8 @@
       pAddbutton = new QPushButton(this, "AddButton");
       pAddbutton->setCursor(QCursor(13));
       pAddbutton->setText(trUtf8("&Add"));
  +    QToolTip::add(pAddbutton, trUtf8("&Add entry"));
  +    connect(pAddbutton, SIGNAL(clicked()), this, SLOT(addEntry()));
       pControllayout->addWidget(pAddbutton);
   
       // Tuple push button delete
  @@ -98,18 +168,50 @@
       pDeletebutton->setCursor(QCursor(13));
       pDeletebutton->setText(trUtf8("&Delete"));
       pDeletebutton->setFlat(false);
  +    QToolTip::add(pDeletebutton, trUtf8("&Delete entry"));
  +    connect(pDeletebutton, SIGNAL(clicked()), this, SLOT(delEntry()));
       pControllayout->addWidget(pDeletebutton);
   
       // Tuple push button write
       pWritebutton = new QPushButton(this, "pWritebutton");
  -    pWritebutton->setPaletteBackgroundColor(QColor(186, 156, 144));
       pWritebutton->setCursor(QCursor(13));
       pWritebutton->setText(trUtf8("&Write"));
  +    QToolTip::add(pWritebutton, trUtf8("&Write entry"));
  +    connect(pWritebutton, SIGNAL(clicked()), this, SLOT(writeEntry()));
       pControllayout->addWidget(pWritebutton);
  +
  +    // Tuple push button quit
  +    pQuitbutton = new QPushButton(this, "pQuitbutton");
  +    pQuitbutton->setCursor(QCursor(13));
  +    pQuitbutton->setText(trUtf8("&Quit"));
  +    pQuitbutton->setFlat(false);
  +    QToolTip::add(pQuitbutton, trUtf8("&Quit"));
  +    connect(pQuitbutton, SIGNAL(clicked()), qApp, SLOT(quit()));
  +    pControllayout->addWidget(pQuitbutton);
  +
       pMainlayout->addLayout(pControllayout);
       pTitraqformlayout->addLayout(pMainlayout);
   
       init(); // Initialize signal and slot connections
  +}
  +
  +void Titraqform::addEntry()
  +{
  +//    if (!pTable->text().isEmpty()) {
  +//        QTableRow *pRow = new QTableRow;
  +//        pRow->setText(0, NULL);
  +//        pRow->setText(1, NULL);
  +//        pRow->setText(2, NULL);
  +//        pRow->setText(3, NULL);
  +//    }
  +}
  +
  +void Titraqform::delEntry()
  +{
  +}
  +
  +void Titraqform::writeEntry()
  +{
   }
   
   //
  Index: ossp-pkg/titraq/titraq.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 titraq.h
  --- ossp-pkg/titraq/titraq.h	11 Nov 2002 21:39:08 -0000	1.2
  +++ ossp-pkg/titraq/titraq.h	12 Nov 2002 19:16:00 -0000	1.3
  @@ -1,12 +1,11 @@
   #ifndef OPKGFORM_H
   #define OPKGFORM_H
   
  -#include <qdialog.h>
  +#include <qmainwindow.h>
   #include <qtable.h>
   #include <qheader.h>
   #include <qimage.h>
   #include <qpixmap.h>
  -#include <qstringlist.h>
   #include <qpushbutton.h>
   #include <qlineedit.h>
   #include <qlayout.h>
  @@ -17,13 +16,12 @@
   const int knCols = 6;
   
   // Main application form window
  -class Titraqform : public QDialog
  +class Titraqform : public QMainWindow
   {
       Q_OBJECT    // Needed for MOC object model generation
   
   public:
  -    Titraqform(QWidget *pParent = 0, const char *kszName = 0,
  -        bool bModal = false, WFlags Flags = 0);
  +    Titraqform(QWidget *pParent = 0, const char *kszName = 0, WFlags Flags = 0);
       ~Titraqform();
   
       // Table, cells, and entries in package layout
  @@ -31,24 +29,30 @@
       QHeader *pTablehead;
       QImage *pIconimage;
       QPixmap *pIconpixmap;
  -    QStringList *pComboentries;
  +    QStringList *pTaskentries;
   
       // Push buttons in control layout
       QPushButton *pAddbutton;
       QPushButton *pDeletebutton;
       QPushButton *pWritebutton;
  +    QPushButton *pQuitbutton;
   
       // Line edit for status
       QLineEdit *pStatus;
   
   protected slots:
       virtual void init();            // Override init to include custom controls
  +    void addEntry();
  +    void delEntry();
  +    void writeEntry();
   
   protected:
       QVBoxLayout *pTitraqformlayout; // Main form layout
       QVBoxLayout *pMainlayout;       // Package and control layouts
       QVBoxLayout *pPackagelayout;    // Main table control
       QHBoxLayout *pControllayout;    // Lower control buttons
  +
  +private:
   };
   
   #endif // OPKGFORM_H

From ossp-cvs-owner@ossp.org  Wed Nov 13 09:41:10 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3EE1176A14; Wed, 13 Nov 2002 09:41:10 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq titraq.cpp
Message-Id: <20021113084110.3EE1176A14@mail.ossp.org>
Date: Wed, 13 Nov 2002 09:41:10 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   13-Nov-2002 09:41:10
  Branch: HEAD                             Handle: 2002111308410900

  Modified files:
    ossp-pkg/titraq         titraq.cpp

  Log:
    Fix Unicode inconsistencies.

  Summary:
    Revision    Changes     Path
    1.4         +13 -13     ossp-pkg/titraq/titraq.cpp
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/titraq.cpp
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 titraq.cpp
  --- ossp-pkg/titraq/titraq.cpp	12 Nov 2002 19:16:00 -0000	1.3
  +++ ossp-pkg/titraq/titraq.cpp	13 Nov 2002 08:41:09 -0000	1.4
  @@ -31,7 +31,7 @@
       QMainWindow(pParent, kszName, Flags)
   {
       if (!kszName)
  -    setName("Titraqform");
  +    setName(trUtf8("Titraqform"));
       resize(600, 480);
       setCaption(trUtf8("OSSP Titraq"));
   
  @@ -58,12 +58,12 @@
   
       // Table header row
       pTablehead = pMaintable->horizontalHeader();
  -    pTablehead->setLabel(0, QObject::tr("Date"), 96);
  -    pTablehead->setLabel(1, QObject::tr("Begin"), 80);
  -    pTablehead->setLabel(2, QObject::tr("End"), 80);
  -    pTablehead->setLabel(3, QObject::tr("Amount"), 52);
  -    pTablehead->setLabel(4, QObject::tr("Task"), 70);
  -    pTablehead->setLabel(5, QObject::tr("Remark"));
  +    pTablehead->setLabel(0, QObject::trUtf8("Date"), 96);
  +    pTablehead->setLabel(1, QObject::trUtf8("Begin"), 80);
  +    pTablehead->setLabel(2, QObject::trUtf8("End"), 80);
  +    pTablehead->setLabel(3, QObject::trUtf8("Amount"), 52);
  +    pTablehead->setLabel(4, QObject::trUtf8("Task"), 70);
  +    pTablehead->setLabel(5, QObject::trUtf8("Remark"));
       pTablehead->setMovingEnabled(true);
   
       // Icon image items
  @@ -103,7 +103,7 @@
   
       // Populate the task stringlist
       pTaskentries = new QStringList;
  -    *pTaskentries << "titraq" << "opgui" << "email"<< "admin" << "pmod" << "psod" << "meeting" << "training";
  +    *pTaskentries << trUtf8("titraq") << trUtf8("opgui") << trUtf8("email") << trUtf8("admin") << trUtf8("pmod") << trUtf8("psod") << trUtf8("meeting") << trUtf8("training");
   
       // Make the combobox items for all rows
       for (int i = 0; i < knRows; ++i) {
  @@ -148,7 +148,7 @@
       pStatus->setFrameShadow(QLineEdit::Sunken);
       pStatus->setFrame(true);
       pStatus->setReadOnly(true);
  -    QToolTip::add(pStatus, trUtf8("&Status line"));
  +    QToolTip::add(pStatus, trUtf8("Status Line"));
       pPackagelayout->addWidget(pStatus);
       pMainlayout->addLayout(pPackagelayout);
   
  @@ -159,7 +159,7 @@
       pAddbutton = new QPushButton(this, "AddButton");
       pAddbutton->setCursor(QCursor(13));
       pAddbutton->setText(trUtf8("&Add"));
  -    QToolTip::add(pAddbutton, trUtf8("&Add entry"));
  +    QToolTip::add(pAddbutton, trUtf8("Add Entry"));
       connect(pAddbutton, SIGNAL(clicked()), this, SLOT(addEntry()));
       pControllayout->addWidget(pAddbutton);
   
  @@ -168,7 +168,7 @@
       pDeletebutton->setCursor(QCursor(13));
       pDeletebutton->setText(trUtf8("&Delete"));
       pDeletebutton->setFlat(false);
  -    QToolTip::add(pDeletebutton, trUtf8("&Delete entry"));
  +    QToolTip::add(pDeletebutton, trUtf8("Delete Entry"));
       connect(pDeletebutton, SIGNAL(clicked()), this, SLOT(delEntry()));
       pControllayout->addWidget(pDeletebutton);
   
  @@ -176,7 +176,7 @@
       pWritebutton = new QPushButton(this, "pWritebutton");
       pWritebutton->setCursor(QCursor(13));
       pWritebutton->setText(trUtf8("&Write"));
  -    QToolTip::add(pWritebutton, trUtf8("&Write entry"));
  +    QToolTip::add(pWritebutton, trUtf8("Write Entry"));
       connect(pWritebutton, SIGNAL(clicked()), this, SLOT(writeEntry()));
       pControllayout->addWidget(pWritebutton);
   
  @@ -185,7 +185,7 @@
       pQuitbutton->setCursor(QCursor(13));
       pQuitbutton->setText(trUtf8("&Quit"));
       pQuitbutton->setFlat(false);
  -    QToolTip::add(pQuitbutton, trUtf8("&Quit"));
  +    QToolTip::add(pQuitbutton, trUtf8("Quit"));
       connect(pQuitbutton, SIGNAL(clicked()), qApp, SLOT(quit()));
       pControllayout->addWidget(pQuitbutton);
   

From ossp-cvs-owner@ossp.org  Wed Nov 13 13:33:34 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0A38C76A14; Wed, 13 Nov 2002 13:33:34 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq Makefile.in generic.cpp generic.h
Message-Id: <20021113123334.0A38C76A14@mail.ossp.org>
Date: Wed, 13 Nov 2002 13:33:34 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   13-Nov-2002 13:33:33
  Branch: HEAD                             Handle: 2002111312333300

  Added files:
    ossp-pkg/titraq         generic.cpp generic.h
  Modified files:
    ossp-pkg/titraq         Makefile.in

  Log:
    New generic class for implementation, widget, and feature prototyping.

  Summary:
    Revision    Changes     Path
    1.6         +2  -2      ossp-pkg/titraq/Makefile.in
    1.1         +38 -0      ossp-pkg/titraq/generic.cpp
    1.1         +21 -0      ossp-pkg/titraq/generic.h
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/Makefile.in
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 Makefile.in
  --- ossp-pkg/titraq/Makefile.in	8 Nov 2002 12:34:05 -0000	1.5
  +++ ossp-pkg/titraq/Makefile.in	13 Nov 2002 12:33:33 -0000	1.6
  @@ -65,9 +65,9 @@
   TARGET_PROGS    = titraq
   TARGET_MANS     = titraq.1 titraq.conf.5
   
  -SRCS            = main.cpp titraq.cpp titraq_version.c
  +SRCS            = main.cpp titraq.cpp generic.cpp titraq_version.c
   
  -OBJS            = main.o titraq.o titraq_version.o
  +OBJS            = main.o titraq.o generic.o titraq_version.o
   
   GRAFX           = gfx/ossplogo.xpm
   
  Index: ossp-pkg/titraq/generic.cpp
  ============================================================
  $ cvs update -p -r1.1 generic.cpp
  #include <qobject.h>
  #include "generic.h"
  
  // Construct a Prototype object
  Prototype::Prototype()
  {
      // For display of a prototype implementation
      m_pProtomsg = new QMessageBox("OSSP titraq",
          QObject::trUtf8("This method is not implemented yet."),
          QMessageBox::NoIcon, QMessageBox::Ok | QMessageBox::Default,
          QMessageBox::Cancel | QMessageBox::Escape, QMessageBox::NoButton,
          NULL, "Prototypemsg", true, Qt::WStyle_NormalBorder);
  }
  
  // Destroy a Prototype object
  Prototype::~Prototype()
  {
      // Destroy our QMessageBox
      delete m_pProtomsg;
  }
  
  // Display a message box, acting as an implementation prototype
  void Prototype::doMbox()
  {
      int nRet; // Return value
  
      // Launch our QMessageBox
      nRet = m_pProtomsg->exec();
  
      // Handle message box modality
      switch (nRet) {
      case QMessageBox::Ok:
          break;
      case QMessageBox::Cancel:
      default: // Just for sanity
          break;
      }
  }
  Index: ossp-pkg/titraq/generic.h
  ============================================================
  $ cvs update -p -r1.1 generic.h
  #ifndef GENERIC_H
  #define GENERIC_H
  
  #include <qmessagebox.h>
  
  
  // Prototype stubs for unimplemented methods, widgets, and features
  class Prototype
  {
  public:
      Prototype();
      void doMbox();
      ~Prototype();
  
  protected:
  
  private:
      QMessageBox *m_pProtomsg;   // Display prototype implementation
  };
  
  #endif // GENERIC_H

From ossp-cvs-owner@ossp.org  Wed Nov 13 13:38:26 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DAB7476A14; Wed, 13 Nov 2002 13:38:25 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq main.cpp titraq.cpp titraq.h
Message-Id: <20021113123825.DAB7476A14@mail.ossp.org>
Date: Wed, 13 Nov 2002 13:38:25 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   13-Nov-2002 13:38:25
  Branch: HEAD                             Handle: 2002111312382500

  Modified files:
    ossp-pkg/titraq         main.cpp titraq.cpp titraq.h

  Log:
    Introduce prototypes, correct variable naming, and other cleanups.

  Summary:
    Revision    Changes     Path
    1.5         +0  -1      ossp-pkg/titraq/main.cpp
    1.5         +110 -104   ossp-pkg/titraq/titraq.cpp
    1.4         +25 -25     ossp-pkg/titraq/titraq.h
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/main.cpp
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 main.cpp
  --- ossp-pkg/titraq/main.cpp	11 Nov 2002 21:39:08 -0000	1.4
  +++ ossp-pkg/titraq/main.cpp	13 Nov 2002 12:38:25 -0000	1.5
  @@ -1,4 +1,3 @@
  -#include <qapplication.h>
   #include <qcdestyle.h>
   
   #include "titraq.h"
  Index: ossp-pkg/titraq/titraq.cpp
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 titraq.cpp
  --- ossp-pkg/titraq/titraq.cpp	13 Nov 2002 08:41:09 -0000	1.4
  +++ ossp-pkg/titraq/titraq.cpp	13 Nov 2002 12:38:25 -0000	1.5
  @@ -1,7 +1,5 @@
   // System interface
  -#include <qapplication.h>
   #include <qtooltip.h>
  -#include <qdatetime.h>
   #include <qdatetimeedit.h>
   #include <qspinbox.h>
   #include <qstringlist.h>
  @@ -10,17 +8,18 @@
   
   // User interface
   #include "titraq.h"         // Main classes
  +#include "generic.h"        // Generic classes
   #include "gfx/ossplogo.xpm" // OSSP logo: static const char *ossplogo_xpm[]
   
   // Used in initialization of the application
  -void Titraqform::init()
  +void Titraqform::init(void)
   {
  -    pAddbutton->setPaletteBackgroundColor(QColor(196, 196, 176));
  -    pDeletebutton->setPaletteBackgroundColor(QColor(196, 196, 176));
  -    pWritebutton->setPaletteBackgroundColor(QColor(196, 196, 176));
  -    pQuitbutton->setPaletteBackgroundColor(QColor(196, 196, 176));
  -    pMaintable->setCurrentCell(0, 0);   // Set the initial focus
  -    pMaintable->setFocus();             // Focus on the table
  +    m_pAddbutton->setPaletteBackgroundColor(QColor(196, 196, 176));
  +    m_pDeletebutton->setPaletteBackgroundColor(QColor(196, 196, 176));
  +    m_pWritebutton->setPaletteBackgroundColor(QColor(196, 196, 176));
  +    m_pQuitbutton->setPaletteBackgroundColor(QColor(196, 196, 176));
  +    m_pMaintable->setCurrentCell(0, 0);     // Set the initial focus
  +    m_pMaintable->setFocus();               // Focus on the table
   }
   
   //
  @@ -30,100 +29,101 @@
   Titraqform::Titraqform(QWidget *pParent,  const char *kszName, WFlags Flags) :
       QMainWindow(pParent, kszName, Flags)
   {
  -    if (!kszName)
  -    setName(trUtf8("Titraqform"));
  +    // Initial widget manipulations
       resize(600, 480);
       setCaption(trUtf8("OSSP Titraq"));
  +    if (!kszName)
  +        setName(trUtf8("Titraqform"));
   
       // Create a central frame and associated layout for QMainWindow
  -    QFrame *pCenframe = new QFrame(this);
  -    this->setCentralWidget(pCenframe);
  +    m_pCenframe = new QFrame(this);
  +    setCentralWidget(m_pCenframe);
   
       // Control layouts for form, table, and status line
  -    pTitraqformlayout = new QVBoxLayout(pCenframe, 11, 6, "pTitraqformlayout");
  -    pMainlayout = new QVBoxLayout(0, 0, 6, "pMainlayout");       // For layouts
  -    pPackagelayout = new QVBoxLayout(0, 0, 6, "pPackagelayout"); // For table
  +    m_pTitraqformlayout = new QVBoxLayout(m_pCenframe, 11, 6, "pTitraqformlayout");
  +    m_pMainlayout = new QVBoxLayout(0, 0, 6, "pMainlayout");        // For layouts
  +    m_pPackagelayout = new QVBoxLayout(0, 0, 6, "pPackagelayout");  // For table
   
       // The table itself
  -    pMaintable = new QTable(this, "pMaintable");
  -    pMaintable->setNumRows(knRows);
  -    pMaintable->setNumCols(knCols);
  -    pMaintable->setReadOnly(false);                 // Not read only
  -    pMaintable->setColumnMovingEnabled(true);       // Ctrl-drag of headers
  -    pMaintable->setSelectionMode(QTable::MultiRow); // Multi row selection
  -    pMaintable->setLeftMargin(0);           // Get rid of the vertical header
  -    pMaintable->verticalHeader()->hide();   // by hiding it with a margin of 0
  -    pMaintable->horizontalHeader()->setResizeEnabled(false);
  -    pMaintable->setColumnStretchable(5, true);
  +    m_pMaintable = new QTable(this, "pMaintable");
  +    m_pMaintable->setNumRows(g_knRows);
  +    m_pMaintable->setNumCols(g_knCols);
  +    m_pMaintable->setReadOnly(false);                   // Not read only
  +    m_pMaintable->setColumnMovingEnabled(true);         // Ctrl-drag of headers
  +    m_pMaintable->setSelectionMode(QTable::MultiRow);   // Multi row selection
  +    m_pMaintable->setLeftMargin(0);             // Get rid of the vertical header
  +    m_pMaintable->verticalHeader()->hide();     // by hiding it with a margin of 0
  +    m_pMaintable->horizontalHeader()->setResizeEnabled(false);
  +    m_pMaintable->setColumnStretchable(5, true);
   
       // Table header row
  -    pTablehead = pMaintable->horizontalHeader();
  -    pTablehead->setLabel(0, QObject::trUtf8("Date"), 96);
  -    pTablehead->setLabel(1, QObject::trUtf8("Begin"), 80);
  -    pTablehead->setLabel(2, QObject::trUtf8("End"), 80);
  -    pTablehead->setLabel(3, QObject::trUtf8("Amount"), 52);
  -    pTablehead->setLabel(4, QObject::trUtf8("Task"), 70);
  -    pTablehead->setLabel(5, QObject::trUtf8("Remark"));
  -    pTablehead->setMovingEnabled(true);
  +    m_pTablehead = m_pMaintable->horizontalHeader();
  +    m_pTablehead->setLabel(0, QObject::trUtf8("Date"), 96);
  +    m_pTablehead->setLabel(1, QObject::trUtf8("Begin"), 80);
  +    m_pTablehead->setLabel(2, QObject::trUtf8("End"), 80);
  +    m_pTablehead->setLabel(3, QObject::trUtf8("Amount"), 52);
  +    m_pTablehead->setLabel(4, QObject::trUtf8("Task"), 70);
  +    m_pTablehead->setLabel(5, QObject::trUtf8("Remark"));
  +    m_pTablehead->setMovingEnabled(true);
   
       // Icon image items
  -    pIconimage = new QImage(ossplogo_xpm);
  -    pIconpixmap = new QPixmap(pIconimage->scaleHeight(pMaintable->rowHeight(6)));
  -    pMaintable->setItem(0, 0, new QTableItem(pMaintable, QTableItem::Never, "OSSP trac"));
  -    pMaintable->setPixmap(0, 0, *pIconpixmap);
  +    m_pIconimage = new QImage(ossplogo_xpm);
  +    m_pIconpixmap = new QPixmap(m_pIconimage->scaleHeight(m_pMaintable->rowHeight(6)));
  +    m_pMaintable->setItem(0, 0, new QTableItem(m_pMaintable, QTableItem::Never, "OSSP trac"));
  +    m_pMaintable->setPixmap(0, 0, *m_pIconpixmap);
   
   //    // Make a generic table item for all rows
   //    for (int i = 1; i < knRows; ++i)
  -//        pMaintable->setItem(i, 0, new QTableItem(pMaintable, QTableItem::Always, ("Enter")));
  +//        m_pMaintable->setItem(i, 0, new QTableItem(m_pMaintable, QTableItem::Always, ("Enter")));
   
       // Make the date selector for all rows
  -    for (int i = 1; i < knRows; ++i) {
  +    for (int i = 1; i < g_knRows; ++i) {
           QDate *pSylvestre = new QDate(2002, 12, 31);
  -        QDateEdit *pDateEdit = new QDateEdit(*pSylvestre, pMaintable, "Date");
  -        pMaintable->setCellWidget(i, 0, pDateEdit);
  +        QDateEdit *pDateEdit = new QDateEdit(*pSylvestre, m_pMaintable, "Date");
  +        m_pMaintable->setCellWidget(i, 0, pDateEdit);
       }
   
       // Make the time start selector for all rows
  -    for (int i = 0; i < knRows; ++i) {
  -        QTimeEdit *pStart = new QTimeEdit(QTime::currentTime(), pMaintable, "Start");
  -        pMaintable->setCellWidget(i, 1, pStart);
  +    for (int i = 0; i < g_knRows; ++i) {
  +        QTimeEdit *pStart = new QTimeEdit(QTime::currentTime(), m_pMaintable, "Start");
  +        m_pMaintable->setCellWidget(i, 1, pStart);
       }
   
       // Make the time end selector for all rows
  -    for (int i = 0; i < knRows; ++i) {
  -        QTimeEdit *pEnd = new QTimeEdit(QTime::currentTime(), pMaintable, "End");
  -        pMaintable->setCellWidget(i, 2, pEnd);
  +    for (int i = 0; i < g_knRows; ++i) {
  +        QTimeEdit *pEnd = new QTimeEdit(QTime::currentTime(), m_pMaintable, "End");
  +        m_pMaintable->setCellWidget(i, 2, pEnd);
       }
   
       // Make the amount selector for all rows
  -    for (int i = 0; i < knRows; ++i) {
  -        QSpinBox *pAmount = new QSpinBox(pMaintable, "Amount");
  -        pMaintable->setCellWidget(i, 3, pAmount);
  +    for (int i = 0; i < g_knRows; ++i) {
  +        QSpinBox *pAmount = new QSpinBox(m_pMaintable, "Amount");
  +        m_pMaintable->setCellWidget(i, 3, pAmount);
       }
   
       // Populate the task stringlist
  -    pTaskentries = new QStringList;
  -    *pTaskentries << trUtf8("titraq") << trUtf8("opgui") << trUtf8("email") << trUtf8("admin") << trUtf8("pmod") << trUtf8("psod") << trUtf8("meeting") << trUtf8("training");
  +    m_pTaskentries = new QStringList;
  +    *m_pTaskentries << trUtf8("titraq") << trUtf8("opgui") << trUtf8("email") << trUtf8("admin") << trUtf8("pmod") << trUtf8("psod") << trUtf8("meeting") << trUtf8("training");
   
       // Make the combobox items for all rows
  -    for (int i = 0; i < knRows; ++i) {
  -        QComboBox *pTasks = new QComboBox(true, pMaintable, "Tasks");
  -        pTasks->insertStringList(*pTaskentries);
  +    for (int i = 0; i < g_knRows; ++i) {
  +        QComboBox *pTasks = new QComboBox(true, m_pMaintable, "Tasks");
  +        pTasks->insertStringList(*m_pTaskentries);
           pTasks->setCurrentText(NULL);
           pTasks->setAutoCompletion(true);
  -        pMaintable->setCellWidget(i, 4, pTasks);
  +        m_pMaintable->setCellWidget(i, 4, pTasks);
       }
   
   //    // Make the listbox for all rows
   //    for (int i = 0; i < knRows; ++i) {
  -//        QListBox *pTasks = new QListBox(pMaintable, "Tasks");
  +//        QListBox *pTasks = new QListBox(m_pMaintable, "Tasks");
   //        pTasks->insertStringList(*pTaskentries);
   //        pTasks->setCurrentItem(i % 8);
  -//        pMaintable->setCellWidget(i, 4, pTasks);
  +//        m_pMaintable->setCellWidget(i, 4, pTasks);
   //    }
   
   //    // Populate a listbox for the task combobox
  -//    QListBox *pListasks = new QListBox(pMaintable);
  +//    QListBox *pListasks = new QListBox(m_pMaintable);
   //    pListasks->insertItem("titraq");
   //    pListasks->insertItem("opgui");
   //    pListasks->insertItem("email");
  @@ -135,68 +135,70 @@
   
   //    // Make the combobox items for all rows
   //    for (int i = 0; i < knRows; ++i) {
  -//        QComboTableItem *pTasks = new QComboTableItem(pMaintable, *pTaskentries, false);
  +//        QComboTableItem *pTasks = new QComboTableItem(m_pMaintable, *m_pTaskentries, false);
   //        pTasks->setCurrentItem(i % 8);
  -//        pMaintable->setItem(i, 4, pTasks);
  +//        m_pMaintable->setItem(i, 4, pTasks);
   //    }
   
  -    pPackagelayout->addWidget(pMaintable);  // Finally add the table widget
  +    m_pPackagelayout->addWidget(m_pMaintable);  // Finally add the table widget
   
       // Bottom output line
  -    pStatus = new QLineEdit(this, "pStatus");
  -    pStatus->setFrameShape(QLineEdit::LineEditPanel);
  -    pStatus->setFrameShadow(QLineEdit::Sunken);
  -    pStatus->setFrame(true);
  -    pStatus->setReadOnly(true);
  -    QToolTip::add(pStatus, trUtf8("Status Line"));
  -    pPackagelayout->addWidget(pStatus);
  -    pMainlayout->addLayout(pPackagelayout);
  +    m_pStatus = new QLineEdit(this, "pStatus");
  +    m_pStatus->setFrameShape(QLineEdit::LineEditPanel);
  +    m_pStatus->setFrameShadow(QLineEdit::Sunken);
  +    m_pStatus->setFrame(true);
  +    m_pStatus->setReadOnly(true);
  +    QToolTip::add(m_pStatus, trUtf8("Status Line"));
  +    m_pPackagelayout->addWidget(m_pStatus);
  +    m_pMainlayout->addLayout(m_pPackagelayout);
   
       // Control layout for push buttons
  -    pControllayout = new QHBoxLayout(0, 0, 6, "pControllayout"); // For buttons
  +    m_pControllayout = new QHBoxLayout(0, 0, 6, "pControllayout");  // For buttons
   
       // Tuple push button add
  -    pAddbutton = new QPushButton(this, "AddButton");
  -    pAddbutton->setCursor(QCursor(13));
  -    pAddbutton->setText(trUtf8("&Add"));
  -    QToolTip::add(pAddbutton, trUtf8("Add Entry"));
  -    connect(pAddbutton, SIGNAL(clicked()), this, SLOT(addEntry()));
  -    pControllayout->addWidget(pAddbutton);
  +    m_pAddbutton = new QPushButton(this, "AddButton");
  +    m_pAddbutton->setCursor(QCursor(13));
  +    m_pAddbutton->setText(trUtf8("&Add"));
  +    QToolTip::add(m_pAddbutton, trUtf8("Add Entry"));
  +    connect(m_pAddbutton, SIGNAL(clicked()), this, SLOT(addEntry()));
  +    m_pControllayout->addWidget(m_pAddbutton);
   
       // Tuple push button delete
  -    pDeletebutton = new QPushButton(this, "pDeletebutton");
  -    pDeletebutton->setCursor(QCursor(13));
  -    pDeletebutton->setText(trUtf8("&Delete"));
  -    pDeletebutton->setFlat(false);
  -    QToolTip::add(pDeletebutton, trUtf8("Delete Entry"));
  -    connect(pDeletebutton, SIGNAL(clicked()), this, SLOT(delEntry()));
  -    pControllayout->addWidget(pDeletebutton);
  +    m_pDeletebutton = new QPushButton(this, "pDeletebutton");
  +    m_pDeletebutton->setCursor(QCursor(13));
  +    m_pDeletebutton->setText(trUtf8("&Delete"));
  +    m_pDeletebutton->setFlat(false);
  +    QToolTip::add(m_pDeletebutton, trUtf8("Delete Entry"));
  +    connect(m_pDeletebutton, SIGNAL(clicked()), this, SLOT(delEntry()));
  +    m_pControllayout->addWidget(m_pDeletebutton);
   
       // Tuple push button write
  -    pWritebutton = new QPushButton(this, "pWritebutton");
  -    pWritebutton->setCursor(QCursor(13));
  -    pWritebutton->setText(trUtf8("&Write"));
  -    QToolTip::add(pWritebutton, trUtf8("Write Entry"));
  -    connect(pWritebutton, SIGNAL(clicked()), this, SLOT(writeEntry()));
  -    pControllayout->addWidget(pWritebutton);
  +    m_pWritebutton = new QPushButton(this, "pWritebutton");
  +    m_pWritebutton->setCursor(QCursor(13));
  +    m_pWritebutton->setText(trUtf8("&Write"));
  +    QToolTip::add(m_pWritebutton, trUtf8("Write Entry"));
  +    connect(m_pWritebutton, SIGNAL(clicked()), this, SLOT(writeEntry()));
  +    m_pControllayout->addWidget(m_pWritebutton);
   
       // Tuple push button quit
  -    pQuitbutton = new QPushButton(this, "pQuitbutton");
  -    pQuitbutton->setCursor(QCursor(13));
  -    pQuitbutton->setText(trUtf8("&Quit"));
  -    pQuitbutton->setFlat(false);
  -    QToolTip::add(pQuitbutton, trUtf8("Quit"));
  -    connect(pQuitbutton, SIGNAL(clicked()), qApp, SLOT(quit()));
  -    pControllayout->addWidget(pQuitbutton);
  +    m_pQuitbutton = new QPushButton(this, "pQuitbutton");
  +    m_pQuitbutton->setCursor(QCursor(13));
  +    m_pQuitbutton->setText(trUtf8("&Quit"));
  +    m_pQuitbutton->setFlat(false);
  +    QToolTip::add(m_pQuitbutton, trUtf8("Quit titraq"));
  +    connect(m_pQuitbutton, SIGNAL(clicked()), qApp, SLOT(quit()));
  +    m_pControllayout->addWidget(m_pQuitbutton);
   
  -    pMainlayout->addLayout(pControllayout);
  -    pTitraqformlayout->addLayout(pMainlayout);
  +    m_pMainlayout->addLayout(m_pControllayout);
  +    m_pTitraqformlayout->addLayout(m_pMainlayout);
   
       init(); // Initialize signal and slot connections
   }
   
  -void Titraqform::addEntry()
  +void Titraqform::addEntry(void)
   {
  +    Prototype Unimp;
  +    Unimp.doMbox();
   //    if (!pTable->text().isEmpty()) {
   //        QTableRow *pRow = new QTableRow;
   //        pRow->setText(0, NULL);
  @@ -206,18 +208,22 @@
   //    }
   }
   
  -void Titraqform::delEntry()
  +void Titraqform::delEntry(void)
   {
  +    Prototype Unimp;
  +    Unimp.doMbox();
   }
   
  -void Titraqform::writeEntry()
  +void Titraqform::writeEntry(void)
   {
  +    Prototype Unimp;
  +    Unimp.doMbox();
   }
   
   //
   // Destroy the object and free any allocated resources
   //
  -Titraqform::~Titraqform()
  +Titraqform::~Titraqform(void)
   {
       // Qt deletes child widgets for us
   }
  Index: ossp-pkg/titraq/titraq.h
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 titraq.h
  --- ossp-pkg/titraq/titraq.h	12 Nov 2002 19:16:00 -0000	1.3
  +++ ossp-pkg/titraq/titraq.h	13 Nov 2002 12:38:25 -0000	1.4
  @@ -1,19 +1,18 @@
  -#ifndef OPKGFORM_H
  -#define OPKGFORM_H
  +#ifndef TITRAQMWIN_H
  +#define TITRAQMWIN_H
   
  +#include <qapplication.h>
   #include <qmainwindow.h>
   #include <qtable.h>
  -#include <qheader.h>
   #include <qimage.h>
  -#include <qpixmap.h>
   #include <qpushbutton.h>
   #include <qlineedit.h>
   #include <qlayout.h>
   
   
   // Main table size
  -const int knRows = 18;
  -const int knCols = 6;
  +const int g_knRows = 18;
  +const int g_knCols = 6;
   
   // Main application form window
   class Titraqform : public QMainWindow
  @@ -25,34 +24,35 @@
       ~Titraqform();
   
       // Table, cells, and entries in package layout
  -    QTable *pMaintable;
  -    QHeader *pTablehead;
  -    QImage *pIconimage;
  -    QPixmap *pIconpixmap;
  -    QStringList *pTaskentries;
  +    QTable      *m_pMaintable;
  +    QHeader     *m_pTablehead;
  +    QImage      *m_pIconimage;
  +    QPixmap     *m_pIconpixmap;
  +    QStringList *m_pTaskentries;
   
       // Push buttons in control layout
  -    QPushButton *pAddbutton;
  -    QPushButton *pDeletebutton;
  -    QPushButton *pWritebutton;
  -    QPushButton *pQuitbutton;
  +    QPushButton *m_pAddbutton;
  +    QPushButton *m_pDeletebutton;
  +    QPushButton *m_pWritebutton;
  +    QPushButton *m_pQuitbutton;
   
       // Line edit for status
  -    QLineEdit *pStatus;
  +    QLineEdit *m_pStatus;
   
   protected slots:
  -    virtual void init();            // Override init to include custom controls
  -    void addEntry();
  -    void delEntry();
  -    void writeEntry();
  +    virtual void init(void);            // Override init to include custom controls
  +    void addEntry(void);                // Add a task entry to the list
  +    void delEntry(void);                // Delete a task entry from the list
  +    void writeEntry(void);              // Write the task list to a filedescriptor
   
   protected:
  -    QVBoxLayout *pTitraqformlayout; // Main form layout
  -    QVBoxLayout *pMainlayout;       // Package and control layouts
  -    QVBoxLayout *pPackagelayout;    // Main table control
  -    QHBoxLayout *pControllayout;    // Lower control buttons
  +    QFrame      *m_pCenframe;           // Central frame
  +    QVBoxLayout *m_pTitraqformlayout;   // Main form layout
  +    QVBoxLayout *m_pMainlayout;         // Package and control layouts
  +    QVBoxLayout *m_pPackagelayout;      // Main table control
  +    QHBoxLayout *m_pControllayout;      // Lower control buttons
   
   private:
   };
   
  -#endif // OPKGFORM_H
  +#endif // TITRAQMWIN_H

From ossp-cvs-owner@ossp.org  Wed Nov 13 17:36:59 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5995476A14; Wed, 13 Nov 2002 17:36:59 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq TODO titraq.cpp titraq.h
Message-Id: <20021113163659.5995476A14@mail.ossp.org>
Date: Wed, 13 Nov 2002 17:36:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   13-Nov-2002 17:36:59
  Branch: HEAD                             Handle: 2002111316365800

  Modified files:
    ossp-pkg/titraq         TODO titraq.cpp titraq.h

  Log:
    First cut at a menu bar, tool bar, and status bar.

  Summary:
    Revision    Changes     Path
    1.5         +3  -0      ossp-pkg/titraq/TODO
    1.6         +24 -2      ossp-pkg/titraq/titraq.cpp
    1.5         +7  -0      ossp-pkg/titraq/titraq.h
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/TODO
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 TODO
  --- ossp-pkg/titraq/TODO	11 Nov 2002 21:39:08 -0000	1.4
  +++ ossp-pkg/titraq/TODO	13 Nov 2002 16:36:58 -0000	1.5
  @@ -11,6 +11,9 @@
   -------
   Add GUID
   Add Ex_ID
  +Q_CHECK_PTR
  +public/private
  +QWhatsThis::add(m_pAddbutton, trUtf8("Para soltar la pepa"));
   
   Dreams
   ------
  Index: ossp-pkg/titraq/titraq.cpp
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 titraq.cpp
  --- ossp-pkg/titraq/titraq.cpp	13 Nov 2002 12:38:25 -0000	1.5
  +++ ossp-pkg/titraq/titraq.cpp	13 Nov 2002 16:36:58 -0000	1.6
  @@ -30,10 +30,32 @@
       QMainWindow(pParent, kszName, Flags)
   {
       // Initial widget manipulations
  -    resize(600, 480);
  -    setCaption(trUtf8("OSSP Titraq"));
       if (!kszName)
           setName(trUtf8("Titraqform"));
  +    resize(600, 480);
  +    m_pMenubar = this->menuBar();
  +    m_pStatbar = this->statusBar();
  +    m_pStatbar->message(trUtf8("Ready"));
  +    setCaption(trUtf8("OSSP Titraq"));
  +
  +    // Lock down window size
  +    setSizePolicy(QSizePolicy((QSizePolicy::SizeType)0,
  +        (QSizePolicy::SizeType)0, 0, 0, sizePolicy().hasHeightForWidth()));
  +
  +    // Work on the menu bar
  +    QPopupMenu *pFilepopup = new QPopupMenu(this);
  +    m_pMenubar->insertItem("&File", pFilepopup);
  +//    pFilepopup->insertItem("&Quit", this, SLOT(quit()));
  +//    pFilenewact->addTo(pFilepopup);
  +//    pFileopenact->addTo(pFilepopup);
  +//    pFilesaveact->addTo(pFilepopup);
  +
  +    // Make a new tool bar
  +    m_pToolbar = new QToolBar("Toolfile", this, DockTop);
  +    m_pToolbar->setLabel(trUtf8("File Ops"));
  +//    pFilenewact->addTo(m_pToolbar);
  +//    pFileopenact->addTo(m_pToolbar);
  +//    pFilesaveact->addTo(m_pToolbar);
   
       // Create a central frame and associated layout for QMainWindow
       m_pCenframe = new QFrame(this);
  Index: ossp-pkg/titraq/titraq.h
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 titraq.h
  --- ossp-pkg/titraq/titraq.h	13 Nov 2002 12:38:25 -0000	1.4
  +++ ossp-pkg/titraq/titraq.h	13 Nov 2002 16:36:58 -0000	1.5
  @@ -4,6 +4,9 @@
   #include <qapplication.h>
   #include <qmainwindow.h>
   #include <qtable.h>
  +#include <qmenubar.h>
  +#include <qtoolbar.h>
  +#include <qstatusbar.h>
   #include <qimage.h>
   #include <qpushbutton.h>
   #include <qlineedit.h>
  @@ -53,6 +56,10 @@
       QHBoxLayout *m_pControllayout;      // Lower control buttons
   
   private:
  +    // Don't destroy these, they are owned by QMainWindow
  +    QMenuBar    *m_pMenubar;
  +    QToolBar    *m_pToolbar;
  +    QStatusBar  *m_pStatbar;
   };
   
   #endif // TITRAQMWIN_H

From ossp-cvs-owner@ossp.org  Thu Nov 14 09:54:01 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C0A7876A74; Thu, 14 Nov 2002 09:54:00 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c
Message-Id: <20021114085400.C0A7876A74@mail.ossp.org>
Date: Thu, 14 Nov 2002 09:54:00 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   14-Nov-2002 09:54:00
  Branch: HEAD                             Handle: 2002111408540000

  Modified files:
    ossp-pkg/sa             sa.c

  Log:
    be pedantic about unused variables

  Summary:
    Revision    Changes     Path
    1.71        +2  -0      ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.70 -r1.71 sa.c
  --- ossp-pkg/sa/sa.c	7 Nov 2002 12:44:12 -0000	1.70
  +++ ossp-pkg/sa/sa.c	14 Nov 2002 08:54:00 -0000	1.71
  @@ -285,8 +285,10 @@
   #ifdef HAVE_INET_NTOP
       return inet_ntop(family, src, dst, size);
   #else
  +#ifdef HAVE_INET_NTOA
       char *cp;
       int n;
  +#endif
   
       if (family == AF_INET) {
   #ifdef HAVE_INET_NTOA

From ossp-cvs-owner@ossp.org  Thu Nov 14 10:10:54 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BAE1776A43; Thu, 14 Nov 2002 10:10:53 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio.h
Message-Id: <20021114091053.BAE1776A43@mail.ossp.org>
Date: Thu, 14 Nov 2002 10:10:53 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   14-Nov-2002 10:10:53
  Branch: HEAD                             Handle: 2002111409105300

  Modified files:
    ossp-pkg/sio            sio.h

  Log:
    use the usual all-in-one-row formatting for APIs in OSSP headers to more easily see the common and different arguments

  Summary:
    Revision    Changes     Path
    1.5         +15 -15     ossp-pkg/sio/sio.h
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio.h
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 sio.h
  --- ossp-pkg/sio/sio.h	8 Nov 2002 10:34:24 -0000	1.4
  +++ ossp-pkg/sio/sio.h	14 Nov 2002 09:10:53 -0000	1.5
  @@ -65,27 +65,27 @@
   struct sio_module_st;
   typedef struct sio_module_st sio_module_t;
   
  -sio_rc_t sio_create(sio_t **siop);
  -sio_rc_t sio_destroy(sio_t *sio);
  +sio_rc_t    sio_create         (sio_t **siop);
  +sio_rc_t    sio_destroy        (sio_t  *sio);
   
  -sio_rc_t sio_create_stage(sio_t *sio, sio_module_t *siom, sio_stage_t **siosp);
  -sio_rc_t sio_destroy_stage(sio_t *sio, sio_stage_t *sios);
  -sio_rc_t sio_configure_stage(sio_t *sio, sio_stage_t *sios, void *o, void *v);
  +sio_rc_t    sio_create_stage   (sio_t  *sio, sio_module_t *siom, sio_stage_t **siosp);
  +sio_rc_t    sio_destroy_stage  (sio_t  *sio, sio_stage_t *sios);
  +sio_rc_t    sio_configure_stage(sio_t  *sio, sio_stage_t *sios, void *o, void *v);
   
  -sio_rc_t sio_attach(sio_t *sio, sio_stage_t *sios, sio_mode_t rw);
  -sio_rc_t sio_detach(sio_t *sio, sio_stage_t *sios);
  +sio_rc_t    sio_attach         (sio_t  *sio, sio_stage_t *sios, sio_mode_t rw);
  +sio_rc_t    sio_detach         (sio_t  *sio, sio_stage_t *sios);
   
  -sio_rc_t sio_input(sio_t *sio, al_t *al, size_t limit);
  -sio_rc_t sio_output(sio_t *sio, al_t *al);
  +sio_rc_t    sio_input          (sio_t  *sio, al_t *al, size_t limit);
  +sio_rc_t    sio_output         (sio_t  *sio, al_t *al);
   
  -sio_rc_t sio_read(sio_t *sio, char *dst, size_t n, size_t *actualp);
  -sio_rc_t sio_write(sio_t *sio, char *src, size_t n, size_t *actualp);
  +sio_rc_t    sio_read           (sio_t  *sio, char *dst, size_t n, size_t *actualp);
  +sio_rc_t    sio_write          (sio_t  *sio, char *src, size_t n, size_t *actualp);
   
  -sio_rc_t sio_push(sio_t *sio);
  +sio_rc_t    sio_push           (sio_t  *sio);
   
  -int sio_flag(sio_t *sio, sio_flag_t fl);
  -int sio_clearflag(sio_t *sio, sio_flag_t fl);
  +int         sio_flag           (sio_t  *sio, sio_flag_t fl);
  +int         sio_clearflag      (sio_t  *sio, sio_flag_t fl);
   
  -const char *sio_error(sio_rc_t rc);
  +const char *sio_error          (sio_rc_t rc);
   
   #endif /* __SIO_H__ */

From ossp-cvs-owner@ossp.org  Thu Nov 14 10:17:50 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E422A76A74; Thu, 14 Nov 2002 10:17:49 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio.pod
Message-Id: <20021114091749.E422A76A74@mail.ossp.org>
Date: Thu, 14 Nov 2002 10:17:49 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   14-Nov-2002 10:17:49
  Branch: HEAD                             Handle: 2002111409174900

  Modified files:
    ossp-pkg/sio            sio.pod

  Log:
    bugfix

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/sio/sio.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio.pod
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 sio.pod
  --- ossp-pkg/sio/sio.pod	8 Nov 2002 11:03:13 -0000	1.3
  +++ ossp-pkg/sio/sio.pod	14 Nov 2002 09:17:49 -0000	1.4
  @@ -133,7 +133,7 @@
    SIO_MODE_WRITE     Stage is attached for writing
    SIO_MODE_READWRITE Stage is attached for reading and writing
   
  -=item B<sio_mode_t> (Attach Mode Type)
  +=item B<sio_flag_t> (Flag Type)
   
   This is an exported enumerated integer type with the following possible
   values:

From ossp-cvs-owner@ossp.org  Thu Nov 14 10:22:46 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 98D9976A74; Thu, 14 Nov 2002 10:22:46 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.c sio.c
Message-Id: <20021114092246.98D9976A74@mail.ossp.org>
Date: Thu, 14 Nov 2002 10:22:46 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   14-Nov-2002 10:22:46
  Branch: HEAD                             Handle: 2002111409224200

  Modified files:
    ossp-pkg/sio            al.c sio.c

  Log:
    remove remaining GCC warnings

  Summary:
    Revision    Changes     Path
    1.35        +4  -4      ossp-pkg/sio/al.c
    1.11        +1  -1      ossp-pkg/sio/sio.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.c
  ============================================================
  $ cvs diff -u -r1.34 -r1.35 al.c
  --- ossp-pkg/sio/al.c	5 Nov 2002 14:51:37 -0000	1.34
  +++ ossp-pkg/sio/al.c	14 Nov 2002 09:22:42 -0000	1.35
  @@ -219,7 +219,7 @@
    * only the control structure will be freed later
    */
   static
  -al_rc_t make_buffer(al_t *al, char *p, size_t n, void (*freemem)(char *, size_t, void *), void *u, al_buffer_t **bufp)
  +al_rc_t make_buffer(al_t *al, char *p, size_t n, void (*freemem_cb)(char *, size_t, void *), void *u, al_buffer_t **bufp)
   {
       al_buffer_t *buf;
   
  @@ -228,7 +228,7 @@
   
       buf->mem      = p;
   
  -    buf->freemem  = freemem;
  +    buf->freemem  = freemem_cb;
       buf->userdata = u;
       buf->size     = n;
       buf->usecount = 0;
  @@ -580,7 +580,7 @@
    *
    */
   al_rc_t al_attach_buffer(al_t *al, char *p, size_t n, al_label_t label,
  -                         void (*freemem)(char *, size_t, void *), void *u)
  +                         void (*freemem_cb)(char *, size_t, void *), void *u)
   {
       al_rc_t rc;
       al_buffer_t *buf;
  @@ -590,7 +590,7 @@
       if (al == NULL || p == NULL || n <= 0)
           return AL_RC(AL_ERR_ARG);
   
  -    rc = make_buffer(al, p, n, freemem, u, &buf);
  +    rc = make_buffer(al, p, n, freemem_cb, u, &buf);
       if (rc != AL_OK)
           return AL_RC(rc);
       rc = new_chunk(al,buf,label,&cur);
  Index: ossp-pkg/sio/sio.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 sio.c
  --- ossp-pkg/sio/sio.c	8 Nov 2002 19:46:42 -0000	1.10
  +++ ossp-pkg/sio/sio.c	14 Nov 2002 09:22:42 -0000	1.11
  @@ -500,7 +500,7 @@
       return SIO_RC(rc);
   }
   
  -al_rc_t sio_readchunk(al_chunk_t *alc, void *u)
  +static al_rc_t sio_readchunk(al_chunk_t *alc, void *u)
   {
       sio_t *sio = (sio_t *)u;
       size_t len;

From ossp-cvs-owner@ossp.org  Thu Nov 14 10:24:55 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E07D076A74; Thu, 14 Nov 2002 10:24:54 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio Makefile
Message-Id: <20021114092454.E07D076A74@mail.ossp.org>
Date: Thu, 14 Nov 2002 10:24:54 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   14-Nov-2002 10:24:54
  Branch: HEAD                             Handle: 2002111409245400

  Added files:
    ossp-pkg/sio            Makefile

  Log:
    until we have a real OSSP build env, add a variant of Michaels makefile to CVS for easier building by team

  Summary:
    Revision    Changes     Path
    1.1         +26 -0      ossp-pkg/sio/Makefile
  ____________________________________________________________________________

  Index: ossp-pkg/sio/Makefile
  ============================================================
  $ cvs update -p -r1.1 Makefile
  
  CC     = gcc
  CFLAGS = -g -O2 -Wall -Wshadow -Wpointer-arith -Wcast-align -Winline \
           -Wmissing-prototypes -Wmissing-declarations -Wnested-externs
  
  all: al_test sio_test
  
  .c.o:
  	$(CC) $(CFLAGS) -c $<
  
  al_test: al_test.o al.o
  
  sio_test: sio_test.o sio_buffer.o sio_hello.o sio_fd.o sio_sa.o sio.o al.o lib_sa/sa.o
  
  lib_sa/sa.o: lib_sa/sa.c
  	$(CC) $(CFLAGS) -c -Ilib_sa -o lib_sa/sa.o lib_sa/sa.c
  
  sio_sa.o: sio_sa.c lib_sa/sa.h
  	$(CC) $(CFLAGS) -c -Ilib_sa sio_sa.c
  
  sio_test.o: sio_test.c lib_sa/sa.h
  	$(CC) $(CFLAGS) -c -Ilib_sa sio_test.c
  
  clean:
  	rm -f sio_test sio_test.o sio_buffer.o sio_hello.o sio_fd.o sio_sa.o sio.o al.o lib_sa/sa.o
  

From ossp-cvs-owner@ossp.org  Thu Nov 14 16:56:11 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4CA4B76A74; Thu, 14 Nov 2002 16:56:11 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio.c sio.h sio_buffer.c sio_fd.c sio_hello.c...
Message-Id: <20021114155611.4CA4B76A74@mail.ossp.org>
Date: Thu, 14 Nov 2002 16:56:11 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   14-Nov-2002 16:56:11
  Branch: HEAD                             Handle: 197001010100001037285770

  Modified files:
    ossp-pkg/sio            sio.c sio.h sio_buffer.c sio_fd.c sio_hello.c
                            sio_hole.c sio_null.c sio_sa.c
  Removed files:
    ossp-pkg/sio            sio_module.h

  Log:
    merged sio_module.h into sio.h
    renamed scheduler codes to SIO_SCHED_*
    added comments to sio.c

  Summary:
    Revision    Changes     Path
    1.12        +207 -49    ossp-pkg/sio/sio.c
    1.6         +34 -6      ossp-pkg/sio/sio.h
    1.4         +0  -1      ossp-pkg/sio/sio_buffer.c
    1.7         +6  -7      ossp-pkg/sio/sio_fd.c
    1.7         +12 -13     ossp-pkg/sio/sio_hello.c
    1.4         +2  -3      ossp-pkg/sio/sio_hole.c
    NONE        +0  -20     ossp-pkg/sio/sio_module.h
    1.5         +0  -1      ossp-pkg/sio/sio_null.c
    1.3         +4  -5      ossp-pkg/sio/sio_sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 sio.c
  --- ossp-pkg/sio/sio.c	14 Nov 2002 09:22:42 -0000	1.11
  +++ ossp-pkg/sio/sio.c	14 Nov 2002 15:56:10 -0000	1.12
  @@ -34,7 +34,6 @@
   
   #include "al.h"
   #include "sio.h"
  -#include "sio_module.h"
   #include "list.h"
   
   /****************************************************************************/
  @@ -52,49 +51,68 @@
   #define SIO_RC(rv) (rv)
   #endif /* WITH_EX */
   
  -
  +/*
  + * node representing either input or output
  + * direction of a processing node
  + */
   struct sio_halfduplex_st;
   typedef struct sio_halfduplex_st sio_halfduplex_t;
   struct sio_halfduplex_st {
  -    NODE(sio_halfduplex_t) hd;
  -    sio_stage_t *stage;
  -    sio_halfduplex_t *cross;
  -    const char *tag;
  -    sio_rc_t rc_with_data, rc_no_data;
  -    al_t *al;
  -    sio_rc_t (*func)(sio_t *, al_t *, void *);
  +    NODE(sio_halfduplex_t)  hd;                /* link to reader/writer chain */
  +    sio_stage_t            *stage;             /* back to its stage structure */
  +    sio_halfduplex_t       *cross;             /* reader <-> writer sibling */
  +    const char             *tag;               /* debugging help */
  +    sio_rc_t                rc_with_data;      /* default rc to avoid */
  +    sio_rc_t                rc_no_data;        /*  decision in strategy() */
  +    al_t                   *al;                /* reader/writer assembly line */
  +    sio_rc_t              (*func)(sio_t *, al_t *, void *); /* input() or output() */
  +};
  +
  +/*
  + * processing node
  + */
  +struct sio_stage_st {
  +    sio_halfduplex_t       reader;      /* reader node, linked into sio_t */
  +    sio_halfduplex_t       writer;      /* writer node, linked into sio_t */
  +    void                  *userdata;    /* module private per-instance data */
  +    sio_module_t          *module;      /* link to module methods */
  +    sio_mode_t             rw;          /* state of attachment    */
   };
   
  +/*
  + * represent the whole full-duplex pipe
  + */
   struct sio_st {
       struct {
  -        LIST(sio_halfduplex_t)  hd;
  -        al_t                   *al;
  +        LIST(sio_halfduplex_t)  hd;        /* link reader halfduplex nodes */
  +        al_t                   *al;        /* the reader assembly line     */
       } readers;
       struct {
  -        LIST(sio_halfduplex_t)  hd;
  -        al_t                   *al;
  +        LIST(sio_halfduplex_t)  hd;        /* link writer halfduplex nodes */
  +        al_t                   *al;        /* the writer assembly line     */
       } writers;
  -    sio_labelnum_t              label_data;
  -    sio_labelnum_t              label_error;
  +    sio_labelnum_t              label_data;   /* unique al_label object    */
  +    sio_labelnum_t              label_error;  /* to tag data and signals   */
       sio_labelnum_t              label_eof;
  -    int                         eof_flag;
  +    int                         eof_flag;     /* accumulating flags        */
       int                         error_flag;
  -    char                       *dst;
  +    char                       *dst;       /* write pointer for sio_read   */
   };
  +
  +/*
  + * AL tags data with unique pointers. Each (!) sio structure has
  + * unique (!) labels to tag data, error information and eof
  + * information on the global assembly lines
  + */
   #define SIO_LABEL_DATA(sio)  ((al_label_t)&(sio)->label_data)
   #define SIO_LABEL_ERROR(sio) ((al_label_t)&(sio)->label_error)
   #define SIO_LABEL_EOF(sio)   ((al_label_t)&(sio)->label_eof)
   
  -struct sio_stage_st {
  -    sio_halfduplex_t reader;
  -    sio_halfduplex_t writer;
  -    void *userdata;
  -    sio_module_t *module;
  -    sio_mode_t rw;
  -};
  -
   /****************************************************************************/
   
  +/*
  + * schedule stages on chain of halfduplex nodes
  + */
   static
   sio_rc_t sio_strategy(sio_t *sio, sio_halfduplex_t *chain)
   {
  @@ -114,7 +132,7 @@
        * if we drop off the chain, simply result SIO_OK
        *
        */
  -    rc = SIO_UPSTREAM;
  +    rc = SIO_SCHED_UP;
       h  = chain;
       while (h != NULL) {
           rc = h->func(sio, h->al, h->stage->userdata);
  @@ -127,13 +145,13 @@
                   rc = h->rc_no_data;
           }
   
  -        if (rc == SIO_UPSTREAM)
  +        if (rc == SIO_SCHED_UP)
               h = NEXT(h,hd);
  -        else if (rc == SIO_DOWNSTREAM)
  +        else if (rc == SIO_SCHED_DOWN)
               h = PREV(h,hd);
  -        else if (rc == SIO_XSTREAM)
  +        else if (rc == SIO_SCHED_CROSS)
               h = h->cross;
  -        else if (rc == SIO_LOOP)
  +        else if (rc == SIO_SCHED_LOOP)
               h = h;
           else
               break;
  @@ -147,6 +165,10 @@
   
   /**************************************************************************/
   
  +/*
  + * allocate and intialize sio_t data structure
  + *
  + */
   sio_rc_t sio_create(sio_t **siop)
   {
       sio_t *sio;
  @@ -162,6 +184,10 @@
       LISTINIT(&sio->readers,hd);
       LISTINIT(&sio->writers,hd);
   
  +    /*
  +     * we only need unique pointers for the labels, but
  +     * we point the pointers also to symbolic constants
  +     */
       sio->label_data  = SIO_LN_DATA;
       sio->label_error = SIO_LN_ERROR;
       sio->label_eof   = SIO_LN_EOF;
  @@ -171,17 +197,31 @@
       return SIO_OK;
   }
   
  +/*
  + * destroy sio_t data structure.
  + *
  + * no deinitialization is done.
  + */
   sio_rc_t sio_destroy(sio_t *sio)
   {
       /* argument sanity check(s) */
       if (sio == NULL)
           return SIO_RC(SIO_ERR_ARG);
   
  +    /* see wether all stages are detached */
  +    if (!ISEMPTY(&sio->readers,hd) ||
  +        !ISEMPTY(&sio->writers,hd))
  +        return SIO_RC(SIO_ERR_ARG);
  +
       free(sio);
   
       return SIO_OK;
   }
   
  +/*
  + * create pair of halfduplex nodes that use methods
  + * from module siom.
  + */
   sio_rc_t sio_create_stage(sio_t *sio, sio_module_t *siom, sio_stage_t **siosp)
   {
       sio_rc_t rc;
  @@ -214,10 +254,10 @@
       sios->writer.tag   = "writer";
   
       /* default rules */
  -    sios->reader.rc_with_data = SIO_DOWNSTREAM;
  -    sios->reader.rc_no_data   = SIO_UPSTREAM;
  -    sios->writer.rc_with_data = SIO_UPSTREAM;
  -    sios->writer.rc_no_data   = SIO_DOWNSTREAM;
  +    sios->reader.rc_with_data = SIO_SCHED_DOWN;
  +    sios->reader.rc_no_data   = SIO_SCHED_UP;
  +    sios->writer.rc_with_data = SIO_SCHED_UP;
  +    sios->writer.rc_no_data   = SIO_SCHED_DOWN;
   
       rc = sios->module->init(sio, &sios->userdata);
       if (rc != SIO_OK) {
  @@ -230,6 +270,9 @@
       return SIO_RC(rc);
   }
   
  +/*
  + * pass parameters to the configure method of a stage
  + */
   sio_rc_t sio_configure_stage(sio_t *sio, sio_stage_t *sios,
                                void *obj, void *value)
   {
  @@ -244,6 +287,9 @@
       return SIO_RC(rc);
   }
   
  +/*
  + *
  + */
   sio_rc_t sio_destroy_stage(sio_t *sio, sio_stage_t *sios)
   {
       sio_rc_t rc;
  @@ -252,12 +298,27 @@
       if (sio == NULL || sios == NULL)
           return SIO_RC(SIO_ERR_ARG);
   
  +    /* more sanity checking */
  +    if (sios->rw != SIO_MODE_INVALID)
  +        return SIO_RC(SIO_ERR_ARG);
  +
       rc = sios->module->cleanup(sio, sios->userdata);
       free(sios);
   
       return SIO_OK;
   }
   
  +/*
  + * allocate global assembly lines
  + *
  + * this is called before a module gets attached
  + *
  + * the first module attached as a reader allocates
  + * the read assembly line
  + *
  + * the first module attached as a writer allocates
  + * the write assembly line
  + */
   static
   sio_rc_t sio_create_al(sio_t *sio, sio_mode_t rw)
   {
  @@ -286,6 +347,18 @@
       return SIO_OK;
   }
   
  +/*
  + * free global assembly lines
  + *
  + * this is called after a module has been detached
  + *
  + * if the detached module was a reader and there are no more
  + *   readers then drop read assembly line
  + *
  + * if the detached module was a writer and there are no more
  + *   writers then drop write assembly line
  + *
  + */
   static
   sio_rc_t sio_destroy_al(sio_t *sio, sio_mode_t rw)
   {
  @@ -305,6 +378,19 @@
       return SIO_OK;
   }
   
  +/*
  + * attach a stage to the read and/or write side of the pipe
  + *
  + * prepare assembly lines
  + *
  + * stages that are reader and writer get a pointer to the
  + * sibling side so that the scheduler can cross between
  + * reading and writing
  + *
  + * when a stage is attached to either side its openr and
  + * openw methods are called respectively
  + *
  + */
   sio_rc_t sio_attach(sio_t *sio, sio_stage_t *sios, sio_mode_t rw)
   {
       sio_rc_t rc;
  @@ -365,6 +451,15 @@
       return SIO_OK;
   }
   
  +/*
  + * detach a stage to the read and/or write side of the pipe
  + *
  + * when a stage is detached from either side its closer and
  + * closew methods are called respectively
  + *
  + * drop assembly lines when possible
  + *
  + */
   sio_rc_t sio_detach(sio_t *sio, sio_stage_t *sios)
   {
       sio_rc_t rc;
  @@ -411,6 +506,16 @@
       return SIO_RC(rc);
   }
   
  +/*
  + * retrieve data from the input side
  + *
  + * if there is no data in the reader assembly line
  + *  then schedule the input side of the pipe once
  + *
  + * retrieve data from the reader assembly line up to
  + * the specified byte limit
  + *
  + */
   sio_rc_t sio_input(sio_t *sio, al_t *al, size_t limit)
   {
       sio_rc_t rc;
  @@ -447,6 +552,14 @@
       return SIO_OK;
   }
   
  +/*
  + * pass data to the output side
  + *
  + * append data to the writer assembly line
  + *
  + * schedule the output side of the pipe
  + *
  + */
   sio_rc_t sio_output(sio_t *sio, al_t *al)
   {
       sio_rc_t rc;
  @@ -474,6 +587,16 @@
       return SIO_RC(rc);
   }
   
  +/*
  + * schedule the output side of the pipe and
  + * signal to flush data buffers
  + *
  + * current the signalling is done by sending
  + * an EOF data chunk. Convention for all
  + * buffering modules is to flush data buffers
  + * on label boundaries.
  + *
  + */
   sio_rc_t sio_push(sio_t *sio)
   {
       sio_rc_t rc;
  @@ -500,6 +623,14 @@
       return SIO_RC(rc);
   }
   
  +/*
  + * callback used by sio_read to scan through
  + * reader assembly line
  + *
  + * data chunks are copied to the destination buffer
  + * error chunks set the error flag
  + * eof chunks set the eof flag
  + */
   static al_rc_t sio_readchunk(al_chunk_t *alc, void *u)
   {
       sio_t *sio = (sio_t *)u;
  @@ -518,6 +649,12 @@
       return AL_OK;
   }
   
  +/*
  + * retrieve data from the pipe into a buffer much like read()
  + *
  + * handles error and eof signals
  + *
  + */
   sio_rc_t sio_read(sio_t *sio, char *dst, size_t n, size_t *actualp)
   {
       al_rc_t arc;
  @@ -543,6 +680,9 @@
       return SIO_RC(rc);
   }
   
  +/*
  + * send data to the pipe from a buffer much like write()
  + */
   sio_rc_t sio_write(sio_t *sio, char *src, size_t n, size_t *actualp)
   {
       al_rc_t arc;
  @@ -567,7 +707,14 @@
       return SIO_RC(rc);
   }
   
  -int sio_flag(sio_t *sio, sio_flag_t fl)
  +/*
  + * query a SIO flag
  + *
  + * currently this is SIO_FLAG_ERROR and SIO_FLAG_EOF
  + * which are set by sio_read()
  + *
  + */
  +sio_rc_t sio_flag(sio_t *sio, sio_flag_t fl)
   {
       int rc;
   
  @@ -583,10 +730,13 @@
           break;
       }
   
  -    return rc;
  +    return rc ? SIO_TRUE : SIO_FALSE;
   }
   
  -int sio_clearflag(sio_t *sio, sio_flag_t fl)
  +/*
  + * query and clear a SIO flag
  + */
  +sio_rc_t sio_clearflag(sio_t *sio, sio_flag_t fl)
   {
       int rc;
   
  @@ -604,7 +754,7 @@
           break;
       }
   
  -    return rc;
  +    return rc ? SIO_TRUE : SIO_FALSE;
   }
   
   const char *sio_error(sio_rc_t rc)
  @@ -612,22 +762,30 @@
       const char *mess;
   
       switch (rc) {
  -    case SIO_OK:         mess = "Everything Ok"; break;
  -    case SIO_ERR_ARG:    mess = "Invalid Argument"; break;
  -    case SIO_ERR_MEM:    mess = "Not Enough Memory"; break;
  -    case SIO_ERR_EOF:    mess = "End Of Data"; break;
  -    case SIO_ERR_SYS:    mess = "Operating System Error"; break;
  -    case SIO_ERR_INT:    mess = "Internal Error"; break;
  -    case SIO_UPSTREAM:   mess = "Invoke Upstream Stage"; break;
  -    case SIO_DOWNSTREAM: mess = "Invoke Downstream Stage"; break;
  -    case SIO_XSTREAM:    mess = "Invoke Crossstream Stage"; break;
  -    case SIO_LOOP:       mess = "Loop through current Stage"; break;
  -    default:             mess = "Invalid Result Code"; break;
  +    case SIO_OK:          mess = "Everything Ok"; break;
  +    case SIO_ERR_ARG:     mess = "Invalid Argument"; break;
  +    case SIO_ERR_MEM:     mess = "Not Enough Memory"; break;
  +    case SIO_ERR_EOF:     mess = "End Of Data"; break;
  +    case SIO_ERR_SYS:     mess = "Operating System Error"; break;
  +    case SIO_ERR_INT:     mess = "Internal Error"; break;
  +    case SIO_SCHED_UP:    mess = "Invoke Upstream Stage"; break;
  +    case SIO_SCHED_DOWN:  mess = "Invoke Downstream Stage"; break;
  +    case SIO_SCHED_CROSS: mess = "Invoke Crossstream Stage"; break;
  +    case SIO_SCHED_LOOP:  mess = "Loop through current Stage"; break;
  +    default:              mess = "Invalid Result Code"; break;
       }
   
       return mess;
   }
   
  +/*
  + * stages need to share the labels that distinguish between
  + * data and signals on the pipe
  + *
  + * this function returns OSSP al labels for SIO specific
  + * label numbers defined in sio.h
  + *
  + */
   sio_rc_t sio_label(sio_t *sio, sio_labelnum_t ln, al_label_t *p)
   {
       void *label;
  Index: ossp-pkg/sio/sio.h
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 sio.h
  --- ossp-pkg/sio/sio.h	14 Nov 2002 09:10:53 -0000	1.5
  +++ ossp-pkg/sio/sio.h	14 Nov 2002 15:56:10 -0000	1.6
  @@ -33,15 +33,17 @@
   
   typedef enum {
       SIO_OK,
  +    SIO_TRUE  = SIO_OK,
  +    SIO_FALSE,
       SIO_ERR_ARG,
       SIO_ERR_MEM,
       SIO_ERR_EOF,
       SIO_ERR_SYS,
       SIO_ERR_INT,
  -    SIO_UPSTREAM,
  -    SIO_DOWNSTREAM,
  -    SIO_XSTREAM,
  -    SIO_LOOP
  +    SIO_SCHED_UP,
  +    SIO_SCHED_DOWN,
  +    SIO_SCHED_CROSS,
  +    SIO_SCHED_LOOP
   } sio_rc_t;
   
   typedef enum {
  @@ -83,9 +85,35 @@
   
   sio_rc_t    sio_push           (sio_t  *sio);
   
  -int         sio_flag           (sio_t  *sio, sio_flag_t fl);
  -int         sio_clearflag      (sio_t  *sio, sio_flag_t fl);
  +sio_rc_t    sio_flag           (sio_t  *sio, sio_flag_t fl);
  +sio_rc_t    sio_clearflag      (sio_t  *sio, sio_flag_t fl);
   
   const char *sio_error          (sio_rc_t rc);
  +
  +/*
  + * data internal to modules that should not be exposed to
  + * applications
  + */
  +
  +struct sio_module_st {
  +    const char *name;
  +    sio_rc_t (*init)      (sio_t *, void **);
  +    sio_rc_t (*configure) (sio_t *, void *, void *, void *);
  +    sio_rc_t (*cleanup)   (sio_t *, void *);
  +    sio_rc_t (*openr)     (sio_t *, al_t *, void *);
  +    sio_rc_t (*closer)    (sio_t *, al_t *, void *);
  +    sio_rc_t (*openw)     (sio_t *, al_t *, void *);
  +    sio_rc_t (*closew)    (sio_t *, al_t *, void *);
  +    sio_rc_t (*input)     (sio_t *, al_t *, void *);
  +    sio_rc_t (*output)    (sio_t *, al_t *, void *);
  +};
  +
  +typedef enum {
  +    SIO_LN_DATA,
  +    SIO_LN_ERROR,
  +    SIO_LN_EOF
  +} sio_labelnum_t;
  +
  +sio_rc_t sio_label(sio_t *, sio_labelnum_t, al_label_t *);
   
   #endif /* __SIO_H__ */
  Index: ossp-pkg/sio/sio_buffer.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 sio_buffer.c
  --- ossp-pkg/sio/sio_buffer.c	5 Nov 2002 17:30:38 -0000	1.3
  +++ ossp-pkg/sio/sio_buffer.c	14 Nov 2002 15:56:10 -0000	1.4
  @@ -4,7 +4,6 @@
   
   #include "al.h"
   #include "sio.h"
  -#include "sio_module.h"
   
   typedef struct {
       size_t outputsize;
  Index: ossp-pkg/sio/sio_fd.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 sio_fd.c
  --- ossp-pkg/sio/sio_fd.c	5 Nov 2002 16:18:46 -0000	1.6
  +++ ossp-pkg/sio/sio_fd.c	14 Nov 2002 15:56:10 -0000	1.7
  @@ -7,7 +7,6 @@
   
   #include "al.h"
   #include "sio.h"
  -#include "sio_module.h"
   
   typedef struct {
       char *mem;
  @@ -143,15 +142,15 @@
       actual = read(my->fd, buf->mem, buf->size);
       if (actual < 0) {
           al_append_bytes(al, &my->eof, sizeof(my->eof), my->error_label);
  -        return SIO_DOWNSTREAM;
  +        return SIO_SCHED_DOWN;
       } else if (actual == 0) {
           al_append_bytes(al, &my->error, sizeof(my->error), my->eof_label);
  -        return SIO_DOWNSTREAM;
  +        return SIO_SCHED_DOWN;
       }
   
       al_append_bytes(al, buf->mem, actual, my->data_label);
   
  -    return SIO_DOWNSTREAM;
  +    return SIO_SCHED_DOWN;
   }
   
   static
  @@ -186,13 +185,13 @@
       arc = al_traverse_cb(al, 0, n, AL_FORWARD, my->data_label,
                            fd_output_chunk, u);
       if (arc != AL_OK)
  -        return SIO_DOWNSTREAM;
  +        return SIO_SCHED_DOWN;
   
       arc = al_splice(al, 0, al_bytes(al), NULL, NULL);
       if (arc != AL_OK)
  -        return SIO_DOWNSTREAM;
  +        return SIO_SCHED_DOWN;
   
  -    return SIO_DOWNSTREAM;
  +    return SIO_SCHED_DOWN;
   }
   
   sio_module_t sio_module_fd = {
  Index: ossp-pkg/sio/sio_hello.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 sio_hello.c
  --- ossp-pkg/sio/sio_hello.c	8 Nov 2002 11:12:28 -0000	1.6
  +++ ossp-pkg/sio/sio_hello.c	14 Nov 2002 15:56:10 -0000	1.7
  @@ -5,7 +5,6 @@
   
   #include "al.h"
   #include "sio.h"
  -#include "sio_module.h"
   
   #define PROMPT "Login: "
   #define NPROMPT (sizeof(PROMPT)-1)
  @@ -274,9 +273,9 @@
           my->isoutput = isoutput;
   
           if (isoutput) {
  -            GOTO(PROMPTING, SIO_LOOP);
  +            GOTO(PROMPTING, SIO_SCHED_LOOP);
           } else {
  -            GOTO(PROMPTING, SIO_XSTREAM);
  +            GOTO(PROMPTING, SIO_SCHED_CROSS);
           }
           break;
   
  @@ -287,13 +286,13 @@
            *  only called on output stream
            *
            *  either fall through from INIT as writer
  -         *  or scheduled via SIO_XSTREAM from reader
  +         *  or scheduled via SIO_SCHED_CROSS from reader
            *  maybe there should be a SIO_STAY ?
            *
            *  send prompt string, schedule upstream
            */
           hello_sendprompt(my);
  -        GOTO(PROMPTED, SIO_UPSTREAM);
  +        GOTO(PROMPTED, SIO_SCHED_UP);
           break;
   
   
  @@ -308,9 +307,9 @@
            *
            */
           if (al_bytes(my->al_out) > 0)
  -            GOTO(PROMPTED, SIO_UPSTREAM);
  +            GOTO(PROMPTED, SIO_SCHED_UP);
           else
  -            GOTO(WAIT, SIO_XSTREAM);
  +            GOTO(WAIT, SIO_SCHED_CROSS);
           break;
   
       case WAIT:
  @@ -336,23 +335,23 @@
            *
            */
           if (!hello_readpasswd(my))
  -            GOTO(WAIT, SIO_UPSTREAM);
  +            GOTO(WAIT, SIO_SCHED_UP);
           else {
               good = my->npass == NPASS &&
                      memcmp(my->passwd, PASSWD, NPASS) == 0;
               if (!good) {
                   hello_dropsaved(my);
                   if (isoutput != my->isoutput) {
  -                    GOTO(BAD, SIO_XSTREAM);
  +                    GOTO(BAD, SIO_SCHED_CROSS);
                   } else {
  -                    GOTO(BAD, SIO_LOOP);
  +                    GOTO(BAD, SIO_SCHED_LOOP);
                   }
               } else {
                   hello_restore(my);
                   if (isoutput != my->isoutput) {
  -                    GOTO(GOOD, SIO_XSTREAM);
  +                    GOTO(GOOD, SIO_SCHED_CROSS);
                   } else
  -                    GOTO(GOOD, SIO_LOOP);
  +                    GOTO(GOOD, SIO_SCHED_LOOP);
               }
           }
           break;
  @@ -383,7 +382,7 @@
           else
               hello_writeeof(my);
   
  -        GOTO(BAD, SIO_DOWNSTREAM);
  +        GOTO(BAD, SIO_SCHED_DOWN);
           break;
       }
   
  Index: ossp-pkg/sio/sio_hole.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 sio_hole.c
  --- ossp-pkg/sio/sio_hole.c	8 Nov 2002 08:59:32 -0000	1.3
  +++ ossp-pkg/sio/sio_hole.c	14 Nov 2002 15:56:10 -0000	1.4
  @@ -3,7 +3,6 @@
   
   #include "al.h"
   #include "sio.h"
  -#include "sio_module.h"
   
   typedef struct {
       int dummy;
  @@ -82,7 +81,7 @@
       /* drop all data into the bit bucket */
       al_splice(al, 0, al_bytes(al), NULL, NULL);
   
  -    return SIO_DOWNSTREAM;
  +    return SIO_SCHED_DOWN;
   }
   
   static
  @@ -91,7 +90,7 @@
       /* drop all data into the bit bucket */
       al_splice(al, 0, al_bytes(al), NULL, NULL);
   
  -    return SIO_DOWNSTREAM;
  +    return SIO_SCHED_DOWN;
   }
   
   sio_module_t sio_module_hole = {
    Index: ossp-pkg/sio/sio_null.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 sio_null.c
  --- ossp-pkg/sio/sio_null.c	8 Nov 2002 08:59:32 -0000	1.4
  +++ ossp-pkg/sio/sio_null.c	14 Nov 2002 15:56:10 -0000	1.5
  @@ -3,7 +3,6 @@
   
   #include "al.h"
   #include "sio.h"
  -#include "sio_module.h"
   
   typedef struct {
       int a;
  Index: ossp-pkg/sio/sio_sa.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 sio_sa.c
  --- ossp-pkg/sio/sio_sa.c	5 Nov 2002 15:52:21 -0000	1.2
  +++ ossp-pkg/sio/sio_sa.c	14 Nov 2002 15:56:10 -0000	1.3
  @@ -7,7 +7,6 @@
   
   #include "al.h"
   #include "sio.h"
  -#include "sio_module.h"
   
   #include "sa.h"
   
  @@ -158,15 +157,15 @@
       src = sa_read(my->sa, buf->mem, buf->size, &actual);
       if (src != SA_OK) {
           saw_writeerror(al, my);
  -        return SIO_DOWNSTREAM;
  +        return SIO_SCHED_DOWN;
       } else if (src == SA_ERR_EOF) {
           saw_writeeof(al, my);
  -        return SIO_DOWNSTREAM;
  +        return SIO_SCHED_DOWN;
       }
   
       al_append_bytes(al, buf->mem, actual, my->data_label);
   
  -    return SIO_DOWNSTREAM;
  +    return SIO_SCHED_DOWN;
   }
   
   static
  @@ -205,7 +204,7 @@
       arc = al_splice(al, 0, al_bytes(al), NULL, NULL);
       if (arc != AL_OK) return SIO_ERR_INT;
   
  -    return SIO_DOWNSTREAM;
  +    return SIO_SCHED_DOWN;
   }
   
   sio_module_t sio_module_sa = {

From ossp-cvs-owner@ossp.org  Thu Nov 14 16:57:54 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 00D9D76A74; Thu, 14 Nov 2002 16:57:53 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio.pod
Message-Id: <20021114155753.00D9D76A74@mail.ossp.org>
Date: Thu, 14 Nov 2002 16:57:53 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   14-Nov-2002 16:57:53
  Branch: HEAD                             Handle: 2002111415575300

  Modified files:
    ossp-pkg/sio            sio.pod

  Log:
    reflect change in sio_flag/sio_clearflag signature

  Summary:
    Revision    Changes     Path
    1.5         +2  -2      ossp-pkg/sio/sio.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio.pod
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 sio.pod
  --- ossp-pkg/sio/sio.pod	14 Nov 2002 09:17:49 -0000	1.4
  +++ ossp-pkg/sio/sio.pod	14 Nov 2002 15:57:53 -0000	1.5
  @@ -222,11 +222,11 @@
   to flush internal buffers. It depends on the stages wether they
   honor this request.
   
  -=item int B<sio_flag>(sio_t *I<sio>, sio_flag_t I<fl>);
  +=item sio_rc_t B<sio_flag>(sio_t *I<sio>, sio_flag_t I<fl>);
   
   Query internal flags of the stream I<sio>. Currently you can
   specify the flags B<SIO_FLAG_ERROR> and B<SIO_FLAG_EOF>. The
  -return value should be treated as a boolean.
  +return value is either SIO_TRUE or SIO_FALSE.
   
   =item int B<sio_clearflag>(sio_t *I<sio>, sio_flag_t I<fl>);
   

From ossp-cvs-owner@ossp.org  Thu Nov 14 19:18:02 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3CC7076A99; Thu, 14 Nov 2002 19:18:02 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq/gfx cw.xpm fileopen.xpm filesave.xpm osspf...
Message-Id: <20021114181802.3CC7076A99@mail.ossp.org>
Date: Thu, 14 Nov 2002 19:18:02 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   14-Nov-2002 19:18:02
  Branch: HEAD                             Handle: 2002111418180100

  Added files:
    ossp-pkg/titraq/gfx     fileopen.xpm filesave.xpm
  Modified files:
    ossp-pkg/titraq/gfx     cw.xpm osspfull.xpm ossplogo.xpm

  Log:
    Correct array names according to standard, and add new fileopen and filesave
    bitmaps for use by actions.

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/titraq/gfx/cw.xpm
    1.1         +22 -0      ossp-pkg/titraq/gfx/fileopen.xpm
    1.1         +22 -0      ossp-pkg/titraq/gfx/filesave.xpm
    1.2         +1  -1      ossp-pkg/titraq/gfx/osspfull.xpm
    1.2         +1  -1      ossp-pkg/titraq/gfx/ossplogo.xpm
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/gfx/cw.xpm
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 cw.xpm
  --- ossp-pkg/titraq/gfx/cw.xpm	8 Nov 2002 12:21:35 -0000	1.1
  +++ ossp-pkg/titraq/gfx/cw.xpm	14 Nov 2002 18:18:01 -0000	1.2
  @@ -1,5 +1,5 @@
   /* XPM */
  -static char * cw_xpm[] = {
  +static const char *s_kpcCw_xpm[] = {
   "42 43 8 1",
   " 	c None",
   ".	c #E2E2F3",
  Index: ossp-pkg/titraq/gfx/fileopen.xpm
  ============================================================
  $ cvs update -p -r1.1 fileopen.xpm
  /* XPM */
  static const char *s_kpcFileopen_xpm[] = {
  "    16    13        5            1",
  ". c #040404",
  "# c #808304",
  "a c None",
  "b c #f3f704",
  "c c #f3f7f3",
  "aaaaaaaaa...aaaa",
  "aaaaaaaa.aaa.a.a",
  "aaaaaaaaaaaaa..a",
  "a...aaaaaaaa...a",
  ".bcb.......aaaaa",
  ".cbcbcbcbc.aaaaa",
  ".bcbcbcbcb.aaaaa",
  ".cbcb...........",
  ".bcb.#########.a",
  ".cb.#########.aa",
  ".b.#########.aaa",
  "..#########.aaaa",
  "...........aaaaa"
  };
  Index: ossp-pkg/titraq/gfx/filesave.xpm
  ============================================================
  $ cvs update -p -r1.1 filesave.xpm
  /* XPM */
  static const char *s_kpcFilesave_xpm[] = {
  "    14    14        4            1",
  ". c #040404",
  "# c #808304",
  "a c #bfc2bf",
  "b c None",
  "..............",
  ".#.aaaaaaaa.a.",
  ".#.aaaaaaaa...",
  ".#.aaaaaaaa.#.",
  ".#.aaaaaaaa.#.",
  ".#.aaaaaaaa.#.",
  ".#.aaaaaaaa.#.",
  ".##........##.",
  ".############.",
  ".##.........#.",
  ".##......aa.#.",
  ".##......aa.#.",
  ".##......aa.#.",
  "b............."
  };
  Index: ossp-pkg/titraq/gfx/osspfull.xpm
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 osspfull.xpm
  --- ossp-pkg/titraq/gfx/osspfull.xpm	8 Nov 2002 12:21:35 -0000	1.1
  +++ ossp-pkg/titraq/gfx/osspfull.xpm	14 Nov 2002 18:18:01 -0000	1.2
  @@ -1,5 +1,5 @@
   /* XPM */
  -static char * ossplogo_xpm[] = {
  +static const char *kpcOssplogo_xpm[] = {
   "96 95 503 2",
   "  	c None",
   ". 	c #DDDDDD",
  Index: ossp-pkg/titraq/gfx/ossplogo.xpm
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 ossplogo.xpm
  --- ossp-pkg/titraq/gfx/ossplogo.xpm	8 Nov 2002 12:21:35 -0000	1.1
  +++ ossp-pkg/titraq/gfx/ossplogo.xpm	14 Nov 2002 18:18:01 -0000	1.2
  @@ -1,5 +1,5 @@
   /* XPM */
  -static char * ossplogo_xpm[] = {
  +static const char *s_kpcOssplogo_xpm[] = {
   "16 15 100 2",
   "  	c None",
   ". 	c #AAAAAA",

From ossp-cvs-owner@ossp.org  Thu Nov 14 19:19:30 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7EEE676A99; Thu, 14 Nov 2002 19:19:30 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq TODO titraq.cpp titraq.h
Message-Id: <20021114181930.7EEE676A99@mail.ossp.org>
Date: Thu, 14 Nov 2002 19:19:30 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   14-Nov-2002 19:19:30
  Branch: HEAD                             Handle: 2002111418192900

  Modified files:
    ossp-pkg/titraq         TODO titraq.cpp titraq.h

  Log:
    Add actions, corresponding slots, use new bitmaps, add a toolbar, begin coding
    of data serialization logic.

  Summary:
    Revision    Changes     Path
    1.6         +2  -0      ossp-pkg/titraq/TODO
    1.7         +234 -26    ossp-pkg/titraq/titraq.cpp
    1.6         +20 -0      ossp-pkg/titraq/titraq.h
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/TODO
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 TODO
  --- ossp-pkg/titraq/TODO	13 Nov 2002 16:36:58 -0000	1.5
  +++ ossp-pkg/titraq/TODO	14 Nov 2002 18:19:29 -0000	1.6
  @@ -14,6 +14,8 @@
   Q_CHECK_PTR
   public/private
   QWhatsThis::add(m_pAddbutton, trUtf8("Para soltar la pepa"));
  +configure soll ueberpruefen ob libqt[-mt] threads braucht,
  +  dann wenn so, soll den LIBS -pthread hardgecodet haben
   
   Dreams
   ------
  Index: ossp-pkg/titraq/titraq.cpp
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 titraq.cpp
  --- ossp-pkg/titraq/titraq.cpp	13 Nov 2002 16:36:58 -0000	1.6
  +++ ossp-pkg/titraq/titraq.cpp	14 Nov 2002 18:19:29 -0000	1.7
  @@ -1,19 +1,25 @@
   // System interface
   #include <qtooltip.h>
  +#include <qwhatsthis.h>
   #include <qdatetimeedit.h>
   #include <qspinbox.h>
   #include <qstringlist.h>
   #include <qcombobox.h>
   #include <qcursor.h>
  +#include <qfile.h>
  +#include <qfiledialog.h>
   
   // User interface
   #include "titraq.h"         // Main classes
   #include "generic.h"        // Generic classes
  -#include "gfx/ossplogo.xpm" // OSSP logo: static const char *ossplogo_xpm[]
  +#include "gfx/ossplogo.xpm" // OSSP logo: static const char *s_kpcOssplogo_xpm[]
  +#include "gfx/fileopen.xpm" // static const char *s_kpcFileopen_xpm[]
  +#include "gfx/filesave.xpm" // static const char *s_kpcFilesave_xpm[]
   
  -// Used in initialization of the application
  +// Overload init for custom initialization of the app
   void Titraqform::init(void)
   {
  +    // Set fill color of buttons
       m_pAddbutton->setPaletteBackgroundColor(QColor(196, 196, 176));
       m_pDeletebutton->setPaletteBackgroundColor(QColor(196, 196, 176));
       m_pWritebutton->setPaletteBackgroundColor(QColor(196, 196, 176));
  @@ -36,38 +42,87 @@
       m_pMenubar = this->menuBar();
       m_pStatbar = this->statusBar();
       m_pStatbar->message(trUtf8("Ready"));
  -    setCaption(trUtf8("OSSP Titraq"));
  +    setCaption("OSSP Titraq");
   
  -    // Lock down window size
  -    setSizePolicy(QSizePolicy((QSizePolicy::SizeType)0,
  -        (QSizePolicy::SizeType)0, 0, 0, sizePolicy().hasHeightForWidth()));
  +    // File new action
  +    m_pFilenewact = new QAction(trUtf8("New"), trUtf8("&New"), CTRL+Key_N, this, "New");
  +    connect(m_pFilenewact, SIGNAL(activated()), this, SLOT(newDoc()));
  +
  +    // File open action
  +    m_pFileopenact = new QAction(trUtf8("Open File"), QPixmap(s_kpcFileopen_xpm), trUtf8("&Open"), CTRL+Key_O, this, "Open");
  +    connect(m_pFileopenact, SIGNAL(activated()), this, SLOT(choose()));
  +    const char *kszFileopentext = trUtf8("<p><img source=\"fileopen\"> "
  +                                  "Click this button to open a <em>new file</em>.<br>"
  +                                  "You can also select the <b>Open</b> command "
  +                                  "from the <b>File</b> menu.</p>");
  +    QMimeSourceFactory::defaultFactory()->setPixmap("fileopen", m_pFileopenact->iconSet().pixmap());
  +    m_pFileopenact->setWhatsThis(kszFileopentext);
  +
  +    // File save current action
  +    m_pFilesaveact = new QAction(trUtf8("Save File"), QPixmap(s_kpcFilesave_xpm), trUtf8("&Save"), CTRL+Key_S, this, "Save");
  +    connect(m_pFilesaveact, SIGNAL(activated()), this, SLOT(save()));
  +    const char *kszFilesavetext = trUtf8("<p>Click this button to save the file you "
  +                                  "are editing. You will be prompted for a file name.\n"
  +                                  "You can also select the <b>Save</b> command "
  +                                  "from the <b>File</b> menu.</p>");
  +    m_pFilesaveact->setWhatsThis(kszFilesavetext);
  +
  +    // File save selected action
  +    m_pFilesaveasact = new QAction(trUtf8("Save File As"), trUtf8("Save &as"), 0, this, "SaveAs");
  +    connect(m_pFilesaveasact, SIGNAL(activated()), this, SLOT(saveAs()));
  +    m_pFilesaveasact->setWhatsThis(kszFilesavetext);
  +
  +    // File close current action
  +    m_pFilecloseact = new QAction(trUtf8("Close"), trUtf8("&Close"), CTRL+Key_W, this, "Close");
  +    connect(m_pFilecloseact, SIGNAL(activated()), this, SLOT(close()));
  +
  +    // File quit action
  +    m_pFilequitact = new QAction(trUtf8("Quit"), trUtf8("&Quit"), CTRL+Key_Q, this, "Quit");
  +    connect(m_pFilequitact, SIGNAL(activated()), qApp, SLOT(quit()));
  +
  +//    // Lock down window size
  +//    setSizePolicy(QSizePolicy((QSizePolicy::SizeType)0,
  +//        (QSizePolicy::SizeType)0, 0, 0, sizePolicy().hasHeightForWidth()));
   
  -    // Work on the menu bar
  +    // Construct and populate the file menu with actions
       QPopupMenu *pFilepopup = new QPopupMenu(this);
  -    m_pMenubar->insertItem("&File", pFilepopup);
  -//    pFilepopup->insertItem("&Quit", this, SLOT(quit()));
  -//    pFilenewact->addTo(pFilepopup);
  -//    pFileopenact->addTo(pFilepopup);
  -//    pFilesaveact->addTo(pFilepopup);
  +    m_pMenubar->insertItem(trUtf8("&File"), pFilepopup);
  +    m_pFilenewact->addTo(pFilepopup);
  +    m_pFileopenact->addTo(pFilepopup);
  +    m_pFilesaveact->addTo(pFilepopup);
  +    m_pFilesaveasact->addTo(pFilepopup);
  +    pFilepopup->insertSeparator();
  +    m_pFilecloseact->addTo(pFilepopup);
  +    m_pFilequitact->addTo(pFilepopup);
  +
  +    // Construct and populate the help menu with subitems
  +    QPopupMenu *pHelppopup = new QPopupMenu(this);
  +    m_pMenubar->insertItem(trUtf8("&Help"), pHelppopup);
  +    pHelppopup->insertItem(trUtf8("&About"), this, SLOT(about()), Key_F1);
  +    pHelppopup->insertItem(trUtf8("About &Qt"), this, SLOT(aboutQt()));
  +    pHelppopup->insertSeparator();
  +    pHelppopup->insertItem(trUtf8("What's &This"), this, SLOT(whatsThis()), SHIFT+Key_F1);
   
  -    // Make a new tool bar
  +    // Construct and populate the main tool bar
       m_pToolbar = new QToolBar("Toolfile", this, DockTop);
       m_pToolbar->setLabel(trUtf8("File Ops"));
  -//    pFilenewact->addTo(m_pToolbar);
  -//    pFileopenact->addTo(m_pToolbar);
  -//    pFilesaveact->addTo(m_pToolbar);
  +    m_pFileopenact->addTo(m_pToolbar);
  +    m_pFilesaveact->addTo(m_pToolbar);
  +
  +    // Add a preconfigured whats this button to our new tool bar
  +    QWhatsThis::whatsThisButton(m_pToolbar);
   
       // Create a central frame and associated layout for QMainWindow
       m_pCenframe = new QFrame(this);
       setCentralWidget(m_pCenframe);
   
       // Control layouts for form, table, and status line
  -    m_pTitraqformlayout = new QVBoxLayout(m_pCenframe, 11, 6, "pTitraqformlayout");
  -    m_pMainlayout = new QVBoxLayout(0, 0, 6, "pMainlayout");        // For layouts
  -    m_pPackagelayout = new QVBoxLayout(0, 0, 6, "pPackagelayout");  // For table
  +    m_pTitraqformlayout = new QVBoxLayout(m_pCenframe, 11, 6, "Titraqformlayout");
  +    m_pMainlayout = new QVBoxLayout(0, 0, 6, "Mainlayout");         // For layouts
  +    m_pPackagelayout = new QVBoxLayout(0, 0, 6, "Packagelayout");   // For table
   
       // The table itself
  -    m_pMaintable = new QTable(this, "pMaintable");
  +    m_pMaintable = new QTable(this, "Maintable");
       m_pMaintable->setNumRows(g_knRows);
       m_pMaintable->setNumCols(g_knCols);
       m_pMaintable->setReadOnly(false);                   // Not read only
  @@ -89,7 +144,7 @@
       m_pTablehead->setMovingEnabled(true);
   
       // Icon image items
  -    m_pIconimage = new QImage(ossplogo_xpm);
  +    m_pIconimage = new QImage(s_kpcOssplogo_xpm);
       m_pIconpixmap = new QPixmap(m_pIconimage->scaleHeight(m_pMaintable->rowHeight(6)));
       m_pMaintable->setItem(0, 0, new QTableItem(m_pMaintable, QTableItem::Never, "OSSP trac"));
       m_pMaintable->setPixmap(0, 0, *m_pIconpixmap);
  @@ -165,7 +220,7 @@
       m_pPackagelayout->addWidget(m_pMaintable);  // Finally add the table widget
   
       // Bottom output line
  -    m_pStatus = new QLineEdit(this, "pStatus");
  +    m_pStatus = new QLineEdit(this, "Status");
       m_pStatus->setFrameShape(QLineEdit::LineEditPanel);
       m_pStatus->setFrameShadow(QLineEdit::Sunken);
       m_pStatus->setFrame(true);
  @@ -175,7 +230,7 @@
       m_pMainlayout->addLayout(m_pPackagelayout);
   
       // Control layout for push buttons
  -    m_pControllayout = new QHBoxLayout(0, 0, 6, "pControllayout");  // For buttons
  +    m_pControllayout = new QHBoxLayout(0, 0, 6, "Controllayout");  // For buttons
   
       // Tuple push button add
       m_pAddbutton = new QPushButton(this, "AddButton");
  @@ -186,7 +241,7 @@
       m_pControllayout->addWidget(m_pAddbutton);
   
       // Tuple push button delete
  -    m_pDeletebutton = new QPushButton(this, "pDeletebutton");
  +    m_pDeletebutton = new QPushButton(this, "Deletebutton");
       m_pDeletebutton->setCursor(QCursor(13));
       m_pDeletebutton->setText(trUtf8("&Delete"));
       m_pDeletebutton->setFlat(false);
  @@ -195,7 +250,7 @@
       m_pControllayout->addWidget(m_pDeletebutton);
   
       // Tuple push button write
  -    m_pWritebutton = new QPushButton(this, "pWritebutton");
  +    m_pWritebutton = new QPushButton(this, "Writebutton");
       m_pWritebutton->setCursor(QCursor(13));
       m_pWritebutton->setText(trUtf8("&Write"));
       QToolTip::add(m_pWritebutton, trUtf8("Write Entry"));
  @@ -203,7 +258,7 @@
       m_pControllayout->addWidget(m_pWritebutton);
   
       // Tuple push button quit
  -    m_pQuitbutton = new QPushButton(this, "pQuitbutton");
  +    m_pQuitbutton = new QPushButton(this, "Quitbutton");
       m_pQuitbutton->setCursor(QCursor(13));
       m_pQuitbutton->setText(trUtf8("&Quit"));
       m_pQuitbutton->setFlat(false);
  @@ -217,6 +272,9 @@
       init(); // Initialize signal and slot connections
   }
   
  +//
  +// Add a blank row entry to the current data window
  +//
   void Titraqform::addEntry(void)
   {
       Prototype Unimp;
  @@ -230,16 +288,166 @@
   //    }
   }
   
  +//
  +// Choose a file using a handy file dialog
  +//
   void Titraqform::delEntry(void)
   {
       Prototype Unimp;
       Unimp.doMbox();
   }
   
  +//
  +// Write current data to a meta device
  +//
   void Titraqform::writeEntry(void)
   {
       Prototype Unimp;
       Unimp.doMbox();
  +}
  +
  +//
  +// Make and display a new document window
  +//
  +void Titraqform::newDoc(void)
  +{
  +    Prototype Unimp;
  +    Unimp.doMbox();
  +//    Titraqform *pNewform = new Titraqform;
  +//    pNewform->show();
  +}
  +
  +//
  +// Choose a file using a handy file dialog
  +//
  +void Titraqform::choose(void)
  +{
  +    QString Filestring = QFileDialog::getOpenFileName(QString::null, QString::null, this);
  +    if (!Filestring.isEmpty())
  +        load(Filestring);
  +    else
  +        m_pStatbar->message(trUtf8("Loading aborted"), 4000);
  +}
  +
  +//
  +// Load accounting data into main window
  +//
  +void Titraqform::load(const QString &Filestring)
  +{
  +    QFile Filetemp(Filestring);         // File to load
  +
  +    if (!Filetemp.open(IO_ReadOnly))    // Need a wrapped exception here
  +        return;
  +
  +    QTextStream Textstream(&Filetemp);  // Convert the file contents to a stream
  +    m_pStatus->setText(Textstream.read());
  +    m_pStatus->setEdited(FALSE);
  +    setCaption(Filestring);
  +    m_pStatbar->message(trUtf8("Loaded document ") + Filestring, 4000);
  +}
  +
  +//
  +// Serialize current state to the current file
  +//
  +void Titraqform::save(void)
  +{
  +    // First time saves are really just saveAs in disguise
  +    if (m_szFilename->isEmpty()) {
  +        saveAs();
  +        return;
  +    }
  +
  +    // Try to read the status text, and write it to a file
  +    QString Statustext = m_pStatus->text();
  +    QFile Filetemp(*m_szFilename);
  +    if (!Filetemp.open(IO_WriteOnly)) {
  +        m_pStatbar->message(QString(trUtf8("Could not write to %1")).arg(*m_szFilename), 4000);
  +        return;
  +    }
  +
  +    // Serialize file contents and write to text line
  +    QTextStream Filestream(&Filetemp);
  +    Filestream << Statustext;
  +    Filetemp.close();
  +
  +    // Reset the text line, and give output to main window
  +    m_pStatus->setEdited(FALSE);
  +    setCaption(*m_szFilename);
  +    m_pStatbar->message(QString(trUtf8("File %1 saved")).arg(*m_szFilename), 4000);
  +}
  +
  +//
  +// Serialize current state to a selected file
  +//
  +void Titraqform::saveAs(void)
  +{
  +    // First get the selected file name to save to
  +    QString Filestring = QFileDialog::getSaveFileName(QString::null, QString::null, this);
  +    if (!Filestring.isEmpty()) {
  +        *m_szFilename = Filestring;
  +        save(); // Finish off by calling the save action
  +    }
  +    else {
  +        // User did not select a valid file and push okay button
  +        m_pStatbar->message(trUtf8("Saving aborted"), 4000);
  +    }
  +}
  +
  +//
  +// Close current document, displaying in main window
  +//
  +void Titraqform::closeEvent(QCloseEvent *pClosit)
  +{
  +    // Check modification state of current data
  +    if (!this->isDirty()) {
  +        pClosit->accept();
  +        return;
  +    }
  +
  +    // Ask user to aknowlege a possibly data-damaging close event
  +    switch(QMessageBox::information(this, "OSSP titraq",
  +        trUtf8("The document has been\nchanged since the last save.")),
  +        trUtf8("Save Now"), trUtf8("Cancel"), trUtf8("Leave Anyway"), 0, 1) {
  +    case 0:
  +        save();
  +        pClosit->accept();
  +        break;
  +    case 1:
  +        default:    // Just for sanity
  +        pClosit->ignore();
  +        break;
  +    case 2:
  +        pClosit->accept();
  +        break;
  +    }
  +}
  +
  +//
  +// Check to see if state has changed since last save
  +//
  +bool Titraqform::isDirty(void)
  +{
  +    // FIXME: We're really not THAT dirty
  +    return true;
  +}
  +
  +//
  +// Learn more about this program itself
  +//
  +void Titraqform::about(void)
  +{
  +    QMessageBox::about(this, "OSSP titraq",
  +        trUtf8("OSSP titraq is a time and task-based\n"
  +               "accounting system that acts as both a\n"
  +               "nwork-like punch card and time tracker."));
  +}
  +
  +//
  +// Learn more about this program and Qt
  +//
  +void Titraqform::aboutQt(void)
  +{
  +    QMessageBox::aboutQt(this, "OSSP titraq");
   }
   
   //
  Index: ossp-pkg/titraq/titraq.h
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 titraq.h
  --- ossp-pkg/titraq/titraq.h	13 Nov 2002 16:36:58 -0000	1.5
  +++ ossp-pkg/titraq/titraq.h	14 Nov 2002 18:19:29 -0000	1.6
  @@ -3,6 +3,7 @@
   
   #include <qapplication.h>
   #include <qmainwindow.h>
  +#include <qaction.h>
   #include <qtable.h>
   #include <qmenubar.h>
   #include <qtoolbar.h>
  @@ -26,6 +27,11 @@
       Titraqform(QWidget *pParent = 0, const char *kszName = 0, WFlags Flags = 0);
       ~Titraqform();
   
  +    // Main application actions
  +    QAction     *m_pFilenewact,   *m_pFileopenact;
  +    QAction     *m_pFilesaveact,  *m_pFilesaveasact;
  +    QAction     *m_pFilecloseact, *m_pFilequitact;
  +
       // Table, cells, and entries in package layout
       QTable      *m_pMaintable;
       QHeader     *m_pTablehead;
  @@ -47,8 +53,19 @@
       void addEntry(void);                // Add a task entry to the list
       void delEntry(void);                // Delete a task entry from the list
       void writeEntry(void);              // Write the task list to a filedescriptor
  +    void newDoc(void);                  // Make and display a new document window
  +    void choose(void);                  // Choose a file using a handy file dialog
  +    void load(const QString &);         // Load accounting data into main window
  +    void save(void);                    // Serialize to the current file
  +    void saveAs(void);                  // Serialize to a selected file
  +    void about(void);                   // Learn more about this program itself
  +    void aboutQt(void);                 // Learn more about this program and Qt
   
   protected:
  +    // Application main events
  +    void closeEvent(QCloseEvent *);     // Close current document in main window
  +
  +    // Application main window widgets
       QFrame      *m_pCenframe;           // Central frame
       QVBoxLayout *m_pTitraqformlayout;   // Main form layout
       QVBoxLayout *m_pMainlayout;         // Package and control layouts
  @@ -60,6 +77,9 @@
       QMenuBar    *m_pMenubar;
       QToolBar    *m_pToolbar;
       QStatusBar  *m_pStatbar;
  +    QString     *m_szFilename;
  +
  +    bool isDirty(void);                 // Check for changed state danger
   };
   
   #endif // TITRAQMWIN_H

From ossp-cvs-owner@ossp.org  Thu Nov 14 21:29:34 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DE82E76A40; Thu, 14 Nov 2002 21:29:33 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq titraq.cpp titraq.h
Message-Id: <20021114202933.DE82E76A40@mail.ossp.org>
Date: Thu, 14 Nov 2002 21:29:33 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   14-Nov-2002 21:29:33
  Branch: HEAD                             Handle: 2002111420293300

  Modified files:
    ossp-pkg/titraq         titraq.cpp titraq.h

  Log:
    Improve layout of widgets by removing a layout and adding attributes to the
    central frame.

  Summary:
    Revision    Changes     Path
    1.8         +32 -24     ossp-pkg/titraq/titraq.cpp
    1.7         +0  -1      ossp-pkg/titraq/titraq.h
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/titraq.cpp
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 titraq.cpp
  --- ossp-pkg/titraq/titraq.cpp	14 Nov 2002 18:19:29 -0000	1.7
  +++ ossp-pkg/titraq/titraq.cpp	14 Nov 2002 20:29:33 -0000	1.8
  @@ -35,13 +35,20 @@
   Titraqform::Titraqform(QWidget *pParent,  const char *kszName, WFlags Flags) :
       QMainWindow(pParent, kszName, Flags)
   {
  +//    // Abstract main widget building
  +//    setupMenubar();
  +//    setupFiletools();
  +//    setupStatusbar();
  +//    setupCentralwidget();
  +
       // Initial widget manipulations
       if (!kszName)
           setName(trUtf8("Titraqform"));
       resize(600, 480);
  -    m_pMenubar = this->menuBar();
  -    m_pStatbar = this->statusBar();
  -    m_pStatbar->message(trUtf8("Ready"));
  +    m_pMenubar = menuBar();     // Setup the menu bar
  +//    m_pMenubar = new QMenuBar(this, "Menubar");
  +//    m_pStatbar = new QStatusBar(this, "Statusbar");
  +    m_pStatbar = statusBar();   // Setup the status bar
       setCaption("OSSP Titraq");
   
       // File new action
  @@ -84,6 +91,9 @@
   //    setSizePolicy(QSizePolicy((QSizePolicy::SizeType)0,
   //        (QSizePolicy::SizeType)0, 0, 0, sizePolicy().hasHeightForWidth()));
   
  +    // Make an easter egg ;-)
  +    QToolTip::add(m_pMenubar, QRect(0, 0, 2, 2), "Easter egg");
  +
       // Construct and populate the file menu with actions
       QPopupMenu *pFilepopup = new QPopupMenu(this);
       m_pMenubar->insertItem(trUtf8("&File"), pFilepopup);
  @@ -108,21 +118,25 @@
       m_pToolbar->setLabel(trUtf8("File Ops"));
       m_pFileopenact->addTo(m_pToolbar);
       m_pFilesaveact->addTo(m_pToolbar);
  -
  -    // Add a preconfigured whats this button to our new tool bar
  -    QWhatsThis::whatsThisButton(m_pToolbar);
  +    QWhatsThis::whatsThisButton(m_pToolbar); // Preconfigured whats this button
   
       // Create a central frame and associated layout for QMainWindow
  -    m_pCenframe = new QFrame(this);
  +    m_pCenframe = new QFrame(this, "Centralframe");
  +    m_pCenframe->setFrameShape(QFrame::StyledPanel);
  +    m_pCenframe->setFrameShadow(QFrame::Sunken);
       setCentralWidget(m_pCenframe);
   
  -    // Control layouts for form, table, and status line
  -    m_pTitraqformlayout = new QVBoxLayout(m_pCenframe, 11, 6, "Titraqformlayout");
  -    m_pMainlayout = new QVBoxLayout(0, 0, 6, "Mainlayout");         // For layouts
  -    m_pPackagelayout = new QVBoxLayout(0, 0, 6, "Packagelayout");   // For table
  +    // Layout controls for toolbar, table, buttons, and status line
  +    m_pMainlayout = new QVBoxLayout(m_pCenframe, 10, 6, "Mainlayout");  // For layouts
  +    m_pPackagelayout = new QVBoxLayout(0, 0, 6, "Packagelayout");       // For table
  +    m_pControllayout = new QHBoxLayout(0, 0, 6, "Controllayout");       // For buttons
  +
  +    // Specify ordering of the layouts
  +    m_pMainlayout->addLayout(m_pPackagelayout);
  +    m_pMainlayout->addLayout(m_pControllayout);
   
       // The table itself
  -    m_pMaintable = new QTable(this, "Maintable");
  +    m_pMaintable = new QTable(m_pCenframe, "Maintable");
       m_pMaintable->setNumRows(g_knRows);
       m_pMaintable->setNumCols(g_knCols);
       m_pMaintable->setReadOnly(false);                   // Not read only
  @@ -220,20 +234,16 @@
       m_pPackagelayout->addWidget(m_pMaintable);  // Finally add the table widget
   
       // Bottom output line
  -    m_pStatus = new QLineEdit(this, "Status");
  +    m_pStatus = new QLineEdit(m_pCenframe, "Status");
       m_pStatus->setFrameShape(QLineEdit::LineEditPanel);
       m_pStatus->setFrameShadow(QLineEdit::Sunken);
       m_pStatus->setFrame(true);
       m_pStatus->setReadOnly(true);
       QToolTip::add(m_pStatus, trUtf8("Status Line"));
       m_pPackagelayout->addWidget(m_pStatus);
  -    m_pMainlayout->addLayout(m_pPackagelayout);
  -
  -    // Control layout for push buttons
  -    m_pControllayout = new QHBoxLayout(0, 0, 6, "Controllayout");  // For buttons
   
       // Tuple push button add
  -    m_pAddbutton = new QPushButton(this, "AddButton");
  +    m_pAddbutton = new QPushButton(m_pCenframe, "AddButton");
       m_pAddbutton->setCursor(QCursor(13));
       m_pAddbutton->setText(trUtf8("&Add"));
       QToolTip::add(m_pAddbutton, trUtf8("Add Entry"));
  @@ -241,7 +251,7 @@
       m_pControllayout->addWidget(m_pAddbutton);
   
       // Tuple push button delete
  -    m_pDeletebutton = new QPushButton(this, "Deletebutton");
  +    m_pDeletebutton = new QPushButton(m_pCenframe, "Deletebutton");
       m_pDeletebutton->setCursor(QCursor(13));
       m_pDeletebutton->setText(trUtf8("&Delete"));
       m_pDeletebutton->setFlat(false);
  @@ -250,7 +260,7 @@
       m_pControllayout->addWidget(m_pDeletebutton);
   
       // Tuple push button write
  -    m_pWritebutton = new QPushButton(this, "Writebutton");
  +    m_pWritebutton = new QPushButton(m_pCenframe, "Writebutton");
       m_pWritebutton->setCursor(QCursor(13));
       m_pWritebutton->setText(trUtf8("&Write"));
       QToolTip::add(m_pWritebutton, trUtf8("Write Entry"));
  @@ -258,7 +268,7 @@
       m_pControllayout->addWidget(m_pWritebutton);
   
       // Tuple push button quit
  -    m_pQuitbutton = new QPushButton(this, "Quitbutton");
  +    m_pQuitbutton = new QPushButton(m_pCenframe, "Quitbutton");
       m_pQuitbutton->setCursor(QCursor(13));
       m_pQuitbutton->setText(trUtf8("&Quit"));
       m_pQuitbutton->setFlat(false);
  @@ -266,10 +276,8 @@
       connect(m_pQuitbutton, SIGNAL(clicked()), qApp, SLOT(quit()));
       m_pControllayout->addWidget(m_pQuitbutton);
   
  -    m_pMainlayout->addLayout(m_pControllayout);
  -    m_pTitraqformlayout->addLayout(m_pMainlayout);
  -
       init(); // Initialize signal and slot connections
  +    m_pStatbar->message(trUtf8("Ready"));
   }
   
   //
  Index: ossp-pkg/titraq/titraq.h
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 titraq.h
  --- ossp-pkg/titraq/titraq.h	14 Nov 2002 18:19:29 -0000	1.6
  +++ ossp-pkg/titraq/titraq.h	14 Nov 2002 20:29:33 -0000	1.7
  @@ -67,7 +67,6 @@
   
       // Application main window widgets
       QFrame      *m_pCenframe;           // Central frame
  -    QVBoxLayout *m_pTitraqformlayout;   // Main form layout
       QVBoxLayout *m_pMainlayout;         // Package and control layouts
       QVBoxLayout *m_pPackagelayout;      // Main table control
       QHBoxLayout *m_pControllayout;      // Lower control buttons

From ossp-cvs-owner@ossp.org  Thu Nov 14 21:56:51 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8222576A40; Thu, 14 Nov 2002 21:56:51 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq titraq.cpp
Message-Id: <20021114205651.8222576A40@mail.ossp.org>
Date: Thu, 14 Nov 2002 21:56:51 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   14-Nov-2002 21:56:51
  Branch: HEAD                             Handle: 2002111420565100

  Modified files:
    ossp-pkg/titraq         titraq.cpp

  Log:
    Make 'Save As' and 'Save' work again by solving memory violation. Hmm, maybe I
    should rename that 'Save AS' for 'Save Application Services'.

  Summary:
    Revision    Changes     Path
    1.9         +3  -0      ossp-pkg/titraq/titraq.cpp
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/titraq.cpp
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 titraq.cpp
  --- ossp-pkg/titraq/titraq.cpp	14 Nov 2002 20:29:33 -0000	1.8
  +++ ossp-pkg/titraq/titraq.cpp	14 Nov 2002 20:56:51 -0000	1.9
  @@ -75,6 +75,7 @@
       m_pFilesaveact->setWhatsThis(kszFilesavetext);
   
       // File save selected action
  +    m_szFilename = new QString();
       m_pFilesaveasact = new QAction(trUtf8("Save File As"), trUtf8("Save &as"), 0, this, "SaveAs");
       connect(m_pFilesaveasact, SIGNAL(activated()), this, SLOT(saveAs()));
       m_pFilesaveasact->setWhatsThis(kszFilesavetext);
  @@ -235,6 +236,7 @@
   
       // Bottom output line
       m_pStatus = new QLineEdit(m_pCenframe, "Status");
  +    m_pStatus->setText(trUtf8("Happy birthday to Ralf"));
       m_pStatus->setFrameShape(QLineEdit::LineEditPanel);
       m_pStatus->setFrameShadow(QLineEdit::Sunken);
       m_pStatus->setFrame(true);
  @@ -393,6 +395,7 @@
       QString Filestring = QFileDialog::getSaveFileName(QString::null, QString::null, this);
       if (!Filestring.isEmpty()) {
           *m_szFilename = Filestring;
  +        m_pStatus->setText(*m_szFilename);
           save(); // Finish off by calling the save action
       }
       else {

From ossp-cvs-owner@ossp.org  Thu Nov 14 22:01:29 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7FED976A32; Thu, 14 Nov 2002 22:01:29 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq titraq.cpp
Message-Id: <20021114210129.7FED976A32@mail.ossp.org>
Date: Thu, 14 Nov 2002 22:01:29 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   14-Nov-2002 22:01:29
  Branch: HEAD                             Handle: 2002111421012900

  Modified files:
    ossp-pkg/titraq         titraq.cpp

  Log:
    Cleanup and typo.

  Summary:
    Revision    Changes     Path
    1.10        +1  -1      ossp-pkg/titraq/titraq.cpp
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/titraq.cpp
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 titraq.cpp
  --- ossp-pkg/titraq/titraq.cpp	14 Nov 2002 20:56:51 -0000	1.9
  +++ ossp-pkg/titraq/titraq.cpp	14 Nov 2002 21:01:29 -0000	1.10
  @@ -351,7 +351,7 @@
   
       QTextStream Textstream(&Filetemp);  // Convert the file contents to a stream
       m_pStatus->setText(Textstream.read());
  -    m_pStatus->setEdited(FALSE);
  +    m_pStatus->setEdited(false);
       setCaption(Filestring);
       m_pStatbar->message(trUtf8("Loaded document ") + Filestring, 4000);
   }

From ossp-cvs-owner@ossp.org  Thu Nov 14 22:29:50 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AC86A76A4C; Thu, 14 Nov 2002 22:29:50 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq/gfx filenew.xpm fileopen.xpm fileprint.xpm...
Message-Id: <20021114212950.AC86A76A4C@mail.ossp.org>
Date: Thu, 14 Nov 2002 22:29:50 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   14-Nov-2002 22:29:50
  Branch: HEAD                             Handle: 2002111421295000

  Added files:
    ossp-pkg/titraq/gfx     filenew.xpm fileprint.xpm
  Modified files:
    ossp-pkg/titraq/gfx     fileopen.xpm filesave.xpm

  Log:
    Improve bitmaps.

  Summary:
    Revision    Changes     Path
    1.1         +36 -0      ossp-pkg/titraq/gfx/filenew.xpm
    1.2         +33 -19     ossp-pkg/titraq/gfx/fileopen.xpm
    1.1         +117 -0     ossp-pkg/titraq/gfx/fileprint.xpm
    1.2         +33 -19     ossp-pkg/titraq/gfx/filesave.xpm
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/gfx/filenew.xpm
  ============================================================
  $ cvs update -p -r1.1 filenew.xpm
  /* XPM */
  static const char *s_kpcFilenew_xpm[] = {
  /* columns rows colors chars-per-pixel */
  "22 22 8 1",
  "  c Gray100",
  ". c Gray76",
  "X c Gray53",
  "o c Gray36",
  "O c Gray18",
  "+ c Gray0",
  "@ c None",
  "# c Gray0",
  /* pixels */
  "@@@@@@@@@@@@@@@@@@@@@@",
  "@@@@++++++++++@@@@@@@@",
  "@@@@+       +O+@@@@@@@",
  "@@@@+       +oO+@@@@@@",
  "@@@@+       +XoO+@@@@@",
  "@@@@+       +.XoO+@@@@",
  "@@@@+       + .XoO+@@@",
  "@@@@+       +++++++@@@",
  "@@@@+             +@@@",
  "@@@@+             +@@@",
  "@@@@+             +@@@",
  "@@@@+             +@@@",
  "@@@@+             +@@@",
  "@@@@+             +@@@",
  "@@@@+             +@@@",
  "@@@@+             +@@@",
  "@@@@+             +@@@",
  "@@@@+             +@@@",
  "@@@@+             +@@@",
  "@@@@+++++++++++++++@@@",
  "@@@@@@@@@@@@@@@@@@@@@@",
  "@@@@@@@@@@@@@@@@@@@@@@"
  };
  Index: ossp-pkg/titraq/gfx/fileopen.xpm
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 fileopen.xpm
  --- ossp-pkg/titraq/gfx/fileopen.xpm	14 Nov 2002 18:18:01 -0000	1.1
  +++ ossp-pkg/titraq/gfx/fileopen.xpm	14 Nov 2002 21:29:50 -0000	1.2
  @@ -1,22 +1,36 @@
   /* XPM */
   static const char *s_kpcFileopen_xpm[] = {
  -"    16    13        5            1",
  -". c #040404",
  -"# c #808304",
  -"a c None",
  -"b c #f3f704",
  -"c c #f3f7f3",
  -"aaaaaaaaa...aaaa",
  -"aaaaaaaa.aaa.a.a",
  -"aaaaaaaaaaaaa..a",
  -"a...aaaaaaaa...a",
  -".bcb.......aaaaa",
  -".cbcbcbcbc.aaaaa",
  -".bcbcbcbcb.aaaaa",
  -".cbcb...........",
  -".bcb.#########.a",
  -".cb.#########.aa",
  -".b.#########.aaa",
  -"..#########.aaaa",
  -"...........aaaaa"
  +/* columns rows colors chars-per-pixel */
  +"22 22 8 1",
  +"  c Gray100",
  +". c Yellow",
  +"X c #848200",
  +"o c Gray0",
  +"O c None",
  +"+ c Gray0",
  +"@ c Gray0",
  +"# c Gray0",
  +/* pixels */
  +"OOOOOOOOOOOOOOOOOOOOOO",
  +"OOOOOOOOOOOOOOOOOOOOOO",
  +"OOOOOOOOOOOOOOOOOOOOOO",
  +"OOOOOOOOOOOOooooOOOOoO",
  +"OOOOOOOOOOOoOOOOooOooO",
  +"OOOOOOOOOOOOOOOOOOoooO",
  +"OOOOOOOOOOOOOOOOOooooO",
  +"OooooOOOOOOOOOOOoooooO",
  +"o. . ooooooooooOOOOOOO",
  +"o . . . . . . oOOOOOOO",
  +"o. . . . . . .oOOOOOOO",
  +"o . . . . . . oOOOOOOO",
  +"o. . . ooooooooooooooo",
  +"o . . ooXXXXXXXXXXXXoo",
  +"o. . ooXXXXXXXXXXXXooO",
  +"o . ooXXXXXXXXXXXXooOO",
  +"o. ooXXXXXXXXXXXXooOOO",
  +"o ooXXXXXXXXXXXXooOOOO",
  +"oooXXXXXXXXXXXXooOOOOO",
  +"ooXXXXXXXXXXXXooOOOOOO",
  +"oooooooooooooooOOOOOOO",
  +"OOOOOOOOOOOOOOOOOOOOOO"
   };
  Index: ossp-pkg/titraq/gfx/fileprint.xpm
  ============================================================
  $ cvs update -p -r1.1 fileprint.xpm
  /* XPM */
  static const char *s_kpcFileprint[] = {
  /* columns rows colors chars-per-pixel */
  "22 22 89 1",
  "  c Gray0",
  ". c #101008081010",
  "X c #101010101010",
  "o c #101010101818",
  "O c #181810101818",
  "+ c #181818181818",
  "@ c #181818182121",
  "# c #212118182121",
  "$ c Gray13",
  "% c #212121212929",
  "& c #292921212929",
  "* c Gray16",
  "= c #292929293131",
  "- c #313129293131",
  "; c #313131313131",
  ": c #313131313939",
  "> c #393931313939",
  ", c #393939393939",
  "< c #393939394242",
  "1 c #424239394242",
  "2 c Gray26",
  "3 c #4a4a4a4a5252",
  "4 c #5a5a52525a5a",
  "5 c #5a5a5a5a6363",
  "6 c #6b6b63636b6b",
  "7 c Gray42",
  "8 c #6b6b6b6b7373",
  "9 c #73736b6b7373",
  "0 c #7b7b73737b7b",
  "q c #7b7b73738484",
  "w c #0808ffff0808",
  "e c #2929ffff2929",
  "r c #3131ffff3131",
  "t c #5a5acece5a5a",
  "y c #6b6bffff6363",
  "u c #7b7bffff7b7b",
  "i c #84847b7b8484",
  "p c #84847b7b8c8c",
  "a c #8c8c7b7b9494",
  "s c #848484848c8c",
  "d c #8c8c84848c8c",
  "f c Gray55",
  "g c #8c8c84849494",
  "h c #8c8c8c8c9494",
  "j c #94948c8c9494",
  "k c #94948c8c9c9c",
  "l c Gray58",
  "z c #949494949c9c",
  "x c #9c9c94949c9c",
  "c c Gray61",
  "v c #9c9c9494a5a5",
  "b c #9c9c9c9ca5a5",
  "n c #a5a59c9ca5a5",
  "m c #a5a59c9cadad",
  "M c #adad9c9cadad",
  "N c #a5a5a5a5a5a5",
  "B c #a5a5a5a5adad",
  "V c #adada5a5adad",
  "C c Gray68",
  "Z c #adadadadb5b5",
  "A c #b5b5adadb5b5",
  "S c Gray71",
  "D c Gray74",
  "F c #9494c6c69494",
  "G c #9c9ccecea5a5",
  "H c #bdbdd6d6bdbd",
  "J c #c0c0c0c0c0c0",
  "K c #c6c6c6c6c6c6",
  "L c #cecec6c6cece",
  "P c #cececececece",
  "I c #cecececed6d6",
  "U c #d6d6ceced6d6",
  "Y c #d6d6cecedede",
  "T c Gray84",
  "R c #d6d6d6d6dede",
  "E c #deded6d6dede",
  "W c Gray87",
  "Q c #deded6d6e7e7",
  "! c #dedededee7e7",
  "~ c #d6d6ffffd6d6",
  "^ c #e7e7dedee7e7",
  "/ c #e7e7e7e7e7e7",
  "( c #e7e7e7e7efef",
  ") c #efefe7e7efef",
  "_ c #efefefefefef",
  "` c #e7e7ffffe7e7",
  "' c Gray97",
  "] c Gray100",
  "[ c None",
  /* pixels */
  "[[[[[[SDPPPPKKDDCD[[[[",
  "[[[[[[D_/////___WD[[[[",
  "[[[[[[DKKKPPKKKKDK[[[[",
  "[[[[[[SDDDDSDDSSCD[[[[",
  "[[[[[KCKDKKKDDDKS[[[[[",
  "[[[[[DDSDDDDDDKKS[[[[[",
  "[[[[[DSKDDDDDKDKC[[[[[",
  "[[[[[KDDDDDDDDDDS[[[[[",
  "[[[[[CP/WWWWWWTWNNZ[[[",
  "[[[Dc9STPTPTPTWWj427S[",
  "[[Dziq0000000pag8<%@2N",
  "[DcE(!ERRRRUYGtFn2##O<",
  "Db)]]]]]]]]]~ewePa;@X#",
  "V']]]]]]]]]]`yru]Q0@ #",
  "BRILITRRW^!E!RHUILhO @",
  "jAZVBmBnmmNmnmMvzh6o #",
  "jZZmBnnnbnbbbbvxxg6o +",
  "lmmnbnbbbvcvxxxvjs6O 3",
  "jBnnvcvxvcvxvxzjhd8o+C",
  "lsdgfgdhgdhhjhjkhg6+l[",
  "S9%@$%&&&=--::>>:-:l[[",
  "[[C511,:;;;**%++.2c[[["
  };
  Index: ossp-pkg/titraq/gfx/filesave.xpm
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 filesave.xpm
  --- ossp-pkg/titraq/gfx/filesave.xpm	14 Nov 2002 18:18:01 -0000	1.1
  +++ ossp-pkg/titraq/gfx/filesave.xpm	14 Nov 2002 21:29:50 -0000	1.2
  @@ -1,22 +1,36 @@
   /* XPM */
   static const char *s_kpcFilesave_xpm[] = {
  -"    14    14        4            1",
  -". c #040404",
  -"# c #808304",
  -"a c #bfc2bf",
  -"b c None",
  -"..............",
  -".#.aaaaaaaa.a.",
  -".#.aaaaaaaa...",
  -".#.aaaaaaaa.#.",
  -".#.aaaaaaaa.#.",
  -".#.aaaaaaaa.#.",
  -".#.aaaaaaaa.#.",
  -".##........##.",
  -".############.",
  -".##.........#.",
  -".##......aa.#.",
  -".##......aa.#.",
  -".##......aa.#.",
  -"b............."
  +/* columns rows colors chars-per-pixel */
  +"22 22 8 1",
  +"  c Gray100",
  +". c #cab5d1",
  +"X c #c1c1c1",
  +"o c #848200",
  +"O c Gray0",
  +"+ c None",
  +"@ c Gray0",
  +"# c Gray0",
  +/* pixels */
  +"++++++++++++++++++++++",
  +"+OOOOOOOOOOOOOOOOOOOO+",
  +"+OooOXXXXXXXXXXXXOXXO+",
  +"+OooOXXXXXXXXXXXXOXXO+",
  +"+OooOXXXXXXXXX.XXOOOO+",
  +"+OooOXXX..XXXXXXXOooO+",
  +"+OooOXXX..XXXXXXXOooO+",
  +"+OooOXXXXXXXXXXXXOooO+",
  +"+OooOXXXXXXXXXXXXOooO+",
  +"+OooOXXXXXXXXXXXXOooO+",
  +"+OooOXXXXXXXXXXXXOooO+",
  +"+OoooOOOOOOOOOOOOoooO+",
  +"+OooooooooooooooooooO+",
  +"+OooooooooooooooooooO+",
  +"+OoooOOOOOOOOOOOOOooO+",
  +"+OoooOOOOOOOOOXXXOooO+",
  +"+OoooOOOOOOOOOXXXOooO+",
  +"+OoooOOOOOOOOOXXXOooO+",
  +"+OoooOOOOOOOOOXXXOooO+",
  +"+OoooOOOOOOOOOXXXOooO+",
  +"++OOOOOOOOOOOOOOOOOO++",
  +"++++++++++++++++++++++"
   };

From ossp-cvs-owner@ossp.org  Thu Nov 14 23:26:31 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 435FC76A4C; Thu, 14 Nov 2002 23:26:31 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq titraq.cpp titraq.h
Message-Id: <20021114222631.435FC76A4C@mail.ossp.org>
Date: Thu, 14 Nov 2002 23:26:31 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   14-Nov-2002 23:26:31
  Branch: HEAD                             Handle: 2002111422263000

  Modified files:
    ossp-pkg/titraq         titraq.cpp titraq.h

  Log:
    Actions added for push buttons, whatsthis text added for all actions, and more
    features added. Write button is now red.

  Summary:
    Revision    Changes     Path
    1.11        +67 -19     ossp-pkg/titraq/titraq.cpp
    1.8         +11 -3      ossp-pkg/titraq/titraq.h
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/titraq.cpp
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 titraq.cpp
  --- ossp-pkg/titraq/titraq.cpp	14 Nov 2002 21:01:29 -0000	1.10
  +++ ossp-pkg/titraq/titraq.cpp	14 Nov 2002 22:26:30 -0000	1.11
  @@ -13,6 +13,7 @@
   #include "titraq.h"         // Main classes
   #include "generic.h"        // Generic classes
   #include "gfx/ossplogo.xpm" // OSSP logo: static const char *s_kpcOssplogo_xpm[]
  +#include "gfx/filenew.xpm"  // static const char *s_kpcFilenew_xpm[]
   #include "gfx/fileopen.xpm" // static const char *s_kpcFileopen_xpm[]
   #include "gfx/filesave.xpm" // static const char *s_kpcFilesave_xpm[]
   
  @@ -22,7 +23,7 @@
       // Set fill color of buttons
       m_pAddbutton->setPaletteBackgroundColor(QColor(196, 196, 176));
       m_pDeletebutton->setPaletteBackgroundColor(QColor(196, 196, 176));
  -    m_pWritebutton->setPaletteBackgroundColor(QColor(196, 196, 176));
  +    m_pWritebutton->setPaletteBackgroundColor(QColor(206, 192, 176));
       m_pQuitbutton->setPaletteBackgroundColor(QColor(196, 196, 176));
       m_pMaintable->setCurrentCell(0, 0);     // Set the initial focus
       m_pMaintable->setFocus();               // Focus on the table
  @@ -46,36 +47,52 @@
           setName(trUtf8("Titraqform"));
       resize(600, 480);
       m_pMenubar = menuBar();     // Setup the menu bar
  -//    m_pMenubar = new QMenuBar(this, "Menubar");
  -//    m_pStatbar = new QStatusBar(this, "Statusbar");
       m_pStatbar = statusBar();   // Setup the status bar
       setCaption("OSSP Titraq");
   
  +//    // Lock down window size
  +//    setSizePolicy(QSizePolicy((QSizePolicy::SizeType)0,
  +//        (QSizePolicy::SizeType)0, 0, 0, sizePolicy().hasHeightForWidth()));
  +
  +    // Early member initialization
  +    m_bDirt = false;
  +    m_szFilename = new QString();
  +
  +    // Make an easter egg ;-)
  +    QToolTip::add(m_pMenubar, QRect(0, 0, 2, 2), "Easter egg");
  +
       // File new action
  -    m_pFilenewact = new QAction(trUtf8("New"), trUtf8("&New"), CTRL+Key_N, this, "New");
  +    m_pFilenewact = new QAction(trUtf8("New File"), QPixmap(s_kpcFilenew_xpm), trUtf8("&New"), CTRL+Key_N, this, "New");
       connect(m_pFilenewact, SIGNAL(activated()), this, SLOT(newDoc()));
  +    QMimeSourceFactory::defaultFactory()->setPixmap("filenew", m_pFilenewact->iconSet().pixmap());
  +    const char *kszFilenewtext = trUtf8("<p><img source=\"filenew\"> "
  +                                 "Click this button to make a <em>blank file</em>."
  +                                 "You can also select the <b>New</b> command "
  +                                 "from the <b>File</b> menu.</p>");
  +    m_pFilenewact->setWhatsThis(kszFilenewtext);
   
       // File open action
       m_pFileopenact = new QAction(trUtf8("Open File"), QPixmap(s_kpcFileopen_xpm), trUtf8("&Open"), CTRL+Key_O, this, "Open");
       connect(m_pFileopenact, SIGNAL(activated()), this, SLOT(choose()));
  +    QMimeSourceFactory::defaultFactory()->setPixmap("fileopen", m_pFileopenact->iconSet().pixmap());
       const char *kszFileopentext = trUtf8("<p><img source=\"fileopen\"> "
  -                                  "Click this button to open a <em>new file</em>.<br>"
  +                                  "Click this button to open a <em>new file</em>."
                                     "You can also select the <b>Open</b> command "
                                     "from the <b>File</b> menu.</p>");
  -    QMimeSourceFactory::defaultFactory()->setPixmap("fileopen", m_pFileopenact->iconSet().pixmap());
       m_pFileopenact->setWhatsThis(kszFileopentext);
   
       // File save current action
       m_pFilesaveact = new QAction(trUtf8("Save File"), QPixmap(s_kpcFilesave_xpm), trUtf8("&Save"), CTRL+Key_S, this, "Save");
       connect(m_pFilesaveact, SIGNAL(activated()), this, SLOT(save()));
  -    const char *kszFilesavetext = trUtf8("<p>Click this button to save the file you "
  +    QMimeSourceFactory::defaultFactory()->setPixmap("filesave", m_pFilesaveact->iconSet().pixmap());
  +    const char *kszFilesavetext = trUtf8("<p><img source=\"filesave\"> "
  +                                  "Click this button to <em>save</em> the file you "
                                     "are editing. You will be prompted for a file name.\n"
                                     "You can also select the <b>Save</b> command "
                                     "from the <b>File</b> menu.</p>");
       m_pFilesaveact->setWhatsThis(kszFilesavetext);
   
       // File save selected action
  -    m_szFilename = new QString();
       m_pFilesaveasact = new QAction(trUtf8("Save File As"), trUtf8("Save &as"), 0, this, "SaveAs");
       connect(m_pFilesaveasact, SIGNAL(activated()), this, SLOT(saveAs()));
       m_pFilesaveasact->setWhatsThis(kszFilesavetext);
  @@ -88,12 +105,35 @@
       m_pFilequitact = new QAction(trUtf8("Quit"), trUtf8("&Quit"), CTRL+Key_Q, this, "Quit");
       connect(m_pFilequitact, SIGNAL(activated()), qApp, SLOT(quit()));
   
  -//    // Lock down window size
  -//    setSizePolicy(QSizePolicy((QSizePolicy::SizeType)0,
  -//        (QSizePolicy::SizeType)0, 0, 0, sizePolicy().hasHeightForWidth()));
  -
  -    // Make an easter egg ;-)
  -    QToolTip::add(m_pMenubar, QRect(0, 0, 2, 2), "Easter egg");
  +    // Add data row action
  +    m_pAddrowact = new QAction(trUtf8("Add Row"), QPixmap(s_kpcOssplogo_xpm), trUtf8("Add &row"), 0, this, "Addrow");
  +    connect(m_pAddrowact, SIGNAL(activated()), this, SLOT(addEntry()));
  +    QMimeSourceFactory::defaultFactory()->setPixmap("ossplogo", m_pAddrowact->iconSet().pixmap());
  +    const char *kszAddrowtext = trUtf8("<p><img source=\"ossplogo\"> "
  +                                "Click this button to add a <em>new row</em>."
  +                                "You can also select the <b>Add row</b> command "
  +                                "from the <b>Accounting</b> menu.</p>");
  +    m_pAddrowact->setWhatsThis(kszAddrowtext);
  +
  +    // Delete data row action
  +    m_pDeleterowact = new QAction(trUtf8("Add Row"), QPixmap(s_kpcOssplogo_xpm), trUtf8("Add &row"), 0, this, "Deleterow");
  +    connect(m_pDeleterowact, SIGNAL(activated()), this, SLOT(delEntry()));
  +    QMimeSourceFactory::defaultFactory()->setPixmap("ossplogo", m_pDeleterowact->iconSet().pixmap());
  +    const char *kszDeleterowtext = trUtf8("<p><img source=\"ossplogo\"> "
  +                                   "Click this button to delete a <em>row</em>."
  +                                   "You can also select the <b>Delete row</b> command "
  +                                   "from the <b>Accounting</b> menu.</p>");
  +    m_pDeleterowact->setWhatsThis(kszDeleterowtext);
  +
  +    // Write data action
  +    m_pWritedataact = new QAction(trUtf8("Add Row"), QPixmap(s_kpcOssplogo_xpm), trUtf8("Add &row"), 0, this, "Writedata");
  +    connect(m_pWritedataact, SIGNAL(activated()), this, SLOT(writeEntry()));
  +    QMimeSourceFactory::defaultFactory()->setPixmap("ossplogo", m_pWritedataact->iconSet().pixmap());
  +    const char *kszWritedatatext = trUtf8("<p><img source=\"ossplogo\"> "
  +                                   "Click this button to <em>write out</em> your accounting data."
  +                                   "You can also select the <b>Write data</b> command "
  +                                   "from the <b>Accounting</b> menu.</p>");
  +    m_pWritedataact->setWhatsThis(kszWritedatatext);
   
       // Construct and populate the file menu with actions
       QPopupMenu *pFilepopup = new QPopupMenu(this);
  @@ -117,6 +157,7 @@
       // Construct and populate the main tool bar
       m_pToolbar = new QToolBar("Toolfile", this, DockTop);
       m_pToolbar->setLabel(trUtf8("File Ops"));
  +    m_pFilenewact->addTo(m_pToolbar);
       m_pFileopenact->addTo(m_pToolbar);
       m_pFilesaveact->addTo(m_pToolbar);
       QWhatsThis::whatsThisButton(m_pToolbar); // Preconfigured whats this button
  @@ -232,7 +273,7 @@
   //        m_pMaintable->setItem(i, 4, pTasks);
   //    }
   
  -    m_pPackagelayout->addWidget(m_pMaintable);  // Finally add the table widget
  +    m_pPackagelayout->addWidget(m_pMaintable);  // Finally add the damn table
   
       // Bottom output line
       m_pStatus = new QLineEdit(m_pCenframe, "Status");
  @@ -244,6 +285,13 @@
       QToolTip::add(m_pStatus, trUtf8("Status Line"));
       m_pPackagelayout->addWidget(m_pStatus);
   
  +    // Whatsthis info for the output line
  +    const char *kszStatouttext = trUtf8("<p><img source=\"ossplogo\"> "
  +                                "This line shows the <em>current row</em> of your accounting data."
  +                                " You can also change the data in place, or above "
  +                                "from the <b>Accounting table</b>.");
  +    QWhatsThis::add(m_pStatus, kszStatouttext);
  +
       // Tuple push button add
       m_pAddbutton = new QPushButton(m_pCenframe, "AddButton");
       m_pAddbutton->setCursor(QCursor(13));
  @@ -279,7 +327,7 @@
       m_pControllayout->addWidget(m_pQuitbutton);
   
       init(); // Initialize signal and slot connections
  -    m_pStatbar->message(trUtf8("Ready"));
  +    m_pStatbar->message(trUtf8("Ready"));   // Signal a ready condition
   }
   
   //
  @@ -384,6 +432,7 @@
       m_pStatus->setEdited(FALSE);
       setCaption(*m_szFilename);
       m_pStatbar->message(QString(trUtf8("File %1 saved")).arg(*m_szFilename), 4000);
  +    m_bDirt = false;    // Set the clean state to allow a close operation
   }
   
   //
  @@ -415,7 +464,7 @@
           return;
       }
   
  -    // Ask user to aknowlege a possibly data-damaging close event
  +    // Ask user to acknowlege a possibly data-damaging close event
       switch(QMessageBox::information(this, "OSSP titraq",
           trUtf8("The document has been\nchanged since the last save.")),
           trUtf8("Save Now"), trUtf8("Cancel"), trUtf8("Leave Anyway"), 0, 1) {
  @@ -438,8 +487,7 @@
   //
   bool Titraqform::isDirty(void)
   {
  -    // FIXME: We're really not THAT dirty
  -    return true;
  +    return m_bDirt;
   }
   
   //
  Index: ossp-pkg/titraq/titraq.h
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 titraq.h
  --- ossp-pkg/titraq/titraq.h	14 Nov 2002 20:29:33 -0000	1.7
  +++ ossp-pkg/titraq/titraq.h	14 Nov 2002 22:26:30 -0000	1.8
  @@ -15,13 +15,13 @@
   
   
   // Main table size
  -const int g_knRows = 18;
  +const int g_knRows = 16;
   const int g_knCols = 6;
   
   // Main application form window
   class Titraqform : public QMainWindow
   {
  -    Q_OBJECT    // Needed for MOC object model generation
  +    Q_OBJECT    // Generate MOC object model stubs
   
   public:
       Titraqform(QWidget *pParent = 0, const char *kszName = 0, WFlags Flags = 0);
  @@ -31,6 +31,8 @@
       QAction     *m_pFilenewact,   *m_pFileopenact;
       QAction     *m_pFilesaveact,  *m_pFilesaveasact;
       QAction     *m_pFilecloseact, *m_pFilequitact;
  +    QAction     *m_pAddrowact, *m_pDeleterowact;
  +    QAction     *m_pWritedataact;
   
       // Table, cells, and entries in package layout
       QTable      *m_pMaintable;
  @@ -74,10 +76,16 @@
   private:
       // Don't destroy these, they are owned by QMainWindow
       QMenuBar    *m_pMenubar;
  -    QToolBar    *m_pToolbar;
       QStatusBar  *m_pStatbar;
  +
  +    // Belong to us
  +    QToolBar    *m_pToolbar;
       QString     *m_szFilename;
   
  +    // Standard members
  +    bool        m_bDirt;                // To track dirty and clean states
  +
  +    // Standard methods
       bool isDirty(void);                 // Check for changed state danger
   };
   

From ossp-cvs-owner@ossp.org  Sat Nov 16 09:41:10 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7B23B76A5B; Sat, 16 Nov 2002 09:41:10 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa devtool.conf
Message-Id: <20021116084110.7B23B76A5B@mail.ossp.org>
Date: Sat, 16 Nov 2002 09:41:10 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Nov-2002 09:41:10
  Branch: HEAD                             Handle: 2002111608411000

  Modified files:
    ossp-pkg/sa             devtool.conf

  Log:
    move to 2.56

  Summary:
    Revision    Changes     Path
    1.15        +1  -1      ossp-pkg/sa/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/sa/devtool.conf
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 devtool.conf
  --- ossp-pkg/sa/devtool.conf	6 Nov 2002 19:05:39 -0000	1.14
  +++ ossp-pkg/sa/devtool.conf	16 Nov 2002 08:41:10 -0000	1.15
  @@ -5,7 +5,7 @@
   %autogen
       @autogen shtool   1.6.2 "1.6.*" all
       @autogen libtool  1.4.3 "1.4*"
  -    @autogen autoconf 2.54  "2.5[3-9]*"
  +    @autogen autoconf 2.56  "2.5[3-9]*"
   
   %autoclean
       @autoclean shtool

From ossp-cvs-owner@ossp.org  Mon Nov 18 10:35:41 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AB5CD76A62; Mon, 18 Nov 2002 10:35:41 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg devtool.conf
Message-Id: <20021118093541.AB5CD76A62@mail.ossp.org>
Date: Mon, 18 Nov 2002 10:35:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Nov-2002 10:35:41
  Branch: HEAD                             Handle: 2002111809354100

  Modified files:
    ossp-pkg/cfg            devtool.conf

  Log:
    move to latest Autoconf

  Summary:
    Revision    Changes     Path
    1.7         +1  -1      ossp-pkg/cfg/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/devtool.conf
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 devtool.conf
  --- ossp-pkg/cfg/devtool.conf	9 Nov 2002 14:25:25 -0000	1.6
  +++ ossp-pkg/cfg/devtool.conf	18 Nov 2002 09:35:41 -0000	1.7
  @@ -5,7 +5,7 @@
   %autogen
       @autogen shtool   1.6.2 "1.6.*" all
       @autogen libtool  1.4.3 "1.4*"
  -    @autogen autoconf 2.54  "2.5[4-9]*"
  +    @autogen autoconf 2.56  "2.5[4-9]*"
   
   %autoclean
       @autoclean shtool

From ossp-cvs-owner@ossp.org  Mon Nov 18 10:51:30 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A46F676A6C; Mon, 18 Nov 2002 10:51:30 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg cfg_buf.c cfg_data.c cfg_global.h cfg_main.c ...
Message-Id: <20021118095130.A46F676A6C@mail.ossp.org>
Date: Mon, 18 Nov 2002 10:51:30 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Nov-2002 10:51:30
  Branch: HEAD                             Handle: 2002111809512900

  Added files:
    ossp-pkg/cfg            cfg_global.h
  Modified files:
    ossp-pkg/cfg            cfg_buf.c cfg_data.c cfg_main.c cfg_node.c
                            cfg_syn.c cfg_syn_parse.y cfg_syn_scan.l
                            cfg_test.c cfg_util.c configure.ac devtool.conf

  Log:
    add Dmalloc support

  Summary:
    Revision    Changes     Path
    1.7         +1  -0      ossp-pkg/cfg/cfg_buf.c
    1.7         +1  -0      ossp-pkg/cfg/cfg_data.c
    1.1         +39 -0      ossp-pkg/cfg/cfg_global.h
    1.8         +1  -0      ossp-pkg/cfg/cfg_main.c
    1.16        +1  -0      ossp-pkg/cfg/cfg_node.c
    1.15        +1  -0      ossp-pkg/cfg/cfg_syn.c
    1.5         +1  -0      ossp-pkg/cfg/cfg_syn_parse.y
    1.14        +1  -0      ossp-pkg/cfg/cfg_syn_scan.l
    1.10        +1  -0      ossp-pkg/cfg/cfg_test.c
    1.2         +1  -0      ossp-pkg/cfg/cfg_util.c
    1.7         +3  -0      ossp-pkg/cfg/configure.ac
    1.8         +1  -0      ossp-pkg/cfg/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/cfg_buf.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 cfg_buf.c
  --- ossp-pkg/cfg/cfg_buf.c	10 Nov 2002 12:12:23 -0000	1.6
  +++ ossp-pkg/cfg/cfg_buf.c	18 Nov 2002 09:51:29 -0000	1.7
  @@ -33,6 +33,7 @@
   #include <string.h>
   
   #include "cfg.h"
  +#include "cfg_global.h"
   #include "cfg_buf.h"
   #include "cfg_fmt.h"
   
  Index: ossp-pkg/cfg/cfg_data.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 cfg_data.c
  --- ossp-pkg/cfg/cfg_data.c	10 Nov 2002 12:12:23 -0000	1.6
  +++ ossp-pkg/cfg/cfg_data.c	18 Nov 2002 09:51:29 -0000	1.7
  @@ -33,6 +33,7 @@
   #include <string.h>
   
   #include "cfg.h"
  +#include "cfg_global.h"
   #include "cfg_data.h"
   
   cfg_rc_t cfg_data_create(cfg_data_t **data)
  Index: ossp-pkg/cfg/cfg_global.h
  ============================================================
  $ cvs update -p -r1.1 cfg_global.h
  /*
  **  OSSP cfg - Configuration Parsing
  **  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  **
  **  This file is part of OSSP cfg, a configuration parsing
  **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  cfg_global.h: global header
  */
  
  #ifndef __CFG_GLOBAL_H__
  #define __CFG_GLOBAL_H__
  
  #ifdef WITH_DMALLOC
  #include "dmalloc.h"
  #endif
  
  #endif /* __CFG_GLOBAL_H__ */
  
  Index: ossp-pkg/cfg/cfg_main.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 cfg_main.c
  --- ossp-pkg/cfg/cfg_main.c	10 Nov 2002 12:12:23 -0000	1.7
  +++ ossp-pkg/cfg/cfg_main.c	18 Nov 2002 09:51:29 -0000	1.8
  @@ -34,6 +34,7 @@
   #include <errno.h>
   
   #include "cfg.h"
  +#include "cfg_global.h"
   #include "cfg_fmt.h"
   #include "cfg_main.h"
   #include "cfg_data.h"
  Index: ossp-pkg/cfg/cfg_node.c
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 cfg_node.c
  --- ossp-pkg/cfg/cfg_node.c	10 Nov 2002 12:12:23 -0000	1.15
  +++ ossp-pkg/cfg/cfg_node.c	18 Nov 2002 09:51:29 -0000	1.16
  @@ -34,6 +34,7 @@
   #include <unistd.h>
   #include <limits.h>
   
  +#include "cfg_global.h"
   #include "cfg_main.h"
   #include "cfg_node.h"
   #include "cfg_fmt.h"
  Index: ossp-pkg/cfg/cfg_syn.c
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 cfg_syn.c
  --- ossp-pkg/cfg/cfg_syn.c	10 Nov 2002 12:12:23 -0000	1.14
  +++ ossp-pkg/cfg/cfg_syn.c	18 Nov 2002 09:51:29 -0000	1.15
  @@ -32,6 +32,7 @@
   #include <ctype.h>
   
   #include "cfg.h"
  +#include "cfg_global.h"
   #include "cfg_grid.h"
   #include "cfg_node.h"
   #include "cfg_fmt.h"
  Index: ossp-pkg/cfg/cfg_syn_parse.y
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 cfg_syn_parse.y
  --- ossp-pkg/cfg/cfg_syn_parse.y	10 Nov 2002 12:12:23 -0000	1.4
  +++ ossp-pkg/cfg/cfg_syn_parse.y	18 Nov 2002 09:51:29 -0000	1.5
  @@ -35,6 +35,7 @@
   #include <stdlib.h>
   
   #include "cfg.h"
  +#include "cfg_global.h"
   #include "cfg_syn.h"
   
   /* make sure yyparse() accepts a context pointer and
  Index: ossp-pkg/cfg/cfg_syn_scan.l
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 cfg_syn_scan.l
  --- ossp-pkg/cfg/cfg_syn_scan.l	10 Nov 2002 12:12:23 -0000	1.13
  +++ ossp-pkg/cfg/cfg_syn_scan.l	18 Nov 2002 09:51:29 -0000	1.14
  @@ -36,6 +36,7 @@
   #include <string.h>
   
   #include "cfg.h"
  +#include "cfg_global.h"
   #include "cfg_syn.h"
   #include "cfg_syn_parse.h"
   
  Index: ossp-pkg/cfg/cfg_test.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 cfg_test.c
  --- ossp-pkg/cfg/cfg_test.c	10 Nov 2002 12:12:23 -0000	1.9
  +++ ossp-pkg/cfg/cfg_test.c	18 Nov 2002 09:51:29 -0000	1.10
  @@ -4,6 +4,7 @@
   #include <string.h>
   
   #include "cfg.h"
  +#include "cfg_global.h"
   #include "cfg_util.h"
   
   int main(int argc, char *argv[])
  Index: ossp-pkg/cfg/cfg_util.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 cfg_util.c
  --- ossp-pkg/cfg/cfg_util.c	3 Jul 2002 13:25:34 -0000	1.1
  +++ ossp-pkg/cfg/cfg_util.c	18 Nov 2002 09:51:29 -0000	1.2
  @@ -34,6 +34,7 @@
   #include <unistd.h>
   
   #include "cfg.h"
  +#include "cfg_global.h"
   #include "cfg_util.h"
   
   cfg_rc_t cfg_util_readfile(const char *filename, char **buf_ptr, size_t *buf_len)
  Index: ossp-pkg/cfg/configure.ac
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 configure.ac
  --- ossp-pkg/cfg/configure.ac	9 Nov 2002 14:34:01 -0000	1.6
  +++ ossp-pkg/cfg/configure.ac	18 Nov 2002 09:51:29 -0000	1.7
  @@ -50,6 +50,9 @@
   AC_CHECK_EXTLIB([OSSP ex], ex, __ex_ctx, ex.h,
                   [AC_DEFINE(WITH_EX, 1, [Define to 1 if building with OSSP ex])])
   
  +AC_CHECK_EXTLIB(Dmalloc, dmalloc, dmalloc_debug, dmalloc.h,
  +                AC_DEFINE(WITH_DMALLOC, 1, [define if building with Dmalloc]))
  +
   AC_CONFIG_HEADERS(config.h)
   AC_CONFIG_FILES([Makefile cfg-config])
   AC_CONFIG_COMMANDS([adjustment], [chmod a+x cfg-config])
  Index: ossp-pkg/cfg/devtool.conf
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 devtool.conf
  --- ossp-pkg/cfg/devtool.conf	18 Nov 2002 09:35:41 -0000	1.7
  +++ ossp-pkg/cfg/devtool.conf	18 Nov 2002 09:51:29 -0000	1.8
  @@ -16,6 +16,7 @@
       ./configure \
           --prefix=/tmp/cfg \
           --disable-shared \
  +        --with-dmalloc=/usr/opkg \
           --enable-maintainer \
           --enable-debug \
           "$@"

From ossp-cvs-owner@ossp.org  Mon Nov 18 11:23:36 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B24B676A55; Mon, 18 Nov 2002 11:23:36 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg cfg_buf.c cfg_global.h cfg_main.c cfg_test.c
Message-Id: <20021118102336.B24B676A55@mail.ossp.org>
Date: Mon, 18 Nov 2002 11:23:36 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Nov-2002 11:23:36
  Branch: HEAD                             Handle: 2002111810233600

  Modified files:
    ossp-pkg/cfg            cfg_buf.c cfg_global.h cfg_main.c cfg_test.c

  Log:
    more memory handling cleanups

  Summary:
    Revision    Changes     Path
    1.8         +3  -1      ossp-pkg/cfg/cfg_buf.c
    1.2         +2  -0      ossp-pkg/cfg/cfg_global.h
    1.9         +1  -0      ossp-pkg/cfg/cfg_main.c
    1.11        +5  -8      ossp-pkg/cfg/cfg_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/cfg_buf.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 cfg_buf.c
  --- ossp-pkg/cfg/cfg_buf.c	18 Nov 2002 09:51:29 -0000	1.7
  +++ ossp-pkg/cfg/cfg_buf.c	18 Nov 2002 10:23:36 -0000	1.8
  @@ -125,8 +125,10 @@
   {
       if (buf == NULL)
           return CFG_ERR_ARG;
  -    if (ptr != NULL)
  +    if (ptr != NULL) {
           *ptr  = buf->buf_ptr;
  +        buf->buf_ptr = NULL;
  +    }
       if (len != NULL)
           *len  = buf->buf_len;
       if (size != NULL)
  Index: ossp-pkg/cfg/cfg_global.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 cfg_global.h
  --- ossp-pkg/cfg/cfg_global.h	18 Nov 2002 09:51:29 -0000	1.1
  +++ ossp-pkg/cfg/cfg_global.h	18 Nov 2002 10:23:36 -0000	1.2
  @@ -31,6 +31,8 @@
   #ifndef __CFG_GLOBAL_H__
   #define __CFG_GLOBAL_H__
   
  +#include "config.h"
  +
   #ifdef WITH_DMALLOC
   #include "dmalloc.h"
   #endif
  Index: ossp-pkg/cfg/cfg_main.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 cfg_main.c
  --- ossp-pkg/cfg/cfg_main.c	18 Nov 2002 09:51:29 -0000	1.8
  +++ ossp-pkg/cfg/cfg_main.c	18 Nov 2002 10:23:36 -0000	1.9
  @@ -77,6 +77,7 @@
   {
       if (cfg == NULL)
           return CFG_ERR_ARG;
  +    /* FIXME: on each node, free token string first */
       cfg_grid_destroy(cfg->grid_nodes);
       cfg_grid_destroy(cfg->grid_tokens);
       free(cfg);
  Index: ossp-pkg/cfg/cfg_test.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 cfg_test.c
  --- ossp-pkg/cfg/cfg_test.c	18 Nov 2002 09:51:29 -0000	1.10
  +++ ossp-pkg/cfg/cfg_test.c	18 Nov 2002 10:23:36 -0000	1.11
  @@ -42,24 +42,24 @@
           cfg_destroy(cfg);
           exit(1);
       }
  +    free(im_ptr);
   
       if ((rc = cfg_export(cfg, NULL, CFG_FMT_CFG, &ex_ptr, 0)) != CFG_OK) {
           cfg_error(cfg, rc, &error);
           fprintf(stderr, "ERROR: cfg_export: %s\n", error);
  -        free(im_ptr);
           cfg_destroy(cfg);
           exit(1);
       }
   
       fprintf(stdout, "%s", ex_ptr);
       fflush(stdout);
  +    free(ex_ptr);
   
       if (argc == 3) {
           if ((rc = cfg_node_select(cfg, NULL, &vec, "%s", argv[2])) != CFG_OK) {
               cfg_error(cfg, rc, &error);
               fprintf(stderr, "ERROR: cfg_node_select: %s\n", error);
  -            free(im_ptr);
  -            /*cfg_destroy(cfg);*/
  +            cfg_destroy(cfg);
               exit(1);
           }
           for (i = 1; vec[i] != NULL; i++) {
  @@ -67,19 +67,16 @@
               if ((rc = cfg_export(cfg, vec[i], CFG_FMT_CFG, &ex_ptr, 0)) != CFG_OK) {
                   cfg_error(cfg, rc, &error);
                   fprintf(stderr, "ERROR: cfg_export: %s\n", error);
  -                free(im_ptr);
  -                /*cfg_destroy(cfg);*/
  +                cfg_destroy(cfg);
                   exit(1);
               }
               fprintf(stdout, "%s", ex_ptr);
               fprintf(stdout, "---- selection #%d ----\n", i);
  +            free(ex_ptr);
           }
       }
   
  -#if 0
  -    cfg_syn_destroy(cfg, node);
       cfg_destroy(cfg);
  -#endif
   
       return 0;
   }

From ossp-cvs-owner@ossp.org  Mon Nov 18 11:25:42 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3D28776A55; Mon, 18 Nov 2002 11:25:42 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg cfg_test.c
Message-Id: <20021118102542.3D28776A55@mail.ossp.org>
Date: Mon, 18 Nov 2002 11:25:42 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Nov-2002 11:25:42
  Branch: HEAD                             Handle: 2002111810254100

  Modified files:
    ossp-pkg/cfg            cfg_test.c

  Log:
    better reporting

  Summary:
    Revision    Changes     Path
    1.12        +5  -2      ossp-pkg/cfg/cfg_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/cfg_test.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 cfg_test.c
  --- ossp-pkg/cfg/cfg_test.c	18 Nov 2002 10:23:36 -0000	1.11
  +++ ossp-pkg/cfg/cfg_test.c	18 Nov 2002 10:25:41 -0000	1.12
  @@ -56,14 +56,16 @@
       free(ex_ptr);
   
       if (argc == 3) {
  +        fprintf(stdout, "==== selection process ====\n");
           if ((rc = cfg_node_select(cfg, NULL, &vec, "%s", argv[2])) != CFG_OK) {
               cfg_error(cfg, rc, &error);
               fprintf(stderr, "ERROR: cfg_node_select: %s\n", error);
               cfg_destroy(cfg);
               exit(1);
           }
  -        for (i = 1; vec[i] != NULL; i++) {
  -            fprintf(stdout, "---- selection #%d ----\n", i);
  +        fprintf(stdout, "==== selection results ====\n");
  +        for (i = 0; vec[i] != NULL; i++) {
  +            fprintf(stdout, "---- selection result #%d ----\n", i);
               if ((rc = cfg_export(cfg, vec[i], CFG_FMT_CFG, &ex_ptr, 0)) != CFG_OK) {
                   cfg_error(cfg, rc, &error);
                   fprintf(stderr, "ERROR: cfg_export: %s\n", error);
  @@ -74,6 +76,7 @@
               fprintf(stdout, "---- selection #%d ----\n", i);
               free(ex_ptr);
           }
  +        fprintf(stdout, "==== selection end ====\n");
       }
   
       cfg_destroy(cfg);

From ossp-cvs-owner@ossp.org  Mon Nov 18 17:01:45 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A679276A28; Mon, 18 Nov 2002 17:01:44 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq devtool.conf
Message-Id: <20021118160144.A679276A28@mail.ossp.org>
Date: Mon, 18 Nov 2002 17:01:44 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   18-Nov-2002 17:01:44
  Branch: HEAD                             Handle: 2002111816014400

  Modified files:
    ossp-pkg/titraq         devtool.conf

  Log:
    Synchronize with latest versions of autoconf and shtool.

  Summary:
    Revision    Changes     Path
    1.2         +2  -2      ossp-pkg/titraq/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/devtool.conf
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 devtool.conf
  --- ossp-pkg/titraq/devtool.conf	21 Oct 2002 15:19:37 -0000	1.1.1.1
  +++ ossp-pkg/titraq/devtool.conf	18 Nov 2002 16:01:44 -0000	1.2
  @@ -3,8 +3,8 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.1 "1.6.*" all
  -    @autogen autoconf 2.54  "2.5[3-9]*"
  +    @autogen shtool   1.6.2 "1.6.*" all
  +    @autogen autoconf 2.56  "2.5[3-9]*"
   
   %autoclean
       @autoclean shtool

From ossp-cvs-owner@ossp.org  Mon Nov 18 18:39:00 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3627B76A28; Mon, 18 Nov 2002 18:39:00 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq configure.in
Message-Id: <20021118173900.3627B76A28@mail.ossp.org>
Date: Mon, 18 Nov 2002 18:39:00 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   18-Nov-2002 18:39:00
  Branch: HEAD                             Handle: 2002111817385900

  Modified files:
    ossp-pkg/titraq         configure.in

  Log:
    Minor build configuration update.

  Summary:
    Revision    Changes     Path
    1.4         +2  -2      ossp-pkg/titraq/configure.in
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/configure.in
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 configure.in
  --- ossp-pkg/titraq/configure.in	8 Nov 2002 12:21:34 -0000	1.3
  +++ ossp-pkg/titraq/configure.in	18 Nov 2002 17:38:59 -0000	1.4
  @@ -29,12 +29,12 @@
   ##
   
   dnl Version requirement and information
  -AC_PREREQ(2.53)
  +AC_PREREQ(2.56)
   AC_REVISION(1.0)
   
   dnl Process this file with autoconf
   AC_INIT
  -AC_CONFIG_HEADER(ac_config.h)
  +AC_CONFIG_HEADERS(ac_config.h)
   AC_LANG_CPLUSPLUS
   
   dnl Checks basic requirements

From ossp-cvs-owner@ossp.org  Mon Nov 18 23:10:12 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4ECE976A28; Mon, 18 Nov 2002 23:10:12 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq/gfx filenew.xpm fileopen.xpm filesave.xpm ...
Message-Id: <20021118221012.4ECE976A28@mail.ossp.org>
Date: Mon, 18 Nov 2002 23:10:12 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   18-Nov-2002 23:10:12
  Branch: HEAD                             Handle: 2002111822101100

  Added files:
    ossp-pkg/titraq/gfx     qtlogo.xpm whatsthis.xpm
  Modified files:
    ossp-pkg/titraq/gfx     filenew.xpm fileopen.xpm filesave.xpm ossplogo.xpm

  Log:
    Revamp of graphics to be more consistent, and add recognition for both OSSP
    and Qt projects.

  Summary:
    Revision    Changes     Path
    1.2         +97 -34     ossp-pkg/titraq/gfx/filenew.xpm
    1.3         +129 -34    ossp-pkg/titraq/gfx/fileopen.xpm
    1.3         +65 -34     ossp-pkg/titraq/gfx/filesave.xpm
    1.3         +146 -115   ossp-pkg/titraq/gfx/ossplogo.xpm
    1.1         +253 -0     ossp-pkg/titraq/gfx/qtlogo.xpm
    1.1         +26 -0      ossp-pkg/titraq/gfx/whatsthis.xpm
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/gfx/filenew.xpm
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 filenew.xpm
  --- ossp-pkg/titraq/gfx/filenew.xpm	14 Nov 2002 21:29:50 -0000	1.1
  +++ ossp-pkg/titraq/gfx/filenew.xpm	18 Nov 2002 22:10:11 -0000	1.2
  @@ -1,36 +1,99 @@
   /* XPM */
   static const char *s_kpcFilenew_xpm[] = {
  -/* columns rows colors chars-per-pixel */
  -"22 22 8 1",
  -"  c Gray100",
  -". c Gray76",
  -"X c Gray53",
  -"o c Gray36",
  -"O c Gray18",
  -"+ c Gray0",
  -"@ c None",
  -"# c Gray0",
  -/* pixels */
  -"@@@@@@@@@@@@@@@@@@@@@@",
  -"@@@@++++++++++@@@@@@@@",
  -"@@@@+       +O+@@@@@@@",
  -"@@@@+       +oO+@@@@@@",
  -"@@@@+       +XoO+@@@@@",
  -"@@@@+       +.XoO+@@@@",
  -"@@@@+       + .XoO+@@@",
  -"@@@@+       +++++++@@@",
  -"@@@@+             +@@@",
  -"@@@@+             +@@@",
  -"@@@@+             +@@@",
  -"@@@@+             +@@@",
  -"@@@@+             +@@@",
  -"@@@@+             +@@@",
  -"@@@@+             +@@@",
  -"@@@@+             +@@@",
  -"@@@@+             +@@@",
  -"@@@@+             +@@@",
  -"@@@@+             +@@@",
  -"@@@@+++++++++++++++@@@",
  -"@@@@@@@@@@@@@@@@@@@@@@",
  -"@@@@@@@@@@@@@@@@@@@@@@"
  -};
  +"22 22 74 1",
  +" 	c None",
  +".	c #000000",
  +"+	c #FCFCFC",
  +"@	c #FAFAFA",
  +"#	c #E8E8E8",
  +"$	c #ADADAD",
  +"%	c #212121",
  +"&	c #F8F8F8",
  +"*	c #E6E6E6",
  +"=	c #ACACAC",
  +"-	c #4E4E4E",
  +";	c #747474",
  +">	c #F7F7F7",
  +",	c #F5F5F5",
  +"'	c #E4E4E4",
  +")	c #AAAAAA",
  +"!	c #4D4D4D",
  +"~	c #DCDCDC",
  +"{	c #6E6E6E",
  +"]	c #F4F4F4",
  +"^	c #F2F2F2",
  +"/	c #E1E1E1",
  +"(	c #A7A7A7",
  +"_	c #D0D0D0",
  +":	c #686868",
  +"<	c #F1F1F1",
  +"[	c #F0F0F0",
  +"}	c #EEEEEE",
  +"|	c #DDDDDD",
  +"1	c #A6A6A6",
  +"2	c #4C4C4C",
  +"3	c #C4C4C4",
  +"4	c #626262",
  +"5	c #EDEDED",
  +"6	c #EBEBEB",
  +"7	c #A8A8A8",
  +"8	c #575757",
  +"9	c #A2A2A2",
  +"0	c #515151",
  +"a	c #E9E9E9",
  +"b	c #B7B7B7",
  +"c	c #3E3E3E",
  +"d	c #2B2B2B",
  +"e	c #252525",
  +"f	c #1D1D1D",
  +"g	c #E7E7E7",
  +"h	c #E5E5E5",
  +"i	c #E0E0E0",
  +"j	c #CFCFCF",
  +"k	c #B4B4B4",
  +"l	c #A3A3A3",
  +"m	c #9E9E9E",
  +"n	c #9D9D9D",
  +"o	c #767676",
  +"p	c #E3E3E3",
  +"q	c #DFDFDF",
  +"r	c #D5D5D5",
  +"s	c #D1D1D1",
  +"t	c #9C9C9C",
  +"u	c #DBDBDB",
  +"v	c #A5A5A5",
  +"w	c #D8D8D8",
  +"x	c #D4D4D4",
  +"y	c #9F9F9F",
  +"z	c #CDCDCD",
  +"A	c #9A9A9A",
  +"B	c #C9C9C9",
  +"C	c #979797",
  +"D	c #CBCBCB",
  +"E	c #C6C6C6",
  +"F	c #949494",
  +"G	c #C2C2C2",
  +"H	c #929292",
  +"I	c #838383",
  +"                      ",
  +"                      ",
  +"    .........         ",
  +"    .++++@#$%.        ",
  +"    .@@@@&*=-;.       ",
  +"    .&>>>,')!~{.      ",
  +"    .,]]]^/(!__:.     ",
  +"    .<[[[}|123334.    ",
  +"    .}5556~7899990.   ",
  +"    .6aaa#~bcdeeef.   ",
  +"    .ghhh'ijklmnno.   ",
  +"    .p////q~rsjjjt.   ",
  +"    .i|||||~~uuuuv.   ",
  +"    .uwwwwwwwwwww9.   ",
  +"    .wxxxxxxxxxxxy.   ",
  +"    .rsssssssssssn.   ",
  +"    .szzzzzzzzzzzA.   ",
  +"    .zBBBBBBBBBBBC.   ",
  +"    .DEEEEEEEEEEEF.   ",
  +"    .GHHHHHHHHHHHI.   ",
  +"    ...............   ",
  +"                      "};
  Index: ossp-pkg/titraq/gfx/fileopen.xpm
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 fileopen.xpm
  --- ossp-pkg/titraq/gfx/fileopen.xpm	14 Nov 2002 21:29:50 -0000	1.2
  +++ ossp-pkg/titraq/gfx/fileopen.xpm	18 Nov 2002 22:10:11 -0000	1.3
  @@ -1,36 +1,131 @@
   /* XPM */
   static const char *s_kpcFileopen_xpm[] = {
  -/* columns rows colors chars-per-pixel */
  -"22 22 8 1",
  -"  c Gray100",
  -". c Yellow",
  -"X c #848200",
  -"o c Gray0",
  -"O c None",
  -"+ c Gray0",
  -"@ c Gray0",
  -"# c Gray0",
  -/* pixels */
  -"OOOOOOOOOOOOOOOOOOOOOO",
  -"OOOOOOOOOOOOOOOOOOOOOO",
  -"OOOOOOOOOOOOOOOOOOOOOO",
  -"OOOOOOOOOOOOooooOOOOoO",
  -"OOOOOOOOOOOoOOOOooOooO",
  -"OOOOOOOOOOOOOOOOOOoooO",
  -"OOOOOOOOOOOOOOOOOooooO",
  -"OooooOOOOOOOOOOOoooooO",
  -"o. . ooooooooooOOOOOOO",
  -"o . . . . . . oOOOOOOO",
  -"o. . . . . . .oOOOOOOO",
  -"o . . . . . . oOOOOOOO",
  -"o. . . ooooooooooooooo",
  -"o . . ooXXXXXXXXXXXXoo",
  -"o. . ooXXXXXXXXXXXXooO",
  -"o . ooXXXXXXXXXXXXooOO",
  -"o. ooXXXXXXXXXXXXooOOO",
  -"o ooXXXXXXXXXXXXooOOOO",
  -"oooXXXXXXXXXXXXooOOOOO",
  -"ooXXXXXXXXXXXXooOOOOOO",
  -"oooooooooooooooOOOOOOO",
  -"OOOOOOOOOOOOOOOOOOOOOO"
  -};
  +"22 22 106 2",
  +"  	c None",
  +". 	c #000000",
  +"+ 	c #ABABAB",
  +"@ 	c #A3D4A0",
  +"# 	c #6D8E6B",
  +"$ 	c #FCFCFC",
  +"% 	c #FBFBFB",
  +"& 	c #A9A9A9",
  +"* 	c #F6F6F6",
  +"= 	c #F5F5F5",
  +"- 	c #A6A6A6",
  +"; 	c #A2A2A2",
  +"> 	c #EFEFEF",
  +", 	c #F0F0F0",
  +"' 	c #F1F1F1",
  +") 	c #5F7C5E",
  +"! 	c #617E5F",
  +"~ 	c #9B9B9B",
  +"{ 	c #E7E7E7",
  +"] 	c #E8E8E8",
  +"^ 	c #EAEAEA",
  +"/ 	c #9E9E9E",
  +"( 	c #5C775B",
  +"_ 	c #8BB589",
  +": 	c #8DB88B",
  +"< 	c #617D5F",
  +"[ 	c #969696",
  +"} 	c #DFDFDF",
  +"| 	c #E0E0E0",
  +"1 	c #E3E3E3",
  +"2 	c #9A9A9A",
  +"3 	c #86AE84",
  +"4 	c #88B186",
  +"5 	c #8AB488",
  +"6 	c #8DB88A",
  +"7 	c #607D5F",
  +"8 	c #909090",
  +"9 	c #D6D6D6",
  +"0 	c #D7D7D7",
  +"a 	c #DBDBDB",
  +"b 	c #959595",
  +"c 	c #567054",
  +"d 	c #83AA80",
  +"e 	c #85AD83",
  +"f 	c #87B085",
  +"g 	c #8AB387",
  +"h 	c #8CB68A",
  +"i 	c #898989",
  +"j 	c #CDCDCD",
  +"k 	c #CFCFCF",
  +"l 	c #BBBBBB",
  +"m 	c #7DA27A",
  +"n 	c #7FA57D",
  +"o 	c #82A97F",
  +"p 	c #84AC82",
  +"q 	c #87AF84",
  +"r 	c #89B287",
  +"s 	c #5F7B5D",
  +"t 	c #838383",
  +"u 	c #C4C4C4",
  +"v 	c #A1A1A1",
  +"w 	c #4F674E",
  +"x 	c #799D76",
  +"y 	c #7CA17A",
  +"z 	c #7EA47C",
  +"A 	c #81A77E",
  +"B 	c #83AA81",
  +"C 	c #7D7D7D",
  +"D 	c #739570",
  +"E 	c #769973",
  +"F 	c #789C76",
  +"G 	c #7BA079",
  +"H 	c #7DA37B",
  +"I 	c #80A77D",
  +"J 	c #5E7A5D",
  +"K 	c #B2B2B2",
  +"L 	c #939393",
  +"M 	c #485F47",
  +"N 	c #6F906D",
  +"O 	c #729470",
  +"P 	c #759773",
  +"Q 	c #779B75",
  +"R 	c #7A9E78",
  +"S 	c #8B8B8B",
  +"T 	c #485E46",
  +"U 	c #6E906D",
  +"V 	c #71936F",
  +"W 	c #739772",
  +"X 	c #769A74",
  +"Y 	c #6B6B6B",
  +"Z 	c #848484",
  +"` 	c #485D46",
  +" .	c #70926E",
  +"..	c #546D52",
  +"+.	c #465C46",
  +"@.	c #6C8D6A",
  +"#.	c #505050",
  +"$.	c #465B45",
  +"%.	c #6C8C69",
  +"&.	c #4D654C",
  +"*.	c #465B44",
  +"=.	c #6B8A69",
  +"-.	c #4B624A",
  +";.	c #455A44",
  +">.	c #698968",
  +",.	c #4A6149",
  +"                                            ",
  +"      . .     . .                           ",
  +"      . + . . @ # . .                       ",
  +"      . $ % & . . @ # . .   . .             ",
  +"      . * = = * - . . @ # . @ # . .         ",
  +"  . . . ; > > > , ' ; . . @ @ @ @ # . .     ",
  +". ) ! . . ~ { { { { ] ^ / . . # @ @ @ # .   ",
  +". ( _ : < . . [ } } } } | 1 2 . . # @ @ .   ",
  +"  . 3 4 5 6 7 . . 8 9 9 9 9 0 a b . . @ .   ",
  +"  . c d e f g h ) . . i j j j j k l . @ .   ",
  +"    . m n o p q r _ s . . t u u u v . @ .   ",
  +"    . w x y z A B 3 4 5 s . . C l 2 . @ .   ",
  +"      . D E F G H I d e f g J . K L . @ .   ",
  +"      . M N O P Q R m n o p q . & S . @ .   ",
  +"        . . T U V W X x y z A . Y Z . @ .   ",
  +"            . . ` #  .D E F G ... C . @ .   ",
  +"                . . +.@.N O P Q . #.. @ .   ",
  +"                    . . $.%.U V &.. . @ .   ",
  +"                        . . *.=.# -.. @ .   ",
  +"                            . . ;.>.@.,..   ",
  +"                                . . . .     ",
  +"                                            "};
  Index: ossp-pkg/titraq/gfx/filesave.xpm
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 filesave.xpm
  --- ossp-pkg/titraq/gfx/filesave.xpm	14 Nov 2002 21:29:50 -0000	1.2
  +++ ossp-pkg/titraq/gfx/filesave.xpm	18 Nov 2002 22:10:11 -0000	1.3
  @@ -1,36 +1,67 @@
   /* XPM */
   static const char *s_kpcFilesave_xpm[] = {
  -/* columns rows colors chars-per-pixel */
  -"22 22 8 1",
  -"  c Gray100",
  -". c #cab5d1",
  -"X c #c1c1c1",
  -"o c #848200",
  -"O c Gray0",
  -"+ c None",
  -"@ c Gray0",
  -"# c Gray0",
  -/* pixels */
  -"++++++++++++++++++++++",
  -"+OOOOOOOOOOOOOOOOOOOO+",
  -"+OooOXXXXXXXXXXXXOXXO+",
  -"+OooOXXXXXXXXXXXXOXXO+",
  -"+OooOXXXXXXXXX.XXOOOO+",
  -"+OooOXXX..XXXXXXXOooO+",
  -"+OooOXXX..XXXXXXXOooO+",
  -"+OooOXXXXXXXXXXXXOooO+",
  -"+OooOXXXXXXXXXXXXOooO+",
  -"+OooOXXXXXXXXXXXXOooO+",
  -"+OooOXXXXXXXXXXXXOooO+",
  -"+OoooOOOOOOOOOOOOoooO+",
  -"+OooooooooooooooooooO+",
  -"+OooooooooooooooooooO+",
  -"+OoooOOOOOOOOOOOOOooO+",
  -"+OoooOOOOOOOOOXXXOooO+",
  -"+OoooOOOOOOOOOXXXOooO+",
  -"+OoooOOOOOOOOOXXXOooO+",
  -"+OoooOOOOOOOOOXXXOooO+",
  -"+OoooOOOOOOOOOXXXOooO+",
  -"++OOOOOOOOOOOOOOOOOO++",
  -"++++++++++++++++++++++"
  -};
  +"22 22 42 1",
  +" 	c None",
  +".	c #151515",
  +"+	c #000000",
  +"@	c #080808",
  +"#	c #4C4C4C",
  +"$	c #7E9B3E",
  +"%	c #89B22A",
  +"&	c #FFFFFF",
  +"*	c #85AF21",
  +"=	c #5E8300",
  +"-	c #424242",
  +";	c #3A5004",
  +">	c #787878",
  +",	c #78A800",
  +"'	c #689000",
  +")	c #3B3B3B",
  +"!	c #86B023",
  +"~	c #394F00",
  +"{	c #668E00",
  +"]	c #2C3713",
  +"^	c #1E2A00",
  +"/	c #303A1A",
  +"(	c #202D00",
  +"_	c #6C6C6C",
  +":	c #858585",
  +"<	c #A6A6A6",
  +"[	c #1D2A00",
  +"}	c #737373",
  +"|	c #A0A0A0",
  +"1	c #B2B2B2",
  +"2	c #727272",
  +"3	c #A8A8A8",
  +"4	c #B7B7B7",
  +"5	c #AAAAAA",
  +"6	c #B8B8B8",
  +"7	c #343434",
  +"8	c #BABABA",
  +"9	c #75A400",
  +"0	c #628800",
  +"a	c #1D1D1D",
  +"b	c #1C2600",
  +"c	c #425B00",
  +"                      ",
  +"   .++++++++++++++@   ",
  +"  #$%&&&&&&&&&&&&*=+  ",
  +"  -%;&>>>>>>>&>>&,'+  ",
  +"  )!~&&&&&&&&&&&&,{+  ",
  +"  )!,&>>>>>>>&>>&,{+  ",
  +"  )!,&&&&&&&&&&&&,{+  ",
  +"  )!,&>>>&>>>&>>&,{+  ",
  +"  )!,&&&&&&&&&&&&,{+  ",
  +"  )!,&&&&&&&&&&&&,{+  ",
  +"  )!,,,,,,,,,,,,,,{+  ",
  +"  )!,]++++++++++^,{+  ",
  +"  )!,+/(((((_:<[+,{+  ",
  +"  )!,+((((((}|1(+,{+  ",
  +"  )!,+((((((234(+,{+  ",
  +"  )!,+((((((:56(+,{+  ",
  +"  7*,+((((((<18(+90+  ",
  +"  a='+bbbbbbbbbb+0c+  ",
  +"   +++++++++++++++++  ",
  +"                      ",
  +"                      ",
  +"                      "};
  Index: ossp-pkg/titraq/gfx/ossplogo.xpm
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 ossplogo.xpm
  --- ossp-pkg/titraq/gfx/ossplogo.xpm	14 Nov 2002 18:18:01 -0000	1.2
  +++ ossp-pkg/titraq/gfx/ossplogo.xpm	18 Nov 2002 22:10:11 -0000	1.3
  @@ -1,118 +1,149 @@
   /* XPM */
   static const char *s_kpcOssplogo_xpm[] = {
  -"16 15 100 2",
  +"22 22 124 2",
   "  	c None",
  -". 	c #AAAAAA",
  -"+ 	c #909090",
  -"@ 	c #9B9B9B",
  -"# 	c #C6C6C6",
  -"$ 	c #FEFEFE",
  -"% 	c #FDFDFD",
  -"& 	c #A2A2A2",
  -"* 	c #888888",
  -"= 	c #8A8A8A",
  -"- 	c #FBFBFB",
  -"; 	c #BFBFBF",
  -"> 	c #D7D7D7",
  -", 	c #FFFFFF",
  -"' 	c #EEEEEE",
  -") 	c #737373",
  -"! 	c #FCFCFC",
  -"~ 	c #CCCCCC",
  -"{ 	c #C4C4C4",
  -"] 	c #E2E2E2",
  -"^ 	c #E3E3E3",
  -"/ 	c #D5D5D5",
  -"( 	c #4F4F4F",
  -"_ 	c #CFCFCF",
  -": 	c #646464",
  -"< 	c #D2D2D2",
  -"[ 	c #434343",
  -"} 	c #C2C2C2",
  -"| 	c #DCDCDC",
  -"1 	c #6E6E6E",
  -"2 	c #AFAFAF",
  -"3 	c #E0E0E0",
  -"4 	c #F8F8F8",
  -"5 	c #9F9F9F",
  -"6 	c #EDEDED",
  -"7 	c #949494",
  -"8 	c #979797",
  -"9 	c #919191",
  -"0 	c #7F7F7F",
  -"a 	c #7D7D7D",
  -"b 	c #CDCDCD",
  -"c 	c #999999",
  -"d 	c #F4F4F4",
  -"e 	c #EBEBEB",
  -"f 	c #626262",
  -"g 	c #E4E4E4",
  -"h 	c #474747",
  -"i 	c #C1C1C1",
  -"j 	c #E7E7E7",
  -"k 	c #C7C7C7",
  -"l 	c #393939",
  -"m 	c #F1F1F1",
  -"n 	c #797979",
  -"o 	c #DDDDDD",
  -"p 	c #EFEFEF",
  -"q 	c #D6D6D6",
  -"r 	c #F3F3F3",
  -"s 	c #4C4C4C",
  -"t 	c #F9F9F9",
  -"u 	c #F5F5F5",
  -"v 	c #9C9C9C",
  -"w 	c #FAFAFA",
  -"x 	c #B8B8B8",
  -"y 	c #D4D4D4",
  -"z 	c #BDBDBD",
  -"A 	c #A5A5A5",
  -"B 	c #DBDBDB",
  -"C 	c #F6F6F6",
  -"D 	c #B6B6B6",
  -"E 	c #D8D8D8",
  -"F 	c #E5E5E5",
  -"G 	c #D9D9D9",
  -"H 	c #757575",
  -"I 	c #BCBCBC",
  -"J 	c #C9C9C9",
  -"K 	c #CBCBCB",
  -"L 	c #DFDFDF",
  -"M 	c #934E4E",
  -"N 	c #B68080",
  -"O 	c #BCA4A4",
  -"P 	c #A13B3B",
  -"Q 	c #371A1A",
  -"R 	c #777777",
  -"S 	c #BAA5A5",
  -"T 	c #A54343",
  -"U 	c #BF4141",
  -"V 	c #A74141",
  -"W 	c #CA3333",
  -"X 	c #3D0F0F",
  -"Y 	c #B1B1B1",
  -"Z 	c #B47474",
  -"` 	c #C03939",
  -" .	c #CD3333",
  -"..	c #CC3333",
  -"+.	c #C5C5C5",
  -"@.	c #AC5050",
  -"#.	c #3B3B3B",
  -"$.	c #3C3C3C",
  -"%.	c #301212",
  -"&.	c #3C0F0F",
  -"      .       + @               ",
  -"  # $ % & *   = - % ;           ",
  -"> , , , '     ) ! ! ~ { ] ^ ^   ",
  -"  % $ / % ( _ , , / : < , , , [ ",
  -"  } |   1     2 3 4 5 6 , , , [ ",
  -"    7 8 9 0   a       < { b , [ ",
  -"  c d , e f   g h c ^ i } j k l ",
  -"    , , m n   - o d p q r , , s ",
  -"    t , , u v w , , w x y , , s ",
  -"    z A B     C D E F G ! , ! s ",
  -"      o H I J K b L } M N O P Q ",
  -"    R ! B % q G ! $ S T U V W X ",
  -"    R , , , g Y p % Z `  ... .X ",
  -"    R , , , +.r , , , @. .....X ",
  -"              #.$.$.$.%.&.&.&.  "};
  +". 	c #F4F4F4",
  +"+ 	c #FDFDFD",
  +"@ 	c #B6B6B6",
  +"# 	c #ECECEC",
  +"$ 	c #FFFFFF",
  +"% 	c #FAFAFA",
  +"& 	c #F5F5F5",
  +"* 	c #F3F3F3",
  +"= 	c #F9F9F9",
  +"- 	c #DCDCDC",
  +"; 	c #E4E4E4",
  +"> 	c #A8A8A8",
  +", 	c #D2D2D2",
  +"' 	c #FCFCFC",
  +") 	c #F7F7F7",
  +"! 	c #F1F1F1",
  +"~ 	c #EBEBEB",
  +"{ 	c #5D5D5D",
  +"] 	c #EEEEEE",
  +"^ 	c #F2F2F2",
  +"/ 	c #C0C0C0",
  +"( 	c #F6F6F6",
  +"_ 	c #D5D5D5",
  +": 	c #FBFBFB",
  +"< 	c #FEFEFE",
  +"[ 	c #F0F0F0",
  +"} 	c #4C4C4C",
  +"| 	c #969696",
  +"1 	c #D4D4D4",
  +"2 	c #CCCCCC",
  +"3 	c #D1D1D1",
  +"4 	c #DFDFDF",
  +"5 	c #B7B7B7",
  +"6 	c #E6E6E6",
  +"7 	c #E5E5E5",
  +"8 	c #DADADA",
  +"9 	c #E2E2E2",
  +"0 	c #CBCBCB",
  +"a 	c #BEBEBE",
  +"b 	c #B8B8B8",
  +"c 	c #9A9A9A",
  +"d 	c #ABABAB",
  +"e 	c #7B7B7B",
  +"f 	c #B5B5B5",
  +"g 	c #9C9C9C",
  +"h 	c #DEDEDE",
  +"i 	c #9B9B9B",
  +"j 	c #777777",
  +"k 	c #BDBDBD",
  +"l 	c #EDEDED",
  +"m 	c #F8F8F8",
  +"n 	c #C2C2C2",
  +"o 	c #C9C9C9",
  +"p 	c #929292",
  +"q 	c #D9D9D9",
  +"r 	c #B2B2B2",
  +"s 	c #EFEFEF",
  +"t 	c #B0B0B0",
  +"u 	c #CFCFCF",
  +"v 	c #DBDBDB",
  +"w 	c #9F9F9F",
  +"x 	c #C8C8C8",
  +"y 	c #7C7C7C",
  +"z 	c #585858",
  +"A 	c #D6D6D6",
  +"B 	c #E7E7E7",
  +"C 	c #999999",
  +"D 	c #BFBFBF",
  +"E 	c #C7C7C7",
  +"F 	c #B4B4B4",
  +"G 	c #A5A5A5",
  +"H 	c #DDDDDD",
  +"I 	c #D8D8D8",
  +"J 	c #A6A6A6",
  +"K 	c #C4C4C4",
  +"L 	c #A9A9A9",
  +"M 	c #CDCDCD",
  +"N 	c #948A8A",
  +"O 	c #8C4040",
  +"P 	c #955151",
  +"Q 	c #EEEDED",
  +"R 	c #8D6060",
  +"S 	c #8F3B3B",
  +"T 	c #814242",
  +"U 	c #BABABA",
  +"V 	c #AAAAAA",
  +"W 	c #D6D1D1",
  +"X 	c #AC2E2E",
  +"Y 	c #B74F4F",
  +"Z 	c #CCBFBF",
  +"` 	c #984D4D",
  +" .	c #C93232",
  +"..	c #8C2323",
  +"+.	c #D7D7D7",
  +"@.	c #A08585",
  +"#.	c #956868",
  +"$.	c #AE2C2C",
  +"%.	c #CA3333",
  +"&.	c #B32E2E",
  +"*.	c #B82E2E",
  +"=.	c #CB3333",
  +"-.	c #862121",
  +";.	c #E0E0E0",
  +">.	c #9F6363",
  +",.	c #B64141",
  +"'.	c #CC3333",
  +").	c #CECECE",
  +"!.	c #E9E9E9",
  +"~.	c #F1EDED",
  +"{.	c #D4C5C5",
  +"].	c #B93030",
  +"^.	c #ACACAC",
  +"/.	c #DBD7D7",
  +"(.	c #A82D2D",
  +"_.	c #848484",
  +":.	c #7D7D7D",
  +"<.	c #717171",
  +"[.	c #909090",
  +"}.	c #919191",
  +"|.	c #7E7272",
  +"1.	c #7B1F1F",
  +"2.	c #681A1A",
  +"3.	c #5B1717",
  +"                                            ",
  +"      . + @         # $ % &                 ",
  +"  * + $ $ = - ;     > , $ $ ' )             ",
  +"! $ $ $ $ $ ~ {       ] $ $ ^ % / ( ( ( ( _ ",
  +"  : $ $ $ $ )     & & < $ [ } | 1 $ $ $ $ 2 ",
  +"  ^ $ < 3 4 $ 5   6 + $ $ 7 8 9 = $ $ $ $ 0 ",
  +"    ' 7     0       a < < $ 4 b < $ $ $ $ 0 ",
  +"    ^ * c           # d e f g   : & h ) $ 0 ",
  +"      i , _ ( 9       j         = k @ 1 $ 0 ",
  +"    l m $ $ & n     [ 1   l ( o k > h o 5 p ",
  +"    ! $ $ $ q       ( 0   ! $ r s * + + . t ",
  +"    ~ $ $ $ : 2 8 u + $ + $ $ _ v ; $ $ $ > ",
  +"      + $ $ $ $ ( w ' $ $ $ $ 9 x k $ $ $ > ",
  +"      & $ $ = t y z & . A ^ $ r x B $ $ $ > ",
  +"      v C D ,       ) E b 3 $ F ! m $ + & G ",
  +"        H I a J & K a L v M f N O P Q R S T ",
  +"        < U   [ $ V [ & + < ( W X Y Z `  ...",
  +"        < $ + $ $ , +.8 $ < @.#.$.%.&.*.=.-.",
  +"        < $ $ $ $ ;.x 5 $ < >.,. .'.'.'.'.-.",
  +"        < $ $ $ $ V ).!.$ $ ~.{.].'.'.'.'.-.",
  +"        ' + + + + ^.) < < < < /.(.'.'.'.'.-.",
  +"        _.:.:.:.:.<.[.}.}.}.}.|.1.2.2.2.2.3."};
  Index: ossp-pkg/titraq/gfx/qtlogo.xpm
  ============================================================
  $ cvs update -p -r1.1 qtlogo.xpm
  /* XPM */
  static const char *s_kpcQtlogo_xpm[] = {
  "22 22 228 2",
  "  	c None",
  ". 	c #A2C511",
  "+ 	c #A2C510",
  "@ 	c #A2C512",
  "# 	c #A2C513",
  "$ 	c #A2C514",
  "% 	c #A2C50F",
  "& 	c #A1C412",
  "* 	c #A2C417",
  "= 	c #A1C218",
  "- 	c #A1C21F",
  "; 	c #A2C220",
  "> 	c #A1C413",
  ", 	c #A1C60F",
  "' 	c #A1C611",
  ") 	c #A2C414",
  "! 	c #A2C411",
  "~ 	c #92AD1B",
  "{ 	c #57661C",
  "] 	c #29320F",
  "^ 	c #141B07",
  "/ 	c #161C07",
  "( 	c #293310",
  "_ 	c #566814",
  ": 	c #90AE1F",
  "< 	c #A1C512",
  "[ 	c #A1C517",
  "} 	c #A1C513",
  "| 	c #A0C610",
  "1 	c #A0C117",
  "2 	c #59691B",
  "3 	c #090B09",
  "4 	c #020203",
  "5 	c #020204",
  "6 	c #010204",
  "7 	c #000103",
  "8 	c #02020A",
  "9 	c #080D0A",
  "0 	c #56691A",
  "a 	c #A0C119",
  "b 	c #3F4C12",
  "c 	c #030203",
  "d 	c #030209",
  "e 	c #131608",
  "f 	c #2C3512",
  "g 	c #2C3613",
  "h 	c #13190A",
  "i 	c #020408",
  "j 	c #020306",
  "k 	c #010307",
  "l 	c #414D14",
  "m 	c #A1C115",
  "n 	c #A2C412",
  "o 	c #596919",
  "p 	c #030304",
  "q 	c #050203",
  "r 	c #14170B",
  "s 	c #6E8018",
  "t 	c #A2BC1E",
  "u 	c #A4C316",
  "v 	c #A2C515",
  "w 	c #9EBF1E",
  "x 	c #6C8220",
  "y 	c #14180B",
  "z 	c #020206",
  "A 	c #030403",
  "B 	c #58681A",
  "C 	c #A1C11F",
  "D 	c #A3C517",
  "E 	c #A3C610",
  "F 	c #090B06",
  "G 	c #131709",
  "H 	c #8DA824",
  "I 	c #A2C610",
  "J 	c #A2C51B",
  "K 	c #6E8815",
  "L 	c #9BBC22",
  "M 	c #8CA823",
  "N 	c #12180A",
  "O 	c #090A06",
  "P 	c #93AB21",
  "Q 	c #A4C511",
  "R 	c #A1C514",
  "S 	c #030303",
  "T 	c #020208",
  "U 	c #6F8119",
  "V 	c #A2C50D",
  "W 	c #A2C70C",
  "X 	c #5B6D1F",
  "Y 	c #04060A",
  "Z 	c #323F11",
  "` 	c #9ABA1B",
  " .	c #6D831E",
  "..	c #58651D",
  "+.	c #A3C312",
  "@.	c #29330F",
  "#.	c #020106",
  "$.	c #12150B",
  "%.	c #A2C60C",
  "&.	c #A2C60E",
  "*.	c #A0C310",
  "=.	c #5C6E1B",
  "-.	c #030507",
  ";.	c #020305",
  ">.	c #040605",
  ",.	c #6E871B",
  "'.	c #9FBD20",
  ").	c #111705",
  "!.	c #010102",
  "~.	c #2B330F",
  "{.	c #141B06",
  "].	c #010105",
  "^.	c #2D3514",
  "/.	c #A3C316",
  "(.	c #A3C415",
  "_.	c #5C6E1D",
  ":.	c #040703",
  "<.	c #020107",
  "[.	c #030307",
  "}.	c #5D6B1C",
  "|.	c #9FC219",
  "1.	c #2D3711",
  "2.	c #010203",
  "3.	c #161B09",
  "4.	c #A2C01D",
  "5.	c #A1C511",
  "6.	c #A2C612",
  "7.	c #A1C11D",
  "8.	c #2C3612",
  "9.	c #A2C41B",
  "0.	c #5B6C1F",
  "a.	c #040607",
  "b.	c #010202",
  "c.	c #030306",
  "d.	c #5D6B20",
  "e.	c #9FC412",
  "f.	c #A0C317",
  "g.	c #161B08",
  "h.	c #A3C120",
  "i.	c #A3C41D",
  "j.	c #283210",
  "k.	c #020209",
  "l.	c #12190A",
  "m.	c #6E8916",
  "n.	c #04070B",
  "o.	c #030406",
  "p.	c #040407",
  "q.	c #040405",
  "r.	c #5A6E1A",
  "s.	c #9FBC21",
  "t.	c #13170A",
  "u.	c #020105",
  "v.	c #2B3411",
  "w.	c #A4C31A",
  "x.	c #A2C415",
  "y.	c #566716",
  "z.	c #020507",
  "A.	c #9CBC21",
  "B.	c #323F12",
  "C.	c #050705",
  "D.	c #5E6B1E",
  "E.	c #5E6C21",
  "F.	c #040404",
  "G.	c #020202",
  "H.	c #030606",
  "I.	c #373E1B",
  "J.	c #040302",
  "K.	c #030205",
  "L.	c #586817",
  "M.	c #A4C512",
  "N.	c #A1C416",
  "O.	c #93AD20",
  "P.	c #0A0C0A",
  "Q.	c #020207",
  "R.	c #8BA823",
  "S.	c #9ABB1A",
  "T.	c #6E871C",
  "U.	c #9FC318",
  "V.	c #9FC315",
  "W.	c #5A6D1D",
  "X.	c #030603",
  "Y.	c #010101",
  "Z.	c #090C04",
  "`.	c #90AE19",
  " +	c #A4C412",
  ".+	c #596719",
  "++	c #030207",
  "@+	c #020205",
  "#+	c #121909",
  "$+	c #6D821D",
  "%+	c #A0BE1E",
  "&+	c #A0BD21",
  "*+	c #383F1C",
  "=+	c #374114",
  "-+	c #A2C413",
  ";+	c #A5C418",
  ">+	c #A3BE1A",
  ",+	c #424C15",
  "'+	c #020307",
  ")+	c #131905",
  "!+	c #2D3611",
  "~+	c #2C3610",
  "{+	c #12160A",
  "]+	c #030602",
  "^+	c #5C711B",
  "/+	c #A3C412",
  "(+	c #A4C410",
  "_+	c #A3C117",
  ":+	c #59681B",
  "<+	c #010104",
  "[+	c #020304",
  "}+	c #030103",
  "|+	c #090C03",
  "1+	c #040800",
  "2+	c #5A6F19",
  "3+	c #93AB20",
  "4+	c #161A09",
  "5+	c #161A08",
  "6+	c #2C3411",
  "7+	c #596817",
  "8+	c #5C701B",
  "9+	c #5A6E19",
  "0+	c #A3C41C",
  "a+	c #A3C612",
  "b+	c #A4C220",
  "c+	c #A2C416",
  "d+	c #A2C50E",
  "e+	c #A2C60F",
  ". . . . . . . + . @ # # # + . . . . . . . . ",
  ". . . . . . . $ $ @ @ . % @ . . . . . . . . ",
  ". . . . . . . + & * = - ; > . . . . . . . . ",
  ". . . , ' ) ! ~ { ] ^ / ( _ : < [ } # @ . . ",
  ". . . ' | 1 2 3 4 5 6 7 8 8 9 0 a $ + + . . ",
  ". . . $ 1 b c d 8 e f g h i j k l m . + . . ",
  ". . . n o p q r s t u v w x y z A B C D % + ",
  "+ ) E ~ F 5 G H ! % I J K L M N 6 O P Q R . ",
  ". # n { S T U V > W @ X Y Z `  .j 5 ..+.R @ ",
  "# n * @.#.$.t %.&.*.=.-.;.>.,.'.).!.~.+.< @ ",
  "# @ = {.].^./.+ (._.:.<.[.}.|.v 1.2.3.4.5.. ",
  "# 6.7./ 7 8.v 9.0.a.z b.c.d.e.f.1.6 g.h.5.. ",
  "# @ i.j.k.l.w m.n.o.p.c.#.q.r.s.t.u.v.w.< @ ",
  "% x.% y.8 z.x A.B.C.D.E.F.G.H.I.J.K.L.M.N.. ",
  ". @ + O.P.Q.y R.S.T.U.V.W.X.!.!.Y.Z.`.@ + @ ",
  ". . .  +.+++@+#+$+%+# } &+*+!.Y.S =+* -+&.. ",
  ". . . ;+>+,+q.6 '+)+!+~+{+K.!.S G.]+^+x.+ + ",
  ". . . /+(+_+:+F 4 <+[+6 4 }+|+=+]+1+2+) + . ",
  ". . . @ . ) 7.3+..~.4+5+6+7+`.* 8+9+0+-+. . ",
  ". . . # x.# a+Q +.+.4.b+w./+@ -+x.c+x.-+. . ",
  ". . . d++ ) % R R < 5.5.< N.+ e++ @ x.# + + ",
  ". . . + . @ . . @ @ . . @ . @ . + . @ . + + "};
  Index: ossp-pkg/titraq/gfx/whatsthis.xpm
  ============================================================
  $ cvs update -p -r1.1 whatsthis.xpm
  /* XPM */
  static const char *s_kpcWhatsthis_xpm[] = {
  /* width height ncolors chars_per_pixel */
  "16 16 3 1",
  /* colors */
  "# c None",
  ". c #000000",
  "a c #000083",
  /* pixels */
  ".########aaaaa##",
  "..######aaa#aaa#",
  "...####aaa###aaa",
  "....###aa#####aa",
  ".....##aa#####aa",
  "......##a####aaa",
  ".......#####aaa#",
  "........###aaa##",
  ".........#aaa###",
  ".....#####aaa###",
  "..#...##########",
  ".##...####aaa###",
  "####...###aaa###",
  "####...#########",
  "#####...########",
  "#####...########"
  };

From ossp-cvs-owner@ossp.org  Mon Nov 18 23:12:02 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7D34D76A28; Mon, 18 Nov 2002 23:12:02 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq titrex.cpp titrex.h
Message-Id: <20021118221202.7D34D76A28@mail.ossp.org>
Date: Mon, 18 Nov 2002 23:12:02 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   18-Nov-2002 23:12:02
  Branch: HEAD                             Handle: 2002111822120200

  Added files:
    ossp-pkg/titraq         titrex.cpp titrex.h

  Log:
    Use a titrex exception class for more flexible warning and error handling.

  Summary:
    Revision    Changes     Path
    1.1         +14 -0      ossp-pkg/titraq/titrex.cpp
    1.1         +21 -0      ossp-pkg/titraq/titrex.h
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/titrex.cpp
  ============================================================
  $ cvs update -p -r1.1 titrex.cpp
  #include "titrex.h"
  
  // Report general exception
  void Genexcept::reportErr(void)
  {
      // Basically, print the message and exit
      using namespace std;
      cout << szMessage << endl;
  }
  
  // Destroy general exception
  Genexcept::~Genexcept(void)
  {
  }
  Index: ossp-pkg/titraq/titrex.h
  ============================================================
  $ cvs update -p -r1.1 titrex.h
  #ifndef TITRAQEXCEPT_H
  #define TITRAQEXCEPT_H
  
  #include <iostream>
  
  
  // General string-based exceptions
  // FIXME: Rewrite according to
  // OSSP error handling policy
  class Genexcept
  {
  private:
      char *szMessage;
  
  public:
      Genexcept(char *szInmess) {szMessage = szInmess;};
      void reportErr(void);
      ~Genexcept(void);
  };
  
  #endif // TITRAQEXCEPT_H

From ossp-cvs-owner@ossp.org  Mon Nov 18 23:12:45 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5E3D476ADA; Mon, 18 Nov 2002 23:12:45 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq Makefile.in
Message-Id: <20021118221245.5E3D476ADA@mail.ossp.org>
Date: Mon, 18 Nov 2002 23:12:45 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   18-Nov-2002 23:12:45
  Branch: HEAD                             Handle: 2002111822124500

  Modified files:
    ossp-pkg/titraq         Makefile.in

  Log:
    Integrate exception handling logic into build configuration.

  Summary:
    Revision    Changes     Path
    1.7         +2  -2      ossp-pkg/titraq/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/Makefile.in
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 Makefile.in
  --- ossp-pkg/titraq/Makefile.in	13 Nov 2002 12:33:33 -0000	1.6
  +++ ossp-pkg/titraq/Makefile.in	18 Nov 2002 22:12:45 -0000	1.7
  @@ -65,9 +65,9 @@
   TARGET_PROGS    = titraq
   TARGET_MANS     = titraq.1 titraq.conf.5
   
  -SRCS            = main.cpp titraq.cpp generic.cpp titraq_version.c
  +SRCS            = main.cpp titraq.cpp titrex.cpp generic.cpp titraq_version.c
   
  -OBJS            = main.o titraq.o generic.o titraq_version.o
  +OBJS            = main.o titraq.o titrex.o generic.o titraq_version.o
   
   GRAFX           = gfx/ossplogo.xpm
   

From ossp-cvs-owner@ossp.org  Mon Nov 18 23:13:56 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8F48376A28; Mon, 18 Nov 2002 23:13:56 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq titraq.cpp titraq.h
Message-Id: <20021118221356.8F48376A28@mail.ossp.org>
Date: Mon, 18 Nov 2002 23:13:56 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   18-Nov-2002 23:13:56
  Branch: HEAD                             Handle: 2002111822135600

  Modified files:
    ossp-pkg/titraq         titraq.cpp titraq.h

  Log:
    Break the monolithic pig-constructor into smaller pigs.

  Summary:
    Revision    Changes     Path
    1.12        +361 -222   ossp-pkg/titraq/titraq.cpp
    1.9         +25 -5      ossp-pkg/titraq/titraq.h
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/titraq.cpp
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 titraq.cpp
  --- ossp-pkg/titraq/titraq.cpp	14 Nov 2002 22:26:30 -0000	1.11
  +++ ossp-pkg/titraq/titraq.cpp	18 Nov 2002 22:13:56 -0000	1.12
  @@ -1,4 +1,4 @@
  -// System interface
  +// Qt headers
   #include <qtooltip.h>
   #include <qwhatsthis.h>
   #include <qdatetimeedit.h>
  @@ -9,13 +9,19 @@
   #include <qfile.h>
   #include <qfiledialog.h>
   
  +// System headers
  +#include <iostream>
  +
   // User interface
  -#include "titraq.h"         // Main classes
  -#include "generic.h"        // Generic classes
  -#include "gfx/ossplogo.xpm" // OSSP logo: static const char *s_kpcOssplogo_xpm[]
  -#include "gfx/filenew.xpm"  // static const char *s_kpcFilenew_xpm[]
  -#include "gfx/fileopen.xpm" // static const char *s_kpcFileopen_xpm[]
  -#include "gfx/filesave.xpm" // static const char *s_kpcFilesave_xpm[]
  +#include "titraq.h"             // Main classes
  +#include "titrex.h"             // Exception classes
  +#include "generic.h"            // Generic classes
  +#include "gfx/ossplogo.xpm"     // static const char *s_kpcOssplogo_xpm[]
  +#include "gfx/qtlogo.xpm"       // static const char *s_kpcQtlogo_xpm[]
  +#include "gfx/filenew.xpm"      // static const char *s_kpcFilenew_xpm[]
  +#include "gfx/fileopen.xpm"     // static const char *s_kpcFileopen_xpm[]
  +#include "gfx/filesave.xpm"     // static const char *s_kpcFilesave_xpm[]
  +#include "gfx/whatsthis.xpm"    // static const char *s_kpcWhatsthis_xpm[]
   
   // Overload init for custom initialization of the app
   void Titraqform::init(void)
  @@ -36,33 +42,290 @@
   Titraqform::Titraqform(QWidget *pParent,  const char *kszName, WFlags Flags) :
       QMainWindow(pParent, kszName, Flags)
   {
  -//    // Abstract main widget building
  -//    setupMenubar();
  -//    setupFiletools();
  -//    setupStatusbar();
  -//    setupCentralwidget();
  +    // Early member initialization
  +    m_bDirt = false;
  +    m_szFilename = new QString();
  +
  +    // Initialize icon images
  +    m_pOsspicon = new QImage(s_kpcOssplogo_xpm);
  +    m_pQticon = new QImage(s_kpcQtlogo_xpm);
  +    m_pNewicon = new QImage(s_kpcFilenew_xpm);
  +    m_pOpenicon = new QImage(s_kpcFileopen_xpm);
  +    m_pSaveicon = new QImage(s_kpcFilesave_xpm);
  +    m_pWhatsicon = new QImage(s_kpcWhatsthis_xpm);
   
       // Initial widget manipulations
       if (!kszName)
           setName(trUtf8("Titraqform"));
       resize(600, 480);
  -    m_pMenubar = menuBar();     // Setup the menu bar
  -    m_pStatbar = statusBar();   // Setup the status bar
       setCaption("OSSP Titraq");
   
   //    // Lock down window size
   //    setSizePolicy(QSizePolicy((QSizePolicy::SizeType)0,
   //        (QSizePolicy::SizeType)0, 0, 0, sizePolicy().hasHeightForWidth()));
   
  -    // Early member initialization
  -    m_bDirt = false;
  -    m_szFilename = new QString();
  +    // Abstractly build main widgets
  +    try {
  +        setupActions();
  +        setupMenubar();
  +        setupFiletools();
  +        setupStatusbar();
  +        setupCentralwidget();
  +        setupTable();
  +        setupOutput();
  +        setupButtons();
  +    }
  +    catch (Genexcept& Genex) {
  +        Genex.reportErr();
  +        exit(1);
  +    }
  +
  +    init(); // Initialize signal and slot connections
  +    m_pStatbar->message(trUtf8("Ready"));   // Signal a ready condition
  +}
  +
  +//
  +// Add a blank row entry to the current data window
  +//
  +void Titraqform::addEntry(void)
  +{
  +    Prototype Unimp;
  +    Unimp.doMbox();
  +//    if (!pTable->text().isEmpty()) {
  +//        QTableRow *pRow = new QTableRow;
  +//        pRow->setText(0, NULL);
  +//        pRow->setText(1, NULL);
  +//        pRow->setText(2, NULL);
  +//        pRow->setText(3, NULL);
  +//    }
  +}
  +
  +//
  +// Choose a file using a handy file dialog
  +//
  +void Titraqform::delEntry(void)
  +{
  +    Prototype Unimp;
  +    Unimp.doMbox();
  +}
  +
  +//
  +// Write current data to a meta device
  +//
  +void Titraqform::writeEntry(void)
  +{
  +    Prototype Unimp;
  +    Unimp.doMbox();
  +}
  +
  +//
  +// Make and display a new document window
  +//
  +void Titraqform::newDoc(void)
  +{
  +    Prototype Unimp;
  +    Unimp.doMbox();
  +//    Titraqform *pNewform = new Titraqform;
  +//    pNewform->show();
  +}
  +
  +//
  +// Choose a file using a handy file dialog
  +//
  +void Titraqform::choose(void)
  +{
  +    QString Filestring = QFileDialog::getOpenFileName(QString::null, QString::null, this);
  +    if (!Filestring.isEmpty())
  +        load(Filestring);
  +    else
  +        m_pStatbar->message(trUtf8("Loading aborted"), 4000);
  +}
  +
  +//
  +// Load accounting data into main window
  +//
  +void Titraqform::load(const QString &Filestring)
  +{
  +    QFile Filetemp(Filestring);         // File to load
  +
  +    if (!Filetemp.open(IO_ReadOnly))    // Need a wrapped exception here
  +        return;
  +
  +    QTextStream Textstream(&Filetemp);  // Convert the file contents to a stream
  +    m_pStatus->setText(Textstream.read());
  +    m_pStatus->setEdited(false);
  +    setCaption(Filestring);
  +    m_pStatbar->message(trUtf8("Loaded document ") + Filestring, 4000);
  +}
  +
  +//
  +// Serialize current state to the current file
  +//
  +void Titraqform::save(void)
  +{
  +    // First time saves are really just saveAs in disguise
  +    if (m_szFilename->isEmpty()) {
  +        saveAs();
  +        return;
  +    }
  +
  +    // Try to read the status text, and write it to a file
  +    QString Statustext = m_pStatus->text();
  +    QFile Filetemp(*m_szFilename);
  +    if (!Filetemp.open(IO_WriteOnly)) {
  +        m_pStatbar->message(QString(trUtf8("Could not write to %1")).arg(*m_szFilename), 4000);
  +        return;
  +    }
  +
  +    // Serialize file contents and write to text line
  +    QTextStream Filestream(&Filetemp);
  +    Filestream << Statustext;
  +    Filetemp.close();
  +
  +    // Reset the text line, and give output to main window
  +    m_pStatus->setEdited(FALSE);
  +    setCaption(*m_szFilename);
  +    m_pStatbar->message(QString(trUtf8("File %1 saved")).arg(*m_szFilename), 4000);
  +    m_bDirt = false;    // Set the clean state to allow a close operation
  +}
  +
  +//
  +// Serialize current state to a selected file
  +//
  +void Titraqform::saveAs(void)
  +{
  +    // First get the selected file name to save to
  +    QString Filestring = QFileDialog::getSaveFileName(QString::null, QString::null, this);
  +    if (!Filestring.isEmpty()) {
  +        *m_szFilename = Filestring;
  +        m_pStatus->setText(*m_szFilename);
  +        save(); // Finish off by calling the save action
  +    }
  +    else {
  +        // User did not select a valid file and push okay button
  +        m_pStatbar->message(trUtf8("Saving aborted"), 4000);
  +    }
  +}
  +
  +//
  +// Close current document, displaying in main window
  +//
  +void Titraqform::closeEvent(QCloseEvent *pClosit)
  +{
  +    // Check modification state of current data
  +    if (!this->isDirty()) {
  +        pClosit->accept();
  +        return;
  +    }
  +
  +    // Ask user to acknowlege a possibly data-damaging close event
  +    switch(QMessageBox::information(this, "OSSP titraq",
  +        trUtf8("The document has been\nchanged since the last save.")),
  +        trUtf8("Save Now"), trUtf8("Cancel"), trUtf8("Leave Anyway"), 0, 1) {
  +    case 0:
  +        save();
  +        pClosit->accept();
  +        break;
  +    case 1:
  +        default:    // Just for sanity
  +        pClosit->ignore();
  +        break;
  +    case 2:
  +        pClosit->accept();
  +        break;
  +    }
  +}
  +
  +//
  +// Check to see if state has changed since last save
  +//
  +bool Titraqform::isDirty(void)
  +{
  +    return m_bDirt;
  +}
  +
  +//
  +// Learn more about this program itself
  +//
  +void Titraqform::about(void)
  +{
  +    QMessageBox::about(this, "OSSP titraq",
  +        trUtf8("OSSP titraq is a time and task-based\n"
  +               "accounting system that acts as both a\n"
  +               "nwork-like punch card and time tracker."));
  +}
  +
  +//
  +// Learn more about the OSSP
  +//
  +void Titraqform::aboutOSSP(void)
  +{
  +    QMessageBox::about(this, "OSSP",
  +        trUtf8("The open source software project (OSSP) is\n"
  +               "a collective effort aimed at implementing\n"
  +               "high-quality Unix software components,\n"
  +               "ranging from networking, multi-threading\n"
  +               "and algorithmic libraries to networking\n"
  +               "servers and development tools."));
  +}
  +
  +//
  +// Learn more about this program and Qt
  +//
  +void Titraqform::aboutQt(void)
  +{
  +    QMessageBox::aboutQt(this, "OSSP titraq");
  +}
  +
  +//
  +// Construct the menu bar
  +//
  +void Titraqform::setupMenubar(void)
  +{
  +    m_pMenubar = menuBar(); // Grab menu bar owned by QMainWindow
  +    if (m_pMenubar == NULL) // Sanity check
  +        throw Genexcept("Main window menu bar nonexistant.");
   
       // Make an easter egg ;-)
       QToolTip::add(m_pMenubar, QRect(0, 0, 2, 2), "Easter egg");
   
  +    // Construct and populate the file menu with actions
  +    QPopupMenu *pFilepopup = new QPopupMenu(this);
  +    if (pFilepopup == NULL) // Sanity check
  +        throw Genexcept("Main window file popup creation failed.");
  +    m_pMenubar->insertItem(trUtf8("&File"), pFilepopup);
  +    m_pFilenewact->addTo(pFilepopup);
  +    m_pFileopenact->addTo(pFilepopup);
  +    pFilepopup->insertSeparator();
  +    m_pFilecloseact->addTo(pFilepopup);
  +    pFilepopup->insertSeparator();
  +    m_pFilesaveact->addTo(pFilepopup);
  +    m_pFilesaveasact->addTo(pFilepopup);
  +    pFilepopup->insertSeparator();
  +    m_pFilequitact->addTo(pFilepopup);
  +
  +    // Construct and populate the help menu with subitems
  +    QPopupMenu *pHelppopup = new QPopupMenu(this);
  +    if (pHelppopup == NULL) // Sanity check
  +        throw Genexcept("Main window help popup creation failed.");
  +    m_pMenubar->insertItem(trUtf8("&Help"), pHelppopup);
  +    pHelppopup->insertItem(trUtf8("&About"), this, SLOT(about()), Key_F1);
  +    pHelppopup->insertSeparator();
  +    pHelppopup->insertItem(QPixmap(*m_pOsspicon), trUtf8("About &OSSP"), this, SLOT(aboutOSSP()));
  +    pHelppopup->insertItem(QPixmap(*m_pQticon), trUtf8("About &Qt"), this, SLOT(aboutQt()));
  +    pHelppopup->insertSeparator();
  +    pHelppopup->insertItem(QPixmap(*m_pWhatsicon), trUtf8("What's &This"), this, SLOT(whatsThis()), SHIFT+Key_F1);
  +}
  +
  +//
  +// Construct various actions
  +//
  +void Titraqform::setupActions(void)
  +{
       // File new action
       m_pFilenewact = new QAction(trUtf8("New File"), QPixmap(s_kpcFilenew_xpm), trUtf8("&New"), CTRL+Key_N, this, "New");
  +    if (m_pFilenewact == NULL) // Sanity check
  +        throw Genexcept("Main window file new action creation failed.");
       connect(m_pFilenewact, SIGNAL(activated()), this, SLOT(newDoc()));
       QMimeSourceFactory::defaultFactory()->setPixmap("filenew", m_pFilenewact->iconSet().pixmap());
       const char *kszFilenewtext = trUtf8("<p><img source=\"filenew\"> "
  @@ -73,6 +336,8 @@
   
       // File open action
       m_pFileopenact = new QAction(trUtf8("Open File"), QPixmap(s_kpcFileopen_xpm), trUtf8("&Open"), CTRL+Key_O, this, "Open");
  +    if (m_pFileopenact == NULL) // Sanity check
  +        throw Genexcept("Main window file open action creation failed.");
       connect(m_pFileopenact, SIGNAL(activated()), this, SLOT(choose()));
       QMimeSourceFactory::defaultFactory()->setPixmap("fileopen", m_pFileopenact->iconSet().pixmap());
       const char *kszFileopentext = trUtf8("<p><img source=\"fileopen\"> "
  @@ -83,6 +348,8 @@
   
       // File save current action
       m_pFilesaveact = new QAction(trUtf8("Save File"), QPixmap(s_kpcFilesave_xpm), trUtf8("&Save"), CTRL+Key_S, this, "Save");
  +    if (m_pFilesaveact == NULL) // Sanity check
  +        throw Genexcept("Main window file save action creation failed.");
       connect(m_pFilesaveact, SIGNAL(activated()), this, SLOT(save()));
       QMimeSourceFactory::defaultFactory()->setPixmap("filesave", m_pFilesaveact->iconSet().pixmap());
       const char *kszFilesavetext = trUtf8("<p><img source=\"filesave\"> "
  @@ -94,19 +361,27 @@
   
       // File save selected action
       m_pFilesaveasact = new QAction(trUtf8("Save File As"), trUtf8("Save &as"), 0, this, "SaveAs");
  +    if (m_pFilesaveasact == NULL) // Sanity check
  +        throw Genexcept("Main window file save as action creation failed.");
       connect(m_pFilesaveasact, SIGNAL(activated()), this, SLOT(saveAs()));
       m_pFilesaveasact->setWhatsThis(kszFilesavetext);
   
       // File close current action
       m_pFilecloseact = new QAction(trUtf8("Close"), trUtf8("&Close"), CTRL+Key_W, this, "Close");
  +    if (m_pFilecloseact == NULL) // Sanity check
  +        throw Genexcept("Main window file close action creation failed.");
       connect(m_pFilecloseact, SIGNAL(activated()), this, SLOT(close()));
   
       // File quit action
  -    m_pFilequitact = new QAction(trUtf8("Quit"), trUtf8("&Quit"), CTRL+Key_Q, this, "Quit");
  +    m_pFilequitact = new QAction(trUtf8("Exit"), trUtf8("&Exit"), CTRL+Key_Q, this, "Exit");
  +    if (m_pFilequitact == NULL) // Sanity check
  +        throw Genexcept("Main window file quit action creation failed.");
       connect(m_pFilequitact, SIGNAL(activated()), qApp, SLOT(quit()));
   
       // Add data row action
       m_pAddrowact = new QAction(trUtf8("Add Row"), QPixmap(s_kpcOssplogo_xpm), trUtf8("Add &row"), 0, this, "Addrow");
  +    if (m_pAddrowact == NULL) // Sanity check
  +        throw Genexcept("Main window add row action creation failed.");
       connect(m_pAddrowact, SIGNAL(activated()), this, SLOT(addEntry()));
       QMimeSourceFactory::defaultFactory()->setPixmap("ossplogo", m_pAddrowact->iconSet().pixmap());
       const char *kszAddrowtext = trUtf8("<p><img source=\"ossplogo\"> "
  @@ -117,6 +392,8 @@
   
       // Delete data row action
       m_pDeleterowact = new QAction(trUtf8("Add Row"), QPixmap(s_kpcOssplogo_xpm), trUtf8("Add &row"), 0, this, "Deleterow");
  +    if (m_pDeleterowact == NULL) // Sanity check
  +        throw Genexcept("Main window delete row action creation failed.");
       connect(m_pDeleterowact, SIGNAL(activated()), this, SLOT(delEntry()));
       QMimeSourceFactory::defaultFactory()->setPixmap("ossplogo", m_pDeleterowact->iconSet().pixmap());
       const char *kszDeleterowtext = trUtf8("<p><img source=\"ossplogo\"> "
  @@ -127,6 +404,8 @@
   
       // Write data action
       m_pWritedataact = new QAction(trUtf8("Add Row"), QPixmap(s_kpcOssplogo_xpm), trUtf8("Add &row"), 0, this, "Writedata");
  +    if (m_pWritedataact == NULL) // Sanity check
  +        throw Genexcept("Main window write data action creation failed.");
       connect(m_pWritedataact, SIGNAL(activated()), this, SLOT(writeEntry()));
       QMimeSourceFactory::defaultFactory()->setPixmap("ossplogo", m_pWritedataact->iconSet().pixmap());
       const char *kszWritedatatext = trUtf8("<p><img source=\"ossplogo\"> "
  @@ -134,51 +413,69 @@
                                      "You can also select the <b>Write data</b> command "
                                      "from the <b>Accounting</b> menu.</p>");
       m_pWritedataact->setWhatsThis(kszWritedatatext);
  +}
   
  -    // Construct and populate the file menu with actions
  -    QPopupMenu *pFilepopup = new QPopupMenu(this);
  -    m_pMenubar->insertItem(trUtf8("&File"), pFilepopup);
  -    m_pFilenewact->addTo(pFilepopup);
  -    m_pFileopenact->addTo(pFilepopup);
  -    m_pFilesaveact->addTo(pFilepopup);
  -    m_pFilesaveasact->addTo(pFilepopup);
  -    pFilepopup->insertSeparator();
  -    m_pFilecloseact->addTo(pFilepopup);
  -    m_pFilequitact->addTo(pFilepopup);
  -
  -    // Construct and populate the help menu with subitems
  -    QPopupMenu *pHelppopup = new QPopupMenu(this);
  -    m_pMenubar->insertItem(trUtf8("&Help"), pHelppopup);
  -    pHelppopup->insertItem(trUtf8("&About"), this, SLOT(about()), Key_F1);
  -    pHelppopup->insertItem(trUtf8("About &Qt"), this, SLOT(aboutQt()));
  -    pHelppopup->insertSeparator();
  -    pHelppopup->insertItem(trUtf8("What's &This"), this, SLOT(whatsThis()), SHIFT+Key_F1);
  -
  +//
  +// Construct the file tool bar
  +//
  +void Titraqform::setupFiletools(void)
  +{
       // Construct and populate the main tool bar
       m_pToolbar = new QToolBar("Toolfile", this, DockTop);
  +    if (m_pToolbar == NULL) // Sanity check
  +        throw Genexcept("Main window tool bar creation failed.");
       m_pToolbar->setLabel(trUtf8("File Ops"));
       m_pFilenewact->addTo(m_pToolbar);
       m_pFileopenact->addTo(m_pToolbar);
       m_pFilesaveact->addTo(m_pToolbar);
       QWhatsThis::whatsThisButton(m_pToolbar); // Preconfigured whats this button
  +}
   
  +//
  +// Construct the status bar
  +//
  +void Titraqform::setupStatusbar(void)
  +{
  +    m_pStatbar = statusBar();   // Grab status bar owned by QMainWindow
  +    if (m_pStatbar == NULL)     // Sanity check
  +        throw Genexcept("Main window status bar nonexistant.");
  +}
  +
  +//
  +// Construct the central widget
  +//
  +void Titraqform::setupCentralwidget(void)
  +{
       // Create a central frame and associated layout for QMainWindow
       m_pCenframe = new QFrame(this, "Centralframe");
  +    if (m_pCenframe == NULL)    // Sanity check
  +        throw Genexcept("Main window central frame creation failed.");
       m_pCenframe->setFrameShape(QFrame::StyledPanel);
       m_pCenframe->setFrameShadow(QFrame::Sunken);
       setCentralWidget(m_pCenframe);
   
  -    // Layout controls for toolbar, table, buttons, and status line
  +    // Layout controls for table, buttons, and status line
       m_pMainlayout = new QVBoxLayout(m_pCenframe, 10, 6, "Mainlayout");  // For layouts
       m_pPackagelayout = new QVBoxLayout(0, 0, 6, "Packagelayout");       // For table
       m_pControllayout = new QHBoxLayout(0, 0, 6, "Controllayout");       // For buttons
   
  +    if (!(m_pMainlayout && m_pMainlayout && m_pMainlayout))             // Sanity check
  +        throw Genexcept("Main window layout creation failed.");
  +
       // Specify ordering of the layouts
       m_pMainlayout->addLayout(m_pPackagelayout);
       m_pMainlayout->addLayout(m_pControllayout);
  +}
   
  +//
  +// Construct the table
  +//
  +void Titraqform::setupTable(void)
  +{
       // The table itself
       m_pMaintable = new QTable(m_pCenframe, "Maintable");
  +    if (m_pMaintable == NULL)   // Sanity check
  +        throw Genexcept("Main window table creation failed.");
       m_pMaintable->setNumRows(g_knRows);
       m_pMaintable->setNumCols(g_knCols);
       m_pMaintable->setReadOnly(false);                   // Not read only
  @@ -200,10 +497,9 @@
       m_pTablehead->setMovingEnabled(true);
   
       // Icon image items
  -    m_pIconimage = new QImage(s_kpcOssplogo_xpm);
  -    m_pIconpixmap = new QPixmap(m_pIconimage->scaleHeight(m_pMaintable->rowHeight(6)));
  +    QPixmap Osspminipix(QPixmap(m_pOsspicon->scaleHeight(m_pMaintable->rowHeight(6))));
       m_pMaintable->setItem(0, 0, new QTableItem(m_pMaintable, QTableItem::Never, "OSSP trac"));
  -    m_pMaintable->setPixmap(0, 0, *m_pIconpixmap);
  +    m_pMaintable->setPixmap(0, 0, Osspminipix);
   
   //    // Make a generic table item for all rows
   //    for (int i = 1; i < knRows; ++i)
  @@ -236,6 +532,8 @@
   
       // Populate the task stringlist
       m_pTaskentries = new QStringList;
  +    if (m_pTaskentries == NULL) // Sanity check
  +        throw Genexcept("Main window task entries creation failed.");
       *m_pTaskentries << trUtf8("titraq") << trUtf8("opgui") << trUtf8("email") << trUtf8("admin") << trUtf8("pmod") << trUtf8("psod") << trUtf8("meeting") << trUtf8("training");
   
       // Make the combobox items for all rows
  @@ -274,9 +572,17 @@
   //    }
   
       m_pPackagelayout->addWidget(m_pMaintable);  // Finally add the damn table
  +}
   
  +//
  +// Construct the bottom output line
  +//
  +void Titraqform::setupOutput(void)
  +{
       // Bottom output line
       m_pStatus = new QLineEdit(m_pCenframe, "Status");
  +    if (m_pStatus == NULL)   // Sanity check
  +        throw Genexcept("Main window status output creation failed.");
       m_pStatus->setText(trUtf8("Happy birthday to Ralf"));
       m_pStatus->setFrameShape(QLineEdit::LineEditPanel);
       m_pStatus->setFrameShadow(QLineEdit::Sunken);
  @@ -291,9 +597,17 @@
                                   " You can also change the data in place, or above "
                                   "from the <b>Accounting table</b>.");
       QWhatsThis::add(m_pStatus, kszStatouttext);
  +}
   
  +//
  +// Construct the buttons
  +//
  +void Titraqform::setupButtons(void)
  +{
       // Tuple push button add
       m_pAddbutton = new QPushButton(m_pCenframe, "AddButton");
  +    if (m_pAddbutton == NULL)   // Sanity check
  +        throw Genexcept("Main window add button creation failed.");
       m_pAddbutton->setCursor(QCursor(13));
       m_pAddbutton->setText(trUtf8("&Add"));
       QToolTip::add(m_pAddbutton, trUtf8("Add Entry"));
  @@ -302,6 +616,8 @@
   
       // Tuple push button delete
       m_pDeletebutton = new QPushButton(m_pCenframe, "Deletebutton");
  +    if (m_pDeletebutton == NULL)    // Sanity check
  +        throw Genexcept("Main window delete button creation failed.");
       m_pDeletebutton->setCursor(QCursor(13));
       m_pDeletebutton->setText(trUtf8("&Delete"));
       m_pDeletebutton->setFlat(false);
  @@ -311,6 +627,8 @@
   
       // Tuple push button write
       m_pWritebutton = new QPushButton(m_pCenframe, "Writebutton");
  +    if (m_pWritebutton == NULL) // Sanity check
  +        throw Genexcept("Main window write button creation failed.");
       m_pWritebutton->setCursor(QCursor(13));
       m_pWritebutton->setText(trUtf8("&Write"));
       QToolTip::add(m_pWritebutton, trUtf8("Write Entry"));
  @@ -319,6 +637,8 @@
   
       // Tuple push button quit
       m_pQuitbutton = new QPushButton(m_pCenframe, "Quitbutton");
  +    if (m_pQuitbutton == NULL)  // Sanity check
  +        throw Genexcept("Main window quit button creation failed.");
       m_pQuitbutton->setCursor(QCursor(13));
       m_pQuitbutton->setText(trUtf8("&Quit"));
       m_pQuitbutton->setFlat(false);
  @@ -326,187 +646,6 @@
       connect(m_pQuitbutton, SIGNAL(clicked()), qApp, SLOT(quit()));
       m_pControllayout->addWidget(m_pQuitbutton);
   
  -    init(); // Initialize signal and slot connections
  -    m_pStatbar->message(trUtf8("Ready"));   // Signal a ready condition
  -}
  -
  -//
  -// Add a blank row entry to the current data window
  -//
  -void Titraqform::addEntry(void)
  -{
  -    Prototype Unimp;
  -    Unimp.doMbox();
  -//    if (!pTable->text().isEmpty()) {
  -//        QTableRow *pRow = new QTableRow;
  -//        pRow->setText(0, NULL);
  -//        pRow->setText(1, NULL);
  -//        pRow->setText(2, NULL);
  -//        pRow->setText(3, NULL);
  -//    }
  -}
  -
  -//
  -// Choose a file using a handy file dialog
  -//
  -void Titraqform::delEntry(void)
  -{
  -    Prototype Unimp;
  -    Unimp.doMbox();
  -}
  -
  -//
  -// Write current data to a meta device
  -//
  -void Titraqform::writeEntry(void)
  -{
  -    Prototype Unimp;
  -    Unimp.doMbox();
  -}
  -
  -//
  -// Make and display a new document window
  -//
  -void Titraqform::newDoc(void)
  -{
  -    Prototype Unimp;
  -    Unimp.doMbox();
  -//    Titraqform *pNewform = new Titraqform;
  -//    pNewform->show();
  -}
  -
  -//
  -// Choose a file using a handy file dialog
  -//
  -void Titraqform::choose(void)
  -{
  -    QString Filestring = QFileDialog::getOpenFileName(QString::null, QString::null, this);
  -    if (!Filestring.isEmpty())
  -        load(Filestring);
  -    else
  -        m_pStatbar->message(trUtf8("Loading aborted"), 4000);
  -}
  -
  -//
  -// Load accounting data into main window
  -//
  -void Titraqform::load(const QString &Filestring)
  -{
  -    QFile Filetemp(Filestring);         // File to load
  -
  -    if (!Filetemp.open(IO_ReadOnly))    // Need a wrapped exception here
  -        return;
  -
  -    QTextStream Textstream(&Filetemp);  // Convert the file contents to a stream
  -    m_pStatus->setText(Textstream.read());
  -    m_pStatus->setEdited(false);
  -    setCaption(Filestring);
  -    m_pStatbar->message(trUtf8("Loaded document ") + Filestring, 4000);
  -}
  -
  -//
  -// Serialize current state to the current file
  -//
  -void Titraqform::save(void)
  -{
  -    // First time saves are really just saveAs in disguise
  -    if (m_szFilename->isEmpty()) {
  -        saveAs();
  -        return;
  -    }
  -
  -    // Try to read the status text, and write it to a file
  -    QString Statustext = m_pStatus->text();
  -    QFile Filetemp(*m_szFilename);
  -    if (!Filetemp.open(IO_WriteOnly)) {
  -        m_pStatbar->message(QString(trUtf8("Could not write to %1")).arg(*m_szFilename), 4000);
  -        return;
  -    }
  -
  -    // Serialize file contents and write to text line
  -    QTextStream Filestream(&Filetemp);
  -    Filestream << Statustext;
  -    Filetemp.close();
  -
  -    // Reset the text line, and give output to main window
  -    m_pStatus->setEdited(FALSE);
  -    setCaption(*m_szFilename);
  -    m_pStatbar->message(QString(trUtf8("File %1 saved")).arg(*m_szFilename), 4000);
  -    m_bDirt = false;    // Set the clean state to allow a close operation
  -}
  -
  -//
  -// Serialize current state to a selected file
  -//
  -void Titraqform::saveAs(void)
  -{
  -    // First get the selected file name to save to
  -    QString Filestring = QFileDialog::getSaveFileName(QString::null, QString::null, this);
  -    if (!Filestring.isEmpty()) {
  -        *m_szFilename = Filestring;
  -        m_pStatus->setText(*m_szFilename);
  -        save(); // Finish off by calling the save action
  -    }
  -    else {
  -        // User did not select a valid file and push okay button
  -        m_pStatbar->message(trUtf8("Saving aborted"), 4000);
  -    }
  -}
  -
  -//
  -// Close current document, displaying in main window
  -//
  -void Titraqform::closeEvent(QCloseEvent *pClosit)
  -{
  -    // Check modification state of current data
  -    if (!this->isDirty()) {
  -        pClosit->accept();
  -        return;
  -    }
  -
  -    // Ask user to acknowlege a possibly data-damaging close event
  -    switch(QMessageBox::information(this, "OSSP titraq",
  -        trUtf8("The document has been\nchanged since the last save.")),
  -        trUtf8("Save Now"), trUtf8("Cancel"), trUtf8("Leave Anyway"), 0, 1) {
  -    case 0:
  -        save();
  -        pClosit->accept();
  -        break;
  -    case 1:
  -        default:    // Just for sanity
  -        pClosit->ignore();
  -        break;
  -    case 2:
  -        pClosit->accept();
  -        break;
  -    }
  -}
  -
  -//
  -// Check to see if state has changed since last save
  -//
  -bool Titraqform::isDirty(void)
  -{
  -    return m_bDirt;
  -}
  -
  -//
  -// Learn more about this program itself
  -//
  -void Titraqform::about(void)
  -{
  -    QMessageBox::about(this, "OSSP titraq",
  -        trUtf8("OSSP titraq is a time and task-based\n"
  -               "accounting system that acts as both a\n"
  -               "nwork-like punch card and time tracker."));
  -}
  -
  -//
  -// Learn more about this program and Qt
  -//
  -void Titraqform::aboutQt(void)
  -{
  -    QMessageBox::aboutQt(this, "OSSP titraq");
   }
   
   //
  Index: ossp-pkg/titraq/titraq.h
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 titraq.h
  --- ossp-pkg/titraq/titraq.h	14 Nov 2002 22:26:30 -0000	1.8
  +++ ossp-pkg/titraq/titraq.h	18 Nov 2002 22:13:56 -0000	1.9
  @@ -13,6 +13,9 @@
   #include <qlineedit.h>
   #include <qlayout.h>
   
  +// Intentional no operation
  +#define TITRAQ_NOP ((void)0)
  +
   
   // Main table size
   const int g_knRows = 16;
  @@ -25,7 +28,7 @@
   
   public:
       Titraqform(QWidget *pParent = 0, const char *kszName = 0, WFlags Flags = 0);
  -    ~Titraqform();
  +    ~Titraqform(void);
   
       // Main application actions
       QAction     *m_pFilenewact,   *m_pFileopenact;
  @@ -37,10 +40,16 @@
       // Table, cells, and entries in package layout
       QTable      *m_pMaintable;
       QHeader     *m_pTablehead;
  -    QImage      *m_pIconimage;
  -    QPixmap     *m_pIconpixmap;
       QStringList *m_pTaskentries;
   
  +    // Reusable graphics
  +    QImage      *m_pOsspicon;
  +    QImage      *m_pQticon;
  +    QImage      *m_pNewicon;
  +    QImage      *m_pOpenicon;
  +    QImage      *m_pSaveicon;
  +    QImage      *m_pWhatsicon;
  +
       // Push buttons in control layout
       QPushButton *m_pAddbutton;
       QPushButton *m_pDeletebutton;
  @@ -61,7 +70,8 @@
       void save(void);                    // Serialize to the current file
       void saveAs(void);                  // Serialize to a selected file
       void about(void);                   // Learn more about this program itself
  -    void aboutQt(void);                 // Learn more about this program and Qt
  +    void aboutOSSP(void);               // Learn more about the OSSP
  +    void aboutQt(void);                 // Learn more about Qt
   
   protected:
       // Application main events
  @@ -74,7 +84,7 @@
       QHBoxLayout *m_pControllayout;      // Lower control buttons
   
   private:
  -    // Don't destroy these, they are owned by QMainWindow
  +    // Owned by QMainWindow
       QMenuBar    *m_pMenubar;
       QStatusBar  *m_pStatbar;
   
  @@ -87,6 +97,16 @@
   
       // Standard methods
       bool isDirty(void);                 // Check for changed state danger
  +
  +    // Constructor helpers
  +    void setupActions(void);            // Actions
  +    void setupMenubar(void);            // Menu bar
  +    void setupFiletools(void);          // Tool bar
  +    void setupStatusbar(void);          // Status bar
  +    void setupCentralwidget(void);      // Frame widget
  +    void setupTable(void);              // Table widget
  +    void setupOutput(void);             // Output widget
  +    void setupButtons(void);            // Push button widgets
   };
   
   #endif // TITRAQMWIN_H

From ossp-cvs-owner@ossp.org  Mon Nov 18 23:31:13 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 005E776A28; Mon, 18 Nov 2002 23:31:12 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq Makefile.in titassist.cpp titraq.cpp titra...
Message-Id: <20021118223112.005E776A28@mail.ossp.org>
Date: Mon, 18 Nov 2002 23:31:12 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   18-Nov-2002 23:31:12
  Branch: HEAD                             Handle: 2002111822311200

  Added files:
    ossp-pkg/titraq         titassist.cpp
  Modified files:
    ossp-pkg/titraq         Makefile.in titraq.cpp titraq.h

  Log:
    Move methods assiting in construction of the GUI to titassist.

  Summary:
    Revision    Changes     Path
    1.8         +2  -2      ossp-pkg/titraq/Makefile.in
    1.1         +408 -0     ossp-pkg/titraq/titassist.cpp
    1.13        +1  -395    ossp-pkg/titraq/titraq.cpp
    1.10        +1  -0      ossp-pkg/titraq/titraq.h
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/Makefile.in
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 Makefile.in
  --- ossp-pkg/titraq/Makefile.in	18 Nov 2002 22:12:45 -0000	1.7
  +++ ossp-pkg/titraq/Makefile.in	18 Nov 2002 22:31:12 -0000	1.8
  @@ -65,9 +65,9 @@
   TARGET_PROGS    = titraq
   TARGET_MANS     = titraq.1 titraq.conf.5
   
  -SRCS            = main.cpp titraq.cpp titrex.cpp generic.cpp titraq_version.c
  +SRCS            = main.cpp titraq.cpp titassist.cpp titrex.cpp generic.cpp titraq_version.c
   
  -OBJS            = main.o titraq.o titrex.o generic.o titraq_version.o
  +OBJS            = main.o titraq.o titassist.o titrex.o generic.o titraq_version.o
   
   GRAFX           = gfx/ossplogo.xpm
   
  Index: ossp-pkg/titraq/titassist.cpp
  ============================================================
  $ cvs update -p -r1.1 titassist.cpp
  // Qt headers
  #include <qtooltip.h>
  #include <qwhatsthis.h>
  #include <qdatetimeedit.h>
  #include <qspinbox.h>
  #include <qstringlist.h>
  #include <qcombobox.h>
  #include <qcursor.h>
  
  // User interface
  #include "titraq.h"
  #include "titrex.h"             // Exception classes
  #include "gfx/ossplogo.xpm"     // static const char *s_kpcOssplogo_xpm[]
  #include "gfx/qtlogo.xpm"       // static const char *s_kpcQtlogo_xpm[]
  #include "gfx/filenew.xpm"      // static const char *s_kpcFilenew_xpm[]
  #include "gfx/fileopen.xpm"     // static const char *s_kpcFileopen_xpm[]
  #include "gfx/filesave.xpm"     // static const char *s_kpcFilesave_xpm[]
  #include "gfx/whatsthis.xpm"    // static const char *s_kpcWhatsthis_xpm[]
  
  
  //
  // Construct the icon images
  //
  void Titraqform::setupIcons(void)
  {
      // Initialize icon images
      m_pOsspicon = new QImage(s_kpcOssplogo_xpm);
      m_pQticon = new QImage(s_kpcQtlogo_xpm);
      m_pNewicon = new QImage(s_kpcFilenew_xpm);
      m_pOpenicon = new QImage(s_kpcFileopen_xpm);
      m_pSaveicon = new QImage(s_kpcFilesave_xpm);
      m_pWhatsicon = new QImage(s_kpcWhatsthis_xpm);
  
      // Lets test out our sanity
      if (!(m_pOsspicon && m_pQticon && m_pNewicon && m_pNewicon && \
            m_pOpenicon && m_pSaveicon && m_pWhatsicon))
          throw Genexcept("Main window icon creation failed.");
  }
  
  //
  // Construct the menu bar
  //
  void Titraqform::setupMenubar(void)
  {
      m_pMenubar = menuBar(); // Grab menu bar owned by QMainWindow
      if (m_pMenubar == NULL) // Sanity check
          throw Genexcept("Main window menu bar nonexistant.");
  
      // Make an easter egg ;-)
      QToolTip::add(m_pMenubar, QRect(0, 0, 2, 2), "Easter egg");
  
      // Construct and populate the file menu with actions
      QPopupMenu *pFilepopup = new QPopupMenu(this);
      if (pFilepopup == NULL) // Sanity check
          throw Genexcept("Main window file popup creation failed.");
      m_pMenubar->insertItem(trUtf8("&File"), pFilepopup);
      m_pFilenewact->addTo(pFilepopup);
      m_pFileopenact->addTo(pFilepopup);
      pFilepopup->insertSeparator();
      m_pFilecloseact->addTo(pFilepopup);
      pFilepopup->insertSeparator();
      m_pFilesaveact->addTo(pFilepopup);
      m_pFilesaveasact->addTo(pFilepopup);
      pFilepopup->insertSeparator();
      m_pFilequitact->addTo(pFilepopup);
  
      // Construct and populate the help menu with subitems
      QPopupMenu *pHelppopup = new QPopupMenu(this);
      if (pHelppopup == NULL) // Sanity check
          throw Genexcept("Main window help popup creation failed.");
      m_pMenubar->insertItem(trUtf8("&Help"), pHelppopup);
      pHelppopup->insertItem(trUtf8("&About"), this, SLOT(about()), Key_F1);
      pHelppopup->insertSeparator();
      pHelppopup->insertItem(QPixmap(*m_pOsspicon), trUtf8("About &OSSP"), this, SLOT(aboutOSSP()));
      pHelppopup->insertItem(QPixmap(*m_pQticon), trUtf8("About &Qt"), this, SLOT(aboutQt()));
      pHelppopup->insertSeparator();
      pHelppopup->insertItem(QPixmap(*m_pWhatsicon), trUtf8("What's &This"), this, SLOT(whatsThis()), SHIFT+Key_F1);
  }
  
  //
  // Construct various actions
  //
  void Titraqform::setupActions(void)
  {
      // File new action
      m_pFilenewact = new QAction(trUtf8("New File"), QPixmap(s_kpcFilenew_xpm), trUtf8("&New"), CTRL+Key_N, this, "New");
      if (m_pFilenewact == NULL) // Sanity check
          throw Genexcept("Main window file new action creation failed.");
      connect(m_pFilenewact, SIGNAL(activated()), this, SLOT(newDoc()));
      QMimeSourceFactory::defaultFactory()->setPixmap("filenew", m_pFilenewact->iconSet().pixmap());
      const char *kszFilenewtext = trUtf8("<p><img source=\"filenew\"> "
                                   "Click this button to make a <em>blank file</em>."
                                   "You can also select the <b>New</b> command "
                                   "from the <b>File</b> menu.</p>");
      m_pFilenewact->setWhatsThis(kszFilenewtext);
  
      // File open action
      m_pFileopenact = new QAction(trUtf8("Open File"), QPixmap(s_kpcFileopen_xpm), trUtf8("&Open"), CTRL+Key_O, this, "Open");
      if (m_pFileopenact == NULL) // Sanity check
          throw Genexcept("Main window file open action creation failed.");
      connect(m_pFileopenact, SIGNAL(activated()), this, SLOT(choose()));
      QMimeSourceFactory::defaultFactory()->setPixmap("fileopen", m_pFileopenact->iconSet().pixmap());
      const char *kszFileopentext = trUtf8("<p><img source=\"fileopen\"> "
                                    "Click this button to open a <em>new file</em>."
                                    "You can also select the <b>Open</b> command "
                                    "from the <b>File</b> menu.</p>");
      m_pFileopenact->setWhatsThis(kszFileopentext);
  
      // File save current action
      m_pFilesaveact = new QAction(trUtf8("Save File"), QPixmap(s_kpcFilesave_xpm), trUtf8("&Save"), CTRL+Key_S, this, "Save");
      if (m_pFilesaveact == NULL) // Sanity check
          throw Genexcept("Main window file save action creation failed.");
      connect(m_pFilesaveact, SIGNAL(activated()), this, SLOT(save()));
      QMimeSourceFactory::defaultFactory()->setPixmap("filesave", m_pFilesaveact->iconSet().pixmap());
      const char *kszFilesavetext = trUtf8("<p><img source=\"filesave\"> "
                                    "Click this button to <em>save</em> the file you "
                                    "are editing. You will be prompted for a file name.\n"
                                    "You can also select the <b>Save</b> command "
                                    "from the <b>File</b> menu.</p>");
      m_pFilesaveact->setWhatsThis(kszFilesavetext);
  
      // File save selected action
      m_pFilesaveasact = new QAction(trUtf8("Save File As"), trUtf8("Save &as"), 0, this, "SaveAs");
      if (m_pFilesaveasact == NULL) // Sanity check
          throw Genexcept("Main window file save as action creation failed.");
      connect(m_pFilesaveasact, SIGNAL(activated()), this, SLOT(saveAs()));
      m_pFilesaveasact->setWhatsThis(kszFilesavetext);
  
      // File close current action
      m_pFilecloseact = new QAction(trUtf8("Close"), trUtf8("&Close"), CTRL+Key_W, this, "Close");
      if (m_pFilecloseact == NULL) // Sanity check
          throw Genexcept("Main window file close action creation failed.");
      connect(m_pFilecloseact, SIGNAL(activated()), this, SLOT(close()));
  
      // File quit action
      m_pFilequitact = new QAction(trUtf8("Exit"), trUtf8("&Exit"), CTRL+Key_Q, this, "Exit");
      if (m_pFilequitact == NULL) // Sanity check
          throw Genexcept("Main window file quit action creation failed.");
      connect(m_pFilequitact, SIGNAL(activated()), qApp, SLOT(quit()));
  
      // Add data row action
      m_pAddrowact = new QAction(trUtf8("Add Row"), QPixmap(s_kpcOssplogo_xpm), trUtf8("Add &row"), 0, this, "Addrow");
      if (m_pAddrowact == NULL) // Sanity check
          throw Genexcept("Main window add row action creation failed.");
      connect(m_pAddrowact, SIGNAL(activated()), this, SLOT(addEntry()));
      QMimeSourceFactory::defaultFactory()->setPixmap("ossplogo", m_pAddrowact->iconSet().pixmap());
      const char *kszAddrowtext = trUtf8("<p><img source=\"ossplogo\"> "
                                  "Click this button to add a <em>new row</em>."
                                  "You can also select the <b>Add row</b> command "
                                  "from the <b>Accounting</b> menu.</p>");
      m_pAddrowact->setWhatsThis(kszAddrowtext);
  
      // Delete data row action
      m_pDeleterowact = new QAction(trUtf8("Add Row"), QPixmap(s_kpcOssplogo_xpm), trUtf8("Add &row"), 0, this, "Deleterow");
      if (m_pDeleterowact == NULL) // Sanity check
          throw Genexcept("Main window delete row action creation failed.");
      connect(m_pDeleterowact, SIGNAL(activated()), this, SLOT(delEntry()));
      QMimeSourceFactory::defaultFactory()->setPixmap("ossplogo", m_pDeleterowact->iconSet().pixmap());
      const char *kszDeleterowtext = trUtf8("<p><img source=\"ossplogo\"> "
                                     "Click this button to delete a <em>row</em>."
                                     "You can also select the <b>Delete row</b> command "
                                     "from the <b>Accounting</b> menu.</p>");
      m_pDeleterowact->setWhatsThis(kszDeleterowtext);
  
      // Write data action
      m_pWritedataact = new QAction(trUtf8("Add Row"), QPixmap(s_kpcOssplogo_xpm), trUtf8("Add &row"), 0, this, "Writedata");
      if (m_pWritedataact == NULL) // Sanity check
          throw Genexcept("Main window write data action creation failed.");
      connect(m_pWritedataact, SIGNAL(activated()), this, SLOT(writeEntry()));
      QMimeSourceFactory::defaultFactory()->setPixmap("ossplogo", m_pWritedataact->iconSet().pixmap());
      const char *kszWritedatatext = trUtf8("<p><img source=\"ossplogo\"> "
                                     "Click this button to <em>write out</em> your accounting data."
                                     "You can also select the <b>Write data</b> command "
                                     "from the <b>Accounting</b> menu.</p>");
      m_pWritedataact->setWhatsThis(kszWritedatatext);
  }
  
  //
  // Construct the file tool bar
  //
  void Titraqform::setupFiletools(void)
  {
      // Construct and populate the main tool bar
      m_pToolbar = new QToolBar("Toolfile", this, DockTop);
      if (m_pToolbar == NULL) // Sanity check
          throw Genexcept("Main window tool bar creation failed.");
      m_pToolbar->setLabel(trUtf8("File Ops"));
      m_pFilenewact->addTo(m_pToolbar);
      m_pFileopenact->addTo(m_pToolbar);
      m_pFilesaveact->addTo(m_pToolbar);
      QWhatsThis::whatsThisButton(m_pToolbar); // Preconfigured whats this button
  }
  
  //
  // Construct the status bar
  //
  void Titraqform::setupStatusbar(void)
  {
      m_pStatbar = statusBar();   // Grab status bar owned by QMainWindow
      if (m_pStatbar == NULL)     // Sanity check
          throw Genexcept("Main window status bar nonexistant.");
  }
  
  //
  // Construct the central widget
  //
  void Titraqform::setupCentralwidget(void)
  {
      // Create a central frame and associated layout for QMainWindow
      m_pCenframe = new QFrame(this, "Centralframe");
      if (m_pCenframe == NULL)    // Sanity check
          throw Genexcept("Main window central frame creation failed.");
      m_pCenframe->setFrameShape(QFrame::StyledPanel);
      m_pCenframe->setFrameShadow(QFrame::Sunken);
      setCentralWidget(m_pCenframe);
  
      // Layout controls for table, buttons, and status line
      m_pMainlayout = new QVBoxLayout(m_pCenframe, 10, 6, "Mainlayout");  // For layouts
      m_pPackagelayout = new QVBoxLayout(0, 0, 6, "Packagelayout");       // For table
      m_pControllayout = new QHBoxLayout(0, 0, 6, "Controllayout");       // For buttons
  
      if (!(m_pMainlayout && m_pMainlayout && m_pMainlayout))             // Sanity check
          throw Genexcept("Main window layout creation failed.");
  
      // Specify ordering of the layouts
      m_pMainlayout->addLayout(m_pPackagelayout);
      m_pMainlayout->addLayout(m_pControllayout);
  }
  
  //
  // Construct the table
  //
  void Titraqform::setupTable(void)
  {
      // The table itself
      m_pMaintable = new QTable(m_pCenframe, "Maintable");
      if (m_pMaintable == NULL)   // Sanity check
          throw Genexcept("Main window table creation failed.");
      m_pMaintable->setNumRows(g_knRows);
      m_pMaintable->setNumCols(g_knCols);
      m_pMaintable->setReadOnly(false);                   // Not read only
      m_pMaintable->setColumnMovingEnabled(true);         // Ctrl-drag of headers
      m_pMaintable->setSelectionMode(QTable::MultiRow);   // Multi row selection
      m_pMaintable->setLeftMargin(0);             // Get rid of the vertical header
      m_pMaintable->verticalHeader()->hide();     // by hiding it with a margin of 0
      m_pMaintable->horizontalHeader()->setResizeEnabled(false);
      m_pMaintable->setColumnStretchable(5, true);
  
      // Table header row
      m_pTablehead = m_pMaintable->horizontalHeader();
      m_pTablehead->setLabel(0, QObject::trUtf8("Date"), 96);
      m_pTablehead->setLabel(1, QObject::trUtf8("Begin"), 80);
      m_pTablehead->setLabel(2, QObject::trUtf8("End"), 80);
      m_pTablehead->setLabel(3, QObject::trUtf8("Amount"), 52);
      m_pTablehead->setLabel(4, QObject::trUtf8("Task"), 70);
      m_pTablehead->setLabel(5, QObject::trUtf8("Remark"));
      m_pTablehead->setMovingEnabled(true);
  
      // Icon image items
      QPixmap Osspminipix(QPixmap(m_pOsspicon->scaleHeight(m_pMaintable->rowHeight(6))));
      m_pMaintable->setItem(0, 0, new QTableItem(m_pMaintable, QTableItem::Never, "OSSP trac"));
      m_pMaintable->setPixmap(0, 0, Osspminipix);
  
  //    // Make a generic table item for all rows
  //    for (int i = 1; i < knRows; ++i)
  //        m_pMaintable->setItem(i, 0, new QTableItem(m_pMaintable, QTableItem::Always, ("Enter")));
  
      // Make the date selector for all rows
      for (int i = 1; i < g_knRows; ++i) {
          QDate *pSylvestre = new QDate(2002, 12, 31);
          QDateEdit *pDateEdit = new QDateEdit(*pSylvestre, m_pMaintable, "Date");
          m_pMaintable->setCellWidget(i, 0, pDateEdit);
      }
  
      // Make the time start selector for all rows
      for (int i = 0; i < g_knRows; ++i) {
          QTimeEdit *pStart = new QTimeEdit(QTime::currentTime(), m_pMaintable, "Start");
          m_pMaintable->setCellWidget(i, 1, pStart);
      }
  
      // Make the time end selector for all rows
      for (int i = 0; i < g_knRows; ++i) {
          QTimeEdit *pEnd = new QTimeEdit(QTime::currentTime(), m_pMaintable, "End");
          m_pMaintable->setCellWidget(i, 2, pEnd);
      }
  
      // Make the amount selector for all rows
      for (int i = 0; i < g_knRows; ++i) {
          QSpinBox *pAmount = new QSpinBox(m_pMaintable, "Amount");
          m_pMaintable->setCellWidget(i, 3, pAmount);
      }
  
      // Populate the task stringlist
      m_pTaskentries = new QStringList;
      if (m_pTaskentries == NULL) // Sanity check
          throw Genexcept("Main window task entries creation failed.");
      *m_pTaskentries << trUtf8("titraq") << trUtf8("opgui") << trUtf8("email") << trUtf8("admin") << trUtf8("pmod") << trUtf8("psod") << trUtf8("meeting") << trUtf8("training");
  
      // Make the combobox items for all rows
      for (int i = 0; i < g_knRows; ++i) {
          QComboBox *pTasks = new QComboBox(true, m_pMaintable, "Tasks");
          pTasks->insertStringList(*m_pTaskentries);
          pTasks->setCurrentText(NULL);
          pTasks->setAutoCompletion(true);
          m_pMaintable->setCellWidget(i, 4, pTasks);
      }
  
  //    // Make the listbox for all rows
  //    for (int i = 0; i < knRows; ++i) {
  //        QListBox *pTasks = new QListBox(m_pMaintable, "Tasks");
  //        pTasks->insertStringList(*pTaskentries);
  //        pTasks->setCurrentItem(i % 8);
  //        m_pMaintable->setCellWidget(i, 4, pTasks);
  //    }
  
  //    // Populate a listbox for the task combobox
  //    QListBox *pListasks = new QListBox(m_pMaintable);
  //    pListasks->insertItem("titraq");
  //    pListasks->insertItem("opgui");
  //    pListasks->insertItem("email");
  //    pListasks->insertItem("admin");
  //    pListasks->insertItem("pmod");
  //    pListasks->insertItem("psod");
  //    pListasks->insertItem("meeting");
  //    pListasks->insertItem("training");
  
  //    // Make the combobox items for all rows
  //    for (int i = 0; i < knRows; ++i) {
  //        QComboTableItem *pTasks = new QComboTableItem(m_pMaintable, *m_pTaskentries, false);
  //        pTasks->setCurrentItem(i % 8);
  //        m_pMaintable->setItem(i, 4, pTasks);
  //    }
  
      m_pPackagelayout->addWidget(m_pMaintable);  // Finally add the damn table
  }
  
  //
  // Construct the bottom output line
  //
  void Titraqform::setupOutput(void)
  {
      // Bottom output line
      m_pStatus = new QLineEdit(m_pCenframe, "Status");
      if (m_pStatus == NULL)   // Sanity check
          throw Genexcept("Main window status output creation failed.");
      m_pStatus->setText(trUtf8("Happy birthday to Ralf"));
      m_pStatus->setFrameShape(QLineEdit::LineEditPanel);
      m_pStatus->setFrameShadow(QLineEdit::Sunken);
      m_pStatus->setFrame(true);
      m_pStatus->setReadOnly(true);
      QToolTip::add(m_pStatus, trUtf8("Status Line"));
      m_pPackagelayout->addWidget(m_pStatus);
  
      // Whatsthis info for the output line
      const char *kszStatouttext = trUtf8("<p><img source=\"ossplogo\"> "
                                  "This line shows the <em>current row</em> of your accounting data."
                                  " You can also change the data in place, or above "
                                  "from the <b>Accounting table</b>.");
      QWhatsThis::add(m_pStatus, kszStatouttext);
  }
  
  //
  // Construct the buttons
  //
  void Titraqform::setupButtons(void)
  {
      // Tuple push button add
      m_pAddbutton = new QPushButton(m_pCenframe, "AddButton");
      if (m_pAddbutton == NULL)   // Sanity check
          throw Genexcept("Main window add button creation failed.");
      m_pAddbutton->setCursor(QCursor(13));
      m_pAddbutton->setText(trUtf8("&Add"));
      QToolTip::add(m_pAddbutton, trUtf8("Add Entry"));
      connect(m_pAddbutton, SIGNAL(clicked()), this, SLOT(addEntry()));
      m_pControllayout->addWidget(m_pAddbutton);
  
      // Tuple push button delete
      m_pDeletebutton = new QPushButton(m_pCenframe, "Deletebutton");
      if (m_pDeletebutton == NULL)    // Sanity check
          throw Genexcept("Main window delete button creation failed.");
      m_pDeletebutton->setCursor(QCursor(13));
      m_pDeletebutton->setText(trUtf8("&Delete"));
      m_pDeletebutton->setFlat(false);
      QToolTip::add(m_pDeletebutton, trUtf8("Delete Entry"));
      connect(m_pDeletebutton, SIGNAL(clicked()), this, SLOT(delEntry()));
      m_pControllayout->addWidget(m_pDeletebutton);
  
      // Tuple push button write
      m_pWritebutton = new QPushButton(m_pCenframe, "Writebutton");
      if (m_pWritebutton == NULL) // Sanity check
          throw Genexcept("Main window write button creation failed.");
      m_pWritebutton->setCursor(QCursor(13));
      m_pWritebutton->setText(trUtf8("&Write"));
      QToolTip::add(m_pWritebutton, trUtf8("Write Entry"));
      connect(m_pWritebutton, SIGNAL(clicked()), this, SLOT(writeEntry()));
      m_pControllayout->addWidget(m_pWritebutton);
  
      // Tuple push button quit
      m_pQuitbutton = new QPushButton(m_pCenframe, "Quitbutton");
      if (m_pQuitbutton == NULL)  // Sanity check
          throw Genexcept("Main window quit button creation failed.");
      m_pQuitbutton->setCursor(QCursor(13));
      m_pQuitbutton->setText(trUtf8("&Quit"));
      m_pQuitbutton->setFlat(false);
      QToolTip::add(m_pQuitbutton, trUtf8("Quit titraq"));
      connect(m_pQuitbutton, SIGNAL(clicked()), qApp, SLOT(quit()));
      m_pControllayout->addWidget(m_pQuitbutton);
  }
  Index: ossp-pkg/titraq/titraq.cpp
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 titraq.cpp
  --- ossp-pkg/titraq/titraq.cpp	18 Nov 2002 22:13:56 -0000	1.12
  +++ ossp-pkg/titraq/titraq.cpp	18 Nov 2002 22:31:12 -0000	1.13
  @@ -1,27 +1,11 @@
   // Qt headers
  -#include <qtooltip.h>
  -#include <qwhatsthis.h>
  -#include <qdatetimeedit.h>
  -#include <qspinbox.h>
  -#include <qstringlist.h>
  -#include <qcombobox.h>
  -#include <qcursor.h>
   #include <qfile.h>
   #include <qfiledialog.h>
   
  -// System headers
  -#include <iostream>
  -
   // User interface
   #include "titraq.h"             // Main classes
   #include "titrex.h"             // Exception classes
   #include "generic.h"            // Generic classes
  -#include "gfx/ossplogo.xpm"     // static const char *s_kpcOssplogo_xpm[]
  -#include "gfx/qtlogo.xpm"       // static const char *s_kpcQtlogo_xpm[]
  -#include "gfx/filenew.xpm"      // static const char *s_kpcFilenew_xpm[]
  -#include "gfx/fileopen.xpm"     // static const char *s_kpcFileopen_xpm[]
  -#include "gfx/filesave.xpm"     // static const char *s_kpcFilesave_xpm[]
  -#include "gfx/whatsthis.xpm"    // static const char *s_kpcWhatsthis_xpm[]
   
   // Overload init for custom initialization of the app
   void Titraqform::init(void)
  @@ -46,14 +30,6 @@
       m_bDirt = false;
       m_szFilename = new QString();
   
  -    // Initialize icon images
  -    m_pOsspicon = new QImage(s_kpcOssplogo_xpm);
  -    m_pQticon = new QImage(s_kpcQtlogo_xpm);
  -    m_pNewicon = new QImage(s_kpcFilenew_xpm);
  -    m_pOpenicon = new QImage(s_kpcFileopen_xpm);
  -    m_pSaveicon = new QImage(s_kpcFilesave_xpm);
  -    m_pWhatsicon = new QImage(s_kpcWhatsthis_xpm);
  -
       // Initial widget manipulations
       if (!kszName)
           setName(trUtf8("Titraqform"));
  @@ -66,6 +42,7 @@
   
       // Abstractly build main widgets
       try {
  +        setupIcons();
           setupActions();
           setupMenubar();
           setupFiletools();
  @@ -275,377 +252,6 @@
   void Titraqform::aboutQt(void)
   {
       QMessageBox::aboutQt(this, "OSSP titraq");
  -}
  -
  -//
  -// Construct the menu bar
  -//
  -void Titraqform::setupMenubar(void)
  -{
  -    m_pMenubar = menuBar(); // Grab menu bar owned by QMainWindow
  -    if (m_pMenubar == NULL) // Sanity check
  -        throw Genexcept("Main window menu bar nonexistant.");
  -
  -    // Make an easter egg ;-)
  -    QToolTip::add(m_pMenubar, QRect(0, 0, 2, 2), "Easter egg");
  -
  -    // Construct and populate the file menu with actions
  -    QPopupMenu *pFilepopup = new QPopupMenu(this);
  -    if (pFilepopup == NULL) // Sanity check
  -        throw Genexcept("Main window file popup creation failed.");
  -    m_pMenubar->insertItem(trUtf8("&File"), pFilepopup);
  -    m_pFilenewact->addTo(pFilepopup);
  -    m_pFileopenact->addTo(pFilepopup);
  -    pFilepopup->insertSeparator();
  -    m_pFilecloseact->addTo(pFilepopup);
  -    pFilepopup->insertSeparator();
  -    m_pFilesaveact->addTo(pFilepopup);
  -    m_pFilesaveasact->addTo(pFilepopup);
  -    pFilepopup->insertSeparator();
  -    m_pFilequitact->addTo(pFilepopup);
  -
  -    // Construct and populate the help menu with subitems
  -    QPopupMenu *pHelppopup = new QPopupMenu(this);
  -    if (pHelppopup == NULL) // Sanity check
  -        throw Genexcept("Main window help popup creation failed.");
  -    m_pMenubar->insertItem(trUtf8("&Help"), pHelppopup);
  -    pHelppopup->insertItem(trUtf8("&About"), this, SLOT(about()), Key_F1);
  -    pHelppopup->insertSeparator();
  -    pHelppopup->insertItem(QPixmap(*m_pOsspicon), trUtf8("About &OSSP"), this, SLOT(aboutOSSP()));
  -    pHelppopup->insertItem(QPixmap(*m_pQticon), trUtf8("About &Qt"), this, SLOT(aboutQt()));
  -    pHelppopup->insertSeparator();
  -    pHelppopup->insertItem(QPixmap(*m_pWhatsicon), trUtf8("What's &This"), this, SLOT(whatsThis()), SHIFT+Key_F1);
  -}
  -
  -//
  -// Construct various actions
  -//
  -void Titraqform::setupActions(void)
  -{
  -    // File new action
  -    m_pFilenewact = new QAction(trUtf8("New File"), QPixmap(s_kpcFilenew_xpm), trUtf8("&New"), CTRL+Key_N, this, "New");
  -    if (m_pFilenewact == NULL) // Sanity check
  -        throw Genexcept("Main window file new action creation failed.");
  -    connect(m_pFilenewact, SIGNAL(activated()), this, SLOT(newDoc()));
  -    QMimeSourceFactory::defaultFactory()->setPixmap("filenew", m_pFilenewact->iconSet().pixmap());
  -    const char *kszFilenewtext = trUtf8("<p><img source=\"filenew\"> "
  -                                 "Click this button to make a <em>blank file</em>."
  -                                 "You can also select the <b>New</b> command "
  -                                 "from the <b>File</b> menu.</p>");
  -    m_pFilenewact->setWhatsThis(kszFilenewtext);
  -
  -    // File open action
  -    m_pFileopenact = new QAction(trUtf8("Open File"), QPixmap(s_kpcFileopen_xpm), trUtf8("&Open"), CTRL+Key_O, this, "Open");
  -    if (m_pFileopenact == NULL) // Sanity check
  -        throw Genexcept("Main window file open action creation failed.");
  -    connect(m_pFileopenact, SIGNAL(activated()), this, SLOT(choose()));
  -    QMimeSourceFactory::defaultFactory()->setPixmap("fileopen", m_pFileopenact->iconSet().pixmap());
  -    const char *kszFileopentext = trUtf8("<p><img source=\"fileopen\"> "
  -                                  "Click this button to open a <em>new file</em>."
  -                                  "You can also select the <b>Open</b> command "
  -                                  "from the <b>File</b> menu.</p>");
  -    m_pFileopenact->setWhatsThis(kszFileopentext);
  -
  -    // File save current action
  -    m_pFilesaveact = new QAction(trUtf8("Save File"), QPixmap(s_kpcFilesave_xpm), trUtf8("&Save"), CTRL+Key_S, this, "Save");
  -    if (m_pFilesaveact == NULL) // Sanity check
  -        throw Genexcept("Main window file save action creation failed.");
  -    connect(m_pFilesaveact, SIGNAL(activated()), this, SLOT(save()));
  -    QMimeSourceFactory::defaultFactory()->setPixmap("filesave", m_pFilesaveact->iconSet().pixmap());
  -    const char *kszFilesavetext = trUtf8("<p><img source=\"filesave\"> "
  -                                  "Click this button to <em>save</em> the file you "
  -                                  "are editing. You will be prompted for a file name.\n"
  -                                  "You can also select the <b>Save</b> command "
  -                                  "from the <b>File</b> menu.</p>");
  -    m_pFilesaveact->setWhatsThis(kszFilesavetext);
  -
  -    // File save selected action
  -    m_pFilesaveasact = new QAction(trUtf8("Save File As"), trUtf8("Save &as"), 0, this, "SaveAs");
  -    if (m_pFilesaveasact == NULL) // Sanity check
  -        throw Genexcept("Main window file save as action creation failed.");
  -    connect(m_pFilesaveasact, SIGNAL(activated()), this, SLOT(saveAs()));
  -    m_pFilesaveasact->setWhatsThis(kszFilesavetext);
  -
  -    // File close current action
  -    m_pFilecloseact = new QAction(trUtf8("Close"), trUtf8("&Close"), CTRL+Key_W, this, "Close");
  -    if (m_pFilecloseact == NULL) // Sanity check
  -        throw Genexcept("Main window file close action creation failed.");
  -    connect(m_pFilecloseact, SIGNAL(activated()), this, SLOT(close()));
  -
  -    // File quit action
  -    m_pFilequitact = new QAction(trUtf8("Exit"), trUtf8("&Exit"), CTRL+Key_Q, this, "Exit");
  -    if (m_pFilequitact == NULL) // Sanity check
  -        throw Genexcept("Main window file quit action creation failed.");
  -    connect(m_pFilequitact, SIGNAL(activated()), qApp, SLOT(quit()));
  -
  -    // Add data row action
  -    m_pAddrowact = new QAction(trUtf8("Add Row"), QPixmap(s_kpcOssplogo_xpm), trUtf8("Add &row"), 0, this, "Addrow");
  -    if (m_pAddrowact == NULL) // Sanity check
  -        throw Genexcept("Main window add row action creation failed.");
  -    connect(m_pAddrowact, SIGNAL(activated()), this, SLOT(addEntry()));
  -    QMimeSourceFactory::defaultFactory()->setPixmap("ossplogo", m_pAddrowact->iconSet().pixmap());
  -    const char *kszAddrowtext = trUtf8("<p><img source=\"ossplogo\"> "
  -                                "Click this button to add a <em>new row</em>."
  -                                "You can also select the <b>Add row</b> command "
  -                                "from the <b>Accounting</b> menu.</p>");
  -    m_pAddrowact->setWhatsThis(kszAddrowtext);
  -
  -    // Delete data row action
  -    m_pDeleterowact = new QAction(trUtf8("Add Row"), QPixmap(s_kpcOssplogo_xpm), trUtf8("Add &row"), 0, this, "Deleterow");
  -    if (m_pDeleterowact == NULL) // Sanity check
  -        throw Genexcept("Main window delete row action creation failed.");
  -    connect(m_pDeleterowact, SIGNAL(activated()), this, SLOT(delEntry()));
  -    QMimeSourceFactory::defaultFactory()->setPixmap("ossplogo", m_pDeleterowact->iconSet().pixmap());
  -    const char *kszDeleterowtext = trUtf8("<p><img source=\"ossplogo\"> "
  -                                   "Click this button to delete a <em>row</em>."
  -                                   "You can also select the <b>Delete row</b> command "
  -                                   "from the <b>Accounting</b> menu.</p>");
  -    m_pDeleterowact->setWhatsThis(kszDeleterowtext);
  -
  -    // Write data action
  -    m_pWritedataact = new QAction(trUtf8("Add Row"), QPixmap(s_kpcOssplogo_xpm), trUtf8("Add &row"), 0, this, "Writedata");
  -    if (m_pWritedataact == NULL) // Sanity check
  -        throw Genexcept("Main window write data action creation failed.");
  -    connect(m_pWritedataact, SIGNAL(activated()), this, SLOT(writeEntry()));
  -    QMimeSourceFactory::defaultFactory()->setPixmap("ossplogo", m_pWritedataact->iconSet().pixmap());
  -    const char *kszWritedatatext = trUtf8("<p><img source=\"ossplogo\"> "
  -                                   "Click this button to <em>write out</em> your accounting data."
  -                                   "You can also select the <b>Write data</b> command "
  -                                   "from the <b>Accounting</b> menu.</p>");
  -    m_pWritedataact->setWhatsThis(kszWritedatatext);
  -}
  -
  -//
  -// Construct the file tool bar
  -//
  -void Titraqform::setupFiletools(void)
  -{
  -    // Construct and populate the main tool bar
  -    m_pToolbar = new QToolBar("Toolfile", this, DockTop);
  -    if (m_pToolbar == NULL) // Sanity check
  -        throw Genexcept("Main window tool bar creation failed.");
  -    m_pToolbar->setLabel(trUtf8("File Ops"));
  -    m_pFilenewact->addTo(m_pToolbar);
  -    m_pFileopenact->addTo(m_pToolbar);
  -    m_pFilesaveact->addTo(m_pToolbar);
  -    QWhatsThis::whatsThisButton(m_pToolbar); // Preconfigured whats this button
  -}
  -
  -//
  -// Construct the status bar
  -//
  -void Titraqform::setupStatusbar(void)
  -{
  -    m_pStatbar = statusBar();   // Grab status bar owned by QMainWindow
  -    if (m_pStatbar == NULL)     // Sanity check
  -        throw Genexcept("Main window status bar nonexistant.");
  -}
  -
  -//
  -// Construct the central widget
  -//
  -void Titraqform::setupCentralwidget(void)
  -{
  -    // Create a central frame and associated layout for QMainWindow
  -    m_pCenframe = new QFrame(this, "Centralframe");
  -    if (m_pCenframe == NULL)    // Sanity check
  -        throw Genexcept("Main window central frame creation failed.");
  -    m_pCenframe->setFrameShape(QFrame::StyledPanel);
  -    m_pCenframe->setFrameShadow(QFrame::Sunken);
  -    setCentralWidget(m_pCenframe);
  -
  -    // Layout controls for table, buttons, and status line
  -    m_pMainlayout = new QVBoxLayout(m_pCenframe, 10, 6, "Mainlayout");  // For layouts
  -    m_pPackagelayout = new QVBoxLayout(0, 0, 6, "Packagelayout");       // For table
  -    m_pControllayout = new QHBoxLayout(0, 0, 6, "Controllayout");       // For buttons
  -
  -    if (!(m_pMainlayout && m_pMainlayout && m_pMainlayout))             // Sanity check
  -        throw Genexcept("Main window layout creation failed.");
  -
  -    // Specify ordering of the layouts
  -    m_pMainlayout->addLayout(m_pPackagelayout);
  -    m_pMainlayout->addLayout(m_pControllayout);
  -}
  -
  -//
  -// Construct the table
  -//
  -void Titraqform::setupTable(void)
  -{
  -    // The table itself
  -    m_pMaintable = new QTable(m_pCenframe, "Maintable");
  -    if (m_pMaintable == NULL)   // Sanity check
  -        throw Genexcept("Main window table creation failed.");
  -    m_pMaintable->setNumRows(g_knRows);
  -    m_pMaintable->setNumCols(g_knCols);
  -    m_pMaintable->setReadOnly(false);                   // Not read only
  -    m_pMaintable->setColumnMovingEnabled(true);         // Ctrl-drag of headers
  -    m_pMaintable->setSelectionMode(QTable::MultiRow);   // Multi row selection
  -    m_pMaintable->setLeftMargin(0);             // Get rid of the vertical header
  -    m_pMaintable->verticalHeader()->hide();     // by hiding it with a margin of 0
  -    m_pMaintable->horizontalHeader()->setResizeEnabled(false);
  -    m_pMaintable->setColumnStretchable(5, true);
  -
  -    // Table header row
  -    m_pTablehead = m_pMaintable->horizontalHeader();
  -    m_pTablehead->setLabel(0, QObject::trUtf8("Date"), 96);
  -    m_pTablehead->setLabel(1, QObject::trUtf8("Begin"), 80);
  -    m_pTablehead->setLabel(2, QObject::trUtf8("End"), 80);
  -    m_pTablehead->setLabel(3, QObject::trUtf8("Amount"), 52);
  -    m_pTablehead->setLabel(4, QObject::trUtf8("Task"), 70);
  -    m_pTablehead->setLabel(5, QObject::trUtf8("Remark"));
  -    m_pTablehead->setMovingEnabled(true);
  -
  -    // Icon image items
  -    QPixmap Osspminipix(QPixmap(m_pOsspicon->scaleHeight(m_pMaintable->rowHeight(6))));
  -    m_pMaintable->setItem(0, 0, new QTableItem(m_pMaintable, QTableItem::Never, "OSSP trac"));
  -    m_pMaintable->setPixmap(0, 0, Osspminipix);
  -
  -//    // Make a generic table item for all rows
  -//    for (int i = 1; i < knRows; ++i)
  -//        m_pMaintable->setItem(i, 0, new QTableItem(m_pMaintable, QTableItem::Always, ("Enter")));
  -
  -    // Make the date selector for all rows
  -    for (int i = 1; i < g_knRows; ++i) {
  -        QDate *pSylvestre = new QDate(2002, 12, 31);
  -        QDateEdit *pDateEdit = new QDateEdit(*pSylvestre, m_pMaintable, "Date");
  -        m_pMaintable->setCellWidget(i, 0, pDateEdit);
  -    }
  -
  -    // Make the time start selector for all rows
  -    for (int i = 0; i < g_knRows; ++i) {
  -        QTimeEdit *pStart = new QTimeEdit(QTime::currentTime(), m_pMaintable, "Start");
  -        m_pMaintable->setCellWidget(i, 1, pStart);
  -    }
  -
  -    // Make the time end selector for all rows
  -    for (int i = 0; i < g_knRows; ++i) {
  -        QTimeEdit *pEnd = new QTimeEdit(QTime::currentTime(), m_pMaintable, "End");
  -        m_pMaintable->setCellWidget(i, 2, pEnd);
  -    }
  -
  -    // Make the amount selector for all rows
  -    for (int i = 0; i < g_knRows; ++i) {
  -        QSpinBox *pAmount = new QSpinBox(m_pMaintable, "Amount");
  -        m_pMaintable->setCellWidget(i, 3, pAmount);
  -    }
  -
  -    // Populate the task stringlist
  -    m_pTaskentries = new QStringList;
  -    if (m_pTaskentries == NULL) // Sanity check
  -        throw Genexcept("Main window task entries creation failed.");
  -    *m_pTaskentries << trUtf8("titraq") << trUtf8("opgui") << trUtf8("email") << trUtf8("admin") << trUtf8("pmod") << trUtf8("psod") << trUtf8("meeting") << trUtf8("training");
  -
  -    // Make the combobox items for all rows
  -    for (int i = 0; i < g_knRows; ++i) {
  -        QComboBox *pTasks = new QComboBox(true, m_pMaintable, "Tasks");
  -        pTasks->insertStringList(*m_pTaskentries);
  -        pTasks->setCurrentText(NULL);
  -        pTasks->setAutoCompletion(true);
  -        m_pMaintable->setCellWidget(i, 4, pTasks);
  -    }
  -
  -//    // Make the listbox for all rows
  -//    for (int i = 0; i < knRows; ++i) {
  -//        QListBox *pTasks = new QListBox(m_pMaintable, "Tasks");
  -//        pTasks->insertStringList(*pTaskentries);
  -//        pTasks->setCurrentItem(i % 8);
  -//        m_pMaintable->setCellWidget(i, 4, pTasks);
  -//    }
  -
  -//    // Populate a listbox for the task combobox
  -//    QListBox *pListasks = new QListBox(m_pMaintable);
  -//    pListasks->insertItem("titraq");
  -//    pListasks->insertItem("opgui");
  -//    pListasks->insertItem("email");
  -//    pListasks->insertItem("admin");
  -//    pListasks->insertItem("pmod");
  -//    pListasks->insertItem("psod");
  -//    pListasks->insertItem("meeting");
  -//    pListasks->insertItem("training");
  -
  -//    // Make the combobox items for all rows
  -//    for (int i = 0; i < knRows; ++i) {
  -//        QComboTableItem *pTasks = new QComboTableItem(m_pMaintable, *m_pTaskentries, false);
  -//        pTasks->setCurrentItem(i % 8);
  -//        m_pMaintable->setItem(i, 4, pTasks);
  -//    }
  -
  -    m_pPackagelayout->addWidget(m_pMaintable);  // Finally add the damn table
  -}
  -
  -//
  -// Construct the bottom output line
  -//
  -void Titraqform::setupOutput(void)
  -{
  -    // Bottom output line
  -    m_pStatus = new QLineEdit(m_pCenframe, "Status");
  -    if (m_pStatus == NULL)   // Sanity check
  -        throw Genexcept("Main window status output creation failed.");
  -    m_pStatus->setText(trUtf8("Happy birthday to Ralf"));
  -    m_pStatus->setFrameShape(QLineEdit::LineEditPanel);
  -    m_pStatus->setFrameShadow(QLineEdit::Sunken);
  -    m_pStatus->setFrame(true);
  -    m_pStatus->setReadOnly(true);
  -    QToolTip::add(m_pStatus, trUtf8("Status Line"));
  -    m_pPackagelayout->addWidget(m_pStatus);
  -
  -    // Whatsthis info for the output line
  -    const char *kszStatouttext = trUtf8("<p><img source=\"ossplogo\"> "
  -                                "This line shows the <em>current row</em> of your accounting data."
  -                                " You can also change the data in place, or above "
  -                                "from the <b>Accounting table</b>.");
  -    QWhatsThis::add(m_pStatus, kszStatouttext);
  -}
  -
  -//
  -// Construct the buttons
  -//
  -void Titraqform::setupButtons(void)
  -{
  -    // Tuple push button add
  -    m_pAddbutton = new QPushButton(m_pCenframe, "AddButton");
  -    if (m_pAddbutton == NULL)   // Sanity check
  -        throw Genexcept("Main window add button creation failed.");
  -    m_pAddbutton->setCursor(QCursor(13));
  -    m_pAddbutton->setText(trUtf8("&Add"));
  -    QToolTip::add(m_pAddbutton, trUtf8("Add Entry"));
  -    connect(m_pAddbutton, SIGNAL(clicked()), this, SLOT(addEntry()));
  -    m_pControllayout->addWidget(m_pAddbutton);
  -
  -    // Tuple push button delete
  -    m_pDeletebutton = new QPushButton(m_pCenframe, "Deletebutton");
  -    if (m_pDeletebutton == NULL)    // Sanity check
  -        throw Genexcept("Main window delete button creation failed.");
  -    m_pDeletebutton->setCursor(QCursor(13));
  -    m_pDeletebutton->setText(trUtf8("&Delete"));
  -    m_pDeletebutton->setFlat(false);
  -    QToolTip::add(m_pDeletebutton, trUtf8("Delete Entry"));
  -    connect(m_pDeletebutton, SIGNAL(clicked()), this, SLOT(delEntry()));
  -    m_pControllayout->addWidget(m_pDeletebutton);
  -
  -    // Tuple push button write
  -    m_pWritebutton = new QPushButton(m_pCenframe, "Writebutton");
  -    if (m_pWritebutton == NULL) // Sanity check
  -        throw Genexcept("Main window write button creation failed.");
  -    m_pWritebutton->setCursor(QCursor(13));
  -    m_pWritebutton->setText(trUtf8("&Write"));
  -    QToolTip::add(m_pWritebutton, trUtf8("Write Entry"));
  -    connect(m_pWritebutton, SIGNAL(clicked()), this, SLOT(writeEntry()));
  -    m_pControllayout->addWidget(m_pWritebutton);
  -
  -    // Tuple push button quit
  -    m_pQuitbutton = new QPushButton(m_pCenframe, "Quitbutton");
  -    if (m_pQuitbutton == NULL)  // Sanity check
  -        throw Genexcept("Main window quit button creation failed.");
  -    m_pQuitbutton->setCursor(QCursor(13));
  -    m_pQuitbutton->setText(trUtf8("&Quit"));
  -    m_pQuitbutton->setFlat(false);
  -    QToolTip::add(m_pQuitbutton, trUtf8("Quit titraq"));
  -    connect(m_pQuitbutton, SIGNAL(clicked()), qApp, SLOT(quit()));
  -    m_pControllayout->addWidget(m_pQuitbutton);
  -
   }
   
   //
  Index: ossp-pkg/titraq/titraq.h
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 titraq.h
  --- ossp-pkg/titraq/titraq.h	18 Nov 2002 22:13:56 -0000	1.9
  +++ ossp-pkg/titraq/titraq.h	18 Nov 2002 22:31:12 -0000	1.10
  @@ -99,6 +99,7 @@
       bool isDirty(void);                 // Check for changed state danger
   
       // Constructor helpers
  +    void setupIcons(void);              // Icons
       void setupActions(void);            // Actions
       void setupMenubar(void);            // Menu bar
       void setupFiletools(void);          // Tool bar

From ossp-cvs-owner@ossp.org  Mon Nov 18 23:38:05 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 59AF176A28; Mon, 18 Nov 2002 23:38:05 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq Makefile.in titraq.cpp titslot.cpp
Message-Id: <20021118223805.59AF176A28@mail.ossp.org>
Date: Mon, 18 Nov 2002 23:38:05 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   18-Nov-2002 23:38:05
  Branch: HEAD                             Handle: 2002111822380400

  Added files:
    ossp-pkg/titraq         titslot.cpp
  Modified files:
    ossp-pkg/titraq         Makefile.in titraq.cpp

  Log:
    Move slot logic to its own file, making the pig widget even slimmer.

  Summary:
    Revision    Changes     Path
    1.9         +2  -2      ossp-pkg/titraq/Makefile.in
    1.14        +1  -198    ossp-pkg/titraq/titraq.cpp
    1.1         +201 -0     ossp-pkg/titraq/titslot.cpp
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/Makefile.in
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 Makefile.in
  --- ossp-pkg/titraq/Makefile.in	18 Nov 2002 22:31:12 -0000	1.8
  +++ ossp-pkg/titraq/Makefile.in	18 Nov 2002 22:38:04 -0000	1.9
  @@ -65,9 +65,9 @@
   TARGET_PROGS    = titraq
   TARGET_MANS     = titraq.1 titraq.conf.5
   
  -SRCS            = main.cpp titraq.cpp titassist.cpp titrex.cpp generic.cpp titraq_version.c
  +SRCS            = main.cpp titraq.cpp titassist.cpp titslot.cpp titrex.cpp generic.cpp titraq_version.c
   
  -OBJS            = main.o titraq.o titassist.o titrex.o generic.o titraq_version.o
  +OBJS            = main.o titraq.o titassist.o titslot.o titrex.o generic.o titraq_version.o
   
   GRAFX           = gfx/ossplogo.xpm
   
  Index: ossp-pkg/titraq/titraq.cpp
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 titraq.cpp
  --- ossp-pkg/titraq/titraq.cpp	18 Nov 2002 22:31:12 -0000	1.13
  +++ ossp-pkg/titraq/titraq.cpp	18 Nov 2002 22:38:04 -0000	1.14
  @@ -1,11 +1,7 @@
  -// Qt headers
  -#include <qfile.h>
  -#include <qfiledialog.h>
  -
   // User interface
   #include "titraq.h"             // Main classes
   #include "titrex.h"             // Exception classes
  -#include "generic.h"            // Generic classes
  +
   
   // Overload init for custom initialization of the app
   void Titraqform::init(void)
  @@ -59,199 +55,6 @@
   
       init(); // Initialize signal and slot connections
       m_pStatbar->message(trUtf8("Ready"));   // Signal a ready condition
  -}
  -
  -//
  -// Add a blank row entry to the current data window
  -//
  -void Titraqform::addEntry(void)
  -{
  -    Prototype Unimp;
  -    Unimp.doMbox();
  -//    if (!pTable->text().isEmpty()) {
  -//        QTableRow *pRow = new QTableRow;
  -//        pRow->setText(0, NULL);
  -//        pRow->setText(1, NULL);
  -//        pRow->setText(2, NULL);
  -//        pRow->setText(3, NULL);
  -//    }
  -}
  -
  -//
  -// Choose a file using a handy file dialog
  -//
  -void Titraqform::delEntry(void)
  -{
  -    Prototype Unimp;
  -    Unimp.doMbox();
  -}
  -
  -//
  -// Write current data to a meta device
  -//
  -void Titraqform::writeEntry(void)
  -{
  -    Prototype Unimp;
  -    Unimp.doMbox();
  -}
  -
  -//
  -// Make and display a new document window
  -//
  -void Titraqform::newDoc(void)
  -{
  -    Prototype Unimp;
  -    Unimp.doMbox();
  -//    Titraqform *pNewform = new Titraqform;
  -//    pNewform->show();
  -}
  -
  -//
  -// Choose a file using a handy file dialog
  -//
  -void Titraqform::choose(void)
  -{
  -    QString Filestring = QFileDialog::getOpenFileName(QString::null, QString::null, this);
  -    if (!Filestring.isEmpty())
  -        load(Filestring);
  -    else
  -        m_pStatbar->message(trUtf8("Loading aborted"), 4000);
  -}
  -
  -//
  -// Load accounting data into main window
  -//
  -void Titraqform::load(const QString &Filestring)
  -{
  -    QFile Filetemp(Filestring);         // File to load
  -
  -    if (!Filetemp.open(IO_ReadOnly))    // Need a wrapped exception here
  -        return;
  -
  -    QTextStream Textstream(&Filetemp);  // Convert the file contents to a stream
  -    m_pStatus->setText(Textstream.read());
  -    m_pStatus->setEdited(false);
  -    setCaption(Filestring);
  -    m_pStatbar->message(trUtf8("Loaded document ") + Filestring, 4000);
  -}
  -
  -//
  -// Serialize current state to the current file
  -//
  -void Titraqform::save(void)
  -{
  -    // First time saves are really just saveAs in disguise
  -    if (m_szFilename->isEmpty()) {
  -        saveAs();
  -        return;
  -    }
  -
  -    // Try to read the status text, and write it to a file
  -    QString Statustext = m_pStatus->text();
  -    QFile Filetemp(*m_szFilename);
  -    if (!Filetemp.open(IO_WriteOnly)) {
  -        m_pStatbar->message(QString(trUtf8("Could not write to %1")).arg(*m_szFilename), 4000);
  -        return;
  -    }
  -
  -    // Serialize file contents and write to text line
  -    QTextStream Filestream(&Filetemp);
  -    Filestream << Statustext;
  -    Filetemp.close();
  -
  -    // Reset the text line, and give output to main window
  -    m_pStatus->setEdited(FALSE);
  -    setCaption(*m_szFilename);
  -    m_pStatbar->message(QString(trUtf8("File %1 saved")).arg(*m_szFilename), 4000);
  -    m_bDirt = false;    // Set the clean state to allow a close operation
  -}
  -
  -//
  -// Serialize current state to a selected file
  -//
  -void Titraqform::saveAs(void)
  -{
  -    // First get the selected file name to save to
  -    QString Filestring = QFileDialog::getSaveFileName(QString::null, QString::null, this);
  -    if (!Filestring.isEmpty()) {
  -        *m_szFilename = Filestring;
  -        m_pStatus->setText(*m_szFilename);
  -        save(); // Finish off by calling the save action
  -    }
  -    else {
  -        // User did not select a valid file and push okay button
  -        m_pStatbar->message(trUtf8("Saving aborted"), 4000);
  -    }
  -}
  -
  -//
  -// Close current document, displaying in main window
  -//
  -void Titraqform::closeEvent(QCloseEvent *pClosit)
  -{
  -    // Check modification state of current data
  -    if (!this->isDirty()) {
  -        pClosit->accept();
  -        return;
  -    }
  -
  -    // Ask user to acknowlege a possibly data-damaging close event
  -    switch(QMessageBox::information(this, "OSSP titraq",
  -        trUtf8("The document has been\nchanged since the last save.")),
  -        trUtf8("Save Now"), trUtf8("Cancel"), trUtf8("Leave Anyway"), 0, 1) {
  -    case 0:
  -        save();
  -        pClosit->accept();
  -        break;
  -    case 1:
  -        default:    // Just for sanity
  -        pClosit->ignore();
  -        break;
  -    case 2:
  -        pClosit->accept();
  -        break;
  -    }
  -}
  -
  -//
  -// Check to see if state has changed since last save
  -//
  -bool Titraqform::isDirty(void)
  -{
  -    return m_bDirt;
  -}
  -
  -//
  -// Learn more about this program itself
  -//
  -void Titraqform::about(void)
  -{
  -    QMessageBox::about(this, "OSSP titraq",
  -        trUtf8("OSSP titraq is a time and task-based\n"
  -               "accounting system that acts as both a\n"
  -               "nwork-like punch card and time tracker."));
  -}
  -
  -//
  -// Learn more about the OSSP
  -//
  -void Titraqform::aboutOSSP(void)
  -{
  -    QMessageBox::about(this, "OSSP",
  -        trUtf8("The open source software project (OSSP) is\n"
  -               "a collective effort aimed at implementing\n"
  -               "high-quality Unix software components,\n"
  -               "ranging from networking, multi-threading\n"
  -               "and algorithmic libraries to networking\n"
  -               "servers and development tools."));
  -}
  -
  -//
  -// Learn more about this program and Qt
  -//
  -void Titraqform::aboutQt(void)
  -{
  -    QMessageBox::aboutQt(this, "OSSP titraq");
   }
   
   //
  Index: ossp-pkg/titraq/titslot.cpp
  ============================================================
  $ cvs update -p -r1.1 titslot.cpp
  // Qt headers
  #include <qfile.h>
  #include <qfiledialog.h>
  
  // User interface
  #include "titraq.h"             // Main classes
  #include "generic.h"            // Generic classes
  
  
  //
  // Add a blank row entry to the current data window
  //
  void Titraqform::addEntry(void)
  {
      Prototype Unimp;
      Unimp.doMbox();
  //    if (!pTable->text().isEmpty()) {
  //        QTableRow *pRow = new QTableRow;
  //        pRow->setText(0, NULL);
  //        pRow->setText(1, NULL);
  //        pRow->setText(2, NULL);
  //        pRow->setText(3, NULL);
  //    }
  }
  
  //
  // Choose a file using a handy file dialog
  //
  void Titraqform::delEntry(void)
  {
      Prototype Unimp;
      Unimp.doMbox();
  }
  
  //
  // Write current data to a meta device
  //
  void Titraqform::writeEntry(void)
  {
      Prototype Unimp;
      Unimp.doMbox();
  }
  
  //
  // Make and display a new document window
  //
  void Titraqform::newDoc(void)
  {
      Prototype Unimp;
      Unimp.doMbox();
  //    Titraqform *pNewform = new Titraqform;
  //    pNewform->show();
  }
  
  //
  // Choose a file using a handy file dialog
  //
  void Titraqform::choose(void)
  {
      QString Filestring = QFileDialog::getOpenFileName(QString::null, QString::null, this);
      if (!Filestring.isEmpty())
          load(Filestring);
      else
          m_pStatbar->message(trUtf8("Loading aborted"), 4000);
  }
  
  //
  // Load accounting data into main window
  //
  void Titraqform::load(const QString &Filestring)
  {
      QFile Filetemp(Filestring);         // File to load
  
      if (!Filetemp.open(IO_ReadOnly))    // Need a wrapped exception here
          return;
  
      QTextStream Textstream(&Filetemp);  // Convert the file contents to a stream
      m_pStatus->setText(Textstream.read());
      m_pStatus->setEdited(false);
      setCaption(Filestring);
      m_pStatbar->message(trUtf8("Loaded document ") + Filestring, 4000);
  }
  
  //
  // Serialize current state to the current file
  //
  void Titraqform::save(void)
  {
      // First time saves are really just saveAs in disguise
      if (m_szFilename->isEmpty()) {
          saveAs();
          return;
      }
  
      // Try to read the status text, and write it to a file
      QString Statustext = m_pStatus->text();
      QFile Filetemp(*m_szFilename);
      if (!Filetemp.open(IO_WriteOnly)) {
          m_pStatbar->message(QString(trUtf8("Could not write to %1")).arg(*m_szFilename), 4000);
          return;
      }
  
      // Serialize file contents and write to text line
      QTextStream Filestream(&Filetemp);
      Filestream << Statustext;
      Filetemp.close();
  
      // Reset the text line, and give output to main window
      m_pStatus->setEdited(FALSE);
      setCaption(*m_szFilename);
      m_pStatbar->message(QString(trUtf8("File %1 saved")).arg(*m_szFilename), 4000);
      m_bDirt = false;    // Set the clean state to allow a close operation
  }
  
  //
  // Serialize current state to a selected file
  //
  void Titraqform::saveAs(void)
  {
      // First get the selected file name to save to
      QString Filestring = QFileDialog::getSaveFileName(QString::null, QString::null, this);
      if (!Filestring.isEmpty()) {
          *m_szFilename = Filestring;
          m_pStatus->setText(*m_szFilename);
          save(); // Finish off by calling the save action
      }
      else {
          // User did not select a valid file and push okay button
          m_pStatbar->message(trUtf8("Saving aborted"), 4000);
      }
  }
  
  //
  // Close current document, displaying in main window
  //
  void Titraqform::closeEvent(QCloseEvent *pClosit)
  {
      // Check modification state of current data
      if (!this->isDirty()) {
          pClosit->accept();
          return;
      }
  
      // Ask user to acknowlege a possibly data-damaging close event
      switch(QMessageBox::information(this, "OSSP titraq",
          trUtf8("The document has been\nchanged since the last save.")),
          trUtf8("Save Now"), trUtf8("Cancel"), trUtf8("Leave Anyway"), 0, 1) {
      case 0:
          save();
          pClosit->accept();
          break;
      case 1:
          default:    // Just for sanity
          pClosit->ignore();
          break;
      case 2:
          pClosit->accept();
          break;
      }
  }
  
  //
  // Check to see if state has changed since last save
  //
  bool Titraqform::isDirty(void)
  {
      return m_bDirt;
  }
  
  //
  // Learn more about this program itself
  //
  void Titraqform::about(void)
  {
      QMessageBox::about(this, "OSSP titraq",
          trUtf8("OSSP titraq is a time and task-based\n"
                 "accounting system that acts as both a\n"
                 "nwork-like punch card and time tracker."));
  }
  
  //
  // Learn more about the OSSP
  //
  void Titraqform::aboutOSSP(void)
  {
      QMessageBox::about(this, "OSSP",
          trUtf8("The open source software project (OSSP) is\n"
                 "a collective effort aimed at implementing\n"
                 "high-quality Unix software components,\n"
                 "ranging from networking, multi-threading\n"
                 "and algorithmic libraries to networking\n"
                 "servers and development tools."));
  }
  
  //
  // Learn more about this program and Qt
  //
  void Titraqform::aboutQt(void)
  {
      QMessageBox::aboutQt(this, "OSSP titraq");
  }

From ossp-cvs-owner@ossp.org  Tue Nov 19 00:34:18 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A600376A55; Tue, 19 Nov 2002 00:34:17 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq titassist.cpp titraq.cpp titraq.h
Message-Id: <20021118233417.A600376A55@mail.ossp.org>
Date: Tue, 19 Nov 2002 00:34:17 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   19-Nov-2002 00:34:17
  Branch: HEAD                             Handle: 2002111823341700

  Modified files:
    ossp-pkg/titraq         titassist.cpp titraq.cpp titraq.h

  Log:
    Put this pig to bed, after some more restructuring, handling improvements,
    and display optimization.

  Summary:
    Revision    Changes     Path
    1.2         +18 -13     ossp-pkg/titraq/titassist.cpp
    1.15        +1  -1      ossp-pkg/titraq/titraq.cpp
    1.11        +2  -1      ossp-pkg/titraq/titraq.h
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/titassist.cpp
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 titassist.cpp
  --- ossp-pkg/titraq/titassist.cpp	18 Nov 2002 22:31:12 -0000	1.1
  +++ ossp-pkg/titraq/titassist.cpp	18 Nov 2002 23:34:17 -0000	1.2
  @@ -10,6 +10,8 @@
   // User interface
   #include "titraq.h"
   #include "titrex.h"             // Exception classes
  +
  +// Icon pixel maps
   #include "gfx/ossplogo.xpm"     // static const char *s_kpcOssplogo_xpm[]
   #include "gfx/qtlogo.xpm"       // static const char *s_kpcQtlogo_xpm[]
   #include "gfx/filenew.xpm"      // static const char *s_kpcFilenew_xpm[]
  @@ -64,6 +66,9 @@
       pFilepopup->insertSeparator();
       m_pFilequitact->addTo(pFilepopup);
   
  +    // Pad spacing to force help menu to appear far right
  +    m_pMenubar->insertSeparator();
  +
       // Construct and populate the help menu with subitems
       QPopupMenu *pHelppopup = new QPopupMenu(this);
       if (pHelppopup == NULL) // Sanity check
  @@ -192,17 +197,7 @@
   }
   
   //
  -// Construct the status bar
  -//
  -void Titraqform::setupStatusbar(void)
  -{
  -    m_pStatbar = statusBar();   // Grab status bar owned by QMainWindow
  -    if (m_pStatbar == NULL)     // Sanity check
  -        throw Genexcept("Main window status bar nonexistant.");
  -}
  -
  -//
  -// Construct the central widget
  +// Construct the central frame
   //
   void Titraqform::setupCentralwidget(void)
   {
  @@ -228,6 +223,16 @@
   }
   
   //
  +// Construct the status bar
  +//
  +void Titraqform::setupStatusbar(void)
  +{
  +    m_pStatbar = statusBar();   // Grab status bar owned by QMainWindow
  +    if (m_pStatbar == NULL)     // Sanity check
  +        throw Genexcept("Main window status bar nonexistant.");
  +}
  +
  +//
   // Construct the table
   //
   void Titraqform::setupTable(void)
  @@ -331,7 +336,7 @@
   //        m_pMaintable->setItem(i, 4, pTasks);
   //    }
   
  -    m_pPackagelayout->addWidget(m_pMaintable);  // Finally add the damn table
  +    m_pPackagelayout->addWidget(m_pMaintable); // Finally add the damn table
   }
   
   //
  @@ -349,7 +354,7 @@
       m_pStatus->setFrame(true);
       m_pStatus->setReadOnly(true);
       QToolTip::add(m_pStatus, trUtf8("Status Line"));
  -    m_pPackagelayout->addWidget(m_pStatus);
  +    m_pPackagelayout->addWidget(m_pStatus); // Finally add the status bar
   
       // Whatsthis info for the output line
       const char *kszStatouttext = trUtf8("<p><img source=\"ossplogo\"> "
  Index: ossp-pkg/titraq/titraq.cpp
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 titraq.cpp
  --- ossp-pkg/titraq/titraq.cpp	18 Nov 2002 22:38:04 -0000	1.14
  +++ ossp-pkg/titraq/titraq.cpp	18 Nov 2002 23:34:17 -0000	1.15
  @@ -42,8 +42,8 @@
           setupActions();
           setupMenubar();
           setupFiletools();
  -        setupStatusbar();
           setupCentralwidget();
  +        setupStatusbar();
           setupTable();
           setupOutput();
           setupButtons();
  Index: ossp-pkg/titraq/titraq.h
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 titraq.h
  --- ossp-pkg/titraq/titraq.h	18 Nov 2002 22:31:12 -0000	1.10
  +++ ossp-pkg/titraq/titraq.h	18 Nov 2002 23:34:17 -0000	1.11
  @@ -104,10 +104,11 @@
       void setupMenubar(void);            // Menu bar
       void setupFiletools(void);          // Tool bar
       void setupStatusbar(void);          // Status bar
  -    void setupCentralwidget(void);      // Frame widget
  +    void setupCentralwidget(void);      // Assemble main Frame widget
       void setupTable(void);              // Table widget
       void setupOutput(void);             // Output widget
       void setupButtons(void);            // Push button widgets
  +    void setupPieces(void);             // Assemble widget pieces
   };
   
   #endif // TITRAQMWIN_H

From ossp-cvs-owner@ossp.org  Tue Nov 19 09:17:45 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5A1D776A5B; Tue, 19 Nov 2002 09:17:45 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq/gfx cw.xpm ossp-pkg/titraq titassist.cpp t...
Message-Id: <20021119081745.5A1D776A5B@mail.ossp.org>
Date: Tue, 19 Nov 2002 09:17:45 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   19-Nov-2002 09:17:45
  Branch: HEAD                             Handle: 2002111908174400

  Modified files:
    ossp-pkg/titraq         titassist.cpp titraq.h titslot.cpp
    ossp-pkg/titraq/gfx     cw.xpm

  Log:
    Add CW logo and rework message boxes under the help menu.

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/titraq/gfx/cw.xpm
    1.3         +2  -0      ossp-pkg/titraq/titassist.cpp
    1.12        +1  -0      ossp-pkg/titraq/titraq.h
    1.2         +20 -6      ossp-pkg/titraq/titslot.cpp
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/gfx/cw.xpm
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 cw.xpm
  --- ossp-pkg/titraq/gfx/cw.xpm	14 Nov 2002 18:18:01 -0000	1.2
  +++ ossp-pkg/titraq/gfx/cw.xpm	19 Nov 2002 08:17:44 -0000	1.3
  @@ -1,5 +1,5 @@
   /* XPM */
  -static const char *s_kpcCw_xpm[] = {
  +static const char *s_kpcCwlogo_xpm[] = {
   "42 43 8 1",
   " 	c None",
   ".	c #E2E2F3",
  Index: ossp-pkg/titraq/titassist.cpp
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 titassist.cpp
  --- ossp-pkg/titraq/titassist.cpp	18 Nov 2002 23:34:17 -0000	1.2
  +++ ossp-pkg/titraq/titassist.cpp	19 Nov 2002 08:17:44 -0000	1.3
  @@ -12,6 +12,7 @@
   #include "titrex.h"             // Exception classes
   
   // Icon pixel maps
  +#include "gfx/cw.xpm"           // static const char *s_kpcCw_xpm[]
   #include "gfx/ossplogo.xpm"     // static const char *s_kpcOssplogo_xpm[]
   #include "gfx/qtlogo.xpm"       // static const char *s_kpcQtlogo_xpm[]
   #include "gfx/filenew.xpm"      // static const char *s_kpcFilenew_xpm[]
  @@ -26,6 +27,7 @@
   void Titraqform::setupIcons(void)
   {
       // Initialize icon images
  +    m_pCwicon = new QImage(s_kpcCwlogo_xpm);
       m_pOsspicon = new QImage(s_kpcOssplogo_xpm);
       m_pQticon = new QImage(s_kpcQtlogo_xpm);
       m_pNewicon = new QImage(s_kpcFilenew_xpm);
  Index: ossp-pkg/titraq/titraq.h
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 titraq.h
  --- ossp-pkg/titraq/titraq.h	18 Nov 2002 23:34:17 -0000	1.11
  +++ ossp-pkg/titraq/titraq.h	19 Nov 2002 08:17:44 -0000	1.12
  @@ -43,6 +43,7 @@
       QStringList *m_pTaskentries;
   
       // Reusable graphics
  +    QImage      *m_pCwicon;
       QImage      *m_pOsspicon;
       QImage      *m_pQticon;
       QImage      *m_pNewicon;
  Index: ossp-pkg/titraq/titslot.cpp
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 titslot.cpp
  --- ossp-pkg/titraq/titslot.cpp	18 Nov 2002 22:38:04 -0000	1.1
  +++ ossp-pkg/titraq/titslot.cpp	19 Nov 2002 08:17:44 -0000	1.2
  @@ -172,10 +172,18 @@
   //
   void Titraqform::about(void)
   {
  -    QMessageBox::about(this, "OSSP titraq",
  -        trUtf8("OSSP titraq is a time and task-based\n"
  +    QMessageBox *pCwmsg = new QMessageBox("OSSP titraq",
  +        QObject::trUtf8("OSSP titraq is a time and task-based\n"
                  "accounting system that acts as both a\n"
  -               "nwork-like punch card and time tracker."));
  +               "work-like punch card and time tracker.\n"
  +               "Development of titraq is sponsored by\n"
  +               "Cable & Wireless Deutschland GmbH."),
  +        QMessageBox::NoIcon, QMessageBox::Ok | QMessageBox::Default,
  +        QMessageBox::NoButton, QMessageBox::NoButton,
  +        NULL, "Titraqmessage", true, Qt::WStyle_NormalBorder);
  +
  +    pCwmsg->setIconPixmap(QPixmap(*m_pCwicon));
  +    pCwmsg->exec();
   }
   
   //
  @@ -183,13 +191,19 @@
   //
   void Titraqform::aboutOSSP(void)
   {
  -    QMessageBox::about(this, "OSSP",
  -        trUtf8("The open source software project (OSSP) is\n"
  +    QMessageBox *pOsspmsg = new QMessageBox("OSSP titraq",
  +        QObject::trUtf8("The open source software project (OSSP) is\n"
                  "a collective effort aimed at implementing\n"
                  "high-quality Unix software components,\n"
                  "ranging from networking, multi-threading\n"
                  "and algorithmic libraries to networking\n"
  -               "servers and development tools."));
  +               "servers and development tools."),
  +        QMessageBox::NoIcon, QMessageBox::Ok | QMessageBox::Default,
  +        QMessageBox::NoButton, QMessageBox::NoButton,
  +        NULL, "Osspmessage", true, Qt::WStyle_NormalBorder);
  +
  +    pOsspmsg->setIconPixmap(QPixmap(*m_pOsspicon));
  +    pOsspmsg->exec();
   }
   
   //

From ossp-cvs-owner@ossp.org  Tue Nov 19 10:43:57 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F2EF976A61; Tue, 19 Nov 2002 10:43:56 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg HACKING
Message-Id: <20021119094356.F2EF976A61@mail.ossp.org>
Date: Tue, 19 Nov 2002 10:43:56 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-Nov-2002 10:43:56
  Branch: HEAD                             Handle: 2002111909435600

  Added files:
    ossp-pkg/cfg            HACKING

  Log:
    start a little hacking document

  Summary:
    Revision    Changes     Path
    1.1         +44 -0      ossp-pkg/cfg/HACKING
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/HACKING
  ============================================================
  $ cvs update -p -r1.1 HACKING
     _        ___  ____ ____  ____          __
    |_|_ _   / _ \/ ___/ ___||  _ \    ___ / _| __ _
    _|_||_| | | | \___ \___ \| |_) |  / __| |_ / _` |
   |_||_|_| | |_| |___) |__) |  __/  | (__|  _| (_| |
    |_|_|_|  \___/|____/____/|_|      \___|_|  \__, |
                                               |___/
    OSSP cfg - Configuration Parsing
  
    HACKING
  
    config.h ............. Autoconf generated header
    cfg.h ................ public API header
    cfg_global.h ......... private global header
  
    cfg_main.c ........... main library functions
    cfg_main.h ........... corresponding header
  
    cfg_syn.c ............ syntax tree import/export
    cfg_syn.h ............ corresponding header
    cfg_syn_parse.y ...... Bison parser specification
    cfg_syn_scan.l ....... Flex scanner specification
  
    cfg_node.c ........... syntax nodes
    cfg_node.h ........... corresponding header
  
    cfg_data.c ........... config annotation data
    cfg_data.h ........... corresponding header
  
    cfg_buf.c ............ auto-resizing buffer
    cfg_buf.h ............ corresponding header
  
    cfg_grid.c ........... grid memory allocator
    cfg_grid.h ........... corresponding header
  
    cfg_fmt.c ............ string formatting
    cfg_fmt.h ............ corresponding header
  
    cfg_util.c ........... utility functions
    cfg_util.h ........... corresponding header
  
    cfg_vers.c ........... auto-generated version information
  
    cfg_test.c ........... test suite
  

From ossp-cvs-owner@ossp.org  Tue Nov 19 11:00:42 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7014A76A61; Tue, 19 Nov 2002 11:00:42 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq/gfx fileprint.xpm
Message-Id: <20021119100042.7014A76A61@mail.ossp.org>
Date: Tue, 19 Nov 2002 11:00:42 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   19-Nov-2002 11:00:42
  Branch: HEAD                             Handle: 1970010101000000

  Removed files:
    ossp-pkg/titraq/gfx     fileprint.xpm

  Log:
    We're not using a file print icon.

  Summary:
    Revision    Changes     Path
    NONE        +0  -117    ossp-pkg/titraq/gfx/fileprint.xpm
  ____________________________________________________________________________

  

From ossp-cvs-owner@ossp.org  Tue Nov 19 15:43:22 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 73C4676A63; Tue, 19 Nov 2002 15:43:22 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg cfg.pod
Message-Id: <20021119144322.73C4676A63@mail.ossp.org>
Date: Tue, 19 Nov 2002 15:43:22 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-Nov-2002 15:43:22
  Branch: HEAD                             Handle: 2002111914432200

  Modified files:
    ossp-pkg/cfg            cfg.pod

  Log:
    use my latest XRE+XCG syntax

  Summary:
    Revision    Changes     Path
    1.10        +5  -13     ossp-pkg/cfg/cfg.pod
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/cfg.pod
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 cfg.pod
  --- ossp-pkg/cfg/cfg.pod	10 Nov 2002 12:12:23 -0000	1.9
  +++ ossp-pkg/cfg/cfg.pod	19 Nov 2002 14:43:22 -0000	1.10
  @@ -167,8 +167,8 @@
   
   B<FQ_OPEN>    ::= /[!"#$%&'()*+,-./:;<=>?@\[\\\]^_`{|}~]/
   
  -B<FQ_CLOSE>   ::= "B<FQ_OPEN> or corresponding closing char
  -               ('}])>') if B<FQ_OPEN> is a char of '{[(<'"
  +B<FQ_CLOSE>   ::= E<lt>E<lt> B<FQ_OPEN> or corresponding closing char
  +                  ('}])>') if B<FQ_OPEN> is a char of '{[(<' E<gt>E<gt>
   
   B<PT_STRING>  ::= B<PT_CHAR> B<PT_CHARS>
   
  @@ -219,15 +219,7 @@
   
   =head1 APPLICATION PROGRAMMING INTERFACE (API)
   
  -spec:
  -
  - parent  ..
  - lbroth  ->
  - rbroth  <-
  - child[1]
  - child[L]
  -
  - virtualhost[2].directory
  +...
   
   =head1 NODE SELECTION SPECIFICATION
   
  @@ -265,9 +257,9 @@
   
   B<num>              ::= /^[+-]?[0-9]+/
   
  -B<regex>            ::= "Regular Expression (PCRE-based)"
  +B<regex>            ::= E<lt>E<lt> Regular Expression (PCRE-based) E<gt>E<gt>
   
  -B<token>            ::= "Plain-Text Token String"
  +B<token>            ::= E<lt>E<lt> Plain-Text Token String E<gt>E<gt>
   
   =head1 IMPLEMENTATION ISSUES
   

From ossp-cvs-owner@ossp.org  Tue Nov 19 16:30:52 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5705176A6A; Tue, 19 Nov 2002 16:30:52 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio_fd.c
Message-Id: <20021119153052.5705176A6A@mail.ossp.org>
Date: Tue, 19 Nov 2002 16:30:52 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   19-Nov-2002 16:30:52
  Branch: HEAD                             Handle: 2002111915305100

  Modified files:
    ossp-pkg/sio            sio_fd.c

  Log:
    cut&paste error

  Summary:
    Revision    Changes     Path
    1.8         +2  -2      ossp-pkg/sio/sio_fd.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio_fd.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 sio_fd.c
  --- ossp-pkg/sio/sio_fd.c	14 Nov 2002 15:56:10 -0000	1.7
  +++ ossp-pkg/sio/sio_fd.c	19 Nov 2002 15:30:51 -0000	1.8
  @@ -141,10 +141,10 @@
   
       actual = read(my->fd, buf->mem, buf->size);
       if (actual < 0) {
  -        al_append_bytes(al, &my->eof, sizeof(my->eof), my->error_label);
  +        al_append_bytes(al, &my->error, sizeof(my->error), my->error_label);
           return SIO_SCHED_DOWN;
       } else if (actual == 0) {
  -        al_append_bytes(al, &my->error, sizeof(my->error), my->eof_label);
  +        al_append_bytes(al, &my->eof, sizeof(my->eof), my->eof_label);
           return SIO_SCHED_DOWN;
       }
   

From ossp-cvs-owner@ossp.org  Tue Nov 19 16:54:52 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3F24076A69; Tue, 19 Nov 2002 16:54:52 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio Makefile sio_bio.c sio_test.c
Message-Id: <20021119155452.3F24076A69@mail.ossp.org>
Date: Tue, 19 Nov 2002 16:54:52 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   19-Nov-2002 16:54:52
  Branch: HEAD                             Handle: 2002111915545100

  Added files:
    ossp-pkg/sio            sio_bio.c
  Modified files:
    ossp-pkg/sio            Makefile sio_test.c

  Log:
    wrap BIO objects from libcrypto as an endpoint
    adjust test program to use sio_bio instead of sio_sa

  Summary:
    Revision    Changes     Path
    1.2         +3  -2      ossp-pkg/sio/Makefile
    1.1         +163 -0     ossp-pkg/sio/sio_bio.c
    1.3         +19 -8      ossp-pkg/sio/sio_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/Makefile
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 Makefile
  --- ossp-pkg/sio/Makefile	14 Nov 2002 09:24:54 -0000	1.1
  +++ ossp-pkg/sio/Makefile	19 Nov 2002 15:54:51 -0000	1.2
  @@ -10,7 +10,8 @@
   
   al_test: al_test.o al.o
   
  -sio_test: sio_test.o sio_buffer.o sio_hello.o sio_fd.o sio_sa.o sio.o al.o lib_sa/sa.o
  +sio_test: sio_test.o sio_buffer.o sio_hello.o sio_bio.o sio.o al.o lib_sa/sa.o
  +	$(CC) $(CFLAGS) -o sio_test sio_test.o sio_buffer.o sio_hello.o sio_bio.o sio.o al.o lib_sa/sa.o -lcrypto
   
   lib_sa/sa.o: lib_sa/sa.c
   	$(CC) $(CFLAGS) -c -Ilib_sa -o lib_sa/sa.o lib_sa/sa.c
  @@ -22,5 +23,5 @@
   	$(CC) $(CFLAGS) -c -Ilib_sa sio_test.c
   
   clean:
  -	rm -f sio_test sio_test.o sio_buffer.o sio_hello.o sio_fd.o sio_sa.o sio.o al.o lib_sa/sa.o
  +	rm -f *.o lib_sa/sa.o
   
  Index: ossp-pkg/sio/sio_bio.c
  ============================================================
  $ cvs update -p -r1.1 sio_bio.c
  #include <stddef.h>
  #include <stdlib.h>
  #include <string.h>
  
  #include "al.h"
  #include "sio.h"
  
  #include <openssl/bio.h>
  
  typedef struct {
      BIO *bio;
      size_t inputsize;
      al_label_t data_label;
      al_label_t eof_label;
      char eof;
  } private_t;
  
  /*
   * create stage
   *
   * allocate private instance data
   */
  static
  sio_rc_t siobio_init(sio_t *sio, void **u)
  {
      private_t *my;
      
      my = (private_t *)malloc(sizeof(private_t));
      if (my == NULL)
          return SIO_ERR_MEM;
  
      my->bio          = NULL;
      my->eof          = '\0';
  
      sio_label(sio, SIO_LN_DATA, &my->data_label);
      sio_label(sio, SIO_LN_EOF, &my->eof_label);
  
      *u = my;
  
      return SIO_OK;
  }
  
  /*
   * configure stage
   *
   * pass two void pointers
   */
  static
  sio_rc_t siobio_configure(sio_t *sio, void *u, void *obj, void *val)
  {
      private_t *my = (private_t *)u;
      const char *name = (const char *)obj;
  
      if (!strcmp(name, "bio")) {
          my->bio       = (BIO *)val;
      } else if (!strcmp(name, "inputsize")) {
          my->inputsize = *(int *)val;
      } else {
          return SIO_ERR_ARG;
      }
  
      return SIO_OK;
  }
  
  /*
   * destroy stage
   */
  static
  sio_rc_t siobio_cleanup(sio_t *sio, void *u)
  {
      private_t *my = (private_t *)u;
  
      free(my);
  
      return SIO_OK;
  }
  
  static
  sio_rc_t siobio_openr(sio_t *sio, al_t *al, void *u)
  {
      return SIO_OK;
  }
  
  static
  sio_rc_t siobio_closer(sio_t *sio, al_t *al, void *u)
  {
      return SIO_OK;
  }
  
  static
  sio_rc_t siobio_openw(sio_t *sio, al_t *al, void *u)
  {
      return SIO_OK;
  }
  
  static
  sio_rc_t siobio_closew(sio_t *sio, al_t *al, void *u)
  {
      return SIO_OK;
  }
  
  static
  void freebiobuf(char *p, size_t n, void *u)
  {
      free(p);
  }
  static
  sio_rc_t siobio_input(sio_t *sio, al_t *al, void *u)
  {
      private_t *my = (private_t *)u;
      char *p;
      int n;
  
      n = BIO_pending(my->bio);
      if (n == 0 || n > my->inputsize)
          n = my->inputsize;
      p = malloc(n);
      n = BIO_read(my->bio, p, n);
  
      if (n == 0 && !BIO_should_read(my->bio))
          al_append_bytes(al, &my->eof, sizeof(my->eof), my->eof_label);
      else
          al_attach_buffer(al, p, n, my->data_label, freebiobuf, NULL);
  
      return SIO_SCHED_DOWN;
  }
  
  static
  al_rc_t siobio_write_chunk(al_chunk_t *alc, void *u)
  {
      private_t *my = (private_t *)u;
  
      if (al_same_label(alc, my->data_label))
          BIO_write(my->bio, al_chunk_ptr(alc, 0), al_chunk_len(alc));
  
      return AL_OK;
  }
  static
  sio_rc_t siobio_output(sio_t *sio, al_t *al, void *u)
  {
      private_t *my = (private_t *)u;
  
      al_traverse_cb(al, 0, al_bytes(al), AL_FORWARD, my->data_label,
                     siobio_write_chunk, (void *)my);
  
      al_splice(al, 0, al_bytes(al), NULL, NULL);
  
      return SIO_SCHED_DOWN;
  }
  
  sio_module_t sio_module_bio = {
      "bio",
      siobio_init,
      siobio_configure,
      siobio_cleanup,
      siobio_openr,
      siobio_closer,
      siobio_openw,
      siobio_closew,
      siobio_input,
      siobio_output
  };
  
  Index: ossp-pkg/sio/sio_test.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 sio_test.c
  --- ossp-pkg/sio/sio_test.c	5 Nov 2002 13:23:36 -0000	1.2
  +++ ossp-pkg/sio/sio_test.c	19 Nov 2002 15:54:51 -0000	1.3
  @@ -4,8 +4,11 @@
   #include "sio.h"
   
   #include "sa.h"
  +#include <openssl/ssl.h>
  +#include <openssl/bio.h>
  +extern BIO_METHOD *BIO_s_socket();
   
  -extern sio_module_t sio_module_sa;
  +extern sio_module_t sio_module_bio;
   extern sio_module_t sio_module_hello;
   extern sio_module_t sio_module_buffer;
   
  @@ -16,13 +19,16 @@
   {
       sio_rc_t rc;
       sio_t *sio;
  -    sio_stage_t *sios_sa, *sios_hello, *sios_buffer;
  +    sio_stage_t *sios_bio, *sios_hello, *sios_buffer;
   
       sa_rc_t src;
       sa_addr_t *saa;
       sa_t *msa, *sa;
       char *uri;
   
  +    int fd;
  +    BIO *bio;
  +
       char buf[] = "Hello world\n";
   
       size_t actual;
  @@ -39,12 +45,12 @@
       uri = NULL;
   
       e(sio_create(&sio));
  -    e(sio_create_stage(sio, &sio_module_sa, &sios_sa));
  +    e(sio_create_stage(sio, &sio_module_bio, &sios_bio));
       e(sio_create_stage(sio, &sio_module_hello, &sios_hello));
       e(sio_create_stage(sio, &sio_module_buffer, &sios_buffer));
   
       buflen = 256;
  -    e(sio_configure_stage(sio, sios_sa, "buflen", &buflen));
  +    e(sio_configure_stage(sio, sios_bio, "inputsize", &buflen));
   
       buflen = 1000;
       e(sio_configure_stage(sio, sios_buffer, "outputsize", &buflen));
  @@ -58,16 +64,21 @@
           printf("Connection from %s\n",uri);
           s(sa_addr_destroy(saa));
   
  -        e(sio_configure_stage(sio, sios_sa, "sa", sa));
  +
  +        bio = BIO_new(BIO_s_socket());
  +        sa_getfd(sa, &fd);
  +        BIO_set_fd(bio, fd, 0);
  +
  +        e(sio_configure_stage(sio, sios_bio, "bio", bio));
   
           e(sio_attach(sio, sios_buffer, SIO_MODE_WRITE));
           e(sio_attach(sio, sios_hello, SIO_MODE_READWRITE));
  -        e(sio_attach(sio, sios_sa, SIO_MODE_READWRITE));
  +        e(sio_attach(sio, sios_bio, SIO_MODE_READWRITE));
   
           e(sio_write(sio, buf, sizeof(buf)-1, &actual));
           e(sio_push(sio));
   
  -        e(sio_detach(sio, sios_sa));
  +        e(sio_detach(sio, sios_bio));
           e(sio_detach(sio, sios_hello));
           e(sio_detach(sio, sios_buffer));
   
  @@ -77,7 +88,7 @@
   
       e(sio_destroy_stage(sio, sios_buffer));
       e(sio_destroy_stage(sio, sios_hello));
  -    e(sio_destroy_stage(sio, sios_sa));
  +    e(sio_destroy_stage(sio, sios_bio));
   
       e(sio_destroy(sio));
   

From ossp-cvs-owner@ossp.org  Tue Nov 19 18:02:18 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 224B676A63; Tue, 19 Nov 2002 18:02:18 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.c
Message-Id: <20021119170218.224B676A63@mail.ossp.org>
Date: Tue, 19 Nov 2002 18:02:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   19-Nov-2002 18:02:18
  Branch: HEAD                             Handle: 2002111917021700

  Modified files:
    ossp-pkg/sio            al.c

  Log:
    buffers can move to different assembly lines so that the freemem
    function can reference a dangling al pointer to reach bfree().
    We now reference the bfree() function directly as this is supposed
    to remain valid even after an assembly line has been freed.

  Summary:
    Revision    Changes     Path
    1.36        +3  -3      ossp-pkg/sio/al.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.c
  ============================================================
  $ cvs diff -u -r1.35 -r1.36 al.c
  --- ossp-pkg/sio/al.c	14 Nov 2002 09:22:42 -0000	1.35
  +++ ossp-pkg/sio/al.c	19 Nov 2002 17:02:17 -0000	1.36
  @@ -167,8 +167,8 @@
   static
   void freemem(char *p, size_t n, void *u)
   {
  -    al_t *al = (al_t *)u;
  -    (al->m.bfree)(p);
  +    void (*f)(void *) = (void (*)(void *))u;
  +    f(p);
   }
   
   /*
  @@ -191,7 +191,7 @@
       }
   
       buf->freemem  = freemem;
  -    buf->userdata = (void *)al;
  +    buf->userdata = (void *)al->m.bfree;
       buf->size     = n;
       buf->usecount = 0;
   

From ossp-cvs-owner@ossp.org  Tue Nov 19 20:38:39 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9851476A63; Tue, 19 Nov 2002 20:38:38 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq/gfx cw.xpm cwlogo.xpm osspfull.xpm osspico...
Message-Id: <20021119193838.9851476A63@mail.ossp.org>
Date: Tue, 19 Nov 2002 20:38:38 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   19-Nov-2002 20:38:38
  Branch: HEAD                             Handle: 197001010100001037731117

  Added files:
    ossp-pkg/titraq/gfx     cwlogo.xpm osspicon.xpm qticon.xpm
  Modified files:
    ossp-pkg/titraq/gfx     ossplogo.xpm
  Removed files:
    ossp-pkg/titraq/gfx     cw.xpm osspfull.xpm qtlogo.xpm

  Log:
    Newly processed graphics, removed some icons, added some logos, nearly
    completed the image set.

  Summary:
    Revision    Changes     Path
    NONE        +0  -54     ossp-pkg/titraq/gfx/cw.xpm
    1.1         +54 -0      ossp-pkg/titraq/gfx/cwlogo.xpm
    NONE        +0  -601    ossp-pkg/titraq/gfx/osspfull.xpm
    1.1         +144 -0     ossp-pkg/titraq/gfx/osspicon.xpm
    1.4         +241 -146   ossp-pkg/titraq/gfx/ossplogo.xpm
    1.1         +221 -0     ossp-pkg/titraq/gfx/qticon.xpm
    NONE        +0  -253    ossp-pkg/titraq/gfx/qtlogo.xpm
  ____________________________________________________________________________

    Index: ossp-pkg/titraq/gfx/cwlogo.xpm
  ============================================================
  $ cvs update -p -r1.1 cwlogo.xpm
  /* XPM */
  static const char *s_kpcCwlogo_xpm[] = {
  "42 43 8 1",
  " 	c None",
  ".	c #004BF3",
  "+	c #000DCB",
  "@	c #0000AD",
  "#	c #000090",
  "$	c #00006D",
  "%	c #002FE3",
  "&	c #0068FF",
  "               .+@@@#@@@@+.               ",
  "               +$$$$$#$$$$%               ",
  "                ....                      ",
  "          .%+@####$$%      .@+%.          ",
  "        %#$$$$##@@@@%      +$$$$@.        ",
  "        .@@%........%%. .....%+@@.        ",
  "        .%+###$$$$$$$$% #$$$#.            ",
  "     +@#$$$##@@+++%%%%. %+@@@.            ",
  "    .$$#+%.&.%%++@@        ..             ",
  "     %.%++@#$$$$$$#.      .#$$#@+         ",
  "   .+@$$$$##@+%..&&&.....  %+@#$@  +@%.   ",
  "  .$$#@%%%%   .@##########+    ..  +$$$%  ",
  "  .+%.%+@#$+  .###@@@@@###+         .+@.  ",
  "  .+#$$$$@+. ....%%%%%%    ..             ",
  " @$$#++%..+@##$$$$$$$$#   .###@           ",
  " %+%..   @$###@+%%%%%%.    @#$#     ..    ",
  " %@#$#.   ...%%+@@##.   @@++%..     #$#@. ",
  "%$$@+%.++@##$$$$####.   #$$$$$##@%  %@#$$.",
  ".%..+#$$$$#@++..           %%+#$$+     %+ ",
  ".+@$$#@+%%.   +@#########@@@+. .%.        ",
  "+$#+%..+#$$. .#############$$+            ",
  " .%@#$$$#@%  ..%%.    .%%%%..             ",
  "%#$$#@+%%%+@##$$$#    @$$$$##@++%%        ",
  "%#+..%@$$$$$#@++%.    .%%++@#$$$$$%       ",
  "   +$$#@%+%..++@@@######@@%  ..%++.       ",
  "   %@%%%%   @$$$#########$+               ",
  "   .+#$$$   .%.&&&&&..&...         .#+.   ",
  " %#$$#@+%.%%++@###$#$$#% %#@++%    .$$$#. ",
  " %#+..%@#$$$$$##@@@@@@@  .#$$$$%     .@#. ",
  "  .+#$$$#++%%%%%%%    .++%..%%+.          ",
  "  .$$@+...+@##$$$$.   +$$$@               ",
  "   ..+##$$$$#@@+%.     ..+.               ",
  "    @$#@++%%%+++@@@@#@@@@                 ",
  "    %%..+@#$$$$$$$$$$$$$#     .#@+.       ",
  "      #$$$@+%%..........      .#$$$#      ",
  "      +@.%%+%  .#$$$$$$#$##@     %++      ",
  "        @$$$@   +@+++++@@@#@              ",
  "        +@@+..%%%%%+++%  .%..             ",
  "            #$$$$$$$$$#  #$$$@            ",
  "           .@@+%+%%%.%.  %++@+            ",
  "                 +@@@@@@%                 ",
  "                 #$#$$$$+                 ",
  "                  ......                  "};
    Index: ossp-pkg/titraq/gfx/osspicon.xpm
  ============================================================
  $ cvs update -p -r1.1 osspicon.xpm
  /* XPM */
  static const char *s_kpcOsspicon_xpm[] = {
  "22 22 119 2",
  "  	c None",
  ". 	c #F4F4F4",
  "+ 	c #FDFDFD",
  "@ 	c #C1C1C1",
  "# 	c #ECECEC",
  "$ 	c #FFFFFF",
  "% 	c #FAFAFA",
  "& 	c #F5F5F5",
  "* 	c #F3F3F3",
  "= 	c #F9F9F9",
  "- 	c #DEDEDE",
  "; 	c #E4E4E4",
  "> 	c #B1B1B1",
  ", 	c #D7D7D7",
  "' 	c #FCFCFC",
  ") 	c #F7F7F7",
  "! 	c #F1F1F1",
  "~ 	c #EBEBEB",
  "{ 	c #818181",
  "] 	c #EEEEEE",
  "^ 	c #F2F2F2",
  "/ 	c #C0C0C0",
  "( 	c #F6F6F6",
  "_ 	c #D5D5D5",
  ": 	c #FBFBFB",
  "< 	c #FEFEFE",
  "[ 	c #767676",
  "} 	c #A5A5A5",
  "| 	c #D4D4D4",
  "1 	c #CCCCCC",
  "2 	c #D9D9D9",
  "3 	c #E0E0E0",
  "4 	c #E6E6E6",
  "5 	c #E5E5E5",
  "6 	c #E2E2E2",
  "7 	c #CBCBCB",
  "8 	c #E7E7E7",
  "9 	c #CFCFCF",
  "0 	c #C6C6C6",
  "a 	c #C4C4C4",
  "b 	c #9E9E9E",
  "c 	c #B7B7B7",
  "d 	c #999999",
  "e 	c #C3C3C3",
  "f 	c #B4B4B4",
  "g 	c #9B9B9B",
  "h 	c #D2D2D2",
  "i 	c #898989",
  "j 	c #BDBDBD",
  "k 	c #B6B6B6",
  "l 	c #EDEDED",
  "m 	c #F8F8F8",
  "n 	c #C8C8C8",
  "o 	c #F0F0F0",
  "p 	c #C9C9C9",
  "q 	c #A8A8A8",
  "r 	c #929292",
  "s 	c #D3D3D3",
  "t 	c #B2B2B2",
  "u 	c #EFEFEF",
  "v 	c #D0D0D0",
  "w 	c #DADADA",
  "x 	c #DBDBDB",
  "y 	c #BCBCBC",
  "z 	c #BEBEBE",
  "A 	c #9A9A9A",
  "B 	c #848484",
  "C 	c #D6D6D6",
  "D 	c #ACACAC",
  "E 	c #BFBFBF",
  "F 	c #C7C7C7",
  "G 	c #B8B8B8",
  "H 	c #D1D1D1",
  "I 	c #B9B9B9",
  "J 	c #DFDFDF",
  "K 	c #A6A6A6",
  "L 	c #A9A9A9",
  "M 	c #CDCDCD",
  "N 	c #B5B5B5",
  "O 	c #948A8A",
  "P 	c #8C4040",
  "Q 	c #955151",
  "R 	c #EEEDED",
  "S 	c #8D6060",
  "T 	c #8F3B3B",
  "U 	c #884949",
  "V 	c #AAAAAA",
  "W 	c #D6D1D1",
  "X 	c #AC2E2E",
  "Y 	c #B74F4F",
  "Z 	c #CCBFBF",
  "` 	c #984D4D",
  " .	c #C93232",
  "..	c #9D3333",
  "+.	c #A08585",
  "@.	c #956868",
  "#.	c #AE2C2C",
  "$.	c #CA3333",
  "%.	c #B32E2E",
  "&.	c #B82E2E",
  "*.	c #CB3333",
  "=.	c #9B3535",
  "-.	c #9F6363",
  ";.	c #B64141",
  ">.	c #CC3333",
  ",.	c #CECECE",
  "'.	c #E9E9E9",
  ").	c #F1EDED",
  "!.	c #D4C5C5",
  "~.	c #B93030",
  "{.	c #DBD7D7",
  "].	c #A82D2D",
  "^.	c #9A3636",
  "/.	c #A3A3A3",
  "(.	c #A1A1A1",
  "_.	c #A49898",
  ":.	c #7E2222",
  "<.	c #823434",
  "[.	c #773333",
  "                                            ",
  "      . + @         # $ % &                 ",
  "  * + $ $ = - ;     > , $ $ ' )             ",
  "! $ $ $ $ $ ~ {       ] $ $ ^ % / ( ( ( ( _ ",
  "  : $ $ $ $ )     & & < $ ! [ } | $ $ $ $ 1 ",
  "  ^ $ < 2 3 $ @   4 + $ $ 5 - 6 = $ $ $ $ 7 ",
  "    ' 8     9       0 < < $ 3 a < $ $ $ $ 7 ",
  "    ^ * b           # c d e f   : & - ) $ 7 ",
  "      g h - ( 6       i         = j k | $ 7 ",
  "    l m $ $ & n     o _   l ( p j q - p c r ",
  "    ! $ $ $ 3       ( s   ! $ t u * + + . j ",
  "    ~ $ $ $ : v w 9 + $ + $ $ _ x ; $ $ $ y ",
  "      + $ $ $ $ ( } ' $ $ $ $ 6 n j $ $ $ y ",
  "      & $ $ = z A B & . C ^ $ t n 8 $ $ $ y ",
  "      x D E ,       ) F G H $ f ! m $ + & I ",
  "        J 2 n K & a z L x M N O P Q R S T U ",
  "        < a   o $ V o & + < ( W X Y Z `  ...",
  "        < $ + $ $ h , w $ < +.@.#.$.%.&.*.=.",
  "        < $ $ $ $ 3 n c $ < -.;. .>.>.>.>.=.",
  "        < $ $ $ $ V ,.'.$ $ ).!.~.>.>.>.>.=.",
  "        ' + + + + D ) < < < < {.].>.>.>.>.^.",
  "        q /./././.r (.c c c c _.:.<.<.<.<.[."};
  Index: ossp-pkg/titraq/gfx/ossplogo.xpm
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 ossplogo.xpm
  --- ossp-pkg/titraq/gfx/ossplogo.xpm	18 Nov 2002 22:10:11 -0000	1.3
  +++ ossp-pkg/titraq/gfx/ossplogo.xpm	19 Nov 2002 19:38:37 -0000	1.4
  @@ -1,149 +1,244 @@
   /* XPM */
   static const char *s_kpcOssplogo_xpm[] = {
  -"22 22 124 2",
  +"40 40 201 2",
   "  	c None",
  -". 	c #F4F4F4",
  -"+ 	c #FDFDFD",
  -"@ 	c #B6B6B6",
  -"# 	c #ECECEC",
  -"$ 	c #FFFFFF",
  -"% 	c #FAFAFA",
  -"& 	c #F5F5F5",
  -"* 	c #F3F3F3",
  -"= 	c #F9F9F9",
  -"- 	c #DCDCDC",
  -"; 	c #E4E4E4",
  -"> 	c #A8A8A8",
  -", 	c #D2D2D2",
  -"' 	c #FCFCFC",
  -") 	c #F7F7F7",
  -"! 	c #F1F1F1",
  -"~ 	c #EBEBEB",
  -"{ 	c #5D5D5D",
  -"] 	c #EEEEEE",
  -"^ 	c #F2F2F2",
  -"/ 	c #C0C0C0",
  -"( 	c #F6F6F6",
  -"_ 	c #D5D5D5",
  -": 	c #FBFBFB",
  -"< 	c #FEFEFE",
  -"[ 	c #F0F0F0",
  -"} 	c #4C4C4C",
  -"| 	c #969696",
  -"1 	c #D4D4D4",
  -"2 	c #CCCCCC",
  -"3 	c #D1D1D1",
  -"4 	c #DFDFDF",
  -"5 	c #B7B7B7",
  -"6 	c #E6E6E6",
  -"7 	c #E5E5E5",
  -"8 	c #DADADA",
  -"9 	c #E2E2E2",
  -"0 	c #CBCBCB",
  -"a 	c #BEBEBE",
  -"b 	c #B8B8B8",
  -"c 	c #9A9A9A",
  -"d 	c #ABABAB",
  -"e 	c #7B7B7B",
  -"f 	c #B5B5B5",
  -"g 	c #9C9C9C",
  -"h 	c #DEDEDE",
  -"i 	c #9B9B9B",
  -"j 	c #777777",
  -"k 	c #BDBDBD",
  -"l 	c #EDEDED",
  -"m 	c #F8F8F8",
  -"n 	c #C2C2C2",
  -"o 	c #C9C9C9",
  -"p 	c #929292",
  -"q 	c #D9D9D9",
  -"r 	c #B2B2B2",
  -"s 	c #EFEFEF",
  -"t 	c #B0B0B0",
  -"u 	c #CFCFCF",
  -"v 	c #DBDBDB",
  -"w 	c #9F9F9F",
  -"x 	c #C8C8C8",
  -"y 	c #7C7C7C",
  -"z 	c #585858",
  -"A 	c #D6D6D6",
  -"B 	c #E7E7E7",
  -"C 	c #999999",
  -"D 	c #BFBFBF",
  -"E 	c #C7C7C7",
  -"F 	c #B4B4B4",
  -"G 	c #A5A5A5",
  -"H 	c #DDDDDD",
  -"I 	c #D8D8D8",
  -"J 	c #A6A6A6",
  -"K 	c #C4C4C4",
  -"L 	c #A9A9A9",
  -"M 	c #CDCDCD",
  -"N 	c #948A8A",
  -"O 	c #8C4040",
  -"P 	c #955151",
  -"Q 	c #EEEDED",
  -"R 	c #8D6060",
  -"S 	c #8F3B3B",
  -"T 	c #814242",
  -"U 	c #BABABA",
  -"V 	c #AAAAAA",
  -"W 	c #D6D1D1",
  -"X 	c #AC2E2E",
  -"Y 	c #B74F4F",
  -"Z 	c #CCBFBF",
  -"` 	c #984D4D",
  -" .	c #C93232",
  -"..	c #8C2323",
  -"+.	c #D7D7D7",
  -"@.	c #A08585",
  -"#.	c #956868",
  -"$.	c #AE2C2C",
  -"%.	c #CA3333",
  -"&.	c #B32E2E",
  -"*.	c #B82E2E",
  -"=.	c #CB3333",
  -"-.	c #862121",
  -";.	c #E0E0E0",
  -">.	c #9F6363",
  -",.	c #B64141",
  -"'.	c #CC3333",
  -").	c #CECECE",
  -"!.	c #E9E9E9",
  -"~.	c #F1EDED",
  -"{.	c #D4C5C5",
  -"].	c #B93030",
  -"^.	c #ACACAC",
  -"/.	c #DBD7D7",
  -"(.	c #A82D2D",
  -"_.	c #848484",
  -":.	c #7D7D7D",
  -"<.	c #717171",
  -"[.	c #909090",
  -"}.	c #919191",
  -"|.	c #7E7272",
  -"1.	c #7B1F1F",
  -"2.	c #681A1A",
  -"3.	c #5B1717",
  -"                                            ",
  -"      . + @         # $ % &                 ",
  -"  * + $ $ = - ;     > , $ $ ' )             ",
  -"! $ $ $ $ $ ~ {       ] $ $ ^ % / ( ( ( ( _ ",
  -"  : $ $ $ $ )     & & < $ [ } | 1 $ $ $ $ 2 ",
  -"  ^ $ < 3 4 $ 5   6 + $ $ 7 8 9 = $ $ $ $ 0 ",
  -"    ' 7     0       a < < $ 4 b < $ $ $ $ 0 ",
  -"    ^ * c           # d e f g   : & h ) $ 0 ",
  -"      i , _ ( 9       j         = k @ 1 $ 0 ",
  -"    l m $ $ & n     [ 1   l ( o k > h o 5 p ",
  -"    ! $ $ $ q       ( 0   ! $ r s * + + . t ",
  -"    ~ $ $ $ : 2 8 u + $ + $ $ _ v ; $ $ $ > ",
  -"      + $ $ $ $ ( w ' $ $ $ $ 9 x k $ $ $ > ",
  -"      & $ $ = t y z & . A ^ $ r x B $ $ $ > ",
  -"      v C D ,       ) E b 3 $ F ! m $ + & G ",
  -"        H I a J & K a L v M f N O P Q R S T ",
  -"        < U   [ $ V [ & + < ( W X Y Z `  ...",
  -"        < $ + $ $ , +.8 $ < @.#.$.%.&.*.=.-.",
  -"        < $ $ $ $ ;.x 5 $ < >.,. .'.'.'.'.-.",
  -"        < $ $ $ $ V ).!.$ $ ~.{.].'.'.'.'.-.",
  -"        ' + + + + ^.) < < < < /.(.'.'.'.'.-.",
  -"        _.:.:.:.:.<.[.}.}.}.}.|.1.2.2.2.2.3."};
  +". 	c #EAEAEA",
  +"+ 	c #EFEFEF",
  +"@ 	c #D5D5D5",
  +"# 	c #F8F8F8",
  +"$ 	c #F2F2F2",
  +"% 	c #E0E0E0",
  +"& 	c #EDEDED",
  +"* 	c #F9F9F9",
  +"= 	c #FEFEFE",
  +"- 	c #F0F0F0",
  +"; 	c #7A7A7A",
  +"> 	c #F5F5F5",
  +", 	c #FFFFFF",
  +"' 	c #FBFBFB",
  +") 	c #F4F4F4",
  +"! 	c #EBEBEB",
  +"~ 	c #FAFAFA",
  +"{ 	c #B3B3B3",
  +"] 	c #D7D7D7",
  +"^ 	c #D3D3D3",
  +"/ 	c #F6F6F6",
  +"( 	c #FDFDFD",
  +"_ 	c #EEEEEE",
  +": 	c #E1E1E1",
  +"< 	c #F7F7F7",
  +"[ 	c #D2D2D2",
  +"} 	c #F1F1F1",
  +"| 	c #9E9E9E",
  +"1 	c #939393",
  +"2 	c #A9A9A9",
  +"3 	c #ECECEC",
  +"4 	c #E4E4E4",
  +"5 	c #BABABA",
  +"6 	c #929292",
  +"7 	c #AFAFAF",
  +"8 	c #BBBBBB",
  +"9 	c #ADADAD",
  +"0 	c #B2B2B2",
  +"a 	c #DCDCDC",
  +"b 	c #C6C6C6",
  +"c 	c #E2E2E2",
  +"d 	c #D6D6D6",
  +"e 	c #7C7C7C",
  +"f 	c #BCBCBC",
  +"g 	c #DBDBDB",
  +"h 	c #A7A7A7",
  +"i 	c #979797",
  +"j 	c #E8E8E8",
  +"k 	c #727272",
  +"l 	c #909090",
  +"m 	c #818181",
  +"n 	c #B4B4B4",
  +"o 	c #949494",
  +"p 	c #ACACAC",
  +"q 	c #F3F3F3",
  +"r 	c #838383",
  +"s 	c #E5E5E5",
  +"t 	c #DADADA",
  +"u 	c #999999",
  +"v 	c #DFDFDF",
  +"w 	c #7F7F7F",
  +"x 	c #AEAEAE",
  +"y 	c #D1D1D1",
  +"z 	c #D4D4D4",
  +"A 	c #E7E7E7",
  +"B 	c #E3E3E3",
  +"C 	c #808080",
  +"D 	c #C2C2C2",
  +"E 	c #969696",
  +"F 	c #E9E9E9",
  +"G 	c #CBCBCB",
  +"H 	c #A3A3A3",
  +"I 	c #D0D0D0",
  +"J 	c #6E6E6E",
  +"K 	c #A0A0A0",
  +"L 	c #8A8A8A",
  +"M 	c #717171",
  +"N 	c #7E7E7E",
  +"O 	c #989898",
  +"P 	c #CDCDCD",
  +"Q 	c #DDDDDD",
  +"R 	c #B8B8B8",
  +"S 	c #A4A4A4",
  +"T 	c #8F8F8F",
  +"U 	c #626262",
  +"V 	c #C1C1C1",
  +"W 	c #CFCFCF",
  +"X 	c #919191",
  +"Y 	c #9F9F9F",
  +"Z 	c #A2A2A2",
  +"` 	c #9A9A9A",
  +" .	c #848484",
  +"..	c #C5C5C5",
  +"+.	c #BEBEBE",
  +"@.	c #C4C4C4",
  +"#.	c #888888",
  +"$.	c #FCFCFC",
  +"%.	c #BFBFBF",
  +"&.	c #9C9C9C",
  +"*.	c #8B8B8B",
  +"=.	c #6C6C6C",
  +"-.	c #CCCCCC",
  +";.	c #CACACA",
  +">.	c #CECECE",
  +",.	c #8C8C8C",
  +"'.	c #ABABAB",
  +").	c #B5B5B5",
  +"!.	c #696969",
  +"~.	c #7D7D7D",
  +"{.	c #6F6F6F",
  +"].	c #828282",
  +"^.	c #C8C8C8",
  +"/.	c #A5A5A5",
  +"(.	c #6B6B6B",
  +"_.	c #D8D8D8",
  +":.	c #8F8B8B",
  +"<.	c #9E8F8F",
  +"[.	c #917676",
  +"}.	c #937878",
  +"|.	c #C9C2C2",
  +"1.	c #B8AFAF",
  +"2.	c #9A8585",
  +"3.	c #8D7070",
  +"4.	c #9C8585",
  +"5.	c #847E7E",
  +"6.	c #B9B9B9",
  +"7.	c #E6E6E6",
  +"8.	c #9D9D9D",
  +"9.	c #D9D9D9",
  +"0.	c #816E6E",
  +"a.	c #852727",
  +"b.	c #982727",
  +"c.	c #9D2828",
  +"d.	c #9B6B6B",
  +"e.	c #AFA7A7",
  +"f.	c #712626",
  +"g.	c #8E2626",
  +"h.	c #9C2929",
  +"i.	c #6F2323",
  +"j.	c #6A6A6A",
  +"k.	c #BEB5B5",
  +"l.	c #952E2E",
  +"m.	c #C53131",
  +"n.	c #B62E2E",
  +"o.	c #C6AEAE",
  +"p.	c #D9D8D8",
  +"q.	c #873A3A",
  +"r.	c #BF3030",
  +"s.	c #C93232",
  +"t.	c #7B3030",
  +"u.	c #C3C3C3",
  +"v.	c #DEDEDE",
  +"w.	c #868686",
  +"x.	c #D0CBCB",
  +"y.	c #8B3131",
  +"z.	c #A76565",
  +"A.	c #A38787",
  +"B.	c #8E6E6E",
  +"C.	c #8A3333",
  +"D.	c #CC3333",
  +"E.	c #C73131",
  +"F.	c #773939",
  +"G.	c #9B9B9B",
  +"H.	c #8F7F7F",
  +"I.	c #968B8B",
  +"J.	c #9B8D8D",
  +"K.	c #8A2828",
  +"L.	c #C23131",
  +"M.	c #A82C2C",
  +"N.	c #9E2828",
  +"O.	c #AF2B2B",
  +"P.	c #D8D4D4",
  +"Q.	c #773333",
  +"R.	c #922626",
  +"S.	c #902A2A",
  +"T.	c #AA2A2A",
  +"U.	c #CB3333",
  +"V.	c #CA3232",
  +"W.	c #898989",
  +"X.	c #DCD8D8",
  +"Y.	c #873737",
  +"Z.	c #B52E2E",
  +"`.	c #BD3232",
  +" +	c #C83131",
  +".+	c #F3F2F2",
  +"++	c #A37A7A",
  +"@+	c #BC9090",
  +"#+	c #B88080",
  +"$+	c #C03131",
  +"%+	c #C1B0B0",
  +"&+	c #A22E2E",
  +"*+	c #D0CACA",
  +"=+	c #913131",
  +"-+	c #CAC5C5",
  +";+	c #882E2E",
  +">+	c #772424",
  +",+	c #9F2727",
  +"'+	c #A42929",
  +")+	c #A12828",
  +"!+	c #703333",
  +"              . . .                     . .                                     ",
  +"              . . . .                 . . .                                     ",
  +"              . + @                   . # $                                     ",
  +"          % & * = - ;                 > , = ' ) &                               ",
  +"        ! ~ , , , = {     ]         ^ / ' , , , ( > _                           ",
  +"  : & * = , , , , , < [ } ~ |         1 2 ' , , , , = # }                       ",
  +"3 * = , , , , , , , , , 4 5 6           7 # , , , , , , = 8                     ",
  +"  * , , , , , , , , , , 9               4 ( , , , = ) ' ~ 0 a > > > > > > > _   ",
  +"  _ , , , , , , , , , , b         ) c . # , , , , d e f g h _ , , , , , , , > i ",
  +"  : ~ , , , , , , , , , j k     j = ( ( , , , , ' l     m n * , , , , , , , > o ",
  +"    _ , , , , , ' > ( , ' p     $ , , , , , , , q r       s , , , , , , , , > o ",
  +"    c ' , , = t | u a = = v w   x y $ , , , , , * z A B - ( , , , , , , , , > o ",
  +"      + , , 3 C     c B D E         E : , , , , , ( F G & = , , , , , , , , > 1 ",
  +"      4 ' , $ H                       I ( q > ( , , G J K ~ , , , , , , , , > 1 ",
  +"        - , = v L                     / g M N O P q h     ) , , ~ ) * , , , > 1 ",
  +"        v Q R S T U       v         V % W         X ;     _ , 3 Y 6 Z % , , > 1 ",
  +"              b 4 ] ! $ * < `         u M                 - , g  ...f d , , > 1 ",
  +"            & ~ , , , , , = +.        g @.          . v   s $ ! ` 4 W a & q : #.",
  +"      B _ / $., , , , , d { `       & ' / %.    F ' $.+ x 9 ` X ` B & 8 &.E *.=.",
  +"        < , , , , , , ( Z           s , & 6     ^ ( , s 1 t : t B # = / j a @ o ",
  +"        & , , , , , , = 2           j , < %.z + / = , v O 3 $.= , , , , , = # *.",
  +"        : , , , , , , , Q     -.    > , , ( ' $.= , , + K ;.>.! , , , , , , * ,.",
  +"          $., , , , , , ( 3 # . '.v ( , , , , , , , , = & } c f # , , , , , * ,.",
  +"          $ , , , , , , , , , $.{ ).~ , , , , , , , , , ! : g | + , , , , , * ,.",
  +"          B , , , , , , , , ( ) 2 !.3 , , , , , , , , ~ ` ~.o S } , , , , , * ,.",
  +"          v $., , , , , # P O k {.].% , , / A _ ' , , 3 ,.^.@ v ' , , , , , * ,.",
  +"            > ( } F * ' /.(.        B , q O L E D = , : 1 A = ( , , , , , , * ,.",
  +"            g p ~.=.D # 6           . , } T @.I P = , c ` & ' ' = , , = $.~ / ,.",
  +"              u f g c ~ _.L W & c   @ : % Z W Q ^._.s ^ :.<.[.}.|.( _ 1.2.3.4.5.",
  +"              + * ~ 6.0 e ` 7.( ) Y +.Z 1 8.9.< d h O 6 0.a.b.c.d.# e.f.g.c.h.i.",
  +"              * , & j.    P * , F  .v - F 3 * , ( > 3 j k.l.m.n.o.~ p.q.r.s.m.t.",
  +"              * , * u.v.} * = , 7.w.F > $., , , , , < * x.y.m.r.z.A.B.C.r.D.E.F.",
  +"              * , , = $.( , , , > G.@.V y = , , , $ H.I.J.K.m.D.L.M.N.O.E.D.E.F.",
  +"              * , , , , , , , , , > / . | ) , , , P.Q.R.S.T.s.D.D.U.V.U.D.D.E.F.",
  +"              * , , , , , , , , , A z v.W.! , , , X.Y.Z.`. +D.D.D.D.D.D.D.D.E.F.",
  +"              * , , , , , , , , $.6 *.E Z - , , , .+++@+#+$+D.D.D.D.D.D.D.D.E.F.",
  +"              * , , , , , , , , - C G % B ' , , , = * $.%+&+V.D.D.D.D.D.D.D.E.F.",
  +"              * , , , , , , , , s r s = = , , , , , , , *+=+E.D.D.D.D.D.D.D.E.F.",
  +"              # = = = = = = = = j W.! = = = = = = = = = -+;+m.D.D.D.D.D.D.D.E.F.",
  +"              1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 >+,+'+'+'+'+'+'+'+)+!+"};
  Index: ossp-pkg/titraq/gfx/qticon.xpm
  ============================================================
  $ cvs update -p -r1.1 qticon.xpm
  /* XPM */
  static const char *s_kpcQticon_xpm[] = {
  "22 22 196 2",
  "  	c None",
  ". 	c #A2C510",
  "+ 	c #A2C512",
  "@ 	c #A2C511",
  "# 	c #A2C513",
  "$ 	c #92AD1B",
  "% 	c #57661C",
  "& 	c #29320F",
  "* 	c #141B07",
  "= 	c #161C07",
  "- 	c #293310",
  "; 	c #566814",
  "> 	c #90AE1F",
  ", 	c #A1C513",
  "' 	c #A2C514",
  ") 	c #59691B",
  "! 	c #090B09",
  "~ 	c #020203",
  "{ 	c #020204",
  "] 	c #010204",
  "^ 	c #000103",
  "/ 	c #02020A",
  "( 	c #080D0A",
  "_ 	c #56691A",
  ": 	c #3F4C12",
  "< 	c #030203",
  "[ 	c #030209",
  "} 	c #131608",
  "| 	c #2C3512",
  "1 	c #2C3613",
  "2 	c #13190A",
  "3 	c #020408",
  "4 	c #020306",
  "5 	c #010307",
  "6 	c #596919",
  "7 	c #030304",
  "8 	c #050203",
  "9 	c #14170B",
  "0 	c #6E8018",
  "a 	c #A2BC1E",
  "b 	c #A4C316",
  "c 	c #A2C515",
  "d 	c #9EBF1E",
  "e 	c #6C8220",
  "f 	c #14180B",
  "g 	c #020206",
  "h 	c #030403",
  "i 	c #58681A",
  "j 	c #090B06",
  "k 	c #131709",
  "l 	c #8DA824",
  "m 	c #A2C411",
  "n 	c #A2C50F",
  "o 	c #A2C610",
  "p 	c #A2C51B",
  "q 	c #6E8815",
  "r 	c #9BBC22",
  "s 	c #8CA823",
  "t 	c #12180A",
  "u 	c #090A06",
  "v 	c #93AB21",
  "w 	c #030303",
  "x 	c #020208",
  "y 	c #6F8119",
  "z 	c #A2C50D",
  "A 	c #A1C413",
  "B 	c #A2C70C",
  "C 	c #5B6D1F",
  "D 	c #04060A",
  "E 	c #323F11",
  "F 	c #9ABA1B",
  "G 	c #6D831E",
  "H 	c #58651D",
  "I 	c #29330F",
  "J 	c #020106",
  "K 	c #12150B",
  "L 	c #A2C60C",
  "M 	c #A2C60E",
  "N 	c #A0C310",
  "O 	c #5C6E1B",
  "P 	c #030507",
  "Q 	c #020305",
  "R 	c #040605",
  "S 	c #6E871B",
  "T 	c #9FBD20",
  "U 	c #111705",
  "V 	c #010102",
  "W 	c #2B330F",
  "X 	c #141B06",
  "Y 	c #010105",
  "Z 	c #2D3514",
  "` 	c #A3C316",
  " .	c #A3C415",
  "..	c #5C6E1D",
  "+.	c #040703",
  "@.	c #020107",
  "#.	c #030307",
  "$.	c #5D6B1C",
  "%.	c #9FC219",
  "&.	c #2D3711",
  "*.	c #010203",
  "=.	c #161B09",
  "-.	c #2C3612",
  ";.	c #A2C41B",
  ">.	c #5B6C1F",
  ",.	c #040607",
  "'.	c #010202",
  ").	c #030306",
  "!.	c #5D6B20",
  "~.	c #9FC412",
  "{.	c #A0C317",
  "].	c #161B08",
  "^.	c #283210",
  "/.	c #020209",
  "(.	c #12190A",
  "_.	c #6E8916",
  ":.	c #04070B",
  "<.	c #030406",
  "[.	c #040407",
  "}.	c #040405",
  "|.	c #5A6E1A",
  "1.	c #9FBC21",
  "2.	c #13170A",
  "3.	c #020105",
  "4.	c #2B3411",
  "5.	c #566716",
  "6.	c #020507",
  "7.	c #9CBC21",
  "8.	c #323F12",
  "9.	c #050705",
  "0.	c #5E6B1E",
  "a.	c #5E6C21",
  "b.	c #040404",
  "c.	c #020202",
  "d.	c #030606",
  "e.	c #373E1B",
  "f.	c #040302",
  "g.	c #030205",
  "h.	c #586817",
  "i.	c #93AD20",
  "j.	c #0A0C0A",
  "k.	c #020207",
  "l.	c #8BA823",
  "m.	c #9ABB1A",
  "n.	c #6E871C",
  "o.	c #9FC318",
  "p.	c #9FC315",
  "q.	c #5A6D1D",
  "r.	c #030603",
  "s.	c #010101",
  "t.	c #090C04",
  "u.	c #90AE19",
  "v.	c #596719",
  "w.	c #030207",
  "x.	c #020205",
  "y.	c #121909",
  "z.	c #6D821D",
  "A.	c #A0BE1E",
  "B.	c #A0BD21",
  "C.	c #383F1C",
  "D.	c #374114",
  "E.	c #020307",
  "F.	c #131905",
  "G.	c #2D3611",
  "H.	c #2C3610",
  "I.	c #12160A",
  "J.	c #030602",
  "K.	c #5C711B",
  "L.	c #59681B",
  "M.	c #010104",
  "N.	c #020304",
  "O.	c #030103",
  "P.	c #090C03",
  "Q.	c #040800",
  "R.	c #5A6F19",
  "S.	c #93AB20",
  "T.	c #161A09",
  "U.	c #161A08",
  "V.	c #2C3411",
  "W.	c #596817",
  "X.	c #A2C417",
  "Y.	c #5C701B",
  "Z.	c #5A6E19",
  "`.	c #A3C41C",
  " +	c #A3C612",
  ".+	c #A4C511",
  "++	c #A3C312",
  "@+	c #A2C01D",
  "#+	c #A4C220",
  "$+	c #A4C31A",
  "%+	c #A3C412",
  "&+	c #A2C413",
  "*+	c #A1C511",
  "=+	c #A1C512",
  "-+	c #A1C416",
  ";+	c #A2C60F",
  "            . . . + + @ @ @ + .             ",
  "      . . . . + + + + + + + + + . . .       ",
  "    . + . + + + + + + + + + + + + @ @ @     ",
  "  . @ # . + + $ % & * = - ; > + + , # @ .   ",
  "  . @ , ' + ) ! ~ { ] ^ / / ( _ + ' . . .   ",
  "  . + + + : < [ / } | 1 2 3 4 5 : + + + .   ",
  ". . + + 6 7 8 9 0 a b c d e f g h i + + @ @ ",
  ". + + $ j { k l m n o p q r s t ] u v + + @ ",
  ". + + % w x y z A B + C D E F G 4 { H + + @ ",
  "+ + + I J K a L M N O P Q R S T U V W + + @ ",
  "+ + + X Y Z ` .  ...+.@.#.$.%.c &.*.=.+ + + ",
  "+ + + = ^ -.c ;.>.,.g '.).!.~.{.&.] ].+ + + ",
  "+ + + ^./.(.d _.:.<.[.).J }.|.1.2.3.4.+ + + ",
  "+ + + 5./ 6.e 7.8.9.0.a.b.c.d.e.f.g.h.+ + + ",
  "@ + + i.j.k.f l.m.n.o.p.q.r.V V s.t.u.+ + + ",
  "@ @ + + v.w.x.y.z.A.# , B.C.V s.w D.+ + + @ ",
  "  . + + + : }.] E.F.G.H.I.g.V w c.J.K.+ .   ",
  "  . . . ' + L.j ~ M.N.] ~ O.P.D.J.Q.R.@ .   ",
  "  . + # , + + S.H W T.U.V.W.u.X.Y.Z.`.@ .   ",
  "    . @ @ +  +.+++++@+#+$+%++ &++ . + .     ",
  "      . . . + @ @ @ @ *+=+-+. ;+. . .       ",
  "            @ @ @ + + + + + @ @             "};
  

From ossp-cvs-owner@ossp.org  Tue Nov 19 20:42:15 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1C0B176A63; Tue, 19 Nov 2002 20:42:15 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq TODO titassist.cpp titraq.cpp titraq.h tit...
Message-Id: <20021119194215.1C0B176A63@mail.ossp.org>
Date: Tue, 19 Nov 2002 20:42:15 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   19-Nov-2002 20:42:15
  Branch: HEAD                             Handle: 2002111919421400

  Modified files:
    ossp-pkg/titraq         TODO titassist.cpp titraq.cpp titraq.h titslot.cpp

  Log:
    Radical optimization of widget initialization and refresh. Removal of excess
    baggage in daily table. Addition of editing section. Apply new image logic.
    Reworked layouts. Improved task selection.

  Summary:
    Revision    Changes     Path
    1.7         +1  -0      ossp-pkg/titraq/TODO
    1.4         +117 -102   ossp-pkg/titraq/titassist.cpp
    1.16        +1  -1      ossp-pkg/titraq/titraq.cpp
    1.13        +15 -5      ossp-pkg/titraq/titraq.h
    1.3         +7  -7      ossp-pkg/titraq/titslot.cpp
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/TODO
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 TODO
  --- ossp-pkg/titraq/TODO	14 Nov 2002 18:19:29 -0000	1.6
  +++ ossp-pkg/titraq/TODO	19 Nov 2002 19:42:14 -0000	1.7
  @@ -22,6 +22,7 @@
   
   Document
   --------
  +Use doxygen for C++ interface documentation.
   
   Project plan
   ------------
  Index: ossp-pkg/titraq/titassist.cpp
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 titassist.cpp
  --- ossp-pkg/titraq/titassist.cpp	19 Nov 2002 08:17:44 -0000	1.3
  +++ ossp-pkg/titraq/titassist.cpp	19 Nov 2002 19:42:14 -0000	1.4
  @@ -1,10 +1,9 @@
   // Qt headers
   #include <qtooltip.h>
   #include <qwhatsthis.h>
  -#include <qdatetimeedit.h>
  -#include <qspinbox.h>
   #include <qstringlist.h>
   #include <qcombobox.h>
  +#include <qlistbox.h>
   #include <qcursor.h>
   
   // User interface
  @@ -12,9 +11,10 @@
   #include "titrex.h"             // Exception classes
   
   // Icon pixel maps
  -#include "gfx/cw.xpm"           // static const char *s_kpcCw_xpm[]
  +#include "gfx/cwlogo.xpm"       // static const char *s_kpcCwlogo_xpm[]
  +#include "gfx/osspicon.xpm"     // static const char *s_kpcOsspicon_xpm[]
   #include "gfx/ossplogo.xpm"     // static const char *s_kpcOssplogo_xpm[]
  -#include "gfx/qtlogo.xpm"       // static const char *s_kpcQtlogo_xpm[]
  +#include "gfx/qticon.xpm"       // static const char *s_kpcQticon_xpm[]
   #include "gfx/filenew.xpm"      // static const char *s_kpcFilenew_xpm[]
   #include "gfx/fileopen.xpm"     // static const char *s_kpcFileopen_xpm[]
   #include "gfx/filesave.xpm"     // static const char *s_kpcFilesave_xpm[]
  @@ -27,9 +27,10 @@
   void Titraqform::setupIcons(void)
   {
       // Initialize icon images
  -    m_pCwicon = new QImage(s_kpcCwlogo_xpm);
  -    m_pOsspicon = new QImage(s_kpcOssplogo_xpm);
  -    m_pQticon = new QImage(s_kpcQtlogo_xpm);
  +    m_pCwlogo = new QImage(s_kpcCwlogo_xpm);
  +    m_pOsspicon = new QImage(s_kpcOsspicon_xpm);
  +    m_pOssplogo = new QImage(s_kpcOssplogo_xpm);
  +    m_pQticon = new QImage(s_kpcQticon_xpm);
       m_pNewicon = new QImage(s_kpcFilenew_xpm);
       m_pOpenicon = new QImage(s_kpcFileopen_xpm);
       m_pSaveicon = new QImage(s_kpcFilesave_xpm);
  @@ -211,16 +212,21 @@
       m_pCenframe->setFrameShadow(QFrame::Sunken);
       setCentralWidget(m_pCenframe);
   
  -    // Layout controls for table, buttons, and status line
  +    // Layout controls for table, editing widgets, and buttons
       m_pMainlayout = new QVBoxLayout(m_pCenframe, 10, 6, "Mainlayout");  // For layouts
       m_pPackagelayout = new QVBoxLayout(0, 0, 6, "Packagelayout");       // For table
  +    m_pDatelayout = new QHBoxLayout(0, 0, 6, "Datelayout");             // For dates
  +    m_pTasklayout = new QHBoxLayout(0, 0, 6, "Tasklayout");             // For tasks
       m_pControllayout = new QHBoxLayout(0, 0, 6, "Controllayout");       // For buttons
   
  -    if (!(m_pMainlayout && m_pMainlayout && m_pMainlayout))             // Sanity check
  +    // Major sanity check wrapped in one call
  +    if (!(m_pMainlayout && m_pPackagelayout && m_pDatelayout && m_pTasklayout && m_pControllayout))
           throw Genexcept("Main window layout creation failed.");
   
       // Specify ordering of the layouts
       m_pMainlayout->addLayout(m_pPackagelayout);
  +    m_pMainlayout->addLayout(m_pDatelayout);
  +    m_pMainlayout->addLayout(m_pTasklayout);
       m_pMainlayout->addLayout(m_pControllayout);
   }
   
  @@ -245,125 +251,134 @@
           throw Genexcept("Main window table creation failed.");
       m_pMaintable->setNumRows(g_knRows);
       m_pMaintable->setNumCols(g_knCols);
  -    m_pMaintable->setReadOnly(false);                   // Not read only
  -    m_pMaintable->setColumnMovingEnabled(true);         // Ctrl-drag of headers
  +    m_pMaintable->setReadOnly(true);                    // Table is read only
  +    m_pMaintable->setColumnMovingEnabled(false);        // Ctrl-drag disabled
       m_pMaintable->setSelectionMode(QTable::MultiRow);   // Multi row selection
       m_pMaintable->setLeftMargin(0);             // Get rid of the vertical header
       m_pMaintable->verticalHeader()->hide();     // by hiding it with a margin of 0
       m_pMaintable->horizontalHeader()->setResizeEnabled(false);
  -    m_pMaintable->setColumnStretchable(5, true);
  +    m_pMaintable->setColumnStretchable(g_knCols - 1, true);
  +    m_pMaintable->setSorting(true);
   
       // Table header row
       m_pTablehead = m_pMaintable->horizontalHeader();
  +    m_pMaintable->setHScrollBarMode(QScrollView::AlwaysOff);
       m_pTablehead->setLabel(0, QObject::trUtf8("Date"), 96);
       m_pTablehead->setLabel(1, QObject::trUtf8("Begin"), 80);
       m_pTablehead->setLabel(2, QObject::trUtf8("End"), 80);
       m_pTablehead->setLabel(3, QObject::trUtf8("Amount"), 52);
       m_pTablehead->setLabel(4, QObject::trUtf8("Task"), 70);
       m_pTablehead->setLabel(5, QObject::trUtf8("Remark"));
  -    m_pTablehead->setMovingEnabled(true);
  -
  -    // Icon image items
  -    QPixmap Osspminipix(QPixmap(m_pOsspicon->scaleHeight(m_pMaintable->rowHeight(6))));
  -    m_pMaintable->setItem(0, 0, new QTableItem(m_pMaintable, QTableItem::Never, "OSSP trac"));
  -    m_pMaintable->setPixmap(0, 0, Osspminipix);
   
   //    // Make a generic table item for all rows
  -//    for (int i = 1; i < knRows; ++i)
  -//        m_pMaintable->setItem(i, 0, new QTableItem(m_pMaintable, QTableItem::Always, ("Enter")));
  -
  -    // Make the date selector for all rows
  -    for (int i = 1; i < g_knRows; ++i) {
  -        QDate *pSylvestre = new QDate(2002, 12, 31);
  -        QDateEdit *pDateEdit = new QDateEdit(*pSylvestre, m_pMaintable, "Date");
  -        m_pMaintable->setCellWidget(i, 0, pDateEdit);
  -    }
  -
  -    // Make the time start selector for all rows
  -    for (int i = 0; i < g_knRows; ++i) {
  -        QTimeEdit *pStart = new QTimeEdit(QTime::currentTime(), m_pMaintable, "Start");
  -        m_pMaintable->setCellWidget(i, 1, pStart);
  -    }
  +//    for (int i = 0; i < g_knRows; ++i)
  +//        m_pMaintable->setItem(i, 0, new QTableItem(m_pMaintable, QTableItem::WhenCurrent, NULL));
   
  -    // Make the time end selector for all rows
  -    for (int i = 0; i < g_knRows; ++i) {
  -        QTimeEdit *pEnd = new QTimeEdit(QTime::currentTime(), m_pMaintable, "End");
  -        m_pMaintable->setCellWidget(i, 2, pEnd);
  -    }
  +    m_pPackagelayout->addWidget(m_pMaintable); // Finally add the damn table
  +}
   
  -    // Make the amount selector for all rows
  -    for (int i = 0; i < g_knRows; ++i) {
  -        QSpinBox *pAmount = new QSpinBox(m_pMaintable, "Amount");
  -        m_pMaintable->setCellWidget(i, 3, pAmount);
  -    }
  +//
  +// Construct the bottom edit widgets
  +//
  +void Titraqform::setupEditlay(void)
  +{
  +    // Make the date selector
  +    QDate Sylvestre(2002, 12, 31);
  +    QDateEdit *m_pDateedit = new QDateEdit(Sylvestre, m_pCenframe, "Date");
  +    if (m_pDateedit == NULL)                                        // Sanity check
  +        throw Genexcept("Main window date edit creation failed.");  // Spew errors
  +    m_pDatelayout->addWidget(m_pDateedit);                       // Finally add the date editor
  +
  +    QToolTip::add(m_pDateedit, trUtf8("Task Date"));
  +
  +    // Whatsthis info for the date editor
  +    const char *kszDateedit = trUtf8("Edit the <em>task date</em> by clicking on"
  +                                     " the year, month, or day, and then changing their"
  +                                     " values with the arrow buttons.");
  +    QWhatsThis::add(m_pDateedit, kszDateedit);
  +
  +    // Make the start time selector
  +    QTimeEdit *m_pStarttime = new QTimeEdit(QTime::currentTime(), m_pCenframe, "StartTime");
  +    if (m_pStarttime == NULL)                                       // Sanity check
  +        throw Genexcept("Main window start time creation failed."); // Spew errors
  +    m_pDatelayout->addWidget(m_pStarttime);                      // Finally add the start editor
  +
  +    QToolTip::add(m_pStarttime, trUtf8("Task Starting Time"));
  +
  +    // Whatsthis info for the time editor
  +    const char *kszStarttime = trUtf8("Edit the <em>task starting time</em> by clicking on"
  +                                      " the hour and minute, and then changing their"
  +                                      " values with the arrow buttons.");
  +    QWhatsThis::add(m_pStarttime, kszStarttime);
  +
  +    // Make the end time selector
  +    QTimeEdit *m_pEndtime = new QTimeEdit(QTime::currentTime(), m_pCenframe, "EndTime");
  +    if (m_pEndtime == NULL)                                        // Sanity check
  +        throw Genexcept("Main window end time creation failed.");  // Spew errors
  +    m_pDatelayout->addWidget(m_pEndtime);                       // Finally add the end editor
  +
  +    QToolTip::add(m_pEndtime, trUtf8("Task Ending Time"));
  +
  +    // Whatsthis info for the time editor
  +    const char *kszEndtime = trUtf8("Edit the <em>task ending time</em> by clicking on"
  +                                      " the hour and minute, and then changing their"
  +                                      " values with the arrow buttons.");
  +    QWhatsThis::add(m_pEndtime, kszEndtime);
  +
  +    // Make the amount selector
  +    QSpinBox *m_pAmount = new QSpinBox(m_pCenframe, "Amount");
  +    if (m_pAmount == NULL)                                      // Sanity check
  +        throw Genexcept("Main window amount creation failed."); // Spew errors
  +    m_pDatelayout->addWidget(m_pAmount);                     // Finally add the amount editor
  +
  +    QToolTip::add(m_pAmount, trUtf8("Task Amount"));
  +
  +    // Whatsthis info for the amount editor
  +    const char *kszAmount = trUtf8("Edit the <em>task amount</em> by clicking on"
  +                                   " the amount, and then changing its"
  +                                   " value with the arrow buttons.");
  +    QWhatsThis::add(m_pAmount, kszAmount);
   
  -    // Populate the task stringlist
  +    // Populate the stringlist with fresh tasks
       m_pTaskentries = new QStringList;
       if (m_pTaskentries == NULL) // Sanity check
           throw Genexcept("Main window task entries creation failed.");
       *m_pTaskentries << trUtf8("titraq") << trUtf8("opgui") << trUtf8("email") << trUtf8("admin") << trUtf8("pmod") << trUtf8("psod") << trUtf8("meeting") << trUtf8("training");
   
  -    // Make the combobox items for all rows
  -    for (int i = 0; i < g_knRows; ++i) {
  -        QComboBox *pTasks = new QComboBox(true, m_pMaintable, "Tasks");
  -        pTasks->insertStringList(*m_pTaskentries);
  -        pTasks->setCurrentText(NULL);
  -        pTasks->setAutoCompletion(true);
  -        m_pMaintable->setCellWidget(i, 4, pTasks);
  +    // Make the combobox task edit
  +    QComboBox *m_pTasks = new QComboBox(true, m_pCenframe, "Tasks");
  +    if (m_pTasks == NULL)   // Sanity check
  +        throw Genexcept("Main window task edit creation failed.");
  +    m_pTasks->insertStringList(*m_pTaskentries);
  +    m_pTasks->setCurrentText(NULL);
  +    m_pTasks->setAutoCompletion(true);
  +
  +    // Fix the minimum width, and add an auto scroll bar to it
  +    if (m_pTasks->listBox()) {  // Motif style has no list box
  +        m_pTasks->listBox()->setHScrollBarMode(QScrollView::Auto);
  +        m_pTasks->setMinimumWidth(m_pTasks->listBox()->maxItemWidth());
       }
   
  -//    // Make the listbox for all rows
  -//    for (int i = 0; i < knRows; ++i) {
  -//        QListBox *pTasks = new QListBox(m_pMaintable, "Tasks");
  -//        pTasks->insertStringList(*pTaskentries);
  -//        pTasks->setCurrentItem(i % 8);
  -//        m_pMaintable->setCellWidget(i, 4, pTasks);
  -//    }
  -
  -//    // Populate a listbox for the task combobox
  -//    QListBox *pListasks = new QListBox(m_pMaintable);
  -//    pListasks->insertItem("titraq");
  -//    pListasks->insertItem("opgui");
  -//    pListasks->insertItem("email");
  -//    pListasks->insertItem("admin");
  -//    pListasks->insertItem("pmod");
  -//    pListasks->insertItem("psod");
  -//    pListasks->insertItem("meeting");
  -//    pListasks->insertItem("training");
  -
  -//    // Make the combobox items for all rows
  -//    for (int i = 0; i < knRows; ++i) {
  -//        QComboTableItem *pTasks = new QComboTableItem(m_pMaintable, *m_pTaskentries, false);
  -//        pTasks->setCurrentItem(i % 8);
  -//        m_pMaintable->setItem(i, 4, pTasks);
  -//    }
  +    // Finally add the task edit
  +    m_pTasklayout->addWidget(m_pTasks);
   
  -    m_pPackagelayout->addWidget(m_pMaintable); // Finally add the damn table
  -}
  -
  -//
  -// Construct the bottom output line
  -//
  -void Titraqform::setupOutput(void)
  -{
  -    // Bottom output line
  -    m_pStatus = new QLineEdit(m_pCenframe, "Status");
  -    if (m_pStatus == NULL)   // Sanity check
  -        throw Genexcept("Main window status output creation failed.");
  -    m_pStatus->setText(trUtf8("Happy birthday to Ralf"));
  -    m_pStatus->setFrameShape(QLineEdit::LineEditPanel);
  -    m_pStatus->setFrameShadow(QLineEdit::Sunken);
  -    m_pStatus->setFrame(true);
  -    m_pStatus->setReadOnly(true);
  -    QToolTip::add(m_pStatus, trUtf8("Status Line"));
  -    m_pPackagelayout->addWidget(m_pStatus); // Finally add the status bar
  -
  -    // Whatsthis info for the output line
  -    const char *kszStatouttext = trUtf8("<p><img source=\"ossplogo\"> "
  -                                "This line shows the <em>current row</em> of your accounting data."
  -                                " You can also change the data in place, or above "
  -                                "from the <b>Accounting table</b>.");
  -    QWhatsThis::add(m_pStatus, kszStatouttext);
  +    // Make the Remark line
  +    m_pRemark = new QLineEdit(m_pCenframe, "Remark");
  +    if (m_pRemark == NULL)  // Sanity check
  +        throw Genexcept("Main window remark line creation failed.");
  +    m_pRemark->setText(trUtf8("Happy birthday to Ralf"));
  +    m_pRemark->setFrameShape(QLineEdit::LineEditPanel);
  +    m_pRemark->setFrameShadow(QLineEdit::Sunken);
  +    m_pRemark->setFrame(true);
  +    m_pRemark->setReadOnly(false);
  +    QToolTip::add(m_pRemark, trUtf8("Remark Line"));
  +    m_pTasklayout->addWidget(m_pRemark);    // Finally add the remark line
  +
  +    // Whatsthis info for the remark line
  +    const char *kszRemarktext = trUtf8("Edit the <em>task remarks</em> by clicking on"
  +                                       " this line control and typing the remarks you"
  +                                       " have about the task.");
  +    QWhatsThis::add(m_pRemark, kszRemarktext);
   }
   
   //
  Index: ossp-pkg/titraq/titraq.cpp
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 titraq.cpp
  --- ossp-pkg/titraq/titraq.cpp	18 Nov 2002 23:34:17 -0000	1.15
  +++ ossp-pkg/titraq/titraq.cpp	19 Nov 2002 19:42:14 -0000	1.16
  @@ -45,7 +45,7 @@
           setupCentralwidget();
           setupStatusbar();
           setupTable();
  -        setupOutput();
  +        setupEditlay();
           setupButtons();
       }
       catch (Genexcept& Genex) {
  Index: ossp-pkg/titraq/titraq.h
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 titraq.h
  --- ossp-pkg/titraq/titraq.h	19 Nov 2002 08:17:44 -0000	1.12
  +++ ossp-pkg/titraq/titraq.h	19 Nov 2002 19:42:14 -0000	1.13
  @@ -10,6 +10,8 @@
   #include <qstatusbar.h>
   #include <qimage.h>
   #include <qpushbutton.h>
  +#include <qdatetimeedit.h>
  +#include <qspinbox.h>
   #include <qlineedit.h>
   #include <qlayout.h>
   
  @@ -43,23 +45,29 @@
       QStringList *m_pTaskentries;
   
       // Reusable graphics
  -    QImage      *m_pCwicon;
  +    QImage      *m_pCwlogo;
       QImage      *m_pOsspicon;
  +    QImage      *m_pOssplogo;
       QImage      *m_pQticon;
       QImage      *m_pNewicon;
       QImage      *m_pOpenicon;
       QImage      *m_pSaveicon;
       QImage      *m_pWhatsicon;
   
  +    // Edition widgets
  +    QDateEdit   *m_pDateedit;
  +    QTimeEdit   *m_pStarttime;
  +    QTimeEdit   *m_pEndtime;
  +    QSpinBox    *m_pAmount;
  +    QComboBox   *m_pTasks;
  +    QLineEdit   *m_pRemark;
  +
       // Push buttons in control layout
       QPushButton *m_pAddbutton;
       QPushButton *m_pDeletebutton;
       QPushButton *m_pWritebutton;
       QPushButton *m_pQuitbutton;
   
  -    // Line edit for status
  -    QLineEdit *m_pStatus;
  -
   protected slots:
       virtual void init(void);            // Override init to include custom controls
       void addEntry(void);                // Add a task entry to the list
  @@ -82,6 +90,8 @@
       QFrame      *m_pCenframe;           // Central frame
       QVBoxLayout *m_pMainlayout;         // Package and control layouts
       QVBoxLayout *m_pPackagelayout;      // Main table control
  +    QHBoxLayout *m_pDatelayout;         // Lower date and time widgets
  +    QHBoxLayout *m_pTasklayout;         // Lower task and remark widgets
       QHBoxLayout *m_pControllayout;      // Lower control buttons
   
   private:
  @@ -107,7 +117,7 @@
       void setupStatusbar(void);          // Status bar
       void setupCentralwidget(void);      // Assemble main Frame widget
       void setupTable(void);              // Table widget
  -    void setupOutput(void);             // Output widget
  +    void setupEditlay(void);            // Editing lay
       void setupButtons(void);            // Push button widgets
       void setupPieces(void);             // Assemble widget pieces
   };
  Index: ossp-pkg/titraq/titslot.cpp
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 titslot.cpp
  --- ossp-pkg/titraq/titslot.cpp	19 Nov 2002 08:17:44 -0000	1.2
  +++ ossp-pkg/titraq/titslot.cpp	19 Nov 2002 19:42:14 -0000	1.3
  @@ -75,8 +75,8 @@
           return;
   
       QTextStream Textstream(&Filetemp);  // Convert the file contents to a stream
  -    m_pStatus->setText(Textstream.read());
  -    m_pStatus->setEdited(false);
  +    m_pRemark->setText(Textstream.read());
  +    m_pRemark->setEdited(false);
       setCaption(Filestring);
       m_pStatbar->message(trUtf8("Loaded document ") + Filestring, 4000);
   }
  @@ -93,7 +93,7 @@
       }
   
       // Try to read the status text, and write it to a file
  -    QString Statustext = m_pStatus->text();
  +    QString Statustext = m_pRemark->text();
       QFile Filetemp(*m_szFilename);
       if (!Filetemp.open(IO_WriteOnly)) {
           m_pStatbar->message(QString(trUtf8("Could not write to %1")).arg(*m_szFilename), 4000);
  @@ -106,7 +106,7 @@
       Filetemp.close();
   
       // Reset the text line, and give output to main window
  -    m_pStatus->setEdited(FALSE);
  +    m_pRemark->setEdited(FALSE);
       setCaption(*m_szFilename);
       m_pStatbar->message(QString(trUtf8("File %1 saved")).arg(*m_szFilename), 4000);
       m_bDirt = false;    // Set the clean state to allow a close operation
  @@ -121,7 +121,7 @@
       QString Filestring = QFileDialog::getSaveFileName(QString::null, QString::null, this);
       if (!Filestring.isEmpty()) {
           *m_szFilename = Filestring;
  -        m_pStatus->setText(*m_szFilename);
  +        m_pRemark->setText(*m_szFilename);
           save(); // Finish off by calling the save action
       }
       else {
  @@ -182,7 +182,7 @@
           QMessageBox::NoButton, QMessageBox::NoButton,
           NULL, "Titraqmessage", true, Qt::WStyle_NormalBorder);
   
  -    pCwmsg->setIconPixmap(QPixmap(*m_pCwicon));
  +    pCwmsg->setIconPixmap(QPixmap(*m_pCwlogo));
       pCwmsg->exec();
   }
   
  @@ -202,7 +202,7 @@
           QMessageBox::NoButton, QMessageBox::NoButton,
           NULL, "Osspmessage", true, Qt::WStyle_NormalBorder);
   
  -    pOsspmsg->setIconPixmap(QPixmap(*m_pOsspicon));
  +    pOsspmsg->setIconPixmap(QPixmap(*m_pOssplogo));
       pOsspmsg->exec();
   }
   

From ossp-cvs-owner@ossp.org  Tue Nov 19 21:29:09 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C92B376A69; Tue, 19 Nov 2002 21:29:08 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq titassist.cpp titraq.h titslot.cpp
Message-Id: <20021119202908.C92B376A69@mail.ossp.org>
Date: Tue, 19 Nov 2002 21:29:08 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   19-Nov-2002 21:29:08
  Branch: HEAD                             Handle: 2002111920290800

  Modified files:
    ossp-pkg/titraq         titassist.cpp titraq.h titslot.cpp

  Log:
    Added edit and view drop down menus, enhanced existing ones.

  Summary:
    Revision    Changes     Path
    1.5         +28 -4      ossp-pkg/titraq/titassist.cpp
    1.14        +8  -0      ossp-pkg/titraq/titraq.h
    1.4         +72 -0      ossp-pkg/titraq/titslot.cpp
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/titassist.cpp
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 titassist.cpp
  --- ossp-pkg/titraq/titassist.cpp	19 Nov 2002 19:42:14 -0000	1.4
  +++ ossp-pkg/titraq/titassist.cpp	19 Nov 2002 20:29:08 -0000	1.5
  @@ -69,6 +69,30 @@
       pFilepopup->insertSeparator();
       m_pFilequitact->addTo(pFilepopup);
   
  +    // Construct and populate the edit menu with subitems
  +    QPopupMenu *pEditpopup = new QPopupMenu(this);
  +    if (pEditpopup == NULL) // Sanity check
  +        throw Genexcept("Main window edit popup creation failed.");
  +    m_pMenubar->insertItem(trUtf8("&Edit"), pEditpopup);
  +    pEditpopup->insertItem("Cu&t", this, SLOT(cut()), CTRL+Key_X);
  +    pEditpopup->insertItem("&Copy", this, SLOT(copy()), CTRL+Key_C);
  +    pEditpopup->insertItem("&Paste", this, SLOT(paste()), CTRL+Key_V);
  +    pEditpopup->insertSeparator();
  +    pEditpopup->insertItem("&Add", this, SLOT(addEntry()), CTRL+Key_A);
  +    pEditpopup->insertItem("&Delete", this, SLOT(delEntry()), Key_Delete);
  +    pEditpopup->insertItem("Select &All", this, SLOT(selAll()), CTRL+Key_A);
  +    pEditpopup->insertSeparator();
  +    pEditpopup->insertItem("Preferences...", this, SLOT(configPrefs()));
  +
  +    // Construct and populate the view menu with subitems
  +    QPopupMenu *pViewpopup = new QPopupMenu(this);
  +    if (pViewpopup == NULL) // Sanity check
  +        throw Genexcept("Main window view popup creation failed.");
  +    m_pMenubar->insertItem(trUtf8("&View"), pViewpopup);
  +    pViewpopup->insertItem(trUtf8("&Normal"), this, SLOT(normalView()));
  +    pViewpopup->insertItem(trUtf8("&Editing"), this, SLOT(editingView()));
  +    pViewpopup->insertItem(trUtf8("&Timing"), this, SLOT(timingView()));
  +
       // Pad spacing to force help menu to appear far right
       m_pMenubar->insertSeparator();
   
  @@ -91,7 +115,7 @@
   void Titraqform::setupActions(void)
   {
       // File new action
  -    m_pFilenewact = new QAction(trUtf8("New File"), QPixmap(s_kpcFilenew_xpm), trUtf8("&New"), CTRL+Key_N, this, "New");
  +    m_pFilenewact = new QAction(trUtf8("New File"), QPixmap(s_kpcFilenew_xpm), trUtf8("&New..."), CTRL+Key_N, this, "New");
       if (m_pFilenewact == NULL) // Sanity check
           throw Genexcept("Main window file new action creation failed.");
       connect(m_pFilenewact, SIGNAL(activated()), this, SLOT(newDoc()));
  @@ -103,7 +127,7 @@
       m_pFilenewact->setWhatsThis(kszFilenewtext);
   
       // File open action
  -    m_pFileopenact = new QAction(trUtf8("Open File"), QPixmap(s_kpcFileopen_xpm), trUtf8("&Open"), CTRL+Key_O, this, "Open");
  +    m_pFileopenact = new QAction(trUtf8("Open File"), QPixmap(s_kpcFileopen_xpm), trUtf8("&Open..."), CTRL+Key_O, this, "Open");
       if (m_pFileopenact == NULL) // Sanity check
           throw Genexcept("Main window file open action creation failed.");
       connect(m_pFileopenact, SIGNAL(activated()), this, SLOT(choose()));
  @@ -128,7 +152,7 @@
       m_pFilesaveact->setWhatsThis(kszFilesavetext);
   
       // File save selected action
  -    m_pFilesaveasact = new QAction(trUtf8("Save File As"), trUtf8("Save &as"), 0, this, "SaveAs");
  +    m_pFilesaveasact = new QAction(trUtf8("Save File As"), trUtf8("Save &As..."), 0, this, "SaveAs");
       if (m_pFilesaveasact == NULL) // Sanity check
           throw Genexcept("Main window file save as action creation failed.");
       connect(m_pFilesaveasact, SIGNAL(activated()), this, SLOT(saveAs()));
  @@ -141,7 +165,7 @@
       connect(m_pFilecloseact, SIGNAL(activated()), this, SLOT(close()));
   
       // File quit action
  -    m_pFilequitact = new QAction(trUtf8("Exit"), trUtf8("&Exit"), CTRL+Key_Q, this, "Exit");
  +    m_pFilequitact = new QAction(trUtf8("Exit"), trUtf8("E&xit"), CTRL+Key_Q, this, "Exit");
       if (m_pFilequitact == NULL) // Sanity check
           throw Genexcept("Main window file quit action creation failed.");
       connect(m_pFilequitact, SIGNAL(activated()), qApp, SLOT(quit()));
  Index: ossp-pkg/titraq/titraq.h
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 titraq.h
  --- ossp-pkg/titraq/titraq.h	19 Nov 2002 19:42:14 -0000	1.13
  +++ ossp-pkg/titraq/titraq.h	19 Nov 2002 20:29:08 -0000	1.14
  @@ -81,6 +81,14 @@
       void about(void);                   // Learn more about this program itself
       void aboutOSSP(void);               // Learn more about the OSSP
       void aboutQt(void);                 // Learn more about Qt
  +    void cut(void);                     // Edit menu cut
  +    void copy(void);                    // Edit menu copy
  +    void paste(void);                   // Edit menu paste
  +    void selAll(void);                  // Edit menu select all
  +    void configPrefs(void);             // Edit menu configure preferences
  +    void normalView(void);              // View menu normal
  +    void editingView(void);             // View menu editing
  +    void timingView(void);              // View menu timing
   
   protected:
       // Application main events
  Index: ossp-pkg/titraq/titslot.cpp
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 titslot.cpp
  --- ossp-pkg/titraq/titslot.cpp	19 Nov 2002 19:42:14 -0000	1.3
  +++ ossp-pkg/titraq/titslot.cpp	19 Nov 2002 20:29:08 -0000	1.4
  @@ -168,6 +168,78 @@
   }
   
   //
  +// Edit menu cut
  +//
  +void Titraqform::cut(void)
  +{
  +    Prototype Unimp;
  +    Unimp.doMbox();
  +}
  +
  +//
  +// Edit menu copy
  +//
  +void Titraqform::copy(void)
  +{
  +    Prototype Unimp;
  +    Unimp.doMbox();
  +}
  +
  +//
  +// Edit menu paste
  +//
  +void Titraqform::paste(void)
  +{
  +    Prototype Unimp;
  +    Unimp.doMbox();
  +}
  +
  +//
  +// Edit menu select all entries
  +//
  +void Titraqform::selAll(void)
  +{
  +    Prototype Unimp;
  +    Unimp.doMbox();
  +}
  +
  +//
  +// Edit menu configure preferences
  +//
  +void Titraqform::configPrefs(void)
  +{
  +    Prototype Unimp;
  +    Unimp.doMbox();
  +}
  +
  +//
  +// View menu normal
  +//
  +void Titraqform::normalView(void)
  +{
  +    Prototype Unimp;
  +    Unimp.doMbox();
  +}
  +
  +//
  +// View menu editing
  +//
  +void Titraqform::editingView(void)
  +{
  +    Prototype Unimp;
  +    Unimp.doMbox();
  +}
  +
  +//
  +// View menu timing
  +//
  +void Titraqform::timingView(void)
  +{
  +    Prototype Unimp;
  +    Unimp.doMbox();
  +}
  +
  +//
   // Learn more about this program itself
   //
   void Titraqform::about(void)

From ossp-cvs-owner@ossp.org  Tue Nov 19 21:36:43 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B9CD376A63; Tue, 19 Nov 2002 21:36:43 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq titraq_test.sh
Message-Id: <20021119203643.B9CD376A63@mail.ossp.org>
Date: Tue, 19 Nov 2002 21:36:43 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   19-Nov-2002 21:36:43
  Branch: HEAD                             Handle: 2002111920364300

  Modified files:
    ossp-pkg/titraq         titraq_test.sh

  Log:
    So that we can do 'make check' and something happens.

  Summary:
    Revision    Changes     Path
    1.2         +3  -1      ossp-pkg/titraq/titraq_test.sh
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/titraq_test.sh
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 titraq_test.sh
  --- ossp-pkg/titraq/titraq_test.sh	21 Oct 2002 15:19:37 -0000	1.1.1.1
  +++ ossp-pkg/titraq/titraq_test.sh	19 Nov 2002 20:36:43 -0000	1.2
  @@ -1 +1,3 @@
  -echo "Sorry, this test doesn't do anything yet."
  +#! /bin/sh
  +./titraq
  +

From ossp-cvs-owner@ossp.org  Tue Nov 19 23:20:53 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E905B76A65; Tue, 19 Nov 2002 23:20:52 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio_hello.c
Message-Id: <20021119222052.E905B76A65@mail.ossp.org>
Date: Tue, 19 Nov 2002 23:20:52 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   19-Nov-2002 23:20:52
  Branch: HEAD                             Handle: 2002111922205200

  Modified files:
    ossp-pkg/sio            sio_hello.c

  Log:
    remove extra empty line

  Summary:
    Revision    Changes     Path
    1.8         +0  -1      ossp-pkg/sio/sio_hello.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio_hello.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 sio_hello.c
  --- ossp-pkg/sio/sio_hello.c	14 Nov 2002 15:56:10 -0000	1.7
  +++ ossp-pkg/sio/sio_hello.c	19 Nov 2002 22:20:52 -0000	1.8
  @@ -1,4 +1,3 @@
  -
   #include <stdlib.h>
   #include <string.h>
   #include <assert.h>

From ossp-cvs-owner@ossp.org  Tue Nov 19 23:29:20 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 85C2B76A65; Tue, 19 Nov 2002 23:29:20 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio_bio.c
Message-Id: <20021119222920.85C2B76A65@mail.ossp.org>
Date: Tue, 19 Nov 2002 23:29:20 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   19-Nov-2002 23:29:20
  Branch: HEAD                             Handle: 2002111922292000

  Modified files:
    ossp-pkg/sio            sio_bio.c

  Log:
    support errors, do I/O loops

  Summary:
    Revision    Changes     Path
    1.2         +42 -10     ossp-pkg/sio/sio_bio.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio_bio.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 sio_bio.c
  --- ossp-pkg/sio/sio_bio.c	19 Nov 2002 15:54:51 -0000	1.1
  +++ ossp-pkg/sio/sio_bio.c	19 Nov 2002 22:29:20 -0000	1.2
  @@ -12,7 +12,10 @@
       size_t inputsize;
       al_label_t data_label;
       al_label_t eof_label;
  -    char eof;
  +    al_label_t error_label;
  +    char       eof;
  +    char       error;
  +    size_t     total;
   } private_t;
   
   /*
  @@ -31,9 +34,11 @@
   
       my->bio          = NULL;
       my->eof          = '\0';
  +    my->error        = '\0';
   
  -    sio_label(sio, SIO_LN_DATA, &my->data_label);
  -    sio_label(sio, SIO_LN_EOF, &my->eof_label);
  +    sio_label(sio, SIO_LN_DATA,  &my->data_label);
  +    sio_label(sio, SIO_LN_EOF,   &my->eof_label);
  +    sio_label(sio, SIO_LN_ERROR, &my->error_label);
   
       *u = my;
   
  @@ -115,11 +120,19 @@
       if (n == 0 || n > my->inputsize)
           n = my->inputsize;
       p = malloc(n);
  -    n = BIO_read(my->bio, p, n);
   
  -    if (n == 0 && !BIO_should_read(my->bio))
  -        al_append_bytes(al, &my->eof, sizeof(my->eof), my->eof_label);
  -    else
  +    if (p != NULL)
  +        do {
  +            n = BIO_read(my->bio, p, n);
  +        } while (n <= 0 && BIO_should_retry(my->bio));
  +
  +    if (p == NULL || n <= 0) {
  +        free(p);
  +        if (n < -1)
  +            al_append_bytes(al, &my->error, sizeof(my->error), my->error_label);
  +        else
  +            al_append_bytes(al, &my->eof, sizeof(my->eof), my->eof_label);
  +    } else
           al_attach_buffer(al, p, n, my->data_label, freebiobuf, NULL);
   
       return SIO_SCHED_DOWN;
  @@ -129,17 +142,36 @@
   al_rc_t siobio_write_chunk(al_chunk_t *alc, void *u)
   {
       private_t *my = (private_t *)u;
  +    al_rc_t arc = AL_OK;
   
  -    if (al_same_label(alc, my->data_label))
  -        BIO_write(my->bio, al_chunk_ptr(alc, 0), al_chunk_len(alc));
  +    if (al_same_label(alc, my->data_label)) {
  +        char *p = al_chunk_ptr(alc, 0);
  +        int   n = al_chunk_len(alc);
  +        int   i, t;
  +
  +        for (t=0; t<n; t+=i) {
  +            i = BIO_write(my->bio, p+t, n-t);
  +            if (i <= 0) {
  +                if (!BIO_should_retry(my->bio)) {
  +                    arc = AL_ERR_EOF;
  +                    break;
  +                }
  +                i = 0;
  +            }
  +            my->total += i;
  +        }
  +    } else {
  +        my->total += al_chunk_len(alc);
  +    }
   
  -    return AL_OK;
  +    return arc;
   }
   static
   sio_rc_t siobio_output(sio_t *sio, al_t *al, void *u)
   {
       private_t *my = (private_t *)u;
   
  +    my->total = 0;
       al_traverse_cb(al, 0, al_bytes(al), AL_FORWARD, my->data_label,
                      siobio_write_chunk, (void *)my);
   

From ossp-cvs-owner@ossp.org  Tue Nov 19 23:30:09 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 203FF76A65; Tue, 19 Nov 2002 23:30:09 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio_test.c
Message-Id: <20021119223009.203FF76A65@mail.ossp.org>
Date: Tue, 19 Nov 2002 23:30:09 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   19-Nov-2002 23:30:09
  Branch: HEAD                             Handle: 2002111922300700

  Modified files:
    ossp-pkg/sio            sio_test.c

  Log:
    use BIO_f_ssl as source/sink on top of sa socket

  Summary:
    Revision    Changes     Path
    1.4         +21 -5      ossp-pkg/sio/sio_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio_test.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 sio_test.c
  --- ossp-pkg/sio/sio_test.c	19 Nov 2002 15:54:51 -0000	1.3
  +++ ossp-pkg/sio/sio_test.c	19 Nov 2002 22:30:07 -0000	1.4
  @@ -14,9 +14,13 @@
   
   #define e(f) rc = f; printf("%s = %s\n",#f, sio_error(rc)); fflush(stdout);
   #define s(f) src = f; printf("%s = %s\n",#f, sa_error(src)); fflush(stdout);
  +#define n(f) rn = f; printf("%s = %d\n",#f, rn); fflush(stdout);
  +#define p(f) rp = f; printf("%s = %p\n",#f, rp); fflush(stdout);
   
   int main(int argc, char *argv[])
   {
  +    int rn;
  +    void *rp;
       sio_rc_t rc;
       sio_t *sio;
       sio_stage_t *sios_bio, *sios_hello, *sios_buffer;
  @@ -27,7 +31,8 @@
       char *uri;
   
       int fd;
  -    BIO *bio;
  +    SSL_CTX *ctx;
  +    BIO *bio, *sbio;
   
       char buf[] = "Hello world\n";
   
  @@ -44,6 +49,12 @@
       s(sa_addr_destroy(saa));
       uri = NULL;
   
  +    OpenSSL_add_ssl_algorithms();
  +    ctx = SSL_CTX_new(SSLv23_server_method());
  +
  +    SSL_CTX_use_certificate_file(ctx, "/u/mlelstv/ssl/server.crt", SSL_FILETYPE_PEM);
  +    SSL_CTX_use_PrivateKey_file(ctx, "/u/mlelstv/ssl/server.key", SSL_FILETYPE_PEM);
  +
       e(sio_create(&sio));
       e(sio_create_stage(sio, &sio_module_bio, &sios_bio));
       e(sio_create_stage(sio, &sio_module_hello, &sios_hello));
  @@ -64,12 +75,13 @@
           printf("Connection from %s\n",uri);
           s(sa_addr_destroy(saa));
   
  +        s(sa_getfd(sa, &fd));
  +        p(bio = BIO_new_socket(fd, 0));
   
  -        bio = BIO_new(BIO_s_socket());
  -        sa_getfd(sa, &fd);
  -        BIO_set_fd(bio, fd, 0);
  +        p(sbio = BIO_new_ssl(ctx,0));
  +        p(BIO_push(sbio,bio));
   
  -        e(sio_configure_stage(sio, sios_bio, "bio", bio));
  +        e(sio_configure_stage(sio, sios_bio, "bio", sbio));
   
           e(sio_attach(sio, sios_buffer, SIO_MODE_WRITE));
           e(sio_attach(sio, sios_hello, SIO_MODE_READWRITE));
  @@ -81,6 +93,10 @@
           e(sio_detach(sio, sios_bio));
           e(sio_detach(sio, sios_hello));
           e(sio_detach(sio, sios_buffer));
  +
  +        BIO_pop(bio);
  +        BIO_free(sbio);
  +        BIO_free(bio);
   
           sa_destroy(sa);
       }

From ossp-cvs-owner@ossp.org  Wed Nov 20 12:06:33 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BA7B176A5B; Wed, 20 Nov 2002 12:06:32 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq Makefile.in titassist.cpp titraq.cpp titra...
Message-Id: <20021120110632.BA7B176A5B@mail.ossp.org>
Date: Wed, 20 Nov 2002 12:06:32 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   20-Nov-2002 12:06:32
  Branch: HEAD                             Handle: 2002112011063200

  Modified files:
    ossp-pkg/titraq         Makefile.in titassist.cpp titraq.cpp titraq.h
                            titslot.cpp

  Log:
    Save time and resources by loading pixmaps on demand only. Removed some icons
    to unclutter the screen estate.

  Summary:
    Revision    Changes     Path
    1.10        +0  -1      ossp-pkg/titraq/Makefile.in
    1.6         +15 -38     ossp-pkg/titraq/titassist.cpp
    1.17        +0  -1      ossp-pkg/titraq/titraq.cpp
    1.15        +2  -12     ossp-pkg/titraq/titraq.h
    1.5         +16 -3      ossp-pkg/titraq/titslot.cpp
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/Makefile.in
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 Makefile.in
  --- ossp-pkg/titraq/Makefile.in	18 Nov 2002 22:38:04 -0000	1.9
  +++ ossp-pkg/titraq/Makefile.in	20 Nov 2002 11:06:32 -0000	1.10
  @@ -149,7 +149,6 @@
   
   check: test
   test: titraq
  -	$(CHMOD) 755 titraq_test.sh > /dev/null 2>&1
   	./titraq_test.sh
   
   .PHONY: install uninstall clean distclean realclean check test
  Index: ossp-pkg/titraq/titassist.cpp
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 titassist.cpp
  --- ossp-pkg/titraq/titassist.cpp	19 Nov 2002 20:29:08 -0000	1.5
  +++ ossp-pkg/titraq/titassist.cpp	20 Nov 2002 11:06:32 -0000	1.6
  @@ -11,38 +11,14 @@
   #include "titrex.h"             // Exception classes
   
   // Icon pixel maps
  -#include "gfx/cwlogo.xpm"       // static const char *s_kpcCwlogo_xpm[]
  -#include "gfx/osspicon.xpm"     // static const char *s_kpcOsspicon_xpm[]
  -#include "gfx/ossplogo.xpm"     // static const char *s_kpcOssplogo_xpm[]
  -#include "gfx/qticon.xpm"       // static const char *s_kpcQticon_xpm[]
   #include "gfx/filenew.xpm"      // static const char *s_kpcFilenew_xpm[]
   #include "gfx/fileopen.xpm"     // static const char *s_kpcFileopen_xpm[]
   #include "gfx/filesave.xpm"     // static const char *s_kpcFilesave_xpm[]
  +#include "gfx/osspicon.xpm"     // static const char *s_kpcOsspicon_xpm[]
   #include "gfx/whatsthis.xpm"    // static const char *s_kpcWhatsthis_xpm[]
   
   
   //
  -// Construct the icon images
  -//
  -void Titraqform::setupIcons(void)
  -{
  -    // Initialize icon images
  -    m_pCwlogo = new QImage(s_kpcCwlogo_xpm);
  -    m_pOsspicon = new QImage(s_kpcOsspicon_xpm);
  -    m_pOssplogo = new QImage(s_kpcOssplogo_xpm);
  -    m_pQticon = new QImage(s_kpcQticon_xpm);
  -    m_pNewicon = new QImage(s_kpcFilenew_xpm);
  -    m_pOpenicon = new QImage(s_kpcFileopen_xpm);
  -    m_pSaveicon = new QImage(s_kpcFilesave_xpm);
  -    m_pWhatsicon = new QImage(s_kpcWhatsthis_xpm);
  -
  -    // Lets test out our sanity
  -    if (!(m_pOsspicon && m_pQticon && m_pNewicon && m_pNewicon && \
  -          m_pOpenicon && m_pSaveicon && m_pWhatsicon))
  -        throw Genexcept("Main window icon creation failed.");
  -}
  -
  -//
   // Construct the menu bar
   //
   void Titraqform::setupMenubar(void)
  @@ -101,12 +77,13 @@
       if (pHelppopup == NULL) // Sanity check
           throw Genexcept("Main window help popup creation failed.");
       m_pMenubar->insertItem(trUtf8("&Help"), pHelppopup);
  -    pHelppopup->insertItem(trUtf8("&About"), this, SLOT(about()), Key_F1);
  +    pHelppopup->insertItem(trUtf8("&Contents"), this, SLOT(helpContents()), Key_F1);
       pHelppopup->insertSeparator();
  -    pHelppopup->insertItem(QPixmap(*m_pOsspicon), trUtf8("About &OSSP"), this, SLOT(aboutOSSP()));
  -    pHelppopup->insertItem(QPixmap(*m_pQticon), trUtf8("About &Qt"), this, SLOT(aboutQt()));
  +    pHelppopup->insertItem(trUtf8("About &Titraq"), this, SLOT(aboutTitraq()));
  +    pHelppopup->insertItem(trUtf8("About &OSSP"), this, SLOT(aboutOSSP()));
  +    pHelppopup->insertItem(trUtf8("About &Qt"), this, SLOT(aboutQt()));
       pHelppopup->insertSeparator();
  -    pHelppopup->insertItem(QPixmap(*m_pWhatsicon), trUtf8("What's &This"), this, SLOT(whatsThis()), SHIFT+Key_F1);
  +    pHelppopup->insertItem(QPixmap(s_kpcWhatsthis_xpm), trUtf8("What's &This"), this, SLOT(whatsThis()), SHIFT+Key_F1);
   }
   
   //
  @@ -114,12 +91,17 @@
   //
   void Titraqform::setupActions(void)
   {
  +    // First associate the graphics with MIME types
  +    QMimeSourceFactory::defaultFactory()->setPixmap("osspicon", QPixmap(s_kpcOsspicon_xpm));
  +    QMimeSourceFactory::defaultFactory()->setPixmap("filenew", QPixmap(s_kpcFilenew_xpm));
  +    QMimeSourceFactory::defaultFactory()->setPixmap("fileopen", QPixmap(s_kpcFileopen_xpm));
  +    QMimeSourceFactory::defaultFactory()->setPixmap("filesave", QPixmap(s_kpcFilesave_xpm));
  +
       // File new action
       m_pFilenewact = new QAction(trUtf8("New File"), QPixmap(s_kpcFilenew_xpm), trUtf8("&New..."), CTRL+Key_N, this, "New");
       if (m_pFilenewact == NULL) // Sanity check
           throw Genexcept("Main window file new action creation failed.");
       connect(m_pFilenewact, SIGNAL(activated()), this, SLOT(newDoc()));
  -    QMimeSourceFactory::defaultFactory()->setPixmap("filenew", m_pFilenewact->iconSet().pixmap());
       const char *kszFilenewtext = trUtf8("<p><img source=\"filenew\"> "
                                    "Click this button to make a <em>blank file</em>."
                                    "You can also select the <b>New</b> command "
  @@ -131,7 +113,6 @@
       if (m_pFileopenact == NULL) // Sanity check
           throw Genexcept("Main window file open action creation failed.");
       connect(m_pFileopenact, SIGNAL(activated()), this, SLOT(choose()));
  -    QMimeSourceFactory::defaultFactory()->setPixmap("fileopen", m_pFileopenact->iconSet().pixmap());
       const char *kszFileopentext = trUtf8("<p><img source=\"fileopen\"> "
                                     "Click this button to open a <em>new file</em>."
                                     "You can also select the <b>Open</b> command "
  @@ -143,7 +124,6 @@
       if (m_pFilesaveact == NULL) // Sanity check
           throw Genexcept("Main window file save action creation failed.");
       connect(m_pFilesaveact, SIGNAL(activated()), this, SLOT(save()));
  -    QMimeSourceFactory::defaultFactory()->setPixmap("filesave", m_pFilesaveact->iconSet().pixmap());
       const char *kszFilesavetext = trUtf8("<p><img source=\"filesave\"> "
                                     "Click this button to <em>save</em> the file you "
                                     "are editing. You will be prompted for a file name.\n"
  @@ -171,11 +151,10 @@
       connect(m_pFilequitact, SIGNAL(activated()), qApp, SLOT(quit()));
   
       // Add data row action
  -    m_pAddrowact = new QAction(trUtf8("Add Row"), QPixmap(s_kpcOssplogo_xpm), trUtf8("Add &row"), 0, this, "Addrow");
  +    m_pAddrowact = new QAction(trUtf8("Add Row"), trUtf8("Add &row"), 0, this, "Addrow");
       if (m_pAddrowact == NULL) // Sanity check
           throw Genexcept("Main window add row action creation failed.");
       connect(m_pAddrowact, SIGNAL(activated()), this, SLOT(addEntry()));
  -    QMimeSourceFactory::defaultFactory()->setPixmap("ossplogo", m_pAddrowact->iconSet().pixmap());
       const char *kszAddrowtext = trUtf8("<p><img source=\"ossplogo\"> "
                                   "Click this button to add a <em>new row</em>."
                                   "You can also select the <b>Add row</b> command "
  @@ -183,11 +162,10 @@
       m_pAddrowact->setWhatsThis(kszAddrowtext);
   
       // Delete data row action
  -    m_pDeleterowact = new QAction(trUtf8("Add Row"), QPixmap(s_kpcOssplogo_xpm), trUtf8("Add &row"), 0, this, "Deleterow");
  +    m_pDeleterowact = new QAction(trUtf8("Add Row"), trUtf8("Add &row"), 0, this, "Deleterow");
       if (m_pDeleterowact == NULL) // Sanity check
           throw Genexcept("Main window delete row action creation failed.");
       connect(m_pDeleterowact, SIGNAL(activated()), this, SLOT(delEntry()));
  -    QMimeSourceFactory::defaultFactory()->setPixmap("ossplogo", m_pDeleterowact->iconSet().pixmap());
       const char *kszDeleterowtext = trUtf8("<p><img source=\"ossplogo\"> "
                                      "Click this button to delete a <em>row</em>."
                                      "You can also select the <b>Delete row</b> command "
  @@ -195,11 +173,10 @@
       m_pDeleterowact->setWhatsThis(kszDeleterowtext);
   
       // Write data action
  -    m_pWritedataact = new QAction(trUtf8("Add Row"), QPixmap(s_kpcOssplogo_xpm), trUtf8("Add &row"), 0, this, "Writedata");
  +    m_pWritedataact = new QAction(trUtf8("Add Row"), trUtf8("Add &row"), 0, this, "Writedata");
       if (m_pWritedataact == NULL) // Sanity check
           throw Genexcept("Main window write data action creation failed.");
       connect(m_pWritedataact, SIGNAL(activated()), this, SLOT(writeEntry()));
  -    QMimeSourceFactory::defaultFactory()->setPixmap("ossplogo", m_pWritedataact->iconSet().pixmap());
       const char *kszWritedatatext = trUtf8("<p><img source=\"ossplogo\"> "
                                      "Click this button to <em>write out</em> your accounting data."
                                      "You can also select the <b>Write data</b> command "
  Index: ossp-pkg/titraq/titraq.cpp
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 titraq.cpp
  --- ossp-pkg/titraq/titraq.cpp	19 Nov 2002 19:42:14 -0000	1.16
  +++ ossp-pkg/titraq/titraq.cpp	20 Nov 2002 11:06:32 -0000	1.17
  @@ -38,7 +38,6 @@
   
       // Abstractly build main widgets
       try {
  -        setupIcons();
           setupActions();
           setupMenubar();
           setupFiletools();
  Index: ossp-pkg/titraq/titraq.h
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 titraq.h
  --- ossp-pkg/titraq/titraq.h	19 Nov 2002 20:29:08 -0000	1.14
  +++ ossp-pkg/titraq/titraq.h	20 Nov 2002 11:06:32 -0000	1.15
  @@ -44,16 +44,6 @@
       QHeader     *m_pTablehead;
       QStringList *m_pTaskentries;
   
  -    // Reusable graphics
  -    QImage      *m_pCwlogo;
  -    QImage      *m_pOsspicon;
  -    QImage      *m_pOssplogo;
  -    QImage      *m_pQticon;
  -    QImage      *m_pNewicon;
  -    QImage      *m_pOpenicon;
  -    QImage      *m_pSaveicon;
  -    QImage      *m_pWhatsicon;
  -
       // Edition widgets
       QDateEdit   *m_pDateedit;
       QTimeEdit   *m_pStarttime;
  @@ -78,7 +68,8 @@
       void load(const QString &);         // Load accounting data into main window
       void save(void);                    // Serialize to the current file
       void saveAs(void);                  // Serialize to a selected file
  -    void about(void);                   // Learn more about this program itself
  +    void helpContents(void);            // Use the help contents
  +    void aboutTitraq(void);             // Learn more about this program itself
       void aboutOSSP(void);               // Learn more about the OSSP
       void aboutQt(void);                 // Learn more about Qt
       void cut(void);                     // Edit menu cut
  @@ -118,7 +109,6 @@
       bool isDirty(void);                 // Check for changed state danger
   
       // Constructor helpers
  -    void setupIcons(void);              // Icons
       void setupActions(void);            // Actions
       void setupMenubar(void);            // Menu bar
       void setupFiletools(void);          // Tool bar
  Index: ossp-pkg/titraq/titslot.cpp
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 titslot.cpp
  --- ossp-pkg/titraq/titslot.cpp	19 Nov 2002 20:29:08 -0000	1.4
  +++ ossp-pkg/titraq/titslot.cpp	20 Nov 2002 11:06:32 -0000	1.5
  @@ -6,6 +6,10 @@
   #include "titraq.h"             // Main classes
   #include "generic.h"            // Generic classes
   
  +// Icon pixel maps
  +#include "gfx/cwlogo.xpm"       // static const char *s_kpcCwlogo_xpm[]
  +#include "gfx/ossplogo.xpm"     // static const char *s_kpcOssplogo_xpm[]
  +
   
   //
   // Add a blank row entry to the current data window
  @@ -240,9 +244,18 @@
   }
   
   //
  +// Get help on Titraq functionality
  +//
  +void Titraqform::helpContents(void)
  +{
  +    Prototype Unimp;
  +    Unimp.doMbox();
  +}
  +
  +//
   // Learn more about this program itself
   //
  -void Titraqform::about(void)
  +void Titraqform::aboutTitraq(void)
   {
       QMessageBox *pCwmsg = new QMessageBox("OSSP titraq",
           QObject::trUtf8("OSSP titraq is a time and task-based\n"
  @@ -254,7 +267,7 @@
           QMessageBox::NoButton, QMessageBox::NoButton,
           NULL, "Titraqmessage", true, Qt::WStyle_NormalBorder);
   
  -    pCwmsg->setIconPixmap(QPixmap(*m_pCwlogo));
  +    pCwmsg->setIconPixmap(QPixmap(s_kpcCwlogo_xpm));
       pCwmsg->exec();
   }
   
  @@ -274,7 +287,7 @@
           QMessageBox::NoButton, QMessageBox::NoButton,
           NULL, "Osspmessage", true, Qt::WStyle_NormalBorder);
   
  -    pOsspmsg->setIconPixmap(QPixmap(*m_pOssplogo));
  +    pOsspmsg->setIconPixmap(QPixmap(s_kpcOssplogo_xpm));
       pOsspmsg->exec();
   }
   

From ossp-cvs-owner@ossp.org  Wed Nov 20 20:37:28 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6090576A5B; Wed, 20 Nov 2002 20:37:28 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq titassist.cpp
Message-Id: <20021120193728.6090576A5B@mail.ossp.org>
Date: Wed, 20 Nov 2002 20:37:28 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   20-Nov-2002 20:37:28
  Branch: HEAD                             Handle: 2002112019372700

  Modified files:
    ossp-pkg/titraq         titassist.cpp

  Log:
    Fix some object allocations, and wonder why the compiler allowed a
    second definition for each class member?

  Summary:
    Revision    Changes     Path
    1.7         +5  -5      ossp-pkg/titraq/titassist.cpp
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/titassist.cpp
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 titassist.cpp
  --- ossp-pkg/titraq/titassist.cpp	20 Nov 2002 11:06:32 -0000	1.6
  +++ ossp-pkg/titraq/titassist.cpp	20 Nov 2002 19:37:27 -0000	1.7
  @@ -285,7 +285,7 @@
   {
       // Make the date selector
       QDate Sylvestre(2002, 12, 31);
  -    QDateEdit *m_pDateedit = new QDateEdit(Sylvestre, m_pCenframe, "Date");
  +    m_pDateedit = new QDateEdit(Sylvestre, m_pCenframe, "Date");
       if (m_pDateedit == NULL)                                        // Sanity check
           throw Genexcept("Main window date edit creation failed.");  // Spew errors
       m_pDatelayout->addWidget(m_pDateedit);                       // Finally add the date editor
  @@ -299,7 +299,7 @@
       QWhatsThis::add(m_pDateedit, kszDateedit);
   
       // Make the start time selector
  -    QTimeEdit *m_pStarttime = new QTimeEdit(QTime::currentTime(), m_pCenframe, "StartTime");
  +    m_pStarttime = new QTimeEdit(QTime::currentTime(), m_pCenframe, "StartTime");
       if (m_pStarttime == NULL)                                       // Sanity check
           throw Genexcept("Main window start time creation failed."); // Spew errors
       m_pDatelayout->addWidget(m_pStarttime);                      // Finally add the start editor
  @@ -313,7 +313,7 @@
       QWhatsThis::add(m_pStarttime, kszStarttime);
   
       // Make the end time selector
  -    QTimeEdit *m_pEndtime = new QTimeEdit(QTime::currentTime(), m_pCenframe, "EndTime");
  +    m_pEndtime = new QTimeEdit(QTime::currentTime(), m_pCenframe, "EndTime");
       if (m_pEndtime == NULL)                                        // Sanity check
           throw Genexcept("Main window end time creation failed.");  // Spew errors
       m_pDatelayout->addWidget(m_pEndtime);                       // Finally add the end editor
  @@ -327,7 +327,7 @@
       QWhatsThis::add(m_pEndtime, kszEndtime);
   
       // Make the amount selector
  -    QSpinBox *m_pAmount = new QSpinBox(m_pCenframe, "Amount");
  +    m_pAmount = new QSpinBox(m_pCenframe, "Amount");
       if (m_pAmount == NULL)                                      // Sanity check
           throw Genexcept("Main window amount creation failed."); // Spew errors
       m_pDatelayout->addWidget(m_pAmount);                     // Finally add the amount editor
  @@ -347,7 +347,7 @@
       *m_pTaskentries << trUtf8("titraq") << trUtf8("opgui") << trUtf8("email") << trUtf8("admin") << trUtf8("pmod") << trUtf8("psod") << trUtf8("meeting") << trUtf8("training");
   
       // Make the combobox task edit
  -    QComboBox *m_pTasks = new QComboBox(true, m_pCenframe, "Tasks");
  +    m_pTasks = new QComboBox(true, m_pCenframe, "Tasks");
       if (m_pTasks == NULL)   // Sanity check
           throw Genexcept("Main window task edit creation failed.");
       m_pTasks->insertStringList(*m_pTaskentries);

From ossp-cvs-owner@ossp.org  Wed Nov 20 21:36:39 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CD2D476A5B; Wed, 20 Nov 2002 21:36:38 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq Makefile.in
Message-Id: <20021120203638.CD2D476A5B@mail.ossp.org>
Date: Wed, 20 Nov 2002 21:36:38 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   20-Nov-2002 21:36:38
  Branch: HEAD                             Handle: 2002112020363800

  Modified files:
    ossp-pkg/titraq         Makefile.in

  Log:
    Correct MOC processing and evaluate xdt classes.

  Summary:
    Revision    Changes     Path
    1.11        +12 -13     ossp-pkg/titraq/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/Makefile.in
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 Makefile.in
  --- ossp-pkg/titraq/Makefile.in	20 Nov 2002 11:06:32 -0000	1.10
  +++ ossp-pkg/titraq/Makefile.in	20 Nov 2002 20:36:38 -0000	1.11
  @@ -65,16 +65,15 @@
   TARGET_PROGS    = titraq
   TARGET_MANS     = titraq.1 titraq.conf.5
   
  -SRCS            = main.cpp titraq.cpp titassist.cpp titslot.cpp titrex.cpp generic.cpp titraq_version.c
  +SRCS            = main.cpp titraq.cpp titassist.cpp titslot.cpp titrex.cpp generic.cpp xdtvalidate.cpp xdtspinbox.cpp titraq_version.c
   
  -OBJS            = main.o titraq.o titassist.o titslot.o titrex.o generic.o titraq_version.o
  +OBJS            = main.o titraq.o titassist.o titslot.o titrex.o generic.o xdtvalidate.o xdtspinbox.o titraq_version.o
   
   GRAFX           = gfx/ossplogo.xpm
   
  -# Qt meta object compiler
  -MOC_IN          = titraq.h
  -MOC_OUT         = moc_titraq.cpp
  -MOC_OBJ         = moc_titraq.o
  +# Qt meta object compiler (MOC) generated
  +MOC_OUT         = moc_titraq.cpp moc_xdtvalidate.cpp moc_xdtspinbox.cpp
  +MOC_OBJ         = moc_titraq.o moc_xdtvalidate.o moc_xdtspinbox.o
   
   .SUFFIXES:
   .SUFFIXES: .c .cc .cpp .cxx .o
  @@ -92,17 +91,17 @@
   
   all: Makefile $(TARGET_PROGS) $(TARGET_MANS)
   
  -#$(PROG_NAME): Makefile $(OBJS) $(MOC_OBJ) $(GRAFX)
  -#	$(CXX) $(LDFLAGS) -o $@ $(OBJS) $(MOC_OBJ) $(LIBS)
  -
   $(PROG_NAME): $(OBJS) $(MOC_OBJ)
   	$(CXX) $(LDFLAGS) -o $@ $+ $(LIBS)
   
  -$(MOC_OBJ): $(MOC_OUT) $(MOC_IN)
  -	$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $(MOC_OUT)
  +moc_titraq.cpp: titraq.h
  +	$(MOC) $+ -o $@
  +
  +moc_xdtvalidate.cpp: xdtvalidate.h
  +	$(MOC) $+ -o $@
   
  -$(MOC_OUT): $(MOC) $(MOC_IN)
  -	$(MOC) $(MOC_IN) -o $(MOC_OUT)
  +moc_xdtspinbox.cpp: xdtspinbox.h
  +	$(MOC) $+ -o $@
   
   titraq.1: titraq.pod
   	VS=`$(SHTOOL) version -lc -dshort titraq_version.c`; \

From ossp-cvs-owner@ossp.org  Wed Nov 20 21:44:34 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0A20A76A5B; Wed, 20 Nov 2002 21:44:33 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq xdtspinbox.cpp xdtspinbox.h xdtvalidate.cp...
Message-Id: <20021120204433.0A20A76A5B@mail.ossp.org>
Date: Wed, 20 Nov 2002 21:44:33 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   20-Nov-2002 21:44:33
  Branch: HEAD                             Handle: 2002112020443300

  Added files:
    ossp-pkg/titraq         xdtspinbox.cpp xdtspinbox.h xdtvalidate.cpp
                            xdtvalidate.h

  Log:
    Add new third party time and date widgets.

  Summary:
    Revision    Changes     Path
    1.1         +742 -0     ossp-pkg/titraq/xdtspinbox.cpp
    1.1         +67 -0      ossp-pkg/titraq/xdtspinbox.h
    1.1         +593 -0     ossp-pkg/titraq/xdtvalidate.cpp
    1.1         +86 -0      ossp-pkg/titraq/xdtvalidate.h
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/xdtspinbox.cpp
  ============================================================
  $ cvs update -p -r1.1 xdtspinbox.cpp
  #include <qlineedit.h>
  #include "xdtspinbox.h"
  
  /*!
  \fn QextDateTimeSpinBox::QextDateTimeSpinBox(QWidget* parent=NULL, const char* name=NULL,
      const QString* format=NULL, const QDate* date=NULL, const QTime* time=NULL, 
      const QStringList* days=NULL, const QStringList* months=NULL)
  Constructs a QextDateTimeSpinBox with date given by the date argument and time given by the 
  time argument.  The control will use the strings provided in the days and months QString arrays. 
  The date and time will be formatted as specified in the format argument, using the following 
  format specifiers:
  
  \verbatim
  %A  uppercase AM/PM indicator ("AM" or "PM")
  %a  lowercase AM/PM indicator ("am" or "pm")
  %d  Day (1-31, depending on the current month)
  %H  Hour, on a 24-hour clock (0-23)
  %h  Hour, on a 12-hour clock (1-12)
  %M  Month (1-12)
  %m  Month String ("January", "February", etc.)
  %n  Minute (0-59)
  %s  Second (0-59)
  %w  Day of the week ("Sunday", "Monday", etc.)
  %Y  4-digit year (1752-8000)
  %y  2-digit year (0-99)
  \endverbatim
  
  The specifiers can also be modified with integers - for example %3w will print the first 3 letters
  of the day of the week ("Sun", "Mon", etc.).
  
  A 0 in a specifier indicates that leading zeros will be added where applicable.  For example %0M 
  will represent January as "01".  A zero in a non-integer specifier indicates right-alignment.  
  For example %0m will represent May as "      May".  Note the leading spaces.  The length of the 
  field will be specified by the longest string in the Months member array.
  
  If for example we want the format to be 17:52:07 Tue 27 Feb 2010, the widget would be created
  like this:
  
  \code
  QString format("%0H:%n:%s %3w %d %3m %Y");
  QextDateTimeSpinBox* DateTime=new QextDateTimeSpinBox(&format);
  \endcode
    
  If the date or time arguments are NULL or unspecified, the widget will use the current date or 
  time as returned by QDate::currentDate() or QTime::currentTime().  If the daysor months 
  structures are NULL or unspecified, the default day and/or month names will be used.
  */
  QextDateTimeSpinBox::QextDateTimeSpinBox(QWidget* parent, const char* name, 
                                           const QString* format, const QDate* date, 
                                           const QTime* time, const QStringList* days,
                                           const QStringList* months):QSpinBox(parent, name) {
  
      //initialize default names for days and months
      QStringList defDays;
      QStringList defMonths;
      defDays+="Monday";
      defDays+="Tuesday";
      defDays+="Wednesday";
      defDays+="Thursday";
      defDays+="Friday";
      defDays+="Saturday";
      defDays+="Sunday";
      defMonths+="January";
      defMonths+="February";
      defMonths+="March";
      defMonths+="April";
      defMonths+="May";
      defMonths+="June"; 
      defMonths+="July";
      defMonths+="August"; 
      defMonths+="September";
      defMonths+="October";
      defMonths+="November";
      defMonths+="December";
  
      //set up display strings
      if (days) {
          if (months) {
              setStrings(*days, *months);
          }
          else {
              setStrings(*days, defMonths);
          }
      }
      else {
          if (months) {
              setStrings(defDays, *months);
          }
          else {
              setStrings(defDays, defMonths);
          }
      }
  
      //set up validator class
      Validator=new QextDateTimeValidator(this, "Date/Time Validator");
  
      //set up date
      if (date) {
          setDate(*date);
      }
      else {
          setDate(QDate::currentDate());
      }
  
      //set up time
      if (time) {
          setTime(*time);
      }
      else {
          setTime(QTime::currentTime());
      }
  
      //enable the down button when the control is first displayed   
      setValue(1);
  
      //connect to slots
      QObject::connect(editor(), SIGNAL(textChanged(const QString&)), 
              this, SLOT(onEditTextChanged(const QString&)));
  
      //set up display format
      if (format) {
          setFormat(*format);
      }
  
      //default format: e.g. "12:00:00 Mon 1 Jan 2001"
      else {
          setFormat(QString("%0H:%n:%s %3w %d %3m %Y"));
      }
  
      //initialize display
      refresh();
  }
  
  /*!
  \fn QextDateTimeSpinBox::~QextDateTimeSpinBox()
  Standard destructor.
  */
  QextDateTimeSpinBox::~QextDateTimeSpinBox() {
      delete Validator;
  }
  
  /*!
  \fn QDate QextDateTimeSpinBox::date(void) const
  Returns the most recent valid date entered into the control.  
  */
  QDate QextDateTimeSpinBox::date(void) const {
      return Date;
  }
  
  /*!
  \fn QextDateTimeValidator::Token const* QextDateTimeSpinBox::fieldFromIndex(int index) const
  returns a pointer to a QextDateTimeValidator::Token data structure pertaining to the field in the 
  editor in which the cursor lies.  Used internally.  If the value of index goes beyond the length 
  of the string contained in the editor, NULL will be returned.
  */
  QextDateTimeValidator::Token const* QextDateTimeSpinBox::fieldFromIndex(int index) {
      int CurIndex=0;
  
      //find which field cursor is in
      QextDateTimeValidator::Token const* curToken=Validator->displayFormat();
      QextDateTimeValidator::Token const* retVal=curToken;
      while (CurIndex<=index && curToken) {
          CurIndex+=fieldSize(curToken);
          retVal=curToken;
          curToken=curToken->Next;
      }
  
      //return NULL if we've passed the end of the string
      if (CurIndex<=index) {
          return NULL;
      }
      return retVal;
  }
  
  /*!
  \fn int QextDateTimeSpinBox::fieldSize(QextDateTimeValidator::Token const* Field) const
  returns the length of the token represented by Field.  Used internally.
  */
  int QextDateTimeSpinBox::fieldSize(QextDateTimeValidator::Token const* Field) const {
      int FieldSize=0;
      int hour, day, month;
  
      //fixed-size fields
      if (Field->IsFixedSize) {
          FieldSize=Field->MaxSize;
      }
  
      //variable-sized fields
      else {
          switch (Field->FType) {
              case QextDateTimeValidator::FIELD_DAY:
                  day=Date.day();
                  if (day<10) {
                      FieldSize=1;
                  }
                  else {
                      FieldSize=2;
                  }
                  break;
  
              case QextDateTimeValidator::FIELD_HOUR_12:
              case QextDateTimeValidator::FIELD_HOUR_24:
                  hour=Time.hour();
                  if (hour<10) {
                      FieldSize=1;
                  }
                  else {
                      FieldSize=2;
                  }
                  break;
  
              case QextDateTimeValidator::FIELD_MONTH:
                  month=Date.month();
                  if (month<10) {
                      FieldSize=1;
                  }
                  else {
                      FieldSize=2;
                  }
                  break;
  
              case QextDateTimeValidator::FIELD_DAY_STRING:
                  FieldSize=longDayName(Date.dayOfWeek()).length();
                  break;
  
              case QextDateTimeValidator::FIELD_MONTH_STRING:
                  FieldSize=longMonthName(Date.month()).length();
                  break;
          }
      }
      return FieldSize;
  }
  
  /*!
  \fn QString QextDateTimeSpinBox::format(void)
  Returns the current format string used by the control.  The string returned will use the format 
  specifiers described in the documentation for 
  QextDateTimeSpinBox::QextDateTimeSpinBox(const QString*, const QDate*, const QTime*,
                                           const QString*, const QString*).
  */
  QString QextDateTimeSpinBox::format(void) const {
      return Format;
  }
  
  /*!
  \fn int QextDateTimeSpinBox::indexFromField(QextDateTimeValidator::Token const* field)
  returns the starting offset of the field represented by the QextDateTimeValidator::Token 
  pointer in the editor.
  */
  int QextDateTimeSpinBox::indexFromField(QextDateTimeValidator::Token const* field) {
      int CurIndex=0;
  
      //find which field the cursor is in
      QextDateTimeValidator::Token const* curToken=Validator->displayFormat();
      while (curToken!=field) {
          CurIndex+=fieldSize(curToken);
          curToken=curToken->Next;
      }
  
      //if in a right-justified month string, adjust index for leading spaces
      if (field->FType==QextDateTimeValidator::FIELD_MONTH_STRING && field->IsRightJustified) {
          CurIndex+=Validator->maxMonthStringSize()-longMonthName(Date.month()).length();
      }
  
      //if in a right-justified day string, adjust index for leading spaces
      if (field->FType==QextDateTimeValidator::FIELD_DAY_STRING && field->IsRightJustified) {
          CurIndex+=Validator->maxDayStringSize()-longDayName(Date.dayOfWeek()).length();
      }
      return CurIndex;
  }
  
  /*!
  \fn QString QextDateTimeSpinBox::mapValueToText(int)
  Trivial override of the default QSpinBox behavior - text does not map directly to a value in this 
  case.
  */
  int QextDateTimeSpinBox::mapTextToValue(bool* ok) {
      *ok=TRUE;
      return 1;
  }
  
  /*!
  \fn QString QextDateTimeSpinBox::mapValueToText(int)
  overrides default string interpreter - integer values do not map to anything in this case
  */
  QString QextDateTimeSpinBox::mapValueToText(int) {
      QString str(tr(""));
      Validator->makeString(str, Date, Time);
      return str;
  }
  
  /*!
  \fn void QextDateTimeSpinBox::onEditTextChanged(const QString& text)
  [public slot]
  called when editor text changes
  */
  void QextDateTimeSpinBox::onEditTextChanged(const QString& text) {
  	QDate date;
      QString string=text;
      int i=0;
  
      //acceptable string in editor - update internal info, and update display
      if(Validator->validate(string, i) == QValidator::Acceptable) {
          Date.setYMD(Date.year(), Date.month(), Date.day());
          refresh();
      }
  
      //intermediate string - do nothing
      else if (Validator->validate(string, i) == QValidator::Intermediate) {
      }
  
      //unacceptable string in editor - update display with last valid date and time
      else {
          refresh();
      }
  }
  
  /*!
  \fn void QextDateTimeSpinBox::onFormatChanged(const QString& text)
  [public slot]
  called when format specifier string changes.  
  */
  void QextDateTimeSpinBox::onFormatChanged(const QString& text) {
  	QDate date;
      QString string=text;
      int i=0;
  
      //acceptable string in editor - update internal info, and update display
      if (Validator->validate(string, i) == QValidator::Acceptable) {
          Date.setYMD(Date.year(), Date.month(), Date.day());
          setFormat(text);
      }
  
      //intermediate string - do nothing
      else if (Validator->validate(string, i) == QValidator::Intermediate) {
      }
  
      //unacceptable string in editor - update display with last valid date and time
      else {
          refresh();
      }
  }
  
  /*!
  \fn void QextDateTimeSpinBox::refresh()
  refreshes the text in the editor
  */
  void QextDateTimeSpinBox::refresh() {
  
      //validator creates the display string
      QString str("");
      Validator->makeString(str, Date, Time);
      
      //display string and place cursor at appropriate location
      editor()->setText(str);
      editor()->setCursorPosition(CursorPos);
  }
  
  /*!
  \fn void QextDateTimeSpinBox::setDate(const QDate& date)
  Sets the date used by the control to the one specified by the date argument.
  */
  void QextDateTimeSpinBox::setDate(const QDate& date) {
      Date=date;
  }
  
  /*!
  \fn void QextDateTimeSpinBox::setDefaultStrings(void)
  Sets up default day and month strings.
  */
  void QextDateTimeSpinBox::setDefaultStrings(void) {
      QStringList days;
      QStringList months;
      days+="Monday";
      days+="Tuesday";
      days+="Wednesday";
      days+="Thursday";
      days+="Friday";
      days+="Saturday";
      days+="Sunday";
      months+="January";
      months+="February";
      months+="March";
      months+="April";
      months+="May";
      months+="June";
      months+="July";
      months+="August";
      months+="September";
      months+="October";
      months+="November";
      months+="December";
      setStrings(days, months);
  }
  
  /*!
  \fn int QextDateTimeSpinBox::setFormat(QString& format)
  Sets the format of the displayed date and/or time, using the format specifiers described in the
  documentation for 
  QextDateTimeSpinBox::QextDateTimeSpinBox(const QString*, const QDate*, const QTime*, 
                                           const QStringList*, const QStringList*).
  */
  void QextDateTimeSpinBox::setFormat(const QString& format) {
      Validator->setFormat(format);
      refresh();
  }
  
  /*!
  \fn void QextDateTimeSpinBox::setStrings(const QStringList* days, const QStringList* months)
  Sets the strings used to represent the daysof the week and the months of the year.  By 
  default these strings are English.
  */
  void QextDateTimeSpinBox::setStrings(const QStringList& days, const QStringList& months) {
      setLongMonthNames(months);
      setLongDayNames(days);
  }
  
  /*!
  \fn void QextDateTimeSpinBox::setTime(const QTime& time)
  Sets the time used by the control to the one specified by the time argument.
  */
  void QextDateTimeSpinBox::setTime(const QTime& time) {
      Time=time;
  }
  
  /*!
  \fn void QextDateTimeSpinBox::stepDown()
  [public slot]
  responds to the down arrow of the spin box control
  */
  void QextDateTimeSpinBox::stepDown() {
      QDate TempDate;
      int hour=Time.hour();
      int minute=Time.minute();
      int second=Time.second();
      int year=Date.year();
      int month=Date.month();
      int day=Date.day();
      int cursor=editor()->cursorPosition();
      CursorPos=cursor;
  
      //find which field the cursor is currently in
      QextDateTimeValidator::Token const *Field=fieldFromIndex(cursor);
      
      //if cursor is at end of string, do nothing
      if (!Field) {
          return;
      }
      switch(Field->FType) {
          case QextDateTimeValidator::FIELD_LITERAL:
              break;
  
          case QextDateTimeValidator::FIELD_AMPM:
              hour+=12;
              hour%=24;
              Time.setHMS(hour, minute, second);
              break;
  
          case QextDateTimeValidator::FIELD_DAY:
          case QextDateTimeValidator::FIELD_DAY_STRING:
              day--;
  
              //edge case
              if (day<1) {
                  TempDate.setYMD(year, month, 1);
                  day=TempDate.daysInMonth();
  #ifdef QTVER_PRE_30
                  editor()->cursorRight(FALSE);
  #else
                  editor()->cursorForward(FALSE);
  #endif
              }
              Date.setYMD(year, month, day);
  
              //cursor tracks beginning of field
              if (day==9) {
  #ifdef QTVER_PRE_30
                  editor()->cursorLeft(FALSE);
  #else
                  editor()->cursorBackward(FALSE);
  #endif
              }
              break;
          
          case QextDateTimeValidator::FIELD_HOUR_12:
          case QextDateTimeValidator::FIELD_HOUR_24:
              hour--;
              if (hour<0) {
                  hour=23;
              }
              Time.setHMS(hour, minute, second);
              break;
  
          case QextDateTimeValidator::FIELD_MINUTE:
              minute--;
              if (minute<0) {
                  minute=59;
              }
              Time.setHMS(hour, minute, second);
              break;
  
          case QextDateTimeValidator::FIELD_MONTH:
          case QextDateTimeValidator::FIELD_MONTH_STRING:
              month--;
              if (month<1) {
                  month=12;
              }
              TempDate.setYMD(year, month, 1);
              if (day>TempDate.daysInMonth()) {
                  day=TempDate.daysInMonth();
              }
              Date.setYMD(year, month, day);
              break;
  
          case QextDateTimeValidator::FIELD_SECOND:
              second--;
              if (second<0) {
                  second=59;
              }
              Time.setHMS(hour, minute, second);
              break;
  
          case QextDateTimeValidator::FIELD_YEAR_2:
          case QextDateTimeValidator::FIELD_YEAR_4:
              year--;
  
              //QDate edge case
              if (year<1753) {
                  year=1753;
              }
  
              //special case for February in leap-years
              if (month==2 && day==29) {
                  day=28;
              }
              Date.setYMD(year, month, day);
              break;
      }
  
      //update display in the editor
      refresh();
  
      //move cursor to beginning of current field for use with variable-sized fields
      CursorPos=indexFromField(Field);
      editor()->setCursorPosition(CursorPos);
  }
  
  /*!
  \fn void QextDateTimeSpinBox::stepUp()
  [public slot]
  responds to the up arrow of the spin box control
  */
  void QextDateTimeSpinBox::stepUp() {
      QDate TempDate;
      int hour=Time.hour();
      int minute=Time.minute();
      int second=Time.second();
      int year=Date.year();
      int month=Date.month();
      int day=Date.day();
      int cursor=editor()->cursorPosition();
      CursorPos=cursor;
  
      //find which field the cursor is currently in
      QextDateTimeValidator::Token const *Field=fieldFromIndex(cursor);
      
      //if cursor is at end of string, do nothing
       if (!Field) {
          return;
      }
      
      //update the field if necessary
      switch(Field->FType) {
          case QextDateTimeValidator::FIELD_LITERAL:
              break;
  
          case QextDateTimeValidator::FIELD_AMPM:
              hour+=12;
              hour%=24;
              Time.setHMS(hour, minute, second);
              break;
  
          case QextDateTimeValidator::FIELD_DAY:
          case QextDateTimeValidator::FIELD_DAY_STRING:
              day++;
  
              //edge case
              if (day>Date.daysInMonth()) {
                  day=1;
  #ifdef QTVER_PRE_30
                  editor()->cursorLeft(FALSE);
  #else
                  editor()->cursorBackward(FALSE);
  #endif
              }
              Date.setYMD(year, month, day);
              if (day==10) {
  #ifdef QTVER_PRE_30
                  editor()->cursorRight(FALSE);
  #else
                  editor()->cursorForward(FALSE);
  #endif
              }
              break;
          
          case QextDateTimeValidator::FIELD_HOUR_12:
          case QextDateTimeValidator::FIELD_HOUR_24:
              hour++;
              hour%=24;
              Time.setHMS(hour, minute, second);
              break;
  
          case QextDateTimeValidator::FIELD_MINUTE:
              minute++;
              if (minute>59) {
                  minute=0;
              }
              Time.setHMS(hour, minute, second);
              break;
  
          case QextDateTimeValidator::FIELD_MONTH:
          case QextDateTimeValidator::FIELD_MONTH_STRING:
              month++;
              if (month>12) {
                  month=1;
              }
              TempDate.setYMD(year, month, 1);
              if (day>TempDate.daysInMonth()) {
                  day=TempDate.daysInMonth();
              }
              Date.setYMD(year, month, day);
              break;
  
          case QextDateTimeValidator::FIELD_SECOND:
              second++;
              if (second>59) {
                  second=0;
              }
              Time.setHMS(hour, minute, second);
              break;
  
          case QextDateTimeValidator::FIELD_YEAR_2:
          case QextDateTimeValidator::FIELD_YEAR_4:
              year++;
  
              //QDate edge case
              if (year>8000) {
                  year=8000;
              }
  
              //special case for February in leap-years
              if (month==2 && day==29) {
                  day=28;
              }
              Date.setYMD(year, month, day);
              break;
      }
  
      //update display in the editor
      refresh();
  
      //move cursor to beginning of current field for use with variable-sized fields
      CursorPos=indexFromField(Field);
      editor()->setCursorPosition(CursorPos);
  }
  
  /*!
  \fn QTime QextDateTimeSpinBox::time(void) const
  Returns the most recent valid time entered into the control.  
  */
  QTime QextDateTimeSpinBox::time(void) const {
      return Time;
  }
  
  /*!
  \fn void QextDateTimeSpinBox::updateDisplay()
  override QSpinBox::updateDisplay() to keep the cursor from moving all around the edit box
  on mouseover events
  */
  void QextDateTimeSpinBox::updateDisplay() {
      CursorPos=editor()->cursorPosition();
      QSpinBox::updateDisplay();
      editor()->setCursorPosition(CursorPos);
  }
  
  /*!
  \fn QextDateTimeValidator* QextDateTimeSpinBox::validator(void) const
  returns date validator pointer
  */
  QextDateTimeValidator* QextDateTimeSpinBox::validator(void) const {
      return Validator;
  }
  
  
  /*!
  \fn QString QextDateTimeSpinBox::longMonthName(int monthNum) const
  returns the month name for the month specified.  By default, longMonthName(1) will return 
  "January", etc.
  */
  QString QextDateTimeSpinBox::longMonthName(int monthNum) const {
      return monthNames[monthNum-1];    
  }
  
  /*!
  \fn QString QextDateTimeSpinBox::longDayName(int dayNum) const
  returns the day name for the day of the week specified.  By default longDayName(1) will return 
  "Monday", etc.  Note that this is different from the American week which starts with Sunday.  This
  is to maintain consistency with the QT 3.0 function QDate::longDayName().
  */
  QString QextDateTimeSpinBox::longDayName(int dayNum) const {
      return dayNames[dayNum-1];    
  }
  
  /*!
  \fn void QextDateTimeSpinBox::setLongMonthNames(const QStringList&)
  Sets the names of the months.  The QStringList reference passed in is assumed to have at least 12
  QStrings in it; any after the first 12 will be ignored.
  */
  void QextDateTimeSpinBox::setLongMonthNames(const QStringList& names) {
      QStringList::ConstIterator i=names.begin();
      int j;
      for (j=0; j<12; j++) {
          monthNames[j]=*i;
          i++;
      }
  }
  
  /*!
  \fn void QextDateTimeSpinBox::setLongDayNames(const QStringList&)
  Sets the names of days of the week.  Note that Monday is assumed to map to the first element, and 
  Sunday to the last.  This is for consistency with the behavior of QDate.  The QStringList passed 
  in is assumed to have at least 7 elements.  Any elements beyond the first 7 are ignored.
  */
  void QextDateTimeSpinBox::setLongDayNames(const QStringList& names) {
      QStringList::ConstIterator i=names.begin();
      int j;
      for (j=0; j<7; j++) {
          dayNames[j]=*i;
          i++;
      }
  }
      
  Index: ossp-pkg/titraq/xdtspinbox.h
  ============================================================
  $ cvs update -p -r1.1 xdtspinbox.h
  #ifndef _QEXTDATETIMESPINBOX_H_
  #define _QEXTDATETIMESPINBOX_H_
  
  #include <qspinbox.h>
  #include <qdatetime.h>
  #include <qstring.h>
  #include "xdtvalidate.h"
  
  /*!
  \class QextDateTimeSpinBox
  \version 1.0
  \author Wayne Roth (wroth@speakeasy.org)
  \brief Flexible date and time selection spinbox, similar to the MFC COleDateTimeCtrl widget.
  QextDateTimeSpinBox is a QDate/QTime-based date and/or time selection spinbox control.  It 
  allows very flexible alteration of the format in which the information is displayed. 
  Full multi-language support is planned for a future release.
  */
  class QextDateTimeSpinBox: public QSpinBox { 
      Q_OBJECT
  
  public:
  
      //default constructor
      QextDateTimeSpinBox(QWidget* parent=NULL, const char* name=NULL, const QString* format=NULL, 
                          const QDate* date=NULL, const QTime* time=NULL, 
                          const QStringList* days=NULL, const QStringList* months=NULL); 
  	virtual ~QextDateTimeSpinBox();
      QDate date(void) const;
      QextDateTimeValidator::Token const* fieldFromIndex(int);
      QString format(void) const;
      int indexFromField(QextDateTimeValidator::Token const*);
      virtual int mapTextToValue(bool*);
      virtual QString mapValueToText(int);
      QTime time(void) const;
      QextDateTimeValidator* validator(void) const;
  
  public slots:
      virtual void onEditTextChanged(const QString&);
      virtual void onFormatChanged(const QString&);
      void setDate(const QDate&);
      void setFormat(const QString&);
      void setStrings(const QStringList&, const QStringList&);
      void setTime(const QTime&);
      virtual void stepDown();
      virtual void stepUp();
  
  protected:
      QDate Date;
      QTime Time;
      QString Format;
      QextDateTimeValidator* Validator;
      int CursorPos;
  
      int fieldSize(QextDateTimeValidator::Token const*) const;
      virtual void refresh();
      void setDefaultStrings(void);
      virtual void updateDisplay();
      QString longMonthName(int) const;
      QString longDayName(int) const; 
      void setLongMonthNames(const QStringList&);
      void setLongDayNames(const QStringList&);
      QString monthNames[12];
      QString dayNames[7];
  };
  
  #endif
  
  Index: ossp-pkg/titraq/xdtvalidate.cpp
  ============================================================
  $ cvs update -p -r1.1 xdtvalidate.cpp
  #include <ctype.h>
  #include <qdatetime.h>
  #include <qvalidator.h>
  #include <qstring.h>
  #include "xdtvalidate.h"
  
  /*! 
  \fn QextDateTimeValidator::QextDateTimeValidator(QWidget* parent, const char* name)
  Constructs a validator
  */
  QextDateTimeValidator::QextDateTimeValidator(QWidget* parent, const char* name)
  
  #ifdef QTVER_PRE_30
                        :QValidator(parent, name) {
  #else 
                        :QValidator((QObject*)parent, name) {
  #endif
  
      //initialize default names for days and months
      QStringList defDays;
      QStringList defMonths;
      defDays+="Monday";
      defDays+="Tuesday";
      defDays+="Wednesday";
      defDays+="Thursday";
      defDays+="Friday";
      defDays+="Saturday";
      defDays+="Sunday";
      defMonths+="January";
      defMonths+="February";
      defMonths+="March";
      defMonths+="April";
      defMonths+="May";
      defMonths+="June"; 
      defMonths+="July";
      defMonths+="August"; 
      defMonths+="September";
      defMonths+="October";
      defMonths+="November";
      defMonths+="December";
      setStrings(defDays, defMonths);
      findStringLimits();
  
      //set up for string field length variables
      MaxDayString=0;
      MinDayString=INT_MAX;
      MaxMonthString=0;
      MinMonthString=INT_MAX;
      
      //initialize display format structure to NULL
      DisplayFormat=NULL;
  }
  
  /*! 
  \fn QextDateTimeValidator::~QextDateTimeValidator()
  Default destructor
  */
  QextDateTimeValidator::~QextDateTimeValidator() {
  }
  
  /*!
  \fn QextDateTimeValidator::Token* const QextDateTimeValidator::displayFormat()
  Parses the display format string, and returns a pointer to a linked list of tokens in it.
  */
  QextDateTimeValidator::Token* const QextDateTimeValidator::displayFormat() {
      parseFormat();
      return DisplayFormat;
  }
  
  /*!
  \fn void QextDateTimeValidator::findStringLimits(void)
  Finds the minimum and maximum lengths of strings representing the names of days and months.
  This information is used in determining which field the edit box cursor is currently in.
  */
  void QextDateTimeValidator::findStringLimits(void) {
      int i;
      for (i=1; i<=7; i++) {
          if (longDayName(i).length()<MinDayString) {
              MinDayString=longDayName(i).length();
          }
          if (longDayName(i).length()>MaxDayString) {
              MaxDayString=longDayName(i).length();
          }
      }
      for (i=1; i<=12; i++) {
          if (longMonthName(i).length()<MinMonthString) {
              MinMonthString=longMonthName(i).length();
          }
          if (longMonthName(i).length()>MaxMonthString) {
              MaxMonthString=longMonthName(i).length();
          }
      }
  }
  
  /*!
  \fn void QextDateTimeValidator::makeString(QString& str, QDate& Date, QTime& Time) const
  Makes a display string from the current format and the date and time information provided.
  Strings representing the names of days and months are also passed in.
  */
  void QextDateTimeValidator::makeString(QString& str, QDate& Date, QTime& Time) const {
      int month=Date.month();
      int day=Date.day();
      int year=Date.year();
      int hour=Time.hour();
      int minute=Time.minute();
      int second=Time.second();
      int weekDay=Date.dayOfWeek();
      int i;
      unsigned int j;
      Token* CurToken=DisplayFormat;
      QString TokenString;
      while (CurToken) {
  
          /*literal string - append as is*/
          if (CurToken->Type==TYPE_LITERAL) {
              str.append(CurToken->SpecString);
          }
  
          /*format specifier - translate to string*/
          else {
              TokenString="";
              const char* temp=(const char*)(CurToken->SpecString);
              for (i=0; !isalpha(temp[i]); i++) {}
              switch(temp[i]) {
                  case 'A':
                      if (hour<12) {
                          str.append("AM");
                      }
                      else {
                          str.append("PM");
                      }
                      break;
  
                  case 'a':
                      if (hour<12) {
                          str.append("am");
                      }
                      else {
                          str.append("pm");
                      }
                      break;
  
                  case 'd':
                      if (CurToken->IsRightJustified && day<10) {
                          str.append("0");
                      }
                      str.append(QString::number(day));
                      break;
  
                  case 'H':
                      if (CurToken->IsRightJustified && hour<10) {
                          str.append("0");
                      }
                      str.append(QString::number(hour));
                      break;
  
                  case 'h':
                      if (CurToken->IsRightJustified && (((hour+11)%12)+1)<10) {
                          str.append("0");
                      }
                      str.append(QString::number(((hour+11)%12)+1));
                      break;
  
                  case 'M':
                      if (CurToken->IsRightJustified && month<10) {
                          str.append("0");
                      }
                      str.append(QString::number(month));
                      break;
  
                  case 'm':
                      if (CurToken->IsRightJustified) {
  
                          /*add leading spaces if necessary*/
                          if (longMonthName(month).length()<CurToken->MinSize) {
                              for (j=0; j<CurToken->MaxSize-longMonthName(month).length(); j++) {
                                  str.append(" ");
                              }
                          }
                      }
                      if (CurToken->TruncateLength==0) {
                          CurToken->TruncateLength=longMonthName(month).length();
                      }
                      str.append(longMonthName(month).left(CurToken->TruncateLength));
                      break;
  
                  case 'n':
                      if (minute<10) {
                          str.append('0');
                      }
                      str.append(QString::number(minute));
                      break;
  
                  case 's':
                      if (second<10) {
                          str.append('0');
                      }
                      str.append(QString::number(second));
                      break;
  
                  case 'w':
                      if (CurToken->IsRightJustified) {
  
                          /*add leading spaces if necessary*/
                          if (longDayName(weekDay).length()<CurToken->MinSize) {
                              for (j=0; j<CurToken->MinSize-longDayName(weekDay).length(); j++) {
                                  str.append(" ");
                              }
                          }
                      }
                      if (CurToken->TruncateLength==0) {
                          CurToken->TruncateLength=longDayName(weekDay).length();
                      }
                      str.append(longDayName(weekDay).left(CurToken->TruncateLength));
                      break;
  
                  case 'Y':
                      str.append(QString::number(year));
                      break;
  
                  case 'y':
                      if ((year%100)<10) {
                          str.append('0');
                      }
                      str.append(QString::number(year%100));
                      break;
              }
          }
          CurToken=CurToken->Next;
      }
  }
  
  /*!
  \fn unsigned int QextDateTimeValidator::maxDayStringSize(void) const
  Gets the maximum length of the full name of a day of the week.
  */
  unsigned int QextDateTimeValidator::maxDayStringSize(void) const {
      return MaxDayString;
  }
  
  /*!
  \fn unsigned int QextDateTimeValidator::maxMonthStringSize(void) const
  Gets the maximum length of the full name of a month of the year.
  */
  unsigned int QextDateTimeValidator::maxMonthStringSize(void) const {
      return MaxMonthString;
  }
  
  /*!
  \fn unsigned int QextDateTimeValidator::minDayStringSize(void) const
  Gets the minimum length of the full name of a day of the week.
  */
  unsigned int QextDateTimeValidator::minDayStringSize(void) const {
      return MinDayString;
  }
  
  /*!
  \fn unsigned int QextDateTimeValidator::minMonthStringSize(void) const
  Gets the minimum length of the full name of a month of the year.
  */
  unsigned int QextDateTimeValidator::minMonthStringSize(void) const {
      return MinMonthString;
  }
  
  /*!
  \fn void QextDateTimeValidator::parseFormat()
  Parses the date and time display format into a series of tokens and literal strings.  Used
  by the update mechanism when the user clicks the up or down button.
  */
  void QextDateTimeValidator::parseFormat() {
      Token* CurToken=DisplayFormat;
      Token* temp;
      const char* FormatString=(const char*)Format;
      bool CompleteToken;
      int startIndex;
      int i, j=0;
  
      /*remove current display format list*/
      while (CurToken) {
          temp=CurToken;
          CurToken=CurToken->Next;
          delete temp;
      }
      DisplayFormat=NULL;
  
      /*parse through format string*/
      for (i=0; FormatString[i]; ) { 
  
          /*allocate new token structure*/
          CurToken=new Token;
          CurToken->Next=NULL;
          CurToken->IsRightJustified=FALSE;
          CurToken->TruncateLength=0;
          CurToken->SpecString="";
          if (!DisplayFormat) {
              DisplayFormat=CurToken;
          }
          startIndex=i;
          if (FormatString[i]=='%') {
              
              CurToken->Type=TYPE_SPECIFIER;
  
              /*parse specifier string - up to and including first alphabetic or % character*/
              CompleteToken=FALSE;
              while (!CompleteToken) {
                  CurToken->SpecString.append(FormatString[i]);
  
                  /*end of token is a letter, whitespace, end of format string, or start of a new 
                    token (% character)*/
                  if (isalpha(FormatString[i]) || isspace(FormatString[i]) || !FormatString[i] || 
                      (FormatString[i]=='%' && i!=startIndex)) {
                      CompleteToken=TRUE;
  
                      /*if 2 % signs in a row, this code prevents the parser from 
                        "eating" the second one*/
                      if (FormatString[i]=='%' && i!=startIndex) {
                          CurToken->SpecString.truncate(CurToken->SpecString.length()-1);
                          i--;
                      }
  
                      /*validate specifier - if not recognized, treat as a literal*/
                      switch(FormatString[i]) {
                          case 'a':
                          case 'A':
                              CurToken->FType=FIELD_AMPM;
                              CurToken->MinSize=2;
                              CurToken->MaxSize=2;
                              CurToken->IsFixedSize=TRUE;
                              break;
  
                          case 'n':
                              CurToken->FType=FIELD_MINUTE;
                              CurToken->MinSize=2;
                              CurToken->MaxSize=2;
                              CurToken->IsFixedSize=TRUE;
                              break;
  
                          case 's':
                              CurToken->FType=FIELD_SECOND;
                              CurToken->MinSize=2;
                              CurToken->MaxSize=2;
                              CurToken->IsFixedSize=TRUE;
                              break;
  
                          case 'y':
                              CurToken->FType=FIELD_YEAR_2;
                              CurToken->MinSize=2;
                              CurToken->MaxSize=2;
                              CurToken->IsFixedSize=TRUE;
                              break;
  
                          case 'Y':
                              CurToken->FType=FIELD_YEAR_4;
                              CurToken->MinSize=4;
                              CurToken->MaxSize=4;
                              CurToken->IsFixedSize=TRUE;
                              break;
  
                          case 'd':
                              CurToken->FType=FIELD_DAY;
                              if (((const char*)(CurToken->SpecString))[1]=='0') {
                                  CurToken->MinSize=2;
                                  CurToken->MaxSize=2;
                                  CurToken->IsFixedSize=TRUE;
                              }
                              else {
                                  CurToken->MinSize=1;
                                  CurToken->MaxSize=2;
                                  CurToken->IsFixedSize=FALSE;
                              }
                              break;
  
                          case 'H':
                              CurToken->FType=FIELD_HOUR_24;
                              if (((const char*)(CurToken->SpecString))[1]=='0') {
                                  CurToken->MinSize=2;
                                  CurToken->MaxSize=2;
                                  CurToken->IsFixedSize=TRUE;
                              }
                              else {
                                  CurToken->MinSize=1;
                                  CurToken->MaxSize=2;
                                  CurToken->IsFixedSize=FALSE;
                              }
                              break;
  
                          case 'h':
                              CurToken->FType=FIELD_HOUR_12;
                              if (((const char*)(CurToken->SpecString))[1]=='0') {
                                  CurToken->MinSize=2;
                                  CurToken->MaxSize=2;
                                  CurToken->IsFixedSize=TRUE;
                              }
                              else {
                                  CurToken->MinSize=1;
                                  CurToken->MaxSize=2;
                                  CurToken->IsFixedSize=FALSE;
                              }
                              break;
  
                          case 'M':
                              CurToken->FType=FIELD_MONTH;
                              if (((const char*)(CurToken->SpecString))[1]=='0') {
                                  CurToken->MinSize=2;
                                  CurToken->MaxSize=2;
                                  CurToken->IsFixedSize=TRUE;
                              }
                              else {
                                  CurToken->MinSize=1;
                                  CurToken->MaxSize=2;
                                  CurToken->IsFixedSize=FALSE;
                              }
                              break;
  
                          case 'm':
                              CurToken->FType=FIELD_MONTH_STRING;
                              CurToken->MinSize=MinMonthString;
                              CurToken->MaxSize=MaxMonthString;
                              CurToken->IsFixedSize=FALSE;
                              break;
  
                          case 'w':
                              CurToken->FType=FIELD_DAY_STRING;
                              CurToken->MinSize=MinDayString;
                              CurToken->MaxSize=MaxDayString;
                              CurToken->IsFixedSize=FALSE;
                              break;
  
                          default:
                              CurToken->Type=TYPE_LITERAL;
                              CurToken->FType=FIELD_LITERAL;
                              CurToken->IsFixedSize=TRUE;
                              CurToken->MinSize=CurToken->SpecString.length();
                              CurToken->MaxSize=CurToken->SpecString.length();
                              break;
                      }
                  }
                  for (; j<i; j++) {
                      if (isdigit(FormatString[j])) {
                          CurToken->IsFixedSize=TRUE;
                          
                          /*0 character in a format specifier indicates right-justification in the 
                          case of strings, or leading 0's in the case of numerics*/
                          CurToken->MinSize=CurToken->MaxSize;
                          if (FormatString[j]=='0') {
                              CurToken->IsRightJustified=TRUE;
                          }
                          else {
                              CurToken->TruncateLength*=10;
                              CurToken->TruncateLength+=FormatString[j]-'0';
                          }
                      }
                  }
                  i++;
              }
              if (CurToken->TruncateLength) {
                  CurToken->MinSize=CurToken->TruncateLength;
                  CurToken->MaxSize=CurToken->TruncateLength;
              }
          }
          else {
              CurToken->Type=TYPE_LITERAL;
              CurToken->FType=FIELD_LITERAL;
              CurToken->IsFixedSize=TRUE;
  
              /*parse literal string - everything up to next % character*/
              while (FormatString[i] && FormatString[i]!='%') {
                  CurToken->SpecString.append(FormatString[i]);
                  i++;
              }
              CurToken->MinSize=CurToken->SpecString.length();
              CurToken->MaxSize=CurToken->SpecString.length();
          }
  
          //Append new token to end of list
          temp=DisplayFormat;
          while (temp && temp->Next) {
              temp=temp->Next;
          }
          if (CurToken!=DisplayFormat) {
              temp->Next=CurToken;
          }
      }
  }
  
  /*!
  \fn void QextDateTimeValidator::setFormat(const QString& format) 
  Sets the date and time display format for the QextDateTimeSpinBox widget.
  */
  void QextDateTimeValidator::setFormat(const QString& format) {
      Format=format;
      findStringLimits();
      parseFormat();
  }
  
  /*!
  \fn void QextDateTimeValidator::setMaxDayStringSize(unsigned int newSize)
  Sets the maximum length of the full name of a day of the week.
  */
  void QextDateTimeValidator::setMaxDayStringSize(unsigned int newSize) {
      MaxDayString=newSize;
  }
  
  /*!
  \fn void QextDateTimeValidator::setMaxMonthStringSize(unsigned int newSize)
  Sets the maximum length of the full name of a month of the year.
  */
  void QextDateTimeValidator::setMaxMonthStringSize(unsigned int newSize) {
      MaxMonthString=newSize;
  }
  
  /*!
  \fn void QextDateTimeValidator::setMinDayStringSize(unsigned int newSize)
  Sets the minimum length of the full name of a day of the week.
  */
  void QextDateTimeValidator::setMinDayStringSize(unsigned int newSize) {
      MinDayString=newSize;
  }
  
  /*!
  \fn void QextDateTimeValidator::setMinMonthStringSize(unsigned int newSize)
  Sets the minimum length of the full name of a month of the year.
  */
  void QextDateTimeValidator::setMinMonthStringSize(unsigned int newSize) {
      MinMonthString=newSize;
  }
  
  /*!
  \fn QValidator::State QextDateTimeValidator::validate(QString& input, int&) const
  validates a string entered into a time spin box
  */
  QValidator::State QextDateTimeValidator::validate(QString&, int&) const {
      return QValidator::Acceptable;
  }
  
  /*!
  \fn QString QextDateTimeValidator::longMonthName(int month) const
  returns the month name for the month specified.  By default, longMonthName(1) will return 
  "January", etc.
  */
  QString QextDateTimeValidator::longMonthName(int month) const {
      return monthNames[month-1];
  }
  
  /*!
  \fn QString QextDateTimeValidator::longDayName(int dayNum) const
  returns the day name for the day of the week specified.  By default longDayName(1) will return 
  "Monday", etc.  Note that this is different from the American week which starts with Sunday.  This
  is to maintain consistency with the QT 3.0 function QDate::longDayName().
  */
  QString QextDateTimeValidator::longDayName(int dayNum) const {
      return dayNames[dayNum-1];    
  }
  
  /*!
  \fn void QextDateTimeValidator::setLongMonthNames(const QStringList& names)
  Sets the names of the months.  The QStringList reference passed in is assumed to have at least 12
  QStrings in it; any after the first 12 will be ignored.
  */
  void QextDateTimeValidator::setLongMonthNames(const QStringList& names) {
      QStringList::ConstIterator i=names.begin();
      int j;
      for (j=0; j<12; j++) {
          monthNames[j]=*i;
          i++;
      }
  }
  
  /*!
  void QextDateTimeValidator::setLongDayNames(const QStringList& names)
  Sets the names of days of the week.  Note that Monday is assumed to map to the first element, and 
  Sunday to the last.  This is for consistency with the behavior of QDate.  The QStringList passed 
  in is assumed to have at least 7 elements.  Any elements beyond the first 7 are ignored.
  */
  void QextDateTimeValidator::setLongDayNames(const QStringList& names) {
      QStringList::ConstIterator i=names.begin();
      int j;
      for (j=0; j<7; j++) {
          dayNames[j]=*i;
          i++;
      }
  }
  
  /*!
  \fn void QextDateTimeSpinBox::setStrings(const QStringList* days, const QStringList* months)
  Sets the strings used to represent the daysof the week and the months of the year.  By 
  default these strings are English.
  */
  void QextDateTimeValidator::setStrings(const QStringList& days, const QStringList& months) {
      setLongMonthNames(months);
      setLongDayNames(days);
  }
  
  Index: ossp-pkg/titraq/xdtvalidate.h
  ============================================================
  $ cvs update -p -r1.1 xdtvalidate.h
  #ifndef _QEXTDATETIMEVALIDATOR_H_
  #define _QEXTDATETIMEVALIDATOR_H_
  
  #include <qdatetime.h>
  #include <qvalidator.h>
  
  /*!
  \class QextDateTimeValidator
  \version 1.0
  \author Wayne Roth (wroth@speakeasy.org)
  \brief Date and time validation class for use with QextDateTimeSpinBox.
  The QextDateTimeValidator class provides a validator for a QextDateTimeSpinBox.  It is intended
  only for use in that context.
  */
  class QextDateTimeValidator:public QValidator {
      Q_OBJECT
  
  public:
      typedef enum _FieldType {
          FIELD_LITERAL,
          FIELD_AMPM,
          FIELD_DAY,
          FIELD_DAY_STRING,
          FIELD_HOUR_12,
          FIELD_HOUR_24,
          FIELD_MINUTE,
          FIELD_MONTH,
          FIELD_MONTH_STRING,
          FIELD_SECOND,
          FIELD_YEAR_2,
          FIELD_YEAR_4
      } FieldType;
  
      typedef enum _TokenType {
          TYPE_LITERAL,
          TYPE_SPECIFIER
      } TokenType;
  
      typedef struct _Token {
          FieldType FType;
          TokenType Type;
          QString SpecString;
          bool IsFixedSize;
          bool IsRightJustified;
          int TruncateLength;
          unsigned int MinSize;
          unsigned int MaxSize;
          struct _Token* Next;
      } Token;
  
      QextDateTimeValidator(QWidget* parent=0, const char* name=0);
      ~QextDateTimeValidator();
      Token* const displayFormat();
      void findStringLimits(void);
      void makeString(QString&, QDate&, QTime&) const;
      unsigned int maxDayStringSize(void) const;
      unsigned int maxMonthStringSize(void) const;
      unsigned int minDayStringSize(void) const;
      unsigned int minMonthStringSize(void) const;
      void setFormat(const QString&);
      void setMaxDayStringSize(unsigned int);
      void setMaxMonthStringSize(unsigned int);
      void setMinDayStringSize(unsigned int);
      void setMinMonthStringSize(unsigned int);
      void setStrings(const QStringList&, const QStringList&);
      virtual QValidator::State validate(QString&, int&) const;
  
  protected:
      Token* DisplayFormat;
      QString Format;
      unsigned int MaxDayString;
      unsigned int MaxMonthString;
      unsigned int MinDayString;
      unsigned int MinMonthString;
      QString monthNames[12];
      QString dayNames[7];
  
      QString longMonthName(int) const;
      QString longDayName(int) const; 
      void setLongMonthNames(const QStringList&);
      void setLongDayNames(const QStringList&);
      void parseFormat();
  };
  
  #endif
  

From ossp-cvs-owner@ossp.org  Wed Nov 20 22:56:35 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9EF5C76A99; Wed, 20 Nov 2002 22:56:35 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq Makefile.in xdtspinbox.cpp xdtspinbox.h xd...
Message-Id: <20021120215635.9EF5C76A99@mail.ossp.org>
Date: Wed, 20 Nov 2002 22:56:35 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   20-Nov-2002 22:56:35
  Branch: HEAD                             Handle: 197001010100001037825795

  Modified files:
    ossp-pkg/titraq         Makefile.in
  Removed files:
    ossp-pkg/titraq         xdtspinbox.cpp xdtspinbox.h xdtvalidate.cpp
                            xdtvalidate.h

  Log:
    The xdt widgets are crap, so remove them. Also streamline meta object
    building.

  Summary:
    Revision    Changes     Path
    1.12        +8  -11     ossp-pkg/titraq/Makefile.in
    NONE        +0  -742    ossp-pkg/titraq/xdtspinbox.cpp
    NONE        +0  -67     ossp-pkg/titraq/xdtspinbox.h
    NONE        +0  -593    ossp-pkg/titraq/xdtvalidate.cpp
    NONE        +0  -86     ossp-pkg/titraq/xdtvalidate.h
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/Makefile.in
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 Makefile.in
  --- ossp-pkg/titraq/Makefile.in	20 Nov 2002 20:36:38 -0000	1.11
  +++ ossp-pkg/titraq/Makefile.in	20 Nov 2002 21:56:35 -0000	1.12
  @@ -65,15 +65,15 @@
   TARGET_PROGS    = titraq
   TARGET_MANS     = titraq.1 titraq.conf.5
   
  -SRCS            = main.cpp titraq.cpp titassist.cpp titslot.cpp titrex.cpp generic.cpp xdtvalidate.cpp xdtspinbox.cpp titraq_version.c
  +SRCS            = main.cpp titraq.cpp titassist.cpp titslot.cpp titrex.cpp generic.cpp titraq_version.c
   
  -OBJS            = main.o titraq.o titassist.o titslot.o titrex.o generic.o xdtvalidate.o xdtspinbox.o titraq_version.o
  +OBJS            = main.o titraq.o titassist.o titslot.o titrex.o generic.o titraq_version.o
   
   GRAFX           = gfx/ossplogo.xpm
   
   # Qt meta object compiler (MOC) generated
  -MOC_OUT         = moc_titraq.cpp moc_xdtvalidate.cpp moc_xdtspinbox.cpp
  -MOC_OBJ         = moc_titraq.o moc_xdtvalidate.o moc_xdtspinbox.o
  +MOC_OUT         = moc_titraq.cpp
  +MOC_OBJ         = moc_titraq.o
   
   .SUFFIXES:
   .SUFFIXES: .c .cc .cpp .cxx .o
  @@ -94,14 +94,11 @@
   $(PROG_NAME): $(OBJS) $(MOC_OBJ)
   	$(CXX) $(LDFLAGS) -o $@ $+ $(LIBS)
   
  -moc_titraq.cpp: titraq.h
  -	$(MOC) $+ -o $@
  +moc_%.cpp: %.h
  +	$(MOC) $< -o $@
   
  -moc_xdtvalidate.cpp: xdtvalidate.h
  -	$(MOC) $+ -o $@
  -
  -moc_xdtspinbox.cpp: xdtspinbox.h
  -	$(MOC) $+ -o $@
  +#moc_titraq.cpp: titraq.h
  +#	$(MOC) $+ -o $@
   
   titraq.1: titraq.pod
   	VS=`$(SHTOOL) version -lc -dshort titraq_version.c`; \
        

From ossp-cvs-owner@ossp.org  Wed Nov 20 23:04:26 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 365AF76A5B; Wed, 20 Nov 2002 23:04:26 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq Makefile.in ossp-pkg/titraq/qtcal COPYING ...
Message-Id: <20021120220426.365AF76A5B@mail.ossp.org>
Date: Wed, 20 Nov 2002 23:04:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   20-Nov-2002 23:04:26
  Branch: HEAD                             Handle: 2002112022042401

  Added files:
    ossp-pkg/titraq/qtcal   COPYING README caldemo.cpp calendar.cpp calendar.h
                            demowin.h holiday.cpp holiday.h makescript
                            worktime.cpp worktime.h
  Modified files:
    ossp-pkg/titraq         Makefile.in

  Log:
    Add a third party calendar widget that only builds after tweaks and
    porting changes to Qt 3.X, but still needs a lot of work before going
    into production.

  Summary:
    Revision    Changes     Path
    1.13        +0  -3      ossp-pkg/titraq/Makefile.in
    1.1         +339 -0     ossp-pkg/titraq/qtcal/COPYING
    1.1         +12 -0      ossp-pkg/titraq/qtcal/README
    1.1         +78 -0      ossp-pkg/titraq/qtcal/caldemo.cpp
    1.1         +576 -0     ossp-pkg/titraq/qtcal/calendar.cpp
    1.1         +121 -0     ossp-pkg/titraq/qtcal/calendar.h
    1.1         +35 -0      ossp-pkg/titraq/qtcal/demowin.h
    1.1         +334 -0     ossp-pkg/titraq/qtcal/holiday.cpp
    1.1         +46 -0      ossp-pkg/titraq/qtcal/holiday.h
    1.1         +32 -0      ossp-pkg/titraq/qtcal/makescript
    1.1         +209 -0     ossp-pkg/titraq/qtcal/worktime.cpp
    1.1         +53 -0      ossp-pkg/titraq/qtcal/worktime.h
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/Makefile.in
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 Makefile.in
  --- ossp-pkg/titraq/Makefile.in	20 Nov 2002 21:56:35 -0000	1.12
  +++ ossp-pkg/titraq/Makefile.in	20 Nov 2002 22:04:24 -0000	1.13
  @@ -97,9 +97,6 @@
   moc_%.cpp: %.h
   	$(MOC) $< -o $@
   
  -#moc_titraq.cpp: titraq.h
  -#	$(MOC) $+ -o $@
  -
   titraq.1: titraq.pod
   	VS=`$(SHTOOL) version -lc -dshort titraq_version.c`; \
   	VL=`$(SHTOOL) version -lc -dlong titraq_version.c`; \
  Index: ossp-pkg/titraq/qtcal/COPYING
  ============================================================
  $ cvs update -p -r1.1 COPYING
  		    GNU GENERAL PUBLIC LICENSE
  		       Version 2, June 1991
  
   Copyright (C) 1989, 1991 Free Software Foundation, Inc.
                            675 Mass Ave, Cambridge, MA 02139, USA
   Everyone is permitted to copy and distribute verbatim copies
   of this license document, but changing it is not allowed.
  
  			    Preamble
  
    The licenses for most software are designed to take away your
  freedom to share and change it.  By contrast, the GNU General Public
  License is intended to guarantee your freedom to share and change free
  software--to make sure the software is free for all its users.  This
  General Public License applies to most of the Free Software
  Foundation's software and to any other program whose authors commit to
  using it.  (Some other Free Software Foundation software is covered by
  the GNU Library General Public License instead.)  You can apply it to
  your programs, too.
  
    When we speak of free software, we are referring to freedom, not
  price.  Our General Public Licenses are designed to make sure that you
  have the freedom to distribute copies of free software (and charge for
  this service if you wish), that you receive source code or can get it
  if you want it, that you can change the software or use pieces of it
  in new free programs; and that you know you can do these things.
  
    To protect your rights, we need to make restrictions that forbid
  anyone to deny you these rights or to ask you to surrender the rights.
  These restrictions translate to certain responsibilities for you if you
  distribute copies of the software, or if you modify it.
  
    For example, if you distribute copies of such a program, whether
  gratis or for a fee, you must give the recipients all the rights that
  you have.  You must make sure that they, too, receive or can get the
  source code.  And you must show them these terms so they know their
  rights.
  
    We protect your rights with two steps: (1) copyright the software, and
  (2) offer you this license which gives you legal permission to copy,
  distribute and/or modify the software.
  
    Also, for each author's protection and ours, we want to make certain
  that everyone understands that there is no warranty for this free
  software.  If the software is modified by someone else and passed on, we
  want its recipients to know that what they have is not the original, so
  that any problems introduced by others will not reflect on the original
  authors' reputations.
  
    Finally, any free program is threatened constantly by software
  patents.  We wish to avoid the danger that redistributors of a free
  program will individually obtain patent licenses, in effect making the
  program proprietary.  To prevent this, we have made it clear that any
  patent must be licensed for everyone's free use or not licensed at all.
  
    The precise terms and conditions for copying, distribution and
  modification follow.
  
  		    GNU GENERAL PUBLIC LICENSE
     TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
  
    0. This License applies to any program or other work which contains
  a notice placed by the copyright holder saying it may be distributed
  under the terms of this General Public License.  The "Program", below,
  refers to any such program or work, and a "work based on the Program"
  means either the Program or any derivative work under copyright law:
  that is to say, a work containing the Program or a portion of it,
  either verbatim or with modifications and/or translated into another
  language.  (Hereinafter, translation is included without limitation in
  the term "modification".)  Each licensee is addressed as "you".
  
  Activities other than copying, distribution and modification are not
  covered by this License; they are outside its scope.  The act of
  running the Program is not restricted, and the output from the Program
  is covered only if its contents constitute a work based on the
  Program (independent of having been made by running the Program).
  Whether that is true depends on what the Program does.
  
    1. You may copy and distribute verbatim copies of the Program's
  source code as you receive it, in any medium, provided that you
  conspicuously and appropriately publish on each copy an appropriate
  copyright notice and disclaimer of warranty; keep intact all the
  notices that refer to this License and to the absence of any warranty;
  and give any other recipients of the Program a copy of this License
  along with the Program.
  
  You may charge a fee for the physical act of transferring a copy, and
  you may at your option offer warranty protection in exchange for a fee.
  
    2. You may modify your copy or copies of the Program or any portion
  of it, thus forming a work based on the Program, and copy and
  distribute such modifications or work under the terms of Section 1
  above, provided that you also meet all of these conditions:
  
      a) You must cause the modified files to carry prominent notices
      stating that you changed the files and the date of any change.
  
      b) You must cause any work that you distribute or publish, that in
      whole or in part contains or is derived from the Program or any
      part thereof, to be licensed as a whole at no charge to all third
      parties under the terms of this License.
  
      c) If the modified program normally reads commands interactively
      when run, you must cause it, when started running for such
      interactive use in the most ordinary way, to print or display an
      announcement including an appropriate copyright notice and a
      notice that there is no warranty (or else, saying that you provide
      a warranty) and that users may redistribute the program under
      these conditions, and telling the user how to view a copy of this
      License.  (Exception: if the Program itself is interactive but
      does not normally print such an announcement, your work based on
      the Program is not required to print an announcement.)
  
  These requirements apply to the modified work as a whole.  If
  identifiable sections of that work are not derived from the Program,
  and can be reasonably considered independent and separate works in
  themselves, then this License, and its terms, do not apply to those
  sections when you distribute them as separate works.  But when you
  distribute the same sections as part of a whole which is a work based
  on the Program, the distribution of the whole must be on the terms of
  this License, whose permissions for other licensees extend to the
  entire whole, and thus to each and every part regardless of who wrote it.
  
  Thus, it is not the intent of this section to claim rights or contest
  your rights to work written entirely by you; rather, the intent is to
  exercise the right to control the distribution of derivative or
  collective works based on the Program.
  
  In addition, mere aggregation of another work not based on the Program
  with the Program (or with a work based on the Program) on a volume of
  a storage or distribution medium does not bring the other work under
  the scope of this License.
  
    3. You may copy and distribute the Program (or a work based on it,
  under Section 2) in object code or executable form under the terms of
  Sections 1 and 2 above provided that you also do one of the following:
  
      a) Accompany it with the complete corresponding machine-readable
      source code, which must be distributed under the terms of Sections
      1 and 2 above on a medium customarily used for software interchange; or,
  
      b) Accompany it with a written offer, valid for at least three
      years, to give any third party, for a charge no more than your
      cost of physically performing source distribution, a complete
      machine-readable copy of the corresponding source code, to be
      distributed under the terms of Sections 1 and 2 above on a medium
      customarily used for software interchange; or,
  
      c) Accompany it with the information you received as to the offer
      to distribute corresponding source code.  (This alternative is
      allowed only for noncommercial distribution and only if you
      received the program in object code or executable form with such
      an offer, in accord with Subsection b above.)
  
  The source code for a work means the preferred form of the work for
  making modifications to it.  For an executable work, complete source
  code means all the source code for all modules it contains, plus any
  associated interface definition files, plus the scripts used to
  control compilation and installation of the executable.  However, as a
  special exception, the source code distributed need not include
  anything that is normally distributed (in either source or binary
  form) with the major components (compiler, kernel, and so on) of the
  operating system on which the executable runs, unless that component
  itself accompanies the executable.
  
  If distribution of executable or object code is made by offering
  access to copy from a designated place, then offering equivalent
  access to copy the source code from the same place counts as
  distribution of the source code, even though third parties are not
  compelled to copy the source along with the object code.
  
    4. You may not copy, modify, sublicense, or distribute the Program
  except as expressly provided under this License.  Any attempt
  otherwise to copy, modify, sublicense or distribute the Program is
  void, and will automatically terminate your rights under this License.
  However, parties who have received copies, or rights, from you under
  this License will not have their licenses terminated so long as such
  parties remain in full compliance.
  
    5. You are not required to accept this License, since you have not
  signed it.  However, nothing else grants you permission to modify or
  distribute the Program or its derivative works.  These actions are
  prohibited by law if you do not accept this License.  Therefore, by
  modifying or distributing the Program (or any work based on the
  Program), you indicate your acceptance of this License to do so, and
  all its terms and conditions for copying, distributing or modifying
  the Program or works based on it.
  
    6. Each time you redistribute the Program (or any work based on the
  Program), the recipient automatically receives a license from the
  original licensor to copy, distribute or modify the Program subject to
  these terms and conditions.  You may not impose any further
  restrictions on the recipients' exercise of the rights granted herein.
  You are not responsible for enforcing compliance by third parties to
  this License.
  
    7. If, as a consequence of a court judgment or allegation of patent
  infringement or for any other reason (not limited to patent issues),
  conditions are imposed on you (whether by court order, agreement or
  otherwise) that contradict the conditions of this License, they do not
  excuse you from the conditions of this License.  If you cannot
  distribute so as to satisfy simultaneously your obligations under this
  License and any other pertinent obligations, then as a consequence you
  may not distribute the Program at all.  For example, if a patent
  license would not permit royalty-free redistribution of the Program by
  all those who receive copies directly or indirectly through you, then
  the only way you could satisfy both it and this License would be to
  refrain entirely from distribution of the Program.
  
  If any portion of this section is held invalid or unenforceable under
  any particular circumstance, the balance of the section is intended to
  apply and the section as a whole is intended to apply in other
  circumstances.
  
  It is not the purpose of this section to induce you to infringe any
  patents or other property right claims or to contest validity of any
  such claims; this section has the sole purpose of protecting the
  integrity of the free software distribution system, which is
  implemented by public license practices.  Many people have made
  generous contributions to the wide range of software distributed
  through that system in reliance on consistent application of that
  system; it is up to the author/donor to decide if he or she is willing
  to distribute software through any other system and a licensee cannot
  impose that choice.
  
  This section is intended to make thoroughly clear what is believed to
  be a consequence of the rest of this License.
  
    8. If the distribution and/or use of the Program is restricted in
  certain countries either by patents or by copyrighted interfaces, the
  original copyright holder who places the Program under this License
  may add an explicit geographical distribution limitation excluding
  those countries, so that distribution is permitted only in or among
  countries not thus excluded.  In such case, this License incorporates
  the limitation as if written in the body of this License.
  
    9. The Free Software Foundation may publish revised and/or new versions
  of the General Public License from time to time.  Such new versions will
  be similar in spirit to the present version, but may differ in detail to
  address new problems or concerns.
  
  Each version is given a distinguishing version number.  If the Program
  specifies a version number of this License which applies to it and "any
  later version", you have the option of following the terms and conditions
  either of that version or of any later version published by the Free
  Software Foundation.  If the Program does not specify a version number of
  this License, you may choose any version ever published by the Free Software
  Foundation.
  
    10. If you wish to incorporate parts of the Program into other free
  programs whose distribution conditions are different, write to the author
  to ask for permission.  For software which is copyrighted by the Free
  Software Foundation, write to the Free Software Foundation; we sometimes
  make exceptions for this.  Our decision will be guided by the two goals
  of preserving the free status of all derivatives of our free software and
  of promoting the sharing and reuse of software generally.
  
  			    NO WARRANTY
  
    11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
  FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
  OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
  PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
  OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
  TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
  PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
  REPAIR OR CORRECTION.
  
    12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
  WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
  REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
  INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
  OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
  TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
  YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
  PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
  POSSIBILITY OF SUCH DAMAGES.
  
  		     END OF TERMS AND CONDITIONS
  
  	Appendix: How to Apply These Terms to Your New Programs
  
    If you develop a new program, and you want it to be of the greatest
  possible use to the public, the best way to achieve this is to make it
  free software which everyone can redistribute and change under these terms.
  
    To do so, attach the following notices to the program.  It is safest
  to attach them to the start of each source file to most effectively
  convey the exclusion of warranty; and each file should have at least
  the "copyright" line and a pointer to where the full notice is found.
  
      <one line to give the program's name and a brief idea of what it does.>
      Copyright (C) 19yy  <name of author>
  
      This program is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published by
      the Free Software Foundation; either version 2 of the License, or
      (at your option) any later version.
  
      This program is distributed in the hope that it will be useful,
      but WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      GNU General Public License for more details.
  
      You should have received a copy of the GNU General Public License
      along with this program; if not, write to the Free Software
      Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  
  Also add information on how to contact you by electronic and paper mail.
  
  If the program is interactive, make it output a short notice like this
  when it starts in an interactive mode:
  
      Gnomovision version 69, Copyright (C) 19yy name of author
      Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
      This is free software, and you are welcome to redistribute it
      under certain conditions; type `show c' for details.
  
  The hypothetical commands `show w' and `show c' should show the appropriate
  parts of the General Public License.  Of course, the commands you use may
  be called something other than `show w' and `show c'; they could even be
  mouse-clicks or menu items--whatever suits your program.
  
  You should also get your employer (if you work as a programmer) or your
  school, if any, to sign a "copyright disclaimer" for the program, if
  necessary.  Here is a sample; alter the names:
  
    Yoyodyne, Inc., hereby disclaims all copyright interest in the program
    `Gnomovision' (which makes passes at compilers) written by James Hacker.
  
    <signature of Ty Coon>, 1 April 1989
    Ty Coon, President of Vice
  
  This General Public License does not permit incorporating your program into
  proprietary programs.  If your program is a subroutine library, you may
  consider it more useful to permit linking proprietary applications with the
  library.  If this is what you want to do, use the GNU Library General
  Public License instead of this License.
  Index: ossp-pkg/titraq/qtcal/README
  ============================================================
  $ cvs update -p -r1.1 README
  This package requires the following additional packages
  
  Graphical Toolkit
  -----------------
  * QT version 2.00 or higher from Troll Tech (http://www.troll.no)
  
  If you like this package send me an email: mdj@phoenix.bmedesign.com
  
  Thanks,
  
  Mark Jackson
  
  Index: ossp-pkg/titraq/qtcal/caldemo.cpp
  ============================================================
  $ cvs update -p -r1.1 caldemo.cpp
  /*
   *
   * Copyright (c) 1998,1999, Mark Jackson.  
   * All rights reserved.
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License as included in
   * the file COPYING in the main directory for this package.
   *
   * This program is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   *
   */
  
  #include <stdio.h>
  
  #include <qapp.h>
  
  #include "calendar.h"
  #include "demowin.h"
  #include "worktime.h"
  
  DemoWindow::DemoWindow(QWidget* p)
  :QWidget(p)
  {
    dateinput=new DateInput(this,"5/25/1999");
    QWidget::connect(dateinput,SIGNAL(classifyRequest(int,int,char*)),
  	this,SLOT(slotDayClassify(int,int,char*)));
    connect(dateinput,SIGNAL(dayLabel(int,int,int,char*)),
  	this,SLOT(slotDayLabel(int,int,int,char*)));
    dateinput->setGeometry(10,10,130,25);
    dateinput->show();
  }
  
  void DemoWindow::slotDayClassify(int m, int y, char* dc)
  {
    WorkTime wt(y);
    for (int i=0; i<wt.monthLength(m); i++) {
      switch (wt.dayType(m,i)) {
      case 0:
      default:
        dc[i]=NoColor;
        break;
      case 1:
        dc[i]=Color1;
        break;
      case 2:
        dc[i]=Color2;
        break;
      case 3:
        dc[i]=Color2;
      }
    }
  }
  
  void DemoWindow::slotDayLabel(int m, int d, int y, char* dl)
  {
    WorkTime wt(y);
    wt.numberWorkDays();
    if (wt.isWorkDay(m,d-1))
      sprintf(dl,"Work day #%i of %i",wt.dayNumber(m,d-1),y);
    else if (wt.isHoliday(m,d-1))
      sprintf(dl,"%s",wt.dayText(m,d-1));
    else if (wt.isWeekend(m,d-1))
      sprintf(dl,"Weekend");
  }
  
  int main(int argc, char** argv)
  {
    QApplication app(argc, argv);
    DemoWindow mainw(NULL);
    mainw.setMinimumSize(300,300);
    mainw.show();
    app.setMainWidget(&mainw);
    return app.exec();
  }
  
  Index: ossp-pkg/titraq/qtcal/calendar.cpp
  ============================================================
  $ cvs update -p -r1.1 calendar.cpp
  /*
   *
   * Copyright (c) 1998,1999, Mark Jackson.  
   * All rights reserved.
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License as included in
   * the file COPYING in the main directory for this package.
   *
   * This program is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   *
   * Modified on May 5, 2000 by R. Marc Lewis <marc@blarg.net> to work 
   * with the QDate class.
   *
   */
  
  #include <ctype.h>
  #include <iostream.h>
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  #include <time.h>
  
  #include <qevent.h>
  #include <qscrbar.h>
  #include <qtimer.h>
  #include <qdatetm.h>
  #include <qdrawutil.h>
  #include <qpainter.h>
  #include <qstyle.h>
  
  #include "calendar.h"
  
  #define CALENDAR_WIDTH  130
  #define TITLE_HEIGHT    20
  #define TITLE_FONT_SIZE 10
  #define ROW_HEIGHT      15
  #define BLOCK_SIZE      13 // BLOCK_SIZE must be ROW_HEIGHT - 2 <- GAP
  #define FONT_SIZE       8
  
  #define INITIAL_TIME 750
  #define REPEAT_TIME 100
  
  static char* months[] = { "January", "February", "March", "April",
    "May", "June", "July", "August", "September", "October",
    "November", "December" 
  };
  
  // Calendar
  
  Calendar::Calendar(QWidget* p, DateInput* di)
  :QWidget(p)
  {
    dateinput=di;
  
    curyear=98;
    curmonth=9;
    curday=25;
    calrow=calcol=startdow=stopdow=numrows=-1;
    direction=initial=0;
    setMouseTracking(TRUE);
    setFixedWidth(CALENDAR_WIDTH);
  
    timer=new QTimer(this);
    CHECK_PTR(timer);
    connect(timer,SIGNAL(timeout()),SLOT(timerEvent()));
  
    tip=new CalendarTip(this,this);
    CHECK_PTR(tip);
  }
  
  void Calendar::show()
  {
    // get curyear, curmonth, curday from string
    QString str=dateinput->getDate();
    dateinput->validator()->fixup(str);
    dateinput->setDate(str);
    char* tempstr=strdup(dateinput->getDate());
    curmonth=atoi(strtok(tempstr,"/"))-1;
    curday=atoi(strtok(NULL,"/"));
    curyear=atoi(strtok(NULL,"/"));
    if (curyear>=1900) curyear-=1900;
    free(tempstr);
  
    recalc();
    raise();
    QWidget::show();
  }
  
  void Calendar::hide()
  {
    QWidget::hide();
  }
  
  const QDate Calendar::getQDate()
  {
      QDate   retVal = myQDate;
      return (const QDate) retVal;
  }
  
  void Calendar::recalc(void)
  {
    // Calculate some time stuff...
    struct tm tm1;
    tm1.tm_sec=0;
    tm1.tm_min=0;
    tm1.tm_hour=12;
    tm1.tm_mday=1;
    tm1.tm_mon=curmonth;
    tm1.tm_year=curyear;
    time_t temp=mktime(&tm1);
    struct tm* ptr=localtime(&temp);
    startdow=ptr->tm_wday;
    int nextmonth=curmonth+1;
    int nextyear=curyear;
    if (nextmonth>11) {
      nextmonth=0;
      nextyear++;
    }
    tm1.tm_sec=0;
    tm1.tm_min=0;
    tm1.tm_hour=12;
    tm1.tm_mday=1;
    tm1.tm_mon=nextmonth;
    tm1.tm_year=nextyear;
    temp=mktime(&tm1);
    temp-=3600*24;	// 1 day
    ptr=localtime(&temp);
    numdaysinmonth=ptr->tm_mday;
    stopdow=ptr->tm_wday;
    numrows=(numdaysinmonth+startdow-1)/7;
  
    // Get day coloring information, if present
    for (int i=0;i<31;i++)
      daycolor[i]=NoColor;
    emit(classifyRequest(curmonth,curyear,daycolor));
  
    resize(width(),numrows*ROW_HEIGHT+TITLE_HEIGHT*2+ROW_HEIGHT);
  }
  
  int Calendar::mouseLeftArrow(QMouseEvent* qme)
  {
    if (qme->x()>=10 && qme->x()<=20 && 
  			qme->y()>=(TITLE_HEIGHT-10)/2 && 
  			qme->y()<=TITLE_HEIGHT-(TITLE_HEIGHT-10)/2 )
      return 1;
    return 0;
  }
  
  int Calendar::mouseRightArrow(QMouseEvent* qme)
  {
    if (qme->x()>=width()-20 && qme->x()<=width()-10 && 
  			qme->y()>=(TITLE_HEIGHT-10)/2 && 
  			qme->y()<=TITLE_HEIGHT-(TITLE_HEIGHT-10)/2 )
      return 1;
    return 0;
  }
  
  void Calendar::paintEvent(QPaintEvent*)
  {
    QPainter paint;
    paint.begin(this);
    QColorGroup g=colorGroup();
    paint.setPen(g.text());
    paint.fillRect(0,0,width(),height(),white);
    paint.fillRect(0,0,width(),TITLE_HEIGHT,yellow);
    paint.setPen(black);
    paint.drawLine(0,0,width()-1,0);
    paint.drawLine(0,0,0,height()-1);
    paint.drawLine(width()-1,0,width()-1,height()-1);
    paint.drawLine(0,height()-1,width()-1,height()-1);
  
    QFont font("Helvetica",TITLE_FONT_SIZE);
    font.setBold(TRUE);
    paint.setFont(font);
    char txt[30];
    sprintf(txt,"%s, %i",months[curmonth],curyear+1900);
    paint.drawText(0,0,width(),TITLE_HEIGHT,AlignCenter,txt,strlen(txt));
    QFont font1("Helvetica",FONT_SIZE);
    paint.setFont(font1);
    int w=width()/7;
    static char* dow[]={"Su","M","Tu","W","Th","F","Sa"};
    for (int j=0;j<7;j++) {
      paint.drawText(j*w+2,TITLE_HEIGHT,w,ROW_HEIGHT,AlignCenter,dow[j],
        strlen(dow[j]));
    }
    for (int i=1;i<=numdaysinmonth;i++) {
      char txt[3];
      sprintf(txt,"%i",i);
      if (daycolor[i-1] == Color1) {
        paint.fillRect(((i+startdow-1)%7)*w+4,((i+startdow-1)/7)*ROW_HEIGHT+
          TITLE_HEIGHT+ROW_HEIGHT+1,BLOCK_SIZE,BLOCK_SIZE,gray);
      }
      if (daycolor[i-1] == Color2) {
        paint.fillRect(((i+startdow-1)%7)*w+4,((i+startdow-1)/7)*ROW_HEIGHT+
          TITLE_HEIGHT+ROW_HEIGHT+1,BLOCK_SIZE,BLOCK_SIZE,red);
      }
      if (i==curday) {
        paint.drawRect(((i+startdow-1)%7)*w+3,((i+startdow-1)/7)*ROW_HEIGHT+
          TITLE_HEIGHT+ROW_HEIGHT,ROW_HEIGHT,ROW_HEIGHT);
      }
      paint.drawText(((i+startdow-1)%7)*w+3, ((i+startdow-1)/7)*ROW_HEIGHT+
        TITLE_HEIGHT+ROW_HEIGHT,ROW_HEIGHT,ROW_HEIGHT,AlignCenter,txt,
        strlen(txt));
    }
    QPointArray points(3);
    points.setPoints(3,10,TITLE_HEIGHT/2,20,TITLE_HEIGHT-(TITLE_HEIGHT-10)/2,
      20,(TITLE_HEIGHT-10)/2);
    paint.setBrush(black);
    paint.drawPolygon(points,TRUE);
    points.setPoints(3,width()-10,TITLE_HEIGHT/2,width()-20,TITLE_HEIGHT-
      (TITLE_HEIGHT-10)/2,width()-20,(TITLE_HEIGHT-10)/2);
    paint.drawPolygon(points,TRUE);
    paint.end();
  }
  
  void Calendar::mousePressEvent(QMouseEvent* qme)
  {
    char str[20];
    if (mouseLeftArrow(qme)) {
      curmonth--;
      if (curmonth<0) {
        curmonth=11;
        curyear--;
      }
      direction=0;
      initial=1;
      timer->start(INITIAL_TIME);
      myQDate.setYMD(curyear+1900, curmonth+1, curday);
      sprintf(str,"%i/%i/%i",curmonth+1,curday,curyear+1900);
      dateinput->setDate(str);
      recalc();
      repaint();
    } else if (mouseRightArrow(qme)) {
      curmonth++;
      if (curmonth>11) {
        curmonth=0;
        curyear++;
      }
      direction=1;
      initial=1;
      timer->start(INITIAL_TIME);
      myQDate.setYMD(curyear+1900, curmonth+1, curday);
      sprintf(str,"%i/%i/%i",curmonth+1,curday,curyear+1900);
      dateinput->setDate(str);
      recalc();
      repaint();
    } else {
      int row=int(qme->y()>TITLE_HEIGHT+ROW_HEIGHT?(qme->y()-(TITLE_HEIGHT+
        ROW_HEIGHT))/ROW_HEIGHT:-1);
      int col=int(qme->x()/(width()/7));
      if (!((row==0 && col<startdow) || (row>numrows) || (col>6) ||
        (row==numrows && col>stopdow)) && col>=0 && row>=0) {
        curday=row*7+col+1-startdow;
        char text[20];
        myQDate.setYMD(curyear+1900, curmonth+1, curday);
        sprintf(text,"%i/%i/%i",curmonth+1,curday,curyear+1900);
        dateinput->setDate(text);
        /*
        cerr<<curmonth+1<<"/"<<curday<<"/"<<curyear+1900<<" selected!"<<endl;
        cerr<<"count="<<count()<<endl;
        */
        calrow=calcol=-1;
        hide();
      }
    }
  }
  
  void Calendar::mouseMoveEvent(QMouseEvent* qme)
  {
    int row=int(qme->y()>TITLE_HEIGHT+ROW_HEIGHT?(qme->y()-(TITLE_HEIGHT+
      ROW_HEIGHT))/ROW_HEIGHT:-1);
    int col=int(qme->x()/(width()/7));
    if ((row==0 && col<startdow) || (row>numrows) || (col>6) ||
      (row==numrows && col>stopdow)) {
      row=col=-99;
    }
    QPainter paint;
    paint.begin(this);
    if (row!=calrow || col!=calcol) {
      if (curday == calrow*7+calcol+1-startdow) {
        paint.setPen(black);
      } else {
        paint.setPen(white);
      }
      paint.drawRect(calcol*(width()/7)+3,calrow*ROW_HEIGHT+TITLE_HEIGHT+
        ROW_HEIGHT,ROW_HEIGHT,ROW_HEIGHT);
      if (row>=0 && col>=0) { 
        calrow=row;
        calcol=col;
        QColorGroup g=colorGroup();
        int x=calcol*(width()/7)+3;
        int y=calrow*ROW_HEIGHT+TITLE_HEIGHT+ROW_HEIGHT;
        paint.setPen(g.midlight());
        paint.drawLine(x,y,x,y+ROW_HEIGHT-1);
        paint.drawLine(x,y,x+ROW_HEIGHT-1,y);
        paint.setPen(g.dark());
        paint.drawLine(x+ROW_HEIGHT-1,y,x+ROW_HEIGHT-1,y+ROW_HEIGHT-1);
        paint.drawLine(x,y+ROW_HEIGHT-1,x+ROW_HEIGHT-1,y+ROW_HEIGHT-1);
      } else {
        calrow=calcol=-99;
      }
    }
    paint.end();
  }
  
  void Calendar::mouseReleaseEvent(QMouseEvent*)
  {
    timer->stop();
  }
  
  void Calendar::timerEvent()
  {
    if (initial) {
      initial=0;
      timer->start(REPEAT_TIME);
    }
    if (direction) {
      curmonth++;
      if (curmonth>11) {
        curmonth=0;
        curyear++;
      }
    } else {
      curmonth--;
      if (curmonth<0) {
        curmonth=11;
        curyear--;
      }
    }
    char str[20];
    sprintf(str,"%i/%i/%i",curmonth+1,curday,curyear+1900);
    dateinput->setDate(str);
    recalc();
    repaint();
  }
  
  void Calendar::getDayLabel(int m, int d, int y, char* t)
  {
    // default to null if not connected...
    strcpy(t,"");
    emit(dayLabel(m,d,y,t));
  }
  
  // CalendarTip
  
  CalendarTip::CalendarTip(QWidget* p, Calendar* c)
  :QToolTip(p)
  {
    cal=c;
  }
  
  void CalendarTip::maybeTip(const QPoint& p)
  {
    int row=int(p.y()>TITLE_HEIGHT+ROW_HEIGHT?(p.y()-(TITLE_HEIGHT+ROW_HEIGHT))/
      ROW_HEIGHT:-1);
    int col=int(p.x()/(cal->width()/7));
    int curday;
  
    if (!((row==0 && col<cal->startdow) || (row>cal->numrows) || (col>6) ||
      (row==cal->numrows && col>cal->stopdow)) && col>=0 && row>=0) {
      curday=row*7+col+1-cal->startdow;
      QRect rect(p.x()-5,p.y()-5,10,10);
      char tiptext[100],text[100];
      cal->getDayLabel(cal->curmonth,curday,cal->curyear+1900,text);
      if (strcmp(text,""))
        sprintf(tiptext,"%s %i, %i\n%s",months[cal->curmonth],curday,
          cal->curyear+1900,text);
      else
        sprintf(tiptext,"%s %i, %i",months[cal->curmonth],curday,
          cal->curyear+1900);
      tip(rect,tiptext);
    } 
  }
  
  // DateValidator
  
  DateValidator::DateValidator(QWidget* p)
  :QValidator(p)
  {
  }
  
  QValidator::State DateValidator::validate(QString& str, int&) const
  {
    int tempmon=1;
    int tempday=1;
    int tempyear=1970;
  
    // Every character must be either a digit or a slash
    for (unsigned int i=0;i<strlen(str);i++)
      if (!str.at(i).isDigit() && str.at(i)!='/')
        return Invalid;
  
    // Must have exactly two slashes
    char* firstslash=strchr(str,'/');
    if (firstslash==NULL) 
      return Valid;
    else {
      tempmon=atoi(str);
    }
    char* secondslash=strchr(firstslash+1,'/');
    if (secondslash==NULL)
      return Valid;
    else {
      tempday=atoi(firstslash+1);
      tempyear=atoi(secondslash+1);
    }
  
    // Month, day and year must be in an acceptable range
    if (tempmon>12 || tempday>31 || tempyear>2100)
      return Invalid;
    if (tempmon<1 || tempday<1 || tempyear<1970)
      return Valid;
  
    return Acceptable;
  }
  
  void DateValidator::fixup(QString& str)
  {
    int tempmon=1;
    int tempday=1;
    int tempyear=1970;
  
    char* firstslash=strchr(str,'/');
    if (firstslash != NULL) {
      tempmon=atoi(str);
      char* secondslash=strchr(firstslash+1,'/');
      if (secondslash != NULL) {
        tempday=atoi(firstslash+1);
        tempyear=atoi(secondslash+1);
      }
    }
    if (tempmon<=0) tempmon=1;
    if (tempday<1) tempday=1;
    if (tempyear<1970) tempyear=1970;
    str.sprintf("%i/%i/%i",tempmon,tempday,tempyear);
  }
  
  // DateInput
  
  DateInput::DateInput(QWidget* p, const char* txt)
  :QWidget(p)
  {
    text=new QLineEdit(this);
    CHECK_PTR(text);
    //text->setValidator(new DateValidator(this));
    connect(text,SIGNAL(returnPressed()),SLOT(slotNewText()));
  
    cal=new Calendar(p,this);
    CHECK_PTR(cal);
    cal->hide();
    connect(cal,SIGNAL(classifyRequest(int,int,char*)),
      SLOT(slotClassifyRequest(int,int,char*)));
    connect(cal,SIGNAL(dayLabel(int,int,int,char*)),
      SLOT(slotDayLabel(int,int,int,char*)));
  
    setDate(txt);
  }
  
  DateInput::DateInput(QWidget* p, const QDate sdate)
  :QWidget(p)
  {
    text=new QLineEdit(this);
    CHECK_PTR(text);
    //text->setValidator(new DateValidator(this));
    connect(text,SIGNAL(returnPressed()),SLOT(slotNewText()));
  
    cal=new Calendar(p,this);
    CHECK_PTR(cal);
    cal->hide();
    connect(cal,SIGNAL(classifyRequest(int,int,char*)),
      SLOT(slotClassifyRequest(int,int,char*)));
    connect(cal,SIGNAL(dayLabel(int,int,int,char*)),
      SLOT(slotDayLabel(int,int,int,char*)));
  
    char txt[16];
    sprintf(txt, "%d/%d/%d", sdate.month(), sdate.day(), sdate.year());
    setDate(txt);
  }
  
  
  void DateInput::setDate(const char* str)
  {
    text->setText(str);
    emit(dateChanged());
  }
  
  void DateInput::setDate(const QDate newDate)
  {
    char str[128];
    sprintf(str, "%d/%d/%d", newDate.month(), newDate.day(), newDate.year());
    text->setText(str);
    emit(dateChanged());
  }
  
  const char* DateInput::getDate(void)
  {
    return text->text();
  }
  
  const QDate DateInput::getQDate()
  {
      int     tmpPos = 0;
      char    *tmpStr = new char[1024];
      char    *part;
      int     Y = 1900, M = 1, D = 1;
      QDate   retVal;
  
      strcpy(tmpStr, text->text());
      part = strtok(tmpStr, "/");
      if (part) {
          M = atoi(part);
          part = strtok(tmpStr, "/");
          if (part) {
              D = atoi(part);
              part = strtok(tmpStr, "/");
              if (part) Y = atoi(part);
          }
      }
  
      retVal.setYMD(Y,M,D);
      return (const QDate) retVal;
  }
  
  void DateInput::slotClassifyRequest(int m,int y,char* c)
  {
    emit(classifyRequest(m,y,c));
  }
  
  void DateInput::slotDayLabel(int m, int d, int y, char* t)
  {
    emit(dayLabel(m,d,y,t));
  }
  
  void DateInput::slotNewText()
  {
    QRect rect = geometry();
    cal->setGeometry(rect.x(),rect.y()+height(),rect.width(),rect.height());
    cal->show();
  }
  
  void DateInput::paintEvent(QPaintEvent*)
  {
    QPainter paint;
    paint.begin(this);
    qDrawShadePanel(&paint,0,0,width(),height(),colorGroup(),FALSE,1,NULL);
  //  style().drawArrow(&paint,DownArrow,FALSE,width()-19,5,height()-12,
  //    height()-12,colorGroup(),FALSE);
    qDrawShadeLine(&paint,width()-18,height()-7,width()-7,height()-7,
      colorGroup(),FALSE,1,1);
    paint.end();
  }
  
  void DateInput::resizeEvent(QResizeEvent*)
  {
    text->setGeometry(2,2,width()-27,height()-4);
  }
  
  void DateInput::mousePressEvent(QMouseEvent* qme)
  {
    int x = qme->x();
    int y = qme->y();
    if (x > width()-20 && x < width()-4 && y > 5 && y < height()-5) {
      if (cal->isVisible()) {
        cal->hide();
      } else {
        QRect rect = geometry();
        cal->setGeometry(rect.x(),rect.y()+height(),rect.width(),rect.height());
        cal->show();
      }
    }
  }
  
  
  Index: ossp-pkg/titraq/qtcal/calendar.h
  ============================================================
  $ cvs update -p -r1.1 calendar.h
  /*
   *
   * Copyright (c) 1998,1999, Mark Jackson.  
   * All rights reserved.
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License as included in
   * the file COPYING in the main directory for this package.
   *
   * This program is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   *
   * Modified on May 5, 2000 by R. Marc Lewis <marc@blarg.net> to work 
   * with the QDate class.
   *
   */
  
  #ifndef __CALENDAR_H
  #define __CALENDAR_H
  
  #include <qlineedit.h>
  #include <qlistbox.h>
  #include <qtooltip.h>
  #include <qvalidator.h>
  #include <qwidget.h>
  #include <qdatetm.h>
  
  class Calendar;
  class CalendarTip;
  class DateInput;
  class QMouseEvent;
  class QPaintEvent;
  class QResizeEvent;
  
  typedef enum { NoColor, Color1, Color2, Color3 } DayColors;
  
  class Calendar : public QWidget {
    Q_OBJECT
  public:
    Calendar(QWidget*, DateInput*);
    void show();
    void hide();
    const QDate getQDate();
  signals:
    void classifyRequest(int mon, int yr, char*);
    void dayLabel(int, int, int, char*);
  protected:
    void paintEvent(QPaintEvent*);
    void mousePressEvent(QMouseEvent*);
    void mouseMoveEvent(QMouseEvent*);
    void mouseReleaseEvent(QMouseEvent*);
  protected slots:
    void timerEvent();
  private:
    void getDayLabel(int, int, int, char*);
    void recalc(void);
    int mouseLeftArrow(QMouseEvent*);
    int mouseRightArrow(QMouseEvent*);
  
    int initial,direction;
    int curyear,curmonth,curday;
    int calrow,calcol,startdow,stopdow,numrows;
    int numdaysinmonth;
    char daycolor[31];
    QTimer* timer;
    DateInput* dateinput;
    CalendarTip* tip;
  
    QDate myQDate;
  
    friend class CalendarTip;
  };
  
  class CalendarTip : public QToolTip {
  public:
    CalendarTip(QWidget*,Calendar*);
  protected:
    void maybeTip(const QPoint&);
  private:
    Calendar* cal;
  };
  
  class DateValidator : public QValidator {
  public:
    DateValidator(QWidget*);
    State validate(QString&,int&) const;
    void fixup(QString&);
  };
  
  class DateInput : public QWidget {
    Q_OBJECT
  public:
    DateInput(QWidget*,const char*);
    DateInput(QWidget*, const QDate);
    const char* getDate(void);
    const QDate getQDate();
    DateValidator* validator(void) {return dv;}
    void setDate(const char*);
    void setDate(const QDate);
  signals:
    void classifyRequest(int,int,char*);
    void dayLabel(int, int, int, char*);
    void dateChanged();
  protected slots:
    void slotDayLabel(int, int, int, char*);
    void slotClassifyRequest(int,int,char*);
    void slotNewText();
  protected:
    void paintEvent(QPaintEvent*);
    void resizeEvent(QResizeEvent*);
    void mousePressEvent(QMouseEvent*);
  private:
    Calendar* cal;
    DateValidator* dv;
    QLineEdit* text;
  };
  
  #endif
  
  
  Index: ossp-pkg/titraq/qtcal/demowin.h
  ============================================================
  $ cvs update -p -r1.1 demowin.h
  /*
   *
   * Copyright (c) 1998,1999, Mark Jackson.  
   * All rights reserved.
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License as included in
   * the file COPYING in the main directory for this package.
   *
   * This program is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   *
   */
  
  #ifndef __DEMOWIN_H
  #define __DEMOWIN_H
  
  #include <qwidget.h>
  
  class DateInput;
  
  class DemoWindow : public QWidget {
    Q_OBJECT
  public:
    DemoWindow(QWidget*);
  public slots:
    void slotDayClassify(int,int,char*);
    void slotDayLabel(int,int,int,char*);
  private:
    DateInput* dateinput;
  };
  
  #endif
  
  Index: ossp-pkg/titraq/qtcal/holiday.cpp
  ============================================================
  $ cvs update -p -r1.1 holiday.cpp
  /*
   *
   * Copyright (c) 1998,1999, Mark Jackson.  
   * All rights reserved.
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License as included in
   * the file COPYING in the main directory for this package.
   *
   * This program is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   *
   */
  
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  #include <time.h>
  
  #include "holiday.h"
  
  const char* holidayText[] = {
    "New Year's Day",
    "Martin Luther King Day",
    "Washington's Birthday",
    "Good Friday",
    "Easter",
    "Memorial Day",
    "Independence Day",
    "Labor Day",
    "Thanksgiving Day",
    "Christmas Day"
  };
  
  struct MonthDay NewYearsDay(int)
  {
    struct MonthDay md;
    md.mon=0;
    md.mday=1;
    md.key=_NewYearsDay;
    return md;
  }
  
  struct MonthDay MartinLutherKingDay(int year)
  {
    struct MonthDay md;
    /* Third monday in January */
  #ifdef _DEBUG
  printf("Martin Luther King Day calculation for year %i:\n",year);
  #endif
    if (year>1900) year-=1900;
    struct tm thistime;
    thistime.tm_year=year;
    thistime.tm_mon=0;
    thistime.tm_mday=1;
    thistime.tm_hour=thistime.tm_min=thistime.tm_sec=0;
    thistime.tm_wday=thistime.tm_yday=0;
    thistime.tm_isdst=-1;
    time_t time=mktime(&thistime);
    struct tm* ptr=localtime(&time);
    int dtfm=1-ptr->tm_wday;
    if (dtfm<0) dtfm+=7;
    md.mday=dtfm + 15;
    md.mon=0;
    md.key=_MartinLutherKingDay;
  #ifdef _DEBUG
  printf("  RESULT month=%i day=%i\n",md.mon+1,md.mday);
  #endif
    return md;
  }
  
  struct MonthDay WashingtonsBirthday(int year)
  {
    struct MonthDay md;
    /* Third monday in February */
  #ifdef _DEBUG
  printf("Washington's Birthday calculation for year %i:\n",year);
  #endif
    if (year>1900) year-=1900;
    struct tm thistime;
    thistime.tm_year=year;
    thistime.tm_mon=1;
    thistime.tm_mday=1;
    thistime.tm_hour=thistime.tm_min=thistime.tm_sec=0;
    thistime.tm_wday=thistime.tm_yday=0;
    thistime.tm_isdst=-1;
    time_t time=mktime(&thistime);
    struct tm* ptr=localtime(&time);
    int dtfm=1-ptr->tm_wday;
    if (dtfm<0) dtfm+=7;
    md.mday=dtfm + 15;
    md.mon=1;
    md.key=_WashingtonsBirthday;
  #ifdef _DEBUG
  printf("  RESULT month=%i day=%i\n",md.mon+1,md.mday);
  #endif
    return md;
  }
  
  struct MonthDay GoodFriday(int year)
  {
    struct MonthDay md;
  #ifdef _DEBUG
  printf("GoodFriday calculation for year %i:\n",year);
  #endif
    md=Easter(year);
    if (md.mday<3) {
      md.mon=2;
      md.mday=29+md.mday;
    } else {
      md.mday-=2;
    }
    md.key=_GoodFriday;
  #ifdef _DEBUG
  printf("  RESULT month=%i day=%i\n",md.mon+1,md.mday);
  #endif
    return md;
  }
  
  /*
  * EASTER
  *
  * Easter Sunday is defined as the Sunday following the Paschal Full
  * Moon date for the year.  On the Gregorian calendar, it always falls
  * on one of the 35 dates between March 22 and April 25.  This makes
  * it hard to easily calculate.
  *
  * The following algorithm was found at 
  *
  * http://www.assa.org.au/edm.html
  *
  * for easily calculating the Easter holiday for a given year.
  *
  * All credit goes to Ronald W. Mallen, Adelaide, South Australia for 
  * creating this algorithm (rwmallen@poboxes.com), which I have 
  * implemented for the purposes of this package...
  */
  
  char* EasterTable[19][6] = {
    { "A5" , "A12", "A13", "A14", "A15", "A16"},
    { "M25", "A1" , "A2" , "A3" , "A4" , "A5" },
    { "A13", "M21", "M22", "M23", "M24", "M25"},
    { "A2" , "A9" , "A10", "A11", "A12", "A13"},
    { "M22", "M29", "M30", "M31", "A1" , "A2" },
    { "A10", "A17", "A18", "A18", "M21", "M22"},
    { "M30", "A6" , "A7" , "A8" , "A9" , "A10"},
    { "A18", "M26", "M27", "M28", "M29", "M30"},
    { "A7" , "A14", "A15", "A16", "A17", "A18"},
    { "M27", "A3" , "A4" , "A5" , "A6" , "A7" },
    { "A15", "M23", "M24", "M25", "M26", "M27"},
    { "A4" , "A11", "A12", "A13", "A14", "A15"},
    { "M24", "M31", "A1" , "A2" , "A3" , "A4" },
    { "A12", "A18", "M21", "M22", "M23", "M24"},
    { "A1" , "A8" , "A9" , "A10", "A11", "A12"},
    { "M21", "M28", "M29", "M30", "M31", "A1" },
    { "A9" , "A16", "A17", "A17", "A18", "M21"},
    { "M29", "A5" , "A6" , "A7" , "A8" , "A9" },
    { "A17", "M25", "M26", "M27", "M28", "M29"}
  };
  
  struct MonthDay Easter(int year)
  {
    struct MonthDay md;
    char* lookup=NULL;
  #ifdef _DEBUG
  printf("Easter calculation for year %i:\n",year);
  #endif
    memset(&md,0,sizeof(struct MonthDay));
    /* STEP 1 */
    if (year >= 326 && year <= 1582) {
      lookup=EasterTable[year%19][0];
    } else if (year >= 1583 && year <= 1699) {
      lookup=EasterTable[year%19][1];
    } else if (year >= 1700 && year <= 1899) {
      lookup=EasterTable[year%19][2];
    } else if (year >= 1900 && year <= 2199) {
      lookup=EasterTable[year%19][3];
    } else if ((year >= 2200 && year <= 2299) || (year >= 2400 && year <= 2499)) {
      lookup=EasterTable[year%19][4];
    } else if ((year >= 2300 && year <= 2399) || (year >= 2500 && year <= 2599)) {
      lookup=EasterTable[year%19][5];
    }
  #ifdef _DEBUG
  printf("  lookup=%s\n",lookup);
  #endif
    if (lookup) {
      int res1,res2,res3;
      /* STEP 2 */
      int dd=atoi(lookup+1);
      res1=(*lookup=='M')*((dd-19)%7) + 
           (*lookup=='A')*((dd+5)%7);
  #ifdef _DEBUG
  printf("  res1=%i\n",res1);
  #endif
      int century=year/100;
      if (year<=1582) {
        res2=6-((century+1)%7);
      } else {
        if (century%4 != 0) {
          res2=5-((century-1)%4)*2;
        } else {
          res2=0;
        }
      }
  #ifdef _DEBUG
  printf("  res2=%i\n",res2);
  #endif
      int y=year%100;
      int skip=y/4;
      res3=(y+skip)%7;
  #ifdef _DEBUG
  printf("  res3=%i\n",res3);
  #endif
      /* STEP 3 */
      int dtns=7-((res1+res2+res3)%7);
      if (*lookup=='M' && dd+dtns<=31) {
        md.mon=2;
        md.mday=dd+dtns;
      } else {
        md.mon=3;
        md.mday=dd+dtns;
        if (md.mday>31) md.mday-=31;
      }
  #ifdef _DEBUG
  printf("  RESULT month=%i day=%i\n",md.mon+1,md.mday);
  #endif
    }
    md.key=_Easter;
    return md;
  }
  
  struct MonthDay MemorialDay(int year)
  {
    struct MonthDay md;
    /* Last monday in May */
  #ifdef _DEBUG
  printf("Memorial Day calculation for year %i:\n",year);
  #endif
    if (year>1900) year-=1900;
    struct tm thistime;
    thistime.tm_year=year;
    thistime.tm_mon=4;
    thistime.tm_mday=31;
    thistime.tm_hour=thistime.tm_min=thistime.tm_sec=0;
    thistime.tm_wday=thistime.tm_yday=0;
    thistime.tm_isdst=-1;
    time_t time=mktime(&thistime);
    struct tm* ptr=localtime(&time);
    int dtlm=ptr->tm_wday-1;
    if (dtlm<0) dtlm+=7;
    md.mday=31 - dtlm;
    md.mon=4;
    md.key=_MemorialDay;
  #ifdef _DEBUG
  printf("  RESULT month=%i day=%i\n",md.mon+1,md.mday);
  #endif
    return md;
  }
  
  struct MonthDay IndependenceDay(int)
  {
    struct MonthDay md;
    md.mon=6;
    md.mday=4;
    md.key=_IndependenceDay;
    return md;
  }
  
  struct MonthDay LaborDay(int year)
  {
    struct MonthDay md;
    /* First monday in September */
  #ifdef _DEBUG
  printf("Labor Day calculation for year %i:\n",year);
  #endif
    if (year>1900) year-=1900;
    struct tm thistime;
    thistime.tm_year=year;
    thistime.tm_mon=8;
    thistime.tm_mday=1;
    thistime.tm_hour=thistime.tm_min=thistime.tm_sec=0;
    thistime.tm_wday=thistime.tm_yday=0;
    thistime.tm_isdst=-1;
    time_t time=mktime(&thistime);
    struct tm* ptr=localtime(&time);
    int dtfm=1-ptr->tm_wday;
    if (dtfm<0) dtfm+=7;
    md.mday=dtfm + 1;
    md.mon=8;
    md.key=_LaborDay;
  #ifdef _DEBUG
  printf("  RESULT month=%i day=%i\n",md.mon+1,md.mday);
  #endif
    return md;
  }
  
  struct MonthDay ThanksgivingDay(int year)
  {
    struct MonthDay md;
    /* Fourth thursday in November */
  #ifdef _DEBUG
  printf("Thanksgiving Day calculation for year %i:\n",year);
  #endif
    if (year>1900) year-=1900;
    struct tm thistime;
    thistime.tm_year=year;
    thistime.tm_mon=10;
    thistime.tm_mday=1;
    thistime.tm_hour=thistime.tm_min=thistime.tm_sec=0;
    thistime.tm_wday=thistime.tm_yday=0;
    thistime.tm_isdst=-1;
    time_t time=mktime(&thistime);
    struct tm* ptr=localtime(&time);
    int dtft=4-ptr->tm_wday;
    if (dtft<0) dtft+=7;
    md.mday=dtft + 22;
    md.mon=10;
    md.key=_ThanksgivingDay;
  #ifdef _DEBUG
  printf("  RESULT month=%i day=%i\n",md.mon+1,md.mday);
  #endif
    return md;
  }
  
  struct MonthDay ChristmasDay(int)
  {
    struct MonthDay md;
    md.mon=11;
    md.mday=25;
    md.key=_ChristmasDay;
    return md;
  }
  
  Index: ossp-pkg/titraq/qtcal/holiday.h
  ============================================================
  $ cvs update -p -r1.1 holiday.h
  /*
   *
   * Copyright (c) 1998,1999, Mark Jackson.  
   * All rights reserved.
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License as included in
   * the file COPYING in the main directory for this package.
   *
   * This program is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   *
   */
  
  #ifndef __HOLIDAY_H
  #define __HOLIDAY_H
  
  // Max chars in holiday string
  #define MAXHOLIDAY 50
  
  typedef enum { _NewYearsDay, _MartinLutherKingDay, _WashingtonsBirthday,
    _GoodFriday, _Easter, _MemorialDay, _IndependenceDay, _LaborDay,
    _ThanksgivingDay, _ChristmasDay } HolidayType ;
  
  extern const char* holidayText[];
  
  struct MonthDay {
    short mon;      /* Month 0-11 */
    short mday;     /* Day of month 1-31 */
    short key;      /* Holiday key */
  };
  
  struct MonthDay NewYearsDay(int year);
  struct MonthDay MartinLutherKingDay(int year);
  struct MonthDay WashingtonsBirthday(int year);
  struct MonthDay GoodFriday(int year);
  struct MonthDay Easter(int year);	/* valid years 326 to 2599 A.D. */
  struct MonthDay MemorialDay(int year);
  struct MonthDay IndependenceDay(int year);
  struct MonthDay LaborDay(int year);
  struct MonthDay ThanksgivingDay(int year);
  struct MonthDay ChristmasDay(int year);
  
  #endif
  
  Index: ossp-pkg/titraq/qtcal/makescript
  ============================================================
  $ cvs update -p -r1.1 makescript
  #! /bin/sh
  
  echo "/opkg/bin/moc calendar.h -o moc_calendar.cpp"
  /opkg/bin/moc calendar.h -o moc_calendar.cpp
  
  echo "/opkg/bin/moc demowin.h -o moc_demowin.cpp"
  /opkg/bin/moc demowin.h -o moc_demowin.cpp
  
  echo "g++ -c -fPIC -fno-strength-reduce -w -I/usr/X11R6/include -I/opkg/include/qt calendar.cpp"
  g++ -c -fPIC -fno-strength-reduce -w -I/usr/X11R6/include -I/opkg/include/qt calendar.cpp
  
  echo "g++ -c -fPIC -fno-strength-reduce -w -I/usr/X11R6/include -I/opkg/include/qt moc_calendar.cpp"
  g++ -c -fPIC -fno-strength-reduce -w -I/usr/X11R6/include -I/opkg/include/qt moc_calendar.cpp
  
  echo "g++ -c -fPIC -fno-strength-reduce -w -I/usr/X11R6/include -I/opkg/include/qt holiday.cpp"
  g++ -c -fPIC -fno-strength-reduce -w -I/usr/X11R6/include -I/opkg/include/qt holiday.cpp
  
  echo "g++ -c -fPIC -fno-strength-reduce -w -I/usr/X11R6/include -I/opkg/include/qt worktime.cpp"
  g++ -c -fPIC -fno-strength-reduce -w -I/usr/X11R6/include -I/opkg/include/qt worktime.cpp
  
  echo "g++ -c -fPIC -fno-strength-reduce -w -I/usr/X11R6/include -I/opkg/include/qt caldemo.cpp"
  g++ -c -fPIC -fno-strength-reduce -w -I/usr/X11R6/include -I/opkg/include/qt caldemo.cpp
  
  echo "g++ -c -fPIC -fno-strength-reduce -w -I/usr/X11R6/include -I/opkg/include/qt moc_demowin.cpp"
  g++ -c -fPIC -fno-strength-reduce -w -I/usr/X11R6/include -I/opkg/include/qt moc_demowin.cpp
  
  echo "g++ -L/opkg/lib -L/usr/lib -L/usr/openwin/lib -R/opkg/lib:/usr/lib:/usr/openwin/lib -o caldemo calendar.o holiday.o worktime.o caldemo.o moc_calendar.o moc_demowin.o -pthreads -lqt-mt -lX11 -lXext -lSM -lm -lICE -ldl"
  g++ -L/opkg/lib -L/usr/lib -L/usr/openwin/lib -R/opkg/lib:/usr/lib:/usr/openwin/lib -o caldemo calendar.o holiday.o worktime.o caldemo.o moc_calendar.o moc_demowin.o -pthreads -lqt-mt -lX11 -lXext -lSM -lm -lICE -ldl
  
  echo "rm moc_calendar.cpp moc_demowin.cpp *.o"
  rm moc_calendar.cpp moc_demowin.cpp *.o
  
  Index: ossp-pkg/titraq/qtcal/worktime.cpp
  ============================================================
  $ cvs update -p -r1.1 worktime.cpp
  /*
   *
   * Copyright (c) 1998,1999, Mark Jackson.  
   * All rights reserved.
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License as included in
   * the file COPYING in the main directory for this package.
   *
   * This program is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   *
   */
  
  #include <stdio.h>
  #include <time.h>
  
  #include "holiday.h"
  #include "worktime.h"
  
  // WorkTime
  
  WorkTime::WorkTime(int y)
  {
    year=y;
    if (year>1900) year-=1900;
    // Classify each day of the year
    for (int mon=0;mon<12;mon++) {
      struct tm temptime;
      temptime.tm_sec=temptime.tm_min=temptime.tm_hour=0;
      temptime.tm_mday=1;
      temptime.tm_mon=mon;
      temptime.tm_year=year;
      temptime.tm_wday=temptime.tm_yday=0;
      temptime.tm_isdst=-1;
      time_t temp=mktime(&temptime);
      struct tm* ptr=localtime(&temp);
      int dow=ptr->tm_wday;
      daysinmonth[mon]=numDaysInMonth(mon,year);
      for (int i=0;i<daysinmonth[mon];i++) {
        days[mon][i].dow=dow++;
        if (dow>6) dow=0;
        if (days[mon][i].dow==0 || days[mon][i].dow==6)
          days[mon][i].dtype=Weekend;
        else
          days[mon][i].dtype=WorkDay;
      }
    }
    // Assign the holidays
    // Check New Year's Day of this year and next year
    workHoliday(NewYearsDay(year+1900));
    workHoliday(MartinLutherKingDay(year+1900));
    workHoliday(WashingtonsBirthday(year+1900));
    workHoliday(GoodFriday(year+1900));
    workHoliday(MemorialDay(year+1900));
    workHoliday(IndependenceDay(year+1900));
    workHoliday(LaborDay(year+1900));
    workHoliday(ThanksgivingDay(year+1900));
    workHoliday(ChristmasDay(year+1900));
    if (days[11][30].dow == Fri) {
      days[11][30].dtype=HolidayObserved;
      days[11][30].key=_NewYearsDay;
    }
  }
  
  int WorkTime::monthLength(int mon)
  {
    return daysinmonth[mon];
  }
  
  int WorkTime::dayType(int mon, int day)
  {
    return days[mon][day].dtype;
  }
  
  int WorkTime::isWorkDay(int mon, int day)
  {
    if (days[mon][day].dtype == WorkDay)
      return 1;
    return 0;
  }
  
  int WorkTime::isHoliday(int mon, int day)
  {
    if (days[mon][day].dtype == Holiday || 
        days[mon][day].dtype == HolidayObserved)
      return 1;
    return 0;
  }
  
  int WorkTime::isWeekend(int mon, int day)
  {
    if (days[mon][day].dtype == Weekend)
      return 1;
    return 0;
  }
  
  const char* WorkTime::dayText(int mon, int day)
  {
    if (days[mon][day].dtype == Holiday)
      return holidayText[days[mon][day].key];
    if (days[mon][day].dtype == HolidayObserved) {
      sprintf(workstr,"%s (observed)",holidayText[days[mon][day].key]);
      return workstr;
    }
    return "";
  }
  
  int WorkTime::dayNumber(int mon, int day)
  {
    if (days[mon][day].dtype == WorkDay)
      return days[mon][day].key+1;
    return -1;
  }
  
  void WorkTime::numberWorkDays(void)
  {
    int count=0;
    for (int i=0;i<12;i++) {
      for (int j=0;j<daysinmonth[i];j++) {
        if (days[i][j].dtype == WorkDay)
          days[i][j].key=count++;
      }
    }
  }
  
  void WorkTime::dump(void)
  {
    for (int mon=0;mon<12;mon++) {
      if (mon>0) printf("\n");
      for (int j=0;j<(int)days[mon][0].dow;j++)
        printf(" ");
      for (int j=0;j<daysinmonth[mon];j++) {
        if (days[mon][j].dtype==WorkDay)
          printf("T");
        if (days[mon][j].dtype==Weekend)
          printf("W");
        if (days[mon][j].dtype==Holiday)
          printf("H");
        if (days[mon][j].dtype==HolidayObserved)
          printf("O");
        if (days[mon][j].dow==6)
          printf("\n");
      }
    }
    printf("\n");
    printf("sizeof (DAY) = %i\n",sizeof(DAY));
  }
  
  int WorkTime::numDaysInMonth(int mon, int year)
  {
    if (mon==0) return 31;	// January
    if (mon==1) {			// February
      if (year%4 == 0) {
        if (year%100 == 0) return 28;
        else return 29;
      }
      return 28;
    }
    if (mon==2) return 31;	// March
    if (mon==3) return 30;	// April
    if (mon==4) return 31;	// May
    if (mon==5) return 30;	// June
    if (mon==6) return 31;	// July
    if (mon==7) return 31;	// August
    if (mon==8) return 30;	// September
    if (mon==9) return 31;	// October
    if (mon==10) return 30;	// November
    if (mon==11) return 31;	// December
    return -1;  // error
  }
  
  void WorkTime::workHoliday(struct MonthDay md)
  {
    int actday=md.mday;
    int actmon=md.mon;
    int extra=0;
    if (days[actmon][actday-1].dow == Sat) {
      /* if date is on a Saturday, holiday is on the previous Friday */
      extra=1;
      actday--;
      if (actday == 0) { 
        if (actmon>0) actday=daysinmonth[--actmon];
        else extra=0;
      }
    } else if (days[actmon][actday-1].dow == Sun) {
      /* if date is on a Sunday, holiday is on the next Monday */
      extra=1;
      actday++;
      if (actday > daysinmonth[actmon]) {
        if (actmon<11) {
          actday=1;
          actmon++;
        } else
          extra=0;
      }
    }
    if (days[md.mon][md.mday-1].dow != Sun && days[md.mon][md.mday-1].dow != Sat) {
      days[md.mon][md.mday-1].dtype=Holiday;
      days[md.mon][md.mday-1].key=md.key;
    }
    if (extra) {
      days[actmon][actday-1].dtype=HolidayObserved;
      days[actmon][actday-1].key=md.key;
    }
  }
  
  
  Index: ossp-pkg/titraq/qtcal/worktime.h
  ============================================================
  $ cvs update -p -r1.1 worktime.h
  /*
   *
   * Copyright (c) 1998,1999, Mark Jackson.  
   * All rights reserved.
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License as included in
   * the file COPYING in the main directory for this package.
   *
   * This program is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   *
   */
  
  #ifndef __WORKTIME_H
  #define __WORKTIME_H
  
  #include "holiday.h"
  
  typedef enum {Sun, Mon, Tue, Wed, Thu, Fri, Sat} DOW;
  typedef enum {WorkDay, Weekend, Holiday, HolidayObserved} DTYPE;
  
  struct DAY {
    unsigned int dow:4;
    unsigned int dtype:4;
    unsigned char key;
  };
  
  class WorkTime {
  public:
    WorkTime(int year);
    int monthLength(int mon);
    int dayType(int mon, int day);
    int isWorkDay(int mon, int day);
    int isWeekend(int mon, int day);
    int isHoliday(int mon, int day);
    const char* dayText(int mon, int day);
    int dayNumber(int mon, int day);
    void numberWorkDays(void);
    void dump(void);
  private:
    int numDaysInMonth(int mon, int year);
    void workHoliday(struct MonthDay);
  
    int year;
    int daysinmonth[12];
    DAY days[12][31];
    char workstr[MAXHOLIDAY];
  };
  
  #endif
  

From ossp-cvs-owner@ossp.org  Thu Nov 21 16:37:09 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A89BB76A48; Thu, 21 Nov 2002 16:37:08 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq TODO titassist.cpp titraq.h titslot.cpp
Message-Id: <20021121153708.A89BB76A48@mail.ossp.org>
Date: Thu, 21 Nov 2002 16:37:08 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   21-Nov-2002 16:37:08
  Branch: HEAD                             Handle: 2002112115370800

  Modified files:
    ossp-pkg/titraq         TODO titassist.cpp titraq.h titslot.cpp

  Log:
    Consistency fix, and repair slots for opening and saving to local files.

  Summary:
    Revision    Changes     Path
    1.8         +1  -0      ossp-pkg/titraq/TODO
    1.8         +2  -2      ossp-pkg/titraq/titassist.cpp
    1.16        +3  -3      ossp-pkg/titraq/titraq.h
    1.6         +10 -12     ossp-pkg/titraq/titslot.cpp
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/TODO
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 TODO
  --- ossp-pkg/titraq/TODO	19 Nov 2002 19:42:14 -0000	1.7
  +++ ossp-pkg/titraq/TODO	21 Nov 2002 15:37:08 -0000	1.8
  @@ -16,6 +16,7 @@
   QWhatsThis::add(m_pAddbutton, trUtf8("Para soltar la pepa"));
   configure soll ueberpruefen ob libqt[-mt] threads braucht,
     dann wenn so, soll den LIBS -pthread hardgecodet haben
  +Report errors in all slot code by throwing exceptions
   
   Dreams
   ------
  Index: ossp-pkg/titraq/titassist.cpp
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 titassist.cpp
  --- ossp-pkg/titraq/titassist.cpp	20 Nov 2002 19:37:27 -0000	1.7
  +++ ossp-pkg/titraq/titassist.cpp	21 Nov 2002 15:37:08 -0000	1.8
  @@ -112,7 +112,7 @@
       m_pFileopenact = new QAction(trUtf8("Open File"), QPixmap(s_kpcFileopen_xpm), trUtf8("&Open..."), CTRL+Key_O, this, "Open");
       if (m_pFileopenact == NULL) // Sanity check
           throw Genexcept("Main window file open action creation failed.");
  -    connect(m_pFileopenact, SIGNAL(activated()), this, SLOT(choose()));
  +    connect(m_pFileopenact, SIGNAL(activated()), this, SLOT(chooseFile()));
       const char *kszFileopentext = trUtf8("<p><img source=\"fileopen\"> "
                                     "Click this button to open a <em>new file</em>."
                                     "You can also select the <b>Open</b> command "
  @@ -123,7 +123,7 @@
       m_pFilesaveact = new QAction(trUtf8("Save File"), QPixmap(s_kpcFilesave_xpm), trUtf8("&Save"), CTRL+Key_S, this, "Save");
       if (m_pFilesaveact == NULL) // Sanity check
           throw Genexcept("Main window file save action creation failed.");
  -    connect(m_pFilesaveact, SIGNAL(activated()), this, SLOT(save()));
  +    connect(m_pFilesaveact, SIGNAL(activated()), this, SLOT(saveFile()));
       const char *kszFilesavetext = trUtf8("<p><img source=\"filesave\"> "
                                     "Click this button to <em>save</em> the file you "
                                     "are editing. You will be prompted for a file name.\n"
  Index: ossp-pkg/titraq/titraq.h
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 titraq.h
  --- ossp-pkg/titraq/titraq.h	20 Nov 2002 11:06:32 -0000	1.15
  +++ ossp-pkg/titraq/titraq.h	21 Nov 2002 15:37:08 -0000	1.16
  @@ -64,9 +64,9 @@
       void delEntry(void);                // Delete a task entry from the list
       void writeEntry(void);              // Write the task list to a filedescriptor
       void newDoc(void);                  // Make and display a new document window
  -    void choose(void);                  // Choose a file using a handy file dialog
  -    void load(const QString &);         // Load accounting data into main window
  -    void save(void);                    // Serialize to the current file
  +    void chooseFile(void);              // Choose a file using a handy file dialog
  +    void loadData(const QString &);     // Load accounting data into main window
  +    void saveFile(void);                // Serialize to the current file
       void saveAs(void);                  // Serialize to a selected file
       void helpContents(void);            // Use the help contents
       void aboutTitraq(void);             // Learn more about this program itself
  Index: ossp-pkg/titraq/titslot.cpp
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 titslot.cpp
  --- ossp-pkg/titraq/titslot.cpp	20 Nov 2002 11:06:32 -0000	1.5
  +++ ossp-pkg/titraq/titslot.cpp	21 Nov 2002 15:37:08 -0000	1.6
  @@ -28,7 +28,7 @@
   }
   
   //
  -// Choose a file using a handy file dialog
  +// Delete a row entry from the current data window
   //
   void Titraqform::delEntry(void)
   {
  @@ -59,11 +59,11 @@
   //
   // Choose a file using a handy file dialog
   //
  -void Titraqform::choose(void)
  +void Titraqform::chooseFile(void)
   {
  -    QString Filestring = QFileDialog::getOpenFileName(QString::null, QString::null, this);
  +    QString Filestring = QFileDialog::getOpenFileName("/e/dev/as", QString::null, this, trUtf8("Chooser Dialog"), trUtf8("Choose a file to open"));
       if (!Filestring.isEmpty())
  -        load(Filestring);
  +        loadData(Filestring);
       else
           m_pStatbar->message(trUtf8("Loading aborted"), 4000);
   }
  @@ -71,7 +71,7 @@
   //
   // Load accounting data into main window
   //
  -void Titraqform::load(const QString &Filestring)
  +void Titraqform::loadData(const QString &Filestring)
   {
       QFile Filetemp(Filestring);         // File to load
   
  @@ -88,7 +88,7 @@
   //
   // Serialize current state to the current file
   //
  -void Titraqform::save(void)
  +void Titraqform::saveFile(void)
   {
       // First time saves are really just saveAs in disguise
       if (m_szFilename->isEmpty()) {
  @@ -96,8 +96,7 @@
           return;
       }
   
  -    // Try to read the status text, and write it to a file
  -    QString Statustext = m_pRemark->text();
  +    // Try to open a file for writing to
       QFile Filetemp(*m_szFilename);
       if (!Filetemp.open(IO_WriteOnly)) {
           m_pStatbar->message(QString(trUtf8("Could not write to %1")).arg(*m_szFilename), 4000);
  @@ -106,7 +105,7 @@
   
       // Serialize file contents and write to text line
       QTextStream Filestream(&Filetemp);
  -    Filestream << Statustext;
  +    Filestream << m_pRemark->text();
       Filetemp.close();
   
       // Reset the text line, and give output to main window
  @@ -125,8 +124,7 @@
       QString Filestring = QFileDialog::getSaveFileName(QString::null, QString::null, this);
       if (!Filestring.isEmpty()) {
           *m_szFilename = Filestring;
  -        m_pRemark->setText(*m_szFilename);
  -        save(); // Finish off by calling the save action
  +        saveFile(); // Finish off by calling the save action
       }
       else {
           // User did not select a valid file and push okay button
  @@ -150,7 +148,7 @@
           trUtf8("The document has been\nchanged since the last save.")),
           trUtf8("Save Now"), trUtf8("Cancel"), trUtf8("Leave Anyway"), 0, 1) {
       case 0:
  -        save();
  +        saveFile();
           pClosit->accept();
           break;
       case 1:

From ossp-cvs-owner@ossp.org  Fri Nov 22 12:46:34 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9B9A676B34; Fri, 22 Nov 2002 12:46:33 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq Makefile.in TODO tidatops.cpp titraq.h tit...
Message-Id: <20021122114633.9B9A676B34@mail.ossp.org>
Date: Fri, 22 Nov 2002 12:46:33 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   22-Nov-2002 12:46:33
  Branch: HEAD                             Handle: 2002112211463200

  Added files:
    ossp-pkg/titraq         tidatops.cpp
  Modified files:
    ossp-pkg/titraq         Makefile.in TODO titraq.h titslot.cpp

  Log:
    Start using real AS data, correct load logic, and move data operations
    to tidatops.

  Summary:
    Revision    Changes     Path
    1.14        +2  -2      ossp-pkg/titraq/Makefile.in
    1.9         +1  -1      ossp-pkg/titraq/TODO
    1.1         +31 -0      ossp-pkg/titraq/tidatops.cpp
    1.17        +5  -1      ossp-pkg/titraq/titraq.h
    1.7         +7  -21     ossp-pkg/titraq/titslot.cpp
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/Makefile.in
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 Makefile.in
  --- ossp-pkg/titraq/Makefile.in	20 Nov 2002 22:04:24 -0000	1.13
  +++ ossp-pkg/titraq/Makefile.in	22 Nov 2002 11:46:32 -0000	1.14
  @@ -65,9 +65,9 @@
   TARGET_PROGS    = titraq
   TARGET_MANS     = titraq.1 titraq.conf.5
   
  -SRCS            = main.cpp titraq.cpp titassist.cpp titslot.cpp titrex.cpp generic.cpp titraq_version.c
  +SRCS            = main.cpp titraq.cpp titassist.cpp titslot.cpp tidatops.cpp titrex.cpp generic.cpp titraq_version.c
   
  -OBJS            = main.o titraq.o titassist.o titslot.o titrex.o generic.o titraq_version.o
  +OBJS            = main.o titraq.o titassist.o titslot.o tidatops.o titrex.o generic.o titraq_version.o
   
   GRAFX           = gfx/ossplogo.xpm
   
  Index: ossp-pkg/titraq/TODO
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 TODO
  --- ossp-pkg/titraq/TODO	21 Nov 2002 15:37:08 -0000	1.8
  +++ ossp-pkg/titraq/TODO	22 Nov 2002 11:46:32 -0000	1.9
  @@ -16,7 +16,7 @@
   QWhatsThis::add(m_pAddbutton, trUtf8("Para soltar la pepa"));
   configure soll ueberpruefen ob libqt[-mt] threads braucht,
     dann wenn so, soll den LIBS -pthread hardgecodet haben
  -Report errors in all slot code by throwing exceptions
  +Report errors in all slot code and tidatops by throwing exceptions
   
   Dreams
   ------
  Index: ossp-pkg/titraq/tidatops.cpp
  ============================================================
  $ cvs update -p -r1.1 tidatops.cpp
  #include "titraq.h"
  
  
  //
  // Convenience method to load accounting data from a file
  //
  void Titraqform::loadData(QFile &Fileobj)
  {
      if (Fileobj.isOpen()) {             // Check state of file
          Fileobj.flush();                // Begin processing file cleanly
          QTextStream Asentry(&Fileobj);  // Convert data to stream
          loadData(Asentry);              // Pass off to do the real work
      }
      else {
          if (!Fileobj.open(IO_ReadOnly)) // Need a wrapped exception here,
              return;                     // instead of a short circuit
          QTextStream Asentry(&Fileobj);  // Convert data to stream
          loadData(Asentry);              // Pass off to do the real work
          Fileobj.close();                // Finish fileop by closing
      }
  }
  
  //
  // Load accounting data from a stream
  //
  void Titraqform::loadData(QTextStream &Tstream)
  {
      m_pRemark->setText(Tstream.readLine()); // Read from stream
      m_pRemark->setEdited(false);            // Reset widget
  }
  
  Index: ossp-pkg/titraq/titraq.h
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 titraq.h
  --- ossp-pkg/titraq/titraq.h	21 Nov 2002 15:37:08 -0000	1.16
  +++ ossp-pkg/titraq/titraq.h	22 Nov 2002 11:46:32 -0000	1.17
  @@ -14,6 +14,7 @@
   #include <qspinbox.h>
   #include <qlineedit.h>
   #include <qlayout.h>
  +#include <qfile.h>
   
   // Intentional no operation
   #define TITRAQ_NOP ((void)0)
  @@ -65,7 +66,6 @@
       void writeEntry(void);              // Write the task list to a filedescriptor
       void newDoc(void);                  // Make and display a new document window
       void chooseFile(void);              // Choose a file using a handy file dialog
  -    void loadData(const QString &);     // Load accounting data into main window
       void saveFile(void);                // Serialize to the current file
       void saveAs(void);                  // Serialize to a selected file
       void helpContents(void);            // Use the help contents
  @@ -118,6 +118,10 @@
       void setupEditlay(void);            // Editing lay
       void setupButtons(void);            // Push button widgets
       void setupPieces(void);             // Assemble widget pieces
  +
  +    // Data processing
  +    void loadData(QFile &);             // Load accounting data from file
  +    void loadData(QTextStream &);       // Load accounting data from stream
   };
   
   #endif // TITRAQMWIN_H
  Index: ossp-pkg/titraq/titslot.cpp
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 titslot.cpp
  --- ossp-pkg/titraq/titslot.cpp	21 Nov 2002 15:37:08 -0000	1.6
  +++ ossp-pkg/titraq/titslot.cpp	22 Nov 2002 11:46:32 -0000	1.7
  @@ -1,5 +1,4 @@
   // Qt headers
  -#include <qfile.h>
   #include <qfiledialog.h>
   
   // User interface
  @@ -61,28 +60,15 @@
   //
   void Titraqform::chooseFile(void)
   {
  -    QString Filestring = QFileDialog::getOpenFileName("/e/dev/as", QString::null, this, trUtf8("Chooser Dialog"), trUtf8("Choose a file to open"));
  -    if (!Filestring.isEmpty())
  -        loadData(Filestring);
  +    QString Filestring = QFileDialog::getOpenFileName("/export/home/mschloh/tmp/bifftest/ms.txt", QString::null, this, trUtf8("Chooser Dialog"), trUtf8("Choose a file to open"));
  +    if (!Filestring.isEmpty()) {
  +        QFile Filetemp(Filestring); // File to load
  +        loadData(Filetemp);         // Pass to helper method
  +        setCaption(Filestring);
  +        m_pStatbar->message(trUtf8("Loaded document ") + Filestring, 4000);
  +    }
       else
           m_pStatbar->message(trUtf8("Loading aborted"), 4000);
  -}
  -
  -//
  -// Load accounting data into main window
  -//
  -void Titraqform::loadData(const QString &Filestring)
  -{
  -    QFile Filetemp(Filestring);         // File to load
  -
  -    if (!Filetemp.open(IO_ReadOnly))    // Need a wrapped exception here
  -        return;
  -
  -    QTextStream Textstream(&Filetemp);  // Convert the file contents to a stream
  -    m_pRemark->setText(Textstream.read());
  -    m_pRemark->setEdited(false);
  -    setCaption(Filestring);
  -    m_pStatbar->message(trUtf8("Loaded document ") + Filestring, 4000);
   }
   
   //

From ossp-cvs-owner@ossp.org  Fri Nov 22 15:34:33 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 33DD476A61; Fri, 22 Nov 2002 15:34:33 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg cfg_node.c cfg_node.h
Message-Id: <20021122143433.33DD476A61@mail.ossp.org>
Date: Fri, 22 Nov 2002 15:34:33 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Nov-2002 15:34:33
  Branch: HEAD                             Handle: 2002112214343200

  Modified files:
    ossp-pkg/cfg            cfg_node.c cfg_node.h

  Log:
    more code cleanups to node sub-API

  Summary:
    Revision    Changes     Path
    1.17        +248 -134   ossp-pkg/cfg/cfg_node.c
    1.8         +1  -2      ossp-pkg/cfg/cfg_node.h
  ____________________________________________________________________________

  Index: ossp-pkg/cfg/cfg_node.c
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 cfg_node.c
  --- ossp-pkg/cfg/cfg_node.c	18 Nov 2002 09:51:29 -0000	1.16
  +++ ossp-pkg/cfg/cfg_node.c	22 Nov 2002 14:34:32 -0000	1.17
  @@ -39,68 +39,104 @@
   #include "cfg_node.h"
   #include "cfg_fmt.h"
   
  -cfg_rc_t cfg_node_create(cfg_t *cfg, cfg_node_t **node)
  +/* create a configuration node */
  +cfg_rc_t
  +cfg_node_create(
  +    cfg_t *cfg,
  +    cfg_node_t **node)
   {
       cfg_node_t *n;
       cfg_rc_t rc;
   
  +    /* argument sanity checking */
       if (node == NULL)
           return CFG_ERR_ARG;
  +
  +    /* allocate memory */
       if ((rc = cfg_grid_alloc(cfg->grid_nodes, (void **)&n)) != CFG_OK)
           return rc;
  +
  +    /* initialize node attributes */
       n->parent   = NULL;
  -    n->lbroth   = NULL;
       n->rbroth   = NULL;
       n->child1   = NULL;
  -    n->srcname  = NULL;
  -    n->srcpos   = 0;
       n->type     = CFG_NODE_TYPE_ARG;
       n->token    = NULL;
       cfg_data_init(&n->data);
  +    n->srcname  = NULL;
  +    n->srcpos   = 0;
       *node = n;
  +
       return CFG_OK;
   }
   
  -cfg_rc_t cfg_node_destroy(cfg_t *cfg, cfg_node_t *node)
  +/* destroy a configuration node */
  +cfg_rc_t
  +cfg_node_destroy(
  +    cfg_t *cfg,
  +    cfg_node_t *node)
   {
  +    /* argument sanity checking */
       if (node == NULL)
           return CFG_ERR_ARG;
  +
  +    /* destroy memory */
       if (node->token != NULL)
           free(node->token);
       if (node->srcname != NULL)
           free(node->srcname);
       cfg_grid_free(cfg->grid_nodes, node);
  +
       return CFG_OK;
   }
   
  -cfg_rc_t cfg_node_clone(cfg_t *cfg, cfg_node_t *node, cfg_node_t **node2)
  +/* clone a node */
  +cfg_rc_t
  +cfg_node_clone(
  +    cfg_t *cfg,
  +    cfg_node_t *node,
  +    cfg_node_t **node2)
   {
       cfg_node_t *n;
       cfg_rc_t rc;
   
  +    /* argument sanity checking */
       if (node == NULL || node2 == NULL)
           return CFG_ERR_ARG;
  +
  +    /* allocate memory for new node */
       if ((rc = cfg_grid_alloc(cfg->grid_nodes, (void **)&n)) != CFG_OK)
           return rc;
  +
  +    /* clone node attributes */
       n->parent   = node->parent;
  -    n->lbroth   = node->lbroth;
       n->rbroth   = node->rbroth;
       n->child1   = node->child1;
  -    n->srcname  = (node->srcname != NULL ? strdup(node->srcname) : NULL);
  -    n->srcpos   = node->srcpos;
       n->type     = node->type;
       n->token    = (node->token != NULL ? strdup(node->token) : NULL);
       cfg_data_copy(&node->data, &n->data);
  +    n->srcname  = (node->srcname != NULL ? strdup(node->srcname) : NULL);
  +    n->srcpos   = node->srcpos;
       *node2 = n;
  +
       return CFG_OK;
   }
   
  -cfg_rc_t cfg_node_set(cfg_t *cfg, cfg_node_t *node, cfg_node_attr_t attr, ...)
  +/* set a node attribute */
  +cfg_rc_t
  +cfg_node_set(
  +    cfg_t *cfg,
  +    cfg_node_t *node,
  +    cfg_node_attr_t attr,
  +    ...)
   {
       va_list ap;
   
  +    /* argument sanity checking */
       if (node == NULL)
           return CFG_ERR_ARG;
  +
  +    /* dispatch into individual attribute handling */
       va_start(ap, attr);
       switch (attr) {
           case CFG_NODE_ATTR_PARENT: {
  @@ -108,7 +144,7 @@
               break;
           }
           case CFG_NODE_ATTR_LBROTH: {
  -            return CFG_ERR_USE;
  +            return CFG_ERR_USE; /* cannot be set, only get */
           }
           case CFG_NODE_ATTR_RBROTH: {
               node->rbroth = (cfg_node_t *)va_arg(ap, cfg_node_t *);
  @@ -119,28 +155,16 @@
               break;
           }
           case CFG_NODE_ATTR_CHILDL: {
  -            return CFG_ERR_USE;
  +            return CFG_ERR_USE; /* cannot be set, only get */
           }
           case CFG_NODE_ATTR_CHILDS: {
  -            return CFG_ERR_USE;
  +            return CFG_ERR_USE; /* cannot be set, only get */
           }
           case CFG_NODE_ATTR_NODES: {
  -            return CFG_ERR_USE;
  +            return CFG_ERR_USE; /* cannot be set, only get */
           }
           case CFG_NODE_ATTR_DEPTH: {
  -            return CFG_ERR_USE;
  -        }
  -        case CFG_NODE_ATTR_SRCNAME: {
  -            if (node->srcname != NULL)
  -                free(node->srcname);
  -            node->srcname = (char *)va_arg(ap, char *);
  -            if (node->srcname != NULL)
  -                node->srcname = strdup(node->srcname);
  -            break;
  -        }
  -        case CFG_NODE_ATTR_SRCPOS: {
  -            node->srcpos = (int)va_arg(ap, int);
  -            break;
  +            return CFG_ERR_USE; /* cannot be set, only get */
           }
           case CFG_NODE_ATTR_TYPE: {
               node->type = (cfg_node_type_t)va_arg(ap, cfg_node_type_t);
  @@ -157,14 +181,30 @@
           case CFG_NODE_ATTR_DATA: {
               return CFG_ERR_USE;
           }
  +        case CFG_NODE_ATTR_SRCNAME: {
  +            if (node->srcname != NULL)
  +                free(node->srcname);
  +            node->srcname = (char *)va_arg(ap, char *);
  +            if (node->srcname != NULL)
  +                node->srcname = strdup(node->srcname);
  +            break;
  +        }
  +        case CFG_NODE_ATTR_SRCPOS: {
  +            node->srcpos = (int)va_arg(ap, int);
  +            break;
  +        }
           default:
               return CFG_ERR_ARG;
       }
       va_end(ap);
  +
       return CFG_OK;
   }
   
  -static int cfg_node_get_nodes(cfg_node_t *node)
  +/* INTERNAL: calculate number of nodes */
  +static int
  +cfg_node_get_nodes(
  +    cfg_node_t *node)
   {
       int n;
   
  @@ -180,12 +220,20 @@
       return n;
   }
   
  -cfg_rc_t cfg_node_get(cfg_t *cfg, cfg_node_t *node, cfg_node_attr_t attr, ...)
  +cfg_rc_t
  +cfg_node_get(
  +    cfg_t *cfg,
  +    cfg_node_t *node,
  +    cfg_node_attr_t attr,
  +    ...)
   {
       va_list ap;
   
  +    /* argument sanity checking */
       if (node == NULL)
           return CFG_ERR_ARG;
  +
  +    /* dispatch into individual attribute handling */
       va_start(ap, attr);
       switch (attr) {
           case CFG_NODE_ATTR_PARENT: {
  @@ -267,20 +315,6 @@
                   (*k)++;
               break;
           }
  -        case CFG_NODE_ATTR_SRCNAME: {
  -            char **name = (char **)va_arg(ap, char **);
  -            if (name == NULL)
  -                return CFG_ERR_ARG;
  -            *name = node->srcname;
  -            break;
  -        }
  -        case CFG_NODE_ATTR_SRCPOS: {
  -            int *pos = (int *)va_arg(ap, int *);
  -            if (pos == NULL)
  -                return CFG_ERR_ARG;
  -            *pos = node->srcpos;
  -            break;
  -        }
           case CFG_NODE_ATTR_TYPE: {
               cfg_node_type_t *type = (cfg_node_type_t *)va_arg(ap, void *);
               if (type == NULL)
  @@ -302,21 +336,45 @@
               *data = &(node->data);
               break;
           }
  +        case CFG_NODE_ATTR_SRCNAME: {
  +            char **name = (char **)va_arg(ap, char **);
  +            if (name == NULL)
  +                return CFG_ERR_ARG;
  +            *name = node->srcname;
  +            break;
  +        }
  +        case CFG_NODE_ATTR_SRCPOS: {
  +            int *pos = (int *)va_arg(ap, int *);
  +            if (pos == NULL)
  +                return CFG_ERR_ARG;
  +            *pos = node->srcpos;
  +            break;
  +        }
           default:
               return CFG_ERR_ARG;
       }
       va_end(ap);
  +
       return CFG_OK;
   }
   
  -cfg_rc_t cfg_node_root(cfg_t *cfg, cfg_node_t **node)
  +/* return root node */
  +cfg_rc_t
  +cfg_node_root(
  +    cfg_t *cfg,
  +    cfg_node_t **node)
   {
  +    /* argument sanity checking */
       if (cfg == NULL || node == NULL)
           return CFG_ERR_ARG;
  +
  +    /* just return the root pointer */
       *node = cfg->root;
  +
       return CFG_OK;
   }
   
  +/* forward declarations for internal stepping functions */
   static cfg_rc_t
   cfg_node_select_step1(
       cfg_t *, cfg_node_t *, cfg_node_t ***, long *, const char *);
  @@ -324,6 +382,7 @@
   cfg_node_select_step2(
       cfg_t *, cfg_node_t *, cfg_node_t ***, long *, const char *, const char *, size_t, long, long, long *);
   
  +/* INTERNAL: selection stepping function (part 3, matching node processing) */
   static cfg_rc_t
   cfg_node_select_step3(
       cfg_t *cfg,
  @@ -336,30 +395,38 @@
   {
       cfg_rc_t rc;
   
  -    fprintf(stderr, "step3: (1) cpSel=\"%s\", nSel=%d, nFilMin=%ld, nFilMax=%ld, nFound=%ld\n", cpSel, nSel, nFilMin, nFilMax, *nFound);
  +    fprintf(stderr, "      step3: (1) cpSel=\"%s\", nSel=%d, spec=\"%s\", nFilMin=%ld, nFilMax=%ld, nFound=%ld\n",
  +            cpSel, nSel, spec, nFilMin, nFilMax, *nFound);
   
       if (spec[0] == '\0') {
           /* end of selection, node found */
  -        *nFound++;
  -        fprintf(stderr, "step3: found node=0x%lx!!\n", (unsigned long)node);
  +        (*nFound)++;
  +        fprintf(stderr, "      step3: (2) found node!!\n");
  +        fprintf(stderr, "      step3:     current node=0x%lx type=%s token=\"%s\"\n",
  +                (unsigned long)node,
  +                (node != NULL ? (node->type == CFG_NODE_TYPE_SEQ ? "SEQ" : (node->type == CFG_NODE_TYPE_DIR ? "DIR" : "ARG")) : "<NULL>/.."),
  +                (node != NULL ? (node->token != NULL ? node->token : "<NULL>") : "<NULL>/.."));
           if (nFilMin <= *nFound && *nFound <= nFilMax) {
  -            if (result_len != NULL)
  +            if (result_len != NULL) {
                   (*result_len)++;
  -            if (result_vec != NULL) {
  -                if ((*result_vec = (cfg_node_t **)realloc(*result_vec, sizeof(cfg_node_t *)*((*result_len)+1))) == NULL)
  -                    return CFG_ERR_SYS;
  -                (*result_vec)[(*result_len)-1] = node;
  -                (*result_vec)[(*result_len)] = NULL;
  +                if (result_vec != NULL) {
  +                    if ((*result_vec = (cfg_node_t **)realloc(*result_vec, sizeof(cfg_node_t *)*((*result_len)+1))) == NULL)
  +                        return CFG_ERR_SYS;
  +                    (*result_vec)[(*result_len)-1] = node;
  +                    (*result_vec)[(*result_len)] = NULL;
  +                }
               }
           }
           rc = CFG_OK;
       }
       else {
  +        /* start over with next step */
           rc = cfg_node_select_step1(cfg, node, result_vec, result_len, spec);
       }
       return rc;
   }
   
  +/* INTERNAL: selection stepping function (part 2, node matching) */
   static cfg_rc_t
   cfg_node_select_step2(
       cfg_t *cfg,
  @@ -372,94 +439,108 @@
   {
       cfg_rc_t rc;
       char *token;
  +    cfg_node_t *node2;
  +    cfg_node_type_t type;
   
  -    fprintf(stderr, "step2: (1) cpSel=\"%s\", nSel=%d, nFilMin=%ld, nFilMax=%ld, nFound=%ld\n", cpSel, nSel, nFilMin, nFilMax, *nFound);
  +    fprintf(stderr, "    step2: (1) cpSel=\"%.*s\", nSel=%d, spec=\"%s\", nFilMin=%ld, nFilMax=%ld, nFound=%ld\n",
  +            nSel, cpSel, nSel, spec, nFilMin, nFilMax, *nFound);
  +    fprintf(stderr, "    step2:     current node=0x%lx type=%s token=\"%s\"\n",
  +            (unsigned long)node,
  +            (node != NULL ? (node->type == CFG_NODE_TYPE_SEQ ? "SEQ" : (node->type == CFG_NODE_TYPE_DIR ? "DIR" : "ARG")) : "<NULL>/.."),
  +            (node != NULL ? (node->token != NULL ? node->token : "<NULL>") : "<NULL>/.."));
   
  -    if (strncmp(cpSel, ".", nSel) == 0) {
  +    rc = CFG_OK;
  +    if (nSel == 1 && strncmp(cpSel, ".", nSel) == 0) {
           /* current node (no-op) */
  -        return cfg_node_select_step3(cfg, node, result_vec, result_len, spec, cpSel, nSel, nFilMin, nFilMax, nFound);
  +        fprintf(stderr, "    step2: search current node, starting at node 0x%lx\n", (unsigned long)node);
  +        rc = cfg_node_select_step3(cfg, node, result_vec, result_len, spec, cpSel, nSel, nFilMin, nFilMax, nFound);
       }
  -    else if (strncmp(cpSel, "..", nSel) == 0) {
  +    else if (nSel == 2 && strncmp(cpSel, "..", nSel) == 0) {
           /* parent node */
  -        if ((node = node->parent) == NULL)
  -            return CFG_OK;
  -        if (node->type == CFG_NODE_TYPE_DIR)
  -            if ((node = node->parent) == NULL)
  -                return CFG_OK;
  -        return cfg_node_select_step3(cfg, node, result_vec, result_len, spec, cpSel, nSel, nFilMin, nFilMax, nFound);
  +        fprintf(stderr, "    step2: search parent node, starting at node 0x%lx\n", (unsigned long)node);
  +        if (cfg_node_get(cfg, node, CFG_NODE_ATTR_PARENT, &node) == CFG_OK && node != NULL)
  +            rc = cfg_node_select_step3(cfg, node, result_vec, result_len, spec, cpSel, nSel, nFilMin, nFilMax, nFound);
       }
  -    else if (strncmp(cpSel, "....", nSel) == 0) {
  +    else if (nSel == 4 && strncmp(cpSel, "....", nSel) == 0) {
           /* anchestor nodes */
  -        while ((node = node->parent) != NULL) {
  -            if (node->type == CFG_NODE_TYPE_DIR)
  -                if ((node = node->parent) == NULL)
  -                    break;
  +        fprintf(stderr, "    step2: search ancestor nodes, starting at node 0x%lx\n", (unsigned long)node);
  +        while (cfg_node_get(cfg, node, CFG_NODE_ATTR_PARENT, &node) == CFG_OK && node != NULL)
               if ((rc = cfg_node_select_step3(cfg, node, result_vec, result_len, spec, cpSel, nSel, nFilMin, nFilMax, nFound)) != CFG_OK)
  -                return rc;
  -        }
  -        return CFG_OK;
  +                break;
       }
  -    else if (strncmp(cpSel, "-", nSel) == 0) {
  +    else if (nSel == 1 && strncmp(cpSel, "-", nSel) == 0) {
           /* previous sibling node */
  -        if ((rc = cfg_node_get(cfg, node, CFG_NODE_ATTR_LBROTH, &node)) != CFG_OK)
  -            return CFG_OK;
  -        return cfg_node_select_step3(cfg, node, result_vec, result_len, spec, cpSel, nSel, nFilMin, nFilMax, nFound);
  +        fprintf(stderr, "    step2: search previous sibling node, starting at node 0x%lx\n", (unsigned long)node);
  +        if ((rc = cfg_node_get(cfg, node, CFG_NODE_ATTR_LBROTH, &node)) == CFG_OK && node != NULL)
  +            rc = cfg_node_select_step3(cfg, node, result_vec, result_len, spec, cpSel, nSel, nFilMin, nFilMax, nFound);
       }
  -    else if (strncmp(cpSel, "--", nSel) == 0) {
  +    else if (nSel == 2 && strncmp(cpSel, "--", nSel) == 0) {
           /* preceeding sibling nodes */
  -        while ((rc = cfg_node_get(cfg, node, CFG_NODE_ATTR_LBROTH, &node)) == CFG_OK)
  +        fprintf(stderr, "    step2: search preceeding sibling nodes, starting at node 0x%lx\n", (unsigned long)node);
  +        while (cfg_node_get(cfg, node, CFG_NODE_ATTR_LBROTH, &node) == CFG_OK && node != NULL)
               if ((rc = cfg_node_select_step3(cfg, node, result_vec, result_len, spec, cpSel, nSel, nFilMin, nFilMax, nFound)) != CFG_OK)
  -                return rc;
  -        return CFG_OK;
  +                break;
       }
  -    else if (strncmp(cpSel, "+", nSel) == 0) {
  +    else if (nSel == 1 && strncmp(cpSel, "+", nSel) == 0) {
           /* next sibling node */
  -        if ((rc = cfg_node_get(cfg, node, CFG_NODE_ATTR_RBROTH, &node)) != CFG_OK)
  -            return CFG_OK;
  -        return cfg_node_select_step3(cfg, node, result_vec, result_len, spec, cpSel, nSel, nFilMin, nFilMax, nFound);
  +        fprintf(stderr, "    step2: search next sibling node, starting at node 0x%lx\n", (unsigned long)node);
  +        if ((rc = cfg_node_get(cfg, node, CFG_NODE_ATTR_RBROTH, &node)) == CFG_OK && node != NULL)
  +            rc = cfg_node_select_step3(cfg, node, result_vec, result_len, spec, cpSel, nSel, nFilMin, nFilMax, nFound);
       }
  -    else if (strncmp(cpSel, "++", nSel) == 0) {
  +    else if (nSel == 2 && strncmp(cpSel, "++", nSel) == 0) {
           /* following sibling nodes */
  -        while ((rc = cfg_node_get(cfg, node, CFG_NODE_ATTR_RBROTH, &node)) == CFG_OK)
  +        fprintf(stderr, "    step2: search following sibling nodes, starting at node 0x%lx\n", (unsigned long)node);
  +        while (cfg_node_get(cfg, node, CFG_NODE_ATTR_RBROTH, &node) == CFG_OK && node != NULL)
               if ((rc = cfg_node_select_step3(cfg, node, result_vec, result_len, spec, cpSel, nSel, nFilMin, nFilMax, nFound)) != CFG_OK)
  -                return rc;
  -        return CFG_OK;
  +                break;
       }
  -    else if (nSel == 0) {
  +    else if (nSel == 0 /* "//" */) {
           /* descendant nodes */
  -        if ((rc = cfg_node_get(cfg, node, CFG_NODE_ATTR_CHILD1, &node)) == CFG_OK)
  -            while ((rc = cfg_node_get(cfg, node, CFG_NODE_ATTR_RBROTH, &node)) == CFG_OK)
  +        fprintf(stderr, "    step2: search descendant nodes, starting at node 0x%lx\n", (unsigned long)node);
  +#if 0 /* FIXME */
  +        if ((rc = cfg_node_apply(cfg, node, NULL, NULL, cfg_node_select_step2_descendant, &descendant_ctx)
  +            cfg_rc_t cfg_node_select_step2_descendant(cfg_t *cfg, cfg_node_t *node, void *_ctx));
  +#endif
  +        if ((rc = cfg_node_get(cfg, node, CFG_NODE_ATTR_CHILD1, &node)) == CFG_OK && node != NULL) {
  +            do {
  +                if ((rc = cfg_node_select_step3(cfg, node, result_vec, result_len, spec, cpSel, nSel, nFilMin, nFilMax, nFound)) != CFG_OK)
  +                    return rc;
                   if ((rc = cfg_node_select_step2(cfg, node, result_vec, result_len, spec, cpSel, nSel, nFilMin, nFilMax, nFound)) != CFG_OK)
                       return rc;
  +            } while ((rc = cfg_node_get(cfg, node, CFG_NODE_ATTR_RBROTH, &node)) == CFG_OK && node != NULL);
  +        }
           return CFG_OK;
       }
       else {
           /* child node */
  -        fprintf(stderr, "step2: child node 0x%lx\n", (unsigned long)node);
  -        if ((node = node->child1) == NULL)
  -            return CFG_OK;
  -        if (node->type == CFG_NODE_TYPE_DIR)
  -            if ((node = node->child1) == NULL)
  -                return CFG_OK;
  -        fprintf(stderr, "step2: child node 0x%lx\n", (unsigned long)node);
  -        do {
  -            if (node->token != NULL) {
  -                size_t l;
  -                token = node->token;
  -                l = strlen(token);
  -                fprintf(stderr, "step2: child node: \"%s\"\n", token);
  -                if (   (l == 1 && l == nSel && token[0] == '*')
  -                    || (l == nSel && strncmp(token, cpSel, nSel) == 0)) {
  -                    if ((rc = cfg_node_select_step3(cfg, node, result_vec, result_len, spec, cpSel, nSel, nFilMin, nFilMax, nFound)) != CFG_OK)
  -                        return rc;
  +        fprintf(stderr, "    step2: search child nodes, starting at node 0x%lx\n", (unsigned long)node);
  +        if ((rc = cfg_node_get(cfg, node, CFG_NODE_ATTR_CHILD1, &node)) == CFG_OK && node != NULL) {
  +            do {
  +                if ((rc = cfg_node_get(cfg, node, CFG_NODE_ATTR_TOKEN, &token)) != CFG_OK)
  +                    continue;
  +                if ((rc = cfg_node_get(cfg, node, CFG_NODE_ATTR_TYPE, &type)) == CFG_OK && type == CFG_NODE_TYPE_DIR) {
  +                    if ((rc = cfg_node_get(cfg, node, CFG_NODE_ATTR_CHILD1, &node2)) != CFG_OK || node2 == NULL)
  +                        continue;
  +                    if ((rc = cfg_node_get(cfg, node2, CFG_NODE_ATTR_TOKEN, &token)) != CFG_OK)
  +                        continue;
                   }
  -            }
  -        } while ((node = node->rbroth) != NULL);
  +                if (token != NULL) {
  +                    size_t l = strlen(token);
  +                    fprintf(stderr, "    step2: compare child node: token \"%s\"\n", token);
  +                    if (   (l == 1 && nSel == 1 && token[0] == '*')
  +                        || (l == nSel && strncmp(token, cpSel, nSel) == 0)) {
  +                        if ((rc = cfg_node_select_step3(cfg, node, result_vec, result_len, spec, cpSel, nSel, nFilMin, nFilMax, nFound)) != CFG_OK)
  +                            return rc;
  +                    }
  +                }
  +            } while ((rc = cfg_node_get(cfg, node, CFG_NODE_ATTR_RBROTH, &node)) == CFG_OK && node != NULL);
  +        }
           return CFG_OK;
       }
       return rc;
   }
   
  +/* INTERNAL: selection stepping function (part 1, selection parsing) */
   static cfg_rc_t
   cfg_node_select_step1(
       cfg_t *cfg,
  @@ -475,7 +556,7 @@
       cfg_rc_t rc;
       long nFound;
   
  -    fprintf(stderr, "step1(spec=\"%s\")\n", spec);
  +    fprintf(stderr, "  step1: (0) spec=\"%s\"\n", spec);
   
       /* stop processing if spec is empty */
       if (spec[0] == '\0')
  @@ -512,41 +593,47 @@
           cp++;
       spec = cp;
   
  -    fprintf(stderr, "    step1: (1) cpSel=\"%s\", nSel=%d, nFilMin=%ld, nFilMax=%ld\n", cpSel, nSel, nFilMin, nFilMax);
  +    fprintf(stderr, "  step1: (1) cpSel=\"%s\", nSel=%d, spec=\"%s\", nFilMin=%ld, nFilMax=%ld\n",
  +            cpSel, nSel, spec, nFilMin, nFilMax);
   
       /* perform pre-selection if filter range is relative to last element */
       if (nFilMin < 0 || nFilMax < 0) {
  -        if (nFilMin == -1)
  -            nFilMin = LONG_MAX;
  -        if (nFilMax == -1)
  -            nFilMax = LONG_MAX;
  -        if (nFilMin < 0 || nFilMax < 0) {
  -            nFound = 0;
  -            if ((rc = cfg_node_select_step2(cfg, node, NULL, NULL, spec, cpSel, nSel, 1, LONG_MAX, &nFound)) != CFG_OK)
  -                return rc;
  -            if (nFilMin < 0) {
  -                nFilMin = nFound + nFilMin;
  -                if (nFilMin < 1)
  -                    nFilMin = 1;
  -            }
  -            if (nFilMax < 0) {
  -                nFilMax = nFound + nFilMax;
  -                if (nFilMax < 1)
  -                    nFilMax = 1;
  -            }
  +        nFound = 0;
  +        fprintf(stderr, "  step1: pre-selection start\n");
  +        if ((rc = cfg_node_select_step2(cfg, node, NULL, NULL, spec, cpSel, nSel, 1, LONG_MAX, &nFound)) != CFG_OK)
  +            return rc;
  +        fprintf(stderr, "  step1: (1b) cpSel=\"%s\", nSel=%d, spec=\"%s\", nFilMin=%ld, nFilMax=%ld nFound=%ld\n", 
  +                cpSel, nSel, spec, nFilMin, nFilMax, nFound);
  +        fprintf(stderr, "  step1: pre-selection end\n");
  +        if (nFound == 0)
  +            return CFG_OK;
  +        if (nFilMin < 0) {
  +            nFilMin = nFound + (nFilMin+1);
  +            if (nFilMin < 1)
  +                nFilMin = 1;
  +        }
  +        if (nFilMax < 0) {
  +            nFilMax = nFound + (nFilMax+1);
  +            if (nFilMax < 1)
  +                nFilMax = 1;
           }
       }
   
  -    fprintf(stderr, "    step1: (2) cpSel=\"%s\", nSel=%d, nFilMin=%ld, nFilMax=%ld\n", cpSel, nSel, nFilMin, nFilMax);
  +    fprintf(stderr, "  step1: (2) cpSel=\"%s\", nSel=%d, spec=\"%s\", nFilMin=%ld, nFilMax=%ld\n",
  +            cpSel, nSel, spec, nFilMin, nFilMax);
   
       /* perform real selection */
       nFound = 0;
       if ((rc = cfg_node_select_step2(cfg, node, result_vec, result_len, spec, cpSel, nSel, nFilMin, nFilMax, &nFound)) != CFG_OK)
           return rc;
   
  +    fprintf(stderr, "  step1: (3) cpSel=\"%s\", nSel=%d, spec=\"%s\", nFilMin=%ld, nFilMax=%ld nFound=%ld\n",
  +            cpSel, nSel, spec, nFilMin, nFilMax, nFound);
  +
       return CFG_OK;
   }
   
  +/* select a node */
   cfg_rc_t
   cfg_node_select(
       cfg_t *cfg,
  @@ -561,6 +648,7 @@
       char *cp;
       long result_len;
   
  +    /* argument sanity checking */
       if (cfg == NULL || result_vec == NULL || fmt == NULL)
           return CFG_ERR_ARG;
   
  @@ -570,15 +658,22 @@
       va_end(ap);
       if (spec == NULL)
           return CFG_ERR_FMT;
  +    fprintf(stderr, "select: (1) spec=\"%s\"\n", spec);
   
  -    /* special case for absolute (start from root-node) selection */
  +    /* special cases for absolute (start from root-node) selection */
       cp = spec;
       if (cp[0] == '/') {
  +        /* <any,"/x"> is same as <root,"x"> */
  +        if (node != NULL)
  +            return CFG_ERR_USE;
           node = cfg->root;
           cp++;
       }
  -    if (node == NULL)
  +    else if (node == NULL) {
  +        /* <NULL, "..."> is same as <root, "..."> */
           node = cfg->root;
  +    }
  +    fprintf(stderr, "select: (2) spec=\"%s\"\n", cp);
   
       /* initialize result node array */
       result_len = 0;
  @@ -591,10 +686,12 @@
           free(*result_vec);
           return rc;
       }
  +    fprintf(stderr, "select: (3) result_len=%ld\n", result_len);
   
       return CFG_OK;
   }
   
  +/* return next matching node (iteration) */
   cfg_rc_t
   cfg_node_find(
       cfg_t *cfg,
  @@ -607,6 +704,7 @@
       return CFG_ERR_INT;
   }
   
  +/* apply for each matching node (recursion) */
   cfg_rc_t
   cfg_node_apply(
       cfg_t *cfg,
  @@ -618,6 +716,7 @@
   {
       cfg_rc_t rc;
   
  +    /* argument sanity checking */
       if (cfg == NULL)
           return CFG_ERR_ARG;
       if (node != NULL) {
  @@ -639,12 +738,14 @@
       return CFG_OK;
   }
   
  +/* compare two nodes */
   cfg_rc_t
   cfg_node_cmp(
       cfg_t *cfg,
       cfg_node_t *node,
       void *token)
   {
  +    /* argument sanity checking */
       if (cfg == NULL || node == NULL || token == NULL)
           return CFG_ERR_NDE;
       if (node->token == NULL && token == NULL)
  @@ -656,10 +757,17 @@
       return CFG_ERR_NDE;
   }
   
  -cfg_rc_t cfg_node_link(cfg_t *cfg, cfg_node_t *node, cfg_node_attr_t attr, cfg_node_t *node2)
  +/* link to nodes together */
  +cfg_rc_t
  +cfg_node_link(
  +    cfg_t *cfg,
  +    cfg_node_t *node,
  +    cfg_node_attr_t attr,
  +    cfg_node_t *node2)
   {
       cfg_node_t *n;
   
  +    /* argument sanity checking */
       if (node == NULL || node2 == NULL)
           return CFG_ERR_ARG;
       if (attr == CFG_NODE_ATTR_RBROTH) {
  @@ -690,12 +798,18 @@
       return CFG_OK;
   }
   
  -cfg_rc_t cfg_node_unlink(cfg_t *cfg, cfg_node_t *node)
  +/* unlink a nodes from others */
  +cfg_rc_t
  +cfg_node_unlink(
  +    cfg_t *cfg,
  +    cfg_node_t *node)
   {
       cfg_node_t *n;
   
  +    /* argument sanity checking */
       if (node == NULL)
           return CFG_ERR_ARG;
  +
       if (node->parent == NULL)
           return CFG_OK;
       if (node->parent->child1 == node) {
  Index: ossp-pkg/cfg/cfg_node.h
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 cfg_node.h
  --- ossp-pkg/cfg/cfg_node.h	10 Nov 2002 12:12:23 -0000	1.7
  +++ ossp-pkg/cfg/cfg_node.h	22 Nov 2002 14:34:32 -0000	1.8
  @@ -37,7 +37,6 @@
   struct cfg_node_st {
       /* node linkage */
       cfg_node_t     *parent;  /* pointer to parent node */
  -    cfg_node_t     *lbroth;  /* pointer to left  brother node */
       cfg_node_t     *rbroth;  /* pointer to right brother node */
       cfg_node_t     *child1;  /* pointer to first child node */
   
  @@ -46,7 +45,7 @@
       char           *token;   /* pointer to corresponding token string */
   
       /* node annotation */
  -    cfg_data_t      data;    /* annotation data */
  +    cfg_data_t      data;    /* annotational data */
   
       /* node source location */
       char           *srcname; /* name of original source configuration */

From ossp-cvs-owner@ossp.org  Fri Nov 22 20:42:26 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 339F976A61; Fri, 22 Nov 2002 20:42:26 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq TODO tidatops.cpp titassist.cpp titraq.h t...
Message-Id: <20021122194226.339F976A61@mail.ossp.org>
Date: Fri, 22 Nov 2002 20:42:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   22-Nov-2002 20:42:26
  Branch: HEAD                             Handle: 2002112219422500

  Modified files:
    ossp-pkg/titraq         TODO tidatops.cpp titassist.cpp titraq.h
                            titslot.cpp

  Log:
    Added exceptions to data ops, completed main static file loading logic,
    and removed hard coded table limits.

  Summary:
    Revision    Changes     Path
    1.10        +1  -0      ossp-pkg/titraq/TODO
    1.2         +56 -8      ossp-pkg/titraq/tidatops.cpp
    1.9         +2  -7      ossp-pkg/titraq/titassist.cpp
    1.18        +1  -1      ossp-pkg/titraq/titraq.h
    1.8         +13 -6      ossp-pkg/titraq/titslot.cpp
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/TODO
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 TODO
  --- ossp-pkg/titraq/TODO	22 Nov 2002 11:46:32 -0000	1.9
  +++ ossp-pkg/titraq/TODO	22 Nov 2002 19:42:25 -0000	1.10
  @@ -17,6 +17,7 @@
   configure soll ueberpruefen ob libqt[-mt] threads braucht,
     dann wenn so, soll den LIBS -pthread hardgecodet haben
   Report errors in all slot code and tidatops by throwing exceptions
  +Make sure that exception is rethrown from second loadData on upwards
   
   Dreams
   ------
  Index: ossp-pkg/titraq/tidatops.cpp
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 tidatops.cpp
  --- ossp-pkg/titraq/tidatops.cpp	22 Nov 2002 11:46:32 -0000	1.1
  +++ ossp-pkg/titraq/tidatops.cpp	22 Nov 2002 19:42:25 -0000	1.2
  @@ -1,4 +1,7 @@
  -#include "titraq.h"
  +#include <qregexp.h>    // Portable regular expressions
  +
  +#include "titraq.h"     // Main classes
  +#include "titrex.h"     // Exception classes
   
   
   //
  @@ -9,13 +12,13 @@
       if (Fileobj.isOpen()) {             // Check state of file
           Fileobj.flush();                // Begin processing file cleanly
           QTextStream Asentry(&Fileobj);  // Convert data to stream
  -        loadData(Asentry);              // Pass off to do the real work
  +        this->loadData(Asentry);        // Pass off to do the real work
       }
       else {
  -        if (!Fileobj.open(IO_ReadOnly)) // Need a wrapped exception here,
  -            return;                     // instead of a short circuit
  +        if (!Fileobj.open(IO_ReadOnly)) // Try to open file
  +            throw Genexcept("Could not open accounting file.");
           QTextStream Asentry(&Fileobj);  // Convert data to stream
  -        loadData(Asentry);              // Pass off to do the real work
  +        this->loadData(Asentry);        // Pass off to do the real work
           Fileobj.close();                // Finish fileop by closing
       }
   }
  @@ -25,7 +28,52 @@
   //
   void Titraqform::loadData(QTextStream &Tstream)
   {
  -    m_pRemark->setText(Tstream.readLine()); // Read from stream
  -    m_pRemark->setEdited(false);            // Reset widget
  -}
  +    bool bValid = true; // Used to warn on invalid accounting data
  +
  +    // Set the table text by linewise reading from the input stream
  +    // and parsing date, time, account, and other columns out of it
  +    for (int i = 0; !Tstream.atEnd(); i++) {
  +        QString Date, Account, Amount, Remark;      // Fields of a valid AS file
  +
  +        QString Temp;                               // Used for linewise editing
  +        while (Temp.isEmpty() && !Tstream.atEnd())  // Strip out extra line feed
  +            Temp = Tstream.readLine();
  +        QTextStream Asline(&Temp, IO_ReadOnly);     // Convert a single line now
  +
  +        if (i % g_knBlocks == 0) // Add blocks of rows to optimize loading speed
  +            m_pMaintable->setNumRows(m_pMaintable->numRows() + g_knBlocks);
  +
  +        Asline >> Date; // Copy the date field
  +        if (Date != NULL)
  +            m_pMaintable->setText(i, 0, Date);
  +        else
  +            bValid = false;
   
  +        Asline >> Account;  // Copy to the bit bucket
  +        Asline >> Account;  // Copy the account field
  +        if (Account != NULL) {
  +            QRegExp Shorten("/(\\w+)$");
  +            Account = QRegExp::escape(Account);
  +            Account.remove(0, Shorten.search(Account));
  +            m_pMaintable->setText(i, 4, Shorten.cap(Shorten.numCaptures()));
  +        }
  +        else
  +            bValid = false;
  +
  +        Asline >> Amount;   // Copy the amount field
  +        if (Amount != NULL)
  +            m_pMaintable->setText(i, 3, Amount);
  +        else
  +            bValid = false;
  +
  +        Remark = Asline.read(); // Copy the remark field
  +        if (Remark != NULL)
  +            m_pMaintable->setText(i, 5, Remark);
  +    }
  +
  +    m_pRemark->setText(trUtf8("Loaded text goes here"));
  +    m_pRemark->setEdited(false);    // Reset widget
  +
  +    if (!bValid)
  +        throw Genexcept("Warning, invalid accounting data.");
  +}
  Index: ossp-pkg/titraq/titassist.cpp
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 titassist.cpp
  --- ossp-pkg/titraq/titassist.cpp	21 Nov 2002 15:37:08 -0000	1.8
  +++ ossp-pkg/titraq/titassist.cpp	22 Nov 2002 19:42:25 -0000	1.9
  @@ -250,7 +250,6 @@
       m_pMaintable = new QTable(m_pCenframe, "Maintable");
       if (m_pMaintable == NULL)   // Sanity check
           throw Genexcept("Main window table creation failed.");
  -    m_pMaintable->setNumRows(g_knRows);
       m_pMaintable->setNumCols(g_knCols);
       m_pMaintable->setReadOnly(true);                    // Table is read only
       m_pMaintable->setColumnMovingEnabled(false);        // Ctrl-drag disabled
  @@ -259,7 +258,7 @@
       m_pMaintable->verticalHeader()->hide();     // by hiding it with a margin of 0
       m_pMaintable->horizontalHeader()->setResizeEnabled(false);
       m_pMaintable->setColumnStretchable(g_knCols - 1, true);
  -    m_pMaintable->setSorting(true);
  +    m_pMaintable->setSorting(false);
   
       // Table header row
       m_pTablehead = m_pMaintable->horizontalHeader();
  @@ -271,11 +270,7 @@
       m_pTablehead->setLabel(4, QObject::trUtf8("Task"), 70);
       m_pTablehead->setLabel(5, QObject::trUtf8("Remark"));
   
  -//    // Make a generic table item for all rows
  -//    for (int i = 0; i < g_knRows; ++i)
  -//        m_pMaintable->setItem(i, 0, new QTableItem(m_pMaintable, QTableItem::WhenCurrent, NULL));
  -
  -    m_pPackagelayout->addWidget(m_pMaintable); // Finally add the damn table
  +    m_pPackagelayout->addWidget(m_pMaintable);  // Finally add the damn table
   }
   
   //
  Index: ossp-pkg/titraq/titraq.h
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 titraq.h
  --- ossp-pkg/titraq/titraq.h	22 Nov 2002 11:46:32 -0000	1.17
  +++ ossp-pkg/titraq/titraq.h	22 Nov 2002 19:42:25 -0000	1.18
  @@ -21,7 +21,7 @@
   
   
   // Main table size
  -const int g_knRows = 16;
  +const int g_knBlocks = 32;
   const int g_knCols = 6;
   
   // Main application form window
  Index: ossp-pkg/titraq/titslot.cpp
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 titslot.cpp
  --- ossp-pkg/titraq/titslot.cpp	22 Nov 2002 11:46:32 -0000	1.7
  +++ ossp-pkg/titraq/titslot.cpp	22 Nov 2002 19:42:25 -0000	1.8
  @@ -3,6 +3,8 @@
   
   // User interface
   #include "titraq.h"             // Main classes
  +#include "titrex.h"             // Exception classes
  +#include "titabitem.h"          // For our custom table items
   #include "generic.h"            // Generic classes
   
   // Icon pixel maps
  @@ -49,10 +51,9 @@
   //
   void Titraqform::newDoc(void)
   {
  -    Prototype Unimp;
  -    Unimp.doMbox();
  -//    Titraqform *pNewform = new Titraqform;
  -//    pNewform->show();
  +    // The only way in Qt 3.X to clear rows efficiently
  +    m_pMaintable->setNumRows(0);            // Get rid of any data in table
  +    m_pMaintable->setNumRows(g_knBlocks);   // ...and then add them back in
   }
   
   //
  @@ -62,8 +63,14 @@
   {
       QString Filestring = QFileDialog::getOpenFileName("/export/home/mschloh/tmp/bifftest/ms.txt", QString::null, this, trUtf8("Chooser Dialog"), trUtf8("Choose a file to open"));
       if (!Filestring.isEmpty()) {
  -        QFile Filetemp(Filestring); // File to load
  -        loadData(Filetemp);         // Pass to helper method
  +        m_pMaintable->setNumRows(0);    // Clear out old data
  +        QFile Filetemp(Filestring);     // File to load
  +        try {
  +            loadData(Filetemp);         // Pass to helper method
  +        }
  +        catch (Genexcept& Genex) {
  +            Genex.reportErr();
  +        }
           setCaption(Filestring);
           m_pStatbar->message(trUtf8("Loaded document ") + Filestring, 4000);
       }

From ossp-cvs-owner@ossp.org  Fri Nov 22 20:49:20 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C87FB76B3A; Fri, 22 Nov 2002 20:49:19 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq tidatops.cpp titabitem.h
Message-Id: <20021122194919.C87FB76B3A@mail.ossp.org>
Date: Fri, 22 Nov 2002 20:49:19 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   22-Nov-2002 20:49:19
  Branch: HEAD                             Handle: 2002112219491900

  Added files:
    ossp-pkg/titraq         titabitem.h
  Modified files:
    ossp-pkg/titraq         tidatops.cpp

  Log:
    Wrote class RtTableItem to replace right-aligned table cells, missing
    from the stock Qt widgets.

  Summary:
    Revision    Changes     Path
    1.3         +2  -5      ossp-pkg/titraq/tidatops.cpp
    1.1         +14 -0      ossp-pkg/titraq/titabitem.h
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/tidatops.cpp
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 tidatops.cpp
  --- ossp-pkg/titraq/tidatops.cpp	22 Nov 2002 19:42:25 -0000	1.2
  +++ ossp-pkg/titraq/tidatops.cpp	22 Nov 2002 19:49:19 -0000	1.3
  @@ -2,7 +2,7 @@
   
   #include "titraq.h"     // Main classes
   #include "titrex.h"     // Exception classes
  -
  +#include "titabitem.h"  // For class RtTableItem
   
   //
   // Convenience method to load accounting data from a file
  @@ -52,10 +52,7 @@
           Asline >> Account;  // Copy to the bit bucket
           Asline >> Account;  // Copy the account field
           if (Account != NULL) {
  -            QRegExp Shorten("/(\\w+)$");
  -            Account = QRegExp::escape(Account);
  -            Account.remove(0, Shorten.search(Account));
  -            m_pMaintable->setText(i, 4, Shorten.cap(Shorten.numCaptures()));
  +            m_pMaintable->setItem(i, 4, new RtTableItem(m_pMaintable, QTableItem::WhenCurrent, Account));
           }
           else
               bValid = false;
  Index: ossp-pkg/titraq/titabitem.h
  ============================================================
  $ cvs update -p -r1.1 titabitem.h
  #include <qtable.h>
  #include <qpainter.h>
  
  
  class RtTableItem : public QTableItem
  {
  public:
      RtTableItem(QTable *pTable, EditType eType, const QString &Text) : QTableItem(pTable, eType, Text) {m_nOwnalign = AlignRight;};
      void setAlignment(int nAlign) {m_nOwnalign = nAlign;};
      int alignment() const {return m_nOwnalign;};
  
  private:
      int m_nOwnalign;
  };

From ossp-cvs-owner@ossp.org  Fri Nov 22 22:14:27 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A17EC76B3A; Fri, 22 Nov 2002 22:14:27 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq TODO tidatops.cpp titassist.cpp titslot.cp...
Message-Id: <20021122211427.A17EC76B3A@mail.ossp.org>
Date: Fri, 22 Nov 2002 22:14:27 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   22-Nov-2002 22:14:27
  Branch: HEAD                             Handle: 2002112221142700

  Modified files:
    ossp-pkg/titraq         TODO tidatops.cpp titassist.cpp titslot.cpp

  Log:
    Improved account table viewing and movement, fixed whatsthis text and
    images, refitted columns to new text dimensions.

  Summary:
    Revision    Changes     Path
    1.11        +4  -2      ossp-pkg/titraq/TODO
    1.4         +10 -1      ossp-pkg/titraq/tidatops.cpp
    1.10        +31 -28     ossp-pkg/titraq/titassist.cpp
    1.9         +2  -2      ossp-pkg/titraq/titslot.cpp
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/TODO
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 TODO
  --- ossp-pkg/titraq/TODO	22 Nov 2002 19:42:25 -0000	1.10
  +++ ossp-pkg/titraq/TODO	22 Nov 2002 21:14:27 -0000	1.11
  @@ -16,8 +16,10 @@
   QWhatsThis::add(m_pAddbutton, trUtf8("Para soltar la pepa"));
   configure soll ueberpruefen ob libqt[-mt] threads braucht,
     dann wenn so, soll den LIBS -pthread hardgecodet haben
  -Report errors in all slot code and tidatops by throwing exceptions
  -Make sure that exception is rethrown from second loadData on upwards
  +Ensure rethrows from second loadData on upwards
  +Report errors in all slot code
  +Add preferences file format XML
  +Read username from Betriebsysteme
   
   Dreams
   ------
  Index: ossp-pkg/titraq/tidatops.cpp
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 tidatops.cpp
  --- ossp-pkg/titraq/tidatops.cpp	22 Nov 2002 19:49:19 -0000	1.3
  +++ ossp-pkg/titraq/tidatops.cpp	22 Nov 2002 21:14:27 -0000	1.4
  @@ -29,10 +29,14 @@
   void Titraqform::loadData(QTextStream &Tstream)
   {
       bool bValid = true; // Used to warn on invalid accounting data
  +    int i = 0;          // Iterator used in loop and also as a count
  +
  +    // Optimize viewing by repainting cells only once after processing
  +    m_pMaintable->setUpdatesEnabled(false);
   
       // Set the table text by linewise reading from the input stream
       // and parsing date, time, account, and other columns out of it
  -    for (int i = 0; !Tstream.atEnd(); i++) {
  +    while (!Tstream.atEnd()) {
           QString Date, Account, Amount, Remark;      // Fields of a valid AS file
   
           QString Temp;                               // Used for linewise editing
  @@ -66,8 +70,13 @@
           Remark = Asline.read(); // Copy the remark field
           if (Remark != NULL)
               m_pMaintable->setText(i, 5, Remark);
  +
  +        i++; // The big increment
       }
   
  +    m_pMaintable->setUpdatesEnabled(true);  // Repaint all
  +    m_pMaintable->setNumRows(i);    // Trim unneeded rows
  +    m_pMaintable->repaint();        // Force repaint
       m_pRemark->setText(trUtf8("Loaded text goes here"));
       m_pRemark->setEdited(false);    // Reset widget
   
  Index: ossp-pkg/titraq/titassist.cpp
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 titassist.cpp
  --- ossp-pkg/titraq/titassist.cpp	22 Nov 2002 19:42:25 -0000	1.9
  +++ ossp-pkg/titraq/titassist.cpp	22 Nov 2002 21:14:27 -0000	1.10
  @@ -102,10 +102,11 @@
       if (m_pFilenewact == NULL) // Sanity check
           throw Genexcept("Main window file new action creation failed.");
       connect(m_pFilenewact, SIGNAL(activated()), this, SLOT(newDoc()));
  -    const char *kszFilenewtext = trUtf8("<p><img source=\"filenew\"> "
  -                                 "Click this button to make a <em>blank file</em>."
  -                                 "You can also select the <b>New</b> command "
  -                                 "from the <b>File</b> menu.</p>");
  +    const char *kszFilenewtext = "<p><img source=\"filenew\"> "
  +                                        "Click this button to make<br>a "
  +                                        "<em>blank file</em>. You can also<br>"
  +                                        "select the <b>New</b> command<br>from "
  +                                        "the <b>File</b> menu.</p>";
       m_pFilenewact->setWhatsThis(kszFilenewtext);
   
       // File open action
  @@ -113,10 +114,11 @@
       if (m_pFileopenact == NULL) // Sanity check
           throw Genexcept("Main window file open action creation failed.");
       connect(m_pFileopenact, SIGNAL(activated()), this, SLOT(chooseFile()));
  -    const char *kszFileopentext = trUtf8("<p><img source=\"fileopen\"> "
  -                                  "Click this button to open a <em>new file</em>."
  -                                  "You can also select the <b>Open</b> command "
  -                                  "from the <b>File</b> menu.</p>");
  +    const char *kszFileopentext = "<p><img source=\"fileopen\"> "
  +                                  "Click this button to open<br>a "
  +                                  "<em>new file</em>. You can also select<br>"
  +                                  "the <b>Open</b> command from the<br>"
  +                                  "<b>File</b> menu.</p>";
       m_pFileopenact->setWhatsThis(kszFileopentext);
   
       // File save current action
  @@ -124,11 +126,12 @@
       if (m_pFilesaveact == NULL) // Sanity check
           throw Genexcept("Main window file save action creation failed.");
       connect(m_pFilesaveact, SIGNAL(activated()), this, SLOT(saveFile()));
  -    const char *kszFilesavetext = trUtf8("<p><img source=\"filesave\"> "
  -                                  "Click this button to <em>save</em> the file you "
  -                                  "are editing. You will be prompted for a file name.\n"
  -                                  "You can also select the <b>Save</b> command "
  -                                  "from the <b>File</b> menu.</p>");
  +    const char *kszFilesavetext = "<p><img source=\"filesave\"> "
  +                                  "Click this button to <em>save</em><br>"
  +                                  "the file you are editing. You<br>will be "
  +                                  "prompted for a file<br>name. You can also "
  +                                  "select<br>the<b> Save</b> command from<br>"
  +                                  "the <b>File</b> menu.</p>";
       m_pFilesaveact->setWhatsThis(kszFilesavetext);
   
       // File save selected action
  @@ -155,10 +158,10 @@
       if (m_pAddrowact == NULL) // Sanity check
           throw Genexcept("Main window add row action creation failed.");
       connect(m_pAddrowact, SIGNAL(activated()), this, SLOT(addEntry()));
  -    const char *kszAddrowtext = trUtf8("<p><img source=\"ossplogo\"> "
  +    const char *kszAddrowtext = "<p><img source=\"ossplogo\"> "
                                   "Click this button to add a <em>new row</em>."
  -                                "You can also select the <b>Add row</b> command "
  -                                "from the <b>Accounting</b> menu.</p>");
  +                                "You can also select the <b>Add</b> command "
  +                                "from the <b>Edit</b> menu.</p>";
       m_pAddrowact->setWhatsThis(kszAddrowtext);
   
       // Delete data row action
  @@ -166,10 +169,10 @@
       if (m_pDeleterowact == NULL) // Sanity check
           throw Genexcept("Main window delete row action creation failed.");
       connect(m_pDeleterowact, SIGNAL(activated()), this, SLOT(delEntry()));
  -    const char *kszDeleterowtext = trUtf8("<p><img source=\"ossplogo\"> "
  +    const char *kszDeleterowtext = "<p><img source=\"ossplogo\"> "
                                      "Click this button to delete a <em>row</em>."
  -                                   "You can also select the <b>Delete row</b> command "
  -                                   "from the <b>Accounting</b> menu.</p>");
  +                                   "You can also select the <b>Delete</b> command "
  +                                   "from the <b>Edit</b> menu.</p>";
       m_pDeleterowact->setWhatsThis(kszDeleterowtext);
   
       // Write data action
  @@ -177,10 +180,10 @@
       if (m_pWritedataact == NULL) // Sanity check
           throw Genexcept("Main window write data action creation failed.");
       connect(m_pWritedataact, SIGNAL(activated()), this, SLOT(writeEntry()));
  -    const char *kszWritedatatext = trUtf8("<p><img source=\"ossplogo\"> "
  +    const char *kszWritedatatext = "<p><img source=\"ossplogo\"> "
                                      "Click this button to <em>write out</em> your accounting data."
  -                                   "You can also select the <b>Write data</b> command "
  -                                   "from the <b>Accounting</b> menu.</p>");
  +                                   "You can also select the <b>Save</b> command "
  +                                   "from the <b>File</b> menu.</p>";
       m_pWritedataact->setWhatsThis(kszWritedatatext);
   }
   
  @@ -256,18 +259,18 @@
       m_pMaintable->setSelectionMode(QTable::MultiRow);   // Multi row selection
       m_pMaintable->setLeftMargin(0);             // Get rid of the vertical header
       m_pMaintable->verticalHeader()->hide();     // by hiding it with a margin of 0
  -    m_pMaintable->horizontalHeader()->setResizeEnabled(false);
  +    m_pMaintable->horizontalHeader()->setResizeEnabled(true);
       m_pMaintable->setColumnStretchable(g_knCols - 1, true);
       m_pMaintable->setSorting(false);
   
       // Table header row
       m_pTablehead = m_pMaintable->horizontalHeader();
       m_pMaintable->setHScrollBarMode(QScrollView::AlwaysOff);
  -    m_pTablehead->setLabel(0, QObject::trUtf8("Date"), 96);
  -    m_pTablehead->setLabel(1, QObject::trUtf8("Begin"), 80);
  -    m_pTablehead->setLabel(2, QObject::trUtf8("End"), 80);
  -    m_pTablehead->setLabel(3, QObject::trUtf8("Amount"), 52);
  -    m_pTablehead->setLabel(4, QObject::trUtf8("Task"), 70);
  +    m_pTablehead->setLabel(0, QObject::trUtf8("Date"), 76);
  +    m_pTablehead->setLabel(1, QObject::trUtf8("Begin"), 48);
  +    m_pTablehead->setLabel(2, QObject::trUtf8("End"), 48);
  +    m_pTablehead->setLabel(3, QObject::trUtf8("Amount"), 48);
  +    m_pTablehead->setLabel(4, QObject::trUtf8("Task"), 96);
       m_pTablehead->setLabel(5, QObject::trUtf8("Remark"));
   
       m_pPackagelayout->addWidget(m_pMaintable);  // Finally add the damn table
  Index: ossp-pkg/titraq/titslot.cpp
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 titslot.cpp
  --- ossp-pkg/titraq/titslot.cpp	22 Nov 2002 19:42:25 -0000	1.8
  +++ ossp-pkg/titraq/titslot.cpp	22 Nov 2002 21:14:27 -0000	1.9
  @@ -52,8 +52,8 @@
   void Titraqform::newDoc(void)
   {
       // The only way in Qt 3.X to clear rows efficiently
  -    m_pMaintable->setNumRows(0);            // Get rid of any data in table
  -    m_pMaintable->setNumRows(g_knBlocks);   // ...and then add them back in
  +    m_pMaintable->setNumRows(0);    // Get rid of any data in table
  +    m_pMaintable->setNumRows(1);    // ...and then add them back in
   }
   
   //

From ossp-cvs-owner@ossp.org  Fri Nov 22 22:51:59 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 281AC76AEC; Fri, 22 Nov 2002 22:51:59 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq tidatops.cpp titslot.cpp
Message-Id: <20021122215159.281AC76AEC@mail.ossp.org>
Date: Fri, 22 Nov 2002 22:51:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   22-Nov-2002 22:51:59
  Branch: HEAD                             Handle: 2002112221515800

  Modified files:
    ossp-pkg/titraq         tidatops.cpp titslot.cpp

  Log:
    Some final fine tunes before putting the pig to bed.

  Summary:
    Revision    Changes     Path
    1.5         +2  -3      ossp-pkg/titraq/tidatops.cpp
    1.10        +2  -3      ossp-pkg/titraq/titslot.cpp
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/tidatops.cpp
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 tidatops.cpp
  --- ossp-pkg/titraq/tidatops.cpp	22 Nov 2002 21:14:27 -0000	1.4
  +++ ossp-pkg/titraq/tidatops.cpp	22 Nov 2002 21:51:58 -0000	1.5
  @@ -75,10 +75,9 @@
       }
   
       m_pMaintable->setUpdatesEnabled(true);  // Repaint all
  -    m_pMaintable->setNumRows(i);    // Trim unneeded rows
  -    m_pMaintable->repaint();        // Force repaint
  +    m_pMaintable->setNumRows(i - 1);        // Trim unneeded rows
       m_pRemark->setText(trUtf8("Loaded text goes here"));
  -    m_pRemark->setEdited(false);    // Reset widget
  +    m_pRemark->setEdited(false);            // Reset widget
   
       if (!bValid)
           throw Genexcept("Warning, invalid accounting data.");
  Index: ossp-pkg/titraq/titslot.cpp
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 titslot.cpp
  --- ossp-pkg/titraq/titslot.cpp	22 Nov 2002 21:14:27 -0000	1.9
  +++ ossp-pkg/titraq/titslot.cpp	22 Nov 2002 21:51:58 -0000	1.10
  @@ -52,8 +52,7 @@
   void Titraqform::newDoc(void)
   {
       // The only way in Qt 3.X to clear rows efficiently
  -    m_pMaintable->setNumRows(0);    // Get rid of any data in table
  -    m_pMaintable->setNumRows(1);    // ...and then add them back in
  +    m_pMaintable->setNumRows(0); // Get rid of any data in table
   }
   
   //
  @@ -61,7 +60,7 @@
   //
   void Titraqform::chooseFile(void)
   {
  -    QString Filestring = QFileDialog::getOpenFileName("/export/home/mschloh/tmp/bifftest/ms.txt", QString::null, this, trUtf8("Chooser Dialog"), trUtf8("Choose a file to open"));
  +    QString Filestring = QFileDialog::getOpenFileName("/e/dev/as", QString::null, this, trUtf8("Chooser Dialog"), trUtf8("Choose a file to open"));
       if (!Filestring.isEmpty()) {
           m_pMaintable->setNumRows(0);    // Clear out old data
           QFile Filetemp(Filestring);     // File to load

From ossp-cvs-owner@ossp.org  Sun Nov 24 18:55:56 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1703176A69; Sun, 24 Nov 2002 18:55:56 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq titconst.h
Message-Id: <20021124175556.1703176A69@mail.ossp.org>
Date: Sun, 24 Nov 2002 18:55:56 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   24-Nov-2002 18:55:55
  Branch: HEAD                             Handle: 2002112417555500

  Added files:
    ossp-pkg/titraq         titconst.h

  Log:
    Abstract constant definitions out of code.

  Summary:
    Revision    Changes     Path
    1.1         +13 -0      ossp-pkg/titraq/titconst.h
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/titconst.h
  ============================================================
  $ cvs update -p -r1.1 titconst.h
  #define TITRAQ_PREFNAME         "titraq.conf"
  #define TITRAQ_APPTITLE         "Titraq"
  #define TITRAQ_PREFVER          "0.5"
  #define TITRAQ_PREFASFILE       "asfile"
  #define TITRAQ_DEFASFILE        "/e/dev/as"
  #define TITRAQ_PREFSTYLE        "uistyle"
  #define TITRAQ_DEFSTYLE         "CDE"
  #define TITRAQ_PREFVIEW         "view"
  #define TITRAQ_DEFVIEW          "normal"
  #define TITRAQ_PREFREMOTELOG    "logremote"
  #define TITRAQ_DEFREMOTELOG     "no"
  #define TITRAQ_PREFLOCALLOG     "loglocal"
  #define TITRAQ_DEFLOCALLOG      "no"

From ossp-cvs-owner@ossp.org  Sun Nov 24 18:56:55 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3A40476A69; Sun, 24 Nov 2002 18:56:55 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq Makefile.in TODO titassist.cpp titprefs.cp...
Message-Id: <20021124175655.3A40476A69@mail.ossp.org>
Date: Sun, 24 Nov 2002 18:56:55 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   24-Nov-2002 18:56:55
  Branch: HEAD                             Handle: 2002112417565400

  Added files:
    ossp-pkg/titraq         titprefs.cpp titprefs.h
  Modified files:
    ossp-pkg/titraq         Makefile.in TODO titassist.cpp titraq.cpp titraq.h

  Log:
    Add a DOM based configuration file.

  Summary:
    Revision    Changes     Path
    1.15        +2  -2      ossp-pkg/titraq/Makefile.in
    1.12        +3  -0      ossp-pkg/titraq/TODO
    1.11        +18 -0      ossp-pkg/titraq/titassist.cpp
    1.1         +354 -0     ossp-pkg/titraq/titprefs.cpp
    1.1         +135 -0     ossp-pkg/titraq/titprefs.h
    1.18        +1  -0      ossp-pkg/titraq/titraq.cpp
    1.19        +7  -0      ossp-pkg/titraq/titraq.h
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/Makefile.in
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 Makefile.in
  --- ossp-pkg/titraq/Makefile.in	22 Nov 2002 11:46:32 -0000	1.14
  +++ ossp-pkg/titraq/Makefile.in	24 Nov 2002 17:56:54 -0000	1.15
  @@ -65,9 +65,9 @@
   TARGET_PROGS    = titraq
   TARGET_MANS     = titraq.1 titraq.conf.5
   
  -SRCS            = main.cpp titraq.cpp titassist.cpp titslot.cpp tidatops.cpp titrex.cpp generic.cpp titraq_version.c
  +SRCS            = main.cpp titraq.cpp titassist.cpp titslot.cpp tidatops.cpp titrex.cpp generic.cpp prefs.cpp titraq_version.c
   
  -OBJS            = main.o titraq.o titassist.o titslot.o tidatops.o titrex.o generic.o titraq_version.o
  +OBJS            = main.o titraq.o titassist.o titslot.o tidatops.o titrex.o generic.o prefs.o titraq_version.o
   
   GRAFX           = gfx/ossplogo.xpm
   
  Index: ossp-pkg/titraq/TODO
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 TODO
  --- ossp-pkg/titraq/TODO	22 Nov 2002 21:14:27 -0000	1.11
  +++ ossp-pkg/titraq/TODO	24 Nov 2002 17:56:54 -0000	1.12
  @@ -20,6 +20,9 @@
   Report errors in all slot code
   Add preferences file format XML
   Read username from Betriebsysteme
  +Rework error handling in prefs
  +Generally maintain Preference class
  +  Implement missing interface methods
   
   Dreams
   ------
  Index: ossp-pkg/titraq/titassist.cpp
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 titassist.cpp
  --- ossp-pkg/titraq/titassist.cpp	22 Nov 2002 21:14:27 -0000	1.10
  +++ ossp-pkg/titraq/titassist.cpp	24 Nov 2002 17:56:54 -0000	1.11
  @@ -6,6 +6,8 @@
   #include <qlistbox.h>
   #include <qcursor.h>
   
  +#include <iostream>
  +
   // User interface
   #include "titraq.h"
   #include "titrex.h"             // Exception classes
  @@ -426,4 +428,20 @@
       QToolTip::add(m_pQuitbutton, trUtf8("Quit titraq"));
       connect(m_pQuitbutton, SIGNAL(clicked()), qApp, SLOT(quit()));
       m_pControllayout->addWidget(m_pQuitbutton);
  +}
  +
  +//
  +// Construct the preferences
  +//
  +void Titraqform::setupPrefs(void)
  +{
  +    m_pPrefs = new Preferences(TITRAQ_PREFNAME, TITRAQ_APPTITLE, TITRAQ_PREFVER);
  +    if (m_pPrefs->fileState()) { // No file was found, so create a new one
  +std::cout << "Executing if" << std::endl;
  +        m_pPrefs->setString(TITRAQ_PREFASFILE, TITRAQ_DEFASFILE);
  +        m_pPrefs->setString(TITRAQ_PREFSTYLE, TITRAQ_DEFSTYLE);
  +        m_pPrefs->setString(TITRAQ_PREFVIEW, TITRAQ_DEFVIEW);
  +        m_pPrefs->setString(TITRAQ_PREFREMOTELOG, TITRAQ_DEFREMOTELOG);
  +        m_pPrefs->setString(TITRAQ_PREFLOCALLOG, TITRAQ_DEFLOCALLOG);
  +    }
   }
  Index: ossp-pkg/titraq/titprefs.cpp
  ============================================================
  $ cvs update -p -r1.1 titprefs.cpp
  /***************************************************************************
    preferences.cc
    -------------------
    A class to access persistant preferences for an application. Utilizes XML/DOM.
    Basic format is:
      <!DOCTYPE preferences>
      <preferences version="0.1" application="MyApp" >
          <group name="Default" >
              <option key="alpha" value="true" />
              <option key="beta" value="99" />
              <option key="gamma" value="test" />
          </group>
      </preferences>
    -------------------
    begin         Tue Sep 12 2000
    author        David Johnson, david@usermode.org
    -------------------
    Copyright 2000, David Johnson
    Please see the header file for copyright and license information
  ***************************************************************************/
  
  // version 2
  
  // TODO: fix up to account for worst case scenarios:
  //      keys without values in file, and
  //      checking for a key that doesn't exist puts it into the map
  //      then it gets written out if dirty, possibly corrupting the file
  
  // TODO: Fix up error reporting
  
  #include <qdom.h>
  #include <qfile.h>
  #include <qtextstream.h>
  
  #include "prefs.h"
  
  //////////////////////////////////////////////////////////////////////////////
  // Construction                                                             //
  //////////////////////////////////////////////////////////////////////////////
  
  //////////////////////////////////////////////////////////////////////////////
  // Preferences()
  // -------------
  // Constructor. Takes the preferences file name as an argument.
  
  Preferences::Preferences(const QString& filename,
                           const QString& format,
                           const QString& version)
      : dirty_(false),
        currentgroup_(),
        file_(filename),
        format_(format),
        version_(version),
        filestate_(false),
        formatstate_(false),
        groups_()
  {
      readData();
      dirty_ = false;
      currentgroup_ = "Default";
  }
  
  //////////////////////////////////////////////////////////////////////////////
  //  ~Preferences()
  // ---------------
  // Destructor
  
  Preferences::~Preferences()
  {
      if (dirty_) writeData();
  }
  
  //////////////////////////////////////////////////////////////////////////////
  // Settings
  //////////////////////////////////////////////////////////////////////////////
  
  //////////////////////////////////////////////////////////////////////////////
  // getBoolean()
  // ------------
  // Get a boolean value
  
  bool Preferences::getBool(const QString& key, bool def)
  {
      buffer_ = getString(key, def ? "true" : "false");
      if (buffer_.isEmpty()) return def;
      if (buffer_.contains("true"))
          return true;
      else
          return false;
  }
  
  //////////////////////////////////////////////////////////////////////////////
  // setBoolean()
  // ------------
  // Set a boolean value
  
  void Preferences::setBool(const QString& key, bool value)
  {
      groups_[currentgroup_][key] = value ? "true" : "false";
      dirty_ = true;
  }
  
  //////////////////////////////////////////////////////////////////////////////
  // getNumber()
  // -----------
  // Get a number value
  
  // TODO: this might be a place for templates
  
  long Preferences::getNumber(const QString& key, long def)
  {
      buffer_ = getString(key, QString::number(def));
  	if (buffer_.isEmpty()) return def;
  
      bool ok;
      long num = buffer_.toLong(&ok);
      if (ok) return num;
      else return def;
  }
  
  //////////////////////////////////////////////////////////////////////////////
  // setNumber()
  // -----------
  // Set a number value
  
  void Preferences::setNumber(const QString& key, long value)
  {
      buffer_.setNum(value);
  
      groups_[currentgroup_][key] = buffer_;
      dirty_ = true;
  }
  
  //////////////////////////////////////////////////////////////////////////////
  // getDouble()
  // -----------
  // Get a double value
  
  double Preferences::getDouble(const QString& key, double def)
  {
      buffer_ = getString(key, QString::number(def));
  	if (buffer_.isEmpty()) return def;
  
      bool ok;
      double num = buffer_.toDouble(&ok);
      if (ok) return num;
      else return def;
  }
  
  //////////////////////////////////////////////////////////////////////////////
  // setDouble()
  // -----------
  // Set a double value
  
  void Preferences::setDouble(const QString& key, double value)
  {
      buffer_.setNum(value);
  
      groups_[currentgroup_][key] = buffer_;
      dirty_ = true;
  }
  
  
  //////////////////////////////////////////////////////////////////////////////
  // getString()
  // -----------
  // Get a string value
  
  QString Preferences::getString(const QString& key, const QString& def)
  {
      buffer_ = "";
      if (groups_.contains(currentgroup_)) {
          if (groups_[currentgroup_].contains(key)) {
              buffer_ = groups_[currentgroup_][key];
          }
      }
  	if (buffer_.isEmpty()) return def;
      return buffer_;
  }
  
  //////////////////////////////////////////////////////////////////////////////
  // setString()
  // -----------
  // Set a string value
  
  void Preferences::setString(const QString& key, const QString& value)
  {
      groups_[currentgroup_][key] = value;
      dirty_ = true;
  }
  		
  //////////////////////////////////////////////////////////////////////////////
  // removeValue()
  // -------------
  // Remove a value from the preferences
  
  void Preferences::removeKey(const QString& key)
  {
      groups_[currentgroup_].remove(key);
  }
  
  //////////////////////////////////////////////////////////////////////////////
  // removeGroup()
  // -------------
  // Remove a group from the preferences, and all its options
  
  void Preferences::removeGroup()
  {
      groups_.remove(currentgroup_);
  }
  
  //////////////////////////////////////////////////////////////////////////////
  // flush()
  // -------
  // Flush the preferences to file
  
  void Preferences::flush()
  {
      if (dirty_) {
          writeData();
          dirty_ = false;
      }
  }
  
  //////////////////////////////////////////////////////////////////////////////
  // Serialization                                                            //
  //////////////////////////////////////////////////////////////////////////////
  
  //////////////////////////////////////////////////////////////////////////////
  // readData()
  // ----------
  // Read data from the file
  
  void Preferences::readData()
  {
      // open file
      QFile* datafile = new QFile(file_);
      if (!datafile->open(IO_ReadOnly)) {
          // error opening file
          qWarning("Error: cannot open preferences file " + file_);
          datafile->close();
          delete (datafile);
          filestate_ = false;
          return;
      }
      filestate_ = true;
  
      // open dom document
      QDomDocument doc("preferences");
      if (!doc.setContent(datafile)) {
          qWarning("Error: " + file_ + " is not a proper preferences file");
          datafile->close();
          delete (datafile);
          formatstate_ = false;
          return;
      }
      datafile->close();
      delete (datafile);
  
      // check the doc type and stuff
      if (doc.doctype().name() != "preferences") {
          // wrong file type
          qWarning("Error: " +file_ + " is not a valid preferences file");
          formatstate_ = false;
          return;
      }
      QDomElement root = doc.documentElement();
      if (root.attribute("application") != format_) {
          // right file type, wrong application
          qWarning("Error: " + file_ + " is not a preferences file for " + format_);
          formatstate_ = false;
          return;
      }
      // We don't care about application version...
  
      // get list of groups
      QDomNodeList nodes = root.elementsByTagName("group");
  
      // iterate through the groups
      QDomNodeList options;
      for (unsigned n=0; n<nodes.count(); ++n) {
          if (nodes.item(n).isElement()) {
              processGroup(nodes.item(n).toElement());
          }
      }
      formatstate_ = true;
  }
  
  void Preferences::processGroup(QDomElement group)
  {
      QDomElement elem;
      QDomNodeList options;
      currentgroup_ = group.attribute("name", "Default");
      options = group.elementsByTagName("option");
      for (unsigned n=0; n<options.count(); ++n) {
          if (options.item(n).isElement()) {
              elem = options.item(n).toElement();
              setString(elem.attribute("key"), elem.attribute("value"));
          }
      }
  }
  
  //////////////////////////////////////////////////////////////////////////////
  // writeData()
  // -----------
  // Write data out to the file
  
  void Preferences::writeData()
  {
      QDomDocument doc("preferences");
  
      // create the root element
      QDomElement root = doc.createElement(doc.doctype().name());
      root.setAttribute("version", version_);
      root.setAttribute("application", format_);
  
      // now do our options group by group
      QMap<QString, PrefMap>::Iterator git;
      PrefMap::Iterator pit;
      QDomElement group, option;
      for (git = groups_.begin(); git != groups_.end(); ++git) {
          // create a group element
          group = doc.createElement("group");
          group.setAttribute("name", git.key());
          // add in options
          for (pit = (*git).begin(); pit != (*git).end(); ++pit) {
              option = doc.createElement("option");
              option.setAttribute("key", pit.key());
              option.setAttribute("value", pit.data());
              group.appendChild(option);
          }
          root.appendChild(group);
      }
      doc.appendChild(root);
  
      // open file
      QFile* datafile = new QFile(file_);
      if (!datafile->open(IO_WriteOnly)) {
          // error opening file
          qWarning("Error: Cannot open preferences file " + file_);
          datafile->close();
          delete (datafile);
          filestate_ = false;
          return;
      }
      filestate_ = true;
  
      // write it out
      QTextStream textstream(datafile);
      doc.save(textstream, 0);
      datafile->close();
      delete (datafile);
      formatstate_ = true;
  }
  Index: ossp-pkg/titraq/titprefs.h
  ============================================================
  $ cvs update -p -r1.1 titprefs.h
  /***************************************************************************
    preferences.h
    -------------------
    A class to access persistant preferences for an application. Utilizes XML/DOM.
    Basic format is:
      <!DOCTYPE preferences>
      <preferences version="0.1" application="MyApp" >
          <group name="Default" >
              <option key="alpha" value="true" />
              <option key="beta" value="99" />
              <option key="gamma" value="test" />
          </group>
      </preferences>
    -------------------
    begin         Tue Sep 12 2000
    author        David Johnson, david@usermode.org
    -------------------
    Copyright 2000, David Johnson
    All rights reserved.
  
    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions are met:
  
    1. Redistributions of source code must retain the above copyright notice, this
    list of conditions and the following disclaimer.
  
    2. Redistributions in binary form must reproduce the above copyright notice,
    this list of conditions and the following disclaimer in the documentation
    and/or other materials provided with the distribution.
  
    3. Neither name of the copyright holders nor the names of its contributors may
    be used to endorse or promote products derived from this software without
    specific prior written permission.
  
    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE
    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   ***************************************************************************/
  
  // version 2
  
  #ifndef PREFERENCES_H
  #define PREFERENCES_H
  
  #include <qapplication.h>
  #include <qstring.h>
  #include <qmap.h>
  
  class QColor;
  class QDomElement;
  
  class Preferences {
  public:
      // constructor
      Preferences(const QString& filename, const QString& format, const QString& version);
      // destructor
      virtual ~Preferences();
  
      // preference file information
      const QString& file();          // Not implemented
      const QString& format();        // Not implemented
      const QString& version();       // Not implemented
      // did file open successfully?
      bool fileState();               // Not implemented
      // is this a proper preferences file for format?
      bool formatState();             // Not implemented
  
      // group settings
      const QString& getGroup();              // Not implemented
      void setGroup(const QString& group);    // Not implemented
  
      // boolean data storage
      bool getBool(const QString& key, bool def = false);
      void setBool(const QString& key, bool value);
      // integer data storage
      long getNumber(const QString& key, long def = 0);
      void setNumber(const QString& key, long value);
      // double data storage
      double getDouble(const QString& key, double def = 0.0);
      void setDouble(const QString& key, double value);
      // string data storage
      QString getString(const QString& key, const QString& def = "NULL");
      void setString(const QString& key, const QString& value);
  
      // remove a key/value from the preferences
      void removeKey(const QString& key);
      // remove the current group from the preferences
      void removeGroup();
  
      // flush the preferences out to file
      void flush();
  
  protected:
      // serialization
      void readData();
      void writeData();
      void processGroup(QDomElement group);
  
  private:
      bool dirty_;
      QString currentgroup_;
      QString file_;
      QString format_;
      QString version_;
      QString buffer_;
      bool filestate_;
      bool formatstate_;
  
      typedef QMap<QString, QString> PrefMap;
      QMap<QString, PrefMap> groups_;
  };
  
  //////////////////////////////////////////////////////////////////////////////
  // Inline methods
  
  inline const QString& Preferences::file() { return file_; };
  
  inline const QString& Preferences::format() { return format_; }
  
  inline bool Preferences::fileState() { return filestate_; }
  
  inline bool Preferences::formatState() { return formatstate_; }
  
  inline void Preferences::setGroup(const QString& group) { currentgroup_ = group; }
  
  inline const QString& Preferences::getGroup() { return currentgroup_; }
  
  #endif // PREFERENCES
  Index: ossp-pkg/titraq/titraq.cpp
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 titraq.cpp
  --- ossp-pkg/titraq/titraq.cpp	20 Nov 2002 11:06:32 -0000	1.17
  +++ ossp-pkg/titraq/titraq.cpp	24 Nov 2002 17:56:54 -0000	1.18
  @@ -46,6 +46,7 @@
           setupTable();
           setupEditlay();
           setupButtons();
  +        setupPrefs();
       }
       catch (Genexcept& Genex) {
           Genex.reportErr();
  Index: ossp-pkg/titraq/titraq.h
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 titraq.h
  --- ossp-pkg/titraq/titraq.h	22 Nov 2002 19:42:25 -0000	1.18
  +++ ossp-pkg/titraq/titraq.h	24 Nov 2002 17:56:54 -0000	1.19
  @@ -16,6 +16,9 @@
   #include <qlayout.h>
   #include <qfile.h>
   
  +#include "prefs.h"
  +#include "titconst.h"
  +
   // Intentional no operation
   #define TITRAQ_NOP ((void)0)
   
  @@ -33,6 +36,9 @@
       Titraqform(QWidget *pParent = 0, const char *kszName = 0, WFlags Flags = 0);
       ~Titraqform(void);
   
  +    // Top level members
  +    Preferences *m_pPrefs;
  +
       // Main application actions
       QAction     *m_pFilenewact,   *m_pFileopenact;
       QAction     *m_pFilesaveact,  *m_pFilesaveasact;
  @@ -118,6 +124,7 @@
       void setupEditlay(void);            // Editing lay
       void setupButtons(void);            // Push button widgets
       void setupPieces(void);             // Assemble widget pieces
  +    void setupPrefs(void);              // Preferences
   
       // Data processing
       void loadData(QFile &);             // Load accounting data from file

From ossp-cvs-owner@ossp.org  Sun Nov 24 19:02:43 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 81E7876AD9; Sun, 24 Nov 2002 19:02:43 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq Makefile.in titprefs.cpp titraq.h
Message-Id: <20021124180243.81E7876AD9@mail.ossp.org>
Date: Sun, 24 Nov 2002 19:02:43 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   24-Nov-2002 19:02:43
  Branch: HEAD                             Handle: 2002112418024300

  Modified files:
    ossp-pkg/titraq         Makefile.in titprefs.cpp titraq.h

  Log:
    Correct build config after preferences integration.

  Summary:
    Revision    Changes     Path
    1.16        +2  -2      ossp-pkg/titraq/Makefile.in
    1.2         +1  -1      ossp-pkg/titraq/titprefs.cpp
    1.20        +1  -1      ossp-pkg/titraq/titraq.h
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/Makefile.in
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 Makefile.in
  --- ossp-pkg/titraq/Makefile.in	24 Nov 2002 17:56:54 -0000	1.15
  +++ ossp-pkg/titraq/Makefile.in	24 Nov 2002 18:02:43 -0000	1.16
  @@ -65,9 +65,9 @@
   TARGET_PROGS    = titraq
   TARGET_MANS     = titraq.1 titraq.conf.5
   
  -SRCS            = main.cpp titraq.cpp titassist.cpp titslot.cpp tidatops.cpp titrex.cpp generic.cpp prefs.cpp titraq_version.c
  +SRCS            = main.cpp titraq.cpp titassist.cpp titslot.cpp tidatops.cpp titrex.cpp generic.cpp titprefs.cpp titraq_version.c
   
  -OBJS            = main.o titraq.o titassist.o titslot.o tidatops.o titrex.o generic.o prefs.o titraq_version.o
  +OBJS            = main.o titraq.o titassist.o titslot.o tidatops.o titrex.o generic.o titprefs.o titraq_version.o
   
   GRAFX           = gfx/ossplogo.xpm
   
  Index: ossp-pkg/titraq/titprefs.cpp
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 titprefs.cpp
  --- ossp-pkg/titraq/titprefs.cpp	24 Nov 2002 17:56:54 -0000	1.1
  +++ ossp-pkg/titraq/titprefs.cpp	24 Nov 2002 18:02:43 -0000	1.2
  @@ -32,7 +32,7 @@
   #include <qfile.h>
   #include <qtextstream.h>
   
  -#include "prefs.h"
  +#include "titprefs.h"
   
   //////////////////////////////////////////////////////////////////////////////
   // Construction                                                             //
  Index: ossp-pkg/titraq/titraq.h
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 titraq.h
  --- ossp-pkg/titraq/titraq.h	24 Nov 2002 17:56:54 -0000	1.19
  +++ ossp-pkg/titraq/titraq.h	24 Nov 2002 18:02:43 -0000	1.20
  @@ -16,7 +16,7 @@
   #include <qlayout.h>
   #include <qfile.h>
   
  -#include "prefs.h"
  +#include "titprefs.h"
   #include "titconst.h"
   
   // Intentional no operation

From ossp-cvs-owner@ossp.org  Sun Nov 24 19:03:24 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7A52976AD9; Sun, 24 Nov 2002 19:03:24 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq titassist.cpp
Message-Id: <20021124180324.7A52976AD9@mail.ossp.org>
Date: Sun, 24 Nov 2002 19:03:24 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   24-Nov-2002 19:03:24
  Branch: HEAD                             Handle: 2002112418032400

  Modified files:
    ossp-pkg/titraq         titassist.cpp

  Log:
    Remove debug code.

  Summary:
    Revision    Changes     Path
    1.12        +0  -3      ossp-pkg/titraq/titassist.cpp
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/titassist.cpp
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 titassist.cpp
  --- ossp-pkg/titraq/titassist.cpp	24 Nov 2002 17:56:54 -0000	1.11
  +++ ossp-pkg/titraq/titassist.cpp	24 Nov 2002 18:03:24 -0000	1.12
  @@ -6,8 +6,6 @@
   #include <qlistbox.h>
   #include <qcursor.h>
   
  -#include <iostream>
  -
   // User interface
   #include "titraq.h"
   #include "titrex.h"             // Exception classes
  @@ -437,7 +435,6 @@
   {
       m_pPrefs = new Preferences(TITRAQ_PREFNAME, TITRAQ_APPTITLE, TITRAQ_PREFVER);
       if (m_pPrefs->fileState()) { // No file was found, so create a new one
  -std::cout << "Executing if" << std::endl;
           m_pPrefs->setString(TITRAQ_PREFASFILE, TITRAQ_DEFASFILE);
           m_pPrefs->setString(TITRAQ_PREFSTYLE, TITRAQ_DEFSTYLE);
           m_pPrefs->setString(TITRAQ_PREFVIEW, TITRAQ_DEFVIEW);

From ossp-cvs-owner@ossp.org  Sun Nov 24 19:09:22 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D58E776AD9; Sun, 24 Nov 2002 19:09:21 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq titprefs.h
Message-Id: <20021124180921.D58E776AD9@mail.ossp.org>
Date: Sun, 24 Nov 2002 19:09:21 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   24-Nov-2002 19:09:21
  Branch: HEAD                             Handle: 2002112418092100

  Modified files:
    ossp-pkg/titraq         titprefs.h

  Log:
    Remove unimplemented markers.

  Summary:
    Revision    Changes     Path
    1.2         +7  -7      ossp-pkg/titraq/titprefs.h
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/titprefs.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 titprefs.h
  --- ossp-pkg/titraq/titprefs.h	24 Nov 2002 17:56:54 -0000	1.1
  +++ ossp-pkg/titraq/titprefs.h	24 Nov 2002 18:09:21 -0000	1.2
  @@ -64,17 +64,17 @@
       virtual ~Preferences();
   
       // preference file information
  -    const QString& file();          // Not implemented
  -    const QString& format();        // Not implemented
  -    const QString& version();       // Not implemented
  +    const QString& file();
  +    const QString& format();
  +    const QString& version();
       // did file open successfully?
  -    bool fileState();               // Not implemented
  +    bool fileState();
       // is this a proper preferences file for format?
  -    bool formatState();             // Not implemented
  +    bool formatState();
   
       // group settings
  -    const QString& getGroup();              // Not implemented
  -    void setGroup(const QString& group);    // Not implemented
  +    const QString& getGroup();
  +    void setGroup(const QString& group);
   
       // boolean data storage
       bool getBool(const QString& key, bool def = false);

From ossp-cvs-owner@ossp.org  Sun Nov 24 20:36:49 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7E40A76AD9; Sun, 24 Nov 2002 20:36:49 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio.c sio.h sio_buffer.c sio_fd.c sio_hello.c...
Message-Id: <20021124193649.7E40A76AD9@mail.ossp.org>
Date: Sun, 24 Nov 2002 20:36:49 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   24-Nov-2002 20:36:49
  Branch: HEAD                             Handle: 2002112419364800

  Modified files:
    ossp-pkg/sio            sio.c sio.h sio_buffer.c sio_fd.c sio_hello.c
                            sio_hole.c sio_null.c sio_sa.c sio_test.c

  Log:
    add optional shutdown function to modules. On detach, it is called
    and if returning SIO_OK another round through output and input
    is done.
    modules are now pushed at pipe head instead of appended so that
    a module can do upstream I/O while being wound up.

  Summary:
    Revision    Changes     Path
    1.13        +30 -9      ossp-pkg/sio/sio.c
    1.7         +1  -0      ossp-pkg/sio/sio.h
    1.5         +2  -1      ossp-pkg/sio/sio_buffer.c
    1.9         +2  -1      ossp-pkg/sio/sio_fd.c
    1.9         +2  -1      ossp-pkg/sio/sio_hello.c
    1.5         +2  -1      ossp-pkg/sio/sio_hole.c
    1.6         +8  -1      ossp-pkg/sio/sio_null.c
    1.4         +2  -1      ossp-pkg/sio/sio_sa.c
    1.5         +51 -13     ossp-pkg/sio/sio_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio.c
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 sio.c
  --- ossp-pkg/sio/sio.c	14 Nov 2002 15:56:10 -0000	1.12
  +++ ossp-pkg/sio/sio.c	24 Nov 2002 19:36:48 -0000	1.13
  @@ -381,6 +381,9 @@
   /*
    * attach a stage to the read and/or write side of the pipe
    *
  + * the stage is attached to the head of the pipe, you
  + * have to create your pipes "backwards".
  + *
    * prepare assembly lines
    *
    * stages that are reader and writer get a pointer to the
  @@ -423,7 +426,7 @@
               sio_destroy_al(sio, rw);
               return SIO_RC(rc);
           }
  -        ADDTAIL(&sio->readers,hd,&sios->reader);
  +        ADDHEAD(&sio->readers,hd,&sios->reader);
           freereader = 1;
       }
       if (rw == SIO_MODE_WRITE || rw == SIO_MODE_READWRITE) {
  @@ -436,7 +439,7 @@
               sio_destroy_al(sio, rw);
               return SIO_RC(rc);
           }
  -        ADDTAIL(&sio->writers,hd,&sios->writer);
  +        ADDHEAD(&sio->writers,hd,&sios->writer);
       }
   
       if (rw == SIO_MODE_READWRITE) {
  @@ -462,7 +465,7 @@
    */
   sio_rc_t sio_detach(sio_t *sio, sio_stage_t *sios)
   {
  -    sio_rc_t rc;
  +    sio_rc_t rc, rc2;
   
       /* argument sanity check(s) */
       if (sio == NULL || sios == NULL)
  @@ -477,19 +480,37 @@
           return SIO_RC(SIO_ERR_ARG);
       }
   
  -    rc = SIO_OK;
  +    rc  = SIO_OK;
  +    rc2 = SIO_OK;
  +
  +    if (sios->module->shutdown != NULL &&
  +        sios->module->shutdown(sio, sios->userdata) == SIO_OK) {
  +
  +        if (sios->rw == SIO_MODE_WRITE || sios->rw == SIO_MODE_READWRITE) {
  +printf("final output\n");
  +            rc = sio_strategy(sio, HEAD(&sio->writers,hd));
  +            if (rc != SIO_OK) return SIO_RC(rc);
  +        }
  +        if (sios->rw == SIO_MODE_READ || sios->rw == SIO_MODE_READWRITE) {
  +printf("final input\n");
  +            sio_strategy(sio, HEAD(&sio->readers,hd));
  +            if (rc != SIO_OK) return SIO_RC(rc);
  +        }
  +
  +    }
  +
       if (sios->rw == SIO_MODE_WRITE || sios->rw == SIO_MODE_READWRITE) {
           REMOVE(&sio->writers,hd,&sios->writer);
           rc = sios->module->closew(sio, sio->writers.al, sios->userdata);
       }
       if (sios->rw == SIO_MODE_READ || sios->rw == SIO_MODE_READWRITE) {
           REMOVE(&sio->readers,hd,&sios->reader);
  -        if (rc == SIO_OK)
  -            rc = sios->module->closer(sio, sio->readers.al, sios->userdata);
  -        else
  -            /* XXX - double error handling ? */
  -            sios->module->closer(sio, sio->readers.al, sios->userdata);
  +        rc2 = sios->module->closer(sio, sio->readers.al, sios->userdata);
       }
  +
  +    /* XXX double error handling ? */
  +    if (rc == SIO_OK)
  +        rc = rc2;
   
       if (sios->rw == SIO_MODE_READWRITE) {
           sios->reader.cross = NULL;
  Index: ossp-pkg/sio/sio.h
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 sio.h
  --- ossp-pkg/sio/sio.h	14 Nov 2002 15:56:10 -0000	1.6
  +++ ossp-pkg/sio/sio.h	24 Nov 2002 19:36:48 -0000	1.7
  @@ -106,6 +106,7 @@
       sio_rc_t (*closew)    (sio_t *, al_t *, void *);
       sio_rc_t (*input)     (sio_t *, al_t *, void *);
       sio_rc_t (*output)    (sio_t *, al_t *, void *);
  +    sio_rc_t (*shutdown)  (sio_t *, void *);
   };
   
   typedef enum {
  Index: ossp-pkg/sio/sio_buffer.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 sio_buffer.c
  --- ossp-pkg/sio/sio_buffer.c	14 Nov 2002 15:56:10 -0000	1.4
  +++ ossp-pkg/sio/sio_buffer.c	24 Nov 2002 19:36:48 -0000	1.5
  @@ -206,6 +206,7 @@
       buffer_openw,
       buffer_closew,
       buffer_input,
  -    buffer_output
  +    buffer_output,
  +    NULL
   };
   
  Index: ossp-pkg/sio/sio_fd.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 sio_fd.c
  --- ossp-pkg/sio/sio_fd.c	19 Nov 2002 15:30:51 -0000	1.8
  +++ ossp-pkg/sio/sio_fd.c	24 Nov 2002 19:36:48 -0000	1.9
  @@ -204,7 +204,8 @@
       fd_openw,
       fd_closew,
       fd_input,
  -    fd_output
  +    fd_output,
  +    NULL
   };
   
   
  Index: ossp-pkg/sio/sio_hello.c
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 sio_hello.c
  --- ossp-pkg/sio/sio_hello.c	19 Nov 2002 22:20:52 -0000	1.8
  +++ ossp-pkg/sio/sio_hello.c	24 Nov 2002 19:36:48 -0000	1.9
  @@ -412,6 +412,7 @@
       hello_openw,
       hello_closew,
       hello_input,
  -    hello_output
  +    hello_output,
  +    NULL
   };
   
  Index: ossp-pkg/sio/sio_hole.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 sio_hole.c
  --- ossp-pkg/sio/sio_hole.c	14 Nov 2002 15:56:10 -0000	1.4
  +++ ossp-pkg/sio/sio_hole.c	24 Nov 2002 19:36:48 -0000	1.5
  @@ -103,6 +103,7 @@
       hole_openw,
       hole_closew,
       hole_input,
  -    hole_output
  +    hole_output,
  +    NULL
   };
   
  Index: ossp-pkg/sio/sio_null.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 sio_null.c
  --- ossp-pkg/sio/sio_null.c	14 Nov 2002 15:56:10 -0000	1.5
  +++ ossp-pkg/sio/sio_null.c	24 Nov 2002 19:36:48 -0000	1.6
  @@ -97,6 +97,12 @@
       return SIO_OK;
   }
   
  +static
  +sio_rc_t null_shutdown(sio_t *sio, al_t *al, void *u)
  +{
  +    return SIO_OK;
  +}
  +
   sio_module_t sio_module_null = {
       "null",
       null_init,
  @@ -107,6 +113,7 @@
       null_openw,
       null_closew,
       null_input,
  -    null_output
  +    null_output,
  +    null_shutdown
   };
   
  Index: ossp-pkg/sio/sio_sa.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 sio_sa.c
  --- ossp-pkg/sio/sio_sa.c	14 Nov 2002 15:56:10 -0000	1.3
  +++ ossp-pkg/sio/sio_sa.c	24 Nov 2002 19:36:48 -0000	1.4
  @@ -217,7 +217,8 @@
       saw_openw,
       saw_closew,
       saw_input,
  -    saw_output
  +    saw_output,
  +    NULL
   };
   
   
  Index: ossp-pkg/sio/sio_test.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 sio_test.c
  --- ossp-pkg/sio/sio_test.c	19 Nov 2002 22:30:07 -0000	1.4
  +++ ossp-pkg/sio/sio_test.c	24 Nov 2002 19:36:48 -0000	1.5
  @@ -11,6 +11,9 @@
   extern sio_module_t sio_module_bio;
   extern sio_module_t sio_module_hello;
   extern sio_module_t sio_module_buffer;
  +#ifndef SINK
  +extern sio_module_t sio_module_sa;
  +#endif
   
   #define e(f) rc = f; printf("%s = %s\n",#f, sio_error(rc)); fflush(stdout);
   #define s(f) src = f; printf("%s = %s\n",#f, sa_error(src)); fflush(stdout);
  @@ -23,6 +26,9 @@
       void *rp;
       sio_rc_t rc;
       sio_t *sio;
  +#ifndef SINK
  +    sio_stage_t *sios_sa;
  +#endif
       sio_stage_t *sios_bio, *sios_hello, *sios_buffer;
   
       sa_rc_t src;
  @@ -32,12 +38,17 @@
   
       int fd;
       SSL_CTX *ctx;
  -    BIO *bio, *sbio;
  +#ifdef SINK
  +    BIO *bio;
  +#endif
  +    BIO *sbio;
   
       char buf[] = "Hello world\n";
   
       size_t actual;
       size_t buflen;
  +    int no  = 0;
  +    int yes = 1;
   
       s(sa_create(&msa));
       s(sa_option(msa, SA_OPTION_REUSEADDR, 1));
  @@ -49,16 +60,22 @@
       s(sa_addr_destroy(saa));
       uri = NULL;
   
  +    ERR_load_BIO_strings();
       OpenSSL_add_ssl_algorithms();
       ctx = SSL_CTX_new(SSLv23_server_method());
   
  -    SSL_CTX_use_certificate_file(ctx, "/u/mlelstv/ssl/server.crt", SSL_FILETYPE_PEM);
  -    SSL_CTX_use_PrivateKey_file(ctx, "/u/mlelstv/ssl/server.key", SSL_FILETYPE_PEM);
  +    if (!SSL_CTX_use_certificate_file(ctx, "/u/mlelstv/ssl/server.crt", SSL_FILETYPE_PEM))
  +        exit(98);
  +    if (!SSL_CTX_use_PrivateKey_file(ctx, "/u/mlelstv/ssl/server.key", SSL_FILETYPE_PEM))
  +        exit(99);
   
       e(sio_create(&sio));
  -    e(sio_create_stage(sio, &sio_module_bio, &sios_bio));
  -    e(sio_create_stage(sio, &sio_module_hello, &sios_hello));
  +    e(sio_create_stage(sio, &sio_module_bio,    &sios_bio));
  +    e(sio_create_stage(sio, &sio_module_hello,  &sios_hello));
       e(sio_create_stage(sio, &sio_module_buffer, &sios_buffer));
  +#ifndef SINK
  +    e(sio_create_stage(sio, &sio_module_sa,     &sios_sa));
  +#endif
   
       buflen = 256;
       e(sio_configure_stage(sio, sios_bio, "inputsize", &buflen));
  @@ -75,33 +92,54 @@
           printf("Connection from %s\n",uri);
           s(sa_addr_destroy(saa));
   
  +        p(sbio = BIO_new_ssl(ctx,0));
  +        e(sio_configure_stage(sio, sios_bio, "bio", sbio));
  +
  +#ifdef SINK
           s(sa_getfd(sa, &fd));
           p(bio = BIO_new_socket(fd, 0));
  -
  -        p(sbio = BIO_new_ssl(ctx,0));
           p(BIO_push(sbio,bio));
  +#else
  +        e(sio_configure_stage(sio, sios_sa, "sa", sa));
  +        buflen = 256;
  +        e(sio_configure_stage(sio, sios_sa, "buflen", &buflen));
  +        e(sio_configure_stage(sio, sios_bio, "issink", &no));
  +#endif
  +        e(sio_configure_stage(sio, sios_bio, "freebio", &yes));
   
  -        e(sio_configure_stage(sio, sios_bio, "bio", sbio));
   
  -        e(sio_attach(sio, sios_buffer, SIO_MODE_WRITE));
  -        e(sio_attach(sio, sios_hello, SIO_MODE_READWRITE));
  +#ifndef SINK
  +        e(sio_attach(sio, sios_sa, SIO_MODE_READWRITE));
  +#endif
           e(sio_attach(sio, sios_bio, SIO_MODE_READWRITE));
  +        e(sio_attach(sio, sios_hello, SIO_MODE_READWRITE));
  +        e(sio_attach(sio, sios_buffer, SIO_MODE_WRITE));
   
           e(sio_write(sio, buf, sizeof(buf)-1, &actual));
           e(sio_push(sio));
   
  -        e(sio_detach(sio, sios_bio));
  -        e(sio_detach(sio, sios_hello));
           e(sio_detach(sio, sios_buffer));
  +        e(sio_detach(sio, sios_hello));
  +        e(sio_detach(sio, sios_bio));
  +#ifndef SINK
  +        e(sio_detach(sio, sios_sa));
  +#endif
   
  +#ifdef SINK
           BIO_pop(bio);
  -        BIO_free(sbio);
  +#endif
  +        /* BIO_free(sbio); */
  +#ifdef SINK
           BIO_free(bio);
  +#endif
   
           sa_destroy(sa);
       }
   
   
  +#ifndef SINK
  +    e(sio_destroy_stage(sio, sios_sa));
  +#endif
       e(sio_destroy_stage(sio, sios_buffer));
       e(sio_destroy_stage(sio, sios_hello));
       e(sio_destroy_stage(sio, sios_bio));

From ossp-cvs-owner@ossp.org  Sun Nov 24 20:39:18 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C9C9F76AD9; Sun, 24 Nov 2002 20:39:17 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio_bio.c
Message-Id: <20021124193917.C9C9F76AD9@mail.ossp.org>
Date: Sun, 24 Nov 2002 20:39:17 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   24-Nov-2002 20:39:17
  Branch: HEAD                             Handle: 2002112419391700

  Modified files:
    ossp-pkg/sio            sio_bio.c

  Log:
    now supports full duplex BIOs. BIOs are shut down during
    a BIO_free() operation, so this has to be done while the pipe
    is active with the "freebio" parameter.

  Summary:
    Revision    Changes     Path
    1.3         +432 -44    ossp-pkg/sio/sio_bio.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio_bio.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 sio_bio.c
  --- ossp-pkg/sio/sio_bio.c	19 Nov 2002 22:29:20 -0000	1.2
  +++ ossp-pkg/sio/sio_bio.c	24 Nov 2002 19:39:17 -0000	1.3
  @@ -1,23 +1,188 @@
   #include <stddef.h>
   #include <stdlib.h>
   #include <string.h>
  +#include <assert.h>
   
   #include "al.h"
   #include "sio.h"
   
   #include <openssl/bio.h>
  +#include <openssl/err.h>
  +
  +typedef enum {
  +    INIT,
  +    LOWER,
  +    UPPER
  +} state_t;
   
   typedef struct {
  -    BIO *bio;
  -    size_t inputsize;
  -    al_label_t data_label;
  -    al_label_t eof_label;
  -    al_label_t error_label;
  -    char       eof;
  -    char       error;
  -    size_t     total;
  +    state_t      state;
  +    int          isoutput;
  +    al_t        *in_buf;
  +    al_t        *out_buf;
  +    BIO         *bio;
  +    BIO         *nbio;
  +    al_t        *al_in, *al_out;   /* upstream buffers */
  +    int          reader_writes;
  +    int          writer_reads;
  +    int          issink;
  +    int          freebio;
  +    size_t       inputsize;
  +    al_label_t   data_label;
  +    al_label_t   eof_label;
  +    al_label_t   error_label;
  +    char         eof;
  +    char         error;
  +    size_t       total;
  +    int          should_retry;
  +    int          flush_upper;
  +    int          flush_lower;
  +    int          eof_reached;
   } private_t;
   
  +/********************************************************************/
  +
  +static
  +int b_new(BIO *bi)
  +{
  +    bi->init  = 0;
  +    bi->num   = -1;
  +    bi->flags = 0;
  +    bi->ptr   = NULL;
  +    return 1;
  +}
  +
  +static
  +int b_free(BIO *a)
  +{
  +    if (a == NULL)
  +        return 0;
  +    return 1;
  +}
  +
  +static
  +long b_pending(private_t *my)
  +{
  +    return my ? al_bytes(my->al_in) : 0;
  +}
  +static
  +long b_wpending(private_t *my)
  +{
  +    return my ? al_bytes(my->al_out) : 0;
  +}
  +static
  +long b_setflush(private_t *my)
  +{
  +    if (my) my->flush_upper = 1;
  +    return 1;
  +}
  +static
  +long b_geteof(private_t *my)
  +{
  +    return my->eof_reached;
  +}
  +static
  +long b_ctrl(BIO *b, int cmd, long num, void *ptr)
  +{
  +    long ret = 1;
  +
  +    switch (cmd) {
  +    case BIO_CTRL_PENDING:
  +        ret = b_pending((private_t *)b->ptr);
  +        break;
  +    case BIO_CTRL_WPENDING:
  +        ret = b_wpending((private_t *)b->ptr);
  +        break;
  +    case BIO_CTRL_FLUSH:
  +        ret = b_setflush((private_t *)b->ptr);
  +        break;
  +    case BIO_CTRL_EOF:
  +        ret = b_geteof((private_t *)b->ptr);
  +        break;
  +    case BIO_C_SET_FD:
  +        b->ptr  = ptr;
  +        b->init = 1;
  +        ret = 1;
  +        break;
  +    case BIO_CTRL_RESET:
  +    case BIO_CTRL_SET:
  +    case BIO_CTRL_SET_CLOSE:
  +    case BIO_CTRL_DUP:
  +        ret = 1;
  +        break;
  +    case BIO_CTRL_GET_CLOSE:
  +    case BIO_CTRL_INFO:
  +    case BIO_CTRL_GET:
  +    default:
  +        ret = 0;
  +        break;
  +    }
  +
  +    return ret;
  +}
  +
  +static
  +int b_read(BIO *b, char *out, int outl)
  +{
  +    private_t *my = (private_t *)b->ptr;
  +    size_t n, m;
  +    al_label_t label;
  +
  +    m = 0;
  +    if (al_bytes(my->al_in) > 0) {
  +        al_firstlabel(my->al_in, 0, 1, AL_FORWARD, NULL, &label);
  +        if (label == my->data_label) {
  +            al_flatten(my->al_in, 0, outl, AL_FORWARD_SPAN, label, out, &n);
  +            m = n;
  +        } else {
  +            al_flatten(my->al_in, 0, outl, AL_FORWARD_SPAN, label, NULL, &n);
  +            m = -1;
  +        }
  +        al_splice(my->al_in, 0, n, NULL, NULL);
  +    }
  +
  +    if (m < 0)
  +        my->eof_reached = 1;
  +
  +    BIO_clear_retry_flags(b);
  +    if (m == 0)
  +        BIO_set_retry_read(b);
  +
  +    return m;
  +}
  +
  +static
  +int b_write(BIO *b, const char *in, int inl)
  +{
  +    private_t *my = (private_t *)b->ptr;
  +
  +    al_append_bytes(my->al_out, in, inl, my->data_label);
  +
  +    return inl;
  +}
  +
  +static
  +int b_puts(BIO *b, const char *s)
  +{
  +    return b_write(b, s, strlen(s));
  +}
  +
  +static
  +BIO_METHOD b_method = {
  +    BIO_TYPE_NONE,
  +    "SIO SSL",
  +    b_write,
  +    b_read,
  +    b_puts,
  +    NULL,
  +    b_ctrl,
  +    b_new,
  +    b_free,
  +    NULL
  +};
  +
  +/********************************************************************/
  +
   /*
    * create stage
    *
  @@ -32,8 +197,11 @@
       if (my == NULL)
           return SIO_ERR_MEM;
   
  -    my->bio          = NULL;
  -    my->eof          = '\0';
  +    my->bio           = NULL;
  +    my->nbio          = NULL;
  +    my->issink        = 1;
  +    my->freebio       = 0;
  +    my->eof           = '\0';
       my->error        = '\0';
   
       sio_label(sio, SIO_LN_DATA,  &my->data_label);
  @@ -60,6 +228,10 @@
           my->bio       = (BIO *)val;
       } else if (!strcmp(name, "inputsize")) {
           my->inputsize = *(int *)val;
  +    } else if (!strcmp(name, "issink")) {
  +        my->issink    = *(int *)val;
  +    } else if (!strcmp(name, "freebio")) {
  +        my->freebio   = *(int *)val;
       } else {
           return SIO_ERR_ARG;
       }
  @@ -95,24 +267,189 @@
   static
   sio_rc_t siobio_openw(sio_t *sio, al_t *al, void *u)
   {
  +    private_t *my = (private_t *)u;
  +
  +    if (my->bio == NULL)
  +        return SIO_ERR_ARG;
  +
  +    if (al_create(&my->al_in) != AL_OK)
  +        return SIO_ERR_INT;
  +    if (al_create(&my->al_out) != AL_OK) {
  +        al_destroy(my->al_in); my->al_in = NULL;
  +        return SIO_ERR_INT;
  +    }
  +    if (al_create(&my->in_buf) != AL_OK) {
  +        al_destroy(my->al_out); my->al_out = NULL;
  +        al_destroy(my->al_in); my->al_in = NULL;
  +        return SIO_ERR_INT;
  +    }
  +    if (al_create(&my->out_buf) != AL_OK) {
  +        al_destroy(my->in_buf); my->in_buf = NULL;
  +        al_destroy(my->al_out); my->al_out = NULL;
  +        al_destroy(my->al_in); my->al_in = NULL;
  +        return SIO_ERR_INT;
  +    }
  +
  +    if (!my->issink) {
  +        my->nbio = BIO_new(&b_method);
  +        BIO_ctrl(my->nbio, BIO_C_SET_FD, 0, (void *)my);
  +        BIO_push(my->bio, my->nbio);
  +    }
  +
  +    my->writer_reads  = 0;
  +    my->reader_writes = 0;
  +
  +    my->state = INIT;
  +
       return SIO_OK;
   }
   
   static
   sio_rc_t siobio_closew(sio_t *sio, al_t *al, void *u)
   {
  +    private_t *my = (private_t *)u;
  +
  +    if (my->nbio != NULL) {
  +        BIO_pop(my->bio);
  +        BIO_free(my->nbio);
  +        my->nbio = NULL;
  +    }
  +
  +    al_destroy(my->out_buf); my->out_buf = NULL;
  +    al_destroy(my->in_buf); my->in_buf = NULL;
  +    al_destroy(my->al_out); my->al_out = NULL;
  +    al_destroy(my->al_in); my->al_in = NULL;
  +
       return SIO_OK;
   }
   
  +/********************************************************************/
  +
  +/*
  + * auto-destructor for allocated input buffer
  + */
   static
   void freebiobuf(char *p, size_t n, void *u)
   {
       free(p);
   }
  +
  +/*
  + * chunk traversal of output buffer
  + *
  + * counts my->total
  + * sets my->should_retry
  + */
   static
  -sio_rc_t siobio_input(sio_t *sio, al_t *al, void *u)
  +al_rc_t siobio_write_chunk(al_chunk_t *alc, void *u)
   {
       private_t *my = (private_t *)u;
  +    int        n  = al_chunk_len(alc);
  +    al_rc_t arc   = AL_OK;
  +
  +    if (al_same_label(alc, my->data_label)) {
  +        char *p = al_chunk_ptr(alc, 0);
  +        int   i, t;
  +
  +        for (t=0; t<n; t+=i) {
  +            i = my->bio ? BIO_write(my->bio, p+t, n-t) : (n-t);
  +            if (i <= 0) {
  +                if (!BIO_should_retry(my->bio)) {
  +                    my->should_retry = 1;
  +                    arc = AL_ERR_EOF;
  +                    break;
  +                }
  +                i = 0;
  +            }
  +            my->total += i;
  +        }
  +    } else {
  +        my->total += n;
  +        my->flush_lower = 1;
  +    }
  +
  +    return arc;
  +}
  +
  +/********************************************************************/
  +
  +/* UPSTREAM layer */
  +
  +static
  +sio_rc_t siobio_input_upper(private_t *my, al_t *al)
  +{
  +    /* flush output */
  +    if (my->flush_upper)
  +        return SIO_SCHED_CROSS;
  +
  +    if (al_bytes(al) <= 0)
  +        return SIO_SCHED_UP;
  +
  +    al_splice(al, 0, al_bytes(al), NULL, my->al_in);
  +
  +    if (!my->isoutput) {
  +        my->state = LOWER;
  +        return SIO_SCHED_LOOP;
  +    }
  +
  +    return SIO_SCHED_CROSS;
  +}
  +
  +static
  +sio_rc_t siobio_output_upper(private_t *my, al_t *al)
  +{
  +    /* flush output */
  +    if (my->flush_upper) {
  +        my->flush_upper = 0;
  +        al_splice(al, al_bytes(al), 0, my->al_out, NULL);
  +        return SIO_SCHED_UP;
  +    }
  +
  +    if (my->should_retry) {
  +        my->should_retry = 0;
  +        al_splice(al, 0, al_bytes(al), my->al_in, NULL);
  +        return SIO_SCHED_CROSS;
  +    }
  +
  +    if (my->isoutput) {
  +        my->state = LOWER;
  +        return SIO_SCHED_LOOP;
  +    }
  +
  +    return SIO_SCHED_CROSS;
  +}
  +
  +/* DOWNSTREAM layer */
  +static
  +sio_rc_t siobio_input_lower(private_t *my, al_t *al)
  +{
  +    al_splice(al, al_bytes(al), 0, my->in_buf, NULL);
  +    if (al_bytes(al) > 0) {
  +        my->state = INIT;
  +        return SIO_SCHED_DOWN;
  +    }
  +
  +    my->state = UPPER;
  +    return SIO_SCHED_LOOP;
  +}
  +
  +static
  +sio_rc_t siobio_output_lower(private_t *my, al_t *al)
  +{
  +    al_splice(al, 0, al_bytes(al), NULL, my->out_buf);
  +    if (al_bytes(my->out_buf) <= 0) {
  +        my->state = INIT;
  +        return SIO_SCHED_DOWN;
  +    }
  +
  +    my->state = UPPER;
  +    return SIO_SCHED_LOOP;
  +}
  +
  +/* BIO layer */
  +static
  +void siobio_bio_read(private_t *my)
  +{
       char *p;
       int n;
   
  @@ -120,64 +457,114 @@
       if (n == 0 || n > my->inputsize)
           n = my->inputsize;
       p = malloc(n);
  +    assert(p != NULL);
   
  -    if (p != NULL)
  +    if (my->bio) {
           do {
               n = BIO_read(my->bio, p, n);
           } while (n <= 0 && BIO_should_retry(my->bio));
  +    } else
  +        n = -2;
   
  -    if (p == NULL || n <= 0) {
  +    if (n < 0) {
           free(p);
           if (n < -1)
  -            al_append_bytes(al, &my->error, sizeof(my->error), my->error_label);
  +            al_append_bytes(my->in_buf, &my->error,
  +                            sizeof(my->error), my->error_label);
           else
  -            al_append_bytes(al, &my->eof, sizeof(my->eof), my->eof_label);
  -    } else
  -        al_attach_buffer(al, p, n, my->data_label, freebiobuf, NULL);
  +            al_append_bytes(my->in_buf, &my->eof,
  +                            sizeof(my->eof), my->eof_label);
  +    } else if (n > 0)
  +        al_attach_buffer(my->in_buf, p, n, my->data_label, freebiobuf, NULL);
  +}
  +
  +static
  +void siobio_bio_write(private_t *my)
  +{
  +    my->should_retry = 0;
  +    my->total        = 0;
  +    al_traverse_cb(my->out_buf, 0, al_bytes(my->out_buf),
  +                   AL_FORWARD, NULL,
  +                   siobio_write_chunk, (void *)my);
  +    al_splice(my->out_buf, 0, my->total, NULL, NULL);
   
  +    if (my->flush_lower) {
  +        my->flush_upper = 1;
  +        if (BIO_flush(my->bio) > 0)
  +            my->flush_lower = 0;
  +    }
  +}
  +
  +/********************************************************************/
  +
  +static
  +sio_rc_t siobio_eof(private_t *my, al_t *al)
  +{
  +    al_splice(al, 0, al_bytes(al), NULL, NULL);
       return SIO_SCHED_DOWN;
   }
   
   static
  -al_rc_t siobio_write_chunk(al_chunk_t *alc, void *u)
  +sio_rc_t siobio_input(sio_t *sio, al_t *al, void *u)
   {
       private_t *my = (private_t *)u;
  -    al_rc_t arc = AL_OK;
  +    sio_rc_t rc;
   
  -    if (al_same_label(alc, my->data_label)) {
  -        char *p = al_chunk_ptr(alc, 0);
  -        int   n = al_chunk_len(alc);
  -        int   i, t;
  -
  -        for (t=0; t<n; t+=i) {
  -            i = BIO_write(my->bio, p+t, n-t);
  -            if (i <= 0) {
  -                if (!BIO_should_retry(my->bio)) {
  -                    arc = AL_ERR_EOF;
  -                    break;
  -                }
  -                i = 0;
  -            }
  -            my->total += i;
  -        }
  -    } else {
  -        my->total += al_chunk_len(alc);
  +    switch (my->state) {
  +    case INIT:
  +        my->isoutput = 0;
  +        my->state    = LOWER;
  +        rc = SIO_SCHED_LOOP;
  +        break;
  +    case LOWER:
  +        siobio_bio_read(my);
  +        rc = siobio_input_lower(my, al);
  +        break;
  +    case UPPER:
  +        rc = siobio_input_upper(my, al);
  +        break;
       }
   
  -    return arc;
  +    return rc;
   }
  +
   static
   sio_rc_t siobio_output(sio_t *sio, al_t *al, void *u)
   {
       private_t *my = (private_t *)u;
  +    sio_rc_t rc;
   
  -    my->total = 0;
  -    al_traverse_cb(al, 0, al_bytes(al), AL_FORWARD, my->data_label,
  -                   siobio_write_chunk, (void *)my);
  +    switch (my->state) {
  +    case INIT:
  +        my->isoutput = 1;
  +        my->state    = LOWER;
  +        rc = SIO_SCHED_LOOP;
  +        break;
  +    case LOWER:
  +        rc = siobio_output_lower(my, al);
  +        siobio_bio_write(my);
  +        break;
  +    case UPPER:
  +        rc = siobio_output_upper(my, al);
  +        break;
  +    }
   
  -    al_splice(al, 0, al_bytes(al), NULL, NULL);
  +    return rc;
  +}
   
  -    return SIO_SCHED_DOWN;
  +static
  +sio_rc_t siobio_shutdown(sio_t *sio, void *u)
  +{
  +    private_t *my = (private_t *)u;
  +
  +    if (my->freebio && my->bio != NULL) {
  +        BIO_free(my->bio);
  +        my->bio = NULL;
  +        my->flush_upper = 1;
  +        my->state       = UPPER;
  +    }
  +
  +    return SIO_OK;
   }
   
   sio_module_t sio_module_bio = {
  @@ -190,6 +577,7 @@
       siobio_openw,
       siobio_closew,
       siobio_input,
  -    siobio_output
  +    siobio_output,
  +    siobio_shutdown
   };
   

From ossp-cvs-owner@ossp.org  Sun Nov 24 20:40:59 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BC9DE76AD9; Sun, 24 Nov 2002 20:40:59 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio_bio.c
Message-Id: <20021124194059.BC9DE76AD9@mail.ossp.org>
Date: Sun, 24 Nov 2002 20:40:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   24-Nov-2002 20:40:59
  Branch: HEAD                             Handle: 2002112419405900

  Modified files:
    ossp-pkg/sio            sio_bio.c

  Log:
    don't cause shutdown operation for BIOs that are not freed.

  Summary:
    Revision    Changes     Path
    1.4         +2  -1      ossp-pkg/sio/sio_bio.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio_bio.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 sio_bio.c
  --- ossp-pkg/sio/sio_bio.c	24 Nov 2002 19:39:17 -0000	1.3
  +++ ossp-pkg/sio/sio_bio.c	24 Nov 2002 19:40:59 -0000	1.4
  @@ -562,9 +562,10 @@
           my->bio = NULL;
           my->flush_upper = 1;
           my->state       = UPPER;
  +        return SIO_OK;
       }
   
  -    return SIO_OK;
  +    return SIO_ERR_ARG;
   }
   
   sio_module_t sio_module_bio = {

From ossp-cvs-owner@ossp.org  Sun Nov 24 20:41:18 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 32FF776B36; Sun, 24 Nov 2002 20:41:18 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio Makefile
Message-Id: <20021124194118.32FF776B36@mail.ossp.org>
Date: Sun, 24 Nov 2002 20:41:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   24-Nov-2002 20:41:18
  Branch: HEAD                             Handle: 2002112419411700

  Modified files:
    ossp-pkg/sio            Makefile

  Log:
    snapshot

  Summary:
    Revision    Changes     Path
    1.3         +3  -4      ossp-pkg/sio/Makefile
  ____________________________________________________________________________

  Index: ossp-pkg/sio/Makefile
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 Makefile
  --- ossp-pkg/sio/Makefile	19 Nov 2002 15:54:51 -0000	1.2
  +++ ossp-pkg/sio/Makefile	24 Nov 2002 19:41:17 -0000	1.3
  @@ -1,6 +1,5 @@
  -
   CC     = gcc
  -CFLAGS = -g -O2 -Wall -Wshadow -Wpointer-arith -Wcast-align -Winline \
  +CFLAGS = -g -Wall -Wshadow -Wpointer-arith -Wcast-align -Winline \
            -Wmissing-prototypes -Wmissing-declarations -Wnested-externs
   
   all: al_test sio_test
  @@ -10,8 +9,8 @@
   
   al_test: al_test.o al.o
   
  -sio_test: sio_test.o sio_buffer.o sio_hello.o sio_bio.o sio.o al.o lib_sa/sa.o
  -	$(CC) $(CFLAGS) -o sio_test sio_test.o sio_buffer.o sio_hello.o sio_bio.o sio.o al.o lib_sa/sa.o -lcrypto
  +sio_test: sio_test.o sio_sa.o sio_buffer.o sio_hello.o sio_bio.o sio.o al.o lib_sa/sa.o
  +	$(CC) $(CFLAGS) -o sio_test sio_test.o sio_sa.o sio_buffer.o sio_hello.o sio_bio.o sio.o al.o lib_sa/sa.o -lssl -lcrypto
   
   lib_sa/sa.o: lib_sa/sa.c
   	$(CC) $(CFLAGS) -c -Ilib_sa -o lib_sa/sa.o lib_sa/sa.c

From ossp-cvs-owner@ossp.org  Sun Nov 24 20:47:09 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 46ED276A69; Sun, 24 Nov 2002 20:47:09 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio.pod
Message-Id: <20021124194709.46ED276A69@mail.ossp.org>
Date: Sun, 24 Nov 2002 20:47:09 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   24-Nov-2002 20:47:09
  Branch: HEAD                             Handle: 2002112419470800

  Modified files:
    ossp-pkg/sio            sio.pod

  Log:
    speak word about the changes

  Summary:
    Revision    Changes     Path
    1.6         +13 -1      ossp-pkg/sio/sio.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio.pod
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 sio.pod
  --- ossp-pkg/sio/sio.pod	14 Nov 2002 15:57:53 -0000	1.5
  +++ ossp-pkg/sio/sio.pod	24 Nov 2002 19:47:08 -0000	1.6
  @@ -88,7 +88,8 @@
   sios->openw,
   sios->closew,
   sios->input,
  -sios->output.
  +sios->output,
  +sios->shutdown.
   
   =back
   
  @@ -298,6 +299,7 @@
        sio_rc_t (*closew)    (sio_t *, al_t *, void *);
        sio_rc_t (*input)     (sio_t *, al_t *, void *);
        sio_rc_t (*output)    (sio_t *, al_t *, void *);
  +     sio_rc_t (*shutdown)  (sio_t *, void *);
    } sio_module_t;
   
   Applications reference this variable to create stage intances with
  @@ -365,6 +367,16 @@
   scheduler to call the same stage again.
   Any other code will abort the scheduler and leave the stream in an
   inconsistent state.
  +
  +=item sio_rc_t B<sios-E<gt>shutdown>(sio_t *I<sio>, void *I<u>);
  +
  +Prepare for a close operation. If this function returns SIO_OK
  +then the scheduler will go one more round through the writer
  +and the reader so that final handshakes can be delivered to
  +upstream modules.
  +
  +NOTE: The shutdown operation is optional, modules may specify
  +a NULL pointer here.
   
   =back
   

From ossp-cvs-owner@ossp.org  Sun Nov 24 21:39:01 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 679C876AD9; Sun, 24 Nov 2002 21:39:01 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq .cvsignore
Message-Id: <20021124203901.679C876AD9@mail.ossp.org>
Date: Sun, 24 Nov 2002 21:39:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   24-Nov-2002 21:39:01
  Branch: HEAD                             Handle: 2002112420390100

  Modified files:
    ossp-pkg/titraq         .cvsignore

  Log:
    Ignore new generated config file.

  Summary:
    Revision    Changes     Path
    1.2         +1  -0      ossp-pkg/titraq/.cvsignore
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/.cvsignore
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 .cvsignore
  --- ossp-pkg/titraq/.cvsignore	8 Nov 2002 12:34:05 -0000	1.1
  +++ ossp-pkg/titraq/.cvsignore	24 Nov 2002 20:39:01 -0000	1.2
  @@ -9,5 +9,6 @@
   moc_titraq.cpp
   titraq
   titraq.1
  +titraq.conf
   titraq.conf.5
   shtool

From ossp-cvs-owner@ossp.org  Sun Nov 24 21:39:32 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A402E76AE1; Sun, 24 Nov 2002 21:39:32 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq TODO main.cpp titassist.cpp titconst.h tit...
Message-Id: <20021124203932.A402E76AE1@mail.ossp.org>
Date: Sun, 24 Nov 2002 21:39:32 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   24-Nov-2002 21:39:32
  Branch: HEAD                             Handle: 2002112420393101

  Modified files:
    ossp-pkg/titraq         TODO main.cpp titassist.cpp titconst.h titraq.cpp
                            titraq.h

  Log:
    Improve new preference object handling.

  Summary:
    Revision    Changes     Path
    1.13        +3  -1      ossp-pkg/titraq/TODO
    1.6         +3  -8      ossp-pkg/titraq/main.cpp
    1.13        +114 -78    ossp-pkg/titraq/titassist.cpp
    1.2         +1  -1      ossp-pkg/titraq/titconst.h
    1.19        +3  -1      ossp-pkg/titraq/titraq.cpp
    1.21        +12 -1      ossp-pkg/titraq/titraq.h
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/TODO
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 TODO
  --- ossp-pkg/titraq/TODO	24 Nov 2002 17:56:54 -0000	1.12
  +++ ossp-pkg/titraq/TODO	24 Nov 2002 20:39:31 -0000	1.13
  @@ -19,10 +19,12 @@
   Ensure rethrows from second loadData on upwards
   Report errors in all slot code
   Add preferences file format XML
  -Read username from Betriebsysteme
  +Read username and homedir from Betriebsysteme
  +  Use homedir as one of many possible locations of titraq.conf
   Rework error handling in prefs
   Generally maintain Preference class
     Implement missing interface methods
  +Review destruction of all members, compare with setupPrefs
   
   Dreams
   ------
  Index: ossp-pkg/titraq/main.cpp
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 main.cpp
  --- ossp-pkg/titraq/main.cpp	13 Nov 2002 12:38:25 -0000	1.5
  +++ ossp-pkg/titraq/main.cpp	24 Nov 2002 20:39:31 -0000	1.6
  @@ -1,16 +1,11 @@
  -#include <qcdestyle.h>
  -
   #include "titraq.h"
   
   int main(int argc, char **argv)
   {
       QApplication App(argc, argv);
   
  -    // The main Titraq application window
  -    Titraqform *pMainform = new Titraqform;
  -    App.setMainWidget(pMainform);
  -    App.setStyle(new QCDEStyle);    // Change style to CDE
  -    pMainform->show();              // Finally start the show
  -
  +    Titraqform Mainform;            // Main app window
  +    App.setMainWidget(&Mainform);
  +    Mainform.show();                // Finally start the show
       return App.exec();
   }
  Index: ossp-pkg/titraq/titassist.cpp
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 titassist.cpp
  --- ossp-pkg/titraq/titassist.cpp	24 Nov 2002 18:03:24 -0000	1.12
  +++ ossp-pkg/titraq/titassist.cpp	24 Nov 2002 20:39:31 -0000	1.13
  @@ -1,4 +1,12 @@
  -// Qt headers
  +// Qt style headers
  +#include <qcdestyle.h>
  +#include <qsgistyle.h>
  +#include <qmotifstyle.h>
  +#include <qmotifplusstyle.h>
  +#include <qplatinumstyle.h>
  +#include <qwindowsstyle.h>
  +
  +// Qt general headers
   #include <qtooltip.h>
   #include <qwhatsthis.h>
   #include <qstringlist.h>
  @@ -19,71 +27,46 @@
   
   
   //
  -// Construct the menu bar
  +// Construct the preferences
   //
  -void Titraqform::setupMenubar(void)
  +void Titraqform::setupPrefs(void)
   {
  -    m_pMenubar = menuBar(); // Grab menu bar owned by QMainWindow
  -    if (m_pMenubar == NULL) // Sanity check
  -        throw Genexcept("Main window menu bar nonexistant.");
  -
  -    // Make an easter egg ;-)
  -    QToolTip::add(m_pMenubar, QRect(0, 0, 2, 2), "Easter egg");
  -
  -    // Construct and populate the file menu with actions
  -    QPopupMenu *pFilepopup = new QPopupMenu(this);
  -    if (pFilepopup == NULL) // Sanity check
  -        throw Genexcept("Main window file popup creation failed.");
  -    m_pMenubar->insertItem(trUtf8("&File"), pFilepopup);
  -    m_pFilenewact->addTo(pFilepopup);
  -    m_pFileopenact->addTo(pFilepopup);
  -    pFilepopup->insertSeparator();
  -    m_pFilecloseact->addTo(pFilepopup);
  -    pFilepopup->insertSeparator();
  -    m_pFilesaveact->addTo(pFilepopup);
  -    m_pFilesaveasact->addTo(pFilepopup);
  -    pFilepopup->insertSeparator();
  -    m_pFilequitact->addTo(pFilepopup);
  -
  -    // Construct and populate the edit menu with subitems
  -    QPopupMenu *pEditpopup = new QPopupMenu(this);
  -    if (pEditpopup == NULL) // Sanity check
  -        throw Genexcept("Main window edit popup creation failed.");
  -    m_pMenubar->insertItem(trUtf8("&Edit"), pEditpopup);
  -    pEditpopup->insertItem("Cu&t", this, SLOT(cut()), CTRL+Key_X);
  -    pEditpopup->insertItem("&Copy", this, SLOT(copy()), CTRL+Key_C);
  -    pEditpopup->insertItem("&Paste", this, SLOT(paste()), CTRL+Key_V);
  -    pEditpopup->insertSeparator();
  -    pEditpopup->insertItem("&Add", this, SLOT(addEntry()), CTRL+Key_A);
  -    pEditpopup->insertItem("&Delete", this, SLOT(delEntry()), Key_Delete);
  -    pEditpopup->insertItem("Select &All", this, SLOT(selAll()), CTRL+Key_A);
  -    pEditpopup->insertSeparator();
  -    pEditpopup->insertItem("Preferences...", this, SLOT(configPrefs()));
  -
  -    // Construct and populate the view menu with subitems
  -    QPopupMenu *pViewpopup = new QPopupMenu(this);
  -    if (pViewpopup == NULL) // Sanity check
  -        throw Genexcept("Main window view popup creation failed.");
  -    m_pMenubar->insertItem(trUtf8("&View"), pViewpopup);
  -    pViewpopup->insertItem(trUtf8("&Normal"), this, SLOT(normalView()));
  -    pViewpopup->insertItem(trUtf8("&Editing"), this, SLOT(editingView()));
  -    pViewpopup->insertItem(trUtf8("&Timing"), this, SLOT(timingView()));
  -
  -    // Pad spacing to force help menu to appear far right
  -    m_pMenubar->insertSeparator();
  +    m_pPrefs = new Preferences(TITRAQ_PREFNAME, TITRAQ_APPTITLE, TITRAQ_PREFVER);
  +    if (!m_pPrefs->fileState()) { // No file was found, so assume a null state
  +        m_pPrefs->setString(TITRAQ_PREFASFILE, TITRAQ_DEFASFILE);
  +        m_pPrefs->setNumber(TITRAQ_PREFSTYLE, TITRAQ_STYLECDE);
  +        m_pPrefs->setString(TITRAQ_PREFVIEW, TITRAQ_DEFVIEW);
  +        m_pPrefs->setString(TITRAQ_PREFREMOTELOG, TITRAQ_DEFREMOTELOG);
  +        m_pPrefs->setString(TITRAQ_PREFLOCALLOG, TITRAQ_DEFLOCALLOG);
  +        m_pPrefs->flush();  // Write the new conf file
  +        QTextStream cerr(stderr, IO_WriteOnly);
  +        cerr << trUtf8("Created new preferences file ") << trUtf8(TITRAQ_PREFNAME) << endl;
  +    }
   
  -    // Construct and populate the help menu with subitems
  -    QPopupMenu *pHelppopup = new QPopupMenu(this);
  -    if (pHelppopup == NULL) // Sanity check
  -        throw Genexcept("Main window help popup creation failed.");
  -    m_pMenubar->insertItem(trUtf8("&Help"), pHelppopup);
  -    pHelppopup->insertItem(trUtf8("&Contents"), this, SLOT(helpContents()), Key_F1);
  -    pHelppopup->insertSeparator();
  -    pHelppopup->insertItem(trUtf8("About &Titraq"), this, SLOT(aboutTitraq()));
  -    pHelppopup->insertItem(trUtf8("About &OSSP"), this, SLOT(aboutOSSP()));
  -    pHelppopup->insertItem(trUtf8("About &Qt"), this, SLOT(aboutQt()));
  -    pHelppopup->insertSeparator();
  -    pHelppopup->insertItem(QPixmap(s_kpcWhatsthis_xpm), trUtf8("What's &This"), this, SLOT(whatsThis()), SHIFT+Key_F1);
  +    // Use the preferred configuration values to initialize titraq
  +    switch (m_pPrefs->getNumber(TITRAQ_PREFSTYLE, TITRAQ_STYLECDE)) {
  +    case TITRAQ_STYLECDE:
  +        qApp->setStyle(new QCDEStyle);
  +        break;
  +    case TITRAQ_STYLESGI:
  +        qApp->setStyle(new QSGIStyle);
  +        break;
  +    case TITRAQ_STYLEMOTIF:
  +        qApp->setStyle(new QMotifStyle);
  +        break;
  +    case TITRAQ_STYLEMPLUS:
  +        qApp->setStyle(new QMotifPlusStyle);
  +        break;
  +    case TITRAQ_STYLEPLAT:
  +        qApp->setStyle(new QPlatinumStyle);
  +        break;
  +    case TITRAQ_STYLEMSOFT:
  +        qApp->setStyle(new QWindowsStyle);
  +        break;
  +    default:
  +        qApp->setStyle(new QCDEStyle);
  +        break;
  +    }
   }
   
   //
  @@ -188,6 +171,74 @@
   }
   
   //
  +// Construct the menu bar
  +//
  +void Titraqform::setupMenubar(void)
  +{
  +    m_pMenubar = menuBar(); // Grab menu bar owned by QMainWindow
  +    if (m_pMenubar == NULL) // Sanity check
  +        throw Genexcept("Main window menu bar nonexistant.");
  +
  +    // Make an easter egg ;-)
  +    QToolTip::add(m_pMenubar, QRect(0, 0, 2, 2), "Easter egg");
  +
  +    // Construct and populate the file menu with actions
  +    QPopupMenu *pFilepopup = new QPopupMenu(this);
  +    if (pFilepopup == NULL) // Sanity check
  +        throw Genexcept("Main window file popup creation failed.");
  +    m_pMenubar->insertItem(trUtf8("&File"), pFilepopup);
  +    m_pFilenewact->addTo(pFilepopup);
  +    m_pFileopenact->addTo(pFilepopup);
  +    pFilepopup->insertSeparator();
  +    m_pFilecloseact->addTo(pFilepopup);
  +    pFilepopup->insertSeparator();
  +    m_pFilesaveact->addTo(pFilepopup);
  +    m_pFilesaveasact->addTo(pFilepopup);
  +    pFilepopup->insertSeparator();
  +    m_pFilequitact->addTo(pFilepopup);
  +
  +    // Construct and populate the edit menu with subitems
  +    QPopupMenu *pEditpopup = new QPopupMenu(this);
  +    if (pEditpopup == NULL) // Sanity check
  +        throw Genexcept("Main window edit popup creation failed.");
  +    m_pMenubar->insertItem(trUtf8("&Edit"), pEditpopup);
  +    pEditpopup->insertItem("Cu&t", this, SLOT(cut()), CTRL+Key_X);
  +    pEditpopup->insertItem("&Copy", this, SLOT(copy()), CTRL+Key_C);
  +    pEditpopup->insertItem("&Paste", this, SLOT(paste()), CTRL+Key_V);
  +    pEditpopup->insertSeparator();
  +    pEditpopup->insertItem("&Add", this, SLOT(addEntry()), CTRL+Key_A);
  +    pEditpopup->insertItem("&Delete", this, SLOT(delEntry()), Key_Delete);
  +    pEditpopup->insertItem("Select &All", this, SLOT(selAll()), CTRL+Key_A);
  +    pEditpopup->insertSeparator();
  +    pEditpopup->insertItem("Preferences...", this, SLOT(configPrefs()));
  +
  +    // Construct and populate the view menu with subitems
  +    QPopupMenu *pViewpopup = new QPopupMenu(this);
  +    if (pViewpopup == NULL) // Sanity check
  +        throw Genexcept("Main window view popup creation failed.");
  +    m_pMenubar->insertItem(trUtf8("&View"), pViewpopup);
  +    pViewpopup->insertItem(trUtf8("&Normal"), this, SLOT(normalView()));
  +    pViewpopup->insertItem(trUtf8("&Editing"), this, SLOT(editingView()));
  +    pViewpopup->insertItem(trUtf8("&Timing"), this, SLOT(timingView()));
  +
  +    // Pad spacing to force help menu to appear far right
  +    m_pMenubar->insertSeparator();
  +
  +    // Construct and populate the help menu with subitems
  +    QPopupMenu *pHelppopup = new QPopupMenu(this);
  +    if (pHelppopup == NULL) // Sanity check
  +        throw Genexcept("Main window help popup creation failed.");
  +    m_pMenubar->insertItem(trUtf8("&Help"), pHelppopup);
  +    pHelppopup->insertItem(trUtf8("&Contents"), this, SLOT(helpContents()), Key_F1);
  +    pHelppopup->insertSeparator();
  +    pHelppopup->insertItem(trUtf8("About &Titraq"), this, SLOT(aboutTitraq()));
  +    pHelppopup->insertItem(trUtf8("About &OSSP"), this, SLOT(aboutOSSP()));
  +    pHelppopup->insertItem(trUtf8("About &Qt"), this, SLOT(aboutQt()));
  +    pHelppopup->insertSeparator();
  +    pHelppopup->insertItem(QPixmap(s_kpcWhatsthis_xpm), trUtf8("What's &This"), this, SLOT(whatsThis()), SHIFT+Key_F1);
  +}
  +
  +//
   // Construct the file tool bar
   //
   void Titraqform::setupFiletools(void)
  @@ -426,19 +477,4 @@
       QToolTip::add(m_pQuitbutton, trUtf8("Quit titraq"));
       connect(m_pQuitbutton, SIGNAL(clicked()), qApp, SLOT(quit()));
       m_pControllayout->addWidget(m_pQuitbutton);
  -}
  -
  -//
  -// Construct the preferences
  -//
  -void Titraqform::setupPrefs(void)
  -{
  -    m_pPrefs = new Preferences(TITRAQ_PREFNAME, TITRAQ_APPTITLE, TITRAQ_PREFVER);
  -    if (m_pPrefs->fileState()) { // No file was found, so create a new one
  -        m_pPrefs->setString(TITRAQ_PREFASFILE, TITRAQ_DEFASFILE);
  -        m_pPrefs->setString(TITRAQ_PREFSTYLE, TITRAQ_DEFSTYLE);
  -        m_pPrefs->setString(TITRAQ_PREFVIEW, TITRAQ_DEFVIEW);
  -        m_pPrefs->setString(TITRAQ_PREFREMOTELOG, TITRAQ_DEFREMOTELOG);
  -        m_pPrefs->setString(TITRAQ_PREFLOCALLOG, TITRAQ_DEFLOCALLOG);
  -    }
   }
  Index: ossp-pkg/titraq/titconst.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 titconst.h
  --- ossp-pkg/titraq/titconst.h	24 Nov 2002 17:55:55 -0000	1.1
  +++ ossp-pkg/titraq/titconst.h	24 Nov 2002 20:39:32 -0000	1.2
  @@ -1,10 +1,10 @@
  +// Preferences string constants
   #define TITRAQ_PREFNAME         "titraq.conf"
   #define TITRAQ_APPTITLE         "Titraq"
   #define TITRAQ_PREFVER          "0.5"
   #define TITRAQ_PREFASFILE       "asfile"
   #define TITRAQ_DEFASFILE        "/e/dev/as"
   #define TITRAQ_PREFSTYLE        "uistyle"
  -#define TITRAQ_DEFSTYLE         "CDE"
   #define TITRAQ_PREFVIEW         "view"
   #define TITRAQ_DEFVIEW          "normal"
   #define TITRAQ_PREFREMOTELOG    "logremote"
  Index: ossp-pkg/titraq/titraq.cpp
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 titraq.cpp
  --- ossp-pkg/titraq/titraq.cpp	24 Nov 2002 17:56:54 -0000	1.18
  +++ ossp-pkg/titraq/titraq.cpp	24 Nov 2002 20:39:32 -0000	1.19
  @@ -38,6 +38,7 @@
   
       // Abstractly build main widgets
       try {
  +        setupPrefs();
           setupActions();
           setupMenubar();
           setupFiletools();
  @@ -46,7 +47,6 @@
           setupTable();
           setupEditlay();
           setupButtons();
  -        setupPrefs();
       }
       catch (Genexcept& Genex) {
           Genex.reportErr();
  @@ -63,4 +63,6 @@
   Titraqform::~Titraqform(void)
   {
       // Qt deletes child widgets for us
  +    m_pPrefs->flush();
  +    delete m_pPrefs;
   }
  Index: ossp-pkg/titraq/titraq.h
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 titraq.h
  --- ossp-pkg/titraq/titraq.h	24 Nov 2002 18:02:43 -0000	1.20
  +++ ossp-pkg/titraq/titraq.h	24 Nov 2002 20:39:32 -0000	1.21
  @@ -27,6 +27,17 @@
   const int g_knBlocks = 32;
   const int g_knCols = 6;
   
  +// Styles enumeration
  +typedef enum
  +{
  +    TITRAQ_STYLECDE,
  +    TITRAQ_STYLESGI,
  +    TITRAQ_STYLEMOTIF,
  +    TITRAQ_STYLEMPLUS,
  +    TITRAQ_STYLEPLAT,
  +    TITRAQ_STYLEMSOFT
  +} styles_t;
  +
   // Main application form window
   class Titraqform : public QMainWindow
   {
  @@ -115,6 +126,7 @@
       bool isDirty(void);                 // Check for changed state danger
   
       // Constructor helpers
  +    void setupPrefs(void);              // Preferences
       void setupActions(void);            // Actions
       void setupMenubar(void);            // Menu bar
       void setupFiletools(void);          // Tool bar
  @@ -124,7 +136,6 @@
       void setupEditlay(void);            // Editing lay
       void setupButtons(void);            // Push button widgets
       void setupPieces(void);             // Assemble widget pieces
  -    void setupPrefs(void);              // Preferences
   
       // Data processing
       void loadData(QFile &);             // Load accounting data from file

From ossp-cvs-owner@ossp.org  Mon Nov 25 00:11:57 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5C88476A69; Mon, 25 Nov 2002 00:11:57 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq TODO tidatops.cpp titraq.cpp titraq.h tits...
Message-Id: <20021124231157.5C88476A69@mail.ossp.org>
Date: Mon, 25 Nov 2002 00:11:57 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   25-Nov-2002 00:11:57
  Branch: HEAD                             Handle: 2002112423115600

  Modified files:
    ossp-pkg/titraq         TODO tidatops.cpp titraq.cpp titraq.h titslot.cpp

  Log:
    Implemented table data saving to a local file, and began new accessor
    method group with setDirty().

  Summary:
    Revision    Changes     Path
    1.14        +1  -0      ossp-pkg/titraq/TODO
    1.6         +82 -9      ossp-pkg/titraq/tidatops.cpp
    1.20        +1  -1      ossp-pkg/titraq/titraq.cpp
    1.22        +7  -2      ossp-pkg/titraq/titraq.h
    1.11        +12 -23     ossp-pkg/titraq/titslot.cpp
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/TODO
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 TODO
  --- ossp-pkg/titraq/TODO	24 Nov 2002 20:39:31 -0000	1.13
  +++ ossp-pkg/titraq/TODO	24 Nov 2002 23:11:56 -0000	1.14
  @@ -25,6 +25,7 @@
   Generally maintain Preference class
     Implement missing interface methods
   Review destruction of all members, compare with setupPrefs
  +Memory optimization needed in tidataops
   
   Dreams
   ------
  Index: ossp-pkg/titraq/tidatops.cpp
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 tidatops.cpp
  --- ossp-pkg/titraq/tidatops.cpp	22 Nov 2002 21:51:58 -0000	1.5
  +++ ossp-pkg/titraq/tidatops.cpp	24 Nov 2002 23:11:56 -0000	1.6
  @@ -4,6 +4,7 @@
   #include "titrex.h"     // Exception classes
   #include "titabitem.h"  // For class RtTableItem
   
  +
   //
   // Convenience method to load accounting data from a file
   //
  @@ -16,7 +17,7 @@
       }
       else {
           if (!Fileobj.open(IO_ReadOnly)) // Try to open file
  -            throw Genexcept("Could not open accounting file.");
  +            throw Genexcept("Could not read open accounting file.");
           QTextStream Asentry(&Fileobj);  // Convert data to stream
           this->loadData(Asentry);        // Pass off to do the real work
           Fileobj.close();                // Finish fileop by closing
  @@ -29,7 +30,7 @@
   void Titraqform::loadData(QTextStream &Tstream)
   {
       bool bValid = true; // Used to warn on invalid accounting data
  -    int i = 0;          // Iterator used in loop and also as a count
  +    int nIter = 0;      // Iterator used in loop and also as a count
   
       // Optimize viewing by repainting cells only once after processing
       m_pMaintable->setUpdatesEnabled(false);
  @@ -44,41 +45,113 @@
               Temp = Tstream.readLine();
           QTextStream Asline(&Temp, IO_ReadOnly);     // Convert a single line now
   
  -        if (i % g_knBlocks == 0) // Add blocks of rows to optimize loading speed
  +        if (nIter % g_knBlocks == 0) // Add blocks of rows to optimize loading
               m_pMaintable->setNumRows(m_pMaintable->numRows() + g_knBlocks);
   
           Asline >> Date; // Copy the date field
           if (Date != NULL)
  -            m_pMaintable->setText(i, 0, Date);
  +            m_pMaintable->setText(nIter, 0, Date);
           else
               bValid = false;
   
           Asline >> Account;  // Copy to the bit bucket
           Asline >> Account;  // Copy the account field
           if (Account != NULL) {
  -            m_pMaintable->setItem(i, 4, new RtTableItem(m_pMaintable, QTableItem::WhenCurrent, Account));
  +            m_pMaintable->setItem(nIter, 4, new RtTableItem(m_pMaintable, QTableItem::WhenCurrent, Account));
           }
           else
               bValid = false;
   
           Asline >> Amount;   // Copy the amount field
           if (Amount != NULL)
  -            m_pMaintable->setText(i, 3, Amount);
  +            m_pMaintable->setText(nIter, 3, Amount);
           else
               bValid = false;
   
           Remark = Asline.read(); // Copy the remark field
           if (Remark != NULL)
  -            m_pMaintable->setText(i, 5, Remark);
  +            m_pMaintable->setText(nIter, 5, Remark);
   
  -        i++; // The big increment
  +        nIter++; // The big increment
       }
   
       m_pMaintable->setUpdatesEnabled(true);  // Repaint all
  -    m_pMaintable->setNumRows(i - 1);        // Trim unneeded rows
  +    m_pMaintable->setNumRows(nIter - 1);    // Trim unneeded rows
       m_pRemark->setText(trUtf8("Loaded text goes here"));
       m_pRemark->setEdited(false);            // Reset widget
   
       if (!bValid)
           throw Genexcept("Warning, invalid accounting data.");
  +}
  +
  +//
  +// Convenience method to save accounting data to a file
  +//
  +void Titraqform::saveData(QFile &Fileobj)
  +{
  +    if (Fileobj.isOpen()) {             // Check state of file
  +        Fileobj.flush();                // Begin processing file cleanly
  +        QTextStream Asentry(&Fileobj);  // Convert data to stream
  +        this->saveData(Asentry);        // Pass off to do the real work
  +    }
  +    else {
  +        if (!Fileobj.open(IO_WriteOnly)) // Try to open file
  +            throw Genexcept("Could not write open accounting file.");
  +        QTextStream Asentry(&Fileobj);  // Convert data to stream
  +        this->saveData(Asentry);        // Pass off to do the real work
  +        Fileobj.close();                // Finish fileop by closing
  +    }
  +}
  +
  +//
  +// Save accounting data to a stream
  +//
  +void Titraqform::saveData(QTextStream &Tstream)
  +{
  +    const int nRows = m_pMaintable->numRows();      // Max rows used in loop
  +    QString Tempfield;                              // Current field string
  +    bool bValid = true;                             // Warn on invalid data
  +
  +    // Linewise save from the main table date, time, account, and others
  +    for (int nIter = 0; nIter <= nRows; nIter++) {
  +        Tempfield = m_pMaintable->text(nIter, 0);   // Load date field text
  +        if (Tempfield != NULL)
  +            Tstream << Tempfield << trUtf8(" ");    // Save date field text
  +        else
  +            bValid = false;
  +
  +        Tstream << trUtf8("user ");                 // Save user field text
  +
  +/*        Tempfield = m_pMaintable->text(nIter, 1);   // Load start field text
  +        if (Tempfield != NULL)
  +            Tstream << Tempfield << trUtf8(" ");    // Save start field text
  +        else
  +            bValid = false;
  +
  +        Tempfield = m_pMaintable->text(nIter, 2);   // Load end field text
  +        if (Tempfield != NULL)
  +            Tstream << Tempfield << trUtf8(" ");    // Save end field text
  +        else
  +            bValid = false;*/
  +
  +        Tempfield = m_pMaintable->text(nIter, 4);   // Load amount field text
  +        if (Tempfield != NULL)
  +            Tstream << Tempfield << trUtf8(" ");    // Save amount field text
  +        else
  +            bValid = false;
  +
  +        Tempfield = m_pMaintable->text(nIter, 3);   // Load acct field text
  +        if (Tempfield != NULL)
  +            Tstream << Tempfield << trUtf8(" ");    // Save acct field text
  +        else
  +            bValid = false;
  +
  +        Tempfield = m_pMaintable->text(nIter, 5);   // Load remark field text
  +        if (Tempfield != NULL)
  +            Tstream << Tempfield << trUtf8(" ");    // Save remark field text
  +        else
  +            bValid = false;
  +
  +        Tstream << endl;                            // Append a newline
  +    }
   }
  Index: ossp-pkg/titraq/titraq.cpp
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 titraq.cpp
  --- ossp-pkg/titraq/titraq.cpp	24 Nov 2002 20:39:32 -0000	1.19
  +++ ossp-pkg/titraq/titraq.cpp	24 Nov 2002 23:11:56 -0000	1.20
  @@ -23,7 +23,7 @@
       QMainWindow(pParent, kszName, Flags)
   {
       // Early member initialization
  -    m_bDirt = false;
  +    this->setDirty(false);
       m_szFilename = new QString();
   
       // Initial widget manipulations
  Index: ossp-pkg/titraq/titraq.h
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 titraq.h
  --- ossp-pkg/titraq/titraq.h	24 Nov 2002 20:39:32 -0000	1.21
  +++ ossp-pkg/titraq/titraq.h	24 Nov 2002 23:11:56 -0000	1.22
  @@ -120,10 +120,13 @@
       QString     *m_szFilename;
   
       // Standard members
  -    bool        m_bDirt;                // To track dirty and clean states
  +    bool        m_bDirt;                    // To track dirty and clean states
   
       // Standard methods
  -    bool isDirty(void);                 // Check for changed state danger
  +    bool isDirty(void) {return m_bDirt;};    // Check for changed state danger
  +
  +    // Accessor methods
  +    void setDirty(bool bDirty = true) {m_bDirt = bDirty;};  // Clean or dirty
   
       // Constructor helpers
       void setupPrefs(void);              // Preferences
  @@ -140,6 +143,8 @@
       // Data processing
       void loadData(QFile &);             // Load accounting data from file
       void loadData(QTextStream &);       // Load accounting data from stream
  +    void saveData(QFile &);             // Save accounting data to file
  +    void saveData(QTextStream &);       // Save accounting data to stream
   };
   
   #endif // TITRAQMWIN_H
  Index: ossp-pkg/titraq/titslot.cpp
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 titslot.cpp
  --- ossp-pkg/titraq/titslot.cpp	22 Nov 2002 21:51:58 -0000	1.10
  +++ ossp-pkg/titraq/titslot.cpp	24 Nov 2002 23:11:56 -0000	1.11
  @@ -70,8 +70,10 @@
           catch (Genexcept& Genex) {
               Genex.reportErr();
           }
  -        setCaption(Filestring);
  +        // Reset and give output to main window
  +        this->setCaption(Filestring);
           m_pStatbar->message(trUtf8("Loaded document ") + Filestring, 4000);
  +        this->setDirty(false);          // Set the clean state
       }
       else
           m_pStatbar->message(trUtf8("Loading aborted"), 4000);
  @@ -90,21 +92,16 @@
   
       // Try to open a file for writing to
       QFile Filetemp(*m_szFilename);
  -    if (!Filetemp.open(IO_WriteOnly)) {
  -        m_pStatbar->message(QString(trUtf8("Could not write to %1")).arg(*m_szFilename), 4000);
  -        return;
  +    try {
  +        saveData(Filetemp); // Pass to helper method
       }
  -
  -    // Serialize file contents and write to text line
  -    QTextStream Filestream(&Filetemp);
  -    Filestream << m_pRemark->text();
  -    Filetemp.close();
  -
  -    // Reset the text line, and give output to main window
  -    m_pRemark->setEdited(FALSE);
  -    setCaption(*m_szFilename);
  -    m_pStatbar->message(QString(trUtf8("File %1 saved")).arg(*m_szFilename), 4000);
  -    m_bDirt = false;    // Set the clean state to allow a close operation
  +    catch (Genexcept& Genex) {
  +        Genex.reportErr();
  +    }
  +    // Reset and give output to main window
  +    this->setCaption(*m_szFilename);
  +    m_pStatbar->message(trUtf8("File %1 saved").arg(*m_szFilename), 4000);
  +    this->setDirty(false);  // Set the clean state to allow close
   }
   
   //
  @@ -151,14 +148,6 @@
           pClosit->accept();
           break;
       }
  -}
  -
  -//
  -// Check to see if state has changed since last save
  -//
  -bool Titraqform::isDirty(void)
  -{
  -    return m_bDirt;
   }
   
   //

From ossp-cvs-owner@ossp.org  Mon Nov 25 12:23:36 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C704476A99; Mon, 25 Nov 2002 12:23:35 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq TODO titabitem.h titassist.cpp
Message-Id: <20021125112335.C704476A99@mail.ossp.org>
Date: Mon, 25 Nov 2002 12:23:35 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   25-Nov-2002 12:23:35
  Branch: HEAD                             Handle: 2002112511233500

  Modified files:
    ossp-pkg/titraq         TODO titabitem.h titassist.cpp

  Log:
    Fix alignment and editing style problem.

  Summary:
    Revision    Changes     Path
    1.15        +1  -0      ossp-pkg/titraq/TODO
    1.2         +1  -1      ossp-pkg/titraq/titabitem.h
    1.14        +1  -0      ossp-pkg/titraq/titassist.cpp
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/TODO
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 TODO
  --- ossp-pkg/titraq/TODO	24 Nov 2002 23:11:56 -0000	1.14
  +++ ossp-pkg/titraq/TODO	25 Nov 2002 11:23:35 -0000	1.15
  @@ -26,6 +26,7 @@
     Implement missing interface methods
   Review destruction of all members, compare with setupPrefs
   Memory optimization needed in tidataops
  +QTable::valueChanged(int row, int col) should be responsible for dirty flag
   
   Dreams
   ------
  Index: ossp-pkg/titraq/titabitem.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 titabitem.h
  --- ossp-pkg/titraq/titabitem.h	22 Nov 2002 19:49:19 -0000	1.1
  +++ ossp-pkg/titraq/titabitem.h	25 Nov 2002 11:23:35 -0000	1.2
  @@ -5,7 +5,7 @@
   class RtTableItem : public QTableItem
   {
   public:
  -    RtTableItem(QTable *pTable, EditType eType, const QString &Text) : QTableItem(pTable, eType, Text) {m_nOwnalign = AlignRight;};
  +    RtTableItem(QTable *pTable, EditType eType, const QString &Text) : QTableItem(pTable, eType, Text) {m_nOwnalign = AlignRight | Qt::AlignVCenter;};
       void setAlignment(int nAlign) {m_nOwnalign = nAlign;};
       int alignment() const {return m_nOwnalign;};
   
  Index: ossp-pkg/titraq/titassist.cpp
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 titassist.cpp
  --- ossp-pkg/titraq/titassist.cpp	24 Nov 2002 20:39:31 -0000	1.13
  +++ ossp-pkg/titraq/titassist.cpp	25 Nov 2002 11:23:35 -0000	1.14
  @@ -308,6 +308,7 @@
       m_pMaintable->setReadOnly(true);                    // Table is read only
       m_pMaintable->setColumnMovingEnabled(false);        // Ctrl-drag disabled
       m_pMaintable->setSelectionMode(QTable::MultiRow);   // Multi row selection
  +    m_pMaintable->setFocusStyle(QTable::FollowStyle);   // How cells are drawn
       m_pMaintable->setLeftMargin(0);             // Get rid of the vertical header
       m_pMaintable->verticalHeader()->hide();     // by hiding it with a margin of 0
       m_pMaintable->horizontalHeader()->setResizeEnabled(true);

From ossp-cvs-owner@ossp.org  Mon Nov 25 12:40:08 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1A81F76A69; Mon, 25 Nov 2002 12:40:08 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq titassist.cpp titraq.h titslot.cpp
Message-Id: <20021125114008.1A81F76A69@mail.ossp.org>
Date: Mon, 25 Nov 2002 12:40:08 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   25-Nov-2002 12:40:08
  Branch: HEAD                             Handle: 2002112511400700

  Modified files:
    ossp-pkg/titraq         titassist.cpp titraq.h titslot.cpp

  Log:
    Connection of edit signals to prototype.

  Summary:
    Revision    Changes     Path
    1.15        +7  -0      ossp-pkg/titraq/titassist.cpp
    1.23        +1  -0      ossp-pkg/titraq/titraq.h
    1.12        +9  -0      ossp-pkg/titraq/titslot.cpp
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/titassist.cpp
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 titassist.cpp
  --- ossp-pkg/titraq/titassist.cpp	25 Nov 2002 11:23:35 -0000	1.14
  +++ ossp-pkg/titraq/titassist.cpp	25 Nov 2002 11:40:07 -0000	1.15
  @@ -326,6 +326,13 @@
       m_pTablehead->setLabel(5, QObject::trUtf8("Remark"));
   
       m_pPackagelayout->addWidget(m_pMaintable);  // Finally add the damn table
  +
  +    connect(m_pMaintable, SIGNAL(clicked(int, int, int, const QPoint&)), this, SLOT(updEdit(int, int)));
  +//    connect(table, SIGNAL(currentChanged(int, int)), this, SLOT(currentChanged(int, int)));
  +//    connect(table, SIGNAL(valueChanged(int, int)), this, SLOT(valueChanged(int, int)));
  +//    connect(AddPushButton, SIGNAL(clicked()), this, SLOT(AddRow()));
  +//    connect(DeletePushButton, SIGNAL(clicked()), this, SLOT(DelRow()));
  +//    connect(WritePushButton, SIGNAL(clicked()), this, SLOT(accept()));
   }
   
   //
  Index: ossp-pkg/titraq/titraq.h
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 titraq.h
  --- ossp-pkg/titraq/titraq.h	24 Nov 2002 23:11:56 -0000	1.22
  +++ ossp-pkg/titraq/titraq.h	25 Nov 2002 11:40:07 -0000	1.23
  @@ -93,6 +93,7 @@
       void copy(void);                    // Edit menu copy
       void paste(void);                   // Edit menu paste
       void selAll(void);                  // Edit menu select all
  +    void updEdit(int, int);             // Update edit controls
       void configPrefs(void);             // Edit menu configure preferences
       void normalView(void);              // View menu normal
       void editingView(void);             // View menu editing
  Index: ossp-pkg/titraq/titslot.cpp
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 titslot.cpp
  --- ossp-pkg/titraq/titslot.cpp	24 Nov 2002 23:11:56 -0000	1.11
  +++ ossp-pkg/titraq/titslot.cpp	25 Nov 2002 11:40:07 -0000	1.12
  @@ -187,6 +187,15 @@
   }
   
   //
  +// Update the edit controls contents
  +//
  +void Titraqform::updEdit(int, int)
  +{
  +    Prototype Unimp;
  +    Unimp.doMbox();
  +}
  +
  +//
   // Edit menu configure preferences
   //
   void Titraqform::configPrefs(void)

From ossp-cvs-owner@ossp.org  Mon Nov 25 16:45:10 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CD14676A5A; Mon, 25 Nov 2002 16:45:08 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq Makefile.in TODO titabitem.h titamount.h t...
Message-Id: <20021125154508.CD14676A5A@mail.ossp.org>
Date: Mon, 25 Nov 2002 16:45:08 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   25-Nov-2002 16:45:08
  Branch: HEAD                             Handle: 2002112515450402

  Added files:
    ossp-pkg/titraq         titamount.h
  Modified files:
    ossp-pkg/titraq         Makefile.in TODO titabitem.h titassist.cpp
                            titconst.h titraq.h titslot.cpp

  Log:
    Add AmountBox class to introduce missing functionality from QSpinBox,
    and implement most edit control updates.

  Summary:
    Revision    Changes     Path
    1.17        +2  -2      ossp-pkg/titraq/Makefile.in
    1.16        +1  -0      ossp-pkg/titraq/TODO
    1.3         +5  -1      ossp-pkg/titraq/titabitem.h
    1.1         +15 -0      ossp-pkg/titraq/titamount.h
    1.16        +27 -6      ossp-pkg/titraq/titassist.cpp
    1.3         +13 -0      ossp-pkg/titraq/titconst.h
    1.24        +4  -3      ossp-pkg/titraq/titraq.h
    1.13        +17 -3      ossp-pkg/titraq/titslot.cpp
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/Makefile.in
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 Makefile.in
  --- ossp-pkg/titraq/Makefile.in	24 Nov 2002 18:02:43 -0000	1.16
  +++ ossp-pkg/titraq/Makefile.in	25 Nov 2002 15:45:04 -0000	1.17
  @@ -65,9 +65,9 @@
   TARGET_PROGS    = titraq
   TARGET_MANS     = titraq.1 titraq.conf.5
   
  -SRCS            = main.cpp titraq.cpp titassist.cpp titslot.cpp tidatops.cpp titrex.cpp generic.cpp titprefs.cpp titraq_version.c
  +SRCS            = main.cpp titraq.cpp titassist.cpp titslot.cpp tidatops.cpp titrex.cpp generic.cpp titamount.cpp titprefs.cpp titraq_version.c
   
  -OBJS            = main.o titraq.o titassist.o titslot.o tidatops.o titrex.o generic.o titprefs.o titraq_version.o
  +OBJS            = main.o titraq.o titassist.o titslot.o tidatops.o titrex.o generic.o titamount.o titprefs.o titraq_version.o
   
   GRAFX           = gfx/ossplogo.xpm
   
  Index: ossp-pkg/titraq/TODO
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 TODO
  --- ossp-pkg/titraq/TODO	25 Nov 2002 11:23:35 -0000	1.15
  +++ ossp-pkg/titraq/TODO	25 Nov 2002 15:45:05 -0000	1.16
  @@ -27,6 +27,7 @@
   Review destruction of all members, compare with setupPrefs
   Memory optimization needed in tidataops
   QTable::valueChanged(int row, int col) should be responsible for dirty flag
  +Remove magic numbers from cpp files to titconst like TITRAQ_INDEXREMARK
   
   Dreams
   ------
  Index: ossp-pkg/titraq/titabitem.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 titabitem.h
  --- ossp-pkg/titraq/titabitem.h	25 Nov 2002 11:23:35 -0000	1.2
  +++ ossp-pkg/titraq/titabitem.h	25 Nov 2002 15:45:05 -0000	1.3
  @@ -1,5 +1,7 @@
  +#ifndef RTTABLEITEM_H
  +#define RTTABLEITEM_H
  +
   #include <qtable.h>
  -#include <qpainter.h>
   
   
   class RtTableItem : public QTableItem
  @@ -12,3 +14,5 @@
   private:
       int m_nOwnalign;
   };
  +
  +#endif // RTTABLEITEM_H
  Index: ossp-pkg/titraq/titamount.h
  ============================================================
  $ cvs update -p -r1.1 titamount.h
  #ifndef AMOUNTBOX_H
  #define AMOUNTBOX_H
  
  #include <qspinbox.h>
  
  
  class AmountBox : public QSpinBox
  {
  public:
      AmountBox(int nMinval, int nMaxval, int nStep = 1, QWidget *pParent = 0, const char *szName = 0) : QSpinBox(nMinval, nMaxval, nStep, pParent, szName) {};
      void setText(const QString &);  // Sets a text formatted representation
      QString text(void) const;       // Return a text formatted representation
  };
  
  #endif // AMOUNTBOX_H
  Index: ossp-pkg/titraq/titassist.cpp
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 titassist.cpp
  --- ossp-pkg/titraq/titassist.cpp	25 Nov 2002 11:40:07 -0000	1.15
  +++ ossp-pkg/titraq/titassist.cpp	25 Nov 2002 15:45:06 -0000	1.16
  @@ -15,8 +15,9 @@
   #include <qcursor.h>
   
   // User interface
  -#include "titraq.h"
  +#include "titraq.h"             // Main classes
   #include "titrex.h"             // Exception classes
  +#include "titamount.h"          // AmountBox class
   
   // Icon pixel maps
   #include "gfx/filenew.xpm"      // static const char *s_kpcFilenew_xpm[]
  @@ -345,8 +346,13 @@
       m_pDateedit = new QDateEdit(Sylvestre, m_pCenframe, "Date");
       if (m_pDateedit == NULL)                                        // Sanity check
           throw Genexcept("Main window date edit creation failed.");  // Spew errors
  -    m_pDatelayout->addWidget(m_pDateedit);                       // Finally add the date editor
   
  +    // Configure attributes
  +    m_pDateedit->setOrder(QDateEdit::YMD);
  +    m_pDateedit->setAutoAdvance(true);
  +    m_pDateedit->setSeparator(trUtf8("."));
  +
  +    m_pDatelayout->addWidget(m_pDateedit);                       // Finally add the date editor
       QToolTip::add(m_pDateedit, trUtf8("Task Date"));
   
       // Whatsthis info for the date editor
  @@ -359,8 +365,11 @@
       m_pStarttime = new QTimeEdit(QTime::currentTime(), m_pCenframe, "StartTime");
       if (m_pStarttime == NULL)                                       // Sanity check
           throw Genexcept("Main window start time creation failed."); // Spew errors
  -    m_pDatelayout->addWidget(m_pStarttime);                      // Finally add the start editor
   
  +    // Configure attributes
  +    m_pStarttime->setAutoAdvance(true);
  +
  +    m_pDatelayout->addWidget(m_pStarttime);                      // Finally add the start editor
       QToolTip::add(m_pStarttime, trUtf8("Task Starting Time"));
   
       // Whatsthis info for the time editor
  @@ -373,8 +382,8 @@
       m_pEndtime = new QTimeEdit(QTime::currentTime(), m_pCenframe, "EndTime");
       if (m_pEndtime == NULL)                                        // Sanity check
           throw Genexcept("Main window end time creation failed.");  // Spew errors
  -    m_pDatelayout->addWidget(m_pEndtime);                       // Finally add the end editor
   
  +    m_pDatelayout->addWidget(m_pEndtime);                       // Finally add the end editor
       QToolTip::add(m_pEndtime, trUtf8("Task Ending Time"));
   
       // Whatsthis info for the time editor
  @@ -384,11 +393,16 @@
       QWhatsThis::add(m_pEndtime, kszEndtime);
   
       // Make the amount selector
  -    m_pAmount = new QSpinBox(m_pCenframe, "Amount");
  +    m_pAmount = new AmountBox(TITRAQ_MINAMOUNT, TITRAQ_MAXAMOUNT, TITRAQ_STEPAMOUNT, m_pCenframe, "Amount");
       if (m_pAmount == NULL)                                      // Sanity check
           throw Genexcept("Main window amount creation failed."); // Spew errors
  -    m_pDatelayout->addWidget(m_pAmount);                     // Finally add the amount editor
   
  +    // Configure attributes
  +    m_pAmount->setButtonSymbols(QSpinBox::PlusMinus);
  +    m_pAmount->setSuffix(trUtf8(" Minutes"));
  +    m_pAmount->setSpecialValueText(trUtf8("In progress"));
  +
  +    m_pDatelayout->addWidget(m_pAmount);    // Finally add the amount editor
       QToolTip::add(m_pAmount, trUtf8("Task Amount"));
   
       // Whatsthis info for the amount editor
  @@ -437,6 +451,13 @@
                                          " this line control and typing the remarks you"
                                          " have about the task.");
       QWhatsThis::add(m_pRemark, kszRemarktext);
  +
  +//    // Signals
  +//    m_pDateedit->valueChanged(const QDate &date);
  +//    m_pStarttime->valueChanged(const QTime &time);
  +//    m_pEndtime->valueChanged(const QTime &time);
  +//    m_pAmount->valueChanged(int value);
  +//    m_pTasks->textChanged(const QString &string);
   }
   
   //
  Index: ossp-pkg/titraq/titconst.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 titconst.h
  --- ossp-pkg/titraq/titconst.h	24 Nov 2002 20:39:32 -0000	1.2
  +++ ossp-pkg/titraq/titconst.h	25 Nov 2002 15:45:06 -0000	1.3
  @@ -11,3 +11,16 @@
   #define TITRAQ_DEFREMOTELOG     "no"
   #define TITRAQ_PREFLOCALLOG     "loglocal"
   #define TITRAQ_DEFLOCALLOG      "no"
  +
  +// Indexes of table columns
  +#define TITRAQ_INDEXDATE        0
  +#define TITRAQ_INDEXSTART       1
  +#define TITRAQ_INDEXFINISH      2
  +#define TITRAQ_INDEXAMOUNT      3
  +#define TITRAQ_INDEXTASK        4
  +#define TITRAQ_INDEXREMARK      5
  +
  +// Values
  +#define TITRAQ_MAXAMOUNT        960         // Maximum valid amount
  +#define TITRAQ_MINAMOUNT        -1          // Minimum valid amount
  +#define TITRAQ_STEPAMOUNT       15          // Line step interval
  Index: ossp-pkg/titraq/titraq.h
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 titraq.h
  --- ossp-pkg/titraq/titraq.h	25 Nov 2002 11:40:07 -0000	1.23
  +++ ossp-pkg/titraq/titraq.h	25 Nov 2002 15:45:06 -0000	1.24
  @@ -16,8 +16,9 @@
   #include <qlayout.h>
   #include <qfile.h>
   
  -#include "titprefs.h"
  -#include "titconst.h"
  +#include "titconst.h"       // For general constants
  +#include "titprefs.h"       // For class Preferences
  +#include "titamount.h"      // For class AmountBox
   
   // Intentional no operation
   #define TITRAQ_NOP ((void)0)
  @@ -66,7 +67,7 @@
       QDateEdit   *m_pDateedit;
       QTimeEdit   *m_pStarttime;
       QTimeEdit   *m_pEndtime;
  -    QSpinBox    *m_pAmount;
  +    AmountBox   *m_pAmount;
       QComboBox   *m_pTasks;
       QLineEdit   *m_pRemark;
   
  Index: ossp-pkg/titraq/titslot.cpp
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 titslot.cpp
  --- ossp-pkg/titraq/titslot.cpp	25 Nov 2002 11:40:07 -0000	1.12
  +++ ossp-pkg/titraq/titslot.cpp	25 Nov 2002 15:45:06 -0000	1.13
  @@ -1,5 +1,7 @@
   // Qt headers
   #include <qfiledialog.h>
  +#include <qcombobox.h>
  +#include <qregexp.h>
   
   // User interface
   #include "titraq.h"             // Main classes
  @@ -189,10 +191,22 @@
   //
   // Update the edit controls contents
   //
  -void Titraqform::updEdit(int, int)
  +void Titraqform::updEdit(int nRow, int nCol)
   {
  -    Prototype Unimp;
  -    Unimp.doMbox();
  +    QString Tasktext;               // For searching through prefixed task text
  +    QRegExp Shorten("/(\\w+)$");    // For stripping prefix off the current task
  +
  +    m_pDateedit->setDate(QDate::fromString(m_pMaintable->text(nRow, TITRAQ_INDEXDATE), Qt::ISODate));
  +    m_pStarttime->setTime(QTime::fromString(m_pMaintable->text(nRow, TITRAQ_INDEXAMOUNT), Qt::ISODate));
  +    m_pEndtime->setTime(QTime::fromString(m_pMaintable->text(nRow, TITRAQ_INDEXAMOUNT), Qt::ISODate));
  +    m_pAmount->setText(m_pMaintable->text(nRow, TITRAQ_INDEXAMOUNT));
  +
  +    // Process the task combo box to compress text length
  +    Tasktext = m_pMaintable->text(nRow, TITRAQ_INDEXTASK);
  +    Tasktext.remove(0, Shorten.search(Tasktext) + 1);       // Add one to strip leading slash
  +
  +    m_pTasks->setCurrentText(Tasktext);
  +    m_pRemark->setText(m_pMaintable->text(nRow, TITRAQ_INDEXREMARK));
   }
   
   //

From ossp-cvs-owner@ossp.org  Mon Nov 25 16:45:57 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7484076A5A; Mon, 25 Nov 2002 16:45:57 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq titamount.cpp
Message-Id: <20021125154557.7484076A5A@mail.ossp.org>
Date: Mon, 25 Nov 2002 16:45:57 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   25-Nov-2002 16:45:57
  Branch: HEAD                             Handle: 2002112515455600

  Added files:
    ossp-pkg/titraq         titamount.cpp

  Log:
    Add AmountBox class to introduce missing functionality from QSpinBox,
    and implement most edit control updates.

  Summary:
    Revision    Changes     Path
    1.1         +34 -0      ossp-pkg/titraq/titamount.cpp
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/titamount.cpp
  ============================================================
  $ cvs update -p -r1.1 titamount.cpp
  #include <qregexp.h>
  
  #include "titamount.h"
  
  #define HOURAMOUNT 60
  
  
  // Sets a text formatted representation
  void AmountBox::setText(const QString &Strval)
  {
      int nTotal = 0;                                 // The total amount of minutes
      QRegExp Strexpr("(\\d+):(\\d+)");               // Pattern in amount text
      QString Stramount = QRegExp::escape(Strval);    // Incoming string escaped
      Strexpr.search(Stramount);
  
      nTotal = Strexpr.cap(Strexpr.numCaptures() - 1).toInt() * HOURAMOUNT;   // Calculate hours
      nTotal += Strexpr.cap(Strexpr.numCaptures()).toInt();                   // Calculate minutes
  
      this->setValue(nTotal);
  }
  
  // Return a text formatted representation
  QString AmountBox::text(void) const
  {
      QString Strout;
      int nHours = 0;
      int nMins = this->value();
  
      nHours = nMins / HOURAMOUNT;    // Calculate total hours
      nMins  = nMins % HOURAMOUNT;    // Calculate total minutes
      Strout = trUtf8("%1:%2").arg(nHours).arg(nMins); // Format string
  
      return Strout;
  }

From ossp-cvs-owner@ossp.org  Mon Nov 25 17:23:35 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6CF3E76A5A; Mon, 25 Nov 2002 17:23:35 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq titassist.cpp
Message-Id: <20021125162335.6CF3E76A5A@mail.ossp.org>
Date: Mon, 25 Nov 2002 17:23:35 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   25-Nov-2002 17:23:35
  Branch: HEAD                             Handle: 2002112516233500

  Modified files:
    ossp-pkg/titraq         titassist.cpp

  Log:
    Correct table data selection handling.

  Summary:
    Revision    Changes     Path
    1.17        +7  -3      ossp-pkg/titraq/titassist.cpp
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/titassist.cpp
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 titassist.cpp
  --- ossp-pkg/titraq/titassist.cpp	25 Nov 2002 15:45:06 -0000	1.16
  +++ ossp-pkg/titraq/titassist.cpp	25 Nov 2002 16:23:35 -0000	1.17
  @@ -328,9 +328,13 @@
   
       m_pPackagelayout->addWidget(m_pMaintable);  // Finally add the damn table
   
  -    connect(m_pMaintable, SIGNAL(clicked(int, int, int, const QPoint&)), this, SLOT(updEdit(int, int)));
  -//    connect(table, SIGNAL(currentChanged(int, int)), this, SLOT(currentChanged(int, int)));
  -//    connect(table, SIGNAL(valueChanged(int, int)), this, SLOT(valueChanged(int, int)));
  +    // Table update signals
  +    connect(m_pMaintable, SIGNAL(currentChanged(int, int)), this, SLOT(updEdit(int, int)));
  +//    connect(m_pMaintable, SIGNAL(clicked(int, int, int, const QPoint&)), this, SLOT(updEdit(int, int)));
  +//    connect(m_pMaintable, SIGNAL(doubleClicked(int, int, int, const QPoint&)), this, SLOT(updEdit(int, int)));
  +//    connect(m_pMaintable, SIGNAL(valueChanged(int, int)), this, SLOT(tableChanged(int, int)));
  +
  +//    // Button action signals
   //    connect(AddPushButton, SIGNAL(clicked()), this, SLOT(AddRow()));
   //    connect(DeletePushButton, SIGNAL(clicked()), this, SLOT(DelRow()));
   //    connect(WritePushButton, SIGNAL(clicked()), this, SLOT(accept()));

From ossp-cvs-owner@ossp.org  Tue Nov 26 15:10:33 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 493EF76A61; Tue, 26 Nov 2002 15:10:33 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq TODO tidatops.cpp titassist.cpp titconst.h...
Message-Id: <20021126141033.493EF76A61@mail.ossp.org>
Date: Tue, 26 Nov 2002 15:10:33 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   26-Nov-2002 15:10:33
  Branch: HEAD                             Handle: 2002112614103200

  Modified files:
    ossp-pkg/titraq         TODO tidatops.cpp titassist.cpp titconst.h
                            titraq.cpp titraq.h titslot.cpp

  Log:
    Add edit toolbar to eventually replace bottom button matrix, and correct
    edit control update logic to avoid needlessly updating controls from
    empty fields.

  Summary:
    Revision    Changes     Path
    1.17        +1  -0      ossp-pkg/titraq/TODO
    1.7         +3  -4      ossp-pkg/titraq/tidatops.cpp
    1.18        +15 -9      ossp-pkg/titraq/titassist.cpp
    1.4         +1  -1      ossp-pkg/titraq/titconst.h
    1.21        +0  -1      ossp-pkg/titraq/titraq.cpp
    1.25        +2  -1      ossp-pkg/titraq/titraq.h
    1.14        +24 -11     ossp-pkg/titraq/titslot.cpp
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/TODO
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 TODO
  --- ossp-pkg/titraq/TODO	25 Nov 2002 15:45:05 -0000	1.16
  +++ ossp-pkg/titraq/TODO	26 Nov 2002 14:10:32 -0000	1.17
  @@ -28,6 +28,7 @@
   Memory optimization needed in tidataops
   QTable::valueChanged(int row, int col) should be responsible for dirty flag
   Remove magic numbers from cpp files to titconst like TITRAQ_INDEXREMARK
  +Reduce dependence to STL by removing cout to QTextStream
   
   Dreams
   ------
  Index: ossp-pkg/titraq/tidatops.cpp
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 tidatops.cpp
  --- ossp-pkg/titraq/tidatops.cpp	24 Nov 2002 23:11:56 -0000	1.6
  +++ ossp-pkg/titraq/tidatops.cpp	26 Nov 2002 14:10:32 -0000	1.7
  @@ -75,10 +75,9 @@
           nIter++; // The big increment
       }
   
  -    m_pMaintable->setUpdatesEnabled(true);  // Repaint all
  -    m_pMaintable->setNumRows(nIter - 1);    // Trim unneeded rows
  -    m_pRemark->setText(trUtf8("Loaded text goes here"));
  -    m_pRemark->setEdited(false);            // Reset widget
  +    m_pMaintable->setUpdatesEnabled(true);      // Update and repaint
  +    m_pMaintable->setNumRows(nIter - 1);        // Trim excess rows
  +    m_pMaintable->setCurrentCell(nIter - 1, 0); // Move focus to last row
   
       if (!bValid)
           throw Genexcept("Warning, invalid accounting data.");
  Index: ossp-pkg/titraq/titassist.cpp
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 titassist.cpp
  --- ossp-pkg/titraq/titassist.cpp	25 Nov 2002 16:23:35 -0000	1.17
  +++ ossp-pkg/titraq/titassist.cpp	26 Nov 2002 14:10:32 -0000	1.18
  @@ -244,15 +244,21 @@
   //
   void Titraqform::setupFiletools(void)
   {
  -    // Construct and populate the main tool bar
  -    m_pToolbar = new QToolBar("Toolfile", this, DockTop);
  -    if (m_pToolbar == NULL) // Sanity check
  -        throw Genexcept("Main window tool bar creation failed.");
  -    m_pToolbar->setLabel(trUtf8("File Ops"));
  -    m_pFilenewact->addTo(m_pToolbar);
  -    m_pFileopenact->addTo(m_pToolbar);
  -    m_pFilesaveact->addTo(m_pToolbar);
  -    QWhatsThis::whatsThisButton(m_pToolbar); // Preconfigured whats this button
  +    // Construct and populate the file tool bar
  +    m_pFiletools = new QToolBar("Toolfile", this, DockTop);
  +    if (m_pFiletools == NULL)                   // Sanity check
  +        throw Genexcept("File tool bar creation failed.");
  +    m_pFiletools->setLabel(trUtf8("File Ops"));
  +    m_pFilenewact->addTo(m_pFiletools);
  +    m_pFileopenact->addTo(m_pFiletools);
  +    m_pFilesaveact->addTo(m_pFiletools);
  +    QWhatsThis::whatsThisButton(m_pFiletools);  // Preconfigured whats this button
  +
  +    // Construct and populate the edit tool bar
  +    m_pEdittools = new QToolBar("Tooledit", this, DockTop);
  +    if (m_pEdittools == NULL)                   // Sanity check
  +        throw Genexcept("Edit tool bar creation failed.");
  +    m_pEdittools->setLabel(trUtf8("Edit Ops"));
   }
   
   //
  Index: ossp-pkg/titraq/titconst.h
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 titconst.h
  --- ossp-pkg/titraq/titconst.h	25 Nov 2002 15:45:06 -0000	1.3
  +++ ossp-pkg/titraq/titconst.h	26 Nov 2002 14:10:32 -0000	1.4
  @@ -22,5 +22,5 @@
   
   // Values
   #define TITRAQ_MAXAMOUNT        960         // Maximum valid amount
  -#define TITRAQ_MINAMOUNT        -1          // Minimum valid amount
  +#define TITRAQ_MINAMOUNT        0           // Minimum valid amount
   #define TITRAQ_STEPAMOUNT       15          // Line step interval
  Index: ossp-pkg/titraq/titraq.cpp
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 titraq.cpp
  --- ossp-pkg/titraq/titraq.cpp	24 Nov 2002 23:11:56 -0000	1.20
  +++ ossp-pkg/titraq/titraq.cpp	26 Nov 2002 14:10:32 -0000	1.21
  @@ -11,7 +11,6 @@
       m_pDeletebutton->setPaletteBackgroundColor(QColor(196, 196, 176));
       m_pWritebutton->setPaletteBackgroundColor(QColor(206, 192, 176));
       m_pQuitbutton->setPaletteBackgroundColor(QColor(196, 196, 176));
  -    m_pMaintable->setCurrentCell(0, 0);     // Set the initial focus
       m_pMaintable->setFocus();               // Focus on the table
   }
   
  Index: ossp-pkg/titraq/titraq.h
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 titraq.h
  --- ossp-pkg/titraq/titraq.h	25 Nov 2002 15:45:06 -0000	1.24
  +++ ossp-pkg/titraq/titraq.h	26 Nov 2002 14:10:32 -0000	1.25
  @@ -118,7 +118,8 @@
       QStatusBar  *m_pStatbar;
   
       // Belong to us
  -    QToolBar    *m_pToolbar;
  +    QToolBar    *m_pFiletools;
  +    QToolBar    *m_pEdittools;
       QString     *m_szFilename;
   
       // Standard members
  Index: ossp-pkg/titraq/titslot.cpp
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 titslot.cpp
  --- ossp-pkg/titraq/titslot.cpp	25 Nov 2002 15:45:06 -0000	1.13
  +++ ossp-pkg/titraq/titslot.cpp	26 Nov 2002 14:10:32 -0000	1.14
  @@ -53,8 +53,7 @@
   //
   void Titraqform::newDoc(void)
   {
  -    // The only way in Qt 3.X to clear rows efficiently
  -    m_pMaintable->setNumRows(0); // Get rid of any data in table
  +    m_pMaintable->setNumRows(0);    // Get rid of any data in table
   }
   
   //
  @@ -193,20 +192,34 @@
   //
   void Titraqform::updEdit(int nRow, int nCol)
   {
  -    QString Tasktext;               // For searching through prefixed task text
       QRegExp Shorten("/(\\w+)$");    // For stripping prefix off the current task
   
  -    m_pDateedit->setDate(QDate::fromString(m_pMaintable->text(nRow, TITRAQ_INDEXDATE), Qt::ISODate));
  -    m_pStarttime->setTime(QTime::fromString(m_pMaintable->text(nRow, TITRAQ_INDEXAMOUNT), Qt::ISODate));
  -    m_pEndtime->setTime(QTime::fromString(m_pMaintable->text(nRow, TITRAQ_INDEXAMOUNT), Qt::ISODate));
  -    m_pAmount->setText(m_pMaintable->text(nRow, TITRAQ_INDEXAMOUNT));
  +    // Field strings to check for validity and process
  +    QString Textdate(m_pMaintable->text(nRow, TITRAQ_INDEXDATE));
  +    QString Textstart(m_pMaintable->text(nRow, TITRAQ_INDEXAMOUNT));
  +    QString Textfinish(m_pMaintable->text(nRow, TITRAQ_INDEXAMOUNT));
  +    QString Textamount(m_pMaintable->text(nRow, TITRAQ_INDEXAMOUNT));
  +    QString Texttask(m_pMaintable->text(nRow, TITRAQ_INDEXTASK));
  +    QString Textremark(m_pMaintable->text(nRow, TITRAQ_INDEXREMARK));
  +
  +    if (!Textdate.isEmpty())
  +        m_pDateedit->setDate(QDate::fromString(Textdate, Qt::ISODate));
  +
  +    if (!Textstart.isEmpty())
  +        m_pStarttime->setTime(QTime::fromString(Textstart, Qt::ISODate));
  +
  +    if (!Textfinish.isEmpty())
  +        m_pEndtime->setTime(QTime::fromString(Textfinish, Qt::ISODate));
  +
  +    if (!Textamount.isEmpty())
  +        m_pAmount->setText(Textamount);
   
       // Process the task combo box to compress text length
  -    Tasktext = m_pMaintable->text(nRow, TITRAQ_INDEXTASK);
  -    Tasktext.remove(0, Shorten.search(Tasktext) + 1);       // Add one to strip leading slash
  +    Texttask.remove(0, Shorten.search(Texttask) + 1);   // Strip leading slash
  +    m_pTasks->setCurrentText(Texttask);
   
  -    m_pTasks->setCurrentText(Tasktext);
  -    m_pRemark->setText(m_pMaintable->text(nRow, TITRAQ_INDEXREMARK));
  +    if (!Textremark.isEmpty())
  +        m_pRemark->setText(Textremark);
   }
   
   //

From ossp-cvs-owner@ossp.org  Tue Nov 26 15:15:07 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 633D076A61; Tue, 26 Nov 2002 15:15:07 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq titassist.cpp
Message-Id: <20021126141507.633D076A61@mail.ossp.org>
Date: Tue, 26 Nov 2002 15:15:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   26-Nov-2002 15:15:07
  Branch: HEAD                             Handle: 2002112614150500

  Modified files:
    ossp-pkg/titraq         titassist.cpp

  Log:
    Reformat hardcoded task entries.

  Summary:
    Revision    Changes     Path
    1.19        +9  -1      ossp-pkg/titraq/titassist.cpp
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/titassist.cpp
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 titassist.cpp
  --- ossp-pkg/titraq/titassist.cpp	26 Nov 2002 14:10:32 -0000	1.18
  +++ ossp-pkg/titraq/titassist.cpp	26 Nov 2002 14:15:05 -0000	1.19
  @@ -425,7 +425,15 @@
       m_pTaskentries = new QStringList;
       if (m_pTaskentries == NULL) // Sanity check
           throw Genexcept("Main window task entries creation failed.");
  -    *m_pTaskentries << trUtf8("titraq") << trUtf8("opgui") << trUtf8("email") << trUtf8("admin") << trUtf8("pmod") << trUtf8("psod") << trUtf8("meeting") << trUtf8("training");
  +    *m_pTaskentries << trUtf8("titraq")         << trUtf8("opgui")
  +                    << trUtf8("email")          << trUtf8("admin")
  +                    << trUtf8("pmod")           << trUtf8("psod")
  +                    << trUtf8("brainstorming")  << trUtf8("communication")
  +                    << trUtf8("evaluation")     << trUtf8("holiday")
  +                    << trUtf8("implementation") << trUtf8("maintainance")
  +                    << trUtf8("prepare")        << trUtf8("perform")
  +                    << trUtf8("visit")          << trUtf8("meeting")
  +                    << trUtf8("troubleshooting") << trUtf8("weekly");
   
       // Make the combobox task edit
       m_pTasks = new QComboBox(true, m_pCenframe, "Tasks");

From ossp-cvs-owner@ossp.org  Tue Nov 26 16:06:58 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6508976A61; Tue, 26 Nov 2002 16:06:58 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq/gfx rowadd.xpm rowdel.xpm
Message-Id: <20021126150658.6508976A61@mail.ossp.org>
Date: Tue, 26 Nov 2002 16:06:58 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   26-Nov-2002 16:06:58
  Branch: HEAD                             Handle: 2002112615065700

  Added files:
    ossp-pkg/titraq/gfx     rowadd.xpm rowdel.xpm

  Log:
    Add row delete and row add icons.

  Summary:
    Revision    Changes     Path
    1.1         +108 -0     ossp-pkg/titraq/gfx/rowadd.xpm
    1.1         +97 -0      ossp-pkg/titraq/gfx/rowdel.xpm
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/gfx/rowadd.xpm
  ============================================================
  $ cvs update -p -r1.1 rowadd.xpm
  /* XPM */
  static const char *s_kpcRowadd_xpm[] = {
  "22 22 83 1",
  " 	c None",
  ".	c #878787",
  "+	c #737373",
  "@	c #676767",
  "#	c #585858",
  "$	c #2A2A2A",
  "%	c #DCDCDC",
  "&	c #FDFDFD",
  "*	c #3F3F3F",
  "=	c #4E4E4E",
  "-	c #A7A7A7",
  ";	c #C1C1C1",
  ">	c #000000",
  ",	c #FCFCFC",
  "'	c #FAFAFA",
  ")	c #797979",
  "!	c #A4A4A4",
  "~	c #CACACA",
  "{	c #A3A3A3",
  "]	c #A2A2A2",
  "^	c #555555",
  "/	c #8E8E8E",
  "(	c #6B6B6B",
  "_	c #818181",
  ":	c #F6F6F6",
  "<	c #F3F3F3",
  "[	c #A1A1A1",
  "}	c #F0F0F0",
  "|	c #9E9E9E",
  "1	c #BFBFBF",
  "2	c #6C6C6C",
  "3	c #959595",
  "4	c #4C4C4C",
  "5	c #8D8D8D",
  "6	c #9B9B9B",
  "7	c #D4D4D4",
  "8	c #DFDFDF",
  "9	c #E3E3E3",
  "0	c #969696",
  "a	c #B4B4B4",
  "b	c #656565",
  "c	c #D2D2D2",
  "d	c #DEDEDE",
  "e	c #DDDDDD",
  "f	c #939393",
  "g	c #B1B1B1",
  "h	c #9ECDFB",
  "i	c #0098E0",
  "j	c #CCCCCC",
  "k	c #8F8F8F",
  "l	c #5F5F5F",
  "m	c #727272",
  "n	c #787878",
  "o	c #2EB8FF",
  "p	c #0064E0",
  "q	c #C3C3C3",
  "r	c #CFCFCF",
  "s	c #D5D5D5",
  "t	c #8C8C8C",
  "u	c #AAAAAA",
  "v	c #12B4FF",
  "w	c #007BE0",
  "x	c #D0D0D0",
  "y	c #898989",
  "z	c #A6A6A6",
  "A	c #A2CEFF",
  "B	c #00A9E0",
  "C	c #11B4FF",
  "D	c #22B6FF",
  "E	c #868686",
  "F	c #00AFE0",
  "G	c #009BE0",
  "H	c #0084E0",
  "I	c #006500",
  "J	c #0058E0",
  "K	c #005100",
  "L	c #004500",
  "M	c #C0C0C0",
  "N	c #C2C2C2",
  "O	c #BEBEBE",
  "P	c #C4C4C4",
  "Q	c #636363",
  "R	c #9F9F9F",
  "  .+@@@@@@@@@@@@@#$   ",
  " .%&&&*=&&&&&&&-&&;>  ",
  " @,'''=)'''''''!''~>  ",
  " @{]]]^/]]]]]]](]]_>  ",
  " @:<<<^/<<<<<<<[<<;>  ",
  " @<}}}^/}}}}}}}|}}1>  ",
  " @*=^^2332^^^^^^^^^>  ",
  " @4)//3[[35////////>  ",
  "6@7777778999999099a>  ",
  "6@7@>>>bcd8e888f88g>  ",
  "6@7>hhi>jkkkkkklkkm>  ",
  "6ne>hop>qr777sstssu>  ",
  ">>>>hvw>>>bcxxxyxxz>  ",
  ">hhhAvBCDi>jEEE#EE(>  ",
  ">hovvFGGHI>qxxxtxxu>  ",
  ">ipwBGJKLL>Mxxxyxxz>  ",
  ">>>>CGK>>>^NEEE#EE(>  ",
  "66O>DHL>PPPPPPPtPPu>  ",
  " @6>iIL>PPPPPPPtPPu>  ",
  " @ >>>>>0000000Q05R>  ",
  " @>>>>>>>>>>>>>>>>>>  ",
  "                      "};
  Index: ossp-pkg/titraq/gfx/rowdel.xpm
  ============================================================
  $ cvs update -p -r1.1 rowdel.xpm
  /* XPM */
  static const char *s_kpcRowdel_xpm[] = {
  "22 22 72 1",
  " 	c None",
  ".	c #878787",
  "+	c #737373",
  "@	c #676767",
  "#	c #585858",
  "$	c #2A2A2A",
  "%	c #DCDCDC",
  "&	c #FDFDFD",
  "*	c #3F3F3F",
  "=	c #4E4E4E",
  "-	c #A7A7A7",
  ";	c #C1C1C1",
  ">	c #000000",
  ",	c #FCFCFC",
  "'	c #FAFAFA",
  ")	c #797979",
  "!	c #A4A4A4",
  "~	c #CACACA",
  "{	c #A3A3A3",
  "]	c #A2A2A2",
  "^	c #555555",
  "/	c #8E8E8E",
  "(	c #6B6B6B",
  "_	c #818181",
  ":	c #F6F6F6",
  "<	c #F3F3F3",
  "[	c #A1A1A1",
  "}	c #F0F0F0",
  "|	c #9E9E9E",
  "1	c #BFBFBF",
  "2	c #6C6C6C",
  "3	c #959595",
  "4	c #4C4C4C",
  "5	c #8D8D8D",
  "6	c #9B9B9B",
  "7	c #E3E3E3",
  "8	c #969696",
  "9	c #B4B4B4",
  "0	c #DFDFDF",
  "a	c #DDDDDD",
  "b	c #939393",
  "c	c #B1B1B1",
  "d	c #8F8F8F",
  "e	c #5F5F5F",
  "f	c #727272",
  "g	c #787878",
  "h	c #D4D4D4",
  "i	c #D5D5D5",
  "j	c #8C8C8C",
  "k	c #AAAAAA",
  "l	c #656565",
  "m	c #D2D2D2",
  "n	c #D0D0D0",
  "o	c #898989",
  "p	c #A6A6A6",
  "q	c #9ECDFB",
  "r	c #A2CEFF",
  "s	c #0098E0",
  "t	c #CCCCCC",
  "u	c #868686",
  "v	c #2EB8FF",
  "w	c #12B4FF",
  "x	c #006500",
  "y	c #C3C3C3",
  "z	c #0058E0",
  "A	c #004500",
  "B	c #C0C0C0",
  "C	c #C2C2C2",
  "D	c #BEBEBE",
  "E	c #C4C4C4",
  "F	c #636363",
  "G	c #9F9F9F",
  "  .+@@@@@@@@@@@@@#$   ",
  " .%&&&*=&&&&&&&-&&;>  ",
  " @,'''=)'''''''!''~>  ",
  " @{]]]^/]]]]]]](]]_>  ",
  " @:<<<^/<<<<<<<[<<;>  ",
  " @<}}}^/}}}}}}}|}}1>  ",
  " @*=^^2332^^^^^^^^^>  ",
  " @4)//3[[35////////>  ",
  "6@77777777777778779>  ",
  "6@0a0000000a000b00c>  ",
  "6@dddddddddddddeddf>  ",
  "6gahhhhhiihhhiijiik>  ",
  ">>>>>>>>>>lmnnnonnp>  ",
  ">qqqrqqqqs>tuuu#uu(>  ",
  ">qvwwwwwwx>ynnnjnnk>  ",
  ">szzzzzzzA>Bnnnonnp>  ",
  ">>>>>>>>>>^Cuuu#uu(>  ",
  "66DEEEEEEEEEEEEjEEk>  ",
  " @6EEEEEEEEEEEEjEEk>  ",
  " @ 888888888888F85G>  ",
  " @>>>>>>>>>>>>>>>>>>  ",
  "                      "};

From ossp-cvs-owner@ossp.org  Tue Nov 26 16:24:58 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A604076A5A; Tue, 26 Nov 2002 16:24:58 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq/gfx copy.xpm cut.xpm paste.xpm
Message-Id: <20021126152458.A604076A5A@mail.ossp.org>
Date: Tue, 26 Nov 2002 16:24:58 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   26-Nov-2002 16:24:58
  Branch: HEAD                             Handle: 2002112615245800

  Added files:
    ossp-pkg/titraq/gfx     copy.xpm cut.xpm paste.xpm

  Log:
    Add cut, copy, and paste icon images.

  Summary:
    Revision    Changes     Path
    1.1         +93 -0      ossp-pkg/titraq/gfx/copy.xpm
    1.1         +57 -0      ossp-pkg/titraq/gfx/cut.xpm
    1.1         +164 -0     ossp-pkg/titraq/gfx/paste.xpm
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/gfx/copy.xpm
  ============================================================
  $ cvs update -p -r1.1 copy.xpm
  /* XPM */
  static const char *s_kpcCopy_xpm[] = {
  "22 22 68 1",
  " 	c None",
  ".	c #343434",
  "+	c #2D2D2D",
  "@	c #232323",
  "#	c #000000",
  "$	c #444444",
  "%	c #FDFDFD",
  "&	c #FCFCFC",
  "*	c #D2D2D2",
  "=	c #3C3C3C",
  "-	c #2B2B2B",
  ";	c #EEEEEE",
  ">	c #EDEDED",
  ",	c #EFEFEF",
  "'	c #F3F3F3",
  ")	c #F5F5F5",
  "!	c #CECECE",
  "~	c #979797",
  "{	c #3A3A3A",
  "]	c #595959",
  "^	c #E1E1E1",
  "/	c #EAEAEA",
  "(	c #C8C8C8",
  "_	c #A1A1A1",
  ":	c #959595",
  "<	c #515151",
  "[	c #D7D7D7",
  "}	c #BFBFBF",
  "|	c #F8F8F8",
  "1	c #4E4E4E",
  "2	c #C0C0C0",
  "3	c #BABABA",
  "4	c #C2C2C2",
  "5	c #B1B1B1",
  "6	c #F4F4F4",
  "7	c #CBCBCB",
  "8	c #4D4D4D",
  "9	c #DCDCDC",
  "0	c #E4E4E4",
  "a	c #F1F1F1",
  "b	c #C7C7C7",
  "c	c #DFDFDF",
  "d	c #C9C9C9",
  "e	c #ECECEC",
  "f	c #E9E9E9",
  "g	c #D6D6D6",
  "h	c #A9A9A9",
  "i	c #D9D9D9",
  "j	c #C3C3C3",
  "k	c #E7E7E7",
  "l	c #9F9F9F",
  "m	c #D3D3D3",
  "n	c #BEBEBE",
  "o	c #E2E2E2",
  "p	c #999999",
  "q	c #B4B4B4",
  "r	c #DDDDDD",
  "s	c #AFAFAF",
  "t	c #D8D8D8",
  "u	c #919191",
  "v	c #ABABAB",
  "w	c #B0B0B0",
  "x	c #808080",
  "y	c #969696",
  "z	c #ACACAC",
  "A	c #A6A6A6",
  "B	c #CACACA",
  "C	c #202020",
  "                      ",
  "       .++++++@#$     ",
  "       +%&&&&&*##=    ",
  "       -;>;,')!#~#{   ",
  "  .++++++@#]^/(#_:#{  ",
  "  +%&&&&&*##<[}#####  ",
  "  +||||||!#~#123245#  ",
  "  +6'''''7#_:#8!90!#  ",
  "  +a,,,,,b#####3!cd#  ",
  "  +efffffg4445#h4ij#  ",
  "  +k000000000!#l3mn#  ",
  "  +occcccccccd#pq!3#  ",
  "  +riiiiiiiiij#:sbq#  ",
  "  +tmmmmmmmmmn#uvjw#  ",
  "  +m!!!!!!!!!3#xyzA#  ",
  "  +!bbbbbbbbbq######  ",
  "  +Bjjjjjjjjjw##      ",
  "  CnzzzzzzzzzA#       ",
  "  #############       ",
  "                      ",
  "                      ",
  "                      "};
  Index: ossp-pkg/titraq/gfx/cut.xpm
  ============================================================
  $ cvs update -p -r1.1 cut.xpm
  /* XPM */
  static const char *s_kpcCut_xpm[] = {
  "22 22 32 1",
  " 	c None",
  ".	c #000000",
  "+	c #DFDFDF",
  "@	c #DCDCDC",
  "#	c #D5D5D5",
  "$	c #C4C4C4",
  "%	c #B2B2B2",
  "&	c #D4D4D4",
  "*	c #B3B3B3",
  "=	c #9D9D9D",
  "-	c #666666",
  ";	c #646464",
  ">	c #434343",
  ",	c #DEDEDE",
  "'	c #7D7D7D",
  ")	c #787878",
  "!	c #A6A6A6",
  "~	c #D6D6D6",
  "{	c #676767",
  "]	c #9E9E9E",
  "^	c #949494",
  "/	c #C2C2C2",
  "(	c #A5A5A5",
  "_	c #AFAFAF",
  ":	c #7B7B7B",
  "<	c #B0B0B0",
  "[	c #C1C1C1",
  "}	c #CBCBCB",
  "|	c #D3D3D3",
  "1	c #CECECE",
  "2	c #C5C5C5",
  "3	c #C7C7C7",
  "                      ",
  "                      ",
  "    ...               ",
  "   .....      ....... ",
  "  ......     .+@#$%.  ",
  "  ..  ..    .+@&*=.   ",
  "  ..  ...  .+@&*=.    ",
  "  ...  ..-.+@&*=.     ",
  "   .....;.+@&*=.      ",
  "    ...>.+@&*=.       ",
  "     ...,')*=..       ",
  "     ..!~){]..        ",
  "     ...^/(.]_.       ",
  "    .....:..<[}.      ",
  "   ..  ...  .}||.     ",
  "  ..  ...    .|&|.    ",
  "  ..  ..      .|&|.   ",
  "  ......       .123.  ",
  "  ......        ..... ",
  "   ....               ",
  "                      ",
  "                      "};
  Index: ossp-pkg/titraq/gfx/paste.xpm
  ============================================================
  $ cvs update -p -r1.1 paste.xpm
  /* XPM */
  static const char *s_kpcPaste_xpm[] = {
  "22 22 139 2",
  "  	c None",
  ". 	c #000000",
  "+ 	c #4B4B4B",
  "@ 	c #929292",
  "# 	c #B6B6B6",
  "$ 	c #B5B5B5",
  "% 	c #B4B4B4",
  "& 	c #8B8B8B",
  "* 	c #434343",
  "= 	c #493E26",
  "- 	c #8E784B",
  "; 	c #382F1D",
  "> 	c #B1B1B1",
  ", 	c #AAAAAA",
  "' 	c #A8A8A8",
  ") 	c #A7A7A7",
  "! 	c #505050",
  "~ 	c #342C19",
  "{ 	c #8B723C",
  "] 	c #493918",
  "^ 	c #9B8351",
  "/ 	c #AB8C4A",
  "( 	c #A9A9A9",
  "_ 	c #373737",
  ": 	c #A68536",
  "< 	c #5B471D",
  "[ 	c #B19559",
  "} 	c #A58338",
  "| 	c #4E3E19",
  "1 	c #4A3A18",
  "2 	c #A88436",
  "3 	c #413315",
  "4 	c #AF9357",
  "5 	c #A38136",
  "6 	c #A38034",
  "7 	c #A17E34",
  "8 	c #9C7A32",
  "9 	c #987832",
  "0 	c #967631",
  "a 	c #977732",
  "b 	c #987831",
  "c 	c #9B7A31",
  "d 	c #A27F34",
  "e 	c #372A12",
  "f 	c #A38134",
  "g 	c #A48136",
  "h 	c #A58134",
  "i 	c #A48236",
  "j 	c #A28034",
  "k 	c #343434",
  "l 	c #2D2D2D",
  "m 	c #262626",
  "n 	c #0A0A0A",
  "o 	c #AF9256",
  "p 	c #A48234",
  "q 	c #A68336",
  "r 	c #A88536",
  "s 	c #AA8637",
  "t 	c #AB8737",
  "u 	c #A78336",
  "v 	c #FCFCFC",
  "w 	c #D2D2D2",
  "x 	c #303030",
  "y 	c #AE9256",
  "z 	c #A18034",
  "A 	c #A78537",
  "B 	c #A98537",
  "C 	c #AB8738",
  "D 	c #F7F7F7",
  "E 	c #F6F6F6",
  "F 	c #CDCDCD",
  "G 	c #969696",
  "H 	c #AD9156",
  "I 	c #A17F33",
  "J 	c #A58136",
  "K 	c #A88537",
  "L 	c #AA8737",
  "M 	c #F2F2F2",
  "N 	c #F0F0F0",
  "O 	c #C8C8C8",
  "P 	c #9E9E9E",
  "Q 	c #939393",
  "R 	c #AC9155",
  "S 	c #9F7E33",
  "T 	c #A17F34",
  "U 	c #A68236",
  "V 	c #A78436",
  "W 	c #A98637",
  "X 	c #A07E34",
  "Y 	c #ECECEC",
  "Z 	c #E9E9E9",
  "` 	c #C2C2C2",
  " .	c #AB9056",
  "..	c #9E7C33",
  "+.	c #A17E33",
  "@.	c #A98536",
  "#.	c #E6E6E6",
  "$.	c #E3E3E3",
  "%.	c #D0D0D0",
  "&.	c #BDBDBD",
  "*.	c #ABABAB",
  "=.	c #AA8F55",
  "-.	c #9D7B33",
  ";.	c #9F7D33",
  ">.	c #A28136",
  ",.	c #A58236",
  "'.	c #9D7C33",
  ").	c #DFDFDF",
  "!.	c #DCDCDC",
  "~.	c #C7C7C7",
  "{.	c #AA8F54",
  "].	c #9C7B32",
  "^.	c #9F7C33",
  "/.	c #A07E33",
  "(.	c #D9D9D9",
  "_.	c #D4D4D4",
  ":.	c #C0C0C0",
  "<.	c #A88D53",
  "[.	c #9A7932",
  "}.	c #9D7C32",
  "|.	c #A28134",
  "1.	c #A58336",
  "2.	c #9B7B33",
  "3.	c #D3D3D3",
  "4.	c #CECECE",
  "5.	c #BABABA",
  "6.	c #8A723C",
  "7.	c #977731",
  "8.	c #9C7B33",
  "9.	c #9B7A32",
  "0.	c #B3B3B3",
  "a.	c #3B2F13",
  "b.	c #433616",
  "c.	c #3C3013",
  "d.	c #332810",
  "e.	c #342A10",
  "f.	c #362A12",
  "g.	c #202020",
  "h.	c #AEAEAE",
  "                                            ",
  "            . . . . .                       ",
  "      . . + @ # $ % & * . .                 ",
  "    = - ; @ > , ' ' ) ! ~ { ]               ",
  "  . ^ / . ( + _ _ _ _ _ . : < .             ",
  "  . [ } | . . . . . . . 1 2 3 .             ",
  "  . 4 5 6 7 8 9 0 a 0 b c d e .             ",
  "  . 4 f g h 5 f i j k l l l m . n           ",
  "  . o j p q r s t u l v v v w . . x         ",
  "  . y z 5 q A B C j l D E E F . G . x       ",
  "  . H I j J q K L 7 l M N N O . P Q . x     ",
  "  . R S T f U V W X l Y Z Z ` . . . . .     ",
  "  .  ...+.j p q @...l #.$.$.%.&.&.&.*..     ",
  "  . =.-.;.T >.,.V '.l ).!.!.!.!.!.!.~..     ",
  "  . {.].^./.j g q '.l (._._._._._._.:.. .   ",
  "  . <.[.}.S T |.1.2.l 3.4.4.4.4.4.4.5.. .   ",
  "  . 6.7.8.;.X j p 9.l F ~.~.~.~.~.~.0.. .   ",
  "    a.b.c.d.e.e.f.d.g.:.h.h.h.h.h.h.' . .   ",
  "      . . . . . . . . . . . . . . . . .     ",
  "                        . . . . . . .       ",
  "                                            ",
  "                                            "};

From ossp-cvs-owner@ossp.org  Tue Nov 26 18:23:52 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 667CE76A5A; Tue, 26 Nov 2002 18:23:52 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq titassist.cpp titraq.h titslot.cpp
Message-Id: <20021126172352.667CE76A5A@mail.ossp.org>
Date: Tue, 26 Nov 2002 18:23:52 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   26-Nov-2002 18:23:52
  Branch: HEAD                             Handle: 2002112617235100

  Modified files:
    ossp-pkg/titraq         titassist.cpp titraq.h titslot.cpp

  Log:
    Add several missing edit actions, icons for them, and restructure view
    menu according to thl+ms mui+gui brainstorming.

  Summary:
    Revision    Changes     Path
    1.20        +118 -24    ossp-pkg/titraq/titassist.cpp
    1.26        +19 -6      ossp-pkg/titraq/titraq.h
    1.15        +134 -35    ossp-pkg/titraq/titslot.cpp
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/titassist.cpp
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 titassist.cpp
  --- ossp-pkg/titraq/titassist.cpp	26 Nov 2002 14:15:05 -0000	1.19
  +++ ossp-pkg/titraq/titassist.cpp	26 Nov 2002 17:23:51 -0000	1.20
  @@ -23,6 +23,11 @@
   #include "gfx/filenew.xpm"      // static const char *s_kpcFilenew_xpm[]
   #include "gfx/fileopen.xpm"     // static const char *s_kpcFileopen_xpm[]
   #include "gfx/filesave.xpm"     // static const char *s_kpcFilesave_xpm[]
  +#include "gfx/cut.xpm"          // static const char *s_kpcCut_xpm[]
  +#include "gfx/copy.xpm"         // static const char *s_kpcCopy_xpm[]
  +#include "gfx/paste.xpm"        // static const char *s_kpcPaste_xpm[]
  +#include "gfx/rowadd.xpm"       // static const char *s_kpcRowadd_xpm[]
  +#include "gfx/rowdel.xpm"       // static const char *s_kpcRowdel_xpm[]
   #include "gfx/osspicon.xpm"     // static const char *s_kpcOsspicon_xpm[]
   #include "gfx/whatsthis.xpm"    // static const char *s_kpcWhatsthis_xpm[]
   
  @@ -80,6 +85,11 @@
       QMimeSourceFactory::defaultFactory()->setPixmap("filenew", QPixmap(s_kpcFilenew_xpm));
       QMimeSourceFactory::defaultFactory()->setPixmap("fileopen", QPixmap(s_kpcFileopen_xpm));
       QMimeSourceFactory::defaultFactory()->setPixmap("filesave", QPixmap(s_kpcFilesave_xpm));
  +    QMimeSourceFactory::defaultFactory()->setPixmap("cut", QPixmap(s_kpcCut_xpm));
  +    QMimeSourceFactory::defaultFactory()->setPixmap("copy", QPixmap(s_kpcCopy_xpm));
  +    QMimeSourceFactory::defaultFactory()->setPixmap("paste", QPixmap(s_kpcPaste_xpm));
  +    QMimeSourceFactory::defaultFactory()->setPixmap("rowadd", QPixmap(s_kpcRowadd_xpm));
  +    QMimeSourceFactory::defaultFactory()->setPixmap("rowdel", QPixmap(s_kpcRowdel_xpm));
   
       // File new action
       m_pFilenewact = new QAction(trUtf8("New File"), QPixmap(s_kpcFilenew_xpm), trUtf8("&New..."), CTRL+Key_N, this, "New");
  @@ -127,41 +137,74 @@
   
       // File close current action
       m_pFilecloseact = new QAction(trUtf8("Close"), trUtf8("&Close"), CTRL+Key_W, this, "Close");
  -    if (m_pFilecloseact == NULL) // Sanity check
  +    if (m_pFilecloseact == NULL)    // Sanity check
           throw Genexcept("Main window file close action creation failed.");
       connect(m_pFilecloseact, SIGNAL(activated()), this, SLOT(close()));
   
       // File quit action
       m_pFilequitact = new QAction(trUtf8("Exit"), trUtf8("E&xit"), CTRL+Key_Q, this, "Exit");
  -    if (m_pFilequitact == NULL) // Sanity check
  +    if (m_pFilequitact == NULL)     // Sanity check
           throw Genexcept("Main window file quit action creation failed.");
       connect(m_pFilequitact, SIGNAL(activated()), qApp, SLOT(quit()));
   
  +    // Cut action
  +    m_pCutact = new QAction(trUtf8("Cut"), QPixmap(s_kpcCut_xpm), trUtf8("&Cut"), 0, this, "Cut");
  +    if (m_pCutact == NULL)          // Sanity check
  +        throw Genexcept("Main window cut edit action creation failed.");
  +    connect(m_pCutact, SIGNAL(activated()), this, SLOT(cutEntry()));
  +    const char *kszCuttext = "<p><img source=\"cut\"> "
  +                                   "Click this button to cut an <em>entry</em>."
  +                                   "You can also select the <b>Cut</b> command "
  +                                   "from the <b>Edit</b> menu.</p>";
  +    m_pCutact->setWhatsThis(kszCuttext);
  +
  +    // Copy action
  +    m_pCopyact = new QAction(trUtf8("Copy"), QPixmap(s_kpcCopy_xpm), trUtf8("&Copy"), 0, this, "Copy");
  +    if (m_pCopyact == NULL)         // Sanity check
  +        throw Genexcept("Main window copy edit action creation failed.");
  +    connect(m_pCopyact, SIGNAL(activated()), this, SLOT(copyEntry()));
  +    const char *kszCopytext = "<p><img source=\"copy\"> "
  +                                   "Click this button to copy an <em>entry</em>."
  +                                   "You can also select the <b>Copy</b> command "
  +                                   "from the <b>Edit</b> menu.</p>";
  +    m_pCopyact->setWhatsThis(kszCopytext);
  +
  +    // Paste action
  +    m_pPasteact = new QAction(trUtf8("Paste"), QPixmap(s_kpcPaste_xpm), trUtf8("&Paste"), 0, this, "Paste");
  +    if (m_pPasteact == NULL)         // Sanity check
  +        throw Genexcept("Main window paste edit action creation failed.");
  +    connect(m_pPasteact, SIGNAL(activated()), this, SLOT(pasteEntry()));
  +    const char *kszPastetext = "<p><img source=\"paste\"> "
  +                                   "Click this button to paste an <em>entry</em>."
  +                                   "You can also select the <b>Paste</b> command "
  +                                   "from the <b>Edit</b> menu.</p>";
  +    m_pPasteact->setWhatsThis(kszPastetext);
  +
       // Add data row action
  -    m_pAddrowact = new QAction(trUtf8("Add Row"), trUtf8("Add &row"), 0, this, "Addrow");
  -    if (m_pAddrowact == NULL) // Sanity check
  +    m_pAddrowact = new QAction(trUtf8("Add Row"), QPixmap(s_kpcRowadd_xpm), trUtf8("&Add row"), 0, this, "Addrow");
  +    if (m_pAddrowact == NULL)       // Sanity check
           throw Genexcept("Main window add row action creation failed.");
       connect(m_pAddrowact, SIGNAL(activated()), this, SLOT(addEntry()));
  -    const char *kszAddrowtext = "<p><img source=\"ossplogo\"> "
  +    const char *kszAddrowtext = "<p><img source=\"rowadd\"> "
                                   "Click this button to add a <em>new row</em>."
                                   "You can also select the <b>Add</b> command "
                                   "from the <b>Edit</b> menu.</p>";
       m_pAddrowact->setWhatsThis(kszAddrowtext);
   
       // Delete data row action
  -    m_pDeleterowact = new QAction(trUtf8("Add Row"), trUtf8("Add &row"), 0, this, "Deleterow");
  -    if (m_pDeleterowact == NULL) // Sanity check
  +    m_pDelrowact = new QAction(trUtf8("Del Row"), QPixmap(s_kpcRowdel_xpm), trUtf8("&Delete row"), 0, this, "Delrow");
  +    if (m_pDelrowact == NULL)       // Sanity check
           throw Genexcept("Main window delete row action creation failed.");
  -    connect(m_pDeleterowact, SIGNAL(activated()), this, SLOT(delEntry()));
  -    const char *kszDeleterowtext = "<p><img source=\"ossplogo\"> "
  +    connect(m_pDelrowact, SIGNAL(activated()), this, SLOT(delEntry()));
  +    const char *kszDelrowtext = "<p><img source=\"rowdel\"> "
                                      "Click this button to delete a <em>row</em>."
                                      "You can also select the <b>Delete</b> command "
                                      "from the <b>Edit</b> menu.</p>";
  -    m_pDeleterowact->setWhatsThis(kszDeleterowtext);
  +    m_pDelrowact->setWhatsThis(kszDelrowtext);
   
       // Write data action
  -    m_pWritedataact = new QAction(trUtf8("Add Row"), trUtf8("Add &row"), 0, this, "Writedata");
  -    if (m_pWritedataact == NULL) // Sanity check
  +    m_pWritedataact = new QAction(trUtf8("Write Data"), trUtf8("&Write data"), 0, this, "Writedata");
  +    if (m_pWritedataact == NULL)    // Sanity check
           throw Genexcept("Main window write data action creation failed.");
       connect(m_pWritedataact, SIGNAL(activated()), this, SLOT(writeEntry()));
       const char *kszWritedatatext = "<p><img source=\"ossplogo\"> "
  @@ -176,6 +219,8 @@
   //
   void Titraqform::setupMenubar(void)
   {
  +    int nMenuid = 0;        // Used to store id during menu item creation
  +
       m_pMenubar = menuBar(); // Grab menu bar owned by QMainWindow
       if (m_pMenubar == NULL) // Sanity check
           throw Genexcept("Main window menu bar nonexistant.");
  @@ -203,24 +248,61 @@
       if (pEditpopup == NULL) // Sanity check
           throw Genexcept("Main window edit popup creation failed.");
       m_pMenubar->insertItem(trUtf8("&Edit"), pEditpopup);
  -    pEditpopup->insertItem("Cu&t", this, SLOT(cut()), CTRL+Key_X);
  -    pEditpopup->insertItem("&Copy", this, SLOT(copy()), CTRL+Key_C);
  -    pEditpopup->insertItem("&Paste", this, SLOT(paste()), CTRL+Key_V);
  +    m_pCutact->addTo(pEditpopup);
  +    m_pCopyact->addTo(pEditpopup);
  +    m_pPasteact->addTo(pEditpopup);
       pEditpopup->insertSeparator();
  -    pEditpopup->insertItem("&Add", this, SLOT(addEntry()), CTRL+Key_A);
  -    pEditpopup->insertItem("&Delete", this, SLOT(delEntry()), Key_Delete);
  -    pEditpopup->insertItem("Select &All", this, SLOT(selAll()), CTRL+Key_A);
  +    m_pAddrowact->addTo(pEditpopup);
  +    m_pDelrowact->addTo(pEditpopup);
       pEditpopup->insertSeparator();
       pEditpopup->insertItem("Preferences...", this, SLOT(configPrefs()));
   
  -    // Construct and populate the view menu with subitems
  +    // Construct the view menu
       QPopupMenu *pViewpopup = new QPopupMenu(this);
  -    if (pViewpopup == NULL) // Sanity check
  -        throw Genexcept("Main window view popup creation failed.");
  +    QPopupMenu *pTbarspopup = new QPopupMenu(this);
  +    pTbarspopup->insertTearOffHandle();
  +    pTbarspopup->setCheckable(true);
  +    QPopupMenu *pColspopup = new QPopupMenu(this);
  +    pColspopup->insertTearOffHandle();
  +    pColspopup->setCheckable(true);
  +
  +    // Major sanity check wrapped in one call
  +    if (!(pViewpopup && pTbarspopup && pColspopup))
  +        throw Genexcept("Main window view popups creation failed.");
  +
  +    // Populate the view menu with subitems
       m_pMenubar->insertItem(trUtf8("&View"), pViewpopup);
  -    pViewpopup->insertItem(trUtf8("&Normal"), this, SLOT(normalView()));
       pViewpopup->insertItem(trUtf8("&Editing"), this, SLOT(editingView()));
  -    pViewpopup->insertItem(trUtf8("&Timing"), this, SLOT(timingView()));
  +    nMenuid = pViewpopup->insertItem(trUtf8("&Timing"), this, SLOT(timingView()));
  +    pViewpopup->setItemEnabled(nMenuid, false);
  +    pViewpopup->insertSeparator();
  +    pViewpopup->insertItem(trUtf8("&Toolbars"), pTbarspopup);
  +    nMenuid = pTbarspopup->insertItem(trUtf8("&File"), this, SLOT(showFilebar()));
  +    pTbarspopup->setItemChecked(nMenuid, true);
  +    nMenuid = pTbarspopup->insertItem(trUtf8("&Edit"), this, SLOT(showEditbar()));
  +    pTbarspopup->setItemChecked(nMenuid, true);
  +    nMenuid = pTbarspopup->insertItem(trUtf8("&Whats this"), this, SLOT(showWhatsbar()));
  +    pTbarspopup->setItemChecked(nMenuid, true);
  +    pViewpopup->insertSeparator();
  +    pViewpopup->insertItem(trUtf8("&Columns"), pColspopup);
  +    nMenuid = pColspopup->insertItem(trUtf8("&Line number"), this, SLOT(showLinecol()));
  +    pColspopup->setItemEnabled(nMenuid, false);
  +    nMenuid = pColspopup->insertItem(trUtf8("&GUID"), this, SLOT(showGuidcol()));
  +    pColspopup->setItemEnabled(nMenuid, false);
  +    nMenuid = pColspopup->insertItem(trUtf8("&Date"), this, SLOT(showDatecol()));
  +    pColspopup->setItemEnabled(nMenuid, false);
  +    nMenuid = pColspopup->insertItem(trUtf8("&User"), this, SLOT(showUsercol()));
  +    pColspopup->setItemEnabled(nMenuid, false);
  +    nMenuid = pColspopup->insertItem(trUtf8("&Task"), this, SLOT(showTaskcol()));
  +    pColspopup->setItemEnabled(nMenuid, false);
  +    nMenuid = pColspopup->insertItem(trUtf8("&Start time"), this, SLOT(showStartcol()));
  +    pColspopup->setItemEnabled(nMenuid, false);
  +    nMenuid = pColspopup->insertItem(trUtf8("&Finish time"), this, SLOT(showFinishcol()));
  +    pColspopup->setItemEnabled(nMenuid, false);
  +    nMenuid = pColspopup->insertItem(trUtf8("&Amount time"), this, SLOT(showAmountcol()));
  +    pColspopup->setItemEnabled(nMenuid, false);
  +    nMenuid = pColspopup->insertItem(trUtf8("&Remark"), this, SLOT(showRemarkcol()));
  +    pColspopup->setItemEnabled(nMenuid, false);
   
       // Pad spacing to force help menu to appear far right
       m_pMenubar->insertSeparator();
  @@ -252,13 +334,25 @@
       m_pFilenewact->addTo(m_pFiletools);
       m_pFileopenact->addTo(m_pFiletools);
       m_pFilesaveact->addTo(m_pFiletools);
  -    QWhatsThis::whatsThisButton(m_pFiletools);  // Preconfigured whats this button
   
       // Construct and populate the edit tool bar
       m_pEdittools = new QToolBar("Tooledit", this, DockTop);
       if (m_pEdittools == NULL)                   // Sanity check
           throw Genexcept("Edit tool bar creation failed.");
       m_pEdittools->setLabel(trUtf8("Edit Ops"));
  +    m_pCutact->addTo(m_pEdittools);
  +    m_pCopyact->addTo(m_pEdittools);
  +    m_pPasteact->addTo(m_pEdittools);
  +    m_pEdittools->addSeparator();
  +    m_pAddrowact->addTo(m_pEdittools);
  +    m_pDelrowact->addTo(m_pEdittools);
  +
  +    // Construct and populate the lonely whatsthis tool bar
  +    m_pWhatstools = new QToolBar("Toolwhats", this, DockTop);
  +    if (m_pWhatstools == NULL)                  // Sanity check
  +        throw Genexcept("Whats this tool bar creation failed.");
  +    m_pWhatstools->setLabel(trUtf8("Whats this"));
  +    QWhatsThis::whatsThisButton(m_pWhatstools); // Preconfigured whats this button
   }
   
   //
  Index: ossp-pkg/titraq/titraq.h
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 titraq.h
  --- ossp-pkg/titraq/titraq.h	26 Nov 2002 14:10:32 -0000	1.25
  +++ ossp-pkg/titraq/titraq.h	26 Nov 2002 17:23:51 -0000	1.26
  @@ -55,8 +55,9 @@
       QAction     *m_pFilenewact,   *m_pFileopenact;
       QAction     *m_pFilesaveact,  *m_pFilesaveasact;
       QAction     *m_pFilecloseact, *m_pFilequitact;
  -    QAction     *m_pAddrowact, *m_pDeleterowact;
  -    QAction     *m_pWritedataact;
  +    QAction     *m_pAddrowact,    *m_pDelrowact;
  +    QAction     *m_pCutact,       *m_pCopyact;
  +    QAction     *m_pPasteact,     *m_pWritedataact;
   
       // Table, cells, and entries in package layout
       QTable      *m_pMaintable;
  @@ -79,6 +80,9 @@
   
   protected slots:
       virtual void init(void);            // Override init to include custom controls
  +    void cutEntry(void);                // Cut a task entry from the list
  +    void copyEntry(void);               // Copy a task entry from the list
  +    void pasteEntry(void);              // Paste a task entry to the list
       void addEntry(void);                // Add a task entry to the list
       void delEntry(void);                // Delete a task entry from the list
       void writeEntry(void);              // Write the task list to a filedescriptor
  @@ -90,15 +94,23 @@
       void aboutTitraq(void);             // Learn more about this program itself
       void aboutOSSP(void);               // Learn more about the OSSP
       void aboutQt(void);                 // Learn more about Qt
  -    void cut(void);                     // Edit menu cut
  -    void copy(void);                    // Edit menu copy
  -    void paste(void);                   // Edit menu paste
       void selAll(void);                  // Edit menu select all
       void updEdit(int, int);             // Update edit controls
       void configPrefs(void);             // Edit menu configure preferences
  -    void normalView(void);              // View menu normal
       void editingView(void);             // View menu editing
       void timingView(void);              // View menu timing
  +    void showFilebar(void);             // View menu show file toolbar
  +    void showEditbar(void);             // View menu show edit toolbar
  +    void showWhatsbar(void);            // View menu show whats this toolbar
  +    void showLinecol(void);             // View menu show line numbers column
  +    void showGuidcol(void);             // View menu show GUIDs column
  +    void showDatecol(void);             // View menu show Dates column
  +    void showUsercol(void);             // View menu show Users column
  +    void showTaskcol(void);             // View menu show Tasks column
  +    void showStartcol(void);            // View menu show Start time column
  +    void showFinishcol(void);           // View menu show Finish time column
  +    void showAmountcol(void);           // View menu show Amounts column
  +    void showRemarkcol(void);           // View menu show Remarks column
   
   protected:
       // Application main events
  @@ -120,6 +132,7 @@
       // Belong to us
       QToolBar    *m_pFiletools;
       QToolBar    *m_pEdittools;
  +    QToolBar    *m_pWhatstools;
       QString     *m_szFilename;
   
       // Standard members
  Index: ossp-pkg/titraq/titslot.cpp
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 titslot.cpp
  --- ossp-pkg/titraq/titslot.cpp	26 Nov 2002 14:10:32 -0000	1.14
  +++ ossp-pkg/titraq/titslot.cpp	26 Nov 2002 17:23:51 -0000	1.15
  @@ -15,7 +15,34 @@
   
   
   //
  -// Add a blank row entry to the current data window
  +// Cut an entry
  +//
  +void Titraqform::cutEntry(void)
  +{
  +    Prototype Unimp;
  +    Unimp.doMbox();
  +}
  +
  +//
  +// Copy an entry
  +//
  +void Titraqform::copyEntry(void)
  +{
  +    Prototype Unimp;
  +    Unimp.doMbox();
  +}
  +
  +//
  +// Paste an entry
  +//
  +void Titraqform::pasteEntry(void)
  +{
  +    Prototype Unimp;
  +    Unimp.doMbox();
  +}
  +
  +//
  +// Append a blank row entry
   //
   void Titraqform::addEntry(void)
   {
  @@ -31,7 +58,7 @@
   }
   
   //
  -// Delete a row entry from the current data window
  +// Delete a row entry
   //
   void Titraqform::delEntry(void)
   {
  @@ -152,33 +179,6 @@
   }
   
   //
  -// Edit menu cut
  -//
  -void Titraqform::cut(void)
  -{
  -    Prototype Unimp;
  -    Unimp.doMbox();
  -}
  -
  -//
  -// Edit menu copy
  -//
  -void Titraqform::copy(void)
  -{
  -    Prototype Unimp;
  -    Unimp.doMbox();
  -}
  -
  -//
  -// Edit menu paste
  -//
  -void Titraqform::paste(void)
  -{
  -    Prototype Unimp;
  -    Unimp.doMbox();
  -}
  -
  -//
   // Edit menu select all entries
   //
   void Titraqform::selAll(void)
  @@ -232,27 +232,126 @@
   }
   
   //
  -// View menu normal
  +// View menu editing
   //
  -void Titraqform::normalView(void)
  +void Titraqform::editingView(void)
   {
       Prototype Unimp;
       Unimp.doMbox();
   }
   
   //
  -// View menu editing
  +// View menu timing
   //
  -void Titraqform::editingView(void)
  +void Titraqform::timingView(void)
   {
       Prototype Unimp;
       Unimp.doMbox();
   }
   
   //
  -// View menu timing
  +// View menu show file toolbar
   //
  -void Titraqform::timingView(void)
  +void Titraqform::showFilebar(void)
  +{
  +    Prototype Unimp;
  +    Unimp.doMbox();
  +}
  +
  +//
  +// View menu show edit toolbar
  +//
  +void Titraqform::showEditbar(void)
  +{
  +    Prototype Unimp;
  +    Unimp.doMbox();
  +}
  +
  +//
  +// View menu show whats this toolbar
  +//
  +void Titraqform::showWhatsbar(void)
  +{
  +    Prototype Unimp;
  +    Unimp.doMbox();
  +}
  +
  +//
  +// View menu show line numbers column
  +//
  +void Titraqform::showLinecol(void)
  +{
  +    Prototype Unimp;
  +    Unimp.doMbox();
  +}
  +
  +//
  +// View menu show GUIDs column
  +//
  +void Titraqform::showGuidcol(void)
  +{
  +    Prototype Unimp;
  +    Unimp.doMbox();
  +}
  +
  +//
  +// View menu show Dates column
  +//
  +void Titraqform::showDatecol(void)
  +{
  +    Prototype Unimp;
  +    Unimp.doMbox();
  +}
  +
  +//
  +// View menu show Users column
  +//
  +void Titraqform::showUsercol(void)
  +{
  +    Prototype Unimp;
  +    Unimp.doMbox();
  +}
  +
  +//
  +// View menu show Tasks column
  +//
  +void Titraqform::showTaskcol(void)
  +{
  +    Prototype Unimp;
  +    Unimp.doMbox();
  +}
  +
  +//
  +// View menu show Start time column
  +//
  +void Titraqform::showStartcol(void)
  +{
  +    Prototype Unimp;
  +    Unimp.doMbox();
  +}
  +
  +//
  +// View menu show Finish time column
  +//
  +void Titraqform::showFinishcol(void)
  +{
  +    Prototype Unimp;
  +    Unimp.doMbox();
  +}
  +
  +//
  +// View menu show Amounts column
  +//
  +void Titraqform::showAmountcol(void)
  +{
  +    Prototype Unimp;
  +    Unimp.doMbox();
  +}
  +
  +//
  +// View menu show Remarks column
  +//
  +void Titraqform::showRemarkcol(void)
   {
       Prototype Unimp;
       Unimp.doMbox();

From ossp-cvs-owner@ossp.org  Tue Nov 26 18:34:02 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9567E76AD9; Tue, 26 Nov 2002 18:34:02 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq TODO titslot.cpp
Message-Id: <20021126173402.9567E76AD9@mail.ossp.org>
Date: Tue, 26 Nov 2002 18:34:02 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   26-Nov-2002 18:34:02
  Branch: HEAD                             Handle: 2002112617340200

  Modified files:
    ossp-pkg/titraq         TODO titslot.cpp

  Log:
    Implement rudimentary add entry.

  Summary:
    Revision    Changes     Path
    1.18        +4  -0      ossp-pkg/titraq/TODO
    1.16        +3  -9      ossp-pkg/titraq/titslot.cpp
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/TODO
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 TODO
  --- ossp-pkg/titraq/TODO	26 Nov 2002 14:10:32 -0000	1.17
  +++ ossp-pkg/titraq/TODO	26 Nov 2002 17:34:02 -0000	1.18
  @@ -30,6 +30,10 @@
   Remove magic numbers from cpp files to titconst like TITRAQ_INDEXREMARK
   Reduce dependence to STL by removing cout to QTextStream
   
  +Bugs
  +----
  +Insert adds a row after selection; not possible to add before first row
  +
   Dreams
   ------
   
  Index: ossp-pkg/titraq/titslot.cpp
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 titslot.cpp
  --- ossp-pkg/titraq/titslot.cpp	26 Nov 2002 17:23:51 -0000	1.15
  +++ ossp-pkg/titraq/titslot.cpp	26 Nov 2002 17:34:02 -0000	1.16
  @@ -46,15 +46,9 @@
   //
   void Titraqform::addEntry(void)
   {
  -    Prototype Unimp;
  -    Unimp.doMbox();
  -//    if (!pTable->text().isEmpty()) {
  -//        QTableRow *pRow = new QTableRow;
  -//        pRow->setText(0, NULL);
  -//        pRow->setText(1, NULL);
  -//        pRow->setText(2, NULL);
  -//        pRow->setText(3, NULL);
  -//    }
  +    // Adds a new row to end of table and focuses to it
  +    m_pMaintable->setNumRows(m_pMaintable->numRows() + 1);
  +    m_pMaintable->setCurrentCell(m_pMaintable->numRows(), 0);
   }
   
   //

From ossp-cvs-owner@ossp.org  Tue Nov 26 20:09:59 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 076A276AD9; Tue, 26 Nov 2002 20:09:58 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq titassist.cpp titslot.cpp
Message-Id: <20021126190958.076A276AD9@mail.ossp.org>
Date: Tue, 26 Nov 2002 20:09:58 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   26-Nov-2002 20:09:58
  Branch: HEAD                             Handle: 2002112619095800

  Modified files:
    ossp-pkg/titraq         titassist.cpp titslot.cpp

  Log:
    Corrected add entry logic, and implemented remove entry logic.

  Summary:
    Revision    Changes     Path
    1.21        +1  -1      ossp-pkg/titraq/titassist.cpp
    1.17        +20 -6      ossp-pkg/titraq/titslot.cpp
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/titassist.cpp
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 titassist.cpp
  --- ossp-pkg/titraq/titassist.cpp	26 Nov 2002 17:23:51 -0000	1.20
  +++ ossp-pkg/titraq/titassist.cpp	26 Nov 2002 19:09:58 -0000	1.21
  @@ -408,7 +408,7 @@
       m_pMaintable->setNumCols(g_knCols);
       m_pMaintable->setReadOnly(true);                    // Table is read only
       m_pMaintable->setColumnMovingEnabled(false);        // Ctrl-drag disabled
  -    m_pMaintable->setSelectionMode(QTable::MultiRow);   // Multi row selection
  +    m_pMaintable->setSelectionMode(QTable::SingleRow);  // Multi row selection
       m_pMaintable->setFocusStyle(QTable::FollowStyle);   // How cells are drawn
       m_pMaintable->setLeftMargin(0);             // Get rid of the vertical header
       m_pMaintable->verticalHeader()->hide();     // by hiding it with a margin of 0
  Index: ossp-pkg/titraq/titslot.cpp
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 titslot.cpp
  --- ossp-pkg/titraq/titslot.cpp	26 Nov 2002 17:34:02 -0000	1.16
  +++ ossp-pkg/titraq/titslot.cpp	26 Nov 2002 19:09:58 -0000	1.17
  @@ -13,7 +13,6 @@
   #include "gfx/cwlogo.xpm"       // static const char *s_kpcCwlogo_xpm[]
   #include "gfx/ossplogo.xpm"     // static const char *s_kpcOssplogo_xpm[]
   
  -
   //
   // Cut an entry
   //
  @@ -46,9 +45,19 @@
   //
   void Titraqform::addEntry(void)
   {
  -    // Adds a new row to end of table and focuses to it
  -    m_pMaintable->setNumRows(m_pMaintable->numRows() + 1);
  -    m_pMaintable->setCurrentCell(m_pMaintable->numRows(), 0);
  +//    // Add a row to end of table and focuses to it
  +//    m_pMaintable->setNumRows(m_pMaintable->numRows() + 1);
  +//    m_pMaintable->setCurrentCell(m_pMaintable->numRows(), 0);
  +
  +    // Add a row after selection and focus to the new row
  +    if (m_pMaintable->currentRow() + 1 != m_pMaintable->numRows()) {
  +        m_pMaintable->insertRows(m_pMaintable->currentRow());
  +        m_pMaintable->setCurrentCell(m_pMaintable->currentRow() - 3, m_pMaintable->currentColumn());
  +    }
  +    else // Special case to handle adding an only row or last row
  +        m_pMaintable->insertRows(m_pMaintable->currentRow() + 1); {
  +        m_pMaintable->setCurrentCell(m_pMaintable->currentRow() + 1, m_pMaintable->currentColumn());
  +    }
   }
   
   //
  @@ -56,8 +65,13 @@
   //
   void Titraqform::delEntry(void)
   {
  -    Prototype Unimp;
  -    Unimp.doMbox();
  +    // Remove the row at selection and focus to the next row
  +    if (m_pMaintable->currentRow() + 1 != m_pMaintable->numRows()) {
  +        m_pMaintable->setCurrentCell(m_pMaintable->currentRow() + 1, m_pMaintable->currentColumn());
  +        m_pMaintable->removeRow(m_pMaintable->currentRow() - 1);
  +    }
  +    else // Special case to handle removing of only row or last row
  +        m_pMaintable->removeRow(m_pMaintable->currentRow());
   }
   
   //

From ossp-cvs-owner@ossp.org  Tue Nov 26 20:33:37 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8C73176AD9; Tue, 26 Nov 2002 20:33:37 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq titamount.cpp titassist.cpp titconst.h tit...
Message-Id: <20021126193337.8C73176AD9@mail.ossp.org>
Date: Tue, 26 Nov 2002 20:33:37 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   26-Nov-2002 20:33:37
  Branch: HEAD                             Handle: 2002112619333601

  Modified files:
    ossp-pkg/titraq         titamount.cpp titassist.cpp titconst.h titslot.cpp

  Log:
    Improved date and time processing and validation, including missing or
    defaults values.

  Summary:
    Revision    Changes     Path
    1.2         +12 -9      ossp-pkg/titraq/titamount.cpp
    1.22        +1  -1      ossp-pkg/titraq/titassist.cpp
    1.5         +1  -0      ossp-pkg/titraq/titconst.h
    1.18        +9  -9      ossp-pkg/titraq/titslot.cpp
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/titamount.cpp
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 titamount.cpp
  --- ossp-pkg/titraq/titamount.cpp	25 Nov 2002 15:45:56 -0000	1.1
  +++ ossp-pkg/titraq/titamount.cpp	26 Nov 2002 19:33:36 -0000	1.2
  @@ -1,8 +1,7 @@
   #include <qregexp.h>
   
   #include "titamount.h"
  -
  -#define HOURAMOUNT 60
  +#include "titconst.h"
   
   
   // Sets a text formatted representation
  @@ -11,12 +10,16 @@
       int nTotal = 0;                                 // The total amount of minutes
       QRegExp Strexpr("(\\d+):(\\d+)");               // Pattern in amount text
       QString Stramount = QRegExp::escape(Strval);    // Incoming string escaped
  -    Strexpr.search(Stramount);
  -
  -    nTotal = Strexpr.cap(Strexpr.numCaptures() - 1).toInt() * HOURAMOUNT;   // Calculate hours
  -    nTotal += Strexpr.cap(Strexpr.numCaptures()).toInt();                   // Calculate minutes
   
  -    this->setValue(nTotal);
  +    if (Strval.isEmpty()) {                         // Shortcircuit in the
  +        this->setValue(0);                          // case of empty string
  +    }
  +    else {                                          // Do the real work then
  +        Strexpr.search(Stramount);
  +        nTotal = Strexpr.cap(Strexpr.numCaptures() - 1).toInt() * TITRAQ_MINSINHOUR;
  +        nTotal += Strexpr.cap(Strexpr.numCaptures()).toInt();
  +        this->setValue(nTotal);
  +    }
   }
   
   // Return a text formatted representation
  @@ -26,8 +29,8 @@
       int nHours = 0;
       int nMins = this->value();
   
  -    nHours = nMins / HOURAMOUNT;    // Calculate total hours
  -    nMins  = nMins % HOURAMOUNT;    // Calculate total minutes
  +    nHours = nMins / TITRAQ_MINSINHOUR;    // Calculate total hours
  +    nMins  = nMins % TITRAQ_MINSINHOUR;    // Calculate total minutes
       Strout = trUtf8("%1:%2").arg(nHours).arg(nMins); // Format string
   
       return Strout;
  Index: ossp-pkg/titraq/titassist.cpp
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 titassist.cpp
  --- ossp-pkg/titraq/titassist.cpp	26 Nov 2002 19:09:58 -0000	1.21
  +++ ossp-pkg/titraq/titassist.cpp	26 Nov 2002 19:33:37 -0000	1.22
  @@ -504,7 +504,7 @@
       // Configure attributes
       m_pAmount->setButtonSymbols(QSpinBox::PlusMinus);
       m_pAmount->setSuffix(trUtf8(" Minutes"));
  -    m_pAmount->setSpecialValueText(trUtf8("In progress"));
  +//    m_pAmount->setSpecialValueText(trUtf8("In progress"));
   
       m_pDatelayout->addWidget(m_pAmount);    // Finally add the amount editor
       QToolTip::add(m_pAmount, trUtf8("Task Amount"));
  Index: ossp-pkg/titraq/titconst.h
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 titconst.h
  --- ossp-pkg/titraq/titconst.h	26 Nov 2002 14:10:32 -0000	1.4
  +++ ossp-pkg/titraq/titconst.h	26 Nov 2002 19:33:37 -0000	1.5
  @@ -24,3 +24,4 @@
   #define TITRAQ_MAXAMOUNT        960         // Maximum valid amount
   #define TITRAQ_MINAMOUNT        0           // Minimum valid amount
   #define TITRAQ_STEPAMOUNT       15          // Line step interval
  +#define TITRAQ_MINSINHOUR       60          // Only idiots don't know this
  Index: ossp-pkg/titraq/titslot.cpp
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 titslot.cpp
  --- ossp-pkg/titraq/titslot.cpp	26 Nov 2002 19:09:58 -0000	1.17
  +++ ossp-pkg/titraq/titslot.cpp	26 Nov 2002 19:33:37 -0000	1.18
  @@ -45,10 +45,6 @@
   //
   void Titraqform::addEntry(void)
   {
  -//    // Add a row to end of table and focuses to it
  -//    m_pMaintable->setNumRows(m_pMaintable->numRows() + 1);
  -//    m_pMaintable->setCurrentCell(m_pMaintable->numRows(), 0);
  -
       // Add a row after selection and focus to the new row
       if (m_pMaintable->currentRow() + 1 != m_pMaintable->numRows()) {
           m_pMaintable->insertRows(m_pMaintable->currentRow());
  @@ -212,22 +208,26 @@
   
       if (!Textdate.isEmpty())
           m_pDateedit->setDate(QDate::fromString(Textdate, Qt::ISODate));
  +    else
  +        m_pDateedit->setDate(QDate::currentDate());
   
       if (!Textstart.isEmpty())
           m_pStarttime->setTime(QTime::fromString(Textstart, Qt::ISODate));
  +    else
  +        m_pStarttime->setTime(QTime::QTime(0, 0));
   
       if (!Textfinish.isEmpty())
           m_pEndtime->setTime(QTime::fromString(Textfinish, Qt::ISODate));
  +    else
  +        m_pEndtime->setTime(QTime::QTime(0, 0));
   
  -    if (!Textamount.isEmpty())
  -        m_pAmount->setText(Textamount);
  +    m_pAmount->setText(Textamount);
   
       // Process the task combo box to compress text length
  -    Texttask.remove(0, Shorten.search(Texttask) + 1);   // Strip leading slash
  +    Texttask.remove(0, Shorten.search(Texttask) + 1); // Strip leading slash
       m_pTasks->setCurrentText(Texttask);
   
  -    if (!Textremark.isEmpty())
  -        m_pRemark->setText(Textremark);
  +    m_pRemark->setText(Textremark);
   }
   
   //

From ossp-cvs-owner@ossp.org  Tue Nov 26 20:41:17 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id ACC2876AD9; Tue, 26 Nov 2002 20:41:17 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq titassist.cpp
Message-Id: <20021126194117.ACC2876AD9@mail.ossp.org>
Date: Tue, 26 Nov 2002 20:41:17 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   26-Nov-2002 20:41:17
  Branch: HEAD                             Handle: 2002112619411700

  Modified files:
    ossp-pkg/titraq         titassist.cpp

  Log:
    Better looking whatsthis boxes.

  Summary:
    Revision    Changes     Path
    1.23        +18 -18     ossp-pkg/titraq/titassist.cpp
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/titassist.cpp
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 titassist.cpp
  --- ossp-pkg/titraq/titassist.cpp	26 Nov 2002 19:33:37 -0000	1.22
  +++ ossp-pkg/titraq/titassist.cpp	26 Nov 2002 19:41:17 -0000	1.23
  @@ -97,9 +97,9 @@
           throw Genexcept("Main window file new action creation failed.");
       connect(m_pFilenewact, SIGNAL(activated()), this, SLOT(newDoc()));
       const char *kszFilenewtext = "<p><img source=\"filenew\"> "
  -                                        "Click this button to make<br>a "
  -                                        "<em>blank file</em>. You can also<br>"
  -                                        "select the <b>New</b> command<br>from "
  +                                        "Click this button to make a "
  +                                        "<em>blank file</em>. You can also "
  +                                        "select the <b>New</b> command from "
                                           "the <b>File</b> menu.</p>";
       m_pFilenewact->setWhatsThis(kszFilenewtext);
   
  @@ -109,9 +109,9 @@
           throw Genexcept("Main window file open action creation failed.");
       connect(m_pFileopenact, SIGNAL(activated()), this, SLOT(chooseFile()));
       const char *kszFileopentext = "<p><img source=\"fileopen\"> "
  -                                  "Click this button to open<br>a "
  -                                  "<em>new file</em>. You can also select<br>"
  -                                  "the <b>Open</b> command from the<br>"
  +                                  "Click this button to open a "
  +                                  "<em>new file</em>. You can also select "
  +                                  "the <b>Open</b> command from the "
                                     "<b>File</b> menu.</p>";
       m_pFileopenact->setWhatsThis(kszFileopentext);
   
  @@ -121,10 +121,10 @@
           throw Genexcept("Main window file save action creation failed.");
       connect(m_pFilesaveact, SIGNAL(activated()), this, SLOT(saveFile()));
       const char *kszFilesavetext = "<p><img source=\"filesave\"> "
  -                                  "Click this button to <em>save</em><br>"
  -                                  "the file you are editing. You<br>will be "
  -                                  "prompted for a file<br>name. You can also "
  -                                  "select<br>the<b> Save</b> command from<br>"
  +                                  "Click this button to <em>save</em> "
  +                                  "the file you are editing. You will be "
  +                                  "prompted for a file name. You can also "
  +                                  "select the<b> Save</b> command from "
                                     "the <b>File</b> menu.</p>";
       m_pFilesaveact->setWhatsThis(kszFilesavetext);
   
  @@ -153,7 +153,7 @@
           throw Genexcept("Main window cut edit action creation failed.");
       connect(m_pCutact, SIGNAL(activated()), this, SLOT(cutEntry()));
       const char *kszCuttext = "<p><img source=\"cut\"> "
  -                                   "Click this button to cut an <em>entry</em>."
  +                                   "Click this button to cut an <em>entry</em>. "
                                      "You can also select the <b>Cut</b> command "
                                      "from the <b>Edit</b> menu.</p>";
       m_pCutact->setWhatsThis(kszCuttext);
  @@ -164,7 +164,7 @@
           throw Genexcept("Main window copy edit action creation failed.");
       connect(m_pCopyact, SIGNAL(activated()), this, SLOT(copyEntry()));
       const char *kszCopytext = "<p><img source=\"copy\"> "
  -                                   "Click this button to copy an <em>entry</em>."
  +                                   "Click this button to copy an <em>entry</em>. "
                                      "You can also select the <b>Copy</b> command "
                                      "from the <b>Edit</b> menu.</p>";
       m_pCopyact->setWhatsThis(kszCopytext);
  @@ -175,7 +175,7 @@
           throw Genexcept("Main window paste edit action creation failed.");
       connect(m_pPasteact, SIGNAL(activated()), this, SLOT(pasteEntry()));
       const char *kszPastetext = "<p><img source=\"paste\"> "
  -                                   "Click this button to paste an <em>entry</em>."
  +                                   "Click this button to paste an <em>entry</em>. "
                                      "You can also select the <b>Paste</b> command "
                                      "from the <b>Edit</b> menu.</p>";
       m_pPasteact->setWhatsThis(kszPastetext);
  @@ -186,7 +186,7 @@
           throw Genexcept("Main window add row action creation failed.");
       connect(m_pAddrowact, SIGNAL(activated()), this, SLOT(addEntry()));
       const char *kszAddrowtext = "<p><img source=\"rowadd\"> "
  -                                "Click this button to add a <em>new row</em>."
  +                                "Click this button to add a <em>new row</em>. "
                                   "You can also select the <b>Add</b> command "
                                   "from the <b>Edit</b> menu.</p>";
       m_pAddrowact->setWhatsThis(kszAddrowtext);
  @@ -197,7 +197,7 @@
           throw Genexcept("Main window delete row action creation failed.");
       connect(m_pDelrowact, SIGNAL(activated()), this, SLOT(delEntry()));
       const char *kszDelrowtext = "<p><img source=\"rowdel\"> "
  -                                   "Click this button to delete a <em>row</em>."
  +                                   "Click this button to delete a <em>row</em>. "
                                      "You can also select the <b>Delete</b> command "
                                      "from the <b>Edit</b> menu.</p>";
       m_pDelrowact->setWhatsThis(kszDelrowtext);
  @@ -208,9 +208,9 @@
           throw Genexcept("Main window write data action creation failed.");
       connect(m_pWritedataact, SIGNAL(activated()), this, SLOT(writeEntry()));
       const char *kszWritedatatext = "<p><img source=\"ossplogo\"> "
  -                                   "Click this button to <em>write out</em> your accounting data."
  -                                   "You can also select the <b>Save</b> command "
  -                                   "from the <b>File</b> menu.</p>";
  +                                   "Click this button to <em>write out</em> "
  +                                   "your accounting data. You can also select the "
  +                                   "<b>Save</b> command from the <b>File</b> menu.</p>";
       m_pWritedataact->setWhatsThis(kszWritedatatext);
   }
   

From ossp-cvs-owner@ossp.org  Tue Nov 26 21:25:17 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5CA6D76A5A; Tue, 26 Nov 2002 21:25:17 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq titassist.cpp titconst.h titraq.h titslot....
Message-Id: <20021126202517.5CA6D76A5A@mail.ossp.org>
Date: Tue, 26 Nov 2002 21:25:17 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   26-Nov-2002 21:25:17
  Branch: HEAD                             Handle: 2002112620251600

  Modified files:
    ossp-pkg/titraq         titassist.cpp titconst.h titraq.h titslot.cpp

  Log:
    Toolbar showing and hiding on demand.

  Summary:
    Revision    Changes     Path
    1.24        +49 -41     ossp-pkg/titraq/titassist.cpp
    1.6         +11 -6      ossp-pkg/titraq/titconst.h
    1.27        +3  -0      ossp-pkg/titraq/titraq.h
    1.19        +30 -12     ossp-pkg/titraq/titslot.cpp
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/titassist.cpp
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 titassist.cpp
  --- ossp-pkg/titraq/titassist.cpp	26 Nov 2002 19:41:17 -0000	1.23
  +++ ossp-pkg/titraq/titassist.cpp	26 Nov 2002 20:25:16 -0000	1.24
  @@ -257,52 +257,54 @@
       pEditpopup->insertSeparator();
       pEditpopup->insertItem("Preferences...", this, SLOT(configPrefs()));
   
  -    // Construct the view menu
  -    QPopupMenu *pViewpopup = new QPopupMenu(this);
  -    QPopupMenu *pTbarspopup = new QPopupMenu(this);
  -    pTbarspopup->insertTearOffHandle();
  -    pTbarspopup->setCheckable(true);
  -    QPopupMenu *pColspopup = new QPopupMenu(this);
  -    pColspopup->insertTearOffHandle();
  -    pColspopup->setCheckable(true);
  +    // Construct the view menu and submenus
  +    m_pViewpopup = new QPopupMenu(this);
  +    m_pTbarspopup = new QPopupMenu(this);
  +    m_pColspopup = new QPopupMenu(this);
  +
  +    // Give the new menus krass attributes
  +    m_pTbarspopup->insertTearOffHandle();
  +    m_pTbarspopup->setCheckable(true);
  +    m_pColspopup->insertTearOffHandle();
  +    m_pColspopup->setCheckable(true);
   
       // Major sanity check wrapped in one call
  -    if (!(pViewpopup && pTbarspopup && pColspopup))
  +    if (!(m_pViewpopup && m_pTbarspopup && m_pColspopup))
           throw Genexcept("Main window view popups creation failed.");
   
       // Populate the view menu with subitems
  -    m_pMenubar->insertItem(trUtf8("&View"), pViewpopup);
  -    pViewpopup->insertItem(trUtf8("&Editing"), this, SLOT(editingView()));
  -    nMenuid = pViewpopup->insertItem(trUtf8("&Timing"), this, SLOT(timingView()));
  -    pViewpopup->setItemEnabled(nMenuid, false);
  -    pViewpopup->insertSeparator();
  -    pViewpopup->insertItem(trUtf8("&Toolbars"), pTbarspopup);
  -    nMenuid = pTbarspopup->insertItem(trUtf8("&File"), this, SLOT(showFilebar()));
  -    pTbarspopup->setItemChecked(nMenuid, true);
  -    nMenuid = pTbarspopup->insertItem(trUtf8("&Edit"), this, SLOT(showEditbar()));
  -    pTbarspopup->setItemChecked(nMenuid, true);
  -    nMenuid = pTbarspopup->insertItem(trUtf8("&Whats this"), this, SLOT(showWhatsbar()));
  -    pTbarspopup->setItemChecked(nMenuid, true);
  -    pViewpopup->insertSeparator();
  -    pViewpopup->insertItem(trUtf8("&Columns"), pColspopup);
  -    nMenuid = pColspopup->insertItem(trUtf8("&Line number"), this, SLOT(showLinecol()));
  -    pColspopup->setItemEnabled(nMenuid, false);
  -    nMenuid = pColspopup->insertItem(trUtf8("&GUID"), this, SLOT(showGuidcol()));
  -    pColspopup->setItemEnabled(nMenuid, false);
  -    nMenuid = pColspopup->insertItem(trUtf8("&Date"), this, SLOT(showDatecol()));
  -    pColspopup->setItemEnabled(nMenuid, false);
  -    nMenuid = pColspopup->insertItem(trUtf8("&User"), this, SLOT(showUsercol()));
  -    pColspopup->setItemEnabled(nMenuid, false);
  -    nMenuid = pColspopup->insertItem(trUtf8("&Task"), this, SLOT(showTaskcol()));
  -    pColspopup->setItemEnabled(nMenuid, false);
  -    nMenuid = pColspopup->insertItem(trUtf8("&Start time"), this, SLOT(showStartcol()));
  -    pColspopup->setItemEnabled(nMenuid, false);
  -    nMenuid = pColspopup->insertItem(trUtf8("&Finish time"), this, SLOT(showFinishcol()));
  -    pColspopup->setItemEnabled(nMenuid, false);
  -    nMenuid = pColspopup->insertItem(trUtf8("&Amount time"), this, SLOT(showAmountcol()));
  -    pColspopup->setItemEnabled(nMenuid, false);
  -    nMenuid = pColspopup->insertItem(trUtf8("&Remark"), this, SLOT(showRemarkcol()));
  -    pColspopup->setItemEnabled(nMenuid, false);
  +    m_pMenubar->insertItem(trUtf8("&View"), m_pViewpopup);
  +    m_pViewpopup->insertItem(trUtf8("&Editing"), this, SLOT(editingView()));
  +    nMenuid = m_pViewpopup->insertItem(trUtf8("&Timing"), this, SLOT(timingView()));
  +    m_pViewpopup->setItemEnabled(nMenuid, false);
  +    m_pViewpopup->insertSeparator();
  +    m_pViewpopup->insertItem(trUtf8("&Toolbars"), m_pTbarspopup);
  +    nMenuid = m_pTbarspopup->insertItem(trUtf8("&File"), this, SLOT(showFilebar()));
  +    m_pTbarspopup->setItemChecked(nMenuid, true);
  +    nMenuid = m_pTbarspopup->insertItem(trUtf8("&Edit"), this, SLOT(showEditbar()));
  +    m_pTbarspopup->setItemChecked(nMenuid, true);
  +    nMenuid = m_pTbarspopup->insertItem(trUtf8("&Whats this"), this, SLOT(showWhatsbar()));
  +    m_pTbarspopup->setItemChecked(nMenuid, true);
  +    m_pViewpopup->insertSeparator();
  +    m_pViewpopup->insertItem(trUtf8("&Columns"), m_pColspopup);
  +    nMenuid = m_pColspopup->insertItem(trUtf8("&Line number"), this, SLOT(showLinecol()));
  +    m_pColspopup->setItemEnabled(nMenuid, false);
  +    nMenuid = m_pColspopup->insertItem(trUtf8("&GUID"), this, SLOT(showGuidcol()));
  +    m_pColspopup->setItemEnabled(nMenuid, false);
  +    nMenuid = m_pColspopup->insertItem(trUtf8("&Date"), this, SLOT(showDatecol()));
  +    m_pColspopup->setItemEnabled(nMenuid, false);
  +    nMenuid = m_pColspopup->insertItem(trUtf8("&User"), this, SLOT(showUsercol()));
  +    m_pColspopup->setItemEnabled(nMenuid, false);
  +    nMenuid = m_pColspopup->insertItem(trUtf8("&Task"), this, SLOT(showTaskcol()));
  +    m_pColspopup->setItemEnabled(nMenuid, false);
  +    nMenuid = m_pColspopup->insertItem(trUtf8("&Start time"), this, SLOT(showStartcol()));
  +    m_pColspopup->setItemEnabled(nMenuid, false);
  +    nMenuid = m_pColspopup->insertItem(trUtf8("&Finish time"), this, SLOT(showFinishcol()));
  +    m_pColspopup->setItemEnabled(nMenuid, false);
  +    nMenuid = m_pColspopup->insertItem(trUtf8("&Amount time"), this, SLOT(showAmountcol()));
  +    m_pColspopup->setItemEnabled(nMenuid, false);
  +    nMenuid = m_pColspopup->insertItem(trUtf8("&Remark"), this, SLOT(showRemarkcol()));
  +    m_pColspopup->setItemEnabled(nMenuid, false);
   
       // Pad spacing to force help menu to appear far right
       m_pMenubar->insertSeparator();
  @@ -331,6 +333,8 @@
       if (m_pFiletools == NULL)                   // Sanity check
           throw Genexcept("File tool bar creation failed.");
       m_pFiletools->setLabel(trUtf8("File Ops"));
  +    m_pFiletools->setOpaqueMoving(true);
  +    m_pFiletools->setCloseMode(QDockWindow::Never);
       m_pFilenewact->addTo(m_pFiletools);
       m_pFileopenact->addTo(m_pFiletools);
       m_pFilesaveact->addTo(m_pFiletools);
  @@ -340,6 +344,8 @@
       if (m_pEdittools == NULL)                   // Sanity check
           throw Genexcept("Edit tool bar creation failed.");
       m_pEdittools->setLabel(trUtf8("Edit Ops"));
  +    m_pEdittools->setOpaqueMoving(true);
  +    m_pEdittools->setCloseMode(QDockWindow::Never);
       m_pCutact->addTo(m_pEdittools);
       m_pCopyact->addTo(m_pEdittools);
       m_pPasteact->addTo(m_pEdittools);
  @@ -352,6 +358,8 @@
       if (m_pWhatstools == NULL)                  // Sanity check
           throw Genexcept("Whats this tool bar creation failed.");
       m_pWhatstools->setLabel(trUtf8("Whats this"));
  +    m_pWhatstools->setOpaqueMoving(true);
  +    m_pWhatstools->setCloseMode(QDockWindow::Never);
       QWhatsThis::whatsThisButton(m_pWhatstools); // Preconfigured whats this button
   }
   
  Index: ossp-pkg/titraq/titconst.h
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 titconst.h
  --- ossp-pkg/titraq/titconst.h	26 Nov 2002 19:33:37 -0000	1.5
  +++ ossp-pkg/titraq/titconst.h	26 Nov 2002 20:25:16 -0000	1.6
  @@ -13,12 +13,17 @@
   #define TITRAQ_DEFLOCALLOG      "no"
   
   // Indexes of table columns
  -#define TITRAQ_INDEXDATE        0
  -#define TITRAQ_INDEXSTART       1
  -#define TITRAQ_INDEXFINISH      2
  -#define TITRAQ_INDEXAMOUNT      3
  -#define TITRAQ_INDEXTASK        4
  -#define TITRAQ_INDEXREMARK      5
  +#define TITRAQ_IDXDATE          0
  +#define TITRAQ_IDXSTART         1
  +#define TITRAQ_IDXFINISH        2
  +#define TITRAQ_IDXAMOUNT        3
  +#define TITRAQ_IDXTASK          4
  +#define TITRAQ_IDXREMARK        5
  +
  +// Indexes of popup menu submenus
  +#define TITRAQ_IDXFILEBAR       1
  +#define TITRAQ_IDXEDITBAR       2
  +#define TITRAQ_IDXWHATBAR       3
   
   // Values
   #define TITRAQ_MAXAMOUNT        960         // Maximum valid amount
  Index: ossp-pkg/titraq/titraq.h
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 titraq.h
  --- ossp-pkg/titraq/titraq.h	26 Nov 2002 17:23:51 -0000	1.26
  +++ ossp-pkg/titraq/titraq.h	26 Nov 2002 20:25:16 -0000	1.27
  @@ -127,6 +127,9 @@
   private:
       // Owned by QMainWindow
       QMenuBar    *m_pMenubar;
  +    QPopupMenu  *m_pViewpopup;          // Saved for manipulating views
  +    QPopupMenu  *m_pTbarspopup;         // Saved for manipulating toolbars
  +    QPopupMenu  *m_pColspopup;          // Saved for manipulating columns
       QStatusBar  *m_pStatbar;
   
       // Belong to us
  Index: ossp-pkg/titraq/titslot.cpp
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 titslot.cpp
  --- ossp-pkg/titraq/titslot.cpp	26 Nov 2002 19:33:37 -0000	1.18
  +++ ossp-pkg/titraq/titslot.cpp	26 Nov 2002 20:25:16 -0000	1.19
  @@ -199,12 +199,12 @@
       QRegExp Shorten("/(\\w+)$");    // For stripping prefix off the current task
   
       // Field strings to check for validity and process
  -    QString Textdate(m_pMaintable->text(nRow, TITRAQ_INDEXDATE));
  -    QString Textstart(m_pMaintable->text(nRow, TITRAQ_INDEXAMOUNT));
  -    QString Textfinish(m_pMaintable->text(nRow, TITRAQ_INDEXAMOUNT));
  -    QString Textamount(m_pMaintable->text(nRow, TITRAQ_INDEXAMOUNT));
  -    QString Texttask(m_pMaintable->text(nRow, TITRAQ_INDEXTASK));
  -    QString Textremark(m_pMaintable->text(nRow, TITRAQ_INDEXREMARK));
  +    QString Textdate(m_pMaintable->text(nRow, TITRAQ_IDXDATE));
  +    QString Textstart(m_pMaintable->text(nRow, TITRAQ_IDXAMOUNT));
  +    QString Textfinish(m_pMaintable->text(nRow, TITRAQ_IDXAMOUNT));
  +    QString Textamount(m_pMaintable->text(nRow, TITRAQ_IDXAMOUNT));
  +    QString Texttask(m_pMaintable->text(nRow, TITRAQ_IDXTASK));
  +    QString Textremark(m_pMaintable->text(nRow, TITRAQ_IDXREMARK));
   
       if (!Textdate.isEmpty())
           m_pDateedit->setDate(QDate::fromString(Textdate, Qt::ISODate));
  @@ -262,8 +262,14 @@
   //
   void Titraqform::showFilebar(void)
   {
  -    Prototype Unimp;
  -    Unimp.doMbox();
  +    if (m_pFiletools->isVisible()) {
  +        m_pFiletools->hide();
  +        m_pTbarspopup->setItemChecked(m_pTbarspopup->idAt(TITRAQ_IDXFILEBAR), false);
  +    }
  +    else {
  +        m_pFiletools->show();
  +        m_pTbarspopup->setItemChecked(m_pTbarspopup->idAt(TITRAQ_IDXFILEBAR), true);
  +    }
   }
   
   //
  @@ -271,8 +277,14 @@
   //
   void Titraqform::showEditbar(void)
   {
  -    Prototype Unimp;
  -    Unimp.doMbox();
  +    if (m_pEdittools->isVisible()) {
  +        m_pEdittools->hide();
  +        m_pTbarspopup->setItemChecked(m_pTbarspopup->idAt(TITRAQ_IDXEDITBAR), false);
  +    }
  +    else {
  +        m_pEdittools->show();
  +        m_pTbarspopup->setItemChecked(m_pTbarspopup->idAt(TITRAQ_IDXEDITBAR), true);
  +    }
   }
   
   //
  @@ -280,8 +292,14 @@
   //
   void Titraqform::showWhatsbar(void)
   {
  -    Prototype Unimp;
  -    Unimp.doMbox();
  +    if (m_pWhatstools->isVisible()) {
  +        m_pWhatstools->hide();
  +        m_pTbarspopup->setItemChecked(m_pTbarspopup->idAt(TITRAQ_IDXWHATBAR), false);
  +    }
  +    else {
  +        m_pWhatstools->show();
  +        m_pTbarspopup->setItemChecked(m_pTbarspopup->idAt(TITRAQ_IDXWHATBAR), true);
  +    }
   }
   
   //

From ossp-cvs-owner@ossp.org  Tue Nov 26 21:38:20 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BF88076AD9; Tue, 26 Nov 2002 21:38:19 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq titassist.cpp titraq.cpp titraq.h titslot....
Message-Id: <20021126203819.BF88076AD9@mail.ossp.org>
Date: Tue, 26 Nov 2002 21:38:19 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   26-Nov-2002 21:38:19
  Branch: HEAD                             Handle: 2002112620381900

  Modified files:
    ossp-pkg/titraq         titassist.cpp titraq.cpp titraq.h titslot.cpp

  Log:
    Remove all push button widgets, since the enhanced edit tool has the
    same functionality built in. Also remove the writeData callback, to
    favor a better approach.

  Summary:
    Revision    Changes     Path
    1.25        +2  -68     ossp-pkg/titraq/titassist.cpp
    1.22        +0  -13     ossp-pkg/titraq/titraq.cpp
    1.28        +0  -11     ossp-pkg/titraq/titraq.h
    1.20        +0  -9      ossp-pkg/titraq/titslot.cpp
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/titassist.cpp
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 titassist.cpp
  --- ossp-pkg/titraq/titassist.cpp	26 Nov 2002 20:25:16 -0000	1.24
  +++ ossp-pkg/titraq/titassist.cpp	26 Nov 2002 20:38:19 -0000	1.25
  @@ -201,17 +201,6 @@
                                      "You can also select the <b>Delete</b> command "
                                      "from the <b>Edit</b> menu.</p>";
       m_pDelrowact->setWhatsThis(kszDelrowtext);
  -
  -    // Write data action
  -    m_pWritedataact = new QAction(trUtf8("Write Data"), trUtf8("&Write data"), 0, this, "Writedata");
  -    if (m_pWritedataact == NULL)    // Sanity check
  -        throw Genexcept("Main window write data action creation failed.");
  -    connect(m_pWritedataact, SIGNAL(activated()), this, SLOT(writeEntry()));
  -    const char *kszWritedatatext = "<p><img source=\"ossplogo\"> "
  -                                   "Click this button to <em>write out</em> "
  -                                   "your accounting data. You can also select the "
  -                                   "<b>Save</b> command from the <b>File</b> menu.</p>";
  -    m_pWritedataact->setWhatsThis(kszWritedatatext);
   }
   
   //
  @@ -376,22 +365,20 @@
       m_pCenframe->setFrameShadow(QFrame::Sunken);
       setCentralWidget(m_pCenframe);
   
  -    // Layout controls for table, editing widgets, and buttons
  +    // Layout controls for table, editing widgets
       m_pMainlayout = new QVBoxLayout(m_pCenframe, 10, 6, "Mainlayout");  // For layouts
       m_pPackagelayout = new QVBoxLayout(0, 0, 6, "Packagelayout");       // For table
       m_pDatelayout = new QHBoxLayout(0, 0, 6, "Datelayout");             // For dates
       m_pTasklayout = new QHBoxLayout(0, 0, 6, "Tasklayout");             // For tasks
  -    m_pControllayout = new QHBoxLayout(0, 0, 6, "Controllayout");       // For buttons
   
       // Major sanity check wrapped in one call
  -    if (!(m_pMainlayout && m_pPackagelayout && m_pDatelayout && m_pTasklayout && m_pControllayout))
  +    if (!(m_pMainlayout && m_pPackagelayout && m_pDatelayout && m_pTasklayout))
           throw Genexcept("Main window layout creation failed.");
   
       // Specify ordering of the layouts
       m_pMainlayout->addLayout(m_pPackagelayout);
       m_pMainlayout->addLayout(m_pDatelayout);
       m_pMainlayout->addLayout(m_pTasklayout);
  -    m_pMainlayout->addLayout(m_pControllayout);
   }
   
   //
  @@ -441,11 +428,6 @@
   //    connect(m_pMaintable, SIGNAL(clicked(int, int, int, const QPoint&)), this, SLOT(updEdit(int, int)));
   //    connect(m_pMaintable, SIGNAL(doubleClicked(int, int, int, const QPoint&)), this, SLOT(updEdit(int, int)));
   //    connect(m_pMaintable, SIGNAL(valueChanged(int, int)), this, SLOT(tableChanged(int, int)));
  -
  -//    // Button action signals
  -//    connect(AddPushButton, SIGNAL(clicked()), this, SLOT(AddRow()));
  -//    connect(DeletePushButton, SIGNAL(clicked()), this, SLOT(DelRow()));
  -//    connect(WritePushButton, SIGNAL(clicked()), this, SLOT(accept()));
   }
   
   //
  @@ -578,52 +560,4 @@
   //    m_pEndtime->valueChanged(const QTime &time);
   //    m_pAmount->valueChanged(int value);
   //    m_pTasks->textChanged(const QString &string);
  -}
  -
  -//
  -// Construct the buttons
  -//
  -void Titraqform::setupButtons(void)
  -{
  -    // Tuple push button add
  -    m_pAddbutton = new QPushButton(m_pCenframe, "AddButton");
  -    if (m_pAddbutton == NULL)   // Sanity check
  -        throw Genexcept("Main window add button creation failed.");
  -    m_pAddbutton->setCursor(QCursor(13));
  -    m_pAddbutton->setText(trUtf8("&Add"));
  -    QToolTip::add(m_pAddbutton, trUtf8("Add Entry"));
  -    connect(m_pAddbutton, SIGNAL(clicked()), this, SLOT(addEntry()));
  -    m_pControllayout->addWidget(m_pAddbutton);
  -
  -    // Tuple push button delete
  -    m_pDeletebutton = new QPushButton(m_pCenframe, "Deletebutton");
  -    if (m_pDeletebutton == NULL)    // Sanity check
  -        throw Genexcept("Main window delete button creation failed.");
  -    m_pDeletebutton->setCursor(QCursor(13));
  -    m_pDeletebutton->setText(trUtf8("&Delete"));
  -    m_pDeletebutton->setFlat(false);
  -    QToolTip::add(m_pDeletebutton, trUtf8("Delete Entry"));
  -    connect(m_pDeletebutton, SIGNAL(clicked()), this, SLOT(delEntry()));
  -    m_pControllayout->addWidget(m_pDeletebutton);
  -
  -    // Tuple push button write
  -    m_pWritebutton = new QPushButton(m_pCenframe, "Writebutton");
  -    if (m_pWritebutton == NULL) // Sanity check
  -        throw Genexcept("Main window write button creation failed.");
  -    m_pWritebutton->setCursor(QCursor(13));
  -    m_pWritebutton->setText(trUtf8("&Write"));
  -    QToolTip::add(m_pWritebutton, trUtf8("Write Entry"));
  -    connect(m_pWritebutton, SIGNAL(clicked()), this, SLOT(writeEntry()));
  -    m_pControllayout->addWidget(m_pWritebutton);
  -
  -    // Tuple push button quit
  -    m_pQuitbutton = new QPushButton(m_pCenframe, "Quitbutton");
  -    if (m_pQuitbutton == NULL)  // Sanity check
  -        throw Genexcept("Main window quit button creation failed.");
  -    m_pQuitbutton->setCursor(QCursor(13));
  -    m_pQuitbutton->setText(trUtf8("&Quit"));
  -    m_pQuitbutton->setFlat(false);
  -    QToolTip::add(m_pQuitbutton, trUtf8("Quit titraq"));
  -    connect(m_pQuitbutton, SIGNAL(clicked()), qApp, SLOT(quit()));
  -    m_pControllayout->addWidget(m_pQuitbutton);
   }
  Index: ossp-pkg/titraq/titraq.cpp
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 titraq.cpp
  --- ossp-pkg/titraq/titraq.cpp	26 Nov 2002 14:10:32 -0000	1.21
  +++ ossp-pkg/titraq/titraq.cpp	26 Nov 2002 20:38:19 -0000	1.22
  @@ -3,17 +3,6 @@
   #include "titrex.h"             // Exception classes
   
   
  -// Overload init for custom initialization of the app
  -void Titraqform::init(void)
  -{
  -    // Set fill color of buttons
  -    m_pAddbutton->setPaletteBackgroundColor(QColor(196, 196, 176));
  -    m_pDeletebutton->setPaletteBackgroundColor(QColor(196, 196, 176));
  -    m_pWritebutton->setPaletteBackgroundColor(QColor(206, 192, 176));
  -    m_pQuitbutton->setPaletteBackgroundColor(QColor(196, 196, 176));
  -    m_pMaintable->setFocus();               // Focus on the table
  -}
  -
   //
   // Construct a Titraqform which is a child of 'pParent', with the
   // name 'kszName' and widget flags set to 'Flags'
  @@ -45,14 +34,12 @@
           setupStatusbar();
           setupTable();
           setupEditlay();
  -        setupButtons();
       }
       catch (Genexcept& Genex) {
           Genex.reportErr();
           exit(1);
       }
   
  -    init(); // Initialize signal and slot connections
       m_pStatbar->message(trUtf8("Ready"));   // Signal a ready condition
   }
   
  Index: ossp-pkg/titraq/titraq.h
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 titraq.h
  --- ossp-pkg/titraq/titraq.h	26 Nov 2002 20:25:16 -0000	1.27
  +++ ossp-pkg/titraq/titraq.h	26 Nov 2002 20:38:19 -0000	1.28
  @@ -9,7 +9,6 @@
   #include <qtoolbar.h>
   #include <qstatusbar.h>
   #include <qimage.h>
  -#include <qpushbutton.h>
   #include <qdatetimeedit.h>
   #include <qspinbox.h>
   #include <qlineedit.h>
  @@ -72,20 +71,12 @@
       QComboBox   *m_pTasks;
       QLineEdit   *m_pRemark;
   
  -    // Push buttons in control layout
  -    QPushButton *m_pAddbutton;
  -    QPushButton *m_pDeletebutton;
  -    QPushButton *m_pWritebutton;
  -    QPushButton *m_pQuitbutton;
  -
   protected slots:
  -    virtual void init(void);            // Override init to include custom controls
       void cutEntry(void);                // Cut a task entry from the list
       void copyEntry(void);               // Copy a task entry from the list
       void pasteEntry(void);              // Paste a task entry to the list
       void addEntry(void);                // Add a task entry to the list
       void delEntry(void);                // Delete a task entry from the list
  -    void writeEntry(void);              // Write the task list to a filedescriptor
       void newDoc(void);                  // Make and display a new document window
       void chooseFile(void);              // Choose a file using a handy file dialog
       void saveFile(void);                // Serialize to the current file
  @@ -122,7 +113,6 @@
       QVBoxLayout *m_pPackagelayout;      // Main table control
       QHBoxLayout *m_pDatelayout;         // Lower date and time widgets
       QHBoxLayout *m_pTasklayout;         // Lower task and remark widgets
  -    QHBoxLayout *m_pControllayout;      // Lower control buttons
   
   private:
       // Owned by QMainWindow
  @@ -156,7 +146,6 @@
       void setupCentralwidget(void);      // Assemble main Frame widget
       void setupTable(void);              // Table widget
       void setupEditlay(void);            // Editing lay
  -    void setupButtons(void);            // Push button widgets
       void setupPieces(void);             // Assemble widget pieces
   
       // Data processing
  Index: ossp-pkg/titraq/titslot.cpp
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 titslot.cpp
  --- ossp-pkg/titraq/titslot.cpp	26 Nov 2002 20:25:16 -0000	1.19
  +++ ossp-pkg/titraq/titslot.cpp	26 Nov 2002 20:38:19 -0000	1.20
  @@ -71,15 +71,6 @@
   }
   
   //
  -// Write current data to a meta device
  -//
  -void Titraqform::writeEntry(void)
  -{
  -    Prototype Unimp;
  -    Unimp.doMbox();
  -}
  -
  -//
   // Make and display a new document window
   //
   void Titraqform::newDoc(void)

From ossp-cvs-owner@ossp.org  Tue Nov 26 22:18:48 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BC70076A5A; Tue, 26 Nov 2002 22:18:48 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq titassist.cpp titraq.h titslot.cpp
Message-Id: <20021126211848.BC70076A5A@mail.ossp.org>
Date: Tue, 26 Nov 2002 22:18:48 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   26-Nov-2002 22:18:48
  Branch: HEAD                             Handle: 2002112621184800

  Modified files:
    ossp-pkg/titraq         titassist.cpp titraq.h titslot.cpp

  Log:
    Doch, use a push button to confirm edition of a task tuple.

  Summary:
    Revision    Changes     Path
    1.26        +16 -1      ossp-pkg/titraq/titassist.cpp
    1.29        +3  -0      ossp-pkg/titraq/titraq.h
    1.21        +9  -2      ossp-pkg/titraq/titslot.cpp
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/titassist.cpp
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 titassist.cpp
  --- ossp-pkg/titraq/titassist.cpp	26 Nov 2002 20:38:19 -0000	1.25
  +++ ossp-pkg/titraq/titassist.cpp	26 Nov 2002 21:18:48 -0000	1.26
  @@ -215,7 +215,7 @@
           throw Genexcept("Main window menu bar nonexistant.");
   
       // Make an easter egg ;-)
  -    QToolTip::add(m_pMenubar, QRect(0, 0, 2, 2), "Easter egg");
  +    QToolTip::add(m_pMenubar, QRect(0, 0, 2, 2), "Easter Egg");
   
       // Construct and populate the file menu with actions
       QPopupMenu *pFilepopup = new QPopupMenu(this);
  @@ -553,6 +553,21 @@
                                          " this line control and typing the remarks you"
                                          " have about the task.");
       QWhatsThis::add(m_pRemark, kszRemarktext);
  +
  +    // Tuple push button confirm
  +    m_pConfirmbutton = new QPushButton(m_pCenframe, "Confirmbutton");
  +    if (m_pConfirmbutton == NULL)   // Sanity check
  +        throw Genexcept("Main window confirm button creation failed.");
  +    m_pConfirmbutton->setCursor(QCursor(13));
  +    m_pConfirmbutton->setText(trUtf8("&Confirm"));
  +    QToolTip::add(m_pConfirmbutton, trUtf8("Confirm Editing"));
  +    connect(m_pConfirmbutton, SIGNAL(clicked()), this, SLOT(confirmEdit()));
  +    m_pTasklayout->addWidget(m_pConfirmbutton); // Finally add the confirm button
  +
  +    // Whatsthis info for the confirm button
  +    const char *kszConfirmtext = trUtf8("Confirm any <em>row edition</em> by "
  +                                        "finally clicking on this button.");
  +    QWhatsThis::add(m_pConfirmbutton, kszConfirmtext);
   
   //    // Signals
   //    m_pDateedit->valueChanged(const QDate &date);
  Index: ossp-pkg/titraq/titraq.h
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 titraq.h
  --- ossp-pkg/titraq/titraq.h	26 Nov 2002 20:38:19 -0000	1.28
  +++ ossp-pkg/titraq/titraq.h	26 Nov 2002 21:18:48 -0000	1.29
  @@ -12,6 +12,7 @@
   #include <qdatetimeedit.h>
   #include <qspinbox.h>
   #include <qlineedit.h>
  +#include <qpushbutton.h>
   #include <qlayout.h>
   #include <qfile.h>
   
  @@ -70,6 +71,7 @@
       AmountBox   *m_pAmount;
       QComboBox   *m_pTasks;
       QLineEdit   *m_pRemark;
  +    QPushButton *m_pConfirmbutton;
   
   protected slots:
       void cutEntry(void);                // Cut a task entry from the list
  @@ -87,6 +89,7 @@
       void aboutQt(void);                 // Learn more about Qt
       void selAll(void);                  // Edit menu select all
       void updEdit(int, int);             // Update edit controls
  +    void confirmEdit(void);             // Confirm recent edition
       void configPrefs(void);             // Edit menu configure preferences
       void editingView(void);             // View menu editing
       void timingView(void);              // View menu timing
  Index: ossp-pkg/titraq/titslot.cpp
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 titslot.cpp
  --- ossp-pkg/titraq/titslot.cpp	26 Nov 2002 20:38:19 -0000	1.20
  +++ ossp-pkg/titraq/titslot.cpp	26 Nov 2002 21:18:48 -0000	1.21
  @@ -222,6 +222,13 @@
   }
   
   //
  +// Confirm any recent editions on a single row
  +//
  +void Titraqform::confirmEdit(void)
  +{
  +}
  +
  +//
   // Edit menu configure preferences
   //
   void Titraqform::configPrefs(void)
  @@ -235,8 +242,8 @@
   //
   void Titraqform::editingView(void)
   {
  -    Prototype Unimp;
  -    Unimp.doMbox();
  +    // All other view types are disabled until implemention, so this
  +    // body can remain empty, causing nothing to happen on selection.
   }
   
   //

From ossp-cvs-owner@ossp.org  Tue Nov 26 22:28:57 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 75E7A76A5A; Tue, 26 Nov 2002 22:28:57 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq titassist.cpp
Message-Id: <20021126212857.75E7A76A5A@mail.ossp.org>
Date: Tue, 26 Nov 2002 22:28:57 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   26-Nov-2002 22:28:57
  Branch: HEAD                             Handle: 2002112621285700

  Modified files:
    ossp-pkg/titraq         titassist.cpp

  Log:
    Fix help text.

  Summary:
    Revision    Changes     Path
    1.27        +22 -19     ossp-pkg/titraq/titassist.cpp
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/titassist.cpp
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 titassist.cpp
  --- ossp-pkg/titraq/titassist.cpp	26 Nov 2002 21:18:48 -0000	1.26
  +++ ossp-pkg/titraq/titassist.cpp	26 Nov 2002 21:28:57 -0000	1.27
  @@ -450,9 +450,9 @@
       QToolTip::add(m_pDateedit, trUtf8("Task Date"));
   
       // Whatsthis info for the date editor
  -    const char *kszDateedit = trUtf8("Edit the <em>task date</em> by clicking on"
  -                                     " the year, month, or day, and then changing their"
  -                                     " values with the arrow buttons.");
  +    const char *kszDateedit = "Edit the <em>task date</em> by clicking on "
  +                              "the year, month, or day, and then changing their "
  +                              "values with the arrow buttons.";
       QWhatsThis::add(m_pDateedit, kszDateedit);
   
       // Make the start time selector
  @@ -467,9 +467,9 @@
       QToolTip::add(m_pStarttime, trUtf8("Task Starting Time"));
   
       // Whatsthis info for the time editor
  -    const char *kszStarttime = trUtf8("Edit the <em>task starting time</em> by clicking on"
  -                                      " the hour and minute, and then changing their"
  -                                      " values with the arrow buttons.");
  +    const char *kszStarttime = "Edit the <em>task starting time</em> by clicking on "
  +                               "the hour and minute, and then changing their "
  +                               "values with the arrow buttons.";
       QWhatsThis::add(m_pStarttime, kszStarttime);
   
       // Make the end time selector
  @@ -481,9 +481,9 @@
       QToolTip::add(m_pEndtime, trUtf8("Task Ending Time"));
   
       // Whatsthis info for the time editor
  -    const char *kszEndtime = trUtf8("Edit the <em>task ending time</em> by clicking on"
  -                                      " the hour and minute, and then changing their"
  -                                      " values with the arrow buttons.");
  +    const char *kszEndtime = "Edit the <em>task ending time</em> by clicking on "
  +                             "the hour and minute, and then changing their "
  +                             "values with the arrow buttons.";
       QWhatsThis::add(m_pEndtime, kszEndtime);
   
       // Make the amount selector
  @@ -500,9 +500,9 @@
       QToolTip::add(m_pAmount, trUtf8("Task Amount"));
   
       // Whatsthis info for the amount editor
  -    const char *kszAmount = trUtf8("Edit the <em>task amount</em> by clicking on"
  -                                   " the amount, and then changing its"
  -                                   " value with the arrow buttons.");
  +    const char *kszAmount = "Edit the <em>task amount</em> by clicking on "
  +                            "the amount, and then changing its "
  +                            "value with the arrow buttons.";
       QWhatsThis::add(m_pAmount, kszAmount);
   
       // Populate the stringlist with fresh tasks
  @@ -533,8 +533,11 @@
           m_pTasks->setMinimumWidth(m_pTasks->listBox()->maxItemWidth());
       }
   
  -    // Finally add the task edit
  -    m_pTasklayout->addWidget(m_pTasks);
  +    // Whatsthis info for the remark line
  +    const char *kszTasktext = "Choose a <em>task account</em> by clicking on "
  +                              "this box, and choosing whichever item most "
  +                              "closely resembles your task.";
  +    m_pTasklayout->addWidget(m_pTasks); // Finally add the task edit
   
       // Make the Remark line
       m_pRemark = new QLineEdit(m_pCenframe, "Remark");
  @@ -549,9 +552,9 @@
       m_pTasklayout->addWidget(m_pRemark);    // Finally add the remark line
   
       // Whatsthis info for the remark line
  -    const char *kszRemarktext = trUtf8("Edit the <em>task remarks</em> by clicking on"
  -                                       " this line control and typing the remarks you"
  -                                       " have about the task.");
  +    const char *kszRemarktext = "Edit the <em>task remarks</em> by clicking on "
  +                                "this line control and typing the remarks you "
  +                                "have about the task.";
       QWhatsThis::add(m_pRemark, kszRemarktext);
   
       // Tuple push button confirm
  @@ -565,8 +568,8 @@
       m_pTasklayout->addWidget(m_pConfirmbutton); // Finally add the confirm button
   
       // Whatsthis info for the confirm button
  -    const char *kszConfirmtext = trUtf8("Confirm any <em>row edition</em> by "
  -                                        "finally clicking on this button.");
  +    const char *kszConfirmtext = "Confirm any <em>row edition</em> by "
  +                                 "finally clicking on this button.";
       QWhatsThis::add(m_pConfirmbutton, kszConfirmtext);
   
   //    // Signals

From ossp-cvs-owner@ossp.org  Tue Nov 26 23:22:54 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EF39176A5A; Tue, 26 Nov 2002 23:22:53 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq titassist.cpp titraq.h titslot.cpp
Message-Id: <20021126222253.EF39176A5A@mail.ossp.org>
Date: Tue, 26 Nov 2002 23:22:53 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   26-Nov-2002 23:22:53
  Branch: HEAD                             Handle: 2002112622225300

  Modified files:
    ossp-pkg/titraq         titassist.cpp titraq.h titslot.cpp

  Log:
    Corrected add row on empty table special case, and added an ugly hack to
    allow for invalid zero dates.

  Summary:
    Revision    Changes     Path
    1.28        +5  -3      ossp-pkg/titraq/titassist.cpp
    1.30        +8  -7      ossp-pkg/titraq/titraq.h
    1.22        +3  -2      ossp-pkg/titraq/titslot.cpp
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/titassist.cpp
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 titassist.cpp
  --- ossp-pkg/titraq/titassist.cpp	26 Nov 2002 21:28:57 -0000	1.27
  +++ ossp-pkg/titraq/titassist.cpp	26 Nov 2002 22:22:53 -0000	1.28
  @@ -404,6 +404,7 @@
       m_pMaintable->setReadOnly(true);                    // Table is read only
       m_pMaintable->setColumnMovingEnabled(false);        // Ctrl-drag disabled
       m_pMaintable->setSelectionMode(QTable::SingleRow);  // Multi row selection
  +    m_pMaintable->setCurrentCell(-1, 0);                // Initial row value -1
       m_pMaintable->setFocusStyle(QTable::FollowStyle);   // How cells are drawn
       m_pMaintable->setLeftMargin(0);             // Get rid of the vertical header
       m_pMaintable->verticalHeader()->hide();     // by hiding it with a margin of 0
  @@ -436,8 +437,8 @@
   void Titraqform::setupEditlay(void)
   {
       // Make the date selector
  -    QDate Sylvestre(2002, 12, 31);
  -    m_pDateedit = new QDateEdit(Sylvestre, m_pCenframe, "Date");
  +    m_pDateedit = new QDateEdit(m_pCenframe, "Date");
  +    m_pDatezero = new QDate(m_pDateedit->date());                   // Hack to store empty date
       if (m_pDateedit == NULL)                                        // Sanity check
           throw Genexcept("Main window date edit creation failed.");  // Spew errors
   
  @@ -446,7 +447,7 @@
       m_pDateedit->setAutoAdvance(true);
       m_pDateedit->setSeparator(trUtf8("."));
   
  -    m_pDatelayout->addWidget(m_pDateedit);                       // Finally add the date editor
  +    m_pDatelayout->addWidget(m_pDateedit);                          // Finally add the date editor
       QToolTip::add(m_pDateedit, trUtf8("Task Date"));
   
       // Whatsthis info for the date editor
  @@ -562,6 +563,7 @@
       if (m_pConfirmbutton == NULL)   // Sanity check
           throw Genexcept("Main window confirm button creation failed.");
       m_pConfirmbutton->setCursor(QCursor(13));
  +    m_pConfirmbutton->setPaletteBackgroundColor(QColor(206, 192, 176));
       m_pConfirmbutton->setText(trUtf8("&Confirm"));
       QToolTip::add(m_pConfirmbutton, trUtf8("Confirm Editing"));
       connect(m_pConfirmbutton, SIGNAL(clicked()), this, SLOT(confirmEdit()));
  Index: ossp-pkg/titraq/titraq.h
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 titraq.h
  --- ossp-pkg/titraq/titraq.h	26 Nov 2002 21:18:48 -0000	1.29
  +++ ossp-pkg/titraq/titraq.h	26 Nov 2002 22:22:53 -0000	1.30
  @@ -65,13 +65,14 @@
       QStringList *m_pTaskentries;
   
       // Edition widgets
  -    QDateEdit   *m_pDateedit;
  -    QTimeEdit   *m_pStarttime;
  -    QTimeEdit   *m_pEndtime;
  -    AmountBox   *m_pAmount;
  -    QComboBox   *m_pTasks;
  -    QLineEdit   *m_pRemark;
  -    QPushButton *m_pConfirmbutton;
  +    QDate       *m_pDatezero;           // Hack to store empty date
  +    QDateEdit   *m_pDateedit;           // Control used to edit dates
  +    QTimeEdit   *m_pStarttime;          // Control used to edit start time
  +    QTimeEdit   *m_pEndtime;            // Control used to edit finish time
  +    AmountBox   *m_pAmount;             // Control used to edit total time
  +    QComboBox   *m_pTasks;              // Control used to choose a task
  +    QLineEdit   *m_pRemark;             // Control used to edit remark
  +    QPushButton *m_pConfirmbutton;      // Button used to confirm edition
   
   protected slots:
       void cutEntry(void);                // Cut a task entry from the list
  Index: ossp-pkg/titraq/titslot.cpp
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 titslot.cpp
  --- ossp-pkg/titraq/titslot.cpp	26 Nov 2002 21:18:48 -0000	1.21
  +++ ossp-pkg/titraq/titslot.cpp	26 Nov 2002 22:22:53 -0000	1.22
  @@ -13,6 +13,7 @@
   #include "gfx/cwlogo.xpm"       // static const char *s_kpcCwlogo_xpm[]
   #include "gfx/ossplogo.xpm"     // static const char *s_kpcOssplogo_xpm[]
   
  +
   //
   // Cut an entry
   //
  @@ -75,7 +76,7 @@
   //
   void Titraqform::newDoc(void)
   {
  -    m_pMaintable->setNumRows(0);    // Get rid of any data in table
  +    m_pMaintable->setNumRows(0); // Get rid of any data in table
   }
   
   //
  @@ -200,7 +201,7 @@
       if (!Textdate.isEmpty())
           m_pDateedit->setDate(QDate::fromString(Textdate, Qt::ISODate));
       else
  -        m_pDateedit->setDate(QDate::currentDate());
  +        m_pDateedit->setDate(*m_pDatezero);
   
       if (!Textstart.isEmpty())
           m_pStarttime->setTime(QTime::fromString(Textstart, Qt::ISODate));

From ossp-cvs-owner@ossp.org  Wed Nov 27 00:26:08 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 857A176AE1; Wed, 27 Nov 2002 00:26:08 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq tidatops.cpp titamount.cpp titassist.cpp t...
Message-Id: <20021126232608.857A176AE1@mail.ossp.org>
Date: Wed, 27 Nov 2002 00:26:08 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   27-Nov-2002 00:26:08
  Branch: HEAD                             Handle: 2002112623260700

  Modified files:
    ossp-pkg/titraq         tidatops.cpp titamount.cpp titassist.cpp
                            titslot.cpp

  Log:
    Implemented edition controls, corrected amount formatting, and corrected
    file format saving.

  Summary:
    Revision    Changes     Path
    1.8         +11 -11     ossp-pkg/titraq/tidatops.cpp
    1.3         +7  -5      ossp-pkg/titraq/titamount.cpp
    1.29        +7  -8      ossp-pkg/titraq/titassist.cpp
    1.23        +9  -2      ossp-pkg/titraq/titslot.cpp
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/tidatops.cpp
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 tidatops.cpp
  --- ossp-pkg/titraq/tidatops.cpp	26 Nov 2002 14:10:32 -0000	1.7
  +++ ossp-pkg/titraq/tidatops.cpp	26 Nov 2002 23:26:07 -0000	1.8
  @@ -115,39 +115,39 @@
       for (int nIter = 0; nIter <= nRows; nIter++) {
           Tempfield = m_pMaintable->text(nIter, 0);   // Load date field text
           if (Tempfield != NULL)
  -            Tstream << Tempfield << trUtf8(" ");    // Save date field text
  +            Tstream << Tempfield;                   // Save date field text
           else
               bValid = false;
   
  -        Tstream << trUtf8("user ");                 // Save user field text
  +        Tstream << trUtf8(" ") << trUtf8("user");   // Save user field text
   
  -/*        Tempfield = m_pMaintable->text(nIter, 1);   // Load start field text
  +        Tempfield = m_pMaintable->text(nIter, 1);   // Load start field text
           if (Tempfield != NULL)
  -            Tstream << Tempfield << trUtf8(" ");    // Save start field text
  -        else
  -            bValid = false;
  +            Tstream << trUtf8(" ") << Tempfield;    // Save start field text
  +/*        else
  +            bValid = false;*/
   
           Tempfield = m_pMaintable->text(nIter, 2);   // Load end field text
           if (Tempfield != NULL)
  -            Tstream << Tempfield << trUtf8(" ");    // Save end field text
  -        else
  +            Tstream << trUtf8(" ") << Tempfield;    // Save end field text
  +/*        else
               bValid = false;*/
   
           Tempfield = m_pMaintable->text(nIter, 4);   // Load amount field text
           if (Tempfield != NULL)
  -            Tstream << Tempfield << trUtf8(" ");    // Save amount field text
  +            Tstream << trUtf8(" ") << Tempfield;    // Save amount field text
           else
               bValid = false;
   
           Tempfield = m_pMaintable->text(nIter, 3);   // Load acct field text
           if (Tempfield != NULL)
  -            Tstream << Tempfield << trUtf8(" ");    // Save acct field text
  +            Tstream << trUtf8(" ") << Tempfield;    // Save acct field text
           else
               bValid = false;
   
           Tempfield = m_pMaintable->text(nIter, 5);   // Load remark field text
           if (Tempfield != NULL)
  -            Tstream << Tempfield << trUtf8(" ");    // Save remark field text
  +            Tstream << trUtf8(" ") << Tempfield;    // Save remark field text
           else
               bValid = false;
   
  Index: ossp-pkg/titraq/titamount.cpp
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 titamount.cpp
  --- ossp-pkg/titraq/titamount.cpp	26 Nov 2002 19:33:36 -0000	1.2
  +++ ossp-pkg/titraq/titamount.cpp	26 Nov 2002 23:26:07 -0000	1.3
  @@ -25,13 +25,15 @@
   // Return a text formatted representation
   QString AmountBox::text(void) const
   {
  -    QString Strout;
  +    QString Strfirst, Strsecond;
       int nHours = 0;
       int nMins = this->value();
   
  -    nHours = nMins / TITRAQ_MINSINHOUR;    // Calculate total hours
  -    nMins  = nMins % TITRAQ_MINSINHOUR;    // Calculate total minutes
  -    Strout = trUtf8("%1:%2").arg(nHours).arg(nMins); // Format string
  +    nHours    = nMins / TITRAQ_MINSINHOUR;      // Calculate total hours
  +    nMins     = nMins % TITRAQ_MINSINHOUR;      // Calculate total minutes
  +    Strfirst  = trUtf8("%1:").arg(nHours);      // Format the first part
  +    Strsecond = trUtf8("%1").arg(nMins);        // Format the second part
   
  -    return Strout;
  +    // Pad the resulting concatination before sending it out the back
  +    return Strfirst.rightJustify(3, '0') + Strsecond.rightJustify(2, '0');
   }
  Index: ossp-pkg/titraq/titassist.cpp
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 titassist.cpp
  --- ossp-pkg/titraq/titassist.cpp	26 Nov 2002 22:22:53 -0000	1.28
  +++ ossp-pkg/titraq/titassist.cpp	26 Nov 2002 23:26:07 -0000	1.29
  @@ -426,7 +426,6 @@
   
       // Table update signals
       connect(m_pMaintable, SIGNAL(currentChanged(int, int)), this, SLOT(updEdit(int, int)));
  -//    connect(m_pMaintable, SIGNAL(clicked(int, int, int, const QPoint&)), this, SLOT(updEdit(int, int)));
   //    connect(m_pMaintable, SIGNAL(doubleClicked(int, int, int, const QPoint&)), this, SLOT(updEdit(int, int)));
   //    connect(m_pMaintable, SIGNAL(valueChanged(int, int)), this, SLOT(tableChanged(int, int)));
   }
  @@ -457,7 +456,7 @@
       QWhatsThis::add(m_pDateedit, kszDateedit);
   
       // Make the start time selector
  -    m_pStarttime = new QTimeEdit(QTime::currentTime(), m_pCenframe, "StartTime");
  +    m_pStarttime = new QTimeEdit(m_pCenframe, "StartTime");
       if (m_pStarttime == NULL)                                       // Sanity check
           throw Genexcept("Main window start time creation failed."); // Spew errors
   
  @@ -474,7 +473,7 @@
       QWhatsThis::add(m_pStarttime, kszStarttime);
   
       // Make the end time selector
  -    m_pEndtime = new QTimeEdit(QTime::currentTime(), m_pCenframe, "EndTime");
  +    m_pEndtime = new QTimeEdit(m_pCenframe, "EndTime");
       if (m_pEndtime == NULL)                                        // Sanity check
           throw Genexcept("Main window end time creation failed.");  // Spew errors
   
  @@ -575,9 +574,9 @@
       QWhatsThis::add(m_pConfirmbutton, kszConfirmtext);
   
   //    // Signals
  -//    m_pDateedit->valueChanged(const QDate &date);
  -//    m_pStarttime->valueChanged(const QTime &time);
  -//    m_pEndtime->valueChanged(const QTime &time);
  -//    m_pAmount->valueChanged(int value);
  -//    m_pTasks->textChanged(const QString &string);
  +//    connect(m_pDateedit, SIGNAL(valueChanged(const QDate &date)), this, SLOT(updateDate()));
  +//    connect(m_pStarttime, SIGNAL(valueChanged(const QTime &time)), this, SLOT(updateStart()));
  +//    connect(m_pEndtime, SIGNAL(valueChanged(const QTime &time)), this, SLOT(updateFinish()));
  +//    connect(m_pAmount, SIGNAL(valueChanged(int value), this, SLOT(updateAmount()));
  +//    connect(m_pTasks, SIGNAL(textChanged(const QString &string), this, SLOT(updateTask()));
   }
  Index: ossp-pkg/titraq/titslot.cpp
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 titslot.cpp
  --- ossp-pkg/titraq/titslot.cpp	26 Nov 2002 22:22:53 -0000	1.22
  +++ ossp-pkg/titraq/titslot.cpp	26 Nov 2002 23:26:07 -0000	1.23
  @@ -192,8 +192,8 @@
   
       // Field strings to check for validity and process
       QString Textdate(m_pMaintable->text(nRow, TITRAQ_IDXDATE));
  -    QString Textstart(m_pMaintable->text(nRow, TITRAQ_IDXAMOUNT));
  -    QString Textfinish(m_pMaintable->text(nRow, TITRAQ_IDXAMOUNT));
  +    QString Textstart(m_pMaintable->text(nRow, TITRAQ_IDXSTART));
  +    QString Textfinish(m_pMaintable->text(nRow, TITRAQ_IDXFINISH));
       QString Textamount(m_pMaintable->text(nRow, TITRAQ_IDXAMOUNT));
       QString Texttask(m_pMaintable->text(nRow, TITRAQ_IDXTASK));
       QString Textremark(m_pMaintable->text(nRow, TITRAQ_IDXREMARK));
  @@ -227,6 +227,13 @@
   //
   void Titraqform::confirmEdit(void)
   {
  +    // Conversions from edit control data formats to native tabular format
  +    m_pMaintable->setText(m_pMaintable->currentRow(), TITRAQ_IDXDATE, m_pDateedit->date().toString(Qt::ISODate));
  +    m_pMaintable->setText(m_pMaintable->currentRow(), TITRAQ_IDXSTART, m_pStarttime->time().toString(Qt::ISODate));
  +    m_pMaintable->setText(m_pMaintable->currentRow(), TITRAQ_IDXFINISH, m_pEndtime->time().toString(Qt::ISODate));
  +    m_pMaintable->setText(m_pMaintable->currentRow(), TITRAQ_IDXAMOUNT, m_pAmount->text());
  +    m_pMaintable->setText(m_pMaintable->currentRow(), TITRAQ_IDXTASK, m_pTasks->currentText());
  +    m_pMaintable->setText(m_pMaintable->currentRow(), TITRAQ_IDXREMARK, m_pRemark->text());
   }
   
   //

From ossp-cvs-owner@ossp.org  Wed Nov 27 11:42:37 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 31957767C5; Wed, 27 Nov 2002 11:42:37 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio_buffer.c
Message-Id: <20021127104237.31957767C5@mail.ossp.org>
Date: Wed, 27 Nov 2002 11:42:37 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   27-Nov-2002 11:42:37
  Branch: HEAD                             Handle: 2002112710423600

  Modified files:
    ossp-pkg/sio            sio_buffer.c

  Log:
    drop tx instance, it hasn't been used for a while.

  Summary:
    Revision    Changes     Path
    1.6         +1  -10     ossp-pkg/sio/sio_buffer.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio_buffer.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 sio_buffer.c
  --- ossp-pkg/sio/sio_buffer.c	24 Nov 2002 19:36:48 -0000	1.5
  +++ ossp-pkg/sio/sio_buffer.c	27 Nov 2002 10:42:36 -0000	1.6
  @@ -7,7 +7,6 @@
   
   typedef struct {
       size_t outputsize;
  -    al_tx_t *outputtx;
       size_t inputsize;
       al_t *input, *output;
       al_label_t data_label;
  @@ -102,15 +101,9 @@
       private_t *my = (private_t *)u;
       al_rc_t arc;
   
  -    arc = al_txalloc(al, &my->outputtx);
  -    if (arc != AL_OK)
  -        return SIO_ERR_INT;
  -
       arc = al_create(&my->output);
  -    if (arc != AL_OK) {
  -        al_txfree(al, my->outputtx);
  +    if (arc != AL_OK)
           return SIO_ERR_INT;
  -    }
   
       return SIO_OK;
   }
  @@ -122,8 +115,6 @@
   
       al_destroy(my->output);
       my->output = NULL;
  -    al_txfree(al, my->outputtx);
  -    my->outputtx = NULL;
   
       return SIO_OK;
   }

From ossp-cvs-owner@ossp.org  Wed Nov 27 14:00:46 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B0ABA76391; Wed, 27 Nov 2002 14:00:45 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio_zlib.c
Message-Id: <20021127130045.B0ABA76391@mail.ossp.org>
Date: Wed, 27 Nov 2002 14:00:45 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   27-Nov-2002 14:00:45
  Branch: HEAD                             Handle: 2002112713004400

  Added files:
    ossp-pkg/sio            sio_zlib.c

  Log:
    zlib processing

  Summary:
    Revision    Changes     Path
    1.1         +324 -0     ossp-pkg/sio/sio_zlib.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio_zlib.c
  ============================================================
  $ cvs update -p -r1.1 sio_zlib.c
  #include <stddef.h>
  #include <stdlib.h>
  #include <string.h>
  
  #include "al.h"
  #include "sio.h"
  
  #include <zlib.h>
  
  typedef struct {
      z_stream     zs;
      int          lvl;
      al_t        *ibuf;
      char        *obuf;
      size_t       olen;
      al_t        *al;
      void        *u;
  } data_t;
  
  typedef struct {
      data_t       input;
      data_t       output;
      int          inputlevel;
      int          outputlevel;
      size_t       inputsize;
      size_t       outputsize;
      al_label_t   data_label;
  } private_t;
  
  /*
   * create stage
   *
   * allocate private instance data
   */
  static
  sio_rc_t zlib_init(sio_t *sio, void **up)
  {
      private_t *my;
      
      my = (private_t *)malloc(sizeof(private_t));
      if (my == NULL)
          return SIO_ERR_MEM;
  
      my->inputsize    = 0;
      my->outputsize   = 0;
      my->inputlevel   = 0;
      my->outputlevel  = 0;
  
      sio_label(sio, SIO_LN_DATA, &my->data_label);
  
      *up = my;
  
      return SIO_OK;
  }
  
  /*
   * configure stage
   *
   * pass two void pointers
   */
  static
  sio_rc_t zlib_configure(sio_t *sio, void *u, void *obj, void *val)
  {
      private_t *my = (private_t *)u;
      const char *name = (const char *)obj;
  
      if (!strcmp(name, "inputlevel")) {
          my->inputlevel = *(int *)val;
      } else if (!strcmp(name, "outputlevel")) {
          my->outputlevel = *(int *)val;
      } else if (!strcmp(name, "inputsize")) {
          my->inputsize = *(size_t *)val;
      } else if (!strcmp(name, "outputsize")) {
          my->outputsize = *(size_t *)val;
      } else {
          return SIO_ERR_ARG;
      }
  
      return SIO_OK;
  }
  
  /*
   * destroy stage
   */
  static
  sio_rc_t zlib_cleanup(sio_t *sio, void *u)
  {
      private_t *my = (private_t *)u;
  
      free(my);
  
      return SIO_OK;
  }
  
  static
  int zlib_alloc_data(private_t *my, data_t *dt)
  {
      al_rc_t arc;
      int zrc;
  
      dt->u = (void *)my;
  
      if (dt->lvl >= 0)
          zrc = deflateInit(&dt->zs, dt->lvl);
      else
          zrc = inflateInit(&dt->zs);
      if (zrc != Z_OK)
          return -1;
  
      arc = al_create(&dt->ibuf);
      if (arc != AL_OK)
          return -1;
  
      dt->obuf = malloc(dt->olen);
      if (dt->obuf == NULL) {
          al_destroy(dt->ibuf);
          dt->ibuf = NULL;
          return -1;
      }
  
      return 0;
  }
  
  static
  void zlib_free_data(data_t *dt)
  {
      al_destroy(dt->ibuf);
      dt->ibuf = NULL;
  
      free(dt->obuf);
      dt->obuf = NULL;
  
      if (dt->lvl >= 0)
          deflateEnd(&dt->zs);
      else
          inflateEnd(&dt->zs);
  }
  
  static
  sio_rc_t zlib_openr(sio_t *sio, al_t *al, void *u)
  {
      private_t *my = (private_t *)u;
  
      if (my->inputsize <= 0)
          return SIO_ERR_ARG;
  
      my->input.lvl  = my->inputlevel;
      my->input.olen = my->inputsize;
      my->input.al   = al;
  
      if (zlib_alloc_data(my, &my->input))
          return SIO_ERR_INT;
  
      return SIO_OK;
  }
  
  static
  sio_rc_t zlib_closer(sio_t *sio, al_t *al, void *u)
  {
      private_t *my = (private_t *)u;
  
      zlib_free_data(&my->input);
  
      return SIO_OK;
  }
  
  static
  sio_rc_t zlib_openw(sio_t *sio, al_t *al, void *u)
  {
      private_t *my = (private_t *)u;
  
      if (my->outputsize <= 0)
          return SIO_ERR_ARG;
  
      my->output.lvl  = my->outputlevel;
      my->output.olen = my->outputsize;
      my->output.al   = al;
  
      if (zlib_alloc_data(my, &my->output))
          return SIO_ERR_INT;
  
      return SIO_OK;
  }
  
  static
  sio_rc_t zlib_closew(sio_t *sio, al_t *al, void *u)
  {
      private_t *my = (private_t *)u;
  
      if (my->output.lvl >= 0)
          deflateEnd(&my->output.zs);
      else
          inflateEnd(&my->output.zs);
  
      free(my->output.obuf);
      my->output.obuf = NULL;
  
      al_destroy(my->output.ibuf);
      my->output.ibuf = NULL;
  
      return SIO_OK;
  }
  
  /*
   * buffer logic
   *
   * gather data from producer
   * if buffer size reached or label changes then push data to consumer
   * (read -> downstream, write -> upstream)
   *
   * buffer size depends on label type
   *
   */
  static
  al_rc_t zlib_inout_cb(al_chunk_t *alcp, void *u)
  {
      data_t    *dt = (data_t *)u;
      private_t *my = (private_t *)dt->u;
      z_stream  *zs = &dt->zs;
      int        level = dt->lvl;
      int        zrc, flush;
      al_rc_t    arc;
      char      *p;
      size_t     n;
  
      arc = AL_OK;
  
      p = al_chunk_ptr(alcp, 0);
      n = al_chunk_len(alcp);
  
      if (al_same_label(alcp, my->data_label)) {
          zs->next_in  = p;
          zs->avail_in = n;
          flush = 0;
      } else {
          zs->next_in  = "";
          zs->avail_in = 0;
          flush = Z_FINISH;
      }
  
      do {
          if (zs->avail_out == 0) {
              zs->next_out  = dt->obuf;
              zs->avail_out = dt->olen;
              zs->total_out = 0;
          }
          if (level >= 0)
              zrc = deflate(zs, flush);
          else
              zrc = inflate(zs, flush);
          if (zrc != Z_OK && zrc != Z_STREAM_END) {
              arc = AL_ERR_INT;
              break;
          }
          if (zs->avail_out == 0 || zrc == Z_STREAM_END || flush) {
              arc = al_append_bytes(dt->al, dt->obuf, zs->total_out,
                                    my->data_label);
              zs->avail_out = 0;
              if (arc != AL_OK)
                  break;
          }
      } while (zs->avail_in > 0 || (zrc == Z_OK && zs->avail_out == 0));
  
      if (arc != AL_OK)
          return arc;
  
      if (flush)
          arc = al_append_bytes(dt->al, p, n, al_chunk_label(alcp));
  
      return arc;
  }
  
  static
  sio_rc_t zlib_inout(sio_t *sio, al_t *al, private_t *my, data_t *dt)
  {
      al_rc_t arc;
  
      arc = al_splice(al, 0, al_bytes(al), NULL, dt->ibuf);
      if (arc != AL_OK)
          return SIO_ERR_INT;
  
      arc = al_traverse_cb(dt->ibuf, 0, al_bytes(dt->ibuf),
                           AL_FORWARD, NULL,
                           zlib_inout_cb, (void *)dt);
      if (arc != AL_OK)
          return SIO_ERR_INT;
  
      arc = al_splice(dt->ibuf, 0, al_bytes(dt->ibuf), NULL, NULL);
      if (arc != AL_OK)
          return SIO_ERR_INT;
  
      return SIO_OK;
  }
  
  static
  sio_rc_t zlib_input(sio_t *sio, al_t *al, void *u)
  {
      private_t *my = (private_t *)u;
  
      return zlib_inout(sio, al, my, &my->input);
  }
  
  static
  sio_rc_t zlib_output(sio_t *sio, al_t *al, void *u)
  {
      private_t *my = (private_t *)u;
  
      return zlib_inout(sio, al, my, &my->output);
  }
  
  sio_module_t sio_module_zlib = {
      "zlib",
      zlib_init,
      zlib_configure,
      zlib_cleanup,
      zlib_openr,
      zlib_closer,
      zlib_openw,
      zlib_closew,
      zlib_input,
      zlib_output,
      NULL
  };
  

From ossp-cvs-owner@ossp.org  Wed Nov 27 14:18:37 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0E55B7636C; Wed, 27 Nov 2002 14:18:37 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio_zlib.c
Message-Id: <20021127131837.0E55B7636C@mail.ossp.org>
Date: Wed, 27 Nov 2002 14:18:37 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   27-Nov-2002 14:18:36
  Branch: HEAD                             Handle: 2002112713183600

  Modified files:
    ossp-pkg/sio            sio_zlib.c

  Log:
    use locally allocated buffers that can be passed to al without
    extra copying.

  Summary:
    Revision    Changes     Path
    1.2         +25 -13     ossp-pkg/sio/sio_zlib.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio_zlib.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 sio_zlib.c
  --- ossp-pkg/sio/sio_zlib.c	27 Nov 2002 13:00:44 -0000	1.1
  +++ ossp-pkg/sio/sio_zlib.c	27 Nov 2002 13:18:36 -0000	1.2
  @@ -111,12 +111,7 @@
       if (arc != AL_OK)
           return -1;
   
  -    dt->obuf = malloc(dt->olen);
  -    if (dt->obuf == NULL) {
  -        al_destroy(dt->ibuf);
  -        dt->ibuf = NULL;
  -        return -1;
  -    }
  +    dt->obuf = NULL;
   
       return 0;
   }
  @@ -127,8 +122,10 @@
       al_destroy(dt->ibuf);
       dt->ibuf = NULL;
   
  -    free(dt->obuf);
  -    dt->obuf = NULL;
  +    if (dt->obuf != NULL) {
  +        free(dt->obuf);
  +        dt->obuf = NULL;
  +    }
   
       if (dt->lvl >= 0)
           deflateEnd(&dt->zs);
  @@ -201,6 +198,12 @@
       return SIO_OK;
   }
   
  +static
  +void freezlibbuf(char *p, size_t n, void *u)
  +{
  +    free(p);
  +}
  +
   /*
    * buffer logic
    *
  @@ -240,6 +243,12 @@
   
       do {
           if (zs->avail_out == 0) {
  +            if (dt->obuf == NULL &&
  +                (dt->obuf = malloc(dt->olen)) == NULL) {
  +                arc = AL_ERR_INT;
  +                break;
  +            }
  +
               zs->next_out  = dt->obuf;
               zs->avail_out = dt->olen;
               zs->total_out = 0;
  @@ -253,11 +262,14 @@
               break;
           }
           if (zs->avail_out == 0 || zrc == Z_STREAM_END || flush) {
  -            arc = al_append_bytes(dt->al, dt->obuf, zs->total_out,
  -                                  my->data_label);
  -            zs->avail_out = 0;
  -            if (arc != AL_OK)
  -                break;
  +            if (zs->total_out > 0) {
  +                arc = al_attach_buffer(dt->al, dt->obuf, zs->total_out,
  +                                       my->data_label, freezlibbuf, NULL);
  +                dt->obuf = NULL;
  +                zs->avail_out = 0;
  +                if (arc != AL_OK)
  +                    break;
  +            }
           }
       } while (zs->avail_in > 0 || (zrc == Z_OK && zs->avail_out == 0));
   

From ossp-cvs-owner@ossp.org  Wed Nov 27 16:50:30 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0CE007636C; Wed, 27 Nov 2002 16:50:29 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio_bio.c sio_buffer.c sio_fd.c sio_hello.c s...
Message-Id: <20021127155029.0CE007636C@mail.ossp.org>
Date: Wed, 27 Nov 2002 16:50:29 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   27-Nov-2002 16:50:29
  Branch: HEAD                             Handle: 2002112715502900

  Modified files:
    ossp-pkg/sio            sio_bio.c sio_buffer.c sio_fd.c sio_hello.c
                            sio_hole.c sio_null.c sio_sa.c

  Log:
    code cleanup

  Summary:
    Revision    Changes     Path
    1.5         +2  -2      ossp-pkg/sio/sio_bio.c
    1.7         +2  -2      ossp-pkg/sio/sio_buffer.c
    1.10        +2  -2      ossp-pkg/sio/sio_fd.c
    1.10        +2  -2      ossp-pkg/sio/sio_hello.c
    1.6         +2  -2      ossp-pkg/sio/sio_hole.c
    1.7         +2  -2      ossp-pkg/sio/sio_null.c
    1.5         +2  -2      ossp-pkg/sio/sio_sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio_bio.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 sio_bio.c
  --- ossp-pkg/sio/sio_bio.c	24 Nov 2002 19:40:59 -0000	1.4
  +++ ossp-pkg/sio/sio_bio.c	27 Nov 2002 15:50:29 -0000	1.5
  @@ -189,7 +189,7 @@
    * allocate private instance data
    */
   static
  -sio_rc_t siobio_init(sio_t *sio, void **u)
  +sio_rc_t siobio_init(sio_t *sio, void **up)
   {
       private_t *my;
       
  @@ -208,7 +208,7 @@
       sio_label(sio, SIO_LN_EOF,   &my->eof_label);
       sio_label(sio, SIO_LN_ERROR, &my->error_label);
   
  -    *u = my;
  +    *up = my;
   
       return SIO_OK;
   }
  Index: ossp-pkg/sio/sio_buffer.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 sio_buffer.c
  --- ossp-pkg/sio/sio_buffer.c	27 Nov 2002 10:42:36 -0000	1.6
  +++ ossp-pkg/sio/sio_buffer.c	27 Nov 2002 15:50:29 -0000	1.7
  @@ -18,7 +18,7 @@
    * allocate private instance data
    */
   static
  -sio_rc_t buffer_init(sio_t *sio, void **u)
  +sio_rc_t buffer_init(sio_t *sio, void **up)
   {
       private_t *my;
       
  @@ -31,7 +31,7 @@
   
       sio_label(sio, SIO_LN_DATA, &my->data_label);
   
  -    *u = my;
  +    *up = my;
   
       return SIO_OK;
   }
  Index: ossp-pkg/sio/sio_fd.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 sio_fd.c
  --- ossp-pkg/sio/sio_fd.c	24 Nov 2002 19:36:48 -0000	1.9
  +++ ossp-pkg/sio/sio_fd.c	27 Nov 2002 15:50:29 -0000	1.10
  @@ -29,7 +29,7 @@
    * allocate private instance data
    */
   static
  -sio_rc_t fd_init(sio_t *sio, void **u)
  +sio_rc_t fd_init(sio_t *sio, void **up)
   {
       private_t *my;
       
  @@ -49,7 +49,7 @@
       my->eof          = '\0';
       my->error        = '\0';
   
  -    *u = my;
  +    *up = my;
   
       return SIO_OK;
   }
  Index: ossp-pkg/sio/sio_hello.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 sio_hello.c
  --- ossp-pkg/sio/sio_hello.c	24 Nov 2002 19:36:48 -0000	1.9
  +++ ossp-pkg/sio/sio_hello.c	27 Nov 2002 15:50:29 -0000	1.10
  @@ -44,7 +44,7 @@
    * allocate private instance data
    */
   static
  -sio_rc_t hello_init(sio_t *sio, void **u)
  +sio_rc_t hello_init(sio_t *sio, void **up)
   {
       private_t *my;
       
  @@ -59,7 +59,7 @@
       my->pre_in  = NULL;
       my->pre_out = NULL;
   
  -    *u = my;
  +    *up = my;
   
       return SIO_OK;
   }
  Index: ossp-pkg/sio/sio_hole.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 sio_hole.c
  --- ossp-pkg/sio/sio_hole.c	24 Nov 2002 19:36:48 -0000	1.5
  +++ ossp-pkg/sio/sio_hole.c	27 Nov 2002 15:50:29 -0000	1.6
  @@ -14,7 +14,7 @@
    * allocate private instance data
    */
   static
  -sio_rc_t hole_init(sio_t *sio, void **u)
  +sio_rc_t hole_init(sio_t *sio, void **up)
   {
       private_t *my;
       
  @@ -22,7 +22,7 @@
       if (my == NULL)
           return SIO_ERR_MEM;
   
  -    *u = my;
  +    *up = my;
   
       return SIO_OK;
   }
  Index: ossp-pkg/sio/sio_null.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 sio_null.c
  --- ossp-pkg/sio/sio_null.c	24 Nov 2002 19:36:48 -0000	1.6
  +++ ossp-pkg/sio/sio_null.c	27 Nov 2002 15:50:29 -0000	1.7
  @@ -16,7 +16,7 @@
    * allocate private instance data
    */
   static
  -sio_rc_t null_init(sio_t *sio, void **u)
  +sio_rc_t null_init(sio_t *sio, void **up)
   {
       private_t *my;
       
  @@ -28,7 +28,7 @@
       my->b = 42.0;
       my->c = "42";
   
  -    *u = my;
  +    *up = my;
   
       return SIO_OK;
   }
  Index: ossp-pkg/sio/sio_sa.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 sio_sa.c
  --- ossp-pkg/sio/sio_sa.c	24 Nov 2002 19:36:48 -0000	1.4
  +++ ossp-pkg/sio/sio_sa.c	27 Nov 2002 15:50:29 -0000	1.5
  @@ -32,7 +32,7 @@
    * allocate private instance data
    */
   static
  -sio_rc_t saw_init(sio_t *sio, void **u)
  +sio_rc_t saw_init(sio_t *sio, void **up)
   {
       private_t *my;
       
  @@ -52,7 +52,7 @@
       my->eof   = '\0';
       my->error = '\0';
   
  -    *u = my;
  +    *up = my;
   
       return SIO_OK;
   }

From ossp-cvs-owner@ossp.org  Wed Nov 27 18:11:07 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0159A763C4; Wed, 27 Nov 2002 18:11:06 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq titassist.cpp titraq.h
Message-Id: <20021127171106.0159A763C4@mail.ossp.org>
Date: Wed, 27 Nov 2002 18:11:06 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   27-Nov-2002 18:11:06
  Branch: HEAD                             Handle: 2002112717110600

  Modified files:
    ossp-pkg/titraq         titassist.cpp titraq.h

  Log:
    Add class TiTable just to override normal cell highlighting, and correct
    delete entry button label.

  Summary:
    Revision    Changes     Path
    1.30        +2  -2      ossp-pkg/titraq/titassist.cpp
    1.31        +2  -1      ossp-pkg/titraq/titraq.h
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/titassist.cpp
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 titassist.cpp
  --- ossp-pkg/titraq/titassist.cpp	26 Nov 2002 23:26:07 -0000	1.29
  +++ ossp-pkg/titraq/titassist.cpp	27 Nov 2002 17:11:06 -0000	1.30
  @@ -192,7 +192,7 @@
       m_pAddrowact->setWhatsThis(kszAddrowtext);
   
       // Delete data row action
  -    m_pDelrowact = new QAction(trUtf8("Del Row"), QPixmap(s_kpcRowdel_xpm), trUtf8("&Delete row"), 0, this, "Delrow");
  +    m_pDelrowact = new QAction(trUtf8("Delete Row"), QPixmap(s_kpcRowdel_xpm), trUtf8("&Delete row"), 0, this, "Delrow");
       if (m_pDelrowact == NULL)       // Sanity check
           throw Genexcept("Main window delete row action creation failed.");
       connect(m_pDelrowact, SIGNAL(activated()), this, SLOT(delEntry()));
  @@ -397,7 +397,7 @@
   void Titraqform::setupTable(void)
   {
       // The table itself
  -    m_pMaintable = new QTable(m_pCenframe, "Maintable");
  +    m_pMaintable = new Titable(m_pCenframe, "Maintable");
       if (m_pMaintable == NULL)   // Sanity check
           throw Genexcept("Main window table creation failed.");
       m_pMaintable->setNumCols(g_knCols);
  Index: ossp-pkg/titraq/titraq.h
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 titraq.h
  --- ossp-pkg/titraq/titraq.h	26 Nov 2002 22:22:53 -0000	1.30
  +++ ossp-pkg/titraq/titraq.h	27 Nov 2002 17:11:06 -0000	1.31
  @@ -19,6 +19,7 @@
   #include "titconst.h"       // For general constants
   #include "titprefs.h"       // For class Preferences
   #include "titamount.h"      // For class AmountBox
  +#include "titable.h"        // For class TiTable
   
   // Intentional no operation
   #define TITRAQ_NOP ((void)0)
  @@ -60,7 +61,7 @@
       QAction     *m_pPasteact,     *m_pWritedataact;
   
       // Table, cells, and entries in package layout
  -    QTable      *m_pMaintable;
  +    TiTable     *m_pMaintable;
       QHeader     *m_pTablehead;
       QStringList *m_pTaskentries;
   

From ossp-cvs-owner@ossp.org  Wed Nov 27 18:13:14 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F2DB6763C4; Wed, 27 Nov 2002 18:13:13 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq titable.h titassist.cpp
Message-Id: <20021127171313.F2DB6763C4@mail.ossp.org>
Date: Wed, 27 Nov 2002 18:13:13 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   27-Nov-2002 18:13:13
  Branch: HEAD                             Handle: 2002112717131300

  Added files:
    ossp-pkg/titraq         titable.h
  Modified files:
    ossp-pkg/titraq         titassist.cpp

  Log:
    Really add the class this time, and fix a syntax error.

  Summary:
    Revision    Changes     Path
    1.1         +17 -0      ossp-pkg/titraq/titable.h
    1.31        +1  -1      ossp-pkg/titraq/titassist.cpp
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/titable.h
  ============================================================
  $ cvs update -p -r1.1 titable.h
  #ifndef TITABLE_H
  #define TITABLE_H
  
  #include <qtable.h>
  
  
  class TiTable : public QTable
  {
  public:
      TiTable(QWidget *pParent = 0, const char *szName = 0) : QTable(pParent, szName) {};
  
      // Deny a cell special handling of the focus rectangle
      // by overriding class QTable's paintFocus method
      void TiTable::paintFocus(QPainter *, const QRect &) {};
  };
  
  #endif // TITABLE_H
  Index: ossp-pkg/titraq/titassist.cpp
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 titassist.cpp
  --- ossp-pkg/titraq/titassist.cpp	27 Nov 2002 17:11:06 -0000	1.30
  +++ ossp-pkg/titraq/titassist.cpp	27 Nov 2002 17:13:13 -0000	1.31
  @@ -397,7 +397,7 @@
   void Titraqform::setupTable(void)
   {
       // The table itself
  -    m_pMaintable = new Titable(m_pCenframe, "Maintable");
  +    m_pMaintable = new TiTable(m_pCenframe, "Maintable");
       if (m_pMaintable == NULL)   // Sanity check
           throw Genexcept("Main window table creation failed.");
       m_pMaintable->setNumCols(g_knCols);

From ossp-cvs-owner@ossp.org  Wed Nov 27 19:40:16 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 26073763C5; Wed, 27 Nov 2002 19:40:16 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq titassist.cpp titraq.h titslot.cpp
Message-Id: <20021127184016.26073763C5@mail.ossp.org>
Date: Wed, 27 Nov 2002 19:40:16 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   27-Nov-2002 19:40:16
  Branch: HEAD                             Handle: 2002112718401500

  Modified files:
    ossp-pkg/titraq         titassist.cpp titraq.h titslot.cpp

  Log:
    Implement in place editing, with intuitive error safety features.

  Summary:
    Revision    Changes     Path
    1.32        +1  -1      ossp-pkg/titraq/titassist.cpp
    1.32        +1  -0      ossp-pkg/titraq/titraq.h
    1.24        +10 -0      ossp-pkg/titraq/titslot.cpp
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/titassist.cpp
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 titassist.cpp
  --- ossp-pkg/titraq/titassist.cpp	27 Nov 2002 17:13:13 -0000	1.31
  +++ ossp-pkg/titraq/titassist.cpp	27 Nov 2002 18:40:15 -0000	1.32
  @@ -426,7 +426,7 @@
   
       // Table update signals
       connect(m_pMaintable, SIGNAL(currentChanged(int, int)), this, SLOT(updEdit(int, int)));
  -//    connect(m_pMaintable, SIGNAL(doubleClicked(int, int, int, const QPoint&)), this, SLOT(updEdit(int, int)));
  +    connect(m_pMaintable, SIGNAL(doubleClicked(int, int, int, const QPoint&)), this, SLOT(inplaceEdit(int, int, int, const QPoint&)));
   //    connect(m_pMaintable, SIGNAL(valueChanged(int, int)), this, SLOT(tableChanged(int, int)));
   }
   
  Index: ossp-pkg/titraq/titraq.h
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 titraq.h
  --- ossp-pkg/titraq/titraq.h	27 Nov 2002 17:11:06 -0000	1.31
  +++ ossp-pkg/titraq/titraq.h	27 Nov 2002 18:40:15 -0000	1.32
  @@ -90,6 +90,7 @@
       void aboutOSSP(void);               // Learn more about the OSSP
       void aboutQt(void);                 // Learn more about Qt
       void selAll(void);                  // Edit menu select all
  +    void inplaceEdit(int, int, int, const QPoint &); // Enter in place edit mode
       void updEdit(int, int);             // Update edit controls
       void confirmEdit(void);             // Confirm recent edition
       void configPrefs(void);             // Edit menu configure preferences
  Index: ossp-pkg/titraq/titslot.cpp
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 titslot.cpp
  --- ossp-pkg/titraq/titslot.cpp	26 Nov 2002 23:26:07 -0000	1.23
  +++ ossp-pkg/titraq/titslot.cpp	27 Nov 2002 18:40:15 -0000	1.24
  @@ -184,6 +184,16 @@
   }
   
   //
  +// Edit a table entry in place, without the usual edit controls
  +//
  +void Titraqform::inplaceEdit(int nRow, int nCol, int nButton, const QPoint &Mousepos)
  +{
  +    m_pMaintable->setReadOnly(false);
  +    m_pMaintable->editCell(nRow, nCol);
  +    m_pMaintable->setReadOnly(true);
  +}
  +
  +//
   // Update the edit controls contents
   //
   void Titraqform::updEdit(int nRow, int nCol)

From ossp-cvs-owner@ossp.org  Wed Nov 27 23:44:50 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8D388763C5; Wed, 27 Nov 2002 23:44:49 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq Makefile.in titable.cpp titable.h titassis...
Message-Id: <20021127224449.8D388763C5@mail.ossp.org>
Date: Wed, 27 Nov 2002 23:44:49 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   27-Nov-2002 23:44:49
  Branch: HEAD                             Handle: 2002112722444800

  Added files:
    ossp-pkg/titraq         titable.cpp
  Modified files:
    ossp-pkg/titraq         Makefile.in titable.h titassist.cpp titconst.h
                            titraq.h titslot.cpp

  Log:
    Added eventhandler to catch illegal double clicks, minimized layout of
    edition controls, changes to slot arrangement.

  Summary:
    Revision    Changes     Path
    1.18        +2  -2      ossp-pkg/titraq/Makefile.in
    1.1         +14 -0      ossp-pkg/titraq/titable.cpp
    1.2         +6  -2      ossp-pkg/titraq/titable.h
    1.33        +22 -28     ossp-pkg/titraq/titassist.cpp
    1.7         +3  -0      ossp-pkg/titraq/titconst.h
    1.33        +2  -2      ossp-pkg/titraq/titraq.h
    1.25        +39 -1      ossp-pkg/titraq/titslot.cpp
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/Makefile.in
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 Makefile.in
  --- ossp-pkg/titraq/Makefile.in	25 Nov 2002 15:45:04 -0000	1.17
  +++ ossp-pkg/titraq/Makefile.in	27 Nov 2002 22:44:48 -0000	1.18
  @@ -65,9 +65,9 @@
   TARGET_PROGS    = titraq
   TARGET_MANS     = titraq.1 titraq.conf.5
   
  -SRCS            = main.cpp titraq.cpp titassist.cpp titslot.cpp tidatops.cpp titrex.cpp generic.cpp titamount.cpp titprefs.cpp titraq_version.c
  +SRCS            = main.cpp titraq.cpp titassist.cpp titslot.cpp tidatops.cpp titrex.cpp generic.cpp titamount.cpp titable.cpp titprefs.cpp titraq_version.c
   
  -OBJS            = main.o titraq.o titassist.o titslot.o tidatops.o titrex.o generic.o titamount.o titprefs.o titraq_version.o
  +OBJS            = main.o titraq.o titassist.o titslot.o tidatops.o titrex.o generic.o titamount.o titable.o titprefs.o titraq_version.o
   
   GRAFX           = gfx/ossplogo.xpm
   
  Index: ossp-pkg/titraq/titable.cpp
  ============================================================
  $ cvs update -p -r1.1 titable.cpp
  #include <qevent.h>
  #include <qheader.h>
  
  #include "titraq.h"
  
  
  // Implements an event filter for catching header double click events
  bool TiTable::eventFilter(QObject *pObject, QEvent *pEvent)
  {
      if (pObject == horizontalHeader())
          return false;
      else
          return QTable::eventFilter(pObject, pEvent);    // Pass the event onwards
  }
  Index: ossp-pkg/titraq/titable.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 titable.h
  --- ossp-pkg/titraq/titable.h	27 Nov 2002 17:13:13 -0000	1.1
  +++ ossp-pkg/titraq/titable.h	27 Nov 2002 22:44:48 -0000	1.2
  @@ -7,11 +7,15 @@
   class TiTable : public QTable
   {
   public:
  -    TiTable(QWidget *pParent = 0, const char *szName = 0) : QTable(pParent, szName) {};
  +    // Try to match QTable's default constructor with an initializer list
  +    TiTable(QWidget *pParent = 0, const char *szName = 0) : QTable(pParent, szName) {horizontalHeader()->installEventFilter(this);};
   
       // Deny a cell special handling of the focus rectangle
       // by overriding class QTable's paintFocus method
  -    void TiTable::paintFocus(QPainter *, const QRect &) {};
  +    void paintFocus(QPainter *, const QRect &) {};
  +
  +private:
  +    bool eventFilter(QObject *, QEvent *);
   };
   
   #endif // TITABLE_H
  Index: ossp-pkg/titraq/titassist.cpp
  ============================================================
  $ cvs diff -u -r1.32 -r1.33 titassist.cpp
  --- ossp-pkg/titraq/titassist.cpp	27 Nov 2002 18:40:15 -0000	1.32
  +++ ossp-pkg/titraq/titassist.cpp	27 Nov 2002 22:44:48 -0000	1.33
  @@ -272,7 +272,7 @@
       m_pTbarspopup->setItemChecked(nMenuid, true);
       nMenuid = m_pTbarspopup->insertItem(trUtf8("&Edit"), this, SLOT(showEditbar()));
       m_pTbarspopup->setItemChecked(nMenuid, true);
  -    nMenuid = m_pTbarspopup->insertItem(trUtf8("&Whats this"), this, SLOT(showWhatsbar()));
  +    nMenuid = m_pTbarspopup->insertItem(trUtf8("&Whats"), this, SLOT(showWhatsbar()));
       m_pTbarspopup->setItemChecked(nMenuid, true);
       m_pViewpopup->insertSeparator();
       m_pViewpopup->insertItem(trUtf8("&Columns"), m_pColspopup);
  @@ -366,10 +366,10 @@
       setCentralWidget(m_pCenframe);
   
       // Layout controls for table, editing widgets
  -    m_pMainlayout = new QVBoxLayout(m_pCenframe, 10, 6, "Mainlayout");  // For layouts
  -    m_pPackagelayout = new QVBoxLayout(0, 0, 6, "Packagelayout");       // For table
  -    m_pDatelayout = new QHBoxLayout(0, 0, 6, "Datelayout");             // For dates
  -    m_pTasklayout = new QHBoxLayout(0, 0, 6, "Tasklayout");             // For tasks
  +    m_pMainlayout = new QVBoxLayout(m_pCenframe, TITRAQ_MARGIN, TITRAQ_SPACING, "Mainlayout");  // For layouts
  +    m_pPackagelayout = new QVBoxLayout(0, 0, TITRAQ_SPACING, "Packagelayout");  // For table
  +    m_pDatelayout = new QHBoxLayout(0, 0, TITRAQ_SPACING, "Datelayout");        // For dates
  +    m_pTasklayout = new QHBoxLayout(0, 0, TITRAQ_SPACING, "Tasklayout");        // For tasks
   
       // Major sanity check wrapped in one call
       if (!(m_pMainlayout && m_pPackagelayout && m_pDatelayout && m_pTasklayout))
  @@ -403,12 +403,14 @@
       m_pMaintable->setNumCols(g_knCols);
       m_pMaintable->setReadOnly(true);                    // Table is read only
       m_pMaintable->setColumnMovingEnabled(false);        // Ctrl-drag disabled
  -    m_pMaintable->setSelectionMode(QTable::SingleRow);  // Multi row selection
  +    m_pMaintable->setSelectionMode(QTable::MultiRow);   // Multi row selection
       m_pMaintable->setCurrentCell(-1, 0);                // Initial row value -1
       m_pMaintable->setFocusStyle(QTable::FollowStyle);   // How cells are drawn
       m_pMaintable->setLeftMargin(0);             // Get rid of the vertical header
       m_pMaintable->verticalHeader()->hide();     // by hiding it with a margin of 0
       m_pMaintable->horizontalHeader()->setResizeEnabled(true);
  +    m_pMaintable->horizontalHeader()->setClickEnabled(true); // No click signals
  +    m_pMaintable->horizontalHeader()->setTracking(false); // No continuous tracking
       m_pMaintable->setColumnStretchable(g_knCols - 1, true);
       m_pMaintable->setSorting(false);
   
  @@ -427,6 +429,7 @@
       // Table update signals
       connect(m_pMaintable, SIGNAL(currentChanged(int, int)), this, SLOT(updEdit(int, int)));
       connect(m_pMaintable, SIGNAL(doubleClicked(int, int, int, const QPoint&)), this, SLOT(inplaceEdit(int, int, int, const QPoint&)));
  +    connect(m_pMaintable->horizontalHeader(), SIGNAL(sizeChange(int, int, int)), this, SLOT(updSizes(int, int, int)));
   //    connect(m_pMaintable, SIGNAL(valueChanged(int, int)), this, SLOT(tableChanged(int, int)));
   }
   
  @@ -435,6 +438,9 @@
   //
   void Titraqform::setupEditlay(void)
   {
  +//    QSpacerItem Pad(TITRAQ_SPACING / 2, 0, QSizePolicy::Fixed);
  +//    m_pDatelayout->addWidget(&Pad); // Padd left side of control layout
  +
       // Make the date selector
       m_pDateedit = new QDateEdit(m_pCenframe, "Date");
       m_pDatezero = new QDate(m_pDateedit->date());                   // Hack to store empty date
  @@ -505,10 +511,12 @@
                               "value with the arrow buttons.";
       QWhatsThis::add(m_pAmount, kszAmount);
   
  -    // Populate the stringlist with fresh tasks
  +    // Construct a stringlist just to hold task values
       m_pTaskentries = new QStringList;
       if (m_pTaskentries == NULL) // Sanity check
           throw Genexcept("Main window task entries creation failed.");
  +
  +    // Populate the stringlist with fresh tasks
       *m_pTaskentries << trUtf8("titraq")         << trUtf8("opgui")
                       << trUtf8("email")          << trUtf8("admin")
                       << trUtf8("pmod")           << trUtf8("psod")
  @@ -527,17 +535,16 @@
       m_pTasks->setCurrentText(NULL);
       m_pTasks->setAutoCompletion(true);
   
  -    // Fix the minimum width, and add an auto scroll bar to it
  -    if (m_pTasks->listBox()) {  // Motif style has no list box
  +    // Add an auto scroll bar if possible under current GUI style
  +    if (m_pTasks->listBox())    // Motif style has no list box
           m_pTasks->listBox()->setHScrollBarMode(QScrollView::Auto);
  -        m_pTasks->setMinimumWidth(m_pTasks->listBox()->maxItemWidth());
  -    }
  +//        m_pTasks->setMinimumWidth(m_pTasks->listBox()->maxItemWidth());
   
       // Whatsthis info for the remark line
       const char *kszTasktext = "Choose a <em>task account</em> by clicking on "
                                 "this box, and choosing whichever item most "
                                 "closely resembles your task.";
  -    m_pTasklayout->addWidget(m_pTasks); // Finally add the task edit
  +    m_pDatelayout->addWidget(m_pTasks); // Finally add the task edit
   
       // Make the Remark line
       m_pRemark = new QLineEdit(m_pCenframe, "Remark");
  @@ -549,7 +556,7 @@
       m_pRemark->setFrame(true);
       m_pRemark->setReadOnly(false);
       QToolTip::add(m_pRemark, trUtf8("Remark Line"));
  -    m_pTasklayout->addWidget(m_pRemark);    // Finally add the remark line
  +    m_pDatelayout->addWidget(m_pRemark);    // Finally add the remark line
   
       // Whatsthis info for the remark line
       const char *kszRemarktext = "Edit the <em>task remarks</em> by clicking on "
  @@ -557,21 +564,8 @@
                                   "have about the task.";
       QWhatsThis::add(m_pRemark, kszRemarktext);
   
  -    // Tuple push button confirm
  -    m_pConfirmbutton = new QPushButton(m_pCenframe, "Confirmbutton");
  -    if (m_pConfirmbutton == NULL)   // Sanity check
  -        throw Genexcept("Main window confirm button creation failed.");
  -    m_pConfirmbutton->setCursor(QCursor(13));
  -    m_pConfirmbutton->setPaletteBackgroundColor(QColor(206, 192, 176));
  -    m_pConfirmbutton->setText(trUtf8("&Confirm"));
  -    QToolTip::add(m_pConfirmbutton, trUtf8("Confirm Editing"));
  -    connect(m_pConfirmbutton, SIGNAL(clicked()), this, SLOT(confirmEdit()));
  -    m_pTasklayout->addWidget(m_pConfirmbutton); // Finally add the confirm button
  -
  -    // Whatsthis info for the confirm button
  -    const char *kszConfirmtext = "Confirm any <em>row edition</em> by "
  -                                 "finally clicking on this button.";
  -    QWhatsThis::add(m_pConfirmbutton, kszConfirmtext);
  +    // Start edit controls off at right size
  +    this->updSizes(TITRAQ_IDXALLCTRLS, -1, -1);
   
   //    // Signals
   //    connect(m_pDateedit, SIGNAL(valueChanged(const QDate &date)), this, SLOT(updateDate()));
  Index: ossp-pkg/titraq/titconst.h
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 titconst.h
  --- ossp-pkg/titraq/titconst.h	26 Nov 2002 20:25:16 -0000	1.6
  +++ ossp-pkg/titraq/titconst.h	27 Nov 2002 22:44:48 -0000	1.7
  @@ -13,6 +13,7 @@
   #define TITRAQ_DEFLOCALLOG      "no"
   
   // Indexes of table columns
  +#define TITRAQ_IDXALLCTRLS     -1
   #define TITRAQ_IDXDATE          0
   #define TITRAQ_IDXSTART         1
   #define TITRAQ_IDXFINISH        2
  @@ -26,6 +27,8 @@
   #define TITRAQ_IDXWHATBAR       3
   
   // Values
  +#define TITRAQ_MARGIN           10          // Default layout margin
  +#define TITRAQ_SPACING          6           // Default layout spacing
   #define TITRAQ_MAXAMOUNT        960         // Maximum valid amount
   #define TITRAQ_MINAMOUNT        0           // Minimum valid amount
   #define TITRAQ_STEPAMOUNT       15          // Line step interval
  Index: ossp-pkg/titraq/titraq.h
  ============================================================
  $ cvs diff -u -r1.32 -r1.33 titraq.h
  --- ossp-pkg/titraq/titraq.h	27 Nov 2002 18:40:15 -0000	1.32
  +++ ossp-pkg/titraq/titraq.h	27 Nov 2002 22:44:48 -0000	1.33
  @@ -73,7 +73,6 @@
       AmountBox   *m_pAmount;             // Control used to edit total time
       QComboBox   *m_pTasks;              // Control used to choose a task
       QLineEdit   *m_pRemark;             // Control used to edit remark
  -    QPushButton *m_pConfirmbutton;      // Button used to confirm edition
   
   protected slots:
       void cutEntry(void);                // Cut a task entry from the list
  @@ -92,7 +91,8 @@
       void selAll(void);                  // Edit menu select all
       void inplaceEdit(int, int, int, const QPoint &); // Enter in place edit mode
       void updEdit(int, int);             // Update edit controls
  -    void confirmEdit(void);             // Confirm recent edition
  +    void updSizes(int, int, int);       // Update edit sizes
  +    void confirmEdit(void);             // Confirm whole row edition
       void configPrefs(void);             // Edit menu configure preferences
       void editingView(void);             // View menu editing
       void timingView(void);              // View menu timing
  Index: ossp-pkg/titraq/titslot.cpp
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 titslot.cpp
  --- ossp-pkg/titraq/titslot.cpp	27 Nov 2002 18:40:15 -0000	1.24
  +++ ossp-pkg/titraq/titslot.cpp	27 Nov 2002 22:44:48 -0000	1.25
  @@ -194,6 +194,44 @@
   }
   
   //
  +// Update the edit controls widget sizes
  +//
  +void Titraqform::updSizes(int nSection, int nOldsize, int nNewsize)
  +{
  +    switch (nSection) {
  +    case TITRAQ_IDXALLCTRLS:
  +        m_pDateedit->setFixedWidth(m_pMaintable->horizontalHeader()->sectionSize(TITRAQ_IDXDATE) - TITRAQ_SPACING + TITRAQ_SPACING / 2);
  +        m_pStarttime->setFixedWidth(m_pMaintable->horizontalHeader()->sectionSize(TITRAQ_IDXSTART) - TITRAQ_SPACING);
  +        m_pEndtime->setFixedWidth(m_pMaintable->horizontalHeader()->sectionSize(TITRAQ_IDXFINISH) - TITRAQ_SPACING);
  +        m_pAmount->setFixedWidth(m_pMaintable->horizontalHeader()->sectionSize(TITRAQ_IDXAMOUNT) - TITRAQ_SPACING);
  +        m_pTasks->setFixedWidth(m_pMaintable->horizontalHeader()->sectionSize(TITRAQ_IDXTASK) - TITRAQ_SPACING);
  +//        m_pRemark->setFixedWidth(m_pMaintable->horizontalHeader()->sectionSize(TITRAQ_IDXREMARK) - TITRAQ_SPACING);
  +        break;
  +    case TITRAQ_IDXDATE:
  +        m_pDateedit->setFixedWidth(m_pMaintable->horizontalHeader()->sectionSize(TITRAQ_IDXDATE) - TITRAQ_SPACING + TITRAQ_SPACING / 2);
  +        break;
  +    case TITRAQ_IDXSTART:
  +        m_pStarttime->setFixedWidth(m_pMaintable->horizontalHeader()->sectionSize(TITRAQ_IDXSTART) - TITRAQ_SPACING);
  +        break;
  +    case TITRAQ_IDXFINISH:
  +        m_pEndtime->setFixedWidth(m_pMaintable->horizontalHeader()->sectionSize(TITRAQ_IDXFINISH) - TITRAQ_SPACING);
  +        break;
  +    case TITRAQ_IDXAMOUNT:
  +        m_pAmount->setFixedWidth(m_pMaintable->horizontalHeader()->sectionSize(TITRAQ_IDXAMOUNT) - TITRAQ_SPACING);
  +        break;
  +    case TITRAQ_IDXTASK:
  +        m_pTasks->setFixedWidth(m_pMaintable->horizontalHeader()->sectionSize(TITRAQ_IDXTASK) - TITRAQ_SPACING);
  +        break;
  +    case TITRAQ_IDXREMARK:
  +//        m_pRemark->setFixedWidth(nNewsize);
  +        break;
  +    default:
  +        throw Genexcept("Unrecognized main window column header.");
  +        break;
  +    }
  +}
  +
  +//
   // Update the edit controls contents
   //
   void Titraqform::updEdit(int nRow, int nCol)
  @@ -233,7 +271,7 @@
   }
   
   //
  -// Confirm any recent editions on a single row
  +// Confirm any recent editions on a whole row
   //
   void Titraqform::confirmEdit(void)
   {

From ossp-cvs-owner@ossp.org  Thu Nov 28 00:07:39 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 09690763C4; Thu, 28 Nov 2002 00:07:38 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq TODO titassist.cpp titraq.h titslot.cpp
Message-Id: <20021127230738.09690763C4@mail.ossp.org>
Date: Thu, 28 Nov 2002 00:07:38 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   28-Nov-2002 00:07:38
  Branch: HEAD                             Handle: 2002112723073800

  Modified files:
    ossp-pkg/titraq         TODO titassist.cpp titraq.h titslot.cpp

  Log:
    Fixed current file save logic, smoothed edit controls, and corrected
    name of edition layout.

  Summary:
    Revision    Changes     Path
    1.19        +2  -0      ossp-pkg/titraq/TODO
    1.34        +10 -12     ossp-pkg/titraq/titassist.cpp
    1.34        +1  -2      ossp-pkg/titraq/titraq.h
    1.26        +3  -2      ossp-pkg/titraq/titslot.cpp
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/TODO
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 TODO
  --- ossp-pkg/titraq/TODO	26 Nov 2002 17:34:02 -0000	1.18
  +++ ossp-pkg/titraq/TODO	27 Nov 2002 23:07:38 -0000	1.19
  @@ -33,6 +33,8 @@
   Bugs
   ----
   Insert adds a row after selection; not possible to add before first row
  +Zero date is impossible without reimplementing standard date widget
  +Columns resize themselves to wrong values when a header is double clicked
   
   Dreams
   ------
  Index: ossp-pkg/titraq/titassist.cpp
  ============================================================
  $ cvs diff -u -r1.33 -r1.34 titassist.cpp
  --- ossp-pkg/titraq/titassist.cpp	27 Nov 2002 22:44:48 -0000	1.33
  +++ ossp-pkg/titraq/titassist.cpp	27 Nov 2002 23:07:38 -0000	1.34
  @@ -368,17 +368,15 @@
       // Layout controls for table, editing widgets
       m_pMainlayout = new QVBoxLayout(m_pCenframe, TITRAQ_MARGIN, TITRAQ_SPACING, "Mainlayout");  // For layouts
       m_pPackagelayout = new QVBoxLayout(0, 0, TITRAQ_SPACING, "Packagelayout");  // For table
  -    m_pDatelayout = new QHBoxLayout(0, 0, TITRAQ_SPACING, "Datelayout");        // For dates
  -    m_pTasklayout = new QHBoxLayout(0, 0, TITRAQ_SPACING, "Tasklayout");        // For tasks
  +    m_pEditlayout = new QHBoxLayout(0, 0, TITRAQ_SPACING, "Editlayout");        // For edits
   
       // Major sanity check wrapped in one call
  -    if (!(m_pMainlayout && m_pPackagelayout && m_pDatelayout && m_pTasklayout))
  +    if (!(m_pMainlayout && m_pPackagelayout && m_pEditlayout))
           throw Genexcept("Main window layout creation failed.");
   
       // Specify ordering of the layouts
       m_pMainlayout->addLayout(m_pPackagelayout);
  -    m_pMainlayout->addLayout(m_pDatelayout);
  -    m_pMainlayout->addLayout(m_pTasklayout);
  +    m_pMainlayout->addLayout(m_pEditlayout);
   }
   
   //
  @@ -439,7 +437,7 @@
   void Titraqform::setupEditlay(void)
   {
   //    QSpacerItem Pad(TITRAQ_SPACING / 2, 0, QSizePolicy::Fixed);
  -//    m_pDatelayout->addWidget(&Pad); // Padd left side of control layout
  +//    m_pEditlayout->addWidget(&Pad); // Padd left side of control layout
   
       // Make the date selector
       m_pDateedit = new QDateEdit(m_pCenframe, "Date");
  @@ -452,7 +450,7 @@
       m_pDateedit->setAutoAdvance(true);
       m_pDateedit->setSeparator(trUtf8("."));
   
  -    m_pDatelayout->addWidget(m_pDateedit);                          // Finally add the date editor
  +    m_pEditlayout->addWidget(m_pDateedit);                          // Finally add the date editor
       QToolTip::add(m_pDateedit, trUtf8("Task Date"));
   
       // Whatsthis info for the date editor
  @@ -469,7 +467,7 @@
       // Configure attributes
       m_pStarttime->setAutoAdvance(true);
   
  -    m_pDatelayout->addWidget(m_pStarttime);                      // Finally add the start editor
  +    m_pEditlayout->addWidget(m_pStarttime);                      // Finally add the start editor
       QToolTip::add(m_pStarttime, trUtf8("Task Starting Time"));
   
       // Whatsthis info for the time editor
  @@ -483,7 +481,7 @@
       if (m_pEndtime == NULL)                                        // Sanity check
           throw Genexcept("Main window end time creation failed.");  // Spew errors
   
  -    m_pDatelayout->addWidget(m_pEndtime);                       // Finally add the end editor
  +    m_pEditlayout->addWidget(m_pEndtime);                       // Finally add the end editor
       QToolTip::add(m_pEndtime, trUtf8("Task Ending Time"));
   
       // Whatsthis info for the time editor
  @@ -502,7 +500,7 @@
       m_pAmount->setSuffix(trUtf8(" Minutes"));
   //    m_pAmount->setSpecialValueText(trUtf8("In progress"));
   
  -    m_pDatelayout->addWidget(m_pAmount);    // Finally add the amount editor
  +    m_pEditlayout->addWidget(m_pAmount);    // Finally add the amount editor
       QToolTip::add(m_pAmount, trUtf8("Task Amount"));
   
       // Whatsthis info for the amount editor
  @@ -544,7 +542,7 @@
       const char *kszTasktext = "Choose a <em>task account</em> by clicking on "
                                 "this box, and choosing whichever item most "
                                 "closely resembles your task.";
  -    m_pDatelayout->addWidget(m_pTasks); // Finally add the task edit
  +    m_pEditlayout->addWidget(m_pTasks); // Finally add the task edit
   
       // Make the Remark line
       m_pRemark = new QLineEdit(m_pCenframe, "Remark");
  @@ -556,7 +554,7 @@
       m_pRemark->setFrame(true);
       m_pRemark->setReadOnly(false);
       QToolTip::add(m_pRemark, trUtf8("Remark Line"));
  -    m_pDatelayout->addWidget(m_pRemark);    // Finally add the remark line
  +    m_pEditlayout->addWidget(m_pRemark);    // Finally add the remark line
   
       // Whatsthis info for the remark line
       const char *kszRemarktext = "Edit the <em>task remarks</em> by clicking on "
  Index: ossp-pkg/titraq/titraq.h
  ============================================================
  $ cvs diff -u -r1.33 -r1.34 titraq.h
  --- ossp-pkg/titraq/titraq.h	27 Nov 2002 22:44:48 -0000	1.33
  +++ ossp-pkg/titraq/titraq.h	27 Nov 2002 23:07:38 -0000	1.34
  @@ -117,8 +117,7 @@
       QFrame      *m_pCenframe;           // Central frame
       QVBoxLayout *m_pMainlayout;         // Package and control layouts
       QVBoxLayout *m_pPackagelayout;      // Main table control
  -    QHBoxLayout *m_pDatelayout;         // Lower date and time widgets
  -    QHBoxLayout *m_pTasklayout;         // Lower task and remark widgets
  +    QHBoxLayout *m_pEditlayout;         // Lower edition widgets
   
   private:
       // Owned by QMainWindow
  Index: ossp-pkg/titraq/titslot.cpp
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 titslot.cpp
  --- ossp-pkg/titraq/titslot.cpp	27 Nov 2002 22:44:48 -0000	1.25
  +++ ossp-pkg/titraq/titslot.cpp	27 Nov 2002 23:07:38 -0000	1.26
  @@ -86,6 +86,7 @@
   {
       QString Filestring = QFileDialog::getOpenFileName("/e/dev/as", QString::null, this, trUtf8("Chooser Dialog"), trUtf8("Choose a file to open"));
       if (!Filestring.isEmpty()) {
  +        m_szFilename->operator=(Filestring);
           m_pMaintable->setNumRows(0);    // Clear out old data
           QFile Filetemp(Filestring);     // File to load
           try {
  @@ -200,7 +201,7 @@
   {
       switch (nSection) {
       case TITRAQ_IDXALLCTRLS:
  -        m_pDateedit->setFixedWidth(m_pMaintable->horizontalHeader()->sectionSize(TITRAQ_IDXDATE) - TITRAQ_SPACING + TITRAQ_SPACING / 2);
  +        m_pDateedit->setFixedWidth(m_pMaintable->horizontalHeader()->sectionSize(TITRAQ_IDXDATE) - TITRAQ_SPACING + TITRAQ_SPACING / 2 + 1);
           m_pStarttime->setFixedWidth(m_pMaintable->horizontalHeader()->sectionSize(TITRAQ_IDXSTART) - TITRAQ_SPACING);
           m_pEndtime->setFixedWidth(m_pMaintable->horizontalHeader()->sectionSize(TITRAQ_IDXFINISH) - TITRAQ_SPACING);
           m_pAmount->setFixedWidth(m_pMaintable->horizontalHeader()->sectionSize(TITRAQ_IDXAMOUNT) - TITRAQ_SPACING);
  @@ -208,7 +209,7 @@
   //        m_pRemark->setFixedWidth(m_pMaintable->horizontalHeader()->sectionSize(TITRAQ_IDXREMARK) - TITRAQ_SPACING);
           break;
       case TITRAQ_IDXDATE:
  -        m_pDateedit->setFixedWidth(m_pMaintable->horizontalHeader()->sectionSize(TITRAQ_IDXDATE) - TITRAQ_SPACING + TITRAQ_SPACING / 2);
  +        m_pDateedit->setFixedWidth(m_pMaintable->horizontalHeader()->sectionSize(TITRAQ_IDXDATE) - TITRAQ_SPACING + TITRAQ_SPACING / 2 + 1);
           break;
       case TITRAQ_IDXSTART:
           m_pStarttime->setFixedWidth(m_pMaintable->horizontalHeader()->sectionSize(TITRAQ_IDXSTART) - TITRAQ_SPACING);

From ossp-cvs-owner@ossp.org  Thu Nov 28 11:31:34 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4CFFB763C6; Thu, 28 Nov 2002 11:31:34 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq TODO titassist.cpp titslot.cpp
Message-Id: <20021128103134.4CFFB763C6@mail.ossp.org>
Date: Thu, 28 Nov 2002 11:31:34 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   28-Nov-2002 11:31:34
  Branch: HEAD                             Handle: 2002112810313300

  Modified files:
    ossp-pkg/titraq         TODO titassist.cpp titslot.cpp

  Log:
    Column adjustment.

  Summary:
    Revision    Changes     Path
    1.20        +1  -0      ossp-pkg/titraq/TODO
    1.35        +5  -5      ossp-pkg/titraq/titassist.cpp
    1.27        +2  -2      ossp-pkg/titraq/titslot.cpp
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/TODO
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 TODO
  --- ossp-pkg/titraq/TODO	27 Nov 2002 23:07:38 -0000	1.19
  +++ ossp-pkg/titraq/TODO	28 Nov 2002 10:31:33 -0000	1.20
  @@ -29,6 +29,7 @@
   QTable::valueChanged(int row, int col) should be responsible for dirty flag
   Remove magic numbers from cpp files to titconst like TITRAQ_INDEXREMARK
   Reduce dependence to STL by removing cout to QTextStream
  +Preferences fehlen <option name wert> <aspect name wert> <rule name expr cond>
   
   Bugs
   ----
  Index: ossp-pkg/titraq/titassist.cpp
  ============================================================
  $ cvs diff -u -r1.34 -r1.35 titassist.cpp
  --- ossp-pkg/titraq/titassist.cpp	27 Nov 2002 23:07:38 -0000	1.34
  +++ ossp-pkg/titraq/titassist.cpp	28 Nov 2002 10:31:33 -0000	1.35
  @@ -322,7 +322,7 @@
       if (m_pFiletools == NULL)                   // Sanity check
           throw Genexcept("File tool bar creation failed.");
       m_pFiletools->setLabel(trUtf8("File Ops"));
  -    m_pFiletools->setOpaqueMoving(true);
  +    m_pFiletools->setOpaqueMoving(false);
       m_pFiletools->setCloseMode(QDockWindow::Never);
       m_pFilenewact->addTo(m_pFiletools);
       m_pFileopenact->addTo(m_pFiletools);
  @@ -415,10 +415,10 @@
       // Table header row
       m_pTablehead = m_pMaintable->horizontalHeader();
       m_pMaintable->setHScrollBarMode(QScrollView::AlwaysOff);
  -    m_pTablehead->setLabel(0, QObject::trUtf8("Date"), 76);
  -    m_pTablehead->setLabel(1, QObject::trUtf8("Begin"), 48);
  -    m_pTablehead->setLabel(2, QObject::trUtf8("End"), 48);
  -    m_pTablehead->setLabel(3, QObject::trUtf8("Amount"), 48);
  +    m_pTablehead->setLabel(0, QObject::trUtf8("Date"), 94);
  +    m_pTablehead->setLabel(1, QObject::trUtf8("Begin"), 86);
  +    m_pTablehead->setLabel(2, QObject::trUtf8("End"), 86);
  +    m_pTablehead->setLabel(3, QObject::trUtf8("Amount"), 96);
       m_pTablehead->setLabel(4, QObject::trUtf8("Task"), 96);
       m_pTablehead->setLabel(5, QObject::trUtf8("Remark"));
   
  Index: ossp-pkg/titraq/titslot.cpp
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 titslot.cpp
  --- ossp-pkg/titraq/titslot.cpp	27 Nov 2002 23:07:38 -0000	1.26
  +++ ossp-pkg/titraq/titslot.cpp	28 Nov 2002 10:31:33 -0000	1.27
  @@ -201,7 +201,7 @@
   {
       switch (nSection) {
       case TITRAQ_IDXALLCTRLS:
  -        m_pDateedit->setFixedWidth(m_pMaintable->horizontalHeader()->sectionSize(TITRAQ_IDXDATE) - TITRAQ_SPACING + TITRAQ_SPACING / 2 + 1);
  +        m_pDateedit->setFixedWidth(m_pMaintable->horizontalHeader()->sectionSize(TITRAQ_IDXDATE) - TITRAQ_SPACING + TITRAQ_SPACING / 2);
           m_pStarttime->setFixedWidth(m_pMaintable->horizontalHeader()->sectionSize(TITRAQ_IDXSTART) - TITRAQ_SPACING);
           m_pEndtime->setFixedWidth(m_pMaintable->horizontalHeader()->sectionSize(TITRAQ_IDXFINISH) - TITRAQ_SPACING);
           m_pAmount->setFixedWidth(m_pMaintable->horizontalHeader()->sectionSize(TITRAQ_IDXAMOUNT) - TITRAQ_SPACING);
  @@ -209,7 +209,7 @@
   //        m_pRemark->setFixedWidth(m_pMaintable->horizontalHeader()->sectionSize(TITRAQ_IDXREMARK) - TITRAQ_SPACING);
           break;
       case TITRAQ_IDXDATE:
  -        m_pDateedit->setFixedWidth(m_pMaintable->horizontalHeader()->sectionSize(TITRAQ_IDXDATE) - TITRAQ_SPACING + TITRAQ_SPACING / 2 + 1);
  +        m_pDateedit->setFixedWidth(m_pMaintable->horizontalHeader()->sectionSize(TITRAQ_IDXDATE) - TITRAQ_SPACING + TITRAQ_SPACING / 2);
           break;
       case TITRAQ_IDXSTART:
           m_pStarttime->setFixedWidth(m_pMaintable->horizontalHeader()->sectionSize(TITRAQ_IDXSTART) - TITRAQ_SPACING);

From ossp-cvs-owner@ossp.org  Thu Nov 28 12:12:03 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 29DB1763C6; Thu, 28 Nov 2002 12:12:03 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq TODO
Message-Id: <20021128111203.29DB1763C6@mail.ossp.org>
Date: Thu, 28 Nov 2002 12:12:03 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   28-Nov-2002 12:12:03
  Branch: HEAD                             Handle: 2002112811120200

  Modified files:
    ossp-pkg/titraq         TODO

  Log:
    Design Ideen.

  Summary:
    Revision    Changes     Path
    1.21        +25 -4      ossp-pkg/titraq/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/TODO
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 TODO
  --- ossp-pkg/titraq/TODO	28 Nov 2002 10:31:33 -0000	1.20
  +++ ossp-pkg/titraq/TODO	28 Nov 2002 11:12:02 -0000	1.21
  @@ -29,16 +29,37 @@
   QTable::valueChanged(int row, int col) should be responsible for dirty flag
   Remove magic numbers from cpp files to titconst like TITRAQ_INDEXREMARK
   Reduce dependence to STL by removing cout to QTextStream
  -Preferences fehlen <option name wert> <aspect name wert> <rule name expr cond>
  +Ausblendbare Spalten
  +
  +Beim Editmodus
  +---------------
  +Beim <enter> Bestaetigen, behalt Editmodus und geh zum naechste Zelle
  +Auf Editkontrol beim <enter> oder <tab>, update ansprechende Zelle
  +Beim <tab> oder Pfeiltaste, behalt Editmodus und geh zum naechste Zelle
  +
  +Preferences
  +-----------
  +<option name wert>      Hintergrund Functionalitaet
  +<aspect name wert>      Sichtliche Functionalitaet
  +<session name wert>     Automatisch gespeicherte
  +<rule name expr cond>   Amount = Finish - Start (mussen alle da z.B.)
  +<macro name = 'Reuse'>
  +  Selectiere aktuelle und 3 vorherige Reihen
  +  Copy
  +  Geh zu letzte Reihe
  +  Paste
  +</macro name = 'Reuse'>
  +<macro name = 'Append'>
  +  Geh zu letzte Reihe
  +  Zufug Reihe
  +</macro name = 'Append'>
   
   Bugs
   ----
   Insert adds a row after selection; not possible to add before first row
   Zero date is impossible without reimplementing standard date widget
   Columns resize themselves to wrong values when a header is double clicked
  -
  -Dreams
  -------
  +Sometimes a click on add or delete toolbar button is ignored?
   
   Document
   --------

From ossp-cvs-owner@ossp.org  Thu Nov 28 16:12:41 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 20444763C6; Thu, 28 Nov 2002 16:12:41 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.c al.h al.pod al_test.c
Message-Id: <20021128151241.20444763C6@mail.ossp.org>
Date: Thu, 28 Nov 2002 16:12:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   28-Nov-2002 16:12:40
  Branch: HEAD                             Handle: 2002112815124000

  Modified files:
    ossp-pkg/sio            al.c al.h al.pod al_test.c

  Log:
    new al_setlabel method to modify the data label within an
    assembly line.

  Summary:
    Revision    Changes     Path
    1.37        +82 -0      ossp-pkg/sio/al.c
    1.15        +2  -1      ossp-pkg/sio/al.h
    1.15        +7  -0      ossp-pkg/sio/al.pod
    1.17        +7  -1      ossp-pkg/sio/al_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.c
  ============================================================
  $ cvs diff -u -r1.36 -r1.37 al.c
  --- ossp-pkg/sio/al.c	19 Nov 2002 17:02:17 -0000	1.36
  +++ ossp-pkg/sio/al.c	28 Nov 2002 15:12:40 -0000	1.37
  @@ -818,6 +818,88 @@
   }
   
   /*
  + *
  + */
  +al_rc_t
  +al_setlabel(al_t *al, size_t off, size_t n, al_label_t label)
  +{
  +    al_rc_t rc;
  +    al_chunk_t *cur, *splitbuf;
  +    size_t skip, len;
  +
  +    /* argument sanity check(s) */
  +    if (al == NULL || n < 0)
  +        return AL_RC(AL_ERR_ARG);
  +
  +    /*
  +     * seek to beginning, return EOF when seek position does not exist
  +     * EOD must be a valid seek position so that we can append data
  +     */
  +    rc = al_seek(al, off, &cur, &skip);
  +    if (rc != AL_OK)
  +        return AL_RC(rc);
  +
  +    /*
  +     * seek to EOD, nothing to label
  +     */
  +    if (cur == NULL)
  +        return AL_OK;
  +
  +    /*
  +     * if first chunk doesn't need relabeling
  +     * then skip it, adjust seek size
  +     *
  +     * else if offset is not at chunk start
  +     * then split chunk at offset, continue
  +     * with second half
  +     */
  +    if (AL_SAME_LABEL(cur, label)) {
  +        len = AL_CHUNK_LEN(cur) - skip;
  +        n = n < len ? 0 : n - len;
  +        cur = NEXT(cur, chunks);
  +    } else if (skip > 0) {
  +        rc = split_chunk(al, cur, skip, &splitbuf);
  +        if (rc != AL_OK)
  +            return AL_RC(rc);
  +        INSERT(al,chunks,cur,splitbuf);
  +    }
  +
  +    /*
  +     * for all remaining chunks and bytes
  +     *
  +     * if chunk doesn't need relabeling
  +     * then skip it, adjust size
  +     *
  +     * else if chunk isn't covered in total
  +     * then split chunk at end offset and
  +     * process first half
  +     */
  +    while (n > 0 && cur != NULL) {
  +        len = AL_CHUNK_LEN(cur);
  +        if (AL_SAME_LABEL(cur, label)) {
  +            n = n < len ? 0 : n - len;
  +        } else {
  +            if (n < len) {
  +                /*
  +                 * split last chunk at end offset
  +                 */
  +                rc = split_chunk(al, cur, n, &splitbuf);
  +                if (rc != AL_OK)
  +                    return AL_RC(rc);
  +                INSERT(al,chunks,cur,splitbuf);
  +                cur = splitbuf;
  +                len = AL_CHUNK_LEN(cur);
  +            }
  +            AL_CHUNK_LABEL(cur) = label;
  +            n   -= len;
  +        }
  +        cur  = NEXT(cur, chunks);
  +    }
  +
  +    return AL_OK;
  +}
  +
  +/*
    * assembly line traversal requires a context. It needs to be
    * malloced to keep its inner structure private
    */
  Index: ossp-pkg/sio/al.h
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 al.h
  --- ossp-pkg/sio/al.h	23 Oct 2002 16:49:29 -0000	1.14
  +++ ossp-pkg/sio/al.h	28 Nov 2002 15:12:40 -0000	1.15
  @@ -68,9 +68,10 @@
   al_rc_t al_traverse     (al_t *al, size_t off, size_t n, al_td_t dir, al_label_t label, al_tx_t *tx);
   al_rc_t al_traverse_next(al_t *al, al_tx_t *tx, al_chunk_t **alcp);
   al_rc_t al_traverse_end (al_t *al, al_tx_t *tx, int final);
  -al_rc_t al_traverse_cb  (al_t *al, size_t off, size_t n, al_td_t dir, al_label_t, al_rc_t (*cb)(al_chunk_t *, void *), void *u);
  +al_rc_t al_traverse_cb  (al_t *al, size_t off, size_t n, al_td_t dir, al_label_t label, al_rc_t (*cb)(al_chunk_t *, void *), void *u);
   al_rc_t al_copy         (al_t *al, size_t off, size_t n, al_label_t label, al_t *tal);
   al_rc_t al_splice       (al_t *al, size_t off, size_t n, al_t *nal, al_t *tal);
  +al_rc_t al_setlabel     (al_t *al, size_t off, size_t n, al_label_t label);
   al_rc_t al_flatten      (al_t *al, size_t off, size_t n, al_td_t dir, al_label_t label, char *dst, size_t *lenp);
   al_rc_t al_firstlabel   (al_t *al, size_t off, size_t n, al_td_t dir, al_label_t label, al_label_t *labelp);
   
  Index: ossp-pkg/sio/al.pod
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 al.pod
  --- ossp-pkg/sio/al.pod	7 Nov 2002 15:28:52 -0000	1.14
  +++ ossp-pkg/sio/al.pod	28 Nov 2002 15:12:40 -0000	1.15
  @@ -59,6 +59,7 @@
   al_prepend_bytes,
   al_attach_buffer,
   al_splice,
  +al_setlabel,
   al_bytes.
   
   =item B<Traversal Operations>:
  @@ -269,6 +270,12 @@
   The source now holds the string "Brave world\n".
   The buffer now holds the string "HelloGoodbye\n".
   The insertion is empty.
  +
  +=item al_rc_t B<al_setlabel>(al_t *I<al>, size_t I<off>, size_t I<n>, al_label_t *label);
  +
  +I<off> and I<n> are byte counts that define a span of bytes within the
  +source assembly line I<al>. These bytes are tagged with I<label>, any
  +existing label for these bytes is overwritten.
   
   =item size_t B<al_bytes>(const al_t *I<al>);
   
  Index: ossp-pkg/sio/al_test.c
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 al_test.c
  --- ossp-pkg/sio/al_test.c	5 Nov 2002 14:52:24 -0000	1.16
  +++ ossp-pkg/sio/al_test.c	28 Nov 2002 15:12:40 -0000	1.17
  @@ -90,7 +90,7 @@
   
   #define DUMP(tag,al) do {\
   printf("+DUMP(%s)\n",tag);\
  -al_traverse_cb(al, 0, al_bytes(al), AL_FORWARD, LABEL, printchunk, NULL);\
  +al_traverse_cb(al, 0, al_bytes(al), AL_FORWARD, NULL, printchunk, NULL);\
   printf("-DUMP(%s)\n\n",tag);\
   } while (0)
   
  @@ -178,6 +178,12 @@
       al_create(&al4);
       rc = al_copy(al, al_bytes(al)-42, 38, LABEL, al4);
       printf("copy result: %d (%s)\n\n",rc,al_error(rc));
  +    checklen("SPLICED",al);
  +    checklen("COPY",al4);
  +
  +    rc = al_setlabel(al4, 5, 9, LABEL2);
  +    printf("setlabel result: %d (%s)\n\n",rc,al_error(rc));
  +    checklen("COPY",al4);
   
       DUMP("SPLICED",al);
       print("SPLICED", al);

From ossp-cvs-owner@ossp.org  Thu Nov 28 16:42:30 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 69599763C6; Thu, 28 Nov 2002 16:42:30 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.c
Message-Id: <20021128154230.69599763C6@mail.ossp.org>
Date: Thu, 28 Nov 2002 16:42:30 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Nov-2002 16:42:30
  Branch: HEAD                             Handle: 2002112815422900

  Modified files:
    ossp-pkg/sa             sa.c

  Log:
    fix a few bugs, remove a lot of warnings; all found by splint

  Summary:
    Revision    Changes     Path
    1.72        +123 -102   ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.c
  ============================================================
  $ cvs diff -u -r1.71 -r1.72 sa.c
  --- ossp-pkg/sa/sa.c	14 Nov 2002 08:54:00 -0000	1.71
  +++ ossp-pkg/sa/sa.c	28 Nov 2002 15:42:29 -0000	1.72
  @@ -329,19 +329,19 @@
               if (c == '%') {
                   /* expand "%%" */
                   cp = &c;
  -                n = sizeof(char);
  +                n = (int)sizeof(char);
               }
               else if (c == 'c') {
                   /* expand "%c" */
                   c = (char)va_arg(ap, int);
                   cp = &c;
  -                n = sizeof(char);
  +                n = (int)sizeof(char);
               }
               else if (c == 's') {
                   /* expand "%s" */
                   if ((cp = (char *)va_arg(ap, char *)) == NULL)
                       cp = "(null)";
  -                n = strlen(cp);
  +                n = (int)strlen(cp);
               }
               else if (c == 'd') {
                   /* expand "%d" */
  @@ -352,7 +352,7 @@
                   sprintf(ibuf, "%d", d);                /* implicitly secure */
   #endif
                   cp = ibuf;
  -                n = strlen(cp);
  +                n = (int)strlen(cp);
               }
               else {
                   /* any other "%X" */
  @@ -366,11 +366,11 @@
               cp = (char *)format;
               if ((format = strchr(cp, '%')) == NULL)
                   format = strchr(cp, '\0');
  -            n = format - cp;
  +            n = (int)(format - cp);
           }
           /* perform output operation */
           if (output != NULL)
  -            if ((n = output(ctx, cp, n)) == -1)
  +            if ((n = output(ctx, cp, (size_t)n)) == -1)
                   break;
           bytes += n;
       }
  @@ -393,7 +393,7 @@
       memcpy(ctx->bufptr, buffer, bufsize);
       ctx->bufptr += bufsize;
       ctx->buflen -= bufsize;
  -    return bufsize;
  +    return (int)bufsize;
   }
   
   /* minimal vsnprintf(3) variant which supports %{c,s,d} only */
  @@ -497,7 +497,8 @@
       char uribuf[1024];
       char *cp;
       int i;
  -    int n;
  +    size_t n;
  +    int k;
   
       /* argument sanity check(s) */
       if (saa == NULL || uri == NULL)
  @@ -505,8 +506,10 @@
   
       /* on-the-fly create or just take over URI */
       va_start(ap, uri);
  -    sa_mvsnprintf(uribuf, sizeof(uribuf), uri, ap);
  +    k = sa_mvsnprintf(uribuf, sizeof(uribuf), uri, ap);
       va_end(ap);
  +    if (k == -1)
  +        return SA_RC(SA_ERR_MEM);
   
       /* initialize result variables */
       sa = NULL;
  @@ -543,7 +546,7 @@
   
           /* provide results */
           sa = (struct sockaddr *)&un;
  -        sl = sizeof(un);
  +        sl = (socklen_t)sizeof(un);
           sf = AF_LOCAL;
       }
       else if (strncmp(uri, "inet://", 7) == 0) {
  @@ -607,7 +610,7 @@
               sa4.sin_family = AF_INET;
               sa4.sin_port = htons(nPort);
               sa = (struct sockaddr *)&sa4;
  -            sl = sizeof(sa4);
  +            sl = (socklen_t)sizeof(sa4);
               sf = AF_INET;
           }
   #ifdef AF_INET6
  @@ -615,7 +618,7 @@
               sa6.sin6_family = AF_INET6;
               sa6.sin6_port = htons(nPort);
               sa = (struct sockaddr *)&sa6;
  -            sl = sizeof(sa6);
  +            sl = (socklen_t)sizeof(sa6);
               sf = AF_INET6;
           }
   #endif
  @@ -626,7 +629,7 @@
                   memcpy(&sa4.sin_addr.s_addr, he->h_addr_list[0],
                          sizeof(sa4.sin_addr.s_addr));
                   sa = (struct sockaddr *)&sa4;
  -                sl = sizeof(sa4);
  +                sl = (socklen_t)sizeof(sa4);
                   sf = AF_INET;
               }
   #ifdef AF_INET6
  @@ -636,7 +639,7 @@
                   memcpy(&sa6.sin6_addr.s6_addr, he->h_addr_list[0],
                          sizeof(sa6.sin6_addr.s6_addr));
                   sa = (struct sockaddr *)&sa6;
  -                sl = sizeof(sa6);
  +                sl = (socklen_t)sizeof(sa6);
                   sf = AF_INET6;
               }
   #endif
  @@ -652,11 +655,11 @@
       /* fill-in result address structure */
       if (saa->saBuf != NULL)
           free(saa->saBuf);
  -    if ((saa->saBuf = (struct sockaddr *)malloc(sl)) == NULL)
  +    if ((saa->saBuf = (struct sockaddr *)malloc((size_t)sl)) == NULL)
           return SA_RC(SA_ERR_MEM);
  -    memcpy(saa->saBuf, sa, sl);
  +    memcpy(saa->saBuf, sa, (size_t)sl);
       saa->slBuf = sl;
  -    saa->nFamily = sf;
  +    saa->nFamily = (int)sf;
   
       return SA_OK;
   }
  @@ -680,13 +683,13 @@
       /* create result address structure */
       if (saa->saBuf != NULL)
           free(saa->saBuf);
  -    if ((saa->saBuf = (struct sockaddr *)malloc(salen)) == NULL)
  +    if ((saa->saBuf = (struct sockaddr *)malloc((size_t)salen)) == NULL)
           return SA_RC(SA_ERR_MEM);
  -    memcpy(saa->saBuf, sabuf, salen);
  +    memcpy(saa->saBuf, sabuf, (size_t)salen);
       saa->slBuf = salen;
   
       /* remember family */
  -    saa->nFamily = sabuf->sa_family;
  +    saa->nFamily = (int)(sabuf->sa_family);
   
       return SA_OK;
   }
  @@ -712,27 +715,35 @@
           un = (struct sockaddr_un *)((void *)saa->saBuf);
           if (   (   saa->slBuf >= (socklen_t)(&(((struct sockaddr_un *)0)->sun_path[0]))
                   && un->sun_path[0] == '\0')
  -            || saa->slBuf < sizeof(struct sockaddr_un))
  +            || (size_t)(saa->slBuf) < sizeof(struct sockaddr_un)) {
               /* in case the remote side of a Unix Domain socket was not
                  bound, a "struct sockaddr_un" can occur with a length less
                  than the expected one. Then there is actually no path at all.
                  This has been verified under FreeBSD, Linux and Solaris. */
  -            sa_msnprintf(uribuf, sizeof(uribuf), "unix:/NOT-BOUND");
  -        else
  -            sa_msnprintf(uribuf, sizeof(uribuf), "unix:%s", un->sun_path);
  +            if (sa_msnprintf(uribuf, sizeof(uribuf), "unix:/NOT-BOUND") == -1)
  +                return SA_RC(SA_ERR_FMT);
  +        }
  +        else {
  +            if (sa_msnprintf(uribuf, sizeof(uribuf), "unix:%s", un->sun_path) == -1)
  +                return SA_RC(SA_ERR_FMT);
  +        }
       }
       else if (saa->nFamily == AF_INET) {
           sa4 = (struct sockaddr_in *)((void *)saa->saBuf);
  -        sa_inet_ntop(AF_INET, &sa4->sin_addr.s_addr, caHost, sizeof(caHost));
  +        if (sa_inet_ntop(AF_INET, &sa4->sin_addr.s_addr, caHost, sizeof(caHost)) == NULL)
  +            return SA_RC(SA_ERR_NET);
           nPort = ntohs(sa4->sin_port);
  -        sa_msnprintf(uribuf, sizeof(uribuf), "inet://%s:%d", caHost, nPort);
  +        if (sa_msnprintf(uribuf, sizeof(uribuf), "inet://%s:%d", caHost, nPort) == -1)
  +            return SA_RC(SA_ERR_FMT);
       }
   #ifdef AF_INET6
       else if (saa->nFamily == AF_INET6) {
           sa6 = (struct sockaddr_in6 *)((void *)saa->saBuf);
  -        sa_inet_ntop(AF_INET6, &sa6->sin6_addr.s6_addr, caHost, sizeof(caHost));
  +        if (sa_inet_ntop(AF_INET6, &sa6->sin6_addr.s6_addr, caHost, sizeof(caHost)) == NULL)
  +            return SA_RC(SA_ERR_NET);
           nPort = ntohs(sa6->sin6_port);
  -        sa_msnprintf(uribuf, sizeof(uribuf), "inet://[%s]:%d", caHost, nPort);
  +        if (sa_msnprintf(uribuf, sizeof(uribuf), "inet://[%s]:%d", caHost, nPort) == -1)
  +            return SA_RC(SA_ERR_FMT);
       }
   #endif
       else
  @@ -752,9 +763,9 @@
           return SA_RC(SA_ERR_ARG);
   
       /* export underlying address structure */
  -    if ((*sabuf = (struct sockaddr *)malloc(saa->slBuf)) == NULL)
  +    if ((*sabuf = (struct sockaddr *)malloc((size_t)saa->slBuf)) == NULL)
           return SA_RC(SA_ERR_MEM);
  -    memmove(*sabuf, saa->saBuf, saa->slBuf);
  +    memmove(*sabuf, saa->saBuf, (size_t)saa->slBuf);
       *salen = saa->slBuf;
   
       return SA_OK;
  @@ -793,10 +804,10 @@
           if (prefixlen < 0) {
               if (l1 != l2)
                   return SA_RC(SA_ERR_MTC);
  -            nBits = l1;
  +            nBits = (int)l1;
           }
           else {
  -            if (l1 < prefixlen || l2 < prefixlen)
  +            if ((int)l1 < prefixlen || (int)l2 < prefixlen)
                   return SA_RC(SA_ERR_MTC);
               nBits = prefixlen;
           }
  @@ -823,9 +834,9 @@
               ucp2 += 12;
           }
           for (i = 0; i < 10; i++)
  -            if (ucp0[i] != 0x00)
  +            if ((int)ucp0[i] != 0x00)
                   return SA_RC(SA_ERR_MTC);
  -        if (!(ucp0[10] == 0xFF && ucp0[11] == 0xFF))
  +        if (!((int)ucp0[10] == 0xFF && (int)ucp0[11] == 0xFF))
               return SA_RC(SA_ERR_MTC);
           nBits = 32;
       }
  @@ -866,13 +877,13 @@
       nBytes = (prefixlen / 8);
       nBits  = (prefixlen % 8);
       if (nBytes > 0) {
  -        if (memcmp(ucp1, ucp2, nBytes) != 0)
  +        if (memcmp(ucp1, ucp2, (size_t)nBytes) != 0)
               return SA_RC(SA_ERR_MTC);
       }
       if (nBits > 0) {
  -        uc1 = ucp1[nBytes];
  -        uc2 = ucp2[nBytes];
  -        mask = (0xFF << (8-nBits)) & 0xFF;
  +        uc1 = (unsigned int)ucp1[nBytes];
  +        uc2 = (unsigned int)ucp2[nBytes];
  +        mask = ((unsigned int)0xFF << (8-nBits)) & (unsigned int)0xFF;
           if ((uc1 & mask) != (uc2 & mask))
               return SA_RC(SA_ERR_MTC);
       }
  @@ -921,7 +932,7 @@
   
       /* check for pending options */
       rv = SA_OK;
  -    for (i = 0; i < (sizeof(sa->optInfo)/sizeof(sa->optInfo[0])); i++) {
  +    for (i = 0; i < (int)(sizeof(sa->optInfo)/sizeof(sa->optInfo[0])); i++) {
           if (sa->optInfo[i].todo) {
               switch (i) {
                   /* enable/disable Nagle's Algorithm (see RFC898) */
  @@ -1085,7 +1096,7 @@
           return SA_RC(SA_ERR_USE);
   
       /* close socket */
  -    close(sa->fdSocket);
  +    (void)close(sa->fdSocket);
       sa->fdSocket = -1;
   
       return SA_OK;
  @@ -1116,13 +1127,13 @@
       sa->cpWriteBuf     = NULL;
   
       /* init timeval object attributes */
  -    for (i = 0; i < (sizeof(sa->tvTimeout)/sizeof(sa->tvTimeout[0])); i++) {
  +    for (i = 0; i < (int)(sizeof(sa->tvTimeout)/sizeof(sa->tvTimeout[0])); i++) {
           sa->tvTimeout[i].tv_sec  = 0;
           sa->tvTimeout[i].tv_usec = 0;
       }
   
       /* init options object attributes */
  -    for (i = 0; i < (sizeof(sa->optInfo)/sizeof(sa->optInfo[0])); i++) {
  +    for (i = 0; i < (int)(sizeof(sa->optInfo)/sizeof(sa->optInfo[0])); i++) {
           sa->optInfo[i].todo  = FALSE;
           sa->optInfo[i].value = 0;
       }
  @@ -1150,7 +1161,7 @@
           return SA_RC(SA_ERR_ARG);
   
       /* kill underlying socket */
  -    sa_socket_kill(sa);
  +    (void)sa_socket_kill(sa);
   
       /* free object and sub-objects */
       if (sa->cpReadBuf != NULL)
  @@ -1192,7 +1203,7 @@
           return SA_RC(SA_ERR_ARG);
   
       if (id == SA_TIMEOUT_ALL) {
  -        for (i = 0; i < (sizeof(sa->tvTimeout)/sizeof(sa->tvTimeout[0])); i++) {
  +        for (i = 0; i < (int)(sizeof(sa->tvTimeout)/sizeof(sa->tvTimeout[0])); i++) {
               sa->tvTimeout[i].tv_sec  = sec;
               sa->tvTimeout[i].tv_usec = usec;
           }
  @@ -1220,7 +1231,7 @@
   
       if (id == SA_BUFFER_READ) {
           /* configure read/incoming buffer */
  -        if (sa->nReadLen > size)
  +        if (sa->nReadLen > (int)size)
               return SA_RC(SA_ERR_USE);
           if (size > 0) {
               if (sa->cpReadBuf == NULL)
  @@ -1230,7 +1241,7 @@
               if (cp == NULL)
                   return SA_RC(SA_ERR_MEM);
               sa->cpReadBuf = cp;
  -            sa->nReadSize = size;
  +            sa->nReadSize = (int)size;
           }
           else {
               if (sa->cpReadBuf != NULL)
  @@ -1241,7 +1252,7 @@
       }
       else if (id == SA_BUFFER_WRITE) {
           /* configure write/outgoing buffer */
  -        if (sa->nWriteLen > size)
  +        if (sa->nWriteLen > (int)size)
               return SA_RC(SA_ERR_USE);
           if (size > 0) {
               if (sa->cpWriteBuf == NULL)
  @@ -1251,7 +1262,7 @@
               if (cp == NULL)
                   return SA_RC(SA_ERR_MEM);
               sa->cpWriteBuf = cp;
  -            sa->nWriteSize = size;
  +            sa->nWriteSize = (int)size;
           }
           else {
               if (sa->cpWriteBuf != NULL)
  @@ -1388,7 +1399,7 @@
       /* remove a possibly existing old Unix Domain socket on filesystem */
       if (laddr->nFamily == AF_LOCAL) {
           un = (struct sockaddr_un *)((void *)laddr->saBuf);
  -        unlink(un->sun_path);
  +        (void)unlink(un->sun_path);
       }
   
       /* perform bind operation on underlying socket */
  @@ -1431,7 +1442,7 @@
   
           /* temporarily switch underlying socket to non-blocking mode */
           flags = fcntl(sa->fdSocket, F_GETFL, 0);
  -        fcntl(sa->fdSocket, F_SETFL, flags|O_NONBLOCK);
  +        (void)fcntl(sa->fdSocket, F_SETFL, flags|O_NONBLOCK);
   
           /* perform the connect operation */
           if ((n = SA_SC_CALL_3(sa, connect, sa->fdSocket, raddr->saBuf, raddr->slBuf)) < 0) {
  @@ -1461,25 +1472,25 @@
               goto done;
           }
           else if (n == 0) {
  -            close(sa->fdSocket); /* stop TCP three-way handshake */
  +            (void)close(sa->fdSocket); /* stop TCP three-way handshake */
               sa->fdSocket = -1;
               rv = SA_ERR_TMT;
               goto done;
           }
   
           /* fetch pending error */
  -        len = sizeof(error);
  +        len = (socklen_t)sizeof(error);
           if (getsockopt(sa->fdSocket, SOL_SOCKET, SO_ERROR, (void *)&error, &len) < 0)
               error = errno;
   
           done:
   
           /* reset socket flags */
  -        fcntl(sa->fdSocket, F_SETFL, flags);
  +        (void)fcntl(sa->fdSocket, F_SETFL, flags);
   
           /* optionally set errno */
           if (error != 0) {
  -            close(sa->fdSocket); /* just in case */
  +            (void)close(sa->fdSocket); /* just in case */
               sa->fdSocket = -1;
               errno = error;
               rv = SA_ERR_SYS;
  @@ -1554,7 +1565,7 @@
       }
   
       /* perform accept operation on underlying socket */
  -    sa_size = sizeof(sa_buf);
  +    sa_size = (socklen_t)sizeof(sa_buf);
       if ((s = SA_SC_CALL_3(sa, accept, sa->fdSocket, (struct sockaddr *)&sa_buf, &sa_size)) == -1)
           return SA_RC(SA_ERR_SYS);
   
  @@ -1562,13 +1573,13 @@
       if ((rv = sa_addr_create(caddr)) != SA_OK)
           return SA_RC(rv);
       if ((rv = sa_addr_s2a(*caddr, (struct sockaddr *)&sa_buf, sa_size)) != SA_OK) {
  -        sa_addr_destroy(*caddr);
  +        (void)sa_addr_destroy(*caddr);
           return SA_RC(rv);
       }
   
       /* create result socket object */
       if ((rv = sa_create(csa)) != SA_OK) {
  -        sa_addr_destroy(*caddr);
  +        (void)sa_addr_destroy(*caddr);
           return SA_RC(rv);
       }
   
  @@ -1585,7 +1596,7 @@
       SA_SC_COPY((*csa), sa, sendto);
   
       /* copy-over original timeout values */
  -    for (i = 0; i < (sizeof(sa->tvTimeout)/sizeof(sa->tvTimeout[0])); i++) {
  +    for (i = 0; i < (int)(sizeof(sa->tvTimeout)/sizeof(sa->tvTimeout[0])); i++) {
           (*csa)->tvTimeout[i].tv_sec  = sa->tvTimeout[i].tv_sec;
           (*csa)->tvTimeout[i].tv_usec = sa->tvTimeout[i].tv_usec;
       }
  @@ -1618,7 +1629,7 @@
           return SA_RC(SA_ERR_USE);
   
       /* determine remote address of underlying socket */
  -    sa_size = sizeof(sa_buf);
  +    sa_size = (socklen_t)sizeof(sa_buf);
       if (getpeername(sa->fdSocket, (struct sockaddr *)&sa_buf, &sa_size) < 0)
           return SA_RC(SA_ERR_SYS);
   
  @@ -1626,7 +1637,7 @@
       if ((rv = sa_addr_create(raddr)) != SA_OK)
           return SA_RC(rv);
       if ((rv = sa_addr_s2a(*raddr, (struct sockaddr *)&sa_buf, sa_size)) != SA_OK) {
  -        sa_addr_destroy(*raddr);
  +        (void)sa_addr_destroy(*raddr);
           return SA_RC(rv);
       }
   
  @@ -1654,7 +1665,7 @@
           return SA_RC(SA_ERR_USE);
   
       /* determine local address of underlying socket */
  -    sa_size = sizeof(sa_buf);
  +    sa_size = (socklen_t)sizeof(sa_buf);
       if (getsockname(sa->fdSocket, (struct sockaddr *)&sa_buf, &sa_size) < 0)
           return SA_RC(SA_ERR_SYS);
   
  @@ -1662,7 +1673,7 @@
       if ((rv = sa_addr_create(laddr)) != SA_OK)
           return SA_RC(rv);
       if ((rv = sa_addr_s2a(*laddr, (struct sockaddr *)&sa_buf, sa_size)) != SA_OK) {
  -        sa_addr_destroy(*laddr);
  +        (void)sa_addr_destroy(*laddr);
           return SA_RC(rv);
       }
   
  @@ -1713,7 +1724,7 @@
   
       /* perform read operation on underlying socket */
       do {
  -        rv = SA_SC_CALL_3(sa, read, sa->fdSocket, cpBuf, nBufLen);
  +        rv = (int)SA_SC_CALL_3(sa, read, sa->fdSocket, cpBuf, (size_t)nBufLen);
       } while (rv == -1 && errno == EINTR);
   
   #if defined(SO_RCVTIMEO) && defined(SO_SNDTIMEO)
  @@ -1748,8 +1759,8 @@
       if (sa->nReadSize == 0) {
           /* user-space unbuffered I/O */
           if (sa->nWriteLen > 0)
  -            sa_flush(sa);
  -        res = sa_read_raw(sa, cpBuf, nBufReq);
  +            (void)sa_flush(sa);
  +        res = sa_read_raw(sa, cpBuf, (int)nBufReq);
           if (res == 0)
               rv = SA_ERR_EOF;
           else if (res < 0 && errno == ETIMEDOUT)
  @@ -1761,7 +1772,7 @@
           /* user-space buffered I/O */
           res = 0;
           for (;;) {
  -            if (nBufReq <= sa->nReadLen) {
  +            if ((int)nBufReq <= sa->nReadLen) {
                   /* buffer holds enough data, so just use this */
                   memmove(cpBuf, sa->cpReadBuf, nBufReq);
                   memmove(sa->cpReadBuf, sa->cpReadBuf+nBufReq, sa->nReadLen-nBufReq);
  @@ -1771,17 +1782,17 @@
               else {
                   if (sa->nReadLen > 0) {
                       /* fetch already existing buffer contents as a start */
  -                    memmove(cpBuf, sa->cpReadBuf, sa->nReadLen);
  +                    memmove(cpBuf, sa->cpReadBuf, (size_t)sa->nReadLen);
                       nBufReq -= sa->nReadLen;
                       cpBuf   += sa->nReadLen;
                       res     += sa->nReadLen;
                       sa->nReadLen = 0;
                   }
                   if (sa->nWriteLen > 0)
  -                    sa_flush(sa);
  -                if (nBufReq >= sa->nReadSize) {
  +                    (void)sa_flush(sa);
  +                if ((int)nBufReq >= sa->nReadSize) {
                       /* buffer is too small at all, so read directly */
  -                    n = sa_read_raw(sa, cpBuf, nBufReq);
  +                    n = sa_read_raw(sa, cpBuf, (int)nBufReq);
                       if (n > 0)
                           res += n;
                       else if (n == 0)
  @@ -1850,7 +1861,7 @@
           rv = sa_read(sa, &c, 1, &n);
           if (rv != SA_OK)
               break;
  -        if (n <= 0)
  +        if (n == 0)
               break;
           cpBuf[res++] = c;
           if (c == '\n')
  @@ -1892,7 +1903,7 @@
   
       /* perform write operation on underlying socket */
       do {
  -        rv = SA_SC_CALL_3(sa, write, sa->fdSocket, cpBuf, nBufLen);
  +        rv = (int)SA_SC_CALL_3(sa, write, sa->fdSocket, cpBuf, (size_t)nBufLen);
       } while (rv == -1 && errno == EINTR);
   
   #if defined(SO_RCVTIMEO) && defined(SO_SNDTIMEO)
  @@ -1925,7 +1936,7 @@
       rv = SA_OK;
       if (sa->nWriteSize == 0) {
           /* user-space unbuffered I/O */
  -        res = sa_write_raw(sa, cpBuf, nBufReq);
  +        res = sa_write_raw(sa, cpBuf, (int)nBufReq);
           if (res < 0 && errno == ETIMEDOUT)
               rv = SA_ERR_TMT;
           else if (res < 0)
  @@ -1933,15 +1944,15 @@
       }
       else {
           /* user-space buffered I/O */
  -        if (nBufReq > (sa->nWriteSize - sa->nWriteLen)) {
  +        if ((int)nBufReq > (sa->nWriteSize - sa->nWriteLen)) {
               /* not enough space in buffer, so flush buffer first */
  -            sa_flush(sa);
  +            (void)sa_flush(sa);
           }
           res = 0;
  -        if (nBufReq >= sa->nWriteSize) {
  +        if ((int)nBufReq >= sa->nWriteSize) {
               /* buffer too small at all, so write immediately */
               while (nBufReq > 0) {
  -                n = sa_write_raw(sa, cpBuf, nBufReq);
  +                n = sa_write_raw(sa, cpBuf, (int)nBufReq);
                   if (n < 0 && errno == ETIMEDOUT)
                       rv = (res == 0 ? SA_ERR_TMT : SA_OK);
                   else if (n < 0)
  @@ -1957,7 +1968,7 @@
               /* (again) enough sprace in buffer, so store data */
               memmove(sa->cpWriteBuf+sa->nWriteLen, cpBuf, nBufReq);
               sa->nWriteLen += nBufReq;
  -            res = nBufReq;
  +            res = (int)nBufReq;
           }
       }
   
  @@ -1989,7 +2000,7 @@
   sa_rc_t sa_writef(sa_t *sa, const char *cpFmt, ...)
   {
       va_list ap;
  -    size_t n;
  +    int n;
       sa_writef_cb_t ctx;
   
       /* argument sanity check(s) */
  @@ -2009,6 +2020,8 @@
       ctx.sa = sa;
       ctx.rv = SA_OK;
       n = sa_mvxprintf(sa_writef_cb, &ctx, cpFmt, ap);
  +    if (n == -1 && ctx.rv == SA_OK)
  +        ctx.rv = SA_ERR_FMT;
       va_end(ap);
   
       return ctx.rv;
  @@ -2043,7 +2056,7 @@
                   rv = SA_ERR_SYS;
               if (n <= 0)
                   break;
  -            memmove(sa->cpWriteBuf, sa->cpWriteBuf+n, sa->nWriteLen-n);
  +            memmove(sa->cpWriteBuf, sa->cpWriteBuf+n, (size_t)(sa->nWriteLen-n));
               sa->nWriteLen -= n;
           }
           sa->nWriteLen = 0;
  @@ -2081,7 +2094,7 @@
   
       /* flush write buffers */
       if ((how & SHUT_WR) || (how & SHUT_RDWR))
  -        sa_flush(sa);
  +        (void)sa_flush(sa);
   
       /* perform shutdown operation on underlying socket */
       if (shutdown(sa->fdSocket, how) == -1)
  @@ -2101,7 +2114,8 @@
   #endif
       } sa_buf;
       socklen_t sa_size;
  -    size_t n;
  +    ssize_t n;
  +    int k;
       fd_set fds;
   
       /* argument sanity check(s) */
  @@ -2122,17 +2136,17 @@
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
           do {
  -            n = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &fds, NULL, NULL,
  +            k = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &fds, NULL, NULL,
                                &sa->tvTimeout[SA_TIMEOUT_READ]);
  -        } while (n == -1 && errno == EINTR);
  -        if (n == 0)
  +        } while (k == -1 && errno == EINTR);
  +        if (k == 0)
               errno = ETIMEDOUT;
  -        if (n <= 0)
  +        if (k <= 0)
               return SA_RC(SA_ERR_SYS);
       }
   
       /* perform receive operation on underlying socket */
  -    sa_size = sizeof(sa_buf);
  +    sa_size = (socklen_t)sizeof(sa_buf);
       if ((n = SA_SC_CALL_6(sa, recvfrom, sa->fdSocket, buf, buflen, 0,
                             (struct sockaddr *)&sa_buf, &sa_size)) == -1)
           return SA_RC(SA_ERR_SYS);
  @@ -2141,13 +2155,13 @@
       if ((rv = sa_addr_create(raddr)) != SA_OK)
           return rv;
       if ((rv = sa_addr_s2a(*raddr, (struct sockaddr *)&sa_buf, sa_size)) != SA_OK) {
  -        sa_addr_destroy(*raddr);
  +        (void)sa_addr_destroy(*raddr);
           return rv;
       }
   
       /* pass actual number of received bytes to caller */
       if (bufdone != NULL)
  -        *bufdone = n;
  +        *bufdone = (size_t)n;
   
       return SA_OK;
   }
  @@ -2155,7 +2169,8 @@
   /* send data via socket */
   sa_rc_t sa_send(sa_t *sa, sa_addr_t *raddr, const char *buf, size_t buflen, size_t *bufdone)
   {
  -    size_t n;
  +    ssize_t n;
  +    int k;
       fd_set fds;
       sa_rc_t rv;
   
  @@ -2178,12 +2193,12 @@
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
           do {
  -            n = SA_SC_CALL_5(sa, select, sa->fdSocket+1, NULL, &fds, NULL,
  +            k = SA_SC_CALL_5(sa, select, sa->fdSocket+1, NULL, &fds, NULL,
                                &sa->tvTimeout[SA_TIMEOUT_WRITE]);
  -        } while (n == -1 && errno == EINTR);
  -        if (n == 0)
  +        } while (k == -1 && errno == EINTR);
  +        if (k == 0)
               errno = ETIMEDOUT;
  -        if (n <= 0)
  +        if (k <= 0)
               return SA_RC(SA_ERR_SYS);
       }
   
  @@ -2193,7 +2208,7 @@
   
       /* pass actual number of sent bytes to caller */
       if (bufdone != NULL)
  -        *bufdone = n;
  +        *bufdone = (size_t)n;
   
       return SA_OK;
   }
  @@ -2202,7 +2217,7 @@
   sa_rc_t sa_sendf(sa_t *sa, sa_addr_t *raddr, const char *cpFmt, ...)
   {
       va_list ap;
  -    size_t nBuf;
  +    int nBuf;
       char *cpBuf;
       sa_rc_t rv;
       char caBuf[1024];
  @@ -2213,11 +2228,12 @@
   
       /* format string into temporary buffer */
       va_start(ap, cpFmt);
  -    nBuf = sa_mvsnprintf(NULL, 0, cpFmt, ap);
  +    if ((nBuf = sa_mvsnprintf(NULL, 0, cpFmt, ap)) == -1)
  +        return SA_RC(SA_ERR_FMT);
       va_end(ap);
  -    if ((nBuf+1) > sizeof(caBuf)) {
  +    if ((nBuf+1) > (int)sizeof(caBuf)) {
           /* requires a larger buffer, so allocate dynamically */
  -        if ((cpBuf = (char *)malloc(nBuf+1)) == NULL)
  +        if ((cpBuf = (char *)malloc((size_t)(nBuf+1))) == NULL)
               return SA_RC(SA_ERR_MEM);
       }
       else {
  @@ -2225,14 +2241,17 @@
           cpBuf = caBuf;
       }
       va_start(ap, cpFmt);
  -    sa_mvsnprintf(cpBuf, nBuf+1, cpFmt, ap);
  +    rv = SA_OK;
  +    if (sa_mvsnprintf(cpBuf, (size_t)(nBuf+1), cpFmt, ap) == -1)
  +        rv = SA_ERR_FMT;
       va_end(ap);
   
       /* pass-through to sa_send() */
  -    rv = sa_send(sa, raddr, cpBuf, nBuf, NULL);
  +    if (rv == SA_OK)
  +        rv = sa_send(sa, raddr, cpBuf, (size_t)nBuf, NULL);
   
       /* cleanup dynamically allocated buffer */
  -    if ((nBuf+1) > sizeof(caBuf))
  +    if ((nBuf+1) > (int)sizeof(caBuf))
           free(cpBuf);
   
       return rv;
  @@ -2252,6 +2271,8 @@
       else if (rv == SA_ERR_EOF) sz = "End Of Communication";
       else if (rv == SA_ERR_TMT) sz = "Communication Timeout";
       else if (rv == SA_ERR_SYS) sz = "Operating System Error";
  +    else if (rv == SA_ERR_NET) sz = "Networking Error";
  +    else if (rv == SA_ERR_FMT) sz = "Formatting Error";
       else if (rv == SA_ERR_IMP) sz = "Implementation Not Available";
       else if (rv == SA_ERR_INT) sz = "Internal Error";
       else                       sz = "Invalid Result Code";

From ossp-cvs-owner@ossp.org  Thu Nov 28 16:42:42 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5802D764B3; Thu, 28 Nov 2002 16:42:42 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa sa.h
Message-Id: <20021128154242.5802D764B3@mail.ossp.org>
Date: Thu, 28 Nov 2002 16:42:42 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Nov-2002 16:42:42
  Branch: HEAD                             Handle: 2002112815424100

  Modified files:
    ossp-pkg/sa             sa.h

  Log:
    fix a few bugs, remove a lot of warnings; all found by splint

  Summary:
    Revision    Changes     Path
    1.35        +2  -0      ossp-pkg/sa/sa.h
  ____________________________________________________________________________

  Index: ossp-pkg/sa/sa.h
  ============================================================
  $ cvs diff -u -r1.34 -r1.35 sa.h
  --- ossp-pkg/sa/sa.h	30 Oct 2002 20:22:06 -0000	1.34
  +++ ossp-pkg/sa/sa.h	28 Nov 2002 15:42:41 -0000	1.35
  @@ -116,6 +116,8 @@
       SA_ERR_EOF, /* End Of Communication         */
       SA_ERR_TMT, /* Communication Timeout        */
       SA_ERR_SYS, /* Operating System Error       */
  +    SA_ERR_NET, /* Networking Error             */
  +    SA_ERR_FMT, /* Formatting Error             */
       SA_ERR_IMP, /* Implementation Not Available */
       SA_ERR_INT  /* Internal Error               */
   } sa_rc_t;

From ossp-cvs-owner@ossp.org  Thu Nov 28 17:11:50 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EAD3A763C6; Thu, 28 Nov 2002 17:11:49 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.c al.h al.pod al_test.c
Message-Id: <20021128161149.EAD3A763C6@mail.ossp.org>
Date: Thu, 28 Nov 2002 17:11:49 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   28-Nov-2002 17:11:49
  Branch: HEAD                             Handle: 2002112816114900

  Modified files:
    ossp-pkg/sio            al.c al.h al.pod al_test.c

  Log:
    new al_spanlabel method

  Summary:
    Revision    Changes     Path
    1.38        +58 -0      ossp-pkg/sio/al.c
    1.16        +1  -0      ossp-pkg/sio/al.h
    1.16        +10 -1      ossp-pkg/sio/al.pod
    1.18        +5  -0      ossp-pkg/sio/al_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.c
  ============================================================
  $ cvs diff -u -r1.37 -r1.38 al.c
  --- ossp-pkg/sio/al.c	28 Nov 2002 15:12:40 -0000	1.37
  +++ ossp-pkg/sio/al.c	28 Nov 2002 16:11:49 -0000	1.38
  @@ -1186,6 +1186,64 @@
   }
   
   /*
  + * traverse assembly line forward and search first chunk
  + * that matches label and continue search until end of
  + * span of same label
  + *
  + * return offset to first byte in *offp
  + * return size of span to last byte in *spanp
  + *
  + * traversal context is kept on stack (XXX ?)
  + */
  +al_rc_t
  +al_spanlabel(al_t *al, size_t off, size_t n, al_label_t label,
  +             size_t *offp, size_t *spanp)
  +{
  +    al_rc_t rc;
  +    al_tx_t tx;                /* XXX - private tx structure on stack */
  +    al_chunk_t *view;
  +    size_t len, total, start;
  +    int have_first;
  +
  +    /*
  +     * we need to track absolute traversal position,
  +     * so we have to see all chunks.. no filtering
  +     * allowed
  +     */
  +    rc = al_traverse(al, off, n, AL_FORWARD, NULL, &tx);
  +    if (rc != AL_OK)
  +        return AL_RC(rc);
  +
  +    have_first = 0;
  +    start      = 0;
  +    total      = 0;
  +    while ((rc = al_traverse_next(al, &tx, &view)) == AL_OK) {
  +        len = AL_CHUNK_LEN(view);
  +        if (AL_SAME_LABEL(view, label)) {
  +            if (!have_first) {
  +                start      = total;
  +                have_first = 1;
  +            }
  +        } else if (have_first)
  +            break;
  +        total += len;
  +    }
  +
  +    al_traverse_end(al, &tx, 1);
  +
  +    if (rc != AL_OK && rc != AL_ERR_EOF)
  +        return AL_RC(rc);
  +
  +    if (!have_first)
  +        return AL_RC(AL_ERR_EOF);
  +
  +    *offp   = off + start;
  +    *spanp  = total - start;
  +
  +    return AL_OK;
  +}
  +
  +/*
    * relay macros to caller
    *
    * al_bytes      - total number of bytes in assembly line
  Index: ossp-pkg/sio/al.h
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 al.h
  --- ossp-pkg/sio/al.h	28 Nov 2002 15:12:40 -0000	1.15
  +++ ossp-pkg/sio/al.h	28 Nov 2002 16:11:49 -0000	1.16
  @@ -74,6 +74,7 @@
   al_rc_t al_setlabel     (al_t *al, size_t off, size_t n, al_label_t label);
   al_rc_t al_flatten      (al_t *al, size_t off, size_t n, al_td_t dir, al_label_t label, char *dst, size_t *lenp);
   al_rc_t al_firstlabel   (al_t *al, size_t off, size_t n, al_td_t dir, al_label_t label, al_label_t *labelp);
  +al_rc_t al_spanlabel    (al_t *al, size_t off, size_t n, al_label_t label, size_t *offp, size_t *spanp);
   
   size_t     al_bytes      (const al_t *al);
   size_t     al_chunk_len  (al_chunk_t *alc);
  Index: ossp-pkg/sio/al.pod
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 al.pod
  --- ossp-pkg/sio/al.pod	28 Nov 2002 15:12:40 -0000	1.15
  +++ ossp-pkg/sio/al.pod	28 Nov 2002 16:11:49 -0000	1.16
  @@ -75,7 +75,8 @@
   
   al_flatten,
   al_copy,
  -al_firstlabel.
  +al_firstlabel,
  +al_spanlabel.
   
   =item B<Chunk Operations>:
   
  @@ -391,6 +392,14 @@
   assembly line I<al>. The label that was attached to the first byte
   within the defined span is stored in I<labelp>, otherwise B<al_firstlabel>
   returns an error.
  +
  +=item al_rc_t B<al_spanlabel>(al_t *I<al>, size_t I<off>, size_t I<n>, al_label_t *I<label>, size_t *<offp>, size_t *<spanp>);
  +
  +I<off> and I<n> are byte counts that define a span of bytes within the
  +assembly line I<al>. This span is searched for data tagged with the I<label>.
  +The absolute byte offset of the first byte matching the label and the
  +length of the span of the same label is returned in I<offp> and I<spanp>
  +respectively.
   
   =back
   
  Index: ossp-pkg/sio/al_test.c
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 al_test.c
  --- ossp-pkg/sio/al_test.c	28 Nov 2002 15:12:40 -0000	1.17
  +++ ossp-pkg/sio/al_test.c	28 Nov 2002 16:11:49 -0000	1.18
  @@ -149,6 +149,7 @@
       al_t *al, *al2, *al3, *al4;
       char baf[] = "Mittendrin\n";
       int i;
  +    size_t off, span;
   
       al_create(&al);
       al_create(&al2);
  @@ -184,6 +185,10 @@
       rc = al_setlabel(al4, 5, 9, LABEL2);
       printf("setlabel result: %d (%s)\n\n",rc,al_error(rc));
       checklen("COPY",al4);
  +
  +    rc = al_spanlabel(al4, 8, al_bytes(al), LABEL, &off, &span);
  +    printf("spanlabel result: %d (%s)\n\n",rc,al_error(rc));
  +    printf("offset = %d, span = %d\n",off,span);
   
       DUMP("SPLICED",al);
       print("SPLICED", al);

From ossp-cvs-owner@ossp.org  Thu Nov 28 17:29:38 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6D5707649B; Thu, 28 Nov 2002 17:29:38 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio.c sio.h sio.pod
Message-Id: <20021128162938.6D5707649B@mail.ossp.org>
Date: Thu, 28 Nov 2002 17:29:38 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   28-Nov-2002 17:29:38
  Branch: HEAD                             Handle: 2002112816293700

  Modified files:
    ossp-pkg/sio            sio.c sio.h sio.pod

  Log:
    changed sio_input API to support label filtering

  Summary:
    Revision    Changes     Path
    1.14        +22 -8      ossp-pkg/sio/sio.c
    1.8         +1  -1      ossp-pkg/sio/sio.h
    1.7         +4  -1      ossp-pkg/sio/sio.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio.c
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 sio.c
  --- ossp-pkg/sio/sio.c	24 Nov 2002 19:36:48 -0000	1.13
  +++ ossp-pkg/sio/sio.c	28 Nov 2002 16:29:37 -0000	1.14
  @@ -487,12 +487,10 @@
           sios->module->shutdown(sio, sios->userdata) == SIO_OK) {
   
           if (sios->rw == SIO_MODE_WRITE || sios->rw == SIO_MODE_READWRITE) {
  -printf("final output\n");
               rc = sio_strategy(sio, HEAD(&sio->writers,hd));
               if (rc != SIO_OK) return SIO_RC(rc);
           }
           if (sios->rw == SIO_MODE_READ || sios->rw == SIO_MODE_READWRITE) {
  -printf("final input\n");
               sio_strategy(sio, HEAD(&sio->readers,hd));
               if (rc != SIO_OK) return SIO_RC(rc);
           }
  @@ -532,17 +530,21 @@
    *
    * if there is no data in the reader assembly line
    *  then schedule the input side of the pipe once
  + *  if this still doesn't retrieve data then raise
  + *  a SIO_ERR_EOF error.
    *
    * retrieve data from the reader assembly line up to
  - * the specified byte limit
  + * the specified byte limit for the first span of
  + * the specified label or any data if label == NULL
    *
    */
  -sio_rc_t sio_input(sio_t *sio, al_t *al, size_t limit)
  +sio_rc_t sio_input(sio_t *sio, al_t *al, size_t limit, al_label_t label)
   {
       sio_rc_t rc;
       sio_halfduplex_t *h;
       al_t *src;
       size_t n;
  +    size_t datastart, datasize;
   
       /* argument sanity check(s) */
       if (sio == NULL || al == NULL)
  @@ -565,10 +567,22 @@
   
       }
   
  -    if (n > limit)
  -        n = limit;
  +    if (label == NULL) {
  +        datastart = 0;
  +        datasize  = n;
  +    } else if (al_spanlabel(src, 0, n, label, &datastart, &datasize) != AL_OK) {
  +        datastart = 0;
  +        datasize  = 0;
  +    }
  +
  +    /*
  +     * clamp to requested size
  +     */
  +    if (datasize > n)
  +        datasize = n;
   
  -    (void) al_splice(src, 0, n, NULL, al); /* XXX - error handling ? */
  +    /* XXX - error handling ? */
  +    (void) al_splice(src, datastart, datasize, NULL, al);
   
       return SIO_OK;
   }
  @@ -688,7 +702,7 @@
       arc = al_create(&al);
       if (arc != AL_OK) return SIO_RC(SIO_ERR_INT);
   
  -    rc = sio_input(sio, al, n);
  +    rc = sio_input(sio, al, n, NULL);
       if (rc == SIO_OK) {
           sio->dst = dst;
           al_traverse_cb(al, 0, n, AL_FORWARD, NULL, sio_readchunk, (void*)sio);
  Index: ossp-pkg/sio/sio.h
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 sio.h
  --- ossp-pkg/sio/sio.h	24 Nov 2002 19:36:48 -0000	1.7
  +++ ossp-pkg/sio/sio.h	28 Nov 2002 16:29:37 -0000	1.8
  @@ -77,7 +77,7 @@
   sio_rc_t    sio_attach         (sio_t  *sio, sio_stage_t *sios, sio_mode_t rw);
   sio_rc_t    sio_detach         (sio_t  *sio, sio_stage_t *sios);
   
  -sio_rc_t    sio_input          (sio_t  *sio, al_t *al, size_t limit);
  +sio_rc_t    sio_input          (sio_t  *sio, al_t *al, size_t limit, al_label_t label);
   sio_rc_t    sio_output         (sio_t  *sio, al_t *al);
   
   sio_rc_t    sio_read           (sio_t  *sio, char *dst, size_t n, size_t *actualp);
  Index: ossp-pkg/sio/sio.pod
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 sio.pod
  --- ossp-pkg/sio/sio.pod	24 Nov 2002 19:47:08 -0000	1.6
  +++ ossp-pkg/sio/sio.pod	28 Nov 2002 16:29:37 -0000	1.7
  @@ -192,10 +192,13 @@
   Destroy the stream object I<sio>. The object is invalid after this
   call succeeded.
   
  -=item sio_rc_t B<sio_input>(sio_t *I<sio>, al_t *I<al>, size_t limit);
  +=item sio_rc_t B<sio_input>(sio_t *I<sio>, al_t *I<al>, size_t limit, al_label_t label);
   
   Pull data from stream object I<sio>, the data is appended to the
   assembly line I<al> and will contain no more than I<limit> bytes.
  +If label != NULL then only data that is tagged with this label
  +will be pulled from the stream. However, finally all data must
  +be pulled from the stream before new I/O operations are scheduled.
   
   =item sio_rc_t B<sio_output>(sio_t *I<sio>, al_t *I<al>);
   

From ossp-cvs-owner@ossp.org  Thu Nov 28 17:39:40 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B51B0763C6; Thu, 28 Nov 2002 17:39:40 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio.c
Message-Id: <20021128163940.B51B0763C6@mail.ossp.org>
Date: Thu, 28 Nov 2002 17:39:40 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   28-Nov-2002 17:39:40
  Branch: HEAD                             Handle: 2002112816394000

  Modified files:
    ossp-pkg/sio            sio.c

  Log:
    use new sio_input facility in sio_read

  Summary:
    Revision    Changes     Path
    1.15        +12 -32     ossp-pkg/sio/sio.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio.c
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 sio.c
  --- ossp-pkg/sio/sio.c	28 Nov 2002 16:29:37 -0000	1.14
  +++ ossp-pkg/sio/sio.c	28 Nov 2002 16:39:40 -0000	1.15
  @@ -96,7 +96,6 @@
       sio_labelnum_t              label_eof;
       int                         eof_flag;     /* accumulating flags        */
       int                         error_flag;
  -    char                       *dst;       /* write pointer for sio_read   */
   };
   
   /*
  @@ -659,32 +658,6 @@
   }
   
   /*
  - * callback used by sio_read to scan through
  - * reader assembly line
  - *
  - * data chunks are copied to the destination buffer
  - * error chunks set the error flag
  - * eof chunks set the eof flag
  - */
  -static al_rc_t sio_readchunk(al_chunk_t *alc, void *u)
  -{
  -    sio_t *sio = (sio_t *)u;
  -    size_t len;
  -
  -    if (al_same_label(alc, SIO_LABEL_DATA(sio))) {
  -        len = al_chunk_len(alc);
  -        memcpy(sio->dst, al_chunk_ptr(alc,0), len);
  -        sio->dst += len;
  -    } else if (al_same_label(alc, SIO_LABEL_ERROR(sio))) {
  -        sio->error_flag = 1;
  -    } else if (al_same_label(alc, SIO_LABEL_EOF(sio))) {
  -        sio->eof_flag = 1;
  -    }
  -
  -    return AL_OK;
  -}
  -
  -/*
    * retrieve data from the pipe into a buffer much like read()
    *
    * handles error and eof signals
  @@ -702,11 +675,18 @@
       arc = al_create(&al);
       if (arc != AL_OK) return SIO_RC(SIO_ERR_INT);
   
  -    rc = sio_input(sio, al, n, NULL);
  -    if (rc == SIO_OK) {
  -        sio->dst = dst;
  -        al_traverse_cb(al, 0, n, AL_FORWARD, NULL, sio_readchunk, (void*)sio);
  -        *actualp = sio->dst - dst;
  +    rc = sio_input(sio, al, n, SIO_LABEL_DATA(sio));
  +    if (rc == SIO_OK && al_bytes(al) > 0)
  +        al_flatten(al, 0, n, AL_FORWARD, NULL, dst, actualp);
  +    else {
  +        rc = sio_input(sio, al, n, SIO_LABEL_ERROR(sio));
  +        if (rc == SIO_OK && al_bytes(al) > 0)
  +            sio->error_flag = 1;
  +        else {
  +            rc = sio_input(sio, al, n, SIO_LABEL_EOF(sio));
  +            if (rc == SIO_OK && al_bytes(al) > 0)
  +                sio->eof_flag = 1;
  +        }
       }
   
       arc = al_destroy(al);

From ossp-cvs-owner@ossp.org  Thu Nov 28 18:04:19 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 372A7763C6; Thu, 28 Nov 2002 18:04:19 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq TODO devtool.conf titassist.cpp
Message-Id: <20021128170419.372A7763C6@mail.ossp.org>
Date: Thu, 28 Nov 2002 18:04:19 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   28-Nov-2002 18:04:18
  Branch: HEAD                             Handle: 2002112817041800

  Modified files:
    ossp-pkg/titraq         TODO devtool.conf titassist.cpp

  Log:
    Small corrections to toolbar and buildconf, and remember task aliases.

  Summary:
    Revision    Changes     Path
    1.22        +1  -0      ossp-pkg/titraq/TODO
    1.3         +0  -1      ossp-pkg/titraq/devtool.conf
    1.36        +1  -1      ossp-pkg/titraq/titassist.cpp
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/TODO
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 TODO
  --- ossp-pkg/titraq/TODO	28 Nov 2002 11:12:02 -0000	1.21
  +++ ossp-pkg/titraq/TODO	28 Nov 2002 17:04:18 -0000	1.22
  @@ -43,6 +43,7 @@
   <aspect name wert>      Sichtliche Functionalitaet
   <session name wert>     Automatisch gespeicherte
   <rule name expr cond>   Amount = Finish - Start (mussen alle da z.B.)
  +<alias name wert>       Nutzbar lange Taskzeilen zu abstrahieren
   <macro name = 'Reuse'>
     Selectiere aktuelle und 3 vorherige Reihen
     Copy
  Index: ossp-pkg/titraq/devtool.conf
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.conf
  --- ossp-pkg/titraq/devtool.conf	18 Nov 2002 16:01:44 -0000	1.2
  +++ ossp-pkg/titraq/devtool.conf	28 Nov 2002 17:04:18 -0000	1.3
  @@ -13,7 +13,6 @@
   %configure
       ./configure \
           --prefix=/tmp/titraq \
  -        --disable-shared \
           "$@"
   
   %version
  Index: ossp-pkg/titraq/titassist.cpp
  ============================================================
  $ cvs diff -u -r1.35 -r1.36 titassist.cpp
  --- ossp-pkg/titraq/titassist.cpp	28 Nov 2002 10:31:33 -0000	1.35
  +++ ossp-pkg/titraq/titassist.cpp	28 Nov 2002 17:04:18 -0000	1.36
  @@ -347,7 +347,7 @@
       if (m_pWhatstools == NULL)                  // Sanity check
           throw Genexcept("Whats this tool bar creation failed.");
       m_pWhatstools->setLabel(trUtf8("Whats this"));
  -    m_pWhatstools->setOpaqueMoving(true);
  +    m_pWhatstools->setOpaqueMoving(false);
       m_pWhatstools->setCloseMode(QDockWindow::Never);
       QWhatsThis::whatsThisButton(m_pWhatstools); // Preconfigured whats this button
   }

From ossp-cvs-owner@ossp.org  Thu Nov 28 18:21:56 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CEEBD7649B; Thu, 28 Nov 2002 18:21:55 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.c al.h al.pod
Message-Id: <20021128172155.CEEBD7649B@mail.ossp.org>
Date: Thu, 28 Nov 2002 18:21:55 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   28-Nov-2002 18:21:55
  Branch: HEAD                             Handle: 2002112817215500

  Modified files:
    ossp-pkg/sio            al.c al.h al.pod

  Log:
    make al_setlabel conditional (use oldlabel == NULL for unconditional
    behavíour)

  Summary:
    Revision    Changes     Path
    1.39        +7  -4      ossp-pkg/sio/al.c
    1.17        +1  -1      ossp-pkg/sio/al.h
    1.17        +4  -3      ossp-pkg/sio/al.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.c
  ============================================================
  $ cvs diff -u -r1.38 -r1.39 al.c
  --- ossp-pkg/sio/al.c	28 Nov 2002 16:11:49 -0000	1.38
  +++ ossp-pkg/sio/al.c	28 Nov 2002 17:21:55 -0000	1.39
  @@ -821,7 +821,8 @@
    *
    */
   al_rc_t
  -al_setlabel(al_t *al, size_t off, size_t n, al_label_t label)
  +al_setlabel(al_t *al, size_t off, size_t n,
  +            al_label_t oldlabel, al_label_t newlabel)
   {
       al_rc_t rc;
       al_chunk_t *cur, *splitbuf;
  @@ -853,7 +854,8 @@
        * then split chunk at offset, continue
        * with second half
        */
  -    if (AL_SAME_LABEL(cur, label)) {
  +    if (!AL_SAME_LABEL(cur, oldlabel) ||
  +        AL_SAME_LABEL(cur, newlabel)) {
           len = AL_CHUNK_LEN(cur) - skip;
           n = n < len ? 0 : n - len;
           cur = NEXT(cur, chunks);
  @@ -876,7 +878,8 @@
        */
       while (n > 0 && cur != NULL) {
           len = AL_CHUNK_LEN(cur);
  -        if (AL_SAME_LABEL(cur, label)) {
  +        if (!AL_SAME_LABEL(cur, oldlabel) ||
  +            AL_SAME_LABEL(cur, newlabel)) {
               n = n < len ? 0 : n - len;
           } else {
               if (n < len) {
  @@ -890,7 +893,7 @@
                   cur = splitbuf;
                   len = AL_CHUNK_LEN(cur);
               }
  -            AL_CHUNK_LABEL(cur) = label;
  +            AL_CHUNK_LABEL(cur) = newlabel;
               n   -= len;
           }
           cur  = NEXT(cur, chunks);
  Index: ossp-pkg/sio/al.h
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 al.h
  --- ossp-pkg/sio/al.h	28 Nov 2002 16:11:49 -0000	1.16
  +++ ossp-pkg/sio/al.h	28 Nov 2002 17:21:55 -0000	1.17
  @@ -71,7 +71,7 @@
   al_rc_t al_traverse_cb  (al_t *al, size_t off, size_t n, al_td_t dir, al_label_t label, al_rc_t (*cb)(al_chunk_t *, void *), void *u);
   al_rc_t al_copy         (al_t *al, size_t off, size_t n, al_label_t label, al_t *tal);
   al_rc_t al_splice       (al_t *al, size_t off, size_t n, al_t *nal, al_t *tal);
  -al_rc_t al_setlabel     (al_t *al, size_t off, size_t n, al_label_t label);
  +al_rc_t al_setlabel     (al_t *al, size_t off, size_t n, al_label_t oldlabel, al_label_t newlabel);
   al_rc_t al_flatten      (al_t *al, size_t off, size_t n, al_td_t dir, al_label_t label, char *dst, size_t *lenp);
   al_rc_t al_firstlabel   (al_t *al, size_t off, size_t n, al_td_t dir, al_label_t label, al_label_t *labelp);
   al_rc_t al_spanlabel    (al_t *al, size_t off, size_t n, al_label_t label, size_t *offp, size_t *spanp);
  Index: ossp-pkg/sio/al.pod
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 al.pod
  --- ossp-pkg/sio/al.pod	28 Nov 2002 16:11:49 -0000	1.16
  +++ ossp-pkg/sio/al.pod	28 Nov 2002 17:21:55 -0000	1.17
  @@ -272,11 +272,12 @@
   The buffer now holds the string "HelloGoodbye\n".
   The insertion is empty.
   
  -=item al_rc_t B<al_setlabel>(al_t *I<al>, size_t I<off>, size_t I<n>, al_label_t *label);
  +=item al_rc_t B<al_setlabel>(al_t *I<al>, size_t I<off>, size_t I<n>, al_label_t oldlabel, al_label_t newlabel);
   
   I<off> and I<n> are byte counts that define a span of bytes within the
  -source assembly line I<al>. These bytes are tagged with I<label>, any
  -existing label for these bytes is overwritten.
  +source assembly line I<al>. The bytes within that span that match I<oldlabel>
  +are tagged with I<newlabel>, any existing labels for these bytes are
  +overwritten.
   
   =item size_t B<al_bytes>(const al_t *I<al>);
   

From ossp-cvs-owner@ossp.org  Thu Nov 28 18:44:15 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 379C5763C6; Thu, 28 Nov 2002 18:44:15 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al_test.c
Message-Id: <20021128174415.379C5763C6@mail.ossp.org>
Date: Thu, 28 Nov 2002 18:44:15 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   28-Nov-2002 18:44:15
  Branch: HEAD                             Handle: 2002112817441400

  Modified files:
    ossp-pkg/sio            al_test.c

  Log:
    more labelling test

  Summary:
    Revision    Changes     Path
    1.19        +5  -2      ossp-pkg/sio/al_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al_test.c
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 al_test.c
  --- ossp-pkg/sio/al_test.c	28 Nov 2002 16:11:49 -0000	1.18
  +++ ossp-pkg/sio/al_test.c	28 Nov 2002 17:44:14 -0000	1.19
  @@ -37,9 +37,10 @@
   #include "al.h"
   
   /* get unique pointers */
  -static char label, label2;
  +static char label, label2, label3;
   #define LABEL  ((al_label_t)&label)
   #define LABEL2 ((al_label_t)&label2)
  +#define LABEL3 ((al_label_t)&label3)
   
   #define S(s) s, strlen(s)
   
  @@ -182,7 +183,9 @@
       checklen("SPLICED",al);
       checklen("COPY",al4);
   
  -    rc = al_setlabel(al4, 5, 9, LABEL2);
  +    rc = al_setlabel(al4, 7, 2, NULL, LABEL3);
  +    printf("setlabel result: %d (%s)\n\n",rc,al_error(rc));
  +    rc = al_setlabel(al4, 5, 9, LABEL, LABEL2);
       printf("setlabel result: %d (%s)\n\n",rc,al_error(rc));
       checklen("COPY",al4);
   

From ossp-cvs-owner@ossp.org  Thu Nov 28 18:45:17 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E6A8C764B2; Thu, 28 Nov 2002 18:45:16 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio_sio.c
Message-Id: <20021128174516.E6A8C764B2@mail.ossp.org>
Date: Thu, 28 Nov 2002 18:45:16 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   28-Nov-2002 18:45:16
  Branch: HEAD                             Handle: 2002112817451500

  Added files:
    ossp-pkg/sio            sio_sio.c

  Log:
    use another SIO as a sink/source with some preliminary relabeling support.

  Summary:
    Revision    Changes     Path
    1.1         +163 -0     ossp-pkg/sio/sio_sio.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio_sio.c
  ============================================================
  $ cvs update -p -r1.1 sio_sio.c
  #include <stddef.h>
  #include <stdlib.h>
  #include <string.h>
  #include <limits.h>
  
  #include "al.h"
  #include "sio.h"
  
  typedef struct {
      sio_t      *upstream;
      al_label_t  label;
      al_label_t  data_label;
      al_label_t  eof_label;
      al_label_t  error_label;
      char        eof;
  } private_t;
  
  /*
   * create stage
   *
   * allocate private instance data
   */
  static
  sio_rc_t siosio_init(sio_t *sio, void **up)
  {
      private_t *my;
      
      my = (private_t *)malloc(sizeof(private_t));
      if (my == NULL)
          return SIO_ERR_MEM;
  
      my->upstream = NULL;
      my->label    = NULL;
      my->eof      = '\0';
  
      sio_label(sio, SIO_LN_DATA,  &my->data_label);
      sio_label(sio, SIO_LN_ERROR, &my->error_label);
      sio_label(sio, SIO_LN_EOF,   &my->eof_label);
  
      *up = my;
  
      return SIO_OK;
  }
  
  /*
   * configure stage
   *
   * pass two void pointers
   */
  static
  sio_rc_t siosio_configure(sio_t *sio, void *u, void *obj, void *val)
  {
      private_t *my = (private_t *)u;
      const char *name = (const char *)obj;
  
      if (!strcmp(name, "upstream")) {
          my->upstream = (sio_t *)val;
      } else if (!strcmp(name, "label")) {
          my->label = (al_label_t)val;
      } else {
          return SIO_ERR_ARG;
      }
  
      return SIO_OK;
  }
  
  /*
   * destroy stage
   */
  static
  sio_rc_t siosio_cleanup(sio_t *sio, void *u)
  {
      private_t *my = (private_t *)u;
  
      free(my);
  
      return SIO_OK;
  }
  
  static
  sio_rc_t siosio_openr(sio_t *sio, al_t *al, void *u)
  {
      private_t *my = (private_t *)u;
  
      if (my->upstream == NULL ||
          my->label    == NULL)
          return SIO_ERR_ARG;
  
      return SIO_OK;
  }
  
  static
  sio_rc_t siosio_closer(sio_t *sio, al_t *al, void *u)
  {
      return SIO_OK;
  }
  
  static
  sio_rc_t siosio_openw(sio_t *sio, al_t *al, void *u)
  {
      private_t *my = (private_t *)u;
  
      if (my->upstream == NULL ||
          my->label    == NULL)
          return SIO_ERR_ARG;
  
      return SIO_OK;
  }
  
  static
  sio_rc_t siosio_closew(sio_t *sio, al_t *al, void *u)
  {
      return SIO_OK;
  }
  
  static
  sio_rc_t siosio_input(sio_t *sio, al_t *al, void *u)
  {
      private_t *my = (private_t *)u;
  
      if (al_bytes(al) == 0) {
          sio_input(my->upstream, al, SIZE_T_MAX, my->label);
          if (al_bytes(al) > 0) {
              if (my->label != my->data_label)
                  al_setlabel(al, 0, al_bytes(al), my->label, my->data_label);
          } else
              al_append_bytes(al, &my->eof, sizeof(my->eof), my->eof_label);
      }
  
      return SIO_SCHED_DOWN;
  }
  
  static
  sio_rc_t siosio_output(sio_t *sio, al_t *al, void *u)
  {
      private_t *my = (private_t *)u;
  
      if (al_bytes(al) > 0) {
          /* recolor data */
          if (my->label != my->data_label)
              al_setlabel(al, 0, al_bytes(al), my->data_label, my->label);
          /* send out */
          /* XXX error handling ? */
          sio_output(my->upstream, al);
      }
  
      return SIO_SCHED_DOWN;
  }
  
  sio_module_t sio_module_sio = {
      "sio",
      siosio_init,
      siosio_configure,
      siosio_cleanup,
      siosio_openr,
      siosio_closer,
      siosio_openw,
      siosio_closew,
      siosio_input,
      siosio_output,
      NULL
  };
  

From ossp-cvs-owner@ossp.org  Thu Nov 28 18:53:43 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 50178763C6; Thu, 28 Nov 2002 18:53:43 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/tool/asgui index.wml ossp-web/pkg/tool index....
Message-Id: <20021128175343.50178763C6@mail.ossp.org>
Date: Thu, 28 Nov 2002 18:53:43 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-web                         Date:   28-Nov-2002 18:53:43
  Branch: HEAD                             Handle: 2002112817534200

  Added files:
    ossp-web/pkg/tool/asgui index.wml
  Modified files:
    ossp-web/pkg/tool       index.wml

  Log:
    Created home page for project asgui.

  Summary:
    Revision    Changes     Path
    1.1         +37 -0      ossp-web/pkg/tool/asgui/index.wml
    1.20        +5  -2      ossp-web/pkg/tool/index.wml
  ____________________________________________________________________________

  Index: ossp-web/pkg/tool/asgui/index.wml
  ============================================================
  $ cvs update -p -r1.1 index.wml
  
  #use wml::ossp area=pkg:tool subarea=asgui
  
  <title>OSSP asgui</title>
  
  <h1>Accounting system graphical user interface</h1>
  
  <h2>Abstract</h2>
  
  OSSP asgui is an accounting system graphical user interface. Intended to
  serve as both a virtual punch card and time tracker, it is the graphical
  user interface for the family of OSSP accounting system tools.
  
  <h2>Authors</h2>
  
  <pkg_author name="Michael Schloh von Bennewitz" mail="michael@schloh.com">
  
  <h2>Status</h2>
  
  <pkg_status
      stable="none"    stable_date="none"
      unstable="0.9.2" unstable_date="19-Aug-2002"
      done=95>
  
  <h2>Source</h2>
  
  <pkg_files 
      cvs=$(CVS_ROOT_URL)/pkg/tool/asgui/
      url=$(FTP_ROOT_URL)/pkg/tool/asgui/
      directory=$(FTP_ROOT_DIR)/pkg/tool/asgui/
      files="asgui-*.tar.gz" 
      stable="none" unstable="asgui-0.5.0.tar.gz">
      
  <h2>Donation</h2>
  
  <pkg_donation name="asgui" return="$(BASE_URL)/pkg/tool/asgui/">
  
  Index: ossp-web/pkg/tool/index.wml
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 index.wml
  --- ossp-web/pkg/tool/index.wml	2 Nov 2002 13:03:23 -0000	1.19
  +++ ossp-web/pkg/tool/index.wml	28 Nov 2002 17:53:42 -0000	1.20
  @@ -7,8 +7,8 @@
   
   The tools OSSP provides are either developed for internal use in the
   OSSP project environment or for the build process of the other OSSP
  -components. They are all small stand-alone applications and can be used
  -fully separately. 
  +components. They are all small stand-alone applications that can be
  +independently used.
   
   <p>
   <pkg_list>
  @@ -24,6 +24,9 @@
     <pkg_item name="petidomo" longname="OSSP petidomo" type="tool" derived=yes
               desc="Mailing List Manager"
   	        done=95 stable="none" unstable="4.0b1">
  +  <pkg_item name="asgui" longname="OSSP asgui" type="tool"
  +            desc="Accounting system graphical user interface"
  +	        done=45 stable="none" unstable="0.5.0">
     <pkg_item name="shiela" longname="OSSP shiela" type="tool"
               desc="CVS Access Control and Logging"
   	        done=95 stable="none" unstable="0.9.2">

From ossp-cvs-owner@ossp.org  Thu Nov 28 21:44:40 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E12E07643E; Thu, 28 Nov 2002 21:44:39 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq Makefile.in README TODO aclocal.m4 configu...
Message-Id: <20021128204439.E12E07643E@mail.ossp.org>
Date: Thu, 28 Nov 2002 21:44:39 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   28-Nov-2002 21:44:39
  Branch: HEAD                             Handle: 197001010100001038512679

  Added files:
    ossp-pkg/titraq         titraq_version.cpp
  Modified files:
    ossp-pkg/titraq         Makefile.in README TODO aclocal.m4 configure.in
                            devtool devtool.conf devtool.func generic.cpp
                            generic.h main.cpp tidatops.cpp titabitem.h
                            titable.cpp titable.h titamount.cpp titamount.h
                            titassist.cpp titconst.h titprefs.cpp
                            titraq.conf.pod titraq.cpp titraq.h titraq.pod
                            titraq_test.sh titrex.cpp titrex.h titslot.cpp
    ossp-pkg/titraq/gfx     cwlogo.xpm osspicon.xpm ossplogo.xpm rowadd.xpm
                            rowdel.xpm
  Removed files:
    ossp-pkg/titraq         titraq_version.c

  Log:
    Massive build configuration preparation, added boilerplate header text,
    and cleaned up whitespace.

  Summary:
    Revision    Changes     Path
    1.19        +24 -19     ossp-pkg/titraq/Makefile.in
    1.3         +47 -8      ossp-pkg/titraq/README
    1.23        +1  -1      ossp-pkg/titraq/TODO
    1.3         +1  -1      ossp-pkg/titraq/aclocal.m4
    1.5         +12 -7      ossp-pkg/titraq/configure.in
    1.2         +1  -1      ossp-pkg/titraq/devtool
    1.4         +39 -4      ossp-pkg/titraq/devtool.conf
    1.2         +1  -1      ossp-pkg/titraq/devtool.func
    1.2         +33 -0      ossp-pkg/titraq/generic.cpp
    1.2         +31 -0      ossp-pkg/titraq/generic.h
    1.2         +31 -0      ossp-pkg/titraq/gfx/cwlogo.xpm
    1.2         +31 -0      ossp-pkg/titraq/gfx/osspicon.xpm
    1.5         +31 -0      ossp-pkg/titraq/gfx/ossplogo.xpm
    1.2         +31 -0      ossp-pkg/titraq/gfx/rowadd.xpm
    1.2         +31 -0      ossp-pkg/titraq/gfx/rowdel.xpm
    1.7         +32 -0      ossp-pkg/titraq/main.cpp
    1.9         +35 -4      ossp-pkg/titraq/tidatops.cpp
    1.4         +31 -0      ossp-pkg/titraq/titabitem.h
    1.2         +31 -0      ossp-pkg/titraq/titable.cpp
    1.3         +31 -0      ossp-pkg/titraq/titable.h
    1.4         +31 -0      ossp-pkg/titraq/titamount.cpp
    1.2         +31 -0      ossp-pkg/titraq/titamount.h
    1.37        +32 -1      ossp-pkg/titraq/titassist.cpp
    1.8         +37 -0      ossp-pkg/titraq/titconst.h
    1.3         +4  -4      ossp-pkg/titraq/titprefs.cpp
    1.2         +8  -7      ossp-pkg/titraq/titraq.conf.pod
    1.23        +31 -0      ossp-pkg/titraq/titraq.cpp
    1.35        +31 -0      ossp-pkg/titraq/titraq.h
    1.2         +8  -7      ossp-pkg/titraq/titraq.pod
    1.3         +31 -1      ossp-pkg/titraq/titraq_test.sh
    NONE        +0  -45     ossp-pkg/titraq/titraq_version.c
    1.1         +0  -0      ossp-pkg/titraq/titraq_version.cpp
    1.2         +32 -0      ossp-pkg/titraq/titrex.cpp
    1.2         +31 -0      ossp-pkg/titraq/titrex.h
    1.28        +31 -0      ossp-pkg/titraq/titslot.cpp
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/Makefile.in
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 Makefile.in
  --- ossp-pkg/titraq/Makefile.in	27 Nov 2002 22:44:48 -0000	1.18
  +++ ossp-pkg/titraq/Makefile.in	28 Nov 2002 20:44:36 -0000	1.19
  @@ -1,11 +1,12 @@
   ##
  -##  OSSP titraq - Graphical user interface for time accounting
  -##  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  -##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002 Ralf S. Engelschall
  +##  OSSP asgui - Accounting system graphical user interface
  +##  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
   ##
  -##  This file is part of OSSP GUI, a graphical user interface
  -##  for OSSP which can be found at http://www.ossp.org/
  +##  This file is part of OSSP asgui, an accounting system graphical user
  +##  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  @@ -25,7 +26,7 @@
   ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   ##  SUCH DAMAGE.
   ##
  -##  Makefile.in: Makefile for use with configure
  +##  Makefile.in: Autoconf Makefile template
   ##
   
   @SET_MAKE@
  @@ -65,7 +66,7 @@
   TARGET_PROGS    = titraq
   TARGET_MANS     = titraq.1 titraq.conf.5
   
  -SRCS            = main.cpp titraq.cpp titassist.cpp titslot.cpp tidatops.cpp titrex.cpp generic.cpp titamount.cpp titable.cpp titprefs.cpp titraq_version.c
  +SRCS            = main.cpp titraq.cpp titassist.cpp titslot.cpp tidatops.cpp titrex.cpp generic.cpp titamount.cpp titable.cpp titprefs.cpp titraq_version.cpp
   
   OBJS            = main.o titraq.o titassist.o titslot.o tidatops.o titrex.o generic.o titamount.o titable.o titprefs.o titraq_version.o
   
  @@ -98,18 +99,22 @@
   	$(MOC) $< -o $@
   
   titraq.1: titraq.pod
  -	VS=`$(SHTOOL) version -lc -dshort titraq_version.c`; \
  -	VL=`$(SHTOOL) version -lc -dlong titraq_version.c`; \
  -	$(POD2MAN) --section=5 --center="Graphical user interface" \
  -               --release="$$VS" --date="$$VL" \
  -               titraq.pod >titraq.1
  +	VS=`$(SHTOOL) version -lc -dshort titraq_version.cpp`; \
  +	VL=`$(SHTOOL) version -lc -dlong titraq_version.cpp`; \
  +	D=`$(SHTOOL) version -lc -dlong titraq_vers.c | sed -e 's;.*(;;' -e 's;).*;;'`; \
  +	$(POD2MAN) --quotes=none \
  +               --section=1 --center="AS Graphical User Interface" \
  +               --release="$$D" --date="OSSP asgui $$VS" titraq.pod | \
  +               sed -e "s;TITRAQ_VERSION_STR;$$VL;" >titraq.1
   
   titraq.conf.5: titraq.conf.pod
  -	VS=`$(SHTOOL) version -lc -dshort titraq_version.c`; \
  -	VL=`$(SHTOOL) version -lc -dlong titraq_version.c`; \
  -	$(POD2MAN) --section=5 --center="Graphical user interface config file" \
  -               --release="$$VS" --date="$$VL" \
  -               titraq.conf.pod >titraq.conf.5
  +	VS=`$(SHTOOL) version -lc -dshort titraq_version.cpp`; \
  +	VL=`$(SHTOOL) version -lc -dlong titraq_version.cpp`; \
  +	D=`$(SHTOOL) version -lc -dlong titraq_vers.c | sed -e 's;.*(;;' -e 's;).*;;'`; \
  +	$(POD2MAN) --quotes=none \
  +               --section=5 --center="AS Preferences File" \
  +               --release="$$D" --date="OSSP asgui $$VS" titraq.conf.pod | \
  +               sed -e "s;TITRAQ_VERSION_STR;$$VL;" >titraq.conf.5
   
   install:
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
  @@ -133,7 +138,7 @@
   distclean: clean
   	$(RM) config.log config.status config.cache # Generated by ./configure
   	$(RM) Makefile ac_config.h                  # Generated by ./configure
  -	$(RM) $(MOC_OUT)                         # Generated by $(MOC)
  +	$(RM) $(MOC_OUT)                        # Generated by $(MOC)
   
   realclean: distclean
   	$(RM) configure ac_config.h.in*             # Generated by Autoconf
  Index: ossp-pkg/titraq/README
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 README
  --- ossp-pkg/titraq/README	8 Nov 2002 12:21:34 -0000	1.2
  +++ ossp-pkg/titraq/README	28 Nov 2002 20:44:36 -0000	1.3
  @@ -1,9 +1,48 @@
  -To build titraq:
  -  ./devtool autogen
  -  ./devtool configure
  -  make
  -
  -Expect:
  -  Executable 'titraq' statically linked to Qt and X libs
  -  Stand alone executable
  +                           _
  +  __ _  ___   __ _  _   _ (_)
  + / _` |/ __| / _` || | | || |
  +| (_| |\__ \| (_| || |_| || |
  + \__,_||___/ \__, | \__,_||_|
  +             |___/
   
  +  OSSP asgui -- Accounting system graphical user interface
  +  Version 0.5.0 (28-Nov-2002)
  +
  +  ABSTRACT
  +
  +  Intended to serve as both a virtual punch card and time tracker,
  +  OSSP asgui is the graphical user interface for the family of OSSP
  +  accounting system tools.
  +
  +  COPYRIGHT AND LICENSE
  +
  +  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +
  +  This file is part of OSSP asgui, an accounting system interface which
  +  can be found at http://www.ossp.org/pkg/tool/asgui/.
  +
  +  Permission to use, copy, modify, and distribute this software for
  +  any purpose with or without fee is hereby granted, provided that
  +  the above copyright notice and this permission notice appear in all
  +  copies.
  +
  +  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +  SUCH DAMAGE.
  +
  +  HOME AND DOCUMENTATION
  +
  +  The documentation and latest release can be found on
  +
  +  o http://www.ossp.org/pkg/tool/asgui/
  +  o  ftp://ftp.ossp.org/pkg/tool/asgui/
  Index: ossp-pkg/titraq/TODO
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 TODO
  --- ossp-pkg/titraq/TODO	28 Nov 2002 17:04:18 -0000	1.22
  +++ ossp-pkg/titraq/TODO	28 Nov 2002 20:44:36 -0000	1.23
  @@ -89,7 +89,7 @@
         titraq.1         Hauptinfo
         titraq.conf.5    Beschreibung des Configdatei
   
  -    Geliefert         
  +    Geliefert
         titraq.conf      Ausgekommentet Beispieldatei
   
   Pseudocode
  Index: ossp-pkg/titraq/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 aclocal.m4
  --- ossp-pkg/titraq/aclocal.m4	21 Oct 2002 16:52:21 -0000	1.2
  +++ ossp-pkg/titraq/aclocal.m4	28 Nov 2002 20:44:36 -0000	1.3
  @@ -77,7 +77,7 @@
       #   find out package version
       $3_STR="`$ac_shtool version -l c -d long $ac_srcdir/$4`"
       AC_SUBST($3_STR)
  - 
  +
       #   friendly header ;)
       if test ".$enable_headline" != .no; then
           echo "Configuring ${TB}$1${TN} ($2), Version ${TB}${$3_STR}${TN}"
  Index: ossp-pkg/titraq/configure.in
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 configure.in
  --- ossp-pkg/titraq/configure.in	18 Nov 2002 17:38:59 -0000	1.4
  +++ ossp-pkg/titraq/configure.in	28 Nov 2002 20:44:36 -0000	1.5
  @@ -1,11 +1,12 @@
   ##
  -##  OSSP titraq - Graphical user interface for time accounting
  -##  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  -##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002 Ralf S. Engelschall
  +##  OSSP asgui - Accounting system graphical user interface
  +##  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
   ##
  -##  This file is part of OSSP GUI, a graphical user interface
  -##  for OSSP which can be found at http://www.ossp.org/
  +##  This file is part of OSSP asgui, an accounting system graphical user
  +##  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  @@ -31,9 +32,13 @@
   dnl Version requirement and information
   AC_PREREQ(2.56)
   AC_REVISION(1.0)
  +AC_INIT
  +
  +TITRAQ_VERSION_STR=`./shtool version -l c -d long titraq_version.cpp`
  +./shtool echo -e "Configuring %BOSSP asgui%b, version %B${TITRAQ_VERSION_STR}%b"
  +AC_SUBST(TITRAQ_VERSION_STR)
   
   dnl Process this file with autoconf
  -AC_INIT
   AC_CONFIG_HEADERS(ac_config.h)
   AC_LANG_CPLUSPLUS
   
  Index: ossp-pkg/titraq/devtool
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 devtool
  --- ossp-pkg/titraq/devtool	21 Oct 2002 15:19:37 -0000	1.1.1.1
  +++ ossp-pkg/titraq/devtool	28 Nov 2002 20:44:36 -0000	1.2
  @@ -1,7 +1,7 @@
   #! /bin/sh
   ##
   ##  devtool -- Development Tool
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   if [ $# -eq 0 ]; then
  Index: ossp-pkg/titraq/devtool.conf
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.conf
  --- ossp-pkg/titraq/devtool.conf	28 Nov 2002 17:04:18 -0000	1.3
  +++ ossp-pkg/titraq/devtool.conf	28 Nov 2002 20:44:36 -0000	1.4
  @@ -15,12 +15,47 @@
           --prefix=/tmp/titraq \
           "$@"
   
  +%release
  +    ./devtool version
  +    ./devtool dist
  +    ./devtool upload
  +
   %version
  -    ./shtool version -l c -n "OSSP titraq" -p "titraq_" -e titraq_version.c
  +    ./shtool version -l c -n "OSSP asgui" -p asgui_ -e titraq_version.cpp
  +    V=`./shtool version -l c -d long titraq_version.cpp`
  +    sed -e "s/Version .*(.*)/Version $V/g" <README >README.n
  +    mv README.n README
  +
  +%tag
  +    V=`./shtool version -l c -d short titraq_version.cpp | sed -e 's;\.;_;g'`
  +    echo "+++ tagging CVS sources as ASGUI_${V}"
  +    cvs tag ASGUI_${V}
   
   %dist
  +    echo "+++ cleaning"
  +    rm -f asgui-*.tar.gz
  +    ./devtool autoclean
  +    echo "+++ generating"
  +    ./devtool autogen
  +    echo "+++ configuring"
  +    ./devtool configure
  +    echo "+++ building"
  +    make clean all
  +    echo "+++ cleaning"
       make distclean >/dev/null 2>&1
  +    echo "+++ fixing"
       ./shtool fixperm -v .
  -    V=`./shtool version -l txt -d short titraq_version.c`
  -    ./shtool tarball -o titraq-${V}.tar.gz -d titraq-${V} -u ossp -g ossp \
  -                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool.conf' -c 'gzip --best' .
  +    echo "+++ rolling"
  +    V=`./shtool version -l c -d short titraq_version.cpp`
  +    ./shtool tarball -o asgui-${V}.tar.gz -d asgui-${V} \
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*,*.tar.gz,^#.*,.*~$' -c 'gzip --best' .
  +    ls -l asgui-${V}.tar.gz
  +    echo "+++ testing"
  +    gunzip <asgui-${V}.tar.gz | tar tvf - | head -10
  +    echo "[...]"
  +    gunzip <asgui-${V}.tar.gz | tar tvf - | tail -10
  +
  +%upload
  +    echo "+++ copying to ftp://ftp.ossp.org/pkg/tool/asgui/"
  +    V=`./shtool version -l c -d short titraq_version.cpp`
  +    scp asgui-${V}.tar.gz ftp.ossp.org:/e/ossp/ftp/pkg/tool/asgui/
  Index: ossp-pkg/titraq/devtool.func
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 devtool.func
  --- ossp-pkg/titraq/devtool.func	21 Oct 2002 15:19:37 -0000	1.1.1.1
  +++ ossp-pkg/titraq/devtool.func	28 Nov 2002 20:44:36 -0000	1.2
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   devtool_require () {
  Index: ossp-pkg/titraq/generic.cpp
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 generic.cpp
  --- ossp-pkg/titraq/generic.cpp	13 Nov 2002 12:33:33 -0000	1.1
  +++ ossp-pkg/titraq/generic.cpp	28 Nov 2002 20:44:36 -0000	1.2
  @@ -1,5 +1,38 @@
  +//
  +//  OSSP asgui - Accounting system graphical user interface
  +//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//
  +//  This file is part of OSSP asgui, an accounting system graphical user
  +//  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  +//
  +//  Permission to use, copy, modify, and distribute this software for
  +//  any purpose with or without fee is hereby granted, provided that
  +//  the above copyright notice and this permission notice appear in all
  +//  copies.
  +//
  +//  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +//  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +//  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +//  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +//  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +//  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +//  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +//  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +//  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +//  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +//  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +//  SUCH DAMAGE.
  +//
  +//  generic.cpp: ISO C++ implementation
  +//
  +
   #include <qobject.h>
  +
   #include "generic.h"
  +
   
   // Construct a Prototype object
   Prototype::Prototype()
  Index: ossp-pkg/titraq/generic.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 generic.h
  --- ossp-pkg/titraq/generic.h	13 Nov 2002 12:33:33 -0000	1.1
  +++ ossp-pkg/titraq/generic.h	28 Nov 2002 20:44:36 -0000	1.2
  @@ -1,3 +1,34 @@
  +//
  +//  OSSP asgui - Accounting system graphical user interface
  +//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//
  +//  This file is part of OSSP asgui, an accounting system graphical user
  +//  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  +//
  +//  Permission to use, copy, modify, and distribute this software for
  +//  any purpose with or without fee is hereby granted, provided that
  +//  the above copyright notice and this permission notice appear in all
  +//  copies.
  +//
  +//  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +//  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +//  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +//  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +//  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +//  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +//  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +//  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +//  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +//  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +//  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +//  SUCH DAMAGE.
  +//
  +//  generic.h: ISO C++ interface
  +//
  +
   #ifndef GENERIC_H
   #define GENERIC_H
   
  Index: ossp-pkg/titraq/gfx/cwlogo.xpm
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 cwlogo.xpm
  --- ossp-pkg/titraq/gfx/cwlogo.xpm	19 Nov 2002 19:38:37 -0000	1.1
  +++ ossp-pkg/titraq/gfx/cwlogo.xpm	28 Nov 2002 20:44:39 -0000	1.2
  @@ -1,3 +1,34 @@
  +/*
  +**  OSSP asgui - Accounting system graphical user interface
  +**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +**
  +**  This file is part of OSSP asgui, an accounting system graphical user
  +**  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  cwlogo.xpm: X pixmap image
  +*/
  +
   /* XPM */
   static const char *s_kpcCwlogo_xpm[] = {
   "42 43 8 1",
  Index: ossp-pkg/titraq/gfx/osspicon.xpm
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 osspicon.xpm
  --- ossp-pkg/titraq/gfx/osspicon.xpm	19 Nov 2002 19:38:37 -0000	1.1
  +++ ossp-pkg/titraq/gfx/osspicon.xpm	28 Nov 2002 20:44:39 -0000	1.2
  @@ -1,3 +1,34 @@
  +/*
  +**  OSSP asgui - Accounting system graphical user interface
  +**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +**
  +**  This file is part of OSSP asgui, an accounting system graphical user
  +**  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  osspicon.xpm: X pixmap image
  +*/
  +
   /* XPM */
   static const char *s_kpcOsspicon_xpm[] = {
   "22 22 119 2",
  Index: ossp-pkg/titraq/gfx/ossplogo.xpm
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 ossplogo.xpm
  --- ossp-pkg/titraq/gfx/ossplogo.xpm	19 Nov 2002 19:38:37 -0000	1.4
  +++ ossp-pkg/titraq/gfx/ossplogo.xpm	28 Nov 2002 20:44:39 -0000	1.5
  @@ -1,3 +1,34 @@
  +/*
  +**  OSSP asgui - Accounting system graphical user interface
  +**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +**
  +**  This file is part of OSSP asgui, an accounting system graphical user
  +**  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  ossplogo.xpm: X pixmap image
  +*/
  +
   /* XPM */
   static const char *s_kpcOssplogo_xpm[] = {
   "40 40 201 2",
  Index: ossp-pkg/titraq/gfx/rowadd.xpm
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 rowadd.xpm
  --- ossp-pkg/titraq/gfx/rowadd.xpm	26 Nov 2002 15:06:57 -0000	1.1
  +++ ossp-pkg/titraq/gfx/rowadd.xpm	28 Nov 2002 20:44:39 -0000	1.2
  @@ -1,3 +1,34 @@
  +/*
  +**  OSSP asgui - Accounting system graphical user interface
  +**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +**
  +**  This file is part of OSSP asgui, an accounting system graphical user
  +**  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  rowadd.xpm: X pixmap image
  +*/
  +
   /* XPM */
   static const char *s_kpcRowadd_xpm[] = {
   "22 22 83 1",
  Index: ossp-pkg/titraq/gfx/rowdel.xpm
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 rowdel.xpm
  --- ossp-pkg/titraq/gfx/rowdel.xpm	26 Nov 2002 15:06:57 -0000	1.1
  +++ ossp-pkg/titraq/gfx/rowdel.xpm	28 Nov 2002 20:44:39 -0000	1.2
  @@ -1,3 +1,34 @@
  +/*
  +**  OSSP asgui - Accounting system graphical user interface
  +**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +**
  +**  This file is part of OSSP asgui, an accounting system graphical user
  +**  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  rowdel.xpm: X pixmap image
  +*/
  +
   /* XPM */
   static const char *s_kpcRowdel_xpm[] = {
   "22 22 72 1",
  Index: ossp-pkg/titraq/main.cpp
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 main.cpp
  --- ossp-pkg/titraq/main.cpp	24 Nov 2002 20:39:31 -0000	1.6
  +++ ossp-pkg/titraq/main.cpp	28 Nov 2002 20:44:36 -0000	1.7
  @@ -1,4 +1,36 @@
  +//
  +//  OSSP asgui - Accounting system graphical user interface
  +//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//
  +//  This file is part of OSSP asgui, an accounting system graphical user
  +//  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  +//
  +//  Permission to use, copy, modify, and distribute this software for
  +//  any purpose with or without fee is hereby granted, provided that
  +//  the above copyright notice and this permission notice appear in all
  +//  copies.
  +//
  +//  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +//  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +//  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +//  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +//  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +//  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +//  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +//  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +//  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +//  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +//  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +//  SUCH DAMAGE.
  +//
  +//  main.cpp: ISO C++ implementation
  +//
  +
   #include "titraq.h"
  +
   
   int main(int argc, char **argv)
   {
  Index: ossp-pkg/titraq/tidatops.cpp
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 tidatops.cpp
  --- ossp-pkg/titraq/tidatops.cpp	26 Nov 2002 23:26:07 -0000	1.8
  +++ ossp-pkg/titraq/tidatops.cpp	28 Nov 2002 20:44:36 -0000	1.9
  @@ -1,3 +1,34 @@
  +//
  +//  OSSP asgui - Accounting system graphical user interface
  +//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//
  +//  This file is part of OSSP asgui, an accounting system graphical user
  +//  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  +//
  +//  Permission to use, copy, modify, and distribute this software for
  +//  any purpose with or without fee is hereby granted, provided that
  +//  the above copyright notice and this permission notice appear in all
  +//  copies.
  +//
  +//  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +//  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +//  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +//  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +//  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +//  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +//  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +//  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +//  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +//  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +//  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +//  SUCH DAMAGE.
  +//
  +//  tidatops.cpp: ISO C++ implementation
  +//
  +
   #include <qregexp.h>    // Portable regular expressions
   
   #include "titraq.h"     // Main classes
  @@ -124,14 +155,14 @@
           Tempfield = m_pMaintable->text(nIter, 1);   // Load start field text
           if (Tempfield != NULL)
               Tstream << trUtf8(" ") << Tempfield;    // Save start field text
  -/*        else
  -            bValid = false;*/
  +//        else
  +//            bValid = false;
   
           Tempfield = m_pMaintable->text(nIter, 2);   // Load end field text
           if (Tempfield != NULL)
               Tstream << trUtf8(" ") << Tempfield;    // Save end field text
  -/*        else
  -            bValid = false;*/
  +//        else
  +//            bValid = false;
   
           Tempfield = m_pMaintable->text(nIter, 4);   // Load amount field text
           if (Tempfield != NULL)
  Index: ossp-pkg/titraq/titabitem.h
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 titabitem.h
  --- ossp-pkg/titraq/titabitem.h	25 Nov 2002 15:45:05 -0000	1.3
  +++ ossp-pkg/titraq/titabitem.h	28 Nov 2002 20:44:36 -0000	1.4
  @@ -1,3 +1,34 @@
  +//
  +//  OSSP asgui - Accounting system graphical user interface
  +//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//
  +//  This file is part of OSSP asgui, an accounting system graphical user
  +//  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  +//
  +//  Permission to use, copy, modify, and distribute this software for
  +//  any purpose with or without fee is hereby granted, provided that
  +//  the above copyright notice and this permission notice appear in all
  +//  copies.
  +//
  +//  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +//  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +//  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +//  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +//  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +//  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +//  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +//  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +//  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +//  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +//  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +//  SUCH DAMAGE.
  +//
  +//  titabitem.h: ISO C++ interface
  +//
  +
   #ifndef RTTABLEITEM_H
   #define RTTABLEITEM_H
   
  Index: ossp-pkg/titraq/titable.cpp
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 titable.cpp
  --- ossp-pkg/titraq/titable.cpp	27 Nov 2002 22:44:48 -0000	1.1
  +++ ossp-pkg/titraq/titable.cpp	28 Nov 2002 20:44:36 -0000	1.2
  @@ -1,3 +1,34 @@
  +//
  +//  OSSP asgui - Accounting system graphical user interface
  +//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//
  +//  This file is part of OSSP asgui, an accounting system graphical user
  +//  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  +//
  +//  Permission to use, copy, modify, and distribute this software for
  +//  any purpose with or without fee is hereby granted, provided that
  +//  the above copyright notice and this permission notice appear in all
  +//  copies.
  +//
  +//  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +//  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +//  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +//  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +//  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +//  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +//  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +//  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +//  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +//  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +//  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +//  SUCH DAMAGE.
  +//
  +//  titable.cpp: ISO C++ implementation
  +//
  +
   #include <qevent.h>
   #include <qheader.h>
   
  Index: ossp-pkg/titraq/titable.h
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 titable.h
  --- ossp-pkg/titraq/titable.h	27 Nov 2002 22:44:48 -0000	1.2
  +++ ossp-pkg/titraq/titable.h	28 Nov 2002 20:44:36 -0000	1.3
  @@ -1,3 +1,34 @@
  +//
  +//  OSSP asgui - Accounting system graphical user interface
  +//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//
  +//  This file is part of OSSP asgui, an accounting system graphical user
  +//  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  +//
  +//  Permission to use, copy, modify, and distribute this software for
  +//  any purpose with or without fee is hereby granted, provided that
  +//  the above copyright notice and this permission notice appear in all
  +//  copies.
  +//
  +//  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +//  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +//  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +//  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +//  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +//  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +//  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +//  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +//  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +//  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +//  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +//  SUCH DAMAGE.
  +//
  +//  titable.h: ISO C++ interface
  +//
  +
   #ifndef TITABLE_H
   #define TITABLE_H
   
  Index: ossp-pkg/titraq/titamount.cpp
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 titamount.cpp
  --- ossp-pkg/titraq/titamount.cpp	26 Nov 2002 23:26:07 -0000	1.3
  +++ ossp-pkg/titraq/titamount.cpp	28 Nov 2002 20:44:36 -0000	1.4
  @@ -1,3 +1,34 @@
  +//
  +//  OSSP asgui - Accounting system graphical user interface
  +//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//
  +//  This file is part of OSSP asgui, an accounting system graphical user
  +//  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  +//
  +//  Permission to use, copy, modify, and distribute this software for
  +//  any purpose with or without fee is hereby granted, provided that
  +//  the above copyright notice and this permission notice appear in all
  +//  copies.
  +//
  +//  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +//  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +//  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +//  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +//  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +//  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +//  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +//  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +//  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +//  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +//  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +//  SUCH DAMAGE.
  +//
  +//  titamount.cpp: ISO C++ implementation
  +//
  +
   #include <qregexp.h>
   
   #include "titamount.h"
  Index: ossp-pkg/titraq/titamount.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 titamount.h
  --- ossp-pkg/titraq/titamount.h	25 Nov 2002 15:45:06 -0000	1.1
  +++ ossp-pkg/titraq/titamount.h	28 Nov 2002 20:44:36 -0000	1.2
  @@ -1,3 +1,34 @@
  +//
  +//  OSSP asgui - Accounting system graphical user interface
  +//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//
  +//  This file is part of OSSP asgui, an accounting system graphical user
  +//  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  +//
  +//  Permission to use, copy, modify, and distribute this software for
  +//  any purpose with or without fee is hereby granted, provided that
  +//  the above copyright notice and this permission notice appear in all
  +//  copies.
  +//
  +//  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +//  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +//  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +//  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +//  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +//  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +//  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +//  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +//  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +//  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +//  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +//  SUCH DAMAGE.
  +//
  +//  titamount.h: ISO C++ interface
  +//
  +
   #ifndef AMOUNTBOX_H
   #define AMOUNTBOX_H
   
  Index: ossp-pkg/titraq/titassist.cpp
  ============================================================
  $ cvs diff -u -r1.36 -r1.37 titassist.cpp
  --- ossp-pkg/titraq/titassist.cpp	28 Nov 2002 17:04:18 -0000	1.36
  +++ ossp-pkg/titraq/titassist.cpp	28 Nov 2002 20:44:36 -0000	1.37
  @@ -1,3 +1,34 @@
  +//
  +//  OSSP asgui - Accounting system graphical user interface
  +//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//
  +//  This file is part of OSSP asgui, an accounting system graphical user
  +//  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  +//
  +//  Permission to use, copy, modify, and distribute this software for
  +//  any purpose with or without fee is hereby granted, provided that
  +//  the above copyright notice and this permission notice appear in all
  +//  copies.
  +//
  +//  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +//  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +//  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +//  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +//  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +//  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +//  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +//  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +//  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +//  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +//  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +//  SUCH DAMAGE.
  +//
  +//  titassist.cpp: ISO C++ implementation
  +//
  +
   // Qt style headers
   #include <qcdestyle.h>
   #include <qsgistyle.h>
  @@ -333,7 +364,7 @@
       if (m_pEdittools == NULL)                   // Sanity check
           throw Genexcept("Edit tool bar creation failed.");
       m_pEdittools->setLabel(trUtf8("Edit Ops"));
  -    m_pEdittools->setOpaqueMoving(true);
  +    m_pEdittools->setOpaqueMoving(false);
       m_pEdittools->setCloseMode(QDockWindow::Never);
       m_pCutact->addTo(m_pEdittools);
       m_pCopyact->addTo(m_pEdittools);
  Index: ossp-pkg/titraq/titconst.h
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 titconst.h
  --- ossp-pkg/titraq/titconst.h	27 Nov 2002 22:44:48 -0000	1.7
  +++ ossp-pkg/titraq/titconst.h	28 Nov 2002 20:44:36 -0000	1.8
  @@ -1,3 +1,38 @@
  +//
  +//  OSSP asgui - Accounting system graphical user interface
  +//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//
  +//  This file is part of OSSP asgui, an accounting system graphical user
  +//  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  +//
  +//  Permission to use, copy, modify, and distribute this software for
  +//  any purpose with or without fee is hereby granted, provided that
  +//  the above copyright notice and this permission notice appear in all
  +//  copies.
  +//
  +//  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +//  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +//  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +//  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +//  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +//  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +//  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +//  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +//  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +//  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +//  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +//  SUCH DAMAGE.
  +//
  +//  titconst.h: ISO C++ interface
  +//
  +
  +#ifndef TITCONST_H
  +#define TITCONST_H
  +
  +
   // Preferences string constants
   #define TITRAQ_PREFNAME         "titraq.conf"
   #define TITRAQ_APPTITLE         "Titraq"
  @@ -33,3 +68,5 @@
   #define TITRAQ_MINAMOUNT        0           // Minimum valid amount
   #define TITRAQ_STEPAMOUNT       15          // Line step interval
   #define TITRAQ_MINSINHOUR       60          // Only idiots don't know this
  +
  +#endif // TITCONST_H
  Index: ossp-pkg/titraq/titprefs.cpp
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 titprefs.cpp
  --- ossp-pkg/titraq/titprefs.cpp	24 Nov 2002 18:02:43 -0000	1.2
  +++ ossp-pkg/titraq/titprefs.cpp	28 Nov 2002 20:44:36 -0000	1.3
  @@ -110,7 +110,7 @@
   long Preferences::getNumber(const QString& key, long def)
   {
       buffer_ = getString(key, QString::number(def));
  -	if (buffer_.isEmpty()) return def;
  +    if (buffer_.isEmpty()) return def;
   
       bool ok;
       long num = buffer_.toLong(&ok);
  @@ -139,7 +139,7 @@
   double Preferences::getDouble(const QString& key, double def)
   {
       buffer_ = getString(key, QString::number(def));
  -	if (buffer_.isEmpty()) return def;
  +    if (buffer_.isEmpty()) return def;
   
       bool ok;
       double num = buffer_.toDouble(&ok);
  @@ -174,7 +174,7 @@
               buffer_ = groups_[currentgroup_][key];
           }
       }
  -	if (buffer_.isEmpty()) return def;
  +    if (buffer_.isEmpty()) return def;
       return buffer_;
   }
   
  @@ -188,7 +188,7 @@
       groups_[currentgroup_][key] = value;
       dirty_ = true;
   }
  -		
  +        
   //////////////////////////////////////////////////////////////////////////////
   // removeValue()
   // -------------
  Index: ossp-pkg/titraq/titraq.conf.pod
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 titraq.conf.pod
  --- ossp-pkg/titraq/titraq.conf.pod	21 Oct 2002 15:19:37 -0000	1.1.1.1
  +++ ossp-pkg/titraq/titraq.conf.pod	28 Nov 2002 20:44:36 -0000	1.2
  @@ -1,11 +1,12 @@
   ##
  -##  OSSP titraq - Graphical user interface for time accounting
  -##  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  -##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002 Ralf S. Engelschall
  +##  OSSP asgui - Accounting system graphical user interface
  +##  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
   ##
  -##  This file is part of OSSP GUI, a graphical user interface
  -##  for OSSP which can be found at http://www.ossp.org/
  +##  This file is part of OSSP asgui, an accounting system graphical user
  +##  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  @@ -32,7 +33,7 @@
   
   =head1 NAME
   
  -B<titraq.conf> - OSSP titraq configuration file
  +B<titraq.conf> - OSSP AS configuration file
   
   =head1 DESCRIPTION
   
  Index: ossp-pkg/titraq/titraq.cpp
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 titraq.cpp
  --- ossp-pkg/titraq/titraq.cpp	26 Nov 2002 20:38:19 -0000	1.22
  +++ ossp-pkg/titraq/titraq.cpp	28 Nov 2002 20:44:36 -0000	1.23
  @@ -1,3 +1,34 @@
  +//
  +//  OSSP asgui - Accounting system graphical user interface
  +//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//
  +//  This file is part of OSSP asgui, an accounting system graphical user
  +//  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  +//
  +//  Permission to use, copy, modify, and distribute this software for
  +//  any purpose with or without fee is hereby granted, provided that
  +//  the above copyright notice and this permission notice appear in all
  +//  copies.
  +//
  +//  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +//  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +//  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +//  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +//  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +//  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +//  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +//  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +//  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +//  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +//  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +//  SUCH DAMAGE.
  +//
  +//  titraq.cpp: ISO C++ implementation
  +//
  +
   // User interface
   #include "titraq.h"             // Main classes
   #include "titrex.h"             // Exception classes
  Index: ossp-pkg/titraq/titraq.h
  ============================================================
  $ cvs diff -u -r1.34 -r1.35 titraq.h
  --- ossp-pkg/titraq/titraq.h	27 Nov 2002 23:07:38 -0000	1.34
  +++ ossp-pkg/titraq/titraq.h	28 Nov 2002 20:44:36 -0000	1.35
  @@ -1,3 +1,34 @@
  +//
  +//  OSSP asgui - Accounting system graphical user interface
  +//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//
  +//  This file is part of OSSP asgui, an accounting system graphical user
  +//  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  +//
  +//  Permission to use, copy, modify, and distribute this software for
  +//  any purpose with or without fee is hereby granted, provided that
  +//  the above copyright notice and this permission notice appear in all
  +//  copies.
  +//
  +//  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +//  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +//  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +//  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +//  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +//  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +//  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +//  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +//  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +//  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +//  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +//  SUCH DAMAGE.
  +//
  +//  titraq.h: ISO C++ interface
  +//
  +
   #ifndef TITRAQMWIN_H
   #define TITRAQMWIN_H
   
  Index: ossp-pkg/titraq/titraq.pod
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 titraq.pod
  --- ossp-pkg/titraq/titraq.pod	21 Oct 2002 15:19:37 -0000	1.1.1.1
  +++ ossp-pkg/titraq/titraq.pod	28 Nov 2002 20:44:36 -0000	1.2
  @@ -1,11 +1,12 @@
   ##
  -##  OSSP titraq - Graphical user interface for time accounting
  -##  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  -##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002 Ralf S. Engelschall
  +##  OSSP asgui - Accounting system graphical user interface
  +##  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
   ##
  -##  This file is part of OSSP GUI, a graphical user interface
  -##  for OSSP which can be found at http://www.ossp.org/
  +##  This file is part of OSSP asgui, an accounting system graphical user
  +##  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  @@ -32,7 +33,7 @@
   
   =head1 NAME
   
  -B<titraq> - OSSP titraq time accounting
  +B<titraq> - OSSP AS graphical user interface
   
   =head1 SYNOPSIS
   
  Index: ossp-pkg/titraq/titraq_test.sh
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 titraq_test.sh
  --- ossp-pkg/titraq/titraq_test.sh	19 Nov 2002 20:36:43 -0000	1.2
  +++ ossp-pkg/titraq/titraq_test.sh	28 Nov 2002 20:44:36 -0000	1.3
  @@ -1,3 +1,33 @@
  +##
  +##  OSSP asgui - Accounting system graphical user interface
  +##  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +##
  +##  This file is part of OSSP asgui, an accounting system graphical user
  +##  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  titraq_test.sh: Bourne shell script
  +##
  +
   #! /bin/sh
   ./titraq
  -
    Index: ossp-pkg/titraq/titraq_version.cpp
  ============================================================
  $ cvs update -p -r1.1 titraq_version.cpp
  /*
  **  titraq_version.cpp -- Version Information for OSSP asgui (syntax: C/C++)
  **  [automatically generated and maintained by GNU shtool]
  */
  
  #ifdef _TITRAQ_VERSION_CPP_AS_HEADER_
  
  #ifndef _TITRAQ_VERSION_CPP_
  #define _TITRAQ_VERSION_CPP_
  
  #define ASGUI_VERSION 0x005200
  
  typedef struct {
      const int   v_hex;
      const char *v_short;
      const char *v_long;
      const char *v_tex;
      const char *v_gnu;
      const char *v_web;
      const char *v_sccs;
      const char *v_rcs;
  } asgui_version_t;
  
  extern asgui_version_t asgui_version;
  
  #endif /* _TITRAQ_VERSION_CPP_ */
  
  #else /* _TITRAQ_VERSION_CPP_AS_HEADER_ */
  
  #define _TITRAQ_VERSION_CPP_AS_HEADER_
  #include "titraq_version.cpp"
  #undef  _TITRAQ_VERSION_CPP_AS_HEADER_
  
  asgui_version_t asgui_version = {
      0x005200,
      "0.5.0",
      "0.5.0 (28-Nov-2002)",
      "This is OSSP asgui, Version 0.5.0 (28-Nov-2002)",
      "OSSP asgui 0.5.0 (28-Nov-2002)",
      "OSSP asgui/0.5.0",
      "@(#)OSSP asgui 0.5.0 (28-Nov-2002)",
      "$Id: titraq_version.cpp,v 1.1 2002/11/28 20:44:36 ms Exp $"
  };
  
  #endif /* _TITRAQ_VERSION_CPP_AS_HEADER_ */
  
  Index: ossp-pkg/titraq/titrex.cpp
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 titrex.cpp
  --- ossp-pkg/titraq/titrex.cpp	18 Nov 2002 22:12:02 -0000	1.1
  +++ ossp-pkg/titraq/titrex.cpp	28 Nov 2002 20:44:36 -0000	1.2
  @@ -1,4 +1,36 @@
  +//
  +//  OSSP asgui - Accounting system graphical user interface
  +//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//
  +//  This file is part of OSSP asgui, an accounting system graphical user
  +//  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  +//
  +//  Permission to use, copy, modify, and distribute this software for
  +//  any purpose with or without fee is hereby granted, provided that
  +//  the above copyright notice and this permission notice appear in all
  +//  copies.
  +//
  +//  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +//  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +//  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +//  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +//  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +//  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +//  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +//  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +//  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +//  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +//  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +//  SUCH DAMAGE.
  +//
  +//  titrex.cpp: ISO C++ implementation
  +//
  +
   #include "titrex.h"
  +
   
   // Report general exception
   void Genexcept::reportErr(void)
  Index: ossp-pkg/titraq/titrex.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 titrex.h
  --- ossp-pkg/titraq/titrex.h	18 Nov 2002 22:12:02 -0000	1.1
  +++ ossp-pkg/titraq/titrex.h	28 Nov 2002 20:44:36 -0000	1.2
  @@ -1,3 +1,34 @@
  +//
  +//  OSSP asgui - Accounting system graphical user interface
  +//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//
  +//  This file is part of OSSP asgui, an accounting system graphical user
  +//  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  +//
  +//  Permission to use, copy, modify, and distribute this software for
  +//  any purpose with or without fee is hereby granted, provided that
  +//  the above copyright notice and this permission notice appear in all
  +//  copies.
  +//
  +//  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +//  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +//  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +//  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +//  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +//  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +//  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +//  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +//  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +//  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +//  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +//  SUCH DAMAGE.
  +//
  +//  titrex.h: ISO C++ interface
  +//
  +
   #ifndef TITRAQEXCEPT_H
   #define TITRAQEXCEPT_H
   
  Index: ossp-pkg/titraq/titslot.cpp
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 titslot.cpp
  --- ossp-pkg/titraq/titslot.cpp	28 Nov 2002 10:31:33 -0000	1.27
  +++ ossp-pkg/titraq/titslot.cpp	28 Nov 2002 20:44:36 -0000	1.28
  @@ -1,3 +1,34 @@
  +//
  +//  OSSP asgui - Accounting system graphical user interface
  +//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//
  +//  This file is part of OSSP asgui, an accounting system graphical user
  +//  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  +//
  +//  Permission to use, copy, modify, and distribute this software for
  +//  any purpose with or without fee is hereby granted, provided that
  +//  the above copyright notice and this permission notice appear in all
  +//  copies.
  +//
  +//  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +//  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +//  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +//  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +//  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +//  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +//  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +//  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +//  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +//  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +//  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +//  SUCH DAMAGE.
  +//
  +//  titslot.cpp: ISO C++ implementation
  +//
  +
   // Qt headers
   #include <qfiledialog.h>
   #include <qcombobox.h>

From ossp-cvs-owner@ossp.org  Thu Nov 28 21:53:16 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3B406763C6; Thu, 28 Nov 2002 21:53:16 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq TODO
Message-Id: <20021128205316.3B406763C6@mail.ossp.org>
Date: Thu, 28 Nov 2002 21:53:16 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   28-Nov-2002 21:53:16
  Branch: HEAD                             Handle: 2002112820531500

  Modified files:
    ossp-pkg/titraq         TODO

  Log:
    Last things to remember.

  Summary:
    Revision    Changes     Path
    1.24        +2  -0      ossp-pkg/titraq/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/TODO
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 TODO
  --- ossp-pkg/titraq/TODO	28 Nov 2002 20:44:36 -0000	1.23
  +++ ossp-pkg/titraq/TODO	28 Nov 2002 20:53:15 -0000	1.24
  @@ -30,6 +30,7 @@
   Remove magic numbers from cpp files to titconst like TITRAQ_INDEXREMARK
   Reduce dependence to STL by removing cout to QTextStream
   Ausblendbare Spalten
  +Add install and uninstall targets to makefile
   
   Beim Editmodus
   ---------------
  @@ -61,6 +62,7 @@
   Zero date is impossible without reimplementing standard date widget
   Columns resize themselves to wrong values when a header is double clicked
   Sometimes a click on add or delete toolbar button is ignored?
  +Will not parse last line in data file if not finished with a blank line!
   
   Document
   --------

From ossp-cvs-owner@ossp.org  Fri Nov 29 12:03:59 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E6A21763C5; Fri, 29 Nov 2002 12:03:58 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/titraq Makefile.in
Message-Id: <20021129110358.E6A21763C5@mail.ossp.org>
Date: Fri, 29 Nov 2002 12:03:58 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   29-Nov-2002 12:03:58
  Branch: HEAD                             Handle: 2002112911035800

  Modified files:
    ossp-pkg/titraq         Makefile.in

  Log:
    Improve install and uninstall logic.

  Summary:
    Revision    Changes     Path
    1.20        +9  -4      ossp-pkg/titraq/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/titraq/Makefile.in
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 Makefile.in
  --- ossp-pkg/titraq/Makefile.in	28 Nov 2002 20:44:36 -0000	1.19
  +++ ossp-pkg/titraq/Makefile.in	29 Nov 2002 11:03:58 -0000	1.20
  @@ -116,19 +116,24 @@
                  --release="$$D" --date="OSSP asgui $$VS" titraq.conf.pod | \
                  sed -e "s;TITRAQ_VERSION_STR;$$VL;" >titraq.conf.5
   
  -install:
  +install: all
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man1
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man5
  -	$(SHTOOL) install -c -m 644 titraq $(DESTDIR)$(bindir)/titraq
  +	$(SHTOOL) install -c -s -m 755 titraq $(DESTDIR)$(bindir)/titraq
   	$(SHTOOL) install -c -m 644 titraq.1 $(DESTDIR)$(mandir)/man1/titraq.1
   	$(SHTOOL) install -c -m 644 titraq.conf.5 $(DESTDIR)$(mandir)/man5/titraq.conf.5
   
   uninstall:
  -	$(RM) $(DESTDIR)$(bindir)/titraq
  -	$(RM) $(DESTDIR)$(mandir)/man1/titraq.1
   	$(RM) $(DESTDIR)$(mandir)/man5/titraq.conf.5
  +	$(RM) $(DESTDIR)$(mandir)/man1/titraq.1
  +	$(RM) $(DESTDIR)$(bindir)/titraq
  +	$(RMDIR) $(DESTDIR)$(mandir)/man5 >/dev/null 2>&1 || $(TRUE)
  +	$(RMDIR) $(DESTDIR)$(mandir)/man1 >/dev/null 2>&1 || $(TRUE)
  +	$(RMDIR) $(DESTDIR)$(mandir) >/dev/null 2>&1 || $(TRUE)
  +	$(RMDIR) $(DESTDIR)$(bindir) >/dev/null 2>&1 || $(TRUE)
  +	$(RMDIR) $(DESTDIR)$(prefix) >/dev/null 2>&1 || $(TRUE)
   
   clean:
   	$(RM) $(TARGET_PROGS) $(OBJS) $(MOC_OBJ)

From ossp-cvs-owner@ossp.org  Fri Nov 29 13:59:00 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5231276496; Fri, 29 Nov 2002 13:59:00 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio Makefile sio_test2.c
Message-Id: <20021129125900.5231276496@mail.ossp.org>
Date: Fri, 29 Nov 2002 13:59:00 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   29-Nov-2002 13:59:00
  Branch: HEAD                             Handle: 2002112912585900

  Added files:
    ossp-pkg/sio            sio_test2.c
  Modified files:
    ossp-pkg/sio            Makefile

  Log:
    more testing

  Summary:
    Revision    Changes     Path
    1.4         +3  -0      ossp-pkg/sio/Makefile
    1.1         +118 -0     ossp-pkg/sio/sio_test2.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/Makefile
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 Makefile
  --- ossp-pkg/sio/Makefile	24 Nov 2002 19:41:17 -0000	1.3
  +++ ossp-pkg/sio/Makefile	29 Nov 2002 12:58:59 -0000	1.4
  @@ -12,6 +12,9 @@
   sio_test: sio_test.o sio_sa.o sio_buffer.o sio_hello.o sio_bio.o sio.o al.o lib_sa/sa.o
   	$(CC) $(CFLAGS) -o sio_test sio_test.o sio_sa.o sio_buffer.o sio_hello.o sio_bio.o sio.o al.o lib_sa/sa.o -lssl -lcrypto
   
  +sio_test2: sio_test2.o sio_fd.o sio_buffer.o sio_zlib.o sio_sio.o sio.o al.o
  +	$(CC) $(CFLAGS) -o sio_test2 sio_test2.o sio_fd.o sio_buffer.o sio_zlib.o sio_sio.o sio.o al.o -lz
  +
   lib_sa/sa.o: lib_sa/sa.c
   	$(CC) $(CFLAGS) -c -Ilib_sa -o lib_sa/sa.o lib_sa/sa.c
   
  Index: ossp-pkg/sio/sio_test2.c
  ============================================================
  $ cvs update -p -r1.1 sio_test2.c
  #include <stdio.h>
  #include <sys/types.h>
  #include <sys/file.h>
  #include <unistd.h>
  
  #include "al.h"
  #include "sio.h"
  
  extern sio_module_t sio_module_fd;
  extern sio_module_t sio_module_zlib;
  extern sio_module_t sio_module_buffer;
  extern sio_module_t sio_module_sio;
  
  #define e(f) rc = f; printf("%s = %s\n",#f, sio_error(rc)); fflush(stdout);
  #define s(f) src = f; printf("%s = %s\n",#f, sa_error(src)); fflush(stdout);
  
  int main(int argc, char *argv[])
  {
      int fd;
      sio_rc_t rc;
  
      sio_t *sio;
      sio_stage_t *sios_fd, *sios_buffer, *sios_zlib;
  
      sio_t *sio2;
      sio_stage_t *sios2_sio;
      al_label_t data_label, error_label, eof_label;
  
      char buf[513];
      size_t buflen;
      int level;
      size_t actual;
  
  #ifdef WRITE
      fd = open("output", O_WRONLY|O_TRUNC|O_CREAT, 0666);
  
      {
          int i;
          for (i=0; i<sizeof(buf)-16; i += 16)
              sprintf(buf+i,"Hello world %03.3d\n",i);
          buf[i] = '\0';
      }
  
  #else
      fd = open("output", O_RDONLY);
  #endif
  
      e(sio_create(&sio));
      e(sio_create_stage(sio, &sio_module_fd, &sios_fd));
      e(sio_create_stage(sio, &sio_module_zlib, &sios_zlib));
      e(sio_create_stage(sio, &sio_module_buffer, &sios_buffer));
  
      e(sio_configure_stage(sio, sios_fd, "fd", &fd));
      buflen = 512;
      e(sio_configure_stage(sio, sios_fd, "buflen", &buflen));
  
      buflen = 200;
      e(sio_configure_stage(sio, sios_buffer, "outputsize", &buflen));
      e(sio_configure_stage(sio, sios_buffer, "inputsize", &buflen));
  
      buflen = 200;
      e(sio_configure_stage(sio, sios_zlib, "outputsize", &buflen));
      e(sio_configure_stage(sio, sios_zlib, "inputsize", &buflen));
      level = 0;
      e(sio_configure_stage(sio, sios_zlib, "outputlevel", &level));
      level = -1;
      e(sio_configure_stage(sio, sios_zlib, "inputlevel", &level));
  
      e(sio_create(&sio2));
      e(sio_create_stage(sio2, &sio_module_sio, &sios2_sio));
  
      e(sio_label(sio, SIO_LN_DATA, &data_label));
      e(sio_label(sio, SIO_LN_ERROR, &error_label));
      e(sio_label(sio, SIO_LN_EOF, &eof_label));
      e(sio_configure_stage(sio2, sios2_sio, "upstream", sio));
      e(sio_configure_stage(sio2, sios2_sio, "mydatalabel", data_label));
      e(sio_configure_stage(sio2, sios2_sio, "myerrorlabel", error_label));
      e(sio_configure_stage(sio2, sios2_sio, "myeoflabel", eof_label));
  
      e(sio_attach(sio2, sios2_sio, SIO_MODE_READWRITE));
  
      {
          e(sio_attach(sio, sios_fd, SIO_MODE_READWRITE));
          e(sio_attach(sio, sios_zlib, SIO_MODE_READWRITE));
          e(sio_attach(sio, sios_buffer, SIO_MODE_READWRITE));
  
  #ifdef WRITE
          e(sio_write(sio2, buf, strlen(buf), &actual));
          e(sio_push(sio2));
  #else
          do {
              actual = 0;
              e(sio_read(sio2, buf, sizeof(buf), &actual));
              printf("actual = %d\n",actual);
              fwrite(buf, actual, 1, stdout);
              printf("\n");
          } while (sio_flag(sio2, SIO_FLAG_EOF) == SIO_FALSE);
  #endif
  
          e(sio_detach(sio, sios_buffer));
          e(sio_detach(sio, sios_zlib));
          e(sio_detach(sio, sios_fd));
      }
  
      e(sio_detach(sio2, sios2_sio));
  
      e(sio_destroy_stage(sio2, sios2_sio));
      e(sio_destroy(sio2));
  
      e(sio_destroy_stage(sio, sios_buffer));
      e(sio_destroy_stage(sio, sios_zlib));
      e(sio_destroy_stage(sio, sios_fd));
      e(sio_destroy(sio));
  
      close(fd);
  
      return 0;
  }

From ossp-cvs-owner@ossp.org  Fri Nov 29 14:00:23 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 680C7764A7; Fri, 29 Nov 2002 14:00:23 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio.c sio_bio.c sio_buffer.c sio_fd.c sio_hel...
Message-Id: <20021129130023.680C7764A7@mail.ossp.org>
Date: Fri, 29 Nov 2002 14:00:23 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   29-Nov-2002 14:00:23
  Branch: HEAD                             Handle: 2002112913001801

  Modified files:
    ossp-pkg/sio            sio.c sio_bio.c sio_buffer.c sio_fd.c sio_hello.c
                            sio_hole.c sio_null.c sio_sa.c sio_sio.c
                            sio_zlib.c

  Log:
    input/output now gets another parameter where scheduler tells
    them from where they methods called by passing the return value
    of the previously called stage.

  Summary:
    Revision    Changes     Path
    1.16        +1  -1      ossp-pkg/sio/sio.c
    1.6         +2  -2      ossp-pkg/sio/sio_bio.c
    1.8         +2  -2      ossp-pkg/sio/sio_buffer.c
    1.11        +2  -2      ossp-pkg/sio/sio_fd.c
    1.11        +2  -2      ossp-pkg/sio/sio_hello.c
    1.7         +2  -2      ossp-pkg/sio/sio_hole.c
    1.8         +2  -2      ossp-pkg/sio/sio_null.c
    1.6         +2  -2      ossp-pkg/sio/sio_sa.c
    1.2         +50 -22     ossp-pkg/sio/sio_sio.c
    1.3         +2  -2      ossp-pkg/sio/sio_zlib.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio.c
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 sio.c
  --- ossp-pkg/sio/sio.c	28 Nov 2002 16:39:40 -0000	1.15
  +++ ossp-pkg/sio/sio.c	29 Nov 2002 13:00:18 -0000	1.16
  @@ -134,7 +134,7 @@
       rc = SIO_SCHED_UP;
       h  = chain;
       while (h != NULL) {
  -        rc = h->func(sio, h->al, h->stage->userdata);
  +        rc = h->func(sio, h->al, h->stage->userdata, rc);
   
           /* chose default direction */
           if (rc == SIO_OK) {
  Index: ossp-pkg/sio/sio_bio.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 sio_bio.c
  --- ossp-pkg/sio/sio_bio.c	27 Nov 2002 15:50:29 -0000	1.5
  +++ ossp-pkg/sio/sio_bio.c	29 Nov 2002 13:00:18 -0000	1.6
  @@ -505,7 +505,7 @@
   }
   
   static
  -sio_rc_t siobio_input(sio_t *sio, al_t *al, void *u)
  +sio_rc_t siobio_input(sio_t *sio, al_t *al, void *u, sio_rc_t orc)
   {
       private_t *my = (private_t *)u;
       sio_rc_t rc;
  @@ -529,7 +529,7 @@
   }
   
   static
  -sio_rc_t siobio_output(sio_t *sio, al_t *al, void *u)
  +sio_rc_t siobio_output(sio_t *sio, al_t *al, void *u, sio_rc_t orc)
   {
       private_t *my = (private_t *)u;
       sio_rc_t rc;
  Index: ossp-pkg/sio/sio_buffer.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 sio_buffer.c
  --- ossp-pkg/sio/sio_buffer.c	27 Nov 2002 15:50:29 -0000	1.7
  +++ ossp-pkg/sio/sio_buffer.c	29 Nov 2002 13:00:18 -0000	1.8
  @@ -172,7 +172,7 @@
   }
   
   static
  -sio_rc_t buffer_input(sio_t *sio, al_t *al, void *u)
  +sio_rc_t buffer_input(sio_t *sio, al_t *al, void *u, sio_rc_t orc)
   {
       private_t *my = (private_t *)u;
   
  @@ -180,7 +180,7 @@
   }
   
   static
  -sio_rc_t buffer_output(sio_t *sio, al_t *al, void *u)
  +sio_rc_t buffer_output(sio_t *sio, al_t *al, void *u, sio_rc_t orc)
   {
       private_t *my = (private_t *)u;
   
  Index: ossp-pkg/sio/sio_fd.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 sio_fd.c
  --- ossp-pkg/sio/sio_fd.c	27 Nov 2002 15:50:29 -0000	1.10
  +++ ossp-pkg/sio/sio_fd.c	29 Nov 2002 13:00:18 -0000	1.11
  @@ -154,7 +154,7 @@
   }
   
   static
  -al_rc_t fd_output_chunk(al_chunk_t *alc, void *u)
  +al_rc_t fd_output_chunk(al_chunk_t *alc, void *u, sio_rc_t orc)
   {
       private_t *my = (private_t *)u;
       char   *p;
  @@ -174,7 +174,7 @@
   }
   
   static
  -sio_rc_t fd_output(sio_t *sio, al_t *al, void *u)
  +sio_rc_t fd_output(sio_t *sio, al_t *al, void *u, sio_rc_t orc)
   {
       private_t *my = (private_t *)u;
       al_rc_t arc;
  Index: ossp-pkg/sio/sio_hello.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 sio_hello.c
  --- ossp-pkg/sio/sio_hello.c	27 Nov 2002 15:50:29 -0000	1.10
  +++ ossp-pkg/sio/sio_hello.c	29 Nov 2002 13:00:18 -0000	1.11
  @@ -391,13 +391,13 @@
   /************************************************************************/
   
   static
  -sio_rc_t hello_input(sio_t *sio, al_t *al, void *u)
  +sio_rc_t hello_input(sio_t *sio, al_t *al, void *u, sio_rc_t orc)
   {
       return hello_protocol(sio, (private_t *)u, 0);
   }
   
   static
  -sio_rc_t hello_output(sio_t *sio, al_t *al, void *u)
  +sio_rc_t hello_output(sio_t *sio, al_t *al, void *u, sio_rc_t orc)
   {
       return hello_protocol(sio, (private_t *)u, 1);
   }
  Index: ossp-pkg/sio/sio_hole.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 sio_hole.c
  --- ossp-pkg/sio/sio_hole.c	27 Nov 2002 15:50:29 -0000	1.6
  +++ ossp-pkg/sio/sio_hole.c	29 Nov 2002 13:00:18 -0000	1.7
  @@ -76,7 +76,7 @@
   }
   
   static
  -sio_rc_t hole_input(sio_t *sio, al_t *al, void *u)
  +sio_rc_t hole_input(sio_t *sio, al_t *al, void *u, sio_rc_t orc)
   {
       /* drop all data into the bit bucket */
       al_splice(al, 0, al_bytes(al), NULL, NULL);
  @@ -85,7 +85,7 @@
   }
   
   static
  -sio_rc_t hole_output(sio_t *sio, al_t *al, void *u)
  +sio_rc_t hole_output(sio_t *sio, al_t *al, void *u, sio_rc_t orc)
   {
       /* drop all data into the bit bucket */
       al_splice(al, 0, al_bytes(al), NULL, NULL);
  Index: ossp-pkg/sio/sio_null.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 sio_null.c
  --- ossp-pkg/sio/sio_null.c	27 Nov 2002 15:50:29 -0000	1.7
  +++ ossp-pkg/sio/sio_null.c	29 Nov 2002 13:00:18 -0000	1.8
  @@ -86,13 +86,13 @@
   }
   
   static
  -sio_rc_t null_input(sio_t *sio, al_t *al, void *u)
  +sio_rc_t null_input(sio_t *sio, al_t *al, void *u, sio_rc_t orc)
   {
       return SIO_OK;
   }
   
   static
  -sio_rc_t null_output(sio_t *sio, al_t *al, void *u)
  +sio_rc_t null_output(sio_t *sio, al_t *al, void *u, sio_rc_t orc)
   {
       return SIO_OK;
   }
  Index: ossp-pkg/sio/sio_sa.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 sio_sa.c
  --- ossp-pkg/sio/sio_sa.c	27 Nov 2002 15:50:29 -0000	1.5
  +++ ossp-pkg/sio/sio_sa.c	29 Nov 2002 13:00:18 -0000	1.6
  @@ -147,7 +147,7 @@
   }
   
   static
  -sio_rc_t saw_input(sio_t *sio, al_t *al, void *u)
  +sio_rc_t saw_input(sio_t *sio, al_t *al, void *u, sio_rc_t orc)
   {
       private_t *my = (private_t *)u;
       buffer_t *buf = &my->input;
  @@ -189,7 +189,7 @@
   }
   
   static
  -sio_rc_t saw_output(sio_t *sio, al_t *al, void *u)
  +sio_rc_t saw_output(sio_t *sio, al_t *al, void *u, sio_rc_t orc)
   {
       private_t *my = (private_t *)u;
       al_rc_t arc;
  Index: ossp-pkg/sio/sio_sio.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 sio_sio.c
  --- ossp-pkg/sio/sio_sio.c	28 Nov 2002 17:45:15 -0000	1.1
  +++ ossp-pkg/sio/sio_sio.c	29 Nov 2002 13:00:19 -0000	1.2
  @@ -8,7 +8,9 @@
   
   typedef struct {
       sio_t      *upstream;
  -    al_label_t  label;
  +    al_label_t  my_data_label;
  +    al_label_t  my_eof_label;
  +    al_label_t  my_error_label;
       al_label_t  data_label;
       al_label_t  eof_label;
       al_label_t  error_label;
  @@ -29,9 +31,11 @@
       if (my == NULL)
           return SIO_ERR_MEM;
   
  -    my->upstream = NULL;
  -    my->label    = NULL;
  -    my->eof      = '\0';
  +    my->upstream         = NULL;
  +    my->my_data_label    = NULL;
  +    my->my_error_label   = NULL;
  +    my->my_eof_label     = NULL;
  +    my->eof              = '\0';
   
       sio_label(sio, SIO_LN_DATA,  &my->data_label);
       sio_label(sio, SIO_LN_ERROR, &my->error_label);
  @@ -55,8 +59,12 @@
   
       if (!strcmp(name, "upstream")) {
           my->upstream = (sio_t *)val;
  -    } else if (!strcmp(name, "label")) {
  -        my->label = (al_label_t)val;
  +    } else if (!strcmp(name, "mydatalabel")) {
  +        my->my_data_label = (al_label_t)val;
  +    } else if (!strcmp(name, "myerrorlabel")) {
  +        my->my_error_label = (al_label_t)val;
  +    } else if (!strcmp(name, "myeoflabel")) {
  +        my->my_eof_label = (al_label_t)val;
       } else {
           return SIO_ERR_ARG;
       }
  @@ -82,8 +90,7 @@
   {
       private_t *my = (private_t *)u;
   
  -    if (my->upstream == NULL ||
  -        my->label    == NULL)
  +    if (my->upstream == NULL)
           return SIO_ERR_ARG;
   
       return SIO_OK;
  @@ -100,8 +107,7 @@
   {
       private_t *my = (private_t *)u;
   
  -    if (my->upstream == NULL ||
  -        my->label    == NULL)
  +    if (my->upstream == NULL)
           return SIO_ERR_ARG;
   
       return SIO_OK;
  @@ -114,32 +120,54 @@
   }
   
   static
  -sio_rc_t siosio_input(sio_t *sio, al_t *al, void *u)
  +sio_rc_t siosio_input(sio_t *sio, al_t *al, void *u, sio_rc_t orc)
   {
       private_t *my = (private_t *)u;
   
       if (al_bytes(al) == 0) {
  -        sio_input(my->upstream, al, SIZE_T_MAX, my->label);
  -        if (al_bytes(al) > 0) {
  -            if (my->label != my->data_label)
  -                al_setlabel(al, 0, al_bytes(al), my->label, my->data_label);
  -        } else
  -            al_append_bytes(al, &my->eof, sizeof(my->eof), my->eof_label);
  +        if (my->my_data_label != NULL) {
  +            sio_input(my->upstream, al, SIZE_T_MAX, my->my_data_label);
  +            if (my->my_data_label != my->data_label)
  +                al_setlabel(al, 0, al_bytes(al),
  +                            my->my_data_label, my->data_label);
  +        }
  +
  +        if (my->my_error_label != NULL) {
  +            sio_input(my->upstream, al, SIZE_T_MAX, my->my_error_label);
  +            if (my->my_error_label != my->error_label)
  +                al_setlabel(al, 0, al_bytes(al),
  +                            my->my_error_label, my->error_label);
  +        }
  +
  +        if (my->my_eof_label != NULL) {
  +            sio_input(my->upstream, al, SIZE_T_MAX, my->my_eof_label);
  +            if (my->my_eof_label != my->eof_label)
  +                al_setlabel(al, 0, al_bytes(al),
  +                            my->my_eof_label, my->eof_label);
  +        }
       }
   
       return SIO_SCHED_DOWN;
   }
   
   static
  -sio_rc_t siosio_output(sio_t *sio, al_t *al, void *u)
  +sio_rc_t siosio_output(sio_t *sio, al_t *al, void *u, sio_rc_t orc)
   {
       private_t *my = (private_t *)u;
   
       if (al_bytes(al) > 0) {
  -        /* recolor data */
  -        if (my->label != my->data_label)
  -            al_setlabel(al, 0, al_bytes(al), my->data_label, my->label);
  -        /* send out */
  +        if (my->my_data_label != NULL && my->my_data_label != my->data_label)
  +            al_setlabel(al, 0, al_bytes(al),
  +                        my->data_label, my->my_data_label);
  +
  +        if (my->my_error_label != NULL && my->my_error_label != my->error_label)
  +            al_setlabel(al, 0, al_bytes(al),
  +                        my->error_label, my->my_error_label);
  +
  +        if (my->my_eof_label != NULL && my->my_eof_label != my->eof_label)
  +            al_setlabel(al, 0, al_bytes(al),
  +                        my->eof_label, my->my_eof_label);
  +
           /* XXX error handling ? */
           sio_output(my->upstream, al);
       }
  Index: ossp-pkg/sio/sio_zlib.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 sio_zlib.c
  --- ossp-pkg/sio/sio_zlib.c	27 Nov 2002 13:18:36 -0000	1.2
  +++ ossp-pkg/sio/sio_zlib.c	29 Nov 2002 13:00:19 -0000	1.3
  @@ -305,7 +305,7 @@
   }
   
   static
  -sio_rc_t zlib_input(sio_t *sio, al_t *al, void *u)
  +sio_rc_t zlib_input(sio_t *sio, al_t *al, void *u, sio_rc_t orc)
   {
       private_t *my = (private_t *)u;
   
  @@ -313,7 +313,7 @@
   }
   
   static
  -sio_rc_t zlib_output(sio_t *sio, al_t *al, void *u)
  +sio_rc_t zlib_output(sio_t *sio, al_t *al, void *u, sio_rc_t orc)
   {
       private_t *my = (private_t *)u;
   

From ossp-cvs-owner@ossp.org  Fri Nov 29 14:03:40 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6ED61763C5; Fri, 29 Nov 2002 14:03:40 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio.h
Message-Id: <20021129130340.6ED61763C5@mail.ossp.org>
Date: Fri, 29 Nov 2002 14:03:40 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   29-Nov-2002 14:03:40
  Branch: HEAD                             Handle: 2002112913034000

  Modified files:
    ossp-pkg/sio            sio.h

  Log:
    fix cut&paste error

  Summary:
    Revision    Changes     Path
    1.9         +2  -2      ossp-pkg/sio/sio.h
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio.h
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 sio.h
  --- ossp-pkg/sio/sio.h	28 Nov 2002 16:29:37 -0000	1.8
  +++ ossp-pkg/sio/sio.h	29 Nov 2002 13:03:40 -0000	1.9
  @@ -104,8 +104,8 @@
       sio_rc_t (*closer)    (sio_t *, al_t *, void *);
       sio_rc_t (*openw)     (sio_t *, al_t *, void *);
       sio_rc_t (*closew)    (sio_t *, al_t *, void *);
  -    sio_rc_t (*input)     (sio_t *, al_t *, void *);
  -    sio_rc_t (*output)    (sio_t *, al_t *, void *);
  +    sio_rc_t (*input)     (sio_t *, al_t *, void *, sio_rc_t orc);
  +    sio_rc_t (*output)    (sio_t *, al_t *, void *, sio_rc_t orc);
       sio_rc_t (*shutdown)  (sio_t *, void *);
   };
   

From ossp-cvs-owner@ossp.org  Fri Nov 29 14:04:15 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6B356764A8; Fri, 29 Nov 2002 14:04:15 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio.c
Message-Id: <20021129130415.6B356764A8@mail.ossp.org>
Date: Fri, 29 Nov 2002 14:04:15 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   29-Nov-2002 14:04:15
  Branch: HEAD                             Handle: 2002112913041500

  Modified files:
    ossp-pkg/sio            sio.c

  Log:
    fix old prototype

  Summary:
    Revision    Changes     Path
    1.17        +1  -1      ossp-pkg/sio/sio.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio.c
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 sio.c
  --- ossp-pkg/sio/sio.c	29 Nov 2002 13:00:18 -0000	1.16
  +++ ossp-pkg/sio/sio.c	29 Nov 2002 13:04:15 -0000	1.17
  @@ -65,7 +65,7 @@
       sio_rc_t                rc_with_data;      /* default rc to avoid */
       sio_rc_t                rc_no_data;        /*  decision in strategy() */
       al_t                   *al;                /* reader/writer assembly line */
  -    sio_rc_t              (*func)(sio_t *, al_t *, void *); /* input() or output() */
  +    sio_rc_t              (*func)(sio_t *, al_t *, void *, sio_rc_t); /* input() or output() */
   };
   
   /*

From ossp-cvs-owner@ossp.org  Fri Nov 29 15:06:52 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7BAA8763C5; Fri, 29 Nov 2002 15:06:52 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.c
Message-Id: <20021129140652.7BAA8763C5@mail.ossp.org>
Date: Fri, 29 Nov 2002 15:06:52 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   29-Nov-2002 15:06:52
  Branch: HEAD                             Handle: 2002112914065200

  Modified files:
    ossp-pkg/sio            al.c

  Log:
    get rid of superflous unsigned<0 tests

  Summary:
    Revision    Changes     Path
    1.40        +4  -4      ossp-pkg/sio/al.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/al.c
  ============================================================
  $ cvs diff -u -r1.39 -r1.40 al.c
  --- ossp-pkg/sio/al.c	28 Nov 2002 17:21:55 -0000	1.39
  +++ ossp-pkg/sio/al.c	29 Nov 2002 14:06:52 -0000	1.40
  @@ -487,7 +487,7 @@
       char *dst;
   
       /* argument sanity check(s) */
  -    if (al == NULL || src == NULL || n < 0)
  +    if (al == NULL || src == NULL)
           return AL_RC(AL_ERR_ARG);
   
       cur = TAIL(al,chunks);
  @@ -536,7 +536,7 @@
       char *dst;
   
       /* argument sanity check(s) */
  -    if (al == NULL || src == NULL || n < 0)
  +    if (al == NULL || src == NULL)
           return AL_RC(AL_ERR_ARG);
   
       cur = HEAD(al,chunks);
  @@ -624,7 +624,7 @@
       int doinsert;
   
       /* argument sanity check(s) */
  -    if (al == NULL || n < 0)
  +    if (al == NULL)
           return AL_RC(AL_ERR_ARG);
   
       /* optimization: treat an empty list as no insertion at all */
  @@ -829,7 +829,7 @@
       size_t skip, len;
   
       /* argument sanity check(s) */
  -    if (al == NULL || n < 0)
  +    if (al == NULL)
           return AL_RC(AL_ERR_ARG);
   
       /*

From ossp-cvs-owner@ossp.org  Fri Nov 29 15:26:32 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C2D75764A7; Fri, 29 Nov 2002 15:26:31 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio_bio.c
Message-Id: <20021129142631.C2D75764A7@mail.ossp.org>
Date: Fri, 29 Nov 2002 15:26:31 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   29-Nov-2002 15:26:31
  Branch: HEAD                             Handle: 2002112914263100

  Modified files:
    ossp-pkg/sio            sio_bio.c

  Log:
    eof/write_error handling
    BIO_write retries now loops through scheduler to give upper
    layer a chance to run.

  Summary:
    Revision    Changes     Path
    1.7         +43 -32     ossp-pkg/sio/sio_bio.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio_bio.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 sio_bio.c
  --- ossp-pkg/sio/sio_bio.c	29 Nov 2002 13:00:18 -0000	1.6
  +++ ossp-pkg/sio/sio_bio.c	29 Nov 2002 14:26:31 -0000	1.7
  @@ -23,8 +23,6 @@
       BIO         *bio;
       BIO         *nbio;
       al_t        *al_in, *al_out;   /* upstream buffers */
  -    int          reader_writes;
  -    int          writer_reads;
       int          issink;
       int          freebio;
       size_t       inputsize;
  @@ -34,10 +32,11 @@
       char         eof;
       char         error;
       size_t       total;
  -    int          should_retry;
  +    int          needs_input;
  +    int          eof_reached;
  +    int          write_error;
       int          flush_upper;
       int          flush_lower;
  -    int          eof_reached;
   } private_t;
   
   /********************************************************************/
  @@ -136,14 +135,12 @@
               m = n;
           } else {
               al_flatten(my->al_in, 0, outl, AL_FORWARD_SPAN, label, NULL, &n);
  -            m = -1;
  +            my->eof_reached = 1;
  +            m = 0;
           }
           al_splice(my->al_in, 0, n, NULL, NULL);
       }
   
  -    if (m < 0)
  -        my->eof_reached = 1;
  -
       BIO_clear_retry_flags(b);
       if (m == 0)
           BIO_set_retry_read(b);
  @@ -202,7 +199,7 @@
       my->issink        = 1;
       my->freebio       = 0;
       my->eof           = '\0';
  -    my->error        = '\0';
  +    my->error         = '\0';
   
       sio_label(sio, SIO_LN_DATA,  &my->data_label);
       sio_label(sio, SIO_LN_EOF,   &my->eof_label);
  @@ -223,11 +220,15 @@
   {
       private_t *my = (private_t *)u;
       const char *name = (const char *)obj;
  +    int v;
   
       if (!strcmp(name, "bio")) {
           my->bio       = (BIO *)val;
       } else if (!strcmp(name, "inputsize")) {
  -        my->inputsize = *(int *)val;
  +        v = *(int *)val;
  +        if (v <= 0)
  +            return SIO_ERR_ARG;
  +        my->inputsize = v;
       } else if (!strcmp(name, "issink")) {
           my->issink    = *(int *)val;
       } else if (!strcmp(name, "freebio")) {
  @@ -296,8 +297,12 @@
           BIO_push(my->bio, my->nbio);
       }
   
  -    my->writer_reads  = 0;
  -    my->reader_writes = 0;
  +    my->eof_reached   = 0;
  +    my->needs_input   = 0;
  +    my->write_error   = 0;
  +
  +    my->flush_upper   = 0;
  +    my->flush_lower   = 0;
   
       my->state = INIT;
   
  @@ -338,7 +343,7 @@
    * chunk traversal of output buffer
    *
    * counts my->total
  - * sets my->should_retry
  + * sets my->needs_input
    */
   static
   al_rc_t siobio_write_chunk(al_chunk_t *alc, void *u)
  @@ -355,13 +360,14 @@
               i = my->bio ? BIO_write(my->bio, p+t, n-t) : (n-t);
               if (i <= 0) {
                   if (!BIO_should_retry(my->bio)) {
  -                    my->should_retry = 1;
  -                    arc = AL_ERR_EOF;
  -                    break;
  +                    my->needs_input = 1;
  +                    if (my->eof_reached)
  +                        my->write_error = 1;
                   }
  -                i = 0;
  +                arc = AL_ERR_EOF;
  +                break;
               }
  -            my->total += i;
  +            my->total       += i;
           }
       } else {
           my->total += n;
  @@ -405,8 +411,8 @@
           return SIO_SCHED_UP;
       }
   
  -    if (my->should_retry) {
  -        my->should_retry = 0;
  +    if (my->needs_input) {
  +        my->needs_input = 0;
           al_splice(al, 0, al_bytes(al), my->al_in, NULL);
           return SIO_SCHED_CROSS;
       }
  @@ -424,7 +430,7 @@
   sio_rc_t siobio_input_lower(private_t *my, al_t *al)
   {
       al_splice(al, al_bytes(al), 0, my->in_buf, NULL);
  -    if (al_bytes(al) > 0) {
  +    if (al_bytes(al) > 0 || my->eof_reached) {
           my->state = INIT;
           return SIO_SCHED_DOWN;
       }
  @@ -454,7 +460,7 @@
       int n;
   
       n = BIO_pending(my->bio);
  -    if (n == 0 || n > my->inputsize)
  +    if (n <= 0 || (size_t)n > my->inputsize)
           n = my->inputsize;
       p = malloc(n);
       assert(p != NULL);
  @@ -481,14 +487,14 @@
   static
   void siobio_bio_write(private_t *my)
   {
  -    my->should_retry = 0;
  -    my->total        = 0;
  +    my->needs_input = 0;
  +    my->total       = 0;
       al_traverse_cb(my->out_buf, 0, al_bytes(my->out_buf),
                      AL_FORWARD, NULL,
                      siobio_write_chunk, (void *)my);
       al_splice(my->out_buf, 0, my->total, NULL, NULL);
   
  -    if (my->flush_lower) {
  +    if (!my->write_error && my->flush_lower) {
           my->flush_upper = 1;
           if (BIO_flush(my->bio) > 0)
               my->flush_lower = 0;
  @@ -498,13 +504,6 @@
   /********************************************************************/
   
   static
  -sio_rc_t siobio_eof(private_t *my, al_t *al)
  -{
  -    al_splice(al, 0, al_bytes(al), NULL, NULL);
  -    return SIO_SCHED_DOWN;
  -}
  -
  -static
   sio_rc_t siobio_input(sio_t *sio, al_t *al, void *u, sio_rc_t orc)
   {
       private_t *my = (private_t *)u;
  @@ -519,6 +518,12 @@
       case LOWER:
           siobio_bio_read(my);
           rc = siobio_input_lower(my, al);
  +        if (my->eof_reached) {
  +            my->eof_reached = 0;
  +            my->state       = INIT;
  +            al_append_bytes(al, &my->eof, sizeof(my->eof), my->eof_label);
  +            return SIO_SCHED_DOWN;
  +        }
           break;
       case UPPER:
           rc = siobio_input_upper(my, al);
  @@ -543,6 +548,12 @@
       case LOWER:
           rc = siobio_output_lower(my, al);
           siobio_bio_write(my);
  +        if (my->write_error) {
  +            my->write_error = 0;
  +            my->state       = INIT;
  +            al_splice(al, 0, al_bytes(al), NULL, NULL);
  +            return SIO_SCHED_DOWN;
  +        }
           break;
       case UPPER:
           rc = siobio_output_upper(my, al);

From ossp-cvs-owner@ossp.org  Fri Nov 29 15:27:44 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 91C7D764A7; Fri, 29 Nov 2002 15:27:44 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio_hello.c
Message-Id: <20021129142744.91C7D764A7@mail.ossp.org>
Date: Fri, 29 Nov 2002 15:27:44 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   29-Nov-2002 15:27:44
  Branch: HEAD                             Handle: 2002112914274400

  Modified files:
    ossp-pkg/sio            sio_hello.c

  Log:
    add assertions to check internal state with scheduler direction

  Summary:
    Revision    Changes     Path
    1.12        +11 -3      ossp-pkg/sio/sio_hello.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio_hello.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 sio_hello.c
  --- ossp-pkg/sio/sio_hello.c	29 Nov 2002 13:00:18 -0000	1.11
  +++ ossp-pkg/sio/sio_hello.c	29 Nov 2002 14:27:44 -0000	1.12
  @@ -246,7 +246,7 @@
   #define GOTO(s, c) do { my->state = (s); rc = (c); } while(0)
   
   static
  -sio_rc_t hello_protocol(sio_t *sio, private_t *my, int isoutput)
  +sio_rc_t hello_protocol(sio_t *sio, private_t *my, int isoutput, sio_rc_t orc)
   {
       sio_rc_t rc = SIO_ERR_INT;
       int good;
  @@ -255,6 +255,8 @@
   
       case INIT:
   
  +        assert(orc == SIO_SCHED_UP);
  +
           /*
            * save origin (input, output) so that
            * we can complete correctly after handshake
  @@ -280,6 +282,8 @@
   
       case PROMPTING:
   
  +        assert(orc == SIO_SCHED_CROSS || orc == SIO_SCHED_LOOP);
  +
           assert(isoutput == 1);
           /*
            *  only called on output stream
  @@ -297,6 +301,8 @@
   
       case PROMPTED:
   
  +        assert(orc == SIO_SCHED_DOWN);
  +
           assert(isoutput == 1);
           /*
            * only called on output stream
  @@ -313,6 +319,8 @@
   
       case WAIT:
   
  +        assert(orc == SIO_SCHED_CROSS || orc == SIO_SCHED_DOWN);
  +
           assert(isoutput == 0);
           /*
            * only called on input stream
  @@ -393,13 +401,13 @@
   static
   sio_rc_t hello_input(sio_t *sio, al_t *al, void *u, sio_rc_t orc)
   {
  -    return hello_protocol(sio, (private_t *)u, 0);
  +    return hello_protocol(sio, (private_t *)u, 0, orc);
   }
   
   static
   sio_rc_t hello_output(sio_t *sio, al_t *al, void *u, sio_rc_t orc)
   {
  -    return hello_protocol(sio, (private_t *)u, 1);
  +    return hello_protocol(sio, (private_t *)u, 1, orc);
   }
   
   sio_module_t sio_module_hello = {

From ossp-cvs-owner@ossp.org  Fri Nov 29 15:28:01 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 20660764B2; Fri, 29 Nov 2002 15:28:01 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio Makefile
Message-Id: <20021129142801.20660764B2@mail.ossp.org>
Date: Fri, 29 Nov 2002 15:28:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   29-Nov-2002 15:28:01
  Branch: HEAD                             Handle: 2002112914280000

  Modified files:
    ossp-pkg/sio            Makefile

  Log:
    more warnings

  Summary:
    Revision    Changes     Path
    1.5         +3  -2      ossp-pkg/sio/Makefile
  ____________________________________________________________________________

  Index: ossp-pkg/sio/Makefile
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 Makefile
  --- ossp-pkg/sio/Makefile	29 Nov 2002 12:58:59 -0000	1.4
  +++ ossp-pkg/sio/Makefile	29 Nov 2002 14:28:00 -0000	1.5
  @@ -1,6 +1,7 @@
   CC     = gcc
  -CFLAGS = -g -Wall -Wshadow -Wpointer-arith -Wcast-align -Winline \
  -         -Wmissing-prototypes -Wmissing-declarations -Wnested-externs
  +CFLAGS = -g -W -Wall -Wshadow -Wpointer-arith -Wcast-align -Winline \
  +         -Wmissing-prototypes -Wmissing-declarations -Wnested-externs \
  +		 -Wno-unused-parameter
   
   all: al_test sio_test
   

From ossp-cvs-owner@ossp.org  Fri Nov 29 15:50:22 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CF90B764A7; Fri, 29 Nov 2002 15:50:21 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio_fd.c
Message-Id: <20021129145021.CF90B764A7@mail.ossp.org>
Date: Fri, 29 Nov 2002 15:50:21 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   29-Nov-2002 15:50:21
  Branch: HEAD                             Handle: 2002112914502100

  Modified files:
    ossp-pkg/sio            sio_fd.c

  Log:
    fix cut&paste
    fix signed error (return value of read != size_t)

  Summary:
    Revision    Changes     Path
    1.12        +3  -3      ossp-pkg/sio/sio_fd.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio_fd.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 sio_fd.c
  --- ossp-pkg/sio/sio_fd.c	29 Nov 2002 13:00:18 -0000	1.11
  +++ ossp-pkg/sio/sio_fd.c	29 Nov 2002 14:50:21 -0000	1.12
  @@ -133,11 +133,11 @@
   }
   
   static
  -sio_rc_t fd_input(sio_t *sio, al_t *al, void *u)
  +sio_rc_t fd_input(sio_t *sio, al_t *al, void *u, sio_rc_t orc)
   {
       private_t *my = (private_t *)u;
       buffer_t *buf = &my->input;
  -    size_t actual;
  +    int actual;
   
       actual = read(my->fd, buf->mem, buf->size);
       if (actual < 0) {
  @@ -154,7 +154,7 @@
   }
   
   static
  -al_rc_t fd_output_chunk(al_chunk_t *alc, void *u, sio_rc_t orc)
  +al_rc_t fd_output_chunk(al_chunk_t *alc, void *u)
   {
       private_t *my = (private_t *)u;
       char   *p;

From ossp-cvs-owner@ossp.org  Fri Nov 29 16:33:21 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 08B1E763C5; Fri, 29 Nov 2002 16:33:20 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio.c
Message-Id: <20021129153320.08B1E763C5@mail.ossp.org>
Date: Fri, 29 Nov 2002 16:33:20 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   29-Nov-2002 16:33:20
  Branch: HEAD                             Handle: 2002112915332000

  Modified files:
    ossp-pkg/sio            sio.c

  Log:
    batch all data in sio_input
    don't retry sio_input for different labels in sio_read if there was
    an error.

  Summary:
    Revision    Changes     Path
    1.18        +33 -24     ossp-pkg/sio/sio.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio.c
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 sio.c
  --- ossp-pkg/sio/sio.c	29 Nov 2002 13:04:15 -0000	1.17
  +++ ossp-pkg/sio/sio.c	29 Nov 2002 15:33:20 -0000	1.18
  @@ -558,7 +558,8 @@
       if (n == 0) {
   
           rc = sio_strategy(sio, h);
  -        if (rc != SIO_OK) return SIO_RC(rc);
  +        if (rc != SIO_OK)
  +            return SIO_RC(rc);
   
           n = al_bytes(src);
           if (n == 0)
  @@ -566,22 +567,24 @@
   
       }
   
  -    if (label == NULL) {
  -        datastart = 0;
  -        datasize  = n;
  -    } else if (al_spanlabel(src, 0, n, label, &datastart, &datasize) != AL_OK) {
  -        datastart = 0;
  -        datasize  = 0;
  -    }
  +    while (n > 0) {
  +        if (label == NULL) {
  +            datastart = 0;
  +            datasize  = n;
  +        } else if (al_spanlabel(src, 0, n, label, &datastart, &datasize) != AL_OK)
  +            break;
  +
  +        /*
  +         * clamp to requested size
  +         */
  +        if (datasize > n)
  +            datasize = n;
   
  -    /*
  -     * clamp to requested size
  -     */
  -    if (datasize > n)
  -        datasize = n;
  +        /* XXX - error handling ? */
  +        (void) al_splice(src, datastart, datasize, NULL, al);
   
  -    /* XXX - error handling ? */
  -    (void) al_splice(src, datastart, datasize, NULL, al);
  +        n -= datasize;
  +    }
   
       return SIO_OK;
   }
  @@ -676,16 +679,22 @@
       if (arc != AL_OK) return SIO_RC(SIO_ERR_INT);
   
       rc = sio_input(sio, al, n, SIO_LABEL_DATA(sio));
  -    if (rc == SIO_OK && al_bytes(al) > 0)
  -        al_flatten(al, 0, n, AL_FORWARD, NULL, dst, actualp);
  -    else {
  -        rc = sio_input(sio, al, n, SIO_LABEL_ERROR(sio));
  -        if (rc == SIO_OK && al_bytes(al) > 0)
  -            sio->error_flag = 1;
  +    if (rc == SIO_OK) {
  +        if (al_bytes(al) > 0)
  +            al_flatten(al, 0, n, AL_FORWARD, NULL, dst, actualp);
           else {
  -            rc = sio_input(sio, al, n, SIO_LABEL_EOF(sio));
  -            if (rc == SIO_OK && al_bytes(al) > 0)
  -                sio->eof_flag = 1;
  +            rc = sio_input(sio, al, n, SIO_LABEL_ERROR(sio));
  +            if (rc == SIO_OK) {
  +                if (al_bytes(al) > 0)
  +                    sio->error_flag = 1;
  +                else {
  +                    rc = sio_input(sio, al, n, SIO_LABEL_EOF(sio));
  +                    if (rc == SIO_OK) {
  +                        if (al_bytes(al) > 0)
  +                            sio->eof_flag = 1;
  +                    }
  +                }
  +            }
           }
       }
   

From ossp-cvs-owner@ossp.org  Fri Nov 29 16:45:26 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4AE25764A9; Fri, 29 Nov 2002 16:45:26 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio Makefile sio_sillymux.c sio_test2.c
Message-Id: <20021129154526.4AE25764A9@mail.ossp.org>
Date: Fri, 29 Nov 2002 16:45:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   29-Nov-2002 16:45:26
  Branch: HEAD                             Handle: 2002112915452500

  Added files:
    ossp-pkg/sio            sio_sillymux.c
  Modified files:
    ossp-pkg/sio            Makefile sio_test2.c

  Log:
    split input stream into even/odd lines for two readers

  Summary:
    Revision    Changes     Path
    1.6         +3  -3      ossp-pkg/sio/Makefile
    1.1         +185 -0     ossp-pkg/sio/sio_sillymux.c
    1.2         +55 -19     ossp-pkg/sio/sio_test2.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/Makefile
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 Makefile
  --- ossp-pkg/sio/Makefile	29 Nov 2002 14:28:00 -0000	1.5
  +++ ossp-pkg/sio/Makefile	29 Nov 2002 15:45:25 -0000	1.6
  @@ -3,7 +3,7 @@
            -Wmissing-prototypes -Wmissing-declarations -Wnested-externs \
   		 -Wno-unused-parameter
   
  -all: al_test sio_test
  +all: al_test sio_test sio_test2
   
   .c.o:
   	$(CC) $(CFLAGS) -c $<
  @@ -13,8 +13,8 @@
   sio_test: sio_test.o sio_sa.o sio_buffer.o sio_hello.o sio_bio.o sio.o al.o lib_sa/sa.o
   	$(CC) $(CFLAGS) -o sio_test sio_test.o sio_sa.o sio_buffer.o sio_hello.o sio_bio.o sio.o al.o lib_sa/sa.o -lssl -lcrypto
   
  -sio_test2: sio_test2.o sio_fd.o sio_buffer.o sio_zlib.o sio_sio.o sio.o al.o
  -	$(CC) $(CFLAGS) -o sio_test2 sio_test2.o sio_fd.o sio_buffer.o sio_zlib.o sio_sio.o sio.o al.o -lz
  +sio_test2: sio_test2.o sio_fd.o sio_buffer.o sio_zlib.o sio_sio.o sio_sillymux.o sio.o al.o
  +	$(CC) $(CFLAGS) -o sio_test2 sio_test2.o sio_fd.o sio_buffer.o sio_zlib.o sio_sio.o sio_sillymux.o sio.o al.o -lz
   
   lib_sa/sa.o: lib_sa/sa.c
   	$(CC) $(CFLAGS) -c -Ilib_sa -o lib_sa/sa.o lib_sa/sa.c
  Index: ossp-pkg/sio/sio_sillymux.c
  ============================================================
  $ cvs update -p -r1.1 sio_sillymux.c
  #include <stddef.h>
  #include <stdlib.h>
  #include <string.h>
  
  #include "al.h"
  #include "sio.h"
  
  typedef struct {
      al_label_t odd_label;
      al_label_t even_label;
      al_label_t data_label;
      int        odd;
      size_t     next;
      int        found;
  } private_t;
  
  /*
   * create stage
   *
   * allocate private instance data
   */
  static
  sio_rc_t sillymux_init(sio_t *sio, void **up)
  {
      private_t *my;
      
      my = (private_t *)malloc(sizeof(private_t));
      if (my == NULL)
          return SIO_ERR_MEM;
  
      my->odd_label    = NULL;
      my->even_label   = NULL;
  
      my->found        = 0;
      my->odd          = 1;
  
      sio_label(sio, SIO_LN_DATA, &my->data_label);
  
      *up = my;
  
      return SIO_OK;
  }
  
  /*
   * configure stage
   *
   * pass two void pointers
   */
  static
  sio_rc_t sillymux_configure(sio_t *sio, void *u, void *obj, void *val)
  {
      private_t *my = (private_t *)u;
      const char *name = (const char *)obj;
  
      if (!strcmp(name, "evenlabel")) {
          my->even_label = (al_label_t *)val;
      } else if (!strcmp(name, "oddlabel")) {
          my->odd_label = (al_label_t *)val;
      } else {
          return SIO_ERR_ARG;
      }
  
      return SIO_OK;
  }
  
  /*
   * destroy stage
   */
  static
  sio_rc_t sillymux_cleanup(sio_t *sio, void *u)
  {
      private_t *my = (private_t *)u;
  
      free(my);
  
      return SIO_OK;
  }
  
  static
  sio_rc_t sillymux_openr(sio_t *sio, al_t *al, void *u)
  {
      return SIO_OK;
  }
  
  static
  sio_rc_t sillymux_closer(sio_t *sio, al_t *al, void *u)
  {
      return SIO_OK;
  }
  
  static
  sio_rc_t sillymux_openw(sio_t *sio, al_t *al, void *u)
  {
      return SIO_OK;
  }
  
  static
  sio_rc_t sillymux_closew(sio_t *sio, al_t *al, void *u)
  {
      return SIO_OK;
  }
  
  static
  al_rc_t findlf(al_chunk_t *alc, void *u)
  {
      private_t *my = (private_t *)u;
      const char *p, *lf;
      size_t n;
  
      n = al_chunk_len(alc);
  
      if (!al_same_label(alc, my->data_label)) {
          my->next += n;
          return AL_OK;
      }
  
      p = al_chunk_ptr(alc,0);
      lf = memchr(p, '\n', n);
      if (lf) {
          my->next += lf - p + 1;
          my->found = 1;
          return AL_ERR_EOF;
      }
  
      my->next += n;
  
      return AL_OK;
  }
  
  static
  sio_rc_t sillymux_input(sio_t *sio, al_t *al, void *u, sio_rc_t orc)
  {
      private_t *my = (private_t *)u;
      size_t pos, n;
  
      n = al_bytes(al);
      if (n == 0)
          return SIO_SCHED_UP;
  
      for (pos=0; pos<n; pos = my->next) {
  
          my->next = pos;
          al_traverse_cb(al, pos, n-pos, AL_FORWARD, NULL, findlf, u);
  
          al_setlabel(al, pos, my->next - pos,
                      my->data_label,
                      my->odd ? my->odd_label : my->even_label);
  
          if (my->found) {
              my->found = 0;
              my->odd = !my->odd;
          }
      }
  
      return SIO_SCHED_DOWN;
  }
  
  static
  sio_rc_t sillymux_output(sio_t *sio, al_t *al, void *u, sio_rc_t orc)
  {
      private_t *my = (private_t *)u;
  
      if (al_bytes(al) == 0)
          return SIO_SCHED_DOWN;
  
      al_setlabel(al, 0, al_bytes(al), my->odd_label, my->data_label);
      al_setlabel(al, 0, al_bytes(al), my->even_label, my->data_label);
  
      return SIO_SCHED_UP;
  }
  
  sio_module_t sio_module_sillymux = {
      "sillymux",
      sillymux_init,
      sillymux_configure,
      sillymux_cleanup,
      sillymux_openr,
      sillymux_closer,
      sillymux_openw,
      sillymux_closew,
      sillymux_input,
      sillymux_output,
      NULL
  };
  
  Index: ossp-pkg/sio/sio_test2.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 sio_test2.c
  --- ossp-pkg/sio/sio_test2.c	29 Nov 2002 12:58:59 -0000	1.1
  +++ ossp-pkg/sio/sio_test2.c	29 Nov 2002 15:45:25 -0000	1.2
  @@ -6,10 +6,15 @@
   #include "al.h"
   #include "sio.h"
   
  +static char oddlabel, evenlabel;
  +#define ODDLABEL  ((al_label_t)&oddlabel)
  +#define EVENLABEL ((al_label_t)&evenlabel)
  +
   extern sio_module_t sio_module_fd;
   extern sio_module_t sio_module_zlib;
   extern sio_module_t sio_module_buffer;
   extern sio_module_t sio_module_sio;
  +extern sio_module_t sio_module_sillymux;
   
   #define e(f) rc = f; printf("%s = %s\n",#f, sio_error(rc)); fflush(stdout);
   #define s(f) src = f; printf("%s = %s\n",#f, sa_error(src)); fflush(stdout);
  @@ -21,10 +26,15 @@
   
       sio_t *sio;
       sio_stage_t *sios_fd, *sios_buffer, *sios_zlib;
  +    sio_stage_t *sios_sillymux;
  +
  +    sio_t *sio2a;
  +    sio_stage_t *sios2a_sio;
   
  -    sio_t *sio2;
  -    sio_stage_t *sios2_sio;
  -    al_label_t data_label, error_label, eof_label;
  +    sio_t *sio2b;
  +    sio_stage_t *sios2b_sio;
  +
  +    al_label_t label;
   
       char buf[513];
       size_t buflen;
  @@ -49,6 +59,7 @@
       e(sio_create_stage(sio, &sio_module_fd, &sios_fd));
       e(sio_create_stage(sio, &sio_module_zlib, &sios_zlib));
       e(sio_create_stage(sio, &sio_module_buffer, &sios_buffer));
  +    e(sio_create_stage(sio, &sio_module_sillymux, &sios_sillymux));
   
       e(sio_configure_stage(sio, sios_fd, "fd", &fd));
       buflen = 512;
  @@ -66,46 +77,71 @@
       level = -1;
       e(sio_configure_stage(sio, sios_zlib, "inputlevel", &level));
   
  -    e(sio_create(&sio2));
  -    e(sio_create_stage(sio2, &sio_module_sio, &sios2_sio));
  +    e(sio_configure_stage(sio, sios_sillymux, "oddlabel", ODDLABEL));
  +    e(sio_configure_stage(sio, sios_sillymux, "evenlabel", EVENLABEL));
   
  -    e(sio_label(sio, SIO_LN_DATA, &data_label));
  -    e(sio_label(sio, SIO_LN_ERROR, &error_label));
  -    e(sio_label(sio, SIO_LN_EOF, &eof_label));
  -    e(sio_configure_stage(sio2, sios2_sio, "upstream", sio));
  -    e(sio_configure_stage(sio2, sios2_sio, "mydatalabel", data_label));
  -    e(sio_configure_stage(sio2, sios2_sio, "myerrorlabel", error_label));
  -    e(sio_configure_stage(sio2, sios2_sio, "myeoflabel", eof_label));
  +    e(sio_create(&sio2a));
  +    e(sio_create_stage(sio2a, &sio_module_sio, &sios2a_sio));
  +    e(sio_configure_stage(sio2a, sios2a_sio, "upstream", sio));
  +    e(sio_configure_stage(sio2a, sios2a_sio, "mydatalabel", ODDLABEL));
  +    e(sio_attach(sio2a, sios2a_sio, SIO_MODE_READWRITE));
  +
  +    e(sio_create(&sio2b));
  +    e(sio_create_stage(sio2b, &sio_module_sio, &sios2b_sio));
  +    e(sio_configure_stage(sio2b, sios2b_sio, "upstream", sio));
  +    e(sio_configure_stage(sio2b, sios2b_sio, "mydatalabel", EVENLABEL));
  +    e(sio_attach(sio2b, sios2b_sio, SIO_MODE_READWRITE));
   
  -    e(sio_attach(sio2, sios2_sio, SIO_MODE_READWRITE));
   
       {
           e(sio_attach(sio, sios_fd, SIO_MODE_READWRITE));
           e(sio_attach(sio, sios_zlib, SIO_MODE_READWRITE));
           e(sio_attach(sio, sios_buffer, SIO_MODE_READWRITE));
  +        e(sio_attach(sio, sios_sillymux, SIO_MODE_READWRITE));
   
   #ifdef WRITE
           e(sio_write(sio2, buf, strlen(buf), &actual));
           e(sio_push(sio2));
   #else
           do {
  +
  +            printf("READ A\n");
  +            actual = 0;
  +            e(sio_read(sio2a, buf, sizeof(buf), &actual));
  +            printf("actual_a = %d\n",actual);
  +            fwrite(buf, actual, 1, stdout);
  +            printf("\n");
  +
  +            printf("READ B\n");
               actual = 0;
  -            e(sio_read(sio2, buf, sizeof(buf), &actual));
  +            e(sio_read(sio2b, buf, sizeof(buf), &actual));
  +            printf("actual_b = %d\n",actual);
  +            fwrite(buf, actual, 1, stdout);
  +            printf("\n");
  +
  +            printf("READ MUX\n");
  +            actual = 0;
  +            e(sio_read(sio, buf, sizeof(buf), &actual));
               printf("actual = %d\n",actual);
               fwrite(buf, actual, 1, stdout);
               printf("\n");
  -        } while (sio_flag(sio2, SIO_FLAG_EOF) == SIO_FALSE);
  +
  +        } while (sio_flag(sio, SIO_FLAG_EOF) == SIO_FALSE);
   #endif
   
  +        e(sio_detach(sio, sios_sillymux));
           e(sio_detach(sio, sios_buffer));
           e(sio_detach(sio, sios_zlib));
           e(sio_detach(sio, sios_fd));
       }
   
  -    e(sio_detach(sio2, sios2_sio));
  -
  -    e(sio_destroy_stage(sio2, sios2_sio));
  -    e(sio_destroy(sio2));
  +    e(sio_detach(sio2b, sios2b_sio));
  +    e(sio_destroy_stage(sio2b, sios2b_sio));
  +    e(sio_destroy(sio2b));
  +
  +    e(sio_detach(sio2a, sios2a_sio));
  +    e(sio_destroy_stage(sio2a, sios2a_sio));
  +    e(sio_destroy(sio2a));
   
       e(sio_destroy_stage(sio, sios_buffer));
       e(sio_destroy_stage(sio, sios_zlib));

From ossp-cvs-owner@ossp.org  Fri Nov 29 18:58:19 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 91A20764A7; Fri, 29 Nov 2002 18:58:19 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog THANKS pth_p.h.in
Message-Id: <20021129175819.91A20764A7@mail.ossp.org>
Date: Fri, 29 Nov 2002 18:58:19 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Nov-2002 18:58:19
  Branch: HEAD                             Handle: 2002112917581800

  Modified files:
    ossp-pkg/pth            ChangeLog THANKS pth_p.h.in

  Log:
    Fixed compiler warnings under Linux: require inclusion of <time.h>
    
    Submitted by: Joseph Wayne Norton <norton@alum.mit.edu>

  Summary:
    Revision    Changes     Path
    1.601       +3  -0      ossp-pkg/pth/ChangeLog
    1.91        +1  -0      ossp-pkg/pth/THANKS
    1.35        +1  -0      ossp-pkg/pth/pth_p.h.in
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.600 -r1.601 ChangeLog
  --- ossp-pkg/pth/ChangeLog	9 Nov 2002 16:29:26 -0000	1.600
  +++ ossp-pkg/pth/ChangeLog	29 Nov 2002 17:58:18 -0000	1.601
  @@ -21,6 +21,9 @@
                     
     Changes between 2.0b1 and 2.0b2 (08-Nov-2002 to xx-Nov-2002)
   
  +   *) Fixed compiler warnings under Linux: require inclusion of <time.h>
  +      [Joseph Wayne Norton <norton@alum.mit.edu>]
  +
      *) Fixed error handling in pth_init(3): it now correctly
         returns an error instead of abort(3)'ing.
         [Ralf S. Engelschall]
  Index: ossp-pkg/pth/THANKS
  ============================================================
  $ cvs diff -u -r1.90 -r1.91 THANKS
  --- ossp-pkg/pth/THANKS	3 Nov 2002 10:04:35 -0000	1.90
  +++ ossp-pkg/pth/THANKS	29 Nov 2002 17:58:18 -0000	1.91
  @@ -74,6 +74,7 @@
       o  Matthew Mondor              <mmondor@gobot.ca>
       o  Eric Newton                 <ecn@smart.net>
       o  Sami Niemi                  <saminiemi@usa.net>
  +    o  Joseph Wayne Norton         <norton@alum.mit.edu>
       o  Alexandre Oliva             <oliva@dcc.unicamp.br>
       o  Giwon On                    <Giwon.On@KOM.tu-darmstadt.de>
       o  Takeshi OTOFUJI             <otofuji@quartet.ipc.akita-u.ac.jp>
  Index: ossp-pkg/pth/pth_p.h.in
  ============================================================
  $ cvs diff -u -r1.34 -r1.35 pth_p.h.in
  --- ossp-pkg/pth/pth_p.h.in	24 Oct 2002 09:07:51 -0000	1.34
  +++ ossp-pkg/pth/pth_p.h.in	29 Nov 2002 17:58:18 -0000	1.35
  @@ -42,6 +42,7 @@
   #include <sys/wait.h>
   #include <sys/stat.h>
   #include <sys/socket.h>
  +#include <time.h>
   
   /* library version */
   #define _PTH_VERS_C_AS_HEADER_

From ossp-cvs-owner@ossp.org  Sat Nov 30 21:16:01 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 68B3E7649D; Sat, 30 Nov 2002 21:16:01 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth Makefile.in
Message-Id: <20021130201601.68B3E7649D@mail.ossp.org>
Date: Sat, 30 Nov 2002 21:16:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Nov-2002 21:16:01
  Branch: HEAD                             Handle: 2002113020160000

  Modified files:
    ossp-pkg/pth            Makefile.in

  Log:
    fix typo

  Summary:
    Revision    Changes     Path
    1.149       +1  -1      ossp-pkg/pth/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/pth/Makefile.in
  ============================================================
  $ cvs diff -u -r1.148 -r1.149 Makefile.in
  --- ossp-pkg/pth/Makefile.in	3 Nov 2002 09:59:32 -0000	1.148
  +++ ossp-pkg/pth/Makefile.in	30 Nov 2002 20:16:00 -0000	1.149
  @@ -91,7 +91,7 @@
                 test_select test_httpd test_sfio test_uctx @TEST_PTHREAD@
   
   #   object files for library generation
  -#   (order is just aesthically important)
  +#   (order is just aesthetically important)
   LOBJS = pth_debug.lo pth_ring.lo pth_pqueue.lo pth_time.lo pth_errno.lo pth_mctx.lo \
           pth_uctx.lo pth_tcb.lo pth_sched.lo pth_attr.lo pth_lib.lo pth_event.lo \
           pth_data.lo pth_clean.lo pth_cancel.lo pth_msg.lo pth_sync.lo pth_fork.lo \

From ossp-cvs-owner@ossp.org  Sun Dec  1 14:09:03 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F3ECF764A8; Sun,  1 Dec 2002 14:09:02 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa ChangeLog
Message-Id: <20021201130902.F3ECF764A8@mail.ossp.org>
Date: Sun,  1 Dec 2002 14:09:02 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Dec-2002 14:09:02
  Branch: HEAD                             Handle: 2002120113090100

  Modified files:
    ossp-pkg/sa             ChangeLog

  Log:
    remember changes

  Summary:
    Revision    Changes     Path
    1.16        +9  -0      ossp-pkg/sa/ChangeLog
  ____________________________________________________________________________

  Index: ossp-pkg/sa/ChangeLog
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 ChangeLog
  --- ossp-pkg/sa/ChangeLog	7 Nov 2002 12:44:41 -0000	1.15
  +++ ossp-pkg/sa/ChangeLog	1 Dec 2002 13:09:01 -0000	1.16
  @@ -11,6 +11,15 @@
     This is a list of all changes to OSSP sa.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 1.0.1 and 1.0.2 (07-Nov-2002 to xx-Dec-2002)
  +
  +   o Fixed a few bugs and lots of internal type inconsistencies,
  +     all found by splint(1).
  +     [Ralf S. Engelschall]
  +
  +   o Upgraded build environment to GNU autoconf 2.56.
  +     [Ralf S. Engelschall]
  +
     Changes between 1.0.0 and 1.0.1 (01-Nov-2002 to 07-Nov-2002)
   
      o Make sure that "va_list" variables are not compared against NULL

From ossp-cvs-owner@ossp.org  Mon Dec  2 11:01:50 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C41A5764A1; Mon,  2 Dec 2002 11:01:49 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Message-Id: <20021202100149.C41A5764A1@mail.ossp.org>
Date: Mon,  2 Dec 2002 11:01:49 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: CVSROOT                          Date:   02-Dec-2002 11:01:49
  Branch: HEAD                             Handle: 2002120210014900

  Modified files:
    CVSROOT                 modules

  Log:
    titraq is now as-gui and lives on as.is.eu.cw.com

  Summary:
    Revision    Changes     Path
    1.62        +0  -1      CVSROOT/modules
  ____________________________________________________________________________

  Index: CVSROOT/modules
  ============================================================
  $ cvs diff -u -r1.61 -r1.62 modules
  --- CVSROOT/modules	21 Oct 2002 16:38:22 -0000	1.61
  +++ CVSROOT/modules	2 Dec 2002 10:01:49 -0000	1.62
  @@ -90,7 +90,6 @@
   shiela          ossp-pkg/shiela
   shtool          ossp-pkg/shtool
   sugar           ossp-pkg/sugar
  -titraq          ossp-pkg/titraq
   
   #   the OSSP applications (third-party)
   cvs             ossp-pkg/cvs

From ossp-cvs-owner@ossp.org  Wed Dec  4 13:43:04 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F22AA764AA; Wed,  4 Dec 2002 13:43:03 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa ChangeLog README VERSION devtool.conf
Message-Id: <20021204124303.F22AA764AA@mail.ossp.org>
Date: Wed,  4 Dec 2002 13:43:03 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Dec-2002 13:43:03
  Branch: HEAD                             Handle: 2002120412430300

  Modified files:
    ossp-pkg/sa             ChangeLog README VERSION devtool.conf

  Log:
    upgrade to Autoconf 2.57 and prepare for release

  Summary:
    Revision    Changes     Path
    1.17        +1  -1      ossp-pkg/sa/ChangeLog
    1.13        +1  -1      ossp-pkg/sa/README
    1.10        +1  -1      ossp-pkg/sa/VERSION
    1.16        +1  -1      ossp-pkg/sa/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/sa/ChangeLog
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 ChangeLog
  --- ossp-pkg/sa/ChangeLog	1 Dec 2002 13:09:01 -0000	1.16
  +++ ossp-pkg/sa/ChangeLog	4 Dec 2002 12:43:03 -0000	1.17
  @@ -17,7 +17,7 @@
        all found by splint(1).
        [Ralf S. Engelschall]
   
  -   o Upgraded build environment to GNU autoconf 2.56.
  +   o Upgraded build environment to GNU autoconf 2.57.
        [Ralf S. Engelschall]
   
     Changes between 1.0.0 and 1.0.1 (01-Nov-2002 to 07-Nov-2002)
  Index: ossp-pkg/sa/README
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 README
  --- ossp-pkg/sa/README	7 Nov 2002 10:34:19 -0000	1.12
  +++ ossp-pkg/sa/README	4 Dec 2002 12:43:03 -0000	1.13
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/\__,_|
   
     OSSP sa - Socket Abstraction
  -  Version 1.0.1 (07-Nov-2002)
  +  Version 1.0.2 (04-Dec-2002)
   
     ABSTRACT
   
  Index: ossp-pkg/sa/VERSION
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 VERSION
  --- ossp-pkg/sa/VERSION	7 Nov 2002 10:34:19 -0000	1.9
  +++ ossp-pkg/sa/VERSION	4 Dec 2002 12:43:03 -0000	1.10
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP sa (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP sa, Version 1.0.1 (07-Nov-2002)
  +  This is OSSP sa, Version 1.0.2 (04-Dec-2002)
   
  Index: ossp-pkg/sa/devtool.conf
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 devtool.conf
  --- ossp-pkg/sa/devtool.conf	16 Nov 2002 08:41:10 -0000	1.15
  +++ ossp-pkg/sa/devtool.conf	4 Dec 2002 12:43:03 -0000	1.16
  @@ -5,7 +5,7 @@
   %autogen
       @autogen shtool   1.6.2 "1.6.*" all
       @autogen libtool  1.4.3 "1.4*"
  -    @autogen autoconf 2.56  "2.5[3-9]*"
  +    @autogen autoconf 2.57  "2.5[3-9]*"
   
   %autoclean
       @autoclean shtool

From ossp-cvs-owner@ossp.org  Wed Dec  4 15:00:50 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6A7AB76514; Wed,  4 Dec 2002 15:00:50 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new news.txt ossp-web/pkg/lib index.wml ossp-web/...
Message-Id: <20021204140050.6A7AB76514@mail.ossp.org>
Date: Wed,  4 Dec 2002 15:00:50 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   04-Dec-2002 15:00:50
  Branch: HEAD                             Handle: 2002120414004602

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/sa     index.wml

  Log:
    release OSSP sa 1.0.2

  Summary:
    Revision    Changes     Path
    1.35        +1  -0      ossp-web/new/news.txt
    1.37        +1  -1      ossp-web/pkg/lib/index.wml
    1.10        +2  -2      ossp-web/pkg/lib/sa/index.wml
  ____________________________________________________________________________

  Index: ossp-web/new/news.txt
  ============================================================
  $ cvs diff -u -r1.34 -r1.35 news.txt
  --- ossp-web/new/news.txt	9 Nov 2002 19:03:46 -0000	1.34
  +++ ossp-web/new/news.txt	4 Dec 2002 14:00:46 -0000	1.35
  @@ -1,3 +1,4 @@
  +04-Dec-2002: Released L<OSSP sa> 1.0.2
   09-Nov-2002: Released L<OSSP fsl> 1.0.6
   08-Nov-2002: Released L<GNU pth> 2.0b1
   07-Nov-2002: Released L<GNU pth> 2.0b0
  Index: ossp-web/pkg/lib/index.wml
  ============================================================
  $ cvs diff -u -r1.36 -r1.37 index.wml
  --- ossp-web/pkg/lib/index.wml	9 Nov 2002 19:03:47 -0000	1.36
  +++ ossp-web/pkg/lib/index.wml	4 Dec 2002 14:00:47 -0000	1.37
  @@ -24,7 +24,7 @@
   			done=100 stable=1.0.0 unstable=none>
     <pkg_item name="sa" longname="OSSP sa" type="lib"
               desc="Socket Abstraction"
  -			done=100 stable=1.0.1 unstable=none>
  +			done=100 stable=1.0.2 unstable=none>
     <pkg_item name="fsl" longname="OSSP fsl" type="lib"
               desc="Faked/Flexible Syslog"
   			done=100 stable=1.0.6 unstable=none>
  Index: ossp-web/pkg/lib/sa/index.wml
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 index.wml
  --- ossp-web/pkg/lib/sa/index.wml	7 Nov 2002 12:49:43 -0000	1.9
  +++ ossp-web/pkg/lib/sa/index.wml	4 Dec 2002 14:00:48 -0000	1.10
  @@ -110,7 +110,7 @@
   
   <pkg_status
       name="sa" assign="rse"
  -    stable="1.0.1"    stable_date="07-Nov-2002"
  +    stable="1.0.2"    stable_date="04-Dec-2002"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -121,7 +121,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/sa/
       directory=$(FTP_ROOT_DIR)/pkg/lib/sa/
       files="sa-*.tar.gz" 
  -	stable="sa-1\.0\.1\.tar\.gz" unstable="sa-SNAP.*\.tar.gz">
  +	stable="sa-1\.0\.2\.tar\.gz" unstable="sa-SNAP.*\.tar.gz">
   	
   <h2>Donation</h2>
   

From ossp-cvs-owner@ossp.org  Wed Dec  4 15:08:21 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F2F7D764AE; Wed,  4 Dec 2002 15:08:20 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth devtool.conf
Message-Id: <20021204140820.F2F7D764AE@mail.ossp.org>
Date: Wed,  4 Dec 2002 15:08:20 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Dec-2002 15:08:20
  Branch: HEAD                             Handle: 2002120414082000

  Modified files:
    ossp-pkg/pth            devtool.conf

  Log:
    use 'devtool configure' to make sure the right options are used

  Summary:
    Revision    Changes     Path
    1.12        +2  -2      ossp-pkg/pth/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/pth/devtool.conf
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 devtool.conf
  --- ossp-pkg/pth/devtool.conf	7 Nov 2002 15:54:07 -0000	1.11
  +++ ossp-pkg/pth/devtool.conf	4 Dec 2002 14:08:20 -0000	1.12
  @@ -42,7 +42,7 @@
       rm -f pth-*.tar.gz
       ./devtool autoclean
       ./devtool autogen
  -    ./configure
  +    ./devtool configure
       make clean all
       make distclean
       ./shtool fixperm -v .
  @@ -57,7 +57,7 @@
       rm -f pth-*.tar.gz
       ./devtool autoclean
       ./devtool autogen
  -    ./configure
  +    ./devtool configure
       make clean all
       make distclean
       ./shtool fixperm -v .

From ossp-cvs-owner@ossp.org  Wed Dec  4 15:11:22 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 95B69764AE; Wed,  4 Dec 2002 15:11:22 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog README pth_vers.c
Message-Id: <20021204141122.95B69764AE@mail.ossp.org>
Date: Wed,  4 Dec 2002 15:11:22 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Dec-2002 15:11:22
  Branch: HEAD                             Handle: 2002120414112100

  Modified files:
    ossp-pkg/pth            ChangeLog README pth_vers.c

  Log:
    prepare for release

  Summary:
    Revision    Changes     Path
    1.602       +1  -1      ossp-pkg/pth/ChangeLog
    1.199       +1  -1      ossp-pkg/pth/README
    1.144       +9  -9      ossp-pkg/pth/pth_vers.c
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.601 -r1.602 ChangeLog
  --- ossp-pkg/pth/ChangeLog	29 Nov 2002 17:58:18 -0000	1.601
  +++ ossp-pkg/pth/ChangeLog	4 Dec 2002 14:11:21 -0000	1.602
  @@ -19,7 +19,7 @@
        / __/ | |_| |
     __|_____(_)___/_________________________________________________________
                     
  -  Changes between 2.0b1 and 2.0b2 (08-Nov-2002 to xx-Nov-2002)
  +  Changes between 2.0b1 and 2.0b2 (08-Nov-2002 to 04-Dec-2002)
   
      *) Fixed compiler warnings under Linux: require inclusion of <time.h>
         [Joseph Wayne Norton <norton@alum.mit.edu>]
  Index: ossp-pkg/pth/README
  ============================================================
  $ cvs diff -u -r1.198 -r1.199 README
  --- ossp-pkg/pth/README	8 Nov 2002 20:27:28 -0000	1.198
  +++ ossp-pkg/pth/README	4 Dec 2002 14:11:21 -0000	1.199
  @@ -5,7 +5,7 @@
     |_|    \__|_| |_|                     the impossible.''
   
     GNU Pth - The GNU Portable Threads
  -  Version 2.0b1 (08-Nov-2002)
  +  Version 2.0b2 (04-Dec-2002)
   
     ABSTRACT
   
  Index: ossp-pkg/pth/pth_vers.c
  ============================================================
  $ cvs diff -u -r1.143 -r1.144 pth_vers.c
  --- ossp-pkg/pth/pth_vers.c	8 Nov 2002 20:27:28 -0000	1.143
  +++ ossp-pkg/pth/pth_vers.c	4 Dec 2002 14:11:21 -0000	1.144
  @@ -8,7 +8,7 @@
   #ifndef _PTH_VERS_C_
   #define _PTH_VERS_C_
   
  -#define PTH_INTERNAL_VERSION 0x200101
  +#define PTH_INTERNAL_VERSION 0x200102
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _PTH_VERS_C_AS_HEADER_
   
   pth_internal_version_t pth_internal_version = {
  -    0x200101,
  -    "2.0b1",
  -    "2.0b1 (08-Nov-2002)",
  -    "This is GNU Pth, Version 2.0b1 (08-Nov-2002)",
  -    "GNU Pth 2.0b1 (08-Nov-2002)",
  -    "GNU Pth/2.0b1",
  -    "@(#)GNU Pth 2.0b1 (08-Nov-2002)",
  -    "$Id: GNU Pth 2.0b1 (08-Nov-2002) $"
  +    0x200102,
  +    "2.0b2",
  +    "2.0b2 (04-Dec-2002)",
  +    "This is GNU Pth, Version 2.0b2 (04-Dec-2002)",
  +    "GNU Pth 2.0b2 (04-Dec-2002)",
  +    "GNU Pth/2.0b2",
  +    "@(#)GNU Pth 2.0b2 (04-Dec-2002)",
  +    "$Id: GNU Pth 2.0b2 (04-Dec-2002) $"
   };
   
   #endif /* _PTH_VERS_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Wed Dec  4 15:16:31 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 419B6764EB; Wed,  4 Dec 2002 15:16:31 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth ChangeLog devtool.conf
Message-Id: <20021204141631.419B6764EB@mail.ossp.org>
Date: Wed,  4 Dec 2002 15:16:31 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Dec-2002 15:16:31
  Branch: HEAD                             Handle: 2002120414163000

  Modified files:
    ossp-pkg/pth            ChangeLog devtool.conf

  Log:
    upgrade to Autoconf 2.57

  Summary:
    Revision    Changes     Path
    1.603       +3  -0      ossp-pkg/pth/ChangeLog
    1.13        +1  -1      ossp-pkg/pth/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/pth/ChangeLog
  ============================================================
  $ cvs diff -u -r1.602 -r1.603 ChangeLog
  --- ossp-pkg/pth/ChangeLog	4 Dec 2002 14:11:21 -0000	1.602
  +++ ossp-pkg/pth/ChangeLog	4 Dec 2002 14:16:30 -0000	1.603
  @@ -21,6 +21,9 @@
                     
     Changes between 2.0b1 and 2.0b2 (08-Nov-2002 to 04-Dec-2002)
   
  +   *) Upgraded built environment to GNU Autoconf 2.57.
  +      [Ralf S. Engelschall]
  +
      *) Fixed compiler warnings under Linux: require inclusion of <time.h>
         [Joseph Wayne Norton <norton@alum.mit.edu>]
   
  Index: ossp-pkg/pth/devtool.conf
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 devtool.conf
  --- ossp-pkg/pth/devtool.conf	4 Dec 2002 14:08:20 -0000	1.12
  +++ ossp-pkg/pth/devtool.conf	4 Dec 2002 14:16:30 -0000	1.13
  @@ -5,7 +5,7 @@
   %autogen
       @autogen shtool   1.6.2 "1.6.*" echo version scpp mkdir install fixperm tarball
       @autogen libtool  1.4.3 "1.4*"
  -    @autogen autoconf 2.54  "2.5*"
  +    @autogen autoconf 2.57  "2.5*"
   
   %autoclean
       @autoclean shtool

From ossp-cvs-owner@ossp.org  Wed Dec  4 15:25:44 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D3CDA764EB; Wed,  4 Dec 2002 15:25:43 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new news.txt ossp-web/pkg/lib index.wml ossp-web/...
Message-Id: <20021204142543.D3CDA764EB@mail.ossp.org>
Date: Wed,  4 Dec 2002 15:25:43 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   04-Dec-2002 15:25:43
  Branch: HEAD                             Handle: 2002120414254201

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/pth    index.wml

  Log:
    release GNU pth 2.0b2

  Summary:
    Revision    Changes     Path
    1.36        +1  -0      ossp-web/new/news.txt
    1.38        +1  -1      ossp-web/pkg/lib/index.wml
    1.10        +2  -2      ossp-web/pkg/lib/pth/index.wml
  ____________________________________________________________________________

  Index: ossp-web/new/news.txt
  ============================================================
  $ cvs diff -u -r1.35 -r1.36 news.txt
  --- ossp-web/new/news.txt	4 Dec 2002 14:00:46 -0000	1.35
  +++ ossp-web/new/news.txt	4 Dec 2002 14:25:42 -0000	1.36
  @@ -1,3 +1,4 @@
  +04-Dec-2002: Released L<GNU pth> 2.0b2
   04-Dec-2002: Released L<OSSP sa> 1.0.2
   09-Nov-2002: Released L<OSSP fsl> 1.0.6
   08-Nov-2002: Released L<GNU pth> 2.0b1
  Index: ossp-web/pkg/lib/index.wml
  ============================================================
  $ cvs diff -u -r1.37 -r1.38 index.wml
  --- ossp-web/pkg/lib/index.wml	4 Dec 2002 14:00:47 -0000	1.37
  +++ ossp-web/pkg/lib/index.wml	4 Dec 2002 14:25:42 -0000	1.38
  @@ -15,7 +15,7 @@
   <pkg_list>
     <pkg_item name="pth" longname="GNU pth" type="lib"
               desc="Portable Threads"
  -			done=100 stable=1.4.1 unstable=2.0b1>
  +			done=100 stable=1.4.1 unstable=2.0b2>
     <pkg_item name="mm" longname="OSSP mm" type="lib"
               desc="Shared Memory Allocation"
   			done=100 stable=1.2.1 unstable=none>
  Index: ossp-web/pkg/lib/pth/index.wml
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 index.wml
  --- ossp-web/pkg/lib/pth/index.wml	9 Nov 2002 08:24:41 -0000	1.9
  +++ ossp-web/pkg/lib/pth/index.wml	4 Dec 2002 14:25:43 -0000	1.10
  @@ -62,7 +62,7 @@
   <pkg_status
       name="pth" assign="rse"
       stable="1.4.1" stable_date="27-Jan-2002"
  -    unstable="2.0b1" unstable_date="08-Nov-2002"
  +    unstable="2.0b2" unstable_date="04-Dec-2002"
   	done=100>
   
   <h2>Source</h2>
  @@ -72,7 +72,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/pth/
       directory=$(FTP_ROOT_DIR)/pkg/lib/pth/
       files="pth-*.tar.gz" 
  -	stable="pth-1\.4\.1\.tar\.gz" unstable="pth-2\.0b1\.tar\.gz">
  +	stable="pth-1\.4\.1\.tar\.gz" unstable="pth-2\.0b2\.tar\.gz">
   	
   <h2>Donation</h2>
   

From ossp-cvs-owner@ossp.org  Mon Dec  9 11:42:14 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4E6B776597; Mon,  9 Dec 2002 11:42:14 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool ChangeLog THANKS shtool.pod
Message-Id: <20021209104214.4E6B776597@mail.ossp.org>
Date: Mon,  9 Dec 2002 11:42:14 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Dec-2002 11:42:14
  Branch: HEAD                             Handle: 2002120910421300

  Modified files:
    ossp-pkg/shtool         ChangeLog THANKS shtool.pod

  Log:
    Fixed description of "shtool install -C" operation in manual page

  Summary:
    Revision    Changes     Path
    1.177       +5  -0      ossp-pkg/shtool/ChangeLog
    1.26        +1  -0      ossp-pkg/shtool/THANKS
    1.62        +7  -7      ossp-pkg/shtool/shtool.pod
  ____________________________________________________________________________

  Index: ossp-pkg/shtool/ChangeLog
  ============================================================
  $ cvs diff -u -r1.176 -r1.177 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	2 Nov 2002 12:49:48 -0000	1.176
  +++ ossp-pkg/shtool/ChangeLog	9 Dec 2002 10:42:13 -0000	1.177
  @@ -9,6 +9,11 @@
   
    ChangeLog
   
  + Changes between 1.6.2 and 1.6.3 (02-Nov-2002 to xx-Dec-2002):
  +
  +   *) Fixed description of "shtool install -C" operation in manual page.
  +      [Stefan Seefeld <stefan@fresco.org>]
  +
    Changes between 1.6.1 and 1.6.2 (12-Jul-2002 to 02-Nov-2002):
   
      *) Map "shtool install -d <dir> [...]" internally to "shtool mkdir
  Index: ossp-pkg/shtool/THANKS
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 THANKS
  --- ossp-pkg/shtool/THANKS	2 Nov 2002 12:48:18 -0000	1.25
  +++ ossp-pkg/shtool/THANKS	9 Dec 2002 10:42:13 -0000	1.26
  @@ -29,6 +29,7 @@
     o Christoph Schug          <chris@schug.net>
     o Sascha Schumann          <sascha@schumann.cx>
     o Yitzchak Scott-Thoennes  <sthoenna@efn.org>
  +  o Stefan Seefeld           <stefan@fresco.org>
     o Peter Simons             <simons@cys.de>
     o Evgeny Stambulchik       <fnevgeny@plasma-gate.weizmann.ac.il>
     o Gopal Narayanan          <gopal@fcrao1.phast.umass.edu>
  Index: ossp-pkg/shtool/shtool.pod
  ============================================================
  $ cvs diff -u -r1.61 -r1.62 shtool.pod
  --- ossp-pkg/shtool/shtool.pod	2 Nov 2002 12:46:19 -0000	1.61
  +++ ossp-pkg/shtool/shtool.pod	9 Dec 2002 10:42:13 -0000	1.62
  @@ -425,13 +425,13 @@
   
   Additionally program executables is stripped with strip(1) after
   installation if option ``B<-s>'' is used. Option ``B<-C>'' is like
  -``B<-c>'', except if the destination file already exists and the files
  -are the same, the source is just removed. Option ``B<-e>'' can be used
  -one or multiple times to apply one or more sed(1) commands on-the-fly
  -to the contents of the input I<file> before the output file is created.
  -Option ``B<-v>'' (verbose) can be used to enable the output of extra
  -processing information. Option ``B<-t>'' (trace) can be used to enable
  -the output of the essential shell commands which are executed.
  +``B<-c>'', except if the destination file already exists and is the
  +same as the source file, no file is copied at all. Option ``B<-e>''
  +can be used one or multiple times to apply one or more sed(1) commands
  +on-the-fly to the contents of the input I<file> before the output file
  +is created. Option ``B<-v>'' (verbose) can be used to enable the output
  +of extra processing information. Option ``B<-t>'' (trace) can be used to
  +enable the output of the essential shell commands which are executed.
   
   The trick of this command is that it provides the functionality of BSD
   install(1) in a portable emulated way. For even more compatibility,

From ossp-cvs-owner@ossp.org  Mon Dec 16 13:24:55 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 859C37630A; Mon, 16 Dec 2002 13:24:54 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/al AUTHORS INSTALL Makefile.in NEWS README THANKS...
Message-Id: <20021216122454.859C37630A@mail.ossp.org>
Date: Mon, 16 Dec 2002 13:24:54 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   16-Dec-2002 13:24:54
  Branch: HEAD                             Handle: 2002121612245101

  Added files:
    ossp-pkg/al             AUTHORS INSTALL Makefile.in NEWS README THANKS
                            TODO VERSION aclocal.m4 al-config.in al.banner
                            al.c al.h al.pod al_test.c configure.ac devtool
                            devtool.conf devtool.func ts.c ts.h

  Log:
    initial snapshot for OSSP al

  Summary:
    Revision    Changes     Path
    1.1         +15 -0      ossp-pkg/al/AUTHORS
    1.1         +18 -0      ossp-pkg/al/INSTALL
    1.1         +130 -0     ossp-pkg/al/Makefile.in
    1.1         +15 -0      ossp-pkg/al/NEWS
    1.1         +46 -0      ossp-pkg/al/README
    1.1         +22 -0      ossp-pkg/al/THANKS
    1.1         +17 -0      ossp-pkg/al/TODO
    1.1         +6  -0      ossp-pkg/al/VERSION
    1.1         +229 -0     ossp-pkg/al/aclocal.m4
    1.1         +146 -0     ossp-pkg/al/al-config.in
    1.1         +7  -0      ossp-pkg/al/al.banner
    1.1         +1317 -0    ossp-pkg/al/al.c
    1.1         +89 -0      ossp-pkg/al/al.h
    1.1         +474 -0     ossp-pkg/al/al.pod
    1.1         +313 -0     ossp-pkg/al/al_test.c
    1.1         +55 -0      ossp-pkg/al/configure.ac
    1.1         +47 -0      ossp-pkg/al/devtool
    1.1         +61 -0      ossp-pkg/al/devtool.conf
    1.1         +73 -0      ossp-pkg/al/devtool.func
    1.1         +468 -0     ossp-pkg/al/ts.c
    1.1         +64 -0      ossp-pkg/al/ts.h
  ____________________________________________________________________________

  Index: ossp-pkg/al/AUTHORS
  ============================================================
  $ cvs update -p -r1.1 AUTHORS
     _        ___  ____ ____  ____          _ 
    |_|_ _   / _ \/ ___/ ___||  _ \    __ _| |
    _|_||_| | | | \___ \___ \| |_) |  / _` | |
   |_||_|_| | |_| |___) |__) |  __/  | (_| | |
    |_|_|_|  \___/|____/____/|_|      \__,_|_|
                                     
    OSSP al - Assembly Line
  
    AUTHORS
  
    This is a list of authors who have written
    or edited major parts of the OSSP al sources.
  
    Michael van Elst      <mlelstv@dev.de.cw.net>
  
  Index: ossp-pkg/al/INSTALL
  ============================================================
  $ cvs update -p -r1.1 INSTALL
     _        ___  ____ ____  ____          _ 
    |_|_ _   / _ \/ ___/ ___||  _ \    __ _| |
    _|_||_| | | | \___ \___ \| |_) |  / _` | |
   |_||_|_| | |_| |___) |__) |  __/  | (_| | |
    |_|_|_|  \___/|____/____/|_|      \__,_|_|
                                     
    OSSP al - Assembly Line
  
    INSTALLATION
  
    To install OSSP al into /path/to/al/ perform
    the following steps in your shell:
  
      $ ./configure --prefix=/path/to/al
      $ make
      $ make check
      $ make install [DESTDIR=/path/to/temp/root]
  
  Index: ossp-pkg/al/Makefile.in
  ============================================================
  $ cvs update -p -r1.1 Makefile.in
  ##
  ##  OSSP al - Assembly Line
  ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  ##  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  ##
  ##  This file is part of OSSP al, an abstract datatype of a data buffer
  ##  that can assemble, move and truncate data but avoids actual copying.
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  Makefile.in: make(1) build procedure
  ##
  
  @SET_MAKE@
  
  DESTDIR     =
  prefix      = @prefix@
  exec_prefix = @exec_prefix@
  bindir      = @bindir@
  libdir      = @libdir@
  includedir  = @includedir@
  mandir      = @mandir@
  
  CC          = @CC@
  CPPFLAGS    = @CPPFLAGS@
  CFLAGS      = @DEFS@ @CFLAGS@
  LDFLAGS     = @LDFLAGS@
  LIBS        = @LIBS@
  RM          = rm -f
  RMDIR       = rmdir
  SHTOOL      = ./shtool
  LIBTOOL     = ./libtool
  TRUE        = true
  POD2MAN     = pod2man
  
  LIB_NAME    = libal.la
  LIB_OBJS    = al.lo
  
  TST_NAME    = al_test
  TST_OBJS    = al_test.o ts.o
  
  .SUFFIXES:
  .SUFFIXES: .c .o .lo
  
  all: $(LIB_NAME) $(TST_NAME)
  
  .c.o:
  	$(CC) $(CPPFLAGS) $(CFLAGS) -c $<
  
  .c.lo:
  	@$(LIBTOOL) --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS) -c $<
  
  $(LIB_NAME): $(LIB_OBJS)
  	@$(LIBTOOL) --mode=link $(CC) -o $(LIB_NAME) $(LIB_OBJS) -rpath $(libdir) \
  	    -version-info `$(SHTOOL) version -l txt -d libtool VERSION`
  
  $(TST_NAME): $(TST_OBJS) $(LIB_NAME)
  	@$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $(TST_NAME) $(TST_OBJS) $(LIB_NAME) $(LIBS)
  
  man: al.3
  al.3: al.pod
  	V1=`$(SHTOOL) version -l txt -d short VERSION`; \
  	V2=`$(SHTOOL) version -l txt -d long VERSION`; \
  	D=`$(SHTOOL) version -l txt -d long VERSION | sed -e 's;.*(;;' -e 's;).*;;'`; \
  	$(POD2MAN) --quotes=none \
  	           --section=3 --center="Assembly Line" \
  	           --release="$$D" --date="OSSP al $$V1" al.pod | \
  	sed -e "s;AL_VERSION_STR;$$V2;" >al.3
  
  check: $(TST_NAME)
  	@$(LIBTOOL) --mode=execute ./$(TST_NAME)
  
  install:
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(includedir)
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libdir)
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man3
  	$(SHTOOL) install -c -m 755 al-config $(DESTDIR)$(bindir)/
  	$(SHTOOL) install -c -m 644 al.h $(DESTDIR)$(includedir)/
  	$(SHTOOL) install -c -m 644 al.3 $(DESTDIR)$(mandir)/man3/
  	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libal.la $(DESTDIR)$(libdir)/
  
  uninstall:
  	@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libal.la
  	-$(RM) $(DESTDIR)$(mandir)/man3/al.3
  	-$(RM) $(DESTDIR)$(includedir)/al.h
  	-$(RM) $(DESTDIR)$(bindir)/al-config
  	-$(RMDIR) $(DESTDIR)$(mandir)/man3 >/dev/null 2>&1 || $(TRUE)
  	-$(RMDIR) $(DESTDIR)$(mandir) >/dev/null 2>&1 || $(TRUE)
  	-$(RMDIR) $(DESTDIR)$(libdir) >/dev/null 2>&1 || $(TRUE)
  	-$(RMDIR) $(DESTDIR)$(includedir) >/dev/null 2>&1 || $(TRUE)
  	-$(RMDIR) $(DESTDIR)$(bindir) >/dev/null 2>&1 || $(TRUE)
  	-$(RMDIR) $(DESTDIR)$(prefix) >/dev/null 2>&1 || $(TRUE)
  
  clean:
  	-$(RM) $(LIB_NAME) $(LIB_OBJS)
  	-$(RM) $(TST_NAME) $(TST_OBJS)
  	-$(RM) -r .libs >/dev/null 2>&1 || $(TRUE)
  	-$(RM) *.o *.lo
  
  distclean: clean
  	-$(RM) config.log config.status config.cache
  	-$(RM) Makefile config.h al-config
  	-$(RM) libtool
  
  realclean: distclean
  	-$(RM) al.3
  	-$(RM) configure config.h.in
  	-$(RM) shtool
  	-$(RM) ltmain.sh libtool.m4 config.guess config.sub
  
  Index: ossp-pkg/al/NEWS
  ============================================================
  $ cvs update -p -r1.1 NEWS
     _        ___  ____ ____  ____          _ 
    |_|_ _   / _ \/ ___/ ___||  _ \    __ _| |
    _|_||_| | | | \___ \___ \| |_) |  / _` | |
   |_||_|_| | |_| |___) |__) |  __/  | (_| | |
    |_|_|_|  \___/|____/____/|_|      \__,_|_|
                                     
    OSSP al - Assembly Line
  
    NEWS
  
    This is a list of major changes to OSSP al. For more detailed
    change descriptions, please have a look at the ChangeLog file.
  
    -NONE-
  
  Index: ossp-pkg/al/README
  ============================================================
  $ cvs update -p -r1.1 README
     _        ___  ____ ____  ____          _ 
    |_|_ _   / _ \/ ___/ ___||  _ \    __ _| |
    _|_||_| | | | \___ \___ \| |_) |  / _` | |
   |_||_|_| | |_| |___) |__) |  __/  | (_| | |
    |_|_|_|  \___/|____/____/|_|      \__,_|_|
                                     
    OSSP al - Assembly Line
    Version 
  
    ABSTRACT
  
    COPYRIGHT AND LICENSE
  
    Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
    Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
    Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
    Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  
    This file is part of OSSP al, an abstract datatype of a data buffer
    that can assemble, move and truncate data but avoids actual copying.
  
    Permission to use, copy, modify, and distribute this software for
    any purpose with or without fee is hereby granted, provided that
    the above copyright notice and this permission notice appear in all
    copies.
  
    THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
    WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
    IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
    CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
    USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    SUCH DAMAGE.
  
    HOME AND DOCUMENTATION
  
    The documentation and latest release can be found on
  
    o http://www.ossp.org/pkg/lib/al/
    o  ftp://ftp.ossp.org/pkg/lib/al/
  
  Index: ossp-pkg/al/THANKS
  ============================================================
  $ cvs update -p -r1.1 THANKS
     _        ___  ____ ____  ____          _ 
    |_|_ _   / _ \/ ___/ ___||  _ \    __ _| |
    _|_||_| | | | \___ \___ \| |_) |  / _` | |
   |_||_|_| | |_| |___) |__) |  __/  | (_| | |
    |_|_|_|  \___/|____/____/|_|      \__,_|_|
                                     
    OSSP al - Assembly Line
  
    THANKS
  
    Credit has to be given to the following sponsors for contributing
    hardware, network and manpower resources (in alphabetical order):
  
      o  Cable & Wireless Deutschland GmbH
         <http://www.cw.com/de>
  
    Credit has to be given to the following people who contributed ideas,
    bugfixes, hints, gave platform feedback, etc. (in alphabetical order):
  
      o  Ralf S. Engelschall         <rse@engelschall.com>
      o  Thomas Lotterer             <thomas@lotterer.net>
  
  Index: ossp-pkg/al/TODO
  ============================================================
  $ cvs update -p -r1.1 TODO
     _        ___  ____ ____  ____          _ 
    |_|_ _   / _ \/ ___/ ___||  _ \    __ _| |
    _|_||_| | | | \___ \___ \| |_) |  / _` | |
   |_||_|_| | |_| |___) |__) |  __/  | (_| | |
    |_|_|_|  \___/|____/____/|_|      \__,_|_|
                                     
    OSSP al - Assembly Line
  
    TODO
  
    The following items still have to be done:
  
    -NONE-
  
    CANDO
  
    -NONE-
  Index: ossp-pkg/al/VERSION
  ============================================================
  $ cvs update -p -r1.1 VERSION
  
    VERSION -- Version Information for OSSP al (syntax: Text)
    [automatically generated and maintained by GNU shtool]
  
    This is OSSP al, Version 0.9.0 (16-Dec-2002)
  
  Index: ossp-pkg/al/aclocal.m4
  ============================================================
  $ cvs update -p -r1.1 aclocal.m4
  dnl ##
  dnl ##  al - OSSP Assembly Line
  dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  dnl ##  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  dnl ##
  dnl ##  This file is part of OSSP al, an abstract datatype of a data buffer
  dnl ##  that can assemble, move and truncate data but avoids actual copying.
  dnl ##
  dnl ##  Permission to use, copy, modify, and distribute this software for
  dnl ##  any purpose with or without fee is hereby granted, provided that
  dnl ##  the above copyright notice and this permission notice appear in all
  dnl ##  copies.
  dnl ##
  dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  dnl ##  SUCH DAMAGE.
  dnl ##
  dnl ##  aclocal.m4: GNU Autoconf local macro definitions
  dnl ##
  
  dnl ##
  dnl ##  Check whether compiler option works
  dnl ##
  dnl ##  configure.in:
  dnl ##    AC_COMPILER_OPTION(<name>, <display>, <option>,
  dnl ##                       <action-success>, <action-failure>)
  dnl ##
  
  AC_DEFUN(AC_COMPILER_OPTION,[dnl
  AC_MSG_CHECKING(whether compiler option(s) $2 work)
  AC_CACHE_VAL(ac_cv_compiler_option_$1,[
  SAVE_CFLAGS="$CFLAGS"
  CFLAGS="$CFLAGS $3"
  AC_TRY_COMPILE([],[], ac_cv_compiler_option_$1=yes, ac_cv_compiler_option_$1=no)
  CFLAGS="$SAVE_CFLAGS"
  ])dnl
  if test ".$ac_cv_compiler_option_$1" = .yes; then
      ifelse([$4], , :, [$4])
  else
      ifelse([$5], , :, [$5])
  fi
  AC_MSG_RESULT([$ac_cv_compiler_option_$1])
  ])dnl
  
  dnl ##
  dnl ##  Debugging Support
  dnl ##
  dnl ##  configure.in:
  dnl ##    AC_CHECK_DEBUGGING
  dnl ##
  
  AC_DEFUN(AC_CHECK_DEBUGGING,[dnl
  AC_ARG_ENABLE(debug,dnl
  [  --enable-debug          build for debugging (default=no)],
  [dnl
  if test ".$ac_cv_prog_gcc" = ".yes"; then
      case "$CFLAGS" in
          *-O* ) ;;
             * ) CFLAGS="$CFLAGS -O2" ;;
      esac
      case "$CFLAGS" in
          *-g* ) ;;
             * ) CFLAGS="$CFLAGS -g" ;;
      esac
      case "$CFLAGS" in
          *-pipe* ) ;;
                * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
      esac
      AC_COMPILER_OPTION(defdbg, -DDEBUG, -DDEBUG, CFLAGS="$CFLAGS -DDEBUG")
      CFLAGS="$CFLAGS -pedantic"
      CFLAGS="$CFLAGS -Wall"
      WMORE="-Wshadow -Wpointer-arith -Wcast-align -Winline"
      WMORE="$WMORE -Wmissing-prototypes -Wmissing-declarations -Wnested-externs"
      AC_COMPILER_OPTION(wmore, -W<xxx>, $WMORE, CFLAGS="$CFLAGS $WMORE")
      AC_COMPILER_OPTION(wnolonglong, -Wno-long-long, -Wno-long-long, CFLAGS="$CFLAGS -Wno-long-long")
  else
      case "$CFLAGS" in
          *-g* ) ;;
             * ) CFLAGS="$CFLAGS -g" ;;
      esac
  fi
  msg="enabled"
  ],[
  if test ".$ac_cv_prog_gcc" = ".yes"; then
  case "$CFLAGS" in
      *-pipe* ) ;;
            * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
  esac
  fi
  case "$CFLAGS" in
      *-g* ) CFLAGS=`echo "$CFLAGS" |\
                     sed -e 's/ -g / /g' -e 's/ -g$//' -e 's/^-g //g' -e 's/^-g$//'` ;;
  esac
  case "$CXXFLAGS" in
      *-g* ) CXXFLAGS=`echo "$CXXFLAGS" |\
                       sed -e 's/ -g / /g' -e 's/ -g$//' -e 's/^-g //g' -e 's/^-g$//'` ;;
  esac
  msg=disabled
  ])dnl
  AC_MSG_CHECKING(for compilation debug mode)
  AC_MSG_RESULT([$msg])
  if test ".$msg" = .enabled; then
      enable_shared=no
  fi
  ])
  
  dnl ##
  dnl ##  Check for an external/extension library.
  dnl ##  - is aware of <libname>-config style scripts
  dnl ##  - searches under standard paths include, lib, etc.
  dnl ##  - searches under subareas like .libs, etc.
  dnl ##
  dnl ##  configure.in:
  dnl ##      AC_CHECK_EXTLIB(<realname>, <libname>, <func>, <header>,
  dnl ##                      [<success-action> [, <fail-action>]])
  dnl ##  Makefile.in:
  dnl ##      CFLAGS  = @CFLAGS@
  dnl ##      LDFLAGS = @LDFLAGS@
  dnl ##      LIBS    = @LIBS@
  dnl ##  shell:
  dnl ##      $ ./configure --with-<libname>[=DIR]
  dnl ##
  
  AC_DEFUN(AC_CHECK_EXTLIB,[dnl
  AC_ARG_WITH($2, [dnl
  [  --with-]m4_substr([$2[[=DIR]]                     ], 0, 19)[build with external $1 library (default=no)]], [dnl
      if test ".$with_$2" = .yes; then
          #   via config script in PATH
          $2_version=`($2-config --version) 2>/dev/null`
          if test ".$$2_version" != .; then
              CPPFLAGS="$CPPFLAGS `$2-config --cflags`"
              CFLAGS="$CFLAGS `$2-config --cflags`"
              LDFLAGS="$LDFLAGS `$2-config --ldflags`"
          fi
      else
          if test -d "$with_$2"; then
              found=0
              #   via config script
              for dir in $with_$2/bin $with_$2; do
                  if test -f "$dir/$2-config" && test ! -f "$dir/$2-config.in"; then
                      $2_version=`($dir/$2-config --version) 2>/dev/null`
                      if test ".$$2_version" != .; then
                          CPPFLAGS="$CPPFLAGS `$dir/$2-config --cflags`"
                          CFLAGS="$CFLAGS `$dir/$2-config --cflags`"
                          LDFLAGS="$LDFLAGS `$dir/$2-config --ldflags`"
                          found=1
                          break
                      fi
                  fi
              done
              #   in standard sub-areas
              if test ".$found" = .0; then
                  for dir in $with_$2/include/$2 $with_$2/include $with_$2; do
                      if test -f "$dir/$4"; then
                          CPPFLAGS="$CPPFLAGS -I$dir"
                          CFLAGS="$CFLAGS -I$dir"
                          found=1
                          break
                      fi
                  done
                  for dir in $with_$2/lib/$2 $with_$2/lib $with_$2; do
                      if test -f "$dir/lib$2.la" && test -d "$dir/.libs"; then
                          LDFLAGS="$LDFLAGS -L$dir -L$dir/.libs"
                          found=1
                          break
                      elif test -f "$dir/lib$2.a" || test -f "$dir/lib$2.so"; then
                          LDFLAGS="$LDFLAGS -L$dir"
                          found=1
                          break
                      fi
                  done
              fi
              #   in any sub-area
              if test ".$found" = .0; then
  changequote(, )dnl
                  for file in x `find $with_$2 -name "$4" -type f -print`; do
                      test .$file = .x && continue
                      dir=`echo $file | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;'`
                      CPPFLAGS="$CPPFLAGS -I$dir"
                      CFLAGS="$CFLAGS -I$dir"
                  done
                  for file in x `find $with_$2 -name "lib$2.[aso]" -type f -print`; do
                      test .$file = .x && continue
                      dir=`echo $file | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;'`
                      LDFLAGS="$LDFLAGS -L$dir"
                  done
  changequote([, ])dnl
              fi
          fi
      fi
      AC_HAVE_HEADERS($4)
      AC_CHECK_LIB($2, $3)
      with_$2=yes
      ac_var="ac_cv_header_`echo $4 | sed 'y%./+-%__p_%'`"
      eval "ac_val=\$$ac_var"
      if test ".$ac_val" != .yes; then
          with_$2=no
      fi
      if test ".$ac_cv_lib_$2_$3" != .yes; then
          with_$2=no
      fi
      if test ".$with_$2" = .no; then
          AC_ERROR([Unable to find $1 library])
      fi
      ], [dnl
  if test ".$with_$2" = .; then
      with_$2=no
  fi
      ])dnl
  AC_MSG_CHECKING(whether to build against external $1 library)
  if test ".$with_$2" = .yes; then
      ifelse([$5], , :, [$5])
  else
      ifelse([$6], , :, [$6])
  fi
  AC_MSG_RESULT([$with_$2])
  ])dnl
  
  Index: ossp-pkg/al/al-config.in
  ============================================================
  $ cvs update -p -r1.1 al-config.in
  #!/bin/sh
  ##
  ##  OSSP al - Assembly Line
  ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  ##  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  ##
  ##  This file is part of OSSP al, an abstract datatype of a data buffer
  ##  that can assemble, move and truncate data but avoids actual copying.
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  al-config.in: AL library build utility
  ##
  
  DIFS=' 
  '
  
  prefix="@prefix@"
  exec_prefix="@exec_prefix@"
  
  al_prefix="$prefix"
  al_exec_prefix="$exec_prefix"
  al_bindir="@bindir@"
  al_libdir="@libdir@"
  al_includedir="@includedir@"
  al_mandir="@mandir@"
  al_datadir="@datadir@"
  al_acdir="@datadir@/aclocal"
  al_cflags="@CFLAGS@"
  al_ldflags="@LDFLAGS@"
  al_libs="@LIBS@"
  al_version="@AL_VERSION_STR@"
  
  help=no
  version=no
  
  usage="al-config"
  usage="$usage [--help] [--version] [--all]"
  usage="$usage [--prefix] [--exec-prefix] [--bindir] [--libdir] [--includedir] [--mandir] [--datadir] [--acdir]"
  usage="$usage [--cflags] [--ldflags] [--libs]"
  if [ $# -eq 0 ]; then
      echo "al-config:Error: Invalid option" 1>&2
      echo "al-config:Usage: $usage" 1>&2
      exit 1
  fi
  output=''
  output_extra=''
  all=no
  prev=''
  OIFS="$IFS" IFS="$DIFS"
  for option
  do
      if [ ".$prev" != . ]; then
          eval "$prev=\$option"
          prev=''
          continue
      fi
      case "$option" in
          -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
             *) optarg='' ;;
      esac
      case "$option" in
          --help|-h)
              echo "Usage: $usage"
              exit 0
              ;;
          --version|-v)
              echo "OSSP al $al_version"
              exit 0
              ;;
          --all)
              all=yes
              ;;
          --prefix)
              output="$output $al_prefix"
              ;;
          --exec-prefix)
              output="$output $al_exec_prefix"
              ;;
          --bindir)
              output="$output $al_bindir"
              ;;
          --libdir)
              output="$output $al_libdir"
              ;;
          --includedir)
              output="$output $al_includedir"
              ;;
          --mandir)
              output="$output $al_mandir"
              ;;
          --datadir)
              output="$output $al_datadir"
              ;;
          --acdir)
              output="$output $al_acdir"
              ;;
          --cflags)
              output="$output -I$al_includedir"
              output_extra="$output_extra $al_cflags"
              ;;
          --ldflags)
              output="$output -L$al_libdir"
              output_extra="$output_extra $al_ldflags"
              ;;
          --libs)
              output="$output -lal"
              output_extra="$output_extra $al_libs"
              ;;
          * )
              echo "al-config:Error: Invalid option" 1>&2
              echo "al-config:Usage: $usage" 1>&2
              exit 1;
              ;;
      esac
  done
  IFS="$OIFS"
  if [ ".$prev" != . ]; then
      echo "al-config:Error: missing argument to --`echo $prev | sed 's/_/-/g'`" 1>&2
      exit 1
  fi
  if [ ".$output" != . ]; then
      if [ ".$all" = .yes ]; then
          output="$output $output_extra"
      fi
      echo $output
  fi
  
  Index: ossp-pkg/al/al.banner
  ============================================================
  $ cvs update -p -r1.1 al.banner
     _        ___  ____ ____  ____          _ 
    |_|_ _   / _ \/ ___/ ___||  _ \    __ _| |
    _|_||_| | | | \___ \___ \| |_) |  / _` | |
   |_||_|_| | |_| |___) |__) |  __/  | (_| | |
    |_|_|_|  \___/|____/____/|_|      \__,_|_|
                                     
    OSSP al - Assembly Line
  Index: ossp-pkg/al/al.c
  ============================================================
  $ cvs update -p -r1.1 al.c
  /*
  **  OSSP al -- Assembly Line
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  **
  **  This file is part of OSSP al, an abstract datatype of a data buffer
  **  that can assemble, move and truncate data but avoids actual copying.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  al.c: assembly line library implementation
  */
  
  #include <stddef.h>
  #include <stdlib.h>
  #include <string.h>
  #ifdef TEST
  #include <stdio.h>
  #endif
  
  #include "list.h"
  
  #include "al.h"
  
  /* unique library identifier */
  const char al_id[] = "OSSP al";
  
  /* support for OSSP ex based exception throwing */
  #ifdef WITH_EX
  #include "ex.h"
  #define AL_RC(rv) \
      (  (rv) != AL_OK && (ex_catching && !ex_shielding) \
       ? (ex_throw(al_id, NULL, (rv)), (rv)) : (rv) )
  #else
  #define AL_RC(rv) (rv)
  #endif /* WITH_EX */
  
  struct al_buffer_st;
  typedef struct al_buffer_st al_buffer_t;
  
  typedef struct {
      void           *(*malloc)(size_t); /* malloc(3) style function (for al_chunk_t) */
      void            (*free)(void *);   /* free(3)   style function (for al_chunk_t) */
      void           *(*balloc)(size_t); /* malloc(3) style function (for al_buffer_t) */
      void            (*bfree)(void *);  /* free(3)   style function (for al_buffer_t) */
      size_t            new_buffersize;  /* default size for memory underlying al_buffer_t */
      int               max_freechunks;  /* maximum number of cached al_chunk_t objects */
  } al_memops_t;
  
  struct al_st {
      LIST(al_chunk_t)  chunks;          /* list header for al_chunk_t objects */
      size_t            bytes;           /* total cached number of bytes in chunk */
      al_memops_t       m;               /* assembly line memory operations (see above) */
  };
  
  struct al_chunk_st {
      NODE(al_chunk_t)  chunks;          /* list node for al_chunk_t object chaining */
      al_buffer_t      *buf;             /* (non-exlusively) referenced buffer object */
      size_t            begin;           /* offset into buf->mem where data starts */
      size_t            end;             /* offset into buf->mem where data ends */
      al_label_t        label;           /* tag data with a label, chunks with distinct labels are not coalesced */
  };
  
  struct al_buffer_st {
      char             *mem;             /* reference to underlying chunk of data */
      size_t            size;            /* size of underlying chunk of data */
      int               usecount;        /* reference count (from al_chunk_t) */
      void            (*freemem)(char *p, size_t n, void *u); /* callback function to reclaim memory when it is no longer referenced */
      void             *userdata;          /* arbitrary pointer to pass context data to the callback function */
  };
  
  struct al_tx_st {
      al_td_t           dir;             /* traversal direction */
      al_chunk_t       *cur;             /* current chunk during traveral steps */
      size_t            skip;            /* number of bytes to skip for traversal */
      size_t            togo;            /* number of bytes left for traversal */
      al_label_t        label;           /* label filter or NULL */
      al_chunk_t        view;            /* synthetic chunk for returning during traversal steps */
  };
  
  /* number of bytes described by a chunk */
  #define AL_CHUNK_LEN(alc) \
      ((alc)->end - (alc)->begin)
  
  /* memory pointer into a chunk, offset must be less than length */
  #define AL_CHUNK_PTR(alc, off) \
      ((alc)->buf->mem + (alc)->begin + (off))
  
  /* number of bytes of a span that are stored in a chunk */
  #define AL_CHUNK_SPAN(alc, off, n) \
      ((n) > (AL_CHUNK_LEN(alc) - (off)) ? \
      (AL_CHUNK_LEN(alc) - (off)) : (n))
  
  /* return chunk label */
  #define AL_CHUNK_LABEL(alc) \
      ((alc)->label)
  
  /* check wether labels match */
  #define AL_SAME_LABEL(alc,label) \
      ((label) == NULL || AL_CHUNK_LABEL(alc) == (label))
  
  /*
   * number of bytes a chunk can be grown to the end
   * we must not grow a chunk in a shared buffer since
   * we do not track other chunks sharing the buffer
   */
  #define AL_CHUNK_RESERVE(alc,label) \
      (  (alc) != NULL \
       ? (  (alc)->buf->usecount > 1 || !AL_SAME_LABEL(alc,label) \
          ? 0 \
          : (alc)->buf->size - (alc)->end) \
       : 0)
  
  /* grow chunk to the end */
  #define AL_RESIZE(al, alc, n) \
      do { (alc)->end += n; (al)->bytes += (n); } while (0)
  
  /*
   * number of bytes a chunk can be grown to the beginning
   * we must not grow a chunk in a shared buffer since
   * we do not track other chunks sharing the buffer
   *
   * empty chunks can be aligned with end
   */
  #define AL_CHUNK_PRESERVE(alc,label) \
      ( (alc) != NULL \
       ? (  (alc)->buf->usecount > 1 || !AL_SAME_LABEL(alc,label) \
          ? 0 \
          : (alc)->end <= (alc)->begin ? \
            (alc)->buf->size \
            : (alc)->begin) \
       : 0)
  
  /*
   * grow chunk to the beginning
   *
   * empty chunks can be aligned with end
   */
  #define AL_PRESIZE(al, alc, n) \
      do { \
          if ((alc)->end <= (alc)->begin) \
              (alc)->end = (alc)->begin = (alc)->buf->size; \
          (alc)->begin -= n; (al)->bytes += (n); \
      } while (0)
  
  /*
   * callback to release buffer memory allocated by the library
   */
  static
  void freemem(char *p, size_t n, void *u)
  {
      void (*f)(void *) = (void (*)(void *))u;
      f(p);
  }
  
  /*
   * allocate backing store and its control structure from heap
   *
   * can be freed when usecount drops to zero
   */
  static al_rc_t
  new_buffer(al_t *al, al_buffer_t **bufp)
  {
      size_t n = al->m.new_buffersize;
      al_buffer_t *buf;
  
      if ((buf = (al_buffer_t *)(al->m.malloc)(sizeof(al_buffer_t))) == NULL)
          return AL_ERR_MEM;
  
      if ((buf->mem = (al->m.balloc)(n)) == NULL) {
          (al->m.free)(buf);
          return AL_ERR_MEM;
      }
  
      buf->freemem  = freemem;
      buf->userdata = (void *)al->m.bfree;
      buf->size     = n;
      buf->usecount = 0;
  
      *bufp = buf;
      return AL_OK;
  }
  
  static al_rc_t
  dispose_buffer(al_t *al, al_buffer_t *buf)
  {
      /* must not happen */
      if (buf->usecount != 0)
          return AL_ERR_INT;
  
      if (buf->freemem)
          (buf->freemem)(buf->mem, buf->size, buf->userdata);
  
      (al->m.free)(buf);
      return AL_OK;
  }
  
  /*
   * allocate only control structure for backing store from heap
   * and attach to existing memory
   * only the control structure will be freed later
   */
  static
  al_rc_t make_buffer(al_t *al, char *p, size_t n, void (*freemem_cb)(char *, size_t, void *), void *u, al_buffer_t **bufp)
  {
      al_buffer_t *buf;
  
      if ((buf = (al_buffer_t *)(al->m.malloc)(sizeof(al_buffer_t))) == NULL)
          return AL_ERR_MEM;
  
      buf->mem      = p;
  
      buf->freemem  = freemem_cb;
      buf->userdata = u;
      buf->size     = n;
      buf->usecount = 0;
  
      *bufp = buf;
      return AL_OK;
  }
  
  /*
   * allocate chunks from heap and attach to backing store
   * keep some freed chunks in a freelist to avoid expensive malloc()
   * and excessive fragmentation
   * maintain usage count of backing store
   * free backing store when no longer in use, this also includes
   * the case where new_chunk fails and the buffer has no other
   * users
   */
  static struct {
      LIST(al_chunk_t) chunks;
  } alc_freelist;
  static int alc_freecount = 0;
  
  static al_rc_t
  new_chunk(al_t *al, al_buffer_t *buf, al_label_t label, al_chunk_t **alcp)
  {
      al_chunk_t *alc;
  
      if (ISEMPTY(&alc_freelist, chunks)) {
          if ((alc = (al_chunk_t *)(al->m.malloc)(sizeof(al_chunk_t))) == NULL) {
              if (buf->usecount == 0)
                  dispose_buffer(al,buf);
              return AL_ERR_MEM;
          }
      } else {
          /* thl: FIXME i would suggest using REMTAIL() here because dispose_chunk
           *            puts the latest disposed chunks at the end of the list and
           *            those latest data should have a closer approximation to the
           *            CPU in terms of internal cache, external cache, RAM and VM
           */
          REMHEAD(&alc_freelist, chunks, alc);
          --alc_freecount;
      }
  
      NODEINIT(alc, chunks);
      alc->buf   = buf;
      alc->begin = 0;
      alc->end   = 0;
      alc->label = label;
  
      buf->usecount++;
  
      *alcp = alc;
      return AL_OK;
  }
  
  static al_rc_t
  split_chunk(al_t *al, al_chunk_t *orig, size_t off, al_chunk_t **alcp)
  {
      al_rc_t rc;
      al_chunk_t *alc;
      size_t len = AL_CHUNK_LEN(orig);
  
      if (off > len)
          return AL_ERR_ARG;
  
      rc = new_chunk(al, orig->buf, orig->label, &alc);
      if (rc != AL_OK)
          return rc;
  
      alc->begin  = orig->begin;
      alc->end    = orig->begin+off;
      orig->begin = alc->end;
  
      *alcp = alc;
      return AL_OK;
  }
  
  static void
  dispose_chunk(al_t *al, al_chunk_t *alc)
  {
      alc->buf->usecount--;
      if (alc->buf->usecount == 0)
          dispose_buffer(al,alc->buf);
      alc->buf = NULL;
      alc->label = NULL;
  
      /* stop freelist from growing infinitely */
      if (alc_freecount >= al->m.max_freechunks)
          (al->m.free)(alc);
      else {
          ADDTAIL(&alc_freelist, chunks, alc);
          alc_freecount++;
      }
  }
  
  /*
   *  find chunk that represents a particular offset
   *  a reference to the chunk is stored in *alcp
   *  the relative offset into the chunk is stored in *skipp
   *  return AL_OK and *alcp == NULL if positioned exactly to end of list
   *  return AL_ERR_EOF when no such chunk can be found
   */
  static al_rc_t
  al_seek(al_t *al, size_t off, al_chunk_t **alcp, size_t *skipp)
  {
      al_chunk_t *cur;
      size_t pos, end;
      size_t chunksize;
  
      if ((al->bytes / 2) >= off) { /* FIXME poor man's heuristic */
          /* forward search */
          pos = 0;
          FOREACH(al,chunks,cur) {
              chunksize = AL_CHUNK_LEN(cur);
              end = pos+chunksize;
              if (pos <= off && off < end) {
                  *alcp  = cur;
                  *skipp = off - pos;
                  return AL_OK;
              }
              if (end > off)
                  break;
              pos = end;
          }
          /* seek to EOF position is ok */
          if (pos == off) {
              *alcp  = NULL;
              *skipp = 0;
              return AL_OK;
          }
      } else {
          /* reverse search */
          pos  = al->bytes;
          /* seek to EOF position is ok */
          if (pos == off) {
              *alcp  = NULL;
              *skipp = 0;
              return AL_OK;
          }
          FOREACHR(al,chunks,cur) {
              chunksize = AL_CHUNK_LEN(cur);
              end  = pos;
              pos -= chunksize;
              if (pos <= off && off < end) {
                  *alcp  = cur;
                  *skipp = off - pos;
                  return AL_OK;
              }
              if (pos < off)
                  break;
          }
      }
  
      return AL_ERR_EOF;
  }
  
  #ifdef TEST
  static void
  dump(al_t *al)
  {
      al_chunk_t *cur;
      size_t total;
  
      printf("AL: %p\n", al);
      total = 0;
      FOREACH(al,chunks,cur) {
          printf(" C: %p [%p] (%d @ %p + %d < %d (use=%d))\n",
              cur,
              cur->label,
              cur->buf->size,cur->buf->mem,
              cur->begin,cur->end,
              cur->buf->usecount);
          total += AL_CHUNK_LEN(cur);
      }
      printf("size = %d == %d\n",al->bytes,total);
      printf("--\n\n");
  }
  #endif
  
  /****************************************************************************/
  
  /*
   * allocate an empty assembly line
   * dispose all chunks and all allocated backing store
   */
  al_rc_t
  al_create(al_t **alp)
  {
      al_t *al;
  
      /* argument sanity check(s) */
      if (alp == NULL)
          return AL_RC(AL_ERR_ARG);
  
      /* allocate and initialize new assembly line object */
      /* XXX - what malloc ? */
      if ((al = (al_t *)malloc(sizeof(al_t))) == NULL)
          return AL_RC(AL_ERR_MEM);
  
      LISTINIT(al,chunks);
      al->bytes = 0;
  
      /* memory policy */
      al->m.malloc = malloc;    /* structure allocation */
      al->m.free   = free;
      al->m.balloc = malloc;    /* buffer allocation */
      al->m.bfree  = free;
  #ifdef TEST
      al->m.new_buffersize = 42;
  #else
      al->m.new_buffersize = 4096;
  #endif
      al->m.max_freechunks = 500;
  
      /* pass object to caller */
      *alp = al;
  
      return AL_OK;
  }
  
  al_rc_t
  al_destroy(al_t *al)
  {
      al_chunk_t *cur, *pred;
  
      /* argument sanity check(s) */
      if (al == NULL)
          return AL_RC(AL_ERR_ARG);
  
      /* free chunks and backing store */
      FOREACHD(al,chunks,cur,pred) {
          REMOVE(al,chunks,cur);
          dispose_chunk(al,cur);
      }
  
      /* free object itself */
      /* XXX - which free() ? */
      free(al);
  
      return AL_OK;
  }
  
  /*
   * copy bytes into buffer, FIFO
   *
   * stops copy operation when a new buffer cannot be created
   * but leaves data structure consistent
   */
  al_rc_t
  al_append_bytes(al_t *al, const char *src, size_t n, al_label_t label)
  {
      al_rc_t rc;
      al_chunk_t *cur;
      al_buffer_t *buf;
      size_t res, step;
      char *dst;
  
      /* argument sanity check(s) */
      if (al == NULL || src == NULL)
          return AL_RC(AL_ERR_ARG);
  
      cur = TAIL(al,chunks);
      res = AL_CHUNK_RESERVE(cur,label);
  
      while (n > 0) {
          if (res == 0) {
              rc = new_buffer(al, &buf);
              if (rc != AL_OK)
                  return AL_RC(rc);
              rc = new_chunk(al,buf,label,&cur);
              if (rc != AL_OK)
                  return AL_RC(rc);
              res = AL_CHUNK_RESERVE(cur,label);
              ADDTAIL(al, chunks, cur);
          }
          step = n;
          if (step > res)
              step = res;
  
          dst = AL_CHUNK_PTR(cur, AL_CHUNK_LEN(cur));
          memcpy(dst, src, step);
  
          src += step;
          AL_RESIZE(al, cur, step);
          n   -= step;
          res = AL_CHUNK_RESERVE(cur,label);
      }
  
      return AL_OK;
  }
  
  /*
   * copy bytes into buffer, LIFO
   *
   * stops copy operation when a new buffer cannot be created
   * but leaves data structure consistent
   */
  al_rc_t
  al_prepend_bytes(al_t *al, const char *src, size_t n, al_label_t label)
  {
      al_rc_t rc;
      al_chunk_t *cur;
      al_buffer_t *buf;
      size_t res, step;
      char *dst;
  
      /* argument sanity check(s) */
      if (al == NULL || src == NULL)
          return AL_RC(AL_ERR_ARG);
  
      cur = HEAD(al,chunks);
      res = AL_CHUNK_PRESERVE(cur,label);
  
      src += n;
  
      while (n > 0) {
          if (res == 0) {
              rc = new_buffer(al, &buf);
              if (rc != AL_OK)
                  return AL_RC(rc);
              rc = new_chunk(al,buf,label,&cur);
              if (rc != AL_OK)
                  return AL_RC(rc);
              res = AL_CHUNK_PRESERVE(cur,label);
              ADDHEAD(al, chunks, cur);
          }
          step = n;
          if (step > res)
              step = res;
  
          src -= step;
          AL_PRESIZE(al, cur, step);
          n   -= step;
          res = AL_CHUNK_PRESERVE(cur,label);
  
          dst = AL_CHUNK_PTR(cur, 0);
          memcpy(dst, src, step);
      }
  
      return AL_OK;
  }
  
  /*
   * append a caller supplied buffer
   *
   * buffer must exist until list is destroyed
   * XXX - buffer can have multiple refs caused by splice operations
   * XXX - some list operations modify the buffer
   *
   */
  al_rc_t al_attach_buffer(al_t *al, char *p, size_t n, al_label_t label,
                           void (*freemem_cb)(char *, size_t, void *), void *u)
  {
      al_rc_t rc;
      al_buffer_t *buf;
      al_chunk_t  *cur;
  
      /* argument sanity check(s) */
      if (al == NULL || p == NULL || n <= 0)
          return AL_RC(AL_ERR_ARG);
  
      rc = make_buffer(al, p, n, freemem_cb, u, &buf);
      if (rc != AL_OK)
          return AL_RC(rc);
      rc = new_chunk(al,buf,label,&cur);
      if (rc != AL_OK)
          return AL_RC(rc);
      ADDTAIL(al, chunks, cur);
  
      /* validate data in buffer */
      AL_RESIZE(al, cur, n);
  
      return AL_OK;
  }
  
  /*
   * this is the central function to manipulate assembly line
   *
   * cut arbitrary spans from list into a destination buffer (or drop it)
   * insert (destructive move) content from another list into the cut
   *
   * this is analog to perls splice function, except that
   * -> the output is not stored in the target buffer but is appended
   * -> the replacement data is moved and not copied.
   *
   */
  al_rc_t
  al_splice(al_t *al, size_t off, size_t n, al_t *nal, al_t *tal)
  {
      al_rc_t rc;
      al_chunk_t *cur, *start, *end, *next, *ins, *splitbuf;
      size_t pos, skip, len, step;
      int doinsert;
  
      /* argument sanity check(s) */
      if (al == NULL)
          return AL_RC(AL_ERR_ARG);
  
      /* optimization: treat an empty list as no insertion at all */
      doinsert = (nal != NULL) && !ISEMPTY(nal,chunks);
  
      /*
       * seek to beginning, return EOF when seek position does not exist
       * EOD must be a valid seek position so that we can append data
       */
      rc = al_seek(al, off, &cur, &skip);
      if (rc != AL_OK)
          return AL_RC(rc);
  
      /*
       * remember insertion point
       *
       * caveat: if the first chunk is removed from input the insertion
       *         point shifts to the next chunk (or EOD -> NULL pointer)
       */
      ins = cur;
  
      /*
       * the inseration point is either behind the list or
       * within the current chunk
       *
       * if it is behind the list:
       * -> insert operation switches to append mode
       *
       * if the insertion point is at the beginning of the current chunk:
       * -> insertion point moves later if the chunk is removed
       *
       * if the inseration point is in the middle of the current chunk:
       * -> chunk is split into two so that the insertion
       *    point is at the beginning of the second part
       *
       * insertion point cannot be at EOD of the chunk
       *
       * splitting at this point preserves all data in case the
       * allocation of the split buffer fails
       */
      if (doinsert) {
          if (ins != NULL && skip > 0) {
              rc = split_chunk(al, ins, skip, &splitbuf);
              if (rc != AL_OK)
                  return AL_RC(rc);
              INSERT(al,chunks,ins,splitbuf);
              skip = 0;
          }
      }
  
      /*
       * as long as there is data to move
       */
      pos = off;
      while (n > 0 && cur != NULL) {
          next = NEXT(cur, chunks);
          len  = AL_CHUNK_LEN(cur);
  
          /*
           * check if partial chunk was selected
           * if skip > 0 we have to preserve bytes at the beginning
           * if skip == 0 && n < len-skip we have to preserve bytes at the end
           */
          if (skip > 0 || n < len - skip) {
  
              /* compute number of bytes to process */
              step = AL_CHUNK_SPAN(cur, skip, n);
  
              /* copy data to target */
              if (tal != NULL) {
                  /*
                   * XXX - this operation can fail
                   */
                  size_t before = tal->bytes;
  
                  rc = al_append_bytes(tal, AL_CHUNK_PTR(cur, skip),
                                       step, AL_CHUNK_LABEL(cur));
                  if (rc != AL_OK)
                      /* correct step size to actual size */
                      step = tal->bytes - before;
  
              } else
                  rc = AL_OK;
  
              /*
               * cut span from src chunk
               * if skip == 0, simply shrink the chunk from the beginning
               * if skip > 0, compute number of bytes to preserve,
               *              align buffer and shrink chunk from the end
               */
              if (skip == 0)
                  AL_PRESIZE(al, cur, -step);
              else {
                  /* align trailing bytes */
                  if (len > (skip+step)) {
                      memmove(
                          AL_CHUNK_PTR(cur, skip),
                          AL_CHUNK_PTR(cur, skip+step),
                          len - (skip+step)
                      );
                  }
                  AL_RESIZE(al, cur, -step);
              }
  
              /*
               * bail out from failed al_append_bytes operation above
               *
               */
              if (rc != AL_OK)
                  return AL_RC(rc);
          }
          else {
              /*
               * the whole chunk has to be moved,
               *
               * scan ahead for more such chunks to unlink
               * and relink a whole chain in a single operation
               *
               * move the chunks to the target chain
               * manual accounting for total size
               */
  
              /*
               * when the insertion chunk is removed, we have to adjust
               * the insertion point
               *
               * if the insertion chunk was the last chunk we get a NULL
               * next pointer and the insertion method switches to append
               * mode
               */
  
              step  = len;
              start = cur;
              end   = cur;
  
              if (cur == ins)
                  ins = next;
  
              while (next && step + (len = AL_CHUNK_LEN(next)) <= n) {
                  step += len;
                  end  = next;
                  next = NEXT(next, chunks);
                  if (end == ins)
                      ins = next;
              }
              REMOVE2(al, chunks, start, end);
  
              al->bytes -= step;
              if (tal == NULL) {
                  do {
                      cur = start;
                      start = NEXT(cur, chunks);
                      dispose_chunk(al, cur);
                  } while (cur != end);
              } else {
                  ADDTAIL2(tal, chunks, start, end);
                  tal->bytes += step;
              }
          }
          n   -= step;
          pos += step;
          cur  = next;
          skip = 0;
      }
  
      /*
       * now splice in replacement chunks
       */
      if (doinsert) {
          if (ins != NULL) {
              /*
               * complex case where list is inserted
               *
               * the original list has already been modified so
               * that we can simply insert between two chunks
               */
              INSERTLIST(al,chunks,ins,nal);
          } else {
              /*
               * simple case where list end is 'replaced'
               */
              APPENDLIST(al,chunks,nal);
          }
  
          al->bytes += nal->bytes;
          nal->bytes = 0;
  
      }
  
      return AL_OK;
  }
  
  /*
   *
   */
  al_rc_t
  al_setlabel(al_t *al, size_t off, size_t n,
              al_label_t oldlabel, al_label_t newlabel)
  {
      al_rc_t rc;
      al_chunk_t *cur, *splitbuf;
      size_t skip, len;
  
      /* argument sanity check(s) */
      if (al == NULL)
          return AL_RC(AL_ERR_ARG);
  
      /*
       * seek to beginning, return EOF when seek position does not exist
       * EOD must be a valid seek position so that we can append data
       */
      rc = al_seek(al, off, &cur, &skip);
      if (rc != AL_OK)
          return AL_RC(rc);
  
      /*
       * seek to EOD, nothing to label
       */
      if (cur == NULL)
          return AL_OK;
  
      /*
       * if first chunk doesn't need relabeling
       * then skip it, adjust seek size
       *
       * else if offset is not at chunk start
       * then split chunk at offset, continue
       * with second half
       */
      if (!AL_SAME_LABEL(cur, oldlabel) ||
          AL_SAME_LABEL(cur, newlabel)) {
          len = AL_CHUNK_LEN(cur) - skip;
          n = n < len ? 0 : n - len;
          cur = NEXT(cur, chunks);
      } else if (skip > 0) {
          rc = split_chunk(al, cur, skip, &splitbuf);
          if (rc != AL_OK)
              return AL_RC(rc);
          INSERT(al,chunks,cur,splitbuf);
      }
  
      /*
       * for all remaining chunks and bytes
       *
       * if chunk doesn't need relabeling
       * then skip it, adjust size
       *
       * else if chunk isn't covered in total
       * then split chunk at end offset and
       * process first half
       */
      while (n > 0 && cur != NULL) {
          len = AL_CHUNK_LEN(cur);
          if (!AL_SAME_LABEL(cur, oldlabel) ||
              AL_SAME_LABEL(cur, newlabel)) {
              n = n < len ? 0 : n - len;
          } else {
              if (n < len) {
                  /*
                   * split last chunk at end offset
                   */
                  rc = split_chunk(al, cur, n, &splitbuf);
                  if (rc != AL_OK)
                      return AL_RC(rc);
                  INSERT(al,chunks,cur,splitbuf);
                  cur = splitbuf;
                  len = AL_CHUNK_LEN(cur);
              }
              AL_CHUNK_LABEL(cur) = newlabel;
              n   -= len;
          }
          cur  = NEXT(cur, chunks);
      }
  
      return AL_OK;
  }
  
  /*
   * assembly line traversal requires a context. It needs to be
   * malloced to keep its inner structure private
   */
  al_rc_t
  al_txalloc(al_t *al, al_tx_t **txp)
  {
      al_tx_t *tx;
  
      tx = (al_tx_t*)(al->m.malloc)(sizeof(al_tx_t));
      if (tx == NULL)
          return AL_RC(AL_ERR_MEM);
  
      *txp = tx;
      return AL_OK;
  }
  
  /*
   * free traversal context using proper policy function
   */
  al_rc_t
  al_txfree(al_t *al, al_tx_t *tx)
  {
      (al->m.free)(tx);
      return AL_OK;
  }
  
  /*
   * initiate assembly line traversal
   *
   * - do initial seek, fail if position does not exist
   * - save traversal parameters
   */
  al_rc_t
  al_traverse(al_t *al, size_t off, size_t n, al_td_t dir, al_label_t label, al_tx_t *tx)
  {
      al_rc_t rc;
  
      tx->cur = NULL;
  
      rc = al_seek(al, off, &tx->cur, &tx->skip);
      if (rc != AL_OK)
          return AL_RC(rc);
  
      tx->dir   = dir;
      tx->togo  = n;
      tx->label = label;
  
      return AL_OK;
  }
  
  /*
   * assembly line traversal step
   *
   * return EOF if at end of assembly line
   * clip view chunk to traversal bounds
   * advance chunk cursor according to traversal direction
   */
  al_rc_t
  al_traverse_next(al_t *al, al_tx_t *tx, al_chunk_t **alcp)
  {
      size_t step;
  
      do {
          if (tx->togo <= 0)     /* XXX - togo can be negative from bad input */
              return AL_ERR_EOF;
  
          if (tx->cur == NULL)   /* premature EOF */
              return AL_ERR_EOF;
  
          /* compute number of bytes to process */
          step = AL_CHUNK_SPAN(tx->cur, tx->skip, tx->togo);
  
          /*
           * synthetic chunk which is NOT maintained in usecount
           * MUST NOT BE USED for modifications to chunk list
           * MUST NOT BE USED for modifications to chunk size
           * ALLOWED is read access to chunk content
           * ALLOWED is modification in place of chunk content
           */
          tx->view        = *(tx->cur);
          tx->view.begin += tx->skip;
          tx->view.end    = tx->view.begin + step;
  
          switch (tx->dir) {
          case AL_FORWARD:
          case AL_BACKWARD:
              break;
          case AL_FORWARD_SPAN:
          case AL_BACKWARD_SPAN:
              if (!AL_SAME_LABEL(&tx->view, tx->label)) {
                  tx->togo = 0;
                  return AL_ERR_EOF;
              }
              break;
          }
  
          switch (tx->dir) {
              case AL_FORWARD:
              case AL_FORWARD_SPAN:
                  tx->cur   = NEXT(tx->cur,chunks);
                  tx->togo -= step;
                  tx->skip  = 0;
                  break;
              case AL_BACKWARD:
              case AL_BACKWARD_SPAN:
                  tx->cur   = PREV(tx->cur,chunks);
                  tx->togo -= step;
                  tx->skip  = 0;
                  break;
          }
      } while (!AL_SAME_LABEL(&tx->view, tx->label));
  
      *alcp = &tx->view;
      return AL_OK;
  }
  
  /*
   * assembly line traversal end
   *
   * to free resources allocated/locked during traversal
   * currently a NOOP
   */
  al_rc_t al_traverse_end(al_t *al, al_tx_t *tx, int final)
  {
      return AL_OK;
  }
  
  /*
   * full assembly line traversal with callback
   *
   * traversal is aborted when callback return != AL_OK
   * reaching EOF (and also aborting with AL_ERR_EOF) is not an error
   *
   * traversal context is kept on stack (XXX ?)
   */
  al_rc_t
  al_traverse_cb(al_t *al, size_t off, size_t n, al_td_t dir, al_label_t label,
                 al_rc_t (*cb)(al_chunk_t *, void *), void *u)
  {
      al_rc_t rc;
      al_tx_t tx;                /* XXX - private tx structure on stack */
      al_chunk_t *view;
  
      rc = al_traverse(al, off, n, dir, label, &tx);
      if (rc != AL_OK)
          return AL_RC(rc);
  
      while ((rc = al_traverse_next(al, &tx, &view)) == AL_OK) {
          rc = cb(view, u);
          if (rc != AL_OK)
              break;
      }
  
      al_traverse_end(al, &tx, 1);
  
      if (rc != AL_ERR_EOF)
          return AL_RC(rc);
  
      return AL_OK;
  }
  
  /*
   * full assembly line traversal with data copy to linear buffer
   *
   * returns actual number of bytes copied
   *
   * Do not copy if destination pointer is NULL, but still count.
   * This can be used to precalculate the size of the needed linear
   * buffer with n set to some arbitrary huge value.
   *
   * traversal context is kept on stack (XXX ?)
   */
  al_rc_t
  al_flatten(al_t *al, size_t off, size_t n, al_td_t dir, al_label_t label,
             char *dst, size_t *lenp)
  {
      al_rc_t rc;
      al_tx_t tx;                /* XXX - private tx structure on stack */
      al_chunk_t *view;
      size_t step, total;
  
      *lenp = 0; /* keep caller on safe side */
  
      rc = al_traverse(al, off, n, dir, label, &tx);
      if (rc != AL_OK)
          return AL_RC(rc);
  
      switch (dir) {
      case AL_FORWARD:
      case AL_FORWARD_SPAN:
          break;
      case AL_BACKWARD:
      case AL_BACKWARD_SPAN:
          dst += n;
          break;
      }
  
      total = 0;
  
      if (dst == NULL) {
          while ((rc = al_traverse_next(al, &tx, &view)) == AL_OK)
              total += AL_CHUNK_LEN(view);
      } else {
          while ((rc = al_traverse_next(al, &tx, &view)) == AL_OK) {
              step = AL_CHUNK_LEN(view);
              switch (dir) {
              case AL_FORWARD:
              case AL_FORWARD_SPAN:
                  memmove(dst, AL_CHUNK_PTR(view, 0), step);
                  dst   += step;
                  break;
              case AL_BACKWARD:
              case AL_BACKWARD_SPAN:
                  dst   -= step;
                  memmove(dst, AL_CHUNK_PTR(view, 0), step);
                  break;
              }
              total += step;
          }
      }
      *lenp = total;
  
      al_traverse_end(al, &tx, 1);
  
      if (rc != AL_ERR_EOF)
          return AL_RC(rc);
  
      return AL_OK;
  }
  
  /*
   * full assembly line traversal with data copy to target assembly line
   *
   * traversal context is kept on stack (XXX ?)
   */
  al_rc_t
  al_copy(al_t *al, size_t off, size_t n, al_label_t label, al_t *tal)
  {
      al_rc_t rc;
      al_tx_t tx;                /* XXX - private tx structure on stack */
      al_chunk_t *view;
      size_t step;
  
      rc = al_traverse(al, off, n, AL_FORWARD, label, &tx);
      if (rc != AL_OK)
          return AL_RC(rc);
  
      while ((rc = al_traverse_next(al, &tx, &view)) == AL_OK) {
          step = AL_CHUNK_LEN(view);
          al_append_bytes(tal, AL_CHUNK_PTR(view, 0), step, AL_CHUNK_LABEL(view));
      }
  
      al_traverse_end(al, &tx, 1);
  
      if (rc != AL_ERR_EOF)
          return AL_RC(rc);
  
      return AL_OK;
  }
  
  /*
   * traverse assembly line and retrieve first chunk
   *
   * traversal context is kept on stack (XXX ?)
   */
  al_rc_t
  al_firstlabel(al_t *al, size_t off, size_t n, al_td_t dir, al_label_t label,
                al_label_t *labelp)
  {
      al_rc_t rc;
      al_tx_t tx;                /* XXX - private tx structure on stack */
      al_chunk_t *view;
  
      rc = al_traverse(al, off, n, dir, label, &tx);
      if (rc != AL_OK)
          return AL_RC(rc);
  
      if ((rc = al_traverse_next(al, &tx, &view)) == AL_OK)
          *labelp = AL_CHUNK_LABEL(view);
  
      al_traverse_end(al, &tx, 1);
  
      return rc;
  }
  
  /*
   * traverse assembly line forward and search first chunk
   * that matches label and continue search until end of
   * span of same label
   *
   * return offset to first byte in *offp
   * return size of span to last byte in *spanp
   *
   * traversal context is kept on stack (XXX ?)
   */
  al_rc_t
  al_spanlabel(al_t *al, size_t off, size_t n, al_label_t label,
               size_t *offp, size_t *spanp)
  {
      al_rc_t rc;
      al_tx_t tx;                /* XXX - private tx structure on stack */
      al_chunk_t *view;
      size_t len, total, start;
      int have_first;
  
      /*
       * we need to track absolute traversal position,
       * so we have to see all chunks.. no filtering
       * allowed
       */
      rc = al_traverse(al, off, n, AL_FORWARD, NULL, &tx);
      if (rc != AL_OK)
          return AL_RC(rc);
  
      have_first = 0;
      start      = 0;
      total      = 0;
      while ((rc = al_traverse_next(al, &tx, &view)) == AL_OK) {
          len = AL_CHUNK_LEN(view);
          if (AL_SAME_LABEL(view, label)) {
              if (!have_first) {
                  start      = total;
                  have_first = 1;
              }
          } else if (have_first)
              break;
          total += len;
      }
  
      al_traverse_end(al, &tx, 1);
  
      if (rc != AL_OK && rc != AL_ERR_EOF)
          return AL_RC(rc);
  
      if (!have_first)
          return AL_RC(AL_ERR_EOF);
  
      *offp   = off + start;
      *spanp  = total - start;
  
      return AL_OK;
  }
  
  /*
   * relay macros to caller
   *
   * al_bytes      - total number of bytes in assembly line
   * al_chunk_len  - number of bytes in chunk
   * al_chunk_span - clip interval (off,off+n( against chunk length
   * al_chunk_label- return chunk label
   * al_same_label - check if label matches with chunk label
   * al_chunk_ptr  - return memory pointer to byte within chunk
   *
   * off must be a valid offset within (0,len(
   */
  
  size_t
  al_bytes(const al_t *al)
  {
      return al->bytes;
  }
  
  size_t
  al_chunk_len(al_chunk_t *alc)
  {
      return AL_CHUNK_LEN(alc);
  }
  
  size_t
  al_chunk_span(al_chunk_t *alc, size_t off, size_t n)
  {
      return AL_CHUNK_SPAN(alc, off, n);
  }
  
  al_label_t
  al_chunk_label(al_chunk_t *alc)
  {
      return AL_CHUNK_LABEL(alc);
  }
  
  int
  al_same_label(al_chunk_t *alc, al_label_t label)
  {
      return AL_SAME_LABEL(alc, label);
  }
  
  char *
  al_chunk_ptr(al_chunk_t *alc, size_t off)
  {
      return AL_CHUNK_PTR(alc, off);
  }
  
  /*
   * convert error code into human readable form
   */
  const char *
  al_error(al_rc_t rc)
  {
      const char *mess;
  
      switch (rc) {
          case AL_OK:       mess = "Everything Ok"; break;
          case AL_ERR_ARG:  mess = "Invalid Argument"; break;
          case AL_ERR_MEM:  mess = "Not Enough Memory"; break;
          case AL_ERR_EOF:  mess = "End Of Data"; break;
          case AL_ERR_INT:  mess = "Internal Error"; break;
          default:          mess = "Invalid Result Code"; break;
      }
  
      return mess;
  }
  
  Index: ossp-pkg/al/al.h
  ============================================================
  $ cvs update -p -r1.1 al.h
  /*
  **  OSSP al -- Assembly Line
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  **
  **  This file is part of OSSP al, an abstract datatype of a data buffer
  **  that can assemble, move and truncate data but avoids actual copying.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  al.h: assembly line public API definition
  */
  
  #ifndef __AL_H__
  #define __AL_H__
  
  typedef enum {
      AL_OK,
      AL_ERR_ARG,
      AL_ERR_MEM,
      AL_ERR_EOF,
      AL_ERR_INT
  } al_rc_t;
  
  struct al_st;
  typedef struct al_st al_t;
  
  struct al_chunk_st;
  typedef struct al_chunk_st al_chunk_t;
  
  typedef void *al_label_t;
  
  typedef enum {
      AL_FORWARD,
      AL_BACKWARD,
      AL_FORWARD_SPAN,
      AL_BACKWARD_SPAN
  } al_td_t;
  
  struct al_tx_st;
  typedef struct al_tx_st al_tx_t;
  
  al_rc_t al_create       (al_t **alp);
  al_rc_t al_destroy      (al_t *al);
  al_rc_t al_append_bytes (al_t *al, const char *src, size_t n, al_label_t label);
  al_rc_t al_prepend_bytes(al_t *al, const char *src, size_t n, al_label_t label);
  al_rc_t al_attach_buffer(al_t *al, char *p, size_t n, al_label_t label, void (*freemem)(char *, size_t, void *), void *u);
  al_rc_t al_txalloc      (al_t *al, al_tx_t **txp);
  al_rc_t al_txfree       (al_t *al, al_tx_t *tx);
  al_rc_t al_traverse     (al_t *al, size_t off, size_t n, al_td_t dir, al_label_t label, al_tx_t *tx);
  al_rc_t al_traverse_next(al_t *al, al_tx_t *tx, al_chunk_t **alcp);
  al_rc_t al_traverse_end (al_t *al, al_tx_t *tx, int final);
  al_rc_t al_traverse_cb  (al_t *al, size_t off, size_t n, al_td_t dir, al_label_t label, al_rc_t (*cb)(al_chunk_t *, void *), void *u);
  al_rc_t al_copy         (al_t *al, size_t off, size_t n, al_label_t label, al_t *tal);
  al_rc_t al_splice       (al_t *al, size_t off, size_t n, al_t *nal, al_t *tal);
  al_rc_t al_setlabel     (al_t *al, size_t off, size_t n, al_label_t oldlabel, al_label_t newlabel);
  al_rc_t al_flatten      (al_t *al, size_t off, size_t n, al_td_t dir, al_label_t label, char *dst, size_t *lenp);
  al_rc_t al_firstlabel   (al_t *al, size_t off, size_t n, al_td_t dir, al_label_t label, al_label_t *labelp);
  al_rc_t al_spanlabel    (al_t *al, size_t off, size_t n, al_label_t label, size_t *offp, size_t *spanp);
  
  size_t     al_bytes      (const al_t *al);
  size_t     al_chunk_len  (al_chunk_t *alc);
  al_label_t al_chunk_label(al_chunk_t *alc);
  int        al_same_label (al_chunk_t *alc, al_label_t label);
  size_t     al_chunk_span (al_chunk_t *alc, size_t off, size_t n);
  char      *al_chunk_ptr  (al_chunk_t *alc, size_t off);
  
  const char *al_error      (al_rc_t rc);
  
  #endif /* __AL_H__ */
  
  Index: ossp-pkg/al/al.pod
  ============================================================
  $ cvs update -p -r1.1 al.pod
  ##
  ##  OSSP al - Assembly Line
  ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  ##  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  ##
  ##  This file is part of OSSP al, an abstract datatype of a data buffer
  ##  that can assemble, move and truncate data but avoids actual copying.
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  al.pod: assembly line library manual page
  ##
  
  =pod
  
  =head1 NAME
  
  B<OSSP al> - Assembly Line
  
  =head1 VERSION
  
  B<OSSP al AL_VERSION_STR>
  
  =head1 SYNOPSIS
  
  =over 4
  
  =item B<Abstract Data Types>:
  
  al_rc_t,
  al_t,
  al_tx_t,
  al_td_t,
  al_chunk_t.
  
  =item B<Assembly Line Operations>:
  
  al_create,
  al_destroy,
  al_append_bytes,
  al_prepend_bytes,
  al_attach_buffer,
  al_splice,
  al_setlabel,
  al_bytes.
  
  =item B<Traversal Operations>:
  
  al_txalloc,
  al_txfree,
  al_traverse,
  al_traverse_next,
  al_traverse_end,
  al_traverse_cb.
  
  =item B<Convenience Operations>:
  
  al_flatten,
  al_copy,
  al_firstlabel,
  al_spanlabel.
  
  =item B<Chunk Operations>:
  
  al_chunk_len,
  al_chunk_span,
  al_chunk_label,
  al_same_label,
  al_chunk_ptr.
  
  =item B<Error Handling>:
  
  al_error.
  
  =back
  
  =head1 DESCRIPTION
  
  B<OSSP al> defines an abstract type of a data buffer that can
  assemble, move and truncate data but avoids actual copying.
  
  It provides the following key features:
  
  =over 4
  
  =back
  
  =head1 DATA TYPES
  
  B<OSSP al> uses six data types in its API:
  
  =over 4
  
  =item B<al_rc_t> (Return Code Type)
  
  This is an exported enumerated integer type with the following possible
  values:
  
   AL_OK       Everything Ok
   AL_ERR_ARG  Invalid Argument
   AL_ERR_MEM  Not Enough Memory
   AL_ERR_EOF  End Of Communication
   AL_ERR_INT  Internal Error
  
  =item B<al_t> (Assembly Line Type)
  
  This is an opaque data type representing a data buffer.
  Only pointers to this abstract data type are used in the API.
  
  =item B<al_label_t> (Label Type)
  
  This is an opaque pointer type representing a specific data flavour.
  You can restrict traversal operations to data that was marked with
  the specific flavour. Usually you would cast a pointer to the
  object that maintains the data to B<al_label_t>. You may use
  NULL as a label but on traversal NULL matches any label.
  
  =item B<al_tx_t> (Traversal Context Type)
  
  This is an opaque data type representing the state of a buffer
  traversal operation. Only pointers to this abstract data type are
  used in the API.
  
  =item B<al_td_t> (Traversal Direction Type)
  
  This is an exported enumerated integer type with the following possible
  values:
  
   AL_FORWARD        traverse assembly line from beginning to end
   AL_BACKWARD       traverse assembly line from end to beginning
   AL_FORWARD_SPAN   like AL_FORWARD, but stop when label does not match
   AL_BACKWARD_SPAN  like AL_BACKWARD, but stop when label does not match
  
  =item B<al_chunk_t> (Chunk Type)
  
  This is an opaque data type representing a chunk of a buffer during
  a traversal operation. Only pointers to this abstract data type are
  used in the API. The B<al_chunk_t> type is used to generate a pointer
  and byte count to access the data in the buffer.
  
  =back
  
  =head1 FUNCTIONS
  
  B<OSSP al> provides a bunch of API functions, all modelled after the
  same prototype: "C<al_rc_t> C<al_>I<name>C<(al_>[C<chunk>]C<_t *,>
  ...C<)>". This means every function returns C<al_rc_t> to indicate its
  success (C<AL_OK>) or failure (C<AL_ERR_XXX>) by returning a return code
  (the corresponding describing text can be determined by passing this
  return code to C<al_error>). Each function name starts with the common
  prefix C<al_> and receives a C<al_t> (or C<al_chunk_t>) object on which
  it operates as its first argument.
  
  =head2 Assembly Line Operations
  
  =over 4
  
  =item al_rc_t B<al_create>(al_t **I<alp>);
  
  Create an assembly line abstraction object. 
  The object is stored in I<alp> on success.
  
  Example: C<al_t *al; al_create(&al);>
  
  =item al_rc_t B<al_destroy>(al_t *I<al>);
  
  Destroy an assembly line abstraction object.
  The object I<al> is invalid after this call succeeded.
  
  Example: C<al_destroy(al);>
  
  =item al_rc_t B<al_append_bytes>(al_t *I<al>, const char *I<src>, size_t I<n>, al_label_t I<label>);
  
  Append I<n> bytes from a storage array at I<src> to the assembly line. The
  bytes are copied, memory is allocated as necessary. The data is tagged
  with I<label>.
  
  Example: C<al_append_bytes(al, "Goodbye cruel world\n", 20, NULL);>
  
  =item al_rc_t B<al_prepend_bytes>(al_t *I<al>, const char *I<src>, size_t I<n>, al_label_t I<label>);
  
  Prepend I<n> bytes from a storage array at I<src> to the assembly line. The
  bytes are copied, memory is allocated as necessary.
  
  Example: C<al_prepend_bytes(al, "Hello world\n", 12, NULL);>
  
  =item al_rc_t B<al_attach_buffer>(al_t *I<al>, char *I<p>, size_t I<n>, al_label_t I<label>, void (*I<freemem>)(char *, size_t, void *), void *I<u>);
  
  Attach the storage array starting at I<p> with size I<n> at the end of
  the assembly line. Its content becomes part of the assembly line
  and is subject to assembly line operations. The storage array must stay
  in scope until it is no longer referenced by the assembly line. When
  this happens the function I<freemem> is called with the original pointer
  I<p>, size I<n> and an arbitrary pointer I<u>. Passing a NULL pointer
  for I<freemem> is valid, then no callback takes place, which might be
  appropriate for static buffers.
  
  Example: C<char store[] = "foo\n"; al_attach_buffer(al, store, sizeof(store), NULL, NULL, NULL);>
  
  =item al_rc_t B<al_splice>(al_t *I<al>, size_t I<off>, size_t I<n>, al_t *I<nal>, al_t *I<tal>);
  
  This is the general data move operation modelled after the perl operator
  B<splice>.
  
  I<off> and I<n> are byte counts that define a span of bytes within the
  source assembly line I<al>. These bytes are moved to the target assembly line
  I<tal> while the content of the new assembly line I<nal> is moved to the source
  to replace the selected span.
  
  There are two deviations from the Perl operator to avoid copying:
  
  The move to the target assembly line I<tal> appends the data to its end.
  The move from the new assembly line I<nal> removes the data from its origin.
  
  The target assembly line I<tal> may be B<NULL>, the data bytes that would
  be moved to the target are then discarded. This avoids creation
  and destruction of a dummy target.
  
  The new assembly line I<nal> may be B<NULL>, then nothing is inserted into
  the source. This avoids creation and destruction of an empty assembly line.
  
  Examples:
  
   al_t *source;
   al_t *insertion;
   al_t *buffer;
  
   al_create(&source);
   al_create(&insertion);
   al_create(&buffer);
  
   al_append_bytes(source, "Hello world\n", 12, NULL);
   al_append_bytes(insertion, "Goodbye cruel", 13, NULL);
  
   al_splice(source, 0, 5, insertion, buffer);
  
  The buffer now holds the string "Hello".
  The source now holds the string "Goodbye cruel world\n".
  The insertion is now empty.
  
   al_append_bytes(insertion, "brave", 5, NULL);
   al_splice(source, 8, 5, insertion, NULL);
  
  The source now holds the string "Goodbye brave world\n".
  The insertion is now empty.
  
   al_append_bytes(insertion, "B", 1, NULL);
   al_splice(source, 0, 8, NULL, buffer);
   al_splice(source, 0, 1, insertion, NULL);
   al_append_bytes(insertion, "\n", 1, NULL);
   al_splice(buffer, al_bytes(buffer)-1, 1, insertion, NULL),
  
  The source now holds the string "Brave world\n".
  The buffer now holds the string "HelloGoodbye\n".
  The insertion is empty.
  
  =item al_rc_t B<al_setlabel>(al_t *I<al>, size_t I<off>, size_t I<n>, al_label_t oldlabel, al_label_t newlabel);
  
  I<off> and I<n> are byte counts that define a span of bytes within the
  source assembly line I<al>. The bytes within that span that match I<oldlabel>
  are tagged with I<newlabel>, any existing labels for these bytes are
  overwritten.
  
  =item size_t B<al_bytes>(const al_t *I<al>);
  
  Returns the number of bytes stored in the assembly line.
  
  Example: C<al_t *al; size_t count; count = al_bytes(al);>
  
  =back
  
  =head2 Traversal Operations
  
  =over 4
  
  =item al_rc_t B<al_txalloc>(al_t *I<al>, al_tx_t **txp);
  
  Allocate a traversal context.
  
  Example: C<al_tx_t *tx; al_txalloc(&tx);>
  
  =item al_rc_t B<al_txfree>(al_t *I<al>, al_tx_t *tx);
  
  Free a traversal context.
  
  Example: C<al_tx_t *tx; al_txfree(tx);>
  
  =item al_rc_t B<al_traverse>(al_t *I<al>, size_t I<off>, size_t I<n>, al_td_t I<dir>, al_label_t I<label>, al_tx_t *I<tx>);
  
  Start traversing the assembly line I<al> beginning at byte offset I<off>
  for up to I<n> bytes in direction I<dir>. If I<label> is not NULL then
  you will see only data that was tagged with I<label>. The state of the
  traversal is stored in the supplied context I<tx>.
  
  This function fails when the offset is outside the assembly line bounds.
  
  
  =item al_rc_t B<al_traverse_next>(al_t *I<al>, al_tx_t *I<tx>, al_chunk_t **I<alcp>);
  
  Complete a traversal step on the assembly line I<al> using the initialized
  context I<tx>. In each step a chunk descriptor is filled and stored in
  I<alcp>. All bytes of the chunk are guaranteed to be stored in a flat
  array and can be accessed through the chunk operations described below.
  
  The function returns AL_ERR_EOF when it passes the end (or beginning
  in case of backward traversal) of the assembly line.
  
  =item al_rc_t B<al_traverse_end>(al_t *I<al>, al_tx_t *I<tx>, int final);
  
  Clean up internal state of traversal. If I<final> is zero, you may
  continue the traversal later by calling B<al_traverse_next>. If
  I<final> is non-zero you need to start a new traversal. It is
  mandatory that every traversal that was started is finished by
  a call to B<al_traverse_end> with I<final> set to a non-zero value.
  
  =item al_rc_t B<al_traverse_cb>(al_t *I<al>, size_t I<off>, size_t I<n>, al_td_t I<dir>, al_label_t I<label>, al_rc_t (*I<cb>)(al_chunk_t *, void *), void *u);
  
  B<al_traverse_cb> is a wrapper function that does a full assembly line traversal in
  a single call. In every step a chunk descriptor is passed to the callback
  function I<cb> together with a user supplied pointer I<u>. When the
  callback function returns AL_OK the traversal continues, when it returns
  AL_ERR_EOF the traversal is aborted and AL_OK is returned to the original
  caller. Any other return code returned by the callback is passed to the
  original caller verbatim.
  
  =back
  
  =head2 Convenience Operations
  
  =over 4
  
  =item al_rc_t B<al_flatten>(al_t *I<al>, size_t I<off>, size_t I<n>, al_td_t I<dir>, char *I<dst>, size_t *I<lenp>);
  
  I<off> and I<n> are byte counts that define a span of bytes with the
  assembly line I<al>. These bytes are copied to the storage array I<dst>
  which must be sized appropriately.
  I<off> must be a valid offset, I<n> must be positive but may exceed
  the size of the assembly line.
  The actual number of bytes that is copied to the destination is stored
  in I<lenp>.
  If I<dst> is NULL then no data is copied but the number of bytes is
  still counted in I<lenp>. This can be used to precalculate the size
  of the needed storage array by passing an arbitrary high maximum size
  as I<n>.
  If I<dir> denotes a backwards traversal the storage array is filled
  from its end.
  
  Example:
  
   al_t *al;
   char buffer[42];
   size_t actual;
  
   al_flatten(al, 500, 42, AL_FORWARD, buffer, &actual);
  
  =item al_rc_t B<al_copy>(al_t *I<al>, size_t I<off>, size_t I<n>, al_td_t I<dir>, al_t *I<tal>);
  
  I<off> and I<n> are byte counts that define a span of bytes within the
  assembly line I<al>. These bytes are appended to the target assembly line I<tal>,
  memory is allocated as necessary.
  I<off> must be a valid offset, I<n> must be positive but may exceed
  the size of the assembly line.
  
  Example:
  
   al_t *al;
   al_t *tal;
  
   al_create(&tal);
   al_flatten(al, 500, 42, tal);
  
  =item al_rc_t B<al_firstlabel>(al_t *I<al>, size_t I<off>, size_t I<n>, al_td_t I<dir>, al_label_t *I<labelp>);
  
  I<off> and I<n> are byte counts that define a span of bytes within the
  assembly line I<al>. The label that was attached to the first byte
  within the defined span is stored in I<labelp>, otherwise B<al_firstlabel>
  returns an error.
  
  =item al_rc_t B<al_spanlabel>(al_t *I<al>, size_t I<off>, size_t I<n>, al_label_t *I<label>, size_t *<offp>, size_t *<spanp>);
  
  I<off> and I<n> are byte counts that define a span of bytes within the
  assembly line I<al>. This span is searched for data tagged with the I<label>.
  The absolute byte offset of the first byte matching the label and the
  length of the span of the same label is returned in I<offp> and I<spanp>
  respectively.
  
  =back
  
  =head2 Chunk Operations
  
  =over 4
  
  =item size_t B<al_chunk_len>(al_chunk_t *I<alc>);
  
  Returns the number of bytes in a chunk.
  
  =item size_t B<al_chunk_span>(al_chunk_t *I<alc>, size_t I<off>, size_t I<n>);
  
  I<off> and I<n> are byte counts that define a span of bytes.
  B<al_chunk_span> returns the number of bytes that are stored in the chunk.
  I<off> must be a valid offset, I<n> must be positive but may exceed
  the size of the chunk.
  
  =item al_label_t B<al_chunk_label>(al_chunk_t *I<alc>);
  
  Return the label that was used to tag the data in I<alc>. This can
  be NULL.
  
  =item int B<al_same_label>(al_chunk_t *I<alc>, al_label_t *I<label>);
  
  Return true if I<label> matches the label that was used to tag the data
  in I<alc>. A NULL I<label> matches everything.
  
  =item char *B<al_chunk_ptr>(al_chunk_t *I<alc>, size_t I<off>);
  
  Returns the pointer to the byte at offset I<off> within the chunk I<alc>.
  I<off> must be positive and must not exceed the size of the chunk.
  Since all bytes of the chunk are guaranteed to be stored in a flat
  array the pointer can be used to reference every byte within the chunk.
  
  Example:
  
   al_chunk_t *alc;
   char *start, *end;
  
   start = al_chunk_ptr(alc, 0);
   end   = start + al_chunk_len(alc) - 1;
  
  =back
  
  =head2 Error Handling
  
  =over 4
  
  =item const char *B<al_error>(al_rc_t I<rv>);
  
  Retrieve a string that describes the return code I<rv> in english.
  
  =back
  
  =head1 SEE ALSO
  
  =head1 HISTORY
  
  B<OSSP al> was invented in October 2002 by Michael van Elst
  E<lt>mlelstv@dev.de.cw.netE<gt> under contract with Cable & Wireless
  Germany E<lt>http://www.cw.com/deE<gt> for use inside the OSSP project
  E<lt>http://www.ossp.org/E<gt>.
  
  =head1 AUTHORS
  
   Michael van Elst
   mlelstv@dev.de.cw.net
  
  =cut
  
  Index: ossp-pkg/al/al_test.c
  ============================================================
  $ cvs update -p -r1.1 al_test.c
  /*
  **  OSSP al - Assembly Line
  **  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  **
  **  This file is part of OSSP al, an abstract datatype of a data buffer
  **  that can assemble, move and truncate data but avoids actual copying.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  al_test.c: assembly line library test suite
  */
  
  #ifdef HAVE_CONFIG_H
  #include "config.h"
  #endif
  
  #include <stdio.h>
  #include <stdlib.h>
  #include <stdarg.h>
  #include <time.h>
  #include <sys/utsname.h>
  #include <unistd.h>
  #include <errno.h>
  #include <sys/types.h>
  #include <sys/wait.h>
  
  #include "ts.h"
  #include "al.h"
  
  static char label, label2, label3;
  #define LABEL ((al_label_t)&label)
  #define LABEL2 ((al_label_t)&label2)
  #define LABEL3 ((al_label_t)&label3)
  
  #define S(s) s, strlen(s)
  #define RCHK(name, rc, rc0) \
      if (rc != rc0) \
          ts_test_fail(TS_CTX, "%s -> %d[%s] (expected %d[%s])\n", \
              rc, al_error(al), rc0, al_error(rc0))
  #define CCHK(name, al) \
      do { \
          size_t good, bad; \
          if (chklen(al, &good, &bad)) { \
              ts_test_fail(TS_CTX, "%s -> corrupted length %d (expected %d)\n", \
                  good, bad); \
          } \
      } while (0)
  
  static const char *fill(char *p, int n)
  {
      static char buf[4 * 80 + 1];
      int max = sizeof(buf)-5;
      int k;
  
      k=0;
      while (n > 0 && k < max) {
          if (isprint(*p)) {
              buf[k] = *p;
              k += 1;
          } else {
              sprintf(buf+k,"<%2.2x>",*p);
              k += 4;
          }
          ++p;
          --n;
      }
      buf[k] = '\0';
  
      return (const char *)buf;
  }
  
  static int checklen(al_t *al, size_t *goodp, size_t *badp)
  {
      al_tx_t *tx;
      al_chunk_t *cur;
      size_t total, total2;
  
      total = 0;
  
      al_txalloc(al, &tx);
      al_traverse(al, 0, al_bytes(al), AL_FORWARD, NULL, tx);
      while (al_traverse_next(al, tx, &cur) == AL_OK)
          total += al_chunk_len(cur);
      al_traverse_end(al, tx, 1);
      al_txfree(al, tx);
  
      total2 = al_bytes(al);
  
      if (total != total2) {
          *goodp = total;
          *badp  = total2;
          return -1;
      }
  
      return 0;
  }
  
  
  /* test: data copy */
  TS_TEST(test_al_data)
  {
      al_rc_t rc;
      al_t *al;
  
      rc = al_create(&al);
      RCHK('al_create',rc,AL_OK);
      rc = al_append_bytes(al, S("Hello world\n"));
      RCHK('al_append_bytes',rc,AL_OK);
      CCHK('al_append_bytes', al);
      rc = al_destroy(&al);
      RCHK('al_destroy',rc,AL_OK);
  }
  
  /* test: splicing */
  TS_TEST(test_al_splice)
  {
      al_rc_t rc;
      al_t *src, *ins, *dst;
      int i;
  
      rc = al_create(&src);
      RCHK('al_create(&src)',rc,AL_OK);
      rc = al_create(&ins);
      RCHK('al_create(&ins)',rc,AL_OK);
      rc = al_create(&dst);
      RCHK('al_create(&dst)',rc,AL_OK);
  
      for (i=0; i<500; ++i) {
          rc = al_append_bytes(src, S("Huhu world\n"), LABEL);
          RCHK('al_append_bytes(src)',rc,AL_OK);
      }
      rc = al_append_bytes(src, S("Goodbye world\n"), LABEL);
      RCHK('al_append_bytes(src)',rc,AL_OK);
      CCHK('al_append_bytes(src)',src);
      rc = al_append_bytes(src, S("Goodbye world\n"), LABEL2);
      RCHK('al_append_bytes(src)',rc,AL_OK);
      CCHK('al_append_bytes(src)',src);
      rc = al_prepend_bytes(src, S("Hello world\n"), LABEL2);
      RCHK('al_prepend_bytes(src)',rc,AL_OK);
      CCHK('al_prepend_bytes(src)',src);
      rc = al_prepend_bytes(src, S("Hello world\n"), LABEL);
      RCHK('al_prepend_bytes(src)',rc,AL_OK);
      CCHK('al_prepend_bytes(src)',src);
  
      rc = al_prepend_bytes(ins, S("KICK "), LABEL3);
      RCHK('al_prepend_bytes(ins)',rc,AL_OK);
      CCHK('al_prepend_bytes(ins)',ins);
      rc = al_append_bytes(ins, S("ME\n"), LABEL3);
      RCHK('al_append_bytes(ins)',rc,AL_OK);
      CCHK('al_append_bytes(ins)',ins);
  
      rc = al_splice(src, 4, 80, ins, dst);
      RCHK('al_splice',rc,AL_OK);
      CCHK('al_splice(src)',src);
      CCHK('al_splice(ins)',ins);
      CCHK('al_splice(dst)',dst);
  
      rc = al_destroy(dst);
      RCHK('al_destroy(dst)',rc,AL_OK);
      rc = al_destroy(ins);
      RCHK('al_destroy(ins)',rc,AL_OK);
      rc = al_destroy(src);
      RCHK('al_destroy(src)',rc,AL_OK);
  }
  
  /* test: labelling */
  TS_TEST(test_al_label)
  {
      al_rc_t rc;
      al_t *al;
  
      rc = al_create(&al);
      RCHK('al_create',rc,AL_OK);
      rc = al_append_bytes(&al, S("Hello world\n"), LABEL);
      RCHK('al_create',rc,AL_OK);
  
      rc = al_setlabel(al, 7, 2, NULL, LABEL3);
      RCHK('al_setlabel',rc,AL_OK);
      CCHK('al_setlabel',al);
      rc = al_setlabel(al, 5, 9, NULL, LABEL2);
      CCHK('al_setlabel',al);
  
      rc = al_destroy(al);
      RCHK('al_destroy(al)',rc,AL_OK);
  }
  
  /* test: attach */
  static char *reclaim_ptr = NULL;
  static size_t *reclaim_size = 0;
  static void *reclaim_u = NULL;
  static int reclaim_count = 0;
  static void reclaim(char *p, size_t n, void *u)
  {
      ++reclaim_count;
  
      if (reclaim_ptr != NULL ||
          reclaim_size != 0 ||
          reclaim_u != NULL)
          return;
  
      reclaim_ptr  = p;
      reclaim_size = n;
      reclaim_u    = u;
  }
  static const char *reclaim_result(char *p, size_t n, void *u)
  {
      if (reclaim_count == 0)
          return "reclaim never called";
      if (reclaim_count > 0)
          return "repeated call";
  
      if (p != reclaim_ptr ||
          n != reclaim_size ||
          u != reclaim_u)
          return "bad data for free";
  
      return NULL;
  }
  
  TS_TEST(test_al_attach)
  {
      al_rc_t rc;
      al_t *al;
      char baf[] = "Mittendrin\n";
      char *context = "CONTEXT";
      char *mess;
  
      rc = al_create(&al);
      RCHK('al_create', rc, AL_OK);
      rc = al_append_bytes(al, S("Hello world\n"), NULL);
      RCHK('al_append_bytes', rc, AL_OK);
      CCHK('al_append_bytes', al);
      rc = al_attach_buffer(al, S(baf), NULL, reclaim, context);
      RCHK('al_attach_buffer', rc, AL_OK);
      CCHK('al_attach_buffer', al);
      rc = al_append_bytes(al, S("Goodbye world\n"), NULL);
      RCHK('al_append_bytes', rc, AL_OK);
      CCHK('al_append_bytes', al);
      rc = al_destroy(&al);
      RCHK('al_destroy', rc, AL_OK);
  
      mess = reclaim_result(S(baf), context);
      if (mess != NULL)
          ts_test_fail(TS_CTX,"buffer reclaim failed: %s\n",mess);
  }
  
  /* test: exception handling */
  #ifdef WITH_EX
  #include "ex.h"
  TS_TEST(test_sa_ex)
  {
      volatile al_t *al;
      ex_t ex;
      int caught;
  
      ts_test_check(TS_CTX, "exception handling");
      caught = 0;
      ex_try {
          al = NULL;
          al_create(&al);
          al_append_bytes(&al, S("DUMMYDUMMY"), NULL);
          al_splice(al, 50, 1, NULL, NULL);
      }
      ex_cleanup {
          if (al != NULL) al_destroy(&al);
      }
      ex_catch (ex) {
          if ((sa_rc_t)ex.ex_value != AL_ERR_EOF)
              ts_test_fail(TS_CTX, "unexpected exception: %d\n", (al_rc_t)ex.ex_value);
          caught = 1;
      }
      if (!caught)
          ts_test_fail(TS_CTX, "expected exception not caught\n");
  }
  #endif
  
  int main(int argc, char *argv[])
  {
      ts_suite_t *ts;
      int n;
  
      ts = ts_suite_new("OSSP al (Assembly Line)");
      ts_suite_test(ts, test_al_data,   "assembly line data copying");
      ts_suite_test(ts, test_al_splice, "assembly line splicing");
      ts_suite_test(ts, test_al_label,  "assembly line labelling");
      ts_suite_test(ts, test_al_attach, "assembly line buffer attach");
  #ifdef WITH_EX
      ts_suite_test(ts, test_al_ex,     "exception handling");
  #endif
      n = ts_suite_run(ts);
      ts_suite_free(ts);
      return n;
  }
  
  Index: ossp-pkg/al/configure.ac
  ============================================================
  $ cvs update -p -r1.1 configure.ac
  dnl ##
  dnl ##  OSSP al - Assembly Line
  dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  dnl ##  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  dnl ##
  dnl ##  This file is part of OSSP al, an abstract datatype of a data buffer
  dnl ##  that can assemble, move and truncate data but avoids actual copying.
  dnl ##
  dnl ##  Permission to use, copy, modify, and distribute this software for
  dnl ##  any purpose with or without fee is hereby granted, provided that
  dnl ##  the above copyright notice and this permission notice appear in all
  dnl ##  copies.
  dnl ##
  dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  dnl ##  SUCH DAMAGE.
  dnl ##
  dnl ##  configure.ac: GNU Autoconf source script
  dnl ##
  
  AC_PREREQ(2.53)
  AC_INIT
  AL_VERSION_STR=`./shtool version -l txt -d long VERSION`
  ./shtool echo -e "Configuring %BOSSP al%b (Assembly Line), version %B${AL_VERSION_STR}%b"
  AC_SUBST(AL_VERSION_STR)
  
  AC_PROG_MAKE_SET
  AC_PROG_CC
  AC_CHECK_DEBUGGING
  
  sinclude(libtool.m4)
  AC_PROG_LIBTOOL
  
  sinclude(al.ac)
  AL_CHECK_ALL
  
  AC_CHECK_EXTLIB([OSSP ex], ex, __ex_ctx, ex.h,
                  [AC_DEFINE(WITH_EX, 1, [Define to 1 if building with OSSP ex])])
  
  AC_CONFIG_HEADERS(config.h)
  AC_CONFIG_FILES([Makefile al-config])
  AC_CONFIG_COMMANDS([adjustment], [chmod a+x al-config])
  AC_OUTPUT
  
  Index: ossp-pkg/al/devtool
  ============================================================
  $ cvs update -p -r1.1 devtool
  #!/bin/sh
  ##
  ##  devtool -- Development Tool
  ##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  if [ $# -eq 0 ]; then
      echo "devtool:USAGE: devtool <command> [<arg> ...]" 1>&2
      exit 1
  fi
  
  cmd="$1"
  shift
  
  devtoolfunc="./devtool.func"
  
  if [ ! -f devtool.conf ]; then
      echo "devtool:ERROR: no devtool.conf in current directory" 1>&2
      exit 1
  fi
  
  cmdline=`grep "^%$cmd" devtool.conf`
  if [ ".$cmdline" = . ]; then
      echo "devtool:ERROR: command $cmd not found in devtool.conf" 1>&2
      exit 1
  fi
  
  if [ ".$TMPDIR" != . ]; then
      tmpdir="$TMPDIR"
  elif [ ".$TEMPDIR" != . ]; then
      tmpdir="$TEMPDIR"
  else
      tmpdir="/tmp"
  fi
  tmpfile="$tmpdir/rc.$$.tmp"
  
  rm -f $tmpfile
  touch $tmpfile
  echo ". $devtoolfunc" >>$tmpfile
  ( sed <devtool.conf -e "1,/^%common/d" -e '/^%.*/,$d'
    sed <devtool.conf -e "1,/^%$cmd/d" -e '/^%.*/,$d' ) |\
  sed -e 's;\([ 	]\)@\([a-zA-Z_][a-zA-Z0-9_]*\);\1devtool_\2;' >>$tmpfile
  
  sh $tmpfile "$@"
  
  rm -f $tmpfile >/dev/null 2>&1 || true
  
  Index: ossp-pkg/al/devtool.conf
  ============================================================
  $ cvs update -p -r1.1 devtool.conf
  ##
  ##  devtool.conf -- Development Tool Configuration
  ##
  
  %autogen
      @autogen shtool   1.6.2 "1.6.*" all
      @autogen libtool  1.4.3 "1.4*"
      @autogen autoconf 2.57  "2.5[3-9]*"
  
  %autoclean
      @autoclean shtool
      @autoclean libtool
      @autoclean autoconf
  
  %configure
      ./configure \
          --prefix=/tmp/al \
          --disable-shared \
          --enable-debug \
          "$@"
  
  %version
      ./shtool version -l txt -n "OSSP al" -e VERSION
      V=`./shtool version -l txt -d long VERSION`
      sed -e "s/Version .*(.*)/Version $V/g" <README >README.n
      mv README.n README
  
  %dist
      rm -f sa-*.tar.gz
      ./devtool autoclean
      ./devtool autogen
      ./configure
      make clean all man
      make distclean
      ./shtool fixperm -v .
      V=`./shtool version -l txt -d short VERSION`
      ./shtool tarball -o al-${V}.tar.gz -d al-${V} -u gnu -g al \
                       -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*' -c 'gzip --best' .
      ls -l al-${V}.tar.gz
      gunzip <al-${V}.tar.gz | tar tvf - | head -10; echo "[...]"
      gunzip <al-${V}.tar.gz | tar tvf - | tail -10
  
  %snap
      rm -f al-*.tar.gz
      ./devtool autoclean
      ./devtool autogen
      ./configure
      make clean all man
      make distclean
      ./shtool fixperm -v .
      D=`date '+%Y%m%d'`
      ./shtool tarball -o al-SNAP-${D}.tar.gz -d al-SNAP-${D} -u gnu -g al \
                       -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*' -c 'gzip --best' .
      ls -l al-SNAP-${D}.tar.gz
      gunzip <al-SNAP-${D}.tar.gz | tar tvf - | head -10; echo "[...]"
      gunzip <al-SNAP-${D}.tar.gz | tar tvf - | tail -10
  
  %release
      echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/al/"
      scp al-*.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/al/
  
  Index: ossp-pkg/al/devtool.func
  ============================================================
  $ cvs update -p -r1.1 devtool.func
  ##
  ##  devtool.func -- Development Tool Functions
  ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  devtool_require () {
      t="$1"; o="$2"; p="$3"; e="$4"; a="$5"
      v=`($t $o | head -1 | awk "{ print \\\$$p; }") 2>/dev/null`
      if [ ".$v" = . ]; then
          echo "devtool:ERROR: unable to determine version of $t" 1>&2
          exit 1
      fi
      case "$v" in
          $e )
              ;;
          $a )
              echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
              ;;
          * )
              echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
              exit 1
              ;;
      esac
      echo "$v"
  }
  
  devtool_autogen () {
      tool=$1
      shift
      case $tool in
          autoconf )
              autoconf_version=`devtool_require autoconf --version 4 "$1" "$2"`
              echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
              autoconf
              autoheader 2>&1 | grep -v "is unchanged"
              rm -rf autom4te.cache >/dev/null 2>&1
              ;;
          libtool )
              libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
              echo "generating (GNU Libtool $libtoolize_version): ltmain.sh, libtool.m4, config.guess, config.sub"
              libtoolize --force --copy >/dev/null 2>&1
              cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
                  sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` libtool.m4
              ;;
          shtool )
              shtoolize_version=`devtool_require shtoolize -v 3 "$1" "$2"`
              echo "generating (GNU Shtool $shtoolize_version): shtool"
              shift
              shift
              shtoolize -q "$@"
              ;;
      esac
  }
  
  devtool_autoclean () {
      tool=$1
      shift
      case $tool in
          autoconf )
              echo "removing: configure config.h.in"
              rm -f configure config.h.in
              ;;
          libtool )
              echo "removing: ltmain.sh libtool.m4 config.guess config.sub"
              rm -f ltmain.sh libtool.m4 config.guess config.sub
              ;;
          shtool )
              echo "removing: shtool"
              rm -f shtool
              ;;
      esac
  }
  
  Index: ossp-pkg/al/ts.c
  ============================================================
  $ cvs update -p -r1.1 ts.c
  /*
  **  TS - OSSP Test Suite Library
  **  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP TS, a small test suite library which
  **  can be found at http://www.ossp.org/pkg/ts/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  ts.c: test suite library
  */
  
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  #include <stdarg.h>
  
  #include "config.h"
  #if defined(HAVE_DMALLOC_H) && defined(WITH_DMALLOC)
  #include "dmalloc.h"
  #endif
  
  #include "ts.h"
  
  /* embedded ring data structure library */
  #define RING_ENTRY(elem) \
      struct { elem *next; elem *prev; }
  #define RING_HEAD(elem) \
      struct { elem *next; elem *prev; }
  #define RING_SENTINEL(hp, elem, link) \
      (elem *)((char *)(hp) - ((size_t)(&((elem *)0)->link)))
  #define RING_FIRST(hp) \
      (hp)->next
  #define RING_LAST(hp) \
      (hp)->prev
  #define RING_NEXT(ep, link) \
      (ep)->link.next
  #define RING_PREV(ep, link) \
      (ep)->link.prev
  #define RING_INIT(hp, elem, link) \
      do { RING_FIRST((hp)) = RING_SENTINEL((hp), elem, link); \
           RING_LAST((hp))  = RING_SENTINEL((hp), elem, link); } while (0)
  #define RING_EMPTY(hp, elem, link) \
      (RING_FIRST((hp)) == RING_SENTINEL((hp), elem, link))
  #define RING_ELEM_INIT(ep, link) \
      do { RING_NEXT((ep), link) = (ep); \
           RING_PREV((ep), link) = (ep); } while (0)
  #define RING_SPLICE_BEFORE(lep, ep1, epN, link) \
      do { RING_NEXT((epN), link) = (lep); \
           RING_PREV((ep1), link) = RING_PREV((lep), link); \
           RING_NEXT(RING_PREV((lep), link), link) = (ep1); \
           RING_PREV((lep), link) = (epN); } while (0)
  #define RING_SPLICE_TAIL(hp, ep1, epN, elem, link) \
      RING_SPLICE_BEFORE(RING_SENTINEL((hp), elem, link), (ep1), (epN), link)
  #define RING_INSERT_TAIL(hp, nep, elem, link) \
      RING_SPLICE_TAIL((hp), (nep), (nep), elem, link)
  #define RING_FOREACH(ep, hp, elem, link) \
      for ((ep)  = RING_FIRST((hp)); \
           (ep) != RING_SENTINEL((hp), elem, link); \
           (ep)  = RING_NEXT((ep), link))
  
  /* test suite test log */
  struct tstl_st;
  typedef struct tstl_st tstl_t;
  struct tstl_st {
      RING_ENTRY(tstl_t) next;
      char              *text;
      const char        *file;
      int                line;
  };
  
  /* test suite test check */
  struct tstc_st;
  typedef struct tstc_st tstc_t;
  struct tstc_st {
      RING_ENTRY(tstc_t) next;
      char              *title;
      int                failed;
      const char        *file;
      int                line;
      RING_HEAD(tstl_t)  logs;
  };
  
  /* test suite test */
  struct ts_test_st {
      RING_ENTRY(ts_test_t)  next;
      char              *title;
      ts_test_cb_t         func;
      const char        *file;
      int                line;
      RING_HEAD(tstc_t)  checks;
  };
  
  /* test suite */
  struct ts_suite_st {
      char              *title;
      RING_HEAD(ts_test_t)   tests;
  };
  
  /* minimal output-independent vprintf(3) variant which supports %{c,s,d,%} only */
  static int ts_suite_mvxprintf(char *buffer, size_t bufsize, const char *format, va_list ap)
  {
      /* sufficient integer buffer: <available-bits> x log_10(2) + safety */
      char ibuf[((sizeof(int)*8)/3)+10]; 
      char *cp;
      char c;
      int d;
      int n;
      int bytes;
  
      if (format == NULL)
          return -1;
      bytes = 0;
      while (*format != '\0') {
          if (*format == '%') {
              c = *(format+1);
              if (c == '%') {
                  /* expand "%%" */
                  cp = &c;
                  n = sizeof(char);
              }
              else if (c == 'c') {
                  /* expand "%c" */
                  c = (char)va_arg(ap, int);
                  cp = &c;
                  n = sizeof(char);
              }
              else if (c == 's') {
                  /* expand "%s" */
                  if ((cp = (char *)va_arg(ap, char *)) == NULL)
                      cp = "(null)";
                  n = strlen(cp);
              }
              else if (c == 'd') {
                  /* expand "%d" */
                  d = (int)va_arg(ap, int);
  #ifdef HAVE_SNPRINTF
                  snprintf(ibuf, sizeof(ibuf), "%d", d); /* explicitly secure */
  #else
                  sprintf(ibuf, "%d", d);                /* implicitly secure */
  #endif
                  cp = ibuf;
                  n = strlen(cp);
              }
              else {
                  /* any other "%X" */
                  cp = (char *)format;
                  n  = 2;
              }
              format += 2;
          }
          else {
              /* plain text */
              cp = (char *)format;
              if ((format = strchr(cp, '%')) == NULL)
                  format = strchr(cp, '\0');
              n = format - cp;
          }
          /* perform output operation */
          if (buffer != NULL) {
              if (n > bufsize)
                  return -1;
              memcpy(buffer, cp, n);
              buffer  += n;
              bufsize -= n;
          }
          bytes += n;
      }
      /* nul-terminate output */
      if (buffer != NULL) {
          if (bufsize == 0)
              return -1;
          *buffer = '\0';
      }
      return bytes;
  }
  
  /* minimal vasprintf(3) variant which supports %{c,s,d} only */
  static char *ts_suite_mvasprintf(const char *format, va_list ap)
  {
      char *buffer;
      int n;
      va_list ap2;
  
      if (format == NULL)
          return NULL;
      ap2 = ap;
      if ((n = ts_suite_mvxprintf(NULL, 0, format, ap)) == -1)
          return NULL;
      if ((buffer = (char *)malloc(n+1)) == NULL)
          return NULL;
      ts_suite_mvxprintf(buffer, n+1, format, ap2);
      return buffer;
  }
  
  /* minimal asprintf(3) variant which supports %{c,s,d} only */
  static char *ts_suite_masprintf(const char *format, ...)
  {
      va_list ap;
      char *cp;
  
      va_start(ap, format);
      cp = ts_suite_mvasprintf(format, ap);
      va_end(ap);
      return cp;
  }
  
  /* create test suite */
  ts_suite_t *ts_suite_new(const char *fmt, ...)
  {
      ts_suite_t *ts;
      va_list ap;
  
      if ((ts = (ts_suite_t *)malloc(sizeof(ts_suite_t))) == NULL)
          return NULL;
      va_start(ap, fmt);
      ts->title = ts_suite_mvasprintf(fmt, ap);
      RING_INIT(&ts->tests, ts_test_t, next);
      va_end(ap);
      return ts;
  }
  
  /* add test case to test suite */
  void ts_suite_test(ts_suite_t *ts, ts_test_cb_t func, const char *fmt, ...)
  {
      ts_test_t *tst;
      va_list ap;
  
      if (ts == NULL || func == NULL || fmt == NULL)
          return;
      if ((tst = (ts_test_t *)malloc(sizeof(ts_test_t))) == NULL)
          return;
      RING_ELEM_INIT(tst, next);
      va_start(ap, fmt);
      tst->title = ts_suite_mvasprintf(fmt, ap);
      va_end(ap);
      tst->func = func;
      tst->file = NULL;
      tst->line = 0;
      RING_INIT(&tst->checks, tstc_t, next);
      RING_INSERT_TAIL(&ts->tests, tst, ts_test_t, next);
      return;
  }
  
  /* run test suite */
  int ts_suite_run(ts_suite_t *ts)
  {
      ts_test_t *tst;
      tstc_t *tstc;
      tstl_t *tstl;
      int total_tests, total_tests_suite_failed;
      int total_checks, total_checks_failed;
      int test_checks, test_checks_failed;
      const char *file;
      int line;
      char *cp;
  
      if (ts == NULL)
          return 0;
  
      /* init total counters */
      total_tests         = 0;
      total_tests_suite_failed  = 0;
      total_checks        = 0;
      total_checks_failed = 0;
  
      fprintf(stdout, "\n");
      fprintf(stdout, " Test Suite: %s\n", ts->title);
      fprintf(stdout, " __________________________________________________________________\n");
      fprintf(stdout, "\n");
      fflush(stdout);
  
      /* iterate through all test cases */
      RING_FOREACH(tst, &ts->tests, ts_test_t, next) {
          cp = ts_suite_masprintf(" Test: %s ........................................"
                                  "........................................", tst->title);
          cp[60] = '\0';
          fprintf(stdout, "%s", cp);
          free(cp);
          fflush(stdout);
  
          /* init test case counters */
          test_checks        = 0;
          test_checks_failed = 0;
  
          /* run the test case function */
          tst->func(tst);
  
          /* iterate through all performed checks to determine status */
          RING_FOREACH(tstc, &tst->checks, tstc_t, next) {
              test_checks++;
              if (tstc->failed)
                  test_checks_failed++;
          }
  
          if (test_checks_failed > 0) {
              /* some checks failed, so do detailed reporting of test case */
              fprintf(stdout, " FAILED\n");
              fprintf(stdout, "       Ops, %d/%d checks failed! Detailed report follows:\n",
                      test_checks_failed, test_checks);
              RING_FOREACH(tstc, &tst->checks, tstc_t, next) {
                  file = (tstc->file != NULL ? tstc->file : tst->file);
                  line = (tstc->line != 0    ? tstc->line : tst->line);
                  if (file != NULL)
                      fprintf(stdout, "       Check: %s [%s:%d]\n", tstc->title, file, line);
                  else
                      fprintf(stdout, "       Check: %s\n", tstc->title);
                  RING_FOREACH(tstl, &tstc->logs, tstl_t, next) {
                      file = (tstl->file != NULL ? tstl->file : file);
                      line = (tstl->line != 0    ? tstl->line : line);
                      if (file != NULL)
                          fprintf(stdout, "              Log: %s [%s:%d]\n", tstl->text, file, line);
                      else
                          fprintf(stdout, "              Log: %s\n", tstl->text);
                  }
              }
          }
          else {
              /* test case ran successfully */
              fprintf(stdout, ".... OK\n");
          }
          fflush(stdout);
  
          /* accumulate counters */
          total_checks += test_checks;
          total_tests++;
          if (test_checks_failed > 0) {
              total_checks_failed += test_checks_failed;
              total_tests_suite_failed++;
          }
      }
  
      /* print test suite summary */
      fprintf(stdout, " __________________________________________________________________\n");
      fprintf(stdout, "\n");
      fprintf(stdout, " Test Summary: %d tests (%d ok, %d failed), %d checks (%d ok, %d failed)\n", 
              total_tests, (total_tests - total_tests_suite_failed), total_tests_suite_failed, 
              total_checks, (total_checks - total_checks_failed), total_checks_failed); 
      if (total_tests_suite_failed > 0)
          fprintf(stdout, " Test Suite: FAILED\n");
      else
          fprintf(stdout, " Test Suite: OK\n");
      fprintf(stdout, "\n");
      fflush(stdout);
  
      return total_checks_failed;
  }
  
  /* destroy test suite */
  void ts_suite_free(ts_suite_t *ts)
  {
      ts_test_t *tst;
      tstc_t *tstc;
      tstl_t *tstl;
  
      if (ts == NULL)
          return;
      RING_FOREACH(tst, &ts->tests, ts_test_t, next) {
          RING_FOREACH(tstc, &tst->checks, tstc_t, next) {
              RING_FOREACH(tstl, &tstc->logs, tstl_t, next) {
                  free(tstl->text);
              }
              free(tstc->title);
              free(tstc);
          }
          free(tst->title);
          free(tst);
      }
      free(ts->title);
      free(ts);
      return;
  }
  
  /* annotate test case with file name and line number */
  ts_test_t *ts_test_ctx(ts_test_t *tst, const char *file, int line)
  {
      if (tst != NULL && file != NULL) {
          tst->file = file;
          tst->line = line;
      }
      return tst;
  }
  
  /* annotate test case with check */
  void ts_test_check(ts_test_t *tst, const char *fmt, ...)
  {
      tstc_t *tstc;
      va_list ap;
  
      if (tst == NULL || fmt == NULL)
          return;
      if ((tstc = (tstc_t *)malloc(sizeof(tstc_t))) == NULL)
          return;
      va_start(ap, fmt);
      RING_ELEM_INIT(tstc, next);
      tstc->title = ts_suite_mvasprintf(fmt, ap);
      tstc->failed = 0;
      tstc->file = tst->file;
      tstc->line = tst->line;
      RING_INIT(&tstc->logs, tstl_t, next);
      RING_INSERT_TAIL(&tst->checks, tstc, tstc_t, next);
      va_end(ap);
      return;
  }
  
  /* annotate test case with log message and failure */
  void ts_test_fail(ts_test_t *tst, const char *fmt, ...)
  {
      tstc_t *tstc;
      tstl_t *tstl;
      va_list ap;
  
      if (tst == NULL || fmt == NULL)
          return;
      if ((tstl = (tstl_t *)malloc(sizeof(tstl_t))) == NULL)
          return;
      va_start(ap, fmt);
      tstl->text = ts_suite_mvasprintf(fmt, ap);
      tstl->file = tst->file;
      tstl->line = tst->line;
      RING_ELEM_INIT(tstl, next);
      tstc = RING_LAST(&tst->checks);
      RING_INSERT_TAIL(&tstc->logs, tstl, tstl_t, next);
      tstc->failed = 1;
      va_end(ap);
      return;
  }
  
  /* annotate test case with log message only */
  void ts_test_log(ts_test_t *tst, const char *fmt, ...)
  {
      tstc_t *tstc;
      tstl_t *tstl;
      va_list ap;
  
      if (tst == NULL || fmt == NULL)
          return;
      if ((tstl = (tstl_t *)malloc(sizeof(tstl_t))) == NULL)
          return;
      va_start(ap, fmt);
      tstl->text = ts_suite_mvasprintf(fmt, ap);
      tstl->file = tst->file;
      tstl->line = tst->line;
      RING_ELEM_INIT(tstl, next);
      tstc = RING_LAST(&tst->checks);
      RING_INSERT_TAIL(&tstc->logs, tstl, tstl_t, next);
      va_end(ap);
      return;
  }
  
  Index: ossp-pkg/al/ts.h
  ============================================================
  $ cvs update -p -r1.1 ts.h
  /*
  **  TS - OSSP Test Suite Library
  **  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP TS, a small test suite library which
  **  can be found at http://www.ossp.org/pkg/ts/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  ts.h: test suite library API
  */
  
  #ifndef _TS_H_
  #define _TS_H_
  
  /* test suite object type */
  struct ts_suite_st;
  typedef struct ts_suite_st ts_suite_t;
  
  /* test object type */
  struct ts_test_st;
  typedef struct ts_test_st ts_test_t;
  
  /* test callback function type */
  typedef void (*ts_test_cb_t)(ts_test_t *);
  
  /* test suite operations */
  ts_suite_t *ts_suite_new  (const char *fmt, ...);
  void        ts_suite_test (ts_suite_t *s, ts_test_cb_t func, const char *fmt, ...);
  int         ts_suite_run  (ts_suite_t *s);
  void        ts_suite_free (ts_suite_t *s);
  
  /* test operations */
  ts_test_t  *ts_test_ctx   (ts_test_t *t, const char *file, int line);
  void        ts_test_check (ts_test_t *t, const char *fmt, ...);
  void        ts_test_fail  (ts_test_t *t, const char *fmt, ...);
  void        ts_test_log   (ts_test_t *t, const char *fmt, ...);
  
  /* test suite short-cut macros */
  #define TS_TEST(name) \
      static void name(ts_test_t *_t)
  #define TS_CTX \
      ts_test_ctx(_t, __FILE__, __LINE__)
  
  #endif /* _TS_H_ */
  

From ossp-cvs-owner@ossp.org  Mon Dec 16 13:37:32 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8FD7C76310; Mon, 16 Dec 2002 13:37:32 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/al ChangeLog
Message-Id: <20021216123732.8FD7C76310@mail.ossp.org>
Date: Mon, 16 Dec 2002 13:37:32 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   16-Dec-2002 13:37:32
  Branch: HEAD                             Handle: 2002121612373200

  Added files:
    ossp-pkg/al             ChangeLog

  Log:
    dummy ChangeLog for initial release

  Summary:
    Revision    Changes     Path
    1.1         +14 -0      ossp-pkg/al/ChangeLog
  ____________________________________________________________________________

  Index: ossp-pkg/al/ChangeLog
  ============================================================
  $ cvs update -p -r1.1 ChangeLog
     _        ___  ____ ____  ____          _ 
    |_|_ _   / _ \/ ___/ ___||  _ \    __ _| |
    _|_||_| | | | \___ \___ \| |_) |  / _` | |
   |_||_|_| | |_| |___) |__) |  __/  | (_| | |
    |_|_|_|  \___/|____/____/|_|      \__,_|_|
                                     
    OSSP al - Assembly Line
  
    CHANGELOG
  
    This is a list of all changes to OSSP sa.
    For a more brief summary please have a look at the NEWS file.
  
    Initial release 0.9.0 (16-Dec-2002)

From ossp-cvs-owner@ossp.org  Mon Dec 16 13:39:32 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8AA2476310; Mon, 16 Dec 2002 13:39:32 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/al list.h
Message-Id: <20021216123932.8AA2476310@mail.ossp.org>
Date: Mon, 16 Dec 2002 13:39:32 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   16-Dec-2002 13:39:32
  Branch: HEAD                             Handle: 2002121612393200

  Added files:
    ossp-pkg/al             list.h

  Log:
    list management macros (also used as sio/list.h)

  Summary:
    Revision    Changes     Path
    1.1         +169 -0     ossp-pkg/al/list.h
  ____________________________________________________________________________

  Index: ossp-pkg/al/list.h
  ============================================================
  $ cvs update -p -r1.1 list.h
  /*
  **  OSSP al -- Assembly Line
  **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  **
  **  This file is part of OSSP al, an abstract datatype of a data buffer
  **  that can assemble, move and truncate data but avoids actual copying.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  list.h: generic double-linked list macros
  */
  
  #ifndef __LIST_H__
  #define __LIST_H__
  
  #define LIST(elem) \
      struct { elem *head, *tail; }
  #define NODE(elem) \
      struct { elem *next, *prev; }
  
  #define HEAD(q,l)       ((q)->l.head)
  #define TAIL(q,l)       ((q)->l.tail)
  #define NEXT(n,l)       ((n)->l.next)
  #define PREV(n,l)       ((n)->l.prev)
  
  #define ISEMPTY(q,l)    (HEAD(q,l) == NULL)
  
  #define LISTINIT(q,l) \
  do { \
      HEAD(q,l) = NULL; \
      TAIL(q,l) = NULL;  \
  } while(0)
  
  #define NODEINIT(n,l) \
  do { \
      NEXT(n,l) = NULL; \
      PREV(n,l) = NULL; \
  } while(0)
  
  #define ADDTAIL2(q,l,n1,n2) \
  do { \
      if (TAIL(q,l)) { \
          NEXT(TAIL(q,l),l) = (n1); \
          PREV(n1,l) = TAIL(q,l); \
      } else { \
          HEAD(q,l) = (n1); \
          PREV(n1,l) = NULL; \
      } \
      TAIL(q,l) = (n2); \
      NEXT(n2,l) = NULL; \
  } while (0)
  #define ADDTAIL(q,l,n) ADDTAIL2(q,l,n,n)
  
  #define ADDHEAD2(q,l,n1,n2) \
  do { \
      if (HEAD(q,l)) { \
          PREV(HEAD(q,l),l) = (n2); \
          NEXT(n2,l) = HEAD(q,l); \
      } else { \
          TAIL(q,l) = (n2); \
          NEXT(n2,l) = NULL; \
      } \
      HEAD(q,l) = (n1); \
      PREV(n1,l) = NULL; \
  } while (0)
  #define ADDHEAD(q,l,n) ADDHEAD2(q,l,n,n)
  
  #define REMHEAD(q,l,n) \
  do { \
      (n) = HEAD(q,l); \
      if (n) { \
          HEAD(q,l) = NEXT(n,l); \
          if (HEAD(q,l)) \
              PREV(HEAD(q,l),l) = NULL; \
          else \
              TAIL(q,l) = NULL; \
      } \
  } while(0)
  
  #define REMTAIL(q,l,n) \
  do { \
      (n) = TAIL(q,l); \
      if (n) { \
          TAIL(q,l) = PREV(n,l); \
          if (TAIL(q,l)) \
              NEXT(TAIL(q,l),l) = NULL; \
          else \
              HEAD(q,l) = NULL; \
      } \
  } while(0)
  
  #define REMOVE2(q,l,n1,n2) \
  do { \
      if (PREV(n1,l)) \
          NEXT(PREV(n1,l),l) = NEXT(n2,l); \
      else \
          HEAD(q,l) = NEXT(n2,l); \
      if (NEXT(n2,l)) \
          PREV(NEXT(n2,l),l) = PREV(n1,l); \
      else \
          TAIL(q,l) = PREV(n1,l); \
      NEXT(n2,l) = NULL; \
      PREV(n1,l) = NULL; \
  } while (0)
  #define REMOVE(q,l,n) REMOVE2(q,l,n,n)
  
  #define INSERT2(q,l,i,n1,n2) \
  do { \
      if (PREV(i,l)) { \
          NEXT(PREV(i,l),l) = (n1); \
      } else { \
          HEAD(q,l) = (n1); \
      } \
      PREV(n1,l) = PREV(i,l); \
      PREV(i,l) = (n2); \
      NEXT(n2,l) = (i); \
  } while (0)
  #define INSERT(q,l,i,n) INSERT2(q,l,i,n,n)
  
  #define APPENDLIST(q1,l,q2) \
  do { \
      if (TAIL(q1,l)) { \
          NEXT(TAIL(q1,l),l) = HEAD(q2,l); \
          PREV(HEAD(q2,l),l) = TAIL(q1,l); \
      } else { \
          HEAD(q1,l) = HEAD(q2,l); \
      } \
      TAIL(q1,l) = TAIL(q2,l); \
      LISTINIT(q2,l); \
  } while(0)
  
  #define INSERTLIST(q1,l,i,q2) \
  do { \
      if (PREV(i,l)) { \
          NEXT(PREV(i,l),l) = HEAD(q2,l); \
      } else { \
          HEAD(q1,l) = HEAD(q2,l); \
      } \
      PREV(HEAD(q2,l),l) = PREV(i,l); \
      NEXT(TAIL(q2,l),l) = (i); \
      PREV(i,l) = TAIL(q2,l); \
      LISTINIT(q2,l); \
  } while(0)
  
  #define FOREACH(q,l,n)    for (n = HEAD(q,l); n; n = NEXT(n,l))
  #define FOREACHR(q,l,n)   for (n = TAIL(q,l); n; n = PREV(n,l))
  #define FOREACHD(q,l,n,r) for (n = TAIL(q,l); n && (r = PREV(n,l), 1); n = r)
  
  #endif /* __LIST_H__ */
  

From ossp-cvs-owner@ossp.org  Mon Dec 16 14:33:25 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 90BB676310; Mon, 16 Dec 2002 14:33:24 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/al al_test.c
Message-Id: <20021216133324.90BB676310@mail.ossp.org>
Date: Mon, 16 Dec 2002 14:33:24 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   16-Dec-2002 14:33:24
  Branch: HEAD                             Handle: 2002121613332300

  Modified files:
    ossp-pkg/al             al_test.c

  Log:
    make it work

  Summary:
    Revision    Changes     Path
    1.2         +205 -112   ossp-pkg/al/al_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/al/al_test.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 al_test.c
  --- ossp-pkg/al/al_test.c	16 Dec 2002 12:24:52 -0000	1.1
  +++ ossp-pkg/al/al_test.c	16 Dec 2002 13:33:23 -0000	1.2
  @@ -13,7 +13,7 @@
   **  the above copyright notice and this permission notice appear in all
   **  copies.
   **
  -**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  THIS SOFTWARE IS PROVIDED ``AS IS"" AND ANY EXPRESSED OR IMPLIED
   **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
   **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
   **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  @@ -35,13 +35,8 @@
   
   #include <stdio.h>
   #include <stdlib.h>
  -#include <stdarg.h>
  -#include <time.h>
  -#include <sys/utsname.h>
  -#include <unistd.h>
  -#include <errno.h>
  -#include <sys/types.h>
  -#include <sys/wait.h>
  +#include <ctype.h>
  +#include <string.h>
   
   #include "ts.h"
   #include "al.h"
  @@ -52,54 +47,55 @@
   #define LABEL3 ((al_label_t)&label3)
   
   #define S(s) s, strlen(s)
  -#define RCHK(name, rc, rc0) \
  +
  +#define EVAL(name,rc,rc0,block) \
  +    ts_test_check(TS_CTX, name); \
  +    block \
       if (rc != rc0) \
           ts_test_fail(TS_CTX, "%s -> %d[%s] (expected %d[%s])\n", \
  -            rc, al_error(al), rc0, al_error(rc0))
  -#define CCHK(name, al) \
  +            rc, al_error(rc), rc0, al_error(rc0))
  +
  +#define CHECKLEN(name, al) \
       do { \
           size_t good, bad; \
  -        if (chklen(al, &good, &bad)) { \
  +        if (checklen(al, &good, &bad)) \
               ts_test_fail(TS_CTX, "%s -> corrupted length %d (expected %d)\n", \
                   good, bad); \
  -        } \
       } while (0)
   
  -static const char *fill(char *p, int n)
  -{
  -    static char buf[4 * 80 + 1];
  -    int max = sizeof(buf)-5;
  -    int k;
  -
  -    k=0;
  -    while (n > 0 && k < max) {
  -        if (isprint(*p)) {
  -            buf[k] = *p;
  -            k += 1;
  -        } else {
  -            sprintf(buf+k,"<%2.2x>",*p);
  -            k += 4;
  -        }
  -        ++p;
  -        --n;
  -    }
  -    buf[k] = '\0';
  +#define EVAL0(name,block) EVAL(name,rc,AL_OK,block)
  +#define EVAL1(name,al,block) EVAL(name,rc,AL_OK,block); CHECKLEN(name, al);
   
  -    return (const char *)buf;
  -}
  +#define CHECKLEN1(name, al, n) \
  +    do { \
  +        CHECKLEN(name, al);  \
  +        if (al_bytes(al) != (n)) \
  +            ts_test_fail(TS_CTX, "%s -> invalid length %d (expected %d)\n", \
  +                al_bytes(al), (n)); \
  +    } while (0)
   
   static int checklen(al_t *al, size_t *goodp, size_t *badp)
   {
  +    al_rc_t rc;
       al_tx_t *tx;
       al_chunk_t *cur;
       size_t total, total2;
   
       total = 0;
   
  -    al_txalloc(al, &tx);
  -    al_traverse(al, 0, al_bytes(al), AL_FORWARD, NULL, tx);
  +    rc = al_txalloc(al, &tx);
  +    if (rc != AL_OK)
  +        return -1;
  +
  +    rc = al_traverse(al, 0, al_bytes(al), AL_FORWARD, NULL, tx);
  +    if (rc != AL_OK) {
  +        al_txfree(al, tx);
  +        return -1;
  +    }
  +
       while (al_traverse_next(al, tx, &cur) == AL_OK)
           total += al_chunk_len(cur);
  +
       al_traverse_end(al, tx, 1);
       al_txfree(al, tx);
   
  @@ -121,13 +117,17 @@
       al_rc_t rc;
       al_t *al;
   
  -    rc = al_create(&al);
  -    RCHK('al_create',rc,AL_OK);
  -    rc = al_append_bytes(al, S("Hello world\n"));
  -    RCHK('al_append_bytes',rc,AL_OK);
  -    CCHK('al_append_bytes', al);
  -    rc = al_destroy(&al);
  -    RCHK('al_destroy',rc,AL_OK);
  +    EVAL0("al_create", {
  +        rc = al_create(&al);
  +    });
  +
  +    EVAL1("al_append_bytes", al, {
  +        rc = al_append_bytes(al, S("Hello world\n"), NULL);
  +    });
  +
  +    EVAL0("al_destroy", {
  +        rc = al_destroy(al);
  +    });
   }
   
   /* test: splicing */
  @@ -137,49 +137,59 @@
       al_t *src, *ins, *dst;
       int i;
   
  -    rc = al_create(&src);
  -    RCHK('al_create(&src)',rc,AL_OK);
  -    rc = al_create(&ins);
  -    RCHK('al_create(&ins)',rc,AL_OK);
  -    rc = al_create(&dst);
  -    RCHK('al_create(&dst)',rc,AL_OK);
  +    EVAL0("al_create(&src)", {
  +        rc = al_create(&src);
  +    });
  +    EVAL0("al_create(&ins)", {
  +        rc = al_create(&ins);
  +    });
  +    EVAL0("al_create(&dst)", {
  +        rc = al_create(&dst);
  +    });
   
       for (i=0; i<500; ++i) {
  -        rc = al_append_bytes(src, S("Huhu world\n"), LABEL);
  -        RCHK('al_append_bytes(src)',rc,AL_OK);
  +        EVAL1("al_append_bytes(&src)", src, {
  +            rc = al_append_bytes(src, S("Huhu world\n"), LABEL);
  +        });
       }
  -    rc = al_append_bytes(src, S("Goodbye world\n"), LABEL);
  -    RCHK('al_append_bytes(src)',rc,AL_OK);
  -    CCHK('al_append_bytes(src)',src);
  -    rc = al_append_bytes(src, S("Goodbye world\n"), LABEL2);
  -    RCHK('al_append_bytes(src)',rc,AL_OK);
  -    CCHK('al_append_bytes(src)',src);
  -    rc = al_prepend_bytes(src, S("Hello world\n"), LABEL2);
  -    RCHK('al_prepend_bytes(src)',rc,AL_OK);
  -    CCHK('al_prepend_bytes(src)',src);
  -    rc = al_prepend_bytes(src, S("Hello world\n"), LABEL);
  -    RCHK('al_prepend_bytes(src)',rc,AL_OK);
  -    CCHK('al_prepend_bytes(src)',src);
  -
  -    rc = al_prepend_bytes(ins, S("KICK "), LABEL3);
  -    RCHK('al_prepend_bytes(ins)',rc,AL_OK);
  -    CCHK('al_prepend_bytes(ins)',ins);
  -    rc = al_append_bytes(ins, S("ME\n"), LABEL3);
  -    RCHK('al_append_bytes(ins)',rc,AL_OK);
  -    CCHK('al_append_bytes(ins)',ins);
  -
  -    rc = al_splice(src, 4, 80, ins, dst);
  -    RCHK('al_splice',rc,AL_OK);
  -    CCHK('al_splice(src)',src);
  -    CCHK('al_splice(ins)',ins);
  -    CCHK('al_splice(dst)',dst);
  -
  -    rc = al_destroy(dst);
  -    RCHK('al_destroy(dst)',rc,AL_OK);
  -    rc = al_destroy(ins);
  -    RCHK('al_destroy(ins)',rc,AL_OK);
  -    rc = al_destroy(src);
  -    RCHK('al_destroy(src)',rc,AL_OK);
  +
  +    EVAL1("al_append_bytes(src)", src, {
  +        rc = al_append_bytes(src, S("Goodbye world\n"), LABEL);
  +    });
  +    EVAL1("al_append_bytes(src)", src, {
  +        rc = al_append_bytes(src, S("Goodbye world\n"), LABEL2);
  +    });
  +    EVAL1("al_prepend_byts(src)", src, {
  +        rc = al_prepend_bytes(src, S("Hello world\n"), LABEL2);
  +    });
  +    EVAL1("al_prepend_bytes(src)", src, {
  +        rc = al_prepend_bytes(src, S("Hello world\n"), LABEL);
  +
  +    });
  +
  +    EVAL1("al_prepend_bytes(ins)", ins, {
  +        rc = al_prepend_bytes(ins, S("KICK "), LABEL3);
  +    });
  +    EVAL1("al_append_bytes(ins)", ins, {
  +        rc = al_append_bytes(ins, S("ME\n"), LABEL3);
  +    });
  +
  +    EVAL0("al_splice", {
  +        rc = al_splice(src, 4, 80, ins, dst);
  +    });
  +    CHECKLEN1("al_splice(src)",src, 5480);
  +    CHECKLEN1("al_splice(ins)",ins, 0);
  +    CHECKLEN1("al_splice(dst)",dst, 80);
  +
  +    EVAL0("al_destroy(dst)", {
  +        rc = al_destroy(dst);
  +    });
  +    EVAL0("al_destroy(ins)", {
  +        rc = al_destroy(ins);
  +    });
  +    EVAL0("al_destroy(src)", {
  +        rc = al_destroy(src);
  +    });
   }
   
   /* test: labelling */
  @@ -187,25 +197,106 @@
   {
       al_rc_t rc;
       al_t *al;
  +    al_tx_t *tx;
  +    al_chunk_t *cur;
  +    int i, k;
  +    static struct { size_t len; int ln; } chunks[] = {
  +        { 5,  1 },
  +        { 2,  2 },
  +        { 2,  3 },
  +        { 5,  2 },
  +        { 14, 1 },
  +        { 0,  0 }
  +    };
  +    static al_label_t labels[] = {
  +        NULL,
  +        LABEL,
  +        LABEL2,
  +        LABEL3
  +    };
  +
  +    EVAL0("al_create", {
  +        rc = al_create(&al);
  +    });
  +    EVAL0("al_append_bytes", {
  +        rc = al_append_bytes(al, S("Hello world. Goodbye world.\n"), LABEL);
  +    });
  +
  +    /*
  +     * 28 chars LABEL
  +     */
  +
  +    EVAL1("al_setlabel", al, {
  +        rc = al_setlabel(al, 7, 2, NULL, LABEL3);
  +    });
  +
  +    /*
  +     * 7  chars LABEL
  +     * 2  chars LABEL3
  +     * 19 chars LABEL
  +     */
  +
  +    EVAL1("al_setlabel", al, {
  +        rc = al_setlabel(al, 5, 9, LABEL, LABEL2);
  +    });
  +
  +    /*
  +     * 5  chars LABEL
  +     * 2  chars LABEL2
  +     * 2  chars LABEL3
  +     * 5  chars LABEL2
  +     * 14 chars LABEL
  +     */
  +
  +    EVAL0("al_txalloc", {
  +        rc = al_txalloc(al, &tx);
  +    });
  +
  +    EVAL0("al_traverse", {
  +        rc = al_traverse(al, 0, al_bytes(al), AL_FORWARD, NULL, tx);
  +    });
  +
  +    i = 0;
  +    ts_test_check(TS_CTX, "al_traverse_next");
  +    while (al_traverse_next(al, tx, &cur) == AL_OK) {
  +        size_t n = al_chunk_len(cur);
  +        al_label_t l = al_chunk_label(cur);
  +
  +        for (k=3; k>0; --k)
  +            if (labels[k] == l)
  +                break;
  +
  +        if (chunks[i].len == 0) {
  +            ts_test_fail(TS_CTX,
  +                "al_traverse_next: found chunk %d[L%d] (none expected)\n",
  +                n, k);
  +            continue;
  +        }
   
  -    rc = al_create(&al);
  -    RCHK('al_create',rc,AL_OK);
  -    rc = al_append_bytes(&al, S("Hello world\n"), LABEL);
  -    RCHK('al_create',rc,AL_OK);
  -
  -    rc = al_setlabel(al, 7, 2, NULL, LABEL3);
  -    RCHK('al_setlabel',rc,AL_OK);
  -    CCHK('al_setlabel',al);
  -    rc = al_setlabel(al, 5, 9, NULL, LABEL2);
  -    CCHK('al_setlabel',al);
  +        if (n != chunks[i].len || k != chunks[i].ln) {
  +            ts_test_fail(TS_CTX,
  +                "al_traverse_next: found chunk %d[L%d] (expected %d[L%d])\n",
  +                n, k, chunks[i].len, chunks[i].ln);
  +        }
  +        ++i;
  +    }
   
  -    rc = al_destroy(al);
  -    RCHK('al_destroy(al)',rc,AL_OK);
  +    EVAL0("al_traverse_end", {
  +        rc = al_traverse_end(al, tx, 1);
  +    });
  +
  +    EVAL0("al_txfree", {
  +        rc = al_txfree(al, tx);
  +    });
  +
  +    EVAL0("al_destroy", {
  +        rc = al_destroy(al);
  +    });
   }
   
   /* test: attach */
   static char *reclaim_ptr = NULL;
  -static size_t *reclaim_size = 0;
  +static size_t reclaim_size = 0;
   static void *reclaim_u = NULL;
   static int reclaim_count = 0;
   static void reclaim(char *p, size_t n, void *u)
  @@ -221,11 +312,11 @@
       reclaim_size = n;
       reclaim_u    = u;
   }
  -static const char *reclaim_result(char *p, size_t n, void *u)
  +static const char *reclaim_result(const char *p, size_t n, void *u)
   {
       if (reclaim_count == 0)
           return "reclaim never called";
  -    if (reclaim_count > 0)
  +    if (reclaim_count > 1)
           return "repeated call";
   
       if (p != reclaim_ptr ||
  @@ -242,21 +333,23 @@
       al_t *al;
       char baf[] = "Mittendrin\n";
       char *context = "CONTEXT";
  -    char *mess;
  +    const char *mess;
   
  -    rc = al_create(&al);
  -    RCHK('al_create', rc, AL_OK);
  -    rc = al_append_bytes(al, S("Hello world\n"), NULL);
  -    RCHK('al_append_bytes', rc, AL_OK);
  -    CCHK('al_append_bytes', al);
  -    rc = al_attach_buffer(al, S(baf), NULL, reclaim, context);
  -    RCHK('al_attach_buffer', rc, AL_OK);
  -    CCHK('al_attach_buffer', al);
  -    rc = al_append_bytes(al, S("Goodbye world\n"), NULL);
  -    RCHK('al_append_bytes', rc, AL_OK);
  -    CCHK('al_append_bytes', al);
  -    rc = al_destroy(&al);
  -    RCHK('al_destroy', rc, AL_OK);
  +    EVAL0("al_create", {
  +        rc = al_create(&al);
  +    });
  +    EVAL1("al_append_bytes", al, {
  +        rc = al_append_bytes(al, S("Hello world\n"), NULL);
  +    });
  +    EVAL1("al_attach_buffer", al, {
  +        rc = al_attach_buffer(al, S(baf), NULL, reclaim, context);
  +    });
  +    EVAL1("al_append_bytes", al, {
  +        rc = al_append_bytes(al, S("Goodbye world\n"), NULL);
  +    });
  +    EVAL0("al_destroy", {
  +        rc = al_destroy(al);
  +    });
   
       mess = reclaim_result(S(baf), context);
       if (mess != NULL)

From ossp-cvs-owner@ossp.org  Mon Dec 16 14:35:58 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AD3D176310; Mon, 16 Dec 2002 14:35:58 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/al al_test.c
Message-Id: <20021216133558.AD3D176310@mail.ossp.org>
Date: Mon, 16 Dec 2002 14:35:58 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   16-Dec-2002 14:35:58
  Branch: HEAD                             Handle: 2002121613355800

  Modified files:
    ossp-pkg/al             al_test.c

  Log:
    bail out of test if al_create fails (who said memory leak ?)

  Summary:
    Revision    Changes     Path
    1.3         +8  -0      ossp-pkg/al/al_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/al/al_test.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 al_test.c
  --- ossp-pkg/al/al_test.c	16 Dec 2002 13:33:23 -0000	1.2
  +++ ossp-pkg/al/al_test.c	16 Dec 2002 13:35:58 -0000	1.3
  @@ -120,6 +120,7 @@
       EVAL0("al_create", {
           rc = al_create(&al);
       });
  +    if (rc != AL_OK) return;
   
       EVAL1("al_append_bytes", al, {
           rc = al_append_bytes(al, S("Hello world\n"), NULL);
  @@ -140,12 +141,15 @@
       EVAL0("al_create(&src)", {
           rc = al_create(&src);
       });
  +    if (rc != AL_OK) return;
       EVAL0("al_create(&ins)", {
           rc = al_create(&ins);
       });
  +    if (rc != AL_OK) return;
       EVAL0("al_create(&dst)", {
           rc = al_create(&dst);
       });
  +    if (rc != AL_OK) return;
   
       for (i=0; i<500; ++i) {
           EVAL1("al_append_bytes(&src)", src, {
  @@ -218,6 +222,8 @@
       EVAL0("al_create", {
           rc = al_create(&al);
       });
  +    if (rc != AL_OK) return;
  +
       EVAL0("al_append_bytes", {
           rc = al_append_bytes(al, S("Hello world. Goodbye world.\n"), LABEL);
       });
  @@ -338,6 +344,8 @@
       EVAL0("al_create", {
           rc = al_create(&al);
       });
  +    if (rc != AL_OK) return;
  +
       EVAL1("al_append_bytes", al, {
           rc = al_append_bytes(al, S("Hello world\n"), NULL);
       });

From ossp-cvs-owner@ossp.org  Mon Dec 16 14:42:13 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 75D7876310; Mon, 16 Dec 2002 14:42:13 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/al devtool.conf
Message-Id: <20021216134213.75D7876310@mail.ossp.org>
Date: Mon, 16 Dec 2002 14:42:13 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   16-Dec-2002 14:42:13
  Branch: HEAD                             Handle: 2002121613421300

  Modified files:
    ossp-pkg/al             devtool.conf

  Log:
    use ossp/ossp uid/gid when rolling tarball

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/al/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/al/devtool.conf
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.conf
  --- ossp-pkg/al/devtool.conf	16 Dec 2002 12:24:52 -0000	1.1
  +++ ossp-pkg/al/devtool.conf	16 Dec 2002 13:42:13 -0000	1.2
  @@ -34,7 +34,7 @@
       make distclean
       ./shtool fixperm -v .
       V=`./shtool version -l txt -d short VERSION`
  -    ./shtool tarball -o al-${V}.tar.gz -d al-${V} -u gnu -g al \
  +    ./shtool tarball -o al-${V}.tar.gz -d al-${V} -u ossp -g ossp \
                        -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*' -c 'gzip --best' .
       ls -l al-${V}.tar.gz
       gunzip <al-${V}.tar.gz | tar tvf - | head -10; echo "[...]"

From ossp-cvs-owner@ossp.org  Mon Dec 16 14:49:29 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7C2387630A; Mon, 16 Dec 2002 14:49:29 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/al configure.ac
Message-Id: <20021216134929.7C2387630A@mail.ossp.org>
Date: Mon, 16 Dec 2002 14:49:29 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   16-Dec-2002 14:49:29
  Branch: HEAD                             Handle: 2002121613492900

  Modified files:
    ossp-pkg/al             configure.ac

  Log:
    no local checks so far, disable macro

  Summary:
    Revision    Changes     Path
    1.2         +3  -2      ossp-pkg/al/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/al/configure.ac
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 configure.ac
  --- ossp-pkg/al/configure.ac	16 Dec 2002 12:24:52 -0000	1.1
  +++ ossp-pkg/al/configure.ac	16 Dec 2002 13:49:29 -0000	1.2
  @@ -42,8 +42,9 @@
   sinclude(libtool.m4)
   AC_PROG_LIBTOOL
   
  -sinclude(al.ac)
  -AL_CHECK_ALL
  +dnl ## local checks go here (not yet)
  +dnl sinclude(al.ac)
  +dnl AL_CHECK_ALL
   
   AC_CHECK_EXTLIB([OSSP ex], ex, __ex_ctx, ex.h,
                   [AC_DEFINE(WITH_EX, 1, [Define to 1 if building with OSSP ex])])

From ossp-cvs-owner@ossp.org  Mon Dec 16 14:50:21 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 123B17630A; Mon, 16 Dec 2002 14:50:20 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool ChangeLog THANKS sh.fixperm
Message-Id: <20021216135020.123B17630A@mail.ossp.org>
Date: Mon, 16 Dec 2002 14:50:20 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Dec-2002 14:50:20
  Branch: HEAD                             Handle: 2002121613502000

  Modified files:
    ossp-pkg/shtool         ChangeLog THANKS sh.fixperm

  Log:
    Changed 'shtool fixperm' to no longer set group writeability.

  Summary:
    Revision    Changes     Path
    1.178       +3  -0      ossp-pkg/shtool/ChangeLog
    1.27        +1  -0      ossp-pkg/shtool/THANKS
    1.15        +9  -9      ossp-pkg/shtool/sh.fixperm
  ____________________________________________________________________________

  Index: ossp-pkg/shtool/ChangeLog
  ============================================================
  $ cvs diff -u -r1.177 -r1.178 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	9 Dec 2002 10:42:13 -0000	1.177
  +++ ossp-pkg/shtool/ChangeLog	16 Dec 2002 13:50:20 -0000	1.178
  @@ -14,6 +14,9 @@
      *) Fixed description of "shtool install -C" operation in manual page.
         [Stefan Seefeld <stefan@fresco.org>]
   
  +   *) Changed "shtool fixperm" to no longer set group writeability.
  +      [Ralf S. Engelschall, Michael van Elst <mlelstv@serpens.de>]
  +
    Changes between 1.6.1 and 1.6.2 (12-Jul-2002 to 02-Nov-2002):
   
      *) Map "shtool install -d <dir> [...]" internally to "shtool mkdir
  Index: ossp-pkg/shtool/THANKS
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 THANKS
  --- ossp-pkg/shtool/THANKS	9 Dec 2002 10:42:13 -0000	1.26
  +++ ossp-pkg/shtool/THANKS	16 Dec 2002 13:50:20 -0000	1.27
  @@ -15,6 +15,7 @@
     o Denis Barbier            <barbier@imacs.polytechnique.fr>
     o Marcus Boerger           <marcus.boerger@t-online.de>
     o Alan Eldridge            <alane@geeksrus.net>
  +  o Michael van Elst         <mlelstv@serpens.de>
     o Scott R. Every           <scott@emji.net>
     o Daniel Richard G.        <straker@MIT.EDU>
     o Dean Gaudet              <dgaudet@arctic.org>
  Index: ossp-pkg/shtool/sh.fixperm
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 sh.fixperm
  --- ossp-pkg/shtool/sh.fixperm	31 Dec 2001 15:06:04 -0000	1.14
  +++ ossp-pkg/shtool/sh.fixperm	16 Dec 2002 13:50:20 -0000	1.15
  @@ -44,31 +44,31 @@
           if [ -f $file ]; then
               if [ $minusx $file ]; then
                   if [ ".$opt_v" = .yes ]; then
  -                    echo "-rwxrwxr-x $file" 2>&1
  +                    echo "-rwxr-xr-x $file" 2>&1
                   fi
                   if [ ".$opt_t" = .yes ]; then
  -                    echo "chmod 775 $file" 2>&1
  +                    echo "chmod 755 $file" 2>&1
                   fi
  -                chmod 775 $file
  +                chmod 755 $file
               else
                   if [ ".$opt_v" = .yes ]; then
  -                    echo "-rw-rw-r-- $file" 2>&1
  +                    echo "-rw-r--r-- $file" 2>&1
                   fi
                   if [ ".$opt_t" = .yes ]; then
  -                    echo "chmod 664 $file" 2>&1
  +                    echo "chmod 644 $file" 2>&1
                   fi
  -                chmod 664 $file
  +                chmod 644 $file
               fi
               continue
           fi
           if [ -d $file ]; then
               if [ ".$opt_v" = .yes ]; then
  -                echo "drwxrwxr-x $file" 2>&1
  +                echo "drwxr-xr-x $file" 2>&1
               fi
               if [ ".$opt_t" = .yes ]; then
  -                echo "chmod 775 $file" 2>&1
  +                echo "chmod 755 $file" 2>&1
               fi
  -            chmod 775 $file
  +            chmod 755 $file
               continue
           fi
           if [ ".$opt_v" = .yes ]; then

From ossp-cvs-owner@ossp.org  Mon Dec 16 14:52:28 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7A8AC76507; Mon, 16 Dec 2002 14:52:28 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT modules
Message-Id: <20021216135228.7A8AC76507@mail.ossp.org>
Date: Mon, 16 Dec 2002 14:52:28 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: CVSROOT                          Date:   16-Dec-2002 14:52:28
  Branch: HEAD                             Handle: 2002121613522700

  Modified files:
    CVSROOT                 modules

  Log:
    add OSSP al

  Summary:
    Revision    Changes     Path
    1.63        +1  -0      CVSROOT/modules
  ____________________________________________________________________________

  Index: CVSROOT/modules
  ============================================================
  $ cvs diff -u -r1.62 -r1.63 modules
  --- CVSROOT/modules	2 Dec 2002 10:01:49 -0000	1.62
  +++ CVSROOT/modules	16 Dec 2002 13:52:27 -0000	1.63
  @@ -84,6 +84,7 @@
   uuidgen         ossp-pkg/uuidgen
   sio             ossp-pkg/sio
   sorp            ossp-pkg/sorp
  +al              ossp-pkg/al
   
   #   the OSSP applications
   eperl           ossp-pkg/eperl

From ossp-cvs-owner@ossp.org  Mon Dec 16 15:02:47 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B813A76310; Mon, 16 Dec 2002 15:02:46 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/al Makefile.in README al-config.in al.banner al.c...
Message-Id: <20021216140246.B813A76310@mail.ossp.org>
Date: Mon, 16 Dec 2002 15:02:46 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Dec-2002 15:02:46
  Branch: HEAD                             Handle: 197001010100001040043765

  Modified files:
    ossp-pkg/al             Makefile.in README al-config.in al.c al.h al.pod
                            al_test.c configure.ac devtool.conf
  Removed files:
    ossp-pkg/al             al.banner

  Log:
    post-adjustments to source tree

  Summary:
    Revision    Changes     Path
    1.2         +2  -1      ossp-pkg/al/Makefile.in
    1.2         +2  -0      ossp-pkg/al/README
    1.2         +2  -1      ossp-pkg/al/al-config.in
    NONE        +0  -7      ossp-pkg/al/al.banner
    1.2         +2  -1      ossp-pkg/al/al.c
    1.2         +2  -1      ossp-pkg/al/al.h
    1.2         +4  -1      ossp-pkg/al/al.pod
    1.4         +2  -1      ossp-pkg/al/al_test.c
    1.3         +2  -1      ossp-pkg/al/configure.ac
    1.3         +1  -1      ossp-pkg/al/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/al/Makefile.in
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 Makefile.in
  --- ossp-pkg/al/Makefile.in	16 Dec 2002 12:24:52 -0000	1.1
  +++ ossp-pkg/al/Makefile.in	16 Dec 2002 14:02:45 -0000	1.2
  @@ -6,7 +6,8 @@
   ##  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
   ##
   ##  This file is part of OSSP al, an abstract datatype of a data buffer
  -##  that can assemble, move and truncate data but avoids actual copying.
  +##  that can assemble, move and truncate data but avoids actual copying
  +##  and which can be found at http://www.ossp.org/pkg/lib/al/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/al/README
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 README
  --- ossp-pkg/al/README	16 Dec 2002 12:24:52 -0000	1.1
  +++ ossp-pkg/al/README	16 Dec 2002 14:02:45 -0000	1.2
  @@ -9,6 +9,8 @@
   
     ABSTRACT
   
  +  ...FIXME...
  +
     COPYRIGHT AND LICENSE
   
     Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  Index: ossp-pkg/al/al-config.in
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 al-config.in
  --- ossp-pkg/al/al-config.in	16 Dec 2002 12:24:52 -0000	1.1
  +++ ossp-pkg/al/al-config.in	16 Dec 2002 14:02:45 -0000	1.2
  @@ -7,7 +7,8 @@
   ##  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
   ##
   ##  This file is part of OSSP al, an abstract datatype of a data buffer
  -##  that can assemble, move and truncate data but avoids actual copying.
  +##  that can assemble, move and truncate data but avoids actual copying
  +##  and which can be found at http://www.ossp.org/pkg/lib/al/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
    Index: ossp-pkg/al/al.c
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 al.c
  --- ossp-pkg/al/al.c	16 Dec 2002 12:24:52 -0000	1.1
  +++ ossp-pkg/al/al.c	16 Dec 2002 14:02:45 -0000	1.2
  @@ -6,7 +6,8 @@
   **  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
   **
   **  This file is part of OSSP al, an abstract datatype of a data buffer
  -**  that can assemble, move and truncate data but avoids actual copying.
  +**  that can assemble, move and truncate data but avoids actual copying
  +**  and which can be found at http://www.ossp.org/pkg/lib/al/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/al/al.h
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 al.h
  --- ossp-pkg/al/al.h	16 Dec 2002 12:24:52 -0000	1.1
  +++ ossp-pkg/al/al.h	16 Dec 2002 14:02:45 -0000	1.2
  @@ -6,7 +6,8 @@
   **  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
   **
   **  This file is part of OSSP al, an abstract datatype of a data buffer
  -**  that can assemble, move and truncate data but avoids actual copying.
  +**  that can assemble, move and truncate data but avoids actual copying
  +**  and which can be found at http://www.ossp.org/pkg/lib/al/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/al/al.pod
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 al.pod
  --- ossp-pkg/al/al.pod	16 Dec 2002 12:24:52 -0000	1.1
  +++ ossp-pkg/al/al.pod	16 Dec 2002 14:02:45 -0000	1.2
  @@ -6,7 +6,8 @@
   ##  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
   ##
   ##  This file is part of OSSP al, an abstract datatype of a data buffer
  -##  that can assemble, move and truncate data but avoids actual copying.
  +##  that can assemble, move and truncate data but avoids actual copying
  +##  and which can be found at http://www.ossp.org/pkg/lib/al/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  @@ -96,6 +97,8 @@
   
   B<OSSP al> defines an abstract type of a data buffer that can
   assemble, move and truncate data but avoids actual copying.
  +
  +...FIXME....
   
   It provides the following key features:
   
  Index: ossp-pkg/al/al_test.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 al_test.c
  --- ossp-pkg/al/al_test.c	16 Dec 2002 13:35:58 -0000	1.3
  +++ ossp-pkg/al/al_test.c	16 Dec 2002 14:02:45 -0000	1.4
  @@ -6,7 +6,8 @@
   **  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
   **
   **  This file is part of OSSP al, an abstract datatype of a data buffer
  -**  that can assemble, move and truncate data but avoids actual copying.
  +**  that can assemble, move and truncate data but avoids actual copying
  +**  and which can be found at http://www.ossp.org/pkg/lib/al/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/al/configure.ac
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 configure.ac
  --- ossp-pkg/al/configure.ac	16 Dec 2002 13:49:29 -0000	1.2
  +++ ossp-pkg/al/configure.ac	16 Dec 2002 14:02:45 -0000	1.3
  @@ -6,7 +6,8 @@
   dnl ##  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
   dnl ##
   dnl ##  This file is part of OSSP al, an abstract datatype of a data buffer
  -dnl ##  that can assemble, move and truncate data but avoids actual copying.
  +dnl ##  that can assemble, move and truncate data but avoids actual copying
  +dnl ##  and which can be found at http://www.ossp.org/pkg/lib/al/.
   dnl ##
   dnl ##  Permission to use, copy, modify, and distribute this software for
   dnl ##  any purpose with or without fee is hereby granted, provided that
  Index: ossp-pkg/al/devtool.conf
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.conf
  --- ossp-pkg/al/devtool.conf	16 Dec 2002 13:42:13 -0000	1.2
  +++ ossp-pkg/al/devtool.conf	16 Dec 2002 14:02:45 -0000	1.3
  @@ -26,7 +26,7 @@
       mv README.n README
   
   %dist
  -    rm -f sa-*.tar.gz
  +    rm -f al-*.tar.gz
       ./devtool autoclean
       ./devtool autogen
       ./configure

From ossp-cvs-owner@ossp.org  Mon Dec 16 15:33:27 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C79B976310; Mon, 16 Dec 2002 15:33:26 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/al .cvsignore README al.pod devtool.conf
Message-Id: <20021216143326.C79B976310@mail.ossp.org>
Date: Mon, 16 Dec 2002 15:33:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Dec-2002 15:33:26
  Branch: HEAD                             Handle: 2002121614332600

  Added files:
    ossp-pkg/al             .cvsignore
  Modified files:
    ossp-pkg/al             README al.pod devtool.conf

  Log:
    more source tree polishing

  Summary:
    Revision    Changes     Path
    1.1         +11 -0      ossp-pkg/al/.cvsignore
    1.3         +9  -3      ossp-pkg/al/README
    1.3         +7  -10     ossp-pkg/al/al.pod
    1.4         +1  -1      ossp-pkg/al/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/al/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  Makefile
  al-config
  al_test
  config.guess
  config.h
  config.h.in
  config.sub
  configure
  libtool.m4
  ltmain.sh
  shtool
  Index: ossp-pkg/al/README
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 README
  --- ossp-pkg/al/README	16 Dec 2002 14:02:45 -0000	1.2
  +++ ossp-pkg/al/README	16 Dec 2002 14:33:26 -0000	1.3
  @@ -5,11 +5,17 @@
     |_|_|_|  \___/|____/____/|_|      \__,_|_|
                                      
     OSSP al - Assembly Line
  -  Version 
  +  Version 0.9.0 (16-Dec-2002)
   
     ABSTRACT
   
  -  ...FIXME...
  +  OSSP al defines an abstract data type of a data buffer that can
  +  assemble, move and truncate chunks of data in a stream but avoids
  +  actual copying. It was built to deal efficiently with communication
  +  streams between software modules. It especially provides flexible
  +  semantical data attribution through by-chunk labeling. It also
  +  has convenient chunk traversal methods and optional OSSP ex based
  +  exception handling.
   
     COPYRIGHT AND LICENSE
   
  @@ -18,7 +24,7 @@
     Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
     Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
   
  -  This file is part of OSSP al, an abstract datatype of a data buffer
  +  This file is part of OSSP al, an abstract data type of a data buffer
     that can assemble, move and truncate data but avoids actual copying.
   
     Permission to use, copy, modify, and distribute this software for
  Index: ossp-pkg/al/al.pod
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 al.pod
  --- ossp-pkg/al/al.pod	16 Dec 2002 14:02:45 -0000	1.2
  +++ ossp-pkg/al/al.pod	16 Dec 2002 14:33:26 -0000	1.3
  @@ -95,16 +95,13 @@
   
   =head1 DESCRIPTION
   
  -B<OSSP al> defines an abstract type of a data buffer that can
  -assemble, move and truncate data but avoids actual copying.
  -
  -...FIXME....
  -
  -It provides the following key features:
  -
  -=over 4
  -
  -=back
  +B<OSSP al> defines an abstract data type of a data buffer that can
  +assemble, move and truncate chunks of data in a stream but avoids
  +actual copying. It was built to deal efficiently with communication
  +streams between software modules. It especially provides flexible
  +semantical data attribution through by-chunk labeling. It also
  +has convenient chunk traversal methods and optional OSSP ex based
  +exception handling.
   
   =head1 DATA TYPES
   
  Index: ossp-pkg/al/devtool.conf
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.conf
  --- ossp-pkg/al/devtool.conf	16 Dec 2002 14:02:45 -0000	1.3
  +++ ossp-pkg/al/devtool.conf	16 Dec 2002 14:33:26 -0000	1.4
  @@ -22,7 +22,7 @@
   %version
       ./shtool version -l txt -n "OSSP al" -e VERSION
       V=`./shtool version -l txt -d long VERSION`
  -    sed -e "s/Version .*(.*)/Version $V/g" <README >README.n
  +    sed -e "s/Version .*/Version $V/g" <README >README.n
       mv README.n README
   
   %dist

From ossp-cvs-owner@ossp.org  Mon Dec 16 15:34:56 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 619ED76310; Mon, 16 Dec 2002 15:34:56 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/al .cvsignore devtool.conf
Message-Id: <20021216143456.619ED76310@mail.ossp.org>
Date: Mon, 16 Dec 2002 15:34:56 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Dec-2002 15:34:56
  Branch: HEAD                             Handle: 2002121614345500

  Modified files:
    ossp-pkg/al             .cvsignore devtool.conf

  Log:
    even more polishing

  Summary:
    Revision    Changes     Path
    1.2         +1  -0      ossp-pkg/al/.cvsignore
    1.5         +2  -2      ossp-pkg/al/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/al/.cvsignore
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 .cvsignore
  --- ossp-pkg/al/.cvsignore	16 Dec 2002 14:33:26 -0000	1.1
  +++ ossp-pkg/al/.cvsignore	16 Dec 2002 14:34:55 -0000	1.2
  @@ -9,3 +9,4 @@
   libtool.m4
   ltmain.sh
   shtool
  +al.3
  Index: ossp-pkg/al/devtool.conf
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 devtool.conf
  --- ossp-pkg/al/devtool.conf	16 Dec 2002 14:33:26 -0000	1.4
  +++ ossp-pkg/al/devtool.conf	16 Dec 2002 14:34:55 -0000	1.5
  @@ -34,7 +34,7 @@
       make distclean
       ./shtool fixperm -v .
       V=`./shtool version -l txt -d short VERSION`
  -    ./shtool tarball -o al-${V}.tar.gz -d al-${V} -u ossp -g ossp \
  +    ./shtool tarball -o al-${V}.tar.gz -d al-${V} -u ossp -g al \
                        -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*' -c 'gzip --best' .
       ls -l al-${V}.tar.gz
       gunzip <al-${V}.tar.gz | tar tvf - | head -10; echo "[...]"
  @@ -49,7 +49,7 @@
       make distclean
       ./shtool fixperm -v .
       D=`date '+%Y%m%d'`
  -    ./shtool tarball -o al-SNAP-${D}.tar.gz -d al-SNAP-${D} -u gnu -g al \
  +    ./shtool tarball -o al-SNAP-${D}.tar.gz -d al-SNAP-${D} -u ossp -g al \
                        -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*' -c 'gzip --best' .
       ls -l al-SNAP-${D}.tar.gz
       gunzip <al-SNAP-${D}.tar.gz | tar tvf - | head -10; echo "[...]"

From ossp-cvs-owner@ossp.org  Mon Dec 16 15:37:37 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DEEB576310; Mon, 16 Dec 2002 15:37:36 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new news.txt ossp-web/pkg/lib/al .cvsignore index...
Message-Id: <20021216143736.DEEB576310@mail.ossp.org>
Date: Mon, 16 Dec 2002 15:37:36 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   16-Dec-2002 15:37:36
  Branch: HEAD                             Handle: 2002121614373501

  Added files:
    ossp-web/pkg/lib/al     .cvsignore index.wml
  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml

  Log:
    release OSSP al 0.9.0

  Summary:
    Revision    Changes     Path
    1.37        +1  -0      ossp-web/new/news.txt
    1.1         +1  -0      ossp-web/pkg/lib/al/.cvsignore
    1.1         +45 -0      ossp-web/pkg/lib/al/index.wml
    1.39        +3  -0      ossp-web/pkg/lib/index.wml
  ____________________________________________________________________________

  Index: ossp-web/new/news.txt
  ============================================================
  $ cvs diff -u -r1.36 -r1.37 news.txt
  --- ossp-web/new/news.txt	4 Dec 2002 14:25:42 -0000	1.36
  +++ ossp-web/new/news.txt	16 Dec 2002 14:37:35 -0000	1.37
  @@ -1,3 +1,4 @@
  +16-Dec-2002: Released L<OSSP al> 0.9.0
   04-Dec-2002: Released L<GNU pth> 2.0b2
   04-Dec-2002: Released L<OSSP sa> 1.0.2
   09-Nov-2002: Released L<OSSP fsl> 1.0.6
  Index: ossp-web/pkg/lib/al/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  *.html
  Index: ossp-web/pkg/lib/al/index.wml
  ============================================================
  $ cvs update -p -r1.1 index.wml
  
  #use wml::ossp area=pkg:lib subarea=al
  
  <title>OSSP al</title>
  
  <h1>Assembly Line</h1>
  
  <h2>Abstract</h2>
  
  <b>OSSP</b> defines an abstract data type of a data buffer that can assemble,
  move and truncate chunks of data in a stream but avoids actual copying. It was
  built to deal efficiently with communication streams between software modules.
  It especially provides flexible semantical data attribution through by-chunk
  labeling. It also has convenient chunk traversal methods and optional OSSP ex
  based exception handling.
  
  <h2>Documentation</h2>
  
  <pkg_manpage name="al" sect=3 path="/pkg/lib/al/al.pod">,
  
  <h2>Authors</h2>
  
  <pkg_author name="Michael van Elst" mail="mlelstv@dev.de.cw.net">
  
  <h2>Status</h2>
  
  <pkg_status
      name="al" assign="rse"
      stable="none" stable_date="none"
      unstable="0.9.0" unstable_date="16-Dec-2002"
  	done=95>
  
  <h2>Source</h2>
  
  <pkg_files 
      cvs=$(CVS_ROOT_URL)/pkg/lib/al/
      url=$(FTP_ROOT_URL)/pkg/lib/al/
      directory=$(FTP_ROOT_DIR)/pkg/lib/al/
      files="al-*.tar.gz" 
  	stable="none" unstable="al-0\.9\.0.tar.gz">
  	
  <h2>Donation</h2>
  
  <pkg_donation name="al" return="$(BASE_URL)/pkg/lib/al/">
  
  Index: ossp-web/pkg/lib/index.wml
  ============================================================
  $ cvs diff -u -r1.38 -r1.39 index.wml
  --- ossp-web/pkg/lib/index.wml	4 Dec 2002 14:25:42 -0000	1.38
  +++ ossp-web/pkg/lib/index.wml	16 Dec 2002 14:37:35 -0000	1.39
  @@ -43,6 +43,9 @@
     <pkg_item name="l2" longname="OSSP l2" type="lib"
               desc="Flexible Logging"
   			done=95 stable=none unstable=0.9.1>
  +  <pkg_item name="al" longname="OSSP al" type="lib"
  +            desc="Assembly Line"
  +			done=95 stable=none unstable=0.9.0>
     <pkg_item name="cfg" longname="OSSP cfg" type="lib"
               desc="Configuration Parsing"
   			done=95 stable=none unstable=0.9.0>

From ossp-cvs-owner@ossp.org  Mon Dec 16 15:46:53 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2727D76308; Mon, 16 Dec 2002 15:46:53 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/al al_test.c
Message-Id: <20021216144653.2727D76308@mail.ossp.org>
Date: Mon, 16 Dec 2002 15:46:53 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   16-Dec-2002 15:46:52
  Branch: HEAD                             Handle: 2002121614465200

  Modified files:
    ossp-pkg/al             al_test.c

  Log:
    fix cut&paste error for WITH_EX case

  Summary:
    Revision    Changes     Path
    1.5         +2  -2      ossp-pkg/al/al_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/al/al_test.c
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 al_test.c
  --- ossp-pkg/al/al_test.c	16 Dec 2002 14:02:45 -0000	1.4
  +++ ossp-pkg/al/al_test.c	16 Dec 2002 14:46:52 -0000	1.5
  @@ -368,7 +368,7 @@
   /* test: exception handling */
   #ifdef WITH_EX
   #include "ex.h"
  -TS_TEST(test_sa_ex)
  +TS_TEST(test_al_ex)
   {
       volatile al_t *al;
       ex_t ex;
  @@ -386,7 +386,7 @@
           if (al != NULL) al_destroy(&al);
       }
       ex_catch (ex) {
  -        if ((sa_rc_t)ex.ex_value != AL_ERR_EOF)
  +        if ((al_rc_t)ex.ex_value != AL_ERR_EOF)
               ts_test_fail(TS_CTX, "unexpected exception: %d\n", (al_rc_t)ex.ex_value);
           caught = 1;
       }

From ossp-cvs-owner@ossp.org  Mon Dec 16 15:59:29 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 709BF76308; Mon, 16 Dec 2002 15:59:29 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/al al.c
Message-Id: <20021216145929.709BF76308@mail.ossp.org>
Date: Mon, 16 Dec 2002 15:59:29 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   16-Dec-2002 15:59:29
  Branch: HEAD                             Handle: 2002121614592900

  Modified files:
    ossp-pkg/al             al.c

  Log:
    add autoconfig header to propagate --with-ex

  Summary:
    Revision    Changes     Path
    1.3         +5  -0      ossp-pkg/al/al.c
  ____________________________________________________________________________

  Index: ossp-pkg/al/al.c
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 al.c
  --- ossp-pkg/al/al.c	16 Dec 2002 14:02:45 -0000	1.2
  +++ ossp-pkg/al/al.c	16 Dec 2002 14:59:29 -0000	1.3
  @@ -30,6 +30,11 @@
   **  al.c: assembly line library implementation
   */
   
  +/* include optional Autoconf header */
  +#ifdef HAVE_CONFIG_H
  +#include "config.h"
  +#endif
  +
   #include <stddef.h>
   #include <stdlib.h>
   #include <string.h>

From ossp-cvs-owner@ossp.org  Mon Dec 16 16:02:16 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 24C3576310; Mon, 16 Dec 2002 16:02:15 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/al al_test.c
Message-Id: <20021216150215.24C3576310@mail.ossp.org>
Date: Mon, 16 Dec 2002 16:02:15 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Dec-2002 16:02:14
  Branch: HEAD                             Handle: 2002121615021400

  Modified files:
    ossp-pkg/al             al_test.c

  Log:
    do not touch disclaimer messages in any way

  Summary:
    Revision    Changes     Path
    1.6         +1  -1      ossp-pkg/al/al_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/al/al_test.c
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 al_test.c
  --- ossp-pkg/al/al_test.c	16 Dec 2002 14:46:52 -0000	1.5
  +++ ossp-pkg/al/al_test.c	16 Dec 2002 15:02:14 -0000	1.6
  @@ -14,7 +14,7 @@
   **  the above copyright notice and this permission notice appear in all
   **  copies.
   **
  -**  THIS SOFTWARE IS PROVIDED ``AS IS"" AND ANY EXPRESSED OR IMPLIED
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
   **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
   **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR

From ossp-cvs-owner@ossp.org  Mon Dec 16 16:03:19 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0723776310; Mon, 16 Dec 2002 16:03:18 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/al al_test.c
Message-Id: <20021216150318.0723776310@mail.ossp.org>
Date: Mon, 16 Dec 2002 16:03:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   16-Dec-2002 16:03:18
  Branch: HEAD                             Handle: 2002121615031800

  Modified files:
    ossp-pkg/al             al_test.c

  Log:
    more fixes for WITH_EX case

  Summary:
    Revision    Changes     Path
    1.7         +3  -3      ossp-pkg/al/al_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/al/al_test.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 al_test.c
  --- ossp-pkg/al/al_test.c	16 Dec 2002 15:02:14 -0000	1.6
  +++ ossp-pkg/al/al_test.c	16 Dec 2002 15:03:18 -0000	1.7
  @@ -376,14 +376,14 @@
   
       ts_test_check(TS_CTX, "exception handling");
       caught = 0;
  +    al = NULL;
       ex_try {
  -        al = NULL;
           al_create(&al);
  -        al_append_bytes(&al, S("DUMMYDUMMY"), NULL);
  +        al_append_bytes(al, S("DUMMYDUMMY"), NULL);
           al_splice(al, 50, 1, NULL, NULL);
       }
       ex_cleanup {
  -        if (al != NULL) al_destroy(&al);
  +        if (al != NULL) al_destroy(al);
       }
       ex_catch (ex) {
           if ((al_rc_t)ex.ex_value != AL_ERR_EOF)

From ossp-cvs-owner@ossp.org  Mon Dec 16 16:14:10 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 15CE576354; Mon, 16 Dec 2002 16:14:10 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/al ChangeLog README VERSION
Message-Id: <20021216151410.15CE576354@mail.ossp.org>
Date: Mon, 16 Dec 2002 16:14:10 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   16-Dec-2002 16:14:09
  Branch: HEAD                             Handle: 2002121615140900

  Modified files:
    ossp-pkg/al             ChangeLog README VERSION

  Log:
    bump version number, add to ChangeLog

  Summary:
    Revision    Changes     Path
    1.2         +6  -0      ossp-pkg/al/ChangeLog
    1.4         +1  -1      ossp-pkg/al/README
    1.2         +1  -1      ossp-pkg/al/VERSION
  ____________________________________________________________________________

  Index: ossp-pkg/al/ChangeLog
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 ChangeLog
  --- ossp-pkg/al/ChangeLog	16 Dec 2002 12:37:32 -0000	1.1
  +++ ossp-pkg/al/ChangeLog	16 Dec 2002 15:14:09 -0000	1.2
  @@ -11,4 +11,10 @@
     This is a list of all changes to OSSP sa.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 0.9.0 and 0.9.1 (16-Dec-2002 to 16-Dec-2002)
  +
  +   o Fixed ex support in al_test
  +
  +   o Proper inclusion of autoconf headers
  +
     Initial release 0.9.0 (16-Dec-2002)
  Index: ossp-pkg/al/README
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 README
  --- ossp-pkg/al/README	16 Dec 2002 14:33:26 -0000	1.3
  +++ ossp-pkg/al/README	16 Dec 2002 15:14:09 -0000	1.4
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \__,_|_|
                                      
     OSSP al - Assembly Line
  -  Version 0.9.0 (16-Dec-2002)
  +  Version 0.9.1 (16-Dec-2002)
   
     ABSTRACT
   
  Index: ossp-pkg/al/VERSION
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 VERSION
  --- ossp-pkg/al/VERSION	16 Dec 2002 12:24:52 -0000	1.1
  +++ ossp-pkg/al/VERSION	16 Dec 2002 15:14:09 -0000	1.2
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP al (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP al, Version 0.9.0 (16-Dec-2002)
  +  This is OSSP al, Version 0.9.1 (16-Dec-2002)
   

From ossp-cvs-owner@ossp.org  Mon Dec 16 16:53:54 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 87B7876308; Mon, 16 Dec 2002 16:53:53 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new news.txt ossp-web/pkg/lib/al index.wml ossp-w...
Message-Id: <20021216155353.87B7876308@mail.ossp.org>
Date: Mon, 16 Dec 2002 16:53:53 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   16-Dec-2002 16:53:53
  Branch: HEAD                             Handle: 2002121615535101

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/al     index.wml

  Log:
    release OSSP al 0.9.1

  Summary:
    Revision    Changes     Path
    1.38        +1  -0      ossp-web/new/news.txt
    1.2         +2  -2      ossp-web/pkg/lib/al/index.wml
    1.40        +1  -1      ossp-web/pkg/lib/index.wml
  ____________________________________________________________________________

  Index: ossp-web/new/news.txt
  ============================================================
  $ cvs diff -u -r1.37 -r1.38 news.txt
  --- ossp-web/new/news.txt	16 Dec 2002 14:37:35 -0000	1.37
  +++ ossp-web/new/news.txt	16 Dec 2002 15:53:51 -0000	1.38
  @@ -1,3 +1,4 @@
  +16-Dec-2002: Released L<OSSP al> 0.9.1
   16-Dec-2002: Released L<OSSP al> 0.9.0
   04-Dec-2002: Released L<GNU pth> 2.0b2
   04-Dec-2002: Released L<OSSP sa> 1.0.2
  Index: ossp-web/pkg/lib/al/index.wml
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/lib/al/index.wml	16 Dec 2002 14:37:36 -0000	1.1
  +++ ossp-web/pkg/lib/al/index.wml	16 Dec 2002 15:53:52 -0000	1.2
  @@ -27,7 +27,7 @@
   <pkg_status
       name="al" assign="rse"
       stable="none" stable_date="none"
  -    unstable="0.9.0" unstable_date="16-Dec-2002"
  +    unstable="0.9.1" unstable_date="16-Dec-2002"
   	done=95>
   
   <h2>Source</h2>
  @@ -37,7 +37,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/al/
       directory=$(FTP_ROOT_DIR)/pkg/lib/al/
       files="al-*.tar.gz" 
  -	stable="none" unstable="al-0\.9\.0.tar.gz">
  +	stable="none" unstable="al-0.9.1.tar.gz">
   	
   <h2>Donation</h2>
   
  Index: ossp-web/pkg/lib/index.wml
  ============================================================
  $ cvs diff -u -r1.39 -r1.40 index.wml
  --- ossp-web/pkg/lib/index.wml	16 Dec 2002 14:37:35 -0000	1.39
  +++ ossp-web/pkg/lib/index.wml	16 Dec 2002 15:53:52 -0000	1.40
  @@ -45,7 +45,7 @@
   			done=95 stable=none unstable=0.9.1>
     <pkg_item name="al" longname="OSSP al" type="lib"
               desc="Assembly Line"
  -			done=95 stable=none unstable=0.9.0>
  +			done=95 stable=none unstable=0.9.1>
     <pkg_item name="cfg" longname="OSSP cfg" type="lib"
               desc="Configuration Parsing"
   			done=95 stable=none unstable=0.9.0>

From ossp-cvs-owner@ossp.org  Tue Dec 17 14:43:20 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 76CDF76316; Tue, 17 Dec 2002 14:43:20 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al.c al.h al.pod al_test.c
Message-Id: <20021217134320.76CDF76316@mail.ossp.org>
Date: Tue, 17 Dec 2002 14:43:20 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   17-Dec-2002 14:43:20
  Branch: HEAD                             Handle: 1970010101000000

  Removed files:
    ossp-pkg/sio            al.c al.h al.pod al_test.c

  Log:
    moved into its own al project

  Summary:
    Revision    Changes     Path
    NONE        +0  -1317   ossp-pkg/sio/al.c
    NONE        +0  -89     ossp-pkg/sio/al.h
    NONE        +0  -474    ossp-pkg/sio/al.pod
    NONE        +0  -227    ossp-pkg/sio/al_test.c
  ____________________________________________________________________________

        

From ossp-cvs-owner@ossp.org  Tue Dec 17 14:45:08 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 02C5976316; Tue, 17 Dec 2002 14:45:07 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio al_todo.txt
Message-Id: <20021217134507.02C5976316@mail.ossp.org>
Date: Tue, 17 Dec 2002 14:45:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   17-Dec-2002 14:45:07
  Branch: HEAD                             Handle: 1970010101000000

  Removed files:
    ossp-pkg/sio            al_todo.txt

  Log:
    how quaint

  Summary:
    Revision    Changes     Path
    NONE        +0  -182    ossp-pkg/sio/al_todo.txt
  ____________________________________________________________________________

  

From ossp-cvs-owner@ossp.org  Tue Dec 17 14:46:39 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0BE8676315; Tue, 17 Dec 2002 14:46:39 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio SPEC.txt
Message-Id: <20021217134639.0BE8676315@mail.ossp.org>
Date: Tue, 17 Dec 2002 14:46:39 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   17-Dec-2002 14:46:38
  Branch: HEAD                             Handle: 1970010101000000

  Removed files:
    ossp-pkg/sio            SPEC.txt

  Log:
    how quaint

  Summary:
    Revision    Changes     Path
    NONE        +0  -4      ossp-pkg/sio/SPEC.txt
  ____________________________________________________________________________

  

From ossp-cvs-owner@ossp.org  Tue Dec 17 15:00:13 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 78F4F76315; Tue, 17 Dec 2002 15:00:12 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/al ChangeLog
Message-Id: <20021217140012.78F4F76315@mail.ossp.org>
Date: Tue, 17 Dec 2002 15:00:12 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   17-Dec-2002 15:00:12
  Branch: HEAD                             Handle: 2002121714001100

  Modified files:
    ossp-pkg/al             ChangeLog

  Log:
    fix copy&paste sa -> al

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/al/ChangeLog
  ____________________________________________________________________________

  Index: ossp-pkg/al/ChangeLog
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 ChangeLog
  --- ossp-pkg/al/ChangeLog	16 Dec 2002 15:14:09 -0000	1.2
  +++ ossp-pkg/al/ChangeLog	17 Dec 2002 14:00:11 -0000	1.3
  @@ -8,7 +8,7 @@
   
     CHANGELOG
   
  -  This is a list of all changes to OSSP sa.
  +  This is a list of all changes to OSSP al.
     For a more brief summary please have a look at the NEWS file.
   
     Changes between 0.9.0 and 0.9.1 (16-Dec-2002 to 16-Dec-2002)

From ossp-cvs-owner@ossp.org  Wed Dec 18 09:50:29 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D938176311; Wed, 18 Dec 2002 09:50:28 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio list.h
Message-Id: <20021218085028.D938176311@mail.ossp.org>
Date: Wed, 18 Dec 2002 09:50:28 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   18-Dec-2002 09:50:28
  Branch: HEAD                             Handle: 2002121808502800

  Modified files:
    ossp-pkg/sio            list.h

  Log:
    make this copy "part of sio"

  Summary:
    Revision    Changes     Path
    1.4         +4  -3      ossp-pkg/sio/list.h
  ____________________________________________________________________________

  Index: ossp-pkg/sio/list.h
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 list.h
  --- ossp-pkg/sio/list.h	25 Oct 2002 13:29:02 -0000	1.3
  +++ ossp-pkg/sio/list.h	18 Dec 2002 08:50:28 -0000	1.4
  @@ -1,12 +1,13 @@
   /*
  -**  OSSP al -- Assembly Line
  +**  OSSP sio -- Stream I/O
   **  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
   **  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
   **  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
   **
  -**  This file is part of OSSP al, an abstract datatype of a data buffer
  -**  that can assemble, move and truncate data but avoids actual copying.
  +##  This file is part of OSSP sio, an abstract datatype of
  +##  a pair of half-duplex data pipes which can be found at
  +##  http://www.ossp.org/pkg/lib/sio/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that

From ossp-cvs-owner@ossp.org  Wed Dec 18 10:02:54 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6596D7630D; Wed, 18 Dec 2002 10:02:54 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio.pod
Message-Id: <20021218090254.6596D7630D@mail.ossp.org>
Date: Wed, 18 Dec 2002 10:02:54 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   18-Dec-2002 10:02:54
  Branch: HEAD                             Handle: 2002121809025300

  Modified files:
    ossp-pkg/sio            sio.pod

  Log:
    fix reference to al

  Summary:
    Revision    Changes     Path
    1.8         +3  -2      ossp-pkg/sio/sio.pod
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio.pod
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 sio.pod
  --- ossp-pkg/sio/sio.pod	28 Nov 2002 16:29:37 -0000	1.7
  +++ ossp-pkg/sio/sio.pod	18 Dec 2002 09:02:53 -0000	1.8
  @@ -5,8 +5,9 @@
   ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
   ##
  -##  This file is part of OSSP al, an abstract datatype of a data buffer
  -##  that can assemble, move and truncate data but avoids actual copying.
  +##  This file is part of OSSP sio, an abstract datatype of
  +##  a pair of half-duplex data pipes which can be found at
  +##  http://www.ossp.org/pkg/lib/sio/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that

From ossp-cvs-owner@ossp.org  Wed Dec 18 11:33:44 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 85EDF7630D; Wed, 18 Dec 2002 11:33:44 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/tool/asgui index.wml ossp-web/pkg/tool index....
Message-Id: <20021218103344.85EDF7630D@mail.ossp.org>
Date: Wed, 18 Dec 2002 11:33:44 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   18-Dec-2002 11:33:44
  Branch: HEAD                             Handle: 197001010100001040204023

  Modified files:
    ossp-web/pkg/tool       index.wml
  Removed files:
    ossp-web/pkg/tool/asgui index.wml

  Log:
    as gui is now on as.is.eu.cw.com

  Summary:
    Revision    Changes     Path
    NONE        +0  -37     ossp-web/pkg/tool/asgui/index.wml
    1.21        +0  -3      ossp-web/pkg/tool/index.wml
  ____________________________________________________________________________

    Index: ossp-web/pkg/tool/index.wml
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 index.wml
  --- ossp-web/pkg/tool/index.wml	28 Nov 2002 17:53:42 -0000	1.20
  +++ ossp-web/pkg/tool/index.wml	18 Dec 2002 10:33:43 -0000	1.21
  @@ -24,9 +24,6 @@
     <pkg_item name="petidomo" longname="OSSP petidomo" type="tool" derived=yes
               desc="Mailing List Manager"
   	        done=95 stable="none" unstable="4.0b1">
  -  <pkg_item name="asgui" longname="OSSP asgui" type="tool"
  -            desc="Accounting system graphical user interface"
  -	        done=45 stable="none" unstable="0.5.0">
     <pkg_item name="shiela" longname="OSSP shiela" type="tool"
               desc="CVS Access Control and Logging"
   	        done=95 stable="none" unstable="0.9.2">

From ossp-cvs-owner@ossp.org  Wed Dec 18 15:41:05 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E6FD47630D; Wed, 18 Dec 2002 15:41:04 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio list.h
Message-Id: <20021218144104.E6FD47630D@mail.ossp.org>
Date: Wed, 18 Dec 2002 15:41:04 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Dec-2002 15:41:04
  Branch: HEAD                             Handle: 2002121814410400

  Modified files:
    ossp-pkg/sio            list.h

  Log:
    fix this myself now

  Summary:
    Revision    Changes     Path
    1.5         +3  -3      ossp-pkg/sio/list.h
  ____________________________________________________________________________

  Index: ossp-pkg/sio/list.h
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 list.h
  --- ossp-pkg/sio/list.h	18 Dec 2002 08:50:28 -0000	1.4
  +++ ossp-pkg/sio/list.h	18 Dec 2002 14:41:04 -0000	1.5
  @@ -5,9 +5,9 @@
   **  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
   **  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
   **
  -##  This file is part of OSSP sio, an abstract datatype of
  -##  a pair of half-duplex data pipes which can be found at
  -##  http://www.ossp.org/pkg/lib/sio/.
  +**  This file is part of OSSP sio, an abstract datatype of
  +**  a pair of half-duplex data pipes which can be found at
  +**  http://www.ossp.org/pkg/lib/sio/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that

From ossp-cvs-owner@ossp.org  Wed Dec 18 15:58:31 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 530EA7635F; Wed, 18 Dec 2002 15:58:31 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio .cvsignore AUTHORS ChangeLog INSTALL Makefile...
Message-Id: <20021218145831.530EA7635F@mail.ossp.org>
Date: Wed, 18 Dec 2002 15:58:31 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   18-Dec-2002 15:58:31
  Branch: HEAD                             Handle: 2002121814582900

  Added files:
    ossp-pkg/sio            .cvsignore AUTHORS ChangeLog INSTALL Makefile.in
                            NEWS README THANKS TODO VERSION aclocal.m4
                            config.h.in config.sub configure.ac devtool
                            devtool.conf devtool.func
  Modified files:
    ossp-pkg/sio            Makefile list.h sio.pod sio_zlib.c

  Log:
    snapshot

  Summary:
    Revision    Changes     Path
    1.1         +12 -0      ossp-pkg/sio/.cvsignore
    1.1         +15 -0      ossp-pkg/sio/AUTHORS
    1.1         +14 -0      ossp-pkg/sio/ChangeLog
    1.1         +18 -0      ossp-pkg/sio/INSTALL
    1.7         +149 -20    ossp-pkg/sio/Makefile
    1.1         +159 -0     ossp-pkg/sio/Makefile.in
    1.1         +15 -0      ossp-pkg/sio/NEWS
    1.1         +48 -0      ossp-pkg/sio/README
    1.1         +22 -0      ossp-pkg/sio/THANKS
    1.1         +17 -0      ossp-pkg/sio/TODO
    1.1         +6  -0      ossp-pkg/sio/VERSION
    1.1         +230 -0     ossp-pkg/sio/aclocal.m4
    1.1         +70 -0      ossp-pkg/sio/config.h.in
    1.1         +1470 -0    ossp-pkg/sio/config.sub
    1.1         +85 -0      ossp-pkg/sio/configure.ac
    1.1         +47 -0      ossp-pkg/sio/devtool
    1.1         +80 -0      ossp-pkg/sio/devtool.conf
    1.1         +73 -0      ossp-pkg/sio/devtool.func
    1.6         +1  -1      ossp-pkg/sio/list.h
    1.9         +1  -1      ossp-pkg/sio/sio.pod
    1.4         +3  -3      ossp-pkg/sio/sio_zlib.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/.cvsignore
  ============================================================
  $ cvs update -p -r1.1 .cvsignore
  Makefile
  sio-config
  sio_test
  config.guess
  config.h
  config.h.in
  config.sub
  configure
  libtool.m4
  ltmain.sh
  shtool
  sio.3
  Index: ossp-pkg/sio/AUTHORS
  ============================================================
  $ cvs update -p -r1.1 AUTHORS
     _        ___  ____ ____  ____        _       
    |_|_ _   / _ \/ ___/ ___||  _ \   ___(_) ___  
    _|_||_| | | | \___ \___ \| |_) | / __| |/ _ \ 
   |_||_|_| | |_| |___) |__) |  __/  \__ \ | (_) |
    |_|_|_|  \___/|____/____/|_|     |___/_|\___/ 
  
    OSSP sio - Stream I/O
  
    AUTHORS
  
    This is a list of authors who have written
    or edited major parts of the OSSP sio sources.
  
    Michael van Elst      <mlelstv@dev.de.cw.net>
  
  Index: ossp-pkg/sio/ChangeLog
  ============================================================
  $ cvs update -p -r1.1 ChangeLog
     _        ___  ____ ____  ____        _       
    |_|_ _   / _ \/ ___/ ___||  _ \   ___(_) ___  
    _|_||_| | | | \___ \___ \| |_) | / __| |/ _ \ 
   |_||_|_| | |_| |___) |__) |  __/  \__ \ | (_) |
    |_|_|_|  \___/|____/____/|_|     |___/_|\___/ 
  
    OSSP sio - Stream I/O
  
    CHANGELOG
  
    This is a list of all changes to OSSP sio.
    For a more brief summary please have a look at the NEWS file.
  
    Initial release 0.9.0 (xx-Dec-2002)
  Index: ossp-pkg/sio/INSTALL
  ============================================================
  $ cvs update -p -r1.1 INSTALL
     _        ___  ____ ____  ____        _       
    |_|_ _   / _ \/ ___/ ___||  _ \   ___(_) ___  
    _|_||_| | | | \___ \___ \| |_) | / __| |/ _ \ 
   |_||_|_| | |_| |___) |__) |  __/  \__ \ | (_) |
    |_|_|_|  \___/|____/____/|_|     |___/_|\___/ 
  
    OSSP sio - Stream I/O
  
    INSTALLATION
  
    To install OSSP sio into /path/to/sio/ perform
    the following steps in your shell:
  
      $ ./configure --prefix=/path/to/sio
      $ make
      $ make check
      $ make install [DESTDIR=/path/to/temp/root]
  
  Index: ossp-pkg/sio/Makefile
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 Makefile
  --- ossp-pkg/sio/Makefile	29 Nov 2002 15:45:25 -0000	1.6
  +++ ossp-pkg/sio/Makefile	18 Dec 2002 14:58:29 -0000	1.7
  @@ -1,30 +1,159 @@
  -CC     = gcc
  -CFLAGS = -g -W -Wall -Wshadow -Wpointer-arith -Wcast-align -Winline \
  -         -Wmissing-prototypes -Wmissing-declarations -Wnested-externs \
  -		 -Wno-unused-parameter
  +##
  +##  OSSP sio - Stream I/O
  +##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  +##
  +##  This file is part of OSSP sio, an abstract datatype of
  +##  a pair of half-duplex data pipes which can be found at
  +##  http://www.ossp.org/pkg/lib/sio/.
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  Makefile.in: make(1) build procedure
  +##
  +
  +
  +
  +DESTDIR     =
  +prefix      = /tmp/sio
  +exec_prefix = ${prefix}
  +bindir      = ${exec_prefix}/bin
  +libdir      = ${exec_prefix}/lib
  +includedir  = ${prefix}/include
  +mandir      = ${prefix}/man
  +
  +CC          = gcc
  +CPPFLAGS    =  -Ilib_al -Ilib_sa
  +CFLAGS      = -DHAVE_CONFIG_H -g -O2 -pipe -DDEBUG -pedantic -Wall -Wshadow -Wpointer-arith -Wcast-align -Winline -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Wno-long-long -Ilib_al -Ilib_sa
  +LDFLAGS     = 
  +LIBS        = 
  +RM          = rm -f
  +RMDIR       = rmdir
  +SHTOOL      = ./shtool
  +LIBTOOL     = ./libtool
  +TRUE        = true
  +POD2MAN     = pod2man
  +
  +LIB_NAME    = libsio.la
  +LIB_OBJS    = sio.lo sio_bio.lo sio_buffer.lo sio_hello.lo sio_null.lo sio_sa.lo sio_sillymux.lo sio_sio.lo sio_zlib.lo
  +LIB_DEPS    =  lib_al/*.lo lib_sa/*.lo
  +
  +MAN_NAME    = sio.3
  +
  +TST_NAME    = sio_test
  +TST_OBJS    = sio_test.o ts.o
   
  -all: al_test sio_test sio_test2
  +SUBDIRS     = lib_sa 
   
  -.c.o:
  -	$(CC) $(CFLAGS) -c $<
  -
  -al_test: al_test.o al.o
  +.SUFFIXES:
  +.SUFFIXES: .c .o .lo
   
  -sio_test: sio_test.o sio_sa.o sio_buffer.o sio_hello.o sio_bio.o sio.o al.o lib_sa/sa.o
  -	$(CC) $(CFLAGS) -o sio_test sio_test.o sio_sa.o sio_buffer.o sio_hello.o sio_bio.o sio.o al.o lib_sa/sa.o -lssl -lcrypto
  +all: _SUBDIRS_all $(LIB_NAME) $(TST_NAME) ($MAN_NAME)
   
  -sio_test2: sio_test2.o sio_fd.o sio_buffer.o sio_zlib.o sio_sio.o sio_sillymux.o sio.o al.o
  -	$(CC) $(CFLAGS) -o sio_test2 sio_test2.o sio_fd.o sio_buffer.o sio_zlib.o sio_sio.o sio_sillymux.o sio.o al.o -lz
  +.c.o:
  +	$(CC) $(CPPFLAGS) $(CFLAGS) -c $<
   
  -lib_sa/sa.o: lib_sa/sa.c
  -	$(CC) $(CFLAGS) -c -Ilib_sa -o lib_sa/sa.o lib_sa/sa.c
  +.c.lo:
  +	@$(LIBTOOL) --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS) -c $<
   
  -sio_sa.o: sio_sa.c lib_sa/sa.h
  -	$(CC) $(CFLAGS) -c -Ilib_sa sio_sa.c
   
  -sio_test.o: sio_test.c lib_sa/sa.h
  -	$(CC) $(CFLAGS) -c -Ilib_sa sio_test.c
  +#   convinience rule for calling _SUBDIRS with various make targets
  +_SUBDIRS_all _SUBDIRS_check _SUBDIRS_install _SUBDIRS_uninstall _SUBDIRS_clean \
  +_SUBDIRS_distclean _SUBDIRS_realclean _SUBDIRS_depend:
  +	@$(MAKE) $(MFLAGS) \
  +			_SUBDIRS_TARGET=`echo $@ | sed -e 's/^_SUBDIRS_//'` \
  +			_SUBDIRS_STEPDOWN
  +
  +#   the work horse rule which steps down to the subdirs in a loop
  +_SUBDIRS_STEPDOWN:
  +	@for subdir in $(SUBDIRS); do \
  +		test ! -f "$$subdir/Makefile" && continue; \
  +		echo "===> $(_SUBDIRS_DP)$$subdir ($(_SUBDIRS_TARGET))"; \
  +		(cd $$subdir; \
  +		$(MAKE) $(MFLAGS) \
  +			_SUBDIRS_DP="$(_SUBDIRS_DP)$$subdir/" \
  +			$(_SUBDIRS_TARGET) || exit 1) || exit 1; \
  +		echo "<=== $(_SUBDIRS_DP)$$subdir"; \
  +	done
  +
  +$(LIB_NAME): $(LIB_OBJS)
  +	@$(LIBTOOL) --mode=link $(CC) -o $(LIB_NAME) $(LIB_OBJS) $(LIB_DEPS) -rpath $(libdir) \
  +	    -version-info `$(SHTOOL) version -l txt -d libtool VERSION`
  +
  +$(TST_NAME): $(TST_OBJS) $(LIB_NAME)
  +	@$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $(TST_NAME) $(TST_OBJS) $(LIB_NAME) $(LIBS)
  +
  +man: $(MAN_NAME)
  +$(MAN_NAME): sio.pod
  +	V1=`$(SHTOOL) version -l txt -d short VERSION`; \
  +	V2=`$(SHTOOL) version -l txt -d long VERSION`; \
  +	D=`$(SHTOOL) version -l txt -d long VERSION | sed -e 's;.*(;;' -e 's;).*;;'`; \
  +	$(POD2MAN) --quotes=none \
  +	           --section=3 --center="Stream I/O" \
  +	           --release="$$D" --date="OSSP sio $$V1" sio.pod | \
  +	sed -e "s;SIO_VERSION_STR;$$V2;" >$(MAN_NAME)
  +
  +check: $(TST_NAME)
  +	@$(LIBTOOL) --mode=execute ./$(TST_NAME)
  +
  +install:
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(includedir)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libdir)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man3
  +	$(SHTOOL) install -c -m 755 sio-config $(DESTDIR)$(bindir)/
  +	$(SHTOOL) install -c -m 644 sio.h $(DESTDIR)$(includedir)/
  +	$(SHTOOL) install -c -m 644 $(MAN_NAME) $(DESTDIR)$(mandir)/man3/
  +	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libsio.la $(DESTDIR)$(libdir)/
  +
  +uninstall:
  +	@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libsio.la
  +	-$(RM) $(DESTDIR)$(mandir)/man3/$(MAN_NAME)
  +	-$(RM) $(DESTDIR)$(includedir)/sio.h
  +	-$(RM) $(DESTDIR)$(bindir)/sio-config
  +	-$(RMDIR) $(DESTDIR)$(mandir)/man3 >/dev/null 2>&1 || $(TRUE)
  +	-$(RMDIR) $(DESTDIR)$(mandir) >/dev/null 2>&1 || $(TRUE)
  +	-$(RMDIR) $(DESTDIR)$(libdir) >/dev/null 2>&1 || $(TRUE)
  +	-$(RMDIR) $(DESTDIR)$(includedir) >/dev/null 2>&1 || $(TRUE)
  +	-$(RMDIR) $(DESTDIR)$(bindir) >/dev/null 2>&1 || $(TRUE)
  +	-$(RMDIR) $(DESTDIR)$(prefix) >/dev/null 2>&1 || $(TRUE)
   
   clean:
  -	rm -f *.o lib_sa/sa.o
  +	@$(MAKE) $(MFLAGS) _SUBDIRS_clean
  +	-$(RM) $(LIB_NAME) $(LIB_OBJS)
  +	-$(RM) $(TST_NAME) $(TST_OBJS)
  +	-$(RM) -r .libs >/dev/null 2>&1 || $(TRUE)
  +	-$(RM) *.o *.lo
  +
  +distclean: clean
  +	@$(MAKE) $(MFLAGS) _SUBDIRS_distclean
  +	-$(RM) config.log config.status config.cache
  +	-$(RM) Makefile config.h sio-config
  +	-$(RM) libtool
  +
  +realclean: distclean
  +	@$(MAKE) $(MFLAGS) _SUBDIRS_realclean
  +	-$(RM) $(MAN_NAME)
  +	-$(RM) configure config.h.in
  +	-$(RM) shtool
  +	-$(RM) ltmain.sh libtool.m4 config.guess config.sub
   
  Index: ossp-pkg/sio/Makefile.in
  ============================================================
  $ cvs update -p -r1.1 Makefile.in
  ##
  ##  OSSP sio - Stream I/O
  ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  ##  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  ##
  ##  This file is part of OSSP sio, an abstract data type of
  ##  a pair of half-duplex data pipes which can be found at
  ##  http://www.ossp.org/pkg/lib/sio/.
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  Makefile.in: make(1) build procedure
  ##
  
  @SET_MAKE@
  
  DESTDIR     =
  prefix      = @prefix@
  exec_prefix = @exec_prefix@
  bindir      = @bindir@
  libdir      = @libdir@
  includedir  = @includedir@
  mandir      = @mandir@
  
  CC          = @CC@
  CPPFLAGS    = @CPPFLAGS@
  CFLAGS      = @DEFS@ @CFLAGS@
  LDFLAGS     = @LDFLAGS@
  LIBS        = @LIBS@
  RM          = rm -f
  RMDIR       = rmdir
  SHTOOL      = ./shtool
  LIBTOOL     = ./libtool
  TRUE        = true
  POD2MAN     = pod2man
  
  LIB_NAME    = libsio.la
  LIB_OBJS    = sio.lo sio_bio.lo sio_buffer.lo sio_hello.lo sio_null.lo sio_sa.lo sio_sillymux.lo sio_sio.lo sio_zlib.lo
  LIB_DEPS    = @LIB_DEPS@
  
  MAN_NAME    = sio.3
  
  TST_NAME    = sio_test
  TST_OBJS    = sio_test.o ts.o
  
  SUBDIRS     = @SUBDIR_AL@ @SUBDIR_SA@
  
  .SUFFIXES:
  .SUFFIXES: .c .o .lo
  
  all: _SUBDIRS_all $(LIB_NAME) $(TST_NAME) ($MAN_NAME)
  
  .c.o:
  	$(CC) $(CPPFLAGS) $(CFLAGS) -c $<
  
  .c.lo:
  	@$(LIBTOOL) --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS) -c $<
  
  
  #   convinience rule for calling _SUBDIRS with various make targets
  _SUBDIRS_all _SUBDIRS_check _SUBDIRS_install _SUBDIRS_uninstall _SUBDIRS_clean \
  _SUBDIRS_distclean _SUBDIRS_realclean _SUBDIRS_depend:
  	@$(MAKE) $(MFLAGS) \
  			_SUBDIRS_TARGET=`echo $@ | sed -e 's/^_SUBDIRS_//'` \
  			_SUBDIRS_STEPDOWN
  
  #   the work horse rule which steps down to the subdirs in a loop
  _SUBDIRS_STEPDOWN:
  	@for subdir in $(SUBDIRS); do \
  		test ! -f "$$subdir/Makefile" && continue; \
  		echo "===> $(_SUBDIRS_DP)$$subdir ($(_SUBDIRS_TARGET))"; \
  		(cd $$subdir; \
  		$(MAKE) $(MFLAGS) \
  			_SUBDIRS_DP="$(_SUBDIRS_DP)$$subdir/" \
  			$(_SUBDIRS_TARGET) || exit 1) || exit 1; \
  		echo "<=== $(_SUBDIRS_DP)$$subdir"; \
  	done
  
  $(LIB_NAME): $(LIB_OBJS)
  	@$(LIBTOOL) --mode=link $(CC) -o $(LIB_NAME) $(LIB_OBJS) $(LIB_DEPS) -rpath $(libdir) \
  	    -version-info `$(SHTOOL) version -l txt -d libtool VERSION`
  
  $(TST_NAME): $(TST_OBJS) $(LIB_NAME)
  	@$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $(TST_NAME) $(TST_OBJS) $(LIB_NAME) $(LIBS)
  
  man: $(MAN_NAME)
  $(MAN_NAME): sio.pod
  	V1=`$(SHTOOL) version -l txt -d short VERSION`; \
  	V2=`$(SHTOOL) version -l txt -d long VERSION`; \
  	D=`$(SHTOOL) version -l txt -d long VERSION | sed -e 's;.*(;;' -e 's;).*;;'`; \
  	$(POD2MAN) --quotes=none \
  	           --section=3 --center="Stream I/O" \
  	           --release="$$D" --date="OSSP sio $$V1" sio.pod | \
  	sed -e "s;SIO_VERSION_STR;$$V2;" >$(MAN_NAME)
  
  check: $(TST_NAME)
  	@$(LIBTOOL) --mode=execute ./$(TST_NAME)
  
  install:
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(includedir)
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libdir)
  	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man3
  	$(SHTOOL) install -c -m 755 sio-config $(DESTDIR)$(bindir)/
  	$(SHTOOL) install -c -m 644 sio.h $(DESTDIR)$(includedir)/
  	$(SHTOOL) install -c -m 644 $(MAN_NAME) $(DESTDIR)$(mandir)/man3/
  	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libsio.la $(DESTDIR)$(libdir)/
  
  uninstall:
  	@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libsio.la
  	-$(RM) $(DESTDIR)$(mandir)/man3/$(MAN_NAME)
  	-$(RM) $(DESTDIR)$(includedir)/sio.h
  	-$(RM) $(DESTDIR)$(bindir)/sio-config
  	-$(RMDIR) $(DESTDIR)$(mandir)/man3 >/dev/null 2>&1 || $(TRUE)
  	-$(RMDIR) $(DESTDIR)$(mandir) >/dev/null 2>&1 || $(TRUE)
  	-$(RMDIR) $(DESTDIR)$(libdir) >/dev/null 2>&1 || $(TRUE)
  	-$(RMDIR) $(DESTDIR)$(includedir) >/dev/null 2>&1 || $(TRUE)
  	-$(RMDIR) $(DESTDIR)$(bindir) >/dev/null 2>&1 || $(TRUE)
  	-$(RMDIR) $(DESTDIR)$(prefix) >/dev/null 2>&1 || $(TRUE)
  
  clean:
  	@$(MAKE) $(MFLAGS) _SUBDIRS_clean
  	-$(RM) $(LIB_NAME) $(LIB_OBJS)
  	-$(RM) $(TST_NAME) $(TST_OBJS)
  	-$(RM) -r .libs >/dev/null 2>&1 || $(TRUE)
  	-$(RM) *.o *.lo
  
  distclean: clean
  	@$(MAKE) $(MFLAGS) _SUBDIRS_distclean
  	-$(RM) config.log config.status config.cache
  	-$(RM) Makefile config.h sio-config
  	-$(RM) libtool
  
  realclean: distclean
  	@$(MAKE) $(MFLAGS) _SUBDIRS_realclean
  	-$(RM) $(MAN_NAME)
  	-$(RM) configure config.h.in
  	-$(RM) shtool
  	-$(RM) ltmain.sh libtool.m4 config.guess config.sub
  
  Index: ossp-pkg/sio/NEWS
  ============================================================
  $ cvs update -p -r1.1 NEWS
     _        ___  ____ ____  ____        _       
    |_|_ _   / _ \/ ___/ ___||  _ \   ___(_) ___  
    _|_||_| | | | \___ \___ \| |_) | / __| |/ _ \ 
   |_||_|_| | |_| |___) |__) |  __/  \__ \ | (_) |
    |_|_|_|  \___/|____/____/|_|     |___/_|\___/ 
  
    OSSP sio - Stream I/O
  
    NEWS
  
    This is a list of major changes to OSSP sio. For more detailed
    change descriptions, please have a look at the ChangeLog file.
  
    -NONE-
  
  Index: ossp-pkg/sio/README
  ============================================================
  $ cvs update -p -r1.1 README
     _        ___  ____ ____  ____        _       
    |_|_ _   / _ \/ ___/ ___||  _ \   ___(_) ___  
    _|_||_| | | | \___ \___ \| |_) | / __| |/ _ \ 
   |_||_|_| | |_| |___) |__) |  __/  \__ \ | (_) |
    |_|_|_|  \___/|____/____/|_|     |___/_|\___/ 
  
    OSSP sio - Stream I/O
  
    ABSTRACT
  
    --FIXME--
  
    COPYRIGHT AND LICENSE
  
    Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
    Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
    Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
    Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  
    This file is part of OSSP sio, an abstract data type of
    a pair of half-duplex data pipes which can be found at
    http://www.ossp.org/pkg/lib/sio/.
  
    Permission to use, copy, modify, and distribute this software for
    any purpose with or without fee is hereby granted, provided that
    the above copyright notice and this permission notice appear in all
    copies.
  
    THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
    WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
    IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
    CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
    USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    SUCH DAMAGE.
  
    HOME AND DOCUMENTATION
  
    The documentation and latest release can be found on
  
    o http://www.ossp.org/pkg/lib/sio/
    o  ftp://ftp.ossp.org/pkg/lib/sio/
  
  Index: ossp-pkg/sio/THANKS
  ============================================================
  $ cvs update -p -r1.1 THANKS
     _        ___  ____ ____  ____        _       
    |_|_ _   / _ \/ ___/ ___||  _ \   ___(_) ___  
    _|_||_| | | | \___ \___ \| |_) | / __| |/ _ \ 
   |_||_|_| | |_| |___) |__) |  __/  \__ \ | (_) |
    |_|_|_|  \___/|____/____/|_|     |___/_|\___/ 
  
    OSSP sio - Stream I/O
  
    THANKS
  
    Credit has to be given to the following sponsors for contributing
    hardware, network and manpower resources (in alphabetical order):
  
      o  Cable & Wireless Deutschland GmbH
         <http://www.cw.com/de>
  
    Credit has to be given to the following people who contributed ideas,
    bugfixes, hints, gave platform feedback, etc. (in alphabetical order):
  
      o  Ralf S. Engelschall         <rse@engelschall.com>
      o  Thomas Lotterer             <thomas@lotterer.net>
  
  Index: ossp-pkg/sio/TODO
  ============================================================
  $ cvs update -p -r1.1 TODO
     _        ___  ____ ____  ____        _       
    |_|_ _   / _ \/ ___/ ___||  _ \   ___(_) ___  
    _|_||_| | | | \___ \___ \| |_) | / __| |/ _ \ 
   |_||_|_| | |_| |___) |__) |  __/  \__ \ | (_) |
    |_|_|_|  \___/|____/____/|_|     |___/_|\___/ 
  
    OSSP sio - Stream I/O
  
    TODO
  
    The following items still have to be done:
  
    -NONE-
  
    CANDO
  
    -NONE-
  Index: ossp-pkg/sio/VERSION
  ============================================================
  $ cvs update -p -r1.1 VERSION
  
    VERSION -- Version Information for OSSP sio (syntax: Text)
    [automatically generated and maintained by GNU shtool]
  
    This is OSSP sio, Version 0.9.0 (18-Dec-2002)
  
  Index: ossp-pkg/sio/aclocal.m4
  ============================================================
  $ cvs update -p -r1.1 aclocal.m4
  dnl ##
  dnl ##  sio - OSSP Assembly Line
  dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  dnl ##  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  dnl ##
  dnl ##  This file is part of OSSP sio, an abstract data type of
  dnl ##  a pair of half-duplex data pipes which can be found at
  dnl ##  http://www.ossp.org/pkg/lib/sio/.
  dnl ##
  dnl ##  Permission to use, copy, modify, and distribute this software for
  dnl ##  any purpose with or without fee is hereby granted, provided that
  dnl ##  the above copyright notice and this permission notice appear in all
  dnl ##  copies.
  dnl ##
  dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  dnl ##  SUCH DAMAGE.
  dnl ##
  dnl ##  aclocal.m4: GNU Autoconf local macro definitions
  dnl ##
  
  dnl ##
  dnl ##  Check whether compiler option works
  dnl ##
  dnl ##  configure.in:
  dnl ##    AC_COMPILER_OPTION(<name>, <display>, <option>,
  dnl ##                       <action-success>, <action-failure>)
  dnl ##
  
  AC_DEFUN(AC_COMPILER_OPTION,[dnl
  AC_MSG_CHECKING(whether compiler option(s) $2 work)
  AC_CACHE_VAL(ac_cv_compiler_option_$1,[
  SAVE_CFLAGS="$CFLAGS"
  CFLAGS="$CFLAGS $3"
  AC_TRY_COMPILE([],[], ac_cv_compiler_option_$1=yes, ac_cv_compiler_option_$1=no)
  CFLAGS="$SAVE_CFLAGS"
  ])dnl
  if test ".$ac_cv_compiler_option_$1" = .yes; then
      ifelse([$4], , :, [$4])
  else
      ifelse([$5], , :, [$5])
  fi
  AC_MSG_RESULT([$ac_cv_compiler_option_$1])
  ])dnl
  
  dnl ##
  dnl ##  Debugging Support
  dnl ##
  dnl ##  configure.in:
  dnl ##    AC_CHECK_DEBUGGING
  dnl ##
  
  AC_DEFUN(AC_CHECK_DEBUGGING,[dnl
  AC_ARG_ENABLE(debug,dnl
  [  --enable-debug          build for debugging (default=no)],
  [dnl
  if test ".$ac_cv_prog_gcc" = ".yes"; then
      case "$CFLAGS" in
          *-O* ) ;;
             * ) CFLAGS="$CFLAGS -O2" ;;
      esac
      case "$CFLAGS" in
          *-g* ) ;;
             * ) CFLAGS="$CFLAGS -g" ;;
      esac
      case "$CFLAGS" in
          *-pipe* ) ;;
                * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
      esac
      AC_COMPILER_OPTION(defdbg, -DDEBUG, -DDEBUG, CFLAGS="$CFLAGS -DDEBUG")
      CFLAGS="$CFLAGS -pedantic"
      CFLAGS="$CFLAGS -Wall"
      WMORE="-Wshadow -Wpointer-arith -Wcast-align -Winline"
      WMORE="$WMORE -Wmissing-prototypes -Wmissing-declarations -Wnested-externs"
      AC_COMPILER_OPTION(wmore, -W<xxx>, $WMORE, CFLAGS="$CFLAGS $WMORE")
      AC_COMPILER_OPTION(wnolonglong, -Wno-long-long, -Wno-long-long, CFLAGS="$CFLAGS -Wno-long-long")
  else
      case "$CFLAGS" in
          *-g* ) ;;
             * ) CFLAGS="$CFLAGS -g" ;;
      esac
  fi
  msg="enabled"
  ],[
  if test ".$ac_cv_prog_gcc" = ".yes"; then
  case "$CFLAGS" in
      *-pipe* ) ;;
            * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
  esac
  fi
  case "$CFLAGS" in
      *-g* ) CFLAGS=`echo "$CFLAGS" |\
                     sed -e 's/ -g / /g' -e 's/ -g$//' -e 's/^-g //g' -e 's/^-g$//'` ;;
  esac
  case "$CXXFLAGS" in
      *-g* ) CXXFLAGS=`echo "$CXXFLAGS" |\
                       sed -e 's/ -g / /g' -e 's/ -g$//' -e 's/^-g //g' -e 's/^-g$//'` ;;
  esac
  msg=disabled
  ])dnl
  AC_MSG_CHECKING(for compilation debug mode)
  AC_MSG_RESULT([$msg])
  if test ".$msg" = .enabled; then
      enable_shared=no
  fi
  ])
  
  dnl ##
  dnl ##  Check for an external/extension library.
  dnl ##  - is aware of <libname>-config style scripts
  dnl ##  - searches under standard paths include, lib, etc.
  dnl ##  - searches under subareas like .libs, etc.
  dnl ##
  dnl ##  configure.in:
  dnl ##      AC_CHECK_EXTLIB(<realname>, <libname>, <func>, <header>,
  dnl ##                      [<success-action> [, <fail-action>]])
  dnl ##  Makefile.in:
  dnl ##      CFLAGS  = @CFLAGS@
  dnl ##      LDFLAGS = @LDFLAGS@
  dnl ##      LIBS    = @LIBS@
  dnl ##  shell:
  dnl ##      $ ./configure --with-<libname>[=DIR]
  dnl ##
  
  AC_DEFUN(AC_CHECK_EXTLIB,[dnl
  AC_ARG_WITH($2, [dnl
  [  --with-]m4_substr([$2[[=DIR]]                     ], 0, 19)[build with external $1 library (default=no)]], [dnl
      if test ".$with_$2" = .yes; then
          #   via config script in PATH
          $2_version=`($2-config --version) 2>/dev/null`
          if test ".$$2_version" != .; then
              CPPFLAGS="$CPPFLAGS `$2-config --cflags`"
              CFLAGS="$CFLAGS `$2-config --cflags`"
              LDFLAGS="$LDFLAGS `$2-config --ldflags`"
          fi
      else
          if test -d "$with_$2"; then
              found=0
              #   via config script
              for dir in $with_$2/bin $with_$2; do
                  if test -f "$dir/$2-config" && test ! -f "$dir/$2-config.in"; then
                      $2_version=`($dir/$2-config --version) 2>/dev/null`
                      if test ".$$2_version" != .; then
                          CPPFLAGS="$CPPFLAGS `$dir/$2-config --cflags`"
                          CFLAGS="$CFLAGS `$dir/$2-config --cflags`"
                          LDFLAGS="$LDFLAGS `$dir/$2-config --ldflags`"
                          found=1
                          break
                      fi
                  fi
              done
              #   in standard sub-areas
              if test ".$found" = .0; then
                  for dir in $with_$2/include/$2 $with_$2/include $with_$2; do
                      if test -f "$dir/$4"; then
                          CPPFLAGS="$CPPFLAGS -I$dir"
                          CFLAGS="$CFLAGS -I$dir"
                          found=1
                          break
                      fi
                  done
                  for dir in $with_$2/lib/$2 $with_$2/lib $with_$2; do
                      if test -f "$dir/lib$2.la" && test -d "$dir/.libs"; then
                          LDFLAGS="$LDFLAGS -L$dir -L$dir/.libs"
                          found=1
                          break
                      elif test -f "$dir/lib$2.a" || test -f "$dir/lib$2.so"; then
                          LDFLAGS="$LDFLAGS -L$dir"
                          found=1
                          break
                      fi
                  done
              fi
              #   in any sub-area
              if test ".$found" = .0; then
  changequote(, )dnl
                  for file in x `find $with_$2 -name "$4" -type f -print`; do
                      test .$file = .x && continue
                      dir=`echo $file | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;'`
                      CPPFLAGS="$CPPFLAGS -I$dir"
                      CFLAGS="$CFLAGS -I$dir"
                  done
                  for file in x `find $with_$2 -name "lib$2.[aso]" -type f -print`; do
                      test .$file = .x && continue
                      dir=`echo $file | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;'`
                      LDFLAGS="$LDFLAGS -L$dir"
                  done
  changequote([, ])dnl
              fi
          fi
      fi
      AC_HAVE_HEADERS($4)
      AC_CHECK_LIB($2, $3)
      with_$2=yes
      ac_var="ac_cv_header_`echo $4 | sed 'y%./+-%__p_%'`"
      eval "ac_val=\$$ac_var"
      if test ".$ac_val" != .yes; then
          with_$2=no
      fi
      if test ".$ac_cv_lib_$2_$3" != .yes; then
          with_$2=no
      fi
      if test ".$with_$2" = .no; then
          AC_ERROR([Unable to find $1 library])
      fi
      ], [dnl
  if test ".$with_$2" = .; then
      with_$2=no
  fi
      ])dnl
  AC_MSG_CHECKING(whether to build against external $1 library)
  if test ".$with_$2" = .yes; then
      ifelse([$5], , :, [$5])
  else
      ifelse([$6], , :, [$6])
  fi
  AC_MSG_RESULT([$with_$2])
  ])dnl
  
  Index: ossp-pkg/sio/config.h.in
  ============================================================
  $ cvs update -p -r1.1 config.h.in
  /* config.h.in.  Generated from configure.ac by autoheader.  */
  
  /* Define to 1 if you have the <al.h> header file. */
  #undef HAVE_AL_H
  
  /* Define to 1 if you have the <dlfcn.h> header file. */
  #undef HAVE_DLFCN_H
  
  /* Define to 1 if you have the <ex.h> header file. */
  #undef HAVE_EX_H
  
  /* Define to 1 if you have the <inttypes.h> header file. */
  #undef HAVE_INTTYPES_H
  
  /* Define to 1 if you have the `al' library (-lal). */
  #undef HAVE_LIBAL
  
  /* Define to 1 if you have the `ex' library (-lex). */
  #undef HAVE_LIBEX
  
  /* Define to 1 if you have the `sa' library (-lsa). */
  #undef HAVE_LIBSA
  
  /* Define to 1 if you have the <memory.h> header file. */
  #undef HAVE_MEMORY_H
  
  /* Define to 1 if you have the <sa.h> header file. */
  #undef HAVE_SA_H
  
  /* Define to 1 if you have the <stdint.h> header file. */
  #undef HAVE_STDINT_H
  
  /* Define to 1 if you have the <stdlib.h> header file. */
  #undef HAVE_STDLIB_H
  
  /* Define to 1 if you have the <strings.h> header file. */
  #undef HAVE_STRINGS_H
  
  /* Define to 1 if you have the <string.h> header file. */
  #undef HAVE_STRING_H
  
  /* Define to 1 if you have the <sys/stat.h> header file. */
  #undef HAVE_SYS_STAT_H
  
  /* Define to 1 if you have the <sys/types.h> header file. */
  #undef HAVE_SYS_TYPES_H
  
  /* Define to 1 if you have the <unistd.h> header file. */
  #undef HAVE_UNISTD_H
  
  /* Define to the address where bug reports for this package should be sent. */
  #undef PACKAGE_BUGREPORT
  
  /* Define to the full name of this package. */
  #undef PACKAGE_NAME
  
  /* Define to the full name and version of this package. */
  #undef PACKAGE_STRING
  
  /* Define to the one symbol short name of this package. */
  #undef PACKAGE_TARNAME
  
  /* Define to the version of this package. */
  #undef PACKAGE_VERSION
  
  /* Define to 1 if you have the ANSI C header files. */
  #undef STDC_HEADERS
  
  /* Define to 1 if building with OSSP ex */
  #undef WITH_EX
  Index: ossp-pkg/sio/config.sub
  ============================================================
  $ cvs update -p -r1.1 config.sub
  #! /bin/sh
  # Configuration validation subroutine script.
  #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
  #   2000, 2001, 2002 Free Software Foundation, Inc.
  
  timestamp='2002-09-05'
  
  # This file is (in principle) common to ALL GNU software.
  # The presence of a machine in this file suggests that SOME GNU software
  # can handle that machine.  It does not imply ALL GNU software can.
  #
  # This file is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 2 of the License, or
  # (at your option) any later version.
  #
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  #
  # You should have received a copy of the GNU General Public License
  # along with this program; if not, write to the Free Software
  # Foundation, Inc., 59 Temple Place - Suite 330,
  # Boston, MA 02111-1307, USA.
  
  # As a special exception to the GNU General Public License, if you
  # distribute this file as part of a program that contains a
  # configuration script generated by Autoconf, you may include it under
  # the same distribution terms that you use for the rest of that program.
  
  # Please send patches to <config-patches@gnu.org>.  Submit a context
  # diff and a properly formatted ChangeLog entry.
  #
  # Configuration subroutine to validate and canonicalize a configuration type.
  # Supply the specified configuration type as an argument.
  # If it is invalid, we print an error message on stderr and exit with code 1.
  # Otherwise, we print the canonical config type on stdout and succeed.
  
  # This file is supposed to be the same for all GNU packages
  # and recognize all the CPU types, system types and aliases
  # that are meaningful with *any* GNU software.
  # Each package is responsible for reporting which valid configurations
  # it does not support.  The user should be able to distinguish
  # a failure to support a valid configuration from a meaningless
  # configuration.
  
  # The goal of this file is to map all the various variations of a given
  # machine specification into a single specification in the form:
  #	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
  # or in some cases, the newer four-part form:
  #	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
  # It is wrong to echo any other type of specification.
  
  me=`echo "$0" | sed -e 's,.*/,,'`
  
  usage="\
  Usage: $0 [OPTION] CPU-MFR-OPSYS
         $0 [OPTION] ALIAS
  
  Canonicalize a configuration name.
  
  Operation modes:
    -h, --help         print this help, then exit
    -t, --time-stamp   print date of last modification, then exit
    -v, --version      print version number, then exit
  
  Report bugs and patches to <config-patches@gnu.org>."
  
  version="\
  GNU config.sub ($timestamp)
  
  Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
  Free Software Foundation, Inc.
  
  This is free software; see the source for copying conditions.  There is NO
  warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
  
  help="
  Try \`$me --help' for more information."
  
  # Parse command line
  while test $# -gt 0 ; do
    case $1 in
      --time-stamp | --time* | -t )
         echo "$timestamp" ; exit 0 ;;
      --version | -v )
         echo "$version" ; exit 0 ;;
      --help | --h* | -h )
         echo "$usage"; exit 0 ;;
      -- )     # Stop option processing
         shift; break ;;
      - )	# Use stdin as input.
         break ;;
      -* )
         echo "$me: invalid option $1$help"
         exit 1 ;;
  
      *local*)
         # First pass through any local machine types.
         echo $1
         exit 0;;
  
      * )
         break ;;
    esac
  done
  
  case $# in
   0) echo "$me: missing argument$help" >&2
      exit 1;;
   1) ;;
   *) echo "$me: too many arguments$help" >&2
      exit 1;;
  esac
  
  # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
  # Here we must recognize all the valid KERNEL-OS combinations.
  maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
  case $maybe_os in
    nto-qnx* | linux-gnu* | freebsd*-gnu* | storm-chaos* | os2-emx* | windows32-* | rtmk-nova*)
      os=-$maybe_os
      basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
      ;;
    *)
      basic_machine=`echo $1 | sed 's/-[^-]*$//'`
      if [ $basic_machine != $1 ]
      then os=`echo $1 | sed 's/.*-/-/'`
      else os=; fi
      ;;
  esac
  
  ### Let's recognize common machines as not being operating systems so
  ### that things like config.sub decstation-3100 work.  We also
  ### recognize some manufacturers as not being operating systems, so we
  ### can provide default operating systems below.
  case $os in
  	-sun*os*)
  		# Prevent following clause from handling this invalid input.
  		;;
  	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
  	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
  	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
  	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
  	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
  	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
  	-apple | -axis)
  		os=
  		basic_machine=$1
  		;;
  	-sim | -cisco | -oki | -wec | -winbond)
  		os=
  		basic_machine=$1
  		;;
  	-scout)
  		;;
  	-wrs)
  		os=-vxworks
  		basic_machine=$1
  		;;
  	-chorusos*)
  		os=-chorusos
  		basic_machine=$1
  		;;
   	-chorusrdb)
   		os=-chorusrdb
  		basic_machine=$1
   		;;
  	-hiux*)
  		os=-hiuxwe2
  		;;
  	-sco5)
  		os=-sco3.2v5
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  		;;
  	-sco4)
  		os=-sco3.2v4
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  		;;
  	-sco3.2.[4-9]*)
  		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  		;;
  	-sco3.2v[4-9]*)
  		# Don't forget version if it is 3.2v4 or newer.
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  		;;
  	-sco*)
  		os=-sco3.2v2
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  		;;
  	-udk*)
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  		;;
  	-isc)
  		os=-isc2.2
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  		;;
  	-clix*)
  		basic_machine=clipper-intergraph
  		;;
  	-isc*)
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  		;;
  	-lynx*)
  		os=-lynxos
  		;;
  	-ptx*)
  		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
  		;;
  	-windowsnt*)
  		os=`echo $os | sed -e 's/windowsnt/winnt/'`
  		;;
  	-psos*)
  		os=-psos
  		;;
  	-mint | -mint[0-9]*)
  		basic_machine=m68k-atari
  		os=-mint
  		;;
  esac
  
  # Decode aliases for certain CPU-COMPANY combinations.
  case $basic_machine in
  	# Recognize the basic CPU types without company name.
  	# Some are omitted here because they have special meanings below.
  	1750a | 580 \
  	| a29k \
  	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
  	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
  	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
  	| clipper \
  	| d10v | d30v | dlx | dsp16xx \
  	| fr30 | frv \
  	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
  	| i370 | i860 | i960 | ia64 \
  	| ip2k \
  	| m32r | m68000 | m68k | m88k | mcore \
  	| mips | mipsbe | mipseb | mipsel | mipsle \
  	| mips16 \
  	| mips64 | mips64el \
  	| mips64vr | mips64vrel \
  	| mips64orion | mips64orionel \
  	| mips64vr4100 | mips64vr4100el \
  	| mips64vr4300 | mips64vr4300el \
  	| mips64vr5000 | mips64vr5000el \
  	| mipsisa32 | mipsisa32el \
  	| mipsisa64 | mipsisa64el \
  	| mipsisa64sb1 | mipsisa64sb1el \
  	| mipsisa64sr71k | mipsisa64sr71kel \
  	| mipstx39 | mipstx39el \
  	| mn10200 | mn10300 \
  	| ns16k | ns32k \
  	| openrisc | or32 \
  	| pdp10 | pdp11 | pj | pjl \
  	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
  	| pyramid \
  	| sh | sh[1234] | sh3e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
  	| sh64 | sh64le \
  	| sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \
  	| strongarm \
  	| tahoe | thumb | tic80 | tron \
  	| v850 | v850e \
  	| we32k \
  	| x86 | xscale | xstormy16 | xtensa \
  	| z8k)
  		basic_machine=$basic_machine-unknown
  		;;
  	m6811 | m68hc11 | m6812 | m68hc12)
  		# Motorola 68HC11/12.
  		basic_machine=$basic_machine-unknown
  		os=-none
  		;;
  	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
  		;;
  
  	# We use `pc' rather than `unknown'
  	# because (1) that's what they normally are, and
  	# (2) the word "unknown" tends to confuse beginning users.
  	i*86 | x86_64)
  	  basic_machine=$basic_machine-pc
  	  ;;
  	# Object if more than one company name word.
  	*-*-*)
  		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
  		exit 1
  		;;
  	# Recognize the basic CPU types with company name.
  	580-* \
  	| a29k-* \
  	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
  	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
  	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
  	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
  	| avr-* \
  	| bs2000-* \
  	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* \
  	| clipper-* | cydra-* \
  	| d10v-* | d30v-* | dlx-* \
  	| elxsi-* \
  	| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
  	| h8300-* | h8500-* \
  	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
  	| i*86-* | i860-* | i960-* | ia64-* \
  	| ip2k-* \
  	| m32r-* \
  	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
  	| m88110-* | m88k-* | mcore-* \
  	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
  	| mips16-* \
  	| mips64-* | mips64el-* \
  	| mips64vr-* | mips64vrel-* \
  	| mips64orion-* | mips64orionel-* \
  	| mips64vr4100-* | mips64vr4100el-* \
  	| mips64vr4300-* | mips64vr4300el-* \
  	| mips64vr5000-* | mips64vr5000el-* \
  	| mipsisa32-* | mipsisa32el-* \
  	| mipsisa64-* | mipsisa64el-* \
  	| mipsisa64sb1-* | mipsisa64sb1el-* \
  	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
  	| mipstx39 | mipstx39el \
  	| none-* | np1-* | ns16k-* | ns32k-* \
  	| orion-* \
  	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
  	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
  	| pyramid-* \
  	| romp-* | rs6000-* \
  	| sh-* | sh[1234]-* | sh3e-* | sh[34]eb-* | shbe-* \
  	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
  	| sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
  	| sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
  	| tahoe-* | thumb-* | tic30-* | tic4x-* | tic54x-* | tic80-* | tron-* \
  	| v850-* | v850e-* | vax-* \
  	| we32k-* \
  	| x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
  	| xtensa-* \
  	| ymp-* \
  	| z8k-*)
  		;;
  	# Recognize the various machine names and aliases which stand
  	# for a CPU type and a company and sometimes even an OS.
  	386bsd)
  		basic_machine=i386-unknown
  		os=-bsd
  		;;
  	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
  		basic_machine=m68000-att
  		;;
  	3b*)
  		basic_machine=we32k-att
  		;;
  	a29khif)
  		basic_machine=a29k-amd
  		os=-udi
  		;;
  	adobe68k)
  		basic_machine=m68010-adobe
  		os=-scout
  		;;
  	alliant | fx80)
  		basic_machine=fx80-alliant
  		;;
  	altos | altos3068)
  		basic_machine=m68k-altos
  		;;
  	am29k)
  		basic_machine=a29k-none
  		os=-bsd
  		;;
  	amdahl)
  		basic_machine=580-amdahl
  		os=-sysv
  		;;
  	amiga | amiga-*)
  		basic_machine=m68k-unknown
  		;;
  	amigaos | amigados)
  		basic_machine=m68k-unknown
  		os=-amigaos
  		;;
  	amigaunix | amix)
  		basic_machine=m68k-unknown
  		os=-sysv4
  		;;
  	apollo68)
  		basic_machine=m68k-apollo
  		os=-sysv
  		;;
  	apollo68bsd)
  		basic_machine=m68k-apollo
  		os=-bsd
  		;;
  	aux)
  		basic_machine=m68k-apple
  		os=-aux
  		;;
  	balance)
  		basic_machine=ns32k-sequent
  		os=-dynix
  		;;
  	c90)
  		basic_machine=c90-cray
  		os=-unicos
  		;;
  	convex-c1)
  		basic_machine=c1-convex
  		os=-bsd
  		;;
  	convex-c2)
  		basic_machine=c2-convex
  		os=-bsd
  		;;
  	convex-c32)
  		basic_machine=c32-convex
  		os=-bsd
  		;;
  	convex-c34)
  		basic_machine=c34-convex
  		os=-bsd
  		;;
  	convex-c38)
  		basic_machine=c38-convex
  		os=-bsd
  		;;
  	cray | j90)
  		basic_machine=j90-cray
  		os=-unicos
  		;;
  	crds | unos)
  		basic_machine=m68k-crds
  		;;
  	cris | cris-* | etrax*)
  		basic_machine=cris-axis
  		;;
  	da30 | da30-*)
  		basic_machine=m68k-da30
  		;;
  	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
  		basic_machine=mips-dec
  		;;
  	decsystem10* | dec10*)
  		basic_machine=pdp10-dec
  		os=-tops10
  		;;
  	decsystem20* | dec20*)
  		basic_machine=pdp10-dec
  		os=-tops20
  		;;
  	delta | 3300 | motorola-3300 | motorola-delta \
  	      | 3300-motorola | delta-motorola)
  		basic_machine=m68k-motorola
  		;;
  	delta88)
  		basic_machine=m88k-motorola
  		os=-sysv3
  		;;
  	dpx20 | dpx20-*)
  		basic_machine=rs6000-bull
  		os=-bosx
  		;;
  	dpx2* | dpx2*-bull)
  		basic_machine=m68k-bull
  		os=-sysv3
  		;;
  	ebmon29k)
  		basic_machine=a29k-amd
  		os=-ebmon
  		;;
  	elxsi)
  		basic_machine=elxsi-elxsi
  		os=-bsd
  		;;
  	encore | umax | mmax)
  		basic_machine=ns32k-encore
  		;;
  	es1800 | OSE68k | ose68k | ose | OSE)
  		basic_machine=m68k-ericsson
  		os=-ose
  		;;
  	fx2800)
  		basic_machine=i860-alliant
  		;;
  	genix)
  		basic_machine=ns32k-ns
  		;;
  	gmicro)
  		basic_machine=tron-gmicro
  		os=-sysv
  		;;
  	go32)
  		basic_machine=i386-pc
  		os=-go32
  		;;
  	h3050r* | hiux*)
  		basic_machine=hppa1.1-hitachi
  		os=-hiuxwe2
  		;;
  	h8300hms)
  		basic_machine=h8300-hitachi
  		os=-hms
  		;;
  	h8300xray)
  		basic_machine=h8300-hitachi
  		os=-xray
  		;;
  	h8500hms)
  		basic_machine=h8500-hitachi
  		os=-hms
  		;;
  	harris)
  		basic_machine=m88k-harris
  		os=-sysv3
  		;;
  	hp300-*)
  		basic_machine=m68k-hp
  		;;
  	hp300bsd)
  		basic_machine=m68k-hp
  		os=-bsd
  		;;
  	hp300hpux)
  		basic_machine=m68k-hp
  		os=-hpux
  		;;
  	hp3k9[0-9][0-9] | hp9[0-9][0-9])
  		basic_machine=hppa1.0-hp
  		;;
  	hp9k2[0-9][0-9] | hp9k31[0-9])
  		basic_machine=m68000-hp
  		;;
  	hp9k3[2-9][0-9])
  		basic_machine=m68k-hp
  		;;
  	hp9k6[0-9][0-9] | hp6[0-9][0-9])
  		basic_machine=hppa1.0-hp
  		;;
  	hp9k7[0-79][0-9] | hp7[0-79][0-9])
  		basic_machine=hppa1.1-hp
  		;;
  	hp9k78[0-9] | hp78[0-9])
  		# FIXME: really hppa2.0-hp
  		basic_machine=hppa1.1-hp
  		;;
  	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
  		# FIXME: really hppa2.0-hp
  		basic_machine=hppa1.1-hp
  		;;
  	hp9k8[0-9][13679] | hp8[0-9][13679])
  		basic_machine=hppa1.1-hp
  		;;
  	hp9k8[0-9][0-9] | hp8[0-9][0-9])
  		basic_machine=hppa1.0-hp
  		;;
  	hppa-next)
  		os=-nextstep3
  		;;
  	hppaosf)
  		basic_machine=hppa1.1-hp
  		os=-osf
  		;;
  	hppro)
  		basic_machine=hppa1.1-hp
  		os=-proelf
  		;;
  	i370-ibm* | ibm*)
  		basic_machine=i370-ibm
  		;;
  # I'm not sure what "Sysv32" means.  Should this be sysv3.2?
  	i*86v32)
  		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
  		os=-sysv32
  		;;
  	i*86v4*)
  		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
  		os=-sysv4
  		;;
  	i*86v)
  		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
  		os=-sysv
  		;;
  	i*86sol2)
  		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
  		os=-solaris2
  		;;
  	i386mach)
  		basic_machine=i386-mach
  		os=-mach
  		;;
  	i386-vsta | vsta)
  		basic_machine=i386-unknown
  		os=-vsta
  		;;
  	iris | iris4d)
  		basic_machine=mips-sgi
  		case $os in
  		    -irix*)
  			;;
  		    *)
  			os=-irix4
  			;;
  		esac
  		;;
  	isi68 | isi)
  		basic_machine=m68k-isi
  		os=-sysv
  		;;
  	m88k-omron*)
  		basic_machine=m88k-omron
  		;;
  	magnum | m3230)
  		basic_machine=mips-mips
  		os=-sysv
  		;;
  	merlin)
  		basic_machine=ns32k-utek
  		os=-sysv
  		;;
  	mingw32)
  		basic_machine=i386-pc
  		os=-mingw32
  		;;
  	miniframe)
  		basic_machine=m68000-convergent
  		;;
  	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
  		basic_machine=m68k-atari
  		os=-mint
  		;;
  	mips3*-*)
  		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
  		;;
  	mips3*)
  		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
  		;;
  	mmix*)
  		basic_machine=mmix-knuth
  		os=-mmixware
  		;;
  	monitor)
  		basic_machine=m68k-rom68k
  		os=-coff
  		;;
  	morphos)
  		basic_machine=powerpc-unknown
  		os=-morphos
  		;;
  	msdos)
  		basic_machine=i386-pc
  		os=-msdos
  		;;
  	mvs)
  		basic_machine=i370-ibm
  		os=-mvs
  		;;
  	ncr3000)
  		basic_machine=i486-ncr
  		os=-sysv4
  		;;
  	netbsd386)
  		basic_machine=i386-unknown
  		os=-netbsd
  		;;
  	netwinder)
  		basic_machine=armv4l-rebel
  		os=-linux
  		;;
  	news | news700 | news800 | news900)
  		basic_machine=m68k-sony
  		os=-newsos
  		;;
  	news1000)
  		basic_machine=m68030-sony
  		os=-newsos
  		;;
  	news-3600 | risc-news)
  		basic_machine=mips-sony
  		os=-newsos
  		;;
  	necv70)
  		basic_machine=v70-nec
  		os=-sysv
  		;;
  	next | m*-next )
  		basic_machine=m68k-next
  		case $os in
  		    -nextstep* )
  			;;
  		    -ns2*)
  		      os=-nextstep2
  			;;
  		    *)
  		      os=-nextstep3
  			;;
  		esac
  		;;
  	nh3000)
  		basic_machine=m68k-harris
  		os=-cxux
  		;;
  	nh[45]000)
  		basic_machine=m88k-harris
  		os=-cxux
  		;;
  	nindy960)
  		basic_machine=i960-intel
  		os=-nindy
  		;;
  	mon960)
  		basic_machine=i960-intel
  		os=-mon960
  		;;
  	nonstopux)
  		basic_machine=mips-compaq
  		os=-nonstopux
  		;;
  	np1)
  		basic_machine=np1-gould
  		;;
  	nsr-tandem)
  		basic_machine=nsr-tandem
  		;;
  	op50n-* | op60c-*)
  		basic_machine=hppa1.1-oki
  		os=-proelf
  		;;
  	or32 | or32-*)
  		basic_machine=or32-unknown
  		os=-coff
  		;;
  	OSE68000 | ose68000)
  		basic_machine=m68000-ericsson
  		os=-ose
  		;;
  	os68k)
  		basic_machine=m68k-none
  		os=-os68k
  		;;
  	pa-hitachi)
  		basic_machine=hppa1.1-hitachi
  		os=-hiuxwe2
  		;;
  	paragon)
  		basic_machine=i860-intel
  		os=-osf
  		;;
  	pbd)
  		basic_machine=sparc-tti
  		;;
  	pbb)
  		basic_machine=m68k-tti
  		;;
  	pc532 | pc532-*)
  		basic_machine=ns32k-pc532
  		;;
  	pentium | p5 | k5 | k6 | nexgen | viac3)
  		basic_machine=i586-pc
  		;;
  	pentiumpro | p6 | 6x86 | athlon | athlon_*)
  		basic_machine=i686-pc
  		;;
  	pentiumii | pentium2)
  		basic_machine=i686-pc
  		;;
  	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
  		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
  		;;
  	pentiumpro-* | p6-* | 6x86-* | athlon-*)
  		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
  		;;
  	pentiumii-* | pentium2-*)
  		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
  		;;
  	pn)
  		basic_machine=pn-gould
  		;;
  	power)	basic_machine=power-ibm
  		;;
  	ppc)	basic_machine=powerpc-unknown
  		;;
  	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
  		;;
  	ppcle | powerpclittle | ppc-le | powerpc-little)
  		basic_machine=powerpcle-unknown
  		;;
  	ppcle-* | powerpclittle-*)
  		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
  		;;
  	ppc64)	basic_machine=powerpc64-unknown
  		;;
  	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
  		;;
  	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
  		basic_machine=powerpc64le-unknown
  		;;
  	ppc64le-* | powerpc64little-*)
  		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
  		;;
  	ps2)
  		basic_machine=i386-ibm
  		;;
  	pw32)
  		basic_machine=i586-unknown
  		os=-pw32
  		;;
  	rom68k)
  		basic_machine=m68k-rom68k
  		os=-coff
  		;;
  	rm[46]00)
  		basic_machine=mips-siemens
  		;;
  	rtpc | rtpc-*)
  		basic_machine=romp-ibm
  		;;
  	s390 | s390-*)
  		basic_machine=s390-ibm
  		;;
  	s390x | s390x-*)
  		basic_machine=s390x-ibm
  		;;
  	sa29200)
  		basic_machine=a29k-amd
  		os=-udi
  		;;
  	sb1)
  		basic_machine=mipsisa64sb1-unknown
  		;;
  	sb1el)
  		basic_machine=mipsisa64sb1el-unknown
  		;;
  	sequent)
  		basic_machine=i386-sequent
  		;;
  	sh)
  		basic_machine=sh-hitachi
  		os=-hms
  		;;
  	sparclite-wrs | simso-wrs)
  		basic_machine=sparclite-wrs
  		os=-vxworks
  		;;
  	sps7)
  		basic_machine=m68k-bull
  		os=-sysv2
  		;;
  	spur)
  		basic_machine=spur-unknown
  		;;
  	st2000)
  		basic_machine=m68k-tandem
  		;;
  	stratus)
  		basic_machine=i860-stratus
  		os=-sysv4
  		;;
  	sun2)
  		basic_machine=m68000-sun
  		;;
  	sun2os3)
  		basic_machine=m68000-sun
  		os=-sunos3
  		;;
  	sun2os4)
  		basic_machine=m68000-sun
  		os=-sunos4
  		;;
  	sun3os3)
  		basic_machine=m68k-sun
  		os=-sunos3
  		;;
  	sun3os4)
  		basic_machine=m68k-sun
  		os=-sunos4
  		;;
  	sun4os3)
  		basic_machine=sparc-sun
  		os=-sunos3
  		;;
  	sun4os4)
  		basic_machine=sparc-sun
  		os=-sunos4
  		;;
  	sun4sol2)
  		basic_machine=sparc-sun
  		os=-solaris2
  		;;
  	sun3 | sun3-*)
  		basic_machine=m68k-sun
  		;;
  	sun4)
  		basic_machine=sparc-sun
  		;;
  	sun386 | sun386i | roadrunner)
  		basic_machine=i386-sun
  		;;
  	sv1)
  		basic_machine=sv1-cray
  		os=-unicos
  		;;
  	symmetry)
  		basic_machine=i386-sequent
  		os=-dynix
  		;;
  	t3d)
  		basic_machine=alpha-cray
  		os=-unicos
  		;;
  	t3e)
  		basic_machine=alphaev5-cray
  		os=-unicos
  		;;
  	t90)
  		basic_machine=t90-cray
  		os=-unicos
  		;;
          tic4x | c4x*)
  		basic_machine=tic4x-unknown
  		os=-coff
  		;;
  	tic54x | c54x*)
  		basic_machine=tic54x-unknown
  		os=-coff
  		;;
  	tx39)
  		basic_machine=mipstx39-unknown
  		;;
  	tx39el)
  		basic_machine=mipstx39el-unknown
  		;;
  	toad1)
  		basic_machine=pdp10-xkl
  		os=-tops20
  		;;
  	tower | tower-32)
  		basic_machine=m68k-ncr
  		;;
  	udi29k)
  		basic_machine=a29k-amd
  		os=-udi
  		;;
  	ultra3)
  		basic_machine=a29k-nyu
  		os=-sym1
  		;;
  	v810 | necv810)
  		basic_machine=v810-nec
  		os=-none
  		;;
  	vaxv)
  		basic_machine=vax-dec
  		os=-sysv
  		;;
  	vms)
  		basic_machine=vax-dec
  		os=-vms
  		;;
  	vpp*|vx|vx-*)
  		basic_machine=f301-fujitsu
  		;;
  	vxworks960)
  		basic_machine=i960-wrs
  		os=-vxworks
  		;;
  	vxworks68)
  		basic_machine=m68k-wrs
  		os=-vxworks
  		;;
  	vxworks29k)
  		basic_machine=a29k-wrs
  		os=-vxworks
  		;;
  	w65*)
  		basic_machine=w65-wdc
  		os=-none
  		;;
  	w89k-*)
  		basic_machine=hppa1.1-winbond
  		os=-proelf
  		;;
  	windows32)
  		basic_machine=i386-pc
  		os=-windows32-msvcrt
  		;;
  	xps | xps100)
  		basic_machine=xps100-honeywell
  		;;
  	ymp)
  		basic_machine=ymp-cray
  		os=-unicos
  		;;
  	z8k-*-coff)
  		basic_machine=z8k-unknown
  		os=-sim
  		;;
  	none)
  		basic_machine=none-none
  		os=-none
  		;;
  
  # Here we handle the default manufacturer of certain CPU types.  It is in
  # some cases the only manufacturer, in others, it is the most popular.
  	w89k)
  		basic_machine=hppa1.1-winbond
  		;;
  	op50n)
  		basic_machine=hppa1.1-oki
  		;;
  	op60c)
  		basic_machine=hppa1.1-oki
  		;;
  	romp)
  		basic_machine=romp-ibm
  		;;
  	rs6000)
  		basic_machine=rs6000-ibm
  		;;
  	vax)
  		basic_machine=vax-dec
  		;;
  	pdp10)
  		# there are many clones, so DEC is not a safe bet
  		basic_machine=pdp10-unknown
  		;;
  	pdp11)
  		basic_machine=pdp11-dec
  		;;
  	we32k)
  		basic_machine=we32k-att
  		;;
  	sh3 | sh4 | sh3eb | sh4eb | sh[1234]le | sh3ele)
  		basic_machine=sh-unknown
  		;;
  	sh64)
  		basic_machine=sh64-unknown
  		;;
  	sparc | sparcv9 | sparcv9b)
  		basic_machine=sparc-sun
  		;;
  	cydra)
  		basic_machine=cydra-cydrome
  		;;
  	orion)
  		basic_machine=orion-highlevel
  		;;
  	orion105)
  		basic_machine=clipper-highlevel
  		;;
  	mac | mpw | mac-mpw)
  		basic_machine=m68k-apple
  		;;
  	pmac | pmac-mpw)
  		basic_machine=powerpc-apple
  		;;
  	*-unknown)
  		# Make sure to match an already-canonicalized machine name.
  		;;
  	*)
  		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
  		exit 1
  		;;
  esac
  
  # Here we canonicalize certain aliases for manufacturers.
  case $basic_machine in
  	*-digital*)
  		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
  		;;
  	*-commodore*)
  		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
  		;;
  	*)
  		;;
  esac
  
  # Decode manufacturer-specific aliases for certain operating systems.
  
  if [ x"$os" != x"" ]
  then
  case $os in
          # First match some system type aliases
          # that might get confused with valid system types.
  	# -solaris* is a basic system type, with this one exception.
  	-solaris1 | -solaris1.*)
  		os=`echo $os | sed -e 's|solaris1|sunos4|'`
  		;;
  	-solaris)
  		os=-solaris2
  		;;
  	-svr4*)
  		os=-sysv4
  		;;
  	-unixware*)
  		os=-sysv4.2uw
  		;;
  	-gnu/linux*)
  		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
  		;;
  	# First accept the basic system types.
  	# The portable systems comes first.
  	# Each alternative MUST END IN A *, to match a version number.
  	# -sysv* is not here because it comes later, after sysvr4.
  	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
  	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
  	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
  	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
  	      | -aos* \
  	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
  	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
  	      | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
  	      | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
  	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
  	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
  	      | -chorusos* | -chorusrdb* \
  	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
  	      | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
  	      | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
  	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
  	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
  	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
  	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* | -powermax*)
  	# Remember, each alternative MUST END IN *, to match a version number.
  		;;
  	-qnx*)
  		case $basic_machine in
  		    x86-* | i*86-*)
  			;;
  		    *)
  			os=-nto$os
  			;;
  		esac
  		;;
  	-nto*)
  		os=-nto-qnx
  		;;
  	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
  	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
  	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
  		;;
  	-mac*)
  		os=`echo $os | sed -e 's|mac|macos|'`
  		;;
  	-linux*)
  		os=`echo $os | sed -e 's|linux|linux-gnu|'`
  		;;
  	-sunos5*)
  		os=`echo $os | sed -e 's|sunos5|solaris2|'`
  		;;
  	-sunos6*)
  		os=`echo $os | sed -e 's|sunos6|solaris3|'`
  		;;
  	-opened*)
  		os=-openedition
  		;;
  	-wince*)
  		os=-wince
  		;;
  	-osfrose*)
  		os=-osfrose
  		;;
  	-osf*)
  		os=-osf
  		;;
  	-utek*)
  		os=-bsd
  		;;
  	-dynix*)
  		os=-bsd
  		;;
  	-acis*)
  		os=-aos
  		;;
  	-atheos*)
  		os=-atheos
  		;;
  	-386bsd)
  		os=-bsd
  		;;
  	-ctix* | -uts*)
  		os=-sysv
  		;;
  	-nova*)
  		os=-rtmk-nova
  		;;
  	-ns2 )
  		os=-nextstep2
  		;;
  	-nsk*)
  		os=-nsk
  		;;
  	# Preserve the version number of sinix5.
  	-sinix5.*)
  		os=`echo $os | sed -e 's|sinix|sysv|'`
  		;;
  	-sinix*)
  		os=-sysv4
  		;;
  	-triton*)
  		os=-sysv3
  		;;
  	-oss*)
  		os=-sysv3
  		;;
  	-svr4)
  		os=-sysv4
  		;;
  	-svr3)
  		os=-sysv3
  		;;
  	-sysvr4)
  		os=-sysv4
  		;;
  	# This must come after -sysvr4.
  	-sysv*)
  		;;
  	-ose*)
  		os=-ose
  		;;
  	-es1800*)
  		os=-ose
  		;;
  	-xenix)
  		os=-xenix
  		;;
  	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
  		os=-mint
  		;;
  	-none)
  		;;
  	*)
  		# Get rid of the `-' at the beginning of $os.
  		os=`echo $os | sed 's/[^-]*-//'`
  		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
  		exit 1
  		;;
  esac
  else
  
  # Here we handle the default operating systems that come with various machines.
  # The value should be what the vendor currently ships out the door with their
  # machine or put another way, the most popular os provided with the machine.
  
  # Note that if you're going to try to match "-MANUFACTURER" here (say,
  # "-sun"), then you have to tell the case statement up towards the top
  # that MANUFACTURER isn't an operating system.  Otherwise, code above
  # will signal an error saying that MANUFACTURER isn't an operating
  # system, and we'll never get to this point.
  
  case $basic_machine in
  	*-acorn)
  		os=-riscix1.2
  		;;
  	arm*-rebel)
  		os=-linux
  		;;
  	arm*-semi)
  		os=-aout
  		;;
  	# This must come before the *-dec entry.
  	pdp10-*)
  		os=-tops20
  		;;
  	pdp11-*)
  		os=-none
  		;;
  	*-dec | vax-*)
  		os=-ultrix4.2
  		;;
  	m68*-apollo)
  		os=-domain
  		;;
  	i386-sun)
  		os=-sunos4.0.2
  		;;
  	m68000-sun)
  		os=-sunos3
  		# This also exists in the configure program, but was not the
  		# default.
  		# os=-sunos4
  		;;
  	m68*-cisco)
  		os=-aout
  		;;
  	mips*-cisco)
  		os=-elf
  		;;
  	mips*-*)
  		os=-elf
  		;;
  	or32-*)
  		os=-coff
  		;;
  	*-tti)	# must be before sparc entry or we get the wrong os.
  		os=-sysv3
  		;;
  	sparc-* | *-sun)
  		os=-sunos4.1.1
  		;;
  	*-be)
  		os=-beos
  		;;
  	*-ibm)
  		os=-aix
  		;;
  	*-wec)
  		os=-proelf
  		;;
  	*-winbond)
  		os=-proelf
  		;;
  	*-oki)
  		os=-proelf
  		;;
  	*-hp)
  		os=-hpux
  		;;
  	*-hitachi)
  		os=-hiux
  		;;
  	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
  		os=-sysv
  		;;
  	*-cbm)
  		os=-amigaos
  		;;
  	*-dg)
  		os=-dgux
  		;;
  	*-dolphin)
  		os=-sysv3
  		;;
  	m68k-ccur)
  		os=-rtu
  		;;
  	m88k-omron*)
  		os=-luna
  		;;
  	*-next )
  		os=-nextstep
  		;;
  	*-sequent)
  		os=-ptx
  		;;
  	*-crds)
  		os=-unos
  		;;
  	*-ns)
  		os=-genix
  		;;
  	i370-*)
  		os=-mvs
  		;;
  	*-next)
  		os=-nextstep3
  		;;
  	*-gould)
  		os=-sysv
  		;;
  	*-highlevel)
  		os=-bsd
  		;;
  	*-encore)
  		os=-bsd
  		;;
  	*-sgi)
  		os=-irix
  		;;
  	*-siemens)
  		os=-sysv4
  		;;
  	*-masscomp)
  		os=-rtu
  		;;
  	f30[01]-fujitsu | f700-fujitsu)
  		os=-uxpv
  		;;
  	*-rom68k)
  		os=-coff
  		;;
  	*-*bug)
  		os=-coff
  		;;
  	*-apple)
  		os=-macos
  		;;
  	*-atari*)
  		os=-mint
  		;;
  	*)
  		os=-none
  		;;
  esac
  fi
  
  # Here we handle the case where we know the os, and the CPU type, but not the
  # manufacturer.  We pick the logical manufacturer.
  vendor=unknown
  case $basic_machine in
  	*-unknown)
  		case $os in
  			-riscix*)
  				vendor=acorn
  				;;
  			-sunos*)
  				vendor=sun
  				;;
  			-aix*)
  				vendor=ibm
  				;;
  			-beos*)
  				vendor=be
  				;;
  			-hpux*)
  				vendor=hp
  				;;
  			-mpeix*)
  				vendor=hp
  				;;
  			-hiux*)
  				vendor=hitachi
  				;;
  			-unos*)
  				vendor=crds
  				;;
  			-dgux*)
  				vendor=dg
  				;;
  			-luna*)
  				vendor=omron
  				;;
  			-genix*)
  				vendor=ns
  				;;
  			-mvs* | -opened*)
  				vendor=ibm
  				;;
  			-ptx*)
  				vendor=sequent
  				;;
  			-vxsim* | -vxworks* | -windiss*)
  				vendor=wrs
  				;;
  			-aux*)
  				vendor=apple
  				;;
  			-hms*)
  				vendor=hitachi
  				;;
  			-mpw* | -macos*)
  				vendor=apple
  				;;
  			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
  				vendor=atari
  				;;
  			-vos*)
  				vendor=stratus
  				;;
  		esac
  		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
  		;;
  esac
  
  echo $basic_machine$os
  exit 0
  
  # Local variables:
  # eval: (add-hook 'write-file-hooks 'time-stamp)
  # time-stamp-start: "timestamp='"
  # time-stamp-format: "%:y-%02m-%02d"
  # time-stamp-end: "'"
  # End:
  Index: ossp-pkg/sio/configure.ac
  ============================================================
  $ cvs update -p -r1.1 configure.ac
  dnl ##
  dnl ##  OSSP sio - Stream I/O
  dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  dnl ##  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  dnl ##
  dnl ##  This file is part of OSSP sio, an abstract data type of
  dnl ##  a pair of half-duplex data pipes which can be found at
  dnl ##  http://www.ossp.org/pkg/lib/sio/.
  dnl ##
  dnl ##  Permission to use, copy, modify, and distribute this software for
  dnl ##  any purpose with or without fee is hereby granted, provided that
  dnl ##  the above copyright notice and this permission notice appear in all
  dnl ##  copies.
  dnl ##
  dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  dnl ##  SUCH DAMAGE.
  dnl ##
  dnl ##  configure.ac: GNU Autoconf source script
  dnl ##
  
  AC_PREREQ(2.54)
  AC_INIT
  SIO_VERSION_STR=`./shtool version -l txt -d long VERSION`
  ./shtool echo -e "Configuring %BOSSP sio%b (Stream I/O), version %B${SIO_VERSION_STR}%b"
  AC_SUBST(SIO_VERSION_STR)
  
  AC_PROG_MAKE_SET
  AC_PROG_CC
  AC_CHECK_DEBUGGING
  
  sinclude(libtool.m4)
  AC_PROG_LIBTOOL
  
  dnl ## local checks go here (not yet)
  dnl sinclude(sio.ac)
  dnl SIO_CHECK_ALL
  
  AC_CHECK_EXTLIB([OSSP ex], ex, __ex_ctx, ex.h,
                  [AC_DEFINE(WITH_EX, 1, [Define to 1 if building with OSSP ex])])
  
  dnl #   pre-processing for subdirs
  LIB_DEPS=""
  
  dnl #   check for OSSP al library
  AC_CHECK_EXTLIB([OSSP al],
                  al, al_error, al.h,
                  [SUBDIR_AL=""],
                  [SUBDIR_AL="lib_al"
                   CPPFLAGS="$CPPFLAGS -Ilib_al"
                   CFLAGS="$CFLAGS -Ilib_al"
                   LIB_DEPS="$LIB_DEPS lib_al/*.lo"])
  AC_SUBST(SUBDIR_AL)
  
  dnl #   check for OSSP sa library
  AC_CHECK_EXTLIB([OSSP sa],
                  sa, sa_error, sa.h,
                  [SUBDIR_AL=""],
                  [SUBDIR_AL="lib_sa"
                   CPPFLAGS="$CPPFLAGS -Ilib_sa"
                   CFLAGS="$CFLAGS -Ilib_sa"
                   LIB_DEPS="$LIB_DEPS lib_sa/*.lo"])
  AC_SUBST(SUBDIR_SA)
  
  dnl #   post-processing for subdirs
  AC_SUBST(LIB_DEPS)
  AC_CONFIG_SUBDIRS([$SUBDIR_AL $SUBDIR_SA])
  
  dnl #   output generation
  AC_CONFIG_HEADERS(config.h)
  AC_CONFIG_FILES([Makefile sio-config])
  AC_CONFIG_COMMANDS([adjustment], [chmod a+x sio-config])
  AC_OUTPUT
  
  Index: ossp-pkg/sio/devtool
  ============================================================
  $ cvs update -p -r1.1 devtool
  #!/bin/sh
  ##
  ##  devtool -- Development Tool
  ##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  if [ $# -eq 0 ]; then
      echo "devtool:USAGE: devtool <command> [<arg> ...]" 1>&2
      exit 1
  fi
  
  cmd="$1"
  shift
  
  devtoolfunc="./devtool.func"
  
  if [ ! -f devtool.conf ]; then
      echo "devtool:ERROR: no devtool.conf in current directory" 1>&2
      exit 1
  fi
  
  cmdline=`grep "^%$cmd" devtool.conf`
  if [ ".$cmdline" = . ]; then
      echo "devtool:ERROR: command $cmd not found in devtool.conf" 1>&2
      exit 1
  fi
  
  if [ ".$TMPDIR" != . ]; then
      tmpdir="$TMPDIR"
  elif [ ".$TEMPDIR" != . ]; then
      tmpdir="$TEMPDIR"
  else
      tmpdir="/tmp"
  fi
  tmpfile="$tmpdir/rc.$$.tmp"
  
  rm -f $tmpfile
  touch $tmpfile
  echo ". $devtoolfunc" >>$tmpfile
  ( sed <devtool.conf -e "1,/^%common/d" -e '/^%.*/,$d'
    sed <devtool.conf -e "1,/^%$cmd/d" -e '/^%.*/,$d' ) |\
  sed -e 's;\([ 	]\)@\([a-zA-Z_][a-zA-Z0-9_]*\);\1devtool_\2;' >>$tmpfile
  
  sh $tmpfile "$@"
  
  rm -f $tmpfile >/dev/null 2>&1 || true
  
  Index: ossp-pkg/sio/devtool.conf
  ============================================================
  $ cvs update -p -r1.1 devtool.conf
  ##
  ##  devtool.conf -- Development Tool Configuration
  ##
  
  %checkout
      for name in al sa; do
          echo "===> lib_${name} (cvs co)"
          cvs co -d lib_${name} ${name}
          echo "<=== lib_${name}"
      done
  
  %autogen
      @autogen shtool   1.6.2 "1.6.*" all
      @autogen libtool  1.4.3 "1.4*"
      @autogen autoconf 2.57  "2.5[3-9]*"
  
      for name in al sa; do
          echo "===> lib_${name} (devtool autogen)"
          (cd lib_${name} && ./devtool autogen)
          echo "<=== lib_${name}"
      done
  
  %autoclean
      @autoclean shtool
      @autoclean autoconf
  
      for name in al sa; do
          echo "===> lib_${name} (devtool autoclean)"
          (cd lib_${name} && ./devtool autoclean)
          echo "<=== lib_${name}"
      done
  
  %configure
      ./configure \
          --cache-file=config.cache \
          --prefix=/tmp/sio \
          --disable-shared \
          --enable-debug \
          "$@"
  
  %version
      ./shtool version -l txt -n "OSSP sio" -e VERSION
  	V=`./shtool version -l txt -d long VERSION`
  	sed -e "s/Version .*/Version $V/g" <README >README.n
      mv README.n README
  
  %dist
      rm -f sio-*.tar.gz
      ./devtool autoclean
      ./devtool autogen
      ./devtool configure
      make clean all man
      make distclean
      ./shtool fixperm -v .
      V=`./shtool version -l txt -d short VERSION`
      ./shtool tarball -o sio-${V}.tar.gz -d sio-${V} -u ossp -g sio \
                       -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf,*.tar.gz,*.bak,00TODO,autom4te\.cache' -c 'gzip --best' .
      ls -l sio-${V}.tar.gz
      guunzip <sio-${V}.tar.gz | tar tvf - | head -10; echo "[...]"
      guunzip <sio-${V}.tar.gz | tar tvf - | tail -10
  
  %snap
      rm -f sio-*.tar.gz
      ./devtool autoclean
      ./devtool autogen
      ./devtool configure
      make clean all man
      make distclean
      ./shtool fixperm -v .
      D=`date '+%Y%m%d'`
      ./shtool tarball -o sio-SNAP-${D}.tar.gz -d sio-SNAP-${D} -u ossp -g sio \
                       -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf,*.tar.gz,*.bak,00TODO,autom4te\.cache' -c 'gzip --best' .
      ls -l sio-SNAP-${D}.tar.gz
      guunzip <sio-SNAP-${D}.tar.gz | tar tvf - | head -10; echo "[...]"
      guunzip <sio-SNAP-${D}.tar.gz | tar tvf - | tail -10
  
  %release
      echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/sio/"
      scp al-*.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/al/
  
  Index: ossp-pkg/sio/devtool.func
  ============================================================
  $ cvs update -p -r1.1 devtool.func
  ##
  ##  devtool.func -- Development Tool Functions
  ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  ##
  
  devtool_require () {
      t="$1"; o="$2"; p="$3"; e="$4"; a="$5"
      v=`($t $o | head -1 | awk "{ print \\\$$p; }") 2>/dev/null`
      if [ ".$v" = . ]; then
          echo "devtool:ERROR: unable to determine version of $t" 1>&2
          exit 1
      fi
      case "$v" in
          $e )
              ;;
          $a )
              echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
              ;;
          * )
              echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
              exit 1
              ;;
      esac
      echo "$v"
  }
  
  devtool_autogen () {
      tool=$1
      shift
      case $tool in
          autoconf )
              autoconf_version=`devtool_require autoconf --version 4 "$1" "$2"`
              echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
              autoconf
              autoheader 2>&1 | grep -v "is unchanged"
              rm -rf autom4te.cache >/dev/null 2>&1
              ;;
          libtool )
              libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
              echo "generating (GNU Libtool $libtoolize_version): ltmain.sh, libtool.m4, config.guess, config.sub"
              libtoolize --force --copy >/dev/null 2>&1
              cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
                  sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` libtool.m4
              ;;
          shtool )
              shtoolize_version=`devtool_require shtoolize -v 3 "$1" "$2"`
              echo "generating (GNU Shtool $shtoolize_version): shtool"
              shift
              shift
              shtoolize -q "$@"
              ;;
      esac
  }
  
  devtool_autoclean () {
      tool=$1
      shift
      case $tool in
          autoconf )
              echo "removing: configure config.h.in"
              rm -f configure config.h.in
              ;;
          libtool )
              echo "removing: ltmain.sh libtool.m4 config.guess config.sub"
              rm -f ltmain.sh libtool.m4 config.guess config.sub
              ;;
          shtool )
              echo "removing: shtool"
              rm -f shtool
              ;;
      esac
  }
  
  Index: ossp-pkg/sio/list.h
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 list.h
  --- ossp-pkg/sio/list.h	18 Dec 2002 14:41:04 -0000	1.5
  +++ ossp-pkg/sio/list.h	18 Dec 2002 14:58:29 -0000	1.6
  @@ -5,7 +5,7 @@
   **  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
   **  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
   **
  -**  This file is part of OSSP sio, an abstract datatype of
  +**  This file is part of OSSP sio, an abstract data type of
   **  a pair of half-duplex data pipes which can be found at
   **  http://www.ossp.org/pkg/lib/sio/.
   **
  Index: ossp-pkg/sio/sio.pod
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 sio.pod
  --- ossp-pkg/sio/sio.pod	18 Dec 2002 09:02:53 -0000	1.8
  +++ ossp-pkg/sio/sio.pod	18 Dec 2002 14:58:29 -0000	1.9
  @@ -5,7 +5,7 @@
   ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
   ##
  -##  This file is part of OSSP sio, an abstract datatype of
  +##  This file is part of OSSP sio, an abstract data type of
   ##  a pair of half-duplex data pipes which can be found at
   ##  http://www.ossp.org/pkg/lib/sio/.
   ##
  Index: ossp-pkg/sio/sio_zlib.c
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 sio_zlib.c
  --- ossp-pkg/sio/sio_zlib.c	29 Nov 2002 13:00:19 -0000	1.3
  +++ ossp-pkg/sio/sio_zlib.c	18 Dec 2002 14:58:29 -0000	1.4
  @@ -232,11 +232,11 @@
       n = al_chunk_len(alcp);
   
       if (al_same_label(alcp, my->data_label)) {
  -        zs->next_in  = p;
  +        zs->next_in  = (unsigned char *)p;
           zs->avail_in = n;
           flush = 0;
       } else {
  -        zs->next_in  = "";
  +        zs->next_in  = (unsigned char *)"";
           zs->avail_in = 0;
           flush = Z_FINISH;
       }
  @@ -249,7 +249,7 @@
                   break;
               }
   
  -            zs->next_out  = dt->obuf;
  +            zs->next_out  = (unsigned char *)dt->obuf;
               zs->avail_out = dt->olen;
               zs->total_out = 0;
           }

From ossp-cvs-owner@ossp.org  Wed Dec 18 16:38:50 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C37E47630D; Wed, 18 Dec 2002 16:38:49 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio-config.in
Message-Id: <20021218153849.C37E47630D@mail.ossp.org>
Date: Wed, 18 Dec 2002 16:38:49 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   18-Dec-2002 16:38:49
  Branch: HEAD                             Handle: 2002121815384900

  Added files:
    ossp-pkg/sio            sio-config.in

  Log:
    snap

  Summary:
    Revision    Changes     Path
    1.1         +147 -0     ossp-pkg/sio/sio-config.in
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio-config.in
  ============================================================
  $ cvs update -p -r1.1 sio-config.in
  #!/bin/sh
  ##
  ##  OSSP sio - Stream I/O
  ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  ##  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  ##
  ##  This file is part of OSSP sio, an abstract data type of
  ##  a pair of half-duplex data pipes which can be found at
  ##  http://www.ossp.org/pkg/lib/sio/.
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  ##  sio-config.in: SIO library build utility
  ##
  
  DIFS=' 
  '
  
  prefix="@prefix@"
  exec_prefix="@exec_prefix@"
  
  sio_prefix="$prefix"
  sio_exec_prefix="$exec_prefix"
  sio_bindir="@bindir@"
  sio_libdir="@libdir@"
  sio_includedir="@includedir@"
  sio_mandir="@mandir@"
  sio_datadir="@datadir@"
  sio_acdir="@datadir@/aclocal"
  sio_cflags="@CFLAGS@"
  sio_ldflags="@LDFLAGS@"
  sio_libs="@LIBS@"
  sio_version="@AL_VERSION_STR@"
  
  help=no
  version=no
  
  usage="sio-config"
  usage="$usage [--help] [--version] [--all]"
  usage="$usage [--prefix] [--exec-prefix] [--bindir] [--libdir] [--includedir] [--mandir] [--datadir] [--acdir]"
  usage="$usage [--cflags] [--ldflags] [--libs]"
  if [ $# -eq 0 ]; then
      echo "sio-config:Error: Invalid option" 1>&2
      echo "sio-config:Usage: $usage" 1>&2
      exit 1
  fi
  output=''
  output_extra=''
  all=no
  prev=''
  OIFS="$IFS" IFS="$DIFS"
  for option
  do
      if [ ".$prev" != . ]; then
          eval "$prev=\$option"
          prev=''
          continue
      fi
      case "$option" in
          -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
             *) optarg='' ;;
      esac
      case "$option" in
          --help|-h)
              echo "Usage: $usage"
              exit 0
              ;;
          --version|-v)
              echo "OSSP sio $sio_version"
              exit 0
              ;;
          --all)
              all=yes
              ;;
          --prefix)
              output="$output $sio_prefix"
              ;;
          --exec-prefix)
              output="$output $sio_exec_prefix"
              ;;
          --bindir)
              output="$output $sio_bindir"
              ;;
          --libdir)
              output="$output $sio_libdir"
              ;;
          --includedir)
              output="$output $sio_includedir"
              ;;
          --mandir)
              output="$output $sio_mandir"
              ;;
          --datadir)
              output="$output $sio_datadir"
              ;;
          --acdir)
              output="$output $sio_acdir"
              ;;
          --cflags)
              output="$output -I$sio_includedir"
              output_extra="$output_extra $sio_cflags"
              ;;
          --ldflags)
              output="$output -L$sio_libdir"
              output_extra="$output_extra $sio_ldflags"
              ;;
          --libs)
              output="$output -lsio"
              output_extra="$output_extra $sio_libs"
              ;;
          * )
              echo "sio-config:Error: Invalid option" 1>&2
              echo "sio-config:Usage: $usage" 1>&2
              exit 1;
              ;;
      esac
  done
  IFS="$OIFS"
  if [ ".$prev" != . ]; then
      echo "sio-config:Error: missing argument to --`echo $prev | sed 's/_/-/g'`" 1>&2
      exit 1
  fi
  if [ ".$output" != . ]; then
      if [ ".$all" = .yes ]; then
          output="$output $output_extra"
      fi
      echo $output
  fi
  

From ossp-cvs-owner@ossp.org  Wed Dec 18 16:41:51 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D3A8C7630D; Wed, 18 Dec 2002 16:41:50 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio configure.ac
Message-Id: <20021218154150.D3A8C7630D@mail.ossp.org>
Date: Wed, 18 Dec 2002 16:41:50 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Dec-2002 16:41:50
  Branch: HEAD                             Handle: 2002121815415000

  Modified files:
    ossp-pkg/sio            configure.ac

  Log:
    fix typo

  Summary:
    Revision    Changes     Path
    1.2         +2  -2      ossp-pkg/sio/configure.ac
  ____________________________________________________________________________

  Index: ossp-pkg/sio/configure.ac
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 configure.ac
  --- ossp-pkg/sio/configure.ac	18 Dec 2002 14:58:29 -0000	1.1
  +++ ossp-pkg/sio/configure.ac	18 Dec 2002 15:41:50 -0000	1.2
  @@ -66,8 +66,8 @@
   dnl #   check for OSSP sa library
   AC_CHECK_EXTLIB([OSSP sa],
                   sa, sa_error, sa.h,
  -                [SUBDIR_AL=""],
  -                [SUBDIR_AL="lib_sa"
  +                [SUBDIR_SA=""],
  +                [SUBDIR_SA="lib_sa"
                    CPPFLAGS="$CPPFLAGS -Ilib_sa"
                    CFLAGS="$CFLAGS -Ilib_sa"
                    LIB_DEPS="$LIB_DEPS lib_sa/*.lo"])

From ossp-cvs-owner@ossp.org  Wed Dec 18 16:44:41 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 618827630D; Wed, 18 Dec 2002 16:44:41 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio Makefile
Message-Id: <20021218154441.618827630D@mail.ossp.org>
Date: Wed, 18 Dec 2002 16:44:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   18-Dec-2002 16:44:41
  Branch: HEAD                             Handle: 1970010101000000

  Removed files:
    ossp-pkg/sio            Makefile

  Log:
    replaced by standard build environment

  Summary:
    Revision    Changes     Path
    NONE        +0  -159    ossp-pkg/sio/Makefile
  ____________________________________________________________________________

  

From ossp-cvs-owner@ossp.org  Wed Dec 18 16:51:03 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8AF717635F; Wed, 18 Dec 2002 16:51:03 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio_bio.c
Message-Id: <20021218155103.8AF717635F@mail.ossp.org>
Date: Wed, 18 Dec 2002 16:51:03 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   18-Dec-2002 16:51:03
  Branch: HEAD                             Handle: 2002121815510200

  Modified files:
    ossp-pkg/sio            sio_bio.c

  Log:
    avoid compiler warning

  Summary:
    Revision    Changes     Path
    1.8         +2  -2      ossp-pkg/sio/sio_bio.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio_bio.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 sio_bio.c
  --- ossp-pkg/sio/sio_bio.c	29 Nov 2002 14:26:31 -0000	1.7
  +++ ossp-pkg/sio/sio_bio.c	18 Dec 2002 15:51:02 -0000	1.8
  @@ -507,7 +507,7 @@
   sio_rc_t siobio_input(sio_t *sio, al_t *al, void *u, sio_rc_t orc)
   {
       private_t *my = (private_t *)u;
  -    sio_rc_t rc;
  +    sio_rc_t rc = SIO_ERR_INT;
   
       switch (my->state) {
       case INIT:
  @@ -537,7 +537,7 @@
   sio_rc_t siobio_output(sio_t *sio, al_t *al, void *u, sio_rc_t orc)
   {
       private_t *my = (private_t *)u;
  -    sio_rc_t rc;
  +    sio_rc_t rc = SIO_ERR_INT;
   
       switch (my->state) {
       case INIT:

From ossp-cvs-owner@ossp.org  Wed Dec 18 16:51:36 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E3C51763B8; Wed, 18 Dec 2002 16:51:35 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio.c
Message-Id: <20021218155135.E3C51763B8@mail.ossp.org>
Date: Wed, 18 Dec 2002 16:51:35 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   18-Dec-2002 16:51:35
  Branch: HEAD                             Handle: 2002121815513500

  Modified files:
    ossp-pkg/sio            sio.c

  Log:
    add autoconf support

  Summary:
    Revision    Changes     Path
    1.19        +4  -0      ossp-pkg/sio/sio.c
  ____________________________________________________________________________

  Index: ossp-pkg/sio/sio.c
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 sio.c
  --- ossp-pkg/sio/sio.c	29 Nov 2002 15:33:20 -0000	1.18
  +++ ossp-pkg/sio/sio.c	18 Dec 2002 15:51:35 -0000	1.19
  @@ -28,6 +28,10 @@
   **  sio.c: stream I/O library implementation
   */
   
  +#ifdef HAVE_CONFIG_H
  +#include "config.h"
  +#endif
  +
   #include <stddef.h>
   #include <stdlib.h>
   #include <string.h>

From ossp-cvs-owner@ossp.org  Wed Dec 18 16:52:34 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0D3EB7635F; Wed, 18 Dec 2002 16:52:34 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio ts.c ts.h
Message-Id: <20021218155234.0D3EB7635F@mail.ossp.org>
Date: Wed, 18 Dec 2002 16:52:34 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   18-Dec-2002 16:52:33
  Branch: HEAD                             Handle: 2002121815523300

  Added files:
    ossp-pkg/sio            ts.c ts.h

  Log:
    standard test suite

  Summary:
    Revision    Changes     Path
    1.1         +468 -0     ossp-pkg/sio/ts.c
    1.1         +64 -0      ossp-pkg/sio/ts.h
  ____________________________________________________________________________

  Index: ossp-pkg/sio/ts.c
  ============================================================
  $ cvs update -p -r1.1 ts.c
  /*
  **  TS - OSSP Test Suite Library
  **  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP TS, a small test suite library which
  **  can be found at http://www.ossp.org/pkg/ts/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  ts.c: test suite library
  */
  
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  #include <stdarg.h>
  
  #include "config.h"
  #if defined(HAVE_DMALLOC_H) && defined(WITH_DMALLOC)
  #include "dmalloc.h"
  #endif
  
  #include "ts.h"
  
  /* embedded ring data structure library */
  #define RING_ENTRY(elem) \
      struct { elem *next; elem *prev; }
  #define RING_HEAD(elem) \
      struct { elem *next; elem *prev; }
  #define RING_SENTINEL(hp, elem, link) \
      (elem *)((char *)(hp) - ((size_t)(&((elem *)0)->link)))
  #define RING_FIRST(hp) \
      (hp)->next
  #define RING_LAST(hp) \
      (hp)->prev
  #define RING_NEXT(ep, link) \
      (ep)->link.next
  #define RING_PREV(ep, link) \
      (ep)->link.prev
  #define RING_INIT(hp, elem, link) \
      do { RING_FIRST((hp)) = RING_SENTINEL((hp), elem, link); \
           RING_LAST((hp))  = RING_SENTINEL((hp), elem, link); } while (0)
  #define RING_EMPTY(hp, elem, link) \
      (RING_FIRST((hp)) == RING_SENTINEL((hp), elem, link))
  #define RING_ELEM_INIT(ep, link) \
      do { RING_NEXT((ep), link) = (ep); \
           RING_PREV((ep), link) = (ep); } while (0)
  #define RING_SPLICE_BEFORE(lep, ep1, epN, link) \
      do { RING_NEXT((epN), link) = (lep); \
           RING_PREV((ep1), link) = RING_PREV((lep), link); \
           RING_NEXT(RING_PREV((lep), link), link) = (ep1); \
           RING_PREV((lep), link) = (epN); } while (0)
  #define RING_SPLICE_TAIL(hp, ep1, epN, elem, link) \
      RING_SPLICE_BEFORE(RING_SENTINEL((hp), elem, link), (ep1), (epN), link)
  #define RING_INSERT_TAIL(hp, nep, elem, link) \
      RING_SPLICE_TAIL((hp), (nep), (nep), elem, link)
  #define RING_FOREACH(ep, hp, elem, link) \
      for ((ep)  = RING_FIRST((hp)); \
           (ep) != RING_SENTINEL((hp), elem, link); \
           (ep)  = RING_NEXT((ep), link))
  
  /* test suite test log */
  struct tstl_st;
  typedef struct tstl_st tstl_t;
  struct tstl_st {
      RING_ENTRY(tstl_t) next;
      char              *text;
      const char        *file;
      int                line;
  };
  
  /* test suite test check */
  struct tstc_st;
  typedef struct tstc_st tstc_t;
  struct tstc_st {
      RING_ENTRY(tstc_t) next;
      char              *title;
      int                failed;
      const char        *file;
      int                line;
      RING_HEAD(tstl_t)  logs;
  };
  
  /* test suite test */
  struct ts_test_st {
      RING_ENTRY(ts_test_t)  next;
      char              *title;
      ts_test_cb_t         func;
      const char        *file;
      int                line;
      RING_HEAD(tstc_t)  checks;
  };
  
  /* test suite */
  struct ts_suite_st {
      char              *title;
      RING_HEAD(ts_test_t)   tests;
  };
  
  /* minimal output-independent vprintf(3) variant which supports %{c,s,d,%} only */
  static int ts_suite_mvxprintf(char *buffer, size_t bufsize, const char *format, va_list ap)
  {
      /* sufficient integer buffer: <available-bits> x log_10(2) + safety */
      char ibuf[((sizeof(int)*8)/3)+10]; 
      char *cp;
      char c;
      int d;
      int n;
      int bytes;
  
      if (format == NULL)
          return -1;
      bytes = 0;
      while (*format != '\0') {
          if (*format == '%') {
              c = *(format+1);
              if (c == '%') {
                  /* expand "%%" */
                  cp = &c;
                  n = sizeof(char);
              }
              else if (c == 'c') {
                  /* expand "%c" */
                  c = (char)va_arg(ap, int);
                  cp = &c;
                  n = sizeof(char);
              }
              else if (c == 's') {
                  /* expand "%s" */
                  if ((cp = (char *)va_arg(ap, char *)) == NULL)
                      cp = "(null)";
                  n = strlen(cp);
              }
              else if (c == 'd') {
                  /* expand "%d" */
                  d = (int)va_arg(ap, int);
  #ifdef HAVE_SNPRINTF
                  snprintf(ibuf, sizeof(ibuf), "%d", d); /* explicitly secure */
  #else
                  sprintf(ibuf, "%d", d);                /* implicitly secure */
  #endif
                  cp = ibuf;
                  n = strlen(cp);
              }
              else {
                  /* any other "%X" */
                  cp = (char *)format;
                  n  = 2;
              }
              format += 2;
          }
          else {
              /* plain text */
              cp = (char *)format;
              if ((format = strchr(cp, '%')) == NULL)
                  format = strchr(cp, '\0');
              n = format - cp;
          }
          /* perform output operation */
          if (buffer != NULL) {
              if (n > bufsize)
                  return -1;
              memcpy(buffer, cp, n);
              buffer  += n;
              bufsize -= n;
          }
          bytes += n;
      }
      /* nul-terminate output */
      if (buffer != NULL) {
          if (bufsize == 0)
              return -1;
          *buffer = '\0';
      }
      return bytes;
  }
  
  /* minimal vasprintf(3) variant which supports %{c,s,d} only */
  static char *ts_suite_mvasprintf(const char *format, va_list ap)
  {
      char *buffer;
      int n;
      va_list ap2;
  
      if (format == NULL)
          return NULL;
      ap2 = ap;
      if ((n = ts_suite_mvxprintf(NULL, 0, format, ap)) == -1)
          return NULL;
      if ((buffer = (char *)malloc(n+1)) == NULL)
          return NULL;
      ts_suite_mvxprintf(buffer, n+1, format, ap2);
      return buffer;
  }
  
  /* minimal asprintf(3) variant which supports %{c,s,d} only */
  static char *ts_suite_masprintf(const char *format, ...)
  {
      va_list ap;
      char *cp;
  
      va_start(ap, format);
      cp = ts_suite_mvasprintf(format, ap);
      va_end(ap);
      return cp;
  }
  
  /* create test suite */
  ts_suite_t *ts_suite_new(const char *fmt, ...)
  {
      ts_suite_t *ts;
      va_list ap;
  
      if ((ts = (ts_suite_t *)malloc(sizeof(ts_suite_t))) == NULL)
          return NULL;
      va_start(ap, fmt);
      ts->title = ts_suite_mvasprintf(fmt, ap);
      RING_INIT(&ts->tests, ts_test_t, next);
      va_end(ap);
      return ts;
  }
  
  /* add test case to test suite */
  void ts_suite_test(ts_suite_t *ts, ts_test_cb_t func, const char *fmt, ...)
  {
      ts_test_t *tst;
      va_list ap;
  
      if (ts == NULL || func == NULL || fmt == NULL)
          return;
      if ((tst = (ts_test_t *)malloc(sizeof(ts_test_t))) == NULL)
          return;
      RING_ELEM_INIT(tst, next);
      va_start(ap, fmt);
      tst->title = ts_suite_mvasprintf(fmt, ap);
      va_end(ap);
      tst->func = func;
      tst->file = NULL;
      tst->line = 0;
      RING_INIT(&tst->checks, tstc_t, next);
      RING_INSERT_TAIL(&ts->tests, tst, ts_test_t, next);
      return;
  }
  
  /* run test suite */
  int ts_suite_run(ts_suite_t *ts)
  {
      ts_test_t *tst;
      tstc_t *tstc;
      tstl_t *tstl;
      int total_tests, total_tests_suite_failed;
      int total_checks, total_checks_failed;
      int test_checks, test_checks_failed;
      const char *file;
      int line;
      char *cp;
  
      if (ts == NULL)
          return 0;
  
      /* init total counters */
      total_tests         = 0;
      total_tests_suite_failed  = 0;
      total_checks        = 0;
      total_checks_failed = 0;
  
      fprintf(stdout, "\n");
      fprintf(stdout, " Test Suite: %s\n", ts->title);
      fprintf(stdout, " __________________________________________________________________\n");
      fprintf(stdout, "\n");
      fflush(stdout);
  
      /* iterate through all test cases */
      RING_FOREACH(tst, &ts->tests, ts_test_t, next) {
          cp = ts_suite_masprintf(" Test: %s ........................................"
                                  "........................................", tst->title);
          cp[60] = '\0';
          fprintf(stdout, "%s", cp);
          free(cp);
          fflush(stdout);
  
          /* init test case counters */
          test_checks        = 0;
          test_checks_failed = 0;
  
          /* run the test case function */
          tst->func(tst);
  
          /* iterate through all performed checks to determine status */
          RING_FOREACH(tstc, &tst->checks, tstc_t, next) {
              test_checks++;
              if (tstc->failed)
                  test_checks_failed++;
          }
  
          if (test_checks_failed > 0) {
              /* some checks failed, so do detailed reporting of test case */
              fprintf(stdout, " FAILED\n");
              fprintf(stdout, "       Ops, %d/%d checks failed! Detailed report follows:\n",
                      test_checks_failed, test_checks);
              RING_FOREACH(tstc, &tst->checks, tstc_t, next) {
                  file = (tstc->file != NULL ? tstc->file : tst->file);
                  line = (tstc->line != 0    ? tstc->line : tst->line);
                  if (file != NULL)
                      fprintf(stdout, "       Check: %s [%s:%d]\n", tstc->title, file, line);
                  else
                      fprintf(stdout, "       Check: %s\n", tstc->title);
                  RING_FOREACH(tstl, &tstc->logs, tstl_t, next) {
                      file = (tstl->file != NULL ? tstl->file : file);
                      line = (tstl->line != 0    ? tstl->line : line);
                      if (file != NULL)
                          fprintf(stdout, "              Log: %s [%s:%d]\n", tstl->text, file, line);
                      else
                          fprintf(stdout, "              Log: %s\n", tstl->text);
                  }
              }
          }
          else {
              /* test case ran successfully */
              fprintf(stdout, ".... OK\n");
          }
          fflush(stdout);
  
          /* accumulate counters */
          total_checks += test_checks;
          total_tests++;
          if (test_checks_failed > 0) {
              total_checks_failed += test_checks_failed;
              total_tests_suite_failed++;
          }
      }
  
      /* print test suite summary */
      fprintf(stdout, " __________________________________________________________________\n");
      fprintf(stdout, "\n");
      fprintf(stdout, " Test Summary: %d tests (%d ok, %d failed), %d checks (%d ok, %d failed)\n", 
              total_tests, (total_tests - total_tests_suite_failed), total_tests_suite_failed, 
              total_checks, (total_checks - total_checks_failed), total_checks_failed); 
      if (total_tests_suite_failed > 0)
          fprintf(stdout, " Test Suite: FAILED\n");
      else
          fprintf(stdout, " Test Suite: OK\n");
      fprintf(stdout, "\n");
      fflush(stdout);
  
      return total_checks_failed;
  }
  
  /* destroy test suite */
  void ts_suite_free(ts_suite_t *ts)
  {
      ts_test_t *tst;
      tstc_t *tstc;
      tstl_t *tstl;
  
      if (ts == NULL)
          return;
      RING_FOREACH(tst, &ts->tests, ts_test_t, next) {
          RING_FOREACH(tstc, &tst->checks, tstc_t, next) {
              RING_FOREACH(tstl, &tstc->logs, tstl_t, next) {
                  free(tstl->text);
              }
              free(tstc->title);
              free(tstc);
          }
          free(tst->title);
          free(tst);
      }
      free(ts->title);
      free(ts);
      return;
  }
  
  /* annotate test case with file name and line number */
  ts_test_t *ts_test_ctx(ts_test_t *tst, const char *file, int line)
  {
      if (tst != NULL && file != NULL) {
          tst->file = file;
          tst->line = line;
      }
      return tst;
  }
  
  /* annotate test case with check */
  void ts_test_check(ts_test_t *tst, const char *fmt, ...)
  {
      tstc_t *tstc;
      va_list ap;
  
      if (tst == NULL || fmt == NULL)
          return;
      if ((tstc = (tstc_t *)malloc(sizeof(tstc_t))) == NULL)
          return;
      va_start(ap, fmt);
      RING_ELEM_INIT(tstc, next);
      tstc->title = ts_suite_mvasprintf(fmt, ap);
      tstc->failed = 0;
      tstc->file = tst->file;
      tstc->line = tst->line;
      RING_INIT(&tstc->logs, tstl_t, next);
      RING_INSERT_TAIL(&tst->checks, tstc, tstc_t, next);
      va_end(ap);
      return;
  }
  
  /* annotate test case with log message and failure */
  void ts_test_fail(ts_test_t *tst, const char *fmt, ...)
  {
      tstc_t *tstc;
      tstl_t *tstl;
      va_list ap;
  
      if (tst == NULL || fmt == NULL)
          return;
      if ((tstl = (tstl_t *)malloc(sizeof(tstl_t))) == NULL)
          return;
      va_start(ap, fmt);
      tstl->text = ts_suite_mvasprintf(fmt, ap);
      tstl->file = tst->file;
      tstl->line = tst->line;
      RING_ELEM_INIT(tstl, next);
      tstc = RING_LAST(&tst->checks);
      RING_INSERT_TAIL(&tstc->logs, tstl, tstl_t, next);
      tstc->failed = 1;
      va_end(ap);
      return;
  }
  
  /* annotate test case with log message only */
  void ts_test_log(ts_test_t *tst, const char *fmt, ...)
  {
      tstc_t *tstc;
      tstl_t *tstl;
      va_list ap;
  
      if (tst == NULL || fmt == NULL)
          return;
      if ((tstl = (tstl_t *)malloc(sizeof(tstl_t))) == NULL)
          return;
      va_start(ap, fmt);
      tstl->text = ts_suite_mvasprintf(fmt, ap);
      tstl->file = tst->file;
      tstl->line = tst->line;
      RING_ELEM_INIT(tstl, next);
      tstc = RING_LAST(&tst->checks);
      RING_INSERT_TAIL(&tstc->logs, tstl, tstl_t, next);
      va_end(ap);
      return;
  }
  
  Index: ossp-pkg/sio/ts.h
  ============================================================
  $ cvs update -p -r1.1 ts.h
  /*
  **  TS - OSSP Test Suite Library
  **  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  **  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  **  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  **
  **  This file is part of OSSP TS, a small test suite library which
  **  can be found at http://www.ossp.org/pkg/ts/.
  **
  **  Permission to use, copy, modify, and distribute this software for
  **  any purpose with or without fee is hereby granted, provided that
  **  the above copyright notice and this permission notice appear in all
  **  copies.
  **
  **  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  **  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  **  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  **  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  **  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  **  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  **  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  **  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  **  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  **  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  **  SUCH DAMAGE.
  **
  **  ts.h: test suite library API
  */
  
  #ifndef _TS_H_
  #define _TS_H_
  
  /* test suite object type */
  struct ts_suite_st;
  typedef struct ts_suite_st ts_suite_t;
  
  /* test object type */
  struct ts_test_st;
  typedef struct ts_test_st ts_test_t;
  
  /* test callback function type */
  typedef void (*ts_test_cb_t)(ts_test_t *);
  
  /* test suite operations */
  ts_suite_t *ts_suite_new  (const char *fmt, ...);
  void        ts_suite_test (ts_suite_t *s, ts_test_cb_t func, const char *fmt, ...);
  int         ts_suite_run  (ts_suite_t *s);
  void        ts_suite_free (ts_suite_t *s);
  
  /* test operations */
  ts_test_t  *ts_test_ctx   (ts_test_t *t, const char *file, int line);
  void        ts_test_check (ts_test_t *t, const char *fmt, ...);
  void        ts_test_fail  (ts_test_t *t, const char *fmt, ...);
  void        ts_test_log   (ts_test_t *t, const char *fmt, ...);
  
  /* test suite short-cut macros */
  #define TS_TEST(name) \
      static void name(ts_test_t *_t)
  #define TS_CTX \
      ts_test_ctx(_t, __FILE__, __LINE__)
  
  #endif /* _TS_H_ */
  

From ossp-cvs-owner@ossp.org  Wed Dec 18 16:54:16 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6E9D07635F; Wed, 18 Dec 2002 16:54:16 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio Makefile.in
Message-Id: <20021218155416.6E9D07635F@mail.ossp.org>
Date: Wed, 18 Dec 2002 16:54:16 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   18-Dec-2002 16:54:16
  Branch: HEAD                             Handle: 2002121815541500

  Modified files:
    ossp-pkg/sio            Makefile.in

  Log:
    fix typo

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/sio/Makefile.in
  ____________________________________________________________________________

  Index: ossp-pkg/sio/Makefile.in
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 Makefile.in
  --- ossp-pkg/sio/Makefile.in	18 Dec 2002 14:58:29 -0000	1.1
  +++ ossp-pkg/sio/Makefile.in	18 Dec 2002 15:54:15 -0000	1.2
  @@ -66,7 +66,7 @@
   .SUFFIXES:
   .SUFFIXES: .c .o .lo
   
  -all: _SUBDIRS_all $(LIB_NAME) $(TST_NAME) ($MAN_NAME)
  +all: _SUBDIRS_all $(LIB_NAME) $(TST_NAME) $(MAN_NAME)
   
   .c.o:
   	$(CC) $(CPPFLAGS) $(CFLAGS) -c $<

From ossp-cvs-owner@ossp.org  Wed Dec 18 16:56:12 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AAF047635F; Wed, 18 Dec 2002 16:56:12 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio sio_test2.c
Message-Id: <20021218155612.AAF047635F@mail.ossp.org>
Date: Wed, 18 Dec 2002 16:56:12 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   18-Dec-2002 16:56:12
  Branch: HEAD                             Handle: 1970010101000000

  Removed files:
    ossp-pkg/sio            sio_test2.c

  Log:
    will be replaced by test suite

  Summary:
    Revision    Changes     Path
    NONE        +0  -154    ossp-pkg/sio/sio_test2.c
  ____________________________________________________________________________

  

From ossp-cvs-owner@ossp.org  Thu Dec 19 10:11:52 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4495C7631C; Thu, 19 Dec 2002 10:11:52 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm ChangeLog mm_core.c
Message-Id: <20021219091152.4495C7631C@mail.ossp.org>
Date: Thu, 19 Dec 2002 10:11:52 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-Dec-2002 10:11:52
  Branch: HEAD                             Handle: 2002121909115100

  Modified files:
    ossp-pkg/mm             ChangeLog mm_core.c

  Log:
    Use "close-on-exec" semantic on internal file descriptors if underlying
    platform supports this feature. This makes sure the file descriptors are
    closed by the kernel upon execution of exec(3) by the application.
    
    Hints by: Martin Kraemer <martin.kraemer@mch.sni.de>

  Summary:
    Revision    Changes     Path
    1.38        +8  -2      ossp-pkg/mm/ChangeLog
    1.17        +19 -0      ossp-pkg/mm/mm_core.c
  ____________________________________________________________________________

  Index: ossp-pkg/mm/ChangeLog
  ============================================================
  $ cvs diff -u -r1.37 -r1.38 ChangeLog
  --- ossp-pkg/mm/ChangeLog	1 Aug 2002 12:59:07 -0000	1.37
  +++ ossp-pkg/mm/ChangeLog	19 Dec 2002 09:11:51 -0000	1.38
  @@ -13,12 +13,18 @@
       | |_ / __/ 
     __|_(_)_____|______________________________________________________
               
  - Changes between 1.2.1 and 1.2.2 (28-Jul-2000 to xx-Aug-2002)
  + Changes between 1.2.1 and 1.2.2 (28-Jul-2002 to xx-Dec-2002)
  +
  +  *) Use "close-on-exec" semantic on internal file descriptors if
  +     underlying platform supports this feature. This makes sure the file
  +     descriptors are closed by the kernel upon execution of exec(3) by
  +     the application.
  +     [Ralf S. Engelschall, Martin Kraemer <martin.kraemer@mch.sni.de>]
   
     *) Fixed Makefile.in: $(TRUE) was not defined.
        [Will Day <wd@hpgx.net>]
   
  - Changes between 1.2.0 and 1.2.1 (26-Jul-2000 to 28-Jul-2002)
  + Changes between 1.2.0 and 1.2.1 (26-Jul-2002 to 28-Jul-2002)
   
     *) Fixed the package rolling: configure.ac was missing because
        of a bug in devtool.conf.
  Index: ossp-pkg/mm/mm_core.c
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 mm_core.c
  --- ossp-pkg/mm/mm_core.c	26 Jul 2002 13:48:38 -0000	1.16
  +++ ossp-pkg/mm/mm_core.c	19 Dec 2002 09:11:51 -0000	1.17
  @@ -130,6 +130,9 @@
       }
       if (fd == -1 && i < MM_MAXCHILD) {
           fd = open(mc->mc_fnsem, O_WRONLY, MM_CORE_FILEMODE);
  +#if defined(F_SETFD) && defined(FD_CLOEXEC)
  +        fcntl(fd, F_SETFD, FD_CLOEXEC);
  +#endif
           mc->mc_fdsem[i].pid = getpid();
           mc->mc_fdsem[i].fd  = fd;
       }
  @@ -264,6 +267,10 @@
   #if defined(MM_SHMT_MMZERO)
       if ((fdmem = open("/dev/zero", O_RDWR, MM_CORE_FILEMODE)) == -1)
           FAIL(MM_ERR_CORE|MM_ERR_SYSTEM, "failed to open /dev/zero");
  +#if defined(F_SETFD) && defined(FD_CLOEXEC)
  +    if (fcntl(fdmem, F_SETFD, FD_CLOEXEC) == -1)
  +        FAIL(MM_ERR_CORE|MM_ERR_SYSTEM, "failed to set close-on-exec flag");
  +#endif
       if (lseek(fdmem, mm_core_mapoffset+size, SEEK_SET) == -1)
           FAIL(MM_ERR_CORE|MM_ERR_SYSTEM, "failed to seek in /dev/zero");
       write(fdmem, &zero, sizeof(zero));
  @@ -277,6 +284,10 @@
       unlink(fnmem);
       if ((fdmem = open(fnmem, O_RDWR|O_CREAT|O_EXCL, MM_CORE_FILEMODE)) == -1)
           FAIL(MM_ERR_CORE|MM_ERR_SYSTEM, "failed to open memory file");
  +#if defined(F_SETFD) && defined(FD_CLOEXEC)
  +    if (fcntl(fdmem, F_SETFD, FD_CLOEXEC) == -1)
  +        FAIL(MM_ERR_CORE|MM_ERR_SYSTEM, "failed to set close-on-exec flag");
  +#endif
       if (ftruncate(fdmem, mm_core_mapoffset+size) == -1)
           FAIL(MM_ERR_CORE|MM_ERR_SYSTEM, "failed to truncate memory file");
       write(fdmem, &zero, sizeof(zero));
  @@ -305,12 +316,20 @@
       unlink(fnsem);
       if ((fdsem = open(fnsem, O_RDWR|O_CREAT|O_EXCL, MM_CORE_FILEMODE)) == -1)
           FAIL(MM_ERR_CORE|MM_ERR_SYSTEM, "failed to open semaphore file");
  +#if defined(F_SETFD) && defined(FD_CLOEXEC)
  +    if (fcntl(fdsem, F_SETFD, FD_CLOEXEC) == -1)
  +        FAIL(MM_ERR_CORE|MM_ERR_SYSTEM, "failed to set close-on-exec flag");
  +#endif
   #endif /* MM_SEMT_FLOCK */
   
   #if defined(MM_SEMT_FCNTL)
       unlink(fnsem);
       if ((fdsem = open(fnsem, O_RDWR|O_CREAT|O_EXCL, MM_CORE_FILEMODE)) == -1)
           FAIL(MM_ERR_CORE|MM_ERR_SYSTEM, "failed to open semaphore file");
  +#if defined(F_SETFD) && defined(FD_CLOEXEC)
  +    if (fcntl(fdsem, F_SETFD, FD_CLOEXEC) == -1)
  +        FAIL(MM_ERR_CORE|MM_ERR_SYSTEM, "failed to set close-on-exec flag");
  +#endif
   #endif /* MM_SEMT_FCNTL */
   
   #if defined(MM_SEMT_IPCSEM)

From ossp-cvs-owner@ossp.org  Thu Dec 19 10:13:25 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0A4077631C; Thu, 19 Dec 2002 10:13:25 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm ChangeLog devtool.conf
Message-Id: <20021219091325.0A4077631C@mail.ossp.org>
Date: Thu, 19 Dec 2002 10:13:25 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-Dec-2002 10:13:24
  Branch: HEAD                             Handle: 2002121909132400

  Modified files:
    ossp-pkg/mm             ChangeLog devtool.conf

  Log:
    Upgrade build environment to GNU Shtool 1.6.2, Libtool 1.4.3 and Autoconf 2.57.

  Summary:
    Revision    Changes     Path
    1.39        +4  -0      ossp-pkg/mm/ChangeLog
    1.3         +3  -3      ossp-pkg/mm/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/mm/ChangeLog
  ============================================================
  $ cvs diff -u -r1.38 -r1.39 ChangeLog
  --- ossp-pkg/mm/ChangeLog	19 Dec 2002 09:11:51 -0000	1.38
  +++ ossp-pkg/mm/ChangeLog	19 Dec 2002 09:13:24 -0000	1.39
  @@ -15,6 +15,10 @@
               
    Changes between 1.2.1 and 1.2.2 (28-Jul-2002 to xx-Dec-2002)
   
  +  *) Upgraded build environment to GNU Shtool 1.6.2, Libtool 1.4.3
  +     and Autoconf 2.57.
  +     [Ralf S. Engelschall]
  +
     *) Use "close-on-exec" semantic on internal file descriptors if
        underlying platform supports this feature. This makes sure the file
        descriptors are closed by the kernel upon execution of exec(3) by
  Index: ossp-pkg/mm/devtool.conf
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.conf
  --- ossp-pkg/mm/devtool.conf	28 Jul 2002 07:54:41 -0000	1.2
  +++ ossp-pkg/mm/devtool.conf	19 Dec 2002 09:13:24 -0000	1.3
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.1 "1.6.*" all
  -    @autogen libtool  1.4.2 "1.4*"
  -    @autogen autoconf 2.53  "2.5[3-9]*"
  +    @autogen shtool   1.6.2 "1.6.*" all
  +    @autogen libtool  1.4.3 "1.4*"
  +    @autogen autoconf 2.57  "2.5[3-9]*"
   
   %autoclean
       @autoclean shtool

From ossp-cvs-owner@ossp.org  Thu Dec 19 10:15:02 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7C94D7631C; Thu, 19 Dec 2002 10:15:00 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm ChangeLog INSTALL LICENSE Makefile.in PORTING ...
Message-Id: <20021219091500.7C94D7631C@mail.ossp.org>
Date: Thu, 19 Dec 2002 10:15:00 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-Dec-2002 10:15:00
  Branch: HEAD                             Handle: 2002121909145800

  Modified files:
    ossp-pkg/mm             ChangeLog INSTALL LICENSE Makefile.in PORTING
                            README THANKS aclocal.m4 configure.ac devtool.conf
                            mm-config.in mm-config.pod mm.h mm.pod mm_alloc.c
                            mm_core.c mm_global.c mm_lib.c mm_test.c

  Log:
    Stripped trailing whitespaces from all files in source tree.

  Summary:
    Revision    Changes     Path
    1.40        +26 -23     ossp-pkg/mm/ChangeLog
    1.3         +2  -2      ossp-pkg/mm/INSTALL
    1.5         +7  -7      ossp-pkg/mm/LICENSE
    1.31        +1  -1      ossp-pkg/mm/Makefile.in
    1.24        +2  -2      ossp-pkg/mm/PORTING
    1.73        +4  -4      ossp-pkg/mm/README
    1.14        +3  -3      ossp-pkg/mm/THANKS
    1.26        +5  -5      ossp-pkg/mm/aclocal.m4
    1.4         +11 -11     ossp-pkg/mm/configure.ac
    1.4         +1  -1      ossp-pkg/mm/devtool.conf
    1.9         +4  -4      ossp-pkg/mm/mm-config.in
    1.7         +4  -4      ossp-pkg/mm/mm-config.pod
    1.26        +7  -7      ossp-pkg/mm/mm.h
    1.20        +10 -10     ossp-pkg/mm/mm.pod
    1.17        +7  -7      ossp-pkg/mm/mm_alloc.c
    1.18        +9  -9      ossp-pkg/mm/mm_core.c
    1.11        +1  -1      ossp-pkg/mm/mm_global.c
    1.7         +1  -1      ossp-pkg/mm/mm_lib.c
    1.10        +9  -9      ossp-pkg/mm/mm_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/mm/ChangeLog
  ============================================================
  $ cvs diff -u -r1.39 -r1.40 ChangeLog
  --- ossp-pkg/mm/ChangeLog	19 Dec 2002 09:13:24 -0000	1.39
  +++ ossp-pkg/mm/ChangeLog	19 Dec 2002 09:14:58 -0000	1.40
  @@ -1,19 +1,22 @@
  -  _ __ ___  _ __ ___  
  - | '_ ` _ \| '_ ` _ \ 
  +  _ __ ___  _ __ ___
  + | '_ ` _ \| '_ ` _ \
    | | | | | | | | | | |
    |_| |_| |_|_| |_| |_|
  -                    
  +
    OSSP mm - Shared Memory Allocation
   
    ChangeLog
    =========
  -     _   ____  
  -    / | |___ \ 
  +     _   ____
  +    / | |___ \
       | |   __) |
  -    | |_ / __/ 
  +    | |_ / __/
     __|_(_)_____|______________________________________________________
  -            
  - Changes between 1.2.1 and 1.2.2 (28-Jul-2002 to xx-Dec-2002)
  +
  + Changes between 1.2.1 and 1.2.2 (28-Jul-2002 to 19-Dec-2002)
  +
  +  *) Stripped trailing whitespaces from all files in source tree.
  +     [Ralf S. Engelschall]
   
     *) Upgraded build environment to GNU Shtool 1.6.2, Libtool 1.4.3
        and Autoconf 2.57.
  @@ -77,7 +80,7 @@
     *) Fixed initializations of fdxxx variables in mm_core.c
        [Alexander Farber <farber@cpan.org>]
   
  -  *) Added $(DESTDIR) support to Makefile.in. This makes life easier 
  +  *) Added $(DESTDIR) support to Makefile.in. This makes life easier
        for RPM package building.
        [Brad <brad@openbsd.org>, Ralf S. Engelschall]
   
  @@ -86,18 +89,18 @@
        [Alexander Farber <farber@cpan.org>]
   
     *) Added required "(void *)" cast to MAP_FAILED in Autoconf stuff.
  -     [Albert Chin-A-Young <china@thewrittenword.com>, 
  +     [Albert Chin-A-Young <china@thewrittenword.com>,
        Joe Orton <jorton@redhat.com>]
   
    Changes between 1.1.2 and 1.1.3 (21-May-2000 to 01-Jul-2000)
   
  -  *) Upgraded to GNU libtool from version 1.3.4 to 1.3.5 
  +  *) Upgraded to GNU libtool from version 1.3.4 to 1.3.5
        and upgraded GNU shtool from version 1.4.9 to 1.5.0
        [Ralf S. Engelschall]
   
     *) Added OS/390 support to config.sub.
        [Greg Ames <gregames@raleigh.ibm.com>]
  -  
  +
     *) Fixed type-warnings related to `char' vs. `unsigned char' in mm_test.c
        [Ralf S. Engelschall]
   
  @@ -112,7 +115,7 @@
        [Ralf S. Engelschall]
   
    Changes between 1.1.1 and 1.1.2 (30-Apr-2000 to 21-May-2000)
  -  
  +
     *) Fixed some logic in mm's configuration that removes -g from CFLAGS.
        It incorrectly collapsed " -g " to "", which leaded to invalid CFLAGS.
        [Jeff Trawick <trawickj@bellsouth.net>]
  @@ -145,10 +148,10 @@
     *) Fixed pointer arithmentic in memset/memcpy replacements
        by casting `void *' arguments to `char *'.
        [Sascha Schumann <sascha@schumann.cx>]
  -     
  +
     *) Added BS2000 support for <sys/shm.h> stuff.
        [Martin Kraemer <martin.kraemer@mch.sni.de>]
  -     
  +
     *) Added an include for <fcntl.h> to maximum shared mem segment size
        check in aclocal.m4. This especially fixes compile problems under for
        Solaris 8.
  @@ -160,11 +163,11 @@
     *) Added support for IBM OS/390
        [Jeff Trawick <trawick@ibm.net>]
   
  -  *) Upgraded to GNU libtool from version 1.3.3 to 1.3.4 
  +  *) Upgraded to GNU libtool from version 1.3.3 to 1.3.4
        and upgraded GNU shtool from version 1.4.6 to 1.4.9
        [Ralf S. Engelschall]
   
  -  *) Upgraded config.guess to GNU Pth's version and 
  +  *) Upgraded config.guess to GNU Pth's version and
        use "/sbin/sysctl" under FreeBSD instead of just "sysctl"
        [Jeff Trawick <trawick@ibm.net>]
   
  @@ -189,14 +192,14 @@
     *) Splitted README into README, PORTING and THANKS document.
        [Ralf S. Engelschall]
   
  -    _   ___  
  -   / | / _ \ 
  +    _   ___
  +   / | / _ \
      | || | | |
      | || |_| |
    __|_(_)___/________________________________________________________
   
    Changes between 1.0.11 and 1.0.12 (06-Sep-1999 to 28-Sep-1999)
  -  
  +
     *) Recreated configure with latest Autoconf 2.13.1 (snapshot)
     *) Always use --mode=xxx for libtool calls to avoid problems under
        situations where $CC doesn't allow libtool to guess the mode
  @@ -233,7 +236,7 @@
     *) Fixed `make test'
   
    Changes between 1.0.7 and 1.0.8 (22-Jun-1999 to 24-Jun-1999)
  -  
  +
     *) Added important MAP_FAILED fallback also to Autoconf stuff
     *) Upgraded to latest shtool 1.3.0-dev to fix two Awk problems
   
  @@ -253,7 +256,7 @@
   
     *) Fixed mm_malloc() function: it returned the wrong pointer when a chunk
        was reused and forgot to lock/unlock the data structures.
  -  *) Fixed internal best-fit algorithm for finding a free memory chunk: 
  +  *) Fixed internal best-fit algorithm for finding a free memory chunk:
        - things got inserted out of order in the list
        - when chunk is found which matches size exactly it stops immediately
        - lowered chunk splitting threshold to MIN(2*size,128)
  @@ -265,7 +268,7 @@
     *) Fixed output of configure --help
     *) Upgraded to GNU libtool 1.3.2
     *) Upgraded to shtool 1.2.9
  -  *) Made libtool calls visible but use --quiet 
  +  *) Made libtool calls visible but use --quiet
     *) Hint user to send feedback only on errors or for new platform
     *) Removed unnecessary "elf" hint for FreeBSD from config.guess
   
  Index: ossp-pkg/mm/INSTALL
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 INSTALL
  --- ossp-pkg/mm/INSTALL	30 Apr 2000 09:22:11 -0000	1.2
  +++ ossp-pkg/mm/INSTALL	19 Dec 2002 09:14:58 -0000	1.3
  @@ -1,4 +1,4 @@
  -   __  __ __  __ 
  +   __  __ __  __
     |  \/  |  \/  |
     | |\/| | |\/| |
     | |  | | |  | |
  @@ -11,7 +11,7 @@
   
     To install the MM library into /path/to/mm/{bin,lib,include,man}/ perform
     the following steps in your shell:
  -      
  +
       $ ./configure --prefix=/path/to/mm
       $ make
       $ make test
  Index: ossp-pkg/mm/LICENSE
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 LICENSE
  --- ossp-pkg/mm/LICENSE	26 Jul 2002 09:59:34 -0000	1.4
  +++ ossp-pkg/mm/LICENSE	19 Dec 2002 09:14:58 -0000	1.5
  @@ -1,29 +1,29 @@
   
     ====================================================================
     Copyright (c) 1999-2002 Ralf S. Engelschall. All rights reserved.
  - 
  +
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
     are met:
  - 
  +
     1. Redistributions of source code must retain the above copyright
  -     notice, this list of conditions and the following disclaimer. 
  - 
  +     notice, this list of conditions and the following disclaimer.
  +
     2. Redistributions in binary form must reproduce the above copyright
        notice, this list of conditions and the following disclaimer in
        the documentation and/or other materials provided with the
        distribution.
  - 
  +
     3. All advertising materials mentioning features or use of this
        software must display the following acknowledgment:
        "This product includes software developed by
         Ralf S. Engelschall <rse@engelschall.com>."
  - 
  +
     4. Redistributions of any form whatsoever must retain the following
        acknowledgment:
        "This product includes software developed by
         Ralf S. Engelschall <rse@engelschall.com>."
  - 
  +
     THIS SOFTWARE IS PROVIDED BY RALF S. ENGELSCHALL ``AS IS'' AND ANY
     EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  Index: ossp-pkg/mm/Makefile.in
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 Makefile.in
  --- ossp-pkg/mm/Makefile.in	1 Aug 2002 12:59:07 -0000	1.30
  +++ ossp-pkg/mm/Makefile.in	19 Dec 2002 09:14:58 -0000	1.31
  @@ -6,7 +6,7 @@
   ## are met:
   ##
   ## 1. Redistributions of source code must retain the above copyright
  -##    notice, this list of conditions and the following disclaimer. 
  +##    notice, this list of conditions and the following disclaimer.
   ##
   ## 2. Redistributions in binary form must reproduce the above copyright
   ##    notice, this list of conditions and the following disclaimer in
  Index: ossp-pkg/mm/PORTING
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 PORTING
  --- ossp-pkg/mm/PORTING	29 Jan 2001 19:53:41 -0000	1.23
  +++ ossp-pkg/mm/PORTING	19 Dec 2002 09:14:58 -0000	1.24
  @@ -1,9 +1,9 @@
  -   __  __ __  __ 
  +   __  __ __  __
     |  \/  |  \/  |
     | |\/| | |\/| |
     | |  | | |  | |
     |_|  |_|_|  |_|
  -                 
  +
     MM - Shared Memory Library
   
     PORTING
  Index: ossp-pkg/mm/README
  ============================================================
  $ cvs diff -u -r1.72 -r1.73 README
  --- ossp-pkg/mm/README	28 Jul 2002 08:00:11 -0000	1.72
  +++ ossp-pkg/mm/README	19 Dec 2002 09:14:58 -0000	1.73
  @@ -1,8 +1,8 @@
  -   _ __ ___  _ __ ___  
  -  | '_ ` _ \| '_ ` _ \ 
  +   _ __ ___  _ __ ___
  +  | '_ ` _ \| '_ ` _ \
     | | | | | | | | | | |
     |_| |_| |_|_| |_| |_|
  -                     
  +
     OSSP mm - Shared Memory Allocation
     Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
     Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>
  @@ -14,7 +14,7 @@
     dependent implementation details (allocation and locking) when dealing with
     shared memory segments and on the second (higher) layer it provides a
     high-level malloc(3)-style API for a convenient and well known way to work
  -  with data-structures inside those shared memory segments. 
  +  with data-structures inside those shared memory segments.
   
     This library was successfully tested on FreeBSD, OpenBSD, NetBSD, BSDI,
     Linux, SunOS, Solaris, Tru64, AIX, A/UX, HP-UX, ReliantUNIX, IRIX, UnixWare
  Index: ossp-pkg/mm/THANKS
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 THANKS
  --- ossp-pkg/mm/THANKS	28 Jul 2002 07:54:41 -0000	1.13
  +++ ossp-pkg/mm/THANKS	19 Dec 2002 09:14:58 -0000	1.14
  @@ -1,9 +1,9 @@
  -   __  __ __  __ 
  +   __  __ __  __
     |  \/  |  \/  |
     | |\/| | |\/| |
     | |  | | |  | |
     |_|  |_|_|  |_|
  -                 
  +
     MM - Shared Memory Library
   
     THANKS
  @@ -48,7 +48,7 @@
       o  Thomas J. Menini            <menini@lvip.net>
       o  Joe Orton                   <jorton@redhat.com>
       o  Patrick                     <puzzled@symplex.net>
  -    o  Charles Randall             <crandall@matchlogic.com> 
  +    o  Charles Randall             <crandall@matchlogic.com>
       o  David Rees                  <drees@ucsd.edu>
       o  Martin Rosenbach            <Rosenbach@seninn.verwalt-berlin.de>
       o  David Reid                  <dreid@jetnet.co.uk>
  Index: ossp-pkg/mm/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 aclocal.m4
  --- ossp-pkg/mm/aclocal.m4	26 Jul 2002 13:04:39 -0000	1.25
  +++ ossp-pkg/mm/aclocal.m4	19 Dec 2002 09:14:58 -0000	1.26
  @@ -6,7 +6,7 @@
   ## are met:
   ##
   ## 1. Redistributions of source code must retain the above copyright
  -##    notice, this list of conditions and the following disclaimer. 
  +##    notice, this list of conditions and the following disclaimer.
   ##
   ## 2. Redistributions in binary form must reproduce the above copyright
   ##    notice, this list of conditions and the following disclaimer in
  @@ -241,7 +241,7 @@
   #define KERNEL 1
   #endif
   #ifdef MM_OS_BS2000
  -#define _KMEMUSER 
  +#define _KMEMUSER
   #endif
   #include <sys/ipc.h>
   #include <sys/shm.h>
  @@ -276,7 +276,7 @@
           return 0;
       if (ftruncate(fd, size) == -1)
           return 0;
  -    if ((segment = (void *)mmap(NULL, size, PROT_READ|PROT_WRITE, 
  +    if ((segment = (void *)mmap(NULL, size, PROT_READ|PROT_WRITE,
                                   MAP_SHARED, fd, 0)) == (void *)MAP_FAILED) {
           close(fd);
           return 0;
  @@ -297,7 +297,7 @@
   #endif
   #ifdef TEST_BEOS
       area_id id;
  -    id = create_area("mm_test", (void*)&segment, B_ANY_ADDRESS, size, 
  +    id = create_area("mm_test", (void*)&segment, B_ANY_ADDRESS, size,
                        B_LAZY_LOCK, B_READ_AREA|B_WRITE_AREA);
       if (id < 0)
           return 0;
  @@ -308,7 +308,7 @@
   
   #define ABS(n) ((n) >= 0 ? (n) : (-(n)))
   
  -int main(int argc, char *argv[]) 
  +int main(int argc, char *argv[])
   {
       int t, m, b;
       int d;
  Index: ossp-pkg/mm/configure.ac
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 configure.ac
  --- ossp-pkg/mm/configure.ac	26 Jul 2002 13:21:31 -0000	1.3
  +++ ossp-pkg/mm/configure.ac	19 Dec 2002 09:14:58 -0000	1.4
  @@ -52,7 +52,7 @@
   
   AC_CONFIGURE_PART(Platform Environment)
   
  -AC_HAVE_HEADERS(stdio.h stdlib.h string.h dnl 
  +AC_HAVE_HEADERS(stdio.h stdlib.h string.h dnl
                   errno.h limits.h unistd.h fcntl.h dnl
                   sys/stat.h sys/types.h)
   AC_BEGIN_DECISION([mandatory system headers])
  @@ -93,12 +93,12 @@
   AH_TEMPLATE([MM_VMPS_SYSCONF],     [memory page size determination: POSIX.1 sysconf(_SC_PAGESIZE)])
   AH_TEMPLATE([MM_VMPS_BEOS],        [memory page size determination: BeOS B_PAGE_SIZE])
   AC_BEGIN_DECISION([memory page size determination])
  -AC_IFALLYES(header:unistd.h func:getpagesize, 
  +AC_IFALLYES(header:unistd.h func:getpagesize,
               AC_DECIDE(MM_VMPS_GETPAGESIZE, [4.2BSD getpagesize()]))
  -AC_IFALLYES(header:unistd.h func:sysconf define:_SC_PAGESIZE, 
  +AC_IFALLYES(header:unistd.h func:sysconf define:_SC_PAGESIZE,
               AC_DECIDE(MM_VMPS_SYSCONF, [POSIX.1 sysconf(_SC_PAGESIZE)]))
   AC_IFALLYES(header:kernel/OS.h define:B_PAGE_SIZE,
  -            AC_DECIDE(MM_VMPS_BEOS, [BeOS B_PAGE_SIZE])) 
  +            AC_DECIDE(MM_VMPS_BEOS, [BeOS B_PAGE_SIZE]))
   AC_END_DECISION
   AC_DEFINE_UNQUOTED($ac_decision)
   
  @@ -126,16 +126,16 @@
   AC_BEGIN_DECISION([shared memory allocation method])
   AC_IFALLYES(header:kernel/OS.h func:create_area,
               AC_DECIDE(MM_SHMT_BEOS, [BeOS areas]))
  -AC_IFALLYES(header:sys/mman.h func:mmap func:munmap, 
  +AC_IFALLYES(header:sys/mman.h func:mmap func:munmap,
               AC_DECIDE(MM_SHMT_MMFILE, [Classical mmap() on temporary file]))
  -AC_IFALLYES(header:sys/mman.h func:mmap func:munmap func:shm_open func:shm_unlink, 
  +AC_IFALLYES(header:sys/mman.h func:mmap func:munmap func:shm_open func:shm_unlink,
               AC_DECIDE(MM_SHMT_MMPOSX, [mmap() via POSIX.1 shm_open() on temporary file]))
  -AC_IFALLYES(header:sys/mman.h func:mmap func:munmap file:/dev/zero, 
  +AC_IFALLYES(header:sys/mman.h func:mmap func:munmap file:/dev/zero,
               AC_DECIDE(MM_SHMT_MMZERO, [SVR4-style mmap() on /dev/zero]))
   AC_IFALLYES(header:sys/ipc.h header:sys/shm.h header:sys/file.h dnl
               func:shmget func:shmat func:shmdt func:shmctl,
               AC_DECIDE(MM_SHMT_IPCSHM, [SysV IPC shmget()]))
  -AC_IFALLYES(header:sys/mman.h func:mmap func:munmap define:MAP_ANON, 
  +AC_IFALLYES(header:sys/mman.h func:mmap func:munmap define:MAP_ANON,
               AC_DECIDE(MM_SHMT_MMANON, [4.4BSD-style mmap() via MAP_ANON]))
   case $PLATFORM in
       *-*-linux* )
  @@ -155,7 +155,7 @@
           #       Should be supported in Linux 2.3, but still hangs there.
           #       Will be supported from Linux 2.4 on the first time really.
           #   MM_SHMT_MMFILE:
  -        #       Works on Linux versions. 
  +        #       Works on Linux versions.
           case $PLATFORM in
               *-linux1* )
                   AC_DECISION_FORCE(MM_SHMT_MMFILE)
  @@ -221,12 +221,12 @@
   AH_TEMPLATE([MM_SEMT_FCNTL],  [mutex implementation method: SVR4-style fcntl() on temporary file])
   AH_TEMPLATE([MM_SEMT_BEOS],   [mutex implementation method: BeOS semaphores])
   AC_BEGIN_DECISION([mutex implementation method])
  -AC_IFALLYES(header:sys/file.h define:LOCK_EX, 
  +AC_IFALLYES(header:sys/file.h define:LOCK_EX,
               AC_DECIDE(MM_SEMT_FLOCK, [4.2BSD-style flock() on temporary file]))
   AC_IFALLYES(header:sys/ipc.h header:sys/sem.h header:sys/file.h dnl
               func:semget func:semctl,
               AC_DECIDE(MM_SEMT_IPCSEM, [SysV IPC semget()]))
  -AC_IFALLYES(header:fcntl.h define:F_SETLK, 
  +AC_IFALLYES(header:fcntl.h define:F_SETLK,
               AC_DECIDE(MM_SEMT_FCNTL, [SVR4-style fcntl() on temporary file]))
   AC_IFALLYES(header:kernel/OS.h func:create_sem,
               AC_DECIDE(MM_SEMT_BEOS, [BeOS semaphores]))
  Index: ossp-pkg/mm/devtool.conf
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.conf
  --- ossp-pkg/mm/devtool.conf	19 Dec 2002 09:13:24 -0000	1.3
  +++ ossp-pkg/mm/devtool.conf	19 Dec 2002 09:14:58 -0000	1.4
  @@ -22,7 +22,7 @@
   %version
       ./shtool version -l c -n "OSSP mm" -p mm_ -e mm_vers.c
       V=`./shtool version -l c -d long mm_vers.c`
  -    sed -e "s/Version .*(.*)/Version $V/g" <README >README.n 
  +    sed -e "s/Version .*(.*)/Version $V/g" <README >README.n
       mv README.n README
   
   %dist
  Index: ossp-pkg/mm/mm-config.in
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 mm-config.in
  --- ossp-pkg/mm/mm-config.in	26 Jul 2002 09:59:34 -0000	1.8
  +++ ossp-pkg/mm/mm-config.in	19 Dec 2002 09:14:58 -0000	1.9
  @@ -10,7 +10,7 @@
   ## are met:
   ##
   ## 1. Redistributions of source code must retain the above copyright
  -##    notice, this list of conditions and the following disclaimer. 
  +##    notice, this list of conditions and the following disclaimer.
   ##
   ## 2. Redistributions in binary form must reproduce the above copyright
   ##    notice, this list of conditions and the following disclaimer in
  @@ -41,7 +41,7 @@
   ## OF THE POSSIBILITY OF SUCH DAMAGE.
   ## ====================================================================
   
  -DIFS=' 	
  +DIFS=' 
   '
   
   prefix="@prefix@"
  @@ -82,7 +82,7 @@
              *) optarg='' ;;
       esac
       case "$option" in
  -        --help|-h) 
  +        --help|-h)
               echo "Usage: $usage"
               echo "Report bugs to rse@engelschall.com"
               exit 0
  @@ -106,7 +106,7 @@
               output="$output -lmm"
               output_extra="$output_extra $mm_libs"
               ;;
  -        * )             
  +        * )
               echo "mm-config:Error: Invalid option" 1>&2
               echo "mm-config:Usage: $usage" 1>&2
               exit 1;
  Index: ossp-pkg/mm/mm-config.pod
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 mm-config.pod
  --- ossp-pkg/mm/mm-config.pod	26 Jul 2002 13:04:40 -0000	1.6
  +++ ossp-pkg/mm/mm-config.pod	19 Dec 2002 09:14:58 -0000	1.7
  @@ -6,7 +6,7 @@
   ## are met:
   ##
   ## 1. Redistributions of source code must retain the above copyright
  -##    notice, this list of conditions and the following disclaimer. 
  +##    notice, this list of conditions and the following disclaimer.
   ##
   ## 2. Redistributions in binary form must reproduce the above copyright
   ##    notice, this list of conditions and the following disclaimer in
  @@ -53,7 +53,7 @@
   
   =head1 SYNOPSIS
   
  -B<mm-config> 
  +B<mm-config>
   [B<--help>]
   [B<--version>]
   [B<--cflags>]
  @@ -65,7 +65,7 @@
   The B<mm-config> program is a little helper utility for easy configuring and
   building applications based on the mm(3) library.  It can be used to query the
   C compiler and linker flags which are required to correctly compile and link
  -the application against the mm(3) library. 
  +the application against the mm(3) library.
   
   =head1 OPTIONS
   
  @@ -107,7 +107,7 @@
    CFLAGS=-O `mm-config --cflags`
    LDFLAGS=`mm-config --ldflags`
    LIBS=-lm `mm-config --libs`
  - 
  +
    all: foo
    foo: foo.o
        $(CC) $(LDFLAGS) -o foo foo.o $(LIBS)
  Index: ossp-pkg/mm/mm.h
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 mm.h
  --- ossp-pkg/mm/mm.h	26 Jul 2002 13:21:31 -0000	1.25
  +++ ossp-pkg/mm/mm.h	19 Dec 2002 09:14:58 -0000	1.26
  @@ -6,7 +6,7 @@
    * are met:
    *
    * 1. Redistributions of source code must retain the above copyright
  - *    notice, this list of conditions and the following disclaimer. 
  + *    notice, this list of conditions and the following disclaimer.
    *
    * 2. Redistributions in binary form must reproduce the above copyright
    *    notice, this list of conditions and the following disclaimer in
  @@ -62,7 +62,7 @@
   #include <sys/types.h>
   #include <sys/stat.h>
   
  -typedef enum { 
  +typedef enum {
       MM_LOCK_RD, MM_LOCK_RW
   } mm_lock_mode;
   
  @@ -119,7 +119,7 @@
   #define offset_of(type,member) ((size_t)(&((type *)0)->member))
   #endif
   
  -#if !defined(HAVE_MEMCPY) 
  +#if !defined(HAVE_MEMCPY)
   #if defined(HAVE_BCOPY)
   #define memcpy(to,from,len) bcopy(from,to,len)
   #else
  @@ -135,7 +135,7 @@
   #define ERR(type,str)   mm_lib_error_set(type,str)
   #define FAIL(type,str)  { ERR(type,str); goto cus; }
   #define BEGIN_FAILURE   cus:
  -#define END_FAILURE   
  +#define END_FAILURE
   
   #if defined(HAVE_PATH_MAX)
   #define MM_MAXPATH PATH_MAX
  @@ -175,7 +175,7 @@
   #define KERNEL 1
   #endif
   #ifdef MM_OS_BS2000
  -#define _KMEMUSER 
  +#define _KMEMUSER
   #endif
   #include <sys/shm.h>
   #ifdef MM_OS_SUNOS
  @@ -211,7 +211,7 @@
   #include <sys/file.h>
   #endif
   
  -#define MM_ALLOC_MINSIZE         (1024*8) 
  +#define MM_ALLOC_MINSIZE         (1024*8)
   #define MM_CORE_FILEMODE         (S_IRUSR|S_IWUSR)
   #define MM_CORE_DEFAULT_PAGESIZE (1024*8)
   #define MM_CORE_DEFAULT_FILE     "/tmp/mm.core.%d"  /* %d is PID */
  @@ -220,7 +220,7 @@
   #define MM_ERR_CORE     2
   #define MM_ERR_SYSTEM   4
   
  -/* 
  +/*
    * Define a union with types which are likely to have the longest
    * *relevant* CPU-specific memory word alignment restrictions...
    */
  Index: ossp-pkg/mm/mm.pod
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 mm.pod
  --- ossp-pkg/mm/mm.pod	26 Jul 2002 13:04:40 -0000	1.19
  +++ ossp-pkg/mm/mm.pod	19 Dec 2002 09:14:58 -0000	1.20
  @@ -6,7 +6,7 @@
   ## are met:
   ##
   ## 1. Redistributions of source code must retain the above copyright
  -##    notice, this list of conditions and the following disclaimer. 
  +##    notice, this list of conditions and the following disclaimer.
   ##
   ## 2. Redistributions in binary form must reproduce the above copyright
   ##    notice, this list of conditions and the following disclaimer in
  @@ -116,12 +116,12 @@
   dependent implementation details (allocation and locking) when dealing with
   shared memory segments and on the second (higher) layer it provides a
   high-level malloc(3)-style API for a convenient and well known way to work
  -with data-structures inside those shared memory segments. 
  +with data-structures inside those shared memory segments.
   
   The abbreviation B<OSSP mm> is historically and originally comes from the phrase
   ``I<memory mapped>'' as used by the POSIX.1 mmap(2) function. Because this
   facility is internally used by this library on most platforms to establish the
  -shared memory segments. 
  +shared memory segments.
   
   =head2 LIBRARY STRUCTURE
   
  @@ -249,13 +249,13 @@
   
   If a chunk of memory has to be allocated, the internal list of free chunks
   is searched for a minimal-size chunk which is larger or equal than the size of
  -the to be allocated chunk (a I<best fit> strategy). 
  +the to be allocated chunk (a I<best fit> strategy).
   
   If a chunk is found which matches this best-fit criteria, but is still a lot
   larger than the requested size, it is split into two chunks: One with exactly
   the requested size (which is the resulting chunk given back) and one with the
   remaining size (which is immediately re-inserted into the list of free
  -chunks). 
  +chunks).
   
   If no fitting chunk is found at all in the list of free chunks, a new one is
   created from the spare area of the shared memory segment until the segment is
  @@ -267,7 +267,7 @@
   into the internal list of free chunks. The insertion operation automatically
   merges the chunk with a previous and/or a next free chunk if possible, i.e.
   if the free chunks stay physically seamless (one after another) in memory, to
  -automatically form larger free chunks out of smaller ones. 
  +automatically form larger free chunks out of smaller ones.
   
   This way the shared memory segment is automatically defragmented when memory
   is deallocated.
  @@ -275,7 +275,7 @@
   =back
   
   This strategy reduces memory waste and fragmentation caused by small and
  -frequent allocations and deallocations to a minimum. 
  +frequent allocations and deallocations to a minimum.
   
   The internal implementation of the list of free chunks is not specially
   optimized (for instance by using binary search trees or even I<splay> trees,
  @@ -464,7 +464,7 @@
   
   =item size_t B<mm_available>(MM *I<mm>);
   
  -Returns the amount in bytes of still available (free) memory in the 
  +Returns the amount in bytes of still available (free) memory in the
   shared memory pool I<mm>.
   
   =item char *B<mm_error>(void);
  @@ -524,7 +524,7 @@
   This returns the size in bytes of I<core>. This size is exactly the size which
   was used for creating the shared memory area via mm_core_create(3). The
   function is provided just for convenience reasons to not require the
  -application to remember the memory size behind I<core> itself. 
  +application to remember the memory size behind I<core> itself.
   
   =item size_t B<mm_core_maxsegsize>(void);
   
  @@ -587,7 +587,7 @@
   currently the high-level malloc(3)-style API just uses a single shared memory
   segment as the underlaying data structure for an C<MM> object which means that
   the maximum amount of memory an C<MM> object represents also depends on the
  -platform. 
  +platform.
   
   This could be changed in later versions by allowing at least the
   high-level malloc(3)-style API to internally use multiple shared memory
  Index: ossp-pkg/mm/mm_alloc.c
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 mm_alloc.c
  --- ossp-pkg/mm/mm_alloc.c	26 Jul 2002 09:59:34 -0000	1.16
  +++ ossp-pkg/mm/mm_alloc.c	19 Dec 2002 09:14:58 -0000	1.17
  @@ -6,7 +6,7 @@
    * are met:
    *
    * 1. Redistributions of source code must retain the above copyright
  - *    notice, this list of conditions and the following disclaimer. 
  + *    notice, this list of conditions and the following disclaimer.
    *
    * 2. Redistributions in binary form must reproduce the above copyright
    *    notice, this list of conditions and the following disclaimer in
  @@ -111,7 +111,7 @@
   }
   
   /*
  - * Lock a memory pool 
  + * Lock a memory pool
    */
   int mm_lock(MM *mm, mm_lock_mode mode)
   {
  @@ -121,7 +121,7 @@
   }
   
   /*
  - * Unlock a memory pool 
  + * Unlock a memory pool
    */
   int mm_unlock(MM *mm)
   {
  @@ -155,7 +155,7 @@
       fprintf(stderr, "    memory size     = %d\n", mm->mp_size);
       fprintf(stderr, "    memory offset   = %d\n", mm->mp_offset);
       fprintf(stderr, "    bytes spare     = %d\n", mm->mp_size-mm->mp_offset);
  -    fprintf(stderr, "    bytes free      = %d (%d chunk%s)\n", 
  +    fprintf(stderr, "    bytes free      = %d (%d chunk%s)\n",
               nFree, mm->mp_freechunks.mc_usize,
               mm->mp_freechunks.mc_usize == 1 ? "" : "s");
       fprintf(stderr, "    bytes allocated = %d\n", nAlloc);
  @@ -166,7 +166,7 @@
           i = 1;
           while (mc->mc_u.mc_next != NULL) {
               mc = mc->mc_u.mc_next;
  -            fprintf(stderr, "        chunk #%03d: 0x%lx-0x%lx (%d bytes)\n", 
  +            fprintf(stderr, "        chunk #%03d: 0x%lx-0x%lx (%d bytes)\n",
                       i++, (unsigned long)mc, (unsigned long)(mc+mc->mc_size), mc->mc_size);
           }
       }
  @@ -188,7 +188,7 @@
       mem_chunk *mc;
       mem_chunk *mcPrev;
       mem_chunk *mcNext;
  -    
  +
       if (!mm_core_lock((void *)mm, MM_LOCK_RW))
           return;
       mc = &(mm->mp_freechunks);
  @@ -313,7 +313,7 @@
           mm_core_unlock((void *)mm);
           ERR(MM_ERR_ALLOC, "out of memory");
           errno = ENOMEM;
  -        return NULL; 
  +        return NULL;
       }
       mc = (mem_chunk *)((char *)mm + mm->mp_offset);
       mc->mc_size  = size;
  Index: ossp-pkg/mm/mm_core.c
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 mm_core.c
  --- ossp-pkg/mm/mm_core.c	19 Dec 2002 09:11:51 -0000	1.17
  +++ ossp-pkg/mm/mm_core.c	19 Dec 2002 09:14:58 -0000	1.18
  @@ -6,7 +6,7 @@
    * are met:
    *
    * 1. Redistributions of source code must retain the above copyright
  - *    notice, this list of conditions and the following disclaimer. 
  + *    notice, this list of conditions and the following disclaimer.
    *
    * 2. Redistributions in binary form must reproduce the above copyright
    *    notice, this list of conditions and the following disclaimer in
  @@ -118,10 +118,10 @@
       int fd = -1;
       pid_t pid;
       int i;
  -    
  +
       pid = getpid();
  -    for (i = 0; i < MM_MAXCHILD && 
  -                mc->mc_fdsem[i].pid != 0 && 
  +    for (i = 0; i < MM_MAXCHILD &&
  +                mc->mc_fdsem[i].pid != 0 &&
                   mc->mc_fdsem[i].fd != -1; i++) {
           if (mc->mc_fdsem[i].pid == pid) {
               fd = mc->mc_fdsem[i].fd;
  @@ -239,7 +239,7 @@
   #endif
   
   #if defined(MM_SHMT_MMANON)
  -    if ((area = (void *)mmap(NULL, size, PROT_READ|PROT_WRITE, 
  +    if ((area = (void *)mmap(NULL, size, PROT_READ|PROT_WRITE,
                                MAP_ANON|MAP_SHARED, -1, 0)) == (void *)MAP_FAILED)
           FAIL(MM_ERR_CORE|MM_ERR_SYSTEM, "failed to memory map anonymous area");
   #endif /* MM_SHMT_MMANON */
  @@ -257,7 +257,7 @@
       if (ftruncate(fdmem, mm_core_mapoffset+size) == -1)
           FAIL(MM_ERR_CORE|MM_ERR_SYSTEM, "failed to truncate tempfile");
       write(fdmem, &zero, sizeof(zero));
  -    if ((area = (void *)mmap(NULL, size, PROT_READ|PROT_WRITE, 
  +    if ((area = (void *)mmap(NULL, size, PROT_READ|PROT_WRITE,
                                MAP_SHARED, fdmem, mm_core_mapoffset)) == (void *)MAP_FAILED)
           FAIL(MM_ERR_CORE|MM_ERR_SYSTEM, "failed to memory map tempfile");
       shm_unlink(fnmem);
  @@ -274,7 +274,7 @@
       if (lseek(fdmem, mm_core_mapoffset+size, SEEK_SET) == -1)
           FAIL(MM_ERR_CORE|MM_ERR_SYSTEM, "failed to seek in /dev/zero");
       write(fdmem, &zero, sizeof(zero));
  -    if ((area = (void *)mmap(NULL, size, PROT_READ|PROT_WRITE, 
  +    if ((area = (void *)mmap(NULL, size, PROT_READ|PROT_WRITE,
                                MAP_SHARED, fdmem, mm_core_mapoffset)) == (void *)MAP_FAILED)
           FAIL(MM_ERR_CORE|MM_ERR_SYSTEM, "failed to memory map /dev/zero");
       mm_core_mapoffset += size;
  @@ -291,7 +291,7 @@
       if (ftruncate(fdmem, mm_core_mapoffset+size) == -1)
           FAIL(MM_ERR_CORE|MM_ERR_SYSTEM, "failed to truncate memory file");
       write(fdmem, &zero, sizeof(zero));
  -    if ((area = (void *)mmap(NULL, size, PROT_READ|PROT_WRITE, 
  +    if ((area = (void *)mmap(NULL, size, PROT_READ|PROT_WRITE,
                                MAP_SHARED, fdmem, mm_core_mapoffset)) == (void *)MAP_FAILED)
           FAIL(MM_ERR_CORE|MM_ERR_SYSTEM, "failed to memory map memory file");
       mm_core_mapoffset += size;
  @@ -609,7 +609,7 @@
           }
       }
   #endif
  - 
  +
       if (rc < 0) {
           ERR(MM_ERR_CORE|MM_ERR_SYSTEM, "Failed to lock");
           rc = FALSE;
  Index: ossp-pkg/mm/mm_global.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 mm_global.c
  --- ossp-pkg/mm/mm_global.c	26 Jul 2002 09:59:34 -0000	1.10
  +++ ossp-pkg/mm/mm_global.c	19 Dec 2002 09:14:58 -0000	1.11
  @@ -6,7 +6,7 @@
    * are met:
    *
    * 1. Redistributions of source code must retain the above copyright
  - *    notice, this list of conditions and the following disclaimer. 
  + *    notice, this list of conditions and the following disclaimer.
    *
    * 2. Redistributions in binary form must reproduce the above copyright
    *    notice, this list of conditions and the following disclaimer in
  Index: ossp-pkg/mm/mm_lib.c
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 mm_lib.c
  --- ossp-pkg/mm/mm_lib.c	26 Jul 2002 09:59:34 -0000	1.6
  +++ ossp-pkg/mm/mm_lib.c	19 Dec 2002 09:14:58 -0000	1.7
  @@ -6,7 +6,7 @@
    * are met:
    *
    * 1. Redistributions of source code must retain the above copyright
  - *    notice, this list of conditions and the following disclaimer. 
  + *    notice, this list of conditions and the following disclaimer.
    *
    * 2. Redistributions in binary form must reproduce the above copyright
    *    notice, this list of conditions and the following disclaimer in
  Index: ossp-pkg/mm/mm_test.c
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 mm_test.c
  --- ossp-pkg/mm/mm_test.c	26 Jul 2002 09:59:34 -0000	1.9
  +++ ossp-pkg/mm/mm_test.c	19 Dec 2002 09:14:58 -0000	1.10
  @@ -6,7 +6,7 @@
    * are met:
    *
    * 1. Redistributions of source code must retain the above copyright
  - *    notice, this list of conditions and the following disclaimer. 
  + *    notice, this list of conditions and the following disclaimer.
    *
    * 2. Redistributions in binary form must reproduce the above copyright
    *    notice, this list of conditions and the following disclaimer in
  @@ -61,7 +61,7 @@
            exit(1); \
        }
   
  -int main(int argc, char *argv[]) 
  +int main(int argc, char *argv[])
   {
       unsigned char *core;
       int i;
  @@ -73,7 +73,7 @@
       char *cp[1025];
       int version;
       struct count_test { int count; int prev; } *ct;
  -    
  +
       setbuf(stderr, NULL);
   
       /*
  @@ -94,7 +94,7 @@
       **  Test Low-Level Shared Memory API
       **
       */
  -    
  +
       fprintf(stderr, "\n*** TESTING LOW-LEVEL SHARED MEMORY API ***\n");
   
       fprintf(stderr, "\n=== Testing Memory Segment Access ===\n");
  @@ -134,7 +134,7 @@
       s = mm_core_size(ct);
       FAILED_IF(s == 0);
       fprintf(stderr, "actually allocated core size = %d\n", s);
  -    
  +
       ct->prev  = 0;
       ct->count = 1;
       if ((pid = fork()) == 0) {
  @@ -203,10 +203,10 @@
       s = mm_available(mm);
       FAILED_IF(s == 0);
       fprintf(stderr, "actually available bytes = %d\n", s);
  -    
  +
       fprintf(stderr, "Allocating areas inside MM\n");
       n = 0;
  -    for (i = 0; i < 1024; i++) 
  +    for (i = 0; i < 1024; i++)
           cp[i] = NULL;
       for (i = 0; i < 1024; i++) {
           fprintf(stderr, "total=%09d allocated=%09d add=%06d\r", s, n, (i+1)*(i+1));
  @@ -253,10 +253,10 @@
       else {
           fprintf(stderr, "Fine, we have again %d bytes available\n", s2);
       }
  -    
  +
       fprintf(stderr, "Destroying MM object\n");
       mm_destroy(mm);
  -    
  +
       /******/
   
       fprintf(stderr, "\nOK - ALL TESTS SUCCESSFULLY PASSED.\n\n");

From ossp-cvs-owner@ossp.org  Thu Dec 19 10:15:50 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6A7FD76509; Thu, 19 Dec 2002 10:15:50 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm README mm_vers.c
Message-Id: <20021219091550.6A7FD76509@mail.ossp.org>
Date: Thu, 19 Dec 2002 10:15:50 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-Dec-2002 10:15:50
  Branch: HEAD                             Handle: 2002121909154900

  Modified files:
    ossp-pkg/mm             README mm_vers.c

  Log:
    bump up version for later release

  Summary:
    Revision    Changes     Path
    1.74        +1  -1      ossp-pkg/mm/README
    1.40        +9  -9      ossp-pkg/mm/mm_vers.c
  ____________________________________________________________________________

  Index: ossp-pkg/mm/README
  ============================================================
  $ cvs diff -u -r1.73 -r1.74 README
  --- ossp-pkg/mm/README	19 Dec 2002 09:14:58 -0000	1.73
  +++ ossp-pkg/mm/README	19 Dec 2002 09:15:49 -0000	1.74
  @@ -6,7 +6,7 @@
     OSSP mm - Shared Memory Allocation
     Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
     Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>
  -  Version 1.2.1 (28-Jul-2002)
  +  Version 1.2.2 (19-Dec-2002)
   
     OSSP mm is a 2-layer abstraction library which simplifies the usage
     of shared memory between forked (and this way strongly related) processes
  Index: ossp-pkg/mm/mm_vers.c
  ============================================================
  $ cvs diff -u -r1.39 -r1.40 mm_vers.c
  --- ossp-pkg/mm/mm_vers.c	28 Jul 2002 08:00:12 -0000	1.39
  +++ ossp-pkg/mm/mm_vers.c	19 Dec 2002 09:15:49 -0000	1.40
  @@ -8,7 +8,7 @@
   #ifndef _MM_VERS_C_
   #define _MM_VERS_C_
   
  -#define MM_VERSION 0x102201
  +#define MM_VERSION 0x102202
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _MM_VERS_C_AS_HEADER_
   
   mm_version_t mm_version = {
  -    0x102201,
  -    "1.2.1",
  -    "1.2.1 (28-Jul-2002)",
  -    "This is OSSP mm, Version 1.2.1 (28-Jul-2002)",
  -    "OSSP mm 1.2.1 (28-Jul-2002)",
  -    "OSSP mm/1.2.1",
  -    "@(#)OSSP mm 1.2.1 (28-Jul-2002)",
  -    "$Id: OSSP mm 1.2.1 (28-Jul-2002) $"
  +    0x102202,
  +    "1.2.2",
  +    "1.2.2 (19-Dec-2002)",
  +    "This is OSSP mm, Version 1.2.2 (19-Dec-2002)",
  +    "OSSP mm 1.2.2 (19-Dec-2002)",
  +    "OSSP mm/1.2.2",
  +    "@(#)OSSP mm 1.2.2 (19-Dec-2002)",
  +    "$Id: OSSP mm 1.2.2 (19-Dec-2002) $"
   };
   
   #endif /* _MM_VERS_C_AS_HEADER_ */

From ossp-cvs-owner@ossp.org  Thu Dec 19 10:16:21 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2E61776A9F; Thu, 19 Dec 2002 10:16:21 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm aclocal.m4
Message-Id: <20021219091621.2E61776A9F@mail.ossp.org>
Date: Thu, 19 Dec 2002 10:16:21 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-Dec-2002 10:16:21
  Branch: HEAD                             Handle: 2002121909162000

  Modified files:
    ossp-pkg/mm             aclocal.m4

  Log:
    get rid of old and problematic -ggdb3 stuff

  Summary:
    Revision    Changes     Path
    1.27        +0  -1      ossp-pkg/mm/aclocal.m4
  ____________________________________________________________________________

  Index: ossp-pkg/mm/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 aclocal.m4
  --- ossp-pkg/mm/aclocal.m4	19 Dec 2002 09:14:58 -0000	1.26
  +++ ossp-pkg/mm/aclocal.m4	19 Dec 2002 09:16:20 -0000	1.27
  @@ -51,7 +51,6 @@
           *-g* ) ;;
              * ) CFLAGS="$CFLAGS -g" ;;
       esac
  -    CFLAGS="$CFLAGS -ggdb3"
       CFLAGS="$CFLAGS -Wall -Wshadow -Wpointer-arith -Wcast-align"
       CFLAGS="$CFLAGS -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline"
   else

From ossp-cvs-owner@ossp.org  Thu Dec 19 10:25:26 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id ECB2E76313; Thu, 19 Dec 2002 10:25:25 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm ChangeLog INSTALL LICENSE Makefile.in PORTING ...
Message-Id: <20021219092525.ECB2E76313@mail.ossp.org>
Date: Thu, 19 Dec 2002 10:25:25 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-Dec-2002 10:25:25
  Branch: HEAD                             Handle: 2002121909252301

  Modified files:
    ossp-pkg/mm             ChangeLog INSTALL LICENSE Makefile.in PORTING
                            README THANKS aclocal.m4 configure.ac devtool.func
                            mm-config.in mm-config.pod mm.h mm.pod mm_alloc.c
                            mm_core.c mm_global.c mm_lib.c mm_test.c

  Log:
    Updated all copyright messages with forthcoming year 2003,
    added OSSP project as secondary copyright holder, added standard
    OSSP ASCII-art logo to documents, etc.

  Summary:
    Revision    Changes     Path
    1.41        +10 -4      ossp-pkg/mm/ChangeLog
    1.4         +6  -6      ossp-pkg/mm/INSTALL
    1.6         +2  -1      ossp-pkg/mm/LICENSE
    1.32        +2  -1      ossp-pkg/mm/Makefile.in
    1.25        +8  -8      ossp-pkg/mm/PORTING
    1.75        +7  -6      ossp-pkg/mm/README
    1.15        +6  -6      ossp-pkg/mm/THANKS
    1.28        +2  -1      ossp-pkg/mm/aclocal.m4
    1.5         +43 -3      ossp-pkg/mm/configure.ac
    1.2         +1  -1      ossp-pkg/mm/devtool.func
    1.10        +2  -1      ossp-pkg/mm/mm-config.in
    1.8         +2  -1      ossp-pkg/mm/mm-config.pod
    1.27        +2  -1      ossp-pkg/mm/mm.h
    1.21        +3  -2      ossp-pkg/mm/mm.pod
    1.18        +2  -1      ossp-pkg/mm/mm_alloc.c
    1.19        +2  -1      ossp-pkg/mm/mm_core.c
    1.12        +2  -1      ossp-pkg/mm/mm_global.c
    1.8         +2  -1      ossp-pkg/mm/mm_lib.c
    1.11        +2  -1      ossp-pkg/mm/mm_test.c
  ____________________________________________________________________________

  Index: ossp-pkg/mm/ChangeLog
  ============================================================
  $ cvs diff -u -r1.40 -r1.41 ChangeLog
  --- ossp-pkg/mm/ChangeLog	19 Dec 2002 09:14:58 -0000	1.40
  +++ ossp-pkg/mm/ChangeLog	19 Dec 2002 09:25:23 -0000	1.41
  @@ -1,7 +1,8 @@
  -  _ __ ___  _ __ ___
  - | '_ ` _ \| '_ ` _ \
  - | | | | | | | | | | |
  - |_| |_| |_|_| |_| |_|
  +   _        ___  ____ ____  ____
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _ __ ___  _ __ ___
  +  _|_||_| | | | \___ \___ \| |_) | | '_ ` _ \| '_ ` _ \
  + |_||_|_| | |_| |___) |__) |  __/  | | | | | | | | | | |
  +  |_|_|_|  \___/|____/____/|_|     |_| |_| |_|_| |_| |_|
   
    OSSP mm - Shared Memory Allocation
   
  @@ -30,6 +31,11 @@
   
     *) Fixed Makefile.in: $(TRUE) was not defined.
        [Will Day <wd@hpgx.net>]
  +
  +  *) Updated all copyright messages with forthcoming year 2003,
  +     added OSSP project as secondary copyright holder, added standard
  +     OSSP ASCII-art logo to documents, etc.
  +     [Ralf S. Engelschall]
   
    Changes between 1.2.0 and 1.2.1 (26-Jul-2002 to 28-Jul-2002)
   
  Index: ossp-pkg/mm/INSTALL
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 INSTALL
  --- ossp-pkg/mm/INSTALL	19 Dec 2002 09:14:58 -0000	1.3
  +++ ossp-pkg/mm/INSTALL	19 Dec 2002 09:25:23 -0000	1.4
  @@ -1,10 +1,10 @@
  -   __  __ __  __
  -  |  \/  |  \/  |
  -  | |\/| | |\/| |
  -  | |  | | |  | |
  -  |_|  |_|_|  |_|
  +   _        ___  ____ ____  ____
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _ __ ___  _ __ ___
  +  _|_||_| | | | \___ \___ \| |_) | | '_ ` _ \| '_ ` _ \
  + |_||_|_| | |_| |___) |__) |  __/  | | | | | | | | | | |
  +  |_|_|_|  \___/|____/____/|_|     |_| |_| |_|_| |_| |_|
   
  -  MM - Shared Memory Library
  +  OSSP mm - Shared Memory Allocation
   
     INSTALL
     =======
  Index: ossp-pkg/mm/LICENSE
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 LICENSE
  --- ossp-pkg/mm/LICENSE	19 Dec 2002 09:14:58 -0000	1.5
  +++ ossp-pkg/mm/LICENSE	19 Dec 2002 09:25:23 -0000	1.6
  @@ -1,6 +1,7 @@
   
     ====================================================================
  -  Copyright (c) 1999-2002 Ralf S. Engelschall. All rights reserved.
  +  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
   
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
  Index: ossp-pkg/mm/Makefile.in
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 Makefile.in
  --- ossp-pkg/mm/Makefile.in	19 Dec 2002 09:14:58 -0000	1.31
  +++ ossp-pkg/mm/Makefile.in	19 Dec 2002 09:25:23 -0000	1.32
  @@ -1,5 +1,6 @@
   ## ====================================================================
  -## Copyright (c) 1999-2002 Ralf S. Engelschall. All rights reserved.
  +## Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +## Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
   ##
   ## Redistribution and use in source and binary forms, with or without
   ## modification, are permitted provided that the following conditions
  Index: ossp-pkg/mm/PORTING
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 PORTING
  --- ossp-pkg/mm/PORTING	19 Dec 2002 09:14:58 -0000	1.24
  +++ ossp-pkg/mm/PORTING	19 Dec 2002 09:25:23 -0000	1.25
  @@ -1,16 +1,16 @@
  -   __  __ __  __
  -  |  \/  |  \/  |
  -  | |\/| | |\/| |
  -  | |  | | |  | |
  -  |_|  |_|_|  |_|
  +   _        ___  ____ ____  ____
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _ __ ___  _ __ ___
  +  _|_||_| | | | \___ \___ \| |_) | | '_ ` _ \| '_ ` _ \
  + |_||_|_| | |_| |___) |__) |  __/  | | | | | | | | | | |
  +  |_|_|_|  \___/|____/____/|_|     |_| |_| |_|_| |_| |_|
   
  -  MM - Shared Memory Library
  +  OSSP mm - Shared Memory Allocation
   
     PORTING
     =======
   
  -  The MM library was successfully tested on the following platforms (and
  -  should automatically adjust to other platforms, of course):
  +  The OSSP mm library was successfully tested on the following platforms
  +  (and should automatically adjust to other platforms, of course):
   
     alpha-dec-osf3.2
     alpha-dec-osf4.0d
  Index: ossp-pkg/mm/README
  ============================================================
  $ cvs diff -u -r1.74 -r1.75 README
  --- ossp-pkg/mm/README	19 Dec 2002 09:15:49 -0000	1.74
  +++ ossp-pkg/mm/README	19 Dec 2002 09:25:23 -0000	1.75
  @@ -1,11 +1,12 @@
  -   _ __ ___  _ __ ___
  -  | '_ ` _ \| '_ ` _ \
  -  | | | | | | | | | | |
  -  |_| |_| |_|_| |_| |_|
  +   _        ___  ____ ____  ____
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _ __ ___  _ __ ___
  +  _|_||_| | | | \___ \___ \| |_) | | '_ ` _ \| '_ ` _ \
  + |_||_|_| | |_| |___) |__) |  __/  | | | | | | | | | | |
  +  |_|_|_|  \___/|____/____/|_|     |_| |_| |_|_| |_| |_|
   
     OSSP mm - Shared Memory Allocation
  -  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
     Version 1.2.2 (19-Dec-2002)
   
     OSSP mm is a 2-layer abstraction library which simplifies the usage
  Index: ossp-pkg/mm/THANKS
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 THANKS
  --- ossp-pkg/mm/THANKS	19 Dec 2002 09:14:58 -0000	1.14
  +++ ossp-pkg/mm/THANKS	19 Dec 2002 09:25:23 -0000	1.15
  @@ -1,10 +1,10 @@
  -   __  __ __  __
  -  |  \/  |  \/  |
  -  | |\/| | |\/| |
  -  | |  | | |  | |
  -  |_|  |_|_|  |_|
  +   _        ___  ____ ____  ____
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _ __ ___  _ __ ___
  +  _|_||_| | | | \___ \___ \| |_) | | '_ ` _ \| '_ ` _ \
  + |_||_|_| | |_| |___) |__) |  __/  | | | | | | | | | | |
  +  |_|_|_|  \___/|____/____/|_|     |_| |_| |_|_| |_| |_|
   
  -  MM - Shared Memory Library
  +  OSSP mm - Shared Memory Allocation
   
     THANKS
     ======
  Index: ossp-pkg/mm/aclocal.m4
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 aclocal.m4
  --- ossp-pkg/mm/aclocal.m4	19 Dec 2002 09:16:20 -0000	1.27
  +++ ossp-pkg/mm/aclocal.m4	19 Dec 2002 09:25:23 -0000	1.28
  @@ -1,5 +1,6 @@
   ## ====================================================================
  -## Copyright (c) 1999-2002 Ralf S. Engelschall. All rights reserved.
  +## Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +## Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
   ##
   ## Redistribution and use in source and binary forms, with or without
   ## modification, are permitted provided that the following conditions
  Index: ossp-pkg/mm/configure.ac
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 configure.ac
  --- ossp-pkg/mm/configure.ac	19 Dec 2002 09:14:58 -0000	1.4
  +++ ossp-pkg/mm/configure.ac	19 Dec 2002 09:25:23 -0000	1.5
  @@ -1,5 +1,45 @@
  +## ====================================================================
  +## Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +## Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
  +##
  +## Redistribution and use in source and binary forms, with or without
  +## modification, are permitted provided that the following conditions
  +## are met:
  +##
  +## 1. Redistributions of source code must retain the above copyright
  +##    notice, this list of conditions and the following disclaimer.
  +##
  +## 2. Redistributions in binary form must reproduce the above copyright
  +##    notice, this list of conditions and the following disclaimer in
  +##    the documentation and/or other materials provided with the
  +##    distribution.
  +##
  +## 3. All advertising materials mentioning features or use of this
  +##    software must display the following acknowledgment:
  +##    "This product includes software developed by
  +##     Ralf S. Engelschall <rse@engelschall.com>."
  +##
  +## 4. Redistributions of any form whatsoever must retain the following
  +##    acknowledgment:
  +##    "This product includes software developed by
  +##     Ralf S. Engelschall <rse@engelschall.com>."
  +##
  +## THIS SOFTWARE IS PROVIDED BY RALF S. ENGELSCHALL ``AS IS'' AND ANY
  +## EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  +## IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  +## PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL RALF S. ENGELSCHALL OR
  +## ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  +## NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  +## LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  +## HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  +## STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  +## ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
  +## OF THE POSSIBILITY OF SUCH DAMAGE.
  +## ====================================================================
  +
   dnl ##
  -dnl ##   Autoconf specification for MM library
  +dnl ##   Autoconf specification for OSSP mm library
   dnl ##
   
   dnl #
  @@ -24,8 +64,8 @@
   
   dnl #   friendly header ;-)
   echo "Configuring ${T_MD}OSSP mm${T_ME} (Shared Memory Allocation), Version ${T_MD}${MM_VERSION_STR}${T_ME}"
  -echo "Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>"
  -echo "Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>"
  +echo "Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>"
  +echo "Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>"
   echo "Platform: ${T_MD}${PLATFORM}${T_ME}"
   
   dnl #
  Index: ossp-pkg/mm/devtool.func
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.func
  --- ossp-pkg/mm/devtool.func	26 Jul 2002 13:04:40 -0000	1.1
  +++ ossp-pkg/mm/devtool.func	19 Dec 2002 09:25:23 -0000	1.2
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com> 
   ##
   
   devtool_require () {
  Index: ossp-pkg/mm/mm-config.in
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 mm-config.in
  --- ossp-pkg/mm/mm-config.in	19 Dec 2002 09:14:58 -0000	1.9
  +++ ossp-pkg/mm/mm-config.in	19 Dec 2002 09:25:23 -0000	1.10
  @@ -3,7 +3,8 @@
   ## mm-config -- MM library build configuration utility
   ##
   ## ====================================================================
  -## Copyright (c) 1999-2002 Ralf S. Engelschall. All rights reserved.
  +## Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +## Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
   ##
   ## Redistribution and use in source and binary forms, with or without
   ## modification, are permitted provided that the following conditions
  Index: ossp-pkg/mm/mm-config.pod
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 mm-config.pod
  --- ossp-pkg/mm/mm-config.pod	19 Dec 2002 09:14:58 -0000	1.7
  +++ ossp-pkg/mm/mm-config.pod	19 Dec 2002 09:25:23 -0000	1.8
  @@ -1,5 +1,6 @@
   ## ====================================================================
  -## Copyright (c) 1999-2002 Ralf S. Engelschall. All rights reserved.
  +## Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +## Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
   ##
   ## Redistribution and use in source and binary forms, with or without
   ## modification, are permitted provided that the following conditions
  Index: ossp-pkg/mm/mm.h
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 mm.h
  --- ossp-pkg/mm/mm.h	19 Dec 2002 09:14:58 -0000	1.26
  +++ ossp-pkg/mm/mm.h	19 Dec 2002 09:25:23 -0000	1.27
  @@ -1,5 +1,6 @@
   /* ====================================================================
  - * Copyright (c) 1999-2002 Ralf S. Engelschall. All rights reserved.
  + * Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  + * Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
  Index: ossp-pkg/mm/mm.pod
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 mm.pod
  --- ossp-pkg/mm/mm.pod	19 Dec 2002 09:14:58 -0000	1.20
  +++ ossp-pkg/mm/mm.pod	19 Dec 2002 09:25:23 -0000	1.21
  @@ -1,5 +1,6 @@
   ## ====================================================================
  -## Copyright (c) 1999-2002 Ralf S. Engelschall. All rights reserved.
  +## Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +## Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
   ##
   ## Redistribution and use in source and binary forms, with or without
   ## modification, are permitted provided that the following conditions
  @@ -45,7 +46,7 @@
   
   =head1 NAME
   
  -B<MM - Shared Memory Allocation>
  +B<OSSP mm> - B<Shared Memory Allocation>
   
   =head1 VERSION
   
  Index: ossp-pkg/mm/mm_alloc.c
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 mm_alloc.c
  --- ossp-pkg/mm/mm_alloc.c	19 Dec 2002 09:14:58 -0000	1.17
  +++ ossp-pkg/mm/mm_alloc.c	19 Dec 2002 09:25:24 -0000	1.18
  @@ -1,5 +1,6 @@
   /* ====================================================================
  - * Copyright (c) 1999-2002 Ralf S. Engelschall. All rights reserved.
  + * Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  + * Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
  Index: ossp-pkg/mm/mm_core.c
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 mm_core.c
  --- ossp-pkg/mm/mm_core.c	19 Dec 2002 09:14:58 -0000	1.18
  +++ ossp-pkg/mm/mm_core.c	19 Dec 2002 09:25:24 -0000	1.19
  @@ -1,5 +1,6 @@
   /* ====================================================================
  - * Copyright (c) 1999-2002 Ralf S. Engelschall. All rights reserved.
  + * Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  + * Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
  Index: ossp-pkg/mm/mm_global.c
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 mm_global.c
  --- ossp-pkg/mm/mm_global.c	19 Dec 2002 09:14:58 -0000	1.11
  +++ ossp-pkg/mm/mm_global.c	19 Dec 2002 09:25:24 -0000	1.12
  @@ -1,5 +1,6 @@
   /* ====================================================================
  - * Copyright (c) 1999-2002 Ralf S. Engelschall. All rights reserved.
  + * Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  + * Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
  Index: ossp-pkg/mm/mm_lib.c
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 mm_lib.c
  --- ossp-pkg/mm/mm_lib.c	19 Dec 2002 09:14:58 -0000	1.7
  +++ ossp-pkg/mm/mm_lib.c	19 Dec 2002 09:25:24 -0000	1.8
  @@ -1,5 +1,6 @@
   /* ====================================================================
  - * Copyright (c) 1999-2002 Ralf S. Engelschall. All rights reserved.
  + * Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  + * Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
  Index: ossp-pkg/mm/mm_test.c
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 mm_test.c
  --- ossp-pkg/mm/mm_test.c	19 Dec 2002 09:14:58 -0000	1.10
  +++ ossp-pkg/mm/mm_test.c	19 Dec 2002 09:25:24 -0000	1.11
  @@ -1,5 +1,6 @@
   /* ====================================================================
  - * Copyright (c) 1999-2002 Ralf S. Engelschall. All rights reserved.
  + * Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  + * Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions

From ossp-cvs-owner@ossp.org  Thu Dec 19 10:27:46 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 886BF76313; Thu, 19 Dec 2002 10:27:46 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm ChangeLog THANKS
Message-Id: <20021219092746.886BF76313@mail.ossp.org>
Date: Thu, 19 Dec 2002 10:27:46 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-Dec-2002 10:27:46
  Branch: HEAD                             Handle: 2002121909274600

  Modified files:
    ossp-pkg/mm             ChangeLog THANKS

  Log:
    Martin's email changed some time ago

  Summary:
    Revision    Changes     Path
    1.42        +2  -2      ossp-pkg/mm/ChangeLog
    1.16        +1  -1      ossp-pkg/mm/THANKS
  ____________________________________________________________________________

  Index: ossp-pkg/mm/ChangeLog
  ============================================================
  $ cvs diff -u -r1.41 -r1.42 ChangeLog
  --- ossp-pkg/mm/ChangeLog	19 Dec 2002 09:25:23 -0000	1.41
  +++ ossp-pkg/mm/ChangeLog	19 Dec 2002 09:27:46 -0000	1.42
  @@ -27,7 +27,7 @@
        underlying platform supports this feature. This makes sure the file
        descriptors are closed by the kernel upon execution of exec(3) by
        the application.
  -     [Ralf S. Engelschall, Martin Kraemer <martin.kraemer@mch.sni.de>]
  +     [Ralf S. Engelschall, Martin Kraemer <Martin.Kraemer@Fujitsu-Siemens.com>]
   
     *) Fixed Makefile.in: $(TRUE) was not defined.
        [Will Day <wd@hpgx.net>]
  @@ -156,7 +156,7 @@
        [Sascha Schumann <sascha@schumann.cx>]
   
     *) Added BS2000 support for <sys/shm.h> stuff.
  -     [Martin Kraemer <martin.kraemer@mch.sni.de>]
  +     [Martin Kraemer <Martin.Kraemer@Fujitsu-Siemens.com>]
   
     *) Added an include for <fcntl.h> to maximum shared mem segment size
        check in aclocal.m4. This especially fixes compile problems under for
  Index: ossp-pkg/mm/THANKS
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 THANKS
  --- ossp-pkg/mm/THANKS	19 Dec 2002 09:25:23 -0000	1.15
  +++ ossp-pkg/mm/THANKS	19 Dec 2002 09:27:46 -0000	1.16
  @@ -39,7 +39,7 @@
       o  Mats Josefsson              <matjos@rsv.se>
       o  Sergey Kachanovsky          <ranger@tversu.ru>
       o  Jonathan Kamens             <jonathank@worldwinner.com>
  -    o  Martin Kraemer              <martin.kraemer@mch.sni.de>
  +    o  Martin Kraemer              <Martin.Kraemer@Fujitsu-Siemens.com>
       o  Sebastian Krahmer           <??>
       o  Mike Latinovich             <mlatin@boing.skysys.org>
       o  Rasmus Lerdorf              <rasmus@lerdorf.on.ca>

From ossp-cvs-owner@ossp.org  Sat Dec 21 10:20:29 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EA2F57649B; Sat, 21 Dec 2002 10:20:28 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela ChangeLog VERSION shiela-install.pod shiel...
Message-Id: <20021221092028.EA2F57649B@mail.ossp.org>
Date: Sat, 21 Dec 2002 10:20:28 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Dec-2002 10:20:28
  Branch: HEAD                             Handle: 2002122109202701

  Modified files:
    ossp-pkg/shiela         ChangeLog VERSION shiela-install.pod
                            shiela-install.sh shiela.pl shiela.pod

  Log:
    Fix the "invalid file specification `<absolute path>' for access
    control" issue by using Cwd::realpath to resolve the absolute path
    instead of calling `pwd`.
    
    Additionally, bump version.

  Summary:
    Revision    Changes     Path
    1.11        +7  -0      ossp-pkg/shiela/ChangeLog
    1.5         +1  -1      ossp-pkg/shiela/VERSION
    1.6         +1  -1      ossp-pkg/shiela/shiela-install.pod
    1.7         +1  -1      ossp-pkg/shiela/shiela-install.sh
    1.17        +3  -3      ossp-pkg/shiela/shiela.pl
    1.6         +1  -1      ossp-pkg/shiela/shiela.pod
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/ChangeLog
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	19 Aug 2002 19:10:37 -0000	1.10
  +++ ossp-pkg/shiela/ChangeLog	21 Dec 2002 09:20:27 -0000	1.11
  @@ -9,6 +9,13 @@
   
     ChangeLog
   
  +  Changes between 0.9.2 and 0.9.3 (19-Aug-2002 to 21-Dec-2002):
  +
  +   *) Fix the "invalid file specification `<absolute path>' for access
  +      control" issue by using Cwd::realpath to resolve the absolute path
  +      instead of calling `pwd`.
  +      [Ralf S. Engelschall]
  +
     Changes between 0.9.1 and 0.9.2 (10-Feb-2001 to 19-Aug-2002):
   
      *) Switched to the OSSP devtool build environment
  Index: ossp-pkg/shiela/VERSION
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 VERSION
  --- ossp-pkg/shiela/VERSION	19 Aug 2002 19:10:37 -0000	1.4
  +++ ossp-pkg/shiela/VERSION	21 Dec 2002 09:20:27 -0000	1.5
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP shiela (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP shiela, Version 0.9.2 (19-Aug-2002)
  +  This is OSSP shiela, Version 0.9.3 (21-Dec-2002)
   
  Index: ossp-pkg/shiela/shiela-install.pod
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 shiela-install.pod
  --- ossp-pkg/shiela/shiela-install.pod	19 Aug 2002 19:10:38 -0000	1.5
  +++ ossp-pkg/shiela/shiela-install.pod	21 Dec 2002 09:20:27 -0000	1.6
  @@ -32,7 +32,7 @@
   
   =head1 VERSION
   
  -B<OSSP Shiela> 0.9.2 (19-Aug-2002)
  +B<OSSP Shiela> 0.9.3 (21-Dec-2002)
   
   =head1 DESCRIPTION
   
  Index: ossp-pkg/shiela/shiela-install.sh
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 shiela-install.sh
  --- ossp-pkg/shiela/shiela-install.sh	19 Aug 2002 19:10:38 -0000	1.6
  +++ ossp-pkg/shiela/shiela-install.sh	21 Dec 2002 09:20:27 -0000	1.7
  @@ -25,7 +25,7 @@
   ##  shiela-install: Shiela repository install program (syntax: Bourne-Shell)
   ##
   
  -version="0.9.2 (19-Aug-2002)"
  +version="0.9.3 (21-Dec-2002)"
   
   prefix="@prefix@"
   bindir="@bindir@"
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	19 Aug 2002 19:10:38 -0000	1.16
  +++ ossp-pkg/shiela/shiela.pl	21 Dec 2002 09:20:27 -0000	1.17
  @@ -25,7 +25,7 @@
   ##  shiela: Shiela control program (syntax: Perl)
   ##
   
  -my $version = '0.9.2 (19-Aug-2002)';
  +my $version = '0.9.3 (21-Dec-2002)';
   
   require 5.005;
   
  @@ -34,6 +34,7 @@
   use IO::Handle;   # shipped with Perl since 5.003
   use IPC::Open2;   # shipped with Perl since 5.003
   use Data::Dumper; # shipped with Perl since 5.005
  +use Cwd;          # shipped with Perl since 5.003
   
   #   DEBUGGING
   $Data::Dumper::Purity = 1;
  @@ -983,8 +984,7 @@
   
       #   strip absolute prefix
       $cvsdir =~ s|^$RT->{cvsroot}/?||;
  -    my $cvsdirphysical = `cd $RT->{cvsroot} && pwd`;
  -    $cvsdirphysical =~ s|\n$||s; 
  +    my $cvsdirphysical = Cwd::realpath($RT->{cvsroot});
       $cvsdir =~ s|^$cvsdirphysical/?||;
   
       #   provide access control 
  Index: ossp-pkg/shiela/shiela.pod
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 shiela.pod
  --- ossp-pkg/shiela/shiela.pod	19 Aug 2002 19:10:38 -0000	1.5
  +++ ossp-pkg/shiela/shiela.pod	21 Dec 2002 09:20:28 -0000	1.6
  @@ -32,7 +32,7 @@
   
   =head1 VERSION
   
  -B<OSSP Shiela> 0.9.2 (19-Aug-2002)
  +B<OSSP Shiela> 0.9.3 (21-Dec-2002)
   
   =head1 DESCRIPTION
   

From ossp-cvs-owner@ossp.org  Sat Dec 21 10:21:47 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9BC3B7649B; Sat, 21 Dec 2002 10:21:47 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela .cvsignore ChangeLog devtool.conf
Message-Id: <20021221092147.9BC3B7649B@mail.ossp.org>
Date: Sat, 21 Dec 2002 10:21:47 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Dec-2002 10:21:47
  Branch: HEAD                             Handle: 2002122109214700

  Modified files:
    ossp-pkg/shiela         .cvsignore ChangeLog devtool.conf

  Log:
    Upgraded to GNU shtool 1.6.2 and GNU autoconf 2.57.

  Summary:
    Revision    Changes     Path
    1.4         +2  -0      ossp-pkg/shiela/.cvsignore
    1.12        +3  -0      ossp-pkg/shiela/ChangeLog
    1.2         +2  -2      ossp-pkg/shiela/devtool.conf
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/.cvsignore
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 .cvsignore
  --- ossp-pkg/shiela/.cvsignore	19 Aug 2002 19:10:37 -0000	1.3
  +++ ossp-pkg/shiela/.cvsignore	21 Dec 2002 09:21:47 -0000	1.4
  @@ -5,3 +5,5 @@
   shiela-install.1
   config.h
   config.h.in
  +configure
  +shtool
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	21 Dec 2002 09:20:27 -0000	1.11
  +++ ossp-pkg/shiela/ChangeLog	21 Dec 2002 09:21:47 -0000	1.12
  @@ -11,6 +11,9 @@
   
     Changes between 0.9.2 and 0.9.3 (19-Aug-2002 to 21-Dec-2002):
   
  +   *) Upgraded to GNU shtool 1.6.2 and GNU autoconf 2.57.
  +      [Ralf S. Engelschall]
  +
      *) Fix the "invalid file specification `<absolute path>' for access
         control" issue by using Cwd::realpath to resolve the absolute path
         instead of calling `pwd`.
  Index: ossp-pkg/shiela/devtool.conf
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.conf
  --- ossp-pkg/shiela/devtool.conf	19 Aug 2002 19:10:38 -0000	1.1
  +++ ossp-pkg/shiela/devtool.conf	21 Dec 2002 09:21:47 -0000	1.2
  @@ -3,8 +3,8 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.1 "1.6.*" all
  -    @autogen autoconf 2.53  "2.5[3-9]*"
  +    @autogen shtool   1.6.2 "1.6.*" all
  +    @autogen autoconf 2.57  "2.5[3-9]*"
   
   %autoclean
       @autoclean shtool

From ossp-cvs-owner@ossp.org  Sat Dec 21 10:42:59 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BB7E8764A8; Sat, 21 Dec 2002 10:42:58 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela AUTHORS ChangeLog INSTALL Makefile.in READ...
Message-Id: <20021221094258.BB7E8764A8@mail.ossp.org>
Date: Sat, 21 Dec 2002 10:42:58 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Dec-2002 10:42:58
  Branch: HEAD                             Handle: 2002122109425700

  Modified files:
    ossp-pkg/shiela         AUTHORS ChangeLog INSTALL Makefile.in README
                            THANKS TODO configure.ac devtool.conf
                            shiela-install.pod shiela-install.sh shiela.pl
                            shiela.pod

  Log:
    Consistently switch to the "OSSP shiela" branding.

  Summary:
    Revision    Changes     Path
    1.2         +8  -8      ossp-pkg/shiela/AUTHORS
    1.13        +9  -6      ossp-pkg/shiela/ChangeLog
    1.3         +7  -7      ossp-pkg/shiela/INSTALL
    1.4         +28 -5      ossp-pkg/shiela/Makefile.in
    1.6         +30 -23     ossp-pkg/shiela/README
    1.2         +8  -7      ossp-pkg/shiela/THANKS
    1.3         +6  -6      ossp-pkg/shiela/TODO
    1.2         +27 -0      ossp-pkg/shiela/configure.ac
    1.3         +1  -1      ossp-pkg/shiela/devtool.conf
    1.7         +6  -5      ossp-pkg/shiela/shiela-install.pod
    1.8         +5  -4      ossp-pkg/shiela/shiela-install.sh
    1.18        +5  -4      ossp-pkg/shiela/shiela.pl
    1.7         +35 -34     ossp-pkg/shiela/shiela.pod
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/AUTHORS
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 AUTHORS
  --- ossp-pkg/shiela/AUTHORS	18 Jun 2000 14:30:47 -0000	1.1.1.1
  +++ ossp-pkg/shiela/AUTHORS	21 Dec 2002 09:42:57 -0000	1.2
  @@ -1,18 +1,18 @@
  -   ____  _     _      _    
  -  / ___|| |__ (_) ___| | __ _
  -  \___ \| '_ \| |/ _ \ |/ _` |
  -   ___) | | | | |  __/ | (_| |
  -  |____/|_| |_|_|\___|_|\__,_|
  +   _        ___  ____ ____  ____        _     _      _
  +  |_|_ _   / _ \/ ___/ ___||  _ \   ___| |__ (_) ___| | __ _ 
  +  _|_||_| | | | \___ \___ \| |_) | / __| '_ \| |/ _ \ |/ _` |
  + |_||_|_| | |_| |___) |__) |  __/  \__ \ | | | |  __/ | (_| |
  +  |_|_|_|  \___/|____/____/|_|     |___/_| |_|_|\___|_|\__,_|
   
  -  Shiela - Access Control and Logging Facility for CVS
  +  OSSP shiela - Access Control and Logging Facility for CVS
     ____________________________________________________________________
   
     AUTHORS
   
     This is a list of authors who have written or edited parts of 
  -  the Shiela sources.
  +  the OSSP shiela sources.
   
  -  o  Shiela (as a whole)
  +  o  OSSP shiela (as a whole)
        Written by: Ralf S. Engelschall
        Edited  by: Ralf S. Engelschall
     
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	21 Dec 2002 09:21:47 -0000	1.12
  +++ ossp-pkg/shiela/ChangeLog	21 Dec 2002 09:42:57 -0000	1.13
  @@ -1,10 +1,10 @@
  -   ____  _     _      _    
  -  / ___|| |__ (_) ___| | __ _
  -  \___ \| '_ \| |/ _ \ |/ _` |
  -   ___) | | | | |  __/ | (_| |
  -  |____/|_| |_|_|\___|_|\__,_|
  +   _        ___  ____ ____  ____        _     _      _
  +  |_|_ _   / _ \/ ___/ ___||  _ \   ___| |__ (_) ___| | __ _ 
  +  _|_||_| | | | \___ \___ \| |_) | / __| '_ \| |/ _ \ |/ _` |
  + |_||_|_| | |_| |___) |__) |  __/  \__ \ | | | |  __/ | (_| |
  +  |_|_|_|  \___/|____/____/|_|     |___/_| |_|_|\___|_|\__,_|
   
  -  Shiela - Access Control and Logging Facility for CVS
  +  OSSP shiela - Access Control and Logging Facility for CVS
     ____________________________________________________________________
   
     ChangeLog
  @@ -17,6 +17,9 @@
      *) Fix the "invalid file specification `<absolute path>' for access
         control" issue by using Cwd::realpath to resolve the absolute path
         instead of calling `pwd`.
  +      [Ralf S. Engelschall]
  +
  +   *) Consistently switch to the "OSSP shiela" branding.
         [Ralf S. Engelschall]
   
     Changes between 0.9.1 and 0.9.2 (10-Feb-2001 to 19-Aug-2002):
  Index: ossp-pkg/shiela/INSTALL
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 INSTALL
  --- ossp-pkg/shiela/INSTALL	18 Jul 2000 15:27:11 -0000	1.2
  +++ ossp-pkg/shiela/INSTALL	21 Dec 2002 09:42:57 -0000	1.3
  @@ -1,14 +1,14 @@
  -   ____  _     _      _    
  -  / ___|| |__ (_) ___| | __ _
  -  \___ \| '_ \| |/ _ \ |/ _` |
  -   ___) | | | | |  __/ | (_| |
  -  |____/|_| |_|_|\___|_|\__,_|
  +   _        ___  ____ ____  ____        _     _      _
  +  |_|_ _   / _ \/ ___/ ___||  _ \   ___| |__ (_) ___| | __ _ 
  +  _|_||_| | | | \___ \___ \| |_) | / __| '_ \| |/ _ \ |/ _` |
  + |_||_|_| | |_| |___) |__) |  __/  \__ \ | | | |  __/ | (_| |
  +  |_|_|_|  \___/|____/____/|_|     |___/_| |_|_|\___|_|\__,_|
   
  -  Shiela - Access Control and Logging Facility for CVS
  +  OSSP shiela - Access Control and Logging Facility for CVS
     ____________________________________________________________________
   
     INSTALLATION
     
     Usually you want to use Shiela inside the repository tree. 
  -  Read the shiela-install manual page for details.
  +  Read the shiela-install(1) manual page for details.
   
  Index: ossp-pkg/shiela/Makefile.in
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 Makefile.in
  --- ossp-pkg/shiela/Makefile.in	19 Aug 2002 19:10:37 -0000	1.3
  +++ ossp-pkg/shiela/Makefile.in	21 Dec 2002 09:42:57 -0000	1.4
  @@ -1,5 +1,27 @@
   ##
  -##  Makefile for Shiela
  +##  OSSP shiela - CVS Access Control and Logging Facility
  +##  Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##
  +##  This file is part of OSSP shiela, an access control and logging
  +##  facility for Concurrent Versions System (CVS) repositories
  +##  which can be found at http://www.ossp.org/pkg/tool/shiela/.
  +##
  +##  This program is free software; you can redistribute it and/or
  +##  modify it under the terms of the GNU General Public  License 
  +##  as published by the Free Software Foundation; either version 
  +##  2.0 of the License, or (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License 
  +##  along with this file; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  Makefile.in: build procedure source (syntax: make)
   ##
   
   @SET_MAKE@
  @@ -8,6 +30,7 @@
   SHTOOL      = ./shtool
   RM          = rm -f
   SED         = sed
  +POD2MAN     = pod2man
   PERL        = @PATH_PERL@
   CVS         = @PATH_CVS@
   
  @@ -41,15 +64,15 @@
   	@$(SHTOOL) echo -e "%Bgenerating shiela.1%b"
   	V=`$(SHTOOL) version -l txt -d short VERSION`; \
   	D=`$(SHTOOL) version -l txt -d long VERSION | $(SED) -e 's;.*(;;' -e 's;).*;;'`; \
  -	pod2man --section=1 --center="CVS ACL and Logging Facility" \
  -	        --release="$$D" --date="OSSP Shiela $$V" shiela.pod >shiela.1
  +	$(POD2MAN) --section=1 --center="CVS ACL and Logging Facility" \
  +	           --release="$$D" --date="OSSP Shiela $$V" shiela.pod >shiela.1
   
   shiela-install.1: shiela-install.pod
   	@$(SHTOOL) echo -e "%Bgenerating shiela-install.1%b"
   	V=`$(SHTOOL) version -l txt -d short VERSION`; \
   	D=`$(SHTOOL) version -l txt -d long VERSION | $(SED) -e 's;.*(;;' -e 's;).*;;'`; \
  -	pod2man --section=1 --center="CVS ACL and Logging Facility" \
  -	        --release="$$D" --date="OSSP Shiela $$V" shiela-install.pod >shiela-install.1
  +	$(POD2MAN) --section=1 --center="CVS ACL and Logging Facility" \
  +	           --release="$$D" --date="OSSP Shiela $$V" shiela-install.pod >shiela-install.1
   
   install: all
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
  Index: ossp-pkg/shiela/README
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 README
  --- ossp-pkg/shiela/README	19 Aug 2002 19:10:37 -0000	1.5
  +++ ossp-pkg/shiela/README	21 Dec 2002 09:42:57 -0000	1.6
  @@ -1,22 +1,32 @@
  -   ____  _     _      _       
  -  / ___|| |__ (_) ___| | __ _ 
  -  \___ \| '_ \| |/ _ \ |/ _` |
  -   ___) | | | | |  __/ | (_| |
  -  |____/|_| |_|_|\___|_|\__,_|
  +   _        ___  ____ ____  ____        _     _      _
  +  |_|_ _   / _ \/ ___/ ___||  _ \   ___| |__ (_) ___| | __ _ 
  +  _|_||_| | | | \___ \___ \| |_) | / __| '_ \| |/ _ \ |/ _` |
  + |_||_|_| | |_| |___) |__) |  __/  \__ \ | | | |  __/ | (_| |
  +  |_|_|_|  \___/|____/____/|_|     |___/_| |_|_|\___|_|\__,_|
  +
  +  OSSP shiela - Access Control and Logging Facility for CVS
  +  Version 0.9.3 (21-Dec-2002)
  +
  +  ABSTRACT
  +
  +  OSSP shiela is an access control and logging facility for use with the
  +  Concurrent Versions System (CVS). It is intended to be hooked into
  +  CVS's processing through the $CVSROOT/CVSROOT/xxxinfo callbacks. This
  +  way OSSP shiela provides access control on a path and branch basis to
  +  particular repository users and user groups. Additionally, repository
  +  operations are monitored, accumulated and logged. The lookout of
  +  logging messages can be configured individually on a module path and
  +  branch basis and messages can be both saved to files and/or delivered
  +  by email.
   
  -  OSSP Shiela - Access Control and Logging Facility for CVS
  -  Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>
  +  COPYRIGHT AND LICENSE
   
  -  Version 
  +  Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2000-2002 The OSSP Project <http://www.ossp.org/>
   
  -  Shiela is an access control and logging facility for use with the
  -  Concurrent Versions System (CVS). It is intended to be hooked into CVS's
  -  processing through the $CVSROOT/CVSROOT/xxxinfo callbacks. This way
  -  Shiela provides access control on a path and branch basis to particular
  -  repository users and user groups. Additionally, repository operations
  -  are monitored, accumulated and logged. The lookout of logging messages
  -  can be configured individually on a module path and branch basis and
  -  messages can be both saved to files and/or delivered by Email.
  +  This file is part of OSSP shiela, an access control and logging
  +  facility for Concurrent Versions System (CVS) repositories
  +  which can be found at http://www.ossp.org/pkg/tool/shiela/.
   
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
  @@ -33,12 +43,9 @@
     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
     USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
   
  -  The documentation and latest release can be found on
  -
  -  o http://www.ossp.org/pkg/shiela/
  -  o  ftp://ftp.ossp.org/pkg/shiela/
  +  SEE ALSO
   
  -                                       Ralf S. Engelschall
  -                                       rse@engelschall.com
  -                                       www.engelschall.com
  +  o Homepage ....... http://www.ossp.org/pkg/tool/shiela/
  +  o Sources ........ http://cvs.ossp.org/pkg/tool/shiela/
  +  o Distribution .... ftp://ftp.ossp.org/pkg/tool/shiela/
   
  Index: ossp-pkg/shiela/THANKS
  ============================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 THANKS
  --- ossp-pkg/shiela/THANKS	18 Jun 2000 14:30:47 -0000	1.1.1.1
  +++ ossp-pkg/shiela/THANKS	21 Dec 2002 09:42:57 -0000	1.2
  @@ -1,10 +1,10 @@
  -   ____  _     _      _    
  -  / ___|| |__ (_) ___| | __ _
  -  \___ \| '_ \| |/ _ \ |/ _` |
  -   ___) | | | | |  __/ | (_| |
  -  |____/|_| |_|_|\___|_|\__,_|
  +   _        ___  ____ ____  ____        _     _      _
  +  |_|_ _   / _ \/ ___/ ___||  _ \   ___| |__ (_) ___| | __ _ 
  +  _|_||_| | | | \___ \___ \| |_) | / __| '_ \| |/ _ \ |/ _` |
  + |_||_|_| | |_| |___) |__) |  __/  \__ \ | | | |  __/ | (_| |
  +  |_|_|_|  \___/|____/____/|_|     |___/_| |_|_|\___|_|\__,_|
   
  -  Shiela - Access Control and Logging Facility for CVS
  +  OSSP shiela - Access Control and Logging Facility for CVS
     ____________________________________________________________________
     
     THANKS
  @@ -13,6 +13,7 @@
     stuff, bugfixes, hints etc. (in alphabetical order):
   
     o Denis Barbier            <barbier@imacs.polytechnique.fr>
  +  o Markus Sander            <msander@de.cw.com>
   
  -  ...and all other Shiela users who gave me feedback but I've forgot.
  +  ...and all other OSSP shiela users who gave me feedback but I've forgot.
   
  Index: ossp-pkg/shiela/TODO
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 TODO
  --- ossp-pkg/shiela/TODO	18 Jul 2000 15:39:51 -0000	1.2
  +++ ossp-pkg/shiela/TODO	21 Dec 2002 09:42:57 -0000	1.3
  @@ -1,10 +1,10 @@
  -   ____  _     _      _    
  -  / ___|| |__ (_) ___| | __ _
  -  \___ \| '_ \| |/ _ \ |/ _` |
  -   ___) | | | | |  __/ | (_| |
  -  |____/|_| |_|_|\___|_|\__,_|
  +   _        ___  ____ ____  ____        _     _      _
  +  |_|_ _   / _ \/ ___/ ___||  _ \   ___| |__ (_) ___| | __ _ 
  +  _|_||_| | | | \___ \___ \| |_) | / __| '_ \| |/ _ \ |/ _` |
  + |_||_|_| | |_| |___) |__) |  __/  \__ \ | | | |  __/ | (_| |
  +  |_|_|_|  \___/|____/____/|_|     |___/_| |_|_|\___|_|\__,_|
   
  -  Shiela - Access Control and Logging Facility for CVS
  +  OSSP shiela - Access Control and Logging Facility for CVS
     ____________________________________________________________________
   
     TODO
  Index: ossp-pkg/shiela/configure.ac
  ============================================================
  $ cvs diff -u -r1.1 -r1.2 configure.ac
  --- ossp-pkg/shiela/configure.ac	19 Aug 2002 19:10:37 -0000	1.1
  +++ ossp-pkg/shiela/configure.ac	21 Dec 2002 09:42:57 -0000	1.2
  @@ -1,3 +1,29 @@
  +##
  +##  OSSP shiela - CVS Access Control and Logging Facility
  +##  Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2002 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP shiela, an access control and logging
  +##  facility for Concurrent Versions System (CVS) repositories
  +##  which can be found at http://www.ossp.org/pkg/tool/shiela/.
  +##
  +##  This program is free software; you can redistribute it and/or
  +##  modify it under the terms of the GNU General Public  License 
  +##  as published by the Free Software Foundation; either version 
  +##  2.0 of the License, or (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License 
  +##  along with this file; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  configure.ac: auto-configuration source (syntax: Autoconf)
  +##
   
   AC_PREREQ(2.53)
   AC_INIT
  @@ -5,6 +31,7 @@
   V=`./shtool version -ltxt -dlong VERSION`
   ./shtool echo -e "Configuring %BOSSP shiela%b, Version %B${V}%b"
   echo "Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>"
  +echo "Copyright (c) 2000-2002 The OSSP Project <http://www.ossp.org/>"
   
   AC_MSG_CHECKING(for Perl program)
   AC_ARG_WITH(perl,dnl
  Index: ossp-pkg/shiela/devtool.conf
  ============================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.conf
  --- ossp-pkg/shiela/devtool.conf	21 Dec 2002 09:21:47 -0000	1.2
  +++ ossp-pkg/shiela/devtool.conf	21 Dec 2002 09:42:57 -0000	1.3
  @@ -24,7 +24,7 @@
   %version
       ./shtool version -ltxt -n "OSSP shiela" -e VERSION
   	V=`./shtool version -ltxt -dlong VERSION`
  -	sed -e "s/Version .*(.*)/Version $V/g" <README >README.n && mv README.n README
  +	sed -e "s/Version .*/Version $V/g" <README >README.n && mv README.n README
       sed -e "s/version = '.*'/version = '$V'/" <shiela.pl >shiela.pl.n && mv shiela.pl.n shiela.pl
       sed -e "s/version=\".*\"/version=\"$V\"/" <shiela-install.sh >shiela-install.sh.n && mv shiela-install.sh.n shiela-install.sh
   	V=`./shtool version -l txt -d long VERSION`
  Index: ossp-pkg/shiela/shiela-install.pod
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 shiela-install.pod
  --- ossp-pkg/shiela/shiela-install.pod	21 Dec 2002 09:20:27 -0000	1.6
  +++ ossp-pkg/shiela/shiela-install.pod	21 Dec 2002 09:42:57 -0000	1.7
  @@ -1,10 +1,11 @@
   ##
  -##  Shiela - CVS Access Control and Logging Facility
  +##  OSSP shiela - CVS Access Control and Logging Facility
   ##  Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2002 The OSSP Project <http://www.ossp.org/>
   ##
  -##  This file is part of Shiela, an access control and logging
  -##  facility for Concurrent Versions System (CVS) repositories 
  -##  which can be found at http://www.ossp.org/pkg/shiela/.
  +##  This file is part of OSSP shiela, an access control and logging
  +##  facility for Concurrent Versions System (CVS) repositories
  +##  which can be found at http://www.ossp.org/pkg/tool/shiela/.
   ##
   ##  This program is free software; you can redistribute it and/or
   ##  modify it under the terms of the GNU General Public  License 
  @@ -21,7 +22,7 @@
   ##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
   ##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
   ##
  -##  shiela-install.pod: Shiela install manual page (syntax: POD)
  +##  shiela-install.pod: install manual page (syntax: POD)
   ##
   
   =pod 
  Index: ossp-pkg/shiela/shiela-install.sh
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 shiela-install.sh
  --- ossp-pkg/shiela/shiela-install.sh	21 Dec 2002 09:20:27 -0000	1.7
  +++ ossp-pkg/shiela/shiela-install.sh	21 Dec 2002 09:42:57 -0000	1.8
  @@ -1,11 +1,12 @@
   #!@SH@
   ##
  -##  Shiela - CVS Access Control and Logging Facility
  +##  OSSP shiela - CVS Access Control and Logging Facility
   ##  Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2002 The OSSP Project <http://www.ossp.org/>
   ##
  -##  This file is part of Shiela, an access control and logging
  +##  This file is part of OSSP shiela, an access control and logging
   ##  facility for Concurrent Versions System (CVS) repositories
  -##  which can be found at http://www.ossp.org/pkg/shiela/.
  +##  which can be found at http://www.ossp.org/pkg/tool/shiela/.
   ##
   ##  This program is free software; you can redistribute it and/or
   ##  modify it under the terms of the GNU General Public  License 
  @@ -22,7 +23,7 @@
   ##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
   ##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
   ##
  -##  shiela-install: Shiela repository install program (syntax: Bourne-Shell)
  +##  shiela-install.sh: repository install program (syntax: Bourne-Shell)
   ##
   
   version="0.9.3 (21-Dec-2002)"
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	21 Dec 2002 09:20:27 -0000	1.17
  +++ ossp-pkg/shiela/shiela.pl	21 Dec 2002 09:42:57 -0000	1.18
  @@ -1,11 +1,12 @@
   #!@PERL@ -w
   ##
  -##  Shiela - CVS Access Control and Logging Facility
  +##  OSSP shiela - CVS Access Control and Logging Facility
   ##  Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2002 The OSSP Project <http://www.ossp.org/>
   ##
  -##  This file is part of Shiela, an access control and logging
  +##  This file is part of OSSP shiela, an access control and logging
   ##  facility for Concurrent Versions System (CVS) repositories
  -##  which can be found at http://www.ossp.org/pkg/shiela/.
  +##  which can be found at http://www.ossp.org/pkg/tool/shiela/.
   ##
   ##  This program is free software; you can redistribute it and/or
   ##  modify it under the terms of the GNU General Public  License 
  @@ -22,7 +23,7 @@
   ##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
   ##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
   ##
  -##  shiela: Shiela control program (syntax: Perl)
  +##  shiela.pl: control program (syntax: Perl)
   ##
   
   my $version = '0.9.3 (21-Dec-2002)';
  Index: ossp-pkg/shiela/shiela.pod
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 shiela.pod
  --- ossp-pkg/shiela/shiela.pod	21 Dec 2002 09:20:28 -0000	1.6
  +++ ossp-pkg/shiela/shiela.pod	21 Dec 2002 09:42:57 -0000	1.7
  @@ -1,10 +1,11 @@
   ##
  -##  Shiela - CVS Access Control and Logging Facility
  +##  OSSP shiela - CVS Access Control and Logging Facility
   ##  Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2002 The OSSP Project <http://www.ossp.org/>
   ##
  -##  This file is part of Shiela, an access control and logging
  -##  facility for Concurrent Versions System (CVS) repositories 
  -##  which can be found at http://www.ossp.org/pkg/shiela/.
  +##  This file is part of OSSP shiela, an access control and logging
  +##  facility for Concurrent Versions System (CVS) repositories
  +##  which can be found at http://www.ossp.org/pkg/tool/shiela/.
   ##
   ##  This program is free software; you can redistribute it and/or
   ##  modify it under the terms of the GNU General Public  License 
  @@ -21,41 +22,41 @@
   ##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
   ##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
   ##
  -##  shiela.pod: Shiela manual page (syntax: POD)
  +##  shiela.pod: manual page (syntax: POD)
   ##
   
   =pod 
   
   =head1 NAME
   
  -B<Shiela> - Access Control and Logging Facility for CVS
  +B<OSSP shiela> - Access Control and Logging Facility for CVS
   
   =head1 VERSION
   
  -B<OSSP Shiela> 0.9.3 (21-Dec-2002)
  +B<OSSP shiela> 0.9.3 (21-Dec-2002)
   
   =head1 DESCRIPTION
   
  -B<Shiela> is an access control and logging facility for use with the
  -I<Concurrent Versions System> (CVS). It is intended to be hooked
  +B<OSSP shiela> is an access control and logging facility for use with
  +the I<Concurrent Versions System> (CVS). It is intended to be hooked
   into CVS's processing through the C<$CVSROOT/CVSROOT/>I<xxx>C<info>
  -callbacks. This way B<Shiela> provides access control on a path
  -and branch basis to particular repository users and user groups.
  +callbacks. This way B<OSSP shiela> provides access control on a path and
  +branch basis to particular repository users and user groups.
   
   Additionally, repository operations are monitored, accumulated and
   logged. The lookout of logging messages can be configured individually
   on a module path and branch basis and messages can be both saved to
  -files and/or delivered by Email.
  +files and/or delivered by email.
   
   =head1 CONFIGURATION
   
  -The whole configuration of B<Shiela> takes place in a single
  +The whole configuration of B<OSSP shiela> takes place in a single
   configuration file. Per default this is C<$CVSROOT/CVSROOT/shiela.cfg>
   where C<$CVSROOT> is either the environment variable C<CVSROOT> from the
   users environment or the one implicitly provided by CVS because of the
   scope of C<CVS/Root> files or because of an active B<-d> CVS command
   line option. But one can also override the location of the configuration
  -file with the B<Shiela> command line option B<--config>.
  +file with the B<OSSP shiela> command line option B<--config>.
   
   This file uses a C-style syntax which is described by the following
   grammar rooted at I<config>:
  @@ -76,7 +77,7 @@
   So, the syntax has only one recursion and this way is rather simple but still
   powerful enough.
   
  -But this is only the general structure as understood by B<Shiela>'s parser.
  +But this is only the general structure as understood by B<OSSP shiela>'s parser.
   For semantical reasons only a particular structure is allowed to be created
   with the syntax. This is described in the following.
   
  @@ -213,9 +214,9 @@
   
   =item B<History E<lt>pathE<gt>;>
   
  -The filesystem path where the B<Shiela> history file is written to.  Do not
  -confuse this with the CVS C<history> file. The B<Shiela> history file logs
  -only B<Shiela> commits and can be used to reconstruct commit operations later.
  +The filesystem path where the B<OSSP shiela> history file is written to.  Do not
  +confuse this with the CVS C<history> file. The B<OSSP shiela> history file logs
  +only B<OSSP shiela> commits and can be used to reconstruct commit operations later.
   Example: C<History CVSROOT/shiela.log;>
   
   =item B<Module E<lt>modulepathE<gt> E<lt>modulenameE<gt> { ... };>
  @@ -351,7 +352,7 @@
   
   =item B<CVS E<lt>pathE<gt>;>
   
  -This overrides the path to the CVS executable. Per default B<Shiela>
  +This overrides the path to the CVS executable. Per default B<OSSP shiela>
   determines this automatically through the inherited C<$PATH> variable.
   Use this either if you have CVS not in C<$PATH> or if you have multiple
   CVS instances installed.
  @@ -359,7 +360,7 @@
   =item B<Sendmail E<lt>pathE<gt>;>
   
   This overrides the path to the Sendmail executable. Per default
  -B<Shiela> determines this automatically through the inherited C<$PATH>
  +B<OSSP shiela> determines this automatically through the inherited C<$PATH>
   variable. Use this either if you have Sendmail not in C<$PATH> or if you
   have multiple Sendmail instances installed.
   
  @@ -464,31 +465,31 @@
   and uses the features of the latest CVS versions (especially those of
   the enhanced CVS variant from OSSP). So in April 2000 he decided to
   rewrite the functionality of C<log_accum.pl>, C<commit_prep.pl> and
  -C<cvs_acls.pl> from scratch. The result is B<Shiela>.
  +C<cvs_acls.pl> from scratch. The result is B<OSSP shiela>.
   
  -The name B<Shiela> was choosen just by coincidence and has no related
  -meaning. It was just that while the program was written, a code-name
  -was needed. And because Engelschall's first baby was forthcoming and
  -Ralf and Daniela Engelschall reviewed lots of names, one of the names
  -Ralf liked was B<Shiela>. So the code-name became B<Shiela> and as it is
  -often with code-names, they remain forever... ;)
  +The name B<OSSP shiela> was choosen just by coincidence and has no
  +related meaning. It was just that while the program was written,
  +a code-name was needed. And because Engelschall's first baby was
  +forthcoming and Ralf and Daniela Engelschall reviewed lots of names, one
  +of the names Ralf liked was B<Shiela>. So the code-name became B<OSSP
  +shiela> and as it is often with code-names, they remain forever... ;)
   
   =head1 LOCATIONS
   
   =over 4
   
  -=item B<http://www.ossp.org/pkg/shiela/>
  +=item B<http://www.ossp.org/pkg/tool/shiela/>
   
  -Here you can find the official B<Shiela> homepage. 
  +Here you can find the official B<OSSP shiela> homepage. 
   
  -=item B<ftp://ftp.ossp.org/pkg/shiela/>
  +=item B<http://cvs.ossp.org/pkg/tool/shiela/>
   
  -Here you can find the latest B<Shiela> release versions as
  -distribution tarballs.
  +Here you can find the latest B<OSSP shiela> development sources.
   
  -=item B<:pserver:anonymous@cvs.ossp.org:/e/ossp/cvs>, module B<shiela>
  +=item B<ftp://ftp.ossp.org/pkg/tool/shiela/>
   
  -Here you can find the latest B<Shiela> development version.
  +Here you can find the latest B<OSSP shiela> release versions as
  +distribution tarballs.
   
   =back
   

From ossp-cvs-owner@ossp.org  Sat Dec 21 10:53:17 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 759817649B; Sat, 21 Dec 2002 10:53:17 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela ChangeLog shiela.pl
Message-Id: <20021221095317.759817649B@mail.ossp.org>
Date: Sat, 21 Dec 2002 10:53:17 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Dec-2002 10:53:17
  Branch: HEAD                             Handle: 2002122109531600

  Modified files:
    ossp-pkg/shiela         ChangeLog shiela.pl

  Log:
    Correctly determine CVS version and optional RSE patches (from OpenPKG
    "cvs" package).

  Summary:
    Revision    Changes     Path
    1.14        +4  -0      ossp-pkg/shiela/ChangeLog
    1.19        +10 -10     ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/ChangeLog
  ============================================================
  $ cvs diff -u -r1.13 -r1.14 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	21 Dec 2002 09:42:57 -0000	1.13
  +++ ossp-pkg/shiela/ChangeLog	21 Dec 2002 09:53:16 -0000	1.14
  @@ -11,6 +11,10 @@
   
     Changes between 0.9.2 and 0.9.3 (19-Aug-2002 to 21-Dec-2002):
   
  +   *) Correctly determine CVS version and optional RSE patches (from
  +      OpenPKG "cvs" package).
  +      [Ralf S. Engelschall]
  +
      *) Upgraded to GNU shtool 1.6.2 and GNU autoconf 2.57.
         [Ralf S. Engelschall]
   
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	21 Dec 2002 09:42:57 -0000	1.18
  +++ ossp-pkg/shiela/shiela.pl	21 Dec 2002 09:53:16 -0000	1.19
  @@ -193,8 +193,8 @@
       my $v = `$RT->{cvs} --version 2>/dev/null`;
       $RT->{cvsvers} = '?';
       $RT->{cvsvers} = $1 if ($v =~ m|Concurrent\s+Versions\s+System\s+\(CVS\)\s+([\d.p]+)\s+|s);
  -    $RT->{cvsossp} = 0;
  -    $RT->{cvsossp} = 1 if ($v =~ m|OSSP|s);
  +    $RT->{cvsrse} = 0;
  +    $RT->{cvsrse} = 1 if ($v =~ m|\[RSE\]|s);
       die "$RT->{cvs} is not at least CVS 1.10" if ($RT->{cvsvers} !~ m|^1\.1[0-9]|);
       $RT->{useserver} = 0;
       $RT->{useserver} = 1 if ($v =~ m|server|s);
  @@ -717,7 +717,7 @@
           "From: \"".$RT->{username}."\" <".$RT->{usermail}.">\n" .
           "To: $toaddr\n" .
           "User-Agent: ".uc(substr($RT->{name}, 0, 1)).substr($RT->{name}, 1)."/$RT->{vers} " .
  -                     ($RT->{cvsossp} ? "OSSP-CVS" : "CVS")."/$RT->{cvsvers}\n" .
  +                     "CVS/".$RT->{cvsvers}.($RT->{cvsrse} ? "+RSE" : "")."\n";
           "Precedence: bulk\n" .
           "Mime-Version: 1.0\n" .
           "Content-Type: text/plain; charset=iso-8859-1\n" . 
  @@ -1244,7 +1244,7 @@
   ##  We hook into CVS via `commitinfo' to post-process log messages.
   ##  The intention is to sanitise the results of what the user may have
   ##  `done' while editing the commit log message. If CVS is a standard
  -##  version, this check is advisory only. If CVS contains the OSSP
  +##  version, this check is advisory only. If CVS contains the RSE
   ##  patches, the log message is changed and CVS reads back the contents
   ##  so that this script can actually make changes.
   ##
  @@ -1257,8 +1257,8 @@
       my ($PA, $RT, $CF) = @_;
       my $rv = 0;
   
  -    #   we require the OSSP patches for operation
  -    return $rv if (not $RT->{cvsossp});
  +    #   we require the RSE patches for operation
  +    return $rv if (not $RT->{cvsrse});
   
       #   suck in the log message
       my $logfile = $PA->{ARG}->[0];
  @@ -1271,7 +1271,7 @@
       $data = &compress_message($data);
   
       #  update the log message
  -    #  (OSSP CVS reads in this again, stock CVS ignores it)
  +    #  (CVS with RSE patches reads in this again, stock CVS ignores it)
       open(FP, ">$logfile") || die "cannot open message file `$logfile' for writing";
       print FP $data;
       close(FP);
  @@ -1378,7 +1378,7 @@
           #   N = new file
           #   U = updated w/o conflict
           #   C = updated w/  conflict
  -        #   T = touched/tagged only (OSSP extension)
  +        #   T = touched/tagged only (RSE extension)
           $RT->{cvsop} = 'import';
           @cvsinfo = ();
           $cvsmsg =~ s|Status:\n+Vendor Tag:\s+(\S+).*?\nRelease Tags:\s+(.+?)\s*\n(.+)$||s;
  @@ -1456,8 +1456,8 @@
       &do_file('write', "$RT->{tmpfile}.log", '', $cvslog);
   
       #   if we are using a stock CVS version, we have to determine
  -    #   extra information (which an OSSP CVS version would provide).
  -    if (not $RT->{cvsossp} and not $RT->{cvsop} eq 'import') {
  +    #   extra information (which an RSE CVS version would provide).
  +    if (not $RT->{cvsrse} and not $RT->{cvsop} eq 'import') {
   
           #   parse CVS commit information
           my $tag = 'HEAD';

From ossp-cvs-owner@ossp.org  Sat Dec 21 11:32:41 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9A989764A8; Sat, 21 Dec 2002 11:32:40 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela ChangeLog shiela.pl
Message-Id: <20021221103240.9A989764A8@mail.ossp.org>
Date: Sat, 21 Dec 2002 11:32:40 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Dec-2002 11:32:40
  Branch: HEAD                             Handle: 2002122110323901

  Modified files:
    ossp-pkg/shiela         ChangeLog shiela.pl

  Log:
    Consistently use IO objects instead of the anchient direct
    fiddling with Perl's filedescriptor symbol globs.

  Summary:
    Revision    Changes     Path
    1.15        +4  -0      ossp-pkg/shiela/ChangeLog
    1.20        +63 -53     ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/ChangeLog
  ============================================================
  $ cvs diff -u -r1.14 -r1.15 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	21 Dec 2002 09:53:16 -0000	1.14
  +++ ossp-pkg/shiela/ChangeLog	21 Dec 2002 10:32:39 -0000	1.15
  @@ -11,6 +11,10 @@
   
     Changes between 0.9.2 and 0.9.3 (19-Aug-2002 to 21-Dec-2002):
   
  +   *) Consistently use IO objects instead of the anchient direct
  +      fiddling with Perl's filedescriptor symbol globs.
  +      [Ralf S. Engelschall]
  +
      *) Correctly determine CVS version and optional RSE patches (from
         OpenPKG "cvs" package).
         [Ralf S. Engelschall]
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	21 Dec 2002 09:53:16 -0000	1.19
  +++ ossp-pkg/shiela/shiela.pl	21 Dec 2002 10:32:40 -0000	1.20
  @@ -32,6 +32,7 @@
   
   use strict;       # shipped with Perl since 5.000
   use POSIX;        # shipped with Perl since 5.000
  +use IO::File;     # shipped with Perl since 5.003
   use IO::Handle;   # shipped with Perl since 5.003
   use IPC::Open2;   # shipped with Perl since 5.003
   use Data::Dumper; # shipped with Perl since 5.005
  @@ -361,10 +362,10 @@
       my ($file) = @_;
   
       #   read configuration file
  -    open(CFG, "<$file") || die "unable to open configuration file `$file'";
  +    my $io = new IO::File "<$file" || die "unable to open configuration file `$file'";
       my $t = '';
  -    $t .= $_ while (<CFG>);
  -    close(CFG);
  +    $t .= $_ while (<$io>);
  +    $io->close;
   
       #   parse configuration syntax into nested internal structure and
       #   in parallel (through a callback function) create the final
  @@ -794,24 +795,24 @@
   
       #   append to or override a file with lines from an array
       if ($op eq 'append' or $op eq 'write') {
  -        open(FP, ($op eq 'append' ? ">" : "").">$file") or
  -            die "unable to open `$file' for $op";
  +        my $io = new IO::File ($op eq 'append' ? ">>" : ">").$file
  +            || die "unable to open `$file' for $op";
           foreach my $line (@lines) {
               $line =~ s|\n+$||s;
  -            print FP $prefix . $line . "\n";
  +            $io->print($prefix . $line . "\n");
           }
  -        close(FP);
  +        $io->close;
       }
       #   read a file line by line into an array
       elsif ($op eq 'read') {
           my @text = ();
  -        open(FP, "<$file") or
  -            die "unable to open `$file' for $op";
  -        while (<FP>) {
  +        my $io = new IO::File "<$file"
  +            || die "unable to open `$file' for $op";
  +        while (<$io>) {
               s|\n$||s;
               push(@text, $prefix . $_);
           }
  -        close(FP);
  +        $io->close;
           return @text;
       }
   }
  @@ -843,10 +844,10 @@
           $O .= ",".$e->{delta};
           $O .= "\n";
       }
  -    open(HDB, ">>".$RT->{historydb}) 
  +    my $io = new IO::File ">>".$RT->{historydb}
            || die "cannot store information to history db `$file'";
  -    print HDB $O;
  -    close(HDB);
  +    $io->print($O);
  +    $io->close;
       return;
   }
   
  @@ -1169,9 +1170,10 @@
       #   annotate the files with the branch they stay on
       my $cvsstat = '';
       if (not $RT->{useserver}) {
  -        open(CVSS, "$RT->{cvs} -f -l -Q -n status ".join(' ', @cvsfiles)."|");
  -        $cvsstat .= $_ while (<CVSS>);
  -        close(CVSS);
  +        my $io = new IO::File "$RT->{cvs} -f -l -Q -n status ".join(' ', @cvsfiles)."|"
  +            || die "unable to open CVS command pipe for reading";
  +        $cvsstat .= $_ while (<$io>);
  +        $io->close;
       }
       else {
           my $cvs = new CVS ($RT->{cvs}, $RT->{cvsroot});
  @@ -1262,19 +1264,21 @@
   
       #   suck in the log message
       my $logfile = $PA->{ARG}->[0];
  -    open(FP,  "<$logfile") || die "cannot open message file `$logfile' for reading";
  +    my $io = new IO::File "<$logfile"
  +        || die "cannot open message file `$logfile' for reading";
       my $data = '';
  -    $data .= $_ while (<FP>);
  -    close(FP);
  +    $data .= $_ while (<$io>);
  +    $io->close;
   
       #  filter the log message
       $data = &compress_message($data);
   
       #  update the log message
       #  (CVS with RSE patches reads in this again, stock CVS ignores it)
  -    open(FP, ">$logfile") || die "cannot open message file `$logfile' for writing";
  -    print FP $data;
  -    close(FP);
  +    $io = new IO::File ">$logfile"
  +        || die "cannot open message file `$logfile' for writing";
  +    $io->print($data);
  +    $io->close;
   
       #   nuke possibly existing editor backup files
       unlink("${logfile}~");    
  @@ -1409,9 +1413,10 @@
                       print STDERR "cvs import: Ignoring this operation - don't expect log messages!\n";
                       exit(0);
                   }
  -                open(CVSS, "$RT->{cvs} -f -l -Q -n log -r$It '$Is'|");
  -                $rcslog = $_ while (<CVSS>);
  -                close(CVSS);
  +                my $io = new IO::File "$RT->{cvs} -f -l -Q -n log -r$It '$Is'|"
  +                    || die "unable to open CVS command pipe for reading";
  +                $rcslog = $_ while (<$io>);
  +                $io->close;
               }
               else {
                   my $cvs = new CVS ($RT->{cvs}, $RT->{cvsroot});
  @@ -1525,9 +1530,10 @@
           my $rcslog = '';
           if ($Io eq 'A' or $Io eq 'M') {
               if (not $RT->{useserver}) {
  -                open(CVSS, "$RT->{cvs} -f -l -Q -n log -r$Iv '$Is'|");
  -                $rcslog .= $_ while (<CVSS>);
  -                close(CVSS);
  +                my $io = new IO::File "$RT->{cvs} -f -l -Q -n log -r$Iv '$Is'|"
  +                    || die "unable to open CVS command pipe for reading";
  +                $rcslog .= $_ while (<$io>);
  +                $io->close;
               }
               else {
                   my $cvs = new CVS ($RT->{cvs}, $RT->{cvsroot});
  @@ -1560,10 +1566,10 @@
           }
           else {
               if ($Io eq 'A') {
  -                open(FP, "<$Is"); 
  +                my $io = new IO::File "<$Is" || die "unable open $Is for reading";
                   my $l = 0;
  -                $l++ while (<FP>);
  -                close(FP);
  +                $l++ while (<$io>);
  +                $io->close;
                   $Id = sprintf("+%d/-%d", $l, 0);
               }
               elsif ($Io eq 'M') {
  @@ -1597,9 +1603,10 @@
                       "============================================================\n" .
                       "\$ cvs update -p -r$Iv $Is | uuencode $Is\n";
                   if (not $RT->{useserver}) {
  -                    open(CVSS, "$RT->{cvs} -f -l -Q -n update -p -r$Iv '$Is' | uuencode '$Is' |");
  -                    $cvsdiff .= $_ while (<CVSS>);
  -                    close(CVSS);
  +                    my $io = new IO::File "$RT->{cvs} -f -l -Q -n update -p -r$Iv '$Is' | uuencode '$Is' |"
  +                        || die "unable to open CVS command pipe for reading";
  +                    $cvsdiff .= $_ while (<$io>);
  +                    $io->close;
                   }
                   else {
                       my $cvs = new CVS ($RT->{cvs}, $RT->{cvsroot});
  @@ -1620,9 +1627,10 @@
                       "============================================================\n" .
                       "\$ cvs update -p -r$Iv $Is\n";
                   if (not $RT->{useserver}) {
  -                    open(CVSS, "$RT->{cvs} -f -l -Q -n update -p -r$Iv '$Is'|");
  -                    $cvsdiff .= $_ while (<CVSS>);
  -                    close(CVSS);
  +                    my $io = new IO::File "$RT->{cvs} -f -l -Q -n update -p -r$Iv '$Is'|"
  +                        || die "unable to open CVS command pipe for reading";
  +                    $cvsdiff .= $_ while (<$io>);
  +                    $io->close;
                   }
                   else {
                       my $cvs = new CVS ($RT->{cvs}, $RT->{cvsroot});
  @@ -1657,29 +1665,31 @@
                       $cvs->arguments("-p", "-r$IV", $Is);
                       $cvs->send("update");
                       my $data = scalar $cvs->result;
  -                    open(FP, ">$Is.old") || die "cannot write to $Is.old";
  -                    print FP $data;
  -                    close(FP);
  +                    my $io = new IO::File ">$Is.old" || die "cannot write to $Is.old";
  +                    $io->print($data);
  +                    $io->close;
                       $cvs->arguments("-p", "-r$Iv", $Is);
                       $cvs->send("update");
                       $data = scalar $cvs->result;
  -                    open(FP, ">$Is.new") || die "cannot write to $Is.old";
  -                    print FP $data;
  -                    close(FP);
  +                    $io = new IO::File ">$Is.new" || die "cannot write to $Is.old";
  +                    $io->print($data);
  +                    $io->close;
                       $cvs->close;
                   }
  -                open(FP, "diff -u $Is.old $Is.new|");
  -                $cvsdiff .= $_ while (<FP>);
  -                close(FP);
  +                my $io = new IO::File "diff -u $Is.old $Is.new|"
  +                    || die "unable to open diff command pipe for reading";
  +                $cvsdiff .= $_ while (<$io>);
  +                $io->close;
                   $cvsdiff .= "</Diff>\n";
               }
               else {
                   #   file was modified, so we show the changed contents only
                   my $d = '';
                   if (not $RT->{useserver}) {
  -                    open(FP, "$RT->{cvs} -f -l -Q -n diff -u -r$IV -r$Iv '$Is'|");
  -                    $d .= $_ while (<FP>);
  -                    close(FP);
  +                    my $io = new IO::File "$RT->{cvs} -f -l -Q -n diff -u -r$IV -r$Iv '$Is'|"
  +                        || die "unable to open CVS command pipe for reading";
  +                    $d .= $_ while (<$io>);
  +                    $io->close;
                   }
                   else {
                       my $cvs = new CVS ($RT->{cvs}, $RT->{cvsroot});
  @@ -1852,9 +1862,9 @@
                   my $logmsg = &produce_log_message($PA, $RT, $CF, $IN, $logtype, @files);
                   $logurl = $RT->{cvsroot}."/".$logurl if ($logurl !~ m|^/|);
                   print "cvs commit: Writing commit message to $logurl\n";
  -                open(LOG, ">>$logurl") || die "cannot append log message to `$logurl'";
  -                print LOG $logmsg;
  -                close(LOG);
  +                my $io = new IO::File ">>$logurl" || die "cannot append log message to `$logurl'";
  +                $io->print($logmsg);
  +                $io->close;
               }
           }
       }

From ossp-cvs-owner@ossp.org  Sat Dec 21 12:00:19 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4BB3776559; Sat, 21 Dec 2002 12:00:19 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela ChangeLog INSTALL Makefile.in TODO devtool...
Message-Id: <20021221110019.4BB3776559@mail.ossp.org>
Date: Sat, 21 Dec 2002 12:00:19 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Dec-2002 12:00:19
  Branch: HEAD                             Handle: 2002122111001700

  Modified files:
    ossp-pkg/shiela         ChangeLog INSTALL Makefile.in TODO devtool.conf
                            shiela-install.pod shiela-install.sh shiela.pl
                            shiela.pod

  Log:
    Finally really use the "Environment" configuration section to find
    "cvs" and "sendmail" directly and add a "Program" sub-command to it
    for easier extension of the "Environment" section in the future.
    
    Additionally, replace more "Shiela" occurrences with "OSSP shiela".

  Summary:
    Revision    Changes     Path
    1.16        +6  -1      ossp-pkg/shiela/ChangeLog
    1.4         +1  -1      ossp-pkg/shiela/INSTALL
    1.5         +4  -4      ossp-pkg/shiela/Makefile.in
    1.4         +1  -1      ossp-pkg/shiela/TODO
    1.4         +2  -2      ossp-pkg/shiela/devtool.conf
    1.8         +10 -10     ossp-pkg/shiela/shiela-install.pod
    1.9         +68 -38     ossp-pkg/shiela/shiela-install.sh
    1.21        +21 -10     ossp-pkg/shiela/shiela.pl
    1.8         +55 -37     ossp-pkg/shiela/shiela.pod
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/ChangeLog
  ============================================================
  $ cvs diff -u -r1.15 -r1.16 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	21 Dec 2002 10:32:39 -0000	1.15
  +++ ossp-pkg/shiela/ChangeLog	21 Dec 2002 11:00:17 -0000	1.16
  @@ -11,6 +11,11 @@
   
     Changes between 0.9.2 and 0.9.3 (19-Aug-2002 to 21-Dec-2002):
   
  +   *) Finally really use the "Environment" configuration section to find
  +      "cvs" and "sendmail" directly and add a "Program" sub-command to it
  +      for easier extension of the "Environment" section in the future.
  +      [Ralf S. Engelschall]
  +
      *) Consistently use IO objects instead of the anchient direct
         fiddling with Perl's filedescriptor symbol globs.
         [Ralf S. Engelschall]
  @@ -72,6 +77,6 @@
   
     Changes between *GENESIS* and 0.9.0 (Apr-2000 to 18-Jun-2000):
   
  -   *) Created the first Shiela version.
  +   *) Created the first OSSP shiela version.
         [Ralf S. Engelschall]
   
  Index: ossp-pkg/shiela/INSTALL
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 INSTALL
  --- ossp-pkg/shiela/INSTALL	21 Dec 2002 09:42:57 -0000	1.3
  +++ ossp-pkg/shiela/INSTALL	21 Dec 2002 11:00:17 -0000	1.4
  @@ -9,6 +9,6 @@
   
     INSTALLATION
     
  -  Usually you want to use Shiela inside the repository tree. 
  +  Usually you want to use OSSP shiela inside the repository tree. 
     Read the shiela-install(1) manual page for details.
   
  Index: ossp-pkg/shiela/Makefile.in
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 Makefile.in
  --- ossp-pkg/shiela/Makefile.in	21 Dec 2002 09:42:57 -0000	1.4
  +++ ossp-pkg/shiela/Makefile.in	21 Dec 2002 11:00:17 -0000	1.5
  @@ -64,15 +64,15 @@
   	@$(SHTOOL) echo -e "%Bgenerating shiela.1%b"
   	V=`$(SHTOOL) version -l txt -d short VERSION`; \
   	D=`$(SHTOOL) version -l txt -d long VERSION | $(SED) -e 's;.*(;;' -e 's;).*;;'`; \
  -	$(POD2MAN) --section=1 --center="CVS ACL and Logging Facility" \
  -	           --release="$$D" --date="OSSP Shiela $$V" shiela.pod >shiela.1
  +	$(POD2MAN) --section=1 --center="Access Control and Logging Facility for CVS" \
  +	           --release="$$D" --date="OSSP shiela $$V" shiela.pod >shiela.1
   
   shiela-install.1: shiela-install.pod
   	@$(SHTOOL) echo -e "%Bgenerating shiela-install.1%b"
   	V=`$(SHTOOL) version -l txt -d short VERSION`; \
   	D=`$(SHTOOL) version -l txt -d long VERSION | $(SED) -e 's;.*(;;' -e 's;).*;;'`; \
  -	$(POD2MAN) --section=1 --center="CVS ACL and Logging Facility" \
  -	           --release="$$D" --date="OSSP Shiela $$V" shiela-install.pod >shiela-install.1
  +	$(POD2MAN) --section=1 --center="Access Control and Logging Facility for CVS" \
  +	           --release="$$D" --date="OSSP shiela $$V" shiela-install.pod >shiela-install.1
   
   install: all
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
  Index: ossp-pkg/shiela/TODO
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 TODO
  --- ossp-pkg/shiela/TODO	21 Dec 2002 09:42:57 -0000	1.3
  +++ ossp-pkg/shiela/TODO	21 Dec 2002 11:00:17 -0000	1.4
  @@ -29,7 +29,7 @@
        just top-level directories. This should be easy to add for
        version 1.1 by adjusting the access control routine.
   
  -  o  Shiela perhaps should read in shiela.msg in order to know
  +  o  It perhaps should read in shiela.msg in order to know
        what to kick out when compressing the message. 
   
     For version 1.1:
  Index: ossp-pkg/shiela/devtool.conf
  ============================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.conf
  --- ossp-pkg/shiela/devtool.conf	21 Dec 2002 09:42:57 -0000	1.3
  +++ ossp-pkg/shiela/devtool.conf	21 Dec 2002 11:00:17 -0000	1.4
  @@ -29,8 +29,8 @@
       sed -e "s/version=\".*\"/version=\"$V\"/" <shiela-install.sh >shiela-install.sh.n && mv shiela-install.sh.n shiela-install.sh
   	V=`./shtool version -l txt -d long VERSION`
   	sed -e "s/Version .*(.*)/Version $V/g" <README >README.n && mv README.n README
  -    sed -e "s/B<OSSP Shiela> .*/B<OSSP Shiela> $V/" <shiela.pod >shiela.pod.n && mv shiela.pod.n shiela.pod
  -    sed -e "s/B<OSSP Shiela> .*/B<OSSP Shiela> $V/" <shiela-install.pod >shiela-install.pod.n && mv shiela-install.pod.n shiela-install.pod
  +    sed -e "s/B<OSSP shiela> .*/B<OSSP shiela> $V/" <shiela.pod >shiela.pod.n && mv shiela.pod.n shiela.pod
  +    sed -e "s/B<OSSP shiela> .*/B<OSSP shiela> $V/" <shiela-install.pod >shiela-install.pod.n && mv shiela-install.pod.n shiela-install.pod
   
   %tag
   	V=`./shtool version -ltxt -dshort VERSION | sed -e 's;\.;_;g'`
  Index: ossp-pkg/shiela/shiela-install.pod
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 shiela-install.pod
  --- ossp-pkg/shiela/shiela-install.pod	21 Dec 2002 09:42:57 -0000	1.7
  +++ ossp-pkg/shiela/shiela-install.pod	21 Dec 2002 11:00:17 -0000	1.8
  @@ -29,23 +29,23 @@
   
   =head1 NAME
   
  -B<shiela-install> - Shiela installation utility
  +B<shiela-install> - OSSP shiela installation utility
   
   =head1 VERSION
   
  -B<OSSP Shiela> 0.9.3 (21-Dec-2002)
  +B<OSSP shiela> 0.9.3 (21-Dec-2002)
   
   =head1 DESCRIPTION
   
  -B<Shiela> is an access control and logging facility for use with
  +B<OSSP shiela> is an access control and logging facility for use with
   the I<Concurrent Versions System> (CVS). Read shiela(1) for more
  -details about B<Shiela> itself. This B<shiela-install> program is a
  -small utility intended to help in adding B<Shiela> to an existing CVS
  +details about B<OSSP shiela> itself. This B<shiela-install> program is a
  +small utility intended to help in adding B<OSSP shiela> to an existing CVS
   repository for testing or production purposes.
   
   =head1 INSTALLATION: MANUALLY
   
  -B<Shiela> can be installed and activated in a CVS repository either
  +B<OSSP shiela> can be installed and activated in a CVS repository either
   manually or via the B<shiela-install> program. The manual steps would
   be:
   
  @@ -79,7 +79,7 @@
   operations): ``C<ALL $CVSROOT/CVSROOT/shiela --hook=importinfo>''. This
   assumes that you are using the OSSP CVS version. If you use a stock CVS
   version, you have to skip this step and live with the fact that `C<cvs
  -import>' commands cannot be access controlled by B<Shiela> (because then
  +import>' commands cannot be access controlled by B<OSSP shiela> (because then
   this hook does not exists at all).
   
   =item B<6.>
  @@ -88,7 +88,7 @@
   operations): ``C<ALL $CVSROOT/CVSROOT/shiela --hook=admininfo>''. This
   requires that you are using the OSSP CVS version. If you use a stock CVS
   version, you have to skip this step and life with the fact that `C<cvs
  -admin>' commands cannot be access controlled by B<Shiela> (because then
  +admin>' commands cannot be access controlled by B<OSSP shiela> (because then
   this hook does not exists at all).
   
   =item B<7.>
  @@ -107,9 +107,9 @@
   ``C<ALL $CVSROOT/CVSROOT/shiela --hook=loginfo %{sVvto}>''. This
   requires that you use the OSSP CVS version. If you use a stock CVS
   version, use ``C<ALL $CVSROOT/CVSROOT/shiela --hook=loginfo %{sVv}>''
  -instead and live with the fact that B<Shiela>'s run-time efficiency is
  +instead and live with the fact that B<OSSP shiela>'s run-time efficiency is
   slightly decreased and branch recognition might be less correct (because
  -B<Shiela> has to determine details the hard way which CVS already would
  +B<OSSP shiela> has to determine details the hard way which CVS already would
   know easily).
   
   =item B<10.>
  Index: ossp-pkg/shiela/shiela-install.sh
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 shiela-install.sh
  --- ossp-pkg/shiela/shiela-install.sh	21 Dec 2002 09:42:57 -0000	1.8
  +++ ossp-pkg/shiela/shiela-install.sh	21 Dec 2002 11:00:17 -0000	1.9
  @@ -85,16 +85,17 @@
           ;;
   esac
   
  -echo "This is ${term_bold}Shiela Setup${term_norm}, Version ${term_bold}${version}${term_norm}"
  -echo "Copyright (c) 2000 Ralf S. Engelschall <rse@engelschall.com>"
  +echo "This is ${term_bold}OSSP shiela Setup${term_norm}, Version ${term_bold}${version}${term_norm}"
  +echo "Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>"
  +echo "Copyright (c) 2000-2002 The OSSP Project <http://www.ossp.org/>"
   echo ""
   
   echo "${term_bold}PARAMETER DETERMINATION${term_norm}"
   cat <<EOT
   
  -This utility helps you to initially setup Shiela for a particular CVS
  +This utility helps you to initially setup OSSP shiela for a particular CVS
   repository. It asks you a few questions in order to establish an initial
  -Shiela configuration. This can be adjusted later without problems. Only
  +OSSP shiela configuration. This can be adjusted later without problems. Only
   the questions marked with (U) ask for details which are actually used
   immediately and so have to be correctly entered already now. All other
   questions ask just for informational (I) details which do not harm if
  @@ -296,37 +297,61 @@
   fi
   query U tool_perl
   
  -if [ ".$V_tool_cvs" = . ]; then
  -    V_tool_cvs="cvs"
  +if [ ".$V_tool_sendmail" = . ]; then
  +    V_tool_sendmail="sendmail"
       for path in $paths; do
           path=`echo $path | sed -e 's;/*$;;'`
  -        if [ $minusx "$path/cvs" ] && [ ! -d "$path/cvs" ]; then
  -            V_tool_cvs="$path/cvs"
  +        if [ $minusx "$path/sendmail" ] && [ ! -d "$path/sendmail" ]; then
  +            V_tool_sendmail="$path/sendmail"
               break
           fi
       done
   fi
  -query U tool_cvs
  +query U tool_sendmail
   
  -if [ ".$V_tool_sendmail" = . ]; then
  -    V_tool_sendmail="sendmail"
  +if [ ".$V_tool_diff" = . ]; then
  +    V_tool_diff="diff"
       for path in $paths; do
           path=`echo $path | sed -e 's;/*$;;'`
  -        if [ $minusx "$path/sendmail" ] && [ ! -d "$path/sendmail" ]; then
  -            V_tool_sendmail="$path/sendmail"
  +        if [ $minusx "$path/diff" ] && [ ! -d "$path/diff" ]; then
  +            V_tool_diff="$path/diff"
               break
           fi
       done
   fi
  -query U tool_sendmail
  +query U tool_diff
  +
  +if [ ".$V_tool_uuencode" = . ]; then
  +    V_tool_uuencode="uuencode"
  +    for path in $paths; do
  +        path=`echo $path | sed -e 's;/*$;;'`
  +        if [ $minusx "$path/uuencode" ] && [ ! -d "$path/uuencode" ]; then
  +            V_tool_diff="$path/uuencode"
  +            break
  +        fi
  +    done
  +fi
  +query U tool_uuencode
  +
  +if [ ".$V_tool_cvs" = . ]; then
  +    V_tool_cvs="cvs"
  +    for path in $paths; do
  +        path=`echo $path | sed -e 's;/*$;;'`
  +        if [ $minusx "$path/cvs" ] && [ ! -d "$path/cvs" ]; then
  +            V_tool_cvs="$path/cvs"
  +            break
  +        fi
  +    done
  +fi
  +query U tool_cvs
   
   CVS_VERSION=`$V_tool_cvs --version |\
                grep "Concurrent Versions System (CVS)" |\
                sed -e 's;^.*(CVS) ;;' -e 's; .*$;;'`
  -if [ ".`$V_tool_cvs --version | grep OSSP`" != . ]; then
  -    CVS_VENDOR=OSSP
  +if [ ".`$V_tool_cvs --version | grep RSE`" != . ]; then
  +    CVS_VENDOR=RSE
   else
  -    CVS_VENDOR=OpenAvenue
  +    CVS_VENDOR=CVSHome.org
   fi
   case $CVS_VERSION in
      1.10.[789]* | 1.10.1[0123456789]* | 1.11.* ) 
  @@ -337,12 +362,14 @@
          ;;
   esac
   case $CVS_VENDOR in
  -    OSSP ) 
  +    RSE ) 
          ;;
       * ) 
          echo "WARNING: You are using a stock CVS version from $CVS_VENDOR!"
  -       echo "         This means that not all Shiela functionality is available".
  -       echo "         for you. Please consider upgrading to the OSSP CVS version.".
  +       echo "         This means that not all OSSP shiela functionality is available"
  +       echo "         for you. We recommend to use the OpenPKG CVS version with"
  +       echo "         the enhancement patchset from Ralf S. Engelschall applied."
  +       echo "         [see http://www.openpkg.org/ for OpenPKG]"
          echo ""
          ;;
   esac
  @@ -366,12 +393,13 @@
   
   cat >$tmpdir/shiela.cfg <<EOT
   ##
  -##  Shiela - CVS Access Control and Logging Facility
  -##  Copyright (c) 2000 Ralf S. Engelschall <rse@engelschall.com>
  +##  OSSP shiela - Access Control and Logging Facility for CVS
  +##  Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2002 The OSSP Project <http://www.ossp.org/>
   ##
  -##  This file is part of Shiela, an access control and logging
  -##  facility for Concurrent Versions System (CVS) repositories 
  -##  which can be found at http://www.ossp.org/pkg/shiela/.
  +##  This file is part of OSSP shiela, an access control and logging
  +##  facility for Concurrent Versions System (CVS) repositories
  +##  which can be found at http://www.ossp.org/pkg/tool/shiela/.
   ##
   ##  This program is free software; you can redistribute it and/or
   ##  modify it under the terms of the GNU General Public  License 
  @@ -388,9 +416,16 @@
   ##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
   ##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
   ##
  -##  shiela.cfg: Shiela configuration (syntax: Shiela C-style)
  +##  shiela.cfg: run-time configuration (syntax: OSSP shiela C-style)
   ##
   
  +Environment {
  +    Program sendmail ${V_tool_sendmail};
  +    Program cvs      ${V_tool_cvs};
  +    Program diff     ${V_tool_diff};
  +    Program uuencode ${V_tool_uuencode};
  +};
  +
   Project {
       Tag     ${V_project_tag};
       Name    "${V_project_name}";
  @@ -404,11 +439,6 @@
       };
   };
   
  -Environment {
  -    CVS      ${V_tool_cvs};
  -    Sendmail ${V_tool_sendmail};
  -};
  -
   Repository {
       Tag     ${V_repos_tag};
       Name    "${V_repos_name}"; 
  @@ -458,7 +488,7 @@
   cat <<EOT
   
   Initial "shiela.cfg" and "shiela.msg" files were generated for you. 
  -Before Shiela is installed and activated with these configuration files, 
  +Before OSSP shiela is installed and activated with these configuration files, 
   you have the chance to adjust them in your editor.
   
   EOT
  @@ -599,17 +629,17 @@
       fi
   fi
   echo ""
  -run "$V_tool_cvs commit -m 'Add Shiela -- CVS Access Control and Logging Facility' ."
  +run "$V_tool_cvs commit -m 'Add OSSP shiela -- Access Control and Logging Facility for CVS' ."
   run cd ..
   run rm -rf CVSROOT
   
   cat <<EOT
   
  -Ok, your $V_repos_path/CVSROOT/ area was modified to now use Shiela for
  -access control and logging. You can try it out by checking out CVSROOT
  -yourself and modify some files. You should receive an Email for every
  -modification. Then especially adjust "shiela.cfg" for your particular
  -repository layout.
  +Ok, your $V_repos_path/CVSROOT/ area was modified to now use OSSP shiela
  +for access control and logging. You can try it out by checking out
  +CVSROOT yourself and modify some files. You should receive an Email
  +for every modification. Then especially adjust "shiela.cfg" for your
  +particular repository layout.
   
   EOT
   
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	21 Dec 2002 10:32:40 -0000	1.20
  +++ ossp-pkg/shiela/shiela.pl	21 Dec 2002 11:00:17 -0000	1.21
  @@ -149,7 +149,7 @@
   
       #   determine user information
       $RT->{username} = $CF->{Project}->{User}->{$RT->{userid}}->{name} ||
  -                      die "CVS user `$RT->{userid}' not found in Shiela configuration";
  +                      die "CVS user `$RT->{userid}' not found in OSSP shiela configuration";
       $RT->{usermail} = $CF->{Project}->{User}->{$RT->{userid}}->{mail} ||
                         "$RT->{userid}\@localhost";
   
  @@ -175,11 +175,19 @@
           }
           return $prog;
       }
  -    $RT->{sendmail} = &find_program("ssmtp") ||
  +    $RT->{sendmail} = $CF->{Environment}->{Program}->{cvs} ||
  +                      &find_program("ssmtp") ||
                         &find_program("sendmail") || 
                         die "unable to find `sendmail' program";
  -    $RT->{cvs}      = &find_program("cvs") || 
  +    $RT->{cvs}      = $CF->{Environment}->{Program}->{sendmail} ||
  +                      &find_program("cvs") || 
                         die "unable to find `cvs' program";
  +    $RT->{diff}     = $CF->{Environment}->{Program}->{diff} ||
  +                      &find_program("diff") || 
  +                      die "unable to find `diff' program";
  +    $RT->{uuencode} = $CF->{Environment}->{Program}->{uuencode} ||
  +                      &find_program("uuencode") || 
  +                      die "unable to find `uuencode' program";
   
       #   pre-calculate a reasonable MIME boundary tag
       my $randtag;
  @@ -349,7 +357,7 @@
   
   ##  _________________________________________________________________
   ##
  -##  Determine Shiela configuration.
  +##  Determine OSSP shiela configuration.
   ##
   ##  We theoretically could directly operate on the syntax tree as
   ##  created by parse_config() above. But for convinience reasons and
  @@ -380,6 +388,9 @@
           },
           'Logging' => {
               'Report' => {}
  +        },
  +        'Environment' => {
  +            'Program' => {}
           }
       };
       my $cf = &parse_config($t, \&parse_config_callback, $CF);
  @@ -1361,14 +1372,14 @@
   
       #   handle special invocation under `cvs add <dir>'
       if (join(' ', @cvsinfo) eq '- New directory') { # see CVS' src/add.c
  -        #   Hmmm... we always just deal with files in Shiela, so there
  +        #   Hmmm... we always just deal with files in OSSP shiela, so there
           #   is no obvious and consistent way to deal now with only a
           #   plain directory. And there is also no log message provided
           #   by CVS. Additionally, creating empty directories in the CVS
           #   repository doesn't harm anyone. A regular cronjob is usually
           #   used to get rid of them anyway. So we decided to not log
           #   `cvs add <dir>' commands at all. We are early in processing
  -        #   it is acceptable to just exit Shiela immediately.
  +        #   it is acceptable to just exit OSSP shiela immediately.
           exit(0);
       }
   
  @@ -1407,7 +1418,7 @@
                       #  provided a temporary working area on the server
                       #  side for us. Now we can only hope the CVS version
                       #  is at least capable of server communications...
  -                    print STDERR "cvs import: Warning: Shiela cannot process local imports\n";
  +                    print STDERR "cvs import: Warning: OSSP shiela cannot process local imports\n";
                       print STDERR "cvs import: if the CVS version isn't at least capable of\n";
                       print STDERR "cvs import: server communications (which we're forced to use).\n";
                       print STDERR "cvs import: Ignoring this operation - don't expect log messages!\n";
  @@ -1655,8 +1666,8 @@
                       "\$ cvs update -p -r$Iv $Is >$Is.new\n" .
                       "\$ diff -u $Is.old $Is.new\n";
                   if (not $RT->{useserver}) {
  -                    system("$RT->{cvs} -f -l -Q -n update -p -r$IV '$Is' | uuencode '$Is' >$Is.old");
  -                    system("$RT->{cvs} -f -l -Q -n update -p -r$Iv '$Is' | uuencode '$Is' >$Is.new");
  +                    system("$RT->{cvs} -f -l -Q -n update -p -r$IV '$Is' | $RT->{uuencode} '$Is' >$Is.old");
  +                    system("$RT->{cvs} -f -l -Q -n update -p -r$Iv '$Is' | $RT->{uuencode} '$Is' >$Is.new");
                   }
                   else {
                       my $cvs = new CVS ($RT->{cvs}, $RT->{cvsroot});
  @@ -1676,7 +1687,7 @@
                       $io->close;
                       $cvs->close;
                   }
  -                my $io = new IO::File "diff -u $Is.old $Is.new|"
  +                my $io = new IO::File "$RT->{diff} -u $Is.old $Is.new|"
                       || die "unable to open diff command pipe for reading";
                   $cvsdiff .= $_ while (<$io>);
                   $io->close;
  Index: ossp-pkg/shiela/shiela.pod
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 shiela.pod
  --- ossp-pkg/shiela/shiela.pod	21 Dec 2002 09:42:57 -0000	1.7
  +++ ossp-pkg/shiela/shiela.pod	21 Dec 2002 11:00:17 -0000	1.8
  @@ -81,6 +81,53 @@
   For semantical reasons only a particular structure is allowed to be created
   with the syntax. This is described in the following.
   
  +=head2 Environment Configuration
  +
  +The last configuration block is optional and for setting the run-time
  +environment. This configuration block has to be of the following
  +structure:
  +
  + Environment {
  +     [Program sendmail <path>;]
  +     [Program cvs <path>;]
  +     [Program diff <path>;]
  +     [Program uuencode <path>;]
  + };
  +
  +The individual parts of this are:
  +
  +=over 4
  +
  +=item B<Program sendmail E<lt>pathE<gt>;>
  +
  +This overrides the path to the F<sendmail> executable. Per default
  +B<OSSP shiela> determines this automatically through the inherited C<$PATH>
  +variable. Use this either if you have Sendmail not in C<$PATH> or if you
  +have multiple Sendmail instances installed.
  +
  +=item B<Program cvs E<lt>pathE<gt>;>
  +
  +This overrides the path to the F<cvs> executable. Per default B<OSSP shiela>
  +determines this automatically through the inherited C<$PATH> variable.
  +Use this either if you have CVS not in C<$PATH> or if you have multiple
  +CVS instances installed.
  +
  +=item B<Program diff E<lt>pathE<gt>;>
  +
  +This overrides the path to the F<diff> executable. Per default B<OSSP
  +shiela> determines this automatically through the inherited C<$PATH>
  +variable. Use this either if you have GNU Diffutils not in C<$PATH> or
  +if you have multiple GNU Diffutils instances installed.
  +
  +=item B<Program uuencode E<lt>pathE<gt>;>
  +
  +This overrides the path to the F<uuencode> executable. Per default
  +B<OSSP shiela> determines this automatically through the inherited
  +C<$PATH> variable. Use this either if you have GNU Sharutils not in
  +C<$PATH> or if you have multiple GNU Sharutils instances installed.
  +
  +=back
  +
   =head2 Project Configuration
   
   The first configuration block is for the project to which the repository
  @@ -335,42 +382,19 @@
   
   =back
   
  -=head2 Environment Configuration
  -
  -The last configuration block is optional and for setting the run-time
  -environment. This configuration block has to be of the following
  -structure:
  -
  - Environment {
  -     CVS <path>;
  -     Sendmail <path>;
  - };
  -
  -The individual parts of this are:
  -
  -=over 4
  -
  -=item B<CVS E<lt>pathE<gt>;>
  -
  -This overrides the path to the CVS executable. Per default B<OSSP shiela>
  -determines this automatically through the inherited C<$PATH> variable.
  -Use this either if you have CVS not in C<$PATH> or if you have multiple
  -CVS instances installed.
  -
  -=item B<Sendmail E<lt>pathE<gt>;>
  -
  -This overrides the path to the Sendmail executable. Per default
  -B<OSSP shiela> determines this automatically through the inherited C<$PATH>
  -variable. Use this either if you have Sendmail not in C<$PATH> or if you
  -have multiple Sendmail instances installed.
  -
  -=back
  -
   =head1 EXAMPLE
   
   The following example shows a fictive but reasonable configuration for a
   sample FOO project:
   
  + #   override the run-time environment
  + Environment {
  +     Program sendmail /e/foo/sw/bin/sendmail;
  +     Program cvs      /e/foo/sw/bin/cvs;
  +     Program diff     /e/foo/sw/bin/diff;
  +     Program uuencode /e/foo/sw/bin/uuencode;
  + };
  +
    #   define the project and its users
    Project {
        Tag     FOO;
  @@ -437,12 +461,6 @@
                Content rule file header files log summary;
            };
        };
  - };
  -
  - #   override the run-time environment
  - Environment {
  -     CVS      /e/foo/sw/bin/cvs;
  -     Sendmail /e/foo/sw/bin/sendmail;
    };
   
   =head1 HISTORY

From ossp-cvs-owner@ossp.org  Sat Dec 21 12:02:02 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EC933764A8; Sat, 21 Dec 2002 12:02:01 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela shiela-install.pod
Message-Id: <20021221110201.EC933764A8@mail.ossp.org>
Date: Sat, 21 Dec 2002 12:02:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Dec-2002 12:02:01
  Branch: HEAD                             Handle: 2002122111020100

  Modified files:
    ossp-pkg/shiela         shiela-install.pod

  Log:
    reference the config section correctly

  Summary:
    Revision    Changes     Path
    1.9         +2  -2      ossp-pkg/shiela/shiela-install.pod
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/shiela-install.pod
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 shiela-install.pod
  --- ossp-pkg/shiela/shiela-install.pod	21 Dec 2002 11:00:17 -0000	1.8
  +++ ossp-pkg/shiela/shiela-install.pod	21 Dec 2002 11:02:01 -0000	1.9
  @@ -115,8 +115,8 @@
   =item B<10.>
   
   edit C<$CVSROOT/CVSROOT/shiela.cfg> to fit your repository and
  -project situation. For details, see the description below under
  -B<CONFIGURATION>.
  +project situation. For details, see the description under
  +B<CONFIGURATION> in shiela(1).
   
   =item B<11.>
   

From ossp-cvs-owner@ossp.org  Sat Dec 21 12:24:18 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3B2787649B; Sat, 21 Dec 2002 12:24:18 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela ChangeLog shiela.pl
Message-Id: <20021221112418.3B2787649B@mail.ossp.org>
Date: Sat, 21 Dec 2002 12:24:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Dec-2002 12:24:18
  Branch: HEAD                             Handle: 2002122111241700

  Modified files:
    ossp-pkg/shiela         ChangeLog shiela.pl

  Log:
    Fix incorrect use (and hence producing a warning for uninitialized
    variable) of variables in the writing of history files.

  Summary:
    Revision    Changes     Path
    1.17        +4  -0      ossp-pkg/shiela/ChangeLog
    1.22        +2  -3      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/ChangeLog
  ============================================================
  $ cvs diff -u -r1.16 -r1.17 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	21 Dec 2002 11:00:17 -0000	1.16
  +++ ossp-pkg/shiela/ChangeLog	21 Dec 2002 11:24:17 -0000	1.17
  @@ -11,6 +11,10 @@
   
     Changes between 0.9.2 and 0.9.3 (19-Aug-2002 to 21-Dec-2002):
   
  +   *) Fix incorrect use (and hence producing a warning for uninitialized
  +      variable) of variables in the writing of history files.
  +      [Ralf S. Engelschall]
  +
      *) Finally really use the "Environment" configuration section to find
         "cvs" and "sendmail" directly and add a "Program" sub-command to it
         for easier extension of the "Environment" section in the future.
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	21 Dec 2002 11:00:17 -0000	1.21
  +++ ossp-pkg/shiela/shiela.pl	21 Dec 2002 11:24:17 -0000	1.22
  @@ -841,8 +841,7 @@
   sub history_save {
       my ($PA, $RT, $CF, $IN) = @_;
       my $O = '';
  -    my $file;
  -    foreach $file (keys(%{$IN->{file}})) {
  +    foreach my $file (keys(%{$IN->{file}})) {
           my $e = $IN->{file}->{$file};
           $O .= $IN->{handle};
           $O .= ",$file";
  @@ -856,7 +855,7 @@
           $O .= "\n";
       }
       my $io = new IO::File ">>".$RT->{historydb}
  -         || die "cannot store information to history db `$file'";
  +         || die "cannot store information to history db `$RT->{historydb}'";
       $io->print($O);
       $io->close;
       return;

From ossp-cvs-owner@ossp.org  Sat Dec 21 12:29:23 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6CA1B7649B; Sat, 21 Dec 2002 12:29:23 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela ChangeLog shiela.pl
Message-Id: <20021221112923.6CA1B7649B@mail.ossp.org>
Date: Sat, 21 Dec 2002 12:29:23 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Dec-2002 12:29:23
  Branch: HEAD                             Handle: 2002122111292200

  Modified files:
    ossp-pkg/shiela         ChangeLog shiela.pl

  Log:
    Make sure that CVS diff handles are calculated correctly
    if files are added or deleted.

  Summary:
    Revision    Changes     Path
    1.18        +4  -0      ossp-pkg/shiela/ChangeLog
    1.23        +2  -2      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/ChangeLog
  ============================================================
  $ cvs diff -u -r1.17 -r1.18 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	21 Dec 2002 11:24:17 -0000	1.17
  +++ ossp-pkg/shiela/ChangeLog	21 Dec 2002 11:29:22 -0000	1.18
  @@ -11,6 +11,10 @@
   
     Changes between 0.9.2 and 0.9.3 (19-Aug-2002 to 21-Dec-2002):
   
  +   *) Make sure that CVS diff handles are calculated correctly
  +      if files are added or deleted.
  +      [Ralf S. Engelschall]
  +
      *) Fix incorrect use (and hence producing a warning for uninitialized
         variable) of variables in the writing of history files.
         [Ralf S. Engelschall]
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================
  $ cvs diff -u -r1.22 -r1.23 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	21 Dec 2002 11:24:17 -0000	1.22
  +++ ossp-pkg/shiela/shiela.pl	21 Dec 2002 11:29:22 -0000	1.23
  @@ -1789,8 +1789,8 @@
           my $Is_quoted = quotemeta($Is);
           $cvsdiff =~ s|\n<Diff\s+${Is_quoted}>\n(.+?\n)</Diff>|$e->{diff} = $1, ''|se;
           $IN->{file}->{$Is} = $e;
  -        $handle_min = $ID if ($ID ne '' and (not defined($handle_min) or $handle_min > $ID));
  -        $handle_max = $ID if ($ID ne '' and (not defined($handle_max) or $handle_max < $ID));
  +        $handle_min = $ID if ($ID ne '' and $ID ne '0' and (not defined($handle_min) or $handle_min > $ID));
  +        $handle_max = $ID if ($ID ne '' and $ID ne '0' and (not defined($handle_max) or $handle_max < $ID));
       }
       $IN->{handle} = '-NONE-';
       if (defined($handle_min) and defined($handle_max)) {

From ossp-cvs-owner@ossp.org  Sat Dec 21 12:40:35 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EE342763C1; Sat, 21 Dec 2002 12:40:34 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela shiela.pl
Message-Id: <20021221114034.EE342763C1@mail.ossp.org>
Date: Sat, 21 Dec 2002 12:40:34 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Dec-2002 12:40:34
  Branch: HEAD                             Handle: 2002122111403400

  Modified files:
    ossp-pkg/shiela         shiela.pl

  Log:
    syntactical fixes and cosmetic

  Summary:
    Revision    Changes     Path
    1.24        +4  -4      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/shiela.pl
  ============================================================
  $ cvs diff -u -r1.23 -r1.24 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	21 Dec 2002 11:29:22 -0000	1.23
  +++ ossp-pkg/shiela/shiela.pl	21 Dec 2002 11:40:34 -0000	1.24
  @@ -131,7 +131,7 @@
       $RT->{userid}  = $ENV{CVSUSER} || $ENV{LOGNAME} || $ENV{LOGUSER} || $ENV{USER} || die 'unknown CVS user';
   
       #   various directory paths
  -    $RT->{tmpdir}   = $ENV{TMPDIR} || $ENV{TEMPDIR} || '/tmp';
  +    $RT->{tmpdir}    = $ENV{TMPDIR} || $ENV{TEMPDIR} || '/tmp';
       $RT->{cvstmpdir} = (-w "$RT->{cvsroot}/CVSTMP" ? "$RT->{cvsroot}/CVSTMP" : $RT->{tmpdir});
       $RT->{cvsadmdir} = "$RT->{cvsroot}/CVSROOT";
       $RT->{cvslogdir} = (-w "$RT->{cvsroot}/CVSLOG" ? "$RT->{cvsroot}/CVSLOG" : $RT->{cvsadmdir});
  @@ -729,7 +729,7 @@
           "From: \"".$RT->{username}."\" <".$RT->{usermail}.">\n" .
           "To: $toaddr\n" .
           "User-Agent: ".uc(substr($RT->{name}, 0, 1)).substr($RT->{name}, 1)."/$RT->{vers} " .
  -                     "CVS/".$RT->{cvsvers}.($RT->{cvsrse} ? "+RSE" : "")."\n";
  +                     "CVS/".$RT->{cvsvers}.($RT->{cvsrse} ? "+RSE" : "")."\n" .
           "Precedence: bulk\n" .
           "Mime-Version: 1.0\n" .
           "Content-Type: text/plain; charset=iso-8859-1\n" . 
  @@ -806,8 +806,8 @@
   
       #   append to or override a file with lines from an array
       if ($op eq 'append' or $op eq 'write') {
  -        my $io = new IO::File ($op eq 'append' ? ">>" : ">").$file
  -            || die "unable to open `$file' for $op";
  +        my $io = new IO::File ($op eq 'append' ? ">>$file" : ">$file")
  +            || die "unable to open `$file' for operation `$op'";
           foreach my $line (@lines) {
               $line =~ s|\n+$||s;
               $io->print($prefix . $line . "\n");

From ossp-cvs-owner@ossp.org  Sat Dec 21 13:23:32 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BBFF6764A8; Sat, 21 Dec 2002 13:23:31 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela shiela.pl
Message-Id: <20021221122331.BBFF6764A8@mail.ossp.org>
Date: Sat, 21 Dec 2002 13:23:31 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Dec-2002 13:23:31
  Branch: HEAD                             Handle: 2002122112233100

  Modified files:
    ossp-pkg/shiela         shiela.pl

  Log:
    fix Environment parsing

  Summary:
    Revision    Changes     Path
    1.25        +5  -2      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/shiela.pl
  ============================================================
  $ cvs diff -u -r1.24 -r1.25 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	21 Dec 2002 11:40:34 -0000	1.24
  +++ ossp-pkg/shiela/shiela.pl	21 Dec 2002 12:23:31 -0000	1.25
  @@ -175,11 +175,11 @@
           }
           return $prog;
       }
  -    $RT->{sendmail} = $CF->{Environment}->{Program}->{cvs} ||
  +    $RT->{sendmail} = $CF->{Environment}->{Program}->{sendmail} ||
                         &find_program("ssmtp") ||
                         &find_program("sendmail") || 
                         die "unable to find `sendmail' program";
  -    $RT->{cvs}      = $CF->{Environment}->{Program}->{sendmail} ||
  +    $RT->{cvs}      = $CF->{Environment}->{Program}->{cvs} ||
                         &find_program("cvs") || 
                         die "unable to find `cvs' program";
       $RT->{diff}     = $CF->{Environment}->{Program}->{diff} ||
  @@ -445,6 +445,9 @@
                       $$n->{$1} = $a->[1];
                   }
               }
  +        }
  +        elsif ($action eq 'CMD' and $cf->[0] eq 'Program') {
  +            $CF->{Environment}->{Program}->{$cf->[1]} = $cf->[2];
           }
           return $cf;
       }

From ossp-cvs-owner@ossp.org  Sat Dec 21 13:38:56 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6F09A763C1; Sat, 21 Dec 2002 13:38:56 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela shiela.pl
Message-Id: <20021221123856.6F09A763C1@mail.ossp.org>
Date: Sat, 21 Dec 2002 13:38:56 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Dec-2002 13:38:56
  Branch: HEAD                             Handle: 2002122112385500

  Modified files:
    ossp-pkg/shiela         shiela.pl

  Log:
    fix handle calculation for removed files again

  Summary:
    Revision    Changes     Path
    1.26        +5  -0      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/shiela.pl
  ============================================================
  $ cvs diff -u -r1.25 -r1.26 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	21 Dec 2002 12:23:31 -0000	1.25
  +++ ossp-pkg/shiela/shiela.pl	21 Dec 2002 12:38:55 -0000	1.26
  @@ -1780,6 +1780,11 @@
           $cvsinfo =~ m|^([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+)$|
                || die "invalid loginfo argument `$cvsinfo' while accumulating information";
           my ($Is, $IV, $Iv, $It, $Io, $Ik, $ID, $Id) = ($1, $2, $3, $4, $5, $6, $7, $8, $9);
  +        if ($Io eq 'R' and $ID eq '0') {
  +            #   CVS does not provide a commit time for removed files
  +            #   so use the current time as a replacement
  +            $ID = time();
  +        }
           my $e = {};
           $e->{oldrev} = $IV;
           $e->{newrev} = $Iv;

From ossp-cvs-owner@ossp.org  Sat Dec 21 18:03:00 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7F8F4763C1; Sat, 21 Dec 2002 18:03:00 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela shiela.pl
Message-Id: <20021221170300.7F8F4763C1@mail.ossp.org>
Date: Sat, 21 Dec 2002 18:03:00 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Dec-2002 18:03:00
  Branch: HEAD                             Handle: 2002122117025900

  Modified files:
    ossp-pkg/shiela         shiela.pl

  Log:
    provide revision number also for removed files

  Summary:
    Revision    Changes     Path
    1.27        +41 -11     ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/shiela.pl
  ============================================================
  $ cvs diff -u -r1.26 -r1.27 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	21 Dec 2002 12:38:55 -0000	1.26
  +++ ossp-pkg/shiela/shiela.pl	21 Dec 2002 17:02:59 -0000	1.27
  @@ -1539,9 +1539,34 @@
           #   fix branch/tag and accumulate information
           $It = 'HEAD' if ($It eq '');
   
  +        #   manually determine next revision number for removed files
  +        #   by fetching the whole revision log and extracting the next
  +        #   number.
  +        if ($Io eq 'R' and $Iv eq 'NONE') {
  +            my $rcslog ='';
  +            if (not $RT->{useserver}) {
  +                my $io = new IO::File "$RT->{cvs} -f -l -Q -n log '$Is'|"
  +                    || die "unable to open CVS command pipe for reading";
  +                $rcslog .= $_ while (<$io>);
  +                $io->close;
  +            }
  +            else {
  +                my $cvs = new CVS ($RT->{cvs}, $RT->{cvsroot});
  +                $cvs->directory($cvsdir);
  +                $cvs->entry($Is);
  +                $cvs->arguments($Is);
  +                $cvs->send("log");
  +                $rcslog = scalar $cvs->result;
  +                $cvs->close;
  +            }
  +            if ($rcslog =~ m|^head:\s+([\d.]+)|m) {
  +                $Iv = $1;
  +            }
  +        }
  +
           #   read file log entry   
           my $rcslog = '';
  -        if ($Io eq 'A' or $Io eq 'M') {
  +        if ($Io eq 'A' or $Io eq 'M' or $Io eq 'R') {
               if (not $RT->{useserver}) {
                   my $io = new IO::File "$RT->{cvs} -f -l -Q -n log -r$Iv '$Is'|"
                       || die "unable to open CVS command pipe for reading";
  @@ -1719,11 +1744,21 @@
                   $d =~ s|^(\+\+\+\s+)${Is_quoted}(\s+)|$1$cvsdir/$Is$2|m;
                   $cvsdiff .=
                       "<Diff $cvsdir/$Is>\n" .
  -                     "Index: $cvsdir/$Is\n" .
  -                     "============================================================\n" .
  -                     "\$ cvs diff -u -r$IV -r$Iv $Is\n" .
  -                     $d .
  -                     "</Diff>\n";
  +                    "Index: $cvsdir/$Is\n" .
  +                    "============================================================\n" .
  +                    "\$ cvs diff -u -r$IV -r$Iv $Is\n" .
  +                    $d .
  +                    "</Diff>\n";
  +            }
  +        }
  +        elsif ($Io eq 'R') {
  +            if ($Ik eq 'b' or -B $Is) { 
  +                #   file seems to be a binary file
  +                #   FIXME
  +            }
  +            else {
  +                #   file seems to be a regular file
  +                #   FIXME
               }
           }
   
  @@ -1780,11 +1815,6 @@
           $cvsinfo =~ m|^([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+)$|
                || die "invalid loginfo argument `$cvsinfo' while accumulating information";
           my ($Is, $IV, $Iv, $It, $Io, $Ik, $ID, $Id) = ($1, $2, $3, $4, $5, $6, $7, $8, $9);
  -        if ($Io eq 'R' and $ID eq '0') {
  -            #   CVS does not provide a commit time for removed files
  -            #   so use the current time as a replacement
  -            $ID = time();
  -        }
           my $e = {};
           $e->{oldrev} = $IV;
           $e->{newrev} = $Iv;

From ossp-cvs-owner@ossp.org  Sun Dec 22 12:06:51 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id ED48B76469; Sun, 22 Dec 2002 12:06:50 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela ChangeLog shiela-install.sh shiela.pl shie...
Message-Id: <20021222110650.ED48B76469@mail.ossp.org>
Date: Sun, 22 Dec 2002 12:06:50 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Dec-2002 12:06:50
  Branch: HEAD                             Handle: 2002122211065000

  Modified files:
    ossp-pkg/shiela         ChangeLog shiela-install.sh shiela.pl shiela.pod

  Log:
    Fully reimplemented the "Content" "details" (the change summary in
    reports). It now supports both textual (via diff(1)) and binary
    (via xdelta(1)) file changes. Additionally each change report part
    is now a small executable shell-script which can passed through
    /bin/sh for reproducing the patch locally. This way, especially
    binary change reports are more meaningsful and consistent with the
    textual change reports.

  Summary:
    Revision    Changes     Path
    1.19        +15 -0      ossp-pkg/shiela/ChangeLog
    1.10        +13 -1      ossp-pkg/shiela/shiela-install.sh
    1.28        +167 -94    ossp-pkg/shiela/shiela.pl
    1.9         +37 -17     ossp-pkg/shiela/shiela.pod
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/ChangeLog
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	21 Dec 2002 11:29:22 -0000	1.18
  +++ ossp-pkg/shiela/ChangeLog	22 Dec 2002 11:06:50 -0000	1.19
  @@ -11,6 +11,18 @@
   
     Changes between 0.9.2 and 0.9.3 (19-Aug-2002 to 21-Dec-2002):
   
  +   *) Fully reimplemented the "Content" "details" (the change summary in
  +      reports). It now supports both textual (via diff(1)) and binary
  +      (via xdelta(1)) file changes. Additionally each change report part
  +      is now a small executable shell-script which can passed through
  +      /bin/sh for reproducing the patch locally. This way, especially
  +      binary change reports are more meaningsful and consistent with the
  +      textual change reports.
  +      INCOMPATIBILITY:
  +      "Details diff:plain" -> "Details patch:plain"
  +      "Details diff:mime" -> "Details patch:mime"
  +      [Ralf S. Engelschall]
  +
      *) Make sure that CVS diff handles are calculated correctly
         if files are added or deleted.
         [Ralf S. Engelschall]
  @@ -22,6 +34,9 @@
      *) Finally really use the "Environment" configuration section to find
         "cvs" and "sendmail" directly and add a "Program" sub-command to it
         for easier extension of the "Environment" section in the future.
  +      INCOMPATIBILITY:
  +      "CVS <path>" -> "Program cvs <path>"
  +      "Sendmail <path>" -> "Program sendmail <path>"
         [Ralf S. Engelschall]
   
      *) Consistently use IO objects instead of the anchient direct
  Index: ossp-pkg/shiela/shiela-install.sh
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 shiela-install.sh
  --- ossp-pkg/shiela/shiela-install.sh	21 Dec 2002 11:00:17 -0000	1.9
  +++ ossp-pkg/shiela/shiela-install.sh	22 Dec 2002 11:06:50 -0000	1.10
  @@ -321,12 +321,24 @@
   fi
   query U tool_diff
   
  +if [ ".$V_tool_xdelta" = . ]; then
  +    V_tool_xdelta="xdelta"
  +    for path in $paths; do
  +        path=`echo $path | sed -e 's;/*$;;'`
  +        if [ $minusx "$path/xdelta" ] && [ ! -d "$path/xdelta" ]; then
  +            V_tool_xdelta="$path/xdelta"
  +            break
  +        fi
  +    done
  +fi
  +query U tool_xdelta
  +
   if [ ".$V_tool_uuencode" = . ]; then
       V_tool_uuencode="uuencode"
       for path in $paths; do
           path=`echo $path | sed -e 's;/*$;;'`
           if [ $minusx "$path/uuencode" ] && [ ! -d "$path/uuencode" ]; then
  -            V_tool_diff="$path/uuencode"
  +            V_tool_uuencode="$path/uuencode"
               break
           fi
       done
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================
  $ cvs diff -u -r1.27 -r1.28 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	21 Dec 2002 17:02:59 -0000	1.27
  +++ ossp-pkg/shiela/shiela.pl	22 Dec 2002 11:06:50 -0000	1.28
  @@ -183,11 +183,14 @@
                         &find_program("cvs") || 
                         die "unable to find `cvs' program";
       $RT->{diff}     = $CF->{Environment}->{Program}->{diff} ||
  -                      &find_program("diff") || 
  -                      die "unable to find `diff' program";
  +                      &find_program("diff") ||
  +                      '';
  +    $RT->{xdelta}   = $CF->{Environment}->{Program}->{xdelta} ||
  +                      &find_program("xdelta") || 
  +                      '';
       $RT->{uuencode} = $CF->{Environment}->{Program}->{uuencode} ||
                         &find_program("uuencode") || 
  -                      die "unable to find `uuencode' program";
  +                      '';
   
       #   pre-calculate a reasonable MIME boundary tag
       my $randtag;
  @@ -1630,98 +1633,162 @@
               }
           }
   
  -        #   determine change diff
  +        #   determine change difference summary
           if ($Io eq 'A') {
  -            #   file was added, so we show the whole contents
  +            ##
  +            ##   ADDED FILE
  +            ##
  +
  +            #   retrieve whole file contents
  +            unlink("$RT->{tmpfile}.all");
  +            my $io = new IO::File ">$RT->{tmpfile}.all"
  +                || die "unable to open temporary file $RT->{tmpfile}.all for writing";
  +            if (not $RT->{useserver}) {
  +                my $cvs = new IO::File "$RT->{cvs} -f -l -Q -n update -p -r$Iv '$Is'|"
  +                    || die "unable to open CVS command pipe for reading";
  +                $io->print($_) while (<$cvs>);
  +                $cvs->close;
  +            }
  +            else {
  +                my $cvs = new CVS ($RT->{cvs}, $RT->{cvsroot});
  +                $cvs->directory($cvsdir);
  +                $cvs->entry($Is);
  +                $cvs->arguments("-p", "-r$Iv", $Is);
  +                $cvs->send("update");
  +                $io->print(scalar $cvs->result);
  +                $cvs->close;
  +            }
  +            $io->close;
  +
               if ($Ik eq 'b' or -B $Is) { 
  -                #   file seems to be a binary file
  -                $cvsdiff .= 
  -                    "<Diff $cvsdir/$Is>\n" .
  -                    "Index: $cvsdir/$Is\n" .
  -                    "============================================================\n" .
  -                    "\$ cvs update -p -r$Iv $Is | uuencode $Is\n";
  -                if (not $RT->{useserver}) {
  -                    my $io = new IO::File "$RT->{cvs} -f -l -Q -n update -p -r$Iv '$Is' | uuencode '$Is' |"
  -                        || die "unable to open CVS command pipe for reading";
  +                #   generate binary change patch script
  +                if ($RT->{xdelta} and $RT->{uuencode}) {
  +                    $cvsdiff .= 
  +                        "<shiela:patch $cvsdir/$Is>\n" .
  +                        "(cd $cvsdir && uudecode <<'@@ .' && \\\n" .
  +                        " xdelta patch $Is.xdelta /dev/null $Is && \\\n" .
  +                        " rm -f $Is.xdelta)\n" .
  +                        "Index: $cvsdir/$Is\n" .
  +                        ("=" x 76) . "\n";
  +                    unlink("$RT->{tmpfile}.null");
  +                    unlink("$RT->{tmpfile}.xdelta");
  +                    my $io = new IO::File ">$RT->{tmpfile}.null"
  +                        || die "unable to open temporary file $RT->{tmpfile}.null for writing";
  +                    $io->close;
  +                    system("$RT->{xdelta} delta $RT->{tmpfile}.null " .
  +                           "$RT->{tmpfile}.all $RT->{tmpfile}.xdelta >/dev/null 2>&1");
  +                    $io = new IO::File "uuencode $RT->{tmpfile}.xdelta $Is.xdelta |"
  +                        || die "unable to open uuencode command pipe for reading";
                       $cvsdiff .= $_ while (<$io>);
                       $io->close;
  +                    $cvsdiff .= "@@ .\n";
  +                    $cvsdiff .= "</shiela:patch>\n";
  +                    unlink("$RT->{tmpfile}.null");
  +                    unlink("$RT->{tmpfile}.xdelta");
                   }
  -                else {
  -                    my $cvs = new CVS ($RT->{cvs}, $RT->{cvsroot});
  -                    $cvs->directory($cvsdir);
  -                    $cvs->entry($Is);
  -                    $cvs->arguments("-p", "-r$Iv", $Is);
  -                    $cvs->send("update");
  -                    $cvsdiff .= scalar $cvs->result;
  -                    $cvs->close;
  -                }
  -                $cvsdiff .= "</Diff>\n";
               }
               else {
  -                #   file seems to be a regular text file
  -                $cvsdiff .= 
  -                    "<Diff $cvsdir/$Is>\n" .
  -                    "Index: $cvsdir/$Is\n" .
  -                    "============================================================\n" .
  -                    "\$ cvs update -p -r$Iv $Is\n";
  -                if (not $RT->{useserver}) {
  -                    my $io = new IO::File "$RT->{cvs} -f -l -Q -n update -p -r$Iv '$Is'|"
  +                #   generate textual change patch script
  +                if ($RT->{diff}) {
  +                    $cvsdiff .= 
  +                        "<shiela:patch $cvsdir/$Is>\n" .
  +                        "patch -p0 <<'@@ .'\n" .
  +                        "Index: $cvsdir/$Is\n" .
  +                        ("=" x 76) . "\n" .
  +                        "\$ cvs diff -u -r0 -r$Iv $Is\n";
  +                    my $diff = '';
  +                    my $io = new IO::File "$RT->{diff} -u /dev/null $RT->{tmpfile}.all|"
                           || die "unable to open CVS command pipe for reading";
  -                    $cvsdiff .= $_ while (<$io>);
  +                    $diff .= $_ while (<$io>);
                       $io->close;
  +                    my $Is_quoted = quotemeta("$RT->{tmpfile}.all");
  +                    $diff =~ s|^(\+\+\+\s+)$Is_quoted|$1$Is|m;
  +                    $cvsdiff .= $diff;
  +                    $cvsdiff .= "@@ .\n";
  +                    $cvsdiff .= "</shiela:patch>\n";
                   }
  -                else {
  -                    my $cvs = new CVS ($RT->{cvs}, $RT->{cvsroot});
  -                    $cvs->directory($cvsdir);
  -                    $cvs->entry($Is);
  -                    $cvs->arguments("-p", "-r$Iv", $Is);
  -                    $cvs->send("update");
  -                    $cvsdiff .= scalar $cvs->result;
  -                    $cvs->close;
  -                }
  -                $cvsdiff .= "</Diff>\n";
               }
  +
  +            #   cleanup
  +            unlink("$RT->{tmpfile}.all");
           }
           elsif ($Io eq 'M') {
  +            ##
  +            ##   MODIFIED FILE
  +            ##
  +
               if ($Ik eq 'b' or -B $Is) { 
  -                #   file seems to be a binary file
  -                $cvsdiff .= 
  -                    "<Diff $cvsdir/$Is>\n" .
  -                    "Index: $cvsdir/$Is\n" .
  -                    "============================================================\n" .
  -                    "\$ cvs update -p -r$IV $Is >$Is.old\n" .
  -                    "\$ cvs update -p -r$Iv $Is >$Is.new\n" .
  -                    "\$ diff -u $Is.old $Is.new\n";
  -                if (not $RT->{useserver}) {
  -                    system("$RT->{cvs} -f -l -Q -n update -p -r$IV '$Is' | $RT->{uuencode} '$Is' >$Is.old");
  -                    system("$RT->{cvs} -f -l -Q -n update -p -r$Iv '$Is' | $RT->{uuencode} '$Is' >$Is.new");
  -                }
  -                else {
  -                    my $cvs = new CVS ($RT->{cvs}, $RT->{cvsroot});
  -                    $cvs->directory($cvsdir);
  -                    $cvs->entry($Is);
  -                    $cvs->arguments("-p", "-r$IV", $Is);
  -                    $cvs->send("update");
  -                    my $data = scalar $cvs->result;
  -                    my $io = new IO::File ">$Is.old" || die "cannot write to $Is.old";
  -                    $io->print($data);
  +                #   generate binary change patch script
  +
  +                if ($RT->{xdelta} and $RT->{uuencode}) {
  +                    #   retrieve whole file contents (old revision)
  +                    unlink("$RT->{tmpfile}.old");
  +                    my $io = new IO::File ">$RT->{tmpfile}.old"
  +                        || die "unable to open temporary file $RT->{tmpfile}.old for writing";
  +                    if (not $RT->{useserver}) {
  +                        my $cvs = new IO::File "$RT->{cvs} -f -l -Q -n update -p -r$IV '$Is'|"
  +                            || die "unable to open CVS command pipe for reading";
  +                        $io->print($_) while (<$cvs>);
  +                        $cvs->close;
  +                    }
  +                    else {
  +                        my $cvs = new CVS ($RT->{cvs}, $RT->{cvsroot});
  +                        $cvs->directory($cvsdir);
  +                        $cvs->entry($Is);
  +                        $cvs->arguments("-p", "-r$IV", $Is);
  +                        $cvs->send("update");
  +                        $io->print(scalar $cvs->result);
  +                        $cvs->close;
  +                    }
                       $io->close;
  -                    $cvs->arguments("-p", "-r$Iv", $Is);
  -                    $cvs->send("update");
  -                    $data = scalar $cvs->result;
  -                    $io = new IO::File ">$Is.new" || die "cannot write to $Is.old";
  -                    $io->print($data);
  +
  +                    #   retrieve whole file contents (new revision)
  +                    unlink("$RT->{tmpfile}.new");
  +                    $io = new IO::File ">$RT->{tmpfile}.new"
  +                        || die "unable to open temporary file $RT->{tmpfile}.new for writing";
  +                    if (not $RT->{useserver}) {
  +                        my $cvs = new IO::File "$RT->{cvs} -f -l -Q -n update -p -r$Iv '$Is'|"
  +                            || die "unable to open CVS command pipe for reading";
  +                        $io->print($_) while (<$cvs>);
  +                        $cvs->close;
  +                    }
  +                    else {
  +                        my $cvs = new CVS ($RT->{cvs}, $RT->{cvsroot});
  +                        $cvs->directory($cvsdir);
  +                        $cvs->entry($Is);
  +                        $cvs->arguments("-p", "-r$Iv", $Is);
  +                        $cvs->send("update");
  +                        $io->print(scalar $cvs->result);
  +                        $cvs->close;
  +                    }
                       $io->close;
  -                    $cvs->close;
  +
  +                    #   generate change patch script
  +                    $cvsdiff .= 
  +                        "<shiela:patch $cvsdir/$Is>\n" .
  +                        "(cd $cvsdir && uudecode <<'@@ .' && \\\n" .
  +                        " mv $Is $Is.orig && xdelta patch $Is.xdelta $Is.orig $Is && \\\n" .
  +                        " rm -f $Is.orig $Is.xdelta)\n" .
  +                        "Index: $cvsdir/$Is\n" .
  +                        ("=" x 76) . "\n";
  +                    unlink("$RT->{tmpfile}.xdelta");
  +                    system("$RT->{xdelta} delta $RT->{tmpfile}.old " .
  +                           "$RT->{tmpfile}.new $RT->{tmpfile}.xdelta >/dev/null 2>&1");
  +                    $io = new IO::File "uuencode $RT->{tmpfile}.xdelta $Is.xdelta |"
  +                        || die "unable to open uuencode command pipe for reading";
  +                    $cvsdiff .= $_ while (<$io>);
  +                    $io->close;
  +                    $cvsdiff .= "@@ .\n";
  +                    $cvsdiff .= "</shiela:patch>\n";
  +                    unlink("$RT->{tmpfile}.xdelta");
  +
  +                    #   cleanup
  +                    unlink("$RT->{tmpfile}.old");
  +                    unlink("$RT->{tmpfile}.new");
                   }
  -                my $io = new IO::File "$RT->{diff} -u $Is.old $Is.new|"
  -                    || die "unable to open diff command pipe for reading";
  -                $cvsdiff .= $_ while (<$io>);
  -                $io->close;
  -                $cvsdiff .= "</Diff>\n";
               }
               else {
  -                #   file was modified, so we show the changed contents only
  +                #   generate textual change patch script
                   my $d = '';
                   if (not $RT->{useserver}) {
                       my $io = new IO::File "$RT->{cvs} -f -l -Q -n diff -u -r$IV -r$Iv '$Is'|"
  @@ -1743,23 +1810,30 @@
                   $d =~ s|^(---\s+)${Is_quoted}(\s+)|$1$cvsdir/$Is$2|m;
                   $d =~ s|^(\+\+\+\s+)${Is_quoted}(\s+)|$1$cvsdir/$Is$2|m;
                   $cvsdiff .=
  -                    "<Diff $cvsdir/$Is>\n" .
  +                    "<shiela:patch $cvsdir/$Is>\n" .
  +                    "patch -p0 <<'@@ .'\n" .
                       "Index: $cvsdir/$Is\n" .
  -                    "============================================================\n" .
  +                    ("=" x 76) . "\n" .
                       "\$ cvs diff -u -r$IV -r$Iv $Is\n" .
                       $d .
  -                    "</Diff>\n";
  +                    "@@ .\n" .
  +                    "</shiela:patch>\n";
               }
           }
           elsif ($Io eq 'R') {
  -            if ($Ik eq 'b' or -B $Is) { 
  -                #   file seems to be a binary file
  -                #   FIXME
  -            }
  -            else {
  -                #   file seems to be a regular file
  -                #   FIXME
  -            }
  +            ##
  +            ##   REMOVED FILE
  +            ##
  +
  +            #   generate binary and textaual change patch script
  +            $cvsdiff .=
  +                "<shiela:patch $cvsdir/$Is>\n" .
  +                "(cat <<'@@ .' >/dev/null && rm -f $cvsdir/$Is)\n" .
  +                "Index: $cvsdir/$Is\n" .
  +                ("=" x 76) . "\n" .
  +                "[NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]\n" .
  +                "@@ .\n" .
  +                "</shiela:patch>\n";
           }
   
           $info = "$cvsdir/$Is,$IV,$Iv,$It,$Io,$Ik,$ID,$Id";
  @@ -1825,7 +1899,7 @@
           $e->{delta}  = $Id;
           $e->{diff} = '';
           my $Is_quoted = quotemeta($Is);
  -        $cvsdiff =~ s|\n<Diff\s+${Is_quoted}>\n(.+?\n)</Diff>|$e->{diff} = $1, ''|se;
  +        $cvsdiff =~ s|\n<shiela:patch\s+${Is_quoted}>\n(.+?\n)</shiela:patch>|$e->{diff} = $1, ''|se;
           $IN->{file}->{$Is} = $e;
           $handle_min = $ID if ($ID ne '' and $ID ne '0' and (not defined($handle_min) or $handle_min > $ID));
           $handle_max = $ID if ($ID ne '' and $ID ne '0' and (not defined($handle_max) or $handle_max < $ID));
  @@ -1897,7 +1971,7 @@
                   my $sm = new Sendmail ($RT, $logurl);
                   $sm->header('Subject', $subject);
                   if (defined($CF->{Logging}->{Report}->{$logtype}->{Details})) {
  -                    if ($CF->{Logging}->{Report}->{$logtype}->{Details} eq 'diff:mime') {
  +                    if ($CF->{Logging}->{Report}->{$logtype}->{Details} eq 'patch:mime') {
                           $sm->header('Content-Type', 
                                       "multipart/mixed; boundary=\"".$RT->{mimeboundary}."\"");
                       }
  @@ -1961,7 +2035,7 @@
   
       my $RP = $CF->{Logging}->{Report}->{$type} || die "No report of type `$type' defined";
       my $prefix = $RP->{Prefix} || '';
  -    my $style = $RP->{Details} || 'diff:plain';
  +    my $style = $RP->{Details} || 'patch:plain';
       my $O = '';
       foreach my $content (@{$RP->{Content}}) {
   
  @@ -2099,7 +2173,7 @@
                       $O .= "$prefix$url\n";
                   }
               }
  -            elsif ($style eq 'diff:plain') {
  +            elsif ($style eq 'patch:plain') {
                   foreach $file (sort(keys(%{$IN->{file}}))) {
                       next if ($IN->{file}->{$file}->{op} eq 'T');
                       my $diff = $IN->{file}->{$file}->{diff};
  @@ -2107,7 +2181,7 @@
                       $O .= $diff;
                   }
               }
  -            elsif ($style eq 'diff:mime') {
  +            elsif ($style eq 'patch:mime') {
                   foreach $file (sort(keys(%{$IN->{file}}))) {
                       next if ($IN->{file}->{$file}->{op} eq 'T');
                       my $diff = $IN->{file}->{$file}->{diff};
  @@ -2131,7 +2205,7 @@
       $O =~ s|\n+$|\n|s;
   
       #   MIME post-processing
  -    if ($style eq 'diff:mime') {
  +    if ($style eq 'patch:mime') {
           $O = "This is a multi-part message in MIME format.\n" .
                "--".$RT->{mimeboundary}."\n" .
                "Content-Type: text/plain; charset=iso-8859-1\n" .
  @@ -2147,4 +2221,3 @@
       return $O;
   }
   
  -##EOF##
  Index: ossp-pkg/shiela/shiela.pod
  ============================================================
  $ cvs diff -u -r1.8 -r1.9 shiela.pod
  --- ossp-pkg/shiela/shiela.pod	21 Dec 2002 11:00:17 -0000	1.8
  +++ ossp-pkg/shiela/shiela.pod	22 Dec 2002 11:06:50 -0000	1.9
  @@ -91,6 +91,7 @@
        [Program sendmail <path>;]
        [Program cvs <path>;]
        [Program diff <path>;]
  +     [Program xdelta <path>;]
        [Program uuencode <path>;]
    };
   
  @@ -102,29 +103,47 @@
   
   This overrides the path to the F<sendmail> executable. Per default
   B<OSSP shiela> determines this automatically through the inherited C<$PATH>
  -variable. Use this either if you have Sendmail not in C<$PATH> or if you
  -have multiple Sendmail instances installed.
  +variable. Use this either if you have B<Sendmail> not in C<$PATH> or if you
  +have multiple B<Sendmail> instances installed. The F<sendmail> executable
  +is mandatory for the operation of B<OSSP shiela>.
   
   =item B<Program cvs E<lt>pathE<gt>;>
   
   This overrides the path to the F<cvs> executable. Per default B<OSSP shiela>
   determines this automatically through the inherited C<$PATH> variable.
  -Use this either if you have CVS not in C<$PATH> or if you have multiple
  -CVS instances installed.
  +Use this either if you have B<CVS> not in C<$PATH> or if you have multiple
  +B<CVS> instances installed. The F<cvs> executable is mandatory for the
  +operation of B<OSSP shiela>.
   
   =item B<Program diff E<lt>pathE<gt>;>
   
   This overrides the path to the F<diff> executable. Per default B<OSSP
   shiela> determines this automatically through the inherited C<$PATH>
  -variable. Use this either if you have GNU Diffutils not in C<$PATH> or
  -if you have multiple GNU Diffutils instances installed.
  +variable. Use this either if you have B<GNU Diffutils> not in C<$PATH>
  +or if you have multiple B<GNU Diffutils> instances installed. The
  +F<diff> executable is required for the operation of B<OSSP shiela>
  +if change summary information on text files is used in reports (see
  +C<details> in C<Content>).
  +
  +=item B<Program xdelta E<lt>pathE<gt>;>
  +
  +This overrides the path to the F<xdelta> executable. Per default B<OSSP
  +shiela> determines this automatically through the inherited C<$PATH>
  +variable. Use this either if you have B<XDelta> not in C<$PATH> or if
  +you have multiple B<XDelta> instances installed. The F<xdelta>
  +executable is required for the operation of B<OSSP shiela> if change
  +summary information on binary files is used in reports (see C<summary>
  +in C<Content>).
   
   =item B<Program uuencode E<lt>pathE<gt>;>
   
   This overrides the path to the F<uuencode> executable. Per default
   B<OSSP shiela> determines this automatically through the inherited
  -C<$PATH> variable. Use this either if you have GNU Sharutils not in
  -C<$PATH> or if you have multiple GNU Sharutils instances installed.
  +C<$PATH> variable. Use this either if you have B<GNU Sharutils> not in
  +C<$PATH> or if you have multiple B<GNU Sharutils> instances installed.
  +The F<uuencode> executable is required for the operation of B<OSSP
  +shiela> if change summary information on binary files is used in reports
  +(see C<summary> in C<Content>).
   
   =back
   
  @@ -361,11 +380,11 @@
   =item B<Details E<lt>typeE<gt>:E<lt>argE<gt>;>
   
   This configures how the details (see B<Content> directive) actually look.  The
  -following type/argument combinations are currently supported: "C<diff:plain>"
  +following type/argument combinations are currently supported: "C<patch:plain>"
   (the default) which produces a long details text consisting of concatenated
  -"C<cvs diff>" outputs; "C<diff:mime>" which produces the same contents as
  -"C<diff:plain>", but instead of just concatenating the individual difference
  -texts, it encapsulates them into MIME attachments (which is useful when the
  +patching shell commands for reproducing the change; "C<patch:mime>" which produces the same contents as
  +"C<patch:plain>", but instead of just concatenating the individual scripts,
  +it encapsulates them into MIME attachments (which is useful when the
   E<lt>targetE<gt> of a B<Log> directive is an Email address only); and
   "C<url:>I<url>" which produces just an URL per modified file by expanding
   "C<%s>" (the file path relative to C<$CVSROOT>), "C<%V>" (the old revision)
  @@ -392,6 +411,7 @@
        Program sendmail /e/foo/sw/bin/sendmail;
        Program cvs      /e/foo/sw/bin/cvs;
        Program diff     /e/foo/sw/bin/diff;
  +     Program xdelta   /e/foo/sw/bin/xdelta;
        Program uuencode /e/foo/sw/bin/uuencode;
    };
   
  @@ -427,12 +447,12 @@
                Acl modules *:core *:devel;
                Acl *       *:core;
                Log passwd  none;
  -             Log modules mail.diff:foo-cvs@foo.dom file:CVSROOT/commit.log;
  -             Log *       mail.diff:foo-core@foo.dom;
  +             Log modules mail.patch:foo-cvs@foo.dom file:CVSROOT/commit.log;
  +             Log *       mail.patch:foo-core@foo.dom;
            };
            Module foo-adm "FOO Administration" {
                Acl * *:core;
  -             Log * mail.diff:foo-core@foo.dom file:CVSROOT/commit.log;
  +             Log * mail.patch:foo-core@foo.dom file:CVSROOT/commit.log;
            };
            Module foo-src "FOO Source" {
                Acl *:VENDOR  foo;
  @@ -447,10 +467,10 @@
    #   define the logging details
    Logging {
        Reports {
  -         Report mail.diff {
  +         Report mail.patch {
                Prefix "  ";
                Content title rule header files log summary rule details;
  -             Details diff:mime;
  +             Details patch:mime;
            };
            Report mail.url {
                Prefix "  ";

From ossp-cvs-owner@ossp.org  Sun Dec 22 12:10:44 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C790876469; Sun, 22 Dec 2002 12:10:43 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela shiela-install.pod shiela-install.sh shiel...
Message-Id: <20021222111043.C790876469@mail.ossp.org>
Date: Sun, 22 Dec 2002 12:10:43 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Dec-2002 12:10:43
  Branch: HEAD                             Handle: 2002122211104201

  Modified files:
    ossp-pkg/shiela         shiela-install.pod shiela-install.sh shiela.pl
                            shiela.pod

  Log:
    remove trailing whitespaces

  Summary:
    Revision    Changes     Path
    1.10        +5  -5      ossp-pkg/shiela/shiela-install.pod
    1.11        +16 -16     ossp-pkg/shiela/shiela-install.sh
    1.29        +47 -47     ossp-pkg/shiela/shiela.pl
    1.10        +13 -13     ossp-pkg/shiela/shiela.pod
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/shiela-install.pod
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 shiela-install.pod
  --- ossp-pkg/shiela/shiela-install.pod	21 Dec 2002 11:02:01 -0000	1.9
  +++ ossp-pkg/shiela/shiela-install.pod	22 Dec 2002 11:10:42 -0000	1.10
  @@ -8,8 +8,8 @@
   ##  which can be found at http://www.ossp.org/pkg/tool/shiela/.
   ##
   ##  This program is free software; you can redistribute it and/or
  -##  modify it under the terms of the GNU General Public  License 
  -##  as published by the Free Software Foundation; either version 
  +##  modify it under the terms of the GNU General Public  License
  +##  as published by the Free Software Foundation; either version
   ##  2.0 of the License, or (at your option) any later version.
   ##
   ##  This program is distributed in the hope that it will be useful,
  @@ -17,7 +17,7 @@
   ##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
   ##  General Public License for more details.
   ##
  -##  You should have received a copy of the GNU General Public License 
  +##  You should have received a copy of the GNU General Public License
   ##  along with this file; if not, write to the Free Software
   ##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
   ##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  @@ -25,7 +25,7 @@
   ##  shiela-install.pod: install manual page (syntax: POD)
   ##
   
  -=pod 
  +=pod
   
   =head1 NAME
   
  @@ -129,7 +129,7 @@
   For convinience reasons one can alternatively use the interactive
   B<shiela-install> utility, which perform the above steps automatically
   and especially creates initial C<shiela.cfg> and C<shiela.msg> files.
  -Just run C<shiela-install> and answer the questions. 
  +Just run C<shiela-install> and answer the questions.
   
   For convinience reasons (while testing) one can also override the
   default value of a question by using C<variable=value> on the
  Index: ossp-pkg/shiela/shiela-install.sh
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 shiela-install.sh
  --- ossp-pkg/shiela/shiela-install.sh	22 Dec 2002 11:06:50 -0000	1.10
  +++ ossp-pkg/shiela/shiela-install.sh	22 Dec 2002 11:10:42 -0000	1.11
  @@ -9,8 +9,8 @@
   ##  which can be found at http://www.ossp.org/pkg/tool/shiela/.
   ##
   ##  This program is free software; you can redistribute it and/or
  -##  modify it under the terms of the GNU General Public  License 
  -##  as published by the Free Software Foundation; either version 
  +##  modify it under the terms of the GNU General Public  License
  +##  as published by the Free Software Foundation; either version
   ##  2.0 of the License, or (at your option) any later version.
   ##
   ##  This program is distributed in the hope that it will be useful,
  @@ -18,7 +18,7 @@
   ##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
   ##  General Public License for more details.
   ##
  -##  You should have received a copy of the GNU General Public License 
  +##  You should have received a copy of the GNU General Public License
   ##  along with this file; if not, write to the Free Software
   ##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
   ##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  @@ -366,17 +366,17 @@
       CVS_VENDOR=CVSHome.org
   fi
   case $CVS_VERSION in
  -   1.10.[789]* | 1.10.1[0123456789]* | 1.11.* ) 
  +   1.10.[789]* | 1.10.1[0123456789]* | 1.11.* )
          ;;
  -   * ) 
  +   * )
          echo "ERROR: CVS has to be at least version 1.10.7"
  -       exit 1 
  +       exit 1
          ;;
   esac
   case $CVS_VENDOR in
  -    RSE ) 
  +    RSE )
          ;;
  -    * ) 
  +    * )
          echo "WARNING: You are using a stock CVS version from $CVS_VENDOR!"
          echo "         This means that not all OSSP shiela functionality is available"
          echo "         for you. We recommend to use the OpenPKG CVS version with"
  @@ -414,8 +414,8 @@
   ##  which can be found at http://www.ossp.org/pkg/tool/shiela/.
   ##
   ##  This program is free software; you can redistribute it and/or
  -##  modify it under the terms of the GNU General Public  License 
  -##  as published by the Free Software Foundation; either version 
  +##  modify it under the terms of the GNU General Public  License
  +##  as published by the Free Software Foundation; either version
   ##  2.0 of the License, or (at your option) any later version.
   ##
   ##  This program is distributed in the hope that it will be useful,
  @@ -423,7 +423,7 @@
   ##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
   ##  General Public License for more details.
   ##
  -##  You should have received a copy of the GNU General Public License 
  +##  You should have received a copy of the GNU General Public License
   ##  along with this file; if not, write to the Free Software
   ##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
   ##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  @@ -453,7 +453,7 @@
   
   Repository {
       Tag     ${V_repos_tag};
  -    Name    "${V_repos_name}"; 
  +    Name    "${V_repos_name}";
       Contact ${V_repos_contact};
       Home    ${V_repos_home};
       Host    ${V_repos_host};
  @@ -499,8 +499,8 @@
   echo "${term_bold}SHIELA CONFIGURATION${term_norm}"
   cat <<EOT
   
  -Initial "shiela.cfg" and "shiela.msg" files were generated for you. 
  -Before OSSP shiela is installed and activated with these configuration files, 
  +Initial "shiela.cfg" and "shiela.msg" files were generated for you.
  +Before OSSP shiela is installed and activated with these configuration files,
   you have the chance to adjust them in your editor.
   
   EOT
  @@ -559,13 +559,13 @@
   }
   
   run rm -rf CVSROOT
  -run cvs -Q -q -d${V_repos_path} co CVSROOT 
  +run cvs -Q -q -d${V_repos_path} co CVSROOT
   run cd CVSROOT
   
   if [ ".$V_shiela_local" = .yes ]; then
       cvs_file tst shiela
       run "cp $V_tool_shiela ."
  -    run chmod 755 shiela 
  +    run chmod 755 shiela
       cvs_file add shiela
       V_tool_shiela="\$CVSROOT/CVSROOT/shiela"
   fi
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================
  $ cvs diff -u -r1.28 -r1.29 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	22 Dec 2002 11:06:50 -0000	1.28
  +++ ossp-pkg/shiela/shiela.pl	22 Dec 2002 11:10:42 -0000	1.29
  @@ -9,8 +9,8 @@
   ##  which can be found at http://www.ossp.org/pkg/tool/shiela/.
   ##
   ##  This program is free software; you can redistribute it and/or
  -##  modify it under the terms of the GNU General Public  License 
  -##  as published by the Free Software Foundation; either version 
  +##  modify it under the terms of the GNU General Public  License
  +##  as published by the Free Software Foundation; either version
   ##  2.0 of the License, or (at your option) any later version.
   ##
   ##  This program is distributed in the hope that it will be useful,
  @@ -18,7 +18,7 @@
   ##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
   ##  General Public License for more details.
   ##
  -##  You should have received a copy of the GNU General Public License 
  +##  You should have received a copy of the GNU General Public License
   ##  along with this file; if not, write to the Free Software
   ##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
   ##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  @@ -105,7 +105,7 @@
   ##  _________________________________________________________________
   ##
   ##  Run-time information determination.
  -##  
  +##
   ##  This is a two-stage process, because we need parts of the
   ##  information for parsing the configuration, but OTOH we need the
   ##  configuration for determining other information. To simply solve
  @@ -118,7 +118,7 @@
       my ($program, $version) = @_;
       my $RT = {};
   
  -    #   program version and name 
  +    #   program version and name
       $RT->{vers} = $version;
       $RT->{name} = ($program =~ m|^.*?([^/]+?)(?:\.[^/.]+)?$|)[0];
   
  @@ -177,19 +177,19 @@
       }
       $RT->{sendmail} = $CF->{Environment}->{Program}->{sendmail} ||
                         &find_program("ssmtp") ||
  -                      &find_program("sendmail") || 
  +                      &find_program("sendmail") ||
                         die "unable to find `sendmail' program";
       $RT->{cvs}      = $CF->{Environment}->{Program}->{cvs} ||
  -                      &find_program("cvs") || 
  +                      &find_program("cvs") ||
                         die "unable to find `cvs' program";
       $RT->{diff}     = $CF->{Environment}->{Program}->{diff} ||
                         &find_program("diff") ||
                         '';
       $RT->{xdelta}   = $CF->{Environment}->{Program}->{xdelta} ||
  -                      &find_program("xdelta") || 
  +                      &find_program("xdelta") ||
                         '';
       $RT->{uuencode} = $CF->{Environment}->{Program}->{uuencode} ||
  -                      &find_program("uuencode") || 
  +                      &find_program("uuencode") ||
                         '';
   
       #   pre-calculate a reasonable MIME boundary tag
  @@ -222,7 +222,7 @@
   ##
   ##  C-style configuration syntax parsing.
   ##
  -##  <config>    ::= <directive> 
  +##  <config>    ::= <directive>
   ##                | <config> <directive>
   ##  <directive> ::= <name> ';'
   ##                | <name> <args> ';'
  @@ -298,7 +298,7 @@
                       $t = $';
                   }
                   elsif ($t =~ m|^\s+|s) {
  -                    push(@{$A}, $a) if ($a ne ''); 
  +                    push(@{$A}, $a) if ($a ne '');
                       $a = '';
                       $t = $';
                   }
  @@ -402,7 +402,7 @@
           if ($action eq 'CMD' and $cf->[0] =~ m/(Project|Repository|Logging)/) {
               my $a;
               foreach $a (@{$cf->[1]}) {
  -                $CF->{$1}->{$a->[0]} = $a->[1] 
  +                $CF->{$1}->{$a->[0]} = $a->[1]
                       if ($a->[0] ne 'Users' and
                           $a->[0] ne 'Groups' and
                           $a->[0] ne 'Modules' and
  @@ -510,7 +510,7 @@
       #   prepare the pattern
       if ($pat =~ m|^m(.)(.+)\1$| and $2 !~ m|$1|) {
           #   pattern is a regular expression,
  -        #   so just make sure it is anchored 
  +        #   so just make sure it is anchored
           $pat =~ s|^([^\^])|^$1|;
           $pat =~ s|([^\$])$|$1\$|;
       }
  @@ -539,7 +539,7 @@
   
   ##  _________________________________________________________________
   ##
  -##  CVS server communication. 
  +##  CVS server communication.
   ##
   ##  We use this instead of calling the regular CVS client commands
   ##  because we not always have a working directory available (which is
  @@ -549,7 +549,7 @@
   ##  process and act as we would be a regular CVS client. For convinience
   ##  reasons, the communication is encapsulated in a "CVS" class object.
   ##  _________________________________________________________________
  -## 
  +##
   
   package CVS;
   
  @@ -561,7 +561,7 @@
       my $cvsroot = shift || $ENV{CVSROOT} || die "unknown CVSROOT";
       my $trace = shift || 0;
   
  -    #   spawn a CVS server process and establish a 
  +    #   spawn a CVS server process and establish a
       #   bidirectional communication path to it.
       my $cvs = {};
       $cvs->{cvsroot} = $cvsroot;
  @@ -622,7 +622,7 @@
       $data .= "\n" if ($data !~ m|\n$|s);
       $cvs->{wfd}->print($data);
       if ($cvs->{trace}) {
  -        $data =~ s|^|cvs server: -> |mg; 
  +        $data =~ s|^|cvs server: -> |mg;
           print STDERR $data;
       }
   }
  @@ -731,14 +731,14 @@
       $sm->{fd} = new IO::Handle;
       open($sm->{fd}, "|$RT->{sendmail} -oi -oem $toaddr");
       print "sendmail: spawned \"$RT->{sendmail} -oi -oem $toaddr\"\n" if ($sm->{trace});
  -    $sm->{header} = 
  +    $sm->{header} =
           "From: \"".$RT->{username}."\" <".$RT->{usermail}.">\n" .
           "To: $toaddr\n" .
           "User-Agent: ".uc(substr($RT->{name}, 0, 1)).substr($RT->{name}, 1)."/$RT->{vers} " .
                        "CVS/".$RT->{cvsvers}.($RT->{cvsrse} ? "+RSE" : "")."\n" .
           "Precedence: bulk\n" .
           "Mime-Version: 1.0\n" .
  -        "Content-Type: text/plain; charset=iso-8859-1\n" . 
  +        "Content-Type: text/plain; charset=iso-8859-1\n" .
           "Content-Transfer-Encoding: 8bit\n";
       $sm->{body} = '';
       return $sm;
  @@ -892,7 +892,7 @@
       my @groups = split(/,/, $RT->{usergroups});
       my $file;
       foreach $file (@files) {
  -        $file =~ m|^([^/]+)/(.*):([^:]+)$| 
  +        $file =~ m|^([^/]+)/(.*):([^:]+)$|
               || die "invalid file specification `$file' for access control";
           my ($d, $f, $t) = ($1, $2, $3);
           my $allow = 0;
  @@ -924,7 +924,7 @@
                               }
                               if (   (    not $not
                                       and ($u eq '*' or $u eq $user)
  -                                    and ($g eq '*' or grep(m/^$g$/, @groups))) 
  +                                    and ($g eq '*' or grep(m/^$g$/, @groups)))
                                   or (    $not
                                       and ($u ne '*' and $u ne $user)
                                       and ($g ne '*' and not grep(m/^$g$/, @groups)))) {
  @@ -1005,7 +1005,7 @@
       my $cvsdirphysical = Cwd::realpath($RT->{cvsroot});
       $cvsdir =~ s|^$cvsdirphysical/?||;
   
  -    #   provide access control 
  +    #   provide access control
       my @paths = ();
       foreach my $cvsfile (keys(%cvsfiles)) {
           push(@paths, "$cvsdir/$cvsfile:*");
  @@ -1013,7 +1013,7 @@
       my @denyfiles = &do_access_control($PA, $RT, $CF, @paths);
       if ($#denyfiles > -1) {
           #   inform user
  -        print "cvs tag: Access Denied - Insufficient Karma!\n"; 
  +        print "cvs tag: Access Denied - Insufficient Karma!\n";
           print "cvs tag: Tagging access for the following file(s) was denied:\n";
           foreach my $file (@denyfiles) {
               print "cvs tag: `$file'\n";
  @@ -1062,7 +1062,7 @@
       my ($cvsdir, @cvsfiles) = @{$PA->{ARG}};
       $cvsdir =~ s|^$RT->{cvsroot}/?||;
   
  -    #   provide access control 
  +    #   provide access control
       my @paths = ();
       foreach my $cvsfile (@cvsfiles) {
           push(@paths, "$cvsdir/$cvsfile:*");
  @@ -1070,7 +1070,7 @@
       my @denyfiles = &do_access_control($PA, $RT, $CF, @paths);
       if ($#denyfiles > -1) {
           #   inform user
  -        print "cvs admin: Access Denied - Insufficient Karma!\n"; 
  +        print "cvs admin: Access Denied - Insufficient Karma!\n";
           print "cvs admin: Admin access for the following file(s) was denied:\n";
           foreach my $file (@denyfiles) {
               print "cvs admin: `$file'\n";
  @@ -1118,7 +1118,7 @@
       my ($cvsbranch, $cvsdir, @cvsfiles) = @{$PA->{ARG}};
       $cvsdir =~ s|^$RT->{cvsroot}/?||;
   
  -    #   provide access control 
  +    #   provide access control
       my @paths = ();
       foreach my $cvsfile (@cvsfiles) {
           push(@paths, "$cvsdir/$cvsfile:$cvsbranch");
  @@ -1126,7 +1126,7 @@
       my @denyfiles = &do_access_control($PA, $RT, $CF, @paths);
       if ($#denyfiles > -1) {
           #   inform user
  -        print "cvs import: Access Denied - Insufficient Karma!\n"; 
  +        print "cvs import: Access Denied - Insufficient Karma!\n";
           print "cvs import: Import access for the following files was denied:\n";
           foreach my $file (@denyfiles) {
               print "cvs import: `$file'\n";
  @@ -1216,7 +1216,7 @@
       }
       @cvsfiles = @newfiles;
   
  -    #   provide access control 
  +    #   provide access control
       my @paths = ();
       foreach my $cvsfile (@cvsfiles) {
           push(@paths, "$cvsdir/$cvsfile");
  @@ -1224,7 +1224,7 @@
       my @denyfiles = &do_access_control($PA, $RT, $CF, @paths);
       if ($#denyfiles > -1) {
           #   inform user
  -        print "cvs commit: Access Denied - Insufficient Karma!\n"; 
  +        print "cvs commit: Access Denied - Insufficient Karma!\n";
           print "cvs commit: Commit access for the following file(s) was denied:\n";
           foreach my $file (@denyfiles) {
               print "cvs commit: `$file'\n";
  @@ -1297,7 +1297,7 @@
       $io->close;
   
       #   nuke possibly existing editor backup files
  -    unlink("${logfile}~");    
  +    unlink("${logfile}~");
       unlink("${logfile}.bak");
   
       return $rv;
  @@ -1330,7 +1330,7 @@
       #   determine whether we are the last call
       my $islastcall = ($RT->{cvsop} eq 'import' ? 1 : 0);
       if (-f "$RT->{tmpfile}.lastdir") {
  -        my ($lastdir) = &do_file('read', "$RT->{tmpfile}.lastdir", ''); 
  +        my ($lastdir) = &do_file('read', "$RT->{tmpfile}.lastdir", '');
           $islastcall = 1 if ($lastdir eq $cvsdir);
       }
   
  @@ -1364,7 +1364,7 @@
   #   collect the information
   sub hook_loginfo_collect {
       my ($PA, $RT, $CF) = @_;
  -    
  +
       #   take the arguments
       my ($cvsdir, @cvsinfo) = split(/\s+/, $PA->{ARG}->[0]);
   
  @@ -1503,7 +1503,7 @@
               if ($line =~ m/^Modified Files/) { $state = 'M'; next; }
               if ($line =~ m/^Removed Files/)  { $state = 'R'; next; }
               if ($line =~ m/^Log Message/)    { $state = '-'; next; }
  -            
  +
               if ($state =~ m/^[AMR]$/) {
                   my $file;
                   foreach $file (split(/\s+/, $line)) {
  @@ -1567,7 +1567,7 @@
               }
           }
   
  -        #   read file log entry   
  +        #   read file log entry
           my $rcslog = '';
           if ($Io eq 'A' or $Io eq 'M' or $Io eq 'R') {
               if (not $RT->{useserver}) {
  @@ -1602,7 +1602,7 @@
   
           #   determine change delta
           my $Id = '+0/-0';
  -        if ($Ik eq 'b' or -B $Is) { 
  +        if ($Ik eq 'b' or -B $Is) {
               $Id = 'BLOB';
           }
           else {
  @@ -1660,10 +1660,10 @@
               }
               $io->close;
   
  -            if ($Ik eq 'b' or -B $Is) { 
  +            if ($Ik eq 'b' or -B $Is) {
                   #   generate binary change patch script
                   if ($RT->{xdelta} and $RT->{uuencode}) {
  -                    $cvsdiff .= 
  +                    $cvsdiff .=
                           "<shiela:patch $cvsdir/$Is>\n" .
                           "(cd $cvsdir && uudecode <<'@@ .' && \\\n" .
                           " xdelta patch $Is.xdelta /dev/null $Is && \\\n" .
  @@ -1690,7 +1690,7 @@
               else {
                   #   generate textual change patch script
                   if ($RT->{diff}) {
  -                    $cvsdiff .= 
  +                    $cvsdiff .=
                           "<shiela:patch $cvsdir/$Is>\n" .
                           "patch -p0 <<'@@ .'\n" .
                           "Index: $cvsdir/$Is\n" .
  @@ -1717,7 +1717,7 @@
               ##   MODIFIED FILE
               ##
   
  -            if ($Ik eq 'b' or -B $Is) { 
  +            if ($Ik eq 'b' or -B $Is) {
                   #   generate binary change patch script
   
                   if ($RT->{xdelta} and $RT->{uuencode}) {
  @@ -1764,7 +1764,7 @@
                       $io->close;
   
                       #   generate change patch script
  -                    $cvsdiff .= 
  +                    $cvsdiff .=
                           "<shiela:patch $cvsdir/$Is>\n" .
                           "(cd $cvsdir && uudecode <<'@@ .' && \\\n" .
                           " mv $Is $Is.orig && xdelta patch $Is.xdelta $Is.orig $Is && \\\n" .
  @@ -1908,7 +1908,7 @@
       if (defined($handle_min) and defined($handle_max)) {
           my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($handle_min);
           $IN->{handle} = sprintf("%04d%02d%02d%02d%02d%02d%02d",
  -                                1900+$year, $mon+1, $mday, $hour, $min, $sec, 
  +                                1900+$year, $mon+1, $mday, $hour, $min, $sec,
                                   $handle_max - $handle_min);
       }
       return $IN;
  @@ -1972,7 +1972,7 @@
                   $sm->header('Subject', $subject);
                   if (defined($CF->{Logging}->{Report}->{$logtype}->{Details})) {
                       if ($CF->{Logging}->{Report}->{$logtype}->{Details} eq 'patch:mime') {
  -                        $sm->header('Content-Type', 
  +                        $sm->header('Content-Type',
                                       "multipart/mixed; boundary=\"".$RT->{mimeboundary}."\"");
                       }
                   }
  @@ -1996,10 +1996,10 @@
   sub produce_log_message {
       my ($PA, $RT, $CF, $IN, $type, @files) = @_;
   
  -    #   
  +    #
       #   Parse out more details.
       #
  -    my $cvslist = {}; 
  +    my $cvslist = {};
       my %cvsmodules = ();
       my %cvsbranches = ();
       my $file;
  @@ -2064,7 +2064,7 @@
                   $prefix . sprintf("%-40s %s\n", "Module: ".$IN->{cvsmodule},          "Date:   ".$date) .
                   $prefix . sprintf("%-40s %s\n", "Branch: ".$IN->{cvsbranch},          "Handle: ".$IN->{handle});
           }
  -        
  +
           #   the file list
           elsif ($content eq 'files') {
               $O .= "\n";
  @@ -2147,13 +2147,13 @@
               $O .= $prefix."  Revision    Changes     Path\n";
               foreach $file (sort(keys(%{$IN->{file}}))) {
                   my ($op, $rev, $delta) = ($IN->{file}->{$file}->{op},
  -                                          $IN->{file}->{$file}->{newrev}, 
  +                                          $IN->{file}->{$file}->{newrev},
                                             $IN->{file}->{$file}->{delta});
                   next if ($op eq 'T');
                   if ($delta =~ m|^(.+)/(.+)$|) {
                       $delta = sprintf("%-3s %-3s", $1, $2);
                   }
  -                $O .= $prefix.sprintf("  %-12s%-12s%s\n", $rev, $delta, $file);
  +                $O .= $prefix . sprintf("  %-12s%-12s%s\n", $rev, $delta, $file);
               }
           }
   
  Index: ossp-pkg/shiela/shiela.pod
  ============================================================
  $ cvs diff -u -r1.9 -r1.10 shiela.pod
  --- ossp-pkg/shiela/shiela.pod	22 Dec 2002 11:06:50 -0000	1.9
  +++ ossp-pkg/shiela/shiela.pod	22 Dec 2002 11:10:43 -0000	1.10
  @@ -8,8 +8,8 @@
   ##  which can be found at http://www.ossp.org/pkg/tool/shiela/.
   ##
   ##  This program is free software; you can redistribute it and/or
  -##  modify it under the terms of the GNU General Public  License 
  -##  as published by the Free Software Foundation; either version 
  +##  modify it under the terms of the GNU General Public  License
  +##  as published by the Free Software Foundation; either version
   ##  2.0 of the License, or (at your option) any later version.
   ##
   ##  This program is distributed in the hope that it will be useful,
  @@ -17,7 +17,7 @@
   ##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
   ##  General Public License for more details.
   ##
  -##  You should have received a copy of the GNU General Public License 
  +##  You should have received a copy of the GNU General Public License
   ##  along with this file; if not, write to the Free Software
   ##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
   ##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  @@ -25,7 +25,7 @@
   ##  shiela.pod: manual page (syntax: POD)
   ##
   
  -=pod 
  +=pod
   
   =head1 NAME
   
  @@ -274,7 +274,7 @@
   
   =item B<Path E<lt>pathE<gt>;>
   
  -The filesystem path on the repository host under which the repository resides.  
  +The filesystem path on the repository host under which the repository resides.
   This usually is equal to the C<$CVSROOT> variable.
   Example: C<Path /e/foo/cvs;>
   
  @@ -299,7 +299,7 @@
   This defines an access control list for
   C<$CVSROOT/>E<lt>modulepathE<gt>/E<lt>filepathE<gt>.  It ensures that a
   repository operation to this path can only be done by the specified
  -users/groups. 
  +users/groups.
   
   The argument E<lt>filepathE<gt> can be either a full path (e.g.
   "C<subdir1/subdir2/file>"), or a shell wildcard pattern (e.g.
  @@ -328,7 +328,7 @@
   The occurance of the logging message depends how the specified report is
   defined (by C<Report>). After it is produced it is send to E<lt>targetE<gt>
   which can be either an Email address of the form I<user>C<@>I<domain> or a
  -filesystem path. 
  +filesystem path.
   
   Example: C<Log * mail:foo-cvs@foo.dom file:CVSROOT/commit.log;>
   
  @@ -342,7 +342,7 @@
    Logging {
        Reports {
            Report <reportid> {
  -             Content <contentid> [...]; 
  +             Content <contentid> [...];
                [Details <type>:<arg>;]
                [Prefix <string>;]
            };
  @@ -364,10 +364,10 @@
   
   This defines the report contents and contents order. That is the contents is
   created top to bottom by concatenating one or more content blocks which are
  -specified by one or more E<lt>contentidE<gt> arguments. 
  +specified by one or more E<lt>contentidE<gt> arguments.
   
  -The available content blocks are: 
  -C<title>: a two line title header, 
  +The available content blocks are:
  +C<title>: a two line title header,
   C<rule>: a horizontal rule,
   C<header>: a four line repository and user summary header,
   C<files>: a table of added/modified/removed/touched files,
  @@ -394,7 +394,7 @@
   
   =item B<Prefix E<lt>stringE<gt>;>
   
  -This configures that every line of the generated report message is 
  +This configures that every line of the generated report message is
   prefixed with E<lt>stringE<gt>.
   
   Example: C<Prefix "  ";>
  @@ -518,7 +518,7 @@
   
   =item B<http://www.ossp.org/pkg/tool/shiela/>
   
  -Here you can find the official B<OSSP shiela> homepage. 
  +Here you can find the official B<OSSP shiela> homepage.
   
   =item B<http://cvs.ossp.org/pkg/tool/shiela/>
   

From ossp-cvs-owner@ossp.org  Sun Dec 22 12:19:49 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F075C764A2; Sun, 22 Dec 2002 12:19:48 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela shiela.pl
Message-Id: <20021222111948.F075C764A2@mail.ossp.org>
Date: Sun, 22 Dec 2002 12:19:48 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Dec-2002 12:19:48
  Branch: HEAD                             Handle: 2002122211194800

  Modified files:
    ossp-pkg/shiela         shiela.pl

  Log:
    talk about changes, not commits

  Summary:
    Revision    Changes     Path
    1.30        +1  -1      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/shiela.pl
  ============================================================
  $ cvs diff -u -r1.29 -r1.30 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	22 Dec 2002 11:10:42 -0000	1.29
  +++ ossp-pkg/shiela/shiela.pl	22 Dec 2002 11:19:48 -0000	1.30
  @@ -2210,7 +2210,7 @@
                "--".$RT->{mimeboundary}."\n" .
                "Content-Type: text/plain; charset=iso-8859-1\n" .
                "Content-Transfer-Encoding: 8bit\n" .
  -             "Content-Description: commit summary\n" .
  +             "Content-Description: change summary\n" .
                "Content-Disposition: inline\n" .
                "\n" .
                $O .

From ossp-cvs-owner@ossp.org  Sun Dec 22 16:01:19 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B2E16764A8; Sun, 22 Dec 2002 16:01:18 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela README VERSION devtool.conf shiela-install...
Message-Id: <20021222150118.B2E16764A8@mail.ossp.org>
Date: Sun, 22 Dec 2002 16:01:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Dec-2002 16:01:18
  Branch: HEAD                             Handle: 2002122215011700

  Modified files:
    ossp-pkg/shiela         README VERSION devtool.conf shiela-install.pod
                            shiela-install.sh shiela.pl shiela.pod

  Log:
    cleanup version stuff

  Summary:
    Revision    Changes     Path
    1.7         +1  -1      ossp-pkg/shiela/README
    1.6         +1  -1      ossp-pkg/shiela/VERSION
    1.5         +8  -9      ossp-pkg/shiela/devtool.conf
    1.11        +1  -1      ossp-pkg/shiela/shiela-install.pod
    1.12        +1  -1      ossp-pkg/shiela/shiela-install.sh
    1.31        +2  -3      ossp-pkg/shiela/shiela.pl
    1.11        +1  -1      ossp-pkg/shiela/shiela.pod
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/README
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 README
  --- ossp-pkg/shiela/README	21 Dec 2002 09:42:57 -0000	1.6
  +++ ossp-pkg/shiela/README	22 Dec 2002 15:01:17 -0000	1.7
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/_| |_|_|\___|_|\__,_|
   
     OSSP shiela - Access Control and Logging Facility for CVS
  -  Version 0.9.3 (21-Dec-2002)
  +  Version 0.9.3 (22-Dec-2002)
   
     ABSTRACT
   
  Index: ossp-pkg/shiela/VERSION
  ============================================================
  $ cvs diff -u -r1.5 -r1.6 VERSION
  --- ossp-pkg/shiela/VERSION	21 Dec 2002 09:20:27 -0000	1.5
  +++ ossp-pkg/shiela/VERSION	22 Dec 2002 15:01:17 -0000	1.6
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP shiela (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP shiela, Version 0.9.3 (21-Dec-2002)
  +  This is OSSP shiela, Version 0.9.3 (22-Dec-2002)
   
  Index: ossp-pkg/shiela/devtool.conf
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 devtool.conf
  --- ossp-pkg/shiela/devtool.conf	21 Dec 2002 11:00:17 -0000	1.4
  +++ ossp-pkg/shiela/devtool.conf	22 Dec 2002 15:01:17 -0000	1.5
  @@ -23,17 +23,16 @@
   
   %version
       ./shtool version -ltxt -n "OSSP shiela" -e VERSION
  -	V=`./shtool version -ltxt -dlong VERSION`
  -	sed -e "s/Version .*/Version $V/g" <README >README.n && mv README.n README
  +    V=`./shtool version -ltxt -d short VERSION`
       sed -e "s/version = '.*'/version = '$V'/" <shiela.pl >shiela.pl.n && mv shiela.pl.n shiela.pl
       sed -e "s/version=\".*\"/version=\"$V\"/" <shiela-install.sh >shiela-install.sh.n && mv shiela-install.sh.n shiela-install.sh
  -	V=`./shtool version -l txt -d long VERSION`
  -	sed -e "s/Version .*(.*)/Version $V/g" <README >README.n && mv README.n README
  -    sed -e "s/B<OSSP shiela> .*/B<OSSP shiela> $V/" <shiela.pod >shiela.pod.n && mv shiela.pod.n shiela.pod
  -    sed -e "s/B<OSSP shiela> .*/B<OSSP shiela> $V/" <shiela-install.pod >shiela-install.pod.n && mv shiela-install.pod.n shiela-install.pod
  +    V=`./shtool version -l txt -d long VERSION`
  +    sed -e "s/Version .*(.*)/Version $V/g" <README >README.n && mv README.n README
  +    sed -e "s/^B<OSSP shiela> [0-9].*/B<OSSP shiela> $V/" <shiela.pod >shiela.pod.n && mv shiela.pod.n shiela.pod
  +    sed -e "s/^B<OSSP shiela> [0-9].*/B<OSSP shiela> $V/" <shiela-install.pod >shiela-install.pod.n && mv shiela-install.pod.n shiela-install.pod
   
   %tag
  -	V=`./shtool version -ltxt -dshort VERSION | sed -e 's;\.;_;g'`
  +    V=`./shtool version -ltxt -dshort VERSION | sed -e 's;\.;_;g'`
       echo "+++ tagging CVS sources as SHIELA_${V}"
       cvs tag SHIELA_${V}
   
  @@ -52,7 +51,7 @@
       echo "+++ fixing"
       ./shtool fixperm -v .
       echo "+++ rolling"
  -	V=`./shtool version -ltxt -dshort VERSION`
  +    V=`./shtool version -ltxt -dshort VERSION`
       ./shtool tarball -o shiela-${V}.tar.gz -d shiela-${V} -u ossp -g ossp \
                        -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*,*.tar.gz,^#.*,.*~$' -c 'gzip --best' .
       ls -l shiela-${V}.tar.gz
  @@ -63,6 +62,6 @@
   
   %upload
       echo "+++ copying to ftp://ftp.ossp.org/pkg/tool/shiela/"
  -	V=`./shtool version -ltxt -dshort VERSION`
  +    V=`./shtool version -ltxt -dshort VERSION`
       scp shiela-${V}.tar.gz master.ossp.org:/e/ossp/ftp/pkg/tool/shiela/
   
  Index: ossp-pkg/shiela/shiela-install.pod
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 shiela-install.pod
  --- ossp-pkg/shiela/shiela-install.pod	22 Dec 2002 11:10:42 -0000	1.10
  +++ ossp-pkg/shiela/shiela-install.pod	22 Dec 2002 15:01:17 -0000	1.11
  @@ -33,7 +33,7 @@
   
   =head1 VERSION
   
  -B<OSSP shiela> 0.9.3 (21-Dec-2002)
  +B<OSSP shiela> 0.9.3 (22-Dec-2002)
   
   =head1 DESCRIPTION
   
  Index: ossp-pkg/shiela/shiela-install.sh
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 shiela-install.sh
  --- ossp-pkg/shiela/shiela-install.sh	22 Dec 2002 11:10:42 -0000	1.11
  +++ ossp-pkg/shiela/shiela-install.sh	22 Dec 2002 15:01:17 -0000	1.12
  @@ -26,7 +26,7 @@
   ##  shiela-install.sh: repository install program (syntax: Bourne-Shell)
   ##
   
  -version="0.9.3 (21-Dec-2002)"
  +version="0.9.3"
   
   prefix="@prefix@"
   bindir="@bindir@"
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================
  $ cvs diff -u -r1.30 -r1.31 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	22 Dec 2002 11:19:48 -0000	1.30
  +++ ossp-pkg/shiela/shiela.pl	22 Dec 2002 15:01:17 -0000	1.31
  @@ -26,7 +26,7 @@
   ##  shiela.pl: control program (syntax: Perl)
   ##
   
  -my $version = '0.9.3 (21-Dec-2002)';
  +my $version = '0.9.3';
   
   require 5.005;
   
  @@ -734,8 +734,7 @@
       $sm->{header} =
           "From: \"".$RT->{username}."\" <".$RT->{usermail}.">\n" .
           "To: $toaddr\n" .
  -        "User-Agent: ".uc(substr($RT->{name}, 0, 1)).substr($RT->{name}, 1)."/$RT->{vers} " .
  -                     "CVS/".$RT->{cvsvers}.($RT->{cvsrse} ? "+RSE" : "")."\n" .
  +        "User-Agent: OSSP shiela ".$RT->{vers}." [CVS ".$RT->{cvsvers}.($RT->{cvsrse} ? "+RSE" : "")."]\n" .
           "Precedence: bulk\n" .
           "Mime-Version: 1.0\n" .
           "Content-Type: text/plain; charset=iso-8859-1\n" .
  Index: ossp-pkg/shiela/shiela.pod
  ============================================================
  $ cvs diff -u -r1.10 -r1.11 shiela.pod
  --- ossp-pkg/shiela/shiela.pod	22 Dec 2002 11:10:43 -0000	1.10
  +++ ossp-pkg/shiela/shiela.pod	22 Dec 2002 15:01:17 -0000	1.11
  @@ -33,7 +33,7 @@
   
   =head1 VERSION
   
  -B<OSSP shiela> 0.9.3 (21-Dec-2002)
  +B<OSSP shiela> 0.9.3 (22-Dec-2002)
   
   =head1 DESCRIPTION
   

From ossp-cvs-owner@ossp.org  Sun Dec 22 16:04:01 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 54931764A8; Sun, 22 Dec 2002 16:04:01 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela shiela.pl
Message-Id: <20021222150401.54931764A8@mail.ossp.org>
Date: Sun, 22 Dec 2002 16:04:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Dec-2002 16:04:01
  Branch: HEAD                             Handle: 2002122215040000

  Modified files:
    ossp-pkg/shiela         shiela.pl

  Log:
    simplify command

  Summary:
    Revision    Changes     Path
    1.32        +1  -1      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/shiela.pl
  ============================================================
  $ cvs diff -u -r1.31 -r1.32 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	22 Dec 2002 15:01:17 -0000	1.31
  +++ ossp-pkg/shiela/shiela.pl	22 Dec 2002 15:04:00 -0000	1.32
  @@ -1827,7 +1827,7 @@
               #   generate binary and textaual change patch script
               $cvsdiff .=
                   "<shiela:patch $cvsdir/$Is>\n" .
  -                "(cat <<'@@ .' >/dev/null && rm -f $cvsdir/$Is)\n" .
  +                "rm -f $cvsdir/$Is <<'@@ .'\n" .
                   "Index: $cvsdir/$Is\n" .
                   ("=" x 76) . "\n" .
                   "[NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]\n" .

From ossp-cvs-owner@ossp.org  Sun Dec 22 17:30:15 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4B63276559; Sun, 22 Dec 2002 17:30:15 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela ChangeLog shiela.pl
Message-Id: <20021222163015.4B63276559@mail.ossp.org>
Date: Sun, 22 Dec 2002 17:30:15 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Dec-2002 17:30:15
  Branch: HEAD                             Handle: 2002122216301400

  Modified files:
    ossp-pkg/shiela         ChangeLog shiela.pl

  Log:
    Line-break single-line log messages into multi-line log messages
    to make the usual log messages produced by "cvs commit -m '...'"
    more readable in the report.

  Summary:
    Revision    Changes     Path
    1.20        +5  -0      ossp-pkg/shiela/ChangeLog
    1.33        +39 -1      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/ChangeLog
  ============================================================
  $ cvs diff -u -r1.19 -r1.20 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	22 Dec 2002 11:06:50 -0000	1.19
  +++ ossp-pkg/shiela/ChangeLog	22 Dec 2002 16:30:14 -0000	1.20
  @@ -11,6 +11,11 @@
   
     Changes between 0.9.2 and 0.9.3 (19-Aug-2002 to 21-Dec-2002):
   
  +   *) Line-break single-line log messages into multi-line log messages
  +      to make the usual log messages produced by "cvs commit -m '...'"
  +      more readable in the report.
  +      [Ralf S. Engelschall]
  +
      *) Fully reimplemented the "Content" "details" (the change summary in
         reports). It now supports both textual (via diff(1)) and binary
         (via xdelta(1)) file changes. Additionally each change report part
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================
  $ cvs diff -u -r1.32 -r1.33 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	22 Dec 2002 15:04:00 -0000	1.32
  +++ ossp-pkg/shiela/shiela.pl	22 Dec 2002 16:30:14 -0000	1.33
  @@ -979,6 +979,41 @@
   
   ##  _________________________________________________________________
   ##
  +##  Wrap a single-line log message.
  +##
  +##  This line-wraps a single-line log message into a multi-line log
  +##  message.
  +##  _________________________________________________________________
  +##
  +
  +sub wrap_message {
  +    my ($columns, $text) = @_;
  +
  +    my $r = "";
  +    my $nl = "";
  +    my $left = "";
  +    pos($text) = 0;
  +
  +    while ($text !~ m/\G\s*\Z/gc) {
  +        if ($text =~ /\G([^\n]{0,$columns})(\s|\z)/xmgc) {
  +            $r .= $nl . $1;
  +            $left = $2;
  +        } elsif ($text =~ /\G([^\n]*?)(\s|\z)/xmgc) {
  +            $r .= $nl . $1;
  +            $left = $2;
  +        }
  +        $nl = "\n";
  +    }
  +
  +    $r .= $left;
  +    $r .= substr($text, pos($text), length($text)-pos($text))
  +        if (pos($text) ne length($text));
  +
  +    return $r;
  +}
  +
  +##  _________________________________________________________________
  +##
   ##  TAGINFO HOOK
   ##
   ##  We hook into CVS via `taginfo' to check whether user is allowed to
  @@ -2135,7 +2170,10 @@
               $O .= "\n";
               $O .= $prefix."Log:\n";
               my $log = $IN->{log};
  -            $log =~ s|^|$prefix  |mg;
  +            if ($log !~ m|\n.+|s and length($log) > 70) {
  +                $log = &wrap_message(70, $log);
  +            }
  +            $log =~ s|^|${prefix}  |mg;
               $O .= $log;
           }
   

From ossp-cvs-owner@ossp.org  Sun Dec 22 18:10:27 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7704C764A2; Sun, 22 Dec 2002 18:10:27 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela ChangeLog shiela.pl
Message-Id: <20021222171027.7704C764A2@mail.ossp.org>
Date: Sun, 22 Dec 2002 18:10:27 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Dec-2002 18:10:27
  Branch: HEAD                             Handle: 2002122217102600

  Modified files:
    ossp-pkg/shiela         ChangeLog shiela.pl

  Log:
    1. Add branch information to the Subject lines of generated Emails.
    Additionally, for better readability, use a trailing slash on directory
    names in the Subject lines of generated Emails.
    
    2. Use Cwd::abs_path instead of Cwd::realpath because the latter is
    not available in older Cwd.pm versions (as those distributed with Perl
    5.005, etc).

  Summary:
    Revision    Changes     Path
    1.21        +5  -0      ossp-pkg/shiela/ChangeLog
    1.34        +11 -3      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/ChangeLog
  ============================================================
  $ cvs diff -u -r1.20 -r1.21 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	22 Dec 2002 16:30:14 -0000	1.20
  +++ ossp-pkg/shiela/ChangeLog	22 Dec 2002 17:10:26 -0000	1.21
  @@ -10,6 +10,11 @@
     ChangeLog
   
     Changes between 0.9.2 and 0.9.3 (19-Aug-2002 to 21-Dec-2002):
  +   
  +   *) Add branch information to the Subject lines of generated Emails.
  +      Additionally, for better readability, use a trailing slash on
  +      directory names in the Subject lines of generated Emails.
  +      [Ralf S. Engelschall]
   
      *) Line-break single-line log messages into multi-line log messages
         to make the usual log messages produced by "cvs commit -m '...'"
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================
  $ cvs diff -u -r1.33 -r1.34 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	22 Dec 2002 16:30:14 -0000	1.33
  +++ ossp-pkg/shiela/shiela.pl	22 Dec 2002 17:10:26 -0000	1.34
  @@ -36,7 +36,7 @@
   use IO::Handle;   # shipped with Perl since 5.003
   use IPC::Open2;   # shipped with Perl since 5.003
   use Data::Dumper; # shipped with Perl since 5.005
  -use Cwd;          # shipped with Perl since 5.003
  +use Cwd;          # shipped with Perl since 5.005
   
   #   DEBUGGING
   $Data::Dumper::Purity = 1;
  @@ -1036,7 +1036,7 @@
   
       #   strip absolute prefix
       $cvsdir =~ s|^$RT->{cvsroot}/?||;
  -    my $cvsdirphysical = Cwd::realpath($RT->{cvsroot});
  +    my $cvsdirphysical = Cwd::abs_path($RT->{cvsroot});
       $cvsdir =~ s|^$cvsdirphysical/?||;
   
       #   provide access control
  @@ -1992,11 +1992,19 @@
                   my $subject = "[CVS]";
                   $subject .= " ".$CF->{Project}->{Tag}.":";
                   my $dirlast = '';
  +                my $branchlast = '';
                   foreach my $path (sort(keys(%{$IN->{file}}))) {
                       my ($dir, $file) = ($path =~ m|^(.+)/([^/]+)$|);
  +                    my $branch = $IN->{file}->{$path}->{branch} || 'HEAD';
  +                    if ($branchlast ne $branch) {
  +                        #   prefix with branch
  +                        $branchlast = $branch;
  +                        $subject .= " $branch:" if ($branch ne 'HEAD');
  +                    }
                       if ($dirlast ne $dir) {
  +                        #   prefix with directory
                           $dirlast = $dir;
  -                        $subject .= " $dir";
  +                        $subject .= " $dir/";
                       }
                       $subject .= " $file";
                   }

From ossp-cvs-owner@ossp.org  Sun Dec 22 18:20:46 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4DC2D764A8; Sun, 22 Dec 2002 18:20:46 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela shiela.pod
Message-Id: <20021222172046.4DC2D764A8@mail.ossp.org>
Date: Sun, 22 Dec 2002 18:20:46 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Dec-2002 18:20:46
  Branch: HEAD                             Handle: 2002122217204500

  Modified files:
    ossp-pkg/shiela         shiela.pod

  Log:
    polishing text

  Summary:
    Revision    Changes     Path
    1.12        +2  -2      ossp-pkg/shiela/shiela.pod
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/shiela.pod
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 shiela.pod
  --- ossp-pkg/shiela/shiela.pod	22 Dec 2002 15:01:17 -0000	1.11
  +++ ossp-pkg/shiela/shiela.pod	22 Dec 2002 17:20:45 -0000	1.12
  @@ -495,13 +495,13 @@
   variants of these scripts for the FreeBSD project, Roy Fielding
   E<lt>fielding@apache.orgE<gt> did a similar job for the Apache webserver
   project and Ralf S. Engelschall E<lt>rse@engelschall.comE<gt> did it for
  -the OpenSSL project.
  +the initial CVS repository of the OpenSSL project.
   
   But for the OSSP project Ralf S. Engelschall
   E<lt>rse@engelschall.comE<gt> wanted a solution which was cleaned up
   from the ground and which both is more easily to integrate into CVS
   and uses the features of the latest CVS versions (especially those of
  -the enhanced CVS variant from OSSP). So in April 2000 he decided to
  +the enhanced CVS variant from him). So in April 2000 he decided to
   rewrite the functionality of C<log_accum.pl>, C<commit_prep.pl> and
   C<cvs_acls.pl> from scratch. The result is B<OSSP shiela>.
   

From ossp-cvs-owner@ossp.org  Sun Dec 22 18:23:25 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3B32E764A8; Sun, 22 Dec 2002 18:23:25 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela TODO
Message-Id: <20021222172325.3B32E764A8@mail.ossp.org>
Date: Sun, 22 Dec 2002 18:23:25 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Dec-2002 18:23:25
  Branch: HEAD                             Handle: 2002122217232400

  Modified files:
    ossp-pkg/shiela         TODO

  Log:
    update

  Summary:
    Revision    Changes     Path
    1.5         +2  -8      ossp-pkg/shiela/TODO
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/TODO
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 TODO
  --- ossp-pkg/shiela/TODO	21 Dec 2002 11:00:17 -0000	1.4
  +++ ossp-pkg/shiela/TODO	22 Dec 2002 17:23:24 -0000	1.5
  @@ -9,13 +9,9 @@
   
     TODO
   
  -  For version 1.0:
  +  For version 1.1:
     ----------------
   
  -  o  We could replace "cvs update -p -rX file" with "cvs diff -N -u3
  -     -Dyesterday file" to allow people to pass the log email directly to patch(1)
  -     and this way let new files beeing added. Same for deleted files.
  -
     o  Subject can be compressed by reducing common prefix and 
        just repeating the subdirs together with the files:
        << [CVS] OSSP: ossp-pkg/ossp-cvs README.OSSP ossp-pkg/ossp-cvs/src cvsrc.c
  @@ -23,8 +19,6 @@
        Eventuell sogar auf module reduzieren:
        >> [CVS] OSSP ossp-cvs: README.OSSP src/cvsrc.c
   
  -  o  Branches should be listed in Subject lines
  -
     o  Modules should be allowed to be arbitrary paths and not
        just top-level directories. This should be easy to add for
        version 1.1 by adjusting the access control routine.
  @@ -32,7 +26,7 @@
     o  It perhaps should read in shiela.msg in order to know
        what to kick out when compressing the message. 
   
  -  For version 1.1:
  +  For version 1.2:
     ----------------
   
     o  Under MIME mails, the details could include complete files

From ossp-cvs-owner@ossp.org  Sun Dec 22 18:37:29 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9511D764A2; Sun, 22 Dec 2002 18:37:29 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela ChangeLog README VERSION shiela-install.po...
Message-Id: <20021222173729.9511D764A2@mail.ossp.org>
Date: Sun, 22 Dec 2002 18:37:29 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Dec-2002 18:37:29
  Branch: HEAD                             Handle: 2002122217372800

  Modified files:
    ossp-pkg/shiela         ChangeLog README VERSION shiela-install.pod
                            shiela-install.sh shiela.pl shiela.pod

  Log:
    bump for release

  Summary:
    Revision    Changes     Path
    1.22        +1  -1      ossp-pkg/shiela/ChangeLog
    1.8         +1  -1      ossp-pkg/shiela/README
    1.7         +1  -1      ossp-pkg/shiela/VERSION
    1.12        +1  -1      ossp-pkg/shiela/shiela-install.pod
    1.13        +1  -1      ossp-pkg/shiela/shiela-install.sh
    1.35        +1  -1      ossp-pkg/shiela/shiela.pl
    1.13        +1  -1      ossp-pkg/shiela/shiela.pod
  ____________________________________________________________________________

  Index: ossp-pkg/shiela/ChangeLog
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	22 Dec 2002 17:10:26 -0000	1.21
  +++ ossp-pkg/shiela/ChangeLog	22 Dec 2002 17:37:28 -0000	1.22
  @@ -9,7 +9,7 @@
   
     ChangeLog
   
  -  Changes between 0.9.2 and 0.9.3 (19-Aug-2002 to 21-Dec-2002):
  +  Changes between 0.9.2 and 1.0.0 (19-Aug-2002 to 22-Dec-2002):
      
      *) Add branch information to the Subject lines of generated Emails.
         Additionally, for better readability, use a trailing slash on
  Index: ossp-pkg/shiela/README
  ============================================================
  $ cvs diff -u -r1.7 -r1.8 README
  --- ossp-pkg/shiela/README	22 Dec 2002 15:01:17 -0000	1.7
  +++ ossp-pkg/shiela/README	22 Dec 2002 17:37:28 -0000	1.8
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/_| |_|_|\___|_|\__,_|
   
     OSSP shiela - Access Control and Logging Facility for CVS
  -  Version 0.9.3 (22-Dec-2002)
  +  Version 1.0.0 (22-Dec-2002)
   
     ABSTRACT
   
  Index: ossp-pkg/shiela/VERSION
  ============================================================
  $ cvs diff -u -r1.6 -r1.7 VERSION
  --- ossp-pkg/shiela/VERSION	22 Dec 2002 15:01:17 -0000	1.6
  +++ ossp-pkg/shiela/VERSION	22 Dec 2002 17:37:28 -0000	1.7
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP shiela (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP shiela, Version 0.9.3 (22-Dec-2002)
  +  This is OSSP shiela, Version 1.0.0 (22-Dec-2002)
   
  Index: ossp-pkg/shiela/shiela-install.pod
  ============================================================
  $ cvs diff -u -r1.11 -r1.12 shiela-install.pod
  --- ossp-pkg/shiela/shiela-install.pod	22 Dec 2002 15:01:17 -0000	1.11
  +++ ossp-pkg/shiela/shiela-install.pod	22 Dec 2002 17:37:28 -0000	1.12
  @@ -33,7 +33,7 @@
   
   =head1 VERSION
   
  -B<OSSP shiela> 0.9.3 (22-Dec-2002)
  +B<OSSP shiela> 1.0.0 (22-Dec-2002)
   
   =head1 DESCRIPTION
   
  Index: ossp-pkg/shiela/shiela-install.sh
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 shiela-install.sh
  --- ossp-pkg/shiela/shiela-install.sh	22 Dec 2002 15:01:17 -0000	1.12
  +++ ossp-pkg/shiela/shiela-install.sh	22 Dec 2002 17:37:28 -0000	1.13
  @@ -26,7 +26,7 @@
   ##  shiela-install.sh: repository install program (syntax: Bourne-Shell)
   ##
   
  -version="0.9.3"
  +version="1.0.0"
   
   prefix="@prefix@"
   bindir="@bindir@"
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================
  $ cvs diff -u -r1.34 -r1.35 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	22 Dec 2002 17:10:26 -0000	1.34
  +++ ossp-pkg/shiela/shiela.pl	22 Dec 2002 17:37:28 -0000	1.35
  @@ -26,7 +26,7 @@
   ##  shiela.pl: control program (syntax: Perl)
   ##
   
  -my $version = '0.9.3';
  +my $version = '1.0.0';
   
   require 5.005;
   
  Index: ossp-pkg/shiela/shiela.pod
  ============================================================
  $ cvs diff -u -r1.12 -r1.13 shiela.pod
  --- ossp-pkg/shiela/shiela.pod	22 Dec 2002 17:20:45 -0000	1.12
  +++ ossp-pkg/shiela/shiela.pod	22 Dec 2002 17:37:28 -0000	1.13
  @@ -33,7 +33,7 @@
   
   =head1 VERSION
   
  -B<OSSP shiela> 0.9.3 (22-Dec-2002)
  +B<OSSP shiela> 1.0.0 (22-Dec-2002)
   
   =head1 DESCRIPTION
   

From ossp-cvs-owner@ossp.org  Sun Dec 22 18:42:51 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C3F21764A2; Sun, 22 Dec 2002 18:42:50 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new news.txt ossp-web/pkg/tool index.wml ossp-web...
Message-Id: <20021222174250.C3F21764A2@mail.ossp.org>
Date: Sun, 22 Dec 2002 18:42:50 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   22-Dec-2002 18:42:50
  Branch: HEAD                             Handle: 2002122217424901

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/shiela index.wml

  Log:
    release OSSP shiela 1.0.0

  Summary:
    Revision    Changes     Path
    1.39        +1  -0      ossp-web/new/news.txt
    1.22        +3  -3      ossp-web/pkg/tool/index.wml
    1.5         +4  -4      ossp-web/pkg/tool/shiela/index.wml
  ____________________________________________________________________________

  Index: ossp-web/new/news.txt
  ============================================================
  $ cvs diff -u -r1.38 -r1.39 news.txt
  --- ossp-web/new/news.txt	16 Dec 2002 15:53:51 -0000	1.38
  +++ ossp-web/new/news.txt	22 Dec 2002 17:42:49 -0000	1.39
  @@ -1,3 +1,4 @@
  +22-Dec-2002: Released T<OSSP shiela> 1.0.0
   16-Dec-2002: Released L<OSSP al> 0.9.1
   16-Dec-2002: Released L<OSSP al> 0.9.0
   04-Dec-2002: Released L<GNU pth> 2.0b2
  Index: ossp-web/pkg/tool/index.wml
  ============================================================
  $ cvs diff -u -r1.21 -r1.22 index.wml
  --- ossp-web/pkg/tool/index.wml	18 Dec 2002 10:33:43 -0000	1.21
  +++ ossp-web/pkg/tool/index.wml	22 Dec 2002 17:42:49 -0000	1.22
  @@ -18,15 +18,15 @@
     <pkg_item name="lmtp2nntp" longname="OSSP lmtp2nntp" type="tool"
               desc="Real-Time Mail to News Gateway"
               done=100 stable="1.1.1" unstable=1.2a6>
  +  <pkg_item name="shiela" longname="OSSP shiela" type="tool"
  +            desc="CVS Access Control and Logging"
  +	        done=100 stable="1.0.0" unstable="none">
     <pkg_item name="eperl" longname="OSSP eperl" type="tool"
               desc="Embedded Perl Language"
   	        done=100 stable="2.2.14" unstable="none">
     <pkg_item name="petidomo" longname="OSSP petidomo" type="tool" derived=yes
               desc="Mailing List Manager"
   	        done=95 stable="none" unstable="4.0b1">
  -  <pkg_item name="shiela" longname="OSSP shiela" type="tool"
  -            desc="CVS Access Control and Logging"
  -	        done=95 stable="none" unstable="0.9.2">
     <pkg_item name="xenia" longname="OSSP xenia" type="tool"
               desc="CVS Browsing Server"
   	        done=20 stable="none" unstable="none">
  Index: ossp-web/pkg/tool/shiela/index.wml
  ============================================================
  $ cvs diff -u -r1.4 -r1.5 index.wml
  --- ossp-web/pkg/tool/shiela/index.wml	19 Aug 2002 19:15:10 -0000	1.4
  +++ ossp-web/pkg/tool/shiela/index.wml	22 Dec 2002 17:42:50 -0000	1.5
  @@ -24,9 +24,9 @@
   <h2>Status</h2>
   
   <pkg_status
  -    stable="none"    stable_date="none"
  -    unstable="0.9.2" unstable_date="19-Aug-2002"
  -	done=95>
  +    stable="1.0.0" stable_date="22-Dec-2002"
  +    unstable="none" unstable_date="none"
  +	done=100>
   
   <h2>Source</h2>
   
  @@ -35,7 +35,7 @@
       url=$(FTP_ROOT_URL)/pkg/tool/shiela/
       directory=$(FTP_ROOT_DIR)/pkg/tool/shiela/
       files="shiela-*.tar.gz" 
  -	stable="none" unstable="shiela-0.9.2.tar.gz">
  +	stable="shiela-1.0.0.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   

From ossp-cvs-owner@ossp.org  Sun Dec 22 20:32:29 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4A73D76469; Sun, 22 Dec 2002 20:32:29 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ ChangeLog shiela.pl
Message-Id: <20021222193229.4A73D76469@mail.ossp.org>
Date: Sun, 22 Dec 2002 20:32:29 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Dec-2002 20:32:29
  Branch: HEAD                             Handle: 2002122219322800

  Modified files:
    ossp-pkg/shiela         ChangeLog shiela.pl

  Log:
    Fixed run-time under Perl 5.8.0: import only abs_path()
    from module Cwd to avoid conflicts with POSIX module.

  Summary:
    Revision    Changes     Path
    1.23        +6  -0      ossp-pkg/shiela/ChangeLog
    1.36        +7  -7      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	22 Dec 2002 17:37:28 -0000	1.22
  +++ ossp-pkg/shiela/ChangeLog	22 Dec 2002 19:32:28 -0000	1.23
  @@ -9,6 +9,12 @@
   
     ChangeLog
   
  +  Changes between 1.0.0 and 1.0.1 (22-Dec-2002 to 22-Dec-2002):
  +
  +   *) Fixed run-time under Perl 5.8.0: import only abs_path()
  +      from module Cwd to avoid conflicts with POSIX module.
  +      [Ralf S. Engelschall]
  +
     Changes between 0.9.2 and 1.0.0 (19-Aug-2002 to 22-Dec-2002):
      
      *) Add branch information to the Subject lines of generated Emails.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	22 Dec 2002 17:37:28 -0000	1.35
  +++ ossp-pkg/shiela/shiela.pl	22 Dec 2002 19:32:28 -0000	1.36
  @@ -30,13 +30,13 @@
   
   require 5.005;
   
  -use strict;       # shipped with Perl since 5.000
  -use POSIX;        # shipped with Perl since 5.000
  -use IO::File;     # shipped with Perl since 5.003
  -use IO::Handle;   # shipped with Perl since 5.003
  -use IPC::Open2;   # shipped with Perl since 5.003
  -use Data::Dumper; # shipped with Perl since 5.005
  -use Cwd;          # shipped with Perl since 5.005
  +use strict;           # shipped with Perl since 5.000
  +use POSIX;            # shipped with Perl since 5.000
  +use IO::File;         # shipped with Perl since 5.003
  +use IO::Handle;       # shipped with Perl since 5.003
  +use IPC::Open2;       # shipped with Perl since 5.003
  +use Data::Dumper;     # shipped with Perl since 5.005
  +use Cwd qw(abs_path); # shipped with Perl since 5.005
   
   #   DEBUGGING
   $Data::Dumper::Purity = 1;
  @@ .

From ossp-cvs-owner@ossp.org  Sun Dec 22 20:34:52 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DD17776469; Sun, 22 Dec 2002 20:34:51 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/tool/ index.wml ossp-w...
Message-Id: <20021222193451.DD17776469@mail.ossp.org>
Date: Sun, 22 Dec 2002 20:34:51 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   22-Dec-2002 20:34:51
  Branch: HEAD                             Handle: 2002122219345001

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/shiela index.wml

  Log:
    release OSSP shiela 1.0.1

  Summary:
    Revision    Changes     Path
    1.40        +1  -0      ossp-web/new/news.txt
    1.23        +1  -1      ossp-web/pkg/tool/index.wml
    1.6         +2  -2      ossp-web/pkg/tool/shiela/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.39 -r1.40 news.txt
  --- ossp-web/new/news.txt	22 Dec 2002 17:42:49 -0000	1.39
  +++ ossp-web/new/news.txt	22 Dec 2002 19:34:50 -0000	1.40
  @@ -1,3 +1,4 @@
  +22-Dec-2002: Released T<OSSP shiela> 1.0.1
   22-Dec-2002: Released T<OSSP shiela> 1.0.0
   16-Dec-2002: Released L<OSSP al> 0.9.1
   16-Dec-2002: Released L<OSSP al> 0.9.0
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 index.wml
  --- ossp-web/pkg/tool/index.wml	22 Dec 2002 17:42:49 -0000	1.22
  +++ ossp-web/pkg/tool/index.wml	22 Dec 2002 19:34:50 -0000	1.23
  @@ -20,7 +20,7 @@
               done=100 stable="1.1.1" unstable=1.2a6>
     <pkg_item name="shiela" longname="OSSP shiela" type="tool"
               desc="CVS Access Control and Logging"
  -	        done=100 stable="1.0.0" unstable="none">
  +	        done=100 stable="1.0.1" unstable="none">
     <pkg_item name="eperl" longname="OSSP eperl" type="tool"
               desc="Embedded Perl Language"
   	        done=100 stable="2.2.14" unstable="none">
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/shiela/index.wml
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 index.wml
  --- ossp-web/pkg/tool/shiela/index.wml	22 Dec 2002 17:42:50 -0000	1.5
  +++ ossp-web/pkg/tool/shiela/index.wml	22 Dec 2002 19:34:51 -0000	1.6
  @@ -24,7 +24,7 @@
   <h2>Status</h2>
   
   <pkg_status
  -    stable="1.0.0" stable_date="22-Dec-2002"
  +    stable="1.0.1" stable_date="22-Dec-2002"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -35,7 +35,7 @@
       url=$(FTP_ROOT_URL)/pkg/tool/shiela/
       directory=$(FTP_ROOT_DIR)/pkg/tool/shiela/
       files="shiela-*.tar.gz" 
  -	stable="shiela-1.0.0.tar.gz" unstable="none">
  +	stable="shiela-1.0.1.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Dec 22 21:18:23 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D2AB6764A2; Sun, 22 Dec 2002 21:18:22 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/tool/shiela/ index.wml screenshot-large.png s...
Message-Id: <20021222201822.D2AB6764A2@mail.ossp.org>
Date: Sun, 22 Dec 2002 21:18:22 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   22-Dec-2002 21:18:22
  Branch: HEAD                             Handle: 2002122220182200

  Added files:
    ossp-web/pkg/tool/shiela screenshot-large.png screenshot-symbol.png
  Modified files:
    ossp-web/pkg/tool/shiela index.wml

  Log:
    add screenshots

  Summary:
    Revision    Changes     Path
    1.7         +1  -0      ossp-web/pkg/tool/shiela/index.wml
    1.1         BLOB        ossp-web/pkg/tool/shiela/screenshot-large.png
    1.1         BLOB        ossp-web/pkg/tool/shiela/screenshot-symbol.png
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/shiela/index.wml
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 index.wml
  --- ossp-web/pkg/tool/shiela/index.wml	22 Dec 2002 19:34:51 -0000	1.6
  +++ ossp-web/pkg/tool/shiela/index.wml	22 Dec 2002 20:18:22 -0000	1.7
  @@ -7,6 +7,7 @@
   
   <h2>Abstract</h2>
   
  +<a href="screenshot-large.png"><img src="screenshot-symbol.png" alt="" align=right border=0></a>
   OSSP shiela is an access control and logging facility for use with
   the <a href="http://www.cvshome.org/">Concurrent Versions System</a>
   (CVS). It is intended to be hooked into CVS's processing through the
  @@ .
  (cd ossp-web/pkg/tool/shiela && uudecode <<'@@ .' && \
   xdelta patch screenshot-large.png.xdelta /dev/null screenshot-large.png && \
   rm -f screenshot-large.png.xdelta)
  Index: ossp-web/pkg/tool/shiela/screenshot-large.png
  ============================================================================
  @@ .
  (cd ossp-web/pkg/tool/shiela && uudecode <<'@@ .' && \
   xdelta patch screenshot-symbol.png.xdelta /dev/null screenshot-symbol.png && \
   rm -f screenshot-symbol.png.xdelta)
  Index: ossp-web/pkg/tool/shiela/screenshot-symbol.png
  ============================================================================
  @@ .

From ossp-cvs-owner@ossp.org  Mon Dec 23 09:50:35 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A3BEE7671B; Mon, 23 Dec 2002 09:50:35 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ README VERSION shiela-install.pod shiela-...
Message-Id: <20021223085035.A3BEE7671B@mail.ossp.org>
Date: Mon, 23 Dec 2002 09:50:35 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Dec-2002 09:50:35
  Branch: HEAD                             Handle: 2002122308503400

  Modified files:
    ossp-pkg/shiela         README VERSION shiela-install.pod
                            shiela-install.sh shiela.pl shiela.pod

  Log:
    flush pending changes

  Summary:
    Revision    Changes     Path
    1.9         +1  -1      ossp-pkg/shiela/README
    1.8         +1  -1      ossp-pkg/shiela/VERSION
    1.13        +1  -1      ossp-pkg/shiela/shiela-install.pod
    1.14        +1  -1      ossp-pkg/shiela/shiela-install.sh
    1.37        +1  -1      ossp-pkg/shiela/shiela.pl
    1.14        +1  -1      ossp-pkg/shiela/shiela.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/README
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 README
  --- ossp-pkg/shiela/README	22 Dec 2002 17:37:28 -0000	1.8
  +++ ossp-pkg/shiela/README	23 Dec 2002 08:50:34 -0000	1.9
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/_| |_|_|\___|_|\__,_|
   
     OSSP shiela - Access Control and Logging Facility for CVS
  -  Version 1.0.0 (22-Dec-2002)
  +  Version 1.0.1 (22-Dec-2002)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/VERSION
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 VERSION
  --- ossp-pkg/shiela/VERSION	22 Dec 2002 17:37:28 -0000	1.7
  +++ ossp-pkg/shiela/VERSION	23 Dec 2002 08:50:34 -0000	1.8
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP shiela (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP shiela, Version 1.0.0 (22-Dec-2002)
  +  This is OSSP shiela, Version 1.0.1 (22-Dec-2002)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-install.pod
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 shiela-install.pod
  --- ossp-pkg/shiela/shiela-install.pod	22 Dec 2002 17:37:28 -0000	1.12
  +++ ossp-pkg/shiela/shiela-install.pod	23 Dec 2002 08:50:34 -0000	1.13
  @@ -33,7 +33,7 @@
   
   =head1 VERSION
   
  -B<OSSP shiela> 1.0.0 (22-Dec-2002)
  +B<OSSP shiela> 1.0.1 (22-Dec-2002)
   
   =head1 DESCRIPTION
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-install.sh
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 shiela-install.sh
  --- ossp-pkg/shiela/shiela-install.sh	22 Dec 2002 17:37:28 -0000	1.13
  +++ ossp-pkg/shiela/shiela-install.sh	23 Dec 2002 08:50:34 -0000	1.14
  @@ -26,7 +26,7 @@
   ##  shiela-install.sh: repository install program (syntax: Bourne-Shell)
   ##
   
  -version="1.0.0"
  +version="1.0.1"
   
   prefix="@prefix@"
   bindir="@bindir@"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================================
  $ cvs diff -u -r1.36 -r1.37 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	22 Dec 2002 19:32:28 -0000	1.36
  +++ ossp-pkg/shiela/shiela.pl	23 Dec 2002 08:50:34 -0000	1.37
  @@ -26,7 +26,7 @@
   ##  shiela.pl: control program (syntax: Perl)
   ##
   
  -my $version = '1.0.0';
  +my $version = '1.0.1';
   
   require 5.005;
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pod
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 shiela.pod
  --- ossp-pkg/shiela/shiela.pod	22 Dec 2002 17:37:28 -0000	1.13
  +++ ossp-pkg/shiela/shiela.pod	23 Dec 2002 08:50:34 -0000	1.14
  @@ -33,7 +33,7 @@
   
   =head1 VERSION
   
  -B<OSSP shiela> 1.0.0 (22-Dec-2002)
  +B<OSSP shiela> 1.0.1 (22-Dec-2002)
   
   =head1 DESCRIPTION
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Dec 23 09:52:22 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 95CAE7671B; Mon, 23 Dec 2002 09:52:22 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ ChangeLog shiela.pl
Message-Id: <20021223085222.95CAE7671B@mail.ossp.org>
Date: Mon, 23 Dec 2002 09:52:22 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Dec-2002 09:52:22
  Branch: HEAD                             Handle: 2002122308522200

  Modified files:
    ossp-pkg/shiela         ChangeLog shiela.pl

  Log:
    Avoid over-sized lines in xdelta based patch scripts.

  Summary:
    Revision    Changes     Path
    1.24        +5  -0      ossp-pkg/shiela/ChangeLog
    1.38        +6  -3      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	22 Dec 2002 19:32:28 -0000	1.23
  +++ ossp-pkg/shiela/ChangeLog	23 Dec 2002 08:52:22 -0000	1.24
  @@ -9,6 +9,11 @@
   
     ChangeLog
   
  +  Changes between 1.0.1 and 1.0.2 (22-Dec-2002 to xx-Dec-2002):
  +
  +   *) Avoid over-sized lines in xdelta based patch scripts.
  +      [Ralf S. Engelschall]
  +
     Changes between 1.0.0 and 1.0.1 (22-Dec-2002 to 22-Dec-2002):
   
      *) Fixed run-time under Perl 5.8.0: import only abs_path()
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	23 Dec 2002 08:50:34 -0000	1.37
  +++ ossp-pkg/shiela/shiela.pl	23 Dec 2002 08:52:22 -0000	1.38
  @@ -1699,7 +1699,8 @@
                   if ($RT->{xdelta} and $RT->{uuencode}) {
                       $cvsdiff .=
                           "<shiela:patch $cvsdir/$Is>\n" .
  -                        "(cd $cvsdir && uudecode <<'@@ .' && \\\n" .
  +                        "(cd $cvsdir && \\\n" .
  +                        " uudecode <<'@@ .' && \\\n" .
                           " xdelta patch $Is.xdelta /dev/null $Is && \\\n" .
                           " rm -f $Is.xdelta)\n" .
                           "Index: $cvsdir/$Is\n" .
  @@ -1800,8 +1801,10 @@
                       #   generate change patch script
                       $cvsdiff .=
                           "<shiela:patch $cvsdir/$Is>\n" .
  -                        "(cd $cvsdir && uudecode <<'@@ .' && \\\n" .
  -                        " mv $Is $Is.orig && xdelta patch $Is.xdelta $Is.orig $Is && \\\n" .
  +                        "(cd $cvsdir && \\\n" .
  +                        " uudecode <<'@@ .' && \\\n" .
  +                        " mv $Is $Is.orig && \\\n" .
  +                        " xdelta patch $Is.xdelta $Is.orig $Is && \\\n" .
                           " rm -f $Is.orig $Is.xdelta)\n" .
                           "Index: $cvsdir/$Is\n" .
                           ("=" x 76) . "\n";
  @@ .

From ossp-cvs-owner@ossp.org  Mon Dec 23 10:05:48 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 84A6A76469; Mon, 23 Dec 2002 10:05:48 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ ChangeLog shiela-install.pod shiela.pod
Message-Id: <20021223090548.84A6A76469@mail.ossp.org>
Date: Mon, 23 Dec 2002 10:05:48 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Dec-2002 10:05:48
  Branch: HEAD                             Handle: 2002122309054700

  Modified files:
    ossp-pkg/shiela         ChangeLog shiela-install.pod shiela.pod

  Log:
    Fixed typos in manual pages.

  Summary:
    Revision    Changes     Path
    1.25        +3  -0      ossp-pkg/shiela/ChangeLog
    1.14        +3  -3      ossp-pkg/shiela/shiela-install.pod
    1.15        +3  -3      ossp-pkg/shiela/shiela.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	23 Dec 2002 08:52:22 -0000	1.24
  +++ ossp-pkg/shiela/ChangeLog	23 Dec 2002 09:05:47 -0000	1.25
  @@ -11,6 +11,9 @@
   
     Changes between 1.0.1 and 1.0.2 (22-Dec-2002 to xx-Dec-2002):
   
  +   *) Fixed typos in manual pages.
  +      [Ralf S. Engelschall]
  +
      *) Avoid over-sized lines in xdelta based patch scripts.
         [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-install.pod
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 shiela-install.pod
  --- ossp-pkg/shiela/shiela-install.pod	23 Dec 2002 08:50:34 -0000	1.13
  +++ ossp-pkg/shiela/shiela-install.pod	23 Dec 2002 09:05:47 -0000	1.14
  @@ -93,7 +93,7 @@
   
   =item B<7.>
   
  -add to C<$CVSROOT/CVSROOT/commitinfo> (the hool for checking commit
  +add to C<$CVSROOT/CVSROOT/commitinfo> (the hook for checking commit
   operations): ``C<ALL $CVSROOT/CVSROOT/shiela --hook=commitinfo>''.
   
   =item B<8.>
  @@ -126,12 +126,12 @@
   
   =head1 INSTALLATION: AUTOMATICALLY
   
  -For convinience reasons one can alternatively use the interactive
  +For convenience reasons one can alternatively use the interactive
   B<shiela-install> utility, which perform the above steps automatically
   and especially creates initial C<shiela.cfg> and C<shiela.msg> files.
   Just run C<shiela-install> and answer the questions.
   
  -For convinience reasons (while testing) one can also override the
  +For convenience reasons (while testing) one can also override the
   default value of a question by using C<variable=value> on the
   B<shiela-install> command line. For instance, ``C<shiela-install
   repos_path=/tmp/cvs>'' sets the default path for the question about the
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pod
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 shiela.pod
  --- ossp-pkg/shiela/shiela.pod	23 Dec 2002 08:50:34 -0000	1.14
  +++ ossp-pkg/shiela/shiela.pod	23 Dec 2002 09:05:47 -0000	1.15
  @@ -313,7 +313,7 @@
   (see B<User> and B<Group> directives) or can be given as "C<*>" (which means
   "any").  So, a specification of "C<foo>" means the user C<foo>, "C<*:bar>"
   means any user of group C<bar> and "C<*:*>" means any user of any group.
  -Similarily, nobody can be expressed as C<!*:*>.
  +Similarly, nobody can be expressed as C<!*:*>.
   
   Example: C<Acl foo-src/*:FOO_1_0 *:core !badboy;>
   
  @@ -325,7 +325,7 @@
   reports (see B<Report> directive). To disable logging one can use "C<none>" as
   the E<lt>reportidE<gt> (and leave out the ":E<lt>targetE<gt>" part).
   
  -The occurance of the logging message depends how the specified report is
  +The occurrence of the logging message depends how the specified report is
   defined (by C<Report>). After it is produced it is send to E<lt>targetE<gt>
   which can be either an Email address of the form I<user>C<@>I<domain> or a
   filesystem path.
  @@ -505,7 +505,7 @@
   rewrite the functionality of C<log_accum.pl>, C<commit_prep.pl> and
   C<cvs_acls.pl> from scratch. The result is B<OSSP shiela>.
   
  -The name B<OSSP shiela> was choosen just by coincidence and has no
  +The name B<OSSP shiela> was chosen just by coincidence and has no
   related meaning. It was just that while the program was written,
   a code-name was needed. And because Engelschall's first baby was
   forthcoming and Ralf and Daniela Engelschall reviewed lots of names, one
  @@ .

From ossp-cvs-owner@ossp.org  Mon Dec 23 10:09:41 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7496976469; Mon, 23 Dec 2002 10:09:41 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ ChangeLog shiela.pl
Message-Id: <20021223090941.7496976469@mail.ossp.org>
Date: Mon, 23 Dec 2002 10:09:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Dec-2002 10:09:41
  Branch: HEAD                             Handle: 2002122309094000

  Modified files:
    ossp-pkg/shiela         ChangeLog shiela.pl

  Log:
    1. Make sure that /bin:/usr/bin:/sbin:/usr/sbin is in $PATH when
    locating tool.
    
    2. Correctly use the path in "Program uuencode <path>" when running
    uuencode.

  Summary:
    Revision    Changes     Path
    1.26        +8  -0      ossp-pkg/shiela/ChangeLog
    1.39        +3  -3      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	23 Dec 2002 09:05:47 -0000	1.25
  +++ ossp-pkg/shiela/ChangeLog	23 Dec 2002 09:09:40 -0000	1.26
  @@ -11,6 +11,14 @@
   
     Changes between 1.0.1 and 1.0.2 (22-Dec-2002 to xx-Dec-2002):
   
  +   *) Make sure that /bin:/usr/bin:/sbin:/usr/sbin is in $PATH
  +      when locating tool.
  +      [Ralf S. Engelschall]
  +
  +   *) Correctly use the path in "Program uuencode <path>" when
  +      running uuencode.
  +      [Ralf S. Engelschall]
  +
      *) Fixed typos in manual pages.
         [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================================
  $ cvs diff -u -r1.38 -r1.39 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	23 Dec 2002 08:52:22 -0000	1.38
  +++ ossp-pkg/shiela/shiela.pl	23 Dec 2002 09:09:40 -0000	1.39
  @@ -167,7 +167,7 @@
       sub find_program {
           my ($name) = @_;
           my ($prog) = '';
  -        foreach my $dir (split(/:/, "$ENV{PATH}:/usr/local/lib:/usr/lib:/lib")) {
  +        foreach my $dir (split(/:/, "$ENV{PATH}:/bin:/usr/bin:/sbin:/usr/sbin")) {
               if (-x "$dir/$name") {
                   $prog = "$dir/$name";
                   last;
  @@ -1712,7 +1712,7 @@
                       $io->close;
                       system("$RT->{xdelta} delta $RT->{tmpfile}.null " .
                              "$RT->{tmpfile}.all $RT->{tmpfile}.xdelta >/dev/null 2>&1");
  -                    $io = new IO::File "uuencode $RT->{tmpfile}.xdelta $Is.xdelta |"
  +                    $io = new IO::File "$RT->{uuencode} $RT->{tmpfile}.xdelta $Is.xdelta |"
                           || die "unable to open uuencode command pipe for reading";
                       $cvsdiff .= $_ while (<$io>);
                       $io->close;
  @@ -1811,7 +1811,7 @@
                       unlink("$RT->{tmpfile}.xdelta");
                       system("$RT->{xdelta} delta $RT->{tmpfile}.old " .
                              "$RT->{tmpfile}.new $RT->{tmpfile}.xdelta >/dev/null 2>&1");
  -                    $io = new IO::File "uuencode $RT->{tmpfile}.xdelta $Is.xdelta |"
  +                    $io = new IO::File "$RT->{uuencode} $RT->{tmpfile}.xdelta $Is.xdelta |"
                           || die "unable to open uuencode command pipe for reading";
                       $cvsdiff .= $_ while (<$io>);
                       $io->close;
  @@ .

From ossp-cvs-owner@ossp.org  Mon Dec 23 10:12:38 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EB04476469; Mon, 23 Dec 2002 10:12:37 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ devtool.conf
Message-Id: <20021223091237.EB04476469@mail.ossp.org>
Date: Mon, 23 Dec 2002 10:12:37 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Dec-2002 10:12:37
  Branch: HEAD                             Handle: 2002122309123700

  Modified files:
    ossp-pkg/shiela         devtool.conf

  Log:
    make sure the version is committed on release

  Summary:
    Revision    Changes     Path
    1.6         +5  -1      ossp-pkg/shiela/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 devtool.conf
  --- ossp-pkg/shiela/devtool.conf	22 Dec 2002 15:01:17 -0000	1.5
  +++ ossp-pkg/shiela/devtool.conf	23 Dec 2002 09:12:37 -0000	1.6
  @@ -16,7 +16,7 @@
           "$@"
   
   %release
  -    ./devtool version
  +    ./devtool bump
       ./devtool tag
       ./devtool dist
       ./devtool upload
  @@ -30,6 +30,10 @@
       sed -e "s/Version .*(.*)/Version $V/g" <README >README.n && mv README.n README
       sed -e "s/^B<OSSP shiela> [0-9].*/B<OSSP shiela> $V/" <shiela.pod >shiela.pod.n && mv shiela.pod.n shiela.pod
       sed -e "s/^B<OSSP shiela> [0-9].*/B<OSSP shiela> $V/" <shiela-install.pod >shiela-install.pod.n && mv shiela-install.pod.n shiela-install.pod
  +
  +%bump
  +    ./devtool version
  +    cvs ci -m "bump version for release"
   
   %tag
       V=`./shtool version -ltxt -dshort VERSION | sed -e 's;\.;_;g'`
  @@ .

From ossp-cvs-owner@ossp.org  Mon Dec 23 10:13:22 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5CEDC76469; Mon, 23 Dec 2002 10:13:22 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ devtool.conf
Message-Id: <20021223091322.5CEDC76469@mail.ossp.org>
Date: Mon, 23 Dec 2002 10:13:22 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Dec-2002 10:13:22
  Branch: HEAD                             Handle: 2002122309132100

  Modified files:
    ossp-pkg/shiela         devtool.conf

  Log:
    be more descriptive in commits

  Summary:
    Revision    Changes     Path
    1.7         +2  -1      ossp-pkg/shiela/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 devtool.conf
  --- ossp-pkg/shiela/devtool.conf	23 Dec 2002 09:12:37 -0000	1.6
  +++ ossp-pkg/shiela/devtool.conf	23 Dec 2002 09:13:21 -0000	1.7
  @@ -33,7 +33,8 @@
   
   %bump
       ./devtool version
  -    cvs ci -m "bump version for release"
  +    V=`./shtool version -ltxt -d short VERSION`
  +    cvs ci -m "bump to version $V for release"
   
   %tag
       V=`./shtool version -ltxt -dshort VERSION | sed -e 's;\.;_;g'`
  @@ .

From ossp-cvs-owner@ossp.org  Mon Dec 23 10:13:42 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 41637767D6; Mon, 23 Dec 2002 10:13:42 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ ChangeLog README VERSION shiela-install.p...
Message-Id: <20021223091342.41637767D6@mail.ossp.org>
Date: Mon, 23 Dec 2002 10:13:42 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Dec-2002 10:13:42
  Branch: HEAD                             Handle: 2002122309134100

  Modified files:
    ossp-pkg/shiela         ChangeLog README VERSION shiela-install.pod
                            shiela-install.sh shiela.pl shiela.pod

  Log:
    bump to version 1.0.2 for release

  Summary:
    Revision    Changes     Path
    1.27        +1  -1      ossp-pkg/shiela/ChangeLog
    1.10        +1  -1      ossp-pkg/shiela/README
    1.9         +1  -1      ossp-pkg/shiela/VERSION
    1.15        +1  -1      ossp-pkg/shiela/shiela-install.pod
    1.15        +1  -1      ossp-pkg/shiela/shiela-install.sh
    1.40        +1  -1      ossp-pkg/shiela/shiela.pl
    1.16        +1  -1      ossp-pkg/shiela/shiela.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	23 Dec 2002 09:09:40 -0000	1.26
  +++ ossp-pkg/shiela/ChangeLog	23 Dec 2002 09:13:41 -0000	1.27
  @@ -9,7 +9,7 @@
   
     ChangeLog
   
  -  Changes between 1.0.1 and 1.0.2 (22-Dec-2002 to xx-Dec-2002):
  +  Changes between 1.0.1 and 1.0.2 (22-Dec-2002 to 23-Dec-2002):
   
      *) Make sure that /bin:/usr/bin:/sbin:/usr/sbin is in $PATH
         when locating tool.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/README
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 README
  --- ossp-pkg/shiela/README	23 Dec 2002 08:50:34 -0000	1.9
  +++ ossp-pkg/shiela/README	23 Dec 2002 09:13:41 -0000	1.10
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/_| |_|_|\___|_|\__,_|
   
     OSSP shiela - Access Control and Logging Facility for CVS
  -  Version 1.0.1 (22-Dec-2002)
  +  Version 1.0.2 (23-Dec-2002)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/VERSION
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 VERSION
  --- ossp-pkg/shiela/VERSION	23 Dec 2002 08:50:34 -0000	1.8
  +++ ossp-pkg/shiela/VERSION	23 Dec 2002 09:13:41 -0000	1.9
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP shiela (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP shiela, Version 1.0.1 (22-Dec-2002)
  +  This is OSSP shiela, Version 1.0.2 (23-Dec-2002)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-install.pod
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 shiela-install.pod
  --- ossp-pkg/shiela/shiela-install.pod	23 Dec 2002 09:05:47 -0000	1.14
  +++ ossp-pkg/shiela/shiela-install.pod	23 Dec 2002 09:13:41 -0000	1.15
  @@ -33,7 +33,7 @@
   
   =head1 VERSION
   
  -B<OSSP shiela> 1.0.1 (22-Dec-2002)
  +B<OSSP shiela> 1.0.2 (23-Dec-2002)
   
   =head1 DESCRIPTION
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-install.sh
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 shiela-install.sh
  --- ossp-pkg/shiela/shiela-install.sh	23 Dec 2002 08:50:34 -0000	1.14
  +++ ossp-pkg/shiela/shiela-install.sh	23 Dec 2002 09:13:41 -0000	1.15
  @@ -26,7 +26,7 @@
   ##  shiela-install.sh: repository install program (syntax: Bourne-Shell)
   ##
   
  -version="1.0.1"
  +version="1.0.2"
   
   prefix="@prefix@"
   bindir="@bindir@"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================================
  $ cvs diff -u -r1.39 -r1.40 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	23 Dec 2002 09:09:40 -0000	1.39
  +++ ossp-pkg/shiela/shiela.pl	23 Dec 2002 09:13:41 -0000	1.40
  @@ -26,7 +26,7 @@
   ##  shiela.pl: control program (syntax: Perl)
   ##
   
  -my $version = '1.0.1';
  +my $version = '1.0.2';
   
   require 5.005;
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pod
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 shiela.pod
  --- ossp-pkg/shiela/shiela.pod	23 Dec 2002 09:05:47 -0000	1.15
  +++ ossp-pkg/shiela/shiela.pod	23 Dec 2002 09:13:41 -0000	1.16
  @@ -33,7 +33,7 @@
   
   =head1 VERSION
   
  -B<OSSP shiela> 1.0.1 (22-Dec-2002)
  +B<OSSP shiela> 1.0.2 (23-Dec-2002)
   
   =head1 DESCRIPTION
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Dec 23 10:15:13 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1C6B5764A2; Mon, 23 Dec 2002 10:15:13 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/tool/ index.wml ossp-w...
Message-Id: <20021223091513.1C6B5764A2@mail.ossp.org>
Date: Mon, 23 Dec 2002 10:15:13 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   23-Dec-2002 10:15:13
  Branch: HEAD                             Handle: 2002122309151002

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/shiela index.wml

  Log:
    release OSSP shiela 1.0.2

  Summary:
    Revision    Changes     Path
    1.41        +1  -0      ossp-web/new/news.txt
    1.24        +1  -1      ossp-web/pkg/tool/index.wml
    1.8         +2  -2      ossp-web/pkg/tool/shiela/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.40 -r1.41 news.txt
  --- ossp-web/new/news.txt	22 Dec 2002 19:34:50 -0000	1.40
  +++ ossp-web/new/news.txt	23 Dec 2002 09:15:10 -0000	1.41
  @@ -1,3 +1,4 @@
  +23-Dec-2002: Released T<OSSP shiela> 1.0.2
   22-Dec-2002: Released T<OSSP shiela> 1.0.1
   22-Dec-2002: Released T<OSSP shiela> 1.0.0
   16-Dec-2002: Released L<OSSP al> 0.9.1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 index.wml
  --- ossp-web/pkg/tool/index.wml	22 Dec 2002 19:34:50 -0000	1.23
  +++ ossp-web/pkg/tool/index.wml	23 Dec 2002 09:15:11 -0000	1.24
  @@ -20,7 +20,7 @@
               done=100 stable="1.1.1" unstable=1.2a6>
     <pkg_item name="shiela" longname="OSSP shiela" type="tool"
               desc="CVS Access Control and Logging"
  -	        done=100 stable="1.0.1" unstable="none">
  +	        done=100 stable="1.0.2" unstable="none">
     <pkg_item name="eperl" longname="OSSP eperl" type="tool"
               desc="Embedded Perl Language"
   	        done=100 stable="2.2.14" unstable="none">
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/shiela/index.wml
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 index.wml
  --- ossp-web/pkg/tool/shiela/index.wml	22 Dec 2002 20:18:22 -0000	1.7
  +++ ossp-web/pkg/tool/shiela/index.wml	23 Dec 2002 09:15:12 -0000	1.8
  @@ -25,7 +25,7 @@
   <h2>Status</h2>
   
   <pkg_status
  -    stable="1.0.1" stable_date="22-Dec-2002"
  +    stable="1.0.2" stable_date="23-Dec-2002"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -36,7 +36,7 @@
       url=$(FTP_ROOT_URL)/pkg/tool/shiela/
       directory=$(FTP_ROOT_DIR)/pkg/tool/shiela/
       files="shiela-*.tar.gz" 
  -	stable="shiela-1.0.1.tar.gz" unstable="none">
  +	stable="shiela-1.0.2.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Dec 23 12:21:43 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2DEC876559; Mon, 23 Dec 2002 12:21:43 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ shiela.pl
Message-Id: <20021223112143.2DEC876559@mail.ossp.org>
Date: Mon, 23 Dec 2002 12:21:43 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Dec-2002 12:21:43
  Branch: HEAD                             Handle: 2002122311214200

  Modified files:
    ossp-pkg/shiela         shiela.pl

  Log:
    fix comment

  Summary:
    Revision    Changes     Path
    1.41        +1  -1      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================================
  $ cvs diff -u -r1.40 -r1.41 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	23 Dec 2002 09:13:41 -0000	1.40
  +++ ossp-pkg/shiela/shiela.pl	23 Dec 2002 11:21:42 -0000	1.41
  @@ -1293,7 +1293,7 @@
   ##
   ##  VERIFYMSG HOOK
   ##
  -##  We hook into CVS via `commitinfo' to post-process log messages.
  +##  We hook into CVS via `verifymsg' to post-process log messages.
   ##  The intention is to sanitise the results of what the user may have
   ##  `done' while editing the commit log message. If CVS is a standard
   ##  version, this check is advisory only. If CVS contains the RSE
  @@ .

From ossp-cvs-owner@ossp.org  Mon Dec 23 12:32:07 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AB54C7671B; Mon, 23 Dec 2002 12:32:06 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ ChangeLog shiela-install.sh shiela.pl
Message-Id: <20021223113206.AB54C7671B@mail.ossp.org>
Date: Mon, 23 Dec 2002 12:32:06 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Dec-2002 12:32:06
  Branch: HEAD                             Handle: 2002122311320500

  Modified files:
    ossp-pkg/shiela         ChangeLog shiela-install.sh shiela.pl

  Log:
    1. Correctly recognize and configure RSE CVS version in shiela-install
    program.
    
    2. Be smart and allow a RSE CVS version to be driven like a stock CVS
    version in loginfo (still using "sVv" instead of "sVvto" as the flags).

  Summary:
    Revision    Changes     Path
    1.28        +11 -0      ossp-pkg/shiela/ChangeLog
    1.16        +2  -2      ossp-pkg/shiela/shiela-install.sh
    1.42        +5  -2      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	23 Dec 2002 09:13:41 -0000	1.27
  +++ ossp-pkg/shiela/ChangeLog	23 Dec 2002 11:32:05 -0000	1.28
  @@ -9,6 +9,17 @@
   
     ChangeLog
   
  +  Changes between 1.0.2 and 1.0.3 (23-Dec-2002 to xx-Dec-2002):
  +
  +   *) Correctly recognize and configure RSE CVS version in
  +      shiela-install program.
  +      [Ralf S. Engelschall]
  +
  +   *) Be smart and allow a RSE CVS version to be driven like a stock
  +      CVS version in loginfo (still using "sVv" instead of "sVvto" as
  +      the flags).
  +      [Ralf S. Engelschall]
  +
     Changes between 1.0.1 and 1.0.2 (22-Dec-2002 to 23-Dec-2002):
   
      *) Make sure that /bin:/usr/bin:/sbin:/usr/sbin is in $PATH
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-install.sh
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 shiela-install.sh
  --- ossp-pkg/shiela/shiela-install.sh	23 Dec 2002 09:13:41 -0000	1.15
  +++ ossp-pkg/shiela/shiela-install.sh	23 Dec 2002 11:32:05 -0000	1.16
  @@ -594,7 +594,7 @@
   run "(echo ''; echo 'ALL $V_tool_shiela --hook=taginfo'; echo '') >>taginfo"
   cvs_file add taginfo
   
  -if [ ".$CVS_VENDOR" = .OSSP ]; then
  +if [ ".$CVS_VENDOR" = .RSE ]; then
       cvs_file tst importinfo
       run "(echo ''; echo 'ALL $V_tool_shiela --hook=importinfo'; echo '') >>importinfo"
       cvs_file add importinfo
  @@ -612,7 +612,7 @@
   run "(echo ''; echo 'DEFAULT $V_tool_shiela --hook=verifymsg'; echo '') >>verifymsg"
   cvs_file add verifymsg
   
  -if [ ".$CVS_VENDOR" = .OSSP ]; then
  +if [ ".$CVS_VENDOR" = .RSE ]; then
       flags="sVvto"
   else
       flags="sVv"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================================
  $ cvs diff -u -r1.41 -r1.42 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	23 Dec 2002 11:21:42 -0000	1.41
  +++ ossp-pkg/shiela/shiela.pl	23 Dec 2002 11:32:05 -0000	1.42
  @@ -1293,7 +1293,7 @@
   ##
   ##  VERIFYMSG HOOK
   ##
  -##  We hook into CVS via `verifymsg' to post-process log messages.
  +##  We hook into CVS via `commitinfo' to post-process log messages.
   ##  The intention is to sanitise the results of what the user may have
   ##  `done' while editing the commit log message. If CVS is a standard
   ##  version, this check is advisory only. If CVS contains the RSE
  @@ -1512,7 +1512,10 @@
   
       #   if we are using a stock CVS version, we have to determine
       #   extra information (which an RSE CVS version would provide).
  -    if (not $RT->{cvsrse} and not $RT->{cvsop} eq 'import') {
  +    if (    (   (    defined($cvsinfo[0]) 
  +                 and $cvsinfo[0] =~ m|^([^,]+),([^,]+),([^,]+)$|)
  +             or not $RT->{cvsrse}                                )
  +        and not $RT->{cvsop} eq 'import'                          ) {
   
           #   parse CVS commit information
           my $tag = 'HEAD';
  @@ .

From ossp-cvs-owner@ossp.org  Mon Dec 23 12:50:10 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5FD8676559; Mon, 23 Dec 2002 12:50:10 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ ChangeLog shiela.pl
Message-Id: <20021223115010.5FD8676559@mail.ossp.org>
Date: Mon, 23 Dec 2002 12:50:10 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Dec-2002 12:50:10
  Branch: HEAD                             Handle: 2002122311500900

  Modified files:
    ossp-pkg/shiela         ChangeLog shiela.pl

  Log:
    Make sure that the header in reports is not optically destroyed by
    too long columns (as it is the case all the time for PMOD commits
    in the OpenPKG project).

  Summary:
    Revision    Changes     Path
    1.29        +5  -0      ossp-pkg/shiela/ChangeLog
    1.43        +32 -8      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	23 Dec 2002 11:32:05 -0000	1.28
  +++ ossp-pkg/shiela/ChangeLog	23 Dec 2002 11:50:09 -0000	1.29
  @@ -11,6 +11,11 @@
   
     Changes between 1.0.2 and 1.0.3 (23-Dec-2002 to xx-Dec-2002):
   
  +   *) Make sure that the header in reports is not optically destroyed by
  +      too long columns (as it is the case all the time for PMOD commits
  +      in the OpenPKG project).
  +      [Ralf S. Engelschall]
  +
      *) Correctly recognize and configure RSE CVS version in
         shiela-install program.
         [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================================
  $ cvs diff -u -r1.42 -r1.43 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	23 Dec 2002 11:32:05 -0000	1.42
  +++ ossp-pkg/shiela/shiela.pl	23 Dec 2002 11:50:09 -0000	1.43
  @@ -1014,6 +1014,23 @@
   
   ##  _________________________________________________________________
   ##
  +##  Fit text into particular columns.
  +##
  +##  This makes sure a text fits into a particular columns by
  +##  truncating (and extending with "$") if necessary.
  +##  _________________________________________________________________
  +##
  +
  +sub fit_columns {
  +    my ($col, $txt) = @_;
  +    if (length($txt) > $col) {
  +        $txt = substr($txt, 0, $col-1) . '$';
  +    }
  +    return $txt;
  +}
  +
  +##  _________________________________________________________________
  +##
   ##  TAGINFO HOOK
   ##
   ##  We hook into CVS via `taginfo' to check whether user is allowed to
  @@ -2074,8 +2091,8 @@
           $cvsbranches{$e->{branch}} = 0 if (not defined($cvsbranches{$e->{branch}}));
           $cvsbranches{$e->{branch}}++;
       }
  -    $IN->{cvsbranch} = join(', ', keys(%cvsbranches));
  -    $IN->{cvsmodule} = join(', ', keys(%cvsmodules));
  +    $IN->{cvsbranch} = join(' ', keys(%cvsbranches));
  +    $IN->{cvsmodule} = join(' ', keys(%cvsmodules));
   
       #
       #   Finally generate the logging message.
  @@ -2104,13 +2121,20 @@
               my @moy = ( 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
                           'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' );
               my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time());
  -            my $date = sprintf("%02d-%s-%04d %02d:%02d:%02d",
  -                               $mday, $moy[$mon], 1900+$year, $hour, $min, $sec);
  +            my $txt_date = sprintf("%02d-%s-%04d %02d:%02d:%02d",
  +                                   $mday, $moy[$mon], 1900+$year, $hour, $min, $sec);
  +            my $txt_server = &fit_columns(32, $CF->{Repository}->{Host});
  +            my $txt_root   = &fit_columns(32, $CF->{Repository}->{Path});
  +            my $txt_module = &fit_columns(32, $IN->{cvsmodule});
  +            my $txt_branch = &fit_columns(32, $IN->{cvsbranch});
  +            my $txt_name   = &fit_columns(32, $RT->{username});
  +            my $txt_email  = &fit_columns(32, $RT->{usermail});
  +            my $txt_handle = &fit_columns(32, $IN->{handle});
               $O .= "\n" .
  -                $prefix . sprintf("%-40s %s\n", "Server: ".$CF->{Repository}->{Host}, "Name:   ".$RT->{username}) .
  -                $prefix . sprintf("%-40s %s\n", "Root:   ".$CF->{Repository}->{Path}, "Email:  ".$RT->{usermail}) .
  -                $prefix . sprintf("%-40s %s\n", "Module: ".$IN->{cvsmodule},          "Date:   ".$date) .
  -                $prefix . sprintf("%-40s %s\n", "Branch: ".$IN->{cvsbranch},          "Handle: ".$IN->{handle});
  +                $prefix . sprintf("%-40s %s\n", "Server: ".$txt_server, "Name:   ".$txt_name) .
  +                $prefix . sprintf("%-40s %s\n", "Root:   ".$txt_root,   "Email:  ".$txt_email) .
  +                $prefix . sprintf("%-40s %s\n", "Module: ".$txt_module, "Date:   ".$txt_date) .
  +                $prefix . sprintf("%-40s %s\n", "Branch: ".$txt_branch, "Handle: ".$txt_handle);
           }
   
           #   the file list
  @@ .

From ossp-cvs-owner@ossp.org  Mon Dec 23 13:00:12 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E2E1B76559; Mon, 23 Dec 2002 13:00:11 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ shiela-install.pod
Message-Id: <20021223120011.E2E1B76559@mail.ossp.org>
Date: Mon, 23 Dec 2002 13:00:11 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Dec-2002 13:00:11
  Branch: HEAD                             Handle: 2002122312000700

  Modified files:
    ossp-pkg/shiela         shiela-install.pod

  Log:
    more documentation

  Summary:
    Revision    Changes     Path
    1.16        +70 -14     ossp-pkg/shiela/shiela-install.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-install.pod
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 shiela-install.pod
  --- ossp-pkg/shiela/shiela-install.pod	23 Dec 2002 09:13:41 -0000	1.15
  +++ ossp-pkg/shiela/shiela-install.pod	23 Dec 2002 12:00:07 -0000	1.16
  @@ -77,19 +77,19 @@
   
   add to C<$CVSROOT/CVSROOT/importinfo> (the hook for checking import
   operations): ``C<ALL $CVSROOT/CVSROOT/shiela --hook=importinfo>''. This
  -assumes that you are using the OSSP CVS version. If you use a stock CVS
  -version, you have to skip this step and live with the fact that `C<cvs
  -import>' commands cannot be access controlled by B<OSSP shiela> (because then
  -this hook does not exists at all).
  +assumes that you are using a CVS version with RSE patches applied. If
  +you use a stock CVS version, you have to skip this step and live with
  +the fact that `C<cvs import>' commands cannot be access controlled by
  +B<OSSP shiela> (because then this hook does not exists at all).
   
   =item B<6.>
   
   add to C<$CVSROOT/CVSROOT/admininfo> (the hook for checking admin
   operations): ``C<ALL $CVSROOT/CVSROOT/shiela --hook=admininfo>''. This
  -requires that you are using the OSSP CVS version. If you use a stock CVS
  -version, you have to skip this step and life with the fact that `C<cvs
  -admin>' commands cannot be access controlled by B<OSSP shiela> (because then
  -this hook does not exists at all).
  +requires that you are using a CVS version with RSE patches applied. If
  +you use a stock CVS version, you have to skip this step and life with
  +the fact that `C<cvs admin>' commands cannot be access controlled by
  +B<OSSP shiela> (because then this hook does not exists at all).
   
   =item B<7.>
   
  @@ -105,12 +105,12 @@
   
   add to C<$CVSROOT/CVSROOT/loginfo> (the hook for performing logging):
   ``C<ALL $CVSROOT/CVSROOT/shiela --hook=loginfo %{sVvto}>''. This
  -requires that you use the OSSP CVS version. If you use a stock CVS
  -version, use ``C<ALL $CVSROOT/CVSROOT/shiela --hook=loginfo %{sVv}>''
  -instead and live with the fact that B<OSSP shiela>'s run-time efficiency is
  -slightly decreased and branch recognition might be less correct (because
  -B<OSSP shiela> has to determine details the hard way which CVS already would
  -know easily).
  +requires that you use a CVS version with RSE patches applied. If you use
  +a stock CVS version, use ``C<ALL $CVSROOT/CVSROOT/shiela --hook=loginfo
  +%{sVv}>'' instead and live with the fact that B<OSSP shiela>'s run-time
  +efficiency is slightly decreased and branch recognition might be less
  +correct (because B<OSSP shiela> has to determine details the hard way
  +which CVS already would know easily).
   
   =item B<10.>
   
  @@ -137,6 +137,62 @@
   repos_path=/tmp/cvs>'' sets the default path for the question about the
   CVS repository to C</tmp/cvs>. Additionally one can specify C<batch=yes>
   which runs B<shiela-install> non-interactively.
  +
  +=head1 CVS INTERNAL PROCESSING
  +
  +The administrative files in C<$CVSROOT/CVSROOT/> are consulted by CVS
  +internally in dependency of the used F<cvs> command. For your reference,
  +here are the processing steps CVS performs and into which B<OSSP shiela>
  +hooks into:
  +
  +=over 1
  +
  +=item On "C<cvs checkout>":
  +
  + 1. CVSROOT/config       (general configuration)
  + 2. CVSROOT/modules      (determine module names)
  + 3. CVSROOT/cvswrappers  (file handling)
  + 4. CVSROOT/history      (logging of the commit step)
  +
  +=item On "C<cvs commit>":
  +
  + 1. CVSROOT/config       (general configuration)
  + 2. CVSROOT/modules      (determine module names)
  + 3. CVSROOT/commitinfo   (access control)
  + 4. CVSROOT/rcsinfo      (log message template)
  + 5. CVSROOT/editinfo     (run the log message editor)
  + 6. CVSROOT/verifymsg    (evaluate/adjust log message after editing)
  + 7. CVSROOT/cvswrappers  (file handling)
  + 8. CVSROOT/loginfo      (extra logging after commit)
  + 9. CVSROOT/history      (logging of the commit step)
  +
  +=item On "C<cvs import>":
  +
  + 1. CVSROOT/config       (general configuration)
  + 2. CVSROOT/modules      (determine module names)
  + 3. CVSROOT/importinfo   (access control)
  + 4. CVSROOT/rcsinfo      (log message template)
  + 5. CVSROOT/editinfo     (run the log message editor)
  + 6. CVSROOT/verifymsg    (evaluate/adjust log message after editing)
  + 7. CVSROOT/cvswrappers  (file handling)
  + 8. CVSROOT/loginfo      (extra logging after commit)
  + 9. CVSROOT/history      (logging of the commit step)
  +
  +=item On "C<cvs tag>":
  +
  + 1. CVSROOT/config       (general configuration)
  + 2. CVSROOT/modules      (determine module names)
  + 3. CVSROOT/taginfo      (access control and tag evaluation)
  + 4. CVSROOT/history      (logging of the tag step)
  +
  +=item On "C<cvs admin>":
  +
  + 1. CVSROOT/config       (general configuration)
  + 2. CVSROOT/modules      (determine module names)
  + 3. CVSROOT/admininfo    (access control)
  + 4. CVSROOT/history      (logging of the admin step)
  +
  +=back
   
   =head1 SEE ALSO
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Dec 23 13:01:09 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F020476559; Mon, 23 Dec 2002 13:01:08 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ ChangeLog
Message-Id: <20021223120108.F020476559@mail.ossp.org>
Date: Mon, 23 Dec 2002 13:01:08 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Dec-2002 13:01:08
  Branch: HEAD                             Handle: 2002122312010800

  Modified files:
    ossp-pkg/shiela         ChangeLog

  Log:
    remember doc addition

  Summary:
    Revision    Changes     Path
    1.30        +4  -0      ossp-pkg/shiela/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	23 Dec 2002 11:50:09 -0000	1.29
  +++ ossp-pkg/shiela/ChangeLog	23 Dec 2002 12:01:08 -0000	1.30
  @@ -11,6 +11,10 @@
   
     Changes between 1.0.2 and 1.0.3 (23-Dec-2002 to xx-Dec-2002):
   
  +   *) Added a section to the shiela-install manual page about
  +      the internal processing steps performed by CVS.
  +      [Ralf S. Engelschall]
  +
      *) Make sure that the header in reports is not optically destroyed by
         too long columns (as it is the case all the time for PMOD commits
         in the OpenPKG project).
  @@ .

From ossp-cvs-owner@ossp.org  Mon Dec 23 13:08:36 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DFAD676559; Mon, 23 Dec 2002 13:08:35 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ ChangeLog shiela-install.pod shiela.pod
Message-Id: <20021223120835.DFAD676559@mail.ossp.org>
Date: Mon, 23 Dec 2002 13:08:35 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Dec-2002 13:08:35
  Branch: HEAD                             Handle: 2002122312083500

  Modified files:
    ossp-pkg/shiela         ChangeLog shiela-install.pod shiela.pod

  Log:
    mention the details about the CVS version with RSE patches applied

  Summary:
    Revision    Changes     Path
    1.31        +4  -3      ossp-pkg/shiela/ChangeLog
    1.17        +32 -18     ossp-pkg/shiela/shiela-install.pod
    1.17        +4  -0      ossp-pkg/shiela/shiela.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	23 Dec 2002 12:01:08 -0000	1.30
  +++ ossp-pkg/shiela/ChangeLog	23 Dec 2002 12:08:35 -0000	1.31
  @@ -9,10 +9,11 @@
   
     ChangeLog
   
  -  Changes between 1.0.2 and 1.0.3 (23-Dec-2002 to xx-Dec-2002):
  +  Changes between 1.0.2 and 1.0.3 (23-Dec-2002 to 23-Dec-2002):
   
  -   *) Added a section to the shiela-install manual page about
  -      the internal processing steps performed by CVS.
  +   *) Added a section to the shiela-install manual page about the
  +      internal processing steps performed by CVS. Additionally mention
  +      the details about the CVS version with RSE patches applied.
         [Ralf S. Engelschall]
   
      *) Make sure that the header in reports is not optically destroyed by
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-install.pod
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 shiela-install.pod
  --- ossp-pkg/shiela/shiela-install.pod	23 Dec 2002 12:00:07 -0000	1.16
  +++ ossp-pkg/shiela/shiela-install.pod	23 Dec 2002 12:08:35 -0000	1.17
  @@ -77,19 +77,21 @@
   
   add to C<$CVSROOT/CVSROOT/importinfo> (the hook for checking import
   operations): ``C<ALL $CVSROOT/CVSROOT/shiela --hook=importinfo>''. This
  -assumes that you are using a CVS version with RSE patches applied. If
  -you use a stock CVS version, you have to skip this step and live with
  -the fact that `C<cvs import>' commands cannot be access controlled by
  -B<OSSP shiela> (because then this hook does not exists at all).
  +assumes that you are using a CVS version with RSE patches applied (see
  +below). If you use a stock CVS version, you have to skip this step
  +and live with the fact that `C<cvs import>' commands cannot be access
  +controlled by B<OSSP shiela> (because then this hook does not exists at
  +all).
   
   =item B<6.>
   
   add to C<$CVSROOT/CVSROOT/admininfo> (the hook for checking admin
   operations): ``C<ALL $CVSROOT/CVSROOT/shiela --hook=admininfo>''. This
  -requires that you are using a CVS version with RSE patches applied. If
  -you use a stock CVS version, you have to skip this step and life with
  -the fact that `C<cvs admin>' commands cannot be access controlled by
  -B<OSSP shiela> (because then this hook does not exists at all).
  +requires that you are using a CVS version with RSE patches applied (see
  +below). If you use a stock CVS version, you have to skip this step
  +and life with the fact that `C<cvs admin>' commands cannot be access
  +controlled by B<OSSP shiela> (because then this hook does not exists at
  +all).
   
   =item B<7.>
   
  @@ -104,13 +106,13 @@
   =item B<9.>
   
   add to C<$CVSROOT/CVSROOT/loginfo> (the hook for performing logging):
  -``C<ALL $CVSROOT/CVSROOT/shiela --hook=loginfo %{sVvto}>''. This
  -requires that you use a CVS version with RSE patches applied. If you use
  -a stock CVS version, use ``C<ALL $CVSROOT/CVSROOT/shiela --hook=loginfo
  -%{sVv}>'' instead and live with the fact that B<OSSP shiela>'s run-time
  -efficiency is slightly decreased and branch recognition might be less
  -correct (because B<OSSP shiela> has to determine details the hard way
  -which CVS already would know easily).
  +``C<ALL $CVSROOT/CVSROOT/shiela --hook=loginfo %{sVvto}>''.
  +This requires that you use a CVS version with RSE patches
  +applied (see below). If you use a stock CVS version, use ``C<ALL
  +$CVSROOT/CVSROOT/shiela --hook=loginfo %{sVv}>'' instead and live with
  +the fact that B<OSSP shiela>'s run-time efficiency is slightly decreased
  +and branch recognition might be less correct (because B<OSSP shiela> has
  +to determine details the hard way which CVS already would know easily).
   
   =item B<10.>
   
  @@ -178,14 +180,14 @@
    8. CVSROOT/loginfo      (extra logging after commit)
    9. CVSROOT/history      (logging of the commit step)
   
  -=item On "C<cvs tag>":
  +=item On "C<cvs tag>" (CVS with RSE patches only):
   
    1. CVSROOT/config       (general configuration)
    2. CVSROOT/modules      (determine module names)
    3. CVSROOT/taginfo      (access control and tag evaluation)
    4. CVSROOT/history      (logging of the tag step)
   
  -=item On "C<cvs admin>":
  +=item On "C<cvs admin>" (CVS with RSE patches only):
   
    1. CVSROOT/config       (general configuration)
    2. CVSROOT/modules      (determine module names)
  @@ -194,9 +196,21 @@
   
   =back
   
  +=head1 CVS WITH RSE PATCHES APPLIED
  +
  +The stock CVS vendor version you can find on http://www.cvshome.org/.
  +Although B<OSSP shiela> works fine with just this version, it
  +unfortunately lacks some important features which make B<OSSP shiela>'s
  +processing less strong. For instance, the stock CVS does not allow
  +B<OSSP shiela> to apply access control to the "C<cvs tag>" and "C<cvs
  +admin>" commands. Hence Ralf S. Engelschall extended CVS with those
  +features (and more) and maintains a patch set in the "cvs" package of
  +his B<OpenPKG> project (http://www.ossp.org/). You can find the latest
  +patch set under http://cvs.openpkg.org/openpkg-src/cvs/cvs.patches.rse
  +
   =head1 SEE ALSO
   
  -shiela(1).
  +cvs(1), shiela(1).
   
   =head1 AUTHOR
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pod
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 shiela.pod
  --- ossp-pkg/shiela/shiela.pod	23 Dec 2002 09:13:41 -0000	1.16
  +++ ossp-pkg/shiela/shiela.pod	23 Dec 2002 12:08:35 -0000	1.17
  @@ -531,6 +531,10 @@
   
   =back
   
  +=head1 SEE ALSO
  +
  +cvs(1).
  +
   =head1 AUTHOR
   
    Ralf S. Engelschall
  @@ .

From ossp-cvs-owner@ossp.org  Mon Dec 23 13:13:28 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7C76676559; Mon, 23 Dec 2002 13:13:28 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ ChangeLog shiela.pl
Message-Id: <20021223121328.7C76676559@mail.ossp.org>
Date: Mon, 23 Dec 2002 13:13:28 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Dec-2002 13:13:28
  Branch: HEAD                             Handle: 2002122312132700

  Modified files:
    ossp-pkg/shiela         ChangeLog shiela.pl

  Log:
    CVS since 1.11.2 allows verifymsg-hooked scripts to actually
    change the message and reads the contents back. So we do no longer
    require CVS with RSE patches applied for the verifymsg hook to be
    activated.

  Summary:
    Revision    Changes     Path
    1.32        +6  -0      ossp-pkg/shiela/ChangeLog
    1.44        +6  -9      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	23 Dec 2002 12:08:35 -0000	1.31
  +++ ossp-pkg/shiela/ChangeLog	23 Dec 2002 12:13:27 -0000	1.32
  @@ -11,6 +11,12 @@
   
     Changes between 1.0.2 and 1.0.3 (23-Dec-2002 to 23-Dec-2002):
   
  +   *) CVS since 1.11.2 allows verifymsg-hooked scripts to actually
  +      change the message and reads the contents back. So we do no longer
  +      require CVS with RSE patches applied for the verifymsg hook to be
  +      activated.
  +      [Ralf S. Engelschall]
  +
      *) Added a section to the shiela-install manual page about the
         internal processing steps performed by CVS. Additionally mention
         the details about the CVS version with RSE patches applied.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================================
  $ cvs diff -u -r1.43 -r1.44 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	23 Dec 2002 11:50:09 -0000	1.43
  +++ ossp-pkg/shiela/shiela.pl	23 Dec 2002 12:13:27 -0000	1.44
  @@ -1310,12 +1310,12 @@
   ##
   ##  VERIFYMSG HOOK
   ##
  -##  We hook into CVS via `commitinfo' to post-process log messages.
  -##  The intention is to sanitise the results of what the user may have
  -##  `done' while editing the commit log message. If CVS is a standard
  -##  version, this check is advisory only. If CVS contains the RSE
  -##  patches, the log message is changed and CVS reads back the contents
  -##  so that this script can actually make changes.
  +##  We hook into CVS via `verifymsg' to post-process log messages. The
  +##  intention is to sanitise the results of what the user may have
  +##  `done' while editing the commit log message. If CVS is an anchient
  +##  version, this check is advisory only. If CVS is at least version
  +##  1.11.2, the log message can be changed and CVS actually reads back
  +##  the contents so that this script can actually make changes.
   ##
   ##  We are called by CVS with a single argument: the path to the log
   ##  message file.
  @@ -1325,9 +1325,6 @@
   sub hook_verifymsg {
       my ($PA, $RT, $CF) = @_;
       my $rv = 0;
  -
  -    #   we require the RSE patches for operation
  -    return $rv if (not $RT->{cvsrse});
   
       #   suck in the log message
       my $logfile = $PA->{ARG}->[0];
  @@ .

From ossp-cvs-owner@ossp.org  Mon Dec 23 14:08:44 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 245A576559; Mon, 23 Dec 2002 14:08:44 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ TODO
Message-Id: <20021223130844.245A576559@mail.ossp.org>
Date: Mon, 23 Dec 2002 14:08:44 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Dec-2002 14:08:44
  Branch: HEAD                             Handle: 2002122313084300

  Modified files:
    ossp-pkg/shiela         TODO

  Log:
    restructure and update TODO

  Summary:
    Revision    Changes     Path
    1.6         +5  -11     ossp-pkg/shiela/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/TODO
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 TODO
  --- ossp-pkg/shiela/TODO	22 Dec 2002 17:23:24 -0000	1.5
  +++ ossp-pkg/shiela/TODO	23 Dec 2002 13:08:43 -0000	1.6
  @@ -8,9 +8,12 @@
     ____________________________________________________________________
   
     TODO
  +  ----
   
  -  For version 1.1:
  -  ----------------
  +  none
  +
  +  CANDO
  +  -----
   
     o  Subject can be compressed by reducing common prefix and 
        just repeating the subdirs together with the files:
  @@ -25,15 +28,6 @@
   
     o  It perhaps should read in shiela.msg in order to know
        what to kick out when compressing the message. 
  -
  -  For version 1.2:
  -  ----------------
  -
  -  o  Under MIME mails, the details could include complete files
  -     really as is without the need to uuencode them first.
  -
  -  o  Perhaps replace do_file() mit an IO::File based class?
  -     But keep always in mind \n characters when coming in and going out.
   
     o  Support for code freeze time (ranges) and automatic pre-time
        messages and MOTDs for reminder under cvs commit, cvs admin and cvs
  @@ .

From ossp-cvs-owner@ossp.org  Mon Dec 23 14:10:57 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0DA5476559; Mon, 23 Dec 2002 14:10:56 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ README VERSION shiela-install.pod shiela-...
Message-Id: <20021223131056.0DA5476559@mail.ossp.org>
Date: Mon, 23 Dec 2002 14:10:56 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Dec-2002 14:10:56
  Branch: HEAD                             Handle: 2002122313105600

  Modified files:
    ossp-pkg/shiela         README VERSION shiela-install.pod
                            shiela-install.sh shiela.pl shiela.pod

  Log:
    bump to version 1.0.3 for release

  Summary:
    Revision    Changes     Path
    1.11        +1  -1      ossp-pkg/shiela/README
    1.10        +1  -1      ossp-pkg/shiela/VERSION
    1.18        +1  -1      ossp-pkg/shiela/shiela-install.pod
    1.17        +1  -1      ossp-pkg/shiela/shiela-install.sh
    1.45        +1  -1      ossp-pkg/shiela/shiela.pl
    1.18        +1  -1      ossp-pkg/shiela/shiela.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/README
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 README
  --- ossp-pkg/shiela/README	23 Dec 2002 09:13:41 -0000	1.10
  +++ ossp-pkg/shiela/README	23 Dec 2002 13:10:56 -0000	1.11
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/_| |_|_|\___|_|\__,_|
   
     OSSP shiela - Access Control and Logging Facility for CVS
  -  Version 1.0.2 (23-Dec-2002)
  +  Version 1.0.3 (23-Dec-2002)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/VERSION
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 VERSION
  --- ossp-pkg/shiela/VERSION	23 Dec 2002 09:13:41 -0000	1.9
  +++ ossp-pkg/shiela/VERSION	23 Dec 2002 13:10:56 -0000	1.10
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP shiela (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP shiela, Version 1.0.2 (23-Dec-2002)
  +  This is OSSP shiela, Version 1.0.3 (23-Dec-2002)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-install.pod
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 shiela-install.pod
  --- ossp-pkg/shiela/shiela-install.pod	23 Dec 2002 12:08:35 -0000	1.17
  +++ ossp-pkg/shiela/shiela-install.pod	23 Dec 2002 13:10:56 -0000	1.18
  @@ -33,7 +33,7 @@
   
   =head1 VERSION
   
  -B<OSSP shiela> 1.0.2 (23-Dec-2002)
  +B<OSSP shiela> 1.0.3 (23-Dec-2002)
   
   =head1 DESCRIPTION
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-install.sh
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 shiela-install.sh
  --- ossp-pkg/shiela/shiela-install.sh	23 Dec 2002 11:32:05 -0000	1.16
  +++ ossp-pkg/shiela/shiela-install.sh	23 Dec 2002 13:10:56 -0000	1.17
  @@ -26,7 +26,7 @@
   ##  shiela-install.sh: repository install program (syntax: Bourne-Shell)
   ##
   
  -version="1.0.2"
  +version="1.0.3"
   
   prefix="@prefix@"
   bindir="@bindir@"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================================
  $ cvs diff -u -r1.44 -r1.45 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	23 Dec 2002 12:13:27 -0000	1.44
  +++ ossp-pkg/shiela/shiela.pl	23 Dec 2002 13:10:56 -0000	1.45
  @@ -26,7 +26,7 @@
   ##  shiela.pl: control program (syntax: Perl)
   ##
   
  -my $version = '1.0.2';
  +my $version = '1.0.3';
   
   require 5.005;
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pod
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 shiela.pod
  --- ossp-pkg/shiela/shiela.pod	23 Dec 2002 12:08:35 -0000	1.17
  +++ ossp-pkg/shiela/shiela.pod	23 Dec 2002 13:10:56 -0000	1.18
  @@ -33,7 +33,7 @@
   
   =head1 VERSION
   
  -B<OSSP shiela> 1.0.2 (23-Dec-2002)
  +B<OSSP shiela> 1.0.3 (23-Dec-2002)
   
   =head1 DESCRIPTION
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Dec 23 14:14:18 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 80A0176559; Mon, 23 Dec 2002 14:14:18 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/tool/ index.wml ossp-w...
Message-Id: <20021223131418.80A0176559@mail.ossp.org>
Date: Mon, 23 Dec 2002 14:14:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   23-Dec-2002 14:14:18
  Branch: HEAD                             Handle: 2002122313141601

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/shiela index.wml

  Log:
    release OSSP shiela 1.0.3

  Summary:
    Revision    Changes     Path
    1.42        +1  -0      ossp-web/new/news.txt
    1.25        +1  -1      ossp-web/pkg/tool/index.wml
    1.9         +2  -2      ossp-web/pkg/tool/shiela/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.41 -r1.42 news.txt
  --- ossp-web/new/news.txt	23 Dec 2002 09:15:10 -0000	1.41
  +++ ossp-web/new/news.txt	23 Dec 2002 13:14:16 -0000	1.42
  @@ -1,3 +1,4 @@
  +23-Dec-2002: Released T<OSSP shiela> 1.0.3
   23-Dec-2002: Released T<OSSP shiela> 1.0.2
   22-Dec-2002: Released T<OSSP shiela> 1.0.1
   22-Dec-2002: Released T<OSSP shiela> 1.0.0
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 index.wml
  --- ossp-web/pkg/tool/index.wml	23 Dec 2002 09:15:11 -0000	1.24
  +++ ossp-web/pkg/tool/index.wml	23 Dec 2002 13:14:17 -0000	1.25
  @@ -20,7 +20,7 @@
               done=100 stable="1.1.1" unstable=1.2a6>
     <pkg_item name="shiela" longname="OSSP shiela" type="tool"
               desc="CVS Access Control and Logging"
  -	        done=100 stable="1.0.2" unstable="none">
  +	        done=100 stable="1.0.3" unstable="none">
     <pkg_item name="eperl" longname="OSSP eperl" type="tool"
               desc="Embedded Perl Language"
   	        done=100 stable="2.2.14" unstable="none">
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/shiela/index.wml
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 index.wml
  --- ossp-web/pkg/tool/shiela/index.wml	23 Dec 2002 09:15:12 -0000	1.8
  +++ ossp-web/pkg/tool/shiela/index.wml	23 Dec 2002 13:14:17 -0000	1.9
  @@ -25,7 +25,7 @@
   <h2>Status</h2>
   
   <pkg_status
  -    stable="1.0.2" stable_date="23-Dec-2002"
  +    stable="1.0.3" stable_date="23-Dec-2002"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -36,7 +36,7 @@
       url=$(FTP_ROOT_URL)/pkg/tool/shiela/
       directory=$(FTP_ROOT_DIR)/pkg/tool/shiela/
       files="shiela-*.tar.gz" 
  -	stable="shiela-1.0.2.tar.gz" unstable="none">
  +	stable="shiela-1.0.3.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Dec 23 15:08:39 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1A4C676559; Mon, 23 Dec 2002 15:08:39 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ ChangeLog shiela.pl shiela.pod
Message-Id: <20021223140839.1A4C676559@mail.ossp.org>
Date: Mon, 23 Dec 2002 15:08:39 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Dec-2002 15:08:38
  Branch: HEAD                             Handle: 2002122314083800

  Modified files:
    ossp-pkg/shiela         ChangeLog shiela.pl shiela.pod

  Log:
    1. Added "Setenv <variable <value>" configuration command to
    "Environment" configuration section which allows one to set
    environment variables like PATH, etc. This especially allows now
    non-absolute paths on "Program" configuration commands.
    
    2. Fixed indentation on "Content files" report part.

  Summary:
    Revision    Changes     Path
    1.33        +11 -0      ossp-pkg/shiela/ChangeLog
    1.46        +24 -13     ossp-pkg/shiela/shiela.pl
    1.19        +9  -0      ossp-pkg/shiela/shiela.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	23 Dec 2002 12:13:27 -0000	1.32
  +++ ossp-pkg/shiela/ChangeLog	23 Dec 2002 14:08:38 -0000	1.33
  @@ -9,6 +9,17 @@
   
     ChangeLog
   
  +  Changes between 1.0.3 and 1.0.4 (23-Dec-2002 to 23-Dec-2002):
  +
  +   *) Added "Setenv <variable <value>" configuration command to
  +      "Environment" configuration section which allows one to set
  +      environment variables like PATH, etc. This especially allows now
  +      non-absolute paths on "Program" configuration commands.
  +      [Ralf S. Engelschall]
  +
  +   *) Fixed indentation on "Content files" report part.
  +      [Ralf S. Engelschall]
  +
     Changes between 1.0.2 and 1.0.3 (23-Dec-2002 to 23-Dec-2002):
   
      *) CVS since 1.11.2 allows verifymsg-hooked scripts to actually
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================================
  $ cvs diff -u -r1.45 -r1.46 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	23 Dec 2002 13:10:56 -0000	1.45
  +++ ossp-pkg/shiela/shiela.pl	23 Dec 2002 14:08:38 -0000	1.46
  @@ -54,6 +54,7 @@
   $|++;
   umask(002);
   delete $ENV{TZ};
  +$ENV{PATH} = "/bin:/usr/bin:/sbin:/usr/sbin";
   
   #   Generic program error handler
   $SIG{__DIE__} = sub {
  @@ -98,7 +99,7 @@
       $rv = &hook_loginfo($PA, $RT, $CF);
   }
   else {
  -    die "unknown hook (use --hook option)";
  +    die "unknown processing stage (use --hook option)";
   }
   exit($rv);
   
  @@ -163,11 +164,16 @@
       }
       $RT->{usergroups} = join(',', @G);
   
  +    #   optionally set environment variables (like PATH)
  +    foreach my $var (keys(%{$CF->{Environment}->{Setenv}})) {
  +        $ENV{PATH} = $CF->{Environment}->{Setenv}->{$var};
  +    }
  +
       #   determine various program paths
       sub find_program {
           my ($name) = @_;
           my ($prog) = '';
  -        foreach my $dir (split(/:/, "$ENV{PATH}:/bin:/usr/bin:/sbin:/usr/sbin")) {
  +        foreach my $dir (split(/:/, $ENV{PATH})) {
               if (-x "$dir/$name") {
                   $prog = "$dir/$name";
                   last;
  @@ -393,7 +399,8 @@
               'Report' => {}
           },
           'Environment' => {
  -            'Program' => {}
  +            'Program' => {},
  +            'Setenv'  => {}
           }
       };
       my $cf = &parse_config($t, \&parse_config_callback, $CF);
  @@ -452,6 +459,9 @@
           elsif ($action eq 'CMD' and $cf->[0] eq 'Program') {
               $CF->{Environment}->{Program}->{$cf->[1]} = $cf->[2];
           }
  +        elsif ($action eq 'CMD' and $cf->[0] eq 'Setenv') {
  +            $CF->{Environment}->{Setenv}->{$cf->[1]} = $cf->[2];
  +        }
           return $cf;
       }
       return $CF;
  @@ -2148,10 +2158,10 @@
                   my $branch;
                   foreach $branch (sort(keys(%{$list}))) {
                       if ($branch eq 'HEAD') {
  -                        $O .= $prefix."$header:\n";
  +                        $O .= sprintf("%s%s\n", $prefix, "$header:");
                       }
                       else {
  -                        $O .= $prefix.sprintf("%-25s %s\n", "$header:", "(Branch: $branch)");
  +                        $O .= sprintf("%s%-25s %s\n", $prefix, "$header:", "(Branch: $branch)");
                       }
                       $O .= &format_branch($prefix, $header, $branch, $list->{$branch});
                   }
  @@ -2173,27 +2183,28 @@
                   my $first = 1;
                   my $col = 0;
                   foreach $file (sort(@{$list})) {
  -                    if ($col+length($file)+1 > 78) {
  +                    if (($col + 1 + length($file)) > 78) {
                           $O .= "\n";
                           $col = 0;
                       }
                       if ($col == 0) {
                           if ($first) {
  -                            if (length($dir) > 25) {
  -                                $O .= $prefix.sprintf("%s\n$prefix%-25s", "  $dir", "");
  +                            if ((2+length($dir)) > 25) {
  +                                $O .= sprintf("%s%s\n", $prefix, "  " . $dir);
  +                                $O .= sprintf("%s%-25s", $prefix, "");
                               }
                               else {
  -                                $O .= $prefix.sprintf("%-25s", "  $dir");
  +                                $O .= sprintf("%s%-25s", $prefix, "  " . $dir);
                               }
                               $first = 0;
                           }
                           else {
  -                            $O .= $prefix.sprintf("%-25s", "");
  +                            $O .= sprintf("%s%-25s", $prefix, "");
                           }
  -                        $col += length($prefix)+25;
  +                        $col += length($prefix) + 25;
                       }
  -                    $O .= " $file";
  -                    $col += length($file)+1;
  +                    $O .= " " . $file;
  +                    $col += 1 + length($file);
                   }
                   $O .= "\n" if ($O !~ m|\n$|s);
                   return $O;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pod
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 shiela.pod
  --- ossp-pkg/shiela/shiela.pod	23 Dec 2002 13:10:56 -0000	1.18
  +++ ossp-pkg/shiela/shiela.pod	23 Dec 2002 14:08:38 -0000	1.19
  @@ -88,6 +88,7 @@
   structure:
   
    Environment {
  +     [Setenv <variable> <value>; [...]]
        [Program sendmail <path>;]
        [Program cvs <path>;]
        [Program diff <path>;]
  @@ -99,6 +100,13 @@
   
   =over 4
   
  +=item B<Setenv E<lt>variableE<gt> E<lt>valueE<gt>;>
  +
  +This sets (and overrides) a environment variable with a particular
  +value. A common use is to set the environment variable C<PATH>, so the
  +path arguments on B<Program> configuration lines can be non-absolute
  +paths.
  +
   =item B<Program sendmail E<lt>pathE<gt>;>
   
   This overrides the path to the F<sendmail> executable. Per default
  @@ -408,6 +416,7 @@
   
    #   override the run-time environment
    Environment {
  +     Setenv  PATH     /bin:/usr/bin:/sbin:/usr/sbin;
        Program sendmail /e/foo/sw/bin/sendmail;
        Program cvs      /e/foo/sw/bin/cvs;
        Program diff     /e/foo/sw/bin/diff;
  @@ .

From ossp-cvs-owner@ossp.org  Mon Dec 23 15:13:10 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2B1F3767C3; Mon, 23 Dec 2002 15:13:10 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ shiela-install.sh
Message-Id: <20021223141310.2B1F3767C3@mail.ossp.org>
Date: Mon, 23 Dec 2002 15:13:10 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Dec-2002 15:13:10
  Branch: HEAD                             Handle: 2002122314130900

  Modified files:
    ossp-pkg/shiela         shiela-install.sh

  Log:
    allow PATH to be set already initially

  Summary:
    Revision    Changes     Path
    1.18        +10 -4      ossp-pkg/shiela/shiela-install.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-install.sh
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 shiela-install.sh
  --- ossp-pkg/shiela/shiela-install.sh	23 Dec 2002 13:10:56 -0000	1.17
  +++ ossp-pkg/shiela/shiela-install.sh	23 Dec 2002 14:13:09 -0000	1.18
  @@ -257,6 +257,11 @@
   fi
   query U repos_history
   
  +if [ ".$V_env_path" = . ]; then
  +    V_env_path="/bin:/usr/bin:/sbin:/usr/sbin"
  +fi
  +query I env_path
  +
   #   check whether the test command supports the -x option
   if [ -x /bin/sh ] 2>/dev/null; then
       minusx="-x"
  @@ -307,7 +312,7 @@
           fi
       done
   fi
  -query U tool_sendmail
  +query I tool_sendmail
   
   if [ ".$V_tool_diff" = . ]; then
       V_tool_diff="diff"
  @@ -319,7 +324,7 @@
           fi
       done
   fi
  -query U tool_diff
  +query I tool_diff
   
   if [ ".$V_tool_xdelta" = . ]; then
       V_tool_xdelta="xdelta"
  @@ -331,7 +336,7 @@
           fi
       done
   fi
  -query U tool_xdelta
  +query I tool_xdelta
   
   if [ ".$V_tool_uuencode" = . ]; then
       V_tool_uuencode="uuencode"
  @@ -343,7 +348,7 @@
           fi
       done
   fi
  -query U tool_uuencode
  +query I tool_uuencode
   
   if [ ".$V_tool_cvs" = . ]; then
       V_tool_cvs="cvs"
  @@ -432,6 +437,7 @@
   ##
   
   Environment {
  +    Setenv  PATH     ${V_env_path};
       Program sendmail ${V_tool_sendmail};
       Program cvs      ${V_tool_cvs};
       Program diff     ${V_tool_diff};
  @@ .

From ossp-cvs-owner@ossp.org  Mon Dec 23 15:21:58 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DDC0B764A2; Mon, 23 Dec 2002 15:21:57 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ ChangeLog shiela.pl
Message-Id: <20021223142157.DDC0B764A2@mail.ossp.org>
Date: Mon, 23 Dec 2002 15:21:57 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Dec-2002 15:21:57
  Branch: HEAD                             Handle: 2002122314215700

  Modified files:
    ossp-pkg/shiela         ChangeLog shiela.pl

  Log:
    Log also the user id of the committer in the OSSP shiela logfile
    to remove the burden on foreign applications having to merge
    the CVSROOT/history and the shiela logfile in order to get all
    information.

  Summary:
    Revision    Changes     Path
    1.34        +6  -0      ossp-pkg/shiela/ChangeLog
    1.47        +2  -1      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	23 Dec 2002 14:08:38 -0000	1.33
  +++ ossp-pkg/shiela/ChangeLog	23 Dec 2002 14:21:57 -0000	1.34
  @@ -11,6 +11,12 @@
   
     Changes between 1.0.3 and 1.0.4 (23-Dec-2002 to 23-Dec-2002):
   
  +   *) Log also the user id of the committer in the OSSP shiela logfile
  +      to remove the burden on foreign applications having to merge
  +      the CVSROOT/history and the shiela logfile in order to get all
  +      information.
  +      [Ralf S. Engelschall]
  +
      *) Added "Setenv <variable <value>" configuration command to
         "Environment" configuration section which allows one to set
         environment variables like PATH, etc. This especially allows now
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================================
  $ cvs diff -u -r1.46 -r1.47 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	23 Dec 2002 14:08:38 -0000	1.46
  +++ ossp-pkg/shiela/shiela.pl	23 Dec 2002 14:21:57 -0000	1.47
  @@ -859,7 +859,8 @@
       foreach my $file (keys(%{$IN->{file}})) {
           my $e = $IN->{file}->{$file};
           $O .= $IN->{handle};
  -        $O .= ",$file";
  +        $O .= ",".$RT->{userid};
  +        $O .= ",".$file;
           $O .= ",".$e->{oldrev};
           $O .= ",".$e->{newrev};
           $O .= ",".$e->{branch};
  @@ .

From ossp-cvs-owner@ossp.org  Mon Dec 23 15:31:12 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C0A9F767CD; Mon, 23 Dec 2002 15:31:11 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ TODO
Message-Id: <20021223143111.C0A9F767CD@mail.ossp.org>
Date: Mon, 23 Dec 2002 15:31:11 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Dec-2002 15:31:11
  Branch: HEAD                             Handle: 2002122314311100

  Modified files:
    ossp-pkg/shiela         TODO

  Log:
    remember what I found out

  Summary:
    Revision    Changes     Path
    1.7         +6  -0      ossp-pkg/shiela/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/TODO
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 TODO
  --- ossp-pkg/shiela/TODO	23 Dec 2002 13:08:43 -0000	1.6
  +++ ossp-pkg/shiela/TODO	23 Dec 2002 14:31:11 -0000	1.7
  @@ -50,3 +50,9 @@
        command in .shielarc should act identically to a "Log" command in
        shiela.cfg.
        
  +  o  In the loginfo hook, CVS already wrote the entries for the files
  +     in its CVSROOT/history. The first field without the first character
  +     (see CVS src/history.c) is just the 32bit time_t when CVS comitted
  +     it. Hence we alternatively (for more precision) calculate our
  +     "handle" from this information.
  +
  @@ .

From ossp-cvs-owner@ossp.org  Mon Dec 23 15:33:56 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BBBE976559; Mon, 23 Dec 2002 15:33:55 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ ChangeLog shiela.pl
Message-Id: <20021223143355.BBBE976559@mail.ossp.org>
Date: Mon, 23 Dec 2002 15:33:55 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Dec-2002 15:33:55
  Branch: HEAD                             Handle: 2002122314335500

  Modified files:
    ossp-pkg/shiela         ChangeLog shiela.pl

  Log:
    switch to bar character to be more similar to CVSROOT/history

  Summary:
    Revision    Changes     Path
    1.35        +3  -1      ossp-pkg/shiela/ChangeLog
    1.48        +9  -9      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	23 Dec 2002 14:21:57 -0000	1.34
  +++ ossp-pkg/shiela/ChangeLog	23 Dec 2002 14:33:55 -0000	1.35
  @@ -14,7 +14,9 @@
      *) Log also the user id of the committer in the OSSP shiela logfile
         to remove the burden on foreign applications having to merge
         the CVSROOT/history and the shiela logfile in order to get all
  -      information.
  +      information. Additionally the seperator character in the OSSP
  +      shiela logfile was changed from a comma (",") to a bar ("|")
  +      character in order to be more similar to CVSROOT/history.
         [Ralf S. Engelschall]
   
      *) Added "Setenv <variable <value>" configuration command to
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================================
  $ cvs diff -u -r1.47 -r1.48 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	23 Dec 2002 14:21:57 -0000	1.47
  +++ ossp-pkg/shiela/shiela.pl	23 Dec 2002 14:33:55 -0000	1.48
  @@ -859,15 +859,15 @@
       foreach my $file (keys(%{$IN->{file}})) {
           my $e = $IN->{file}->{$file};
           $O .= $IN->{handle};
  -        $O .= ",".$RT->{userid};
  -        $O .= ",".$file;
  -        $O .= ",".$e->{oldrev};
  -        $O .= ",".$e->{newrev};
  -        $O .= ",".$e->{branch};
  -        $O .= ",".$e->{op};
  -        $O .= ",".$e->{keysub};
  -        $O .= ",".$e->{date};
  -        $O .= ",".$e->{delta};
  +        $O .= "|".$RT->{userid};
  +        $O .= "|".$file;
  +        $O .= "|".$e->{oldrev};
  +        $O .= "|".$e->{newrev};
  +        $O .= "|".$e->{branch};
  +        $O .= "|".$e->{op};
  +        $O .= "|".$e->{keysub};
  +        $O .= "|".$e->{date};
  +        $O .= "|".$e->{delta};
           $O .= "\n";
       }
       my $io = new IO::File ">>".$RT->{historydb}
  @@ .

From ossp-cvs-owner@ossp.org  Mon Dec 23 15:42:24 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 625F076559; Mon, 23 Dec 2002 15:42:24 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ shiela.pl
Message-Id: <20021223144224.625F076559@mail.ossp.org>
Date: Mon, 23 Dec 2002 15:42:24 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Dec-2002 15:42:24
  Branch: HEAD                             Handle: 2002122314422300

  Modified files:
    ossp-pkg/shiela         shiela.pl

  Log:
    polish sources a little bit more

  Summary:
    Revision    Changes     Path
    1.49        +8  -8      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================================
  $ cvs diff -u -r1.48 -r1.49 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	23 Dec 2002 14:33:55 -0000	1.48
  +++ ossp-pkg/shiela/shiela.pl	23 Dec 2002 14:42:23 -0000	1.49
  @@ -60,15 +60,14 @@
   $SIG{__DIE__} = sub {
       my ($text) = @_;
       $text =~ s|\s+at\s+.*||s;
  -    my $name = ($0 =~ m|^.*?([^/]+?)(?:\.[^/.]+)?$|)[0];
  -    print STDERR $name.":ERROR: $text" . ($! ? " ($!)" : "") . "\n";
  +    print STDERR "cvs:shiela::ERROR: ". $text . ($! ? " ($!)" : "") . "\n";
       exit(1);
   };
   
   #   determine run-time and configuration information
   my $PA = &pa_determine(@ARGV);
   my $RT = &rt_determine_one($0, $version);
  -my $CF = &cf_determine(($PA->{OPT}->{config} || $RT->{cvsadmdir}."/$RT->{name}.cfg"));
  +my $CF = &cf_determine(($PA->{OPT}->{config} || $RT->{cvsadmdir} . "/$RT->{name}.cfg"));
   $RT = &rt_determine_two($RT, $CF);
   
   #   DEBUGGING
  @@ -379,7 +378,8 @@
       my ($file) = @_;
   
       #   read configuration file
  -    my $io = new IO::File "<$file" || die "unable to open configuration file `$file'";
  +    my $io = new IO::File "<$file"
  +        || die "unable to open configuration file `$file'";
       my $t = '';
       $t .= $_ while (<$io>);
       $io->close;
  @@ -879,8 +879,8 @@
   
   sub history_load {
       my ($PA, $RT, $CF, $handle) = @_;
  -    # XXX STILL MISSING, BECAUSE NOT USED XXX
  -    # XXX HAS TO RE-DETERMINE DIFF AND LOG INFORMATION XXX
  +    ## STILL MISSING, BECAUSE CURRENTLY NOT USED AT ALL.    ##
  +    ## WOULD HAVE TO RE-DETERMINE DIFF AND LOG INFORMATION. ##
       return;
   }
   
  @@ -970,7 +970,7 @@
       #   make sure CVS: lines do not harm anyone
       $msg =~ s/^CVS:.*?$//mg;
   
  -    #   remove common empty fields
  +    #   remove common empty fields (FIXME: PERHAPS TOO HARD-CODED)
       $msg =~ s/^(PR|Submitted by|Reviewed by|Approved by|Obtained from):\s*$//img;
   
       #   remove trailing whitespaces
  @@ -1537,7 +1537,7 @@
   
       #   if we are using a stock CVS version, we have to determine
       #   extra information (which an RSE CVS version would provide).
  -    if (    (   (    defined($cvsinfo[0]) 
  +    if (    (   (    defined($cvsinfo[0])
                    and $cvsinfo[0] =~ m|^([^,]+),([^,]+),([^,]+)$|)
                or not $RT->{cvsrse}                                )
           and not $RT->{cvsop} eq 'import'                          ) {
  @@ .

From ossp-cvs-owner@ossp.org  Mon Dec 23 15:45:19 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F0ECA767C3; Mon, 23 Dec 2002 15:45:18 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ README VERSION shiela-install.pod shiela-...
Message-Id: <20021223144518.F0ECA767C3@mail.ossp.org>
Date: Mon, 23 Dec 2002 15:45:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Dec-2002 15:45:18
  Branch: HEAD                             Handle: 2002122314451601

  Modified files:
    ossp-pkg/shiela         README VERSION shiela-install.pod
                            shiela-install.sh shiela.pl shiela.pod

  Log:
    bump to version 1.0.4 for release

  Summary:
    Revision    Changes     Path
    1.12        +1  -1      ossp-pkg/shiela/README
    1.11        +1  -1      ossp-pkg/shiela/VERSION
    1.19        +1  -1      ossp-pkg/shiela/shiela-install.pod
    1.19        +1  -1      ossp-pkg/shiela/shiela-install.sh
    1.50        +1  -1      ossp-pkg/shiela/shiela.pl
    1.20        +1  -1      ossp-pkg/shiela/shiela.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/README
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 README
  --- ossp-pkg/shiela/README	23 Dec 2002 13:10:56 -0000	1.11
  +++ ossp-pkg/shiela/README	23 Dec 2002 14:45:16 -0000	1.12
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/_| |_|_|\___|_|\__,_|
   
     OSSP shiela - Access Control and Logging Facility for CVS
  -  Version 1.0.3 (23-Dec-2002)
  +  Version 1.0.4 (23-Dec-2002)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/VERSION
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 VERSION
  --- ossp-pkg/shiela/VERSION	23 Dec 2002 13:10:56 -0000	1.10
  +++ ossp-pkg/shiela/VERSION	23 Dec 2002 14:45:16 -0000	1.11
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP shiela (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP shiela, Version 1.0.3 (23-Dec-2002)
  +  This is OSSP shiela, Version 1.0.4 (23-Dec-2002)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-install.pod
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 shiela-install.pod
  --- ossp-pkg/shiela/shiela-install.pod	23 Dec 2002 13:10:56 -0000	1.18
  +++ ossp-pkg/shiela/shiela-install.pod	23 Dec 2002 14:45:16 -0000	1.19
  @@ -33,7 +33,7 @@
   
   =head1 VERSION
   
  -B<OSSP shiela> 1.0.3 (23-Dec-2002)
  +B<OSSP shiela> 1.0.4 (23-Dec-2002)
   
   =head1 DESCRIPTION
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-install.sh
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 shiela-install.sh
  --- ossp-pkg/shiela/shiela-install.sh	23 Dec 2002 14:13:09 -0000	1.18
  +++ ossp-pkg/shiela/shiela-install.sh	23 Dec 2002 14:45:16 -0000	1.19
  @@ -26,7 +26,7 @@
   ##  shiela-install.sh: repository install program (syntax: Bourne-Shell)
   ##
   
  -version="1.0.3"
  +version="1.0.4"
   
   prefix="@prefix@"
   bindir="@bindir@"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================================
  $ cvs diff -u -r1.49 -r1.50 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	23 Dec 2002 14:42:23 -0000	1.49
  +++ ossp-pkg/shiela/shiela.pl	23 Dec 2002 14:45:16 -0000	1.50
  @@ -26,7 +26,7 @@
   ##  shiela.pl: control program (syntax: Perl)
   ##
   
  -my $version = '1.0.3';
  +my $version = '1.0.4';
   
   require 5.005;
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pod
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 shiela.pod
  --- ossp-pkg/shiela/shiela.pod	23 Dec 2002 14:08:38 -0000	1.19
  +++ ossp-pkg/shiela/shiela.pod	23 Dec 2002 14:45:17 -0000	1.20
  @@ -33,7 +33,7 @@
   
   =head1 VERSION
   
  -B<OSSP shiela> 1.0.3 (23-Dec-2002)
  +B<OSSP shiela> 1.0.4 (23-Dec-2002)
   
   =head1 DESCRIPTION
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Dec 23 15:46:16 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D642A76559; Mon, 23 Dec 2002 15:46:15 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ README devtool.conf shiela-install.pod sh...
Message-Id: <20021223144615.D642A76559@mail.ossp.org>
Date: Mon, 23 Dec 2002 15:46:15 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Dec-2002 15:46:15
  Branch: HEAD                             Handle: 2002122314461500

  Modified files:
    ossp-pkg/shiela         README devtool.conf shiela-install.pod shiela.pod

  Log:
    bump to version 1.0.4 for release

  Summary:
    Revision    Changes     Path
    1.13        +1  -1      ossp-pkg/shiela/README
    1.8         +1  -1      ossp-pkg/shiela/devtool.conf
    1.20        +1  -1      ossp-pkg/shiela/shiela-install.pod
    1.21        +1  -1      ossp-pkg/shiela/shiela.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/README
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 README
  --- ossp-pkg/shiela/README	23 Dec 2002 14:45:16 -0000	1.12
  +++ ossp-pkg/shiela/README	23 Dec 2002 14:46:15 -0000	1.13
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/_| |_|_|\___|_|\__,_|
   
     OSSP shiela - Access Control and Logging Facility for CVS
  -  Version 1.0.4 (23-Dec-2002)
  +  Version 
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 devtool.conf
  --- ossp-pkg/shiela/devtool.conf	23 Dec 2002 09:13:21 -0000	1.7
  +++ ossp-pkg/shiela/devtool.conf	23 Dec 2002 14:46:15 -0000	1.8
  @@ -50,7 +50,7 @@
       echo "+++ configuring"
       ./configure
       echo "+++ building"
  -    make clean all man
  +    make clean all
       echo "+++ cleaning"
       make distclean
       echo "+++ fixing"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-install.pod
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 shiela-install.pod
  --- ossp-pkg/shiela/shiela-install.pod	23 Dec 2002 14:45:16 -0000	1.19
  +++ ossp-pkg/shiela/shiela-install.pod	23 Dec 2002 14:46:15 -0000	1.20
  @@ -33,7 +33,7 @@
   
   =head1 VERSION
   
  -B<OSSP shiela> 1.0.4 (23-Dec-2002)
  +B<OSSP shiela> 
   
   =head1 DESCRIPTION
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pod
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 shiela.pod
  --- ossp-pkg/shiela/shiela.pod	23 Dec 2002 14:45:17 -0000	1.20
  +++ ossp-pkg/shiela/shiela.pod	23 Dec 2002 14:46:15 -0000	1.21
  @@ -33,7 +33,7 @@
   
   =head1 VERSION
   
  -B<OSSP shiela> 1.0.4 (23-Dec-2002)
  +B<OSSP shiela> 
   
   =head1 DESCRIPTION
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Dec 23 15:46:50 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D90FB764A2; Mon, 23 Dec 2002 15:46:49 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ devtool.conf
Message-Id: <20021223144649.D90FB764A2@mail.ossp.org>
Date: Mon, 23 Dec 2002 15:46:49 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Dec-2002 15:46:49
  Branch: HEAD                             Handle: 2002122314464900

  Modified files:
    ossp-pkg/shiela         devtool.conf

  Log:
    bump to version 1.0.4 for release

  Summary:
    Revision    Changes     Path
    1.9         +1  -1      ossp-pkg/shiela/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 devtool.conf
  --- ossp-pkg/shiela/devtool.conf	23 Dec 2002 14:46:15 -0000	1.8
  +++ ossp-pkg/shiela/devtool.conf	23 Dec 2002 14:46:49 -0000	1.9
  @@ -39,7 +39,7 @@
   %tag
       V=`./shtool version -ltxt -dshort VERSION | sed -e 's;\.;_;g'`
       echo "+++ tagging CVS sources as SHIELA_${V}"
  -    cvs tag SHIELA_${V}
  +    cvs tag -F SHIELA_${V}
   
   %dist
       echo "+++ removing old tarballs"
  @@ .

From ossp-cvs-owner@ossp.org  Mon Dec 23 15:49:28 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4BF01764A2; Mon, 23 Dec 2002 15:49:28 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/tool/ index.wml ossp-w...
Message-Id: <20021223144928.4BF01764A2@mail.ossp.org>
Date: Mon, 23 Dec 2002 15:49:28 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   23-Dec-2002 15:49:28
  Branch: HEAD                             Handle: 2002122314492601

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/shiela index.wml

  Log:
    release OSSP shiela 1.0.4

  Summary:
    Revision    Changes     Path
    1.43        +1  -0      ossp-web/new/news.txt
    1.26        +1  -1      ossp-web/pkg/tool/index.wml
    1.10        +2  -2      ossp-web/pkg/tool/shiela/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.42 -r1.43 news.txt
  --- ossp-web/new/news.txt	23 Dec 2002 13:14:16 -0000	1.42
  +++ ossp-web/new/news.txt	23 Dec 2002 14:49:26 -0000	1.43
  @@ -1,3 +1,4 @@
  +23-Dec-2002: Released T<OSSP shiela> 1.0.4
   23-Dec-2002: Released T<OSSP shiela> 1.0.3
   23-Dec-2002: Released T<OSSP shiela> 1.0.2
   22-Dec-2002: Released T<OSSP shiela> 1.0.1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 index.wml
  --- ossp-web/pkg/tool/index.wml	23 Dec 2002 13:14:17 -0000	1.25
  +++ ossp-web/pkg/tool/index.wml	23 Dec 2002 14:49:27 -0000	1.26
  @@ -20,7 +20,7 @@
               done=100 stable="1.1.1" unstable=1.2a6>
     <pkg_item name="shiela" longname="OSSP shiela" type="tool"
               desc="CVS Access Control and Logging"
  -	        done=100 stable="1.0.3" unstable="none">
  +	        done=100 stable="1.0.4" unstable="none">
     <pkg_item name="eperl" longname="OSSP eperl" type="tool"
               desc="Embedded Perl Language"
   	        done=100 stable="2.2.14" unstable="none">
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/shiela/index.wml
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 index.wml
  --- ossp-web/pkg/tool/shiela/index.wml	23 Dec 2002 13:14:17 -0000	1.9
  +++ ossp-web/pkg/tool/shiela/index.wml	23 Dec 2002 14:49:27 -0000	1.10
  @@ -25,7 +25,7 @@
   <h2>Status</h2>
   
   <pkg_status
  -    stable="1.0.3" stable_date="23-Dec-2002"
  +    stable="1.0.4" stable_date="23-Dec-2002"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -36,7 +36,7 @@
       url=$(FTP_ROOT_URL)/pkg/tool/shiela/
       directory=$(FTP_ROOT_DIR)/pkg/tool/shiela/
       files="shiela-*.tar.gz" 
  -	stable="shiela-1.0.3.tar.gz" unstable="none">
  +	stable="shiela-1.0.4.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Dec 23 20:32:55 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4D656764A8; Mon, 23 Dec 2002 20:32:55 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm/ ChangeLog README mm_vers.c
Message-Id: <20021223193255.4D656764A8@mail.ossp.org>
Date: Mon, 23 Dec 2002 20:32:55 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Dec-2002 20:32:55
  Branch: HEAD                             Handle: 2002122319325400

  Modified files:
    ossp-pkg/mm             ChangeLog README mm_vers.c

  Log:
    bump for release

  Summary:
    Revision    Changes     Path
    1.43        +1  -1      ossp-pkg/mm/ChangeLog
    1.76        +1  -1      ossp-pkg/mm/README
    1.41        +5  -5      ossp-pkg/mm/mm_vers.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.42 -r1.43 ChangeLog
  --- ossp-pkg/mm/ChangeLog	19 Dec 2002 09:27:46 -0000	1.42
  +++ ossp-pkg/mm/ChangeLog	23 Dec 2002 19:32:54 -0000	1.43
  @@ -14,7 +14,7 @@
       | |_ / __/
     __|_(_)_____|______________________________________________________
   
  - Changes between 1.2.1 and 1.2.2 (28-Jul-2002 to 19-Dec-2002)
  + Changes between 1.2.1 and 1.2.2 (28-Jul-2002 to 23-Dec-2002)
   
     *) Stripped trailing whitespaces from all files in source tree.
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/README
  ============================================================================
  $ cvs diff -u -r1.75 -r1.76 README
  --- ossp-pkg/mm/README	19 Dec 2002 09:25:23 -0000	1.75
  +++ ossp-pkg/mm/README	23 Dec 2002 19:32:54 -0000	1.76
  @@ -7,7 +7,7 @@
     OSSP mm - Shared Memory Allocation
     Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
     Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
  -  Version 1.2.2 (19-Dec-2002)
  +  Version 1.2.2 (23-Dec-2002)
   
     OSSP mm is a 2-layer abstraction library which simplifies the usage
     of shared memory between forked (and this way strongly related) processes
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm_vers.c
  ============================================================================
  $ cvs diff -u -r1.40 -r1.41 mm_vers.c
  --- ossp-pkg/mm/mm_vers.c	19 Dec 2002 09:15:49 -0000	1.40
  +++ ossp-pkg/mm/mm_vers.c	23 Dec 2002 19:32:54 -0000	1.41
  @@ -34,12 +34,12 @@
   mm_version_t mm_version = {
       0x102202,
       "1.2.2",
  -    "1.2.2 (19-Dec-2002)",
  -    "This is OSSP mm, Version 1.2.2 (19-Dec-2002)",
  -    "OSSP mm 1.2.2 (19-Dec-2002)",
  +    "1.2.2 (23-Dec-2002)",
  +    "This is OSSP mm, Version 1.2.2 (23-Dec-2002)",
  +    "OSSP mm 1.2.2 (23-Dec-2002)",
       "OSSP mm/1.2.2",
  -    "@(#)OSSP mm 1.2.2 (19-Dec-2002)",
  -    "$Id: OSSP mm 1.2.2 (19-Dec-2002) $"
  +    "@(#)OSSP mm 1.2.2 (23-Dec-2002)",
  +    "$Id: OSSP mm 1.2.2 (23-Dec-2002) $"
   };
   
   #endif /* _MM_VERS_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Dec 23 20:37:39 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 250F1764A8; Mon, 23 Dec 2002 20:37:39 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20021223193739.250F1764A8@mail.ossp.org>
Date: Mon, 23 Dec 2002 20:37:39 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   23-Dec-2002 20:37:39
  Branch: HEAD                             Handle: 2002122319373602

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/mm     index.wml

  Log:
    release OSSP mm 1.2.2

  Summary:
    Revision    Changes     Path
    1.44        +1  -0      ossp-web/new/news.txt
    1.41        +1  -1      ossp-web/pkg/lib/index.wml
    1.9         +2  -2      ossp-web/pkg/lib/mm/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.43 -r1.44 news.txt
  --- ossp-web/new/news.txt	23 Dec 2002 14:49:26 -0000	1.43
  +++ ossp-web/new/news.txt	23 Dec 2002 19:37:36 -0000	1.44
  @@ -1,3 +1,4 @@
  +23-Dec-2002: Released L<OSSP mm> 1.2.2
   23-Dec-2002: Released T<OSSP shiela> 1.0.4
   23-Dec-2002: Released T<OSSP shiela> 1.0.3
   23-Dec-2002: Released T<OSSP shiela> 1.0.2
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.40 -r1.41 index.wml
  --- ossp-web/pkg/lib/index.wml	16 Dec 2002 15:53:52 -0000	1.40
  +++ ossp-web/pkg/lib/index.wml	23 Dec 2002 19:37:37 -0000	1.41
  @@ -18,7 +18,7 @@
   			done=100 stable=1.4.1 unstable=2.0b2>
     <pkg_item name="mm" longname="OSSP mm" type="lib"
               desc="Shared Memory Allocation"
  -			done=100 stable=1.2.1 unstable=none>
  +			done=100 stable=1.2.2 unstable=none>
     <pkg_item name="ex" longname="OSSP ex" type="lib"
               desc="Exception Handling"
   			done=100 stable=1.0.0 unstable=none>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/mm/index.wml
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 index.wml
  --- ossp-web/pkg/lib/mm/index.wml	2 Oct 2002 12:44:39 -0000	1.8
  +++ ossp-web/pkg/lib/mm/index.wml	23 Dec 2002 19:37:38 -0000	1.9
  @@ -28,7 +28,7 @@
   
   <pkg_status
       name="mm" assign="rse"
  -    stable="1.2.1"   stable_date="28-Jul-2002"
  +    stable="1.2.2"   stable_date="23-Dec-2002"
       unstable="none"  unstable_date="none"
   	done=100>
   
  @@ -39,7 +39,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/mm/
       directory=$(FTP_ROOT_DIR)/pkg/lib/mm/
       files="mm-*.tar.gz" 
  -	stable="mm-1.2.1.tar.gz" unstable="none">
  +	stable="mm-1.2.2.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Dec 31 23:08:58 2002
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E65677650D; Tue, 31 Dec 2002 23:08:57 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ ChangeLog sa_test.c
Message-Id: <20021231220857.E65677650D@mail.ossp.org>
Date: Tue, 31 Dec 2002 23:08:57 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Dec-2002 23:08:57
  Branch: HEAD                             Handle: 2002123122085700

  Modified files:
    ossp-pkg/sa             ChangeLog sa_test.c

  Log:
    Fixed two compile-time warnings in sa_test.c

  Summary:
    Revision    Changes     Path
    1.18        +6  -1      ossp-pkg/sa/ChangeLog
    1.22        +2  -2      ossp-pkg/sa/sa_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 ChangeLog
  --- ossp-pkg/sa/ChangeLog	4 Dec 2002 12:43:03 -0000	1.17
  +++ ossp-pkg/sa/ChangeLog	31 Dec 2002 22:08:57 -0000	1.18
  @@ -11,7 +11,12 @@
     This is a list of all changes to OSSP sa.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 1.0.1 and 1.0.2 (07-Nov-2002 to xx-Dec-2002)
  +  Changes between 1.0.2 and 1.0.3 (04-Dec-2002 to xx-Jan-2003)
  +
  +   o Fixed two compile-time warnings in sa_test.c.
  +     [Ralf S. Engelschall]
  +
  +  Changes between 1.0.1 and 1.0.2 (07-Nov-2002 to 04-Dec-2002)
   
      o Fixed a few bugs and lots of internal type inconsistencies,
        all found by splint(1).
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa_test.c
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 sa_test.c
  --- ossp-pkg/sa/sa_test.c	30 Oct 2002 20:22:06 -0000	1.21
  +++ ossp-pkg/sa/sa_test.c	31 Dec 2002 22:08:57 -0000	1.22
  @@ -74,7 +74,7 @@
       if ((rv = sa_addr_create(&saa)) != SA_OK)
           ts_test_fail(TS_CTX, "sa_addr_create -> %d[%s] (expected %d[%s])",
                        rv, sa_error(rv), SA_OK, sa_error(SA_OK));
  -    for (i = 0; i < sizeof(table)/sizeof(table[0]); i++) {
  +    for (i = 0; i < (int)(sizeof(table)/sizeof(table[0])); i++) {
           ts_test_check(TS_CTX, "sa_addr_u2a(\"%s\")", table[i].in);
           if ((rv = sa_addr_u2a(saa, table[i].in)) != table[i].rv)
               ts_test_fail(TS_CTX, "sa_addr_a2u -> %d[%s] (expected %d[%s])",
  @@ -125,7 +125,7 @@
   
       sa_addr_create(&saa1);
       sa_addr_create(&saa2);
  -    for (i = 0; i < sizeof(table)/sizeof(table[0]); i++) {
  +    for (i = 0; i < (int)(sizeof(table)/sizeof(table[0])); i++) {
           if ((rv = sa_addr_u2a(saa1, table[i].in)) != SA_OK)
               continue;
           if ((rv = sa_addr_u2a(saa2, table[i].acl)) != SA_OK)
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jan  1 16:49:17 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EF4D87650F; Wed,  1 Jan 2003 16:49:16 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog HISTORY Makefile.in NEWS README ac...
Message-Id: <20030101154916.EF4D87650F@mail.ossp.org>
Date: Wed,  1 Jan 2003 16:49:16 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Jan-2003 16:49:16
  Branch: HEAD                             Handle: 2003010115491101

  Modified files:
    ossp-pkg/pth            ChangeLog HISTORY Makefile.in NEWS README
                            aclocal.m4 config.param configure.ac devtool.func
                            pth-config.in pth-config.pod pth.h.in pth.m4
                            pth.pod pth.spec pth_acmac.h.in pth_attr.c
                            pth_cancel.c pth_clean.c pth_compat.c pth_data.c
                            pth_debug.c pth_errno.c pth_event.c pth_ext.c
                            pth_fork.c pth_high.c pth_lib.c pth_mctx.c
                            pth_msg.c pth_p.h.in pth_pqueue.c pth_ring.c
                            pth_sched.c pth_string.c pth_sync.c pth_syscall.c
                            pth_tcb.c pth_time.c pth_uctx.c pth_util.c
                            pth_vers.c pthread-config.in pthread-config.pod
                            pthread.c pthread.h.in pthread.pod striptease.mk
                            striptease.pl test_common.c test_common.h
                            test_httpd.c test_misc.c test_mp.c test_philo.c
                            test_pthread.c test_select.c test_sfio.c
                            test_sig.c test_std.c test_uctx.c

  Log:
    Adjusted all copyright messages for new year 2003.

  Summary:
    Revision    Changes     Path
    1.604       +5  -0      ossp-pkg/pth/ChangeLog
    1.12        +3  -0      ossp-pkg/pth/HISTORY
    1.150       +1  -1      ossp-pkg/pth/Makefile.in
    1.37        +1  -1      ossp-pkg/pth/NEWS
    1.200       +2  -2      ossp-pkg/pth/README
    1.101       +1  -1      ossp-pkg/pth/aclocal.m4
    1.20        +1  -1      ossp-pkg/pth/config.param
    1.10        +2  -2      ossp-pkg/pth/configure.ac
    1.4         +1  -1      ossp-pkg/pth/devtool.func
    1.25        +1  -1      ossp-pkg/pth/pth-config.in
    1.21        +1  -1      ossp-pkg/pth/pth-config.pod
    1.140       +1  -1      ossp-pkg/pth/pth.h.in
    1.12        +1  -1      ossp-pkg/pth/pth.m4
    1.162       +1  -1      ossp-pkg/pth/pth.pod
    1.11        +1  -1      ossp-pkg/pth/pth.spec
    1.9         +1  -1      ossp-pkg/pth/pth_acmac.h.in
    1.19        +1  -1      ossp-pkg/pth/pth_attr.c
    1.27        +1  -1      ossp-pkg/pth/pth_cancel.c
    1.18        +1  -1      ossp-pkg/pth/pth_clean.c
    1.10        +1  -1      ossp-pkg/pth/pth_compat.c
    1.30        +1  -1      ossp-pkg/pth/pth_data.c
    1.29        +1  -1      ossp-pkg/pth/pth_debug.c
    1.25        +1  -1      ossp-pkg/pth/pth_errno.c
    1.61        +1  -1      ossp-pkg/pth/pth_event.c
    1.12        +1  -1      ossp-pkg/pth/pth_ext.c
    1.15        +1  -1      ossp-pkg/pth/pth_fork.c
    1.105       +1  -1      ossp-pkg/pth/pth_high.c
    1.56        +1  -1      ossp-pkg/pth/pth_lib.c
    1.58        +1  -1      ossp-pkg/pth/pth_mctx.c
    1.26        +1  -1      ossp-pkg/pth/pth_msg.c
    1.36        +1  -1      ossp-pkg/pth/pth_p.h.in
    1.31        +1  -1      ossp-pkg/pth/pth_pqueue.c
    1.24        +1  -1      ossp-pkg/pth/pth_ring.c
    1.89        +1  -1      ossp-pkg/pth/pth_sched.c
    1.8         +1  -1      ossp-pkg/pth/pth_string.c
    1.39        +1  -1      ossp-pkg/pth/pth_sync.c
    1.29        +1  -1      ossp-pkg/pth/pth_syscall.c
    1.41        +1  -1      ossp-pkg/pth/pth_tcb.c
    1.28        +1  -1      ossp-pkg/pth/pth_time.c
    1.2         +1  -1      ossp-pkg/pth/pth_uctx.c
    1.23        +1  -1      ossp-pkg/pth/pth_util.c
    1.145       +9  -9      ossp-pkg/pth/pth_vers.c
    1.21        +1  -1      ossp-pkg/pth/pthread-config.in
    1.17        +1  -1      ossp-pkg/pth/pthread-config.pod
    1.64        +1  -1      ossp-pkg/pth/pthread.c
    1.67        +1  -1      ossp-pkg/pth/pthread.h.in
    1.24        +1  -1      ossp-pkg/pth/pthread.pod
    1.8         +1  -1      ossp-pkg/pth/striptease.mk
    1.15        +1  -1      ossp-pkg/pth/striptease.pl
    1.15        +1  -1      ossp-pkg/pth/test_common.c
    1.8         +1  -1      ossp-pkg/pth/test_common.h
    1.53        +1  -1      ossp-pkg/pth/test_httpd.c
    1.34        +1  -1      ossp-pkg/pth/test_misc.c
    1.43        +1  -1      ossp-pkg/pth/test_mp.c
    1.20        +1  -1      ossp-pkg/pth/test_philo.c
    1.15        +1  -1      ossp-pkg/pth/test_pthread.c
    1.16        +1  -1      ossp-pkg/pth/test_select.c
    1.12        +1  -1      ossp-pkg/pth/test_sfio.c
    1.20        +1  -1      ossp-pkg/pth/test_sig.c
    1.18        +1  -1      ossp-pkg/pth/test_std.c
    1.2         +1  -1      ossp-pkg/pth/test_uctx.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.603 -r1.604 ChangeLog
  --- ossp-pkg/pth/ChangeLog	4 Dec 2002 14:16:30 -0000	1.603
  +++ ossp-pkg/pth/ChangeLog	1 Jan 2003 15:49:11 -0000	1.604
  @@ -19,6 +19,11 @@
        / __/ | |_| |
     __|_____(_)___/_________________________________________________________
                     
  +  Changes between 2.0b2 and 2.0b3 (04-Dec-2002 to xx-Jan-2003)
  +
  +   *) Adjusted all copyright messages for new year 2003.
  +      [Ralf S. Engelschall]
  +
     Changes between 2.0b1 and 2.0b2 (08-Nov-2002 to 04-Dec-2002)
   
      *) Upgraded built environment to GNU Autoconf 2.57.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/HISTORY
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 HISTORY
  --- ossp-pkg/pth/HISTORY	15 Oct 2002 20:34:22 -0000	1.11
  +++ ossp-pkg/pth/HISTORY	1 Jan 2003 15:49:11 -0000	1.12
  @@ -96,4 +96,7 @@
     29-Jul-2000  1.4a3         alpha
     24-Mar-2001  1.4.0         release
     27-Jan-2002  1.4.1         release
  +  07-Nov-2002  2.0b0         alpha
  +  08-Nov-2002  2.0b1         alpha
  +  04-Dec-2002  2.0b2         alpha
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.149 -r1.150 Makefile.in
  --- ossp-pkg/pth/Makefile.in	30 Nov 2002 20:16:00 -0000	1.149
  +++ ossp-pkg/pth/Makefile.in	1 Jan 2003 15:49:11 -0000	1.150
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/NEWS
  ============================================================================
  $ cvs diff -u -r1.36 -r1.37 NEWS
  --- ossp-pkg/pth/NEWS	9 Nov 2002 08:07:26 -0000	1.36
  +++ ossp-pkg/pth/NEWS	1 Jan 2003 15:49:11 -0000	1.37
  @@ -12,7 +12,7 @@
     This is a list of user-visible and/or major changes to GNU Pth.
     For more details please have a look at the ChangeLog file.
   
  -  Changes between 1.4 and 2.0 (24-Mar-2001 to xx-Nov-2002)
  +  Changes between 1.4 and 2.0 (24-Mar-2001 to xx-Jan-2003)
   
      *) Make pth_poll(3) more compliant to POSIX.1-2001/SUSv3 poll(2).
      *) Make pth_select(3) more compliant to POSIX.1-2001/SUSv3 select(2).
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/README
  ============================================================================
  $ cvs diff -u -r1.199 -r1.200 README
  --- ossp-pkg/pth/README	4 Dec 2002 14:11:21 -0000	1.199
  +++ ossp-pkg/pth/README	1 Jan 2003 15:49:11 -0000	1.200
  @@ -5,7 +5,7 @@
     |_|    \__|_| |_|                     the impossible.''
   
     GNU Pth - The GNU Portable Threads
  -  Version 2.0b2 (04-Dec-2002)
  +  Version 
   
     ABSTRACT
   
  @@ -54,7 +54,7 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   
     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.100 -r1.101 aclocal.m4
  --- ossp-pkg/pth/aclocal.m4	3 Nov 2002 19:06:19 -0000	1.100
  +++ ossp-pkg/pth/aclocal.m4	1 Jan 2003 15:49:11 -0000	1.101
  @@ -1,6 +1,6 @@
   dnl ##
   dnl ##  GNU Pth - The GNU Portable Threads
  -dnl ##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##
   dnl ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   dnl ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/config.param
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 config.param
  --- ossp-pkg/pth/config.param	3 Nov 2002 11:06:56 -0000	1.19
  +++ ossp-pkg/pth/config.param	1 Jan 2003 15:49:11 -0000	1.20
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/configure.ac
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 configure.ac
  --- ossp-pkg/pth/configure.ac	9 Nov 2002 14:00:41 -0000	1.9
  +++ ossp-pkg/pth/configure.ac	1 Jan 2003 15:49:11 -0000	1.10
  @@ -1,6 +1,6 @@
   dnl ##
   dnl ##  GNU Pth - The GNU Portable Threads
  -dnl ##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##
   dnl ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   dnl ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ -42,7 +42,7 @@
   AC_HEADLINE(dnl
   GNU Pth, Portable Threads, dnl
   PTH_VERSION, pth_vers.c, dnl
  -[Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>])
  +[Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>])
   AC_CONFIG_PARAM(config.param)
   AC_CONFIG_HEADER(pth_acdef.h)dnl
   AC_PREFIX_DEFAULT(/usr/local)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/devtool.func
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.func
  --- ossp-pkg/pth/devtool.func	15 Oct 2002 20:34:22 -0000	1.3
  +++ ossp-pkg/pth/devtool.func	1 Jan 2003 15:49:11 -0000	1.4
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   devtool_require () {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth-config.in
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 pth-config.in
  --- ossp-pkg/pth/pth-config.in	15 Oct 2002 20:34:22 -0000	1.24
  +++ ossp-pkg/pth/pth-config.in	1 Jan 2003 15:49:11 -0000	1.25
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth-config.pod
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 pth-config.pod
  --- ossp-pkg/pth/pth-config.pod	27 Jan 2002 11:03:40 -0000	1.20
  +++ ossp-pkg/pth/pth-config.pod	1 Jan 2003 15:49:11 -0000	1.21
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth.h.in
  ============================================================================
  $ cvs diff -u -r1.139 -r1.140 pth.h.in
  --- ossp-pkg/pth/pth.h.in	8 Nov 2002 16:05:54 -0000	1.139
  +++ ossp-pkg/pth/pth.h.in	1 Jan 2003 15:49:11 -0000	1.140
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth.m4
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 pth.m4
  --- ossp-pkg/pth/pth.m4	24 Oct 2002 15:33:47 -0000	1.11
  +++ ossp-pkg/pth/pth.m4	1 Jan 2003 15:49:11 -0000	1.12
  @@ -1,6 +1,6 @@
   dnl ##
   dnl ##  GNU Pth - The GNU Portable Threads
  -dnl ##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##
   dnl ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   dnl ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth.pod
  ============================================================================
  $ cvs diff -u -r1.161 -r1.162 pth.pod
  --- ossp-pkg/pth/pth.pod	8 Nov 2002 16:05:55 -0000	1.161
  +++ ossp-pkg/pth/pth.pod	1 Jan 2003 15:49:11 -0000	1.162
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth.spec
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 pth.spec
  --- ossp-pkg/pth/pth.spec	15 Oct 2002 20:34:22 -0000	1.10
  +++ ossp-pkg/pth/pth.spec	1 Jan 2003 15:49:11 -0000	1.11
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_acmac.h.in
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 pth_acmac.h.in
  --- ossp-pkg/pth/pth_acmac.h.in	27 Jan 2002 11:03:40 -0000	1.8
  +++ ossp-pkg/pth/pth_acmac.h.in	1 Jan 2003 15:49:11 -0000	1.9
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_attr.c
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 pth_attr.c
  --- ossp-pkg/pth/pth_attr.c	3 Nov 2002 11:15:04 -0000	1.18
  +++ ossp-pkg/pth/pth_attr.c	1 Jan 2003 15:49:11 -0000	1.19
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_cancel.c
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 pth_cancel.c
  --- ossp-pkg/pth/pth_cancel.c	24 Oct 2002 15:21:13 -0000	1.26
  +++ ossp-pkg/pth/pth_cancel.c	1 Jan 2003 15:49:11 -0000	1.27
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_clean.c
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 pth_clean.c
  --- ossp-pkg/pth/pth_clean.c	24 Oct 2002 15:21:13 -0000	1.17
  +++ ossp-pkg/pth/pth_clean.c	1 Jan 2003 15:49:11 -0000	1.18
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_compat.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 pth_compat.c
  --- ossp-pkg/pth/pth_compat.c	27 Jan 2002 11:03:40 -0000	1.9
  +++ ossp-pkg/pth/pth_compat.c	1 Jan 2003 15:49:11 -0000	1.10
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_data.c
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 pth_data.c
  --- ossp-pkg/pth/pth_data.c	24 Oct 2002 15:21:13 -0000	1.29
  +++ ossp-pkg/pth/pth_data.c	1 Jan 2003 15:49:11 -0000	1.30
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_debug.c
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 pth_debug.c
  --- ossp-pkg/pth/pth_debug.c	24 Oct 2002 15:21:13 -0000	1.28
  +++ ossp-pkg/pth/pth_debug.c	1 Jan 2003 15:49:11 -0000	1.29
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_errno.c
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 pth_errno.c
  --- ossp-pkg/pth/pth_errno.c	24 Oct 2002 15:21:13 -0000	1.24
  +++ ossp-pkg/pth/pth_errno.c	1 Jan 2003 15:49:11 -0000	1.25
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_event.c
  ============================================================================
  $ cvs diff -u -r1.60 -r1.61 pth_event.c
  --- ossp-pkg/pth/pth_event.c	5 Nov 2002 19:39:09 -0000	1.60
  +++ ossp-pkg/pth/pth_event.c	1 Jan 2003 15:49:11 -0000	1.61
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_ext.c
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 pth_ext.c
  --- ossp-pkg/pth/pth_ext.c	24 Oct 2002 15:21:13 -0000	1.11
  +++ ossp-pkg/pth/pth_ext.c	1 Jan 2003 15:49:11 -0000	1.12
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_fork.c
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 pth_fork.c
  --- ossp-pkg/pth/pth_fork.c	24 Oct 2002 15:21:13 -0000	1.14
  +++ ossp-pkg/pth/pth_fork.c	1 Jan 2003 15:49:11 -0000	1.15
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_high.c
  ============================================================================
  $ cvs diff -u -r1.104 -r1.105 pth_high.c
  --- ossp-pkg/pth/pth_high.c	8 Nov 2002 20:26:02 -0000	1.104
  +++ ossp-pkg/pth/pth_high.c	1 Jan 2003 15:49:11 -0000	1.105
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_lib.c
  ============================================================================
  $ cvs diff -u -r1.55 -r1.56 pth_lib.c
  --- ossp-pkg/pth/pth_lib.c	9 Nov 2002 16:29:26 -0000	1.55
  +++ ossp-pkg/pth/pth_lib.c	1 Jan 2003 15:49:12 -0000	1.56
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_mctx.c
  ============================================================================
  $ cvs diff -u -r1.57 -r1.58 pth_mctx.c
  --- ossp-pkg/pth/pth_mctx.c	24 Oct 2002 15:21:14 -0000	1.57
  +++ ossp-pkg/pth/pth_mctx.c	1 Jan 2003 15:49:12 -0000	1.58
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_msg.c
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 pth_msg.c
  --- ossp-pkg/pth/pth_msg.c	24 Oct 2002 15:21:14 -0000	1.25
  +++ ossp-pkg/pth/pth_msg.c	1 Jan 2003 15:49:12 -0000	1.26
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_p.h.in
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 pth_p.h.in
  --- ossp-pkg/pth/pth_p.h.in	29 Nov 2002 17:58:18 -0000	1.35
  +++ ossp-pkg/pth/pth_p.h.in	1 Jan 2003 15:49:12 -0000	1.36
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_pqueue.c
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 pth_pqueue.c
  --- ossp-pkg/pth/pth_pqueue.c	27 Jan 2002 11:03:40 -0000	1.30
  +++ ossp-pkg/pth/pth_pqueue.c	1 Jan 2003 15:49:12 -0000	1.31
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_ring.c
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 pth_ring.c
  --- ossp-pkg/pth/pth_ring.c	24 Oct 2002 15:21:14 -0000	1.23
  +++ ossp-pkg/pth/pth_ring.c	1 Jan 2003 15:49:12 -0000	1.24
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_sched.c
  ============================================================================
  $ cvs diff -u -r1.88 -r1.89 pth_sched.c
  --- ossp-pkg/pth/pth_sched.c	9 Nov 2002 16:29:26 -0000	1.88
  +++ ossp-pkg/pth/pth_sched.c	1 Jan 2003 15:49:12 -0000	1.89
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_string.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 pth_string.c
  --- ossp-pkg/pth/pth_string.c	15 Oct 2002 20:34:23 -0000	1.7
  +++ ossp-pkg/pth/pth_string.c	1 Jan 2003 15:49:12 -0000	1.8
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_sync.c
  ============================================================================
  $ cvs diff -u -r1.38 -r1.39 pth_sync.c
  --- ossp-pkg/pth/pth_sync.c	5 Nov 2002 19:39:09 -0000	1.38
  +++ ossp-pkg/pth/pth_sync.c	1 Jan 2003 15:49:12 -0000	1.39
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_syscall.c
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 pth_syscall.c
  --- ossp-pkg/pth/pth_syscall.c	8 Nov 2002 16:05:55 -0000	1.28
  +++ ossp-pkg/pth/pth_syscall.c	1 Jan 2003 15:49:12 -0000	1.29
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_tcb.c
  ============================================================================
  $ cvs diff -u -r1.40 -r1.41 pth_tcb.c
  --- ossp-pkg/pth/pth_tcb.c	3 Nov 2002 11:15:05 -0000	1.40
  +++ ossp-pkg/pth/pth_tcb.c	1 Jan 2003 15:49:12 -0000	1.41
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_time.c
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 pth_time.c
  --- ossp-pkg/pth/pth_time.c	27 Jan 2002 11:03:41 -0000	1.27
  +++ ossp-pkg/pth/pth_time.c	1 Jan 2003 15:49:12 -0000	1.28
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_uctx.c
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 pth_uctx.c
  --- ossp-pkg/pth/pth_uctx.c	3 Nov 2002 09:59:33 -0000	1.1
  +++ ossp-pkg/pth/pth_uctx.c	1 Jan 2003 15:49:12 -0000	1.2
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_util.c
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 pth_util.c
  --- ossp-pkg/pth/pth_util.c	24 Oct 2002 09:07:51 -0000	1.22
  +++ ossp-pkg/pth/pth_util.c	1 Jan 2003 15:49:12 -0000	1.23
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_vers.c
  ============================================================================
  $ cvs diff -u -r1.144 -r1.145 pth_vers.c
  --- ossp-pkg/pth/pth_vers.c	4 Dec 2002 14:11:21 -0000	1.144
  +++ ossp-pkg/pth/pth_vers.c	1 Jan 2003 15:49:12 -0000	1.145
  @@ -8,7 +8,7 @@
   #ifndef _PTH_VERS_C_
   #define _PTH_VERS_C_
   
  -#define PTH_INTERNAL_VERSION 0x200102
  +#define PTH_INTERNAL_VERSION 0x200103
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _PTH_VERS_C_AS_HEADER_
   
   pth_internal_version_t pth_internal_version = {
  -    0x200102,
  -    "2.0b2",
  -    "2.0b2 (04-Dec-2002)",
  -    "This is GNU Pth, Version 2.0b2 (04-Dec-2002)",
  -    "GNU Pth 2.0b2 (04-Dec-2002)",
  -    "GNU Pth/2.0b2",
  -    "@(#)GNU Pth 2.0b2 (04-Dec-2002)",
  -    "$Id: GNU Pth 2.0b2 (04-Dec-2002) $"
  +    0x200103,
  +    "2.0b3",
  +    "2.0b3 (01-Jan-2003)",
  +    "This is GNU Pth, Version 2.0b3 (01-Jan-2003)",
  +    "GNU Pth 2.0b3 (01-Jan-2003)",
  +    "GNU Pth/2.0b3",
  +    "@(#)GNU Pth 2.0b3 (01-Jan-2003)",
  +    "$Id: GNU Pth 2.0b3 (01-Jan-2003) $"
   };
   
   #endif /* _PTH_VERS_C_AS_HEADER_ */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pthread-config.in
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 pthread-config.in
  --- ossp-pkg/pth/pthread-config.in	15 Oct 2002 20:34:23 -0000	1.20
  +++ ossp-pkg/pth/pthread-config.in	1 Jan 2003 15:49:12 -0000	1.21
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pthread-config.pod
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 pthread-config.pod
  --- ossp-pkg/pth/pthread-config.pod	27 Jan 2002 11:03:41 -0000	1.16
  +++ ossp-pkg/pth/pthread-config.pod	1 Jan 2003 15:49:12 -0000	1.17
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pthread.c
  ============================================================================
  $ cvs diff -u -r1.63 -r1.64 pthread.c
  --- ossp-pkg/pth/pthread.c	9 Nov 2002 11:30:15 -0000	1.63
  +++ ossp-pkg/pth/pthread.c	1 Jan 2003 15:49:12 -0000	1.64
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pthread.h.in
  ============================================================================
  $ cvs diff -u -r1.66 -r1.67 pthread.h.in
  --- ossp-pkg/pth/pthread.h.in	9 Nov 2002 11:30:15 -0000	1.66
  +++ ossp-pkg/pth/pthread.h.in	1 Jan 2003 15:49:12 -0000	1.67
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pthread.pod
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 pthread.pod
  --- ossp-pkg/pth/pthread.pod	15 Oct 2002 20:34:23 -0000	1.23
  +++ ossp-pkg/pth/pthread.pod	1 Jan 2003 15:49:12 -0000	1.24
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/striptease.mk
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 striptease.mk
  --- ossp-pkg/pth/striptease.mk	15 Oct 2002 20:34:23 -0000	1.7
  +++ ossp-pkg/pth/striptease.mk	1 Jan 2003 15:49:12 -0000	1.8
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/striptease.pl
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 striptease.pl
  --- ossp-pkg/pth/striptease.pl	15 Oct 2002 20:34:23 -0000	1.14
  +++ ossp-pkg/pth/striptease.pl	1 Jan 2003 15:49:12 -0000	1.15
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_common.c
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 test_common.c
  --- ossp-pkg/pth/test_common.c	27 Jan 2002 11:03:41 -0000	1.14
  +++ ossp-pkg/pth/test_common.c	1 Jan 2003 15:49:12 -0000	1.15
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_common.h
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 test_common.h
  --- ossp-pkg/pth/test_common.h	27 Jan 2002 11:03:41 -0000	1.7
  +++ ossp-pkg/pth/test_common.h	1 Jan 2003 15:49:12 -0000	1.8
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_httpd.c
  ============================================================================
  $ cvs diff -u -r1.52 -r1.53 test_httpd.c
  --- ossp-pkg/pth/test_httpd.c	27 Jan 2002 11:03:41 -0000	1.52
  +++ ossp-pkg/pth/test_httpd.c	1 Jan 2003 15:49:12 -0000	1.53
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_misc.c
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 test_misc.c
  --- ossp-pkg/pth/test_misc.c	27 Jan 2002 11:03:41 -0000	1.33
  +++ ossp-pkg/pth/test_misc.c	1 Jan 2003 15:49:12 -0000	1.34
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_mp.c
  ============================================================================
  $ cvs diff -u -r1.42 -r1.43 test_mp.c
  --- ossp-pkg/pth/test_mp.c	5 Nov 2002 19:39:09 -0000	1.42
  +++ ossp-pkg/pth/test_mp.c	1 Jan 2003 15:49:12 -0000	1.43
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_philo.c
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 test_philo.c
  --- ossp-pkg/pth/test_philo.c	15 Oct 2002 20:34:23 -0000	1.19
  +++ ossp-pkg/pth/test_philo.c	1 Jan 2003 15:49:12 -0000	1.20
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_pthread.c
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 test_pthread.c
  --- ossp-pkg/pth/test_pthread.c	3 Nov 2002 09:24:42 -0000	1.14
  +++ ossp-pkg/pth/test_pthread.c	1 Jan 2003 15:49:12 -0000	1.15
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_select.c
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 test_select.c
  --- ossp-pkg/pth/test_select.c	3 Nov 2002 09:24:42 -0000	1.15
  +++ ossp-pkg/pth/test_select.c	1 Jan 2003 15:49:12 -0000	1.16
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_sfio.c
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 test_sfio.c
  --- ossp-pkg/pth/test_sfio.c	27 Jan 2002 11:03:41 -0000	1.11
  +++ ossp-pkg/pth/test_sfio.c	1 Jan 2003 15:49:12 -0000	1.12
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_sig.c
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 test_sig.c
  --- ossp-pkg/pth/test_sig.c	27 Jan 2002 11:03:41 -0000	1.19
  +++ ossp-pkg/pth/test_sig.c	1 Jan 2003 15:49:12 -0000	1.20
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_std.c
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 test_std.c
  --- ossp-pkg/pth/test_std.c	3 Nov 2002 09:24:42 -0000	1.17
  +++ ossp-pkg/pth/test_std.c	1 Jan 2003 15:49:12 -0000	1.18
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_uctx.c
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 test_uctx.c
  --- ossp-pkg/pth/test_uctx.c	3 Nov 2002 09:59:33 -0000	1.1
  +++ ossp-pkg/pth/test_uctx.c	1 Jan 2003 15:49:12 -0000	1.2
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan  6 12:08:28 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5E11A76321; Mon,  6 Jan 2003 12:08:28 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ cfg_syn_parse.y cfg_syn_scan.l configure.ac ...
Message-Id: <20030106110828.5E11A76321@mail.ossp.org>
Date: Mon,  6 Jan 2003 12:08:28 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Jan-2003 12:08:28
  Branch: HEAD                             Handle: 2003010611082600

  Modified files:
    ossp-pkg/cfg            cfg_syn_parse.y cfg_syn_scan.l configure.ac
                            devtool.conf

  Log:
    upgrade to the latest Flex & Bison combo

  Summary:
    Revision    Changes     Path
    1.6         +2  -2      ossp-pkg/cfg/cfg_syn_parse.y
    1.15        +1  -1      ossp-pkg/cfg/cfg_syn_scan.l
    1.8         +1  -1      ossp-pkg/cfg/configure.ac
    1.9         +1  -2      ossp-pkg/cfg/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_syn_parse.y
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 cfg_syn_parse.y
  --- ossp-pkg/cfg/cfg_syn_parse.y	18 Nov 2002 09:51:29 -0000	1.5
  +++ ossp-pkg/cfg/cfg_syn_parse.y	6 Jan 2003 11:08:26 -0000	1.6
  @@ -28,7 +28,7 @@
   **
   **  cfg_syn_parse.y: context free grammar specification for GNU Bison
   **
  -**  ATTENTION: This requires GNU Bison 1.30 or newer!
  +**  ATTENTION: This requires GNU Bison 1.875 or newer!
   */
   
   #include <stdio.h>
  @@ -54,7 +54,6 @@
   #undef  yyerror
   #define yyerror(msg) \
       cfg_syn_error(CTX, CFG_ERR_SYN, &yylloc, msg)
  -#define YYERROR_VERBOSE
   
   /* scanner state transition */
   extern void cfg_syn_scan_push(cfg_syn_ctx_t *, const char *state);
  @@ -62,6 +61,7 @@
   %}
   
   /* parser options */
  +%error-verbose
   %pure_parser
   %locations
   %defines
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_syn_scan.l
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 cfg_syn_scan.l
  --- ossp-pkg/cfg/cfg_syn_scan.l	18 Nov 2002 09:51:29 -0000	1.14
  +++ ossp-pkg/cfg/cfg_syn_scan.l	6 Jan 2003 11:08:26 -0000	1.15
  @@ -28,7 +28,7 @@
   **
   **  cfg_syn_scan.l: regular grammar specification for GNU Flex
   **
  -**  ATTENTION: This requires GNU Flex 2.5.6 or newer!
  +**  ATTENTION: This requires GNU Flex 2.5.10 or newer!
   */
   
   #include <stdio.h>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/configure.ac
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 configure.ac
  --- ossp-pkg/cfg/configure.ac	18 Nov 2002 09:51:29 -0000	1.7
  +++ ossp-pkg/cfg/configure.ac	6 Jan 2003 11:08:26 -0000	1.8
  @@ -41,7 +41,7 @@
   sinclude(libtool.m4)
   AC_PROG_LIBTOOL
   
  -AC_CHECK_BISON(BISON, 1.75, [1.7[[5-9]]|1.[[8-9]][[0-9]]])
  +AC_CHECK_BISON(BISON, 1.875, [1.[[8-9]][[0-9]]|1.[[8-9]][[0-9]][[0-9]]])
   AC_CHECK_FLEX(FLEX, 2.5.10, [2.5.1[[0-9]]|2.5.[[2-9]][[0-9]]|2.[[6-9]].*])
   
   sinclude(cfg.ac)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 devtool.conf
  --- ossp-pkg/cfg/devtool.conf	18 Nov 2002 09:51:29 -0000	1.8
  +++ ossp-pkg/cfg/devtool.conf	6 Jan 2003 11:08:26 -0000	1.9
  @@ -5,7 +5,7 @@
   %autogen
       @autogen shtool   1.6.2 "1.6.*" all
       @autogen libtool  1.4.3 "1.4*"
  -    @autogen autoconf 2.56  "2.5[4-9]*"
  +    @autogen autoconf 2.57  "2.5[4-9]*"
   
   %autoclean
       @autoclean shtool
  @@ -16,7 +16,6 @@
       ./configure \
           --prefix=/tmp/cfg \
           --disable-shared \
  -        --with-dmalloc=/usr/opkg \
           --enable-maintainer \
           --enable-debug \
           "$@"
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan  6 12:17:48 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CC1E97681C; Mon,  6 Jan 2003 12:17:47 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ Makefile.in README aclocal.m4 cfg-config.in ...
Message-Id: <20030106111747.CC1E97681C@mail.ossp.org>
Date: Mon,  6 Jan 2003 12:17:47 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Jan-2003 12:17:47
  Branch: HEAD                             Handle: 2003010611174201

  Modified files:
    ossp-pkg/cfg            Makefile.in README aclocal.m4 cfg-config.in cfg.ac
                            cfg.h cfg.pod cfg_buf.c cfg_buf.h cfg_data.c
                            cfg_data.h cfg_fmt.c cfg_fmt.h cfg_global.h
                            cfg_grid.c cfg_grid.h cfg_main.c cfg_main.h
                            cfg_node.c cfg_node.h cfg_syn.c cfg_syn.h
                            cfg_syn_parse.y cfg_syn_scan.l cfg_test.c
                            cfg_test.cfg cfg_util.c cfg_util.h configure.ac
                            devtool.conf devtool.func

  Log:
    update copyright messages for new year

  Summary:
    Revision    Changes     Path
    1.5         +3  -3      ossp-pkg/cfg/Makefile.in
    1.5         +3  -3      ossp-pkg/cfg/README
    1.3         +3  -3      ossp-pkg/cfg/aclocal.m4
    1.3         +3  -3      ossp-pkg/cfg/cfg-config.in
    1.2         +3  -3      ossp-pkg/cfg/cfg.ac
    1.13        +3  -3      ossp-pkg/cfg/cfg.h
    1.11        +3  -3      ossp-pkg/cfg/cfg.pod
    1.9         +3  -3      ossp-pkg/cfg/cfg_buf.c
    1.6         +3  -3      ossp-pkg/cfg/cfg_buf.h
    1.8         +3  -3      ossp-pkg/cfg/cfg_data.c
    1.5         +3  -3      ossp-pkg/cfg/cfg_data.h
    1.4         +3  -3      ossp-pkg/cfg/cfg_fmt.c
    1.4         +3  -3      ossp-pkg/cfg/cfg_fmt.h
    1.3         +3  -3      ossp-pkg/cfg/cfg_global.h
    1.5         +3  -3      ossp-pkg/cfg/cfg_grid.c
    1.3         +3  -3      ossp-pkg/cfg/cfg_grid.h
    1.10        +3  -3      ossp-pkg/cfg/cfg_main.c
    1.4         +3  -3      ossp-pkg/cfg/cfg_main.h
    1.18        +3  -3      ossp-pkg/cfg/cfg_node.c
    1.9         +3  -3      ossp-pkg/cfg/cfg_node.h
    1.16        +3  -3      ossp-pkg/cfg/cfg_syn.c
    1.5         +3  -3      ossp-pkg/cfg/cfg_syn.h
    1.7         +3  -3      ossp-pkg/cfg/cfg_syn_parse.y
    1.16        +3  -3      ossp-pkg/cfg/cfg_syn_scan.l
    1.13        +29 -0      ossp-pkg/cfg/cfg_test.c
    1.3         +26 -0      ossp-pkg/cfg/cfg_test.cfg
    1.3         +3  -3      ossp-pkg/cfg/cfg_util.c
    1.3         +3  -3      ossp-pkg/cfg/cfg_util.h
    1.9         +3  -3      ossp-pkg/cfg/configure.ac
    1.10        +26 -0      ossp-pkg/cfg/devtool.conf
    1.2         +1  -1      ossp-pkg/cfg/devtool.func
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 Makefile.in
  --- ossp-pkg/cfg/Makefile.in	2 Aug 2002 19:18:00 -0000	1.4
  +++ ossp-pkg/cfg/Makefile.in	6 Jan 2003 11:17:42 -0000	1.5
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP cfg - Configuration Parsing
  -##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP cfg, a configuration parsing library which
   ##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/README
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 README
  --- ossp-pkg/cfg/README	10 Nov 2002 12:12:23 -0000	1.4
  +++ ossp-pkg/cfg/README	6 Jan 2003 11:17:42 -0000	1.5
  @@ -25,9 +25,9 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   
     This file is part of OSSP cfg, a configuration parsing library which
     can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 aclocal.m4
  --- ossp-pkg/cfg/aclocal.m4	10 Nov 2002 12:12:23 -0000	1.2
  +++ ossp-pkg/cfg/aclocal.m4	6 Jan 2003 11:17:42 -0000	1.3
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP cfg - Configuration Parsing
  -dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP cfg, a configuration parsing library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg-config.in
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 cfg-config.in
  --- ossp-pkg/cfg/cfg-config.in	10 Nov 2002 12:12:23 -0000	1.2
  +++ ossp-pkg/cfg/cfg-config.in	6 Jan 2003 11:17:43 -0000	1.3
  @@ -1,9 +1,9 @@
   #!/bin/sh
   ##
   ##  OSSP cfg - Configuration Parsing
  -##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP cfg, a configuration parsing library which
   ##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg.ac
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 cfg.ac
  --- ossp-pkg/cfg/cfg.ac	9 Jul 2002 08:29:19 -0000	1.1
  +++ ossp-pkg/cfg/cfg.ac	6 Jan 2003 11:17:43 -0000	1.2
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP cfg - Configuration Parsing
  -dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP cfg, a configuration parsing library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg.h
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 cfg.h
  --- ossp-pkg/cfg/cfg.h	2 Aug 2002 19:07:12 -0000	1.12
  +++ ossp-pkg/cfg/cfg.h	6 Jan 2003 11:17:43 -0000	1.13
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg.pod
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 cfg.pod
  --- ossp-pkg/cfg/cfg.pod	19 Nov 2002 14:43:22 -0000	1.10
  +++ ossp-pkg/cfg/cfg.pod	6 Jan 2003 11:17:43 -0000	1.11
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP cfg - Configuration Parsing
  -##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
   ##  This file is part of OSSP cfg, a configuration parsing
   ##  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_buf.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 cfg_buf.c
  --- ossp-pkg/cfg/cfg_buf.c	18 Nov 2002 10:23:36 -0000	1.8
  +++ ossp-pkg/cfg/cfg_buf.c	6 Jan 2003 11:17:43 -0000	1.9
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_buf.h
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 cfg_buf.h
  --- ossp-pkg/cfg/cfg_buf.h	17 Jul 2002 15:04:08 -0000	1.5
  +++ ossp-pkg/cfg/cfg_buf.h	6 Jan 2003 11:17:43 -0000	1.6
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_data.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 cfg_data.c
  --- ossp-pkg/cfg/cfg_data.c	18 Nov 2002 09:51:29 -0000	1.7
  +++ ossp-pkg/cfg/cfg_data.c	6 Jan 2003 11:17:43 -0000	1.8
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_data.h
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 cfg_data.h
  --- ossp-pkg/cfg/cfg_data.h	17 Jul 2002 15:04:08 -0000	1.4
  +++ ossp-pkg/cfg/cfg_data.h	6 Jan 2003 11:17:43 -0000	1.5
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_fmt.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 cfg_fmt.c
  --- ossp-pkg/cfg/cfg_fmt.c	10 Nov 2002 12:12:23 -0000	1.3
  +++ ossp-pkg/cfg/cfg_fmt.c	6 Jan 2003 11:17:43 -0000	1.4
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2002 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_fmt.h
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 cfg_fmt.h
  --- ossp-pkg/cfg/cfg_fmt.h	10 Nov 2002 12:12:23 -0000	1.3
  +++ ossp-pkg/cfg/cfg_fmt.h	6 Jan 2003 11:17:43 -0000	1.4
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_global.h
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 cfg_global.h
  --- ossp-pkg/cfg/cfg_global.h	18 Nov 2002 10:23:36 -0000	1.2
  +++ ossp-pkg/cfg/cfg_global.h	6 Jan 2003 11:17:43 -0000	1.3
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_grid.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 cfg_grid.c
  --- ossp-pkg/cfg/cfg_grid.c	10 Nov 2002 12:12:23 -0000	1.4
  +++ ossp-pkg/cfg/cfg_grid.c	6 Jan 2003 11:17:43 -0000	1.5
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_grid.h
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 cfg_grid.h
  --- ossp-pkg/cfg/cfg_grid.h	17 Jul 2002 15:04:08 -0000	1.2
  +++ ossp-pkg/cfg/cfg_grid.h	6 Jan 2003 11:17:43 -0000	1.3
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_main.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 cfg_main.c
  --- ossp-pkg/cfg/cfg_main.c	18 Nov 2002 10:23:36 -0000	1.9
  +++ ossp-pkg/cfg/cfg_main.c	6 Jan 2003 11:17:43 -0000	1.10
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_main.h
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 cfg_main.h
  --- ossp-pkg/cfg/cfg_main.h	17 Jul 2002 15:04:08 -0000	1.3
  +++ ossp-pkg/cfg/cfg_main.h	6 Jan 2003 11:17:43 -0000	1.4
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_node.c
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 cfg_node.c
  --- ossp-pkg/cfg/cfg_node.c	22 Nov 2002 14:34:32 -0000	1.17
  +++ ossp-pkg/cfg/cfg_node.c	6 Jan 2003 11:17:43 -0000	1.18
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_node.h
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 cfg_node.h
  --- ossp-pkg/cfg/cfg_node.h	22 Nov 2002 14:34:32 -0000	1.8
  +++ ossp-pkg/cfg/cfg_node.h	6 Jan 2003 11:17:43 -0000	1.9
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_syn.c
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 cfg_syn.c
  --- ossp-pkg/cfg/cfg_syn.c	18 Nov 2002 09:51:29 -0000	1.15
  +++ ossp-pkg/cfg/cfg_syn.c	6 Jan 2003 11:17:43 -0000	1.16
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_syn.h
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 cfg_syn.h
  --- ossp-pkg/cfg/cfg_syn.h	10 Jul 2002 14:46:28 -0000	1.4
  +++ ossp-pkg/cfg/cfg_syn.h	6 Jan 2003 11:17:43 -0000	1.5
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_syn_parse.y
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 cfg_syn_parse.y
  --- ossp-pkg/cfg/cfg_syn_parse.y	6 Jan 2003 11:08:26 -0000	1.6
  +++ ossp-pkg/cfg/cfg_syn_parse.y	6 Jan 2003 11:17:43 -0000	1.7
  @@ -1,9 +1,9 @@
   %{
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_syn_scan.l
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 cfg_syn_scan.l
  --- ossp-pkg/cfg/cfg_syn_scan.l	6 Jan 2003 11:08:26 -0000	1.15
  +++ ossp-pkg/cfg/cfg_syn_scan.l	6 Jan 2003 11:17:43 -0000	1.16
  @@ -1,9 +1,9 @@
   %{
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_test.c
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 cfg_test.c
  --- ossp-pkg/cfg/cfg_test.c	18 Nov 2002 10:25:41 -0000	1.12
  +++ ossp-pkg/cfg/cfg_test.c	6 Jan 2003 11:17:43 -0000	1.13
  @@ -1,3 +1,32 @@
  +/*
  +**  OSSP cfg - Configuration Parsing
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**
  +**  This file is part of OSSP cfg, a configuration parsing
  +**  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  cfg_test.c: test suite
  +*/
   
   #include <stdio.h>
   #include <stdlib.h>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_test.cfg
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 cfg_test.cfg
  --- ossp-pkg/cfg/cfg_test.cfg	10 Nov 2002 12:12:23 -0000	1.2
  +++ ossp-pkg/cfg/cfg_test.cfg	6 Jan 2003 11:17:43 -0000	1.3
  @@ -1,4 +1,30 @@
   ##
  +##  OSSP cfg - Configuration Parsing
  +##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##
  +##  This file is part of OSSP cfg, a configuration parsing library which
  +##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
   ##  cfg_test.cfg -- Test Suite Feature Testing Configuration
   ##
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_util.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 cfg_util.c
  --- ossp-pkg/cfg/cfg_util.c	18 Nov 2002 09:51:29 -0000	1.2
  +++ ossp-pkg/cfg/cfg_util.c	6 Jan 2003 11:17:43 -0000	1.3
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_util.h
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 cfg_util.h
  --- ossp-pkg/cfg/cfg_util.h	17 Jul 2002 15:04:08 -0000	1.2
  +++ ossp-pkg/cfg/cfg_util.h	6 Jan 2003 11:17:43 -0000	1.3
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2003-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/configure.ac
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 configure.ac
  --- ossp-pkg/cfg/configure.ac	6 Jan 2003 11:08:26 -0000	1.8
  +++ ossp-pkg/cfg/configure.ac	6 Jan 2003 11:17:43 -0000	1.9
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP cfg - Configuration Parsing
  -dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP cfg, a configuration parsing library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 devtool.conf
  --- ossp-pkg/cfg/devtool.conf	6 Jan 2003 11:08:26 -0000	1.9
  +++ ossp-pkg/cfg/devtool.conf	6 Jan 2003 11:17:43 -0000	1.10
  @@ -1,4 +1,30 @@
   ##
  +##  OSSP cfg - Configuration Parsing
  +##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##
  +##  This file is part of OSSP cfg, a configuration parsing library which
  +##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
   ##  devtool.conf -- Development Tool Configuration
   ##
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/devtool.func
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.func
  --- ossp-pkg/cfg/devtool.func	9 Jul 2002 08:29:19 -0000	1.1
  +++ ossp-pkg/cfg/devtool.func	6 Jan 2003 11:17:43 -0000	1.2
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com> 
   ##
   
   devtool_require () {
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan  6 12:19:46 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1C1637681C; Mon,  6 Jan 2003 12:19:46 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ configure.ac devtool.conf l2_spec_parse.y l2_...
Message-Id: <20030106111946.1C1637681C@mail.ossp.org>
Date: Mon,  6 Jan 2003 12:19:46 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Jan-2003 12:19:45
  Branch: HEAD                             Handle: 2003010611194500

  Modified files:
    ossp-pkg/l2             configure.ac devtool.conf l2_spec_parse.y
                            l2_spec_scan.l

  Log:
    upgrade to the latest Flex & Bison & Autoconf combo

  Summary:
    Revision    Changes     Path
    1.26        +1  -1      ossp-pkg/l2/configure.ac
    1.9         +1  -1      ossp-pkg/l2/devtool.conf
    1.9         +2  -2      ossp-pkg/l2/l2_spec_parse.y
    1.11        +1  -1      ossp-pkg/l2/l2_spec_scan.l
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/configure.ac
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 configure.ac
  --- ossp-pkg/l2/configure.ac	9 Nov 2002 14:37:45 -0000	1.25
  +++ ossp-pkg/l2/configure.ac	6 Jan 2003 11:19:45 -0000	1.26
  @@ -44,7 +44,7 @@
   AC_CHECK_MAINTAINER
   AC_CONFIGURE_LIBTOOL
   
  -AC_CHECK_BISON(BISON, 1.75, [1.7[[5-9]]|1.[[8-9]][[0-9]]])
  +AC_CHECK_BISON(BISON, 1.875, [1.[[8-9]][[0-9]]|1.[[8-9]][[0-9]][[0-9]]])
   AC_CHECK_FLEX(FLEX, 2.5.10, [2.5.1[[0-9]]|2.5.[[2-9]][[0-9]]|2.[[6-9]].*])
   
   AC_CHECK_LIB(nsl, gethostname)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 devtool.conf
  --- ossp-pkg/l2/devtool.conf	9 Nov 2002 14:37:45 -0000	1.8
  +++ ossp-pkg/l2/devtool.conf	6 Jan 2003 11:19:45 -0000	1.9
  @@ -5,7 +5,7 @@
   %autogen
       @autogen shtool   1.6.2 "1.6.*" all
       @autogen libtool  1.4.3 "1.4*"
  -    @autogen autoconf 2.54  "2.5[4-9]*"
  +    @autogen autoconf 2.57  "2.5[6-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_spec_parse.y
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 l2_spec_parse.y
  --- ossp-pkg/l2/l2_spec_parse.y	30 Jul 2002 19:08:25 -0000	1.8
  +++ ossp-pkg/l2/l2_spec_parse.y	6 Jan 2003 11:19:45 -0000	1.9
  @@ -27,7 +27,7 @@
   **
   **  l2_spec_parse.y: GNU Bison (Yacc-style) parser specification
   **
  -**  ATTENTION: This requires GNU Bison 1.30 or newer!
  +**  ATTENTION: This requires GNU Bison 1.875 or newer!
   */
   
   #include "l2.h"      /* for l2_xxx() API */
  @@ -49,7 +49,6 @@
   #undef  yyerror
   #define yyerror(msg) \
       l2_spec_error(CTX, L2_ERR_SYN, &yylloc, msg)
  -#define YYERROR_VERBOSE
   
   /* scanner state transition */
   extern void l2_spec_scan_push(l2_spec_ctx_t *, const char *state);
  @@ -57,6 +56,7 @@
   %}
   
   /* parser options */
  +%error-verbose
   %pure_parser
   %locations
   %defines
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_spec_scan.l
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 l2_spec_scan.l
  --- ossp-pkg/l2/l2_spec_scan.l	9 Nov 2002 14:37:45 -0000	1.10
  +++ ossp-pkg/l2/l2_spec_scan.l	6 Jan 2003 11:19:45 -0000	1.11
  @@ -27,7 +27,7 @@
   **
   **  l2_spec_scan.l: GNU Flex (Lex-style) scanner specification
   **
  -**  ATTENTION: This requires GNU Flex 2.5.6-dev-2001.11.01 or newer!
  +**  ATTENTION: This requires GNU Flex 2.5.10 or newer!
   */
   
   #include "l2.h"             /* for l2_xxx() */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan  6 12:41:59 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 682697648C; Mon,  6 Jan 2003 12:41:58 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ AUTHORS ChangeLog INSTALL LICENSE Makefile.in...
Message-Id: <20030106114158.682697648C@mail.ossp.org>
Date: Mon,  6 Jan 2003 12:41:58 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Jan-2003 12:41:58
  Branch: HEAD                             Handle: 2003010611415101

  Modified files:
    ossp-pkg/l2             AUTHORS ChangeLog INSTALL LICENSE Makefile.in NEWS
                            README TODO aclocal.m4 configure.ac devtool
                            devtool.conf devtool.func l2-config.in
                            l2-config.pod l2.h.in l2.m4 l2.pod l2_ch_buffer.c
                            l2_ch_fd.c l2_ch_file.c l2_ch_filter.c l2_ch_irc.c
                            l2_ch_noop.c l2_ch_null.c l2_ch_pipe.c
                            l2_ch_prefix.c l2_ch_smtp.c l2_ch_socket.c
                            l2_ch_syslog.c l2_channel.c l2_env.c l2_p.h
                            l2_spec.c l2_spec.h l2_spec_parse.y l2_spec_scan.l
                            l2_test.c l2_ut_fmtcb.c l2_ut_format.c
                            l2_ut_format.h l2_ut_level.c l2_ut_param.c
                            l2_ut_pcre.c l2tool.c l2tool.pod

  Log:
    - remove trailing whitespaces
    - adjust copyright messages
    - consistently use "OSSP l2"
    - consistently talk about "Flexible Logging"
    - use standard OSSP ASCII-art

  Summary:
    Revision    Changes     Path
    1.3         +8  -1      ossp-pkg/l2/AUTHORS
    1.4         +7  -0      ossp-pkg/l2/ChangeLog
    1.2         +10 -0      ossp-pkg/l2/INSTALL
    1.5         +6  -4      ossp-pkg/l2/LICENSE
    1.47        +7  -6      ossp-pkg/l2/Makefile.in
    1.2         +10 -0      ossp-pkg/l2/NEWS
    1.10        +12 -11     ossp-pkg/l2/README
    1.58        +15 -7      ossp-pkg/l2/TODO
    1.14        +10 -9      ossp-pkg/l2/aclocal.m4
    1.27        +12 -10     ossp-pkg/l2/configure.ac
    1.3         +1  -1      ossp-pkg/l2/devtool
    1.10        +27 -1      ossp-pkg/l2/devtool.conf
    1.4         +1  -1      ossp-pkg/l2/devtool.func
    1.7         +8  -7      ossp-pkg/l2/l2-config.in
    1.7         +9  -8      ossp-pkg/l2/l2-config.pod
    1.31        +8  -7      ossp-pkg/l2/l2.h.in
    1.6         +30 -29     ossp-pkg/l2/l2.m4
    1.14        +25 -24     ossp-pkg/l2/l2.pod
    1.38        +6  -5      ossp-pkg/l2/l2_ch_buffer.c
    1.16        +8  -7      ossp-pkg/l2/l2_ch_fd.c
    1.25        +11 -10     ossp-pkg/l2/l2_ch_file.c
    1.19        +7  -6      ossp-pkg/l2/l2_ch_filter.c
    1.8         +15 -14     ossp-pkg/l2/l2_ch_irc.c
    1.5         +5  -4      ossp-pkg/l2/l2_ch_noop.c
    1.13        +5  -4      ossp-pkg/l2/l2_ch_null.c
    1.31        +13 -12     ossp-pkg/l2/l2_ch_pipe.c
    1.23        +7  -6      ossp-pkg/l2/l2_ch_prefix.c
    1.11        +16 -15     ossp-pkg/l2/l2_ch_smtp.c
    1.38        +7  -6      ossp-pkg/l2/l2_ch_socket.c
    1.33        +12 -11     ossp-pkg/l2/l2_ch_syslog.c
    1.30        +18 -17     ossp-pkg/l2/l2_channel.c
    1.10        +7  -6      ossp-pkg/l2/l2_env.c
    1.34        +6  -4      ossp-pkg/l2/l2_p.h
    1.10        +6  -5      ossp-pkg/l2/l2_spec.c
    1.4         +30 -0      ossp-pkg/l2/l2_spec.h
    1.10        +43 -42     ossp-pkg/l2/l2_spec_parse.y
    1.12        +7  -6      ossp-pkg/l2/l2_spec_scan.l
    1.51        +8  -7      ossp-pkg/l2/l2_test.c
    1.7         +18 -17     ossp-pkg/l2/l2_ut_fmtcb.c
    1.8         +43 -42     ossp-pkg/l2/l2_ut_format.c
    1.4         +12 -10     ossp-pkg/l2/l2_ut_format.h
    1.9         +7  -6      ossp-pkg/l2/l2_ut_level.c
    1.10        +14 -13     ossp-pkg/l2/l2_ut_param.c
    1.7         +2  -2      ossp-pkg/l2/l2_ut_pcre.c
    1.4         +7  -6      ossp-pkg/l2/l2tool.c
    1.4         +8  -7      ossp-pkg/l2/l2tool.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/AUTHORS
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 AUTHORS
  --- ossp-pkg/l2/AUTHORS	4 Sep 2001 09:12:58 -0000	1.2
  +++ ossp-pkg/l2/AUTHORS	6 Jan 2003 11:41:51 -0000	1.3
  @@ -1,9 +1,16 @@
  +   _        ___  ____ ____  ____    _ ____
  +  |_|_ _   / _ \/ ___/ ___||  _ \  | |___ \
  +  _|_||_| | | | \___ \___ \| |_) | | | __) |
  + |_||_|_| | |_| |___) |__) |  __/  | |/ __/
  +  |_|_|_|  \___/|____/____/|_|     |_|_____|
  +
  +  OSSP l2 -- Flexible Logging
   
     AUTHORS
     =======
   
     This is a list of authors who have written
  -  or edited major parts of the OSSP L2 sources.
  +  or edited major parts of the OSSP l2 sources.
   
     Ralf S. Engelschall   <rse@engelschall.com>
     Michael Schloh        <michael.schloh@cw.com>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ChangeLog
  --- ossp-pkg/l2/ChangeLog	30 Jul 2002 19:13:00 -0000	1.3
  +++ ossp-pkg/l2/ChangeLog	6 Jan 2003 11:41:51 -0000	1.4
  @@ -1,3 +1,10 @@
  +   _        ___  ____ ____  ____    _ ____
  +  |_|_ _   / _ \/ ___/ ___||  _ \  | |___ \
  +  _|_||_| | | | \___ \___ \| |_) | | | __) |
  + |_||_|_| | |_| |___) |__) |  __/  | |/ __/
  +  |_|_|_|  \___/|____/____/|_|     |_|_____|
  +
  +  OSSP l2 -- Flexible Logging
   
     ChangeLog
     =========
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/INSTALL
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 INSTALL
  --- ossp-pkg/l2/INSTALL	10 May 2001 19:46:01 -0000	1.1.1.1
  +++ ossp-pkg/l2/INSTALL	6 Jan 2003 11:41:51 -0000	1.2
  @@ -0,0 +1,10 @@
  +   _        ___  ____ ____  ____    _ ____
  +  |_|_ _   / _ \/ ___/ ___||  _ \  | |___ \
  +  _|_||_| | | | \___ \___ \| |_) | | | __) |
  + |_||_|_| | |_| |___) |__) |  __/  | |/ __/
  +  |_|_|_|  \___/|____/____/|_|     |_|_____|
  +
  +  OSSP l2 -- Flexible Logging
  +
  +  INSTALLATION
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/LICENSE
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 LICENSE
  --- ossp-pkg/l2/LICENSE	30 Jul 2002 19:08:24 -0000	1.4
  +++ ossp-pkg/l2/LICENSE	6 Jan 2003 11:41:51 -0000	1.5
  @@ -1,9 +1,11 @@
   
  -  OSSP l2 - Logging Library
  -  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +  OSSP l2 - Flexible Logging
   
  -  This file is part of OSSP L2, a flexible logging library which
  +  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  +  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +
  +  This file is part of OSSP l2, a flexible logging library which
     can be found at http://www.ossp.org/pkg/lib/l2/.
   
     Permission to use, copy, modify, and distribute this software for
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.46 -r1.47 Makefile.in
  --- ossp-pkg/l2/Makefile.in	21 Aug 2002 13:26:27 -0000	1.46
  +++ ossp-pkg/l2/Makefile.in	6 Jan 2003 11:41:51 -0000	1.47
  @@ -1,9 +1,10 @@
   ##
  -##  OSSP l2 - Logging Library
  -##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  OSSP l2 - Flexible Logging
  +##  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  +##  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
  -##  This file is part of OSSP L2, a flexible logging library which
  +##  This file is part of OSSP l2, a flexible logging library which
   ##  can be found at http://www.ossp.org/pkg/lib/l2/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
  @@ -166,11 +167,11 @@
   	$(_MANPAGE)
   l2-config.1: l2-config.pod l2_version.c
   	BASENAME="l2-config"; SEC=1; \
  -	NAME="L2"; ONELINE="Logging Library"; \
  +	NAME="L2"; ONELINE="Flexible Logging"; \
   	$(_MANPAGE)
   l2.3: l2.pod l2_version.c
   	BASENAME="l2"; SEC=3; \
  -	NAME="L2"; ONELINE="Logging Library"; \
  +	NAME="L2"; ONELINE="Flexible Logging"; \
   	$(_MANPAGE)
   
   #   (minimalistic) test suite
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/NEWS
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 NEWS
  --- ossp-pkg/l2/NEWS	10 May 2001 19:46:01 -0000	1.1.1.1
  +++ ossp-pkg/l2/NEWS	6 Jan 2003 11:41:51 -0000	1.2
  @@ -0,0 +1,10 @@
  +   _        ___  ____ ____  ____    _ ____
  +  |_|_ _   / _ \/ ___/ ___||  _ \  | |___ \
  +  _|_||_| | | | \___ \___ \| |_) | | | __) |
  + |_||_|_| | |_| |___) |__) |  __/  | |/ __/
  +  |_|_|_|  \___/|____/____/|_|     |_|_____|
  +
  +  OSSP l2 -- Flexible Logging
  +
  +  NEWS
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/README
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 README
  --- ossp-pkg/l2/README	11 Oct 2002 16:00:48 -0000	1.9
  +++ ossp-pkg/l2/README	6 Jan 2003 11:41:51 -0000	1.10
  @@ -1,10 +1,10 @@
  -   _     ____  
  -  | |   |___ \ 
  -  | |     __) |
  -  | |___ / __/ 
  -  |_____|_____|
  -               
  -  OSSP l2 -- Logging Library
  +   _        ___  ____ ____  ____    _ ____
  +  |_|_ _   / _ \/ ___/ ___||  _ \  | |___ \
  +  _|_||_| | | | \___ \___ \| |_) | | | __) |
  + |_||_|_| | |_| |___) |__) |  __/  | |/ __/
  +  |_|_|_|  \___/|____/____/|_|     |_|_____|
  +
  +  OSSP l2 -- Flexible Logging
     Version 0.9.1 (11-Oct-2002)
   
     ABSTRACT
  @@ -14,7 +14,7 @@
     channels, stacked together in a top-down data flow tree structure with
     filtering channels in internal nodes and output channels on the leave
     nodes.
  -  
  +
     Channel trees can be either constructed manually through lower-level
     API functions or all at once with a single API function controlled by
     a compact syntactical description of the channel tree. For generating
  @@ -22,7 +22,7 @@
     extended through callback functions. The data flow inside the channel
     tree is controlled by (eight fixed and nine custom) logging message
     severity levels which are assigned to each individual channel.
  -  
  +
     Channels are implemented by channel handlers which can be even
     customer supplied for creating own channels which seamlessly integrate
     into the framework. For convinience reasons, OSSP l2 already ships
  @@ -32,8 +32,9 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  +  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   
     This file is part of OSSP l2, a flexible logging library which
     can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/TODO
  ============================================================================
  $ cvs diff -u -r1.57 -r1.58 TODO
  --- ossp-pkg/l2/TODO	29 Jul 2002 11:45:18 -0000	1.57
  +++ ossp-pkg/l2/TODO	6 Jan 2003 11:41:51 -0000	1.58
  @@ -1,5 +1,13 @@
  -OSSP L2 TODO
  -============
  +   _        ___  ____ ____  ____    _ ____
  +  |_|_ _   / _ \/ ___/ ___||  _ \  | |___ \
  +  _|_||_| | | | \___ \___ \| |_) | | | __) |
  + |_||_|_| | |_| |___) |__) |  __/  | |/ __/
  +  |_|_|_|  \___/|____/____/|_|     |_|_____|
  +
  +  OSSP l2 -- Flexible Logging
  +
  +  TODO
  +  ====
   
   Structure of channels and documentation [thl]. It should be possible to
   drag the documentation out of a channel's source code. Everything else
  @@ -237,7 +245,7 @@
       from the var-args stack, it fetches a "char *" plus a "size_t" and
       this way allows one to log only a sub-string of a larger string
       without the need for any temporary buffers, etc.
  -    
  +
   - l2_util_fmt_dump:
       This can be used as "%{type}X" for dumping arbitrary octets. The
       parameter "type" can be either "text" (the default if only "%X"
  @@ -261,7 +269,7 @@
   ==================================
   Config-File (OSSP):
   logging {
  -    channel 0 null ALL; 
  +    channel 0 null ALL;
   
       channel 1 prefix CUSTOM1 { prefix="%Y-%m-%d/%H:%M:%S" };
       channel 2 buffer { size=8k };
  @@ -283,11 +291,11 @@
       log stat 1;
   };
   
  -Alternative: 
  +Alternative:
   log access {
       error: syslog;
  -    prefix -> { 
  -        buffer(size=4k) -> 
  +    prefix -> {
  +        buffer(size=4k) ->
               file(path=/path/to/log, mode=0644);
           panic: smtp(host=en1, rcpt=rse@engelschall.com);
       }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 aclocal.m4
  --- ossp-pkg/l2/aclocal.m4	30 Jul 2002 19:08:24 -0000	1.13
  +++ ossp-pkg/l2/aclocal.m4	6 Jan 2003 11:41:51 -0000	1.14
  @@ -1,9 +1,10 @@
   dnl ##
  -dnl ##  OSSP l2 - Logging Library
  -dnl ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +dnl ##  OSSP l2 - Flexible Logging
  +dnl ##  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  +dnl ##  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +dnl ##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##
  -dnl ##  This file is part of OSSP L2, a flexible logging library which
  +dnl ##  This file is part of OSSP l2, a flexible logging library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/l2/.
   dnl ##
   dnl ##  Permission to use, copy, modify, and distribute this software for
  @@ -53,8 +54,8 @@
   dnl ##  Support for Configuration Headers
   dnl ##
   dnl ##  configure.in:
  -dnl ##    AC_HEADLINE(<short-name>, <long-name>, 
  -dnl ##                <vers-var>, <vers-file>, 
  +dnl ##    AC_HEADLINE(<short-name>, <long-name>,
  +dnl ##                <vers-var>, <vers-file>,
   dnl ##                <copyright>)
   dnl ##
   
  @@ -76,7 +77,7 @@
       #   find out package version
       $3_STR="`$ac_shtool version -l c -d long $ac_srcdir/$4`"
       AC_SUBST($3_STR)
  - 
  +
       #   friendly header ;)
       if test ".$enable_headline" != .no; then
           echo "Configuring ${TB}$1${TN} ($2), Version ${TB}${$3_STR}${TN}"
  @@ -352,7 +353,7 @@
   if test ".$enable_maintainer" = .yes; then
       bison_version=""
       for prog in bison bison-beta bison-alpha bison-snap; do
  -        AC_PATH_PROG($1, $prog, NA) 
  +        AC_PATH_PROG($1, $prog, NA)
           if test ".$$1" != .NA; then
               bison_version=`($$1 --version | head -1 | sed -e 's;^[[^0-9]]*\([[0-9]][[0-9.]]*\).*;\1;') 2>/dev/null`
               case "$bison_version" in
  @@ -381,7 +382,7 @@
   if test ".$enable_maintainer" = .yes; then
       flex_version=""
       for prog in flex flex-beta flex-alpha flex-snap; do
  -        AC_PATH_PROG($1, $prog, NA) 
  +        AC_PATH_PROG($1, $prog, NA)
           if test ".$$1" != .NA; then
               flex_version=`($$1 --version | head -1 | sed -e 's;^[[^0-9]]*\([[0-9]][[0-9.]]*\).*;\1;') 2>/dev/null`
               case "$flex_version" in
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/configure.ac
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 configure.ac
  --- ossp-pkg/l2/configure.ac	6 Jan 2003 11:19:45 -0000	1.26
  +++ ossp-pkg/l2/configure.ac	6 Jan 2003 11:41:51 -0000	1.27
  @@ -1,9 +1,10 @@
   dnl ##
  -dnl ##  OSSP l2 - Logging Library
  -dnl ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +dnl ##  OSSP l2 - Flexible Logging
  +dnl ##  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  +dnl ##  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +dnl ##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##
  -dnl ##  This file is part of OSSP L2, a flexible logging library which
  +dnl ##  This file is part of OSSP l2, a flexible logging library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/l2/.
   dnl ##
   dnl ##  Permission to use, copy, modify, and distribute this software for
  @@ -27,13 +28,14 @@
   dnl ##  configure.in: Autoconf specification
   dnl ##
   
  -AC_PREREQ(2.54)
  +AC_PREREQ(2.57)
   AC_INIT
   AC_HEADLINE(dnl
  -OSSP l2, Logging Library, dnl
  +OSSP l2, Flexible Logging, dnl
   L2_VERSION, l2_version.c, dnl
  -[Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)])
  +[Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +Copyright (c) 2001-2003 Ralf S. Engelschall (rse@engelschall.com)
  +Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH])
   AC_PREFIX_DEFAULT(/usr/local)
   AC_PLATFORM(PLATFORM)
   
  @@ -50,7 +52,7 @@
   AC_CHECK_LIB(nsl, gethostname)
   if test ".`echo $LIBS | grep nsl`" = . ;then
       AC_CHECK_LIB(nsl, gethostbyname)
  -fi  
  +fi
   AC_CHECK_LIB(socket, accept)
   
   AC_CHECK_HEADERS(sys/time.h)
  @@ -66,7 +68,7 @@
   sinclude(l2_ut_sa.ac)
   SA_CHECK_ALL
   
  -AC_CHECK_EXTLIB([Dmalloc], dmalloc, dmalloc_debug, dmalloc.h, 
  +AC_CHECK_EXTLIB([Dmalloc], dmalloc, dmalloc_debug, dmalloc.h,
                   [AC_DEFINE(WITH_DMALLOC, 1, [Define to 1 if building with Dmalloc])])
   
   AC_CONFIG_HEADERS(l2_config.h)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/devtool
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 devtool
  --- ossp-pkg/l2/devtool	2 Jan 2002 17:07:38 -0000	1.2
  +++ ossp-pkg/l2/devtool	6 Jan 2003 11:41:51 -0000	1.3
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  devtool -- Development Tool
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   if [ $# -eq 0 ]; then
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 devtool.conf
  --- ossp-pkg/l2/devtool.conf	6 Jan 2003 11:19:45 -0000	1.9
  +++ ossp-pkg/l2/devtool.conf	6 Jan 2003 11:41:51 -0000	1.10
  @@ -1,4 +1,30 @@
   ##
  +##  OSSP l2 - Flexible Logging
  +##  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  +##  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##
  +##  This file is part of OSSP l2, a flexible logging library which
  +##  can be found at http://www.ossp.org/pkg/lib/l2/.
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
   ##  devtool.conf -- Development Tool Configuration
   ##
   
  @@ -28,7 +54,7 @@
   %version
       ./shtool version -l c -n "OSSP l2" -p l2_ -e l2_version.c
       V=`./shtool version -l c -d long l2_version.c`
  -    sed -e "s/Version .*(.*)/Version $V/g" <README >README.n 
  +    sed -e "s/Version .*(.*)/Version $V/g" <README >README.n
       mv README.n README
   
   %tag
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/devtool.func
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.func
  --- ossp-pkg/l2/devtool.func	14 Mar 2002 15:29:23 -0000	1.3
  +++ ossp-pkg/l2/devtool.func	6 Jan 2003 11:41:51 -0000	1.4
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   devtool_require () {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2-config.in
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 l2-config.in
  --- ossp-pkg/l2/l2-config.in	30 Jul 2002 19:08:24 -0000	1.6
  +++ ossp-pkg/l2/l2-config.in	6 Jan 2003 11:41:51 -0000	1.7
  @@ -1,10 +1,11 @@
   #!/bin/sh
   ##
  -##  OSSP l2 - Logging Library
  -##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  OSSP l2 - Flexible Logging
  +##  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  +##  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
  -##  This file is part of OSSP L2, a flexible logging library which
  +##  This file is part of OSSP l2, a flexible logging library which
   ##  can be found at http://www.ossp.org/pkg/lib/l2/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
  @@ -25,10 +26,10 @@
   ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   ##  SUCH DAMAGE.
   ##
  -##  l2-config.in: L2 library build utility
  +##  l2-config.in: library build utility
   ##
   
  -DIFS=' 	
  +DIFS=' 
   '
   
   prefix="@prefix@"
  @@ -81,7 +82,7 @@
               exit 0
               ;;
           --version|-v)
  -            echo "OSSP L2 $l2_version"
  +            echo "OSSP l2 $l2_version"
               exit 0
               ;;
           --all)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2-config.pod
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 l2-config.pod
  --- ossp-pkg/l2/l2-config.pod	30 Jul 2002 19:08:24 -0000	1.6
  +++ ossp-pkg/l2/l2-config.pod	6 Jan 2003 11:41:51 -0000	1.7
  @@ -1,9 +1,10 @@
   ##
  -##  OSSP l2 - Logging Library
  -##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  OSSP l2 - Flexible Logging
  +##  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  +##  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
  -##  This file is part of OSSP L2, a flexible logging library which
  +##  This file is part of OSSP l2, a flexible logging library which
   ##  can be found at http://www.ossp.org/pkg/lib/l2/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
  @@ -24,18 +25,18 @@
   ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   ##  SUCH DAMAGE.
   ##
  -##  l2-config.pod: L2 library build utility manual page
  +##  l2-config.pod: library build utility manual page
   ##
   
   =pod
   
   =head1 NAME
   
  -B<l2-config> - L2 library build utility
  +B<l2-config> - OSSP l2 library build utility
   
   =head1 VERSION
   
  -OSSP L2 L2_VERSION_STR
  +OSSP l2 L2_VERSION_STR
   
   =head1 SYNOPSIS
   
  @@ -79,7 +80,7 @@
   =item B<--all>
   
   Forces the output of all flags, that is, including extra flags which are not
  -B<L2> specific.
  +B<OSSP l2> specific.
   
   =item B<--prefix>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2.h.in
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 l2.h.in
  --- ossp-pkg/l2/l2.h.in	30 Jul 2002 19:08:24 -0000	1.30
  +++ ossp-pkg/l2/l2.h.in	6 Jan 2003 11:41:51 -0000	1.31
  @@ -1,9 +1,10 @@
   /*
  -**  OSSP l2 - Logging Library
  -**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  OSSP l2 - Flexible Logging
  +**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
  -**  This file is part of OSSP L2, a flexible logging library which
  +**  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -53,7 +54,7 @@
   #include <stdarg.h>
   #include <string.h>
   
  -/* counterbalance poor standard environments */ 
  +/* counterbalance poor standard environments */
   #ifndef NULL
   #define NULL (void *)0
   #endif
  @@ -88,7 +89,7 @@
       L2_LEVEL_ERROR    = (1 << 2),
       L2_LEVEL_WARNING  = (1 << 3),
       L2_LEVEL_NOTICE   = (1 << 4),
  -    L2_LEVEL_INFO     = (1 << 5),  
  +    L2_LEVEL_INFO     = (1 << 5),
       L2_LEVEL_TRACE    = (1 << 6),
       L2_LEVEL_DEBUG    = (1 << 7)
   } l2_level_t;
  @@ -99,7 +100,7 @@
   /* macro describing all levels */
   #define L2_LEVEL_ALL ((1 << (8+9+1))-1)
   
  -/* macro describing all levels from highest (PANIC) 
  +/* macro describing all levels from highest (PANIC)
      to and including a particular low level */
   #define L2_LEVEL_UPTO(level) (((level)-1)|(level))
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2.m4
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 l2.m4
  --- ossp-pkg/l2/l2.m4	30 Jul 2002 19:08:24 -0000	1.5
  +++ ossp-pkg/l2/l2.m4	6 Jan 2003 11:41:51 -0000	1.6
  @@ -1,9 +1,10 @@
   dnl ##
  -dnl ##  OSSP l2 - Logging Library
  -dnl ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +dnl ##  OSSP l2 - Flexible Logging
  +dnl ##  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  +dnl ##  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +dnl ##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##
  -dnl ##  This file is part of OSSP L2, a flexible logging library which
  +dnl ##  This file is part of OSSP l2, a flexible logging library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/l2/.
   dnl ##
   dnl ##  Permission to use, copy, modify, and distribute this software for
  @@ -24,18 +25,18 @@
   dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   dnl ##  SUCH DAMAGE.
   dnl ##
  -dnl ##  l2.m4: Autoconf macro for locating OSSP L2 from within
  +dnl ##  l2.m4: Autoconf macro for locating OSSP l2 from within
   dnl ##         configure.in of third-party software packages
   dnl ##
   
   dnl ##
   dnl ##  Synopsis:
  -dnl ##  AC_CHECK_L2([MIN-VERSION [,          # minimum L2 version, e.g. 1.2.0
  +dnl ##  AC_CHECK_L2([MIN-VERSION [,          # minimum OSSP l2 version, e.g. 1.2.0
   dnl ##               DEFAULT-WITH-L2 [,      # default value for --with-l2 option
   dnl ##               DEFAULT-WITH-L2-TEST [, # default value for --with-l2-test option
   dnl ##               EXTEND-VARS [,          # whether CFLAGS/LDFLAGS/etc are extended
  -dnl ##               ACTION-IF-FOUND [,      # action to perform if L2 was found
  -dnl ##               ACTION-IF-NOT-FOUND     # action to perform if L2 was not found
  +dnl ##               ACTION-IF-FOUND [,      # action to perform if OSSP l2 was found
  +dnl ##               ACTION-IF-NOT-FOUND     # action to perform if OSSP l2 was not found
   dnl ##               ]]]]]])
   dnl ##  Examples:
   dnl ##  AC_CHECK_L2(1.2.0)
  @@ -77,15 +78,15 @@
   AC_SUBST(L2_LDFLAGS)
   AC_SUBST(L2_LIBS)
   dnl #   command line options
  -AC_MSG_CHECKING(for OSSP L2)
  +AC_MSG_CHECKING(for OSSP l2)
   _AC_L2_VERBOSE([])
   AC_ARG_WITH(l2,dnl
  -[  --with-l2[=ARG]        Build with OSSP L2 Library  (default=]ifelse([$2],,yes,$2)[)],dnl
  +[  --with-l2[=ARG]        Build with OSSP l2 Library  (default=]ifelse([$2],,yes,$2)[)],dnl
   ,dnl
   with_l2="ifelse([$2],,yes,$2)"
   )dnl
   AC_ARG_WITH(l2-test,dnl
  -[  --with-l2-test         Perform OSSP L2 Sanity Test (default=]ifelse([$3],,yes,$3)[)],dnl
  +[  --with-l2-test         Perform OSSP l2 Sanity Test (default=]ifelse([$3],,yes,$3)[)],dnl
   ,dnl
   with_l2_test="ifelse([$3],,yes,$3)"
   )dnl
  @@ -213,18 +214,18 @@
       if test ".$_l2_version" = .; then
           if test ".$with_l2" != .yes; then
                _AC_L2_ERROR([dnl
  -             Unable to locate OSSP L2 under $with_l2.
  -             Please specify the correct path to either a OSSP L2 installation tree
  -             (use --with-l2=DIR if you used --prefix=DIR for installing OSSP L2 in
  -             the past) or to a OSSP L2 source tree (use --with-l2=DIR if DIR is a
  +             Unable to locate OSSP l2 under $with_l2.
  +             Please specify the correct path to either a OSSP l2 installation tree
  +             (use --with-l2=DIR if you used --prefix=DIR for installing OSSP l2 in
  +             the past) or to a OSSP l2 source tree (use --with-l2=DIR if DIR is a
                path to a l2-X.Y.Z/ directory; but make sure the package is already
                built, i.e., the "configure; make" step was already performed there).])
           else
                _AC_L2_ERROR([dnl
  -             Unable to locate OSSP L2 in any system-wide location (see \$PATH).
  -             Please specify the correct path to either a OSSP L2 installation tree
  -             (use --with-l2=DIR if you used --prefix=DIR for installing OSSP L2 in
  -             the past) or to a OSSP L2 source tree (use --with-l2=DIR if DIR is a
  +             Unable to locate OSSP l2 in any system-wide location (see \$PATH).
  +             Please specify the correct path to either a OSSP l2 installation tree
  +             (use --with-l2=DIR if you used --prefix=DIR for installing OSSP l2 in
  +             the past) or to a OSSP l2 source tree (use --with-l2=DIR if DIR is a
                path to a l2-X.Y.Z/ directory; but make sure the package is already
                built, i.e., the "configure; make" step was already performed there).])
           fi
  @@ -308,9 +309,9 @@
           AC_TRY_CPP(_code1, _ok=yes, _ok=no)
           if test ".$_ok" != .yes; then
               _AC_L2_ERROR([dnl
  -            Found OSSP L2 $_l2_version under $_l2_location, but
  +            Found OSSP l2 $_l2_version under $_l2_location, but
               was unable to perform a sanity pre-processor check. This means
  -            the OSSP L2 header l2.h was not found.
  +            the OSSP l2 header l2.h was not found.
               We used the following build environment:
               >> CPP="$CPP"
               >> CPPFLAGS="$CPPFLAGS"
  @@ -320,9 +321,9 @@
           AC_TRY_LINK(_code1, _code2, _ok=yes, _ok=no)
           if test ".$_ok" != .yes; then
               _AC_L2_ERROR([dnl
  -            Found OSSP L2 $_l2_version under $_l2_location, but
  +            Found OSSP l2 $_l2_version under $_l2_location, but
               was unable to perform a sanity linker check. This means
  -            the OSSP L2 library libl2.a was not found.
  +            the OSSP l2 library libl2.a was not found.
               We used the following build environment:
               >> CC="$CC"
               >> CFLAGS="$CFLAGS"
  @@ -335,12 +336,12 @@
           if test ".$_ok" != .yes; then
               if test ".$_ok" = .no; then
                   _AC_L2_ERROR([dnl
  -                Found OSSP L2 $_l2_version under $_l2_location, but
  +                Found OSSP l2 $_l2_version under $_l2_location, but
                   was unable to perform a sanity execution check. This usually
  -                means that the OSSP L2 shared library libl2.so is present
  +                means that the OSSP l2 shared library libl2.so is present
                   but \$LD_LIBRARY_PATH is incomplete to execute a L2 test.
                   In this case either disable this test via --without-l2-test,
  -                or extend \$LD_LIBRARY_PATH, or build OSSP L2 as a static
  +                or extend \$LD_LIBRARY_PATH, or build OSSP l2 as a static
                   library only via its --disable-shared Autoconf option.
                   We used the following build environment:
                   >> CC="$CC"
  @@ -350,11 +351,11 @@
                   See config.log for possibly more details.])
               else
                   _AC_L2_ERROR([dnl
  -                Found OSSP L2 $_l2_version under $_l2_location, but
  +                Found OSSP l2 $_l2_version under $_l2_location, but
                   was unable to perform a sanity run-time check. This usually
  -                means that the OSSP L2 library failed to work and possibly
  +                means that the OSSP l2 library failed to work and possibly
                   caused a core dump in the test program. In this case it
  -                is strongly recommended that you re-install OSSP L2 and this
  +                is strongly recommended that you re-install OSSP l2 and this
                   time make sure that it really passes its "make test" procedure.
                   We used the following build environment:
                   >> CC="$CC"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2.pod
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 l2.pod
  --- ossp-pkg/l2/l2.pod	30 Jul 2002 19:08:24 -0000	1.13
  +++ ossp-pkg/l2/l2.pod	6 Jan 2003 11:41:51 -0000	1.14
  @@ -1,9 +1,10 @@
   ##
  -##  OSSP l2 - Logging Library
  -##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  OSSP l2 - Flexible Logging
  +##  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  +##  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
  -##  This file is part of OSSP L2, a flexible logging library which
  +##  This file is part of OSSP l2, a flexible logging library which
   ##  can be found at http://www.ossp.org/pkg/lib/l2/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
  @@ -23,7 +24,7 @@
   ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   ##  SUCH DAMAGE.
  -##  
  +##
   ##  l2.pod: Unix manual page for C API
   ##
   
  @@ -31,11 +32,11 @@
   
   =head1 NAME
   
  -B<L2> - Logging Library
  +B<OSSP l2> - Flexible Logging
   
   =head1 VERSION
   
  -L2 L2_VERSION_STR
  +OSSP l2 L2_VERSION_STR
   
   =head1 SYNOPSIS
   
  @@ -43,7 +44,7 @@
   
   =head1 DESCRIPTION
   
  -OSSP L2 is a C library providing a very flexible and sophisticated
  +B<OSSP l2> is a C library providing a very flexible and sophisticated
   Unix logging facility. It is based on the model of arbitrary number of
   channels, stacked together in a top-down data flow tree structure with
   filtering channels in internal nodes and output channels on the leave
  @@ -59,19 +60,19 @@
   
   Channels are implemented by channel handlers which can be even
   customer supplied for creating own channels which seamlessly integrate
  -into the framework. For convinience reasons, L2 already ships with
  +into the framework. For convinience reasons, B<OSSP l2> already ships with
   pre-implemented filtering (noop, filter, prefix, buffer) and output
   (null, fd, file, pipe, socket, syslog, smtp) channels which already
   cover mostly all use cases of logging.
   
   A language is provided to allow for channel specification and configuration.
   Thus, the channel tree can be constructed either by the API and its ANSI C
  -bindings or through the use of this L2 channel definition language. Applying
  +bindings or through the use of this B<OSSP l2> channel definition language. Applying
   the API allows fine grained control of the channel tree. Additionally, the
   API allows for a more interactive channel definition. However, using the
   channel definition language to define the channel tree is more convenient,
   and takes less coding effort. The channel definition language is almost
  -always sufficient for an application using L2.
  +always sufficient for an application using B<OSSP l2>.
   
   =head1 LOGGING LEVELS
   
  @@ -88,7 +89,7 @@
   
   =head1 CHANNEL TREE SPECIFICATION
   
  -An L2 channel tree can be descriped by a textual specification according
  +An B<OSSP l2> channel tree can be descriped by a textual specification according
   to the following Backus-Naur-Form (BNF):
   
    tree               ::= stream
  @@ -127,7 +128,7 @@
   
   =head1 FUNCTIONS
   
  -The following functions are provided by the B<L2> API:
  +The following functions are provided by the B<OSSP l2> API:
   
   =head1 AVAILABLE CHANNEL HANDLERS
   
  @@ -153,16 +154,16 @@
   Host name or IP address of the remote Syslog service.
   No default exists, user has to provide value.
   
  -=item B<remoteport> (optional, C<int>)     
  +=item B<remoteport> (optional, C<int>)
   
   Port number of the remote SMTP service.
   Default is C<514>.
   
  -=item B<localhost> (optional, C<char *>)     
  +=item B<localhost> (optional, C<char *>)
   
   The name of the local host, I<without> any domain appended.
   
  -=item B<facility> (optional, C<char *>)     
  +=item B<facility> (optional, C<char *>)
   
   The Syslog facility used for all messages. It has to be one of the
   following: C<kern>, C<user>, C<mail>, C<daemon>, C<auth>, C<syslog>,
  @@ -170,12 +171,12 @@
   C<security>, C<console>, C<clock>, C<local0>, C<local1>, C<local2>,
   C<local3>, C<local4>, C<local5>, C<local6>, C<local7>.
   
  -=item B<ident> (I<mandatory>, C<char *>)     
  +=item B<ident> (I<mandatory>, C<char *>)
   
   Arbitrary string identifying the program.
   There is no default, user has to provide value.
   
  -=item B<logpid> (optional, C<int>)     
  +=item B<logpid> (optional, C<int>)
   
   Boolean flag whether to add the Process ID (pid)
   to the B<ident> tag in messages. Default is C<0>.
  @@ -194,7 +195,7 @@
   
   Attention! Commands that exit on their own and with a success return value will
   not be restarted, however those returning with non-zero exit codes will be
  -restarted. L2 reopens closed pipe channels due to faulted command processes in
  +restarted. B<OSSP l2> reopens closed pipe channels due to faulted command processes in
   this way. Should such a reconnection be required after a command's successful
   self-termination, l2_channel_open() may be called again on the same pipe channel
   pointer previously used. Stream logging will then write to the pipe channel
  @@ -214,12 +215,12 @@
               exit(1); /* failure */
   
   The command passed to the pipe channel handler may also be stopped while still
  -using a L2 stream log. If a command process is stopped no action is taken
  +using a B<OSSP l2> stream log. If a command process is stopped no action is taken
   until further logging occurs. As soon as the pipe channel handler receives a
   message due to a l2_stream_log operation, it will attempt to restart the
   stopped command process and write to its standard input. If the effort to
   restart the command process fails then the command process is considered
  -dead, and L2 will terminate the process and close the channel. A
  +dead, and B<OSSP l2> will terminate the process and close the channel. A
   l2_channel_open() will then reopen the pipe channel using configuration
   information previously entered with l2_channel_configure().
   
  @@ -229,7 +230,7 @@
   
   =item B<command> (optional, C<char *>)
   
  -L2 will execute the command at this user-provided path, and pipe messages to
  +B<OSSP l2> will execute the command at this user-provided path, and pipe messages to
   its standard input when l2_stream_log operations are called.
   
   =back
  @@ -248,7 +249,7 @@
   
   =item B<progname> (optional, C<char *>)
   
  -Arbitrary string identifying the program using B<OSSP L2>.
  +Arbitrary string identifying the program using B<OSSP l2>.
   Default is C<NULL> which means no program identification.
   
   =item B<localhost> (optional, C<char *>)
  @@ -281,7 +282,7 @@
   Host name or IP address of the remote SMTP service.
   No default exists, user has to provide value.
   
  -=item B<port> (optional, C<char *>)     
  +=item B<port> (optional, C<char *>)
   
   Port name or number of the remote SMTP service.
   Default is C<smtp> (25).
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_buffer.c
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 l2_ch_buffer.c
  --- ossp-pkg/l2/l2_ch_buffer.c	30 Jul 2002 19:08:24 -0000	1.37
  +++ ossp-pkg/l2/l2_ch_buffer.c	6 Jan 2003 11:41:51 -0000	1.38
  @@ -1,9 +1,10 @@
   /*
  -**  OSSP l2 - Logging Library
  -**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  OSSP l2 - Flexible Logging
  +**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
  -**  This file is part of OSSP L2, a flexible logging library which
  +**  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -172,7 +173,7 @@
       if (cfg->bufinterval == -1L) /* -1 is reserved by L2 */
           return L2_ERR_ARG;       /* set_alarm() uses it  */
   
  -    if (cfg->bufsize < 0) 
  +    if (cfg->bufsize < 0)
           return L2_ERR_ARG;
   
       return rv;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_fd.c
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 l2_ch_fd.c
  --- ossp-pkg/l2/l2_ch_fd.c	31 Jul 2002 07:39:21 -0000	1.15
  +++ ossp-pkg/l2/l2_ch_fd.c	6 Jan 2003 11:41:51 -0000	1.16
  @@ -1,9 +1,10 @@
   /*
  -**  OSSP l2 - Logging Library
  -**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  OSSP l2 - Flexible Logging
  +**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
  -**  This file is part of OSSP L2, a flexible logging library which
  +**  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -45,7 +46,7 @@
           return L2_ERR_MEM;
   
       /* initialize configuration with reasonable defaults */
  -    cfg->fd = -1; 
  +    cfg->fd = -1;
   
       /* link private channel configuration into channel context */
       ctx->vp = cfg;
  @@ -57,7 +58,7 @@
   static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
       l2_ch_fd_t *cfg;
  -    l2_param_t pa[1]; 
  +    l2_param_t pa[1];
       l2_result_t rv;
       l2_env_t *env;
   
  @@ -136,7 +137,7 @@
   static l2_result_t hook_destroy(l2_context_t *ctx, l2_channel_t *ch)
   {
       /* parameter checks */
  -    if (ctx->vp == NULL) 
  +    if (ctx->vp == NULL)
           return L2_ERR_ARG;
   
       /* destroy channel configuration */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_file.c
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 l2_ch_file.c
  --- ossp-pkg/l2/l2_ch_file.c	30 Jul 2002 19:08:24 -0000	1.24
  +++ ossp-pkg/l2/l2_ch_file.c	6 Jan 2003 11:41:51 -0000	1.25
  @@ -1,9 +1,10 @@
   /*
  -**  OSSP l2 - Logging Library
  -**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  OSSP l2 - Flexible Logging
  +**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
  -**  This file is part of OSSP L2, a flexible logging library which
  +**  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -51,10 +52,10 @@
           return L2_ERR_ARG;
   
       /* initialize configuration with reasonable defaults */
  -    cfg->fd     = -1; 
  -    cfg->path   = NULL; 
  -    cfg->append = TRUE; 
  -    cfg->perm   = (S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH); 
  +    cfg->fd     = -1;
  +    cfg->path   = NULL;
  +    cfg->append = TRUE;
  +    cfg->perm   = (S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
   
       /* link private channel configuration into channel context */
       ctx->vp = cfg;
  @@ -66,7 +67,7 @@
   static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
       l2_ch_file_t *cfg = (l2_ch_file_t *)ctx->vp;
  -    l2_param_t pa[4]; 
  +    l2_param_t pa[4];
       l2_result_t rv;
       l2_env_t *env;
   
  @@ -112,7 +113,7 @@
                                 l2_level_t level, const char *buf, size_t buf_size)
   {
       l2_ch_file_t *cfg = (l2_ch_file_t *)ctx->vp;
  -    
  +
       /* write message to channel file */
       if (write(cfg->fd, buf, buf_size) == -1)
           return L2_ERR_SYS;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_filter.c
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 l2_ch_filter.c
  --- ossp-pkg/l2/l2_ch_filter.c	30 Jul 2002 19:08:24 -0000	1.18
  +++ ossp-pkg/l2/l2_ch_filter.c	6 Jan 2003 11:41:51 -0000	1.19
  @@ -1,9 +1,10 @@
   /*
  -**  OSSP l2 - Logging Library
  -**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  OSSP l2 - Flexible Logging
  +**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
  -**  This file is part of OSSP L2, a flexible logging library which
  +**  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -66,7 +67,7 @@
   {
       l2_ch_filter_t *cfg = (l2_ch_filter_t *)ctx->vp;
       l2_env_t *env;
  -    l2_param_t pa[4]; 
  +    l2_param_t pa[4];
       l2_result_t rv;
       const char *szError;
       int nErrorOffset;
  @@ -81,7 +82,7 @@
       if ((rv = l2_util_setparams(env, pa, fmt, ap)) != L2_OK)
           return rv;
   
  -    /* translate regular expression into finite state machine */ 
  +    /* translate regular expression into finite state machine */
       if (cfg->szRegex != NULL) {
           /* compile regular expression into FSM */
           opt = 0;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_irc.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 l2_ch_irc.c
  --- ossp-pkg/l2/l2_ch_irc.c	30 Jul 2002 19:08:24 -0000	1.7
  +++ ossp-pkg/l2/l2_ch_irc.c	6 Jan 2003 11:41:51 -0000	1.8
  @@ -1,9 +1,10 @@
   /*
  -**  OSSP l2 - Logging Library
  -**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  OSSP l2 - Flexible Logging
  +**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
  -**  This file is part of OSSP L2, a flexible logging library which
  +**  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -49,7 +50,7 @@
       int   bJoin;
       char *cpHost;
       char *cpPort;
  -    long nTimeout; 
  +    long nTimeout;
       sa_addr_t *saaServer;
       sa_t *saServer;
   } l2_ch_irc_t;
  @@ -97,7 +98,7 @@
   static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
       l2_ch_irc_t *cfg = (l2_ch_irc_t *)ctx->vp;
  -    l2_param_t pa[12]; 
  +    l2_param_t pa[12];
       l2_result_t rv;
       l2_env_t *env;
   
  @@ -133,7 +134,7 @@
       /* create socket address */
       if ((rc = sa_addr_create(&cfg->saaServer)) != SA_OK)
           return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
  -    if ((rc = sa_addr_u2a(cfg->saaServer, "inet://%s:%s", 
  +    if ((rc = sa_addr_u2a(cfg->saaServer, "inet://%s:%s",
                             cfg->cpHost, cfg->cpPort)) != SA_OK)
           return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
   
  @@ -163,8 +164,8 @@
       struct tm *tm;
       time_t t;
       char caDate[80];
  -    
  -    /* 
  +
  +    /*
        * Sample IRC client transaction for reference:
        * | PASS secret
        * | NICK rse
  @@ -176,17 +177,17 @@
        * | :irc.engelschall.com 251 rse :There are 1 users and 0 services on 1 servers
        * | :irc.engelschall.com 254 rse 11 :channels formed
        * | :irc.engelschall.com 255 rse :I have 1 users, 0 services and 0 servers
  -     * | :irc.engelschall.com 375 rse :- irc.engelschall.com Message of the Day - 
  +     * | :irc.engelschall.com 375 rse :- irc.engelschall.com Message of the Day -
        * | :irc.engelschall.com 372 rse :- 17/10/2001 19:32
        * | :irc.engelschall.com 372 rse :- Welcome to the Engelschall VISP IRC Service.
        * | :irc.engelschall.com 376 rse :End of MOTD command.
        * | :rse MODE rse :+i
        * | JOIN #dev
        * | :rse!~rse@dev10.dev.de.cw.net JOIN :#dev
  -     * | :irc.engelschall.com 353 rse = #dev :@rse 
  +     * | :irc.engelschall.com 353 rse = #dev :@rse
        * | :irc.engelschall.com 366 rse #dev :End of NAMES list.
        * | PRIVMSG #dev :Sample log message line 1
  -     * | PRIVMSG #dev :Sample log message line 2 
  +     * | PRIVMSG #dev :Sample log message line 2
        * | PRIVMSG #dev :Sample log message line 3
        * | QUIT
        * | ERROR :Closing Link: rse[~rse@dev10.dev.de.cw.net] (I Quit)
  @@ -214,10 +215,10 @@
           sa_writef(sa, "JOIN %s\r\n", cfg->cpChannel);
       sa_writef(sa, "PRIVMSG %s :", cfg->cpChannel);
       if (cfg->cpLocalProg != NULL)
  -        sa_writef(sa, "Program %s of user %s on host %s logged at %s:\r\n", 
  +        sa_writef(sa, "Program %s of user %s on host %s logged at %s:\r\n",
                      cfg->cpLocalProg, cfg->cpLocalUser, cfg->cpLocalHost, caDate);
       else
  -        sa_writef(sa, "A program of user %s on host %s logged at %s:\r\n", 
  +        sa_writef(sa, "A program of user %s on host %s logged at %s:\r\n",
                      cfg->cpLocalUser, cfg->cpLocalHost, caDate);
       sa_writef(sa, "PRIVMSG %s :", cfg->cpChannel);
       sa_write(sa, buf, buf_size-1, NULL);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_noop.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 l2_ch_noop.c
  --- ossp-pkg/l2/l2_ch_noop.c	30 Jul 2002 19:08:24 -0000	1.4
  +++ ossp-pkg/l2/l2_ch_noop.c	6 Jan 2003 11:41:51 -0000	1.5
  @@ -1,9 +1,10 @@
   /*
  -**  OSSP l2 - Logging Library
  -**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  OSSP l2 - Flexible Logging
  +**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
  -**  This file is part of OSSP L2, a flexible logging library which
  +**  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_null.c
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 l2_ch_null.c
  --- ossp-pkg/l2/l2_ch_null.c	30 Jul 2002 19:08:24 -0000	1.12
  +++ ossp-pkg/l2/l2_ch_null.c	6 Jan 2003 11:41:51 -0000	1.13
  @@ -1,9 +1,10 @@
   /*
  -**  OSSP l2 - Logging Library
  -**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  OSSP l2 - Flexible Logging
  +**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
  -**  This file is part of OSSP L2, a flexible logging library which
  +**  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_pipe.c
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 l2_ch_pipe.c
  --- ossp-pkg/l2/l2_ch_pipe.c	30 Jul 2002 19:08:24 -0000	1.30
  +++ ossp-pkg/l2/l2_ch_pipe.c	6 Jan 2003 11:41:51 -0000	1.31
  @@ -1,9 +1,10 @@
   /*
  -**  OSSP l2 - Logging Library
  -**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  OSSP l2 - Flexible Logging
  +**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
  -**  This file is part of OSSP L2, a flexible logging library which
  +**  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -75,7 +76,7 @@
       else if (sig == SIGPIPE);          /* noop for now                      */
   }
   
  -/* 
  +/*
    * The lifecycle of the command executed by the pipe channel handler
    * depends on the runtime option selected during configuration. The
    * option 'continuous' describes subsequent behavior which rebuilds an
  @@ -152,12 +153,12 @@
   
       /* initialize configuration with reasonable defaults */
       cfg->Pid        = -1;
  -    cfg->iWritefail =  0; 
  -    cfg->piFd[0]    = -1; 
  -    cfg->piFd[1]    = -1; 
  -    cfg->iNulldev   = -1; 
  -    cfg->iMode      = -1; 
  -    cfg->iRtme      = -1; 
  +    cfg->iWritefail =  0;
  +    cfg->piFd[0]    = -1;
  +    cfg->piFd[1]    = -1;
  +    cfg->iNulldev   = -1;
  +    cfg->iMode      = -1;
  +    cfg->iRtme      = -1;
       cfg->szCmdpath  = NULL;
       memset(&cfg->sigchld, 0, sizeof(cfg->sigchld));
       memset(&cfg->sigpipe, 0, sizeof(cfg->sigpipe));
  @@ -172,7 +173,7 @@
   static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
       l2_ch_pipe_t *cfg = (l2_ch_pipe_t *)ctx->vp;
  -    l2_param_t pa[4]; 
  +    l2_param_t pa[4];
       l2_result_t rv;
       char *szMode = NULL;
       char *szRel  = NULL;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_prefix.c
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 l2_ch_prefix.c
  --- ossp-pkg/l2/l2_ch_prefix.c	6 Aug 2002 12:55:06 -0000	1.22
  +++ ossp-pkg/l2/l2_ch_prefix.c	6 Jan 2003 11:41:51 -0000	1.23
  @@ -1,9 +1,10 @@
   /*
  -**  OSSP l2 - Logging Library
  -**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  OSSP l2 - Flexible Logging
  +**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
  -**  This file is part of OSSP L2, a flexible logging library which
  +**  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -64,7 +65,7 @@
   static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
       l2_ch_prefix_t *cfg = (l2_ch_prefix_t *)ctx->vp;
  -    l2_param_t pa[3]; 
  +    l2_param_t pa[3];
       l2_result_t rv;
       l2_env_t *env;
   
  @@ -79,7 +80,7 @@
       if (rv == L2_OK) {
           if (cfg->timezone == NULL)
               return L2_ERR_ARG;
  -        if (!(   strcmp(cfg->timezone, "local") == 0 
  +        if (!(   strcmp(cfg->timezone, "local") == 0
                 || strcmp(cfg->timezone, "utc")   == 0))
               return L2_ERR_ARG;
       }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_smtp.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 l2_ch_smtp.c
  --- ossp-pkg/l2/l2_ch_smtp.c	30 Jul 2002 19:08:24 -0000	1.10
  +++ ossp-pkg/l2/l2_ch_smtp.c	6 Jan 2003 11:41:51 -0000	1.11
  @@ -1,9 +1,10 @@
   /*
  -**  OSSP l2 - Logging Library
  -**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  OSSP l2 - Flexible Logging
  +**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
  -**  This file is part of OSSP L2, a flexible logging library which
  +**  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -46,7 +47,7 @@
       char *cpLocalProg;
       char *cpLocalUser;
       char *cpLocalHost;
  -    long nTimeout; 
  +    long nTimeout;
       sa_addr_t *saaServer;
       sa_t *saServer;
   } l2_ch_smtp_t;
  @@ -91,7 +92,7 @@
   static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
       l2_ch_smtp_t *cfg = (l2_ch_smtp_t *)ctx->vp;
  -    l2_param_t pa[10]; 
  +    l2_param_t pa[10];
       l2_result_t rv;
       l2_env_t *env;
   
  @@ -125,7 +126,7 @@
       /* create socket address */
       if ((rc = sa_addr_create(&cfg->saaServer)) != SA_OK)
           return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
  -    if ((rc = sa_addr_u2a(cfg->saaServer, "inet://%s:%s", 
  +    if ((rc = sa_addr_u2a(cfg->saaServer, "inet://%s:%s",
                             cfg->cpHost, cfg->cpPort)) != SA_OK)
           return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
   
  @@ -158,8 +159,8 @@
       struct tm *tm;
       time_t t;
       char caDate[80];
  -    
  -    /* 
  +
  +    /*
        * Sample SMTP transaction for reference:
        *
        * | 220 en1.engelschall.com ESMTP SMTP Sendmail 8.11.0+ ready
  @@ -175,7 +176,7 @@
        * | From: rse@en1.engelschall.com
        * | To: rse@engelschall.com
        * | Subject: [L2] log channel output on en1.engelschall.com
  -     * | User-Agent: L2/0.1.0                                                                              
  +     * | User-Agent: L2/0.1.0
        * |
        * | A program of user rse on host en1.engelschall.com logged:
        * | [2001-09-10/01:02:03] <notice> sample logging message
  @@ -198,7 +199,7 @@
       /* | 220 en1.engelschall.com ESMTP SMTP Sendmail 8.11.0+ ready */
       sa_rv = sa_readln(sa, caLine, sizeof(caLine), &n);
       cu_on(!(sa_rv == SA_OK && n > 3 && atoi(caLine) == 220), L2_ERR_IO);
  -    
  +
       /* | HELO l2
        * | 250 en1.engelschall.com Hello en1.engelschall.com [141.1.129.1], pleased to meet you */
       sa_writef(sa, "HELO %s\r\n", cfg->cpLocalHost);
  @@ -227,7 +228,7 @@
        * | From: rse@en1.engelschall.com
        * | To: rse@engelschall.com
        * | Subject: [L2] log channel output on en1.engelschall.com
  -     * | User-Agent: L2/0.1.0                                                                              
  +     * | User-Agent: L2/0.1.0
        * |                                                             */
       t = time(NULL);
       tm = localtime(&t);
  @@ -237,7 +238,7 @@
       sa_writef(sa, "To: %s\r\n", cfg->cpRcpt);
       sa_writef(sa, "Subject: %s\r\n", cfg->cpSubject);
       if (cfg->cpLocalProg != NULL)
  -        sa_writef(sa, "User-Agent: %s (%s)\r\n", 
  +        sa_writef(sa, "User-Agent: %s (%s)\r\n",
                     l2_version.v_web, cfg->cpLocalProg);
       else
           sa_writef(sa, "User-Agent: %s\r\n", l2_version.v_web);
  @@ -246,10 +247,10 @@
       /* | A program of user rse on host en1.engelschall.com logged:
        * | [2001-09-10/01:02:03] <notice> sample logging message      */
       if (cfg->cpLocalProg != NULL)
  -        sa_writef(sa, "Program %s of user %s on host %s logged:\r\n", 
  +        sa_writef(sa, "Program %s of user %s on host %s logged:\r\n",
                      cfg->cpLocalProg, cfg->cpLocalUser, cfg->cpLocalHost);
       else
  -        sa_writef(sa, "A program of user %s on host %s logged:\r\n", 
  +        sa_writef(sa, "A program of user %s on host %s logged:\r\n",
                      cfg->cpLocalUser, cfg->cpLocalHost);
       cpB = buf;
       cpE = buf;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_socket.c
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 l2_ch_socket.c
  --- ossp-pkg/l2/l2_ch_socket.c	9 Nov 2002 14:44:31 -0000	1.37
  +++ ossp-pkg/l2/l2_ch_socket.c	6 Jan 2003 11:41:51 -0000	1.38
  @@ -1,9 +1,10 @@
   /*
  -**  OSSP l2 - Logging Library
  -**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  OSSP l2 - Flexible Logging
  +**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
  -**  This file is part of OSSP L2, a flexible logging library which
  +**  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -43,7 +44,7 @@
       char      *szProto;
       char      *szHost;
       char      *szPort;
  -    long       nTimeout; 
  +    long       nTimeout;
       sa_addr_t *saaRemote;
       sa_t      *saRemote;
   } l2_ch_socket_t;
  @@ -143,7 +144,7 @@
               return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
       }
   
  -    /* write message to channel socket, but check to make  
  +    /* write message to channel socket, but check to make
          sure that the whole message was successfully written */
       sizeWrite  = 0;
       sizeRemain = buf_size;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_syslog.c
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 l2_ch_syslog.c
  --- ossp-pkg/l2/l2_ch_syslog.c	9 Nov 2002 14:44:31 -0000	1.32
  +++ ossp-pkg/l2/l2_ch_syslog.c	6 Jan 2003 11:41:51 -0000	1.33
  @@ -1,9 +1,10 @@
   /*
  -**  OSSP l2 - Logging Library
  -**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  OSSP l2 - Flexible Logging
  +**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
  -**  This file is part of OSSP L2, a flexible logging library which
  +**  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -191,7 +192,7 @@
           cfg->nFacility = l2_ch_syslog_SLfac[i].numLOCAL;
       else
           cfg->nFacility = (l2_ch_syslog_SLfac[i].numREMOTE << 3);
  -    if (   strcmp(cfg->szTarget, "remote") == 0 
  +    if (   strcmp(cfg->szTarget, "remote") == 0
           && (cfg->szRemoteHost == NULL
               || (cfg->nRemotePort <= 0 || cfg->nRemotePort >= 65536)))
           return L2_ERR_USE;
  @@ -227,7 +228,7 @@
               return L2_ERR_USE;
           if ((rc = sa_addr_create(&cfg->saaRemoteAddr)) != SA_OK)
               return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
  -        if ((rc = sa_addr_u2a(cfg->saaRemoteAddr, "inet://%s:%d", 
  +        if ((rc = sa_addr_u2a(cfg->saaRemoteAddr, "inet://%s:%d",
                                 cfg->szRemoteHost, cfg->nRemotePort)) != SA_OK)
               return (rc == SA_ERR_SYS ? L2_ERR_SYS : L2_ERR_INT);
           if ((rc = sa_create(&cfg->saRemoteSock)) != SA_OK)
  @@ -287,13 +288,13 @@
           strftime(caTime, sizeof(caTime), "%b %d %H:%M:%S", tm);
           if (caTime[4] == '0')
               caTime[4] = ' ';
  -        if (cfg->bLogPid) 
  -            n = l2_util_sprintf(caBuf, sizeof(caBuf), "<%d>%s %s %s[%lu]: %s", 
  -                                prio, caTime, cfg->szLocalHost, 
  +        if (cfg->bLogPid)
  +            n = l2_util_sprintf(caBuf, sizeof(caBuf), "<%d>%s %s %s[%lu]: %s",
  +                                prio, caTime, cfg->szLocalHost,
                                   cfg->szIdent, (unsigned long)getpid(), buf);
           else
  -            n = l2_util_sprintf(caBuf, sizeof(caBuf), "<%d>%s %s %s: %s", 
  -                                prio, caTime, cfg->szLocalHost, 
  +            n = l2_util_sprintf(caBuf, sizeof(caBuf), "<%d>%s %s %s: %s",
  +                                prio, caTime, cfg->szLocalHost,
                                   cfg->szIdent, buf);
           if ((n = strlen(caBuf)) > 1024)
               return L2_ERR_IO;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_channel.c
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 l2_channel.c
  --- ossp-pkg/l2/l2_channel.c	30 Jul 2002 19:08:25 -0000	1.29
  +++ ossp-pkg/l2/l2_channel.c	6 Jan 2003 11:41:51 -0000	1.30
  @@ -1,9 +1,10 @@
   /*
  -**  OSSP l2 - Logging Library
  -**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  OSSP l2 - Flexible Logging
  +**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
  -**  This file is part of OSSP L2, a flexible logging library which
  +**  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -30,7 +31,7 @@
   
   #include "l2_p.h"
   
  -/* 
  +/*
    * A channel is the central object for a logging stream. It is
    * implemented by a framework (the code implemented here) which provides
    * the channel API and which is equal for all channels and a particular
  @@ -309,8 +310,8 @@
           rv = ch->handler.open(&ch->context, ch);
       else
           rv = L2_OK_PASS;
  -   
  -    /* optionally pass operation downstream */ 
  +
  +    /* optionally pass operation downstream */
       if (rv == L2_OK_PASS) {
           rv = L2_OK;
           chD = NULL;
  @@ -367,8 +368,8 @@
           rv = ch->handler.write(&ch->context, ch, level, buf, bufsize);
       else
           rv = L2_OK_PASS;
  -   
  -    /* optionally pass operation downstream */ 
  +
  +    /* optionally pass operation downstream */
       if (rv == L2_OK_PASS) {
           rv = L2_OK;
           chD = NULL;
  @@ -400,8 +401,8 @@
           rv = ch->handler.flush(&ch->context, ch);
       else
           rv = L2_OK_PASS;
  -   
  -    /* optionally pass operation downstream */ 
  +
  +    /* optionally pass operation downstream */
       if (rv == L2_OK_PASS) {
           rv = L2_OK;
           chD = NULL;
  @@ -423,7 +424,7 @@
       /* argument sanity check */
       if (ch == NULL)
           return L2_ERR_ARG;
  -    
  +
       /* make sure channel is in state "opened" */
       if (ch->state != L2_CHSTATE_OPENED)
           return L2_ERR_USE;
  @@ -433,8 +434,8 @@
           rv = ch->handler.close(&ch->context, ch);
       else
           rv = L2_OK_PASS;
  -   
  -    /* optionally pass operation downstream */ 
  +
  +    /* optionally pass operation downstream */
       if (rv == L2_OK_PASS) {
           rv = L2_OK;
           chD = NULL;
  @@ -471,8 +472,8 @@
           rv = ch->handler.destroy(&ch->context, ch);
       else
           rv = L2_OK_PASS;
  -   
  -    /* optionally pass operation downstream */ 
  +
  +    /* optionally pass operation downstream */
       if (rv == L2_OK_PASS) {
           rv = L2_OK;
           chD = NULL;
  @@ -528,7 +529,7 @@
       /* iterate over all configured L2 formatters */
       for (i = 0; i < L2_MAX_FORMATTERS && env->formatters[i].cb != NULL; i++) {
           if (env->formatters[i].id == cId) {
  -            rv = env->formatters[i].cb(env->formatters[i].ctx, cId, cpParam, 
  +            rv = env->formatters[i].cb(env->formatters[i].ctx, cId, cpParam,
                                          cpBuf, nBufLenMax, npOutLen, apArgs);
               vfmt->data[1].i = (int)rv;
               if (rv == L2_OK) {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_env.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 l2_env.c
  --- ossp-pkg/l2/l2_env.c	30 Jul 2002 19:08:25 -0000	1.9
  +++ ossp-pkg/l2/l2_env.c	6 Jan 2003 11:41:51 -0000	1.10
  @@ -1,9 +1,10 @@
   /*
  -**  OSSP l2 - Logging Library
  -**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  OSSP l2 - Flexible Logging
  +**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
  -**  This file is part of OSSP L2, a flexible logging library which
  +**  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -38,8 +39,8 @@
       /* argument sanity check */
       if (envp == NULL)
           return L2_ERR_ARG;
  -    
  -    /* allocate environment structure */ 
  +
  +    /* allocate environment structure */
       if ((env = (l2_env_t *)malloc(sizeof(l2_env_t))) == NULL)
           return L2_ERR_SYS;
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_p.h
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 l2_p.h
  --- ossp-pkg/l2/l2_p.h	30 Jul 2002 19:08:25 -0000	1.33
  +++ ossp-pkg/l2/l2_p.h	6 Jan 2003 11:41:52 -0000	1.34
  @@ -1,8 +1,10 @@
   /*
  -**  OSSP l2 - Logging Library
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland GmbH
  +**  OSSP l2 - Flexible Logging
  +**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
  -**  This file is part of OSSP L2, a flexible logging library which
  +**  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -74,7 +76,7 @@
   #define L2_MAX_MSGSIZE         4096
   #define L2_MAX_FORMATTERS       128
   #define L2_MAX_HANDLERS         128
  -#define L2_BROKEN_TIMER          -1 
  +#define L2_BROKEN_TIMER          -1
   #define L2_BUFFER_TIMER ITIMER_REAL /* for [s|g]etitimer() and alarm() */
   
   /* internal channel state */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_spec.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 l2_spec.c
  --- ossp-pkg/l2/l2_spec.c	30 Jul 2002 19:08:25 -0000	1.9
  +++ ossp-pkg/l2/l2_spec.c	6 Jan 2003 11:41:52 -0000	1.10
  @@ -1,9 +1,10 @@
   /*
  -**  OSSP l2 - Logging Library
  -**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  OSSP l2 - Flexible Logging
  +**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
  -**  This file is part of OSSP L2, a flexible logging library which
  +**  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -68,7 +69,7 @@
       l2_spec_lex_init(&yyscan);
       l2_spec_set_extra(&ctx, yyscan);
   
  -    /* establish our own context which is passed 
  +    /* establish our own context which is passed
          through the parser and scanner */
       ctx.yyscan   = yyscan;
       ctx.inputptr = specstr;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_spec.h
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 l2_spec.h
  --- ossp-pkg/l2/l2_spec.h	14 Dec 2001 12:42:07 -0000	1.3
  +++ ossp-pkg/l2/l2_spec.h	6 Jan 2003 11:41:52 -0000	1.4
  @@ -1,3 +1,33 @@
  +/*
  +**  OSSP l2 - Flexible Logging
  +**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**
  +**  This file is part of OSSP l2, a flexible logging library which
  +**  can be found at http://www.ossp.org/pkg/lib/l2/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  l2_spec.h: specification common header
  +*/
  +
   #ifndef __L2_SPEC_H__
   #define __L2_SPEC_H__
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_spec_parse.y
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 l2_spec_parse.y
  --- ossp-pkg/l2/l2_spec_parse.y	6 Jan 2003 11:19:45 -0000	1.9
  +++ ossp-pkg/l2/l2_spec_parse.y	6 Jan 2003 11:41:52 -0000	1.10
  @@ -1,10 +1,11 @@
   %{
   /*
  -**  OSSP l2 - Logging Library
  -**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  OSSP l2 - Flexible Logging
  +**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
  -**  This file is part of OSSP L2, a flexible logging library which
  +**  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -39,10 +40,10 @@
   #define YYPARSE_PARAM ctx
   #define YYLEX_PARAM   CTX->yyscan
   
  -/* provide an explicit prototype for the yylex() function but use 
  -   "void *" instead of correct type because at this point in the 
  +/* provide an explicit prototype for the yylex() function but use
  +   "void *" instead of correct type because at this point in the
      generation process we have the types still not available */
  -extern int yylex(/*YYSTYPE*/ void *lvalp, 
  +extern int yylex(/*YYSTYPE*/ void *lvalp,
                    /*YYLTYPE*/ void *llocp, l2_spec_ctx_t *ctx);
   
   /* generate verbose error messages and remember them inside the context */
  @@ -85,7 +86,7 @@
   /* operator association */
   %right T_OP_ARROW
   
  -/* grammar start rule 
  +/* grammar start rule
      (technically redundant but explicit to be sure) */
   %start tree
   
  @@ -93,10 +94,10 @@
   
   /* channel tree */
   tree
  -    : stream { 
  +    : stream {
             CTX->ch = $1;
         }
  -    ; 
  +    ;
   
   /* stream of channels */
   stream
  @@ -108,18 +109,18 @@
             }
             $$ = ch;
         }
  -    | channel { 
  -          $$ = $1; 
  +    | channel {
  +          $$ = $1;
         }
  -    | channel T_OP_ARROW stream { 
  -          $$ = $1; 
  +    | channel T_OP_ARROW stream {
  +          $$ = $1;
             if ((CTX->rv = l2_channel_link($1, L2_LINK_CHILD, $3, NULL)) != L2_OK) {
                 l2_spec_error(CTX, CTX->rv, &yylloc, "unable to link parent with child");
                 YYERROR;
             }
         }
  -    | channel T_OP_ARROW '{' streams '}' { 
  -          $$ = $1; 
  +    | channel T_OP_ARROW '{' streams '}' {
  +          $$ = $1;
             if ((CTX->rv = l2_channel_link($1, L2_LINK_CHILD, $4, NULL)) != L2_OK) {
                 l2_spec_error(CTX, CTX->rv, &yylloc, "unable to link parent with child list");
                 YYERROR;
  @@ -129,11 +130,11 @@
   
   /* list of sibling streams */
   streams
  -    : stream { 
  -          $$ = $1; 
  +    : stream {
  +          $$ = $1;
         }
  -    | stream ';' streams { 
  -          $$ = $1; 
  +    | stream ';' streams {
  +          $$ = $1;
             if ((CTX->rv = l2_channel_link($1, L2_LINK_SIBLING, $3, NULL)) != L2_OK) {
                 l2_spec_error(CTX, CTX->rv, &yylloc, "unable to link childs together");
                 YYERROR;
  @@ -143,28 +144,28 @@
   
   /* channel */
   channel
  -    : channel_level '/' channel_level ':' channel_cons { 
  -          $$ = $5; 
  +    : channel_level '/' channel_level ':' channel_cons {
  +          $$ = $5;
             if ((CTX->rv = l2_channel_levels($5, $1, $3)) != L2_OK) {
                 l2_spec_error(CTX, CTX->rv, &yylloc, "failed to set channel write and flush levels");
                 YYERROR;
             }
         }
  -    | channel_level ':' channel_cons { 
  -          $$ = $3; 
  +    | channel_level ':' channel_cons {
  +          $$ = $3;
             if ((CTX->rv = l2_channel_levels($3, $1, L2_LEVEL_NONE)) != L2_OK) {
                 l2_spec_error(CTX, CTX->rv, &yylloc, "failed to set channel write levels");
                 YYERROR;
             }
         }
  -    | channel_cons { 
  +    | channel_cons {
             $$ = $1;
         }
       ;
   
   /* channel level */
   channel_level
  -    : T_ID { 
  +    : T_ID {
             unsigned int levelmask;
             if ((CTX->rv = l2_util_s2l($1, strlen($1), ',', &levelmask)) != L2_OK) {
                 l2_spec_error(CTX, CTX->rv, &yylloc, "invalid level '%s'", $1);
  @@ -172,14 +173,14 @@
             }
             $$ = L2_LEVEL_UPTO(levelmask);
         }
  -    | '(' channel_level_mask ')' { 
  -          $$ = $2; 
  +    | '(' channel_level_mask ')' {
  +          $$ = $2;
         }
       ;
   
   /* channel level mask */
  -channel_level_mask 
  -    : T_ID { 
  +channel_level_mask
  +    : T_ID {
             unsigned int levelmask;
             if ((CTX->rv = l2_util_s2l($1, strlen($1), ',', &levelmask)) != L2_OK) {
                 l2_spec_error(CTX, CTX->rv, &yylloc, "invalid level '%s'", $1);
  @@ -187,19 +188,19 @@
             }
             $$ = levelmask;
         }
  -    | T_ID '|' channel_level_mask { 
  +    | T_ID '|' channel_level_mask {
             unsigned int levelmask;
             if ((CTX->rv = l2_util_s2l($1, strlen($1), ',', &levelmask)) != L2_OK) {
                 l2_spec_error(CTX, CTX->rv, &yylloc, "invalid level '%s'", $1);
                 YYERROR;
             }
  -          $$ = levelmask | $3; 
  +          $$ = levelmask | $3;
         }
       ;
   
   /* channel constructor */
  -channel_cons   
  -    : T_ID { 
  +channel_cons
  +    : T_ID {
             l2_channel_t *ch;
             if ((CTX->rv = l2_channel_create(&ch, CTX->env, $1)) != L2_OK) {
                 l2_spec_error(CTX, CTX->rv, &yylloc, "failed to create channel '%s'", $1);
  @@ -210,36 +211,36 @@
                not know where on the token stack our $$ is because it is a
                sub-rule of the recursive channel_param_list rule and hence
                cannot use "$<chChannel>-n". */
  -          CTX->chTmp = ch; 
  +          CTX->chTmp = ch;
         }
  -      channel_params { 
  +      channel_params {
             $$ = $<chChannel>2; /* pass-through result */
             CTX->chTmp = NULL;
         }
       ;
   
   /* channel parameters */
  -channel_params 
  +channel_params
       : /* empty */
       | '(' ')'
       | '(' channel_param_list ')'
       ;
   
   /* channel parameter list */
  -channel_param_list 
  +channel_param_list
       : channel_param
       | channel_param ',' channel_param_list
       ;
  -        
  +
   /* channel parameter */
  -channel_param  
  -    : T_ID '=' { l2_spec_scan_push(CTX, "SS_PARAM"); } T_PARAM { l2_spec_scan_pop(CTX); } { 
  +channel_param
  +    : T_ID '=' { l2_spec_scan_push(CTX, "SS_PARAM"); } T_PARAM { l2_spec_scan_pop(CTX); } {
             if ((CTX->rv = l2_channel_configure(CTX->chTmp, "%s=\"%s\"", $1, $4)) != L2_OK) {
                 l2_spec_error(CTX, CTX->rv, &yylloc, "failed to configure channel with '%s=\"%s\"'", $1, $4);
                 YYERROR;
             }
         }
       ;
  - 
  +
   %%
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_spec_scan.l
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 l2_spec_scan.l
  --- ossp-pkg/l2/l2_spec_scan.l	6 Jan 2003 11:19:45 -0000	1.11
  +++ ossp-pkg/l2/l2_spec_scan.l	6 Jan 2003 11:41:52 -0000	1.12
  @@ -1,10 +1,11 @@
   %{
   /*
  -**  OSSP l2 - Logging Library
  -**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  OSSP l2 - Flexible Logging
  +**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
  -**  This file is part of OSSP L2, a flexible logging library which
  +**  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -106,7 +107,7 @@
   <SS_PARAM_Q>\n {
       l2_spec_error(CTX, L2_ERR_SYN, yylloc, "Unterminated string");
       return 0;
  -}   
  +}
   <SS_PARAM_Q>\\[0-7]{1,3} {
       unsigned int result;
       (void)sscanf(yytext+1, "%o", &result);
  @@ -150,7 +151,7 @@
   }
   
      /* operators */
  -"->" { 
  +"->" {
       return T_OP_ARROW;
   }
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_test.c
  ============================================================================
  $ cvs diff -u -r1.50 -r1.51 l2_test.c
  --- ossp-pkg/l2/l2_test.c	30 Jul 2002 19:08:25 -0000	1.50
  +++ ossp-pkg/l2/l2_test.c	6 Jan 2003 11:41:52 -0000	1.51
  @@ -1,9 +1,10 @@
   /*
  -**  OSSP l2 - Logging Library
  -**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  OSSP l2 - Flexible Logging
  +**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
  -**  This file is part of OSSP L2, a flexible logging library which
  +**  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -45,12 +46,12 @@
       exit(1);
   }
   
  -static l2_result_t 
  +static l2_result_t
   formatter(l2_context_t *ctx, const char id, const char *param,
             char *bufptr, size_t bufsize, size_t *buflen, va_list *ap)
   {
       int i;
  -    
  +
       i = va_arg(*ap, int);
       sprintf(bufptr, "[%d/%s]", i, param);
       *buflen = strlen(bufptr);
  @@ -153,7 +154,7 @@
       /* open channel tree */
       if ((rv = l2_channel_open(ch)) != L2_OK)
           die(env, rv, "failed to open channel tree");
  -    
  +
       /* perform a few log operations */
       if ((rv = l2_channel_log(ch, L2_LEVEL_PANIC, "1: Checking localhost %s %{myparm}k <%{text}S><%{hex}S><%{base64}S>\n", "foo", 12345, "foo\1bar", 7, "foo\1bar", 7, "foo\1bar", 7)) != L2_OK)
           die(env, rv, "failed to log message #1 to channel");
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_fmtcb.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 l2_ut_fmtcb.c
  --- ossp-pkg/l2/l2_ut_fmtcb.c	30 Jul 2002 19:08:25 -0000	1.6
  +++ ossp-pkg/l2/l2_ut_fmtcb.c	6 Jan 2003 11:41:52 -0000	1.7
  @@ -1,9 +1,10 @@
   /*
  -**  OSSP l2 - Logging Library
  -**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  OSSP l2 - Flexible Logging
  +**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
  -**  This file is part of OSSP L2, a flexible logging library which
  +**  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -32,9 +33,9 @@
   #include "l2.h"
   #include <errno.h>
   
  -l2_result_t 
  +l2_result_t
   l2_util_fmt_string(
  -    l2_context_t *ctx, const char id, const char *param, 
  +    l2_context_t *ctx, const char id, const char *param,
       char *bufptr, size_t bufsize, size_t *buflen, va_list *ap)
   {
       char *cpStr;
  @@ -51,13 +52,13 @@
       return L2_OK;
   }
   
  -l2_result_t 
  +l2_result_t
   l2_util_fmt_dump(
  -    l2_context_t *ctx, const char id, const char *param, 
  +    l2_context_t *ctx, const char id, const char *param,
       char *bufptr, size_t bufsize, size_t *buflen, va_list *ap)
   {
       static const char hex_table[]    = "0123456789abcdef";
  -    static const char base64_table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 
  +    static const char base64_table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
                                          "abcdefghijklmnopqrstuvwxyz"
                                          "0123456789+/";
       unsigned char base64_in[3];
  @@ -78,7 +79,7 @@
       if (ucpData == NULL)
           return L2_ERR_ARG;
   
  -    /* 
  +    /*
        * textual dumping: "foo\1bar" -> "foo\x01bar"
        */
       if (strcmp(param, "text") == 0 || param[0] == '\0') {
  @@ -102,9 +103,9 @@
                       return L2_ERR_MEM;
                   *cpO++ = '\\';
                   switch ((int)uc) {
  -                    case '\t': *cpO++ = 't'; break; 
  -                    case '\r': *cpO++ = 'r'; break; 
  -                    case '\n': *cpO++ = 'n'; break; 
  +                    case '\t': *cpO++ = 't'; break;
  +                    case '\r': *cpO++ = 'r'; break;
  +                    case '\n': *cpO++ = 'n'; break;
                       default: break;
                   }
               }
  @@ -120,7 +121,7 @@
           *buflen = ((char *)cpO - bufptr);
       }
   
  -    /* 
  +    /*
        * hexadecimal dumping: "foo\1bar" -> "66:6f:6f:01:62:61:72"
        */
       else if (strcmp(param, "hex") == 0) {
  @@ -189,12 +190,12 @@
       return L2_OK;
   }
   
  -l2_result_t 
  +l2_result_t
   l2_util_fmt_errno(
       l2_context_t *ctx, const char id, const char *param,
       char *bufptr, size_t bufsize, size_t *buflen, va_list *ap)
  -{   
  -    sprintf(bufptr, "(%d) %s", errno, strerror(errno)); 
  +{
  +    sprintf(bufptr, "(%d) %s", errno, strerror(errno));
       *buflen = strlen(bufptr);
       return L2_OK;
   }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_format.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 l2_ut_format.c
  --- ossp-pkg/l2/l2_ut_format.c	22 Sep 2002 07:35:40 -0000	1.7
  +++ ossp-pkg/l2/l2_ut_format.c	6 Jan 2003 11:41:52 -0000	1.8
  @@ -1,9 +1,10 @@
   /*
  -**  OSSP l2 - Logging Library
  -**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  OSSP l2 - Flexible Logging
  +**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
  -**  This file is part of OSSP L2, a flexible logging library which
  +**  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -39,7 +40,7 @@
    * Especially any Apache and network specific kludges were removed again
    * and instead the formatting engine now can be extended by the caller
    * on-the-fly. It was then finally adjusted to be stand-alone for use
  - * inside OSSP L2.
  + * inside OSSP l2.
    */
   
   /*
  @@ -128,7 +129,7 @@
   #define FLOAT_DIGITS    6
   #define EXPONENT_LENGTH 10
   
  -/* NUM_BUF_SIZE is the size of the buffer used for arithmetic 
  +/* NUM_BUF_SIZE is the size of the buffer used for arithmetic
      conversions. This is a magic number; do NOT decrease it! */
   #define NUM_BUF_SIZE    512
   #define NDIG            80
  @@ -148,7 +149,7 @@
   #define l2_util_islower(c)  (islower(((unsigned char)(c))))
   #define l2_util_tolower(c)  (tolower((unsigned char)(c)))
   
  -/* 
  +/*
    * Convert decimal number to its string representation. The number of
    * digits is specified by ndigit decpt is set to the position of the
    * decimal point sign is set to 0 for positive, 1 for negative. buf must
  @@ -163,10 +164,10 @@
   
   static char *
   l2_util_cvt(
  -    double arg, 
  -    int ndigits, 
  -    int *decpt, 
  -    int *sign, 
  +    double arg,
  +    int ndigits,
  +    int *decpt,
  +    int *sign,
       int eflag,
       char *buf)
   {
  @@ -242,9 +243,9 @@
   
   static char *
   l2_util_gcvt(
  -    double number, 
  -    int ndigit, 
  -    char *buf, 
  +    double number,
  +    int ndigit,
  +    char *buf,
       int altform)
   {
       int sign;
  @@ -326,7 +327,7 @@
   }
   
   /*
  - * Convert a string to decimal value 
  + * Convert a string to decimal value
    */
   #define NUM(c) ((c) - '0')
   #define STR_TO_DEC(str, num) {    \
  @@ -336,7 +337,7 @@
           num += NUM(*str++) ;      \
       }                             \
   }
  -     
  +
   /*
    * This macro does zero padding so that the precision requirement is
    * satisfied. The padding is done by adding '0's to the left of the
  @@ -351,7 +352,7 @@
       }
   
   /*
  - * This macro does padding. 
  + * This macro does padding.
    * The padding is done by printing the character ch.
    */
   #define PAD(width, len, ch) \
  @@ -385,9 +386,9 @@
    */
   static char *
   conv_10(
  -    register long_int num, 
  +    register long_int num,
       register int is_unsigned,
  -    register int *is_negative, 
  +    register int *is_negative,
       char *buf_end,
       register size_t *len)
   {
  @@ -400,7 +401,7 @@
       }
       else {
           *is_negative = (num < 0);
  -        /* On a 2's complement machine, negating the most negative integer 
  +        /* On a 2's complement machine, negating the most negative integer
              results in a number that cannot be represented as a signed integer.
              Here is what we do to obtain the number's magnitude:
                   a. add 1 to the number
  @@ -427,9 +428,9 @@
   
   static char *
   conv_10_quad(
  -    quad_int num, 
  +    quad_int num,
       register int is_unsigned,
  -    register int *is_negative, 
  +    register int *is_negative,
       char *buf_end,
       register size_t *len)
   {
  @@ -442,7 +443,7 @@
       }
       else {
           *is_negative = (num < 0);
  -        /* On a 2's complement machine, negating the most negative integer 
  +        /* On a 2's complement machine, negating the most negative integer
              result in a number that cannot be represented as a signed integer.
              Here is what we do to obtain the number's magnitude:
                   a. add 1 to the number
  @@ -474,12 +475,12 @@
    */
   static char *
   conv_fp(
  -    register char format, 
  +    register char format,
       register double num,
  -    int add_dp, 
  -    int precision, 
  +    int add_dp,
  +    int precision,
       int *is_negative,
  -    char *buf, 
  +    char *buf,
       size_t *len)
   {
       register char *s = buf;
  @@ -535,7 +536,7 @@
           *s++ = format;          /* either e or E */
           decimal_point--;
           if (decimal_point != 0) {
  -            p = conv_10((long_int) decimal_point, FALSE, &exponent_is_negative, 
  +            p = conv_10((long_int) decimal_point, FALSE, &exponent_is_negative,
                           &temp[EXPONENT_LENGTH], &t_len);
               *s++ = exponent_is_negative ? '-' : '+';
               /* Make sure the exponent has at least 2 digits */
  @@ -572,10 +573,10 @@
   
   static char *
   conv_p2(
  -    register u_long_int num, 
  +    register u_long_int num,
       register int nbits,
  -    char format, 
  -    char *buf_end, 
  +    char format,
  +    char *buf_end,
       register size_t *len)
   {
       register int mask = (1 << nbits) - 1;
  @@ -592,10 +593,10 @@
   
   static char *
   conv_p2_quad(
  -    u_quad_int num, 
  +    u_quad_int num,
       register int nbits,
  -    char format, 
  -    char *buf_end, 
  +    char format,
  +    char *buf_end,
       register size_t *len)
   {
       register int mask = (1 << nbits) - 1;
  @@ -610,14 +611,14 @@
       return p;
   }
   
  -/* 
  +/*
    * l2_util_format(), the generic printf-style formatting routine
    * and heart of this piece of source.
    */
  -int 
  +int
   l2_util_format(
  -    l2_util_format_t *vbuff, 
  -    const char *fmt, 
  +    l2_util_format_t *vbuff,
  +    const char *fmt,
       va_list ap)
   {
       register char *sp;
  @@ -911,7 +912,7 @@
                       else {
                           /* use &num_buf[1], so that we have room for the sign */
                           s = conv_fp(*fmt, fp_num, alternate_form,
  -                                    (adjust_precision == FALSE) ? FLOAT_DIGITS : precision, 
  +                                    (adjust_precision == FALSE) ? FLOAT_DIGITS : precision,
                                       &is_negative, &num_buf[1], &s_len);
                           if (is_negative)
                               prefix_char = '-';
  @@ -986,7 +987,7 @@
                       break;
   
                   /*
  -                 * Pointer argument type. 
  +                 * Pointer argument type.
                    */
                   case 'p':
   #if defined(SIZEOF_LONG_LONG) && (SIZEOF_LONG_LONG == SIZEOF_VOID_P)
  @@ -1020,7 +1021,7 @@
                       s = NULL;
                       if (vbuff->format != NULL) {
                           vbuff->format(vbuff,
  -                                      &prefix_char, &pad_char, &s, &s_len, 
  +                                      &prefix_char, &pad_char, &s, &s_len,
                                         num_buf, NUM_BUF_SIZE, extinfo, *fmt, &ap);
                           if (s == NULL)
                               return -1;
  @@ -1051,7 +1052,7 @@
               }
   
               /*
  -             * Print the string s. 
  +             * Print the string s.
                */
               for (i = s_len; i != 0; i--) {
                   INS_CHAR(*s, sp, bep, cc);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_format.h
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 l2_ut_format.h
  --- ossp-pkg/l2/l2_ut_format.h	30 Jul 2002 19:08:25 -0000	1.3
  +++ ossp-pkg/l2/l2_ut_format.h	6 Jan 2003 11:41:52 -0000	1.4
  @@ -1,8 +1,10 @@
   /*
  -**  OSSP l2 - Logging Library
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland GmbH
  +**  OSSP l2 - Flexible Logging
  +**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
  -**  This file is part of OSSP L2, a flexible logging library which
  +**  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -49,17 +51,17 @@
           char *num_buf,                   /* input  arg: temporary buffer */
           int num_buf_size,                /* input  arg: temporary buffer len */
           char *extinfo,                   /* input  arg: extension information */
  -        char fmt_char,                   /* input  arg: current formatting character */ 
  +        char fmt_char,                   /* input  arg: current formatting character */
           va_list *ap                      /* in/out arg: variable argument pointer */
       );
   
       /* arbitrary passed-through application data */
  -    union { 
  -        int i;                        
  -        long l; 
  -        double d; 
  -        void *vp; 
  -    } data[6];                           
  +    union {
  +        int i;
  +        long l;
  +        double d;
  +        void *vp;
  +    } data[6];
   };
   
   typedef struct l2_util_format_st l2_util_format_t;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_level.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 l2_ut_level.c
  --- ossp-pkg/l2/l2_ut_level.c	30 Jul 2002 19:08:25 -0000	1.8
  +++ ossp-pkg/l2/l2_ut_level.c	6 Jan 2003 11:41:52 -0000	1.9
  @@ -1,9 +1,10 @@
   /*
  -**  OSSP l2 - Logging Library
  -**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  OSSP l2 - Flexible Logging
  +**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
  -**  This file is part of OSSP L2, a flexible logging library which
  +**  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -77,7 +78,7 @@
       }
       /* remove trailing comma */
       if ((maxlen-len) > 0)
  -        string[(maxlen-len)-1] = '\0'; 
  +        string[(maxlen-len)-1] = '\0';
   
       return L2_OK;
   }
  @@ -90,7 +91,7 @@
       hv = 0;
       while (cpB < cpE) {
           nibble = tolower((unsigned int)(*cpB++));
  -        if (isdigit(nibble)) 
  +        if (isdigit(nibble))
               nibble = nibble - '0';
           else
               nibble = nibble - 'a';
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_param.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 l2_ut_param.c
  --- ossp-pkg/l2/l2_ut_param.c	30 Jul 2002 19:08:25 -0000	1.9
  +++ ossp-pkg/l2/l2_ut_param.c	6 Jan 2003 11:41:52 -0000	1.10
  @@ -1,9 +1,10 @@
   /*
  -**  OSSP l2 - Logging Library
  -**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  OSSP l2 - Flexible Logging
  +**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
  -**  This file is part of OSSP L2, a flexible logging library which
  +**  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -41,7 +42,7 @@
       char *cpB, *cpE;
       char *spec;
       int ok;
  -    int i; 
  +    int i;
       int n;
   
       /* argument sanity check */
  @@ -62,7 +63,7 @@
           /* determine end of parameter name */
           cpE = cpB;
           if (!isalpha((int)*cpE)) {
  -            l2_env_errorinfo(env, L2_ERR_ARG, 
  +            l2_env_errorinfo(env, L2_ERR_ARG,
                                "expected alpha-numerical parameter "
                                "start character, got '%c'", *cpE);
               return L2_ERR_ARG;
  @@ -71,7 +72,7 @@
           while (isalnum((int)*cpE))
               cpE++;
           if (*cpE != '=') {
  -            l2_env_errorinfo(env, L2_ERR_ARG, 
  +            l2_env_errorinfo(env, L2_ERR_ARG,
                                "expected assignment operator ('='), "
                                "got '%c'", *cpE);
               return L2_ERR_ARG;
  @@ -134,13 +135,13 @@
                   else
                       val = strtol(cpB, &cpE, 10);
                   if ((val == LONG_MIN || val == LONG_MAX) && errno == ERANGE) {
  -                    l2_env_errorinfo(env, L2_ERR_ARG, 
  +                    l2_env_errorinfo(env, L2_ERR_ARG,
                                        "numerical parameter value out of range "
                                        "('%s')", cpB);
                       return L2_ERR_ARG;
                   }
                   if (*cpE != '\0') {
  -                    l2_env_errorinfo(env, L2_ERR_ARG, 
  +                    l2_env_errorinfo(env, L2_ERR_ARG,
                                        "expected valid numerical parameter value, "
                                        "got '%c' character", *cpE);
                       return L2_ERR_ARG;
  @@ -152,18 +153,18 @@
                   /* floating point parameter */
                   double val = strtod(cpB, &cpE);
                   if (val == HUGE_VAL && errno == ERANGE) {
  -                    l2_env_errorinfo(env, L2_ERR_ARG, 
  +                    l2_env_errorinfo(env, L2_ERR_ARG,
                                        "floating point parameter value too huge "
                                        "('%s')", cpB);
                       return L2_ERR_ARG;
                   }
                   if (val == 0 && cpE == cpB) {
  -                    l2_env_errorinfo(env, L2_ERR_ARG, 
  +                    l2_env_errorinfo(env, L2_ERR_ARG,
                                        "floating point parameter value conversion failed "
                                        "('%s')", cpB);
                   }
                   if (*cpE != '\0') {
  -                    l2_env_errorinfo(env, L2_ERR_ARG, 
  +                    l2_env_errorinfo(env, L2_ERR_ARG,
                                        "expected valid floating point parameter value, "
                                        "got '%c' character", *cpE);
                       return L2_ERR_ARG;
  @@ -173,7 +174,7 @@
               }
               case L2_TYPE_STR: {
                   /* string parameter */
  -                if (*(char **)(pa[i].store) != NULL) 
  +                if (*(char **)(pa[i].store) != NULL)
                       free(*(char **)(pa[i].store));
                   *(char **)(pa[i].store) = strdup(cpB);
                   break;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_pcre.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 l2_ut_pcre.c
  --- ossp-pkg/l2/l2_ut_pcre.c	11 Jan 2002 10:36:14 -0000	1.6
  +++ ossp-pkg/l2/l2_ut_pcre.c	6 Jan 2003 11:41:52 -0000	1.7
  @@ -1,4 +1,4 @@
  -/* 
  +/*
    *  Perl Compatible Regular Expression (PCRE) Library
    *  Copyright (c) 1997-2001 Philip Hazel <ph10@cam.ac.uk>
    *  Copyright (c) 1997-2001 University of Cambridge
  @@ -12,7 +12,7 @@
    *  for this version.
    */
   
  -/* 
  +/*
      This is a library of functions to support regular expressions whose syntax
      and semantics are as close as possible to those of the Perl 5 language. See
      the file Tech.Notes for some information on the internals.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2tool.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 l2tool.c
  --- ossp-pkg/l2/l2tool.c	30 Jul 2002 19:08:25 -0000	1.3
  +++ ossp-pkg/l2/l2tool.c	6 Jan 2003 11:41:52 -0000	1.4
  @@ -1,9 +1,10 @@
   /*
  -**  OSSP l2 - Logging Library
  -**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  OSSP l2 - Flexible Logging
  +**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
  -**  This file is part of OSSP L2, a flexible logging library which
  +**  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -24,7 +25,7 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  l2tool.c: L2 command line tool
  +**  l2tool.c: command line tool
   */
   
   #include <stdio.h>
  @@ -76,7 +77,7 @@
       /* open channel tree */
       if ((rv = l2_channel_open(ch)) != L2_OK)
           die(env, rv, "failed to open channel tree");
  -    
  +
       /* loop over stdin */
       while (fgets(caBuf, sizeof(caBuf), stdin) != NULL) {
           /* strip newline */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2tool.pod
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 l2tool.pod
  --- ossp-pkg/l2/l2tool.pod	30 Jul 2002 19:08:25 -0000	1.3
  +++ ossp-pkg/l2/l2tool.pod	6 Jan 2003 11:41:52 -0000	1.4
  @@ -1,9 +1,10 @@
   ##
  -##  OSSP l2 - Logging Library
  -##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  OSSP l2 - Flexible Logging
  +##  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  +##  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
  -##  This file is part of OSSP L2, a flexible logging library which
  +##  This file is part of OSSP l2, a flexible logging library which
   ##  can be found at http://www.ossp.org/pkg/lib/l2/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
  @@ -24,18 +25,18 @@
   ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   ##  SUCH DAMAGE.
   ##
  -##  l2tool.pod: L2 tool manual page
  +##  l2tool.pod: tool manual page
   ##
   
   =pod
   
   =head1 NAME
   
  -B<l2tool> - L2 loggin tool
  +B<l2tool> - OSSP l2 logging tool
   
   =head1 VERSION
   
  -OSSP L2 L2_VERSION_STR
  +OSSP l2 L2_VERSION_STR
   
   =head1 SYNOPSIS
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan  6 13:11:02 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4F1B27648C; Mon,  6 Jan 2003 13:11:01 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/act/ .cvsignore Makefile.in README TODO aclocal.m...
Message-Id: <20030106121101.4F1B27648C@mail.ossp.org>
Date: Mon,  6 Jan 2003 13:11:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Jan-2003 13:11:00
  Branch: HEAD                             Handle: 2003010612105701

  Modified files:
    ossp-pkg/act            .cvsignore Makefile.in README TODO aclocal.m4
                            act.h.in act.pod act_chain.h act_ctx.c act_ctx.h
                            act_ds.c act_ds.h act_grid.c act_grid.h act_hash.c
                            act_hash.h act_hash_fct.c act_hash_lh.c
                            act_hash_oh.c act_lib.c act_lib.h act_mem.c
                            act_mem.h act_p.h.in act_str.c act_test.c
                            act_vers.c configure.ac devtool devtool.conf
                            devtool.func
  Removed files:
    ossp-pkg/act            act_cfg.h.in

  Log:
    cleanup source tree

  Summary:
    Revision    Changes     Path
    1.3         +1  -0      ossp-pkg/act/.cvsignore
    1.7         +28 -11     ossp-pkg/act/Makefile.in
    1.6         +46 -21     ossp-pkg/act/README
    1.5         +27 -7      ossp-pkg/act/TODO
    1.3         +31 -3      ossp-pkg/act/aclocal.m4
    1.7         +8  -7      ossp-pkg/act/act.h.in
    1.3         +35 -3      ossp-pkg/act/act.pod
    1.3         +0  -55     ossp-pkg/act/act_cfg.h.in
    1.2         +7  -6      ossp-pkg/act/act_chain.h
    1.7         +9  -8      ossp-pkg/act/act_ctx.c
    1.7         +6  -5      ossp-pkg/act/act_ctx.h
    1.2         +6  -5      ossp-pkg/act/act_ds.c
    1.2         +8  -7      ossp-pkg/act/act_ds.h
    1.10        +29 -28     ossp-pkg/act/act_grid.c
    1.6         +6  -5      ossp-pkg/act/act_grid.h
    1.8         +6  -5      ossp-pkg/act/act_hash.c
    1.7         +8  -7      ossp-pkg/act/act_hash.h
    1.29        +95 -94     ossp-pkg/act/act_hash_fct.c
    1.11        +42 -41     ossp-pkg/act/act_hash_lh.c
    1.7         +14 -13     ossp-pkg/act/act_hash_oh.c
    1.6         +6  -5      ossp-pkg/act/act_lib.c
    1.2         +33 -0      ossp-pkg/act/act_lib.h
    1.11        +14 -13     ossp-pkg/act/act_mem.c
    1.8         +6  -5      ossp-pkg/act/act_mem.h
    1.9         +7  -6      ossp-pkg/act/act_p.h.in
    1.4         +9  -8      ossp-pkg/act/act_str.c
    1.5         +31 -3      ossp-pkg/act/act_test.c
    1.4         +10 -10     ossp-pkg/act/act_vers.c
    1.2         +35 -14     ossp-pkg/act/configure.ac
    1.2         +1  -1      ossp-pkg/act/devtool
    1.3         +38 -8      ossp-pkg/act/devtool.conf
    1.2         +2  -1      ossp-pkg/act/devtool.func
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/act/.cvsignore
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 .cvsignore
  --- ossp-pkg/act/.cvsignore	18 Jan 2002 18:13:05 -0000	1.2
  +++ ossp-pkg/act/.cvsignore	6 Jan 2003 12:10:57 -0000	1.3
  @@ -3,6 +3,7 @@
   config.cache
   config.status
   act_cfg.h
  +act_cfg.h.in
   act.h
   act_p.h
   act_test
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/act/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 Makefile.in
  --- ossp-pkg/act/Makefile.in	17 Jan 2002 20:19:57 -0000	1.6
  +++ ossp-pkg/act/Makefile.in	6 Jan 2003 12:10:57 -0000	1.7
  @@ -1,5 +1,30 @@
   ##
  -##  ACT Makefile
  +##  OSSP act - Abstract Container Types
  +##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP act, an abstract container type library
  +##  which can be found at http://www.ossp.org/pkg/lib/act/.
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  Makefile.in: make(1) build procedure
   ##
   
   CC      = @CC@
  @@ -13,17 +38,9 @@
   
   PRE     = act_p.h
   LIB     = libact.a
  -SRC     = act_mem.c act_ctx.c act_str.c act_grid.c act_lib.c act_hash.c act_hash_fct.c act_hash_oh.c act_hash_lh.c 
  -OBJ     = act_mem.o act_ctx.o act_str.o act_grid.o act_lib.o act_hash.o act_hash_fct.o act_hash_oh.o act_hash_lh.o 
  +SRC     = act_mem.c act_ctx.c act_str.c act_grid.c act_lib.c act_hash.c act_hash_fct.c act_hash_oh.c act_hash_lh.c
  +OBJ     = act_mem.o act_ctx.o act_str.o act_grid.o act_lib.o act_hash.o act_hash_fct.o act_hash_oh.o act_hash_lh.o
   TST     = act_test
  -
  -_VERSION_FILE = \
  -	$(S)act_vers.c
  -
  -_VERSION = \
  -	$(SHTOOL) version -l c -n 'Act' -p act_int_ $$OPT $(_VERSION_FILE);\
  -	V=`$(SHTOOL) version -l c -d long $(_VERSION_FILE)`;\
  -	$(SED) -e "s/Version .*(.*)/Version $$V/g" <README >README.n && mv README.n README
   
   all: $(PRE) $(LIB) $(TST)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/act/README
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 README
  --- ossp-pkg/act/README	2 Jan 2002 17:05:53 -0000	1.5
  +++ ossp-pkg/act/README	6 Jan 2003 12:10:57 -0000	1.6
  @@ -1,22 +1,47 @@
  -      _        _   
  -     / \   ___| |_ 
  -    / _ \ / __| __|
  -   / ___ \ (__| |_ 
  -  /_/   \_\___|\__|
  -                 
  -  Act -- Abstract Container Types
  -
  -  A lower level data structure library for abstract container types.
  -  Copyright (c) 1999-2002 Ralf S. Engelschall, All Rights Reserved. 
  -
  -           "`Reuse an expert's code' is the right advice for most people. 
  -            But it's a useless advice for the experts writing the code 
  -            in the first place.               -- Dan J. Bernstein
  -
  -  Design Goals:
  -  o allows low-level adjustments of data structures
  -  o uses a general contexts concept (shared memory support, user attachments)
  -  o is thread-safe + reentrant ?
  -  o allows the use of arbitrary user key/values
  -  o allows key/values to be loans or gifts
  +   _        ___  ____ ____  ____              _
  +  |_|_ _   / _ \/ ___/ ___||  _ \   __ _  ___| |_
  +  _|_||_| | | | \___ \___ \| |_) | / _` |/ __| __|
  + |_||_|_| | |_| |___) |__) |  __/ | (_| | (__| |_
  +  |_|_|_|  \___/|____/____/|_|     \__,_|\___|\__|
  +
  +  OSSP act - Abstract Container Types
  +  Version 0.0.0 (06-Jan-2003)
  +
  +  ABSTRACT
  +
  +  OSSP act is a lower level data structure library for abstract
  +  container types. [...]
  +
  +  COPYRIGHT AND LICENSE
  +
  +  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
  +
  +  This file is part of OSSP act, an abstract container type library
  +  which can be found at http://www.ossp.org/pkg/lib/act/.
  +
  +  Permission to use, copy, modify, and distribute this software for
  +  any purpose with or without fee is hereby granted, provided that
  +  the above copyright notice and this permission notice appear in all
  +  copies.
  +
  +  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +  SUCH DAMAGE.
  +
  +  HOME AND DOCUMENTATION
  +
  +  The documentation and latest release can be found on
  +
  +  o http://www.ossp.org/pkg/lib/act/
  +  o  ftp://ftp.ossp.org/pkg/lib/act/
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/act/TODO
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 TODO
  --- ossp-pkg/act/TODO	18 Jan 2002 18:17:55 -0000	1.4
  +++ ossp-pkg/act/TODO	6 Jan 2003 12:10:57 -0000	1.5
  @@ -1,11 +1,31 @@
  +   _        ___  ____ ____  ____              _
  +  |_|_ _   / _ \/ ___/ ___||  _ \   __ _  ___| |_
  +  _|_||_| | | | \___ \___ \| |_) | / _` |/ __| __|
  + |_||_|_| | |_| |___) |__) |  __/ | (_| | (__| |_
  +  |_|_|_|  \___/|____/____/|_|     \__,_|\___|\__|
   
  -- es sollte custom/domain-specific hash functions geben,
  -  die wissen, welche Keys reinkommen und auf diese
  -  spezzialisiert sind!
  -  Beispielsweise sollte bei Key=Pathname nur auf
  -  die letzten Bytes gehasht werden, etc.
  +  OSSP act - Abstract Container Types
   
  -- directory shrink?
  +  TODO
   
  -- heap, pqueue?
  +  - es sollte custom/domain-specific hash functions geben,
  +    die wissen, welche Keys reinkommen und auf diese
  +    spezzialisiert sind!
  +    Beispielsweise sollte bei Key=Pathname nur auf
  +    die letzten Bytes gehasht werden, etc.
  +
  +  - directory shrink?
  +
  +  - heap, pqueue?
  +
  +             "`Reuse an expert's code' is the right advice for most people.
  +              But it's a useless advice for the experts writing the code
  +              in the first place.               -- Dan J. Bernstein
  +
  +    Design Goals:
  +    o allows low-level adjustments of data structures
  +    o uses a general contexts concept (shared memory support, user attachments)
  +    o is thread-safe + reentrant ?
  +    o allows the use of arbitrary user key/values
  +    o allows key/values to be loans or gifts
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/act/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 aclocal.m4
  --- ossp-pkg/act/aclocal.m4	17 Jan 2002 20:19:57 -0000	1.2
  +++ ossp-pkg/act/aclocal.m4	6 Jan 2003 12:10:57 -0000	1.3
  @@ -1,10 +1,38 @@
  +dnl ##
  +dnl ##  OSSP act - Abstract Container Types
  +dnl ##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
  +dnl ##
  +dnl ##  This file is part of OSSP act, a abstract container type library
  +dnl ##  which can be found at http://www.ossp.org/pkg/lib/act/.
  +dnl ##
  +dnl ##  Permission to use, copy, modify, and distribute this software for
  +dnl ##  any purpose with or without fee is hereby granted, provided that
  +dnl ##  the above copyright notice and this permission notice appear in all
  +dnl ##  copies.
  +dnl ##
  +dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +dnl ##  SUCH DAMAGE.
  +dnl ##
  +dnl ##  aclocal.m4: Autoconf macros
  +dnl ##
   
   dnl ##
   dnl ##  Support for Configuration Headers
   dnl ##
   dnl ##  configure.in:
  -dnl ##    AC_HEADLINE(<short-name>, <long-name>, 
  -dnl ##                <vers-var>, <vers-file>, 
  +dnl ##    AC_HEADLINE(<short-name>, <long-name>,
  +dnl ##                <vers-var>, <vers-file>,
   dnl ##                <copyright>)
   dnl ##
   
  @@ -27,7 +55,7 @@
       #   find out package version
       $3_STR="`$ac_shtool version -l c -d long $ac_srcdir/$4`"
       AC_SUBST($3_STR)
  - 
  +
       #   friendly header ;)
       echo "Configuring ${TB}$1${TN} ($2), Version ${TB}${$3_STR}${TN}"
       echo "$5"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/act/act.h.in
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 act.h.in
  --- ossp-pkg/act/act.h.in	18 Jan 2002 17:30:05 -0000	1.6
  +++ ossp-pkg/act/act.h.in	6 Jan 2003 12:10:57 -0000	1.7
  @@ -1,9 +1,10 @@
  -/* 
  -**  Act - Abstract Container Type Library
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +/*
  +**  OSSP act - Abstract Container Types
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of Act, a library for dealing with Abstract 
  -**  Container Types which can be found at http://www.ossp.org/pkg/act/.
  +**  This file is part of OSSP act, an abstract container type library
  +**  which can be found at http://www.ossp.org/pkg/lib/act/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  @@ -63,7 +64,7 @@
   #define FALSE 0
   #endif
   #ifndef TRUE
  -/* Do not depend on the exact TRUE value, i.e. never do: x == TRUE. 
  +/* Do not depend on the exact TRUE value, i.e. never do: x == TRUE.
      Use TRUE only for return or assignment.  */
   #define TRUE  !FALSE
   #endif
  @@ -76,7 +77,7 @@
   #define NUL '\0'
   #endif
   
  -/* 
  +/*
    *  Internal Bitmask Calculation Macros
    *  (Notice: bit positions are counted n...0, i.e. lowest bit is position 0)
    */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/act/act.pod
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 act.pod
  --- ossp-pkg/act/act.pod	18 Aug 2000 21:34:30 -0000	1.2
  +++ ossp-pkg/act/act.pod	6 Jan 2003 12:10:57 -0000	1.3
  @@ -1,7 +1,37 @@
  +##
  +##  OSSP act - Abstract Container Types
  +##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP act, an abstract container type library
  +##  which can be found at http://www.ossp.org/pkg/lib/act/.
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  act.pod: manual page
  +##
  +
  +=pod
   
   =head1 NAME
   
  -B<ACT> -- B<A>bstracted B<C>ontainer B<T>ypes
  +B<OSSP act> -- B<A>bstracted B<C>ontainer B<T>ypes
   
   =head1 GLOBAL SYNOPSIS
   
  @@ -114,7 +144,7 @@
   
   A buffer type implemented by an array of bytes. The elements are of type
   B<unsigned char>. The usual use case is an I/O buffer or the underlaying
  -object of a string type. 
  +object of a string type.
   
   Specific Operations: B<resize>, B<seek>, B<lookup>, B<insert>, B<delete>, B<iterate>.
   
  @@ -171,7 +201,7 @@
   
   =item long B<bits_ctrl>(bits_t I<obj>, I<cmd>, ...)
   
  -Send I<cmd> to bit vector object I<obj>. 
  +Send I<cmd> to bit vector object I<obj>.
   
   =item void B<bits_free>(bits_t I<obj>);
   
  @@ -206,4 +236,6 @@
   =head2 Hierarchical Tree (tree)
   
   =head2 Hash Table (hash)
  +
  +=cut
   
  @@ .
  rm -f ossp-pkg/act/act_cfg.h.in <<'@@ .'
  Index: ossp-pkg/act/act_cfg.h.in
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/act/act_chain.h
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 act_chain.h
  --- ossp-pkg/act/act_chain.h	19 Jan 2002 13:12:03 -0000	1.1
  +++ ossp-pkg/act/act_chain.h	6 Jan 2003 12:10:57 -0000	1.2
  @@ -1,9 +1,10 @@
  -/* 
  -**  Act - Abstract Container Type Library
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +/*
  +**  OSSP act - Abstract Container Types
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of Act, a library for dealing with Abstract 
  -**  Container Types which can be found at http://www.ossp.org/pkg/act/.
  +**  This file is part of OSSP act, an abstract container type library
  +**  which can be found at http://www.ossp.org/pkg/lib/act/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  @@ -68,7 +69,7 @@
            ACT_LIST_FIRST((hp)) = (ep); } while (0)
   #define ACT_LIST_INSERT_AFTER(ap, ep, field) \
       do { ACT_LIST_NEXT((ep), field) = ACT_LIST_NEXT((ap), field); \
  -         ACT_LIST_NEXT((ap), field) = (ep); } while (0) 
  +         ACT_LIST_NEXT((ap), field) = (ep); } while (0)
   
   /* remove */
   #define ACT_LIST_REMOVE_HEAD(hp, field) \
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/act/act_ctx.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 act_ctx.c
  --- ossp-pkg/act/act_ctx.c	2 Jan 2002 17:05:53 -0000	1.6
  +++ ossp-pkg/act/act_ctx.c	6 Jan 2003 12:10:57 -0000	1.7
  @@ -1,9 +1,10 @@
  -/* 
  -**  Act - Abstract Container Type Library
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +/*
  +**  OSSP act - Abstract Container Types
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of Act, a library for dealing with Abstract 
  -**  Container Types which can be found at http://www.ossp.org/pkg/act/.
  +**  This file is part of OSSP act, an abstract container type library
  +**  which can be found at http://www.ossp.org/pkg/lib/act/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  @@ -84,7 +85,7 @@
       return ctx;
   }
   
  -/* duplicate a new context structure 
  +/* duplicate a new context structure
      (optionally with the help of a template) */
   act_ctx_t *act_ctx_dup(act_ctx_t *ctx, act_ctx_t *ctx_template)
   {
  @@ -101,14 +102,14 @@
           ctx_from = ctx;
       if ((ctx_new = (act_ctx_t *)act_mem_alloc(sizeof(struct act_ctx_st))) == NULL)
           return NULL;
  -    act_mem_move(ctx_new->c_entry, ctx_from->c_entry, 
  +    act_mem_move(ctx_new->c_entry, ctx_from->c_entry,
                    sizeof(act_ctx_entry_t)*(ACT_CTX_ENTRY_MAX+1));
       if (ctx_template != NULL) {
           for (i = 0; i <= ACT_CTX_ENTRY_MAX; i++) {
               ACT_CTX_ID_SPLIT(sp, lk, ty, no, ctx_new->c_entry[i].e_id);
               if (!lk) {
                   ctx_new->c_entry[i].e_id = ctx->c_entry[i].e_id;
  -                act_mem_move(&(ctx_new->c_entry[i].e_value), &(ctx->c_entry[i].e_value), 
  +                act_mem_move(&(ctx_new->c_entry[i].e_value), &(ctx->c_entry[i].e_value),
                                sizeof(act_ctx_value_t));
               }
           }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/act/act_ctx.h
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 act_ctx.h
  --- ossp-pkg/act/act_ctx.h	2 Jan 2002 17:05:53 -0000	1.6
  +++ ossp-pkg/act/act_ctx.h	6 Jan 2003 12:10:57 -0000	1.7
  @@ -1,9 +1,10 @@
  -/* 
  -**  Act - Abstract Container Type Library
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +/*
  +**  OSSP act - Abstract Container Types
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of Act, a library for dealing with Abstract 
  -**  Container Types which can be found at http://www.ossp.org/pkg/act/.
  +**  This file is part of OSSP act, an abstract container type library
  +**  which can be found at http://www.ossp.org/pkg/lib/act/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/act/act_ds.c
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 act_ds.c
  --- ossp-pkg/act/act_ds.c	21 Jan 2002 16:15:39 -0000	1.1
  +++ ossp-pkg/act/act_ds.c	6 Jan 2003 12:10:57 -0000	1.2
  @@ -1,9 +1,10 @@
  -/* 
  -**  Act - Abstract Container Type Library
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +/*
  +**  OSSP act - Abstract Container Types
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of Act, a library for dealing with Abstract 
  -**  Container Types which can be found at http://www.ossp.org/pkg/act/.
  +**  This file is part of OSSP act, an abstract container type library
  +**  which can be found at http://www.ossp.org/pkg/lib/act/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/act/act_ds.h
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 act_ds.h
  --- ossp-pkg/act/act_ds.h	21 Jan 2002 16:15:39 -0000	1.1
  +++ ossp-pkg/act/act_ds.h	6 Jan 2003 12:10:57 -0000	1.2
  @@ -1,9 +1,10 @@
  -/* 
  -**  Act - Abstract Container Type Library
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +/*
  +**  OSSP act - Abstract Container Types
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of Act, a library for dealing with Abstract 
  -**  Container Types which can be found at http://www.ossp.org/pkg/act/.
  +**  This file is part of OSSP act, an abstract container type library
  +**  which can be found at http://www.ossp.org/pkg/lib/act/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  @@ -29,7 +30,7 @@
   #ifndef __ACT_DS_H__
   #define __ACT_DS_H__
   
  -/* the opaque data structure type */ 
  +/* the opaque data structure type */
   struct act_ds_st;
   typedef struct act_ds_st act_ds_t;
   
  @@ -59,7 +60,7 @@
   
   /* ---------------------------------------------------------------------------------- */
   
  -typedef struct { 
  +typedef struct {
       void   *ptr;
       size_t *len;
   } act_blob_t;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/act/act_grid.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 act_grid.c
  --- ossp-pkg/act/act_grid.c	19 Jan 2002 13:28:55 -0000	1.9
  +++ ossp-pkg/act/act_grid.c	6 Jan 2003 12:10:57 -0000	1.10
  @@ -1,9 +1,10 @@
  -/* 
  -**  Act - Abstract Container Type Library
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +/*
  +**  OSSP act - Abstract Container Types
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of Act, a library for dealing with Abstract 
  -**  Container Types which can be found at http://www.ossp.org/pkg/act/.
  +**  This file is part of OSSP act, an abstract container type library
  +**  which can be found at http://www.ossp.org/pkg/lib/act/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  @@ -32,7 +33,7 @@
    *  size objects. Inside OSSP act we have lots of those objects and
    *  if we would manage them directly through malloc(3) it would be to
    *  run-time expensive and waste too much total memory.
  - *  
  + *
    *  It works by collecting together larger segments (act_grid_seg_t) of
    *  those fixed size objects (act_grid_tile_t) and linking them into
    *  a top-level grid structure (act_grid_t). The number of tiles in a
  @@ -43,7 +44,7 @@
    *  arranged as a linar array after a linkage structure. The free tiles
    *  are remembered in a single linked list. So the grid in memory looks
    *  like this:
  - *  
  + *
    *  -----BEGIN EMBEDDED OBJECT-----
    *  Content-type: application/fig
    *  Description: grid memory allocator memory architecture
  @@ -115,11 +116,11 @@
   };
   
   /* create a grid segment [INTERNAL] */
  -static act_rc_t 
  +static act_rc_t
   act_grid_seg_create(
  -    act_ctx_t *ctx, 
  -    act_grid_seg_t **pseg, 
  -    size_t tile_size, 
  +    act_ctx_t *ctx,
  +    act_grid_seg_t **pseg,
  +    size_t tile_size,
       int tile_num)
   {
       size_t seg_top_size;
  @@ -163,7 +164,7 @@
   act_rc_t
   act_grid_create(
       act_grid_t **pgrid,
  -    act_ctx_t *ctx, 
  +    act_ctx_t *ctx,
       size_t tile_size,
       int tile_num)
   {
  @@ -175,7 +176,7 @@
       act_argcheck(ctx != NULL);
       act_argcheck(tile_size >= 1);
       act_argcheck(tile_num >= 1);
  -    
  +
       /* determine (aligned) sizes */
       tile_size = act_mem_align(tile_size);
   
  @@ -204,13 +205,13 @@
   }
   
   /* destroy a grid */
  -act_rc_t 
  +act_rc_t
   act_grid_destroy(
       act_grid_t *grid)
   {
       act_grid_seg_t *seg;
       act_grid_seg_t *seg_last;
  -    
  +
       /* consistency checks */
       act_argcheck(grid != NULL);
   
  @@ -284,9 +285,9 @@
   }
   
   /* find grid segment where tile is stored [INTERNAL] */
  -static act_rc_t 
  +static act_rc_t
   act_grid_seg_find(
  -    act_grid_t *grid, 
  +    act_grid_t *grid,
       act_grid_seg_t **pseg,
       act_grid_tile_t *tile)
   {
  @@ -294,7 +295,7 @@
   
       seg = ACT_RING_FIRST(&grid->g_seg);
       while (seg != ACT_RING_SENTINEL(&grid->g_seg, act_grid_seg_t, gs_link)) {
  -        if (   seg->gs_tile_base <= tile 
  +        if (   seg->gs_tile_base <= tile
               && tile < (seg->gs_tile_base+(grid->g_tile_size*seg->gs_tile_num))) {
               if (pseg != NULL)
                   *pseg = seg;
  @@ -306,9 +307,9 @@
   }
   
   /* free a tile to a grid */
  -act_rc_t 
  +act_rc_t
   act_grid_free(
  -    act_grid_t *grid, 
  +    act_grid_t *grid,
       void *_tile)
   {
       act_grid_seg_t *seg;
  @@ -321,7 +322,7 @@
       /* consistency checks */
       act_argcheck(grid != NULL);
       act_argcheck(tile != NULL);
  -    
  +
       /* find segment of tile */
       if ((rc = act_grid_seg_find(grid, &seg, tile)) != ACT_OK)
           return rc;
  @@ -342,13 +343,13 @@
   }
   
   /* test whether a tile is inside a grid */
  -act_rc_t 
  +act_rc_t
   act_grid_inside(
  -    act_grid_t *grid, 
  +    act_grid_t *grid,
       void *_tile)
   {
       act_grid_tile_t *tile;
  -    
  +
       /* cast to internal structure */
       tile = (act_grid_tile_t *)_tile;
   
  @@ -361,11 +362,11 @@
   }
   
   /* determine grid statistics */
  -act_rc_t 
  +act_rc_t
   act_grid_stat(
  -    act_grid_t *grid, 
  -    int *pchunks, 
  -    int *pbytes_mgmt, int *pbytes_used, int *pbytes_free, 
  +    act_grid_t *grid,
  +    int *pchunks,
  +    int *pbytes_mgmt, int *pbytes_used, int *pbytes_free,
       int *ptiles_used, int *ptiles_free)
   {
       act_grid_seg_t *seg;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/act/act_grid.h
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 act_grid.h
  --- ossp-pkg/act/act_grid.h	19 Jan 2002 13:18:01 -0000	1.5
  +++ ossp-pkg/act/act_grid.h	6 Jan 2003 12:10:57 -0000	1.6
  @@ -1,9 +1,10 @@
  -/* 
  -**  Act - Abstract Container Type Library
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +/*
  +**  OSSP act - Abstract Container Types
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of Act, a library for dealing with Abstract 
  -**  Container Types which can be found at http://www.ossp.org/pkg/act/.
  +**  This file is part of OSSP act, an abstract container type library
  +**  which can be found at http://www.ossp.org/pkg/lib/act/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/act/act_hash.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 act_hash.c
  --- ossp-pkg/act/act_hash.c	2 Jan 2002 17:05:53 -0000	1.7
  +++ ossp-pkg/act/act_hash.c	6 Jan 2003 12:10:57 -0000	1.8
  @@ -1,9 +1,10 @@
  -/* 
  -**  Act - Abstract Container Type Library
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +/*
  +**  OSSP act - Abstract Container Types
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of Act, a library for dealing with Abstract 
  -**  Container Types which can be found at http://www.ossp.org/pkg/act/.
  +**  This file is part of OSSP act, an abstract container type library
  +**  which can be found at http://www.ossp.org/pkg/lib/act/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/act/act_hash.h
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 act_hash.h
  --- ossp-pkg/act/act_hash.h	2 Jan 2002 17:05:53 -0000	1.6
  +++ ossp-pkg/act/act_hash.h	6 Jan 2003 12:10:57 -0000	1.7
  @@ -1,9 +1,10 @@
  -/* 
  -**  Act - Abstract Container Type Library
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +/*
  +**  OSSP act - Abstract Container Types
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of Act, a library for dealing with Abstract 
  -**  Container Types which can be found at http://www.ossp.org/pkg/act/.
  +**  This file is part of OSSP act, an abstract container type library
  +**  which can be found at http://www.ossp.org/pkg/lib/act/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  @@ -29,7 +30,7 @@
   #ifndef _ACT_HASH_H_
   #define _ACT_HASH_H_
   
  -/* the opaque hashing data structure */ 
  +/* the opaque hashing data structure */
   struct act_hash_st;
   typedef struct act_hash_st act_hash_t;
   
  @@ -111,6 +112,6 @@
   __act_hash_fct_proto(holub);
   __act_hash_fct_proto(cbu);
   __act_hash_fct_proto(cvs);
  -    
  +
   #endif /* _ACT_HASH_H_ */
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/act/act_hash_fct.c
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 act_hash_fct.c
  --- ossp-pkg/act/act_hash_fct.c	16 Jan 2002 19:30:36 -0000	1.28
  +++ ossp-pkg/act/act_hash_fct.c	6 Jan 2003 12:10:57 -0000	1.29
  @@ -1,9 +1,10 @@
  -/* 
  -**  Act - Abstract Container Type Library
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +/*
  +**  OSSP act - Abstract Container Types
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of Act, a library for dealing with Abstract 
  -**  Container Types which can be found at http://www.ossp.org/pkg/act/.
  +**  This file is part of OSSP act, an abstract container type library
  +**  which can be found at http://www.ossp.org/pkg/lib/act/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  @@ -33,7 +34,7 @@
   ** (weaker) requirements of the hash table lookup discipline:
   **
   **   1. the function must be deterministic and stateless
  -**   2. the function must be very fast to compute 
  +**   2. the function must be very fast to compute
   **   3. the function must distribute the keys very good
   **
   ** Every function in this piece of source has the following signature:
  @@ -57,12 +58,12 @@
   ** gazillion keys to each bucket. The number of collisions you get is
   ** expected to follow the Chi^2 distribution.
   **
  -** Here's how Chi^2 is computed: 
  -**   1. Lookup:  b = total number of buckets 
  -**   2. Lookup:  k = total number of keys 
  -**   3. Lookup:  b_i = number of buckets which have i keys 
  +** Here's how Chi^2 is computed:
  +**   1. Lookup:  b = total number of buckets
  +**   2. Lookup:  k = total number of keys
  +**   3. Lookup:  b_i = number of buckets which have i keys
   **   4. Compute: p = k/b (the expected number of keys per bucket)
  -**   5. Compute: Chi^2 = sum (over all i) (b_i*((i-p)^2)/p) 
  +**   5. Compute: Chi^2 = sum (over all i) (b_i*((i-p)^2)/p)
   **
   ** The distribution is expected to have a result close to b, i.e.,
   ** within 3*sqrt(b) of b. Chi^2 measures are usually reported in units of
  @@ -126,7 +127,7 @@
    * numbers are not useable at all. The remaining 128 odd numbers
    * (except for the number 1) work more or less all equally well. They
    * all distribute in an acceptable way and this way fill a hash table
  - * with an average percent of approx. 86%. 
  + * with an average percent of approx. 86%.
    *
    * If one compares the Chi^2 values of the variants, the number 33 not
    * even has the best value. But the number 33 and a few other equally
  @@ -144,9 +145,9 @@
    * which has the hash unrolled eight times for speed. Both additionally
    * are optimized for speed even more by unrolling the loop.
    */
  -intern act_uint32_t 
  +intern act_uint32_t
   act_hash_fct_djbx33a(
  -    register act_uint8_t *key, 
  +    register act_uint8_t *key,
       register act_size_t len)
   {
       register act_uint32_t hash = 5381;
  @@ -190,9 +191,9 @@
    * good hash (both fast and with good distribution). It can be found for
    * instance in his CDB package (see cdb_hash.c).
    */
  -intern act_uint32_t 
  +intern act_uint32_t
   act_hash_fct_djbx33x(
  -    register act_uint8_t *key, 
  +    register act_uint8_t *key,
       register act_size_t len)
   {
       register act_uint32_t hash = 5381;
  @@ -237,11 +238,11 @@
    * So, this variant of DJB's original hash function is intended for
    * hashing filesystem path like strings. Below there are two variants:
    * the original variant from Frank Denis and additionally a variant
  - * which has the hash unrolled eight times for speed. 
  + * which has the hash unrolled eight times for speed.
    */
  -intern act_uint32_t 
  +intern act_uint32_t
   act_hash_fct_jedi(
  -    register act_uint8_t *key, 
  +    register act_uint8_t *key,
       register act_size_t len)
   {
       register act_uint32_t hash = 5381;
  @@ -283,9 +284,9 @@
    * surprisingly well. It can be found for instance in the Berkeley-DB 3.x
    * package (hash/hash_func.c).
    */
  -intern act_uint32_t 
  +intern act_uint32_t
   act_hash_fct_vocong(
  -    register act_uint8_t *key, 
  +    register act_uint8_t *key,
       register act_size_t len)
   {
       register act_uint32_t hash = 0;
  @@ -302,9 +303,9 @@
    * in the AT&T's Cdt library. It is very fast and distributes very well.
    * For details see Cdt's cdt.h file.
    */
  -intern act_uint32_t 
  +intern act_uint32_t
   act_hash_fct_cdt(
  -    register act_uint8_t *key, 
  +    register act_uint8_t *key,
       register act_size_t len)
   {
       register act_uint32_t hash = 0;
  @@ -332,9 +333,9 @@
    * increasing same bytes. So our variant here uses the golden ratio (but
    * every arbitrary value != 0 should work) instead.
    */
  -intern act_uint32_t 
  +intern act_uint32_t
   act_hash_fct_jotcl(
  -    register act_uint8_t *key, 
  +    register act_uint8_t *key,
       register act_size_t len)
   {
       register act_uint32_t hash = 0x9e3779b9;
  @@ -358,7 +359,7 @@
    * signature). It can be definetely recommended as a good general
    * purpose hash function.
    */
  -intern act_uint32_t 
  +intern act_uint32_t
   act_hash_fct_bjddj(
       register act_uint8_t *k,
       register act_size_t length)
  @@ -395,7 +396,7 @@
   
       /* handle the last 11 bytes */
       c += length;
  -    switch(len) { 
  +    switch(len) {
           /* all the case statements fall through */
           case 11: c+=((ub4)k[10]<<24);
           case 10: c+=((ub4)k[ 9]<<16);
  @@ -428,7 +429,7 @@
    * functions with medium performance but with very good distribution. So
    * it can be considered as a rock solid general purpose hash function.
    */
  -intern act_uint32_t 
  +intern act_uint32_t
   act_hash_fct_crc32(
       register act_uint8_t *key,
       register act_size_t len)
  @@ -488,7 +489,7 @@
           0x2d02ef8dL
       };
       register act_uint32_t hash;
  -    
  +
       hash = 0xffffffff;
       while (len-- > 0)
           hash = tab[(hash ^ *key++) & 0xff] ^ (hash >> 8);
  @@ -508,9 +509,9 @@
    * variant above uses the value of the DJBX33A hash (but any arbitrary
    * value should work) and this way avoid this, too.
    */
  -intern act_uint32_t 
  +intern act_uint32_t
   act_hash_fct_cpoaat(
  -    register act_uint8_t *ptr, 
  +    register act_uint8_t *ptr,
       register act_size_t len)
   {
       register act_uint32_t hash = 5381;
  @@ -538,12 +539,12 @@
    * use inside hash data structures. Because it is slower than most of
    * the other functions, although it distributes very well.
    */
  -intern act_uint32_t 
  +intern act_uint32_t
   act_hash_fct_teadm(
  -    register act_uint8_t *key, 
  +    register act_uint8_t *key,
       register act_size_t len)
   {
  -    act_uint32_t k[] = { 0x9464a485, 0x542e1a94, 0x3e846bff, 0xb75bcfc3 }; 
  +    act_uint32_t k[] = { 0x9464a485, 0x542e1a94, 0x3e846bff, 0xb75bcfc3 };
       act_uint32_t h0 = k[0], h1 = k[1];
       act_uint32_t a, b, c, d;
       act_uint32_t pad;
  @@ -671,9 +672,9 @@
    * below uses the recommended FNV-1 initialization. For more details see
    * http://www.isthe.com/chongo/tech/comp/fnv/.
    */
  -intern act_uint32_t 
  +intern act_uint32_t
   act_hash_fct_fnv(
  -    register act_uint8_t *key, 
  +    register act_uint8_t *key,
       register act_size_t len)
   {
       register act_uint32_t hash = 0x811c9dc5L;
  @@ -704,9 +705,9 @@
    * HASHC's so we handle all 8 bytes. Essentially, this saves 7 compare &
    * branch instructions.
    */
  -intern act_uint32_t 
  +intern act_uint32_t
   act_hash_fct_ozsdbm(
  -    register act_uint8_t *ptr, 
  +    register act_uint8_t *ptr,
       register act_size_t len)
   {
       register act_uint32_t hash = 0;
  @@ -741,9 +742,9 @@
    * good distribution, but unfortunately it is one of the slowest hash
    * functions.
    */
  -intern act_uint32_t 
  +intern act_uint32_t
   act_hash_fct_kazlib(
  -    register act_uint8_t *key, 
  +    register act_uint8_t *key,
       register act_size_t len)
   {
       static act_uint32_t tab[] = {
  @@ -780,9 +781,9 @@
    * 128 one and 128 zero bits (which is for a good statistically expected
    * distribution).
    */
  -intern act_uint32_t 
  +intern act_uint32_t
   act_hash_fct_buzhash(
  -    register act_uint8_t *key, 
  +    register act_uint8_t *key,
       register act_size_t len)
   {
       static act_uint32_t tab[256] = {
  @@ -836,7 +837,7 @@
           0xf36414bL, 0x1d3a034fL, 0x122d654fL, 0xb336078L, 0x3a8b9600L,
           0xb5f1484L, 0x3ccfb7c6L, 0x2ff89cf1L, 0x09919a6L, 0xfa83287eL,
           0x694b7cdL, 0x77df5aeaL, 0x944508ccL, 0x581fbb8L, 0x728a05cbL,
  -        0x4a31712L, 0xc2f6acfaL, 0x6e560b10L, 0xd8d7ce1L, 0x0d2b2adeL, 
  +        0x4a31712L, 0xc2f6acfaL, 0x6e560b10L, 0xd8d7ce1L, 0x0d2b2adeL,
           0x0bbaa936L
       };
       register act_uint32_t hash = 0xe9ae3b8aL /* random init */;
  @@ -862,37 +863,37 @@
    * much and then produces lots of collisions (but that doesn't matter
    * usually).
    */
  -intern act_uint32_t 
  +intern act_uint32_t
   act_hash_fct_pearson(
  -    register act_uint8_t *key, 
  +    register act_uint8_t *key,
       register act_size_t len)
   {
       static unsigned char ptab[256] = {
  -        0xd0, 0x24, 0x61, 0x1f, 0x65, 0xfb, 0xe1, 0x12, 0x64, 0xa7, 
  -        0xd9, 0x7f, 0x49, 0xf1, 0xfc, 0x89, 0xd8, 0x57, 0x03, 0xda, 
  -        0x4a, 0x4e, 0xc8, 0xb9, 0x42, 0x7b, 0x44, 0x88, 0x3e, 0x6e, 
  -        0x1d, 0xc2, 0x96, 0x5d, 0x10, 0x67, 0x2b, 0x31, 0x5f, 0x2c, 
  -        0xfe, 0x4f, 0x01, 0x7d, 0xf6, 0xe7, 0x15, 0x54, 0xaa, 0x29, 
  -        0x81, 0x0b, 0xde, 0xc1, 0xc0, 0x16, 0x35, 0xf2, 0xc5, 0x43, 
  -        0x22, 0x41, 0xc9, 0x5a, 0xc6, 0x6a, 0x04, 0xb8, 0x94, 0xac, 
  -        0xc4, 0x1c, 0x36, 0x71, 0xaf, 0x17, 0xfd, 0xe6, 0x20, 0x56, 
  -        0x38, 0xbf, 0x55, 0xdf, 0x3d, 0x98, 0x40, 0x09, 0x0d, 0x33, 
  -        0xb7, 0x90, 0x76, 0xca, 0xff, 0x9c, 0x73, 0x7e, 0xa6, 0x6d, 
  -        0xcb, 0x39, 0xc3, 0xd5, 0xce, 0xa4, 0xc7, 0x27, 0xcf, 0x58, 
  -        0x1b, 0xb2, 0x8d, 0x11, 0x0c, 0x0f, 0x34, 0xb4, 0x69, 0xd6, 
  -        0x2f, 0xa5, 0x51, 0x32, 0x37, 0x6f, 0x8c, 0xcd, 0xba, 0x5e, 
  -        0x82, 0x1a, 0xa9, 0x46, 0x91, 0x93, 0xbc, 0xbe, 0xe2, 0x4b, 
  -        0x18, 0xdc, 0xeb, 0x3c, 0x21, 0x47, 0x70, 0x4d, 0xae, 0xf9, 
  -        0xee, 0xa3, 0xec, 0x97, 0x08, 0xab, 0xad, 0xbd, 0x48, 0xb0, 
  -        0xa0, 0xb3, 0x68, 0xd7, 0xe4, 0xe3, 0x79, 0x4c, 0x95, 0x8b, 
  -        0xb1, 0xf8, 0x2a, 0xa8, 0x9a, 0x30, 0xf3, 0xf5, 0xd3, 0x50, 
  -        0xf0, 0x9e, 0x63, 0x9d, 0x72, 0x3f, 0xd2, 0x85, 0x60, 0x3b, 
  -        0x0e, 0x6b, 0x19, 0x52, 0xe0, 0xef, 0x13, 0x6c, 0xb5, 0x8e, 
  -        0x00, 0x14, 0x8a, 0x1e, 0x06, 0xa2, 0xfa, 0x0a, 0x8f, 0x80, 
  -        0x86, 0x07, 0xed, 0x84, 0x92, 0x45, 0x26, 0xf7, 0x75, 0xd4, 
  -        0x83, 0x7a, 0xdd, 0x62, 0x7c, 0x9b, 0xe5, 0xa1, 0x2e, 0xdb, 
  -        0xea, 0x25, 0x5c, 0x87, 0x74, 0x5b, 0x99, 0x9f, 0xe8, 0x3a, 
  -        0x66, 0x02, 0x59, 0x28, 0xb6, 0xcc, 0x53, 0xf4, 0xe9, 0x05, 
  +        0xd0, 0x24, 0x61, 0x1f, 0x65, 0xfb, 0xe1, 0x12, 0x64, 0xa7,
  +        0xd9, 0x7f, 0x49, 0xf1, 0xfc, 0x89, 0xd8, 0x57, 0x03, 0xda,
  +        0x4a, 0x4e, 0xc8, 0xb9, 0x42, 0x7b, 0x44, 0x88, 0x3e, 0x6e,
  +        0x1d, 0xc2, 0x96, 0x5d, 0x10, 0x67, 0x2b, 0x31, 0x5f, 0x2c,
  +        0xfe, 0x4f, 0x01, 0x7d, 0xf6, 0xe7, 0x15, 0x54, 0xaa, 0x29,
  +        0x81, 0x0b, 0xde, 0xc1, 0xc0, 0x16, 0x35, 0xf2, 0xc5, 0x43,
  +        0x22, 0x41, 0xc9, 0x5a, 0xc6, 0x6a, 0x04, 0xb8, 0x94, 0xac,
  +        0xc4, 0x1c, 0x36, 0x71, 0xaf, 0x17, 0xfd, 0xe6, 0x20, 0x56,
  +        0x38, 0xbf, 0x55, 0xdf, 0x3d, 0x98, 0x40, 0x09, 0x0d, 0x33,
  +        0xb7, 0x90, 0x76, 0xca, 0xff, 0x9c, 0x73, 0x7e, 0xa6, 0x6d,
  +        0xcb, 0x39, 0xc3, 0xd5, 0xce, 0xa4, 0xc7, 0x27, 0xcf, 0x58,
  +        0x1b, 0xb2, 0x8d, 0x11, 0x0c, 0x0f, 0x34, 0xb4, 0x69, 0xd6,
  +        0x2f, 0xa5, 0x51, 0x32, 0x37, 0x6f, 0x8c, 0xcd, 0xba, 0x5e,
  +        0x82, 0x1a, 0xa9, 0x46, 0x91, 0x93, 0xbc, 0xbe, 0xe2, 0x4b,
  +        0x18, 0xdc, 0xeb, 0x3c, 0x21, 0x47, 0x70, 0x4d, 0xae, 0xf9,
  +        0xee, 0xa3, 0xec, 0x97, 0x08, 0xab, 0xad, 0xbd, 0x48, 0xb0,
  +        0xa0, 0xb3, 0x68, 0xd7, 0xe4, 0xe3, 0x79, 0x4c, 0x95, 0x8b,
  +        0xb1, 0xf8, 0x2a, 0xa8, 0x9a, 0x30, 0xf3, 0xf5, 0xd3, 0x50,
  +        0xf0, 0x9e, 0x63, 0x9d, 0x72, 0x3f, 0xd2, 0x85, 0x60, 0x3b,
  +        0x0e, 0x6b, 0x19, 0x52, 0xe0, 0xef, 0x13, 0x6c, 0xb5, 0x8e,
  +        0x00, 0x14, 0x8a, 0x1e, 0x06, 0xa2, 0xfa, 0x0a, 0x8f, 0x80,
  +        0x86, 0x07, 0xed, 0x84, 0x92, 0x45, 0x26, 0xf7, 0x75, 0xd4,
  +        0x83, 0x7a, 0xdd, 0x62, 0x7c, 0x9b, 0xe5, 0xa1, 0x2e, 0xdb,
  +        0xea, 0x25, 0x5c, 0x87, 0x74, 0x5b, 0x99, 0x9f, 0xe8, 0x3a,
  +        0x66, 0x02, 0x59, 0x28, 0xb6, 0xcc, 0x53, 0xf4, 0xe9, 0x05,
           0xd1, 0x78, 0xbb, 0x77, 0x2d, 0x23
       };
       register unsigned char h1,h2,h3,h4;
  @@ -918,9 +919,9 @@
    * as found in a similar form in hash.c inside his ipaudit package.
    * It's an average hash function. Neither very good nor very bad.
    */
  -intern act_uint32_t 
  +intern act_uint32_t
   act_hash_fct_rifkin(
  -    register act_uint8_t *key, 
  +    register act_uint8_t *key,
       register act_size_t len)
   {
       register act_uint32_t hash = 0;
  @@ -936,15 +937,15 @@
       return hash;
   }
   
  -/* 
  +/*
    * ASU (Aho, Sethi, Ullman)
    *
    * This is the hashing algorithm as proposed by Aho, Seti and Ullmann in
    * their algorithm books. It is not very fast, but distributes well.
    */
  -intern act_uint32_t 
  +intern act_uint32_t
   act_hash_fct_asu(
  -    register act_uint8_t *key, 
  +    register act_uint8_t *key,
       register act_size_t len)
   {
       register act_uint32_t hash;
  @@ -968,9 +969,9 @@
    * not one of the best hash functions in the set, but might have some
    * particular uses.
    */
  -intern act_uint32_t 
  +intern act_uint32_t
   act_hash_fct_holub(
  -    register act_uint8_t *key, 
  +    register act_uint8_t *key,
       register act_size_t len)
   {
       register act_uint32_t hash;
  @@ -998,9 +999,9 @@
    * showed a bad distribution for real world keys. So take this hash very
    * carefully and test whether it works for your data.
    */
  -intern act_uint32_t 
  +intern act_uint32_t
   act_hash_fct_cbu(
  -    register act_uint8_t *key, 
  +    register act_uint8_t *key,
       register act_size_t len)
   {
       register act_uint32_t hash = 0;
  @@ -1025,9 +1026,9 @@
    * So this hash is only useful if one really knows the keys one has to
    * hash and also tests whether this hash works for them.
    */
  -intern act_uint32_t 
  +intern act_uint32_t
   act_hash_fct_cvs(
  -    register act_uint8_t *key, 
  +    register act_uint8_t *key,
       register act_size_t len)
   {
       register act_uint32_t hash = 0;
  @@ -1042,10 +1043,10 @@
       return hash;
   }
   
  -/* 
  +/*
   ** ======================================================================
   **               Hash Function Test and Comparison Suite
  -** ====================================================================== 
  +** ======================================================================
   */
   
   #ifdef ACT_TEST
  @@ -1245,7 +1246,7 @@
   }
   
   /* the driver program */
  -int main(int argc, char *argv[]) 
  +int main(int argc, char *argv[])
   {
       int i;
   
  @@ -1265,16 +1266,16 @@
       printf("| Hash Func    Time Coll00 Coll55 CollNN  Used  Min  Max Diff  Chi2/S  Chi2/B |\n");
       printf("+ ---------- ------ ------ ------ ------ ----- ---- ---- ---- ------- ------- +\n");
       for (i = 0; table[i].name != NULL; i++) {
  -        printf("| %-10s %6.2f %6d %6d %6d %5.2f %4d %4d %4d %7.2f%c%7.2f%c|\n", 
  -               table[i].name, 
  -               table[i].stat.t, 
  -               table[i].stat.coll00, 
  -               table[i].stat.coll55, 
  -               table[i].stat.collNN, 
  -               table[i].stat.used, 
  -               table[i].stat.min, 
  -               table[i].stat.max, 
  -               table[i].stat.delta, 
  +        printf("| %-10s %6.2f %6d %6d %6d %5.2f %4d %4d %4d %7.2f%c%7.2f%c|\n",
  +               table[i].name,
  +               table[i].stat.t,
  +               table[i].stat.coll00,
  +               table[i].stat.coll55,
  +               table[i].stat.collNN,
  +               table[i].stat.used,
  +               table[i].stat.min,
  +               table[i].stat.max,
  +               table[i].stat.delta,
                  table[i].stat.s_chi2,
                  (table[i].stat.s_chi2 > 3 || table[i].stat.s_chi2 < -3) ? '!' : ' ',
                  table[i].stat.b_chi2,
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/act/act_hash_lh.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 act_hash_lh.c
  --- ossp-pkg/act/act_hash_lh.c	18 Jan 2002 18:17:55 -0000	1.10
  +++ ossp-pkg/act/act_hash_lh.c	6 Jan 2003 12:10:58 -0000	1.11
  @@ -1,9 +1,10 @@
  -/* 
  -**  Act - Abstract Container Type Library
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +/*
  +**  OSSP act - Abstract Container Types
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of Act, a library for dealing with Abstract 
  -**  Container Types which can be found at http://www.ossp.org/pkg/act/.
  +**  This file is part of OSSP act, an abstract container type library
  +**  which can be found at http://www.ossp.org/pkg/lib/act/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  @@ -33,7 +34,7 @@
   **  collision chains as the backend data structure. Some ideas were
   **  taken over from MIKAEL PETTERSON's Linear Hashing enhancements
   **  (1993).
  -**   
  +**
   **  Linear Hashing can be summarized as following:
   **
   **  o drawback of classical hashing is that the hash table is of
  @@ -79,7 +80,7 @@
   **
   **  As you can see, it consists of four classes of memory chunks:
   **  1. a top-level structure which acts as the primary handle
  -**  2. the virtual hash table consisting of a single (growing) 
  +**  2. the virtual hash table consisting of a single (growing)
   **     directory and one or more (fixed size) directory segments
   **  3. the collision chains consisting of element structures
   **  4. the actual elements consisting of key+value structures
  @@ -109,7 +110,7 @@
   typedef struct segment_st segment_t;
   struct segment_st {
       element_t *s_element[SEGMENTSIZE]; /* array of pointers to elements */
  -}; 
  +};
   
   /* the top-level hash table structure */
   typedef struct act_hash_lh_st act_hash_lh_t;
  @@ -174,7 +175,7 @@
       if (act_grid_alloc(h->h_grid_seg, (void **)&(h->h_dir[0])) != ACT_OK) {
           errno_safe(act_grid_destroy(h->h_grid_seg));
           errno_safe(act_grid_destroy(h->h_grid_el));
  -        errno_safe(act_mem_free_ctx(ctx, h->h_dir)); 
  +        errno_safe(act_mem_free_ctx(ctx, h->h_dir));
           errno_safe(act_mem_free_ctx(ctx, h));
           return NULL;
       }
  @@ -193,9 +194,9 @@
   }
   
   /* expand the hash table */
  -static void 
  +static void
   act_hash_lh_expand(
  -    act_ctx_t *ctx, 
  +    act_ctx_t *ctx,
       act_hash_lh_t *h)
   {
       unsigned int pmax0;
  @@ -204,7 +205,7 @@
       element_t **pelold;
       element_t *el, *headofold, *headofnew, *next;
       unsigned int n;
  -    
  +
       /* calculate next new address */
       pmax0   = h->h_pmax;
       newaddr = pmax0 + h->h_p;
  @@ -218,7 +219,7 @@
                return;
           act_mem_set((char *)h->h_dir+n, 0, n);
       }
  -    
  +
       /* have to create a new table segment? */
       if (SEGINDEX(newaddr) == 0) {
           if (act_grid_alloc(h->h_grid_seg, (void **)&seg) != ACT_OK)
  @@ -236,7 +237,7 @@
           h->h_p = 0;
       }
       h->h_slack += MAXLOADFCTR;
  -    
  +
       /* relocate and split between P-element new element */
       headofold = NULL;
       headofnew = NULL;
  @@ -257,9 +258,9 @@
   }
   
   /* shrink hash table */
  -static void 
  +static void
   act_hash_lh_shrink(
  -    act_ctx_t *ctx, 
  +    act_ctx_t *ctx,
       act_hash_lh_t *h)
   {
       segment_t *lastseg;
  @@ -310,12 +311,12 @@
   }
   
   /* insert element into hash table */
  -static int 
  +static int
   act_hash_lh_insert(
  -    act_ctx_t *ctx, 
  -    act_hash_lh_t *h, 
  -    void *keyptr, int keylen, 
  -    void *datptr, int datlen, 
  +    act_ctx_t *ctx,
  +    act_hash_lh_t *h,
  +    void *keyptr, int keylen,
  +    void *datptr, int datlen,
       int override)
   {
       unsigned int hash, addr;
  @@ -339,7 +340,7 @@
       /* check whether element is already in the hash table */
       bFound = FALSE;
       for (el = *pel; el != NULL; el = el->e_next) {
  -        if (   el->e_hash == hash 
  +        if (   el->e_hash == hash
               && el_keylen(el) == keylen
               && act_mem_cmp(el->e_keyptr, keyptr, el_keylen(el)) == 0) {
               bFound = TRUE;
  @@ -390,11 +391,11 @@
   }
   
   /* lookup an element in hash table */
  -static int 
  +static int
   act_hash_lh_lookup(
  -    act_ctx_t *ctx, 
  -    act_hash_lh_t *h, 
  -    void *keyptr, int keylen, 
  +    act_ctx_t *ctx,
  +    act_hash_lh_t *h,
  +    void *keyptr, int keylen,
       void **datptr, int *datlen)
   {
       unsigned int hash, addr;
  @@ -415,7 +416,7 @@
   
       /* search for element in collision list */
       for (el = *pel; el != NULL; el = el->e_next) {
  -        if (   el->e_hash == hash 
  +        if (   el->e_hash == hash
               && el_keylen(el) == keylen
               && act_mem_cmp(el->e_keyptr, keyptr, el_keylen(el)) == 0) {
               /* provide results */
  @@ -430,10 +431,10 @@
   }
   
   /* delete an element in hash table */
  -static int 
  +static int
   act_hash_lh_delete(
  -    act_ctx_t *ctx, 
  -    act_hash_lh_t *h, 
  +    act_ctx_t *ctx,
  +    act_hash_lh_t *h,
       void *keyptr, int keylen)
   {
       unsigned int hash, addr;
  @@ -456,7 +457,7 @@
       /* search for element in collision chain */
       rv = FALSE;
       for (lel = NULL, el = *pel; el != NULL; lel = el, el = el->e_next) {
  -        if (   el->e_hash == hash 
  +        if (   el->e_hash == hash
               && el_keylen(el) == keylen
               && act_mem_cmp(el->e_keyptr, keyptr, el_keylen(el)) == 0) {
               /* free key+data memory chunk */
  @@ -464,7 +465,7 @@
                   act_mem_free_ctx(ctx, el->e_keyptr);
               /* remove element from collision chain */
               if (lel == NULL)
  -                *pel = el->e_next; 
  +                *pel = el->e_next;
               else
                   lel->e_next = el->e_next;
               /* deallocate element structure */
  @@ -482,10 +483,10 @@
   }
   
   /* calculate total size of hash table */
  -static int 
  +static int
   act_hash_lh_size(
  -    act_ctx_t *ctx, 
  -    act_hash_lh_t *h, 
  +    act_ctx_t *ctx,
  +    act_hash_lh_t *h,
       long *pbytes, long *pelements)
   {
       long bytes, elements;
  @@ -534,10 +535,10 @@
   }
   
   /* calculate total size of hash table */
  -static int 
  +static int
   act_hash_lh_status(
  -    act_ctx_t *ctx, 
  -    act_hash_lh_t *h, 
  +    act_ctx_t *ctx,
  +    act_hash_lh_t *h,
       char *pstatus,
       int nstatus)
   {
  @@ -609,7 +610,7 @@
           chainlen_avg = chainlen_all / chains;
   
       /* provide results */
  -    act_snprintf(pstatus, nstatus, 
  +    act_snprintf(pstatus, nstatus,
                    "size=%d@%dB dir=1*%dB seg=%d*%dB chains=%d@%d/%d/%d usage=%0.1f",
                    elements, bytes, dirsize, segments, segsize,
                    chains, chainlen_min, chainlen_avg, chainlen_max, used);
  @@ -618,9 +619,9 @@
   }
   
   /* destroy the whole hash table */
  -static int 
  +static int
   act_hash_lh_free(
  -    act_ctx_t *ctx, 
  +    act_ctx_t *ctx,
       act_hash_lh_t *h)
   {
       element_t *el, **pel, *el_next;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/act/act_hash_oh.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 act_hash_oh.c
  --- ossp-pkg/act/act_hash_oh.c	2 Jan 2002 17:05:53 -0000	1.6
  +++ ossp-pkg/act/act_hash_oh.c	6 Jan 2003 12:10:58 -0000	1.7
  @@ -1,9 +1,10 @@
  -/* 
  -**  Act - Abstract Container Type Library
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +/*
  +**  OSSP act - Abstract Container Types
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of Act, a library for dealing with Abstract 
  -**  Container Types which can be found at http://www.ossp.org/pkg/act/.
  +**  This file is part of OSSP act, an abstract container type library
  +**  which can be found at http://www.ossp.org/pkg/lib/act/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  @@ -85,25 +86,25 @@
   }
   
   /* insert an element into hash table */
  -static int 
  +static int
   act_hash_oh_insert(
  -    act_ctx_t *ctx, act_hash_oh_t *h, void *keyptr, int keylen, 
  +    act_ctx_t *ctx, act_hash_oh_t *h, void *keyptr, int keylen,
       void *datptr, int datlen, int override)
   {
       return TRUE;
   }
   
   /* lookup an element in hash table */
  -static int 
  +static int
   act_hash_oh_lookup(
  -     act_ctx_t *ctx, act_hash_oh_t *h, 
  +     act_ctx_t *ctx, act_hash_oh_t *h,
        void *keyptr, int keylen, void **datptr, int *datlen)
   {
       return FALSE;
   }
   
   /* delete an element from hash table */
  -static int 
  +static int
   act_hash_oh_delete(
       act_ctx_t *ctx, act_hash_oh_t *h, void *keyptr, int keylen)
   {
  @@ -111,7 +112,7 @@
   }
   
   /* find out the size of the hash table */
  -static int 
  +static int
   act_hash_oh_size(
       act_ctx_t *ctx, act_hash_oh_t *h, long *pbytes, long *pelements)
   {
  @@ -134,7 +135,7 @@
   }
   
   /* find out the size of the hash table */
  -static int 
  +static int
   act_hash_oh_status(
       act_ctx_t *ctx, act_hash_oh_t *h, char *pstatus, int *nstatus)
   {
  @@ -142,7 +143,7 @@
   }
   
   /* free the hash table structure */
  -static int 
  +static int
   act_hash_oh_free(
       act_ctx_t *ctx, act_hash_oh_t *h)
   {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/act/act_lib.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 act_lib.c
  --- ossp-pkg/act/act_lib.c	2 Jan 2002 17:05:53 -0000	1.5
  +++ ossp-pkg/act/act_lib.c	6 Jan 2003 12:10:58 -0000	1.6
  @@ -1,9 +1,10 @@
  -/* 
  -**  Act - Abstract Container Type Library
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +/*
  +**  OSSP act - Abstract Container Types
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of Act, a library for dealing with Abstract 
  -**  Container Types which can be found at http://www.ossp.org/pkg/act/.
  +**  This file is part of OSSP act, an abstract container type library
  +**  which can be found at http://www.ossp.org/pkg/lib/act/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/act/act_lib.h
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 act_lib.h
  --- ossp-pkg/act/act_lib.h	12 Nov 1999 20:37:20 -0000	1.1.1.1
  +++ ossp-pkg/act/act_lib.h	6 Jan 2003 12:10:58 -0000	1.2
  @@ -1,5 +1,38 @@
  +/*
  +**  OSSP act - Abstract Container Types
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
  +**
  +**  This file is part of OSSP act, an abstract container type library
  +**  which can be found at http://www.ossp.org/pkg/lib/act/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  act.h: public Application Programming Interface (API)
  +*/
  +
  +#ifndef _ACT_LIB_H_
  +#define _ACT_LIB_H_
   
   extern int        act_init(void);
   extern int        act_kill(void);
   extern long       act_version(void);
  +
  +#endif /* _ACT_LIB_H_ */
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/act/act_mem.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 act_mem.c
  --- ossp-pkg/act/act_mem.c	2 Jan 2002 17:05:53 -0000	1.10
  +++ ossp-pkg/act/act_mem.c	6 Jan 2003 12:10:58 -0000	1.11
  @@ -1,9 +1,10 @@
  -/* 
  -**  Act - Abstract Container Type Library
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +/*
  +**  OSSP act - Abstract Container Types
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of Act, a library for dealing with Abstract 
  -**  Container Types which can be found at http://www.ossp.org/pkg/act/.
  +**  This file is part of OSSP act, an abstract container type library
  +**  which can be found at http://www.ossp.org/pkg/lib/act/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  @@ -42,7 +43,7 @@
   void *(*act_mem_char)(const void *, unsigned char, size_t)       = _act_mem_char;
   int   (*act_mem_cmp)(const void *, const void *, size_t)         = _act_mem_cmp;
   
  -/* 
  +/*
    * Align a size to the next larger or equal size which is likely to have the
    * longest *relevant* CPU-specific memory word alignment restrictions.
    */
  @@ -116,7 +117,7 @@
       }
   
       /* fill the whole stamping word */
  -    if ((c = (unsigned char)c0) != 0) { 
  +    if ((c = (unsigned char)c0) != 0) {
           c = c | (c << 8);
   #if (SIZEOF_INT > 2)
           c = c | (c << 16);
  @@ -163,7 +164,7 @@
           return NULL;
       src_p = src;
       dst_p = dst;
  -    if (dst > src) { 
  +    if (dst > src) {
           /* must go high to low */
           src_p += bytes;
           dst_p += bytes;
  @@ -196,19 +197,19 @@
   /* additional function: memmem(3) like */
   intern void *
   _act_mem_mem(
  -    const void *haystack, size_t haystack_len, 
  +    const void *haystack, size_t haystack_len,
       const void *needle,   size_t needle_len)
   {
       register const char *begin;
       register const char *last_possible;
  -    
  -    if (needle_len == 0) 
  +
  +    if (needle_len == 0)
           /* The first occurrence of the empty string is deemed to occur at
              the end of the string. */
           return (void *)&((const char *)haystack)[haystack_len - 1];
       last_possible = (const char *)haystack + haystack_len - needle_len;
       for (begin = (const char *)haystack; begin <= last_possible; begin++)
  -        if (   *begin == *((const char *)needle) 
  +        if (   *begin == *((const char *)needle)
               && act_mem_cmp(&begin[1], (const char *)needle + 1, needle_len - 1) == 0)
               return (void *)begin;
       return NULL;
  @@ -219,7 +220,7 @@
   {
       register const unsigned char *cp1;
       register const unsigned char *cp2;
  -   
  +
       if (bytes != 0) {
           cp1 = src1;
           cp2 = src2;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/act/act_mem.h
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 act_mem.h
  --- ossp-pkg/act/act_mem.h	2 Jan 2002 17:05:53 -0000	1.7
  +++ ossp-pkg/act/act_mem.h	6 Jan 2003 12:10:58 -0000	1.8
  @@ -1,9 +1,10 @@
  -/* 
  -**  Act - Abstract Container Type Library
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +/*
  +**  OSSP act - Abstract Container Types
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of Act, a library for dealing with Abstract 
  -**  Container Types which can be found at http://www.ossp.org/pkg/act/.
  +**  This file is part of OSSP act, an abstract container type library
  +**  which can be found at http://www.ossp.org/pkg/lib/act/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/act/act_p.h.in
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 act_p.h.in
  --- ossp-pkg/act/act_p.h.in	19 Jan 2002 13:13:32 -0000	1.8
  +++ ossp-pkg/act/act_p.h.in	6 Jan 2003 12:10:58 -0000	1.9
  @@ -1,9 +1,10 @@
  -/* 
  -**  Act - Abstract Container Type Library
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +/*
  +**  OSSP act - Abstract Container Types
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of Act, a library for dealing with Abstract 
  -**  Container Types which can be found at http://www.ossp.org/pkg/act/.
  +**  This file is part of OSSP act, an abstract container type library
  +**  which can be found at http://www.ossp.org/pkg/lib/act/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  @@ -48,7 +49,7 @@
   #define errno_safe(cmd) \
           do { int __local_errno = errno; cmd; errno = __local_errno; } while (0)
   #define return_errno(return_val,errno_val) \
  -        do { errno = (errno_val); return (return_val); } while (0) 
  +        do { errno = (errno_val); return (return_val); } while (0)
   
   #include "act_cfg.h"
   #include "act_lib.h"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/act/act_str.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 act_str.c
  --- ossp-pkg/act/act_str.c	2 Jan 2002 17:05:53 -0000	1.3
  +++ ossp-pkg/act/act_str.c	6 Jan 2003 12:10:58 -0000	1.4
  @@ -1,9 +1,10 @@
  -/* 
  -**  Act - Abstract Container Type Library
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +/*
  +**  OSSP act - Abstract Container Types
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of Act, a library for dealing with Abstract 
  -**  Container Types which can be found at http://www.ossp.org/pkg/act/.
  +**  This file is part of OSSP act, an abstract container type library
  +**  which can be found at http://www.ossp.org/pkg/lib/act/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  @@ -652,9 +653,9 @@
   
   intern int
   act_vsnprintf(
  -    char *str, 
  -    size_t count, 
  -    const char *fmt, 
  +    char *str,
  +    size_t count,
  +    const char *fmt,
       va_list args)
   {
       size_t retlen;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/act/act_test.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 act_test.c
  --- ossp-pkg/act/act_test.c	17 Jan 2002 20:19:57 -0000	1.4
  +++ ossp-pkg/act/act_test.c	6 Jan 2003 12:10:58 -0000	1.5
  @@ -1,3 +1,31 @@
  +/*
  +**  OSSP act - Abstract Container Types
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
  +**
  +**  This file is part of OSSP act, an abstract container type library
  +**  which can be found at http://www.ossp.org/pkg/lib/act/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  act_test.c: test suite
  +*/
   
   #include <stdio.h>
   #include <string.h>
  @@ -17,7 +45,7 @@
   #define act_hash_delete_str(h,k) \
           act_hash_delete((h),(k),strlen((k)))
   
  -int main(int argc, char *argv[]) 
  +int main(int argc, char *argv[])
   {
       act_hash_t *h;
       char buf[1024];
  @@ -73,7 +101,7 @@
       while (fgets(buf, sizeof(buf), fp) != NULL) {
           buf[strlen(buf)-1] = '\0';
           sprintf(buf2, "%ld", i);
  -        if (!act_hash_lookup_str(h, buf, (void **)&cp)) 
  +        if (!act_hash_lookup_str(h, buf, (void **)&cp))
               fprintf(stderr, "failed to lookup `%s'\n", buf);
           else {
               if (strcmp(cp, buf2) != 0)
  @@ -99,7 +127,7 @@
               act_hash_status(h, s, sizeof s);
               fprintf(stderr, "%s\n", s);
           }
  -        if (!act_hash_delete_str(h, buf)) 
  +        if (!act_hash_delete_str(h, buf))
               fprintf(stderr, "failed to delete `%s'\n", buf);
           i--;
       }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/act/act_vers.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 act_vers.c
  --- ossp-pkg/act/act_vers.c	18 Aug 2000 15:35:57 -0000	1.3
  +++ ossp-pkg/act/act_vers.c	6 Jan 2003 12:10:58 -0000	1.4
  @@ -1,5 +1,5 @@
   /*
  -**  act_vers.c -- Version Information for Act (syntax: C/C++)
  +**  act_vers.c -- Version Information for OSSP act (syntax: C/C++)
   **  [automatically generated and maintained by GNU shtool]
   */
   
  @@ -8,7 +8,7 @@
   #ifndef _ACT_VERS_C_
   #define _ACT_VERS_C_
   
  -#define ACT_INT_VERSION 0x005100
  +#define ACT_INT_VERSION 0x000200
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _ACT_VERS_C_AS_HEADER_
   
   act_int_version_t act_int_version = {
  -    0x005100,
  -    "0.5b0",
  -    "0.5b0 (18-Aug-2000)",
  -    "This is Act, Version 0.5b0 (18-Aug-2000)",
  -    "Act 0.5b0 (18-Aug-2000)",
  -    "Act/0.5b0",
  -    "@(#)Act 0.5b0 (18-Aug-2000)",
  -    "$Id: act_vers.c,v 1.3 2000/08/18 15:35:57 rse Exp $"
  +    0x000200,
  +    "0.0.0",
  +    "0.0.0 (06-Jan-2003)",
  +    "This is OSSP act, Version 0.0.0 (06-Jan-2003)",
  +    "OSSP act 0.0.0 (06-Jan-2003)",
  +    "OSSP act/0.0.0",
  +    "@(#)OSSP act 0.0.0 (06-Jan-2003)",
  +    "$Id: act_vers.c,v 1.4 2003/01/06 12:10:58 rse Exp $"
   };
   
   #endif /* _ACT_VERS_C_AS_HEADER_ */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/act/configure.ac
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 configure.ac
  --- ossp-pkg/act/configure.ac	17 Jan 2002 20:19:57 -0000	1.1
  +++ ossp-pkg/act/configure.ac	6 Jan 2003 12:10:58 -0000	1.2
  @@ -1,17 +1,39 @@
   dnl ##
  -dnl ##   Autoconf specification for ACT library
  +dnl ##  OSSP act - Abstract Container Types
  +dnl ##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
  +dnl ##
  +dnl ##  This file is part of OSSP act, a abstract container type library
  +dnl ##  which can be found at http://www.ossp.org/pkg/lib/act/.
  +dnl ##
  +dnl ##  Permission to use, copy, modify, and distribute this software for
  +dnl ##  any purpose with or without fee is hereby granted, provided that
  +dnl ##  the above copyright notice and this permission notice appear in all
  +dnl ##  copies.
  +dnl ##
  +dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +dnl ##  SUCH DAMAGE.
  +dnl ##
  +dnl ##  configure.ac: Autoconf specification
   dnl ##
   
  -AC_PREREQ(2.12)dnl
  -AC_REVISION($Revision: 1.1 $)
  -
  +AC_PREREQ(2.57)dnl
   AC_INIT(README)
   AC_HEADLINE(dnl
   OSSP act, Abstract Container Types, dnl
   ACT_VERSION, act_vers.c, dnl
  -[Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>])
  -AC_PREFIX_DEFAULT(/usr/local)
  -AC_CONFIG_HEADER(act_cfg.h)
  +[Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>])
   
   AC_SET_MAKE
   AC_PROG_CC
  @@ -28,8 +50,8 @@
   fi
   )dnl
   if test ".$enable_debug" = .yes; then
  -    LDFLAGS="$LDFLAGS -g -ggdb3"
  -    CFLAGS="$CFLAGS -g -ggdb3"
  +    LDFLAGS="$LDFLAGS -g"
  +    CFLAGS="$CFLAGS -g"
       CFLAGS="$CFLAGS -pedantic"
       CFLAGS="$CFLAGS -Wall -Wshadow -Wpointer-arith -Wcast-align"
       CFLAGS="$CFLAGS -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline"
  @@ -89,13 +111,12 @@
   dnl {
       dnl long long n = 1;
       dnl if (sizeof(long long) >= 8)
  -       dnl  
  +       dnl
       dnl exit(0)
   dnl }
   dnl ],
   
  -AC_OUTPUT(dnl
  -Makefile dnl
  -act.h dnl
  -)dnl
  +AC_CONFIG_HEADERS(act_cfg.h)
  +AC_CONFIG_FILES([Makefile act.h])
  +AC_OUTPUT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/act/devtool
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 devtool
  --- ossp-pkg/act/devtool	17 Jan 2002 20:19:57 -0000	1.1
  +++ ossp-pkg/act/devtool	6 Jan 2003 12:10:58 -0000	1.2
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  devtool -- Development Tool
  -##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   if [ $# -eq 0 ]; then
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/act/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.conf
  --- ossp-pkg/act/devtool.conf	18 Jan 2002 17:31:06 -0000	1.2
  +++ ossp-pkg/act/devtool.conf	6 Jan 2003 12:10:58 -0000	1.3
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   1.5.4 "1.5.*" all
  -    # @autogen libtool  1.4.2 "1.4*"
  -    @autogen autoconf 2.52  "2.5.*"
  +    @autogen shtool   1.6.2 "1.6.*" all
  +    #@autogen libtool 1.4.3 "1.4*"
  +    @autogen autoconf 2.57  "2.5.*"
   
   %autoclean
       @autoclean shtool
  @@ -20,12 +20,42 @@
           "$@"
   
   %version
  -    ./shtool version -l c -n "OSSP act" -e act_vers.c
  +    ./shtool version -l c -p act_int_ -n "OSSP act" -e act_vers.c
  +    V=`./shtool version -l c -d long act_vers.c`
  +    sed -e "s/Version .*/Version $V/g" <README >README.n
  +    mv README.n README
   
   %dist
  -    make distclean >/dev/null 2>&1
  +    rm -f act-*.tar.gz
  +    ./devtool autoclean
  +    ./devtool autogen
  +    ./configure
  +    make clean all man
  +    make distclean
       ./shtool fixperm -v .
  -    V=`./shtool version -l c -d short act_vers.c`
  -    ./shtool tarball -o act-${V}.tar.gz -d act-${V} -u ossp -g ossp \
  -                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf' -c 'gzip --best' .
  +    V=`./shtool version -l txt -d short VERSION`
  +    ./shtool tarball -o act-${V}.tar.gz -d act-${V} -u ossp -g act \
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*' -c 'gzip --best' .
  +    ls -l act-${V}.tar.gz
  +    gunzip <act-${V}.tar.gz | tar tvf - | head -10; echo "[...]"
  +    gunzip <act-${V}.tar.gz | tar tvf - | tail -10
  +
  +%snap
  +    rm -f act-*.tar.gz
  +    ./devtool autoclean
  +    ./devtool autogen
  +    ./configure
  +    make clean all man
  +    make distclean
  +    ./shtool fixperm -v .
  +    D=`date '+%Y%m%d'`
  +    ./shtool tarball -o act-SNAP-${D}.tar.gz -d act-SNAP-${D} -u ossp -g act \
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*' -c 'gzip --best' .
  +    ls -l act-SNAP-${D}.tar.gz
  +    gunzip <act-SNAP-${D}.tar.gz | tar tvf - | head -10; echo "[...]"
  +    gunzip <act-SNAP-${D}.tar.gz | tar tvf - | tail -10
  +
  +%release
  +    echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/act/"
  +    scp act-*.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/act/
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/act/devtool.func
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.func
  --- ossp-pkg/act/devtool.func	17 Jan 2002 20:19:57 -0000	1.1
  +++ ossp-pkg/act/devtool.func	6 Jan 2003 12:10:58 -0000	1.2
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   devtool_require () {
  @@ -33,6 +33,7 @@
               echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
               autoconf
               autoheader 2>&1 | grep -v "is unchanged"
  +            rm -rf autom4te.cache >/dev/null 2>&1
               ;;
           libtool )
               libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan  6 14:11:25 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A39D976606; Mon,  6 Jan 2003 14:11:24 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ ChangeLog Makefile.in README VERSION aclocal....
Message-Id: <20030106131124.A39D976606@mail.ossp.org>
Date: Mon,  6 Jan 2003 14:11:24 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Jan-2003 14:11:24
  Branch: HEAD                             Handle: 2003010613112300

  Modified files:
    ossp-pkg/sa             ChangeLog Makefile.in README VERSION aclocal.m4
                            devtool.conf sa-config.in sa.ac sa.c sa.h sa.pod
                            sa_test.c

  Log:
    - Adjusted all copyright messages for new year 2003.
    - Fixed generated owner in distribution tarball.
    - Prepare for 1.0.3 release

  Summary:
    Revision    Changes     Path
    1.19        +7  -1      ossp-pkg/sa/ChangeLog
    1.15        +3  -3      ossp-pkg/sa/Makefile.in
    1.14        +4  -4      ossp-pkg/sa/README
    1.11        +1  -1      ossp-pkg/sa/VERSION
    1.6         +3  -3      ossp-pkg/sa/aclocal.m4
    1.17        +3  -3      ossp-pkg/sa/devtool.conf
    1.6         +3  -3      ossp-pkg/sa/sa-config.in
    1.13        +3  -3      ossp-pkg/sa/sa.ac
    1.73        +3  -3      ossp-pkg/sa/sa.c
    1.36        +3  -3      ossp-pkg/sa/sa.h
    1.39        +3  -3      ossp-pkg/sa/sa.pod
    1.23        +3  -3      ossp-pkg/sa/sa_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 ChangeLog
  --- ossp-pkg/sa/ChangeLog	31 Dec 2002 22:08:57 -0000	1.18
  +++ ossp-pkg/sa/ChangeLog	6 Jan 2003 13:11:23 -0000	1.19
  @@ -11,7 +11,13 @@
     This is a list of all changes to OSSP sa.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 1.0.2 and 1.0.3 (04-Dec-2002 to xx-Jan-2003)
  +  Changes between 1.0.2 and 1.0.3 (04-Dec-2002 to 06-Jan-2003)
  +
  +   o Adjusted all copyright messages for new year 2003.
  +     [Ralf S. Engelschall]
  +
  +   o Fixed generated owner in distribution tarball.
  +     [Ralf S. Engelschall]
   
      o Fixed two compile-time warnings in sa_test.c.
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 Makefile.in
  --- ossp-pkg/sa/Makefile.in	5 Nov 2002 13:04:56 -0000	1.14
  +++ ossp-pkg/sa/Makefile.in	6 Jan 2003 13:11:23 -0000	1.15
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP sa - Socket Abstraction
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP sa, a socket abstraction library which
   ##  can be found at http://www.ossp.org/pkg/lib/sa/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/README
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 README
  --- ossp-pkg/sa/README	4 Dec 2002 12:43:03 -0000	1.13
  +++ ossp-pkg/sa/README	6 Jan 2003 13:11:23 -0000	1.14
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/\__,_|
   
     OSSP sa - Socket Abstraction
  -  Version 1.0.2 (04-Dec-2002)
  +  Version 1.0.3 (06-Jan-2003)
   
     ABSTRACT
   
  @@ -18,9 +18,9 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2001-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   
     This file is part of OSSP sa, a socket abstraction library which
     can be found at http://www.ossp.org/pkg/lib/sa/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/VERSION
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 VERSION
  --- ossp-pkg/sa/VERSION	4 Dec 2002 12:43:03 -0000	1.10
  +++ ossp-pkg/sa/VERSION	6 Jan 2003 13:11:23 -0000	1.11
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP sa (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP sa, Version 1.0.2 (04-Dec-2002)
  +  This is OSSP sa, Version 1.0.3 (06-Jan-2003)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 aclocal.m4
  --- ossp-pkg/sa/aclocal.m4	15 Mar 2002 10:47:36 -0000	1.5
  +++ ossp-pkg/sa/aclocal.m4	6 Jan 2003 13:11:23 -0000	1.6
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  SA - OSSP Socket Abstraction Library
  -dnl ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP SA, a socket abstraction library which
   dnl ##  can be found at http://www.ossp.org/pkg/sa/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 devtool.conf
  --- ossp-pkg/sa/devtool.conf	4 Dec 2002 12:43:03 -0000	1.16
  +++ ossp-pkg/sa/devtool.conf	6 Jan 2003 13:11:23 -0000	1.17
  @@ -22,7 +22,7 @@
   %version
       ./shtool version -l txt -n "OSSP sa" -e VERSION
       V=`./shtool version -l txt -d long VERSION`
  -    sed -e "s/Version .*(.*)/Version $V/g" <README >README.n
  +    sed -e "s/Version .*/Version $V/g" <README >README.n
       mv README.n README
   
   %dist
  @@ -34,7 +34,7 @@
       make distclean
       ./shtool fixperm -v .
       V=`./shtool version -l txt -d short VERSION`
  -    ./shtool tarball -o sa-${V}.tar.gz -d sa-${V} -u gnu -g sa \
  +    ./shtool tarball -o sa-${V}.tar.gz -d sa-${V} -u ossp -g sa \
                        -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*' -c 'gzip --best' .
       ls -l sa-${V}.tar.gz
       gunzip <sa-${V}.tar.gz | tar tvf - | head -10; echo "[...]"
  @@ -49,7 +49,7 @@
       make distclean
       ./shtool fixperm -v .
       D=`date '+%Y%m%d'`
  -    ./shtool tarball -o sa-SNAP-${D}.tar.gz -d sa-SNAP-${D} -u gnu -g sa \
  +    ./shtool tarball -o sa-SNAP-${D}.tar.gz -d sa-SNAP-${D} -u ossp -g sa \
                        -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*' -c 'gzip --best' .
       ls -l sa-SNAP-${D}.tar.gz
       gunzip <sa-SNAP-${D}.tar.gz | tar tvf - | head -10; echo "[...]"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa-config.in
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 sa-config.in
  --- ossp-pkg/sa/sa-config.in	26 Oct 2002 15:45:32 -0000	1.5
  +++ ossp-pkg/sa/sa-config.in	6 Jan 2003 13:11:23 -0000	1.6
  @@ -1,9 +1,9 @@
   #!/bin/sh
   ##
   ##  OSSP sa - Socket Abstraction
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP sa, a socket abstraction library which
   ##  can be found at http://www.ossp.org/pkg/lib/sa/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.ac
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 sa.ac
  --- ossp-pkg/sa/sa.ac	26 Oct 2002 15:45:32 -0000	1.12
  +++ ossp-pkg/sa/sa.ac	6 Jan 2003 13:11:23 -0000	1.13
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP sa - Socket Abstraction
  -dnl ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP sa, a socket abstraction library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/sa/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.c
  ============================================================================
  $ cvs diff -u -r1.72 -r1.73 sa.c
  --- ossp-pkg/sa/sa.c	28 Nov 2002 15:42:29 -0000	1.72
  +++ ossp-pkg/sa/sa.c	6 Jan 2003 13:11:23 -0000	1.73
  @@ -1,8 +1,8 @@
   /*
   **  OSSP sa - Socket Abstraction
  -**  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP sa, a socket abstraction library which
   **  can be found at http://www.ossp.org/pkg/lib/sa/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.h
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 sa.h
  --- ossp-pkg/sa/sa.h	28 Nov 2002 15:42:41 -0000	1.35
  +++ ossp-pkg/sa/sa.h	6 Jan 2003 13:11:23 -0000	1.36
  @@ -1,8 +1,8 @@
   /*
   **  OSSP sa - Socket Abstraction
  -**  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP sa, a socket abstraction library which
   **  can be found at http://www.ossp.org/pkg/lib/sa/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.pod
  ============================================================================
  $ cvs diff -u -r1.38 -r1.39 sa.pod
  --- ossp-pkg/sa/sa.pod	30 Oct 2002 20:24:01 -0000	1.38
  +++ ossp-pkg/sa/sa.pod	6 Jan 2003 13:11:23 -0000	1.39
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP sa - Socket Abstraction
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP sa, a socket abstraction library which
   ##  can be found at http://www.ossp.org/pkg/lib/sa/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa_test.c
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 sa_test.c
  --- ossp-pkg/sa/sa_test.c	31 Dec 2002 22:08:57 -0000	1.22
  +++ ossp-pkg/sa/sa_test.c	6 Jan 2003 13:11:23 -0000	1.23
  @@ -1,8 +1,8 @@
   /*
   **  OSSP sa - Socket Abstraction
  -**  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP sa, a socket abstraction library which
   **  can be found at http://www.ossp.org/pkg/lib/sa/.
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan  6 14:49:26 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2978C76519; Mon,  6 Jan 2003 14:49:26 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/al/ ChangeLog Makefile.in README aclocal.m4 al-co...
Message-Id: <20030106134926.2978C76519@mail.ossp.org>
Date: Mon,  6 Jan 2003 14:49:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Jan-2003 14:49:26
  Branch: HEAD                             Handle: 2003010613492401

  Modified files:
    ossp-pkg/al             ChangeLog Makefile.in README aclocal.m4
                            al-config.in al.c al.h al.pod al_test.c
                            configure.ac devtool.conf list.h

  Log:
    Adjust copyright messages for new year 2003

  Summary:
    Revision    Changes     Path
    1.4         +3  -0      ossp-pkg/al/ChangeLog
    1.3         +4  -4      ossp-pkg/al/Makefile.in
    1.5         +4  -4      ossp-pkg/al/README
    1.2         +4  -4      ossp-pkg/al/aclocal.m4
    1.3         +4  -4      ossp-pkg/al/al-config.in
    1.4         +4  -4      ossp-pkg/al/al.c
    1.3         +4  -4      ossp-pkg/al/al.h
    1.4         +4  -4      ossp-pkg/al/al.pod
    1.8         +4  -4      ossp-pkg/al/al_test.c
    1.4         +4  -4      ossp-pkg/al/configure.ac
    1.6         +1  -1      ossp-pkg/al/devtool.conf
    1.2         +4  -4      ossp-pkg/al/list.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/al/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ChangeLog
  --- ossp-pkg/al/ChangeLog	17 Dec 2002 14:00:11 -0000	1.3
  +++ ossp-pkg/al/ChangeLog	6 Jan 2003 13:49:24 -0000	1.4
  @@ -13,8 +13,11 @@
   
     Changes between 0.9.0 and 0.9.1 (16-Dec-2002 to 16-Dec-2002)
   
  +   o Adjusted copyright messages for new year 2003.
  +
      o Fixed ex support in al_test
   
      o Proper inclusion of autoconf headers
   
     Initial release 0.9.0 (16-Dec-2002)
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/al/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 Makefile.in
  --- ossp-pkg/al/Makefile.in	16 Dec 2002 14:02:45 -0000	1.2
  +++ ossp-pkg/al/Makefile.in	6 Jan 2003 13:49:24 -0000	1.3
  @@ -1,9 +1,9 @@
   ##
   ##  OSSP al - Assembly Line
  -##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -##  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  +##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2003 Michael van Elst <mlelstv@dev.de.cw.net>
   ##
   ##  This file is part of OSSP al, an abstract datatype of a data buffer
   ##  that can assemble, move and truncate data but avoids actual copying
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/al/README
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 README
  --- ossp-pkg/al/README	16 Dec 2002 15:14:09 -0000	1.4
  +++ ossp-pkg/al/README	6 Jan 2003 13:49:24 -0000	1.5
  @@ -19,10 +19,10 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  +  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +  Copyright (c) 2002-2003 Michael van Elst <mlelstv@dev.de.cw.net>
   
     This file is part of OSSP al, an abstract data type of a data buffer
     that can assemble, move and truncate data but avoids actual copying.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/al/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 aclocal.m4
  --- ossp-pkg/al/aclocal.m4	16 Dec 2002 12:24:52 -0000	1.1
  +++ ossp-pkg/al/aclocal.m4	6 Jan 2003 13:49:24 -0000	1.2
  @@ -1,9 +1,9 @@
   dnl ##
   dnl ##  al - OSSP Assembly Line
  -dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -dnl ##  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  +dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2002-2003 Michael van Elst <mlelstv@dev.de.cw.net>
   dnl ##
   dnl ##  This file is part of OSSP al, an abstract datatype of a data buffer
   dnl ##  that can assemble, move and truncate data but avoids actual copying.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/al/al-config.in
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 al-config.in
  --- ossp-pkg/al/al-config.in	16 Dec 2002 14:02:45 -0000	1.2
  +++ ossp-pkg/al/al-config.in	6 Jan 2003 13:49:24 -0000	1.3
  @@ -1,10 +1,10 @@
   #!/bin/sh
   ##
   ##  OSSP al - Assembly Line
  -##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -##  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  +##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2003 Michael van Elst <mlelstv@dev.de.cw.net>
   ##
   ##  This file is part of OSSP al, an abstract datatype of a data buffer
   ##  that can assemble, move and truncate data but avoids actual copying
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/al/al.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 al.c
  --- ossp-pkg/al/al.c	16 Dec 2002 14:59:29 -0000	1.3
  +++ ossp-pkg/al/al.c	6 Jan 2003 13:49:24 -0000	1.4
  @@ -1,9 +1,9 @@
   /*
   **  OSSP al -- Assembly Line
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 Michael van Elst <mlelstv@dev.de.cw.net>
   **
   **  This file is part of OSSP al, an abstract datatype of a data buffer
   **  that can assemble, move and truncate data but avoids actual copying
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/al/al.h
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 al.h
  --- ossp-pkg/al/al.h	16 Dec 2002 14:02:45 -0000	1.2
  +++ ossp-pkg/al/al.h	6 Jan 2003 13:49:24 -0000	1.3
  @@ -1,9 +1,9 @@
   /*
   **  OSSP al -- Assembly Line
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 Michael van Elst <mlelstv@dev.de.cw.net>
   **
   **  This file is part of OSSP al, an abstract datatype of a data buffer
   **  that can assemble, move and truncate data but avoids actual copying
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/al/al.pod
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 al.pod
  --- ossp-pkg/al/al.pod	16 Dec 2002 14:33:26 -0000	1.3
  +++ ossp-pkg/al/al.pod	6 Jan 2003 13:49:24 -0000	1.4
  @@ -1,9 +1,9 @@
   ##
   ##  OSSP al - Assembly Line
  -##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  +##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2003 Michael van Elst <mlelstv@dev.de.cw.net>
   ##
   ##  This file is part of OSSP al, an abstract datatype of a data buffer
   ##  that can assemble, move and truncate data but avoids actual copying
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/al/al_test.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 al_test.c
  --- ossp-pkg/al/al_test.c	16 Dec 2002 15:03:18 -0000	1.7
  +++ ossp-pkg/al/al_test.c	6 Jan 2003 13:49:24 -0000	1.8
  @@ -1,9 +1,9 @@
   /*
   **  OSSP al - Assembly Line
  -**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -**  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 Michael van Elst <mlelstv@dev.de.cw.net>
   **
   **  This file is part of OSSP al, an abstract datatype of a data buffer
   **  that can assemble, move and truncate data but avoids actual copying
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/al/configure.ac
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 configure.ac
  --- ossp-pkg/al/configure.ac	16 Dec 2002 14:02:45 -0000	1.3
  +++ ossp-pkg/al/configure.ac	6 Jan 2003 13:49:25 -0000	1.4
  @@ -1,9 +1,9 @@
   dnl ##
   dnl ##  OSSP al - Assembly Line
  -dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -dnl ##  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  +dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2002-2003 Michael van Elst <mlelstv@dev.de.cw.net>
   dnl ##
   dnl ##  This file is part of OSSP al, an abstract datatype of a data buffer
   dnl ##  that can assemble, move and truncate data but avoids actual copying
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/al/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 devtool.conf
  --- ossp-pkg/al/devtool.conf	16 Dec 2002 14:34:55 -0000	1.5
  +++ ossp-pkg/al/devtool.conf	6 Jan 2003 13:49:25 -0000	1.6
  @@ -29,7 +29,7 @@
       rm -f al-*.tar.gz
       ./devtool autoclean
       ./devtool autogen
  -    ./configure
  +    ./devtool configure
       make clean all man
       make distclean
       ./shtool fixperm -v .
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/al/list.h
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 list.h
  --- ossp-pkg/al/list.h	16 Dec 2002 12:39:32 -0000	1.1
  +++ ossp-pkg/al/list.h	6 Jan 2003 13:49:25 -0000	1.2
  @@ -1,9 +1,9 @@
   /*
   **  OSSP al -- Assembly Line
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 Michael van Elst <mlelstv@dev.de.cw.net>
   **
   **  This file is part of OSSP al, an abstract datatype of a data buffer
   **  that can assemble, move and truncate data but avoids actual copying.
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan  6 16:31:26 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B4FE5764F0; Mon,  6 Jan 2003 16:31:25 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex/ 00TODO AUTHORS ChangeLog INSTALL Makefile.in ...
Message-Id: <20030106153125.B4FE5764F0@mail.ossp.org>
Date: Mon,  6 Jan 2003 16:31:25 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Jan-2003 16:31:25
  Branch: HEAD                             Handle: 2003010615312400

  Modified files:
    ossp-pkg/ex             00TODO AUTHORS ChangeLog INSTALL Makefile.in
                            README THANKS aclocal.m4 configure.ac devtool.conf
                            ex-config.in ex.c ex.h ex.pod ex_test.c

  Log:
    - consistently use "Exception Handling"
    - strip trailing whitespaces
    - adjust copyright for new year 2003
    - consistently use OSSP ASCII-art

  Summary:
    Revision    Changes     Path
    1.6         +8  -6      ossp-pkg/ex/00TODO
    1.3         +7  -6      ossp-pkg/ex/AUTHORS
    1.4         +21 -8      ossp-pkg/ex/ChangeLog
    1.3         +8  -7      ossp-pkg/ex/INSTALL
    1.7         +4  -4      ossp-pkg/ex/Makefile.in
    1.7         +10 -9      ossp-pkg/ex/README
    1.2         +8  -6      ossp-pkg/ex/THANKS
    1.3         +4  -4      ossp-pkg/ex/aclocal.m4
    1.6         +4  -4      ossp-pkg/ex/configure.ac
    1.9         +5  -5      ossp-pkg/ex/devtool.conf
    1.4         +5  -5      ossp-pkg/ex/ex-config.in
    1.8         +5  -5      ossp-pkg/ex/ex.c
    1.19        +8  -8      ossp-pkg/ex/ex.h
    1.26        +34 -34     ossp-pkg/ex/ex.pod
    1.11        +4  -4      ossp-pkg/ex/ex_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/00TODO
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 00TODO
  --- ossp-pkg/ex/00TODO	30 Mar 2002 19:04:59 -0000	1.5
  +++ ossp-pkg/ex/00TODO	6 Jan 2003 15:31:24 -0000	1.6
  @@ -1,10 +1,12 @@
  -    _____  __
  -   / _ \ \/ /
  -  |  __/>  < 
  -   \___/_/\_\
  -               
  +   _        ___  ____ ____  ____
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _____  __
  +  _|_||_| | | | \___ \___ \| |_) | / _ \ \/ /
  + |_||_|_| | |_| |___) |__) |  __/ |  __/>  <
  +  |_|_|_|  \___/|____/____/|_|     \___/_/\_\
  +
     OSSP ex - Exception Handling
   
     TODO
  -  ====
  +
  +  -none-
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/AUTHORS
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 AUTHORS
  --- ossp-pkg/ex/AUTHORS	30 Mar 2002 19:04:59 -0000	1.2
  +++ ossp-pkg/ex/AUTHORS	6 Jan 2003 15:31:24 -0000	1.3
  @@ -1,9 +1,10 @@
  -    _____  __
  -   / _ \ \/ /
  -  |  __/>  < 
  -   \___/_/\_\
  -               
  -  OSSP ex - Exception Handling Library
  +   _        ___  ____ ____  ____
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _____  __
  +  _|_||_| | | | \___ \___ \| |_) | / _ \ \/ /
  + |_||_|_| | |_| |___) |__) |  __/ |  __/>  <
  +  |_|_|_|  \___/|____/____/|_|     \___/_/\_\
  +
  +  OSSP ex - Exception Handling
   
     AUTHORS
     =======
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ChangeLog
  --- ossp-pkg/ex/ChangeLog	30 Mar 2002 19:07:29 -0000	1.3
  +++ ossp-pkg/ex/ChangeLog	6 Jan 2003 15:31:24 -0000	1.4
  @@ -1,15 +1,28 @@
  -    _____  __
  -   / _ \ \/ /
  -  |  __/>  < 
  -   \___/_/\_\
  -               
  -  OSSP ex - Exception Handling Library
  +   _        ___  ____ ____  ____
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _____  __
  +  _|_||_| | | | \___ \___ \| |_) | / _ \ \/ /
  + |_||_|_| | |_| |___) |__) |  __/ |  __/>  <
  +  |_|_|_|  \___/|____/____/|_|     \___/_/\_\
  +
  +  OSSP ex - Exception Handling
   
     ChangeLog
     =========
   
  -  This is the list of all changes to the OSSP ex source tree. 
  -  
  +  This is the list of all changes to the OSSP ex source tree.
  +
  +  Changes between 0.9.1 and 1.0.0 (08-Mar-2002 to 06-Jan-2003)
  +
  +   *) Adjusted copyright messages to include new year 2003.
  +      [Ralf S. Engelschall]
  +
  +   *) Upgraded build environment to GNU Shtool 1.6.2, GNU Libtool
  +      1.4.3 and GNU Autoconf 2.57.
  +      [Ralf S. Engelschall]
  +
  +   *) Fixed "ex-config --libs" output.
  +      [Ralf S. Engelschall]
  +
     Changes between 0.9.1 and 1.0.0 (08-Mar-2002 to 30-Mar-2002)
   
      *) Fixed manual page code layouting.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/INSTALL
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 INSTALL
  --- ossp-pkg/ex/INSTALL	30 Mar 2002 19:04:59 -0000	1.2
  +++ ossp-pkg/ex/INSTALL	6 Jan 2003 15:31:24 -0000	1.3
  @@ -1,16 +1,17 @@
  -    _____  __
  -   / _ \ \/ /
  -  |  __/>  < 
  -   \___/_/\_\
  -               
  -  OSSP ex - Exception Handling Library
  +   _        ___  ____ ____  ____
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _____  __
  +  _|_||_| | | | \___ \___ \| |_) | / _ \ \/ /
  + |_||_|_| | |_| |___) |__) |  __/ |  __/>  <
  +  |_|_|_|  \___/|____/____/|_|     \___/_/\_\
  +
  +  OSSP ex - Exception Handling
   
     INSTALL
     =======
   
     To install OSSP ex into /path/to/ex/ perform
     the following steps in your shell:
  -      
  +
       $ ./configure --prefix=/path/to/ex
       $ make
       $ make check
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 Makefile.in
  --- ossp-pkg/ex/Makefile.in	30 Mar 2002 18:56:02 -0000	1.6
  +++ ossp-pkg/ex/Makefile.in	6 Jan 2003 15:31:24 -0000	1.7
  @@ -1,8 +1,8 @@
   ##
  -##  OSSP ex - Exception Handling Library
  -##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  OSSP ex - Exception Handling
  +##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP ex, an exception handling library
   ##  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/README
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 README
  --- ossp-pkg/ex/README	30 Mar 2002 19:04:59 -0000	1.6
  +++ ossp-pkg/ex/README	6 Jan 2003 15:31:24 -0000	1.7
  @@ -1,9 +1,10 @@
  -    _____  __
  -   / _ \ \/ /
  -  |  __/>  < 
  -   \___/_/\_\
  -               
  -  OSSP ex - Exception Handling Library
  +   _        ___  ____ ____  ____
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _____  __
  +  _|_||_| | | | \___ \___ \| |_) | / _ \ \/ /
  + |_||_|_| | |_| |___) |__) |  __/ |  __/>  <
  +  |_|_|_|  \___/|____/____/|_|     \___/_/\_\
  +
  +  OSSP ex - Exception Handling
     Version 1.0.0 (30-Mar-2002)
   
     ABSTRACT
  @@ -23,9 +24,9 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   
     This file is part of OSSP ex, an exception handling library which
     can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/THANKS
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 THANKS
  --- ossp-pkg/ex/THANKS	30 Mar 2002 19:04:59 -0000	1.1
  +++ ossp-pkg/ex/THANKS	6 Jan 2003 15:31:24 -0000	1.2
  @@ -1,9 +1,10 @@
  -    _____  __
  -   / _ \ \/ /
  -  |  __/>  < 
  -   \___/_/\_\
  -               
  -  OSSP ex - Exception Handling Library
  +   _        ___  ____ ____  ____
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _____  __
  +  _|_||_| | | | \___ \___ \| |_) | / _ \ \/ /
  + |_||_|_| | |_| |___) |__) |  __/ |  __/>  <
  +  |_|_|_|  \___/|____/____/|_|     \___/_/\_\
  +
  +  OSSP ex - Exception Handling
   
     THANKS
     ======
  @@ -11,6 +12,7 @@
     Credit has to be given to the following people who contributed ideas,
     bugfixes, hints, gave platform feedback, etc. (in alphabetical order):
   
  +  Michael van Elst    <mlelstv@dev.de.cw.net>
     Thomas Lotterer     <thomas@lotterer.net>
     Michael Schloh      <michael@schloh.com>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 aclocal.m4
  --- ossp-pkg/ex/aclocal.m4	30 Mar 2002 19:04:59 -0000	1.2
  +++ ossp-pkg/ex/aclocal.m4	6 Jan 2003 15:31:24 -0000	1.3
  @@ -1,8 +1,8 @@
   dnl ##
  -dnl ##  OSSP ex - Exception Handling Library
  -dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  OSSP ex - Exception Handling
  +dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP ex, an exception handling library
   dnl ##  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/configure.ac
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 configure.ac
  --- ossp-pkg/ex/configure.ac	30 Mar 2002 18:56:02 -0000	1.5
  +++ ossp-pkg/ex/configure.ac	6 Jan 2003 15:31:24 -0000	1.6
  @@ -1,8 +1,8 @@
   dnl ##
  -dnl ##  OSSP ex - Exception Handling Library
  -dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  OSSP ex - Exception Handling
  +dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP ex, an exception handling library
   dnl ##  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 devtool.conf
  --- ossp-pkg/ex/devtool.conf	28 Jul 2002 08:03:49 -0000	1.8
  +++ ossp-pkg/ex/devtool.conf	6 Jan 2003 15:31:24 -0000	1.9
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.1 "1.6.*" all
  -    @autogen libtool  1.4.2 "1.4*"
  -    @autogen autoconf 2.53  "2.5[3-9]*"
  +    @autogen shtool   1.6.2 "1.6.*" all
  +    @autogen libtool  1.4.3 "1.4*"
  +    @autogen autoconf 2.57  "2.5[3-9]*"
   
   %autoclean
       @autoclean shtool
  @@ -22,7 +22,7 @@
   %version
       ./shtool version -l txt -n "OSSP ex" -e VERSION
       V=`./shtool version -l txt -d long VERSION`
  -    sed -e "s/Version .*(.*)/Version $V/g" <README >README.n 
  +    sed -e "s/Version .*/Version $V/g" <README >README.n
       mv README.n README
   
   %dist
  @@ -39,7 +39,7 @@
       ./shtool fixperm -v .
       echo "+++ rolling"
       V=`./shtool version -l txt -d short VERSION`
  -    ./shtool tarball -o ex-${V}.tar.gz -d ex-${V} -u ossp -g ossp \
  +    ./shtool tarball -o ex-${V}.tar.gz -d ex-${V} -u ossp -g ex \
                        -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*,*.tar.gz,00TODO' -c 'gzip --best' .
       ls -l ex-${V}.tar.gz
       echo "+++ testing"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ex-config.in
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ex-config.in
  --- ossp-pkg/ex/ex-config.in	30 Mar 2002 18:56:02 -0000	1.3
  +++ ossp-pkg/ex/ex-config.in	6 Jan 2003 15:31:24 -0000	1.4
  @@ -1,9 +1,9 @@
   #!/bin/sh
   ##
  -##  OSSP ex - Exception Handling Library
  -##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  OSSP ex - Exception Handling
  +##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP ex, an exception handling library
   ##  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ -124,7 +124,7 @@
               output_extra="$output_extra $ldflags"
               ;;
           --libs)
  -            output="$output -lxds"
  +            output="$output -lex"
               output_extra="$output_extra $libs"
               ;;
           * )
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ex.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 ex.c
  --- ossp-pkg/ex/ex.c	30 Mar 2002 18:56:02 -0000	1.7
  +++ ossp-pkg/ex/ex.c	6 Jan 2003 15:31:24 -0000	1.8
  @@ -1,8 +1,8 @@
   /*
  -**  OSSP ex - Exception Handling Library
  -**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  OSSP ex - Exception Handling
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP ex, an exception handling library
   **  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ -43,7 +43,7 @@
   
   /* default __ex_terminate callback function */
   void __ex_terminate_default(ex_t *e)
  -{ 
  +{
       fprintf(stderr,
               "**EX: UNCAUGHT EXCEPTION: "
               "class=0x%lx object=0x%lx value=0x%lx [%s:%d@%s]\n",
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ex.h
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 ex.h
  --- ossp-pkg/ex/ex.h	30 Mar 2002 18:56:02 -0000	1.18
  +++ ossp-pkg/ex/ex.h	6 Jan 2003 15:31:24 -0000	1.19
  @@ -1,8 +1,8 @@
   /*
  -**  OSSP ex - Exception Handling Library
  -**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  OSSP ex - Exception Handling
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP ex, an exception handling library
   **  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ -56,7 +56,7 @@
   /* the machine context */
   #if defined(__EX_MCTX_MCSC__)
   #include <ucontext.h>            /* POSIX.1 ucontext(3) */
  -#define __ex_mctx_struct         ucontext_t uc; 
  +#define __ex_mctx_struct         ucontext_t uc;
   #define __ex_mctx_save(mctx)     (getcontext(&(mctx)->uc) == 0)
   #define __ex_mctx_restored(mctx) /* noop */
   #define __ex_mctx_restore(mctx)  (void)setcontext(&(mctx)->uc)
  @@ -86,8 +86,8 @@
       void *ex_object;
       void *ex_value;
       /* throw point */
  -    char *ex_file; 
  -    int   ex_line; 
  +    char *ex_file;
  +    int   ex_line;
       char *ex_func;
   } ex_t;
   
  @@ -132,7 +132,7 @@
   
   /* the termination handler */
   typedef void (*ex_term_cb_t)(ex_t *);
  -extern ex_term_cb_t __ex_terminate; 
  +extern ex_term_cb_t __ex_terminate;
   extern void __ex_terminate_default(ex_t *e);
   
   /* the block for trying execution */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ex.pod
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 ex.pod
  --- ossp-pkg/ex/ex.pod	2 Apr 2002 17:54:09 -0000	1.25
  +++ ossp-pkg/ex/ex.pod	6 Jan 2003 15:31:24 -0000	1.26
  @@ -1,8 +1,8 @@
   ##
  -##  OSSP ex - Exception Handling Library
  -##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  OSSP ex - Exception Handling
  +##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP ex, an exception library
   ##  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ -63,7 +63,7 @@
   B<OSSP ex> is a small B<ISO-C++> style exception handling library for
   use in the B<ISO-C> language. It allows you to use the paradigm of
   throwing and catching exceptions in order to reduce the amount of error
  -handling code without making your program less robust. 
  +handling code without making your program less robust.
   
   This is achieved by directly transferring exceptional return codes (and
   the program control flow) from the location where the exception is
  @@ -124,7 +124,7 @@
   this is just a numerical return code. In the complex case this can be a
   pointer to an arbitrary complex data structure describing the exception.
   
  -=item C<char *>I<ex_file> 
  +=item C<char *>I<ex_file>
   
   This is the file name of the B<ISO-C> source where the B<ex_throw> call
   was performed. It is provided as an additional information about the
  @@ -162,7 +162,7 @@
   flow in case an exception is thrown is: I<BLOCK1> (up to the statement
   where the exception is thrown only), optionally followed by I<BLOCK2>,
   followed by I<BLOCK3>.
  -    
  +
   The B<ex_try>, B<ex_cleanup> and B<ex_catch> cannot be used separately,
   they work only in combination because they form a language clause
   as a whole. In contrast to B<ISO-C++> there is only one B<ex_catch>
  @@ -253,7 +253,7 @@
   
   This is a boolean flag which can be checked inside the dynamic scope
   of an B<ex_try> clause to test whether the current scope is exception
  -catching. 
  +catching.
   
   =item B<ex_deferred>
   
  @@ -387,7 +387,7 @@
    /* BAD EXAMPLE */
    ex_try {
        char *cp1, *cp2, cp3;
  - 
  +
        cp1 = mallocex(SMALLAMOUNT);
        globalcontext->first = cp1;
        cp2 = mallocex(TOOBIG);
  @@ -475,17 +475,17 @@
        }
        clean {
     /*04*/ printf("cp3=%s", cp3 == NULL /*02*/ ? "" : cp3);
  -         if (cp3 != NULL) 
  +         if (cp3 != NULL)
                free(cp3);
  -         if (cp2 != NULL) 
  +         if (cp2 != NULL)
                free(cp2);
  -         /*05 cp1 was given away */                       
  -     }                                                    
  -     catch(ex) {                                          
  -          /*05 global context untouched */                 
  -          rethrow;   
  -     }                                                    
  - }                                                        
  +         /*05 cp1 was given away */
  +     }
  +     catch(ex) {
  +          /*05 global context untouched */
  +          rethrow;
  +     }
  + }
   
   An alternative fixed version could also be:
   
  @@ -500,16 +500,16 @@
            /*05 keep responsibility*/
            cp2 = mallocex(TOOBIG);
            cp3 = mallocex(SMALLAMOUNT);
  -         strcpy(cp1, "foo"); 
  +         strcpy(cp1, "foo");
            strcpy(cp2, "bar");
        }
        clean {
     /*04*/ printf("cp3=%s", cp3 == NULL /*02*/ ? "" : cp3);
  -         if (cp3 != NULL) 
  +         if (cp3 != NULL)
                free(cp3);
  -         if (cp2 != NULL) 
  +         if (cp2 != NULL)
                free(cp2);
  -         if (cp1 != NULL) 
  +         if (cp1 != NULL)
                free(cp1);
        }
        catch(ex) {
  @@ -588,59 +588,59 @@
            free(data);
        return;
    }
  - 
  +
    /* callback: context fetching */
    static ex_ctx_t *pthread_ex_ctx(void)
    {
        return (ex_ctx_t *)pthread_getspecific(pthread_ex_ctx_key);
    }
  - 
  +
    /* callback: termination */
    static void pthread_ex_terminate(ex_t *e)
    {
        pthread_exit(e->ex_value);
    }
  -  
  +
    /* pthread init */
    int pthread_init_ex(void)
    {
        int rc;
  - 
  +
        /* additionally create thread data key and override OSSP ex callbacks */
        pthread_key_create(&pthread_ex_ctx_key, pthread_ex_ctx_destroy);
        __ex_ctx       = pthread_ex_ctx;
        __ex_terminate = pthread_ex_terminate;
  - 
  +
        return rc;
    }
  - 
  +
    /* internal thread entry wrapper information */
    typedef struct {
        void *(*entry)(void *);
        void *arg;
    } pthread_create_ex_t;
  - 
  +
    /* internal thread entry wrapper */
    static void *pthread_create_wrapper(void *arg)
    {
        pthread_create_ex_t *wrapper;
        ex_ctx_t *ex_ctx;
  - 
  +
        /* create per-thread exception context */
        wrapper = (pthread_create_ex_t *)arg;
        ex_ctx = (ex_ctx_t *)malloc(sizeof(ex_ctx_t));
        EX_CTX_INITIALIZE(ex_ctx);
        pthread_setspecific(pthread_ex_ctx_key, ex_ctx);
  - 
  +
        /* perform original operation */
        return wrapper->entry(wrapper->arg);
    }
  - 
  +
    /* pthread_create() wrapper */
    int pthread_create_ex(pthread_t *thread, const pthread_attr_t *attr, void *(*entry)(void *), void *arg)
    {
        pthread_create_ex_t wrapper;
  - 
  +
        /* spawn thread but execute start function through wrapper */
        wrapper.entry = entry;
        wrapper.arg   = arg;
  @@ -761,7 +761,7 @@
    #include "foo.h"
   
    const char foo_id[] = "foo 1.0";
  - 
  +
    #ifdef WITH_EX
    #include "ex.h"
    #define FOO_RC(rv) \
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ex_test.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 ex_test.c
  --- ossp-pkg/ex/ex_test.c	30 Mar 2002 18:56:02 -0000	1.10
  +++ ossp-pkg/ex/ex_test.c	6 Jan 2003 15:31:24 -0000	1.11
  @@ -1,8 +1,8 @@
   /*
  -**  OSSP ex - Exception Handling Library
  -**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  OSSP ex - Exception Handling
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP ex, an exception handling library
   **  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan  6 16:32:28 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5470F76606; Mon,  6 Jan 2003 16:32:28 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex/ README VERSION
Message-Id: <20030106153228.5470F76606@mail.ossp.org>
Date: Mon,  6 Jan 2003 16:32:28 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Jan-2003 16:32:28
  Branch: HEAD                             Handle: 2003010615322700

  Modified files:
    ossp-pkg/ex             README VERSION

  Log:
    bump version for release

  Summary:
    Revision    Changes     Path
    1.8         +1  -1      ossp-pkg/ex/README
    1.5         +1  -1      ossp-pkg/ex/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/README
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 README
  --- ossp-pkg/ex/README	6 Jan 2003 15:31:24 -0000	1.7
  +++ ossp-pkg/ex/README	6 Jan 2003 15:32:27 -0000	1.8
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     \___/_/\_\
   
     OSSP ex - Exception Handling
  -  Version 1.0.0 (30-Mar-2002)
  +  Version 1.0.1 (06-Jan-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/VERSION
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 VERSION
  --- ossp-pkg/ex/VERSION	30 Mar 2002 18:56:02 -0000	1.4
  +++ ossp-pkg/ex/VERSION	6 Jan 2003 15:32:27 -0000	1.5
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP ex (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP ex, Version 1.0.0 (30-Mar-2002)
  +  This is OSSP ex, Version 1.0.1 (06-Jan-2003)
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan  6 16:36:39 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4703476606; Mon,  6 Jan 2003 16:36:39 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ex/ index.wml ossp...
Message-Id: <20030106153639.4703476606@mail.ossp.org>
Date: Mon,  6 Jan 2003 16:36:39 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   06-Jan-2003 16:36:39
  Branch: HEAD                             Handle: 2003010615363701

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/ex     index.wml

  Log:
    release OSSP ex 1.0.1

  Summary:
    Revision    Changes     Path
    1.45        +1  -0      ossp-web/new/news.txt
    1.7         +2  -2      ossp-web/pkg/lib/ex/index.wml
    1.42        +1  -1      ossp-web/pkg/lib/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.44 -r1.45 news.txt
  --- ossp-web/new/news.txt	23 Dec 2002 19:37:36 -0000	1.44
  +++ ossp-web/new/news.txt	6 Jan 2003 15:36:37 -0000	1.45
  @@ -1,3 +1,4 @@
  +03-Jan-2003: Released L<OSSP ex> 1.0.1
   23-Dec-2002: Released L<OSSP mm> 1.2.2
   23-Dec-2002: Released T<OSSP shiela> 1.0.4
   23-Dec-2002: Released T<OSSP shiela> 1.0.3
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/ex/index.wml
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 index.wml
  --- ossp-web/pkg/lib/ex/index.wml	2 Oct 2002 12:44:36 -0000	1.6
  +++ ossp-web/pkg/lib/ex/index.wml	6 Jan 2003 15:36:38 -0000	1.7
  @@ -37,7 +37,7 @@
   
   <pkg_status
       name="ex" assign="rse"
  -    stable="1.0.0"   stable_date="30-Mar-2002"
  +    stable="1.0.1"   stable_date="06-Jan-2003"
       unstable="none"  unstable_date=""
   	done=100>
   
  @@ -48,7 +48,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/ex/
       directory=$(FTP_ROOT_DIR)/pkg/lib/ex/
       files="ex-*.tar.gz" 
  -	stable="ex-1.0.0.tar.gz" unstable="none">
  +	stable="ex-1.0.1.tar.gz" unstable="none">
   
   <h2>Donation</h2>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.41 -r1.42 index.wml
  --- ossp-web/pkg/lib/index.wml	23 Dec 2002 19:37:37 -0000	1.41
  +++ ossp-web/pkg/lib/index.wml	6 Jan 2003 15:36:38 -0000	1.42
  @@ -21,7 +21,7 @@
   			done=100 stable=1.2.2 unstable=none>
     <pkg_item name="ex" longname="OSSP ex" type="lib"
               desc="Exception Handling"
  -			done=100 stable=1.0.0 unstable=none>
  +			done=100 stable=1.0.1 unstable=none>
     <pkg_item name="sa" longname="OSSP sa" type="lib"
               desc="Socket Abstraction"
   			done=100 stable=1.0.2 unstable=none>
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan  6 16:44:18 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 98CE9764F0; Mon,  6 Jan 2003 16:44:18 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20030106154418.98CE9764F0@mail.ossp.org>
Date: Mon,  6 Jan 2003 16:44:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   06-Jan-2003 16:44:18
  Branch: HEAD                             Handle: 2003010615441602

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/sa     index.wml

  Log:
    release OSSP sa 1.0.3

  Summary:
    Revision    Changes     Path
    1.46        +2  -1      ossp-web/new/news.txt
    1.43        +1  -1      ossp-web/pkg/lib/index.wml
    1.11        +2  -2      ossp-web/pkg/lib/sa/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.45 -r1.46 news.txt
  --- ossp-web/new/news.txt	6 Jan 2003 15:36:37 -0000	1.45
  +++ ossp-web/new/news.txt	6 Jan 2003 15:44:16 -0000	1.46
  @@ -1,4 +1,5 @@
  -03-Jan-2003: Released L<OSSP ex> 1.0.1
  +06-Jan-2003: Released L<OSSP sa> 1.0.3
  +06-Jan-2003: Released L<OSSP ex> 1.0.1
   23-Dec-2002: Released L<OSSP mm> 1.2.2
   23-Dec-2002: Released T<OSSP shiela> 1.0.4
   23-Dec-2002: Released T<OSSP shiela> 1.0.3
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.42 -r1.43 index.wml
  --- ossp-web/pkg/lib/index.wml	6 Jan 2003 15:36:38 -0000	1.42
  +++ ossp-web/pkg/lib/index.wml	6 Jan 2003 15:44:17 -0000	1.43
  @@ -24,7 +24,7 @@
   			done=100 stable=1.0.1 unstable=none>
     <pkg_item name="sa" longname="OSSP sa" type="lib"
               desc="Socket Abstraction"
  -			done=100 stable=1.0.2 unstable=none>
  +			done=100 stable=1.0.3 unstable=none>
     <pkg_item name="fsl" longname="OSSP fsl" type="lib"
               desc="Faked/Flexible Syslog"
   			done=100 stable=1.0.6 unstable=none>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/sa/index.wml
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 index.wml
  --- ossp-web/pkg/lib/sa/index.wml	4 Dec 2002 14:00:48 -0000	1.10
  +++ ossp-web/pkg/lib/sa/index.wml	6 Jan 2003 15:44:18 -0000	1.11
  @@ -110,7 +110,7 @@
   
   <pkg_status
       name="sa" assign="rse"
  -    stable="1.0.2"    stable_date="04-Dec-2002"
  +    stable="1.0.3"    stable_date="06-Jan-2003"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -121,7 +121,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/sa/
       directory=$(FTP_ROOT_DIR)/pkg/lib/sa/
       files="sa-*.tar.gz" 
  -	stable="sa-1\.0\.2\.tar\.gz" unstable="sa-SNAP.*\.tar.gz">
  +	stable="sa-1\.0\.3\.tar\.gz" unstable="sa-SNAP.*\.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan  6 17:35:41 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 68DB3764F0; Mon,  6 Jan 2003 17:35:41 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ sio_null.c
Message-Id: <20030106163541.68DB3764F0@mail.ossp.org>
Date: Mon,  6 Jan 2003 17:35:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Jan-2003 17:35:41
  Branch: HEAD                             Handle: 2003010616354000

  Modified files:
    ossp-pkg/sio            sio_null.c

  Log:
    fix signature

  Summary:
    Revision    Changes     Path
    1.9         +1  -1      ossp-pkg/sio/sio_null.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_null.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 sio_null.c
  --- ossp-pkg/sio/sio_null.c	29 Nov 2002 13:00:18 -0000	1.8
  +++ ossp-pkg/sio/sio_null.c	6 Jan 2003 16:35:40 -0000	1.9
  @@ -98,7 +98,7 @@
   }
   
   static
  -sio_rc_t null_shutdown(sio_t *sio, al_t *al, void *u)
  +sio_rc_t null_shutdown(sio_t *sio, void *u)
   {
       return SIO_OK;
   }
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan  6 17:37:00 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 69AFF764F0; Mon,  6 Jan 2003 17:37:00 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ TODO
Message-Id: <20030106163700.69AFF764F0@mail.ossp.org>
Date: Mon,  6 Jan 2003 17:37:00 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Jan-2003 17:37:00
  Branch: HEAD                             Handle: 2003010616365900

  Modified files:
    ossp-pkg/sio            TODO

  Log:
    remember old issues

  Summary:
    Revision    Changes     Path
    1.2         +51 -0      ossp-pkg/sio/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/TODO
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 TODO
  --- ossp-pkg/sio/TODO	18 Dec 2002 14:58:29 -0000	1.1
  +++ ossp-pkg/sio/TODO	6 Jan 2003 16:36:59 -0000	1.2
  @@ -15,3 +15,54 @@
     CANDO
   
     -NONE-
  +
  +  FEEDBACK [rse]
  +
  +  o be consistent in argument order with other sio_stage_t based functions:
  +    < sio_rc_t    sio_create_stage   (sio_t  *sio, sio_module_t *siom, sio_stage_t **siosp);
  +    > sio_rc_t    sio_create_stage   (sio_t  *sio, sio_stage_t **siosp, sio_module_t *siom);
  +
  +  o merge sio_module.h into sio.h because although intended for module writers
  +    it has to be part of the official/public API. So it belongs to sio.h, too.
  +
  +  o the following sio_rc_t's have no ERR sub-prefix. Obviously because you treat
  +    them not really as "errors". Ok, but nevertheless they need a common
  +    sub-prefix because belong together into an own class of return codes.
  +    Suggestions: SIO_DO_XXX or SIO_HINT_XXX, etc.
  +    SIO_UPSTREAM   Invoke Upstream Stage
  +    SIO_DOWNSTREAM Invoke Downstream Stage
  +    SIO_XSTREAM    Invoke Crossstream Stage
  +    SIO_LOOP       Loop through current Stage
  +
  +  o sio.h haengt von al.h ab wegen References to al_t! 
  +    Suggestion: forward declaration in sio.h for al_t.
  +
  +  o sio_push: I expected a different operation by reading "push" here.
  +    Would perhaps sio_end, sio_finish, sio_close, sio_eof, sio_shutoff,
  +    etc not more intuitive here?
  +
  +  o sio_flag und sio_clearflag:
  +    The return value (int) is inconsistent with the others (sio_rc_t).
  +    My suggestion:  sa_rc_t sio_setflag(sio_t *sio, sio_flag_t fl);
  +                    sa_rc_t sio_getflag(sio_t *sio, sio_flag_t fl);
  +    And the return code for old TRUE is SA_OK and for FALSE is SA_ERR_NEG
  +    (negative) or something like this.
  +
  +  o sios->{open,close}{r,w}(): any reason why it's four functions
  +    and not just two? I intuitively expected just sios->{open,close}()
  +    with an additional parameter indicating read or write operation.
  + 
  +  o sio_configure_stage is unneccesary restrictive in passed data:
  +    < sio_rc_t    sio_configure_stage(sio_t  *sio, sio_stage_t *sios, void *o, void *v);
  +    > sio_rc_t    sio_configure_stage(sio_t  *sio, sio_stage_t *sios, void *v, ...);
  +    < sio_rc_t (*configure) (sio_t *, void *, void *, void *);
  +    > sio_rc_t (*configure) (sio_t *, void *, void *, va_list ap);
  +    This way the application can decide itself how it is configured
  +    and with which parameter stypes and with how much parameters.
  +  
  +  o Additionally to make sios->configure implementations easier and to
  +    reduce complexity and redundancy, I suggest to provide a
  +    sio_setparams() function which is similar to l2_util_setparams() in
  +    OSSP l2. This optionally provides the usually required convinience in
  +    writing stages.
  +
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan  6 17:41:22 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 69620764F0; Mon,  6 Jan 2003 17:41:22 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ ChangeLog Makefile.in README aclocal.m4 conf...
Message-Id: <20030106164122.69620764F0@mail.ossp.org>
Date: Mon,  6 Jan 2003 17:41:22 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Jan-2003 17:41:22
  Branch: HEAD                             Handle: 2003010616412100

  Modified files:
    ossp-pkg/fsl            ChangeLog Makefile.in README aclocal.m4
                            configure.ac fsl-config.in fsl.ac fsl.c fsl.pod

  Log:
    Adjust copyright messages to include new year 2003

  Summary:
    Revision    Changes     Path
    1.14        +5  -0      ossp-pkg/fsl/ChangeLog
    1.13        +3  -3      ossp-pkg/fsl/Makefile.in
    1.27        +3  -3      ossp-pkg/fsl/README
    1.3         +3  -3      ossp-pkg/fsl/aclocal.m4
    1.14        +6  -6      ossp-pkg/fsl/configure.ac
    1.4         +3  -3      ossp-pkg/fsl/fsl-config.in
    1.5         +3  -3      ossp-pkg/fsl/fsl.ac
    1.56        +3  -3      ossp-pkg/fsl/fsl.c
    1.27        +3  -3      ossp-pkg/fsl/fsl.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 ChangeLog
  --- ossp-pkg/fsl/ChangeLog	9 Nov 2002 18:30:29 -0000	1.13
  +++ ossp-pkg/fsl/ChangeLog	6 Jan 2003 16:41:21 -0000	1.14
  @@ -8,6 +8,11 @@
   
     CHANGELOG
   
  +  Changes between 1.0.6 and 1.0.7 (xx-Jan-2003)
  +
  +    *) Adjust copyright messages to include new year 2003.
  +       [Ralf S. Engelschall <rse@engelschall.com>]
  +
     Changes between 1.0.5 and 1.0.6 (09-Nov-2002)
   
       *) Upgraded to the latest OSSP l2 and OSSP cfg and this way fixed
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 Makefile.in
  --- ossp-pkg/fsl/Makefile.in	2 Aug 2002 11:42:17 -0000	1.12
  +++ ossp-pkg/fsl/Makefile.in	6 Jan 2003 16:41:21 -0000	1.13
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP fsl - Faking/Flexible Syslog Library
  -##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP fsl, a syslog(3) API faking library which
   ##  can be found at http://www.ossp.org/pkg/lib/fsl/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/README
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 README
  --- ossp-pkg/fsl/README	9 Nov 2002 18:36:05 -0000	1.26
  +++ ossp-pkg/fsl/README	6 Jan 2003 16:41:21 -0000	1.27
  @@ -20,9 +20,9 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   
     This file is part of OSSP fsl, a syslog(3) API faking library which
     can be found at http://www.ossp.org/pkg/lib/fsl/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 aclocal.m4
  --- ossp-pkg/fsl/aclocal.m4	27 Jul 2002 15:37:21 -0000	1.2
  +++ ossp-pkg/fsl/aclocal.m4	6 Jan 2003 16:41:21 -0000	1.3
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP fsl - Faking/Flexible Syslog Library
  -dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP fsl, a syslog(3) API faking library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/fsl/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/configure.ac
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 configure.ac
  --- ossp-pkg/fsl/configure.ac	9 Nov 2002 14:45:34 -0000	1.13
  +++ ossp-pkg/fsl/configure.ac	6 Jan 2003 16:41:21 -0000	1.14
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP fsl - Faking/Flexible Syslog Library
  -dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP fsl, a syslog(3) API faking library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/fsl/.
  @@ -34,9 +34,9 @@
   dnl #   announce our version
   V=`./shtool version -lc -dlong fsl_version.c`
   ./shtool echo -e "Configuring %BOSSP fsl%b (Faking/Flexible Syslog Library), Version %B${V}%b"
  -echo "Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>"
  -echo "Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>"
  -echo "Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>"
  +echo "Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>"
  +echo "Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>"
  +echo "Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>"
   
   AC_PROG_MAKE_SET
   AC_PROG_CC
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl-config.in
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 fsl-config.in
  --- ossp-pkg/fsl/fsl-config.in	27 Jul 2002 15:37:21 -0000	1.3
  +++ ossp-pkg/fsl/fsl-config.in	6 Jan 2003 16:41:21 -0000	1.4
  @@ -1,9 +1,9 @@
   #!/bin/sh
   ##
   ##  OSSP fsl - Faking/Flexible Syslog Library
  -##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP fsl, a syslog(3) API faking library which
   ##  can be found at http://www.ossp.org/pkg/lib/fsl/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl.ac
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 fsl.ac
  --- ossp-pkg/fsl/fsl.ac	1 Aug 2002 11:41:05 -0000	1.4
  +++ ossp-pkg/fsl/fsl.ac	6 Jan 2003 16:41:21 -0000	1.5
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP fsl - Faking/Flexible Syslog Library
  -dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP fsl, a syslog(3) API faking library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/fsl/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl.c
  ============================================================================
  $ cvs diff -u -r1.55 -r1.56 fsl.c
  --- ossp-pkg/fsl/fsl.c	12 Nov 2002 13:08:59 -0000	1.55
  +++ ossp-pkg/fsl/fsl.c	6 Jan 2003 16:41:21 -0000	1.56
  @@ -1,8 +1,8 @@
   /*
   **  OSSP fsl - Faking/Flexible Syslog Library
  -**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP fsl, a syslog(3) API faking library which
   **  can be found at http://www.ossp.org/pkg/lib/fsl/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl.pod
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 fsl.pod
  --- ossp-pkg/fsl/fsl.pod	2 Oct 2002 08:34:04 -0000	1.26
  +++ ossp-pkg/fsl/fsl.pod	6 Jan 2003 16:41:21 -0000	1.27
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP fsl - Faking/Flexible Syslog Library
  -##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP fsl, a syslog(3) API faking library which
   ##  can be found at http://www.ossp.org/pkg/lib/fsl/.
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan  6 19:54:08 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9C991764F5; Mon,  6 Jan 2003 19:54:07 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ config.h.in config.sub
Message-Id: <20030106185407.9C991764F5@mail.ossp.org>
Date: Mon,  6 Jan 2003 19:54:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Jan-2003 19:54:07
  Branch: HEAD                             Handle: 2003010618540600

  Removed files:
    ossp-pkg/sio            config.h.in config.sub

  Log:
    remove generated files from CVS

  Summary:
    Revision    Changes     Path
    1.2         +0  -70     ossp-pkg/sio/config.h.in
    1.2         +0  -1470   ossp-pkg/sio/config.sub
  ____________________________________________________________________________

  rm -f ossp-pkg/sio/config.h.in <<'@@ .'
  Index: ossp-pkg/sio/config.h.in
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/sio/config.sub <<'@@ .'
  Index: ossp-pkg/sio/config.sub
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan  6 20:04:59 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 10C25764F0; Mon,  6 Jan 2003 20:04:58 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ AUTHORS BRAINSTORM.txt ChangeLog INSTALL Mak...
Message-Id: <20030106190458.10C25764F0@mail.ossp.org>
Date: Mon,  6 Jan 2003 20:04:58 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Jan-2003 20:04:58
  Branch: HEAD                             Handle: 2003010619045600

  Modified files:
    ossp-pkg/sio            AUTHORS BRAINSTORM.txt ChangeLog INSTALL
                            Makefile.in NEWS README THANKS TODO aclocal.m4
                            configure.ac devtool devtool.func list.h
                            sio-config.in sio.c sio.h sio.pod sio_bio.c
                            sio_buffer.c sio_fd.c sio_hello.c sio_hole.c
                            sio_null.c sio_sa.c sio_sillymux.c sio_sio.c
                            sio_test.c sio_zlib.c

  Log:
    - consistently use standard OSSP copyright message everywhere
    - strip trailing whitespaces

  Summary:
    Revision    Changes     Path
    1.2         +4  -4      ossp-pkg/sio/AUTHORS
    1.4         +11 -11     ossp-pkg/sio/BRAINSTORM.txt
    1.2         +4  -4      ossp-pkg/sio/ChangeLog
    1.2         +4  -4      ossp-pkg/sio/INSTALL
    1.3         +5  -7      ossp-pkg/sio/Makefile.in
    1.2         +4  -4      ossp-pkg/sio/NEWS
    1.2         +10 -12     ossp-pkg/sio/README
    1.2         +4  -4      ossp-pkg/sio/THANKS
    1.3         +7  -7      ossp-pkg/sio/TODO
    1.2         +6  -8      ossp-pkg/sio/aclocal.m4
    1.3         +5  -7      ossp-pkg/sio/configure.ac
    1.2         +1  -1      ossp-pkg/sio/devtool
    1.2         +1  -1      ossp-pkg/sio/devtool.func
    1.7         +6  -8      ossp-pkg/sio/list.h
    1.2         +5  -7      ossp-pkg/sio/sio-config.in
    1.20        +6  -6      ossp-pkg/sio/sio.c
    1.10        +6  -6      ossp-pkg/sio/sio.h
    1.10        +7  -9      ossp-pkg/sio/sio.pod
    1.9         +31 -1      ossp-pkg/sio/sio_bio.c
    1.9         +31 -1      ossp-pkg/sio/sio_buffer.c
    1.13        +31 -1      ossp-pkg/sio/sio_fd.c
    1.13        +31 -1      ossp-pkg/sio/sio_hello.c
    1.8         +31 -1      ossp-pkg/sio/sio_hole.c
    1.10        +31 -1      ossp-pkg/sio/sio_null.c
    1.7         +31 -1      ossp-pkg/sio/sio_sa.c
    1.2         +31 -1      ossp-pkg/sio/sio_sillymux.c
    1.3         +31 -1      ossp-pkg/sio/sio_sio.c
    1.6         +30 -0      ossp-pkg/sio/sio_test.c
    1.5         +31 -1      ossp-pkg/sio/sio_zlib.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/AUTHORS
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 AUTHORS
  --- ossp-pkg/sio/AUTHORS	18 Dec 2002 14:58:29 -0000	1.1
  +++ ossp-pkg/sio/AUTHORS	6 Jan 2003 19:04:56 -0000	1.2
  @@ -1,8 +1,8 @@
  -   _        ___  ____ ____  ____        _       
  -  |_|_ _   / _ \/ ___/ ___||  _ \   ___(_) ___  
  -  _|_||_| | | | \___ \___ \| |_) | / __| |/ _ \ 
  +   _        ___  ____ ____  ____        _
  +  |_|_ _   / _ \/ ___/ ___||  _ \   ___(_) ___
  +  _|_||_| | | | \___ \___ \| |_) | / __| |/ _ \
    |_||_|_| | |_| |___) |__) |  __/  \__ \ | (_) |
  -  |_|_|_|  \___/|____/____/|_|     |___/_|\___/ 
  +  |_|_|_|  \___/|____/____/|_|     |___/_|\___/
   
     OSSP sio - Stream I/O
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/BRAINSTORM.txt
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 BRAINSTORM.txt
  --- ossp-pkg/sio/BRAINSTORM.txt	22 Oct 2002 13:01:35 -0000	1.3
  +++ ossp-pkg/sio/BRAINSTORM.txt	6 Jan 2003 19:04:56 -0000	1.4
  @@ -68,7 +68,7 @@
   
   Optimierungen:
   o mmap muss moeglich sein
  -o if target connector = socket & source connector = file => try to use sendfile(2) 
  +o if target connector = socket & source connector = file => try to use sendfile(2)
   o if target connector = file   & source connector = file => try to use mmap(2)
   o wenn I/O ohne filters dann no buffering oder nur wenn chunks zu klein
   o wann es geht writev() und readv() nutzen, um Buffers zu koppeln beim I/O
  @@ -83,7 +83,7 @@
   o man sollte meta-data (mtime, inode, etc.) von SIO connector rausfinden
     koennen und setzen koennen
   o Chunking muss moeglich sein (HTTP?)
  -o Read sollte lesen bis: 
  +o Read sollte lesen bis:
     - number of bytes read
     - found a char of class [a-z]
     - found a string "foo"
  @@ -95,7 +95,7 @@
   Architecture:
   o three types of objects (siehe SIO.fig):
     - plugs (Stecker/Anschluesse) for socket, file, mem, etc.
  -  - pipes (Rohre/Verbindungen) 
  +  - pipes (Rohre/Verbindungen)
     - pipelines (the Kombination von plugs und pipes zu einer Einheit)
   o buffered I/O: es gibt eine buffer-pipe, das ist alles
     unbuffered I/O ist also eine Pipleline wo kein buffer-pipe dabei ist
  @@ -156,13 +156,13 @@
     SIO_CHR | SIO_STR | SIO_BUF | SIO_FMT | SIO_STRVEC | SIO_BUFVEC
        type of objects: character, nul-terminated string or buffer+size or
        format string based
  -  SIO_MULT 
  +  SIO_MULT
        multiple objects are passed in call
  -  SIO_NULLEND 
  +  SIO_NULLEND
        whether size of vector is indicated by NULL or given
   
     SIO_COPY
  -     objects are copied to library 
  +     objects are copied to library
        (internal its SIO_GIFT after copy!)
     SIO_GIFT
        objects are gifted to library
  @@ -202,7 +202,7 @@
   IDEA:
     - SIO (Socket IO)
     - BIO (Buffered/Filtered I/O)
  -  - BA/BB (Buffer Aggregates, Bucket Brigades -- ACT) 
  +  - BA/BB (Buffer Aggregates, Bucket Brigades -- ACT)
   
   -----------------
   
  @@ -223,7 +223,7 @@
   typedef struct sio_st sio_t;
   
   /* I/O vector entry (similar to POSIX struct iovec) for sio_{read,write}v() */
  -typdef struct sio_iovec_st 
  +typdef struct sio_iovec_st
       char   *iov_base;   /* Base address. */
       size_t  iov_len;    /* Length. */
   } sio_iovec_t;
  @@ -261,8 +261,8 @@
   sio_t      *sio_dup      (sio_t *sio);
   int         sio_free     (sio_t *sio);
   
  -/* 
  - * I/O Operations 
  +/*
  + * I/O Operations
    */
   sio_size_t  sio_read     (sio_t *sio, void *buf, size_t bytes);
   sio_size_t  sio_write    (sio_t *sio, void *buf, size_t bytes);
  @@ -286,7 +286,7 @@
   sio_site_t  sio_vscanf   (sio_t *sio, const char *fmt, va_list ap);
   
   /*
  - * Buffering & Synchronization 
  + * Buffering & Synchronization
    */
   int         sio_sync     (sio_t *sio);
   int         sio_purge    (sio_t *sio);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ChangeLog
  --- ossp-pkg/sio/ChangeLog	18 Dec 2002 14:58:29 -0000	1.1
  +++ ossp-pkg/sio/ChangeLog	6 Jan 2003 19:04:56 -0000	1.2
  @@ -1,8 +1,8 @@
  -   _        ___  ____ ____  ____        _       
  -  |_|_ _   / _ \/ ___/ ___||  _ \   ___(_) ___  
  -  _|_||_| | | | \___ \___ \| |_) | / __| |/ _ \ 
  +   _        ___  ____ ____  ____        _
  +  |_|_ _   / _ \/ ___/ ___||  _ \   ___(_) ___
  +  _|_||_| | | | \___ \___ \| |_) | / __| |/ _ \
    |_||_|_| | |_| |___) |__) |  __/  \__ \ | (_) |
  -  |_|_|_|  \___/|____/____/|_|     |___/_|\___/ 
  +  |_|_|_|  \___/|____/____/|_|     |___/_|\___/
   
     OSSP sio - Stream I/O
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/INSTALL
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 INSTALL
  --- ossp-pkg/sio/INSTALL	18 Dec 2002 14:58:29 -0000	1.1
  +++ ossp-pkg/sio/INSTALL	6 Jan 2003 19:04:56 -0000	1.2
  @@ -1,8 +1,8 @@
  -   _        ___  ____ ____  ____        _       
  -  |_|_ _   / _ \/ ___/ ___||  _ \   ___(_) ___  
  -  _|_||_| | | | \___ \___ \| |_) | / __| |/ _ \ 
  +   _        ___  ____ ____  ____        _
  +  |_|_ _   / _ \/ ___/ ___||  _ \   ___(_) ___
  +  _|_||_| | | | \___ \___ \| |_) | / __| |/ _ \
    |_||_|_| | |_| |___) |__) |  __/  \__ \ | (_) |
  -  |_|_|_|  \___/|____/____/|_|     |___/_|\___/ 
  +  |_|_|_|  \___/|____/____/|_|     |___/_|\___/
   
     OSSP sio - Stream I/O
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 Makefile.in
  --- ossp-pkg/sio/Makefile.in	18 Dec 2002 15:54:15 -0000	1.2
  +++ ossp-pkg/sio/Makefile.in	6 Jan 2003 19:04:56 -0000	1.3
  @@ -1,13 +1,11 @@
   ##
   ##  OSSP sio - Stream I/O
  -##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -##  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  +##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
  -##  This file is part of OSSP sio, an abstract data type of
  -##  a pair of half-duplex data pipes which can be found at
  -##  http://www.ossp.org/pkg/lib/sio/.
  +##  This file is part of OSSP sio, a layered stream I/O library
  +##  which can be found at http://www.ossp.org/pkg/lib/sio/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/NEWS
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 NEWS
  --- ossp-pkg/sio/NEWS	18 Dec 2002 14:58:29 -0000	1.1
  +++ ossp-pkg/sio/NEWS	6 Jan 2003 19:04:56 -0000	1.2
  @@ -1,8 +1,8 @@
  -   _        ___  ____ ____  ____        _       
  -  |_|_ _   / _ \/ ___/ ___||  _ \   ___(_) ___  
  -  _|_||_| | | | \___ \___ \| |_) | / __| |/ _ \ 
  +   _        ___  ____ ____  ____        _
  +  |_|_ _   / _ \/ ___/ ___||  _ \   ___(_) ___
  +  _|_||_| | | | \___ \___ \| |_) | / __| |/ _ \
    |_||_|_| | |_| |___) |__) |  __/  \__ \ | (_) |
  -  |_|_|_|  \___/|____/____/|_|     |___/_|\___/ 
  +  |_|_|_|  \___/|____/____/|_|     |___/_|\___/
   
     OSSP sio - Stream I/O
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/README
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 README
  --- ossp-pkg/sio/README	18 Dec 2002 14:58:29 -0000	1.1
  +++ ossp-pkg/sio/README	6 Jan 2003 19:04:56 -0000	1.2
  @@ -1,8 +1,8 @@
  -   _        ___  ____ ____  ____        _       
  -  |_|_ _   / _ \/ ___/ ___||  _ \   ___(_) ___  
  -  _|_||_| | | | \___ \___ \| |_) | / __| |/ _ \ 
  +   _        ___  ____ ____  ____        _
  +  |_|_ _   / _ \/ ___/ ___||  _ \   ___(_) ___
  +  _|_||_| | | | \___ \___ \| |_) | / __| |/ _ \
    |_||_|_| | |_| |___) |__) |  __/  \__ \ | (_) |
  -  |_|_|_|  \___/|____/____/|_|     |___/_|\___/ 
  +  |_|_|_|  \___/|____/____/|_|     |___/_|\___/
   
     OSSP sio - Stream I/O
   
  @@ -12,14 +12,12 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  -
  -  This file is part of OSSP sio, an abstract data type of
  -  a pair of half-duplex data pipes which can be found at
  -  http://www.ossp.org/pkg/lib/sio/.
  +  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +
  +  This file is part of OSSP sio, a layered stream I/O library
  +  which can be found at http://www.ossp.org/pkg/lib/sio/.
   
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/THANKS
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 THANKS
  --- ossp-pkg/sio/THANKS	18 Dec 2002 14:58:29 -0000	1.1
  +++ ossp-pkg/sio/THANKS	6 Jan 2003 19:04:56 -0000	1.2
  @@ -1,8 +1,8 @@
  -   _        ___  ____ ____  ____        _       
  -  |_|_ _   / _ \/ ___/ ___||  _ \   ___(_) ___  
  -  _|_||_| | | | \___ \___ \| |_) | / __| |/ _ \ 
  +   _        ___  ____ ____  ____        _
  +  |_|_ _   / _ \/ ___/ ___||  _ \   ___(_) ___
  +  _|_||_| | | | \___ \___ \| |_) | / __| |/ _ \
    |_||_|_| | |_| |___) |__) |  __/  \__ \ | (_) |
  -  |_|_|_|  \___/|____/____/|_|     |___/_|\___/ 
  +  |_|_|_|  \___/|____/____/|_|     |___/_|\___/
   
     OSSP sio - Stream I/O
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/TODO
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 TODO
  --- ossp-pkg/sio/TODO	6 Jan 2003 16:36:59 -0000	1.2
  +++ ossp-pkg/sio/TODO	6 Jan 2003 19:04:56 -0000	1.3
  @@ -1,8 +1,8 @@
  -   _        ___  ____ ____  ____        _       
  -  |_|_ _   / _ \/ ___/ ___||  _ \   ___(_) ___  
  -  _|_||_| | | | \___ \___ \| |_) | / __| |/ _ \ 
  +   _        ___  ____ ____  ____        _
  +  |_|_ _   / _ \/ ___/ ___||  _ \   ___(_) ___
  +  _|_||_| | | | \___ \___ \| |_) | / __| |/ _ \
    |_||_|_| | |_| |___) |__) |  __/  \__ \ | (_) |
  -  |_|_|_|  \___/|____/____/|_|     |___/_|\___/ 
  +  |_|_|_|  \___/|____/____/|_|     |___/_|\___/
   
     OSSP sio - Stream I/O
   
  @@ -34,7 +34,7 @@
       SIO_XSTREAM    Invoke Crossstream Stage
       SIO_LOOP       Loop through current Stage
   
  -  o sio.h haengt von al.h ab wegen References to al_t! 
  +  o sio.h haengt von al.h ab wegen References to al_t!
       Suggestion: forward declaration in sio.h for al_t.
   
     o sio_push: I expected a different operation by reading "push" here.
  @@ -51,7 +51,7 @@
     o sios->{open,close}{r,w}(): any reason why it's four functions
       and not just two? I intuitively expected just sios->{open,close}()
       with an additional parameter indicating read or write operation.
  - 
  +
     o sio_configure_stage is unneccesary restrictive in passed data:
       < sio_rc_t    sio_configure_stage(sio_t  *sio, sio_stage_t *sios, void *o, void *v);
       > sio_rc_t    sio_configure_stage(sio_t  *sio, sio_stage_t *sios, void *v, ...);
  @@ -59,7 +59,7 @@
       > sio_rc_t (*configure) (sio_t *, void *, void *, va_list ap);
       This way the application can decide itself how it is configured
       and with which parameter stypes and with how much parameters.
  -  
  +
     o Additionally to make sios->configure implementations easier and to
       reduce complexity and redundancy, I suggest to provide a
       sio_setparams() function which is similar to l2_util_setparams() in
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 aclocal.m4
  --- ossp-pkg/sio/aclocal.m4	18 Dec 2002 14:58:29 -0000	1.1
  +++ ossp-pkg/sio/aclocal.m4	6 Jan 2003 19:04:56 -0000	1.2
  @@ -1,13 +1,11 @@
   dnl ##
  -dnl ##  sio - OSSP Assembly Line
  -dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -dnl ##  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  +dnl ##  OSSP sio - Stream I/O
  +dnl ##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##
  -dnl ##  This file is part of OSSP sio, an abstract data type of
  -dnl ##  a pair of half-duplex data pipes which can be found at
  -dnl ##  http://www.ossp.org/pkg/lib/sio/.
  +dnl ##  This file is part of OSSP sio, a layered stream I/O library
  +dnl ##  which can be found at http://www.ossp.org/pkg/lib/sio/.
   dnl ##
   dnl ##  Permission to use, copy, modify, and distribute this software for
   dnl ##  any purpose with or without fee is hereby granted, provided that
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/configure.ac
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 configure.ac
  --- ossp-pkg/sio/configure.ac	18 Dec 2002 15:41:50 -0000	1.2
  +++ ossp-pkg/sio/configure.ac	6 Jan 2003 19:04:56 -0000	1.3
  @@ -1,13 +1,11 @@
   dnl ##
   dnl ##  OSSP sio - Stream I/O
  -dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -dnl ##  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  +dnl ##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##
  -dnl ##  This file is part of OSSP sio, an abstract data type of
  -dnl ##  a pair of half-duplex data pipes which can be found at
  -dnl ##  http://www.ossp.org/pkg/lib/sio/.
  +dnl ##  This file is part of OSSP sio, a layered stream I/O library
  +dnl ##  which can be found at http://www.ossp.org/pkg/lib/sio/.
   dnl ##
   dnl ##  Permission to use, copy, modify, and distribute this software for
   dnl ##  any purpose with or without fee is hereby granted, provided that
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/devtool
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 devtool
  --- ossp-pkg/sio/devtool	18 Dec 2002 14:58:29 -0000	1.1
  +++ ossp-pkg/sio/devtool	6 Jan 2003 19:04:56 -0000	1.2
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  devtool -- Development Tool
  -##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   if [ $# -eq 0 ]; then
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/devtool.func
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.func
  --- ossp-pkg/sio/devtool.func	18 Dec 2002 14:58:29 -0000	1.1
  +++ ossp-pkg/sio/devtool.func	6 Jan 2003 19:04:56 -0000	1.2
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   devtool_require () {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/list.h
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 list.h
  --- ossp-pkg/sio/list.h	18 Dec 2002 14:58:29 -0000	1.6
  +++ ossp-pkg/sio/list.h	6 Jan 2003 19:04:56 -0000	1.7
  @@ -1,13 +1,11 @@
   /*
  -**  OSSP sio -- Stream I/O
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  +**  OSSP sio - Stream I/O
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
  -**  This file is part of OSSP sio, an abstract data type of
  -**  a pair of half-duplex data pipes which can be found at
  -**  http://www.ossp.org/pkg/lib/sio/.
  +**  This file is part of OSSP sio, a layered stream I/O library
  +**  which can be found at http://www.ossp.org/pkg/lib/sio/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio-config.in
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 sio-config.in
  --- ossp-pkg/sio/sio-config.in	18 Dec 2002 15:38:49 -0000	1.1
  +++ ossp-pkg/sio/sio-config.in	6 Jan 2003 19:04:56 -0000	1.2
  @@ -1,14 +1,12 @@
   #!/bin/sh
   ##
   ##  OSSP sio - Stream I/O
  -##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -##  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  +##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
  -##  This file is part of OSSP sio, an abstract data type of
  -##  a pair of half-duplex data pipes which can be found at
  -##  http://www.ossp.org/pkg/lib/sio/.
  +##  This file is part of OSSP sio, a layered stream I/O library
  +##  which can be found at http://www.ossp.org/pkg/lib/sio/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio.c
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 sio.c
  --- ossp-pkg/sio/sio.c	18 Dec 2002 15:51:35 -0000	1.19
  +++ ossp-pkg/sio/sio.c	6 Jan 2003 19:04:56 -0000	1.20
  @@ -1,11 +1,11 @@
   /*
  -**  OSSP sio -- stream I/O
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  +**  OSSP sio - Stream I/O
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
  -**  This file is part of OSSP sio, a library implementing layered I/O 
  +**  This file is part of OSSP sio, a layered stream I/O library
  +**  which can be found at http://www.ossp.org/pkg/lib/sio/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio.h
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 sio.h
  --- ossp-pkg/sio/sio.h	29 Nov 2002 13:03:40 -0000	1.9
  +++ ossp-pkg/sio/sio.h	6 Jan 2003 19:04:56 -0000	1.10
  @@ -1,11 +1,11 @@
   /*
  -**  OSSP sio -- Stream I/O
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  +**  OSSP sio - Stream I/O
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   **
  -**  This file is part of OSSP sio, a library implementing layered I/O
  +**  This file is part of OSSP sio, a layered stream I/O library
  +**  which can be found at http://www.ossp.org/pkg/lib/sio/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio.pod
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 sio.pod
  --- ossp-pkg/sio/sio.pod	18 Dec 2002 14:58:29 -0000	1.9
  +++ ossp-pkg/sio/sio.pod	6 Jan 2003 19:04:56 -0000	1.10
  @@ -1,13 +1,11 @@
   ##
   ##  OSSP sio - Stream I/O
  -##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  +##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
  -##  This file is part of OSSP sio, an abstract data type of
  -##  a pair of half-duplex data pipes which can be found at
  -##  http://www.ossp.org/pkg/lib/sio/.
  +##  This file is part of OSSP sio, a layered stream I/O library
  +##  which can be found at http://www.ossp.org/pkg/lib/sio/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  @@ -562,7 +560,7 @@
    sio_rc_t XXX_openr(sio_t *sio, al_t *al, void *u)
    {
        private_t *my = (private_t *)u;
  -     ... 
  +     ...
        /* cache reference to input assembly line */
        my->al_in = al;
        my->state = INIT;
  @@ -571,7 +569,7 @@
    sio_rc_t XXX_openw(sio_t *sio, al_t *al, void *u)
    {
        private_t *my = (private_t *)u;
  -     ... 
  +     ...
        /* cache reference to output assembly line */
        my->al_out = al;
        my->state = INIT;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_bio.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 sio_bio.c
  --- ossp-pkg/sio/sio_bio.c	18 Dec 2002 15:51:02 -0000	1.8
  +++ ossp-pkg/sio/sio_bio.c	6 Jan 2003 19:04:56 -0000	1.9
  @@ -1,3 +1,33 @@
  +/*
  +**  OSSP sio - Stream I/O
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**
  +**  This file is part of OSSP sio, a layered stream I/O library
  +**  which can be found at http://www.ossp.org/pkg/lib/sio/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  sio_bio.c: OpenSSL BIO stage
  +*/
  +
   #include <stddef.h>
   #include <stdlib.h>
   #include <string.h>
  @@ -189,7 +219,7 @@
   sio_rc_t siobio_init(sio_t *sio, void **up)
   {
       private_t *my;
  -    
  +
       my = (private_t *)malloc(sizeof(private_t));
       if (my == NULL)
           return SIO_ERR_MEM;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_buffer.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 sio_buffer.c
  --- ossp-pkg/sio/sio_buffer.c	29 Nov 2002 13:00:18 -0000	1.8
  +++ ossp-pkg/sio/sio_buffer.c	6 Jan 2003 19:04:56 -0000	1.9
  @@ -1,3 +1,33 @@
  +/*
  +**  OSSP sio - Stream I/O
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**
  +**  This file is part of OSSP sio, a layered stream I/O library
  +**  which can be found at http://www.ossp.org/pkg/lib/sio/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  sio_buffer.c: buffer stage
  +*/
  +
   #include <stddef.h>
   #include <stdlib.h>
   #include <string.h>
  @@ -21,7 +51,7 @@
   sio_rc_t buffer_init(sio_t *sio, void **up)
   {
       private_t *my;
  -    
  +
       my = (private_t *)malloc(sizeof(private_t));
       if (my == NULL)
           return SIO_ERR_MEM;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_fd.c
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 sio_fd.c
  --- ossp-pkg/sio/sio_fd.c	29 Nov 2002 14:50:21 -0000	1.12
  +++ ossp-pkg/sio/sio_fd.c	6 Jan 2003 19:04:56 -0000	1.13
  @@ -1,3 +1,33 @@
  +/*
  +**  OSSP sio - Stream I/O
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**
  +**  This file is part of OSSP sio, a layered stream I/O library
  +**  which can be found at http://www.ossp.org/pkg/lib/sio/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  sio_fd.h: filedescriptor stage
  +*/
  +
   #include <stddef.h>
   #include <stdlib.h>
   #include <string.h>
  @@ -32,7 +62,7 @@
   sio_rc_t fd_init(sio_t *sio, void **up)
   {
       private_t *my;
  -    
  +
       my = (private_t *)malloc(sizeof(private_t));
       if (my == NULL)
           return SIO_ERR_MEM;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_hello.c
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 sio_hello.c
  --- ossp-pkg/sio/sio_hello.c	29 Nov 2002 14:27:44 -0000	1.12
  +++ ossp-pkg/sio/sio_hello.c	6 Jan 2003 19:04:56 -0000	1.13
  @@ -1,3 +1,33 @@
  +/*
  +**  OSSP sio - Stream I/O
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**
  +**  This file is part of OSSP sio, a layered stream I/O library
  +**  which can be found at http://www.ossp.org/pkg/lib/sio/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  sio_hello.c: hello world stage
  +*/
  +
   #include <stdlib.h>
   #include <string.h>
   #include <assert.h>
  @@ -47,7 +77,7 @@
   sio_rc_t hello_init(sio_t *sio, void **up)
   {
       private_t *my;
  -    
  +
       my = (private_t *)malloc(sizeof(private_t));
       if (my == NULL)
           return SIO_ERR_MEM;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_hole.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 sio_hole.c
  --- ossp-pkg/sio/sio_hole.c	29 Nov 2002 13:00:18 -0000	1.7
  +++ ossp-pkg/sio/sio_hole.c	6 Jan 2003 19:04:56 -0000	1.8
  @@ -1,3 +1,33 @@
  +/*
  +**  OSSP sio - Stream I/O
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**
  +**  This file is part of OSSP sio, a layered stream I/O library
  +**  which can be found at http://www.ossp.org/pkg/lib/sio/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  sio_hole.c: black hole stage
  +*/
  +
   #include <stddef.h>
   #include <stdlib.h>
   
  @@ -17,7 +47,7 @@
   sio_rc_t hole_init(sio_t *sio, void **up)
   {
       private_t *my;
  -    
  +
       my = (private_t *)malloc(sizeof(private_t));
       if (my == NULL)
           return SIO_ERR_MEM;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_null.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 sio_null.c
  --- ossp-pkg/sio/sio_null.c	6 Jan 2003 16:35:40 -0000	1.9
  +++ ossp-pkg/sio/sio_null.c	6 Jan 2003 19:04:56 -0000	1.10
  @@ -1,3 +1,33 @@
  +/*
  +**  OSSP sio - Stream I/O
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**
  +**  This file is part of OSSP sio, a layered stream I/O library
  +**  which can be found at http://www.ossp.org/pkg/lib/sio/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  sio_null.c: /dev/null stage
  +*/
  +
   #include <stddef.h>
   #include <stdlib.h>
   
  @@ -19,7 +49,7 @@
   sio_rc_t null_init(sio_t *sio, void **up)
   {
       private_t *my;
  -    
  +
       my = (private_t *)malloc(sizeof(private_t));
       if (my == NULL)
           return SIO_ERR_MEM;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_sa.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 sio_sa.c
  --- ossp-pkg/sio/sio_sa.c	29 Nov 2002 13:00:18 -0000	1.6
  +++ ossp-pkg/sio/sio_sa.c	6 Jan 2003 19:04:56 -0000	1.7
  @@ -1,3 +1,33 @@
  +/*
  +**  OSSP sio - Stream I/O
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**
  +**  This file is part of OSSP sio, a layered stream I/O library
  +**  which can be found at http://www.ossp.org/pkg/lib/sio/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  sio_sa.c: OSSP sa socket I/O stage
  +*/
  +
   #include <stddef.h>
   #include <stdlib.h>
   #include <string.h>
  @@ -35,7 +65,7 @@
   sio_rc_t saw_init(sio_t *sio, void **up)
   {
       private_t *my;
  -    
  +
       my = (private_t *)malloc(sizeof(private_t));
       if (my == NULL)
           return SIO_ERR_MEM;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_sillymux.c
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 sio_sillymux.c
  --- ossp-pkg/sio/sio_sillymux.c	29 Nov 2002 15:45:25 -0000	1.1
  +++ ossp-pkg/sio/sio_sillymux.c	6 Jan 2003 19:04:56 -0000	1.2
  @@ -1,3 +1,33 @@
  +/*
  +**  OSSP sio - Stream I/O
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**
  +**  This file is part of OSSP sio, a layered stream I/O library
  +**  which can be found at http://www.ossp.org/pkg/lib/sio/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  sio_sillymux.c: silly multiplexing stage
  +*/
  +
   #include <stddef.h>
   #include <stdlib.h>
   #include <string.h>
  @@ -23,7 +53,7 @@
   sio_rc_t sillymux_init(sio_t *sio, void **up)
   {
       private_t *my;
  -    
  +
       my = (private_t *)malloc(sizeof(private_t));
       if (my == NULL)
           return SIO_ERR_MEM;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_sio.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 sio_sio.c
  --- ossp-pkg/sio/sio_sio.c	29 Nov 2002 13:00:19 -0000	1.2
  +++ ossp-pkg/sio/sio_sio.c	6 Jan 2003 19:04:56 -0000	1.3
  @@ -1,3 +1,33 @@
  +/*
  +**  OSSP sio - Stream I/O
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**
  +**  This file is part of OSSP sio, a layered stream I/O library
  +**  which can be found at http://www.ossp.org/pkg/lib/sio/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  sio_sio.c: OSSP sio to OSSP sio stage
  +*/
  +
   #include <stddef.h>
   #include <stdlib.h>
   #include <string.h>
  @@ -26,7 +56,7 @@
   sio_rc_t siosio_init(sio_t *sio, void **up)
   {
       private_t *my;
  -    
  +
       my = (private_t *)malloc(sizeof(private_t));
       if (my == NULL)
           return SIO_ERR_MEM;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_test.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 sio_test.c
  --- ossp-pkg/sio/sio_test.c	24 Nov 2002 19:36:48 -0000	1.5
  +++ ossp-pkg/sio/sio_test.c	6 Jan 2003 19:04:56 -0000	1.6
  @@ -1,3 +1,33 @@
  +/*
  +**  OSSP sio - Stream I/O
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**
  +**  This file is part of OSSP sio, a layered stream I/O library
  +**  which can be found at http://www.ossp.org/pkg/lib/sio/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  sio_test.c: test suite
  +*/
  +
   #include <stdio.h>
   
   #include "al.h"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_zlib.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 sio_zlib.c
  --- ossp-pkg/sio/sio_zlib.c	18 Dec 2002 14:58:29 -0000	1.4
  +++ ossp-pkg/sio/sio_zlib.c	6 Jan 2003 19:04:56 -0000	1.5
  @@ -1,3 +1,33 @@
  +/*
  +**  OSSP sio - Stream I/O
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**
  +**  This file is part of OSSP sio, a layered stream I/O library
  +**  which can be found at http://www.ossp.org/pkg/lib/sio/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  sio_zlib.c: zlib compression stage
  +*/
  +
   #include <stddef.h>
   #include <stdlib.h>
   #include <string.h>
  @@ -36,7 +66,7 @@
   sio_rc_t zlib_init(sio_t *sio, void **up)
   {
       private_t *my;
  -    
  +
       my = (private_t *)malloc(sizeof(private_t));
       if (my == NULL)
           return SIO_ERR_MEM;
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan  6 20:13:51 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 72679764F0; Mon,  6 Jan 2003 20:13:50 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str/ AUTHORS ChangeLog INSTALL LICENSE Makefile.i...
Message-Id: <20030106191350.72679764F0@mail.ossp.org>
Date: Mon,  6 Jan 2003 20:13:50 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Jan-2003 20:13:50
  Branch: HEAD                             Handle: 2003010619134701

  Modified files:
    ossp-pkg/str            AUTHORS ChangeLog INSTALL LICENSE Makefile.in
                            README THANKS TODO aclocal.m4 configure.ac devtool
                            devtool.conf devtool.func str-config.in
                            str-config.pod str.h.in str.pod str_base64.c
                            str_basic.c str_format.c str_hash.c str_memory.c
                            str_p.h str_parse.c str_pcre.c str_search.c
                            str_test.c str_token.c str_version.c

  Log:
    - adjust copyright messages for new year 2003
    - strip trailing whitespaces
    - consistently use OSSP ASCII-art
    - add standard devtool.conf stuff from OSSP sa

  Summary:
    Revision    Changes     Path
    1.8         +10 -10     ossp-pkg/str/AUTHORS
    1.42        +24 -15     ossp-pkg/str/ChangeLog
    1.3         +7  -7      ossp-pkg/str/INSTALL
    1.5         +2  -2      ossp-pkg/str/LICENSE
    1.46        +5  -5      ossp-pkg/str/Makefile.in
    1.20        +10 -10     ossp-pkg/str/README
    1.9         +8  -8      ossp-pkg/str/THANKS
    1.23        +9  -9      ossp-pkg/str/TODO
    1.7         +3  -3      ossp-pkg/str/aclocal.m4
    1.12        +5  -5      ossp-pkg/str/configure.ac
    1.3         +1  -1      ossp-pkg/str/devtool
    1.4         +36 -6      ossp-pkg/str/devtool.conf
    1.4         +1  -1      ossp-pkg/str/devtool.func
    1.8         +4  -4      ossp-pkg/str/str-config.in
    1.6         +3  -3      ossp-pkg/str/str-config.pod
    1.5         +4  -4      ossp-pkg/str/str.h.in
    1.35        +15 -15     ossp-pkg/str/str.pod
    1.7         +5  -5      ossp-pkg/str/str_base64.c
    1.12        +14 -14     ossp-pkg/str/str_basic.c
    1.28        +43 -43     ossp-pkg/str/str_format.c
    1.7         +14 -14     ossp-pkg/str/str_hash.c
    1.8         +19 -19     ossp-pkg/str/str_memory.c
    1.21        +6  -6      ossp-pkg/str/str_p.h
    1.20        +46 -46     ossp-pkg/str/str_parse.c
    1.8         +2  -2      ossp-pkg/str/str_pcre.c
    1.19        +12 -12     ossp-pkg/str/str_search.c
    1.26        +14 -14     ossp-pkg/str/str_test.c
    1.9         +19 -19     ossp-pkg/str/str_token.c
    1.15        +9  -9      ossp-pkg/str/str_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/AUTHORS
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 AUTHORS
  --- ossp-pkg/str/AUTHORS	1 Apr 2002 08:32:54 -0000	1.7
  +++ ossp-pkg/str/AUTHORS	6 Jan 2003 19:13:47 -0000	1.8
  @@ -1,15 +1,15 @@
  -   ____  _        
  -  / ___|| |_ _ __ 
  -  \___ \| __| '__|
  -   ___) | |_| |   
  -  |____/ \__|_|   
  -                
  -  OSSP str - String Handling                 
  +   _        ___  ____ ____  ____        _        
  +  |_|_ _   / _ \/ ___/ ___||  _ \   ___| |_ _ __ 
  +  _|_||_| | | | \___ \___ \| |_) | / __| __| '__|
  + |_||_|_| | |_| |___) |__) |  __/  \__ \ |_| |   
  +  |_|_|_|  \___/|____/____/|_|     |___/\__|_|   
  +
  +  OSSP str - String Handling
     ____________________________________________________________________
   
     AUTHORS
   
  -  This is a list of authors who have written or edited parts of 
  +  This is a list of authors who have written or edited parts of
     the Str sources.
   
     o  Str (as a whole)
  @@ -21,7 +21,7 @@
        Written by: Ralf S. Engelschall
        Parts   by: University of California Berkeley
        Edited  by: Ralf S. Engelschall
  -  
  +
     o  str_token.c:
        Written by: Ralf S. Engelschall
        Parts   by: William Deich <will@surya.caltech.edu>
  @@ -39,7 +39,7 @@
   
     o  str_base64.c:
        Written by: Ralf S. Engelschall
  -     Parts   by: Internet Software Consortium (ISC), 
  +     Parts   by: Internet Software Consortium (ISC),
                    International Business Machines (IBM)
        Edited  by: Ralf S. Engelschall
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.41 -r1.42 ChangeLog
  --- ossp-pkg/str/ChangeLog	1 Apr 2002 09:50:23 -0000	1.41
  +++ ossp-pkg/str/ChangeLog	6 Jan 2003 19:13:47 -0000	1.42
  @@ -1,14 +1,23 @@
  -  ____  _        
  - / ___|| |_ _ __ 
  - \___ \| __| '__|
  -  ___) | |_| |   
  - |____/ \__|_|   
  -                
  - OSSP str - String Handling                 
  +   _        ___  ____ ____  ____        _        
  +  |_|_ _   / _ \/ ___/ ___||  _ \   ___| |_ _ __ 
  +  _|_||_| | | | \___ \___ \| |_) | / __| __| '__|
  + |_||_|_| | |_| |___) |__) |  __/  \__ \ |_| |   
  +  |_|_|_|  \___/|____/____/|_|     |___/\__|_|   
  +
  + OSSP str - String Handling
    ____________________________________________________________________
   
    ChangeLog
   
  + Changes between 0.9.7 and 0.9.8 (01-Apr-2002 to xx-Jan-2003):
  +
  +   *) Upgraded to GNU autoconf 2.57, GNU libtool 1.4.3 and
  +      GNU shtool 1.6.2 build environment.
  +      [Ralf S. Engelschall]
  +
  +   *) Adjusted copyright messages for new year 2003.
  +      [Ralf S. Engelschall]
  +
    Changes between 0.9.6 and 0.9.7 (28-Dec-2001 to 01-Apr-2002):
   
      *) Use OSSP ts (Test Suite) sub-library for "make check".
  @@ -18,11 +27,11 @@
         location from engelschall.com to ossp.org.
         [Ralf S. Engelschall]
   
  -   *) Upgraded to GNU autoconf 2.53, GNU libtool 1.4.2 and 
  +   *) Upgraded to GNU autoconf 2.53, GNU libtool 1.4.2 and
         GNU shtool 1.6.0 build environment.
         [Ralf S. Engelschall]
   
  -   *) Fixed str_concat: it included the terminating NUL in copy 
  +   *) Fixed str_concat: it included the terminating NUL in copy
         and added a useless NUL.
         [Thomas Lotterer]
   
  @@ -47,13 +56,13 @@
         [Ralf S. Engelschall]
   
    Changes between 0.9.4 and 0.9.5 (14-Jul-2000 to 16-Aug-2001):
  -   
  -   *) Fix return code documentation of str_parse(): it -1 (error), 0 
  +
  +   *) Fix return code documentation of str_parse(): it -1 (error), 0
         (no matching) or +1 (matching) and not just TRUE or FALSE.
         Additionally fixed the str_parse() examples in the documentation.
         [Ralf S. Engelschall, Thomas Lotterer]
   
  -   *) Let str_base64(STR_BASE64_DECODE, ...) correctly honor 
  +   *) Let str_base64(STR_BASE64_DECODE, ...) correctly honor
         the specified maximum size of the input string.
         [Peter Simons <simons@cryp.to>]
   
  @@ -66,7 +75,7 @@
      *) Upgrade to GNU shtool 1.5.4.
         [Ralf S. Engelschall]
   
  -   *) Fixed handling of NaN and Inf values in str_format.c 
  +   *) Fixed handling of NaN and Inf values in str_format.c
         [Lukas Schroeder <lukas@edeal.de>]
   
      *) Fix unsigned vs. signed problem in str_span.c.
  @@ -84,7 +93,7 @@
         [Ed Griffiths <edgrif@sanger.ac.uk>, Ralf S. Engelschall]
   
      *) Avoid isupper() check in str_tolower() macro, because it
  -      breaks for things like str_tolower(*s++). 
  +      breaks for things like str_tolower(*s++).
         This fixes especially str_compare(...,...,STR_NOCASE).
         [Kai Poitschke <kai.poitschke@computer.org>]
   
  @@ -103,7 +112,7 @@
         [Ralf S. Engelschall]
   
    Changes between 0.9.1 and 0.9.2 (09-Jan-2000 to 04-Feb-2000):
  -   
  +
      *) Added three function variants with va_list support: str_parse_va,
         str_concat_va and str_format_va. Each str_xxx_va function is the same
         as the str_xxx function except that it can be called with a va_list
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/INSTALL
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 INSTALL
  --- ossp-pkg/str/INSTALL	1 Apr 2002 08:32:54 -0000	1.2
  +++ ossp-pkg/str/INSTALL	6 Jan 2003 19:13:47 -0000	1.3
  @@ -1,16 +1,16 @@
  -   ____  _        
  -  / ___|| |_ _ __ 
  +   ____  _
  +  / ___|| |_ _ __
     \___ \| __| '__|
  -   ___) | |_| |   
  -  |____/ \__|_|   
  -                
  -  OSSP str - String Handling                 
  +   ___) | |_| |
  +  |____/ \__|_|
  +
  +  OSSP str - String Handling
   
     INSTALL
   
     To install the Str library into /path/to/str/{bin,lib,include,man}/ perform
     the following steps in your shell:
  -      
  +
       $ ./configure --prefix=/path/to/str
       $ make
       $ make test
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/LICENSE
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 LICENSE
  --- ossp-pkg/str/LICENSE	1 Apr 2002 08:32:54 -0000	1.4
  +++ ossp-pkg/str/LICENSE	6 Jan 2003 19:13:47 -0000	1.5
  @@ -1,8 +1,8 @@
   
     OSSP str - String Handling
   
  -  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
   
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.45 -r1.46 Makefile.in
  --- ossp-pkg/str/Makefile.in	1 Apr 2002 09:03:49 -0000	1.45
  +++ ossp-pkg/str/Makefile.in	6 Jan 2003 19:13:47 -0000	1.46
  @@ -1,9 +1,9 @@
   ##
   ##  OSSP str - String Handling
  -##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
   ##
  -##  This file is part of OSSP str, a string handling and manipulation 
  +##  This file is part of OSSP str, a string handling and manipulation
   ##  library which can be found at http://www.ossp.org/pkg/lib/str/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
  @@ -100,7 +100,7 @@
   
   $(OBJS): Makefile
   
  -libstr.la: $(OBJS) 
  +libstr.la: $(OBJS)
   	$(LIBTOOL) --mode=link --quiet $(CC) -o libstr.la $(OBJS) -rpath $(libdir) \
   	-version-info `$(SHTOOL) version -l c -d libtool str_version.c`
   
  @@ -143,7 +143,7 @@
   	$(RM) str_test.o str_test
   	$(RM) libstr.la
   	$(RM) -r .libs
  -	
  +
   distclean: clean
   	$(RM) str-config
   	$(RM) config.h
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/README
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 README
  --- ossp-pkg/str/README	1 Apr 2002 09:12:13 -0000	1.19
  +++ ossp-pkg/str/README	6 Jan 2003 19:13:47 -0000	1.20
  @@ -1,11 +1,11 @@
  -   ____  _        
  -  / ___|| |_ _ __ 
  -  \___ \| __| '__|
  -   ___) | |_| |   
  -  |____/ \__|_|   
  -                
  -  OSSP str - String Handling                 
  -  Version 0.9.6 (13-Sep-2001)
  +   _        ___  ____ ____  ____        _        
  +  |_|_ _   / _ \/ ___/ ___||  _ \   ___| |_ _ __ 
  +  _|_||_| | | | \___ \___ \| |_) | / __| __| '__|
  + |_||_|_| | |_| |___) |__) |  __/  \__ \ |_| |   
  +  |_|_|_|  \___/|____/____/|_|     |___/\__|_|   
  +
  +  OSSP str - String Handling
  +  Version 0.9.8 (06-Jan-2003)
   
     ABSTRACT
   
  @@ -17,8 +17,8 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
   
     This product includes software developed by the University of
     California, Berkeley and its contributors. This product includes
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/THANKS
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 THANKS
  --- ossp-pkg/str/THANKS	1 Apr 2002 08:32:54 -0000	1.8
  +++ ossp-pkg/str/THANKS	6 Jan 2003 19:13:47 -0000	1.9
  @@ -1,12 +1,12 @@
  -   ____  _        
  -  / ___|| |_ _ __ 
  -  \___ \| __| '__|
  -   ___) | |_| |   
  -  |____/ \__|_|   
  -                
  -  OSSP str - String Handling                 
  +   _        ___  ____ ____  ____        _        
  +  |_|_ _   / _ \/ ___/ ___||  _ \   ___| |_ _ __ 
  +  _|_||_| | | | \___ \___ \| |_) | / __| __| '__|
  + |_||_|_| | |_| |___) |__) |  __/  \__ \ |_| |   
  +  |_|_|_|  \___/|____/____/|_|     |___/\__|_|   
  +
  +  OSSP str - String Handling
     ____________________________________________________________________
  -  
  +
     THANKS
   
     Credit has to be given to the following people who contributed ideas,
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/TODO
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 TODO
  --- ossp-pkg/str/TODO	1 Apr 2002 08:32:54 -0000	1.22
  +++ ossp-pkg/str/TODO	6 Jan 2003 19:13:47 -0000	1.23
  @@ -1,10 +1,10 @@
  -   ____  _        
  -  / ___|| |_ _ __ 
  -  \___ \| __| '__|
  -   ___) | |_| |   
  -  |____/ \__|_|   
  -                
  -  OSSP str - String Handling                 
  +   _        ___  ____ ____  ____        _        
  +  |_|_ _   / _ \/ ___/ ___||  _ \   ___| |_ _ __ 
  +  _|_||_| | | | \___ \___ \| |_) | / __| __| '__|
  + |_||_|_| | |_| |___) |__) |  __/  \__ \ |_| |   
  +  |_|_|_|  \___/|____/____/|_|     |___/\__|_|   
  +
  +  OSSP str - String Handling
   
     TODO
   
  @@ -12,7 +12,7 @@
     o look at ../strnatcmp
     o dynamic strings
     o aprintf() variant of str_format (see end of str_format.c!)
  -   
  +
     The following *have* to be done before 1.0.0:
   
     o perhaps a str_shave() or str_strip() function which
  @@ -40,7 +40,7 @@
     o str_locate could become a "mode" argument which
       indicates whether "s" is small or large and if
       it is small a (faster) brute force search could be done.
  -  o str_parse could support s/.../g or even m/.../g 
  +  o str_parse could support s/.../g or even m/.../g
     o one could add "vstr" support with own malloc
       Dean wrote: have you seen djb's stralloc stuff? it's part of qmail.
       it looks like a nice way to avoid thinking about lengths.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 aclocal.m4
  --- ossp-pkg/str/aclocal.m4	1 Apr 2002 08:32:54 -0000	1.6
  +++ ossp-pkg/str/aclocal.m4	6 Jan 2003 19:13:47 -0000	1.7
  @@ -25,8 +25,8 @@
   dnl ##  Support for Configuration Headers
   dnl ##
   dnl ##  configure.in:
  -dnl ##    AC_HEADLINE(<short-name>, <long-name>, 
  -dnl ##                <vers-var>, <vers-file>, 
  +dnl ##    AC_HEADLINE(<short-name>, <long-name>,
  +dnl ##                <vers-var>, <vers-file>,
   dnl ##                <copyright>)
   dnl ##
   
  @@ -48,7 +48,7 @@
       #   find out package version
       $3_STR="`$ac_shtool version -l c -d long $ac_srcdir/$4`"
       AC_SUBST($3_STR)
  - 
  +
       #   friendly header ;)
       if test ".$enable_headline" != .no; then
           echo "Configuring ${TB}$1${TN} ($2), Version ${TB}${$3_STR}${TN}"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/configure.ac
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 configure.ac
  --- ossp-pkg/str/configure.ac	1 Apr 2002 09:03:49 -0000	1.11
  +++ ossp-pkg/str/configure.ac	6 Jan 2003 19:13:47 -0000	1.12
  @@ -7,8 +7,8 @@
   AC_HEADLINE(dnl
   OSSP str, String Handling, dnl
   STR_VERSION, str_version.c, dnl
  -[Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  -Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org>])
  +[Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org>])
   AC_PLATFORM(PLATFORM)
   
   AC_PROG_MAKE_SET
  @@ -26,12 +26,12 @@
   AC_CHECK_SIZEOF(long long, 8)
   AC_CHECK_SIZEOF(void *, 4)
   
  -AC_HAVE_FUNCS(memmove memset memcmp memchr) 
  -AC_HAVE_FUNCS(isnan isinf) 
  +AC_HAVE_FUNCS(memmove memset memcmp memchr)
  +AC_HAVE_FUNCS(isnan isinf)
   
   AC_CHECK_FUNC(modf, , AC_CHECK_LIB(m, modf))
   
  -AC_CHECK_EXTLIB([Dmalloc], dmalloc, dmalloc_debug, dmalloc.h, 
  +AC_CHECK_EXTLIB([Dmalloc], dmalloc, dmalloc_debug, dmalloc.h,
                   [AC_DEFINE(WITH_DMALLOC, 1, [Define to 1 if building with Dmalloc])])
   
   AC_CONFIG_HEADERS(config.h)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/devtool
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 devtool
  --- ossp-pkg/str/devtool	2 Jan 2002 17:09:13 -0000	1.2
  +++ ossp-pkg/str/devtool	6 Jan 2003 19:13:47 -0000	1.3
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  devtool -- Development Tool
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   if [ $# -eq 0 ]; then
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.conf
  --- ossp-pkg/str/devtool.conf	28 Jul 2002 08:07:41 -0000	1.3
  +++ ossp-pkg/str/devtool.conf	6 Jan 2003 19:13:47 -0000	1.4
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.1 "1.6.*" echo install mkdir fixperm tarball version
  -    @autogen libtool  1.4.2 "1.4*"
  -    @autogen autoconf 2.53  "2.5[3-9]*"
  +    @autogen shtool   1.6.2 "1.6.*" echo install mkdir fixperm tarball version
  +    @autogen libtool  1.4.3 "1.4*"
  +    @autogen autoconf 2.57  "2.5[3-9]*"
   
   %autoclean
       @autoclean shtool
  @@ -21,11 +21,41 @@
   
   %version
       ./shtool version -l c -n "OSSP str" -p "str_" -e str_version.c
  +    V=`./shtool version -l c -d long str_version.c`
  +    sed -e "s/Version .*/Version $V/g" <README >README.n
  +    mv README.n README
   
   %dist
  -    make distclean >/dev/null 2>&1
  +    rm -f str-*.tar.gz
  +    ./devtool autoclean
  +    ./devtool autogen
  +    ./configure
  +    make clean all man
  +    make distclean
       ./shtool fixperm -v .
       V=`./shtool version -l c -d short str_version.c`
  -    ./shtool tarball -o str-${V}.tar.gz -d str-${V} -u ossp -g ossp \
  -                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool.conf' -c 'gzip --best' .
  +    ./shtool tarball -o str-${V}.tar.gz -d str-${V} -u ossp -g str \
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*' -c 'gzip --best' .
  +    ls -l str-${V}.tar.gz
  +    gunzip <str-${V}.tar.gz | tar tvf - | head -10; echo "[...]"
  +    gunzip <str-${V}.tar.gz | tar tvf - | tail -10
  +
  +%snap
  +    rm -f str-*.tar.gz
  +    ./devtool autoclean
  +    ./devtool autogen
  +    ./configure
  +    make clean all man
  +    make distclean
  +    ./shtool fixperm -v .
  +    D=`date '+%Y%m%d'`
  +    ./shtool tarball -o str-SNAP-${D}.tar.gz -d str-SNAP-${D} -u ossp -g str \
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*' -c 'gzip --best' .
  +    ls -l str-SNAP-${D}.tar.gz
  +    gunzip <str-SNAP-${D}.tar.gz | tar tvf - | head -10; echo "[...]"
  +    gunzip <str-SNAP-${D}.tar.gz | tar tvf - | tail -10
  +
  +%release
  +    echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/str/"
  +    scp str-*.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/str/
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/devtool.func
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.func
  --- ossp-pkg/str/devtool.func	14 Mar 2002 15:49:51 -0000	1.3
  +++ ossp-pkg/str/devtool.func	6 Jan 2003 19:13:47 -0000	1.4
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   devtool_require () {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str-config.in
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 str-config.in
  --- ossp-pkg/str/str-config.in	1 Apr 2002 09:15:37 -0000	1.7
  +++ ossp-pkg/str/str-config.in	6 Jan 2003 19:13:47 -0000	1.8
  @@ -1,10 +1,10 @@
   #!/bin/sh
   ##
   ##  OSSP str - String Handling
  -##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
   ##
  -##  This file is part of OSSP str, a string handling and manipulation 
  +##  This file is part of OSSP str, a string handling and manipulation
   ##  library which can be found at http://www.ossp.org/pkg/lib/str/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
  @@ -28,7 +28,7 @@
   ##  str-config.in: Configuration Tool
   ##
   
  -DIFS=' 	
  +DIFS=' 
   '
   
   prefix="@prefix@"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str-config.pod
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 str-config.pod
  --- ossp-pkg/str/str-config.pod	1 Apr 2002 08:32:54 -0000	1.5
  +++ ossp-pkg/str/str-config.pod	6 Jan 2003 19:13:47 -0000	1.6
  @@ -1,9 +1,9 @@
   ##
   ##  OSSP str - String Handling
  -##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
   ##
  -##  This file is part of OSSP str, a string handling and manipulation 
  +##  This file is part of OSSP str, a string handling and manipulation
   ##  library which can be found at http://www.ossp.org/pkg/lib/str/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str.h.in
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 str.h.in
  --- ossp-pkg/str/str.h.in	1 Apr 2002 08:32:54 -0000	1.4
  +++ ossp-pkg/str/str.h.in	6 Jan 2003 19:13:47 -0000	1.5
  @@ -1,9 +1,9 @@
   /*
   **  OSSP str - String Handling
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of OSSP str, a string handling and manipulation 
  +**  This file is part of OSSP str, a string handling and manipulation
   **  library which can be found at http://www.ossp.org/pkg/lib/str/.
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -96,7 +96,7 @@
   #define STR_TRIGRAPHS    (1 << 6)  /* enable ANSI C trigraph processing (implies STR_BACKSLASHESCAPE) */
   
   #define STR_HASH_DJBX33  (1 << 0)  /* Daniel J. Bernstein: Times 33 */
  -#define STR_HASH_BJDDJ   (1 << 1)  /* Bob Jenkins: Dr. Dobbs Journal */ 
  +#define STR_HASH_BJDDJ   (1 << 1)  /* Bob Jenkins: Dr. Dobbs Journal */
   #define STR_HASH_MACRC32 (1 << 2)  /* Mark Adler: Cyclic Redudancy Check 32 */
   
   #define STR_BASE64_ENCODE (1 << 0) /* encode: string -> base64 */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str.pod
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 str.pod
  --- ossp-pkg/str/str.pod	1 Apr 2002 09:15:37 -0000	1.34
  +++ ossp-pkg/str/str.pod	6 Jan 2003 19:13:47 -0000	1.35
  @@ -1,9 +1,9 @@
   ##
   ##  OSSP str - String Handling
  -##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
   ##
  -##  This file is part of OSSP str, a string handling and manipulation 
  +##  This file is part of OSSP str, a string handling and manipulation
   ##  library which can be found at http://www.ossp.org/pkg/lib/str/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
  @@ -177,7 +177,7 @@
   
   This functions searches for the (smaller) string I<t> inside (larger) string
   I<s>. If I<n> is not C<0>, the search is performed only inside the first I<n>
  -characters of I<s>. 
  +characters of I<s>.
   
   =item char *B<str_token>(char **I<s>, const char *I<delim>, const char *I<quote>, const char *I<comment>, int I<mode>);
   
  @@ -209,7 +209,7 @@
   used to quote another kind. If an unbalanced quote is found, the function
   silently act as if one had been placed at the end of the input string.  The
   I<delim> and I<quote> strings must be disjoint, i.e., they have to share
  -no characters. 
  +no characters.
   
   The I<mode> argument can be used to modify the processing of the string
   (default for I<mode> is C<0>): C<STR_STRIPQUOTES> forces I<quote>
  @@ -396,12 +396,12 @@
   
   =over 4
   
  -=item B<Matching:> `B<m> I<delim> I<regex> I<delim> I<flags>*': 
  +=item B<Matching:> `B<m> I<delim> I<regex> I<delim> I<flags>*':
   
   This matches I<s> against the Perl-style regular expression I<regex>
   under the control of zero or more I<flags> which control the parsing
   semantics. The stripped down I<pop> syntax `I<regex>' is equivalent to
  -`B<m/>I<regex>B</>'. 
  +`B<m/>I<regex>B</>'.
   
   For each grouping pair of parenthesis in I<regex>, the text in I<s>
   which was grouped by the parenthesis is extracted into new strings.
  @@ -409,7 +409,7 @@
   caller through following `B<char **>' arguments. The caller is required
   to free(3) them later.
   
  -=item B<Substitution:> `B<s> I<delim> I<regex> I<delim> I<subst> I<delim> I<flags>*': 
  +=item B<Substitution:> `B<s> I<delim> I<regex> I<delim> I<subst> I<delim> I<flags>*':
   
   This matches I<s> against the Perl-style regular expression I<regex>
   under the control of zero or more I<flags> which control the parsing
  @@ -688,12 +688,12 @@
   
    char *var = " foo \t " bar 'baz'" q'uu'x #comment";
    char *tok, *p;
  - p = var; 
  + p = var;
    while ((tok = str_token(p, ":", "\"'", "#", 0)) != NULL) {
  -     /* here we enter three times: 
  +     /* here we enter three times:
           1. tok = "foo"
  -        2. tok = " bar 'baz'" 
  -        3. tok = "quux" */ 
  +        2. tok = " bar 'baz'"
  +        3. tok = "quux" */
        ...
    }
   
  @@ -711,7 +711,7 @@
    char *cp, *v1, *v2;
    if (str_parse(var, "m/^(.+?):(.+)$/b", &cp, &v1, &v2) > 0) {
        ...
  -     /* now we have: 
  +     /* now we have:
           cp = "foo\0bar\0" and v1 and v2 pointing
           into it, i.e., v1 = "foo", v2 = "bar" */
        ...
  @@ -738,9 +738,9 @@
    char *cp;
    int n;
   
  - n = str_format(NULL, 0, "%s|%5s-%x-%04d", v0, v1, v2, v3); 
  + n = str_format(NULL, 0, "%s|%5s-%x-%04d", v0, v1, v2, v3);
    cp = malloc(n);
  - str_format(cp, n, "%s-%x-%04d", v1, v2, v3); 
  + str_format(cp, n, "%s-%x-%04d", v1, v2, v3);
    /* now we have cp = "abc...|  foo-DEAD-0042" */
    ...
    free(cp);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str_base64.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 str_base64.c
  --- ossp-pkg/str/str_base64.c	1 Apr 2002 08:32:54 -0000	1.6
  +++ ossp-pkg/str/str_base64.c	6 Jan 2003 19:13:47 -0000	1.7
  @@ -1,9 +1,9 @@
   /*
   **  OSSP str - String Handling
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of OSSP str, a string handling and manipulation 
  +**  This file is part of OSSP str, a string handling and manipulation
   **  library which can be found at http://www.ossp.org/pkg/lib/str/.
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -133,7 +133,7 @@
    *
    * Since all base64 input is an integral number of octets, only the
    * following cases can arise:
  - * 
  + *
    * (1) the final quantum of encoding input is an integral
    *     multiple of 24 bits; here, the final unit of encoded
    *     output will be an integral multiple of 4 characters
  @@ -227,7 +227,7 @@
   }
   
   /* decoding: base64 -> binary */
  -static int 
  +static int
   base64_decode(
       unsigned char *dst, str_size_t dstlen,
       char const *src, str_size_t srclen)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str_basic.c
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 str_basic.c
  --- ossp-pkg/str/str_basic.c	1 Apr 2002 08:32:54 -0000	1.11
  +++ ossp-pkg/str/str_basic.c	6 Jan 2003 19:13:47 -0000	1.12
  @@ -1,9 +1,9 @@
   /*
   **  OSSP str - String Handling
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of OSSP str, a string handling and manipulation 
  +**  This file is part of OSSP str, a string handling and manipulation
   **  library which can be found at http://www.ossp.org/pkg/lib/str/.
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -29,7 +29,7 @@
   
   #include "str_p.h"
   
  -/* 
  +/*
    * str_len -- determine length of string.
    * This is exactly equal to POSIX strlen(3).
    */
  @@ -58,12 +58,12 @@
   
       if (as == NULL || at == NULL)
           return NULL;
  -    if (n == 0) 
  +    if (n == 0)
           n = str_len(at);
       t = at;
       s = as;
       rv = as;
  -    if (s > t) { 
  +    if (s > t) {
           /* must go high to low */
           t += n - 1;
           s += n;
  @@ -82,9 +82,9 @@
       return rv;
   }
   
  -/* 
  +/*
    * str_dup -- duplicate a string.
  - * This is inspired by POSIX strdup(3), but provides 
  + * This is inspired by POSIX strdup(3), but provides
    * the ability to specify a maximum length.
    */
   char *str_dup(const char *s, str_size_t n)
  @@ -105,7 +105,7 @@
       return rv;
   }
   
  -/* 
  +/*
    * str_concat -- concatenate one or more strings.
    * This function allows one to concatenate an arbitrary number of
    * strings and is inspired by Apache's ap_pstrcat() function.
  @@ -156,9 +156,9 @@
       return rv;
   }
   
  -/* 
  +/*
    * str_splice -- splice one string into another.
  - * This is inspired by Perl's splice() function and can be used 
  + * This is inspired by Perl's splice() function and can be used
    * both for inplace movements, insert and cut-out operations.
    */
   char *str_splice(char *s, str_size_t off, str_size_t n, char *t, str_size_t m)
  @@ -199,7 +199,7 @@
       return s;
   }
   
  -/* 
  +/*
    * str_compare -- compare a two strings.
    * This is inspired by POSIX str[n][case]cmp(3), but
    * merges all functionality in a single function.
  @@ -218,7 +218,7 @@
           /* compare case insensitive */
           do {
               if (str_tolower(*s1) != str_tolower(*s2++)) {
  -                rv = ((str_tolower(*s1) - 
  +                rv = ((str_tolower(*s1) -
                          str_tolower(*(s2 - 1))) < 0 ? -1 : +1);
                   break;
               }
  @@ -231,7 +231,7 @@
           /* compare case sensitive */
           do {
               if (*s1 != *s2++) {
  -                rv = (((int)(*(const unsigned char *)s1) - 
  +                rv = (((int)(*(const unsigned char *)s1) -
                          (int)(*(const unsigned char *)(s2 - 1))) < 0 ? -1 : +1);
                   break;
               }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str_format.c
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 str_format.c
  --- ossp-pkg/str/str_format.c	1 Apr 2002 08:32:54 -0000	1.27
  +++ ossp-pkg/str/str_format.c	6 Jan 2003 19:13:47 -0000	1.28
  @@ -1,9 +1,9 @@
   /*
   **  OSSP str - String Handling
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of OSSP str, a string handling and manipulation 
  +**  This file is part of OSSP str, a string handling and manipulation
   **  library which can be found at http://www.ossp.org/pkg/lib/str/.
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -35,7 +35,7 @@
    *  are met:
    *
    *  1. Redistributions of source code must retain the above copyright
  - *     notice, this list of conditions and the following disclaimer. 
  + *     notice, this list of conditions and the following disclaimer.
    *
    *  2. Redistributions in binary form must reproduce the above copyright
    *     notice, this list of conditions and the following disclaimer in
  @@ -108,7 +108,7 @@
   #define FLOAT_DIGITS    6
   #define EXPONENT_LENGTH 10
   
  -/* NUM_BUF_SIZE is the size of the buffer used for arithmetic 
  +/* NUM_BUF_SIZE is the size of the buffer used for arithmetic
      conversions. This is a magic number; do NOT decrease it! */
   #define NUM_BUF_SIZE    512
   #define NDIG            80
  @@ -121,7 +121,7 @@
   #define isinf(d) (0)
   #endif
   
  -/* 
  +/*
    * Convert decimal number to its string representation. The number of
    * digits is specified by ndigit decpt is set to the position of the
    * decimal point sign is set to 0 for positive, 1 for negative. buf must
  @@ -136,10 +136,10 @@
   
   static char *
   str_cvt(
  -    double arg, 
  -    int ndigits, 
  -    int *decpt, 
  -    BOOL *sign, 
  +    double arg,
  +    int ndigits,
  +    int *decpt,
  +    BOOL *sign,
       int eflag,
       char *buf)
   {
  @@ -215,9 +215,9 @@
   
   static char *
   str_gcvt(
  -    double number, 
  -    int ndigit, 
  -    char *buf, 
  +    double number,
  +    int ndigit,
  +    char *buf,
       BOOL altform)
   {
       BOOL sign;
  @@ -299,7 +299,7 @@
   }
   
   /*
  - * Convert a string to decimal value 
  + * Convert a string to decimal value
    */
   #define NUM(c) ((c) - '0')
   #define STR_TO_DEC(str, num) {    \
  @@ -309,7 +309,7 @@
           num += NUM(*str++) ;      \
       }                             \
   }
  -     
  +
   /*
    * This macro does zero padding so that the precision requirement is
    * satisfied. The padding is done by adding '0's to the left of the
  @@ -324,7 +324,7 @@
       }
   
   /*
  - * This macro does padding. 
  + * This macro does padding.
    * The padding is done by printing the character ch.
    */
   #define PAD(width, len, ch) \
  @@ -358,9 +358,9 @@
    */
   static char *
   conv_10(
  -    register long_int num, 
  +    register long_int num,
       register BOOL is_unsigned,
  -    register BOOL *is_negative, 
  +    register BOOL *is_negative,
       char *buf_end,
       register int *len)
   {
  @@ -373,7 +373,7 @@
       }
       else {
           *is_negative = (num < 0);
  -        /* On a 2's complement machine, negating the most negative integer 
  +        /* On a 2's complement machine, negating the most negative integer
              results in a number that cannot be represented as a signed integer.
              Here is what we do to obtain the number's magnitude:
                   a. add 1 to the number
  @@ -400,9 +400,9 @@
   
   static char *
   conv_10_quad(
  -    quad_int num, 
  +    quad_int num,
       register BOOL is_unsigned,
  -    register BOOL *is_negative, 
  +    register BOOL *is_negative,
       char *buf_end,
       register int *len)
   {
  @@ -415,7 +415,7 @@
       }
       else {
           *is_negative = (num < 0);
  -        /* On a 2's complement machine, negating the most negative integer 
  +        /* On a 2's complement machine, negating the most negative integer
              result in a number that cannot be represented as a signed integer.
              Here is what we do to obtain the number's magnitude:
                   a. add 1 to the number
  @@ -447,12 +447,12 @@
    */
   static char *
   conv_fp(
  -    register char format, 
  +    register char format,
       register double num,
  -    BOOL add_dp, 
  -    int precision, 
  +    BOOL add_dp,
  +    int precision,
       BOOL *is_negative,
  -    char *buf, 
  +    char *buf,
       int *len)
   {
       register char *s = buf;
  @@ -508,7 +508,7 @@
           *s++ = format;          /* either e or E */
           decimal_point--;
           if (decimal_point != 0) {
  -            p = conv_10((long_int) decimal_point, FALSE, &exponent_is_negative, 
  +            p = conv_10((long_int) decimal_point, FALSE, &exponent_is_negative,
                           &temp[EXPONENT_LENGTH], &t_len);
               *s++ = exponent_is_negative ? '-' : '+';
               /* Make sure the exponent has at least 2 digits */
  @@ -545,10 +545,10 @@
   
   static char *
   conv_p2(
  -    register u_long_int num, 
  +    register u_long_int num,
       register int nbits,
  -    char format, 
  -    char *buf_end, 
  +    char format,
  +    char *buf_end,
       register int *len)
   {
       register int mask = (1 << nbits) - 1;
  @@ -565,10 +565,10 @@
   
   static char *
   conv_p2_quad(
  -    u_quad_int num, 
  +    u_quad_int num,
       register int nbits,
  -    char format, 
  -    char *buf_end, 
  +    char format,
  +    char *buf_end,
       register int *len)
   {
       register int mask = (1 << nbits) - 1;
  @@ -583,14 +583,14 @@
       return p;
   }
   
  -/* 
  +/*
    * str_vformat(), the generic printf-style formatting routine
    * and heart of this piece of source.
    */
  -int 
  +int
   str_vformat(
  -    str_vformat_t *vbuff, 
  -    const char *fmt, 
  +    str_vformat_t *vbuff,
  +    const char *fmt,
       va_list ap)
   {
       register char *sp;
  @@ -884,7 +884,7 @@
                       else {
                           /* use &num_buf[1], so that we have room for the sign */
                           s = conv_fp(*fmt, fp_num, alternate_form,
  -                                    (adjust_precision == FALSE) ? FLOAT_DIGITS : precision, 
  +                                    (adjust_precision == FALSE) ? FLOAT_DIGITS : precision,
                                       &is_negative, &num_buf[1], &s_len);
                           if (is_negative)
                               prefix_char = '-';
  @@ -959,7 +959,7 @@
                       break;
   
                   /*
  -                 * Pointer argument type. 
  +                 * Pointer argument type.
                    */
                   case 'p':
   #if defined(SIZEOF_LONG_LONG) && (SIZEOF_LONG_LONG == SIZEOF_VOID_P)
  @@ -992,8 +992,8 @@
                   default:
                       s = NULL;
                       if (vbuff->format != NULL) {
  -                        s = vbuff->format(vbuff, 
  -                            &prefix_char, &pad_char, &s_len, 
  +                        s = vbuff->format(vbuff,
  +                            &prefix_char, &pad_char, &s_len,
                               num_buf, NUM_BUF_SIZE, extinfo, *fmt, ap);
                       }
                       if (s == NULL) {
  @@ -1022,7 +1022,7 @@
               }
   
               /*
  -             * Print the string s. 
  +             * Print the string s.
                */
               for (i = s_len; i != 0; i--) {
                   INS_CHAR(*s, sp, bep, cc);
  @@ -1128,5 +1128,5 @@
           return NULL;
       return s;
   }
  -#endif 
  +#endif
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str_hash.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 str_hash.c
  --- ossp-pkg/str/str_hash.c	1 Apr 2002 08:32:54 -0000	1.6
  +++ ossp-pkg/str/str_hash.c	6 Jan 2003 19:13:47 -0000	1.7
  @@ -1,9 +1,9 @@
   /*
   **  OSSP str - String Handling
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of OSSP str, a string handling and manipulation 
  +**  This file is part of OSSP str, a string handling and manipulation
   **  library which can be found at http://www.ossp.org/pkg/lib/str/.
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -24,7 +24,7 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  str_hash.c: hashing functions 
  +**  str_hash.c: hashing functions
   */
   
   #include "str_p.h"
  @@ -45,7 +45,7 @@
    * even numbers are not useable at all. The remaining 128 odd numbers
    * (except for the number 1) work more or less all equally well. They
    * all distribute in an acceptable way and this way fill a hash table
  - * with an average percent of approx. 86%. 
  + * with an average percent of approx. 86%.
    *
    * If one compares the Chi/2 values resulting of the various
    * multipliers, the 33 not even has the best value. But the 33 and a
  @@ -58,9 +58,9 @@
    * few values should be preferred and seems to be also the reason why
    * Daniel J. Bernstein also preferred it.
    */
  -static unsigned long 
  +static unsigned long
   hash_djbx33(
  -    register unsigned char *key, 
  +    register unsigned char *key,
       register str_size_t len)
   {
       register unsigned long hash = 5381;
  @@ -103,7 +103,7 @@
    * hash functions (i.e. same function signature). It can be definitely
    * recommended as a very good general purpose hashing function.
    */
  -static unsigned long 
  +static unsigned long
   hash_bjddj(
       register unsigned char *k,
       register str_size_t length)
  @@ -140,7 +140,7 @@
   
       /* handle the last 11 bytes */
       c += length;
  -    switch(len) { 
  +    switch(len) {
           /* all the case statements fall through */
           case 11: c += ((ub4)k[10]<<24);
           case 10: c += ((ub4)k[ 9]<<16);
  @@ -176,7 +176,7 @@
    * hash function. It should be used if good distribution is more
    * important than high performance.
    */
  -static unsigned long 
  +static unsigned long
   hash_macrc32(
       register unsigned char *key,
       register str_size_t len)
  @@ -237,7 +237,7 @@
           0x2d02ef8dL
       };
       register unsigned long hash;
  -    
  +
       /* compute hash with the help of the table */
       hash = 0xffffffff;
       while (len-- > 0)
  @@ -251,10 +251,10 @@
   /*
    * The API function.
    */
  -unsigned long 
  +unsigned long
   str_hash(
  -    const char *s, 
  -    str_size_t n, 
  +    const char *s,
  +    str_size_t n,
       int mode)
   {
       unsigned long hash;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str_memory.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 str_memory.c
  --- ossp-pkg/str/str_memory.c	1 Apr 2002 08:32:54 -0000	1.7
  +++ ossp-pkg/str/str_memory.c	6 Jan 2003 19:13:47 -0000	1.8
  @@ -1,9 +1,9 @@
   /*
   **  OSSP str - String Handling
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of OSSP str, a string handling and manipulation 
  +**  This file is part of OSSP str, a string handling and manipulation
   **  library which can be found at http://www.ossp.org/pkg/lib/str/.
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -35,7 +35,7 @@
   
   static void *
   _str_mem_dup(
  -    void *mem, 
  +    void *mem,
       size_t bytes)
   {
       void *dmem;
  @@ -53,8 +53,8 @@
   #else
   static void *
   _str_mem_set(
  -    void *dst0, 
  -    int c0, 
  +    void *dst0,
  +    int c0,
       size_t bytes)
   {
       register size_t t;
  @@ -75,7 +75,7 @@
       }
   
       /* fill the whole stamping word */
  -    if ((c = (unsigned char)c0) != 0) { 
  +    if ((c = (unsigned char)c0) != 0) {
           c = c | (c << 8);
   #if (SIZEOF_INT > 2)
           c = c | (c << 16);
  @@ -118,8 +118,8 @@
   #else
   static void *
   _str_mem_move(
  -    void *dst, 
  -    const void *src, 
  +    void *dst,
  +    const void *src,
       size_t bytes)
   {
       register unsigned char *dst_p;
  @@ -129,7 +129,7 @@
           return NULL;
       src_p = src;
       dst_p = dst;
  -    if (dst > src) { 
  +    if (dst > src) {
           /* must go high to low */
           src_p += bytes;
           dst_p += bytes;
  @@ -147,7 +147,7 @@
   
   static void *
   _str_mem_rev(
  -    void *src, 
  +    void *src,
       size_t bytes)
   {
       register unsigned char *p1;
  @@ -166,8 +166,8 @@
   #else
   static void *
   _str_mem_char(
  -    const void *src, 
  -    int c, 
  +    const void *src,
  +    int c,
       size_t bytes)
   {
       register const unsigned char *cp;
  @@ -185,13 +185,13 @@
   
   static void *
   _str_mem_mem(
  -    const void *haystack, size_t haystack_len, 
  +    const void *haystack, size_t haystack_len,
       const void *needle,   size_t needle_len)
   {
       register const char *begin;
       register const char *last_possible;
  -    
  -    if (needle_len == 0) 
  +
  +    if (needle_len == 0)
           /* The first occurrence of the empty string is deemed to occur at
              the end of the string. */
           return (void *)&((const char *)haystack)[haystack_len - 1];
  @@ -209,13 +209,13 @@
   #else
   static int
   _str_mem_cmp(
  -    const void *src1, 
  -    const void *src2, 
  +    const void *src1,
  +    const void *src2,
       size_t bytes)
   {
       register const unsigned char *cp1;
       register const unsigned char *cp2;
  -   
  +
       if (bytes != 0) {
           cp1 = src1;
           cp2 = src2;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str_p.h
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 str_p.h
  --- ossp-pkg/str/str_p.h	1 Apr 2002 09:03:49 -0000	1.20
  +++ ossp-pkg/str/str_p.h	6 Jan 2003 19:13:47 -0000	1.21
  @@ -1,9 +1,9 @@
   /*
   **  OSSP str - String Handling
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of OSSP str, a string handling and manipulation 
  +**  This file is part of OSSP str, a string handling and manipulation
   **  library which can be found at http://www.ossp.org/pkg/lib/str/.
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -67,9 +67,9 @@
   struct str_vformat_st {
       char *curpos;
       char *endpos;
  -    union { 
  -        int i; long l; 
  -        double d; void *p; 
  +    union {
  +        int i; long l;
  +        double d; void *p;
       } data[6];
       int (*flush)(struct str_vformat_st *);
       char *(*format)(
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str_parse.c
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 str_parse.c
  --- ossp-pkg/str/str_parse.c	1 Apr 2002 08:32:54 -0000	1.19
  +++ ossp-pkg/str/str_parse.c	6 Jan 2003 19:13:47 -0000	1.20
  @@ -1,9 +1,9 @@
   /*
   **  OSSP str - String Handling
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of OSSP str, a string handling and manipulation 
  +**  This file is part of OSSP str, a string handling and manipulation
   **  library which can be found at http://www.ossp.org/pkg/lib/str/.
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -24,18 +24,18 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  str_parse.c: parsing functions 
  +**  str_parse.c: parsing functions
   */
   
   #include "str_p.h"
   
   /* compile a regular expression pattern from string into internal format */
  -static int 
  +static int
   pattern_compile(
  -    const char *ptr, 
  -    int len, 
  -    int opt, 
  -    pcre **p_pcre, 
  +    const char *ptr,
  +    int len,
  +    int opt,
  +    pcre **p_pcre,
       pcre_extra **p_pcre_extra)
   {
       const char *err_str;
  @@ -99,7 +99,7 @@
   static int hash_initialized = FALSE;
   
   /* initialize cache hash table */
  -static void 
  +static void
   hash_init(void)
   {
       int i;
  @@ -109,7 +109,7 @@
   }
   
   /* destroy cache hash table */
  -static void 
  +static void
   hash_destroy(void)
   {
       int i;
  @@ -130,9 +130,9 @@
   }
   
   /* the hashing function: a popular `times 33' hash */
  -static unsigned int 
  +static unsigned int
   hash_func(
  -    const char *key, 
  +    const char *key,
       int keylen)
   {
       unsigned int h;
  @@ -145,11 +145,11 @@
   }
   
   /* cache a pattern */
  -static void 
  +static void
   pattern_cache(
  -    const char *key, 
  -    int keylen, 
  -    pcre *p_pcre, 
  +    const char *key,
  +    int keylen,
  +    pcre *p_pcre,
       pcre_extra *p_pcre_extra)
   {
       int h;
  @@ -179,11 +179,11 @@
   }
   
   /* lookup a pattern */
  -static void 
  +static void
   pattern_lookup(
  -    const char *key, 
  -    int keylen, 
  -    pcre **p_pcre, 
  +    const char *key,
  +    int keylen,
  +    pcre **p_pcre,
       pcre_extra **p_pcre_extra)
   {
       int h;
  @@ -206,32 +206,32 @@
       return;
   }
   
  -static int 
  +static int
   str_parse_flush_nop(
       str_vformat_t *sf)
  -{   
  +{
       sf->data[2].i = sf->data[2].i + sf->data[1].i;
       sf->curpos = (char *)sf->data[0].p;
       return 0;
  -}   
  +}
   
  -static int 
  +static int
   str_parse_flush_str(
       str_vformat_t *sf)
  -{   
  +{
       return -1;
  -}   
  +}
   
   static char *
   str_parse_format(
       str_vformat_t *sf,
       char *cpPrefix,
  -    char *cpPad, 
  +    char *cpPad,
       int *ipStrLen,
  -    char *cpBuf, 
  -    int nBufLen, 
  -    char *cpExtinfo, 
  -    int cFmt, 
  +    char *cpBuf,
  +    int nBufLen,
  +    char *cpExtinfo,
  +    int cFmt,
       va_list ap)
   {
       char *pStr;
  @@ -239,7 +239,7 @@
       int *cap_vec;
       int cap_num;
       char *string;
  -   
  +
       pStr = NULL;
       if (cFmt == 'R') {
           if (cpExtinfo != NULL && str_isdigit(cpExtinfo[0]) && cpExtinfo[1] == NUL) {
  @@ -273,7 +273,7 @@
   {
       pcre *p_pcre = NULL;
       pcre_extra *p_pcre_extra = NULL;
  -    const char *match_ptr; 
  +    const char *match_ptr;
       int match_len;
       int match_opt;
       int match_once;
  @@ -313,13 +313,13 @@
           return 0;
       }
   
  -    /* 
  -     * Check input parameters 
  +    /*
  +     * Check input parameters
        */
       if (string == NULL || pattern == NULL)
           return -1;
   
  -    /* 
  +    /*
        * Parse pattern
        */
       match_ptr     = NULL;
  @@ -341,7 +341,7 @@
       if (!ismop)
           if (*pattern == 's' && str_len(pattern) >= 4)
               if ((cp = str_span(pattern, 0, "imsxo", STR_RIGHT)) > pattern+1)
  -                if ((cb[0] = *cp, cb[1] = NUL, 
  +                if ((cb[0] = *cp, cb[1] = NUL,
                        cp2 = str_span(pattern, cp-pattern, cb, STR_RIGHT|STR_COMPLEMENT)) > pattern+1)
                       if (*(pattern+1) == *cp && *(pattern+1) == *cp2)
                           issop = TRUE;
  @@ -390,7 +390,7 @@
           ismop = TRUE;
       }
   
  -    /* 
  +    /*
        * Compile pattern into internal PCRE structure
        */
       if (match_once) {
  @@ -409,8 +409,8 @@
               return -1;
       }
   
  -    /* 
  -     * Allocate storage for offset table of captured substrings 
  +    /*
  +     * Allocate storage for offset table of captured substrings
        */
       cap_vec = NULL;
       cap_len = 0;
  @@ -426,7 +426,7 @@
           }
       }
   
  -    /* 
  +    /*
        * Perform the matching operation
        */
       n = pcre_exec(p_pcre, p_pcre_extra, string, str_len(string), 0, 0, cap_vec, cap_len);
  @@ -446,8 +446,8 @@
        * Create either matching or substitution result
        */
       if (ismop && cap_num > 0) {
  -        /* 
  -         * extract captured substrings into caller provided pointer variables 
  +        /*
  +         * extract captured substrings into caller provided pointer variables
            */
           if (match_1resbuf) {
               /* use a single result buffer */
  @@ -507,7 +507,7 @@
           }
       }
       else if (issop) {
  -        /* 
  +        /*
            * create a substitutional string with optional expansions
            */
   
  @@ -553,7 +553,7 @@
           /* remove output argument from varargs */
           cpp = va_arg(ap, char **);
   
  -        /* calculate output buffer requirement */ 
  +        /* calculate output buffer requirement */
           sf.curpos    = buf2;
           sf.endpos    = buf2 + sizeof(buf2) - 1;
           sf.flush     = str_parse_flush_nop;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str_pcre.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 str_pcre.c
  --- ossp-pkg/str/str_pcre.c	11 Jan 2002 10:27:09 -0000	1.7
  +++ ossp-pkg/str/str_pcre.c	6 Jan 2003 19:13:47 -0000	1.8
  @@ -1,4 +1,4 @@
  -/* 
  +/*
    *  Perl Compatible Regular Expression (PCRE) Library
    *  Copyright (c) 1997-2001 Philip Hazel <ph10@cam.ac.uk>
    *  Copyright (c) 1997-2001 University of Cambridge
  @@ -12,7 +12,7 @@
    *  for this version.
    */
   
  -/* 
  +/*
      This is a library of functions to support regular expressions whose syntax
      and semantics are as close as possible to those of the Perl 5 language. See
      the file Tech.Notes for some information on the internals.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str_search.c
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 str_search.c
  --- ossp-pkg/str/str_search.c	1 Apr 2002 08:32:54 -0000	1.18
  +++ ossp-pkg/str/str_search.c	6 Jan 2003 19:13:48 -0000	1.19
  @@ -1,9 +1,9 @@
   /*
   **  OSSP str - String Handling
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of OSSP str, a string handling and manipulation 
  +**  This file is part of OSSP str, a string handling and manipulation
   **  library which can be found at http://www.ossp.org/pkg/lib/str/.
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -28,7 +28,7 @@
   */
   
   #include "str_p.h"
  - 
  +
   /*
    * str_span -- span over a set of character in a string.
    * This is a spanning function inspired by POSIX strchr(3) and
  @@ -53,7 +53,7 @@
       rv = NULL;
       if (!(mode & STR_RIGHT) && !(mode & STR_COMPLEMENT)) {
           /* span from left to right while chars are in charset */
  -        sp = s; 
  +        sp = s;
           l1:
           sc = *sp++; n--;
           if (sc != NUL && n >= 0) {
  @@ -81,7 +81,7 @@
       }
       else if (!(mode & STR_RIGHT) && (mode & STR_COMPLEMENT)) {
           /* span from left to right while chars are NOT in charset */
  -        sp = s; 
  +        sp = s;
           l3a:
           sc = *sp++; n--;
           if (sc != NUL && n >= 0) {
  @@ -147,24 +147,24 @@
       if (*x == NUL)
           return (char *)y;
   
  -    /* 
  +    /*
        * Preprocessing
        */
   
       /* determine length of strings */
       str_ilen(m, x);
  -    if (n == 0) 
  +    if (n == 0)
           str_ilen(n, y);
   
       /* fill whole bad char skip array */
  -    for (i = 0; i < (sizeof(qs_bc)/sizeof(int)); i++) 
  +    for (i = 0; i < (sizeof(qs_bc)/sizeof(int)); i++)
           qs_bc[(int)i] = m+1;
   
       /* override positions related to pattern */
  -    for (i = 0; i < m; i++) 
  +    for (i = 0; i < m; i++)
           qs_bc[(int)*(x+i)] = m-i;
  -                          
  -    /* 
  +
  +    /*
        * Searching
        */
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str_test.c
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 str_test.c
  --- ossp-pkg/str/str_test.c	1 Apr 2002 09:03:49 -0000	1.25
  +++ ossp-pkg/str/str_test.c	6 Jan 2003 19:13:48 -0000	1.26
  @@ -1,9 +1,9 @@
   /*
   **  OSSP str - String Handling
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of OSSP str, a string handling and manipulation 
  +**  This file is part of OSSP str, a string handling and manipulation
   **  library which can be found at http://www.ossp.org/pkg/lib/str/.
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -191,7 +191,7 @@
   }
   
   TS_TEST(test_tokenize)
  -{  
  +{
       char *cp;
       char *cp2;
       char *cp3;
  @@ -266,20 +266,20 @@
               rv = str_parse(test2_tab[i].s, test2_tab[i].p, &r1, &r2, &r3, &r4);
           }
           if (rv != test2_tab[i].rv ||
  -            ((r1 == NULL && test2_tab[i].r1 != NULL) || 
  -             (r1 != NULL && test2_tab[i].r1 == NULL) || 
  +            ((r1 == NULL && test2_tab[i].r1 != NULL) ||
  +             (r1 != NULL && test2_tab[i].r1 == NULL) ||
                (r1 != NULL && test2_tab[i].r1 != NULL && strcmp(r1, test2_tab[i].r1) != 0)) ||
  -            ((r2 == NULL && test2_tab[i].r2 != NULL) || 
  -             (r2 != NULL && test2_tab[i].r2 == NULL) || 
  +            ((r2 == NULL && test2_tab[i].r2 != NULL) ||
  +             (r2 != NULL && test2_tab[i].r2 == NULL) ||
                (r2 != NULL && test2_tab[i].r2 != NULL && strcmp(r2, test2_tab[i].r2) != 0)) ||
  -            ((r3 == NULL && test2_tab[i].r3 != NULL) || 
  -             (r3 != NULL && test2_tab[i].r3 == NULL) || 
  +            ((r3 == NULL && test2_tab[i].r3 != NULL) ||
  +             (r3 != NULL && test2_tab[i].r3 == NULL) ||
                (r3 != NULL && test2_tab[i].r3 != NULL && strcmp(r3, test2_tab[i].r3) != 0)) ||
  -            ((r4 == NULL && test2_tab[i].r4 != NULL) || 
  -             (r4 != NULL && test2_tab[i].r4 == NULL) || 
  +            ((r4 == NULL && test2_tab[i].r4 != NULL) ||
  +             (r4 != NULL && test2_tab[i].r4 == NULL) ||
                (r4 != NULL && test2_tab[i].r4 != NULL && strcmp(r4, test2_tab[i].r4) != 0))) {
               ts_test_fail(TS_CTX, "expected result: %d + <%s><%s><%s><%s>",
  -                         test2_tab[i].rv, 
  +                         test2_tab[i].rv,
                            test2_tab[i].r1 == NULL ? "NULL" : test2_tab[i].r1,
                            test2_tab[i].r2 == NULL ? "NULL" : test2_tab[i].r2,
                            test2_tab[i].r3 == NULL ? "NULL" : test2_tab[i].r3,
  @@ -391,7 +391,7 @@
   {
       unsigned char ucp[256];
       int i;
  -    
  +
       ts_test_check(TS_CTX, "encode/decode of 0 bytes");
       for (i = 0; i < 256; i++)
           ucp[i] = 0x55;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str_token.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 str_token.c
  --- ossp-pkg/str/str_token.c	1 Apr 2002 08:32:55 -0000	1.8
  +++ ossp-pkg/str/str_token.c	6 Jan 2003 19:13:48 -0000	1.9
  @@ -1,9 +1,9 @@
   /*
   **  OSSP str - String Handling
  -**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 1999-2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of OSSP str, a string handling and manipulation 
  +**  This file is part of OSSP str, a string handling and manipulation
   **  library which can be found at http://www.ossp.org/pkg/lib/str/.
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -24,7 +24,7 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  str_token.c: tokenizing functions 
  +**  str_token.c: tokenizing functions
   */
   
   #include "str_p.h"
  @@ -44,11 +44,11 @@
    */
   
   /*
  - * isoneof -- check whether c is one of the chars in c 
  + * isoneof -- check whether c is one of the chars in c
    */
  -static int 
  +static int
   isoneof(
  -    register char c, 
  +    register char c,
       register const char *s)
   {
       for (; *s != NUL; s++)
  @@ -58,7 +58,7 @@
   }
   
   /*
  - * nextchar -- get next character from a string  
  + * nextchar -- get next character from a string
    */
   static char *
   nextchar(
  @@ -177,15 +177,15 @@
           cs_comment = "";
   
       /* skip leading delimiters */
  -    p = *s; 
  +    p = *s;
       while (*p != NUL && isoneof(*p, cs_delim))
           p++;
   
       /* end of string, so stop parsing */
  -    if (*p == NUL) 
  +    if (*p == NUL)
           return NULL;
   
  -    /* 
  +    /*
        * start of comment reached, so stop parsing but update the parsing
        * cursor just in case the user wants to recover the comment
        */
  @@ -195,7 +195,7 @@
           return NULL;
       }
   
  -    /* 
  +    /*
        * Set `cpToken' to point to returned string.
        * Then use p and q to walk through the string:
        *  - p will follow the input characters;
  @@ -210,7 +210,7 @@
       cLeftQuote = NUL;
   
       if ((mode & STR_BACKSLASHESC) || (mode & STR_TRIGRAPHS)) {
  -        /* 
  +        /*
            * parse while recognizing backslash escapes
            */
           while (bInToken && (p = nextchar(p, &c, bWithTrigraphs, &bBackslashed)) != NULL) {
  @@ -220,7 +220,7 @@
               }
               else if (!bInQuote && *cs_delim != NUL && isoneof(c, cs_delim)) {
                   /* reached end of token */
  -                *q = NUL;      
  +                *q = NUL;
                   bInToken = FALSE;
               }
               else if (!bInQuote && *cs_comment != NUL && isoneof(c, cs_comment)) {
  @@ -231,7 +231,7 @@
               }
               else if (!bInQuote && *cs_quote != NUL && isoneof(c, cs_quote)) {
                   /* beginning a quoted segment */
  -                bInQuote = TRUE; 
  +                bInQuote = TRUE;
                   cLeftQuote = c;
                   if (!(mode & STR_STRIPQUOTES))
                       *q++ = c;
  @@ -249,7 +249,7 @@
           }
       }
       else {
  -        /* 
  +        /*
            * parse while ignoring backslash escapes
            */
           while (bInToken && *p != NUL) {
  @@ -274,7 +274,7 @@
               }
               else if (bInQuote && cLeftQuote == *p) {
                   /* ending a quoted segment */
  -                bInQuote = FALSE; 
  +                bInQuote = FALSE;
                   p++;
                   if (!(mode & STR_STRIPQUOTES))
                       *q++ = cLeftQuote;
  @@ -288,9 +288,9 @@
   
       /* terminate token and update parsing cursor */
       *q = NUL;
  -    *s = p; 
  +    *s = p;
   
  -    /* skip trailing delimiters 
  +    /* skip trailing delimiters
          (if requested only, else we do it on next round) */
       if ((mode & STR_SKIPDELIMS) && *s != NULL) {
           while (*(*s) != NUL && isoneof(*(*s), cs_delim))
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str_version.c
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 str_version.c
  --- ossp-pkg/str/str_version.c	1 Apr 2002 08:32:55 -0000	1.14
  +++ ossp-pkg/str/str_version.c	6 Jan 2003 19:13:48 -0000	1.15
  @@ -8,7 +8,7 @@
   #ifndef _STR_VERSION_C_
   #define _STR_VERSION_C_
   
  -#define STR_VERSION 0x009207
  +#define STR_VERSION 0x009208
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _STR_VERSION_C_AS_HEADER_
   
   str_version_t str_version = {
  -    0x009207,
  -    "0.9.7",
  -    "0.9.7 (01-Apr-2002)",
  -    "This is OSSP str, Version 0.9.7 (01-Apr-2002)",
  -    "OSSP str 0.9.7 (01-Apr-2002)",
  -    "OSSP str/0.9.7",
  -    "@(#)OSSP str 0.9.7 (01-Apr-2002)",
  -    "$Id: str_version.c,v 1.14 2002/04/01 08:32:55 rse Exp $"
  +    0x009208,
  +    "0.9.8",
  +    "0.9.8 (06-Jan-2003)",
  +    "This is OSSP str, Version 0.9.8 (06-Jan-2003)",
  +    "OSSP str 0.9.8 (06-Jan-2003)",
  +    "OSSP str/0.9.8",
  +    "@(#)OSSP str 0.9.8 (06-Jan-2003)",
  +    "$Id: str_version.c,v 1.15 2003/01/06 19:13:48 rse Exp $"
   };
   
   #endif /* _STR_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 13 11:20:05 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1E41C76906; Mon, 13 Jan 2003 11:20:05 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ sio.pod
Message-Id: <20030113102005.1E41C76906@mail.ossp.org>
Date: Mon, 13 Jan 2003 11:20:05 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   13-Jan-2003 11:20:04
  Branch: HEAD                             Handle: 2003011310200400

  Modified files:
    ossp-pkg/sio            sio.pod

  Log:
    typo

  Summary:
    Revision    Changes     Path
    1.11        +1  -1      ossp-pkg/sio/sio.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio.pod
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 sio.pod
  --- ossp-pkg/sio/sio.pod	6 Jan 2003 19:04:56 -0000	1.10
  +++ ossp-pkg/sio/sio.pod	13 Jan 2003 10:20:04 -0000	1.11
  @@ -143,7 +143,7 @@
   
   =item B<sio_t> (Stream I/O Type)
   
  -This is an opaque data type representing apair of two half-duplex data
  +This is an opaque data type representing a pair of two half-duplex data
   pipes. Only pointers to this abstract data type are used in the API.
   
   =item B<sio_stage_t> (Stream Stage Type)
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 20 16:34:15 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E81097693A; Mon, 20 Jan 2003 16:34:14 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ configure.ac sio.ac sio_bio.c sio_test.c sio...
Message-Id: <20030120153414.E81097693A@mail.ossp.org>
Date: Mon, 20 Jan 2003 16:34:14 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   20-Jan-2003 16:34:14
  Branch: HEAD                             Handle: 2003012015341300

  Added files:
    ossp-pkg/sio            sio.ac
  Modified files:
    ossp-pkg/sio            configure.ac sio_bio.c sio_test.c sio_zlib.c

  Log:
    make external references optional

  Summary:
    Revision    Changes     Path
    1.4         +3  -3      ossp-pkg/sio/configure.ac
    1.1         +66 -0      ossp-pkg/sio/sio.ac
    1.10        +7  -0      ossp-pkg/sio/sio_bio.c
    1.7         +9  -0      ossp-pkg/sio/sio_test.c
    1.6         +7  -0      ossp-pkg/sio/sio_zlib.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/configure.ac
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 configure.ac
  --- ossp-pkg/sio/configure.ac	6 Jan 2003 19:04:56 -0000	1.3
  +++ ossp-pkg/sio/configure.ac	20 Jan 2003 15:34:13 -0000	1.4
  @@ -41,9 +41,9 @@
   sinclude(libtool.m4)
   AC_PROG_LIBTOOL
   
  -dnl ## local checks go here (not yet)
  -dnl sinclude(sio.ac)
  -dnl SIO_CHECK_ALL
  +dnl ## local checks go here
  +sinclude(sio.ac)
  +SIO_CHECK_ALL
   
   AC_CHECK_EXTLIB([OSSP ex], ex, __ex_ctx, ex.h,
                   [AC_DEFINE(WITH_EX, 1, [Define to 1 if building with OSSP ex])])
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio.ac
  ============================================================================
  $ cvs diff -u -r0 -r1.1 sio.ac
  --- /dev/null	2003-01-20 16:34:14.000000000 +0100
  +++ sio.ac	2003-01-20 16:34:14.000000000 +0100
  @@ -0,0 +1,66 @@
  +dnl ##
  +dnl ##  OSSP sio - Stream I/O
  +dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
  +dnl ##
  +dnl ##  This file is part of OSSP sio, an abstract data type of
  +dnl ##  a pair of half-duplex data pipes which can be found at
  +dnl ##  http://www.ossp.org/pkg/lib/sio/.
  +dnl ##
  +dnl ##  Permission to use, copy, modify, and distribute this software for
  +dnl ##  any purpose with or without fee is hereby granted, provided that
  +dnl ##  the above copyright notice and this permission notice appear in all
  +dnl ##  copies.
  +dnl ##
  +dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +dnl ##  SUCH DAMAGE.
  +dnl ##
  +dnl ##  sio.ac: OSSP sio Autoconf checks
  +dnl ##
  +
  +dnl #   Check for anything OSSP sio wants to know
  +dnl #   configure.in:
  +dnl #     SIO_CHECK_ALL
  +
  +AC_DEFUN(SIO_CHECK_ALL,[
  +
  +dnl #   built-time configuration parameter --enable-bio
  +AC_MSG_CHECKING(for BIO support)
  +AC_ARG_ENABLE(bio,dnl
  +[  --enable-bio             enable BIO support (default=no)],
  +[ enable_bio=$enableval ],
  +[ enable_bio=no ]
  +)dnl
  +AC_MSG_RESULT([$enable_bio])
  +if test ".$enable_bio" = .yes; then
  +AC_CHECK_LIB(crypto, CRYPTO_free)
  +AC_CHECK_LIB(ssl, SSL_alert_desc_string)
  +AC_DEFINE(ENABLE_BIO, 1, [Define to 1 if building with BIO (openssl)])
  +fi
  +
  +dnl #   built-time configuration parameter --enable-zlib
  +AC_MSG_CHECKING(for ZLIB support)
  +AC_ARG_ENABLE(zlib,dnl
  +[  --enable-zlib            enable ZLIB support (default=no)],
  +[ enable_zlib=$enableval ],
  +[ enable_zlib=no ]
  +)dnl
  +AC_MSG_RESULT([$enable_zlib])
  +if test ".$enable_zlib" = .yes; then
  +AC_CHECK_LIB(z, inflate)
  +AC_DEFINE(ENABLE_ZLIB, 1, [Define to 1 if building with ZLIB])
  +fi
  +
  +])
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_bio.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 sio_bio.c
  --- ossp-pkg/sio/sio_bio.c	6 Jan 2003 19:04:56 -0000	1.9
  +++ ossp-pkg/sio/sio_bio.c	20 Jan 2003 15:34:13 -0000	1.10
  @@ -28,6 +28,12 @@
   **  sio_bio.c: OpenSSL BIO stage
   */
   
  +#ifdef HAVE_CONFIG_H
  +#include "config.h"
  +#endif
  +
  +#if ENABLE_BIO
  +
   #include <stddef.h>
   #include <stdlib.h>
   #include <string.h>
  @@ -623,3 +629,4 @@
       siobio_shutdown
   };
   
  +#endif /* ENABLE_BIO */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_test.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 sio_test.c
  --- ossp-pkg/sio/sio_test.c	6 Jan 2003 19:04:56 -0000	1.6
  +++ ossp-pkg/sio/sio_test.c	20 Jan 2003 15:34:13 -0000	1.7
  @@ -28,12 +28,21 @@
   **  sio_test.c: test suite
   */
   
  +#ifdef HAVE_CONFIG_H
  +#include "config.h"
  +#endif
  +
  +#ifndef ENABLE_BIO
  +#error Test requires BIO + SSL
  +#endif
  +
   #include <stdio.h>
   
   #include "al.h"
   #include "sio.h"
   
   #include "sa.h"
  +
   #include <openssl/ssl.h>
   #include <openssl/bio.h>
   extern BIO_METHOD *BIO_s_socket();
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_zlib.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 sio_zlib.c
  --- ossp-pkg/sio/sio_zlib.c	6 Jan 2003 19:04:56 -0000	1.5
  +++ ossp-pkg/sio/sio_zlib.c	20 Jan 2003 15:34:13 -0000	1.6
  @@ -28,6 +28,12 @@
   **  sio_zlib.c: zlib compression stage
   */
   
  +#ifdef HAVE_CONFIG_H
  +#include "config.h"
  +#endif
  +
  +#if ENABLE_ZLIB
  +
   #include <stddef.h>
   #include <stdlib.h>
   #include <string.h>
  @@ -364,3 +370,4 @@
       NULL
   };
   
  +#endif /* ENABLE_ZLIB */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 20 17:16:42 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D810776938; Mon, 20 Jan 2003 17:16:41 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ sio.c
Message-Id: <20030120161641.D810776938@mail.ossp.org>
Date: Mon, 20 Jan 2003 17:16:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   20-Jan-2003 17:16:41
  Branch: HEAD                             Handle: 2003012016164000

  Modified files:
    ossp-pkg/sio            sio.c

  Log:
    sio_write now returns number of bytes sent upstream

  Summary:
    Revision    Changes     Path
    1.21        +2  -0      ossp-pkg/sio/sio.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio.c
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 sio.c
  --- ossp-pkg/sio/sio.c	6 Jan 2003 19:04:56 -0000	1.20
  +++ ossp-pkg/sio/sio.c	20 Jan 2003 16:16:40 -0000	1.21
  @@ -729,6 +729,8 @@
       else
           rc = sio_output(sio, al);
   
  +    *actualp = n - al_bytes(al);
  +
       arc = al_destroy(al);
       if (arc != AL_OK) return SIO_RC(SIO_ERR_INT);
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 20 18:43:23 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B30C176938; Mon, 20 Jan 2003 18:43:22 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ sio.c
Message-Id: <20030120174322.B30C176938@mail.ossp.org>
Date: Mon, 20 Jan 2003 18:43:22 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   20-Jan-2003 18:43:22
  Branch: HEAD                             Handle: 2003012017432100

  Modified files:
    ossp-pkg/sio            sio.c

  Log:
    correctly limit sio_input data transfer

  Summary:
    Revision    Changes     Path
    1.22        +6  -0      ossp-pkg/sio/sio.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio.c
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 sio.c
  --- ossp-pkg/sio/sio.c	20 Jan 2003 16:16:40 -0000	1.21
  +++ ossp-pkg/sio/sio.c	20 Jan 2003 17:43:21 -0000	1.22
  @@ -571,6 +571,12 @@
   
       }
   
  +    /*
  +     * clamp to requested size
  +     */
  +    if (n > limit)
  +        n = limit;
  +
       while (n > 0) {
           if (label == NULL) {
               datastart = 0;
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 20 20:12:56 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2806D76940; Mon, 20 Jan 2003 20:12:55 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ sio_sa.c
Message-Id: <20030120191255.2806D76940@mail.ossp.org>
Date: Mon, 20 Jan 2003 20:12:55 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   20-Jan-2003 20:12:55
  Branch: HEAD                             Handle: 2003012019125400

  Modified files:
    ossp-pkg/sio            sio_sa.c

  Log:
    make compilation optional

  Summary:
    Revision    Changes     Path
    1.8         +7  -1      ossp-pkg/sio/sio_sa.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_sa.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 sio_sa.c
  --- ossp-pkg/sio/sio_sa.c	6 Jan 2003 19:04:56 -0000	1.7
  +++ ossp-pkg/sio/sio_sa.c	20 Jan 2003 19:12:54 -0000	1.8
  @@ -28,6 +28,12 @@
   **  sio_sa.c: OSSP sa socket I/O stage
   */
   
  +#ifdef HAVE_CONFIG_H
  +#include "config.h"
  +#endif
  +
  +#if ENABLE_SA
  +
   #include <stddef.h>
   #include <stdlib.h>
   #include <string.h>
  @@ -251,4 +257,4 @@
       NULL
   };
   
  -
  +#endif /* ENABLE_SA */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 20 20:13:26 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5DE4976940; Mon, 20 Jan 2003 20:13:26 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ sio.ac
Message-Id: <20030120191326.5DE4976940@mail.ossp.org>
Date: Mon, 20 Jan 2003 20:13:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   20-Jan-2003 20:13:26
  Branch: HEAD                             Handle: 2003012019132500

  Modified files:
    ossp-pkg/sio            sio.ac

  Log:
    make compilation optional

  Summary:
    Revision    Changes     Path
    1.2         +13 -0      ossp-pkg/sio/sio.ac
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio.ac
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 sio.ac
  --- ossp-pkg/sio/sio.ac	20 Jan 2003 15:34:13 -0000	1.1
  +++ ossp-pkg/sio/sio.ac	20 Jan 2003 19:13:25 -0000	1.2
  @@ -63,4 +63,17 @@
   AC_DEFINE(ENABLE_ZLIB, 1, [Define to 1 if building with ZLIB])
   fi
   
  +dnl #   built-time configuration parameter --enable-sa
  +AC_MSG_CHECKING(for SA support)
  +AC_ARG_ENABLE(sa,dnl
  +[  --enable-sa              enable SA support (default=no)],
  +[ enable_sa=$enableval ],
  +[ enable_sa=no ]
  +)dnl
  +AC_MSG_RESULT([$enable_sa])
  +if test ".$enable_sa" = .yes; then
  +AC_CHECK_LIB(sa, sa_create)
  +AC_DEFINE(ENABLE_SA, 1, [Define to 1 if building with OSSP sa])
  +fi
  +
   ])
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 20 20:13:41 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 095D576945; Mon, 20 Jan 2003 20:13:40 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ Makefile.in sio_test.c
Message-Id: <20030120191340.095D576945@mail.ossp.org>
Date: Mon, 20 Jan 2003 20:13:40 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   20-Jan-2003 20:13:40
  Branch: HEAD                             Handle: 2003012019133900

  Modified files:
    ossp-pkg/sio            Makefile.in sio_test.c

  Log:
    test suite (still incomplete)

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/sio/Makefile.in
    1.8         +305 -120   ossp-pkg/sio/sio_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 Makefile.in
  --- ossp-pkg/sio/Makefile.in	6 Jan 2003 19:04:56 -0000	1.3
  +++ ossp-pkg/sio/Makefile.in	20 Jan 2003 19:13:39 -0000	1.4
  @@ -51,7 +51,7 @@
   POD2MAN     = pod2man
   
   LIB_NAME    = libsio.la
  -LIB_OBJS    = sio.lo sio_bio.lo sio_buffer.lo sio_hello.lo sio_null.lo sio_sa.lo sio_sillymux.lo sio_sio.lo sio_zlib.lo
  +LIB_OBJS    = sio.lo sio_bio.lo sio_buffer.lo sio_hello.lo sio_null.lo sio_hole.lo sio_fd.lo sio_sa.lo sio_sillymux.lo sio_sio.lo sio_zlib.lo
   LIB_DEPS    = @LIB_DEPS@
   
   MAN_NAME    = sio.3
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_test.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 sio_test.c
  --- ossp-pkg/sio/sio_test.c	20 Jan 2003 15:34:13 -0000	1.7
  +++ ossp-pkg/sio/sio_test.c	20 Jan 2003 19:13:39 -0000	1.8
  @@ -25,167 +25,352 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  sio_test.c: test suite
  +**  sio_test.c: stream I/O library test suite
   */
   
   #ifdef HAVE_CONFIG_H
   #include "config.h"
   #endif
   
  -#ifndef ENABLE_BIO
  -#error Test requires BIO + SSL
  -#endif
  -
   #include <stdio.h>
  +#include <string.h>
  +#include <fcntl.h>
  +#include <errno.h>
  +#include <unistd.h>
   
  +#include "ts.h"
   #include "al.h"
   #include "sio.h"
   
  -#include "sa.h"
  -
  +#if ENABLE_BIO
   #include <openssl/ssl.h>
   #include <openssl/bio.h>
   extern BIO_METHOD *BIO_s_socket();
  -
   extern sio_module_t sio_module_bio;
  -extern sio_module_t sio_module_hello;
  -extern sio_module_t sio_module_buffer;
  -#ifndef SINK
  -extern sio_module_t sio_module_sa;
   #endif
   
  -#define e(f) rc = f; printf("%s = %s\n",#f, sio_error(rc)); fflush(stdout);
  -#define s(f) src = f; printf("%s = %s\n",#f, sa_error(src)); fflush(stdout);
  -#define n(f) rn = f; printf("%s = %d\n",#f, rn); fflush(stdout);
  -#define p(f) rp = f; printf("%s = %p\n",#f, rp); fflush(stdout);
  -
  -int main(int argc, char *argv[])
  -{
  -    int rn;
  -    void *rp;
  -    sio_rc_t rc;
  -    sio_t *sio;
  -#ifndef SINK
  -    sio_stage_t *sios_sa;
  +#if ENABLE_SA
  +#include "sa.h"
  +extern sio_module_t sio_module_sa;
   #endif
  -    sio_stage_t *sios_bio, *sios_hello, *sios_buffer;
   
  -    sa_rc_t src;
  -    sa_addr_t *saa;
  -    sa_t *msa, *sa;
  -    char *uri;
  -
  -    int fd;
  -    SSL_CTX *ctx;
  -#ifdef SINK
  -    BIO *bio;
  -#endif
  -    BIO *sbio;
  +extern sio_module_t sio_module_null;
  +extern sio_module_t sio_module_hole;
  +extern sio_module_t sio_module_buffer;
  +extern sio_module_t sio_module_zlib;
  +extern sio_module_t sio_module_sio;
  +extern sio_module_t sio_module_fd;
  +extern sio_module_t sio_module_hello;
  +extern sio_module_t sio_module_sillymux;
   
  -    char buf[] = "Hello world\n";
   
  -    size_t actual;
  -    size_t buflen;
  -    int no  = 0;
  -    int yes = 1;
  +#define EVAL(name,rc,rc0,block) \
  +    ts_test_check(TS_CTX, name); \
  +    block \
  +    if (rc != rc0) \
  +        ts_test_fail(TS_CTX, "%s -> %d[%s] (expected %d[%s])\n", \
  +            rc, sio_error(rc), rc0, sio_error(rc0))
   
  -    s(sa_create(&msa));
  -    s(sa_option(msa, SA_OPTION_REUSEADDR, 1));
  +#define EVAL0(name,block) EVAL(name,rc,SIO_OK,block)
   
  -    s(sa_addr_create(&saa));
  -    uri = "inet://localhost:25001#tcp";
  -    s(sa_addr_u2a(saa, uri));
  -    s(sa_bind(msa,saa));
  -    s(sa_addr_destroy(saa));
  -    uri = NULL;
  +sio_rc_t readloop(sio_t *sio, char *buf, size_t len, size_t *actualp)
  +{
  +    sio_rc_t rc;
  +    size_t actual, total = 0;
   
  -    ERR_load_BIO_strings();
  -    OpenSSL_add_ssl_algorithms();
  -    ctx = SSL_CTX_new(SSLv23_server_method());
  +    while (len > 0) {
  +        rc = sio_read(sio, buf, len, &actual);
  +        if (rc != SIO_OK)
  +            break;
  +        buf   += actual;
  +        total += actual;
  +        len   -= actual;
  +    }
   
  -    if (!SSL_CTX_use_certificate_file(ctx, "/u/mlelstv/ssl/server.crt", SSL_FILETYPE_PEM))
  -        exit(98);
  -    if (!SSL_CTX_use_PrivateKey_file(ctx, "/u/mlelstv/ssl/server.key", SSL_FILETYPE_PEM))
  -        exit(99);
  +    *actualp = total;
  +    return rc;
  +}
   
  -    e(sio_create(&sio));
  -    e(sio_create_stage(sio, &sio_module_bio,    &sios_bio));
  -    e(sio_create_stage(sio, &sio_module_hello,  &sios_hello));
  -    e(sio_create_stage(sio, &sio_module_buffer, &sios_buffer));
  -#ifndef SINK
  -    e(sio_create_stage(sio, &sio_module_sa,     &sios_sa));
  -#endif
  +TS_TEST(test_sio_buffer)
  +{
  +    sio_rc_t rc;
  +    sio_t *sio;
  +    sio_stage_t *sios_buffer, *sios_hole;
  +    size_t bufsize = 1000;     /* output/input buffer size */
  +    int i,wcount = 100;
  +    char S[] = "Hello world\n";
  +    size_t actual, len = strlen(S);
  +
  +    EVAL0("sio_create", {
  +        rc = sio_create(&sio);
  +    });
  +    if (rc != SIO_OK) return;
  +    EVAL0("sio_create_stage(&sios_hole)", {
  +        rc = sio_create_stage(sio, &sio_module_hole, &sios_hole);
  +    });
  +    if (rc != SIO_OK) return;
  +    EVAL0("sio_create_stage(&sios_buffer)", {
  +        rc = sio_create_stage(sio, &sio_module_buffer, &sios_buffer);
  +    });
  +    if (rc != SIO_OK) return;
  +
  +    EVAL0("sio_configure_stage(sios_buffer, outputsize)", {
  +        rc = sio_configure_stage(sio, sios_buffer, "outputsize", &bufsize);
  +    });
  +    if (rc != SIO_OK) return;
  +
  +    EVAL0("sio_attach(sios_hole)", {
  +        rc = sio_attach(sio, sios_hole, SIO_MODE_WRITE);
  +    });
  +    if (rc != SIO_OK) return;
  +    EVAL0("sio_attach(sios_buffer)", {
  +        rc = sio_attach(sio, sios_buffer, SIO_MODE_WRITE);
  +    });
  +    if (rc != SIO_OK) return;
  +
  +    for (i=0; i<wcount; ++i) {
  +        EVAL0("sio_write", {
  +            rc = sio_write(sio, S, len, &actual);
  +        });
  +        if (rc != SIO_OK) break;
  +        if (actual != len) {
  +            ts_test_fail(TS_CTX, "sio_write result %d (expected %d)\n",
  +                (int)actual, (int)len);
  +            break;
  +        }
  +    }
   
  -    buflen = 256;
  -    e(sio_configure_stage(sio, sios_bio, "inputsize", &buflen));
  +    EVAL0("sio_detach(sios_hole)", {
  +        rc = sio_detach(sio, sios_hole);
  +    });
  +    EVAL0("sio_detach(sios_buffer)", {
  +        rc = sio_detach(sio, sios_buffer);
  +    });
  +
  +    EVAL0("sio_destroy_stage", {
  +        rc = sio_destroy_stage(sio, sios_buffer);
  +    });
  +    EVAL0("sio_destroy_stage(sios_hole)", {
  +        rc = sio_destroy_stage(sio, sios_hole);
  +    });
  +    EVAL0("sio_destroy", {
  +        rc = sio_destroy(sio);
  +    });
  +}
   
  -    buflen = 1000;
  -    e(sio_configure_stage(sio, sios_buffer, "outputsize", &buflen));
  +TS_TEST(test_sio_fd)
  +{
  +    sio_rc_t rc;
  +    sio_t *sio;
  +    sio_stage_t *sios_buffer, *sios_fd;
  +    size_t bufsize = 1000;     /* output buffer size */
  +    size_t buflen  =   81;     /* fd input buffer size */
  +    int fd;
  +    int i,wcount = 100;
  +    char S[] = "Hello world\n";
  +    char buf[sizeof(S)];
  +    size_t actual, len = strlen(S);
  +    char tempfile[] = "./sio_test_tmpfile.XXXXXX";
  +    int do_unlink = 0;
  +
  +    EVAL0("sio_create", {
  +        rc = sio_create(&sio);
  +    });
  +    if (rc != SIO_OK) return;
  +    EVAL0("sio_create_stage(&sios_fd)", {
  +        rc = sio_create_stage(sio, &sio_module_fd, &sios_fd);
  +    });
  +    if (rc != SIO_OK) return;
  +    EVAL0("sio_create_stage(&sios_buffer)", {
  +        rc = sio_create_stage(sio, &sio_module_buffer, &sios_buffer);
  +    });
  +    if (rc != SIO_OK) return;
  +
  +    EVAL0("sio_configure_stage(sios_fd, buflen)", {
  +        rc = sio_configure_stage(sio, sios_fd, "buflen", &buflen);
  +    });
  +    if (rc != SIO_OK) return;
  +    EVAL0("sio_configure_stage(sios_buffer)", {
  +        rc = sio_configure_stage(sio, sios_buffer, "outputsize", &buflen);
  +    });
  +    if (rc != SIO_OK) return;
  +    EVAL0("sio_configure_stage(sios_buffer, inputsize)", {
  +        rc = sio_configure_stage(sio, sios_buffer, "inputsize", &bufsize);
  +    });
  +    if (rc != SIO_OK) return;
  +
  +    /*
  +     * WRITE phase
  +     */
  +
  +    mktemp(tempfile);
  +    fd = open(tempfile, O_CREAT|O_EXCL|O_WRONLY, 0600);
  +    if (fd < 0) {
  +        ts_test_fail(TS_CTX, "cannot create temporary file \"%s\" (%s)\n",
  +            tempfile, strerror(errno));
  +    } else {
  +        do_unlink = 1;
  +        EVAL0("sio_configure_stage(sios_fd, fd)", {
  +            rc = sio_configure_stage(sio, sios_fd, "fd", &fd);
  +        });
  +        if (rc != SIO_OK) goto badwrite;
  +        EVAL0("sio_attach(sios_fd)", {
  +            rc = sio_attach(sio, sios_fd, SIO_MODE_READWRITE);
  +        });
  +        if (rc != SIO_OK) goto badwrite;
  +        EVAL0("sio_attach(sios_buffer)", {
  +            rc = sio_attach(sio, sios_buffer, SIO_MODE_READWRITE);
  +        });
  +        if (rc != SIO_OK) goto badwrite2;
  +
  +        for (i=0; i<wcount; ++i) {
  +            EVAL0("sio_write", {
  +                rc = sio_write(sio, S, len, &actual);
  +            });
  +            if (rc != SIO_OK) break;
  +            if (actual != len) {
  +                ts_test_fail(TS_CTX, "sio_write result %d (expected %d)\n",
  +                    (int)actual, (int)len);
  +                break;
  +            }
  +        }
  +
  +        EVAL0("sio_push", {
  +            rc = sio_push(sio);
  +        });
  +
  +        EVAL0("sio_detach(sios_buffer)", {
  +            rc = sio_detach(sio, sios_buffer);
  +        });
  +
  +        badwrite2:
  +        EVAL0("sio_detach(sios_fd)", {
  +            rc = sio_detach(sio, sios_fd);
  +        });
   
  -    s(sa_listen(msa, 5));
  +        badwrite:
  +        close(fd);
  +    }
   
  -    for(;;) {
  +    fd = open(tempfile, O_RDONLY);
  +    if (fd < 0) {
  +        ts_test_fail(TS_CTX, "cannot read temporary file \"%s\" (%s)\n",
  +            tempfile, strerror(errno));
  +    } else {
  +        EVAL0("sio_configure_stage(sios_fd, fd)", {
  +            rc = sio_configure_stage(sio, sios_fd, "fd", &fd);
  +        });
  +        if (rc != SIO_OK) goto badread;
  +
  +        EVAL0("sio_attach(sios_fd)", {
  +            rc = sio_attach(sio, sios_fd, SIO_MODE_READWRITE);
  +        });
  +        if (rc != SIO_OK) goto badread;
  +        EVAL0("sio_attach(sios_buffer)", {
  +            rc = sio_attach(sio, sios_buffer, SIO_MODE_READWRITE);
  +        });
  +        if (rc != SIO_OK) goto badread2;
  +
  +        for (i=0; i<wcount; ++i) {
  +            EVAL0("sio_read", {
  +                rc = readloop(sio, buf, len, &actual);
  +            });
  +            if (rc != SIO_OK) break;
  +            if (actual != len) {
  +                ts_test_fail(TS_CTX, "sio_read result %d (expected %d)\n",
  +                    (int)actual, (int)len);
  +                break;
  +            }
  +            buf[actual] = '\0';
  +            if (strcmp(buf, S)) {
  +                ts_test_fail(TS_CTX, "sio_read data mismatch at loop %d\n",
  +                    i);
  +                break;
  +            }
  +        }
  +
  +        EVAL0("sio_detach(sios_buffer)", {
  +            rc = sio_detach(sio, sios_buffer);
  +        });
  +
  +        badread2:
  +        EVAL0("sio_detach(sios_fd)", {
  +            rc = sio_detach(sio, sios_fd);
  +        });
   
  -        s(sa_accept(msa, &saa, &sa));
  -        s(sa_addr_a2u(saa, &uri));
  -        printf("Connection from %s\n",uri);
  -        s(sa_addr_destroy(saa));
  +        badread:
  +        close(fd);
  +    }
   
  -        p(sbio = BIO_new_ssl(ctx,0));
  -        e(sio_configure_stage(sio, sios_bio, "bio", sbio));
  +    if (do_unlink && unlink(tempfile) < 0) {
  +        ts_test_fail(TS_CTX, "cannot unlink temporary file \"%s\" (%s)\n",
  +            tempfile, strerror(errno));
  +    }
   
  -#ifdef SINK
  -        s(sa_getfd(sa, &fd));
  -        p(bio = BIO_new_socket(fd, 0));
  -        p(BIO_push(sbio,bio));
  -#else
  -        e(sio_configure_stage(sio, sios_sa, "sa", sa));
  -        buflen = 256;
  -        e(sio_configure_stage(sio, sios_sa, "buflen", &buflen));
  -        e(sio_configure_stage(sio, sios_bio, "issink", &no));
  -#endif
  -        e(sio_configure_stage(sio, sios_bio, "freebio", &yes));
  +    /*
  +     * common cleanup
  +     */
  +
  +    EVAL0("sio_destroy_stage", {
  +        rc = sio_destroy_stage(sio, sios_buffer);
  +    });
  +    EVAL0("sio_destroy_stage(sios_fd)", {
  +        rc = sio_destroy_stage(sio, sios_fd);
  +    });
  +    EVAL0("sio_destroy", {
  +        rc = sio_destroy(sio);
  +    });
  +}
   
  +TS_TEST(test_sio_pipe)
  +{
  +}
   
  -#ifndef SINK
  -        e(sio_attach(sio, sios_sa, SIO_MODE_READWRITE));
  -#endif
  -        e(sio_attach(sio, sios_bio, SIO_MODE_READWRITE));
  -        e(sio_attach(sio, sios_hello, SIO_MODE_READWRITE));
  -        e(sio_attach(sio, sios_buffer, SIO_MODE_WRITE));
  +TS_TEST(test_sio_sio)
  +{
  +}
   
  -        e(sio_write(sio, buf, sizeof(buf)-1, &actual));
  -        e(sio_push(sio));
  +TS_TEST(test_sio_hello)
  +{
  +}
   
  -        e(sio_detach(sio, sios_buffer));
  -        e(sio_detach(sio, sios_hello));
  -        e(sio_detach(sio, sios_bio));
  -#ifndef SINK
  -        e(sio_detach(sio, sios_sa));
  -#endif
  +TS_TEST(test_sio_zlib)
  +{
  +}
   
  -#ifdef SINK
  -        BIO_pop(bio);
  -#endif
  -        /* BIO_free(sbio); */
  -#ifdef SINK
  -        BIO_free(bio);
  +#if ENABLE_SA
  +TS_TEST(test_sio_sa)
  +{
  +}
   #endif
   
  -        sa_destroy(sa);
  -    }
  -
  -
  -#ifndef SINK
  -    e(sio_destroy_stage(sio, sios_sa));
  +#if ENABLE_BIO
  +TS_TEST(test_sio_bio)
  +{
  +}
   #endif
  -    e(sio_destroy_stage(sio, sios_buffer));
  -    e(sio_destroy_stage(sio, sios_hello));
  -    e(sio_destroy_stage(sio, sios_bio));
   
  -    e(sio_destroy(sio));
  -
  -    sa_destroy(msa);
  +int main(int argc, char *argv[])
  +{
  +    ts_suite_t *ts;
  +    int n;
   
  -    return 0;
  +    ts = ts_suite_new("OSSP sio (Stream I/O)");
  +    ts_suite_test(ts, test_sio_buffer, "stream I/O buffering");
  +    ts_suite_test(ts, test_sio_fd, "stream I/O file");
  +    ts_suite_test(ts, test_sio_pipe, "stream I/O pipe");
  +    ts_suite_test(ts, test_sio_sio, "stream I/O multiplexing");
  +    ts_suite_test(ts, test_sio_hello, "stream I/O hello protocol");
  +#if ENABLE_ZLIB
  +    ts_suite_test(ts, test_sio_zlib, "stream I/O zlib compression");
  +#endif
  +#if ENABLE_SA
  +    ts_suite_test(ts, test_sio_sa, "stream I/O socket abstraction");
  +#endif
  +#if ENABLE_BIO
  +    ts_suite_test(ts, test_sio_bio, "stream I/O ssl adapter");
  +#endif
  +    n = ts_suite_run(ts);
  +    ts_suite_free(ts);
  +    return n;
   }
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jan 22 17:18:11 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D004476947; Wed, 22 Jan 2003 17:18:10 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ sio_sillymux.c
Message-Id: <20030122161810.D004476947@mail.ossp.org>
Date: Wed, 22 Jan 2003 17:18:10 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   22-Jan-2003 17:18:10
  Branch: HEAD                             Handle: 2003012216181000

  Modified files:
    ossp-pkg/sio            sio_sillymux.c

  Log:
    correct casts

  Summary:
    Revision    Changes     Path
    1.3         +2  -2      ossp-pkg/sio/sio_sillymux.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_sillymux.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 sio_sillymux.c
  --- ossp-pkg/sio/sio_sillymux.c	6 Jan 2003 19:04:56 -0000	1.2
  +++ ossp-pkg/sio/sio_sillymux.c	22 Jan 2003 16:18:10 -0000	1.3
  @@ -83,9 +83,9 @@
       const char *name = (const char *)obj;
   
       if (!strcmp(name, "evenlabel")) {
  -        my->even_label = (al_label_t *)val;
  +        my->even_label = (al_label_t)val;
       } else if (!strcmp(name, "oddlabel")) {
  -        my->odd_label = (al_label_t *)val;
  +        my->odd_label = (al_label_t)val;
       } else {
           return SIO_ERR_ARG;
       }
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jan 22 17:37:49 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6E0A676944; Wed, 22 Jan 2003 17:37:49 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/al/ al_test.c
Message-Id: <20030122163749.6E0A676944@mail.ossp.org>
Date: Wed, 22 Jan 2003 17:37:49 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   22-Jan-2003 17:37:49
  Branch: HEAD                             Handle: 2003012216374800

  Modified files:
    ossp-pkg/al             al_test.c

  Log:
    fixed broken error output

  Summary:
    Revision    Changes     Path
    1.9         +2  -2      ossp-pkg/al/al_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/al/al_test.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 al_test.c
  --- ossp-pkg/al/al_test.c	6 Jan 2003 13:49:24 -0000	1.8
  +++ ossp-pkg/al/al_test.c	22 Jan 2003 16:37:48 -0000	1.9
  @@ -54,14 +54,14 @@
       block \
       if (rc != rc0) \
           ts_test_fail(TS_CTX, "%s -> %d[%s] (expected %d[%s])\n", \
  -            rc, al_error(rc), rc0, al_error(rc0))
  +            name, rc, al_error(rc), rc0, al_error(rc0))
   
   #define CHECKLEN(name, al) \
       do { \
           size_t good, bad; \
           if (checklen(al, &good, &bad)) \
               ts_test_fail(TS_CTX, "%s -> corrupted length %d (expected %d)\n", \
  -                good, bad); \
  +                name, good, bad); \
       } while (0)
   
   #define EVAL0(name,block) EVAL(name,rc,AL_OK,block)
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 23 17:21:07 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5FD2276945; Thu, 23 Jan 2003 17:21:07 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ sa.h
Message-Id: <20030123162107.5FD2276945@mail.ossp.org>
Date: Thu, 23 Jan 2003 17:21:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   23-Jan-2003 17:21:06
  Branch: HEAD                             Handle: 2003012316210600

  Modified files:
    ossp-pkg/sa             sa.h

  Log:
    fix embedding support

  Summary:
    Revision    Changes     Path
    1.37        +2  -0      ossp-pkg/sa/sa.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.h
  ============================================================================
  $ cvs diff -u -r1.36 -r1.37 sa.h
  --- ossp-pkg/sa/sa.h	6 Jan 2003 13:11:23 -0000	1.36
  +++ ossp-pkg/sa/sa.h	23 Jan 2003 16:21:06 -0000	1.37
  @@ -89,6 +89,8 @@
   #define sa_flush        SA_CONCAT(SA_PREFIX,sa_flush)
   #define sa_recv         SA_CONCAT(SA_PREFIX,sa_recv)
   #define sa_send         SA_CONCAT(SA_PREFIX,sa_send)
  +#define sa_sendf        SA_CONCAT(SA_PREFIX,sa_sendf)
  +#define sa_id           SA_CONCAT(SA_PREFIX,sa_id)
   #define sa_error        SA_CONCAT(SA_PREFIX,sa_error)
   #endif
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 23 17:25:07 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EEA5F76945; Thu, 23 Jan 2003 17:25:06 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ l2_ut_sa.h
Message-Id: <20030123162506.EEA5F76945@mail.ossp.org>
Date: Thu, 23 Jan 2003 17:25:06 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   23-Jan-2003 17:25:06
  Branch: HEAD                             Handle: 2003012316250600

  Modified files:
    ossp-pkg/l2             l2_ut_sa.h

  Log:
    fix embedding support

  Summary:
    Revision    Changes     Path
    1.17        +2  -0      ossp-pkg/l2/l2_ut_sa.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_sa.h
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 l2_ut_sa.h
  --- ossp-pkg/l2/l2_ut_sa.h	9 Nov 2002 14:44:31 -0000	1.16
  +++ ossp-pkg/l2/l2_ut_sa.h	23 Jan 2003 16:25:06 -0000	1.17
  @@ -89,6 +89,8 @@
   #define sa_flush        SA_CONCAT(SA_PREFIX,sa_flush)
   #define sa_recv         SA_CONCAT(SA_PREFIX,sa_recv)
   #define sa_send         SA_CONCAT(SA_PREFIX,sa_send)
  +#define sa_sendf        SA_CONCAT(SA_PREFIX,sa_sendf)
  +#define sa_id           SA_CONCAT(SA_PREFIX,sa_id)
   #define sa_error        SA_CONCAT(SA_PREFIX,sa_error)
   #endif
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 23 17:26:51 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0E78876945; Thu, 23 Jan 2003 17:26:50 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ devtool.func
Message-Id: <20030123162650.0E78876945@mail.ossp.org>
Date: Thu, 23 Jan 2003 17:26:50 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   23-Jan-2003 17:26:50
  Branch: HEAD                             Handle: 2003012316265000

  Modified files:
    ossp-pkg/lmtp2nntp      devtool.func

  Log:
    saying "still" is confusing if existing version is newer than expected

  Summary:
    Revision    Changes     Path
    1.4         +2  -2      ossp-pkg/lmtp2nntp/devtool.func
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/devtool.func
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.func
  --- ossp-pkg/lmtp2nntp/devtool.func	1 Jul 2002 14:33:13 -0000	1.3
  +++ ossp-pkg/lmtp2nntp/devtool.func	23 Jan 2003 16:26:50 -0000	1.4
  @@ -14,10 +14,10 @@
           $e )
               ;;
           $a )
  -            echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
  +            echo "devtool:WARNING: $t version $v accepted, but expected $e." 1>&2
               ;;
           * )
  -            echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
  +            echo "devtool:ERROR: $t version $v NOT acceptable, requires $e." 1>&2
               exit 1
               ;;
       esac
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 27 17:01:38 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 853A976987; Mon, 27 Jan 2003 17:01:37 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ TODO l2_channel.c l2_test.c
Message-Id: <20030127160137.853A976987@mail.ossp.org>
Date: Mon, 27 Jan 2003 17:01:37 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   27-Jan-2003 17:01:37
  Branch: HEAD                             Handle: 2003012716013500

  Modified files:
    ossp-pkg/l2             TODO l2_channel.c l2_test.c

  Log:
    fix iteration through non malloc(3)ed memory in l2_channel_destroy().
    Bug caught on FreeBSD5

  Summary:
    Revision    Changes     Path
    1.59        +12 -0      ossp-pkg/l2/TODO
    1.31        +13 -4      ossp-pkg/l2/l2_channel.c
    1.52        +4  -3      ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/TODO
  ============================================================================
  $ cvs diff -u -r1.58 -r1.59 TODO
  --- ossp-pkg/l2/TODO	6 Jan 2003 11:41:51 -0000	1.58
  +++ ossp-pkg/l2/TODO	27 Jan 2003 16:01:35 -0000	1.59
  @@ -9,6 +9,18 @@
     TODO
     ====
   
  +20030127 thl
  +    Fixed a bug in l2_channel.c:l2_channel_destroy() where chD was
  +    passing a pointer to l2_channel_downstream() to find a sibling of a
  +    previously free(3)d node. This caused a bus error on FreeBSD5 where
  +    free(3) filled the free area with nonzero data. All other
  +    implementations seem to keep the data and l2_channel_downstream()
  +    traversed through still valid pointers in unmalloc(3)ed areas. This
  +    caused openssh using fsl v1.0.6 to fail on FreeBSD5. The fix was
  +    implemented in l2_channel_destroy() through look-ahead. This is once
  +    again a basic iteration problem which can catch us in other places
  +    as well. This needs to be verified.
  +
   Structure of channels and documentation [thl]. It should be possible to
   drag the documentation out of a channel's source code. Everything else
   is error prone and a documentation nightmare. Currently, most (noop and
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_channel.c
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 l2_channel.c
  --- ossp-pkg/l2/l2_channel.c	6 Jan 2003 11:41:51 -0000	1.30
  +++ ossp-pkg/l2/l2_channel.c	27 Jan 2003 16:01:35 -0000	1.31
  @@ -455,8 +455,10 @@
   l2_result_t l2_channel_destroy(l2_channel_t *ch)
   {
       l2_result_t rv;
  -    l2_result_t rvD;
  +    l2_result_t rvD;   /* downstream */
       l2_channel_t *chD;
  +    l2_result_t rvL;   /* lookahead */
  +    l2_channel_t *chL;
   
       /* argument sanity check */
       if (ch == NULL)
  @@ -477,9 +479,16 @@
       if (rv == L2_OK_PASS) {
           rv = L2_OK;
           chD = NULL;
  -        while (l2_channel_downstream(ch, &chD) == L2_OK)
  -            if ((rvD = l2_channel_destroy(chD)) != L2_OK)
  -                rv = rvD;
  +        if (l2_channel_downstream(ch, &chD) == L2_OK) {
  +            chL = chD;
  +            do {
  +                rvL = l2_channel_downstream(ch, &chL);
  +                if ((rvD = l2_channel_destroy(chD)) != L2_OK)
  +                    rv = rvD;
  +                if (rvL == L2_OK)
  +                    chD = chL;
  +            } while ((rv == L2_OK) && (rvL == L2_OK));
  +        }
       }
   
       /* free channel structure */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_test.c
  ============================================================================
  $ cvs diff -u -r1.51 -r1.52 l2_test.c
  --- ossp-pkg/l2/l2_test.c	6 Jan 2003 11:41:52 -0000	1.51
  +++ ossp-pkg/l2/l2_test.c	27 Jan 2003 16:01:35 -0000	1.52
  @@ -89,10 +89,11 @@
              "  filter(regex=hecking, negate=0)"
              "  -> prefix(prefix=\"[%d-%m-%Y/%H:%M:%S] %L test[%P]: \", timezone=local)"
              "     -> buffer(size=800)"
  -/*           "     -> buffer(size=800, timer=on)"*/
              "        -> file(path=l2_test.log, append=1, perm=0644) ;"
  +/*
              "  syslog(ident=L2-Test, facility=user, "
              "         remotehost=localhost, logpid=1, target=remote)"
  +*/
              "}";
       fprintf(stderr, "configuring: %s\n", spec);
       if ((rv = l2_spec(&ch, env, "%s", spec)) != L2_OK)
  @@ -158,11 +159,11 @@
       /* perform a few log operations */
       if ((rv = l2_channel_log(ch, L2_LEVEL_PANIC, "1: Checking localhost %s %{myparm}k <%{text}S><%{hex}S><%{base64}S>\n", "foo", 12345, "foo\1bar", 7, "foo\1bar", 7, "foo\1bar", 7)) != L2_OK)
           die(env, rv, "failed to log message #1 to channel");
  -    if ((rv = l2_channel_log(ch, L2_LEVEL_PANIC, "2: Shecking\n")) != L2_OK)
  +    if ((rv = l2_channel_log(ch, L2_LEVEL_PANIC, "2: Checking\n")) != L2_OK)
           die(env, rv, "failed to log message #2 to channel");
       if ((rv = l2_channel_log(ch, L2_LEVEL_PANIC, "3: Checking localhost %s %{myparm}k <%{text}S><%{hex}S><%{base64}S>\n", "foo", 12345, "foo\1bar", 7, "foo\1bar", 7, "foo\1bar", 7)) != L2_OK)
           die(env, rv, "failed to log message #3 to channel");
  -    if ((rv = l2_channel_log(ch, L2_LEVEL_PANIC, "4: Shecking\n")) != L2_OK)
  +    if ((rv = l2_channel_log(ch, L2_LEVEL_PANIC, "4: Checking\n")) != L2_OK)
           die(env, rv, "failed to log message #4 to channel");
   
       /* destroy channel tree */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 27 17:29:34 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DE4997698A; Mon, 27 Jan 2003 17:29:33 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ devtool.func ossp-pkg/fsl/ devtool.func ossp...
Message-Id: <20030127162933.DE4997698A@mail.ossp.org>
Date: Mon, 27 Jan 2003 17:29:33 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   27-Jan-2003 17:29:33
  Branch: HEAD                             Handle: 2003012716293102

  Modified files:
    ossp-pkg/cfg            devtool.func
    ossp-pkg/fsl            devtool.func
    ossp-pkg/l2             devtool.func
    ossp-pkg/pcre           devtool.func

  Log:
    saying "still" is confusing if existing version is newer than expected

  Summary:
    Revision    Changes     Path
    1.3         +2  -2      ossp-pkg/cfg/devtool.func
    1.2         +2  -2      ossp-pkg/fsl/devtool.func
    1.5         +2  -2      ossp-pkg/l2/devtool.func
    1.3         +2  -2      ossp-pkg/pcre/devtool.func
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/devtool.func
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.func
  --- ossp-pkg/cfg/devtool.func	6 Jan 2003 11:17:43 -0000	1.2
  +++ ossp-pkg/cfg/devtool.func	27 Jan 2003 16:29:32 -0000	1.3
  @@ -14,10 +14,10 @@
           $e )
               ;;
           $a )
  -            echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
  +            echo "devtool:WARNING: $t version $v accepted, but expected $e." 1>&2
               ;;
           * )
  -            echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
  +            echo "devtool:ERROR: $t version $v NOT acceptable, requires $e." 1>&2
               exit 1
               ;;
       esac
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/devtool.func
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.func
  --- ossp-pkg/fsl/devtool.func	9 Jul 2002 09:42:09 -0000	1.1
  +++ ossp-pkg/fsl/devtool.func	27 Jan 2003 16:29:31 -0000	1.2
  @@ -14,10 +14,10 @@
           $e )
               ;;
           $a )
  -            echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
  +            echo "devtool:WARNING: $t version $v accepted, but expected $e." 1>&2
               ;;
           * )
  -            echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
  +            echo "devtool:ERROR: $t version $v NOT acceptable, requires $e." 1>&2
               exit 1
               ;;
       esac
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/devtool.func
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 devtool.func
  --- ossp-pkg/l2/devtool.func	6 Jan 2003 11:41:51 -0000	1.4
  +++ ossp-pkg/l2/devtool.func	27 Jan 2003 16:29:31 -0000	1.5
  @@ -14,10 +14,10 @@
           $e )
               ;;
           $a )
  -            echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
  +            echo "devtool:WARNING: $t version $v accepted, but expected $e." 1>&2
               ;;
           * )
  -            echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
  +            echo "devtool:ERROR: $t version $v NOT acceptable, requires $e." 1>&2
               exit 1
               ;;
       esac
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pcre/devtool.func
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.func
  --- ossp-pkg/pcre/devtool.func	14 Mar 2002 15:32:48 -0000	1.2
  +++ ossp-pkg/pcre/devtool.func	27 Jan 2003 16:29:33 -0000	1.3
  @@ -14,10 +14,10 @@
           $e )
               ;;
           $a )
  -            echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
  +            echo "devtool:WARNING: $t version $v accepted, but expected $e." 1>&2
               ;;
           * )
  -            echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
  +            echo "devtool:ERROR: $t version $v NOT acceptable, requires $e." 1>&2
               exit 1
               ;;
       esac
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jan 28 13:16:10 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6F950769C2; Tue, 28 Jan 2003 13:16:10 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ README fsl_version.c
Message-Id: <20030128121610.6F950769C2@mail.ossp.org>
Date: Tue, 28 Jan 2003 13:16:10 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   28-Jan-2003 13:16:10
  Branch: HEAD                             Handle: 2003012812160900

  Modified files:
    ossp-pkg/fsl            README fsl_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.28        +1  -1      ossp-pkg/fsl/README
    1.14        +9  -9      ossp-pkg/fsl/fsl_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/README
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 README
  --- ossp-pkg/fsl/README	6 Jan 2003 16:41:21 -0000	1.27
  +++ ossp-pkg/fsl/README	28 Jan 2003 12:16:09 -0000	1.28
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_| |___/_|
    
     OSSP fsl - Faking/Flexible Syslog Library
  -  Version 1.0.6 (09-Nov-2002)
  +  Version 1.0.7 (28-Jan-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl_version.c
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 fsl_version.c
  --- ossp-pkg/fsl/fsl_version.c	9 Nov 2002 18:36:05 -0000	1.13
  +++ ossp-pkg/fsl/fsl_version.c	28 Jan 2003 12:16:09 -0000	1.14
  @@ -8,7 +8,7 @@
   #ifndef _FSL_VERSION_C_
   #define _FSL_VERSION_C_
   
  -#define FSL_VERSION 0x100206
  +#define FSL_VERSION 0x100207
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _FSL_VERSION_C_AS_HEADER_
   
   fsl_version_t fsl_version = {
  -    0x100206,
  -    "1.0.6",
  -    "1.0.6 (09-Nov-2002)",
  -    "This is OSSP fsl, Version 1.0.6 (09-Nov-2002)",
  -    "OSSP fsl 1.0.6 (09-Nov-2002)",
  -    "OSSP fsl/1.0.6",
  -    "@(#)OSSP fsl 1.0.6 (09-Nov-2002)",
  -    "$Id: fsl_version.c,v 1.13 2002/11/09 18:36:05 rse Exp $"
  +    0x100207,
  +    "1.0.7",
  +    "1.0.7 (28-Jan-2003)",
  +    "This is OSSP fsl, Version 1.0.7 (28-Jan-2003)",
  +    "OSSP fsl 1.0.7 (28-Jan-2003)",
  +    "OSSP fsl/1.0.7",
  +    "@(#)OSSP fsl 1.0.7 (28-Jan-2003)",
  +    "$Id: fsl_version.c,v 1.14 2003/01/28 12:16:09 thl Exp $"
   };
   
   #endif /* _FSL_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jan 28 13:57:39 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7FF3576321; Tue, 28 Jan 2003 13:57:39 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/fsl/ index.wml oss...
Message-Id: <20030128125739.7FF3576321@mail.ossp.org>
Date: Tue, 28 Jan 2003 13:57:39 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   28-Jan-2003 13:57:39
  Branch: HEAD                             Handle: 2003012812573701

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/fsl    index.wml

  Log:
    release OSSP fsl 1.0.7

  Summary:
    Revision    Changes     Path
    1.47        +1  -0      ossp-web/new/news.txt
    1.15        +2  -2      ossp-web/pkg/lib/fsl/index.wml
    1.44        +4  -4      ossp-web/pkg/lib/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.46 -r1.47 news.txt
  --- ossp-web/new/news.txt	6 Jan 2003 15:44:16 -0000	1.46
  +++ ossp-web/new/news.txt	28 Jan 2003 12:57:37 -0000	1.47
  @@ -1,3 +1,4 @@
  +28-Jan-2003: Released L<OSSP fsl> 1.0.7
   06-Jan-2003: Released L<OSSP sa> 1.0.3
   06-Jan-2003: Released L<OSSP ex> 1.0.1
   23-Dec-2002: Released L<OSSP mm> 1.2.2
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/fsl/index.wml
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 index.wml
  --- ossp-web/pkg/lib/fsl/index.wml	9 Nov 2002 19:03:47 -0000	1.14
  +++ ossp-web/pkg/lib/fsl/index.wml	28 Jan 2003 12:57:38 -0000	1.15
  @@ -45,7 +45,7 @@
   <pkg_status
       name="fsl" assign="thl"
       genesis="Jul-2002"
  -    stable="1.0.6" stable_date="09-Nov-2002"
  +    stable="1.0.7" stable_date="28-Jan-2003"
       unstable="none"  unstable_date="none"
   	done=100>
   
  @@ -56,7 +56,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/fsl/
       directory=$(FTP_ROOT_DIR)/pkg/lib/fsl/
       files="fsl-*.tar.gz" 
  -	stable="fsl-1.0.6.tar.gz" unstable="none">
  +	stable="fsl-1.0.7.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.43 -r1.44 index.wml
  --- ossp-web/pkg/lib/index.wml	6 Jan 2003 15:44:17 -0000	1.43
  +++ ossp-web/pkg/lib/index.wml	28 Jan 2003 12:57:38 -0000	1.44
  @@ -27,7 +27,7 @@
   			done=100 stable=1.0.3 unstable=none>
     <pkg_item name="fsl" longname="OSSP fsl" type="lib"
               desc="Faked/Flexible Syslog"
  -			done=100 stable=1.0.6 unstable=none>
  +			done=100 stable=1.0.7 unstable=none>
     <pkg_item name="var" longname="OSSP var" type="lib"
               desc="Variable Expansion"
   			done=95 stable=none unstable=0.9.0>
  @@ -46,6 +46,9 @@
     <pkg_item name="al" longname="OSSP al" type="lib"
               desc="Assembly Line"
   			done=95 stable=none unstable=0.9.1>
  +  <pkg_item name="sio" longname="OSSP sio" type="lib"
  +            desc="Stream I/O"
  +			done=95 stable=none unstable=none>
     <pkg_item name="cfg" longname="OSSP cfg" type="lib"
               desc="Configuration Parsing"
   			done=95 stable=none unstable=0.9.0>
  @@ -63,9 +66,6 @@
   			done=30 stable=none unstable=none>
     <pkg_item name="pcbe" longname="OSSP pcbe" type="lib"
               desc="Perl Style Boolean Expressions"
  -			done=15 stable=none unstable=none>
  -  <pkg_item name="sio" longname="OSSP sio" type="lib"
  -            desc="Stream I/O"
   			done=15 stable=none unstable=none>
     <pkg_item name="res" longname="OSSP res" type="lib"
               desc="Resource Pools"
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jan 28 14:14:42 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 678047648D; Tue, 28 Jan 2003 14:14:42 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ ChangeLog
Message-Id: <20030128131442.678047648D@mail.ossp.org>
Date: Tue, 28 Jan 2003 14:14:42 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   28-Jan-2003 14:14:42
  Branch: HEAD                             Handle: 2003012813144100

  Modified files:
    ossp-pkg/fsl            ChangeLog

  Log:
    tell the world what happend

  Summary:
    Revision    Changes     Path
    1.15        +13 -1      ossp-pkg/fsl/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 ChangeLog
  --- ossp-pkg/fsl/ChangeLog	6 Jan 2003 16:41:21 -0000	1.14
  +++ ossp-pkg/fsl/ChangeLog	28 Jan 2003 13:14:41 -0000	1.15
  @@ -8,7 +8,19 @@
   
     CHANGELOG
   
  -  Changes between 1.0.6 and 1.0.7 (xx-Jan-2003)
  +  Changes between 1.0.6 and 1.0.7 (28-Jan-2003)
  +
  +    *) Fixed a bug in lib_l2/l2_channel.c:l2_channel_destroy() where
  +       chD was passing a pointer to l2_channel_downstream() to find a
  +       sibling of a previously free(3)d node. This caused a bus error
  +       on FreeBSD5 where free(3) filled the free area with nonzero
  +       data. All other implementations seem to keep the data and
  +       l2_channel_downstream() traversed through still valid pointers
  +       in unmalloc(3)ed areas.
  +       [Thomas Lotterer <thomas@lotterer.net]
  +
  +    *) memory handling cleanups in lib_cfg
  +       [Ralf S. Engelschall <rse@engelschall.com>]
   
       *) Adjust copyright messages to include new year 2003.
          [Ralf S. Engelschall <rse@engelschall.com>]
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jan 28 14:58:08 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F3F76764F4; Tue, 28 Jan 2003 14:58:07 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ ChangeLog
Message-Id: <20030128135807.F3F76764F4@mail.ossp.org>
Date: Tue, 28 Jan 2003 14:58:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Jan-2003 14:58:07
  Branch: HEAD                             Handle: 2003012813580700

  Modified files:
    ossp-pkg/sa             ChangeLog

  Log:
    remember change

  Summary:
    Revision    Changes     Path
    1.20        +6  -0      ossp-pkg/sa/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 ChangeLog
  --- ossp-pkg/sa/ChangeLog	6 Jan 2003 13:11:23 -0000	1.19
  +++ ossp-pkg/sa/ChangeLog	28 Jan 2003 13:58:07 -0000	1.20
  @@ -11,6 +11,12 @@
     This is a list of all changes to OSSP sa.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 1.0.3 and 1.0.4 (06-Jan-2002 to 28-Jan-2003)
  +
  +   o Fixed embedding support: mappings for symbols sa_sendf and sa_id
  +     were missing.
  +     [Thomas Lotterer <thl@dev.de.cw.net>]
  +
     Changes between 1.0.2 and 1.0.3 (04-Dec-2002 to 06-Jan-2003)
   
      o Adjusted all copyright messages for new year 2003.
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jan 28 15:00:51 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3ECA57652D; Tue, 28 Jan 2003 15:00:51 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ README VERSION
Message-Id: <20030128140051.3ECA57652D@mail.ossp.org>
Date: Tue, 28 Jan 2003 15:00:51 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Jan-2003 15:00:51
  Branch: HEAD                             Handle: 2003012814005000

  Modified files:
    ossp-pkg/sa             README VERSION

  Log:
    bump for release

  Summary:
    Revision    Changes     Path
    1.15        +1  -1      ossp-pkg/sa/README
    1.12        +1  -1      ossp-pkg/sa/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/README
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 README
  --- ossp-pkg/sa/README	6 Jan 2003 13:11:23 -0000	1.14
  +++ ossp-pkg/sa/README	28 Jan 2003 14:00:50 -0000	1.15
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/\__,_|
   
     OSSP sa - Socket Abstraction
  -  Version 1.0.3 (06-Jan-2003)
  +  Version 1.0.4 (28-Jan-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/VERSION
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 VERSION
  --- ossp-pkg/sa/VERSION	6 Jan 2003 13:11:23 -0000	1.11
  +++ ossp-pkg/sa/VERSION	28 Jan 2003 14:00:50 -0000	1.12
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP sa (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP sa, Version 1.0.3 (06-Jan-2003)
  +  This is OSSP sa, Version 1.0.4 (28-Jan-2003)
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jan 28 15:03:03 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C57447648D; Tue, 28 Jan 2003 15:03:02 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20030128140302.C57447648D@mail.ossp.org>
Date: Tue, 28 Jan 2003 15:03:02 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   28-Jan-2003 15:03:02
  Branch: HEAD                             Handle: 2003012814030002

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/sa     index.wml

  Log:
    release OSSP sa 1.0.4

  Summary:
    Revision    Changes     Path
    1.48        +1  -0      ossp-web/new/news.txt
    1.45        +1  -1      ossp-web/pkg/lib/index.wml
    1.12        +2  -2      ossp-web/pkg/lib/sa/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.47 -r1.48 news.txt
  --- ossp-web/new/news.txt	28 Jan 2003 12:57:37 -0000	1.47
  +++ ossp-web/new/news.txt	28 Jan 2003 14:03:00 -0000	1.48
  @@ -1,3 +1,4 @@
  +28-Jan-2003: Released L<OSSP sa> 1.0.4
   28-Jan-2003: Released L<OSSP fsl> 1.0.7
   06-Jan-2003: Released L<OSSP sa> 1.0.3
   06-Jan-2003: Released L<OSSP ex> 1.0.1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.44 -r1.45 index.wml
  --- ossp-web/pkg/lib/index.wml	28 Jan 2003 12:57:38 -0000	1.44
  +++ ossp-web/pkg/lib/index.wml	28 Jan 2003 14:03:01 -0000	1.45
  @@ -24,7 +24,7 @@
   			done=100 stable=1.0.1 unstable=none>
     <pkg_item name="sa" longname="OSSP sa" type="lib"
               desc="Socket Abstraction"
  -			done=100 stable=1.0.3 unstable=none>
  +			done=100 stable=1.0.4 unstable=none>
     <pkg_item name="fsl" longname="OSSP fsl" type="lib"
               desc="Faked/Flexible Syslog"
   			done=100 stable=1.0.7 unstable=none>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/sa/index.wml
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 index.wml
  --- ossp-web/pkg/lib/sa/index.wml	6 Jan 2003 15:44:18 -0000	1.11
  +++ ossp-web/pkg/lib/sa/index.wml	28 Jan 2003 14:03:02 -0000	1.12
  @@ -110,7 +110,7 @@
   
   <pkg_status
       name="sa" assign="rse"
  -    stable="1.0.3"    stable_date="06-Jan-2003"
  +    stable="1.0.4"    stable_date="28-Jan-2003"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -121,7 +121,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/sa/
       directory=$(FTP_ROOT_DIR)/pkg/lib/sa/
       files="sa-*.tar.gz" 
  -	stable="sa-1\.0\.3\.tar\.gz" unstable="sa-SNAP.*\.tar.gz">
  +	stable="sa-1\.0\.4\.tar\.gz" unstable="sa-SNAP.*\.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jan 28 17:34:07 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9F7A67648D; Tue, 28 Jan 2003 17:34:07 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ example.conf
Message-Id: <20030128163407.9F7A67648D@mail.ossp.org>
Date: Tue, 28 Jan 2003 17:34:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   28-Jan-2003 17:34:07
  Branch: HEAD                             Handle: 2003012816340700

  Modified files:
    ossp-pkg/lmtp2nntp      example.conf

  Log:
    l2 has learned octal notation in the meantime

  Summary:
    Revision    Changes     Path
    1.18        +3  -5      ossp-pkg/lmtp2nntp/example.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/example.conf
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 example.conf
  --- ossp-pkg/lmtp2nntp/example.conf	18 Apr 2002 13:12:41 -0000	1.17
  +++ ossp-pkg/lmtp2nntp/example.conf	28 Jan 2003 16:34:07 -0000	1.18
  @@ -30,11 +30,9 @@
   
   l2spec          ' \
                   debug: prefix(prefix="%%b %%d %%H:%%M:%%S <%%L> lmtp2nntp[%%P]: ",timezone=local) \
  -                -> file(path="2log",append=0,perm=432) \
  -                '
  -               #    -> file(path="2log",append=0,perm=0666) FIXME l2 should support octal notation
  -               #'  #-> buffer(size=65536) \     #add this after prefix for log buffering
  -                                                #    -l aka --l2spec
  +                -> buffer(size=65536) \
  +                -> file(path="2.log",append=0,perm=0666) \
  +                '                               #see -l aka --l2spec
   
   mailfrom        "any.*@example\.org"            #see -m aka --mailfrom
   nodename        "gateway.example.com"           #see -n aka --nodename
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 30 11:23:13 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 25DD476827; Thu, 30 Jan 2003 11:23:13 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex/ ChangeLog README ex.pod
Message-Id: <20030130102313.25DD476827@mail.ossp.org>
Date: Thu, 30 Jan 2003 11:23:13 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Jan-2003 11:23:12
  Branch: HEAD                             Handle: 2003013010231200

  Modified files:
    ossp-pkg/ex             ChangeLog README ex.pod

  Log:
    Polished and enhanced the manual page ex(3)

  Summary:
    Revision    Changes     Path
    1.5         +6  -1      ossp-pkg/ex/ChangeLog
    1.9         +7  -0      ossp-pkg/ex/README
    1.27        +108 -94    ossp-pkg/ex/ex.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ChangeLog
  --- ossp-pkg/ex/ChangeLog	6 Jan 2003 15:31:24 -0000	1.4
  +++ ossp-pkg/ex/ChangeLog	30 Jan 2003 10:23:12 -0000	1.5
  @@ -11,7 +11,12 @@
   
     This is the list of all changes to the OSSP ex source tree.
   
  -  Changes between 0.9.1 and 1.0.0 (08-Mar-2002 to 06-Jan-2003)
  +  Changes between 1.0.1 and 1.0.2 (06-Jan-2003 to 30-Jan-2003)
  +
  +   *) Polished and enhanced the manual page ex(3).
  +      [Ralf S. Engelschall]
  +
  +  Changes between 1.0.0 and 1.0.1 (08-Mar-2002 to 06-Jan-2003)
   
      *) Adjusted copyright messages to include new year 2003.
         [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/README
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 README
  --- ossp-pkg/ex/README	6 Jan 2003 15:32:27 -0000	1.8
  +++ ossp-pkg/ex/README	30 Jan 2003 10:23:12 -0000	1.9
  @@ -22,6 +22,13 @@
     the exceptional return codes from sub-routines are correctly passed
     back to the parent.
   
  +  The OSSP ex facility also provides advanced exception handling
  +  features like shielded and deferred exceptions. Additionally, OSSP ex
  +  allows you to choose the used underlying machine context switching
  +  facility (jmp_buf(3), sigjmp_buf(3), ucontext(3), etc) and optionally
  +  support multi-threading environments by allowing you to store the
  +  exception catching stack in a thread-safe way.
  +
     COPYRIGHT AND LICENSE
   
     Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ex.pod
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 ex.pod
  --- ossp-pkg/ex/ex.pod	6 Jan 2003 15:31:24 -0000	1.26
  +++ ossp-pkg/ex/ex.pod	30 Jan 2003 10:23:12 -0000	1.27
  @@ -79,8 +79,8 @@
   class of the exception thrower, I<object> identifies the particular
   class instance of the exception thrower, and I<value> is the exceptional
   return code value the thrower wants to communicate. All three parts are
  -of type "C<void *>" internally, but every value is useable which can
  -be lossless casted this type. Exceptions are created on-the-fly by the
  +of type "C<void *>" internally, but every value is useable which can be
  +lossless "casted" to this type. Exceptions are created on-the-fly by the
   B<ex_throw> command.
   
   =head2 APPLICATION PROGRAMMER INTERFACE (API)
  @@ -101,19 +101,20 @@
   =item C<void *>I<ex_class>
   
   This is the I<class> argument of the B<ex_throw> call which created
  -the exception. This should globally and uniquely identify the class of
  -I<ex_value>. Usually this is a pointer to a static object (variable,
  -structure or function) which identifies the class of the thrower and
  -allows the catcher to correctly handle I<ex_value>.
  +the exception. This can globally and uniquely identify the class to
  +which I<ex_value> belongs to . Usually this is a pointer to a static
  +object (variable, structure or function) which identifies the class of
  +the thrower and allows the catcher to correctly handle I<ex_value>. It
  +is usually just an additional (optional) information to I<ex_value>.
   
   =item C<void *>I<ex_object>
   
  -This is the I<object> argument of the B<ex_throw> call which created
  -the exception. This should globally and uniquely identify the class
  -instance of I<ex_value> (in case multiple instances exists at all).
  +This is the I<object> argument of the B<ex_throw> call which created the
  +exception. This can globally and uniquely identify the class instance
  +I<ex_value> belongs to (in case multiple instances exists at all).
   Usually this a pointer to a dynamic object (structure) which identifiers
   the particular instance of the thrower. It is usually just an additional
  -information to I<ex_value>.
  +(optional) information to I<ex_value>.
   
   =item C<void *>I<ex_value>
   
  @@ -127,22 +128,23 @@
   =item C<char *>I<ex_file>
   
   This is the file name of the B<ISO-C> source where the B<ex_throw> call
  -was performed. It is provided as an additional information about the
  -throw point and is intended mainly for tracing and debugging purposes.
  +was performed. It is automatically provided as an additional information
  +about the throw point and is intended mainly for tracing and debugging
  +purposes.
   
   =item C<int> I<ex_line>
   
  -This is the line number inside the B<ISO-C> source file name where
  -the B<ex_throw> call was performed. It is provided as an additional
  -information about the throw point and is intended mainly for tracing and
  -debugging purposes.
  +This is the line number inside the B<ISO-C> source file name where the
  +B<ex_throw> call was performed. It is automatically provided as an
  +additional information about the throw point and is intended mainly for
  +tracing and debugging purposes.
   
   =item C<char *>I<ex_func>
   
   This is the function name (if determinable, else "C<#NA#>") inside the
   B<ISO-C> source file name where the B<ex_throw> call was performed. It
  -is provided as an additional information about the throw point and is
  -intended mainly for tracing and debugging purposes.
  +is automatically provided as an additional information about the throw
  +point and is intended mainly for tracing and debugging purposes.
   
   =back
   
  @@ -174,8 +176,8 @@
   B<ex_catch> clauses, of course.
   
   The B<ex_try> block is a regular B<ISO-C> language statement block, but
  -it is not allowed to jump into it via C<goto> or C<longjmp>(3) or out
  -of it via C<break>, C<return>, C<goto> or C<longjmp>(3) because there
  +it is not allowed to jump into it via "C<goto>" or C<longjmp>(3) or out
  +of it via "C<break>", "C<return>", "C<goto>" or C<longjmp>(3) because there
   is some hidden setup and cleanup that needs to be done by B<OSSP ex>
   regardless of whether an exception is caught. Jumping into an B<ex_try>
   clause would avoid doing the setup, and jumping out of it would avoid
  @@ -191,7 +193,7 @@
   B<ex_try> blocks: all accessible B<ISO-C> objects have the (expected)
   values as of the time B<ex_throw> was called, except that the values
   of objects of automatic storage invocation duration that do not have
  -the C<volatile> storage class I<and> have been changed between the
  +the "C<volatile>" storage class I<and> have been changed between the
   B<ex_try> invocation and B<ex_throw> are indeterminate. This is because
   both you usually do not know which commands in the B<ex_try> were
   already successful before the exception was thrown (logically speaking)
  @@ -202,11 +204,12 @@
   
   This builds an exception from the supplied arguments and throws it.
   If an B<ex_try>/B<ex_catch> clause formed the dynamic scope of the
  -B<ex_throw> call, this exception is copied into the I<variable> of its
  -B<ex_catch> clause and the program control flow is continued in the
  -B<ex_catch> block. If no B<ex_try>/B<ex_catch> clause exists in the
  -dynamic scope of the B<ex_throw> call, the program C<abort>(3)s. The
  -B<ex_throw> can be performed everywhere, including inside B<ex_try> and
  +B<ex_throw> call, this exception is copied into the I<variable> of
  +its B<ex_catch> clause and the program control flow is continued in
  +the (optional B<ex_cleanup> and then in the) B<ex_catch> block. If
  +no B<ex_try>/B<ex_catch> clause exists in the dynamic scope of the
  +B<ex_throw> call, the program calls C<abort>(3). The B<ex_throw> can
  +be performed everywhere, including inside B<ex_try>, B<ex_cleanup> and
   B<ex_catch> blocks.
   
   =item B<ex_rethrow>;
  @@ -222,50 +225,51 @@
   
   This directive executes I<BLOCK> while deferring the throwing of
   exceptions, i.e., inside the dynamic scope of B<ex_defer> all
  -B<ex_throw> operations are silently ignored and on leaving the I<BLOCK>
  -the first occurred exception is thrown.
  -
  -The B<ex_defer> block is a regular B<ISO-C> language statement block,
  -but it is not allowed to jump into it via C<goto> or C<longjmp>(3) or
  -out of it via C<break>, C<return>, C<goto> or C<longjmp>(3) because this
  -would cause the deferral level to become out of sync. Jumping into
  -an B<ex_defer> clause would avoid increasing the exception deferral
  -level, and jumping out of it would avoid decreasing it. In both cases
  -the result is an incorrect exception deferral level. Nevertheless you
  -are allowed to nest B<ex_defer> clauses.
  +B<ex_throw> operations are remembered but deferred and on leaving the
  +I<BLOCK> the I<first> occurred exception is thrown. The second and
  +subsequent exceptions are ignored.
  +
  +The B<ex_defer> block I<BLOCK> is a regular B<ISO-C> language statement
  +block, but it is not allowed to jump into it via "C<goto>" or
  +C<longjmp>(3) or out of it via "C<break>", "C<return>", "C<goto>" or
  +C<longjmp>(3) because this would cause the deferral level to become out
  +of sync. Jumping into an B<ex_defer> clause would avoid increasing the
  +exception deferral level, and jumping out of it would avoid decreasing
  +it. In both cases the result is an incorrect exception deferral level.
  +Nevertheless you are allowed to nest B<ex_defer> clauses.
   
   =item B<ex_shield> I<BLOCK>
   
   This directive executes I<BLOCK> while shielding it against the throwing
   of exceptions, i.e., inside the dynamic scope of B<ex_shield> all
  -B<ex_throw> operations are silently ignored.
  +B<ex_throw> operations are just silently ignored.
   
   The B<ex_shield> block is a regular B<ISO-C> language statement block,
  -but it is not allowed to jump into it via C<goto> or C<longjmp>(3) or
  -out of it via C<break>, C<return>, C<goto> or C<longjmp>(3) because this
  -would cause the shielding level to become out of sync. Jumping into
  -an B<ex_shield> clause would avoid increasing the exception shielding
  -level, and jumping out of it would avoid decreasing it. In both cases
  -the result is an incorrect exception shielding level. Nevertheless you
  -are allowed to nest B<ex_shield> clauses.
  +but it is not allowed to jump into it via "C<goto>" or C<longjmp>(3)
  +or out of it via "C<break>", "C<return>", "C<goto>" or C<longjmp>(3)
  +because this would cause the shielding level to become out of sync.
  +Jumping into an B<ex_shield> clause would avoid increasing the exception
  +shielding level, and jumping out of it would avoid decreasing it.
  +In both cases the result is an incorrect exception shielding level.
  +Nevertheless you are allowed to nest B<ex_shield> clauses.
   
   =item B<ex_catching>
   
   This is a boolean flag which can be checked inside the dynamic scope
   of an B<ex_try> clause to test whether the current scope is exception
  -catching.
  +catching (see B<ex_try>/B<ex_catch> clause).
   
   =item B<ex_deferred>
   
   This is a boolean flag which can be checked inside the dynamic scope of
   an B<ex_defer> clause to test whether the current scope is exception
  -deferring.
  +deferring (see B<ex_defer> clause).
   
   =item B<ex_shielding>
   
   This is a boolean flag which can be checked inside the dynamic scope of
   an B<ex_shield> clause to test whether the current scope is exception
  -shielding.
  +shielding (see B<ex_shield> clause).
   
   =back
   
  @@ -311,7 +315,7 @@
   
   =back
   
  -The default implementation (define C<__EX_MCTX_SJLJ__> or as long
  +The default implementation (define C<__EX_MCTX_SJLJ__> or as long as
   C<__EX_MCTX_CUSTOM__> is not defined) uses the B<ISO-C> jmp_buf(3)
   facility:
   
  @@ -334,8 +338,9 @@
   
   By default, B<__ex_ctx> (which is B<__ex_ctx_default> as provided by
   F<libex>) returns a pointer to a static C<ex_ctx_t> context. For use in
  -multi-threading environments, this should be overwritten with a callback
  -function returning a per-thread context structure.
  +multi-threading environments, this should be overwritten with a
  +callback function returning a per-thread context structure (see section
  +B<MULTITHREADING ENVIRONMENTS> below).
   
   To initialize an exception context structure there are two macros
   defined: "B<EX_CTX_INITIALIZER>" for static initialization and
  @@ -347,15 +352,17 @@
   In case there is an exception thrown which is not caught by any
   B<ex_try>/B<ex_catch> clauses, B<OSSP ex> calls the callback "C<void
   (*>B<__ex_terminate>C<)(ex_t *)>". It receives a pointer to the
  -exception object which should have been thrown.
  +exception object which was thrown.
   
   By default, B<__ex_terminate> (which is B<__ex_terminate_default>
   as provided by F<libex>) prints a message of the form "C<**EX:
   UNCAUGHT EXCEPTION: class=0xXXXXXXXX object=0xXXXXXXXX value=0xXXXXXXX
   [xxxx:NNN:xxxx]>" to F<stderr> and then calls abort(3) in order to
   terminate the application. For use in multi-threading environments, this
  -should be overwritten with a callback function which terminates only the
  -current thread.
  +should be overwritten with a callback function which terminates only
  +the current thread. Even better, a real application always should have
  +a top-level B<ex_try>/B<ex_catch> clause in its "C<main()>" in order to
  +more gracefully terminate the application.
   
   =head2 Namespace Mapping
   
  @@ -395,7 +402,7 @@
        strcpy(cp1, "foo");
        strcpy(cp2, "bar");
    }
  - ex_clean {
  + ex_cleanup {
        if (cp3 != NULL) free(cp3);
        if (cp2 != NULL) free(cp2);
        if (cp1 != NULL) free(cp1);
  @@ -411,59 +418,59 @@
   
   =item B<01: variable scope>
   
  -Variables which are used in the B<ex_clean> or B<ex_catch> clauses
  +Variables which are used in the B<ex_cleanup> or B<ex_catch> clauses
   must be declared before the B<ex_try> clause, otherwise they only
   exist inside the B<ex_try> block. In the example above, C<cp1>, C<cp2>
   and C<cp3> are automatic variables and only exist in the block of the
  -B<ex_try> clause, the code in the B<ex_clean> and B<ex_catch> clauses
  +B<ex_try> clause, the code in the B<ex_cleanup> and B<ex_catch> clauses
   does not know anything about them.
   
   =item B<02: variable initialization>
   
  -Variables which are used in the B<ex_clean> or B<ex_catch> clauses must
  +Variables which are used in the B<ex_cleanup> or B<ex_catch> clauses must
   be initialized before the point of the first possible B<ex_throw> is
  -reached. In the example above, B<ex_clean> would have trouble using
  +reached. In the example above, B<ex_cleanup> would have trouble using
   C<cp3> if mallocex() throws a exception when allocating a C<TOOBIG>
   buffer.
   
   =item B<03: volatile variables>
   
  -Variables which are used in the B<ex_clean> or B<ex_catch> clauses
  -must be declared with the storage class C<volatile>, otherwise they
  +Variables which are used in the B<ex_cleanup> or B<ex_catch> clauses
  +must be declared with the storage class "C<volatile>", otherwise they
   might contain outdated information if B<ex_throw> throws an exception.
   If using a "free if unset" approach like the example does in the
  -B<ex_clean> clause, the variables must be initialized (see B<02>) I<and>
  +B<ex_cleanup> clause, the variables must be initialized (see B<02>) I<and>
   remain valid upon use.
   
   =item B<04: clean before catch>
   
  -The B<ex_clean> clause is not only written down before the B<ex_catch>
  +The B<ex_cleanup> clause is not only written down before the B<ex_catch>
   clause, it is also evaluated before the B<ex_catch> clause. So,
   resources being cleaned up must no longer be used in the B<ex_catch>
   block. The example above would have trouble referencing the character
  -strings in the printf(3) statement because these have been free(3)'d
  +strings in the printf(3) statement because these have been freed
   before.
   
   =item B<05: variable uninitialization>
   
   If resources are passed away and out of the scope of the
  -B<ex_try>/B<ex_clean>/B<ex_catch> construct and the variables were
  +B<ex_try>/B<ex_cleanup>/B<ex_catch> construct and the variables were
   initialized for using a "free if unset" approach then they must be
   uninitialized after being passed away. The example above would free(3)
  -C<cp1> in the B<ex_clean> clause if mallocex() throws an exception if
  +C<cp1> in the B<ex_cleanup> clause if mallocex() throws an exception if
   allocating a C<TOOBIG> buffer. The C<globalcontext-&gt;first> pointer
   hence becomes invalid.
   
   =back
   
  -As following is fixed version of the code (annotated with the pitfall
  +The following is fixed version of the code (annotated with the pitfall
   items for reference):
   
    /* GOOD EXAMPLE */
    { /*01*/
  -     volatile /*03*/ char *cp1 = NULL /*02*/;
  -     volatile /*03*/ char *cp2 = NULL /*02*/;
  -     volatile /*03*/ char *cp3 = NULL /*02*/;
  +     char * volatile /*03*/ cp1 = NULL /*02*/;
  +     char * volatile /*03*/ cp2 = NULL /*02*/;
  +     char * volatile /*03*/ cp3 = NULL /*02*/;
        try {
            cp1 = mallocex(SMALLAMOUNT);
            globalcontext->first = cp1;
  @@ -473,8 +480,8 @@
            strcpy(cp1, "foo");
            strcpy(cp2, "bar");
        }
  -     clean {
  -  /*04*/ printf("cp3=%s", cp3 == NULL /*02*/ ? "" : cp3);
  +     clean { /*04*/
  +         printf("cp3=%s", cp3 == NULL /*02*/ ? "" : cp3);
            if (cp3 != NULL)
                free(cp3);
            if (cp2 != NULL)
  @@ -487,13 +494,13 @@
        }
    }
   
  -An alternative fixed version could also be:
  +Alternatively, this could also be used:
   
  - /* ALTERNATE *05* GOOD EXAMPLE */
  + /* ALTERNATIVE GOOD EXAMPLE */
    { /*01*/
  -     volatile /*03*/ char *cp1 = NULL /*02*/;
  -     volatile /*03*/ char *cp2 = NULL /*02*/;
  -     volatile /*03*/ char *cp3 = NULL /*02*/;
  +     char * volatile /*03*/ cp1 = NULL /*02*/;
  +     char * volatile /*03*/ cp2 = NULL /*02*/;
  +     char * volatile /*03*/ cp3 = NULL /*02*/;
        try {
            cp1 = mallocex(SMALLAMOUNT);
            globalcontext->first = cp1;
  @@ -503,8 +510,8 @@
            strcpy(cp1, "foo");
            strcpy(cp2, "bar");
        }
  -     clean {
  -  /*04*/ printf("cp3=%s", cp3 == NULL /*02*/ ? "" : cp3);
  +     clean { /*04*/
  +         printf("cp3=%s", cp3 == NULL /*02*/ ? "" : cp3);
            if (cp3 != NULL)
                free(cp3);
            if (cp2 != NULL)
  @@ -518,7 +525,6 @@
        }
    }
   
  -
   =head1 MULTITHREADING ENVIRONMENTS
   
   B<OSSP ex> is designed to work both in single-threading and
  @@ -534,12 +540,12 @@
   =head2 GNU pth
   
   Using B<OSSP ex> together with B<GNU pth> is straight-forward, because
  -B<GNU pth> 1.5 (and higher) already has support for B<OSSP ex> built-in.
  +B<GNU pth> 2.0 (and higher) already has support for B<OSSP ex> built-in.
   All which is needed is that B<GNU pth> is configured with the B<GNU
   Autoconf> option C<--with-ex>. Then each B<GNU pth> user-space thread
  -has its own B<OSSP ex> exception context automatically. The default
  -of using B<ISO-C> jmp_buf(3) does not conflict with the thread
  -dispatching mechanisms used by B<GNU pth>.
  +has its own B<OSSP ex> exception context automatically. The default of
  +using B<ISO-C> jmp_buf(3) does not conflict with the thread dispatching
  +mechanisms used by B<GNU pth>.
   
   =head2 POSIX pthreads
   
  @@ -550,7 +556,7 @@
   terminates only the current thread. To get an impression, a small
   utility library for this follows:
   
  -=over 4
  +=over 2
   
   =item F<pthread_ex.h>
   
  @@ -560,7 +566,8 @@
    #include <pthread.h>
   
    int pthread_init_ex   (void);
  - int pthread_create_ex (pthread_t *, const pthread_attr_t *, void *(*)(void *), void *);
  + int pthread_create_ex (pthread_t *, const pthread_attr_t *,
  +                        void *(*)(void *), void *);
   
    #ifndef PTHREAD_EX_INTERNAL
    #define pthread_init   pthread_init_ex
  @@ -592,7 +599,8 @@
    /* callback: context fetching */
    static ex_ctx_t *pthread_ex_ctx(void)
    {
  -     return (ex_ctx_t *)pthread_getspecific(pthread_ex_ctx_key);
  +     return (ex_ctx_t *)
  +         pthread_getspecific(pthread_ex_ctx_key);
    }
   
    /* callback: termination */
  @@ -606,8 +614,10 @@
    {
        int rc;
   
  -     /* additionally create thread data key and override OSSP ex callbacks */
  -     pthread_key_create(&pthread_ex_ctx_key, pthread_ex_ctx_destroy);
  +     /* additionally create thread data key
  +        and override OSSP ex callbacks */
  +     pthread_key_create(&pthread_ex_ctx_key,
  +                        pthread_ex_ctx_destroy);
        __ex_ctx       = pthread_ex_ctx;
        __ex_terminate = pthread_ex_terminate;
   
  @@ -637,14 +647,18 @@
    }
   
    /* pthread_create() wrapper */
  - int pthread_create_ex(pthread_t *thread, const pthread_attr_t *attr, void *(*entry)(void *), void *arg)
  + int pthread_create_ex(pthread_t *thread,
  +                       const pthread_attr_t *attr,
  +                       void *(*entry)(void *), void *arg)
    {
        pthread_create_ex_t wrapper;
   
  -     /* spawn thread but execute start function through wrapper */
  +     /* spawn thread but execute start
  +        function through wrapper */
        wrapper.entry = entry;
        wrapper.arg   = arg;
  -     return pthread_create(thread, attr, pthread_create_wrapper, &wrapper);
  +     return pthread_create(thread, attr,
  +                           pthread_create_wrapper, &wrapper);
    }
   
   =back
  @@ -748,7 +762,7 @@
   
   You can achieve this very easily by changing the library as following:
   
  -=over 4
  +=over 2
   
   =item F<foo.h>
   
  @@ -832,7 +846,7 @@
   and Cosmin Truta E<lt>cosmin@cs.toronto.eduE<gt>.
   
   The B<cleanup> clause was inspired by the B<Java> C<finally> clause.
  -The B<shield> feature was inspired by an C<errno> shielding facility
  +The B<shield> feature was inspired by an "C<errno>" shielding facility
   used in the B<GNU pth> implementation. The B<defer> feature was invented
   to simplify an application's cleanup handling if multiple independent
   resources are allocated and have to be freed on error.
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 30 11:59:35 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6B62876827; Thu, 30 Jan 2003 11:59:35 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex/ ChangeLog ex.h
Message-Id: <20030130105935.6B62876827@mail.ossp.org>
Date: Thu, 30 Jan 2003 11:59:35 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Jan-2003 11:59:35
  Branch: HEAD                             Handle: 2003013010593400

  Modified files:
    ossp-pkg/ex             ChangeLog ex.h

  Log:
    Fixed the implementation of the ex_cleanup clause.
    
    Submitted by: A Makarov <makarov@tecon.ru>

  Summary:
    Revision    Changes     Path
    1.6         +3  -0      ossp-pkg/ex/ChangeLog
    1.20        +5  -7      ossp-pkg/ex/ex.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ChangeLog
  --- ossp-pkg/ex/ChangeLog	30 Jan 2003 10:23:12 -0000	1.5
  +++ ossp-pkg/ex/ChangeLog	30 Jan 2003 10:59:34 -0000	1.6
  @@ -16,6 +16,9 @@
      *) Polished and enhanced the manual page ex(3).
         [Ralf S. Engelschall]
   
  +   *) Fixed the implementation of the ex_cleanup clause.
  +      [A Makarov <makarov@tecon.ru>]
  +
     Changes between 1.0.0 and 1.0.1 (08-Mar-2002 to 06-Jan-2003)
   
      *) Adjusted copyright messages to include new year 2003.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ex.h
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 ex.h
  --- ossp-pkg/ex/ex.h	6 Jan 2003 15:31:24 -0000	1.19
  +++ ossp-pkg/ex/ex.h	30 Jan 2003 10:59:34 -0000	1.20
  @@ -100,13 +100,12 @@
       int           ctx_shielding;/* permanent counter of exception shielding level */
       int           ctx_shield;   /* temporary flag for exception shielding macro */
       int           ctx_caught;   /* temporary flag whether exception was caught */
  -    int           ctx_cleanup;  /* temporary flag whether cleanup block was present */
       volatile ex_t ctx_ex;       /* temporary exception storage */
   } ex_ctx_t;
   
   /* the static and dynamic initializers for a context structure */
   #define EX_CTX_INITIALIZER \
  -    { NULL, 0, 0, 0, 0, 0, 0, 0, { NULL, NULL, NULL, NULL, 0, NULL } }
  +    { NULL, 0, 0, 0, 0, 0, 0, { NULL, NULL, NULL, NULL, 0, NULL } }
   #define EX_CTX_INITIALIZE(ctx) \
       do { \
           (ctx)->ctx_mctx         = NULL; \
  @@ -116,7 +115,6 @@
           (ctx)->ctx_shielding    = 0;    \
           (ctx)->ctx_shield       = 0;    \
           (ctx)->ctx_caught       = 0;    \
  -        (ctx)->ctx_cleanup      = 0;    \
           (ctx)->ctx_ex.ex_class  = NULL; \
           (ctx)->ctx_ex.ex_object = NULL; \
           (ctx)->ctx_ex.ex_value  = NULL; \
  @@ -139,11 +137,11 @@
   #define ex_try \
       { \
           ex_ctx_t *__ex_ctx_ptr = __ex_ctx(); \
  +        int __ex_cleanup = 0; \
           __ex_mctx_t *__ex_mctx_en; \
           __ex_mctx_t __ex_mctx_me; \
           __ex_mctx_en = __ex_ctx_ptr->ctx_mctx; \
           __ex_ctx_ptr->ctx_mctx = &__ex_mctx_me; \
  -        __ex_ctx_ptr->ctx_cleanup = 0; \
           if (__ex_mctx_save(&__ex_mctx_me)) { \
               if (1)
   
  @@ -158,7 +156,7 @@
               __ex_ctx_ptr->ctx_caught = 1; \
           } \
           __ex_ctx_ptr->ctx_mctx = __ex_mctx_en; \
  -        __ex_ctx()->ctx_cleanup = 1; \
  +        __ex_cleanup = 1; \
           if (1) { \
               if (1)
   
  @@ -166,11 +164,11 @@
   #define ex_catch(e) \
               else { \
               } \
  -            if (!(__ex_ctx()->ctx_cleanup)) \
  +            if (!(__ex_cleanup)) \
                   __ex_ctx_ptr->ctx_caught = 0; \
           } \
           else { \
  -            if (!(__ex_ctx()->ctx_cleanup)) { \
  +            if (!(__ex_cleanup)) { \
                   __ex_mctx_restored(&__ex_mctx_me); \
                   __ex_ctx_ptr->ctx_caught = 1; \
               } \
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 30 12:02:39 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 27F977681C; Thu, 30 Jan 2003 12:02:39 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex/ THANKS
Message-Id: <20030130110239.27F977681C@mail.ossp.org>
Date: Thu, 30 Jan 2003 12:02:39 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Jan-2003 12:02:39
  Branch: HEAD                             Handle: 2003013011023800

  Modified files:
    ossp-pkg/ex             THANKS

  Log:
    give credit

  Summary:
    Revision    Changes     Path
    1.3         +1  -0      ossp-pkg/ex/THANKS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/THANKS
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 THANKS
  --- ossp-pkg/ex/THANKS	6 Jan 2003 15:31:24 -0000	1.2
  +++ ossp-pkg/ex/THANKS	30 Jan 2003 11:02:38 -0000	1.3
  @@ -14,5 +14,6 @@
   
     Michael van Elst    <mlelstv@dev.de.cw.net>
     Thomas Lotterer     <thomas@lotterer.net>
  +  A Makarov           <makarov@tecon.ru>
     Michael Schloh      <michael@schloh.com>
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 30 12:03:07 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 01D73768D5; Thu, 30 Jan 2003 12:03:06 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex/ README VERSION
Message-Id: <20030130110306.01D73768D5@mail.ossp.org>
Date: Thu, 30 Jan 2003 12:03:06 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Jan-2003 12:03:06
  Branch: HEAD                             Handle: 2003013011030600

  Modified files:
    ossp-pkg/ex             README VERSION

  Log:
    bump for release

  Summary:
    Revision    Changes     Path
    1.10        +1  -1      ossp-pkg/ex/README
    1.6         +1  -1      ossp-pkg/ex/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/README
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 README
  --- ossp-pkg/ex/README	30 Jan 2003 10:23:12 -0000	1.9
  +++ ossp-pkg/ex/README	30 Jan 2003 11:03:06 -0000	1.10
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     \___/_/\_\
   
     OSSP ex - Exception Handling
  -  Version 1.0.1 (06-Jan-2003)
  +  Version 1.0.2 (30-Jan-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/VERSION
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 VERSION
  --- ossp-pkg/ex/VERSION	6 Jan 2003 15:32:27 -0000	1.5
  +++ ossp-pkg/ex/VERSION	30 Jan 2003 11:03:06 -0000	1.6
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP ex (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP ex, Version 1.0.1 (06-Jan-2003)
  +  This is OSSP ex, Version 1.0.2 (30-Jan-2003)
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 30 12:04:43 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B03077681C; Thu, 30 Jan 2003 12:04:43 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex/ Makefile.in README aclocal.m4 configure.ac ex...
Message-Id: <20030130110443.B03077681C@mail.ossp.org>
Date: Thu, 30 Jan 2003 12:04:43 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Jan-2003 12:04:43
  Branch: HEAD                             Handle: 2003013011044200

  Modified files:
    ossp-pkg/ex             Makefile.in README aclocal.m4 configure.ac
                            ex-config.in ex.c ex.h ex.pod ex_test.c ts.c ts.h

  Log:
    final polishing

  Summary:
    Revision    Changes     Path
    1.8         +1  -1      ossp-pkg/ex/Makefile.in
    1.11        +4  -4      ossp-pkg/ex/README
    1.4         +1  -1      ossp-pkg/ex/aclocal.m4
    1.7         +1  -1      ossp-pkg/ex/configure.ac
    1.5         +1  -1      ossp-pkg/ex/ex-config.in
    1.9         +1  -1      ossp-pkg/ex/ex.c
    1.21        +1  -1      ossp-pkg/ex/ex.h
    1.28        +1  -1      ossp-pkg/ex/ex.pod
    1.12        +1  -1      ossp-pkg/ex/ex_test.c
    1.3         +1  -1      ossp-pkg/ex/ts.c
    1.2         +1  -1      ossp-pkg/ex/ts.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 Makefile.in
  --- ossp-pkg/ex/Makefile.in	6 Jan 2003 15:31:24 -0000	1.7
  +++ ossp-pkg/ex/Makefile.in	30 Jan 2003 11:04:42 -0000	1.8
  @@ -2,7 +2,7 @@
   ##  OSSP ex - Exception Handling
   ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP ex, an exception handling library
   ##  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/README
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 README
  --- ossp-pkg/ex/README	30 Jan 2003 11:03:06 -0000	1.10
  +++ ossp-pkg/ex/README	30 Jan 2003 11:04:42 -0000	1.11
  @@ -25,15 +25,15 @@
     The OSSP ex facility also provides advanced exception handling
     features like shielded and deferred exceptions. Additionally, OSSP ex
     allows you to choose the used underlying machine context switching
  -  facility (jmp_buf(3), sigjmp_buf(3), ucontext(3), etc) and optionally
  -  support multi-threading environments by allowing you to store the
  -  exception catching stack in a thread-safe way.
  +  facility and optionally support multi-threading environments by
  +  allowing you to store the exception catching stack in a thread-safe
  +  way.
   
     COPYRIGHT AND LICENSE
   
     Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
     Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   
     This file is part of OSSP ex, an exception handling library which
     can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 aclocal.m4
  --- ossp-pkg/ex/aclocal.m4	6 Jan 2003 15:31:24 -0000	1.3
  +++ ossp-pkg/ex/aclocal.m4	30 Jan 2003 11:04:42 -0000	1.4
  @@ -2,7 +2,7 @@
   dnl ##  OSSP ex - Exception Handling
   dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP ex, an exception handling library
   dnl ##  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/configure.ac
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 configure.ac
  --- ossp-pkg/ex/configure.ac	6 Jan 2003 15:31:24 -0000	1.6
  +++ ossp-pkg/ex/configure.ac	30 Jan 2003 11:04:42 -0000	1.7
  @@ -2,7 +2,7 @@
   dnl ##  OSSP ex - Exception Handling
   dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP ex, an exception handling library
   dnl ##  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ex-config.in
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ex-config.in
  --- ossp-pkg/ex/ex-config.in	6 Jan 2003 15:31:24 -0000	1.4
  +++ ossp-pkg/ex/ex-config.in	30 Jan 2003 11:04:42 -0000	1.5
  @@ -3,7 +3,7 @@
   ##  OSSP ex - Exception Handling
   ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP ex, an exception handling library
   ##  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ex.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 ex.c
  --- ossp-pkg/ex/ex.c	6 Jan 2003 15:31:24 -0000	1.8
  +++ ossp-pkg/ex/ex.c	30 Jan 2003 11:04:42 -0000	1.9
  @@ -2,7 +2,7 @@
   **  OSSP ex - Exception Handling
   **  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   **  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP ex, an exception handling library
   **  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ex.h
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 ex.h
  --- ossp-pkg/ex/ex.h	30 Jan 2003 10:59:34 -0000	1.20
  +++ ossp-pkg/ex/ex.h	30 Jan 2003 11:04:42 -0000	1.21
  @@ -2,7 +2,7 @@
   **  OSSP ex - Exception Handling
   **  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   **  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP ex, an exception handling library
   **  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ex.pod
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 ex.pod
  --- ossp-pkg/ex/ex.pod	30 Jan 2003 10:23:12 -0000	1.27
  +++ ossp-pkg/ex/ex.pod	30 Jan 2003 11:04:42 -0000	1.28
  @@ -2,7 +2,7 @@
   ##  OSSP ex - Exception Handling
   ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP ex, an exception library
   ##  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ex_test.c
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 ex_test.c
  --- ossp-pkg/ex/ex_test.c	6 Jan 2003 15:31:24 -0000	1.11
  +++ ossp-pkg/ex/ex_test.c	30 Jan 2003 11:04:42 -0000	1.12
  @@ -2,7 +2,7 @@
   **  OSSP ex - Exception Handling
   **  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   **  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP ex, an exception handling library
   **  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ts.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ts.c
  --- ossp-pkg/ex/ts.c	8 Mar 2002 22:54:28 -0000	1.2
  +++ ossp-pkg/ex/ts.c	30 Jan 2003 11:04:42 -0000	1.3
  @@ -2,7 +2,7 @@
   **  TS - OSSP Test Suite Library
   **  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
   **  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2002 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP TS, a small test suite library which
   **  can be found at http://www.ossp.org/pkg/ts/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ts.h
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ts.h
  --- ossp-pkg/ex/ts.h	26 Jan 2002 20:12:19 -0000	1.1
  +++ ossp-pkg/ex/ts.h	30 Jan 2003 11:04:42 -0000	1.2
  @@ -2,7 +2,7 @@
   **  TS - OSSP Test Suite Library
   **  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
   **  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2002 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP TS, a small test suite library which
   **  can be found at http://www.ossp.org/pkg/ts/.
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 30 13:49:05 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B7E66768D0; Thu, 30 Jan 2003 13:49:04 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ex/ index.wml ossp...
Message-Id: <20030130124904.B7E66768D0@mail.ossp.org>
Date: Thu, 30 Jan 2003 13:49:04 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   30-Jan-2003 13:49:04
  Branch: HEAD                             Handle: 2003013012490202

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/ex     index.wml

  Log:
    release OSSP ex 1.0.2

  Summary:
    Revision    Changes     Path
    1.49        +1  -0      ossp-web/new/news.txt
    1.8         +2  -2      ossp-web/pkg/lib/ex/index.wml
    1.46        +1  -1      ossp-web/pkg/lib/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.48 -r1.49 news.txt
  --- ossp-web/new/news.txt	28 Jan 2003 14:03:00 -0000	1.48
  +++ ossp-web/new/news.txt	30 Jan 2003 12:49:02 -0000	1.49
  @@ -1,3 +1,4 @@
  +30-Jan-2003: Released L<OSSP ex> 1.0.2
   28-Jan-2003: Released L<OSSP sa> 1.0.4
   28-Jan-2003: Released L<OSSP fsl> 1.0.7
   06-Jan-2003: Released L<OSSP sa> 1.0.3
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/ex/index.wml
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 index.wml
  --- ossp-web/pkg/lib/ex/index.wml	6 Jan 2003 15:36:38 -0000	1.7
  +++ ossp-web/pkg/lib/ex/index.wml	30 Jan 2003 12:49:04 -0000	1.8
  @@ -37,7 +37,7 @@
   
   <pkg_status
       name="ex" assign="rse"
  -    stable="1.0.1"   stable_date="06-Jan-2003"
  +    stable="1.0.2"   stable_date="30-Jan-2003"
       unstable="none"  unstable_date=""
   	done=100>
   
  @@ -48,7 +48,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/ex/
       directory=$(FTP_ROOT_DIR)/pkg/lib/ex/
       files="ex-*.tar.gz" 
  -	stable="ex-1.0.1.tar.gz" unstable="none">
  +	stable="ex-1.0.2.tar.gz" unstable="none">
   
   <h2>Donation</h2>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.45 -r1.46 index.wml
  --- ossp-web/pkg/lib/index.wml	28 Jan 2003 14:03:01 -0000	1.45
  +++ ossp-web/pkg/lib/index.wml	30 Jan 2003 12:49:03 -0000	1.46
  @@ -21,7 +21,7 @@
   			done=100 stable=1.2.2 unstable=none>
     <pkg_item name="ex" longname="OSSP ex" type="lib"
               desc="Exception Handling"
  -			done=100 stable=1.0.1 unstable=none>
  +			done=100 stable=1.0.2 unstable=none>
     <pkg_item name="sa" longname="OSSP sa" type="lib"
               desc="Socket Abstraction"
   			done=100 stable=1.0.4 unstable=none>
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 30 13:49:44 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5E443768D0; Thu, 30 Jan 2003 13:49:44 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/ex/ index.wml
Message-Id: <20030130124944.5E443768D0@mail.ossp.org>
Date: Thu, 30 Jan 2003 13:49:44 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   30-Jan-2003 13:49:44
  Branch: HEAD                             Handle: 2003013012494300

  Modified files:
    ossp-web/pkg/lib/ex     index.wml

  Log:
    more description

  Summary:
    Revision    Changes     Path
    1.9         +5  -2      ossp-web/pkg/lib/ex/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/ex/index.wml
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 index.wml
  --- ossp-web/pkg/lib/ex/index.wml	30 Jan 2003 12:49:04 -0000	1.8
  +++ ossp-web/pkg/lib/ex/index.wml	30 Jan 2003 12:49:43 -0000	1.9
  @@ -21,8 +21,11 @@
   are correctly passed back to the parent.
   
   <p>
  -Additionally the OSSP ex facility provides advanced exception handling
  -features like shielded and deferred exceptions.
  +The OSSP ex facility also provides advanced exception handling features like
  +shielded and deferred exceptions. Additionally, OSSP ex allows you to choose
  +the used underlying machine context switching facility and optionally support
  +multi-threading environments by allowing you to store the exception catching
  +stack in a thread-safe way.
   
   <h2>Documentation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 30 14:30:42 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 793F77681C; Thu, 30 Jan 2003 14:30:42 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_msg.c
Message-Id: <20030130133042.793F77681C@mail.ossp.org>
Date: Thu, 30 Jan 2003 14:30:42 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   30-Jan-2003 14:30:42
  Branch: HEAD                             Handle: 2003013013304100

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_msg.c

  Log:
    canonifydate requires a more complete lib_tai and is rescheduled for a
    later release

  Summary:
    Revision    Changes     Path
    1.30        +0  -125    ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 lmtp2nntp_msg.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	2 Jul 2002 07:49:01 -0000	1.29
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	30 Jan 2003 13:30:41 -0000	1.30
  @@ -562,128 +562,6 @@
       return rc;
   }
   
  -static var_rc_t canonifydate(
  -    val_t *prival,
  -    const char  *cpArg,  size_t nArg,
  -    const char  *cpVal,  size_t nVal,
  -          char **cppOut, size_t *pnOut, size_t *pnOutsize)
  -{
  -    /* RFC0822
  -     5.  DATE AND TIME SPECIFICATION
  -     5.1.  SYNTAX
  -
  -     date-time   =  [ day "," ] date time          ; "dd mm yy" or "hh:mm:ss zzz"
  -     day         =  "Mon" / "Tue" / "Wed" / "Thu" / "Fri" / "Sat" / "Sun"
  -     date        =  1*2DIGIT month 2DIGIT          ; day month year e.g. 20 Jun 82
  -     month       =  "Jan" / "Feb"/ "Mar" / "Apr"/ "May" / "Jun"/ "Jul" / "Aug"/ "Sep" / "Oct"/ "Nov" / "Dec"
  -     time        =  hour zone                      ; ANSI and Military
  -     hour        =  2DIGIT ":" 2DIGIT [":" 2DIGIT] ; 00:00:00 - 23:59:59
  -     zone        =  "UT"  / "GMT"                  ; Universal Time, North American : UT
  -                 /  "EST" / "EDT"                  ;  Eastern:  - 5/ - 4
  -                 /  "CST" / "CDT"                  ;  Central:  - 6/ - 5
  -                 /  "MST" / "MDT"                  ;  Mountain: - 7/ - 6
  -                 /  "PST" / "PDT"                  ;  Pacific:  - 8/ - 7
  -                 /  1ALPHA                         ; Military: Z = UT; A:-1; (J not used);  M:-12; N:+1; Y:+12
  -                 / ( ("+" / "-") 4DIGIT )          ; Local differential  hours+min. (HHMM)
  -    */
  -    tai_rc_t rv;
  -    int i;
  -    int bOk;
  -    char *fmt[] = {
  -        "%a, %d %b %Y %H:%M:%S %z", /* RFC0822 but four digit year */
  -        "%a, %d %b %y %H:%M:%S %z", /* RFC0822 strict */
  -        "%a, %d %b %Y %H:%M %z",    /* RFC0822 but four digit year */
  -        "%a, %d %b %y %H:%M %z",    /* RFC0822 strict */
  -        "%d %b %Y %H:%M:%S %z",     /* RFC0822 but four digit year */
  -        "%d %b %y %H:%M:%S %z",     /* RFC0822 strict */
  -        "%d %b %Y %H:%M %z",        /* RFC0822 but four digit year */
  -        "%d %b %y %H:%M %z",        /* RFC0822 strict */
  -        "%a %b %d %H:%M:%S %Y",     /* strange Mon Jan 27 12:34:56 2001 */
  -        NULL };
  -    tai_t *now;
  -    tai_t *pastrange;
  -    tai_t *futurerange;
  -    tai_t *value;
  -
  -    tai_create(&now);   /* FIXME ex */
  -    (void /*FIXME*/)tai_import(now, TAI_TYPE_UNIX);
  -
  -    /* parse argument ([past][,[future]])
  -        () (,)     infinite range in the past, infinite range in the future => canonify only
  -        (7), (7,)  seven days in the past, infinite range in the future
  -        (,3)       infinite range in the past, three days in the future
  -        (7,0)      seven days in the past, no point in future allowed
  -        (0,3)      no point in past allowed, three days in the future => useless
  -        (0,0)      now
  -     */
  -    pastrange   = NULL; /* infinite */
  -    futurerange = NULL; /* infinite */
  -    if (cpArg != NULL) {
  -        char *cpP, *cpF;
  -        cpP = strdupex(cpArg);
  -        cpF = strchr(cpP, ',');
  -        if (cpF == NULL)
  -            cpF = "";
  -        else
  -            *cpF++ = NUL;
  -        if (strlen(cpP) != 0) {
  -            tai_create(&pastrange);   /* FIXME ex */
  -            (void /*FIXME*/)tai_import(pastrange  , TAI_TYPE_SECONDS, 24*60*60*atoi(cpP));
  -        }
  -        if (strlen(cpF) != 0) {
  -            tai_create(&futurerange); /* FIXME ex */
  -            (void /*FIXME*/)tai_import(futurerange, TAI_TYPE_SECONDS, 24*60*60*atoi(cpF));
  -        }
  -        free(cpP);
  -    }
  -
  -    /* FIXME printf("DEBUG: cpVal=\"%41s\", cpArg=\"%s\"\n", cpVal, cpArg); */
  -    if ((cpVal == NULL) || (strlen(cpVal) == 0)) {
  -        *cppOut    = (char *)mallocex(DATELENMAX);
  -        *pnOutsize = DATELENMAX;
  -        (void /*FIXME*/)tai_format(now, *cppOut, DATELENMAX, "%a, %d %b %Y %H:%M:%S %z");
  -        *pnOut     = strlen(*cppOut);
  -    }
  -    else {
  -        tai_create(&value);   /* FIXME ex */
  -        bOk = FALSE;
  -        for (i = 0; !bOk && (fmt[i] != NULL); i++) {
  -            if ((rv = tai_parse(value, cpVal, strlen(cpVal), fmt[i])) == TAI_OK) 
  -                bOk = TRUE;
  -            /* FIXME printf("DEBUG: checked against \"%41s\" returned %d\n", fmt[i], rv); */
  -        }
  -        if (   bOk
  -#if 0
  -            tai_op is not yet implemented
  -            && ((pastrange   != NULL) && (tai_op(value, TAI_OP_GT, pastrange  ) == TAI_OK))
  -            && ((futurerange != NULL) && (tai_op(value, TAI_OP_LT, futurerange) == TAI_OK))
  -#endif
  -            ) {
  -            *cppOut    = (char *)mallocex(DATELENMAX);
  -            *pnOutsize = DATELENMAX;
  -            (void /*FIXME*/)tai_format(value, *cppOut, DATELENMAX, "%a, %d %b %Y %H:%M:%S %z");
  -            *pnOut     = strlen(*cppOut);
  -        }
  -        else {
  -            *cppOut    = "";
  -            *pnOutsize = 0;
  -            *pnOut     = 0;
  -        }
  -    }
  -
  -    /* cleanup */
  -    if(now != NULL)
  -        tai_destroy(now);
  -    if(pastrange != NULL)
  -        tai_destroy(pastrange);
  -    if(futurerange != NULL)
  -        tai_destroy(futurerange);
  -    if(value != NULL)
  -        tai_destroy(value);
  -
  -    return VAR_OK;
  -}
  -
   static var_rc_t createmessageid(
       val_t *prival,
       const char  *cpArg,  size_t nArg,
  @@ -758,9 +636,6 @@
   
       if (op_len == 15 && strncmp(op_ptr, "createmessageid", 15) == 0) {
           return createmessageid(prival, arg_ptr, arg_len, val_ptr, val_len, out_ptr, out_len, out_size);
  -    }
  -    else if (op_len == 12 && strncmp(op_ptr, "canonifydate", 12) == 0) {
  -        return canonifydate   (prival, arg_ptr, arg_len, val_ptr, val_len, out_ptr, out_len, out_size);
       }
       else 
           return VAR_ERR_UNDEFINED_OPERATION;
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 30 14:41:51 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 79DF27681C; Thu, 30 Jan 2003 14:41:51 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp.pod
Message-Id: <20030130134151.79DF27681C@mail.ossp.org>
Date: Thu, 30 Jan 2003 14:41:51 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   30-Jan-2003 14:41:51
  Branch: HEAD                             Handle: 2003013013415000

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.pod

  Log:
    update documentation

  Summary:
    Revision    Changes     Path
    1.38        +13 -9      ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 lmtp2nntp.pod
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.pod	18 Apr 2002 13:31:27 -0000	1.37
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.pod	30 Jan 2003 13:41:50 -0000	1.38
  @@ -202,26 +202,26 @@
   
   Functional diagram:
   
  -    for each rule
  +    foreach rule
           if rule has regex
  -            for each header
  +            foreach header
                   if regex matches
                       create new header
  -                    expanding regex references into header name
  +                    expand regex references into headername
                       if headername is empty
                           delete header
                       if headervalue is empty
                           delete header
  -                    expanding regex references into header value
  -                    expanding variables into header value
  +                    expand regex references into headervalue
  +                    expand variables into headervalue
                       if headervalue is empty
                           delete header
  -                    replace existing header //FIXME text above
  -        else
  +                    replace existing header
  +        else (= rule has no regex)
               create new header
               if headervalue is empty
                   delete header
  -            expanding variables into header value
  +            expand variables into headervalue
               replace existing or append new header
   
   Further reading:
  @@ -236,7 +236,11 @@
   this yields the first element. Other elements can be accessed through
   '${option.I<optionname>[I<index>]}'. All headers can be accessed through
   '${msg.header.I<headername>}' and again, indexes are supported for
  -multivalued headers.  FIXME functions
  +multivalued headers.
  +
  +Inside variables, functions can be access through '%functionname'.
  +Currently, only %createmessageid is available which creates a value
  +properly suitable for a Message-ID: header.
   
   =item B<--include|-i> I<configfile>
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 30 14:44:21 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 533167681C; Thu, 30 Jan 2003 14:44:21 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ sio_test.c
Message-Id: <20030130134421.533167681C@mail.ossp.org>
Date: Thu, 30 Jan 2003 14:44:21 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   30-Jan-2003 14:44:21
  Branch: HEAD                             Handle: 2003013013442000

  Modified files:
    ossp-pkg/sio            sio_test.c

  Log:
    functional multiplex test for reading

  Summary:
    Revision    Changes     Path
    1.9         +519 -2     ossp-pkg/sio/sio_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_test.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 sio_test.c
  --- ossp-pkg/sio/sio_test.c	20 Jan 2003 19:13:39 -0000	1.8
  +++ ossp-pkg/sio/sio_test.c	30 Jan 2003 13:44:20 -0000	1.9
  @@ -33,11 +33,15 @@
   #endif
   
   #include <stdio.h>
  +#include <stdlib.h>
   #include <string.h>
   #include <fcntl.h>
   #include <errno.h>
   #include <unistd.h>
   
  +#include <sys/types.h>
  +#include <sys/wait.h>
  +
   #include "ts.h"
   #include "al.h"
   #include "sio.h"
  @@ -69,13 +73,17 @@
       block \
       if (rc != rc0) \
           ts_test_fail(TS_CTX, "%s -> %d[%s] (expected %d[%s])\n", \
  -            rc, sio_error(rc), rc0, sio_error(rc0))
  +            name, rc, sio_error(rc), rc0, sio_error(rc0))
   
   #define EVAL0(name,block) EVAL(name,rc,SIO_OK,block)
   
  +sio_rc_t readloop(sio_t *, char *, size_t, size_t *);
  +int test_sio_pipe_read(ts_test_t *, int, int);
  +int test_sio_pipe_write(ts_test_t *, int, int);
  +
   sio_rc_t readloop(sio_t *sio, char *buf, size_t len, size_t *actualp)
   {
  -    sio_rc_t rc;
  +    sio_rc_t rc = SIO_OK;
       size_t actual, total = 0;
   
       while (len > 0) {
  @@ -322,21 +330,530 @@
       });
   }
   
  +int test_sio_pipe_read(ts_test_t *_t, int fd, int wcount)
  +{
  +    int error = 0, result = -1;
  +    sio_rc_t rc;
  +    sio_t *sio;
  +    sio_stage_t *sios_buffer, *sios_fd;
  +    size_t bufsize =  987;     /* output buffer size */
  +    size_t buflen  =   64;     /* fd input buffer size */
  +    int i;
  +    char S[] = "Hello world\n";
  +    char buf[sizeof(S)];
  +    size_t actual, len = strlen(S);
  +
  +    EVAL0("sio_create", {
  +        rc = sio_create(&sio);
  +    });
  +    if (rc != SIO_OK) return -1;
  +    EVAL0("sio_create_stage(&sios_fd)", {
  +        rc = sio_create_stage(sio, &sio_module_fd, &sios_fd);
  +    });
  +    if (rc != SIO_OK) return -1;
  +    EVAL0("sio_create_stage(&sios_buffer)", {
  +        rc = sio_create_stage(sio, &sio_module_buffer, &sios_buffer);
  +    });
  +    if (rc != SIO_OK) return -1;
  +
  +    EVAL0("sio_configure_stage(sios_fd, buflen)", {
  +        rc = sio_configure_stage(sio, sios_fd, "buflen", &buflen);
  +    });
  +    if (rc != SIO_OK) return -1;
  +    EVAL0("sio_configure_stage(sios_buffer)", {
  +        rc = sio_configure_stage(sio, sios_buffer, "outputsize", &buflen);
  +    });
  +    if (rc != SIO_OK) return -1;
  +    EVAL0("sio_configure_stage(sios_buffer, inputsize)", {
  +        rc = sio_configure_stage(sio, sios_buffer, "inputsize", &bufsize);
  +    });
  +    if (rc != SIO_OK) return -1;
  +
  +    EVAL0("sio_configure_stage(sios_fd, fd)", {
  +        rc = sio_configure_stage(sio, sios_fd, "fd", &fd);
  +    });
  +    if (rc != SIO_OK) goto badread;
  +
  +    EVAL0("sio_attach(sios_fd)", {
  +        rc = sio_attach(sio, sios_fd, SIO_MODE_READWRITE);
  +    });
  +    if (rc != SIO_OK) goto badread;
  +    EVAL0("sio_attach(sios_buffer)", {
  +        rc = sio_attach(sio, sios_buffer, SIO_MODE_READWRITE);
  +    });
  +    if (rc != SIO_OK) goto badread2;
  +
  +    for (i=0; i<wcount; ++i) {
  +        EVAL0("sio_read", {
  +            rc = readloop(sio, buf, len, &actual);
  +        });
  +        if (rc != SIO_OK) error = 1;
  +        if (rc != SIO_OK) break;
  +        if (actual != len) {
  +            ts_test_fail(TS_CTX, "sio_read result %d (expected %d)\n",
  +                (int)actual, (int)len);
  +            break;
  +        }
  +        buf[actual] = '\0';
  +        if (strcmp(buf, S)) {
  +            ts_test_fail(TS_CTX, "sio_read data mismatch at loop %d\n",
  +                i);
  +            break;
  +        }
  +    }
  +
  +    EVAL0("sio_detach(sios_buffer)", {
  +        rc = sio_detach(sio, sios_buffer);
  +    });
  +    if (rc != SIO_OK) error = 1;
  +
  +    result = error;
  +
  +    badread2:
  +
  +    EVAL0("sio_detach(sios_fd)", {
  +        rc = sio_detach(sio, sios_fd);
  +    });
  +    if (rc != SIO_OK) result = -1;
  +
  +    badread:
  +
  +    EVAL0("sio_destroy_stage", {
  +        rc = sio_destroy_stage(sio, sios_buffer);
  +    });
  +    if (rc != SIO_OK) result = -1;
  +    EVAL0("sio_destroy_stage(sios_fd)", {
  +        rc = sio_destroy_stage(sio, sios_fd);
  +    });
  +    if (rc != SIO_OK) result = -1;
  +    EVAL0("sio_destroy", {
  +        rc = sio_destroy(sio);
  +    });
  +    if (rc != SIO_OK) result = -1;
  +
  +    return result;
  +}
  +
  +int test_sio_pipe_write(ts_test_t *_t, int fd, int wcount)
  +{
  +    int error = 0, result = -1;
  +    sio_rc_t rc;
  +    sio_t *sio;
  +    sio_stage_t *sios_buffer, *sios_fd;
  +    size_t bufsize = 1003;     /* output buffer size */
  +    size_t buflen  =   47;     /* fd input buffer size */
  +    int i;
  +    char S[] = "Hello world\n";
  +    size_t actual, len = strlen(S);
  +
  +    EVAL0("sio_create", {
  +        rc = sio_create(&sio);
  +    });
  +    if (rc != SIO_OK) return -1;
  +    EVAL0("sio_create_stage(&sios_fd)", {
  +        rc = sio_create_stage(sio, &sio_module_fd, &sios_fd);
  +    });
  +    if (rc != SIO_OK) return -1;
  +    EVAL0("sio_create_stage(&sios_buffer)", {
  +        rc = sio_create_stage(sio, &sio_module_buffer, &sios_buffer);
  +    });
  +    if (rc != SIO_OK) return -1;
  +
  +    EVAL0("sio_configure_stage(sios_fd, buflen)", {
  +        rc = sio_configure_stage(sio, sios_fd, "buflen", &buflen);
  +    });
  +    if (rc != SIO_OK) return -1;
  +    EVAL0("sio_configure_stage(sios_buffer)", {
  +        rc = sio_configure_stage(sio, sios_buffer, "outputsize", &buflen);
  +    });
  +    if (rc != SIO_OK) return -1;
  +    EVAL0("sio_configure_stage(sios_buffer, inputsize)", {
  +        rc = sio_configure_stage(sio, sios_buffer, "inputsize", &bufsize);
  +    });
  +    if (rc != SIO_OK) return -1;
  +
  +    /*
  +     * WRITE phase
  +     */
  +
  +    EVAL0("sio_configure_stage(sios_fd, fd)", {
  +        rc = sio_configure_stage(sio, sios_fd, "fd", &fd);
  +    });
  +    if (rc != SIO_OK) goto badwrite;
  +    EVAL0("sio_attach(sios_fd)", {
  +        rc = sio_attach(sio, sios_fd, SIO_MODE_READWRITE);
  +    });
  +    if (rc != SIO_OK) goto badwrite;
  +    EVAL0("sio_attach(sios_buffer)", {
  +        rc = sio_attach(sio, sios_buffer, SIO_MODE_READWRITE);
  +    });
  +    if (rc != SIO_OK) goto badwrite2;
  +
  +    for (i=0; i<wcount; ++i) {
  +        EVAL0("sio_write", {
  +            rc = sio_write(sio, S, len, &actual);
  +        });
  +        if (rc != SIO_OK) error = 1;
  +        if (rc != SIO_OK) break;
  +        if (actual != len) {
  +            ts_test_fail(TS_CTX, "sio_write result %d (expected %d)\n",
  +                (int)actual, (int)len);
  +            break;
  +        }
  +    }
  +
  +    EVAL0("sio_push", {
  +        rc = sio_push(sio);
  +    });
  +    if (rc != SIO_OK) error = 1;
  +
  +    EVAL0("sio_detach(sios_buffer)", {
  +        rc = sio_detach(sio, sios_buffer);
  +    });
  +    if (rc != SIO_OK) error = 1;
  +
  +    result = error;
  +
  +    badwrite2:
  +    EVAL0("sio_detach(sios_fd)", {
  +        rc = sio_detach(sio, sios_fd);
  +    });
  +    if (rc != SIO_OK) result = -1;
  +
  +    badwrite:
  +
  +    /*
  +     * common cleanup
  +     */
  +
  +    EVAL0("sio_destroy_stage", {
  +        rc = sio_destroy_stage(sio, sios_buffer);
  +    });
  +    if (rc != SIO_OK) result = -1;
  +    EVAL0("sio_destroy_stage(sios_fd)", {
  +        rc = sio_destroy_stage(sio, sios_fd);
  +    });
  +    if (rc != SIO_OK) result = -1;
  +    EVAL0("sio_destroy", {
  +        rc = sio_destroy(sio);
  +    });
  +    if (rc != SIO_OK) result = -1;
  +
  +    return result;
  +}
  +
   TS_TEST(test_sio_pipe)
   {
  +    pid_t child;
  +    int pd[2];
  +    int wcount = 147;
  +    int status;
  +
  +    fflush(stdout);
  +    fflush(stderr);
  +
  +    if (pipe(pd) == -1) {
  +        ts_test_fail(TS_CTX, "cannot create pipe (%s)\n",
  +            strerror(errno));
  +    }
  +
  +    child = fork();
  +    if (child == -1) {
  +        ts_test_fail(TS_CTX, "cannot fork (%s)\n",
  +            strerror(errno));
  +    }
  +
  +    if (child == 0) {
  +        int result;
  +        close(pd[1]);
  +        result = test_sio_pipe_write(NULL, pd[0], wcount);
  +        close(pd[0]);
  +        exit(result ? 1 : 0);
  +    } else {
  +        close(pd[0]);
  +        test_sio_pipe_read(_t, pd[1], wcount);
  +        close(pd[1]);
  +        waitpid(child, &status, 0);
  +        if (status != 0) {
  +            ts_test_fail(TS_CTX, "child returned status %08lx\n",
  +                status);
  +        }
  +    }
   }
   
   TS_TEST(test_sio_sio)
   {
  +    sio_rc_t rc;
  +    sio_t *A_sio;
  +    sio_stage_t *A_sios_sillymux;
  +    sio_stage_t *A_sios_fd;
  +    sio_t *B_sio;
  +    sio_stage_t *B_sios_sio;
  +    sio_t *C_sio;
  +    sio_stage_t *C_sios_sio;
  +    size_t buflen  = 53;
  +    int i,wcount = 100;
  +    char SO[] = "Hello world\n";
  +    size_t lenodd = strlen(SO);
  +    char SE[] = "Goodbye cruel world\n";
  +    size_t leneven = strlen(SE);
  +    size_t actual;
  +    al_label_t ODD  = (al_label_t)1;
  +    al_label_t EVEN = (al_label_t)2;
  +    char tempfile[] = "./sio_test_tmpfile.XXXXXX";
  +    int fd;
  +    int neven, nodd;
  +    int ceven, codd;
  +
  +    mktemp(tempfile);
  +    fd = open(tempfile, O_CREAT|O_EXCL|O_RDWR, 0600);
  +    if (fd < 0) {
  +        ts_test_fail(TS_CTX, "cannot create temporary file \"%s\" (%s)\n",
  +            tempfile, strerror(errno));
  +        return;
  +    }
  +
  +    for (i=0; i<wcount; ++i) {
  +        if (write(fd, SO, lenodd) != lenodd ||
  +            write(fd, SE, leneven) != leneven) {
  +            ts_test_fail(TS_CTX, "cannot write temporary file \"%s\" (%s)\n",
  +                tempfile, strerror(errno));
  +            goto close_and_cleanup;
  +        }
  +    }
  +
  +    if (lseek(fd, (off_t)0, SEEK_SET) == -1) {
  +            ts_test_fail(TS_CTX, "cannot rewind temporary file \"%s\" (%s)\n",
  +                tempfile, strerror(errno));
  +            goto close_and_cleanup;
  +    }
  +
  +    /*
  +     * create MUX stream
  +     */
  +    EVAL0("sio_create(&A_sio)", {
  +        rc = sio_create(&A_sio);
  +    });
  +    if (rc != SIO_OK) return;
  +    EVAL0("sio_create_stage(&A_sios_fd)", {
  +        rc = sio_create_stage(A_sio, &sio_module_fd, &A_sios_fd);
  +    });
  +    if (rc != SIO_OK) return;
  +    EVAL0("sio_configure_stage(A_sios_fd, fd)", {
  +        rc = sio_configure_stage(A_sio, A_sios_fd, "fd", &fd);
  +    });
  +    if (rc != SIO_OK) return;
  +    EVAL0("sio_configure_stage(A_sios_fd, buflen)", {
  +        rc = sio_configure_stage(A_sio, A_sios_fd, "buflen", &buflen);
  +    });
  +    if (rc != SIO_OK) return;
  +    EVAL0("sio_create_stage(&A_sios_sillymux)", {
  +        rc = sio_create_stage(A_sio, &sio_module_sillymux, &A_sios_sillymux);
  +    });
  +    if (rc != SIO_OK) return;
  +    EVAL0("sio_configure_stage(A_sios_sillymux, oddlabel)", {
  +        rc = sio_configure_stage(A_sio, A_sios_sillymux, "oddlabel", ODD);
  +    });
  +    if (rc != SIO_OK) return;
  +    EVAL0("sio_configure_stage(A_sios_sillymux, evenlabel)", {
  +        rc = sio_configure_stage(A_sio, A_sios_sillymux, "evenlabel", EVEN);
  +    });
  +    if (rc != SIO_OK) return;
  +    EVAL0("sio_attach(A_sios_fd)", {
  +        rc = sio_attach(A_sio, A_sios_fd, SIO_MODE_READWRITE);
  +    });
  +    if (rc != SIO_OK) return;
  +    EVAL0("sio_attach(A_sios_sillymux)", {
  +        rc = sio_attach(A_sio, A_sios_sillymux, SIO_MODE_READWRITE);
  +    });
  +    if (rc != SIO_OK) return;
  +
  +    /*
  +     * create ODD stream
  +     */
  +    EVAL0("sio_create(&B_sio)", {
  +        rc = sio_create(&B_sio);
  +    });
  +    if (rc != SIO_OK) return;
  +    EVAL0("sio_create_stage(&B_sios_sio)", {
  +        rc = sio_create_stage(B_sio, &sio_module_sio, &B_sios_sio);
  +    });
  +    if (rc != SIO_OK) return;
  +    EVAL0("sio_configure_stage(B_sios_sio, upstream)", {
  +        rc = sio_configure_stage(B_sio, B_sios_sio, "upstream", A_sio);
  +    });
  +    if (rc != SIO_OK) return;
  +    EVAL0("sio_configure_stage(B_sios_sio, mydatalabel)", {
  +        rc = sio_configure_stage(B_sio, B_sios_sio, "mydatalabel", ODD);
  +    });
  +    if (rc != SIO_OK) return;
  +    EVAL0("sio_attach(B_sios_sio)", {
  +        rc = sio_attach(B_sio, B_sios_sio, SIO_MODE_READWRITE);
  +    });
  +    if (rc != SIO_OK) return;
  +
  +    /*
  +     * create EVEN stream
  +     */
  +    EVAL0("sio_create(&C_sio)", {
  +        rc = sio_create(&C_sio);
  +    });
  +    if (rc != SIO_OK) return;
  +    EVAL0("sio_create_stage(&C_sios_sio)", {
  +        rc = sio_create_stage(C_sio, &sio_module_sio, &C_sios_sio);
  +    });
  +    if (rc != SIO_OK) return;
  +    EVAL0("sio_configure_stage(C_sios_sio, upstream)", {
  +        rc = sio_configure_stage(C_sio, C_sios_sio, "upstream", A_sio);
  +    });
  +    if (rc != SIO_OK) return;
  +    EVAL0("sio_configure_stage(C_sios_sio, mydatalabel)", {
  +        rc = sio_configure_stage(C_sio, C_sios_sio, "mydatalabel", EVEN);
  +    });
  +    if (rc != SIO_OK) return;
  +    EVAL0("sio_attach(C_sios_sio)", {
  +        rc = sio_attach(C_sio, C_sios_sio, SIO_MODE_READWRITE);
  +    });
  +    if (rc != SIO_OK) return;
  +
  +    /*
  +     * read from both streams
  +     */
  +    nodd = neven = 0;
  +    codd = ceven = 0;
  +    while (nodd < wcount || neven < wcount) {
  +        char buf[17], *p;
  +        int nstreams = 2;
  +
  +        EVAL0("sio_read(B_sio)", {
  +            rc = readloop(B_sio, buf, sizeof(buf), &actual);
  +            if (rc == SIO_ERR_EOF) {
  +                --nstreams;
  +                rc = SIO_OK;
  +            }
  +        });
  +        if (rc != SIO_OK)
  +            break;
  +        p = buf;
  +        while (actual > 0) {
  +            int n = lenodd - codd;
  +            if (n > actual) n = actual;
  +            if (memcmp(p, SO + codd, n) != 0) {
  +                ts_test_fail(TS_CTX, "data mismatch on odd stream\n");
  +                break;
  +            }
  +            actual -= n;
  +            p      += n;
  +            codd   += n;
  +            if (codd >= lenodd) {
  +                codd = 0;
  +                ++nodd;
  +            }
  +        }
  +        if (actual > 0)
  +            break;
  +
  +        EVAL0("sio_read(C_sio)", {
  +            rc = readloop(C_sio, buf, sizeof(buf), &actual);
  +            if (rc == SIO_ERR_EOF) {
  +                --nstreams;
  +                rc = SIO_OK;
  +            }
  +        });
  +        if (rc != SIO_OK)
  +            break;
  +        p = buf;
  +        while (actual > 0) {
  +            int n = leneven - ceven;
  +            if (n > actual) n = actual;
  +            if (memcmp(p, SE + ceven, n) != 0) {
  +                ts_test_fail(TS_CTX, "data mismatch on even stream\n");
  +                break;
  +            }
  +            actual -= n;
  +            p      += n;
  +            ceven  += n;
  +            if (ceven >= leneven) {
  +                ceven = 0;
  +                ++neven;
  +            }
  +        }
  +        if (actual > 0)
  +            break;
  +
  +        if (nstreams == 0) {
  +            if (neven != wcount ||
  +                ceven != 0      ||
  +                nodd  != wcount ||
  +                codd  != 0) {
  +                ts_test_fail(TS_CTX, "data missing from streams\n");
  +            }
  +            break;
  +        }
  +    }
  +
  +    /*
  +     * destroy EVEN stream
  +     */
  +    EVAL0("sio_detach(C_sios_sio)", {
  +        rc = sio_detach(C_sio, C_sios_sio);
  +    });
  +    EVAL0("sio_destroy_stage(C_sios_sio)", {
  +        rc = sio_destroy_stage(C_sio, C_sios_sio);
  +    });
  +    EVAL0("sio_destroy(C_sio)", {
  +        rc = sio_destroy(C_sio);
  +    });
  +
  +    /*
  +     * destroy ODD stream
  +     */
  +    EVAL0("sio_detach(B_sios_sio)", {
  +        rc = sio_detach(B_sio, B_sios_sio);
  +    });
  +    EVAL0("sio_destroy_stage(B_sios_sio)", {
  +        rc = sio_destroy_stage(B_sio, B_sios_sio);
  +    });
  +    EVAL0("sio_destroy(B_sio)", {
  +        rc = sio_destroy(B_sio);
  +    });
  +
  +    /*
  +     * destroy MUX stream
  +     */
  +    EVAL0("sio_detach(A_sios_sillymux)", {
  +        rc = sio_detach(A_sio, A_sios_sillymux);
  +    });
  +    EVAL0("sio_detach(A_sios_fd)", {
  +        rc = sio_detach(A_sio, A_sios_fd);
  +    });
  +    EVAL0("sio_destroy_stage(A_sios_sillymux)", {
  +        rc = sio_destroy_stage(A_sio, A_sios_sillymux);
  +    });
  +    EVAL0("sio_destroy_stage(A_sios_fd)", {
  +        rc = sio_destroy_stage(A_sio, A_sios_fd);
  +    });
  +    EVAL0("sio_destroy(A_sio)", {
  +        rc = sio_destroy(A_sio);
  +    });
  +
  +close_and_cleanup:
  +    close(fd);
  +    if (unlink(tempfile) < 0) {
  +        ts_test_fail(TS_CTX, "cannot unlink temporary file \"%s\" (%s)\n",
  +            tempfile, strerror(errno));
  +    }
   }
   
   TS_TEST(test_sio_hello)
   {
   }
   
  +#if ENABLE_ZLIB
   TS_TEST(test_sio_zlib)
   {
   }
  +#endif
   
   #if ENABLE_SA
   TS_TEST(test_sio_sa)
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 30 15:17:02 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E6AE4768D0; Thu, 30 Jan 2003 15:17:01 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_config.c
Message-Id: <20030130141701.E6AE4768D0@mail.ossp.org>
Date: Thu, 30 Jan 2003 15:17:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   30-Jan-2003 15:17:01
  Branch: HEAD                             Handle: 2003013014170100

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c

  Log:
    it feeds ctx->config_varctx into lmtp2nntp_l2.c:hook_configure()

  Summary:
    Revision    Changes     Path
    1.81        +0  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================================
  $ cvs diff -u -r1.80 -r1.81 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	14 Aug 2002 21:19:01 -0000	1.80
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	30 Jan 2003 14:17:01 -0000	1.81
  @@ -153,7 +153,6 @@
               fprintf(stderr, "%s:Error: logging failed to create \"%s\" channel\n", ctx->progname, l2_handler_var.name);
               CU(ERR_EXECUTION);
           }
  -        //FIXME rse!20020717 this l2_channel_configure call is currently a dummy! What is it used for?
           if ((rc = l2_channel_configure(ctx->l2, "", ctx->config_varctx)) != L2_OK) {
               fprintf(stderr, "%s:Error: logging failed to configure \"%s\" channel\n", ctx->progname, l2_handler_var.name);
               CU(ERR_EXECUTION);
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 30 15:22:15 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CB4D3768D0; Thu, 30 Jan 2003 15:22:14 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_config.c
Message-Id: <20030130142214.CB4D3768D0@mail.ossp.org>
Date: Thu, 30 Jan 2003 15:22:14 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   30-Jan-2003 15:22:14
  Branch: HEAD                             Handle: 2003013014221400

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c

  Log:
    it works but don't confuse correct -l aka --l2spec with wrong -l2spec

  Summary:
    Revision    Changes     Path
    1.82        +0  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================================
  $ cvs diff -u -r1.81 -r1.82 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	30 Jan 2003 14:17:01 -0000	1.81
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	30 Jan 2003 14:22:14 -0000	1.82
  @@ -157,7 +157,6 @@
               fprintf(stderr, "%s:Error: logging failed to configure \"%s\" channel\n", ctx->progname, l2_handler_var.name);
               CU(ERR_EXECUTION);
           }
  -        /* FIXME this is cut off on command line!? fprintf(stderr, "DEBUG: ov->data.s = \"%s\"\n", ov->data.s); */
           if ((rc = l2_spec(&ch, ctx->l2_env, ov->data.s)) != L2_OK) {
               fprintf(stderr, "%s:Error: logging failed to create stream\n", ctx->progname);
               CU(ERR_EXECUTION);
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 30 15:24:54 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 457F9768D0; Thu, 30 Jan 2003 15:24:54 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ sio.c
Message-Id: <20030130142454.457F9768D0@mail.ossp.org>
Date: Thu, 30 Jan 2003 15:24:54 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   30-Jan-2003 15:24:54
  Branch: HEAD                             Handle: 2003013014245300

  Modified files:
    ossp-pkg/sio            sio.c

  Log:
    clear eof/error flags on creation

  Summary:
    Revision    Changes     Path
    1.23        +3  -0      ossp-pkg/sio/sio.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio.c
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 sio.c
  --- ossp-pkg/sio/sio.c	20 Jan 2003 17:43:21 -0000	1.22
  +++ ossp-pkg/sio/sio.c	30 Jan 2003 14:24:53 -0000	1.23
  @@ -195,6 +195,9 @@
       sio->label_error = SIO_LN_ERROR;
       sio->label_eof   = SIO_LN_EOF;
   
  +    sio->eof_flag    = 0;
  +    sio->error_flag  = 0;
  +
       *siop = sio;
   
       return SIO_OK;
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 30 15:26:39 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2BFF9768D0; Thu, 30 Jan 2003 15:26:39 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_config.c
Message-Id: <20030130142639.2BFF9768D0@mail.ossp.org>
Date: Thu, 30 Jan 2003 15:26:39 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   30-Jan-2003 15:26:39
  Branch: HEAD                             Handle: 2003013014263800

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c

  Log:
    no problem here, option.destionation can be queried successfully

  Summary:
    Revision    Changes     Path
    1.83        +0  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================================
  $ cvs diff -u -r1.82 -r1.83 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	30 Jan 2003 14:22:14 -0000	1.82
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	30 Jan 2003 14:26:38 -0000	1.83
  @@ -174,7 +174,6 @@
        * should not be used in the remainder of the program flow.
        */
       logbook(ctx->l2, L2_LEVEL_NOTICE, "startup, version %s", lmtp2nntp_version.v_gnu);
  -    /* logbook(ctx->l2, L2_LEVEL_NOTICE, "FIXME>>>${option.destination[0]}<<<FIXME>>>${option.destination[1]}<<<"); */
   
       /* --version FLAG */
       try {
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 30 15:33:08 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id ADC1F7681C; Thu, 30 Jan 2003 15:33:07 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_config.c
Message-Id: <20030130143307.ADC1F7681C@mail.ossp.org>
Date: Thu, 30 Jan 2003 15:33:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   30-Jan-2003 15:33:07
  Branch: HEAD                             Handle: 2003013014330700

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c

  Log:
    this is the official name and fair enough as a default

  Summary:
    Revision    Changes     Path
    1.84        +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================================
  $ cvs diff -u -r1.83 -r1.84 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	30 Jan 2003 14:26:38 -0000	1.83
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	30 Jan 2003 14:33:07 -0000	1.84
  @@ -496,7 +496,7 @@
                   cp = (ov->data.m)[i];
                   logbook(ctx->l2, L2_LEVEL_DEBUG, "cp = (data.m)[%d] = \"%s\"", i, cp);
                   if (strrchr(cp, ':') == NULL)
  -                    cp = str_concat(cp, ":nntp", NULL); /* FIXME is this a config var/val? */
  +                    cp = str_concat(cp, ":nntp", NULL); /* http://www.iana.org/assignments/port-numbers (and names) */
                   else
                       cp = str_concat(cp, NULL); /* prepare for free() */
                   if ((rc = sa_addr_create(&ctx->pns[i].saa)) != SA_OK) {
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 30 15:35:12 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B674A7681C; Thu, 30 Jan 2003 15:35:12 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ sio_sillymux.c
Message-Id: <20030130143512.B674A7681C@mail.ossp.org>
Date: Thu, 30 Jan 2003 15:35:12 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   30-Jan-2003 15:35:12
  Branch: HEAD                             Handle: 2003013014351200

  Modified files:
    ossp-pkg/sio            sio_sillymux.c

  Log:
    pass through non-data chunks

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/sio/sio_sillymux.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_sillymux.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 sio_sillymux.c
  --- ossp-pkg/sio/sio_sillymux.c	22 Jan 2003 16:18:10 -0000	1.3
  +++ ossp-pkg/sio/sio_sillymux.c	30 Jan 2003 14:35:12 -0000	1.4
  @@ -141,7 +141,7 @@
   
       if (!al_same_label(alc, my->data_label)) {
           my->next += n;
  -        return AL_OK;
  +        return AL_ERR_EOF;
       }
   
       p = al_chunk_ptr(alc,0);
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 30 15:37:02 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CC6A37681C; Thu, 30 Jan 2003 15:37:01 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_config.c
Message-Id: <20030130143701.CC6A37681C@mail.ossp.org>
Date: Thu, 30 Jan 2003 15:37:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   30-Jan-2003 15:37:01
  Branch: HEAD                             Handle: 2003013014370100

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c

  Log:
    decide to keep lib_sa out of lmtp2nntp_option.c

  Summary:
    Revision    Changes     Path
    1.85        +2  -2      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================================
  $ cvs diff -u -r1.84 -r1.85 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	30 Jan 2003 14:33:07 -0000	1.84
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	30 Jan 2003 14:37:01 -0000	1.85
  @@ -504,11 +504,11 @@
                       throw(0,0,0);
                   }
                   if ((rc = sa_addr_u2a(ctx->pns[i].saa, "inet://%s", cp)) != SA_OK) {
  -                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --destination, parsing host address (%s) failed with \"%s\"", cp /* FIXME again, option vs. config */, sa_error(rc));
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --destination, parsing host address (%s) failed with \"%s\"", cp, sa_error(rc));
                       throw(0,0,0);
                   }
                   if ((rc = sa_create(&ctx->pns[i].sa)) != SA_OK) {
  -                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --destination, creating TCP socket (%s) failed with \"%s\"", cp /* FIXME again, option vs. config */, sa_error(rc));
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --destination, creating TCP socket (%s) failed with \"%s\"", cp, sa_error(rc));
                       throw(0,0,0);
                   }
                   ctx->pns[i].nntp = NULL;
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 30 16:04:07 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3861B768D0; Thu, 30 Jan 2003 16:04:07 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ sio_test.c
Message-Id: <20030130150407.3861B768D0@mail.ossp.org>
Date: Thu, 30 Jan 2003 16:04:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   30-Jan-2003 16:04:07
  Branch: HEAD                             Handle: 2003013015040600

  Modified files:
    ossp-pkg/sio            sio_test.c

  Log:
    better stream reading

  Summary:
    Revision    Changes     Path
    1.10        +15 -9      ossp-pkg/sio/sio_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_test.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 sio_test.c
  --- ossp-pkg/sio/sio_test.c	30 Jan 2003 13:44:20 -0000	1.9
  +++ ossp-pkg/sio/sio_test.c	30 Jan 2003 15:04:06 -0000	1.10
  @@ -96,6 +96,7 @@
       }
   
       *actualp = total;
  +
       return rc;
   }
   
  @@ -721,7 +722,7 @@
        */
       nodd = neven = 0;
       codd = ceven = 0;
  -    while (nodd < wcount || neven < wcount) {
  +    for (;;) {
           char buf[17], *p;
           int nstreams = 2;
   
  @@ -748,6 +749,8 @@
               if (codd >= lenodd) {
                   codd = 0;
                   ++nodd;
  +                if (nodd > wcount)
  +                    ts_test_fail(TS_CTX, "excess data on odd stream\n");
               }
           }
           if (actual > 0)
  @@ -776,21 +779,24 @@
               if (ceven >= leneven) {
                   ceven = 0;
                   ++neven;
  +                if (neven > wcount)
  +                    ts_test_fail(TS_CTX, "excess data on even stream\n");
               }
           }
           if (actual > 0)
               break;
   
  -        if (nstreams == 0) {
  -            if (neven != wcount ||
  -                ceven != 0      ||
  -                nodd  != wcount ||
  -                codd  != 0) {
  -                ts_test_fail(TS_CTX, "data missing from streams\n");
  -            }
  +        if (nstreams == 0)
               break;
  -        }
       }
  +    if (nodd < wcount)
  +        ts_test_fail(TS_CTX, "missing data on odd stream %d vs %d\n",nodd,wcount);
  +    if (neven < wcount)
  +        ts_test_fail(TS_CTX, "missing data on even stream %d vs %d\n",neven,wcount);
  +    if (codd != 0)
  +        ts_test_fail(TS_CTX, "extra chars on odd stream\n");
  +    if (ceven != 0)
  +        ts_test_fail(TS_CTX, "extra chars on even stream\n");
   
       /*
        * destroy EVEN stream
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 30 16:06:54 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9713D768D0; Thu, 30 Jan 2003 16:06:54 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ sio_test.c
Message-Id: <20030130150654.9713D768D0@mail.ossp.org>
Date: Thu, 30 Jan 2003 16:06:54 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   30-Jan-2003 16:06:54
  Branch: HEAD                             Handle: 2003013015065400

  Modified files:
    ossp-pkg/sio            sio_test.c

  Log:
    some explanations

  Summary:
    Revision    Changes     Path
    1.11        +10 -0      ossp-pkg/sio/sio_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_test.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 sio_test.c
  --- ossp-pkg/sio/sio_test.c	30 Jan 2003 15:04:06 -0000	1.10
  +++ ossp-pkg/sio/sio_test.c	30 Jan 2003 15:06:54 -0000	1.11
  @@ -719,6 +719,16 @@
   
       /*
        * read from both streams
  +     *
  +     * note that sillymux doesn't know how to multiplex
  +     * signalling chunks. However, since input is blocking
  +     * we are guaranteed that we have reached EOF as soon
  +     * as no data is passed downstream.
  +     *
  +     * a real mux would might replicate signalling chunks
  +     * to each listener or synthesize its own error/eof
  +     * conditions
  +     *
        */
       nodd = neven = 0;
       codd = ceven = 0;
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 30 16:19:56 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3B27A76827; Thu, 30 Jan 2003 16:19:56 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_config.c lmtp2nntp_config.h ...
Message-Id: <20030130151956.3B27A76827@mail.ossp.org>
Date: Thu, 30 Jan 2003 16:19:56 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   30-Jan-2003 16:19:56
  Branch: HEAD                             Handle: 2003013015195500

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c lmtp2nntp_config.h
                            lmtp2nntp_main.c

  Log:
    remove all exit(3) but those within daemonizer and signal handler

  Summary:
    Revision    Changes     Path
    1.86        +60 -58     ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.9         +7  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_config.h
    1.57        +9  -6      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================================
  $ cvs diff -u -r1.85 -r1.86 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	30 Jan 2003 14:37:01 -0000	1.85
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	30 Jan 2003 15:19:55 -0000	1.86
  @@ -107,67 +107,68 @@
       "0-9"         /* namechars     */
   };
   
  -void config_context(lmtp2nntp_t *ctx)
  +lmtp2nntp_config_rc_t config_context(lmtp2nntp_t *ctx)
   {
  +    lmtp2nntp_config_rc_t rc = CONFIG_OK;
       ex_t ex;
       optionval_t *ov;
  -    int rc;
  +    sa_rc_t sa_rc;
   
       /* create L2 environment */
       if (l2_env_create(&ctx->l2_env) != L2_OK) {
           fprintf(stderr, "%s:Error: failed to create L2 environment\n", ctx->progname);
  -        CU(ERR_EXECUTION);
  +        CU(CONFIG_ERR_LOG);
       }
       if (l2_env_levels(ctx->l2_env, L2_LEVEL_ALL, L2_LEVEL_NONE) != L2_OK) {
           fprintf(stderr, "%s:Error: logging failed to set global logging level defaults\n", ctx->progname);
  -        CU(ERR_EXECUTION);
  +        CU(CONFIG_ERR_LOG);
       }
       if (l2_env_formatter(ctx->l2_env, 'P', formatter_prefix, &ctx->ctx) != L2_OK) {
           fprintf(stderr, "%s:Error: logging failed to register prefix formatter\n", ctx->progname);
  -        CU(ERR_EXECUTION);
  +        CU(CONFIG_ERR_LOG);
       }
       if (l2_env_formatter(ctx->l2_env, 'D', l2_util_fmt_dump, NULL) != L2_OK) {
           fprintf(stderr, "%s:Error: logging failed to register dump formatter\n", ctx->progname);
  -        CU(ERR_EXECUTION);
  +        CU(CONFIG_ERR_LOG);
       }
       if (l2_env_formatter(ctx->l2_env, 'S', l2_util_fmt_string, NULL) != L2_OK) {
           fprintf(stderr, "%s:Error: logging failed to register string formatter\n", ctx->progname);
  -        CU(ERR_EXECUTION);
  +        CU(CONFIG_ERR_LOG);
       }
       if (l2_env_formatter(ctx->l2_env, 'm', l2_util_fmt_errno, NULL) != L2_OK) {
           fprintf(stderr, "%s:Error: logging failed to register errno formatter\n", ctx->progname);
  -        CU(ERR_EXECUTION);
  +        CU(CONFIG_ERR_LOG);
       }
       if (val_get(ctx->val, "option.l2spec", &ov) != VAL_OK) {
           fprintf(stderr, "%s:Error: (internal) config did not register 'l2spec' option\n", ctx->progname);
  -        CU(ERR_EXECUTION);
  +        CU(CONFIG_ERR_LOG);
       }
       if (ov->data.s != NULL) {
           l2_channel_t *ch;
   
           if (l2_env_handler(ctx->l2_env, &l2_handler_var) != L2_OK) {
               fprintf(stderr, "%s:Error: logging failed to register \"%s\" handler \n", ctx->progname, l2_handler_var.name);
  -            CU(ERR_EXECUTION);
  +            CU(CONFIG_ERR_LOG);
           }
  -        if ((rc = l2_channel_create(&ctx->l2, ctx->l2_env, l2_handler_var.name)) != L2_OK) {
  +        if ((l2_channel_create(&ctx->l2, ctx->l2_env, l2_handler_var.name)) != L2_OK) {
               fprintf(stderr, "%s:Error: logging failed to create \"%s\" channel\n", ctx->progname, l2_handler_var.name);
  -            CU(ERR_EXECUTION);
  +            CU(CONFIG_ERR_LOG);
           }
  -        if ((rc = l2_channel_configure(ctx->l2, "", ctx->config_varctx)) != L2_OK) {
  +        if ((l2_channel_configure(ctx->l2, "", ctx->config_varctx)) != L2_OK) {
               fprintf(stderr, "%s:Error: logging failed to configure \"%s\" channel\n", ctx->progname, l2_handler_var.name);
  -            CU(ERR_EXECUTION);
  +            CU(CONFIG_ERR_LOG);
           }
  -        if ((rc = l2_spec(&ch, ctx->l2_env, ov->data.s)) != L2_OK) {
  +        if ((l2_spec(&ch, ctx->l2_env, ov->data.s)) != L2_OK) {
               fprintf(stderr, "%s:Error: logging failed to create stream\n", ctx->progname);
  -            CU(ERR_EXECUTION);
  +            CU(CONFIG_ERR_LOG);
           }
           if (l2_channel_link(ctx->l2, L2_LINK_CHILD, ch, NULL) != L2_OK) {
               fprintf(stderr, "%s:Error: logging failed to link child channel\n", ctx->progname);
  -            CU(ERR_EXECUTION);
  +            CU(CONFIG_ERR_LOG);
           }
           if (l2_channel_open(ctx->l2) != L2_OK) {
               fprintf(stderr, "%s:Error: logging failed to open channel stream\n", ctx->progname);
  -            CU(ERR_EXECUTION);
  +            CU(CONFIG_ERR_LOG);
           }
       }
       /* from this point on logging is up and running and fprintf(stderr, ...)
  @@ -187,7 +188,7 @@
   
           if (ov->data.f == 1) {
               fprintf(stdout, "%s\n", lmtp2nntp_version.v_gnu);
  -            exit(0); /* FIXME */
  +            CU(CONFIG_OK_DRY);
           }
       }
       catch (ex)
  @@ -306,12 +307,12 @@
                       cp = "-1";
                   ctx->pacl[i].prefixlen = atoi(cp);
                   logbook(ctx->l2, L2_LEVEL_DEBUG, "ctx->pacl[%d].prefixlen = %d", i, ctx->pacl[i].prefixlen);
  -                if ((rc = sa_addr_create(&(ctx->pacl[i].saa))) != SA_OK) {
  -                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --acl, create address (internal) failed with \"%s\"", sa_error(rc));
  +                if ((sa_rc = sa_addr_create(&(ctx->pacl[i].saa))) != SA_OK) {
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --acl, create address (internal) failed with \"%s\"", sa_error(sa_rc));
                       throw(0,0,0);
                       }
  -                if ((rc = sa_addr_u2a(ctx->pacl[i].saa, "inet://%s:0", ctx->pacl[i].acl)) != SA_OK) {
  -                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --acl, parsing address (%s) failed with \"%s\"", ctx->pacl[i].acl, sa_error(rc));
  +                if ((sa_rc = sa_addr_u2a(ctx->pacl[i].saa, "inet://%s:0", ctx->pacl[i].acl)) != SA_OK) {
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --acl, parsing address (%s) failed with \"%s\"", ctx->pacl[i].acl, sa_error(sa_rc));
                       throw(0,0,0);
                       }
               }
  @@ -324,12 +325,12 @@
               ctx->pacl[i].acl = "0.0.0.0";
               ctx->pacl[i].not = FALSE;
               ctx->pacl[i].prefixlen = 0;
  -            if ((rc = sa_addr_create(&ctx->pacl[i].saa)) != SA_OK) {
  -                logbook(ctx->l2, L2_LEVEL_ERROR, "option --acl, create IPv4 pass-through address (internal) failed with \"%s\"", sa_error(rc));
  +            if ((sa_rc = sa_addr_create(&ctx->pacl[i].saa)) != SA_OK) {
  +                logbook(ctx->l2, L2_LEVEL_ERROR, "option --acl, create IPv4 pass-through address (internal) failed with \"%s\"", sa_error(sa_rc));
                   throw(0,0,0);
               }
  -            if ((rc = sa_addr_u2a(ctx->pacl[i].saa, "inet://%s:0", ctx->pacl[i].acl)) != SA_OK) {
  -                logbook(ctx->l2, L2_LEVEL_ERROR, "option --acl, parsing IPv4 pass-through address (%s) failed with \"%s\"", ctx->pacl[i].acl, sa_error(rc));
  +            if ((sa_rc = sa_addr_u2a(ctx->pacl[i].saa, "inet://%s:0", ctx->pacl[i].acl)) != SA_OK) {
  +                logbook(ctx->l2, L2_LEVEL_ERROR, "option --acl, parsing IPv4 pass-through address (%s) failed with \"%s\"", ctx->pacl[i].acl, sa_error(sa_rc));
                   throw(0,0,0);
               }
               i++;
  @@ -342,12 +343,12 @@
               ctx->pacl[i].acl = "[::]";
               ctx->pacl[i].not = FALSE;
               ctx->pacl[i].prefixlen = 0;
  -            if ((rc = sa_addr_create(&ctx->pacl[i].saa)) != SA_OK) {
  -                logbook(ctx->l2, L2_LEVEL_ERROR, "option --acl, create IPv6 pass-through address (internal) failed with \"%s\"", sa_error(rc));
  +            if ((sa_rc = sa_addr_create(&ctx->pacl[i].saa)) != SA_OK) {
  +                logbook(ctx->l2, L2_LEVEL_ERROR, "option --acl, create IPv6 pass-through address (internal) failed with \"%s\"", sa_error(sa_rc));
                   throw(0,0,0);
               }
  -            if ((rc = sa_addr_u2a(ctx->pacl[i].saa, "inet://%s:0", ctx->pacl[i].acl)) != SA_OK) {
  -                logbook(ctx->l2, L2_LEVEL_ERROR, "option --acl, parsing IPv6 pass-through address (%s) failed with \"%s\"", ctx->pacl[i].acl, sa_error(rc));
  +            if ((sa_rc = sa_addr_u2a(ctx->pacl[i].saa, "inet://%s:0", ctx->pacl[i].acl)) != SA_OK) {
  +                logbook(ctx->l2, L2_LEVEL_ERROR, "option --acl, parsing IPv6 pass-through address (%s) failed with \"%s\"", ctx->pacl[i].acl, sa_error(sa_rc));
                   throw(0,0,0);
               }
               i++;
  @@ -369,12 +370,12 @@
           if (ov->ndata == 1) {
               /* dash means stdio */
               if (strcmp(ov->data.s, "-") != 0) {
  -                if ((rc = sa_create(&ctx->saServerbind)) != SA_OK) {
  -                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, creating TCP socket (internal) failed with \"%s\"", sa_error(rc));
  +                if ((sa_rc = sa_create(&ctx->saServerbind)) != SA_OK) {
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, creating TCP socket (internal) failed with \"%s\"", sa_error(sa_rc));
                       throw(0,0,0);
                   }
  -                if ((rc = sa_addr_create(&ctx->saaServerbind)) != SA_OK) {
  -                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, create address (internal) failed with \"%s\"", sa_error(rc));
  +                if ((sa_rc = sa_addr_create(&ctx->saaServerbind)) != SA_OK) {
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, create address (internal) failed with \"%s\"", sa_error(sa_rc));
                       throw(0,0,0);
                   }
               /* slash means UNIX socket */
  @@ -408,12 +409,12 @@
                               throw(0,0,0);
                           }
                       }
  -                    if ((rc = sa_addr_u2a(ctx->saaServerbind, "unix:%s", cpPath)) != SA_OK) {
  -                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, parsing alternate IO guessing UNIX socket (%s) failed with \"%s\"", cpPath, sa_error(rc));
  +                    if ((sa_rc = sa_addr_u2a(ctx->saaServerbind, "unix:%s", cpPath)) != SA_OK) {
  +                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, parsing alternate IO guessing UNIX socket (%s) failed with \"%s\"", cpPath, sa_error(sa_rc));
                           throw(0,0,0);
                       }
  -                    if ((rc = sa_bind(ctx->saServerbind, ctx->saaServerbind)) != SA_OK) {
  -                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, bind (%s) failed with \"%s\"", cpPath, sa_error(rc));
  +                    if ((sa_rc = sa_bind(ctx->saServerbind, ctx->saaServerbind)) != SA_OK) {
  +                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, bind (%s) failed with \"%s\"", cpPath, sa_error(sa_rc));
                           throw(0,0,0);
                       }
                       if (nPerm != -1) {
  @@ -432,18 +433,18 @@
                   }
               /* otherwise assume INET socket */
                   else {
  -                    if ((rc = sa_addr_u2a(ctx->saaServerbind, "inet://%s", ov->data.s)) != SA_OK) {
  -                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, parsing alternate IO guessing INET socket (%s) failed with \"%s\"", ov->data.s, sa_error(rc));
  +                    if ((sa_rc = sa_addr_u2a(ctx->saaServerbind, "inet://%s", ov->data.s)) != SA_OK) {
  +                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, parsing alternate IO guessing INET socket (%s) failed with \"%s\"", ov->data.s, sa_error(sa_rc));
                           throw(0,0,0);
                       }
  -                    if ((rc = sa_bind(ctx->saServerbind, ctx->saaServerbind)) != SA_OK) {
  -                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, bind (%s) failed with \"%s\"", ov->data.s, sa_error(rc));
  +                    if ((sa_rc = sa_bind(ctx->saServerbind, ctx->saaServerbind)) != SA_OK) {
  +                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, bind (%s) failed with \"%s\"", ov->data.s, sa_error(sa_rc));
                           throw(0,0,0);
                       }
                   }
               /* for either sockets */
  -                if ((rc = sa_listen(ctx->saServerbind, -1)) != SA_OK) {
  -                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, listen (%s) failed with \"%s\"", ov->data.s, sa_error(rc));
  +                if ((sa_rc = sa_listen(ctx->saServerbind, -1)) != SA_OK) {
  +                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, listen (%s) failed with \"%s\"", ov->data.s, sa_error(sa_rc));
                           throw(0,0,0);
                   }
               }
  @@ -462,14 +463,14 @@
           logbook(ctx->l2, L2_LEVEL_TRACE, "--client = \"%s\"", ov->data.s);
   
           if (ov->ndata == 1) {
  -            if ((rc = sa_addr_create(&ctx->saaClientbind)) != SA_OK) {
  -                logbook(ctx->l2, L2_LEVEL_ERROR, "option --client, create address (internal) failed with \"%s\"", sa_error(rc));
  +            if ((sa_rc = sa_addr_create(&ctx->saaClientbind)) != SA_OK) {
  +                logbook(ctx->l2, L2_LEVEL_ERROR, "option --client, create address (internal) failed with \"%s\"", sa_error(sa_rc));
                   throw(0,0,0);
               }
  -            if ((rc = sa_addr_u2a(ctx->saaClientbind, 
  +            if ((sa_rc = sa_addr_u2a(ctx->saaClientbind, 
                                     (strchr(ov->data.s, ':') == NULL) ?  "inet://%s:0" : "inet://%s", 
                                     ov->data.s)) != SA_OK) {
  -                logbook(ctx->l2, L2_LEVEL_ERROR, "option --client, parsing alternate IO guessing INET socket (%s) failed with \"%s\"", ov->data.s, sa_error(rc));
  +                logbook(ctx->l2, L2_LEVEL_ERROR, "option --client, parsing alternate IO guessing INET socket (%s) failed with \"%s\"", ov->data.s, sa_error(sa_rc));
                   throw(0,0,0);
               }
           }
  @@ -499,16 +500,16 @@
                       cp = str_concat(cp, ":nntp", NULL); /* http://www.iana.org/assignments/port-numbers (and names) */
                   else
                       cp = str_concat(cp, NULL); /* prepare for free() */
  -                if ((rc = sa_addr_create(&ctx->pns[i].saa)) != SA_OK) {
  -                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --destination, create address (internal) failed with \"%s\"", sa_error(rc));
  +                if ((sa_rc = sa_addr_create(&ctx->pns[i].saa)) != SA_OK) {
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --destination, create address (internal) failed with \"%s\"", sa_error(sa_rc));
                       throw(0,0,0);
                   }
  -                if ((rc = sa_addr_u2a(ctx->pns[i].saa, "inet://%s", cp)) != SA_OK) {
  -                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --destination, parsing host address (%s) failed with \"%s\"", cp, sa_error(rc));
  +                if ((sa_rc = sa_addr_u2a(ctx->pns[i].saa, "inet://%s", cp)) != SA_OK) {
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --destination, parsing host address (%s) failed with \"%s\"", cp, sa_error(sa_rc));
                       throw(0,0,0);
                   }
  -                if ((rc = sa_create(&ctx->pns[i].sa)) != SA_OK) {
  -                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --destination, creating TCP socket (%s) failed with \"%s\"", cp, sa_error(rc));
  +                if ((sa_rc = sa_create(&ctx->pns[i].sa)) != SA_OK) {
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --destination, creating TCP socket (%s) failed with \"%s\"", cp, sa_error(sa_rc));
                       throw(0,0,0);
                   }
                   ctx->pns[i].nntp = NULL;
  @@ -1129,12 +1130,13 @@
                       }
                   }
               }
  -        exit(0); /* FIXME */
  +        CU(CONFIG_OK_DRY);
           }
       }
       catch (ex)
           rethrow;
  -CUS:
  -    return;
  +    CU(CONFIG_OK);
  +    CUS:
  +    return rc;
   }
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.h
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 lmtp2nntp_config.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.h	14 Feb 2002 10:47:20 -0000	1.8
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.h	30 Jan 2003 15:19:55 -0000	1.9
  @@ -29,6 +29,12 @@
   
   #include "lmtp2nntp_global.h"
   #include "fixme.h"
  -void config_context(lmtp2nntp_t *);
   
  +typedef enum {
  +    CONFIG_OK,
  +    CONFIG_OK_DRY,  /* dry run short circuit i.e. --testfile or --version */
  +    CONFIG_ERR_LOG  /* cannot initialize logging */
  +} lmtp2nntp_config_rc_t;
  +
  +lmtp2nntp_config_rc_t config_context(lmtp2nntp_t *);
   #endif /* __LMTP2NNTP_CONFIG_H__ */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================================
  $ cvs diff -u -r1.56 -r1.57 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	2 Jul 2002 07:49:01 -0000	1.56
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	30 Jan 2003 15:19:55 -0000	1.57
  @@ -464,14 +464,17 @@
   
       /* read in the arguments */
       {
  -        lmtp2nntp_option_rc_t rv;
  +        lmtp2nntp_option_rc_t rvo;
  +        lmtp2nntp_config_rc_t rvc;
   
           if (option_create(&o, ctx->val) != OPTION_OK)
  -                CU(ERR_EXECUTION);
  -        rv = option_parse(o, argc, argv);
  -        config_context(ctx); /*FIXME rc */
  -        if (rv != OPTION_OK)
  -                CU(ERR_EXECUTION);
  +            CU(ERR_EXECUTION);
  +        rvo = option_parse(o, argc, argv);
  +        rvc = config_context(ctx);
  +        if (rvc == CONFIG_OK_DRY)
  +            CU(0);
  +        if (rvo != OPTION_OK || rvc != CONFIG_OK)
  +            CU(ERR_EXECUTION);
       }
   
       if (getuid() != ctx->option_uid) {
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 30 16:20:58 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2649D76827; Thu, 30 Jan 2003 16:20:58 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_main.c
Message-Id: <20030130152058.2649D76827@mail.ossp.org>
Date: Thu, 30 Jan 2003 16:20:58 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   30-Jan-2003 16:20:58
  Branch: HEAD                             Handle: 2003013015205700

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_main.c

  Log:
    remove obsolete code fragment

  Summary:
    Revision    Changes     Path
    1.58        +0  -4      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================================
  $ cvs diff -u -r1.57 -r1.58 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	30 Jan 2003 15:19:55 -0000	1.57
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	30 Jan 2003 15:20:57 -0000	1.58
  @@ -154,10 +154,6 @@
       char *cp;
       optionval_t *ov;
   
  -    /*FIXME for safety until (l2?) bug causing overlapping output is found
  -    logbook(ctx->l2, L2_LEVEL_DEBUG, "ctx_lookup variable \"%s\" (%d)", var_ptr, var_len);
  -    */
  -
       rc = VAR_ERR_UNDEFINED_VARIABLE;
       if (strncasecmp(var_ptr, "option.", strlen("option.")) == 0) {
           cp = str_dupex(var_ptr, var_len);
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 30 16:26:25 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DC16B76827; Thu, 30 Jan 2003 16:26:24 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_main.c
Message-Id: <20030130152624.DC16B76827@mail.ossp.org>
Date: Thu, 30 Jan 2003 16:26:24 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   30-Jan-2003 16:26:24
  Branch: HEAD                             Handle: 2003013015262400

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_main.c

  Log:
    cleanup sequence

  Summary:
    Revision    Changes     Path
    1.59        +1  -4      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================================
  $ cvs diff -u -r1.58 -r1.59 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	30 Jan 2003 15:20:57 -0000	1.58
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	30 Jan 2003 15:26:24 -0000	1.59
  @@ -702,7 +702,7 @@
       /* graceful shutdown */
       CUS:
       logbook(ctx->l2, L2_LEVEL_NOTICE, "graceful shutdown shortly before exit - no more logging");
  -    /* l2_channel_destroy(ctx->l2); */
  +    l2_channel_destroy(ctx->l2);
       l2_env_destroy(ctx->l2_env);
       if (ctx->saServerbind)
           sa_destroy(ctx->saServerbind);
  @@ -710,7 +710,6 @@
           sa_addr_destroy(ctx->saaServerbind);
       if (ctx->option_restrictheader != NULL)
           free(ctx->option_restrictheader);
  -    /* FIXME if (ctx->azHeaderValuePairs != NULL) free(ctx->azHeaderValuePairs); what about headerrules */
       if (ctx->option_pidfile != NULL)
           free(ctx->option_pidfile);
       if (ctx->option_nodename != NULL)
  @@ -728,8 +727,6 @@
       str_parse(NULL, NULL);
       if (o != NULL)
           (void)option_destroy(o);
  -    /* FIXME check if anything initialized in the lmtp2nntp_t structure is destroyed here (val, prival ...) */
  -
       return rc;
   }
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 30 17:38:33 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B14B9767E2; Thu, 30 Jan 2003 17:38:32 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ sio_test.c
Message-Id: <20030130163832.B14B9767E2@mail.ossp.org>
Date: Thu, 30 Jan 2003 17:38:32 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   30-Jan-2003 17:38:32
  Branch: HEAD                             Handle: 2003013016383200

  Modified files:
    ossp-pkg/sio            sio_test.c

  Log:
    add protocol test, client-server connection via socketpair()

  Summary:
    Revision    Changes     Path
    1.12        +192 -8     ossp-pkg/sio/sio_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_test.c
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 sio_test.c
  --- ossp-pkg/sio/sio_test.c	30 Jan 2003 15:06:54 -0000	1.11
  +++ ossp-pkg/sio/sio_test.c	30 Jan 2003 16:38:32 -0000	1.12
  @@ -41,6 +41,7 @@
   
   #include <sys/types.h>
   #include <sys/wait.h>
  +#include <sys/socket.h>
   
   #include "ts.h"
   #include "al.h"
  @@ -77,11 +78,14 @@
   
   #define EVAL0(name,block) EVAL(name,rc,SIO_OK,block)
   
  -sio_rc_t readloop(sio_t *, char *, size_t, size_t *);
  -int test_sio_pipe_read(ts_test_t *, int, int);
  -int test_sio_pipe_write(ts_test_t *, int, int);
  +static sio_rc_t sreadloop(sio_t *, char *, size_t, size_t *);
  +static int test_sio_pipe_read(ts_test_t *, int, int);
  +static int test_sio_pipe_write(ts_test_t *, int, int);
   
  -sio_rc_t readloop(sio_t *sio, char *buf, size_t len, size_t *actualp)
  +static int test_sio_hello_client(ts_test_t *, int);
  +static int test_sio_hello_server(ts_test_t *, int);
  +
  +sio_rc_t sreadloop(sio_t *sio, char *buf, size_t len, size_t *actualp)
   {
       sio_rc_t rc = SIO_OK;
       size_t actual, total = 0;
  @@ -282,7 +286,7 @@
   
           for (i=0; i<wcount; ++i) {
               EVAL0("sio_read", {
  -                rc = readloop(sio, buf, len, &actual);
  +                rc = sreadloop(sio, buf, len, &actual);
               });
               if (rc != SIO_OK) break;
               if (actual != len) {
  @@ -331,6 +335,7 @@
       });
   }
   
  +static
   int test_sio_pipe_read(ts_test_t *_t, int fd, int wcount)
   {
       int error = 0, result = -1;
  @@ -386,7 +391,7 @@
   
       for (i=0; i<wcount; ++i) {
           EVAL0("sio_read", {
  -            rc = readloop(sio, buf, len, &actual);
  +            rc = sreadloop(sio, buf, len, &actual);
           });
           if (rc != SIO_OK) error = 1;
           if (rc != SIO_OK) break;
  @@ -435,6 +440,7 @@
       return result;
   }
   
  +static
   int test_sio_pipe_write(ts_test_t *_t, int fd, int wcount)
   {
       int error = 0, result = -1;
  @@ -737,7 +743,7 @@
           int nstreams = 2;
   
           EVAL0("sio_read(B_sio)", {
  -            rc = readloop(B_sio, buf, sizeof(buf), &actual);
  +            rc = sreadloop(B_sio, buf, sizeof(buf), &actual);
               if (rc == SIO_ERR_EOF) {
                   --nstreams;
                   rc = SIO_OK;
  @@ -767,7 +773,7 @@
               break;
   
           EVAL0("sio_read(C_sio)", {
  -            rc = readloop(C_sio, buf, sizeof(buf), &actual);
  +            rc = sreadloop(C_sio, buf, sizeof(buf), &actual);
               if (rc == SIO_ERR_EOF) {
                   --nstreams;
                   rc = SIO_OK;
  @@ -861,9 +867,187 @@
       }
   }
   
  +static
  +int test_sio_hello_client(ts_test_t *_t, int fd)
  +{
  +    FILE *f;
  +    char buf[81];
  +    int c, i;
  +    int do_login = 1;
  +    char S[] = "Welcome to the real world\r\n";
  +    int result = 0;
  +
  +    f = fdopen(fd, "r+");
  +    if (f == NULL) {
  +        ts_test_fail(TS_CTX, "cannot make FILE handle\n");
  +        return -1;
  +    }
  +
  +    i = 0;
  +    for (;;) {
  +        c = fgetc(f);
  +        if (c == EOF) {
  +            ts_test_fail(TS_CTX, "EOF from server\n");
  +            result = -1;
  +            break;
  +        }
  +        if (i >= 80) {
  +            ts_test_fail(TS_CTX, "input buffer overflow\n");
  +            result = -1;
  +            break;
  +        }
  +        buf[i++] = c;
  +        buf[i] = '\0';
  +        if (do_login) {
  +            if (i > 7) {
  +                ts_test_fail(TS_CTX, "handshake failure\n");
  +                result = -1;
  +                break;
  +            }
  +            if (strcmp(buf, "Login: ") == 0) {
  +                fputs("Geheim\r\n", f);
  +                fflush(f);
  +                i = 0;
  +                do_login = 0;
  +            }
  +        } else if (c == '\n')
  +            break;
  +    }
  +
  +    if (strcmp(buf, S)) {
  +        ts_test_fail(TS_CTX, "data mismatch\n");
  +        result = -1;
  +    }
  +
  +    fclose(f);
  +
  +    return result;
  +}
  +
  +static
  +int test_sio_hello_server(ts_test_t *_t, int fd)
  +{
  +    int error = 0, result = -1;
  +    sio_rc_t rc;
  +    sio_t *sio;
  +    sio_stage_t *sios_hello, *sios_fd;
  +    size_t buflen  =   47;     /* fd input buffer size */
  +    char S[] = "Welcome to the real world\r\n";
  +    size_t actual, len = strlen(S);
  +
  +    EVAL0("sio_create", {
  +        rc = sio_create(&sio);
  +    });
  +    if (rc != SIO_OK) return -1;
  +    EVAL0("sio_create_stage(&sios_fd)", {
  +        rc = sio_create_stage(sio, &sio_module_fd, &sios_fd);
  +    });
  +    if (rc != SIO_OK) return -1;
  +    EVAL0("sio_create_stage(&sios_hello)", {
  +        rc = sio_create_stage(sio, &sio_module_hello, &sios_hello);
  +    });
  +    if (rc != SIO_OK) return -1;
  +
  +    EVAL0("sio_configure_stage(sios_fd, buflen)", {
  +        rc = sio_configure_stage(sio, sios_fd, "buflen", &buflen);
  +    });
  +    if (rc != SIO_OK) return -1;
  +
  +    EVAL0("sio_configure_stage(sios_fd, fd)", {
  +        rc = sio_configure_stage(sio, sios_fd, "fd", &fd);
  +    });
  +    if (rc != SIO_OK) goto badwrite;
  +    EVAL0("sio_attach(sios_fd)", {
  +        rc = sio_attach(sio, sios_fd, SIO_MODE_READWRITE);
  +    });
  +    if (rc != SIO_OK) goto badwrite;
  +    EVAL0("sio_attach(sios_hello)", {
  +        rc = sio_attach(sio, sios_hello, SIO_MODE_READWRITE);
  +    });
  +    if (rc != SIO_OK) goto badwrite2;
  +
  +    EVAL0("sio_write", {
  +        rc = sio_write(sio, S, len, &actual);
  +    });
  +    if (rc != SIO_OK) error = 1;
  +    EVAL0("sio_push", {
  +        rc = sio_push(sio);
  +    });
  +    if (rc != SIO_OK) error = 1;
  +
  +    EVAL0("sio_detach(sios_hello)", {
  +        rc = sio_detach(sio, sios_hello);
  +    });
  +    if (rc != SIO_OK) error = 1;
  +
  +    result = error;
  +
  +    badwrite2:
  +    EVAL0("sio_detach(sios_fd)", {
  +        rc = sio_detach(sio, sios_fd);
  +    });
  +    if (rc != SIO_OK) result = -1;
  +
  +    badwrite:
  +
  +    /*
  +     * common cleanup
  +     */
  +
  +    EVAL0("sio_destroy_stage", {
  +        rc = sio_destroy_stage(sio, sios_hello);
  +    });
  +    if (rc != SIO_OK) result = -1;
  +    EVAL0("sio_destroy_stage(sios_fd)", {
  +        rc = sio_destroy_stage(sio, sios_fd);
  +    });
  +    if (rc != SIO_OK) result = -1;
  +    EVAL0("sio_destroy", {
  +        rc = sio_destroy(sio);
  +    });
  +    if (rc != SIO_OK) result = -1;
  +
  +    return result;
  +}
  +
   TS_TEST(test_sio_hello)
   {
  +    pid_t child;
  +    int pd[2];
  +    int status;
  +
  +    fflush(stdout);
  +    fflush(stderr);
  +
  +    if (socketpair(AF_UNIX, SOCK_STREAM, 0, pd) == -1) {
  +        ts_test_fail(TS_CTX, "cannot create pipe (%s)\n",
  +            strerror(errno));
  +    }
  +
  +    child = fork();
  +    if (child == -1) {
  +        ts_test_fail(TS_CTX, "cannot fork (%s)\n",
  +            strerror(errno));
  +    }
  +
  +    if (child == 0) {
  +        int result;
  +        close(pd[1]);
  +        result = test_sio_hello_client(NULL, pd[0]);
  +        close(pd[0]);
  +        exit(result ? 1 : 0);
  +    } else {
  +        close(pd[0]);
  +        test_sio_hello_server(_t, pd[1]);
  +        close(pd[1]);
  +        waitpid(child, &status, 0);
  +        if (status != 0) {
  +            ts_test_fail(TS_CTX, "child returned status %08lx\n",
  +                status);
  +        }
  +    }
   }
  +
   
   #if ENABLE_ZLIB
   TS_TEST(test_sio_zlib)
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 30 20:06:38 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7F80E767E2; Thu, 30 Jan 2003 20:06:38 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var/ devtool.conf
Message-Id: <20030130190638.7F80E767E2@mail.ossp.org>
Date: Thu, 30 Jan 2003 20:06:38 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Jan-2003 20:06:38
  Branch: HEAD                             Handle: 2003013019063700

  Modified files:
    ossp-pkg/var            devtool.conf

  Log:
    switch to latest tool chain versions

  Summary:
    Revision    Changes     Path
    1.6         +3  -3      ossp-pkg/var/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 devtool.conf
  --- ossp-pkg/var/devtool.conf	28 Jul 2002 08:10:09 -0000	1.5
  +++ ossp-pkg/var/devtool.conf	30 Jan 2003 19:06:37 -0000	1.6
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.1 "1.[56].*" all
  -    @autogen libtool  1.4.2 "1.4*"
  -    @autogen autoconf 2.53  "2.5[3-9]*"
  +    @autogen shtool   1.6.2 "1.[56].*" all
  +    @autogen libtool  1.4.3 "1.4*"
  +    @autogen autoconf 2.57  "2.5[3-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 30 20:06:50 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1C0F2768E3; Thu, 30 Jan 2003 20:06:50 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val/ devtool.conf
Message-Id: <20030130190650.1C0F2768E3@mail.ossp.org>
Date: Thu, 30 Jan 2003 20:06:50 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Jan-2003 20:06:50
  Branch: HEAD                             Handle: 2003013019064900

  Modified files:
    ossp-pkg/val            devtool.conf

  Log:
    switch to latest tool chain versions

  Summary:
    Revision    Changes     Path
    1.8         +3  -3      ossp-pkg/val/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 devtool.conf
  --- ossp-pkg/val/devtool.conf	28 Jul 2002 08:09:49 -0000	1.7
  +++ ossp-pkg/val/devtool.conf	30 Jan 2003 19:06:49 -0000	1.8
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.1 "1.[56].*" all
  -    @autogen libtool  1.4.2 "1.4*"
  -    @autogen autoconf 2.53  "2.5[3-9]*"
  +    @autogen shtool   1.6.2 "1.[56].*" all
  +    @autogen libtool  1.4.3 "1.4*"
  +    @autogen autoconf 2.57  "2.5[3-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 30 20:07:02 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3C1E57681C; Thu, 30 Jan 2003 20:07:02 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/popt/ devtool.conf
Message-Id: <20030130190702.3C1E57681C@mail.ossp.org>
Date: Thu, 30 Jan 2003 20:07:02 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Jan-2003 20:07:02
  Branch: HEAD                             Handle: 2003013019070100

  Modified files:
    ossp-pkg/popt           devtool.conf

  Log:
    switch to latest tool chain versions

  Summary:
    Revision    Changes     Path
    1.4         +3  -3      ossp-pkg/popt/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/popt/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.conf
  --- ossp-pkg/popt/devtool.conf	28 Jul 2002 08:06:46 -0000	1.3
  +++ ossp-pkg/popt/devtool.conf	30 Jan 2003 19:07:01 -0000	1.4
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.1 "1.6.*" all
  -    @autogen libtool  1.4.2 "1.4*"
  -    @autogen autoconf 2.53  "2.5[3-9]*"
  +    @autogen shtool   1.6.2 "1.6.*" all
  +    @autogen libtool  1.4.3 "1.4*"
  +    @autogen autoconf 2.57  "2.5[3-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 30 20:07:21 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 09304769BA; Thu, 30 Jan 2003 20:07:20 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tai/ devtool.conf
Message-Id: <20030130190720.09304769BA@mail.ossp.org>
Date: Thu, 30 Jan 2003 20:07:20 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Jan-2003 20:07:20
  Branch: HEAD                             Handle: 2003013019072000

  Modified files:
    ossp-pkg/tai            devtool.conf

  Log:
    switch to latest tool chain versions

  Summary:
    Revision    Changes     Path
    1.3         +3  -3      ossp-pkg/tai/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/tai/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.conf
  --- ossp-pkg/tai/devtool.conf	28 Jul 2002 08:08:13 -0000	1.2
  +++ ossp-pkg/tai/devtool.conf	30 Jan 2003 19:07:20 -0000	1.3
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.1 "1.6.*" all
  -    @autogen libtool  1.4.2 "1.4*"
  -    @autogen autoconf 2.53  "2.5[3-9]*"
  +    @autogen shtool   1.6.2 "1.6.*" all
  +    @autogen libtool  1.4.3 "1.4*"
  +    @autogen autoconf 2.57  "2.5[3-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 30 20:07:40 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B213E767E2; Thu, 30 Jan 2003 20:07:40 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pcre/ devtool.conf
Message-Id: <20030130190740.B213E767E2@mail.ossp.org>
Date: Thu, 30 Jan 2003 20:07:40 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Jan-2003 20:07:40
  Branch: HEAD                             Handle: 2003013019074000

  Modified files:
    ossp-pkg/pcre           devtool.conf

  Log:
    switch to latest tool chain versions

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-pkg/pcre/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pcre/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 devtool.conf
  --- ossp-pkg/pcre/devtool.conf	9 Nov 2002 14:45:12 -0000	1.4
  +++ ossp-pkg/pcre/devtool.conf	30 Jan 2003 19:07:40 -0000	1.5
  @@ -5,7 +5,7 @@
   %autogen
       @autogen shtool   1.6.2 "1.6.*" echo install mkdir fixperm tarball
       @autogen libtool  1.4.3 "1.4*"
  -    @autogen autoconf 2.54  "2.5[3-9]*"
  +    @autogen autoconf 2.57  "2.5[3-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 30 20:14:48 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B546C767E2; Thu, 30 Jan 2003 20:14:47 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ devtool.conf
Message-Id: <20030130191447.B546C767E2@mail.ossp.org>
Date: Thu, 30 Jan 2003 20:14:47 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Jan-2003 20:14:47
  Branch: HEAD                             Handle: 2003013019144700

  Modified files:
    ossp-pkg/lmtp2nntp      devtool.conf

  Log:
    switch to latest tool chain versions

  Summary:
    Revision    Changes     Path
    1.10        +2  -2      ossp-pkg/lmtp2nntp/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 devtool.conf
  --- ossp-pkg/lmtp2nntp/devtool.conf	29 May 2002 12:40:33 -0000	1.9
  +++ ossp-pkg/lmtp2nntp/devtool.conf	30 Jan 2003 19:14:47 -0000	1.10
  @@ -10,8 +10,8 @@
       done
   
   %autogen
  -    @autogen shtool   1.6.0 "1.6.*" all
  -    @autogen autoconf 2.53  "2.5[3-9]*"
  +    @autogen shtool   1.6.2 "1.6.*" all
  +    @autogen autoconf 2.57  "2.5[3-9]*"
   
       for name in ex str l2 sa var val popt pcre tai; do
           echo "===> lib_${name} (devtool autogen)"
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 30 20:18:59 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8ACD7767CD; Thu, 30 Jan 2003 20:18:58 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ 00TODO lmtp2nntp_config.c test.sh
Message-Id: <20030130191858.8ACD7767CD@mail.ossp.org>
Date: Thu, 30 Jan 2003 20:18:58 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Jan-2003 20:18:58
  Branch: HEAD                             Handle: 2003013019185700

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO lmtp2nntp_config.c test.sh

  Log:
    Fix a big security hole: the l2_spec() is a varargs function which gets
    a format string and variable arguments. In case only a fixed string is
    used we have to use "%s" as the format string or else "%x" in the string
    is treated like a formatter (and hence cause a segfault or whatever
    else if it tries to fetch args from the stack). This especially also no
    longer requires the formatting constricts to be written %%X...

  Summary:
    Revision    Changes     Path
    1.62        +1  -22     ossp-pkg/lmtp2nntp/00TODO
    1.87        +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.14        +3  -3      ossp-pkg/lmtp2nntp/test.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================================
  $ cvs diff -u -r1.61 -r1.62 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	29 Jul 2002 11:39:43 -0000	1.61
  +++ ossp-pkg/lmtp2nntp/00TODO	30 Jan 2003 19:18:57 -0000	1.62
  @@ -76,26 +76,5 @@
       potential to merge post/header modes          -h [Newsgroups:${_EnvelopeRCPT}\n]
   
   
  -===================================================================
  -RCS file: /e/ossp/cvs/ossp-pkg/fsl/fsl.c,v
  -retrieving revision 1.22
  -retrieving revision 1.21
  -diff -r1.22 -r1.21
  -341c341
  -<         if ((l2rv = l2_spec(&ch, ctx.l2_fslenv, "%s", argl2spec)) != L2_OK) {
  ----
  ->         if ((l2rv = l2_spec(&ch, ctx.l2_fslenv, argl2spec)) != L2_OK) {
  -513c513
  -<                     if ((l2rv = l2_spec(&ch, ctx.l2_env, "%s", argl2spec)) != L2_OK) {
  ----
  ->                     if ((l2rv = l2_spec(&ch, ctx.l2_env, argl2spec)) != L2_OK) {
  -
  -Fix a big security hole: the l2_spec() is a varargs function which gets
  -a format string and variable arguments. In case only a fixed string is
  -used we have to use "%s" as the format string or else "%x" in the string
  -is treated like a formatter (and hence cause a segfault or whatever
  -else if it tries to fetch args from the stack). This especially also no
  -longer requires the formatters to be written %%X...
  -
  -    consider using lib_cfg for configuration file parsing
  +  consider using lib_cfg for configuration file parsing
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================================
  $ cvs diff -u -r1.86 -r1.87 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	30 Jan 2003 15:19:55 -0000	1.86
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	30 Jan 2003 19:18:57 -0000	1.87
  @@ -158,7 +158,7 @@
               fprintf(stderr, "%s:Error: logging failed to configure \"%s\" channel\n", ctx->progname, l2_handler_var.name);
               CU(CONFIG_ERR_LOG);
           }
  -        if ((l2_spec(&ch, ctx->l2_env, ov->data.s)) != L2_OK) {
  +        if ((l2_spec(&ch, ctx->l2_env, "%s", ov->data.s)) != L2_OK) {
               fprintf(stderr, "%s:Error: logging failed to create stream\n", ctx->progname);
               CU(CONFIG_ERR_LOG);
           }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/test.sh
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 test.sh
  --- ossp-pkg/lmtp2nntp/test.sh	4 Mar 2002 15:54:28 -0000	1.13
  +++ ossp-pkg/lmtp2nntp/test.sh	30 Jan 2003 19:18:57 -0000	1.14
  @@ -16,10 +16,10 @@
   Message-Id: <200108141251.f7ECpmn74812@dev.de.cw.net>
   From: Thomas Lotterer <Thomas.Lotterer@example.com>
   Received: from cw.example.com (cw.example.com [10.1.1.32])
  -    by gateway.example.com (8.9.2/8.9.2/$Revision: 1.13 $) with SMTP id NAA08840
  +    by gateway.example.com (8.9.2/8.9.2/$Revision: 1.14 $) with SMTP id NAA08840
       for <thomas.lotterer@gateway.example.com>; Mon, 2 Apr 2001 13:20:25 +0200 (MET DST)
   Received: from history (history.example.org [195.143.102.41])
  -    by cw.example.com (8.11.0/8.11.0/$Revision: 1.13 $) with ESMTP id f32BKPb12235
  +    by cw.example.com (8.11.0/8.11.0/$Revision: 1.14 $) with ESMTP id f32BKPb12235
       for <thomas.lotterer@example.com>; Mon, 2 Apr 2001 13:20:25 +0200
   Received: from example.org (littlemua.example.org [195.143.103.160])
   	by history (8.8.8/8.8.8) with ESMTP id LAA12678;
  @@ -79,7 +79,7 @@
   
    L2CONF="${PREFIX}logspec"
    L2FILE="${PREFIX}log"
  - L2SPEC="'debug: prefix(prefix=\"%%b %%d %%H:%%M:%%S <%%L> lmtp2nntp[%%P]: \",timezone=local) -> file(path=\"${L2FILE}\",append=0,perm=432)'" 
  + L2SPEC="'debug: prefix(prefix=\"%b %d %H:%M:%S <%L> lmtp2nntp[%P]: \",timezone=local) -> file(path=\"${L2FILE}\",append=0,perm=432)'" 
    echo >${L2CONF} "l2spec ${L2SPEC}"
       LOG="-i ${L2CONF}"
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 30 20:27:31 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8911C767CD; Thu, 30 Jan 2003 20:27:30 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ 00TODO Makefile.in fixme.h lmtp2nntp_c...
Message-Id: <20030130192730.8911C767CD@mail.ossp.org>
Date: Thu, 30 Jan 2003 20:27:30 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Jan-2003 20:27:30
  Branch: HEAD                             Handle: 2003013019272801

  Added files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_common.h
  Modified files:
    ossp-pkg/lmtp2nntp      00TODO Makefile.in lmtp2nntp_config.c
                            lmtp2nntp_config.h lmtp2nntp_l2.c lmtp2nntp_main.c
                            lmtp2nntp_msg.c lmtp2nntp_nntp.h
  Removed files:
    ossp-pkg/lmtp2nntp      fixme.h

  Log:
    Implement the decision from yesterday evening and finally rename fixme.h
    to lmtp2nntp_common.h because there is little chance this this stuff
    ever can be moved into more local source contexts.

  Summary:
    Revision    Changes     Path
    1.63        +2  -0      ossp-pkg/lmtp2nntp/00TODO
    1.51        +6  -6      ossp-pkg/lmtp2nntp/Makefile.in
    1.25        +0  -134    ossp-pkg/lmtp2nntp/fixme.h
    1.1         +166 -0     ossp-pkg/lmtp2nntp/lmtp2nntp_common.h
    1.88        +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.10        +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_config.h
    1.4         +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_l2.c
    1.60        +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
    1.31        +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
    1.4         +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================================
  $ cvs diff -u -r1.62 -r1.63 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	30 Jan 2003 19:18:57 -0000	1.62
  +++ ossp-pkg/lmtp2nntp/00TODO	30 Jan 2003 19:27:28 -0000	1.63
  @@ -10,6 +10,8 @@
     TODOs are deferred for later releases. There're usually functional enhancements,
     performance improvements, rewrites, integration of external libraries ...
   
  +  move as much as possible from lmtp2nntp_common.h into local source contexts.
  +
     should we resolv on startup only or for every access or using dns ttl
   
     add --define foo:bar option allowing the user to specify arbitrary variables
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.50 -r1.51 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	14 Aug 2002 21:19:01 -0000	1.50
  +++ ossp-pkg/lmtp2nntp/Makefile.in	30 Jan 2003 19:27:28 -0000	1.51
  @@ -128,15 +128,15 @@
   $(OBJS): Makefile
   
   #   AUTOMATICALLY GENERATED DEPENDENCY LIST - DO NOT EDIT
  -lmtp2nntp_main.o: lmtp2nntp_main.c lmtp2nntp_argz.h lmtp2nntp_shpat.h lmtp2nntp_daemon.h lmtp2nntp_global.h config.h lmtp2nntp_exwrap.h lmtp2nntp_option.h lmtp2nntp_config.h fixme.h lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_lmtp.h lmtp2nntp_version.c
  +lmtp2nntp_main.o: lmtp2nntp_main.c lmtp2nntp_argz.h lmtp2nntp_shpat.h lmtp2nntp_daemon.h lmtp2nntp_global.h config.h lmtp2nntp_exwrap.h lmtp2nntp_option.h lmtp2nntp_config.h lmtp2nntp_common.h lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_lmtp.h lmtp2nntp_version.c
   lmtp2nntp_daemon.o: lmtp2nntp_daemon.c config.h lmtp2nntp_daemon.h
   lmtp2nntp_lmtp.o: lmtp2nntp_lmtp.c lmtp2nntp_lmtp.h config.h
  -lmtp2nntp_nntp.o: lmtp2nntp_nntp.c lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_global.h config.h lmtp2nntp_exwrap.h fixme.h 
  +lmtp2nntp_nntp.o: lmtp2nntp_nntp.c lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_global.h config.h lmtp2nntp_exwrap.h lmtp2nntp_common.h 
   lmtp2nntp_argz.o: lmtp2nntp_argz.c lmtp2nntp_argz.h config.h
   lmtp2nntp_shpat.o: lmtp2nntp_shpat.c config.h lmtp2nntp_shpat.h
  -lmtp2nntp_msg.o: lmtp2nntp_msg.c lmtp2nntp_msg.h lmtp2nntp_global.h config.h lmtp2nntp_exwrap.h lmtp2nntp_argz.h fixme.h lmtp2nntp_nntp.h 
  -lmtp2nntp_option.o: lmtp2nntp_option.c lmtp2nntp_argz.h lmtp2nntp_global.h config.h lmtp2nntp_exwrap.h lmtp2nntp_option.h lmtp2nntp_config.h fixme.h lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_lmtp.h lmtp2nntp_version.c
  -lmtp2nntp_config.o: lmtp2nntp_config.c lmtp2nntp_argz.h lmtp2nntp_global.h config.h lmtp2nntp_exwrap.h lmtp2nntp_option.h lmtp2nntp_config.h fixme.h lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_lmtp.h lmtp2nntp_version.c
  +lmtp2nntp_msg.o: lmtp2nntp_msg.c lmtp2nntp_msg.h lmtp2nntp_global.h config.h lmtp2nntp_exwrap.h lmtp2nntp_argz.h lmtp2nntp_common.h lmtp2nntp_nntp.h 
  +lmtp2nntp_option.o: lmtp2nntp_option.c lmtp2nntp_argz.h lmtp2nntp_global.h config.h lmtp2nntp_exwrap.h lmtp2nntp_option.h lmtp2nntp_config.h lmtp2nntp_common.h lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_lmtp.h lmtp2nntp_version.c
  +lmtp2nntp_config.o: lmtp2nntp_config.c lmtp2nntp_argz.h lmtp2nntp_global.h config.h lmtp2nntp_exwrap.h lmtp2nntp_option.h lmtp2nntp_config.h lmtp2nntp_common.h lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_lmtp.h lmtp2nntp_version.c
   lmtp2nntp_exwrap.o: lmtp2nntp_exwrap.c lmtp2nntp_global.h config.h lmtp2nntp_exwrap.h 
   lmtp2nntp_version.o: lmtp2nntp_version.c lmtp2nntp_version.c
  -lmtp2nntp_l2.o: lmtp2nntp_l2.c fixme.h lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_global.h config.h lmtp2nntp_exwrap.h 
  +lmtp2nntp_l2.o: lmtp2nntp_l2.c lmtp2nntp_common.h lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_global.h config.h lmtp2nntp_exwrap.h 
  @@ .
  rm -f ossp-pkg/lmtp2nntp/fixme.h <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/fixme.h
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_common.h
  ============================================================================
  $ cvs diff -u -r0 -r1.1 lmtp2nntp_common.h
  --- /dev/null	2003-01-30 20:27:29.000000000 +0100
  +++ lmtp2nntp_common.h	2003-01-30 20:27:29.000000000 +0100
  @@ -0,0 +1,166 @@
  +/*
  +**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**
  +**  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  +**  mailer which forwards mails as Usenet news articles via NNTP.
  +**  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +**
  +**  This program is free software; you can redistribute it and/or
  +**  modify it under the terms of the GNU General Public  License
  +**  as published by the Free Software Foundation; either version
  +**  2.0 of the License, or (at your option) any later version.
  +**
  +**  This program is distributed in the hope that it will be useful,
  +**  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +**  General Public License for more details.
  +**
  +**  You should have received a copy of the GNU General Public License
  +**  along with this file; if not, write to the Free Software
  +**  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +**  USA, or contact the OSSP project <ossp@ossp.org>.
  +**
  +**  lmtp2nntp_common.h: common stuff
  +*/
  +
  +/*
  + * FIXME this stuff actually should be not global/common! It was mainly
  + * a temporary fix to allow code migration from lmtp2nntp_main.c's
  + * getopt switch to lmtp2nntp_config.[ch]. Unfortunately it is very hard
  + * to move this remaining stuff into local contexts.
  + */
  +
  +#ifndef __LMTP2NNTP_COMMON_H__
  +#define __LMTP2NNTP_COMMON_H__
  +
  +#include <val.h>
  +#include <var.h>
  +#include <sa.h>
  +
  +struct acl {
  +    char      *acl;
  +    int        not;
  +    size_t     prefixlen;
  +    sa_addr_t *saa;
  +};
  +struct nntp_st;
  +typedef struct nntp_st nntp_t;
  +#include "lmtp2nntp_nntp.h"
  +struct ns {
  +    sa_addr_t      *saa;
  +    sa_t           *sa;
  +    nntp_t         *nntp;
  +    nntp_rc_t       rc;
  +    l2_channel_t   *l2;
  +};
  +struct session {
  +    int     lhlo_seen;
  +    char   *lhlo_domain;
  +};
  +#include <sys/utsname.h>
  +
  +struct headerrule_st;
  +typedef struct headerrule_st headerrule_t;
  +#include <pcre.h>
  +struct headerrule_st {
  +    headerrule_t *next;
  +    int           pri;
  +    char         *regex;
  +    char         *name;
  +    char         *val;
  +    pcre         *pcreRegex;
  +    pcre_extra   *pcreExtra;
  +};
  +headerrule_t *FIXME1;
  +
  +struct headerdata_st;
  +typedef struct headerdata_st headerdata_t;
  +struct headerdata_st {
  +    headerdata_t *prev;
  +    headerdata_t *next;
  +    char *name;
  +    int ndata; /* =0 means data is invalid, =1 means use data.s, >1 means use data.m */
  +    union {
  +        char *s;
  +        char **m;
  +    } data;
  +};
  +headerdata_t *FIXME2;
  +
  +typedef struct {
  +    l2_context_t    ctx;
  +    val_t          *prival;
  +    val_t          *val;
  +    char           *progname;
  +    int             option_groupmode;
  +    int             option_operationmode;
  +    char           *option_operationmodefakestatus;
  +    char           *option_operationmodefakedsn;
  +    int             option_maxmessagesize;
  +    headerrule_t   *option_firstheaderrule;
  +    int             option_timeout_lmtp_accept;
  +    int             option_timeout_lmtp_read;
  +    int             option_timeout_lmtp_write;
  +    int             option_timeout_nntp_connect;
  +    int             option_timeout_nntp_read;
  +    int             option_timeout_nntp_write;
  +    char           *option_nodename;
  +    char           *option_mailfrom;
  +    char           *option_restrictheader;
  +    char           *option_pidfile;
  +    int             option_killflag;
  +    uid_t           option_uid;
  +    int             option_daemon;
  +    int             nacl; /* number of acl structures found at pacl */
  +    struct acl     *pacl; /* pointer to an array of acl structures */
  +    int             option_childsmax;
  +    int             active_childs;
  +    l2_env_t       *l2_env;
  +    l2_channel_t   *l2;
  +    sa_addr_t      *saaServerbind;
  +    sa_t           *saServerbind;
  +    sa_addr_t      *saaClientbind;
  +    sa_t           *saClientbind;
  +    sa_addr_t      *saaIO;
  +    sa_t           *saIO;
  +    int             fdIOi;
  +    int             fdIOo;
  +    int             nns; /* number of ns structures found at pns */
  +    struct ns      *pns; /* pointer to an array of ns structures */
  +    char           *azGroupargs;
  +    size_t          asGroupargs;
  +    struct          session session;
  +    msg_t          *msg;
  +    var_t          *config_varregex;
  +    var_t          *config_varctx;
  +    int             msgcount; /* number of messages processed, used for creating unique ids */
  +} lmtp2nntp_t;
  +
  +#define ERR_EXECUTION 1
  +#define ERR_DELIVERY -2
  +
  +enum {
  +    GROUPMODE_UNDEF = 0,
  +    GROUPMODE_ARG,
  +    GROUPMODE_ENVELOPE,
  +    GROUPMODE_HEADER
  +};
  +
  +enum {
  +    OPERATIONMODE_UNDEF = 0,
  +    OPERATIONMODE_FAKE,
  +    OPERATIONMODE_POST,
  +    OPERATIONMODE_FEED
  +};
  +
  +void msg_headermatrixbuildup(msg_t *msg);
  +void msg_headermatrixteardwn(msg_t *msg);
  +void headerrewrite(lmtp2nntp_t *ctx);
  +
  +#include "l2.h"
  +extern l2_handler_t l2_handler_var;
  +extern void logbook(l2_channel_t *, l2_level_t, const char *, ...);
  +
  +#endif /* __LMTP2NNTP_COMMON_H__ */
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================================
  $ cvs diff -u -r1.87 -r1.88 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	30 Jan 2003 19:18:57 -0000	1.87
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	30 Jan 2003 19:27:29 -0000	1.88
  @@ -65,7 +65,7 @@
   #include "lmtp2nntp_lmtp.h"
   #include "lmtp2nntp_nntp.h"
   #include "lmtp2nntp_msg.h"
  -#include "fixme.h"
  +#include "lmtp2nntp_common.h"
   #define _LMTP2NNTP_VERSION_C_AS_HEADER_
   #include "lmtp2nntp_version.c"
   #undef  _LMTP2NNTP_VERSION_C_AS_HEADER_
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.h
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 lmtp2nntp_config.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.h	30 Jan 2003 15:19:55 -0000	1.9
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.h	30 Jan 2003 19:27:29 -0000	1.10
  @@ -28,7 +28,7 @@
   #define __LMTP2NNTP_CONFIG_H__
   
   #include "lmtp2nntp_global.h"
  -#include "fixme.h"
  +#include "lmtp2nntp_common.h"
   
   typedef enum {
       CONFIG_OK,
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_l2.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 lmtp2nntp_l2.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_l2.c	18 Apr 2002 14:27:41 -0000	1.3
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_l2.c	30 Jan 2003 19:27:29 -0000	1.4
  @@ -27,7 +27,7 @@
   
   #include <stdarg.h>
   #include <stdlib.h>
  -#include "fixme.h"
  +#include "lmtp2nntp_common.h"
   
   /* declare private channel configuration */
   typedef struct {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================================
  $ cvs diff -u -r1.59 -r1.60 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	30 Jan 2003 15:26:24 -0000	1.59
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	30 Jan 2003 19:27:29 -0000	1.60
  @@ -81,7 +81,7 @@
   #include "lmtp2nntp_lmtp.h"
   #include "lmtp2nntp_nntp.h"
   #include "lmtp2nntp_msg.h"
  -#include "fixme.h"
  +#include "lmtp2nntp_common.h"
   #include "sa.h"
   #define _LMTP2NNTP_VERSION_C_AS_HEADER_
   #include "lmtp2nntp_version.c"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 lmtp2nntp_msg.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	30 Jan 2003 13:30:41 -0000	1.30
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	30 Jan 2003 19:27:29 -0000	1.31
  @@ -29,7 +29,7 @@
   
   #include "lmtp2nntp_msg.h"
   #include "lmtp2nntp_argz.h"
  -#include "fixme.h" /* FIMXE logbook only */
  +#include "lmtp2nntp_common.h" /* FIMXE logbook only */
   #include "tai.h"
   #include "str.h"
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.h
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 lmtp2nntp_nntp.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.h	24 Jan 2002 12:07:13 -0000	1.3
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.h	30 Jan 2003 19:27:29 -0000	1.4
  @@ -59,7 +59,7 @@
   } nntp_rc_t;
   
   /*FIXME see fixme above */
  -#include "fixme.h"
  +#include "lmtp2nntp_common.h"
   
   typedef struct {
       int fd;
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 30 20:42:16 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 03EA5767E2; Thu, 30 Jan 2003 20:42:15 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ 00TODO AUTHORS INSTALL Makefile.in NEW...
Message-Id: <20030130194215.03EA5767E2@mail.ossp.org>
Date: Thu, 30 Jan 2003 20:42:15 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Jan-2003 20:42:15
  Branch: HEAD                             Handle: 2003013019421201

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO AUTHORS INSTALL Makefile.in NEWS README
                            THANKS aclocal.m4 configure.ac lmtp2nntp.pod
                            lmtp2nntp_argz.c lmtp2nntp_argz.h
                            lmtp2nntp_common.h lmtp2nntp_config.c
                            lmtp2nntp_config.h lmtp2nntp_daemon.c
                            lmtp2nntp_daemon.h lmtp2nntp_exwrap.c
                            lmtp2nntp_exwrap.h lmtp2nntp_global.h
                            lmtp2nntp_l2.c lmtp2nntp_lmtp.c lmtp2nntp_lmtp.h
                            lmtp2nntp_main.c lmtp2nntp_msg.c lmtp2nntp_msg.h
                            lmtp2nntp_nntp.c lmtp2nntp_nntp.h
                            lmtp2nntp_option.c lmtp2nntp_option.h
                            lmtp2nntp_shpat.c lmtp2nntp_shpat.h

  Log:
    Apply the standard OSSP copyright header, document ASCII art and fix
    URL to lmtp2nntp homepage.

  Summary:
    Revision    Changes     Path
    1.64        +9  -0      ossp-pkg/lmtp2nntp/00TODO
    1.4         +6  -8      ossp-pkg/lmtp2nntp/AUTHORS
    1.13        +6  -8      ossp-pkg/lmtp2nntp/INSTALL
    1.52        +5  -3      ossp-pkg/lmtp2nntp/Makefile.in
    1.9         +6  -8      ossp-pkg/lmtp2nntp/NEWS
    1.24        +16 -16     ossp-pkg/lmtp2nntp/README
    1.5         +6  -8      ossp-pkg/lmtp2nntp/THANKS
    1.9         +5  -3      ossp-pkg/lmtp2nntp/aclocal.m4
    1.30        +5  -3      ossp-pkg/lmtp2nntp/configure.ac
    1.39        +5  -3      ossp-pkg/lmtp2nntp/lmtp2nntp.pod
    1.3         +5  -3      ossp-pkg/lmtp2nntp/lmtp2nntp_argz.c
    1.3         +6  -4      ossp-pkg/lmtp2nntp/lmtp2nntp_argz.h
    1.2         +5  -3      ossp-pkg/lmtp2nntp/lmtp2nntp_common.h
    1.89        +5  -4      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.11        +7  -3      ossp-pkg/lmtp2nntp/lmtp2nntp_config.h
    1.2         +29 -4      ossp-pkg/lmtp2nntp/lmtp2nntp_daemon.c
    1.2         +32 -3      ossp-pkg/lmtp2nntp/lmtp2nntp_daemon.h
    1.3         +5  -4      ossp-pkg/lmtp2nntp/lmtp2nntp_exwrap.c
    1.3         +5  -4      ossp-pkg/lmtp2nntp/lmtp2nntp_exwrap.h
    1.6         +6  -4      ossp-pkg/lmtp2nntp/lmtp2nntp_global.h
    1.5         +5  -4      ossp-pkg/lmtp2nntp/lmtp2nntp_l2.c
    1.3         +6  -4      ossp-pkg/lmtp2nntp/lmtp2nntp_lmtp.c
    1.3         +6  -4      ossp-pkg/lmtp2nntp/lmtp2nntp_lmtp.h
    1.61        +6  -4      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
    1.32        +6  -4      ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
    1.8         +6  -4      ossp-pkg/lmtp2nntp/lmtp2nntp_msg.h
    1.3         +6  -4      ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.c
    1.5         +6  -4      ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.h
    1.22        +6  -4      ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
    1.8         +5  -3      ossp-pkg/lmtp2nntp/lmtp2nntp_option.h
    1.3         +6  -4      ossp-pkg/lmtp2nntp/lmtp2nntp_shpat.c
    1.3         +6  -4      ossp-pkg/lmtp2nntp/lmtp2nntp_shpat.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================================
  $ cvs diff -u -r1.63 -r1.64 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	30 Jan 2003 19:27:28 -0000	1.63
  +++ ossp-pkg/lmtp2nntp/00TODO	30 Jan 2003 19:42:12 -0000	1.64
  @@ -1,3 +1,12 @@
  +   _       ___  ____ ____  ____   _         _        ___            _
  +  |_|_ _  / _ \/ ___/ ___||  _ \ | |_ _ __ | |_ _ __|__ \ _ _  _ _ | |_ _ __
  +  _|_||_|| | | \___ \___ \| |_) || | ' `  \| __| '_ \ _) | ' \| ' \| __| '_ \
  + |_||_|_|| |_| |___) |__) |  __/ | | || || | |_| |_) / _/| || | || | |_| |_) |
  +  |_|_|_| \___/|____/____/|_|    |_|_||_||_|\__| .__/____|_||_|_||_|\__| .__/
  +                                               |_|                     |_|
  +  OSSP lmtp2nntp - Mail to News Gateway
  +
  +  TODO
   
     before release, check for
     - FIXME
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/AUTHORS
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 AUTHORS
  --- ossp-pkg/lmtp2nntp/AUTHORS	13 Sep 2001 13:45:12 -0000	1.3
  +++ ossp-pkg/lmtp2nntp/AUTHORS	30 Jan 2003 19:42:12 -0000	1.4
  @@ -1,11 +1,9 @@
  -
  -   _           _        ____              _         
  -  | |_ __ ___ | |_ _ __|___ \ _ __  _ __ | |_ _ __  
  -  | | '_ ` _ \| __| '_ \ __) | '_ \| '_ \| __| '_ \ 
  -  | | | | | | | |_| |_) / __/| | | | | | | |_| |_) |
  -  |_|_| |_| |_|\__| .__/_____|_| |_|_| |_|\__| .__/ 
  -                  |_|                        |_|    
  -
  +   _       ___  ____ ____  ____   _         _        ___            _
  +  |_|_ _  / _ \/ ___/ ___||  _ \ | |_ _ __ | |_ _ __|__ \ _ _  _ _ | |_ _ __
  +  _|_||_|| | | \___ \___ \| |_) || | ' `  \| __| '_ \ _) | ' \| ' \| __| '_ \
  + |_||_|_|| |_| |___) |__) |  __/ | | || || | |_| |_) / _/| || | || | |_| |_) |
  +  |_|_|_| \___/|____/____/|_|    |_|_||_||_|\__| .__/____|_||_|_||_|\__| .__/
  +                                               |_|                     |_|
     OSSP lmtp2nntp - Mail to News Gateway
     
     AUTHORS
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/INSTALL
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 INSTALL
  --- ossp-pkg/lmtp2nntp/INSTALL	14 Nov 2001 13:57:14 -0000	1.12
  +++ ossp-pkg/lmtp2nntp/INSTALL	30 Jan 2003 19:42:12 -0000	1.13
  @@ -1,11 +1,9 @@
  -
  -   _           _        ____              _         
  -  | |_ __ ___ | |_ _ __|___ \ _ __  _ __ | |_ _ __  
  -  | | '_ ` _ \| __| '_ \ __) | '_ \| '_ \| __| '_ \ 
  -  | | | | | | | |_| |_) / __/| | | | | | | |_| |_) |
  -  |_|_| |_| |_|\__| .__/_____|_| |_|_| |_|\__| .__/ 
  -                  |_|                        |_|    
  -
  +   _       ___  ____ ____  ____   _         _        ___            _
  +  |_|_ _  / _ \/ ___/ ___||  _ \ | |_ _ __ | |_ _ __|__ \ _ _  _ _ | |_ _ __
  +  _|_||_|| | | \___ \___ \| |_) || | ' `  \| __| '_ \ _) | ' \| ' \| __| '_ \
  + |_||_|_|| |_| |___) |__) |  __/ | | || || | |_| |_) / _/| || | || | |_| |_) |
  +  |_|_|_| \___/|____/____/|_|    |_|_||_||_|\__| .__/____|_||_|_||_|\__| .__/
  +                                               |_|                     |_|
     OSSP lmtp2nntp - Mail to News Gateway
   
     INSTALLATION
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.51 -r1.52 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	30 Jan 2003 19:27:28 -0000	1.51
  +++ ossp-pkg/lmtp2nntp/Makefile.in	30 Jan 2003 19:42:12 -0000	1.52
  @@ -1,10 +1,12 @@
   ##
  -##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  OSSP lmtp2nntp - Mail to News Gateway
  +##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   ##  mailer which forwards mails as Usenet news articles via NNTP.
  -##  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +##  It can be found at http://www.ossp.org/pkg/tool/lmtp2nntp/.
   ##
   ##  This program is free software; you can redistribute it and/or
   ##  modify it under the terms of the GNU General Public  License
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/NEWS
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 NEWS
  --- ossp-pkg/lmtp2nntp/NEWS	18 Apr 2002 13:30:41 -0000	1.8
  +++ ossp-pkg/lmtp2nntp/NEWS	30 Jan 2003 19:42:12 -0000	1.9
  @@ -1,11 +1,9 @@
  -
  -   _           _        ____              _         
  -  | |_ __ ___ | |_ _ __|___ \ _ __  _ __ | |_ _ __  
  -  | | '_ ` _ \| __| '_ \ __) | '_ \| '_ \| __| '_ \ 
  -  | | | | | | | |_| |_) / __/| | | | | | | |_| |_) |
  -  |_|_| |_| |_|\__| .__/_____|_| |_|_| |_|\__| .__/ 
  -                  |_|                        |_|    
  -
  +   _       ___  ____ ____  ____   _         _        ___            _
  +  |_|_ _  / _ \/ ___/ ___||  _ \ | |_ _ __ | |_ _ __|__ \ _ _  _ _ | |_ _ __
  +  _|_||_|| | | \___ \___ \| |_) || | ' `  \| __| '_ \ _) | ' \| ' \| __| '_ \
  + |_||_|_|| |_| |___) |__) |  __/ | | || || | |_| |_) / _/| || | || | |_| |_) |
  +  |_|_|_| \___/|____/____/|_|    |_|_||_||_|\__| .__/____|_||_|_||_|\__| .__/
  +                                               |_|                     |_|
     OSSP lmtp2nntp - Mail to News Gateway
   
     NEWS
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/README
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 README
  --- ossp-pkg/lmtp2nntp/README	14 Aug 2002 21:19:01 -0000	1.23
  +++ ossp-pkg/lmtp2nntp/README	30 Jan 2003 19:42:12 -0000	1.24
  @@ -1,11 +1,9 @@
  -
  -   _           _        ____              _         
  -  | |_ __ ___ | |_ _ __|___ \ _ __  _ __ | |_ _ __  
  -  | | '_ ` _ \| __| '_ \ __) | '_ \| '_ \| __| '_ \ 
  -  | | | | | | | |_| |_) / __/| | | | | | | |_| |_) |
  -  |_|_| |_| |_|\__| .__/_____|_| |_|_| |_|\__| .__/ 
  -                  |_|                        |_|    
  -
  +   _       ___  ____ ____  ____   _         _        ___            _
  +  |_|_ _  / _ \/ ___/ ___||  _ \ | |_ _ __ | |_ _ __|__ \ _ _  _ _ | |_ _ __
  +  _|_||_|| | | \___ \___ \| |_) || | ' `  \| __| '_ \ _) | ' \| ' \| __| '_ \
  + |_||_|_|| |_| |___) |__) |  __/ | | || || | |_| |_) / _/| || | || | |_| |_) |
  +  |_|_|_| \___/|____/____/|_|    |_|_||_||_|\__| .__/____|_||_|_||_|\__| .__/
  +                                               |_|                     |_|
     OSSP lmtp2nntp - Mail to News Gateway
     Version 1.2a6 (14-Aug-2002)
   
  @@ -15,9 +13,10 @@
     handling and resource management needs some work. Documentation does not
     reflect changes and news for the v1.2 release.
   
  -  The 1.2a4 has been tested in a production environment and successfully
  -  gatewayed some thousand messages. Memory leaked an average of 30 bytes per
  -  article. No functional bugs were found, no coredumps were seen.
  +  The 1.2 alpha versions have been tested in a production environment
  +  and successfully gatewayed some thousand messages. Memory leaked an
  +  average of 30 bytes per article. No functional bugs were found, no
  +  coredumps were seen.
   
     ABSTRACT
   
  @@ -34,12 +33,13 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   
     This file is part of OSSP lmtp2nntp, an LMTP speaking local
     mailer which forwards mails as Usenet news articles via NNTP.
  -  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +  It can be found at http://www.ossp.org/pkg/tool/lmtp2nntp/.
   
     This program is free software; you can redistribute it and/or
     modify it under the terms of the GNU General Public  License
  @@ -60,6 +60,6 @@
   
     The documentation and latest release can be found on
   
  -  o http://www.ossp.org/pkg/lmtp2nntp/ [STILL NOT AVAILABLE]
  -  o  ftp://ftp.ossp.org/pkg/lmtp2nntp/
  +  o http://www.ossp.org/pkg/tool/lmtp2nntp/
  +  o  ftp://ftp.ossp.org/pkg/tool/lmtp2nntp/
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/THANKS
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 THANKS
  --- ossp-pkg/lmtp2nntp/THANKS	14 Mar 2002 16:07:52 -0000	1.4
  +++ ossp-pkg/lmtp2nntp/THANKS	30 Jan 2003 19:42:12 -0000	1.5
  @@ -1,11 +1,9 @@
  -
  -   _           _        ____              _         
  -  | |_ __ ___ | |_ _ __|___ \ _ __  _ __ | |_ _ __  
  -  | | '_ ` _ \| __| '_ \ __) | '_ \| '_ \| __| '_ \ 
  -  | | | | | | | |_| |_) / __/| | | | | | | |_| |_) |
  -  |_|_| |_| |_|\__| .__/_____|_| |_|_| |_|\__| .__/ 
  -                  |_|                        |_|    
  -
  +   _       ___  ____ ____  ____   _         _        ___            _
  +  |_|_ _  / _ \/ ___/ ___||  _ \ | |_ _ __ | |_ _ __|__ \ _ _  _ _ | |_ _ __
  +  _|_||_|| | | \___ \___ \| |_) || | ' `  \| __| '_ \ _) | ' \| ' \| __| '_ \
  + |_||_|_|| |_| |___) |__) |  __/ | | || || | |_| |_) / _/| || | || | |_| |_) |
  +  |_|_|_| \___/|____/____/|_|    |_|_||_||_|\__| .__/____|_||_|_||_|\__| .__/
  +                                               |_|                     |_|
     OSSP lmtp2nntp - Mail to News Gateway
   
     THANKS
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 aclocal.m4
  --- ossp-pkg/lmtp2nntp/aclocal.m4	27 Jan 2002 11:49:49 -0000	1.8
  +++ ossp-pkg/lmtp2nntp/aclocal.m4	30 Jan 2003 19:42:12 -0000	1.9
  @@ -1,10 +1,12 @@
   dnl ##
  -dnl ##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  OSSP lmtp2nntp - Mail to News Gateway
  +dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   dnl ##  mailer which forwards mails as Usenet news articles via NNTP.
  -dnl ##  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +dnl ##  It can be found at http://www.ossp.org/pkg/tool/lmtp2nntp/.
   dnl ##
   dnl ##  This program is free software; you can redistribute it and/or
   dnl ##  modify it under the terms of the GNU General Public  License
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/configure.ac
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 configure.ac
  --- ossp-pkg/lmtp2nntp/configure.ac	7 Aug 2002 16:04:52 -0000	1.29
  +++ ossp-pkg/lmtp2nntp/configure.ac	30 Jan 2003 19:42:12 -0000	1.30
  @@ -1,10 +1,12 @@
   dnl ##
  -dnl ##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  OSSP lmtp2nntp - Mail to News Gateway
  +dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   dnl ##  mailer which forwards mails as Usenet news articles via NNTP.
  -dnl ##  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +dnl ##  It can be found at http://www.ossp.org/pkg/tool/lmtp2nntp/.
   dnl ##
   dnl ##  This program is free software; you can redistribute it and/or
   dnl ##  modify it under the terms of the GNU General Public  License
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ============================================================================
  $ cvs diff -u -r1.38 -r1.39 lmtp2nntp.pod
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.pod	30 Jan 2003 13:41:50 -0000	1.38
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.pod	30 Jan 2003 19:42:12 -0000	1.39
  @@ -1,10 +1,12 @@
   ##
  -##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  OSSP lmtp2nntp - Mail to News Gateway
  +##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   ##  mailer which forwards mails as Usenet news articles via NNTP.
  -##  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +##  It can be found at http://www.ossp.org/pkg/tool/lmtp2nntp/.
   ##
   ##  This program is free software; you can redistribute it and/or
   ##  modify it under the terms of the GNU General Public  License
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_argz.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 lmtp2nntp_argz.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_argz.c	31 Dec 2001 15:15:36 -0000	1.2
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_argz.c	30 Jan 2003 19:42:12 -0000	1.3
  @@ -1,10 +1,12 @@
   /*
  -**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  OSSP lmtp2nntp - Mail to News Gateway
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  -**  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +**  It can be found at http://www.ossp.org/pkg/tool/lmtp2nntp/.
   **
   **  This program is free software; you can redistribute it and/or
   **  modify it under the terms of the GNU General Public  License
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_argz.h
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 lmtp2nntp_argz.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_argz.h	31 Dec 2001 15:15:36 -0000	1.2
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_argz.h	30 Jan 2003 19:42:12 -0000	1.3
  @@ -1,10 +1,12 @@
   /*
  -**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  OSSP lmtp2nntp - Mail to News Gateway
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  -**  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +**  It can be found at http://www.ossp.org/pkg/tool/lmtp2nntp/.
   **
   **  This program is free software; you can redistribute it and/or
   **  modify it under the terms of the GNU General Public  License
  @@ -21,7 +23,7 @@
   **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
   **  USA, or contact the OSSP project <ossp@ossp.org>.
   **
  -**  argz.c: Zero-Terminated Argument Vector library (API)
  +**  lmtp2nntp_argz.c: Zero-Terminated Argument Vector library (API)
   */
   
   /* Routines for dealing with '\0' separated arg vectors.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_common.h
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 lmtp2nntp_common.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_common.h	30 Jan 2003 19:27:29 -0000	1.1
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_common.h	30 Jan 2003 19:42:12 -0000	1.2
  @@ -1,10 +1,12 @@
   /*
  -**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  OSSP lmtp2nntp - Mail to News Gateway
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  -**  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +**  It can be found at http://www.ossp.org/pkg/tool/lmtp2nntp/.
   **
   **  This program is free software; you can redistribute it and/or
   **  modify it under the terms of the GNU General Public  License
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================================
  $ cvs diff -u -r1.88 -r1.89 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	30 Jan 2003 19:27:29 -0000	1.88
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	30 Jan 2003 19:42:12 -0000	1.89
  @@ -1,11 +1,12 @@
  -
   /*
  -**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  OSSP lmtp2nntp - Mail to News Gateway
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  -**  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +**  It can be found at http://www.ossp.org/pkg/tool/lmtp2nntp/.
   **
   **  This program is free software; you can redistribute it and/or
   **  modify it under the terms of the GNU General Public  License
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.h
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 lmtp2nntp_config.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.h	30 Jan 2003 19:27:29 -0000	1.10
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.h	30 Jan 2003 19:42:13 -0000	1.11
  @@ -1,10 +1,12 @@
   /*
  -**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  OSSP lmtp2nntp - Mail to News Gateway
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  -**  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +**  It can be found at http://www.ossp.org/pkg/tool/lmtp2nntp/.
   **
   **  This program is free software; you can redistribute it and/or
   **  modify it under the terms of the GNU General Public  License
  @@ -37,4 +39,6 @@
   } lmtp2nntp_config_rc_t;
   
   lmtp2nntp_config_rc_t config_context(lmtp2nntp_t *);
  +
   #endif /* __LMTP2NNTP_CONFIG_H__ */
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_daemon.c
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 lmtp2nntp_daemon.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_daemon.c	31 Dec 2001 11:09:52 -0000	1.1
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_daemon.c	30 Jan 2003 19:42:13 -0000	1.2
  @@ -1,9 +1,29 @@
   /*
  -**  daemon.c -- daemonize current process 
  -**  Copyright (c) 1999-2000 Ralf S. Engelschall, All Rights Reserved. 
  +**  OSSP lmtp2nntp - Mail to News Gateway
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
  -**  See "Unix Programming Frequently Asked Questions":
  -**  http://www.erlenstar.demon.co.uk/unix/faq_2.html#SEC10
  +**  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  +**  mailer which forwards mails as Usenet news articles via NNTP.
  +**  It can be found at http://www.ossp.org/pkg/tool/lmtp2nntp/.
  +**
  +**  This program is free software; you can redistribute it and/or
  +**  modify it under the terms of the GNU General Public  License
  +**  as published by the Free Software Foundation; either version
  +**  2.0 of the License, or (at your option) any later version.
  +**
  +**  This program is distributed in the hope that it will be useful,
  +**  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +**  General Public License for more details.
  +**
  +**  You should have received a copy of the GNU General Public License
  +**  along with this file; if not, write to the Free Software
  +**  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +**  USA, or contact the OSSP project <ossp@ossp.org>.
  +**
  +**  lmtp2nntp_daemon.c: daemonize current process
   */
   
   #include "config.h"
  @@ -18,6 +38,11 @@
   #endif
   
   #include "lmtp2nntp_daemon.h"
  +
  +/*
  + *  See "Unix Programming Frequently Asked Questions":
  + *  http://www.erlenstar.demon.co.uk/unix/faq_2.html#SEC10
  + */
   
   int daemonize(void)
   {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_daemon.h
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 lmtp2nntp_daemon.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_daemon.h	31 Dec 2001 11:09:53 -0000	1.1
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_daemon.h	30 Jan 2003 19:42:13 -0000	1.2
  @@ -1,6 +1,35 @@
  -#ifndef _DAEMON_H_
  -#define _DAEMON_H_
  +/*
  +**  OSSP lmtp2nntp - Mail to News Gateway
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +**
  +**  This file is part of OSSP lmtp2nntp, an LMTP speaking local
  +**  mailer which forwards mails as Usenet news articles via NNTP.
  +**  It can be found at http://www.ossp.org/pkg/tool/lmtp2nntp/.
  +**
  +**  This program is free software; you can redistribute it and/or
  +**  modify it under the terms of the GNU General Public  License
  +**  as published by the Free Software Foundation; either version
  +**  2.0 of the License, or (at your option) any later version.
  +**
  +**  This program is distributed in the hope that it will be useful,
  +**  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +**  General Public License for more details.
  +**
  +**  You should have received a copy of the GNU General Public License
  +**  along with this file; if not, write to the Free Software
  +**  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +**  USA, or contact the OSSP project <ossp@ossp.org>.
  +**
  +**  lmtp2nntp_daemon.h: daemonize current process API
  +*/
  +
  +#ifndef _LMTP2NNTP_DAEMON_H_
  +#define _LMTP2NNTP_DAEMON_H_
   
   int daemonize(void);
   
  -#endif /* _DAEMON_H_ */
  +#endif /* _LMTP2NNTP_DAEMON_H_ */
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_exwrap.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 lmtp2nntp_exwrap.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_exwrap.c	27 Feb 2002 09:34:41 -0000	1.2
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_exwrap.c	30 Jan 2003 19:42:13 -0000	1.3
  @@ -1,11 +1,12 @@
  -
   /*
  -**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  OSSP lmtp2nntp - Mail to News Gateway
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  -**  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +**  It can be found at http://www.ossp.org/pkg/tool/lmtp2nntp/.
   **
   **  This program is free software; you can redistribute it and/or
   **  modify it under the terms of the GNU General Public  License
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_exwrap.h
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 lmtp2nntp_exwrap.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_exwrap.h	27 Feb 2002 09:34:41 -0000	1.2
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_exwrap.h	30 Jan 2003 19:42:13 -0000	1.3
  @@ -1,11 +1,12 @@
  -
   /*
  -**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  OSSP lmtp2nntp - Mail to News Gateway
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  -**  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +**  It can be found at http://www.ossp.org/pkg/tool/lmtp2nntp/.
   **
   **  This program is free software; you can redistribute it and/or
   **  modify it under the terms of the GNU General Public  License
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_global.h
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 lmtp2nntp_global.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_global.h	14 Feb 2002 10:51:50 -0000	1.5
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_global.h	30 Jan 2003 19:42:13 -0000	1.6
  @@ -1,10 +1,12 @@
   /*
  -**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  OSSP lmtp2nntp - Mail to News Gateway
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  -**  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +**  It can be found at http://www.ossp.org/pkg/tool/lmtp2nntp/.
   **
   **  This program is free software; you can redistribute it and/or
   **  modify it under the terms of the GNU General Public  License
  @@ -21,7 +23,7 @@
   **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
   **  USA, or contact the OSSP project <ossp@ossp.org>.
   **
  -**  lmtp2nntp.h: LMTP to NNTP global header
  +**  lmtp2nntp_global.h: LMTP to NNTP global header
   */
   
   #ifndef __LMTP2NNTP_H__
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_l2.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 lmtp2nntp_l2.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_l2.c	30 Jan 2003 19:27:29 -0000	1.4
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_l2.c	30 Jan 2003 19:42:13 -0000	1.5
  @@ -1,11 +1,12 @@
  -
   /*
  -**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  OSSP lmtp2nntp - Mail to News Gateway
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  -**  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +**  It can be found at http://www.ossp.org/pkg/tool/lmtp2nntp/.
   **
   **  This program is free software; you can redistribute it and/or
   **  modify it under the terms of the GNU General Public  License
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_lmtp.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 lmtp2nntp_lmtp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_lmtp.c	31 Dec 2001 15:15:36 -0000	1.2
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_lmtp.c	30 Jan 2003 19:42:13 -0000	1.3
  @@ -1,10 +1,12 @@
   /*
  -**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  OSSP lmtp2nntp - Mail to News Gateway
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  -**  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +**  It can be found at http://www.ossp.org/pkg/tool/lmtp2nntp/.
   **
   **  This program is free software; you can redistribute it and/or
   **  modify it under the terms of the GNU General Public  License
  @@ -21,7 +23,7 @@
   **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
   **  USA, or contact the OSSP project <ossp@ossp.org>.
   **
  -**  lmtp.c: Local Mail Transfer Protocol (LMTP) server library
  +**  lmtp2nntp_lmtp.c: Local Mail Transfer Protocol (LMTP) server library
   */
   
   #include <stdio.h>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_lmtp.h
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 lmtp2nntp_lmtp.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_lmtp.h	31 Dec 2001 15:15:36 -0000	1.2
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_lmtp.h	30 Jan 2003 19:42:13 -0000	1.3
  @@ -1,10 +1,12 @@
   /*
  -**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  OSSP lmtp2nntp - Mail to News Gateway
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  -**  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +**  It can be found at http://www.ossp.org/pkg/tool/lmtp2nntp/.
   **
   **  This program is free software; you can redistribute it and/or
   **  modify it under the terms of the GNU General Public  License
  @@ -21,7 +23,7 @@
   **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
   **  USA, or contact the OSSP project <ossp@ossp.org>.
   **
  -**  lmtp.h: Local Mail Transfer Protocol (LMTP) server library (API)
  +**  lmtp2nntp_lmtp.h: Local Mail Transfer Protocol (LMTP) server library (API)
   */
   
   #ifndef __LMTP_H__
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================================
  $ cvs diff -u -r1.60 -r1.61 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	30 Jan 2003 19:27:29 -0000	1.60
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	30 Jan 2003 19:42:13 -0000	1.61
  @@ -1,10 +1,12 @@
   /*
  -**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  OSSP lmtp2nntp - Mail to News Gateway
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  -**  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +**  It can be found at http://www.ossp.org/pkg/tool/lmtp2nntp/.
   **
   **  This program is free software; you can redistribute it and/or
   **  modify it under the terms of the GNU General Public  License
  @@ -21,7 +23,7 @@
   **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
   **  USA, or contact the OSSP project <ossp@ossp.org>.
   **
  -**  lmtp2nntp.c: LMTP to NNTP main procedure
  +**  lmtp2nntp_main.c: LMTP to NNTP main procedure
   */
   
   #include <stdlib.h>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 lmtp2nntp_msg.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	30 Jan 2003 19:27:29 -0000	1.31
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	30 Jan 2003 19:42:13 -0000	1.32
  @@ -1,10 +1,12 @@
   /*
  -**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  OSSP lmtp2nntp - Mail to News Gateway
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  -**  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +**  It can be found at http://www.ossp.org/pkg/tool/lmtp2nntp/.
   **
   **  This program is free software; you can redistribute it and/or
   **  modify it under the terms of the GNU General Public  License
  @@ -21,7 +23,7 @@
   **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
   **  USA, or contact the OSSP project <ossp@ossp.org>.
   **
  -**  msg.c: mail message manipulation library
  +**  lmtp2nntp_msg.c: mail message manipulation library
   */
   
   #include <stdlib.h>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.h
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 lmtp2nntp_msg.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.h	29 May 2002 21:35:52 -0000	1.7
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.h	30 Jan 2003 19:42:13 -0000	1.8
  @@ -1,10 +1,12 @@
   /*
  -**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  OSSP lmtp2nntp - Mail to News Gateway
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  -**  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +**  It can be found at http://www.ossp.org/pkg/tool/lmtp2nntp/.
   **
   **  This program is free software; you can redistribute it and/or
   **  modify it under the terms of the GNU General Public  License
  @@ -21,7 +23,7 @@
   **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
   **  USA, or contact the OSSP project <ossp@ossp.org>.
   **
  -**  msg.c: mail message manipulation library (API)
  +**  lmtp2nntp_msg.h: mail message manipulation library (API)
   */
   
   #ifndef __MSG_H__
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 lmtp2nntp_nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.c	31 Dec 2001 15:15:36 -0000	1.2
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.c	30 Jan 2003 19:42:13 -0000	1.3
  @@ -1,10 +1,12 @@
   /*
  -**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  OSSP lmtp2nntp - Mail to News Gateway
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  -**  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +**  It can be found at http://www.ossp.org/pkg/tool/lmtp2nntp/.
   **
   **  This program is free software; you can redistribute it and/or
   **  modify it under the terms of the GNU General Public  License
  @@ -21,7 +23,7 @@
   **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
   **  USA, or contact the OSSP project <ossp@ossp.org>.
   **
  -**  nntp.c: Network News Transfer Protocol (NNTP) client library
  +**  lmtp2nntp_nntp.c: Network News Transfer Protocol (NNTP) client library
   */
   
   #include <stdio.h>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.h
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 lmtp2nntp_nntp.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.h	30 Jan 2003 19:27:29 -0000	1.4
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.h	30 Jan 2003 19:42:13 -0000	1.5
  @@ -1,10 +1,12 @@
   /*
  -**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  OSSP lmtp2nntp - Mail to News Gateway
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  -**  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +**  It can be found at http://www.ossp.org/pkg/tool/lmtp2nntp/.
   **
   **  This program is free software; you can redistribute it and/or
   **  modify it under the terms of the GNU General Public  License
  @@ -21,7 +23,7 @@
   **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
   **  USA, or contact the OSSP project <ossp@ossp.org>.
   **
  -**  nntp.h: Network News Transfer Protocol (NNTP) client library (API)
  +**  lmtp2nntp_nntp.h: Network News Transfer Protocol (NNTP) client library (API)
   */
   
   #ifndef __NNTP_H__
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 lmtp2nntp_option.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	14 Aug 2002 12:30:16 -0000	1.21
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	30 Jan 2003 19:42:13 -0000	1.22
  @@ -1,10 +1,12 @@
   /*
  -**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  OSSP lmtp2nntp - Mail to News Gateway
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  -**  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +**  It can be found at http://www.ossp.org/pkg/tool/lmtp2nntp/.
   **
   **  This program is free software; you can redistribute it and/or
   **  modify it under the terms of the GNU General Public  License
  @@ -21,7 +23,7 @@
   **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
   **  USA, or contact the OSSP project <ossp@ossp.org>.
   **
  -**  lmtp2nntp_option.h: option parsing
  +**  lmtp2nntp_option.c: option parsing
   */
   
   #include <stdlib.h>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_option.h
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 lmtp2nntp_option.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_option.h	7 Mar 2002 16:03:56 -0000	1.7
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_option.h	30 Jan 2003 19:42:13 -0000	1.8
  @@ -1,10 +1,12 @@
   /*
  -**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  OSSP lmtp2nntp - Mail to News Gateway
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  -**  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +**  It can be found at http://www.ossp.org/pkg/tool/lmtp2nntp/.
   **
   **  This program is free software; you can redistribute it and/or
   **  modify it under the terms of the GNU General Public  License
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_shpat.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 lmtp2nntp_shpat.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_shpat.c	31 Dec 2001 15:15:36 -0000	1.2
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_shpat.c	30 Jan 2003 19:42:13 -0000	1.3
  @@ -1,10 +1,12 @@
   /*
  -**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  OSSP lmtp2nntp - Mail to News Gateway
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  -**  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +**  It can be found at http://www.ossp.org/pkg/tool/lmtp2nntp/.
   **
   **  This program is free software; you can redistribute it and/or
   **  modify it under the terms of the GNU General Public  License
  @@ -21,7 +23,7 @@
   **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
   **  USA, or contact the OSSP project <ossp@ossp.org>.
   **
  -**  shpat_match.c: Shell Pattern Matching library
  +**  lmtp2nntp_shpat.c: Shell Pattern Matching library
   */
   
   /*
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_shpat.h
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 lmtp2nntp_shpat.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_shpat.h	31 Dec 2001 15:15:36 -0000	1.2
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_shpat.h	30 Jan 2003 19:42:13 -0000	1.3
  @@ -1,10 +1,12 @@
   /*
  -**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  OSSP lmtp2nntp - Mail to News Gateway
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  -**  It can be found at http://www.ossp.org/pkg/lmtp2nntp/.
  +**  It can be found at http://www.ossp.org/pkg/tool/lmtp2nntp/.
   **
   **  This program is free software; you can redistribute it and/or
   **  modify it under the terms of the GNU General Public  License
  @@ -21,7 +23,7 @@
   **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
   **  USA, or contact the OSSP project <ossp@ossp.org>.
   **
  -**  shpat_match.c: Shell Pattern Matching library (API)
  +**  lmtp2nntp_shpat.h: Shell Pattern Matching library (API)
   */
   
   /*-
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 30 20:45:23 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 30A427681C; Thu, 30 Jan 2003 20:45:23 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ AUTHORS INSTALL Makefile.in configure....
Message-Id: <20030130194523.30A427681C@mail.ossp.org>
Date: Thu, 30 Jan 2003 20:45:23 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Jan-2003 20:45:22
  Branch: HEAD                             Handle: 2003013019451901

  Modified files:
    ossp-pkg/lmtp2nntp      AUTHORS INSTALL Makefile.in configure.ac devtool
                            devtool.func example.conf lmtp2nntp.pod
                            lmtp2nntp_argz.c lmtp2nntp_config.c
                            lmtp2nntp_daemon.c lmtp2nntp_l2.c lmtp2nntp_lmtp.c
                            lmtp2nntp_main.c lmtp2nntp_msg.c lmtp2nntp_nntp.c
                            lmtp2nntp_option.c lmtp2nntp_shpat.c test.sh

  Log:
    remove trailing whitespaces from source tree

  Summary:
    Revision    Changes     Path
    1.5         +2  -2      ossp-pkg/lmtp2nntp/AUTHORS
    1.14        +3  -3      ossp-pkg/lmtp2nntp/INSTALL
    1.53        +6  -6      ossp-pkg/lmtp2nntp/Makefile.in
    1.31        +28 -28     ossp-pkg/lmtp2nntp/configure.ac
    1.3         +1  -1      ossp-pkg/lmtp2nntp/devtool
    1.5         +1  -1      ossp-pkg/lmtp2nntp/devtool.func
    1.19        +4  -4      ossp-pkg/lmtp2nntp/example.conf
    1.40        +4  -4      ossp-pkg/lmtp2nntp/lmtp2nntp.pod
    1.4         +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_argz.c
    1.90        +10 -10     ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.3         +9  -9      ossp-pkg/lmtp2nntp/lmtp2nntp_daemon.c
    1.6         +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_l2.c
    1.4         +21 -21     ossp-pkg/lmtp2nntp/lmtp2nntp_lmtp.c
    1.62        +38 -38     ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
    1.33        +4  -4      ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
    1.4         +15 -15     ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.c
    1.23        +2  -2      ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
    1.4         +2  -2      ossp-pkg/lmtp2nntp/lmtp2nntp_shpat.c
    1.15        +3  -3      ossp-pkg/lmtp2nntp/test.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/AUTHORS
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 AUTHORS
  --- ossp-pkg/lmtp2nntp/AUTHORS	30 Jan 2003 19:42:12 -0000	1.4
  +++ ossp-pkg/lmtp2nntp/AUTHORS	30 Jan 2003 19:45:19 -0000	1.5
  @@ -5,10 +5,10 @@
     |_|_|_| \___/|____/____/|_|    |_|_||_||_|\__| .__/____|_||_|_||_|\__| .__/
                                                  |_|                     |_|
     OSSP lmtp2nntp - Mail to News Gateway
  -  
  +
     AUTHORS
   
  -  This is a list of authors who have written or 
  +  This is a list of authors who have written or
     edited major parts of the OSSP lmtp2nntp sources.
   
     Ralf S. Engelschall   <ralf.engelschall@cw.com>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/INSTALL
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 INSTALL
  --- ossp-pkg/lmtp2nntp/INSTALL	30 Jan 2003 19:42:12 -0000	1.13
  +++ ossp-pkg/lmtp2nntp/INSTALL	30 Jan 2003 19:45:19 -0000	1.14
  @@ -11,7 +11,7 @@
   
     To install OSSP lmtp2nntp into /path/to/lmtp2nntp/{bin,man}/ perform
     the following steps in your shell:
  -      
  +
       $ ./configure --prefix=/path/to/lmtp2nntp
       $ make
       $ make check
  @@ -46,11 +46,11 @@
        | _DEFIFNOT(`LMTP2NNTP_MAILER_TIMEOUT',       `nntp:connect=60')
        | _DEFIFNOT(`LMTP2NNTP_MAILER_NEWSGROUP',     `\*')
        | POPDIVERT
  -     |   
  +     |
        | #########################################
        | ###   LMTP2NNTP Mailer specification  ###
        | #########################################
  -     | 
  +     |
        | Mlmtp2nntp, P=LMTP2NNTP_MAILER_PATH, F=LMTP2NNTP_MAILER_FLAGS,
        |             S=EnvFromSMTP/HdrFromSMTP, R=MasqSMTP, E=\r\n,
        |             L=990, T=DNS/RFC822/SMTP, M=LMTP2NNTP_MAILER_SIZE,
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.52 -r1.53 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	30 Jan 2003 19:42:12 -0000	1.52
  +++ ossp-pkg/lmtp2nntp/Makefile.in	30 Jan 2003 19:45:19 -0000	1.53
  @@ -46,7 +46,7 @@
   POD2MAN     = pod2man
   
   PROG = lmtp2nntp
  -HDRS = lmtp2nntp_global.h lmtp2nntp_daemon.h lmtp2nntp_lmtp.h lmtp2nntp_nntp.h lmtp2nntp_argz.h lmtp2nntp_shpat.h lmtp2nntp_msg.h lmtp2nntp_option.h lmtp2nntp_config.h lmtp2nntp_exwrap.h 
  +HDRS = lmtp2nntp_global.h lmtp2nntp_daemon.h lmtp2nntp_lmtp.h lmtp2nntp_nntp.h lmtp2nntp_argz.h lmtp2nntp_shpat.h lmtp2nntp_msg.h lmtp2nntp_option.h lmtp2nntp_config.h lmtp2nntp_exwrap.h
   SRCS = lmtp2nntp_main.c   lmtp2nntp_daemon.c lmtp2nntp_lmtp.c lmtp2nntp_nntp.c lmtp2nntp_argz.c lmtp2nntp_shpat.c lmtp2nntp_msg.c lmtp2nntp_option.c lmtp2nntp_config.c lmtp2nntp_exwrap.c lmtp2nntp_version.c lmtp2nntp_l2.c
   OBJS = lmtp2nntp_main.o   lmtp2nntp_daemon.o lmtp2nntp_lmtp.o lmtp2nntp_nntp.o lmtp2nntp_argz.o lmtp2nntp_shpat.o lmtp2nntp_msg.o lmtp2nntp_option.o lmtp2nntp_config.o lmtp2nntp_exwrap.o lmtp2nntp_version.o lmtp2nntp_l2.o
   
  @@ -62,7 +62,7 @@
   _SUBDIRS_distclean _SUBDIRS_realclean _SUBDIRS_depend:
   	@$(MAKE) $(MFLAGS) \
   	         _SUBDIRS_TARGET=`echo $@ | sed -e 's/^_SUBDIRS_//'` \
  -	         _SUBDIRS_STEPDOWN 
  +	         _SUBDIRS_STEPDOWN
   
   #   the work horse rule which steps down to the subdirs in a loop
   _SUBDIRS_STEPDOWN:
  @@ -133,12 +133,12 @@
   lmtp2nntp_main.o: lmtp2nntp_main.c lmtp2nntp_argz.h lmtp2nntp_shpat.h lmtp2nntp_daemon.h lmtp2nntp_global.h config.h lmtp2nntp_exwrap.h lmtp2nntp_option.h lmtp2nntp_config.h lmtp2nntp_common.h lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_lmtp.h lmtp2nntp_version.c
   lmtp2nntp_daemon.o: lmtp2nntp_daemon.c config.h lmtp2nntp_daemon.h
   lmtp2nntp_lmtp.o: lmtp2nntp_lmtp.c lmtp2nntp_lmtp.h config.h
  -lmtp2nntp_nntp.o: lmtp2nntp_nntp.c lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_global.h config.h lmtp2nntp_exwrap.h lmtp2nntp_common.h 
  +lmtp2nntp_nntp.o: lmtp2nntp_nntp.c lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_global.h config.h lmtp2nntp_exwrap.h lmtp2nntp_common.h
   lmtp2nntp_argz.o: lmtp2nntp_argz.c lmtp2nntp_argz.h config.h
   lmtp2nntp_shpat.o: lmtp2nntp_shpat.c config.h lmtp2nntp_shpat.h
  -lmtp2nntp_msg.o: lmtp2nntp_msg.c lmtp2nntp_msg.h lmtp2nntp_global.h config.h lmtp2nntp_exwrap.h lmtp2nntp_argz.h lmtp2nntp_common.h lmtp2nntp_nntp.h 
  +lmtp2nntp_msg.o: lmtp2nntp_msg.c lmtp2nntp_msg.h lmtp2nntp_global.h config.h lmtp2nntp_exwrap.h lmtp2nntp_argz.h lmtp2nntp_common.h lmtp2nntp_nntp.h
   lmtp2nntp_option.o: lmtp2nntp_option.c lmtp2nntp_argz.h lmtp2nntp_global.h config.h lmtp2nntp_exwrap.h lmtp2nntp_option.h lmtp2nntp_config.h lmtp2nntp_common.h lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_lmtp.h lmtp2nntp_version.c
   lmtp2nntp_config.o: lmtp2nntp_config.c lmtp2nntp_argz.h lmtp2nntp_global.h config.h lmtp2nntp_exwrap.h lmtp2nntp_option.h lmtp2nntp_config.h lmtp2nntp_common.h lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_lmtp.h lmtp2nntp_version.c
  -lmtp2nntp_exwrap.o: lmtp2nntp_exwrap.c lmtp2nntp_global.h config.h lmtp2nntp_exwrap.h 
  +lmtp2nntp_exwrap.o: lmtp2nntp_exwrap.c lmtp2nntp_global.h config.h lmtp2nntp_exwrap.h
   lmtp2nntp_version.o: lmtp2nntp_version.c lmtp2nntp_version.c
  -lmtp2nntp_l2.o: lmtp2nntp_l2.c lmtp2nntp_common.h lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_global.h config.h lmtp2nntp_exwrap.h 
  +lmtp2nntp_l2.o: lmtp2nntp_l2.c lmtp2nntp_common.h lmtp2nntp_nntp.h lmtp2nntp_msg.h lmtp2nntp_global.h config.h lmtp2nntp_exwrap.h
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/configure.ac
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 configure.ac
  --- ossp-pkg/lmtp2nntp/configure.ac	30 Jan 2003 19:42:12 -0000	1.30
  +++ ossp-pkg/lmtp2nntp/configure.ac	30 Jan 2003 19:45:19 -0000	1.31
  @@ -51,9 +51,9 @@
   AC_CHECK_HEADERS(alloca.h float.h)
   
   dnl #   check for OSSP ex library
  -AC_CHECK_EXTLIB([OSSP ex], 
  -                ex, __ex_ctx, ex.h, 
  -                [SUBDIR_EX=""], 
  +AC_CHECK_EXTLIB([OSSP ex],
  +                ex, __ex_ctx, ex.h,
  +                [SUBDIR_EX=""],
                   [SUBDIR_EX="lib_ex"
                    CPPFLAGS="$CPPFLAGS -Ilib_ex"
                    CFLAGS="$CFLAGS -Ilib_ex"
  @@ -62,9 +62,9 @@
   AC_SUBST(SUBDIR_EX)
   
   dnl #   check for OSSP str library
  -AC_CHECK_EXTLIB([OSSP str], 
  -                str, str_parse, str.h, 
  -                [SUBDIR_STR=""], 
  +AC_CHECK_EXTLIB([OSSP str],
  +                str, str_parse, str.h,
  +                [SUBDIR_STR=""],
                   [SUBDIR_STR="lib_str"
                    CPPFLAGS="$CPPFLAGS -Ilib_str"
                    CFLAGS="$CFLAGS -Ilib_str"
  @@ -73,9 +73,9 @@
   AC_SUBST(SUBDIR_STR)
   
   dnl #   check for OSSP l2 library
  -AC_CHECK_EXTLIB([OSSP l2], 
  -                l2, l2_stream_log, l2.h, 
  -                [SUBDIR_L2=""], 
  +AC_CHECK_EXTLIB([OSSP l2],
  +                l2, l2_stream_log, l2.h,
  +                [SUBDIR_L2=""],
                   [SUBDIR_L2="lib_l2"
                    CPPFLAGS="$CPPFLAGS -Ilib_l2"
                    CFLAGS="$CFLAGS -Ilib_l2"
  @@ -84,9 +84,9 @@
   AC_SUBST(SUBDIR_L2)
   
   dnl #   check for OSSP sa library
  -AC_CHECK_EXTLIB([OSSP sa], 
  -                sa, sa_create, sa.h, 
  -                [SUBDIR_SA=""], 
  +AC_CHECK_EXTLIB([OSSP sa],
  +                sa, sa_create, sa.h,
  +                [SUBDIR_SA=""],
                   [SUBDIR_SA="lib_sa"
                    CPPFLAGS="$CPPFLAGS -Ilib_sa"
                    CFLAGS="$CFLAGS -Ilib_sa"
  @@ -95,9 +95,9 @@
   AC_SUBST(SUBDIR_SA)
   
   dnl #   check for OSSP var library
  -AC_CHECK_EXTLIB([OSSP var], 
  -                var, var_expand, var.h, 
  -                [SUBDIR_VAR=""], 
  +AC_CHECK_EXTLIB([OSSP var],
  +                var, var_expand, var.h,
  +                [SUBDIR_VAR=""],
                   [SUBDIR_VAR="lib_var"
                    CPPFLAGS="$CPPFLAGS -Ilib_var"
                    CFLAGS="$CFLAGS -Ilib_var"
  @@ -106,9 +106,9 @@
   AC_SUBST(SUBDIR_VAR)
   
   dnl #   check for OSSP val library
  -AC_CHECK_EXTLIB([OSSP val], 
  -                val, val_create, val.h, 
  -                [SUBDIR_VAL=""], 
  +AC_CHECK_EXTLIB([OSSP val],
  +                val, val_create, val.h,
  +                [SUBDIR_VAL=""],
                   [SUBDIR_VAL="lib_val"
                    CPPFLAGS="$CPPFLAGS -Ilib_val"
                    CFLAGS="$CFLAGS -Ilib_val"
  @@ -117,9 +117,9 @@
   AC_SUBST(SUBDIR_VAL)
   
   dnl #   check for OSSP popt library
  -AC_CHECK_EXTLIB([OSSP popt], 
  -                popt, popt_getcontext, popt.h, 
  -                [SUBDIR_POPT=""], 
  +AC_CHECK_EXTLIB([OSSP popt],
  +                popt, popt_getcontext, popt.h,
  +                [SUBDIR_POPT=""],
                   [SUBDIR_POPT="lib_popt"
                    CPPFLAGS="$CPPFLAGS -Ilib_popt"
                    CFLAGS="$CFLAGS -Ilib_popt"
  @@ -128,9 +128,9 @@
   AC_SUBST(SUBDIR_POPT)
   
   dnl #   check for OSSP pcre library
  -AC_CHECK_EXTLIB([OSSP pcre], 
  -                pcre, pcre_compile, pcre.h, 
  -                [SUBDIR_PCRE=""], 
  +AC_CHECK_EXTLIB([OSSP pcre],
  +                pcre, pcre_compile, pcre.h,
  +                [SUBDIR_PCRE=""],
                   [SUBDIR_PCRE="lib_pcre"
                    CPPFLAGS="$CPPFLAGS -Ilib_pcre"
                    CFLAGS="$CFLAGS -Ilib_pcre"
  @@ -139,9 +139,9 @@
   AC_SUBST(SUBDIR_PCRE)
   
   dnl #   check for OSSP tai library
  -AC_CHECK_EXTLIB([OSSP tai], 
  -                tai, tai_create, tai.h, 
  -                [SUBDIR_TAI=""], 
  +AC_CHECK_EXTLIB([OSSP tai],
  +                tai, tai_create, tai.h,
  +                [SUBDIR_TAI=""],
                   [SUBDIR_TAI="lib_tai"
                    CPPFLAGS="$CPPFLAGS -Ilib_tai"
                    CFLAGS="$CFLAGS -Ilib_tai"
  @@ -150,7 +150,7 @@
   AC_SUBST(SUBDIR_TAI)
   
   dnl #   check for external Dmalloc library
  -AC_CHECK_EXTLIB([Dmalloc], dmalloc, dmalloc_debug, dmalloc.h, 
  +AC_CHECK_EXTLIB([Dmalloc], dmalloc, dmalloc_debug, dmalloc.h,
                   [AC_DEFINE(WITH_DMALLOC, 1, [Define to 1 if building with Dmalloc])])
   
   dnl #   post-processing for LIBS_EXTRA
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/devtool
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 devtool
  --- ossp-pkg/lmtp2nntp/devtool	31 Dec 2001 15:15:36 -0000	1.2
  +++ ossp-pkg/lmtp2nntp/devtool	30 Jan 2003 19:45:19 -0000	1.3
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  devtool -- Development Tool
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   if [ $# -eq 0 ]; then
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/devtool.func
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 devtool.func
  --- ossp-pkg/lmtp2nntp/devtool.func	23 Jan 2003 16:26:50 -0000	1.4
  +++ ossp-pkg/lmtp2nntp/devtool.func	30 Jan 2003 19:45:19 -0000	1.5
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   devtool_require () {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/example.conf
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 example.conf
  --- ossp-pkg/lmtp2nntp/example.conf	28 Jan 2003 16:34:07 -0000	1.18
  +++ ossp-pkg/lmtp2nntp/example.conf	30 Jan 2003 19:45:19 -0000	1.19
  @@ -1,7 +1,7 @@
   
  -# 
  +#
   # LMTP2NNTP example.conf
  -# 
  +#
   
           ### DAEMON ###
   
  @@ -15,9 +15,9 @@
   acl             10.0.0.0/8                      #see -a aka --acl
   acl             172.16.0.0/12
   acl             192.168.0.0/16
  -acl             127.0.0.1/32     
  +acl             127.0.0.1/32
   bind            127.0.0.1:12345                 #see -b aka --bind, use IPv4:port
  -#bind           "/tmp/uds:600"                  #    UNIX domain socket path:permissions 
  +#bind           "/tmp/uds:600"                  #    UNIX domain socket path:permissions
   
           ### GATEWAY ###
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ============================================================================
  $ cvs diff -u -r1.39 -r1.40 lmtp2nntp.pod
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.pod	30 Jan 2003 19:42:12 -0000	1.39
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.pod	30 Jan 2003 19:45:19 -0000	1.40
  @@ -154,9 +154,9 @@
   
   Destination hostname or address and optional TCP port of a NNTP service.
   Unless a port is specified, getserbyname(nntp) is queried with fallback to
  -119/tcp. If C<-d> option is ommited, 
  +119/tcp. If C<-d> option is ommited,
   C<news> is used and if this doesn't
  -resolve, C<localhost> is assumed.  
  +resolve, C<localhost> is assumed.
   Any addr can be a name which will be resolved on program launch time. It is
   assumed that multiple servers are used to increase the reliability of the news
   system and to speed up distribution by posting the same article to more than
  @@ -269,7 +269,7 @@
   by uname(3). SINGLE.
   
   =item B<--operationmode|-o> I<abc/a.d.e|post|feed>
  -     
  +
   Set fake status or operationmode.
   Possible values for I<operationmode> are C<post>, C<feed> or a string in
   "LLL/D.D.D" format used to fake a LMTP return code.  In C<post> mode articles
  @@ -301,7 +301,7 @@
   The file must be in RFC822 E-Mail format. Use this option for debugging
   only, it disables both the mail server and news client.
   
  -=item B<--timeoutlmtp> I<sec>        
  +=item B<--timeoutlmtp> I<sec>
   
   LMTP server default timeout. Sets timeout for accept, read and write at
   once.  Setting sec to zero means to wait infinite.  Note that all LMTP
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_argz.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 lmtp2nntp_argz.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_argz.c	30 Jan 2003 19:42:12 -0000	1.3
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_argz.c	30 Jan 2003 19:45:19 -0000	1.4
  @@ -420,7 +420,7 @@
   			size_t part_len = my_strnlen(argz, len);
   			argz += part_len;
   			len -= part_len;
  -			if (len-- <= 1)			   /* includes final '\0' we want to stop 
  +			if (len-- <= 1)			   /* includes final '\0' we want to stop
   									    * at */
   				break;
   			*argz++ = sep;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================================
  $ cvs diff -u -r1.89 -r1.90 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	30 Jan 2003 19:42:12 -0000	1.89
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	30 Jan 2003 19:45:20 -0000	1.90
  @@ -82,12 +82,12 @@
   #define NUL '\0'
   #endif
   
  -static l2_result_t 
  +static l2_result_t
   formatter_prefix(l2_context_t *_ctx, const char id, const char *param,
             char *bufptr, size_t bufsize, size_t *buflen, va_list *ap)
   {
       lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx->vp;
  -            
  +
       if ((ctx->msg != NULL) && (ctx->msg->cpFid != NULL)) {
           sprintf(bufptr, "%s: ", ctx->msg->cpFid);
           *buflen = strlen(bufptr);
  @@ -98,10 +98,10 @@
   }
   
   static var_syntax_t syntax_regex = {
  -    '\\',         /* escape        */ 
  -    '$',          /* varinit       */ 
  -    '{',          /* startdelim    */ 
  -    '}',          /* enddelim      */ 
  +    '\\',         /* escape        */
  +    '$',          /* varinit       */
  +    '{',          /* startdelim    */
  +    '}',          /* enddelim      */
       NUL,          /* startindex    */
       NUL,          /* endindex      */
       NUL,          /* current_index */
  @@ -468,8 +468,8 @@
                   logbook(ctx->l2, L2_LEVEL_ERROR, "option --client, create address (internal) failed with \"%s\"", sa_error(sa_rc));
                   throw(0,0,0);
               }
  -            if ((sa_rc = sa_addr_u2a(ctx->saaClientbind, 
  -                                  (strchr(ov->data.s, ':') == NULL) ?  "inet://%s:0" : "inet://%s", 
  +            if ((sa_rc = sa_addr_u2a(ctx->saaClientbind,
  +                                  (strchr(ov->data.s, ':') == NULL) ?  "inet://%s:0" : "inet://%s",
                                     ov->data.s)) != SA_OK) {
                   logbook(ctx->l2, L2_LEVEL_ERROR, "option --client, parsing alternate IO guessing INET socket (%s) failed with \"%s\"", ov->data.s, sa_error(sa_rc));
                   throw(0,0,0);
  @@ -582,7 +582,7 @@
                       hrNew->val       = NULL;
                       hrNew->pcreRegex = NULL;
                       hrNew->pcreExtra = NULL;
  -                    
  +
                       /* priority */
                       cpP = cp;
                       if ((cp = strchr(cp, ':')) == NULL) {
  @@ -858,7 +858,7 @@
               || (ov->ndata >  1)
                 ) throw(0,0,0);
           logbook(ctx->l2, L2_LEVEL_TRACE, "--timeoutlmtp= \"%s\"", ov->data.s);
  - 
  +
           if (ov->ndata == 1) {
               if ((i = atoi(ov->data.s)) < 0) {
                   logbook(ctx->l2, L2_LEVEL_ERROR, "option --timeoutlmtp, number (%d) out of range", i);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_daemon.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 lmtp2nntp_daemon.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_daemon.c	30 Jan 2003 19:42:13 -0000	1.2
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_daemon.c	30 Jan 2003 19:45:20 -0000	1.3
  @@ -49,8 +49,8 @@
       int fd;
       int rc;
   
  -    /* 
  -     * if we are started from init, 
  +    /*
  +     * if we are started from init,
        * no need to become daemon.
        */
       if (getppid() == 1)
  @@ -73,7 +73,7 @@
        * fork so the parent can exit, this returns control to the command line
        * or shell invoking your program. This step is required so that the new
        * process is guaranteed not to be a process group leader (The next step,
  -     * setsid, would fail if you're a process group leader). 
  +     * setsid, would fail if you're a process group leader).
        */
       rc = fork();
       switch (rc) {
  @@ -86,7 +86,7 @@
        * setsid to become a process group and session group leader. Since a
        * controlling terminal is associated with a session, and this new session
        * has not yet acquired a controlling terminal our process now has no
  -     * controlling terminal, which is a Good Thing for daemons. 
  +     * controlling terminal, which is a Good Thing for daemons.
        */
   #ifdef HAVE_SETSID
       if (setsid() == -1)
  @@ -97,7 +97,7 @@
   #ifndef _PATH_TTY
   #define _PATH_TTY "/dev/tty"
   #endif
  -    if ((fd = open(_PATH_TTY, O_RDWR)) == -1) 
  +    if ((fd = open(_PATH_TTY, O_RDWR)) == -1)
           return -1;
       ioctl(fd, TIOCNOTTY, NULL);
       close(fd);
  @@ -106,7 +106,7 @@
       /*
        * fork again so the parent, (the session group leader), can exit. This
        * means that we, as a non-session group leader, can never regain a
  -     * controlling terminal. 
  +     * controlling terminal.
        */
       rc = fork();
       switch (rc) {
  @@ -120,20 +120,20 @@
        * use. Failure to do this could make it so that an administrator couldn't
        * unmount a filesystem, because it was our current directory.
        * [Equivalently, we could change to any directory containing files
  -     * important to the daemon's operation.] 
  +     * important to the daemon's operation.]
        */
       chdir("/");
   
       /*
        * give us complete control over the permissions of anything we write. We
  -     * don't know what umask we may have inherited.  [This step is optional] 
  +     * don't know what umask we may have inherited.  [This step is optional]
        */
       umask(0);
   
       /*
        * close fds 0, 1, and 2. This releases the standard in, out, and error we
        * inherited from our parent process. We have no way of knowing where
  -     * these fds might have been redirected to. 
  +     * these fds might have been redirected to.
        */
       if ((fd = open("/dev/null", O_RDWR, 0)) != -1) {
           dup2(fd, STDIN_FILENO);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_l2.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 lmtp2nntp_l2.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_l2.c	30 Jan 2003 19:42:13 -0000	1.5
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_l2.c	30 Jan 2003 19:45:20 -0000	1.6
  @@ -45,7 +45,7 @@
           return L2_ERR_MEM;
   
       /* initialize configuration with reasonable defaults */
  -    cfg->var = NULL; 
  +    cfg->var = NULL;
   
       /* link private channel configuration into channel context */
       ctx->vp = cfg;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_lmtp.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 lmtp2nntp_lmtp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_lmtp.c	30 Jan 2003 19:42:13 -0000	1.3
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_lmtp.c	30 Jan 2003 19:45:20 -0000	1.4
  @@ -88,7 +88,7 @@
       int i;
   
       for (i = 0; (i < LMTP_MAXVERBS) && (lmtp->dispatch[i] != NULL); i++)
  -        if (strcasecmp(lmtp->dispatch[i]->verb, verb) == 0) 
  +        if (strcasecmp(lmtp->dispatch[i]->verb, verb) == 0)
               return i;
       return -1;
   }
  @@ -109,7 +109,7 @@
   {
       /*  create a lmtp structure allocating memory for it and initializing it.
        *  A lmtp_cb_default() callback is registered for the default "" verb.
  -     *  The _rfd_ and _wfd_ args are passed to the read(), write() 
  +     *  The _rfd_ and _wfd_ args are passed to the read(), write()
        *  functions and must have meaning for them. If _io_ is NULL,
        *  the system io functions are used. You can provide an _io_ structure
        *  and specify alternate functions. Ommiting one or more functions inside
  @@ -118,10 +118,10 @@
        */
       lmtp_t *lmtp;
   
  -    if ((lmtp = (lmtp_t *)malloc(sizeof(lmtp_t))) == NULL) 
  +    if ((lmtp = (lmtp_t *)malloc(sizeof(lmtp_t))) == NULL)
           return NULL;
   
  -    if (io == NULL) 
  +    if (io == NULL)
           return NULL;
   
       lmtp->io.ctx    = io->ctx;
  @@ -132,7 +132,7 @@
       lmtp->rl.rl_cnt = 0;
       lmtp->rl.rl_bufptr = NULL;
       lmtp->rl.rl_buf[0] = NUL;
  -    
  +
       if ((lmtp->dispatch = (lmtp_dispatch_t **)malloc(sizeof(void *)*LMTP_MAXVERBS)) == NULL)
           return NULL;
       lmtp->dispatch[0] = NULL;
  @@ -192,7 +192,7 @@
   
       }
       buf[n] = NUL;          /* string termination */
  -    if (n == (buflen-1)) 
  +    if (n == (buflen-1))
           return LMTP_ERR_OVERFLOW;
       return LMTP_OK;
   }
  @@ -232,12 +232,12 @@
       while (1) {
           rc = lmtp_readline(lmtp, cpPtr, nBuf-(cpPtr-cpBuf));
           if (rc == LMTP_ERR_OVERFLOW) {
  -            if (nBuf == maxlen) 
  +            if (nBuf == maxlen)
                   return LMTP_ERR_OVERFLOW;
               offset = nBuf-1;                    /* write cursor offset is end of buffer */
               offsetline = cpLine - cpBuf;        /* remember start of line offset */
               nBuf *= 2;                          /* increase buffer */
  -            if (nBuf > maxlen) 
  +            if (nBuf > maxlen)
                   nBuf = maxlen;                  /* but don't exceed maximum */
               if ((cpBufrealloc = (char *)realloc(cpBuf, nBuf)) == NULL) {
                   free(cpBuf);
  @@ -266,10 +266,10 @@
   }
   
   lmtp_rc_t lmtp_request(lmtp_t *lmtp, lmtp_req_t *req)
  -{  
  +{
       /*  reads a line and attaches the buffer to req->msg;
        *  pulls the verb out and attaches the verb to req->verb;
  -     * 
  +     *
        *  LMTP_OK           req->msg set, req->verb set  means normal operation
        *  LMTP_OK           req->msg set, req->verb ""   means no verb seen
        *  LMTP_EOF          req->msg set, req->verb NULL means eof
  @@ -295,7 +295,7 @@
           return rc;
       for (i = 0; (i < LMTP_MAXVERBS) && (lmtp->dispatch[i] != NULL); i++) {
           if ((verb = lmtp->dispatch[i]->verb) != NULL) {  /* skip NULL verb */
  -            if ((verblen = strlen(verb)) == 0) 
  +            if ((verblen = strlen(verb)) == 0)
                   continue; /* skip  ""  verb */
               if (   (strlen(req->msg) >= verblen)
                   && (strncasecmp(req->msg, verb, verblen) == 0)
  @@ -411,9 +411,9 @@
   
       if (cb == NULL) { /* checking for existing callback only */
           i = verbindex(lmtp, verb);
  -        if (oldcb  != NULL) 
  +        if (oldcb  != NULL)
               *oldcb  = (i == -1) ? NULL : lmtp->dispatch[i]->cb;
  -        if (oldctx != NULL) 
  +        if (oldctx != NULL)
               *oldctx = (i == -1) ? NULL : lmtp->dispatch[i]->ctx;
           return LMTP_OK;
       }
  @@ -421,24 +421,24 @@
       for (i = 0; lmtp->dispatch[i] != NULL; i++) {
           if (strcasecmp(verb, lmtp->dispatch[i]->verb) == 0) {
               overload = 1;
  -            if (oldcb  != NULL) 
  +            if (oldcb  != NULL)
                   *oldcb  = lmtp->dispatch[i]->cb;
  -            if (oldctx != NULL) 
  +            if (oldctx != NULL)
                   *oldctx = lmtp->dispatch[i]->ctx;
               break;
           }
       }
  -    if (i > LMTP_MAXVERBS-2) 
  +    if (i > LMTP_MAXVERBS-2)
           return LMTP_ERR_OVERFLOW;
   
       if (!overload) {
  -        if ((lmtp->dispatch[i] = 
  +        if ((lmtp->dispatch[i] =
               (lmtp_dispatch_t *)malloc(sizeof(lmtp_dispatch_t))) == NULL)
               return LMTP_ERR_MEM;
           lmtp->dispatch[i+1] = NULL;
  -        if (oldcb  != NULL) 
  +        if (oldcb  != NULL)
               *oldcb  = NULL;
  -        if (oldctx != NULL) 
  +        if (oldctx != NULL)
               *oldctx = NULL;
       }
   
  @@ -471,7 +471,7 @@
       res.statuscode = "220";
       res.dsncode    = NULL;
       res.statusmsg  = "LMTP Service ready.";
  -    if ((rc = lmtp_response(lmtp, &res)) != LMTP_OK) 
  +    if ((rc = lmtp_response(lmtp, &res)) != LMTP_OK)
           return rc;
   
       while ((rc = lmtp_request(lmtp, &req)) == LMTP_OK) {
  @@ -483,7 +483,7 @@
               req.verb = "";
               req.msg = NULL;
   
  -            if (rc != LMTP_OK) 
  +            if (rc != LMTP_OK)
                   break;
           }
       }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================================
  $ cvs diff -u -r1.61 -r1.62 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	30 Jan 2003 19:42:13 -0000	1.61
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	30 Jan 2003 19:45:20 -0000	1.62
  @@ -135,19 +135,19 @@
   }
   
   static var_syntax_t syntax_ctx = {
  -    '\\',         /* escape        */ 
  -    '$',          /* varinit       */ 
  -    '{',          /* startdelim    */ 
  -    '}',          /* enddelim      */ 
  -    '[',          /* startindex    */ 
  -    ']',          /* endindex      */ 
  -    '#',          /* current_index */ 
  -    "a-zA-Z0-9.-" /* namechars     */ 
  +    '\\',         /* escape        */
  +    '$',          /* varinit       */
  +    '{',          /* startdelim    */
  +    '}',          /* enddelim      */
  +    '[',          /* startindex    */
  +    ']',          /* endindex      */
  +    '#',          /* current_index */
  +    "a-zA-Z0-9.-" /* namechars     */
   };
   
   static var_rc_t ctx_lookup(
       var_t *var,
  -    void *_ctx, 
  +    void *_ctx,
       const char *var_ptr, size_t var_len, int var_idx,
       const char **val_ptr, size_t *val_len, size_t *val_size)
   {
  @@ -419,7 +419,7 @@
       ctx->config_varregex = NULL;
       ctx->config_varctx = NULL;
       ctx->msgcount = 0;
  -    
  +
       /* private application context */
       if (val_create(&ctx->prival) != VAL_OK)
           CU(ERR_EXECUTION);
  @@ -477,7 +477,7 @@
   
       if (getuid() != ctx->option_uid) {
           if (setuid(ctx->option_uid) == -1) {
  -            fprintf(stderr, "%s:Error: Setting UID to %d failed: %s\n", 
  +            fprintf(stderr, "%s:Error: Setting UID to %d failed: %s\n",
                       ctx->progname, ctx->option_uid, strerror(errno));
               CU(ERR_EXECUTION);
           }
  @@ -532,7 +532,7 @@
            *  In order to make SMTP workable, the following minimum implementation
            *  is required for all receivers: [...]
            *  RFC0821, 4.1.2. COMMAND SYNTAX
  -         *  
  +         *
            *  Verb Parameter
            *  ----+-------------------------------
            *  HELO <SP> <domain> <CRLF>
  @@ -543,7 +543,7 @@
            *  NOOP <CRLF>
            *  QUIT <CRLF>
            */
  -        lmtp_register(lmtp, "LHLO", lmtp_cb_lhlo, ctx, NULL, NULL); 
  +        lmtp_register(lmtp, "LHLO", lmtp_cb_lhlo, ctx, NULL, NULL);
           lmtp_register(lmtp, "MAIL", lmtp_cb_mail, ctx, NULL, NULL);
           lmtp_register(lmtp, "RCPT", lmtp_cb_rcpt, ctx, NULL, NULL);
           lmtp_register(lmtp, "DATA", lmtp_cb_data, ctx, NULL, NULL);
  @@ -628,13 +628,13 @@
               if (bOk) {
                   char *cpA;
                   sa_addr_a2u(ctx->saaIO, &cpA);
  -                logbook(ctx->l2, L2_LEVEL_TRACE, "connection from %s accepted due to ACL", cpA); 
  +                logbook(ctx->l2, L2_LEVEL_TRACE, "connection from %s accepted due to ACL", cpA);
                   free(cpA);
               }
               else {
                   char *cpA;
                   sa_addr_a2u(ctx->saaIO, &cpA);
  -                logbook(ctx->l2, L2_LEVEL_ERROR, "connection from %s refused due to ACL", cpA); 
  +                logbook(ctx->l2, L2_LEVEL_ERROR, "connection from %s refused due to ACL", cpA);
                   free(cpA);
                   sa_destroy(ctx->saIO);
                   sa_addr_destroy(ctx->saaIO);
  @@ -661,7 +661,7 @@
               /* child must close listening socket */
               sa_destroy(ctx->saServerbind);
               ctx->saServerbind = NULL; /* prevent cleanup from free'ing this again */
  -            
  +
               /* initialize LMTP context */
               lmtp_io.ctx    = ctx;
               lmtp_io.read   = hook_lmtp_read;
  @@ -674,7 +674,7 @@
                *  In order to make SMTP workable, the following minimum implementation
                *  is required for all receivers: [...]
                *  RFC0821, 4.1.2. COMMAND SYNTAX
  -             *  
  +             *
                *  Verb Parameter
                *  ----+-------------------------------
                *  HELO <SP> <domain> <CRLF>
  @@ -685,7 +685,7 @@
                *  NOOP <CRLF>
                *  QUIT <CRLF>
                */
  -            lmtp_register(lmtp, "LHLO", lmtp_cb_lhlo, ctx, NULL, NULL); 
  +            lmtp_register(lmtp, "LHLO", lmtp_cb_lhlo, ctx, NULL, NULL);
               lmtp_register(lmtp, "MAIL", lmtp_cb_mail, ctx, NULL, NULL);
               lmtp_register(lmtp, "RCPT", lmtp_cb_rcpt, ctx, NULL, NULL);
               lmtp_register(lmtp, "DATA", lmtp_cb_data, ctx, NULL, NULL);
  @@ -749,13 +749,13 @@
   
   static lmtp_rc_t lmtp_cb_lhlo(lmtp_t *lmtp, lmtp_io_t *io, lmtp_req_t *req, void *_ctx)
   {
  -    /*  
  +    /*
        *  RFC0821 [excerpt] 4.1. SMTP COMMANDS
        *  4.1.1.  COMMAND SEMANTICS, HELO
        *  This command and an OK reply to it confirm that both the sender-SMTP
        *  and the receiver-SMTP are in the initial state, that is, there is no
        *  transaction in progress and all state tables and buffers are cleared.
  -     * 
  +     *
        *  The first command in a session must be the HELO command.  The HELO
        *  command may be used later in a session as well.  If the HELO command
        *  argument is not acceptable a 501 failure reply must be returned and
  @@ -904,7 +904,7 @@
               CU(LMTP_OK);
           }
       }
  -        
  +
       ctx->session.lhlo_seen = TRUE;
   
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   250 Requested mail action okay, completed
  @@ -964,7 +964,7 @@
   {
       int rc;
   
  -    rc = str_parse(msg, 
  +    rc = str_parse(msg,
               "^.+ ("
       /*
        ##
  @@ -973,7 +973,7 @@
        ##  because the given grammar is Chomsky-3 (right or left
        ##  linear grammar, but noth both).
        ##
  -    
  +
        # BNF grammar for <domain> according to RFC0821:
        # <snum>        ::= one, two, or three digits representing a decimal integer value in the range 0 through 255
        # <a>           ::= any one of the 52 alphabetic characters A through Z in upper case and a through z in lower case
  @@ -1029,7 +1029,7 @@
   {
       int rc;
   
  -    rc = str_parse(msg, 
  +    rc = str_parse(msg,
               "^.+ ("
       /*
        ##
  @@ -1112,7 +1112,7 @@
   
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   452 Requested action not taken: insufficient system storage
        *  RFC1893 2. Status Codes                         4.X.X   Persistent Transient Failure
  -     *  RFC1893 3.5 Network and Routing Status          X.3.1   Mail system full 
  +     *  RFC1893 3.5 Network and Routing Status          X.3.1   Mail system full
        */
       logbook(ctx->l2, L2_LEVEL_TRACE, "msg_create");
       ctx->msgcount++;
  @@ -1130,13 +1130,13 @@
        *  indicating whether a 7bit message [...] or a MIME message [...] is
        *  being sent. The syntax of the value is as follows, using the ABNF
        *  notation [...]
  -     *  
  +     *
        *  body-value ::= "7BIT" / "8BITMIME"
  -     *  
  +     *
        *  "MAIL From:<foo@bar>"
        *  "MAIL From:<foo@bar> BODY=8BITMIME"
        *  "MAIL From:<foo@bar> BODY=7BIT"
  -     *  
  +     *
        *  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   553 Requested action not taken: mailbox name not allowed
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.1.7   Bad sender's mailbox address syntax
  @@ -1154,14 +1154,14 @@
        */
       logbook(ctx->l2, L2_LEVEL_TRACE, "checking BODY keyword");
       if (str_parse(req->msg, "m/^MAIL From:\\s*<(.+@.+)>"
  -                            "(?:\\s+BODY=(?:7BIT|8BITMIME)\\s*)?$/i", 
  +                            "(?:\\s+BODY=(?:7BIT|8BITMIME)\\s*)?$/i",
                               &ctx->msg->mail_from) <= 0) {
           res.statuscode = "501";
           res.dsncode    = "5.5.4";
           res.statusmsg  = "Unknown parameter for keyword BODY.";
           CU(LMTP_OK);
       }
  -    
  +
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   550 Requested action not taken: mailbox unavailable
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.7.1   Delivery not authorized, message refused
  @@ -1229,7 +1229,7 @@
           res.statusmsg  = "Syntax error in parameters.";
           CU(LMTP_OK);
       }
  -    
  +
       /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   550 Requested action not taken: mailbox unavailable
        *  RFC1893 2. Status Codes                         5.X.X   Permanent Failure
        *  RFC1893 3.5 Network and Routing Status          X.1.1   Bad destination mailbox address
  @@ -1416,7 +1416,7 @@
           if ((cp = malloc(ctx->msg->asEnvgroups + 1)) == NULL) {
               /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   452 Requested action not taken: insufficient system storage
                *  RFC1893 2. Status Codes                         4.X.X   Persistent Transient Failure
  -             *  RFC1893 3.5 Network and Routing Status          X.3.1   Mail system full 
  +             *  RFC1893 3.5 Network and Routing Status          X.3.1   Mail system full
                */
               ctx->msgcount++;
               if ((ctx->msg = msg_create(ctx->prival)) == NULL) {
  @@ -1434,7 +1434,7 @@
           if ((cp = malloc(ctx->asGroupargs + 1)) == NULL) {
               /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   452 Requested action not taken: insufficient system storage
                *  RFC1893 2. Status Codes                         4.X.X   Persistent Transient Failure
  -             *  RFC1893 3.5 Network and Routing Status          X.3.1   Mail system full 
  +             *  RFC1893 3.5 Network and Routing Status          X.3.1   Mail system full
                */
               ctx->msgcount++;
               if ((ctx->msg = msg_create(ctx->prival)) == NULL) {
  @@ -1584,7 +1584,7 @@
                   break;
           }
       } else {
  -        str_format(errorstring, sizeof(errorstring), "%sdelivery of %s [%d bytes]", 
  +        str_format(errorstring, sizeof(errorstring), "%sdelivery of %s [%d bytes]",
                      ((ctx->option_operationmode == OPERATIONMODE_POST) ? "post " :
                      (ctx->option_operationmode == OPERATIONMODE_FEED) ? "feed " : ""),
                      ctx->msg->cpMsgid,
  @@ -1645,16 +1645,16 @@
                   var_rc_t var_rc;
                   char *res_ptr;
                   size_t res_len;
  -                str_format(errorstring, sizeof(errorstring), 
  +                str_format(errorstring, sizeof(errorstring),
                              "${option.destination[%d]} returned %s\n"
                              "${option.destination[%d]} lastresp \"%s\"",
  -                           i, nntp_error(ctx->pns[i].rc), 
  +                           i, nntp_error(ctx->pns[i].rc),
                              i, nntp_lastresp(ctx->pns[i].nntp));
                   if ((var_rc = var_expand(ctx->config_varctx, errorstring, strlen(errorstring), &res_ptr, &res_len, FALSE)) != VAR_OK) {
  -                    str_format(errorstring, sizeof(errorstring), 
  +                    str_format(errorstring, sizeof(errorstring),
                                  "destination[%d] returned %s\n"
                                  "destination[%d] lastresp \"%s\"",
  -                               i, nntp_error(ctx->pns[i].rc), 
  +                               i, nntp_error(ctx->pns[i].rc),
                                  i, nntp_lastresp(ctx->pns[i].nntp));
                   }
                   else {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 lmtp2nntp_msg.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	30 Jan 2003 19:42:13 -0000	1.32
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	30 Jan 2003 19:45:20 -0000	1.33
  @@ -134,7 +134,7 @@
        *
        * msg->cpMsg
        * free()d and set to NULL
  -     * 
  +     *
        * msg->azHeaders, msg->asHeaders contains the headers in argz format, one
        * logical NUL-terminated line per header which might be wrapped into
        * multiple '\n'-ended physical lines. The "From " envelope, "Received:",
  @@ -539,7 +539,7 @@
   }
   
   static var_rc_t regex_lookup(
  -    var_t *var, void *_ctx, 
  +    var_t *var, void *_ctx,
       const char *var_ptr, size_t var_len, int var_idx,
       const char **val_ptr, size_t *val_len, size_t *val_size)
   {
  @@ -639,7 +639,7 @@
       if (op_len == 15 && strncmp(op_ptr, "createmessageid", 15) == 0) {
           return createmessageid(prival, arg_ptr, arg_len, val_ptr, val_len, out_ptr, out_len, out_size);
       }
  -    else 
  +    else
           return VAR_ERR_UNDEFINED_OPERATION;
   }
   
  @@ -784,7 +784,7 @@
           }
       }
   #endif
  -    
  +
       regex_ctx = (regex_ctx_t *)mallocex(sizeof(regex_ctx_t));
       regex_ctx->nMatch = 0;
       regex_ctx->acpMatch = NULL;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 lmtp2nntp_nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.c	30 Jan 2003 19:42:13 -0000	1.3
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.c	30 Jan 2003 19:45:20 -0000	1.4
  @@ -66,7 +66,7 @@
   
   struct nntp_st {
       nntp_io_t       io;
  -    nntp_readline_t rl; 
  +    nntp_readline_t rl;
       struct timeval  tv;
       int             kludgeinn441dup;
       char           *lastresp;
  @@ -88,10 +88,10 @@
   {
       nntp_t *nntp;
   
  -    if ((nntp = (nntp_t *)malloc(sizeof(nntp_t))) == NULL) 
  +    if ((nntp = (nntp_t *)malloc(sizeof(nntp_t))) == NULL)
           return NULL;
   
  -    if (io == NULL) 
  +    if (io == NULL)
           return NULL;
       nntp->io.ctx    = io->ctx;
       nntp->io.read   = io->read;
  @@ -109,7 +109,7 @@
   {
       nntp_rc_t rc;
       char line[NNTP_LINE_MAXLEN];
  -  
  +
       /* RFC0977 2.4.3. General Responses
        * In general, 1xx codes may be ignored or displayed as desired;  code 200
        * or 201 is sent upon initial connection to the NNTP server depending
  @@ -204,7 +204,7 @@
   
       }
       buf[n] = NUL;          /* string termination */
  -    if (n == (buflen-1)) 
  +    if (n == (buflen-1))
           return NNTP_ERR_OVERFLOW;
       return NNTP_OK;
   }
  @@ -228,7 +228,7 @@
       char line[NNTP_LINE_MAXLEN];
   
       /*  RFC2980
  -     *   
  +     *
        *  2.3 MODE READER
        *  MODE READER is used by the client to indicate to the server that it is
        *  a news reading client.  Some implementations make use of this
  @@ -236,13 +236,13 @@
        *  responding to news reader commands.  This command can be contrasted
        *  with the SLAVE command in RFC0977, which was not widely implemented.
        *  MODE READER was first available in INN.
  -     *  
  +     *
        *  2.3.1 Responses
        *  200 Hello, you can post
        *  201 Hello, you can't post
  -     *  
  +     *
        *  Research:
  -     *  
  +     *
        *  < 200 dev16 InterNetNews server INN 2.3.2 ready
        *  > POST
        *  < 500 "post" not implemented; try "help".
  @@ -250,7 +250,7 @@
        *  < 200 dev16 InterNetNews NNRP server INN 2.3.2 ready (posting ok).
        *  > POST
        *  < 340 Ok, recommended ID <...>
  -     *  
  +     *
        *  In other words, INN *requires* the use of "MODE READER". This has been
        *  verified when INN is configured for expecting both news readers and
        *  feeders from a given source address. When INN is configured to expect
  @@ -301,14 +301,14 @@
        *  > Newsgroups: ...
        *  > Message-ID: <...>
        *  > [additional headers]
  -     *  > 
  +     *  >
        *  > [body with dots escaped]
        *  > .
        *  < 240 ok, thank you
        *  < 441 duplicate (ok for us)
  -     *  
  +     *
        *  Research:
  -     *  
  +     *
        *  < 200 dev16 InterNetNews server INN 2.3.2 ready
        *  > POST
        *  [...]
  @@ -319,7 +319,7 @@
        *  441 Required "Subject" header is missing
        *  441 Obsolete "Received" header
        *  441 Line # too long
  -     *  
  +     *
        *  In other words, INN uses 441 for other status messages as well.
        */
       *line = NUL;
  @@ -370,7 +370,7 @@
        *  < 435 article not wanted - do not send it
        *  < 436 transfer failed - try again later
        *  < 437 article rejected - do not try again
  -     *  
  +     *
        *  Research:
        *  < 200 dev16 InterNetNews server INN 2.3.2 ready
        *  > IHAVE <messageid>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 lmtp2nntp_option.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	30 Jan 2003 19:42:13 -0000	1.22
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	30 Jan 2003 19:45:20 -0000	1.23
  @@ -135,7 +135,7 @@
           optionval_t *oc;
       } v;
       ex_t ex;
  -    
  +
       v.oc = NULL;
       try {
           if (o == NULL || longname == NULL)
  @@ -221,7 +221,7 @@
               o->last  = v.oc;
           }
           else {
  -            o->last->next = v.oc; 
  +            o->last->next = v.oc;
               o->last       = v.oc;
           }
       }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_shpat.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 lmtp2nntp_shpat.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_shpat.c	30 Jan 2003 19:42:13 -0000	1.3
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_shpat.c	30 Jan 2003 19:45:20 -0000	1.4
  @@ -254,8 +254,8 @@
       return (ok == negate ? RANGE_NOMATCH : RANGE_MATCH);
   }
   
  -/* 
  - * This function returns non-zero if pattern 
  +/*
  + * This function returns non-zero if pattern
    * contains any glob chars. Borrowed from Apache.
    */
   int shpat_match_hasglobchar(const char *pattern)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/test.sh
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 test.sh
  --- ossp-pkg/lmtp2nntp/test.sh	30 Jan 2003 19:18:57 -0000	1.14
  +++ ossp-pkg/lmtp2nntp/test.sh	30 Jan 2003 19:45:20 -0000	1.15
  @@ -16,10 +16,10 @@
   Message-Id: <200108141251.f7ECpmn74812@dev.de.cw.net>
   From: Thomas Lotterer <Thomas.Lotterer@example.com>
   Received: from cw.example.com (cw.example.com [10.1.1.32])
  -    by gateway.example.com (8.9.2/8.9.2/$Revision: 1.14 $) with SMTP id NAA08840
  +    by gateway.example.com (8.9.2/8.9.2/$Revision: 1.15 $) with SMTP id NAA08840
       for <thomas.lotterer@gateway.example.com>; Mon, 2 Apr 2001 13:20:25 +0200 (MET DST)
   Received: from history (history.example.org [195.143.102.41])
  -    by cw.example.com (8.11.0/8.11.0/$Revision: 1.14 $) with ESMTP id f32BKPb12235
  +    by cw.example.com (8.11.0/8.11.0/$Revision: 1.15 $) with ESMTP id f32BKPb12235
       for <thomas.lotterer@example.com>; Mon, 2 Apr 2001 13:20:25 +0200
   Received: from example.org (littlemua.example.org [195.143.103.160])
   	by history (8.8.8/8.8.8) with ESMTP id LAA12678;
  @@ -79,7 +79,7 @@
   
    L2CONF="${PREFIX}logspec"
    L2FILE="${PREFIX}log"
  - L2SPEC="'debug: prefix(prefix=\"%b %d %H:%M:%S <%L> lmtp2nntp[%P]: \",timezone=local) -> file(path=\"${L2FILE}\",append=0,perm=432)'" 
  + L2SPEC="'debug: prefix(prefix=\"%b %d %H:%M:%S <%L> lmtp2nntp[%P]: \",timezone=local) -> file(path=\"${L2FILE}\",append=0,perm=432)'"
    echo >${L2CONF} "l2spec ${L2SPEC}"
       LOG="-i ${L2CONF}"
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 30 20:46:43 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 707BE767CD; Thu, 30 Jan 2003 20:46:43 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_msg.c
Message-Id: <20030130194643.707BE767CD@mail.ossp.org>
Date: Thu, 30 Jan 2003 20:46:43 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Jan-2003 20:46:43
  Branch: HEAD                             Handle: 2003013019464200

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_msg.c

  Log:
    disable function to get rid of nasty compiler warning

  Summary:
    Revision    Changes     Path
    1.34        +2  -0      ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 lmtp2nntp_msg.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	30 Jan 2003 19:45:20 -0000	1.33
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	30 Jan 2003 19:46:42 -0000	1.34
  @@ -495,6 +495,7 @@
       free(hdC);
   }
   
  +#if 0 /* still unused */
   static void headerdelete(headerdata_t *hdC)
   {
       if (hdC->prev != NULL)
  @@ -505,6 +506,7 @@
       hdC->prev = NULL;
       headerdestroy(hdC);
   }
  +#endif
   
   static void headerreplace(headerdata_t *hdC, headerdata_t *hdNew)
   {
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 30 20:47:54 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 97209767CD; Thu, 30 Jan 2003 20:47:53 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ configure.ac
Message-Id: <20030130194753.97209767CD@mail.ossp.org>
Date: Thu, 30 Jan 2003 20:47:53 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Jan-2003 20:47:53
  Branch: HEAD                             Handle: 2003013019475200

  Modified files:
    ossp-pkg/lmtp2nntp      configure.ac

  Log:
    update one more copyright occurrence

  Summary:
    Revision    Changes     Path
    1.32        +3  -2      ossp-pkg/lmtp2nntp/configure.ac
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/configure.ac
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 configure.ac
  --- ossp-pkg/lmtp2nntp/configure.ac	30 Jan 2003 19:45:19 -0000	1.31
  +++ ossp-pkg/lmtp2nntp/configure.ac	30 Jan 2003 19:47:52 -0000	1.32
  @@ -33,8 +33,9 @@
   dnl #   announce our version
   V=`./shtool version -lc -dlong lmtp2nntp_version.c`
   ./shtool echo -e "Configuring %BOSSP lmtp2nntp%b, Version %B${V}%b"
  -echo "Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>"
  -echo "Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>"
  +echo "Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>"
  +echo "Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>"
  +echo "Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>"
   
   dnl #   perform feature tests
   AC_PROG_MAKE_SET
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jan 31 19:32:02 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 89A75769C3; Fri, 31 Jan 2003 19:32:01 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ ChangeLog
Message-Id: <20030131183201.89A75769C3@mail.ossp.org>
Date: Fri, 31 Jan 2003 19:32:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Jan-2003 19:32:01
  Branch: HEAD                             Handle: 2003013118320000

  Modified files:
    ossp-pkg/sa             ChangeLog

  Log:
    fix date

  Summary:
    Revision    Changes     Path
    1.21        +1  -1      ossp-pkg/sa/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 ChangeLog
  --- ossp-pkg/sa/ChangeLog	28 Jan 2003 13:58:07 -0000	1.20
  +++ ossp-pkg/sa/ChangeLog	31 Jan 2003 18:32:00 -0000	1.21
  @@ -11,7 +11,7 @@
     This is a list of all changes to OSSP sa.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 1.0.3 and 1.0.4 (06-Jan-2002 to 28-Jan-2003)
  +  Changes between 1.0.3 and 1.0.4 (06-Jan-2003 to 28-Jan-2003)
   
      o Fixed embedding support: mappings for symbols sa_sendf and sa_id
        were missing.
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jan 31 19:34:07 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 65C0E769C3; Fri, 31 Jan 2003 19:34:07 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ ChangeLog THANKS sa_test.c
Message-Id: <20030131183407.65C0E769C3@mail.ossp.org>
Date: Fri, 31 Jan 2003 19:34:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Jan-2003 19:34:07
  Branch: HEAD                             Handle: 2003013118340600

  Modified files:
    ossp-pkg/sa             ChangeLog THANKS sa_test.c

  Log:
    Fixed test suite (sa_test.c): an sa_addr_t was destroyed
    too early and this way crashed the test suite.
    
    Submitted by: Brian T. Egleston <brian@egleston.com>

  Summary:
    Revision    Changes     Path
    1.22        +6  -0      ossp-pkg/sa/ChangeLog
    1.3         +1  -0      ossp-pkg/sa/THANKS
    1.24        +3  -3      ossp-pkg/sa/sa_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 ChangeLog
  --- ossp-pkg/sa/ChangeLog	31 Jan 2003 18:32:00 -0000	1.21
  +++ ossp-pkg/sa/ChangeLog	31 Jan 2003 18:34:06 -0000	1.22
  @@ -11,6 +11,12 @@
     This is a list of all changes to OSSP sa.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 1.0.4 and 1.0.5 (28-Jan-2003 to 31-Jan-2003)
  +
  +   o Fixed test suite (sa_test.c): an sa_addr_t was destroyed
  +     too early and this way crashed the test suite.
  +     [Brian T. Egleston <brian@egleston.com>]
  +
     Changes between 1.0.3 and 1.0.4 (06-Jan-2003 to 28-Jan-2003)
   
      o Fixed embedding support: mappings for symbols sa_sendf and sa_id
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/THANKS
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 THANKS
  --- ossp-pkg/sa/THANKS	7 Nov 2002 06:25:01 -0000	1.2
  +++ ossp-pkg/sa/THANKS	31 Jan 2003 18:34:06 -0000	1.3
  @@ -18,6 +18,7 @@
     bugfixes, hints, gave platform feedback, etc. (in alphabetical order):
   
       o  Ulrich Dessauer             <udessauer@agnitas.de>
  +    o  Brian T. Egleston           <brian@egleston.com>
       o  Michael van Elst            <mlelstv@serpens.de>
       o  Thomas Lotterer             <thomas@lotterer.net>
       o  Alvaro Lopez Ortega         <alvaro@alobbs.com>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa_test.c
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 sa_test.c
  --- ossp-pkg/sa/sa_test.c	6 Jan 2003 13:11:23 -0000	1.23
  +++ ossp-pkg/sa/sa_test.c	31 Jan 2003 18:34:06 -0000	1.24
  @@ -187,8 +187,8 @@
           /* bind socket to local port */
           ex(SRV, sa_addr_create(&saa_srv));
           ex(SRV, sa_addr_u2a(saa_srv, "inet://127.0.0.1:12345#tcp"));
  -        ex(SRV, sa_addr_destroy(saa_srv));
           ex(SRV, sa_bind(sa_srv, saa_srv));
  +        ex(SRV, sa_addr_destroy(saa_srv));
   
           /* receive client connection */
           ex(SRV, sa_listen(sa_srv, 10));
  @@ -229,8 +229,8 @@
           /* connect to server */
           ex(CLT, sa_addr_create(&saa_clt));
           ex(CLT, sa_addr_u2a(saa_clt, "inet://127.0.0.1:12345#tcp"));
  -        ex(CLT, sa_addr_destroy(saa_clt));
           ex(CLT, sa_connect(sa_clt, saa_clt));
  +        ex(CLT, sa_addr_destroy(saa_clt));
   
           /* communicate with server */
           ex(CLT, sa_readln(sa_clt, buf_clt, sizeof(buf_clt), &l));
  @@ -281,8 +281,8 @@
           /* bind socket to local port */
           ex(SRV, sa_addr_create(&saa_srv));
           ex(SRV, sa_addr_u2a(saa_srv, "inet://127.0.0.1:12345#udp"));
  -        ex(SRV, sa_addr_destroy(saa_srv));
           ex(SRV, sa_bind(sa_srv, saa_srv));
  +        ex(SRV, sa_addr_destroy(saa_srv));
   
           /* communicate with client */
           ex(SRV, sa_recv(sa_srv, &saa_clt, buf_srv, sizeof(buf_srv), &l));
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jan 31 19:58:20 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 90AAE768D0; Fri, 31 Jan 2003 19:58:19 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ ChangeLog ts.c
Message-Id: <20030131185819.90AAE768D0@mail.ossp.org>
Date: Fri, 31 Jan 2003 19:58:19 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Jan-2003 19:58:19
  Branch: HEAD                             Handle: 2003013118581800

  Modified files:
    ossp-pkg/sa             ChangeLog ts.c

  Log:
    Fixed test suite library (ts.c): the ts_suite_free()
    function performed an illegal iteration for freeing elements (they
    were freed but still references for traversing to next element).
    This is now solved by a look-ahead traversion.
    
    Hint by: Brian T. Egleston <brian@egleston.com>

  Summary:
    Revision    Changes     Path
    1.23        +6  -0      ossp-pkg/sa/ChangeLog
    1.7         +10 -6      ossp-pkg/sa/ts.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 ChangeLog
  --- ossp-pkg/sa/ChangeLog	31 Jan 2003 18:34:06 -0000	1.22
  +++ ossp-pkg/sa/ChangeLog	31 Jan 2003 18:58:18 -0000	1.23
  @@ -13,6 +13,12 @@
   
     Changes between 1.0.4 and 1.0.5 (28-Jan-2003 to 31-Jan-2003)
   
  +   o Fixed test suite library (ts.c): the ts_suite_free()
  +     function performed an illegal iteration for freeing elements (they
  +     were freed but still references for traversing to next element).
  +     This is now solved by a look-ahead traversion.
  +     [Ralf S. Engelschall, Brian T. Egleston <brian@egleston.com>]
  +
      o Fixed test suite (sa_test.c): an sa_addr_t was destroyed
        too early and this way crashed the test suite.
        [Brian T. Egleston <brian@egleston.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ts.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ts.c
  --- ossp-pkg/sa/ts.c	7 Nov 2002 12:44:12 -0000	1.6
  +++ ossp-pkg/sa/ts.c	31 Jan 2003 18:58:18 -0000	1.7
  @@ -76,6 +76,10 @@
       for ((ep)  = RING_FIRST((hp)); \
            (ep) != RING_SENTINEL((hp), elem, link); \
            (ep)  = RING_NEXT((ep), link))
  +#define RING_FOREACH_LA(ep, epT, hp, elem, link) \
  +    for ((ep)  = RING_FIRST((hp)), (epT) = RING_NEXT((ep), link); \
  +         (ep) != RING_SENTINEL((hp), elem, link); \
  +         (ep)  = (epT), (epT) = RING_NEXT((epT), link))
   
   /* test suite test log */
   struct tstl_st;
  @@ -367,15 +371,15 @@
   /* destroy test suite */
   void ts_suite_free(ts_suite_t *ts)
   {
  -    ts_test_t *tst;
  -    tstc_t *tstc;
  -    tstl_t *tstl;
  +    ts_test_t *tst, *tstT;
  +    tstc_t *tstc, *tstcT;
  +    tstl_t *tstl, *tstlT;
   
       if (ts == NULL)
           return;
  -    RING_FOREACH(tst, &ts->tests, ts_test_t, next) {
  -        RING_FOREACH(tstc, &tst->checks, tstc_t, next) {
  -            RING_FOREACH(tstl, &tstc->logs, tstl_t, next) {
  +    RING_FOREACH_LA(tst, tstT, &ts->tests, ts_test_t, next) {
  +        RING_FOREACH_LA(tstc, tstcT, &tst->checks, tstc_t, next) {
  +            RING_FOREACH_LA(tstl, tstlT, &tstc->logs, tstl_t, next) {
                   free(tstl->text);
               }
               free(tstc->title);
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jan 31 19:59:18 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B731E768D0; Fri, 31 Jan 2003 19:59:18 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ README VERSION
Message-Id: <20030131185918.B731E768D0@mail.ossp.org>
Date: Fri, 31 Jan 2003 19:59:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Jan-2003 19:59:18
  Branch: HEAD                             Handle: 2003013118591800

  Modified files:
    ossp-pkg/sa             README VERSION

  Log:
    bump version number for release

  Summary:
    Revision    Changes     Path
    1.16        +1  -1      ossp-pkg/sa/README
    1.13        +1  -1      ossp-pkg/sa/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/README
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 README
  --- ossp-pkg/sa/README	28 Jan 2003 14:00:50 -0000	1.15
  +++ ossp-pkg/sa/README	31 Jan 2003 18:59:18 -0000	1.16
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/\__,_|
   
     OSSP sa - Socket Abstraction
  -  Version 1.0.4 (28-Jan-2003)
  +  Version 1.0.5 (31-Jan-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/VERSION
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 VERSION
  --- ossp-pkg/sa/VERSION	28 Jan 2003 14:00:50 -0000	1.12
  +++ ossp-pkg/sa/VERSION	31 Jan 2003 18:59:18 -0000	1.13
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP sa (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP sa, Version 1.0.4 (28-Jan-2003)
  +  This is OSSP sa, Version 1.0.5 (31-Jan-2003)
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jan 31 20:07:57 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7BA16769C7; Fri, 31 Jan 2003 20:07:57 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20030131190757.7BA16769C7@mail.ossp.org>
Date: Fri, 31 Jan 2003 20:07:57 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   31-Jan-2003 20:07:57
  Branch: HEAD                             Handle: 2003013119075501

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/sa     index.wml

  Log:
    release OSSP sa 1.0.5

  Summary:
    Revision    Changes     Path
    1.50        +1  -0      ossp-web/new/news.txt
    1.47        +1  -1      ossp-web/pkg/lib/index.wml
    1.13        +2  -2      ossp-web/pkg/lib/sa/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.49 -r1.50 news.txt
  --- ossp-web/new/news.txt	30 Jan 2003 12:49:02 -0000	1.49
  +++ ossp-web/new/news.txt	31 Jan 2003 19:07:55 -0000	1.50
  @@ -1,3 +1,4 @@
  +31-Jan-2003: Released L<OSSP sa> 1.0.5
   30-Jan-2003: Released L<OSSP ex> 1.0.2
   28-Jan-2003: Released L<OSSP sa> 1.0.4
   28-Jan-2003: Released L<OSSP fsl> 1.0.7
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.46 -r1.47 index.wml
  --- ossp-web/pkg/lib/index.wml	30 Jan 2003 12:49:03 -0000	1.46
  +++ ossp-web/pkg/lib/index.wml	31 Jan 2003 19:07:56 -0000	1.47
  @@ -24,7 +24,7 @@
   			done=100 stable=1.0.2 unstable=none>
     <pkg_item name="sa" longname="OSSP sa" type="lib"
               desc="Socket Abstraction"
  -			done=100 stable=1.0.4 unstable=none>
  +			done=100 stable=1.0.5 unstable=none>
     <pkg_item name="fsl" longname="OSSP fsl" type="lib"
               desc="Faked/Flexible Syslog"
   			done=100 stable=1.0.7 unstable=none>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/sa/index.wml
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 index.wml
  --- ossp-web/pkg/lib/sa/index.wml	28 Jan 2003 14:03:02 -0000	1.12
  +++ ossp-web/pkg/lib/sa/index.wml	31 Jan 2003 19:07:56 -0000	1.13
  @@ -110,7 +110,7 @@
   
   <pkg_status
       name="sa" assign="rse"
  -    stable="1.0.4"    stable_date="28-Jan-2003"
  +    stable="1.0.5"    stable_date="31-Jan-2003"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -121,7 +121,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/sa/
       directory=$(FTP_ROOT_DIR)/pkg/lib/sa/
       files="sa-*.tar.gz" 
  -	stable="sa-1\.0\.4\.tar\.gz" unstable="sa-SNAP.*\.tar.gz">
  +	stable="sa-1\.0\.5\.tar\.gz" unstable="sa-SNAP.*\.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Feb  2 15:22:47 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EDBC8763BD; Sun,  2 Feb 2003 15:22:46 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val/ Makefile.in README aclocal.m4 configure.ac v...
Message-Id: <20030202142246.EDBC8763BD@mail.ossp.org>
Date: Sun,  2 Feb 2003 15:22:46 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Feb-2003 15:22:46
  Branch: HEAD                             Handle: 2003020214224300

  Modified files:
    ossp-pkg/val            Makefile.in README aclocal.m4 configure.ac
                            val-config.in val-config.pod val.c val.h val.pod
                            val_test.c

  Log:
    bump year in copyright messages

  Summary:
    Revision    Changes     Path
    1.8         +3  -3      ossp-pkg/val/Makefile.in
    1.5         +3  -3      ossp-pkg/val/README
    1.7         +3  -3      ossp-pkg/val/aclocal.m4
    1.6         +3  -3      ossp-pkg/val/configure.ac
    1.5         +3  -3      ossp-pkg/val/val-config.in
    1.2         +3  -3      ossp-pkg/val/val-config.pod
    1.13        +3  -3      ossp-pkg/val/val.c
    1.8         +3  -3      ossp-pkg/val/val.h
    1.13        +3  -3      ossp-pkg/val/val.pod
    1.8         +3  -3      ossp-pkg/val/val_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 Makefile.in
  --- ossp-pkg/val/Makefile.in	15 Mar 2002 11:41:14 -0000	1.7
  +++ ossp-pkg/val/Makefile.in	2 Feb 2003 14:22:43 -0000	1.8
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP val - Value Access
  -##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP val, a value access library which
   ##  can be found at http://www.ossp.org/pkg/lib/val/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/README
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 README
  --- ossp-pkg/val/README	15 Mar 2002 11:23:14 -0000	1.4
  +++ ossp-pkg/val/README	2 Feb 2003 14:22:43 -0000	1.5
  @@ -22,9 +22,9 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   
     This file is part of OSSP val, a value access library which
     can be found at http://www.ossp.org/pkg/lib/val/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 aclocal.m4
  --- ossp-pkg/val/aclocal.m4	13 Mar 2002 18:35:58 -0000	1.6
  +++ ossp-pkg/val/aclocal.m4	2 Feb 2003 14:22:43 -0000	1.7
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP val -- Value Access
  -dnl ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP val, a value access library
   dnl ##  which can be found at http://www.ossp.org/pkg/lib/val/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/configure.ac
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 configure.ac
  --- ossp-pkg/val/configure.ac	13 Mar 2002 18:35:58 -0000	1.5
  +++ ossp-pkg/val/configure.ac	2 Feb 2003 14:22:43 -0000	1.6
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP val - Value Access
  -dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP val, a value access library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/val/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/val-config.in
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 val-config.in
  --- ossp-pkg/val/val-config.in	13 Mar 2002 18:35:58 -0000	1.4
  +++ ossp-pkg/val/val-config.in	2 Feb 2003 14:22:43 -0000	1.5
  @@ -1,9 +1,9 @@
   #!/bin/sh
   ##
   ##  OSSP val - Value Access
  -##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP val, a value access library which
   ##  can be found at http://www.ossp.org/pkg/lib/val/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/val-config.pod
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 val-config.pod
  --- ossp-pkg/val/val-config.pod	15 Mar 2002 11:32:59 -0000	1.1
  +++ ossp-pkg/val/val-config.pod	2 Feb 2003 14:22:43 -0000	1.2
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP val -- Value Access
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2001-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
   ##  This file is part of OSSP val, a value access
   ##  library which can be found at http://www.ossp.org/pkg/lib/val/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/val.c
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 val.c
  --- ossp-pkg/val/val.c	13 Mar 2002 18:41:30 -0000	1.12
  +++ ossp-pkg/val/val.c	2 Feb 2003 14:22:43 -0000	1.13
  @@ -1,8 +1,8 @@
   /*
   **  OSSP val - Value Access
  -**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP val, a value access library which
   **  can be found at http://www.ossp.org/pkg/lib/val/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/val.h
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 val.h
  --- ossp-pkg/val/val.h	13 Mar 2002 18:35:58 -0000	1.7
  +++ ossp-pkg/val/val.h	2 Feb 2003 14:22:43 -0000	1.8
  @@ -1,8 +1,8 @@
   /*
   **  OSSP val - Value Access
  -**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP val, a value access library which
   **  can be found at http://www.ossp.org/pkg/lib/val/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/val.pod
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 val.pod
  --- ossp-pkg/val/val.pod	15 Mar 2002 11:35:09 -0000	1.12
  +++ ossp-pkg/val/val.pod	2 Feb 2003 14:22:43 -0000	1.13
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP val - Value Access
  -##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP val, a value access library which
   ##  can be found at http://www.ossp.org/pkg/lib/val/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/val_test.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 val_test.c
  --- ossp-pkg/val/val_test.c	13 Mar 2002 18:41:30 -0000	1.7
  +++ ossp-pkg/val/val_test.c	2 Feb 2003 14:22:43 -0000	1.8
  @@ -1,8 +1,8 @@
   /*
   **  OSSP val - Value Access
  -**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP val, a value access library which
   **  can be found at http://www.ossp.org/pkg/lib/val/.
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb  3 16:26:05 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F1F5B769C7; Mon,  3 Feb 2003 16:26:04 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_main.c
Message-Id: <20030203152604.F1F5B769C7@mail.ossp.org>
Date: Mon,  3 Feb 2003 16:26:04 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   03-Feb-2003 16:26:04
  Branch: HEAD                             Handle: 2003020315260300

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_main.c

  Log:
    handle/log failed NNTP connections; retry all of them every time

  Summary:
    Revision    Changes     Path
    1.63        +11 -13     ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================================
  $ cvs diff -u -r1.62 -r1.63 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	30 Jan 2003 19:45:20 -0000	1.62
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	3 Feb 2003 15:26:03 -0000	1.63
  @@ -775,6 +775,7 @@
       char         str[STDSTRLEN];
       int          bOk;
       int          i;
  +    int          is;
       nntp_io_t    nntp_io;
   
       logbook(ctx->l2, L2_LEVEL_INFO, "LMTP service executing LHLO command < %s", req->msg);
  @@ -822,6 +823,7 @@
       if (ctx->option_operationmode == OPERATIONMODE_FAKE)
           logbook(ctx->l2, L2_LEVEL_NOTICE, "NNTP running in fake mode, network connections will be executed but result is ignored");
       i = 0;
  +    is = 0;
       do {
           logbook(ctx->l2, L2_LEVEL_DEBUG, "trying ns[%d]", i);
           bOk = TRUE;
  @@ -871,24 +873,18 @@
   
           if (bOk) {
               logbook(ctx->l2, L2_LEVEL_INFO, "NNTP session to ${option.destination[%d]} successfully established", i);
  -            i++;
  +            is++;
           }
           else {
               logbook(ctx->l2, L2_LEVEL_WARNING, "NNTP session establishment to ${option.destination[%d]} failed", i);
  -            logbook(ctx->l2, L2_LEVEL_DEBUG, "FIXME-CURRENTLY-NOT removing ns[%d] from list", i);
               lmtp_gfs_ns(&ctx->pns[i]);
  -            /*FIXME #1 this code is a leftover from the static ns array with nsc counter
  -              FIXME #2 this code removes the newsservice forever!? What is the scope, what should the scope be - gateway, child process, session, posting lifetime? What is the intention of the user?
  -            if (i < --ctx->nns) {
  -                memcpy(&ctx->pns[i], &ctx->pns[i+1], (ctx->nns - i ) * sizeof(struct ns));
  -            }
  -            */
  -            i++; /* FIXME this is just to avoid infinite loop */
           }
  +        i++;
       } while (i < ctx->nns);
  +    logbook(ctx->l2, L2_LEVEL_INFO, "NNTP network connections tried %d, successful %d", i, is);
   
       if (ctx->option_operationmode == OPERATIONMODE_FAKE)
  -        logbook(ctx->l2, L2_LEVEL_NOTICE, "NNTP running in fake mode, network connections successfully established=%d but ignored", ctx->nns);
  +        logbook(ctx->l2, L2_LEVEL_NOTICE, "NNTP running in fake mode, ignoring status of real network connections");
       else
       {
           /*  RFC0821 4.2.1. REPLY CODES BY FUNCTION GROUPS   421 <domain> Service not available
  @@ -896,7 +892,7 @@
            *  RFC1893 3.5 Network and Routing Status          X.4.1   No answer from host
            */
           logbook(ctx->l2, L2_LEVEL_DEBUG, "check if at least one NNTP session successfully established");
  -        if (ctx->nns == 0) {
  +        if (is == 0) {
               logbook(ctx->l2, L2_LEVEL_ERROR, "no NNTP session established");
               res.statuscode = "421";
               res.dsncode    = "4.4.1";
  @@ -1545,10 +1541,12 @@
                   ctx->pns[i].rc = NNTP_FAKE;
                   break;
               case OPERATIONMODE_POST:
  -                ctx->pns[i].rc = nntp_post(ctx->pns[i].nntp, ctx->msg);
  +                if (ctx->pns[i].nntp)
  +                    ctx->pns[i].rc = nntp_post(ctx->pns[i].nntp, ctx->msg);
                   break;
               case OPERATIONMODE_FEED:
  -                ctx->pns[i].rc = nntp_feed(ctx->pns[i].nntp, ctx->msg);
  +                if (ctx->pns[i].nntp)
  +                    ctx->pns[i].rc = nntp_feed(ctx->pns[i].nntp, ctx->msg);
                   break;
           }
           if (ctx->pns[i].rc == NNTP_OK)
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb  3 16:32:00 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 69335769C3; Mon,  3 Feb 2003 16:32:00 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ sio_zlib.c
Message-Id: <20030203153200.69335769C3@mail.ossp.org>
Date: Mon,  3 Feb 2003 16:32:00 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   03-Feb-2003 16:32:00
  Branch: HEAD                             Handle: 2003020315315900

  Modified files:
    ossp-pkg/sio            sio_zlib.c

  Log:
    correctly initialize zlib

  Summary:
    Revision    Changes     Path
    1.7         +6  -0      ossp-pkg/sio/sio_zlib.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_zlib.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 sio_zlib.c
  --- ossp-pkg/sio/sio_zlib.c	20 Jan 2003 15:34:13 -0000	1.6
  +++ ossp-pkg/sio/sio_zlib.c	3 Feb 2003 15:31:59 -0000	1.7
  @@ -136,6 +136,12 @@
   
       dt->u = (void *)my;
   
  +    dt->zs.zalloc    = Z_NULL;
  +    dt->zs.zfree     = Z_NULL;
  +    dt->zs.opaque    = NULL;
  +    dt->zs.avail_in  = 0;
  +    dt->zs.avail_out = 0;
  +
       if (dt->lvl >= 0)
           zrc = deflateInit(&dt->zs, dt->lvl);
       else
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb  3 18:18:47 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 24FC5769C7; Mon,  3 Feb 2003 18:18:47 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ sio_zlib.c
Message-Id: <20030203171847.24FC5769C7@mail.ossp.org>
Date: Mon,  3 Feb 2003 18:18:47 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   03-Feb-2003 18:18:46
  Branch: HEAD                             Handle: 2003020317184600

  Modified files:
    ossp-pkg/sio            sio_zlib.c

  Log:
    paranoia

  Summary:
    Revision    Changes     Path
    1.8         +2  -0      ossp-pkg/sio/sio_zlib.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_zlib.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 sio_zlib.c
  --- ossp-pkg/sio/sio_zlib.c	3 Feb 2003 15:31:59 -0000	1.7
  +++ ossp-pkg/sio/sio_zlib.c	3 Feb 2003 17:18:46 -0000	1.8
  @@ -139,6 +139,8 @@
       dt->zs.zalloc    = Z_NULL;
       dt->zs.zfree     = Z_NULL;
       dt->zs.opaque    = NULL;
  +    dt->zs.next_in   = NULL;
  +    dt->zs.next_out  = NULL;
       dt->zs.avail_in  = 0;
       dt->zs.avail_out = 0;
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb  3 18:19:12 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1F191769E6; Mon,  3 Feb 2003 18:19:12 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ sio_test.c
Message-Id: <20030203171912.1F191769E6@mail.ossp.org>
Date: Mon,  3 Feb 2003 18:19:12 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   03-Feb-2003 18:19:12
  Branch: HEAD                             Handle: 2003020317191100

  Modified files:
    ossp-pkg/sio            sio_test.c

  Log:
    test zlib module

  Summary:
    Revision    Changes     Path
    1.13        +171 -1     ossp-pkg/sio/sio_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_test.c
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 sio_test.c
  --- ossp-pkg/sio/sio_test.c	30 Jan 2003 16:38:32 -0000	1.12
  +++ ossp-pkg/sio/sio_test.c	3 Feb 2003 17:19:11 -0000	1.13
  @@ -204,7 +204,7 @@
       });
       if (rc != SIO_OK) return;
       EVAL0("sio_configure_stage(sios_buffer)", {
  -        rc = sio_configure_stage(sio, sios_buffer, "outputsize", &buflen);
  +        rc = sio_configure_stage(sio, sios_buffer, "outputsize", &bufsize);
       });
       if (rc != SIO_OK) return;
       EVAL0("sio_configure_stage(sios_buffer, inputsize)", {
  @@ -1052,6 +1052,176 @@
   #if ENABLE_ZLIB
   TS_TEST(test_sio_zlib)
   {
  +    sio_rc_t rc;
  +    sio_t *sio;
  +    sio_stage_t *sios_zlib, *sios_fd;
  +    size_t bufsize = 1000;     /* input/output buffer size */
  +    int    zoutlevel =  9;     /* compress best on output */
  +    int    zinlevel  = -1;     /* decompress input */
  +    size_t buflen  =   81;     /* fd input buffer size */
  +    int fd;
  +    int i,wcount = 100;
  +    char S[] = "Hello world\n";
  +    char buf[sizeof(S)];
  +    size_t actual, len = strlen(S);
  +    char tempfile[] = "./sio_test_tmpfile.XXXXXX";
  +    int do_unlink = 0;
  +
  +    EVAL0("sio_create", {
  +        rc = sio_create(&sio);
  +    });
  +    if (rc != SIO_OK) return;
  +    EVAL0("sio_create_stage(&sios_fd)", {
  +        rc = sio_create_stage(sio, &sio_module_fd, &sios_fd);
  +    });
  +    if (rc != SIO_OK) return;
  +    EVAL0("sio_create_stage(&sios_zlib)", {
  +        rc = sio_create_stage(sio, &sio_module_zlib, &sios_zlib);
  +    });
  +    if (rc != SIO_OK) return;
  +
  +    EVAL0("sio_configure_stage(sios_fd, buflen)", {
  +        rc = sio_configure_stage(sio, sios_fd, "buflen", &buflen);
  +    });
  +    if (rc != SIO_OK) return;
  +    EVAL0("sio_configure_stage(sios_zlib)", {
  +        rc = sio_configure_stage(sio, sios_zlib, "outputsize", &bufsize);
  +    });
  +    if (rc != SIO_OK) return;
  +    EVAL0("sio_configure_stage(sios_zlib, inputsize)", {
  +        rc = sio_configure_stage(sio, sios_zlib, "inputsize", &bufsize);
  +    });
  +    if (rc != SIO_OK) return;
  +    EVAL0("sio_configure_stage(sios_zlib, outputlevel)", {
  +        rc = sio_configure_stage(sio, sios_zlib, "outputlevel", &zoutlevel);
  +    });
  +    if (rc != SIO_OK) return;
  +    EVAL0("sio_configure_stage(sios_zlib, inputlevel)", {
  +        rc = sio_configure_stage(sio, sios_zlib, "inputlevel", &zinlevel);
  +    });
  +    if (rc != SIO_OK) return;
  +
  +    /*
  +     * WRITE phase
  +     */
  +
  +    mktemp(tempfile);
  +    fd = open(tempfile, O_CREAT|O_EXCL|O_WRONLY, 0600);
  +    if (fd < 0) {
  +        ts_test_fail(TS_CTX, "cannot create temporary file \"%s\" (%s)\n",
  +            tempfile, strerror(errno));
  +    } else {
  +        do_unlink = 1;
  +        EVAL0("sio_configure_stage(sios_fd, fd)", {
  +            rc = sio_configure_stage(sio, sios_fd, "fd", &fd);
  +        });
  +        if (rc != SIO_OK) goto badwrite;
  +        EVAL0("sio_attach(sios_fd)", {
  +            rc = sio_attach(sio, sios_fd, SIO_MODE_READWRITE);
  +        });
  +        if (rc != SIO_OK) goto badwrite;
  +        EVAL0("sio_attach(sios_zlib)", {
  +            rc = sio_attach(sio, sios_zlib, SIO_MODE_READWRITE);
  +        });
  +        if (rc != SIO_OK) goto badwrite2;
  +
  +        for (i=0; i<wcount; ++i) {
  +            EVAL0("sio_write", {
  +                rc = sio_write(sio, S, len, &actual);
  +            });
  +            if (rc != SIO_OK) break;
  +            if (actual != len) {
  +                ts_test_fail(TS_CTX, "sio_write result %d (expected %d)\n",
  +                    (int)actual, (int)len);
  +                break;
  +            }
  +        }
  +
  +        EVAL0("sio_push", {
  +            rc = sio_push(sio);
  +        });
  +
  +        EVAL0("sio_detach(sios_zlib)", {
  +            rc = sio_detach(sio, sios_zlib);
  +        });
  +
  +        badwrite2:
  +        EVAL0("sio_detach(sios_fd)", {
  +            rc = sio_detach(sio, sios_fd);
  +        });
  +
  +        badwrite:
  +        close(fd);
  +    }
  +
  +    fd = open(tempfile, O_RDONLY);
  +    if (fd < 0) {
  +        ts_test_fail(TS_CTX, "cannot read temporary file \"%s\" (%s)\n",
  +            tempfile, strerror(errno));
  +    } else {
  +        EVAL0("sio_configure_stage(sios_fd, fd)", {
  +            rc = sio_configure_stage(sio, sios_fd, "fd", &fd);
  +        });
  +        if (rc != SIO_OK) goto badread;
  +
  +        EVAL0("sio_attach(sios_fd)", {
  +            rc = sio_attach(sio, sios_fd, SIO_MODE_READWRITE);
  +        });
  +        if (rc != SIO_OK) goto badread;
  +        EVAL0("sio_attach(sios_zlib)", {
  +            rc = sio_attach(sio, sios_zlib, SIO_MODE_READWRITE);
  +        });
  +        if (rc != SIO_OK) goto badread2;
  +
  +        for (i=0; i<wcount; ++i) {
  +            EVAL0("sio_read", {
  +                rc = sreadloop(sio, buf, len, &actual);
  +            });
  +            if (rc != SIO_OK) break;
  +            if (actual != len) {
  +                ts_test_fail(TS_CTX, "sio_read result %d (expected %d)\n",
  +                    (int)actual, (int)len);
  +                break;
  +            }
  +            buf[actual] = '\0';
  +            if (strcmp(buf, S)) {
  +                ts_test_fail(TS_CTX, "sio_read data mismatch at loop %d\n",
  +                    i);
  +                break;
  +            }
  +        }
  +
  +        EVAL0("sio_detach(sios_zlib)", {
  +            rc = sio_detach(sio, sios_zlib);
  +        });
  +
  +        badread2:
  +        EVAL0("sio_detach(sios_fd)", {
  +            rc = sio_detach(sio, sios_fd);
  +        });
  +
  +        badread:
  +        close(fd);
  +    }
  +
  +    if (do_unlink && unlink(tempfile) < 0) {
  +        ts_test_fail(TS_CTX, "cannot unlink temporary file \"%s\" (%s)\n",
  +            tempfile, strerror(errno));
  +    }
  +
  +    /*
  +     * common cleanup
  +     */
  +
  +    EVAL0("sio_destroy_stage", {
  +        rc = sio_destroy_stage(sio, sios_zlib);
  +    });
  +    EVAL0("sio_destroy_stage(sios_fd)", {
  +        rc = sio_destroy_stage(sio, sios_fd);
  +    });
  +    EVAL0("sio_destroy", {
  +        rc = sio_destroy(sio);
  +    });
   }
   #endif
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb  4 15:50:46 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6A1FF76A15; Tue,  4 Feb 2003 15:50:46 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_msg.c
Message-Id: <20030204145046.6A1FF76A15@mail.ossp.org>
Date: Tue,  4 Feb 2003 15:50:46 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   04-Feb-2003 15:50:46
  Branch: HEAD                             Handle: 2003020414504500

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_msg.c

  Log:
    header rewriting engine was integrated through lmtp2nntp_common.h

  Summary:
    Revision    Changes     Path
    1.35        +0  -2      ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 lmtp2nntp_msg.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	30 Jan 2003 19:46:42 -0000	1.34
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	4 Feb 2003 14:50:45 -0000	1.35
  @@ -454,8 +454,6 @@
       return str;
   }
   
  -    /* FIXME below is the header rewriting engine which must be cleaned up and integrated */
  -
   static void headerdatadestroy(headerdata_t *hdC)
   {
       int i;
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb  4 15:51:47 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9CFAB76A15; Tue,  4 Feb 2003 15:51:47 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ devtool.conf
Message-Id: <20030204145147.9CFAB76A15@mail.ossp.org>
Date: Tue,  4 Feb 2003 15:51:47 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   04-Feb-2003 15:51:47
  Branch: HEAD                             Handle: 2003020414514600

  Modified files:
    ossp-pkg/lmtp2nntp      devtool.conf

  Log:
    no more 1.conf working files and ~ temporary files in tarball

  Summary:
    Revision    Changes     Path
    1.11        +2  -2      ossp-pkg/lmtp2nntp/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 devtool.conf
  --- ossp-pkg/lmtp2nntp/devtool.conf	30 Jan 2003 19:14:47 -0000	1.10
  +++ ossp-pkg/lmtp2nntp/devtool.conf	4 Feb 2003 14:51:46 -0000	1.11
  @@ -48,5 +48,5 @@
       ./shtool fixperm -v .
       V=`./shtool version -l c -d short lmtp2nntp_version.c`
       ./shtool tarball -o lmtp2nntp-${V}.tar.gz -d lmtp2nntp-${V} -u ossp -g ossp \
  -                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf,*.tar.gz,*.bak,00TODO,autom4te\.cache' -c 'gzip --best' .
  -
  +                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf,*.tar.gz,*.bak,00TODO,autom4te\.cache,^[0-9]\.*,*~*' \
  +                     -c 'gzip --best' .
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb  4 16:03:34 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C8F4C76A2E; Tue,  4 Feb 2003 16:03:33 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ devtool.conf
Message-Id: <20030204150333.C8F4C76A2E@mail.ossp.org>
Date: Tue,  4 Feb 2003 16:03:33 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   04-Feb-2003 16:03:33
  Branch: HEAD                             Handle: 2003020415033300

  Modified files:
    ossp-pkg/lmtp2nntp      devtool.conf

  Log:
    suck in code from fsl

  Summary:
    Revision    Changes     Path
    1.12        +37 -3      ossp-pkg/lmtp2nntp/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 devtool.conf
  --- ossp-pkg/lmtp2nntp/devtool.conf	4 Feb 2003 14:51:46 -0000	1.11
  +++ ossp-pkg/lmtp2nntp/devtool.conf	4 Feb 2003 15:03:33 -0000	1.12
  @@ -38,15 +38,49 @@
           --enable-debug \
           "$@"
   
  +%release
  +    ./devtool version
  +    ./devtool tag
  +    ./devtool dist
  +    ./devtool upload
  +
   %version
       ./shtool version -l c -n "OSSP lmtp2nntp" -p "lmtp2nntp_" -e lmtp2nntp_version.c
   	V=`./shtool version -lc -dlong lmtp2nntp_version.c`
   	sed -e "s/Version .*(.*)/Version $V/g" <README >README.n && mv README.n README
   
  +%tag
  +	V=`./shtool version -lc -dshort lmtp2nntp_version.c | sed -e 's;\.;_;g'`
  +    echo "+++ tagging CVS sources as LMTP2NNTP_${V}"
  +    cvs commit -m 'flush pending changes before tagging'
  +    cvs tag LMTP2NNTP_${V}
  +
   %dist
  -    make distclean >/dev/null 2>&1
  +    echo "+++ removing old tarballs"
  +    rm -f lmtp2nntp-*.tar.gz
  +    echo "+++ generating"
  +    ./devtool autoclean
  +    ./devtool autogen
  +    echo "+++ configuring"
  +    ./devtool configure
  +    echo "+++ building"
  +    make clean all man
  +    echo "+++ cleaning"
  +    make distclean
  +    echo "+++ fixing"
       ./shtool fixperm -v .
  -    V=`./shtool version -l c -d short lmtp2nntp_version.c`
  +    echo "+++ rolling"
  +    V=`./shtool version -lc -dshort lmtp2nntp_version.c`
       ./shtool tarball -o lmtp2nntp-${V}.tar.gz -d lmtp2nntp-${V} -u ossp -g ossp \
  -                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf,*.tar.gz,*.bak,00TODO,autom4te\.cache,^[0-9]\.*,*~*' \
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*,*.tar.gz,^#.*,.*~$,*.bak,00TODO,autom4te\.cache,^[0-9]\.*' \
                        -c 'gzip --best' .
  +    ls -l lmtp2nntp-${V}.tar.gz
  +    echo "+++ testing"
  +    gunzip <lmtp2nntp-${V}.tar.gz | tar tvf - | head -10
  +    echo "[...]"
  +    gunzip <lmtp2nntp-${V}.tar.gz | tar tvf - | tail -10
  +
  +%upload
  +    echo "+++ copying to ftp://ftp.ossp.org/pkg/tool/lmtp2nntp/"
  +	V=`./shtool version -lc -dshort lmtp2nntp_version.c`
  +    scp lmtp2nntp-${V}.tar.gz master.ossp.org:/e/ossp/ftp/pkg/tool/lmtp2nntp/
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb  4 16:03:50 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A980176A35; Tue,  4 Feb 2003 16:03:50 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ README lmtp2nntp_version.c
Message-Id: <20030204150350.A980176A35@mail.ossp.org>
Date: Tue,  4 Feb 2003 16:03:50 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   04-Feb-2003 16:03:50
  Branch: HEAD                             Handle: 2003020415034900

  Modified files:
    ossp-pkg/lmtp2nntp      README lmtp2nntp_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.25        +1  -1      ossp-pkg/lmtp2nntp/README
    1.9         +9  -9      ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/README
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 README
  --- ossp-pkg/lmtp2nntp/README	30 Jan 2003 19:42:12 -0000	1.24
  +++ ossp-pkg/lmtp2nntp/README	4 Feb 2003 15:03:49 -0000	1.25
  @@ -5,7 +5,7 @@
     |_|_|_| \___/|____/____/|_|    |_|_||_||_|\__| .__/____|_||_|_||_|\__| .__/
                                                  |_|                     |_|
     OSSP lmtp2nntp - Mail to News Gateway
  -  Version 1.2a6 (14-Aug-2002)
  +  Version 1.2a7 (04-Feb-2003)
   
     BEWARE! THIS IS ALPHA CODE
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 lmtp2nntp_version.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	14 Aug 2002 21:19:01 -0000	1.8
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	4 Feb 2003 15:03:49 -0000	1.9
  @@ -8,7 +8,7 @@
   #ifndef _LMTP2NNTP_VERSION_C_
   #define _LMTP2NNTP_VERSION_C_
   
  -#define LMTP2NNTP_VERSION 0x102006
  +#define LMTP2NNTP_VERSION 0x102007
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _LMTP2NNTP_VERSION_C_AS_HEADER_
   
   lmtp2nntp_version_t lmtp2nntp_version = {
  -    0x102006,
  -    "1.2a6",
  -    "1.2a6 (14-Aug-2002)",
  -    "This is OSSP lmtp2nntp, Version 1.2a6 (14-Aug-2002)",
  -    "OSSP lmtp2nntp 1.2a6 (14-Aug-2002)",
  -    "OSSP lmtp2nntp/1.2a6",
  -    "@(#)OSSP lmtp2nntp 1.2a6 (14-Aug-2002)",
  -    "$Id: lmtp2nntp_version.c,v 1.8 2002/08/14 21:19:01 thl Exp $"
  +    0x102007,
  +    "1.2a7",
  +    "1.2a7 (04-Feb-2003)",
  +    "This is OSSP lmtp2nntp, Version 1.2a7 (04-Feb-2003)",
  +    "OSSP lmtp2nntp 1.2a7 (04-Feb-2003)",
  +    "OSSP lmtp2nntp/1.2a7",
  +    "@(#)OSSP lmtp2nntp 1.2a7 (04-Feb-2003)",
  +    "$Id: lmtp2nntp_version.c,v 1.9 2003/02/04 15:03:49 thl Exp $"
   };
   
   #endif /* _LMTP2NNTP_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb  4 16:07:22 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EF31476A2E; Tue,  4 Feb 2003 16:07:21 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ sio_test.c
Message-Id: <20030204150721.EF31476A2E@mail.ossp.org>
Date: Tue,  4 Feb 2003 16:07:21 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   04-Feb-2003 16:07:21
  Branch: HEAD                             Handle: 2003020415072100

  Modified files:
    ossp-pkg/sio            sio_test.c

  Log:
    add SA library test case

  Summary:
    Revision    Changes     Path
    1.14        +322 -3     ossp-pkg/sio/sio_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_test.c
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 sio_test.c
  --- ossp-pkg/sio/sio_test.c	3 Feb 2003 17:19:11 -0000	1.13
  +++ ossp-pkg/sio/sio_test.c	4 Feb 2003 15:07:21 -0000	1.14
  @@ -69,14 +69,15 @@
   extern sio_module_t sio_module_sillymux;
   
   
  -#define EVAL(name,rc,rc0,block) \
  +#define EVAL(name,rc,rc0,block,errf) \
       ts_test_check(TS_CTX, name); \
       block \
       if (rc != rc0) \
           ts_test_fail(TS_CTX, "%s -> %d[%s] (expected %d[%s])\n", \
  -            name, rc, sio_error(rc), rc0, sio_error(rc0))
  +            name, rc, errf(rc), rc0, errf(rc0))
   
  -#define EVAL0(name,block) EVAL(name,rc,SIO_OK,block)
  +#define EVAL0(name,block) EVAL(name,rc,SIO_OK,block,sio_error)
  +#define EVALS(name,block) EVAL(name,rc,SA_OK,block,sa_error)
   
   static sio_rc_t sreadloop(sio_t *, char *, size_t, size_t *);
   static int test_sio_pipe_read(ts_test_t *, int, int);
  @@ -572,6 +573,9 @@
   
       if (child == 0) {
           int result;
  +
  +        sleep(1);
  +
           close(pd[1]);
           result = test_sio_pipe_write(NULL, pd[0], wcount);
           close(pd[0]);
  @@ -1032,6 +1036,9 @@
   
       if (child == 0) {
           int result;
  +
  +        sleep(1);
  +
           close(pd[1]);
           result = test_sio_hello_client(NULL, pd[0]);
           close(pd[0]);
  @@ -1226,9 +1233,321 @@
   #endif
   
   #if ENABLE_SA
  +static
  +int test_sio_sa_read(ts_test_t *_t, sa_t *sa, int wcount)
  +{
  +    int error = 0, result = -1;
  +    sio_rc_t rc;
  +    sio_t *sio;
  +    sio_stage_t *sios_buffer, *sios_sa;
  +    size_t bufsize =  987;     /* output buffer size */
  +    size_t buflen  =   64;     /* sa input buffer size */
  +    int i;
  +    char S[] = "Hello world\n";
  +    char buf[sizeof(S)];
  +    size_t actual, len = strlen(S);
  +
  +    EVAL0("sio_create", {
  +        rc = sio_create(&sio);
  +    });
  +    if (rc != SIO_OK) return -1;
  +    EVAL0("sio_create_stage(&sios_sa)", {
  +        rc = sio_create_stage(sio, &sio_module_sa, &sios_sa);
  +    });
  +    if (rc != SIO_OK) return -1;
  +    EVAL0("sio_create_stage(&sios_buffer)", {
  +        rc = sio_create_stage(sio, &sio_module_buffer, &sios_buffer);
  +    });
  +    if (rc != SIO_OK) return -1;
  +
  +    EVAL0("sio_configure_stage(sios_sa, buflen)", {
  +        rc = sio_configure_stage(sio, sios_sa, "buflen", &buflen);
  +    });
  +    if (rc != SIO_OK) return -1;
  +    EVAL0("sio_configure_stage(sios_buffer)", {
  +        rc = sio_configure_stage(sio, sios_buffer, "outputsize", &buflen);
  +    });
  +    if (rc != SIO_OK) return -1;
  +    EVAL0("sio_configure_stage(sios_buffer, inputsize)", {
  +        rc = sio_configure_stage(sio, sios_buffer, "inputsize", &bufsize);
  +    });
  +    if (rc != SIO_OK) return -1;
  +
  +    EVAL0("sio_configure_stage(sios_sa, sa)", {
  +        rc = sio_configure_stage(sio, sios_sa, "sa", sa);
  +    });
  +    if (rc != SIO_OK) goto badread;
  +
  +    EVAL0("sio_attach(sios_sa)", {
  +        rc = sio_attach(sio, sios_sa, SIO_MODE_READWRITE);
  +    });
  +    if (rc != SIO_OK) goto badread;
  +    EVAL0("sio_attach(sios_buffer)", {
  +        rc = sio_attach(sio, sios_buffer, SIO_MODE_READWRITE);
  +    });
  +    if (rc != SIO_OK) goto badread2;
  +
  +    for (i=0; i<wcount; ++i) {
  +        EVAL0("sio_read", {
  +            rc = sreadloop(sio, buf, len, &actual);
  +        });
  +        if (rc != SIO_OK) error = 1;
  +        if (rc != SIO_OK) break;
  +        if (actual != len) {
  +            ts_test_fail(TS_CTX, "sio_read result %d (expected %d)\n",
  +                (int)actual, (int)len);
  +            break;
  +        }
  +        buf[actual] = '\0';
  +        if (strcmp(buf, S)) {
  +            ts_test_fail(TS_CTX, "sio_read data mismatch at loop %d\n",
  +                i);
  +            break;
  +        }
  +    }
  +
  +    EVAL0("sio_detach(sios_buffer)", {
  +        rc = sio_detach(sio, sios_buffer);
  +    });
  +    if (rc != SIO_OK) error = 1;
  +
  +    result = error;
  +
  +    badread2:
  +
  +    EVAL0("sio_detach(sios_sa)", {
  +        rc = sio_detach(sio, sios_sa);
  +    });
  +    if (rc != SIO_OK) result = -1;
  +
  +    badread:
  +
  +    EVAL0("sio_destroy_stage", {
  +        rc = sio_destroy_stage(sio, sios_buffer);
  +    });
  +    if (rc != SIO_OK) result = -1;
  +    EVAL0("sio_destroy_stage(sios_sa)", {
  +        rc = sio_destroy_stage(sio, sios_sa);
  +    });
  +    if (rc != SIO_OK) result = -1;
  +    EVAL0("sio_destroy", {
  +        rc = sio_destroy(sio);
  +    });
  +    if (rc != SIO_OK) result = -1;
  +
  +    return result;
  +}
  +
  +static
  +int test_sio_sa_write(ts_test_t *_t, sa_t *sa, int wcount)
  +{
  +    int error = 0, result = -1;
  +    sio_rc_t rc;
  +    sio_t *sio;
  +    sio_stage_t *sios_buffer, *sios_sa;
  +    size_t bufsize = 1003;     /* output buffer size */
  +    size_t buflen  =   47;     /* sa input buffer size */
  +    int i;
  +    char S[] = "Hello world\n";
  +    size_t actual, len = strlen(S);
  +
  +    EVAL0("sio_create", {
  +        rc = sio_create(&sio);
  +    });
  +    if (rc != SIO_OK) return -1;
  +    EVAL0("sio_create_stage(&sios_sa)", {
  +        rc = sio_create_stage(sio, &sio_module_sa, &sios_sa);
  +    });
  +    if (rc != SIO_OK) return -1;
  +    EVAL0("sio_create_stage(&sios_buffer)", {
  +        rc = sio_create_stage(sio, &sio_module_buffer, &sios_buffer);
  +    });
  +    if (rc != SIO_OK) return -1;
  +
  +    EVAL0("sio_configure_stage(sios_sa, buflen)", {
  +        rc = sio_configure_stage(sio, sios_sa, "buflen", &buflen);
  +    });
  +    if (rc != SIO_OK) return -1;
  +    EVAL0("sio_configure_stage(sios_buffer)", {
  +        rc = sio_configure_stage(sio, sios_buffer, "outputsize", &buflen);
  +    });
  +    if (rc != SIO_OK) return -1;
  +    EVAL0("sio_configure_stage(sios_buffer, inputsize)", {
  +        rc = sio_configure_stage(sio, sios_buffer, "inputsize", &bufsize);
  +    });
  +    if (rc != SIO_OK) return -1;
  +
  +    /*
  +     * WRITE phase
  +     */
  +
  +    EVAL0("sio_configure_stage(sios_sa, sa)", {
  +        rc = sio_configure_stage(sio, sios_sa, "sa", sa);
  +    });
  +    if (rc != SIO_OK) goto badwrite;
  +    EVAL0("sio_attach(sios_sa)", {
  +        rc = sio_attach(sio, sios_sa, SIO_MODE_READWRITE);
  +    });
  +    if (rc != SIO_OK) goto badwrite;
  +    EVAL0("sio_attach(sios_buffer)", {
  +        rc = sio_attach(sio, sios_buffer, SIO_MODE_READWRITE);
  +    });
  +    if (rc != SIO_OK) goto badwrite2;
  +
  +    for (i=0; i<wcount; ++i) {
  +        EVAL0("sio_write", {
  +            rc = sio_write(sio, S, len, &actual);
  +        });
  +        if (rc != SIO_OK) error = 1;
  +        if (rc != SIO_OK) break;
  +        if (actual != len) {
  +            ts_test_fail(TS_CTX, "sio_write result %d (expected %d)\n",
  +                (int)actual, (int)len);
  +            break;
  +        }
  +    }
  +
  +    EVAL0("sio_push", {
  +        rc = sio_push(sio);
  +    });
  +    if (rc != SIO_OK) error = 1;
  +
  +    EVAL0("sio_detach(sios_buffer)", {
  +        rc = sio_detach(sio, sios_buffer);
  +    });
  +    if (rc != SIO_OK) error = 1;
  +
  +    result = error;
  +
  +    badwrite2:
  +    EVAL0("sio_detach(sios_sa)", {
  +        rc = sio_detach(sio, sios_sa);
  +    });
  +    if (rc != SIO_OK) result = -1;
  +
  +    badwrite:
  +
  +    /*
  +     * common cleanup
  +     */
  +
  +    EVAL0("sio_destroy_stage", {
  +        rc = sio_destroy_stage(sio, sios_buffer);
  +    });
  +    if (rc != SIO_OK) result = -1;
  +    EVAL0("sio_destroy_stage(sios_sa)", {
  +        rc = sio_destroy_stage(sio, sios_sa);
  +    });
  +    if (rc != SIO_OK) result = -1;
  +    EVAL0("sio_destroy", {
  +        rc = sio_destroy(sio);
  +    });
  +    if (rc != SIO_OK) result = -1;
  +
  +    return result;
  +}
  +
   TS_TEST(test_sio_sa)
   {
  +    pid_t child;
  +    sa_rc_t rc;
  +    sa_addr_t *saa_b, *saa_p;
  +    sa_t *sa_client, *sa_server;
  +    int wcount = 147;
  +    int status;
  +
  +    fflush(stdout);
  +    fflush(stderr);
  +
  +    EVALS("sa_create(sa_server)", {
  +        rc = sa_create(&sa_server);
  +    });
  +    if (rc != SA_OK) goto sa_bail;
  +    EVALS("sa_timeout(sa_server, SA_TIMEOUT_ALL, 5, 0)", {
  +        rc = sa_timeout(sa_server, SA_TIMEOUT_ALL, 5, 0);
  +    });
  +    if (rc != SA_OK) goto sa_bail1;
  +    EVALS("sa_option(sa_server, SA_OPTION_REUSEADDR, 1)", {
  +        rc = sa_option(sa_server, SA_OPTION_REUSEADDR, 1);
  +    });
  +    if (rc != SA_OK) goto sa_bail1;
  +    EVALS("sa_addr_create(&saa_b)", {
  +        rc = sa_addr_create(&saa_b);
  +    });
  +    if (rc != SA_OK) goto sa_bail1;
  +    EVALS("sa_addr_u2a(saa_b, uri)", {
  +        rc = sa_addr_u2a(saa_b, "inet://127.0.0.1:0");
  +    });
  +    if (rc != SA_OK) goto sa_bail1;
  +    EVALS("sa_bind(sa_server, saa_b)", {
  +        rc = sa_bind(sa_server, saa_b);
  +    });
  +    if (rc != SA_OK) goto sa_bail2;
  +    EVALS("sa_listen(sa_server, 128)", {
  +        rc = sa_listen(sa_server, 128);
  +    });
  +    if (rc != SA_OK) goto sa_bail2;
  +    EVALS("sa_getlocal(sa_server, &saa_p)", {
  +        rc = sa_getlocal(sa_server, &saa_p);
  +    });
  +    if (rc != SA_OK) goto sa_bail2;
  +    EVALS("sa_create(sa_client)", {
  +        rc = sa_create(&sa_client);
  +    });
  +    if (rc != SA_OK) goto sa_bail3;
  +    EVALS("sa_timeout(sa_client, SA_TIMEOUT_ALL, 5, 0)", {
  +        rc = sa_timeout(sa_client, SA_TIMEOUT_ALL, 5, 0);
  +    });
  +    if (rc != SA_OK) goto sa_bail4;
  +
  +    child = fork();
  +    if (child == -1) {
  +        ts_test_fail(TS_CTX, "cannot fork (%s)\n",
  +            strerror(errno));
  +    }
  +
  +    if (child == 0) {
  +        int result;
  +        sa_t *sa_conn;
  +        sa_addr_t *saa_c;
  +
  +        sleep(1);
  +
  +        rc = sa_accept(sa_server, &saa_c, &sa_conn);
  +        if (rc != SA_OK) exit(2);
  +        rc = sa_addr_destroy(saa_c);
  +
  +        rc = sa_shutdown(sa_server, "rw");
  +        rc = sa_shutdown(sa_conn, "r");
  +        result = test_sio_sa_write(NULL, sa_conn, wcount);
  +        rc = sa_shutdown(sa_conn, "w");
  +        exit(result ? 1 : 0);
  +    } else {
  +        EVALS("sa_connect(sa_client, saa_p)", {
  +            rc = sa_connect(sa_client, saa_p);
  +        });
  +        rc = sa_shutdown(sa_server, "w");
  +        test_sio_sa_read(_t, sa_client, wcount);
  +        rc = sa_shutdown(sa_server, "r");
  +        waitpid(child, &status, 0);
  +        if (status != 0) {
  +            ts_test_fail(TS_CTX, "child returned status %08lx\n",
  +                status);
  +        }
  +    }
  +
  +sa_bail4:
  +    sa_destroy(sa_client);
  +sa_bail3:
  +    sa_addr_destroy(saa_p);
  +sa_bail2:
  +    sa_addr_destroy(saa_b);
  +sa_bail1:
  +    sa_destroy(sa_server);
  +sa_bail:
  +    return;
   }
  +
   #endif
   
   #if ENABLE_BIO
  @@ .

From ossp-cvs-owner@ossp.org  Wed Feb  5 16:34:21 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D06B2768D5; Wed,  5 Feb 2003 16:34:20 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ INSTALL example.conf
Message-Id: <20030205153420.D06B2768D5@mail.ossp.org>
Date: Wed,  5 Feb 2003 16:34:20 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   05-Feb-2003 16:34:20
  Branch: HEAD                             Handle: 2003020515341900

  Modified files:
    ossp-pkg/lmtp2nntp      INSTALL
  Removed files:
    ossp-pkg/lmtp2nntp      example.conf

  Log:
    update documentation

  Summary:
    Revision    Changes     Path
    1.15        +212 -117   ossp-pkg/lmtp2nntp/INSTALL
    1.20        +0  -75     ossp-pkg/lmtp2nntp/example.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/INSTALL
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 INSTALL
  --- ossp-pkg/lmtp2nntp/INSTALL	30 Jan 2003 19:45:19 -0000	1.14
  +++ ossp-pkg/lmtp2nntp/INSTALL	5 Feb 2003 15:34:19 -0000	1.15
  @@ -9,7 +9,7 @@
     INSTALLATION
     ============
   
  -  To install OSSP lmtp2nntp into /path/to/lmtp2nntp/{bin,man}/ perform
  +  To install OSSP lmtp2nntp into /path/to/lmtp2nntp/{sbin,man}/ perform
     the following steps in your shell:
   
       $ ./configure --prefix=/path/to/lmtp2nntp
  @@ -22,117 +22,135 @@
   
     In order to use OSSP lmtp2nntp, the program has to be integrated into
     a Mail Transfer Agent (MTA) which speaks Local Mail Transfer Protocol
  -  (LMTP). OSSP lmtp2nntp was developed with Sendmail 8.11 and tested
  -  with Sendmail 8.11 and Postfix 20010228, but should also work with
  -  other MTAs who provide an LMTP interface. The detailed integration
  -  into Sendmail 8.11 and Postfix 20010228 is shown below.
  +  (LMTP). OSSP lmtp2nntp was developed and tested with Sendmail 8.12 and
  +  Postfix 2.0, but should also work with other MTAs who provide an LMTP
  +  interface. The detailed integration into Sendmail and Postfix is shown
  +  below.
   
  -  Sendmail Integration
  -  --------------------
  +  Sendmail
  +  --------
   
  -  1. Create a "cf/mailer/lmtp2nntp.m4" macro file with the following contents:
  +  1. Create a new mailer definition macro file
   
  +     cf/mailer/lmtp2nntp.m4
  +     |
        | PUSHDIVERT(-1)
  -     | _DEFIFNOT(`LMTP2NNTP_MAILER_PATH',          `/usr/local/bin/lmtp2nntp')
  -     | _DEFIFNOT(`LMTP2NNTP_MAILER_FLAGS',         `mDFMuXz')
  -     | _DEFIFNOT(`LMTP2NNTP_MAILER_ARGS',          `')
  -     | _DEFIFNOT(`LMTP2NNTP_MAILER_CLIENTBIND',    `0.0.0.0')
  -     | _DEFIFNOT(`LMTP2NNTP_MAILER_GROUPMODE',     `envelope')
  -     | _DEFIFNOT(`LMTP2NNTP_MAILER_LOGLEVEL',      `notice:/var/log/lmtp2nntp')
  -     | _DEFIFNOT(`LMTP2NNTP_MAILER_MAILFROM',      `^.+@(?:[^.]+\.)+[^.]+\.?$')
  -     | _DEFIFNOT(`LMTP2NNTP_MAILER_NODENAME',      `confDOMAIN_NAME')
  -     | _DEFIFNOT(`LMTP2NNTP_MAILER_OPERATIONMODE', `post')
  -     | _DEFIFNOT(`LMTP2NNTP_MAILER_SIZE',          `800000')
  -     | _DEFIFNOT(`LMTP2NNTP_MAILER_TIMEOUT',       `nntp:connect=60')
  -     | _DEFIFNOT(`LMTP2NNTP_MAILER_NEWSGROUP',     `\*')
  +     | 
  +     | _DEFIFNOT(`LMTP2NNTP_MAILER_PATH',  `/usr/local/sbin/lmtp2nntp')
  +     | _DEFIFNOT(`LMTP2NNTP_MAILER_FLAGS', `mDFMuXz0')
  +     | _DEFIFNOT(`LMTP2NNTP_MAILER_MAX',   `8388608')
  +     | _DEFIFNOT(`LMTP2NNTP_MAILER_ARGS',  `--include /usr/local/etc/lmtp2nntp.conf')
  +     | 
        | POPDIVERT
  -     |
  +     | 
        | #########################################
        | ###   LMTP2NNTP Mailer specification  ###
        | #########################################
  -     |
  +     | 
        | Mlmtp2nntp, P=LMTP2NNTP_MAILER_PATH, F=LMTP2NNTP_MAILER_FLAGS,
        |             S=EnvFromSMTP/HdrFromSMTP, R=MasqSMTP, E=\r\n,
  -     |             L=990, T=DNS/RFC822/SMTP, M=LMTP2NNTP_MAILER_SIZE,
  -     |             A=lmtp2nntp LMTP2NNTP_MAILER_ARGS dnl
  -     |                         -c LMTP2NNTP_MAILER_CLIENTBIND dnl
  -     |                         -d $h dnl
  -     |                         -g LMTP2NNTP_MAILER_GROUPMODE dnl
  -     |                         -l LMTP2NNTP_MAILER_LOGLEVEL dnl
  -     |                         -m LMTP2NNTP_MAILER_MAILFROM dnl
  -     |                         -n LMTP2NNTP_MAILER_NODENAME dnl
  -     |                         -o LMTP2NNTP_MAILER_OPERATIONMODE dnl
  -     |                         -s LMTP2NNTP_MAILER_SIZE dnl
  -     |                         -t LMTP2NNTP_MAILER_TIMEOUT dnl
  -     |                         LMTP2NNTP_MAILER_NEWSGROUP
  -
  -     This changes nothing in your Sendmail configuration, but just adds
  -     a new mailer named "lmtp2nntp" to Sendmail.
  +     |             L=990, T=DNS/RFC822/SMTP, M=LMTP2NNTP_MAILER_MAX,
  +     |             A=LMTP2NNTP_MAILER_ARGS
  +
  +  2. Use the new mailer definition macro within master control
  +
  +     Sendmail and lmtp2nntp can talk LMTP to each other through
  +     stdin/stdout. In this case Sendmail spawns a child whenever it
  +     wants to talk and no communication channel is already established.
  +     The new process execs lmtp2nntp and finally the Sendmail parent and
  +     the lmtp2nntp child are connected through a local pipe.
  +
  +     sendmail.m4 entry for local pipe
  +     |
  +     | dnl #  Mailer: LMTP2NNTP (mail to news gateway using pipe)
  +     | dnl define(`LMTP2NNTP_MAILER_FLAGS', `mDFMuXz0')
  +     | dnl define(`LMTP2NNTP_MAILER_PATH',  `/usr/local/sbin/lmtp2nntp')
  +     | dnl define(`LMTP2NNTP_MAILER_ARGS',  `lmtp2nntp --include /usr/local/etc/lmtp2nntp.conf')
  +
  +     Alternatively, Sendmail and lmtp2nntp can talk LMTP to each other
  +     through a socket. Both BSD network and UNIX domain sockets are
  +     supported.  In this case Sendmail connects to lmtp2nntp through the
  +     network. It is a requirement to start lmtp2nntp in daemon mode as
  +     described in the "daemonize" section below.
  +
  +     sendmail.m4 entry for network socket
  +     |
  +     | dnl #  Mailer: LMTP2NNTP (mail to news gateway using socket)
  +     | define(`LMTP2NNTP_MAILER_FLAGS', `mDFMuXz0')
  +     | define(`LMTP2NNTP_MAILER_PATH',  `[IPC]')
   
  -  2. Add to your Sendmail M4 configuration (file "sendmail.m4" or
  -     "sendmail.mc" according to your installation) the following entry:
  +     sendmail.m4 entry for UNIX domain socket
  +     |
  +     | define(`LMTP2NNTP_MAILER_ARGS',  `FILE /usr/local/var/lmtp2nntp/lmtp2nntp.socket')
  +
  +     sendmail.m4 entry for BSD network socket
  +     |
  +     | define(`LMTP2NNTP_MAILER_ARGS',  `TCP 127.0.0.1 24')
   
  -     sendmail.m4:
  +     In all cases, tell M4 to divert configuration information based
  +     your preferences into sendmail.cf.  This defines the new
  +     "lmtp2nntp" mailer in your Sendmail configuration. Additional steps
  +     are required to activate the configuration.
   
  -     | dnl #  Mailer: LMTP2NNTP (mail to news gateway)
  -     | define(`LMTP2NNTP_MAILER_PATH', `/path/to/lmtp2nntp/bin/lmtp2nntp')
  +     sendmail.m4
  +     |
        | MAILER(lmtp2nntp)
   
  -     This defines the new "lmtp2nntp" mailer in your Sendmail
  -     configuration, but still does not activate it. Additionally feel
  -     free to overwrite more LMTP2NNTP_MAILER_XXXX variables in order
  -     to adjust the run-time behaviour of OSSP lmtp2nntp. See the
  -     lmtp2nntp(1) manual page for more details about the commmand line
  -     parameters.
  -
  -  3. Activate in your Sendmail M4 configuration (file "sendmail.m4" or
  -     "sendmail.mc" according to your installation) the virtual user
  -     and mailer table:
   
  -     sendmail.m4:
  +  3. Activate the virtual user table and mailer table in your Sendmail
  +     M4 configuration 
   
  +     sendmail.m4
  +     |
        | FEATURE(mailertable,   `hash -o /path/to/mailertable')
        | FEATURE(virtusertable, `hash -o /path/to/virtusertable')
   
  -  4. Add the following entries to both your virtual user table (file
  -     "virtusertable") and your mailer table (file "mailertable") in order
  -     to finally activate the mail to news gateway:
  +  4. Add the following entries to your virtual user table 
  +     and your mailer table
   
        virtusertable:
  -
  -     | posting+*@gateway.example.com  %2@lmtp2nntp.invalid
  +     |
  +     | posting+*@gateway.example.com %2@lmtp2nntp.invalid
   
        mailertable:
  -
  -     | lmtp2nntp.invalid              lmtp2nntp:news.example.com
  +     |
  +     | lmtp2nntp.invalid lmtp2nntp:news
   
        Notice that we use the RFC2606 top-level domain name ".invalid"
        for the internal mapping between virtual user table and the
        mailer table. This is neccessary because Sendmail cannot directly
        map individual recipient mailbox addresses to outgoing mailers.
   
  -     In this example configrution we assumed that the machine
  -     "gateway.example.com" is the FQDN of machine running Sendmail
  -     and OSSP lmtp2nntp and "news.example.com" is the remote Usenet
  -     News server speaking NNTP. This means that mails addressed to
  +     The token following the colon (news.example.com) in mailertable is
  +     passed to mailer as $h. The instructions regarding sendmail.m4
  +     above ignore that fact and assume the address of the NNTP server is
  +     configured in lmtp2nntp.conf. However, only the "pipe" mode
  +     discussed above is able to catch that information from Sendmail.
  +     Simply add '--destination $h' to LMTP2NNTP_MAILER_ARGS and omit
  +     'destination' from the config file. 
  +
  +     In this example configuration we assume that the machine
  +     "gateway.example.com" is the FQDN of machine running Sendmail and
  +     OSSP lmtp2nntp and "news" is the remote Usenet News server speaking
  +     NNTP. This means that mails addressed to
        "posting+foo.bar@gateway.example.com" are posted via NNTP as news
  -     articles into the newsgroup foo.bar on "news.example.com".
  +     articles into the newsgroup foo.bar on server "news".
   
  -     Additionally, if just the MX DNS record for "news.example.com"
  -     points to the address of "gateway.example.com" you can add the
  -     following additional entry to your virtual user table in order
  -     to let "news.example.com" virtually provide mail to news gateway
  +     Additionally, if the MX RR for "news.example.com" points to the
  +     address of "gateway.example.com" you can add the following
  +     additional entry to your virtual user table in order to let
  +     "news.example.com" virtually provide mail to news gateway
        functionality:
   
        virtusertable:
  -
  -     | @news.example.com              %1@lmtp2nntp.invalid
  +     |
  +     | @news.example.com %1@lmtp2nntp.invalid
   
        Notice that there are more delivery modes supported by OSSP
        lmtp2nntp. Refer to the lmtp2nntp(1) manual page for more details.
   
  -  Postfix Integration
  -  -------------------
  +  Postfix
  +  -------
   
     1. Make sure that Postfix was built with PCRE map support
        (see README.PCRE in the original Postfix source distribution).
  @@ -145,71 +163,148 @@
        |     AUXLIBS="-L/path/to/pcre/lib -lpcre"
   
     2. In the Postfix main configuration file (main.cf) you have
  -     enable the virtual user and transport mapping tables:
  -
  -     main.cf:
  +     to enable the virtual user and transport mapping tables:
   
  -     | virtual_maps   = pcre:/path/to/virtual
  -     | transport_maps = hash:/path/to/transport
  -
  -  3. Add the following entry to the Postfix virtual user mapping table:
  +     main.cf
  +     |
  +     | virtual_maps   = pcre:/usr/local/etc/virtual
  +     | transport_maps = hash:/usr/local/etc/transport
   
  -     /path/to/virtual:
  +  3. Add the following entry to the Postfix virtual user mapping table
   
  +     /usr/local/etc/virtual
  +     |
        | /^posting\+(.*)@gateway\.example\.com$/ $1@lmtp2nntp.invalid
   
  -  4. Add the following entry to the Postfix transport mapping table:
  -
  -     /path/to/transport:
  +  4. Add the following entry to the Postfix transport mapping table
   
  +     /usr/local/etc/transport
  +     |
        | lmtp2nntp.invalid  lmtp:unix:/path/to/lmtp2nntp.news.example.com
   
        Additionally convert the transport mapping table into the hash
        table format Postfix reads (not required for the virtual user
        mapping table above, because it is PCRE based).
   
  -     $ postmap /path/to/transport
  +     $ postmap /usr/local/etc/transport
   
  -  5. Start lmtp2nntp as a stand-alone daemon for delivering to
  -     news.example.com. This is required because in contrast to Sendmail,
  -     Postfix can speak LMTP only via Unix Domain and Internet Domain
  -     sockets (but not via a Unix pipe). Use the following script:
  +  5. Assuming you use the "lmtp2nntpd" run command script as described
  +     in the next section "Daemonize", start lmtp2nntp daemon and reload
  +     Postfix to activate the new setup Note that Postfix does not
  +     support LMTP across local pipes as Sendmail does so running a
  +     daemon is mandatory.
   
  -     lmtp2nntpd:
  +     $ lmtp2nntpd start
  +     $ postfix reload
  +
  +  Daemonize
  +  ---------
   
  +  1. Start lmtp2nntp as a daemon for delivering and listen for incoming
  +     connections.
  +
  +     lmtp2nntpd
  +     |
        | #!/bin/sh
  -     | LMTP2NNTP_PATH='/usr/local/bin/lmtp2nntp'
  -     | LMTP2NNTP_ARGS=''
  -     | LMTP2NNTP_CLIENTBIND='/path/to/lmtp2nntp.news.example.com'
  -     | LMTP2NNTP_GROUPMODE='envelope'
  -     | LMTP2NNTP_LOGLEVEL='notice:/var/log/lmtp2nntp'
  -     | LMTP2NNTP_MAILFROM='^.+@(?:[^.]+\.)+[^.]+$'
  -     | LMTP2NNTP_NODENAME=`hostname`
  -     | LMTP2NNTP_OPERATIONMODE='post'
  -     | LMTP2NNTP_SIZE='800000'
  -     | LMTP2NNTP_TIMEOUT='nntp:connect=60'
  -     | LMTP2NNTP_NEWSGROUP='*'
  +     | LMTP2NNTP_PATH='/usr/local/sbin/lmtp2nntp'
  +     | LMTP2NNTP_CONF='/usr/local/etc/lmtp2nntp.conf'
        | case $1 in
        |     start )
  -     |         $LMTP2NNTP_PATH -D -P "/path/to/lmtp2nntp.pid" \
  -     |             -c "$LMTP2NNTP_CLIENTBIND" \
  -     |             -d "news.example.com" \
  -     |             -g "$LMTP2NNTP_GROUPMODE" \
  -     |             -l "$LMTP2NNTP_LOGLEVEL" \
  -     |             -m "$LMTP2NNTP_MAILFROM" \
  -     |             -n "$LMTP2NNTP_NODENAME" \
  -     |             -o "$LMTP2NNTP_OPERATIONMODE" \
  -     |             -s "$LMTP2NNTP_SIZE" \
  -     |             -t "$LMTP2NNTP_TIMEOUT" \
  -     |             "$LMTP2NNTP_NEWSGROUP"
  +     |         $LMTP2NNTP_PATH --daemonize --include $LMTP2NNTP_CONF
        |         ;;
        |     stop )
  -     |         $LMTP2NNTP_PATH -K -P "/path/to/lmtp2nntp.pid"
  +     |         $LMTP2NNTP_PATH --kill      --include $LMTP2NNTP_CONF
        |         ;;
        | esac
   
  -  5. start lmtp2nntp daemon and reload Postfix to activate the new setup:
  -
  -     $ lmtp2nntpd start
  -     $ postfix reload
  +  Configuration
  +  -------------
   
  +     lmtp2nntp.conf
  +     |
  +     | ##
  +     | ##  lmtp2nntp.conf -- Mail to News Gateway Configuration
  +     | ##
  +     | 
  +     | #   --- DAEMON ---
  +     | user               @l_musr@
  +     | childsmax          10
  +     | pidfile            "@l_prefix@/var/lmtp2nntp/lmtp2nntp.pid"
  +     | 
  +     | #   --- LMTP SERVER ---
  +     | 
  +     | #   server communication on TCP socket (address:port)
  +     | #acl               127.0.0.1/32
  +     | #bind              127.0.0.1:24
  +     | 
  +     | #   server communication on Unix domain socket (path:permissions)
  +     | bind               "@l_prefix@/var/lmtp2nntp/lmtp2nntp.socket:660"
  +     | 
  +     | #   server communication on stdin/stdout (remove DAEMON section above)
  +     | #bind              -
  +     | 
  +     | #   server communication limits
  +     | timeoutlmtp        0
  +     | timeoutlmtpaccept  0
  +     | timeoutlmtpread    10
  +     | timeoutlmtpwrite   10
  +     | size               8388608
  +     | 
  +     | #   ---- NNTP CLIENT ----
  +     | 
  +     | #   client communication via TCP socket
  +     | #client            127.0.0.1
  +     | destination        127.0.0.1:nntp
  +     | 
  +     | #   client communication limits
  +     | timeoutnntp        30
  +     | timeoutnntpconnect 60
  +     | timeoutnntpread    60
  +     | timeoutnntpwrite   60
  +     | operationmode      post
  +     | 
  +     | #   ---- GATEWAY OPERATION ----
  +     | 
  +     | #   processing mode
  +     | groupmode          envelope
  +     | mailfrom           ".*"
  +     | nodename           "gateway"
  +     | restrictheader     "Cc: j\.doe@example\.org"
  +     | newsgroup          "local.test"
  +     | 
  +     | #   remove headers (using empty value)
  +     | headerrule         '500:^(-EF|Path|Received|To|Cc|Bcc|):$1:'
  +     | 
  +     | #   merge values from duplicate headers and separte them with "comma space"
  +     | headerrule         '510:^(Reply-To):$1:[${msg.header.${1}[#]}${msg.header.${1}[#+1]:+, }]'
  +     | 
  +     | #   replace empty Subject with text "None"
  +     | headerrule         '520::Subject:${msg.header.Subject:-None}'
  +     | 
  +     | #   create Message-ID if omitted or illegal (no or more than one '@')
  +     | headerrule         '530::Message-ID:${msg.header.Message-ID:-@@:s/^.*@.*@.*$//:%createmessageid}'
  +     | 
  +     | #   append a header
  +     | headerrule         '540::Path:lmtp2nntp!not-for-mail'
  +     | 
  +     | #   append a header
  +     | headerrule         '610::X-Gateway:lmtp2nntp'
  +     | headerrule         '620::Approved:gateway@example.com'
  +     | 
  +     | #   ---- LOGGING ----
  +     | 
  +     | #   normal operation
  +     | l2spec             'info:  prefix(prefix="%b %d %H:%M:%S <%L> lmtp2nntp[%P]: ", timezone=local) \
  +     |                         -> buffer(size=65536) \
  +     |                         -> file(path="@l_prefix@/var/lmtp2nntp/lmtp2nntp.log", append=1, perm=0640)'
  +     | 
  +     | #   normal and debug operation
  +     | #l2spec            'noop -> { \
  +     |                     info:  prefix(prefix="%b %d %H:%M:%S <%L> lmtp2nntp[%P]: ", timezone=local) \
  +     |                         -> buffer(size=65536) \
  +     |                         -> file(path="@l_prefix@/var/lmtp2nntp/lmtp2nntp.log", append=1, perm=0640); \
  +     |                     debug: prefix(prefix="%b %d %H:%M:%S <%L> lmtp2nntp[%P]: ", timezone=local) \
  +     |                         -> file(path="@l_prefix@/var/lmtp2nntp/lmtp2nntp.debug", append=0, perm=0640) }'
  +     | 
  +     | #   raw debug operation only
  +     | #l2spec            'debug: fd(fd=2)'
  @@ .
  rm -f ossp-pkg/lmtp2nntp/example.conf <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/example.conf
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .

From ossp-cvs-owner@ossp.org  Wed Feb  5 17:29:07 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 23F78768D1; Wed,  5 Feb 2003 17:29:07 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ sio_bio.c
Message-Id: <20030205162907.23F78768D1@mail.ossp.org>
Date: Wed,  5 Feb 2003 17:29:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   05-Feb-2003 17:29:06
  Branch: HEAD                             Handle: 2003020516290500

  Modified files:
    ossp-pkg/sio            sio_bio.c

  Log:
    make default no-sink operation

  Summary:
    Revision    Changes     Path
    1.11        +1  -1      ossp-pkg/sio/sio_bio.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_bio.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 sio_bio.c
  --- ossp-pkg/sio/sio_bio.c	20 Jan 2003 15:34:13 -0000	1.10
  +++ ossp-pkg/sio/sio_bio.c	5 Feb 2003 16:29:05 -0000	1.11
  @@ -232,7 +232,7 @@
   
       my->bio           = NULL;
       my->nbio          = NULL;
  -    my->issink        = 1;
  +    my->issink        = 0;
       my->freebio       = 0;
       my->eof           = '\0';
       my->error         = '\0';
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  6 11:20:05 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D076176A06; Thu,  6 Feb 2003 11:20:04 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_main.c
Message-Id: <20030206102004.D076176A06@mail.ossp.org>
Date: Thu,  6 Feb 2003 11:20:04 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   06-Feb-2003 11:20:04
  Branch: HEAD                             Handle: 2003020610200300

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_main.c

  Log:
    typo

  Summary:
    Revision    Changes     Path
    1.64        +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================================
  $ cvs diff -u -r1.63 -r1.64 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	3 Feb 2003 15:26:03 -0000	1.63
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	6 Feb 2003 10:20:03 -0000	1.64
  @@ -352,7 +352,7 @@
       FILE         *fd;
       lmtp2nntp_option_t *o;
   
  -    /* drop effective uid/gid priviledges */
  +    /* drop effective uid/gid privileges */
       seteuid(getuid());
       setegid(getgid());
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  6 11:51:41 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EE9EE76A06; Thu,  6 Feb 2003 11:51:40 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_config.c
Message-Id: <20030206105140.EE9EE76A06@mail.ossp.org>
Date: Thu,  6 Feb 2003 11:51:40 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   06-Feb-2003 11:51:40
  Branch: HEAD                             Handle: 2003020610514000

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c

  Log:
    defeat double free(3)

  Summary:
    Revision    Changes     Path
    1.91        +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================================
  $ cvs diff -u -r1.90 -r1.91 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	30 Jan 2003 19:45:20 -0000	1.90
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	6 Feb 2003 10:51:40 -0000	1.91
  @@ -254,7 +254,7 @@
           logbook(ctx->l2, L2_LEVEL_TRACE, "--pidfile = \"%s\"", ov->data.s);
   
           if (ov->ndata == 1)
  -            ctx->option_pidfile = ov->data.s;
  +            ctx->option_pidfile = strdupex(ov->data.s);
       }
       catch (ex)
           rethrow;
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  6 11:59:19 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F0C7876A06; Thu,  6 Feb 2003 11:59:18 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ sio.c
Message-Id: <20030206105918.F0C7876A06@mail.ossp.org>
Date: Thu,  6 Feb 2003 11:59:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   06-Feb-2003 11:59:18
  Branch: HEAD                             Handle: 2003020610591800

  Modified files:
    ossp-pkg/sio            sio.c

  Log:
    clear actual result

  Summary:
    Revision    Changes     Path
    1.24        +2  -0      ossp-pkg/sio/sio.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio.c
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 sio.c
  --- ossp-pkg/sio/sio.c	30 Jan 2003 14:24:53 -0000	1.23
  +++ ossp-pkg/sio/sio.c	6 Feb 2003 10:59:18 -0000	1.24
  @@ -685,6 +685,8 @@
       sio_rc_t rc;
       al_t *al;
   
  +    *actualp = 0;
  +
       if (n == 0)
           return SIO_OK;
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  6 13:45:20 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 855E376A1F; Thu,  6 Feb 2003 13:45:19 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ sio_bio.c
Message-Id: <20030206124519.855E376A1F@mail.ossp.org>
Date: Thu,  6 Feb 2003 13:45:19 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   06-Feb-2003 13:45:19
  Branch: HEAD                             Handle: 2003020612451800

  Modified files:
    ossp-pkg/sio            sio_bio.c

  Log:
    better working eof handling
    read deadlock solved
    default input buffer size
    comments

  Summary:
    Revision    Changes     Path
    1.12        +31 -19     ossp-pkg/sio/sio_bio.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_bio.c
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 sio_bio.c
  --- ossp-pkg/sio/sio_bio.c	5 Feb 2003 16:29:05 -0000	1.11
  +++ ossp-pkg/sio/sio_bio.c	6 Feb 2003 12:45:18 -0000	1.12
  @@ -231,9 +231,10 @@
           return SIO_ERR_MEM;
   
       my->bio           = NULL;
  -    my->nbio          = NULL;
  +    my->inputsize     = 512;
       my->issink        = 0;
       my->freebio       = 0;
  +    my->nbio          = NULL;
       my->eof           = '\0';
       my->error         = '\0';
   
  @@ -420,35 +421,43 @@
   static
   sio_rc_t siobio_input_upper(private_t *my, al_t *al)
   {
  +    size_t n;
  +    
  +    /* copy global al into input buffer */
  +    n = al_bytes(al);
  +    al_splice(al, 0, n, NULL, my->al_in);
  +
       /* flush output */
       if (my->flush_upper)
           return SIO_SCHED_CROSS;
   
  -    if (al_bytes(al) <= 0)
  +    /* transport data to lower layers */
  +    if (al_bytes(my->al_in) <= 0)
           return SIO_SCHED_UP;
   
  -    al_splice(al, 0, al_bytes(al), NULL, my->al_in);
  -
       if (!my->isoutput) {
           my->state = LOWER;
           return SIO_SCHED_LOOP;
       }
  -
       return SIO_SCHED_CROSS;
   }
   
   static
   sio_rc_t siobio_output_upper(private_t *my, al_t *al)
   {
  -    /* flush output */
  -    if (my->flush_upper) {
  -        my->flush_upper = 0;
  -        al_splice(al, al_bytes(al), 0, my->al_out, NULL);
  +    /* copy output buffer to global al */
  +    my->flush_upper = 0;
  +    al_splice(al, al_bytes(al), 0, my->al_out, NULL);
  +
  +    /* transport data to upper layers */
  +    if (al_bytes(al) > 0)
           return SIO_SCHED_UP;
  -    }
   
  +    /* lower layers signalled they need input */
       if (my->needs_input) {
           my->needs_input = 0;
  +        /* place input buffer on global al so input routines
  +         * can pick it from there again */
           al_splice(al, 0, al_bytes(al), my->al_in, NULL);
           return SIO_SCHED_CROSS;
       }
  @@ -457,7 +466,6 @@
           my->state = LOWER;
           return SIO_SCHED_LOOP;
       }
  -
       return SIO_SCHED_CROSS;
   }
   
  @@ -493,7 +501,7 @@
   void siobio_bio_read(private_t *my)
   {
       char *p;
  -    int n;
  +    int n, m;
   
       n = BIO_pending(my->bio);
       if (n <= 0 || (size_t)n > my->inputsize)
  @@ -503,21 +511,25 @@
   
       if (my->bio) {
           do {
  -            n = BIO_read(my->bio, p, n);
  -        } while (n <= 0 && BIO_should_retry(my->bio));
  +            m = BIO_read(my->bio, p, n);
  +        } while (m <= 0 && BIO_should_retry(my->bio));
  +        if (m == -1 && !my->eof_reached) {
  +            my->flush_upper = 1;
  +            m = 0;
  +        }
       } else
  -        n = -2;
  +        m = -2;
   
  -    if (n < 0) {
  +    if (m < 0) {
           free(p);
  -        if (n < -1)
  +        if (m < -1)
               al_append_bytes(my->in_buf, &my->error,
                               sizeof(my->error), my->error_label);
           else
               al_append_bytes(my->in_buf, &my->eof,
                               sizeof(my->eof), my->eof_label);
  -    } else if (n > 0)
  -        al_attach_buffer(my->in_buf, p, n, my->data_label, freebiobuf, NULL);
  +    } else if (m > 0)
  +        al_attach_buffer(my->in_buf, p, m, my->data_label, freebiobuf, NULL);
   }
   
   static
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  6 13:49:18 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6962876A06; Thu,  6 Feb 2003 13:49:17 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ sio_test.c
Message-Id: <20030206124917.6962876A06@mail.ossp.org>
Date: Thu,  6 Feb 2003 13:49:17 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   06-Feb-2003 13:49:17
  Branch: HEAD                             Handle: 2003020612491600

  Modified files:
    ossp-pkg/sio            sio_test.c

  Log:
    add BIO(_ssl) test case

  Summary:
    Revision    Changes     Path
    1.15        +527 -711   ossp-pkg/sio/sio_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_test.c
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 sio_test.c
  --- ossp-pkg/sio/sio_test.c	4 Feb 2003 15:07:21 -0000	1.14
  +++ ossp-pkg/sio/sio_test.c	6 Feb 2003 12:49:16 -0000	1.15
  @@ -38,6 +38,7 @@
   #include <fcntl.h>
   #include <errno.h>
   #include <unistd.h>
  +#include <signal.h>
   
   #include <sys/types.h>
   #include <sys/wait.h>
  @@ -76,15 +77,15 @@
           ts_test_fail(TS_CTX, "%s -> %d[%s] (expected %d[%s])\n", \
               name, rc, errf(rc), rc0, errf(rc0))
   
  -#define EVAL0(name,block) EVAL(name,rc,SIO_OK,block,sio_error)
  -#define EVALS(name,block) EVAL(name,rc,SA_OK,block,sa_error)
  +#define EVAL0(X) EVAL(#X,rc,SIO_OK,{ rc = X; },sio_error)
  +#define EVALS(X) EVAL(#X,rc,SA_OK,{ rc = X; },sa_error)
   
   static sio_rc_t sreadloop(sio_t *, char *, size_t, size_t *);
   static int test_sio_pipe_read(ts_test_t *, int, int);
   static int test_sio_pipe_write(ts_test_t *, int, int);
   
  -static int test_sio_hello_client(ts_test_t *, int);
  -static int test_sio_hello_server(ts_test_t *, int);
  +static int test_sio_hello_client(ts_test_t *, int, int);
  +static int test_sio_hello_server(ts_test_t *, int, int);
   
   sio_rc_t sreadloop(sio_t *sio, char *buf, size_t len, size_t *actualp)
   {
  @@ -95,6 +96,8 @@
           rc = sio_read(sio, buf, len, &actual);
           if (rc != SIO_OK)
               break;
  +        if (actual == 0)
  +            break;
           buf   += actual;
           total += actual;
           len   -= actual;
  @@ -105,6 +108,57 @@
       return rc;
   }
   
  +typedef int (*func)(ts_test_t *, int, int);
  +void session(ts_test_t *_t, func client, func server, int duplex)
  +{
  +    pid_t child;
  +    int pd[2];
  +    int wcount = 147;
  +    int status;
  +
  +    fflush(stdout);
  +    fflush(stderr);
  +
  +    if (duplex) {
  +        if (socketpair(AF_UNIX, SOCK_STREAM, 0, pd) == -1) {
  +            ts_test_fail(TS_CTX, "cannot create socketpair (%s)\n",
  +                strerror(errno));
  +        }
  +    } else {
  +        if (pipe(pd) == -1) {
  +            ts_test_fail(TS_CTX, "cannot create pipe (%s)\n",
  +                strerror(errno));
  +        }
  +    }
  +
  +    child = fork();
  +    if (child == -1) {
  +        ts_test_fail(TS_CTX, "cannot fork (%s)\n",
  +            strerror(errno));
  +        return;
  +    }
  +
  +    if (child == 0) {
  +        int result;
  +
  +        sleep(1);
  +
  +        close(pd[1]);
  +        result = (*server)(NULL, pd[0], wcount);
  +        close(pd[0]);
  +        exit(result ? 1 : 0);
  +    } else {
  +        close(pd[0]);
  +        (*client)(_t, pd[1], wcount);
  +        close(pd[1]);
  +        waitpid(child, &status, 0);
  +        if (status != 0) {
  +            ts_test_fail(TS_CTX, "child returned status %08lx\n",
  +                status);
  +        }
  +    }
  +}
  +
   TS_TEST(test_sio_buffer)
   {
       sio_rc_t rc;
  @@ -115,37 +169,23 @@
       char S[] = "Hello world\n";
       size_t actual, len = strlen(S);
   
  -    EVAL0("sio_create", {
  -        rc = sio_create(&sio);
  -    });
  +    EVAL0(sio_create(&sio));
       if (rc != SIO_OK) return;
  -    EVAL0("sio_create_stage(&sios_hole)", {
  -        rc = sio_create_stage(sio, &sio_module_hole, &sios_hole);
  -    });
  +    EVAL0(sio_create_stage(sio, &sio_module_hole, &sios_hole));
       if (rc != SIO_OK) return;
  -    EVAL0("sio_create_stage(&sios_buffer)", {
  -        rc = sio_create_stage(sio, &sio_module_buffer, &sios_buffer);
  -    });
  +    EVAL0(sio_create_stage(sio, &sio_module_buffer, &sios_buffer));
       if (rc != SIO_OK) return;
   
  -    EVAL0("sio_configure_stage(sios_buffer, outputsize)", {
  -        rc = sio_configure_stage(sio, sios_buffer, "outputsize", &bufsize);
  -    });
  +    EVAL0(sio_configure_stage(sio, sios_buffer, "outputsize", &bufsize));
       if (rc != SIO_OK) return;
   
  -    EVAL0("sio_attach(sios_hole)", {
  -        rc = sio_attach(sio, sios_hole, SIO_MODE_WRITE);
  -    });
  +    EVAL0(sio_attach(sio, sios_hole, SIO_MODE_WRITE));
       if (rc != SIO_OK) return;
  -    EVAL0("sio_attach(sios_buffer)", {
  -        rc = sio_attach(sio, sios_buffer, SIO_MODE_WRITE);
  -    });
  +    EVAL0(sio_attach(sio, sios_buffer, SIO_MODE_WRITE));
       if (rc != SIO_OK) return;
   
       for (i=0; i<wcount; ++i) {
  -        EVAL0("sio_write", {
  -            rc = sio_write(sio, S, len, &actual);
  -        });
  +        EVAL0(sio_write(sio, S, len, &actual));
           if (rc != SIO_OK) break;
           if (actual != len) {
               ts_test_fail(TS_CTX, "sio_write result %d (expected %d)\n",
  @@ -154,22 +194,11 @@
           }
       }
   
  -    EVAL0("sio_detach(sios_hole)", {
  -        rc = sio_detach(sio, sios_hole);
  -    });
  -    EVAL0("sio_detach(sios_buffer)", {
  -        rc = sio_detach(sio, sios_buffer);
  -    });
  -
  -    EVAL0("sio_destroy_stage", {
  -        rc = sio_destroy_stage(sio, sios_buffer);
  -    });
  -    EVAL0("sio_destroy_stage(sios_hole)", {
  -        rc = sio_destroy_stage(sio, sios_hole);
  -    });
  -    EVAL0("sio_destroy", {
  -        rc = sio_destroy(sio);
  -    });
  +    EVAL0(sio_detach(sio, sios_hole));
  +    EVAL0(sio_detach(sio, sios_buffer));
  +    EVAL0(sio_destroy_stage(sio, sios_buffer));
  +    EVAL0(sio_destroy_stage(sio, sios_hole));
  +    EVAL0(sio_destroy(sio));
   }
   
   TS_TEST(test_sio_fd)
  @@ -187,30 +216,17 @@
       char tempfile[] = "./sio_test_tmpfile.XXXXXX";
       int do_unlink = 0;
   
  -    EVAL0("sio_create", {
  -        rc = sio_create(&sio);
  -    });
  -    if (rc != SIO_OK) return;
  -    EVAL0("sio_create_stage(&sios_fd)", {
  -        rc = sio_create_stage(sio, &sio_module_fd, &sios_fd);
  -    });
  -    if (rc != SIO_OK) return;
  -    EVAL0("sio_create_stage(&sios_buffer)", {
  -        rc = sio_create_stage(sio, &sio_module_buffer, &sios_buffer);
  -    });
  -    if (rc != SIO_OK) return;
  -
  -    EVAL0("sio_configure_stage(sios_fd, buflen)", {
  -        rc = sio_configure_stage(sio, sios_fd, "buflen", &buflen);
  -    });
  -    if (rc != SIO_OK) return;
  -    EVAL0("sio_configure_stage(sios_buffer)", {
  -        rc = sio_configure_stage(sio, sios_buffer, "outputsize", &bufsize);
  -    });
  -    if (rc != SIO_OK) return;
  -    EVAL0("sio_configure_stage(sios_buffer, inputsize)", {
  -        rc = sio_configure_stage(sio, sios_buffer, "inputsize", &bufsize);
  -    });
  +    EVAL0(sio_create(&sio));
  +    if (rc != SIO_OK) return;
  +    EVAL0(sio_create_stage(sio, &sio_module_fd, &sios_fd));
  +    if (rc != SIO_OK) return;
  +    EVAL0(sio_create_stage(sio, &sio_module_buffer, &sios_buffer));
  +    if (rc != SIO_OK) return;
  +    EVAL0(sio_configure_stage(sio, sios_fd, "buflen", &buflen));
  +    if (rc != SIO_OK) return;
  +    EVAL0(sio_configure_stage(sio, sios_buffer, "outputsize", &bufsize));
  +    if (rc != SIO_OK) return;
  +    EVAL0(sio_configure_stage(sio, sios_buffer, "inputsize", &bufsize));
       if (rc != SIO_OK) return;
   
       /*
  @@ -224,23 +240,15 @@
               tempfile, strerror(errno));
       } else {
           do_unlink = 1;
  -        EVAL0("sio_configure_stage(sios_fd, fd)", {
  -            rc = sio_configure_stage(sio, sios_fd, "fd", &fd);
  -        });
  +        EVAL0(sio_configure_stage(sio, sios_fd, "fd", &fd));
           if (rc != SIO_OK) goto badwrite;
  -        EVAL0("sio_attach(sios_fd)", {
  -            rc = sio_attach(sio, sios_fd, SIO_MODE_READWRITE);
  -        });
  +        EVAL0(sio_attach(sio, sios_fd, SIO_MODE_READWRITE));
           if (rc != SIO_OK) goto badwrite;
  -        EVAL0("sio_attach(sios_buffer)", {
  -            rc = sio_attach(sio, sios_buffer, SIO_MODE_READWRITE);
  -        });
  +        EVAL0(sio_attach(sio, sios_buffer, SIO_MODE_READWRITE));
           if (rc != SIO_OK) goto badwrite2;
   
           for (i=0; i<wcount; ++i) {
  -            EVAL0("sio_write", {
  -                rc = sio_write(sio, S, len, &actual);
  -            });
  +            EVAL0(sio_write(sio, S, len, &actual));
               if (rc != SIO_OK) break;
               if (actual != len) {
                   ts_test_fail(TS_CTX, "sio_write result %d (expected %d)\n",
  @@ -249,18 +257,11 @@
               }
           }
   
  -        EVAL0("sio_push", {
  -            rc = sio_push(sio);
  -        });
  -
  -        EVAL0("sio_detach(sios_buffer)", {
  -            rc = sio_detach(sio, sios_buffer);
  -        });
  +        EVAL0(sio_push(sio));
  +        EVAL0(sio_detach(sio, sios_buffer));
   
           badwrite2:
  -        EVAL0("sio_detach(sios_fd)", {
  -            rc = sio_detach(sio, sios_fd);
  -        });
  +        EVAL0(sio_detach(sio, sios_fd));
   
           badwrite:
           close(fd);
  @@ -271,24 +272,15 @@
           ts_test_fail(TS_CTX, "cannot read temporary file \"%s\" (%s)\n",
               tempfile, strerror(errno));
       } else {
  -        EVAL0("sio_configure_stage(sios_fd, fd)", {
  -            rc = sio_configure_stage(sio, sios_fd, "fd", &fd);
  -        });
  +        EVAL0(sio_configure_stage(sio, sios_fd, "fd", &fd));
           if (rc != SIO_OK) goto badread;
  -
  -        EVAL0("sio_attach(sios_fd)", {
  -            rc = sio_attach(sio, sios_fd, SIO_MODE_READWRITE);
  -        });
  +        EVAL0(sio_attach(sio, sios_fd, SIO_MODE_READWRITE));
           if (rc != SIO_OK) goto badread;
  -        EVAL0("sio_attach(sios_buffer)", {
  -            rc = sio_attach(sio, sios_buffer, SIO_MODE_READWRITE);
  -        });
  +        EVAL0(sio_attach(sio, sios_buffer, SIO_MODE_READWRITE));
           if (rc != SIO_OK) goto badread2;
   
           for (i=0; i<wcount; ++i) {
  -            EVAL0("sio_read", {
  -                rc = sreadloop(sio, buf, len, &actual);
  -            });
  +            EVAL0(sreadloop(sio, buf, len, &actual));
               if (rc != SIO_OK) break;
               if (actual != len) {
                   ts_test_fail(TS_CTX, "sio_read result %d (expected %d)\n",
  @@ -303,14 +295,10 @@
               }
           }
   
  -        EVAL0("sio_detach(sios_buffer)", {
  -            rc = sio_detach(sio, sios_buffer);
  -        });
  +        EVAL0(sio_detach(sio, sios_buffer));
   
           badread2:
  -        EVAL0("sio_detach(sios_fd)", {
  -            rc = sio_detach(sio, sios_fd);
  -        });
  +        EVAL0(sio_detach(sio, sios_fd));
   
           badread:
           close(fd);
  @@ -325,15 +313,9 @@
        * common cleanup
        */
   
  -    EVAL0("sio_destroy_stage", {
  -        rc = sio_destroy_stage(sio, sios_buffer);
  -    });
  -    EVAL0("sio_destroy_stage(sios_fd)", {
  -        rc = sio_destroy_stage(sio, sios_fd);
  -    });
  -    EVAL0("sio_destroy", {
  -        rc = sio_destroy(sio);
  -    });
  +    EVAL0(sio_destroy_stage(sio, sios_buffer));
  +    EVAL0(sio_destroy_stage(sio, sios_fd));
  +    EVAL0(rc = sio_destroy(sio));
   }
   
   static
  @@ -350,92 +332,60 @@
       char buf[sizeof(S)];
       size_t actual, len = strlen(S);
   
  -    EVAL0("sio_create", {
  -        rc = sio_create(&sio);
  -    });
  +    EVAL0(sio_create(&sio));
       if (rc != SIO_OK) return -1;
  -    EVAL0("sio_create_stage(&sios_fd)", {
  -        rc = sio_create_stage(sio, &sio_module_fd, &sios_fd);
  -    });
  +    EVAL0(sio_create_stage(sio, &sio_module_fd, &sios_fd));
       if (rc != SIO_OK) return -1;
  -    EVAL0("sio_create_stage(&sios_buffer)", {
  -        rc = sio_create_stage(sio, &sio_module_buffer, &sios_buffer);
  -    });
  +    EVAL0(sio_create_stage(sio, &sio_module_buffer, &sios_buffer));
       if (rc != SIO_OK) return -1;
  -
  -    EVAL0("sio_configure_stage(sios_fd, buflen)", {
  -        rc = sio_configure_stage(sio, sios_fd, "buflen", &buflen);
  -    });
  +    EVAL0(sio_configure_stage(sio, sios_fd, "buflen", &buflen));
       if (rc != SIO_OK) return -1;
  -    EVAL0("sio_configure_stage(sios_buffer)", {
  -        rc = sio_configure_stage(sio, sios_buffer, "outputsize", &buflen);
  -    });
  +    EVAL0(sio_configure_stage(sio, sios_buffer, "outputsize", &bufsize));
       if (rc != SIO_OK) return -1;
  -    EVAL0("sio_configure_stage(sios_buffer, inputsize)", {
  -        rc = sio_configure_stage(sio, sios_buffer, "inputsize", &bufsize);
  -    });
  +    EVAL0(sio_configure_stage(sio, sios_buffer, "inputsize", &bufsize));
       if (rc != SIO_OK) return -1;
  -
  -    EVAL0("sio_configure_stage(sios_fd, fd)", {
  -        rc = sio_configure_stage(sio, sios_fd, "fd", &fd);
  -    });
  +    EVAL0(sio_configure_stage(sio, sios_fd, "fd", &fd));
       if (rc != SIO_OK) goto badread;
  -
  -    EVAL0("sio_attach(sios_fd)", {
  -        rc = sio_attach(sio, sios_fd, SIO_MODE_READWRITE);
  -    });
  +    EVAL0(sio_attach(sio, sios_fd, SIO_MODE_READWRITE));
       if (rc != SIO_OK) goto badread;
  -    EVAL0("sio_attach(sios_buffer)", {
  -        rc = sio_attach(sio, sios_buffer, SIO_MODE_READWRITE);
  -    });
  +    EVAL0(sio_attach(sio, sios_buffer, SIO_MODE_READWRITE));
       if (rc != SIO_OK) goto badread2;
   
       for (i=0; i<wcount; ++i) {
  -        EVAL0("sio_read", {
  -            rc = sreadloop(sio, buf, len, &actual);
  -        });
  -        if (rc != SIO_OK) error = 1;
  -        if (rc != SIO_OK) break;
  +        EVAL0(sreadloop(sio, buf, len, &actual));
  +        if (rc != SIO_OK) {
  +            error = 1;
  +            break;
  +        }
           if (actual != len) {
               ts_test_fail(TS_CTX, "sio_read result %d (expected %d)\n",
                   (int)actual, (int)len);
  +            error = 1;
               break;
           }
           buf[actual] = '\0';
           if (strcmp(buf, S)) {
               ts_test_fail(TS_CTX, "sio_read data mismatch at loop %d\n",
                   i);
  +            error = 1;
               break;
           }
       }
   
  -    EVAL0("sio_detach(sios_buffer)", {
  -        rc = sio_detach(sio, sios_buffer);
  -    });
  +    EVAL0(sio_detach(sio, sios_buffer));
       if (rc != SIO_OK) error = 1;
  -
       result = error;
   
       badread2:
  -
  -    EVAL0("sio_detach(sios_fd)", {
  -        rc = sio_detach(sio, sios_fd);
  -    });
  +    EVAL0(sio_detach(sio, sios_fd));
       if (rc != SIO_OK) result = -1;
   
       badread:
  -
  -    EVAL0("sio_destroy_stage", {
  -        rc = sio_destroy_stage(sio, sios_buffer);
  -    });
  -    if (rc != SIO_OK) result = -1;
  -    EVAL0("sio_destroy_stage(sios_fd)", {
  -        rc = sio_destroy_stage(sio, sios_fd);
  -    });
  -    if (rc != SIO_OK) result = -1;
  -    EVAL0("sio_destroy", {
  -        rc = sio_destroy(sio);
  -    });
  +    EVAL0(sio_destroy_stage(sio, sios_buffer));
  +    if (rc != SIO_OK) result = -1;
  +    EVAL0(sio_destroy_stage(sio, sios_fd));
  +    if (rc != SIO_OK) result = -1;
  +    EVAL0(sio_destroy(sio));
       if (rc != SIO_OK) result = -1;
   
       return result;
  @@ -454,97 +404,61 @@
       char S[] = "Hello world\n";
       size_t actual, len = strlen(S);
   
  -    EVAL0("sio_create", {
  -        rc = sio_create(&sio);
  -    });
  -    if (rc != SIO_OK) return -1;
  -    EVAL0("sio_create_stage(&sios_fd)", {
  -        rc = sio_create_stage(sio, &sio_module_fd, &sios_fd);
  -    });
  -    if (rc != SIO_OK) return -1;
  -    EVAL0("sio_create_stage(&sios_buffer)", {
  -        rc = sio_create_stage(sio, &sio_module_buffer, &sios_buffer);
  -    });
  -    if (rc != SIO_OK) return -1;
  -
  -    EVAL0("sio_configure_stage(sios_fd, buflen)", {
  -        rc = sio_configure_stage(sio, sios_fd, "buflen", &buflen);
  -    });
  -    if (rc != SIO_OK) return -1;
  -    EVAL0("sio_configure_stage(sios_buffer)", {
  -        rc = sio_configure_stage(sio, sios_buffer, "outputsize", &buflen);
  -    });
  -    if (rc != SIO_OK) return -1;
  -    EVAL0("sio_configure_stage(sios_buffer, inputsize)", {
  -        rc = sio_configure_stage(sio, sios_buffer, "inputsize", &bufsize);
  -    });
  +    EVAL0(sio_create(&sio));
  +    if (rc != SIO_OK) return -1;
  +    EVAL0(sio_create_stage(sio, &sio_module_fd, &sios_fd));
  +    if (rc != SIO_OK) return -1;
  +    EVAL0(sio_create_stage(sio, &sio_module_buffer, &sios_buffer));
  +    if (rc != SIO_OK) return -1;
  +
  +    EVAL0(sio_configure_stage(sio, sios_fd, "buflen", &buflen));
  +    if (rc != SIO_OK) return -1;
  +    EVAL0(sio_configure_stage(sio, sios_buffer, "outputsize", &bufsize));
  +    if (rc != SIO_OK) return -1;
  +    EVAL0(sio_configure_stage(sio, sios_buffer, "inputsize", &bufsize));
       if (rc != SIO_OK) return -1;
   
       /*
        * WRITE phase
        */
   
  -    EVAL0("sio_configure_stage(sios_fd, fd)", {
  -        rc = sio_configure_stage(sio, sios_fd, "fd", &fd);
  -    });
  +    EVAL0(sio_configure_stage(sio, sios_fd, "fd", &fd));
       if (rc != SIO_OK) goto badwrite;
  -    EVAL0("sio_attach(sios_fd)", {
  -        rc = sio_attach(sio, sios_fd, SIO_MODE_READWRITE);
  -    });
  +    EVAL0(sio_attach(sio, sios_fd, SIO_MODE_READWRITE));
       if (rc != SIO_OK) goto badwrite;
  -    EVAL0("sio_attach(sios_buffer)", {
  -        rc = sio_attach(sio, sios_buffer, SIO_MODE_READWRITE);
  -    });
  +    EVAL0(sio_attach(sio, sios_buffer, SIO_MODE_READWRITE));
       if (rc != SIO_OK) goto badwrite2;
   
       for (i=0; i<wcount; ++i) {
  -        EVAL0("sio_write", {
  -            rc = sio_write(sio, S, len, &actual);
  -        });
  -        if (rc != SIO_OK) error = 1;
  -        if (rc != SIO_OK) break;
  +        EVAL0(sio_write(sio, S, len, &actual));
  +        if (rc != SIO_OK) {
  +            error = 1;
  +            break;
  +        } 
           if (actual != len) {
               ts_test_fail(TS_CTX, "sio_write result %d (expected %d)\n",
                   (int)actual, (int)len);
  +            error = 1;
               break;
           }
       }
   
  -    EVAL0("sio_push", {
  -        rc = sio_push(sio);
  -    });
  +    EVAL0(sio_push(sio));
       if (rc != SIO_OK) error = 1;
  -
  -    EVAL0("sio_detach(sios_buffer)", {
  -        rc = sio_detach(sio, sios_buffer);
  -    });
  +    EVAL0(sio_detach(sio, sios_buffer));
       if (rc != SIO_OK) error = 1;
  -
       result = error;
   
       badwrite2:
  -    EVAL0("sio_detach(sios_fd)", {
  -        rc = sio_detach(sio, sios_fd);
  -    });
  +    EVAL0(sio_detach(sio, sios_fd));
       if (rc != SIO_OK) result = -1;
   
       badwrite:
  -
  -    /*
  -     * common cleanup
  -     */
  -
  -    EVAL0("sio_destroy_stage", {
  -        rc = sio_destroy_stage(sio, sios_buffer);
  -    });
  -    if (rc != SIO_OK) result = -1;
  -    EVAL0("sio_destroy_stage(sios_fd)", {
  -        rc = sio_destroy_stage(sio, sios_fd);
  -    });
  -    if (rc != SIO_OK) result = -1;
  -    EVAL0("sio_destroy", {
  -        rc = sio_destroy(sio);
  -    });
  +    EVAL0(sio_destroy_stage(sio, sios_buffer));
  +    if (rc != SIO_OK) result = -1;
  +    EVAL0(sio_destroy_stage(sio, sios_fd));
  +    if (rc != SIO_OK) result = -1;
  +    EVAL0(sio_destroy(sio));
       if (rc != SIO_OK) result = -1;
   
       return result;
  @@ -552,44 +466,7 @@
   
   TS_TEST(test_sio_pipe)
   {
  -    pid_t child;
  -    int pd[2];
  -    int wcount = 147;
  -    int status;
  -
  -    fflush(stdout);
  -    fflush(stderr);
  -
  -    if (pipe(pd) == -1) {
  -        ts_test_fail(TS_CTX, "cannot create pipe (%s)\n",
  -            strerror(errno));
  -    }
  -
  -    child = fork();
  -    if (child == -1) {
  -        ts_test_fail(TS_CTX, "cannot fork (%s)\n",
  -            strerror(errno));
  -    }
  -
  -    if (child == 0) {
  -        int result;
  -
  -        sleep(1);
  -
  -        close(pd[1]);
  -        result = test_sio_pipe_write(NULL, pd[0], wcount);
  -        close(pd[0]);
  -        exit(result ? 1 : 0);
  -    } else {
  -        close(pd[0]);
  -        test_sio_pipe_read(_t, pd[1], wcount);
  -        close(pd[1]);
  -        waitpid(child, &status, 0);
  -        if (status != 0) {
  -            ts_test_fail(TS_CTX, "child returned status %08lx\n",
  -                status);
  -        }
  -    }
  +    session(_t, test_sio_pipe_read, test_sio_pipe_write, 0);
   }
   
   TS_TEST(test_sio_sio)
  @@ -642,89 +519,51 @@
       /*
        * create MUX stream
        */
  -    EVAL0("sio_create(&A_sio)", {
  -        rc = sio_create(&A_sio);
  -    });
  -    if (rc != SIO_OK) return;
  -    EVAL0("sio_create_stage(&A_sios_fd)", {
  -        rc = sio_create_stage(A_sio, &sio_module_fd, &A_sios_fd);
  -    });
  -    if (rc != SIO_OK) return;
  -    EVAL0("sio_configure_stage(A_sios_fd, fd)", {
  -        rc = sio_configure_stage(A_sio, A_sios_fd, "fd", &fd);
  -    });
  -    if (rc != SIO_OK) return;
  -    EVAL0("sio_configure_stage(A_sios_fd, buflen)", {
  -        rc = sio_configure_stage(A_sio, A_sios_fd, "buflen", &buflen);
  -    });
  -    if (rc != SIO_OK) return;
  -    EVAL0("sio_create_stage(&A_sios_sillymux)", {
  -        rc = sio_create_stage(A_sio, &sio_module_sillymux, &A_sios_sillymux);
  -    });
  -    if (rc != SIO_OK) return;
  -    EVAL0("sio_configure_stage(A_sios_sillymux, oddlabel)", {
  -        rc = sio_configure_stage(A_sio, A_sios_sillymux, "oddlabel", ODD);
  -    });
  -    if (rc != SIO_OK) return;
  -    EVAL0("sio_configure_stage(A_sios_sillymux, evenlabel)", {
  -        rc = sio_configure_stage(A_sio, A_sios_sillymux, "evenlabel", EVEN);
  -    });
  -    if (rc != SIO_OK) return;
  -    EVAL0("sio_attach(A_sios_fd)", {
  -        rc = sio_attach(A_sio, A_sios_fd, SIO_MODE_READWRITE);
  -    });
  -    if (rc != SIO_OK) return;
  -    EVAL0("sio_attach(A_sios_sillymux)", {
  -        rc = sio_attach(A_sio, A_sios_sillymux, SIO_MODE_READWRITE);
  -    });
  +    EVAL0(sio_create(&A_sio));
  +    if (rc != SIO_OK) return;
  +    EVAL0(sio_create_stage(A_sio, &sio_module_fd, &A_sios_fd));
  +    if (rc != SIO_OK) return;
  +    EVAL0(sio_configure_stage(A_sio, A_sios_fd, "fd", &fd));
  +    if (rc != SIO_OK) return;
  +    EVAL0(sio_configure_stage(A_sio, A_sios_fd, "buflen", &buflen));
  +    if (rc != SIO_OK) return;
  +    EVAL0(sio_create_stage(A_sio, &sio_module_sillymux, &A_sios_sillymux));
  +    if (rc != SIO_OK) return;
  +    EVAL0(sio_configure_stage(A_sio, A_sios_sillymux, "oddlabel", ODD));
  +    if (rc != SIO_OK) return;
  +    EVAL0(sio_configure_stage(A_sio, A_sios_sillymux, "evenlabel", EVEN));
  +    if (rc != SIO_OK) return;
  +    EVAL0(sio_attach(A_sio, A_sios_fd, SIO_MODE_READWRITE));
  +    if (rc != SIO_OK) return;
  +    EVAL0(sio_attach(A_sio, A_sios_sillymux, SIO_MODE_READWRITE));
       if (rc != SIO_OK) return;
   
       /*
        * create ODD stream
        */
  -    EVAL0("sio_create(&B_sio)", {
  -        rc = sio_create(&B_sio);
  -    });
  -    if (rc != SIO_OK) return;
  -    EVAL0("sio_create_stage(&B_sios_sio)", {
  -        rc = sio_create_stage(B_sio, &sio_module_sio, &B_sios_sio);
  -    });
  -    if (rc != SIO_OK) return;
  -    EVAL0("sio_configure_stage(B_sios_sio, upstream)", {
  -        rc = sio_configure_stage(B_sio, B_sios_sio, "upstream", A_sio);
  -    });
  -    if (rc != SIO_OK) return;
  -    EVAL0("sio_configure_stage(B_sios_sio, mydatalabel)", {
  -        rc = sio_configure_stage(B_sio, B_sios_sio, "mydatalabel", ODD);
  -    });
  -    if (rc != SIO_OK) return;
  -    EVAL0("sio_attach(B_sios_sio)", {
  -        rc = sio_attach(B_sio, B_sios_sio, SIO_MODE_READWRITE);
  -    });
  +    EVAL0(sio_create(&B_sio));
  +    if (rc != SIO_OK) return;
  +    EVAL0(sio_create_stage(B_sio, &sio_module_sio, &B_sios_sio));
  +    if (rc != SIO_OK) return;
  +    EVAL0(sio_configure_stage(B_sio, B_sios_sio, "upstream", A_sio));
  +    if (rc != SIO_OK) return;
  +    EVAL0(sio_configure_stage(B_sio, B_sios_sio, "mydatalabel", ODD));
  +    if (rc != SIO_OK) return;
  +    EVAL0(sio_attach(B_sio, B_sios_sio, SIO_MODE_READWRITE));
       if (rc != SIO_OK) return;
   
       /*
        * create EVEN stream
        */
  -    EVAL0("sio_create(&C_sio)", {
  -        rc = sio_create(&C_sio);
  -    });
  -    if (rc != SIO_OK) return;
  -    EVAL0("sio_create_stage(&C_sios_sio)", {
  -        rc = sio_create_stage(C_sio, &sio_module_sio, &C_sios_sio);
  -    });
  -    if (rc != SIO_OK) return;
  -    EVAL0("sio_configure_stage(C_sios_sio, upstream)", {
  -        rc = sio_configure_stage(C_sio, C_sios_sio, "upstream", A_sio);
  -    });
  -    if (rc != SIO_OK) return;
  -    EVAL0("sio_configure_stage(C_sios_sio, mydatalabel)", {
  -        rc = sio_configure_stage(C_sio, C_sios_sio, "mydatalabel", EVEN);
  -    });
  -    if (rc != SIO_OK) return;
  -    EVAL0("sio_attach(C_sios_sio)", {
  -        rc = sio_attach(C_sio, C_sios_sio, SIO_MODE_READWRITE);
  -    });
  +    EVAL0(sio_create(&C_sio));
  +    if (rc != SIO_OK) return;
  +    EVAL0(sio_create_stage(C_sio, &sio_module_sio, &C_sios_sio));
  +    if (rc != SIO_OK) return;
  +    EVAL0(sio_configure_stage(C_sio, C_sios_sio, "upstream", A_sio));
  +    if (rc != SIO_OK) return;
  +    EVAL0(sio_configure_stage(C_sio, C_sios_sio, "mydatalabel", EVEN));
  +    if (rc != SIO_OK) return;
  +    EVAL0(sio_attach(C_sio, C_sios_sio, SIO_MODE_READWRITE));
       if (rc != SIO_OK) return;
   
       /*
  @@ -746,13 +585,10 @@
           char buf[17], *p;
           int nstreams = 2;
   
  -        EVAL0("sio_read(B_sio)", {
  -            rc = sreadloop(B_sio, buf, sizeof(buf), &actual);
  -            if (rc == SIO_ERR_EOF) {
  -                --nstreams;
  -                rc = SIO_OK;
  -            }
  -        });
  +        EVAL0(
  +            ( (rc = sreadloop(B_sio, buf, sizeof(buf), &actual)),
  +              rc == SIO_ERR_EOF ? (--nstreams, SIO_OK) : rc )
  +        );
           if (rc != SIO_OK)
               break;
           p = buf;
  @@ -776,13 +612,10 @@
           if (actual > 0)
               break;
   
  -        EVAL0("sio_read(C_sio)", {
  -            rc = sreadloop(C_sio, buf, sizeof(buf), &actual);
  -            if (rc == SIO_ERR_EOF) {
  -                --nstreams;
  -                rc = SIO_OK;
  -            }
  -        });
  +        EVAL0(
  +            ( (rc = sreadloop(C_sio, buf, sizeof(buf), &actual)),
  +              rc == SIO_ERR_EOF ? (--nstreams, SIO_OK) : rc )
  +        );
           if (rc != SIO_OK)
               break;
           p = buf;
  @@ -821,47 +654,25 @@
       /*
        * destroy EVEN stream
        */
  -    EVAL0("sio_detach(C_sios_sio)", {
  -        rc = sio_detach(C_sio, C_sios_sio);
  -    });
  -    EVAL0("sio_destroy_stage(C_sios_sio)", {
  -        rc = sio_destroy_stage(C_sio, C_sios_sio);
  -    });
  -    EVAL0("sio_destroy(C_sio)", {
  -        rc = sio_destroy(C_sio);
  -    });
  +    EVAL0(sio_detach(C_sio, C_sios_sio));
  +    EVAL0(sio_destroy_stage(C_sio, C_sios_sio));
  +    EVAL0(rc = sio_destroy(C_sio));
   
       /*
        * destroy ODD stream
        */
  -    EVAL0("sio_detach(B_sios_sio)", {
  -        rc = sio_detach(B_sio, B_sios_sio);
  -    });
  -    EVAL0("sio_destroy_stage(B_sios_sio)", {
  -        rc = sio_destroy_stage(B_sio, B_sios_sio);
  -    });
  -    EVAL0("sio_destroy(B_sio)", {
  -        rc = sio_destroy(B_sio);
  -    });
  +    EVAL0(sio_detach(B_sio, B_sios_sio));
  +    EVAL0(sio_destroy_stage(B_sio, B_sios_sio));
  +    EVAL0(sio_destroy(B_sio));
   
       /*
        * destroy MUX stream
        */
  -    EVAL0("sio_detach(A_sios_sillymux)", {
  -        rc = sio_detach(A_sio, A_sios_sillymux);
  -    });
  -    EVAL0("sio_detach(A_sios_fd)", {
  -        rc = sio_detach(A_sio, A_sios_fd);
  -    });
  -    EVAL0("sio_destroy_stage(A_sios_sillymux)", {
  -        rc = sio_destroy_stage(A_sio, A_sios_sillymux);
  -    });
  -    EVAL0("sio_destroy_stage(A_sios_fd)", {
  -        rc = sio_destroy_stage(A_sio, A_sios_fd);
  -    });
  -    EVAL0("sio_destroy(A_sio)", {
  -        rc = sio_destroy(A_sio);
  -    });
  +    EVAL0(sio_detach(A_sio, A_sios_sillymux));
  +    EVAL0(sio_detach(A_sio, A_sios_fd));
  +    EVAL0(sio_destroy_stage(A_sio, A_sios_sillymux));
  +    EVAL0(sio_destroy_stage(A_sio, A_sios_fd));
  +    EVAL0(sio_destroy(A_sio));
   
   close_and_cleanup:
       close(fd);
  @@ -872,7 +683,7 @@
   }
   
   static
  -int test_sio_hello_client(ts_test_t *_t, int fd)
  +int test_sio_hello_client(ts_test_t *_t, int fd, int dummy)
   {
       FILE *f;
       char buf[81];
  @@ -929,7 +740,7 @@
   }
   
   static
  -int test_sio_hello_server(ts_test_t *_t, int fd)
  +int test_sio_hello_server(ts_test_t *_t, int fd, int dummy)
   {
       int error = 0, result = -1;
       sio_rc_t rc;
  @@ -939,57 +750,33 @@
       char S[] = "Welcome to the real world\r\n";
       size_t actual, len = strlen(S);
   
  -    EVAL0("sio_create", {
  -        rc = sio_create(&sio);
  -    });
  +    EVAL0(sio_create(&sio));
       if (rc != SIO_OK) return -1;
  -    EVAL0("sio_create_stage(&sios_fd)", {
  -        rc = sio_create_stage(sio, &sio_module_fd, &sios_fd);
  -    });
  +    EVAL0(sio_create_stage(sio, &sio_module_fd, &sios_fd));
       if (rc != SIO_OK) return -1;
  -    EVAL0("sio_create_stage(&sios_hello)", {
  -        rc = sio_create_stage(sio, &sio_module_hello, &sios_hello);
  -    });
  +    EVAL0(sio_create_stage(sio, &sio_module_hello, &sios_hello));
       if (rc != SIO_OK) return -1;
  -
  -    EVAL0("sio_configure_stage(sios_fd, buflen)", {
  -        rc = sio_configure_stage(sio, sios_fd, "buflen", &buflen);
  -    });
  +    EVAL0(sio_configure_stage(sio, sios_fd, "buflen", &buflen));
       if (rc != SIO_OK) return -1;
   
  -    EVAL0("sio_configure_stage(sios_fd, fd)", {
  -        rc = sio_configure_stage(sio, sios_fd, "fd", &fd);
  -    });
  +    EVAL0(sio_configure_stage(sio, sios_fd, "fd", &fd));
       if (rc != SIO_OK) goto badwrite;
  -    EVAL0("sio_attach(sios_fd)", {
  -        rc = sio_attach(sio, sios_fd, SIO_MODE_READWRITE);
  -    });
  +    EVAL0(sio_attach(sio, sios_fd, SIO_MODE_READWRITE));
       if (rc != SIO_OK) goto badwrite;
  -    EVAL0("sio_attach(sios_hello)", {
  -        rc = sio_attach(sio, sios_hello, SIO_MODE_READWRITE);
  -    });
  +    EVAL0(sio_attach(sio, sios_hello, SIO_MODE_READWRITE));
       if (rc != SIO_OK) goto badwrite2;
  +    EVAL0(sio_write(sio, S, len, &actual));
   
  -    EVAL0("sio_write", {
  -        rc = sio_write(sio, S, len, &actual);
  -    });
       if (rc != SIO_OK) error = 1;
  -    EVAL0("sio_push", {
  -        rc = sio_push(sio);
  -    });
  +    EVAL0(sio_push(sio));
       if (rc != SIO_OK) error = 1;
  -
  -    EVAL0("sio_detach(sios_hello)", {
  -        rc = sio_detach(sio, sios_hello);
  -    });
  +    EVAL0(sio_detach(sio, sios_hello));
       if (rc != SIO_OK) error = 1;
   
       result = error;
   
       badwrite2:
  -    EVAL0("sio_detach(sios_fd)", {
  -        rc = sio_detach(sio, sios_fd);
  -    });
  +    EVAL0(sio_detach(sio, sios_fd));
       if (rc != SIO_OK) result = -1;
   
       badwrite:
  @@ -998,17 +785,11 @@
        * common cleanup
        */
   
  -    EVAL0("sio_destroy_stage", {
  -        rc = sio_destroy_stage(sio, sios_hello);
  -    });
  -    if (rc != SIO_OK) result = -1;
  -    EVAL0("sio_destroy_stage(sios_fd)", {
  -        rc = sio_destroy_stage(sio, sios_fd);
  -    });
  -    if (rc != SIO_OK) result = -1;
  -    EVAL0("sio_destroy", {
  -        rc = sio_destroy(sio);
  -    });
  +    EVAL0(sio_destroy_stage(sio, sios_hello));
  +    if (rc != SIO_OK) result = -1;
  +    EVAL0(sio_destroy_stage(sio, sios_fd));
  +    if (rc != SIO_OK) result = -1;
  +    EVAL0(sio_destroy(sio));
       if (rc != SIO_OK) result = -1;
   
       return result;
  @@ -1016,46 +797,9 @@
   
   TS_TEST(test_sio_hello)
   {
  -    pid_t child;
  -    int pd[2];
  -    int status;
  -
  -    fflush(stdout);
  -    fflush(stderr);
  -
  -    if (socketpair(AF_UNIX, SOCK_STREAM, 0, pd) == -1) {
  -        ts_test_fail(TS_CTX, "cannot create pipe (%s)\n",
  -            strerror(errno));
  -    }
  -
  -    child = fork();
  -    if (child == -1) {
  -        ts_test_fail(TS_CTX, "cannot fork (%s)\n",
  -            strerror(errno));
  -    }
  -
  -    if (child == 0) {
  -        int result;
  -
  -        sleep(1);
  -
  -        close(pd[1]);
  -        result = test_sio_hello_client(NULL, pd[0]);
  -        close(pd[0]);
  -        exit(result ? 1 : 0);
  -    } else {
  -        close(pd[0]);
  -        test_sio_hello_server(_t, pd[1]);
  -        close(pd[1]);
  -        waitpid(child, &status, 0);
  -        if (status != 0) {
  -            ts_test_fail(TS_CTX, "child returned status %08lx\n",
  -                status);
  -        }
  -    }
  +    session(_t, test_sio_hello_server, test_sio_hello_client, 1);
   }
   
  -
   #if ENABLE_ZLIB
   TS_TEST(test_sio_zlib)
   {
  @@ -1074,38 +818,21 @@
       char tempfile[] = "./sio_test_tmpfile.XXXXXX";
       int do_unlink = 0;
   
  -    EVAL0("sio_create", {
  -        rc = sio_create(&sio);
  -    });
  -    if (rc != SIO_OK) return;
  -    EVAL0("sio_create_stage(&sios_fd)", {
  -        rc = sio_create_stage(sio, &sio_module_fd, &sios_fd);
  -    });
  -    if (rc != SIO_OK) return;
  -    EVAL0("sio_create_stage(&sios_zlib)", {
  -        rc = sio_create_stage(sio, &sio_module_zlib, &sios_zlib);
  -    });
  -    if (rc != SIO_OK) return;
  -
  -    EVAL0("sio_configure_stage(sios_fd, buflen)", {
  -        rc = sio_configure_stage(sio, sios_fd, "buflen", &buflen);
  -    });
  -    if (rc != SIO_OK) return;
  -    EVAL0("sio_configure_stage(sios_zlib)", {
  -        rc = sio_configure_stage(sio, sios_zlib, "outputsize", &bufsize);
  -    });
  -    if (rc != SIO_OK) return;
  -    EVAL0("sio_configure_stage(sios_zlib, inputsize)", {
  -        rc = sio_configure_stage(sio, sios_zlib, "inputsize", &bufsize);
  -    });
  -    if (rc != SIO_OK) return;
  -    EVAL0("sio_configure_stage(sios_zlib, outputlevel)", {
  -        rc = sio_configure_stage(sio, sios_zlib, "outputlevel", &zoutlevel);
  -    });
  -    if (rc != SIO_OK) return;
  -    EVAL0("sio_configure_stage(sios_zlib, inputlevel)", {
  -        rc = sio_configure_stage(sio, sios_zlib, "inputlevel", &zinlevel);
  -    });
  +    EVAL0(sio_create(&sio));
  +    if (rc != SIO_OK) return;
  +    EVAL0(sio_create_stage(sio, &sio_module_fd, &sios_fd));
  +    if (rc != SIO_OK) return;
  +    EVAL0(sio_create_stage(sio, &sio_module_zlib, &sios_zlib));
  +    if (rc != SIO_OK) return;
  +    EVAL0(sio_configure_stage(sio, sios_fd, "buflen", &buflen));
  +    if (rc != SIO_OK) return;
  +    EVAL0(sio_configure_stage(sio, sios_zlib, "outputsize", &bufsize));
  +    if (rc != SIO_OK) return;
  +    EVAL0(sio_configure_stage(sio, sios_zlib, "inputsize", &bufsize));
  +    if (rc != SIO_OK) return;
  +    EVAL0(sio_configure_stage(sio, sios_zlib, "outputlevel", &zoutlevel));
  +    if (rc != SIO_OK) return;
  +    EVAL0(sio_configure_stage(sio, sios_zlib, "inputlevel", &zinlevel));
       if (rc != SIO_OK) return;
   
       /*
  @@ -1119,23 +846,15 @@
               tempfile, strerror(errno));
       } else {
           do_unlink = 1;
  -        EVAL0("sio_configure_stage(sios_fd, fd)", {
  -            rc = sio_configure_stage(sio, sios_fd, "fd", &fd);
  -        });
  +        EVAL0(sio_configure_stage(sio, sios_fd, "fd", &fd));
           if (rc != SIO_OK) goto badwrite;
  -        EVAL0("sio_attach(sios_fd)", {
  -            rc = sio_attach(sio, sios_fd, SIO_MODE_READWRITE);
  -        });
  +        EVAL0(sio_attach(sio, sios_fd, SIO_MODE_READWRITE));
           if (rc != SIO_OK) goto badwrite;
  -        EVAL0("sio_attach(sios_zlib)", {
  -            rc = sio_attach(sio, sios_zlib, SIO_MODE_READWRITE);
  -        });
  +        EVAL0(sio_attach(sio, sios_zlib, SIO_MODE_READWRITE));
           if (rc != SIO_OK) goto badwrite2;
   
           for (i=0; i<wcount; ++i) {
  -            EVAL0("sio_write", {
  -                rc = sio_write(sio, S, len, &actual);
  -            });
  +            EVAL0(sio_write(sio, S, len, &actual));
               if (rc != SIO_OK) break;
               if (actual != len) {
                   ts_test_fail(TS_CTX, "sio_write result %d (expected %d)\n",
  @@ -1144,18 +863,11 @@
               }
           }
   
  -        EVAL0("sio_push", {
  -            rc = sio_push(sio);
  -        });
  -
  -        EVAL0("sio_detach(sios_zlib)", {
  -            rc = sio_detach(sio, sios_zlib);
  -        });
  +        EVAL0(sio_push(sio));
  +        EVAL0(sio_detach(sio, sios_zlib));
   
           badwrite2:
  -        EVAL0("sio_detach(sios_fd)", {
  -            rc = sio_detach(sio, sios_fd);
  -        });
  +        EVAL0(sio_detach(sio, sios_fd));
   
           badwrite:
           close(fd);
  @@ -1166,24 +878,15 @@
           ts_test_fail(TS_CTX, "cannot read temporary file \"%s\" (%s)\n",
               tempfile, strerror(errno));
       } else {
  -        EVAL0("sio_configure_stage(sios_fd, fd)", {
  -            rc = sio_configure_stage(sio, sios_fd, "fd", &fd);
  -        });
  +        EVAL0(sio_configure_stage(sio, sios_fd, "fd", &fd));
           if (rc != SIO_OK) goto badread;
  -
  -        EVAL0("sio_attach(sios_fd)", {
  -            rc = sio_attach(sio, sios_fd, SIO_MODE_READWRITE);
  -        });
  +        EVAL0(sio_attach(sio, sios_fd, SIO_MODE_READWRITE));
           if (rc != SIO_OK) goto badread;
  -        EVAL0("sio_attach(sios_zlib)", {
  -            rc = sio_attach(sio, sios_zlib, SIO_MODE_READWRITE);
  -        });
  +        EVAL0(sio_attach(sio, sios_zlib, SIO_MODE_READWRITE));
           if (rc != SIO_OK) goto badread2;
   
           for (i=0; i<wcount; ++i) {
  -            EVAL0("sio_read", {
  -                rc = sreadloop(sio, buf, len, &actual);
  -            });
  +            EVAL0(sreadloop(sio, buf, len, &actual));
               if (rc != SIO_OK) break;
               if (actual != len) {
                   ts_test_fail(TS_CTX, "sio_read result %d (expected %d)\n",
  @@ -1198,14 +901,10 @@
               }
           }
   
  -        EVAL0("sio_detach(sios_zlib)", {
  -            rc = sio_detach(sio, sios_zlib);
  -        });
  +        EVAL0(sio_detach(sio, sios_zlib));
   
           badread2:
  -        EVAL0("sio_detach(sios_fd)", {
  -            rc = sio_detach(sio, sios_fd);
  -        });
  +        EVAL0(sio_detach(sio, sios_fd));
   
           badread:
           close(fd);
  @@ -1220,15 +919,9 @@
        * common cleanup
        */
   
  -    EVAL0("sio_destroy_stage", {
  -        rc = sio_destroy_stage(sio, sios_zlib);
  -    });
  -    EVAL0("sio_destroy_stage(sios_fd)", {
  -        rc = sio_destroy_stage(sio, sios_fd);
  -    });
  -    EVAL0("sio_destroy", {
  -        rc = sio_destroy(sio);
  -    });
  +    EVAL0(sio_destroy_stage(sio, sios_zlib));
  +    EVAL0(sio_destroy_stage(sio, sios_fd));
  +    EVAL0(sio_destroy(sio));
   }
   #endif
   
  @@ -1247,92 +940,62 @@
       char buf[sizeof(S)];
       size_t actual, len = strlen(S);
   
  -    EVAL0("sio_create", {
  -        rc = sio_create(&sio);
  -    });
  +    EVAL0(sio_create(&sio));
       if (rc != SIO_OK) return -1;
  -    EVAL0("sio_create_stage(&sios_sa)", {
  -        rc = sio_create_stage(sio, &sio_module_sa, &sios_sa);
  -    });
  +    EVAL0(sio_create_stage(sio, &sio_module_sa, &sios_sa));
       if (rc != SIO_OK) return -1;
  -    EVAL0("sio_create_stage(&sios_buffer)", {
  -        rc = sio_create_stage(sio, &sio_module_buffer, &sios_buffer);
  -    });
  +    EVAL0(sio_create_stage(sio, &sio_module_buffer, &sios_buffer));
       if (rc != SIO_OK) return -1;
  -
  -    EVAL0("sio_configure_stage(sios_sa, buflen)", {
  -        rc = sio_configure_stage(sio, sios_sa, "buflen", &buflen);
  -    });
  +    EVAL0(sio_configure_stage(sio, sios_sa, "buflen", &buflen));
       if (rc != SIO_OK) return -1;
  -    EVAL0("sio_configure_stage(sios_buffer)", {
  -        rc = sio_configure_stage(sio, sios_buffer, "outputsize", &buflen);
  -    });
  +    EVAL0(sio_configure_stage(sio, sios_buffer, "outputsize", &bufsize));
       if (rc != SIO_OK) return -1;
  -    EVAL0("sio_configure_stage(sios_buffer, inputsize)", {
  -        rc = sio_configure_stage(sio, sios_buffer, "inputsize", &bufsize);
  -    });
  +    EVAL0(sio_configure_stage(sio, sios_buffer, "inputsize", &bufsize));
       if (rc != SIO_OK) return -1;
   
  -    EVAL0("sio_configure_stage(sios_sa, sa)", {
  -        rc = sio_configure_stage(sio, sios_sa, "sa", sa);
  -    });
  +    EVAL0(sio_configure_stage(sio, sios_sa, "sa", sa));
       if (rc != SIO_OK) goto badread;
  -
  -    EVAL0("sio_attach(sios_sa)", {
  -        rc = sio_attach(sio, sios_sa, SIO_MODE_READWRITE);
  -    });
  +    EVAL0(sio_attach(sio, sios_sa, SIO_MODE_READWRITE));
       if (rc != SIO_OK) goto badread;
  -    EVAL0("sio_attach(sios_buffer)", {
  -        rc = sio_attach(sio, sios_buffer, SIO_MODE_READWRITE);
  -    });
  +    EVAL0(sio_attach(sio, sios_buffer, SIO_MODE_READWRITE));
       if (rc != SIO_OK) goto badread2;
   
       for (i=0; i<wcount; ++i) {
  -        EVAL0("sio_read", {
  -            rc = sreadloop(sio, buf, len, &actual);
  -        });
  -        if (rc != SIO_OK) error = 1;
  -        if (rc != SIO_OK) break;
  +        EVAL0(sreadloop(sio, buf, len, &actual));
  +        if (rc != SIO_OK) {
  +            error = 1;
  +            break;
  +        }
           if (actual != len) {
               ts_test_fail(TS_CTX, "sio_read result %d (expected %d)\n",
                   (int)actual, (int)len);
  +            error = 1;
               break;
           }
           buf[actual] = '\0';
           if (strcmp(buf, S)) {
               ts_test_fail(TS_CTX, "sio_read data mismatch at loop %d\n",
                   i);
  +            error = 1;
               break;
           }
       }
   
  -    EVAL0("sio_detach(sios_buffer)", {
  -        rc = sio_detach(sio, sios_buffer);
  -    });
  +    EVAL0(sio_detach(sio, sios_buffer));
       if (rc != SIO_OK) error = 1;
   
       result = error;
   
       badread2:
  -
  -    EVAL0("sio_detach(sios_sa)", {
  -        rc = sio_detach(sio, sios_sa);
  -    });
  +    EVAL0(sio_detach(sio, sios_sa));
       if (rc != SIO_OK) result = -1;
   
       badread:
  -
  -    EVAL0("sio_destroy_stage", {
  -        rc = sio_destroy_stage(sio, sios_buffer);
  -    });
  -    if (rc != SIO_OK) result = -1;
  -    EVAL0("sio_destroy_stage(sios_sa)", {
  -        rc = sio_destroy_stage(sio, sios_sa);
  -    });
  -    if (rc != SIO_OK) result = -1;
  -    EVAL0("sio_destroy", {
  -        rc = sio_destroy(sio);
  -    });
  +    EVAL0(sio_destroy_stage(sio, sios_buffer));
  +    if (rc != SIO_OK) result = -1;
  +    EVAL0(sio_destroy_stage(sio, sios_sa));
  +    if (rc != SIO_OK) result = -1;
  +    EVAL0(sio_destroy(sio));
       if (rc != SIO_OK) result = -1;
   
       return result;
  @@ -1351,78 +1014,52 @@
       char S[] = "Hello world\n";
       size_t actual, len = strlen(S);
   
  -    EVAL0("sio_create", {
  -        rc = sio_create(&sio);
  -    });
  -    if (rc != SIO_OK) return -1;
  -    EVAL0("sio_create_stage(&sios_sa)", {
  -        rc = sio_create_stage(sio, &sio_module_sa, &sios_sa);
  -    });
  -    if (rc != SIO_OK) return -1;
  -    EVAL0("sio_create_stage(&sios_buffer)", {
  -        rc = sio_create_stage(sio, &sio_module_buffer, &sios_buffer);
  -    });
  -    if (rc != SIO_OK) return -1;
  -
  -    EVAL0("sio_configure_stage(sios_sa, buflen)", {
  -        rc = sio_configure_stage(sio, sios_sa, "buflen", &buflen);
  -    });
  -    if (rc != SIO_OK) return -1;
  -    EVAL0("sio_configure_stage(sios_buffer)", {
  -        rc = sio_configure_stage(sio, sios_buffer, "outputsize", &buflen);
  -    });
  -    if (rc != SIO_OK) return -1;
  -    EVAL0("sio_configure_stage(sios_buffer, inputsize)", {
  -        rc = sio_configure_stage(sio, sios_buffer, "inputsize", &bufsize);
  -    });
  +    EVAL0(sio_create(&sio));
  +    if (rc != SIO_OK) return -1;
  +    EVAL0(sio_create_stage(sio, &sio_module_sa, &sios_sa));
  +    if (rc != SIO_OK) return -1;
  +    EVAL0(sio_create_stage(sio, &sio_module_buffer, &sios_buffer));
  +    if (rc != SIO_OK) return -1;
  +    EVAL0(sio_configure_stage(sio, sios_sa, "buflen", &buflen));
  +    if (rc != SIO_OK) return -1;
  +    EVAL0(sio_configure_stage(sio, sios_buffer, "outputsize", &bufsize));
  +    if (rc != SIO_OK) return -1;
  +    EVAL0(sio_configure_stage(sio, sios_buffer, "inputsize", &bufsize));
       if (rc != SIO_OK) return -1;
   
       /*
        * WRITE phase
        */
   
  -    EVAL0("sio_configure_stage(sios_sa, sa)", {
  -        rc = sio_configure_stage(sio, sios_sa, "sa", sa);
  -    });
  +    EVAL0(sio_configure_stage(sio, sios_sa, "sa", sa));
       if (rc != SIO_OK) goto badwrite;
  -    EVAL0("sio_attach(sios_sa)", {
  -        rc = sio_attach(sio, sios_sa, SIO_MODE_READWRITE);
  -    });
  +    EVAL0(sio_attach(sio, sios_sa, SIO_MODE_READWRITE));
       if (rc != SIO_OK) goto badwrite;
  -    EVAL0("sio_attach(sios_buffer)", {
  -        rc = sio_attach(sio, sios_buffer, SIO_MODE_READWRITE);
  -    });
  +    EVAL0(sio_attach(sio, sios_buffer, SIO_MODE_READWRITE));
       if (rc != SIO_OK) goto badwrite2;
   
       for (i=0; i<wcount; ++i) {
  -        EVAL0("sio_write", {
  -            rc = sio_write(sio, S, len, &actual);
  -        });
  -        if (rc != SIO_OK) error = 1;
  -        if (rc != SIO_OK) break;
  +        EVAL0(sio_write(sio, S, len, &actual));
  +        if (rc != SIO_OK) {
  +           error = 1;
  +           break;
  +        }
           if (actual != len) {
               ts_test_fail(TS_CTX, "sio_write result %d (expected %d)\n",
                   (int)actual, (int)len);
  +            error = 1;
               break;
           }
       }
   
  -    EVAL0("sio_push", {
  -        rc = sio_push(sio);
  -    });
  +    EVAL0(sio_push(sio));
       if (rc != SIO_OK) error = 1;
  -
  -    EVAL0("sio_detach(sios_buffer)", {
  -        rc = sio_detach(sio, sios_buffer);
  -    });
  +    EVAL0(sio_detach(sio, sios_buffer));
       if (rc != SIO_OK) error = 1;
  -
       result = error;
   
       badwrite2:
  -    EVAL0("sio_detach(sios_sa)", {
  -        rc = sio_detach(sio, sios_sa);
  -    });
  +    EVAL0(sio_detach(sio, sios_sa));
       if (rc != SIO_OK) result = -1;
   
       badwrite:
  @@ -1431,17 +1068,11 @@
        * common cleanup
        */
   
  -    EVAL0("sio_destroy_stage", {
  -        rc = sio_destroy_stage(sio, sios_buffer);
  -    });
  -    if (rc != SIO_OK) result = -1;
  -    EVAL0("sio_destroy_stage(sios_sa)", {
  -        rc = sio_destroy_stage(sio, sios_sa);
  -    });
  -    if (rc != SIO_OK) result = -1;
  -    EVAL0("sio_destroy", {
  -        rc = sio_destroy(sio);
  -    });
  +    EVAL0(sio_destroy_stage(sio, sios_buffer));
  +    if (rc != SIO_OK) result = -1;
  +    EVAL0(sio_destroy_stage(sio, sios_sa));
  +    if (rc != SIO_OK) result = -1;
  +    EVAL0(sio_destroy(sio));
       if (rc != SIO_OK) result = -1;
   
       return result;
  @@ -1459,51 +1090,32 @@
       fflush(stdout);
       fflush(stderr);
   
  -    EVALS("sa_create(sa_server)", {
  -        rc = sa_create(&sa_server);
  -    });
  +    EVALS(sa_create(&sa_server));
       if (rc != SA_OK) goto sa_bail;
  -    EVALS("sa_timeout(sa_server, SA_TIMEOUT_ALL, 5, 0)", {
  -        rc = sa_timeout(sa_server, SA_TIMEOUT_ALL, 5, 0);
  -    });
  +    EVALS(sa_timeout(sa_server, SA_TIMEOUT_ALL, 5, 0));
       if (rc != SA_OK) goto sa_bail1;
  -    EVALS("sa_option(sa_server, SA_OPTION_REUSEADDR, 1)", {
  -        rc = sa_option(sa_server, SA_OPTION_REUSEADDR, 1);
  -    });
  +    EVALS(sa_option(sa_server, SA_OPTION_REUSEADDR, 1));
       if (rc != SA_OK) goto sa_bail1;
  -    EVALS("sa_addr_create(&saa_b)", {
  -        rc = sa_addr_create(&saa_b);
  -    });
  +    EVALS(sa_addr_create(&saa_b));
       if (rc != SA_OK) goto sa_bail1;
  -    EVALS("sa_addr_u2a(saa_b, uri)", {
  -        rc = sa_addr_u2a(saa_b, "inet://127.0.0.1:0");
  -    });
  +    EVALS(sa_addr_u2a(saa_b, "inet://127.0.0.1:0"));
       if (rc != SA_OK) goto sa_bail1;
  -    EVALS("sa_bind(sa_server, saa_b)", {
  -        rc = sa_bind(sa_server, saa_b);
  -    });
  +    EVALS(sa_bind(sa_server, saa_b));
       if (rc != SA_OK) goto sa_bail2;
  -    EVALS("sa_listen(sa_server, 128)", {
  -        rc = sa_listen(sa_server, 128);
  -    });
  +    EVALS(sa_listen(sa_server, 128));
       if (rc != SA_OK) goto sa_bail2;
  -    EVALS("sa_getlocal(sa_server, &saa_p)", {
  -        rc = sa_getlocal(sa_server, &saa_p);
  -    });
  +    EVALS(sa_getlocal(sa_server, &saa_p));
       if (rc != SA_OK) goto sa_bail2;
  -    EVALS("sa_create(sa_client)", {
  -        rc = sa_create(&sa_client);
  -    });
  +    EVALS(sa_create(&sa_client));
       if (rc != SA_OK) goto sa_bail3;
  -    EVALS("sa_timeout(sa_client, SA_TIMEOUT_ALL, 5, 0)", {
  -        rc = sa_timeout(sa_client, SA_TIMEOUT_ALL, 5, 0);
  -    });
  +    EVALS(sa_timeout(sa_client, SA_TIMEOUT_ALL, 5, 0));
       if (rc != SA_OK) goto sa_bail4;
   
       child = fork();
       if (child == -1) {
           ts_test_fail(TS_CTX, "cannot fork (%s)\n",
               strerror(errno));
  +        return;
       }
   
       if (child == 0) {
  @@ -1523,9 +1135,7 @@
           rc = sa_shutdown(sa_conn, "w");
           exit(result ? 1 : 0);
       } else {
  -        EVALS("sa_connect(sa_client, saa_p)", {
  -            rc = sa_connect(sa_client, saa_p);
  -        });
  +        EVALS(sa_connect(sa_client, saa_p));
           rc = sa_shutdown(sa_server, "w");
           test_sio_sa_read(_t, sa_client, wcount);
           rc = sa_shutdown(sa_server, "r");
  @@ -1537,13 +1147,13 @@
       }
   
   sa_bail4:
  -    sa_destroy(sa_client);
  +    EVALS(sa_destroy(sa_client));
   sa_bail3:
  -    sa_addr_destroy(saa_p);
  +    EVALS(sa_addr_destroy(saa_p));
   sa_bail2:
  -    sa_addr_destroy(saa_b);
  +    EVALS(sa_addr_destroy(saa_b));
   sa_bail1:
  -    sa_destroy(sa_server);
  +    EVALS(sa_destroy(sa_server));
   sa_bail:
       return;
   }
  @@ -1551,8 +1161,212 @@
   #endif
   
   #if ENABLE_BIO
  +static
  +BIO *get_server_bio()
  +{
  +    SSL_CTX *ctx;
  +    BIO *bio;
  +
  +    ERR_load_BIO_strings();
  +    OpenSSL_add_ssl_algorithms();
  +    ctx = SSL_CTX_new(SSLv23_server_method());
  +    if (!SSL_CTX_use_certificate_file(ctx, "sio_test.cer", SSL_FILETYPE_PEM) ||
  +        !SSL_CTX_use_PrivateKey_file(ctx, "sio_test.key", SSL_FILETYPE_PEM)) {
  +        SSL_CTX_free(ctx);
  +        return NULL;
  +    }
  +    bio = BIO_new_ssl(ctx,0);
  +    if (bio == NULL)
  +        SSL_CTX_free(ctx);
  +    return bio;
  +}
  +
  +static
  +BIO *get_client_bio()
  +{
  +    SSL_CTX *ctx;
  +    BIO *bio;
  +
  +    ERR_load_BIO_strings();
  +    OpenSSL_add_ssl_algorithms();
  +    ctx = SSL_CTX_new(SSLv23_client_method());
  +    if (ctx == NULL)
  +        return NULL;
  +    bio = BIO_new_ssl(ctx,1);
  +    if (bio == NULL)
  +        SSL_CTX_free(ctx);
  +    return bio;
  +}
  +
  +static
  +int test_sio_bio_read(ts_test_t *_t, int fd, int wcount)
  +{
  +    int error = 0, result = -1;
  +    sio_rc_t rc;
  +    sio_t *sio;
  +    sio_stage_t *sios_bio, *sios_fd;
  +    BIO *bio;
  +    int yes = 1;
  +    size_t buflen  =   99;     /* fd input buffer size */
  +    size_t bufsize =  343;     /* BIO input buffer size */
  +    int i;
  +    char S[] = "Hello world\n";
  +    char buf[sizeof(S)];
  +    size_t actual, len = strlen(S);
  +
  +    bio = get_client_bio();
  +    if (bio == NULL) {
  +            ts_test_fail(TS_CTX, "cannot create client BIO\n");
  +            return;
  +    }
  +
  +    EVAL0(sio_create(&sio));
  +    if (rc != SIO_OK) return -1;
  +    EVAL0(sio_create_stage(sio, &sio_module_fd, &sios_fd));
  +    if (rc != SIO_OK) return -1;
  +    EVAL0(sio_create_stage(sio, &sio_module_bio, &sios_bio));
  +    if (rc != SIO_OK) return -1;
  +    EVAL0(sio_configure_stage(sio, sios_fd, "buflen", &buflen));
  +    if (rc != SIO_OK) return -1;
  +    EVAL0(sio_configure_stage(sio, sios_bio, "bio", bio));
  +    if (rc != SIO_OK) return -1;
  +    EVAL0(sio_configure_stage(sio, sios_bio, "freebio", &yes));
  +    if (rc != SIO_OK) return -1;
  +    EVAL0(sio_configure_stage(sio, sios_bio, "inputsize", &bufsize));
  +    if (rc != SIO_OK) return -1;
  +
  +    EVAL0(sio_configure_stage(sio, sios_fd, "fd", &fd));
  +    if (rc != SIO_OK) goto badread;
  +    EVAL0(sio_attach(sio, sios_fd, SIO_MODE_READWRITE));
  +    if (rc != SIO_OK) goto badread;
  +    EVAL0(sio_attach(sio, sios_bio, SIO_MODE_READWRITE));
  +    if (rc != SIO_OK) goto badread2;
  +
  +    for (i=0; i<wcount; ++i) {
  +        EVAL0(sreadloop(sio, buf, len, &actual));
  +        if (rc != SIO_OK) {
  +            error = 1;
  +            break;
  +        }
  +        if (actual != len) {
  +            ts_test_fail(TS_CTX, "sio_read result %d (expected %d)\n",
  +                (int)actual, (int)len);
  +            error = 1;
  +            break;
  +        }
  +        buf[actual] = '\0';
  +        if (strcmp(buf, S)) {
  +            ts_test_fail(TS_CTX, "sio_read data mismatch at loop %d\n",
  +                i);
  +            error = 1;
  +            break;
  +        }
  +    }
  +
  +    EVAL0(sio_detach(sio, sios_bio));
  +    if (rc != SIO_OK) error = 1;
  +    result = error;
  +
  +    badread2:
  +    EVAL0(sio_detach(sio, sios_fd));
  +    if (rc != SIO_OK) result = -1;
  +
  +    badread:
  +    EVAL0(sio_destroy_stage(sio, sios_bio));
  +    if (rc != SIO_OK) result = -1;
  +    EVAL0(sio_destroy_stage(sio, sios_fd));
  +    if (rc != SIO_OK) result = -1;
  +    EVAL0(sio_destroy(sio));
  +    if (rc != SIO_OK) result = -1;
  +
  +    return result;
  +}
  +
  +static
  +int test_sio_bio_write(ts_test_t *_t, int fd, int wcount)
  +{
  +    int error = 0, result = -1;
  +    sio_rc_t rc;
  +    sio_t *sio;
  +    sio_stage_t *sios_bio, *sios_fd;
  +    BIO *bio;
  +    int yes = 1;
  +    size_t buflen  =   256;     /* fd input buffer size */
  +    size_t bufsize =    73;     /* BIO input buffer size */
  +    int i;
  +    char S[] = "Hello world\n";
  +    size_t actual, len = strlen(S);
  +
  +    bio = get_server_bio();
  +    if (bio == NULL) {
  +            ts_test_fail(TS_CTX, "cannot create server BIO\n");
  +            return;
  +    }
  +
  +    EVAL0(sio_create(&sio));
  +    if (rc != SIO_OK) return -1;
  +    EVAL0(sio_create_stage(sio, &sio_module_fd, &sios_fd));
  +    if (rc != SIO_OK) return -1;
  +    EVAL0(sio_create_stage(sio, &sio_module_bio, &sios_bio));
  +    if (rc != SIO_OK) return -1;
  +    EVAL0(sio_configure_stage(sio, sios_fd, "buflen", &buflen));
  +    if (rc != SIO_OK) return -1;
  +    EVAL0(sio_configure_stage(sio, sios_bio, "bio", bio));
  +    if (rc != SIO_OK) return -1;
  +    EVAL0(sio_configure_stage(sio, sios_bio, "freebio", &yes));
  +    if (rc != SIO_OK) return -1;
  +    EVAL0(sio_configure_stage(sio, sios_bio, "inputsize", &bufsize));
  +    if (rc != SIO_OK) return -1;
  +
  +    /*
  +     * WRITE phase
  +     */
  +
  +    EVAL0(sio_configure_stage(sio, sios_fd, "fd", &fd));
  +    if (rc != SIO_OK) goto badwrite;
  +    EVAL0(sio_attach(sio, sios_fd, SIO_MODE_READWRITE));
  +    if (rc != SIO_OK) goto badwrite;
  +    EVAL0(sio_attach(sio, sios_bio, SIO_MODE_READWRITE));
  +    if (rc != SIO_OK) goto badwrite2;
  +
  +    for (i=0; i<wcount; ++i) {
  +        EVAL0(sio_write(sio, S, len, &actual));
  +        if (rc != SIO_OK) {
  +            error = 1;
  +            break;
  +        } 
  +        if (actual != len) {
  +            ts_test_fail(TS_CTX, "sio_write result %d (expected %d)\n",
  +                (int)actual, (int)len);
  +            error = 1;
  +            break;
  +        }
  +    }
  +
  +    EVAL0(sio_push(sio));
  +    if (rc != SIO_OK) error = 1;
  +    EVAL0(sio_detach(sio, sios_bio));
  +    if (rc != SIO_OK) error = 1;
  +    result = error;
  +
  +    badwrite2:
  +    EVAL0(sio_detach(sio, sios_fd));
  +    if (rc != SIO_OK) result = -1;
  +
  +    badwrite:
  +    EVAL0(sio_destroy_stage(sio, sios_bio));
  +    if (rc != SIO_OK) result = -1;
  +    EVAL0(sio_destroy_stage(sio, sios_fd));
  +    if (rc != SIO_OK) result = -1;
  +    EVAL0(sio_destroy(sio));
  +    if (rc != SIO_OK) result = -1;
  +
  +    return result;
  +}
  +
   TS_TEST(test_sio_bio)
   {
  +    session(_t, test_sio_bio_read, test_sio_bio_write, 1);
   }
   #endif
   
  @@ -1560,6 +1374,8 @@
   {
       ts_suite_t *ts;
       int n;
  +
  +    signal(SIGPIPE, SIG_IGN);
   
       ts = ts_suite_new("OSSP sio (Stream I/O)");
       ts_suite_test(ts, test_sio_buffer, "stream I/O buffering");
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  6 13:50:54 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BC7E776A06; Thu,  6 Feb 2003 13:50:54 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ sio_test.c
Message-Id: <20030206125054.BC7E776A06@mail.ossp.org>
Date: Thu,  6 Feb 2003 13:50:54 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   06-Feb-2003 13:50:54
  Branch: HEAD                             Handle: 2003020612505300

  Modified files:
    ossp-pkg/sio            sio_test.c

  Log:
    drop sleep() calls
    it's a BIO adapter, not necessarily a SSL adapter

  Summary:
    Revision    Changes     Path
    1.16        +1  -8      ossp-pkg/sio/sio_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_test.c
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 sio_test.c
  --- ossp-pkg/sio/sio_test.c	6 Feb 2003 12:49:16 -0000	1.15
  +++ ossp-pkg/sio/sio_test.c	6 Feb 2003 12:50:53 -0000	1.16
  @@ -140,9 +140,6 @@
   
       if (child == 0) {
           int result;
  -
  -        sleep(1);
  -
           close(pd[1]);
           result = (*server)(NULL, pd[0], wcount);
           close(pd[0]);
  @@ -1122,13 +1119,9 @@
           int result;
           sa_t *sa_conn;
           sa_addr_t *saa_c;
  -
  -        sleep(1);
  -
           rc = sa_accept(sa_server, &saa_c, &sa_conn);
           if (rc != SA_OK) exit(2);
           rc = sa_addr_destroy(saa_c);
  -
           rc = sa_shutdown(sa_server, "rw");
           rc = sa_shutdown(sa_conn, "r");
           result = test_sio_sa_write(NULL, sa_conn, wcount);
  @@ -1390,7 +1383,7 @@
       ts_suite_test(ts, test_sio_sa, "stream I/O socket abstraction");
   #endif
   #if ENABLE_BIO
  -    ts_suite_test(ts, test_sio_bio, "stream I/O ssl adapter");
  +    ts_suite_test(ts, test_sio_bio, "stream I/O bio adapter");
   #endif
       n = ts_suite_run(ts);
       ts_suite_free(ts);
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  6 14:20:44 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EADE176A06; Thu,  6 Feb 2003 14:20:43 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ README
Message-Id: <20030206132043.EADE176A06@mail.ossp.org>
Date: Thu,  6 Feb 2003 14:20:43 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   06-Feb-2003 14:20:43
  Branch: HEAD                             Handle: 2003020613204200

  Modified files:
    ossp-pkg/sio            README

  Log:
    provide abstract

  Summary:
    Revision    Changes     Path
    1.3         +5  -1      ossp-pkg/sio/README
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/README
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 README
  --- ossp-pkg/sio/README	6 Jan 2003 19:04:56 -0000	1.2
  +++ ossp-pkg/sio/README	6 Feb 2003 13:20:42 -0000	1.3
  @@ -5,10 +5,14 @@
     |_|_|_|  \___/|____/____/|_|     |___/_|\___/
   
     OSSP sio - Stream I/O
  +  Version 0.9.0 (06-Feb-2003)
   
     ABSTRACT
   
  -  --FIXME--
  +  OSSP sio is an I/O abstraction library for layered stream communication.
  +  It was built to deal efficiently with complex I/O protocols and includes
  +  capabilities to filter and multiplex data streams. Its modular structure
  +  is fully supported by the underlying OSSP al data buffer library.
   
     COPYRIGHT AND LICENSE
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  6 14:25:52 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9267476A06; Thu,  6 Feb 2003 14:25:51 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ devtool.conf
Message-Id: <20030206132551.9267476A06@mail.ossp.org>
Date: Thu,  6 Feb 2003 14:25:51 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   06-Feb-2003 14:25:51
  Branch: HEAD                             Handle: 2003020613255000

  Modified files:
    ossp-pkg/sio            devtool.conf

  Log:
    fix typo

  Summary:
    Revision    Changes     Path
    1.2         +2  -2      ossp-pkg/sio/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.conf
  --- ossp-pkg/sio/devtool.conf	18 Dec 2002 14:58:29 -0000	1.1
  +++ ossp-pkg/sio/devtool.conf	6 Feb 2003 13:25:50 -0000	1.2
  @@ -56,8 +56,8 @@
       ./shtool tarball -o sio-${V}.tar.gz -d sio-${V} -u ossp -g sio \
                        -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf,*.tar.gz,*.bak,00TODO,autom4te\.cache' -c 'gzip --best' .
       ls -l sio-${V}.tar.gz
  -    guunzip <sio-${V}.tar.gz | tar tvf - | head -10; echo "[...]"
  -    guunzip <sio-${V}.tar.gz | tar tvf - | tail -10
  +    gunzip <sio-${V}.tar.gz | tar tvf - | head -10; echo "[...]"
  +    gunzip <sio-${V}.tar.gz | tar tvf - | tail -10
   
   %snap
       rm -f sio-*.tar.gz
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  6 14:43:48 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4BF63769C5; Thu,  6 Feb 2003 14:43:48 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/al/ ts.c
Message-Id: <20030206134348.4BF63769C5@mail.ossp.org>
Date: Thu,  6 Feb 2003 14:43:48 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   06-Feb-2003 14:43:48
  Branch: HEAD                             Handle: 2003020613434700

  Modified files:
    ossp-pkg/al             ts.c

  Log:
    bugfix pulled up from sa/ts.c

  Summary:
    Revision    Changes     Path
    1.2         +10 -6      ossp-pkg/al/ts.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/al/ts.c
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ts.c
  --- ossp-pkg/al/ts.c	16 Dec 2002 12:24:52 -0000	1.1
  +++ ossp-pkg/al/ts.c	6 Feb 2003 13:43:47 -0000	1.2
  @@ -76,6 +76,10 @@
       for ((ep)  = RING_FIRST((hp)); \
            (ep) != RING_SENTINEL((hp), elem, link); \
            (ep)  = RING_NEXT((ep), link))
  +#define RING_FOREACH_LA(ep, epT, hp, elem, link) \
  +    for ((ep)  = RING_FIRST((hp)), (epT) = RING_NEXT((ep), link); \
  +         (ep) != RING_SENTINEL((hp), elem, link); \
  +         (ep)  = (epT), (epT) = RING_NEXT((epT), link))
   
   /* test suite test log */
   struct tstl_st;
  @@ -367,15 +371,15 @@
   /* destroy test suite */
   void ts_suite_free(ts_suite_t *ts)
   {
  -    ts_test_t *tst;
  -    tstc_t *tstc;
  -    tstl_t *tstl;
  +    ts_test_t *tst, *tstT;
  +    tstc_t *tstc, *tstcT;
  +    tstl_t *tstl, *tstlT;
   
       if (ts == NULL)
           return;
  -    RING_FOREACH(tst, &ts->tests, ts_test_t, next) {
  -        RING_FOREACH(tstc, &tst->checks, tstc_t, next) {
  -            RING_FOREACH(tstl, &tstc->logs, tstl_t, next) {
  +    RING_FOREACH_LA(tst, tstT, &ts->tests, ts_test_t, next) {
  +        RING_FOREACH_LA(tstc, tstcT, &tst->checks, tstc_t, next) {
  +            RING_FOREACH_LA(tstl, tstlT, &tstc->logs, tstl_t, next) {
                   free(tstl->text);
               }
               free(tstc->title);
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  6 14:44:25 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0469F769C5; Thu,  6 Feb 2003 14:44:24 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ ts.c
Message-Id: <20030206134424.0469F769C5@mail.ossp.org>
Date: Thu,  6 Feb 2003 14:44:24 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   06-Feb-2003 14:44:24
  Branch: HEAD                             Handle: 2003020613442300

  Modified files:
    ossp-pkg/sio            ts.c

  Log:
    bugfix pulled up from sa/ts.c

  Summary:
    Revision    Changes     Path
    1.2         +10 -6      ossp-pkg/sio/ts.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/ts.c
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ts.c
  --- ossp-pkg/sio/ts.c	18 Dec 2002 15:52:33 -0000	1.1
  +++ ossp-pkg/sio/ts.c	6 Feb 2003 13:44:23 -0000	1.2
  @@ -76,6 +76,10 @@
       for ((ep)  = RING_FIRST((hp)); \
            (ep) != RING_SENTINEL((hp), elem, link); \
            (ep)  = RING_NEXT((ep), link))
  +#define RING_FOREACH_LA(ep, epT, hp, elem, link) \
  +    for ((ep)  = RING_FIRST((hp)), (epT) = RING_NEXT((ep), link); \
  +         (ep) != RING_SENTINEL((hp), elem, link); \
  +         (ep)  = (epT), (epT) = RING_NEXT((epT), link))
   
   /* test suite test log */
   struct tstl_st;
  @@ -367,15 +371,15 @@
   /* destroy test suite */
   void ts_suite_free(ts_suite_t *ts)
   {
  -    ts_test_t *tst;
  -    tstc_t *tstc;
  -    tstl_t *tstl;
  +    ts_test_t *tst, *tstT;
  +    tstc_t *tstc, *tstcT;
  +    tstl_t *tstl, *tstlT;
   
       if (ts == NULL)
           return;
  -    RING_FOREACH(tst, &ts->tests, ts_test_t, next) {
  -        RING_FOREACH(tstc, &tst->checks, tstc_t, next) {
  -            RING_FOREACH(tstl, &tstc->logs, tstl_t, next) {
  +    RING_FOREACH_LA(tst, tstT, &ts->tests, ts_test_t, next) {
  +        RING_FOREACH_LA(tstc, tstcT, &tst->checks, tstc_t, next) {
  +            RING_FOREACH_LA(tstl, tstlT, &tstc->logs, tstl_t, next) {
                   free(tstl->text);
               }
               free(tstc->title);
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  6 14:44:37 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1122F76A38; Thu,  6 Feb 2003 14:44:37 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ VERSION
Message-Id: <20030206134437.1122F76A38@mail.ossp.org>
Date: Thu,  6 Feb 2003 14:44:37 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   06-Feb-2003 14:44:36
  Branch: HEAD                             Handle: 2003020613443500

  Modified files:
    ossp-pkg/sio            VERSION

  Log:
    snapshot

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/sio/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/VERSION
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 VERSION
  --- ossp-pkg/sio/VERSION	18 Dec 2002 14:58:29 -0000	1.1
  +++ ossp-pkg/sio/VERSION	6 Feb 2003 13:44:35 -0000	1.2
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP sio (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP sio, Version 0.9.0 (18-Dec-2002)
  +  This is OSSP sio, Version 0.9.0 (06-Feb-2003)
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  6 14:50:12 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E02E076A06; Thu,  6 Feb 2003 14:50:11 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_common.h lmtp2nntp_msg.c lmt...
Message-Id: <20030206135011.E02E076A06@mail.ossp.org>
Date: Thu,  6 Feb 2003 14:50:11 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   06-Feb-2003 14:50:11
  Branch: HEAD                             Handle: 2003020613500800

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_common.h lmtp2nntp_msg.c lmtp2nntp_msg.h
                            lmtp2nntp_nntp.h

  Log:
    moving definitions between header files

  Summary:
    Revision    Changes     Path
    1.3         +3  -39     ossp-pkg/lmtp2nntp/lmtp2nntp_common.h
    1.36        +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
    1.9         +29 -2      ossp-pkg/lmtp2nntp/lmtp2nntp_msg.h
    1.6         +9  -15     ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_common.h
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 lmtp2nntp_common.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_common.h	30 Jan 2003 19:42:12 -0000	1.2
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_common.h	6 Feb 2003 13:50:08 -0000	1.3
  @@ -26,13 +26,6 @@
   **  lmtp2nntp_common.h: common stuff
   */
   
  -/*
  - * FIXME this stuff actually should be not global/common! It was mainly
  - * a temporary fix to allow code migration from lmtp2nntp_main.c's
  - * getopt switch to lmtp2nntp_config.[ch]. Unfortunately it is very hard
  - * to move this remaining stuff into local contexts.
  - */
  -
   #ifndef __LMTP2NNTP_COMMON_H__
   #define __LMTP2NNTP_COMMON_H__
   
  @@ -46,8 +39,7 @@
       size_t     prefixlen;
       sa_addr_t *saa;
   };
  -struct nntp_st;
  -typedef struct nntp_st nntp_t;
  +
   #include "lmtp2nntp_nntp.h"
   struct ns {
       sa_addr_t      *saa;
  @@ -56,40 +48,13 @@
       nntp_rc_t       rc;
       l2_channel_t   *l2;
   };
  +
   struct session {
       int     lhlo_seen;
       char   *lhlo_domain;
   };
  -#include <sys/utsname.h>
  -
  -struct headerrule_st;
  -typedef struct headerrule_st headerrule_t;
  -#include <pcre.h>
  -struct headerrule_st {
  -    headerrule_t *next;
  -    int           pri;
  -    char         *regex;
  -    char         *name;
  -    char         *val;
  -    pcre         *pcreRegex;
  -    pcre_extra   *pcreExtra;
  -};
  -headerrule_t *FIXME1;
  -
  -struct headerdata_st;
  -typedef struct headerdata_st headerdata_t;
  -struct headerdata_st {
  -    headerdata_t *prev;
  -    headerdata_t *next;
  -    char *name;
  -    int ndata; /* =0 means data is invalid, =1 means use data.s, >1 means use data.m */
  -    union {
  -        char *s;
  -        char **m;
  -    } data;
  -};
  -headerdata_t *FIXME2;
   
  +#include <sys/utsname.h>
   typedef struct {
       l2_context_t    ctx;
       val_t          *prival;
  @@ -165,4 +130,3 @@
   extern void logbook(l2_channel_t *, l2_level_t, const char *, ...);
   
   #endif /* __LMTP2NNTP_COMMON_H__ */
  -
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 lmtp2nntp_msg.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	4 Feb 2003 14:50:45 -0000	1.35
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	6 Feb 2003 13:50:08 -0000	1.36
  @@ -31,7 +31,7 @@
   
   #include "lmtp2nntp_msg.h"
   #include "lmtp2nntp_argz.h"
  -#include "lmtp2nntp_common.h" /* FIMXE logbook only */
  +#include "lmtp2nntp_common.h" /* only required for logbook() */
   #include "tai.h"
   #include "str.h"
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.h
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 lmtp2nntp_msg.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.h	30 Jan 2003 19:42:13 -0000	1.8
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.h	6 Feb 2003 13:50:08 -0000	1.9
  @@ -35,13 +35,41 @@
   #include "val.h"
   #include "lmtp2nntp_global.h"
   
  +extern void logbook(l2_channel_t *, l2_level_t, const char *, ...);
  +
  +#include <pcre.h>
  +struct headerrule_st;
  +typedef struct headerrule_st headerrule_t;
  +struct headerrule_st {
  +    headerrule_t *next;
  +    int           pri;
  +    char         *regex;
  +    char         *name;
  +    char         *val;
  +    pcre         *pcreRegex;
  +    pcre_extra   *pcreExtra;
  +};
  +
  +struct headerdata_st;
  +typedef struct headerdata_st headerdata_t;
  +struct headerdata_st {
  +    headerdata_t *prev;
  +    headerdata_t *next;
  +    char *name;
  +    int ndata; /* =0 means data is invalid, =1 means use data.s, >1 means use data.m */
  +    union {
  +        char *s;
  +        char **m;
  +    } data;
  +};
  +
   typedef struct {
       char   *azEnvgroups;  /* Groups according to Envelope in GROUPMODE_ENVELOPE */
       size_t  asEnvgroups;
       char   *cpMsg;        /* the wholly message to be received by DATA command */
       char   *azHeaders;    /* header part of message above */
       size_t  asHeaders;
  -    struct headerdata_st *hdFirst; /*FIXME i want headerdata_t here */
  +    headerdata_t *hdFirst;
       char   *cpFid;        /* foreign (aka sendmail queue) id from parsing headers */
       char   *cpBody;       /* body part of message above */
       char   *cpMsgid;
  @@ -89,4 +117,3 @@
   char     *msg_error(msg_rc_t);
   
   #endif /*  __MSG_H__ */
  -
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.h
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 lmtp2nntp_nntp.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.h	30 Jan 2003 19:42:13 -0000	1.5
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.h	6 Feb 2003 13:50:08 -0000	1.6
  @@ -34,19 +34,6 @@
   #include <unistd.h>
   #include <fcntl.h>
   
  -#include "lmtp2nntp_msg.h"
  -
  -/*FIXME see include below
  -struct nntp_st;
  -typedef struct nntp_st nntp_t;
  -*/
  -
  -typedef struct {
  -    void    *ctx;
  -    ssize_t (*read)(void *, void *, size_t);
  -    ssize_t (*write)(void *, const void *, size_t);
  -} nntp_io_t;
  -
   typedef enum {
       NNTP_OK,
       NNTP_EOF,
  @@ -60,8 +47,15 @@
       NNTP_ERR_UNKNOWN
   } nntp_rc_t;
   
  -/*FIXME see fixme above */
  -#include "lmtp2nntp_common.h"
  +struct nntp_st;
  +typedef struct nntp_st nntp_t;
  +#include "lmtp2nntp_msg.h"
  +
  +typedef struct {
  +    void    *ctx;
  +    ssize_t (*read)(void *, void *, size_t);
  +    ssize_t (*write)(void *, const void *, size_t);
  +} nntp_io_t;
   
   typedef struct {
       int fd;
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  6 14:51:56 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0EF0B76A06; Thu,  6 Feb 2003 14:51:55 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ sio_test.c
Message-Id: <20030206135155.0EF0B76A06@mail.ossp.org>
Date: Thu,  6 Feb 2003 14:51:55 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   06-Feb-2003 14:51:55
  Branch: HEAD                             Handle: 2003020613515400

  Modified files:
    ossp-pkg/sio            sio_test.c

  Log:
    fix left-overs from old EVAL0 macro
    fix return values from callback

  Summary:
    Revision    Changes     Path
    1.17        +9  -5      ossp-pkg/sio/sio_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_test.c
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 sio_test.c
  --- ossp-pkg/sio/sio_test.c	6 Feb 2003 12:50:53 -0000	1.16
  +++ ossp-pkg/sio/sio_test.c	6 Feb 2003 13:51:54 -0000	1.17
  @@ -87,6 +87,10 @@
   static int test_sio_hello_client(ts_test_t *, int, int);
   static int test_sio_hello_server(ts_test_t *, int, int);
   
  +typedef int (*func)(ts_test_t *, int, int);
  +static void session(ts_test_t *, func, func, int);
  +
  +static
   sio_rc_t sreadloop(sio_t *sio, char *buf, size_t len, size_t *actualp)
   {
       sio_rc_t rc = SIO_OK;
  @@ -108,7 +112,7 @@
       return rc;
   }
   
  -typedef int (*func)(ts_test_t *, int, int);
  +static
   void session(ts_test_t *_t, func client, func server, int duplex)
   {
       pid_t child;
  @@ -312,7 +316,7 @@
   
       EVAL0(sio_destroy_stage(sio, sios_buffer));
       EVAL0(sio_destroy_stage(sio, sios_fd));
  -    EVAL0(rc = sio_destroy(sio));
  +    EVAL0(sio_destroy(sio));
   }
   
   static
  @@ -653,7 +657,7 @@
        */
       EVAL0(sio_detach(C_sio, C_sios_sio));
       EVAL0(sio_destroy_stage(C_sio, C_sios_sio));
  -    EVAL0(rc = sio_destroy(C_sio));
  +    EVAL0(sio_destroy(C_sio));
   
       /*
        * destroy ODD stream
  @@ -1210,7 +1214,7 @@
       bio = get_client_bio();
       if (bio == NULL) {
               ts_test_fail(TS_CTX, "cannot create client BIO\n");
  -            return;
  +            return -1;
       }
   
       EVAL0(sio_create(&sio));
  @@ -1293,7 +1297,7 @@
       bio = get_server_bio();
       if (bio == NULL) {
               ts_test_fail(TS_CTX, "cannot create server BIO\n");
  -            return;
  +            return -1;
       }
   
       EVAL0(sio_create(&sio));
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  6 14:53:59 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 491017639E; Thu,  6 Feb 2003 14:53:59 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex/ .cvsignore ossp-pkg/l2/ .cvsignore ossp-pkg/p...
Message-Id: <20030206135359.491017639E@mail.ossp.org>
Date: Thu,  6 Feb 2003 14:53:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   06-Feb-2003 14:53:59
  Branch: HEAD                             Handle: 2003020613533422

  Modified files:
    ossp-pkg/ex             .cvsignore
    ossp-pkg/l2             .cvsignore
    ossp-pkg/pcre           .cvsignore
    ossp-pkg/popt           .cvsignore
    ossp-pkg/sa             .cvsignore
    ossp-pkg/str            .cvsignore
    ossp-pkg/tai            .cvsignore
    ossp-pkg/val            .cvsignore
    ossp-pkg/var            .cvsignore

  Log:
    ignore autom4te.cache

  Summary:
    Revision    Changes     Path
    1.5         +1  -0      ossp-pkg/ex/.cvsignore
    1.15        +1  -0      ossp-pkg/l2/.cvsignore
    1.6         +1  -0      ossp-pkg/pcre/.cvsignore
    1.2         +1  -0      ossp-pkg/popt/.cvsignore
    1.6         +1  -0      ossp-pkg/sa/.cvsignore
    1.14        +1  -0      ossp-pkg/str/.cvsignore
    1.2         +1  -0      ossp-pkg/tai/.cvsignore
    1.3         +1  -0      ossp-pkg/val/.cvsignore
    1.5         +1  -0      ossp-pkg/var/.cvsignore
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/.cvsignore
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 .cvsignore
  --- ossp-pkg/ex/.cvsignore	31 Jan 2002 20:48:05 -0000	1.4
  +++ ossp-pkg/ex/.cvsignore	6 Feb 2003 13:53:34 -0000	1.5
  @@ -10,3 +10,4 @@
   libtool.m4
   ltmain.sh
   shtool
  +autom4te.cache
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/.cvsignore
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 .cvsignore
  --- ossp-pkg/l2/.cvsignore	24 Jan 2002 16:30:02 -0000	1.14
  +++ ossp-pkg/l2/.cvsignore	6 Feb 2003 13:53:36 -0000	1.15
  @@ -26,3 +26,4 @@
   l2tool
   l2tool.1
   config.h.in
  +autom4te.cache
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pcre/.cvsignore
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 .cvsignore
  --- ossp-pkg/pcre/.cvsignore	7 Jan 2002 15:21:06 -0000	1.5
  +++ ossp-pkg/pcre/.cvsignore	6 Feb 2003 13:53:40 -0000	1.6
  @@ -20,3 +20,4 @@
   libtool.m4
   configure
   config.h.in
  +autom4te.cache
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/popt/.cvsignore
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 .cvsignore
  --- ossp-pkg/popt/.cvsignore	30 Jan 2002 14:20:17 -0000	1.1
  +++ ossp-pkg/popt/.cvsignore	6 Feb 2003 13:53:43 -0000	1.2
  @@ -9,3 +9,4 @@
   popt-config
   popt_test
   shtool
  +autom4te.cache
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/.cvsignore
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 .cvsignore
  --- ossp-pkg/sa/.cvsignore	31 Jan 2002 21:35:13 -0000	1.5
  +++ ossp-pkg/sa/.cvsignore	6 Feb 2003 13:53:47 -0000	1.6
  @@ -11,3 +11,4 @@
   sa.h
   sa_test
   shtool
  +autom4te.cache
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/.cvsignore
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 .cvsignore
  --- ossp-pkg/str/.cvsignore	1 Apr 2002 09:03:49 -0000	1.13
  +++ ossp-pkg/str/.cvsignore	6 Feb 2003 13:53:48 -0000	1.14
  @@ -23,3 +23,4 @@
   str_pcre_gen
   str_pcre_tab.c
   str_test
  +autom4te.cache
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/tai/.cvsignore
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 .cvsignore
  --- ossp-pkg/tai/.cvsignore	29 Apr 2002 19:09:05 -0000	1.1
  +++ ossp-pkg/tai/.cvsignore	6 Feb 2003 13:53:50 -0000	1.2
  @@ -9,3 +9,4 @@
   shtool
   tai-config
   tai_test
  +autom4te.cache
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/.cvsignore
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 .cvsignore
  --- ossp-pkg/val/.cvsignore	15 Mar 2002 11:35:09 -0000	1.2
  +++ ossp-pkg/val/.cvsignore	6 Feb 2003 13:53:53 -0000	1.3
  @@ -11,3 +11,4 @@
   Makefile
   val-config.1
   val.3
  +autom4te.cache
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/.cvsignore
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 .cvsignore
  --- ossp-pkg/var/.cvsignore	28 Feb 2002 08:08:16 -0000	1.4
  +++ ossp-pkg/var/.cvsignore	6 Feb 2003 13:53:56 -0000	1.5
  @@ -12,3 +12,4 @@
   var.3
   var_play
   var_test
  +autom4te.cache
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  6 15:17:58 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DC31776464; Thu,  6 Feb 2003 15:17:57 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ test.sh
Message-Id: <20030206141757.DC31776464@mail.ossp.org>
Date: Thu,  6 Feb 2003 15:17:57 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   06-Feb-2003 15:17:57
  Branch: HEAD                             Handle: 2003020614175600

  Modified files:
    ossp-pkg/lmtp2nntp      test.sh

  Log:
    wrong description text

  Summary:
    Revision    Changes     Path
    1.16        +3  -3      ossp-pkg/lmtp2nntp/test.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/test.sh
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 test.sh
  --- ossp-pkg/lmtp2nntp/test.sh	30 Jan 2003 19:45:20 -0000	1.15
  +++ ossp-pkg/lmtp2nntp/test.sh	6 Feb 2003 14:17:56 -0000	1.16
  @@ -16,10 +16,10 @@
   Message-Id: <200108141251.f7ECpmn74812@dev.de.cw.net>
   From: Thomas Lotterer <Thomas.Lotterer@example.com>
   Received: from cw.example.com (cw.example.com [10.1.1.32])
  -    by gateway.example.com (8.9.2/8.9.2/$Revision: 1.15 $) with SMTP id NAA08840
  +    by gateway.example.com (8.9.2/8.9.2/$Revision: 1.16 $) with SMTP id NAA08840
       for <thomas.lotterer@gateway.example.com>; Mon, 2 Apr 2001 13:20:25 +0200 (MET DST)
   Received: from history (history.example.org [195.143.102.41])
  -    by cw.example.com (8.11.0/8.11.0/$Revision: 1.15 $) with ESMTP id f32BKPb12235
  +    by cw.example.com (8.11.0/8.11.0/$Revision: 1.16 $) with ESMTP id f32BKPb12235
       for <thomas.lotterer@example.com>; Mon, 2 Apr 2001 13:20:25 +0200
   Received: from example.org (littlemua.example.org [195.143.103.160])
   	by history (8.8.8/8.8.8) with ESMTP id LAA12678;
  @@ -95,7 +95,7 @@
   # make check with automatic succeed/ fail message.
   # more samples and testing below.
   
  -echon "checking whether -v verbose option works ... "
  +echon "checking whether -v version option works ... "
   # expected sample output: lmtp2nntp 0.9.4 (30-Aug-2001)
   prolog
   newmsg
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  6 15:21:39 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A7CAF76464; Thu,  6 Feb 2003 15:21:39 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ devtool.conf sio.ac
Message-Id: <20030206142139.A7CAF76464@mail.ossp.org>
Date: Thu,  6 Feb 2003 15:21:39 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Feb-2003 15:21:39
  Branch: HEAD                             Handle: 2003020614213800

  Modified files:
    ossp-pkg/sio            devtool.conf sio.ac

  Log:
    flush pending changes before release

  Summary:
    Revision    Changes     Path
    1.3         +2  -2      ossp-pkg/sio/devtool.conf
    1.3         +4  -4      ossp-pkg/sio/sio.ac
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.conf
  --- ossp-pkg/sio/devtool.conf	6 Feb 2003 13:25:50 -0000	1.2
  +++ ossp-pkg/sio/devtool.conf	6 Feb 2003 14:21:38 -0000	1.3
  @@ -54,7 +54,7 @@
       ./shtool fixperm -v .
       V=`./shtool version -l txt -d short VERSION`
       ./shtool tarball -o sio-${V}.tar.gz -d sio-${V} -u ossp -g sio \
  -                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf,*.tar.gz,*.bak,00TODO,autom4te\.cache' -c 'gzip --best' .
  +                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf,*.tar.gz,*.bak,00TODO,autom4te\.cache,BRAINSTORM,TODO' -c 'gzip --best' .
       ls -l sio-${V}.tar.gz
       gunzip <sio-${V}.tar.gz | tar tvf - | head -10; echo "[...]"
       gunzip <sio-${V}.tar.gz | tar tvf - | tail -10
  @@ -69,7 +69,7 @@
       ./shtool fixperm -v .
       D=`date '+%Y%m%d'`
       ./shtool tarball -o sio-SNAP-${D}.tar.gz -d sio-SNAP-${D} -u ossp -g sio \
  -                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf,*.tar.gz,*.bak,00TODO,autom4te\.cache' -c 'gzip --best' .
  +                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf,*.tar.gz,*.bak,00TODO,autom4te\.cache,BRAINSTORM,TODO' -c 'gzip --best' .
       ls -l sio-SNAP-${D}.tar.gz
       guunzip <sio-SNAP-${D}.tar.gz | tar tvf - | head -10; echo "[...]"
       guunzip <sio-SNAP-${D}.tar.gz | tar tvf - | tail -10
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio.ac
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 sio.ac
  --- ossp-pkg/sio/sio.ac	20 Jan 2003 19:13:25 -0000	1.2
  +++ ossp-pkg/sio/sio.ac	6 Feb 2003 14:21:38 -0000	1.3
  @@ -39,7 +39,7 @@
   dnl #   built-time configuration parameter --enable-bio
   AC_MSG_CHECKING(for BIO support)
   AC_ARG_ENABLE(bio,dnl
  -[  --enable-bio             enable BIO support (default=no)],
  +[  --enable-bio            enable OpenSSL BIO support (default=no)],
   [ enable_bio=$enableval ],
   [ enable_bio=no ]
   )dnl
  @@ -47,13 +47,13 @@
   if test ".$enable_bio" = .yes; then
   AC_CHECK_LIB(crypto, CRYPTO_free)
   AC_CHECK_LIB(ssl, SSL_alert_desc_string)
  -AC_DEFINE(ENABLE_BIO, 1, [Define to 1 if building with BIO (openssl)])
  +AC_DEFINE(ENABLE_BIO, 1, [Define to 1 if building with OpenSSL BIO])
   fi
   
   dnl #   built-time configuration parameter --enable-zlib
   AC_MSG_CHECKING(for ZLIB support)
   AC_ARG_ENABLE(zlib,dnl
  -[  --enable-zlib            enable ZLIB support (default=no)],
  +[  --enable-zlib           enable ZLIB support (default=no)],
   [ enable_zlib=$enableval ],
   [ enable_zlib=no ]
   )dnl
  @@ -66,7 +66,7 @@
   dnl #   built-time configuration parameter --enable-sa
   AC_MSG_CHECKING(for SA support)
   AC_ARG_ENABLE(sa,dnl
  -[  --enable-sa              enable SA support (default=no)],
  +[  --enable-sa             enable OSSP sa support (default=no)],
   [ enable_sa=$enableval ],
   [ enable_sa=no ]
   )dnl
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  6 15:23:50 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AA49D76464; Thu,  6 Feb 2003 15:23:50 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_main.c
Message-Id: <20030206142350.AA49D76464@mail.ossp.org>
Date: Thu,  6 Feb 2003 15:23:50 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   06-Feb-2003 15:23:50
  Branch: HEAD                             Handle: 2003020614234900

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_main.c

  Log:
    cast pid to/from int

  Summary:
    Revision    Changes     Path
    1.65        +3  -3      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================================
  $ cvs diff -u -r1.64 -r1.65 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	6 Feb 2003 10:20:03 -0000	1.64
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	6 Feb 2003 14:23:49 -0000	1.65
  @@ -478,7 +478,7 @@
       if (getuid() != ctx->option_uid) {
           if (setuid(ctx->option_uid) == -1) {
               fprintf(stderr, "%s:Error: Setting UID to %d failed: %s\n",
  -                    ctx->progname, ctx->option_uid, strerror(errno));
  +                    ctx->progname, (int)ctx->option_uid, strerror(errno));
               CU(ERR_EXECUTION);
           }
       }
  @@ -487,7 +487,7 @@
           if ((fd = fopen(ctx->option_pidfile, "r")) == NULL)
               logbook(ctx->l2, L2_LEVEL_ERROR, "cannot open pidfile \"%s\" for reading %m", ctx->option_pidfile);
           else {
  -            if (fscanf(fd, "%d\n", &pid) != 1) {
  +            if (fscanf(fd, "%d\n", (int *)&pid) != 1) {
                   fclose(fd);
                   logbook(ctx->l2, L2_LEVEL_ERROR, "cannot extract pid from pidfile \"%s\"", ctx->option_pidfile);
               }
  @@ -564,7 +564,7 @@
               if ((fd = fopen(ctx->option_pidfile, "w+")) == NULL)
                   logbook(ctx->l2, L2_LEVEL_ERROR, "cannot open pidfile \"%s\" for writing %m", ctx->option_pidfile);
               else {
  -                fprintf(fd, "%d\n", getpid());
  +                fprintf(fd, "%d\n", (int)getpid());
                   fclose(fd);
               }
           }
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  6 15:24:04 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F10D076464; Thu,  6 Feb 2003 15:24:03 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ devtool.conf
Message-Id: <20030206142403.F10D076464@mail.ossp.org>
Date: Thu,  6 Feb 2003 15:24:03 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Feb-2003 15:24:03
  Branch: HEAD                             Handle: 2003020614240300

  Modified files:
    ossp-pkg/sio            devtool.conf

  Log:
    final fixes

  Summary:
    Revision    Changes     Path
    1.4         +2  -2      ossp-pkg/sio/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.conf
  --- ossp-pkg/sio/devtool.conf	6 Feb 2003 14:21:38 -0000	1.3
  +++ ossp-pkg/sio/devtool.conf	6 Feb 2003 14:24:03 -0000	1.4
  @@ -54,7 +54,7 @@
       ./shtool fixperm -v .
       V=`./shtool version -l txt -d short VERSION`
       ./shtool tarball -o sio-${V}.tar.gz -d sio-${V} -u ossp -g sio \
  -                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf,*.tar.gz,*.bak,00TODO,autom4te\.cache,BRAINSTORM,TODO' -c 'gzip --best' .
  +                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf,*.tar.gz,*.bak,*~,TODO,autom4te\.cache,BRAINSTORM' -c 'gzip --best' .
       ls -l sio-${V}.tar.gz
       gunzip <sio-${V}.tar.gz | tar tvf - | head -10; echo "[...]"
       gunzip <sio-${V}.tar.gz | tar tvf - | tail -10
  @@ -69,7 +69,7 @@
       ./shtool fixperm -v .
       D=`date '+%Y%m%d'`
       ./shtool tarball -o sio-SNAP-${D}.tar.gz -d sio-SNAP-${D} -u ossp -g sio \
  -                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf,*.tar.gz,*.bak,00TODO,autom4te\.cache,BRAINSTORM,TODO' -c 'gzip --best' .
  +                     -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf,*.tar.gz,*.bak,*~,TODO,autom4te\.cache,BRAINSTORM' -c 'gzip --best' .
       ls -l sio-SNAP-${D}.tar.gz
       guunzip <sio-SNAP-${D}.tar.gz | tar tvf - | head -10; echo "[...]"
       guunzip <sio-SNAP-${D}.tar.gz | tar tvf - | tail -10
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  6 15:25:58 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E2E3176464; Thu,  6 Feb 2003 15:25:57 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ devtool.conf
Message-Id: <20030206142557.E2E3176464@mail.ossp.org>
Date: Thu,  6 Feb 2003 15:25:57 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Feb-2003 15:25:57
  Branch: HEAD                             Handle: 2003020614255700

  Modified files:
    ossp-pkg/sio            devtool.conf

  Log:
    more typos

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-pkg/sio/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 devtool.conf
  --- ossp-pkg/sio/devtool.conf	6 Feb 2003 14:24:03 -0000	1.4
  +++ ossp-pkg/sio/devtool.conf	6 Feb 2003 14:25:57 -0000	1.5
  @@ -76,5 +76,5 @@
   
   %release
       echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/sio/"
  -    scp al-*.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/al/
  +    scp sio-*.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/sio/
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  6 15:36:20 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 10F3A7644A; Thu,  6 Feb 2003 15:36:19 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ devtool.conf
Message-Id: <20030206143619.10F3A7644A@mail.ossp.org>
Date: Thu,  6 Feb 2003 15:36:19 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Feb-2003 15:36:19
  Branch: HEAD                             Handle: 2003020614361900

  Modified files:
    ossp-pkg/sio            devtool.conf

  Log:
    fix typo

  Summary:
    Revision    Changes     Path
    1.6         +2  -2      ossp-pkg/sio/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 devtool.conf
  --- ossp-pkg/sio/devtool.conf	6 Feb 2003 14:25:57 -0000	1.5
  +++ ossp-pkg/sio/devtool.conf	6 Feb 2003 14:36:19 -0000	1.6
  @@ -71,8 +71,8 @@
       ./shtool tarball -o sio-SNAP-${D}.tar.gz -d sio-SNAP-${D} -u ossp -g sio \
                        -e 'CVS,\.cvsignore,\.[ao],^\.,devtool.conf,*.tar.gz,*.bak,*~,TODO,autom4te\.cache,BRAINSTORM' -c 'gzip --best' .
       ls -l sio-SNAP-${D}.tar.gz
  -    guunzip <sio-SNAP-${D}.tar.gz | tar tvf - | head -10; echo "[...]"
  -    guunzip <sio-SNAP-${D}.tar.gz | tar tvf - | tail -10
  +    gunzip <sio-SNAP-${D}.tar.gz | tar tvf - | head -10; echo "[...]"
  +    gunzip <sio-SNAP-${D}.tar.gz | tar tvf - | tail -10
   
   %release
       echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/sio/"
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  6 15:38:36 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 703F87644A; Thu,  6 Feb 2003 15:38:36 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20030206143836.703F87644A@mail.ossp.org>
Date: Thu,  6 Feb 2003 15:38:36 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   06-Feb-2003 15:38:36
  Branch: HEAD                             Handle: 2003020614383104

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/sio    index.wml

  Log:
    release OSSP sio 0.9.0

  Summary:
    Revision    Changes     Path
    1.51        +1  -0      ossp-web/new/news.txt
    1.48        +1  -1      ossp-web/pkg/lib/index.wml
    1.5         +18 -6      ossp-web/pkg/lib/sio/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.50 -r1.51 news.txt
  --- ossp-web/new/news.txt	31 Jan 2003 19:07:55 -0000	1.50
  +++ ossp-web/new/news.txt	6 Feb 2003 14:38:31 -0000	1.51
  @@ -1,3 +1,4 @@
  +06-Feb-2003: Released L<OSSP sio> 0.9.0
   31-Jan-2003: Released L<OSSP sa> 1.0.5
   30-Jan-2003: Released L<OSSP ex> 1.0.2
   28-Jan-2003: Released L<OSSP sa> 1.0.4
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.47 -r1.48 index.wml
  --- ossp-web/pkg/lib/index.wml	31 Jan 2003 19:07:56 -0000	1.47
  +++ ossp-web/pkg/lib/index.wml	6 Feb 2003 14:38:34 -0000	1.48
  @@ -48,7 +48,7 @@
   			done=95 stable=none unstable=0.9.1>
     <pkg_item name="sio" longname="OSSP sio" type="lib"
               desc="Stream I/O"
  -			done=95 stable=none unstable=none>
  +			done=95 stable=none unstable=0.9.0>
     <pkg_item name="cfg" longname="OSSP cfg" type="lib"
               desc="Configuration Parsing"
   			done=95 stable=none unstable=0.9.0>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/sio/index.wml
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 index.wml
  --- ossp-web/pkg/lib/sio/index.wml	2 Oct 2002 12:44:43 -0000	1.4
  +++ ossp-web/pkg/lib/sio/index.wml	6 Feb 2003 14:38:35 -0000	1.5
  @@ -8,18 +8,26 @@
   <h2>Abstract</h2>
   
   OSSP sio is an I/O abstraction library for layered stream communication.
  +It was built to deal efficiently with complex I/O protocols and includes
  +capabilities to filter and multiplex data streams. Its modular structure
  +is fully supported by the underlying OSSP al data buffer library.
  +
  +<h2>Documentation</h2>
  +
  +<pkg_manpage name="sio" sect=3 path="/pkg/lib/sio/sio.pod">,
  +<pkg_manpage name="sio-config" sect=1 path="/pkg/lib/sio/sio-config.pod">.
   
   <h2>Authors</h2>
   
  -<pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  +<pkg_author name="Michael van Elst" mail="mlelstv@dev.de.cw.net">
   
   <h2>Status</h2>
   
   <pkg_status
  -    name="sio" assign="rse"
  -    stable="none"    stable_date="none"
  -    unstable="none"  unstable_date="none"
  -	done=15>
  +    name="sio" assign="mlelstv"
  +    stable="none" stable_date="none"
  +    unstable="0.9.0" unstable_date="06-Feb-2003"
  +	done=95>
   
   <h2>Source</h2>
   
  @@ -28,5 +36,9 @@
       url=$(FTP_ROOT_URL)/pkg/lib/sio/
       directory=$(FTP_ROOT_DIR)/pkg/lib/sio/
       files="sio-*.tar.gz" 
  -	stable="none" unstable="none">
  +	stable="sio-0\.9\.0\.tar\.gz" unstable="sa-SNAP.*\.tar.gz">
   	
  +<h2>Donation</h2>
  +
  +<pkg_donation name="sio" return="$(BASE_URL)/pkg/lib/sio/">
  +
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  6 15:40:54 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 84EED76832; Thu,  6 Feb 2003 15:40:54 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/sio/ index.wml
Message-Id: <20030206144054.84EED76832@mail.ossp.org>
Date: Thu,  6 Feb 2003 15:40:54 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   06-Feb-2003 15:40:54
  Branch: HEAD                             Handle: 2003020614405300

  Modified files:
    ossp-web/pkg/lib/sio    index.wml

  Log:
    fix name

  Summary:
    Revision    Changes     Path
    1.6         +1  -1      ossp-web/pkg/lib/sio/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/sio/index.wml
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 index.wml
  --- ossp-web/pkg/lib/sio/index.wml	6 Feb 2003 14:38:35 -0000	1.5
  +++ ossp-web/pkg/lib/sio/index.wml	6 Feb 2003 14:40:53 -0000	1.6
  @@ -36,7 +36,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/sio/
       directory=$(FTP_ROOT_DIR)/pkg/lib/sio/
       files="sio-*.tar.gz" 
  -	stable="sio-0\.9\.0\.tar\.gz" unstable="sa-SNAP.*\.tar.gz">
  +	stable="sio-0\.9\.0\.tar\.gz" unstable="sio-SNAP.*\.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  6 15:45:39 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C287C768D5; Thu,  6 Feb 2003 15:45:38 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ ChangeLog
Message-Id: <20030206144538.C287C768D5@mail.ossp.org>
Date: Thu,  6 Feb 2003 15:45:38 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Feb-2003 15:45:38
  Branch: HEAD                             Handle: 2003020614453700

  Modified files:
    ossp-pkg/sio            ChangeLog

  Log:
    fix initial entry

  Summary:
    Revision    Changes     Path
    1.3         +2  -1      ossp-pkg/sio/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ChangeLog
  --- ossp-pkg/sio/ChangeLog	6 Jan 2003 19:04:56 -0000	1.2
  +++ ossp-pkg/sio/ChangeLog	6 Feb 2003 14:45:37 -0000	1.3
  @@ -11,4 +11,5 @@
     This is a list of all changes to OSSP sio.
     For a more brief summary please have a look at the NEWS file.
   
  -  Initial release 0.9.0 (xx-Dec-2002)
  +  Initial release 0.9.0 (06-Feb-2003)
  +
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  6 16:05:38 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A61C7768D5; Thu,  6 Feb 2003 16:05:37 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/popt/ popt.c
Message-Id: <20030206150537.A61C7768D5@mail.ossp.org>
Date: Thu,  6 Feb 2003 16:05:37 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   06-Feb-2003 16:05:37
  Branch: HEAD                             Handle: 2003020615053600

  Modified files:
    ossp-pkg/popt           popt.c

  Log:
    remove unnecessary (re)definition

  Summary:
    Revision    Changes     Path
    1.4         +0  -2      ossp-pkg/popt/popt.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/popt/popt.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 popt.c
  --- ossp-pkg/popt/popt.c	20 Sep 2002 18:16:41 -0000	1.3
  +++ ossp-pkg/popt/popt.c	6 Feb 2003 15:05:36 -0000	1.4
  @@ -70,8 +70,6 @@
   #define alloca __builtin_alloca
   #endif
   
  -char *strdup(const char *str);
  -
   #include "popt.h"
   
   #ifndef H_POPTINT
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  6 16:06:30 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2AF49769FC; Thu,  6 Feb 2003 16:06:30 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/popt/ popt.c
Message-Id: <20030206150630.2AF49769FC@mail.ossp.org>
Date: Thu,  6 Feb 2003 16:06:30 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   06-Feb-2003 16:06:29
  Branch: HEAD                             Handle: 2003020615062800

  Modified files:
    ossp-pkg/popt           popt.c

  Log:
    avoid name space conflict on solaris

  Summary:
    Revision    Changes     Path
    1.5         +3  -3      ossp-pkg/popt/popt.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/popt/popt.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 popt.c
  --- ossp-pkg/popt/popt.c	6 Feb 2003 15:05:36 -0000	1.4
  +++ ossp-pkg/popt/popt.c	6 Feb 2003 15:06:28 -0000	1.5
  @@ -1037,10 +1037,10 @@
   								*((double *)opt->arg) = aDouble;
   							}
   							else {
  -#define _ABS(a)	((((a) - 0.0) < DBL_EPSILON) ? -(a) : (a))
  -								if ((_ABS(aDouble) - FLT_MAX) > DBL_EPSILON)
  +#define POPT_ABS(a)	((((a) - 0.0) < DBL_EPSILON) ? -(a) : (a))
  +								if ((POPT_ABS(aDouble) - FLT_MAX) > DBL_EPSILON)
   									return POPT_ERROR_OVERFLOW;
  -								if ((FLT_MIN - _ABS(aDouble)) > DBL_EPSILON)
  +								if ((FLT_MIN - POPT_ABS(aDouble)) > DBL_EPSILON)
   									return POPT_ERROR_OVERFLOW;
   								*((float *)opt->arg) = aDouble;
   							}
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  6 16:29:57 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F2B91769C5; Thu,  6 Feb 2003 16:29:56 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ test.sh
Message-Id: <20030206152956.F2B91769C5@mail.ossp.org>
Date: Thu,  6 Feb 2003 16:29:56 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   06-Feb-2003 16:29:56
  Branch: HEAD                             Handle: 2003020615295500

  Modified files:
    ossp-pkg/lmtp2nntp      test.sh

  Log:
    debian2 fails when attempting to bind client to wildcard address

  Summary:
    Revision    Changes     Path
    1.17        +9  -10     ossp-pkg/lmtp2nntp/test.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/test.sh
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 test.sh
  --- ossp-pkg/lmtp2nntp/test.sh	6 Feb 2003 14:17:56 -0000	1.16
  +++ ossp-pkg/lmtp2nntp/test.sh	6 Feb 2003 15:29:55 -0000	1.17
  @@ -16,10 +16,10 @@
   Message-Id: <200108141251.f7ECpmn74812@dev.de.cw.net>
   From: Thomas Lotterer <Thomas.Lotterer@example.com>
   Received: from cw.example.com (cw.example.com [10.1.1.32])
  -    by gateway.example.com (8.9.2/8.9.2/$Revision: 1.16 $) with SMTP id NAA08840
  +    by gateway.example.com (8.9.2/8.9.2/$Revision: 1.17 $) with SMTP id NAA08840
       for <thomas.lotterer@gateway.example.com>; Mon, 2 Apr 2001 13:20:25 +0200 (MET DST)
   Received: from history (history.example.org [195.143.102.41])
  -    by cw.example.com (8.11.0/8.11.0/$Revision: 1.16 $) with ESMTP id f32BKPb12235
  +    by cw.example.com (8.11.0/8.11.0/$Revision: 1.17 $) with ESMTP id f32BKPb12235
       for <thomas.lotterer@example.com>; Mon, 2 Apr 2001 13:20:25 +0200
   Received: from example.org (littlemua.example.org [195.143.103.160])
   	by history (8.8.8/8.8.8) with ESMTP id LAA12678;
  @@ -86,7 +86,6 @@
     STDIN="${PREFIX}stdin"
    STDOUT="${PREFIX}stdout"
    STDERR="${PREFIX}stderr"
  -  LOCAL="0.0.0.0"
      HOST="0.0.0.0"
     GROUP="my.test"
     MFILT=".+@(?:[^.]+\.)*example\.com"
  @@ -160,7 +159,7 @@
   echon "checking whether a valid fake posting succeeds ... "
   prolog
   newmsg
  -./lmtp2nntp <${STDIN} -b - -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 --timeoutnntpconnect=1 ${GROUP} >${STDOUT} 2>${STDERR} ; RC=$
  +./lmtp2nntp <${STDIN} -b - -o 250/2.0.0 -g arg -d ${HOST} ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 --timeoutnntpconnect=1 ${GROUP} >${STDOUT} 2>${STDERR} ; RC=$
   RC="";
   if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
   if [ 1 -eq `egrep <${STDOUT} '^250[- ].*pleased to meet you'    | wc -l` ]; then RC="${RC}LHLO "; fi
  @@ -182,7 +181,7 @@
   echon "checking whether -m option blocks invalid sender ... "
   prolog
   newmsg
  -( MFILT=".*@is.invalid" ; ./lmtp2nntp <${STDIN} -b - -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 --timeoutnntpconnect=1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
  +( MFILT=".*@is.invalid" ; ./lmtp2nntp <${STDIN} -b - -o 250/2.0.0 -g arg -d ${HOST} ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 --timeoutnntpconnect=1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
   RC="";
   if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
   if [ 1 -eq `egrep <${STDOUT} '^250[- ].+pleased to meet you'    | wc -l` ]; then RC="${RC}LHLO "; fi
  @@ -204,7 +203,7 @@
   echon "checking whether -s option rejects article with invalid size ... "
   prolog
   newmsg
  -./lmtp2nntp <${STDIN} -b - -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} ${LOG} -m "${MFILT}" -n ${NODE} -s 100 --timeoutnntpconnect=1 ${GROUP} >${STDOUT} 2>${STDERR} ; RC=$?
  +./lmtp2nntp <${STDIN} -b - -o 250/2.0.0 -g arg -d ${HOST} ${LOG} -m "${MFILT}" -n ${NODE} -s 100 --timeoutnntpconnect=1 ${GROUP} >${STDOUT} 2>${STDERR} ; RC=$?
   RC="";
   if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
   if [ 1 -eq `egrep <${STDOUT} '^250[- ].*pleased to meet you'    | wc -l` ]; then RC="${RC}LHLO "; fi
  @@ -243,7 +242,7 @@
   echon "checking whether -g envelope option blocks invalid group ... "
   prolog
   newmsg
  -( GROUP="foo.*" ; ./lmtp2nntp <${STDIN} -b - -c ${LOCAL} -o 250/2.0.0 -g envelope -d ${HOST} ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 --timeoutnntpconnect=1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
  +( GROUP="foo.*" ; ./lmtp2nntp <${STDIN} -b - -o 250/2.0.0 -g envelope -d ${HOST} ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 --timeoutnntpconnect=1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
   RC="";
   if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
   if [ 1 -eq `egrep <${STDOUT} '^250[- ].*pleased to meet you'    | wc -l` ]; then RC="${RC}LHLO "; fi
  @@ -266,7 +265,7 @@
   echon "checking whether -d option times out for invalid host ... "
   prolog
   newmsg
  -( HOST="10.255.255.255" ; ./lmtp2nntp <${STDIN} -b - -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 --timeoutnntpconnect=1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
  +( HOST="10.255.255.255" ; ./lmtp2nntp <${STDIN} -b - -o 250/2.0.0 -g arg -d ${HOST} ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 --timeoutnntpconnect=1 ${GROUP} >${STDOUT} 2>${STDERR} ) ; RC=$?
   RC="";
   if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
   if [ 1 -eq `egrep <${L2FILE} 'warning.+connect.+failed'         | wc -l` ]; then RC="${RC}conn "; fi
  @@ -283,7 +282,7 @@
   echon "checking whether -h option adds header/value pair ... "
   prolog
   newmsg
  -./lmtp2nntp <${STDIN} -b - -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} -h "::X-Gateway:added it!" ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 --timeoutnntpconnect=1 ${GROUP} >${STDOUT} 2>${STDERR}
  +./lmtp2nntp <${STDIN} -b - -o 250/2.0.0 -g arg -d ${HOST} -h "::X-Gateway:added it!" ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 --timeoutnntpconnect=1 ${GROUP} >${STDOUT} 2>${STDERR}
   RC="";
   if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
   if [ 1 -eq `egrep <${L2FILE} 'appending header X-Gateway:'      | wc -l` ]; then RC="${RC}head "; fi
  @@ -302,7 +301,7 @@
   echon "checking whether -r option rejects headers ... "
   prolog
   newmsg
  -./lmtp2nntp <${STDIN} -b - -c ${LOCAL} -o 250/2.0.0 -g arg -d ${HOST} -r'^X-Linefoldingtest:.*begun.$' ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 --timeoutnntpconnect=1 ${GROUP} >${STDOUT} 2>${STDERR}
  +./lmtp2nntp <${STDIN} -b - -o 250/2.0.0 -g arg -d ${HOST} -r'^X-Linefoldingtest:.*begun.$' ${LOG} -m "${MFILT}" -n ${NODE} -s 1500 --timeoutnntpconnect=1 ${GROUP} >${STDOUT} 2>${STDERR}
   RC="";
   if [ 1 -eq `egrep <${STDOUT} '^220[- ]LMTP Service ready'       | wc -l` ]; then RC="${RC}init "; fi
   if [ 1 -eq `egrep <${L2FILE} 'restricted header found'          | wc -l` ]; then RC="${RC}rest "; fi
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  6 16:35:47 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5CA99768D5; Thu,  6 Feb 2003 16:35:47 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ README lmtp2nntp_version.c
Message-Id: <20030206153547.5CA99768D5@mail.ossp.org>
Date: Thu,  6 Feb 2003 16:35:47 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   06-Feb-2003 16:35:47
  Branch: HEAD                             Handle: 2003020615354600

  Modified files:
    ossp-pkg/lmtp2nntp      README lmtp2nntp_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.26        +1  -1      ossp-pkg/lmtp2nntp/README
    1.10        +9  -9      ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/README
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 README
  --- ossp-pkg/lmtp2nntp/README	4 Feb 2003 15:03:49 -0000	1.25
  +++ ossp-pkg/lmtp2nntp/README	6 Feb 2003 15:35:46 -0000	1.26
  @@ -5,7 +5,7 @@
     |_|_|_| \___/|____/____/|_|    |_|_||_||_|\__| .__/____|_||_|_||_|\__| .__/
                                                  |_|                     |_|
     OSSP lmtp2nntp - Mail to News Gateway
  -  Version 1.2a7 (04-Feb-2003)
  +  Version 1.2a8 (06-Feb-2003)
   
     BEWARE! THIS IS ALPHA CODE
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 lmtp2nntp_version.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	4 Feb 2003 15:03:49 -0000	1.9
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	6 Feb 2003 15:35:46 -0000	1.10
  @@ -8,7 +8,7 @@
   #ifndef _LMTP2NNTP_VERSION_C_
   #define _LMTP2NNTP_VERSION_C_
   
  -#define LMTP2NNTP_VERSION 0x102007
  +#define LMTP2NNTP_VERSION 0x102008
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _LMTP2NNTP_VERSION_C_AS_HEADER_
   
   lmtp2nntp_version_t lmtp2nntp_version = {
  -    0x102007,
  -    "1.2a7",
  -    "1.2a7 (04-Feb-2003)",
  -    "This is OSSP lmtp2nntp, Version 1.2a7 (04-Feb-2003)",
  -    "OSSP lmtp2nntp 1.2a7 (04-Feb-2003)",
  -    "OSSP lmtp2nntp/1.2a7",
  -    "@(#)OSSP lmtp2nntp 1.2a7 (04-Feb-2003)",
  -    "$Id: lmtp2nntp_version.c,v 1.9 2003/02/04 15:03:49 thl Exp $"
  +    0x102008,
  +    "1.2a8",
  +    "1.2a8 (06-Feb-2003)",
  +    "This is OSSP lmtp2nntp, Version 1.2a8 (06-Feb-2003)",
  +    "OSSP lmtp2nntp 1.2a8 (06-Feb-2003)",
  +    "OSSP lmtp2nntp/1.2a8",
  +    "@(#)OSSP lmtp2nntp 1.2a8 (06-Feb-2003)",
  +    "$Id: lmtp2nntp_version.c,v 1.10 2003/02/06 15:35:46 thl Exp $"
   };
   
   #endif /* _LMTP2NNTP_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  6 17:58:41 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 54B81769C5; Thu,  6 Feb 2003 17:58:41 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val/ val.c
Message-Id: <20030206165841.54B81769C5@mail.ossp.org>
Date: Thu,  6 Feb 2003 17:58:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   06-Feb-2003 17:58:41
  Branch: HEAD                             Handle: 2003020616584000

  Modified files:
    ossp-pkg/val            val.c

  Log:
    swap keyptr/datptr to fix datptr alignment problem on non-i386
    architectures [mlelstv]

  Summary:
    Revision    Changes     Path
    1.14        +13 -13     ossp-pkg/val/val.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/val.c
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 val.c
  --- ossp-pkg/val/val.c	2 Feb 2003 14:22:43 -0000	1.13
  +++ ossp-pkg/val/val.c	6 Feb 2003 16:58:40 -0000	1.14
  @@ -123,8 +123,8 @@
   #define SEGINDEX(addr) (int)((addr) % SEGMENTSIZE)
   
   /* on-the-fly calculate lengths of key and data to reduce memory in element_t */
  -#define el_keylen(el) ((char *)((el)->e_datptr)-(char *)((el)->e_keyptr))
  -#define el_datlen(el) ((char *)((el)->e_endptr)-(char *)((el)->e_datptr))
  +#define el_keylen(el) ((char *)((el)->e_endptr)-(char *)((el)->e_keyptr))
  +#define el_datlen(el) ((char *)((el)->e_keyptr)-(char *)((el)->e_datptr))
   
   /*
    * BJDDJ Hash Function (Bob Jenkins, Dr. Dobbs Journal):
  @@ -384,15 +384,15 @@
       /* create a duplicate of key and data */
       if ((vp = malloc(keylen+datlen)) == NULL)
           return FALSE;
  -    memmove(vp, keyptr, keylen);
  -    memmove((char *)vp+keylen, datptr, datlen);
  -    keyptr = vp;
  -    datptr = (char *)vp+keylen;
  +    memmove(vp, datptr, datlen);
  +    memmove(((char *)vp)+datlen, keyptr, keylen);
  +    datptr = vp;
  +    keyptr = ((char *)vp)+datlen;
   
       if (bFound) {
           /* reuse existing element by freeing old contents */
  -        if (el->e_keyptr != NULL)
  -            free(el->e_keyptr);
  +        if (el->e_datptr != NULL)
  +            free(el->e_datptr);
       }
       else {
           /* allocate new element and chain into list */
  @@ -409,7 +409,7 @@
       /* insert contents into element structure */
       el->e_keyptr = (void *)keyptr;
       el->e_datptr = (void *)datptr;
  -    el->e_endptr = (char *)datptr+datlen;
  +    el->e_endptr = (char *)keyptr+keylen;
       el->e_hash   = hash;
   
       /* do we need to expand the table now? */
  @@ -481,8 +481,8 @@
               && el_keylen(el) == keylen
               && memcmp(el->e_keyptr, keyptr, el_keylen(el)) == 0) {
               /* free key+data memory chunk */
  -            if (el->e_keyptr != NULL)
  -                free(el->e_keyptr);
  +            if (el->e_datptr != NULL)
  +                free(el->e_datptr);
               /* remove element from collision chain */
               if (lel == NULL)
                   *pel = el->e_next; 
  @@ -553,8 +553,8 @@
               pel = &h->h_dir[i]->s_element[j];
               for (el = *pel; el != NULL; ) {
                   /* deallocate key+data memory chunk */
  -                if (el->e_keyptr != NULL)
  -                    free(el->e_keyptr);
  +                if (el->e_datptr != NULL)
  +                    free(el->e_datptr);
                   el_next = el->e_next;
                   free(el);
                   el = el_next;
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  6 20:39:05 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 92E21768D5; Thu,  6 Feb 2003 20:39:04 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ README lmtp2nntp_version.c
Message-Id: <20030206193904.92E21768D5@mail.ossp.org>
Date: Thu,  6 Feb 2003 20:39:04 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   06-Feb-2003 20:39:04
  Branch: HEAD                             Handle: 2003020619390300

  Modified files:
    ossp-pkg/lmtp2nntp      README lmtp2nntp_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.27        +1  -1      ossp-pkg/lmtp2nntp/README
    1.11        +9  -9      ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/README
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 README
  --- ossp-pkg/lmtp2nntp/README	6 Feb 2003 15:35:46 -0000	1.26
  +++ ossp-pkg/lmtp2nntp/README	6 Feb 2003 19:39:03 -0000	1.27
  @@ -5,7 +5,7 @@
     |_|_|_| \___/|____/____/|_|    |_|_||_||_|\__| .__/____|_||_|_||_|\__| .__/
                                                  |_|                     |_|
     OSSP lmtp2nntp - Mail to News Gateway
  -  Version 1.2a8 (06-Feb-2003)
  +  Version 1.2b1 (06-Feb-2003)
   
     BEWARE! THIS IS ALPHA CODE
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 lmtp2nntp_version.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	6 Feb 2003 15:35:46 -0000	1.10
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	6 Feb 2003 19:39:03 -0000	1.11
  @@ -8,7 +8,7 @@
   #ifndef _LMTP2NNTP_VERSION_C_
   #define _LMTP2NNTP_VERSION_C_
   
  -#define LMTP2NNTP_VERSION 0x102008
  +#define LMTP2NNTP_VERSION 0x102101
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _LMTP2NNTP_VERSION_C_AS_HEADER_
   
   lmtp2nntp_version_t lmtp2nntp_version = {
  -    0x102008,
  -    "1.2a8",
  -    "1.2a8 (06-Feb-2003)",
  -    "This is OSSP lmtp2nntp, Version 1.2a8 (06-Feb-2003)",
  -    "OSSP lmtp2nntp 1.2a8 (06-Feb-2003)",
  -    "OSSP lmtp2nntp/1.2a8",
  -    "@(#)OSSP lmtp2nntp 1.2a8 (06-Feb-2003)",
  -    "$Id: lmtp2nntp_version.c,v 1.10 2003/02/06 15:35:46 thl Exp $"
  +    0x102101,
  +    "1.2b1",
  +    "1.2b1 (06-Feb-2003)",
  +    "This is OSSP lmtp2nntp, Version 1.2b1 (06-Feb-2003)",
  +    "OSSP lmtp2nntp 1.2b1 (06-Feb-2003)",
  +    "OSSP lmtp2nntp/1.2b1",
  +    "@(#)OSSP lmtp2nntp 1.2b1 (06-Feb-2003)",
  +    "$Id: lmtp2nntp_version.c,v 1.11 2003/02/06 19:39:03 thl Exp $"
   };
   
   #endif /* _LMTP2NNTP_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  6 21:43:13 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A85CF768D5; Thu,  6 Feb 2003 21:43:12 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ devtool.conf
Message-Id: <20030206204312.A85CF768D5@mail.ossp.org>
Date: Thu,  6 Feb 2003 21:43:12 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   06-Feb-2003 21:43:12
  Branch: HEAD                             Handle: 2003020620431100

  Modified files:
    ossp-pkg/lmtp2nntp      devtool.conf

  Log:
    automatically keep ChangeLog up to date

  Summary:
    Revision    Changes     Path
    1.13        +2  -0      ossp-pkg/lmtp2nntp/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 devtool.conf
  --- ossp-pkg/lmtp2nntp/devtool.conf	4 Feb 2003 15:03:33 -0000	1.12
  +++ ossp-pkg/lmtp2nntp/devtool.conf	6 Feb 2003 20:43:11 -0000	1.13
  @@ -58,6 +58,8 @@
   %dist
       echo "+++ removing old tarballs"
       rm -f lmtp2nntp-*.tar.gz
  +    echo "+++ changelog"
  +    cvs2cl
       echo "+++ generating"
       ./devtool autoclean
       ./devtool autogen
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  6 22:02:06 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9E443768D5; Thu,  6 Feb 2003 22:02:05 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ README
Message-Id: <20030206210205.9E443768D5@mail.ossp.org>
Date: Thu,  6 Feb 2003 22:02:05 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   06-Feb-2003 22:02:04
  Branch: HEAD                             Handle: 2003020621020300

  Modified files:
    ossp-pkg/lmtp2nntp      README

  Log:
    features and documentation complete; BETA release

  Summary:
    Revision    Changes     Path
    1.28        +0  -11     ossp-pkg/lmtp2nntp/README
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/README
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 README
  --- ossp-pkg/lmtp2nntp/README	6 Feb 2003 19:39:03 -0000	1.27
  +++ ossp-pkg/lmtp2nntp/README	6 Feb 2003 21:02:03 -0000	1.28
  @@ -7,17 +7,6 @@
     OSSP lmtp2nntp - Mail to News Gateway
     Version 1.2b1 (06-Feb-2003)
   
  -  BEWARE! THIS IS ALPHA CODE
  -
  -  Use for evaluation. Functionality is mostly complete, see 00TODO.  Error
  -  handling and resource management needs some work. Documentation does not
  -  reflect changes and news for the v1.2 release.
  -
  -  The 1.2 alpha versions have been tested in a production environment
  -  and successfully gatewayed some thousand messages. Memory leaked an
  -  average of 30 bytes per article. No functional bugs were found, no
  -  coredumps were seen.
  -
     ABSTRACT
   
     The OSSP lmtp2nntp program is an LMTP service for use in conjunction
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  6 22:02:39 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 072E476A8F; Thu,  6 Feb 2003 22:02:39 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ NEWS
Message-Id: <20030206210239.072E476A8F@mail.ossp.org>
Date: Thu,  6 Feb 2003 22:02:39 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   06-Feb-2003 22:02:38
  Branch: HEAD                             Handle: 2003020621023800

  Modified files:
    ossp-pkg/lmtp2nntp      NEWS

  Log:
    mention platform support and OSSP spirit

  Summary:
    Revision    Changes     Path
    1.10        +16 -0      ossp-pkg/lmtp2nntp/NEWS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/NEWS
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 NEWS
  --- ossp-pkg/lmtp2nntp/NEWS	30 Jan 2003 19:42:12 -0000	1.9
  +++ ossp-pkg/lmtp2nntp/NEWS	6 Feb 2003 21:02:38 -0000	1.10
  @@ -12,6 +12,22 @@
     carefully, there were significant changes which are not compatible with
     previous versions.
   
  +  Platform support
  +
  +  The software was successfully compiled and tested on the platforms
  +  listed below. The OSSP project makes every effort to maximize the
  +  portability of our software with current POSIX compliant systems being
  +  the preferred choice. You can assume to succeed in similar enviroments
  +  as well.
  +
  +  - FreeBSD Unix 4.7-STABLE
  +  - FreeBSD Unix 5.0-CURRENT
  +  - RedHat Linux 8.0
  +  - Debian GNU/Linux 2.2
  +  - Debian GNU/Linux 3.0
  +  - Sun Solaris 8
  +  - Sun Solaris 9
  +
     New features:
     - logging to the extreme (file, local/remote syslog, smtp, irc) [1]
     - long options, better option parsing and syntax checking [2]
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  6 22:22:36 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1AA83769E0; Thu,  6 Feb 2003 22:22:36 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ INSTALL
Message-Id: <20030206212236.1AA83769E0@mail.ossp.org>
Date: Thu,  6 Feb 2003 22:22:36 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   06-Feb-2003 22:22:35
  Branch: HEAD                             Handle: 2003020621223400

  Modified files:
    ossp-pkg/lmtp2nntp      INSTALL

  Log:
    consistently omit colon after file names

  Summary:
    Revision    Changes     Path
    1.16        +3  -3      ossp-pkg/lmtp2nntp/INSTALL
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/INSTALL
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 INSTALL
  --- ossp-pkg/lmtp2nntp/INSTALL	5 Feb 2003 15:34:19 -0000	1.15
  +++ ossp-pkg/lmtp2nntp/INSTALL	6 Feb 2003 21:22:34 -0000	1.16
  @@ -108,11 +108,11 @@
     4. Add the following entries to your virtual user table 
        and your mailer table
   
  -     virtusertable:
  +     virtusertable
        |
        | posting+*@gateway.example.com %2@lmtp2nntp.invalid
   
  -     mailertable:
  +     mailertable
        |
        | lmtp2nntp.invalid lmtp2nntp:news
   
  @@ -142,7 +142,7 @@
        "news.example.com" virtually provide mail to news gateway
        functionality:
   
  -     virtusertable:
  +     virtusertable
        |
        | @news.example.com %1@lmtp2nntp.invalid
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Feb  7 21:47:53 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 67D4376A35; Fri,  7 Feb 2003 21:47:53 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ ChangeLog TODO sa.ac sa.c sa_test.c
Message-Id: <20030207204753.67D4376A35@mail.ossp.org>
Date: Fri,  7 Feb 2003 21:47:53 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Feb-2003 21:47:53
  Branch: HEAD                             Handle: 2003020720475100

  Modified files:
    ossp-pkg/sa             ChangeLog TODO sa.ac sa.c sa_test.c

  Log:
    Add internal address resolving support via the new IEEE Std
    1003.1g-2000 ("POSIX.1") getaddrinfo(3) API. This especially
    provides more portable IPv6 address resolving.

  Summary:
    Revision    Changes     Path
    1.24        +7  -0      ossp-pkg/sa/ChangeLog
    1.48        +0  -7      ossp-pkg/sa/TODO
    1.14        +1  -1      ossp-pkg/sa/sa.ac
    1.74        +37 -1      ossp-pkg/sa/sa.c
    1.25        +22 -13     ossp-pkg/sa/sa_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 ChangeLog
  --- ossp-pkg/sa/ChangeLog	31 Jan 2003 18:58:18 -0000	1.23
  +++ ossp-pkg/sa/ChangeLog	7 Feb 2003 20:47:51 -0000	1.24
  @@ -11,6 +11,13 @@
     This is a list of all changes to OSSP sa.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 1.0.5 and 1.1.0 (31-Jan-2003 to xx-Feb-2003)
  +
  +   o Added internal address resolving support via the new IEEE Std
  +     1003.1g-2000 ("POSIX.1") getaddrinfo(3) API. This especially
  +     provides more portable IPv6 address resolving.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
     Changes between 1.0.4 and 1.0.5 (28-Jan-2003 to 31-Jan-2003)
   
      o Fixed test suite library (ts.c): the ts_suite_free()
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/TODO
  ============================================================================
  $ cvs diff -u -r1.47 -r1.48 TODO
  --- ossp-pkg/sa/TODO	7 Nov 2002 13:05:43 -0000	1.47
  +++ ossp-pkg/sa/TODO	7 Feb 2003 20:47:51 -0000	1.48
  @@ -33,13 +33,6 @@
     o Consistently use PF_XXX instead of AF_XXX whenever not directly
       address related things are done in order to even closer conform to POSIX.
   
  -  o Support for newer DNS Resolving Functions.
  -
  -    In IPv6 land there are usually the newer DNS resolving functions
  -    getaddrinfo(3) and getnameinfo(3). Perhaps we should support these in
  -    favor of gethostbyname(3) and gethostbyaddr(3) because the chance is
  -    higher that they support IPv6 in case we are in IPv6 land.
  -
     o DNS Resolving and multiple results.
   
       On DNS resolving name, multiple result addresses can be returned.  Either
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.ac
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 sa.ac
  --- ossp-pkg/sa/sa.ac	6 Jan 2003 13:11:23 -0000	1.13
  +++ ossp-pkg/sa/sa.ac	7 Feb 2003 20:47:51 -0000	1.14
  @@ -72,7 +72,7 @@
       AC_CHECK_HEADERS(string.h sys/types.h sys/socket.h netdb.h netinet/in.h)
   
       #   check for system functions
  -    AC_CHECK_FUNCS(inet_addr inet_aton inet_pton inet_ntoa inet_ntop snprintf)
  +    AC_CHECK_FUNCS(inet_addr inet_aton inet_pton inet_ntoa inet_ntop snprintf getaddrinfo)
   
       dnl # check for network/socket size type
       SA_CHECK_TYPEDEF(socklen_t, sys/socket.h)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.c
  ============================================================================
  $ cvs diff -u -r1.73 -r1.74 sa.c
  --- ossp-pkg/sa/sa.c	6 Jan 2003 13:11:23 -0000	1.73
  +++ ossp-pkg/sa/sa.c	7 Feb 2003 20:47:51 -0000	1.74
  @@ -252,6 +252,7 @@
       ((tv).tv_sec == 0 && (tv).tv_usec == 0)
   
   /* convert Internet address from presentation to network format */
  +#ifndef HAVE_GETADDRINFO
   static int sa_inet_pton(int family, const char *strptr, void *addrptr)
   {
   #ifdef HAVE_INET_PTON
  @@ -278,6 +279,7 @@
       return 0;
   #endif
   }
  +#endif /* !HAVE_GETADDRINFO */
   
   /* convert Internet address from network to presentation format */
   static const char *sa_inet_ntop(int family, const void *src, char *dst, size_t size)
  @@ -481,13 +483,19 @@
       socklen_t sl;
       struct sockaddr *sa;
       struct sockaddr_un un;
  +#ifdef HAVE_GETADDRINFO
  +    struct addrinfo ai_hints;
  +    struct addrinfo *ai = NULL;
  +    int err;
  +#else
       struct sockaddr_in sa4;
   #ifdef AF_INET6
       struct sockaddr_in6 sa6;
   #endif
  -    int bIPv6;
       struct hostent *he;
  +#endif
       struct servent *se;
  +    int bIPv6;
       int bNumeric;
       char *cpHost;
       char *cpPort;
  @@ -598,6 +606,28 @@
               nPort = ntohs(se->s_port);
           }
   
  +#ifdef HAVE_GETADDRINFO
  +        memset(&ai_hints, 0, sizeof(ai_hints));
  +        ai_hints.ai_family = PF_UNSPEC;
  +        if ((err = getaddrinfo(cpHost, NULL, &ai_hints, &ai)) != 0) {
  +            if (err == EAI_MEMORY)
  +                return SA_RC(SA_ERR_MEM);
  +            else if (err == EAI_SYSTEM)
  +                return SA_RC(SA_ERR_SYS);
  +            else
  +                return SA_RC(SA_ERR_ARG);
  +        }
  +        sa = ai->ai_addr;
  +        sl = ai->ai_addrlen;
  +        sf = ai->ai_family;
  +        if (sf == AF_INET)
  +            ((struct sockaddr_in *)sa)->sin_port = htons(nPort);
  +        else if (sf == AF_INET6)
  +            ((struct sockaddr_in6 *)sa)->sin6_port = htons(nPort);
  +        else
  +            return SA_RC(SA_ERR_ARG);
  +#else /* !HAVE_GETADDRINFO */
  +
           /* mandatory(!) socket address structure initialization */
           memset(&sa4, 0, sizeof(sa4));
   #ifdef AF_INET6
  @@ -648,6 +678,7 @@
           }
           else
               return SA_RC(SA_ERR_ARG);
  +#endif /* !HAVE_GETADDRINFO */
       }
       else
           return SA_RC(SA_ERR_ARG);
  @@ -660,6 +691,11 @@
       memcpy(saa->saBuf, sa, (size_t)sl);
       saa->slBuf = sl;
       saa->nFamily = (int)sf;
  +
  +#ifdef HAVE_GETADDRINFO
  +    if (ai != NULL)
  +        freeaddrinfo(ai);
  +#endif
   
       return SA_OK;
   }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa_test.c
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 sa_test.c
  --- ossp-pkg/sa/sa_test.c	31 Jan 2003 18:34:06 -0000	1.24
  +++ ossp-pkg/sa/sa_test.c	7 Feb 2003 20:47:51 -0000	1.25
  @@ -56,18 +56,19 @@
           char *in;
           sa_rc_t rv;
           char *out;
  +        char *out_alt;
       } table[] = {
           /* positive tests */
  -        { "inet://0.0.0.0:0", SA_OK, "inet://0.0.0.0:0" },
  -        { "inet://127.0.0.1:514", SA_OK, "inet://127.0.0.1:514" },
  -        { "inet://localhost:syslog#udp", SA_OK, "inet://127.0.0.1:514" },
  -        { "inet://localhost:smtp", SA_OK, "inet://127.0.0.1:25" },
  -        { "unix:/tmp/socket", SA_OK, "unix:/tmp/socket" },
  +        { "inet://0.0.0.0:0", SA_OK, "inet://0.0.0.0:0", NULL },
  +        { "inet://127.0.0.1:514", SA_OK, "inet://127.0.0.1:514", NULL },
  +        { "inet://localhost:syslog#udp", SA_OK, "inet://127.0.0.1:514", "inet://[::1]:514" },
  +        { "inet://localhost:smtp", SA_OK, "inet://127.0.0.1:25", "inet://[::1]:25" },
  +        { "unix:/tmp/socket", SA_OK, "unix:/tmp/socket", NULL },
           /* negative tests */
  -        { "inet:", SA_ERR_ARG, NULL },
  -        { "inet://1.2.3.4.5:0", SA_ERR_ARG, NULL },
  -        { "inet://just-hostname", SA_ERR_ARG, NULL },
  -        { "unix:", SA_ERR_ARG, NULL }
  +        { "inet:", SA_ERR_ARG, NULL, NULL },
  +        { "inet://1.2.3.4.5:0", SA_ERR_ARG, NULL, NULL },
  +        { "inet://just-hostname", SA_ERR_ARG, NULL, NULL },
  +        { "unix:", SA_ERR_ARG, NULL, NULL }
       };
   
       ts_test_check(TS_CTX, "sa_addr_create");
  @@ -83,10 +84,18 @@
           if ((rv = sa_addr_a2u(saa, &cp)) != SA_OK)
               ts_test_fail(TS_CTX, "sa_addr_u2a -> %d[%s] (expected %d[%s])",
                            rv, sa_error(rv), SA_OK, sa_error(SA_OK));
  -        if (table[i].rv == SA_OK)
  -            if (strcmp(cp, table[i].out) != 0)
  -                ts_test_fail(TS_CTX, "sa_addr_a2u -> \"%s\" (expected \"%s\")",
  -                             cp, table[i].out);
  +        if (table[i].rv == SA_OK) {
  +            if (table[i].out_alt != NULL) {
  +                if (strcmp(cp, table[i].out) != 0 && strcmp(cp, table[i].out_alt) != 0)
  +                    ts_test_fail(TS_CTX, "sa_addr_a2u -> \"%s\" (expected \"%s\" or \"%s\")",
  +                                 cp, table[i].out, table[i].out_alt);
  +            }
  +            else {
  +                if (strcmp(cp, table[i].out) != 0)
  +                    ts_test_fail(TS_CTX, "sa_addr_a2u -> \"%s\" (expected \"%s\")",
  +                                 cp, table[i].out);
  +            }
  +        }
       }
       ts_test_check(TS_CTX, "sa_addr_destroy");
       if ((rv = sa_addr_destroy(saa)) != SA_OK)
  @@ .

From ossp-cvs-owner@ossp.org  Sun Feb  9 15:43:30 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E649276AF7; Sun,  9 Feb 2003 15:43:29 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ ChangeLog sa_test.c
Message-Id: <20030209144329.E649276AF7@mail.ossp.org>
Date: Sun,  9 Feb 2003 15:43:29 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Feb-2003 15:43:29
  Branch: HEAD                             Handle: 2003020914432800

  Modified files:
    ossp-pkg/sa             ChangeLog sa_test.c

  Log:
    Fix memory leak in test suite (sa_test.c).
    (detected by valgrind, see http://developer.kde.org/~sewardj/)

  Summary:
    Revision    Changes     Path
    1.25        +3  -0      ossp-pkg/sa/ChangeLog
    1.26        +4  -1      ossp-pkg/sa/sa_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 ChangeLog
  --- ossp-pkg/sa/ChangeLog	7 Feb 2003 20:47:51 -0000	1.24
  +++ ossp-pkg/sa/ChangeLog	9 Feb 2003 14:43:28 -0000	1.25
  @@ -13,6 +13,9 @@
   
     Changes between 1.0.5 and 1.1.0 (31-Jan-2003 to xx-Feb-2003)
   
  +   o Fix memory leak in test suite (sa_test.c).
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
      o Added internal address resolving support via the new IEEE Std
        1003.1g-2000 ("POSIX.1") getaddrinfo(3) API. This especially
        provides more portable IPv6 address resolving.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa_test.c
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 sa_test.c
  --- ossp-pkg/sa/sa_test.c	7 Feb 2003 20:47:51 -0000	1.25
  +++ ossp-pkg/sa/sa_test.c	9 Feb 2003 14:43:28 -0000	1.26
  @@ -81,9 +81,11 @@
               ts_test_fail(TS_CTX, "sa_addr_a2u -> %d[%s] (expected %d[%s])",
                            rv, sa_error(rv), table[i].rv, sa_error(table[i].rv));
           ts_test_check(TS_CTX, "sa_addr_a2u");
  -        if ((rv = sa_addr_a2u(saa, &cp)) != SA_OK)
  +        if ((rv = sa_addr_a2u(saa, &cp)) != SA_OK) {
               ts_test_fail(TS_CTX, "sa_addr_u2a -> %d[%s] (expected %d[%s])",
                            rv, sa_error(rv), SA_OK, sa_error(SA_OK));
  +            continue;
  +        }
           if (table[i].rv == SA_OK) {
               if (table[i].out_alt != NULL) {
                   if (strcmp(cp, table[i].out) != 0 && strcmp(cp, table[i].out_alt) != 0)
  @@ -96,6 +98,7 @@
                                    cp, table[i].out);
               }
           }
  +        free(cp);
       }
       ts_test_check(TS_CTX, "sa_addr_destroy");
       if ((rv = sa_addr_destroy(saa)) != SA_OK)
  @@ .

From ossp-cvs-owner@ossp.org  Sun Feb  9 19:15:37 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 77C6576AFD; Sun,  9 Feb 2003 19:15:36 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex/ ChangeLog ts.c
Message-Id: <20030209181536.77C6576AFD@mail.ossp.org>
Date: Sun,  9 Feb 2003 19:15:36 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Feb-2003 19:15:36
  Branch: HEAD                             Handle: 2003020918153301

  Modified files:
    ossp-pkg/ex             ChangeLog ts.c

  Log:
    Fixed test suite library (ts.c): the ts_suite_free()
    function performed an illegal iteration for freeing elements (they
    were freed but still references for traversing to next element).
    This is now solved by a look-ahead traversion.

  Summary:
    Revision    Changes     Path
    1.7         +8  -0      ossp-pkg/ex/ChangeLog
    1.4         +13 -9      ossp-pkg/ex/ts.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ChangeLog
  --- ossp-pkg/ex/ChangeLog	30 Jan 2003 10:59:34 -0000	1.6
  +++ ossp-pkg/ex/ChangeLog	9 Feb 2003 18:15:33 -0000	1.7
  @@ -11,6 +11,14 @@
   
     This is the list of all changes to the OSSP ex source tree.
   
  +  Changes between 1.0.2 and 1.0.3 (30-Jan-2003 to xx-Feb-2003)
  +
  +   *) Fixed test suite library (ts.c): the ts_suite_free()
  +      function performed an illegal iteration for freeing elements (they
  +      were freed but still references for traversing to next element).
  +      This is now solved by a look-ahead traversion.
  +      [Ralf S. Engelschall, Brian T. Egleston <brian@egleston.com>]
  +
     Changes between 1.0.1 and 1.0.2 (06-Jan-2003 to 30-Jan-2003)
   
      *) Polished and enhanced the manual page ex(3).
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ts.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ts.c
  --- ossp-pkg/ex/ts.c	30 Jan 2003 11:04:42 -0000	1.3
  +++ ossp-pkg/ex/ts.c	9 Feb 2003 18:15:34 -0000	1.4
  @@ -2,7 +2,7 @@
   **  TS - OSSP Test Suite Library
   **  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
   **  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2002 Cable & Wireless Germany <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP TS, a small test suite library which
   **  can be found at http://www.ossp.org/pkg/ts/.
  @@ -76,6 +76,10 @@
       for ((ep)  = RING_FIRST((hp)); \
            (ep) != RING_SENTINEL((hp), elem, link); \
            (ep)  = RING_NEXT((ep), link))
  +#define RING_FOREACH_LA(ep, epT, hp, elem, link) \
  +    for ((ep)  = RING_FIRST((hp)), (epT) = RING_NEXT((ep), link); \
  +         (ep) != RING_SENTINEL((hp), elem, link); \
  +         (ep)  = (epT), (epT) = RING_NEXT((epT), link))
   
   /* test suite test log */
   struct tstl_st;
  @@ -126,7 +130,7 @@
       int n;
       int bytes;
   
  -    if (format == NULL || ap == NULL)
  +    if (format == NULL)
           return -1;
       bytes = 0;
       while (*format != '\0') {
  @@ -200,7 +204,7 @@
       int n;
       va_list ap2;
   
  -    if (format == NULL || ap == NULL)
  +    if (format == NULL)
           return NULL;
       ap2 = ap;
       if ((n = ts_suite_mvxprintf(NULL, 0, format, ap)) == -1)
  @@ -367,15 +371,15 @@
   /* destroy test suite */
   void ts_suite_free(ts_suite_t *ts)
   {
  -    ts_test_t *tst;
  -    tstc_t *tstc;
  -    tstl_t *tstl;
  +    ts_test_t *tst, *tstT;
  +    tstc_t *tstc, *tstcT;
  +    tstl_t *tstl, *tstlT;
   
       if (ts == NULL)
           return;
  -    RING_FOREACH(tst, &ts->tests, ts_test_t, next) {
  -        RING_FOREACH(tstc, &tst->checks, tstc_t, next) {
  -            RING_FOREACH(tstl, &tstc->logs, tstl_t, next) {
  +    RING_FOREACH_LA(tst, tstT, &ts->tests, ts_test_t, next) {
  +        RING_FOREACH_LA(tstc, tstcT, &tst->checks, tstc_t, next) {
  +            RING_FOREACH_LA(tstl, tstlT, &tstc->logs, tstl_t, next) {
                   free(tstl->text);
               }
               free(tstc->title);
  @@ .

From ossp-cvs-owner@ossp.org  Sun Feb  9 20:57:23 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4299376AF8; Sun,  9 Feb 2003 20:57:23 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ sio_fd.c
Message-Id: <20030209195723.4299376AF8@mail.ossp.org>
Date: Sun,  9 Feb 2003 20:57:23 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Feb-2003 20:57:23
  Branch: HEAD                             Handle: 2003020919572200

  Modified files:
    ossp-pkg/sio            sio_fd.c

  Log:
    Fix memory leak.

  Summary:
    Revision    Changes     Path
    1.14        +2  -0      ossp-pkg/sio/sio_fd.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_fd.c
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 sio_fd.c
  --- ossp-pkg/sio/sio_fd.c	6 Jan 2003 19:04:56 -0000	1.13
  +++ ossp-pkg/sio/sio_fd.c	9 Feb 2003 19:57:22 -0000	1.14
  @@ -111,6 +111,8 @@
   static
   sio_rc_t fd_cleanup(sio_t *sio, void *u)
   {
  +    if (u != NULL)
  +        free(u);
       return SIO_OK;
   }
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Feb  9 22:39:18 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 583F776AFD; Sun,  9 Feb 2003 22:39:18 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ sio_fd.c sio_sa.c
Message-Id: <20030209213918.583F776AFD@mail.ossp.org>
Date: Sun,  9 Feb 2003 22:39:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   09-Feb-2003 22:39:18
  Branch: HEAD                             Handle: 2003020921391700

  Modified files:
    ossp-pkg/sio            sio_fd.c sio_sa.c

  Log:
    fix memory leak.
    align code with other modules

  Summary:
    Revision    Changes     Path
    1.15        +4  -2      ossp-pkg/sio/sio_fd.c
    1.9         +4  -0      ossp-pkg/sio/sio_sa.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_fd.c
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 sio_fd.c
  --- ossp-pkg/sio/sio_fd.c	9 Feb 2003 19:57:22 -0000	1.14
  +++ ossp-pkg/sio/sio_fd.c	9 Feb 2003 21:39:17 -0000	1.15
  @@ -111,8 +111,10 @@
   static
   sio_rc_t fd_cleanup(sio_t *sio, void *u)
   {
  -    if (u != NULL)
  -        free(u);
  +    private_t *my = (private_t *)u;
  +
  +    free(my);
  +
       return SIO_OK;
   }
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_sa.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 sio_sa.c
  --- ossp-pkg/sio/sio_sa.c	20 Jan 2003 19:12:54 -0000	1.8
  +++ ossp-pkg/sio/sio_sa.c	9 Feb 2003 21:39:17 -0000	1.9
  @@ -120,6 +120,10 @@
   static
   sio_rc_t saw_cleanup(sio_t *sio, void *u)
   {
  +    private_t *my = (private_t *)u;
  +
  +    free(my);
  +
       return SIO_OK;
   }
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 10 11:13:39 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 59C2376B02; Mon, 10 Feb 2003 11:13:38 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex/ devtool ts.c ts.h ossp-pkg/l2/ l2_ut_sa.c l2_...
Message-Id: <20030210101338.59C2376B02@mail.ossp.org>
Date: Mon, 10 Feb 2003 11:13:38 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   10-Feb-2003 11:13:38
  Branch: HEAD                             Handle: 2003021010131024

  Modified files:
    ossp-pkg/ex             devtool ts.c ts.h
    ossp-pkg/l2             l2_ut_sa.c l2_ut_sa.h
    ossp-pkg/lmtp2nntp      Makefile.in README aclocal.m4 configure.ac devtool
                            devtool.func lmtp2nntp.pod lmtp2nntp_argz.c
                            lmtp2nntp_argz.h lmtp2nntp_daemon.c
                            lmtp2nntp_daemon.h lmtp2nntp_global.h
                            lmtp2nntp_lmtp.c lmtp2nntp_lmtp.h lmtp2nntp_main.c
                            lmtp2nntp_msg.c lmtp2nntp_msg.h lmtp2nntp_nntp.c
                            lmtp2nntp_nntp.h lmtp2nntp_shpat.c
                            lmtp2nntp_shpat.h
    ossp-pkg/pcre           devtool.func pcre-config.in
    ossp-pkg/popt           devtool
    ossp-pkg/sa             configure.ac ts.c
    ossp-pkg/str            .dmallocrc
    ossp-pkg/tai            devtool
    ossp-pkg/val            devtool

  Log:
    extend copyright messages based on CVS information

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/ex/devtool
    1.5         +3  -3      ossp-pkg/ex/ts.c
    1.3         +3  -3      ossp-pkg/ex/ts.h
    1.21        +3  -3      ossp-pkg/l2/l2_ut_sa.c
    1.18        +3  -3      ossp-pkg/l2/l2_ut_sa.h
    1.54        +3  -3      ossp-pkg/lmtp2nntp/Makefile.in
    1.29        +3  -3      ossp-pkg/lmtp2nntp/README
    1.10        +3  -3      ossp-pkg/lmtp2nntp/aclocal.m4
    1.33        +6  -6      ossp-pkg/lmtp2nntp/configure.ac
    1.4         +1  -1      ossp-pkg/lmtp2nntp/devtool
    1.6         +1  -1      ossp-pkg/lmtp2nntp/devtool.func
    1.41        +3  -3      ossp-pkg/lmtp2nntp/lmtp2nntp.pod
    1.5         +3  -3      ossp-pkg/lmtp2nntp/lmtp2nntp_argz.c
    1.4         +3  -3      ossp-pkg/lmtp2nntp/lmtp2nntp_argz.h
    1.4         +3  -3      ossp-pkg/lmtp2nntp/lmtp2nntp_daemon.c
    1.3         +3  -3      ossp-pkg/lmtp2nntp/lmtp2nntp_daemon.h
    1.7         +3  -3      ossp-pkg/lmtp2nntp/lmtp2nntp_global.h
    1.5         +3  -3      ossp-pkg/lmtp2nntp/lmtp2nntp_lmtp.c
    1.4         +3  -3      ossp-pkg/lmtp2nntp/lmtp2nntp_lmtp.h
    1.66        +3  -3      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
    1.37        +3  -3      ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
    1.10        +3  -3      ossp-pkg/lmtp2nntp/lmtp2nntp_msg.h
    1.5         +3  -3      ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.c
    1.7         +3  -3      ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.h
    1.5         +3  -3      ossp-pkg/lmtp2nntp/lmtp2nntp_shpat.c
    1.4         +3  -3      ossp-pkg/lmtp2nntp/lmtp2nntp_shpat.h
    1.4         +1  -1      ossp-pkg/pcre/devtool.func
    1.4         +1  -1      ossp-pkg/pcre/pcre-config.in
    1.2         +1  -1      ossp-pkg/popt/devtool
    1.13        +3  -3      ossp-pkg/sa/configure.ac
    1.8         +3  -3      ossp-pkg/sa/ts.c
    1.2         +1  -1      ossp-pkg/str/.dmallocrc
    1.2         +1  -1      ossp-pkg/tai/devtool
    1.2         +1  -1      ossp-pkg/val/devtool
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/devtool
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 devtool
  --- ossp-pkg/ex/devtool	26 Jan 2002 20:12:19 -0000	1.1
  +++ ossp-pkg/ex/devtool	10 Feb 2003 10:13:20 -0000	1.2
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  devtool -- Development Tool
  -##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
   ##
   
   if [ $# -eq 0 ]; then
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ts.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ts.c
  --- ossp-pkg/ex/ts.c	9 Feb 2003 18:15:34 -0000	1.4
  +++ ossp-pkg/ex/ts.c	10 Feb 2003 10:13:20 -0000	1.5
  @@ -1,8 +1,8 @@
   /*
   **  TS - OSSP Test Suite Library
  -**  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP TS, a small test suite library which
   **  can be found at http://www.ossp.org/pkg/ts/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ts.h
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ts.h
  --- ossp-pkg/ex/ts.h	30 Jan 2003 11:04:42 -0000	1.2
  +++ ossp-pkg/ex/ts.h	10 Feb 2003 10:13:21 -0000	1.3
  @@ -1,8 +1,8 @@
   /*
   **  TS - OSSP Test Suite Library
  -**  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2002 Cable & Wireless Germany <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP TS, a small test suite library which
   **  can be found at http://www.ossp.org/pkg/ts/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_sa.c
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 l2_ut_sa.c
  --- ossp-pkg/l2/l2_ut_sa.c	9 Nov 2002 14:44:31 -0000	1.20
  +++ ossp-pkg/l2/l2_ut_sa.c	10 Feb 2003 10:13:23 -0000	1.21
  @@ -1,8 +1,8 @@
   /*
   **  OSSP sa - Socket Abstraction
  -**  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP sa, a socket abstraction library which
   **  can be found at http://www.ossp.org/pkg/lib/sa/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_sa.h
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 l2_ut_sa.h
  --- ossp-pkg/l2/l2_ut_sa.h	23 Jan 2003 16:25:06 -0000	1.17
  +++ ossp-pkg/l2/l2_ut_sa.h	10 Feb 2003 10:13:23 -0000	1.18
  @@ -1,8 +1,8 @@
   /*
   **  OSSP sa - Socket Abstraction
  -**  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP sa, a socket abstraction library which
   **  can be found at http://www.ossp.org/pkg/lib/sa/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.53 -r1.54 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	30 Jan 2003 19:45:19 -0000	1.53
  +++ ossp-pkg/lmtp2nntp/Makefile.in	10 Feb 2003 10:13:10 -0000	1.54
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP lmtp2nntp - Mail to News Gateway
  -##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   ##  mailer which forwards mails as Usenet news articles via NNTP.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/README
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 README
  --- ossp-pkg/lmtp2nntp/README	6 Feb 2003 21:02:03 -0000	1.28
  +++ ossp-pkg/lmtp2nntp/README	10 Feb 2003 10:13:10 -0000	1.29
  @@ -22,9 +22,9 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   
     This file is part of OSSP lmtp2nntp, an LMTP speaking local
     mailer which forwards mails as Usenet news articles via NNTP.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 aclocal.m4
  --- ossp-pkg/lmtp2nntp/aclocal.m4	30 Jan 2003 19:42:12 -0000	1.9
  +++ ossp-pkg/lmtp2nntp/aclocal.m4	10 Feb 2003 10:13:10 -0000	1.10
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP lmtp2nntp - Mail to News Gateway
  -dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   dnl ##  mailer which forwards mails as Usenet news articles via NNTP.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/configure.ac
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 configure.ac
  --- ossp-pkg/lmtp2nntp/configure.ac	30 Jan 2003 19:47:52 -0000	1.32
  +++ ossp-pkg/lmtp2nntp/configure.ac	10 Feb 2003 10:13:10 -0000	1.33
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP lmtp2nntp - Mail to News Gateway
  -dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   dnl ##  mailer which forwards mails as Usenet news articles via NNTP.
  @@ -33,9 +33,9 @@
   dnl #   announce our version
   V=`./shtool version -lc -dlong lmtp2nntp_version.c`
   ./shtool echo -e "Configuring %BOSSP lmtp2nntp%b, Version %B${V}%b"
  -echo "Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>"
  -echo "Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>"
  -echo "Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>"
  +echo "Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>"
  +echo "Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>"
  +echo "Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>"
   
   dnl #   perform feature tests
   AC_PROG_MAKE_SET
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/devtool
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 devtool
  --- ossp-pkg/lmtp2nntp/devtool	30 Jan 2003 19:45:19 -0000	1.3
  +++ ossp-pkg/lmtp2nntp/devtool	10 Feb 2003 10:13:11 -0000	1.4
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  devtool -- Development Tool
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   if [ $# -eq 0 ]; then
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/devtool.func
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 devtool.func
  --- ossp-pkg/lmtp2nntp/devtool.func	30 Jan 2003 19:45:19 -0000	1.5
  +++ ossp-pkg/lmtp2nntp/devtool.func	10 Feb 2003 10:13:11 -0000	1.6
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   devtool_require () {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ============================================================================
  $ cvs diff -u -r1.40 -r1.41 lmtp2nntp.pod
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.pod	30 Jan 2003 19:45:19 -0000	1.40
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.pod	10 Feb 2003 10:13:11 -0000	1.41
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP lmtp2nntp - Mail to News Gateway
  -##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   ##  mailer which forwards mails as Usenet news articles via NNTP.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_argz.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 lmtp2nntp_argz.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_argz.c	30 Jan 2003 19:45:19 -0000	1.4
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_argz.c	10 Feb 2003 10:13:12 -0000	1.5
  @@ -1,8 +1,8 @@
   /*
   **  OSSP lmtp2nntp - Mail to News Gateway
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_argz.h
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 lmtp2nntp_argz.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_argz.h	30 Jan 2003 19:42:12 -0000	1.3
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_argz.h	10 Feb 2003 10:13:12 -0000	1.4
  @@ -1,8 +1,8 @@
   /*
   **  OSSP lmtp2nntp - Mail to News Gateway
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_daemon.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 lmtp2nntp_daemon.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_daemon.c	30 Jan 2003 19:45:20 -0000	1.3
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_daemon.c	10 Feb 2003 10:13:12 -0000	1.4
  @@ -1,8 +1,8 @@
   /*
   **  OSSP lmtp2nntp - Mail to News Gateway
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_daemon.h
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 lmtp2nntp_daemon.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_daemon.h	30 Jan 2003 19:42:13 -0000	1.2
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_daemon.h	10 Feb 2003 10:13:12 -0000	1.3
  @@ -1,8 +1,8 @@
   /*
   **  OSSP lmtp2nntp - Mail to News Gateway
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_global.h
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 lmtp2nntp_global.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_global.h	30 Jan 2003 19:42:13 -0000	1.6
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_global.h	10 Feb 2003 10:13:12 -0000	1.7
  @@ -1,8 +1,8 @@
   /*
   **  OSSP lmtp2nntp - Mail to News Gateway
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_lmtp.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 lmtp2nntp_lmtp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_lmtp.c	30 Jan 2003 19:45:20 -0000	1.4
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_lmtp.c	10 Feb 2003 10:13:12 -0000	1.5
  @@ -1,8 +1,8 @@
   /*
   **  OSSP lmtp2nntp - Mail to News Gateway
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_lmtp.h
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 lmtp2nntp_lmtp.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_lmtp.h	30 Jan 2003 19:42:13 -0000	1.3
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_lmtp.h	10 Feb 2003 10:13:12 -0000	1.4
  @@ -1,8 +1,8 @@
   /*
   **  OSSP lmtp2nntp - Mail to News Gateway
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================================
  $ cvs diff -u -r1.65 -r1.66 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	6 Feb 2003 14:23:49 -0000	1.65
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	10 Feb 2003 10:13:12 -0000	1.66
  @@ -1,8 +1,8 @@
   /*
   **  OSSP lmtp2nntp - Mail to News Gateway
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================================
  $ cvs diff -u -r1.36 -r1.37 lmtp2nntp_msg.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	6 Feb 2003 13:50:08 -0000	1.36
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	10 Feb 2003 10:13:12 -0000	1.37
  @@ -1,8 +1,8 @@
   /*
   **  OSSP lmtp2nntp - Mail to News Gateway
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.h
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 lmtp2nntp_msg.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.h	6 Feb 2003 13:50:08 -0000	1.9
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.h	10 Feb 2003 10:13:12 -0000	1.10
  @@ -1,8 +1,8 @@
   /*
   **  OSSP lmtp2nntp - Mail to News Gateway
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 lmtp2nntp_nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.c	30 Jan 2003 19:45:20 -0000	1.4
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.c	10 Feb 2003 10:13:12 -0000	1.5
  @@ -1,8 +1,8 @@
   /*
   **  OSSP lmtp2nntp - Mail to News Gateway
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.h
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 lmtp2nntp_nntp.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.h	6 Feb 2003 13:50:08 -0000	1.6
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.h	10 Feb 2003 10:13:12 -0000	1.7
  @@ -1,8 +1,8 @@
   /*
   **  OSSP lmtp2nntp - Mail to News Gateway
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_shpat.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 lmtp2nntp_shpat.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_shpat.c	30 Jan 2003 19:45:20 -0000	1.4
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_shpat.c	10 Feb 2003 10:13:12 -0000	1.5
  @@ -1,8 +1,8 @@
   /*
   **  OSSP lmtp2nntp - Mail to News Gateway
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_shpat.h
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 lmtp2nntp_shpat.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_shpat.h	30 Jan 2003 19:42:13 -0000	1.3
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_shpat.h	10 Feb 2003 10:13:12 -0000	1.4
  @@ -1,8 +1,8 @@
   /*
   **  OSSP lmtp2nntp - Mail to News Gateway
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP lmtp2nntp, an LMTP speaking local
   **  mailer which forwards mails as Usenet news articles via NNTP.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pcre/devtool.func
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.func
  --- ossp-pkg/pcre/devtool.func	27 Jan 2003 16:29:33 -0000	1.3
  +++ ossp-pkg/pcre/devtool.func	10 Feb 2003 10:13:25 -0000	1.4
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com> 
   ##
   
   devtool_require () {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pcre/pcre-config.in
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 pcre-config.in
  --- ossp-pkg/pcre/pcre-config.in	16 Nov 2001 16:35:59 -0000	1.3
  +++ ossp-pkg/pcre/pcre-config.in	10 Feb 2003 10:13:25 -0000	1.4
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  pcre-config -- PCRE library build configuration utility
  -##  Copyright (c) 1999 Ralf S. Engelschall, All Rights Reserved. 
  +##  Copyright (c) 1999-2001 Ralf S. Engelschall, All Rights Reserved. 
   ##
   DIFS=' 	
   '
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/popt/devtool
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 devtool
  --- ossp-pkg/popt/devtool	30 Jan 2002 14:05:32 -0000	1.1
  +++ ossp-pkg/popt/devtool	10 Feb 2003 10:13:27 -0000	1.2
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  devtool -- Development Tool
  -##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
   ##
   
   if [ $# -eq 0 ]; then
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/configure.ac
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 configure.ac
  --- ossp-pkg/sa/configure.ac	15 Mar 2002 10:47:36 -0000	1.12
  +++ ossp-pkg/sa/configure.ac	10 Feb 2003 10:13:29 -0000	1.13
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP sa - Socket Abstraction
  -dnl ##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2001 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2001 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP sa, a socket abstraction library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/sa/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ts.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 ts.c
  --- ossp-pkg/sa/ts.c	31 Jan 2003 18:58:18 -0000	1.7
  +++ ossp-pkg/sa/ts.c	10 Feb 2003 10:13:29 -0000	1.8
  @@ -1,8 +1,8 @@
   /*
   **  TS - OSSP Test Suite Library
  -**  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP TS, a small test suite library which
   **  can be found at http://www.ossp.org/pkg/ts/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/.dmallocrc
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 .dmallocrc
  --- ossp-pkg/str/.dmallocrc	27 Dec 2001 12:11:01 -0000	1.1
  +++ ossp-pkg/str/.dmallocrc	10 Feb 2003 10:13:31 -0000	1.2
  @@ -1,6 +1,6 @@
   ##
   ##  Dmalloc Init Script
  -##  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   # no debugging
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/tai/devtool
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 devtool
  --- ossp-pkg/tai/devtool	18 Apr 2002 09:10:46 -0000	1.1.1.1
  +++ ossp-pkg/tai/devtool	10 Feb 2003 10:13:33 -0000	1.2
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  devtool -- Development Tool
  -##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
   ##
   
   if [ $# -eq 0 ]; then
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/devtool
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 devtool
  --- ossp-pkg/val/devtool	9 Jan 2002 10:44:28 -0000	1.1
  +++ ossp-pkg/val/devtool	10 Feb 2003 10:13:34 -0000	1.2
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  devtool -- Development Tool
  -##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
   ##
   
   if [ $# -eq 0 ]; then
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 10 13:46:55 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3872576B02; Mon, 10 Feb 2003 13:46:55 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ 00TODO
Message-Id: <20030210124655.3872576B02@mail.ossp.org>
Date: Mon, 10 Feb 2003 13:46:55 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   10-Feb-2003 13:46:54
  Branch: HEAD                             Handle: 2003021012465300

  Modified files:
    ossp-pkg/lmtp2nntp      00TODO

  Log:
    remember possible performance issue

  Summary:
    Revision    Changes     Path
    1.65        +3  -0      ossp-pkg/lmtp2nntp/00TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/00TODO
  ============================================================================
  $ cvs diff -u -r1.64 -r1.65 00TODO
  --- ossp-pkg/lmtp2nntp/00TODO	30 Jan 2003 19:42:12 -0000	1.64
  +++ ossp-pkg/lmtp2nntp/00TODO	10 Feb 2003 12:46:53 -0000	1.65
  @@ -19,6 +19,9 @@
     TODOs are deferred for later releases. There're usually functional enhancements,
     performance improvements, rewrites, integration of external libraries ...
   
  +  according to "purify" lmtp2nntp spends 23% of its time in msg_split()
  +  This is the one to optimize first if perfomance becomes an issue
  +
     move as much as possible from lmtp2nntp_common.h into local source contexts.
   
     should we resolv on startup only or for every access or using dns ttl
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 10 14:51:36 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E6D7576B01; Mon, 10 Feb 2003 14:51:35 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_config.c lmtp2nntp_main.c
Message-Id: <20030210135135.E6D7576B01@mail.ossp.org>
Date: Mon, 10 Feb 2003 14:51:35 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   10-Feb-2003 14:51:35
  Branch: HEAD                             Handle: 2003021013513400

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c lmtp2nntp_main.c

  Log:
    plug two memory leaks

  Summary:
    Revision    Changes     Path
    1.92        +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.67        +4  -0      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================================
  $ cvs diff -u -r1.91 -r1.92 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	6 Feb 2003 10:51:40 -0000	1.91
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	10 Feb 2003 13:51:34 -0000	1.92
  @@ -286,7 +286,7 @@
           }
   
           /* if only blocking ACLs exist, reserve space for two additional pass-through wildcards */
  -        if ((ctx->pacl = (struct acl *)malloc((ov->ndata + somepass ? 0 : 2 ) * sizeof(struct acl))) == NULL) throw(0,0,0);
  +        ctx->pacl = (struct acl *)mallocex((ov->ndata + somepass ? 0 : 2 ) * sizeof(struct acl));
   
           if (ov->ndata >= 1) {
               for (i = 0; i < ov->ndata; i++) {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================================
  $ cvs diff -u -r1.66 -r1.67 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	10 Feb 2003 10:13:12 -0000	1.66
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	10 Feb 2003 13:51:34 -0000	1.67
  @@ -714,6 +714,10 @@
           free(ctx->option_restrictheader);
       if (ctx->option_pidfile != NULL)
           free(ctx->option_pidfile);
  +    if (ctx->pns != NULL)
  +        free(ctx->pns);
  +    if (ctx->pacl != NULL)
  +        free(ctx->pacl);
       if (ctx->option_nodename != NULL)
           free(ctx->option_nodename);
       if (ctx->progname != NULL)
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 10 15:24:18 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A9EA876B00; Mon, 10 Feb 2003 15:24:17 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_option.c
Message-Id: <20030210142417.A9EA876B00@mail.ossp.org>
Date: Mon, 10 Feb 2003 15:24:17 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   10-Feb-2003 15:24:17
  Branch: HEAD                             Handle: 2003021014241600

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_option.c

  Log:
    plug memory two leaks not destroying lib_val handle

  Summary:
    Revision    Changes     Path
    1.24        +19 -1      ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 lmtp2nntp_option.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	30 Jan 2003 19:45:20 -0000	1.23
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	10 Feb 2003 14:24:16 -0000	1.24
  @@ -226,9 +226,18 @@
           }
       }
       catch(ex) {
  +        int i;
           if (v.oc != NULL) {
               if (type == OPT_SINGLE && v.oc->data.s != NULL)
                   free(v.oc->data.s);
  +            if (type == OPT_MULTI  && v.oc->data.m != NULL) {
  +                for (i = 0; i < v.oc->ndata; i++)
  +                    if (v.oc->data.m[i] == NULL)
  +                        break;
  +                    else
  +                        free(v.oc->data.m[i]);
  +                free(v.oc->data.m);
  +            }
               if (v.oc->argdescrip != NULL)
                   free(v.oc->argdescrip);
               if (v.oc->descrip != NULL)
  @@ -594,6 +603,7 @@
   lmtp2nntp_option_rc_t option_destroy(lmtp2nntp_option_t *o)
   {
       optionval_t *oc;
  +    optionval_t *ocn;
       int i;
   
       if (o == NULL)
  @@ -612,7 +622,15 @@
                       free(oc->data.m[i]);
               free(oc->data.m);
           }
  -        oc = oc->next;
  +        if (oc->argdescrip != NULL)
  +            free(oc->argdescrip);
  +        if (oc->descrip != NULL)
  +            free(oc->descrip);
  +        if (oc->longname != NULL)
  +            free(oc->longname);
  +        ocn = oc->next;
  +        free(oc);
  +        oc = ocn;
       }
       if (o->vo != NULL)
           val_destroy(o->vo);
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 10 15:25:41 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 508BC76B00; Mon, 10 Feb 2003 15:25:41 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_main.c
Message-Id: <20030210142541.508BC76B00@mail.ossp.org>
Date: Mon, 10 Feb 2003 15:25:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   10-Feb-2003 15:25:41
  Branch: HEAD                             Handle: 2003021014253900

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_main.c

  Log:
    plug memory two leaks not destroying lib_val handle

  Summary:
    Revision    Changes     Path
    1.68        +4  -0      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================================
  $ cvs diff -u -r1.67 -r1.68 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	10 Feb 2003 13:51:34 -0000	1.67
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	10 Feb 2003 14:25:39 -0000	1.68
  @@ -720,6 +720,10 @@
           free(ctx->pacl);
       if (ctx->option_nodename != NULL)
           free(ctx->option_nodename);
  +    if (ctx->prival != NULL)
  +        val_destroy(ctx->prival);
  +    if (ctx->val != NULL)
  +        val_destroy(ctx->val);
       if (ctx->progname != NULL)
           free(ctx->progname);
       if (ctx->azGroupargs != NULL)
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 10 16:20:39 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8E14476B01; Mon, 10 Feb 2003 16:20:38 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var/ ts.c
Message-Id: <20030210152038.8E14476B01@mail.ossp.org>
Date: Mon, 10 Feb 2003 16:20:38 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Feb-2003 16:20:38
  Branch: HEAD                             Handle: 2003021015203700

  Modified files:
    ossp-pkg/var            ts.c

  Log:
    upgrade to fixed test suite library

  Summary:
    Revision    Changes     Path
    1.3         +12 -8      ossp-pkg/var/ts.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/ts.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ts.c
  --- ossp-pkg/var/ts.c	8 Mar 2002 12:38:24 -0000	1.2
  +++ ossp-pkg/var/ts.c	10 Feb 2003 15:20:37 -0000	1.3
  @@ -76,6 +76,10 @@
       for ((ep)  = RING_FIRST((hp)); \
            (ep) != RING_SENTINEL((hp), elem, link); \
            (ep)  = RING_NEXT((ep), link))
  +#define RING_FOREACH_LA(ep, epT, hp, elem, link) \
  +    for ((ep)  = RING_FIRST((hp)), (epT) = RING_NEXT((ep), link); \
  +         (ep) != RING_SENTINEL((hp), elem, link); \
  +         (ep)  = (epT), (epT) = RING_NEXT((epT), link))
   
   /* test suite test log */
   struct tstl_st;
  @@ -126,7 +130,7 @@
       int n;
       int bytes;
   
  -    if (format == NULL || ap == NULL)
  +    if (format == NULL)
           return -1;
       bytes = 0;
       while (*format != '\0') {
  @@ -200,7 +204,7 @@
       int n;
       va_list ap2;
   
  -    if (format == NULL || ap == NULL)
  +    if (format == NULL)
           return NULL;
       ap2 = ap;
       if ((n = ts_suite_mvxprintf(NULL, 0, format, ap)) == -1)
  @@ -367,15 +371,15 @@
   /* destroy test suite */
   void ts_suite_free(ts_suite_t *ts)
   {
  -    ts_test_t *tst;
  -    tstc_t *tstc;
  -    tstl_t *tstl;
  +    ts_test_t *tst, *tstT;
  +    tstc_t *tstc, *tstcT;
  +    tstl_t *tstl, *tstlT;
   
       if (ts == NULL)
           return;
  -    RING_FOREACH(tst, &ts->tests, ts_test_t, next) {
  -        RING_FOREACH(tstc, &tst->checks, tstc_t, next) {
  -            RING_FOREACH(tstl, &tstc->logs, tstl_t, next) {
  +    RING_FOREACH_LA(tst, tstT, &ts->tests, ts_test_t, next) {
  +        RING_FOREACH_LA(tstc, tstcT, &tst->checks, tstc_t, next) {
  +            RING_FOREACH_LA(tstl, tstlT, &tstc->logs, tstl_t, next) {
                   free(tstl->text);
               }
               free(tstc->title);
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 10 16:27:58 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 48D4076B01; Mon, 10 Feb 2003 16:27:58 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var/ var_test.c
Message-Id: <20030210152758.48D4076B01@mail.ossp.org>
Date: Mon, 10 Feb 2003 16:27:58 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Feb-2003 16:27:57
  Branch: HEAD                             Handle: 2003021015275400

  Modified files:
    ossp-pkg/var            var_test.c

  Log:
    fix memory leak in OSSP var test suite (under error conditions only)

  Summary:
    Revision    Changes     Path
    1.46        +3  -0      ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var_test.c
  ============================================================================
  $ cvs diff -u -r1.45 -r1.46 var_test.c
  --- ossp-pkg/var/var_test.c	8 Mar 2002 12:57:16 -0000	1.45
  +++ ossp-pkg/var/var_test.c	10 Feb 2003 15:27:54 -0000	1.46
  @@ -343,6 +343,7 @@
       }
       if (strcmp(got, exp) != 0) {
           ts_test_fail(TS_CTX, "var_format: expected \"%s\", got \"%s\"\n", exp, got);
  +        free(got);
           return;
       }
       free(got);
  @@ -358,6 +359,7 @@
       }
       if (strcmp(got, exp) != 0) {
           ts_test_fail(TS_CTX, "var_format: expected \"%s\", got \"%s\"\n", exp, got);
  +        free(got);
           return;
       }
       free(got);
  @@ -373,6 +375,7 @@
       }
       if (strcmp(got, exp) != 0) {
           ts_test_fail(TS_CTX, "var_format: expected \"%s\", got \"%s\"\n", exp, got);
  +        free(got);
           return;
       }
       free(got);
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 10 16:37:19 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 90AF176B01; Mon, 10 Feb 2003 16:37:18 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var/ var.c var_play.c var_test.c
Message-Id: <20030210153718.90AF176B01@mail.ossp.org>
Date: Mon, 10 Feb 2003 16:37:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Feb-2003 16:37:17
  Branch: HEAD                             Handle: 2003021015371500

  Modified files:
    ossp-pkg/var            var.c var_play.c var_test.c

  Log:
    cosmetics: strip trailing whitespaces

  Summary:
    Revision    Changes     Path
    1.91        +112 -112   ossp-pkg/var/var.c
    1.4         +2  -2      ossp-pkg/var/var_play.c
    1.47        +4  -4      ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var.c
  ============================================================================
  $ cvs diff -u -r1.90 -r1.91 var.c
  --- ossp-pkg/var/var.c	5 Jul 2002 20:17:16 -0000	1.90
  +++ ossp-pkg/var/var.c	10 Feb 2003 15:37:15 -0000	1.91
  @@ -51,7 +51,7 @@
   
   /* unique library identifier */
   const char var_id[] = "OSSP var";
  -        
  +
   /* support for OSSP ex based exception throwing */
   #ifdef WITH_EX
   #include "ex.h"
  @@ -113,13 +113,13 @@
   */
   
   /* minimal output-independent vprintf(3) variant which supports %{c,s,d,%} only */
  -static int 
  +static int
   var_mvxprintf(
  -    int (*output)(void *ctx, const char *buffer, size_t bufsize), void *ctx, 
  +    int (*output)(void *ctx, const char *buffer, size_t bufsize), void *ctx,
       const char *format, va_list ap)
   {
       /* sufficient integer buffer: <available-bits> x log_10(2) + safety */
  -    char ibuf[((sizeof(int)*8)/3)+10]; 
  +    char ibuf[((sizeof(int)*8)/3)+10];
       char *cp;
       char c;
       int d;
  @@ -190,9 +190,9 @@
   } var_mvsnprintf_cb_t;
   
   /* output callback function for var_mvsnprintf() */
  -static int 
  +static int
   var_mvsnprintf_cb(
  -    void *_ctx, 
  +    void *_ctx,
       const char *buffer, size_t bufsize)
   {
       var_mvsnprintf_cb_t *ctx = (var_mvsnprintf_cb_t *)_ctx;
  @@ -206,9 +206,9 @@
   }
   
   /* minimal vsnprintf(3) variant which supports %{c,s,d} only */
  -static int 
  +static int
   var_mvsnprintf(
  -    char *buffer, size_t bufsize, 
  +    char *buffer, size_t bufsize,
       const char *format, va_list ap)
   {
       int n;
  @@ -218,7 +218,7 @@
           return -1;
       if (buffer != NULL && bufsize == 0)
           return -1;
  -    if (buffer == NULL) 
  +    if (buffer == NULL)
           /* just determine output length */
           n = var_mvxprintf(NULL, NULL, format, ap);
       else {
  @@ -274,7 +274,7 @@
       size_t buffer_size;
   } tokenbuf_t;
   
  -static void 
  +static void
   tokenbuf_init(
       tokenbuf_t *buf)
   {
  @@ -284,7 +284,7 @@
       return;
   }
   
  -static int 
  +static int
   tokenbuf_isundef(
       tokenbuf_t *buf)
   {
  @@ -293,7 +293,7 @@
       return 0;
   }
   
  -static int 
  +static int
   tokenbuf_isempty(
       tokenbuf_t *buf)
   {
  @@ -302,7 +302,7 @@
       return 0;
   }
   
  -static void 
  +static void
   tokenbuf_set(
       tokenbuf_t *buf, const char *begin, const char *end, size_t buffer_size)
   {
  @@ -312,7 +312,7 @@
       return;
   }
   
  -static void 
  +static void
   tokenbuf_move(
       tokenbuf_t *src, tokenbuf_t *dst)
   {
  @@ -323,7 +323,7 @@
       return;
   }
   
  -static int 
  +static int
   tokenbuf_assign(
       tokenbuf_t *buf, const char *data, size_t len)
   {
  @@ -339,7 +339,7 @@
       return 1;
   }
   
  -static int 
  +static int
   tokenbuf_append(
       tokenbuf_t *output, const char *data, size_t len)
   {
  @@ -396,14 +396,14 @@
       return 1;
   }
   
  -static int 
  +static int
   tokenbuf_merge(
       tokenbuf_t *output, tokenbuf_t *input)
   {
       return tokenbuf_append(output, input->begin, input->end - input->begin);
   }
   
  -static void 
  +static void
   tokenbuf_free(
       tokenbuf_t *buf)
   {
  @@ -420,7 +420,7 @@
   **
   */
   
  -static void 
  +static void
   expand_range(
       char a, char b, char_class_t class)
   {
  @@ -431,7 +431,7 @@
       return;
   }
   
  -static var_rc_t 
  +static var_rc_t
   expand_character_class(
       const char *desc, char_class_t class)
   {
  @@ -462,7 +462,7 @@
   **
   */
   
  -static int 
  +static int
   expand_isoct(
       char c)
   {
  @@ -472,7 +472,7 @@
           return 0;
   }
   
  -static var_rc_t 
  +static var_rc_t
   expand_octal(
       const char **src, char **dst, const char *end)
   {
  @@ -480,8 +480,8 @@
   
       if (end - *src < 3)
           return VAR_ERR_INCOMPLETE_OCTAL;
  -    if (   !expand_isoct(**src) 
  -        || !expand_isoct((*src)[1]) 
  +    if (   !expand_isoct(**src)
  +        || !expand_isoct((*src)[1])
           || !expand_isoct((*src)[2]))
           return VAR_ERR_INVALID_OCTAL;
   
  @@ -502,7 +502,7 @@
       return VAR_OK;
   }
   
  -static int 
  +static int
   expand_ishex(
       char c)
   {
  @@ -513,7 +513,7 @@
           return 0;
   }
   
  -static var_rc_t 
  +static var_rc_t
   expand_simple_hex(
       const char **src, char **dst, const char *end)
   {
  @@ -521,7 +521,7 @@
   
       if (end - *src < 2)
           return VAR_ERR_INCOMPLETE_HEX;
  -    if (   !expand_ishex(**src) 
  +    if (   !expand_ishex(**src)
           || !expand_ishex((*src)[1]))
           return VAR_ERR_INVALID_HEX;
   
  @@ -547,7 +547,7 @@
       return VAR_OK;
   }
   
  -static var_rc_t 
  +static var_rc_t
   expand_grouped_hex(
       const char **src, char **dst, const char *end)
   {
  @@ -564,7 +564,7 @@
       return VAR_OK;
   }
   
  -static var_rc_t 
  +static var_rc_t
   expand_hex(
       const char **src, char **dst, const char *end)
   {
  @@ -577,7 +577,7 @@
           return expand_simple_hex(src, dst, end);
   }
   
  -/* 
  +/*
   **
   **  ==== RECURSIVE-DESCEND VARIABLE EXPANSION PARSER ====
   **
  @@ -589,7 +589,7 @@
   static int parse_name   (var_t *var, var_parse_t *ctx, const char *begin, const char *end);
   
   /* parse pattern text */
  -static int 
  +static int
   parse_pattern(
       var_t *var, var_parse_t *ctx,
       const char *begin, const char *end)
  @@ -608,7 +608,7 @@
   }
   
   /* parse substitution text */
  -static int 
  +static int
   parse_substext(
       var_t *var, var_parse_t *ctx,
       const char *begin, const char *end)
  @@ -627,7 +627,7 @@
   }
   
   /* parse expression text */
  -static int 
  +static int
   parse_exptext(
       var_t *var, var_parse_t *ctx,
       const char *begin, const char *end)
  @@ -649,7 +649,7 @@
   }
   
   /* parse opertion argument text */
  -static int 
  +static int
   parse_opargtext(
       var_t *var, var_parse_t *ctx,
       const char *begin, const char *end)
  @@ -667,7 +667,7 @@
       return (p - begin);
   }
   
  -static int 
  +static int
   parse_opargtext_or_variable(
       var_t *var, var_parse_t *ctx,
       const char *begin, const char *end,
  @@ -714,7 +714,7 @@
   }
   
   /* parse expression or variable */
  -static int 
  +static int
   parse_exptext_or_variable(
       var_t *var, var_parse_t *ctx,
       const char *begin, const char *end,
  @@ -765,7 +765,7 @@
   }
   
   /* parse substitution text or variable */
  -static int 
  +static int
   parse_substext_or_variable(
       var_t *var, var_parse_t *ctx,
       const char *begin, const char *end,
  @@ -816,13 +816,13 @@
   }
   
   /* parse class description */
  -static int 
  +static int
   parse_class_description(
       var_t *var, var_parse_t *ctx,
       tokenbuf_t *src, tokenbuf_t *dst)
   {
       unsigned char c, d;
  -    const char *p; 
  +    const char *p;
   
       p = src->begin;
       while (p != src->end) {
  @@ -844,12 +844,12 @@
   }
   
   /* parse regex replace part */
  -static int 
  +static int
   parse_regex_replace(
       var_t *var, var_parse_t *ctx,
  -    const char *data, 
  +    const char *data,
       tokenbuf_t *orig,
  -    regmatch_t *pmatch, 
  +    regmatch_t *pmatch,
       tokenbuf_t *expanded)
   {
       const char *p;
  @@ -901,10 +901,10 @@
   }
   
   /* operation: transpose */
  -static int 
  +static int
   op_transpose(
       var_t *var, var_parse_t *ctx,
  -    tokenbuf_t *data, 
  +    tokenbuf_t *data,
       tokenbuf_t *search,
       tokenbuf_t *replace)
   {
  @@ -956,12 +956,12 @@
   }
   
   /* operation: search & replace */
  -static int 
  +static int
   op_search_and_replace(
       var_t *var, var_parse_t *ctx,
  -    tokenbuf_t *data, 
  +    tokenbuf_t *data,
       tokenbuf_t *search,
  -    tokenbuf_t *replace, 
  +    tokenbuf_t *replace,
       tokenbuf_t *flags)
   {
       tokenbuf_t tmp;
  @@ -1042,7 +1042,7 @@
           }
   
           /* compile the pattern. */
  -        rc = regcomp(&preg, tmp.begin, 
  +        rc = regcomp(&preg, tmp.begin,
                        (  REG_EXTENDED
                         | (multiline ? REG_NEWLINE : 0)
                         | (case_insensitive ? REG_ICASE : 0)));
  @@ -1065,8 +1065,8 @@
                   tokenbuf_append(&tmp, p, mydata.end - p);
                   break;
               }
  -            else if (   multiline 
  -                     && (p + pmatch[0].rm_so) == mydata.end 
  +            else if (   multiline
  +                     && (p + pmatch[0].rm_so) == mydata.end
                        && (pmatch[0].rm_eo - pmatch[0].rm_so) == 0) {
                   /* special case: found empty pattern (usually /^/ or /$/ only)
                      in multi-line at end of data (after the last newline) */
  @@ -1115,7 +1115,7 @@
                       }
                       p++;
                   }
  -                /* append prolog string and stop processing if we 
  +                /* append prolog string and stop processing if we
                      do not perform the search & replace globally */
                   if (!global) {
                       if (!tokenbuf_append(&tmp, p, mydata.end - p)) {
  @@ -1138,12 +1138,12 @@
   }
   
   /* operation: offset substring */
  -static int 
  +static int
   op_offset(
       var_t *var, var_parse_t *ctx,
  -    tokenbuf_t *data, 
  +    tokenbuf_t *data,
       int num1,
  -    int num2, 
  +    int num2,
       int isrange)
   {
       tokenbuf_t res;
  @@ -1180,11 +1180,11 @@
   }
   
   /* operation: padding */
  -static int 
  +static int
   op_padding(
       var_t *var, var_parse_t *ctx,
  -    tokenbuf_t *data, 
  -    int width, 
  +    tokenbuf_t *data,
  +    int width,
       tokenbuf_t *fill,
       char position)
   {
  @@ -1281,7 +1281,7 @@
   }
   
   /* parse an integer number ("123") */
  -static int 
  +static int
   parse_integer(
       var_t *var, var_parse_t *ctx,
       const char *begin, const char *end,
  @@ -1303,7 +1303,7 @@
   }
   
   /* parse an operation (":x...") */
  -static int 
  +static int
   parse_operation(
       var_t *var, var_parse_t *ctx,
       const char *begin, const char *end,
  @@ -1585,7 +1585,7 @@
               const char *val_ptr;
               size_t val_len;
               const char *out_ptr;
  -            size_t out_len; 
  +            size_t out_len;
               size_t out_size;
               tokenbuf_t args;
   
  @@ -1658,10 +1658,10 @@
   }
   
   /* parse numerical expression operand */
  -static int 
  +static int
   parse_numexp_operand(
       var_t *var, var_parse_t *ctx,
  -    const char *begin, const char *end, 
  +    const char *begin, const char *end,
       int *result, int *failed)
   {
       const char *p;
  @@ -1721,7 +1721,7 @@
           }
       }
       /* parse relative index mark ("#") */
  -    else if (   var->syntax.index_mark != NUL 
  +    else if (   var->syntax.index_mark != NUL
                && *p == var->syntax.index_mark) {
           p++;
           *result = ctx->index_this;
  @@ -1762,10 +1762,10 @@
   }
   
   /* parse numerical expression ("x+y") */
  -static int 
  +static int
   parse_numexp(
       var_t *var, var_parse_t *ctx,
  -    const char *begin, const char *end, 
  +    const char *begin, const char *end,
       int *result, int *failed)
   {
       const char *p;
  @@ -1837,7 +1837,7 @@
   }
   
   /* parse variable name ("abc") */
  -static int 
  +static int
   parse_name(
       var_t *var, var_parse_t *ctx,
       const char *begin, const char *end)
  @@ -1851,7 +1851,7 @@
   }
   
   /* lookup a variable value through the callback function */
  -static int 
  +static int
   lookup_value(
       var_t *var, var_parse_t *ctx,
       const char  *var_ptr, size_t  var_len, int     var_idx,
  @@ -1862,13 +1862,13 @@
   
       /* pass through to original callback */
       rc = (*var->cb_value_fct)(var, var->cb_value_ctx,
  -                              var_ptr, var_len, var_idx, 
  +                              var_ptr, var_len, var_idx,
                                 val_ptr, val_len, val_size);
   
       /* convert undefined variable into empty variable if relative
          lookups are counted. This is the case inside an active loop
          construct if no limits are given. There the parse_input()
  -       has to proceed until all variables have undefined values. 
  +       has to proceed until all variables have undefined values.
          This trick here allows it to determine this case. */
       if (ctx->rel_lookup_flag && rc == VAR_ERR_UNDEFINED_VARIABLE) {
           ctx->rel_lookup_cnt--;
  @@ -1883,7 +1883,7 @@
   }
   
   /* parse complex variable construct ("${name...}") */
  -static int 
  +static int
   parse_variable_complex(
       var_t *var, var_parse_t *ctx,
       const char *begin, const char *end,
  @@ -1940,7 +1940,7 @@
           }
       } while (rc > 0);
   
  -    /* we must have the complete expanded variable name now, 
  +    /* we must have the complete expanded variable name now,
          so make sure we really do. */
       if (name.begin == name.end) {
           if (ctx->force_expand) {
  @@ -2056,7 +2056,7 @@
   }
   
   /* parse variable construct ("$name" or "${name...}") */
  -static int 
  +static int
   parse_variable(
       var_t *var, var_parse_t *ctx,
       const char *begin, const char *end,
  @@ -2078,7 +2078,7 @@
       if (p == end)
           return VAR_ERR_INCOMPLETE_VARIABLE_SPEC;
   
  -    /* parse a simple variable name. 
  +    /* parse a simple variable name.
          (if this fails, we're try to parse a complex variable construct) */
       rc = parse_name(var, ctx, p, end);
       if (rc < 0)
  @@ -2103,7 +2103,7 @@
   }
   
   /* parse loop construct limits ("[...]{b,s,e}") */
  -static var_rc_t 
  +static var_rc_t
   parse_looplimits(
       var_t *var, var_parse_t *ctx,
       const char *begin, const char *end,
  @@ -2200,14 +2200,14 @@
   }
   
   /* parse plain text */
  -static int 
  +static int
   parse_text(
       var_t *var, var_parse_t *ctx,
       const char *begin, const char *end)
   {
       const char *p;
   
  -    /* parse until delim_init (variable construct) 
  +    /* parse until delim_init (variable construct)
          or index_open (loop construct) is found */
       for (p = begin; p != end; p++) {
           if (*p == var->syntax.escape) {
  @@ -2218,7 +2218,7 @@
           else if (*p == var->syntax.delim_init)
               break;
           else if (   var->syntax.index_open != NUL
  -                 && (   *p == var->syntax.index_open 
  +                 && (   *p == var->syntax.index_open
                        || *p == var->syntax.index_close))
               break;
       }
  @@ -2226,7 +2226,7 @@
   }
   
   /* expand input in general */
  -static var_rc_t 
  +static var_rc_t
   parse_input(
       var_t *var, var_parse_t *ctx,
       const char *begin, const char *end,
  @@ -2247,8 +2247,8 @@
   
       do {
           /* try to parse a loop construct */
  -        if (   p != end 
  -            && var->syntax.index_open != NUL 
  +        if (   p != end
  +            && var->syntax.index_open != NUL
               && *p == var->syntax.index_open) {
               p++;
   
  @@ -2268,24 +2268,24 @@
                  or there is a stop limit known and it is still not reached */
               re_loop:
               for (i = start;
  -                 (   (   open_stop 
  -                      && (   loop_limit_length < 0 
  -                          || rel_lookup_cnt > ctx->rel_lookup_cnt)) 
  -                  || (   !open_stop 
  +                 (   (   open_stop
  +                      && (   loop_limit_length < 0
  +                          || rel_lookup_cnt > ctx->rel_lookup_cnt))
  +                  || (   !open_stop
                         && i <= stop)                                );
                    i += step) {
   
                   /* remember current output end for restoring */
                   output_backup = (output->end - output->begin);
   
  -                /* open temporary context for recursion */ 
  +                /* open temporary context for recursion */
                   ctx = var_parse_push(ctx, &myctx);
                   ctx->force_expand    = 1;
                   ctx->rel_lookup_flag = 1;
                   ctx->index_this      = i;
   
                   /* recursive parse input through ourself */
  -                rc = parse_input(var, ctx, p, end, 
  +                rc = parse_input(var, ctx, p, end,
                                    output, recursion_level+1);
   
                   /* retrieve info and close temporary context */
  @@ -2304,7 +2304,7 @@
   
                   /* try to parse loop construct limit specification */
                   if (loop_limit_length < 0) {
  -                    rc2 = parse_looplimits(var, ctx, p+rc+1, end, 
  +                    rc2 = parse_looplimits(var, ctx, p+rc+1, end,
                                              &start, &step, &stop, &open_stop);
                       if (rc2 < 0)
                           goto error_return;
  @@ -2357,7 +2357,7 @@
               tokenbuf_free(&result);
               p += rc;
               continue;
  -        }    
  +        }
           tokenbuf_free(&result);
           if (rc < 0)
               goto error_return;
  @@ -2387,14 +2387,14 @@
       return rc;
   }
   
  -/* 
  +/*
   **
   **  ==== APPLICATION PROGRAMMING INTERFACE (API) ====
   **
   */
   
   /* create variable expansion context */
  -var_rc_t 
  +var_rc_t
   var_create(
       var_t **pvar)
   {
  @@ -2411,7 +2411,7 @@
   }
   
   /* destroy variable expansion context */
  -var_rc_t 
  +var_rc_t
   var_destroy(
       var_t *var)
   {
  @@ -2422,10 +2422,10 @@
   }
   
   /* configure variable expansion context */
  -var_rc_t 
  +var_rc_t
   var_config(
  -    var_t *var, 
  -    var_config_t mode, 
  +    var_t *var,
  +    var_config_t mode,
       ...)
   {
       va_list ap;
  @@ -2450,7 +2450,7 @@
               var->syntax.name_chars  = NULL; /* unused internally */
               if ((rc = expand_character_class(s->name_chars, var->syntax_nameclass)) != VAR_OK)
                   return VAR_RC(rc);
  -            if (   var->syntax_nameclass[(int)var->syntax.delim_init] 
  +            if (   var->syntax_nameclass[(int)var->syntax.delim_init]
                   || var->syntax_nameclass[(int)var->syntax.delim_open]
                   || var->syntax_nameclass[(int)var->syntax.delim_close]
                   || var->syntax_nameclass[(int)var->syntax.escape])
  @@ -2483,11 +2483,11 @@
   }
   
   /* perform unescape operation on a buffer */
  -var_rc_t 
  +var_rc_t
   var_unescape(
  -    var_t *var, 
  -    const char *src, size_t srclen, 
  -    char *dst, size_t dstlen, 
  +    var_t *var,
  +    const char *src, size_t srclen,
  +    char *dst, size_t dstlen,
       int all)
   {
       const char *end;
  @@ -2523,8 +2523,8 @@
                       break;
                   case '0': case '1': case '2': case '3': case '4':
                   case '5': case '6': case '7': case '8': case '9':
  -                    if (   end - src >= 3 
  -                        && isdigit((int)src[1]) 
  +                    if (   end - src >= 3
  +                        && isdigit((int)src[1])
                           && isdigit((int)src[2])) {
                           if ((rc = expand_octal(&src, &dst, end)) != 0)
                               return VAR_RC(rc);
  @@ -2545,11 +2545,11 @@
   }
   
   /* perform expand operation on a buffer */
  -var_rc_t 
  +var_rc_t
   var_expand(
  -    var_t *var, 
  -    const char *src_ptr, size_t src_len, 
  -    char **dst_ptr, size_t *dst_len, 
  +    var_t *var,
  +    const char *src_ptr, size_t src_len,
  +    char **dst_ptr, size_t *dst_len,
       int force_expand)
   {
       var_parse_t ctx;
  @@ -2573,7 +2573,7 @@
   
       /* post-processing */
       if (rc >= 0) {
  -        /* always NUL-terminate output for convinience reasons 
  +        /* always NUL-terminate output for convinience reasons
              but do not count the NUL-terminator in the length */
           if (!tokenbuf_append(&output, "\0", 1)) {
               tokenbuf_free(&output);
  @@ -2598,10 +2598,10 @@
   }
   
   /* format and expand a string */
  -var_rc_t 
  +var_rc_t
   var_formatv(
  -    var_t *var, 
  -    char **dst_ptr, int force_expand, 
  +    var_t *var,
  +    char **dst_ptr, int force_expand,
       const char *fmt, va_list ap)
   {
       var_rc_t rc;
  @@ -2642,10 +2642,10 @@
   }
   
   /* format and expand a string */
  -var_rc_t 
  +var_rc_t
   var_format(
  -    var_t *var, 
  -    char **dst_ptr, int force_expand, 
  +    var_t *var,
  +    char **dst_ptr, int force_expand,
       const char *fmt, ...)
   {
       var_rc_t rc;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var_play.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 var_play.c
  --- ossp-pkg/var/var_play.c	8 Mar 2002 12:57:16 -0000	1.3
  +++ ossp-pkg/var/var_play.c	10 Feb 2003 15:37:15 -0000	1.4
  @@ -97,8 +97,8 @@
       /* expand variable constructs (force expansion) */
       if ((rc = var_expand(var, src_ptr, src_len, &dst_ptr, &dst_len, 1)) != VAR_OK) {
           if (rc != VAR_ERR_INVALID_ARGUMENT && rc != VAR_ERR_OUT_OF_MEMORY) {
  -            fprintf(stdout, "parsing:   \"%s\"\n", dst_ptr); 
  -            fprintf(stdout, "             %*s\n", dst_len, "^"); 
  +            fprintf(stdout, "parsing:   \"%s\"\n", dst_ptr);
  +            fprintf(stdout, "             %*s\n", dst_len, "^");
           }
           die("variable expansion", var, rc);
       }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var_test.c
  ============================================================================
  $ cvs diff -u -r1.46 -r1.47 var_test.c
  --- ossp-pkg/var/var_test.c	10 Feb 2003 15:27:54 -0000	1.46
  +++ ossp-pkg/var/var_test.c	10 Feb 2003 15:37:15 -0000	1.47
  @@ -120,7 +120,7 @@
   **
   */
   
  -static var_rc_t 
  +static var_rc_t
   operate_cb(
       var_t *var, void *ctx,
       const char  *op_ptr, size_t op_len,
  @@ -159,7 +159,7 @@
               (*out_ptr)[i] = (char)tolower((int)(val_ptr[i]));
           return VAR_OK;
       }
  -    else 
  +    else
           return VAR_ERR_UNDEFINED_OPERATION;
   }
   
  @@ -250,7 +250,7 @@
           { "${HOME:%upper:%lower}",        "/home/regression-tests"                         },
           { "${EMPTY:%return($HOME)}",      "/home/regression-tests"                         },
           { "[${ARRAY}:${ARRAY[#]}-]",      "entry0:entry0-entry0:entry1-entry0:entry2-entry0:entry3-" },
  -        { "[${HEINZ[#]}:${ARRAY[#]}-]",   "heinz0:entry0-heinz1:entry1-:entry2-:entry3-" }, 
  +        { "[${HEINZ[#]}:${ARRAY[#]}-]",   "heinz0:entry0-heinz1:entry1-:entry2-:entry3-" },
           { "[${HEINZ[#]}:[${ARRAY[#]}] ]", "heinz0:entry0entry1entry2entry3 heinz1:entry0entry1entry2entry3 " },
           { "[${HEINZ[#]}: [${ARRAY[#]}${ARRAY[#+1]:+, }]${HEINZ[#+1]:+; }]", "heinz0: entry0, entry1, entry2, entry3; heinz1: entry0, entry1, entry2, entry3" },
           { "[${ARRAY[#]}:[${ARRAY[#]},]{1,2,} ]{0,2,}", "entry0:entry1,entry3, entry2:entry1,entry3, " },
  @@ -282,7 +282,7 @@
   
       for (i = 0; i < sizeof(tests)/sizeof(struct test_case); i++) {
           ts_test_check(TS_CTX, "expansion (#%d): raw input \"%s\"", i, tests[i].input);
  -        rc = var_unescape(var, tests[i].input, strlen(tests[i].input), 
  +        rc = var_unescape(var, tests[i].input, strlen(tests[i].input),
                             buffer, sizeof(buffer), 0);
           if (rc != VAR_OK) {
               var_strerror(var, rc, &err);
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 10 16:46:51 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D004276B02; Mon, 10 Feb 2003 16:46:50 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ TODO
Message-Id: <20030210154650.D004276B02@mail.ossp.org>
Date: Mon, 10 Feb 2003 16:46:50 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Feb-2003 16:46:50
  Branch: HEAD                             Handle: 2003021015464800

  Modified files:
    ossp-pkg/shiela         TODO

  Log:
    I really want this feature ;-)

  Summary:
    Revision    Changes     Path
    1.8         +5  -0      ossp-pkg/shiela/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/TODO
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 TODO
  --- ossp-pkg/shiela/TODO	23 Dec 2002 14:31:11 -0000	1.7
  +++ ossp-pkg/shiela/TODO	10 Feb 2003 15:46:48 -0000	1.8
  @@ -15,6 +15,11 @@
     CANDO
     -----
   
  +  o  Allow commit message embedded "Shiela: <msg>" messages
  +     which control internal Shiela behaviour. An example could be
  +     "Shiela: no-mail" which prevents Shiels from sending out the Mail.
  +     Obviously those messages should be subject to ACL, too.
  +
     o  Subject can be compressed by reducing common prefix and 
        just repeating the subdirs together with the files:
        << [CVS] OSSP: ossp-pkg/ossp-cvs README.OSSP ossp-pkg/ossp-cvs/src cvsrc.c
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 10 20:29:03 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7AA0E76504; Mon, 10 Feb 2003 20:29:02 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var/ var_play.c
Message-Id: <20030210192902.7AA0E76504@mail.ossp.org>
Date: Mon, 10 Feb 2003 20:29:02 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Feb-2003 20:29:01
  Branch: HEAD                             Handle: 2003021019290000

  Modified files:
    ossp-pkg/var            var_play.c

  Log:
    fix memory leak in var_play utility

  Summary:
    Revision    Changes     Path
    1.5         +1  -0      ossp-pkg/var/var_play.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var_play.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 var_play.c
  --- ossp-pkg/var/var_play.c	10 Feb 2003 15:37:15 -0000	1.4
  +++ ossp-pkg/var/var_play.c	10 Feb 2003 19:29:00 -0000	1.5
  @@ -60,6 +60,7 @@
   
       var_strerror(var, rc, &error);
       fprintf(stderr, "ERROR: %s: %s (%d)\n", context, error, rc);
  +    var_destroy(var);
       exit(1);
   }
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 10 21:21:56 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C0EA37650D; Mon, 10 Feb 2003 21:21:55 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var/ var.c
Message-Id: <20030210202155.C0EA37650D@mail.ossp.org>
Date: Mon, 10 Feb 2003 21:21:55 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Feb-2003 21:21:54
  Branch: HEAD                             Handle: 2003021020214900

  Modified files:
    ossp-pkg/var            var.c

  Log:
    fix first set of memory leaks

  Summary:
    Revision    Changes     Path
    1.92        +2  -0      ossp-pkg/var/var.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var.c
  ============================================================================
  $ cvs diff -u -r1.91 -r1.92 var.c
  --- ossp-pkg/var/var.c	10 Feb 2003 15:37:15 -0000	1.91
  +++ ossp-pkg/var/var.c	10 Feb 2003 20:21:49 -0000	1.92
  @@ -702,6 +702,7 @@
                   rc = VAR_ERR_OUT_OF_MEMORY;
                   goto error_return;
               }
  +            tokenbuf_free(&tmp);
           }
       } while (rc > 0);
       tokenbuf_free(&tmp);
  @@ -1936,6 +1937,7 @@
                   rc = VAR_ERR_OUT_OF_MEMORY;
                   goto error_return;
               }
  +            tokenbuf_free(&tmp);
               p += rc;
           }
       } while (rc > 0);
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 10 21:38:24 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C89BD7650D; Mon, 10 Feb 2003 21:38:23 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var/ var.c
Message-Id: <20030210203823.C89BD7650D@mail.ossp.org>
Date: Mon, 10 Feb 2003 21:38:23 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Feb-2003 21:38:22
  Branch: HEAD                             Handle: 2003021020381800

  Modified files:
    ossp-pkg/var            var.c

  Log:
    fix one more memory leak

  Summary:
    Revision    Changes     Path
    1.93        +2  -2      ossp-pkg/var/var.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var.c
  ============================================================================
  $ cvs diff -u -r1.92 -r1.93 var.c
  --- ossp-pkg/var/var.c	10 Feb 2003 20:21:49 -0000	1.92
  +++ ossp-pkg/var/var.c	10 Feb 2003 20:38:18 -0000	1.93
  @@ -748,11 +748,11 @@
               goto error_return;
           if (rc > 0) {
               p += rc;
  -            if (!tokenbuf_append
  -                (result, tmp.begin, tmp.end - tmp.begin)) {
  +            if (!tokenbuf_merge(result, &tmp)) {
                   rc = VAR_ERR_OUT_OF_MEMORY;
                   goto error_return;
               }
  +            tokenbuf_free(&tmp);
           }
       } while (rc > 0);
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 10 21:50:57 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 08FF776510; Mon, 10 Feb 2003 21:50:56 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var/ var.c
Message-Id: <20030210205056.08FF776510@mail.ossp.org>
Date: Mon, 10 Feb 2003 21:50:56 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Feb-2003 21:50:55
  Branch: HEAD                             Handle: 2003021020505300

  Modified files:
    ossp-pkg/var            var.c

  Log:
    fix one more memory leak and simplify tokenbuf operations

  Summary:
    Revision    Changes     Path
    1.94        +8  -8      ossp-pkg/var/var.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var.c
  ============================================================================
  $ cvs diff -u -r1.93 -r1.94 var.c
  --- ossp-pkg/var/var.c	10 Feb 2003 20:38:18 -0000	1.93
  +++ ossp-pkg/var/var.c	10 Feb 2003 20:50:53 -0000	1.94
  @@ -799,11 +799,11 @@
               goto error_return;
           if (rc > 0) {
               p += rc;
  -            if (!tokenbuf_append
  -                (result, tmp.begin, tmp.end - tmp.begin)) {
  +            if (!tokenbuf_merge(result, &tmp)) {
                   rc = VAR_ERR_OUT_OF_MEMORY;
                   goto error_return;
               }
  +            tokenbuf_free(&tmp);
           }
       } while (rc > 0);
   
  @@ -1091,7 +1091,7 @@
                       return rc;
                   }
                   /* append replace string */
  -                if (!tokenbuf_append(&tmp, myreplace.begin, myreplace.end - myreplace.begin)) {
  +                if (!tokenbuf_merge(&tmp, &myreplace)) {
                       regfree(&preg);
                       tokenbuf_free(&tmp);
                       tokenbuf_free(&mydata);
  @@ -1215,7 +1215,7 @@
           if (i > 0) {
               i = i / (fill->end - fill->begin);
               while (i > 0) {
  -                if (!tokenbuf_append(&result, fill->begin, fill->end - fill->begin)) {
  +                if (!tokenbuf_merge(&result, fill)) {
                       tokenbuf_free(&result);
                       return VAR_ERR_OUT_OF_MEMORY;
                   }
  @@ -1226,7 +1226,7 @@
                   tokenbuf_free(&result);
                   return VAR_ERR_OUT_OF_MEMORY;
               }
  -            if (!tokenbuf_append(&result, data->begin, data->end - data->begin)) {
  +            if (!tokenbuf_merge(&result, data)) {
                   tokenbuf_free(&result);
                   return VAR_ERR_OUT_OF_MEMORY;
               }
  @@ -1241,7 +1241,7 @@
               /* create the prefix */
               i = i / (fill->end - fill->begin);
               while (i > 0) {
  -                if (!tokenbuf_append(&result, fill->begin, fill->end - fill->begin)) {
  +                if (!tokenbuf_merge(&result, fill)) {
                       tokenbuf_free(&result);
                       return VAR_ERR_OUT_OF_MEMORY;
                   }
  @@ -1254,7 +1254,7 @@
                   return VAR_ERR_OUT_OF_MEMORY;
               }
               /* append the actual data string */
  -            if (!tokenbuf_append(&result, data->begin, data->end - data->begin)) {
  +            if (!tokenbuf_merge(&result, data)) {
                   tokenbuf_free(&result);
                   return VAR_ERR_OUT_OF_MEMORY;
               }
  @@ -1262,7 +1262,7 @@
               i = width - (result.end - result.begin);
               i = i / (fill->end - fill->begin);
               while (i > 0) {
  -                if (!tokenbuf_append(&result, fill->begin, fill->end - fill->begin)) {
  +                if (!tokenbuf_merge(&result, fill)) {
                       tokenbuf_free(&result);
                       return VAR_ERR_OUT_OF_MEMORY;
                   }
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 10 22:12:53 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DFF7476510; Mon, 10 Feb 2003 22:12:52 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var/ var.c
Message-Id: <20030210211252.DFF7476510@mail.ossp.org>
Date: Mon, 10 Feb 2003 22:12:52 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Feb-2003 22:12:50
  Branch: HEAD                             Handle: 2003021021124700

  Modified files:
    ossp-pkg/var            var.c

  Log:
    fix final memory leak

  Summary:
    Revision    Changes     Path
    1.95        +6  -1      ossp-pkg/var/var.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var.c
  ============================================================================
  $ cvs diff -u -r1.94 -r1.95 var.c
  --- ossp-pkg/var/var.c	10 Feb 2003 20:50:53 -0000	1.94
  +++ ossp-pkg/var/var.c	10 Feb 2003 21:12:47 -0000	1.95
  @@ -1626,11 +1626,16 @@
                                                 arg_ptr, arg_len,
                                                 val_ptr, val_len,
                                                 &out_ptr, &out_len, &out_size);
  -                if (rc < 0)
  +                if (rc < 0) {
  +                    if (arg_ptr != NULL)
  +                        free(arg_ptr);
                       goto error_return;
  +                }
                   tokenbuf_free(data);
                   tokenbuf_set(data, out_ptr, out_ptr+out_len, out_size);
               }
  +            if (arg_ptr != NULL)
  +                free(arg_ptr);
               break;
           }
           default:
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 10 22:15:48 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6E2C976510; Mon, 10 Feb 2003 22:15:47 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var/ var.c
Message-Id: <20030210211547.6E2C976510@mail.ossp.org>
Date: Mon, 10 Feb 2003 22:15:47 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Feb-2003 22:15:46
  Branch: HEAD                             Handle: 2003021021154100

  Modified files:
    ossp-pkg/var            var.c

  Log:
    get rid of warning message because of constness

  Summary:
    Revision    Changes     Path
    1.96        +2  -2      ossp-pkg/var/var.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var.c
  ============================================================================
  $ cvs diff -u -r1.95 -r1.96 var.c
  --- ossp-pkg/var/var.c	10 Feb 2003 21:12:47 -0000	1.95
  +++ ossp-pkg/var/var.c	10 Feb 2003 21:15:41 -0000	1.96
  @@ -1628,14 +1628,14 @@
                                                 &out_ptr, &out_len, &out_size);
                   if (rc < 0) {
                       if (arg_ptr != NULL)
  -                        free(arg_ptr);
  +                        free((void *)arg_ptr);
                       goto error_return;
                   }
                   tokenbuf_free(data);
                   tokenbuf_set(data, out_ptr, out_ptr+out_len, out_size);
               }
               if (arg_ptr != NULL)
  -                free(arg_ptr);
  +                free((void *)arg_ptr);
               break;
           }
           default:
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 11 08:51:29 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 77C06764FD; Tue, 11 Feb 2003 08:51:29 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ l2_spec_parse.y l2_test.c
Message-Id: <20030211075129.77C06764FD@mail.ossp.org>
Date: Tue, 11 Feb 2003 08:51:29 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Feb-2003 08:51:29
  Branch: HEAD                             Handle: 2003021107512701

  Modified files:
    ossp-pkg/l2             l2_spec_parse.y l2_test.c

  Log:
    fix all dmalloc-detected memory leaks

  Summary:
    Revision    Changes     Path
    1.11        +12 -0      ossp-pkg/l2/l2_spec_parse.y
    1.53        +4  -0      ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_spec_parse.y
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 l2_spec_parse.y
  --- ossp-pkg/l2/l2_spec_parse.y	6 Jan 2003 11:41:52 -0000	1.10
  +++ ossp-pkg/l2/l2_spec_parse.y	11 Feb 2003 07:51:27 -0000	1.11
  @@ -169,8 +169,10 @@
             unsigned int levelmask;
             if ((CTX->rv = l2_util_s2l($1, strlen($1), ',', &levelmask)) != L2_OK) {
                 l2_spec_error(CTX, CTX->rv, &yylloc, "invalid level '%s'", $1);
  +              free($1);
                 YYERROR;
             }
  +          free($1);
             $$ = L2_LEVEL_UPTO(levelmask);
         }
       | '(' channel_level_mask ')' {
  @@ -184,16 +186,20 @@
             unsigned int levelmask;
             if ((CTX->rv = l2_util_s2l($1, strlen($1), ',', &levelmask)) != L2_OK) {
                 l2_spec_error(CTX, CTX->rv, &yylloc, "invalid level '%s'", $1);
  +              free($1);
                 YYERROR;
             }
  +          free($1);
             $$ = levelmask;
         }
       | T_ID '|' channel_level_mask {
             unsigned int levelmask;
             if ((CTX->rv = l2_util_s2l($1, strlen($1), ',', &levelmask)) != L2_OK) {
                 l2_spec_error(CTX, CTX->rv, &yylloc, "invalid level '%s'", $1);
  +              free($1);
                 YYERROR;
             }
  +          free($1);
             $$ = levelmask | $3;
         }
       ;
  @@ -204,8 +210,10 @@
             l2_channel_t *ch;
             if ((CTX->rv = l2_channel_create(&ch, CTX->env, $1)) != L2_OK) {
                 l2_spec_error(CTX, CTX->rv, &yylloc, "failed to create channel '%s'", $1);
  +              free($1);
                 YYERROR;
             }
  +          free($1);
             $$ = ch;
             /* provide channel to channel_param rule below because it does
                not know where on the token stack our $$ is because it is a
  @@ -237,8 +245,12 @@
       : T_ID '=' { l2_spec_scan_push(CTX, "SS_PARAM"); } T_PARAM { l2_spec_scan_pop(CTX); } {
             if ((CTX->rv = l2_channel_configure(CTX->chTmp, "%s=\"%s\"", $1, $4)) != L2_OK) {
                 l2_spec_error(CTX, CTX->rv, &yylloc, "failed to configure channel with '%s=\"%s\"'", $1, $4);
  +              free($1);
  +              free($4);
                 YYERROR;
             }
  +          free($1);
  +          free($4);
         }
       ;
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_test.c
  ============================================================================
  $ cvs diff -u -r1.52 -r1.53 l2_test.c
  --- ossp-pkg/l2/l2_test.c	27 Jan 2003 16:01:35 -0000	1.52
  +++ ossp-pkg/l2/l2_test.c	11 Feb 2003 07:51:28 -0000	1.53
  @@ -170,6 +170,10 @@
       if ((rv = l2_channel_destroy(ch)) != L2_OK)
           die(env, rv, "failed to destroy channel tree");
   
  +    /* destroy environment */
  +    if ((rv = l2_env_destroy(env)) != L2_OK)
  +        die(env, rv, "failed to destroy environment");
  +
       return 0;
   }
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 11 09:39:49 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 52DC776511; Tue, 11 Feb 2003 09:39:49 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str/ ChangeLog THANKS ts.c
Message-Id: <20030211083949.52DC776511@mail.ossp.org>
Date: Tue, 11 Feb 2003 09:39:49 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Feb-2003 09:39:48
  Branch: HEAD                             Handle: 2003021108394700

  Modified files:
    ossp-pkg/str            ChangeLog THANKS ts.c

  Log:
    upgrade to fixed ts.c

  Summary:
    Revision    Changes     Path
    1.43        +7  -1      ossp-pkg/str/ChangeLog
    1.10        +1  -0      ossp-pkg/str/THANKS
    1.2         +12 -8      ossp-pkg/str/ts.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.42 -r1.43 ChangeLog
  --- ossp-pkg/str/ChangeLog	6 Jan 2003 19:13:47 -0000	1.42
  +++ ossp-pkg/str/ChangeLog	11 Feb 2003 08:39:47 -0000	1.43
  @@ -9,7 +9,13 @@
   
    ChangeLog
   
  - Changes between 0.9.7 and 0.9.8 (01-Apr-2002 to xx-Jan-2003):
  + Changes between 0.9.7 and 0.9.8 (01-Apr-2002 to xx-Feb-2003):
  +
  +   *) Fixed test suite library (ts.c): the ts_suite_free()
  +      function performed an illegal iteration for freeing elements (they
  +      were freed but still references for traversing to next element).
  +      This is now solved by a look-ahead traversion.
  +      [Ralf S. Engelschall, Brian T. Egleston <brian@egleston.com>]
   
      *) Upgraded to GNU autoconf 2.57, GNU libtool 1.4.3 and
         GNU shtool 1.6.2 build environment.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/THANKS
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 THANKS
  --- ossp-pkg/str/THANKS	6 Jan 2003 19:13:47 -0000	1.9
  +++ ossp-pkg/str/THANKS	11 Feb 2003 08:39:47 -0000	1.10
  @@ -12,6 +12,7 @@
     Credit has to be given to the following people who contributed ideas,
     stuff, bugfixes, hints etc. (in alphabetical order):
   
  +  o Brian T. Egleston        <brian@egleston.com>
     o Dean Gaudet              <dgaudet@arctic.org>
     o Ed Griffiths             <edgrif@sanger.ac.uk>
     o Joseph Heenan            <joseph@picsel.com>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/ts.c
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ts.c
  --- ossp-pkg/str/ts.c	1 Apr 2002 09:03:49 -0000	1.1
  +++ ossp-pkg/str/ts.c	11 Feb 2003 08:39:47 -0000	1.2
  @@ -76,6 +76,10 @@
       for ((ep)  = RING_FIRST((hp)); \
            (ep) != RING_SENTINEL((hp), elem, link); \
            (ep)  = RING_NEXT((ep), link))
  +#define RING_FOREACH_LA(ep, epT, hp, elem, link) \
  +    for ((ep)  = RING_FIRST((hp)), (epT) = RING_NEXT((ep), link); \
  +         (ep) != RING_SENTINEL((hp), elem, link); \
  +         (ep)  = (epT), (epT) = RING_NEXT((epT), link))
   
   /* test suite test log */
   struct tstl_st;
  @@ -126,7 +130,7 @@
       int n;
       int bytes;
   
  -    if (format == NULL || ap == NULL)
  +    if (format == NULL)
           return -1;
       bytes = 0;
       while (*format != '\0') {
  @@ -200,7 +204,7 @@
       int n;
       va_list ap2;
   
  -    if (format == NULL || ap == NULL)
  +    if (format == NULL)
           return NULL;
       ap2 = ap;
       if ((n = ts_suite_mvxprintf(NULL, 0, format, ap)) == -1)
  @@ -367,15 +371,15 @@
   /* destroy test suite */
   void ts_suite_free(ts_suite_t *ts)
   {
  -    ts_test_t *tst;
  -    tstc_t *tstc;
  -    tstl_t *tstl;
  +    ts_test_t *tst, *tstT;
  +    tstc_t *tstc, *tstcT;
  +    tstl_t *tstl, *tstlT;
   
       if (ts == NULL)
           return;
  -    RING_FOREACH(tst, &ts->tests, ts_test_t, next) {
  -        RING_FOREACH(tstc, &tst->checks, tstc_t, next) {
  -            RING_FOREACH(tstl, &tstc->logs, tstl_t, next) {
  +    RING_FOREACH_LA(tst, tstT, &ts->tests, ts_test_t, next) {
  +        RING_FOREACH_LA(tstc, tstcT, &tst->checks, tstc_t, next) {
  +            RING_FOREACH_LA(tstl, tstlT, &tstc->logs, tstl_t, next) {
                   free(tstl->text);
               }
               free(tstc->title);
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 11 09:45:32 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7195776511; Tue, 11 Feb 2003 09:45:31 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str/ str_test.c
Message-Id: <20030211084531.7195776511@mail.ossp.org>
Date: Tue, 11 Feb 2003 09:45:31 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Feb-2003 09:45:31
  Branch: HEAD                             Handle: 2003021108452700

  Modified files:
    ossp-pkg/str            str_test.c

  Log:
    fix memory leak in test suite

  Summary:
    Revision    Changes     Path
    1.27        +9  -0      ossp-pkg/str/str_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str_test.c
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 str_test.c
  --- ossp-pkg/str/str_test.c	6 Jan 2003 19:13:48 -0000	1.26
  +++ ossp-pkg/str/str_test.c	11 Feb 2003 08:45:27 -0000	1.27
  @@ -285,6 +285,15 @@
                            test2_tab[i].r3 == NULL ? "NULL" : test2_tab[i].r3,
                            test2_tab[i].r4 == NULL ? "NULL" : test2_tab[i].r4);
           }
  +        if (*(test2_tab[i].p) == 's') {
  +            if (r1 != NULL) free(r1);
  +        }
  +        else {
  +            if (r1 != NULL) free(r1);
  +            if (r2 != NULL) free(r2);
  +            if (r3 != NULL) free(r3);
  +            if (r4 != NULL) free(r4);
  +        }
       }
       str_parse(NULL, NULL);
       return;
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 11 09:46:18 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 616DC76511; Tue, 11 Feb 2003 09:46:18 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str/ Makefile.in
Message-Id: <20030211084618.616DC76511@mail.ossp.org>
Date: Tue, 11 Feb 2003 09:46:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Feb-2003 09:46:18
  Branch: HEAD                             Handle: 2003021108461700

  Modified files:
    ossp-pkg/str            Makefile.in

  Log:
    add -DHAVE_CONFIG_H stuff to CFLAGS

  Summary:
    Revision    Changes     Path
    1.47        +1  -1      ossp-pkg/str/Makefile.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.46 -r1.47 Makefile.in
  --- ossp-pkg/str/Makefile.in	6 Jan 2003 19:13:47 -0000	1.46
  +++ ossp-pkg/str/Makefile.in	11 Feb 2003 08:46:17 -0000	1.47
  @@ -38,7 +38,7 @@
   mandir      = @mandir@
   
   CC          = @CC@
  -CFLAGS      = @CFLAGS@ -I.
  +CFLAGS      = @DEFS@ @CFLAGS@ -I.
   LDFLAGS     = @LDFLAGS@ -L.
   LIBS        = @LIBS@
   AR          = @AR@
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 11 09:47:35 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7AA4D764FE; Tue, 11 Feb 2003 09:47:35 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str/ ChangeLog
Message-Id: <20030211084735.7AA4D764FE@mail.ossp.org>
Date: Tue, 11 Feb 2003 09:47:35 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Feb-2003 09:47:35
  Branch: HEAD                             Handle: 2003021108473400

  Modified files:
    ossp-pkg/str            ChangeLog

  Log:
    remember what we've done

  Summary:
    Revision    Changes     Path
    1.44        +7  -0      ossp-pkg/str/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.43 -r1.44 ChangeLog
  --- ossp-pkg/str/ChangeLog	11 Feb 2003 08:39:47 -0000	1.43
  +++ ossp-pkg/str/ChangeLog	11 Feb 2003 08:47:34 -0000	1.44
  @@ -10,6 +10,13 @@
    ChangeLog
   
    Changes between 0.9.7 and 0.9.8 (01-Apr-2002 to xx-Feb-2003):
  + 
  +   *) Added @DEFS@ to $(CFLAGS) in Makefile.in to correctly see things
  +      like -DHAVE_CONFIG_H stuff during compilation.
  +      [Ralf S. Engelschall]
  +
  +   *) Fixed memory leaks in test suite.
  +      [Ralf S. Engelschall]
   
      *) Fixed test suite library (ts.c): the ts_suite_free()
         function performed an illegal iteration for freeing elements (they
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 11 09:57:52 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A02CB764FE; Tue, 11 Feb 2003 09:57:51 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ .dmallocrc
Message-Id: <20030211085751.A02CB764FE@mail.ossp.org>
Date: Tue, 11 Feb 2003 09:57:51 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Feb-2003 09:57:51
  Branch: HEAD                             Handle: 2003021108575000

  Modified files:
    ossp-pkg/lmtp2nntp      .dmallocrc

  Log:
    here is the beast with memory dumps enabled

  Summary:
    Revision    Changes     Path
    1.4         +6  -0      ossp-pkg/lmtp2nntp/.dmallocrc
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/.dmallocrc
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 .dmallocrc
  --- ossp-pkg/lmtp2nntp/.dmallocrc	12 Sep 2001 06:50:26 -0000	1.3
  +++ ossp-pkg/lmtp2nntp/.dmallocrc	11 Feb 2003 08:57:50 -0000	1.4
  @@ -25,3 +25,9 @@
           free-blank, error-abort, \
           allow-free-null, log-nonfree-space
   
  +# full debugging including memory dumps
  +debug4  log-stats, log-non-free, check-fence, \
  +        log-trans, check-heap, check-lists, \
  +        log-admin, realloc-copy, free-blank, \
  +        log-bad-space, log-nonfree-space
  +
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 11 10:02:47 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B633676511; Tue, 11 Feb 2003 10:02:45 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_option.c
Message-Id: <20030211090245.B633676511@mail.ossp.org>
Date: Tue, 11 Feb 2003 10:02:45 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   11-Feb-2003 10:02:44
  Branch: HEAD                             Handle: 2003021109024200

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_option.c

  Log:
    better use of ex, error reporting and memory handing in includeit()

  Summary:
    Revision    Changes     Path
    1.25        +53 -44     ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 lmtp2nntp_option.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	10 Feb 2003 14:24:16 -0000	1.24
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	11 Feb 2003 09:02:42 -0000	1.25
  @@ -357,7 +357,7 @@
               }
           }
           catch(ex) {
  -            rethrow;
  +            rc = OPTION_ERR_TRY;
           }
       }
       popt_freecontext(poptCon);
  @@ -418,42 +418,46 @@
   
   static lmtp2nntp_option_rc_t includeit(optionval_t *oc, char *arg, char *cbctx)
   {
  +    lmtp2nntp_option_rc_t rc = OPTION_OK;
       lmtp2nntp_option_t *o;
       volatile char *cpBuf = NULL;
       int argc = 0;
       char **argv = NULL;
  +    const char *filename = arg;
  +    struct stat sb;
  +    volatile int fd = -1;
  +    ex_t ex;
   
       if ((o = oc->parent) == NULL)
           return OPTION_ERR_USE;
   
       stdsyntax(oc, arg, cbctx);
  -    {
  -        const char *filename = arg;
  -        struct stat sb;
  -        volatile int fd = -1;
  -        ex_t ex;
  -
  -        try {
  -            if (stat(filename, &sb) == -1)
  -                throw(includeit, oc, "stat");
  -            cpBuf = (char *)mallocex((size_t)sb.st_size + 1);
  -            if ((fd = open(filename, O_RDONLY)) == -1)
  -                throw(includeit, oc, "open");
  -            if (read(fd, (void *)cpBuf, (size_t)sb.st_size) != (ssize_t)sb.st_size)
  -                throw(includeit, oc, "read");
  -            cpBuf[(int)sb.st_size] = '\0';
  -        }
  -        cleanup {
  -            if (fd != -1) close(fd);
  -        }
  -        catch (ex) {
  -            if (cpBuf != NULL)
  -                free((char *)cpBuf);
  -            rethrow;
  +
  +    try {
  +        if (stat(filename, &sb) == -1)
  +            throw(includeit, oc, "stat");
  +        if (sb.st_size == 0)
  +            throw(includeit, oc, "size");
  +        cpBuf = (char *)mallocex((size_t)sb.st_size + 1);
  +        if ((fd = open(filename, O_RDONLY)) == -1)
  +            throw(includeit, oc, "open");
  +        if (read(fd, (void *)cpBuf, (size_t)sb.st_size) != (ssize_t)sb.st_size)
  +            throw(includeit, oc, "read");
  +        cpBuf[(int)sb.st_size] = '\0';
  +    }
  +    cleanup {
  +        if (fd != -1) close(fd);
  +    }
  +    catch (ex) {
  +        if (ex.ex_class == (void *)includeit && ex.ex_value != NULL) {
  +            fprintf(stderr, "ERROR: problem with \"%s\" while including \"%s\"\n", (char *)ex.ex_value, filename);
           }
  +        if (cpBuf != NULL)
  +            free((char *)cpBuf);
  +        return OPTION_ERR_TRY;
       }
   
  -    {
  +    try {
           char *cpI;  /* pointer to next character to be read */
           char *cpO;  /* pointer to next character to be written. Used for eliminating
                          backslash+newline at a line continuation */
  @@ -504,37 +508,30 @@
                               Newarg.as = 0;
                               Newarg.az = NULL;
                               if ((option = str_token(&cp, " \t", "\"'", "#", STR_STRIPQUOTES|STR_BACKSLASHESC)) == NULL)
  -                                /*printf("DEBUG: no command - comment only\n")*/
  -                                ;/* don't care about comments */
  +                                ;/* no option? comment only! don't care about that. */
                               else {
  -                                /*printf("DEBUG:    option = ***%s***\n", option);*/
  +                                /* create fake argv[0] */
                                   if (argv == NULL) {
  -                                    if ((argv = (char **)malloc(   (   1 + 1) * sizeof(char **))) == NULL)
  -                                        return OPTION_ERR_MEM;
  -                                    argc = 0;
  -                                    argv[argc++] = "include";
  +                                    argv = (char **)mallocex((1 + 1) * sizeof(char **)); /* argv[0] + NULL */
  +                                    argv[argc++] = strdupex("include");
                                       argv[argc] = NULL;
                                   }
  -
  -                                if ((cpNew = (char *)malloc(2 + strlen(option) + 1)) == NULL)
  -                                    return OPTION_ERR_MEM;
  +                                /* handle option */
  +                                cpNew = (char *)mallocex(2 + strlen(option) + 1); /* dash dash option[] NUL */
                                   cpNew[0]=NUL;
                                   strcat(cpNew, "--");
                                   strcat(cpNew, option);
  -                                if ((argv = (char **)realloc(argv, (argc + 1 + 1) * sizeof(char **))) == NULL)
  -                                    return OPTION_ERR_MEM;
  +                                argv = (char **)reallocex(argv, (1 + argc + 1) * sizeof(char **)); /* argv[0] + argv[1...argc] + NULL */
                                   argv[argc++] = cpNew;
                                   argv[argc] = NULL;
   
                                   if ((value = str_token(&cp, " \t", "\"'", "#", STR_STRIPQUOTES|STR_BACKSLASHESC)) == NULL)
  -                                    ;/*printf("DEBUG: no value - section\n");*/
  +                                    ;/* no value? optional anyway */
                                   else {
                                       while(isspace((int)*value)) value++;
  -                                    /*printf("DEBUG:     value = ***%s***\n", value);*/
  -                                    if ((cpNew = strdup(value)) == NULL)
  -                                        return OPTION_ERR_MEM;
  -                                    if ((argv = (char **)realloc(argv, (argc + 1 + 1) * sizeof(char **))) == NULL)
  -                                        return OPTION_ERR_MEM;
  +                                    /* handle value */
  +                                    cpNew = strdupex(value);
  +                                    argv = (char **)reallocex(argv, (1 + argc + 1 + 1) * sizeof(char **)); /* argv[0] + argv[1...argc] + NULL */
                                       argv[argc++] = cpNew;
                                       argv[argc] = NULL;
                                   }
  @@ -548,8 +545,20 @@
               }
               p = c;
           }
  +        rc = option_parse_internal(o, argc, argv);
  +    }
  +    cleanup {
  +        int i;
  +        if (argv != NULL) {
  +            for (i = 0; argv[i] != NULL; i++)
  +                free(argv[i]);
  +            free(argv);
  +        }
       }
  -    return option_parse_internal(o, argc, argv);
  +    catch(ex) {
  +        rc = OPTION_ERR_TRY;
  +    }
  +    return rc;
   }
   
   /* this public function catches all underlying exceptions and properly returns a code */
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 11 10:35:23 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2098376511; Tue, 11 Feb 2003 10:35:23 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_option.c
Message-Id: <20030211093523.2098376511@mail.ossp.org>
Date: Tue, 11 Feb 2003 10:35:23 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   11-Feb-2003 10:35:22
  Branch: HEAD                             Handle: 2003021109352200

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_option.c

  Log:
    darn memory leak

  Summary:
    Revision    Changes     Path
    1.26        +2  -0      ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 lmtp2nntp_option.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	11 Feb 2003 09:02:42 -0000	1.25
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	11 Feb 2003 09:35:22 -0000	1.26
  @@ -643,6 +643,8 @@
       }
       if (o->vo != NULL)
           val_destroy(o->vo);
  +    if (o->pt != NULL)
  +        free(o->pt);
       free(o);
   
       return OPTION_OK;
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 11 11:00:51 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C2DC37651B; Tue, 11 Feb 2003 11:00:50 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_option.c
Message-Id: <20030211100050.C2DC37651B@mail.ossp.org>
Date: Tue, 11 Feb 2003 11:00:50 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   11-Feb-2003 11:00:50
  Branch: HEAD                             Handle: 2003021110004800

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_option.c

  Log:
    consolidate two try/clean/catch blocks, fixing a memory leak around
    cpBuf

  Summary:
    Revision    Changes     Path
    1.27        +17 -26     ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 lmtp2nntp_option.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	11 Feb 2003 09:35:22 -0000	1.26
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	11 Feb 2003 10:00:48 -0000	1.27
  @@ -427,13 +427,22 @@
       struct stat sb;
       volatile int fd = -1;
       ex_t ex;
  +    char *cpI;  /* pointer to next character to be read */
  +    char *cpO;  /* pointer to next character to be written. Used for eliminating backslash+newline at a line continuation */
  +    char *cpL;  /* pointer to start of line */
  +    int pline;  /* current physical (disregarding line continuation) line number */
  +    int lline;  /* current logical lines first physical line number */
  +    int eline;  /* flag signaling empty or just whitespace-filled line */
  +    char c;     /* current character */
  +    char p;     /* previous character */
  +    int eof;    /* flag signaling end of file detected */
   
       if ((o = oc->parent) == NULL)
           return OPTION_ERR_USE;
   
  -    stdsyntax(oc, arg, cbctx);
  -
       try {
  +        if (stdsyntax(oc, arg, cbctx) != OPTION_OK)
  +            throw(0, 0, 0);
           if (stat(filename, &sb) == -1)
               throw(includeit, oc, "stat");
           if (sb.st_size == 0)
  @@ -444,30 +453,6 @@
           if (read(fd, (void *)cpBuf, (size_t)sb.st_size) != (ssize_t)sb.st_size)
               throw(includeit, oc, "read");
           cpBuf[(int)sb.st_size] = '\0';
  -    }
  -    cleanup {
  -        if (fd != -1) close(fd);
  -    }
  -    catch (ex) {
  -        if (ex.ex_class == (void *)includeit && ex.ex_value != NULL) {
  -            fprintf(stderr, "ERROR: problem with \"%s\" while including \"%s\"\n", (char *)ex.ex_value, filename);
  -        }
  -        if (cpBuf != NULL)
  -            free((char *)cpBuf);
  -        return OPTION_ERR_TRY;
  -    }
  -
  -    try {
  -        char *cpI;  /* pointer to next character to be read */
  -        char *cpO;  /* pointer to next character to be written. Used for eliminating
  -                       backslash+newline at a line continuation */
  -        char *cpL;  /* pointer to start of line */
  -        int pline;  /* current physical (disregarding line continuation) line number */
  -        int lline;  /* current logical lines first physical line number */
  -        int eline;  /* flag signaling empty or just whitespace-filled line */
  -        char c;     /* current character */
  -        char p;     /* previous character */
  -        int eof;    /* flag signaling end of file detected */
   
           cpI = (char *)cpBuf;
           cpO = (char *)cpBuf;
  @@ -549,13 +534,19 @@
       }
       cleanup {
           int i;
  +        if (fd != -1) close(fd);
           if (argv != NULL) {
               for (i = 0; argv[i] != NULL; i++)
                   free(argv[i]);
               free(argv);
           }
  +        if (cpBuf != NULL)
  +            free((char *)cpBuf);
       }
       catch(ex) {
  +        if (ex.ex_class == (void *)includeit && ex.ex_value != NULL) {
  +            fprintf(stderr, "ERROR: problem with \"%s\" while including \"%s\"\n", (char *)ex.ex_value, filename);
  +        }
           rc = OPTION_ERR_TRY;
       }
       return rc;
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 11 11:54:09 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A75AD76511; Tue, 11 Feb 2003 11:54:08 +0100 (CET)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ sio_test.c
Message-Id: <20030211105408.A75AD76511@mail.ossp.org>
Date: Tue, 11 Feb 2003 11:54:08 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   11-Feb-2003 11:54:08
  Branch: HEAD                             Handle: 2003021110540700

  Modified files:
    ossp-pkg/sio            sio_test.c

  Log:
    make pipes work on older systems (aka Linux)

  Summary:
    Revision    Changes     Path
    1.18        +4  -4      ossp-pkg/sio/sio_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_test.c
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 sio_test.c
  --- ossp-pkg/sio/sio_test.c	6 Feb 2003 13:51:54 -0000	1.17
  +++ ossp-pkg/sio/sio_test.c	11 Feb 2003 10:54:07 -0000	1.18
  @@ -144,14 +144,14 @@
   
       if (child == 0) {
           int result;
  -        close(pd[1]);
  -        result = (*server)(NULL, pd[0], wcount);
           close(pd[0]);
  +        result = (*server)(NULL, pd[1], wcount);
  +        close(pd[1]);
           exit(result ? 1 : 0);
       } else {
  -        close(pd[0]);
  -        (*client)(_t, pd[1], wcount);
           close(pd[1]);
  +        (*client)(_t, pd[0], wcount);
  +        close(pd[0]);
           waitpid(child, &status, 0);
           if (status != 0) {
               ts_test_fail(TS_CTX, "child returned status %08lx\n",
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 11 12:40:14 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5A0E076511; Tue, 11 Feb 2003 12:40:14 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_option.c
Message-Id: <20030211114014.5A0E076511@mail.ossp.org>
Date: Tue, 11 Feb 2003 12:40:14 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   11-Feb-2003 12:40:13
  Branch: HEAD                             Handle: 2003021111401200

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_option.c

  Log:
    cosmetics

  Summary:
    Revision    Changes     Path
    1.28        +4  -2      ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 lmtp2nntp_option.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	11 Feb 2003 10:00:48 -0000	1.27
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	11 Feb 2003 11:40:12 -0000	1.28
  @@ -534,10 +534,12 @@
       }
       cleanup {
           int i;
  -        if (fd != -1) close(fd);
  +        if (fd != -1)
  +            close(fd);
           if (argv != NULL) {
  -            for (i = 0; argv[i] != NULL; i++)
  +            for (i = 0; argv[i] != NULL; i++) {
                   free(argv[i]);
  +            }
               free(argv);
           }
           if (cpBuf != NULL)
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 11 12:41:13 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 59E6D76511; Tue, 11 Feb 2003 12:41:13 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_config.h lmtp2nntp_main.c
Message-Id: <20030211114113.59E6D76511@mail.ossp.org>
Date: Tue, 11 Feb 2003 12:41:13 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   11-Feb-2003 12:41:12
  Branch: HEAD                             Handle: 2003021111411100

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.h lmtp2nntp_main.c

  Log:
    controlled exit when configuration throws exception

  Summary:
    Revision    Changes     Path
    1.12        +1  -0      ossp-pkg/lmtp2nntp/lmtp2nntp_config.h
    1.69        +8  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.h
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 lmtp2nntp_config.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.h	30 Jan 2003 19:42:13 -0000	1.11
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.h	11 Feb 2003 11:41:11 -0000	1.12
  @@ -35,6 +35,7 @@
   typedef enum {
       CONFIG_OK,
       CONFIG_OK_DRY,  /* dry run short circuit i.e. --testfile or --version */
  +    CONFIG_ERR_TRY, /* caught an exception from a underlying codeblock */
       CONFIG_ERR_LOG  /* cannot initialize logging */
   } lmtp2nntp_config_rc_t;
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================================
  $ cvs diff -u -r1.68 -r1.69 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	10 Feb 2003 14:25:39 -0000	1.68
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	11 Feb 2003 11:41:11 -0000	1.69
  @@ -464,11 +464,18 @@
       {
           lmtp2nntp_option_rc_t rvo;
           lmtp2nntp_config_rc_t rvc;
  +        ex_t ex;
   
           if (option_create(&o, ctx->val) != OPTION_OK)
               CU(ERR_EXECUTION);
           rvo = option_parse(o, argc, argv);
  -        rvc = config_context(ctx);
  +        rvc = CONFIG_OK;
  +        try {
  +            rvc = config_context(ctx);
  +        }
  +        catch(ex) {
  +            rvc = CONFIG_ERR_TRY;
  +        }
           if (rvc == CONFIG_OK_DRY)
               CU(0);
           if (rvo != OPTION_OK || rvc != CONFIG_OK)
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 11 13:31:17 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C2D0F7651C; Tue, 11 Feb 2003 13:31:16 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ ts.c
Message-Id: <20030211123116.C2D0F7651C@mail.ossp.org>
Date: Tue, 11 Feb 2003 13:31:16 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Feb-2003 13:31:15
  Branch: HEAD                             Handle: 2003021112311400

  Modified files:
    ossp-pkg/sa             ts.c

  Log:
    fix compile warning under latest GCC 3.3 SNAPSHOT

  Summary:
    Revision    Changes     Path
    1.9         +1  -1      ossp-pkg/sa/ts.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ts.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 ts.c
  --- ossp-pkg/sa/ts.c	10 Feb 2003 10:13:29 -0000	1.8
  +++ ossp-pkg/sa/ts.c	11 Feb 2003 12:31:14 -0000	1.9
  @@ -127,7 +127,7 @@
       char *cp;
       char c;
       int d;
  -    int n;
  +    size_t n;
       int bytes;
   
       if (format == NULL)
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 11 13:54:59 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B50C77651B; Tue, 11 Feb 2003 13:54:59 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_option.c
Message-Id: <20030211125459.B50C77651B@mail.ossp.org>
Date: Tue, 11 Feb 2003 13:54:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   11-Feb-2003 13:54:59
  Branch: HEAD                             Handle: 2003021112545800

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_option.c

  Log:
    fix memory leak when overriding a hardcoded default assignemnt

  Summary:
    Revision    Changes     Path
    1.29        +8  -2      ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 lmtp2nntp_option.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	11 Feb 2003 11:40:12 -0000	1.28
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	11 Feb 2003 12:54:58 -0000	1.29
  @@ -378,10 +378,16 @@
           case OPT_SINGLE:
               if (arg == NULL)
                   return OPTION_ERR_ARG;
  -        /*  add this if repeated overwriting definitions of single values are not allowed
  -         *  if (oc->ndata >= 1 || oc->data.s != NULL)
  +        /*  add this if repeated overwriting definitions of single values is not allowed
  +         *  however, this will inhibit preinitialization with a default value
  +         *  if (oc->ndata != 0)
            *      return OPTION_ERR_USE;
            */
  +            if (oc->ndata == 1 && oc->data.s != NULL) { /* free previous (default) assignment */
  +                free(oc->data.s);
  +                oc->data.s = NULL;
  +                oc->ndata = 0;
  +            }
               if (cbctx != NULL)
                   if (str_parse(arg, cbctx) <= 0) {
                       fprintf(stderr, "ERROR: argument \"%s\" does NOT match syntax \"%s\"\n", arg, cbctx);
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 11 13:55:33 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 665637651B; Tue, 11 Feb 2003 13:55:33 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_option.c
Message-Id: <20030211125533.665637651B@mail.ossp.org>
Date: Tue, 11 Feb 2003 13:55:33 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   11-Feb-2003 13:55:33
  Branch: HEAD                             Handle: 2003021112553100

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_option.c

  Log:
    work around memory leak in popt

  Summary:
    Revision    Changes     Path
    1.30        +1  -0      ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 lmtp2nntp_option.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	11 Feb 2003 12:54:58 -0000	1.29
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	11 Feb 2003 12:55:31 -0000	1.30
  @@ -316,6 +316,7 @@
           }
           if ((option_find(o, i, &ocp) == OPTION_OK) && (ocp->cb != NULL)) {
               rv = ocp->cb(ocp, cp = (ocp->type == OPT_FLAG ? NULL : (char *)popt_getoptarg(poptCon)), ocp->cbctx);
  +            free(cp); /* TODO this should be the task of popt_freecontext but debugging showed popt does not free(3) */
               if (rc == OPTION_OK)
                   rc = rv;
           }
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 11 13:56:45 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 211B37651B; Tue, 11 Feb 2003 13:56:45 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog sh.arx sh.common sh.guessos sh....
Message-Id: <20030211125645.211B37651B@mail.ossp.org>
Date: Tue, 11 Feb 2003 13:56:45 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Feb-2003 13:56:44
  Branch: HEAD                             Handle: 2003021112563901

  Modified files:
    ossp-pkg/shtool         ChangeLog sh.arx sh.common sh.guessos sh.install
                            sh.mdate sh.mkdir sh.mkln sh.mkshadow sh.move
                            sh.path sh.rotate sh.scpp sh.subst sh.table
                            sh.tarball sh.version shtoolize.in

  Log:
    Fixed error exit in all commands by introducing an "shtool_exit"
    function (which correctly cleans up temporary files) and
    replacing all "exit" calls with "shtool_exit". THIS THE FIRST
    TIME INTRODUCED THE USAGE OF A SHELL FUNCTION TO THE SHTOOL CODE.
    This is known to break on _very_ anchient and broken Bourne-Shell
    implementations and is considered to be no longer a real problem
    in the year 2003. Especially there is no alternative way anyway.

  Summary:
    Revision    Changes     Path
    1.179       +10 -1      ossp-pkg/shtool/ChangeLog
    1.18        +3  -3      ossp-pkg/shtool/sh.arx
    1.20        +9  -0      ossp-pkg/shtool/sh.common
    1.23        +55 -55     ossp-pkg/shtool/sh.guessos
    1.26        +10 -10     ossp-pkg/shtool/sh.install
    1.12        +2  -2      ossp-pkg/shtool/sh.mdate
    1.20        +1  -1      ossp-pkg/shtool/sh.mkdir
    1.13        +2  -2      ossp-pkg/shtool/sh.mkln
    1.21        +1  -1      ossp-pkg/shtool/sh.mkshadow
    1.16        +7  -7      ossp-pkg/shtool/sh.move
    1.23        +9  -9      ossp-pkg/shtool/sh.path
    1.4         +37 -37     ossp-pkg/shtool/sh.rotate
    1.23        +1  -1      ossp-pkg/shtool/sh.scpp
    1.6         +4  -4      ossp-pkg/shtool/sh.subst
    1.17        +2  -2      ossp-pkg/shtool/sh.table
    1.17        +1  -1      ossp-pkg/shtool/sh.tarball
    1.33        +4  -4      ossp-pkg/shtool/sh.version
    1.29        +1  -2      ossp-pkg/shtool/shtoolize.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.178 -r1.179 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	16 Dec 2002 13:50:20 -0000	1.178
  +++ ossp-pkg/shtool/ChangeLog	11 Feb 2003 12:56:39 -0000	1.179
  @@ -9,7 +9,16 @@
   
    ChangeLog
   
  - Changes between 1.6.2 and 1.6.3 (02-Nov-2002 to xx-Dec-2002):
  + Changes between 1.6.2 and 2.0.0 (02-Nov-2002 to xx-Feb-2003):
  +
  +   *) Fixed error exit in all commands by introducing an "shtool_exit"
  +      function (which correctly cleans up temporary files) and
  +      replacing all "exit" calls with "shtool_exit". THIS THE FIRST
  +      TIME INTRODUCED THE USAGE OF A SHELL FUNCTION TO THE SHTOOL CODE.
  +      This is known to break on _very_ anchient and broken Bourne-Shell
  +      implementations and is considered to be no longer a real problem
  +      in the year 2003. Especially there is no alternative way anyway.
  +      [Ralf S. Engelschall <rse@engelschall.com>]
   
      *) Fixed description of "shtool install -C" operation in manual page.
         [Stefan Seefeld <stefan@fresco.org>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.arx
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 sh.arx
  --- ossp-pkg/shtool/sh.arx	31 Dec 2001 15:06:04 -0000	1.17
  +++ ossp-pkg/shtool/sh.arx	11 Feb 2003 12:56:39 -0000	1.18
  @@ -41,7 +41,7 @@
       for file in $files; do
           if [ ! -f $file ]; then
               echo "$msgprefix:Error: input file not found: $file" 1>&2
  -            exit 1
  +            shtool_exit 1
           fi
           case $file in
               *.a )
  @@ -67,7 +67,7 @@
                   (cd $tmpdir && eval $ar_prg x $from)
                   if [ $? -ne 0 ]; then
                       echo "$msgprefix:Error: member extraction failed for archive: $file" 1>&2
  -                    exit 1
  +                    shtool_exit 1
                   fi
                   for member in - `eval $ar_prg t $file | sed -e '/_\.SYMDEF/d'`; do
                       [ ".$member" = .- ] && continue
  @@ -88,7 +88,7 @@
   eval $ar_prg $ar_cmd $archive $nfiles
   if [ $? -ne 0 ]; then
       echo "$msgprefix:Error: archive command failed" 1>&2
  -    exit $?
  +    shtool_exit $?
   fi
   
   #   cleanup and die gracefully
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.common
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 sh.common
  --- ossp-pkg/shtool/sh.common	23 Sep 2001 10:58:10 -0000	1.19
  +++ ossp-pkg/shtool/sh.common	11 Feb 2003 12:56:39 -0000	1.20
  @@ -174,3 +174,12 @@
       chmod 600 $tmpfile
   fi
   
  +#   cleanup procedure
  +shtool_exit () {
  +    rc="$1"
  +    if [ ".$gen_tmpfile" = .yes ]; then
  +        rm -f $tmpfile >/dev/null 2>&1 || true
  +    fi
  +    exit $rc
  +}
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.guessos
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 sh.guessos
  --- ossp-pkg/shtool/sh.guessos	4 Sep 2002 09:58:42 -0000	1.22
  +++ ossp-pkg/shtool/sh.guessos	11 Feb 2003 12:56:39 -0000	1.23
  @@ -22,31 +22,31 @@
   if [ "x$XREL" != "x" ]; then
       if [ -f /etc/kconfig ]; then
           case "$XREL" in
  -            4.0|4.1) echo "${MACHINE}-whatever-isc4"; exit 0 ;;
  +            4.0|4.1) echo "${MACHINE}-whatever-isc4"; shtool_exit 0 ;;
           esac
       else
       case "$XREL" in
           3.2v4.2)
  -            echo "whatever-whatever-sco3"; exit 0
  +            echo "whatever-whatever-sco3"; shtool_exit 0
               ;;
           3.2v5.0*)
  -            echo "whatever-whatever-sco5"; exit 0
  +            echo "whatever-whatever-sco5"; shtool_exit 0
               ;;
           4.2MP)
               if [ "x$VERSION" = "x2.1.1" ]; then
  -                echo "${MACHINE}-whatever-unixware211"; exit 0
  +                echo "${MACHINE}-whatever-unixware211"; shtool_exit 0
               elif [ "x$VERSION" = "x2.1.2" ]; then
  -                echo "${MACHINE}-whatever-unixware212"; exit 0
  +                echo "${MACHINE}-whatever-unixware212"; shtool_exit 0
               else
  -                echo "${MACHINE}-whatever-unixware2"; exit 0
  +                echo "${MACHINE}-whatever-unixware2"; shtool_exit 0
               fi
               ;;
           4.2)
  -            echo "whatever-whatever-unixware1"; exit 0
  +            echo "whatever-whatever-unixware1"; shtool_exit 0
               ;;
           5)
               case "$VERSION" in
  -                7*) echo "${MACHINE}-whatever-unixware7"; exit 0 ;;
  +                7*) echo "${MACHINE}-whatever-unixware7"; shtool_exit 0 ;;
               esac
               ;;
       esac
  @@ -54,35 +54,35 @@
   fi
   case "${SYSTEM}:${RELEASE}:${VERSION}:${MACHINE}" in
       MiNT:*)
  -        echo "m68k-atari-mint"; exit 0
  +        echo "m68k-atari-mint"; shtool_exit 0
           ;;
       A/UX:*)
  -        echo "m68k-apple-aux3"; exit 0
  +        echo "m68k-apple-aux3"; shtool_exit 0
           ;;
       AIX:*)
           MACH=`echo $MACHINE | sed -e 's;[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F];;'`
  -        echo "${MACH}-ibm-aix${VERSION}.${RELEASE}"; exit 0
  +        echo "${MACH}-ibm-aix${VERSION}.${RELEASE}"; shtool_exit 0
           ;;
       dgux:*)
  -        echo "${MACHINE}-dg-dgux"; exit 0
  +        echo "${MACHINE}-dg-dgux"; shtool_exit 0
           ;;
       HI-UX:*)
  -        echo "${MACHINE}-hi-hiux"; exit 0
  +        echo "${MACHINE}-hi-hiux"; shtool_exit 0
           ;;
       HP-UX:*)
           HPUXVER=`echo ${RELEASE}|sed -e 's/[^.]*.[0B]*//'`
           MACHINE=`echo ${MACHINE}|sed -e 's:/:_:'`
  -        echo "${MACHINE}-hp-hpux${HPUXVER}"; exit 0
  +        echo "${MACHINE}-hp-hpux${HPUXVER}"; shtool_exit 0
           ;;
       IRIX:*)
           if [ -f /usr/lib32/mips4/libm.so ]; then
  -            echo "${MACHINE}/32-sgi-irix${RELEASE}"; exit 0
  +            echo "${MACHINE}/32-sgi-irix${RELEASE}"; shtool_exit 0
           else
  -            echo "${MACHINE}-sgi-irix${RELEASE}"; exit 0
  +            echo "${MACHINE}-sgi-irix${RELEASE}"; shtool_exit 0
           fi
           ;;
       IRIX64:*)
  -        echo "${MACHINE}/64-sgi-irix${RELEASE}"; exit 0
  +        echo "${MACHINE}/64-sgi-irix${RELEASE}"; shtool_exit 0
           ;;
       Linux:*)
           V='whatever'
  @@ -93,19 +93,19 @@
           case "$RELEASE" in
               [1-9].*) R=`echo $RELEASE | cut -c1` ;;
           esac
  -        echo "${MACHINE}-${V}-linux-gnu${R}"; exit 0
  +        echo "${MACHINE}-${V}-linux-gnu${R}"; shtool_exit 0
           ;;
       LynxOS:*)
  -        echo "${MACHINE}-lynx-lynxos"; exit 0
  +        echo "${MACHINE}-lynx-lynxos"; shtool_exit 0
           ;;
       BSD/386|BSD/OS:3.*)
  -        echo "${MACHINE}-whatever-bsdi3"; exit 0
  +        echo "${MACHINE}-whatever-bsdi3"; shtool_exit 0
           ;;
       BSD/386:*:*:*486*|BSD/OS:*:*:*:*486*)
  -        echo "i486-whatever-bsdi"; exit 0
  +        echo "i486-whatever-bsdi"; shtool_exit 0
           ;;
       BSD/386:*|BSD/OS:*)
  -        echo "${MACHINE}-whatever-bsdi"; exit 0
  +        echo "${MACHINE}-whatever-bsdi"; shtool_exit 0
           ;;
       FreeBSD:*)
           VERS=`echo ${RELEASE} | sed -e 's/[-(].*//'`
  @@ -122,20 +122,20 @@
           case ${MACH} in
              i[0-9]86 ) ARCH="pc" ;;
           esac
  -        echo "${MACH}-${ARCH}-freebsd${VERS}"; exit 0
  +        echo "${MACH}-${ARCH}-freebsd${VERS}"; shtool_exit 0
           ;;
       NetBSD:*:*:*486*)
  -        echo "i486-whatever-netbsd${RELEASE}"; exit 0
  +        echo "i486-whatever-netbsd${RELEASE}"; shtool_exit 0
           ;;
       NetBSD:*)
  -        echo "${MACHINE}-whatever-netbsd${RELEASE}"; exit 0
  +        echo "${MACHINE}-whatever-netbsd${RELEASE}"; shtool_exit 0
           ;;
       OpenBSD:*)
  -        echo "${MACHINE}-whatever-openbsd"; exit 0
  +        echo "${MACHINE}-whatever-openbsd"; shtool_exit 0
           ;;
       OSF1:*:*:*alpha*)
           VERS=`echo $RELEASE | sed -e 's;^V;;'`
  -        echo "${MACHINE}-dec-osf${VERS}"; exit 0
  +        echo "${MACHINE}-dec-osf${VERS}"; shtool_exit 0
           ;;
       QNX:*)
           if [ "$VERSION" -gt 422 ]; then
  @@ -143,95 +143,95 @@
           else
               echo "${MACHINE}-qssl-qnx"
           fi
  -        exit 0
  +        shtool_exit 0
           ;;
       Paragon*:*:*:*)
  -        echo "i860-intel-osf1"; exit 0
  +        echo "i860-intel-osf1"; shtool_exit 0
           ;;
       SunOS:5.*)
           VERSION=`echo $RELEASE | sed -e 's;^5\.;;'`
  -        echo "${MACHINE}-sun-solaris2.${VERSION}"; exit 0
  +        echo "${MACHINE}-sun-solaris2.${VERSION}"; shtool_exit 0
           ;;
       SunOS:*)
  -        echo "${MACHINE}-sun-sunos4"; exit 0
  +        echo "${MACHINE}-sun-sunos4"; shtool_exit 0
           ;;
       UNIX_System_V:4.*:*)
  -        echo "${MACHINE}-whatever-sysv4"; exit 0
  +        echo "${MACHINE}-whatever-sysv4"; shtool_exit 0
           ;;
       unix:3.0.9*:*:88k)
  -        echo "${MACHINE}-encore-sysv4"; exit 0
  +        echo "${MACHINE}-encore-sysv4"; shtool_exit 0
           ;;
       *:4*:R4*:m88k)
  -        echo "${MACHINE}-whatever-sysv4"; exit 0
  +        echo "${MACHINE}-whatever-sysv4"; shtool_exit 0
           ;;
       UnixWare:5:99*:*)
           # Gemini, beta release of next rev of unixware
  -        echo "${MACHINE}-whatever-unixware212"; exit 0
  +        echo "${MACHINE}-whatever-unixware212"; shtool_exit 0
           ;;
       DYNIX/ptx:4*:*)
  -        echo "${MACHINE}-whatever-sysv4"; exit 0
  +        echo "${MACHINE}-whatever-sysv4"; shtool_exit 0
           ;;
       *:4.0:3.0:[345][0-9]?? | *:4.0:3.0:3[34]??[/,]* | library:*)
  -        echo "x86-ncr-sysv4"; exit 0
  +        echo "x86-ncr-sysv4"; shtool_exit 0
           ;;
       ULTRIX:*)
  -        echo "${MACHINE}-unknown-ultrix"; exit 0
  +        echo "${MACHINE}-unknown-ultrix"; shtool_exit 0
           ;;
       SINIX-?:* | ReliantUNIX-?:*)
  -        echo "${MACHINE}-siemens-sysv4"; exit 0
  +        echo "${MACHINE}-siemens-sysv4"; shtool_exit 0
           ;;
       POSIX*BS2000)
  -        echo "${MACHINE}-siemens-sysv4"; exit 0
  +        echo "${MACHINE}-siemens-sysv4"; shtool_exit 0
           ;;
       machten:*)
  -       echo "${MACHINE}-tenon-${SYSTEM}"; exit 0;
  +       echo "${MACHINE}-tenon-${SYSTEM}"; shtool_exit 0;
          ;;
       ConvexOS:*:11.*:*)
  -       echo "${MACHINE}-v11-${SYSTEM}"; exit 0;
  +       echo "${MACHINE}-v11-${SYSTEM}"; shtool_exit 0;
          ;;
       UNIX_SV:*:*:maxion)
  -       echo "${MACHINE}-ccur-sysv4"; exit 0;
  +       echo "${MACHINE}-ccur-sysv4"; shtool_exit 0;
          ;;
       PowerMAX_OS:*:*:Night_Hawk)
          MACHINE=`uname -p`
  -       echo "${MACHINE}-concurrent-powermax"; exit 0;
  +       echo "${MACHINE}-concurrent-powermax"; shtool_exit 0;
          ;;
       UNIX_SV:*)
          if [ -d /usr/nec ];then
  -           echo "mips-nec-sysv4"; exit 0;
  +           echo "mips-nec-sysv4"; shtool_exit 0;
          fi
          ;;
       NonStop-UX:4.[02]*:[BC]*:*)
  -       echo "${MACHINE}-tandem-sysv4"; exit 0;
  +       echo "${MACHINE}-tandem-sysv4"; shtool_exit 0;
          ;;
       Rhapsody:*:*:*)
          case "${MACHINE}" in
              "Power Macintosh") MACHINE=powerpc ;;
          esac
  -       echo "${MACHINE}-apple-rhapsody${RELEASE}"; exit 0
  +       echo "${MACHINE}-apple-rhapsody${RELEASE}"; shtool_exit 0
          ;;
       Darwin:*:*:*)
          MACHINE=`uname -p`
  -       echo "${MACHINE}-apple-darwin${RELEASE}"; exit 0
  +       echo "${MACHINE}-apple-darwin${RELEASE}"; shtool_exit 0
          ;;
       "Mac OS":*:*:*)
          MACHINE=`uname -p`
  -       echo "${MACHINE}-apple-macos${RELEASE}"; exit 0
  +       echo "${MACHINE}-apple-macos${RELEASE}"; shtool_exit 0
          ;;
       "RISC iX":*)
  -       echo "arm-whatever-riscix"; exit 0;
  +       echo "arm-whatever-riscix"; shtool_exit 0;
          ;;
       *:4.0:2:*)
  -       echo "whatever-unisys-sysv4"; exit 0;
  +       echo "whatever-unisys-sysv4"; shtool_exit 0;
          ;;
       *:*:dcosx:NILE*)
  -       echo "pyramid-pyramid-svr4"; exit 0;
  +       echo "pyramid-pyramid-svr4"; shtool_exit 0;
          ;;
       *:*:*:"DRS 6000")
  -       echo "drs6000-whatever-whatever"; exit 0;
  +       echo "drs6000-whatever-whatever"; shtool_exit 0;
          ;;
       AmigaOS:*:*:* )
  -       echo "${MACHINE}-whatever-${SYSTEM}${RELEASE}"; exit 0
  +       echo "${MACHINE}-whatever-${SYSTEM}${RELEASE}"; shtool_exit 0
          ;;
   esac
   
  @@ -248,7 +248,7 @@
            fi
            NEXTREL="`hostinfo | sed -n 's/.*NeXT Mach \([0-9\.]*\).*/\1/p'`"
            NEXTARCH=`arch`
  -         echo "${NEXTARCH}-next-${NEXTOS}${NEXTREL}" ; exit 0
  +         echo "${NEXTARCH}-next-${NEXTOS}${NEXTREL}" ; shtool_exit 0
            ;;
   esac
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.install
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 sh.install
  --- ossp-pkg/shtool/sh.install	2 Nov 2002 12:46:19 -0000	1.25
  +++ ossp-pkg/shtool/sh.install	11 Feb 2003 12:56:39 -0000	1.26
  @@ -54,9 +54,9 @@
           cmd="$cmd -t"
       fi
       for dir in "$@"; do
  -        eval "$cmd $dir" || exit $?
  +        eval "$cmd $dir" || shtool_exit $?
       done
  -    exit 0
  +    shtool_exit 0
   fi
   
   #   determine source(s) and destination
  @@ -78,7 +78,7 @@
   #   consistency check for destination
   if [ $argc -gt 2 -a $dstisdir = 0 ]; then
       echo "$msgprefix:Error: multiple sources require destination to be directory" 1>&2
  -    exit 1
  +    shtool_exit 1
   fi
   
   #   iterate over all source(s)
  @@ -120,12 +120,12 @@
           if [ ".$opt_t" = .yes ]; then
               echo "cp $src $dsttmp" 1>&2
           fi
  -        cp $src $dsttmp || exit $?
  +        cp $src $dsttmp || shtool_exit $?
       else
           if [ ".$opt_t" = .yes ]; then
               echo "mv $src $dsttmp" 1>&2
           fi
  -        mv $src $dsttmp || exit $?
  +        mv $src $dsttmp || shtool_exit $?
       fi
   
       #   adjust the target file
  @@ -137,32 +137,32 @@
               sed="$sed -e '$e'"
           done
           cp $dsttmp $dsttmp.old
  -        eval "$sed <$dsttmp.old >$dsttmp" || exit $?
  +        eval "$sed <$dsttmp.old >$dsttmp" || shtool_exit $?
           rm -f $dsttmp.old
       fi
       if [ ".$opt_s" = .yes ]; then
           if [ ".$opt_t" = .yes ]; then
               echo "strip $dsttmp" 1>&2
           fi
  -        strip $dsttmp || exit $?
  +        strip $dsttmp || shtool_exit $?
       fi
       if [ ".$opt_o" != . ]; then
           if [ ".$opt_t" = .yes ]; then
               echo "chown $opt_o $dsttmp" 1>&2
           fi
  -        chown $opt_o $dsttmp || exit $?
  +        chown $opt_o $dsttmp || shtool_exit $?
       fi
       if [ ".$opt_g" != . ]; then
           if [ ".$opt_t" = .yes ]; then
               echo "chgrp $opt_g $dsttmp" 1>&2
           fi
  -        chgrp $opt_g $dsttmp || exit $?
  +        chgrp $opt_g $dsttmp || shtool_exit $?
       fi
       if [ ".$opt_m" != ".-" ]; then
           if [ ".$opt_t" = .yes ]; then
               echo "chmod $opt_m $dsttmp" 1>&2
           fi
  -        chmod $opt_m $dsttmp || exit $?
  +        chmod $opt_m $dsttmp || shtool_exit $?
       fi
   
       #   determine whether to do a quick install
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.mdate
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 sh.mdate
  --- ossp-pkg/shtool/sh.mdate	23 Sep 2001 10:58:10 -0000	1.11
  +++ ossp-pkg/shtool/sh.mdate	11 Feb 2003 12:56:40 -0000	1.12
  @@ -39,12 +39,12 @@
       [dmy][dmy][dmy] )
           ;;
       * ) echo "$msgprefix:Error: invalid argument to option \`-o': $opt_o" 1>&2
  -        exit 1
  +        shtool_exit 1
           ;;
   esac
   if [ ! -r "$fod" ]; then
       echo "$msgprefix:Error: file or directory not found: $fod" 1>&2
  -    exit 1
  +    shtool_exit 1
   fi
   
   #   prevent "date" giving response in another language
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.mkdir
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 sh.mkdir
  --- ossp-pkg/shtool/sh.mkdir	2 Nov 2002 12:35:56 -0000	1.19
  +++ ossp-pkg/shtool/sh.mkdir	11 Feb 2003 12:56:40 -0000	1.20
  @@ -112,5 +112,5 @@
           done
       fi
   done
  -exit $errstatus
  +shtool_exit $errstatus
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.mkln
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 sh.mkln
  --- ossp-pkg/shtool/sh.mkln	31 Dec 2001 15:06:04 -0000	1.12
  +++ ossp-pkg/shtool/sh.mkln	11 Feb 2003 12:56:40 -0000	1.13
  @@ -40,7 +40,7 @@
   if [ ! -d $dst ]; then
       if [ $args -gt 2 ]; then
           echo "$msgprefix:Error: multiple sources not allowed when target isn't a directory" 1>&2
  -        exit 1
  +        shtool_exit 1
       fi
   fi
   
  @@ -87,7 +87,7 @@
       if [ ".$dstdir" != . ]; then
           if [ ! -d $dstdir ]; then
               echo "$msgprefix:Error: destination directory not found: $dstdir" 1>&2
  -            exit 1
  +            shtool_exit 1
           fi
       fi
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.mkshadow
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 sh.mkshadow
  --- ossp-pkg/shtool/sh.mkshadow	31 Dec 2001 15:06:04 -0000	1.20
  +++ ossp-pkg/shtool/sh.mkshadow	11 Feb 2003 12:56:40 -0000	1.21
  @@ -37,7 +37,7 @@
   #   check whether source exists
   if [ ! -d $src ]; then
       echo "$msgprefix:Error: source directory not found: \`$src'" 1>&2
  -    exit 1
  +    shtool_exit 1
   fi
   
   #   determine if one of the paths is an absolute path,
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.move
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 sh.move
  --- ossp-pkg/shtool/sh.move	31 Dec 2001 15:06:04 -0000	1.15
  +++ ossp-pkg/shtool/sh.move	11 Feb 2003 12:56:40 -0000	1.16
  @@ -37,11 +37,11 @@
   #   consistency checks
   if [ ".$src" = . -o ".$dst" = . ]; then
       echo "$msgprefix:Error: Invalid arguments" 1>&2
  -    exit 1
  +    shtool_exit 1
   fi
   if [ ".$src" = ".$dst" ]; then
       echo "$msgprefix:Error: Source and destination files are the same" 1>&2
  -    exit 1
  +    shtool_exit 1
   fi
   expsrc="$src"
   if [ ".$opt_e" = .yes ]; then
  @@ -50,20 +50,20 @@
   if [ ".$opt_e" = .yes ]; then
       if [ ".`echo "$src" | sed -e 's;^.*\\*.*$;;'`" = ".$src" ]; then
           echo "$msgprefix:Error: Source doesn't contain wildcard ('*'): $dst" 1>&2
  -        exit 1
  +        shtool_exit 1
       fi
       if [ ".`echo "$dst" | sed -e 's;^.*%[1-9].*$;;'`" = ".$dst" ]; then
           echo "$msgprefix:Error: Destination doesn't contain substitution ('%N'): $dst" 1>&2
  -        exit 1
  +        shtool_exit 1
       fi
       if [ ".$expsrc" = ".$src" ]; then
           echo "$msgprefix:Error: Sources not found or no asterisk : $src" 1>&2
  -        exit 1
  +        shtool_exit 1
       fi
   else
       if [ ! -r "$src" ]; then
           echo "$msgprefix:Error: Source not found: $src" 1>&2
  -        exit 1
  +        shtool_exit 1
       fi
   fi
   
  @@ -113,5 +113,5 @@
           break;
       fi
   done
  -exit $errorstatus
  +shtool_exit $errorstatus
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.path
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 sh.path
  --- ossp-pkg/shtool/sh.path	23 Feb 2002 09:18:03 -0000	1.22
  +++ ossp-pkg/shtool/sh.path	11 Feb 2003 12:56:40 -0000	1.23
  @@ -62,7 +62,7 @@
           done
       fi
       echo $rp | sed -e 's:/$::'
  -    exit 0
  +    shtool_exit 0
   fi
   
   #   SPECIAL REQUEST
  @@ -70,12 +70,12 @@
   if [ ".$opt_d" = .yes ]; then
       echo "$namelist" |\
       sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;'
  -    exit 0
  +    shtool_exit 0
   fi
   if [ ".$opt_b" = .yes ]; then
       echo "$namelist" |\
       sed -e 's;.*/\([^/]*\)$;\1;'
  -    exit 0
  +    shtool_exit 0
   fi
   
   #   MAGIC SITUATION
  @@ -103,10 +103,10 @@
           perl="`cat $tmpfile | sort -r -u | sed -e 'q' | cut -d: -f4`"
           rm -f $tmpfile >/dev/null 2>&1
           echo "$perl"
  -        exit 0
  +        shtool_exit 0
       fi
       rm -f $tmpfile >/dev/null 2>&1
  -    exit 1
  +    shtool_exit 1
   fi
   
   #   MAGIC SITUATION
  @@ -146,9 +146,9 @@
       rm -f $tmpfile.c $tmpfile.out >/dev/null 2>&1
       if [ ".$cpp" != . ]; then
           echo "$cpp"
  -        exit 0
  +        shtool_exit 0
       fi
  -    exit 1
  +    shtool_exit 1
   fi
   
   #   STANDARD SITUATION
  @@ -161,9 +161,9 @@
               if [ ".$opt_s" != .yes ]; then
                   echo "$path/$name"
               fi
  -            exit 0
  +            shtool_exit 0
           fi
       done
   done
  -exit 1
  +shtool_exit 1
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.rotate
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 sh.rotate
  --- ossp-pkg/shtool/sh.rotate	11 Jul 2002 17:23:25 -0000	1.3
  +++ ossp-pkg/shtool/sh.rotate	11 Feb 2003 12:56:40 -0000	1.4
  @@ -48,7 +48,7 @@
   #   make sure we have at least one file to rotate
   if [ ".$opt_n" = .0 ]; then
       echo "$msgprefix:Error: invalid argument \`$opt_n' to option -n." 1>&2
  -    exit 1
  +    shtool_exit 1
   fi
   
   #   canonicalize -s option argument
  @@ -66,14 +66,14 @@
           opt_s=`expr $opt_s \* 1073741824` # 1024*1024*1024
       else
           echo "$msgprefix:Error: invalid argument \`$opt_s' to option -s." 1>&2
  -        exit 1
  +        shtool_exit 1
       fi
   fi
   
   #   option -d/-z consistency
   if [ ".$opt_d" = .yes -a ".$opt_z" = . ]; then
       echo "$msgprefix:Error: option -d requires option -z." 1>&2
  -    exit 1
  +    shtool_exit 1
   fi
   
   #   make sure target directory exists
  @@ -81,14 +81,14 @@
       if [ ! -d $opt_a ]; then
           if [ ".$opt_f" = .no ]; then
               echo "$msgprefix:Error: archive directory \`$opt_a' does not exist." 1>&2
  -            exit 1
  +            shtool_exit 1
           fi
  -        mkdir $opt_a || exit $?
  +        mkdir $opt_a || shtool_exit $?
           chmod 755 $opt_a
       fi
       if [ ! -w $opt_a ]; then
           echo "$msgprefix:Error: archive directory \`$opt_a' not writable." 1>&2
  -        exit 1
  +        shtool_exit 1
       fi
   fi
   
  @@ -106,7 +106,7 @@
           [0-9] )
               ;;
           * ) echo "$msgprefix:Error: invalid compression level \`$comp_lvl'" 1>&2
  -            exit 1
  +            shtool_exit 1
               ;;
       esac
   
  @@ -136,7 +136,7 @@
           done
           if [ ".$comp_prg" = . ]; then
               echo "$msgprefix:Error: no suitable compression tool found in \$PATH" 1>&2
  -            exit 1
  +            shtool_exit 1
           fi
       fi
   
  @@ -147,7 +147,7 @@
           */gzip     | gzip     ) comp_ext="gz"  comp_lvl="-$comp_lvl" ;;
           */compress | compress ) comp_ext="Z";  comp_lvl=""           ;;
           * ) echo "$msgprefix:Error: tool \`$comp_prg' is not a known compression tool" 1>&2
  -            exit 1
  +            shtool_exit 1
               ;;
       esac
       comp_suf=".$comp_ext"
  @@ -161,7 +161,7 @@
               continue
           fi
           echo "$msgprefix:Error: logfile \`$file' not found" 1>&2
  -        exit 1
  +        shtool_exit 1
       fi
   
       #   determine log directory (where original logfile is placed)
  @@ -206,7 +206,7 @@
               echo "$opt_P"
           fi
           eval $opt_P
  -        [ $? -ne 0 ] && exit $?
  +        [ $? -ne 0 ] && shtool_exit $?
       fi
   
       #   kick away out-rotated logfile
  @@ -219,13 +219,13 @@
                   echo "$opt_M ${adir}/${file}.${n}${comp_suf}"
               fi
               eval "$opt_M ${adir}/${file}.${n}${comp_suf}"
  -            [ $? -ne 0 ] && exit $?
  +            [ $? -ne 0 ] && shtool_exit $?
           fi
           #   finally get rid of the out-rotated logfile
           if [ ".$opt_t" = .yes ]; then
               echo "rm -f ${adir}/${file}.${n}${comp_suf}"
           fi
  -        rm -f ${adir}/${file}.${n}${comp_suf} || exit $?
  +        rm -f ${adir}/${file}.${n}${comp_suf} || shtool_exit $?
       fi
   
       #   rotate already archived logfiles
  @@ -244,14 +244,14 @@
                   if [ ".$opt_t" = .yes ]; then
                       echo "mv ${adir}/${file}.${n} ${adir}/${file}.${m}"
                   fi
  -                mv ${adir}/${file}.${n} ${adir}/${file}.${m} || exit $?
  +                mv ${adir}/${file}.${n} ${adir}/${file}.${m} || shtool_exit $?
                   if [ ".$opt_t" = .yes ]; then
                       echo "(${comp_prg} ${comp_lvl} <${adir}/${file}.${m} >${adir}/${file}.${m}${comp_suf}; rm -f ${adir}/${file}.${m}) &"
                   fi
                   ( ${comp_prg} ${comp_lvl} \
                         <${adir}/${file}.${m} \
  -                      >${adir}/${file}.${m}${comp_suf} || exit $?
  -                  rm -f ${adir}/${file}.${m} || exit $?
  +                      >${adir}/${file}.${m}${comp_suf} || shtool_exit $?
  +                  rm -f ${adir}/${file}.${m} || shtool_exit $?
                   ) </dev/null >/dev/null 2>&1 &
               else
                   if [ ".$opt_t" = .yes ]; then
  @@ -259,11 +259,11 @@
                   fi
                   ${comp_prg} ${comp_lvl} \
                       <${adir}/${file}.${n} \
  -                    >${adir}/${file}.${m}${comp_suf} || exit $?
  +                    >${adir}/${file}.${m}${comp_suf} || shtool_exit $?
                   if [ ".$opt_t" = .yes ]; then
                       echo "rm -f ${adir}/${file}.${n}"
                   fi
  -                rm -f ${adir}/${file}.${n} || exit $?
  +                rm -f ${adir}/${file}.${n} || shtool_exit $?
               fi
   
               #   fix file attributes
  @@ -271,19 +271,19 @@
                   if [ ".$opt_t" = .yes ]; then
                       echo "chown $opt_o ${adir}/${file}.${m}${comp_suf}"
                   fi
  -                chown $opt_o ${adir}/${file}.${m}${comp_suf} || exit $?
  +                chown $opt_o ${adir}/${file}.${m}${comp_suf} || shtool_exit $?
               fi
               if [ ".$opt_g" != . ]; then
                   if [ ".$opt_t" = .yes ]; then
                       echo "chgrp $opt_g ${adir}/${file}.${m}${comp_suf}"
                   fi
  -                chgrp $opt_g ${adir}/${file}.${m}${comp_suf} || exit $?
  +                chgrp $opt_g ${adir}/${file}.${m}${comp_suf} || shtool_exit $?
               fi
               if [ ".$opt_m" != . ]; then
                   if [ ".$opt_t" = .yes ]; then
                       echo "chmod $opt_m ${adir}/${file}.${m}${comp_suf}"
                   fi
  -                chmod $opt_m ${adir}/${file}.${m}${comp_suf} || exit $?
  +                chmod $opt_m ${adir}/${file}.${m}${comp_suf} || shtool_exit $?
               fi
           else
               #   standard case: second and following rotation file
  @@ -293,7 +293,7 @@
               if [ ".$opt_t" = .yes ]; then
                   echo "mv ${adir}/${file}.${n}${comp_suf} ${adir}/${file}.${m}${comp_suf}"
               fi
  -            mv ${adir}/${file}.${n}${comp_suf} ${adir}/${file}.${m}${comp_suf} || exit $?
  +            mv ${adir}/${file}.${n}${comp_suf} ${adir}/${file}.${m}${comp_suf} || shtool_exit $?
           fi
       done
   
  @@ -303,42 +303,42 @@
           if [ ".$opt_t" = .yes ]; then
               echo "cp -p ${ldir}/${file} ${adir}/${file}.${n}"
           fi
  -        cp -p ${ldir}/${file} ${adir}/${file}.${n} || exit $?
  +        cp -p ${ldir}/${file} ${adir}/${file}.${n} || shtool_exit $?
           if [ ".$opt_r" = .no ]; then
               if [ ".$opt_t" = .yes ]; then
                   echo "cp /dev/null ${ldir}/${file}"
               fi
  -            cp /dev/null ${ldir}/${file} || exit $?
  +            cp /dev/null ${ldir}/${file} || shtool_exit $?
           fi
       else
           #   approach: move[+touch]
           if [ ".$opt_t" = .yes ]; then
               echo "mv ${ldir}/${file} ${adir}/${file}.${n}"
           fi
  -        mv ${ldir}/${file} ${adir}/${file}.${n} || exit $?
  +        mv ${ldir}/${file} ${adir}/${file}.${n} || shtool_exit $?
           if [ ".$opt_r" = .no ]; then
               if [ ".$opt_t" = .yes ]; then
                   echo "touch ${ldir}/${file}"
               fi
  -            touch ${ldir}/${file} || exit $?
  +            touch ${ldir}/${file} || shtool_exit $?
               #   fix file attributes
               if [ ".$opt_o" != . ]; then
                   if [ ".$opt_t" = .yes ]; then
                       echo "chown $opt_o ${ldir}/${file}"
                   fi
  -                chown $opt_o ${ldir}/${file} || exit $?
  +                chown $opt_o ${ldir}/${file} || shtool_exit $?
               fi
               if [ ".$opt_g" != . ]; then
                   if [ ".$opt_t" = .yes ]; then
                       echo "chgrp $opt_g ${ldir}/${file}"
                   fi
  -                chgrp $opt_g ${ldir}/${file} || exit $?
  +                chgrp $opt_g ${ldir}/${file} || shtool_exit $?
               fi
               if [ ".$opt_m" != . ]; then
                   if [ ".$opt_t" = .yes ]; then
                       echo "chmod $opt_m ${ldir}/${file}"
                   fi
  -                chmod $opt_m ${ldir}/${file} || exit $?
  +                chmod $opt_m ${ldir}/${file} || shtool_exit $?
               fi
           fi
       fi
  @@ -352,8 +352,8 @@
               fi
               ( ${comp_prg} ${comp_lvl} \
                     <${adir}/${file}.${n} \
  -                  >${adir}/${file}.${n}${comp_suf} || exit $?
  -              rm -f ${adir}/${file}.${n} || exit $?
  +                  >${adir}/${file}.${n}${comp_suf} || shtool_exit $?
  +              rm -f ${adir}/${file}.${n} || shtool_exit $?
               ) </dev/null >/dev/null 2>&1 &
           else
               if [ ".$opt_t" = .yes ]; then
  @@ -361,11 +361,11 @@
               fi
               ${comp_prg} ${comp_lvl} \
                   <${adir}/${file}.${n} \
  -                >${adir}/${file}.${n}${comp_suf} || exit $?
  +                >${adir}/${file}.${n}${comp_suf} || shtool_exit $?
               if [ ".$opt_t" = .yes ]; then
                   echo "rm -f ${opt_a}${file}.${n}"
               fi
  -            rm -f ${adir}/${file}.${n} || exit $?
  +            rm -f ${adir}/${file}.${n} || shtool_exit $?
           fi
   
           #   fix file attributes
  @@ -373,19 +373,19 @@
               if [ ".$opt_t" = .yes ]; then
                   echo "chown $opt_o ${adir}/${file}.${n}${comp_suf}"
               fi
  -            chown $opt_o ${adir}/${file}.${n}${comp_suf} || exit $?
  +            chown $opt_o ${adir}/${file}.${n}${comp_suf} || shtool_exit $?
           fi
           if [ ".$opt_g" != . ]; then
               if [ ".$opt_t" = .yes ]; then
                   echo "chgrp $opt_g ${adir}/${file}.${n}${comp_suf}"
               fi
  -            chgrp $opt_g ${adir}/${file}.${n}${comp_suf} || exit $?
  +            chgrp $opt_g ${adir}/${file}.${n}${comp_suf} || shtool_exit $?
           fi
           if [ ".$opt_m" != . ]; then
               if [ ".$opt_t" = .yes ]; then
                   echo "chmod $opt_m ${adir}/${file}.${n}${comp_suf}"
               fi
  -            chmod $opt_m ${adir}/${file}.${n}${comp_suf} || exit $?
  +            chmod $opt_m ${adir}/${file}.${n}${comp_suf} || shtool_exit $?
           fi
       fi
   
  @@ -395,7 +395,7 @@
               echo "$opt_E"
           fi
           eval $opt_E
  -        [ $? -ne 0 ] && exit $?
  +        [ $? -ne 0 ] && shtool_exit $?
       fi
   done
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.scpp
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 sh.scpp
  --- ossp-pkg/shtool/sh.scpp	2 Nov 2002 12:14:10 -0000	1.22
  +++ ossp-pkg/shtool/sh.scpp	11 Feb 2003 12:56:40 -0000	1.23
  @@ -58,7 +58,7 @@
   done
   if [ ".$awk" = . ]; then
       echo "$msgprefix:Error: cannot find a reasonable Awk" 1>&2
  -    exit 1
  +    shtool_exit 1
   fi
   
   #   parse source file(s)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.subst
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 sh.subst
  --- ossp-pkg/shtool/sh.subst	23 Feb 2002 09:18:03 -0000	1.5
  +++ ossp-pkg/shtool/sh.subst	11 Feb 2003 12:56:40 -0000	1.6
  @@ -42,11 +42,11 @@
   #   parameter consistency check
   if [ $# -eq 0 -a ".$opt_b" != . ]; then
       echo "$msgprefix:Error: option -b cannot be applied to stdin" 1>&2
  -    exit 1
  +    shtool_exit 1
   fi
   if [ $# -eq 0 -a ".$opt_s" = .yes ]; then
       echo "$msgprefix:Error: option -s cannot be applied to stdin" 1>&2
  -    exit 1
  +    shtool_exit 1
   fi
   
   #   build underlying sed(1) command
  @@ -60,12 +60,12 @@
   elif [ ".$opt_f" != . ]; then
       if [ ! -f $opt_f ]; then
           echo "$msgprefix:Error: command file \`$opt_f' not found or not a regular file" 1>&2
  -        exit 1
  +        shtool_exit 1
       fi
       sedcmd="$sedcmd -f '$opt_f'"
   else
       echo "$msgprefix:Error: either -e option(s) or -f option required" 1>&2
  -    exit 1
  +    shtool_exit 1
   fi
   
   #   determine extension for original file
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.table
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 sh.table
  --- ossp-pkg/shtool/sh.table	31 Dec 2001 15:06:04 -0000	1.16
  +++ ossp-pkg/shtool/sh.table	11 Feb 2003 12:56:40 -0000	1.17
  @@ -33,11 +33,11 @@
   
   if [ $opt_c -gt 4 ]; then
       echo "$msgprefix:Error: Invalid number of colums (1..4 allowed only)" 1>&2
  -    exit 1
  +    shtool_exit 1
   fi
   case "x$opt_F" in
       x? ) ;;
  -    *  ) echo "$msgprefix:Error: Invalid separator (one char allowed only)" 1>&2; exit 1 ;;
  +    *  ) echo "$msgprefix:Error: Invalid separator (one char allowed only)" 1>&2; shtool_exit 1 ;;
   esac
   
   #   split the list into a table
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.tarball
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 sh.tarball
  --- ossp-pkg/shtool/sh.tarball	31 Dec 2001 15:06:04 -0000	1.16
  +++ ossp-pkg/shtool/sh.tarball	11 Feb 2003 12:56:40 -0000	1.17
  @@ -149,7 +149,7 @@
       if [ ".$opt_t" = .yes ]; then
           echo "mkdir $tmpdir/$tarname" 1>&2
       fi
  -    mkdir $tmpdir/$tarname || exit 1
  +    mkdir $tmpdir/$tarname || shtool_exit 1
       if [ ".$opt_t" = .yes ]; then
           echo "cat $tmpfile.lst | xargs $prg_tar cf - | (cd $tmpdir/$tarname && $prg_tar xf -)" 1>&2
       fi
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.version
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 sh.version
  --- ossp-pkg/shtool/sh.version	23 Feb 2002 09:18:03 -0000	1.32
  +++ ossp-pkg/shtool/sh.version	11 Feb 2003 12:56:40 -0000	1.33
  @@ -46,7 +46,7 @@
       #   use given triple
       if [ ".`echo $triple | grep '[0-9]*.[0-9]*[sabp.][0-9]*'`" = . ]; then
           echo "$msgprefix:Error: invalid argument to option \`-s': \`$opt_s'" 1>&2
  -        exit 1
  +        shtool_exit 1
       fi
       eval `echo $triple |\
             sed -e 's%\([0-9]*\)\.\([0-9]*\)\([sabp.]\)\([0-9]*\).*%\
  @@ -79,7 +79,7 @@
           l ) lev=`expr $lev + 1`
               ;;
           * ) echo "$msgprefix:Error: invalid argument to option \`-i': \`$opt_i'" 1>&2
  -            exit 1
  +            shtool_exit 1
               ;;
       esac
       tim=calc
  @@ -173,7 +173,7 @@
               echo "${hex}"
               ;;
           * ) echo "$msgprefix:Error: invalid argument to option \`-d': \`$opt_d'" 1>&2
  -            exit 1
  +            shtool_exit 1
               ;;
       esac
   else
  @@ -299,7 +299,7 @@
               echo >>$file ""
               ;;
           * ) echo "$msgprefix:Error: invalid argument to option \`-l': \`$opt_l'" 1>&2
  -            exit 1
  +            shtool_exit 1
               ;;
       esac
   fi
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtoolize.in
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 shtoolize.in
  --- ossp-pkg/shtool/shtoolize.in	31 Dec 2001 15:10:59 -0000	1.28
  +++ ossp-pkg/shtool/shtoolize.in	11 Feb 2003 12:56:40 -0000	1.29
  @@ -511,9 +511,8 @@
   print OUT <<"EOT";
   esac
   
  -exit 0
  +shtool_exit 0
   
  -##EOF##
   EOT
   close(OUT);
   chmod(0755, $opt_o);
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 11 13:58:05 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 09A7A7651B; Tue, 11 Feb 2003 13:58:04 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog README VERSION shtool.spec
Message-Id: <20030211125804.09A7A7651B@mail.ossp.org>
Date: Tue, 11 Feb 2003 13:58:04 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Feb-2003 13:58:04
  Branch: HEAD                             Handle: 2003021112580201

  Modified files:
    ossp-pkg/shtool         ChangeLog README VERSION shtool.spec

  Log:
    brand as 2.0b0 until I know later whether to directly jump to 2.0.0 or
    introduce a beta period

  Summary:
    Revision    Changes     Path
    1.180       +1  -1      ossp-pkg/shtool/ChangeLog
    1.88        +1  -1      ossp-pkg/shtool/README
    1.66        +1  -1      ossp-pkg/shtool/VERSION
    1.17        +1  -1      ossp-pkg/shtool/shtool.spec
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.179 -r1.180 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	11 Feb 2003 12:56:39 -0000	1.179
  +++ ossp-pkg/shtool/ChangeLog	11 Feb 2003 12:58:02 -0000	1.180
  @@ -9,7 +9,7 @@
   
    ChangeLog
   
  - Changes between 1.6.2 and 2.0.0 (02-Nov-2002 to xx-Feb-2003):
  + Changes between 1.6.2 and 2.0b0 (02-Nov-2002 to xx-Feb-2003):
   
      *) Fixed error exit in all commands by introducing an "shtool_exit"
         function (which correctly cleans up temporary files) and
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/README
  ============================================================================
  $ cvs diff -u -r1.87 -r1.88 README
  --- ossp-pkg/shtool/README	2 Nov 2002 12:49:48 -0000	1.87
  +++ ossp-pkg/shtool/README	11 Feb 2003 12:58:03 -0000	1.88
  @@ -10,7 +10,7 @@
     http://www.gnu.org/software/shtool/
     ftp://ftp.gnu.org/gnu/shtool/
   
  -  Version 1.6.2 (02-Nov-2002)
  +  Version 2.0b0 (11-Feb-2003)
   
     The GNU shtool program is a compilation of small but very stable and
     portable shell scripts into a single shell tool. All ingredients
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/VERSION
  ============================================================================
  $ cvs diff -u -r1.65 -r1.66 VERSION
  --- ossp-pkg/shtool/VERSION	2 Nov 2002 12:49:48 -0000	1.65
  +++ ossp-pkg/shtool/VERSION	11 Feb 2003 12:58:03 -0000	1.66
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for GNU shtool (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is GNU shtool, Version 1.6.2 (02-Nov-2002)
  +  This is GNU shtool, Version 2.0b0 (11-Feb-2003)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtool.spec
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 shtool.spec
  --- ossp-pkg/shtool/shtool.spec	2 Nov 2002 12:49:48 -0000	1.16
  +++ ossp-pkg/shtool/shtool.spec	11 Feb 2003 12:58:03 -0000	1.17
  @@ -30,7 +30,7 @@
   %define prefix /usr/local
   %endif
   
  -%define ver 1.6.2
  +%define ver 2.0b0
   %define rel 0
   
   Name:       shtool
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 11 14:01:03 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9C75E7651B; Tue, 11 Feb 2003 14:01:02 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog Makefile.in README configure.ac...
Message-Id: <20030211130102.9C75E7651B@mail.ossp.org>
Date: Tue, 11 Feb 2003 14:01:02 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Feb-2003 14:01:02
  Branch: HEAD                             Handle: 2003021113004901

  Modified files:
    ossp-pkg/shtool         ChangeLog Makefile.in README configure.ac
                            devtool.func sh.arx sh.echo sh.fixperm sh.install
                            sh.mkdir sh.mkln sh.mkshadow sh.move sh.path
                            sh.prop sh.rotate sh.scpp sh.slo sh.subst sh.table
                            sh.tarball sh.version shtool.m4 shtool.pod
                            shtool.spec shtoolize.in shtoolize.pod test.db
                            test.sh

  Log:
    Bump year in copyright messages to cover new year 2003.

  Summary:
    Revision    Changes     Path
    1.181       +3  -0      ossp-pkg/shtool/ChangeLog
    1.47        +1  -1      ossp-pkg/shtool/Makefile.in
    1.89        +1  -1      ossp-pkg/shtool/README
    1.4         +2  -2      ossp-pkg/shtool/configure.ac
    1.3         +1  -1      ossp-pkg/shtool/devtool.func
    1.19        +1  -1      ossp-pkg/shtool/sh.arx
    1.33        +1  -1      ossp-pkg/shtool/sh.echo
    1.16        +1  -1      ossp-pkg/shtool/sh.fixperm
    1.27        +1  -1      ossp-pkg/shtool/sh.install
    1.21        +1  -1      ossp-pkg/shtool/sh.mkdir
    1.14        +1  -1      ossp-pkg/shtool/sh.mkln
    1.22        +1  -1      ossp-pkg/shtool/sh.mkshadow
    1.17        +1  -1      ossp-pkg/shtool/sh.move
    1.24        +1  -1      ossp-pkg/shtool/sh.path
    1.16        +1  -1      ossp-pkg/shtool/sh.prop
    1.5         +1  -1      ossp-pkg/shtool/sh.rotate
    1.24        +1  -1      ossp-pkg/shtool/sh.scpp
    1.19        +1  -1      ossp-pkg/shtool/sh.slo
    1.7         +1  -1      ossp-pkg/shtool/sh.subst
    1.18        +1  -1      ossp-pkg/shtool/sh.table
    1.18        +1  -1      ossp-pkg/shtool/sh.tarball
    1.34        +1  -1      ossp-pkg/shtool/sh.version
    1.5         +1  -1      ossp-pkg/shtool/shtool.m4
    1.63        +1  -1      ossp-pkg/shtool/shtool.pod
    1.18        +1  -1      ossp-pkg/shtool/shtool.spec
    1.30        +3  -3      ossp-pkg/shtool/shtoolize.in
    1.10        +1  -1      ossp-pkg/shtool/shtoolize.pod
    1.20        +1  -1      ossp-pkg/shtool/test.db
    1.10        +1  -1      ossp-pkg/shtool/test.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.180 -r1.181 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	11 Feb 2003 12:58:02 -0000	1.180
  +++ ossp-pkg/shtool/ChangeLog	11 Feb 2003 13:00:49 -0000	1.181
  @@ -11,6 +11,9 @@
   
    Changes between 1.6.2 and 2.0b0 (02-Nov-2002 to xx-Feb-2003):
   
  +   *) Bump year in copyright messages to cover new year 2003.
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
      *) Fixed error exit in all commands by introducing an "shtool_exit"
         function (which correctly cleans up temporary files) and
         replacing all "exit" calls with "shtool_exit". THIS THE FIRST
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.46 -r1.47 Makefile.in
  --- ossp-pkg/shtool/Makefile.in	1 Feb 2002 14:58:04 -0000	1.46
  +++ ossp-pkg/shtool/Makefile.in	11 Feb 2003 13:00:49 -0000	1.47
  @@ -1,6 +1,6 @@
   ##
   ##  Makefile for GNU shtool
  -##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/README
  ============================================================================
  $ cvs diff -u -r1.88 -r1.89 README
  --- ossp-pkg/shtool/README	11 Feb 2003 12:58:03 -0000	1.88
  +++ ossp-pkg/shtool/README	11 Feb 2003 13:00:49 -0000	1.89
  @@ -5,7 +5,7 @@
     |___/_| |_|\__\___/ \___/|_|
   
     GNU shtool -- The GNU Portable Shell Tool
  -  Copyright (c) 1994-2002 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 1994-2003 Ralf S. Engelschall <rse@engelschall.com>
   
     http://www.gnu.org/software/shtool/
     ftp://ftp.gnu.org/gnu/shtool/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/configure.ac
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 configure.ac
  --- ossp-pkg/shtool/configure.ac	2 Nov 2002 12:39:55 -0000	1.3
  +++ ossp-pkg/shtool/configure.ac	11 Feb 2003 13:00:49 -0000	1.4
  @@ -1,6 +1,6 @@
   dnl ##
   dnl ##  configure.ac -- Autoconf source for GNU shtool
  -dnl ##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##
   dnl ##  This file is part of shtool and free software; you can redistribute
   dnl ##  it and/or modify it under the terms of the GNU General Public
  @@ -24,7 +24,7 @@
   
   SHTOOL_VERSION_STR="`sh sh.version -l txt -d long VERSION`"
   sh sh.echo -e "Configuring %BGNU shtool%b (Portable Shell Tool), version %B${SHTOOL_VERSION_STR}%b"
  -echo "Copyright (c) 1994-2002 Ralf S. Engelschall <rse@engelschall.com>"
  +echo "Copyright (c) 1994-2003 Ralf S. Engelschall <rse@engelschall.com>"
   AC_SUBST(SHTOOL_VERSION_STR)
   
   AC_PREFIX_DEFAULT(/usr/local)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/devtool.func
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.func
  --- ossp-pkg/shtool/devtool.func	11 Jul 2002 17:23:25 -0000	1.2
  +++ ossp-pkg/shtool/devtool.func	11 Feb 2003 13:00:49 -0000	1.3
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com> 
   ##
   
   devtool_require () {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.arx
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 sh.arx
  --- ossp-pkg/shtool/sh.arx	11 Feb 2003 12:56:39 -0000	1.18
  +++ ossp-pkg/shtool/sh.arx	11 Feb 2003 13:00:49 -0000	1.19
  @@ -1,6 +1,6 @@
   ##
   ##  arx -- Extended archive command
  -##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for shtool
   ##
   ##  This file is part of shtool and free software; you can redistribute
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.echo
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 sh.echo
  --- ossp-pkg/shtool/sh.echo	30 Oct 2002 16:21:51 -0000	1.32
  +++ ossp-pkg/shtool/sh.echo	11 Feb 2003 13:00:50 -0000	1.33
  @@ -1,6 +1,6 @@
   ##
   ##  echo -- Print string with optional construct expansion
  -##  Copyright (c) 1998-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for WML as buildinfo
   ##
   ##  This file is part of shtool and free software; you can redistribute
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.fixperm
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 sh.fixperm
  --- ossp-pkg/shtool/sh.fixperm	16 Dec 2002 13:50:20 -0000	1.15
  +++ ossp-pkg/shtool/sh.fixperm	11 Feb 2003 13:00:50 -0000	1.16
  @@ -1,6 +1,6 @@
   ##
   ##  fixperm -- Fix file permissions inside a source tree
  -##  Copyright (c) 1996-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1996-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for ePerl
   ##
   ##  This file is part of shtool and free software; you can redistribute
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.install
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 sh.install
  --- ossp-pkg/shtool/sh.install	11 Feb 2003 12:56:39 -0000	1.26
  +++ ossp-pkg/shtool/sh.install	11 Feb 2003 13:00:50 -0000	1.27
  @@ -1,6 +1,6 @@
   ##
   ##  install -- Install a program, script or datafile
  -##  Copyright (c) 1997-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1997-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for shtool
   ##
   ##  This file is part of shtool and free software; you can redistribute
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.mkdir
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 sh.mkdir
  --- ossp-pkg/shtool/sh.mkdir	11 Feb 2003 12:56:40 -0000	1.20
  +++ ossp-pkg/shtool/sh.mkdir	11 Feb 2003 13:00:50 -0000	1.21
  @@ -1,6 +1,6 @@
   ##
   ##  mkdir -- Make one or more directories
  -##  Copyright (c) 1996-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1996-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for public domain by Noah Friedman <friedman@prep.ai.mit.edu>
   ##  Cleaned up and enhanced for shtool
   ##
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.mkln
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 sh.mkln
  --- ossp-pkg/shtool/sh.mkln	11 Feb 2003 12:56:40 -0000	1.13
  +++ ossp-pkg/shtool/sh.mkln	11 Feb 2003 13:00:50 -0000	1.14
  @@ -1,6 +1,6 @@
   ##
   ##  mkln -- Make link with calculation of relative paths
  -##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for shtool
   ##
   ##  This file is part of shtool and free software; you can redistribute
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.mkshadow
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 sh.mkshadow
  --- ossp-pkg/shtool/sh.mkshadow	11 Feb 2003 12:56:40 -0000	1.21
  +++ ossp-pkg/shtool/sh.mkshadow	11 Feb 2003 13:00:50 -0000	1.22
  @@ -1,6 +1,6 @@
   ##
   ##  mkshadow -- Make a shadow tree through symbolic links
  -##  Copyright (c) 1998-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for Apache
   ##
   ##  This file is part of shtool and free software; you can redistribute
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.move
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 sh.move
  --- ossp-pkg/shtool/sh.move	11 Feb 2003 12:56:40 -0000	1.16
  +++ ossp-pkg/shtool/sh.move	11 Feb 2003 13:00:50 -0000	1.17
  @@ -1,6 +1,6 @@
   ##
   ##  move -- Move files with simultaneous substitution
  -##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for shtool
   ##
   ##  This file is part of shtool and free software; you can redistribute
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.path
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 sh.path
  --- ossp-pkg/shtool/sh.path	11 Feb 2003 12:56:40 -0000	1.23
  +++ ossp-pkg/shtool/sh.path	11 Feb 2003 13:00:50 -0000	1.24
  @@ -1,6 +1,6 @@
   ##
   ##  path -- Deal with program paths
  -##  Copyright (c) 1998-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for Apache
   ##
   ##  This file is part of shtool and free software; you can redistribute
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.prop
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 sh.prop
  --- ossp-pkg/shtool/sh.prop	31 Dec 2001 15:06:04 -0000	1.15
  +++ ossp-pkg/shtool/sh.prop	11 Feb 2003 13:00:50 -0000	1.16
  @@ -1,6 +1,6 @@
   ##
   ##  prop -- Display progress with a running propeller
  -##  Copyright (c) 1998-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for mod_ssl
   ##
   ##  This file is part of shtool and free software; you can redistribute
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.rotate
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 sh.rotate
  --- ossp-pkg/shtool/sh.rotate	11 Feb 2003 12:56:40 -0000	1.4
  +++ ossp-pkg/shtool/sh.rotate	11 Feb 2003 13:00:50 -0000	1.5
  @@ -1,6 +1,6 @@
   ##
   ##  rotate -- Logfile rotation
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for use in OpenPKG
   ##
   ##  This file is part of shtool and free software; you can redistribute
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.scpp
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 sh.scpp
  --- ossp-pkg/shtool/sh.scpp	11 Feb 2003 12:56:40 -0000	1.23
  +++ ossp-pkg/shtool/sh.scpp	11 Feb 2003 13:00:50 -0000	1.24
  @@ -1,6 +1,6 @@
   ##
   ##  scpp -- Sharing C Pre-Processor
  -##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for GNU Pth
   ##
   ##  This file is part of shtool and free software; you can redistribute
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.slo
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 sh.slo
  --- ossp-pkg/shtool/sh.slo	31 Dec 2001 15:06:04 -0000	1.18
  +++ ossp-pkg/shtool/sh.slo	11 Feb 2003 13:00:50 -0000	1.19
  @@ -1,6 +1,6 @@
   ##
   ##  slo -- Separate linker options by library class
  -##  Copyright (c) 1998-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for Apache
   ##
   ##  This file is part of shtool and free software; you can redistribute
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.subst
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 sh.subst
  --- ossp-pkg/shtool/sh.subst	11 Feb 2003 12:56:40 -0000	1.6
  +++ ossp-pkg/shtool/sh.subst	11 Feb 2003 13:00:50 -0000	1.7
  @@ -1,6 +1,6 @@
   ##
   ##  subst -- Apply sed(1) substitution operations
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for OpenPKG's rpmtool
   ##
   ##  This file is part of shtool and free software; you can redistribute
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.table
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 sh.table
  --- ossp-pkg/shtool/sh.table	11 Feb 2003 12:56:40 -0000	1.17
  +++ ossp-pkg/shtool/sh.table	11 Feb 2003 13:00:50 -0000	1.18
  @@ -1,6 +1,6 @@
   ##
   ##  table -- Pretty-print a field-separated list as a table
  -##  Copyright (c) 1998-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for Apache
   ##
   ##  This file is part of shtool and free software; you can redistribute
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.tarball
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 sh.tarball
  --- ossp-pkg/shtool/sh.tarball	11 Feb 2003 12:56:40 -0000	1.17
  +++ ossp-pkg/shtool/sh.tarball	11 Feb 2003 13:00:50 -0000	1.18
  @@ -1,6 +1,6 @@
   ##
   ##  tarball -- Roll distribution tarballs
  -##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for shtool
   ##
   ##  This file is part of shtool and free software; you can redistribute
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.version
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 sh.version
  --- ossp-pkg/shtool/sh.version	11 Feb 2003 12:56:40 -0000	1.33
  +++ ossp-pkg/shtool/sh.version	11 Feb 2003 13:00:50 -0000	1.34
  @@ -1,6 +1,6 @@
   ##
   ##  version -- Maintain a version information file
  -##  Copyright (c) 1994-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1994-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for ePerl, rewritten from scratch for shtool
   ##
   ##  This file is part of shtool and free software; you can redistribute
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtool.m4
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 shtool.m4
  --- ossp-pkg/shtool/shtool.m4	31 Dec 2001 15:06:04 -0000	1.4
  +++ ossp-pkg/shtool/shtool.m4	11 Feb 2003 13:00:50 -0000	1.5
  @@ -1,6 +1,6 @@
   ##
   ##  shtool.m4 -- GNU shtool Autoconf macros
  -##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtool.pod
  ============================================================================
  $ cvs diff -u -r1.62 -r1.63 shtool.pod
  --- ossp-pkg/shtool/shtool.pod	9 Dec 2002 10:42:13 -0000	1.62
  +++ ossp-pkg/shtool/shtool.pod	11 Feb 2003 13:00:50 -0000	1.63
  @@ -1,6 +1,6 @@
   ##
   ##  shtool.pod -- Manual Page for shtool in POD format
  -##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtool.spec
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 shtool.spec
  --- ossp-pkg/shtool/shtool.spec	11 Feb 2003 12:58:03 -0000	1.17
  +++ ossp-pkg/shtool/shtool.spec	11 Feb 2003 13:00:50 -0000	1.18
  @@ -1,6 +1,6 @@
   ##
   ##  shtool.spec -- RPM specification for shtool package
  -##  Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtoolize.in
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 shtoolize.in
  --- ossp-pkg/shtool/shtoolize.in	11 Feb 2003 12:56:40 -0000	1.29
  +++ ossp-pkg/shtool/shtoolize.in	11 Feb 2003 13:00:50 -0000	1.30
  @@ -1,7 +1,7 @@
   #!@PERL@
   ##
   ##  shtoolize -- Build shtool script out of ingredient scripts
  -##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ -347,7 +347,7 @@
   #!/bin/sh
   ##
   ##  GNU shtool -- The GNU Portable Shell Tool
  -##  Copyright (c) 1994-2002 Ralf S. Engelschall <rse\@engelschall.com>
  +##  Copyright (c) 1994-2003 Ralf S. Engelschall <rse\@engelschall.com>
   ##
   ##  See http://www.gnu.org/software/shtool/ for more information.
   ##  See ftp://ftp.gnu.org/gnu/shtool/ for latest version.
  @@ -393,7 +393,7 @@
   fi
   if [ ".\$1" = ".-h" -o ".\$1" = ".--help" ]; then
       echo "This is GNU shtool, version ${version}"
  -    echo "Copyright (c) 1994-2002 Ralf S. Engelschall <rse\@engelschall.com>"
  +    echo "Copyright (c) 1994-2003 Ralf S. Engelschall <rse\@engelschall.com>"
       echo "Report bugs to <bug-shtool\@gnu.org>"
       echo ''
       echo "Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtoolize.pod
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 shtoolize.pod
  --- ossp-pkg/shtool/shtoolize.pod	31 Dec 2001 15:06:04 -0000	1.9
  +++ ossp-pkg/shtool/shtoolize.pod	11 Feb 2003 13:00:50 -0000	1.10
  @@ -1,6 +1,6 @@
   ##
   ##  shtoolize.pod -- Manual Page for shtoolize in POD format
  -##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/test.db
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 test.db
  --- ossp-pkg/shtool/test.db	31 Dec 2001 15:06:04 -0000	1.19
  +++ ossp-pkg/shtool/test.db	11 Feb 2003 13:00:50 -0000	1.20
  @@ -1,6 +1,6 @@
   ##
   ##  test.db -- GNU shtool test suite (minimalistic)
  -##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   @begin{echo}
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/test.sh
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 test.sh
  --- ossp-pkg/shtool/test.sh	31 Dec 2001 15:06:04 -0000	1.9
  +++ ossp-pkg/shtool/test.sh	11 Feb 2003 13:00:50 -0000	1.10
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  test.sh -- GNU shtool test suite driver
  -##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 11 14:03:11 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D4EAB7651B; Tue, 11 Feb 2003 14:03:10 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ devtool.conf
Message-Id: <20030211130310.D4EAB7651B@mail.ossp.org>
Date: Tue, 11 Feb 2003 14:03:10 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Feb-2003 14:03:10
  Branch: HEAD                             Handle: 2003021113031000

  Modified files:
    ossp-pkg/shtool         devtool.conf

  Log:
    go up to latest and greatest

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-pkg/shtool/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 devtool.conf
  --- ossp-pkg/shtool/devtool.conf	2 Nov 2002 12:32:29 -0000	1.4
  +++ ossp-pkg/shtool/devtool.conf	11 Feb 2003 13:03:10 -0000	1.5
  @@ -3,7 +3,7 @@
   ##
   
   %autogen
  -    @autogen autoconf 2.54 "2.5*"
  +    @autogen autoconf 2.57 "2.5*"
   
   %autoclean
       @autoclean autoconf
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 11 14:17:42 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 841767651C; Tue, 11 Feb 2003 14:17:42 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ .dmallocrc config.param
Message-Id: <20030211131742.841767651C@mail.ossp.org>
Date: Tue, 11 Feb 2003 14:17:42 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Feb-2003 14:17:41
  Branch: HEAD                             Handle: 2003021113173900

  Modified files:
    ossp-pkg/pth            .dmallocrc config.param

  Log:
    upgrade dmalloc stuff

  Summary:
    Revision    Changes     Path
    1.4         +16 -10     ossp-pkg/pth/.dmallocrc
    1.21        +1  -1      ossp-pkg/pth/config.param
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/.dmallocrc
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 .dmallocrc
  --- ossp-pkg/pth/.dmallocrc	24 Mar 2001 14:56:46 -0000	1.3
  +++ ossp-pkg/pth/.dmallocrc	11 Feb 2003 13:17:39 -0000	1.4
  @@ -1,20 +1,26 @@
   ##
   ##  Dmalloc Init Script for use with GNU Pth
  -##  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
  -# no debugging
  +#   no debugging
   none    none
   
  -# basic debugging
  +#   basic debugging
   debug1  log-stats, log-non-free, check-fence
   
  -# more logging and some heap checking
  -debug2  log-stats, log-non-free, log-trans, \
  -        check-fence, check-heap, check-lists, error-abort
  +#   more logging and some heap checking
  +debug2  log-stats, log-non-free, check-fence, \
  +        log-trans, check-heap, check-lists
   
  -# good utilities
  -debug3  log-stats, log-non-free, log-trans, \
  -        log-admin, check-fence, check-heap, check-lists, realloc-copy, \
  -        free-blank, error-abort
  +#   good utilities
  +debug3  log-stats, log-non-free, check-fence, \
  +        log-trans, check-heap, check-lists, \
  +        log-admin, realloc-copy, free-blank
  +
  +#   full metal jacket
  +debug4  log-stats, log-non-free, check-fence, \
  +        log-trans, check-heap, check-lists, \
  +        log-admin, realloc-copy, free-blank, \
  +        log-bad-space, log-nonfree-space
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/config.param
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 config.param
  --- ossp-pkg/pth/config.param	1 Jan 2003 15:49:11 -0000	1.20
  +++ ossp-pkg/pth/config.param	11 Feb 2003 13:17:39 -0000	1.21
  @@ -52,7 +52,7 @@
   
   #   build for developing
   #   (developer machine only)
  -#   [Hint: dmalloc -l dmalloc.log -i 1 debug3]
  +#   [Hint: dmalloc -l dmalloc.log -i 1 debug1]
   devel {
       CC=/usr/opkg/bin/gcc IF test -f /usr/opkg/bin/gcc
       --prefix=/usr/opkg/local/PKG/pth IF test -d /usr/opkg/local/PKG/pth/
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 11 14:19:08 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7A7847651C; Tue, 11 Feb 2003 14:19:08 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ NEWS
Message-Id: <20030211131908.7A7847651C@mail.ossp.org>
Date: Tue, 11 Feb 2003 14:19:08 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Feb-2003 14:19:08
  Branch: HEAD                             Handle: 2003021113190700

  Modified files:
    ossp-pkg/pth            NEWS

  Log:
    fix NEWS

  Summary:
    Revision    Changes     Path
    1.38        +2  -2      ossp-pkg/pth/NEWS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/NEWS
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 NEWS
  --- ossp-pkg/pth/NEWS	1 Jan 2003 15:49:11 -0000	1.37
  +++ ossp-pkg/pth/NEWS	11 Feb 2003 13:19:07 -0000	1.38
  @@ -12,7 +12,7 @@
     This is a list of user-visible and/or major changes to GNU Pth.
     For more details please have a look at the ChangeLog file.
   
  -  Changes between 1.4 and 2.0 (24-Mar-2001 to xx-Jan-2003)
  +  Changes between 1.4 and 2.0 (24-Mar-2001 to 11-Feb-2003)
   
      *) Make pth_poll(3) more compliant to POSIX.1-2001/SUSv3 poll(2).
      *) Make pth_select(3) more compliant to POSIX.1-2001/SUSv3 select(2).
  @@ -28,7 +28,7 @@
      *) Completely rewrote the "hard syscall mapping". 
      *) Added support to pth_poll(3) for POLLD{RD,WR}{NORM,BAND}.
      *) Fixed a long-standing termination bug in pth_exit(3).
  -   *) Upgraded to Autoconf 2.54, Shtool 1.6.2 and Libtool 1.4.3.
  +   *) Upgraded to Autoconf 2.57, Shtool 1.6.2 and Libtool 1.4.3.
      *) Add optional support for OSSP ex based exception handling.
   
     Changes between 1.3 and 1.4 (19-Feb-2000 to 24-Mar-2001)
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 11 14:19:29 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 31F1776526; Tue, 11 Feb 2003 14:19:29 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ README devtool.conf pth_vers.c
Message-Id: <20030211131929.31F1776526@mail.ossp.org>
Date: Tue, 11 Feb 2003 14:19:29 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Feb-2003 14:19:29
  Branch: HEAD                             Handle: 2003021113192700

  Modified files:
    ossp-pkg/pth            README devtool.conf pth_vers.c

  Log:
    bump for release

  Summary:
    Revision    Changes     Path
    1.201       +1  -1      ossp-pkg/pth/README
    1.14        +1  -1      ossp-pkg/pth/devtool.conf
    1.146       +9  -9      ossp-pkg/pth/pth_vers.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/README
  ============================================================================
  $ cvs diff -u -r1.200 -r1.201 README
  --- ossp-pkg/pth/README	1 Jan 2003 15:49:11 -0000	1.200
  +++ ossp-pkg/pth/README	11 Feb 2003 13:19:27 -0000	1.201
  @@ -5,7 +5,7 @@
     |_|    \__|_| |_|                     the impossible.''
   
     GNU Pth - The GNU Portable Threads
  -  Version 
  +  Version 2.0.0 (11-Feb-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 devtool.conf
  --- ossp-pkg/pth/devtool.conf	4 Dec 2002 14:16:30 -0000	1.13
  +++ ossp-pkg/pth/devtool.conf	11 Feb 2003 13:19:27 -0000	1.14
  @@ -35,7 +35,7 @@
   %version
       ./shtool version -lc -n 'GNU Pth' -p pth_internal_ -e pth_vers.c
       V=`./shtool version -lc -dlong pth_vers.c`
  -    sed -e "s/Version .*(.*)/Version $V/g" <README >README.n
  +    sed -e "s/Version .*/Version $V/g" <README >README.n
       mv README.n README
   
   %dist
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_vers.c
  ============================================================================
  $ cvs diff -u -r1.145 -r1.146 pth_vers.c
  --- ossp-pkg/pth/pth_vers.c	1 Jan 2003 15:49:12 -0000	1.145
  +++ ossp-pkg/pth/pth_vers.c	11 Feb 2003 13:19:27 -0000	1.146
  @@ -8,7 +8,7 @@
   #ifndef _PTH_VERS_C_
   #define _PTH_VERS_C_
   
  -#define PTH_INTERNAL_VERSION 0x200103
  +#define PTH_INTERNAL_VERSION 0x200200
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _PTH_VERS_C_AS_HEADER_
   
   pth_internal_version_t pth_internal_version = {
  -    0x200103,
  -    "2.0b3",
  -    "2.0b3 (01-Jan-2003)",
  -    "This is GNU Pth, Version 2.0b3 (01-Jan-2003)",
  -    "GNU Pth 2.0b3 (01-Jan-2003)",
  -    "GNU Pth/2.0b3",
  -    "@(#)GNU Pth 2.0b3 (01-Jan-2003)",
  -    "$Id: GNU Pth 2.0b3 (01-Jan-2003) $"
  +    0x200200,
  +    "2.0.0",
  +    "2.0.0 (11-Feb-2003)",
  +    "This is GNU Pth, Version 2.0.0 (11-Feb-2003)",
  +    "GNU Pth 2.0.0 (11-Feb-2003)",
  +    "GNU Pth/2.0.0",
  +    "@(#)GNU Pth 2.0.0 (11-Feb-2003)",
  +    "$Id: GNU Pth 2.0.0 (11-Feb-2003) $"
   };
   
   #endif /* _PTH_VERS_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 11 14:40:58 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 18AF47651B; Tue, 11 Feb 2003 14:40:58 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_l2.c
Message-Id: <20030211134058.18AF47651B@mail.ossp.org>
Date: Tue, 11 Feb 2003 14:40:58 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   11-Feb-2003 14:40:57
  Branch: HEAD                             Handle: 2003021113405700

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_l2.c

  Log:
    pass destruction through to childs

  Summary:
    Revision    Changes     Path
    1.7         +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_l2.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_l2.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 lmtp2nntp_l2.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_l2.c	30 Jan 2003 19:45:20 -0000	1.6
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_l2.c	11 Feb 2003 13:40:57 -0000	1.7
  @@ -111,7 +111,7 @@
       /* destroy channel configuration */
       free(cfg);
   
  -    return L2_OK;
  +    return L2_OK_PASS;
   }
   
   /* exported channel handler structure */
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 11 14:49:27 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8CAE17651C; Tue, 11 Feb 2003 14:49:27 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_main.c
Message-Id: <20030211134927.8CAE17651C@mail.ossp.org>
Date: Tue, 11 Feb 2003 14:49:27 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   11-Feb-2003 14:49:27
  Branch: HEAD                             Handle: 2003021113492600

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_main.c

  Log:
    revert signals to default action so they can be used as expected if
    cleanup hangs at some point

  Summary:
    Revision    Changes     Path
    1.70        +15 -2      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================================
  $ cvs diff -u -r1.69 -r1.70 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	11 Feb 2003 11:41:11 -0000	1.69
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	11 Feb 2003 13:49:26 -0000	1.70
  @@ -710,9 +710,22 @@
   
       /* graceful shutdown */
       CUS:
  +    signal(SIGCHLD, SIG_DFL);
  +    signal(SIGHUP,  SIG_DFL);
  +    signal(SIGINT,  SIG_DFL);
  +    signal(SIGQUIT, SIG_DFL);
  +    signal(SIGILL,  SIG_DFL);
  +    signal(SIGBUS,  SIG_DFL);
  +    signal(SIGSEGV, SIG_DFL);
  +    signal(SIGSYS,  SIG_DFL);
  +    signal(SIGTERM, SIG_DFL);
  +    signal(SIGUSR1, SIG_DFL);
  +    signal(SIGUSR2, SIG_DFL);
       logbook(ctx->l2, L2_LEVEL_NOTICE, "graceful shutdown shortly before exit - no more logging");
  -    l2_channel_destroy(ctx->l2);
  -    l2_env_destroy(ctx->l2_env);
  +    if (ctx->l2 != NULL)
  +        l2_channel_destroy(ctx->l2);
  +    if (ctx->l2_env != NULL)
  +        l2_env_destroy(ctx->l2_env);
       if (ctx->saServerbind)
           sa_destroy(ctx->saServerbind);
       if (ctx->saaServerbind)
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 11 15:10:34 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7AF707651C; Tue, 11 Feb 2003 15:10:34 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_main.c
Message-Id: <20030211141034.7AF707651C@mail.ossp.org>
Date: Tue, 11 Feb 2003 15:10:34 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   11-Feb-2003 15:10:34
  Branch: HEAD                             Handle: 2003021114103300

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_main.c

  Log:
    properly clean up access control list socket abstraction addresses

  Summary:
    Revision    Changes     Path
    1.71        +5  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================================
  $ cvs diff -u -r1.70 -r1.71 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	11 Feb 2003 13:49:26 -0000	1.70
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	11 Feb 2003 14:10:33 -0000	1.71
  @@ -736,8 +736,12 @@
           free(ctx->option_pidfile);
       if (ctx->pns != NULL)
           free(ctx->pns);
  -    if (ctx->pacl != NULL)
  +    if (ctx->pacl != NULL) {
  +        for (i = 0; i < ctx->nacl; i++)
  +            if (ctx->pacl[i].saa != NULL)
  +                sa_addr_destroy(ctx->pacl[i].saa);
           free(ctx->pacl);
  +    }
       if (ctx->option_nodename != NULL)
           free(ctx->option_nodename);
       if (ctx->prival != NULL)
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 11 15:18:50 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B13A87651C; Tue, 11 Feb 2003 15:18:49 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_main.c
Message-Id: <20030211141849.B13A87651C@mail.ossp.org>
Date: Tue, 11 Feb 2003 15:18:49 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   11-Feb-2003 15:18:49
  Branch: HEAD                             Handle: 2003021114184700

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_main.c

  Log:
    release fakestatus/dsn pair

  Summary:
    Revision    Changes     Path
    1.72        +3  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================================
  $ cvs diff -u -r1.71 -r1.72 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	11 Feb 2003 14:10:33 -0000	1.71
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	11 Feb 2003 14:18:47 -0000	1.72
  @@ -380,7 +380,7 @@
       ctx->option_groupmode = GROUPMODE_UNDEF;
       ctx->option_operationmode = OPERATIONMODE_UNDEF;
       ctx->option_operationmodefakestatus = NULL;
  -    ctx->option_operationmodefakedsn    = NULL;
  +    ctx->option_operationmodefakedsn    = NULL; /* is joined to fakestatus in a single malloc(3) */
       ctx->option_maxmessagesize = 0;
       ctx->option_firstheaderrule = NULL;
       ctx->option_timeout_lmtp_accept  = 0;
  @@ -756,6 +756,8 @@
           var_destroy(ctx->config_varregex);
       if (ctx->config_varctx != NULL)
           var_destroy(ctx->config_varctx);
  +    if (ctx->option_operationmodefakestatus != NULL)
  +        free(ctx->option_operationmodefakestatus); /* includes dsn */
       if (ctx != NULL)
           free(ctx);
       str_parse(NULL, NULL);
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 11 16:03:21 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0DB5F7651B; Tue, 11 Feb 2003 16:03:19 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_msg.c
Message-Id: <20030211150319.0DB5F7651B@mail.ossp.org>
Date: Tue, 11 Feb 2003 16:03:19 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   11-Feb-2003 16:03:19
  Branch: HEAD                             Handle: 2003021115031800

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_msg.c

  Log:
    defeat leakage when tear down headermatrix; iterate using lookahead

  Summary:
    Revision    Changes     Path
    1.38        +9  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 lmtp2nntp_msg.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	10 Feb 2003 10:13:12 -0000	1.37
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	11 Feb 2003 15:03:18 -0000	1.38
  @@ -717,13 +717,15 @@
   
       try {
           headerdata_t *hdI;
  +        headerdata_t *hdN;
   
           if (msg->azHeaders != NULL)
               free(msg->azHeaders);
           msg->azHeaders = NULL;
           msg->asHeaders = 0;
   
  -        for (hdI = msg->hdFirst; hdI != NULL; hdI = hdI->next) { /* for each header */
  +        hdI = msg->hdFirst; /* for each header */
  +        while (hdI != NULL) {
               logbook(msg->l2, L2_LEVEL_DEBUG, "processing matrix header \"%s\"", hdI->name);
               if (hdI->name == NULL || strlen(hdI->name) == 0 || hdI->ndata == 0)
                   continue;
  @@ -743,6 +745,12 @@
                       argz_add(&msg->azHeaders, &msg->asHeaders, hdI->data.m[i]);
                   }
               }
  +            /* cleanup */
  +            hdN = hdI->next;
  +            hdI->prev = NULL;
  +            hdI->next = NULL;
  +            headerdestroy(hdI);
  +            hdI = hdN;
           }
       }
       catch(ex) {
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 11 16:31:22 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1870C7651F; Tue, 11 Feb 2003 16:31:20 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_main.c
Message-Id: <20030211153120.1870C7651F@mail.ossp.org>
Date: Tue, 11 Feb 2003 16:31:20 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   11-Feb-2003 16:31:20
  Branch: HEAD                             Handle: 2003021115311800

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_main.c

  Log:
    always print destination number along with given option string

  Summary:
    Revision    Changes     Path
    1.73        +10 -10     ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================================
  $ cvs diff -u -r1.72 -r1.73 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	11 Feb 2003 14:18:47 -0000	1.72
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	11 Feb 2003 15:31:18 -0000	1.73
  @@ -861,7 +861,7 @@
       do {
           logbook(ctx->l2, L2_LEVEL_DEBUG, "trying ns[%d]", i);
           bOk = TRUE;
  -        logbook(ctx->l2, L2_LEVEL_TRACE, "try ${option.destination[%d]}", i);
  +        logbook(ctx->l2, L2_LEVEL_TRACE, "try destination#%d ${option.destination[%d]}", i, i);
   
           ctx->pns[i].l2 = ctx->l2;
   
  @@ -882,7 +882,7 @@
               logbook(ctx->l2, L2_LEVEL_DEBUG, "connect");
               if (sa_connect(ctx->pns[i].sa, ctx->pns[i].saa) != SA_OK) {
                   bOk = FALSE;
  -                logbook(ctx->l2, L2_LEVEL_WARNING, "connect to ${option.destination[%d]} failed, %m", i);
  +                logbook(ctx->l2, L2_LEVEL_WARNING, "connect to destination#%d ${option.destination[%d]} failed, %m", i, i);
               }
           }
   
  @@ -906,11 +906,11 @@
           }
   
           if (bOk) {
  -            logbook(ctx->l2, L2_LEVEL_INFO, "NNTP session to ${option.destination[%d]} successfully established", i);
  +            logbook(ctx->l2, L2_LEVEL_INFO, "NNTP session to destination#%d ${option.destination[%d]} successfully established", i, i);
               is++;
           }
           else {
  -            logbook(ctx->l2, L2_LEVEL_WARNING, "NNTP session establishment to ${option.destination[%d]} failed", i);
  +            logbook(ctx->l2, L2_LEVEL_WARNING, "NNTP session establishment to destination#%d ${option.destination[%d]} failed", i, i);
               lmtp_gfs_ns(&ctx->pns[i]);
           }
           i++;
  @@ -1678,14 +1678,14 @@
                   char *res_ptr;
                   size_t res_len;
                   str_format(errorstring, sizeof(errorstring),
  -                           "${option.destination[%d]} returned %s\n"
  -                           "${option.destination[%d]} lastresp \"%s\"",
  -                           i, nntp_error(ctx->pns[i].rc),
  -                           i, nntp_lastresp(ctx->pns[i].nntp));
  +                           "destination#%d ${option.destination[%d]} returned %s\n"
  +                           "destination#%d ${option.destination[%d]} lastresp \"%s\"",
  +                           i, i, nntp_error(ctx->pns[i].rc),
  +                           i, i, nntp_lastresp(ctx->pns[i].nntp));
                   if ((var_rc = var_expand(ctx->config_varctx, errorstring, strlen(errorstring), &res_ptr, &res_len, FALSE)) != VAR_OK) {
                       str_format(errorstring, sizeof(errorstring),
  -                               "destination[%d] returned %s\n"
  -                               "destination[%d] lastresp \"%s\"",
  +                               "destination#%d returned %s\n"
  +                               "destination#%d lastresp \"%s\"",
                                  i, nntp_error(ctx->pns[i].rc),
                                  i, nntp_lastresp(ctx->pns[i].nntp));
                   }
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 11 16:32:55 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9D1AB7651B; Tue, 11 Feb 2003 16:32:55 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ .dmallocrc
Message-Id: <20030211153255.9D1AB7651B@mail.ossp.org>
Date: Tue, 11 Feb 2003 16:32:55 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   11-Feb-2003 16:32:55
  Branch: HEAD                             Handle: 2003021115325300

  Modified files:
    ossp-pkg/lmtp2nntp      .dmallocrc

  Log:
    more tweaking

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-pkg/lmtp2nntp/.dmallocrc
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/.dmallocrc
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 .dmallocrc
  --- ossp-pkg/lmtp2nntp/.dmallocrc	11 Feb 2003 08:57:50 -0000	1.4
  +++ ossp-pkg/lmtp2nntp/.dmallocrc	11 Feb 2003 15:32:53 -0000	1.5
  @@ -29,5 +29,5 @@
   debug4  log-stats, log-non-free, check-fence, \
           log-trans, check-heap, check-lists, \
           log-admin, realloc-copy, free-blank, \
  -        log-bad-space, log-nonfree-space
  +        log-bad-space, log-nonfree-space, never-reuse
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 11 16:33:43 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6AB9C7651B; Tue, 11 Feb 2003 16:33:43 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ devtool.conf
Message-Id: <20030211153343.6AB9C7651B@mail.ossp.org>
Date: Tue, 11 Feb 2003 16:33:43 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   11-Feb-2003 16:33:43
  Branch: HEAD                             Handle: 2003021115334200

  Modified files:
    ossp-pkg/lmtp2nntp      devtool.conf

  Log:
    dmalloc by example

  Summary:
    Revision    Changes     Path
    1.14        +1  -0      ossp-pkg/lmtp2nntp/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 devtool.conf
  --- ossp-pkg/lmtp2nntp/devtool.conf	6 Feb 2003 20:43:11 -0000	1.13
  +++ ossp-pkg/lmtp2nntp/devtool.conf	11 Feb 2003 15:33:42 -0000	1.14
  @@ -37,6 +37,7 @@
           --enable-maintainer \
           --enable-debug \
           "$@"
  +        #--with-dmalloc=/usr/opkg \
   
   %release
       ./devtool version
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 11 16:34:13 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3E5EF76526; Tue, 11 Feb 2003 16:34:13 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ README lmtp2nntp_version.c
Message-Id: <20030211153413.3E5EF76526@mail.ossp.org>
Date: Tue, 11 Feb 2003 16:34:13 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   11-Feb-2003 16:34:13
  Branch: HEAD                             Handle: 2003021115341200

  Modified files:
    ossp-pkg/lmtp2nntp      README lmtp2nntp_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.30        +1  -1      ossp-pkg/lmtp2nntp/README
    1.12        +9  -9      ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/README
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 README
  --- ossp-pkg/lmtp2nntp/README	10 Feb 2003 10:13:10 -0000	1.29
  +++ ossp-pkg/lmtp2nntp/README	11 Feb 2003 15:34:12 -0000	1.30
  @@ -5,7 +5,7 @@
     |_|_|_| \___/|____/____/|_|    |_|_||_||_|\__| .__/____|_||_|_||_|\__| .__/
                                                  |_|                     |_|
     OSSP lmtp2nntp - Mail to News Gateway
  -  Version 1.2b1 (06-Feb-2003)
  +  Version 1.2b2 (11-Feb-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 lmtp2nntp_version.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	6 Feb 2003 19:39:03 -0000	1.11
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	11 Feb 2003 15:34:12 -0000	1.12
  @@ -8,7 +8,7 @@
   #ifndef _LMTP2NNTP_VERSION_C_
   #define _LMTP2NNTP_VERSION_C_
   
  -#define LMTP2NNTP_VERSION 0x102101
  +#define LMTP2NNTP_VERSION 0x102102
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _LMTP2NNTP_VERSION_C_AS_HEADER_
   
   lmtp2nntp_version_t lmtp2nntp_version = {
  -    0x102101,
  -    "1.2b1",
  -    "1.2b1 (06-Feb-2003)",
  -    "This is OSSP lmtp2nntp, Version 1.2b1 (06-Feb-2003)",
  -    "OSSP lmtp2nntp 1.2b1 (06-Feb-2003)",
  -    "OSSP lmtp2nntp/1.2b1",
  -    "@(#)OSSP lmtp2nntp 1.2b1 (06-Feb-2003)",
  -    "$Id: lmtp2nntp_version.c,v 1.11 2003/02/06 19:39:03 thl Exp $"
  +    0x102102,
  +    "1.2b2",
  +    "1.2b2 (11-Feb-2003)",
  +    "This is OSSP lmtp2nntp, Version 1.2b2 (11-Feb-2003)",
  +    "OSSP lmtp2nntp 1.2b2 (11-Feb-2003)",
  +    "OSSP lmtp2nntp/1.2b2",
  +    "@(#)OSSP lmtp2nntp 1.2b2 (11-Feb-2003)",
  +    "$Id: lmtp2nntp_version.c,v 1.12 2003/02/11 15:34:12 thl Exp $"
   };
   
   #endif /* _LMTP2NNTP_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 11 21:24:43 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5BCDB76520; Tue, 11 Feb 2003 21:24:43 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_option.c
Message-Id: <20030211202443.5BCDB76520@mail.ossp.org>
Date: Tue, 11 Feb 2003 21:24:43 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   11-Feb-2003 21:24:43
  Branch: HEAD                             Handle: 2003021120244200

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_option.c

  Log:
    be more careful with free(3)

  Summary:
    Revision    Changes     Path
    1.31        +2  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 lmtp2nntp_option.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	11 Feb 2003 12:55:31 -0000	1.30
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	11 Feb 2003 20:24:42 -0000	1.31
  @@ -316,7 +316,8 @@
           }
           if ((option_find(o, i, &ocp) == OPTION_OK) && (ocp->cb != NULL)) {
               rv = ocp->cb(ocp, cp = (ocp->type == OPT_FLAG ? NULL : (char *)popt_getoptarg(poptCon)), ocp->cbctx);
  -            free(cp); /* TODO this should be the task of popt_freecontext but debugging showed popt does not free(3) */
  +            if (cp != NULL)
  +                free(cp); /* TODO this should be the task of popt_freecontext but debugging showed popt does not free(3) */
               if (rc == OPTION_OK)
                   rc = rv;
           }
  @@ .

From ossp-cvs-owner@ossp.org  Wed Feb 12 13:27:03 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BFCCC76593; Wed, 12 Feb 2003 13:27:02 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_msg.c
Message-Id: <20030212122702.BFCCC76593@mail.ossp.org>
Date: Wed, 12 Feb 2003 13:27:02 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Feb-2003 13:27:02
  Branch: HEAD                             Handle: 2003021212270100

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_msg.c

  Log:
    fix iteration logic

  Summary:
    Revision    Changes     Path
    1.39        +15 -15     ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================================
  $ cvs diff -u -r1.38 -r1.39 lmtp2nntp_msg.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	11 Feb 2003 15:03:18 -0000	1.38
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	12 Feb 2003 12:27:01 -0000	1.39
  @@ -727,22 +727,22 @@
           hdI = msg->hdFirst; /* for each header */
           while (hdI != NULL) {
               logbook(msg->l2, L2_LEVEL_DEBUG, "processing matrix header \"%s\"", hdI->name);
  -            if (hdI->name == NULL || strlen(hdI->name) == 0 || hdI->ndata == 0)
  -                continue;
  -            if (hdI->ndata == 0) {
  -                logbook(msg->l2, L2_LEVEL_DEBUG, "header=%s, no data", hdI->name);
  -            }
  -            else if(hdI->ndata == 1) { /* header data is single valued */
  -                logbook(msg->l2, L2_LEVEL_DEBUG, "header=%s, data=%s", hdI->name, hdI->data.s);
  -                argz_add(&msg->azHeaders, &msg->asHeaders, hdI->name);
  -                argz_add(&msg->azHeaders, &msg->asHeaders, hdI->data.s);
  -            }
  -            else { /* header data is multi valued */
  -                int i;
  -                for (i = 0; i < hdI->ndata; i++) {
  -                    logbook(msg->l2, L2_LEVEL_DEBUG, "header=%s[%d], data=%s", hdI->name, i, hdI->data.m[i]);
  +            if (hdI->name != NULL && strlen(hdI->name) != 0 && hdI->ndata != 0) {
  +                if (hdI->ndata == 0) {
  +                    logbook(msg->l2, L2_LEVEL_DEBUG, "header=%s, no data", hdI->name);
  +                }
  +                else if(hdI->ndata == 1) { /* header data is single valued */
  +                    logbook(msg->l2, L2_LEVEL_DEBUG, "header=%s, data=%s", hdI->name, hdI->data.s);
                       argz_add(&msg->azHeaders, &msg->asHeaders, hdI->name);
  -                    argz_add(&msg->azHeaders, &msg->asHeaders, hdI->data.m[i]);
  +                    argz_add(&msg->azHeaders, &msg->asHeaders, hdI->data.s);
  +                }
  +                else { /* header data is multi valued */
  +                    int i;
  +                    for (i = 0; i < hdI->ndata; i++) {
  +                        logbook(msg->l2, L2_LEVEL_DEBUG, "header=%s[%d], data=%s", hdI->name, i, hdI->data.m[i]);
  +                        argz_add(&msg->azHeaders, &msg->asHeaders, hdI->name);
  +                        argz_add(&msg->azHeaders, &msg->asHeaders, hdI->data.m[i]);
  +                    }
                   }
               }
               /* cleanup */
  @@ .

From ossp-cvs-owner@ossp.org  Wed Feb 12 13:40:29 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9988B7668B; Wed, 12 Feb 2003 13:40:29 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ README lmtp2nntp_version.c
Message-Id: <20030212124029.9988B7668B@mail.ossp.org>
Date: Wed, 12 Feb 2003 13:40:29 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   12-Feb-2003 13:40:29
  Branch: HEAD                             Handle: 2003021212402800

  Modified files:
    ossp-pkg/lmtp2nntp      README lmtp2nntp_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.31        +1  -1      ossp-pkg/lmtp2nntp/README
    1.13        +9  -9      ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/README
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 README
  --- ossp-pkg/lmtp2nntp/README	11 Feb 2003 15:34:12 -0000	1.30
  +++ ossp-pkg/lmtp2nntp/README	12 Feb 2003 12:40:28 -0000	1.31
  @@ -5,7 +5,7 @@
     |_|_|_| \___/|____/____/|_|    |_|_||_||_|\__| .__/____|_||_|_||_|\__| .__/
                                                  |_|                     |_|
     OSSP lmtp2nntp - Mail to News Gateway
  -  Version 1.2b2 (11-Feb-2003)
  +  Version 1.2b3 (12-Feb-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 lmtp2nntp_version.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	11 Feb 2003 15:34:12 -0000	1.12
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	12 Feb 2003 12:40:28 -0000	1.13
  @@ -8,7 +8,7 @@
   #ifndef _LMTP2NNTP_VERSION_C_
   #define _LMTP2NNTP_VERSION_C_
   
  -#define LMTP2NNTP_VERSION 0x102102
  +#define LMTP2NNTP_VERSION 0x102103
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _LMTP2NNTP_VERSION_C_AS_HEADER_
   
   lmtp2nntp_version_t lmtp2nntp_version = {
  -    0x102102,
  -    "1.2b2",
  -    "1.2b2 (11-Feb-2003)",
  -    "This is OSSP lmtp2nntp, Version 1.2b2 (11-Feb-2003)",
  -    "OSSP lmtp2nntp 1.2b2 (11-Feb-2003)",
  -    "OSSP lmtp2nntp/1.2b2",
  -    "@(#)OSSP lmtp2nntp 1.2b2 (11-Feb-2003)",
  -    "$Id: lmtp2nntp_version.c,v 1.12 2003/02/11 15:34:12 thl Exp $"
  +    0x102103,
  +    "1.2b3",
  +    "1.2b3 (12-Feb-2003)",
  +    "This is OSSP lmtp2nntp, Version 1.2b3 (12-Feb-2003)",
  +    "OSSP lmtp2nntp 1.2b3 (12-Feb-2003)",
  +    "OSSP lmtp2nntp/1.2b3",
  +    "@(#)OSSP lmtp2nntp 1.2b3 (12-Feb-2003)",
  +    "$Id: lmtp2nntp_version.c,v 1.13 2003/02/12 12:40:28 thl Exp $"
   };
   
   #endif /* _LMTP2NNTP_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Wed Feb 12 16:24:19 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 25A1D7668C; Wed, 12 Feb 2003 16:24:19 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_msg.c
Message-Id: <20030212152419.25A1D7668C@mail.ossp.org>
Date: Wed, 12 Feb 2003 16:24:19 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   12-Feb-2003 16:24:18
  Branch: HEAD                             Handle: 2003021215241800

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_msg.c

  Log:
    on last run, str_parse() returns empty string, not NULL, as remainder,
    so free(3) it

  Summary:
    Revision    Changes     Path
    1.40        +2  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================================
  $ cvs diff -u -r1.39 -r1.40 lmtp2nntp_msg.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	12 Feb 2003 12:27:01 -0000	1.39
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	12 Feb 2003 15:24:18 -0000	1.40
  @@ -41,7 +41,7 @@
   #ifdef HAVE_CONFIG_H
   #include "config.h"
   #endif
  -#if defined(HAVE_DMALLOC_H) && defined(DMALLOC)
  +#if defined(HAVE_DMALLOC_H) && defined(WITH_DMALLOC)
   #include "dmalloc.h"
   #endif
   
  @@ -184,6 +184,7 @@
           free(cpName);
           free(cpValue);
       }
  +    free(cpHeaders);
   
       logbook(msg->l2, L2_LEVEL_DEBUG, "check for headers we care about and do whatever neccessary");
       msg->azNewsgroups = NULL;
  @@ .

From ossp-cvs-owner@ossp.org  Wed Feb 12 16:55:50 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 451AE765DB; Wed, 12 Feb 2003 16:55:50 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_main.c
Message-Id: <20030212155550.451AE765DB@mail.ossp.org>
Date: Wed, 12 Feb 2003 16:55:50 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Feb-2003 16:55:50
  Branch: HEAD                             Handle: 2003021215554900

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_main.c

  Log:
    fix remaining two memory leaks

  Summary:
    Revision    Changes     Path
    1.74        +4  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================================
  $ cvs diff -u -r1.73 -r1.74 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	11 Feb 2003 15:31:18 -0000	1.73
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	12 Feb 2003 15:55:49 -0000	1.74
  @@ -1231,7 +1231,7 @@
       lmtp_res_t   res;
       lmtp_rc_t    rc;
       lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx;
  -    char        *cp;
  +    char        *cp = NULL;
       char        *group;
   
       logbook(ctx->l2, L2_LEVEL_INFO, "LMTP service executing RCPT command < %s", req->msg);
  @@ -1314,6 +1314,8 @@
       CU(LMTP_OK);
   
       CUS:
  +    if (cp != NULL)
  +        free(cp);
       lmtp_response(lmtp, &res);
       return rc;
   }
  @@ -1691,6 +1693,7 @@
                   }
                   else {
                       str_copy(errorstring, res_ptr, sizeof(errorstring) < res_len ? sizeof(errorstring) : res_len);
  +                    free(res_ptr);
                   }
                   argz_add(&azErr, &asErr, errorstring);
               }
  @@ .

From ossp-cvs-owner@ossp.org  Wed Feb 12 17:08:26 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BF55B7668B; Wed, 12 Feb 2003 17:08:26 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_main.c
Message-Id: <20030212160826.BF55B7668B@mail.ossp.org>
Date: Wed, 12 Feb 2003 17:08:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Feb-2003 17:08:26
  Branch: HEAD                             Handle: 2003021216082600

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_main.c

  Log:
    use fully unbuffered I/O to reduce libc memory leaks at exit (our
    stdin is still buffered because of own buffering)

  Summary:
    Revision    Changes     Path
    1.75        +5  -0      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================================
  $ cvs diff -u -r1.74 -r1.75 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	12 Feb 2003 15:55:49 -0000	1.74
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	12 Feb 2003 16:08:26 -0000	1.75
  @@ -356,6 +356,11 @@
       seteuid(getuid());
       setegid(getgid());
   
  +    /* use unbuffered stdio */
  +    setvbuf(stdin,  NULL, _IONBF, 0);
  +    setvbuf(stdout, NULL, _IONBF, 0);
  +    setvbuf(stderr, NULL, _IONBF, 0);
  +
       /* library version check (run-time) */
       if (l2_version.v_hex < L2_VERSION_HEX_REQ) {
           fprintf(stderr, "require OSSP L2 >= %s, found %s\n", L2_VERSION_STR_REQ, L2_VERSION_STR);
  @@ .

From ossp-cvs-owner@ossp.org  Wed Feb 12 17:13:27 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8BC797668B; Wed, 12 Feb 2003 17:13:27 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ configure.ac
Message-Id: <20030212161327.8BC797668B@mail.ossp.org>
Date: Wed, 12 Feb 2003 17:13:27 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Feb-2003 17:13:27
  Branch: HEAD                             Handle: 2003021216132700

  Modified files:
    ossp-pkg/lmtp2nntp      configure.ac

  Log:
    move own libraries before system (and DMalloc) libraries

  Summary:
    Revision    Changes     Path
    1.34        +1  -1      ossp-pkg/lmtp2nntp/configure.ac
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/configure.ac
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 configure.ac
  --- ossp-pkg/lmtp2nntp/configure.ac	10 Feb 2003 10:13:10 -0000	1.33
  +++ ossp-pkg/lmtp2nntp/configure.ac	12 Feb 2003 16:13:27 -0000	1.34
  @@ -155,7 +155,7 @@
                   [AC_DEFINE(WITH_DMALLOC, 1, [Define to 1 if building with Dmalloc])])
   
   dnl #   post-processing for LIBS_EXTRA
  -LIBS="$LIBS $LIBS_EXTRA"
  +LIBS="$LIBS_EXTRA $LIBS"
   
   enable_shared=no
   export enable_shared
  @@ .

From ossp-cvs-owner@ossp.org  Wed Feb 12 17:15:15 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 53EF17668B; Wed, 12 Feb 2003 17:15:15 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_exwrap.c
Message-Id: <20030212161515.53EF17668B@mail.ossp.org>
Date: Wed, 12 Feb 2003 17:15:15 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Feb-2003 17:15:15
  Branch: HEAD                             Handle: 2003021216151300

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_exwrap.c

  Log:
    throw exceptions also for invalid arguments in allocation wrapper
    functions

  Summary:
    Revision    Changes     Path
    1.4         +8  -0      ossp-pkg/lmtp2nntp/lmtp2nntp_exwrap.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_exwrap.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 lmtp2nntp_exwrap.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_exwrap.c	30 Jan 2003 19:42:13 -0000	1.3
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_exwrap.c	12 Feb 2003 16:15:13 -0000	1.4
  @@ -36,6 +36,8 @@
   {
       char *rc;
   
  +    if (str == NULL)
  +        throw(0,0,0);
       if ((rc = strdup(str)) == NULL)
           throw(0,0,0);
       return rc;
  @@ -45,6 +47,8 @@
   {
       char *rc;
   
  +    if (s == NULL || n == 0)
  +        throw(0,0,0);
       if ((rc = str_dup(s, n)) == NULL)
           throw(0,0,0);
       return rc;
  @@ -54,6 +58,8 @@
   {
       void *rc;
   
  +    if (size == 0)
  +        throw(0,0,0);
       if ((rc = malloc(size)) == NULL)
           throw(0,0,0);
       return rc;
  @@ -63,6 +69,8 @@
   {
       void *rc;
   
  +    if (ptr == NULL || size == 0)
  +        throw(0,0,0);
       if ((rc = realloc(ptr, size)) == NULL)
           throw(0,0,0);
       return rc;
  @@ .

From ossp-cvs-owner@ossp.org  Wed Feb 12 17:16:31 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BCE9B765DB; Wed, 12 Feb 2003 17:16:31 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_argz.c lmtp2nntp_config.c lm...
Message-Id: <20030212161631.BCE9B765DB@mail.ossp.org>
Date: Wed, 12 Feb 2003 17:16:31 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Feb-2003 17:16:31
  Branch: HEAD                             Handle: 2003021216162900

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_argz.c lmtp2nntp_config.c
                            lmtp2nntp_daemon.c lmtp2nntp_exwrap.c
                            lmtp2nntp_global.h lmtp2nntp_l2.c lmtp2nntp_lmtp.c
                            lmtp2nntp_main.c lmtp2nntp_nntp.c
                            lmtp2nntp_option.c lmtp2nntp_shpat.c

  Log:
    finish DMalloc support

  Summary:
    Revision    Changes     Path
    1.6         +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_argz.c
    1.93        +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
    1.5         +3  -0      ossp-pkg/lmtp2nntp/lmtp2nntp_daemon.c
    1.5         +6  -0      ossp-pkg/lmtp2nntp/lmtp2nntp_exwrap.c
    1.8         +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_global.h
    1.8         +6  -0      ossp-pkg/lmtp2nntp/lmtp2nntp_l2.c
    1.6         +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_lmtp.c
    1.76        +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
    1.6         +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.c
    1.32        +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
    1.6         +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_shpat.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_argz.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 lmtp2nntp_argz.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_argz.c	10 Feb 2003 10:13:12 -0000	1.5
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_argz.c	12 Feb 2003 16:16:29 -0000	1.6
  @@ -55,7 +55,7 @@
   #ifdef HAVE_CONFIG_H
   #include "config.h"
   #endif
  -#if defined(HAVE_DMALLOC_H) && defined(DMALLOC)
  +#if defined(HAVE_DMALLOC_H) && defined(WITH_DMALLOC)
   #include "dmalloc.h"
   #endif
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================================
  $ cvs diff -u -r1.92 -r1.93 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	10 Feb 2003 13:51:34 -0000	1.92
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	12 Feb 2003 16:16:29 -0000	1.93
  @@ -58,7 +58,7 @@
   #ifdef HAVE_CONFIG_H
   #include "config.h"
   #endif
  -#if defined(HAVE_DMALLOC_H) && defined(DMALLOC)
  +#if defined(HAVE_DMALLOC_H) && defined(WITH_DMALLOC)
   #include "dmalloc.h"
   #endif
   #include "lmtp2nntp_option.h"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_daemon.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 lmtp2nntp_daemon.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_daemon.c	10 Feb 2003 10:13:12 -0000	1.4
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_daemon.c	12 Feb 2003 16:16:29 -0000	1.5
  @@ -36,6 +36,9 @@
   #ifdef HAVE_TERMIOS_H
   #include <sys/termios.h>
   #endif
  +#if defined(HAVE_DMALLOC_H) && defined(WITH_DMALLOC)
  +#include "dmalloc.h"
  +#endif
   
   #include "lmtp2nntp_daemon.h"
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_exwrap.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 lmtp2nntp_exwrap.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_exwrap.c	12 Feb 2003 16:15:13 -0000	1.4
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_exwrap.c	12 Feb 2003 16:16:29 -0000	1.5
  @@ -28,6 +28,12 @@
   
   #include <string.h>
   #include <stdlib.h>
  +#ifdef HAVE_CONFIG_H
  +#include "config.h"
  +#endif
  +#if defined(HAVE_DMALLOC_H) && defined(WITH_DMALLOC)
  +#include "dmalloc.h"
  +#endif
   
   /* own headers */
   #include "lmtp2nntp_global.h"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_global.h
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 lmtp2nntp_global.h
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_global.h	10 Feb 2003 10:13:12 -0000	1.7
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_global.h	12 Feb 2003 16:16:29 -0000	1.8
  @@ -32,7 +32,7 @@
   #ifdef HAVE_CONFIG_H
   #include "config.h"
   #endif
  -#if defined(HAVE_DMALLOC_H) && defined(DMALLOC)
  +#if defined(HAVE_DMALLOC_H) && defined(WITH_DMALLOC)
   #include "dmalloc.h"
   #endif
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_l2.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 lmtp2nntp_l2.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_l2.c	11 Feb 2003 13:40:57 -0000	1.7
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_l2.c	12 Feb 2003 16:16:29 -0000	1.8
  @@ -28,6 +28,12 @@
   
   #include <stdarg.h>
   #include <stdlib.h>
  +#ifdef HAVE_CONFIG_H
  +#include "config.h"
  +#endif
  +#if defined(HAVE_DMALLOC_H) && defined(WITH_DMALLOC)
  +#include "dmalloc.h"
  +#endif
   #include "lmtp2nntp_common.h"
   
   /* declare private channel configuration */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_lmtp.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 lmtp2nntp_lmtp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_lmtp.c	10 Feb 2003 10:13:12 -0000	1.5
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_lmtp.c	12 Feb 2003 16:16:29 -0000	1.6
  @@ -38,7 +38,7 @@
   #ifdef HAVE_CONFIG_H
   #include "config.h"
   #endif
  -#if defined(HAVE_DMALLOC_H) && defined(DMALLOC)
  +#if defined(HAVE_DMALLOC_H) && defined(WITH_DMALLOC)
   #include "dmalloc.h"
   #endif
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================================
  $ cvs diff -u -r1.75 -r1.76 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	12 Feb 2003 16:08:26 -0000	1.75
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	12 Feb 2003 16:16:29 -0000	1.76
  @@ -75,7 +75,7 @@
   #ifdef HAVE_CONFIG_H
   #include "config.h"
   #endif
  -#if defined(HAVE_DMALLOC_H) && defined(DMALLOC)
  +#if defined(HAVE_DMALLOC_H) && defined(WITH_DMALLOC)
   #include "dmalloc.h"
   #endif
   #include "lmtp2nntp_option.h"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 lmtp2nntp_nntp.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.c	10 Feb 2003 10:13:12 -0000	1.5
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_nntp.c	12 Feb 2003 16:16:29 -0000	1.6
  @@ -40,7 +40,7 @@
   #ifdef HAVE_CONFIG_H
   #include "config.h"
   #endif
  -#if defined(HAVE_DMALLOC_H) && defined(DMALLOC)
  +#if defined(HAVE_DMALLOC_H) && defined(WITH_DMALLOC)
   #include "dmalloc.h"
   #endif
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_option.c
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 lmtp2nntp_option.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	11 Feb 2003 20:24:42 -0000	1.31
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_option.c	12 Feb 2003 16:16:29 -0000	1.32
  @@ -52,7 +52,7 @@
   #ifdef HAVE_CONFIG_H
   #include "config.h"
   #endif
  -#if defined(HAVE_DMALLOC_H) && defined(DMALLOC)
  +#if defined(HAVE_DMALLOC_H) && defined(WITH_DMALLOC)
   #include "dmalloc.h"
   #endif
   #include "lmtp2nntp_option.h"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_shpat.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 lmtp2nntp_shpat.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_shpat.c	10 Feb 2003 10:13:12 -0000	1.5
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_shpat.c	12 Feb 2003 16:16:29 -0000	1.6
  @@ -74,7 +74,7 @@
   #ifdef HAVE_CONFIG_H
   #include "config.h"
   #endif
  -#if defined(HAVE_DMALLOC_H) && defined(DMALLOC)
  +#if defined(HAVE_DMALLOC_H) && defined(WITH_DMALLOC)
   #include "dmalloc.h"
   #endif
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Feb 12 17:22:37 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BA089765DB; Wed, 12 Feb 2003 17:22:36 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ README lmtp2nntp_version.c
Message-Id: <20030212162236.BA089765DB@mail.ossp.org>
Date: Wed, 12 Feb 2003 17:22:36 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   12-Feb-2003 17:22:36
  Branch: HEAD                             Handle: 2003021216223600

  Modified files:
    ossp-pkg/lmtp2nntp      README lmtp2nntp_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.32        +1  -1      ossp-pkg/lmtp2nntp/README
    1.14        +9  -9      ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/README
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 README
  --- ossp-pkg/lmtp2nntp/README	12 Feb 2003 12:40:28 -0000	1.31
  +++ ossp-pkg/lmtp2nntp/README	12 Feb 2003 16:22:36 -0000	1.32
  @@ -5,7 +5,7 @@
     |_|_|_| \___/|____/____/|_|    |_|_||_||_|\__| .__/____|_||_|_||_|\__| .__/
                                                  |_|                     |_|
     OSSP lmtp2nntp - Mail to News Gateway
  -  Version 1.2b3 (12-Feb-2003)
  +  Version 1.2b4 (12-Feb-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 lmtp2nntp_version.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	12 Feb 2003 12:40:28 -0000	1.13
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	12 Feb 2003 16:22:36 -0000	1.14
  @@ -8,7 +8,7 @@
   #ifndef _LMTP2NNTP_VERSION_C_
   #define _LMTP2NNTP_VERSION_C_
   
  -#define LMTP2NNTP_VERSION 0x102103
  +#define LMTP2NNTP_VERSION 0x102104
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _LMTP2NNTP_VERSION_C_AS_HEADER_
   
   lmtp2nntp_version_t lmtp2nntp_version = {
  -    0x102103,
  -    "1.2b3",
  -    "1.2b3 (12-Feb-2003)",
  -    "This is OSSP lmtp2nntp, Version 1.2b3 (12-Feb-2003)",
  -    "OSSP lmtp2nntp 1.2b3 (12-Feb-2003)",
  -    "OSSP lmtp2nntp/1.2b3",
  -    "@(#)OSSP lmtp2nntp 1.2b3 (12-Feb-2003)",
  -    "$Id: lmtp2nntp_version.c,v 1.13 2003/02/12 12:40:28 thl Exp $"
  +    0x102104,
  +    "1.2b4",
  +    "1.2b4 (12-Feb-2003)",
  +    "This is OSSP lmtp2nntp, Version 1.2b4 (12-Feb-2003)",
  +    "OSSP lmtp2nntp 1.2b4 (12-Feb-2003)",
  +    "OSSP lmtp2nntp/1.2b4",
  +    "@(#)OSSP lmtp2nntp 1.2b4 (12-Feb-2003)",
  +    "$Id: lmtp2nntp_version.c,v 1.14 2003/02/12 16:22:36 thl Exp $"
   };
   
   #endif /* _LMTP2NNTP_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb 13 09:18:24 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2B7AA7660E; Thu, 13 Feb 2003 09:18:24 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ devtool.conf
Message-Id: <20030213081824.2B7AA7660E@mail.ossp.org>
Date: Thu, 13 Feb 2003 09:18:24 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   13-Feb-2003 09:18:23
  Branch: HEAD                             Handle: 2003021308182300

  Modified files:
    ossp-pkg/lmtp2nntp      devtool.conf

  Log:
    automate Changelog creation based on previous written instructions

  Summary:
    Revision    Changes     Path
    1.15        +1  -1      ossp-pkg/lmtp2nntp/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 devtool.conf
  --- ossp-pkg/lmtp2nntp/devtool.conf	11 Feb 2003 15:33:42 -0000	1.14
  +++ ossp-pkg/lmtp2nntp/devtool.conf	13 Feb 2003 08:18:23 -0000	1.15
  @@ -60,7 +60,7 @@
       echo "+++ removing old tarballs"
       rm -f lmtp2nntp-*.tar.gz
       echo "+++ changelog"
  -    cvs2cl
  +    cvs2cl --revisions --branches --tags --window 10 --utc --log-opts "-l"
       echo "+++ generating"
       ./devtool autoclean
       ./devtool autogen
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb 13 10:30:17 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5F4477660E; Thu, 13 Feb 2003 10:30:16 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ README lmtp2nntp_version.c
Message-Id: <20030213093016.5F4477660E@mail.ossp.org>
Date: Thu, 13 Feb 2003 10:30:16 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   13-Feb-2003 10:30:15
  Branch: HEAD                             Handle: 2003021309301300

  Modified files:
    ossp-pkg/lmtp2nntp      README lmtp2nntp_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.33        +1  -1      ossp-pkg/lmtp2nntp/README
    1.15        +9  -9      ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/README
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 README
  --- ossp-pkg/lmtp2nntp/README	12 Feb 2003 16:22:36 -0000	1.32
  +++ ossp-pkg/lmtp2nntp/README	13 Feb 2003 09:30:13 -0000	1.33
  @@ -5,7 +5,7 @@
     |_|_|_| \___/|____/____/|_|    |_|_||_||_|\__| .__/____|_||_|_||_|\__| .__/
                                                  |_|                     |_|
     OSSP lmtp2nntp - Mail to News Gateway
  -  Version 1.2b4 (12-Feb-2003)
  +  Version 1.2.0 (13-Feb-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 lmtp2nntp_version.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	12 Feb 2003 16:22:36 -0000	1.14
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	13 Feb 2003 09:30:13 -0000	1.15
  @@ -8,7 +8,7 @@
   #ifndef _LMTP2NNTP_VERSION_C_
   #define _LMTP2NNTP_VERSION_C_
   
  -#define LMTP2NNTP_VERSION 0x102104
  +#define LMTP2NNTP_VERSION 0x102200
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _LMTP2NNTP_VERSION_C_AS_HEADER_
   
   lmtp2nntp_version_t lmtp2nntp_version = {
  -    0x102104,
  -    "1.2b4",
  -    "1.2b4 (12-Feb-2003)",
  -    "This is OSSP lmtp2nntp, Version 1.2b4 (12-Feb-2003)",
  -    "OSSP lmtp2nntp 1.2b4 (12-Feb-2003)",
  -    "OSSP lmtp2nntp/1.2b4",
  -    "@(#)OSSP lmtp2nntp 1.2b4 (12-Feb-2003)",
  -    "$Id: lmtp2nntp_version.c,v 1.14 2003/02/12 16:22:36 thl Exp $"
  +    0x102200,
  +    "1.2.0",
  +    "1.2.0 (13-Feb-2003)",
  +    "This is OSSP lmtp2nntp, Version 1.2.0 (13-Feb-2003)",
  +    "OSSP lmtp2nntp 1.2.0 (13-Feb-2003)",
  +    "OSSP lmtp2nntp/1.2.0",
  +    "@(#)OSSP lmtp2nntp 1.2.0 (13-Feb-2003)",
  +    "$Id: lmtp2nntp_version.c,v 1.15 2003/02/13 09:30:13 thl Exp $"
   };
   
   #endif /* _LMTP2NNTP_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb 13 10:46:47 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1D5AF76691; Thu, 13 Feb 2003 10:46:47 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ README
Message-Id: <20030213094647.1D5AF76691@mail.ossp.org>
Date: Thu, 13 Feb 2003 10:46:47 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   13-Feb-2003 10:46:46
  Branch: HEAD                             Handle: 2003021309464600

  Modified files:
    ossp-pkg/lmtp2nntp      README

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.34        +1  -1      ossp-pkg/lmtp2nntp/README
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/README
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 README
  --- ossp-pkg/lmtp2nntp/README	13 Feb 2003 09:30:13 -0000	1.33
  +++ ossp-pkg/lmtp2nntp/README	13 Feb 2003 09:46:46 -0000	1.34
  @@ -5,7 +5,7 @@
     |_|_|_| \___/|____/____/|_|    |_|_||_||_|\__| .__/____|_||_|_||_|\__| .__/
                                                  |_|                     |_|
     OSSP lmtp2nntp - Mail to News Gateway
  -  Version 1.2.0 (13-Feb-2003)
  +  Version 
   
     ABSTRACT
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb 13 10:48:29 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A1AF976691; Thu, 13 Feb 2003 10:48:29 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_version.c
Message-Id: <20030213094829.A1AF976691@mail.ossp.org>
Date: Thu, 13 Feb 2003 10:48:29 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   13-Feb-2003 10:48:29
  Branch: HEAD                             Handle: 2003021309482900

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.16        +0  -0      ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 lmtp2nntp_version.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	13 Feb 2003 09:30:13 -0000	1.15
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	13 Feb 2003 09:48:29 -0000	1.16
  @@ -39,7 +39,7 @@
       "OSSP lmtp2nntp 1.2.0 (13-Feb-2003)",
       "OSSP lmtp2nntp/1.2.0",
       "@(#)OSSP lmtp2nntp 1.2.0 (13-Feb-2003)",
  -    "$Id: lmtp2nntp_version.c,v 1.15 2003/02/13 09:30:13 thl Exp $"
  +    "$Id: lmtp2nntp_version.c,v 1.16 2003/02/13 09:48:29 thl Exp $"
   };
   
   #endif /* _LMTP2NNTP_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb 13 11:00:54 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 64669766A6; Thu, 13 Feb 2003 11:00:54 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ README devtool.conf
Message-Id: <20030213100054.64669766A6@mail.ossp.org>
Date: Thu, 13 Feb 2003 11:00:54 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   13-Feb-2003 11:00:54
  Branch: HEAD                             Handle: 2003021310005200

  Modified files:
    ossp-pkg/lmtp2nntp      README devtool.conf

  Log:
    fix version stuff for README

  Summary:
    Revision    Changes     Path
    1.35        +1  -1      ossp-pkg/lmtp2nntp/README
    1.16        +1  -1      ossp-pkg/lmtp2nntp/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/README
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 README
  --- ossp-pkg/lmtp2nntp/README	13 Feb 2003 09:46:46 -0000	1.34
  +++ ossp-pkg/lmtp2nntp/README	13 Feb 2003 10:00:52 -0000	1.35
  @@ -5,7 +5,7 @@
     |_|_|_| \___/|____/____/|_|    |_|_||_||_|\__| .__/____|_||_|_||_|\__| .__/
                                                  |_|                     |_|
     OSSP lmtp2nntp - Mail to News Gateway
  -  Version 
  +  Version 1.2.x
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 devtool.conf
  --- ossp-pkg/lmtp2nntp/devtool.conf	13 Feb 2003 08:18:23 -0000	1.15
  +++ ossp-pkg/lmtp2nntp/devtool.conf	13 Feb 2003 10:00:52 -0000	1.16
  @@ -48,7 +48,7 @@
   %version
       ./shtool version -l c -n "OSSP lmtp2nntp" -p "lmtp2nntp_" -e lmtp2nntp_version.c
   	V=`./shtool version -lc -dlong lmtp2nntp_version.c`
  -	sed -e "s/Version .*(.*)/Version $V/g" <README >README.n && mv README.n README
  +	sed -e "s/Version .*/Version $V/g" <README >README.n && mv README.n README
   
   %tag
   	V=`./shtool version -lc -dshort lmtp2nntp_version.c | sed -e 's;\.;_;g'`
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb 13 11:01:27 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DF67E7660E; Thu, 13 Feb 2003 11:01:26 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ README lmtp2nntp_version.c
Message-Id: <20030213100126.DF67E7660E@mail.ossp.org>
Date: Thu, 13 Feb 2003 11:01:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   13-Feb-2003 11:01:26
  Branch: HEAD                             Handle: 2003021310012501

  Modified files:
    ossp-pkg/lmtp2nntp      README lmtp2nntp_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.36        +1  -1      ossp-pkg/lmtp2nntp/README
    1.17        +0  -0      ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/README
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 README
  --- ossp-pkg/lmtp2nntp/README	13 Feb 2003 10:00:52 -0000	1.35
  +++ ossp-pkg/lmtp2nntp/README	13 Feb 2003 10:01:25 -0000	1.36
  @@ -5,7 +5,7 @@
     |_|_|_| \___/|____/____/|_|    |_|_||_||_|\__| .__/____|_||_|_||_|\__| .__/
                                                  |_|                     |_|
     OSSP lmtp2nntp - Mail to News Gateway
  -  Version 1.2.x
  +  Version 1.2.0 (13-Feb-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 lmtp2nntp_version.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	13 Feb 2003 09:48:29 -0000	1.16
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	13 Feb 2003 10:01:26 -0000	1.17
  @@ -39,7 +39,7 @@
       "OSSP lmtp2nntp 1.2.0 (13-Feb-2003)",
       "OSSP lmtp2nntp/1.2.0",
       "@(#)OSSP lmtp2nntp 1.2.0 (13-Feb-2003)",
  -    "$Id: lmtp2nntp_version.c,v 1.16 2003/02/13 09:48:29 thl Exp $"
  +    "$Id: lmtp2nntp_version.c,v 1.17 2003/02/13 10:01:26 thl Exp $"
   };
   
   #endif /* _LMTP2NNTP_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb 13 11:12:37 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 951BE7660E; Thu, 13 Feb 2003 11:12:37 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/tool/ index.wml ossp-w...
Message-Id: <20030213101237.951BE7660E@mail.ossp.org>
Date: Thu, 13 Feb 2003 11:12:37 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   13-Feb-2003 11:12:37
  Branch: HEAD                             Handle: 2003021310123501

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/lmtp2nntp
                            index.wml

  Log:
    release OSSP lmtp2nntp 1.2.0

  Summary:
    Revision    Changes     Path
    1.52        +7  -0      ossp-web/new/news.txt
    1.27        +1  -1      ossp-web/pkg/tool/index.wml
    1.12        +3  -3      ossp-web/pkg/tool/lmtp2nntp/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.51 -r1.52 news.txt
  --- ossp-web/new/news.txt	6 Feb 2003 14:38:31 -0000	1.51
  +++ ossp-web/new/news.txt	13 Feb 2003 10:12:35 -0000	1.52
  @@ -1,4 +1,11 @@
  +13-Feb-2003: Released T<OSSP lmtp2nntp> 1.2.0
  +12-Feb-2003: Released T<OSSP lmtp2nntp> 1.2b4
  +12-Feb-2003: Released T<OSSP lmtp2nntp> 1.2b3
  +11-Feb-2003: Released T<OSSP lmtp2nntp> 1.2b2
  +06-Feb-2003: Released T<OSSP lmtp2nntp> 1.2b1
  +06-Feb-2003: Released T<OSSP lmtp2nntp> 1.2a8
   06-Feb-2003: Released L<OSSP sio> 0.9.0
  +04-Feb-2003: Released T<OSSP lmtp2nntp> 1.2a7
   31-Jan-2003: Released L<OSSP sa> 1.0.5
   30-Jan-2003: Released L<OSSP ex> 1.0.2
   28-Jan-2003: Released L<OSSP sa> 1.0.4
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 index.wml
  --- ossp-web/pkg/tool/index.wml	23 Dec 2002 14:49:27 -0000	1.26
  +++ ossp-web/pkg/tool/index.wml	13 Feb 2003 10:12:36 -0000	1.27
  @@ -17,7 +17,7 @@
   		    done=100 stable="1.6.2" unstable=none>
     <pkg_item name="lmtp2nntp" longname="OSSP lmtp2nntp" type="tool"
               desc="Real-Time Mail to News Gateway"
  -            done=100 stable="1.1.1" unstable=1.2a6>
  +            done=100 stable="1.2.0" unstable=none>
     <pkg_item name="shiela" longname="OSSP shiela" type="tool"
               desc="CVS Access Control and Logging"
   	        done=100 stable="1.0.4" unstable="none">
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/lmtp2nntp/index.wml
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 index.wml
  --- ossp-web/pkg/tool/lmtp2nntp/index.wml	2 Oct 2002 12:46:19 -0000	1.11
  +++ ossp-web/pkg/tool/lmtp2nntp/index.wml	13 Feb 2003 10:12:36 -0000	1.12
  @@ -35,8 +35,8 @@
   
   <pkg_status
       name="lmtp2nntp" assign="thl"
  -    stable="1.1.1"   stable_date="13-Dec-2001"
  -    unstable="1.2a6" unstable_date="14-Aug-2002"
  +    stable="1.2.0"   stable_date="13-Feb-2002"
  +    unstable="none" unstable_date="none"
   	done=100>
   
   <h2>Source</h2>
  @@ -45,7 +45,7 @@
       cvs=$(CVS_ROOT_URL)/pkg/tool/lmtp2nntp/
       url=$(FTP_ROOT_URL)/pkg/tool/lmtp2nntp/
       directory=$(FTP_ROOT_DIR)/pkg/tool/lmtp2nntp/
  -    files="lmtp2nntp-*.tar.gz" stable="lmtp2nntp-1.1.1.tar.gz" unstable="lmtp2nntp-1.2a6.tar.gz">
  +    files="lmtp2nntp-*.tar.gz" stable="lmtp2nntp-1.2\\\\\\\.0.tar.gz" unstable="none">
   
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb 13 16:35:17 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 43C7A766D4; Thu, 13 Feb 2003 16:35:17 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ devtool.conf
Message-Id: <20030213153517.43C7A766D4@mail.ossp.org>
Date: Thu, 13 Feb 2003 16:35:17 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Feb-2003 16:35:17
  Branch: HEAD                             Handle: 2003021315351600

  Modified files:
    ossp-pkg/fsl            devtool.conf

  Log:
    move up to latest Autoconf version

  Summary:
    Revision    Changes     Path
    1.15        +1  -1      ossp-pkg/fsl/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 devtool.conf
  --- ossp-pkg/fsl/devtool.conf	9 Nov 2002 18:58:27 -0000	1.14
  +++ ossp-pkg/fsl/devtool.conf	13 Feb 2003 15:35:16 -0000	1.15
  @@ -12,7 +12,7 @@
   %autogen
       @autogen shtool   1.6.2 "1.6.*" all
       @autogen libtool  1.4.3 "1.4*"
  -    @autogen autoconf 2.54  "2.5[4-9]*"
  +    @autogen autoconf 2.57  "2.5[4-9]*"
   
       for name in l2 cfg pcre; do
           echo "===> lib_${name} (devtool autogen)"
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb 13 16:37:29 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6B54C766D4; Thu, 13 Feb 2003 16:37:29 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ l2_channel.c l2_ut_param.c
Message-Id: <20030213153729.6B54C766D4@mail.ossp.org>
Date: Thu, 13 Feb 2003 16:37:29 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Feb-2003 16:37:29
  Branch: HEAD                             Handle: 2003021315372800

  Modified files:
    ossp-pkg/l2             l2_channel.c l2_ut_param.c

  Log:
    Remove NULL checks for va_list based variables because it is not
    portable to assume that va_list behaves like a pointer or other
    scalar type. Indeed it is a full structure on some platforms like
    FreeBSD/alpha.

  Summary:
    Revision    Changes     Path
    1.32        +1  -1      ossp-pkg/l2/l2_channel.c
    1.11        +1  -1      ossp-pkg/l2/l2_ut_param.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_channel.c
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 l2_channel.c
  --- ossp-pkg/l2/l2_channel.c	27 Jan 2003 16:01:35 -0000	1.31
  +++ ossp-pkg/l2/l2_channel.c	13 Feb 2003 15:37:28 -0000	1.32
  @@ -560,7 +560,7 @@
       l2_env_t *env;
   
       /* argument sanity check */
  -    if (ch == NULL || level == 0 || fmt == NULL || ap == NULL)
  +    if (ch == NULL || level == 0 || fmt == NULL)
           return L2_ERR_ARG;
   
       /* make sure only a single level is specified */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_param.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 l2_ut_param.c
  --- ossp-pkg/l2/l2_ut_param.c	6 Jan 2003 11:41:52 -0000	1.10
  +++ ossp-pkg/l2/l2_ut_param.c	13 Feb 2003 15:37:28 -0000	1.11
  @@ -46,7 +46,7 @@
       int n;
   
       /* argument sanity check */
  -    if (env == NULL || pa == NULL || fmt == NULL || ap == NULL)
  +    if (env == NULL || pa == NULL || fmt == NULL)
           return L2_ERR_ARG;
   
       /* on-the-fly create or just take over parameter specification string */
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb 13 16:38:39 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6BD4F766D4; Thu, 13 Feb 2003 16:38:39 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ ChangeLog
Message-Id: <20030213153839.6BD4F766D4@mail.ossp.org>
Date: Thu, 13 Feb 2003 16:38:39 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Feb-2003 16:38:39
  Branch: HEAD                             Handle: 2003021315383800

  Modified files:
    ossp-pkg/fsl            ChangeLog

  Log:
    remember changes

  Summary:
    Revision    Changes     Path
    1.16        +10 -0      ossp-pkg/fsl/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 ChangeLog
  --- ossp-pkg/fsl/ChangeLog	28 Jan 2003 13:14:41 -0000	1.15
  +++ ossp-pkg/fsl/ChangeLog	13 Feb 2003 15:38:38 -0000	1.16
  @@ -8,6 +8,16 @@
   
     CHANGELOG
   
  +  Changes between 1.0.7 and 1.0.8 (13-Feb-2003)
  +
  +    *) Remove NULL checks for va_list based variables because it was
  +       not portable to assume that va_list behaves like a pointer or
  +       other scalar type.
  +       [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +    *) Upgraded build environment to GNU Autoconf 2.57.
  +       [Ralf S. Engelschall <rse@engelschall.com>]
  +
     Changes between 1.0.6 and 1.0.7 (28-Jan-2003)
   
       *) Fixed a bug in lib_l2/l2_channel.c:l2_channel_destroy() where
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb 13 16:40:17 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D46C5766D4; Thu, 13 Feb 2003 16:40:16 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ devtool.conf
Message-Id: <20030213154016.D46C5766D4@mail.ossp.org>
Date: Thu, 13 Feb 2003 16:40:16 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Feb-2003 16:40:16
  Branch: HEAD                             Handle: 2003021315401600

  Modified files:
    ossp-pkg/fsl            devtool.conf

  Log:
    fix regex

  Summary:
    Revision    Changes     Path
    1.16        +1  -1      ossp-pkg/fsl/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 devtool.conf
  --- ossp-pkg/fsl/devtool.conf	13 Feb 2003 15:35:16 -0000	1.15
  +++ ossp-pkg/fsl/devtool.conf	13 Feb 2003 15:40:16 -0000	1.16
  @@ -48,7 +48,7 @@
   %version
       ./shtool version -l c -n "OSSP fsl" -p "fsl_" -e fsl_version.c
   	V=`./shtool version -lc -dlong fsl_version.c`
  -	sed -e "s/Version .*(.*)/Version $V/g" <README >README.n && mv README.n README
  +	sed -e "s/Version .*/Version $V/g" <README >README.n && mv README.n README
   
   %tag
   	V=`./shtool version -lc -dshort fsl_version.c | sed -e 's;\.;_;g'`
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb 13 16:40:31 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C7ED476768; Thu, 13 Feb 2003 16:40:30 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ README fsl_version.c
Message-Id: <20030213154030.C7ED476768@mail.ossp.org>
Date: Thu, 13 Feb 2003 16:40:30 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Feb-2003 16:40:30
  Branch: HEAD                             Handle: 2003021315403000

  Modified files:
    ossp-pkg/fsl            README fsl_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.29        +1  -1      ossp-pkg/fsl/README
    1.15        +9  -9      ossp-pkg/fsl/fsl_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/README
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 README
  --- ossp-pkg/fsl/README	28 Jan 2003 12:16:09 -0000	1.28
  +++ ossp-pkg/fsl/README	13 Feb 2003 15:40:30 -0000	1.29
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_| |___/_|
    
     OSSP fsl - Faking/Flexible Syslog Library
  -  Version 1.0.7 (28-Jan-2003)
  +  Version 1.0.8 (13-Feb-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl_version.c
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 fsl_version.c
  --- ossp-pkg/fsl/fsl_version.c	28 Jan 2003 12:16:09 -0000	1.14
  +++ ossp-pkg/fsl/fsl_version.c	13 Feb 2003 15:40:30 -0000	1.15
  @@ -8,7 +8,7 @@
   #ifndef _FSL_VERSION_C_
   #define _FSL_VERSION_C_
   
  -#define FSL_VERSION 0x100207
  +#define FSL_VERSION 0x100208
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _FSL_VERSION_C_AS_HEADER_
   
   fsl_version_t fsl_version = {
  -    0x100207,
  -    "1.0.7",
  -    "1.0.7 (28-Jan-2003)",
  -    "This is OSSP fsl, Version 1.0.7 (28-Jan-2003)",
  -    "OSSP fsl 1.0.7 (28-Jan-2003)",
  -    "OSSP fsl/1.0.7",
  -    "@(#)OSSP fsl 1.0.7 (28-Jan-2003)",
  -    "$Id: fsl_version.c,v 1.14 2003/01/28 12:16:09 thl Exp $"
  +    0x100208,
  +    "1.0.8",
  +    "1.0.8 (13-Feb-2003)",
  +    "This is OSSP fsl, Version 1.0.8 (13-Feb-2003)",
  +    "OSSP fsl 1.0.8 (13-Feb-2003)",
  +    "OSSP fsl/1.0.8",
  +    "@(#)OSSP fsl 1.0.8 (13-Feb-2003)",
  +    "$Id: fsl_version.c,v 1.15 2003/02/13 15:40:30 rse Exp $"
   };
   
   #endif /* _FSL_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb 13 16:56:36 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5A5DC76983; Thu, 13 Feb 2003 16:56:36 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/fsl/ index.wml oss...
Message-Id: <20030213155636.5A5DC76983@mail.ossp.org>
Date: Thu, 13 Feb 2003 16:56:36 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   13-Feb-2003 16:56:36
  Branch: HEAD                             Handle: 2003021315563401

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/fsl    index.wml

  Log:
    release OSSP fsl 1.0.8

  Summary:
    Revision    Changes     Path
    1.53        +1  -0      ossp-web/new/news.txt
    1.16        +2  -2      ossp-web/pkg/lib/fsl/index.wml
    1.49        +1  -1      ossp-web/pkg/lib/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.52 -r1.53 news.txt
  --- ossp-web/new/news.txt	13 Feb 2003 10:12:35 -0000	1.52
  +++ ossp-web/new/news.txt	13 Feb 2003 15:56:34 -0000	1.53
  @@ -1,4 +1,5 @@
   13-Feb-2003: Released T<OSSP lmtp2nntp> 1.2.0
  +13-Feb-2003: Released L<OSSP fsl> 1.0.8
   12-Feb-2003: Released T<OSSP lmtp2nntp> 1.2b4
   12-Feb-2003: Released T<OSSP lmtp2nntp> 1.2b3
   11-Feb-2003: Released T<OSSP lmtp2nntp> 1.2b2
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/fsl/index.wml
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 index.wml
  --- ossp-web/pkg/lib/fsl/index.wml	28 Jan 2003 12:57:38 -0000	1.15
  +++ ossp-web/pkg/lib/fsl/index.wml	13 Feb 2003 15:56:35 -0000	1.16
  @@ -45,7 +45,7 @@
   <pkg_status
       name="fsl" assign="thl"
       genesis="Jul-2002"
  -    stable="1.0.7" stable_date="28-Jan-2003"
  +    stable="1.0.8" stable_date="13-Feb-2003"
       unstable="none"  unstable_date="none"
   	done=100>
   
  @@ -56,7 +56,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/fsl/
       directory=$(FTP_ROOT_DIR)/pkg/lib/fsl/
       files="fsl-*.tar.gz" 
  -	stable="fsl-1.0.7.tar.gz" unstable="none">
  +	stable="fsl-1.0.8.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.48 -r1.49 index.wml
  --- ossp-web/pkg/lib/index.wml	6 Feb 2003 14:38:34 -0000	1.48
  +++ ossp-web/pkg/lib/index.wml	13 Feb 2003 15:56:34 -0000	1.49
  @@ -27,7 +27,7 @@
   			done=100 stable=1.0.5 unstable=none>
     <pkg_item name="fsl" longname="OSSP fsl" type="lib"
               desc="Faked/Flexible Syslog"
  -			done=100 stable=1.0.7 unstable=none>
  +			done=100 stable=1.0.8 unstable=none>
     <pkg_item name="var" longname="OSSP var" type="lib"
               desc="Variable Expansion"
   			done=95 stable=none unstable=0.9.0>
  @@ .

From ossp-cvs-owner@ossp.org  Fri Feb 14 19:19:29 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3055476848; Fri, 14 Feb 2003 19:19:29 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var/ var.c
Message-Id: <20030214181929.3055476848@mail.ossp.org>
Date: Fri, 14 Feb 2003 19:19:29 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   14-Feb-2003 19:19:28
  Branch: HEAD                             Handle: 2003021418192800

  Modified files:
    ossp-pkg/var            var.c

  Log:
    allow a strict C++ compiler to compile this C code, too

  Summary:
    Revision    Changes     Path
    1.97        +24 -24     ossp-pkg/var/var.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var.c
  ============================================================================
  $ cvs diff -u -r1.96 -r1.97 var.c
  --- ossp-pkg/var/var.c	10 Feb 2003 21:15:41 -0000	1.96
  +++ ossp-pkg/var/var.c	14 Feb 2003 18:19:28 -0000	1.97
  @@ -329,7 +329,7 @@
   {
       char *p;
   
  -    if ((p = malloc(len + 1)) == NULL)
  +    if ((p = (char *)malloc(len + 1)) == NULL)
           return 0;
       memcpy(p, data, len);
       buf->begin = p;
  @@ -350,7 +350,7 @@
       /* Is the tokenbuffer initialized at all? If not, allocate a
          standard-sized buffer to begin with. */
       if (output->begin == NULL) {
  -        if ((output->begin = output->end = malloc(TOKENBUF_INITIAL_BUFSIZE)) == NULL)
  +        if ((output->begin = output->end = (char *)malloc(TOKENBUF_INITIAL_BUFSIZE)) == NULL)
               return 0;
           output->buffer_size = TOKENBUF_INITIAL_BUFSIZE;
       }
  @@ -365,7 +365,7 @@
           }
           /* ok, so copy the contents of output into an allocated buffer
              so that we can append that way. */
  -        if ((tmp = malloc(output->end - output->begin + len + 1)) == NULL)
  +        if ((tmp = (char *)malloc(output->end - output->begin + len + 1)) == NULL)
               return 0;
           memcpy(tmp, output->begin, output->end - output->begin);
           output->buffer_size = output->end - output->begin;
  @@ -381,7 +381,7 @@
           do {
               new_size *= 2;
           } while ((new_size - (output->end - output->begin)) <= len);
  -        if ((new_buffer = realloc((char *)output->begin, new_size)) == NULL)
  +        if ((new_buffer = (char *)realloc((char *)output->begin, new_size)) == NULL)
               return 0;
           output->end = new_buffer + (output->end - output->begin);
           output->begin = new_buffer;
  @@ -422,10 +422,10 @@
   
   static void
   expand_range(
  -    char a, char b, char_class_t class)
  +    char a, char b, char_class_t cclass)
   {
       do {
  -        class[(int)a] = 1;
  +        cclass[(int)a] = 1;
       }
       while (++a <= b);
       return;
  @@ -433,23 +433,23 @@
   
   static var_rc_t
   expand_character_class(
  -    const char *desc, char_class_t class)
  +    const char *desc, char_class_t cclass)
   {
       size_t i;
   
       /* clear the class array. */
       for (i = 0; i < 256; ++i)
  -        class[i] = 0;
  +        cclass[i] = 0;
   
       /* walk through class description and set appropriate entries in array */
       while (*desc != NUL) {
           if (desc[1] == '-' && desc[2] != NUL) {
               if (desc[0] > desc[2])
                   return VAR_ERR_INCORRECT_CLASS_SPEC;
  -            expand_range(desc[0], desc[2], class);
  +            expand_range(desc[0], desc[2], cclass);
               desc += 3;
           } else {
  -            class[(int) *desc] = 1;
  +            cclass[(int) *desc] = 1;
               desc++;
           }
       }
  @@ -912,7 +912,7 @@
       tokenbuf_t srcclass, dstclass;
       const char *p;
       int rc;
  -    size_t i;
  +    int i;
   
       tokenbuf_init(&srcclass);
       tokenbuf_init(&dstclass);
  @@ -937,7 +937,7 @@
           tokenbuf_move(&tmp, data);
       }
       for (p = data->begin; p != data->end; ++p) {
  -        for (i = 0; i <= (srcclass.end - srcclass.begin); ++i) {
  +        for (i = 0; i <= (int)(srcclass.end - srcclass.begin); i++) {
               if (*p == srcclass.begin[i]) {
                   *((char *)p) = dstclass.begin[i];
                   break;
  @@ -1775,7 +1775,7 @@
       int *result, int *failed)
   {
       const char *p;
  -    char operator;
  +    char op;
       int right;
       int rc;
   
  @@ -1793,27 +1793,27 @@
       /* parse numerical operator */
       while (p != end) {
           if (*p == '+' || *p == '-') {
  -            operator = *p++;
  +            op = *p++;
               /* recursively parse right operand (light binding) */
               rc = parse_numexp(var, ctx, p, end, &right, failed);
               if (rc < 0)
                   return rc;
               p += rc;
  -            if (operator == '+')
  +            if (op == '+')
                   *result = (*result + right);
               else
                   *result = (*result - right);
           }
           else if (*p == '*' || *p == '/' || *p == '%') {
  -            operator = *p++;
  +            op = *p++;
               /* recursively parse right operand (string binding) */
               rc = parse_numexp_operand(var, ctx, p, end, &right, failed);
               if (rc < 0)
                   return rc;
               p += rc;
  -            if (operator == '*')
  +            if (op == '*')
                   *result = (*result * right);
  -            else if (operator == '/') {
  +            else if (op == '/') {
                   if (right == 0) {
                       if (*failed)
                           *result = 0;
  @@ -1823,7 +1823,7 @@
                   else
                       *result = (*result / right);
               }
  -            else if (operator == '%') {
  +            else if (op == '%') {
                   if (right == 0) {
                       if (*failed)
                           *result = 0;
  @@ -2110,7 +2110,7 @@
   }
   
   /* parse loop construct limits ("[...]{b,s,e}") */
  -static var_rc_t
  +static int
   parse_looplimits(
       var_t *var, var_parse_t *ctx,
       const char *begin, const char *end,
  @@ -2233,7 +2233,7 @@
   }
   
   /* expand input in general */
  -static var_rc_t
  +static int
   parse_input(
       var_t *var, var_parse_t *ctx,
       const char *begin, const char *end,
  @@ -2576,7 +2576,7 @@
   
       /* start the parsing */
       tokenbuf_init(&output);
  -    rc = parse_input(var, &ctx, src_ptr, src_ptr+src_len, &output, 0);
  +    rc = (var_rc_t)parse_input(var, &ctx, src_ptr, src_ptr+src_len, &output, 0);
   
       /* post-processing */
       if (rc >= 0) {
  @@ -2724,8 +2724,8 @@
   {
       if (str == NULL)
           return VAR_RC(VAR_ERR_INVALID_ARGUMENT);
  -    rc = 0 - rc;
  -    if (rc < 0 || rc >= sizeof(var_errors) / sizeof(char *))
  +    rc = (var_rc_t)(0 - rc);
  +    if ((int)rc < 0 || (int)rc >= (int)(sizeof(var_errors) / sizeof(char *)))
           *str = "unknown error";
       else
           *str = (char *)var_errors[rc];
  @@ .

From ossp-cvs-owner@ossp.org  Fri Feb 14 20:46:22 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id ED3A576856; Fri, 14 Feb 2003 20:46:21 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var/ var.c
Message-Id: <20030214194621.ED3A576856@mail.ossp.org>
Date: Fri, 14 Feb 2003 20:46:21 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   14-Feb-2003 20:46:21
  Branch: HEAD                             Handle: 2003021419462100

  Modified files:
    ossp-pkg/var            var.c

  Log:
    add space to make code-style checkers happy, too

  Summary:
    Revision    Changes     Path
    1.98        +1  -1      ossp-pkg/var/var.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var.c
  ============================================================================
  $ cvs diff -u -r1.97 -r1.98 var.c
  --- ossp-pkg/var/var.c	14 Feb 2003 18:19:28 -0000	1.97
  +++ ossp-pkg/var/var.c	14 Feb 2003 19:46:21 -0000	1.98
  @@ -998,7 +998,7 @@
       if (no_regex) {
           /* plain text pattern based operation */
           tokenbuf_init(&tmp);
  -        for (p = data->begin; p != data->end;) {
  +        for (p = data->begin; p != data->end; ) {
               if (case_insensitive)
                   rc = strncasecmp(p, search->begin, search->end - search->begin);
               else
  @@ .

From ossp-cvs-owner@ossp.org  Fri Feb 14 22:17:11 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 522AE76856; Fri, 14 Feb 2003 22:17:11 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var/ AUTHORS ChangeLog INSTALL Makefile.in NEWS R...
Message-Id: <20030214211711.522AE76856@mail.ossp.org>
Date: Fri, 14 Feb 2003 22:17:11 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   14-Feb-2003 22:17:11
  Branch: HEAD                             Handle: 2003021421170601

  Added files:
    ossp-pkg/var            ChangeLog
  Modified files:
    ossp-pkg/var            AUTHORS INSTALL Makefile.in NEWS README VERSION
                            aclocal.m4 configure.ac devtool devtool.conf
                            devtool.func ts.c ts.h var-config.in
                            var-config.pod var.c var.h var.pod var_play.c
                            var_test.c
  Removed files:
    ossp-pkg/var            TODO

  Log:
    final polishing for release 1.0.0

  Summary:
    Revision    Changes     Path
    1.2         +7  -0      ossp-pkg/var/AUTHORS
    1.1         +38 -0      ossp-pkg/var/ChangeLog
    1.3         +8  -5      ossp-pkg/var/INSTALL
    1.9         +3  -3      ossp-pkg/var/Makefile.in
    1.2         +9  -7      ossp-pkg/var/NEWS
    1.4         +9  -8      ossp-pkg/var/README
    1.31        +0  -6      ossp-pkg/var/TODO
    1.5         +1  -1      ossp-pkg/var/VERSION
    1.8         +3  -3      ossp-pkg/var/aclocal.m4
    1.13        +3  -3      ossp-pkg/var/configure.ac
    1.3         +1  -1      ossp-pkg/var/devtool
    1.7         +33 -6      ossp-pkg/var/devtool.conf
    1.4         +1  -1      ossp-pkg/var/devtool.func
    1.4         +3  -3      ossp-pkg/var/ts.c
    1.2         +3  -3      ossp-pkg/var/ts.h
    1.6         +3  -3      ossp-pkg/var/var-config.in
    1.6         +3  -3      ossp-pkg/var/var-config.pod
    1.99        +3  -3      ossp-pkg/var/var.c
    1.30        +3  -3      ossp-pkg/var/var.h
    1.35        +3  -3      ossp-pkg/var/var.pod
    1.6         +3  -3      ossp-pkg/var/var_play.c
    1.48        +3  -3      ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/AUTHORS
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 AUTHORS
  --- ossp-pkg/var/AUTHORS	28 Feb 2002 08:48:44 -0000	1.1
  +++ ossp-pkg/var/AUTHORS	14 Feb 2003 21:17:06 -0000	1.2
  @@ -1,3 +1,10 @@
  +   _        ___  ____ ____  ____
  +  |_|_ _   / _ \/ ___/ ___||  _ \  __   ____ _ _ __ 
  +  _|_||_| | | | \___ \___ \| |_) | \ \ / / _` | '__|
  + |_||_|_| | |_| |___) |__) |  __/   \ V / (_| | |
  +  |_|_|_|  \___/|____/____/|_|       \_/ \__,_|_|
  +
  +  OSSP var - Variable Expansion
   
     AUTHORS
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/ChangeLog
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ChangeLog
  --- /dev/null	2003-02-14 22:17:08.000000000 +0100
  +++ ChangeLog	2003-02-14 22:17:08.000000000 +0100
  @@ -0,0 +1,38 @@
  +   _        ___  ____ ____  ____
  +  |_|_ _   / _ \/ ___/ ___||  _ \  __   ____ _ _ __ 
  +  _|_||_| | | | \___ \___ \| |_) | \ \ / / _` | '__|
  + |_||_|_| | |_| |___) |__) |  __/   \ V / (_| | |
  +  |_|_|_|  \___/|____/____/|_|       \_/ \__,_|_|
  +
  +  OSSP var - Variable Expansion
  +
  +  ChangeLog
  +
  +  This is a list of all source changes to OSSP var.
  +  For less details please have a look at the NEWS file.
  +
  +  Changes between 0.9.0 and 1.0.0 (08-Mar-2002 to 14-Feb-2003)
  +
  +   o Adjusted C source code to allow it to be built also with 
  +     strict C++ compilers.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +   o Fixed all remaining memory leaks.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +   o Added optional OSSP ex and DMalloc support.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +   o Upgraded devtool stuff.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +   o Upgraded to fixed test suite library ts.[ch]
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +   o Bumped year in copyright messages for new year 2003.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +   o upgraded build environment to GNU autoconf 2.57, 
  +     GNU libtool 1.4.3 and GNU shtool 1.6.2
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/INSTALL
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 INSTALL
  --- ossp-pkg/var/INSTALL	7 Mar 2002 12:39:30 -0000	1.2
  +++ ossp-pkg/var/INSTALL	14 Feb 2003 21:17:06 -0000	1.3
  @@ -1,7 +1,8 @@
  -  __   ____ _ _ __ 
  -  \ \ / / _` | '__|
  -   \ V / (_| | |   
  -    \_/ \__,_|_|   
  +   _        ___  ____ ____  ____
  +  |_|_ _   / _ \/ ___/ ___||  _ \  __   ____ _ _ __ 
  +  _|_||_| | | | \___ \___ \| |_) | \ \ / / _` | '__|
  + |_||_|_| | |_| |___) |__) |  __/   \ V / (_| | |
  +  |_|_|_|  \___/|____/____/|_|       \_/ \__,_|_|
   
     OSSP var - Variable Expansion
   
  @@ -10,7 +11,9 @@
     To install OSSP var into /path/to/var/ perform
     the following steps in your shell:
         
  -    $ ./configure --prefix=/path/to/var [--with-ex[=DIR]]
  +    $ ./configure --prefix=/path/to/var
  +                 [--with-ex[=DIR]]
  +                 [--with-dmalloc[=DIR]]
       $ make
       $ make check
       $ make install
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 Makefile.in
  --- ossp-pkg/var/Makefile.in	8 Mar 2002 12:55:52 -0000	1.8
  +++ ossp-pkg/var/Makefile.in	14 Feb 2003 21:17:07 -0000	1.9
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP var -- Variable Expansion
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2001-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
   ##  This file is part of OSSP var, a variable expansion
   ##  library which can be found at http://www.ossp.org/pkg/lib/var/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/NEWS
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 NEWS
  --- ossp-pkg/var/NEWS	9 Mar 2002 19:23:37 -0000	1.1
  +++ ossp-pkg/var/NEWS	14 Feb 2003 21:17:07 -0000	1.2
  @@ -1,17 +1,19 @@
  -  __   ____ _ _ __ 
  -  \ \ / / _` | '__|
  -   \ V / (_| | |   
  -    \_/ \__,_|_|   
  +   _        ___  ____ ____  ____
  +  |_|_ _   / _ \/ ___/ ___||  _ \  __   ____ _ _ __ 
  +  _|_||_| | | | \___ \___ \| |_) | \ \ / / _` | '__|
  + |_||_|_| | |_| |___) |__) |  __/   \ V / (_| | |
  +  |_|_|_|  \___/|____/____/|_|       \_/ \__,_|_|
   
     OSSP var - Variable Expansion
   
     NEWS
  -  ====
   
     This is a list of user-visible and/or major changes to OSSP var.
     For more details please have a look at the ChangeLog file.
   
  -  Changes between 0.9.0 and 0.9.1 (08-Mar-2002 to xx-Mar-2002)
  +  Changes between 0.9.0 and 1.0.0 (08-Mar-2002 to 14-Feb-2003)
   
  -   o upgraded to GNU autoconf 2.53 build environment
  +   o upgraded build environment to GNU autoconf 2.57
  +   o upgraded build environment to GNU libtool 1.4.3
  +   o upgraded build environment to GNU shtool 1.6.2
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/README
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 README
  --- ossp-pkg/var/README	8 Mar 2002 16:59:49 -0000	1.3
  +++ ossp-pkg/var/README	14 Feb 2003 21:17:07 -0000	1.4
  @@ -1,10 +1,11 @@
  -  __   ____ _ _ __ 
  -  \ \ / / _` | '__|
  -   \ V / (_| | |   
  -    \_/ \__,_|_|   
  +   _        ___  ____ ____  ____
  +  |_|_ _   / _ \/ ___/ ___||  _ \  __   ____ _ _ __ 
  +  _|_||_| | | | \___ \___ \| |_) | \ \ / / _` | '__|
  + |_||_|_| | |_| |___) |__) |  __/   \ V / (_| | |
  +  |_|_|_|  \___/|____/____/|_|       \_/ \__,_|_|
   
     OSSP var - Variable Expansion
  -  Version 0.9.0 (08-Mar-2002)
  +  Version 1.0.0 (14-Feb-2003)
   
     ABSTRACT
   
  @@ -26,9 +27,9 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2001-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   
     This file is part of OSSP var, a variable expansion
     library which can be found at http://www.ossp.org/pkg/lib/var/.
  @@ .
  rm -f ossp-pkg/var/TODO <<'@@ .'
  Index: ossp-pkg/var/TODO
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/VERSION
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 VERSION
  --- ossp-pkg/var/VERSION	8 Mar 2002 12:55:52 -0000	1.4
  +++ ossp-pkg/var/VERSION	14 Feb 2003 21:17:07 -0000	1.5
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP var (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP var, Version 0.9.0 (08-Mar-2002)
  +  This is OSSP var, Version 1.0.0 (14-Feb-2003)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 aclocal.m4
  --- ossp-pkg/var/aclocal.m4	13 Mar 2002 18:19:54 -0000	1.7
  +++ ossp-pkg/var/aclocal.m4	14 Feb 2003 21:17:07 -0000	1.8
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP var -- Variable Expansion
  -dnl ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP var, a variable expansion
   dnl ##  library which can be found at http://www.ossp.org/pkg/lib/var/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/configure.ac
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 configure.ac
  --- ossp-pkg/var/configure.ac	9 Mar 2002 19:39:57 -0000	1.12
  +++ ossp-pkg/var/configure.ac	14 Feb 2003 21:17:07 -0000	1.13
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP var -- Variable Expansion
  -dnl ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +dnl ##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +dnl ##  Copyright (c) 2001-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   dnl ##
   dnl ##  This file is part of OSSP var, a variable expansion
   dnl ##  library which can be found at http://www.ossp.org/pkg/lib/var/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/devtool
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 devtool
  --- ossp-pkg/var/devtool	2 Jan 2002 17:12:18 -0000	1.2
  +++ ossp-pkg/var/devtool	14 Feb 2003 21:17:07 -0000	1.3
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  devtool -- Development Tool
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com> 
   ##
   
   if [ $# -eq 0 ]; then
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 devtool.conf
  --- ossp-pkg/var/devtool.conf	30 Jan 2003 19:06:37 -0000	1.6
  +++ ossp-pkg/var/devtool.conf	14 Feb 2003 21:17:07 -0000	1.7
  @@ -23,13 +23,40 @@
   %version
       shtool version -l txt -n "OSSP var" -p "var_" -e VERSION
       V=`shtool version -l txt -d long VERSION`
  -    sed -e "s/Version .*(.*)/Version $V/g" <README >README.n 
  +    sed -e "s/Version .*/Version $V/g" <README >README.n 
       mv README.n README
   
   %dist
  -    make distclean >/dev/null 2>&1
  -    shtool fixperm -v .
  -    V=`shtool version -l txt -d short VERSION`
  -    shtool tarball -o var-${V}.tar.gz -d var-${V} -u ossp -g ossp \
  -                   -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool.conf' -c 'gzip --best' .
  +    rm -f var-*.tar.gz
  +    ./devtool autoclean
  +    ./devtool autogen
  +    ./configure
  +    make clean all man
  +    make distclean
  +    ./shtool fixperm -v .
  +    V=`./shtool version -l txt -d short VERSION`
  +    ./shtool tarball -o var-${V}.tar.gz -d var-${V} -u ossp -g var \
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*' -c 'gzip --best' .
  +    ls -l var-${V}.tar.gz
  +    gunzip <var-${V}.tar.gz | tar tvf - | head -10; echo "[...]"
  +    gunzip <var-${V}.tar.gz | tar tvf - | tail -10
  +
  +%snap
  +    rm -f var-*.tar.gz
  +    ./devtool autoclean
  +    ./devtool autogen
  +    ./configure
  +    make clean all man
  +    make distclean
  +    ./shtool fixperm -v .
  +    D=`date '+%Y%m%d'`
  +    ./shtool tarball -o var-SNAP-${D}.tar.gz -d var-SNAP-${D} -u ossp -g var \
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*' -c 'gzip --best' .
  +    ls -l var-SNAP-${D}.tar.gz
  +    gunzip <var-SNAP-${D}.tar.gz | tar tvf - | head -10; echo "[...]"
  +    gunzip <var-SNAP-${D}.tar.gz | tar tvf - | tail -10
  +
  +%release
  +    echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/var/"
  +    scp var-*.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/var/
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/devtool.func
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.func
  --- ossp-pkg/var/devtool.func	9 Mar 2002 19:23:37 -0000	1.3
  +++ ossp-pkg/var/devtool.func	14 Feb 2003 21:17:07 -0000	1.4
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com> 
   ##
   
   devtool_require () {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/ts.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ts.c
  --- ossp-pkg/var/ts.c	10 Feb 2003 15:20:37 -0000	1.3
  +++ ossp-pkg/var/ts.c	14 Feb 2003 21:17:07 -0000	1.4
  @@ -1,8 +1,8 @@
   /*
   **  TS - OSSP Test Suite Library
  -**  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP TS, a small test suite library which
   **  can be found at http://www.ossp.org/pkg/ts/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/ts.h
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ts.h
  --- ossp-pkg/var/ts.h	7 Mar 2002 14:58:41 -0000	1.1
  +++ ossp-pkg/var/ts.h	14 Feb 2003 21:17:07 -0000	1.2
  @@ -1,8 +1,8 @@
   /*
   **  TS - OSSP Test Suite Library
  -**  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP TS, a small test suite library which
   **  can be found at http://www.ossp.org/pkg/ts/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var-config.in
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 var-config.in
  --- ossp-pkg/var/var-config.in	8 Mar 2002 12:55:52 -0000	1.5
  +++ ossp-pkg/var/var-config.in	14 Feb 2003 21:17:07 -0000	1.6
  @@ -1,9 +1,9 @@
   #!/bin/sh
   ##
   ##  OSSP var -- Variable Expansion
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2001-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
   ##  This file is part of OSSP var, a variable expansion
   ##  library which can be found at http://www.ossp.org/pkg/lib/var/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var-config.pod
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 var-config.pod
  --- ossp-pkg/var/var-config.pod	8 Mar 2002 12:55:52 -0000	1.5
  +++ ossp-pkg/var/var-config.pod	14 Feb 2003 21:17:07 -0000	1.6
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP var -- Variable Expansion
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2001-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
   ##  This file is part of OSSP var, a variable expansion
   ##  library which can be found at http://www.ossp.org/pkg/lib/var/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var.c
  ============================================================================
  $ cvs diff -u -r1.98 -r1.99 var.c
  --- ossp-pkg/var/var.c	14 Feb 2003 19:46:21 -0000	1.98
  +++ ossp-pkg/var/var.c	14 Feb 2003 21:17:07 -0000	1.99
  @@ -1,8 +1,8 @@
   /*
   **  OSSP var - Variable Expansion
  -**  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP var, a variable expansion
   **  library which can be found at http://www.ossp.org/pkg/lib/var/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var.h
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 var.h
  --- ossp-pkg/var/var.h	8 Mar 2002 12:55:52 -0000	1.29
  +++ ossp-pkg/var/var.h	14 Feb 2003 21:17:07 -0000	1.30
  @@ -1,8 +1,8 @@
   /*
   **  OSSP var - Variable Expansion
  -**  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP var, a variable expansion
   **  library which can be found at http://www.ossp.org/pkg/lib/var/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var.pod
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 var.pod
  --- ossp-pkg/var/var.pod	27 May 2002 15:29:17 -0000	1.34
  +++ ossp-pkg/var/var.pod	14 Feb 2003 21:17:07 -0000	1.35
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP var -- Variable Expansion
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2001-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##
   ##  This file is part of OSSP VAR, an extensible data serialization
   ##  library which can be found at http://www.ossp.org/pkg/lib/var/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var_play.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 var_play.c
  --- ossp-pkg/var/var_play.c	10 Feb 2003 19:29:00 -0000	1.5
  +++ ossp-pkg/var/var_play.c	14 Feb 2003 21:17:07 -0000	1.6
  @@ -1,8 +1,8 @@
   /*
   **  OSSP var -- Variable Expansion
  -**  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP var, a variable expansion
   **  library which can be found at http://www.ossp.org/pkg/lib/var/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var_test.c
  ============================================================================
  $ cvs diff -u -r1.47 -r1.48 var_test.c
  --- ossp-pkg/var/var_test.c	10 Feb 2003 15:37:15 -0000	1.47
  +++ ossp-pkg/var/var_test.c	14 Feb 2003 21:17:07 -0000	1.48
  @@ -1,8 +1,8 @@
   /*
   **  OSSP var -- Variable Expansion
  -**  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **
   **  This file is part of OSSP var, a variable expansion
   **  library which can be found at http://www.ossp.org/pkg/lib/var/.
  @@ .

From ossp-cvs-owner@ossp.org  Fri Feb 14 22:23:10 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A908B76856; Fri, 14 Feb 2003 22:23:10 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20030214212310.A908B76856@mail.ossp.org>
Date: Fri, 14 Feb 2003 22:23:10 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   14-Feb-2003 22:23:10
  Branch: HEAD                             Handle: 2003021421230802

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/var    index.wml

  Log:
    release OSSP var 1.0.0

  Summary:
    Revision    Changes     Path
    1.54        +1  -0      ossp-web/new/news.txt
    1.50        +1  -1      ossp-web/pkg/lib/index.wml
    1.8         +3  -3      ossp-web/pkg/lib/var/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.53 -r1.54 news.txt
  --- ossp-web/new/news.txt	13 Feb 2003 15:56:34 -0000	1.53
  +++ ossp-web/new/news.txt	14 Feb 2003 21:23:08 -0000	1.54
  @@ -1,3 +1,4 @@
  +14-Feb-2003: Released L<OSSP var> 1.0.0
   13-Feb-2003: Released T<OSSP lmtp2nntp> 1.2.0
   13-Feb-2003: Released L<OSSP fsl> 1.0.8
   12-Feb-2003: Released T<OSSP lmtp2nntp> 1.2b4
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.49 -r1.50 index.wml
  --- ossp-web/pkg/lib/index.wml	13 Feb 2003 15:56:34 -0000	1.49
  +++ ossp-web/pkg/lib/index.wml	14 Feb 2003 21:23:09 -0000	1.50
  @@ -30,7 +30,7 @@
   			done=100 stable=1.0.8 unstable=none>
     <pkg_item name="var" longname="OSSP var" type="lib"
               desc="Variable Expansion"
  -			done=95 stable=none unstable=0.9.0>
  +			done=100 stable=1.0.0 unstable=none>
     <pkg_item name="val" longname="OSSP val" type="lib"
               desc="Value Access"
   			done=95 stable=none unstable=0.9.0>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/var/index.wml
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 index.wml
  --- ossp-web/pkg/lib/var/index.wml	2 Oct 2002 12:44:44 -0000	1.7
  +++ ossp-web/pkg/lib/var/index.wml	14 Feb 2003 21:23:10 -0000	1.8
  @@ -51,8 +51,8 @@
   
   <pkg_status
       name="var" assign="rse"
  -    stable="none"    stable_date="none"
  -    unstable="0.9.0" unstable_date="08-Mar-2002"
  +    stable="1.0.0" stable_date="14-Feb-2003"
  +    unstable="none" unstable_date="none"
   	done=100>
   
   <h2>Source</h2>
  @@ -62,7 +62,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/var/
       directory=$(FTP_ROOT_DIR)/pkg/lib/var/
       files="var-*.tar.gz" 
  -	stable="none" unstable="var-0.9.0.tar.gz">
  +	stable="var-1.0.0.tar.gz" unstable="none">
   
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Feb 16 12:36:58 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9F20D7673E; Sun, 16 Feb 2003 12:36:57 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/path/ devtool.conf
Message-Id: <20030216113657.9F20D7673E@mail.ossp.org>
Date: Sun, 16 Feb 2003 12:36:57 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Feb-2003 12:36:57
  Branch: HEAD                             Handle: 2003021611365600

  Modified files:
    ossp-pkg/path           devtool.conf

  Log:
    upgrade to latest tools

  Summary:
    Revision    Changes     Path
    1.4         +3  -3      ossp-pkg/path/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/path/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.conf
  --- ossp-pkg/path/devtool.conf	3 Aug 2002 10:23:41 -0000	1.3
  +++ ossp-pkg/path/devtool.conf	16 Feb 2003 11:36:56 -0000	1.4
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.1 "1.6.*" all
  -    @autogen libtool  1.4.2 "1.4*"
  -    @autogen autoconf 2.53  "2.5.*"
  +    @autogen shtool   1.6.2 "1.6.*" all
  +    @autogen libtool  1.4.3 "1.4*"
  +    @autogen autoconf 2.57  "2.5.*"
   
   %autoclean
       @autoclean shtool
  @@ .

From ossp-cvs-owner@ossp.org  Sun Feb 16 12:37:18 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8FC0B76992; Sun, 16 Feb 2003 12:37:18 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/path/ TODO
Message-Id: <20030216113718.8FC0B76992@mail.ossp.org>
Date: Sun, 16 Feb 2003 12:37:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Feb-2003 12:37:18
  Branch: HEAD                             Handle: 2003021611371800

  Modified files:
    ossp-pkg/path           TODO

  Log:
    remember what has to be done here

  Summary:
    Revision    Changes     Path
    1.3         +2  -0      ossp-pkg/path/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/path/TODO
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 TODO
  --- ossp-pkg/path/TODO	3 Aug 2002 21:00:14 -0000	1.2
  +++ ossp-pkg/path/TODO	16 Feb 2003 11:37:18 -0000	1.3
  @@ -2,6 +2,7 @@
   - restliche API auf path_rc_t umbauen
   - add glob(*) from shpat
   - add fnmatch(*) from shpat
  +- fts(3) from FreeBSD
   - add tilde() from shpath/bres or bash-2.05a
   - merge with shpat und proc/getcwd
   - MAXPATHLEN should be PATH_MAXPATHLEN und
  @@ -9,4 +10,5 @@
   - path_test.pl in C umschreiben und in path_test.c einbauen
   - path_test.c um path_resolve() checks erweitern
   - path.pod per pod2man convertieren
  +- path_security() function for performing various policy checks (think Sendmail)
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Feb 16 12:38:14 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 383757673E; Sun, 16 Feb 2003 12:38:14 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/path/ ChangeLog README devtool devtool.func path-...
Message-Id: <20030216113814.383757673E@mail.ossp.org>
Date: Sun, 16 Feb 2003 12:38:14 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Feb-2003 12:38:14
  Branch: HEAD                             Handle: 2003021611381101

  Modified files:
    ossp-pkg/path           ChangeLog README devtool devtool.func
                            path-config.in path.pod path_abs2rel.c
                            path_basename.c path_canon.c path_rel2abs.c
                            path_resolve.c path_temp.c path_util.c

  Log:
    remove trailing whitespaces from source files

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/path/ChangeLog
    1.2         +4  -4      ossp-pkg/path/README
    1.2         +1  -1      ossp-pkg/path/devtool
    1.3         +1  -1      ossp-pkg/path/devtool.func
    1.3         +1  -1      ossp-pkg/path/path-config.in
    1.4         +4  -4      ossp-pkg/path/path.pod
    1.3         +3  -3      ossp-pkg/path/path_abs2rel.c
    1.3         +1  -1      ossp-pkg/path/path_basename.c
    1.2         +7  -7      ossp-pkg/path/path_canon.c
    1.3         +5  -5      ossp-pkg/path/path_rel2abs.c
    1.3         +1  -1      ossp-pkg/path/path_resolve.c
    1.2         +16 -16     ossp-pkg/path/path_temp.c
    1.2         +4  -4      ossp-pkg/path/path_util.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/path/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 ChangeLog
  --- ossp-pkg/path/ChangeLog	21 Jan 2002 13:32:34 -0000	1.1.1.1
  +++ ossp-pkg/path/ChangeLog	16 Feb 2003 11:38:11 -0000	1.2
  @@ -6,4 +6,4 @@
     o Cleaned up the sources (K&R -> ANSI C, indentation, use path_ prefix, etc.)
     o Added path.h
     o Merged PathConverts's test suite into path_test.{c,pl}
  -   
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/path/README
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 README
  --- ossp-pkg/path/README	21 Jan 2002 13:32:34 -0000	1.1.1.1
  +++ ossp-pkg/path/README	16 Feb 2003 11:38:11 -0000	1.2
  @@ -1,11 +1,11 @@
  -   ____       _   _     
  -  |  _ \ __ _| |_| |__  
  -  | |_) / _` | __| '_ \ 
  +   ____       _   _
  +  |  _ \ __ _| |_| |__
  +  | |_) / _` | __| '_ \
     |  __/ (_| | |_| | | |
     |_|   \__,_|\__|_| |_|
   
     Path - Filesystem Path Manipulation Library
  -                      
  +
     This product includes software developed by the University of California,
     Berkeley and its contributors. This product includes software developed by
     Shigio Yamaguchi.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/path/devtool
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 devtool
  --- ossp-pkg/path/devtool	21 Jan 2002 13:32:35 -0000	1.1.1.1
  +++ ossp-pkg/path/devtool	16 Feb 2003 11:38:11 -0000	1.2
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  devtool -- Development Tool
  -##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   if [ $# -eq 0 ]; then
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/path/devtool.func
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.func
  --- ossp-pkg/path/devtool.func	3 Aug 2002 10:23:41 -0000	1.2
  +++ ossp-pkg/path/devtool.func	16 Feb 2003 11:38:11 -0000	1.3
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   devtool_require () {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/path/path-config.in
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 path-config.in
  --- ossp-pkg/path/path-config.in	3 Aug 2002 10:23:41 -0000	1.2
  +++ ossp-pkg/path/path-config.in	16 Feb 2003 11:38:11 -0000	1.3
  @@ -29,7 +29,7 @@
   ##  path-config.in: library build utility
   ##
   
  -DIFS=' 	
  +DIFS=' 
   '
   
   prefix="@prefix@"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/path/path.pod
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 path.pod
  --- ossp-pkg/path/path.pod	3 Aug 2002 21:00:15 -0000	1.3
  +++ ossp-pkg/path/path.pod	16 Feb 2003 11:38:11 -0000	1.4
  @@ -52,7 +52,7 @@
   
   B<OSSP path> is a filesystem path manipulation library. It allows one
   to convert between absolute and relative paths and to resolve symbolic
  -links in a path. 
  +links in a path.
   
   =head1 APPLICATION PROGRAMMING INTERFACE (API)
   
  @@ -178,7 +178,7 @@
   You should convert the base directory into a real path in advance.
   
    path = path_abs2rel(result, sizeof(result),
  -                     "/sys/kern", 
  +                     "/sys/kern",
                        path_resolve(result2, sizeof(result2), "/sys"));
   
   This then yields:
  @@ -188,8 +188,8 @@
   That is correct, but a little redundant. If you wish get the simple
   answer 'C<kern>', do the following.
   
  - path = path_abs2rel(r0, sizeof(r0), 
  -                     path_resolve(r1, sizeof(r1), "/sys/kern"), 
  + path = path_abs2rel(r0, sizeof(r0),
  +                     path_resolve(r1, sizeof(r1), "/sys/kern"),
                        path_resolve(r2, sizeof(r2), "/sys"));
   
   The path_resolve(3) function assures correct result, but don't forget
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/path/path_abs2rel.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 path_abs2rel.c
  --- ossp-pkg/path/path_abs2rel.c	3 Aug 2002 10:23:41 -0000	1.2
  +++ ossp-pkg/path/path_abs2rel.c	16 Feb 2003 11:38:11 -0000	1.3
  @@ -89,11 +89,11 @@
               goto erange;
           strcpy(result, path);
           goto finish;
  -    } 
  +    }
       else if (*base != '/' || !size) {
           errno = EINVAL;
           return NULL;
  -    } 
  +    }
       else if (size == 1) {
           goto erange;
       }
  @@ -143,7 +143,7 @@
           if (rp + strlen(branch + 1) > endp)
               goto erange;
           strcpy(rp, branch + 1);
  -    } 
  +    }
       else {
           *--rp = 0;
       }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/path/path_basename.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 path_basename.c
  --- ossp-pkg/path/path_basename.c	3 Aug 2002 10:23:41 -0000	1.2
  +++ ossp-pkg/path/path_basename.c	16 Feb 2003 11:38:11 -0000	1.3
  @@ -74,7 +74,7 @@
   	if (path == NULL || *path == '\0')
   		return (strncpy(outbuf, ".", outsize));
   
  -    /* skip leading slashes */ 
  +    /* skip leading slashes */
   	len = strspn(path, "/");
   	if (len > 0)
   		path += len - 1;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/path/path_canon.c
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 path_canon.c
  --- ossp-pkg/path/path_canon.c	27 Aug 2002 19:04:33 -0000	1.1
  +++ ossp-pkg/path/path_canon.c	16 Feb 2003 11:38:11 -0000	1.2
  @@ -33,7 +33,7 @@
   
   #include "path.h"
   
  -path_rc_t 
  +path_rc_t
   path_canon(
       char       *res_buf, size_t res_len,
       const char *src_buf, size_t src_len)
  @@ -59,13 +59,13 @@
       if (res_len == 0)
           res_len = strlen(res_buf);
   
  -    /* perform processing 
  +    /* perform processing
          (keep in mind that source and target can overlap) */
       res_ptr = res_buf;
       res_end = res_buf+res_len;
       src_ptr = src_buf;
       src_end = src_buf+src_len;
  -    
  +
       while (src_ptr < src_end && res_ptr < res_end) {
           /* recognize path separator */
           if (*src_ptr == '/') {
  @@ -96,8 +96,8 @@
               /* path element is parent directory (".."),
                  so skip over to next path element in source and
                  skip back last path element in result */
  -            if (   res_ptr == res_buf 
  -                || (   res_ptr >= res_buf+3 
  +            if (   res_ptr == res_buf
  +                || (   res_ptr >= res_buf+3
                       && res_ptr[-1] == '/' && res_ptr[-2] == '.' && res_ptr[-3] == '.')) {
                   /* path is relative and empty or already explicit directing
                      to the parent directory, so keep explicit parent specification */
  @@ -105,7 +105,7 @@
                       *res_ptr++ = *src_ptr++;
               }
               else {
  -                /* there is already a path element in the 
  +                /* there is already a path element in the
                      result which can be removed */
                   src_ptr += 2;
                   while (res_ptr > res_buf && res_ptr[-1] == '/')
  @@ -119,7 +119,7 @@
               }
           }
           else {
  -            /* path element something else, so copy 
  +            /* path element something else, so copy
                  it over from source to the result */
               while (src_ptr < src_end && res_ptr < res_end && src_ptr[0] != '/')
                   *res_ptr++ = *src_ptr++;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/path/path_rel2abs.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 path_rel2abs.c
  --- ossp-pkg/path/path_rel2abs.c	3 Aug 2002 10:23:41 -0000	1.2
  +++ ossp-pkg/path/path_rel2abs.c	16 Feb 2003 11:38:12 -0000	1.3
  @@ -90,11 +90,11 @@
               goto erange;
           strcpy(result, path);
           goto finish;
  -    } 
  +    }
       else if (*base != '/' || !size) {
           errno = EINVAL;
           return (NULL);
  -    } 
  +    }
       else if (size == 1) {
           goto erange;
       }
  @@ -133,15 +133,15 @@
               pp += 3;
               while (bp > base && *--bp != '/')
                   ;
  -        } 
  +        }
           else if (!strncmp(pp, "./", 2)) {
               pp += 2;
  -        } 
  +        }
           else if (!strncmp(pp, "..\0", 3)) {
               pp += 2;
               while (bp > base && *--bp != '/')
                   ;
  -        } 
  +        }
           else
               break;
       }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/path/path_resolve.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 path_resolve.c
  --- ossp-pkg/path/path_resolve.c	3 Aug 2002 10:23:41 -0000	1.2
  +++ ossp-pkg/path/path_resolve.c	16 Feb 2003 11:38:12 -0000	1.3
  @@ -178,7 +178,7 @@
       outbuf[outsize-1] = '\0';
       return outbuf;
   
  -err1:   
  +err1:
       serrno = errno;
       fchdir(fd);
   err2:
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/path/path_temp.c
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 path_temp.c
  --- ossp-pkg/path/path_temp.c	3 Aug 2002 21:00:15 -0000	1.1
  +++ ossp-pkg/path/path_temp.c	16 Feb 2003 11:38:12 -0000	1.2
  @@ -43,15 +43,15 @@
   #include "path.h"
   #include "path_util.h"
   
  -static const char 
  -path_temp_padchar[] = 
  +static const char
  +path_temp_padchar[] =
       "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
   
  -path_rc_t 
  +path_rc_t
   path_temp(
  -    path_temp_t id, 
  -    const char *tmpl, 
  -    char      **res_ptr, 
  +    path_temp_t id,
  +    const char *tmpl,
  +    char      **res_ptr,
       size_t     *res_size,
       int        *res_fd)
   {
  @@ -60,7 +60,7 @@
       char *tmpdir;
       size_t n;
       char *user;
  -    char user_buf[4+((sizeof(long)*8)/3)+10]; 
  +    char user_buf[4+((sizeof(long)*8)/3)+10];
       const char *cp;
       const char *cpT;
       char *cpP;
  @@ -97,27 +97,27 @@
               user = user_buf;
           }
           n = strlen(tmpdir);
  -        path_msnprintf(tmpl_def, sizeof(tmpl_def), "%s%s%s.XXXXXXXX", 
  +        path_msnprintf(tmpl_def, sizeof(tmpl_def), "%s%s%s.XXXXXXXX",
                          tmpdir, (tmpdir[n-1] != '/' ? "/" : ""), user_buf);
  -        tmpl = tmpl_def;  
  +        tmpl = tmpl_def;
       }
       else if (tmpl[0] != '/') {
           /* non-absolute path template */
           n = strlen(tmpdir);
  -        path_msnprintf(tmpl_def, sizeof(tmpl_def), "%s%s%s", 
  +        path_msnprintf(tmpl_def, sizeof(tmpl_def), "%s%s%s",
                          tmpdir, (tmpdir[n-1] != '/' ? "/" : ""), tmpl);
           if (strchr(tmpl_def, 'X') == NULL) {
               n = strlen(tmpl_def);
               path_msnprintf(tmpl_def+n, sizeof(tmpl_def)-n, ".XXXXXXXX");
           }
  -        tmpl = tmpl_def;  
  +        tmpl = tmpl_def;
       }
   
       /* seed PRNG as good as possible with POSIX features */
       gettimeofday(&tp, &tzp);
       pid = getpid();
       ppid = getppid();
  -    srand(  (unsigned int)tp.tv_sec 
  +    srand(  (unsigned int)tp.tv_sec
             + (unsigned int)tp.tv_usec
             + (unsigned int)uid
             + (unsigned int)pid
  @@ -150,7 +150,7 @@
               }
               if (errno != EEXIST)
                   return PATH_ERR_SYS;
  -        } 
  +        }
           else if (id == PATH_TEMP_DIR) {
               if (mkdir(path, 0700) == 0) {
                   rc = PATH_OK;
  @@ -158,8 +158,8 @@
               }
               if (errno != EEXIST)
                   return PATH_ERR_SYS;
  -        } 
  -        else 
  +        }
  +        else
               return PATH_ERR_ARG;
   
           /* path collision found, so cycle through namespace */
  @@ -189,7 +189,7 @@
           else
               close(fd);
       }
  - 
  +
       return rc;
   }
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/path/path_util.c
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 path_util.c
  --- ossp-pkg/path/path_util.c	3 Aug 2002 21:00:15 -0000	1.1
  +++ ossp-pkg/path/path_util.c	16 Feb 2003 11:38:12 -0000	1.2
  @@ -40,8 +40,8 @@
   int path_mvxprintf(int (*output)(void *ctx, const char *buffer, size_t bufsize), void *ctx, const char *format, va_list ap)
   {
       /* sufficient integer buffer: <available-bits> x log_10(2) + safety */
  -    char ibuf[((sizeof(int)*8)/3)+10]; 
  -    char libuf[((sizeof(long)*8)/3)+10]; 
  +    char ibuf[((sizeof(int)*8)/3)+10];
  +    char libuf[((sizeof(long)*8)/3)+10];
       char *cp;
       char c;
       int d;
  @@ -153,7 +153,7 @@
           return -1;
       if (buffer != NULL && bufsize == 0)
           return -1;
  -    if (buffer == NULL) 
  +    if (buffer == NULL)
           /* just determine output length */
           n = path_mvxprintf(NULL, NULL, format, ap);
       else {
  @@ -187,7 +187,7 @@
   char *path_mvasnprintf(const char *format, va_list ap)
   {
       char *buffer;
  -    size_t bufsize; 
  +    size_t bufsize;
       va_list apbak;
   
       apbak = ap;
  @@ .

From ossp-cvs-owner@ossp.org  Sun Feb 16 12:39:26 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1F9CC7674C; Sun, 16 Feb 2003 12:39:26 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/path/ Makefile.in aclocal.m4 configure.ac devtool...
Message-Id: <20030216113926.1F9CC7674C@mail.ossp.org>
Date: Sun, 16 Feb 2003 12:39:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Feb-2003 12:39:26
  Branch: HEAD                             Handle: 2003021611392201

  Modified files:
    ossp-pkg/path           Makefile.in aclocal.m4 configure.ac devtool.func
                            path-config.in path.h path.pod path_abs2rel.c
                            path_basename.c path_canon.c path_dirname.c
                            path_rel2abs.c path_resolve.c path_self.c
                            path_temp.c path_test.c path_util.c path_util.h

  Log:
    update copyright messages for new year 2003

  Summary:
    Revision    Changes     Path
    1.6         +3  -3      ossp-pkg/path/Makefile.in
    1.3         +3  -3      ossp-pkg/path/aclocal.m4
    1.4         +3  -3      ossp-pkg/path/configure.ac
    1.4         +1  -1      ossp-pkg/path/devtool.func
    1.4         +3  -3      ossp-pkg/path/path-config.in
    1.6         +3  -3      ossp-pkg/path/path.h
    1.5         +3  -3      ossp-pkg/path/path.pod
    1.4         +3  -3      ossp-pkg/path/path_abs2rel.c
    1.4         +3  -3      ossp-pkg/path/path_basename.c
    1.3         +3  -3      ossp-pkg/path/path_canon.c
    1.3         +3  -3      ossp-pkg/path/path_dirname.c
    1.4         +3  -3      ossp-pkg/path/path_rel2abs.c
    1.4         +3  -3      ossp-pkg/path/path_resolve.c
    1.3         +3  -3      ossp-pkg/path/path_self.c
    1.3         +3  -3      ossp-pkg/path/path_temp.c
    1.5         +3  -3      ossp-pkg/path/path_test.c
    1.3         +3  -3      ossp-pkg/path/path_util.c
    1.2         +3  -3      ossp-pkg/path/path_util.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/path/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 Makefile.in
  --- ossp-pkg/path/Makefile.in	27 Aug 2002 19:04:33 -0000	1.5
  +++ ossp-pkg/path/Makefile.in	16 Feb 2003 11:39:22 -0000	1.6
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP path - Filesystem Path Manipulation
  -##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP path, a filesystem path manipulation library
   ##  which can be found at http://www.ossp.org/pkg/lib/path/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/path/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 aclocal.m4
  --- ossp-pkg/path/aclocal.m4	3 Aug 2002 10:23:41 -0000	1.2
  +++ ossp-pkg/path/aclocal.m4	16 Feb 2003 11:39:22 -0000	1.3
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP fsl - Faking/Flexible Syslog Library
  -dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP path, a filesystem path manipulation library
   dnl ##  which can be found at http://www.ossp.org/pkg/lib/path/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/path/configure.ac
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 configure.ac
  --- ossp-pkg/path/configure.ac	3 Aug 2002 10:23:41 -0000	1.3
  +++ ossp-pkg/path/configure.ac	16 Feb 2003 11:39:22 -0000	1.4
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP path - Filesystem Path Manipulation
  -dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP path, a filesystem path manipulation library
   dnl ##  which can be found at http://www.ossp.org/pkg/lib/path/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/path/devtool.func
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.func
  --- ossp-pkg/path/devtool.func	16 Feb 2003 11:38:11 -0000	1.3
  +++ ossp-pkg/path/devtool.func	16 Feb 2003 11:39:22 -0000	1.4
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   devtool_require () {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/path/path-config.in
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 path-config.in
  --- ossp-pkg/path/path-config.in	16 Feb 2003 11:38:11 -0000	1.3
  +++ ossp-pkg/path/path-config.in	16 Feb 2003 11:39:22 -0000	1.4
  @@ -1,9 +1,9 @@
   #!/bin/sh
   ##
   ##  OSSP path - Filesystem Path Manipulation
  -##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP path, a filesystem path manipulation library
   ##  which can be found at http://www.ossp.org/pkg/lib/path/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/path/path.h
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 path.h
  --- ossp-pkg/path/path.h	27 Aug 2002 19:04:33 -0000	1.5
  +++ ossp-pkg/path/path.h	16 Feb 2003 11:39:22 -0000	1.6
  @@ -1,8 +1,8 @@
   /*
   **  OSSP path - Filesystem Path Manipulation
  -**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP path, a filesystem path manipulation library
   **  which can be found at http://www.ossp.org/pkg/lib/path/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/path/path.pod
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 path.pod
  --- ossp-pkg/path/path.pod	16 Feb 2003 11:38:11 -0000	1.4
  +++ ossp-pkg/path/path.pod	16 Feb 2003 11:39:22 -0000	1.5
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP path - Filesystem Path Manipulation
  -##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP path, a filesystem path manipulation library
   ##  which can be found at http://www.ossp.org/pkg/lib/path/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/path/path_abs2rel.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 path_abs2rel.c
  --- ossp-pkg/path/path_abs2rel.c	16 Feb 2003 11:38:11 -0000	1.3
  +++ ossp-pkg/path/path_abs2rel.c	16 Feb 2003 11:39:22 -0000	1.4
  @@ -1,8 +1,8 @@
   /*
   **  OSSP path - Filesystem Path Manipulation
  -**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP path, a filesystem path manipulation library
   **  which can be found at http://www.ossp.org/pkg/lib/path/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/path/path_basename.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 path_basename.c
  --- ossp-pkg/path/path_basename.c	16 Feb 2003 11:38:11 -0000	1.3
  +++ ossp-pkg/path/path_basename.c	16 Feb 2003 11:39:22 -0000	1.4
  @@ -1,8 +1,8 @@
   /*
   **  OSSP path - Filesystem Path Manipulation
  -**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP path, a filesystem path manipulation library
   **  which can be found at http://www.ossp.org/pkg/lib/path/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/path/path_canon.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 path_canon.c
  --- ossp-pkg/path/path_canon.c	16 Feb 2003 11:38:11 -0000	1.2
  +++ ossp-pkg/path/path_canon.c	16 Feb 2003 11:39:22 -0000	1.3
  @@ -1,8 +1,8 @@
   /*
   **  OSSP path - Filesystem Path Manipulation
  -**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP path, a filesystem path manipulation library
   **  which can be found at http://www.ossp.org/pkg/lib/path/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/path/path_dirname.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 path_dirname.c
  --- ossp-pkg/path/path_dirname.c	3 Aug 2002 10:23:41 -0000	1.2
  +++ ossp-pkg/path/path_dirname.c	16 Feb 2003 11:39:23 -0000	1.3
  @@ -1,8 +1,8 @@
   /*
   **  OSSP path - Filesystem Path Manipulation
  -**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP path, a filesystem path manipulation library
   **  which can be found at http://www.ossp.org/pkg/lib/path/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/path/path_rel2abs.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 path_rel2abs.c
  --- ossp-pkg/path/path_rel2abs.c	16 Feb 2003 11:38:12 -0000	1.3
  +++ ossp-pkg/path/path_rel2abs.c	16 Feb 2003 11:39:23 -0000	1.4
  @@ -1,8 +1,8 @@
   /*
   **  OSSP path - Filesystem Path Manipulation
  -**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP path, a filesystem path manipulation library
   **  which can be found at http://www.ossp.org/pkg/lib/path/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/path/path_resolve.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 path_resolve.c
  --- ossp-pkg/path/path_resolve.c	16 Feb 2003 11:38:12 -0000	1.3
  +++ ossp-pkg/path/path_resolve.c	16 Feb 2003 11:39:23 -0000	1.4
  @@ -1,8 +1,8 @@
   /*
   **  OSSP path - Filesystem Path Manipulation
  -**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP path, a filesystem path manipulation library
   **  which can be found at http://www.ossp.org/pkg/lib/path/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/path/path_self.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 path_self.c
  --- ossp-pkg/path/path_self.c	26 Aug 2002 18:40:33 -0000	1.2
  +++ ossp-pkg/path/path_self.c	16 Feb 2003 11:39:23 -0000	1.3
  @@ -1,8 +1,8 @@
   /*
   **  OSSP path - Filesystem Path Manipulation
  -**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP path, a filesystem path manipulation library
   **  which can be found at http://www.ossp.org/pkg/lib/path/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/path/path_temp.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 path_temp.c
  --- ossp-pkg/path/path_temp.c	16 Feb 2003 11:38:12 -0000	1.2
  +++ ossp-pkg/path/path_temp.c	16 Feb 2003 11:39:23 -0000	1.3
  @@ -1,8 +1,8 @@
   /*
   **  OSSP path - Filesystem Path Manipulation
  -**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP path, a filesystem path manipulation library
   **  which can be found at http://www.ossp.org/pkg/lib/path/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/path/path_test.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 path_test.c
  --- ossp-pkg/path/path_test.c	27 Aug 2002 19:04:33 -0000	1.4
  +++ ossp-pkg/path/path_test.c	16 Feb 2003 11:39:23 -0000	1.5
  @@ -1,8 +1,8 @@
   /*
   **  OSSP path - Filesystem Path Manipulation
  -**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP path, a filesystem path manipulation library
   **  which can be found at http://www.ossp.org/pkg/lib/path/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/path/path_util.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 path_util.c
  --- ossp-pkg/path/path_util.c	16 Feb 2003 11:38:12 -0000	1.2
  +++ ossp-pkg/path/path_util.c	16 Feb 2003 11:39:23 -0000	1.3
  @@ -1,8 +1,8 @@
   /*
   **  OSSP path - Filesystem Path Manipulation
  -**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP path, a filesystem path manipulation library
   **  which can be found at http://www.ossp.org/pkg/lib/path/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/path/path_util.h
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 path_util.h
  --- ossp-pkg/path/path_util.h	3 Aug 2002 21:00:15 -0000	1.1
  +++ ossp-pkg/path/path_util.h	16 Feb 2003 11:39:23 -0000	1.2
  @@ -1,8 +1,8 @@
   /*
   **  OSSP path - Filesystem Path Manipulation
  -**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP path, a filesystem path manipulation library
   **  which can be found at http://www.ossp.org/pkg/lib/path/.
  @@ .

From ossp-cvs-owner@ossp.org  Sun Feb 16 12:43:06 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 64F887674C; Sun, 16 Feb 2003 12:43:06 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/path/ README
Message-Id: <20030216114306.64F887674C@mail.ossp.org>
Date: Sun, 16 Feb 2003 12:43:06 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Feb-2003 12:43:06
  Branch: HEAD                             Handle: 2003021611430500

  Modified files:
    ossp-pkg/path           README

  Log:
    provide standard README template

  Summary:
    Revision    Changes     Path
    1.3         +50 -11     ossp-pkg/path/README
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/path/README
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 README
  --- ossp-pkg/path/README	16 Feb 2003 11:38:11 -0000	1.2
  +++ ossp-pkg/path/README	16 Feb 2003 11:43:05 -0000	1.3
  @@ -1,12 +1,51 @@
  -   ____       _   _
  -  |  _ \ __ _| |_| |__
  -  | |_) / _` | __| '_ \
  -  |  __/ (_| | |_| | | |
  -  |_|   \__,_|\__|_| |_|
  -
  -  Path - Filesystem Path Manipulation Library
  -
  -  This product includes software developed by the University of California,
  -  Berkeley and its contributors. This product includes software developed by
  -  Shigio Yamaguchi.
  +   _        ___  ____ ____  ____                _   _
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _ __   __ _| |_| |__
  +  _|_||_| | | | \___ \___ \| |_) | | '_ \ / _` | __| '_ \
  + |_||_|_| | |_| |___) |__) |  __/  | |_) | (_| | |_| | | |
  +  |_|_|_|  \___/|____/____/|_|     | .__/ \__,_|\__|_| |_|
  +                                   |_|
  +  OSSP path - Filesystem Path
  +  Version 0.1.0 (31-Jan-2003)
  +
  +  ABSTRACT
  +
  +  OSSP path is a filesystem path library.
  +  ...
  +
  +  COPYRIGHT AND LICENSE
  +
  +  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +
  +  This file is part of OSSP path, a filesystem path library which
  +  can be found at http://www.ossp.org/pkg/lib/path/.
  +
  +  Permission to use, copy, modify, and distribute this software for
  +  any purpose with or without fee is hereby granted, provided that
  +  the above copyright notice and this permission notice appear in all
  +  copies.
  +
  +  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +  SUCH DAMAGE.
  +
  +  This product includes software developed by the University of
  +  California, Berkeley and its contributors. This product includes
  +  software developed by Shigio Yamaguchi.
  +
  +  HOME AND DOCUMENTATION
  +
  +  The documentation and latest release can be found on
  +
  +  o http://www.ossp.org/pkg/lib/path/
  +  o  ftp://ftp.ossp.org/pkg/lib/path/
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Feb 16 17:16:11 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 02F9E7674C; Sun, 16 Feb 2003 17:16:10 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/res/ AUTHORS ChangeLog INSTALL Makefile.in README...
Message-Id: <20030216161610.02F9E7674C@mail.ossp.org>
Date: Sun, 16 Feb 2003 17:16:10 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Feb-2003 17:16:10
  Branch: HEAD                             Handle: 2003021616160600

  Added files:
    ossp-pkg/res            AUTHORS ChangeLog INSTALL Makefile.in README
                            THANKS VERSION aclocal.m4 configure.ac devtool
                            devtool.conf devtool.func res-config.in res.c
                            res.h res.pod res_test.c ts.c ts.h

  Log:
    add initial OSSP library framework to CVS for new forthcoming OSSP res

  Summary:
    Revision    Changes     Path
    1.1         +15 -0      ossp-pkg/res/AUTHORS
    1.1         +17 -0      ossp-pkg/res/ChangeLog
    1.1         +18 -0      ossp-pkg/res/INSTALL
    1.1         +131 -0     ossp-pkg/res/Makefile.in
    1.1         +47 -0      ossp-pkg/res/README
    1.1         +13 -0      ossp-pkg/res/THANKS
    1.1         +6  -0      ossp-pkg/res/VERSION
    1.1         +228 -0     ossp-pkg/res/aclocal.m4
    1.1         +50 -0      ossp-pkg/res/configure.ac
    1.1         +47 -0      ossp-pkg/res/devtool
    1.1         +51 -0      ossp-pkg/res/devtool.conf
    1.1         +73 -0      ossp-pkg/res/devtool.func
    1.1         +147 -0     ossp-pkg/res/res-config.in
    1.1         +34 -0      ossp-pkg/res/res.c
    1.1         +43 -0      ossp-pkg/res/res.h
    1.1         +70 -0      ossp-pkg/res/res.pod
    1.1         +57 -0      ossp-pkg/res/res_test.c
    1.1         +468 -0     ossp-pkg/res/ts.c
    1.1         +64 -0      ossp-pkg/res/ts.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/res/AUTHORS
  ============================================================================
  $ cvs diff -u -r0 -r1.1 AUTHORS
  --- /dev/null	2003-02-16 17:16:07.000000000 +0100
  +++ AUTHORS	2003-02-16 17:16:07.000000000 +0100
  @@ -0,0 +1,15 @@
  +   _        ___  ____ ____  ____
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _ __ ___  ___ 
  +  _|_||_| | | | \___ \___ \| |_) | | '__/ _ \/ __|
  + |_||_|_| | |_| |___) |__) |  __/  | | |  __/\__ \
  +  |_|_|_|  \___/|____/____/|_|     |_|  \___||___/
  +
  +  OSSP res - Resource Pools
  +
  +  AUTHORS
  +
  +  This is a list of authors who have written
  +  or edited major parts of the OSSP res sources.
  +
  +  Ralf S. Engelschall   <rse@engelschall.com>
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/res/ChangeLog
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ChangeLog
  --- /dev/null	2003-02-16 17:16:07.000000000 +0100
  +++ ChangeLog	2003-02-16 17:16:07.000000000 +0100
  @@ -0,0 +1,17 @@
  +   _        ___  ____ ____  ____
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _ __ ___  ___ 
  +  _|_||_| | | | \___ \___ \| |_) | | '__/ _ \/ __|
  + |_||_|_| | |_| |___) |__) |  __/  | | |  __/\__ \
  +  |_|_|_|  \___/|____/____/|_|     |_|  \___||___/
  +
  +  OSSP res - Resource Pools
  +
  +  ChangeLog
  +
  +  This is the list of all changes to the OSSP res source tree.
  +
  +  Changes between GENESIS and 0.9.0 (31-Jan-2002)
  +
  +   *) Created initial version
  +      [Ralf S. Engelschall]
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/res/INSTALL
  ============================================================================
  $ cvs diff -u -r0 -r1.1 INSTALL
  --- /dev/null	2003-02-16 17:16:07.000000000 +0100
  +++ INSTALL	2003-02-16 17:16:07.000000000 +0100
  @@ -0,0 +1,18 @@
  +   _        ___  ____ ____  ____
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _ __ ___  ___ 
  +  _|_||_| | | | \___ \___ \| |_) | | '__/ _ \/ __|
  + |_||_|_| | |_| |___) |__) |  __/  | | |  __/\__ \
  +  |_|_|_|  \___/|____/____/|_|     |_|  \___||___/
  +
  +  OSSP res - Resource Pools
  +
  +  INSTALL
  +
  +  To install OSSP res into /path/to/res/ perform
  +  the following steps in your shell:
  +
  +    $ ./configure --prefix=/path/to/res
  +    $ make
  +    $ make check
  +    $ make install
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/res/Makefile.in
  ============================================================================
  $ cvs diff -u -r0 -r1.1 Makefile.in
  --- /dev/null	2003-02-16 17:16:07.000000000 +0100
  +++ Makefile.in	2003-02-16 17:16:07.000000000 +0100
  @@ -0,0 +1,131 @@
  +##
  +##  OSSP res - Resource Pools
  +##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP res, a resource pool library
  +##  which can be found at http://www.ossp.org/pkg/lib/res/.
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  Makefile.in: make(1) build procedure
  +##
  +
  +@SET_MAKE@
  +
  +DESTDIR     =
  +prefix      = @prefix@
  +exec_prefix = @exec_prefix@
  +bindir      = @bindir@
  +libdir      = @libdir@
  +includedir  = @includedir@
  +mandir      = @mandir@
  +
  +CC          = @CC@
  +CPPFLAGS    = @CPPFLAGS@
  +CFLAGS      = @DEFS@ @CFLAGS@
  +LDFLAGS     = @LDFLAGS@
  +LIBS        = @LIBS@
  +RM          = rm -f
  +RMDIR       = rmdir
  +SHTOOL      = ./shtool
  +LIBTOOL     = ./libtool
  +TRUE        = true
  +POD2MAN     = pod2man
  +
  +LIB_NAME    = libres.la
  +LIB_OBJS    = res.lo
  +
  +TST_NAME    = res_test
  +TST_OBJS    = res_test.o ts.o
  +
  +.SUFFIXES:
  +.SUFFIXES: .c .o .lo
  +
  +all: $(LIB_NAME) $(TST_NAME)
  +
  +.c.o:
  +	$(CC) $(CPPFLAGS) $(CFLAGS) -c $<
  +
  +.c.lo:
  +	@$(LIBTOOL) --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS) -c $<
  +
  +$(LIB_OBJS): Makefile
  +$(TST_OBJS): Makefile
  +
  +$(LIB_NAME): $(LIB_OBJS)
  +	@$(LIBTOOL) --mode=link $(CC) -o $(LIB_NAME) $(LIB_OBJS) -rpath $(libdir) \
  +	    -version-info `$(SHTOOL) version -l txt -d libtool VERSION`
  +
  +$(TST_NAME): $(TST_OBJS) $(LIB_NAME)
  +	@$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $(TST_NAME) $(TST_OBJS) $(LIB_NAME) $(LIBS)
  +
  +man: res.3
  +res.3: res.pod
  +	V1=`$(SHTOOL) version -l txt -d short VERSION`; \
  +	V2=`$(SHTOOL) version -l txt -d long VERSION`; \
  +	D=`$(SHTOOL) version -l txt -d long VERSION | sed -e 's;.*(;;' -e 's;).*;;'`; \
  +	$(POD2MAN) --quotes=none \
  +	           --section=3 --center="Resource Pools" \
  +	           --release="$$D" --date="OSSP res $$V1" res.pod | \
  +	sed -e "s;RES_VERSION_STR;$$V2;" >res.3
  +
  +check: $(TST_NAME)
  +	@$(LIBTOOL) --mode=execute ./$(TST_NAME)
  +
  +install:
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(includedir)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libdir)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man3
  +	$(SHTOOL) install -c -m 755 res-config $(DESTDIR)$(bindir)/
  +	$(SHTOOL) install -c -m 644 res.h $(DESTDIR)$(includedir)/
  +	$(SHTOOL) install -c -m 644 res.3 $(DESTDIR)$(mandir)/man3/
  +	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libres.la $(DESTDIR)$(libdir)/
  +
  +uninstall:
  +	@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libres.la
  +	-$(RM) $(DESTDIR)$(mandir)/man3/res.3
  +	-$(RM) $(DESTDIR)$(includedir)/res.h
  +	-$(RM) $(DESTDIR)$(bindir)/res-config
  +	-$(RMDIR) $(DESTDIR)$(mandir)/man3 >/dev/null 2>&1 || $(TRUE)
  +	-$(RMDIR) $(DESTDIR)$(mandir) >/dev/null 2>&1 || $(TRUE)
  +	-$(RMDIR) $(DESTDIR)$(libdir) >/dev/null 2>&1 || $(TRUE)
  +	-$(RMDIR) $(DESTDIR)$(includedir) >/dev/null 2>&1 || $(TRUE)
  +	-$(RMDIR) $(DESTDIR)$(bindir) >/dev/null 2>&1 || $(TRUE)
  +	-$(RMDIR) $(DESTDIR)$(prefix) >/dev/null 2>&1 || $(TRUE)
  +
  +clean:
  +	-$(RM) $(LIB_NAME) $(LIB_OBJS)
  +	-$(RM) $(TST_NAME) $(TST_OBJS)
  +	-$(RM) -r .libs >/dev/null 2>&1 || $(TRUE)
  +	-$(RM) *.o *.lo
  +
  +distclean: clean
  +	-$(RM) config.log config.status config.cache
  +	-$(RM) Makefile config.h res-config
  +	-$(RM) libtool
  +
  +realclean: distclean
  +	-$(RM) res.3
  +	-$(RM) configure config.h.in
  +	-$(RM) shtool
  +	-$(RM) ltmain.sh libtool.m4 config.guess config.sub
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/res/README
  ============================================================================
  $ cvs diff -u -r0 -r1.1 README
  --- /dev/null	2003-02-16 17:16:07.000000000 +0100
  +++ README	2003-02-16 17:16:08.000000000 +0100
  @@ -0,0 +1,47 @@
  +   _        ___  ____ ____  ____
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _ __ ___  ___ 
  +  _|_||_| | | | \___ \___ \| |_) | | '__/ _ \/ __|
  + |_||_|_| | |_| |___) |__) |  __/  | | |  __/\__ \
  +  |_|_|_|  \___/|____/____/|_|     |_|  \___||___/
  +
  +  OSSP res - Resource Pools
  +  Version 0.1.0 (30-Jan-2003)
  +
  +  ABSTRACT
  +
  +  OSSP res is a resource management library for dealing with
  +  resource pools. [...]
  +
  +  COPYRIGHT AND LICENSE
  +
  +  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  +
  +  This file is part of OSSP res, a resource pool library which
  +  can be found at http://www.ossp.org/pkg/lib/res/.
  +
  +  Permission to use, copy, modify, and distribute this software for
  +  any purpose with or without fee is hereby granted, provided that
  +  the above copyright notice and this permission notice appear in all
  +  copies.
  +
  +  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +  SUCH DAMAGE.
  +
  +  HOME AND DOCUMENTATION
  +
  +  The documentation and latest release can be found on
  +
  +  o http://www.ossp.org/pkg/lib/res/
  +  o  ftp://ftp.ossp.org/pkg/lib/res/
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/res/THANKS
  ============================================================================
  $ cvs diff -u -r0 -r1.1 THANKS
  --- /dev/null	2003-02-16 17:16:07.000000000 +0100
  +++ THANKS	2003-02-16 17:16:08.000000000 +0100
  @@ -0,0 +1,13 @@
  +   _        ___  ____ ____  ____
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _ __ ___  ___ 
  +  _|_||_| | | | \___ \___ \| |_) | | '__/ _ \/ __|
  + |_||_|_| | |_| |___) |__) |  __/  | | |  __/\__ \
  +  |_|_|_|  \___/|____/____/|_|     |_|  \___||___/
  +
  +  OSSP res - Resource Pools
  +  
  +  THANKS
  +
  +  Credit has to be given to the following people who contributed ideas,
  +  bugfixes, hints, gave platform feedback, etc. (in alphabetical order):
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/res/VERSION
  ============================================================================
  $ cvs diff -u -r0 -r1.1 VERSION
  --- /dev/null	2003-02-16 17:16:07.000000000 +0100
  +++ VERSION	2003-02-16 17:16:08.000000000 +0100
  @@ -0,0 +1,6 @@
  +
  +  VERSION -- Version Information for OSSP ex (syntax: Text)
  +  [automatically generated and maintained by GNU shtool]
  +
  +  This is OSSP ex, Version 1.0.2 (30-Jan-2003)
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/res/aclocal.m4
  ============================================================================
  $ cvs diff -u -r0 -r1.1 aclocal.m4
  --- /dev/null	2003-02-16 17:16:07.000000000 +0100
  +++ aclocal.m4	2003-02-16 17:16:08.000000000 +0100
  @@ -0,0 +1,228 @@
  +dnl ##
  +dnl ##  OSSP res - Resource Pools
  +dnl ##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  +dnl ##
  +dnl ##  This file is part of OSSP res, a resource pool library
  +dnl ##  which can be found at http://www.ossp.org/pkg/lib/res/.
  +dnl ##
  +dnl ##  Permission to use, copy, modify, and distribute this software for
  +dnl ##  any purpose with or without fee is hereby granted, provided that
  +dnl ##  the above copyright notice and this permission notice appear in all
  +dnl ##  copies.
  +dnl ##
  +dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +dnl ##  SUCH DAMAGE.
  +dnl ##
  +dnl ##  aclocal.m4: GNU Autoconf local macro definitions
  +dnl ##
  +
  +dnl ##
  +dnl ##  Check whether compiler option works
  +dnl ##
  +dnl ##  configure.in:
  +dnl ##    AC_COMPILER_OPTION(<name>, <display>, <option>,
  +dnl ##                       <action-success>, <action-failure>)
  +dnl ##
  +
  +AC_DEFUN(AC_COMPILER_OPTION,[dnl
  +AC_MSG_CHECKING(whether compiler option(s) $2 work)
  +AC_CACHE_VAL(ac_cv_compiler_option_$1,[
  +SAVE_CFLAGS="$CFLAGS"
  +CFLAGS="$CFLAGS $3"
  +AC_TRY_COMPILE([],[], ac_cv_compiler_option_$1=yes, ac_cv_compiler_option_$1=no)
  +CFLAGS="$SAVE_CFLAGS"
  +])dnl
  +if test ".$ac_cv_compiler_option_$1" = .yes; then
  +    ifelse([$4], , :, [$4])
  +else
  +    ifelse([$5], , :, [$5])
  +fi
  +AC_MSG_RESULT([$ac_cv_compiler_option_$1])
  +])dnl
  +
  +dnl ##
  +dnl ##  Debugging Support
  +dnl ##
  +dnl ##  configure.in:
  +dnl ##    AC_CHECK_DEBUGGING
  +dnl ##
  +
  +AC_DEFUN(AC_CHECK_DEBUGGING,[dnl
  +AC_ARG_ENABLE(debug,dnl
  +[  --enable-debug          build for debugging (default=no)],
  +[dnl
  +if test ".$ac_cv_prog_gcc" = ".yes"; then
  +    case "$CFLAGS" in
  +        *-O* ) ;;
  +           * ) CFLAGS="$CFLAGS -O2" ;;
  +    esac
  +    case "$CFLAGS" in
  +        *-g* ) ;;
  +           * ) CFLAGS="$CFLAGS -g" ;;
  +    esac
  +    case "$CFLAGS" in
  +        *-pipe* ) ;;
  +              * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
  +    esac
  +    AC_COMPILER_OPTION(defdbg, -DDEBUG, -DDEBUG, CFLAGS="$CFLAGS -DDEBUG")
  +    AC_COMPILER_OPTION(ggdb3, -ggdb3, -ggdb3, CFLAGS="$CFLAGS -ggdb3")
  +    CFLAGS="$CFLAGS -pedantic"
  +    CFLAGS="$CFLAGS -Wall"
  +    WMORE="-Wshadow -Wpointer-arith -Wcast-align -Winline"
  +    WMORE="$WMORE -Wmissing-prototypes -Wmissing-declarations -Wnested-externs"
  +    AC_COMPILER_OPTION(wmore, -W<xxx>, $WMORE, CFLAGS="$CFLAGS $WMORE")
  +    AC_COMPILER_OPTION(wnolonglong, -Wno-long-long, -Wno-long-long, CFLAGS="$CFLAGS -Wno-long-long")
  +else
  +    case "$CFLAGS" in
  +        *-g* ) ;;
  +           * ) CFLAGS="$CFLAGS -g" ;;
  +    esac
  +fi
  +msg="enabled"
  +],[
  +if test ".$ac_cv_prog_gcc" = ".yes"; then
  +case "$CFLAGS" in
  +    *-pipe* ) ;;
  +          * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
  +esac
  +fi
  +case "$CFLAGS" in
  +    *-g* ) CFLAGS=`echo "$CFLAGS" |\
  +                   sed -e 's/ -g / /g' -e 's/ -g$//' -e 's/^-g //g' -e 's/^-g$//'` ;;
  +esac
  +case "$CXXFLAGS" in
  +    *-g* ) CXXFLAGS=`echo "$CXXFLAGS" |\
  +                     sed -e 's/ -g / /g' -e 's/ -g$//' -e 's/^-g //g' -e 's/^-g$//'` ;;
  +esac
  +msg=disabled
  +])dnl
  +AC_MSG_CHECKING(for compilation debug mode)
  +AC_MSG_RESULT([$msg])
  +if test ".$msg" = .enabled; then
  +    enable_shared=no
  +fi
  +])
  +
  +dnl ##
  +dnl ##  Check for an external/extension library.
  +dnl ##  - is aware of <libname>-config style scripts
  +dnl ##  - searches under standard paths include, lib, etc.
  +dnl ##  - searches under subareas like .libs, etc.
  +dnl ##
  +dnl ##  configure.in:
  +dnl ##      AC_CHECK_EXTLIB(<realname>, <libname>, <func>, <header>,
  +dnl ##                      [<success-action> [, <fail-action>]])
  +dnl ##  Makefile.in:
  +dnl ##      CFLAGS  = @CFLAGS@
  +dnl ##      LDFLAGS = @LDFLAGS@
  +dnl ##      LIBS    = @LIBS@
  +dnl ##  shell:
  +dnl ##      $ ./configure --with-<libname>[=DIR]
  +dnl ##
  +
  +AC_DEFUN(AC_CHECK_EXTLIB,[dnl
  +AC_ARG_WITH($2, [dnl
  +[  --with-]m4_substr([$2[[=DIR]]                     ], 0, 19)[build with external $1 library (default=no)]], [dnl
  +    if test ".$with_$2" = .yes; then
  +        #   via config script in PATH
  +        $2_version=`($2-config --version) 2>/dev/null`
  +        if test ".$$2_version" != .; then
  +            CPPFLAGS="$CPPFLAGS `$2-config --cflags`"
  +            CFLAGS="$CFLAGS `$2-config --cflags`"
  +            LDFLAGS="$LDFLAGS `$2-config --ldflags`"
  +        fi
  +    else
  +        if test -d "$with_$2"; then
  +            found=0
  +            #   via config script
  +            for dir in $with_$2/bin $with_$2; do
  +                if test -f "$dir/$2-config" && test ! -f "$dir/$2-config.in"; then
  +                    $2_version=`($dir/$2-config --version) 2>/dev/null`
  +                    if test ".$$2_version" != .; then
  +                        CPPFLAGS="$CPPFLAGS `$dir/$2-config --cflags`"
  +                        CFLAGS="$CFLAGS `$dir/$2-config --cflags`"
  +                        LDFLAGS="$LDFLAGS `$dir/$2-config --ldflags`"
  +                        found=1
  +                        break
  +                    fi
  +                fi
  +            done
  +            #   in standard sub-areas
  +            if test ".$found" = .0; then
  +                for dir in $with_$2/include/$2 $with_$2/include $with_$2; do
  +                    if test -f "$dir/$4"; then
  +                        CPPFLAGS="$CPPFLAGS -I$dir"
  +                        CFLAGS="$CFLAGS -I$dir"
  +                        found=1
  +                        break
  +                    fi
  +                done
  +                for dir in $with_$2/lib/$2 $with_$2/lib $with_$2; do
  +                    if test -f "$dir/lib$2.la" && test -d "$dir/.libs"; then
  +                        LDFLAGS="$LDFLAGS -L$dir -L$dir/.libs"
  +                        found=1
  +                        break
  +                    elif test -f "$dir/lib$2.a" || test -f "$dir/lib$2.so"; then
  +                        LDFLAGS="$LDFLAGS -L$dir"
  +                        found=1
  +                        break
  +                    fi
  +                done
  +            fi
  +            #   in any sub-area
  +            if test ".$found" = .0; then
  +changequote(, )dnl
  +                for file in x `find $with_$2 -name "$4" -type f -print`; do
  +                    test .$file = .x && continue
  +                    dir=`echo $file | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;'`
  +                    CPPFLAGS="$CPPFLAGS -I$dir"
  +                    CFLAGS="$CFLAGS -I$dir"
  +                done
  +                for file in x `find $with_$2 -name "lib$2.[aso]" -type f -print`; do
  +                    test .$file = .x && continue
  +                    dir=`echo $file | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;'`
  +                    LDFLAGS="$LDFLAGS -L$dir"
  +                done
  +changequote([, ])dnl
  +            fi
  +        fi
  +    fi
  +    AC_HAVE_HEADERS($4)
  +    AC_CHECK_LIB($2, $3)
  +    with_$2=yes
  +    ac_var="ac_cv_header_`echo $4 | sed 'y%./+-%__p_%'`"
  +    eval "ac_val=\$$ac_var"
  +    if test ".$ac_val" != .yes; then
  +        with_$2=no
  +    fi
  +    if test ".$ac_cv_lib_$2_$3" != .yes; then
  +        with_$2=no
  +    fi
  +    if test ".$with_$2" = .no; then
  +        AC_ERROR([Unable to find $1 library])
  +    fi
  +    ], [dnl
  +if test ".$with_$2" = .; then
  +    with_$2=no
  +fi
  +    ])dnl
  +AC_MSG_CHECKING(whether to build against external $1 library)
  +if test ".$with_$2" = .yes; then
  +    ifelse([$5], , :, [$5])
  +else
  +    ifelse([$6], , :, [$6])
  +fi
  +AC_MSG_RESULT([$with_$2])
  +])dnl
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/res/configure.ac
  ============================================================================
  $ cvs diff -u -r0 -r1.1 configure.ac
  --- /dev/null	2003-02-16 17:16:07.000000000 +0100
  +++ configure.ac	2003-02-16 17:16:08.000000000 +0100
  @@ -0,0 +1,50 @@
  +dnl ##
  +dnl ##  OSSP res - Resource Pools
  +dnl ##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  +dnl ##
  +dnl ##  This file is part of OSSP res, a resource pool library
  +dnl ##  which can be found at http://www.ossp.org/pkg/lib/res/.
  +dnl ##
  +dnl ##  Permission to use, copy, modify, and distribute this software for
  +dnl ##  any purpose with or without fee is hereby granted, provided that
  +dnl ##  the above copyright notice and this permission notice appear in all
  +dnl ##  copies.
  +dnl ##
  +dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +dnl ##  SUCH DAMAGE.
  +dnl ##
  +dnl ##  configure.ac: GNU Autoconf source script
  +dnl ##
  +
  +AC_PREREQ(2.57)
  +AC_INIT
  +RES_VERSION_STR=`./shtool version -l txt -d long VERSION`
  +./shtool echo -e "Configuring %BOSSP res%b (Resource Pools), version %B${EX_VERSION_STR}%b"
  +AC_SUBST(RES_VERSION_STR)
  +AC_CONFIG_SRCDIR(res.h)
  +
  +AC_PROG_MAKE_SET
  +AC_PROG_CC
  +AC_CHECK_DEBUGGING
  +sinclude(libtool.m4)
  +AC_PROG_LIBTOOL
  +
  +AC_CHECK_EXTLIB([OSSP ex], ex, __ex_ctx, ex.h,
  +                [AC_DEFINE(WITH_EX, 1, [Define to 1 if building with OSSP ex])])
  +
  +AC_CONFIG_HEADERS(config.h)
  +AC_CONFIG_FILES([Makefile res-config])
  +AC_CONFIG_COMMANDS([adjustment], [chmod a+x res-config])
  +AC_OUTPUT
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/res/devtool
  ============================================================================
  $ cvs diff -u -r0 -r1.1 devtool
  --- /dev/null	2003-02-16 17:16:07.000000000 +0100
  +++ devtool	2003-02-16 17:16:09.000000000 +0100
  @@ -0,0 +1,47 @@
  +#!/bin/sh
  +##
  +##  devtool -- Development Tool
  +##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  +##
  +
  +if [ $# -eq 0 ]; then
  +    echo "devtool:USAGE: devtool <command> [<arg> ...]" 1>&2
  +    exit 1
  +fi
  +
  +cmd="$1"
  +shift
  +
  +devtoolfunc="./devtool.func"
  +
  +if [ ! -f devtool.conf ]; then
  +    echo "devtool:ERROR: no devtool.conf in current directory" 1>&2
  +    exit 1
  +fi
  +
  +cmdline=`grep "^%$cmd" devtool.conf`
  +if [ ".$cmdline" = . ]; then
  +    echo "devtool:ERROR: command $cmd not found in devtool.conf" 1>&2
  +    exit 1
  +fi
  +
  +if [ ".$TMPDIR" != . ]; then
  +    tmpdir="$TMPDIR"
  +elif [ ".$TEMPDIR" != . ]; then
  +    tmpdir="$TEMPDIR"
  +else
  +    tmpdir="/tmp"
  +fi
  +tmpfile="$tmpdir/rc.$$.tmp"
  +
  +rm -f $tmpfile
  +touch $tmpfile
  +echo ". $devtoolfunc" >>$tmpfile
  +( sed <devtool.conf -e "1,/^%common/d" -e '/^%.*/,$d'
  +  sed <devtool.conf -e "1,/^%$cmd/d" -e '/^%.*/,$d' ) |\
  +sed -e 's;\([ 	]\)@\([a-zA-Z_][a-zA-Z0-9_]*\);\1devtool_\2;' >>$tmpfile
  +
  +sh $tmpfile "$@"
  +
  +rm -f $tmpfile >/dev/null 2>&1 || true
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/res/devtool.conf
  ============================================================================
  $ cvs diff -u -r0 -r1.1 devtool.conf
  --- /dev/null	2003-02-16 17:16:07.000000000 +0100
  +++ devtool.conf	2003-02-16 17:16:09.000000000 +0100
  @@ -0,0 +1,51 @@
  +##
  +##  devtool.conf -- Development Tool Configuration
  +##
  +
  +%autogen
  +    @autogen shtool   1.6.2 "1.6.*" all
  +    @autogen libtool  1.4.3 "1.4*"
  +    @autogen autoconf 2.57  "2.5[3-9]*"
  +
  +%autoclean
  +    @autoclean shtool
  +    @autoclean libtool
  +    @autoclean autoconf
  +
  +%configure
  +    ./configure \
  +        --prefix=/tmp/res \
  +        --disable-shared \
  +        --enable-debug \
  +        "$@"
  +
  +%version
  +    ./shtool version -l txt -n "OSSP res" -e VERSION
  +    V=`./shtool version -l txt -d long VERSION`
  +    sed -e "s/Version .*/Version $V/g" <README >README.n
  +    mv README.n README
  +
  +%dist
  +    echo "+++ generating"
  +    ./devtool autoclean
  +    ./devtool autogen
  +    echo "+++ configuring"
  +    ./configure
  +    echo "+++ building"
  +    make clean all man
  +    echo "+++ cleaning"
  +    make distclean
  +    echo "+++ fixing"
  +    ./shtool fixperm -v .
  +    echo "+++ rolling"
  +    V=`./shtool version -l txt -d short VERSION`
  +    ./shtool tarball -o res-${V}.tar.gz -d res-${V} -u ossp -g res \
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*,*.tar.gz,00TODO' -c 'gzip --best' .
  +    ls -l res-${V}.tar.gz
  +    echo "+++ testing"
  +    gunzip <res-${V}.tar.gz | tar tvf -
  +
  +%release
  +    echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/res/"
  +    scp res-*.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/res/
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/res/devtool.func
  ============================================================================
  $ cvs diff -u -r0 -r1.1 devtool.func
  --- /dev/null	2003-02-16 17:16:07.000000000 +0100
  +++ devtool.func	2003-02-16 17:16:09.000000000 +0100
  @@ -0,0 +1,73 @@
  +##
  +##  devtool.func -- Development Tool Functions
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  +##
  +
  +devtool_require () {
  +    t="$1"; o="$2"; p="$3"; e="$4"; a="$5"
  +    v=`($t $o | head -1 | awk "{ print \\\$$p; }") 2>/dev/null`
  +    if [ ".$v" = . ]; then
  +        echo "devtool:ERROR: unable to determine version of $t" 1>&2
  +        exit 1
  +    fi
  +    case "$v" in
  +        $e )
  +            ;;
  +        $a )
  +            echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
  +            ;;
  +        * )
  +            echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
  +            exit 1
  +            ;;
  +    esac
  +    echo "$v"
  +}
  +
  +devtool_autogen () {
  +    tool=$1
  +    shift
  +    case $tool in
  +        autoconf )
  +            autoconf_version=`devtool_require autoconf --version 4 "$1" "$2"`
  +            echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
  +            autoconf
  +            autoheader 2>&1 | grep -v "is unchanged"
  +            rm -rf autom4te.cache >/dev/null 2>&1
  +            ;;
  +        libtool )
  +            libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
  +            echo "generating (GNU Libtool $libtoolize_version): ltmain.sh, libtool.m4, config.guess, config.sub"
  +            libtoolize --force --copy >/dev/null 2>&1
  +            cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
  +                sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` libtool.m4
  +            ;;
  +        shtool )
  +            shtoolize_version=`devtool_require shtoolize -v 3 "$1" "$2"`
  +            echo "generating (GNU Shtool $shtoolize_version): shtool"
  +            shift
  +            shift
  +            shtoolize -q "$@"
  +            ;;
  +    esac
  +}
  +
  +devtool_autoclean () {
  +    tool=$1
  +    shift
  +    case $tool in
  +        autoconf )
  +            echo "removing: configure config.h.in"
  +            rm -f configure config.h.in
  +            ;;
  +        libtool )
  +            echo "removing: ltmain.sh libtool.m4 config.guess config.sub"
  +            rm -f ltmain.sh libtool.m4 config.guess config.sub
  +            ;;
  +        shtool )
  +            echo "removing: shtool"
  +            rm -f shtool
  +            ;;
  +    esac
  +}
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/res/res-config.in
  ============================================================================
  $ cvs diff -u -r0 -r1.1 res-config.in
  --- /dev/null	2003-02-16 17:16:07.000000000 +0100
  +++ res-config.in	2003-02-16 17:16:09.000000000 +0100
  @@ -0,0 +1,147 @@
  +#!/bin/sh
  +##
  +##  OSSP res - Resource Pools
  +##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP res, a resource pool library
  +##  which can be found at http://www.ossp.org/pkg/lib/res/.
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  res-config.in: library build utility
  +##
  +
  +DIFS=' 
  +'
  +
  +#   tool
  +tool_name="res-config"
  +
  +#   library version
  +lib_name="OSSP res"
  +lib_version="@RES_VERSION_STR@"
  +
  +#   build paths
  +prefix="@prefix@"
  +exec_prefix="@exec_prefix@"
  +bindir="@bindir@"
  +libdir="@libdir@"
  +includedir="@includedir@"
  +mandir="@mandir@"
  +datadir="@datadir@"
  +
  +#   build options
  +cflags="@CFLAGS@"
  +ldflags="@LDFLAGS@"
  +libs="@LIBS@"
  +
  +#   option defaults
  +help=no
  +version=no
  +
  +usage="$tool_name"
  +usage="$usage [--help] [--version] [--all]"
  +usage="$usage [--prefix] [--exec-prefix] [--bindir] [--libdir] [--includedir] [--mandir] [--datadir]"
  +usage="$usage [--cflags] [--ldflags] [--libs]"
  +if [ $# -eq 0 ]; then
  +    echo "$tool_name:Error: Invalid option" 1>&2
  +    echo "$tool_name:Usage: $usage" 1>&2
  +    exit 1
  +fi
  +output=''
  +output_extra=''
  +all=no
  +prev=''
  +OIFS="$IFS" IFS="$DIFS"
  +for option
  +do
  +    if [ ".$prev" != . ]; then
  +        eval "$prev=\$option"
  +        prev=''
  +        continue
  +    fi
  +    case "$option" in
  +        -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
  +           *) optarg='' ;;
  +    esac
  +    case "$option" in
  +        --help|-h)
  +            echo "Usage: $usage"
  +            exit 0
  +            ;;
  +        --version|-v)
  +            echo "$lib_name $lib_version"
  +            exit 0
  +            ;;
  +        --all)
  +            all=yes
  +            ;;
  +        --prefix)
  +            output="$output $prefix"
  +            ;;
  +        --exec-prefix)
  +            output="$output $exec_prefix"
  +            ;;
  +        --bindir)
  +            output="$output $bindir"
  +            ;;
  +        --libdir)
  +            output="$output $libdir"
  +            ;;
  +        --includedir)
  +            output="$output $includedir"
  +            ;;
  +        --mandir)
  +            output="$output $mandir"
  +            ;;
  +        --datadir)
  +            output="$output $datadir"
  +            ;;
  +        --cflags)
  +            output="$output -I$includedir"
  +            output_extra="$output_extra $cflags"
  +            ;;
  +        --ldflags)
  +            output="$output -L$libdir"
  +            output_extra="$output_extra $ldflags"
  +            ;;
  +        --libs)
  +            output="$output -lres"
  +            output_extra="$output_extra $libs"
  +            ;;
  +        * )
  +            echo "$tool_name:Error: Invalid option" 1>&2
  +            echo "$tool_name:Usage: $usage" 1>&2
  +            exit 1;
  +            ;;
  +    esac
  +done
  +IFS="$OIFS"
  +if [ ".$prev" != . ]; then
  +    echo "$tool_name:Error: missing argument to --`echo $prev | sed 's/_/-/g'`" 1>&2
  +    exit 1
  +fi
  +if [ ".$output" != . ]; then
  +    if [ ".$all" = .yes ]; then
  +        output="$output $output_extra"
  +    fi
  +    echo $output
  +fi
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/res/res.c
  ============================================================================
  $ cvs diff -u -r0 -r1.1 res.c
  --- /dev/null	2003-02-16 17:16:07.000000000 +0100
  +++ res.c	2003-02-16 17:16:09.000000000 +0100
  @@ -0,0 +1,34 @@
  +/*
  +**  OSSP res - Resource Pools
  +**  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  +**
  +**  This file is part of OSSP res, a resource pool library
  +**  which can be found at http://www.ossp.org/pkg/lib/res/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  res.c: resource pools
  +*/
  +
  +#include <stdio.h>
  +#include <stdlib.h>
  +
  +#include "res.h"
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/res/res.h
  ============================================================================
  $ cvs diff -u -r0 -r1.1 res.h
  --- /dev/null	2003-02-16 17:16:07.000000000 +0100
  +++ res.h	2003-02-16 17:16:09.000000000 +0100
  @@ -0,0 +1,43 @@
  +/*
  +**  OSSP res - Resource Pools
  +**  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  +**
  +**  This file is part of OSSP res, a resource pool library
  +**  which can be found at http://www.ossp.org/pkg/lib/res/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  res.h: resource pools
  +*/
  +
  +#ifndef __RES_H__
  +#define __RES_H__
  +
  +struct res_st;
  +typedef struct res_st res_t;
  +
  +res_rc_t res_create   (res_t **res, res_t *parent);
  +res_rc_t res_register (res_t  *res, res_item_t item, ...);
  +res_rc_t res_insert   (res_t  *res, res_item_t item, ...);
  +res_rc_t res_remove   (res_t  *res, res_item_t item, ...);
  +res_rc_t res_destroy  (res_t  *res);
  +
  +#endif /* __RES_H__ */
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/res/res.pod
  ============================================================================
  $ cvs diff -u -r0 -r1.1 res.pod
  --- /dev/null	2003-02-16 17:16:07.000000000 +0100
  +++ res.pod	2003-02-16 17:16:10.000000000 +0100
  @@ -0,0 +1,70 @@
  +##
  +##  OSSP res - Resource Pools
  +##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP res, a resource pool library
  +##  which can be found at http://www.ossp.org/pkg/lib/res/.
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  res.pod: resource pool library manual page
  +##
  +
  +=pod
  +
  +=head1 NAME
  +
  +B<OSSP res> - Resource Pools
  +
  +=head1 VERSION
  +
  +B<OSSP res RES_VERSION_STR>
  +
  +=head1 SYNOPSIS
  +
  +B<res_t> I<variable>;
  +...
  +
  +=head1 DESCRIPTION
  +
  +B<OSSP res> is ...
  +
  +=head2 APPLICATION PROGRAMMER INTERFACE (API)
  +
  +The B<OSSP res> API consists of the following elements:
  +
  +=head1 SEE ALSO
  +
  +malloc(3), open(2).
  +
  +=head1 HISTORY
  +
  +B<OSSP res> was invented in February 2003 by Ralf S. Engelschall
  +E<lt>rse@engelschall.comE<gt> for use inside the B<OSSP> project. It was
  +partly inspired by the memory pools in the Apache webserver.
  +
  +=head1 AUTHORS
  +
  + Ralf S. Engelschall
  + rse@engelschall.com
  + www.engelschall.com
  +
  +=cut
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/res/res_test.c
  ============================================================================
  $ cvs diff -u -r0 -r1.1 res_test.c
  --- /dev/null	2003-02-16 17:16:07.000000000 +0100
  +++ res_test.c	2003-02-16 17:16:10.000000000 +0100
  @@ -0,0 +1,57 @@
  +/*
  +**  OSSP res - Resource Pools
  +**  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  +**
  +**  This file is part of OSSP res, a resource pool library
  +**  which can be found at http://www.ossp.org/pkg/lib/res/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  res_test.c: resource pools test suite
  +*/
  +
  +#include <stdio.h>
  +#include <stdlib.h>
  +#include <time.h>
  +
  +#include "ts.h"
  +#include "res.h"
  +
  +TS_TEST(test_foo)
  +{
  +    ts_test_check(TS_CTX, "foo");
  +
  +#if 0
  +    ts_test_fail(TS_CTX, "v1 = %d (!= 5678)", 1);
  +#endif
  +}
  +
  +int main(int argc, char *argv[])
  +{
  +    ts_suite_t *ts;
  +    int n;
  +
  +    ts = ts_suite_new("OSSP ex (Exception Handling)");
  +    ts_suite_test(ts, test_foo, "foo");
  +    n = ts_suite_run(ts);
  +    ts_suite_free(ts);
  +    return n;
  +}
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/res/ts.c
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ts.c
  --- /dev/null	2003-02-16 17:16:07.000000000 +0100
  +++ ts.c	2003-02-16 17:16:10.000000000 +0100
  @@ -0,0 +1,468 @@
  +/*
  +**  TS - OSSP Test Suite Library
  +**  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2002 Cable & Wireless Germany <http://www.cw.com/de/>
  +**
  +**  This file is part of OSSP TS, a small test suite library which
  +**  can be found at http://www.ossp.org/pkg/ts/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  ts.c: test suite library
  +*/
  +
  +#include <stdio.h>
  +#include <stdlib.h>
  +#include <string.h>
  +#include <stdarg.h>
  +
  +#include "config.h"
  +#if defined(HAVE_DMALLOC_H) && defined(WITH_DMALLOC)
  +#include "dmalloc.h"
  +#endif
  +
  +#include "ts.h"
  +
  +/* embedded ring data structure library */
  +#define RING_ENTRY(elem) \
  +    struct { elem *next; elem *prev; }
  +#define RING_HEAD(elem) \
  +    struct { elem *next; elem *prev; }
  +#define RING_SENTINEL(hp, elem, link) \
  +    (elem *)((char *)(hp) - ((size_t)(&((elem *)0)->link)))
  +#define RING_FIRST(hp) \
  +    (hp)->next
  +#define RING_LAST(hp) \
  +    (hp)->prev
  +#define RING_NEXT(ep, link) \
  +    (ep)->link.next
  +#define RING_PREV(ep, link) \
  +    (ep)->link.prev
  +#define RING_INIT(hp, elem, link) \
  +    do { RING_FIRST((hp)) = RING_SENTINEL((hp), elem, link); \
  +         RING_LAST((hp))  = RING_SENTINEL((hp), elem, link); } while (0)
  +#define RING_EMPTY(hp, elem, link) \
  +    (RING_FIRST((hp)) == RING_SENTINEL((hp), elem, link))
  +#define RING_ELEM_INIT(ep, link) \
  +    do { RING_NEXT((ep), link) = (ep); \
  +         RING_PREV((ep), link) = (ep); } while (0)
  +#define RING_SPLICE_BEFORE(lep, ep1, epN, link) \
  +    do { RING_NEXT((epN), link) = (lep); \
  +         RING_PREV((ep1), link) = RING_PREV((lep), link); \
  +         RING_NEXT(RING_PREV((lep), link), link) = (ep1); \
  +         RING_PREV((lep), link) = (epN); } while (0)
  +#define RING_SPLICE_TAIL(hp, ep1, epN, elem, link) \
  +    RING_SPLICE_BEFORE(RING_SENTINEL((hp), elem, link), (ep1), (epN), link)
  +#define RING_INSERT_TAIL(hp, nep, elem, link) \
  +    RING_SPLICE_TAIL((hp), (nep), (nep), elem, link)
  +#define RING_FOREACH(ep, hp, elem, link) \
  +    for ((ep)  = RING_FIRST((hp)); \
  +         (ep) != RING_SENTINEL((hp), elem, link); \
  +         (ep)  = RING_NEXT((ep), link))
  +
  +/* test suite test log */
  +struct tstl_st;
  +typedef struct tstl_st tstl_t;
  +struct tstl_st {
  +    RING_ENTRY(tstl_t) next;
  +    char              *text;
  +    const char        *file;
  +    int                line;
  +};
  +
  +/* test suite test check */
  +struct tstc_st;
  +typedef struct tstc_st tstc_t;
  +struct tstc_st {
  +    RING_ENTRY(tstc_t) next;
  +    char              *title;
  +    int                failed;
  +    const char        *file;
  +    int                line;
  +    RING_HEAD(tstl_t)  logs;
  +};
  +
  +/* test suite test */
  +struct ts_test_st {
  +    RING_ENTRY(ts_test_t)  next;
  +    char              *title;
  +    ts_test_cb_t         func;
  +    const char        *file;
  +    int                line;
  +    RING_HEAD(tstc_t)  checks;
  +};
  +
  +/* test suite */
  +struct ts_suite_st {
  +    char              *title;
  +    RING_HEAD(ts_test_t)   tests;
  +};
  +
  +/* minimal output-independent vprintf(3) variant which supports %{c,s,d,%} only */
  +static int ts_suite_mvxprintf(char *buffer, size_t bufsize, const char *format, va_list ap)
  +{
  +    /* sufficient integer buffer: <available-bits> x log_10(2) + safety */
  +    char ibuf[((sizeof(int)*8)/3)+10]; 
  +    char *cp;
  +    char c;
  +    int d;
  +    int n;
  +    int bytes;
  +
  +    if (format == NULL || ap == NULL)
  +        return -1;
  +    bytes = 0;
  +    while (*format != '\0') {
  +        if (*format == '%') {
  +            c = *(format+1);
  +            if (c == '%') {
  +                /* expand "%%" */
  +                cp = &c;
  +                n = sizeof(char);
  +            }
  +            else if (c == 'c') {
  +                /* expand "%c" */
  +                c = (char)va_arg(ap, int);
  +                cp = &c;
  +                n = sizeof(char);
  +            }
  +            else if (c == 's') {
  +                /* expand "%s" */
  +                if ((cp = (char *)va_arg(ap, char *)) == NULL)
  +                    cp = "(null)";
  +                n = strlen(cp);
  +            }
  +            else if (c == 'd') {
  +                /* expand "%d" */
  +                d = (int)va_arg(ap, int);
  +#ifdef HAVE_SNPRINTF
  +                snprintf(ibuf, sizeof(ibuf), "%d", d); /* explicitly secure */
  +#else
  +                sprintf(ibuf, "%d", d);                /* implicitly secure */
  +#endif
  +                cp = ibuf;
  +                n = strlen(cp);
  +            }
  +            else {
  +                /* any other "%X" */
  +                cp = (char *)format;
  +                n  = 2;
  +            }
  +            format += 2;
  +        }
  +        else {
  +            /* plain text */
  +            cp = (char *)format;
  +            if ((format = strchr(cp, '%')) == NULL)
  +                format = strchr(cp, '\0');
  +            n = format - cp;
  +        }
  +        /* perform output operation */
  +        if (buffer != NULL) {
  +            if (n > bufsize)
  +                return -1;
  +            memcpy(buffer, cp, n);
  +            buffer  += n;
  +            bufsize -= n;
  +        }
  +        bytes += n;
  +    }
  +    /* nul-terminate output */
  +    if (buffer != NULL) {
  +        if (bufsize == 0)
  +            return -1;
  +        *buffer = '\0';
  +    }
  +    return bytes;
  +}
  +
  +/* minimal vasprintf(3) variant which supports %{c,s,d} only */
  +static char *ts_suite_mvasprintf(const char *format, va_list ap)
  +{
  +    char *buffer;
  +    int n;
  +    va_list ap2;
  +
  +    if (format == NULL || ap == NULL)
  +        return NULL;
  +    ap2 = ap;
  +    if ((n = ts_suite_mvxprintf(NULL, 0, format, ap)) == -1)
  +        return NULL;
  +    if ((buffer = (char *)malloc(n+1)) == NULL)
  +        return NULL;
  +    ts_suite_mvxprintf(buffer, n+1, format, ap2);
  +    return buffer;
  +}
  +
  +/* minimal asprintf(3) variant which supports %{c,s,d} only */
  +static char *ts_suite_masprintf(const char *format, ...)
  +{
  +    va_list ap;
  +    char *cp;
  +
  +    va_start(ap, format);
  +    cp = ts_suite_mvasprintf(format, ap);
  +    va_end(ap);
  +    return cp;
  +}
  +
  +/* create test suite */
  +ts_suite_t *ts_suite_new(const char *fmt, ...)
  +{
  +    ts_suite_t *ts;
  +    va_list ap;
  +
  +    if ((ts = (ts_suite_t *)malloc(sizeof(ts_suite_t))) == NULL)
  +        return NULL;
  +    va_start(ap, fmt);
  +    ts->title = ts_suite_mvasprintf(fmt, ap);
  +    RING_INIT(&ts->tests, ts_test_t, next);
  +    va_end(ap);
  +    return ts;
  +}
  +
  +/* add test case to test suite */
  +void ts_suite_test(ts_suite_t *ts, ts_test_cb_t func, const char *fmt, ...)
  +{
  +    ts_test_t *tst;
  +    va_list ap;
  +
  +    if (ts == NULL || func == NULL || fmt == NULL)
  +        return;
  +    if ((tst = (ts_test_t *)malloc(sizeof(ts_test_t))) == NULL)
  +        return;
  +    RING_ELEM_INIT(tst, next);
  +    va_start(ap, fmt);
  +    tst->title = ts_suite_mvasprintf(fmt, ap);
  +    va_end(ap);
  +    tst->func = func;
  +    tst->file = NULL;
  +    tst->line = 0;
  +    RING_INIT(&tst->checks, tstc_t, next);
  +    RING_INSERT_TAIL(&ts->tests, tst, ts_test_t, next);
  +    return;
  +}
  +
  +/* run test suite */
  +int ts_suite_run(ts_suite_t *ts)
  +{
  +    ts_test_t *tst;
  +    tstc_t *tstc;
  +    tstl_t *tstl;
  +    int total_tests, total_tests_suite_failed;
  +    int total_checks, total_checks_failed;
  +    int test_checks, test_checks_failed;
  +    const char *file;
  +    int line;
  +    char *cp;
  +
  +    if (ts == NULL)
  +        return 0;
  +
  +    /* init total counters */
  +    total_tests         = 0;
  +    total_tests_suite_failed  = 0;
  +    total_checks        = 0;
  +    total_checks_failed = 0;
  +
  +    fprintf(stdout, "\n");
  +    fprintf(stdout, " Test Suite: %s\n", ts->title);
  +    fprintf(stdout, " __________________________________________________________________\n");
  +    fprintf(stdout, "\n");
  +    fflush(stdout);
  +
  +    /* iterate through all test cases */
  +    RING_FOREACH(tst, &ts->tests, ts_test_t, next) {
  +        cp = ts_suite_masprintf(" Test: %s ........................................"
  +                                "........................................", tst->title);
  +        cp[60] = '\0';
  +        fprintf(stdout, "%s", cp);
  +        free(cp);
  +        fflush(stdout);
  +
  +        /* init test case counters */
  +        test_checks        = 0;
  +        test_checks_failed = 0;
  +
  +        /* run the test case function */
  +        tst->func(tst);
  +
  +        /* iterate through all performed checks to determine status */
  +        RING_FOREACH(tstc, &tst->checks, tstc_t, next) {
  +            test_checks++;
  +            if (tstc->failed)
  +                test_checks_failed++;
  +        }
  +
  +        if (test_checks_failed > 0) {
  +            /* some checks failed, so do detailed reporting of test case */
  +            fprintf(stdout, " FAILED\n");
  +            fprintf(stdout, "       Ops, %d/%d checks failed! Detailed report follows:\n",
  +                    test_checks_failed, test_checks);
  +            RING_FOREACH(tstc, &tst->checks, tstc_t, next) {
  +                file = (tstc->file != NULL ? tstc->file : tst->file);
  +                line = (tstc->line != 0    ? tstc->line : tst->line);
  +                if (file != NULL)
  +                    fprintf(stdout, "       Check: %s [%s:%d]\n", tstc->title, file, line);
  +                else
  +                    fprintf(stdout, "       Check: %s\n", tstc->title);
  +                RING_FOREACH(tstl, &tstc->logs, tstl_t, next) {
  +                    file = (tstl->file != NULL ? tstl->file : file);
  +                    line = (tstl->line != 0    ? tstl->line : line);
  +                    if (file != NULL)
  +                        fprintf(stdout, "              Log: %s [%s:%d]\n", tstl->text, file, line);
  +                    else
  +                        fprintf(stdout, "              Log: %s\n", tstl->text);
  +                }
  +            }
  +        }
  +        else {
  +            /* test case ran successfully */
  +            fprintf(stdout, ".... OK\n");
  +        }
  +        fflush(stdout);
  +
  +        /* accumulate counters */
  +        total_checks += test_checks;
  +        total_tests++;
  +        if (test_checks_failed > 0) {
  +            total_checks_failed += test_checks_failed;
  +            total_tests_suite_failed++;
  +        }
  +    }
  +
  +    /* print test suite summary */
  +    fprintf(stdout, " __________________________________________________________________\n");
  +    fprintf(stdout, "\n");
  +    fprintf(stdout, " Test Summary: %d tests (%d ok, %d failed), %d checks (%d ok, %d failed)\n", 
  +            total_tests, (total_tests - total_tests_suite_failed), total_tests_suite_failed, 
  +            total_checks, (total_checks - total_checks_failed), total_checks_failed); 
  +    if (total_tests_suite_failed > 0)
  +        fprintf(stdout, " Test Suite: FAILED\n");
  +    else
  +        fprintf(stdout, " Test Suite: OK\n");
  +    fprintf(stdout, "\n");
  +    fflush(stdout);
  +
  +    return total_checks_failed;
  +}
  +
  +/* destroy test suite */
  +void ts_suite_free(ts_suite_t *ts)
  +{
  +    ts_test_t *tst;
  +    tstc_t *tstc;
  +    tstl_t *tstl;
  +
  +    if (ts == NULL)
  +        return;
  +    RING_FOREACH(tst, &ts->tests, ts_test_t, next) {
  +        RING_FOREACH(tstc, &tst->checks, tstc_t, next) {
  +            RING_FOREACH(tstl, &tstc->logs, tstl_t, next) {
  +                free(tstl->text);
  +            }
  +            free(tstc->title);
  +            free(tstc);
  +        }
  +        free(tst->title);
  +        free(tst);
  +    }
  +    free(ts->title);
  +    free(ts);
  +    return;
  +}
  +
  +/* annotate test case with file name and line number */
  +ts_test_t *ts_test_ctx(ts_test_t *tst, const char *file, int line)
  +{
  +    if (tst != NULL && file != NULL) {
  +        tst->file = file;
  +        tst->line = line;
  +    }
  +    return tst;
  +}
  +
  +/* annotate test case with check */
  +void ts_test_check(ts_test_t *tst, const char *fmt, ...)
  +{
  +    tstc_t *tstc;
  +    va_list ap;
  +
  +    if (tst == NULL || fmt == NULL)
  +        return;
  +    if ((tstc = (tstc_t *)malloc(sizeof(tstc_t))) == NULL)
  +        return;
  +    va_start(ap, fmt);
  +    RING_ELEM_INIT(tstc, next);
  +    tstc->title = ts_suite_mvasprintf(fmt, ap);
  +    tstc->failed = 0;
  +    tstc->file = tst->file;
  +    tstc->line = tst->line;
  +    RING_INIT(&tstc->logs, tstl_t, next);
  +    RING_INSERT_TAIL(&tst->checks, tstc, tstc_t, next);
  +    va_end(ap);
  +    return;
  +}
  +
  +/* annotate test case with log message and failure */
  +void ts_test_fail(ts_test_t *tst, const char *fmt, ...)
  +{
  +    tstc_t *tstc;
  +    tstl_t *tstl;
  +    va_list ap;
  +
  +    if (tst == NULL || fmt == NULL)
  +        return;
  +    if ((tstl = (tstl_t *)malloc(sizeof(tstl_t))) == NULL)
  +        return;
  +    va_start(ap, fmt);
  +    tstl->text = ts_suite_mvasprintf(fmt, ap);
  +    tstl->file = tst->file;
  +    tstl->line = tst->line;
  +    RING_ELEM_INIT(tstl, next);
  +    tstc = RING_LAST(&tst->checks);
  +    RING_INSERT_TAIL(&tstc->logs, tstl, tstl_t, next);
  +    tstc->failed = 1;
  +    va_end(ap);
  +    return;
  +}
  +
  +/* annotate test case with log message only */
  +void ts_test_log(ts_test_t *tst, const char *fmt, ...)
  +{
  +    tstc_t *tstc;
  +    tstl_t *tstl;
  +    va_list ap;
  +
  +    if (tst == NULL || fmt == NULL)
  +        return;
  +    if ((tstl = (tstl_t *)malloc(sizeof(tstl_t))) == NULL)
  +        return;
  +    va_start(ap, fmt);
  +    tstl->text = ts_suite_mvasprintf(fmt, ap);
  +    tstl->file = tst->file;
  +    tstl->line = tst->line;
  +    RING_ELEM_INIT(tstl, next);
  +    tstc = RING_LAST(&tst->checks);
  +    RING_INSERT_TAIL(&tstc->logs, tstl, tstl_t, next);
  +    va_end(ap);
  +    return;
  +}
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/res/ts.h
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ts.h
  --- /dev/null	2003-02-16 17:16:07.000000000 +0100
  +++ ts.h	2003-02-16 17:16:10.000000000 +0100
  @@ -0,0 +1,64 @@
  +/*
  +**  TS - OSSP Test Suite Library
  +**  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2002 Cable & Wireless Germany <http://www.cw.com/de/>
  +**
  +**  This file is part of OSSP TS, a small test suite library which
  +**  can be found at http://www.ossp.org/pkg/ts/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  ts.h: test suite library API
  +*/
  +
  +#ifndef _TS_H_
  +#define _TS_H_
  +
  +/* test suite object type */
  +struct ts_suite_st;
  +typedef struct ts_suite_st ts_suite_t;
  +
  +/* test object type */
  +struct ts_test_st;
  +typedef struct ts_test_st ts_test_t;
  +
  +/* test callback function type */
  +typedef void (*ts_test_cb_t)(ts_test_t *);
  +
  +/* test suite operations */
  +ts_suite_t *ts_suite_new  (const char *fmt, ...);
  +void        ts_suite_test (ts_suite_t *s, ts_test_cb_t func, const char *fmt, ...);
  +int         ts_suite_run  (ts_suite_t *s);
  +void        ts_suite_free (ts_suite_t *s);
  +
  +/* test operations */
  +ts_test_t  *ts_test_ctx   (ts_test_t *t, const char *file, int line);
  +void        ts_test_check (ts_test_t *t, const char *fmt, ...);
  +void        ts_test_fail  (ts_test_t *t, const char *fmt, ...);
  +void        ts_test_log   (ts_test_t *t, const char *fmt, ...);
  +
  +/* test suite short-cut macros */
  +#define TS_TEST(name) \
  +    static void name(ts_test_t *_t)
  +#define TS_CTX \
  +    ts_test_ctx(_t, __FILE__, __LINE__)
  +
  +#endif /* _TS_H_ */
  +
  @@ .

From ossp-cvs-owner@ossp.org  Sun Feb 16 17:19:41 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BB58B7674C; Sun, 16 Feb 2003 17:19:41 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/res/ .cvsignore README VERSION configure.ac
Message-Id: <20030216161941.BB58B7674C@mail.ossp.org>
Date: Sun, 16 Feb 2003 17:19:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Feb-2003 17:19:41
  Branch: HEAD                             Handle: 2003021616194000

  Added files:
    ossp-pkg/res            .cvsignore
  Modified files:
    ossp-pkg/res            README VERSION configure.ac

  Log:
    fix version stuff and ignore generated files

  Summary:
    Revision    Changes     Path
    1.1         +10 -0      ossp-pkg/res/.cvsignore
    1.2         +1  -1      ossp-pkg/res/README
    1.2         +2  -2      ossp-pkg/res/VERSION
    1.2         +1  -1      ossp-pkg/res/configure.ac
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/res/.cvsignore
  ============================================================================
  $ cvs diff -u -r0 -r1.1 .cvsignore
  --- /dev/null	2003-02-16 17:19:41.000000000 +0100
  +++ .cvsignore	2003-02-16 17:19:41.000000000 +0100
  @@ -0,0 +1,10 @@
  +Makefile
  +config.guess
  +config.h
  +config.h.in
  +config.sub
  +configure
  +libtool.m4
  +ltmain.sh
  +res-config
  +shtool
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/res/README
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 README
  --- ossp-pkg/res/README	16 Feb 2003 16:16:06 -0000	1.1
  +++ ossp-pkg/res/README	16 Feb 2003 16:19:40 -0000	1.2
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_|  \___||___/
   
     OSSP res - Resource Pools
  -  Version 0.1.0 (30-Jan-2003)
  +  Version 0.1.0 (16-Feb-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/res/VERSION
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 VERSION
  --- ossp-pkg/res/VERSION	16 Feb 2003 16:16:06 -0000	1.1
  +++ ossp-pkg/res/VERSION	16 Feb 2003 16:19:40 -0000	1.2
  @@ -1,6 +1,6 @@
   
  -  VERSION -- Version Information for OSSP ex (syntax: Text)
  +  VERSION -- Version Information for OSSP res (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP ex, Version 1.0.2 (30-Jan-2003)
  +  This is OSSP res, Version 0.1.0 (16-Feb-2003)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/res/configure.ac
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 configure.ac
  --- ossp-pkg/res/configure.ac	16 Feb 2003 16:16:06 -0000	1.1
  +++ ossp-pkg/res/configure.ac	16 Feb 2003 16:19:40 -0000	1.2
  @@ -30,7 +30,7 @@
   AC_PREREQ(2.57)
   AC_INIT
   RES_VERSION_STR=`./shtool version -l txt -d long VERSION`
  -./shtool echo -e "Configuring %BOSSP res%b (Resource Pools), version %B${EX_VERSION_STR}%b"
  +./shtool echo -e "Configuring %BOSSP res%b (Resource Pools), version %B${RES_VERSION_STR}%b"
   AC_SUBST(RES_VERSION_STR)
   AC_CONFIG_SRCDIR(res.h)
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 17 11:49:05 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 85041769BC; Mon, 17 Feb 2003 11:49:04 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ANNOUNCE ChangeLog NEWS README pth_vers.c
Message-Id: <20030217104904.85041769BC@mail.ossp.org>
Date: Mon, 17 Feb 2003 11:49:04 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-Feb-2003 11:49:04
  Branch: HEAD                             Handle: 2003021710490201

  Modified files:
    ossp-pkg/pth            ANNOUNCE ChangeLog NEWS README pth_vers.c

  Log:
    final polishing before release

  Summary:
    Revision    Changes     Path
    1.15        +50 -24     ossp-pkg/pth/ANNOUNCE
    1.605       +7  -1      ossp-pkg/pth/ChangeLog
    1.39        +1  -1      ossp-pkg/pth/NEWS
    1.202       +1  -1      ossp-pkg/pth/README
    1.147       +5  -5      ossp-pkg/pth/pth_vers.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ANNOUNCE
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 ANNOUNCE
  --- ossp-pkg/pth/ANNOUNCE	15 Oct 2002 20:34:22 -0000	1.14
  +++ ossp-pkg/pth/ANNOUNCE	17 Feb 2003 10:49:02 -0000	1.15
  @@ -5,11 +5,11 @@
     |_|    \__|_| |_|                     the impossible.''
   
     GNU Pth - The GNU Portable Threads
  -  Version 1.4
  +  Version 2.0
   
     Pth is a very portable POSIX/ANSI-C based library for Unix platforms
     which provides non-preemptive priority-based scheduling for multiple
  -  threads of execution (aka "multithreading") inside event-driven
  +  threads of execution (aka "multi-threading") inside event-driven
     applications. All threads run in the same address space of the server
     application, but each thread has its own individual program-counter,
     run-time stack, signal mask and errno variable.
  @@ -26,30 +26,56 @@
   
     Pth also provides an optional emulation API for POSIX.1c threads
     ("Pthreads") which can be used for backward compatibility to existing
  -  multithreaded applications.
  +  multi-threaded applications.
   
  -  Pth 1.4 has an even more extensive support for auto-configuring
  -  the package to work on the different Unix platforms without the
  -  requirement for the end user to manually adjust the package.
  -  Additionally the underlying thread creation and dispatching mechanism
  -  was greatly enhanced and cleaned up, too. With this, version 1.4 now
  -  was successfully built and tested on numerous Unix platforms, ranging
  -  from the major ones like GNU/Linux, FreeBSD, NetBSD, OpenBSD, BSDI,
  -  Solaris, HPUX, Tru64, AIX, IRIX, UnixWare and SCO, to more esoteric
  -  flavors like SINIX, ReliantUNIX, ISC, SCO, NCR, AmigaOS, Rhapsody
  -  (MacOS X), FTX, AUX and Win32/Cygwin.
  -
  -  Additionally the auto-configuration mechanism allows GNU Pth to
  -  automatically adjusts itself to run also on mostly all remaining Unix
  -  platforms, including ancient versions for which a multi-threading
  -  environment never existed before. This is especially achieved in Pth
  -  by not using any assembly code or platform specific solutions and by
  -  using a very tricky but portable thread creation fallback approach
  -  which will be published in great detail on the USENIX 2000 Annual
  -  Conference this summer.
  +  NEW IN PTH 2.0
  +
  +  Pth 2.0 provides more strict POSIX.1-2001/SUSv3 compliant wrapper
  +  functions in its high-level I/O API. Most notable, the implementations
  +  of pth_poll(3) and pth_select(3) were completely worked off in order
  +  to achieve POSIX semantics. A Pth variant of the new POSIX pselect(2)
  +  function was introduced, too.
  +
  +  Pth now has support for arbitrary (usually higher than the default)
  +  FD_SETSIZE values to support larger-scale server applications.
  +
  +  A new environment attribute PTH_ATTR_DISPATCHES allows the application
  +  to query the total number of machine context dispatches Pth performed
  +  since the last attribute reset.
  +
  +  Pth's internal machine context implementation is now exported in a
  +  sub-API pth_uctx in order to allow applications to use raw user-space
  +  context switching. This can be used to implement co-routines,
  +  exception handling or even an alternative multi-threading environment
  +  with the help of Pth.
  +
  +  The "hard syscall mapping" functionality was completely rewritten
  +  from scratch. Previously, the internal system call exit points were
  +  based on syscall(2) only. This was problematic because it by-passed
  +  the C library glue code which often performs necessary glue code in
  +  order to call the code in the kernel correctly. Now the internal exit
  +  points are based on a by-system-call dynamically selected combination
  +  of RTLD_NEXT+dlsym(2), dlopen(2)+dlsym(2) and the known syscall(2) (in
  +  this fallback order). This way the "hard syscall mapping" became a lot
  +  more portable and flexible.
  +
  +  Optional support for OSSP ex based exception handling was added which
  +  allows ISO C applications to use fully multi-threading aware ISO C++
  +  style exception handling.
  +
  +  Finally, the Pth build environment was upgraded to be now based on GNU
  +  autoconf 2.57, GNU shtool 1.6.2 and GNU libtool 1.4.3.
  +
  +  MORE INFORMATION
  +
  +  More details about Pth can be found at the following locations from
  +  the GNU and OSSP projects:
  +
  +  o GNU:  http://www.gnu.org/software/pth/
  +  o GNU:   ftp://ftp.gnu.org/gnu/pth/
  +  o OSSP: http://www.ossp.org/pkg/lib/pth/
  +  o OSSP:  ftp://ftp.ossp.org/pkg/lib/pth/
   
  -  http://www.gnu.org/software/pth/
  -  ftp://ftp.gnu.org/gnu/pth/
                                          Ralf S. Engelschall
                                          rse@engelschall.com
                                          www.engelschall.com
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.604 -r1.605 ChangeLog
  --- ossp-pkg/pth/ChangeLog	1 Jan 2003 15:49:11 -0000	1.604
  +++ ossp-pkg/pth/ChangeLog	17 Feb 2003 10:49:02 -0000	1.605
  @@ -19,7 +19,13 @@
        / __/ | |_| |
     __|_____(_)___/_________________________________________________________
                     
  -  Changes between 2.0b2 and 2.0b3 (04-Dec-2002 to xx-Jan-2003)
  +  Changes between 2.0b2 and 2.0.0 (04-Dec-2002 to 17-Feb-2003)
  +
  +   *) Final source tree polishing before release.
  +      [Ralf S. Engelschall]
  +
  +   *) Wrote summary for Pth 2.0 for the ANNOUNCE document.
  +      [Ralf S. Engelschall]
   
      *) Adjusted all copyright messages for new year 2003.
         [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/NEWS
  ============================================================================
  $ cvs diff -u -r1.38 -r1.39 NEWS
  --- ossp-pkg/pth/NEWS	11 Feb 2003 13:19:07 -0000	1.38
  +++ ossp-pkg/pth/NEWS	17 Feb 2003 10:49:03 -0000	1.39
  @@ -12,7 +12,7 @@
     This is a list of user-visible and/or major changes to GNU Pth.
     For more details please have a look at the ChangeLog file.
   
  -  Changes between 1.4 and 2.0 (24-Mar-2001 to 11-Feb-2003)
  +  Changes between 1.4 and 2.0 (24-Mar-2001 to 17-Feb-2003)
   
      *) Make pth_poll(3) more compliant to POSIX.1-2001/SUSv3 poll(2).
      *) Make pth_select(3) more compliant to POSIX.1-2001/SUSv3 select(2).
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/README
  ============================================================================
  $ cvs diff -u -r1.201 -r1.202 README
  --- ossp-pkg/pth/README	11 Feb 2003 13:19:27 -0000	1.201
  +++ ossp-pkg/pth/README	17 Feb 2003 10:49:03 -0000	1.202
  @@ -5,7 +5,7 @@
     |_|    \__|_| |_|                     the impossible.''
   
     GNU Pth - The GNU Portable Threads
  -  Version 2.0.0 (11-Feb-2003)
  +  Version 2.0.0 (17-Feb-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_vers.c
  ============================================================================
  $ cvs diff -u -r1.146 -r1.147 pth_vers.c
  --- ossp-pkg/pth/pth_vers.c	11 Feb 2003 13:19:27 -0000	1.146
  +++ ossp-pkg/pth/pth_vers.c	17 Feb 2003 10:49:03 -0000	1.147
  @@ -34,12 +34,12 @@
   pth_internal_version_t pth_internal_version = {
       0x200200,
       "2.0.0",
  -    "2.0.0 (11-Feb-2003)",
  -    "This is GNU Pth, Version 2.0.0 (11-Feb-2003)",
  -    "GNU Pth 2.0.0 (11-Feb-2003)",
  +    "2.0.0 (17-Feb-2003)",
  +    "This is GNU Pth, Version 2.0.0 (17-Feb-2003)",
  +    "GNU Pth 2.0.0 (17-Feb-2003)",
       "GNU Pth/2.0.0",
  -    "@(#)GNU Pth 2.0.0 (11-Feb-2003)",
  -    "$Id: GNU Pth 2.0.0 (11-Feb-2003) $"
  +    "@(#)GNU Pth 2.0.0 (17-Feb-2003)",
  +    "$Id: GNU Pth 2.0.0 (17-Feb-2003) $"
   };
   
   #endif /* _PTH_VERS_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 17 11:59:29 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2DBF3769BE; Mon, 17 Feb 2003 11:59:29 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20030217105929.2DBF3769BE@mail.ossp.org>
Date: Mon, 17 Feb 2003 11:59:29 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   17-Feb-2003 11:59:29
  Branch: HEAD                             Handle: 2003021710592602

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/pth    index.wml

  Log:
    release GNU pth 2.0.0

  Summary:
    Revision    Changes     Path
    1.55        +1  -0      ossp-web/new/news.txt
    1.51        +1  -1      ossp-web/pkg/lib/index.wml
    1.11        +3  -3      ossp-web/pkg/lib/pth/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.54 -r1.55 news.txt
  --- ossp-web/new/news.txt	14 Feb 2003 21:23:08 -0000	1.54
  +++ ossp-web/new/news.txt	17 Feb 2003 10:59:26 -0000	1.55
  @@ -1,3 +1,4 @@
  +17-Feb-2003: Released L<GNU pth> 2.0.0
   14-Feb-2003: Released L<OSSP var> 1.0.0
   13-Feb-2003: Released T<OSSP lmtp2nntp> 1.2.0
   13-Feb-2003: Released L<OSSP fsl> 1.0.8
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.50 -r1.51 index.wml
  --- ossp-web/pkg/lib/index.wml	14 Feb 2003 21:23:09 -0000	1.50
  +++ ossp-web/pkg/lib/index.wml	17 Feb 2003 10:59:27 -0000	1.51
  @@ -15,7 +15,7 @@
   <pkg_list>
     <pkg_item name="pth" longname="GNU pth" type="lib"
               desc="Portable Threads"
  -			done=100 stable=1.4.1 unstable=2.0b2>
  +			done=100 stable=2.0.0 unstable=none>
     <pkg_item name="mm" longname="OSSP mm" type="lib"
               desc="Shared Memory Allocation"
   			done=100 stable=1.2.2 unstable=none>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/pth/index.wml
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 index.wml
  --- ossp-web/pkg/lib/pth/index.wml	4 Dec 2002 14:25:43 -0000	1.10
  +++ ossp-web/pkg/lib/pth/index.wml	17 Feb 2003 10:59:28 -0000	1.11
  @@ -61,8 +61,8 @@
   
   <pkg_status
       name="pth" assign="rse"
  -    stable="1.4.1" stable_date="27-Jan-2002"
  -    unstable="2.0b2" unstable_date="04-Dec-2002"
  +    stable="2.0.0" stable_date="17-Feb-2002"
  +    unstable="none" unstable_date="none"
   	done=100>
   
   <h2>Source</h2>
  @@ -72,7 +72,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/pth/
       directory=$(FTP_ROOT_DIR)/pkg/lib/pth/
       files="pth-*.tar.gz" 
  -	stable="pth-1\.4\.1\.tar\.gz" unstable="pth-2\.0b2\.tar\.gz">
  +	stable="pth-2\\\\\\\.0\\\\\\\.0\\\\\\\.tar\.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 17 13:22:46 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 23990769BC; Mon, 17 Feb 2003 13:22:45 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/xds/ ChangeLog INSTALL LICENSE NEWS README devtoo...
Message-Id: <20030217122245.23990769BC@mail.ossp.org>
Date: Mon, 17 Feb 2003 13:22:45 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-Feb-2003 13:22:44
  Branch: HEAD                             Handle: 2003021712224300

  Modified files:
    ossp-pkg/xds            ChangeLog INSTALL LICENSE NEWS README devtool.conf
                            xds_version.c

  Log:
    polish source tree

  Summary:
    Revision    Changes     Path
    1.2         +25 -0      ossp-pkg/xds/ChangeLog
    1.2         +18 -0      ossp-pkg/xds/INSTALL
    1.5         +6  -2      ossp-pkg/xds/LICENSE
    1.2         +15 -0      ossp-pkg/xds/NEWS
    1.7         +9  -8      ossp-pkg/xds/README
    1.4         +3  -3      ossp-pkg/xds/devtool.conf
    1.3         +5  -5      ossp-pkg/xds/xds_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ChangeLog
  --- ossp-pkg/xds/ChangeLog	9 Aug 2001 21:28:03 -0000	1.1
  +++ ossp-pkg/xds/ChangeLog	17 Feb 2003 12:22:43 -0000	1.2
  @@ -0,0 +1,25 @@
  +   _        ___  ____ ____  ____            _
  +  |_|_ _   / _ \/ ___/ ___||  _ \  __  ____| |___
  +  _|_||_| | | | \___ \___ \| |_) | \ \/ / _` / __|
  + |_||_|_| | |_| |___) |__) |  __/   >  < (_| \__ \
  +  |_|_|_|  \___/|____/____/|_|     /_/\_\__,_|___/
  +
  +  OSSP xds - eXtensible Data Serialization
  +
  +  ChangeLog
  +
  +  This is a list of all source changes to OSSP xds.
  +  For less details please have a look at the NEWS file.
  +
  +  Changes between GENSIS and 0.9.0 (xx-Mar-2001 to 17-Feb-2003)
  +
  +   o Upgraded devtool stuff.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +   o Bumped year in copyright messages for new year 2003.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +   o upgraded build environment to GNU autoconf 2.57, 
  +     GNU libtool 1.4.3 and GNU shtool 1.6.2
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/INSTALL
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 INSTALL
  --- ossp-pkg/xds/INSTALL	9 Aug 2001 21:28:03 -0000	1.1
  +++ ossp-pkg/xds/INSTALL	17 Feb 2003 12:22:43 -0000	1.2
  @@ -0,0 +1,18 @@
  +   _        ___  ____ ____  ____            _
  +  |_|_ _   / _ \/ ___/ ___||  _ \  __  ____| |___
  +  _|_||_| | | | \___ \___ \| |_) | \ \/ / _` / __|
  + |_||_|_| | |_| |___) |__) |  __/   >  < (_| \__ \
  +  |_|_|_|  \___/|____/____/|_|     /_/\_\__,_|___/
  +
  +  OSSP xds - eXtensible Data Serialization
  +
  +  INSTALLATION
  +
  +  To install OSSP xds into /path/to/xds/ perform
  +  the following steps in your shell:
  +
  +    $ ./configure --prefix=/path/to/xds
  +    $ make
  +    $ make check
  +    $ make install [DESTDIR=/path/to/temp/root]
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/LICENSE
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 LICENSE
  --- ossp-pkg/xds/LICENSE	17 Mar 2002 10:25:52 -0000	1.4
  +++ ossp-pkg/xds/LICENSE	17 Feb 2003 12:22:43 -0000	1.5
  @@ -1,6 +1,9 @@
  +
   OSSP xds - Extensible Data Serialization
  -Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +
  +Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +Copyright (c) 2001-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   
   This file is part of OSSP xds, an extensible data serialization
   library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ -22,3 +25,4 @@
   OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   SUCH DAMAGE.
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/NEWS
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 NEWS
  --- ossp-pkg/xds/NEWS	9 Aug 2001 21:28:03 -0000	1.1
  +++ ossp-pkg/xds/NEWS	17 Feb 2003 12:22:43 -0000	1.2
  @@ -0,0 +1,15 @@
  +   _        ___  ____ ____  ____            _
  +  |_|_ _   / _ \/ ___/ ___||  _ \  __  ____| |___
  +  _|_||_| | | | \___ \___ \| |_) | \ \/ / _` / __|
  + |_||_|_| | |_| |___) |__) |  __/   >  < (_| \__ \
  +  |_|_|_|  \___/|____/____/|_|     /_/\_\__,_|___/
  +
  +  OSSP xds - eXtensible Data Serialization
  +
  +  NEWS
  +
  +  This is a list of major changes to OSSP xds. For more detailed
  +  change descriptions, please have a look at the ChangeLog file.
  +
  +  -NONE-
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/README
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 README
  --- ossp-pkg/xds/README	17 Mar 2002 10:25:52 -0000	1.6
  +++ ossp-pkg/xds/README	17 Feb 2003 12:22:43 -0000	1.7
  @@ -1,9 +1,9 @@
  -           _     
  -  __  ____| |___ 
  -  \ \/ / _` / __|
  -   >  < (_| \__ \
  -  /_/\_\__,_|___/
  -                         
  +   _        ___  ____ ____  ____            _
  +  |_|_ _   / _ \/ ___/ ___||  _ \  __  ____| |___
  +  _|_||_| | | | \___ \___ \| |_) | \ \/ / _` / __|
  + |_||_|_| | |_| |___) |__) |  __/   >  < (_| \__ \
  +  |_|_|_|  \___/|____/____/|_|     /_/\_\__,_|___/
  +
     OSSP xds - eXtensible Data Serialization
     Version 0.9.0 (11-Aug-2001)
   
  @@ -14,8 +14,9 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  +  Copyright (c) 2001-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   
     This file is part of OSSP xds, an extensible data serialization
     library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.conf
  --- ossp-pkg/xds/devtool.conf	28 Jul 2002 08:10:32 -0000	1.3
  +++ ossp-pkg/xds/devtool.conf	17 Feb 2003 12:22:43 -0000	1.4
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.1 "1.6.*" all
  -    @autogen libtool  1.4.2 "1.4*"
  -    @autogen autoconf 2.53  "2.5[3-9]*"
  +    @autogen shtool   1.6.2 "1.6.*" all
  +    @autogen libtool  1.4.3 "1.4*"
  +    @autogen autoconf 2.57  "2.5[3-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds_version.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 xds_version.c
  --- ossp-pkg/xds/xds_version.c	17 Mar 2002 10:27:19 -0000	1.2
  +++ ossp-pkg/xds/xds_version.c	17 Feb 2003 12:22:43 -0000	1.3
  @@ -34,12 +34,12 @@
   xds_version_t xds_version = {
       0x009200,
       "0.9.0",
  -    "0.9.0 (17-Mar-2002)",
  -    "This is OSSP xds, Version 0.9.0 (17-Mar-2002)",
  -    "OSSP xds 0.9.0 (17-Mar-2002)",
  +    "0.9.0 (17-Feb-2003)",
  +    "This is OSSP xds, Version 0.9.0 (17-Feb-2003)",
  +    "OSSP xds 0.9.0 (17-Feb-2003)",
       "OSSP xds/0.9.0",
  -    "@(#)OSSP xds 0.9.0 (17-Mar-2002)",
  -    "$Id: xds_version.c,v 1.2 2002/03/17 10:27:19 rse Exp $"
  +    "@(#)OSSP xds 0.9.0 (17-Feb-2003)",
  +    "$Id: xds_version.c,v 1.3 2003/02/17 12:22:43 rse Exp $"
   };
   
   #endif /* _XDS_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 17 13:24:45 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 468BD769BC; Mon, 17 Feb 2003 13:24:45 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ INSTALL
Message-Id: <20030217122445.468BD769BC@mail.ossp.org>
Date: Mon, 17 Feb 2003 13:24:45 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   17-Feb-2003 13:24:45
  Branch: HEAD                             Handle: 2003021712244400

  Modified files:
    ossp-pkg/lmtp2nntp      INSTALL

  Log:
    improve example, especially the message loop part

  Summary:
    Revision    Changes     Path
    1.17        +5  -3      ossp-pkg/lmtp2nntp/INSTALL
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/INSTALL
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 INSTALL
  --- ossp-pkg/lmtp2nntp/INSTALL	6 Feb 2003 21:22:34 -0000	1.16
  +++ ossp-pkg/lmtp2nntp/INSTALL	17 Feb 2003 12:24:44 -0000	1.17
  @@ -269,7 +269,7 @@
        | groupmode          envelope
        | mailfrom           ".*"
        | nodename           "gateway"
  -     | restrictheader     "Cc: j\.doe@example\.org"
  +     | restrictheader     "X-Gateway:.*lmtp2nntp"
        | newsgroup          "local.test"
        | 
        | #   remove headers (using empty value)
  @@ -284,11 +284,13 @@
        | #   create Message-ID if omitted or illegal (no or more than one '@')
        | headerrule         '530::Message-ID:${msg.header.Message-ID:-@@:s/^.*@.*@.*$//:%createmessageid}'
        | 
  -     | #   append a header
  +     | #   append a header to inhibit bang path addressing for mail replies
        | headerrule         '540::Path:lmtp2nntp!not-for-mail'
        | 
  -     | #   append a header
  +     | #   append a header to avoid message loops with news2mail gateways - see restrictheader
        | headerrule         '610::X-Gateway:lmtp2nntp'
  +     | 
  +     | #   append a header to approve posting to a moderated newsgroup
        | headerrule         '620::Approved:gateway@example.com'
        | 
        | #   ---- LOGGING ----
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 17 13:27:53 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4B116769BC; Mon, 17 Feb 2003 13:27:53 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/xds/ TODO xds.c xds.h.in xds_test_lib.c xds_test_...
Message-Id: <20030217122753.4B116769BC@mail.ossp.org>
Date: Mon, 17 Feb 2003 13:27:53 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-Feb-2003 13:27:53
  Branch: HEAD                             Handle: 2003021712275101

  Modified files:
    ossp-pkg/xds            TODO xds.c xds.h.in xds_test_lib.c xds_test_xdr.c
                            xds_test_xml.c

  Log:
    cleanup API by returning xds_rc_t in xds_init, too

  Summary:
    Revision    Changes     Path
    1.30        +0  -2      ossp-pkg/xds/TODO
    1.10        +13 -10     ossp-pkg/xds/xds.c
    1.21        +8  -6      ossp-pkg/xds/xds.h.in
    1.10        +11 -19     ossp-pkg/xds/xds_test_lib.c
    1.11        +20 -40     ossp-pkg/xds/xds_test_xdr.c
    1.9         +20 -40     ossp-pkg/xds/xds_test_xml.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/TODO
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 TODO
  --- ossp-pkg/xds/TODO	17 Mar 2002 10:25:52 -0000	1.29
  +++ ossp-pkg/xds/TODO	17 Feb 2003 12:27:51 -0000	1.30
  @@ -1,3 +1 @@
   
  - change xds_init() to return xds_rc_t
  -
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 xds.c
  --- ossp-pkg/xds/xds.c	17 Mar 2002 10:25:53 -0000	1.9
  +++ ossp-pkg/xds/xds.c	17 Feb 2003 12:27:51 -0000	1.10
  @@ -33,20 +33,21 @@
   
   #include "xds_p.h"
   
  -xds_t *xds_init(xds_mode_t mode)
  +int xds_init(xds_t **xds, xds_mode_t mode)
   {
       xds_t *ctx;
   
       /* Sanity check parameter. */
  +    assert(xds != NULL);
  +    if (xds == NULL)
  +        return XDS_ERR_INVALID_ARG;
       assert(mode == XDS_ENCODE || mode == XDS_DECODE);
  -    if (mode != XDS_ENCODE && mode != XDS_DECODE) {
  -        errno = EINVAL;
  -        return NULL;
  -    }
  +    if (mode != XDS_ENCODE && mode != XDS_DECODE)
  +        return XDS_ERR_INVALID_ARG;
   
       /* Allocate context structure. */
       if ((ctx = malloc(sizeof (struct xds_context))) == NULL)
  -        return NULL; /* errno set by malloc(3) */
  +        return XDS_ERR_SYSTEM; /* errno set by malloc(3) */
   
       /* Set mode of operation in context. */
       ctx->mode = mode;
  @@ -62,17 +63,19 @@
       ctx->engines_len = 0;
       ctx->engines_capacity = 0;
   
  -    return ctx;
  +    *xds = ctx;
  +
  +    return XDS_OK;
   }
   
  -void xds_destroy(xds_t *xds)
  +int xds_destroy(xds_t *xds)
   {
       size_t i;
   
       /* Sanity check parameter. */
       assert(xds != NULL);
       if (xds == NULL)
  -        return;
  +        return XDS_ERR_INVALID_ARG;
   
       /* Free allocated memory. */
       assert(xds->buffer != NULL
  @@ -89,7 +92,7 @@
       }
       free(xds);
   
  -    return;
  +    return XDS_OK;
   }
   
   int xds_setbuffer(xds_t *xds, xds_scope_t flag, void *buffer,
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds.h.in
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 xds.h.in
  --- ossp-pkg/xds/xds.h.in	17 Mar 2002 10:25:53 -0000	1.20
  +++ ossp-pkg/xds/xds.h.in	17 Feb 2003 12:27:51 -0000	1.21
  @@ -62,7 +62,8 @@
       XDS_ERR_UNKNOWN_ENGINE = -5,
       XDS_ERR_INVALID_MODE   = -6,
       XDS_ERR_UNDERFLOW      = -7,
  -    XDS_ERR_UNKNOWN        = -8
  +    XDS_ERR_UNKNOWN        = -8,
  +    XDS_ERR_SYSTEM         = -9
   };
   
   typedef enum { XDS_ENCODE, XDS_DECODE } xds_mode_t;
  @@ -75,8 +76,8 @@
                               void *buffer, size_t buffer_size, size_t *used_buffer_size,
                               va_list *args);
   
  -xds_t *xds_init      (xds_mode_t);
  -void   xds_destroy   (xds_t *xds);
  +int    xds_init      (xds_t **xds, xds_mode_t);
  +int    xds_destroy   (xds_t *xds);
   int    xds_register  (xds_t *xds, const char *name, xds_engine_t engine, void *engine_context);
   int    xds_unregister(xds_t *xds, const char *name);
   int    xds_setbuffer (xds_t *xds, xds_scope_t flag, void *buffer, size_t buffer_len);
  @@ -91,7 +92,7 @@
           assert(condition); \
           if (!(condition)) \
               return XDS_ERR_INVALID_ARG; \
  -    } while(XDS_FALSE)
  +    } while (XDS_FALSE)
   
   #define xds_init_encoding_engine(size) \
       do { \
  @@ -103,7 +104,7 @@
           *used_buffer_size = size; \
           if (buffer_size < size) \
               return XDS_ERR_OVERFLOW; \
  -    } while(XDS_FALSE)
  +    } while (XDS_FALSE)
   
   #define xds_init_decoding_engine(size) \
       do { \
  @@ -115,7 +116,7 @@
           *used_buffer_size = size; \
           if (buffer_size < size) \
               return XDS_ERR_UNDERFLOW; \
  -    } while(XDS_FALSE)
  +    } while (XDS_FALSE)
   
   #define xds_declare_formatting_engine(func) \
       int func(xds_t *, void *, void *, size_t, size_t *, va_list *)
  @@ -163,3 +164,4 @@
   xds_declare_formatting_engine(xml_decode_string);
   
   #endif /* __XDS_H__ */
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds_test_lib.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 xds_test_lib.c
  --- ossp-pkg/xds/xds_test_lib.c	17 Mar 2002 10:25:53 -0000	1.9
  +++ ossp-pkg/xds/xds_test_lib.c	17 Feb 2003 12:27:51 -0000	1.10
  @@ -42,9 +42,9 @@
       /* Open a bunch of contextes and close them again. */
       for (i = 0; i < sizeof (ctx) / sizeof (xds_t *); ++i) {
           if (i % 2 == 0)
  -            ctx[i] = xds_init(XDS_ENCODE);
  +            xds_init(&ctx[i], XDS_ENCODE);
           else
  -            ctx[i] = xds_init(XDS_DECODE);
  +            xds_init(&ctx[i], XDS_DECODE);
   
           if (ctx[i] == 0) {
               printf("Failed to initialize xds context: i = %d\n", i);
  @@ -57,7 +57,7 @@
   
   #ifdef NDEBUG
       /* Check how the library deals with errorneous arguments. */
  -    if (xds_init((xds_mode_t) 42) != NULL || errno != EINVAL) {
  +    if (xds_init(NULL, (xds_mode_t)42) != NULL || errno != EINVAL) {
           printf
               ("Called xds_init() with invalid mode but didn't get EINVAL.\n");
           return 1;
  @@ -98,8 +98,7 @@
       size_t i;
   
       /* Create context. */
  -    xds = xds_init(XDS_ENCODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_ENCODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -199,8 +198,7 @@
       size_t buffer_size;
   
       /* Create XDS context. */
  -    xds = xds_init(XDS_ENCODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_ENCODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -288,8 +286,7 @@
       size_t new_len;
   
       /* Create XDS context. */
  -    xds = xds_init(XDS_ENCODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_ENCODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -411,8 +408,7 @@
       xds_t *xds;
   
       /* Create XDS context. */
  -    xds = xds_init(XDS_ENCODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_ENCODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -493,8 +489,7 @@
       char buffer[] = "Hallo!Hallo!Hallo!";
   
       /* Create XDS context. */
  -    xds = xds_init(XDS_DECODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_DECODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -578,8 +573,7 @@
          complain if it sees the second value -- what would mean that the args
          parameter was not resetted to the original value before the engine is
          restarted after buffer enlargement. */
  -    xds = xds_init(XDS_ENCODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_ENCODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -658,8 +652,7 @@
   
       /* Encode our copy of mystruct using our encoding callback. Then get a
          the buffer and destroy the context again. */
  -    xds = xds_init(XDS_ENCODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_ENCODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -695,8 +688,7 @@
       xds_destroy(xds);
   
       /* Now create a decoding context and decode the whole thing again. */
  -    xds = xds_init(XDS_DECODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_DECODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds_test_xdr.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 xds_test_xdr.c
  --- ossp-pkg/xds/xds_test_xdr.c	17 Mar 2002 10:25:53 -0000	1.10
  +++ ossp-pkg/xds/xds_test_xdr.c	17 Feb 2003 12:27:51 -0000	1.11
  @@ -66,8 +66,7 @@
       xdr_destroy(&xdrs);
   
       /* Encode the values array using the XDS implementation. */
  -    xds = xds_init(XDS_ENCODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_ENCODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -102,8 +101,7 @@
       /* Now we decode the values again using the XDS implementation and
          compare them to our original values. Obviously, they should not
          differ. */
  -    xds = xds_init(XDS_DECODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_DECODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -171,8 +169,7 @@
       xdr_destroy(&xdrs);
   
       /* Encode the values array using the XDS implementation. */
  -    xds = xds_init(XDS_ENCODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_ENCODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -207,8 +204,7 @@
       /* Now we decode the values again using the XDS implementation and
          compare them to our original values. Obviously, they should not
          differ. */
  -    xds = xds_init(XDS_DECODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_DECODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -272,8 +268,7 @@
       xdr_destroy(&xdrs);
   
       /* Encode the values array using the XDS implementation. */
  -    xds = xds_init(XDS_ENCODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_ENCODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -308,8 +303,7 @@
       /* Now we decode the values again using the XDS implementation and
          compare them to our original values. Obviously, they should not
          differ. */
  -    xds = xds_init(XDS_DECODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_DECODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -381,8 +375,7 @@
       xdr_destroy(&xdrs);
   
       /* Encode the values array using the XDS implementation. */
  -    xds = xds_init(XDS_ENCODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_ENCODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -417,8 +410,7 @@
       /* Now we decode the values again using the XDS implementation and
          compare them to our original values. Obviously, they should not
          differ. */
  -    xds = xds_init(XDS_DECODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_DECODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -464,8 +456,7 @@
   
       /* Encode the string as octet stream. Then erase the buffer and decode
          the string back, verifying that it hasn't changed. */
  -    xds = xds_init(XDS_ENCODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_ENCODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -488,8 +479,7 @@
           return 1;
       }
   
  -    xds = xds_init(XDS_DECODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_DECODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -535,8 +525,7 @@
   
       /* Encode the string as octet stream. Then erase the buffer and decode
          the string back, verifying that it hasn't changed. */
  -    xds = xds_init(XDS_ENCODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_ENCODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -559,8 +548,7 @@
           return 1;
       }
   
  -    xds = xds_init(XDS_DECODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_DECODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -603,8 +591,7 @@
   
       /* Encode the string as octet stream. Then erase the buffer and decode
          the string back, verifying that it hasn't changed. */
  -    xds = xds_init(XDS_ENCODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_ENCODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -628,8 +615,7 @@
           return 1;
       }
   
  -    xds = xds_init(XDS_DECODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_DECODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -676,8 +662,7 @@
   
       /* Encode the string as octet stream. Then erase the buffer and decode
          the string back, verifying that it hasn't changed. */
  -    xds = xds_init(XDS_ENCODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_ENCODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -700,8 +685,7 @@
           return 1;
       }
   
  -    xds = xds_init(XDS_DECODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_DECODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -767,8 +751,7 @@
       xdr_destroy(&xdrs);
   
       /* Encode the values array using the XDS implementation. */
  -    xds = xds_init(XDS_ENCODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_ENCODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -803,8 +786,7 @@
       /* Now we decode the values again using the XDS implementation and
          compare them to our original values. Obviously, they should not
          differ. */
  -    xds = xds_init(XDS_DECODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_DECODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -868,8 +850,7 @@
       xdr_destroy(&xdrs);
   
       /* Encode the values array using the XDS implementation. */
  -    xds = xds_init(XDS_ENCODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_ENCODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -904,8 +885,7 @@
       /* Now we decode the values again using the XDS implementation and
          compare them to our original values. Obviously, they should not
          differ. */
  -    xds = xds_init(XDS_DECODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_DECODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds_test_xml.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 xds_test_xml.c
  --- ossp-pkg/xds/xds_test_xml.c	17 Mar 2002 10:25:53 -0000	1.8
  +++ ossp-pkg/xds/xds_test_xml.c	17 Feb 2003 12:27:52 -0000	1.9
  @@ -53,8 +53,7 @@
       size_t i;
   
       /* Encode the values array, then decode it back and compare the numbers. */
  -    xds = xds_init(XDS_ENCODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_ENCODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -85,8 +84,7 @@
       }
       xds_destroy(xds);
   
  -    xds = xds_init(XDS_DECODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_DECODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -148,8 +146,7 @@
       size_t i;
   
       /* Encode the values array, then decode it back and compare the numbers. */
  -    xds = xds_init(XDS_ENCODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_ENCODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -170,8 +167,7 @@
       }
       xds_destroy(xds);
   
  -    xds = xds_init(XDS_DECODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_DECODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -226,8 +222,7 @@
       size_t i;
   
       /* Encode the values array, then decode it back and compare the numbers. */
  -    xds = xds_init(XDS_ENCODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_ENCODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -248,8 +243,7 @@
       }
       xds_destroy(xds);
   
  -    xds = xds_init(XDS_DECODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_DECODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -303,8 +297,7 @@
       size_t i;
   
       /* Encode the values array, then decode it back and compare the numbers. */
  -    xds = xds_init(XDS_ENCODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_ENCODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -325,8 +318,7 @@
       }
       xds_destroy(xds);
   
  -    xds = xds_init(XDS_DECODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_DECODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -380,8 +372,7 @@
   
       /* Encode the values array, then decode it back and compare the numbers. */
   
  -    xds = xds_init(XDS_ENCODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_ENCODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -416,8 +407,7 @@
   	}
       xds_destroy(xds);
   
  -    xds = xds_init(XDS_DECODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_DECODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -482,8 +472,7 @@
   
       /* Encode the values array, then decode it back and compare the numbers. */
   
  -    xds = xds_init(XDS_ENCODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_ENCODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -518,8 +507,7 @@
   	}
       xds_destroy(xds);
   
  -    xds = xds_init(XDS_DECODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_DECODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -576,8 +564,7 @@
   
       /* Encode the string, then erase the buffer and decode the string back,
          verifying that it hasn't changed. */
  -    xds = xds_init(XDS_ENCODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_ENCODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -598,8 +585,7 @@
       }
       xds_destroy(xds);
   
  -    xds = xds_init(XDS_DECODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_DECODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -647,8 +633,7 @@
   
       /* Encode the string, then erase the buffer and decode the string back,
          verifying that it hasn't changed. */
  -    xds = xds_init(XDS_ENCODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_ENCODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -669,8 +654,7 @@
       }
       xds_destroy(xds);
   
  -    xds = xds_init(XDS_DECODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_DECODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -719,8 +703,7 @@
   
       /* Encode the string as octet stream. Then erase the buffer and decode
          the string back, verifying that it hasn't changed. */
  -    xds = xds_init(XDS_ENCODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_ENCODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -741,8 +724,7 @@
       }
       xds_destroy(xds);
   
  -    xds = xds_init(XDS_DECODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_DECODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -791,8 +773,7 @@
   
       /* Encode the string as octet stream. Then erase the buffer and decode
          the string back, verifying that it hasn't changed. */
  -    xds = xds_init(XDS_ENCODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_ENCODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ -813,8 +794,7 @@
       }
       xds_destroy(xds);
   
  -    xds = xds_init(XDS_DECODE);
  -    if (xds == NULL) {
  +    if (xds_init(&xds, XDS_DECODE) != XDS_OK) {
           printf("Failed to initialize XDS context.\n");
           return 1;
       }
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 17 13:30:58 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C5F8F769B1; Mon, 17 Feb 2003 13:30:57 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ INSTALL
Message-Id: <20030217123057.C5F8F769B1@mail.ossp.org>
Date: Mon, 17 Feb 2003 13:30:57 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   17-Feb-2003 13:30:57
  Branch: HEAD                             Handle: 2003021712305600

  Modified files:
    ossp-pkg/lmtp2nntp      INSTALL

  Log:
    practice has shown less is more

  Summary:
    Revision    Changes     Path
    1.18        +1  -1      ossp-pkg/lmtp2nntp/INSTALL
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/INSTALL
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 INSTALL
  --- ossp-pkg/lmtp2nntp/INSTALL	17 Feb 2003 12:24:44 -0000	1.17
  +++ ossp-pkg/lmtp2nntp/INSTALL	17 Feb 2003 12:30:56 -0000	1.18
  @@ -228,7 +228,7 @@
        | 
        | #   --- DAEMON ---
        | user               @l_musr@
  -     | childsmax          10
  +     | childsmax          3
        | pidfile            "@l_prefix@/var/lmtp2nntp/lmtp2nntp.pid"
        | 
        | #   --- LMTP SERVER ---
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 17 13:36:06 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E1A0F769B1; Mon, 17 Feb 2003 13:36:05 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/xds/ LICENSE Makefile.in README aclocal.m4 config...
Message-Id: <20030217123605.E1A0F769B1@mail.ossp.org>
Date: Mon, 17 Feb 2003 13:36:05 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-Feb-2003 13:36:05
  Branch: HEAD                             Handle: 2003021712360200

  Modified files:
    ossp-pkg/xds            LICENSE Makefile.in README aclocal.m4 configure.ac
                            devtool.conf xds-config.in xds-config.pod
                            xds-xml.dtd xds.c xds.h.in xds.m4 xds.pod
                            xds_engine_xdr.c xds_engine_xml.c xds_p.h
                            xds_test.sh xds_test_lib.c xds_test_xdr.c
                            xds_test_xml.c

  Log:
    upgrade to standard OSSP copyright and bump year to 2003

  Summary:
    Revision    Changes     Path
    1.6         +2  -2      ossp-pkg/xds/LICENSE
    1.39        +3  -2      ossp-pkg/xds/Makefile.in
    1.8         +3  -3      ossp-pkg/xds/README
    1.7         +3  -2      ossp-pkg/xds/aclocal.m4
    1.26        +7  -5      ossp-pkg/xds/configure.ac
    1.5         +34 -4      ossp-pkg/xds/devtool.conf
    1.6         +3  -2      ossp-pkg/xds/xds-config.in
    1.6         +3  -2      ossp-pkg/xds/xds-config.pod
    1.6         +3  -2      ossp-pkg/xds/xds-xml.dtd
    1.11        +3  -2      ossp-pkg/xds/xds.c
    1.22        +3  -2      ossp-pkg/xds/xds.h.in
    1.6         +3  -2      ossp-pkg/xds/xds.m4
    1.17        +3  -2      ossp-pkg/xds/xds.pod
    1.13        +3  -2      ossp-pkg/xds/xds_engine_xdr.c
    1.11        +3  -2      ossp-pkg/xds/xds_engine_xml.c
    1.10        +3  -2      ossp-pkg/xds/xds_p.h
    1.8         +3  -2      ossp-pkg/xds/xds_test.sh
    1.11        +3  -2      ossp-pkg/xds/xds_test_lib.c
    1.12        +3  -2      ossp-pkg/xds/xds_test_xdr.c
    1.10        +3  -2      ossp-pkg/xds/xds_test_xml.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/LICENSE
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 LICENSE
  --- ossp-pkg/xds/LICENSE	17 Feb 2003 12:22:43 -0000	1.5
  +++ ossp-pkg/xds/LICENSE	17 Feb 2003 12:36:02 -0000	1.6
  @@ -2,8 +2,8 @@
   OSSP xds - Extensible Data Serialization
   
   Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -Copyright (c) 2001-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +Copyright (c) 2001-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   
   This file is part of OSSP xds, an extensible data serialization
   library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.38 -r1.39 Makefile.in
  --- ossp-pkg/xds/Makefile.in	17 Mar 2002 10:25:52 -0000	1.38
  +++ ossp-pkg/xds/Makefile.in	17 Feb 2003 12:36:02 -0000	1.39
  @@ -1,7 +1,8 @@
   ##
   ##  OSSP xds - Extensible Data Serialization
  -##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP xds, an extensible data serialization
   ##  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/README
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 README
  --- ossp-pkg/xds/README	17 Feb 2003 12:22:43 -0000	1.7
  +++ ossp-pkg/xds/README	17 Feb 2003 12:36:02 -0000	1.8
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     /_/\_\__,_|___/
   
     OSSP xds - eXtensible Data Serialization
  -  Version 0.9.0 (11-Aug-2001)
  +  Version 0.9.0 (17-Feb-2003)
   
     ABSTRACT
   
  @@ -15,8 +15,8 @@
     COPYRIGHT AND LICENSE
   
     Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -  Copyright (c) 2001-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   
     This file is part of OSSP xds, an extensible data serialization
     library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 aclocal.m4
  --- ossp-pkg/xds/aclocal.m4	17 Mar 2002 10:25:53 -0000	1.6
  +++ ossp-pkg/xds/aclocal.m4	17 Feb 2003 12:36:02 -0000	1.7
  @@ -1,7 +1,8 @@
   dnl ##
   dnl ##  OSSP xds - Extensible Data Serialization
  -dnl ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +dnl ##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP xds, an extensible data serialization
   dnl ##  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/configure.ac
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 configure.ac
  --- ossp-pkg/xds/configure.ac	17 Mar 2002 10:25:53 -0000	1.25
  +++ ossp-pkg/xds/configure.ac	17 Feb 2003 12:36:02 -0000	1.26
  @@ -1,7 +1,8 @@
   dnl ##
   dnl ##  OSSP xds - Extensible Data Serialization
  -dnl ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +dnl ##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP xds, an extensible data serialization
   dnl ##  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ -27,14 +28,15 @@
   dnl ##  configure.ac: autoconf script source
   dnl ##
   
  -AC_PREREQ(2.53)
  +AC_PREREQ(2.57)
   AC_INIT
   
   AC_HEADLINE(dnl
   OSSP xds, eXtensible Data Serialization, dnl
   XDS_VERSION, xds_version.c, dnl
  -[Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)])
  +[Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>])
   AC_PLATFORM(PLATFORM)
   
   AC_MSG_PART(Build Tools)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 devtool.conf
  --- ossp-pkg/xds/devtool.conf	17 Feb 2003 12:22:43 -0000	1.4
  +++ ossp-pkg/xds/devtool.conf	17 Feb 2003 12:36:02 -0000	1.5
  @@ -21,12 +21,42 @@
           "$@"
   
   %version
  -    ./shtool version -l c -n "OSSP xds" -p "xds_" -e xds_version.c
  +    shtool version -l c -n "OSSP xds" -p "xds_" -e xds_version.c
  +    V=`shtool version -l c -d long xds_version.c`
  +    sed -e "s/Version .*/Version $V/g" <README >README.n 
  +    mv README.n README
   
   %dist
  -    make distclean >/dev/null 2>&1
  +    rm -f xds-*.tar.gz
  +    ./devtool autoclean
  +    ./devtool autogen
  +    ./configure
  +    make clean all man
  +    make distclean
       ./shtool fixperm -v .
       V=`./shtool version -l c -d short xds_version.c`
  -    ./shtool tarball -o xds-${V}.tar.gz -d xds-${V} -u ossp -g ossp \
  -                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool.conf' -c 'gzip --best' .
  +    ./shtool tarball -o xds-${V}.tar.gz -d xds-${V} -u ossp -g xds \
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*' -c 'gzip --best' .
  +    ls -l xds-${V}.tar.gz
  +    gunzip <xds-${V}.tar.gz | tar tvf - | head -10; echo "[...]"
  +    gunzip <xds-${V}.tar.gz | tar tvf - | tail -10
  +
  +%snap
  +    rm -f xds-*.tar.gz
  +    ./devtool autoclean
  +    ./devtool autogen
  +    ./configure
  +    make clean all man
  +    make distclean
  +    ./shtool fixperm -v .
  +    D=`date '+%Y%m%d'`
  +    ./shtool tarball -o xds-SNAP-${D}.tar.gz -d xds-SNAP-${D} -u ossp -g xds \
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*' -c 'gzip --best' .
  +    ls -l xds-SNAP-${D}.tar.gz
  +    gunzip <xds-SNAP-${D}.tar.gz | tar tvf - | head -10; echo "[...]"
  +    gunzip <xds-SNAP-${D}.tar.gz | tar tvf - | tail -10
  +
  +%release
  +    echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/xds/"
  +    scp xds-*.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/xds/
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds-config.in
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 xds-config.in
  --- ossp-pkg/xds/xds-config.in	17 Mar 2002 10:25:53 -0000	1.5
  +++ ossp-pkg/xds/xds-config.in	17 Feb 2003 12:36:02 -0000	1.6
  @@ -1,8 +1,9 @@
   #!/bin/sh
   ##
   ##  OSSP xds - Extensible Data Serialization
  -##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP xds, an extensible data serialization
   ##  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds-config.pod
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 xds-config.pod
  --- ossp-pkg/xds/xds-config.pod	17 Mar 2002 10:25:53 -0000	1.5
  +++ ossp-pkg/xds/xds-config.pod	17 Feb 2003 12:36:02 -0000	1.6
  @@ -1,7 +1,8 @@
   ##
   ##  OSSP xds - Extensible Data Serialization
  -##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP xds, an extensible data serialization
   ##  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds-xml.dtd
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 xds-xml.dtd
  --- ossp-pkg/xds/xds-xml.dtd	17 Mar 2002 10:25:53 -0000	1.5
  +++ ossp-pkg/xds/xds-xml.dtd	17 Feb 2003 12:36:02 -0000	1.6
  @@ -1,7 +1,8 @@
   <!-- ===========================================================
        OSSP xds - Extensible Data Serialization
  -     Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -     Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +     Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +     Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +     Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   
        This file is part of OSSP xds, an extensible data serialization
        library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 xds.c
  --- ossp-pkg/xds/xds.c	17 Feb 2003 12:27:51 -0000	1.10
  +++ ossp-pkg/xds/xds.c	17 Feb 2003 12:36:02 -0000	1.11
  @@ -1,7 +1,8 @@
   /*
   **  OSSP xds - Extensible Data Serialization
  -**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP xds, an extensible data serialization
   **  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds.h.in
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 xds.h.in
  --- ossp-pkg/xds/xds.h.in	17 Feb 2003 12:27:51 -0000	1.21
  +++ ossp-pkg/xds/xds.h.in	17 Feb 2003 12:36:02 -0000	1.22
  @@ -1,7 +1,8 @@
   /*
   **  OSSP xds - Extensible Data Serialization
  -**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP xds, an extensible data serialization
   **  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds.m4
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 xds.m4
  --- ossp-pkg/xds/xds.m4	17 Mar 2002 10:25:53 -0000	1.5
  +++ ossp-pkg/xds/xds.m4	17 Feb 2003 12:36:02 -0000	1.6
  @@ -1,7 +1,8 @@
   dnl ##
   dnl ##  OSSP xds - Extensible Data Serialization
  -dnl ##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +dnl ##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP xds, an extensible data serialization
   dnl ##  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds.pod
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 xds.pod
  --- ossp-pkg/xds/xds.pod	17 Mar 2002 10:25:53 -0000	1.16
  +++ ossp-pkg/xds/xds.pod	17 Feb 2003 12:36:02 -0000	1.17
  @@ -1,7 +1,8 @@
   ##
   ##  OSSP xds - Extensible Data Serialization
  -##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP xds, an extensible data serialization
   ##  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds_engine_xdr.c
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 xds_engine_xdr.c
  --- ossp-pkg/xds/xds_engine_xdr.c	17 Mar 2002 10:25:53 -0000	1.12
  +++ ossp-pkg/xds/xds_engine_xdr.c	17 Feb 2003 12:36:02 -0000	1.13
  @@ -1,7 +1,8 @@
   /*
   **  OSSP xds - Extensible Data Serialization
  -**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP xds, an extensible data serialization
   **  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds_engine_xml.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 xds_engine_xml.c
  --- ossp-pkg/xds/xds_engine_xml.c	17 Mar 2002 10:25:53 -0000	1.10
  +++ ossp-pkg/xds/xds_engine_xml.c	17 Feb 2003 12:36:02 -0000	1.11
  @@ -1,7 +1,8 @@
   /*
   **  OSSP xds - Extensible Data Serialization
  -**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP xds, an extensible data serialization
   **  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds_p.h
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 xds_p.h
  --- ossp-pkg/xds/xds_p.h	17 Mar 2002 10:25:53 -0000	1.9
  +++ ossp-pkg/xds/xds_p.h	17 Feb 2003 12:36:02 -0000	1.10
  @@ -1,7 +1,8 @@
   /*
   **  OSSP xds - Extensible Data Serialization
  -**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP xds, an extensible data serialization
   **  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds_test.sh
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 xds_test.sh
  --- ossp-pkg/xds/xds_test.sh	17 Mar 2002 10:25:53 -0000	1.7
  +++ ossp-pkg/xds/xds_test.sh	17 Feb 2003 12:36:02 -0000	1.8
  @@ -1,8 +1,9 @@
   #!/bin/sh
   ##
   ##  OSSP xds - Extensible Data Serialization
  -##  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP xds, an extensible data serialization
   ##  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds_test_lib.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 xds_test_lib.c
  --- ossp-pkg/xds/xds_test_lib.c	17 Feb 2003 12:27:51 -0000	1.10
  +++ ossp-pkg/xds/xds_test_lib.c	17 Feb 2003 12:36:02 -0000	1.11
  @@ -1,7 +1,8 @@
   /*
   **  OSSP xds - Extensible Data Serialization
  -**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP xds, an extensible data serialization
   **  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds_test_xdr.c
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 xds_test_xdr.c
  --- ossp-pkg/xds/xds_test_xdr.c	17 Feb 2003 12:27:51 -0000	1.11
  +++ ossp-pkg/xds/xds_test_xdr.c	17 Feb 2003 12:36:02 -0000	1.12
  @@ -1,7 +1,8 @@
   /*
   **  OSSP xds - Extensible Data Serialization
  -**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP xds, an extensible data serialization
   **  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds_test_xml.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 xds_test_xml.c
  --- ossp-pkg/xds/xds_test_xml.c	17 Feb 2003 12:27:52 -0000	1.9
  +++ ossp-pkg/xds/xds_test_xml.c	17 Feb 2003 12:36:02 -0000	1.10
  @@ -1,7 +1,8 @@
   /*
   **  OSSP xds - Extensible Data Serialization
  -**  Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
   **
   **  This file is part of OSSP xds, an extensible data serialization
   **  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 17 13:36:26 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 59BFC769FF; Mon, 17 Feb 2003 13:36:26 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/xds/ TODO
Message-Id: <20030217123626.59BFC769FF@mail.ossp.org>
Date: Mon, 17 Feb 2003 13:36:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-Feb-2003 13:36:26
  Branch: HEAD                             Handle: 2003021712362500

  Removed files:
    ossp-pkg/xds            TODO

  Log:
    remove now empty TODO

  Summary:
    Revision    Changes     Path
    1.31        +0  -1      ossp-pkg/xds/TODO
  ____________________________________________________________________________

  rm -f ossp-pkg/xds/TODO <<'@@ .'
  Index: ossp-pkg/xds/TODO
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 17 13:42:16 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 90B6E769B1; Mon, 17 Feb 2003 13:42:16 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20030217124216.90B6E769B1@mail.ossp.org>
Date: Mon, 17 Feb 2003 13:42:16 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   17-Feb-2003 13:42:16
  Branch: HEAD                             Handle: 2003021712421401

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/xds    index.wml

  Log:
    release OSSP xds 0.9.0

  Summary:
    Revision    Changes     Path
    1.56        +1  -0      ossp-web/new/news.txt
    1.52        +1  -1      ossp-web/pkg/lib/index.wml
    1.5         +12 -3      ossp-web/pkg/lib/xds/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.55 -r1.56 news.txt
  --- ossp-web/new/news.txt	17 Feb 2003 10:59:26 -0000	1.55
  +++ ossp-web/new/news.txt	17 Feb 2003 12:42:14 -0000	1.56
  @@ -1,4 +1,5 @@
   17-Feb-2003: Released L<GNU pth> 2.0.0
  +17-Feb-2003: Released L<OSSP xds> 0.9.0
   14-Feb-2003: Released L<OSSP var> 1.0.0
   13-Feb-2003: Released T<OSSP lmtp2nntp> 1.2.0
   13-Feb-2003: Released L<OSSP fsl> 1.0.8
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.51 -r1.52 index.wml
  --- ossp-web/pkg/lib/index.wml	17 Feb 2003 10:59:27 -0000	1.51
  +++ ossp-web/pkg/lib/index.wml	17 Feb 2003 12:42:15 -0000	1.52
  @@ -36,7 +36,7 @@
   			done=95 stable=none unstable=0.9.0>
     <pkg_item name="xds" longname="OSSP xds" type="lib"
               desc="Extensible Data Serialization"
  -			done=95 stable=none unstable=none>
  +			done=95 stable=none unstable=0.9.0>
     <pkg_item name="str" longname="OSSP str" type="lib"
               desc="String Handling"
   			done=80 stable=none unstable=0.9.7>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/xds/index.wml
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 index.wml
  --- ossp-web/pkg/lib/xds/index.wml	2 Oct 2002 12:44:45 -0000	1.4
  +++ ossp-web/pkg/lib/xds/index.wml	17 Feb 2003 12:42:15 -0000	1.5
  @@ -21,6 +21,11 @@
   and a run-time context, which is used to manage buffers, registered engines,
   etc.
   
  +<h2>Documentation</h2>
  +
  +<pkg_manpage name="xds" sect=3 path="/pkg/lib/xds/xds.pod">,
  +<pkg_manpage name="xds-config" sect=1 path="/pkg/lib/xds/xds-config.pod">.
  +
   <h2>Authors</h2>
   
   <pkg_author name="Peter Simons" mail="simons@computer.org">
  @@ -29,8 +34,8 @@
   
   <pkg_status
       name="xds" assign="rse"
  -    stable="none"    stable_date="none"
  -    unstable="none"  unstable_date="none"
  +    stable="none" stable_date="none"
  +    unstable="0.9.0" unstable_date="17-Feb-2003"
   	done=100>
   
   <h2>Source</h2>
  @@ -40,5 +45,9 @@
       url=$(FTP_ROOT_URL)/pkg/lib/xds/
       directory=$(FTP_ROOT_DIR)/pkg/lib/xds/
       files="xds-*.tar.gz" 
  -	stable="none" unstable="none">
  +	stable="none" unstable="xds-0.9.0.tar.gz">
   	
  +<h2>Donation</h2>
  +
  +<pkg_donation name="xds" return="$(BASE_URL)/pkg/lib/xds/">
  +
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 17 13:51:59 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5B5D4769BE; Mon, 17 Feb 2003 13:51:59 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/xds/ README xds.pod
Message-Id: <20030217125159.5B5D4769BE@mail.ossp.org>
Date: Mon, 17 Feb 2003 13:51:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-Feb-2003 13:51:59
  Branch: HEAD                             Handle: 2003021712515800

  Modified files:
    ossp-pkg/xds            README xds.pod

  Log:
    provide a better abstract

  Summary:
    Revision    Changes     Path
    1.9         +7  -1      ossp-pkg/xds/README
    1.18        +9  -11     ossp-pkg/xds/xds.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/README
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 README
  --- ossp-pkg/xds/README	17 Feb 2003 12:36:02 -0000	1.8
  +++ ossp-pkg/xds/README	17 Feb 2003 12:51:58 -0000	1.9
  @@ -10,7 +10,13 @@
     ABSTRACT
   
     The OSSP xds library is generic and extensible encoding and decoding
  -  framework for the serialization of arbitrary ISO-C data types.
  +  framework for the serialization of arbitrary ISO C data types. OSSP
  +  xds consists of three components: the generic encoding and decoding
  +  framework, a set of shipped engines to encode and decode values in
  +  certain existing formats (Sun RPC/XDR and XDS/XML are currently
  +  provided), and a run-time context, which is used to manage buffers,
  +  registered engines, etc. The library is designed to allow fully
  +  recursive and efficient encoding/decoding of arbitrary nested data.
   
     COPYRIGHT AND LICENSE
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds.pod
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 xds.pod
  --- ossp-pkg/xds/xds.pod	17 Feb 2003 12:36:02 -0000	1.17
  +++ ossp-pkg/xds/xds.pod	17 Feb 2003 12:51:58 -0000	1.18
  @@ -49,18 +49,16 @@
   
   =head1 DESCRIPTION
   
  -The purpose of B<OSSP xds> is to encode data in a way that allows this
  -data to be exchanged between different computer systems. Assume you
  -would want to transfer the value 0x1234 from host A to host B. Then you
  -would encode it using B<OSSP xds>, transfer the encoded data over the
  -network, and decode the value again at the other end. Every program that
  -follows this process will read the correct value no matter what native
  -representation is uses internally.
  +The B<OSSP xds> library is generic and extensible encoding and decoding
  +framework for the serialization of arbitrary ISO C data types. B<OSSP
  +xds> consists of three components: the generic encoding and decoding
  +framework, a set of shipped engines to encode and decode values in
  +certain existing formats (Sun RPC/XDR and XDS/XML are currently
  +provided), and a run-time context, which is used to manage buffers,
  +registered engines, etc. The library is designed to allow fully
  +recursive and efficient encoding/decoding of arbitrary nested data.
   
  -B<OSSP xds> consists of three components: The generic encoding and
  -decoding framework, a set of engines to encode and decode values in a
  -certain format, and a run-time context, which is used to manage buffers,
  -registered engines, etc.
  +=head2 INTRODUCTION
   
   In order to use B<OSSP xds>, the first thing the developer has to
   do is to create a valid context by calling xds_init(). The function
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 17 13:53:00 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3AB78769EB; Mon, 17 Feb 2003 13:53:00 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/xds/ index.wml
Message-Id: <20030217125300.3AB78769EB@mail.ossp.org>
Date: Mon, 17 Feb 2003 13:53:00 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   17-Feb-2003 13:53:00
  Branch: HEAD                             Handle: 2003021712525900

  Modified files:
    ossp-web/pkg/lib/xds    index.wml

  Log:
    better abstract

  Summary:
    Revision    Changes     Path
    1.6         +8  -13     ossp-web/pkg/lib/xds/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/xds/index.wml
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 index.wml
  --- ossp-web/pkg/lib/xds/index.wml	17 Feb 2003 12:42:15 -0000	1.5
  +++ ossp-web/pkg/lib/xds/index.wml	17 Feb 2003 12:52:59 -0000	1.6
  @@ -7,19 +7,14 @@
   
   <h2>Abstract</h2>
   
  -The purpose of OSSP xds is to encode data in a way that allows this
  -data to be exchanged between different computer systems. Assume you
  -would want to transfer the value 0x1234 from host A to host B. Then you
  -would encode it using B<OSSP xds>, transfer the encoded data over the
  -network, and decode the value again at the other end. Every program that
  -follows this process will read the correct value no matter what native
  -representation is uses internally.
  -
  -<p>
  -OSSP xds consists of three components: The generic encoding and decoding
  -framework, a set of engines to encode and decode values in a certain format,
  -and a run-time context, which is used to manage buffers, registered engines,
  -etc.
  +The OSSP xds library is generic and extensible encoding and decoding
  +framework for the serialization of arbitrary ISO C data types. OSSP
  +xds consists of three components: the generic encoding and decoding
  +framework, a set of shipped engines to encode and decode values in
  +certain existing formats (Sun RPC/XDR and XDS/XML are currently
  +provided), and a run-time context, which is used to manage buffers,
  +registered engines, etc. The library is designed to allow fully
  +recursive and efficient encoding/decoding of arbitrary nested data.
   
   <h2>Documentation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 17 14:49:40 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 39F01769B1; Mon, 17 Feb 2003 14:49:40 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val/ val.pod
Message-Id: <20030217134940.39F01769B1@mail.ossp.org>
Date: Mon, 17 Feb 2003 14:49:40 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-Feb-2003 14:49:40
  Branch: HEAD                             Handle: 2003021713493900

  Modified files:
    ossp-pkg/val            val.pod

  Log:
    fix typo

  Summary:
    Revision    Changes     Path
    1.14        +1  -1      ossp-pkg/val/val.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/val.pod
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 val.pod
  --- ossp-pkg/val/val.pod	2 Feb 2003 14:22:43 -0000	1.13
  +++ ossp-pkg/val/val.pod	17 Feb 2003 13:49:39 -0000	1.14
  @@ -145,7 +145,7 @@
   
   =item C<val_cb_t>
   
  -Function data type for the callback to be used with B<var_apply>().
  +Function data type for the callback to be used with B<val_apply>().
   
   =item C<val_rc_t>
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 17 15:27:42 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A994E769BC; Mon, 17 Feb 2003 15:27:41 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val/ val.pod
Message-Id: <20030217142741.A994E769BC@mail.ossp.org>
Date: Mon, 17 Feb 2003 15:27:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-Feb-2003 15:27:41
  Branch: HEAD                             Handle: 2003021714274000

  Modified files:
    ossp-pkg/val            val.pod

  Log:
    cleanup manpage

  Summary:
    Revision    Changes     Path
    1.15        +40 -25     ossp-pkg/val/val.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/val.pod
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 val.pod
  --- ossp-pkg/val/val.pod	17 Feb 2003 13:49:39 -0000	1.14
  +++ ossp-pkg/val/val.pod	17 Feb 2003 14:27:40 -0000	1.15
  @@ -32,7 +32,7 @@
   
   =head1 NAME
   
  -B<OSSP val> - Value Access Library
  +B<OSSP val> - Value Access
   
   =head1 SYNOPSIS
   
  @@ -88,17 +88,21 @@
   
   In general, this is used for accessing ISO-C variables without having to
   know the actual symbol/address. The typical use cases are in combination
  -with flexible configuration parsing and supporting loosly-coupled
  +with flexible configuration parsing and supporting loosely-coupled
   DSO-based module architectures.
   
   =head1 STRUCTURED NAMES
   
  -Whenever the APIs calls for a name, it supports structured names where
  +Whenever the API calls for a name, it supports structured names where
   elements are separated by a dot. It is assumed that the leading elements
   are references to other C<val_t> structures and only the very last
   element is a reference to an actual variable.
   
  -=head1 API CONSTANTS
  +=head1 APPLICATION PROGRAMMING INTERFACE (API)
  +
  +=head2 API CONSTANTS
  +
  +The following constants exist in the B<OSSP val> API:
   
   =over 4
   
  @@ -111,13 +115,15 @@
   
   Type of value when registering a variable using B<val_reg>() or querying
   for the type using B<val_query>(). Most are self-explanatory because
  -directly correspond to the basic C data types. C<VAL_TYPE_VAL> is used
  +directly correspond to the basic ISO-C data types. C<VAL_TYPE_VAL> is used
   to mount a C<val_t> structure into an existing C<val_t> structure to
   support structured names (see example section for details).
   
  -The following particular types exist: C<VAL_TYPE_VAL>, C<VAL_TYPE_PTR>,
  -C<VAL_TYPE_CHAR>, C<VAL_TYPE_SHORT>, C<VAL_TYPE_INT>, C<VAL_TYPE_LONG>,
  -C<VAL_TYPE_FLOAT>, C<VAL_TYPE_DOUBLE>
  +The following particular types exist: C<VAL_TYPE_VAL> (C<val_t
  +*>), C<VAL_TYPE_PTR> (C<void *>), C<VAL_TYPE_CHAR> (C<char>),
  +C<VAL_TYPE_SHORT> (C<short int>), C<VAL_TYPE_INT> (C<int>),
  +C<VAL_TYPE_LONG> (C<long int>), C<VAL_TYPE_FLOAT> (C<float>),
  +C<VAL_TYPE_DOUBLE> (C<double float>).
   
   =item C<VAL_OK>, C<VAL_ERR_>I<ID>
   
  @@ -134,7 +140,9 @@
   
   =back
   
  -=head1 API DATA TYPES
  +=head2 API DATA TYPES
  +
  +The following data types exist in the B<OSSP val> API:
   
   =over 4
   
  @@ -154,17 +162,20 @@
   
   =back
   
  -=head1 API FUNCTIONS
  +=head2 API FUNCTIONS
  +
  +The following functions exist in the B<OSSP val> API:
   
   =over 4
   
   =item val_rc_t B<val_create>(val_t **I<pval>);
   
  -Creates a new value structure and updates the given pointer to reference it.
  +Creates a new value access structure and updates the given pointer
  +I<pval> to reference it.
   
   =item val_rc_t B<val_destroy>(val_t *I<val>);
   
  -Destroys a I<val> structure.
  +Destroys the value access structure referenced by I<val>.
   
   =item val_rc_t B<val_reg>(val_t *I<val>, const char *I<name>, int I<type>, const char *I<desc>, void *I<storage>);
   
  @@ -173,21 +184,21 @@
   queried through B<val_query>() and is also passed to the callback of
   B<val_apply>(). The value that belongs to the given I<name> is expected
   to be found at I<storage>. Passing C<NULL> as I<storage> will create
  -an internal data storage in I<val> so it can only be access through
  +an internal data storage in I<val> so it can only be accessed through
   B<val_get>(), B<val_set>() or after the actual storage address was
   queried using B<val_query>().
   
   =item val_rc_t B<val_unreg>(val_t *I<val>, const char *I<name>);
   
  -Unregisters the value under I<name> in I<val>.
  +Unregisters the value under I<name> from I<val>.
   
   =item val_rc_t B<val_query>(val_t *I<val>, const char *I<name>, int *I<ptype>, char **I<pdesc>, void **I<pstorage>);
   
   Queries a value I<name> in I<val> and returns its type, description and
  -storage address. All of I<ptype>, I<pdesc> and I<pstorage> are optional and
  -C<NULL> can be passed in if this information is not needed. Passing C<NULL> to
  -all query result pointers just checks for existence of the value I<name> in
  -I<val>.
  +storage address. All of I<ptype>, I<pdesc> and I<pstorage> are optional
  +and C<NULL> can be passed in if this information is not needed. Passing
  +C<NULL> to all query result pointers just checks for existence of the
  +value I<name> in I<val>.
   
   =item val_rc_t B<val_set>(val_t *I<val>, const char *I<name>, ...);
   
  @@ -196,21 +207,22 @@
   Unless the actual storage address was queried using B<val_query>() this
   operation is mandatory for internally stored data. If external storage
   is used, not the value but a pointer to it is stored in the library, so
  -the value is allowed to be be modified without notice to the library.
  +the value is allowed to be be modified without explicit notice to the
  +library.
   
   =item val_rc_t B<val_get>(val_t *I<val>, const char *I<name>, ...);
   
  -Gets the value I<name> in I<val> and stores it whereever the passed variable
  +Gets the value I<name> in I<val> and stores it wherever the passed variable
   argument points to. The storage location is expected to be of the I<type>
   specified at B<val_reg>() time.
   
   =item val_rc_t B<val_vset>(val_t *I<val>, const char *I<name>, va_list I<ap>);
   
  -Exactly like B<val_set>() but uses a C<va_list>.
  +Exactly like B<val_set>() but uses a C<va_list> for the variable arguments.
   
   =item val_rc_t B<val_vget>(val_t *I<val>, const char *I<name>, va_list I<ap>);
   
  -Exactly like B<val_get>() but uses a C<va_list>.
  +Exactly like B<val_get>() but uses a C<va_list> for the variable arguments.
   
   =item val_rc_t B<val_apply>(val_t *I<val>, const char *I<name>, int I<depth>, val_cb_t I<cb>, void *I<ctx>);
   
  @@ -338,12 +350,15 @@
   
   =head1 HISTORY
   
  -B<OSSP val> was invented in January 2002 by Thomas Lotterer and Ralf S.
  -Engelschall for use with the B<OSSP lmtp2nntp> project.
  +B<OSSP val> was invented in January 2002 by Thomas Lotterer
  +E<lt>thomas@lotterer.netE<gt> and Ralf S. Engelschall
  +E<lt>rse@engelschall.comE<gt> for use in the B<OSSP> project. Its
  +creation was prompted by the requirement to locate values for B<OSSP
  +var> based expansions in B<OSSP lmtp2nntp>.
   
   =head1 AUTHORS
   
  - Thomas Lotterer     <thomas.lotterer@cw.com>
  + Thomas Lotterer     <thomas@lotterer.net>
    Ralf S. Engelschall <rse@engelschall.com>
   
   =cut
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 17 15:35:27 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 650D5769A7; Mon, 17 Feb 2003 15:35:27 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val/ AUTHORS NEWS README TODO configure.ac devtoo...
Message-Id: <20030217143527.650D5769A7@mail.ossp.org>
Date: Mon, 17 Feb 2003 15:35:27 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-Feb-2003 15:35:27
  Branch: HEAD                             Handle: 2003021714352401

  Modified files:
    ossp-pkg/val            AUTHORS NEWS README TODO configure.ac devtool
                            devtool.conf devtool.func val-config.in val.c
                            val.pod val_test.c

  Log:
    remove trailing whitespaces from source files and apply standard OSSP
    header to documents

  Summary:
    Revision    Changes     Path
    1.2         +8  -1      ossp-pkg/val/AUTHORS
    1.2         +6  -7      ossp-pkg/val/NEWS
    1.6         +6  -6      ossp-pkg/val/README
    1.6         +17 -11     ossp-pkg/val/TODO
    1.7         +1  -1      ossp-pkg/val/configure.ac
    1.3         +1  -1      ossp-pkg/val/devtool
    1.9         +1  -1      ossp-pkg/val/devtool.conf
    1.3         +1  -1      ossp-pkg/val/devtool.func
    1.6         +1  -1      ossp-pkg/val/val-config.in
    1.15        +24 -24     ossp-pkg/val/val.c
    1.16        +1  -1      ossp-pkg/val/val.pod
    1.9         +7  -7      ossp-pkg/val/val_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/AUTHORS
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 AUTHORS
  --- ossp-pkg/val/AUTHORS	13 Mar 2002 18:39:40 -0000	1.1
  +++ ossp-pkg/val/AUTHORS	17 Feb 2003 14:35:24 -0000	1.2
  @@ -1,3 +1,10 @@
  +   _        ___  ____ ____  ____               _
  +  |_|_ _   / _ \/ ___/ ___||  _ \  __   ____ _| |
  +  _|_||_| | | | \___ \___ \| |_) | \ \ / / _` | |
  + |_||_|_| | |_| |___) |__) |  __/   \ V / (_| | |
  +  |_|_|_|  \___/|____/____/|_|       \_/ \__,_|_|
  +
  +  OSSP val - Value Access
   
     AUTHORS
   
  @@ -5,5 +12,5 @@
     or edited major parts of the OSSP val sources.
   
     Ralf S. Engelschall   <rse@engelschall.com>
  -  Thomas Lotterer       <thomas.lotterer@cw.com>
  +  Thomas Lotterer       <thomas@lotterer.net>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/NEWS
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 NEWS
  --- ossp-pkg/val/NEWS	13 Mar 2002 18:39:40 -0000	1.1
  +++ ossp-pkg/val/NEWS	17 Feb 2003 14:35:24 -0000	1.2
  @@ -1,13 +1,12 @@
  -              _ 
  -  __   ____ _| |
  -  \ \ / / _` | |
  -   \ V / (_| | |
  -    \_/ \__,_|_|
  +   _        ___  ____ ____  ____               _
  +  |_|_ _   / _ \/ ___/ ___||  _ \  __   ____ _| |
  +  _|_||_| | | | \___ \___ \| |_) | \ \ / / _` | |
  + |_||_|_| | |_| |___) |__) |  __/   \ V / (_| | |
  +  |_|_|_|  \___/|____/____/|_|       \_/ \__,_|_|
   
  -  OSSP val -- Value Access
  +  OSSP val - Value Access
   
     NEWS
  -  ====
   
     This is a list of user-visible and/or major changes to OSSP val.
     For more details please have a look at the ChangeLog file.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/README
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 README
  --- ossp-pkg/val/README	2 Feb 2003 14:22:43 -0000	1.5
  +++ ossp-pkg/val/README	17 Feb 2003 14:35:24 -0000	1.6
  @@ -1,10 +1,10 @@
  -              _ 
  -  __   ____ _| |
  -  \ \ / / _` | |
  -   \ V / (_| | |
  -    \_/ \__,_|_|
  +   _        ___  ____ ____  ____               _
  +  |_|_ _   / _ \/ ___/ ___||  _ \  __   ____ _| |
  +  _|_||_| | | | \___ \___ \| |_) | \ \ / / _` | |
  + |_||_|_| | |_| |___) |__) |  __/   \ V / (_| | |
  +  |_|_|_|  \___/|____/____/|_|       \_/ \__,_|_|
   
  -  OSSP val -- Value Access
  +  OSSP val - Value Access
     Version 0.9.0 (15-Mar-2002)
   
     ABSTRACT
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/TODO
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 TODO
  --- ossp-pkg/val/TODO	27 May 2002 15:34:33 -0000	1.5
  +++ ossp-pkg/val/TODO	17 Feb 2003 14:35:24 -0000	1.6
  @@ -1,16 +1,22 @@
  +   _        ___  ____ ____  ____               _
  +  |_|_ _   / _ \/ ___/ ___||  _ \  __   ____ _| |
  +  _|_||_| | | | \___ \___ \| |_) | \ \ / / _` | |
  + |_||_|_| | |_| |___) |__) |  __/   \ V / (_| | |
  +  |_|_|_|  \___/|____/____/|_|       \_/ \__,_|_|
   
  -TODO
  -----
  +  OSSP val - Value Access
   
  -o dynamic variables: function pointer for set/get
  +  TODO
   
  -o in combination with var lookups, each variable should have dump/print/output
  -  feature/function which results the value (integer, string, struct, etc.) always as a string
  -  (stringify function)
  +  o dynamic variables: function pointer for set/get
   
  -o access control feature: val_reg(<acl>, ...)
  -                          val_get(<access-level>, ...)
  -  for use in combination with var in order to allow all internals to be stored
  -  and registered in val structure but allow variable lookups only to access
  -  public/whatever type variables.
  +  o in combination with var lookups, each variable should have
  +    dump/print/output feature/function which results the value (integer,
  +    string, struct, etc.) always as a string (stringify function)
  +
  +  o access control feature: val_reg(<acl>, ...)
  +                            val_get(<access-level>, ...)
  +    for use in combination with var in order to allow all internals to
  +    be stored and registered in val structure but allow variable lookups
  +    only to access public/whatever type variables.
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/configure.ac
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 configure.ac
  --- ossp-pkg/val/configure.ac	2 Feb 2003 14:22:43 -0000	1.6
  +++ ossp-pkg/val/configure.ac	17 Feb 2003 14:35:24 -0000	1.7
  @@ -45,7 +45,7 @@
   dnl #   checks for external libraries
   AC_CHECK_EXTLIB([OSSP ex], ex, __ex_ctx, ex.h,
                   [AC_DEFINE(WITH_EX, 1, [Define to 1 if building with OSSP ex])])
  -AC_CHECK_EXTLIB([Dmalloc], dmalloc, dmalloc_debug, dmalloc.h, 
  +AC_CHECK_EXTLIB([Dmalloc], dmalloc, dmalloc_debug, dmalloc.h,
                   [AC_DEFINE(WITH_DMALLOC, 1, [Define to 1 if building with Dmalloc])])
   
   dnl #   output generation
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/devtool
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 devtool
  --- ossp-pkg/val/devtool	10 Feb 2003 10:13:34 -0000	1.2
  +++ ossp-pkg/val/devtool	17 Feb 2003 14:35:24 -0000	1.3
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  devtool -- Development Tool
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   if [ $# -eq 0 ]; then
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 devtool.conf
  --- ossp-pkg/val/devtool.conf	30 Jan 2003 19:06:49 -0000	1.8
  +++ ossp-pkg/val/devtool.conf	17 Feb 2003 14:35:25 -0000	1.9
  @@ -23,7 +23,7 @@
   %version
       shtool version -l txt -n "OSSP val" -p "val_" -e VERSION
       V=`shtool version -l txt -d long VERSION`
  -    sed -e "s/Version .*(.*)/Version $V/g" <README >README.n 
  +    sed -e "s/Version .*(.*)/Version $V/g" <README >README.n
       mv README.n README
   
   %dist
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/devtool.func
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.func
  --- ossp-pkg/val/devtool.func	13 Mar 2002 18:19:38 -0000	1.2
  +++ ossp-pkg/val/devtool.func	17 Feb 2003 14:35:25 -0000	1.3
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   devtool_require () {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/val-config.in
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 val-config.in
  --- ossp-pkg/val/val-config.in	2 Feb 2003 14:22:43 -0000	1.5
  +++ ossp-pkg/val/val-config.in	17 Feb 2003 14:35:25 -0000	1.6
  @@ -29,7 +29,7 @@
   ##  val-config.in: cache library build utility
   ##
   
  -DIFS=' 	
  +DIFS=' 
   '
   
   prefix="@prefix@"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/val.c
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 val.c
  --- ossp-pkg/val/val.c	6 Feb 2003 16:58:40 -0000	1.14
  +++ ossp-pkg/val/val.c	17 Feb 2003 14:35:25 -0000	1.15
  @@ -107,7 +107,7 @@
   typedef struct segment_st segment_t;
   struct segment_st {
       element_t *s_element[SEGMENTSIZE]; /* array of pointers to elements */
  -}; 
  +};
   
   /* the top-level hash table structure */
   struct lh_st {
  @@ -139,7 +139,7 @@
    * signature). It can be definetely recommended as a good general
    * purpose hash function.
    */
  -static long 
  +static long
   lh_hash(
       register const unsigned char *k,
       register size_t length)
  @@ -176,7 +176,7 @@
   
       /* handle the last 11 bytes */
       c += length;
  -    switch(len) { 
  +    switch(len) {
           /* all the case statements fall through */
           case 11: c+=((ub4)k[10]<<24);
           case 10: c+=((ub4)k[ 9]<<16);
  @@ -220,7 +220,7 @@
   
       /* allocate and clear first segment of hash table array */
       if ((h->h_dir[0] = (segment_t *)malloc(sizeof(segment_t))) == NULL) {
  -        free(h->h_dir); 
  +        free(h->h_dir);
           free(h);
           return NULL;
       }
  @@ -243,7 +243,7 @@
       element_t **pelold;
       element_t *el, *headofold, *headofnew, *next;
       unsigned int n;
  -    
  +
       /* calculate next new address */
       pmax0   = h->h_pmax;
       newaddr = pmax0 + h->h_p;
  @@ -257,7 +257,7 @@
                return;
           memset((char *)h->h_dir+n, 0, n);
       }
  -    
  +
       /* have to create a new table segment? */
       if (SEGINDEX(newaddr) == 0) {
           if ((seg = (segment_t *)malloc(sizeof(segment_t))) == NULL)
  @@ -275,7 +275,7 @@
           h->h_p = 0;
       }
       h->h_slack += MAXLOADFCTR;
  -    
  +
       /* relocate and split between P-element new element */
       headofold = NULL;
       headofnew = NULL;
  @@ -369,7 +369,7 @@
       /* check whether element is already in the hash table */
       bFound = FALSE;
       for (el = *pel; el != NULL; el = el->e_next) {
  -        if (   el->e_hash == hash 
  +        if (   el->e_hash == hash
               && el_keylen(el) == keylen
               && memcmp(el->e_keyptr, keyptr, el_keylen(el)) == 0) {
               bFound = TRUE;
  @@ -440,7 +440,7 @@
   
       /* search for element in collision list */
       for (el = *pel; el != NULL; el = el->e_next) {
  -        if (   el->e_hash == hash 
  +        if (   el->e_hash == hash
               && el_keylen(el) == keylen
               && memcmp(el->e_keyptr, keyptr, el_keylen(el)) == 0) {
               /* provide results */
  @@ -477,7 +477,7 @@
       /* search for element in collision chain */
       rv = FALSE;
       for (lel = NULL, el = *pel; el != NULL; lel = el, el = el->e_next) {
  -        if (   el->e_hash == hash 
  +        if (   el->e_hash == hash
               && el_keylen(el) == keylen
               && memcmp(el->e_keyptr, keyptr, el_keylen(el)) == 0) {
               /* free key+data memory chunk */
  @@ -485,7 +485,7 @@
                   free(el->e_datptr);
               /* remove element from collision chain */
               if (lel == NULL)
  -                *pel = el->e_next; 
  +                *pel = el->e_next;
               else
                   lel->e_next = el->e_next;
               /* deallocate element structure */
  @@ -581,7 +581,7 @@
   **  full-featured linear hashing library.
   */
   
  -/* 
  +/*
    * usually val_object_t.data is a pointer val_object_t.data.p,
    * but VAL_INLINE signals val_object_t.data is actual data
    * val_object_t.data.[csilfd].
  @@ -634,7 +634,7 @@
               default:              storage = NULL; break; /* cannot happen */
           }
       }
  -    else 
  +    else
           storage = obj->data.p;
   
       return storage;
  @@ -666,12 +666,12 @@
   }
   
   /* internal lh_apply() callback for use with val_destroy() */
  -static int val_destroy_cb(void *_ctx, 
  -                          const void *keyptr, int keylen, 
  +static int val_destroy_cb(void *_ctx,
  +                          const void *keyptr, int keylen,
                             const void *datptr, int datlen)
   {
       val_object_t *obj;
  -    
  +
       /* free description string */
       if ((obj = (val_object_t *)datptr) != NULL)
           if (obj->desc != NULL)
  @@ -727,7 +727,7 @@
           newobj.desc = strdup(desc);
       else
           newobj.desc = NULL;
  -    if (storage == NULL) { 
  +    if (storage == NULL) {
           newobj.type   = (type | VAL_INLINE);
           newobj.data.l = 0;
       }
  @@ -779,7 +779,7 @@
   }
   
   /* query information about a value */
  -val_rc_t val_query(val_t *val, const char *name, 
  +val_rc_t val_query(val_t *val, const char *name,
                      int *ptype, char **pdesc, void **pstorage)
   {
       char *cp;
  @@ -890,7 +890,7 @@
       /* argument consistency check */
       if (val == NULL || name == NULL || ap == NULL)
           return VAL_RC(VAL_ERR_ARG);
  -    
  +
       /* recursive step-down on structured name */
       if ((cp = strchr(name, '.')) != NULL) {
           if (!lh_lookup(val->lh, name, cp-name, (void **)&obj, NULL))
  @@ -934,7 +934,7 @@
       /* argument consistency check */
       if (val == NULL || name == NULL)
           return VAL_RC(VAL_ERR_ARG);
  -    
  +
       /* just pass-through to va_list variant */
       va_start(ap, name);
       rc = val_vget(val, name, ap);
  @@ -981,7 +981,7 @@
       strncat(name, (char *)keyptr, keylen);
   
       /* recursive step-down */
  -    if ((ctx->rc = val_apply_internal(ctx->val, name, prefixlen, 
  +    if ((ctx->rc = val_apply_internal(ctx->val, name, prefixlen,
                                         ctx->depth, ctx->cb, ctx->ctx)) != VAL_OK)
           return FALSE;
   
  @@ -989,7 +989,7 @@
   }
   
   /* internal API-increased variant of val_apply() */
  -static val_rc_t val_apply_internal(val_t *val, const char *name, int prefixlen, 
  +static val_rc_t val_apply_internal(val_t *val, const char *name, int prefixlen,
                                      int depth, val_cb_t cb, void *ctx)
   {
       val_object_t *obj;
  @@ -999,7 +999,7 @@
       val_apply_ctx_t val_ctx;
   
       if (name[prefixlen] == '\0') {
  -        /* CASE 1: apply to all elements 
  +        /* CASE 1: apply to all elements
              prefix="foo.bar.", remainder="" */
           val_ctx.val       = val;
           val_ctx.name      = (char *)name;
  @@ -1027,7 +1027,7 @@
              prefix="foo.bar.quux.", remainder="baz" */
           if (!lh_lookup(val->lh, name+prefixlen, strlen(name+prefixlen), (void **)&obj, NULL))
               return VAL_RC(VAL_ERR_ARG);
  -        if ((rc = cb(ctx, name, (obj->type & ~VAL_INLINE), 
  +        if ((rc = cb(ctx, name, (obj->type & ~VAL_INLINE),
                        obj->desc, val_storage(obj))) != VAL_OK)
               return VAL_RC(rc);
           if (obj->type & VAL_TYPE_VAL) {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/val.pod
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 val.pod
  --- ossp-pkg/val/val.pod	17 Feb 2003 14:27:40 -0000	1.15
  +++ ossp-pkg/val/val.pod	17 Feb 2003 14:35:25 -0000	1.16
  @@ -40,7 +40,7 @@
   
   =item B<Constants>
   
  -C<VAL_MAXNAME>, 
  +C<VAL_MAXNAME>,
   C<VAL_TYPE_VAL>,
   C<VAL_TYPE_PTR>,
   C<VAL_TYPE_CHAR>,
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/val_test.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 val_test.c
  --- ossp-pkg/val/val_test.c	2 Feb 2003 14:22:43 -0000	1.8
  +++ ossp-pkg/val/val_test.c	17 Feb 2003 14:35:25 -0000	1.9
  @@ -55,31 +55,31 @@
               printf("DEBUG: <%10s>, name=<%10s>, VAL_TYPE_PTR,    desc=<%20s>, data@%.8lx=%.8lx\n",
                       (char *)ctx, name,             desc, (long)data, *(long *)data);
               break;
  -        case VAL_TYPE_CHAR:                                                                              
  +        case VAL_TYPE_CHAR:
               printf("DEBUG: <%10s>, name=<%10s>, VAL_TYPE_CHAR,   desc=<%20s>, data@%.8lx='%c'\n",
                       (char *)ctx, name,             desc, (long)data, *(char *)data);
               break;
  -        case VAL_TYPE_SHORT:                                                                             
  +        case VAL_TYPE_SHORT:
               printf("DEBUG: <%10s>, name=<%10s>, VAL_TYPE_SHORT,  desc=<%20s>, data@%.8lx=%8d\n",
                       (char *)ctx, name,             desc, (long)data, *(short *)data);
               break;
  -        case VAL_TYPE_INT:                                                                               
  +        case VAL_TYPE_INT:
               printf("DEBUG: <%10s>, name=<%10s>, VAL_TYPE_INT,    desc=<%20s>, data@%.8lx=%8d\n",
                       (char *)ctx, name,             desc, (long)data, *(int *)data);
               break;
  -        case VAL_TYPE_LONG:                                                                              
  +        case VAL_TYPE_LONG:
               printf("DEBUG: <%10s>, name=<%10s>, VAL_TYPE_LONG,   desc=<%20s>, data@%.8lx=%8ld\n",
                       (char *)ctx, name,             desc, (long)data, *(long *)data);
               break;
  -        case VAL_TYPE_FLOAT:                                                                             
  +        case VAL_TYPE_FLOAT:
               printf("DEBUG: <%10s>, name=<%10s>, VAL_TYPE_FLOAT,  desc=<%20s>, data@%.8lx=%8f\n",
                       (char *)ctx, name,             desc, (long)data, *(float *)data);
               break;
  -        case VAL_TYPE_DOUBLE:                                                                            
  +        case VAL_TYPE_DOUBLE:
               printf("DEBUG: <%10s>, name=<%10s>, VAL_TYPE_DOUBLE, desc=<%20s>, data@%.8lx=%8f\n",
                       (char *)ctx, name,             desc, (long)data, *(double *)data);
               break;
  -        default: 
  +        default:
               printf("DEBUG: <%10s>, name=<%10s>, type = %.8lx,    desc=<%20s>, data@%.8lx\n",
                       (char *)ctx, name, (long)type, desc, (long)data);
       }
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 17 15:40:54 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AEE25769A7; Mon, 17 Feb 2003 15:40:54 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val/ ChangeLog
Message-Id: <20030217144054.AEE25769A7@mail.ossp.org>
Date: Mon, 17 Feb 2003 15:40:54 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-Feb-2003 15:40:54
  Branch: HEAD                             Handle: 2003021714405400

  Added files:
    ossp-pkg/val            ChangeLog

  Log:
    open ChangeLog document and remember already done changes

  Summary:
    Revision    Changes     Path
    1.1         +26 -0      ossp-pkg/val/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/ChangeLog
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ChangeLog
  --- /dev/null	2003-02-17 15:40:54.000000000 +0100
  +++ ChangeLog	2003-02-17 15:40:54.000000000 +0100
  @@ -0,0 +1,26 @@
  +   _        ___  ____ ____  ____               _
  +  |_|_ _   / _ \/ ___/ ___||  _ \  __   ____ _| |
  +  _|_||_| | | | \___ \___ \| |_) | \ \ / / _` | |
  + |_||_|_| | |_| |___) |__) |  __/   \ V / (_| | |
  +  |_|_|_|  \___/|____/____/|_|       \_/ \__,_|_|
  +
  +  OSSP val - Value Access
  +
  +  CHANGELOG
  +
  +  This is a list of all changes to OSSP val.
  +  For a more brief summary please have a look at the NEWS file.
  +
  +  Changes between 0.9.0 and 0.9.1 (15-Mar-2002 to 17-Feb-2003)
  +
  +   o Swap keyptr/datptr in included linear hashing library to fix datptr
  +     alignment problem on non-i386 architectures
  +     [Michael van Elst <mlestv@dev.de.cw.net>]
  +
  +   o Fully cleaned up the source tree.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +   o Upgraded build environment to GNU autoconf 2.57, GNU libtool 1.4.3
  +     and GNU shtool 1.6.2.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 17 15:42:00 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 872A8769A7; Mon, 17 Feb 2003 15:42:00 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val/ devtool.conf
Message-Id: <20030217144200.872A8769A7@mail.ossp.org>
Date: Mon, 17 Feb 2003 15:42:00 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-Feb-2003 15:42:00
  Branch: HEAD                             Handle: 2003021714415900

  Modified files:
    ossp-pkg/val            devtool.conf

  Log:
    add our standard devtool.conf stuff

  Summary:
    Revision    Changes     Path
    1.10        +30 -3      ossp-pkg/val/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 devtool.conf
  --- ossp-pkg/val/devtool.conf	17 Feb 2003 14:35:25 -0000	1.9
  +++ ossp-pkg/val/devtool.conf	17 Feb 2003 14:41:59 -0000	1.10
  @@ -23,13 +23,40 @@
   %version
       shtool version -l txt -n "OSSP val" -p "val_" -e VERSION
       V=`shtool version -l txt -d long VERSION`
  -    sed -e "s/Version .*(.*)/Version $V/g" <README >README.n
  +    sed -e "s/Version .*/Version $V/g" <README >README.n
       mv README.n README
   
   %dist
  -    make distclean >/dev/null 2>&1
  +    rm -f val-*.tar.gz
  +    ./devtool autoclean
  +    ./devtool autogen
  +    ./configure
  +    make clean all man
  +    make distclean
       ./shtool fixperm -v .
       V=`./shtool version -l txt -d short VERSION`
  -    ./shtool tarball -o val-${V}.tar.gz -d val-${V} -u ossp -g ossp \
  +    ./shtool tarball -o val-${V}.tar.gz -d val-${V} -u ossp -g val \
                        -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*' -c 'gzip --best' .
  +    ls -l val-${V}.tar.gz
  +    gunzip <val-${V}.tar.gz | tar tvf - | head -10; echo "[...]"
  +    gunzip <val-${V}.tar.gz | tar tvf - | tail -10
  +
  +%snap
  +    rm -f val-*.tar.gz
  +    ./devtool autoclean
  +    ./devtool autogen
  +    ./configure
  +    make clean all man
  +    make distclean
  +    ./shtool fixperm -v .
  +    D=`date '+%Y%m%d'`
  +    ./shtool tarball -o val-SNAP-${D}.tar.gz -d val-SNAP-${D} -u ossp -g val \
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*' -c 'gzip --best' .
  +    ls -l val-SNAP-${D}.tar.gz
  +    gunzip <val-SNAP-${D}.tar.gz | tar tvf - | head -10; echo "[...]"
  +    gunzip <val-SNAP-${D}.tar.gz | tar tvf - | tail -10
  +
  +%release
  +    echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/val/"
  +    scp val-*.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/val/
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 17 15:42:21 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8127C769A7; Mon, 17 Feb 2003 15:42:21 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val/ README VERSION
Message-Id: <20030217144221.8127C769A7@mail.ossp.org>
Date: Mon, 17 Feb 2003 15:42:21 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-Feb-2003 15:42:20
  Branch: HEAD                             Handle: 2003021714421900

  Modified files:
    ossp-pkg/val            README VERSION

  Log:
    bump version for release

  Summary:
    Revision    Changes     Path
    1.7         +1  -1      ossp-pkg/val/README
    1.4         +1  -1      ossp-pkg/val/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/README
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 README
  --- ossp-pkg/val/README	17 Feb 2003 14:35:24 -0000	1.6
  +++ ossp-pkg/val/README	17 Feb 2003 14:42:19 -0000	1.7
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|       \_/ \__,_|_|
   
     OSSP val - Value Access
  -  Version 0.9.0 (15-Mar-2002)
  +  Version 0.9.1 (17-Feb-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/VERSION
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 VERSION
  --- ossp-pkg/val/VERSION	15 Mar 2002 11:23:14 -0000	1.3
  +++ ossp-pkg/val/VERSION	17 Feb 2003 14:42:19 -0000	1.4
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP val (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP val, Version 0.9.0 (15-Mar-2002)
  +  This is OSSP val, Version 0.9.1 (17-Feb-2003)
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 17 15:45:45 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 35C2E769BE; Mon, 17 Feb 2003 15:45:45 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20030217144545.35C2E769BE@mail.ossp.org>
Date: Mon, 17 Feb 2003 15:45:45 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   17-Feb-2003 15:45:45
  Branch: HEAD                             Handle: 2003021714454202

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/val    index.wml

  Log:
    release OSSP val 0.9.1

  Summary:
    Revision    Changes     Path
    1.57        +1  -0      ossp-web/new/news.txt
    1.53        +1  -1      ossp-web/pkg/lib/index.wml
    1.7         +4  -4      ossp-web/pkg/lib/val/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.56 -r1.57 news.txt
  --- ossp-web/new/news.txt	17 Feb 2003 12:42:14 -0000	1.56
  +++ ossp-web/new/news.txt	17 Feb 2003 14:45:42 -0000	1.57
  @@ -1,4 +1,5 @@
   17-Feb-2003: Released L<GNU pth> 2.0.0
  +17-Feb-2003: Released L<OSSP val> 0.9.1
   17-Feb-2003: Released L<OSSP xds> 0.9.0
   14-Feb-2003: Released L<OSSP var> 1.0.0
   13-Feb-2003: Released T<OSSP lmtp2nntp> 1.2.0
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.52 -r1.53 index.wml
  --- ossp-web/pkg/lib/index.wml	17 Feb 2003 12:42:15 -0000	1.52
  +++ ossp-web/pkg/lib/index.wml	17 Feb 2003 14:45:43 -0000	1.53
  @@ -33,7 +33,7 @@
   			done=100 stable=1.0.0 unstable=none>
     <pkg_item name="val" longname="OSSP val" type="lib"
               desc="Value Access"
  -			done=95 stable=none unstable=0.9.0>
  +			done=95 stable=none unstable=0.9.1>
     <pkg_item name="xds" longname="OSSP xds" type="lib"
               desc="Extensible Data Serialization"
   			done=95 stable=none unstable=0.9.0>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/val/index.wml
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 index.wml
  --- ossp-web/pkg/lib/val/index.wml	2 Oct 2002 12:44:44 -0000	1.6
  +++ ossp-web/pkg/lib/val/index.wml	17 Feb 2003 14:45:44 -0000	1.7
  @@ -27,14 +27,14 @@
   <h2>Authors</h2>
   
   <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  -<pkg_author name="Thomas Lotterer" mail="thomas.lotterer@cw.com">
  +<pkg_author name="Thomas Lotterer" mail="thomas@lotterer.net">
   
   <h2>Status</h2>
   
   <pkg_status
       name="val" assign="rse"
  -    stable="none"    stable_date="none"
  -    unstable="0.9.0"  unstable_date="15-Mar-2002"
  +    stable="none" stable_date="none"
  +    unstable="0.9.1" unstable_date="17-Feb-2003"
   	done=100>
   
   <h2>Source</h2>
  @@ -44,7 +44,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/val/
       directory=$(FTP_ROOT_DIR)/pkg/lib/val/
       files="val-*.tar.gz" 
  -	stable="none" unstable="val-0.9.0.tar.gz">
  +	stable="none" unstable="val-0.9.1.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 17 16:16:42 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 718E3769BE; Mon, 17 Feb 2003 16:16:42 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str/ ChangeLog README str_version.c
Message-Id: <20030217151642.718E3769BE@mail.ossp.org>
Date: Mon, 17 Feb 2003 16:16:42 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-Feb-2003 16:16:42
  Branch: HEAD                             Handle: 2003021715164100

  Modified files:
    ossp-pkg/str            ChangeLog README str_version.c

  Log:
    update version for release

  Summary:
    Revision    Changes     Path
    1.45        +1  -1      ossp-pkg/str/ChangeLog
    1.21        +1  -1      ossp-pkg/str/README
    1.16        +5  -5      ossp-pkg/str/str_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.44 -r1.45 ChangeLog
  --- ossp-pkg/str/ChangeLog	11 Feb 2003 08:47:34 -0000	1.44
  +++ ossp-pkg/str/ChangeLog	17 Feb 2003 15:16:41 -0000	1.45
  @@ -9,7 +9,7 @@
   
    ChangeLog
   
  - Changes between 0.9.7 and 0.9.8 (01-Apr-2002 to xx-Feb-2003):
  + Changes between 0.9.7 and 0.9.8 (01-Apr-2002 to 17-Feb-2003):
    
      *) Added @DEFS@ to $(CFLAGS) in Makefile.in to correctly see things
         like -DHAVE_CONFIG_H stuff during compilation.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/README
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 README
  --- ossp-pkg/str/README	6 Jan 2003 19:13:47 -0000	1.20
  +++ ossp-pkg/str/README	17 Feb 2003 15:16:41 -0000	1.21
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/\__|_|   
   
     OSSP str - String Handling
  -  Version 0.9.8 (06-Jan-2003)
  +  Version 0.9.8 (17-Feb-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str_version.c
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 str_version.c
  --- ossp-pkg/str/str_version.c	6 Jan 2003 19:13:48 -0000	1.15
  +++ ossp-pkg/str/str_version.c	17 Feb 2003 15:16:41 -0000	1.16
  @@ -34,12 +34,12 @@
   str_version_t str_version = {
       0x009208,
       "0.9.8",
  -    "0.9.8 (06-Jan-2003)",
  -    "This is OSSP str, Version 0.9.8 (06-Jan-2003)",
  -    "OSSP str 0.9.8 (06-Jan-2003)",
  +    "0.9.8 (17-Feb-2003)",
  +    "This is OSSP str, Version 0.9.8 (17-Feb-2003)",
  +    "OSSP str 0.9.8 (17-Feb-2003)",
       "OSSP str/0.9.8",
  -    "@(#)OSSP str 0.9.8 (06-Jan-2003)",
  -    "$Id: OSSP str 0.9.8 (06-Jan-2003) $"
  +    "@(#)OSSP str 0.9.8 (17-Feb-2003)",
  +    "$Id: OSSP str 0.9.8 (17-Feb-2003) $"
   };
   
   #endif /* _STR_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 17 16:19:58 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AE39F769BE; Mon, 17 Feb 2003 16:19:57 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20030217151957.AE39F769BE@mail.ossp.org>
Date: Mon, 17 Feb 2003 16:19:57 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   17-Feb-2003 16:19:57
  Branch: HEAD                             Handle: 2003021715195502

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/str    index.wml

  Log:
    release OSSP str 0.9.8

  Summary:
    Revision    Changes     Path
    1.58        +1  -0      ossp-web/new/news.txt
    1.54        +1  -1      ossp-web/pkg/lib/index.wml
    1.6         +2  -2      ossp-web/pkg/lib/str/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.57 -r1.58 news.txt
  --- ossp-web/new/news.txt	17 Feb 2003 14:45:42 -0000	1.57
  +++ ossp-web/new/news.txt	17 Feb 2003 15:19:55 -0000	1.58
  @@ -1,4 +1,5 @@
   17-Feb-2003: Released L<GNU pth> 2.0.0
  +17-Feb-2003: Released L<OSSP str> 0.9.8
   17-Feb-2003: Released L<OSSP val> 0.9.1
   17-Feb-2003: Released L<OSSP xds> 0.9.0
   14-Feb-2003: Released L<OSSP var> 1.0.0
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.53 -r1.54 index.wml
  --- ossp-web/pkg/lib/index.wml	17 Feb 2003 14:45:43 -0000	1.53
  +++ ossp-web/pkg/lib/index.wml	17 Feb 2003 15:19:56 -0000	1.54
  @@ -39,7 +39,7 @@
   			done=95 stable=none unstable=0.9.0>
     <pkg_item name="str" longname="OSSP str" type="lib"
               desc="String Handling"
  -			done=80 stable=none unstable=0.9.7>
  +			done=95 stable=none unstable=0.9.8>
     <pkg_item name="l2" longname="OSSP l2" type="lib"
               desc="Flexible Logging"
   			done=95 stable=none unstable=0.9.1>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/str/index.wml
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 index.wml
  --- ossp-web/pkg/lib/str/index.wml	2 Oct 2002 12:29:45 -0000	1.5
  +++ ossp-web/pkg/lib/str/index.wml	17 Feb 2003 15:19:57 -0000	1.6
  @@ -27,7 +27,7 @@
   <pkg_status
       name="str" assign="rse"
       stable="none"    stable_date="none"
  -    unstable="0.9.7" unstable_date="01-Apr-2002"
  +    unstable="0.9.8" unstable_date="17-Feb-2003"
   	done=80>
   
   <h2>Source</h2>
  @@ -37,7 +37,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/str/
       directory=$(FTP_ROOT_DIR)/pkg/lib/str/
       files="str-*.tar.gz" 
  -	stable="none" unstable="str-0.9.7.tar.gz">
  +	stable="none" unstable="str-0.9.8.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 17 16:20:45 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D52E776A07; Mon, 17 Feb 2003 16:20:44 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/str/ index.wml
Message-Id: <20030217152044.D52E776A07@mail.ossp.org>
Date: Mon, 17 Feb 2003 16:20:44 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   17-Feb-2003 16:20:44
  Branch: HEAD                             Handle: 2003021715204400

  Modified files:
    ossp-web/pkg/lib/str    index.wml

  Log:
    talk about 95%

  Summary:
    Revision    Changes     Path
    1.7         +1  -1      ossp-web/pkg/lib/str/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/str/index.wml
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 index.wml
  --- ossp-web/pkg/lib/str/index.wml	17 Feb 2003 15:19:57 -0000	1.6
  +++ ossp-web/pkg/lib/str/index.wml	17 Feb 2003 15:20:44 -0000	1.7
  @@ -28,7 +28,7 @@
       name="str" assign="rse"
       stable="none"    stable_date="none"
       unstable="0.9.8" unstable_date="17-Feb-2003"
  -	done=80>
  +	done=95>
   
   <h2>Source</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 17 19:17:58 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A52D2769FF; Mon, 17 Feb 2003 19:17:57 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/com/ sponsors.wml
Message-Id: <20030217181757.A52D2769FF@mail.ossp.org>
Date: Mon, 17 Feb 2003 19:17:57 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   17-Feb-2003 19:17:57
  Branch: HEAD                             Handle: 2003021718175600

  Modified files:
    ossp-web/com            sponsors.wml

  Log:
    update for year 2003

  Summary:
    Revision    Changes     Path
    1.6         +2  -2      ossp-web/com/sponsors.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/com/sponsors.wml
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 sponsors.wml
  --- ossp-web/com/sponsors.wml	9 Sep 2002 16:51:09 -0000	1.5
  +++ ossp-web/com/sponsors.wml	17 Feb 2003 18:17:56 -0000	1.6
  @@ -24,7 +24,7 @@
   
   <ul>
     <li><a href="http://www.cw.com/"><img src="$(IMG)/cw.png" alt="Cable & Wireless" align=right border=0></a>
  -      <a href="http://www.cw.com/de/"><b>Cable &amp; Wireless Deutschland GmbH</b></a> (1999-2002)<br>
  +      <a href="http://www.cw.com/de/"><b>Cable &amp; Wireless Deutschland GmbH</b></a> (1999-2003)<br>
         (Hosting Rack-Space, Network Connectivity, Hardware, Manpower)
   </ul>
   
  @@ -34,7 +34,7 @@
   resources worth USD $500 and more.
   
   <ul>
  -  <li><a href="http://www.engelschall.com/"><b>Ralf S. Engelschall</b></a> (1998-2002)<br>
  +  <li><a href="http://www.engelschall.com/"><b>Ralf S. Engelschall</b></a> (1998-2003)<br>
         (Domain Registration, System Administration, Hardware)
     <li><a href="http://www.sdm.de/"><b>sd&m software design & management AG</b></a> (1998)<br>
         (Computing Resources, Network Resources, Manpower) 
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 17 19:18:54 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 64B87769FF; Mon, 17 Feb 2003 19:18:54 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/com/ developers.wml
Message-Id: <20030217181854.64B87769FF@mail.ossp.org>
Date: Mon, 17 Feb 2003 19:18:54 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   17-Feb-2003 19:18:54
  Branch: HEAD                             Handle: 2003021718185300

  Modified files:
    ossp-web/com            developers.wml

  Log:
    add Michael v.E.

  Summary:
    Revision    Changes     Path
    1.5         +1  -0      ossp-web/com/developers.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/com/developers.wml
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 developers.wml
  --- ossp-web/com/developers.wml	19 Aug 2002 11:32:23 -0000	1.4
  +++ ossp-web/com/developers.wml	17 Feb 2003 18:18:53 -0000	1.5
  @@ -18,5 +18,6 @@
      <person "Thomas Lotterer"     "thl@ossp.org" "developer">
      <person "Peter Smej"          "ps@ossp.org"  "developer">
      <person "Michael Schloh"      "ms@ossp.org"  "developer">
  +   <person "Michael van Elst"    "mlelstv@ossp.org" "developer">
   </table>
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 17 20:36:05 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8CEE4769EF; Mon, 17 Feb 2003 20:36:04 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/ex/ ex.png index.wml
Message-Id: <20030217193604.8CEE4769EF@mail.ossp.org>
Date: Mon, 17 Feb 2003 20:36:04 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   17-Feb-2003 20:36:04
  Branch: HEAD                             Handle: 2003021719360300

  Added files:
    ossp-web/pkg/lib/ex     ex.png
  Modified files:
    ossp-web/pkg/lib/ex     index.wml

  Log:
    add baseball (= throw+catch) logo

  Summary:
    Revision    Changes     Path
    1.1         BLOB        ossp-web/pkg/lib/ex/ex.png
    1.10        +6  -4      ossp-web/pkg/lib/ex/index.wml
  ____________________________________________________________________________

  (cd ossp-web/pkg/lib/ex && \
   uudecode <<'@@ .' && \
   xdelta patch ex.png.xdelta /dev/null ex.png && \
   rm -f ex.png.xdelta)
  Index: ossp-web/pkg/lib/ex/ex.png
  ============================================================================
  begin 664 ex.png.xdelta
  M)5A$6C`P-"4````(`!$`$`````````````````````!S:&EE;&$N-C0S-#DN
  M;G5L;'-H:65L82XV-#,T.2YA;&P?BP@````````#'%IW7)+?%V8)CE?%E:"F
  M6):6"\74<H$--2UI:F:)V\I!6:DY`$FSK#1'6JG0MG)0EJ-40-R[J:6IY$IS
  MX,;)C^_OC_=S/^^'>]][[GG./>=Y[N4F\;"#K+2:-`@$DG5RW'=4W%X2/V&2
  M<!`([)#VK$C\`@LD'"*`0&_OQJP>21>_8WP=CQX"@:YM`X&H=!!H621N_X)`
  M5[`@T#@)!-J3!0*IAF6]>O`-!`IZZ;2/<#PRQV=-)+*#:@N6EN0/!)R4`Q)`
  MX%K(%A0:_?:\1X_FXJ&&'UES,PO'@-X8>^`^_XZ>-!B2!,YJ4__X5#178KKF
  M:J*Z$;:]>9;QX!Z?DG./(X*N7MW-^0:"(6^-4"@BP6^[3WS1;<]'HJG9"5&4
  M.VHCW!2WMD0<$'K]V3[G%9^N\,P2DO0`/PZ&2+JL;<P\V,'SF!=]'OZ@Q>BS
  M;F.%K)Y*S)6GF,8L\SC(?%X#J4"_23#%LTAT"3L!-SERA)`=(1Y8$-6_]H5M
  M\O,<0(D3^727DQ5X4ZO]Z(RH!Z@^VST=J4?2ZE@K`WOAV_9?3`SSHF"?U:UX
  M@#^0:?-@&++[>M&/*.#HDQQ@;-M/(,=S`F!OF&`]*<MW:?=N/N#NK,SSMI71
  MY^4FOT1]`PQ1<3&KBE]K.)W@;XM@#)5CSHB92=8VL;C'[[YK"!PK[?/N5/*!
  MKX@L>.T/H@986%D]?^'LF!)4"2?#ZW*=QML?Q$#^&S;M[EXGF.ZW@]LX.R=V
  MORQ&GV6O-[->V]S5?NV]&8L7F5RN?V2"^NE.D_T8,;DSZ0\B"BT>]O"G9=2&
  MB0D.MRY:RM+>8G.'W])0!FCU5_IUFYHDT'+3D[F[]8""(]S.!/[DG`,':2=Q
  MU00/,HE_(IWMF&T<S!".3G[]!%C'^P#3>79^)/]14FK76\A^+1[#RPY5'1?9
  M1O[7>R0Q^WYA)CXV@A:Y"P_BFM%EX7_PF(".]TK%'ZZ8C2HJIY.0R'M^Y1<7
  M4;R?)1::+C]7([<3-96[/E&%UGB0]@6XPA=\@5RM(I%RT?ZITG4*="804PVI
  M#:0)5?_[^0`<4S>!;Y5]3O">D[A%J5$6@["UVE,"P)\D>8KJMR.0^.X2166-
  M4R?7M5"N@+7]'P#QPRA`+SL<7J2)H6+--E8V;LZL_;@I*C4ZTRCX-QJ6V-!A
  MBPVNG+U'2,J]Q__<)?J(W]9%$QJ+K=^UMK&<^:^>OY]"J,BW=509VA`%NP`#
  MO<<&#!;8YOAE=EJEWU:HSG84""(9//AXO[\=1;31='6N]UQB@WR>R?NP6)!Y
  M*S'[`;</G\-?FF8#MPZF`0UW^S?*ID;<8IG?5*@@R$OIK.M&I:MNQB:.^CM-
  M>C^NJA4TG;V5R1<4K@+O+OT!(&N>P'1?#"DU<P3Z"K$?#14CXMEKLBQZ6-HI
  M6CI<O.XU6`Q<U=1[2N>PQ3L&6C(@^B%9*%*/]A4Q?G:"9^VW($L@,.37ABY7
  M]-"N.ZB\/FLHL$$!$J8N`2G3N?["A4DHCUZBC@JM7`9:;VD`K:VMP*T#4YA/
  MUZGN2`PU^W95R8.X=6$]V:]G.]PY,#I1M\/.U'WLH6F,:#Z-R]N=P>>5O`&V
  M*/X!?"Z=!U27#&#G8-LD0\5+0[0W[6H3%>?NJ67ZCM4*YE95$^6+&29KPA6)
  M'('$/AVJF2Y*M+R>SC4M>`S)]Y?%@VC0T87DEX%KEZ)1I48/.CC<NA8FTY?+
  M]`GBD08TVC%O_,&'[R?K'H($")8P=I`6^40M$!CF#,+\6Z>Y[[_+V+_'SM'"
  M#>^(='^/-1$(9DQB5@1\KX/3U>?S?UG@*V$8:NHQN?S4HS<.8/-K!^EJC<`'
  MB0P.`S2S`RF+Q)=_V:G_#4-<]('ZD&C2[1Y>CQ.QXDS4GL90%BPOK#_JDFM=
  M13QCTX2<^?9D5QL\B-_<8<D=6Y@4$?B+8Y/AB?JZ=\'I@BN)QOT;V!CAR@V:
  MBKON1<@QQJ,2.?I;NCX]Q,4JWP#D?TZ9(8[:L\XTM)Q>72W9Y\I</^^TA>G!
  M1D<3ZX]+J?R%?ZY`KV<PT&!L'6BYM&+!6V)S)$%J8)<Q(,?@-G`PIA4(JQ;Y
  MEJ]FFC@Y.<U\GNR)P&_[@<BN`(&O[XJDQ,095D2$;E!(VFMV[O15T1</AJC-
  M6TWT79C-.24Y=(FX7Z9EYH2M-//U#*4Z?4BD@WLLLFW.$7V0R-XHSDD-E\DW
  M!R?M0F$NRL+%R1SFV[N[8OSPDU>8[@'G3X%VIW&4W=#\SB_?[P=81J]9[^WY
  MI0Z4V:Y#5Z5A^&K%89)?Y-*<':^R2AY]WR6W:6!HN%4P.*J5V+KF"-=R1B?*
  MSFUZ96IB0E-4,=@?#Q8C;KB^-D)8;/WH,SSI9HMU&6LG1:X/R>T]>E&;-Q/R
  M!FT;N];,FIP/+_>W>O&<OC,N,:6?@K6&_YC'W3J#*NJUY`F$RX&)SB_;L=F/
  M7N$JHY?C"<Y>Z=R&_KO\SK1Q*7S(.R!U%J21(@Z3TOD_13^/O9B.;<4^W7&+
  M0'2Y3]#(%FG]MNP@+_W8F^C*H&![X2M(Y<!<DX\#D,".G"VD[=<MK1^'Z_)6
  M`\M0?](KT=1J'R1RDP]26<6W$_O!/_58E\2)%TQ2I@_U^&]KC,U_DV0\>##<
  MOS!GA8;MVX86TN['@>Z?=UC2E+`XEM-;B$IK3>#>KX:8;R^P/XCN+0F@/@P$
  MC$,W!X"VF?F7$.&;U</@<01;TBKU`>T.76G"\DC4H<1P1"G=%WK^+:BQ3#R!
  M:]6G@(#U4;XJ^.12!]>V/&)2FM<R6HQ6/JZ,BA.M2!PF]U?'2-RJ\A:N#2/V
  MQD4;[PTF;>$]^1"..ND2[$O\>C(0>2_->T#BI"?S/2CX(%5=[T+@X8"@GY?E
  MC_?0`5MX[7\E<7<+2\O#<X;NZA[/'^:I`T],=PX<S7`@:O1Z"F<W5+J'.Z8]
  M0:II+IP`)76$!=3*P@[[@0U],ZR:[CN@E.DO7-F08"FLIO._W3T!K+;;=K\/
  MZC!,]4]Y?-\6)HF9CY$^O_FOJXM%?U-37=,4,JU&N#BV.9%-B<-5QER^P9];
  M72+M3YFV\XG<6-M,?_8,R<OJZ$?I/*_C7(P:J=V6>%\%@6H/S:T7K/'7^U_]
  M_J3&%@FE#L8S9Y6._\N#_Q$[Z7HA&?1AIS+-725I/QHSK%<`"E!6'@B,%?$'
  MPTA/O&'F@YP'&@_NP/`QQ`J9G>'3M"_Z2#;D)A2&K%:4RFC$2Y@CE,/M38R5
  MZ;7NC^7BAPG$>TN;SRODPZY!GQ-\*-YP<<\3TC%PQXVM'T$(20SK^1")%.8`
  MWR<2SM[?W"J:2[Z#B@6!][U=HIYP__'U0C3%NN+=/XO.H^?LQ4PE2<BD0I@=
  MW;0ZAGMTY?>MHMK+Y+C[Q"_@TH`^TYBXI33"Y\Z;_)Z&+D"M]*)[&UP2DV:P
  MMKQ0Q6E[VM+'CKN<SA_L<0.L+*:\RQ<$2E!5*R6>%\EJ0!WKH.=X"9?QO@SK
  MF/^`H7K,;)<__K`9'H3$[SLM&3RYKI!QU-OV?<!V7O.)&VAE?R&JNSN;.]EQ
  M6MX6ZPG[\;28LH;H,C_JZ0(XCUA41=P^9[(R,]C@#'<\+P&E@GRXOHC\IV*D
  M/E=L1`=&C+`I"]>])R?0`(5V]HB;HE_DS+@,[X<Z`[T!4=J37ZK@0S]^@4V%
  MP+_D`*.+(8-PCP`.:,S'VH_JMQE.!=6<X_-D3K=KGCUZCGQ-%+K]F(-;HLT_
  M"Y,8H?".]\9-"Y(S'C6D3J3)3PA,A>/26,=;<SB]U\TXSVIR,K_S<0NFQ)\J
  M-$2RKY^21.)1F^*B5AT7^GZVZ7KU[C:.#/H7`(^5P25.ZKN9Q*S-YWK_KB@;
  MF-HA234`+QO4.U()1%!W_]Q%?_</05#>O?`.U%3,&@_3WE1;6U-3LSC:H67D
  M%RTNZ'VFH.V21=MV]8D^#`V%O0V?D:J.GDGB-O_.Y7/;U`'*QII_]L7Y799W
  MLQ^_E7N'ZM8`7P5?1W6[GT*U:UF!%Q^7*MKM32NQYBW(4]!#_K45:.1^'92X
  MG.3P\]<&W4+^F2:N6+N2UDO3:3>R$)[R?>61F?R)3%5@R=9>43T_^(N*7P!R
  MT,^'!/:(Y/<AX/4,.W2KX7MTW(90SF4?1<RWUNLPS;,IVKMK#IR;N_=H%8TY
  ML2F_JT$,MX%7OYW_'G;LKY[=L5]1&?M_HC.N'$+-!]N@;2MC:LG!H^;D;3%#
  M8Z[D&&Z,N:^'"OW%&4LZ,\-\[QFF-!2!L.*-*66AKR=$HF"P2%0U9;6)^;BU
  M7C#UV2:*5'9]=+J?;4WL6`=+8C:%$L8HT:-#4@5L89YWP"$0JVA5NB!)S+<W
  M!(G\MG_R`)O:I.G7Y!7T=G5J3`5N%.?$FK9C5S<0+:]LI1>6:M+O*ZO2W]U2
  MAAK;:2'GQ-E[7<WS)C091]2(?TT@TD0(#-4=7W?DU8TM4'7LI?>%O>CJRFBP
  MN;".AR"M_$SN$,"N7`J1X;'M[-`;HO4V3KU^,Z>Y"5$J;%YE`R^>&``O.+]N
  M)3]Z1'`Y22.</(0H<&A_T+75L%CM^`F:P88<$N_">7(0^:WH@>=8AV!F00D>
  M=S&*)<^PBVH7(+)'2_M6((?OW?T2#(2HA'!\_JGL/5VYJWL+/,@[YDJ_`?S,
  M?EOR&NV7%79-ROW;6],8Q++<MR;PB1`7<=&<GVLYK;`I8#O\G/^AQ._A(^!'
  M-[W0U91ECN!/772B@ZNMJ?#<K.F^!\DFUNMK-[Q77A@"IGM"@0\M'7OCEYKV
  M"X0W2X^IT0MN8Z'Z^CH+)>\NFI*A/8<.KI0":1.,VVA,X>[4.@/Q/+7ZKR,'
  MIM([!@+V7W4VYG6$,=!3GM6-`A74C)S<+WQ!`^O?'W6XK?D!^$DYS40[.[8I
  MBQ6.F\C+;,,8!,(6=S1^T>JGF)#)E[#D60'U43J3K]R9W=/!Z"?LSI)5>R:>
  M`M9^@V8+3_VEE3\S6;(*W)#W\G9L[B!%SLRKI,8^X!Y,R.+SLR@<#^YM_M<W
  M/4"_736)[)3;2H[J.IZ8TA&&-7@][T<\?L\_-35=XJIW'4UN$!)A1`&7--%U
  MPZ;LC^GEXVH!)'X`BWT7OBP3/&Y"B5G(YJ__RP)4<ML`]=%#OLATI'?JO2P(
  M7$&=G@O%UK/C?)/>?_!I;)+Q[RR=\8\4_='F%0W?`XZ2DO?1#CDHP(TTP:26
  M:5WZBQ`=WF/9%O3=W^LQ4`\.=<('(HEQ#^'&G#_3HT4LN^.`S^"/_'P*O(:/
  MI#[<C/JFT1L#:%'O+J^,0<LGI2^!'.7,KM=QVUHX<L'V\;]>8$"S#T!8OE-^
  MMLFW_58XC>BVS^&+X_27^%?.^!@XADKR[^U?*F;DC@[],8FYMK23;LXJ$\VT
  MX<@M'O9''O$7!D\#]FG2@,^LQH"YOHR^%51&W0J*Z+00<W9(@U6^C7ZA-UQ-
  MS4<XL["5U_J.G,@4YHO2E5;Q"1;YV9`/(QMBQEAI<,65X<,._]Y,29,>YV2L
  MW.'_O;N9U%_T\!?4"*BNI,A>!2DIX:"J#&3VNOS?U6F&=HB;PF[9Q,"R=FPO
  M.U+2<_#1IW+<Y7DC3_DY)/19X8JJF!#KDU+#AG_GAE3MUF),=KQQ]/T#*WU?
  MIWP%G>=I)Q6ZIS6_V2]2OK6DTEI#K$,H$IO.%0#C#V<!8T85O&$I1<L.W?OT
  M*.INR"DN>:![X9]^1]5IF&$<(>18)[/&D`JR+YXAK-L0%1[+M%FX5!^NO^2I
  MI>6._M?X%ZR"@_MWF>;TODOEUFY-XT\497*,0`CL81JWI6V.POOR@6UD(ZJ8
  M;9R4[[K7"EN>D(,^4]E0Q%`[#6';O(@MZM\^929X-,,7;,K7F^KKF^?_=861
  M"_5T=&I7IGY;%>R-`E(_W_4B]I^!_^G!KT$Q5-:'<_@$`^-O/@IPQR69XT>I
  M'KT30!+M0`!\W]9L!;7+&.<-O.$*\&%"2ID">25.;YYW]`[`]P4D[%H@;(K?
  M>9S("M<^==M:<IX._M*+.`57(\&?=QH3$529LU30EM+O\*.(EDHFDBJ!PV4$
  M^.!A?%>]=9GQT\KBA*QC<?VB)1PN>?6DN*Y,"XT*.2D=Q>C=D?M-##:6%S8K
  M695UVIWO$4M7G93L(U!QK3\S,#DHDQZJ>4;KTE)SU&'SJU?A<:3ECB9>`SE`
  M9`OWC4;``S:9)W:Y:F$;+Z"HNH>H"]RMYD9@Q-50[NJS7^(OF2T,+;D6HW8O
  MUV[855?.C=;<AY@W4)&DF0YXT2["%22+"VBN545.2+*,5MHPV[>!B]+[*F-X
  M&(/MK1Q=#`=C]%*RJ`P_F;1DK(6S1I26VU\X>5!&,MENZX_-8F*CY`KQO34Y
  M]*NTY.5B\->W"[+^0J#@4A_[FK2F9D7XH!SO:4,8=SS4;KD&T]Q0C]E1WX;9
  M4M,@F/H=F!C63\'I[4PRI<*-\#9ZW;`Z5Q(C-27KCK8Y3LY]_[FSGR/:R+#[
  M;]E4?X-\$"BSQ#)]-QYT9,*)Y)"4Z>`^M33-\$I@>/Y<%\X]TLT1455F6Q!=
  MZ&<G9%%W@SV:R3.]A\B,-+09J%7JMM,FP3R45W5C&BUGMP:?9E.Q^=.0"U2Z
  MVB`K3K9@-,"PK3WU/GK>IMPG"LD:G%?HO@BYDT?=&>1^\1;_E!C2GG1\"JOZ
  M8[A+U+7]7TRN;)8E@(]<3'0H"S/-KEC!65?&W>?_>*X/1$S;!@Z,#L+*\(3A
  MGG5=!NJNW3IX:H'[,0?C*MCK$.O]]#7F8N?[-`UY'-28%2'_L'=H<)B$5!D.
  M_-M_.5F[[LAB1P;4N"5N8V5!(5_#["?TO#UMQ97Y>`LQ-OYH_G]"T36^'IM]
  M:G<<Y)PY9OW?]ZIT#XN4$$O18$]@*?UT&:Z2(DK0UC/*X8\LXX`LH]Z`U$P5
  M?^'B@A4OJ]@.%=H;VT">&C9.G*9LT'UA51=DY@"#%[TJEB@_G4C.[QVGT-KP
  M+B8I\89%,=9S=X2$=?ORQ+!JXE?7:OIW?1F6*:K\4W%..>E?$T6T495P;5;A
  M&X^)VO^J3!S)+W79L9$O%H?&JV4Z0KT&RB_-2@Z6-!BCS!8^H"X7_D;)A7FT
  M8W;ND#(`GQ)SS=W_G7XUDT4C(8)G4X4]'6BY_K5&`:@[YD;4'V,/?[#S?<PO
  M_/5,PJ&[602/@ZF$$\<R^35C+1S(387>3Y!M_[0XUE%+?$1BL;B=6]=*3&%O
  MT-N<2]*%NX8YR0>#)FC2VIU!\"`J^-L6_#D9L=].NN:=[8_[]_G.W&O]36&^
  MY7.S5O2R.Q#ZNX^*]!"B-.]5B#/*S&4271T7T\*I;VHC+]2"$P-3\DQCU@0)
  M_.%_'0""JADSKT+Y+3.'"<IQH#$2_CLNS7$@M!V]>O4D7.J<2:*N/`/GV)2$
  MR_\[#GZ3UL`)W9!/#']9;+*V/)?BO3H<`506W`9*C49:[H=^(@M[EJ8['N==
  MW_:3T;@H-K`YJ?G&J$5PT<3IRY%+K^N`U;N]WMVB(=6]T;<UZ6$'M:%!2/1Q
  M)G5/-09!.]AJT66$M8X5PJR/S<AVIUM='%6R?/86'`+>GOA&:\.DO*4$EQ.Y
  MF,ZUOY7KW?&4`83%K?E$+JT;TF^^!M&?O=>C,Y.PO)_I6>AN]P?HJ;ZH5O+T
  ME!+9Z4W1*U">.V1;H$4(&*X--H*'^.<E[35-RPKKJT8T/ZHDRL?YX_5#Q)JP
  M;PYT#2\<^?S]1G'>GAKR\KA2HA9;A&LUN.R'#;_J2_(?]7$WO;*)EUNRRGF[
  M,=-VC!2X*LL[0[HBT'2?*`&EJP29R67L\XYRI6OYF`6Q@H\^1//&$*X<6LGR
  MBG/BC910;/#'Q7B^?.?,%9-$8+1OS3MR<5R?=WN7*LKCQ;2$ZG'KRAQ._`$J
  MP>-`!N'`2:![\P878Z3=BM'6AFD:_AD@^9*\`P(>GE0_4P,ZUQO_<)X)-]*]
  M-B3VLW7%V6[;&=[&KF2AO,;'=M;2AD5BNYDS''I:54`%Y3^2&,?<VA$$M?EX
  M@S\YIPM$%/?#7"7($$.H[!=#VP5X#HR0<,O`8FLG3X2^_WW95.BW9")(BE?U
  MPZZM+\AV,Q`=4]B8J#E0;UG@J$*`9571G<>%[W*]^=P2X,B/1.;;K7`9)0F2
  M%F/SA+FW">E"TJ-'M.0L^=[/X#M!DK=:3"JAB]E>-K%KE/5A2NX_BTG0@@5>
  M`AET=U#6[`!WOP8>1*.O=I7)OV;T68^RKRZ`R_MV"H[^=PP14$Z.E"\?@BVD
  M15W70>7U6DJ$AMI$"R4UZ$P(1-EQ-)1](RL;DV*[NLCP/OA"@IY6M(/WL3I8
  M@&SM*DM!'2X*"2R/\C-AO17<H=%=;X.[#TO\,Y'2"W2/6(?RAF.34:5]J^V8
  M+8U@HUH\%+46#QF`R`T1B"6N^..W:&Y$P$Q._L<;W['6OSZ^^8@[^[7UX'4&
  M^3X057,Q:;Q[DJ3BW=Q:TRP8^*DJJ'UU@8R%EE$ED<FTN2TXEN[&R(PAZW&9
  M44Y`Y-SX9J@^MB-&-/.(;XG]^5LH4/7<A<EZ5O/G#P#7?`"\H*D,[`=9;Y$&
  M9M";@=^[O('9:Z'`1.4307=LW!R67I"G2[\?"VLT!.KKSP->[)B$VU]`-C(>
  M(:!9/4EZ0#%^<Y2WTPG2C3/9_+F>42`^AZ*#QL2:Q@4!\:\5B+%2KP]NB#59
  M=SKG1_/;8JU^+`ML@PK:*:<)@7T_,NW%]A:X-`8*%\<,(]WY/]=/`_)3UI!-
  MIG;<IU>8F@4OZ3OI\CBE<JFK"RM*B0MNMB;=32R<7I`:MC+ZT@,"T>,&S1DO
  M;>U_;?2K5^)21Y'IQ!FBE$&N'58X[(JPJ"9HKLW-R41JS+4\6@5<:=\S*],`
  M2ZUWK'?Q-@BUUY`[";0#VN7"!-H.YUO\ED^!`+.1O[:P3TDMO#'\$+-&TFSG
  M?_J(TY3IZK),>UB19:$EK[X7P[KD]J4$OOV&'9!W,V'@[=MI1I])9<SE+/[$
  MVQ)`7I,-76R)0OND05#O;OWAO`6?_]G:(VW@4A0'<9-G)IQ=O'<':+!H]XM<
  M_0N)#)(QTX&KE0ZI'/$C=V37((]77^?_N_&28[T#HAGHZ^,=&$D.W<H;BJ'`
  M34A@Z"PF_YF$O[IF'%@0O#.((ZG<S3SRFN%E1TTWT,NTH<R,;(,^*9%YY`?]
  M/&!D@P<]_I:>_-I:U)2?CXNWEO2P;*BI!VMB]E1$Z_.2`XO1MPM=4,I77-":
  MORLYY/&!B^0)VOR<X!(X75FI6P,IZC(FG5M>LX$&I<[,/NH'DC\JHB:>G*=I
  MBU#?(@.1][_[=J:G^W=7GMM$SX_7Y#6XR:/:)SVXY"GA*;CLF2O,"@HZDF:#
  M/!RJ24J#74.Z?Z1GO0']ANP$^7\HY#:M+/`N`%ZVE0'E,W_7QUI7EB\\=E+^
  M=E?B#H$Z?H@L(XFA$JV7YQ=?#>EF76T#/X]*11"2@_%;O3"NSGKG38)S+'()
  M]@=OTUR)J>#W[3*>E\!S,GK7"0DRC1>9Q`W$,SM*I'RP5"RTA1VU_)!VYXZ*
  M^SV1MU"P(68'6")^\'#-$WM@BZ(B:;5B64C[7=0_8+*_FZS5&(+I6-]8WAPL
  M9Z5J3&<^,Z5??ZW"^WIA%7W6IESZMG>1Z&O6]&FSB.$B=<>\&.D%G:"!81P>
  MQ+61\OC-E3;X(C/[+F%==O=9^I<]JL6@R"^:[X.1&:K"_3K:V_2(<CKP(B_1
  M!C@Z#?U7CZ@-'C>.5Y/%+(AI2Y)F_F'0#*%)41F%N3(`@FRSPVCY:39J9.])
  M17"7#Q,A[FUD6KJ>#-8NOEM$=9IO^N!+DF>#-]TJJ/1AA.Q]\PN%N7,I5;=_
  M2YU.^4XQIPYNV_/C9F'"0PBC.-<-]\YO!=Z<DJ(%ZGD1@8I1-.7"12L;LNZN
  M3?&&B"O4W5$)G&PI]ZHUX=HFLU_-''T#68/@:I`S.Q#HIR:HJ;*^MACJR0%1
  MFBQ?+LCZ]XK\!,VKWPZW)IS51'7W<^[(IS90UH72>2+$E8*PG#T<`7_R-%S6
  M%Y?HAE^R;#AA,N&U:VRO^W+:X?Q/!.TEV?&W#8X+PQ%44,V($Q)AIK.=B`[)
  MFQT<_AJCK:UY3Q"_)]%MJ9BZ]W138R9_<O`?X)8R"6NX7OI<G_<J]P*W:>'7
  M<`])G-UPM!.I>KPG>>9P,$$3;M6/%SQL[!F5P^F=?P1ZE%#,<9J9^^0&_)D=
  M!Y:*\^`_:(H`<_@2\_,A$_3NQ#<O74T:W[RFEK0L*XVBTL[_0MM67:LEC_Z1
  M2ERXL,0^$SM\S)C5A+C@4'.?)*8[Q)0AM-G8!DPL5:J0V0Z$!3F].=K(D[K'
  M,:5D&:>4?@8[_\*KI)NBC85'1_I;J5(9#A)U?ARG0TW=N?SZ>Q\&"`%$PMS@
  M7+2`::8W$I6PC6:R",Z!X'W73-5>`/)&6A+7B&J>24E-%^+=R-:?KLCEW=X=
  M)2$JSK-8^KYQ(<S\;*1P69MU([[/!+YK?_7>]/%C09<2RJZ)B:$715%'<F<B
  MX8I<T)!*AC9AEV40;-,/V^LI'VLVG09%_[L=$Q-C<$EQS7J[=,Z>8(`"T^R+
  MVVG8V,&]O,YUV'0"K1EPA'"8&RW?3U^`/"H6;9[\)O*JGA>(OI;U,RJ%:Z.+
  MHQ07M]T2L+C>Z)6IKPR[OYMW*8-.M\[(JEWH8**&")%LL4Z4O`-@[6V@MTYT
  MZR@7:+>V4=T+&Z3K6B^9IEFGY(DS#Q65[Q\O`;.ST_K7D,+`PGUN@K`I\3Y(
  M\V+PSN4XO,V<PKC)4((..1H$2>KFRV?3'Z"16UM8%R]?-G_W\O-RJZ/FC05J
  M=FJKPZ+RNQOX^3#XM^\FK/TUF$6+?,M@,_5MNZ$PY'/HJ<:W=;?W\;I9VZP+
  M@/R6*%)3#OJ0ULH^7IC9FLQ!7N)?$7Z&`K?>.B9652E<_P.*6(!C+?W4.[@R
  MCRL!@@3A7TC]E15;,)6WMK149L;ZW=34S)5Y6`>5S7X;?U11EZT3*9#J[AKR
  M\1Y<.7#("OS_GFOC<DJZ[%K*IJN:'T\!2/Q\[A@7$A<KJEU;76TX9\>F`%%S
  M`D4[G(SZ5D9VC5:<26;<)KF^\Z2>)6/O8V0H40<"0_ZVD7)YK<&1>_^E"J=>
  MYF7WUGGDQ_`;%_B/'Z0*8ZT^F@QAQ[9#I-5Y(ZBNO#']]D<3=Q>>[1'07WZ*
  M6'_.ZN!!GWO3.0&;95C@C=&6'H?[G,.7OKZ>@NB>-#??+M.!)._5,"N`3!C1
  M`HMJE=]S8FP5=I`>+4JPWFY`>QT1AC\D"L42]O"R[N.`%I?NDS!0E!C1H*DF
  M+:\^>.C#U-+%AJ[BVP\#%@<.6.6[S0I_[(<[[>]\.+89Z&?'!@H7YE3I#XO,
  M6=IQ]PG'722[SXT$(M/O>R.1Z7"+/X2JO#>Z\J:1V]U$Z5\N0[Y_V#=\+E57
  M[+B`/-@DY5.4WU@$R37A4,\O.K^KK`.(,,XE82]+^797L!C\Y:]N0`JCTC]R
  ME:_;K6U'$?D.#/I(&/?`9M@;:PT<;G,CIK&EGOE$KX84Y%W+O##:(EALFJ1$
  M5?5$A10:BEQSK&6_Z7&L<+*F,AAJ_I03<53=/14UF7,B9K:[;VNKU/`5(*)=
  M"R+O25NAAWFQH1U9E=>6Z+0$='971@+WZ47F;OE.\JWKUS'EQV35=HF6!U5Y
  M<UE:Z"G;]6;2$\-F3ET37,UIC3))3_6_ZKUP".[8@CB^0)76+3"1^0\2_AF/
  M6[*@.90%-B5V_Z;5F>5=ZHABO<C\@87UKUU%&I[/BRZH<O2TB^O)8YV;$KLZ
  M&#C/ZL@L_L"')>#'^!I08]\+'%5<&ZC+88O6H%_L4&?9J^V"Q;FPQ`\OO6A9
  M+^/K+WI?,%S^B4+;YD5+E3J?6K<>S.R8]:FLK-2JK:MC]U6$CVY-"WQ[31E#
  M=5S4>8>@Q*YR)-5,H%&"WU_UU?-^6XZO#M38;H\C<<$>P_+C=II6Y#1^0TK_
  MP+)3Q%83`=7,2EVFFSX:6A5HN:#VY13U$$0;FIJM:*S$NY,B0E6O;<@L3M`_
  MR:/WG3AQQVXO*#]:XLO"/?#GR1J!'AYT;\))V8$LM888L;DITZ/;5Q'K`UUZ
  MJJZ*,FL[@S+2^MDNF&TZ1JX>'!R&I0S1TK8TAG=XQ08(A<NJO,(N._14W`8B
  MSR:QS:MFN]^]4<-I\'='LJEIMF.X:<SZ#*+RJ:/]3`F$>#`^)2MK[FN@X/PA
  M][V;+[R3D,2\LY&Z3:AJ6[\Y(Q&Z4^)MQ4^7P*6P0.)W'$AU.<RK&E9L+-%V
  MCVHMJ<:"A&3MOK:JQ&N9%G$>A1%`E?EH]_*U]24MVR/S4ZI^3T[FI-\DQ#]Z
  M0#B5B+`^\_*97CWY7[NS(/A#ZLCISEN'"?D(PAF#H:)-!P@P)'Y?M*([D_7N
  M7;@H[FJLU[^L)>-;89IG:VN,M[1/:&UN985.:<!36)A$BPY-W(3G)ZG*>TA8
  M7[6(RQI<5!7.[S;X@:?*_HJ&%:J"ZI3EL7")GP]0[_TKT,+(;FZ/%B%!G@V2
  MIS-9(-X'_25.WF^14)>>@D0$)4OJ?CMF333/UV^XSB=C0)*8RCQ82"C(O"1N
  M?6TE3\G=9Z/R7<3(RHTL>8G@TZ4H]]GU`.Q;<V_BEUV^D2*^/F_CT".N"5S-
  M*U;X5Y:7@/!":<82SIR[#9#R)`H3$$V?@F3L7Z=Y4=`Y51-H6)T.^O!T?X-@
  MY3LB\5%9GDGOM=D$_M1+]H!ULW#ACIJ,#$Y&%QFSL2;Q8\<-0QGZ@A,?A*$*
  MKBD.$4C.^S=$;#NOZLKHRIFVP1XC=ER<KT`RQ2=R1K")-]GBQIU3KO;N`RR,
  M//TB18M;RTG@$_):E'6Z<1P53+P=/ZO12,>6%DGJTS,?FT4>5C3[?/[/4!W9
  M[]^>Q!#UQ7@9?>*KU8U_6O"S<@&D-Z/RD;(U_?WL4POO=PFG;",!M0W\5*1O
  MH2+XOS,4K]]642O\NM@#NC^NX$*\/MPEG#R;1NBJN<7O>9D";#EZ$-"5UPAD
  M77WK.Z"@#)_VA\E*TT_NG[:=T]#XPXRY$5(%,@@@-)U(?'23>]Q!PU/UE]4#
  M;&7D[&WON2?+`(,=$XC<-`37[9)GQ)F2WYF:5"Y+-S5NT;@-(.3/^A]-.Y9I
  M&3'S-1S^C:]<D"=F$@7GA/P$PPOR!O],=[.\)8XY?'4AOX.=Z-3JJ_0;&%'U
  M*X\;!]'OWC.G6[(T8Y8%FKP>BVDN3U3<'^==+IPRKB2!H^KW@M/LO*.0GO&0
  M-Y!.P$P&^X-0\HWY8##\I1$N1N*:G)^\O`4BL@XAV>@TA]-K$ICNN_8/>UD'
  M95(I6M;R;/[H\?HTEC:+\$%)V)(2I[3$C"RI2;5,KB&WIP([\)-^`PBW\`P0
  MKJW:\08_+:$]:P;1H0PKB*:6Q'<Z\TPP\WE;AY8=>.0W.]5?KYC]5+V!-<B5
  M)[];$ZHKI/=3[)^XW4NYR:][XPI4<N+AQ^NHU/QRK.5^JG"[>0"@12M\YF5'
  M,;6.A@2S1"L\TM86+IE?YPI?M7([\8"6!X-+!P-2]X--0&()$SF[0,>=E3>>
  M.B,0C%RIK[C004]>TJ&<@4>+B*2G*X;TG$1;7KM*,LKZ:3KG:T!*Z&_0Z%XD
  MR/!V^=J*JKD51Q.663!K[0(P]U=X&MP>L(X>_QZ6*,,Y#KIUIK-&1RFS'PB>
  M*`#@]T>`8H:-?W?9.H;.!`7-WKA)<#ITDS];<0%8XY06F&+W4E9G[[01W4X,
  M?5O^IX5&0OU9?LE'[XAU[5<VFW*=E%.64E0`*Q6BY3=_;`6IQ:J.!'BS+BT%
  M6%9<4(I$+Z[K!Z(UUNB<<"7YHES$#<'+CGZN<[-MS)I4D5PG.'\>!B82H.<K
  MDL)-3"JAYM7+C\=4,YZ=.1&)JC3T1Q6$R%(SUQT2JTY?Q7E6D:'6CV1-M=X_
  M&%I(=ANH4]28,``@^(A8Z*UMJVI"4TQ]PD\T^?C6_V[(U@?#!5?-2*M?9[_3
  M+UB/RD\'1JZ-6T5";S+*%"+SS]J?O,]??],`-%\+&%B6Z3Q?Q^AGXZP_BI1[
  MGX#;:)Y1<DZO&P_A)#0/P*/.!K#<*>],](IQP381]_A3+6Y`3\H$B95!\F^\
  MG!&`5/CCAU14(%E>63/E#08R.%'B_4\@G!4<Q76>4A-7681%]W,=&"IC2(+[
  MO/RV7O$>*RMU]4VN3X:<J2`?G^$AA#$\\LKT_)!#69&I9SDYA3]QP1'^YP_?
  MNSR6KT,O>&@$#7+&!6U`8'%QHGJ!2O<O4`@)$D9?WWC$M_FULIDH(>\!WB+1
  MFAI8=AB4V\/!%`X##[_#.ZXY7:C`'N]ZCKT<\HF'3,]L)D^MV21&<WZT.I!V
  M2)LJ9017E..3L[JILI"S@HD24.?7?K8(AHA/Q6I!$:JZ#D0250,Z/F$:_'V/
  MAAAJ)77=_@[7XBE3FXHX^]4QN@/0T1^#,'^%0EM7MJ*'OIFA+Q><0>?U54CW
  MV<L^9((/=8K-O<OG?4KA:-9Z.1Y=GX=6.DKMWN05(^H@CANU8*-[Y."R/4%P
  MDJ]8Y*V!71_Q3L:6/SL$E@]Q=_A@ZM(3ET';['[">F4>X7F%:M/(;>>TM<CF
  MG<Q*O1>0>C]+(FL^S?0/YR22E6$7GL9M_X)7:4IW3S?`@V@RFJ3PMLG?+0T:
  MS'5B5]\:)`R;E9H>&'EM:5.DN_W1(W3"\;,R$YC.T.J4Z3YP\FH8J8'J,[<9
  M:U=C+=E\GKFS]L3=7.VJ5UD$^^]PZ]\(CV%N:[U$&>K]7:K743J__K,_\+*T
  MF$2^W>J;_<G7@G[KOF&W2W>S_%G-.,$?2;G04$&]4JHZ_O1C?/1>_&8(^''_
  M=OS@52SFY`COAS1GU%ZL7R8&1\ON&E5$#TOSZ`W3:$MJ48@S%NZFLGW*&TB9
  M[O5)/6D!7FP,H[W\P*8LUPK&>+HL!*%II,6--",'Q+J[0HZG_I4QP5WN^.N'
  M=#.'%D^!"GO%(:0<4Z(@*7#*IZ7D*+B9^G6:?9`HEE=$2$@BJ3\PE90EJ8\*
  M8\;84Y=,R)?F3`722=0N`;59HE/Y,>L90`?)WU#6TM(*[@'K0GT^@:W-Q<7C
  MDD8][T).?W6<;^0"7Y<W6"Q"76XU1!<Q;&O(,YP#\(OH4P(-[?P(\$-[T2S?
  MAC?JZL6UB>H\FO72F(WM%:VI]FG!O(D+3-*`7-X*'-SY6D[NK`)6_3T3?)UP
  MR:6U8.`[)H"["VCJJP:6.@I\LX^I@\P9CVXH54)@,/Q;!(^I<HKY0R7(24[/
  MG!*S#O.(@SL7>0))(=_(KF(%D0UV23-@:B>Y<IZ<.9V*#L[.>0C'/GN&WN>?
  MP3WVFWFO1*O?EBXO!"_`\9^VL*$R&L0ZX$(-K0U2KY//>7!Z<YU@8N0(*_OE
  M,20]];8FCS?WB)H;:@0/."DG^&:E=U*LK@L[(;O4ME36H'6&3G"2882WPG]=
  M88WUNS'JE1N@C^Z0]]*PC-=QT'.II^MJ]Y&:,I0>B7F^9"MHDKD.:?5UI;[]
  MZZTMX^6,^.4$.ZC&_+R+&!RWNJ:0?5P[TTZ=!5V;;;,0(B6"MJE*<NXSGE\M
  M\NYD.8/N9.-RHH4P@_NJF[B"X<F]K)<<IR4M[([9FW0;.8CNV0T_HLD5A+'B
  M]6ZN](/;\?5;DN`5T,M$6GR>822ZO6.:@::!Y?[=Y*09Q,C*-VI009#HM'0W
  M@=;?`5W2YA9F6`"H;V*!OR`#]T:?$/C`B6F@[UG37E6PQ44ON@RL<WSH47$<
  M-OO@.YS.Z9LF.E9-)I%Z%^.M*C%K*]PHP4X#<Y*3]*RD7OUV`Z\:UI7S8-X"
  M78:3!PI!P@Q)\=M\4QL(3JCW6`5E7^;<?CPHPYJP2,<&.3_/>"@%9>1K1$JU
  M#Y[NRBX,GMB'0LIDDN:>"5[#,-1L?(\:]4B'CM&.5H&4NVQ2RPZ3&-!]9H>6
  M#21LVXWAFV&,?EQE[():Y>997L,T4#;-]B5W*@2PRD[Z$XE(Q)M/J_"TRP14
  M1F6?3;7D53.='QO81O5(:$^5#[#'"#U@?^..,^B/5)`W3#HC.3J+UO4A?D\?
  M!H??IC_KH=VIJ-:Y4P$Y,J(:0+1X!RN\O]9"S<8DGM@JR!;3E>V=U;+;?)?.
  M7]SA!+>S(<`/:X))(R,D%ED>=!KX!9:1_IX2YH6+61%*6#^;4<E67?B@@S((
  M!M!^F<K40P5:`W?JF0'J0&4<6:6W>GU&RK2YOK59JFAK190$:K%#'S;2T8;L
  M,+%_)Z>7$A<MRN#_+:H:^)*9J?*^=AC!^C5PW4#D%_^^BI`G85@:N32_B==6
  MXB#.@F_*-.-(>)>AFNW7^(9B^N(#.52>M.-!1/+!EHT31^Z3!D`_G)E58D(8
  MXX=,.RD1."O>"";6%1%:UB@`4C05`,A5GTV]\NZED6F.]1*JL@+]K2=U,``V
  M^CGOXV'!W5X[-IL^IZVWG:N/B9VCM>%);DT[E#\>4WU'E1KB5B6K<8+/VFHR
  M1RU1>"L*_D+O*68>S/@<]/XL<Z)&=PN/>6Z$@WE:M#J]L?[)#D5\N79DS^?_
  M_K-?P.!PC3$[%]SL/>*7^1]PP,:,U(!L-K,J)8?3&KO<;9OXR$*3ILKKB8J"
  M^#YB\&OX54!9F*U?Y/**#!UII[XW%615/A4CG%5G22_S6%,KJHF4FSL`7.DT
  M`M'J1M*&GA^CGHR=@<B4/HC]R5PT+7^V+IR5%F]J7501N.<#LS"U-Z:2,]0L
  M<?96?7N=;)$Z05-"`I2/C5F:,,J6]?`O/'=>=OS^>L.HD]BAM,T=#5S]\I0[
  M=![TFU\ZD8B8MAR&;;?H'!]P'@W#_AU_@PUZF$TWW/TQ=BOOJVXQ]WO2PUN6
  M,?OD8)??9Z-:J88O7W;8F6A4BS*]XV)W[G4\:T-G/MO#2^YQ0`MI(6Z=RY>8
  M2@/XYQ-+'<6HJ9S>5G+0W!XR0DV9KL'1:6Z7^'6R!9H'0)ZC.A_:$&<W(;.@
  M+[!7$CO"J)OAI,SZ.N,UQHVLE+'1G@A6O++O,['F&%AWLKV8>=7[IK-FC/V?
  M@3.%&!XAME%]M!U;+OQHFN2X@[JY+.+W3O+Z-B.C1HS!=LA4Z%N\:F]\FD+^
  MK<^?W0)3TZZUD,[7-++"^Z\D*NGZH@L*OU'7OY#),I+?/&.6YW>S5"XG\B>*
  MAH'`NSD!Q*.9ODBD`JWX*'QX+W&9(UFXE1`*R52Q/_IZ8/A56<>4KV6EKS']
  M5>YP?XJ6W88WWJP9_;D;`(&O]WH$?HPC;Q1'=$R9T.V!XY[T']]IXZUA##OJ
  M7$WUH1[4\5V9Z'TZSSF3CL0JB?/[.)LV:+>6[-AQM)Y/8H4`3F9'K\,U6IA4
  MX?P,CE78)-_W6!]3BPCVDR&\EB99H=_;*_IMU].G0E#'M>)[0<ULYIJD#_WJ
  ML/-K#U";B"OX.QN7&-$Q37^=KR7W^=`A"MX9JW#Z*"$90=`OL17W`"/QC5NA
  M(E&XDQ!;8MTG=U#$C&UAID*C!%\_N0$=6KV!`DD9<#0>[P+OEK9WN4'UT.)\
  MW.3)B)=;!;\"/P"?A\??OU-SV@#?$*]A^*8`<N9>JW1!=P4F#V1NBY>Y3``#
  MLY8QHQ8LL@]\\AOT8T*R5P9_<K"%8QUU@S_R@`>$G:WT([XC1W.ITJEN2=1S
  M5)"]UKSWF1[-Q3,>^V^@A\C$I'B-E9&Q6#C!9(=@)<PH/Y"#:`;)*!&3Z"L/
  M!IXS.I^;LJY(8FZ8VL_M])/ZZT6FJ[^0RU%&*U1M23V%J6(EK$_T0E+-]96"
  M"O7M+$%G?[,;!2KN9V-$*_<('FU"RC[W\5LMQ1N>\`,Z$Y&UJIW9,?`[35[_
  MW[_44Z=V1WKWQ&V8-+F[VU2%_RFOO&^BI.<:;S"@M`G1P'$ER4"5CS$_#`P@
  MP9NFF3R`($.U@Z@CF:\3<]-5K8\!BJN"/V#+DP0YB2B4N#Z@P&]/4=OV$Z'J
  MQ_?3OE''O['9:&[/&"$/T69?0O5=M(O<81YT<X?C[^15-W1HGIW,Q`7(:7*!
  M-4-3+`6EYC$&BQN/O<E!4!CRFDN\,.?"GBVN%\FL"S)0&?5.V[C.T+Q/;L8X
  MO:`@4TGG1MJ2_4&](.J_HZDW\#+!/ZG:ZZ.C%H[.^XB0;""*NPWSU]W%O94\
  M>Y-:QQ^31I5P#EOY;1O.BB!U4-40&/EX'Q6_34EQ"W_AO`]?=:DV6]")2\5>
  M.&&`N4EEU.5)BK__W.O"0(:7N//X+%7M!\OP$!.U#@.>]8M#WE9GV>OPR16O
  MK^_TIT(5IZ=[/NZF_O(#/B[2!CHE#!<\=X7#+0,\H:<X)E%!ZUL2NXS[387U
  M+^-]_WY_^FC@J(+RF]Z8&M('YAQ"N,\?=;9WM_Q9Z16E[&^PY\>IA?=[!NK-
  M@Q=P0A<BR1QL44,#+ZU-^9._3BZDWP"*CCP`_KV(,.E>E<#U[OYPA]_[F>>U
  MZ!4;+F%H7/-C<'W_77&FJS'_`]BRWNKAF@=:/D#K<EI%50:3;0\((1[$2ZM2
  M!OYWK-/0[2$,GD"X>`BN&1<')UQT2HQV,Z*]07;2PIB'_(](J``-I0:!Y5<F
  MC>CT,OW(P5O9.>(5$>00N9)<N,N[XKQ>Q-7BXVC\5_F.J=_P,.OT##>_R$M+
  MYN5[P&#B]YIVKI3MHL)Q2O'#W7/]=5VB31-5PC7S-`2A4)/H+]43(+G3GPWQ
  MG37&@[PC9^O2K2"*ICLQLLP?N"!"<>MMQ92;/1:;TT8'`_R_?4L-N&TT[0/+
  ME00WXSJFO0([WRX$1D:)3",;O^QX<9LO3#P'!*;DP):.YU2>05TMZ.=RP/.6
  M00*I]U&R9M/@A^:4-:%LI-*._'`,/-A*RX;\4%O;[I'WW)\$P#4OEI3_]Q]T
  M>[A3XJ?`)6QOQ>5-[D=EUGL^GA.5-5#*LR;9`E@4U$)O!%]G$[1#;V(?E*@^
  MK_ZWTE7L8H'.Y5MRRJ;,A8(:(/5$RU$.O"0IIR"#]:;BUDJ;;\/[9PG=9K?O
  M'/_Y3&4(1>C1T_2T:M%[E2]G%.N=()N_\IDEYU?.BM:&,I!^2[3WB;MYZW/1
  MW#?X:GQ6$`6\Z$9X.LOLJ]Y.7,_]:L799A5TS^YO4,^I0YGL,.OU2T/-/:(&
  MK:JU>71;$Z8L?G;KW^S$+*)\_.RVR(>;A_[#/^(R-+\%XE&I7T_]:*T>LR@-
  M+6BJK:G1J^O8@FEH*'AA5.>[L31J;(((//;BD\6TZ<[7.TTM'52QO9;5$MG6
  M7C0'%<_!@^@BS;,(EQ<IG&B[;VV>:*.)T_*A@./.U]0W!B3Z']$KNL-&=:QH
  M8?`]O2,L_.*[L.7%==VBS%.-SB6,O3;+:FHE%/QS'![$/[T.GI7,+P*UC1_$
  MVTC=.M7Y3+?@F/2>*]+O#=0KS=3?[WN4G)SLM,\]]=#9)*=O^#RW:<'G1Q/U
  MX_9'NZ:K?8=&2`''4_\,KPK'=/\2+49>AL5A8=?&-F)7_FX;',QB5/=%KDQR
  M>[1$QNN!@11A.FVAZ],2@]5AA?%!'B]?2ZS_=2$?X85?'JAJP_RG+VQ=XX?P
  MN:ZA^0[[Q12G;OL$4F[^>Z/>!3>"0QKU1ZKO;LE4PHD3F?^6YT;MV#'+LUFY
  MN7?&1CN\(KL&23,:P;MP>O5X&1V\DXIR^C339T#;Z?^W`)U[-+O!]!P@Z<,H
  MYJ%JTU/6C$K`83FYTFF[.,X\[9,MG@/\WBYY=\&++8B&=XPE_=5_2!C<SOP`
  M81T[A$^0F_!+9Q`72/_9I^U:LQ+$<E(YG#]:CD;*3-[K8O!>?+@7_1=KWFHP
  MG]G\U^S2)Z6*!<CI%+E94/#F/8UT)F1T:T9B[BY0!_O_*S31?T>2L^_[GEA=
  MGD<'7SEB,_OGVGR)?V>Z^<K0#H,?I,P]P6/2$^[984#2_D56PB+&E9Z&##;&
  M66^C6DLA\<^,K/9.Q_(T4JI3-:,LP+.WE6:%,J5R1ENA6T9(%\+CM/E:0-(V
  MPWYF3'=\M+L^0N+_HS(*"O?>E0K^)$5Z&MA]59'YQF%1[]*7?7T$D*_(7I%7
  M@9?ZF0X"[VN3N-X8);,[L;-L/R9:LN<)/#C:/O6G"-7YZX40U/A?CW\+17_W
  M*I9+:\Y+R':7.G/2MCA=Z"+DP2298"]Z.W4UZ=1K@UK$?Q<[!VJKD520FD)>
  M+<*VNKRIUOCQX87PBO_?>WF\M)"7`NWQD\WJ[;=C9].R52_?_\+PZE]F4ZX]
  MAZ2OKFR<`Q'#I%FJ.Y,*$(V!\%L7,#,/XF*BDGT:RN0[6$;7GFX'U6GC0;*-
  MM-!Y>(KQM%_&]RN(E]W36EXLR-9DQFFBVK><P$ARW-Q3W2Y7P;N+Y!+PI[&!
  M[3)!!]4N+RZD6W6A-?LJ&DC#4Q+L;*AYDZ1:G6+:2=\!E2,@V2M>`:.*$P.;
  MTL[`2Y10M$I/R-&_OZ,?@H@:$%AG4E*CV,S57,\>V[FV.0?KUP<6)\0K"-S]
  MSE]V:U!?S1=<*O_+O=_`^<21U)#]80RZP^`^O^^<O2EAFOU^D9<'%85[)%)1
  M04E:EU]P1LN,,3>T!5(FE=<N)_/GN7L'/ESL.W($&-'^SGQE=8`4FKDBFIZF
  M'(Z[.?I^7DM/#@P):G08>ND6$47;S6]@L]D5&VO"">%LW]BP\?09/_^``&_X
  M'2$[DIQ..'!"OM)/Q>R2_,-V4!N?19.G(J]KQ:UNOC;?\#*B&%T=N]'*,3:`
  MY+'!N;)R>T@)R5FJUL^D'YZ#@@62=NI^<$_[.J0I:&-`.K()7,RTC&3\+&;8
  MH92O%&[H/X!+L2[.QCXY@:+^06*H>K\435,'6GH<:CC?0FN:N>%S[3<S(^S8
  M4<V7@WOV)'85]YEF6W6;-N:CL=B-Y39FOJ]<WJ/X5NLXA/'$VOR&3:2:Q.7K
  MLZL681RZB)F,Q>LVKJ])W6XUMD-?AUER>;5,7@]>?[S;/1O5_?,!]U,17HJ1
  MG*X2@U57M4"&%_H.J`X%(C/3?`84D)#B*W!#$G1S7>QPX\EZKWYVI4@P>S:+
  M6GY4MG-,1*=#4%U%/?CCB%ON("1^KY%#=?2UNC\M/0U*87G=Y\D;`FWSSM^A
  M$SF]P!;3UZGI%6P*>+3<+66:ZJ9!"\`O3%2BY<+<6P6"/B7!N]K5%%NL9_3,
  MYLHXC]1<A<K\&RKOAQ@,E1A3U:`CEL86ZMCX;D[/%9U:(?<J?=-M>I:SO2L&
  M\D&),-_2Y87.JZ(;W/UZ8A,I-4L5NEWQ)+S30VW;YJV=SYKMHFQNZ-N4E'WL
  MR-Z%,'.'_I,Z5CFJ"<.'@B29V@KWM/+.E$5%GG,=2S\]6FA;&;?-9QPMD3=M
  M5>4K04^\:<CK&97G(/[>=&S"46O^K/&A0(IF-4D(:3TESZ!X=R\)=86O=^U5
  M`0M>)T=H5>/(X6_CW18I\-?\(9*$<;=$;KV4AS7LUROI/BZT]1YS\/'92B'H
  M[,N[&B>9C?#?)^?4L]7:;=;KF<9-4K9;Y*[*9FXQQ@G3H`@K0_C6:%7XX;C/
  M#@BCZE:#PDG(;Y3PM(O+_/0;MV+"WKN-ZJW$[<=O2F`BP##DF:VS767R$,['
  MVPETMWE9[0^<(M!J@ZK%BFW51ZW5<>Z)L\3#J^#<V$T2YGN$=4/H/MN*)O+T
  M%REX9^G=B##M,JG*:W-W^%\M&O<I62!P+$D_;^0`O<`?H9*)`35G,A<JIFW7
  M2,*5S>X9D+U:RD>\*"+$M,8*[/D]5\.$SXVC[34GK\??#4SX38&HF2)FO%N\
  MVX8KT/-7_`EE]G$5BP3FXR>/I\LS,H;8=FQ1#,[L6Z">ON')BU<7K&NIJ`Q>
  MMMLV&/ZB)!)_^69C1_&T\\RMG34I!^`'%`>+BZ=1M,(*BJ./"V?[IZY_JX&!
  ME90XUS^K6?*MS%,K6EYVN,;7ZO;M(["K4GWL&$BU"%KIK.#>516WD<;OJQH=
  M6+C-/,-A2D)+PS$O4="M0$9XM4@H800G!'>6JG26MJV&Q9GVK@A5XXR!:WXF
  M.,+5/?&@V0/;D/BS9<#'&'I*ID+E,46_38YRUPFGSUWO?L#1]ZV:R$"]ORT;
  M]UNT;7=9I?>6('^U%98)0*]-C3`:W.R?`"9V@\2(J%FQ'&$'E+>RPA88-Q]D
  MJJ!NLHNT<CIB5R?BECZY%=>',-("=%\],Y1\6"IQB!M_DF7_PY'BCTP[$E@>
  M>]Z*]_1T%_=?]5G;Z";RDJ9?V[:@"%5Y"RO+3LK&BFS>)_BP96=N.//,%PKM
  ML4BX$$$.C1;-:4460YN-SIUL38J?J%N7[[\ATWRN4>$.$?I$A-.;,\$Y7L+1
  MESJ3)5FX).EP>L0;ZZC%F_Q.>A@P:F0+UTI>/^.>()\]L(]ZQ5#O71P6AZ.(
  M5I>,_U>QE?@S_?_QW1L;<S/7G%'(&9'80H18%T+,4>A`B,78;$+.E%*Y/EW?
  M5,I*1;GF*.1:152.88Z<<]_\_/Z#]^/U>C^OQ_OY+FJ'+9EDC<&)INA(E.4)
  M4W$E^KA8%O!=6%AQ<$>^TG>*$-FZ(+?AISM;T+ZTM.5P?*^Z3C!I!92]0?!8
  M?>-=B7B3(Y%]GFW"9+37N_6Z8"X?WX8,A$/<N[#?KHCY4KD+I-H"T"@[L[`:
  MG-I5@EGQC@N@K"_IEA=!X<:!#@/>3_]9\A8RB5F,RINRUTN0U$M*XM8B$@^`
  MZ4]'"`A+$W1YTRCBHR=1:P\QMXGP:?L0)[;7DYTLP90WV51TDV:F!')J!0BF
  M>XC!4L<B(R.]R-9U%QIZ)"0ERF<M*2"Y+:(W-:%7I`Z]JYX7;"9G\86X>!W'
  MCA7G$)?JN(B?(H'(L:3NCOL4N$WMY'@_.-5.6>`L0D#],-E[1KR^*M561G'@
  MDU`(B?[Q"MWI(U+GRO5EB;`V+4T(,6MSZ:\N@C.UGMM1@[,`A?]>"-G1"Y/4
  M]B6(@FY;226-&+DUQ'\4JME:PU/_`V,T07):LB<],6$_()@:^NLS'"%+KI\K
  MT4AOD)Z1)"$FB5@VN8$+]OHLZ'0:V/+K**@Z3]F90ZX2UEWQM/@H<8;8C2IY
  M)-/YUE;+-0WOU[TQBT-W:#O;6S`7K&6\T52:+B?E$N_3F9[1\+2]=A$@04,Z
  MZ'%T!FRD&E_HU7RXNO+59E_I(=$!BRKI@Z4TZ2?O&>:4@8?)1CPC7TZ=,*>H
  MZ8.?!PYS[DDM>J]E]0[*RZ*EOD7(='ZX)8H?[,WY]Q+P^X4_O-44NM&%Y0<+
  M]^R),GZ:Y<CK:]`SME.8^F-P>>,K<9W8*$T/>W-76W-HE7U-ITAR`_NPJ+4X
  MO3;6B2-+(UE*O%<2[URAKO+5RU'(Z:=4J*,;X/>$:/(A#NX>L;3ES3H'O#X`
  MS+1-=M!DMJE;FD.SER]3UG[=<0T9B%U5U59CSPVIEX\(YOY.:+LPU->:*K0+
  MP;.F8A%6?TIF\3IQ.YM#_)5ND[$!R^KQJNO4_)'ZEL:TFCCJ>9@QZ3XM;N<K
  MQBQ=,K)G**G;6>9@^2K]W(TD##:XWY?4R2&3C%G@J((<QW$?[LBP+W<X25L#
  M=B5D`^S8!]QX#'3N<`?E[*`CT[K\/7M)4,AISSICH>'#=V^!WQG"/YHH2EQE
  M[8=HSA.$Q"[I*/,M5#A$'G#`!SB>2H50N7=M`-&"F.XW\1VC2`7..O:S*(Y7
  M739;`PX?<"9?DG%[3UMK`^V[\>F@FTS<YGI+Z%:7<V@^!L)%2++4<Z?>M`)/
  MGZT%+=S`.OP*/DQ-NGMWJ7MVH(:8+D]Z`QMIP)(PW[)8G\)[%@WZY7>]JO5(
  MDV5-M>$[UM5MI+&+=4T<Y2-O^W>Z<,>,)SEFCKN?XJT<B)ZJU^#>G<;L^;H/
  ML_[K(_?XN5O,<SL&U'7^P\$?<WZ8_IMKF#+=/-_RN&EERHY%('1/39$1\P93
  MO;[;N5#&"WIJ/==UMG9)23RP#*?U=.G3OV^VG;V+R.\BRGM4?*XIARF@+IYA
  M!#>(@W]%`=,5\FS/IL8.Z'X+[RI*2^C*#)JU!:`G"<\@18'PZ2<0#^Q%(:;Q
  M-<BDG8A%.'1HQ9G@,!.[#?Z(S:80=-Q)"D&:=76AHTOXQ$^'9@U0BN4=YX->
  MZT"U76;!JEDG3I].&%Z:-`%\)6(5(-\_B<)V$5Z4O+FQ@6S9*I5[63+E00*U
  M7J5VS'@%5$:,JJR6HTG!_6$C4*OW=V%6%\_HU+]M:_G_5QE<0;\9TF+#ZFR'
  M?&7TCQ]]TM3^N[<SE)GW'NCPM+M72O[?AJGE;TVZ)F)G^Z&IOSJXR5"X;%$N
  MG]^,3(QB1XO<6R"#!N;W!.T_RC\,!YY`JC>WL9EVB[[2G=&2PZL=;/3E]_2)
  MPZ27V_P9<0KT8*"MKB6>-[10R+;^@IF:H"<.$;@+8[/<8$R1LV"8QGAR_I^7
  M@7S-'\Q#*[59F_/JO'?$ZZ8G0I=8PQ)/Q]39"+.?"5E?'$_5#;;I9MC*K>2!
  M=<[!UQ"Q8(&/DE<H=[1V@ZF.>_R2@B%+/(2RLOC?&AO520G;,&AY=FI,)K@_
  M#AQ\N9>V(]=+2]&3]"&Y9"&D;WC-/<``'O9=K54XBZJX!A;5%\E\\5I]E1K(
  M43X/+*VS7BAQXG)<G0LAX4.70OM0$ROQ$.$(X?K<J`%<<.6J</7F@_LVD8"O
  MV-\,F@AHA.`6!8V\`YJZC[\EHQF0<E6?.6DB`A)20Z'#Z+,1H"77@>J=;X"2
  M[C<`>`GKKQ!^J5$3NP9QI.#963O+?=+\(I'Q'[XZIPP339SQS*CP>-#XS,<0
  MRSA#<QIT\6=9#=M%5YR9?K/7V^78%ZL[+OG]RX/#8R4<!+8(/2\J4"]KWK1E
  M7PR22`*!&U`XP\W&YH:&M##&E^ZHS.M>_8<_3$_?\3#6OBR?-K8<XE,>,2-;
  M?I.VLF:26!JR39]-#S7)\K]U3]*/M2SH#SIJ1$$0W6U2!WMK^]@NO<ZA?2JJ
  MNO4`\*)>2?LUIK]%V/TA.J6ANZ,`G/JV&^--?R'?>0/T3(-DR5_ZNRMT],C>
  M=5!02G5]V::XD";4`["DZR\NR@T213DNIG`+J<34D#AF*I%(S@!WU<P?N8P1
  M?`?A?N@$+BE<:]5A-Y974C:3!_\]"<#@+:APK!X[<9'@QP*T[A)RRQVOM,GT
  M5T5_"=UNO;9Z16-%L1J.'8G=7I:C:NTO4ORE_WWGZO+<P`%#EZE#2\.-6+<6
  MR8_[^*I&OCY,&&7RV/\3F4AQH"29\-E>NN>^S_KZ]E4IE@=Y86%#^JM6X\IN
  ML%J&R+,;9V,1HW4[F%%?;4ST/@8W?*^*?8Q,1LC]6J4G+]'M5X"\O27_"1=<
  M7UT<Q5%TQ9'26+TD"_A'3^52$:#EG47E!IO/:_9H>F,8*15:A3)3QG2RKF^.
  MZ!Z$^)A(#4*!==2O+9!0'-.8Q%R,W[^%.9;F3S(.\UGE#RDN9EP%)WH\CS30
  M+BQ[Z-/W#(N19UL\?Z.GQ4S31):K8O]X=;37(OHK,/OV#-1L-+'.?XD.+4->
  MMF#UP_HD(1-\0V)J?P?;0KOHT#S<+4VQ+PHSA>0(I3".4#$KLS7^(M(C8*3Q
  M^'\^I'RT?;%E3=P@J_O48NQ2UTC7NRX/0L#W6I=S#-F#@+"!MD9=F*HXM,!S
  MEUVY\FO#/QV$G.($.*(KP".#>QTE,R[G+"L?2_7,^H'['EY?YQ_C'\AL<:KQ
  MX8A?`.-7A\G/8/UV%T8G6D+'Z@0093P$"4)V,WDK2U5->)`/9^8E*E,2$)T?
  M0)%6[/SM66]+:#CO$O_#&^`<##CFR4G740*9E?,&[V1B7+TV02$;29))K'M[
  MM'\00+],K!4WBH5)/J%HH0`.2W@WQMV&A@#@*Z<DLDR.SBUVZ(:PP]8%!3'_
  M"?9BVO=_Q:Q_#,:4FL7@)"2_X!0MXX3>!&=XQK:0'^T'5<<C(K2RBU#XB">K
  MWJ%J8015B8_]JP.63<5-WD]_BXJ`+VK'AVD5[T=TE0$G[4_\Y0[\[&C5T*K(
  M>7U]GK<W\-F!L$E):UIBRN"5*D8K#*649B8V3FR91$I?7IN?N<%YL'6(KM/>
  ML6M`S?W+E^:1]29D]!2.M=`G\J*%7=]8K_2D&!(L0F\OV5Q<5J^_X=<HXU6U
  MSB8'OFP!K@RB3,=X/P_QX<>]+2K!+Z_#%?'P:6V8`AMB_T"I@BB$O#5&3-+K
  MNSX/I]X3+/:R#LEBM-N!%90A$"#Q./VFC%7T<06*WV=ZN>!JI#P'$25"J+9#
  M1"RAQF'"')L/P"M[0DP#L>*F:]0S!K80M>\!NM\(^P<]IE;?SI^8Q"/\U"T0
  M9R0%$J_%A!B.-\WIV3D(T@]M`RAP_MNZNF^,B+L00TK+`7]591X)S?EZE!0%
  M[S&#N^H#\AG)CDX(^($SB*`#S,*_[;&>G3_Z8^^!KX)6;9\V)2C`,LR+,D2S
  M0."$'Q?AOU)5=(/Q0;2MU?^4`C4Z7TF'R!28QS:&+C>;D%7C1?,<4LQYN(9G
  MZC@CQ\OTUS\V,(_9PA:!0U+O)=O.>2EXOF?L9X/;7*@PJ6?`"7D.>R4'&U+[
  M]RLAQM<R;A43?)=Q4EL++=[#!+[+<BXW'"=7H>2HB=?T"4(X\@:T]VVBC>_+
  M&WI6H9XH9G6X!.6GA9R&)129J;?Y3349N1-O@H7*7>8VC8B[PF?O(5*A:T#+
  M-?-3%W'4U_DRBY>[&1L5^Z1\,!L%F[!"L=.Y$O6A2^NG^*"$S>X!<A3C)5@/
  M<50%Q51)R<U!FD/@LD8@'SX8S&J[P[$Z5$W=!/U)A<W<BZ5NR%?:BD0`8*0)
  M-O7M?QEO$LI[EJ1UO>-5!$\7UV70"%Z?T\R3,[YO0E%*J^4HO6?O#-^RG"MB
  M+N2T/2\KP944U+3RYX9-$FT[:B"Y"X[<O'&U1O",MISIAF&O&2UO\/OK7(QK
  MQBPRY!@<O$N[/KAK?`GQR\\UQQE8SJ)XX%I#CC-A<TV+TBJ1#27"P>B(_R`2
  M=H"5)[$/PK'#%-O!;=1VO9VK::WLX:![*IBWOU]@$F<$N*=PA*PF`3-;J.S-
  MW:NHH4=W/DL>AHQ5U]!HQ+XF[">(O,P:4$]7ZYR2$>Z/:^!XG6P/G6R-0[@(
  M>_$?@(#>*O[4H<0.-@KF'$2,$MM*:G=@A$2#C<,(KZ_PE\]=N$!I1NR+)*[,
  MT%W0?'1JO.I9+RN\9UA\^R*X;\9W6OPKF3S-YL]_M[I`_!H5_>73L0N>GIZL
  M>N9!'"FDQL:K.',IS8P.8MBJ<?SVE3D7+P_Q)/VKKZT)UN>:%,K,F%,Z^*L_
  M\8F7\-L&L`F^?N?''(/QLVYZ\FZEMP;;E_YRIYG=^_O\*1$+!I127(D>SZY,
  MH]N9D'):>']B"5ME:;)QA:NR-)SDS#<<)^3,ORTE(O*)-A,_<[QQ,Z`*0Y8%
  MOE@<"S$6*^;W"IC]?![V39YOVNIK+P6H)W/9.VN2/_;2HJ^94'+VVTW5+UPB
  MZY/4%E)?$&:N(D>/'B7SF"'IX)?@[\#CR*\%J5R7O2BW8PL&\MX#'?R%A4N)
  MZDD=!@T>-PU#6?K,#A[$YE=WB25W12S>*8S1_8"M(ON>69":A*5N&".E=2D5
  M:H$!EDU>G(?*/L?@_%H)H&H0$&.SVQ7>EZ2G9R8Q,YE,J%00:_@:668-I7V!
  M1V&"=Z<F_9I]M'U`=];+@'G4CR"`SO8CB+\!XE3&ZZ)CSUTG[S<'!U^9</\#
  M.I6C3?E\S-.E(/Y.+I9*AXU;EY7@O8A.1:OHYJR!^"_[#XH-T/Q!"BBH;#WL
  M+S*MM7!@FRZ'=E6,!6.I-<R"-J2<)7S$D:0?P_L2@M"Z*L47>GD,5\MMN?>K
  M(_^+2-YRGD_7X@M,6,I)3/2]2,RLEP6\^\1M66%NWCZE%W!CI$L>(Z1M;05Y
  M7Y78C:I]8Q*0.#;4\U62O/S&P55&<$L;EV8NAE/T[&GA2N.:6(&C87S1=T-#
  M$.Y18?]J\=MR/C'MN$<:6,)ROM7'2\P)3\Z;`)(;O9,I2_6VJ(:O;VFM'MG+
  M8:-0FVM+=^9F=Q4AX*W2@&%\M3C,3QU,`-6JBMUW7XJ7BF?R&Z-(WC.'ZI]T
  MT-BFQ"/T]-J&[P*5YQ;&RG2YHCA2!O3*7T17%G=KA$V'GE.`F26B(DAP.PQO
  M?-<YT9$M1+\[2J`)UW@5['MIJ?>*HUIZ!OBX;;1B%5$Q$OJ==6]O47SX\!8^
  MT4]W1\\M[S"RX,^[A8CS>LM:?B3])3^NU&V?@^\J"VI5_2!69P`P:W4>_/?!
  M@269^GQQ+9GLMGJEI"$]PAL5II`=W61G9ZN9/S>B@R`&G7O*O&JAW^E4B&Z?
  MV_HDBM&WN8OYEA+##@/B5"EULCVWP&>0@%V"0BS,XC3H!>6&C>;4*(533?4B
  MS_!$)>`KSY75D=+U8YF9N/*S9^&\$7^*[KEJQ-\3R\B'XEFS_,2NNTT5G6R0
  M$EWD;';6/UV6IC^L\#8H0BGP$RPP&6T4]/*5NH`B'S%-&Y.\!T)THEE0XO--
  MNHHXU0FSZE6$Y7HD`<?DJ2?Q@=K+"XT=W(;X2AU^=TD-IF1@!X9W1DTD,-=C
  M@3?PP%"<D;#@!,!LM"9*?X%,:A[;OR?T[3YU#>AE;H.>&T+:T+RB&MM+!G>E
  M?_S^FAP>$V4)[CYV\\HEW')[LY];[YD6_OKV7KY--/!8[+1WG5,0J#!K84R:
  M%7@WL0(M\6#*DX&Y_=*%'#?(DV2C#OB+Y"3T&J`^2TEF:\(38&SF)B"U=S[(
  MGPM8*^Z%GKM3JX5Z<X$P)D1OGQ6Y?1*<0P8P<]R)(,2%/5(7S@HHG\4%'2.I
  M8_^.(R9=Z_3FWY)DDGY!8.2)R]?$DQF:YLG&RL<O:@J*G>0<1T'BC\QAFLQ.
  MOWC)(UZ\.BXFIIT".W$&+6?_<<0;T'SVCZK1RZZNG>DS#&]O[34\HC9ZQ.G+
  MPG:2O$+0;6[$YRO;3ZXFGWQV.7?V16EGDXOWV[;'SI-1R%^4H&\Z$$/8)IB3
  MII0E\NY<@Y2M>#/FJ-"*!G%KS!JI9N!K5P9D5WQOD(4\M$?]#(CXZ3J9GQYP
  M:,,-;QVIF/=1S/?5DL85-363_G5E%:V#\F$JPHZ\;]&O5,O^\YW^/F,`EZNJ
  M^A/^ZG5;LGGJ'.?'ROF1;UJVFKP]@*CQY$-WRZ1[F/_"I*I6/%?:)6WF;Q2[
  M"+`4;WLL9$]`O@LHN^36E]R9USYQ,(K/?4:W?JPT.."Q%!"FJ=QWZO105(7C
  MSU_O%@ZTA5K-S4<.J1M8'7;17=*ELT6;OS8CAR+._3GPX9\.RT%994]#**_3
  M"J&C[)+X<<:7A20FF2<WO]1/;M;4#WRXB2P[^CO^4S;3]M;@Y(8T=UTTD@75
  MS*F.61(S#X.F6+,TXC_-;=ER#K35U-J\*E;39>;E:99K0=WGMK;^FH2^DHHH
  MT@V<FO^^H(L)H`L(&)/;!5X?Q+XN^$H>%$=C1(B)SB6SABC[H"/K)]C;JJNR
  M]N0$ACV4]%9=.Z!!2>U)!S#;W$J>>M`$0+3/$;($]AG$G],A9VFCIQPLP/FV
  M6$L;X=.%=<)6,/5['2%X`WG/0WCS^^TM+0(S8?2,MS`P:4[0C"<0$23W=`-L
  MVBP8%XR&KIJ="SVP*$U55QJ_8![,CW;E"$!O&0K1F-A7:RO#W0.9^)IM7T)?
  M8HK\@]51K1TH3,3>\F2'3NYP>_.9OIHXJNX%GVIVT3,5V.7$%HC6>5&RZ4[&
  M8&=&%_?>@Z+WVDQZ`F0U^G"H-632AN-C!"P]!>Q@^4_0[A)+@UO2H3M\53TD
  M(R-'4GP0;/PP`?=4DIX?=4(_]/N&@-LBPTF&LC)ZN/Z.1HC,C,4V++B*D0CV
  M43T$#"U/H9L$(M%2,V"3<NW8Q[6VSZ@;J_*]WY$CBJ0D10E1)1HC[!^-;_0'
  M'SKCWIE7+^*OWL:Z$F;`=)WQ#%7K-_N<0&PS0Q1+>0HR9"UVE)])CM_[8YNS
  MHM=;%7I_L+:OD?O(+IBLH?C^].V[0C_Z0)GV\2JW\Q7RT&<)L7:A_N\(JJ)A
  MX3J!A2C-P7"^8/PK#=(+^$0`;0-S;-7;@KJ%G3+>-(^9Z44B.M/OC0>\]\E5
  M`$/_[R5X%1HY]Q/\%^F#<]-&>L>V3YR2\#]@U.5#6>`9UR\9.LB<CEC"15ZV
  M_,+%^W<HO2A&XLI@HTVN*[I,*'>`1BZ<&(M*Q(9X,5.].#+[BIA8]Q+?H)=-
  M0-&;.J5G18@:R87ZR3%,5$D?N3QF;&_]<]T:]BI.;R/>O80EQZT-O[6CA*QG
  MK-^ZP/ZUT*]1(R.\..432%W,KM50AMX'LMG/D^,3APCW\SUDS/5`^]QQ9^_7
  MWL09J;E^7!6KCX=_P>R]+LX6%8#L[D](BCX3!\/_ADW3XN+""P=G_EW!/%^^
  M[%-^=1I,X7M:.\K(ZP/),!O%<2.#GNG"6UD*4GPN4CS"'^D2P$@BQ#_#:=81
  M_HH3;'2*%,"?\Q<WI#G':FJ(C6D[`^^"ZW]VA_1O?Q7-6OVO_/_LSQ452+$6
  MT7EQX</@],^*FM-=/#>BQF9\V$-`DT=O?;SN&[JU(I0'5;858JJ,R+&RH">C
  MQN9M$DL#@AD5^_^XAV'L'TYP?\D%7I4LHES?V!3U_S,Q(L<_J%74#Q-R0L\;
  MZJ/08?J:S8^,);:9F=D,HUO]E1N(F;P*R(8:<*K<H]LS8-PKIX-;W-!&^NXE
  M](99#F^H1<K%;O`QYD;(/WOA%Y\Q)M0X\,_`BP^A&]<P(8IY"/P+P>K3TO?]
  MB%DKPRT>P.=,S&Q!OW]Y!!E:/U)Z*TCS^!4;NS*(S(D\=IZ&9ITP_@M8P1%A
  M%HZB\O;I/8]WJ626I";T9PM";G6)ZK*C`HZT(X9!SO\QA8W\QJA(14?PW<`C
  M8K=I]V6(]7W<?=C#!M]78OQ:ST!@(E\;#&H2_I1X-+I^?#EN$0*7>IL&!,/'
  M$\F1Y%=H'HJDA7G?CXC(/5B\"CH^EV<9)]C[.RJLU)_TZP"X@T*7%_Z\9_E/
  M\Q;[\3)\=1G#X<B/NXMP<._KV-LR1<D,>:^O,.<VUIR#6PKBP/[L,SW*K_]E
  M>LNT`O&+\UT:?'BMHN@9;KTM,>FZW*%H!A8.ORN&]^J%28<7QG]1&P<&5CIF
  MZ0'&!0-F\'L[R__4ZX=;-FJW(7VL\*76LZ&I$N]/@CKM1T#X4\T(T\:'3&BE
  M-^QT!$/:Y^T1%;&(MWS+\4=/6<:0I@&6KR2,,"VH;Z,0NA?A'HAX>7N;N@D.
  M=J6[OW/4+M[QJMS8QKB5UC]<2@N4^3L!SB;N&M++YRH$ZP@BGC>*-!A<Z-L?
  M=2=I9UFE*$;ZL_0!):DA*-7A\7WR8Y6)MH93(C0ETYG(D(#(C-\U=6$E?YVZ
  M!%>8%?):2B=$W#<EX+F]MK;*(K+"XL.5D(&?HJZWJ9_JCH-#W(\??7>_7;/2
  M?9U[VGU.`1.3E9>IX'><&$MLV[C!/WJ,X`_%/4ZU_GNQ,8LO+Q(12CU!&5R,
  MB)IMBAQ^)YJIN-^@CQI0O?CT?JI!XT+(R>X(^Q=JQ].[_]XQDCU3E0&+3YW;
  MLOGUO?EL^*\F_8YU2OF#:XR32L,B/7C%O=YE9_\4OL"4G,"X(+KF\B5#]'?*
  MG^3E=$7,X,K>Z%2$F!QB#O[-:5OMN)_4^K66I^E]IB&YW:3*.3,'%)%?*\@@
  MB"1"0\X?^:T<D^/U+@!%O9&A8&:#)>6HL9Z:!69+)G?%&0I3FDNU#[5OMT_5
  ME.YL3E^,Z7G]O*3%N+TT%C8)U'K"1^ZC:C^K%M_052.:D%ZF9'@WJEW]6M[Z
  M:_;FD[JK:EKW,_U>OST^\)?T_,$5'=P337[LQ=]_1"KT5L]9\!ZZ>Y2>H)TK
  MX)?O\=&46[(7]5$S]AM(/>*D.F[?4?>H,D&?)#*)/7+UZ(WQ9S%X@>#E.$ZZ
  MYQW5LR<:KD?W_U%R\O6]4\Z7&<.L$V6;962OG2_X5'Y88NOSWP.2<F!4AM#1
  M.[-KV5*EE`/>VB8NZ0.13U]\Z+F9?`9K+F?K<G!>@\[762+_846_+7\LX]"Y
  M\`H93:@/95FH:)XD"L/S'85>;A#V8JTM*V@YX+#G9JQA+6U!135$^CQ]69'Q
  M%?>@5I6@S<&!A>W8(%6,40S$X9\C)_Q.;8`]PUDA(<]4P%Z-FSI`;*.$%F:*
  M]A>M[IK"H9ZC@61#`Y7@5OH'^T%5O;1D!#X9:Y_&E\`<2E((<K`H>DBW%M&2
  MKW>:2+SF(?.H3YBDQA`S1S'7TXHY#A^(9SJW%F+80@6'<CKTS<L7Z,2.3GX-
  MD-`ZT.:QK.!1/M9>X.Q-VUQ#?KHH?UC%IX5`%KUI\`&>8D<'J43`#2E3(6.M
  M>59YGI6?\\RI4TK.],3^N+@=3!I)F-_UC\6T@*OSE&V$]!C$<Z*<O9<A[*.H
  M5=EK@,S41#B'WSD[`*AZ_V:'WZ4]:GQW).5%(5=^6[JS&1GYD`B&5/0H2K@!
  M\B@(T`O[@?QDH!!6;31E[M3S8?(6ZCS#5B8O\>B>-*$P[,L.7*VHP*$(B=,G
  MZ8?XO51N_4U3RHU:#2(C4M>0B.1F5>@!3;`R.O&:<F#8QD^Y1`T3)^86RNS9
  M3-O/"@RU3FSG>L*S[6FWTL7:XJ[&J($=_HKHXN<@M^^"A]Q1UP]CPZSKI/68
  MP@90E-*12??!).*5^WEGKFVTOJ7B;*X[2<:BCY)X=!6L\<.K_WKB0H7!TRVW
  M7%W(>F$"_I2%56.*J`'/<=V;JR(I,<Y5'7Q4JJJ4.9?21#^,/?2?`F_-FWL4
  M[/](RDZXLRM>X9F`H!MGK="[_S!R)83X23%/#GA>P^A%O$*PP2TI!UWEC-:A
  M_]ZKFLT`,\CR+(BC-4`$D>K6H!D)>+Z4)II29FA27EO7`-E[I#8+^?#'^@*Z
  M6*KS%OC:(G$0\@X:`5.V&YBYB\9Y55$[R!<N"5IX*IQ^R4?=W#E,VQY:>N&P
  M,ENYL+EPZ&EX+V%WGEJ":]FZ/0]=>UZ"5]-_[DHO2BD[&69<"Z?'LK!N8>J:
  M!J;W.B8_D&FQT4L+2=A/ZCR>#/&U/DD8`C>69I6^"N1]"XUNT4[4B)K5"Y1Y
  M8-A;%59`M'-,`Q<5#'XI=27'=+[OPO$.+-6^$.<IDWB653%"?\JY/J`K>[FB
  M$E"DA2:98"KGDE:KBNH,@2/TU$1HAM3H#8AGU#M&H^%:[9)<N=LP%Z$!Z9EJ
  MI`7FHTVUEZ4I,%2DRO[U54T#4/X%;&X;2,,(**R!BJL4W8<MY1.MK@"?%[\\
  M07+_505T]$,=Y/8@@H)\$$'7<8G/L85Z=M_L#`[:C-([@JIBYL8'PJ6#/<^6
  M3_Y9CNFP>#PP+7AH%;U6;LS[TL*R.<MBUFPS5,24Z,EG@X0O+3,:-_=\&,W5
  MM[!TC5I?/<^YIL^.,\!6E-9(K]Z&<GP$`.'UD2TM]D(H"X0<D2`=%ORLO#C7
  M%X-Y?%N,FPQ-GZ`[/;:D<K4I-K)%'45/2A#]=4*?<QSLSV8.'M!S9:8$D[($
  M+R[2W;\Z!WO[@!0^"QB(2P0Y!^<GI16SWM6FGK+P.8;8'R?:](NYPODY_RA=
  MG-^@IV>P34AJ(T/_DE<8PD6)'^&$.R#@V-5@P!18N$`<A,FZ0/.-J0N]`OS/
  MJIS0_/B[DN4\\`/:'%\1,=!ZE(4#7L$)GW!&)@(&T-."^;NGFQW\&?5&/F;1
  M;_*5LV7-YD92F(7P?-8MEA7<Y]4D^<N^XB^"'HW0%#O$+B]$MH!.A1W1;NR%
  MIQ*S!&4#>:.CHT.GLN](E)9RNLW>^_@E2N!?/<YXJ??<-AD_G-2M6VO(`XXR
  MGC)DR]O%;I\&F=0/F%<AG6J!1Y:D/MCG2@$8ID^,S1PTR0B!8_MB-^8?#-:^
  M/L1-5=M\8H53]*RI"UVK$T*(.UB1:QR%/;7Q`Q^@YG+@"6^&%"SWK)Q^T7AN
  M?+AFDS#);ZHI(Y][+`R'$T4<.*P`Q'36OAX,8,]\3W=PC?\TIE#^:DAQO%EI
  MWQ-(!H;T]'!E-,.G^T_Z+2+:I>GINQMW#C/3'BJ7Q\!/:J@\%W`22:VX*,/+
  MYK'1Y81T.=)CT%T(`$T,R3-M93>WM;'\AJMKQF;C-I\6[XOSW7K@:AO'_&7[
  M&.*VA<I-2I@NM/::%?2HATY&TSNWH?_O_HE*9HTYXWT,C3Z`O8\H[U.I6UYO
  MDR/Y,Q[Z`:.*XX&.7IJ(N4]US-C3YA$'ZYX[]K'7_W5;7K`PWA.)CU%WZDB6
  MD2(=OOZO:?]1TH*WB\W=>&1/9P[I!UCJQB8[6XO-G^^W"74"C=S&EA08H!SV
  M,B;MU56E$[NQ^YGA8PLQW3(65;3&T-E1!<09G6L(JS&EQ`\_/\LH'HYN4]I7
  MARZLE)*4]N<.C?J&9M@%'*R,`]=W.92QF:)*H!3JM2N2"*U"NT2/`"P]E<9I
  MNZM4!91""1X\HP\2,I!P6?:GY2[F*VXPHMP'/@,-IZMB3K<R)JYPU@;*VA6@
  M]V"/=YSP9NMCOZJZ+2WBMA;6?S\?,,&9FBJ:;[7RY_L:=<M=QE5,P@A9S%Y:
  M@HU:\0YJ-I+0Q<1>@:.4'IO,4:DK)]<7GF?2_"4Z"?DG>[2-IWJ<W?SGB6O<
  M4J?KE'+3:NK:MZ;F9H$IYU(]Z&_@U]).9:C6I,-SW;#MS;G<V;$.VI#!D<L0
  MH$OAXW+T0#5MO6GEWU;`?E4MU:\#EG%ZU3%;B:)&=M,/W%KY0^UPOAX^D"H6
  M43KZ)+=;AG<@@FT50C:IKL1ZV:+GL8'FXIWCH`,'.U]#9"S,:Z#589!L.X*I
  MV.E-QI[K1*L8STU?KC7D6Q!W[C1Y3L`^%/!$?NMS-X[GOGBS(8V%3-,PBFJ4
  MZ-F9G9@R13T^_^K.SM)D!\WTS%WL*Q/YZNWX^(4?7Y"S!5NK:TE%J;U$IBJ-
  M8*+@HWA>\"]H0T!'+"OG*"/\P/^+E<EY?6XL,W'C*HCL##?>UZT]P78/=$A%
  MZ7+N*9)VHH)]R]=OWV#%,::4!W%S.VO+I[+S_]64)\I;UI3KY8SG9`[`:JA;
  M7_;OJ?NBO5>Y`?7YS]?.W_F#]2W/,65O/"]L;LZA5Q]+[`+SH1@T?2/QO+\^
  M8Z+>UD37H)(Z#S.W`TW,,C:%+Z8%G3W(-)&(=ZGY_S.R^?C.\$;)#G`UJ=!R
  M9Y.V,?C76UCX5Z&CMK;W[M*7!J<;\;,#M*VMF4;OQ!7VQ]&RS!U3KVKJQEKC
  M0$W"1W$?$"\/Y?$#_#?_AOS-IHI2LA:*ZW"8L`U"*869?%9Q+F%?>$<4%4PA
  M*"*LK>N$QVP*G:UPJ^?]_/RVE]#49OP[J^1("6F]1J;[1^^:N"TM]?VMM>L;
  MZ-D%K.6#@V=E</'3&LLEM&TTBJ7_+FYM"__^M=5N:+VY\W-VAT;;WMK)%>B)
  M6UM.&JR0QXI#;^TXGTF<G6ZA4:."^V/6<=E%!P\>O$\(KH^4,#JHQ"I,3A-2
  MPN]+H_H::(OYF(JZZ-;IS6L*'U5C",&^[@+]Q#L_W'4EZ>M[Y*1>C+>LD?^^
  M_JZK;6/*E':#&8+#157?G\+*R7R]ESJ8,<HE!^P2I^_VYLBD-^=$)Z#ZXI'?
  M/9$D,7Q/)VS\.5$5WYY"%?P?&\X9[D1G```?BP@````````#8V!H8&9@8.@(
  M7_&U5(WQ\WE!^]2?M0';C(^<8V1DY-$H2"Q)SE!(22Q)U,2J@I&!`4@#`-[;
  2Q]E%``````!FPB581%HP,#0E
  `
  end
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/ex/index.wml
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 index.wml
  --- ossp-web/pkg/lib/ex/index.wml	30 Jan 2003 12:49:43 -0000	1.9
  +++ ossp-web/pkg/lib/ex/index.wml	17 Feb 2003 19:36:03 -0000	1.10
  @@ -7,9 +7,10 @@
   
   <h2>Abstract</h2>
   
  -OSSP ex is a small ISO-C++ style exception handling library for use in the
  -ISO-C language. It allows you to use the paradigm of throwing and catching
  -exceptions in order to reduce the amount of error handling code without making
  +<img src="ex.png" alt="" align=right>
  +<b>OSSP ex</b> is a small ISO-C++ style exception handling library for use in the
  +ISO-C language. It allows you to use the paradigm of <b>throwing and catching
  +exceptions</b> in order to reduce the amount of error handling code without making
   your program less robust.
   
   <p>
  @@ -21,7 +22,7 @@
   are correctly passed back to the parent.
   
   <p>
  -The OSSP ex facility also provides advanced exception handling features like
  +The <b>OSSP ex</b> facility also provides advanced exception handling features like
   shielded and deferred exceptions. Additionally, OSSP ex allows you to choose
   the used underlying machine context switching facility and optionally support
   multi-threading environments by allowing you to store the exception catching
  @@ -40,6 +41,7 @@
   
   <pkg_status
       name="ex" assign="rse"
  +	genesis="Jan-2002"
       stable="1.0.2"   stable_date="30-Jan-2003"
       unstable="none"  unstable_date=""
   	done=100>
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 17 20:41:00 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7EF41769EF; Mon, 17 Feb 2003 20:41:00 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/ex/ ex.psd
Message-Id: <20030217194100.7EF41769EF@mail.ossp.org>
Date: Mon, 17 Feb 2003 20:41:00 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   17-Feb-2003 20:41:00
  Branch: HEAD                             Handle: 2003021719405900

  Added files:
    ossp-web/pkg/lib/ex     ex.psd

  Log:
    add Photoshop source of logo

  Summary:
    Revision    Changes     Path
    1.1         BLOB        ossp-web/pkg/lib/ex/ex.psd
  ____________________________________________________________________________

  (cd ossp-web/pkg/lib/ex && \
   uudecode <<'@@ .' && \
   xdelta patch ex.psd.xdelta /dev/null ex.psd && \
   rm -f ex.psd.xdelta)
  Index: ossp-web/pkg/lib/ex/ex.psd
  ============================================================================
  begin 664 ex.psd.xdelta
  M)5A$6C`P-"4````(`!$`$`````````````````````!S:&EE;&$N-C4W,S0N
  M;G5L;'-H:65L82XV-3<S-"YA;&P?BP@````````#`P```````````!^+"```
  M``````-C8&A@9F!@,+@BVW.SGV$3R\L&SAEO?CC5`<48`#W@_+\<````````
  )52581%HP,#0E
  `
  end
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 17 21:11:20 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 75A5D769EF; Mon, 17 Feb 2003 21:11:20 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/mm/ index.wml mm.png mm.psd
Message-Id: <20030217201120.75A5D769EF@mail.ossp.org>
Date: Mon, 17 Feb 2003 21:11:20 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   17-Feb-2003 21:11:20
  Branch: HEAD                             Handle: 2003021720111900

  Added files:
    ossp-web/pkg/lib/mm     mm.png mm.psd
  Modified files:
    ossp-web/pkg/lib/mm     index.wml

  Log:
    add MM brain-logo

  Summary:
    Revision    Changes     Path
    1.10        +2  -0      ossp-web/pkg/lib/mm/index.wml
    1.1         BLOB        ossp-web/pkg/lib/mm/mm.png
    1.1         BLOB        ossp-web/pkg/lib/mm/mm.psd
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/mm/index.wml
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 index.wml
  --- ossp-web/pkg/lib/mm/index.wml	23 Dec 2002 19:37:38 -0000	1.9
  +++ ossp-web/pkg/lib/mm/index.wml	17 Feb 2003 20:11:19 -0000	1.10
  @@ -7,6 +7,7 @@
   
   <h2>Abstract</h2>
   
  +<img src="mm.png" alt="" align=right>
   OSSP mm is a 2-layer abstraction library which simplifies the usage of shared
   memory between forked (and this way strongly related) processes under Unix
   platforms. On the first layer it hides all platform dependent implementation
  @@ -28,6 +29,7 @@
   
   <pkg_status
       name="mm" assign="rse"
  +	genesis="Mar-1999"
       stable="1.2.2"   stable_date="23-Dec-2002"
       unstable="none"  unstable_date="none"
   	done=100>
  @@ .
  (cd ossp-web/pkg/lib/mm && \
   uudecode <<'@@ .' && \
   xdelta patch mm.png.xdelta /dev/null mm.png && \
   rm -f mm.png.xdelta)
  Index: ossp-web/pkg/lib/mm/mm.png
  ============================================================================
  begin 664 mm.png.xdelta
  M)5A$6C`P-"4````(`!$`$`````````````````````!S:&EE;&$N.#,P-#$N
  M;G5L;'-H:65L82XX,S`T,2YA;&P?BP@````````#`P```````````!^+"```
  M``````-C8&A@9F!@,+@BVW.SGV$3R\L&SAEO?CC5`<48`#W@_+\<````````
  )52581%HP,#0E
  `
  end
  @@ .
  (cd ossp-web/pkg/lib/mm && \
   uudecode <<'@@ .' && \
   xdelta patch mm.psd.xdelta /dev/null mm.psd && \
   rm -f mm.psd.xdelta)
  Index: ossp-web/pkg/lib/mm/mm.psd
  ============================================================================
  begin 664 mm.psd.xdelta
  M)5A$6C`P-"4````(`!$`$`````````````````````!S:&EE;&$N.#,P-#$N
  M;G5L;'-H:65L82XX,S`T,2YA;&P?BP@````````#`P```````````!^+"```
  M``````-C8&A@9F!@,+@BVW.SGV$3R\L&SAEO?CC5`<48`#W@_+\<````````
  )52581%HP,#0E
  `
  end
  @@ .

From ossp-cvs-owner@ossp.org  Fri Feb 21 20:18:36 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2A08D76A3B; Fri, 21 Feb 2003 20:18:36 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog sh.echo
Message-Id: <20030221191836.2A08D76A3B@mail.ossp.org>
Date: Fri, 21 Feb 2003 20:18:36 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Feb-2003 20:18:35
  Branch: HEAD                             Handle: 2003022119183400

  Modified files:
    ossp-pkg/shtool         ChangeLog sh.echo

  Log:
    Enhance %u, %U, %g and %G expansions of "shtool echo -e"
    by first trying to resolve via POSIX "id" command.
    
    Parts submitted by: Bill Campbell <bill@celestial.com>

  Summary:
    Revision    Changes     Path
    1.182       +5  -0      ossp-pkg/shtool/ChangeLog
    1.34        +57 -27     ossp-pkg/shtool/sh.echo
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.181 -r1.182 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	11 Feb 2003 13:00:49 -0000	1.181
  +++ ossp-pkg/shtool/ChangeLog	21 Feb 2003 19:18:34 -0000	1.182
  @@ -11,6 +11,11 @@
   
    Changes between 1.6.2 and 2.0b0 (02-Nov-2002 to xx-Feb-2003):
   
  +   *) Enhance %u, %U, %g and %G expansions of "shtool echo -e"
  +      by first trying to resolve via POSIX "id" command.
  +      [Ralf S. Engelschall <rse@engelschall.com>,
  +       Bill Campbell <bill@celestial.com>]
  +
      *) Bump year in copyright messages to cover new year 2003.
         [Ralf S. Engelschall <rse@engelschall.com>]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.echo
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 sh.echo
  --- ossp-pkg/shtool/sh.echo	11 Feb 2003 13:00:50 -0000	1.33
  +++ ossp-pkg/shtool/sh.echo	21 Feb 2003 19:18:34 -0000	1.34
  @@ -103,17 +103,26 @@
   #   determine user name
   username=''
   if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[uUgG]'`" != . ]; then
  -    username="$LOGNAME"
  +    username="`(id -un) 2>/dev/null`"
       if [ ".$username" = . ]; then
  -        username="$USER"
  +        str="`(id) 2>/dev/null`"
  +        if [ ".`echo $str | grep '^uid[ 	]*=[ 	]*[0-9]*('`" != . ]; then
  +            username=`echo $str | sed -e 's/^uid[ 	]*=[ 	]*[0-9]*(//' -e 's/).*$//'`
  +        fi
           if [ ".$username" = . ]; then
  -            username="`(whoami) 2>/dev/null |\
  -                       awk '{ printf("%s", $1); }'`"
  +            username="$LOGNAME"
               if [ ".$username" = . ]; then
  -                username="`(who am i) 2>/dev/null |\
  -                           awk '{ printf("%s", $1); }'`"
  +                username="$USER"
                   if [ ".$username" = . ]; then
  -                    username='unknown'
  +                    username="`(whoami) 2>/dev/null |\
  +                               awk '{ printf("%s", $1); }'`"
  +                    if [ ".$username" = . ]; then
  +                        username="`(who am i) 2>/dev/null |\
  +                                   awk '{ printf("%s", $1); }'`"
  +                        if [ ".$username" = . ]; then
  +                            username='unknown'
  +                        fi
  +                    fi
                   fi
               fi
           fi
  @@ -125,19 +134,22 @@
   if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%U'`" != . ]; then
       userid="`(id -u) 2>/dev/null`"
       if [ ".$userid" = . ]; then
  -        str="`(id) 2>/dev/null`"
  -        if [ ".`echo $str | grep '^uid[ 	]*=[ 	]*[0-9]*('`" != . ]; then
  -            userid=`echo $str | sed -e 's/^uid[ 	]*=[ 	]*//' -e 's/(.*//'`
  -        fi
  +        userid="`(id -u ${username}) 2>/dev/null`"
           if [ ".$userid" = . ]; then
  -            userid=`egrep "^${username}:" /etc/passwd 2>/dev/null | \
  -                    sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'`
  +            str="`(id) 2>/dev/null`"
  +            if [ ".`echo $str | grep '^uid[ 	]*=[ 	]*[0-9]*('`" != . ]; then
  +                userid=`echo $str | sed -e 's/^uid[ 	]*=[ 	]*//' -e 's/(.*$//'`
  +            fi
               if [ ".$userid" = . ]; then
  -                userid=`(ypcat passwd) 2>/dev/null |
  -                        egrep "^${username}:" | \
  +                userid=`egrep "^${username}:" /etc/passwd 2>/dev/null | \
                           sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'`
                   if [ ".$userid" = . ]; then
  -                    userid='?'
  +                    userid=`(ypcat passwd) 2>/dev/null |
  +                            egrep "^${username}:" | \
  +                            sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'`
  +                    if [ ".$userid" = . ]; then
  +                        userid='?'
  +                    fi
                   fi
               fi
           fi
  @@ -147,13 +159,22 @@
   #   determine (primary) group id
   groupid=''
   if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[gG]'`" != . ]; then
  -    groupid=`egrep "^${username}:" /etc/passwd 2>/dev/null | \
  -             sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
  +    groupid="`(id -g ${username}) 2>/dev/null`"
       if [ ".$groupid" = . ]; then
  -        groupid=`(ypcat passwd) 2>/dev/null | egrep "^${username}:" | \
  -                 sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
  +        str="`(id) 2>/dev/null`"
  +        if [ ".`echo $str | grep 'gid[ 	]*=[ 	]*[0-9]*('`" != . ]; then
  +            groupid=`echo $str | sed -e 's/^.*gid[ 	]*=[ 	]*//' -e 's/(.*$//'`
  +        fi
           if [ ".$groupid" = . ]; then
  -            groupid='?'
  +            groupid=`egrep "^${username}:" /etc/passwd 2>/dev/null | \
  +                     sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
  +            if [ ".$groupid" = . ]; then
  +                groupid=`(ypcat passwd) 2>/dev/null | egrep "^${username}:" | \
  +                         sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
  +                if [ ".$groupid" = . ]; then
  +                    groupid='?'
  +                fi
  +            fi
           fi
       fi
   fi
  @@ -161,14 +182,23 @@
   #   determine (primary) group name
   groupname=''
   if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%g'`" != . ]; then
  -    groupname=`egrep "^[^:]*:[^:]*:${groupid}:" /etc/group 2>/dev/null | \
  -               sed -e 's/:.*$//'`
  +    groupname="`(id -gn ${username}) 2>/dev/null`"
       if [ ".$groupname" = . ]; then
  -        groupname=`(ypcat group) 2>/dev/null | \
  -                   egrep "^[^:]*:[^:]*:${groupid}:" | \
  -                   sed -e 's/:.*$//'`
  +        str="`(id) 2>/dev/null`"
  +        if [ ".`echo $str | grep 'gid[ 	]*=[ 	]*[0-9]*('`" != . ]; then
  +            groupname=`echo $str | sed -e 's/^.*gid[ 	]*=[ 	]*[0-9]*(//' -e 's/).*$//'`
  +        fi
           if [ ".$groupname" = . ]; then
  -            groupname='?'
  +            groupname=`egrep "^[^:]*:[^:]*:${groupid}:" /etc/group 2>/dev/null | \
  +                       sed -e 's/:.*$//'`
  +            if [ ".$groupname" = . ]; then
  +                groupname=`(ypcat group) 2>/dev/null | \
  +                           egrep "^[^:]*:[^:]*:${groupid}:" | \
  +                           sed -e 's/:.*$//'`
  +                if [ ".$groupname" = . ]; then
  +                    groupname='?'
  +                fi
  +            fi
           fi
       fi
   fi
  @@ .

From ossp-cvs-owner@ossp.org  Fri Feb 21 20:21:51 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 165A576A3B; Fri, 21 Feb 2003 20:21:51 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ README VERSION
Message-Id: <20030221192151.165A576A3B@mail.ossp.org>
Date: Fri, 21 Feb 2003 20:21:51 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Feb-2003 20:21:50
  Branch: HEAD                             Handle: 2003022119214900

  Modified files:
    ossp-pkg/shtool         README VERSION

  Log:
    update date

  Summary:
    Revision    Changes     Path
    1.90        +1  -1      ossp-pkg/shtool/README
    1.67        +1  -1      ossp-pkg/shtool/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/README
  ============================================================================
  $ cvs diff -u -r1.89 -r1.90 README
  --- ossp-pkg/shtool/README	11 Feb 2003 13:00:49 -0000	1.89
  +++ ossp-pkg/shtool/README	21 Feb 2003 19:21:49 -0000	1.90
  @@ -10,7 +10,7 @@
     http://www.gnu.org/software/shtool/
     ftp://ftp.gnu.org/gnu/shtool/
   
  -  Version 2.0b0 (11-Feb-2003)
  +  Version 2.0b0 (21-Feb-2003)
   
     The GNU shtool program is a compilation of small but very stable and
     portable shell scripts into a single shell tool. All ingredients
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/VERSION
  ============================================================================
  $ cvs diff -u -r1.66 -r1.67 VERSION
  --- ossp-pkg/shtool/VERSION	11 Feb 2003 12:58:03 -0000	1.66
  +++ ossp-pkg/shtool/VERSION	21 Feb 2003 19:21:49 -0000	1.67
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for GNU shtool (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is GNU shtool, Version 2.0b0 (11-Feb-2003)
  +  This is GNU shtool, Version 2.0b0 (21-Feb-2003)
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Feb 22 13:27:21 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 621F876A41; Sat, 22 Feb 2003 13:27:21 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog sh.echo
Message-Id: <20030222122721.621F876A41@mail.ossp.org>
Date: Sat, 22 Feb 2003 13:27:21 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Feb-2003 13:27:21
  Branch: HEAD                             Handle: 2003022212272000

  Modified files:
    ossp-pkg/shtool         ChangeLog sh.echo

  Log:
    Enhance %u, %U, %g and %G expansions of "shtool echo -e"
    by also trying the Solaris/Linux "getent" command.
    
    Hint by: Christoph Schug <chris@schug.net>

  Summary:
    Revision    Changes     Path
    1.183       +5  -0      ossp-pkg/shtool/ChangeLog
    1.35        +24 -11     ossp-pkg/shtool/sh.echo
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.182 -r1.183 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	21 Feb 2003 19:18:34 -0000	1.182
  +++ ossp-pkg/shtool/ChangeLog	22 Feb 2003 12:27:20 -0000	1.183
  @@ -12,6 +12,11 @@
    Changes between 1.6.2 and 2.0b0 (02-Nov-2002 to xx-Feb-2003):
   
      *) Enhance %u, %U, %g and %G expansions of "shtool echo -e"
  +      by also trying the Solaris/Linux "getent" command.
  +      [Ralf S. Engelschall <rse@engelschall.com>,
  +       Christoph Schug <chris@schug.net>]
  +
  +   *) Enhance %u, %U, %g and %G expansions of "shtool echo -e"
         by first trying to resolve via POSIX "id" command.
         [Ralf S. Engelschall <rse@engelschall.com>,
          Bill Campbell <bill@celestial.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.echo
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 sh.echo
  --- ossp-pkg/shtool/sh.echo	21 Feb 2003 19:18:34 -0000	1.34
  +++ ossp-pkg/shtool/sh.echo	22 Feb 2003 12:27:20 -0000	1.35
  @@ -141,14 +141,18 @@
                   userid=`echo $str | sed -e 's/^uid[ 	]*=[ 	]*//' -e 's/(.*$//'`
               fi
               if [ ".$userid" = . ]; then
  -                userid=`egrep "^${username}:" /etc/passwd 2>/dev/null | \
  +                userid=`(getent passwd ${username}) 2>/dev/null | \
                           sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'`
                   if [ ".$userid" = . ]; then
  -                    userid=`(ypcat passwd) 2>/dev/null |
  -                            egrep "^${username}:" | \
  +                    userid=`egrep "^${username}:" /etc/passwd 2>/dev/null | \
                               sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'`
                       if [ ".$userid" = . ]; then
  -                        userid='?'
  +                        userid=`(ypcat passwd) 2>/dev/null |
  +                                egrep "^${username}:" | \
  +                                sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'`
  +                        if [ ".$userid" = . ]; then
  +                            userid='?'
  +                        fi
                       fi
                   fi
               fi
  @@ -166,13 +170,17 @@
               groupid=`echo $str | sed -e 's/^.*gid[ 	]*=[ 	]*//' -e 's/(.*$//'`
           fi
           if [ ".$groupid" = . ]; then
  -            groupid=`egrep "^${username}:" /etc/passwd 2>/dev/null | \
  +            groupid=`(getent passwd ${username}) 2>/dev/null | \
                        sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
               if [ ".$groupid" = . ]; then
  -                groupid=`(ypcat passwd) 2>/dev/null | egrep "^${username}:" | \
  +                groupid=`egrep "^${username}:" /etc/passwd 2>/dev/null | \
                            sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
                   if [ ".$groupid" = . ]; then
  -                    groupid='?'
  +                    groupid=`(ypcat passwd) 2>/dev/null | egrep "^${username}:" | \
  +                             sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
  +                    if [ ".$groupid" = . ]; then
  +                        groupid='?'
  +                    fi
                   fi
               fi
           fi
  @@ -189,14 +197,19 @@
               groupname=`echo $str | sed -e 's/^.*gid[ 	]*=[ 	]*[0-9]*(//' -e 's/).*$//'`
           fi
           if [ ".$groupname" = . ]; then
  -            groupname=`egrep "^[^:]*:[^:]*:${groupid}:" /etc/group 2>/dev/null | \
  +            groupname=`(getent group) 2>/dev/null | \
  +                       egrep "^[^:]*:[^:]*:${groupid}:" | \
                          sed -e 's/:.*$//'`
               if [ ".$groupname" = . ]; then
  -                groupname=`(ypcat group) 2>/dev/null | \
  -                           egrep "^[^:]*:[^:]*:${groupid}:" | \
  +                groupname=`egrep "^[^:]*:[^:]*:${groupid}:" /etc/group 2>/dev/null | \
                              sed -e 's/:.*$//'`
                   if [ ".$groupname" = . ]; then
  -                    groupname='?'
  +                    groupname=`(ypcat group) 2>/dev/null | \
  +                               egrep "^[^:]*:[^:]*:${groupid}:" | \
  +                               sed -e 's/:.*$//'`
  +                    if [ ".$groupname" = . ]; then
  +                        groupname='?'
  +                    fi
                   fi
               fi
           fi
  @@ .

From ossp-cvs-owner@ossp.org  Sat Feb 22 13:32:09 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B703576A3B; Sat, 22 Feb 2003 13:32:09 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ README VERSION
Message-Id: <20030222123209.B703576A3B@mail.ossp.org>
Date: Sat, 22 Feb 2003 13:32:09 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Feb-2003 13:32:09
  Branch: HEAD                             Handle: 2003022212320800

  Modified files:
    ossp-pkg/shtool         README VERSION

  Log:
    bump date

  Summary:
    Revision    Changes     Path
    1.91        +1  -1      ossp-pkg/shtool/README
    1.68        +1  -1      ossp-pkg/shtool/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/README
  ============================================================================
  $ cvs diff -u -r1.90 -r1.91 README
  --- ossp-pkg/shtool/README	21 Feb 2003 19:21:49 -0000	1.90
  +++ ossp-pkg/shtool/README	22 Feb 2003 12:32:08 -0000	1.91
  @@ -10,7 +10,7 @@
     http://www.gnu.org/software/shtool/
     ftp://ftp.gnu.org/gnu/shtool/
   
  -  Version 2.0b0 (21-Feb-2003)
  +  Version 2.0b0 (22-Feb-2003)
   
     The GNU shtool program is a compilation of small but very stable and
     portable shell scripts into a single shell tool. All ingredients
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/VERSION
  ============================================================================
  $ cvs diff -u -r1.67 -r1.68 VERSION
  --- ossp-pkg/shtool/VERSION	21 Feb 2003 19:21:49 -0000	1.67
  +++ ossp-pkg/shtool/VERSION	22 Feb 2003 12:32:08 -0000	1.68
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for GNU shtool (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is GNU shtool, Version 2.0b0 (21-Feb-2003)
  +  This is GNU shtool, Version 2.0b0 (22-Feb-2003)
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar  7 11:35:24 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 26A3976C4F; Fri,  7 Mar 2003 11:35:23 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/getopt/ Makefile.in README VERSION configure.ac d...
Message-Id: <20030307103523.26A3976C4F@mail.ossp.org>
Date: Fri,  7 Mar 2003 11:35:23 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Mar-2003 11:35:22
  Branch: HEAD                             Handle: 2003030710351600

  Added files:
    ossp-pkg/getopt         Makefile.in README VERSION configure.ac devtool
                            devtool.conf devtool.func getopt-config.in
                            getopt.1 getopt.3 getopt.c getopt.h getopt.texi
                            getopt1.c getopt_main.c getopt_test.c

  Log:
    add an OSSP collection of GNU getopt sources

  Summary:
    Revision    Changes     Path
    1.1         +65 -0      ossp-pkg/getopt/Makefile.in
    1.1         +33 -0      ossp-pkg/getopt/README
    1.1         +1  -0      ossp-pkg/getopt/VERSION
    1.1         +20 -0      ossp-pkg/getopt/configure.ac
    1.1         +47 -0      ossp-pkg/getopt/devtool
    1.1         +29 -0      ossp-pkg/getopt/devtool.conf
    1.1         +73 -0      ossp-pkg/getopt/devtool.func
    1.1         +122 -0     ossp-pkg/getopt/getopt-config.in
    1.1         +441 -0     ossp-pkg/getopt/getopt.1
    1.1         +327 -0     ossp-pkg/getopt/getopt.3
    1.1         +1056 -0    ossp-pkg/getopt/getopt.c
    1.1         +141 -0     ossp-pkg/getopt/getopt.h
    1.1         +307 -0     ossp-pkg/getopt/getopt.texi
    1.1         +190 -0     ossp-pkg/getopt/getopt1.c
    1.1         +469 -0     ossp-pkg/getopt/getopt_main.c
    1.1         +77 -0      ossp-pkg/getopt/getopt_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/getopt/Makefile.in
  ============================================================================
  $ cvs diff -u -r0 -r1.1 Makefile.in
  --- /dev/null	2003-03-07 11:35:17.000000000 +0100
  +++ Makefile.in	2003-03-07 11:35:17.000000000 +0100
  @@ -0,0 +1,65 @@
  +##
  +##  Makefile for OSSP's GNU getopt source tree
  +##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com> 
  +##
  +
  +DESTDIR     =
  +prefix      = @prefix@
  +exec_prefix = @exec_prefix@
  +bindir      = @bindir@
  +libdir      = @libdir@
  +includedir  = @includedir@
  +mandir      = @mandir@
  +
  +CC          = @CC@
  +CFLAGS      = @CFLAGS@
  +CPPFLAGS    = @DEFS@ -I. -I./lib
  +LDFLAGS     =
  +LIBS        =
  +AR          = @AR@
  +RANLIB      = @RANLIB@
  +RM          = rm -f
  +SHTOOL      = ./shtool
  +
  +all: libgetopt.a getopt
  +
  +libgetopt.a: getopt.o getopt1.o
  +	$(RM) libgetopt.a
  +	$(AR) cq libgetopt.a getopt.o getopt1.o
  +	$(RANLIB) libgetopt.a
  +
  +getopt1.o: getopt1.c
  +	$(CC) $(CFLAGS) $(CPPFLAGS) -o getopt1.o -c getopt1.c
  +
  +getopt.o: getopt.c
  +	$(CC) $(CFLAGS) $(CPPFLAGS) -o getopt.o -c getopt.c
  +
  +getopt: getopt_main.o libgetopt.a
  +	$(CC) $(CFLAGS) $(LDFLAGS) -o getopt getopt_main.o libgetopt.a
  +
  +getopt_main.o: getopt_main.c
  +	$(CC) $(CFLAGS) $(CPPFLAGS) -o getopt_main.o -c getopt_main.c
  +
  +install:
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
  +	$(SHTOOL) install -c -s -m 755 getopt $(DESTDIR)$(bindir)/
  +	$(SHTOOL) install -c -m 755 getopt-config $(DESTDIR)$(bindir)/
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libdir)
  +	$(SHTOOL) install -c -m 644 libgetopt.a $(DESTDIR)$(libdir)/
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(includedir)
  +	$(SHTOOL) install -c -m 644 getopt.h $(DESTDIR)$(includedir)/
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man1
  +	$(SHTOOL) install -c -m 644 getopt.1 $(DESTDIR)$(mandir)/man1/
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man3
  +	$(SHTOOL) install -c -m 644 getopt.3 $(DESTDIR)$(mandir)/man3/
  +
  +clean:
  +	$(RM) getopt.o getopt1.o libgetopt.a
  +	$(RM) getopt_main.o getopt
  +
  +distclean: clean
  +	$(RM) getopt-config config.h config.log config.status Makefile
  +
  +realclean: distclean
  +	$(RM) shtool configure config.h.in
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/getopt/README
  ============================================================================
  $ cvs diff -u -r0 -r1.1 README
  --- /dev/null	2003-03-07 11:35:17.000000000 +0100
  +++ README	2003-03-07 11:35:18.000000000 +0100
  @@ -0,0 +1,33 @@
  +
  +  OSSP's GNU getopt
  +
  +  From gcc 3.2.2 (because more stand-alone than original glibc sources):
  +  [ftp://gcc.gnu.org/pub/gcc/releases/]
  +
  +    include/getopt.h         -> getopt.h
  +    libiberty/getopt.c       -> getopt.c
  +    libiberty/getopt1.c      -> getopt1.c
  +
  +  From glibc 2.3.2:
  +  [ftp://ftp.gnu.org/gnu/glibc/]
  +
  +    posix/tstgetopt.c        -> getopt_test.c
  +    manual/getopt.texi       -> getopt.texi
  +  
  +  From man-pages 1.56:
  +  [ftp://ftp.kernel.org/pub/linux/docs/manpages/]
  +
  +    man3/getopt.3            -> getopt.3
  +
  +  From util-linux 2.11 or getopt 1.1.3:
  +  [http://www.kernel.org/pub/linux/utils/util-linux/]
  +  [http://huizen.dds.nl/~frodol/getopt.html]
  +
  +    getopt.1                 -> getopt.1
  +    getopt.c                 -> getopt_main.c
  +
  +  Plus replace in getop_main.c:
  +    << #include "nls.h"
  +    >> #define WITHOUT_GETTEXT 1
  +    >> #define _(x) x
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/getopt/VERSION
  ============================================================================
  $ cvs diff -u -r0 -r1.1 VERSION
  --- /dev/null	2003-03-07 11:35:17.000000000 +0100
  +++ VERSION	2003-03-07 11:35:18.000000000 +0100
  @@ -0,0 +1 @@
  +20030307
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/getopt/configure.ac
  ============================================================================
  $ cvs diff -u -r0 -r1.1 configure.ac
  --- /dev/null	2003-03-07 11:35:17.000000000 +0100
  +++ configure.ac	2003-03-07 11:35:18.000000000 +0100
  @@ -0,0 +1,20 @@
  +
  +AC_PREREQ(2.57)
  +AC_INIT
  +AC_CONFIG_SRCDIR(Makefile.in)
  +GETOPT_VERSION=`cat VERSION`
  +AC_SUBST(GETOPT_VERSION)
  +
  +AC_PROG_MAKE_SET
  +AC_PROG_CC
  +AC_PATH_PROG(AR, ar, ar)
  +AC_PROG_RANLIB
  +
  +AC_CHECK_HEADERS(string.h strings.h)
  +
  +AC_CONFIG_HEADERS(config.h)
  +AC_CONFIG_FILES([Makefile getopt-config])
  +AC_CONFIG_COMMANDS([adjustment], [chmod a+x getopt-config])
  +
  +AC_OUTPUT
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/getopt/devtool
  ============================================================================
  $ cvs diff -u -r0 -r1.1 devtool
  --- /dev/null	2003-03-07 11:35:17.000000000 +0100
  +++ devtool	2003-03-07 11:35:18.000000000 +0100
  @@ -0,0 +1,47 @@
  +#!/bin/sh
  +##
  +##  devtool -- Development Tool
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com> 
  +##
  +
  +if [ $# -eq 0 ]; then
  +    echo "devtool:USAGE: devtool <command> [<arg> ...]" 1>&2
  +    exit 1
  +fi
  +
  +cmd="$1"
  +shift
  +
  +devtoolfunc="./devtool.func"
  +
  +if [ ! -f devtool.conf ]; then
  +    echo "devtool:ERROR: no devtool.conf in current directory" 1>&2
  +    exit 1
  +fi
  +
  +cmdline=`grep "^%$cmd" devtool.conf`
  +if [ ".$cmdline" = . ]; then
  +    echo "devtool:ERROR: command $cmd not found in devtool.conf" 1>&2
  +    exit 1
  +fi
  +
  +if [ ".$TMPDIR" != . ]; then
  +    tmpdir="$TMPDIR"
  +elif [ ".$TEMPDIR" != . ]; then
  +    tmpdir="$TEMPDIR"
  +else
  +    tmpdir="/tmp"
  +fi
  +tmpfile="$tmpdir/rc.$$.tmp"
  +
  +rm -f $tmpfile
  +touch $tmpfile
  +echo ". $devtoolfunc" >>$tmpfile
  +( sed <devtool.conf -e "1,/^%common/d" -e '/^%.*/,$d'
  +  sed <devtool.conf -e "1,/^%$cmd/d" -e '/^%.*/,$d' ) |\
  +sed -e 's;\([ 	]\)@\([a-zA-Z_][a-zA-Z0-9_]*\);\1devtool_\2;' >>$tmpfile
  +
  +sh $tmpfile "$@"
  +
  +rm -f $tmpfile >/dev/null 2>&1 || true
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/getopt/devtool.conf
  ============================================================================
  $ cvs diff -u -r0 -r1.1 devtool.conf
  --- /dev/null	2003-03-07 11:35:17.000000000 +0100
  +++ devtool.conf	2003-03-07 11:35:18.000000000 +0100
  @@ -0,0 +1,29 @@
  +##
  +##  devtool.conf -- Development Tool Configuration
  +##
  +
  +%autogen
  +    @autogen shtool   1.6.2 "1.[56].*" all
  +    @autogen autoconf 2.57  "2.5[3-9]*"
  +
  +%autoclean
  +    @autoclean shtool
  +    @autoclean autoconf
  +
  +%configure
  +    ./configure --prefix=/tmp/getopt "$@"
  +
  +%dist
  +    rm -f getopt-*.tar.gz
  +    ./devtool autoclean
  +    ./devtool autogen
  +    ./configure
  +    make clean all
  +    make distclean
  +    ./shtool fixperm -v .
  +    V=`cat VERSION`
  +    ./shtool tarball -o getopt-${V}.tar.gz -d getopt-${V} -u gnu -g getopt \
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*' -c 'gzip --best' .
  +    ls -l getopt-${V}.tar.gz
  +    gunzip <getopt-${V}.tar.gz | tar tvf -
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/getopt/devtool.func
  ============================================================================
  $ cvs diff -u -r0 -r1.1 devtool.func
  --- /dev/null	2003-03-07 11:35:17.000000000 +0100
  +++ devtool.func	2003-03-07 11:35:19.000000000 +0100
  @@ -0,0 +1,73 @@
  +##
  +##  devtool.func -- Development Tool Functions
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com> 
  +##
  +
  +devtool_require () {
  +    t="$1"; o="$2"; p="$3"; e="$4"; a="$5"
  +    v=`($t $o | head -1 | awk "{ print \\\$$p; }") 2>/dev/null`
  +    if [ ".$v" = . ]; then
  +        echo "devtool:ERROR: unable to determine version of $t" 1>&2
  +        exit 1
  +    fi
  +    case "$v" in
  +        $e )
  +            ;;
  +        $a )
  +            echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
  +            ;;
  +        * )
  +            echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
  +            exit 1
  +            ;;
  +    esac
  +    echo "$v"
  +}
  +
  +devtool_autogen () {
  +    tool=$1
  +    shift
  +    case $tool in
  +        autoconf )
  +            autoconf_version=`devtool_require autoconf --version 4 "$1" "$2"`
  +            echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
  +            autoconf
  +            autoheader 2>&1 | grep -v "is unchanged"
  +            rm -rf autom4te.cache >/dev/null 2>&1
  +            ;;
  +        libtool )
  +            libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
  +            echo "generating (GNU Libtool $libtoolize_version): ltmain.sh, libtool.m4, config.guess, config.sub"
  +            libtoolize --force --copy >/dev/null 2>&1
  +            cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
  +                sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` libtool.m4
  +            ;;
  +        shtool )
  +            shtoolize_version=`devtool_require shtoolize -v 3 "$1" "$2"`
  +            echo "generating (GNU Shtool $shtoolize_version): shtool"
  +            shift
  +            shift
  +            shtoolize -q "$@"
  +            ;;
  +    esac
  +}
  +
  +devtool_autoclean () {
  +    tool=$1
  +    shift
  +    case $tool in
  +        autoconf )
  +            echo "removing: configure config.h.in"
  +            rm -f configure config.h.in
  +            ;;
  +        libtool )
  +            echo "removing: ltmain.sh libtool.m4 config.guess config.sub"
  +            rm -f ltmain.sh libtool.m4 config.guess config.sub
  +            ;;
  +        shtool )
  +            echo "removing: shtool"
  +            rm -f shtool
  +            ;;
  +    esac
  +}
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/getopt/getopt-config.in
  ============================================================================
  $ cvs diff -u -r0 -r1.1 getopt-config.in
  --- /dev/null	2003-03-07 11:35:17.000000000 +0100
  +++ getopt-config.in	2003-03-07 11:35:20.000000000 +0100
  @@ -0,0 +1,122 @@
  +#!/bin/sh
  +##
  +##  getopt-config
  +##
  +
  +DIFS=' 
  +'
  +
  +#   tool
  +tool_name="getopt-config"
  +
  +#   library version
  +lib_name="GNU getopt"
  +lib_version="@GETOPT_VERSION@"
  +
  +#   build paths
  +prefix="@prefix@"
  +exec_prefix="@exec_prefix@"
  +bindir="@bindir@"
  +libdir="@libdir@"
  +includedir="@includedir@"
  +mandir="@mandir@"
  +datadir="@datadir@"
  +
  +#   build options
  +cflags="@CFLAGS@"
  +ldflags="@LDFLAGS@"
  +libs="@LIBS@"
  +
  +#   option defaults
  +help=no
  +version=no
  +
  +usage="$tool_name"
  +usage="$usage [--help] [--version] [--all]"
  +usage="$usage [--prefix] [--exec-prefix] [--bindir] [--libdir] [--includedir] [--mandir] [--datadir]"
  +usage="$usage [--cflags] [--ldflags] [--libs]"
  +if [ $# -eq 0 ]; then
  +    echo "$tool_name:Error: Invalid option" 1>&2
  +    echo "$tool_name:Usage: $usage" 1>&2
  +    exit 1
  +fi
  +output=''
  +output_extra=''
  +all=no
  +prev=''
  +OIFS="$IFS" IFS="$DIFS"
  +for option
  +do
  +    if [ ".$prev" != . ]; then
  +        eval "$prev=\$option"
  +        prev=''
  +        continue
  +    fi
  +    case "$option" in
  +        -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
  +           *) optarg='' ;;
  +    esac
  +    case "$option" in
  +        --help|-h)
  +            echo "Usage: $usage"
  +            exit 0
  +            ;;
  +        --version|-v)
  +            echo "$lib_name $lib_version"
  +            exit 0
  +            ;;
  +        --all)
  +            all=yes
  +            ;;
  +        --prefix)
  +            output="$output $prefix"
  +            ;;
  +        --exec-prefix)
  +            output="$output $exec_prefix"
  +            ;;
  +        --bindir)
  +            output="$output $bindir"
  +            ;;
  +        --libdir)
  +            output="$output $libdir"
  +            ;;
  +        --includedir)
  +            output="$output $includedir"
  +            ;;
  +        --mandir)
  +            output="$output $mandir"
  +            ;;
  +        --datadir)
  +            output="$output $datadir"
  +            ;;
  +        --cflags)
  +            output="$output -I$includedir"
  +            output_extra="$output_extra $cflags"
  +            ;;
  +        --ldflags)
  +            output="$output -L$libdir"
  +            output_extra="$output_extra $ldflags"
  +            ;;
  +        --libs)
  +            output="$output -lgetopt"
  +            output_extra="$output_extra $libs"
  +            ;;
  +        * )
  +            echo "$tool_name:Error: Invalid option" 1>&2
  +            echo "$tool_name:Usage: $usage" 1>&2
  +            exit 1;
  +            ;;
  +    esac
  +done
  +IFS="$OIFS"
  +if [ ".$prev" != . ]; then
  +    echo "$tool_name:Error: missing argument to --`echo $prev | sed 's/_/-/g'`" 1>&2
  +    exit 1
  +fi
  +if [ ".$output" != . ]; then
  +    if [ ".$all" = .yes ]; then
  +        output="$output $output_extra"
  +    fi
  +    echo $output
  +fi
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/getopt/getopt.1
  ============================================================================
  $ cvs diff -u -r0 -r1.1 getopt.1
  --- /dev/null	2003-03-07 11:35:17.000000000 +0100
  +++ getopt.1	2003-03-07 11:35:20.000000000 +0100
  @@ -0,0 +1,441 @@
  +.TH GETOPT 1 "May 31, 1997" Linux ""
  +.SH NAME
  +getopt \- parse command options (enhanced)
  +.SH SYNOPSIS
  +.BR getopt " optstring parameters"
  +
  +.BR getopt " [options] [" \-\- "] optstring parameters"
  +
  +.BR getopt " [options] " \-o | \-\-options " optstring [options] [" \-\- "] parameters"
  +.SH DESCRIPTION
  +.B getopt
  +is used to break up 
  +.RI ( parse )
  +options in command lines for easy parsing by
  +shell procedures, and to check for legal options.
  +It uses the 
  +.SM GNU
  +.BR getopt (3) 
  +routines to do this.
  +
  +The parameters 
  +.B getopt
  +is called with can be divided into two parts: options
  +which modify the way getopt will parse
  +.RI ( options
  +and
  +.I \-o|\-\-options optstring
  +in the 
  +.BR SYNOPSIS), 
  +and the parameters which are to be
  +parsed
  +.RI ( parameters
  +in the 
  +.BR SYNOPSIS).
  +The second part will start at the first non\-option parameter
  +that is not an option argument, or after the first occurence of 
  +.RB ` \-\- '.
  +If no 
  +.RB ` \-o ' 
  +or 
  +.RB ` \-\-options ' 
  +option is found in the first part, the first
  +parameter of the second part is used as the short options string.
  +
  +If the environment variable
  +.B GETOPT_COMPATIBLE
  +is set, or if its first parameter 
  +is not an option (does not start with a
  +.RB ` \- ',
  +this is the first format in the 
  +.BR SYNOPSIS),
  +.B getopt
  +will generate output that is compatible with that of other versions of 
  +.BR getopt (1). 
  +It will still do parameter shuffling and recognize optional
  +arguments (see section
  +.B COMPATIBILITY
  +for more information). 
  +
  +Traditional implementations of
  +.BR getopt (1)
  +are unable to cope with whitespace and other (shell\-specific) special characters
  +in arguments and non\-option parameters. To solve this problem, this 
  +implementation can generate
  +quoted output which must once again be interpreted by the shell (usually
  +by using the
  +.B eval
  +command). This has the effect of preserving those characters, but
  +you must call 
  +.B getopt
  +in a way that is no longer compatible with other versions (the second 
  +or third format in the 
  +.BR SYNOPSIS). 
  +To determine whether this enhanced version of
  +.BR getopt (1)
  +is installed, a special test option
  +.RB ( \-T ) 
  +can be used.
  +.SH OPTIONS
  +.IP "\-a, \-\-alternative"
  +Allow long options to start with a single 
  +.RB ` \- '.
  +.IP "\-h, \-\-help"
  +Output a small usage guide and exit succesfully. No other output is generated. 
  +.IP "\-l, \-\-longoptions longopts"
  +The long (multi\-character) options to be recognized. 
  +More than one option name
  +may be specified at once, by separating the names with commas. This option 
  +may be given more than once, the 
  +.I longopts 
  +are cumulative.
  +Each long option name
  +in 
  +.I longopts 
  +may be followed by one colon to indicate it has a required argument,and by two colons to indicate it has an optional argument.
  +.IP "\-n, \-\-name progname"
  +The name that will be used by the 
  +.BR getopt (3)
  +routines when it reports errors. Note that errors of
  +.BR getopt (1)
  +are still reported as coming from getopt.
  +.IP "\-o, \-\-options shortopts"
  +The short (one\-character) options to be recognized. If this option is not
  +found, the first parameter of 
  +.B getopt 
  +that does not start with
  +a 
  +.RB ` \- ' 
  +(and is not an option argument) is used as the short options string.
  +Each short option character
  +in 
  +.I shortopts 
  +may be followed by one colon to indicate it has a required argument,
  +and by two colons to indicate it has an optional argument.
  +The first character of shortopts may be 
  +.RB ` + ' 
  +or
  +.RB ` \- ' 
  +to influence the way
  +options are parsed and output is generated (see section 
  +.B SCANNING MODES
  +for details).
  +.IP "\-q, \-\-quiet"
  +Disable error reporting by getopt(3).
  +.IP "\-Q, \-\-quiet\-output"
  +Do not generate normal output. Errors are still reported by
  +.BR getopt (3), 
  +unless you also use 
  +.IR \-q .
  +.IP "\-s, \-\-shell shell"
  +Set quoting conventions to those of shell. If no \-s argument is found,
  +the
  +.SM BASH
  +conventions are used. Valid arguments are currently
  +.RB ` sh '
  +.RB ` bash ',
  +.RB ` csh ',
  +and
  +.RB ` tcsh '.
  +.IP "\-u, \-\-unquoted"
  +Do not quote the output. Note that whitespace and special (shell\-dependent)
  +characters can cause havoc in this mode (like they do with other
  +.BR getopt (1)
  +implementations).
  +.IP "\-T \-\-test"
  +Test if your 
  +.BR getopt (1) 
  +is this enhanced version or an old version. This generates no output, 
  +and sets the error status to 4. Other implementations of 
  +.BR getopt (1),
  +and this version if the environment variable
  +.B GETOPT_COMPATIBLE
  +is set,
  +will return 
  +.RB ` \-\- ' 
  +and error status 0.
  +.IP "\-V, \-\-version"
  +Output version information and exit succesfully. No other output is generated. 
  +.SH PARSING
  +This section specifies the format of the second part of the parameters of
  +.B getopt
  +(the 
  +.I parameters 
  +in the 
  +.BR SYNOPSIS ). 
  +The next section 
  +.RB ( OUTPUT ) 
  +describes the output that is 
  +generated. These parameters were typically the parameters a shell function
  +was called with. 
  +Care must be taken that each parameter the shell function was
  +called with corresponds to exactly one parameter in the parameter list of
  +.B getopt 
  +(see the 
  +.BR EXAMPLES ). 
  +All parsing is done by the GNU 
  +.BR getopt (3) 
  +routines. 
  +
  +The parameters are parsed from left to right. Each parameter is classified as a
  +short option, a long option, an argument to an option,
  +or a non\-option parameter.
  +
  +A simple short option is a 
  +.RB ` \- ' 
  +followed by a short option character. If
  +the option has a required argument, it may be written directly after the option
  +character or as the next parameter (ie. separated by whitespace on the 
  +command line). If the
  +option has an optional argument, it must be written directly after the
  +option character if present.
  +
  +It is possible to specify several short options after one 
  +.RB ` \- ', 
  +as long as all (except possibly the last) do not have required or optional
  +arguments.
  +
  +A long option normally begins with 
  +.RB ` \-\- ' 
  +followed by the long option name.
  +If the option has a required argument, it may be written directly after
  +the long option name, separated by 
  +.RB ` = ', 
  +or as the next argument (ie. separated by whitespace on the command line). 
  +If the option has an optional argument, it must
  +be written directly after the long option name, separated by 
  +.RB ` = ', 
  +if present (if you add the 
  +.RB ` = ' 
  +but nothing behind it, it is interpreted
  +as if no argument was present; this is a slight bug, see the 
  +.BR BUGS ).
  +Long options may be abbreviated, as long as the abbreviation is not
  +ambiguous.
  +
  +Each parameter not starting with a 
  +.RB ` \- ', 
  +and not a required argument of
  +a previous option, is a non\-option parameter. Each parameter after
  +a 
  +.RB ` \-\- ' 
  +parameter is always interpreted as a non\-option parameter.
  +If the environment variable 
  +.B POSIXLY_CORRECT 
  +is set, or if the short
  +option string started with a 
  +.RB ` + ', 
  +all remaining parameters are interpreted
  +as non\-option parameters as soon as the first non\-option parameter is
  +found.
  +.SH OUTPUT
  +Output is generated for each element described in the previous section. 
  +Output is done
  +in the same order as the elements are specified in the input, except
  +for non\-option parameters. Output can be done in 
  +.I compatible 
  +.RI ( unquoted )
  +mode, or in such way that whitespace and other special characters within
  +arguments and non\-option parameters are preserved (see 
  +.BR QUOTING ).
  +When the output is processed in the shell script, it will seem to be
  +composed of distinct elements that can be processed one by one (by using the
  +shift command in most shell languages). This is imperfect in unquoted mode,
  +as elements can be split at unexpected places if they contain whitespace
  +or special characters.
  +
  +If there are problems parsing the parameters, for example because a
  +required argument is not found or an option is not recognized, an error
  +will be reported on stderr, there will be no output for the offending
  +element, and a non\-zero error status is returned.
  +
  +For a short option, a single 
  +.RB ` \- ' 
  +and the option character are generated
  +as one parameter. If the option has an argument, the next
  +parameter will be the argument. If the option takes an optional argument,
  +but none was found, the next parameter will be generated but be empty in
  +quoting mode,
  +but no second parameter will be generated in unquoted (compatible) mode.
  +Note that many other 
  +.BR getopt (1) 
  +implemetations do not support optional arguments.
  +
  +If several short options were specified after a single 
  +.RB ` \- ', 
  +each will be present in the output as a separate parameter.
  +
  +For a long option, 
  +.RB ` \-\- ' 
  +and the full option name are generated as one
  +parameter. This is done regardless whether the option was abbreviated or
  +specified with a single 
  +.RB ` \- ' 
  +in the input. Arguments are handled as with short options.
  +
  +Normally, no non\-option parameters output is generated until all options
  +and their arguments have been generated. Then 
  +.RB ` \-\- ' 
  +is generated as a
  +single parameter, and after it the non\-option parameters in the order
  +they were found, each as a separate parameter.
  +Only if the first character of the short options string was a 
  +.RB ` \- ',
  +non\-option parameter output is generated at the place they are found in the 
  +input (this is not supported if the first format of the 
  +.B SYNOPSIS
  +is used; in that case all preceding occurences of
  +.RB ` \- '
  +and 
  +.RB ` + '
  +are ignored). 
  +.SH QUOTING
  +In compatible mode, whitespace or 'special' characters in arguments or
  +non\-option parameters are not handled correctly. As the output is 
  +fed to the shell script, the script does not know how it is supposed to break 
  +the output into separate parameters.  To circumvent this
  +problem, this implementation offers quoting. The idea is that output
  +is generated with quotes around each parameter. When this output is once
  +again fed to the shell (usually by a shell 
  +.B eval 
  +command), it is split correctly into separate parameters.
  +
  +Quoting is not enabled if the environment variable
  +.B GETOPT_COMPATIBLE
  +is set, if the first form of the
  +.B SYNOPSIS
  +is used, or if the option
  +.RB ` \-u '
  +is found.
  +
  +Different shells use different quoting conventions. You can use the 
  +.RB ` \-s '
  +option to select the shell you are using. The following shells are
  +currently supported:
  +.RB ` sh ',
  +.RB ` bash ',
  +.RB ` csh ' 
  +and
  +.RB ` tcsh '.
  +Actually, only two `flavors' are distinguished: sh\-like quoting conventions 
  +and csh\-like quoting conventions. Chances are that if you use another shell
  +script language, one of these flavors can still be used.
  +
  +.SH "SCANNING MODES"
  +The first character of the short options string may be a
  +.RB ` \- '
  +or a
  +.RB ` + '
  +to indicate a special scanning mode. If the first calling form
  +in the
  +.B SYNOPSIS 
  +is used they are ignored; the environment variable
  +.B POSIXLY_CORRECT
  +is still examined, though.
  +
  +If the first character is 
  +.RB ` + ',
  +or if the environment variable 
  +.B POSIXLY_CORRECT
  +is set, parsing stops as soon as the first non\-option parameter 
  +(ie. a parameter that does not start with a 
  +.RB ` \- ')
  +is found that
  +is not an option argument. The remaining parameters are all interpreted as
  +non\-option parameters.
  +
  +If the first character is a
  +.RB ` \- ',
  +non\-option parameters are outputed at the place where they are found; in normal
  +operation, they are all collected at the end of output after a 
  +.RB ` \-\- ' 
  +parameter has been generated. Note that this
  +.RB ` \-\- '
  +parameter is still generated, but it will always be the last parameter in
  +this mode.
  +.SH COMPATIBILITY
  +This version of 
  +.BR getopt (1)
  +is written to be as compatible as possible to 
  +other versions. Usually you can just replace them with this version
  +without any modifications, and with some advantages.
  +
  +If the first character of the first parameter of getopt is not a 
  +.RB ` \- ', 
  +getopt goes into compatibility mode. It will interpret its first parameter as
  +the string of short options, and all other arguments will be parsed. It
  +will still do parameter shuffling (ie. all non\-option parameters are outputed
  +at the end), unless the environment variable 
  +.B POSIXLY_CORRECT 
  +is set.
  +
  +The environment variable 
  +.B GETOPT_COMPATIBLE 
  +forces 
  +.B getopt
  +into compatibility mode. Setting both this environment variable and
  +.B POSIXLY_CORRECT
  +offers 100% compatibility for `difficult' programs. Usually, though,
  +neither is needed.
  +
  +In compatibility mode, leading 
  +.RB ` \- '
  +and 
  +.RB ` + '
  +characters in the short options string are ignored.
  +.SH RETURN CODES
  +.B getopt
  +returns error code 
  +.B 0 
  +for succesful parsing, 
  +.B 1
  +if
  +.BR getopt (3)
  +returns errors,
  +.B 2 
  +if it does not understand its own parameters,
  +.B 3
  +if an internal error occurs like out\-of\-memory, and
  +.B 4
  +if it is called with 
  +.BR \-T .
  +.SH EXAMPLES
  +Example scripts for (ba)sh and (t)csh are provided with the
  +.BR getopt (1)
  +distribution, and are optionally installed in 
  +.B /usr/local/lib/getopt 
  +or 
  +.BR /usr/lib/getopt .
  +.SH ENVIRONMENT
  +.IP POSIXLY_CORRECT
  +This environment variable is examined by the
  +.BR getopt (3)
  +routines.
  +If it is set, parsing stops as soon as a parameter
  +is found that is not an option or an option argument. All remaining 
  +parameters are also interpreted as non\-option parameters, regardless
  +whether they start with a 
  +.RB ` \- '.
  +.IP GETOPT_COMPATIBLE
  +Forces
  +.B getopt
  +to use the first calling format as specified in the
  +.BR SYNOPSIS .
  +.SH BUGS
  +.BR getopt (3)
  +can parse long options with optional arguments that are given an empty optional
  +argument (but can not do this for short options). This 
  +.BR getopt (1)
  +treats optional arguments that are empty as if they were not present.
  +
  +The syntax if you do not want any short option variables at all is
  +not very intuitive (you have to set them explicitely to the empty
  +string).
  +
  +.SH AUTHOR
  +Frodo Looijaard <frodol@dds.nl>
  +.SH "SEE ALSO"
  +.BR getopt (3),
  +.BR bash (1),
  +.BR tcsh (1).
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/getopt/getopt.3
  ============================================================================
  $ cvs diff -u -r0 -r1.1 getopt.3
  --- /dev/null	2003-03-07 11:35:17.000000000 +0100
  +++ getopt.3	2003-03-07 11:35:20.000000000 +0100
  @@ -0,0 +1,327 @@
  +.\" (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de)
  +.\"
  +.\" Permission is granted to make and distribute verbatim copies of this
  +.\" manual provided the copyright notice and this permission notice are
  +.\" preserved on all copies.
  +.\"
  +.\" Permission is granted to copy and distribute modified versions of this
  +.\" manual under the conditions for verbatim copying, provided that the
  +.\" entire resulting derived work is distributed under the terms of a
  +.\" permission notice identical to this one
  +.\" 
  +.\" Since the Linux kernel and libraries are constantly changing, this
  +.\" manual page may be incorrect or out-of-date.  The author(s) assume no
  +.\" responsibility for errors or omissions, or for damages resulting from
  +.\" the use of the information contained herein.  The author(s) may not
  +.\" have taken the same level of care in the production of this manual,
  +.\" which is licensed free of charge, as they might when working
  +.\" professionally.
  +.\" 
  +.\" Formatted or processed versions of this manual, if unaccompanied by
  +.\" the source, must acknowledge the copyright and authors of this work.
  +.\" License.
  +.\" Modified Sat Jul 24 19:27:50 1993 by Rik Faith (faith@cs.unc.edu)
  +.\" Modified Mon Aug 30 22:02:34 1995 by Jim Van Zandt <jrv@vanzandt.mv.com>
  +.\"  longindex is a pointer, has_arg can take 3 values, using consistent
  +.\"  names for optstring and longindex, "\n" in formats fixed.  Documenting
  +.\"  opterr and getopt_long_only.  Clarified explanations (borrowing heavily
  +.\"  from the source code).
  +.\" Modified 8 May 1998 by Joseph S. Myers (jsm28@cam.ac.uk)
  +.\" Modified 990715, aeb: changed `EOF' into `-1' since that is what POSIX
  +.\"  says; moreover, EOF is not defined in <unistd.h>.
  +.\" Modified 2002-02-16, joey: added information about non-existing
  +.\"  option character and colon as first option character
  +.\"
  +.TH GETOPT 3  2002-02-16 "GNU" "Linux Programmer's Manual"
  +.SH NAME
  +getopt \- Parse command line options
  +.SH SYNOPSIS
  +.nf
  +.B #include <unistd.h>
  +.sp
  +.BI "int getopt(int " argc ", char * const " argv[] ,
  +.BI "           const char *" optstring );
  +.sp
  +.BI "extern char *" optarg ;
  +.BI "extern int " optind ", " opterr ", " optopt ;
  +.sp
  +.B #define _GNU_SOURCE
  +.br
  +.B #include <getopt.h>
  +.sp
  +.BI "int getopt_long(int " argc ", char * const " argv[] ,
  +.BI "           const char *" optstring ,
  +.BI "           const struct option *" longopts ", int *" longindex );
  +.sp
  +.BI "int getopt_long_only(int " argc ", char * const " argv[] ,
  +.BI "           const char *" optstring ,
  +.BI "           const struct option *" longopts ", int *" longindex );
  +.fi
  +.SH DESCRIPTION
  +The
  +.B getopt()
  +function parses the command line arguments.  Its arguments
  +.I argc
  +and
  +.I argv
  +are the argument count and array as passed to the
  +.B main()
  +function on program invocation.
  +An element of \fIargv\fP that starts with `-' (and is not exactly "-" or "--")
  +is an option element.  The characters of this element
  +(aside from the initial `-') are option characters.  If \fBgetopt()\fP
  +is called repeatedly, it returns successively each of the option characters
  +from each of the option elements.
  +.PP
  +If \fBgetopt()\fP finds another option character, it returns that
  +character, updating the external variable \fIoptind\fP and a static
  +variable \fInextchar\fP so that the next call to \fBgetopt()\fP can
  +resume the scan with the following option character or
  +\fIargv\fP-element.
  +.PP
  +If there are no more option characters, \fBgetopt()\fP returns \-1.
  +Then \fIoptind\fP is the index in \fIargv\fP of the first
  +\fIargv\fP-element that is not an option.
  +.PP
  +.I optstring
  +is a string containing the legitimate option characters.  If such a
  +character is followed by a colon, the option requires an argument, so
  +\fBgetopt\fP places a pointer to the following text in the same
  +\fIargv\fP-element, or the text of the following \fIargv\fP-element, in
  +.IR optarg .
  +Two colons mean an option takes
  +an optional arg; if there is text in the current \fIargv\fP-element,
  +it is returned in \fIoptarg\fP, otherwise \fIoptarg\fP is set to zero.
  +This is a GNU extension.  If
  +.I optstring
  +contains
  +.B W
  +followed by a semicolon, then
  +.B -W foo
  +is treated as the long option
  +.BR --foo .
  +(The
  +.B -W
  +option is reserved by POSIX.2 for implementation extensions.)
  +This behaviour is a GNU extension, not available with libraries before
  +GNU libc 2.
  +.PP
  +By default, \fBgetopt()\fP permutes the contents of \fIargv\fP as it
  +scans, so that eventually all the non-options are at the end.  Two
  +other modes are also implemented.  If the first character of
  +\fIoptstring\fP is `+' or the environment variable POSIXLY_CORRECT is
  +set, then option processing stops as soon as a non-option argument is
  +encountered.  If the first character of \fIoptstring\fP is `-', then
  +each non-option \fIargv\fP-element is handled as if it were the argument of
  +an option with character code 1.  (This is used by programs that were
  +written to expect options and other \fIargv\fP-elements in any order
  +and that care about the ordering of the two.)
  +The special argument `--' forces an end of option-scanning regardless
  +of the scanning mode.
  +.PP
  +If \fBgetopt()\fP does not recognize an option character, it prints an
  +error message to stderr, stores the character in \fIoptopt\fP, and
  +returns `?'.  The calling program may prevent the error message by
  +setting \fIopterr\fP to 0.
  +.PP
  +If \fBgetopt()\fP finds an option character in \fIargv\fP that was not
  +included in \fIoptstring\fP, or if it detects a missing option argument,
  +it returns `?'  and sets the external variable \fIoptopt\fP to the
  +actual option character.  If the first character of \fIoptstring\fP
  +is a colon (`:'), then \fBgetopt()\fP returns `:' instead of `?' to
  +indicate a missing option argument.  If an error was detected, and
  +the first character of \fIoptstring\fP is not a colon, and
  +the external variable \fIopterr\fP is nonzero (which is the default),
  +\fBgetopt()\fP prints an error message.
  +.PP
  +The
  +.B getopt_long()
  +function works like
  +.B getopt()
  +except that it also accepts long options, started out by two dashes.
  +Long option names may be abbreviated if the abbreviation is
  +unique or is an exact match for some defined option.  A long option 
  +may take a parameter, of the form
  +.B --arg=param
  +or
  +.BR "--arg param" .
  +.PP
  +.I longopts
  +is a pointer to the first element of an array of
  +.B struct option
  +declared in
  +.B <getopt.h>
  +as
  +.nf
  +.sp
  +.in 10
  +struct option {
  +.in 14
  +const char *name;
  +int has_arg;
  +int *flag;
  +int val;
  +.in 10
  +};
  +.fi
  +.PP
  +The meanings of the different fields are:
  +.TP
  +.I name
  +is the name of the long option.
  +.TP
  +.I has_arg
  +is:
  +\fBno_argument\fP (or 0) if the option does not take an argument,
  +\fBrequired_argument\fP (or 1) if the option requires an argument, or
  +\fBoptional_argument\fP (or 2) if the option takes an optional argument.
  +.TP
  +.I flag
  +specifies how results are returned for a long option.  If \fIflag\fP
  +is \fBNULL\fP, then \fBgetopt_long()\fP returns \fIval\fP.  (For
  +example, the calling program may set \fIval\fP to the equivalent short
  +option character.)  Otherwise, \fBgetopt_long()\fP returns 0, and
  +\fIflag\fP points to a variable which is set to \fIval\fP if the
  +option is found, but left unchanged if the option is not found.
  +.TP
  +\fIval\fP 
  +is the value to return, or to load into the variable pointed
  +to by \fIflag\fP.
  +.PP
  +The last element of the array has to be filled with zeroes.
  +.PP
  +If \fIlongindex\fP is not \fBNULL\fP, it
  +points to a variable which is set to the index of the long option relative to
  +.IR longopts .
  +.PP
  +\fBgetopt_long_only()\fP is like \fBgetopt_long()\fP, but `-' as well 
  +as `--' can indicate a long option.  If an option that starts with `-'
  +(not `--') doesn't match a long option, but does match a short option,
  +it is parsed as a short option instead.  
  +.SH "RETURN VALUE"
  +The
  +.B getopt()
  +function returns the option character if the option was found
  +successfully, `:' if there was a missing parameter for one of the
  +options, `?' for an unknown option character, or \-1
  +for the end of the option list.
  +.PP
  +\fBgetopt_long()\fP and \fBgetopt_long_only()\fP also return the option
  +character when a short option is recognized.  For a long option, they
  +return \fIval\fP if \fIflag\fP is \fBNULL\fP, and 0 otherwise.  Error
  +and \-1 returns are the same as for \fBgetopt()\fP, plus `?' for an
  +ambiguous match or an extraneous parameter.
  +.SH "ENVIRONMENT VARIABLES"
  +.TP
  +.SM
  +.B POSIXLY_CORRECT
  +If this is set, then option processing stops as soon as a non-option 
  +argument is encountered.
  +.TP
  +.SM
  +.B _<PID>_GNU_nonoption_argv_flags_
  +This variable was used by
  +.B bash
  +2.0 to communicate to GNU libc which arguments are the results of
  +wildcard expansion and so should not be considered as options.  This
  +behaviour was removed in
  +.B bash
  +version 2.01, but the support remains in GNU libc.
  +.SH EXAMPLE
  +The following example program illustrates the use of
  +.BR getopt_long()
  +with most of its features.
  +.nf
  +.sp
  +#include <stdio.h>     /* for printf */
  +#include <stdlib.h>    /* for exit */
  +#include <getopt.h>
  +
  +int
  +main (int argc, char **argv) {
  +    int c;
  +    int digit_optind = 0;
  +
  +    while (1) {
  +        int this_option_optind = optind ? optind : 1;
  +        int option_index = 0;
  +        static struct option long_options[] = {
  +            {"add", 1, 0, 0},
  +            {"append", 0, 0, 0},
  +            {"delete", 1, 0, 0},
  +            {"verbose", 0, 0, 0},
  +            {"create", 1, 0, 'c'},
  +            {"file", 1, 0, 0},
  +            {0, 0, 0, 0}
  +        };
  +
  +        c = getopt_long (argc, argv, "abc:d:012",
  +                 long_options, &option_index);
  +        if (c == -1)
  +            break;
  +
  +        switch (c) {
  +        case 0:
  +            printf ("option %s", long_options[option_index].name);
  +            if (optarg)
  +                printf (" with arg %s", optarg);
  +            printf ("\\n");
  +            break;
  +
  +        case '0':
  +        case '1':
  +        case '2':
  +            if (digit_optind != 0 && digit_optind != this_option_optind)
  +              printf ("digits occur in two different argv-elements.\\n");
  +            digit_optind = this_option_optind;
  +            printf ("option %c\\n", c);
  +            break;
  +
  +        case 'a':
  +            printf ("option a\\n");
  +            break;
  +
  +        case 'b':
  +            printf ("option b\\n");
  +            break;
  +
  +        case 'c':
  +            printf ("option c with value `%s'\\n", optarg);
  +            break;
  +
  +        case 'd':
  +            printf ("option d with value `%s'\\n", optarg);
  +            break;
  +
  +        case '?':
  +            break;
  +
  +        default:
  +            printf ("?? getopt returned character code 0%o ??\\n", c);
  +        }
  +    }
  +
  +    if (optind < argc) {
  +        printf ("non-option ARGV-elements: ");
  +        while (optind < argc)
  +            printf ("%s ", argv[optind++]);
  +        printf ("\\n");
  +    }
  +
  +    exit (0);
  +}
  +.fi
  +.SH BUGS
  +The POSIX.2 specification of
  +.B getopt()
  +has a technical error described in POSIX.2 Interpretation 150.  The GNU
  +implementation (and probably all other implementations) implements the
  +correct behaviour rather than that specified.
  +.SH "CONFORMING TO"
  +.TP
  +\fBgetopt()\fP:
  +POSIX.2, provided the environment variable POSIXLY_CORRECT is set.
  +Otherwise, the elements of \fIargv\fP aren't really const, because we
  +permute them.  We pretend they're const in the prototype to be
  +compatible with other systems.
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/getopt/getopt.c
  ============================================================================
  $ cvs diff -u -r0 -r1.1 getopt.c
  --- /dev/null	2003-03-07 11:35:17.000000000 +0100
  +++ getopt.c	2003-03-07 11:35:20.000000000 +0100
  @@ -0,0 +1,1056 @@
  +/* Getopt for GNU.
  +   NOTE: getopt is now part of the C library, so if you don't know what
  +   "Keep this file name-space clean" means, talk to drepper@gnu.org
  +   before changing it!
  +
  +   Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98
  +   	Free Software Foundation, Inc.
  +
  +   NOTE: This source is derived from an old version taken from the GNU C
  +   Library (glibc).
  +
  +   This program is free software; you can redistribute it and/or modify it
  +   under the terms of the GNU General Public License as published by the
  +   Free Software Foundation; either version 2, or (at your option) any
  +   later version.
  +
  +   This program is distributed in the hope that it will be useful,
  +   but WITHOUT ANY WARRANTY; without even the implied warranty of
  +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  +   GNU General Public License for more details.
  +
  +   You should have received a copy of the GNU General Public License
  +   along with this program; if not, write to the Free Software
  +   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +   USA.  */
  +
  +/* This tells Alpha OSF/1 not to define a getopt prototype in <stdio.h>.
  +   Ditto for AIX 3.2 and <stdlib.h>.  */
  +#ifndef _NO_PROTO
  +# define _NO_PROTO
  +#endif
  +
  +#ifdef HAVE_CONFIG_H
  +# include <config.h>
  +#endif
  +
  +#if !defined __STDC__ || !__STDC__
  +/* This is a separate conditional since some stdc systems
  +   reject `defined (const)'.  */
  +# ifndef const
  +#  define const
  +# endif
  +#endif
  +
  +#include <stdio.h>
  +
  +/* Comment out all this code if we are using the GNU C Library, and are not
  +   actually compiling the library itself.  This code is part of the GNU C
  +   Library, but also included in many other GNU distributions.  Compiling
  +   and linking in this code is a waste when using the GNU C library
  +   (especially if it is a shared library).  Rather than having every GNU
  +   program understand `configure --with-gnu-libc' and omit the object files,
  +   it is simpler to just do this in the source for each such file.  */
  +
  +#define GETOPT_INTERFACE_VERSION 2
  +#if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2
  +# include <gnu-versions.h>
  +# if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
  +#  define ELIDE_CODE
  +# endif
  +#endif
  +
  +#ifndef ELIDE_CODE
  +
  +
  +/* This needs to come after some library #include
  +   to get __GNU_LIBRARY__ defined.  */
  +#ifdef	__GNU_LIBRARY__
  +/* Don't include stdlib.h for non-GNU C libraries because some of them
  +   contain conflicting prototypes for getopt.  */
  +# include <stdlib.h>
  +# include <unistd.h>
  +#endif	/* GNU C library.  */
  +
  +#ifdef VMS
  +# include <unixlib.h>
  +# if HAVE_STRING_H - 0
  +#  include <string.h>
  +# endif
  +#endif
  +
  +#ifndef _
  +/* This is for other GNU distributions with internationalized messages.
  +   When compiling libc, the _ macro is predefined.  */
  +# if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC
  +#  include <libintl.h>
  +#  define _(msgid)	gettext (msgid)
  +# else
  +#  define _(msgid)	(msgid)
  +# endif
  +#endif
  +
  +/* This version of `getopt' appears to the caller like standard Unix `getopt'
  +   but it behaves differently for the user, since it allows the user
  +   to intersperse the options with the other arguments.
  +
  +   As `getopt' works, it permutes the elements of ARGV so that,
  +   when it is done, all the options precede everything else.  Thus
  +   all application programs are extended to handle flexible argument order.
  +
  +   Setting the environment variable POSIXLY_CORRECT disables permutation.
  +   Then the behavior is completely standard.
  +
  +   GNU application programs can use a third alternative mode in which
  +   they can distinguish the relative order of options and other arguments.  */
  +
  +#include "getopt.h"
  +
  +/* For communication from `getopt' to the caller.
  +   When `getopt' finds an option that takes an argument,
  +   the argument value is returned here.
  +   Also, when `ordering' is RETURN_IN_ORDER,
  +   each non-option ARGV-element is returned here.  */
  +
  +char *optarg = NULL;
  +
  +/* Index in ARGV of the next element to be scanned.
  +   This is used for communication to and from the caller
  +   and for communication between successive calls to `getopt'.
  +
  +   On entry to `getopt', zero means this is the first call; initialize.
  +
  +   When `getopt' returns -1, this is the index of the first of the
  +   non-option elements that the caller should itself scan.
  +
  +   Otherwise, `optind' communicates from one call to the next
  +   how much of ARGV has been scanned so far.  */
  +
  +/* 1003.2 says this must be 1 before any call.  */
  +int optind = 1;
  +
  +/* Formerly, initialization of getopt depended on optind==0, which
  +   causes problems with re-calling getopt as programs generally don't
  +   know that. */
  +
  +int __getopt_initialized = 0;
  +
  +/* The next char to be scanned in the option-element
  +   in which the last option character we returned was found.
  +   This allows us to pick up the scan where we left off.
  +
  +   If this is zero, or a null string, it means resume the scan
  +   by advancing to the next ARGV-element.  */
  +
  +static char *nextchar;
  +
  +/* Callers store zero here to inhibit the error message
  +   for unrecognized options.  */
  +
  +int opterr = 1;
  +
  +/* Set to an option character which was unrecognized.
  +   This must be initialized on some systems to avoid linking in the
  +   system's own getopt implementation.  */
  +
  +int optopt = '?';
  +
  +/* Describe how to deal with options that follow non-option ARGV-elements.
  +
  +   If the caller did not specify anything,
  +   the default is REQUIRE_ORDER if the environment variable
  +   POSIXLY_CORRECT is defined, PERMUTE otherwise.
  +
  +   REQUIRE_ORDER means don't recognize them as options;
  +   stop option processing when the first non-option is seen.
  +   This is what Unix does.
  +   This mode of operation is selected by either setting the environment
  +   variable POSIXLY_CORRECT, or using `+' as the first character
  +   of the list of option characters.
  +
  +   PERMUTE is the default.  We permute the contents of ARGV as we scan,
  +   so that eventually all the non-options are at the end.  This allows options
  +   to be given in any order, even with programs that were not written to
  +   expect this.
  +
  +   RETURN_IN_ORDER is an option available to programs that were written
  +   to expect options and other ARGV-elements in any order and that care about
  +   the ordering of the two.  We describe each non-option ARGV-element
  +   as if it were the argument of an option with character code 1.
  +   Using `-' as the first character of the list of option characters
  +   selects this mode of operation.
  +
  +   The special argument `--' forces an end of option-scanning regardless
  +   of the value of `ordering'.  In the case of RETURN_IN_ORDER, only
  +   `--' can cause `getopt' to return -1 with `optind' != ARGC.  */
  +
  +static enum
  +{
  +  REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER
  +} ordering;
  +
  +/* Value of POSIXLY_CORRECT environment variable.  */
  +static char *posixly_correct;
  +
  +#ifdef	__GNU_LIBRARY__
  +/* We want to avoid inclusion of string.h with non-GNU libraries
  +   because there are many ways it can cause trouble.
  +   On some systems, it contains special magic macros that don't work
  +   in GCC.  */
  +# include <string.h>
  +# define my_index	strchr
  +#else
  +
  +# if HAVE_STRING_H
  +#  include <string.h>
  +# else
  +#  if HAVE_STRINGS_H
  +#   include <strings.h>
  +#  endif
  +# endif
  +
  +/* Avoid depending on library functions or files
  +   whose names are inconsistent.  */
  +
  +#ifndef getenv
  +extern char *getenv ();
  +#endif
  +
  +static char *
  +my_index (str, chr)
  +     const char *str;
  +     int chr;
  +{
  +  while (*str)
  +    {
  +      if (*str == chr)
  +	return (char *) str;
  +      str++;
  +    }
  +  return 0;
  +}
  +
  +/* If using GCC, we can safely declare strlen this way.
  +   If not using GCC, it is ok not to declare it.  */
  +#ifdef __GNUC__
  +/* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h.
  +   That was relevant to code that was here before.  */
  +# if (!defined __STDC__ || !__STDC__) && !defined strlen
  +/* gcc with -traditional declares the built-in strlen to return int,
  +   and has done so at least since version 2.4.5. -- rms.  */
  +extern int strlen (const char *);
  +# endif /* not __STDC__ */
  +#endif /* __GNUC__ */
  +
  +#endif /* not __GNU_LIBRARY__ */
  +
  +/* Handle permutation of arguments.  */
  +
  +/* Describe the part of ARGV that contains non-options that have
  +   been skipped.  `first_nonopt' is the index in ARGV of the first of them;
  +   `last_nonopt' is the index after the last of them.  */
  +
  +static int first_nonopt;
  +static int last_nonopt;
  +
  +#ifdef _LIBC
  +/* Bash 2.0 gives us an environment variable containing flags
  +   indicating ARGV elements that should not be considered arguments.  */
  +
  +/* Defined in getopt_init.c  */
  +extern char *__getopt_nonoption_flags;
  +
  +static int nonoption_flags_max_len;
  +static int nonoption_flags_len;
  +
  +static int original_argc;
  +static char *const *original_argv;
  +
  +/* Make sure the environment variable bash 2.0 puts in the environment
  +   is valid for the getopt call we must make sure that the ARGV passed
  +   to getopt is that one passed to the process.  */
  +static void
  +__attribute__ ((unused))
  +store_args_and_env (int argc, char *const *argv)
  +{
  +  /* XXX This is no good solution.  We should rather copy the args so
  +     that we can compare them later.  But we must not use malloc(3).  */
  +  original_argc = argc;
  +  original_argv = argv;
  +}
  +# ifdef text_set_element
  +text_set_element (__libc_subinit, store_args_and_env);
  +# endif /* text_set_element */
  +
  +# define SWAP_FLAGS(ch1, ch2) \
  +  if (nonoption_flags_len > 0)						      \
  +    {									      \
  +      char __tmp = __getopt_nonoption_flags[ch1];			      \
  +      __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2];	      \
  +      __getopt_nonoption_flags[ch2] = __tmp;				      \
  +    }
  +#else	/* !_LIBC */
  +# define SWAP_FLAGS(ch1, ch2)
  +#endif	/* _LIBC */
  +
  +/* Exchange two adjacent subsequences of ARGV.
  +   One subsequence is elements [first_nonopt,last_nonopt)
  +   which contains all the non-options that have been skipped so far.
  +   The other is elements [last_nonopt,optind), which contains all
  +   the options processed since those non-options were skipped.
  +
  +   `first_nonopt' and `last_nonopt' are relocated so that they describe
  +   the new indices of the non-options in ARGV after they are moved.  */
  +
  +#if defined __STDC__ && __STDC__
  +static void exchange (char **);
  +#endif
  +
  +static void
  +exchange (argv)
  +     char **argv;
  +{
  +  int bottom = first_nonopt;
  +  int middle = last_nonopt;
  +  int top = optind;
  +  char *tem;
  +
  +  /* Exchange the shorter segment with the far end of the longer segment.
  +     That puts the shorter segment into the right place.
  +     It leaves the longer segment in the right place overall,
  +     but it consists of two parts that need to be swapped next.  */
  +
  +#ifdef _LIBC
  +  /* First make sure the handling of the `__getopt_nonoption_flags'
  +     string can work normally.  Our top argument must be in the range
  +     of the string.  */
  +  if (nonoption_flags_len > 0 && top >= nonoption_flags_max_len)
  +    {
  +      /* We must extend the array.  The user plays games with us and
  +	 presents new arguments.  */
  +      char *new_str = malloc (top + 1);
  +      if (new_str == NULL)
  +	nonoption_flags_len = nonoption_flags_max_len = 0;
  +      else
  +	{
  +	  memset (__mempcpy (new_str, __getopt_nonoption_flags,
  +			     nonoption_flags_max_len),
  +		  '\0', top + 1 - nonoption_flags_max_len);
  +	  nonoption_flags_max_len = top + 1;
  +	  __getopt_nonoption_flags = new_str;
  +	}
  +    }
  +#endif
  +
  +  while (top > middle && middle > bottom)
  +    {
  +      if (top - middle > middle - bottom)
  +	{
  +	  /* Bottom segment is the short one.  */
  +	  int len = middle - bottom;
  +	  register int i;
  +
  +	  /* Swap it with the top part of the top segment.  */
  +	  for (i = 0; i < len; i++)
  +	    {
  +	      tem = argv[bottom + i];
  +	      argv[bottom + i] = argv[top - (middle - bottom) + i];
  +	      argv[top - (middle - bottom) + i] = tem;
  +	      SWAP_FLAGS (bottom + i, top - (middle - bottom) + i);
  +	    }
  +	  /* Exclude the moved bottom segment from further swapping.  */
  +	  top -= len;
  +	}
  +      else
  +	{
  +	  /* Top segment is the short one.  */
  +	  int len = top - middle;
  +	  register int i;
  +
  +	  /* Swap it with the bottom part of the bottom segment.  */
  +	  for (i = 0; i < len; i++)
  +	    {
  +	      tem = argv[bottom + i];
  +	      argv[bottom + i] = argv[middle + i];
  +	      argv[middle + i] = tem;
  +	      SWAP_FLAGS (bottom + i, middle + i);
  +	    }
  +	  /* Exclude the moved top segment from further swapping.  */
  +	  bottom += len;
  +	}
  +    }
  +
  +  /* Update records for the slots the non-options now occupy.  */
  +
  +  first_nonopt += (optind - last_nonopt);
  +  last_nonopt = optind;
  +}
  +
  +/* Initialize the internal data when the first call is made.  */
  +
  +#if defined __STDC__ && __STDC__
  +static const char *_getopt_initialize (int, char *const *, const char *);
  +#endif
  +static const char *
  +_getopt_initialize (argc, argv, optstring)
  +     int argc;
  +     char *const *argv;
  +     const char *optstring;
  +{
  +  /* Start processing options with ARGV-element 1 (since ARGV-element 0
  +     is the program name); the sequence of previously skipped
  +     non-option ARGV-elements is empty.  */
  +
  +  first_nonopt = last_nonopt = optind;
  +
  +  nextchar = NULL;
  +
  +  posixly_correct = getenv ("POSIXLY_CORRECT");
  +
  +  /* Determine how to handle the ordering of options and nonoptions.  */
  +
  +  if (optstring[0] == '-')
  +    {
  +      ordering = RETURN_IN_ORDER;
  +      ++optstring;
  +    }
  +  else if (optstring[0] == '+')
  +    {
  +      ordering = REQUIRE_ORDER;
  +      ++optstring;
  +    }
  +  else if (posixly_correct != NULL)
  +    ordering = REQUIRE_ORDER;
  +  else
  +    ordering = PERMUTE;
  +
  +#ifdef _LIBC
  +  if (posixly_correct == NULL
  +      && argc == original_argc && argv == original_argv)
  +    {
  +      if (nonoption_flags_max_len == 0)
  +	{
  +	  if (__getopt_nonoption_flags == NULL
  +	      || __getopt_nonoption_flags[0] == '\0')
  +	    nonoption_flags_max_len = -1;
  +	  else
  +	    {
  +	      const char *orig_str = __getopt_nonoption_flags;
  +	      int len = nonoption_flags_max_len = strlen (orig_str);
  +	      if (nonoption_flags_max_len < argc)
  +		nonoption_flags_max_len = argc;
  +	      __getopt_nonoption_flags =
  +		(char *) malloc (nonoption_flags_max_len);
  +	      if (__getopt_nonoption_flags == NULL)
  +		nonoption_flags_max_len = -1;
  +	      else
  +		memset (__mempcpy (__getopt_nonoption_flags, orig_str, len),
  +			'\0', nonoption_flags_max_len - len);
  +	    }
  +	}
  +      nonoption_flags_len = nonoption_flags_max_len;
  +    }
  +  else
  +    nonoption_flags_len = 0;
  +#endif
  +
  +  return optstring;
  +}
  +
  +/* Scan elements of ARGV (whose length is ARGC) for option characters
  +   given in OPTSTRING.
  +
  +   If an element of ARGV starts with '-', and is not exactly "-" or "--",
  +   then it is an option element.  The characters of this element
  +   (aside from the initial '-') are option characters.  If `getopt'
  +   is called repeatedly, it returns successively each of the option characters
  +   from each of the option elements.
  +
  +   If `getopt' finds another option character, it returns that character,
  +   updating `optind' and `nextchar' so that the next call to `getopt' can
  +   resume the scan with the following option character or ARGV-element.
  +
  +   If there are no more option characters, `getopt' returns -1.
  +   Then `optind' is the index in ARGV of the first ARGV-element
  +   that is not an option.  (The ARGV-elements have been permuted
  +   so that those that are not options now come last.)
  +
  +   OPTSTRING is a string containing the legitimate option characters.
  +   If an option character is seen that is not listed in OPTSTRING,
  +   return '?' after printing an error message.  If you set `opterr' to
  +   zero, the error message is suppressed but we still return '?'.
  +
  +   If a char in OPTSTRING is followed by a colon, that means it wants an arg,
  +   so the following text in the same ARGV-element, or the text of the following
  +   ARGV-element, is returned in `optarg'.  Two colons mean an option that
  +   wants an optional arg; if there is text in the current ARGV-element,
  +   it is returned in `optarg', otherwise `optarg' is set to zero.
  +
  +   If OPTSTRING starts with `-' or `+', it requests different methods of
  +   handling the non-option ARGV-elements.
  +   See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above.
  +
  +   Long-named options begin with `--' instead of `-'.
  +   Their names may be abbreviated as long as the abbreviation is unique
  +   or is an exact match for some defined option.  If they have an
  +   argument, it follows the option name in the same ARGV-element, separated
  +   from the option name by a `=', or else the in next ARGV-element.
  +   When `getopt' finds a long-named option, it returns 0 if that option's
  +   `flag' field is nonzero, the value of the option's `val' field
  +   if the `flag' field is zero.
  +
  +   The elements of ARGV aren't really const, because we permute them.
  +   But we pretend they're const in the prototype to be compatible
  +   with other systems.
  +
  +   LONGOPTS is a vector of `struct option' terminated by an
  +   element containing a name which is zero.
  +
  +   LONGIND returns the index in LONGOPT of the long-named option found.
  +   It is only valid when a long-named option has been found by the most
  +   recent call.
  +
  +   If LONG_ONLY is nonzero, '-' as well as '--' can introduce
  +   long-named options.  */
  +
  +int
  +_getopt_internal (argc, argv, optstring, longopts, longind, long_only)
  +     int argc;
  +     char *const *argv;
  +     const char *optstring;
  +     const struct option *longopts;
  +     int *longind;
  +     int long_only;
  +{
  +  optarg = NULL;
  +
  +  if (optind == 0 || !__getopt_initialized)
  +    {
  +      if (optind == 0)
  +	optind = 1;	/* Don't scan ARGV[0], the program name.  */
  +      optstring = _getopt_initialize (argc, argv, optstring);
  +      __getopt_initialized = 1;
  +    }
  +
  +  /* Test whether ARGV[optind] points to a non-option argument.
  +     Either it does not have option syntax, or there is an environment flag
  +     from the shell indicating it is not an option.  The later information
  +     is only used when the used in the GNU libc.  */
  +#ifdef _LIBC
  +# define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0'	      \
  +		      || (optind < nonoption_flags_len			      \
  +			  && __getopt_nonoption_flags[optind] == '1'))
  +#else
  +# define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0')
  +#endif
  +
  +  if (nextchar == NULL || *nextchar == '\0')
  +    {
  +      /* Advance to the next ARGV-element.  */
  +
  +      /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been
  +	 moved back by the user (who may also have changed the arguments).  */
  +      if (last_nonopt > optind)
  +	last_nonopt = optind;
  +      if (first_nonopt > optind)
  +	first_nonopt = optind;
  +
  +      if (ordering == PERMUTE)
  +	{
  +	  /* If we have just processed some options following some non-options,
  +	     exchange them so that the options come first.  */
  +
  +	  if (first_nonopt != last_nonopt && last_nonopt != optind)
  +	    exchange ((char **) argv);
  +	  else if (last_nonopt != optind)
  +	    first_nonopt = optind;
  +
  +	  /* Skip any additional non-options
  +	     and extend the range of non-options previously skipped.  */
  +
  +	  while (optind < argc && NONOPTION_P)
  +	    optind++;
  +	  last_nonopt = optind;
  +	}
  +
  +      /* The special ARGV-element `--' means premature end of options.
  +	 Skip it like a null option,
  +	 then exchange with previous non-options as if it were an option,
  +	 then skip everything else like a non-option.  */
  +
  +      if (optind != argc && !strcmp (argv[optind], "--"))
  +	{
  +	  optind++;
  +
  +	  if (first_nonopt != last_nonopt && last_nonopt != optind)
  +	    exchange ((char **) argv);
  +	  else if (first_nonopt == last_nonopt)
  +	    first_nonopt = optind;
  +	  last_nonopt = argc;
  +
  +	  optind = argc;
  +	}
  +
  +      /* If we have done all the ARGV-elements, stop the scan
  +	 and back over any non-options that we skipped and permuted.  */
  +
  +      if (optind == argc)
  +	{
  +	  /* Set the next-arg-index to point at the non-options
  +	     that we previously skipped, so the caller will digest them.  */
  +	  if (first_nonopt != last_nonopt)
  +	    optind = first_nonopt;
  +	  return -1;
  +	}
  +
  +      /* If we have come to a non-option and did not permute it,
  +	 either stop the scan or describe it to the caller and pass it by.  */
  +
  +      if (NONOPTION_P)
  +	{
  +	  if (ordering == REQUIRE_ORDER)
  +	    return -1;
  +	  optarg = argv[optind++];
  +	  return 1;
  +	}
  +
  +      /* We have found another option-ARGV-element.
  +	 Skip the initial punctuation.  */
  +
  +      nextchar = (argv[optind] + 1
  +		  + (longopts != NULL && argv[optind][1] == '-'));
  +    }
  +
  +  /* Decode the current option-ARGV-element.  */
  +
  +  /* Check whether the ARGV-element is a long option.
  +
  +     If long_only and the ARGV-element has the form "-f", where f is
  +     a valid short option, don't consider it an abbreviated form of
  +     a long option that starts with f.  Otherwise there would be no
  +     way to give the -f short option.
  +
  +     On the other hand, if there's a long option "fubar" and
  +     the ARGV-element is "-fu", do consider that an abbreviation of
  +     the long option, just like "--fu", and not "-f" with arg "u".
  +
  +     This distinction seems to be the most useful approach.  */
  +
  +  if (longopts != NULL
  +      && (argv[optind][1] == '-'
  +	  || (long_only && (argv[optind][2] || !my_index (optstring, argv[optind][1])))))
  +    {
  +      char *nameend;
  +      const struct option *p;
  +      const struct option *pfound = NULL;
  +      int exact = 0;
  +      int ambig = 0;
  +      int indfound = -1;
  +      int option_index;
  +
  +      for (nameend = nextchar; *nameend && *nameend != '='; nameend++)
  +	/* Do nothing.  */ ;
  +
  +      /* Test all long options for either exact match
  +	 or abbreviated matches.  */
  +      for (p = longopts, option_index = 0; p->name; p++, option_index++)
  +	if (!strncmp (p->name, nextchar, nameend - nextchar))
  +	  {
  +	    if ((unsigned int) (nameend - nextchar)
  +		== (unsigned int) strlen (p->name))
  +	      {
  +		/* Exact match found.  */
  +		pfound = p;
  +		indfound = option_index;
  +		exact = 1;
  +		break;
  +	      }
  +	    else if (pfound == NULL)
  +	      {
  +		/* First nonexact match found.  */
  +		pfound = p;
  +		indfound = option_index;
  +	      }
  +	    else
  +	      /* Second or later nonexact match found.  */
  +	      ambig = 1;
  +	  }
  +
  +      if (ambig && !exact)
  +	{
  +	  if (opterr)
  +	    fprintf (stderr, _("%s: option `%s' is ambiguous\n"),
  +		     argv[0], argv[optind]);
  +	  nextchar += strlen (nextchar);
  +	  optind++;
  +	  optopt = 0;
  +	  return '?';
  +	}
  +
  +      if (pfound != NULL)
  +	{
  +	  option_index = indfound;
  +	  optind++;
  +	  if (*nameend)
  +	    {
  +	      /* Don't test has_arg with >, because some C compilers don't
  +		 allow it to be used on enums.  */
  +	      if (pfound->has_arg)
  +		optarg = nameend + 1;
  +	      else
  +		{
  +		  if (opterr)
  +		    {
  +		      if (argv[optind - 1][1] == '-')
  +			/* --option */
  +			fprintf (stderr,
  +				 _("%s: option `--%s' doesn't allow an argument\n"),
  +				 argv[0], pfound->name);
  +		      else
  +			/* +option or -option */
  +			fprintf (stderr,
  +				 _("%s: option `%c%s' doesn't allow an argument\n"),
  +				 argv[0], argv[optind - 1][0], pfound->name);
  +
  +		      nextchar += strlen (nextchar);
  +
  +		      optopt = pfound->val;
  +		      return '?';
  +		    }
  +		}
  +	    }
  +	  else if (pfound->has_arg == 1)
  +	    {
  +	      if (optind < argc)
  +		optarg = argv[optind++];
  +	      else
  +		{
  +		  if (opterr)
  +		    fprintf (stderr,
  +			   _("%s: option `%s' requires an argument\n"),
  +			   argv[0], argv[optind - 1]);
  +		  nextchar += strlen (nextchar);
  +		  optopt = pfound->val;
  +		  return optstring[0] == ':' ? ':' : '?';
  +		}
  +	    }
  +	  nextchar += strlen (nextchar);
  +	  if (longind != NULL)
  +	    *longind = option_index;
  +	  if (pfound->flag)
  +	    {
  +	      *(pfound->flag) = pfound->val;
  +	      return 0;
  +	    }
  +	  return pfound->val;
  +	}
  +
  +      /* Can't find it as a long option.  If this is not getopt_long_only,
  +	 or the option starts with '--' or is not a valid short
  +	 option, then it's an error.
  +	 Otherwise interpret it as a short option.  */
  +      if (!long_only || argv[optind][1] == '-'
  +	  || my_index (optstring, *nextchar) == NULL)
  +	{
  +	  if (opterr)
  +	    {
  +	      if (argv[optind][1] == '-')
  +		/* --option */
  +		fprintf (stderr, _("%s: unrecognized option `--%s'\n"),
  +			 argv[0], nextchar);
  +	      else
  +		/* +option or -option */
  +		fprintf (stderr, _("%s: unrecognized option `%c%s'\n"),
  +			 argv[0], argv[optind][0], nextchar);
  +	    }
  +	  nextchar = (char *) "";
  +	  optind++;
  +	  optopt = 0;
  +	  return '?';
  +	}
  +    }
  +
  +  /* Look at and handle the next short option-character.  */
  +
  +  {
  +    char c = *nextchar++;
  +    char *temp = my_index (optstring, c);
  +
  +    /* Increment `optind' when we start to process its last character.  */
  +    if (*nextchar == '\0')
  +      ++optind;
  +
  +    if (temp == NULL || c == ':')
  +      {
  +	if (opterr)
  +	  {
  +	    if (posixly_correct)
  +	      /* 1003.2 specifies the format of this message.  */
  +	      fprintf (stderr, _("%s: illegal option -- %c\n"),
  +		       argv[0], c);
  +	    else
  +	      fprintf (stderr, _("%s: invalid option -- %c\n"),
  +		       argv[0], c);
  +	  }
  +	optopt = c;
  +	return '?';
  +      }
  +    /* Convenience. Treat POSIX -W foo same as long option --foo */
  +    if (temp[0] == 'W' && temp[1] == ';')
  +      {
  +	char *nameend;
  +	const struct option *p;
  +	const struct option *pfound = NULL;
  +	int exact = 0;
  +	int ambig = 0;
  +	int indfound = 0;
  +	int option_index;
  +
  +	/* This is an option that requires an argument.  */
  +	if (*nextchar != '\0')
  +	  {
  +	    optarg = nextchar;
  +	    /* If we end this ARGV-element by taking the rest as an arg,
  +	       we must advance to the next element now.  */
  +	    optind++;
  +	  }
  +	else if (optind == argc)
  +	  {
  +	    if (opterr)
  +	      {
  +		/* 1003.2 specifies the format of this message.  */
  +		fprintf (stderr, _("%s: option requires an argument -- %c\n"),
  +			 argv[0], c);
  +	      }
  +	    optopt = c;
  +	    if (optstring[0] == ':')
  +	      c = ':';
  +	    else
  +	      c = '?';
  +	    return c;
  +	  }
  +	else
  +	  /* We already incremented `optind' once;
  +	     increment it again when taking next ARGV-elt as argument.  */
  +	  optarg = argv[optind++];
  +
  +	/* optarg is now the argument, see if it's in the
  +	   table of longopts.  */
  +
  +	for (nextchar = nameend = optarg; *nameend && *nameend != '='; nameend++)
  +	  /* Do nothing.  */ ;
  +
  +	/* Test all long options for either exact match
  +	   or abbreviated matches.  */
  +	for (p = longopts, option_index = 0; p->name; p++, option_index++)
  +	  if (!strncmp (p->name, nextchar, nameend - nextchar))
  +	    {
  +	      if ((unsigned int) (nameend - nextchar) == strlen (p->name))
  +		{
  +		  /* Exact match found.  */
  +		  pfound = p;
  +		  indfound = option_index;
  +		  exact = 1;
  +		  break;
  +		}
  +	      else if (pfound == NULL)
  +		{
  +		  /* First nonexact match found.  */
  +		  pfound = p;
  +		  indfound = option_index;
  +		}
  +	      else
  +		/* Second or later nonexact match found.  */
  +		ambig = 1;
  +	    }
  +	if (ambig && !exact)
  +	  {
  +	    if (opterr)
  +	      fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"),
  +		       argv[0], argv[optind]);
  +	    nextchar += strlen (nextchar);
  +	    optind++;
  +	    return '?';
  +	  }
  +	if (pfound != NULL)
  +	  {
  +	    option_index = indfound;
  +	    if (*nameend)
  +	      {
  +		/* Don't test has_arg with >, because some C compilers don't
  +		   allow it to be used on enums.  */
  +		if (pfound->has_arg)
  +		  optarg = nameend + 1;
  +		else
  +		  {
  +		    if (opterr)
  +		      fprintf (stderr, _("\
  +%s: option `-W %s' doesn't allow an argument\n"),
  +			       argv[0], pfound->name);
  +
  +		    nextchar += strlen (nextchar);
  +		    return '?';
  +		  }
  +	      }
  +	    else if (pfound->has_arg == 1)
  +	      {
  +		if (optind < argc)
  +		  optarg = argv[optind++];
  +		else
  +		  {
  +		    if (opterr)
  +		      fprintf (stderr,
  +			       _("%s: option `%s' requires an argument\n"),
  +			       argv[0], argv[optind - 1]);
  +		    nextchar += strlen (nextchar);
  +		    return optstring[0] == ':' ? ':' : '?';
  +		  }
  +	      }
  +	    nextchar += strlen (nextchar);
  +	    if (longind != NULL)
  +	      *longind = option_index;
  +	    if (pfound->flag)
  +	      {
  +		*(pfound->flag) = pfound->val;
  +		return 0;
  +	      }
  +	    return pfound->val;
  +	  }
  +	  nextchar = NULL;
  +	  return 'W';	/* Let the application handle it.   */
  +      }
  +    if (temp[1] == ':')
  +      {
  +	if (temp[2] == ':')
  +	  {
  +	    /* This is an option that accepts an argument optionally.  */
  +	    if (*nextchar != '\0')
  +	      {
  +		optarg = nextchar;
  +		optind++;
  +	      }
  +	    else
  +	      optarg = NULL;
  +	    nextchar = NULL;
  +	  }
  +	else
  +	  {
  +	    /* This is an option that requires an argument.  */
  +	    if (*nextchar != '\0')
  +	      {
  +		optarg = nextchar;
  +		/* If we end this ARGV-element by taking the rest as an arg,
  +		   we must advance to the next element now.  */
  +		optind++;
  +	      }
  +	    else if (optind == argc)
  +	      {
  +		if (opterr)
  +		  {
  +		    /* 1003.2 specifies the format of this message.  */
  +		    fprintf (stderr,
  +			   _("%s: option requires an argument -- %c\n"),
  +			   argv[0], c);
  +		  }
  +		optopt = c;
  +		if (optstring[0] == ':')
  +		  c = ':';
  +		else
  +		  c = '?';
  +	      }
  +	    else
  +	      /* We already incremented `optind' once;
  +		 increment it again when taking next ARGV-elt as argument.  */
  +	      optarg = argv[optind++];
  +	    nextchar = NULL;
  +	  }
  +      }
  +    return c;
  +  }
  +}
  +
  +int
  +getopt (argc, argv, optstring)
  +     int argc;
  +     char *const *argv;
  +     const char *optstring;
  +{
  +  return _getopt_internal (argc, argv, optstring,
  +			   (const struct option *) 0,
  +			   (int *) 0,
  +			   0);
  +}
  +
  +#endif	/* Not ELIDE_CODE.  */
  +
  +#ifdef TEST
  +
  +/* Compile with -DTEST to make an executable for use in testing
  +   the above definition of `getopt'.  */
  +
  +int
  +main (argc, argv)
  +     int argc;
  +     char **argv;
  +{
  +  int c;
  +  int digit_optind = 0;
  +
  +  while (1)
  +    {
  +      int this_option_optind = optind ? optind : 1;
  +
  +      c = getopt (argc, argv, "abc:d:0123456789");
  +      if (c == -1)
  +	break;
  +
  +      switch (c)
  +	{
  +	case '0':
  +	case '1':
  +	case '2':
  +	case '3':
  +	case '4':
  +	case '5':
  +	case '6':
  +	case '7':
  +	case '8':
  +	case '9':
  +	  if (digit_optind != 0 && digit_optind != this_option_optind)
  +	    printf ("digits occur in two different argv-elements.\n");
  +	  digit_optind = this_option_optind;
  +	  printf ("option %c\n", c);
  +	  break;
  +
  +	case 'a':
  +	  printf ("option a\n");
  +	  break;
  +
  +	case 'b':
  +	  printf ("option b\n");
  +	  break;
  +
  +	case 'c':
  +	  printf ("option c with value `%s'\n", optarg);
  +	  break;
  +
  +	case '?':
  +	  break;
  +
  +	default:
  +	  printf ("?? getopt returned character code 0%o ??\n", c);
  +	}
  +    }
  +
  +  if (optind < argc)
  +    {
  +      printf ("non-option ARGV-elements: ");
  +      while (optind < argc)
  +	printf ("%s ", argv[optind++]);
  +      printf ("\n");
  +    }
  +
  +  exit (0);
  +}
  +
  +#endif /* TEST */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/getopt/getopt.h
  ============================================================================
  $ cvs diff -u -r0 -r1.1 getopt.h
  --- /dev/null	2003-03-07 11:35:17.000000000 +0100
  +++ getopt.h	2003-03-07 11:35:20.000000000 +0100
  @@ -0,0 +1,141 @@
  +/* Declarations for getopt.
  +   Copyright 1989, 1990, 1991, 1992, 1993, 1994, 1996, 1997, 1998, 2000
  +   Free Software Foundation, Inc.
  +
  +   NOTE: The canonical source of this file is maintained with the GNU C Library.
  +   Bugs can be reported to bug-glibc@gnu.org.
  +
  +   This program is free software; you can redistribute it and/or modify it
  +   under the terms of the GNU General Public License as published by the
  +   Free Software Foundation; either version 2, or (at your option) any
  +   later version.
  +
  +   This program is distributed in the hope that it will be useful,
  +   but WITHOUT ANY WARRANTY; without even the implied warranty of
  +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  +   GNU General Public License for more details.
  +
  +   You should have received a copy of the GNU General Public License
  +   along with this program; if not, write to the Free Software
  +   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +   USA.  */
  +
  +#ifndef _GETOPT_H
  +#define _GETOPT_H 1
  +
  +#ifdef	__cplusplus
  +extern "C" {
  +#endif
  +
  +/* For communication from `getopt' to the caller.
  +   When `getopt' finds an option that takes an argument,
  +   the argument value is returned here.
  +   Also, when `ordering' is RETURN_IN_ORDER,
  +   each non-option ARGV-element is returned here.  */
  +
  +extern char *optarg;
  +
  +/* Index in ARGV of the next element to be scanned.
  +   This is used for communication to and from the caller
  +   and for communication between successive calls to `getopt'.
  +
  +   On entry to `getopt', zero means this is the first call; initialize.
  +
  +   When `getopt' returns -1, this is the index of the first of the
  +   non-option elements that the caller should itself scan.
  +
  +   Otherwise, `optind' communicates from one call to the next
  +   how much of ARGV has been scanned so far.  */
  +
  +extern int optind;
  +
  +/* Callers store zero here to inhibit the error message `getopt' prints
  +   for unrecognized options.  */
  +
  +extern int opterr;
  +
  +/* Set to an option character which was unrecognized.  */
  +
  +extern int optopt;
  +
  +/* Describe the long-named options requested by the application.
  +   The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
  +   of `struct option' terminated by an element containing a name which is
  +   zero.
  +
  +   The field `has_arg' is:
  +   no_argument		(or 0) if the option does not take an argument,
  +   required_argument	(or 1) if the option requires an argument,
  +   optional_argument 	(or 2) if the option takes an optional argument.
  +
  +   If the field `flag' is not NULL, it points to a variable that is set
  +   to the value given in the field `val' when the option is found, but
  +   left unchanged if the option is not found.
  +
  +   To have a long-named option do something other than set an `int' to
  +   a compiled-in constant, such as set a value from `optarg', set the
  +   option's `flag' field to zero and its `val' field to a nonzero
  +   value (the equivalent single-letter option character, if there is
  +   one).  For long options that have a zero `flag' field, `getopt'
  +   returns the contents of the `val' field.  */
  +
  +struct option
  +{
  +#if defined (__STDC__) && __STDC__
  +  const char *name;
  +#else
  +  char *name;
  +#endif
  +  /* has_arg can't be an enum because some compilers complain about
  +     type mismatches in all the code that assumes it is an int.  */
  +  int has_arg;
  +  int *flag;
  +  int val;
  +};
  +
  +/* Names for the values of the `has_arg' field of `struct option'.  */
  +
  +#define	no_argument		0
  +#define required_argument	1
  +#define optional_argument	2
  +
  +#if defined (__STDC__) && __STDC__
  +/* HAVE_DECL_* is a three-state macro: undefined, 0 or 1.  If it is
  +   undefined, we haven't run the autoconf check so provide the
  +   declaration without arguments.  If it is 0, we checked and failed
  +   to find the declaration so provide a fully prototyped one.  If it
  +   is 1, we found it so don't provide any declaration at all.  */
  +#if defined (__GNU_LIBRARY__) || (defined (HAVE_DECL_GETOPT) && !HAVE_DECL_GETOPT)
  +/* Many other libraries have conflicting prototypes for getopt, with
  +   differences in the consts, in stdlib.h.  To avoid compilation
  +   errors, only prototype getopt for the GNU C library.  */
  +extern int getopt (int argc, char *const *argv, const char *shortopts);
  +#else /* not __GNU_LIBRARY__ */
  +# if !defined (HAVE_DECL_GETOPT) && !defined (__cplusplus)
  +extern int getopt ();
  +# endif
  +#endif /* __GNU_LIBRARY__ */
  +extern int getopt_long (int argc, char *const *argv, const char *shortopts,
  +		        const struct option *longopts, int *longind);
  +extern int getopt_long_only (int argc, char *const *argv,
  +			     const char *shortopts,
  +		             const struct option *longopts, int *longind);
  +
  +/* Internal only.  Users should not call this directly.  */
  +extern int _getopt_internal (int argc, char *const *argv,
  +			     const char *shortopts,
  +		             const struct option *longopts, int *longind,
  +			     int long_only);
  +#else /* not __STDC__ */
  +extern int getopt ();
  +extern int getopt_long ();
  +extern int getopt_long_only ();
  +
  +extern int _getopt_internal ();
  +#endif /* __STDC__ */
  +
  +#ifdef	__cplusplus
  +}
  +#endif
  +
  +#endif /* getopt.h */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/getopt/getopt.texi
  ============================================================================
  $ cvs diff -u -r0 -r1.1 getopt.texi
  --- /dev/null	2003-03-07 11:35:17.000000000 +0100
  +++ getopt.texi	2003-03-07 11:35:21.000000000 +0100
  @@ -0,0 +1,307 @@
  +@node Getopt, Argp, , Parsing Program Arguments
  +@section Parsing program options using @code{getopt}
  +
  +The @code{getopt} and @code{getopt_long} functions automate some of the
  +chore involved in parsing typical unix command line options.
  +
  +@menu
  +* Using Getopt::                Using the @code{getopt} function.
  +* Example of Getopt::           An example of parsing options with @code{getopt}.
  +* Getopt Long Options::         GNU suggests utilities accept long-named
  +                                 options; here is one way to do.
  +* Getopt Long Option Example::  An example of using @code{getopt_long}.
  +@end menu
  +
  +@node Using Getopt, Example of Getopt, , Getopt
  +@subsection Using the @code{getopt} function
  +
  +Here are the details about how to call the @code{getopt} function.  To
  +use this facility, your program must include the header file
  +@file{unistd.h}.
  +@pindex unistd.h
  +
  +@comment unistd.h
  +@comment POSIX.2
  +@deftypevar int opterr
  +If the value of this variable is nonzero, then @code{getopt} prints an
  +error message to the standard error stream if it encounters an unknown
  +option character or an option with a missing required argument.  This is
  +the default behavior.  If you set this variable to zero, @code{getopt}
  +does not print any messages, but it still returns the character @code{?}
  +to indicate an error.
  +@end deftypevar
  +
  +@comment unistd.h
  +@comment POSIX.2
  +@deftypevar int optopt
  +When @code{getopt} encounters an unknown option character or an option
  +with a missing required argument, it stores that option character in
  +this variable.  You can use this for providing your own diagnostic
  +messages.
  +@end deftypevar
  +
  +@comment unistd.h
  +@comment POSIX.2
  +@deftypevar int optind
  +This variable is set by @code{getopt} to the index of the next element
  +of the @var{argv} array to be processed.  Once @code{getopt} has found
  +all of the option arguments, you can use this variable to determine
  +where the remaining non-option arguments begin.  The initial value of
  +this variable is @code{1}.
  +@end deftypevar
  +
  +@comment unistd.h
  +@comment POSIX.2
  +@deftypevar {char *} optarg
  +This variable is set by @code{getopt} to point at the value of the
  +option argument, for those options that accept arguments.
  +@end deftypevar
  +
  +@comment unistd.h
  +@comment POSIX.2
  +@deftypefun int getopt (int @var{argc}, char **@var{argv}, const char *@var{options})
  +The @code{getopt} function gets the next option argument from the
  +argument list specified by the @var{argv} and @var{argc} arguments.
  +Normally these values come directly from the arguments received by
  +@code{main}.
  +
  +The @var{options} argument is a string that specifies the option
  +characters that are valid for this program.  An option character in this
  +string can be followed by a colon (@samp{:}) to indicate that it takes a
  +required argument.  If an option character is followed by two colons
  +(@samp{::}), its argument is optional; this is a GNU extension.
  +
  +@code{getopt} has three ways to deal with options that follow
  +non-options @var{argv} elements.  The special argument @samp{--} forces
  +in all cases the end of option scanning.
  +
  +@itemize @bullet
  +@item
  +The default is to permute the contents of @var{argv} while scanning it
  +so that eventually all the non-options are at the end.  This allows
  +options to be given in any order, even with programs that were not
  +written to expect this.
  +
  +@item
  +If the @var{options} argument string begins with a hyphen (@samp{-}), this
  +is treated specially.  It permits arguments that are not options to be
  +returned as if they were associated with option character @samp{\1}.
  +
  +@item
  +POSIX demands the following behavior: The first non-option stops option
  +processing.  This mode is selected by either setting the environment
  +variable @code{POSIXLY_CORRECT} or beginning the @var{options} argument
  +string with a plus sign (@samp{+}).
  +@end itemize
  +
  +The @code{getopt} function returns the option character for the next
  +command line option.  When no more option arguments are available, it
  +returns @code{-1}.  There may still be more non-option arguments; you
  +must compare the external variable @code{optind} against the @var{argc}
  +parameter to check this.
  +
  +If the option has an argument, @code{getopt} returns the argument by
  +storing it in the variable @var{optarg}.  You don't ordinarily need to
  +copy the @code{optarg} string, since it is a pointer into the original
  +@var{argv} array, not into a static area that might be overwritten.
  +
  +If @code{getopt} finds an option character in @var{argv} that was not
  +included in @var{options}, or a missing option argument, it returns
  +@samp{?} and sets the external variable @code{optopt} to the actual
  +option character.  If the first character of @var{options} is a colon
  +(@samp{:}), then @code{getopt} returns @samp{:} instead of @samp{?} to
  +indicate a missing option argument.  In addition, if the external
  +variable @code{opterr} is nonzero (which is the default), @code{getopt}
  +prints an error message.
  +@end deftypefun
  +
  +@node Example of Getopt
  +@subsection Example of Parsing Arguments with @code{getopt}
  +
  +Here is an example showing how @code{getopt} is typically used.  The
  +key points to notice are:
  +
  +@itemize @bullet
  +@item
  +Normally, @code{getopt} is called in a loop.  When @code{getopt} returns
  +@code{-1}, indicating no more options are present, the loop terminates.
  +
  +@item
  +A @code{switch} statement is used to dispatch on the return value from
  +@code{getopt}.  In typical use, each case just sets a variable that
  +is used later in the program.
  +
  +@item
  +A second loop is used to process the remaining non-option arguments.
  +@end itemize
  +
  +@smallexample
  +@include testopt.c.texi
  +@end smallexample
  +
  +Here are some examples showing what this program prints with different
  +combinations of arguments:
  +
  +@smallexample
  +% testopt
  +aflag = 0, bflag = 0, cvalue = (null)
  +
  +% testopt -a -b
  +aflag = 1, bflag = 1, cvalue = (null)
  +
  +% testopt -ab
  +aflag = 1, bflag = 1, cvalue = (null)
  +
  +% testopt -c foo
  +aflag = 0, bflag = 0, cvalue = foo
  +
  +% testopt -cfoo
  +aflag = 0, bflag = 0, cvalue = foo
  +
  +% testopt arg1
  +aflag = 0, bflag = 0, cvalue = (null)
  +Non-option argument arg1
  +
  +% testopt -a arg1
  +aflag = 1, bflag = 0, cvalue = (null)
  +Non-option argument arg1
  +
  +% testopt -c foo arg1
  +aflag = 0, bflag = 0, cvalue = foo
  +Non-option argument arg1
  +
  +% testopt -a -- -b
  +aflag = 1, bflag = 0, cvalue = (null)
  +Non-option argument -b
  +
  +% testopt -a -
  +aflag = 1, bflag = 0, cvalue = (null)
  +Non-option argument -
  +@end smallexample
  +
  +@node Getopt Long Options
  +@subsection Parsing Long Options with @code{getopt_long}
  +
  +To accept GNU-style long options as well as single-character options,
  +use @code{getopt_long} instead of @code{getopt}.  This function is
  +declared in @file{getopt.h}, not @file{unistd.h}.  You should make every
  +program accept long options if it uses any options, for this takes
  +little extra work and helps beginners remember how to use the program.
  +
  +@comment getopt.h
  +@comment GNU
  +@deftp {Data Type} {struct option}
  +This structure describes a single long option name for the sake of
  +@code{getopt_long}.  The argument @var{longopts} must be an array of
  +these structures, one for each long option.  Terminate the array with an
  +element containing all zeros.
  +
  +The @code{struct option} structure has these fields:
  +
  +@table @code
  +@item const char *name
  +This field is the name of the option.  It is a string.
  +
  +@item int has_arg
  +This field says whether the option takes an argument.  It is an integer,
  +and there are three legitimate values: @w{@code{no_argument}},
  +@code{required_argument} and @code{optional_argument}.
  +
  +@item int *flag
  +@itemx int val
  +These fields control how to report or act on the option when it occurs.
  +
  +If @code{flag} is a null pointer, then the @code{val} is a value which
  +identifies this option.  Often these values are chosen to uniquely
  +identify particular long options.
  +
  +If @code{flag} is not a null pointer, it should be the address of an
  +@code{int} variable which is the flag for this option.  The value in
  +@code{val} is the value to store in the flag to indicate that the option
  +was seen.
  +@end table
  +@end deftp
  +
  +@comment getopt.h
  +@comment GNU
  +@deftypefun int getopt_long (int @var{argc}, char *const *@var{argv}, const char *@var{shortopts}, const struct option *@var{longopts}, int *@var{indexptr})
  +Decode options from the vector @var{argv} (whose length is @var{argc}).
  +The argument @var{shortopts} describes the short options to accept, just as
  +it does in @code{getopt}.  The argument @var{longopts} describes the long
  +options to accept (see above).
  +
  +When @code{getopt_long} encounters a short option, it does the same
  +thing that @code{getopt} would do: it returns the character code for the
  +option, and stores the options argument (if it has one) in @code{optarg}.
  +
  +When @code{getopt_long} encounters a long option, it takes actions based
  +on the @code{flag} and @code{val} fields of the definition of that
  +option.
  +
  +If @code{flag} is a null pointer, then @code{getopt_long} returns the
  +contents of @code{val} to indicate which option it found.  You should
  +arrange distinct values in the @code{val} field for options with
  +different meanings, so you can decode these values after
  +@code{getopt_long} returns.  If the long option is equivalent to a short
  +option, you can use the short option's character code in @code{val}.
  +
  +If @code{flag} is not a null pointer, that means this option should just
  +set a flag in the program.  The flag is a variable of type @code{int}
  +that you define.  Put the address of the flag in the @code{flag} field.
  +Put in the @code{val} field the value you would like this option to
  +store in the flag.  In this case, @code{getopt_long} returns @code{0}.
  +
  +For any long option, @code{getopt_long} tells you the index in the array
  +@var{longopts} of the options definition, by storing it into
  +@code{*@var{indexptr}}.  You can get the name of the option with
  +@code{@var{longopts}[*@var{indexptr}].name}.  So you can distinguish among
  +long options either by the values in their @code{val} fields or by their
  +indices.  You can also distinguish in this way among long options that
  +set flags.
  +
  +When a long option has an argument, @code{getopt_long} puts the argument
  +value in the variable @code{optarg} before returning.  When the option
  +has no argument, the value in @code{optarg} is a null pointer.  This is
  +how you can tell whether an optional argument was supplied.
  +
  +When @code{getopt_long} has no more options to handle, it returns
  +@code{-1}, and leaves in the variable @code{optind} the index in
  +@var{argv} of the next remaining argument.
  +@end deftypefun
  +
  +Since long option names were used before before the @code{getopt_long}
  +options was invented there are program interfaces which require programs
  +to recognize options like @w{@samp{-option value}} instead of
  +@w{@samp{--option value}}.  To enable these programs to use the GNU
  +getopt functionality there is one more function available.
  +
  +@comment getopt.h
  +@comment GNU
  +@deftypefun int getopt_long_only (int @var{argc}, char *const *@var{argv}, const char *@var{shortopts}, const struct option *@var{longopts}, int *@var{indexptr})
  +
  +The @code{getopt_long_only} function is equivalent to the
  +@code{getopt_long} function but it allows to specify the user of the
  +application to pass long options with only @samp{-} instead of
  +@samp{--}.  The @samp{--} prefix is still recognized but instead of
  +looking through the short options if a @samp{-} is seen it is first
  +tried whether this parameter names a long option.  If not, it is parsed
  +as a short option.
  +
  +Assuming @code{getopt_long_only} is used starting an application with
  +
  +@smallexample
  +  app -foo
  +@end smallexample
  +
  +@noindent
  +the @code{getopt_long_only} will first look for a long option named
  +@samp{foo}.  If this is not found, the short options @samp{f}, @samp{o},
  +and again @samp{o} are recognized.
  +@end deftypefun
  +
  +@node Getopt Long Option Example
  +@subsection Example of Parsing Long Options with @code{getopt_long}
  +
  +@smallexample
  +@include longopt.c.texi
  +@end smallexample
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/getopt/getopt1.c
  ============================================================================
  $ cvs diff -u -r0 -r1.1 getopt1.c
  --- /dev/null	2003-03-07 11:35:17.000000000 +0100
  +++ getopt1.c	2003-03-07 11:35:22.000000000 +0100
  @@ -0,0 +1,190 @@
  +/* getopt_long and getopt_long_only entry points for GNU getopt.
  +   Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98
  +     Free Software Foundation, Inc.
  +
  +   NOTE: This source is derived from an old version taken from the GNU C
  +   Library (glibc).
  +
  +   This program is free software; you can redistribute it and/or modify it
  +   under the terms of the GNU General Public License as published by the
  +   Free Software Foundation; either version 2, or (at your option) any
  +   later version.
  +
  +   This program is distributed in the hope that it will be useful,
  +   but WITHOUT ANY WARRANTY; without even the implied warranty of
  +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  +   GNU General Public License for more details.
  +
  +   You should have received a copy of the GNU General Public License
  +   along with this program; if not, write to the Free Software
  +   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +   USA.  */
  +
  +#ifdef HAVE_CONFIG_H
  +#include <config.h>
  +#endif
  +
  +#include "getopt.h"
  +
  +#if !defined __STDC__ || !__STDC__
  +/* This is a separate conditional since some stdc systems
  +   reject `defined (const)'.  */
  +#ifndef const
  +#define const
  +#endif
  +#endif
  +
  +#include <stdio.h>
  +
  +/* Comment out all this code if we are using the GNU C Library, and are not
  +   actually compiling the library itself.  This code is part of the GNU C
  +   Library, but also included in many other GNU distributions.  Compiling
  +   and linking in this code is a waste when using the GNU C library
  +   (especially if it is a shared library).  Rather than having every GNU
  +   program understand `configure --with-gnu-libc' and omit the object files,
  +   it is simpler to just do this in the source for each such file.  */
  +
  +#define GETOPT_INTERFACE_VERSION 2
  +#if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2
  +#include <gnu-versions.h>
  +#if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
  +#define ELIDE_CODE
  +#endif
  +#endif
  +
  +#ifndef ELIDE_CODE
  +
  +
  +/* This needs to come after some library #include
  +   to get __GNU_LIBRARY__ defined.  */
  +#ifdef __GNU_LIBRARY__
  +#include <stdlib.h>
  +#endif
  +
  +#ifndef	NULL
  +#define NULL 0
  +#endif
  +
  +int
  +getopt_long (argc, argv, options, long_options, opt_index)
  +     int argc;
  +     char *const *argv;
  +     const char *options;
  +     const struct option *long_options;
  +     int *opt_index;
  +{
  +  return _getopt_internal (argc, argv, options, long_options, opt_index, 0);
  +}
  +
  +/* Like getopt_long, but '-' as well as '--' can indicate a long option.
  +   If an option that starts with '-' (not '--') doesn't match a long option,
  +   but does match a short option, it is parsed as a short option
  +   instead.  */
  +
  +int
  +getopt_long_only (argc, argv, options, long_options, opt_index)
  +     int argc;
  +     char *const *argv;
  +     const char *options;
  +     const struct option *long_options;
  +     int *opt_index;
  +{
  +  return _getopt_internal (argc, argv, options, long_options, opt_index, 1);
  +}
  +
  +
  +#endif	/* Not ELIDE_CODE.  */
  +
  +#ifdef TEST
  +
  +#include <stdio.h>
  +
  +int
  +main (argc, argv)
  +     int argc;
  +     char **argv;
  +{
  +  int c;
  +  int digit_optind = 0;
  +
  +  while (1)
  +    {
  +      int this_option_optind = optind ? optind : 1;
  +      int option_index = 0;
  +      static struct option long_options[] =
  +      {
  +	{"add", 1, 0, 0},
  +	{"append", 0, 0, 0},
  +	{"delete", 1, 0, 0},
  +	{"verbose", 0, 0, 0},
  +	{"create", 0, 0, 0},
  +	{"file", 1, 0, 0},
  +	{0, 0, 0, 0}
  +      };
  +
  +      c = getopt_long (argc, argv, "abc:d:0123456789",
  +		       long_options, &option_index);
  +      if (c == -1)
  +	break;
  +
  +      switch (c)
  +	{
  +	case 0:
  +	  printf ("option %s", long_options[option_index].name);
  +	  if (optarg)
  +	    printf (" with arg %s", optarg);
  +	  printf ("\n");
  +	  break;
  +
  +	case '0':
  +	case '1':
  +	case '2':
  +	case '3':
  +	case '4':
  +	case '5':
  +	case '6':
  +	case '7':
  +	case '8':
  +	case '9':
  +	  if (digit_optind != 0 && digit_optind != this_option_optind)
  +	    printf ("digits occur in two different argv-elements.\n");
  +	  digit_optind = this_option_optind;
  +	  printf ("option %c\n", c);
  +	  break;
  +
  +	case 'a':
  +	  printf ("option a\n");
  +	  break;
  +
  +	case 'b':
  +	  printf ("option b\n");
  +	  break;
  +
  +	case 'c':
  +	  printf ("option c with value `%s'\n", optarg);
  +	  break;
  +
  +	case 'd':
  +	  printf ("option d with value `%s'\n", optarg);
  +	  break;
  +
  +	case '?':
  +	  break;
  +
  +	default:
  +	  printf ("?? getopt returned character code 0%o ??\n", c);
  +	}
  +    }
  +
  +  if (optind < argc)
  +    {
  +      printf ("non-option ARGV-elements: ");
  +      while (optind < argc)
  +	printf ("%s ", argv[optind++]);
  +      printf ("\n");
  +    }
  +
  +  exit (0);
  +}
  +
  +#endif /* TEST */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/getopt/getopt_main.c
  ============================================================================
  $ cvs diff -u -r0 -r1.1 getopt_main.c
  --- /dev/null	2003-03-07 11:35:17.000000000 +0100
  +++ getopt_main.c	2003-03-07 11:35:22.000000000 +0100
  @@ -0,0 +1,469 @@
  +/*
  +    getopt.c - Enhanced implementation of BSD getopt(1)
  +    Copyright (c) 1997, 1998, 1999, 2000  Frodo Looijaard <frodol@dds.nl>
  +
  +    This program is free software; you can redistribute it and/or modify
  +    it under the terms of the GNU General Public License as published by
  +    the Free Software Foundation; either version 2 of the License, or
  +    (at your option) any later version.
  +
  +    This program is distributed in the hope that it will be useful,
  +    but WITHOUT ANY WARRANTY; without even the implied warranty of
  +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  +    GNU General Public License for more details.
  +
  +    You should have received a copy of the GNU General Public License
  +    along with this program; if not, write to the Free Software
  +    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  +*/
  +
  +/* 
  + * Version 1.0-b4: Tue Sep 23 1997. First public release.
  + * Version 1.0: Wed Nov 19 1997. 
  + *   Bumped up the version number to 1.0
  + *   Fixed minor typo (CSH instead of TCSH)
  + * Version 1.0.1: Tue Jun 3 1998
  + *   Fixed sizeof instead of strlen bug
  + *   Bumped up the version number to 1.0.1
  + * Version 1.0.2: Thu Jun 11 1998 (not present)
  + *   Fixed gcc-2.8.1 warnings
  + *   Fixed --version/-V option (not present)
  + * Version 1.0.5: Tue Jun 22 1999
  + *   Make -u option work (not present)
  + * Version 1.0.6: Tue Jun 27 2000
  + *   No important changes
  + * Version 1.1.0: Tue Jun 30 2000
  + *   Added NLS support (partly written by Arkadiusz Mi<B6>kiewicz 
  + *     <misiek@pld.org.pl>)
  + */
  +
  +#include <stdio.h>
  +#include <stdlib.h>
  +#include <string.h>
  +#include <unistd.h>
  +#include <ctype.h>
  +
  +#if LIBCGETOPT
  +#include <getopt.h>
  +#else
  +#include "getopt.h"
  +#endif
  +
  +#define WITHOUT_GETTEXT 1
  +#define _(x) x
  +
  +/* NON_OPT is the code that is returned when a non-option is found in '+' 
  +   mode */
  +#define NON_OPT 1
  +/* LONG_OPT is the code that is returned when a long option is found. */
  +#define LONG_OPT 2
  +
  +/* The shells recognized. */
  +typedef enum {BASH,TCSH} shell_t;
  +
  +
  +/* Some global variables that tells us how to parse. */
  +shell_t shell=BASH; /* The shell we generate output for. */
  +int quiet_errors=0; /* 0 is not quiet. */
  +int quiet_output=0; /* 0 is not quiet. */
  +int quote=1; /* 1 is do quote. */
  +int alternative=0; /* 0 is getopt_long, 1 is getopt_long_only */
  +
  +/* Function prototypes */
  +void *our_malloc(size_t size);
  +void *our_realloc(void *ptr, size_t size);
  +const char *normalize(const char *arg);
  +int generate_output(char * argv[],int argc,const char *optstr,
  +                    const struct option *longopts);
  +int main(int argc, char *argv[]);
  +void parse_error(const char *message);
  +void add_long_options(char *options);
  +void add_longopt(const char *name,int has_arg);
  +void print_help(void);
  +void set_shell(const char *new_shell);
  +void set_initial_shell(void);
  +
  +void *our_malloc(size_t size)
  +{
  +	void *ret=malloc(size);
  +	if (! ret) {
  +		fprintf(stderr,_("%s: Out of memory!\n"),"getopt");
  +		exit(3);
  +	}
  +	return(ret);
  +}
  +
  +void *our_realloc(void *ptr, size_t size)
  +{
  +	void *ret=realloc(ptr,size);
  +	if (! ret && size) {
  +		fprintf(stderr,_("%s: Out of memory!\n"),"getopt");
  +		exit(3);
  +	}
  +	return(ret);
  +}
  +
  +/*
  + * This function 'normalizes' a single argument: it puts single quotes around
  + * it and escapes other special characters. If quote is false, it just
  + * returns its argument.
  + * Bash only needs special treatment for single quotes; tcsh also recognizes
  + * exclamation marks within single quotes, and nukes whitespace.
  + * This function returns a pointer to a buffer that is overwritten by 
  + * each call.
  + */
  +const char *normalize(const char *arg)
  +{
  +	static char *BUFFER=NULL;
  +	const char *argptr=arg;
  +	char *bufptr;
  +
  +	if (BUFFER != NULL)
  +		free(BUFFER);
  +
  +	if (!quote) { /* Just copy arg */
  +		BUFFER=our_malloc(strlen(arg)+1);
  +			
  +		strcpy(BUFFER,arg);
  +		return BUFFER;
  +	}
  +
  +	/* Each character in arg may take upto four characters in the result:
  +	   For a quote we need a closing quote, a backslash, a quote and an
  +	   opening quote! We need also the global opening and closing quote,
  +	   and one extra character for '\0'. */
  +	BUFFER=our_malloc(strlen(arg)*4+3);
  +
  +	bufptr=BUFFER;
  +	*bufptr++='\'';
  +
  +	while (*argptr) {
  +		if (*argptr == '\'') {
  +			/* Quote: replace it with: '\'' */
  +			*bufptr++='\'';
  +			*bufptr++='\\';
  +			*bufptr++='\'';
  +			*bufptr++='\'';
  +		} else if (shell==TCSH && *argptr=='!') {
  +			/* Exclamation mark: replace it with: \! */
  +			*bufptr++='\'';
  +			*bufptr++='\\';
  +			*bufptr++='!';
  +			*bufptr++='\'';
  +		} else if (shell==TCSH && *argptr=='\n') {
  +			/* Newline: replace it with: \n */
  +			*bufptr++='\\';
  +			*bufptr++='n';
  +		} else if (shell==TCSH && isspace(*argptr)) {
  +			/* Non-newline whitespace: replace it with \<ws> */
  +			*bufptr++='\'';
  +			*bufptr++='\\';
  +			*bufptr++=*argptr;
  +			*bufptr++='\'';
  +		} else
  +			/* Just copy */
  +			*bufptr++=*argptr;
  +		argptr++;
  +	}
  +	*bufptr++='\'';
  +	*bufptr++='\0';
  +	return BUFFER;
  +}
  +
  +/* 
  + * Generate the output. argv[0] is the program name (used for reporting errors).
  + * argv[1..] contains the options to be parsed. argc must be the number of
  + * elements in argv (ie. 1 if there are no options, only the program name),
  + * optstr must contain the short options, and longopts the long options.
  + * Other settings are found in global variables.
  + */
  +int generate_output(char * argv[],int argc,const char *optstr,
  +                    const struct option *longopts)
  +{
  +	int exit_code = 0; /* We assume everything will be OK */
  +	int opt;
  +	int longindex;
  +	const char *charptr;
  +
  +	if (quiet_errors) /* No error reporting from getopt(3) */
  +		opterr=0;
  +	optind=0; /* Reset getopt(3) */
  +
  +	while ((opt = (alternative?
  +	              getopt_long_only(argc,argv,optstr,longopts,&longindex):
  +	              getopt_long(argc,argv,optstr,longopts,&longindex))) 
  +               != EOF) 
  +		if (opt == '?' || opt == ':' )
  +			exit_code = 1;
  +		else if (!quiet_output) 
  +		{
  +			if (opt == LONG_OPT) {
  +				printf(" --%s",longopts[longindex].name);
  +				if (longopts[longindex].has_arg) 
  +					printf(" %s",
  +					       normalize(optarg?optarg:""));
  +			} else if (opt == NON_OPT) 
  +				printf(" %s",normalize(optarg)); 
  +			else {
  +				printf(" -%c",opt);
  +				charptr = strchr(optstr,opt);
  +				if (charptr != NULL && *++charptr == ':')
  +					printf(" %s",
  +					       normalize(optarg?optarg:""));
  +			}
  +		}
  +	
  +	if (! quiet_output) {
  +		printf(" --");
  +		while (optind < argc) 
  +			printf(" %s",normalize(argv[optind++]));
  +		printf("\n");
  +	}
  +	return exit_code;
  +}
  +
  +/*
  + * Report an error when parsing getopt's own arguments.
  + * If message is NULL, we already sent a message, we just exit with a helpful
  + * hint.
  + */
  +void parse_error(const char *message)
  +{
  +	if (message)
  +		fprintf(stderr,"getopt: %s\n",message);
  +	fputs(_("Try `getopt --help' for more information.\n"),stderr);
  +	exit(2);
  +}
  +
  +static struct option *long_options=NULL;
  +static int long_options_length=0; /* Length of array */
  +static int long_options_nr=0; /* Nr of used elements in array */
  +#define LONG_OPTIONS_INCR 10
  +#define init_longopt() add_longopt(NULL,0)
  +
  +/* Register a long option. The contents of name is copied. */
  +void add_longopt(const char *name,int has_arg)
  +{
  +	char *tmp;
  +	if (!name) { /* init */
  +		free(long_options);
  +		long_options=NULL;
  +		long_options_length=0;
  +		long_options_nr=0;
  +	}
  +
  +	if (long_options_nr == long_options_length) {
  +		long_options_length += LONG_OPTIONS_INCR;
  +		long_options=our_realloc(long_options,
  +		                         sizeof(struct option) * 
  +		                           long_options_length);
  +	}
  +
  +	long_options[long_options_nr].name=NULL;
  +	long_options[long_options_nr].has_arg=0;
  +	long_options[long_options_nr].flag=NULL;
  +	long_options[long_options_nr].val=0;
  +
  +	if (long_options_nr) { /* Not for init! */
  +		long_options[long_options_nr-1].has_arg=has_arg;
  +		long_options[long_options_nr-1].flag=NULL;
  +		long_options[long_options_nr-1].val=LONG_OPT;
  +		tmp = our_malloc(strlen(name)+1);
  +		strcpy(tmp,name);
  +		long_options[long_options_nr-1].name=tmp;
  +	}
  +	long_options_nr++;
  +}
  +	
  +
  +/* 
  + * Register several long options. options is a string of long options, 
  + * separated by commas or whitespace. 
  + * This nukes options! 
  + */
  +void add_long_options(char *options)
  +{
  +	int arg_opt;
  +	char *tokptr=strtok(options,", \t\n");
  +	while (tokptr) {
  +		arg_opt=no_argument;
  +		if (strlen(tokptr) > 0) {
  +			if (tokptr[strlen(tokptr)-1] == ':') {
  +				if (tokptr[strlen(tokptr)-2] == ':') {
  +					tokptr[strlen(tokptr)-2]='\0';
  +					arg_opt=optional_argument;
  +				} else {
  +					tokptr[strlen(tokptr)-1]='\0';
  +					arg_opt=required_argument;
  +				}
  +				if (strlen(tokptr) == 0)
  +					parse_error(_("empty long option after "
  +					              "-l or --long argument"));
  +			}
  +			add_longopt(tokptr,arg_opt);
  +		}
  +		tokptr=strtok(NULL,", \t\n");
  +	}
  +}
  +
  +void set_shell(const char *new_shell)
  +{
  +	if (!strcmp(new_shell,"bash"))
  +		shell=BASH;
  +	else if (!strcmp(new_shell,"tcsh"))
  +		shell=TCSH;
  +	else if (!strcmp(new_shell,"sh"))
  +		shell=BASH;
  +	else if (!strcmp(new_shell,"csh"))
  +		shell=TCSH;
  +	else
  +		parse_error(_("unknown shell after -s or --shell argument"));
  +}
  +
  +void print_help(void)
  +{
  +	fputs(_("Usage: getopt optstring parameters\n"),stderr);
  +	fputs(_("       getopt [options] [--] optstring parameters\n"),stderr);
  +	fputs(_("       getopt [options] -o|--options optstring [options] [--]\n"),stderr);
  +	fputs(_("              parameters\n"),stderr);
  +	fputs(_("  -a, --alternative            Allow long options starting with single -\n"),stderr);
  +	fputs(_("  -h, --help                   This small usage guide\n"),stderr);
  +	fputs(_("  -l, --longoptions=longopts   Long options to be recognized\n"),stderr);
  +	fputs(_("  -n, --name=progname          The name under which errors are reported\n"),stderr);
  +	fputs(_("  -o, --options=optstring      Short options to be recognized\n"),stderr);
  +	fputs(_("  -q, --quiet                  Disable error reporting by getopt(3)\n"),stderr);
  +	fputs(_("  -Q, --quiet-output           No normal output\n"),stderr);
  +	fputs(_("  -s, --shell=shell            Set shell quoting conventions\n"),stderr);	
  +	fputs(_("  -T, --test                   Test for getopt(1) version\n"),stderr);
  +	fputs(_("  -u, --unqote                 Do not quote the output\n"),stderr);
  +	fputs(_("  -V, --version                Output version information\n"),stderr);
  +	exit(2);
  +}
  +	
  +/* Exit codes:
  + *   0) No errors, succesful operation.
  + *   1) getopt(3) returned an error.
  + *   2) A problem with parameter parsing for getopt(1).
  + *   3) Internal error, out of memory
  + *   4) Returned for -T
  + */
  +
  +static struct option longopts[]={ {"options",required_argument,NULL,'o'},
  +                                  {"longoptions",required_argument,NULL,'l'},
  +                                  {"quiet",no_argument,NULL,'q'},
  +                                  {"quiet-output",no_argument,NULL,'Q'},
  +                                  {"shell",required_argument,NULL,'s'},
  +                                  {"test",no_argument,NULL,'T'},
  +                                  {"unquoted",no_argument,NULL,'u'},
  +                                  {"help",no_argument,NULL,'h'},
  +                                  {"alternative",no_argument,NULL,'a'},
  +                                  {"name",required_argument,NULL,'n'},
  +                                  {"version",no_argument,NULL,'V'},
  +                                  {NULL,0,NULL,0}
  +                                };
  +
  +/* Stop scanning as soon as a non-option argument is found! */
  +static const char *shortopts="+ao:l:n:qQs:TuhV";
  +
  +int main(int argc, char *argv[])
  +{
  +	char *optstr=NULL;
  +	char *name=NULL;
  +	int opt;
  +	int compatible=0;
  +
  +#if WITHOUT_GETTEXT
  +#else
  +	setlocale(LC_ALL,"");
  +	bindtextdomain(PACKAGE, LOCALEDIR);
  +	textdomain(PACKAGE);
  +#endif
  +
  +	init_longopt();
  +
  +	if (getenv("GETOPT_COMPATIBLE")) 
  +		compatible=1;
  +
  +	if (argc == 1) 
  +	{
  +		if (compatible) {
  +			/* For some reason, the original getopt gave no error
  +                           when there were no arguments. */
  +			printf(" --\n");
  +			exit(0);
  +		}
  +		else
  +			parse_error(_("missing optstring argument"));
  +	}
  +	
  +	if (argv[1][0] != '-' || compatible) {
  +		quote=0;
  +		optstr=our_malloc(strlen(argv[1])+1);
  +		strcpy(optstr,argv[1]+strspn(argv[1],"-+"));
  +		argv[1]=argv[0];
  +		exit(generate_output(argv+1,argc-1,optstr,long_options));
  +	}
  +	
  +	while ((opt=getopt_long(argc,argv,shortopts,longopts,NULL)) != EOF) 
  +		switch (opt) {
  +		case 'a':
  +			alternative=1;
  +			break;
  +		case 'h':
  +			print_help();
  +			exit(0);
  +		case 'o':
  +			if (optstr)
  +				free(optstr);
  +			optstr=our_malloc(strlen(optarg)+1);
  +			strcpy(optstr,optarg);
  +			break;
  +		case 'l':
  +			add_long_options(optarg);
  +			break;
  +		case 'n':
  +			if (name)
  +				free(name);
  +			name=our_malloc(strlen(optarg)+1);
  +			strcpy(name,optarg);
  +			break;
  +		case 'q':
  +			quiet_errors=1;
  +			break;
  +		case 'Q':
  +			quiet_output=1;
  +			break;
  +		case 's':
  +			set_shell(optarg);
  +			break;
  +		case 'T':
  +			exit(4);
  +		case 'u':
  +			quote=0;
  +			break;
  +		case 'V':
  +			printf(_("getopt (enhanced) 1.1.3\n"));
  +			exit(0);
  +		case '?':
  +		case ':':
  +			parse_error(NULL);
  +		default:
  +			parse_error(_("internal error, contact the author."));
  +		}
  +	
  +	if (!optstr) 
  +	{
  +		if (optind >= argc)
  +			parse_error(_("missing optstring argument"));
  +		else {
  +			optstr=our_malloc(strlen(argv[optind])+1);
  +			strcpy(optstr,argv[optind]);
  +			optind++;
  +		}
  +	}
  +	if (name)
  +		argv[optind-1]=name;
  +	else
  +		argv[optind-1]=argv[0];
  +	exit(generate_output(argv+optind-1,argc-optind+1,optstr,long_options));
  +}
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/getopt/getopt_test.c
  ============================================================================
  $ cvs diff -u -r0 -r1.1 getopt_test.c
  --- /dev/null	2003-03-07 11:35:17.000000000 +0100
  +++ getopt_test.c	2003-03-07 11:35:22.000000000 +0100
  @@ -0,0 +1,77 @@
  +
  +#include "getopt.h"
  +#include <stdio.h>
  +#include <string.h>
  +#include <unistd.h>
  +
  +int
  +main (int argc, char **argv)
  +{
  +  static const struct option options[] =
  +    {
  +      {"required", required_argument, NULL, 'r'},
  +      {"optional", optional_argument, NULL, 'o'},
  +      {"none",     no_argument,       NULL, 'n'},
  +      {"color",    no_argument,       NULL, 'C'},
  +      {"colour",   no_argument,       NULL, 'C'},
  +      {NULL,       0,                 NULL, 0 }
  +    };
  +
  +  int aflag = 0;
  +  int bflag = 0;
  +  char *cvalue = NULL;
  +  int Cflag = 0;
  +  int nflag = 0;
  +  int index;
  +  int c;
  +  int result = 0;
  +
  +  while ((c = getopt_long (argc, argv, "abc:", options, NULL)) >= 0)
  +    switch (c)
  +      {
  +      case 'a':
  +	aflag = 1;
  +	break;
  +      case 'b':
  +	bflag = 1;
  +	break;
  +      case 'c':
  +	cvalue = optarg;
  +	break;
  +      case 'C':
  +	++Cflag;
  +	break;
  +      case '?':
  +	fputs ("Unknown option.\n", stderr);
  +	return 1;
  +      default:
  +	fprintf (stderr, "This should never happen!\n");
  +	return 1;
  +
  +      case 'r':
  +	printf ("--required %s\n", optarg);
  +	result |= strcmp (optarg, "foobar") != 0;
  +	break;
  +      case 'o':
  +	printf ("--optional %s\n", optarg);
  +	result |= optarg == NULL || strcmp (optarg, "bazbug") != 0;
  +	break;
  +      case 'n':
  +	puts ("--none");
  +	nflag = 1;
  +	break;
  +      }
  +
  +  printf ("aflag = %d, bflag = %d, cvalue = %s, Cflags = %d, nflag = %d\n",
  +	  aflag, bflag, cvalue, Cflag, nflag);
  +
  +  result |= (aflag != 1 || bflag != 1 || cvalue == NULL
  +	     || strcmp (cvalue, "foobar") != 0 || Cflag != 3 || nflag != 1);
  +
  +  for (index = optind; index < argc; index++)
  +    printf ("Non-option argument %s\n", argv[index]);
  +
  +  result |= optind + 1 != argc || strcmp (argv[optind], "random") != 0;
  +
  +  return result;
  +}
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar  7 11:37:51 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A65EF76C4F; Fri,  7 Mar 2003 11:37:51 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/getopt/ devtool.conf
Message-Id: <20030307103751.A65EF76C4F@mail.ossp.org>
Date: Fri,  7 Mar 2003 11:37:51 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Mar-2003 11:37:51
  Branch: HEAD                             Handle: 2003030710375000

  Modified files:
    ossp-pkg/getopt         devtool.conf

  Log:
    add script for releasing a tarball

  Summary:
    Revision    Changes     Path
    1.2         +4  -0      ossp-pkg/getopt/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/getopt/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.conf
  --- ossp-pkg/getopt/devtool.conf	7 Mar 2003 10:35:16 -0000	1.1
  +++ ossp-pkg/getopt/devtool.conf	7 Mar 2003 10:37:50 -0000	1.2
  @@ -27,3 +27,7 @@
       ls -l getopt-${V}.tar.gz
       gunzip <getopt-${V}.tar.gz | tar tvf -
   
  +%release
  +    echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/getopt/"
  +    scp getopt-*.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/getopt/
  +
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar  7 11:48:17 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C3EA876C58; Fri,  7 Mar 2003 11:48:16 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/getopt/ Makefile.in
Message-Id: <20030307104816.C3EA876C58@mail.ossp.org>
Date: Fri,  7 Mar 2003 11:48:16 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Mar-2003 11:48:16
  Branch: HEAD                             Handle: 2003030710481400

  Modified files:
    ossp-pkg/getopt         Makefile.in

  Log:
    remove obsolete lib dir reference

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/getopt/Makefile.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/getopt/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 Makefile.in
  --- ossp-pkg/getopt/Makefile.in	7 Mar 2003 10:35:16 -0000	1.1
  +++ ossp-pkg/getopt/Makefile.in	7 Mar 2003 10:48:14 -0000	1.2
  @@ -13,7 +13,7 @@
   
   CC          = @CC@
   CFLAGS      = @CFLAGS@
  -CPPFLAGS    = @DEFS@ -I. -I./lib
  +CPPFLAGS    = @DEFS@ -I.
   LDFLAGS     =
   LIBS        =
   AR          = @AR@
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar  7 11:49:14 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 79B4176C58; Fri,  7 Mar 2003 11:49:14 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/getopt/ .cvsignore
Message-Id: <20030307104914.79B4176C58@mail.ossp.org>
Date: Fri,  7 Mar 2003 11:49:14 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Mar-2003 11:49:14
  Branch: HEAD                             Handle: 2003030710491300

  Added files:
    ossp-pkg/getopt         .cvsignore

  Log:
    ignore generated files

  Summary:
    Revision    Changes     Path
    1.1         +8  -0      ossp-pkg/getopt/.cvsignore
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/getopt/.cvsignore
  ============================================================================
  $ cvs diff -u -r0 -r1.1 .cvsignore
  --- /dev/null	2003-03-07 11:49:13.000000000 +0100
  +++ .cvsignore	2003-03-07 11:49:13.000000000 +0100
  @@ -0,0 +1,8 @@
  +Makefile
  +config.h
  +config.h.in
  +configure
  +getopt
  +getopt-*.tar.gz
  +getopt-config
  +shtool
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar  7 15:59:18 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 43D0D76C4F; Fri,  7 Mar 2003 15:59:18 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm/ ChangeLog mm.h mm_core.c
Message-Id: <20030307145918.43D0D76C4F@mail.ossp.org>
Date: Fri,  7 Mar 2003 15:59:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Mar-2003 15:59:17
  Branch: HEAD                             Handle: 2003030714591500

  Modified files:
    ossp-pkg/mm             ChangeLog mm.h mm_core.c

  Log:
    1. Correctly cleanup under MM_SHMT_MMZERO in case of a shared memory
    segment creation error.
    
    2. Close the filedescriptor of the underlying object immediately
    after mmap(2)'ing it in case of MM_SHMT_MMPOSX, MM_SHMT_MMZERO and
    MM_SHMT_MMFILE.
    
    Hints by: Joe Orton <jorton@redhat.com>

  Summary:
    Revision    Changes     Path
    1.44        +11 -0      ossp-pkg/mm/ChangeLog
    1.28        +2  -0      ossp-pkg/mm/mm.h
    1.20        +12 -4      ossp-pkg/mm/mm_core.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.43 -r1.44 ChangeLog
  --- ossp-pkg/mm/ChangeLog	23 Dec 2002 19:32:54 -0000	1.43
  +++ ossp-pkg/mm/ChangeLog	7 Mar 2003 14:59:15 -0000	1.44
  @@ -14,6 +14,17 @@
       | |_ / __/
     __|_(_)_____|______________________________________________________
   
  + Changes between 1.2.2 and 1.3.0 (23-Dec-2002 to 07-Mar-2003)
  +
  +  *) Correctly cleanup under MM_SHMT_MMZERO in case of a shared
  +     memory segment creation error.
  +     [Ralf S. Engelschall]
  +
  +  *) Close the filedescriptor of the underlying object immediately
  +     after mmap(2)'ing it in case of MM_SHMT_MMPOSX, MM_SHMT_MMZERO
  +     and MM_SHMT_MMFILE.
  +     [Ralf S. Engelschall, Joe Orton <jorton@redhat.com>]
  +
    Changes between 1.2.1 and 1.2.2 (28-Jul-2002 to 23-Dec-2002)
   
     *) Stripped trailing whitespaces from all files in source tree.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm.h
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 mm.h
  --- ossp-pkg/mm/mm.h	19 Dec 2002 09:25:23 -0000	1.27
  +++ ossp-pkg/mm/mm.h	7 Mar 2003 14:59:15 -0000	1.28
  @@ -284,7 +284,9 @@
      size_t       mc_size;
      size_t       mc_usize;
      pid_t        mc_pid;
  +#if defined(MM_SHMT_IPCSHM)
      int          mc_fdmem;
  +#endif
   #if defined(MM_SHMT_MMFILE)
      char         mc_fnmem[MM_MAXPATH];
   #endif
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm_core.c
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 mm_core.c
  --- ossp-pkg/mm/mm_core.c	19 Dec 2002 09:25:24 -0000	1.19
  +++ ossp-pkg/mm/mm_core.c	7 Mar 2003 14:59:15 -0000	1.20
  @@ -189,7 +189,9 @@
   {
       mem_core *mc;
       void *area = ((void *)-1);
  +#if defined(MM_SHMT_MMPOSX) || defined(MM_SHMT_MMZERO) || defined(MM_SHMT_MMFILE) || defined(MM_SHMT_IPCSHM)
       int fdmem = -1;
  +#endif
       int fdsem = -1;
   #if defined(MM_SEMT_IPCSEM)
       int fdsem_rd = -1;
  @@ -262,6 +264,7 @@
                                MAP_SHARED, fdmem, mm_core_mapoffset)) == (void *)MAP_FAILED)
           FAIL(MM_ERR_CORE|MM_ERR_SYSTEM, "failed to memory map tempfile");
       shm_unlink(fnmem);
  +    close(fdmem); fdmem = -1;
       mm_core_mapoffset += size;
   #endif /* MM_SHMT_MMPOSX */
   
  @@ -278,6 +281,7 @@
       if ((area = (void *)mmap(NULL, size, PROT_READ|PROT_WRITE,
                                MAP_SHARED, fdmem, mm_core_mapoffset)) == (void *)MAP_FAILED)
           FAIL(MM_ERR_CORE|MM_ERR_SYSTEM, "failed to memory map /dev/zero");
  +    close(fdmem); fdmem = -1;
       mm_core_mapoffset += size;
   #endif /* MM_SHMT_MMZERO */
   
  @@ -295,6 +299,7 @@
       if ((area = (void *)mmap(NULL, size, PROT_READ|PROT_WRITE,
                                MAP_SHARED, fdmem, mm_core_mapoffset)) == (void *)MAP_FAILED)
           FAIL(MM_ERR_CORE|MM_ERR_SYSTEM, "failed to memory map memory file");
  +    close(fdmem); fdmem = -1;
       mm_core_mapoffset += size;
   #endif /* MM_SHMT_MMFILE */
   
  @@ -357,7 +362,9 @@
       mc->mc_size     = size;
       mc->mc_usize    = usersize;
       mc->mc_pid      = getpid();
  +#if defined(MM_SHMT_IPCSHM)
       mc->mc_fdmem    = fdmem;
  +#endif
   #if defined(MM_SEMT_FLOCK)
       mc->mc_fdsem[0].pid = getpid();
       mc->mc_fdsem[0].fd  = fdsem;
  @@ -401,7 +408,7 @@
       if (area != ((void *)-1))
           shmdt(area);
   #endif
  -#if defined(MM_SHMT_MMPOSX) || defined(MM_SHMT_MMFILE)
  +#if defined(MM_SHMT_MMPOSX) || defined(MM_SHMT_MMZERO) || defined(MM_SHMT_MMFILE)
       if (fdmem != -1)
           close(fdmem);
   #endif
  @@ -489,7 +496,9 @@
   void mm_core_delete(void *core)
   {
       mem_core *mc;
  +#if defined(MM_SHMT_IPCSHM)
       int fdmem;
  +#endif
       int fdsem;
   #if defined(MM_SEMT_IPCSEM)
       int fdsem_rd;
  @@ -506,7 +515,9 @@
           return;
       mc = (mem_core *)((char *)core-SIZEOF_mem_core);
       size  = mc->mc_size;
  +#if defined(MM_SHMT_IPCSHM)
       fdmem = mc->mc_fdmem;
  +#endif
   #if !defined(MM_SEMT_FLOCK)
       fdsem = mc->mc_fdsem;
   #endif
  @@ -529,9 +540,6 @@
   #if defined(MM_SHMT_IPCSHM)
       shmdt((void *)mc);
       shmctl(fdmem, IPC_RMID, NULL);
  -#endif
  -#if defined(MM_SHMT_MMPOSX) || defined(MM_SHMT_MMZERO) || defined(MM_SHMT_MMFILE)
  -    close(fdmem);
   #endif
   #if defined(MM_SHMT_MMFILE)
       unlink(fnmem);
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar  7 16:00:58 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E264176C65; Fri,  7 Mar 2003 16:00:57 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm/ README mm_vers.c
Message-Id: <20030307150057.E264176C65@mail.ossp.org>
Date: Fri,  7 Mar 2003 16:00:57 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Mar-2003 16:00:57
  Branch: HEAD                             Handle: 2003030715005501

  Modified files:
    ossp-pkg/mm             README mm_vers.c

  Log:
    bump version

  Summary:
    Revision    Changes     Path
    1.77        +1  -1      ossp-pkg/mm/README
    1.42        +9  -9      ossp-pkg/mm/mm_vers.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/README
  ============================================================================
  $ cvs diff -u -r1.76 -r1.77 README
  --- ossp-pkg/mm/README	23 Dec 2002 19:32:54 -0000	1.76
  +++ ossp-pkg/mm/README	7 Mar 2003 15:00:55 -0000	1.77
  @@ -7,7 +7,7 @@
     OSSP mm - Shared Memory Allocation
     Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
     Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
  -  Version 1.2.2 (23-Dec-2002)
  +  Version 1.3.0 (07-Mar-2003)
   
     OSSP mm is a 2-layer abstraction library which simplifies the usage
     of shared memory between forked (and this way strongly related) processes
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm_vers.c
  ============================================================================
  $ cvs diff -u -r1.41 -r1.42 mm_vers.c
  --- ossp-pkg/mm/mm_vers.c	23 Dec 2002 19:32:54 -0000	1.41
  +++ ossp-pkg/mm/mm_vers.c	7 Mar 2003 15:00:56 -0000	1.42
  @@ -8,7 +8,7 @@
   #ifndef _MM_VERS_C_
   #define _MM_VERS_C_
   
  -#define MM_VERSION 0x102202
  +#define MM_VERSION 0x103200
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _MM_VERS_C_AS_HEADER_
   
   mm_version_t mm_version = {
  -    0x102202,
  -    "1.2.2",
  -    "1.2.2 (23-Dec-2002)",
  -    "This is OSSP mm, Version 1.2.2 (23-Dec-2002)",
  -    "OSSP mm 1.2.2 (23-Dec-2002)",
  -    "OSSP mm/1.2.2",
  -    "@(#)OSSP mm 1.2.2 (23-Dec-2002)",
  -    "$Id: OSSP mm 1.2.2 (23-Dec-2002) $"
  +    0x103200,
  +    "1.3.0",
  +    "1.3.0 (07-Mar-2003)",
  +    "This is OSSP mm, Version 1.3.0 (07-Mar-2003)",
  +    "OSSP mm 1.3.0 (07-Mar-2003)",
  +    "OSSP mm/1.3.0",
  +    "@(#)OSSP mm 1.3.0 (07-Mar-2003)",
  +    "$Id: OSSP mm 1.3.0 (07-Mar-2003) $"
   };
   
   #endif /* _MM_VERS_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar  7 16:04:53 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C000676C5E; Fri,  7 Mar 2003 16:04:52 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm/ mm_core.c
Message-Id: <20030307150452.C000676C5E@mail.ossp.org>
Date: Fri,  7 Mar 2003 16:04:52 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Mar-2003 16:04:52
  Branch: HEAD                             Handle: 2003030715045000

  Modified files:
    ossp-pkg/mm             mm_core.c

  Log:
    Now that we immediately close the fd on MM_SHMT_MMZERO and MM_SHMT_MMFILE,
    we can avoid setting the FD_CLOEXEC just two calls before close(2).

  Summary:
    Revision    Changes     Path
    1.21        +0  -8      ossp-pkg/mm/mm_core.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm_core.c
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 mm_core.c
  --- ossp-pkg/mm/mm_core.c	7 Mar 2003 14:59:15 -0000	1.20
  +++ ossp-pkg/mm/mm_core.c	7 Mar 2003 15:04:50 -0000	1.21
  @@ -271,10 +271,6 @@
   #if defined(MM_SHMT_MMZERO)
       if ((fdmem = open("/dev/zero", O_RDWR, MM_CORE_FILEMODE)) == -1)
           FAIL(MM_ERR_CORE|MM_ERR_SYSTEM, "failed to open /dev/zero");
  -#if defined(F_SETFD) && defined(FD_CLOEXEC)
  -    if (fcntl(fdmem, F_SETFD, FD_CLOEXEC) == -1)
  -        FAIL(MM_ERR_CORE|MM_ERR_SYSTEM, "failed to set close-on-exec flag");
  -#endif
       if (lseek(fdmem, mm_core_mapoffset+size, SEEK_SET) == -1)
           FAIL(MM_ERR_CORE|MM_ERR_SYSTEM, "failed to seek in /dev/zero");
       write(fdmem, &zero, sizeof(zero));
  @@ -289,10 +285,6 @@
       unlink(fnmem);
       if ((fdmem = open(fnmem, O_RDWR|O_CREAT|O_EXCL, MM_CORE_FILEMODE)) == -1)
           FAIL(MM_ERR_CORE|MM_ERR_SYSTEM, "failed to open memory file");
  -#if defined(F_SETFD) && defined(FD_CLOEXEC)
  -    if (fcntl(fdmem, F_SETFD, FD_CLOEXEC) == -1)
  -        FAIL(MM_ERR_CORE|MM_ERR_SYSTEM, "failed to set close-on-exec flag");
  -#endif
       if (ftruncate(fdmem, mm_core_mapoffset+size) == -1)
           FAIL(MM_ERR_CORE|MM_ERR_SYSTEM, "failed to truncate memory file");
       write(fdmem, &zero, sizeof(zero));
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar  7 16:46:19 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A5FCC76C4F; Fri,  7 Mar 2003 16:46:18 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm/ README
Message-Id: <20030307154618.A5FCC76C4F@mail.ossp.org>
Date: Fri,  7 Mar 2003 16:46:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Mar-2003 16:46:18
  Branch: HEAD                             Handle: 2003030715461700

  Modified files:
    ossp-pkg/mm             README

  Log:
    reformat with par(1)

  Summary:
    Revision    Changes     Path
    1.78        +10 -9      ossp-pkg/mm/README
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/README
  ============================================================================
  $ cvs diff -u -r1.77 -r1.78 README
  --- ossp-pkg/mm/README	7 Mar 2003 15:00:55 -0000	1.77
  +++ ossp-pkg/mm/README	7 Mar 2003 15:46:17 -0000	1.78
  @@ -9,17 +9,18 @@
     Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
     Version 1.3.0 (07-Mar-2003)
   
  -  OSSP mm is a 2-layer abstraction library which simplifies the usage
  -  of shared memory between forked (and this way strongly related) processes
  +  OSSP mm is a 2-layer abstraction library which simplifies the usage of
  +  shared memory between forked (and this way strongly related) processes
     under Unix platforms. On the first (lower) layer it hides all platform
  -  dependent implementation details (allocation and locking) when dealing with
  -  shared memory segments and on the second (higher) layer it provides a
  -  high-level malloc(3)-style API for a convenient and well known way to work
  -  with data-structures inside those shared memory segments.
  +  dependent implementation details (allocation and locking) when dealing
  +  with shared memory segments and on the second (higher) layer it
  +  provides a high-level malloc(3)-style API for a convenient and well
  +  known way to work with data-structures inside those shared memory
  +  segments.
   
  -  This library was successfully tested on FreeBSD, OpenBSD, NetBSD, BSDI,
  -  Linux, SunOS, Solaris, Tru64, AIX, A/UX, HP-UX, ReliantUNIX, IRIX, UnixWare
  -  and even Win32 Cygwin, BeOS and OS/390.
  +  This library was successfully tested on FreeBSD, OpenBSD, NetBSD,
  +  BSDI, Linux, SunOS, Solaris, Tru64, AIX, A/UX, HP-UX, ReliantUNIX,
  +  IRIX, UnixWare and even Win32 Cygwin, BeOS and OS/390.
   
     The documentation and latest release can be found on
     http://www.ossp.org/pkg/lib/mm/
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar  7 17:02:03 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5979076C65; Fri,  7 Mar 2003 17:02:01 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm/ ChangeLog
Message-Id: <20030307160201.5979076C65@mail.ossp.org>
Date: Fri,  7 Mar 2003 17:02:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Mar-2003 17:02:00
  Branch: HEAD                             Handle: 2003030716015900

  Modified files:
    ossp-pkg/mm             ChangeLog

  Log:
    remove half-way done headers

  Summary:
    Revision    Changes     Path
    1.45        +0  -11     ossp-pkg/mm/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.44 -r1.45 ChangeLog
  --- ossp-pkg/mm/ChangeLog	7 Mar 2003 14:59:15 -0000	1.44
  +++ ossp-pkg/mm/ChangeLog	7 Mar 2003 16:01:59 -0000	1.45
  @@ -8,11 +8,6 @@
   
    ChangeLog
    =========
  -     _   ____
  -    / | |___ \
  -    | |   __) |
  -    | |_ / __/
  -  __|_(_)_____|______________________________________________________
   
    Changes between 1.2.2 and 1.3.0 (23-Dec-2002 to 07-Mar-2003)
   
  @@ -208,12 +203,6 @@
   
     *) Splitted README into README, PORTING and THANKS document.
        [Ralf S. Engelschall]
  -
  -    _   ___
  -   / | / _ \
  -   | || | | |
  -   | || |_| |
  - __|_(_)___/________________________________________________________
   
    Changes between 1.0.11 and 1.0.12 (06-Sep-1999 to 28-Sep-1999)
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar  7 17:03:04 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 75B6C76C5E; Fri,  7 Mar 2003 17:03:04 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20030307160304.75B6C76C5E@mail.ossp.org>
Date: Fri,  7 Mar 2003 17:03:04 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   07-Mar-2003 17:03:04
  Branch: HEAD                             Handle: 2003030716025705

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/mm     index.wml

  Log:
    release OSSP mm 1.3.0

  Summary:
    Revision    Changes     Path
    1.59        +1  -0      ossp-web/new/news.txt
    1.55        +1  -1      ossp-web/pkg/lib/index.wml
    1.11        +2  -2      ossp-web/pkg/lib/mm/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.58 -r1.59 news.txt
  --- ossp-web/new/news.txt	17 Feb 2003 15:19:55 -0000	1.58
  +++ ossp-web/new/news.txt	7 Mar 2003 16:02:57 -0000	1.59
  @@ -1,3 +1,4 @@
  +07-Mar-2003: Released L<OSSP mm> 1.3.0
   17-Feb-2003: Released L<GNU pth> 2.0.0
   17-Feb-2003: Released L<OSSP str> 0.9.8
   17-Feb-2003: Released L<OSSP val> 0.9.1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.54 -r1.55 index.wml
  --- ossp-web/pkg/lib/index.wml	17 Feb 2003 15:19:56 -0000	1.54
  +++ ossp-web/pkg/lib/index.wml	7 Mar 2003 16:03:00 -0000	1.55
  @@ -18,7 +18,7 @@
   			done=100 stable=2.0.0 unstable=none>
     <pkg_item name="mm" longname="OSSP mm" type="lib"
               desc="Shared Memory Allocation"
  -			done=100 stable=1.2.2 unstable=none>
  +			done=100 stable=1.3.0 unstable=none>
     <pkg_item name="ex" longname="OSSP ex" type="lib"
               desc="Exception Handling"
   			done=100 stable=1.0.2 unstable=none>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/mm/index.wml
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 index.wml
  --- ossp-web/pkg/lib/mm/index.wml	17 Feb 2003 20:11:19 -0000	1.10
  +++ ossp-web/pkg/lib/mm/index.wml	7 Mar 2003 16:03:02 -0000	1.11
  @@ -30,7 +30,7 @@
   <pkg_status
       name="mm" assign="rse"
   	genesis="Mar-1999"
  -    stable="1.2.2"   stable_date="23-Dec-2002"
  +    stable="1.3.0"   stable_date="07-Mar-2003"
       unstable="none"  unstable_date="none"
   	done=100>
   
  @@ -41,7 +41,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/mm/
       directory=$(FTP_ROOT_DIR)/pkg/lib/mm/
       files="mm-*.tar.gz" 
  -	stable="mm-1.2.2.tar.gz" unstable="none">
  +	stable="mm-1.3.0.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Mar 10 11:21:53 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E5CAC76C5E; Mon, 10 Mar 2003 11:21:52 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/com/ sponsors.wml
Message-Id: <20030310102152.E5CAC76C5E@mail.ossp.org>
Date: Mon, 10 Mar 2003 11:21:52 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-web                         Date:   10-Mar-2003 11:21:52
  Branch: HEAD                             Handle: 2003031010215100

  Modified files:
    ossp-web/com            sponsors.wml

  Log:
    thank "The SCO Group" for UnixWare v7.1.3 & SDK

  Summary:
    Revision    Changes     Path
    1.7         +2  -0      ossp-web/com/sponsors.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/com/sponsors.wml
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 sponsors.wml
  --- ossp-web/com/sponsors.wml	17 Feb 2003 18:17:56 -0000	1.6
  +++ ossp-web/com/sponsors.wml	10 Mar 2003 10:21:51 -0000	1.7
  @@ -38,6 +38,8 @@
         (Domain Registration, System Administration, Hardware)
     <li><a href="http://www.sdm.de/"><b>sd&m software design & management AG</b></a> (1998)<br>
         (Computing Resources, Network Resources, Manpower) 
  +  <li><a href="http://www.sco.com/"><b>The SCO Group</b></a> (2003)<br>
  +      (Porting Software Platform UnixWare v7.1.3 & SDK) 
   </ul>
   
   <h2>Bronze Sponsors</h2>
  @@ .

From ossp-cvs-owner@ossp.org  Sat Mar 22 18:46:26 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3996176D7E; Sat, 22 Mar 2003 18:46:26 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/xds/ index.wml
Message-Id: <20030322174626.3996176D7E@mail.ossp.org>
Date: Sat, 22 Mar 2003 18:46:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   22-Mar-2003 18:46:25
  Branch: HEAD                             Handle: 2003032217462500

  Modified files:
    ossp-web/pkg/lib/xds    index.wml

  Log:
    add references to similar software

  Summary:
    Revision    Changes     Path
    1.7         +8  -0      ossp-web/pkg/lib/xds/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/xds/index.wml
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 index.wml
  --- ossp-web/pkg/lib/xds/index.wml	17 Feb 2003 12:52:59 -0000	1.6
  +++ ossp-web/pkg/lib/xds/index.wml	22 Mar 2003 17:46:25 -0000	1.7
  @@ -33,6 +33,14 @@
       unstable="0.9.0" unstable_date="17-Feb-2003"
   	done=100>
   
  +<h2>See Also</h2>
  +
  +Sun RPC XDR, 
  +<a href="http://www.ioplex.com/~miallen/encdec/">encdec</a>,
  +<a href="ftp://ftp.cc.gatech.edu/pub/groups/systems/chaos/pbio/">pbio</a>,
  +<a href="http://him.newmail.ru/">him</a>,
  +<a href="http://gsd.di.uminho.pt/jop/xtl/">xtl</a>.
  +
   <h2>Source</h2>
   
   <pkg_files 
  @@ .

From ossp-cvs-owner@ossp.org  Sat Mar 22 21:28:44 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BFBA276C54; Sat, 22 Mar 2003 21:28:43 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog pth_string.c
Message-Id: <20030322202843.BFBA276C54@mail.ossp.org>
Date: Sat, 22 Mar 2003 21:28:43 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Mar-2003 21:28:43
  Branch: HEAD                             Handle: 2003032220284200

  Modified files:
    ossp-pkg/pth            ChangeLog pth_string.c

  Log:
    Replace some 0 by more politically correct NULL in pth_string.c

  Summary:
    Revision    Changes     Path
    1.606       +5  -0      ossp-pkg/pth/ChangeLog
    1.9         +1  -1      ossp-pkg/pth/pth_string.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.605 -r1.606 ChangeLog
  --- ossp-pkg/pth/ChangeLog	17 Feb 2003 10:49:02 -0000	1.605
  +++ ossp-pkg/pth/ChangeLog	22 Mar 2003 20:28:42 -0000	1.606
  @@ -19,6 +19,11 @@
        / __/ | |_| |
     __|_____(_)___/_________________________________________________________
                     
  +  Changes between 2.0.0 and 2.0.1 (17-Feb-2003 to xx-XXX-2003)
  +
  +   *) Replace some 0 by more politically correct NULL in pth_string.c
  +      [Ralf S. Engelschall]
  +
     Changes between 2.0b2 and 2.0.0 (04-Dec-2002 to 17-Feb-2003)
   
      *) Final source tree polishing before release.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_string.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 pth_string.c
  --- ossp-pkg/pth/pth_string.c	1 Jan 2003 15:49:12 -0000	1.8
  +++ ossp-pkg/pth/pth_string.c	22 Mar 2003 20:28:42 -0000	1.9
  @@ -364,7 +364,7 @@
       int padlen, strln;
       int cnt = 0;
   
  -    if (value == 0)
  +    if (value == NULL)
           value = "<NULL>";
       for (strln = 0; value[strln] != '\0'; strln++)
           ;
  @@ .

From ossp-cvs-owner@ossp.org  Sat Mar 22 21:31:50 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8F40776C57; Sat, 22 Mar 2003 21:31:50 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ pth_sched.c
Message-Id: <20030322203150.8F40776C57@mail.ossp.org>
Date: Sat, 22 Mar 2003 21:31:50 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Mar-2003 21:31:50
  Branch: HEAD                             Handle: 2003032220314900

  Modified files:
    ossp-pkg/pth            pth_sched.c

  Log:
    flush out this trivial pending change in one of my Pth dev queues

  Summary:
    Revision    Changes     Path
    1.90        +2  -0      ossp-pkg/pth/pth_sched.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_sched.c
  ============================================================================
  $ cvs diff -u -r1.89 -r1.90 pth_sched.c
  --- ossp-pkg/pth/pth_sched.c	1 Jan 2003 15:49:12 -0000	1.89
  +++ ossp-pkg/pth/pth_sched.c	22 Mar 2003 20:31:49 -0000	1.90
  @@ -358,8 +358,10 @@
            */
           if (   pth_pqueue_elements(&pth_RQ) == 0
               && pth_pqueue_elements(&pth_NQ) == 0)
  +            /* still no NEW or READY threads, so we have to wait for new work */
               pth_sched_eventmanager(&snapshot, FALSE /* wait */);
           else
  +            /* already NEW or READY threads exists, so just poll for even more work */
               pth_sched_eventmanager(&snapshot, TRUE  /* poll */);
       }
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Mar 23 19:00:33 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 929E476517; Sun, 23 Mar 2003 19:00:32 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tai/ Makefile.in aclocal.m4 configure.ac tai-conf...
Message-Id: <20030323180032.929E476517@mail.ossp.org>
Date: Sun, 23 Mar 2003 19:00:32 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Mar-2003 19:00:32
  Branch: HEAD                             Handle: 2003032318002900

  Modified files:
    ossp-pkg/tai            Makefile.in aclocal.m4 configure.ac tai-config.in
                            tai.ac tai.h tai_cal.c tai_lib.c tai_test.c
                            tai_ui64.c tai_ui64.h

  Log:
    bump copyright year

  Summary:
    Revision    Changes     Path
    1.4         +3  -3      ossp-pkg/tai/Makefile.in
    1.2         +3  -3      ossp-pkg/tai/aclocal.m4
    1.2         +3  -3      ossp-pkg/tai/configure.ac
    1.2         +3  -3      ossp-pkg/tai/tai-config.in
    1.4         +3  -3      ossp-pkg/tai/tai.ac
    1.4         +3  -3      ossp-pkg/tai/tai.h
    1.2         +3  -3      ossp-pkg/tai/tai_cal.c
    1.8         +3  -3      ossp-pkg/tai/tai_lib.c
    1.5         +3  -3      ossp-pkg/tai/tai_test.c
    1.2         +3  -3      ossp-pkg/tai/tai_ui64.c
    1.3         +3  -3      ossp-pkg/tai/tai_ui64.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/tai/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 Makefile.in
  --- ossp-pkg/tai/Makefile.in	1 May 2002 18:48:34 -0000	1.3
  +++ ossp-pkg/tai/Makefile.in	23 Mar 2003 18:00:29 -0000	1.4
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP tai - Time Handling
  -##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP tai, a time handling library
   ##  which can be found at http://www.ossp.org/pkg/lib/tai/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/tai/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 aclocal.m4
  --- ossp-pkg/tai/aclocal.m4	18 Apr 2002 09:10:46 -0000	1.1.1.1
  +++ ossp-pkg/tai/aclocal.m4	23 Mar 2003 18:00:29 -0000	1.2
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP tai - Time Handling
  -dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP tai, a time handling library
   dnl ##  which can be found at http://www.ossp.org/pkg/lib/tai/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/tai/configure.ac
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 configure.ac
  --- ossp-pkg/tai/configure.ac	18 Apr 2002 09:10:46 -0000	1.1.1.1
  +++ ossp-pkg/tai/configure.ac	23 Mar 2003 18:00:29 -0000	1.2
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP tai - Time Handling
  -dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP tai, a time handling library
   dnl ##  which can be found at http://www.ossp.org/pkg/lib/tai/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/tai/tai-config.in
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 tai-config.in
  --- ossp-pkg/tai/tai-config.in	18 Apr 2002 09:10:47 -0000	1.1.1.1
  +++ ossp-pkg/tai/tai-config.in	23 Mar 2003 18:00:29 -0000	1.2
  @@ -1,9 +1,9 @@
   #!/bin/sh
   ##
   ##  OSSP tai - Time Handling
  -##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP tai, a time handling library
   ##  which can be found at http://www.ossp.org/pkg/lib/tai/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/tai/tai.ac
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 tai.ac
  --- ossp-pkg/tai/tai.ac	14 Aug 2002 14:28:27 -0000	1.3
  +++ ossp-pkg/tai/tai.ac	23 Mar 2003 18:00:29 -0000	1.4
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP tai - Time Handling
  -dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP tai, a time handling library
   dnl ##  which can be found at http://www.ossp.org/pkg/lib/tai/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/tai/tai.h
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 tai.h
  --- ossp-pkg/tai/tai.h	29 Jun 2002 12:19:46 -0000	1.3
  +++ ossp-pkg/tai/tai.h	23 Mar 2003 18:00:29 -0000	1.4
  @@ -1,8 +1,8 @@
   /*
   **  OSSP tai - Time Handling
  -**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP tai, a time handling library
   **  which can be found at http://www.ossp.org/pkg/lib/tai/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/tai/tai_cal.c
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 tai_cal.c
  --- ossp-pkg/tai/tai_cal.c	1 May 2002 18:48:34 -0000	1.1
  +++ ossp-pkg/tai/tai_cal.c	23 Mar 2003 18:00:29 -0000	1.2
  @@ -1,8 +1,8 @@
   /*
   **  OSSP tai - Time Handling
  -**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP tai, a time handling library
   **  which can be found at http://www.ossp.org/pkg/lib/tai/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/tai/tai_lib.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 tai_lib.c
  --- ossp-pkg/tai/tai_lib.c	14 Aug 2002 14:28:27 -0000	1.7
  +++ ossp-pkg/tai/tai_lib.c	23 Mar 2003 18:00:29 -0000	1.8
  @@ -1,8 +1,8 @@
   /*
   **  OSSP tai - Time Handling
  -**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP tai, a time handling library
   **  which can be found at http://www.ossp.org/pkg/lib/tai/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/tai/tai_test.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 tai_test.c
  --- ossp-pkg/tai/tai_test.c	14 Aug 2002 14:28:27 -0000	1.4
  +++ ossp-pkg/tai/tai_test.c	23 Mar 2003 18:00:29 -0000	1.5
  @@ -1,8 +1,8 @@
   /*
   **  OSSP tai - Time Handling
  -**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP tai, a time handling library
   **  which can be found at http://www.ossp.org/pkg/lib/tai/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/tai/tai_ui64.c
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 tai_ui64.c
  --- ossp-pkg/tai/tai_ui64.c	29 Apr 2002 19:19:48 -0000	1.1
  +++ ossp-pkg/tai/tai_ui64.c	23 Mar 2003 18:00:29 -0000	1.2
  @@ -1,8 +1,8 @@
   /*
   **  OSSP ui64 - 64-Bit Arithmetic
  -**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP ui64, a 64-bit arithmetic library
   **  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/tai/tai_ui64.h
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 tai_ui64.h
  --- ossp-pkg/tai/tai_ui64.h	29 Jun 2002 11:09:57 -0000	1.2
  +++ ossp-pkg/tai/tai_ui64.h	23 Mar 2003 18:00:29 -0000	1.3
  @@ -1,8 +1,8 @@
   /*
   **  OSSP ui64 - 64-Bit Arithmetic
  -**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP ui64, a 64-bit arithmetic library
   **  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  @@ .

From ossp-cvs-owner@ossp.org  Sun Mar 23 19:07:18 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2B7CC7645F; Sun, 23 Mar 2003 19:07:18 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ui64/ Makefile.in README aclocal.m4 configure.ac ...
Message-Id: <20030323180718.2B7CC7645F@mail.ossp.org>
Date: Sun, 23 Mar 2003 19:07:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Mar-2003 19:07:17
  Branch: HEAD                             Handle: 2003032318071501

  Modified files:
    ossp-pkg/ui64           Makefile.in README aclocal.m4 configure.ac
                            ui64-config.in ui64.c ui64.h ui64.pod ui64_test.c

  Log:
    bump copyright year

  Summary:
    Revision    Changes     Path
    1.2         +3  -3      ossp-pkg/ui64/Makefile.in
    1.3         +3  -3      ossp-pkg/ui64/README
    1.2         +3  -3      ossp-pkg/ui64/aclocal.m4
    1.2         +3  -3      ossp-pkg/ui64/configure.ac
    1.2         +3  -3      ossp-pkg/ui64/ui64-config.in
    1.3         +3  -3      ossp-pkg/ui64/ui64.c
    1.5         +3  -3      ossp-pkg/ui64/ui64.h
    1.6         +3  -3      ossp-pkg/ui64/ui64.pod
    1.2         +3  -3      ossp-pkg/ui64/ui64_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 Makefile.in
  --- ossp-pkg/ui64/Makefile.in	28 Apr 2002 13:22:49 -0000	1.1
  +++ ossp-pkg/ui64/Makefile.in	23 Mar 2003 18:07:15 -0000	1.2
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP ui64 - 64-Bit Arithmetic
  -##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP ui64, a 64-bit arithmetic library
   ##  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/README
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 README
  --- ossp-pkg/ui64/README	26 Jun 2002 16:00:25 -0000	1.2
  +++ ossp-pkg/ui64/README	23 Mar 2003 18:07:15 -0000	1.3
  @@ -15,9 +15,9 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   
     This file is part of OSSP ui64, a 64-bit arithmetic library
     which can be found at http://www.ossp.org/pkg/lib/ui64/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 aclocal.m4
  --- ossp-pkg/ui64/aclocal.m4	28 Apr 2002 13:22:49 -0000	1.1
  +++ ossp-pkg/ui64/aclocal.m4	23 Mar 2003 18:07:15 -0000	1.2
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP ui64 - 64-Bit Arithmetic
  -dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP ui64, a 64-bit arithmetic library
   dnl ##  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/configure.ac
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 configure.ac
  --- ossp-pkg/ui64/configure.ac	28 Apr 2002 13:22:49 -0000	1.1
  +++ ossp-pkg/ui64/configure.ac	23 Mar 2003 18:07:15 -0000	1.2
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP ui64 - 64-Bit Arithmetic
  -dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP ui64, a 64-bit arithmetic library
   dnl ##  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/ui64-config.in
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ui64-config.in
  --- ossp-pkg/ui64/ui64-config.in	28 Apr 2002 13:22:49 -0000	1.1
  +++ ossp-pkg/ui64/ui64-config.in	23 Mar 2003 18:07:15 -0000	1.2
  @@ -1,9 +1,9 @@
   #!/bin/sh
   ##
   ##  OSSP ui64 - 64-Bit Arithmetic
  -##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP ui64, a 64-bit arithmetic library
   ##  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/ui64.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ui64.c
  --- ossp-pkg/ui64/ui64.c	28 Apr 2002 18:58:01 -0000	1.2
  +++ ossp-pkg/ui64/ui64.c	23 Mar 2003 18:07:15 -0000	1.3
  @@ -1,8 +1,8 @@
   /*
   **  OSSP ui64 - 64-Bit Arithmetic
  -**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP ui64, a 64-bit arithmetic library
   **  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/ui64.h
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ui64.h
  --- ossp-pkg/ui64/ui64.h	29 Jun 2002 11:08:35 -0000	1.4
  +++ ossp-pkg/ui64/ui64.h	23 Mar 2003 18:07:15 -0000	1.5
  @@ -1,8 +1,8 @@
   /*
   **  OSSP ui64 - 64-Bit Arithmetic
  -**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP ui64, a 64-bit arithmetic library
   **  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/ui64.pod
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ui64.pod
  --- ossp-pkg/ui64/ui64.pod	26 Jun 2002 16:00:25 -0000	1.5
  +++ ossp-pkg/ui64/ui64.pod	23 Mar 2003 18:07:15 -0000	1.6
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP ui64 - 64-Bit Arithmetic
  -##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP ui64, a 64-bit arithmetic library
   ##  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/ui64_test.c
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ui64_test.c
  --- ossp-pkg/ui64/ui64_test.c	28 Apr 2002 13:22:49 -0000	1.1
  +++ ossp-pkg/ui64/ui64_test.c	23 Mar 2003 18:07:16 -0000	1.2
  @@ -1,8 +1,8 @@
   /*
   **  OSSP ui64 - 64-Bit Arithmetic
  -**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP ui64, a 64-bit arithmetic library
   **  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  @@ .

From ossp-cvs-owner@ossp.org  Mon Mar 24 12:03:44 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 171CB7643A; Mon, 24 Mar 2003 12:03:43 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm/ mm.pod
Message-Id: <20030324110343.171CB7643A@mail.ossp.org>
Date: Mon, 24 Mar 2003 12:03:43 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Mar-2003 12:03:43
  Branch: HEAD                             Handle: 2003032411034300

  Modified files:
    ossp-pkg/mm             mm.pod

  Log:
    Fix punctuations.
    
    Submitted by: Alexey Mahotkin <alexm@w-m.ru>

  Summary:
    Revision    Changes     Path
    1.22        +2  -2      ossp-pkg/mm/mm.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm.pod
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 mm.pod
  --- ossp-pkg/mm/mm.pod	19 Dec 2002 09:25:23 -0000	1.21
  +++ ossp-pkg/mm/mm.pod	24 Mar 2003 11:03:43 -0000	1.22
  @@ -287,8 +287,8 @@
   
   =head1 API FUNCTIONS
   
  -In the following, all API functions are described in detail The order   .
  -directly follows the one in the B<SYNOPSIS> section above              .
  +In the following, all API functions are described in detail The order
  +directly follows the one in the B<SYNOPSIS> section above.
   
   =head2 Global Malloc-Replacement API
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Mar 24 16:16:01 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4D9BB7668C; Mon, 24 Mar 2003 16:16:01 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ TODO
Message-Id: <20030324151601.4D9BB7668C@mail.ossp.org>
Date: Mon, 24 Mar 2003 16:16:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   24-Mar-2003 16:16:01
  Branch: HEAD                             Handle: 2003032415160000

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    sanity checking in the l2_ch_syslog.c:hook_configure()

  Summary:
    Revision    Changes     Path
    1.60        +9  -0      ossp-pkg/l2/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/TODO
  ============================================================================
  $ cvs diff -u -r1.59 -r1.60 TODO
  --- ossp-pkg/l2/TODO	27 Jan 2003 16:01:35 -0000	1.59
  +++ ossp-pkg/l2/TODO	24 Mar 2003 15:16:00 -0000	1.60
  @@ -9,6 +9,15 @@
     TODO
     ====
   
  +20030324 thl
  +    The sanity checking in the l2_ch_syslog.c:hook_configure()
  +    implementation causes an artifical sensibility to the order of
  +    parameters when a l2spec is used.  A possible solution could be to
  +    relocate the sanity checks into hook_open().  The following two
  +    lines show simple examples, the first one works, the second doesn't.
  +    $ echo "hello" | l2tool 'syslog(facility=mail, ident=info, remotehost="127.0.0.1", remoteport="514", target="remote")' #works
  +    $ echo "hello" | l2tool 'syslog(facility=mail, ident=info, target="remote", remotehost="127.0.0.1", remoteport="514")' #error
  +
   20030127 thl
       Fixed a bug in l2_channel.c:l2_channel_destroy() where chD was
       passing a pointer to l2_channel_downstream() to find a sibling of a
  @@ .

From ossp-cvs-owner@ossp.org  Mon Mar 24 17:11:53 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9E90E7643A; Mon, 24 Mar 2003 17:11:52 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/fsl/ faq.wml index.wml
Message-Id: <20030324161152.9E90E7643A@mail.ossp.org>
Date: Mon, 24 Mar 2003 17:11:52 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-web                         Date:   24-Mar-2003 17:11:52
  Branch: HEAD                             Handle: 2003032416115100

  Added files:
    ossp-web/pkg/lib/fsl    faq.wml
  Modified files:
    ossp-web/pkg/lib/fsl    index.wml

  Log:
    document fsl/l2/syslog experiences in a faq

  Summary:
    Revision    Changes     Path
    1.1         +96 -0      ossp-web/pkg/lib/fsl/faq.wml
    1.17        +2  -1      ossp-web/pkg/lib/fsl/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/fsl/faq.wml
  ============================================================================
  $ cvs diff -u -r0 -r1.1 faq.wml
  --- /dev/null	2003-03-24 17:11:52.000000000 +0100
  +++ faq.wml	2003-03-24 17:11:52.000000000 +0100
  @@ -0,0 +1,96 @@
  +
  +#use wml::ossp area=pkg:lib subarea=fsl
  +
  +<title>OSSP fsl</title>
  +
  +<h1>Faked/Flexible Syslog</h1>
  +
  +<h2>Abstract</h2>
  +
  +<title>Frequently Asked Questions (FAQ)</title>
  +
  +<h1>Frequently Asked Questions (FAQ)</h1>
  +
  +This is a list of frequently asked questions and answers about OSSP fsl.
  +
  +<define-tag faq endtag=required>
  +<preserve id title>
  +<set-var %attributes>
  +<p>
  +<li><a name="<get-var id>"><b><get-var title></b></a>
  +    [<a href="#<get-var id>">A</a>]
  +    <p>
  +    %body
  +</li>
  +<restore id title>
  +</define-tag>
  +
  +<ol>
  +
  +<faq id="syslog-setup"
  +     title="I want fsl to forward to syslog. What is the minimum syslog configuration?">
  +    Prepare syslog.conf(5) and keep in mind it wants to see tabs not
  +    spaces, they are marked the output manually to make that clear.
  +    <p>
  +        $ grep mail.info /etc/syslog.conf
  +        mail.info<i>\t\t\t</i>/var/log/maillog
  +    </p>
  +</faq>
  +
  +<faq id="syslog-debug"
  +     title="I want fsl to forward to syslog. How can i find out if syslog.conf(5) is correct?">
  +    <p>
  +       $ logger -p mail.info "message"
  +       $ tail /var/log/maillog
  +       Mar 24 17:01:36 host user: message 
  +    </p>
  +</faq>
  +
  +<faq id="syslog-l2spec-local"
  +     title="I want fsl to forward to syslog. Which l2spec logs to syslogd locally?">
  +    <p>
  +       $ echo "from l2, loc" \
  +       | fsl-l2tool 'syslog(facility=mail, ident=info, target="local")'
  +    </p>
  +</faq>
  +
  +<faq id="syslog-l2spec-remote"
  +     title="I want fsl to forward to syslog. Which l2spec logs to syslogd remotely?">
  +    Make sure syslogd accepts network connections, see it's -s option
  +    for syslogd(8) on FreeBSD, -r option for syslogd(8) on Linux or -t
  +    for syslogd(1M) on Solaris. Also note that the l2spec requires a
  +    certain order of the remotehost, remoteport an target
  +    keywords, see http://cvs.ossp.org/chngview?cn=3313.
  +     <p>
  +     $ echo "from l2, net" \
  +     | fsl-l2tool 'syslog(facility=mail, ident=info, 
  +                          remotehost="127.0.0.1", remoteport="514", target="remote")'
  +
  +     </p>
  +</faq>
  +
  +<faq id="syslog-fsl"
  +     title="I want fsl to forward to syslog. Which fsl config logs to syslogd remotely?">
  +    <p>
  +    ##
  +    ##  fsl.openssh -- OSSP fsl configuration for openssh
  +    ##
  +
  +    ident (ssh(d|-.+)?|scp|sftp(-server)?)/.+ q{
  +        prefix(
  +            prefix="%b %d %H:%M:%S %N <%L> $1[%P]: "
  +        ) 
  +        -> {
  +            debug: file(
  +                path="/usr/opkg/var/openssh/sshd.log",
  +                append=1, perm=0644
  +            );
  +            debug: syslog(
  +                facility=mail, ident=info,
  +                remotehost="127.0.0.1", remoteport="514", target="remote"
  +            )
  +        }
  +    };
  +    </p>
  +</faq>
  +</ol>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/fsl/index.wml
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 index.wml
  --- ossp-web/pkg/lib/fsl/index.wml	13 Feb 2003 15:56:35 -0000	1.16
  +++ ossp-web/pkg/lib/fsl/index.wml	24 Mar 2003 16:11:51 -0000	1.17
  @@ -29,7 +29,8 @@
   <h2>Documentation</h2>
   
   <pkg_manpage name="fsl" sect=3 path="/pkg/lib/fsl/fsl.pod">,
  -<pkg_manpage name="fsl-config" sect=1 path="/pkg/lib/fsl/fsl-config.pod">.
  +<pkg_manpage name="fsl-config" sect=1 path="/pkg/lib/fsl/fsl-config.pod">,
  +<a href="faq.html">Frequently Asked Questions (FAQ)</a>
   
   <h2>Authors</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Mar 24 20:44:32 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2E2247643A; Mon, 24 Mar 2003 20:44:32 +0100 (CET)
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/fsl/ faq.wml
Message-Id: <20030324194432.2E2247643A@mail.ossp.org>
Date: Mon, 24 Mar 2003 20:44:32 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   OSSP Project Master
  Root:   /e/ossp/cvs                      Email:  ossp@ossp.org
  Module: ossp-web                         Date:   24-Mar-2003 20:44:31
  Branch: HEAD                             Handle: 2003032419443100

  Modified files:
    ossp-web/pkg/lib/fsl    faq.wml

  Log:
    p should have been pre; TAB; link to CVS

  Summary:
    Revision    Changes     Path
    1.2         +14 -18     ossp-web/pkg/lib/fsl/faq.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/fsl/faq.wml
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 faq.wml
  --- ossp-web/pkg/lib/fsl/faq.wml	24 Mar 2003 16:11:51 -0000	1.1
  +++ ossp-web/pkg/lib/fsl/faq.wml	24 Mar 2003 19:44:31 -0000	1.2
  @@ -5,11 +5,7 @@
   
   <h1>Faked/Flexible Syslog</h1>
   
  -<h2>Abstract</h2>
  -
  -<title>Frequently Asked Questions (FAQ)</title>
  -
  -<h1>Frequently Asked Questions (FAQ)</h1>
  +<h2>Frequently Asked Questions (FAQ)</h2>
   
   This is a list of frequently asked questions and answers about OSSP fsl.
   
  @@ -17,7 +13,7 @@
   <preserve id title>
   <set-var %attributes>
   <p>
  -<li><a name="<get-var id>"><b><get-var title></b></a>
  +<li><a name="<get-var id>"><get-var title></a>
       [<a href="#<get-var id>">A</a>]
       <p>
       %body
  @@ -31,27 +27,27 @@
        title="I want fsl to forward to syslog. What is the minimum syslog configuration?">
       Prepare syslog.conf(5) and keep in mind it wants to see tabs not
       spaces, they are marked the output manually to make that clear.
  -    <p>
  +	<pre>
           $ grep mail.info /etc/syslog.conf
  -        mail.info<i>\t\t\t</i>/var/log/maillog
  -    </p>
  +        mail.info <b>TAB</b> /var/log/maillog
  +    </pre>
   </faq>
   
   <faq id="syslog-debug"
        title="I want fsl to forward to syslog. How can i find out if syslog.conf(5) is correct?">
  -    <p>
  +    <pre>
          $ logger -p mail.info "message"
          $ tail /var/log/maillog
          Mar 24 17:01:36 host user: message 
  -    </p>
  +    </pre>
   </faq>
   
   <faq id="syslog-l2spec-local"
        title="I want fsl to forward to syslog. Which l2spec logs to syslogd locally?">
  -    <p>
  +    <pre>
          $ echo "from l2, loc" \
          | fsl-l2tool 'syslog(facility=mail, ident=info, target="local")'
  -    </p>
  +    </pre>
   </faq>
   
   <faq id="syslog-l2spec-remote"
  @@ -60,18 +56,18 @@
       for syslogd(8) on FreeBSD, -r option for syslogd(8) on Linux or -t
       for syslogd(1M) on Solaris. Also note that the l2spec requires a
       certain order of the remotehost, remoteport an target
  -    keywords, see http://cvs.ossp.org/chngview?cn=3313.
  -     <p>
  +    keywords, see <a href="http://cvs.ossp.org/chngview?cn=3313">CVS</a>.
  +     <pre>
        $ echo "from l2, net" \
        | fsl-l2tool 'syslog(facility=mail, ident=info, 
                             remotehost="127.0.0.1", remoteport="514", target="remote")'
   
  -     </p>
  +     </pre>
   </faq>
   
   <faq id="syslog-fsl"
        title="I want fsl to forward to syslog. Which fsl config logs to syslogd remotely?">
  -    <p>
  +    <pre>
       ##
       ##  fsl.openssh -- OSSP fsl configuration for openssh
       ##
  @@ -91,6 +87,6 @@
               )
           }
       };
  -    </p>
  +    </pre>
   </faq>
   </ol>
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr  3 10:16:24 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9DBD476AD0; Thu,  3 Apr 2003 10:16:23 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/fsl/ faq.wml
Message-Id: <20030403081623.9DBD476AD0@mail.ossp.org>
Date: Thu,  3 Apr 2003 10:16:23 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-web                         Date:   03-Apr-2003 10:16:23
  Branch: HEAD                             Handle: 2003040309162200

  Modified files:
    ossp-web/pkg/lib/fsl    faq.wml

  Log:
    add postfix example to syslog-fsl; add static-fsl; indentation

  Summary:
    Revision    Changes     Path
    1.3         +54 -27     ossp-web/pkg/lib/fsl/faq.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/fsl/faq.wml
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 faq.wml
  --- ossp-web/pkg/lib/fsl/faq.wml	24 Mar 2003 19:44:31 -0000	1.2
  +++ ossp-web/pkg/lib/fsl/faq.wml	3 Apr 2003 08:16:22 -0000	1.3
  @@ -36,17 +36,17 @@
   <faq id="syslog-debug"
        title="I want fsl to forward to syslog. How can i find out if syslog.conf(5) is correct?">
       <pre>
  -       $ logger -p mail.info "message"
  -       $ tail /var/log/maillog
  -       Mar 24 17:01:36 host user: message 
  +        $ logger -p mail.info "message"
  +        $ tail /var/log/maillog
  +        Mar 24 17:01:36 host user: message 
       </pre>
   </faq>
   
   <faq id="syslog-l2spec-local"
        title="I want fsl to forward to syslog. Which l2spec logs to syslogd locally?">
       <pre>
  -       $ echo "from l2, loc" \
  -       | fsl-l2tool 'syslog(facility=mail, ident=info, target="local")'
  +        $ echo "from l2, loc" \
  +        | fsl-l2tool 'syslog(facility=mail, ident=info, target="local")'
       </pre>
   </faq>
   
  @@ -58,35 +58,62 @@
       certain order of the remotehost, remoteport an target
       keywords, see <a href="http://cvs.ossp.org/chngview?cn=3313">CVS</a>.
        <pre>
  -     $ echo "from l2, net" \
  -     | fsl-l2tool 'syslog(facility=mail, ident=info, 
  -                          remotehost="127.0.0.1", remoteport="514", target="remote")'
  -
  +        $ echo "from l2, net" \
  +        | fsl-l2tool 'syslog(facility=mail, 
  +                             ident=info, 
  +                             remotehost="127.0.0.1", 
  +                             remoteport="514", 
  +                             target="remote"
  +                             )'
        </pre>
   </faq>
   
   <faq id="syslog-fsl"
        title="I want fsl to forward to syslog. Which fsl config logs to syslogd remotely?">
       <pre>
  -    ##
  -    ##  fsl.openssh -- OSSP fsl configuration for openssh
  -    ##
  -
  -    ident (ssh(d|-.+)?|scp|sftp(-server)?)/.+ q{
  -        prefix(
  -            prefix="%b %d %H:%M:%S %N <%L> $1[%P]: "
  -        ) 
  -        -> {
  -            debug: file(
  -                path="/usr/opkg/var/openssh/sshd.log",
  -                append=1, perm=0644
  -            );
  -            debug: syslog(
  -                facility=mail, ident=info,
  -                remotehost="127.0.0.1", remoteport="514", target="remote"
  +        ##
  +        ##  fsl.openssh -- OSSP fsl configuration for openssh
  +        ##
  +        ident (ssh(d|-.+)?|scp|sftp(-server)?)/.+ q{
  +            prefix(
  +                prefix="%b %d %H:%M:%S %N <%L> $1[%P]: "
  +            ) 
  +            -> {
  +                debug: file(
  +                    path="/usr/opkg/var/openssh/sshd.log",
  +                    append=1, perm=0644
  +                );
  +                debug: syslog(
  +                    facility=mail, ident=info,
  +                    remotehost="127.0.0.1", remoteport="514", target="remote"
  +                )
  +            }
  +        };
  +        ##
  +        ##  fsl.postfix -- OSSP fsl configuration for Postfix
  +        ##
  +        ident (postfix/.+)/.+ q{
  +            prefix(
  +                prefix="%b %d %H:%M:%S %N <%L> $1[%P]: "
               )
  -        }
  -    };
  +            -> {
  +                debug: syslog(
  +                        facility=mail,
  +                            ident=postfix,
  +                            remotehost="127.0.0.1",
  +                            remoteport="514",
  +                            target="remote"
  +                )
  +            }
  +        };
       </pre>
   </faq>
  +
  +<faq id="static-fsl"
  +</faq>
  +     title="How can i find out if a statically linked program is using fsl?">
  +    <pre>
  +        $ strings /cw12/sbin/postfix | grep '@(#)OSSP fsl'
  +        @(#)OSSP fsl 1.0.8 (13-Feb-2003)
  +    </pre>
   </ol>
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr  3 10:47:33 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 797F576AC5; Thu,  3 Apr 2003 10:47:33 +0200 (CEST)
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/fsl/ faq.wml
Message-Id: <20030403084733.797F576AC5@mail.ossp.org>
Date: Thu,  3 Apr 2003 10:47:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   OSSP Project Master
  Root:   /e/ossp/cvs                      Email:  ossp@ossp.org
  Module: ossp-web                         Date:   03-Apr-2003 10:47:33
  Branch: HEAD                             Handle: 2003040309473200

  Modified files:
    ossp-web/pkg/lib/fsl    faq.wml

  Log:
    relocated faq tag to correct position

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-web/pkg/lib/fsl/faq.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/fsl/faq.wml
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 faq.wml
  --- ossp-web/pkg/lib/fsl/faq.wml	3 Apr 2003 08:16:22 -0000	1.3
  +++ ossp-web/pkg/lib/fsl/faq.wml	3 Apr 2003 08:47:32 -0000	1.4
  @@ -110,10 +110,10 @@
   </faq>
   
   <faq id="static-fsl"
  -</faq>
        title="How can i find out if a statically linked program is using fsl?">
       <pre>
           $ strings /cw12/sbin/postfix | grep '@(#)OSSP fsl'
           @(#)OSSP fsl 1.0.8 (13-Feb-2003)
       </pre>
  +</faq>
   </ol>
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr  3 14:05:17 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2DDD176ADC; Thu,  3 Apr 2003 14:05:17 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc.h rc_private.h rc_proc.c rc_script.c rc_se...
Message-Id: <20030403120517.2DDD176ADC@mail.ossp.org>
Date: Thu,  3 Apr 2003 14:05:17 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   03-Apr-2003 14:05:16
  Branch: HEAD                             Handle: 2003040313051402

  Modified files:
    ossp-pkg/rc             rc.h rc_private.h rc_proc.c rc_script.c rc_sect.c
                            rc_test.sh
    ossp-pkg/rc/rc_test     rc.dhcpd

  Log:
    Bring rc back to life, corrected the processor and script object memory
    problems, and made small changes to test suite.

  Summary:
    Revision    Changes     Path
    1.39        +2  -1      ossp-pkg/rc/rc.h
    1.21        +1  -0      ossp-pkg/rc/rc_private.h
    1.18        +9  -13     ossp-pkg/rc/rc_proc.c
    1.12        +7  -5      ossp-pkg/rc/rc_script.c
    1.2         +18 -4      ossp-pkg/rc/rc_sect.c
    1.22        +23 -0      ossp-pkg/rc/rc_test.sh
    1.3         +1  -0      ossp-pkg/rc/rc_test/rc.dhcpd
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc.h
  ============================================================================
  $ cvs diff -u -r1.38 -r1.39 rc.h
  --- ossp-pkg/rc/rc.h	2 Aug 2002 16:38:09 -0000	1.38
  +++ ossp-pkg/rc/rc.h	3 Apr 2003 12:05:14 -0000	1.39
  @@ -111,7 +111,7 @@
   
   /* Script function prototypes */
   rc_script_t *scriptNew(void);
  -rc_return_t scriptAppend(rc_script_t *, char *, size_t);
  +rc_return_t scriptAppend(rc_script_t *, const char *, size_t);
   rc_section_t *scriptSection(rc_script_t *, const char *);
   rc_return_t scriptDump(rc_script_t *);
   const char *scriptTostring(rc_script_t *);
  @@ -122,6 +122,7 @@
   const int sectionGetpri(rc_section_t *);
   const int sectionGetuid(rc_section_t *);
   const char *sectionGetdata(rc_section_t *);
  +size_t sectionGetlen(rc_section_t *);
   rc_return_t sectionSetpri(rc_section_t *, int);
   rc_return_t sectionSetuid(rc_section_t *, int);
   rc_return_t sectionSetdata(rc_section_t *, const char *);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_private.h
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 rc_private.h
  --- ossp-pkg/rc/rc_private.h	2 Aug 2002 16:38:09 -0000	1.20
  +++ ossp-pkg/rc/rc_private.h	3 Apr 2003 12:05:14 -0000	1.21
  @@ -90,6 +90,7 @@
       int nPri;
       int nUid;
       char *szData;
  +    size_t Bytes;
   } rc_section_t;
   
   /* Processor class */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	2 Aug 2002 20:09:59 -0000	1.17
  +++ ossp-pkg/rc/rc_proc.c	3 Apr 2003 12:05:14 -0000	1.18
  @@ -152,25 +152,20 @@
   /* FIXME: Swap nested rcfile/section logic loops for section/rcfile ordering */
               for (i = 0; pRc->m_pAnal->m_pszSecs[i]; i++) { /* Iterate over */
                   /* Extract a section from the temp script, and append it */
  -                szSec = scriptSection(pTempscript, pRc->m_pAnal->m_pszSecs[i]);
  +                pSec = scriptSection(pTempscript, pRc->m_pAnal->m_pszSecs[i]);
   
  -                if (szSec) { /* Only call if the section lookup succeeds */
  -                    scriptAppend(ppParts[nIter], szSec, strlen(szSec));
  +                if (pSec) { /* Only call if the section lookup succeeds */
  +                    scriptAppend(ppParts[nIter], sectionGetdata(pSec),
  +                        sectionGetlen(pSec) - 1);
                       scriptAppend(pRc->m_pScript, "\n", sizeof(char));
                   }
  -/*                if (szSec) { -* Only call if the section lookup succeeds *-
  -                    scriptAppend(pRc->m_pScript, szSec, strlen(szSec));
  -                    scriptAppend(pRc->m_pScript, "\n", sizeof(char));
  -                }
  -                else if (configGetval(RC_DBG_VAL)) -* Only show if debug set *-
  +                else if (configGetval(RC_DBG_VAL)) /* Only show if debug set */
                       fprintf(stderr, "#Warning: Missing section '%s' in %s!\n",\
                           pRc->m_pAnal->m_pszSecs[i],\
  -                        pRc->m_pAnal->m_szRcs[nIter]);*/
  +                        pRc->m_pAnal->m_szRcs[nIter]);
   
  -                if (szSec) { /* Cleanup iterative section string */
  -                    free(szSec);
  -                    szSec = NULL;
  -                }
  +                if (pSec)   /* Cleanup iterative section string */
  +                    sectionDelete(pSec);
               }
           }
           catch(Except)
  @@ -192,6 +187,7 @@
               if (ppParts[nRept]) {
                   free(ppParts[nRept]);
                   ppParts[nRept] = NULL;
  +            }
           }
           free(ppParts);
           ppParts = NULL;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_script.c
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 rc_script.c
  --- ossp-pkg/rc/rc_script.c	2 Aug 2002 20:09:59 -0000	1.11
  +++ ossp-pkg/rc/rc_script.c	3 Apr 2003 12:05:14 -0000	1.12
  @@ -50,11 +50,11 @@
       return(pScript);
   }
   
  -/************************************************
  -* scriptAppend(rc_script_t *, char *, size_t)   *
  -* Append text to a script                       *
  -************************************************/
  -rc_return_t scriptAppend(rc_script_t *pScript, char *szInbuf, size_t Size)
  +/****************************************************
  +* scriptAppend(rc_script_t *, const char *, size_t) *
  +* Append text to a script                           *
  +****************************************************/
  +rc_return_t scriptAppend(rc_script_t *pScript, const char *szInbuf, size_t Size)
   {
       int nResize     = 0;
       void *pvRealloc = NULL;
  @@ -171,6 +171,8 @@
           piLabstart = piBlocend + *(pnVec + 2);
           nLabsize   = *(pnVec + 3) - *(pnVec + 2);
   
  +fprintf(stderr, "Substring we want ist %s!\n", kszSecname);
  +fprintf(stderr, "Compared with ist %s!\n", piLabstart);
           /* Test the substring. If it matches our label, make a new section */
           if (!strncmp(piLabstart, kszSecname, nLabsize)) {
               /* Handle the section body */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_sect.c
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 rc_sect.c
  --- ossp-pkg/rc/rc_sect.c	2 Aug 2002 16:38:09 -0000	1.1
  +++ ossp-pkg/rc/rc_sect.c	3 Apr 2003 12:05:14 -0000	1.2
  @@ -28,6 +28,7 @@
   */
   
   #include <string.h> /* For string copy and such data ops */
  +#include <stdlib.h> /* For memory ops */
   
   #include "rc.h"     /* Public Rc interface */
   
  @@ -42,8 +43,10 @@
   
       /* Among other things, they make great coffee at Cable & Wireless */
       /* This code would probably have more bugs if the coffee was not as good */
  -    pSec = (rc_section_t *)malloc(sizeof(rc_section_t));
  -    *pSec = NULL;
  +    pSec = (rc_section_t *)calloc(1, sizeof(rc_section_t));
  +
  +    if (!pSec)
  +        RC_THROW(RC_ERR_MEM);
   
       return(pSec);
   }
  @@ -82,6 +85,16 @@
       return(0); /* Not reached */
   }
   
  +size_t sectionGetlen(rc_section_t *pSec)
  +{ /* Data length of section, length of a script body of a particular section */
  +    if (pSec)
  +        return(pSec->Bytes);
  +    else
  +        RC_THROW(RC_ERR_USE);
  +
  +    return(0); /* Not reached */
  +}
  +
   /************************************************
   * sectionSetXXX(rc_section_t *)                 *
   * Accessor methods                              *
  @@ -109,13 +122,14 @@
   rc_return_t sectionSetdata(rc_section_t *pSec, const char *kszScript)
   { /* Data of section, this is the script body of the particular section */
       if (pSec) {
  +        pSec->Bytes = strlen(kszScript) + sizeof(char); /* Calculate size */
           if (pSec->szData) { /* The section data is already in use */
               free(pSec->szData);
  -            pSec->szData = malloc(strlen(kszScript) + sizeof(char));
  +            pSec->szData = malloc(pSec->szData);
               strcpy(pSec->szData, kszScript);
           }
           else { /* Set the data the usual way */
  -            pSec->szData = malloc(strlen(kszScript) + sizeof(char));
  +            pSec->szData = malloc(pSec->szData);
               strcpy(pSec->szData, kszScript);
           }
           return(RC_THROW(RC_OK));
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_test.sh
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 rc_test.sh
  --- ossp-pkg/rc/rc_test.sh	1 Aug 2002 13:25:32 -0000	1.21
  +++ ossp-pkg/rc/rc_test.sh	3 Apr 2003 12:05:14 -0000	1.22
  @@ -42,18 +42,24 @@
   #./rc -derv -L ./rc_test/rc.d/rc.%{RCFILE:s/^all$/*/} -c ./rc.conf -f ./rc_test/rcfuncs -t /tmp openssh stop sleep=4 start daily minsize=2097152
   
   # Test some long options, should fail for false combination usage
  +#clear
   echo; echo "./rc --verbose --silent --print --NameConfig config --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" uucp stop sleep=6 start"
   ./rc --verbose --silent --print --NameConfig config --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" uucp stop sleep=6 start
  +#read dummy;clear
   echo; echo "./rc --query myvar --silent --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" zebra bing bang"
   ./rc --query myvar --silent --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" zebra bing bang
  +#read dummy;clear
   echo; echo "./rc --conf ./rc.conf --ParseSectionDef \"^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>\" --locate ./rc_test/ --query this barf test"
   ./rc --conf ./rc.conf --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" --locate ./rc_test/ --query this barf test
  +#read dummy;clear
   
   # Test minimal set of long options, should succeed
   echo; echo "./rc --debug --version --ParseSectionDef \"^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>\" rsyncd nothing matters but the version"
   ./rc --debug --version --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" rsyncd nothing matters but the version
  +#read dummy;clear
   echo; echo "./rc --conf $RCBASE/rc.conf --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" --locate $RCBASE/rc.d:./rc_test:/etc/rc --query all barf test"
   ./rc --conf $RCBASE/rc.conf --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" --locate $RCBASE/rc.d:./rc_test:/etc/rc --query all barf test
  +#read dummy;clear
   
   # FIXME these cases are not handled yet by our configuration FIXME #
   #echo; echo "./rc --debug --version"
  @@ -70,52 +76,69 @@
   
   echo; echo "./rc --func rc_test/rcfuncs --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" --verbose openssh stop sleep=4 start"
   ./rc --func rc_test/rcfuncs --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" --verbose openssh stop sleep=4 start
  +#read dummy;clear
   echo; echo "./rc --func ./rc_test/rcfuncs --info --eval uucp restart"
   ./rc --func ./rc_test/rcfuncs --info --eval uucp restart
  +#read dummy;clear
   echo; echo "./rc --conf rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --ParseSectionDef \"^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>\" uucp start"
   ./rc --conf rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" uucp start
  +#read dummy;clear
   echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --ParseSectionDef \"^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>\" ntp sync"
   ./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" ntp sync
  +#read dummy;clear
   echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --silent --ParseSectionDef \"^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>\" ralf feed suppe"
   ./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --silent --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" ralf feed suppe
  +#read dummy;clear
   echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L rc_test --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" --tmp /tmp --silent samba search finish destroy"
   ./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L rc_test --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" --tmp /tmp --silent samba search finish destroy
  +#read dummy;clear
   
   echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" --tmp /tmp --silent all feed suppe"
   ./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" --tmp /tmp --silent all feed suppe
  +#read dummy;clear
   
   echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" --tmp /tmp --silent --debug all config barf gag"
   ./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" --tmp /tmp --silent --debug all config barf gag
  +#read dummy;clear
   
   echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" --tmp /tmp --silent --debug --eval all config start"
   ./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" --tmp /tmp --silent --debug --eval all config start
  +#read dummy;clear
   
   #echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" --tmp /tmp --silent --debug --exec all config start"
   #./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" --tmp /tmp --silent --debug --exec all config start
   
   echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --print --debug pam info"
   ./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --print --debug pam info
  +#read dummy;clear
   
   echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --debug apache config start"
   ./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --debug apache config start
  +#read dummy;clear
   
   echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef \"^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>\" --tmp /tmp --silent --debug all config start"
   ./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" --tmp /tmp --silent --debug all config start
  +#read dummy;clear
   
   echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef \"^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>\" --tmp /tmp --silent --debug pam info"
   ./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" --tmp /tmp --silent --debug pam info
  +#read dummy;clear
   
   echo; echo "./rc --conf ./rc_test/myrc.conf --func $RCBASE/rc.func -L $RCBASE/rc.d/ --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" --tmp /tmp --silent --debug dhcpd start"
   ./rc --conf ./rc_test/myrc.conf --func $RCBASE/rc.func -L $RCBASE/rc.d/ --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" --tmp /tmp --silent --debug dhcpd start
  +#read dummy;clear
   
   echo; echo "./rc --func ./rc_test/rcfuncs --exec --ParseSectionDef \"^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>\" -L ./rc_test pam autre"
   ./rc --func ./rc_test/rcfuncs --exec --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" -L ./rc_test pam autre
  +#read dummy;clear
   
   echo; echo "./rc --func ./rc_test/rcfuncs -L ./rc_test/ dhcpd stop"
   ./rc --func ./rc_test/rcfuncs -L ./rc_test/ dhcpd stop
  +#read dummy;clear
   
   echo; echo "./rc --exec --func ./rc_test/rcfuncs -L ./rc_test/ dhcpd gotest"
   ./rc --exec --func ./rc_test/rcfuncs -L ./rc_test/ dhcpd gotest
  +#read dummy;clear
   
   # Next milestone
   #RequireOwner
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_test/rc.dhcpd
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 rc.dhcpd
  --- ossp-pkg/rc/rc_test/rc.dhcpd	1 Aug 2002 14:31:39 -0000	1.2
  +++ ossp-pkg/rc/rc_test/rc.dhcpd	3 Apr 2003 12:05:16 -0000	1.3
  @@ -11,6 +11,7 @@
       /sw/sbin/dhcpd
   
   %gotest
  +    echo "Doing gotest section in file rc.dhcpd"
       ping -a -c 4 dt1.dev.de.cw.net
       curl -s ftp://ftp.openpkg.org/current/SRC/ | grep openssl
       date
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr  3 20:09:06 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8872C76AC0; Thu,  3 Apr 2003 20:09:06 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog THANKS configure.ac
Message-Id: <20030403180906.8872C76AC0@mail.ossp.org>
Date: Thu,  3 Apr 2003 20:09:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Apr-2003 20:09:06
  Branch: HEAD                             Handle: 2003040319090500

  Modified files:
    ossp-pkg/pth            ChangeLog THANKS configure.ac

  Log:
    Fixed implementation so that --enable-pthread now correctly
    implies --enable-syscall-soft.
    
    Discovered by: Steve Alstrin <Steve.Alstrin@NetIQ.com>

  Summary:
    Revision    Changes     Path
    1.607       +4  -0      ossp-pkg/pth/ChangeLog
    1.92        +1  -0      ossp-pkg/pth/THANKS
    1.11        +1  -0      ossp-pkg/pth/configure.ac
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.606 -r1.607 ChangeLog
  --- ossp-pkg/pth/ChangeLog	22 Mar 2003 20:28:42 -0000	1.606
  +++ ossp-pkg/pth/ChangeLog	3 Apr 2003 18:09:05 -0000	1.607
  @@ -21,6 +21,10 @@
                     
     Changes between 2.0.0 and 2.0.1 (17-Feb-2003 to xx-XXX-2003)
   
  +   *) Fixed implementation so that --enable-pthread now correctly
  +      implies --enable-syscall-soft.
  +      [Steve Alstrin <Steve.Alstrin@NetIQ.com>, Ralf S. Engelschall]
  +
      *) Replace some 0 by more politically correct NULL in pth_string.c
         [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/THANKS
  ============================================================================
  $ cvs diff -u -r1.91 -r1.92 THANKS
  --- ossp-pkg/pth/THANKS	29 Nov 2002 17:58:18 -0000	1.91
  +++ ossp-pkg/pth/THANKS	3 Apr 2003 18:09:05 -0000	1.92
  @@ -12,6 +12,7 @@
     Credit has to be given to the following people who contributed ideas,
     bugfixes, hints, gave platform feedback, etc. (in alphabetical order):
   
  +    o  Steve Alstrin               <Steve.Alstrin@NetIQ.com>
       o  Jens Andersen               <Jens@trw.nl>
       o  J.David Anglin              <dave.anglin@nrc.ca>
       o  Dmitry A. Antipov           <boss@wraith.rosnet.ru>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/configure.ac
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 configure.ac
  --- ossp-pkg/pth/configure.ac	1 Jan 2003 15:49:11 -0000	1.10
  +++ ossp-pkg/pth/configure.ac	3 Apr 2003 18:09:05 -0000	1.11
  @@ -588,6 +588,7 @@
       UNINSTALL_PTHREAD=uninstall-pthread
       TEST_PTHREAD=test_pthread
       enable_syscall_soft=yes
  +    PTH_SYSCALL_SOFT=1
       AC_HAVE_HEADERS(pthread.h)
       ac_warn=no
       if test ".$ac_cv_header_pthread_h" = .yes; then
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr  4 18:36:02 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 445F076AE0; Fri,  4 Apr 2003 18:36:02 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog sh.mdate sh.rotate sh.slo
Message-Id: <20030404163602.445F076AE0@mail.ossp.org>
Date: Fri,  4 Apr 2003 18:36:02 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Apr-2003 18:36:02
  Branch: HEAD                             Handle: 2003040417360001

  Modified files:
    ossp-pkg/shtool         ChangeLog sh.mdate sh.rotate sh.slo

  Log:
    1. Make sure "shtool rotate" does still correctly determine the size of
    a file if its filename contains whitespaces.
    
    2. Consistently use "/bin/ls" instead of "ls" internally to avoid
    problems with other "ls" in PATH while still not becoming unportable
    (because "/bin/ls" is really on every reasonable Unix-style platform the
    "ls" command).

  Summary:
    Revision    Changes     Path
    1.184       +12 -1      ossp-pkg/shtool/ChangeLog
    1.13        +3  -3      ossp-pkg/shtool/sh.mdate
    1.6         +3  -2      ossp-pkg/shtool/sh.rotate
    1.20        +1  -1      ossp-pkg/shtool/sh.slo
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.183 -r1.184 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	22 Feb 2003 12:27:20 -0000	1.183
  +++ ossp-pkg/shtool/ChangeLog	4 Apr 2003 16:36:00 -0000	1.184
  @@ -9,7 +9,18 @@
   
    ChangeLog
   
  - Changes between 1.6.2 and 2.0b0 (02-Nov-2002 to xx-Feb-2003):
  + Changes between 1.6.2 and 2.0b0 (02-Nov-2002 to xx-Apr-2003):
  +
  +   *) Make sure "shtool rotate" does still correctly determine
  +      the size of a file if its filename contains whitespaces.
  +      [Ralf S. Engelschall <rse@engelschall.com>,
  +       Bill Campbell <bill@celestial.com>]
  +
  +   *) Consistently use "/bin/ls" instead of "ls" internally to avoid
  +      problems with other "ls" in PATH while still not becoming
  +      unportable (because "/bin/ls" is really on every reasonable
  +      Unix-style platform the "ls" command).
  +      [Ralf S. Engelschall <rse@engelschall.com>]
   
      *) Enhance %u, %U, %g and %G expansions of "shtool echo -e"
         by also trying the Solaris/Linux "getent" command.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.mdate
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 sh.mdate
  --- ossp-pkg/shtool/sh.mdate	11 Feb 2003 12:56:40 -0000	1.12
  +++ ossp-pkg/shtool/sh.mdate	4 Apr 2003 16:36:01 -0000	1.13
  @@ -53,10 +53,10 @@
   LC_TIME=C; export LC_TIME
   
   #   get the extended ls output of the file or directory.
  -if ls -L /dev/null >/dev/null 2>&1; then
  -    set - x`ls -L -l -d $fod`
  +if /bin/ls -L /dev/null >/dev/null 2>&1; then
  +    set - x`/bin/ls -L -l -d $fod`
   else
  -    set - x`ls -l -d $fod`
  +    set - x`/bin/ls -l -d $fod`
   fi
   
   #   The month is at least the fourth argument
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.rotate
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 sh.rotate
  --- ossp-pkg/shtool/sh.rotate	11 Feb 2003 13:00:50 -0000	1.5
  +++ ossp-pkg/shtool/sh.rotate	4 Apr 2003 16:36:01 -0000	1.6
  @@ -182,8 +182,9 @@
       #   optionally take logfile size into account
       if [ ".$opt_s" != . ]; then
           #   determine size of logfile
  -        set -- `ls -l $ldir/$file | sed -e 's; -> .*$;;' -e 's;[ 	][ 	]*; ;g'`
  -        n=`expr $# - 4`
  +        set -- `/bin/ls -l "$ldir/$file" | sed -e "s;$ldir/$file;;" |\
  +                sed -e 's; -> .*$;;' -e 's;[ 	][ 	]*; ;g'`
  +        n=`expr $# - 3`
           eval "size=\`echo \${$n}\`"
   
           #   skip logfile if size is still too small
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.slo
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 sh.slo
  --- ossp-pkg/shtool/sh.slo	11 Feb 2003 13:00:50 -0000	1.19
  +++ ossp-pkg/shtool/sh.slo	4 Apr 2003 16:36:01 -0000	1.20
  @@ -91,7 +91,7 @@
   
           #    search the file
           OIFS3="$IFS"; IFS="$DIFS"
  -        for file in '' `cd $dir && ls lib${lib}.* 2>/dev/null`; do
  +        for file in '' `cd $dir && /bin/ls lib${lib}.* 2>/dev/null`; do
                [ ".$file" = . ] && continue
                case $file in
                    *.so|*.so.[0-9]*|*.sl|*.sl.[0-9]* )
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr  4 18:36:34 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2E4FD76AF6; Fri,  4 Apr 2003 18:36:34 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ THANKS
Message-Id: <20030404163634.2E4FD76AF6@mail.ossp.org>
Date: Fri,  4 Apr 2003 18:36:34 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Apr-2003 18:36:34
  Branch: HEAD                             Handle: 2003040417363300

  Modified files:
    ossp-pkg/shtool         THANKS

  Log:
    give proper credit

  Summary:
    Revision    Changes     Path
    1.28        +1  -0      ossp-pkg/shtool/THANKS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/THANKS
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 THANKS
  --- ossp-pkg/shtool/THANKS	16 Dec 2002 13:50:20 -0000	1.27
  +++ ossp-pkg/shtool/THANKS	4 Apr 2003 16:36:33 -0000	1.28
  @@ -14,6 +14,7 @@
   
     o Denis Barbier            <barbier@imacs.polytechnique.fr>
     o Marcus Boerger           <marcus.boerger@t-online.de>
  +  o Bill Campbell            <bill@celestial.com>
     o Alan Eldridge            <alane@geeksrus.net>
     o Michael van Elst         <mlelstv@serpens.de>
     o Scott R. Every           <scott@emji.net>
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr  4 18:38:07 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 859ED76AE6; Fri,  4 Apr 2003 18:38:07 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ README VERSION
Message-Id: <20030404163807.859ED76AE6@mail.ossp.org>
Date: Fri,  4 Apr 2003 18:38:07 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Apr-2003 18:38:07
  Branch: HEAD                             Handle: 2003040417380600

  Modified files:
    ossp-pkg/shtool         README VERSION

  Log:
    bump date

  Summary:
    Revision    Changes     Path
    1.92        +1  -1      ossp-pkg/shtool/README
    1.69        +1  -1      ossp-pkg/shtool/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/README
  ============================================================================
  $ cvs diff -u -r1.91 -r1.92 README
  --- ossp-pkg/shtool/README	22 Feb 2003 12:32:08 -0000	1.91
  +++ ossp-pkg/shtool/README	4 Apr 2003 16:38:06 -0000	1.92
  @@ -10,7 +10,7 @@
     http://www.gnu.org/software/shtool/
     ftp://ftp.gnu.org/gnu/shtool/
   
  -  Version 2.0b0 (22-Feb-2003)
  +  Version 2.0b0 (04-Apr-2003)
   
     The GNU shtool program is a compilation of small but very stable and
     portable shell scripts into a single shell tool. All ingredients
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/VERSION
  ============================================================================
  $ cvs diff -u -r1.68 -r1.69 VERSION
  --- ossp-pkg/shtool/VERSION	22 Feb 2003 12:32:08 -0000	1.68
  +++ ossp-pkg/shtool/VERSION	4 Apr 2003 16:38:06 -0000	1.69
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for GNU shtool (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is GNU shtool, Version 2.0b0 (22-Feb-2003)
  +  This is GNU shtool, Version 2.0b0 (04-Apr-2003)
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Apr 15 09:45:36 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0693976B2B; Tue, 15 Apr 2003 09:45:35 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ configure.ac
Message-Id: <20030415074535.0693976B2B@mail.ossp.org>
Date: Tue, 15 Apr 2003 09:45:35 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Apr-2003 09:45:35
  Branch: HEAD                             Handle: 2003041508453500

  Modified files:
    ossp-pkg/pth            configure.ac

  Log:
    fix style

  Summary:
    Revision    Changes     Path
    1.12        +1  -1      ossp-pkg/pth/configure.ac
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/configure.ac
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 configure.ac
  --- ossp-pkg/pth/configure.ac	3 Apr 2003 18:09:05 -0000	1.11
  +++ ossp-pkg/pth/configure.ac	15 Apr 2003 07:45:35 -0000	1.12
  @@ -194,7 +194,7 @@
   
   dnl # at least the test programs need some socket stuff
   AC_CHECK_LIB(nsl, gethostname)
  -if test ".`echo $LIBS | grep nsl`" = . ;then
  +if test ".`echo $LIBS | grep nsl`" = .; then
       AC_CHECK_LIB(nsl, gethostbyname)
   fi
   AC_CHECK_LIB(socket, accept)
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr 17 13:11:59 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 15EF376B26; Thu, 17 Apr 2003 13:11:58 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/fsl/ faq.wml
Message-Id: <20030417111158.15EF376B26@mail.ossp.org>
Date: Thu, 17 Apr 2003 13:11:58 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-web                         Date:   17-Apr-2003 13:11:58
  Branch: HEAD                             Handle: 2003041712115800

  Modified files:
    ossp-web/pkg/lib/fsl    faq.wml

  Log:
    prefer what(1) over strings(1)

  Summary:
    Revision    Changes     Path
    1.5         +6  -1      ossp-web/pkg/lib/fsl/faq.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/fsl/faq.wml
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 faq.wml
  --- ossp-web/pkg/lib/fsl/faq.wml	3 Apr 2003 08:47:32 -0000	1.4
  +++ ossp-web/pkg/lib/fsl/faq.wml	17 Apr 2003 11:11:58 -0000	1.5
  @@ -112,7 +112,12 @@
   <faq id="static-fsl"
        title="How can i find out if a statically linked program is using fsl?">
       <pre>
  -        $ strings /cw12/sbin/postfix | grep '@(#)OSSP fsl'
  +        $ what <i>/cw12/sbin/postfix</i> | grep 'OSSP fsl'
  +            OSSP fsl 1.0.8 (13-Feb-2003)
  +    </pre>
  +    If you do not have a <tt>what</tt> command use <tt>strings</tt>
  +    <pre>
  +        $ strings <i>/cw12/sbin/postfix</i> | grep '@(#)OSSP fsl'
           @(#)OSSP fsl 1.0.8 (13-Feb-2003)
       </pre>
   </faq>
  @@ .

From ossp-cvs-owner@ossp.org  Tue Apr 29 10:01:05 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 84EC676CC2; Tue, 29 Apr 2003 10:01:03 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog THANKS sh.rotate sh.slo
Message-Id: <20030429080103.84EC676CC2@mail.ossp.org>
Date: Tue, 29 Apr 2003 10:01:03 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Apr-2003 10:01:03
  Branch: HEAD                             Handle: 2003042909010001

  Modified files:
    ossp-pkg/shtool         ChangeLog THANKS sh.rotate sh.slo

  Log:
    Use "env -i /bin/ls" construct in "shtool rotate" and "shtool slo"
    commands to make sure we have a consistent output not adjusted by
    some environment variables like LANG, LS_COLORS, LS_OPTIONS, etc.
    
    Hint by: Manuel Hendel <manuel@hendel.net>

  Summary:
    Revision    Changes     Path
    1.185       +6  -0      ossp-pkg/shtool/ChangeLog
    1.29        +1  -0      ossp-pkg/shtool/THANKS
    1.7         +1  -1      ossp-pkg/shtool/sh.rotate
    1.21        +1  -1      ossp-pkg/shtool/sh.slo
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.184 -r1.185 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	4 Apr 2003 16:36:00 -0000	1.184
  +++ ossp-pkg/shtool/ChangeLog	29 Apr 2003 08:01:00 -0000	1.185
  @@ -11,6 +11,12 @@
   
    Changes between 1.6.2 and 2.0b0 (02-Nov-2002 to xx-Apr-2003):
   
  +   *) Use "env -i /bin/ls" construct in "shtool rotate" and "shtool slo"
  +      commands to make sure we have a consistent output not adjusted by
  +      some environment variables like LANG, LS_COLORS, LS_OPTIONS, etc.
  +      [Ralf S. Engelschall <rse@engelschall.com>,
  +       Manuel Hendel <manuel@hendel.net>]
  +
      *) Make sure "shtool rotate" does still correctly determine
         the size of a file if its filename contains whitespaces.
         [Ralf S. Engelschall <rse@engelschall.com>,
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/THANKS
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 THANKS
  --- ossp-pkg/shtool/THANKS	4 Apr 2003 16:36:33 -0000	1.28
  +++ ossp-pkg/shtool/THANKS	29 Apr 2003 08:01:00 -0000	1.29
  @@ -21,6 +21,7 @@
     o Daniel Richard G.        <straker@MIT.EDU>
     o Dean Gaudet              <dgaudet@arctic.org>
     o Lars Hecking             <lhecking@nmrc.ucc.ie>
  +  o Manuel Hendel            <manuel@hendel.net>
     o Jim Jagielski            <jim@jaguNET.com>
     o Martin Kraemer           <Martin.Kraemer@MchP.Siemens.De>
     o Thomas Linden            <tom@izb.net>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.rotate
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 sh.rotate
  --- ossp-pkg/shtool/sh.rotate	4 Apr 2003 16:36:01 -0000	1.6
  +++ ossp-pkg/shtool/sh.rotate	29 Apr 2003 08:01:01 -0000	1.7
  @@ -182,7 +182,7 @@
       #   optionally take logfile size into account
       if [ ".$opt_s" != . ]; then
           #   determine size of logfile
  -        set -- `/bin/ls -l "$ldir/$file" | sed -e "s;$ldir/$file;;" |\
  +        set -- `env -i /bin/ls -l "$ldir/$file" | sed -e "s;$ldir/$file;;" |\
                   sed -e 's; -> .*$;;' -e 's;[ 	][ 	]*; ;g'`
           n=`expr $# - 3`
           eval "size=\`echo \${$n}\`"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.slo
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 sh.slo
  --- ossp-pkg/shtool/sh.slo	4 Apr 2003 16:36:01 -0000	1.20
  +++ ossp-pkg/shtool/sh.slo	29 Apr 2003 08:01:01 -0000	1.21
  @@ -91,7 +91,7 @@
   
           #    search the file
           OIFS3="$IFS"; IFS="$DIFS"
  -        for file in '' `cd $dir && /bin/ls lib${lib}.* 2>/dev/null`; do
  +        for file in '' `cd $dir && env -i /bin/ls lib${lib}.* 2>/dev/null`; do
                [ ".$file" = . ] && continue
                case $file in
                    *.so|*.so.[0-9]*|*.sl|*.sl.[0-9]* )
  @@ .

From ossp-cvs-owner@ossp.org  Tue Apr 29 10:01:42 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 018B276CC5; Tue, 29 Apr 2003 10:01:41 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ README VERSION
Message-Id: <20030429080141.018B276CC5@mail.ossp.org>
Date: Tue, 29 Apr 2003 10:01:41 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Apr-2003 10:01:41
  Branch: HEAD                             Handle: 2003042909014000

  Modified files:
    ossp-pkg/shtool         README VERSION

  Log:
    update version

  Summary:
    Revision    Changes     Path
    1.93        +1  -1      ossp-pkg/shtool/README
    1.70        +1  -1      ossp-pkg/shtool/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/README
  ============================================================================
  $ cvs diff -u -r1.92 -r1.93 README
  --- ossp-pkg/shtool/README	4 Apr 2003 16:38:06 -0000	1.92
  +++ ossp-pkg/shtool/README	29 Apr 2003 08:01:40 -0000	1.93
  @@ -10,7 +10,7 @@
     http://www.gnu.org/software/shtool/
     ftp://ftp.gnu.org/gnu/shtool/
   
  -  Version 2.0b0 (04-Apr-2003)
  +  Version 2.0b0 (29-Apr-2003)
   
     The GNU shtool program is a compilation of small but very stable and
     portable shell scripts into a single shell tool. All ingredients
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/VERSION
  ============================================================================
  $ cvs diff -u -r1.69 -r1.70 VERSION
  --- ossp-pkg/shtool/VERSION	4 Apr 2003 16:38:06 -0000	1.69
  +++ ossp-pkg/shtool/VERSION	29 Apr 2003 08:01:40 -0000	1.70
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for GNU shtool (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is GNU shtool, Version 2.0b0 (04-Apr-2003)
  +  This is GNU shtool, Version 2.0b0 (29-Apr-2003)
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat May  3 18:29:30 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8FFEE76607; Sat,  3 May 2003 18:29:30 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/com/ developers.wml
Message-Id: <20030503162930.8FFEE76607@mail.ossp.org>
Date: Sat,  3 May 2003 18:29:30 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   03-May-2003 18:29:30
  Branch: HEAD                             Handle: 2003050317292900

  Modified files:
    ossp-web/com            developers.wml

  Log:
    remove Peter

  Summary:
    Revision    Changes     Path
    1.6         +0  -1      ossp-web/com/developers.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/com/developers.wml
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 developers.wml
  --- ossp-web/com/developers.wml	17 Feb 2003 18:18:53 -0000	1.5
  +++ ossp-web/com/developers.wml	3 May 2003 16:29:29 -0000	1.6
  @@ -16,7 +16,6 @@
   <table cellspacing=0 cellpadding=0 border=0>
      <person "Ralf S. Engelschall" "rse@ossp.org" "developer, project leader">
      <person "Thomas Lotterer"     "thl@ossp.org" "developer">
  -   <person "Peter Smej"          "ps@ossp.org"  "developer">
      <person "Michael Schloh"      "ms@ossp.org"  "developer">
      <person "Michael van Elst"    "mlelstv@ossp.org" "developer">
   </table>
  @@ .

From ossp-cvs-owner@ossp.org  Fri May  9 11:50:15 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CBA4476CE7; Fri,  9 May 2003 11:50:14 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog README VERSION sh.mkln
Message-Id: <20030509095014.CBA4476CE7@mail.ossp.org>
Date: Fri,  9 May 2003 11:50:14 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-May-2003 11:50:14
  Branch: HEAD                             Handle: 2003050910501300

  Modified files:
    ossp-pkg/shtool         ChangeLog README VERSION sh.mkln

  Log:
    Fix calculation of effective source path in "shtool mkln" command
    for destination paths containing "/./" sequence and for source paths
    consisting of no directory parts at all.
    
    Discovered by: Michael Schloh v. Bennewitz <michael@schloh.com>

  Summary:
    Revision    Changes     Path
    1.186       +7  -1      ossp-pkg/shtool/ChangeLog
    1.94        +1  -1      ossp-pkg/shtool/README
    1.71        +1  -1      ossp-pkg/shtool/VERSION
    1.15        +8  -2      ossp-pkg/shtool/sh.mkln
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.185 -r1.186 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	29 Apr 2003 08:01:00 -0000	1.185
  +++ ossp-pkg/shtool/ChangeLog	9 May 2003 09:50:13 -0000	1.186
  @@ -9,7 +9,13 @@
   
    ChangeLog
   
  - Changes between 1.6.2 and 2.0b0 (02-Nov-2002 to xx-Apr-2003):
  + Changes between 1.6.2 and 2.0b0 (02-Nov-2002 to xx-May-2003):
  +
  +   *) Fix calculation of effective source path in "shtool mkln" command
  +      for destination paths containing "/./" sequence and for source paths
  +      consisting of no directory parts at all.
  +      [Ralf S. Engelschall <rse@engelschall.com>,
  +       Michael Schloh v. Bennewitz <michael@schloh.com>]
   
      *) Use "env -i /bin/ls" construct in "shtool rotate" and "shtool slo"
         commands to make sure we have a consistent output not adjusted by
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/README
  ============================================================================
  $ cvs diff -u -r1.93 -r1.94 README
  --- ossp-pkg/shtool/README	29 Apr 2003 08:01:40 -0000	1.93
  +++ ossp-pkg/shtool/README	9 May 2003 09:50:13 -0000	1.94
  @@ -10,7 +10,7 @@
     http://www.gnu.org/software/shtool/
     ftp://ftp.gnu.org/gnu/shtool/
   
  -  Version 2.0b0 (29-Apr-2003)
  +  Version 2.0b0 (09-May-2003)
   
     The GNU shtool program is a compilation of small but very stable and
     portable shell scripts into a single shell tool. All ingredients
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/VERSION
  ============================================================================
  $ cvs diff -u -r1.70 -r1.71 VERSION
  --- ossp-pkg/shtool/VERSION	29 Apr 2003 08:01:40 -0000	1.70
  +++ ossp-pkg/shtool/VERSION	9 May 2003 09:50:13 -0000	1.71
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for GNU shtool (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is GNU shtool, Version 2.0b0 (29-Apr-2003)
  +  This is GNU shtool, Version 2.0b0 (09-May-2003)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.mkln
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 sh.mkln
  --- ossp-pkg/shtool/sh.mkln	11 Feb 2003 13:00:50 -0000	1.14
  +++ ossp-pkg/shtool/sh.mkln	9 May 2003 09:50:13 -0000	1.15
  @@ -30,6 +30,7 @@
   
   . ./sh.common
   
  +#   determine source(s) and destination
   args=$?
   srcs=""
   while [ $# -gt 1 ]; do
  @@ -94,7 +95,11 @@
       #   make sure the source is reachable from the destination
       if [ $dstisabs = 1 ]; then
           if [ $srcisabs = 0 ]; then
  -            if [ -d $srcdir ]; then
  +            if [ ".$srcdir" = . ]; then
  +                srcdir="`pwd | sed -e 's;/*$;;'`"
  +                srcisabs=1
  +                oneisabs=1
  +            elif [ -d $srcdir ]; then
                   srcdir="`cd $srcdir; pwd | sed -e 's;/*$;;'`"
                   srcisabs=1
                   oneisabs=1
  @@ -131,7 +136,8 @@
           pl="$dstdir/"
           OIFS="$IFS"; IFS='/'
           for pe in $pl; do
  -            [ ".$pe" = . ] && continue
  +            [ ".$pe" = .  ] && continue
  +            [ ".$pe" = .. ] && continue
               srcpre="../$srcpre"
           done
           IFS="$OIFS"
  @@ .

From ossp-cvs-owner@ossp.org  Fri May  9 11:51:19 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BBEE576CE7; Fri,  9 May 2003 11:51:19 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ THANKS
Message-Id: <20030509095119.BBEE576CE7@mail.ossp.org>
Date: Fri,  9 May 2003 11:51:19 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-May-2003 11:51:19
  Branch: HEAD                             Handle: 2003050910511900

  Modified files:
    ossp-pkg/shtool         THANKS

  Log:
    give credit here, too

  Summary:
    Revision    Changes     Path
    1.30        +1  -0      ossp-pkg/shtool/THANKS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/THANKS
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 THANKS
  --- ossp-pkg/shtool/THANKS	29 Apr 2003 08:01:00 -0000	1.29
  +++ ossp-pkg/shtool/THANKS	9 May 2003 09:51:19 -0000	1.30
  @@ -29,6 +29,7 @@
     o Liones                   <liones@myrealbox.com>
     o Markus F.X.J. Oberhumer  <markus.oberhumer@jk.uni-linz.ac.at>
     o Benjamin Saller          <case@appliedtheory.com>
  +  o Michael Schloh           <michael@schloh.com>
     o Christoph Schug          <chris@schug.net>
     o Sascha Schumann          <sascha@schumann.cx>
     o Yitzchak Scott-Thoennes  <sthoenna@efn.org>
  @@ .

From ossp-cvs-owner@ossp.org  Mon May 12 17:42:46 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 55C8976BFB; Mon, 12 May 2003 17:42:46 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_script.c
Message-Id: <20030512154246.55C8976BFB@mail.ossp.org>
Date: Mon, 12 May 2003 17:42:46 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   12-May-2003 17:42:46
  Branch: HEAD                             Handle: 2003051216424500

  Modified files:
    ossp-pkg/rc             rc_script.c

  Log:
    Temporarily remove debugging help, and align whitespace.

  Summary:
    Revision    Changes     Path
    1.13        +4  -4      ossp-pkg/rc/rc_script.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_script.c
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 rc_script.c
  --- ossp-pkg/rc/rc_script.c	3 Apr 2003 12:05:14 -0000	1.12
  +++ ossp-pkg/rc/rc_script.c	12 May 2003 15:42:45 -0000	1.13
  @@ -171,8 +171,8 @@
           piLabstart = piBlocend + *(pnVec + 2);
           nLabsize   = *(pnVec + 3) - *(pnVec + 2);
   
  -fprintf(stderr, "Substring we want ist %s!\n", kszSecname);
  -fprintf(stderr, "Compared with ist %s!\n", piLabstart);
  +/*fprintf(stderr, "Substring we want ist %s!\n", kszSecname);
  +fprintf(stderr, "Compared with ist %s!\n", piLabstart);*/
           /* Test the substring. If it matches our label, make a new section */
           if (!strncmp(piLabstart, kszSecname, nLabsize)) {
               /* Handle the section body */
  @@ -195,7 +195,7 @@
               else /* Fallback to default value */
                   pSec->nPri = RC_DEF_PRI;
   
  -fprintf(stderr, "nPri ist %d!\n", pSec->nPri);
  +/*fprintf(stderr, "nPri ist %d!\n", pSec->nPri);*/
               /* Handle the section userid   */
               return(pSec);   /* Section found, so return the text */
           }
  @@ -230,7 +230,7 @@
   }
   
   /************************************************
  -* scriptDump(rc_script_t *)                    *
  +* scriptDump(rc_script_t *)                     *
   * Print a script to standard out                *
   ************************************************/
   rc_return_t scriptDump(rc_script_t *pScript)
  @@ .

From ossp-cvs-owner@ossp.org  Mon May 12 17:43:33 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5E8EB76BFB; Mon, 12 May 2003 17:43:33 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_anal.c rc_proc.c
Message-Id: <20030512154333.5E8EB76BFB@mail.ossp.org>
Date: Mon, 12 May 2003 17:43:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   12-May-2003 17:43:33
  Branch: HEAD                             Handle: 2003051216433200

  Modified files:
    ossp-pkg/rc             rc_anal.c rc_proc.c

  Log:
    Bugfix the analyser and processor.

  Summary:
    Revision    Changes     Path
    1.12        +1  -0      ossp-pkg/rc/rc_anal.c
    1.19        +1  -1      ossp-pkg/rc/rc_proc.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_anal.c
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 rc_anal.c
  --- ossp-pkg/rc/rc_anal.c	2 Aug 2002 20:09:59 -0000	1.11
  +++ ossp-pkg/rc/rc_anal.c	12 May 2003 15:43:32 -0000	1.12
  @@ -67,6 +67,7 @@
               (*ppInst)->m_szRcs = malloc(sizeof(*((*ppInst)->m_szRcs)));
               *(*ppInst)->m_szRcs = strdup("rc."); /* FIXME: Remove hardcoded */
               strcat(*(*ppInst)->m_szRcs, kszName);
  +            (*ppInst)->m_nRcs = 1;            /* We handle just one rc file */
           }
           else { /* Wildcard rcfile indicates we must glob the locs directories */
               try {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	3 Apr 2003 12:05:14 -0000	1.18
  +++ ossp-pkg/rc/rc_proc.c	12 May 2003 15:43:32 -0000	1.19
  @@ -155,7 +155,7 @@
                   pSec = scriptSection(pTempscript, pRc->m_pAnal->m_pszSecs[i]);
   
                   if (pSec) { /* Only call if the section lookup succeeds */
  -                    scriptAppend(ppParts[nIter], sectionGetdata(pSec),
  +                    scriptAppend(pRc->m_pScript, sectionGetdata(pSec),
                           sectionGetlen(pSec) - 1);
                       scriptAppend(pRc->m_pScript, "\n", sizeof(char));
                   }
  @@ .

From ossp-cvs-owner@ossp.org  Mon May 12 18:17:48 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 52BCA76BEF; Mon, 12 May 2003 18:17:48 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_proc.c
Message-Id: <20030512161748.52BCA76BEF@mail.ossp.org>
Date: Mon, 12 May 2003 18:17:48 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   12-May-2003 18:17:48
  Branch: HEAD                             Handle: 2003051217174700

  Modified files:
    ossp-pkg/rc             rc_proc.c

  Log:
    Bug fix before starting again with user and priority parsing and exec
    efforts.

  Summary:
    Revision    Changes     Path
    1.20        +2  -2      ossp-pkg/rc/rc_proc.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	12 May 2003 15:43:32 -0000	1.19
  +++ ossp-pkg/rc/rc_proc.c	12 May 2003 16:17:47 -0000	1.20
  @@ -143,8 +143,8 @@
               /* Append config section if it exists */
               pSec = scriptSection(pTempscript, configGetval(RC_NCF_VAL));
               if (pSec) { /* Only operate if the section lookup succeeds */
  -                scriptAppend(ppParts[nIter], sectionGetdata(pSec), strlen(sectionGetdata(pSec)));
  -                scriptAppend(ppParts[nIter], "\n", sizeof(char));
  +                scriptAppend(pRc->m_pScript, sectionGetdata(pSec), strlen(sectionGetdata(pSec)));
  +                scriptAppend(pRc->m_pScript, "\n", sizeof(char));
                   sectionDelete(pSec);    /* Cleanup */
                   pSec = NULL;            /* Cleanup */
               }
  @@ .

From ossp-cvs-owner@ossp.org  Wed May 14 12:05:43 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0EBA576CDD; Wed, 14 May 2003 12:05:42 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ 00TODO
Message-Id: <20030514100542.0EBA576CDD@mail.ossp.org>
Date: Wed, 14 May 2003 12:05:42 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   14-May-2003 12:05:42
  Branch: HEAD                             Handle: 2003051411054100

  Modified files:
    ossp-pkg/rc             00TODO

  Log:
    Dave Dykstra noticed an inconsistency, details in ticket 152.

  Summary:
    Revision    Changes     Path
    1.38        +1  -0      ossp-pkg/rc/00TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/00TODO
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 00TODO
  --- ossp-pkg/rc/00TODO	2 Aug 2002 20:08:45 -0000	1.37
  +++ ossp-pkg/rc/00TODO	14 May 2003 10:05:41 -0000	1.38
  @@ -31,6 +31,7 @@
   
   Questions
     Should location regex specify a directory and prefix separately, or files*?
  +  Should we just parse %config of labels which have matching %<...> sections?
   
   Consider
     Nice to have feature for ex, a pEx->pObj->strErr(pEx->Value);
  @@ .

From ossp-cvs-owner@ossp.org  Wed May 14 18:36:30 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BD78F76C10; Wed, 14 May 2003 18:36:29 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc.h rc_private.h rc_proc.c rc_script.c rc_se...
Message-Id: <20030514163629.BD78F76C10@mail.ossp.org>
Date: Wed, 14 May 2003 18:36:29 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   14-May-2003 18:36:29
  Branch: HEAD                             Handle: 2003051417362800

  Modified files:
    ossp-pkg/rc             rc.h rc_private.h rc_proc.c rc_script.c rc_sect.c

  Log:
    Correctly use section accessors, split script to common and section vector
    objects, add sectionSetndata (with n length sections), and wrap script dump
    logic for NULL pointer safety.

  Summary:
    Revision    Changes     Path
    1.40        +3  -2      ossp-pkg/rc/rc.h
    1.22        +2  -1      ossp-pkg/rc/rc_private.h
    1.21        +46 -40     ossp-pkg/rc/rc_proc.c
    1.14        +13 -9      ossp-pkg/rc/rc_script.c
    1.3         +26 -5      ossp-pkg/rc/rc_sect.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc.h
  ============================================================================
  $ cvs diff -u -r1.39 -r1.40 rc.h
  --- ossp-pkg/rc/rc.h	3 Apr 2003 12:05:14 -0000	1.39
  +++ ossp-pkg/rc/rc.h	14 May 2003 16:36:28 -0000	1.40
  @@ -123,9 +123,10 @@
   const int sectionGetuid(rc_section_t *);
   const char *sectionGetdata(rc_section_t *);
   size_t sectionGetlen(rc_section_t *);
  -rc_return_t sectionSetpri(rc_section_t *, int);
  -rc_return_t sectionSetuid(rc_section_t *, int);
  +rc_return_t sectionSetpri(rc_section_t *, long);
  +rc_return_t sectionSetuid(rc_section_t *, long);
   rc_return_t sectionSetdata(rc_section_t *, const char *);
  +rc_return_t sectionSetndata(rc_section_t *, const char *, size_t);
   rc_return_t sectionDelete(rc_section_t *);
   
   /* Processor function prototypes */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_private.h
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 rc_private.h
  --- ossp-pkg/rc/rc_private.h	3 Apr 2003 12:05:14 -0000	1.21
  +++ ossp-pkg/rc/rc_private.h	14 May 2003 16:36:28 -0000	1.22
  @@ -96,7 +96,8 @@
   /* Processor class */
   typedef struct {
       rc_anal_t *m_pAnal;
  -    rc_script_t *m_pScript;
  +    rc_script_t *m_pScriptcom;
  +    rc_script_t **m_ppScriptvec;
   } rc_proc_t;
   
   #endif /* __OSSPRC_PRIVATE_H__ */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	12 May 2003 16:17:47 -0000	1.20
  +++ ossp-pkg/rc/rc_proc.c	14 May 2003 16:36:28 -0000	1.21
  @@ -45,12 +45,18 @@
   ************************************************/
   rc_proc_t *procNew(void)
   {
  +    int nIter = 0;
       rc_proc_t *pNewrc = NULL;
   
       pNewrc = malloc(sizeof(rc_proc_t));
       pNewrc->m_pAnal = analNew();        /* Construct a configuration analyser */
  -    pNewrc->m_pScript = scriptNew();    /* Construct a run-command script     */
       analParse(pNewrc->m_pAnal);         /* Preprocess the anal configuration  */
  +    pNewrc->m_pScriptcom = scriptNew(); /* Construct a run-command script     */
  +
  +    /* Logic needed for multiple run-command section combination with priorities */
  +    pNewrc->m_ppScriptvec = malloc(sizeof(rc_script_t *) * pNewrc->m_pAnal->m_nRcs);
  +    for (nIter = 0; nIter < pNewrc->m_pAnal->m_nRcs; nIter++)
  +        pNewrc->m_ppScriptvec[nIter] = scriptNew();
   
       return(pNewrc);
   }
  @@ -72,19 +78,17 @@
   ************************************************/
   rc_return_t procPopulate(rc_proc_t *pRc)
   {
  -    int i         = 0;
  -    int nFdrc     = 0;
  -    int nFdfunc   = 0;
  -    int nRet      = 0;
  -    int nRept     = 0;
  -    int nIter     = 0;
  +    int i       = 0;
  +    int nFdrc   = 0;
  +    int nFdfunc = 0;
  +    int nRet    = 0;
  +    int nIter   = 0;
       ex_t Except;
   
       char         *sBuf        = NULL;
       rc_section_t *pSec        = NULL;
       char         *szLocex     = NULL;
       rc_script_t  *pTempscript = NULL;
  -    rc_script_t  **ppParts    = NULL;
   
       assert(*pRc->m_pAnal->m_szRcs);
       sBuf = (char *)calloc(1, RC_READ_BUFSIZE);
  @@ -97,25 +101,20 @@
       }
   
       /* Stick on the starting shell id line */
  -    scriptAppend(pRc->m_pScript, "#! /bin/sh\n", strlen("#! /bin/sh\n"));
  +    scriptAppend(pRc->m_pScriptcom, "#! /bin/sh\n", strlen("#! /bin/sh\n"));
   
       /* Read the func file if it was opened successfully */
       /* We unfortunately make the assumption that 0 is an invalid filedesc */
       if (nFdfunc) {
           /* Read data from the func file */
           while ((nRet = read(nFdfunc, sBuf, RC_READ_BUFSIZE)) > 0) {
  -            scriptAppend(pRc->m_pScript, sBuf, nRet);
  +            scriptAppend(pRc->m_pScriptcom, sBuf, nRet);
           }
  -        scriptAppend(pRc->m_pScript, "\n", sizeof(char));
  +        scriptAppend(pRc->m_pScriptcom, "\n", sizeof(char));
           if (nRet == -1) /* Handle read errors */
               RC_THROW(RC_ERR_IO);
       }
   
  -    /* Logic needed for multiple section combination with priorities */
  -    ppParts = malloc(sizeof(rc_script_t *) * pRc->m_pAnal->m_nRcs);
  -    for (nRept = 0; nRept < pRc->m_pAnal->m_nRcs; nRept++)
  -        ppParts[nRept] = scriptNew();
  -
       /* Iteratively read possibly globbed rc files */
       for (nIter = 0; nIter < pRc->m_pAnal->m_nRcs; nIter++)
       {
  @@ -143,8 +142,8 @@
               /* Append config section if it exists */
               pSec = scriptSection(pTempscript, configGetval(RC_NCF_VAL));
               if (pSec) { /* Only operate if the section lookup succeeds */
  -                scriptAppend(pRc->m_pScript, sectionGetdata(pSec), strlen(sectionGetdata(pSec)));
  -                scriptAppend(pRc->m_pScript, "\n", sizeof(char));
  +                scriptAppend(pRc->m_pScriptcom, sectionGetdata(pSec), strlen(sectionGetdata(pSec)));
  +                scriptAppend(pRc->m_pScriptcom, "\n", sizeof(char));
                   sectionDelete(pSec);    /* Cleanup */
                   pSec = NULL;            /* Cleanup */
               }
  @@ -155,9 +154,9 @@
                   pSec = scriptSection(pTempscript, pRc->m_pAnal->m_pszSecs[i]);
   
                   if (pSec) { /* Only call if the section lookup succeeds */
  -                    scriptAppend(pRc->m_pScript, sectionGetdata(pSec),
  +                    scriptAppend(pRc->m_ppScriptvec[nIter], sectionGetdata(pSec),
                           sectionGetlen(pSec) - 1);
  -                    scriptAppend(pRc->m_pScript, "\n", sizeof(char));
  +                    scriptAppend(pRc->m_ppScriptvec[nIter], "\n", sizeof(char));
                   }
                   else if (configGetval(RC_DBG_VAL)) /* Only show if debug set */
                       fprintf(stderr, "#Warning: Missing section '%s' in %s!\n",\
  @@ -182,16 +181,6 @@
       close(nFdfunc);     /* Close Func file handle */
   
       /* Memory cleanups */
  -    if (ppParts) {
  -        for (nRept = pRc->m_pAnal->m_nRcs - 1; nRept >= 0 ; nRept--) {
  -            if (ppParts[nRept]) {
  -                free(ppParts[nRept]);
  -                ppParts[nRept] = NULL;
  -            }
  -        }
  -        free(ppParts);
  -        ppParts = NULL;
  -    }
       if (sBuf) {
           free(sBuf);
           sBuf = NULL;
  @@ -206,6 +195,7 @@
   ************************************************/
   rc_return_t procRun(rc_proc_t *pRc)
   {
  +    int   nIter = 0;
       char *pszVec[RC_EXEC_MAXARGS];
   
       /****************************************************/
  @@ -214,19 +204,24 @@
       /* Eval  - Print machine evaluatable format         */
       /* Print - Print human readable format              */
       /****************************************************/
  -    if (configGetval(RC_EVL_VAL))        /* Evaluate */
  +    if (configGetval(RC_EVL_VAL))                              /* Evaluate */
           fprintf(stderr, "Error: Evaluate is not implemented yet.\n"); /* FIX */
  -    else if (configGetval(RC_EXC_VAL)) { /* Execute  */
  +    else if (configGetval(RC_EXC_VAL)) {                       /* Execute  */
               pszVec[0] = "/bin/sh";
               pszVec[1] = "-c";
  -            pszVec[2] = (char *)scriptTostring(pRc->m_pScript);
  +            pszVec[2] = (char *)scriptTostring(pRc->m_pScriptcom);
               pszVec[3] = NULL;   /* Add a NULL to mark the end of the chain */
  -        if (execvp(*pszVec, pszVec) == -1)  /* launch                   */
  +        if (execvp(*pszVec, pszVec) == -1)                       /* launch */
               TRACE("Bad, execvp in child returned -1");
       }
  -    else if (configGetval(RC_PRN_VAL))   /* Print */
  -        scriptDump(pRc->m_pScript);
  -    else                                        /* Something is wrong here */
  +    else if (configGetval(RC_PRN_VAL)) {                         /* Print  */
  +        scriptDump(pRc->m_pScriptcom);
  +        for (nIter = 0; nIter < pRc->m_pAnal->m_nRcs; nIter++) {
  +            if (*pRc->m_ppScriptvec[nIter])
  +                scriptDump(pRc->m_ppScriptvec[nIter]);
  +        }
  +    }
  +    else /* Something is wrong here */
           return(RC_THROW(RC_ERR_INT));
   
       return(RC_THROW(RC_OK));
  @@ -238,9 +233,20 @@
   ************************************************/
   rc_return_t procDelete(rc_proc_t *pRc)
   {
  -    scriptDelete(pRc->m_pScript);   /* Destroy the script        */
  -    analDelete(pRc->m_pAnal);       /* Destroy the analyser      */
  -    free(pRc);                      /* Free the processor itself */
  +    int nIter = 0;
  +
  +    /* Destroy the script vector */
  +    for (nIter = pRc->m_pAnal->m_nRcs - 1; nIter >= 0 ; nIter--) {
  +        if (pRc->m_ppScriptvec[nIter]) {
  +            scriptDelete(pRc->m_ppScriptvec[nIter]);
  +            pRc->m_ppScriptvec[nIter] = NULL;
  +        }
  +    }
  +    free(pRc->m_ppScriptvec);
  +    pRc->m_ppScriptvec = NULL;
  +    scriptDelete(pRc->m_pScriptcom);    /* Destroy the script        */
  +    analDelete(pRc->m_pAnal);           /* Destroy the analyser      */
  +    free(pRc);                          /* Free the processor itself */
   
       return(RC_THROW(RC_OK));
   }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_script.c
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 rc_script.c
  --- ossp-pkg/rc/rc_script.c	12 May 2003 15:42:45 -0000	1.13
  +++ ossp-pkg/rc/rc_script.c	14 May 2003 16:36:28 -0000	1.14
  @@ -67,9 +67,8 @@
       }
   
       /* Short circuit in case of dumb noop call */
  -    if (Size == 0) {
  +    if (Size == 0)
           return(RC_THROW(RC_OK));
  -    }
   
       /* Add 2 to end of nResize to ensure that a \0 precedes any strings */
       nResize = (*pScript != NULL ? strlen(*pScript) : 0) + Size + 2;
  @@ -110,6 +109,8 @@
       char *piBlocend    = NULL; /* Misnomer used to control section looping */
       char *piStart      = NULL;
       char *piEnd        = NULL;
  +    long  nPri         = 0;
  +    long  nUid         = 0;
       int nOffset        = 0;
       int nFound         = 0;
       int nVecsize       = 0;
  @@ -179,9 +180,7 @@
               piStart   = piBlocend + *(pnVec + 6);
               piEnd     = piBlocend + *(pnVec + 7);
               pSec = sectionNew();
  -            pSec->szData = malloc(piEnd - piStart + sizeof(char));
  -            strncpy(pSec->szData, piStart, piEnd - piStart);
  -            *(pSec->szData + (piEnd - piStart)) = NULL; /* Terminate outgoing */
  +            sectionSetndata(pSec, piStart, piEnd - piStart);
   
               /* Handle the section priority */
               piStart = piBlocend + *(pnVec + 4);
  @@ -190,10 +189,11 @@
               piSubtemp = strnstr(piStart, RC_DEF_PRG, piEnd - piStart);
               if (piSubtemp) { /* Priority pattern found */
   /* FIXME: Remove the 1 in the following line! */
  -                pSec->nPri = strtol(piSubtemp + strlen(RC_DEF_PRG) + 1, (char **)NULL, 10);
  +                nPri = strtol(piSubtemp + strlen(RC_DEF_PRG) + 1, (char **)NULL, 10);
  +                sectionSetpri(pSec, nPri);
               }
               else /* Fallback to default value */
  -                pSec->nPri = RC_DEF_PRI;
  +                sectionSetpri(pSec, RC_DEF_PRI);
   
   /*fprintf(stderr, "nPri ist %d!\n", pSec->nPri);*/
               /* Handle the section userid   */
  @@ -237,8 +237,12 @@
   {
       /* Don't remove this! It encapsulates the script object, */
       /*                    which might not be a simple string */
  -    fprintf(stdout, "%s", *pScript);
  -    return(RC_THROW(RC_OK));
  +    if (pScript) {
  +        fprintf(stdout, "%s", *pScript);
  +        return(RC_THROW(RC_OK));
  +    }
  +    else
  +        return(RC_THROW(RC_ERR_USE));
   }
   
   /************************************************
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_sect.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 rc_sect.c
  --- ossp-pkg/rc/rc_sect.c	3 Apr 2003 12:05:14 -0000	1.2
  +++ ossp-pkg/rc/rc_sect.c	14 May 2003 16:36:28 -0000	1.3
  @@ -99,7 +99,7 @@
   * sectionSetXXX(rc_section_t *)                 *
   * Accessor methods                              *
   ************************************************/
  -rc_return_t sectionSetpri(rc_section_t *pSec, int nPriority)
  +rc_return_t sectionSetpri(rc_section_t *pSec, long nPriority)
   { /* Priority of section, used to order sections during exec|eval|print */
       if (pSec) {
           pSec->nPri = nPriority;
  @@ -109,7 +109,7 @@
       return(RC_THROW(RC_ERR_USE));
   }
   
  -rc_return_t sectionSetuid(rc_section_t *pSec, int nUserid)
  +rc_return_t sectionSetuid(rc_section_t *pSec, long nUserid)
   { /* Userid of section, used with setuid during exec or eval */
       if (pSec) {
           pSec->nUid = nUserid;
  @@ -122,15 +122,36 @@
   rc_return_t sectionSetdata(rc_section_t *pSec, const char *kszScript)
   { /* Data of section, this is the script body of the particular section */
       if (pSec) {
  -        pSec->Bytes = strlen(kszScript) + sizeof(char); /* Calculate size */
  +        pSec->Bytes = strlen(kszScript) * sizeof(char) + sizeof(char);
           if (pSec->szData) { /* The section data is already in use */
               free(pSec->szData);
  -            pSec->szData = malloc(pSec->szData);
  +            pSec->szData = malloc(pSec->Bytes);
               strcpy(pSec->szData, kszScript);
           }
           else { /* Set the data the usual way */
  -            pSec->szData = malloc(pSec->szData);
  +            pSec->szData = malloc(pSec->Bytes);
               strcpy(pSec->szData, kszScript);
  +        }
  +        return(RC_THROW(RC_OK));
  +    }
  +
  +    return(RC_THROW(RC_ERR_USE));
  +}
  +
  +rc_return_t sectionSetndata(rc_section_t *pSec, const char *kszScript, size_t Len)
  +{ /* Data of section, this is the script body of the particular section */
  +    if (pSec) {
  +        pSec->Bytes = Len * sizeof(char) + sizeof(char); /* Set size */
  +        if (pSec->szData) { /* The section data is already in use */
  +            free(pSec->szData);
  +            pSec->szData = malloc(pSec->Bytes);
  +            strncpy(pSec->szData, kszScript, Len);
  +            *(pSec->szData + Len) = NULL; /* Terminate outgoing */
  +        }
  +        else { /* Set the data the usual way */
  +            pSec->szData = malloc(pSec->Bytes);
  +            strncpy(pSec->szData, kszScript, Len);
  +            *(pSec->szData + Len) = NULL; /* Terminate outgoing */
           }
           return(RC_THROW(RC_OK));
       }
  @@ .

From ossp-cvs-owner@ossp.org  Wed May 14 21:38:25 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5254876C10; Wed, 14 May 2003 21:38:25 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ 00TODO ossp-pkg/rc/rc_test/ rc.ntp rc.zebra
Message-Id: <20030514193825.5254876C10@mail.ossp.org>
Date: Wed, 14 May 2003 21:38:25 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   14-May-2003 21:38:25
  Branch: HEAD                             Handle: 2003051420382301

  Modified files:
    ossp-pkg/rc             00TODO
    ossp-pkg/rc/rc_test     rc.ntp rc.zebra

  Log:
    Update and correct test suite, remember privilege issue.

  Summary:
    Revision    Changes     Path
    1.39        +1  -0      ossp-pkg/rc/00TODO
    1.2         +5  -5      ossp-pkg/rc/rc_test/rc.ntp
    1.2         +2  -0      ossp-pkg/rc/rc_test/rc.zebra
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/00TODO
  ============================================================================
  $ cvs diff -u -r1.38 -r1.39 00TODO
  --- ossp-pkg/rc/00TODO	14 May 2003 10:05:41 -0000	1.38
  +++ ossp-pkg/rc/00TODO	14 May 2003 19:38:23 -0000	1.39
  @@ -32,6 +32,7 @@
   Questions
     Should location regex specify a directory and prefix separately, or files*?
     Should we just parse %config of labels which have matching %<...> sections?
  +  Under which user/priority does the %config and %common sections run?
   
   Consider
     Nice to have feature for ex, a pEx->pObj->strErr(pEx->Value);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_test/rc.ntp
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 rc.ntp
  --- ossp-pkg/rc/rc_test/rc.ntp	5 Jul 2002 11:16:20 -0000	1.1
  +++ ossp-pkg/rc/rc_test/rc.ntp	14 May 2003 19:38:24 -0000	1.2
  @@ -2,9 +2,9 @@
   
   echo "Run commands NTP starting"
   
  -%start -p 200 -u root
  -    opServiceEnabled dhcpd || exit 0
  -    /sw/sbin/dhcpd >/dev/null 2>&1
  +%start -p 100 -u root
  +    opServiceEnabled ntp || exit 0
  +    /sw/sbin/ntp >/dev/null 2>&1
   
   %go
       ping -a -c 4 dt1.dev.de.cw.net
  @@ -12,8 +12,8 @@
       cat $0
   
   %stop -p 200 -u root
  -    opServiceEnabled dhcpd || exit 0
  -    kill -TERM `cat /sw/var/dhcpd/dhcpd.pid`
  +    opServiceEnabled ntp || exit 0
  +    kill -TERM `cat /sw/var/ntp/ntp.pid`
   
   echo "Run commands NTP finishing"
   echo
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_test/rc.zebra
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 rc.zebra
  --- ossp-pkg/rc/rc_test/rc.zebra	5 Jul 2002 11:16:20 -0000	1.1
  +++ ossp-pkg/rc/rc_test/rc.zebra	14 May 2003 19:38:24 -0000	1.2
  @@ -12,3 +12,5 @@
   echo "Run commands Zebra finishing"
   echo
   
  +%start -p120 -u ms
  +    echo "Otay, zebra in Umfolozi"
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 15 14:47:27 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 63DE876CF1; Thu, 15 May 2003 14:47:27 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/rc_test/ rc.samba rcfuncs
Message-Id: <20030515124727.63DE876CF1@mail.ossp.org>
Date: Thu, 15 May 2003 14:47:27 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   15-May-2003 14:47:27
  Branch: HEAD                             Handle: 2003051513472600

  Modified files:
    ossp-pkg/rc/rc_test     rc.samba rcfuncs

  Log:
    To test config combinations.

  Summary:
    Revision    Changes     Path
    1.2         +3  -1      ossp-pkg/rc/rc_test/rc.samba
    1.5         +0  -1      ossp-pkg/rc/rc_test/rcfuncs
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_test/rc.samba
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 rc.samba
  --- ossp-pkg/rc/rc_test/rc.samba	5 Jul 2002 11:16:20 -0000	1.1
  +++ ossp-pkg/rc/rc_test/rc.samba	15 May 2003 12:47:26 -0000	1.2
  @@ -2,6 +2,9 @@
   
   echo "Run commands Samba starting"
   
  +%config
  +    host aldi.de
  +
   %search
       whois cyvaned.com
   
  @@ -11,5 +14,4 @@
   %finish
       echo "Dun with everything"
       echo "Run commands Samba finishing"
  -echo
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_test/rcfuncs
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 rcfuncs
  --- ossp-pkg/rc/rc_test/rcfuncs	1 Aug 2002 08:55:05 -0000	1.4
  +++ ossp-pkg/rc/rc_test/rcfuncs	15 May 2003 12:47:26 -0000	1.5
  @@ -10,4 +10,3 @@
   
   echo "**** Funcfile ist fertig, rc gehts weiter ****"
   echo
  -
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 15 14:49:13 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0F88C76CF1; Thu, 15 May 2003 14:49:13 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc.h rc_anal.c rc_private.h rc_proc.c rc_sect...
Message-Id: <20030515124913.0F88C76CF1@mail.ossp.org>
Date: Thu, 15 May 2003 14:49:13 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   15-May-2003 14:49:12
  Branch: HEAD                             Handle: 2003051513491100

  Modified files:
    ossp-pkg/rc             rc.h rc_anal.c rc_private.h rc_proc.c rc_sect.c
                            rc_util.c

  Log:
    Add sectionCopy(), sectionDump(), and vectorCount(), and change the processor
    object's script vector to a section vector.

  Summary:
    Revision    Changes     Path
    1.41        +3  -0      ossp-pkg/rc/rc.h
    1.13        +1  -0      ossp-pkg/rc/rc_anal.c
    1.23        +2  -1      ossp-pkg/rc/rc_private.h
    1.22        +18 -21     ossp-pkg/rc/rc_proc.c
    1.4         +38 -0      ossp-pkg/rc/rc_sect.c
    1.6         +12 -0      ossp-pkg/rc/rc_util.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc.h
  ============================================================================
  $ cvs diff -u -r1.40 -r1.41 rc.h
  --- ossp-pkg/rc/rc.h	14 May 2003 16:36:28 -0000	1.40
  +++ ossp-pkg/rc/rc.h	15 May 2003 12:49:11 -0000	1.41
  @@ -119,6 +119,7 @@
   
   /* Section function prototypes */
   rc_section_t *sectionNew(void);
  +rc_section_t *sectionCopy(rc_section_t *);
   const int sectionGetpri(rc_section_t *);
   const int sectionGetuid(rc_section_t *);
   const char *sectionGetdata(rc_section_t *);
  @@ -127,6 +128,7 @@
   rc_return_t sectionSetuid(rc_section_t *, long);
   rc_return_t sectionSetdata(rc_section_t *, const char *);
   rc_return_t sectionSetndata(rc_section_t *, const char *, size_t);
  +rc_return_t sectionDump(rc_section_t *);
   rc_return_t sectionDelete(rc_section_t *);
   
   /* Processor function prototypes */
  @@ -143,6 +145,7 @@
   /* Utility (nonbounded) function prototypes */
   char *strErr(rc_return_t);
   char **vectorCopy(const char **);
  +short vectorCount(const char **);
   rc_return_t vectorDel(char **);
   
   /* Other function prototypes */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_anal.c
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 rc_anal.c
  --- ossp-pkg/rc/rc_anal.c	12 May 2003 15:43:32 -0000	1.12
  +++ ossp-pkg/rc/rc_anal.c	15 May 2003 12:49:11 -0000	1.13
  @@ -156,6 +156,7 @@
   
       ex_try {    /* Sections are a vector, so we must copy accordingly */
           (*ppInst)->m_pszSecs = vectorCopy(pkszVector);
  +        (*ppInst)->m_nSecs   = vectorCount(pkszVector);
       }
       ex_catch(Except) {
   TRACE("VectorCopy broke");
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_private.h
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 rc_private.h
  --- ossp-pkg/rc/rc_private.h	14 May 2003 16:36:28 -0000	1.22
  +++ ossp-pkg/rc/rc_private.h	15 May 2003 12:49:11 -0000	1.23
  @@ -75,6 +75,7 @@
   /* Analyser type */
   typedef struct {
       short m_nRcs;       /* How many rc files   */
  +    short m_nSecs;      /* How many sections   */
       char **m_szRcs;     /* Rc file names       */
       char *m_szTmp;      /* Temp file name      */
       char *m_szFuncs;    /* Function file names */
  @@ -97,7 +98,7 @@
   typedef struct {
       rc_anal_t *m_pAnal;
       rc_script_t *m_pScriptcom;
  -    rc_script_t **m_ppScriptvec;
  +    rc_section_t **m_ppSectvec;
   } rc_proc_t;
   
   #endif /* __OSSPRC_PRIVATE_H__ */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	14 May 2003 16:36:28 -0000	1.21
  +++ ossp-pkg/rc/rc_proc.c	15 May 2003 12:49:11 -0000	1.22
  @@ -45,7 +45,7 @@
   ************************************************/
   rc_proc_t *procNew(void)
   {
  -    int nIter = 0;
  +/*    int nIter = 0;*/
       rc_proc_t *pNewrc = NULL;
   
       pNewrc = malloc(sizeof(rc_proc_t));
  @@ -54,9 +54,10 @@
       pNewrc->m_pScriptcom = scriptNew(); /* Construct a run-command script     */
   
       /* Logic needed for multiple run-command section combination with priorities */
  -    pNewrc->m_ppScriptvec = malloc(sizeof(rc_script_t *) * pNewrc->m_pAnal->m_nRcs);
  -    for (nIter = 0; nIter < pNewrc->m_pAnal->m_nRcs; nIter++)
  -        pNewrc->m_ppScriptvec[nIter] = scriptNew();
  +    pNewrc->m_ppSectvec = calloc(pNewrc->m_pAnal->m_nRcs *\
  +        pNewrc->m_pAnal->m_nSecs, sizeof(rc_section_t *));
  +/*    for (nIter = 0; nIter < pNewrc->m_pAnal->m_nRcs; nIter++)
  +        pNewrc->m_ppSectvec[nIter] = sectionNew();*/
   
       return(pNewrc);
   }
  @@ -153,11 +154,8 @@
                   /* Extract a section from the temp script, and append it */
                   pSec = scriptSection(pTempscript, pRc->m_pAnal->m_pszSecs[i]);
   
  -                if (pSec) { /* Only call if the section lookup succeeds */
  -                    scriptAppend(pRc->m_ppScriptvec[nIter], sectionGetdata(pSec),
  -                        sectionGetlen(pSec) - 1);
  -                    scriptAppend(pRc->m_ppScriptvec[nIter], "\n", sizeof(char));
  -                }
  +                if (pSec) /* Only copy if the section lookup succeeds */
  +                    pRc->m_ppSectvec[pRc->m_pAnal->m_nSecs * nIter + i] = sectionCopy(pSec);
                   else if (configGetval(RC_DBG_VAL)) /* Only show if debug set */
                       fprintf(stderr, "#Warning: Missing section '%s' in %s!\n",\
                           pRc->m_pAnal->m_pszSecs[i],\
  @@ -216,10 +214,9 @@
       }
       else if (configGetval(RC_PRN_VAL)) {                         /* Print  */
           scriptDump(pRc->m_pScriptcom);
  -        for (nIter = 0; nIter < pRc->m_pAnal->m_nRcs; nIter++) {
  -            if (*pRc->m_ppScriptvec[nIter])
  -                scriptDump(pRc->m_ppScriptvec[nIter]);
  -        }
  +        for (nIter = 0; nIter < pRc->m_pAnal->m_nRcs * pRc->m_pAnal->m_nSecs; nIter++)
  +            if (pRc->m_ppSectvec[nIter])
  +                sectionDump(pRc->m_ppSectvec[nIter]);
       }
       else /* Something is wrong here */
           return(RC_THROW(RC_ERR_INT));
  @@ -233,17 +230,17 @@
   ************************************************/
   rc_return_t procDelete(rc_proc_t *pRc)
   {
  -    int nIter = 0;
  +    int nSecvec = pRc->m_pAnal->m_nRcs * pRc->m_pAnal->m_nSecs;
   
  -    /* Destroy the script vector */
  -    for (nIter = pRc->m_pAnal->m_nRcs - 1; nIter >= 0 ; nIter--) {
  -        if (pRc->m_ppScriptvec[nIter]) {
  -            scriptDelete(pRc->m_ppScriptvec[nIter]);
  -            pRc->m_ppScriptvec[nIter] = NULL;
  +    /* Destroy the section vector */
  +    while (nSecvec-- > 0) {
  +        if (pRc->m_ppSectvec[nSecvec]) {
  +            sectionDelete(pRc->m_ppSectvec[nSecvec]);
  +            pRc->m_ppSectvec[nSecvec] = NULL;
           }
       }
  -    free(pRc->m_ppScriptvec);
  -    pRc->m_ppScriptvec = NULL;
  +    free(pRc->m_ppSectvec);
  +    pRc->m_ppSectvec = NULL;
       scriptDelete(pRc->m_pScriptcom);    /* Destroy the script        */
       analDelete(pRc->m_pAnal);           /* Destroy the analyser      */
       free(pRc);                          /* Free the processor itself */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_sect.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 rc_sect.c
  --- ossp-pkg/rc/rc_sect.c	14 May 2003 16:36:28 -0000	1.3
  +++ ossp-pkg/rc/rc_sect.c	15 May 2003 12:49:11 -0000	1.4
  @@ -52,6 +52,28 @@
   }
   
   /************************************************
  +* sectionCopy(rc_section_t *)                   *
  +* Opaque copy constructor                       *
  +************************************************/
  +rc_section_t *sectionCopy(rc_section_t *pOrigsec)
  +{
  +    rc_section_t *pSec = NULL;
  +
  +    /* Today is a rain and no coffee day */
  +    pSec = (rc_section_t *)malloc(sizeof(rc_section_t));
  +    pSec->nPri   = pOrigsec->nPri;
  +    pSec->nUid   = pOrigsec->nUid;
  +    pSec->szData = malloc(strlen(pOrigsec->szData) * sizeof(char) + 1);
  +    strcpy(pSec->szData, pOrigsec->szData);
  +    pSec->Bytes  = pOrigsec->Bytes;
  +
  +    if (!pSec)
  +        RC_THROW(RC_ERR_MEM);
  +
  +    return(pSec);
  +}
  +
  +/************************************************
   * sectionGetXXX(rc_section_t *)                 *
   * Accessor methods                              *
   ************************************************/
  @@ -157,6 +179,22 @@
       }
   
       return(RC_THROW(RC_ERR_USE));
  +}
  +
  +/************************************************
  +* sectionDump(rc_section_t *)                   *
  +* Print a section to standard out               *
  +************************************************/
  +rc_return_t sectionDump(rc_section_t *pSec)
  +{
  +    /* Don't remove this! It encapsulates the script object, */
  +    /*                    which might not be a simple string */
  +    if (pSec) {
  +        fprintf(stdout, "%s", sectionGetdata(pSec));
  +        return(RC_THROW(RC_OK));
  +    }
  +    else
  +        return(RC_THROW(RC_ERR_USE));
   }
   
   /************************************************
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_util.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 rc_util.c
  --- ossp-pkg/rc/rc_util.c	29 Jul 2002 15:07:01 -0000	1.5
  +++ ossp-pkg/rc/rc_util.c	15 May 2003 12:49:11 -0000	1.6
  @@ -77,6 +77,18 @@
       return(NULL);               /* Failure */
   }
   
  +/* Vector counter */
  +short vectorCount(const char **pszVec)
  +{
  +    int i = 0;
  +    assert(pszVec);                 /* Check for unallocated incoming */
  +
  +    while (pszVec[i])               /* Loop through elements,  */
  +        i++;                        /* and count them here     */
  +
  +    return(i);
  +}
  +
   /* Vector destructor */
   rc_return_t vectorDel(char **pszVec)
   {
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 15 15:37:17 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id ECD6A769D2; Thu, 15 May 2003 15:37:16 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/rc_test/ rcfuncs
Message-Id: <20030515133716.ECD6A769D2@mail.ossp.org>
Date: Thu, 15 May 2003 15:37:16 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   15-May-2003 15:37:16
  Branch: HEAD                             Handle: 2003051514371500

  Modified files:
    ossp-pkg/rc/rc_test     rcfuncs

  Log:
    Remove whitespace.

  Summary:
    Revision    Changes     Path
    1.6         +0  -2      ossp-pkg/rc/rc_test/rcfuncs
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_test/rcfuncs
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 rcfuncs
  --- ossp-pkg/rc/rc_test/rcfuncs	15 May 2003 12:47:26 -0000	1.5
  +++ ossp-pkg/rc/rc_test/rcfuncs	15 May 2003 13:37:15 -0000	1.6
  @@ -7,6 +7,4 @@
   echo "Thomas LOTTERER ist chef Entwickler."
   echo "Michael SCHLOH ist chef Entwickler."
   echo "Ralf ENGELSCHALL ist aber chef-chef Entwickler!"
  -
   echo "**** Funcfile ist fertig, rc gehts weiter ****"
  -echo
  @@ .

From ossp-cvs-owner@ossp.org  Fri May 16 00:22:32 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6F19876CF1; Fri, 16 May 2003 00:22:32 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc.h rc_private.h rc_proc.c rc_script.c rc_se...
Message-Id: <20030515222232.6F19876CF1@mail.ossp.org>
Date: Fri, 16 May 2003 00:22:32 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   16-May-2003 00:22:32
  Branch: HEAD                             Handle: 2003051523223000

  Modified files:
    ossp-pkg/rc             rc.h rc_private.h rc_proc.c rc_script.c rc_sect.c
                            rc_util.c

  Log:
    Implement priority scheduling with qsort(3) and priCompare(), adhere to naming
    standard, and bugfix.

  Summary:
    Revision    Changes     Path
    1.42        +1  -0      ossp-pkg/rc/rc.h
    1.24        +4  -4      ossp-pkg/rc/rc_private.h
    1.23        +5  -2      ossp-pkg/rc/rc_proc.c
    1.15        +1  -2      ossp-pkg/rc/rc_script.c
    1.5         +30 -32     ossp-pkg/rc/rc_sect.c
    1.7         +23 -0      ossp-pkg/rc/rc_util.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc.h
  ============================================================================
  $ cvs diff -u -r1.41 -r1.42 rc.h
  --- ossp-pkg/rc/rc.h	15 May 2003 12:49:11 -0000	1.41
  +++ ossp-pkg/rc/rc.h	15 May 2003 22:22:30 -0000	1.42
  @@ -147,6 +147,7 @@
   char **vectorCopy(const char **);
   short vectorCount(const char **);
   rc_return_t vectorDel(char **);
  +int priCompare(const void *, const void *);
   
   /* Other function prototypes */
   void rcError(ex_t);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_private.h
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 rc_private.h
  --- ossp-pkg/rc/rc_private.h	15 May 2003 12:49:11 -0000	1.23
  +++ ossp-pkg/rc/rc_private.h	15 May 2003 22:22:30 -0000	1.24
  @@ -88,10 +88,10 @@
   
   /* Section type */
   typedef struct {
  -    int nPri;
  -    int nUid;
  -    char *szData;
  -    size_t Bytes;
  +    int m_nPri;
  +    int m_nUid;
  +    char *m_szData;
  +    size_t m_Bytes;
   } rc_section_t;
   
   /* Processor class */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	15 May 2003 12:49:11 -0000	1.22
  +++ ossp-pkg/rc/rc_proc.c	15 May 2003 22:22:30 -0000	1.23
  @@ -193,7 +193,8 @@
   ************************************************/
   rc_return_t procRun(rc_proc_t *pRc)
   {
  -    int   nIter = 0;
  +    int   nIter    = 0;
  +    int   nTotsecs = pRc->m_pAnal->m_nRcs * pRc->m_pAnal->m_nSecs;
       char *pszVec[RC_EXEC_MAXARGS];
   
       /****************************************************/
  @@ -213,10 +214,12 @@
               TRACE("Bad, execvp in child returned -1");
       }
       else if (configGetval(RC_PRN_VAL)) {                         /* Print  */
  +        qsort((void *)pRc->m_ppSectvec, (size_t)nTotsecs, sizeof (rc_section_t *), priCompare);
           scriptDump(pRc->m_pScriptcom);
  -        for (nIter = 0; nIter < pRc->m_pAnal->m_nRcs * pRc->m_pAnal->m_nSecs; nIter++)
  +        for (nIter = 0; nIter < nTotsecs; nIter++) {
               if (pRc->m_ppSectvec[nIter])
                   sectionDump(pRc->m_ppSectvec[nIter]);
  +        }
       }
       else /* Something is wrong here */
           return(RC_THROW(RC_ERR_INT));
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_script.c
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 rc_script.c
  --- ossp-pkg/rc/rc_script.c	14 May 2003 16:36:28 -0000	1.14
  +++ ossp-pkg/rc/rc_script.c	15 May 2003 22:22:30 -0000	1.15
  @@ -189,13 +189,12 @@
               piSubtemp = strnstr(piStart, RC_DEF_PRG, piEnd - piStart);
               if (piSubtemp) { /* Priority pattern found */
   /* FIXME: Remove the 1 in the following line! */
  -                nPri = strtol(piSubtemp + strlen(RC_DEF_PRG) + 1, (char **)NULL, 10);
  +                nPri = strtol(piSubtemp + strlen(RC_DEF_PRG), (char **)NULL, 10);
                   sectionSetpri(pSec, nPri);
               }
               else /* Fallback to default value */
                   sectionSetpri(pSec, RC_DEF_PRI);
   
  -/*fprintf(stderr, "nPri ist %d!\n", pSec->nPri);*/
               /* Handle the section userid   */
               return(pSec);   /* Section found, so return the text */
           }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_sect.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 rc_sect.c
  --- ossp-pkg/rc/rc_sect.c	15 May 2003 12:49:11 -0000	1.4
  +++ ossp-pkg/rc/rc_sect.c	15 May 2003 22:22:30 -0000	1.5
  @@ -61,11 +61,11 @@
   
       /* Today is a rain and no coffee day */
       pSec = (rc_section_t *)malloc(sizeof(rc_section_t));
  -    pSec->nPri   = pOrigsec->nPri;
  -    pSec->nUid   = pOrigsec->nUid;
  -    pSec->szData = malloc(strlen(pOrigsec->szData) * sizeof(char) + 1);
  -    strcpy(pSec->szData, pOrigsec->szData);
  -    pSec->Bytes  = pOrigsec->Bytes;
  +    pSec->m_nPri   = pOrigsec->m_nPri;
  +    pSec->m_nUid   = pOrigsec->m_nUid;
  +    pSec->m_Bytes  = pOrigsec->m_Bytes;
  +    pSec->m_szData = malloc(strlen(pOrigsec->m_szData) * sizeof(char) + 1);
  +    strcpy(pSec->m_szData, pOrigsec->m_szData);
   
       if (!pSec)
           RC_THROW(RC_ERR_MEM);
  @@ -80,7 +80,7 @@
   const int sectionGetpri(rc_section_t *pSec)
   { /* Priority of section, used to order sections during exec|eval|print */
       if (pSec)
  -        return(pSec->nPri);
  +        return(pSec->m_nPri);
       else
           RC_THROW(RC_ERR_USE);
   
  @@ -90,7 +90,7 @@
   const int sectionGetuid(rc_section_t *pSec)
   { /* Userid of section, used with setuid during exec or eval */
       if (pSec)
  -        return(pSec->nUid);
  +        return(pSec->m_nUid);
       else
           RC_THROW(RC_ERR_USE);
   
  @@ -99,8 +99,8 @@
   
   const char *sectionGetdata(rc_section_t *pSec)
   { /* Data of section, this is the script body of the particular section */
  -    if (pSec && pSec->szData)
  -        return(pSec->szData);
  +    if (pSec && pSec->m_szData)
  +        return(pSec->m_szData);
       else
           RC_THROW(RC_ERR_USE);
   
  @@ -110,7 +110,7 @@
   size_t sectionGetlen(rc_section_t *pSec)
   { /* Data length of section, length of a script body of a particular section */
       if (pSec)
  -        return(pSec->Bytes);
  +        return(pSec->m_Bytes);
       else
           RC_THROW(RC_ERR_USE);
   
  @@ -124,7 +124,7 @@
   rc_return_t sectionSetpri(rc_section_t *pSec, long nPriority)
   { /* Priority of section, used to order sections during exec|eval|print */
       if (pSec) {
  -        pSec->nPri = nPriority;
  +        pSec->m_nPri = nPriority;
           return(RC_THROW(RC_OK));
       }
   
  @@ -134,7 +134,7 @@
   rc_return_t sectionSetuid(rc_section_t *pSec, long nUserid)
   { /* Userid of section, used with setuid during exec or eval */
       if (pSec) {
  -        pSec->nUid = nUserid;
  +        pSec->m_nUid = nUserid;
           return(RC_THROW(RC_OK));
       }
   
  @@ -144,15 +144,15 @@
   rc_return_t sectionSetdata(rc_section_t *pSec, const char *kszScript)
   { /* Data of section, this is the script body of the particular section */
       if (pSec) {
  -        pSec->Bytes = strlen(kszScript) * sizeof(char) + sizeof(char);
  -        if (pSec->szData) { /* The section data is already in use */
  -            free(pSec->szData);
  -            pSec->szData = malloc(pSec->Bytes);
  -            strcpy(pSec->szData, kszScript);
  +        pSec->m_Bytes = strlen(kszScript) * sizeof(char) + sizeof(char);
  +        if (pSec->m_szData) { /* The section data is already in use */
  +            free(pSec->m_szData);
  +            pSec->m_szData = malloc(pSec->m_Bytes);
  +            strcpy(pSec->m_szData, kszScript);
           }
           else { /* Set the data the usual way */
  -            pSec->szData = malloc(pSec->Bytes);
  -            strcpy(pSec->szData, kszScript);
  +            pSec->m_szData = malloc(pSec->m_Bytes);
  +            strcpy(pSec->m_szData, kszScript);
           }
           return(RC_THROW(RC_OK));
       }
  @@ -163,17 +163,17 @@
   rc_return_t sectionSetndata(rc_section_t *pSec, const char *kszScript, size_t Len)
   { /* Data of section, this is the script body of the particular section */
       if (pSec) {
  -        pSec->Bytes = Len * sizeof(char) + sizeof(char); /* Set size */
  -        if (pSec->szData) { /* The section data is already in use */
  -            free(pSec->szData);
  -            pSec->szData = malloc(pSec->Bytes);
  -            strncpy(pSec->szData, kszScript, Len);
  -            *(pSec->szData + Len) = NULL; /* Terminate outgoing */
  +        pSec->m_Bytes = Len * sizeof(char) + sizeof(char); /* Set size */
  +        if (pSec->m_szData) { /* The section data is already in use */
  +            free(pSec->m_szData);
  +            pSec->m_szData = malloc(pSec->m_Bytes);
  +            strncpy(pSec->m_szData, kszScript, Len);
  +            *(pSec->m_szData + Len) = NULL; /* Terminate outgoing */
           }
           else { /* Set the data the usual way */
  -            pSec->szData = malloc(pSec->Bytes);
  -            strncpy(pSec->szData, kszScript, Len);
  -            *(pSec->szData + Len) = NULL; /* Terminate outgoing */
  +            pSec->m_szData = malloc(pSec->m_Bytes);
  +            strncpy(pSec->m_szData, kszScript, Len);
  +            *(pSec->m_szData + Len) = NULL; /* Terminate outgoing */
           }
           return(RC_THROW(RC_OK));
       }
  @@ -187,8 +187,6 @@
   ************************************************/
   rc_return_t sectionDump(rc_section_t *pSec)
   {
  -    /* Don't remove this! It encapsulates the script object, */
  -    /*                    which might not be a simple string */
       if (pSec) {
           fprintf(stdout, "%s", sectionGetdata(pSec));
           return(RC_THROW(RC_OK));
  @@ -205,8 +203,8 @@
   {
       /* Cleanup our junk */
       if (pSec) {
  -        if (pSec->szData)
  -            free(pSec->szData);
  +        if (pSec->m_szData)
  +            free(pSec->m_szData);
           free(pSec);
       }
       else    /* Dumbass passed an empty section object */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_util.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 rc_util.c
  --- ossp-pkg/rc/rc_util.c	15 May 2003 12:49:11 -0000	1.6
  +++ ossp-pkg/rc/rc_util.c	15 May 2003 22:22:30 -0000	1.7
  @@ -105,3 +105,26 @@
   
       return(RC_THROW(RC_OK));
   }
  +
  +/* Section priority compare, to use with qsort(3) */
  +int priCompare(const void *pkv1, const void *pkv2)
  +{
  +    int nOne = ((rc_section_t *)pkv1)->m_nPri;
  +    int nTwo = ((rc_section_t *)pkv2)->m_nPri;
  +
  +    if (nOne)
  +        if (nTwo)
  +            if (*(int *)nOne > *(int *)nTwo)
  +                return (1);
  +            else if (*(int *)nOne < *(int *)nTwo)
  +                return (-1);
  +            else
  +                return (0);
  +        else
  +            return (-1);
  +    else if (nTwo)
  +        return (1);
  +    else
  +        return (0);
  +}
  +
  @@ .

From ossp-cvs-owner@ossp.org  Fri May 16 00:22:54 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6E78F76D00; Fri, 16 May 2003 00:22:54 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/rc_test/ rc.dhcpd rc.ntp rc.zebra
Message-Id: <20030515222254.6E78F76D00@mail.ossp.org>
Date: Fri, 16 May 2003 00:22:54 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   16-May-2003 00:22:54
  Branch: HEAD                             Handle: 2003051523225300

  Modified files:
    ossp-pkg/rc/rc_test     rc.dhcpd rc.ntp rc.zebra

  Log:
    Better testing of section priorities.

  Summary:
    Revision    Changes     Path
    1.4         +1  -0      ossp-pkg/rc/rc_test/rc.dhcpd
    1.3         +1  -0      ossp-pkg/rc/rc_test/rc.ntp
    1.3         +1  -1      ossp-pkg/rc/rc_test/rc.zebra
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_test/rc.dhcpd
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 rc.dhcpd
  --- ossp-pkg/rc/rc_test/rc.dhcpd	3 Apr 2003 12:05:16 -0000	1.3
  +++ ossp-pkg/rc/rc_test/rc.dhcpd	15 May 2003 22:22:53 -0000	1.4
  @@ -7,6 +7,7 @@
       hacking="ofcourse"
   
   %start -p 200 -u root
  +    echo "Pri 200"
       opServiceEnabled dhcpd || exit 0
       /sw/sbin/dhcpd
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_test/rc.ntp
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 rc.ntp
  --- ossp-pkg/rc/rc_test/rc.ntp	14 May 2003 19:38:24 -0000	1.2
  +++ ossp-pkg/rc/rc_test/rc.ntp	15 May 2003 22:22:53 -0000	1.3
  @@ -3,6 +3,7 @@
   echo "Run commands NTP starting"
   
   %start -p 100 -u root
  +    echo "Pri 100"
       opServiceEnabled ntp || exit 0
       /sw/sbin/ntp >/dev/null 2>&1
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_test/rc.zebra
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 rc.zebra
  --- ossp-pkg/rc/rc_test/rc.zebra	14 May 2003 19:38:24 -0000	1.2
  +++ ossp-pkg/rc/rc_test/rc.zebra	15 May 2003 22:22:53 -0000	1.3
  @@ -13,4 +13,4 @@
   echo
   
   %start -p120 -u ms
  -    echo "Otay, zebra in Umfolozi"
  +    echo "Pri 120 Otay, zebra in Umfolozi"
  @@ .

From ossp-cvs-owner@ossp.org  Fri May 16 10:46:28 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 188B676CD9; Fri, 16 May 2003 10:46:27 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog sh.subst
Message-Id: <20030516084627.188B676CD9@mail.ossp.org>
Date: Fri, 16 May 2003 10:46:27 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-May-2003 10:46:27
  Branch: HEAD                             Handle: 2003051609462600

  Modified files:
    ossp-pkg/shtool         ChangeLog sh.subst

  Log:
    When patching a file with "shtool subst" try to make it
    writeable first in case it has permissions set differently.

  Summary:
    Revision    Changes     Path
    1.187       +4  -0      ossp-pkg/shtool/ChangeLog
    1.8         +2  -0      ossp-pkg/shtool/sh.subst
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.186 -r1.187 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	9 May 2003 09:50:13 -0000	1.186
  +++ ossp-pkg/shtool/ChangeLog	16 May 2003 08:46:26 -0000	1.187
  @@ -11,6 +11,10 @@
   
    Changes between 1.6.2 and 2.0b0 (02-Nov-2002 to xx-May-2003):
   
  +   *) When patching a file with "shtool subst" try to make it
  +      writeable first in case it has permissions set differently.
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
      *) Fix calculation of effective source path in "shtool mkln" command
         for destination paths containing "/./" sequence and for source paths
         consisting of no directory parts at all.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.subst
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 sh.subst
  --- ossp-pkg/shtool/sh.subst	11 Feb 2003 13:00:50 -0000	1.7
  +++ ossp-pkg/shtool/sh.subst	16 May 2003 08:46:26 -0000	1.8
  @@ -124,10 +124,12 @@
           fi
           if [ ".$opt_t" = .yes ]; then
               echo "\$ cp -p $file $file$orig"
  +            echo "\$ chmod u+w $file"
               echo "\$ $sedcmd <$file$orig >$file"
           fi
           if [ ".$opt_n" = .no ]; then
               cp -p $file $file$orig
  +            chmod u+w $file >/dev/null 2>&1 || true
               eval "$sedcmd <$file$orig >$file"
           fi
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri May 16 14:37:12 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0500B76CF7; Fri, 16 May 2003 14:37:11 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_const.h rc_script.c
Message-Id: <20030516123711.0500B76CF7@mail.ossp.org>
Date: Fri, 16 May 2003 14:37:11 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   16-May-2003 14:37:11
  Branch: HEAD                             Handle: 2003051613371000

  Modified files:
    ossp-pkg/rc             rc_const.h rc_script.c

  Log:
    Bugfix and cleanup priority scheduling, and add similar userid parameter
    handling.

  Summary:
    Revision    Changes     Path
    1.14        +2  -0      ossp-pkg/rc/rc_const.h
    1.16        +17 -6      ossp-pkg/rc/rc_script.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_const.h
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 rc_const.h
  --- ossp-pkg/rc/rc_const.h	2 Aug 2002 20:09:59 -0000	1.13
  +++ ossp-pkg/rc/rc_const.h	16 May 2003 12:37:10 -0000	1.14
  @@ -125,6 +125,8 @@
   #define RC_DEF_OFF    "0"                       /* Digital switch */
   #define RC_DEF_DEF    "^%(\\w+)[ \t]*(.*?)\\n(.*?)^$" /* Section definition */
   #define RC_DEF_NCF    "config"                  /* Config section name */
  +#define RC_DEF_UIG    "-u"                      /* Section user string */
  +#define RC_DEF_UID    -1                        /* Section user value  */
   #define RC_DEF_PRG    "-p"                      /* Section priority string */
   #define RC_DEF_PRI    200                       /* Section priority value */
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_script.c
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 rc_script.c
  --- ossp-pkg/rc/rc_script.c	15 May 2003 22:22:30 -0000	1.15
  +++ ossp-pkg/rc/rc_script.c	16 May 2003 12:37:10 -0000	1.16
  @@ -29,6 +29,7 @@
   
   #include <stdlib.h>
   #include <string.h>
  +#include <ctype.h>      /* For isspace(3)             */
   
   #include "rc.h"         /* Public Rc interface        */
   #include "rc_pcre.h"    /* For section parsing        */
  @@ -111,6 +112,7 @@
       char *piEnd        = NULL;
       long  nPri         = 0;
       long  nUid         = 0;
  +    int nTmp           = 0;
       int nOffset        = 0;
       int nFound         = 0;
       int nVecsize       = 0;
  @@ -172,8 +174,6 @@
           piLabstart = piBlocend + *(pnVec + 2);
           nLabsize   = *(pnVec + 3) - *(pnVec + 2);
   
  -/*fprintf(stderr, "Substring we want ist %s!\n", kszSecname);
  -fprintf(stderr, "Compared with ist %s!\n", piLabstart);*/
           /* Test the substring. If it matches our label, make a new section */
           if (!strncmp(piLabstart, kszSecname, nLabsize)) {
               /* Handle the section body */
  @@ -182,21 +182,32 @@
               pSec = sectionNew();
               sectionSetndata(pSec, piStart, piEnd - piStart);
   
  +            /* FIXME: Implement --ParseSectionParam for extra gravy */
               /* Handle the section priority */
               piStart = piBlocend + *(pnVec + 4);
               piEnd   = piBlocend + *(pnVec + 5);
  -            /* FIXME: Implement --ParseSectionParam for extra gravy */
               piSubtemp = strnstr(piStart, RC_DEF_PRG, piEnd - piStart);
               if (piSubtemp) { /* Priority pattern found */
  -/* FIXME: Remove the 1 in the following line! */
  -                nPri = strtol(piSubtemp + strlen(RC_DEF_PRG), (char **)NULL, 10);
  +                for (nTmp = (int)piSubtemp + strlen(RC_DEF_PRG);\
  +                    isspace(*(char *)nTmp); nTmp += sizeof (char)); /* Strip */
  +                nPri = strtol((char *)nTmp, (char **)NULL, 10);
                   sectionSetpri(pSec, nPri);
               }
               else /* Fallback to default value */
                   sectionSetpri(pSec, RC_DEF_PRI);
   
               /* Handle the section userid   */
  -            return(pSec);   /* Section found, so return the text */
  +            piSubtemp = strnstr(piStart, RC_DEF_UIG, piEnd - piStart);
  +            if (piSubtemp) { /* Priority pattern found */
  +                for (nTmp = (int)piSubtemp + strlen(RC_DEF_UIG);\
  +                    isspace(*(char *)nTmp); nTmp += sizeof (char)); /* Strip */
  +                nUid = strtol((char *)nTmp, (char **)NULL, 10);
  +                sectionSetuid(pSec, nUid);
  +            }
  +            else /* Fallback to default value */
  +                sectionSetuid(pSec, RC_DEF_UID);
  +
  +            return(pSec); /* Section found, so return the text */
           }
   
           /* Looks like we didn't find the section yet, so keep trying */
  @@ .

From ossp-cvs-owner@ossp.org  Fri May 16 20:43:33 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CD2F176C10; Fri, 16 May 2003 20:43:32 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc.h rc_private.h rc_proc.c rc_script.c rc_se...
Message-Id: <20030516184332.CD2F176C10@mail.ossp.org>
Date: Fri, 16 May 2003 20:43:32 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   16-May-2003 20:43:32
  Branch: HEAD                             Handle: 2003051619433001

  Modified files:
    ossp-pkg/rc             rc.h rc_private.h rc_proc.c rc_script.c rc_sect.c

  Log:
    Added section login accessors for user name handling during print op,
    implemented user id and user name parsing in section and script objects.

  Summary:
    Revision    Changes     Path
    1.43        +2  -0      ossp-pkg/rc/rc.h
    1.25        +1  -0      ossp-pkg/rc/rc_private.h
    1.24        +0  -1      ossp-pkg/rc/rc_proc.c
    1.17        +38 -6      ossp-pkg/rc/rc_script.c
    1.6         +37 -5      ossp-pkg/rc/rc_sect.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc.h
  ============================================================================
  $ cvs diff -u -r1.42 -r1.43 rc.h
  --- ossp-pkg/rc/rc.h	15 May 2003 22:22:30 -0000	1.42
  +++ ossp-pkg/rc/rc.h	16 May 2003 18:43:30 -0000	1.43
  @@ -122,10 +122,12 @@
   rc_section_t *sectionCopy(rc_section_t *);
   const int sectionGetpri(rc_section_t *);
   const int sectionGetuid(rc_section_t *);
  +const char *sectionGetlogin(rc_section_t *);
   const char *sectionGetdata(rc_section_t *);
   size_t sectionGetlen(rc_section_t *);
   rc_return_t sectionSetpri(rc_section_t *, long);
   rc_return_t sectionSetuid(rc_section_t *, long);
  +rc_return_t sectionSetlogin(rc_section_t *, const char *);
   rc_return_t sectionSetdata(rc_section_t *, const char *);
   rc_return_t sectionSetndata(rc_section_t *, const char *, size_t);
   rc_return_t sectionDump(rc_section_t *);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_private.h
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 rc_private.h
  --- ossp-pkg/rc/rc_private.h	15 May 2003 22:22:30 -0000	1.24
  +++ ossp-pkg/rc/rc_private.h	16 May 2003 18:43:30 -0000	1.25
  @@ -90,6 +90,7 @@
   typedef struct {
       int m_nPri;
       int m_nUid;
  +    char *m_szLogin;
       char *m_szData;
       size_t m_Bytes;
   } rc_section_t;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	15 May 2003 22:22:30 -0000	1.23
  +++ ossp-pkg/rc/rc_proc.c	16 May 2003 18:43:30 -0000	1.24
  @@ -149,7 +149,6 @@
                   pSec = NULL;            /* Cleanup */
               }
   
  -/* FIXME: Swap nested rcfile/section logic loops for section/rcfile ordering */
               for (i = 0; pRc->m_pAnal->m_pszSecs[i]; i++) { /* Iterate over */
                   /* Extract a section from the temp script, and append it */
                   pSec = scriptSection(pTempscript, pRc->m_pAnal->m_pszSecs[i]);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_script.c
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 rc_script.c
  --- ossp-pkg/rc/rc_script.c	16 May 2003 12:37:10 -0000	1.16
  +++ ossp-pkg/rc/rc_script.c	16 May 2003 18:43:31 -0000	1.17
  @@ -27,9 +27,9 @@
   **  rc_script.c: Run-command processor ISO C source file
   */
   
  -#include <stdlib.h>
   #include <string.h>
   #include <ctype.h>      /* For isspace(3)             */
  +#include <pwd.h>        /* For getlogin(2)            */
   
   #include "rc.h"         /* Public Rc interface        */
   #include "rc_pcre.h"    /* For section parsing        */
  @@ -110,8 +110,12 @@
       char *piBlocend    = NULL; /* Misnomer used to control section looping */
       char *piStart      = NULL;
       char *piEnd        = NULL;
  +    char *piSep        = NULL;
  +    char *szUser       = NULL;
  +    struct passwd *pPwd = NULL;
       long  nPri         = 0;
       long  nUid         = 0;
  +    int nUserbytes     = 0;
       int nTmp           = 0;
       int nOffset        = 0;
       int nFound         = 0;
  @@ -190,19 +194,47 @@
               if (piSubtemp) { /* Priority pattern found */
                   for (nTmp = (int)piSubtemp + strlen(RC_DEF_PRG);\
                       isspace(*(char *)nTmp); nTmp += sizeof (char)); /* Strip */
  -                nPri = strtol((char *)nTmp, (char **)NULL, 10);
  -                sectionSetpri(pSec, nPri);
  +                nPri = strtol((char *)nTmp, &piSep, 10);
  +                if ((char *)nTmp == piSep)  /* No priority number follows */
  +                    sectionSetpri(pSec, RC_DEF_PRI); /* which is an error */
  +                else
  +                    sectionSetpri(pSec, nPri);  /* Found a priority value */
               }
               else /* Fallback to default value */
                   sectionSetpri(pSec, RC_DEF_PRI);
   
               /* Handle the section userid   */
               piSubtemp = strnstr(piStart, RC_DEF_UIG, piEnd - piStart);
  -            if (piSubtemp) { /* Priority pattern found */
  +            if (piSubtemp) { /* Userid pattern found */
                   for (nTmp = (int)piSubtemp + strlen(RC_DEF_UIG);\
                       isspace(*(char *)nTmp); nTmp += sizeof (char)); /* Strip */
  -                nUid = strtol((char *)nTmp, (char **)NULL, 10);
  -                sectionSetuid(pSec, nUid);
  +                nUid = strtol((char *)nTmp, &piSep, 10);
  +                if ((char *)nTmp == piSep)      /* No userid number follows */
  +                {
  +                    nUserbytes = (strcspn(piSep, " \t\n") + sizeof (char)) * sizeof (char);
  +                    szUser = malloc(nUserbytes);
  +                    if (!szUser)
  +                        RC_THROW(RC_ERR_MEM);
  +                    strncpy(szUser, (const char *)nTmp, nUserbytes);
  +                    strtok(szUser, " \t\n");
  +                    pPwd = getpwnam(szUser);
  +                    if (pPwd) {
  +                        sectionSetuid(pSec, pPwd->pw_uid);  /* Set to given   */
  +                        sectionSetlogin(pSec, szUser);      /* uid and login  */
  +                    }
  +                    else
  +                        sectionSetuid(pSec, RC_DEF_UID);    /* Set to default */
  +                    free(szUser);
  +                }
  +                else {
  +                    pPwd = getpwuid(nUid);
  +                    if (pPwd) {
  +                        sectionSetuid(pSec, nUid);              /* Found a value */
  +                        sectionSetlogin(pSec, pPwd->pw_name);   /* uid and login  */
  +                    }
  +                    else
  +                        sectionSetuid(pSec, RC_DEF_UID);        /* Set to default */
  +                }
               }
               else /* Fallback to default value */
                   sectionSetuid(pSec, RC_DEF_UID);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_sect.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 rc_sect.c
  --- ossp-pkg/rc/rc_sect.c	15 May 2003 22:22:30 -0000	1.5
  +++ ossp-pkg/rc/rc_sect.c	16 May 2003 18:43:31 -0000	1.6
  @@ -61,10 +61,18 @@
   
       /* Today is a rain and no coffee day */
       pSec = (rc_section_t *)malloc(sizeof(rc_section_t));
  -    pSec->m_nPri   = pOrigsec->m_nPri;
  -    pSec->m_nUid   = pOrigsec->m_nUid;
  -    pSec->m_Bytes  = pOrigsec->m_Bytes;
  -    pSec->m_szData = malloc(strlen(pOrigsec->m_szData) * sizeof(char) + 1);
  +    pSec->m_nPri    = pOrigsec->m_nPri;
  +    pSec->m_nUid    = pOrigsec->m_nUid;
  +    pSec->m_Bytes   = pOrigsec->m_Bytes;
  +
  +    /* Deep copy of user name */
  +    pSec->m_szLogin = malloc((strlen(pOrigsec->m_szLogin) + sizeof(char))\
  +        * sizeof(char));
  +    strcpy(pSec->m_szLogin, pOrigsec->m_szLogin);
  +
  +    /* Deep copy of section text */
  +    pSec->m_szData  = malloc((strlen(pOrigsec->m_szData) + sizeof(char))\
  +        * sizeof(char));
       strcpy(pSec->m_szData, pOrigsec->m_szData);
   
       if (!pSec)
  @@ -97,6 +105,16 @@
       return(0); /* Not reached */
   }
   
  +const char *sectionGetlogin(rc_section_t *pSec)
  +{ /* User name of section, used for display during print */
  +    if (pSec)
  +        return(pSec->m_szLogin);
  +    else
  +        RC_THROW(RC_ERR_USE);
  +
  +    return(0); /* Not reached */
  +}
  +
   const char *sectionGetdata(rc_section_t *pSec)
   { /* Data of section, this is the script body of the particular section */
       if (pSec && pSec->m_szData)
  @@ -141,10 +159,21 @@
       return(RC_THROW(RC_ERR_USE));
   }
   
  +rc_return_t sectionSetlogin(rc_section_t *pSec, const char *szLogin)
  +{ /* User name of section, used for display during print */
  +    if (pSec) {
  +        pSec->m_szLogin = malloc((strlen(szLogin) + 1) * sizeof (char));
  +        strcpy(pSec->m_szLogin, szLogin);
  +        return(RC_THROW(RC_OK));
  +    }
  +
  +    return(RC_THROW(RC_ERR_USE));
  +}
  +
   rc_return_t sectionSetdata(rc_section_t *pSec, const char *kszScript)
   { /* Data of section, this is the script body of the particular section */
       if (pSec) {
  -        pSec->m_Bytes = strlen(kszScript) * sizeof(char) + sizeof(char);
  +        pSec->m_Bytes = (strlen(kszScript) + sizeof(char)) * sizeof(char);
           if (pSec->m_szData) { /* The section data is already in use */
               free(pSec->m_szData);
               pSec->m_szData = malloc(pSec->m_Bytes);
  @@ -188,6 +217,7 @@
   rc_return_t sectionDump(rc_section_t *pSec)
   {
       if (pSec) {
  +        fprintf(stdout, "#su %s\n", sectionGetlogin(pSec));
           fprintf(stdout, "%s", sectionGetdata(pSec));
           return(RC_THROW(RC_OK));
       }
  @@ -205,6 +235,8 @@
       if (pSec) {
           if (pSec->m_szData)
               free(pSec->m_szData);
  +        if (pSec->m_szLogin)
  +            free(pSec->m_szLogin);
           free(pSec);
       }
       else    /* Dumbass passed an empty section object */
  @@ .

From ossp-cvs-owner@ossp.org  Mon May 19 21:03:07 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4C5BC76D22; Mon, 19 May 2003 21:03:07 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_sect.c
Message-Id: <20030519190307.4C5BC76D22@mail.ossp.org>
Date: Mon, 19 May 2003 21:03:07 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   19-May-2003 21:03:06
  Branch: HEAD                             Handle: 2003051920030600

  Modified files:
    ossp-pkg/rc             rc_sect.c

  Log:
    Use strlen only on condition of a valid incoming pointer.

  Summary:
    Revision    Changes     Path
    1.7         +10 -6      ossp-pkg/rc/rc_sect.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_sect.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 rc_sect.c
  --- ossp-pkg/rc/rc_sect.c	16 May 2003 18:43:31 -0000	1.6
  +++ ossp-pkg/rc/rc_sect.c	19 May 2003 19:03:06 -0000	1.7
  @@ -66,14 +66,18 @@
       pSec->m_Bytes   = pOrigsec->m_Bytes;
   
       /* Deep copy of user name */
  -    pSec->m_szLogin = malloc((strlen(pOrigsec->m_szLogin) + sizeof(char))\
  -        * sizeof(char));
  -    strcpy(pSec->m_szLogin, pOrigsec->m_szLogin);
  +    if (pOrigsec->m_szLogin) {
  +        pSec->m_szLogin = malloc((strlen(pOrigsec->m_szLogin) + sizeof(char))\
  +            * sizeof(char));
  +        strcpy(pSec->m_szLogin, pOrigsec->m_szLogin);
  +    }
   
       /* Deep copy of section text */
  -    pSec->m_szData  = malloc((strlen(pOrigsec->m_szData) + sizeof(char))\
  -        * sizeof(char));
  -    strcpy(pSec->m_szData, pOrigsec->m_szData);
  +    if (pOrigsec->m_szData) {
  +        pSec->m_szData  = malloc((strlen(pOrigsec->m_szData) + sizeof(char))\
  +            * sizeof(char));
  +        strcpy(pSec->m_szData, pOrigsec->m_szData);
  +    }
   
       if (!pSec)
           RC_THROW(RC_ERR_MEM);
  @@ .

From ossp-cvs-owner@ossp.org  Mon May 19 21:03:42 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6C3B776D22; Mon, 19 May 2003 21:03:42 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_opt.c
Message-Id: <20030519190342.6C3B776D22@mail.ossp.org>
Date: Mon, 19 May 2003 21:03:42 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   19-May-2003 21:03:42
  Branch: HEAD                             Handle: 2003051920034100

  Modified files:
    ossp-pkg/rc             rc_opt.c

  Log:
    Clean up what doesn't exist anymore.

  Summary:
    Revision    Changes     Path
    1.6         +0  -1      ossp-pkg/rc/rc_opt.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_opt.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 rc_opt.c
  --- ossp-pkg/rc/rc_opt.c	26 Jun 2002 14:11:16 -0000	1.5
  +++ ossp-pkg/rc/rc_opt.c	19 May 2003 19:03:41 -0000	1.6
  @@ -32,7 +32,6 @@
   #include <string.h>
   
   #include "rc.h"
  -#include "rc_opt.h"
   
   
   /***************************************
  @@ .

From ossp-cvs-owner@ossp.org  Mon May 19 21:04:23 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2717676D22; Mon, 19 May 2003 21:04:23 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_proc.c
Message-Id: <20030519190423.2717676D22@mail.ossp.org>
Date: Mon, 19 May 2003 21:04:23 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   19-May-2003 21:04:23
  Branch: HEAD                             Handle: 2003051920042200

  Modified files:
    ossp-pkg/rc             rc_proc.c

  Log:
    Extend priority scheduling feature to --exec mode block.

  Summary:
    Revision    Changes     Path
    1.25        +23 -7      ossp-pkg/rc/rc_proc.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	16 May 2003 18:43:30 -0000	1.24
  +++ ossp-pkg/rc/rc_proc.c	19 May 2003 19:04:22 -0000	1.25
  @@ -36,6 +36,7 @@
   #include <sys/stat.h>
   
   #include "rc.h"         /* Public interfaces        */
  +#include "rc_const.h"   /* String and value const   */
   #include "rc_config.h"  /* Option definitions       */
   
   
  @@ -196,6 +197,11 @@
       int   nTotsecs = pRc->m_pAnal->m_nRcs * pRc->m_pAnal->m_nSecs;
       char *pszVec[RC_EXEC_MAXARGS];
   
  +    /* Conditionally sort the section vector according to explicit priority */
  +    if (!strcmp(configGetrcfile(), RC_GLOB_WILD)) {
  +        qsort((void *)pRc->m_ppSectvec, (size_t)nTotsecs, sizeof (rc_section_t *), priCompare);
  +    }
  +
       /****************************************************/
       /* This will execute, evaluate, or print the script */
       /* Exec  - Fork and execute each command            */
  @@ -205,15 +211,25 @@
       if (configGetval(RC_EVL_VAL))                              /* Evaluate */
           fprintf(stderr, "Error: Evaluate is not implemented yet.\n"); /* FIX */
       else if (configGetval(RC_EXC_VAL)) {                       /* Execute  */
  -            pszVec[0] = "/bin/sh";
  -            pszVec[1] = "-c";
  -            pszVec[2] = (char *)scriptTostring(pRc->m_pScriptcom);
  -            pszVec[3] = NULL;   /* Add a NULL to mark the end of the chain */
  -        if (execvp(*pszVec, pszVec) == -1)                       /* launch */
  -            TRACE("Bad, execvp in child returned -1");
  +        pszVec[0] = "/bin/sh";
  +        pszVec[1] = "-c";
  +        pszVec[2] = (char *)scriptTostring(pRc->m_pScriptcom);
  +        pszVec[3] = NULL;   /* Add a NULL to mark the end of the chain */
  +        if (execvp(*pszVec, pszVec) == -1) {                     /* launch */
  +            TRACE("Bad, execvp for common script in child returned -1");
  +            return(RC_THROW(RC_ERR_INT));
  +        }
  +        for (nIter = 0; nIter < nTotsecs; nIter++) {
  +            if (pRc->m_ppSectvec[nIter]) {
  +                pszVec[2] = (char *)sectionGetdata(pRc->m_ppSectvec[nIter]);
  +                if (execvp(*pszVec, pszVec) == -1) {             /* launch */
  +                    TRACE("Bad, execvp for subsection in child returned -1");
  +                    return(RC_THROW(RC_ERR_INT));
  +                }
  +            }
  +        }
       }
       else if (configGetval(RC_PRN_VAL)) {                         /* Print  */
  -        qsort((void *)pRc->m_ppSectvec, (size_t)nTotsecs, sizeof (rc_section_t *), priCompare);
           scriptDump(pRc->m_pScriptcom);
           for (nIter = 0; nIter < nTotsecs; nIter++) {
               if (pRc->m_ppSectvec[nIter])
  @@ .

From ossp-cvs-owner@ossp.org  Mon May 19 21:04:46 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 523DB76D27; Mon, 19 May 2003 21:04:46 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ 00TODO
Message-Id: <20030519190446.523DB76D27@mail.ossp.org>
Date: Mon, 19 May 2003 21:04:46 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   19-May-2003 21:04:46
  Branch: HEAD                             Handle: 2003051920044500

  Modified files:
    ossp-pkg/rc             00TODO

  Log:
    Remember consistency issues.

  Summary:
    Revision    Changes     Path
    1.40        +4  -0      ossp-pkg/rc/00TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/00TODO
  ============================================================================
  $ cvs diff -u -r1.39 -r1.40 00TODO
  --- ossp-pkg/rc/00TODO	14 May 2003 19:38:23 -0000	1.39
  +++ ossp-pkg/rc/00TODO	19 May 2003 19:04:45 -0000	1.40
  @@ -34,6 +34,9 @@
     Should we just parse %config of labels which have matching %<...> sections?
     Under which user/priority does the %config and %common sections run?
   
  +Variation to OpenPKG rc
  +  OpenPKG puts sections with no -p at end, but we give them implicitly -p 200
  +
   Consider
     Nice to have feature for ex, a pEx->pObj->strErr(pEx->Value);
     Removing the OSSP_RC_DEACT deactivation feature (thl.)
  @@ -55,6 +58,7 @@
     Restore lost multiple location merging logic.
     Use OSSP cfg library for dotconf parsing, ask Ralf to help.
     Make rc_section_t correspond to rc_section.c with own operators.
  +  Make consistent, sectionGetdata and scriptTostring should have same names
   
   Implementation
     Correct assertion, sanity check, and if () checks according to one standard.
  @@ .

From ossp-cvs-owner@ossp.org  Mon May 19 21:05:13 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1B27376D22; Mon, 19 May 2003 21:05:13 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/rc_test/ rc.dhcpd rc.ntp rc.zebra
Message-Id: <20030519190513.1B27376D22@mail.ossp.org>
Date: Mon, 19 May 2003 21:05:13 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   19-May-2003 21:05:12
  Branch: HEAD                             Handle: 2003051920051100

  Modified files:
    ossp-pkg/rc/rc_test     rc.dhcpd rc.ntp rc.zebra

  Log:
    Write tests for implicit priority feature.

  Summary:
    Revision    Changes     Path
    1.5         +2  -2      ossp-pkg/rc/rc_test/rc.dhcpd
    1.4         +1  -1      ossp-pkg/rc/rc_test/rc.ntp
    1.4         +2  -2      ossp-pkg/rc/rc_test/rc.zebra
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_test/rc.dhcpd
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 rc.dhcpd
  --- ossp-pkg/rc/rc_test/rc.dhcpd	15 May 2003 22:22:53 -0000	1.4
  +++ ossp-pkg/rc/rc_test/rc.dhcpd	19 May 2003 19:05:11 -0000	1.5
  @@ -6,8 +6,8 @@
       dhcpd_enable="yes"
       hacking="ofcourse"
   
  -%start -p 200 -u root
  -    echo "Pri 200"
  +%start -p 220 -u root
  +    echo "Pri 220"
       opServiceEnabled dhcpd || exit 0
       /sw/sbin/dhcpd
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_test/rc.ntp
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 rc.ntp
  --- ossp-pkg/rc/rc_test/rc.ntp	15 May 2003 22:22:53 -0000	1.3
  +++ ossp-pkg/rc/rc_test/rc.ntp	19 May 2003 19:05:11 -0000	1.4
  @@ -2,7 +2,7 @@
   
   echo "Run commands NTP starting"
   
  -%start -p 100 -u root
  +%start -p100 -u root
       echo "Pri 100"
       opServiceEnabled ntp || exit 0
       /sw/sbin/ntp >/dev/null 2>&1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_test/rc.zebra
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 rc.zebra
  --- ossp-pkg/rc/rc_test/rc.zebra	15 May 2003 22:22:53 -0000	1.3
  +++ ossp-pkg/rc/rc_test/rc.zebra	19 May 2003 19:05:11 -0000	1.4
  @@ -12,5 +12,5 @@
   echo "Run commands Zebra finishing"
   echo
   
  -%start -p120 -u ms
  -    echo "Pri 120 Otay, zebra in Umfolozi"
  +%start -u ms
  +    echo "No priority given, Otay zebra in Umfolozi"
  @@ .

From ossp-cvs-owner@ossp.org  Tue May 20 13:45:14 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 16AAE76D21; Tue, 20 May 2003 13:45:13 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ Makefile.in rc_lab.c
Message-Id: <20030520114513.16AAE76D21@mail.ossp.org>
Date: Tue, 20 May 2003 13:45:13 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   20-May-2003 13:45:13
  Branch: HEAD                             Handle: 2003052012451100

  Added files:
    ossp-pkg/rc             rc_lab.c
  Modified files:
    ossp-pkg/rc             Makefile.in

  Log:
    Added label class to represent a run command label (prefixed by rc. in most
    cases).

  Summary:
    Revision    Changes     Path
    1.32        +2  -2      ossp-pkg/rc/Makefile.in
    1.1         +104 -0     ossp-pkg/rc/rc_lab.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 Makefile.in
  --- ossp-pkg/rc/Makefile.in	2 Aug 2002 16:38:09 -0000	1.31
  +++ ossp-pkg/rc/Makefile.in	20 May 2003 11:45:11 -0000	1.32
  @@ -59,10 +59,10 @@
   TARGET_PROGS    = rc
   TARGET_MANS     = rc.1 rc-sample.5
   
  -SRCS            = rc.c rc_error.c rc_anal.c rc_script.c rc_sect.c rc_config.c \
  +SRCS            = rc.c rc_error.c rc_anal.c rc_script.c rc_lab.c rc_sect.c rc_config.c \
                     rc_cliopt.c rc_proc.c rc_version.c rc_pcre.c rc_util.c
   
  -OBJS            = rc.o rc_error.o rc_anal.o rc_script.o rc_sect.o rc_config.o \
  +OBJS            = rc.o rc_error.o rc_anal.o rc_script.o rc_lab.o rc_sect.o rc_config.o \
                     rc_cliopt.o rc_proc.o rc_version.o rc_pcre.o rc_util.o
   
   SUBDIRS         = @SUBDIR_EX@ @SUBDIR_POPT@
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_lab.c
  ============================================================================
  $ cvs diff -u -r0 -r1.1 rc_lab.c
  --- /dev/null	2003-05-20 13:45:12.000000000 +0200
  +++ rc_lab.c	2003-05-20 13:45:12.000000000 +0200
  @@ -0,0 +1,104 @@
  +/*  OSSP rc - Run-command processor
  +**  Copyright (c) 2002 Ralf S. Engelschall
  +**  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +**
  +**  This file is part of OSSP rc, a portable Run-command processor
  +**  which can be found at http://www.ossp.org/pkg/lib/rc/
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  rc_lab.c: Run-command processor ISO C source file
  +*/
  +
  +#include <string.h> /* For string copy and such data ops */
  +#include <stdlib.h> /* For memory ops */
  +
  +#include "rc.h"     /* Public Rc interface */
  +
  +
  +/************************************************
  +* labelNew(void)                                *
  +* Construct a new label                         *
  +************************************************/
  +rc_label_t *labelNew(const char *szName)
  +{
  +    rc_label_t *pLab = NULL;
  +
  +    pLab = (rc_label_t *)calloc(1, sizeof(rc_label_t));
  +
  +    if (pLab) {
  +        pLab->m_szName = malloc((strlen(szName) + 1) * sizeof(char));
  +        strcpy(pLab->m_szName, szName);
  +    }
  +    else
  +        RC_THROW(RC_ERR_MEM);
  +
  +    return(pLab);
  +}
  +
  +/****************************************************
  +* labelAppendsec(rc_label_t *, rc_section_t *)      *
  +* Append a section to this label                    *
  +****************************************************/
  +rc_return_t labelAppendsec(rc_label_t *pLabel, rc_section_t *pInsec)
  +{
  +    assert(pLabel); /* Label parameter must be valid */
  +
  +    if (pInsec) {
  +        pLabel->m_ppSecvec = realloc(pLabel->m_ppSecvec, sizeof(rc_section_t *)\
  +            * (pLabel->m_nSecs + 1));
  +        pLabel->m_ppSecvec[pLabel->m_nSecs++] = pInsec; /* Just copy pointer */
  +    }
  +    else
  +        TRACE("Problem with labelAppendsec");
  +/*        return(RC_THROW(RC_ERR_USE));*/
  +
  +    return(RC_THROW(RC_OK));
  +}
  +
  +/************************************************
  +* labelDelete(rc_label_t *)                     *
  +* Destruct a label                              *
  +************************************************/
  +rc_return_t labelDelete(rc_label_t *pLab)
  +{
  +    int nSecs = pLab->m_nSecs;
  +
  +    /* Cleanup our junk */
  +    if (pLab) {
  +        pLab->m_nSecs = 0;    /* Blank the section count */
  +        if (pLab->m_szName)   /* Destroy the rc name */
  +            free(pLab->m_szName);
  +        while (nSecs-- > 0) { /* Destroy the section vector */
  +            if (pLab->m_ppSecvec[nSecs]) {
  +                sectionDelete(pLab->m_ppSecvec[nSecs]);
  +                pLab->m_ppSecvec[nSecs] = NULL;
  +            }
  +        }
  +        free(pLab->m_ppSecvec);
  +        pLab->m_ppSecvec = NULL;
  +        free(pLab);
  +    }
  +    else    /* Dumbass passed an empty label object */
  +        assert(FALSE);
  +
  +    return(RC_THROW(RC_OK));
  +}
  +
  @@ .

From ossp-cvs-owner@ossp.org  Tue May 20 13:46:28 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9C92776D0D; Tue, 20 May 2003 13:46:28 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc.h rc_private.h
Message-Id: <20030520114628.9C92776D0D@mail.ossp.org>
Date: Tue, 20 May 2003 13:46:28 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   20-May-2003 13:46:28
  Branch: HEAD                             Handle: 2003052012462500

  Modified files:
    ossp-pkg/rc             rc.h rc_private.h

  Log:
    Added label class to represent a run command label (prefixed by rc. in most
    cases).

  Summary:
    Revision    Changes     Path
    1.44        +5  -0      ossp-pkg/rc/rc.h
    1.26        +8  -1      ossp-pkg/rc/rc_private.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc.h
  ============================================================================
  $ cvs diff -u -r1.43 -r1.44 rc.h
  --- ossp-pkg/rc/rc.h	16 May 2003 18:43:30 -0000	1.43
  +++ ossp-pkg/rc/rc.h	20 May 2003 11:46:25 -0000	1.44
  @@ -117,6 +117,11 @@
   const char *scriptTostring(rc_script_t *);
   rc_return_t scriptDelete(rc_script_t *);
   
  +/* Label function prototypes */
  +rc_label_t *labelNew(const char *);
  +rc_return_t labelAppendsec(rc_label_t *, rc_section_t *);
  +rc_return_t labelDelete(rc_label_t *);
  +
   /* Section function prototypes */
   rc_section_t *sectionNew(void);
   rc_section_t *sectionCopy(rc_section_t *);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_private.h
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 rc_private.h
  --- ossp-pkg/rc/rc_private.h	16 May 2003 18:43:30 -0000	1.25
  +++ ossp-pkg/rc/rc_private.h	20 May 2003 11:46:25 -0000	1.26
  @@ -95,11 +95,18 @@
       size_t m_Bytes;
   } rc_section_t;
   
  +/* Label type */
  +typedef struct {
  +    int m_nSecs;
  +    char *m_szName;
  +    rc_section_t **m_ppSecvec;
  +} rc_label_t;
  +
   /* Processor class */
   typedef struct {
       rc_anal_t *m_pAnal;
       rc_script_t *m_pScriptcom;
  -    rc_section_t **m_ppSectvec;
  +    rc_label_t **m_ppLabvec;
   } rc_proc_t;
   
   #endif /* __OSSPRC_PRIVATE_H__ */
  @@ .

From ossp-cvs-owner@ossp.org  Tue May 20 13:47:52 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 41AEA76D0D; Tue, 20 May 2003 13:47:52 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_proc.c
Message-Id: <20030520114752.41AEA76D0D@mail.ossp.org>
Date: Tue, 20 May 2003 13:47:52 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   20-May-2003 13:47:52
  Branch: HEAD                             Handle: 2003052012475100

  Modified files:
    ossp-pkg/rc             rc_proc.c

  Log:
    Use new label class and back out sorting until finding a better algorythm that
    considers order according to new label and section semantics.

  Summary:
    Revision    Changes     Path
    1.26        +40 -38     ossp-pkg/rc/rc_proc.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	19 May 2003 19:04:22 -0000	1.25
  +++ ossp-pkg/rc/rc_proc.c	20 May 2003 11:47:51 -0000	1.26
  @@ -46,19 +46,13 @@
   ************************************************/
   rc_proc_t *procNew(void)
   {
  -/*    int nIter = 0;*/
       rc_proc_t *pNewrc = NULL;
   
       pNewrc = malloc(sizeof(rc_proc_t));
       pNewrc->m_pAnal = analNew();        /* Construct a configuration analyser */
       analParse(pNewrc->m_pAnal);         /* Preprocess the anal configuration  */
       pNewrc->m_pScriptcom = scriptNew(); /* Construct a run-command script     */
  -
  -    /* Logic needed for multiple run-command section combination with priorities */
  -    pNewrc->m_ppSectvec = calloc(pNewrc->m_pAnal->m_nRcs *\
  -        pNewrc->m_pAnal->m_nSecs, sizeof(rc_section_t *));
  -/*    for (nIter = 0; nIter < pNewrc->m_pAnal->m_nRcs; nIter++)
  -        pNewrc->m_ppSectvec[nIter] = sectionNew();*/
  +    pNewrc->m_ppLabvec = calloc(pNewrc->m_pAnal->m_nRcs, sizeof(rc_label_t *));
   
       return(pNewrc);
   }
  @@ -80,11 +74,11 @@
   ************************************************/
   rc_return_t procPopulate(rc_proc_t *pRc)
   {
  -    int i       = 0;
  +    int nSect   = 0;
       int nFdrc   = 0;
       int nFdfunc = 0;
       int nRet    = 0;
  -    int nIter   = 0;
  +    int nRc     = 0;
       ex_t Except;
   
       char         *sBuf        = NULL;
  @@ -118,15 +112,18 @@
       }
   
       /* Iteratively read possibly globbed rc files */
  -    for (nIter = 0; nIter < pRc->m_pAnal->m_nRcs; nIter++)
  +    for (nRc = 0; nRc < pRc->m_pAnal->m_nRcs; nRc++)
       {
           assert(*pRc->m_pAnal->m_szRcs); /* If one of these assertions fail, */
           assert(pRc->m_pAnal->m_szLocs); /* you've probably seen the ex_ bug */
   
  +        /* Construct a new label */
  +        pRc->m_ppLabvec[nRc] = labelNew(pRc->m_pAnal->m_szRcs[nRc]);
  +
           /* Build the path name */
  -        szLocex = (char *)malloc(strlen(pRc->m_pAnal->m_szLocs) + strlen(pRc->m_pAnal->m_szRcs[nIter]) + 2);
  +        szLocex = (char *)malloc(strlen(pRc->m_pAnal->m_szLocs) + strlen(pRc->m_pAnal->m_szRcs[nRc]) + 2);
           strcpy(szLocex, pRc->m_pAnal->m_szLocs);
  -        strcat(szLocex, pRc->m_pAnal->m_szRcs[nIter]);
  +        strcat(szLocex, pRc->m_pAnal->m_szRcs[nRc]);
   
           /* Open the rc file unconditionally */
           if ((nFdrc = open(szLocex, O_RDONLY)) == -1)
  @@ -150,16 +147,17 @@
                   pSec = NULL;            /* Cleanup */
               }
   
  -            for (i = 0; pRc->m_pAnal->m_pszSecs[i]; i++) { /* Iterate over */
  +            for (nSect = 0; pRc->m_pAnal->m_pszSecs[nSect]; nSect++) { /* Iterate over */
  +
                   /* Extract a section from the temp script, and append it */
  -                pSec = scriptSection(pTempscript, pRc->m_pAnal->m_pszSecs[i]);
  +                pSec = scriptSection(pTempscript, pRc->m_pAnal->m_pszSecs[nSect]);
   
                   if (pSec) /* Only copy if the section lookup succeeds */
  -                    pRc->m_ppSectvec[pRc->m_pAnal->m_nSecs * nIter + i] = sectionCopy(pSec);
  +                    labelAppendsec(pRc->m_ppLabvec[nRc], sectionCopy(pSec));
                   else if (configGetval(RC_DBG_VAL)) /* Only show if debug set */
                       fprintf(stderr, "#Warning: Missing section '%s' in %s!\n",\
  -                        pRc->m_pAnal->m_pszSecs[i],\
  -                        pRc->m_pAnal->m_szRcs[nIter]);
  +                        pRc->m_pAnal->m_pszSecs[nSect],\
  +                        pRc->m_pAnal->m_szRcs[nRc]);
   
                   if (pSec)   /* Cleanup iterative section string */
                       sectionDelete(pSec);
  @@ -193,14 +191,14 @@
   ************************************************/
   rc_return_t procRun(rc_proc_t *pRc)
   {
  -    int   nIter    = 0;
  -    int   nTotsecs = pRc->m_pAnal->m_nRcs * pRc->m_pAnal->m_nSecs;
  +    int   nRcs  = 0;
  +    int   nSecs = 0;
       char *pszVec[RC_EXEC_MAXARGS];
   
  -    /* Conditionally sort the section vector according to explicit priority */
  +    /* Conditionally sort the section vector according to explicit priority
       if (!strcmp(configGetrcfile(), RC_GLOB_WILD)) {
           qsort((void *)pRc->m_ppSectvec, (size_t)nTotsecs, sizeof (rc_section_t *), priCompare);
  -    }
  +    } */
   
       /****************************************************/
       /* This will execute, evaluate, or print the script */
  @@ -219,21 +217,25 @@
               TRACE("Bad, execvp for common script in child returned -1");
               return(RC_THROW(RC_ERR_INT));
           }
  -        for (nIter = 0; nIter < nTotsecs; nIter++) {
  -            if (pRc->m_ppSectvec[nIter]) {
  -                pszVec[2] = (char *)sectionGetdata(pRc->m_ppSectvec[nIter]);
  -                if (execvp(*pszVec, pszVec) == -1) {             /* launch */
  -                    TRACE("Bad, execvp for subsection in child returned -1");
  -                    return(RC_THROW(RC_ERR_INT));
  +        for (nRcs = 0; nRcs < pRc->m_pAnal->m_nRcs; nRcs++) {
  +            for (nSecs = 0; nSecs < pRc->m_pAnal->m_nSecs; nSecs++) {
  +                if (pRc->m_ppLabvec[nRcs]->m_ppSecvec[nSecs]) {
  +                    pszVec[2] = (char *)sectionGetdata(pRc->m_ppLabvec[nRcs]->m_ppSecvec[nSecs]);
  +                    if (execvp(*pszVec, pszVec) == -1) {             /* launch */
  +                        TRACE("Bad, execvp for subsection in child returned -1");
  +                        return(RC_THROW(RC_ERR_INT));
  +                    }
                   }
               }
           }
       }
       else if (configGetval(RC_PRN_VAL)) {                         /* Print  */
           scriptDump(pRc->m_pScriptcom);
  -        for (nIter = 0; nIter < nTotsecs; nIter++) {
  -            if (pRc->m_ppSectvec[nIter])
  -                sectionDump(pRc->m_ppSectvec[nIter]);
  +        for (nRcs = 0; nRcs < pRc->m_pAnal->m_nRcs; nRcs++) {
  +            for (nSecs = 0; nSecs < pRc->m_pAnal->m_nSecs; nSecs++) {
  +                if (pRc->m_ppLabvec[nRcs]->m_ppSecvec && pRc->m_ppLabvec[nRcs]->m_ppSecvec[nSecs])
  +                    sectionDump(pRc->m_ppLabvec[nRcs]->m_ppSecvec[nSecs]);
  +            }
           }
       }
       else /* Something is wrong here */
  @@ -248,17 +250,17 @@
   ************************************************/
   rc_return_t procDelete(rc_proc_t *pRc)
   {
  -    int nSecvec = pRc->m_pAnal->m_nRcs * pRc->m_pAnal->m_nSecs;
  +    int nRcs = pRc->m_pAnal->m_nRcs;
   
  -    /* Destroy the section vector */
  -    while (nSecvec-- > 0) {
  -        if (pRc->m_ppSectvec[nSecvec]) {
  -            sectionDelete(pRc->m_ppSectvec[nSecvec]);
  -            pRc->m_ppSectvec[nSecvec] = NULL;
  +    /* Destroy the label vector */
  +    while (nRcs-- > 0) {
  +        if (pRc->m_ppLabvec[nRcs]) {
  +            labelDelete(pRc->m_ppLabvec[nRcs]);
  +            pRc->m_ppLabvec[nRcs] = NULL;
           }
       }
  -    free(pRc->m_ppSectvec);
  -    pRc->m_ppSectvec = NULL;
  +    free(pRc->m_ppLabvec);
  +    pRc->m_ppLabvec = NULL;
       scriptDelete(pRc->m_pScriptcom);    /* Destroy the script        */
       analDelete(pRc->m_pAnal);           /* Destroy the analyser      */
       free(pRc);                          /* Free the processor itself */
  @@ .

From ossp-cvs-owner@ossp.org  Tue May 20 17:06:45 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 62B9776D1A; Tue, 20 May 2003 17:06:45 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc.h rc_anal.c rc_lab.c rc_private.h rc_proc....
Message-Id: <20030520150645.62B9776D1A@mail.ossp.org>
Date: Tue, 20 May 2003 17:06:45 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   20-May-2003 17:06:45
  Branch: HEAD                             Handle: 2003052016064101

  Modified files:
    ossp-pkg/rc             rc.h rc_anal.c rc_lab.c rc_private.h rc_proc.c
                            rc_script.c rc_sect.c

  Log:
    Implement rc label ordered command printing and execution.

  Summary:
    Revision    Changes     Path
    1.45        +1  -1      ossp-pkg/rc/rc.h
    1.14        +5  -4      ossp-pkg/rc/rc_anal.c
    1.2         +27 -7      ossp-pkg/rc/rc_lab.c
    1.27        +1  -0      ossp-pkg/rc/rc_private.h
    1.27        +32 -20     ossp-pkg/rc/rc_proc.c
    1.18        +1  -1      ossp-pkg/rc/rc_script.c
    1.8         +9  -3      ossp-pkg/rc/rc_sect.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc.h
  ============================================================================
  $ cvs diff -u -r1.44 -r1.45 rc.h
  --- ossp-pkg/rc/rc.h	20 May 2003 11:46:25 -0000	1.44
  +++ ossp-pkg/rc/rc.h	20 May 2003 15:06:41 -0000	1.45
  @@ -123,7 +123,7 @@
   rc_return_t labelDelete(rc_label_t *);
   
   /* Section function prototypes */
  -rc_section_t *sectionNew(void);
  +rc_section_t *sectionNew(const char *);
   rc_section_t *sectionCopy(rc_section_t *);
   const int sectionGetpri(rc_section_t *);
   const int sectionGetuid(rc_section_t *);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_anal.c
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 rc_anal.c
  --- ossp-pkg/rc/rc_anal.c	15 May 2003 12:49:11 -0000	1.13
  +++ ossp-pkg/rc/rc_anal.c	20 May 2003 15:06:41 -0000	1.14
  @@ -65,8 +65,7 @@
           (*ppInst)->m_szRcs = malloc(sizeof(char **));
           if (strcmp(kszName, RC_GLOB_WILD)) {
               (*ppInst)->m_szRcs = malloc(sizeof(*((*ppInst)->m_szRcs)));
  -            *(*ppInst)->m_szRcs = strdup("rc."); /* FIXME: Remove hardcoded */
  -            strcat(*(*ppInst)->m_szRcs, kszName);
  +            *(*ppInst)->m_szRcs = strdup(kszName);
               (*ppInst)->m_nRcs = 1;            /* We handle just one rc file */
           }
           else { /* Wildcard rcfile indicates we must glob the locs directories */
  @@ -203,8 +202,10 @@
           (*ppInst)->m_szRcs = malloc(sizeof((*((*ppInst)->m_szRcs))) * (nCount + 1));
   
       /* Loop through file index setting rc file names according to dirent */
  -    for (nIter = 0; nIter < nCount; ++nIter)
  -        (*ppInst)->m_szRcs[nIter] = strdup((*pppFiles)[nIter]->d_name);
  +    for (nIter = 0; nIter < nCount; ++nIter) {
  +        (*ppInst)->m_szRcs[nIter] = strdup((*pppFiles)[nIter]->d_name +\
  +            strlen("rc.") * sizeof(char));
  +    }
       (*ppInst)->m_szRcs[nIter] = NULL; /* Terminate */
       (*ppInst)->m_nRcs = nCount; /* Store how many globbed files there are */
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_lab.c
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 rc_lab.c
  --- ossp-pkg/rc/rc_lab.c	20 May 2003 11:45:11 -0000	1.1
  +++ ossp-pkg/rc/rc_lab.c	20 May 2003 15:06:41 -0000	1.2
  @@ -60,15 +60,35 @@
   rc_return_t labelAppendsec(rc_label_t *pLabel, rc_section_t *pInsec)
   {
       assert(pLabel); /* Label parameter must be valid */
  +    if (!pInsec)    /* Check sanity */
  +        return(RC_THROW(RC_ERR_USE));
   
  -    if (pInsec) {
  -        pLabel->m_ppSecvec = realloc(pLabel->m_ppSecvec, sizeof(rc_section_t *)\
  -            * (pLabel->m_nSecs + 1));
  -        pLabel->m_ppSecvec[pLabel->m_nSecs++] = pInsec; /* Just copy pointer */
  +    /* First make our vector larger to hold one more section */
  +    pLabel->m_ppSecvec = realloc(pLabel->m_ppSecvec, sizeof(rc_section_t *)\
  +        * (pLabel->m_nSecs + 1));
  +    pLabel->m_ppSecvec[pLabel->m_nSecs] = sectionNew(pInsec->m_szName);
  +
  +    /* Simple value copy */
  +    pLabel->m_ppSecvec[pLabel->m_nSecs]->m_nPri  = pInsec->m_nPri;
  +    pLabel->m_ppSecvec[pLabel->m_nSecs]->m_nUid  = pInsec->m_nUid;
  +    pLabel->m_ppSecvec[pLabel->m_nSecs]->m_Bytes = pInsec->m_Bytes;
  +
  +    /* Deep copy of user name */
  +    if (pInsec->m_szLogin) {
  +        pLabel->m_ppSecvec[pLabel->m_nSecs]->m_szLogin =\
  +            malloc((strlen(pInsec->m_szLogin) + sizeof(char)) * sizeof(char));
  +        strcpy(pLabel->m_ppSecvec[pLabel->m_nSecs]->m_szLogin, pInsec->m_szLogin);
       }
  -    else
  -        TRACE("Problem with labelAppendsec");
  -/*        return(RC_THROW(RC_ERR_USE));*/
  +
  +    /* Deep copy of section text */
  +    if (pInsec->m_szData) {
  +        pLabel->m_ppSecvec[pLabel->m_nSecs]->m_szData =\
  +            malloc((strlen(pInsec->m_szData) + sizeof(char)) * sizeof(char));
  +        strcpy(pLabel->m_ppSecvec[pLabel->m_nSecs]->m_szData, pInsec->m_szData);
  +    }
  +
  +    /* Finally increment section count */
  +    pLabel->m_nSecs++;
   
       return(RC_THROW(RC_OK));
   }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_private.h
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 rc_private.h
  --- ossp-pkg/rc/rc_private.h	20 May 2003 11:46:25 -0000	1.26
  +++ ossp-pkg/rc/rc_private.h	20 May 2003 15:06:42 -0000	1.27
  @@ -90,6 +90,7 @@
   typedef struct {
       int m_nPri;
       int m_nUid;
  +    char *m_szName;
       char *m_szLogin;
       char *m_szData;
       size_t m_Bytes;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	20 May 2003 11:47:51 -0000	1.26
  +++ ossp-pkg/rc/rc_proc.c	20 May 2003 15:06:42 -0000	1.27
  @@ -123,6 +123,7 @@
           /* Build the path name */
           szLocex = (char *)malloc(strlen(pRc->m_pAnal->m_szLocs) + strlen(pRc->m_pAnal->m_szRcs[nRc]) + 2);
           strcpy(szLocex, pRc->m_pAnal->m_szLocs);
  +        strcat(szLocex, "rc."); /* FIXME: Make the prefix configurable */
           strcat(szLocex, pRc->m_pAnal->m_szRcs[nRc]);
   
           /* Open the rc file unconditionally */
  @@ -147,20 +148,22 @@
                   pSec = NULL;            /* Cleanup */
               }
   
  -            for (nSect = 0; pRc->m_pAnal->m_pszSecs[nSect]; nSect++) { /* Iterate over */
  -
  +            for (nSect = 0; nSect < pRc->m_pAnal->m_nSecs; nSect++) { /* Iterate over */
                   /* Extract a section from the temp script, and append it */
                   pSec = scriptSection(pTempscript, pRc->m_pAnal->m_pszSecs[nSect]);
   
  -                if (pSec) /* Only copy if the section lookup succeeds */
  -                    labelAppendsec(pRc->m_ppLabvec[nRc], sectionCopy(pSec));
  +                if (pSec) { /* Only copy if the section lookup succeeds */
  +                    labelAppendsec(pRc->m_ppLabvec[nRc], pSec);
  +                }
                   else if (configGetval(RC_DBG_VAL)) /* Only show if debug set */
                       fprintf(stderr, "#Warning: Missing section '%s' in %s!\n",\
                           pRc->m_pAnal->m_pszSecs[nSect],\
                           pRc->m_pAnal->m_szRcs[nRc]);
   
  -                if (pSec)   /* Cleanup iterative section string */
  +                if (pSec) { /* Cleanup iterative section string */
                       sectionDelete(pSec);
  +                    pSec = NULL;
  +                }
               }
           }
           catch(Except)
  @@ -191,6 +194,7 @@
   ************************************************/
   rc_return_t procRun(rc_proc_t *pRc)
   {
  +    int   nTmp  = 0;
       int   nRcs  = 0;
       int   nSecs = 0;
       char *pszVec[RC_EXEC_MAXARGS];
  @@ -206,37 +210,45 @@
       /* Eval  - Print machine evaluatable format         */
       /* Print - Print human readable format              */
       /****************************************************/
  -    if (configGetval(RC_EVL_VAL))                              /* Evaluate */
  +    if (configGetval(RC_EVL_VAL))                               /* Evaluate */
           fprintf(stderr, "Error: Evaluate is not implemented yet.\n"); /* FIX */
  -    else if (configGetval(RC_EXC_VAL)) {                       /* Execute  */
  +    else if (configGetval(RC_EXC_VAL)) {                        /* Execute  */
           pszVec[0] = "/bin/sh";
           pszVec[1] = "-c";
           pszVec[2] = (char *)scriptTostring(pRc->m_pScriptcom);
           pszVec[3] = NULL;   /* Add a NULL to mark the end of the chain */
  -        if (execvp(*pszVec, pszVec) == -1) {                     /* launch */
  +        if (execvp(*pszVec, pszVec) == -1) {                    /* launch */
               TRACE("Bad, execvp for common script in child returned -1");
               return(RC_THROW(RC_ERR_INT));
           }
  -        for (nRcs = 0; nRcs < pRc->m_pAnal->m_nRcs; nRcs++) {
  -            for (nSecs = 0; nSecs < pRc->m_pAnal->m_nSecs; nSecs++) {
  -                if (pRc->m_ppLabvec[nRcs]->m_ppSecvec[nSecs]) {
  -                    pszVec[2] = (char *)sectionGetdata(pRc->m_ppLabvec[nRcs]->m_ppSecvec[nSecs]);
  -                    if (execvp(*pszVec, pszVec) == -1) {             /* launch */
  +        for (nSecs = 0; nSecs < pRc->m_pAnal->m_nSecs; nSecs++)
  +            for (nRcs = 0; nRcs < pRc->m_pAnal->m_nRcs; nRcs++) {
  +                nTmp = 0;
  +                while (nTmp < pRc->m_ppLabvec[nRcs]->m_nSecs && \
  +                    strcmp(pRc->m_ppLabvec[nRcs]->m_ppSecvec[nTmp]->m_szName, \
  +                                pRc->m_pAnal->m_pszSecs[nSecs]))
  +                    nTmp++;
  +                if (nTmp < pRc->m_ppLabvec[nRcs]->m_nSecs) {
  +                    pszVec[2] = (char *)sectionGetdata(pRc->m_ppLabvec[nRcs]->m_ppSecvec[nTmp]);
  +                    if (execvp(*pszVec, pszVec) == -1) {        /* launch */
                           TRACE("Bad, execvp for subsection in child returned -1");
                           return(RC_THROW(RC_ERR_INT));
                       }
                   }
               }
  -        }
       }
  -    else if (configGetval(RC_PRN_VAL)) {                         /* Print  */
  +    else if (configGetval(RC_PRN_VAL)) {                        /* Print  */
           scriptDump(pRc->m_pScriptcom);
  -        for (nRcs = 0; nRcs < pRc->m_pAnal->m_nRcs; nRcs++) {
  -            for (nSecs = 0; nSecs < pRc->m_pAnal->m_nSecs; nSecs++) {
  -                if (pRc->m_ppLabvec[nRcs]->m_ppSecvec && pRc->m_ppLabvec[nRcs]->m_ppSecvec[nSecs])
  -                    sectionDump(pRc->m_ppLabvec[nRcs]->m_ppSecvec[nSecs]);
  +        for (nSecs = 0; nSecs < pRc->m_pAnal->m_nSecs; nSecs++)
  +            for (nRcs = 0; nRcs < pRc->m_pAnal->m_nRcs; nRcs++) {
  +                nTmp = 0;
  +                while (nTmp < pRc->m_ppLabvec[nRcs]->m_nSecs && \
  +                    strcmp(pRc->m_ppLabvec[nRcs]->m_ppSecvec[nTmp]->m_szName, \
  +                                pRc->m_pAnal->m_pszSecs[nSecs]))
  +                    nTmp++;
  +                if (nTmp < pRc->m_ppLabvec[nRcs]->m_nSecs)
  +                    sectionDump(pRc->m_ppLabvec[nRcs]->m_ppSecvec[nTmp]);
               }
  -        }
       }
       else /* Something is wrong here */
           return(RC_THROW(RC_ERR_INT));
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_script.c
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 rc_script.c
  --- ossp-pkg/rc/rc_script.c	16 May 2003 18:43:31 -0000	1.17
  +++ ossp-pkg/rc/rc_script.c	20 May 2003 15:06:42 -0000	1.18
  @@ -183,7 +183,7 @@
               /* Handle the section body */
               piStart   = piBlocend + *(pnVec + 6);
               piEnd     = piBlocend + *(pnVec + 7);
  -            pSec = sectionNew();
  +            pSec = sectionNew(kszSecname);
               sectionSetndata(pSec, piStart, piEnd - piStart);
   
               /* FIXME: Implement --ParseSectionParam for extra gravy */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_sect.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 rc_sect.c
  --- ossp-pkg/rc/rc_sect.c	19 May 2003 19:03:06 -0000	1.7
  +++ ossp-pkg/rc/rc_sect.c	20 May 2003 15:06:42 -0000	1.8
  @@ -34,10 +34,10 @@
   
   
   /************************************************
  -* sectionNew(void)                              *
  +* sectionNew(const char *)                      *
   * Construct a section                           *
   ************************************************/
  -rc_section_t *sectionNew(void)
  +rc_section_t *sectionNew(const char *szName)
   {
       rc_section_t *pSec = NULL;
   
  @@ -45,7 +45,11 @@
       /* This code would probably have more bugs if the coffee was not as good */
       pSec = (rc_section_t *)calloc(1, sizeof(rc_section_t));
   
  -    if (!pSec)
  +    if (pSec) {
  +        pSec->m_szName = malloc((strlen(szName) + 1) * sizeof(char));
  +        strcpy(pSec->m_szName, szName);
  +    }
  +    else
           RC_THROW(RC_ERR_MEM);
   
       return(pSec);
  @@ -239,6 +243,8 @@
       if (pSec) {
           if (pSec->m_szData)
               free(pSec->m_szData);
  +        if (pSec->m_szName)
  +            free(pSec->m_szName);
           if (pSec->m_szLogin)
               free(pSec->m_szLogin);
           free(pSec);
  @@ .

From ossp-cvs-owner@ossp.org  Tue May 20 17:47:27 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9686076D11; Tue, 20 May 2003 17:47:26 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ Makefile.in fsl.c fsl_test.c
Message-Id: <20030520154726.9686076D11@mail.ossp.org>
Date: Tue, 20 May 2003 17:47:26 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   20-May-2003 17:47:26
  Branch: HEAD                             Handle: 2003052016472300

  Modified files:
    ossp-pkg/fsl            Makefile.in fsl.c fsl_test.c

  Log:
    - improve prefixing by renaming variables
        l2_fslenv                  > fsldebug_l2_env
        l2_fslnch                  > fsldebug_l2_nch
        triedopenfsldebug          > fsldebug_transientproblem
        openfsldebugpermanenterror > fsldebug_permanentproblem
    - add function fsldebugcreate()
    - rename functions and slightly change their operation to work in a
      stealth mode for LOG_NDELAY support
                 openfsldebug() > fsl
                  closefsllog() > fsldebugdestroy()
    - make fsldebug() a metafunction and split the old functionality into
      fsldebugl2() for l2 and fsldebugf2() for stderr filedescriptor
    - improve prefixing by adding debugging prototypes to support fsldebug()
      calling fsldebugcreate() which uses fsldebug() for logging
        static void fsldebugcreate (void);
        static void fsldebug       (l2_level_t, const char *, ...);
        static int  fsldebugl2     (l2_level_t, const char *, va_list);
        static int  fsldebugf2     (l2_level_t, const char *, va_list);
        static void fsldebugdestroy(void);
    - change default for delayopen to TRUE as user has to use LOG_NDELAY to
      force immediate open.
    - improve handling of NULL strings when debugging
    - unify debugging messages on entry to captured functions using common
      prefix 'fsl in ...'
    - obey LOG_NDELAY on fsl debugging as well
    - add filedescriptor consumption checks to test suite
    - remove confusing use of the word "error" in test suite messages
    - improve Makefile to prepare and detect empty files
    - tested on FreeBSD, Linux and Solaris
    - not intended for release - further modifications are underway

  Summary:
    Revision    Changes     Path
    1.14        +5  -3      ossp-pkg/fsl/Makefile.in
    1.57        +170 -94    ossp-pkg/fsl/fsl.c
    1.5         +45 -3      ossp-pkg/fsl/fsl_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 Makefile.in
  --- ossp-pkg/fsl/Makefile.in	6 Jan 2003 16:41:21 -0000	1.13
  +++ ossp-pkg/fsl/Makefile.in	20 May 2003 15:47:23 -0000	1.14
  @@ -115,13 +115,15 @@
   
   test: check
   check: $(TST_NAME)
  -	@$(RM) fsl_test.debug >/dev/null 2>&1 || true; \
  -	$(RM) fsl_test.syslog >/dev/null 2>&1 || true; \
  +	@[ -f fsl_test.debug  ] && $(RM) fsl_test.debug  || true
  +	@[ -f fsl_test.syslog ] && $(RM) fsl_test.syslog || true
  +	@true && \
   	FSL_CFGDIR=.; export FSL_CFGDIR; \
   	FSL_PREFIX=fsl_test.cfg; export FSL_PREFIX; \
   	FSL_DEBUG="trace: file(path=fsl_test.debug)"; export FSL_DEBUG; \
   	$(LIBTOOL) --mode=execute ./$(TST_NAME)
  -	@echo "fsl_test.syslog:"; cat fsl_test.syslog
  +	@echo "fsl_test.syslog:"; if [ -s fsl_test.syslog ]; then cat fsl_test.syslog; else echo " ***EMPTY***"; fi
  +	#echo "fsl_test.debug:";  if [ -s fsl_test.debug  ]; then cat fsl_test.debug;  else echo " ***EMPTY***"; fi
   
   install: all
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl.c
  ============================================================================
  $ cvs diff -u -r1.56 -r1.57 fsl.c
  --- ossp-pkg/fsl/fsl.c	6 Jan 2003 16:41:21 -0000	1.56
  +++ ossp-pkg/fsl/fsl.c	20 May 2003 15:47:23 -0000	1.57
  @@ -177,8 +177,6 @@
   
   /* internal global context structure */
   static struct {
  -    l2_env_t     *l2_fslenv;
  -    l2_channel_t *l2_fslnch;
       l2_env_t     *l2_env;
       l2_channel_t *l2_nch;
       levelmap_t   *levelmap;
  @@ -186,40 +184,167 @@
       int           logopt;
       int           delayopen;
       int           triedopenlog;
  -    int           triedopenfsldebug;
  -    int           openfsldebugpermanenterror;
  +    /* fsl debugging */
  +    l2_env_t     *fsldebug_l2_env;
  +    l2_channel_t *fsldebug_l2_nch;
  +    int           fsldebug_transientproblem;
  +    int           fsldebug_permanentproblem;
   } ctx = { 
       NULL,
       NULL,
       NULL,
  -    NULL,
  -    NULL,
       LOG_UPTO(LOG_DEBUG),
       0,
  +    TRUE,
       FALSE,
  -    FALSE,
  +    /* fsl debugging */
  +    NULL,
  +    NULL,
       FALSE,
       FALSE
   };
   
  -/* internal debugging function */
  +/* internal debugging prototypes */
  +static void fsldebugcreate (void);
  +static void fsldebug       (l2_level_t, const char *, ...);
  +static int  fsldebugl2     (l2_level_t, const char *, va_list);
  +static int  fsldebugf2     (l2_level_t, const char *, va_list);
  +static void fsldebugdestroy(void);
  +
  +/* internal debugging functions */
  +static void fsldebugcreate()
  +{
  +    int rc = FSL_OK;
  +    char *argl2spec;
  +    l2_result_t l2rv;
  +    char *cp; /* scratch variable */
  +    l2_channel_t *ch; /* scratch variable */
  +
  +    /* identify previous fault and avoid repetition */
  +    if (ctx.fsldebug_permanentproblem || ctx.fsldebug_transientproblem)
  +        return;
  +
  +    /* create OSSP l2 environment for fsl itself (internal logging) */
  +    if ((argl2spec = getenv("FSL_DEBUG")) == NULL)
  +        argl2spec = FSL_DEBUG;
  +    if (strlen(argl2spec) > 0) {
  +        if ((l2rv = l2_env_create(&ctx.fsldebug_l2_env)) != L2_OK) {
  +            cp = l2_env_strerror(ctx.fsldebug_l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: failed to create L2 environment (%d) for fsl", l2rv); CU(FSL_ERR_INT); }
  +        if ((l2rv = l2_env_levels(ctx.fsldebug_l2_env, L2_LEVEL_ALL, L2_LEVEL_NONE)) != L2_OK) {
  +            cp = l2_env_strerror(ctx.fsldebug_l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to set global logging level defaults %s(%d) for fsl", cp, l2rv); CU(FSL_ERR_INT); }
  +        if ((l2rv = l2_env_formatter(ctx.fsldebug_l2_env, 'D', l2_util_fmt_dump, NULL)) != L2_OK) {
  +            cp = l2_env_strerror(ctx.fsldebug_l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to register dump formatter %s(%d) for fsl", cp, l2rv); CU(FSL_ERR_INT); }
  +        if ((l2rv = l2_env_formatter(ctx.fsldebug_l2_env, 'S', l2_util_fmt_string, NULL)) != L2_OK) {
  +            cp = l2_env_strerror(ctx.fsldebug_l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to register string formatter %s(%d) for fsl", cp, l2rv); CU(FSL_ERR_INT); }
  +        if ((l2rv = l2_env_formatter(ctx.fsldebug_l2_env, 'm', l2_util_fmt_errno, NULL)) != L2_OK) {
  +            cp = l2_env_strerror(ctx.fsldebug_l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to register errno formatter %s(%d) for fsl", cp, l2rv); CU(FSL_ERR_INT); }
  +        if ((l2rv = l2_channel_create(&ctx.fsldebug_l2_nch, ctx.fsldebug_l2_env, "noop")) != L2_OK) {
  +            cp = l2_env_strerror(ctx.fsldebug_l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to create noop channel; %s(%d) for fsl", cp, l2rv); CU(FSL_ERR_INT); }
  +        if ((l2rv = l2_spec(&ch, ctx.fsldebug_l2_env, "%s", argl2spec)) != L2_OK) {
  +            cp = l2_env_strerror(ctx.fsldebug_l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to create stream from spec %s(%d) for fsl", cp, l2rv);
  +            if (l2rv == L2_ERR_ARG)
  +                CU(FSL_ERR_ARG);
  +            else
  +                CU(FSL_ERR_INT);
  +        }
  +        if ((l2rv = l2_channel_link(ctx.fsldebug_l2_nch, L2_LINK_CHILD, ch, NULL)) != L2_OK) {
  +            cp = l2_env_strerror(ctx.fsldebug_l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to link child channel %s(%d) for fsl", cp, l2rv); CU(FSL_ERR_INT); }
  +        if ((~ctx.logopt & LOG_NDELAY) && (ctx.delayopen == TRUE)) {
  +            fsldebug(L2_LEVEL_ERROR, "openlog: LOG_NDELAY unused forces debugging to use stealth mode until first syslog"); }
  +        else {
  +            if ((l2rv = l2_channel_open(ctx.fsldebug_l2_nch)) != L2_OK) {
  +                cp = l2_env_strerror(ctx.fsldebug_l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to open channel stream %s(%d) for fsl", cp, l2rv); CU(FSL_ERR_INT); }
  +        }
  +    }
  +CUS:
  +    if (rc == FSL_ERR_ARG)
  +        ctx.fsldebug_permanentproblem = TRUE;
  +    if (rc != FSL_OK)
  +        fsldebugdestroy();
  +}
  +
   static void fsldebug(l2_level_t level, const char *message, ...)
   {
       va_list ap;
  -    char cp[8];
   
       va_start(ap, message);
  -    /* note that a L2_ERR_USE is only returned by l2_channel_vlog() if the channel is not yet open */
  -    if (ctx.l2_fslnch == NULL || (l2_channel_vlog(ctx.l2_fslnch, level, message, ap) == L2_ERR_USE))
  -        if (level & L2_LEVEL_UPTO(L2_LEVEL_ERROR)) {
  -            fprintf( stderr, "%s: ", l2_util_l2s(cp, sizeof(cp), '\0', level) == L2_OK ? cp[0]&=0xDF, cp : "Log");
  -            vfprintf(stderr, message, ap);
  -            fprintf( stderr, "\n");
  -    }
  +    fsldebugl2(level, message, ap) || fsldebugf2(level, message, ap);
       va_end(ap);
       return;
   }
   
  +static int fsldebugl2(l2_level_t level, const char *message, va_list ap)
  +{
  +    int rc = FALSE; /* the pessimist */
  +    l2_result_t l2rv;
  +    char *cp;
  +
  +    /* identify previous fault and avoid repetition */
  +    if (ctx.fsldebug_permanentproblem || ctx.fsldebug_transientproblem)
  +        return rc;
  +        
  +    /* nothing has been prepared, so do it now */
  +    if (ctx.fsldebug_l2_nch == NULL)
  +        fsldebugcreate();
  +
  +    /* identify previous fault and avoid repetition */
  +    if (ctx.fsldebug_permanentproblem || ctx.fsldebug_transientproblem)
  +        return rc;
  +
  +    /* preparation failed */
  +    if (ctx.fsldebug_l2_nch == NULL)
  +        return rc;
  +
  +    /* try logging, L2_ERR_USE only occurs if channel is not yet open */
  +    if ((l2rv = l2_channel_vlog(ctx.fsldebug_l2_nch, level, message, ap)) == L2_ERR_USE) {
  +        if ((l2rv = l2_channel_open(ctx.fsldebug_l2_nch)) != L2_OK) {
  +            ctx.fsldebug_transientproblem = TRUE; /* avoid loop from fsldebug() in next line */
  +            cp = l2_env_strerror(ctx.fsldebug_l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to open channel stream %s(%d) for fsl", cp, l2rv);
  +            ctx.fsldebug_transientproblem = FALSE; /* opening the channel might work at next attempt */
  +            return rc;
  +        }
  +        l2rv = l2_channel_vlog(ctx.fsldebug_l2_nch, level, message, ap);
  +    }
  +
  +    if (l2rv == L2_OK)
  +        rc = TRUE;
  +
  +    /* if openlog(3) "did not request LOG_NDELAY" aka "did request delay" (~ctx.logopt & LOG_NDELAY),
  +     * until a syslog(3) was tried (ctx.delayopen == TRUE), operate in stealth mode by closing channel
  +     */
  +    if ((~ctx.logopt & LOG_NDELAY) && (ctx.delayopen == TRUE))
  +        (void)l2_channel_close(ctx.fsldebug_l2_nch);
  +
  +    return rc;
  +}
  +
  +static int fsldebugf2(l2_level_t level, const char *message, va_list ap)
  +{
  +    int rc = TRUE; /* the optimist */
  +    char cp[8];
  +
  +    if (level & L2_LEVEL_UPTO(L2_LEVEL_ERROR)) {
  +        fprintf( stderr, "%s: ", l2_util_l2s(cp, sizeof(cp), '\0', level) == L2_OK ? cp[0]&=0xDF, cp : "Log");
  +        vfprintf(stderr, message, ap);
  +        fprintf( stderr, "\n");
  +    }
  +    return rc;
  +}
  +
  +static void fsldebugdestroy()
  +{
  +    if (ctx.fsldebug_l2_nch != NULL) {
  +        l2_channel_destroy(ctx.fsldebug_l2_nch);
  +        ctx.fsldebug_l2_nch = NULL;
  +    }
  +    if (ctx.fsldebug_l2_env != NULL) {
  +        l2_env_destroy(ctx.fsldebug_l2_env);
  +        ctx.fsldebug_l2_env = NULL;
  +    }
  +    ctx.fsldebug_transientproblem = FALSE;
  +    /*  fsldebug_permanentproblem kept */
  +}
  +
   /* append contents of a file to buffer */
   static fsl_rc_t appendfiletobuffer(buf_t *buffer, const char *filename)
   {
  @@ -613,68 +738,6 @@
       return rc;
   }
   
  -static void closefsllog()
  -{
  -    if (ctx.l2_fslnch != NULL) {
  -        l2_channel_destroy(ctx.l2_fslnch);
  -        ctx.l2_fslnch = NULL;
  -    }
  -    if (ctx.l2_fslenv != NULL) {
  -        l2_env_destroy(ctx.l2_fslenv);
  -        ctx.l2_fslenv = NULL;
  -    }
  -    ctx.triedopenfsldebug = FALSE;
  -}
  -
  -static void openfsldebug()
  -{
  -    int rc = FSL_OK;
  -    char *argl2spec;
  -    l2_result_t   l2rv;
  -    char *cp; /* scratch variable */
  -    l2_channel_t *ch; /* scratch variable */
  -
  -    if (ctx.triedopenfsldebug || ctx.openfsldebugpermanenterror)
  -        return;
  -
  -    /* properly prepare for repeated execution */
  -    ctx.triedopenfsldebug = TRUE;
  -
  -    /* create OSSP l2 environment for fsl itself (internal logging) */
  -    if ((argl2spec = getenv("FSL_DEBUG")) == NULL)
  -        argl2spec = FSL_DEBUG;
  -    if (strlen(argl2spec) > 0) {
  -        if ((l2rv = l2_env_create(&ctx.l2_fslenv)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: failed to create L2 environment (%d) for fsl", l2rv); CU(FSL_ERR_INT); }
  -        if ((l2rv = l2_env_levels(ctx.l2_fslenv, L2_LEVEL_ALL, L2_LEVEL_NONE)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to set global logging level defaults %s(%d) for fsl", cp, l2rv); CU(FSL_ERR_INT); }
  -        if ((l2rv = l2_env_formatter(ctx.l2_fslenv, 'D', l2_util_fmt_dump, NULL)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to register dump formatter %s(%d) for fsl", cp, l2rv); CU(FSL_ERR_INT); }
  -        if ((l2rv = l2_env_formatter(ctx.l2_fslenv, 'S', l2_util_fmt_string, NULL)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to register string formatter %s(%d) for fsl", cp, l2rv); CU(FSL_ERR_INT); }
  -        if ((l2rv = l2_env_formatter(ctx.l2_fslenv, 'm', l2_util_fmt_errno, NULL)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to register errno formatter %s(%d) for fsl", cp, l2rv); CU(FSL_ERR_INT); }
  -        if ((l2rv = l2_channel_create(&ctx.l2_fslnch, ctx.l2_fslenv, "noop")) != L2_OK) {
  -            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to create noop channel; %s(%d) for fsl", cp, l2rv); CU(FSL_ERR_INT); }
  -        if ((l2rv = l2_spec(&ch, ctx.l2_fslenv, "%s", argl2spec)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to create stream from spec %s(%d) for fsl", cp, l2rv);
  -            if (l2rv == L2_ERR_ARG)
  -                CU(FSL_ERR_ARG);
  -            else
  -                CU(FSL_ERR_INT);
  -        }
  -        if ((l2rv = l2_channel_link(ctx.l2_fslnch, L2_LINK_CHILD, ch, NULL)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to link child channel %s(%d) for fsl", cp, l2rv); CU(FSL_ERR_INT); }
  -        if ((l2rv = l2_channel_open(ctx.l2_fslnch)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.l2_fslenv, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to open channel stream %s(%d) for fsl", cp, l2rv); CU(FSL_ERR_INT); }
  -    }
  -CUS:
  -    if (rc != FSL_OK)
  -        closefsllog();
  -    if (rc == FSL_ERR_ARG)
  -        ctx.openfsldebugpermanenterror = TRUE;
  -}
  -
   /* POSIX API function openlog(3) */
   void openlog(const char *ident, int logopt, int facility)
   {
  @@ -702,21 +765,24 @@
       closelog();
       ctx.triedopenlog = TRUE;
   
  -    /* create OSSP l2 environment for fsl itself (internal logging) */
  -    openfsldebug();
  +    /* remember logopt */
  +    ctx.logopt = logopt;
  +
  +    /* handle delayed open logopt value */
  +    if (ctx.logopt & LOG_NDELAY)
  +        ctx.delayopen = FALSE;
   
       /* tracing */
  -    fsldebug(L2_LEVEL_TRACE, "openlog() ident=\"%s\", logopt=0x%.8lx, facility=0x%.8lx; caught by %s", ident, logopt, facility, fsl_version.v_gnu);
  +    fsldebug(L2_LEVEL_TRACE, "fsl in openlog(3) ident=%s%s%s, logopt=0x%.8lx, facility=0x%.8lx; caught by %s", ident == NULL ? "" : "\"", ident == NULL ? "NULL" : ident, ident == NULL ? "" : "\"" , logopt, facility, fsl_version.v_gnu);
   
  -    /* remember logopt and handle unsupported values */
  -    ctx.logopt = logopt;
  -    if (logopt & LOG_CONS)
  +    /* handle unsupported logopt values */
  +    if (ctx.logopt & LOG_CONS)
           fsldebug(L2_LEVEL_WARNING, "openlog: ignore unsupported LOG_CONS");
   #ifdef LOG_PERROR
  -    if (logopt & LOG_PERROR)
  +    if (ctx.logopt & LOG_PERROR)
           fsldebug(L2_LEVEL_WARNING, "openlog: ignore unsupported LOG_PERROR (use OSSP l2 channel \"fd(filedescriptor=2)\" to emulate)");
   #endif
  -    if (logopt & LOG_PID)
  +    if (ctx.logopt & LOG_PID)
           fsldebug(L2_LEVEL_WARNING, "openlog: ignore unsupported LOG_PID (use OSSP l2 formatter %%P in prefix channel to emulate)");
   
       /* create default sysloglevel to l2_level mapping */
  @@ -782,8 +848,7 @@
           fsldebug(L2_LEVEL_ERROR, "openlog: processcfg() failed with an unrecoverable error (%d)", rv); CU(1); }
   
       /*  open logging now or prepare for delayed open */
  -    if (logopt & LOG_NDELAY) {
  -        ctx.delayopen = TRUE;
  +    if (~logopt & LOG_NDELAY) {
           fsldebug(L2_LEVEL_TRACE, "openlog: logopt LOG_NDELAY delays open of L2 channel tree until first message is being logged");
       }
       else {
  @@ -811,8 +876,10 @@
   /* faked POSIX API function closelog(3) */
   void closelog(void)
   {
  -    fsldebug(L2_LEVEL_TRACE, "closelog()");
  -    closefsllog();
  +    /* tracing */
  +    fsldebug(L2_LEVEL_TRACE, "fsl in closelog(3)");
  +
  +    fsldebugdestroy();
       if (ctx.l2_nch != NULL) {
           l2_channel_destroy(ctx.l2_nch);
           ctx.l2_nch = NULL;
  @@ -827,8 +894,9 @@
       }
       ctx.maskpri = LOG_UPTO(LOG_DEBUG);
       ctx.logopt = 0;
  -    ctx.delayopen = FALSE;
  +    ctx.delayopen = TRUE;
       ctx.triedopenlog = FALSE;
  +
       return;
   }
   
  @@ -837,7 +905,9 @@
   {
       int oldmask;
   
  -    fsldebug(L2_LEVEL_TRACE, "setlogmask() maskpri=0x%.8lx", maskpri);
  +    /* tracing */
  +    fsldebug(L2_LEVEL_TRACE, "fsl in setlogmask(3) maskpri=0x%.8lx", maskpri);
  +
       oldmask = ctx.maskpri;
       if (maskpri != 0)
           ctx.maskpri = maskpri;
  @@ -849,6 +919,9 @@
   {
       va_list args;
   
  +    /* tracing */
  +    fsldebug(L2_LEVEL_TRACE, "fsl in syslog(3); go ahead using vsyslog(3)");
  +
       /* wrap around vsyslog(3) */
       va_start(args, message);
       vsyslog(priority, message, args);
  @@ -868,7 +941,10 @@
       l2_result_t l2rv;
       char *cp;
       
  -    /* check for previous omitted attempt of initialization */
  +    /* tracing */
  +    fsldebug(L2_LEVEL_TRACE, "fsl in vsyslog(3) fmt=%s%s%s ...", fmt == NULL ? "" : "\"", fmt == NULL ? "NULL" : fmt, fmt == NULL ? "" : "\"");
  +
  +    /* check for omitted openlog(3) */
       if (ctx.l2_nch == NULL && !ctx.triedopenlog)
           openlog("fsl", 0, LOG_SYSLOG);
   
  @@ -877,7 +953,7 @@
           return;
   
       /* check for delayed open */
  -    if ((ctx.logopt & LOG_NDELAY) && (ctx.delayopen == TRUE)) {
  +    if ((~ctx.logopt & LOG_NDELAY) && (ctx.delayopen == TRUE)) {
           if ((l2rv = l2_channel_open(ctx.l2_nch)) != L2_OK) {
               cp = l2_env_strerror(ctx.l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "vsyslog: logging failed to open channel stream %s(%d) delayed", cp, l2rv);
               closelog();
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl_test.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 fsl_test.c
  --- ossp-pkg/fsl/fsl_test.c	24 Jul 2002 15:29:01 -0000	1.4
  +++ ossp-pkg/fsl/fsl_test.c	20 May 2003 15:47:23 -0000	1.5
  @@ -1,14 +1,55 @@
   
   #include <stdio.h>
   #include <syslog.h>
  +#include <fcntl.h>  /* open(2) */
  +#include <unistd.h> /* close(2) */
  +#include <stdlib.h> /* exit(3) */
  +
  +static void pexit(const char *msg, int rc)
  +{
  +    fprintf(stderr, "ERROR: %s\n", msg);
  +    exit(rc);
  +}
  +
  +static int tryfd(void)
  +{
  +    int fd;
  +
  +    if ((fd = open("/dev/null", O_RDONLY)) == -1)
  +        pexit("internal - cannot open /dev/null for reading", 1);
  +    if (close(fd) == -1)
  +        pexit("internal - cannot close(2)", 1);
  +    return fd;
  +}
   
   int main(int argc, char *argv[])
   {
  -    syslog(LOG_INFO, "Connection from host %s", "foo.bar.dom");
  +    int fd1, fd2;
  +
  +    fd1 = tryfd();
  +    setlogmask(LOG_UPTO(LOG_ERR));
  +    openlog("mail", LOG_PID, LOG_LOCAL0); /* this must not consume a filedescriptor; LOG_NDELAY and break it */
  +    setlogmask(LOG_UPTO(LOG_ERR));
  +    fd2 = tryfd();
  +    if (fd1 != fd2)
  +        pexit("testsuite - filedescriptor allocated where it should not", 2);
  +    closelog();
  +
  +    fd1 = tryfd();
  +    openlog("mail", LOG_PID, LOG_LOCAL1);
  +    if (fd1 != tryfd())
  +        pexit("testsuite - filedescriptor allocated where it should not", 2);
  +    setlogmask(LOG_UPTO(LOG_ERR));
  +    if (fd1 != tryfd())
  +        pexit("testsuite - filedescriptor allocated where it should not", 2);
  +    syslog(LOG_ALERT, "one");
  +    syslog(LOG_ALERT, "two");
  +    closelog();
  +
       openlog("mail", LOG_PID|LOG_NDELAY, LOG_LOCAL0);
  -    syslog(LOG_ALERT, "who: internal error 23\n");
  +    syslog(LOG_ALERT, "who: internal 23\n");
       setlogmask(LOG_UPTO(LOG_ERR));
  -    syslog(LOG_INFO|LOG_LOCAL2, "foobar error: %m");
  +    syslog(LOG_INFO|LOG_LOCAL2, "foobar: %m");
       syslog(LOG_EMERG,   "syslogging LOG_EMERG   %d", LOG_EMERG  );
       syslog(LOG_ALERT,   "syslogging LOG_ALERT   %d", LOG_ALERT  );
       syslog(LOG_CRIT,    "syslogging LOG_CRIT    %d", LOG_CRIT   );
  @@ -18,6 +59,7 @@
       syslog(LOG_INFO,    "syslogging LOG_INFO    %d", LOG_INFO   );
       syslog(LOG_DEBUG,   "syslogging LOG_DEBUG   %d", LOG_DEBUG  );
       closelog();
  +
       return 0;
   }
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue May 20 19:14:19 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4CB9676D00; Tue, 20 May 2003 19:14:19 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_proc.c rc_util.c
Message-Id: <20030520171419.4CB9676D00@mail.ossp.org>
Date: Tue, 20 May 2003 19:14:19 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   20-May-2003 19:14:19
  Branch: HEAD                             Handle: 2003052018141700

  Modified files:
    ossp-pkg/rc             rc_proc.c rc_util.c

  Log:
    Put priority scheduling back in, safeguard priCompare logic against invalid
    parameters, generally complete the print mode and exec mode processor
    operations for milestone one.

  Summary:
    Revision    Changes     Path
    1.28        +56 -28     ossp-pkg/rc/rc_proc.c
    1.8         +14 -2      ossp-pkg/rc/rc_util.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	20 May 2003 15:06:42 -0000	1.27
  +++ ossp-pkg/rc/rc_proc.c	20 May 2003 17:14:17 -0000	1.28
  @@ -194,15 +194,13 @@
   ************************************************/
   rc_return_t procRun(rc_proc_t *pRc)
   {
  -    int   nTmp  = 0;
  -    int   nRcs  = 0;
  -    int   nSecs = 0;
  -    char *pszVec[RC_EXEC_MAXARGS];
  -
  -    /* Conditionally sort the section vector according to explicit priority
  -    if (!strcmp(configGetrcfile(), RC_GLOB_WILD)) {
  -        qsort((void *)pRc->m_ppSectvec, (size_t)nTotsecs, sizeof (rc_section_t *), priCompare);
  -    } */
  +    int   nTmp   = 0;               /* Generic index */
  +    int   nRcs   = 0;               /* Rc index      */
  +    int   nSecs  = 0;               /* Section index */
  +    char *szTmp  = NULL;            /* Generic temporary string      */
  +    char *szExec = NULL;            /* Used only during exec mode    */
  +    char *pszVec[RC_EXEC_MAXARGS];  /* For passing in to execv(3)    */
  +    rc_section_t **ppSectmp = NULL; /* Used with priority scheduling */
   
       /****************************************************/
       /* This will execute, evaluate, or print the script */
  @@ -213,33 +211,52 @@
       if (configGetval(RC_EVL_VAL))                               /* Evaluate */
           fprintf(stderr, "Error: Evaluate is not implemented yet.\n"); /* FIX */
       else if (configGetval(RC_EXC_VAL)) {                        /* Execute  */
  -        pszVec[0] = "/bin/sh";
  -        pszVec[1] = "-c";
  -        pszVec[2] = (char *)scriptTostring(pRc->m_pScriptcom);
  -        pszVec[3] = NULL;   /* Add a NULL to mark the end of the chain */
  -        if (execvp(*pszVec, pszVec) == -1) {                    /* launch */
  -            TRACE("Bad, execvp for common script in child returned -1");
  -            return(RC_THROW(RC_ERR_INT));
  -        }
  -        for (nSecs = 0; nSecs < pRc->m_pAnal->m_nSecs; nSecs++)
  +        /* Allocate a block of section pointers to use as a temporary */
  +        ppSectmp = calloc(pRc->m_pAnal->m_nRcs, sizeof(rc_section_t *));
  +        /* Allocate the command chain string to execute with execv(3) */
  +        szTmp = (char *)scriptTostring(pRc->m_pScriptcom);
  +        szExec = malloc((strlen(szTmp) + 1) * sizeof(char));
  +        strcpy(szExec, szTmp);
  +        for (nSecs = 0; nSecs < pRc->m_pAnal->m_nSecs; nSecs++) {
               for (nRcs = 0; nRcs < pRc->m_pAnal->m_nRcs; nRcs++) {
                   nTmp = 0;
                   while (nTmp < pRc->m_ppLabvec[nRcs]->m_nSecs && \
                       strcmp(pRc->m_ppLabvec[nRcs]->m_ppSecvec[nTmp]->m_szName, \
                                   pRc->m_pAnal->m_pszSecs[nSecs]))
                       nTmp++;
  -                if (nTmp < pRc->m_ppLabvec[nRcs]->m_nSecs) {
  -                    pszVec[2] = (char *)sectionGetdata(pRc->m_ppLabvec[nRcs]->m_ppSecvec[nTmp]);
  -                    if (execvp(*pszVec, pszVec) == -1) {        /* launch */
  -                        TRACE("Bad, execvp for subsection in child returned -1");
  -                        return(RC_THROW(RC_ERR_INT));
  -                    }
  -                }
  +                if (nTmp < pRc->m_ppLabvec[nRcs]->m_nSecs)
  +                    ppSectmp[nRcs] = pRc->m_ppLabvec[nRcs]->m_ppSecvec[nTmp];
  +                else
  +                    ppSectmp[nRcs] = NULL;
               }
  +            qsort((void *)ppSectmp, (size_t)pRc->m_pAnal->m_nRcs, sizeof(rc_section_t *), priCompare);
  +            nTmp = 0;
  +            while (nTmp < pRc->m_pAnal->m_nRcs && ppSectmp[nTmp]) {
  +                szTmp = (char *)sectionGetdata(ppSectmp[nTmp]);
  +                szExec = realloc(szExec, (strlen(szExec) + 1) * sizeof(char) + \
  +                                         (strlen(szTmp) + 1) * sizeof(char));
  +                strcat(szExec, szTmp); /* Build onto the command chain */
  +                nTmp++;
  +            }
  +        }
  +        free(ppSectmp);
  +        ppSectmp = NULL;
  +
  +        /* Actually launch the new process image now */
  +        pszVec[0] = "/bin/sh";
  +        pszVec[1] = "-c";
  +        pszVec[2] = szExec;
  +        pszVec[3] = NULL;   /* Add a NULL to mark the end of the chain */
  +        if (execvp(*pszVec, pszVec) == -1) {                    /* launch */
  +            TRACE("Bad, execvp for common script in child returned -1");
  +            return(RC_THROW(RC_ERR_INT));
  +        }
       }
       else if (configGetval(RC_PRN_VAL)) {                        /* Print  */
  -        scriptDump(pRc->m_pScriptcom);
  -        for (nSecs = 0; nSecs < pRc->m_pAnal->m_nSecs; nSecs++)
  +        /* Allocate a block of section pointers to use as a temporary */
  +        ppSectmp = calloc(pRc->m_pAnal->m_nRcs, sizeof(rc_section_t *));
  +        scriptDump(pRc->m_pScriptcom); /* Dump the common script */
  +        for (nSecs = 0; nSecs < pRc->m_pAnal->m_nSecs; nSecs++) {
               for (nRcs = 0; nRcs < pRc->m_pAnal->m_nRcs; nRcs++) {
                   nTmp = 0;
                   while (nTmp < pRc->m_ppLabvec[nRcs]->m_nSecs && \
  @@ -247,8 +264,19 @@
                                   pRc->m_pAnal->m_pszSecs[nSecs]))
                       nTmp++;
                   if (nTmp < pRc->m_ppLabvec[nRcs]->m_nSecs)
  -                    sectionDump(pRc->m_ppLabvec[nRcs]->m_ppSecvec[nTmp]);
  +                    ppSectmp[nRcs] = pRc->m_ppLabvec[nRcs]->m_ppSecvec[nTmp];
  +                else
  +                    ppSectmp[nRcs] = NULL;
               }
  +            qsort((void *)ppSectmp, (size_t)pRc->m_pAnal->m_nRcs, sizeof(rc_section_t *), priCompare);
  +            nTmp = 0;
  +            while (nTmp < pRc->m_pAnal->m_nRcs && ppSectmp[nTmp]) {
  +                sectionDump(ppSectmp[nTmp]);
  +                nTmp++;
  +            }
  +        }
  +        free(ppSectmp);
  +        ppSectmp = NULL;
       }
       else /* Something is wrong here */
           return(RC_THROW(RC_ERR_INT));
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_util.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 rc_util.c
  --- ossp-pkg/rc/rc_util.c	15 May 2003 22:22:30 -0000	1.7
  +++ ossp-pkg/rc/rc_util.c	20 May 2003 17:14:17 -0000	1.8
  @@ -109,8 +109,20 @@
   /* Section priority compare, to use with qsort(3) */
   int priCompare(const void *pkv1, const void *pkv2)
   {
  -    int nOne = ((rc_section_t *)pkv1)->m_nPri;
  -    int nTwo = ((rc_section_t *)pkv2)->m_nPri;
  +    int nOne = 0;
  +    int nTwo = 0;
  +
  +    if (pkv1) {
  +        nOne = ((rc_section_t *)pkv1)->m_nPri;
  +        if (pkv2)
  +            nTwo = ((rc_section_t *)pkv2)->m_nPri;
  +        else
  +            return (-1);
  +    }
  +    else if (pkv2)
  +        return (1);
  +    else
  +        return (0);
   
       if (nOne)
           if (nTwo)
  @@ .

From ossp-cvs-owner@ossp.org  Wed May 21 14:49:24 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1EE5F76D10; Wed, 21 May 2003 14:49:24 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ 00TODO rc.h rc.pod rc_const.h rc_private.h rc...
Message-Id: <20030521124924.1EE5F76D10@mail.ossp.org>
Date: Wed, 21 May 2003 14:49:24 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   21-May-2003 14:49:23
  Branch: HEAD                             Handle: 2003052113492001

  Modified files:
    ossp-pkg/rc             00TODO rc.h rc.pod rc_const.h rc_private.h
                            rc_proc.c rc_script.c rc_sect.c

  Log:
    Implement eval mode.

  Summary:
    Revision    Changes     Path
    1.41        +1  -0      ossp-pkg/rc/00TODO
    1.46        +3  -0      ossp-pkg/rc/rc.h
    1.31        +4  -4      ossp-pkg/rc/rc.pod
    1.15        +5  -0      ossp-pkg/rc/rc_const.h
    1.28        +5  -4      ossp-pkg/rc/rc_private.h
    1.29        +61 -21     ossp-pkg/rc/rc_proc.c
    1.19        +38 -0      ossp-pkg/rc/rc_script.c
    1.9         +21 -0      ossp-pkg/rc/rc_sect.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/00TODO
  ============================================================================
  $ cvs diff -u -r1.40 -r1.41 00TODO
  --- ossp-pkg/rc/00TODO	19 May 2003 19:04:45 -0000	1.40
  +++ ossp-pkg/rc/00TODO	21 May 2003 12:49:20 -0000	1.41
  @@ -28,6 +28,7 @@
   Document
     Refs, pri, user, group, ci, go only in normal (not special) sections.
     Section definition regular expressions need to follow a format ()\2.
  +  Changed from OpenPKG: temp files no longer have pids in their file names
   
   Questions
     Should location regex specify a directory and prefix separately, or files*?
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc.h
  ============================================================================
  $ cvs diff -u -r1.45 -r1.46 rc.h
  --- ossp-pkg/rc/rc.h	20 May 2003 15:06:41 -0000	1.45
  +++ ossp-pkg/rc/rc.h	21 May 2003 12:49:20 -0000	1.46
  @@ -111,9 +111,11 @@
   
   /* Script function prototypes */
   rc_script_t *scriptNew(void);
  +rc_script_t *scriptCopy(rc_script_t *);
   rc_return_t scriptAppend(rc_script_t *, const char *, size_t);
   rc_section_t *scriptSection(rc_script_t *, const char *);
   rc_return_t scriptDump(rc_script_t *);
  +rc_return_t scriptWrite(rc_script_t *, const char *);
   const char *scriptTostring(rc_script_t *);
   rc_return_t scriptDelete(rc_script_t *);
   
  @@ -136,6 +138,7 @@
   rc_return_t sectionSetdata(rc_section_t *, const char *);
   rc_return_t sectionSetndata(rc_section_t *, const char *, size_t);
   rc_return_t sectionDump(rc_section_t *);
  +rc_return_t sectionWrite(rc_section_t *, const char *);
   rc_return_t sectionDelete(rc_section_t *);
   
   /* Processor function prototypes */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc.pod
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 rc.pod
  --- ossp-pkg/rc/rc.pod	11 Apr 2002 16:52:45 -0000	1.30
  +++ ossp-pkg/rc/rc.pod	21 May 2003 12:49:20 -0000	1.31
  @@ -326,8 +326,8 @@
   =head1 SEE ALSO
   
   OSSP rc integrates concepts taken from other run-command architectures. For
  -more information, inspect the /etc/rc structures provided by the FreeBSD,
  -Solaris, and Red Hat distributions.
  +more information, inspect the /etc/rc structures provided by the NetBSD,
  +FreeBSD, Solaris, and Red Hat distributions.
   
   rc-sample(5).
   
  @@ -343,7 +343,7 @@
   in OpenPKG (http://www.openpkg.org/). The prototype was a slow and less robust
   Bourne shell script. B<OSSP rc> is comparitively faster, more robust, and more
   flexible. This flexibility allows for wider range of use, and B<OSSP rc> can
  -therefore be used in a variety of situations. It is no longer exclusive to the
  -OpenPKG project.
  +therefore be used in a larger variety of situations. It is no longer exclusive
  +to the OpenPKG project.
   
   =cut
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_const.h
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 rc_const.h
  --- ossp-pkg/rc/rc_const.h	16 May 2003 12:37:10 -0000	1.14
  +++ ossp-pkg/rc/rc_const.h	21 May 2003 12:49:21 -0000	1.15
  @@ -130,4 +130,9 @@
   #define RC_DEF_PRG    "-p"                      /* Section priority string */
   #define RC_DEF_PRI    200                       /* Section priority value */
   
  +/* Handling temporary and output during evaluation mode */
  +#define RC_EVL_TMP    "rc.XXXX"                              /* Temporary file template */
  +#define RC_EVL_SUF    ".tmp"                                 /* Temporary file suffix   */
  +#define RC_EVL_OUT    ". %s; rm -f %s 2>/dev/null || true\n" /* Command line output     */
  +
   #endif /* __OSSPRC_CONST_H__ */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_private.h
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 rc_private.h
  --- ossp-pkg/rc/rc_private.h	20 May 2003 15:06:42 -0000	1.27
  +++ ossp-pkg/rc/rc_private.h	21 May 2003 12:49:21 -0000	1.28
  @@ -49,10 +49,11 @@
   /* FIXME Tie to shtool generation */
   #define RC_VERSION   "77.77"
   
  -#define RC_SEC_SUB         1
  -#define RC_GOOD_MEASURE    8
  -#define RC_EXEC_MAXARGS    8
  -#define RC_READ_BUFSIZE 1024
  +#define RC_SEC_SUB          1
  +#define RC_GOOD_MEASURE     8
  +#define RC_EXEC_MAXARGS     8
  +#define RC_READ_BUFSIZE  1024
  +#define RC_WRITE_BUFSIZE 1024
   #define RC_STR_ID  "OSSP rc"                        /* APPID for OSSP rc */
   #define RC_UID_ID 0xf8a1845c55e6449481176f6e9cea34b /* UUID for OSSP rc  */
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	20 May 2003 17:14:17 -0000	1.28
  +++ ossp-pkg/rc/rc_proc.c	21 May 2003 12:49:21 -0000	1.29
  @@ -91,7 +91,7 @@
   
       /* Open the func file if it exists in the configuration */
       if (pRc->m_pAnal->m_szFuncs) {
  -        if ((nFdfunc = open(pRc->m_pAnal->m_szFuncs, O_RDONLY)) == -1) {
  +        if ((nFdfunc = open(pRc->m_pAnal->m_szFuncs, O_RDONLY)) < 0) {
               RC_THROW(RC_ERR_FNC);
           }
       }
  @@ -99,17 +99,13 @@
       /* Stick on the starting shell id line */
       scriptAppend(pRc->m_pScriptcom, "#! /bin/sh\n", strlen("#! /bin/sh\n"));
   
  -    /* Read the func file if it was opened successfully */
  -    /* We unfortunately make the assumption that 0 is an invalid filedesc */
  -    if (nFdfunc) {
  -        /* Read data from the func file */
  -        while ((nRet = read(nFdfunc, sBuf, RC_READ_BUFSIZE)) > 0) {
  -            scriptAppend(pRc->m_pScriptcom, sBuf, nRet);
  -        }
  -        scriptAppend(pRc->m_pScriptcom, "\n", sizeof(char));
  -        if (nRet == -1) /* Handle read errors */
  -            RC_THROW(RC_ERR_IO);
  +    /* Read data from the func file */
  +    while ((nRet = read(nFdfunc, sBuf, RC_READ_BUFSIZE)) > 0) {
  +        scriptAppend(pRc->m_pScriptcom, sBuf, nRet);
       }
  +    scriptAppend(pRc->m_pScriptcom, "\n", sizeof(char));
  +    if (nRet == -1) /* Handle read errors */
  +        RC_THROW(RC_ERR_IO);
   
       /* Iteratively read possibly globbed rc files */
       for (nRc = 0; nRc < pRc->m_pAnal->m_nRcs; nRc++)
  @@ -194,13 +190,16 @@
   ************************************************/
   rc_return_t procRun(rc_proc_t *pRc)
   {
  -    int   nTmp   = 0;               /* Generic index */
  -    int   nRcs   = 0;               /* Rc index      */
  -    int   nSecs  = 0;               /* Section index */
  -    char *szTmp  = NULL;            /* Generic temporary string      */
  -    char *szExec = NULL;            /* Used only during exec mode    */
  -    char *pszVec[RC_EXEC_MAXARGS];  /* For passing in to execv(3)    */
  -    rc_section_t **ppSectmp = NULL; /* Used with priority scheduling */
  +    int   nTmp      = 0;              /* Generic index       */
  +    int   nTmpname  = 0;              /* Temp file name size */
  +    int   nRcs      = 0;              /* Rc index            */
  +    int   nSecs     = 0;              /* Section index       */
  +    char *szTmpfile = NULL;           /* Path of temporary file          */
  +    char *szTmp     = NULL;           /* Generic temporary string        */
  +    char *szExec    = NULL;           /* Used only during exec mode      */
  +    char *pszVec[RC_EXEC_MAXARGS];    /* For passing in to execv(3)      */
  +    rc_script_t   *pFatscript = NULL; /* To build a comprehensive script */
  +    rc_section_t **ppSectmp   = NULL; /* Used with priority scheduling   */
   
       /****************************************************/
       /* This will execute, evaluate, or print the script */
  @@ -208,10 +207,51 @@
       /* Eval  - Print machine evaluatable format         */
       /* Print - Print human readable format              */
       /****************************************************/
  -    if (configGetval(RC_EVL_VAL))                               /* Evaluate */
  -        fprintf(stderr, "Error: Evaluate is not implemented yet.\n"); /* FIX */
  +    if (configGetval(RC_EVL_VAL)) {                             /* Evaluate */
  +        /* Allocate a block of section pointers to use temporarily */
  +        ppSectmp = calloc(pRc->m_pAnal->m_nRcs, sizeof(rc_section_t *));
  +        /* Allocate the command chain string to execute with execv(3) */
  +        pFatscript = scriptCopy(pRc->m_pScriptcom);
  +        for (nSecs = 0; nSecs < pRc->m_pAnal->m_nSecs; nSecs++) {
  +            for (nRcs = 0; nRcs < pRc->m_pAnal->m_nRcs; nRcs++) {
  +                nTmp = 0;
  +                while (nTmp < pRc->m_ppLabvec[nRcs]->m_nSecs && \
  +                    strcmp(pRc->m_ppLabvec[nRcs]->m_ppSecvec[nTmp]->m_szName, \
  +                                pRc->m_pAnal->m_pszSecs[nSecs]))
  +                    nTmp++;
  +                if (nTmp < pRc->m_ppLabvec[nRcs]->m_nSecs)
  +                    ppSectmp[nRcs] = pRc->m_ppLabvec[nRcs]->m_ppSecvec[nTmp];
  +                else
  +                    ppSectmp[nRcs] = NULL;
  +            }
  +            qsort((void *)ppSectmp, (size_t)pRc->m_pAnal->m_nRcs, sizeof(rc_section_t *), priCompare);
  +            nTmp = 0;
  +            while (nTmp < pRc->m_pAnal->m_nRcs && ppSectmp[nTmp]) {
  +                szTmp = (char *)sectionGetdata(ppSectmp[nTmp]);
  +                scriptAppend(pFatscript, szTmp, strlen(szTmp) + 1);
  +                nTmp++;
  +            }
  +        }
  +        free(ppSectmp);
  +        ppSectmp = NULL;
  +
  +        szTmpfile = (char *)configGetval(RC_TMP_VAL);
  +        nTmpname = (strlen(szTmpfile) + strlen(RC_EVL_TMP) + \
  +                    strlen(RC_EVL_SUF) + 1) * sizeof(char);
  +        szTmpfile = malloc(nTmpname);
  +        strcpy(szTmpfile, configGetval(RC_TMP_VAL));
  +        strcat(szTmpfile, RC_EVL_TMP);
  +        mktemp(szTmpfile);
  +        strcat(szTmpfile, RC_EVL_SUF);
  +        scriptWrite(pFatscript, szTmpfile); /* Write the whole script out */
  +        fprintf(stdout, RC_EVL_OUT, szTmpfile, szTmpfile);
  +        free(szTmpfile);
  +        szTmpfile = NULL;
  +        scriptDelete(pFatscript);
  +        pFatscript = NULL;
  +    }
       else if (configGetval(RC_EXC_VAL)) {                        /* Execute  */
  -        /* Allocate a block of section pointers to use as a temporary */
  +        /* Allocate a block of section pointers to use temporarily */
           ppSectmp = calloc(pRc->m_pAnal->m_nRcs, sizeof(rc_section_t *));
           /* Allocate the command chain string to execute with execv(3) */
           szTmp = (char *)scriptTostring(pRc->m_pScriptcom);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_script.c
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 rc_script.c
  --- ossp-pkg/rc/rc_script.c	20 May 2003 15:06:42 -0000	1.18
  +++ ossp-pkg/rc/rc_script.c	21 May 2003 12:49:21 -0000	1.19
  @@ -28,6 +28,9 @@
   */
   
   #include <string.h>
  +#include <stdlib.h>
  +#include <unistd.h>     /* For mkstemp(3)             */
  +#include <fcntl.h>      /* For open(2)                */
   #include <ctype.h>      /* For isspace(3)             */
   #include <pwd.h>        /* For getlogin(2)            */
   
  @@ -38,6 +41,21 @@
   
   
   /************************************************
  +* scriptCopy(rc_script_t *)                     *
  +* Copy constructor                              *
  +************************************************/
  +rc_script_t *scriptCopy(rc_script_t *pOrig)
  +{
  +    rc_script_t *pNew = NULL;
  +
  +    pNew = (rc_script_t *)malloc(sizeof(rc_script_t));
  +    *pNew = malloc((strlen(scriptTostring(pOrig)) + 1) * sizeof(char));
  +    strcpy(*pNew, scriptTostring(pOrig));
  +
  +    return(pNew);
  +}
  +
  +/************************************************
   * scriptNew(void)                               *
   * Construct a script                            *
   ************************************************/
  @@ -281,6 +299,26 @@
       /*                    which might not be a simple string */
       if (pScript) {
           fprintf(stdout, "%s", *pScript);
  +        return(RC_THROW(RC_OK));
  +    }
  +    else
  +        return(RC_THROW(RC_ERR_USE));
  +}
  +
  +/************************************************
  +* scriptWrite(rc_script_t *, const char *)      *
  +* Print a script to a file                      *
  +************************************************/
  +rc_return_t scriptWrite(rc_script_t *pScript, const char *szPath)
  +{
  +    int nFdtmp = open(szPath, O_WRONLY | O_CREAT, 0600);
  +    FILE *pStream = fdopen(nFdtmp, "w");
  +
  +    /* Don't remove this! It encapsulates the script object, */
  +    /*                    which might not be a simple string */
  +    if (pScript && pStream) {
  +        fprintf(pStream, "%s", *pScript);
  +        fclose(pStream);
           return(RC_THROW(RC_OK));
       }
       else
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_sect.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 rc_sect.c
  --- ossp-pkg/rc/rc_sect.c	20 May 2003 15:06:42 -0000	1.8
  +++ ossp-pkg/rc/rc_sect.c	21 May 2003 12:49:21 -0000	1.9
  @@ -29,6 +29,8 @@
   
   #include <string.h> /* For string copy and such data ops */
   #include <stdlib.h> /* For memory ops */
  +#include <unistd.h> /* For mktemp(3)  */
  +#include <fcntl.h>  /* For open(2)    */
   
   #include "rc.h"     /* Public Rc interface */
   
  @@ -227,6 +229,25 @@
       if (pSec) {
           fprintf(stdout, "#su %s\n", sectionGetlogin(pSec));
           fprintf(stdout, "%s", sectionGetdata(pSec));
  +        return(RC_THROW(RC_OK));
  +    }
  +    else
  +        return(RC_THROW(RC_ERR_USE));
  +}
  +
  +/************************************************
  +* sectionWrite(rc_section_t *, const char *)    *
  +* Print a section to a file                     *
  +************************************************/
  +rc_return_t sectionWrite(rc_section_t *pSec, const char *szPath)
  +{
  +    int nFdtmp = open(szPath, O_WRONLY | O_CREAT, 0600);
  +    FILE *pStream = fdopen(nFdtmp, "w");
  +
  +    if (pSec && pStream) {
  +        fprintf(pStream, "#su %s\n", sectionGetlogin(pSec));
  +        fprintf(pStream, "%s", sectionGetdata(pSec));
  +        fclose(pStream);
           return(RC_THROW(RC_OK));
       }
       else
  @@ .

From ossp-cvs-owner@ossp.org  Wed May 21 17:16:46 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2CA2876D28; Wed, 21 May 2003 17:16:46 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ 00TODO rc_proc.c rc_script.c rc_sect.c ossp-p...
Message-Id: <20030521151646.2CA2876D28@mail.ossp.org>
Date: Wed, 21 May 2003 17:16:46 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   21-May-2003 17:16:45
  Branch: HEAD                             Handle: 2003052116164103

  Modified files:
    ossp-pkg/rc             00TODO rc_proc.c rc_script.c rc_sect.c
    ossp-pkg/rc/rc_test     rc.samba

  Log:
    Bug fix recent eval mode addition, and add login name parsing to eval
    mode.

  Summary:
    Revision    Changes     Path
    1.42        +1  -1      ossp-pkg/rc/00TODO
    1.30        +11 -1      ossp-pkg/rc/rc_proc.c
    1.20        +15 -5      ossp-pkg/rc/rc_script.c
    1.10        +12 -3      ossp-pkg/rc/rc_sect.c
    1.3         +1  -1      ossp-pkg/rc/rc_test/rc.samba
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/00TODO
  ============================================================================
  $ cvs diff -u -r1.41 -r1.42 00TODO
  --- ossp-pkg/rc/00TODO	21 May 2003 12:49:20 -0000	1.41
  +++ ossp-pkg/rc/00TODO	21 May 2003 15:16:41 -0000	1.42
  @@ -28,7 +28,6 @@
   Document
     Refs, pri, user, group, ci, go only in normal (not special) sections.
     Section definition regular expressions need to follow a format ()\2.
  -  Changed from OpenPKG: temp files no longer have pids in their file names
   
   Questions
     Should location regex specify a directory and prefix separately, or files*?
  @@ -37,6 +36,7 @@
   
   Variation to OpenPKG rc
     OpenPKG puts sections with no -p at end, but we give them implicitly -p 200
  +  Temp files no longer have pids in their file names during eval mode
   
   Consider
     Nice to have feature for ex, a pEx->pObj->strErr(pEx->Value);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	21 May 2003 12:49:21 -0000	1.29
  +++ ossp-pkg/rc/rc_proc.c	21 May 2003 15:16:41 -0000	1.30
  @@ -224,9 +224,15 @@
                   else
                       ppSectmp[nRcs] = NULL;
               }
  -            qsort((void *)ppSectmp, (size_t)pRc->m_pAnal->m_nRcs, sizeof(rc_section_t *), priCompare);
  +            qsort((void *)ppSectmp, (size_t)pRc->m_pAnal->m_nRcs, \
  +                sizeof(rc_section_t *), priCompare);
               nTmp = 0;
               while (nTmp < pRc->m_pAnal->m_nRcs && ppSectmp[nTmp]) {
  +                if ((szTmp = (char *)sectionGetlogin(ppSectmp[nTmp])) != NULL) {
  +                    scriptAppend(pFatscript, "#su ", strlen("#su "));
  +                    scriptAppend(pFatscript, szTmp, strlen(szTmp));
  +                    scriptAppend(pFatscript, "\n", strlen("\n") + 1);
  +                }
                   szTmp = (char *)sectionGetdata(ppSectmp[nTmp]);
                   scriptAppend(pFatscript, szTmp, strlen(szTmp) + 1);
                   nTmp++;
  @@ -238,8 +244,12 @@
           szTmpfile = (char *)configGetval(RC_TMP_VAL);
           nTmpname = (strlen(szTmpfile) + strlen(RC_EVL_TMP) + \
                       strlen(RC_EVL_SUF) + 1) * sizeof(char);
  +        if (*(szTmpfile + (strlen(szTmpfile) - 1) * sizeof(char)) != '/')
  +            nTmpname += sizeof(char);
           szTmpfile = malloc(nTmpname);
           strcpy(szTmpfile, configGetval(RC_TMP_VAL));
  +        if (*(szTmpfile + (strlen(szTmpfile) - 1) * sizeof(char)) != '/')
  +            *(szTmpfile + (strlen(szTmpfile)) * sizeof(char)) = '/';
           strcat(szTmpfile, RC_EVL_TMP);
           mktemp(szTmpfile);
           strcat(szTmpfile, RC_EVL_SUF);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_script.c
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 rc_script.c
  --- ossp-pkg/rc/rc_script.c	21 May 2003 12:49:21 -0000	1.19
  +++ ossp-pkg/rc/rc_script.c	21 May 2003 15:16:41 -0000	1.20
  @@ -50,7 +50,10 @@
   
       pNew = (rc_script_t *)malloc(sizeof(rc_script_t));
       *pNew = malloc((strlen(scriptTostring(pOrig)) + 1) * sizeof(char));
  -    strcpy(*pNew, scriptTostring(pOrig));
  +    if (pNew)
  +        strcpy(*pNew, scriptTostring(pOrig));
  +    else
  +        RC_THROW(RC_ERR_MEM);
   
       return(pNew);
   }
  @@ -224,7 +227,7 @@
               /* Handle the section userid   */
               piSubtemp = strnstr(piStart, RC_DEF_UIG, piEnd - piStart);
               if (piSubtemp) { /* Userid pattern found */
  -                for (nTmp = (int)piSubtemp + strlen(RC_DEF_UIG);\
  +                for (nTmp = (int)piSubtemp + strlen(RC_DEF_UIG); \
                       isspace(*(char *)nTmp); nTmp += sizeof (char)); /* Strip */
                   nUid = strtol((char *)nTmp, &piSep, 10);
                   if ((char *)nTmp == piSep)      /* No userid number follows */
  @@ -312,17 +315,24 @@
   rc_return_t scriptWrite(rc_script_t *pScript, const char *szPath)
   {
       int nFdtmp = open(szPath, O_WRONLY | O_CREAT, 0600);
  -    FILE *pStream = fdopen(nFdtmp, "w");
  +    FILE *pStream = NULL;
  +
  +    /* Initial sanity checks */
  +    if (!pScript || nFdtmp < 0)
  +        return(RC_THROW(RC_ERR_USE));
  +    else
  +        pStream = fdopen(nFdtmp, "w");
   
       /* Don't remove this! It encapsulates the script object, */
       /*                    which might not be a simple string */
  -    if (pScript && pStream) {
  +    if (pStream) {
           fprintf(pStream, "%s", *pScript);
           fclose(pStream);
           return(RC_THROW(RC_OK));
       }
       else
  -        return(RC_THROW(RC_ERR_USE));
  +        fprintf(stderr, "FIXME: Replace with a real ex_throw!\n");
  +/*        return(RC_THROW(RC_ERR_USE));*/
   }
   
   /************************************************
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_sect.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 rc_sect.c
  --- ossp-pkg/rc/rc_sect.c	21 May 2003 12:49:21 -0000	1.9
  +++ ossp-pkg/rc/rc_sect.c	21 May 2003 15:16:41 -0000	1.10
  @@ -226,8 +226,11 @@
   ************************************************/
   rc_return_t sectionDump(rc_section_t *pSec)
   {
  +    const char *szLogin = NULL;
  +
       if (pSec) {
  -        fprintf(stdout, "#su %s\n", sectionGetlogin(pSec));
  +        if ((szLogin = sectionGetlogin(pSec)) != NULL)
  +            fprintf(stdout, "#su %s\n", szLogin);
           fprintf(stdout, "%s", sectionGetdata(pSec));
           return(RC_THROW(RC_OK));
       }
  @@ -242,9 +245,15 @@
   rc_return_t sectionWrite(rc_section_t *pSec, const char *szPath)
   {
       int nFdtmp = open(szPath, O_WRONLY | O_CREAT, 0600);
  -    FILE *pStream = fdopen(nFdtmp, "w");
  +    FILE *pStream = NULL;
  +
  +    /* Initial sanity checks */
  +    if (!pSec || nFdtmp < 0)
  +        return(RC_THROW(RC_ERR_USE));
  +    else
  +        pStream = fdopen(nFdtmp, "w");
   
  -    if (pSec && pStream) {
  +    if (pStream) {
           fprintf(pStream, "#su %s\n", sectionGetlogin(pSec));
           fprintf(pStream, "%s", sectionGetdata(pSec));
           fclose(pStream);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_test/rc.samba
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 rc.samba
  --- ossp-pkg/rc/rc_test/rc.samba	15 May 2003 12:47:26 -0000	1.2
  +++ ossp-pkg/rc/rc_test/rc.samba	21 May 2003 15:16:44 -0000	1.3
  @@ -8,7 +8,7 @@
   %search
       whois cyvaned.com
   
  -%destroy
  +%destroy -u sw-n
       ldd /usr/lib/libpcap.so
   
   %finish
  @@ .

From ossp-cvs-owner@ossp.org  Wed May 21 17:24:08 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 866E076D10; Wed, 21 May 2003 17:24:08 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_proc.c
Message-Id: <20030521152408.866E076D10@mail.ossp.org>
Date: Wed, 21 May 2003 17:24:08 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   21-May-2003 17:24:08
  Branch: HEAD                             Handle: 2003052116240700

  Modified files:
    ossp-pkg/rc             rc_proc.c

  Log:
    Fix parsing of func file, and do not read if the func file doesn't
    exist.

  Summary:
    Revision    Changes     Path
    1.31        +15 -15     ossp-pkg/rc/rc_proc.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	21 May 2003 15:16:41 -0000	1.30
  +++ ossp-pkg/rc/rc_proc.c	21 May 2003 15:24:07 -0000	1.31
  @@ -75,8 +75,8 @@
   rc_return_t procPopulate(rc_proc_t *pRc)
   {
       int nSect   = 0;
  -    int nFdrc   = 0;
  -    int nFdfunc = 0;
  +    int nFdrc   = -1;
  +    int nFdfunc = -1;
       int nRet    = 0;
       int nRc     = 0;
       ex_t Except;
  @@ -89,23 +89,23 @@
       assert(*pRc->m_pAnal->m_szRcs);
       sBuf = (char *)calloc(1, RC_READ_BUFSIZE);
   
  -    /* Open the func file if it exists in the configuration */
  -    if (pRc->m_pAnal->m_szFuncs) {
  -        if ((nFdfunc = open(pRc->m_pAnal->m_szFuncs, O_RDONLY)) < 0) {
  -            RC_THROW(RC_ERR_FNC);
  -        }
  -    }
  -
       /* Stick on the starting shell id line */
       scriptAppend(pRc->m_pScriptcom, "#! /bin/sh\n", strlen("#! /bin/sh\n"));
   
  -    /* Read data from the func file */
  -    while ((nRet = read(nFdfunc, sBuf, RC_READ_BUFSIZE)) > 0) {
  -        scriptAppend(pRc->m_pScriptcom, sBuf, nRet);
  +    /* Open the func file if it exists in the configuration */
  +    if (pRc->m_pAnal->m_szFuncs) {
  +        if ((nFdfunc = open(pRc->m_pAnal->m_szFuncs, O_RDONLY)) >= 0) {
  +            /* Read data from the func file */
  +            while ((nRet = read(nFdfunc, sBuf, RC_READ_BUFSIZE)) > 0) {
  +                scriptAppend(pRc->m_pScriptcom, sBuf, nRet);
  +            }
  +            if (nRet == -1) /* Handle read errors */
  +                RC_THROW(RC_ERR_IO);
  +            scriptAppend(pRc->m_pScriptcom, "\n", sizeof(char));
  +        }
  +        else
  +            RC_THROW(RC_ERR_FNC);
       }
  -    scriptAppend(pRc->m_pScriptcom, "\n", sizeof(char));
  -    if (nRet == -1) /* Handle read errors */
  -        RC_THROW(RC_ERR_IO);
   
       /* Iteratively read possibly globbed rc files */
       for (nRc = 0; nRc < pRc->m_pAnal->m_nRcs; nRc++)
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 22 14:28:27 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A379876D24; Thu, 22 May 2003 14:28:26 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ devtool.conf
Message-Id: <20030522122826.A379876D24@mail.ossp.org>
Date: Thu, 22 May 2003 14:28:26 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   22-May-2003 14:28:26
  Branch: HEAD                             Handle: 2003052213282500

  Modified files:
    ossp-pkg/fsl            devtool.conf

  Log:
    whitespaces

  Summary:
    Revision    Changes     Path
    1.17        +6  -5      ossp-pkg/fsl/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 devtool.conf
  --- ossp-pkg/fsl/devtool.conf	13 Feb 2003 15:40:16 -0000	1.16
  +++ ossp-pkg/fsl/devtool.conf	22 May 2003 12:28:25 -0000	1.17
  @@ -47,11 +47,12 @@
   
   %version
       ./shtool version -l c -n "OSSP fsl" -p "fsl_" -e fsl_version.c
  -	V=`./shtool version -lc -dlong fsl_version.c`
  -	sed -e "s/Version .*/Version $V/g" <README >README.n && mv README.n README
  +    V=`./shtool version -lc -dlong fsl_version.c`
  +    sed -e "s/Version .*/Version $V/g" <README >README.n && mv README.n README
  +    sed -e "s/Version .*/Version $V/g" <NEWS >NEWS.n && mv NEWS.n NEWS
   
   %tag
  -	V=`./shtool version -lc -dshort fsl_version.c | sed -e 's;\.;_;g'`
  +    V=`./shtool version -lc -dshort fsl_version.c | sed -e 's;\.;_;g'`
       echo "+++ tagging CVS sources as FSL_${V}"
       cvs commit -m 'flush pending changes before tagging'
       cvs tag FSL_${V}
  @@ -71,7 +72,7 @@
       echo "+++ fixing"
       ./shtool fixperm -v .
       echo "+++ rolling"
  -	V=`./shtool version -lc -dshort fsl_version.c`
  +    V=`./shtool version -lc -dshort fsl_version.c`
       ./shtool tarball -o fsl-${V}.tar.gz -d fsl-${V} -u ossp -g ossp \
                        -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*,*.tar.gz,^#.*,.*~$' -c 'gzip --best' .
       ls -l fsl-${V}.tar.gz
  @@ -82,6 +83,6 @@
   
   %upload
       echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/fsl/"
  -	V=`./shtool version -lc -dshort fsl_version.c`
  +    V=`./shtool version -lc -dshort fsl_version.c`
       scp fsl-${V}.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/fsl/
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 22 14:30:38 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7DCE176D27; Thu, 22 May 2003 14:30:38 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ ChangeLog Makefile.in README devtool.conf fs...
Message-Id: <20030522123038.7DCE176D27@mail.ossp.org>
Date: Thu, 22 May 2003 14:30:38 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   22-May-2003 14:30:38
  Branch: HEAD                             Handle: 2003052213303500

  Modified files:
    ossp-pkg/fsl            ChangeLog Makefile.in README devtool.conf fsl.ac
                            fsl.c fsl.pod fsl_version.c

  Log:
    for details see attached ChangeLog

  Summary:
    Revision    Changes     Path
    1.17        +33 -0      ossp-pkg/fsl/ChangeLog
    1.15        +15 -10     ossp-pkg/fsl/Makefile.in
    1.30        +1  -1      ossp-pkg/fsl/README
    1.18        +1  -0      ossp-pkg/fsl/devtool.conf
    1.6         +45 -11     ossp-pkg/fsl/fsl.ac
    1.58        +121 -143   ossp-pkg/fsl/fsl.c
    1.28        +53 -18     ossp-pkg/fsl/fsl.pod
    1.16        +9  -9      ossp-pkg/fsl/fsl_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 ChangeLog
  --- ossp-pkg/fsl/ChangeLog	13 Feb 2003 15:38:38 -0000	1.16
  +++ ossp-pkg/fsl/ChangeLog	22 May 2003 12:30:35 -0000	1.17
  @@ -8,6 +8,39 @@
   
     CHANGELOG
   
  +  Changes between 1.0.8 and 1.1.0 (22-May-2003)
  +
  +    *) for compatiblity reasons, when debugging is enabled and
  +       openlog(2) is called without LOG_NDELAY no filedescriptor is
  +       consumed.  Prevously debugging unconditionally took one or more
  +       filedescriptors which violates POSIX.
  +   
  +    *) for compatiblity reasons, the library will no longer print any
  +       messages to stderr under any circumstances. If debugging is not
  +       possible or disabled, messages will be silently discarded.
  +    
  +    *) for security reasons the process environment is completely
  +       ignored.  The drawback is that FSL_CFGDIR, FSL_PREFIX and most
  +       debugging options are now configure options only.
  +   
  +    *) for safety reasons, when debugging is not used the whole
  +       debugging code is replaced with a simple no-operation stub function.
  +   
  +    *) for convenience reasons, what(1) or a "strings binarywithfsl |
  +       grep '@(#)'" will provide information about debugging code being
  +       omitted or included and, in the latter case, which logfile and
  +       logmask are being used.
  +   
  +    *) for convenience reasons and to keep simple things simple,
  +       debugging now logs to a file only and support to use l2spec for
  +       debugging is entirely removed at this time. The logfile, the logstop
  +       maximum file size and the logmask are configure options.
  +   
  +    *) for flexibility reasons but still to stay away from the process
  +       environment the logmask is configured by reading the content of a
  +       symlink.
  +       [Thomas Lotterer <thomas@lotterer.net]
  +
     Changes between 1.0.7 and 1.0.8 (13-Feb-2003)
   
       *) Remove NULL checks for va_list based variables because it was
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 Makefile.in
  --- ossp-pkg/fsl/Makefile.in	20 May 2003 15:47:23 -0000	1.14
  +++ ossp-pkg/fsl/Makefile.in	22 May 2003 12:30:35 -0000	1.15
  @@ -59,8 +59,12 @@
   TST_NAME    = fsl_test
   TST_OBJS    = fsl_test.o
   
  -FSL_CFGDIR  = @FSL_CFGDIR@
  -FSL_PREFIX  = @FSL_PREFIX@
  +FSL_CFGDIR       = @FSL_CFGDIR@
  +FSL_PREFIX       = @FSL_PREFIX@
  +FSL_DEBUGLOGCODE = @FSL_DEBUGLOGCODE@
  +FSL_DEBUGLOGFILE = @FSL_DEBUGLOGFILE@
  +FSL_DEBUGLOGMASK = @FSL_DEBUGLOGMASK@
  +FSL_DEBUGLOGSTOP = @FSL_DEBUGLOGSTOP@
   
   SUBDIRS     = @SUBDIR_L2@ @SUBDIR_CFG@ @SUBDIR_PCRE@
   
  @@ -111,19 +115,20 @@
   	           --release="$$D" --date="OSSP fsl $$VS" fsl.pod | \
   	sed -e "s;FSL_VERSION_STR;$$VL;" \
   	    -e "s;\@FSL_CFGDIR\@;$(FSL_CFGDIR);g" \
  -	    -e "s;\@FSL_PREFIX\@;$(FSL_PREFIX);g" >fsl.3
  +	    -e "s;\@FSL_PREFIX\@;$(FSL_PREFIX);g" \
  +	    -e "s;\@FSL_DEBUGLOGCODE\@;$(FSL_DEBUGLOGCODE);g" \
  +	    -e "s;\@FSL_DEBUGLOGFILE\@;$(FSL_DEBUGLOGFILE);g" \
  +	    -e "s;\@FSL_DEBUGLOGMASK\@;$(FSL_DEBUGLOGMASK);g" \
  +	    -e "s;\@FSL_DEBUGLOGSTOP\@;$(FSL_DEBUGLOGSTOP);g" \
  +		>fsl.3
   
   test: check
   check: $(TST_NAME)
  -	@[ -f fsl_test.debug  ] && $(RM) fsl_test.debug  || true
   	@[ -f fsl_test.syslog ] && $(RM) fsl_test.syslog || true
  -	@true && \
  -	FSL_CFGDIR=.; export FSL_CFGDIR; \
  -	FSL_PREFIX=fsl_test.cfg; export FSL_PREFIX; \
  -	FSL_DEBUG="trace: file(path=fsl_test.debug)"; export FSL_DEBUG; \
  -	$(LIBTOOL) --mode=execute ./$(TST_NAME)
  +	@$(LIBTOOL) --mode=execute ./$(TST_NAME)
   	@echo "fsl_test.syslog:"; if [ -s fsl_test.syslog ]; then cat fsl_test.syslog; else echo " ***EMPTY***"; fi
  -	#echo "fsl_test.debug:";  if [ -s fsl_test.debug  ]; then cat fsl_test.debug;  else echo " ***EMPTY***"; fi
  +	@echo "this test requires manual configuration, use fsl_test.cfg as template and see pathes below"
  +	@strings <$(TST_NAME) | grep '@(#)'
   
   install: all
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/README
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 README
  --- ossp-pkg/fsl/README	13 Feb 2003 15:40:30 -0000	1.29
  +++ ossp-pkg/fsl/README	22 May 2003 12:30:35 -0000	1.30
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_| |___/_|
    
     OSSP fsl - Faking/Flexible Syslog Library
  -  Version 1.0.8 (13-Feb-2003)
  +  Version 1.1b0 (22-May-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 devtool.conf
  --- ossp-pkg/fsl/devtool.conf	22 May 2003 12:28:25 -0000	1.17
  +++ ossp-pkg/fsl/devtool.conf	22 May 2003 12:30:35 -0000	1.18
  @@ -37,6 +37,7 @@
           --disable-shared \
           --enable-maintainer \
           --enable-debug \
  +       #--with-fsl-debuglogcode=yes \
           "$@"
   
   %release
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl.ac
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 fsl.ac
  --- ossp-pkg/fsl/fsl.ac	6 Jan 2003 16:41:21 -0000	1.5
  +++ ossp-pkg/fsl/fsl.ac	22 May 2003 12:30:35 -0000	1.6
  @@ -77,17 +77,51 @@
   AC_SUBST(FSL_PREFIX)
   AC_MSG_RESULT([$fsl_prefix])
   
  -dnl #   built-time configuration parameter --with-fsl-debug
  -AC_MSG_CHECKING(for debugging using a l2spec)
  -AC_ARG_WITH(fsl-debug,dnl
  -[  --with-fsl-debug=L2SPEC set internal debugging (default="null")],
  -[ fsl_debug=$withval ],
  -[ fsl_debug="null" ]
  +])
  +
  +dnl #   built-time configuration parameter --with-fsl-debuglogcode
  +AC_MSG_CHECKING(for debug log code)
  +AC_ARG_WITH(fsl-debuglogcode,dnl
  +[  --with-fsl-debuglogcode=BOOL  set debug log code (default=0) 0=omit; 1=include],
  +[ AC_DEFINE(FSL_DEBUGLOGCODE, 1, [Define for OSSP fsl debug log code; 0=omit, 1=include]) ]
   )dnl
  -AC_DEFINE_UNQUOTED(FSL_DEBUG, "$fsl_debug", [Define for OSSP fsl debugging])
  -FSL_DEBUG="$fsl_debug"
  -AC_SUBST(FSL_DEBUG)
  -AC_MSG_RESULT([$fsl_debug])
  +FSL_DEBUGLOGCODE="$fsl_debuglogcode"
  +AC_SUBST(FSL_DEBUGLOGCODE)
  +AC_MSG_RESULT([$fsl_debuglogcode])
   
  -])
  +dnl #   built-time configuration parameter --with-fsl-debuglogfile
  +AC_MSG_CHECKING(for debug log file)
  +AC_ARG_WITH(fsl-debuglogfile,dnl
  +[  --with-fsl-debuglogfile=FILE  set debug log file (default="PREFIX/var/fsl/debuglogfile")],
  +[ fsl_debuglogfile=$withval ],
  +[ fsl_debuglogfile="${prefix}/var/fsl/debuglogfile" ]
  +)dnl
  +AC_DEFINE_UNQUOTED(FSL_DEBUGLOGFILE, "$fsl_debuglogfile", [Define for OSSP fsl debug log file; name])
  +FSL_DEBUGLOGFILE="$fsl_debuglogfile"
  +AC_SUBST(FSL_DEBUGLOGFILE)
  +AC_MSG_RESULT([$fsl_debuglogfile])
  +
  +dnl #   built-time configuration parameter --with-fsl-debuglogmask
  +AC_MSG_CHECKING(for debug log mask)
  +AC_ARG_WITH(fsl-debuglogmask,dnl
  +[  --with-fsl-debuglogmask=FILE  set debug log mask (default="PREFIX/var/fsl/debuglogmask")],
  +[ fsl_debuglogmask=$withval ],
  +[ fsl_debuglogmask="${prefix}/var/fsl/debuglogmask" ]
  +)dnl
  +AC_DEFINE_UNQUOTED(FSL_DEBUGLOGMASK, "$fsl_debuglogmask", [Define for OSSP fsl debug log mask; symlink])
  +FSL_DEBUGLOGMASK="$fsl_debuglogmask"
  +AC_SUBST(FSL_DEBUGLOGMASK)
  +AC_MSG_RESULT([$fsl_debuglogmask])
  +
  +dnl #   built-time configuration parameter --with-fsl-debuglogstop
  +AC_MSG_CHECKING(for debug log stop)
  +AC_ARG_WITH(fsl-debuglogstop,dnl
  +[  --with-fsl-debuglogstop=SIZE  set debug log stop (default=16777216)],
  +[ fsl_debuglogstop=$withval ],
  +[ fsl_debuglogstop=16777216 ]
  +)dnl
  +AC_DEFINE_UNQUOTED(FSL_DEBUGLOGSTOP, $fsl_debuglogstop, [Define for OSSP fsl debug log stop; maxsize])
  +FSL_DEBUGLOGSTOP="$fsl_debuglogstop"
  +AC_SUBST(FSL_DEBUGLOGSTOP)
  +AC_MSG_RESULT([$fsl_debuglogstop])
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl.c
  ============================================================================
  $ cvs diff -u -r1.57 -r1.58 fsl.c
  --- ossp-pkg/fsl/fsl.c	20 May 2003 15:47:23 -0000	1.57
  +++ ossp-pkg/fsl/fsl.c	22 May 2003 12:30:35 -0000	1.58
  @@ -53,6 +53,11 @@
   /* autoconfiguration */
   #include "config.h"
   
  +/* use l2_ut_[v]sprintf() as a portable [v]snprintf() replacement for debugging */
  +#ifdef FSL_DEBUGLOGCODE
  +#include "l2_ut_format.h"
  +#endif
  +
   /* version */
   #define _FSL_VERSION_C_AS_HEADER_
   #include "fsl_version.c"
  @@ -61,6 +66,9 @@
   /* pcre static vector size */
   #define OVECSIZE 30
   
  +/* maximum atomic write size, maximum log message size */
  +#define MAXWRITESIZE 512
  +
   /* backward compatibility */
   #ifndef LOG_PRIMASK
   #define LOG_PRIMASK (LOG_EMERG|LOG_ALERT|LOG_CRIT|LOG_ERR|\
  @@ -179,88 +187,123 @@
   static struct {
       l2_env_t     *l2_env;
       l2_channel_t *l2_nch;
  +    char         *cpISF;
       levelmap_t   *levelmap;
       int           maskpri;
       int           logopt;
       int           delayopen;
       int           triedopenlog;
  -    /* fsl debugging */
  +#ifdef FSL_DEBUGLOGCODE
       l2_env_t     *fsldebug_l2_env;
       l2_channel_t *fsldebug_l2_nch;
       int           fsldebug_transientproblem;
       int           fsldebug_permanentproblem;
  +#endif /* ifdef FSL_DEBUGLOGCODE */
  +    char         *fsl_config;
   } ctx = { 
       NULL,
       NULL,
       NULL,
  +    NULL,
       LOG_UPTO(LOG_DEBUG),
       0,
       TRUE,
       FALSE,
  -    /* fsl debugging */
  +#ifdef FSL_DEBUGLOGCODE
       NULL,
       NULL,
       FALSE,
  -    FALSE
  +    FALSE,
  +#endif /* ifdef FSL_DEBUGLOGCODE */
  +    "@(#)OSSP fsl config "
  +    "cfgdir=\"" FSL_CFGDIR "\"" " "
  +    "prefix=\"" FSL_PREFIX "\""
  +    "\n"
  +    "@(#)OSSP fsl debug "
  +#ifdef FSL_DEBUGLOGCODE
  +    "logfile=\"" FSL_DEBUGLOGFILE "\"" " "
  +    "logmask=\"" FSL_DEBUGLOGMASK "\""
  +#else /* ifdef FSL_DEBUGLOGCODE */
  +    "code omitted;"
  +#endif /* ifdef FSL_DEBUGLOGCODE */
  +    "\n"
   };
   
  -/* internal debugging prototypes */
  -static void fsldebugcreate (void);
  -static void fsldebug       (l2_level_t, const char *, ...);
  -static int  fsldebugl2     (l2_level_t, const char *, va_list);
  -static int  fsldebugf2     (l2_level_t, const char *, va_list);
  -static void fsldebugdestroy(void);
  -
  -/* internal debugging functions */
  -static void fsldebugcreate()
  +#ifdef FSL_DEBUGLOGCODE
  +static void vfsldebug(l2_level_t level, const char *message, va_list ap)
   {
  -    int rc = FSL_OK;
  -    char *argl2spec;
  -    l2_result_t l2rv;
  -    char *cp; /* scratch variable */
  -    l2_channel_t *ch; /* scratch variable */
  -
  -    /* identify previous fault and avoid repetition */
  -    if (ctx.fsldebug_permanentproblem || ctx.fsldebug_transientproblem)
  -        return;
  -
  -    /* create OSSP l2 environment for fsl itself (internal logging) */
  -    if ((argl2spec = getenv("FSL_DEBUG")) == NULL)
  -        argl2spec = FSL_DEBUG;
  -    if (strlen(argl2spec) > 0) {
  -        if ((l2rv = l2_env_create(&ctx.fsldebug_l2_env)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.fsldebug_l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: failed to create L2 environment (%d) for fsl", l2rv); CU(FSL_ERR_INT); }
  -        if ((l2rv = l2_env_levels(ctx.fsldebug_l2_env, L2_LEVEL_ALL, L2_LEVEL_NONE)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.fsldebug_l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to set global logging level defaults %s(%d) for fsl", cp, l2rv); CU(FSL_ERR_INT); }
  -        if ((l2rv = l2_env_formatter(ctx.fsldebug_l2_env, 'D', l2_util_fmt_dump, NULL)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.fsldebug_l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to register dump formatter %s(%d) for fsl", cp, l2rv); CU(FSL_ERR_INT); }
  -        if ((l2rv = l2_env_formatter(ctx.fsldebug_l2_env, 'S', l2_util_fmt_string, NULL)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.fsldebug_l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to register string formatter %s(%d) for fsl", cp, l2rv); CU(FSL_ERR_INT); }
  -        if ((l2rv = l2_env_formatter(ctx.fsldebug_l2_env, 'm', l2_util_fmt_errno, NULL)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.fsldebug_l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to register errno formatter %s(%d) for fsl", cp, l2rv); CU(FSL_ERR_INT); }
  -        if ((l2rv = l2_channel_create(&ctx.fsldebug_l2_nch, ctx.fsldebug_l2_env, "noop")) != L2_OK) {
  -            cp = l2_env_strerror(ctx.fsldebug_l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to create noop channel; %s(%d) for fsl", cp, l2rv); CU(FSL_ERR_INT); }
  -        if ((l2rv = l2_spec(&ch, ctx.fsldebug_l2_env, "%s", argl2spec)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.fsldebug_l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to create stream from spec %s(%d) for fsl", cp, l2rv);
  -            if (l2rv == L2_ERR_ARG)
  -                CU(FSL_ERR_ARG);
  -            else
  -                CU(FSL_ERR_INT);
  -        }
  -        if ((l2rv = l2_channel_link(ctx.fsldebug_l2_nch, L2_LINK_CHILD, ch, NULL)) != L2_OK) {
  -            cp = l2_env_strerror(ctx.fsldebug_l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to link child channel %s(%d) for fsl", cp, l2rv); CU(FSL_ERR_INT); }
  -        if ((~ctx.logopt & LOG_NDELAY) && (ctx.delayopen == TRUE)) {
  -            fsldebug(L2_LEVEL_ERROR, "openlog: LOG_NDELAY unused forces debugging to use stealth mode until first syslog"); }
  -        else {
  -            if ((l2rv = l2_channel_open(ctx.fsldebug_l2_nch)) != L2_OK) {
  -                cp = l2_env_strerror(ctx.fsldebug_l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to open channel stream %s(%d) for fsl", cp, l2rv); CU(FSL_ERR_INT); }
  +    /* sizing cp temporary buffer is max out of
  +       strlen "(panic,critical,error,warning,notice,info,trace,debug)" + terminating NUL and
  +       strlen "bbb dd HH:MM:SS " + terminating NUL
  +       = 56
  +     */
  +    static char cp[56]; /* FIXME */
  +    static char cpo[MAXWRITESIZE];
  +    int cpn;
  +    int n;
  +    struct stat sb;
  +    unsigned int levelmask;
  +    time_t t;
  +    struct tm *tm;
  +    int fd = 0;
  +
  +    /* determine level mask */
  +    if ((n = readlink(FSL_DEBUGLOGMASK, cp, sizeof(cp))) == -1)
  +        VCU;
  +    if (cp[0] == '(' && cp[n-1] == ')') { /* level mask in round brackets like l2spec */
  +        if(l2_util_s2l(&cp[1], n-2, ',', &levelmask) != L2_OK)
  +            VCU;
  +    }
  +    else if (strchr(cp, ',') != NULL) { /* level mask automatic because comma detected */
  +        if(l2_util_s2l(&cp[0], n  , ',', &levelmask) != L2_OK)
  +            VCU;
  +    }
  +    else { /* upto level like l2spec */
  +        if(l2_util_s2l(&cp[0], n  , 0  , &levelmask) != L2_OK)
  +            VCU;
  +        levelmask = L2_LEVEL_UPTO(levelmask);
  +    }
  +
  +    if (level & levelmask) {
  +
  +        cpn = 0;
  +
  +        /* date and time */
  +        t = time(NULL);
  +        tm = localtime(&t);
  +        if ((n = strftime(cp, sizeof(cp), "%b %d %H:%M:%S ", tm)) == 0)
  +            VCU;
  +        l2_util_sprintf( &cpo[cpn], MAXWRITESIZE-cpn, "%s", cp);
  +        cpn = strlen(cpo);
  +
  +        /* level */
  +        l2_util_sprintf( &cpo[cpn], MAXWRITESIZE-cpn, "<%s> ", l2_util_l2s(cp, sizeof(cp), '\0', level) == L2_OK ? cp : "unknown");
  +        cpn = strlen(cpo);
  +        
  +        /* program "name" and pid */
  +        l2_util_sprintf( &cpo[cpn], MAXWRITESIZE-cpn, "%s[%lu^%lu] ", ctx.cpISF != NULL ? ctx.cpISF : "unknown", (unsigned long)getpid(), (unsigned long)getppid());
  +        cpn = strlen(cpo);
  +
  +        /* message */
  +        l2_util_vsprintf(&cpo[cpn], MAXWRITESIZE-cpn, message, ap);
  +        cpn = strlen(cpo);
  +        l2_util_sprintf( &cpo[cpn], MAXWRITESIZE-cpn, "\n");
  +        cpn = strlen(cpo);
  +
  +        /* write the log */
  +        if (cpn >= 1) {
  +            if ((fd = open(FSL_DEBUGLOGFILE, O_WRONLY|O_CREAT|O_APPEND|O_NONBLOCK, 0644)) == -1)
  +                VCU;
  +            if (fstat(fd, &sb) == -1)
  +                VCU;
  +            if (sb.st_size >= FSL_DEBUGLOGSTOP)
  +                VCU;
  +            write(fd, cpo, cpn);
           }
       }
   CUS:
  -    if (rc == FSL_ERR_ARG)
  -        ctx.fsldebug_permanentproblem = TRUE;
  -    if (rc != FSL_OK)
  -        fsldebugdestroy();
  +    if (fd)
  +        (void)close(fd);
   }
   
   static void fsldebug(l2_level_t level, const char *message, ...)
  @@ -268,82 +311,16 @@
       va_list ap;
   
       va_start(ap, message);
  -    fsldebugl2(level, message, ap) || fsldebugf2(level, message, ap);
  +    vfsldebug(level, message, ap);
       va_end(ap);
       return;
   }
  -
  -static int fsldebugl2(l2_level_t level, const char *message, va_list ap)
  -{
  -    int rc = FALSE; /* the pessimist */
  -    l2_result_t l2rv;
  -    char *cp;
  -
  -    /* identify previous fault and avoid repetition */
  -    if (ctx.fsldebug_permanentproblem || ctx.fsldebug_transientproblem)
  -        return rc;
  -        
  -    /* nothing has been prepared, so do it now */
  -    if (ctx.fsldebug_l2_nch == NULL)
  -        fsldebugcreate();
  -
  -    /* identify previous fault and avoid repetition */
  -    if (ctx.fsldebug_permanentproblem || ctx.fsldebug_transientproblem)
  -        return rc;
  -
  -    /* preparation failed */
  -    if (ctx.fsldebug_l2_nch == NULL)
  -        return rc;
  -
  -    /* try logging, L2_ERR_USE only occurs if channel is not yet open */
  -    if ((l2rv = l2_channel_vlog(ctx.fsldebug_l2_nch, level, message, ap)) == L2_ERR_USE) {
  -        if ((l2rv = l2_channel_open(ctx.fsldebug_l2_nch)) != L2_OK) {
  -            ctx.fsldebug_transientproblem = TRUE; /* avoid loop from fsldebug() in next line */
  -            cp = l2_env_strerror(ctx.fsldebug_l2_env, l2rv); fsldebug(L2_LEVEL_ERROR, "openlog: logging failed to open channel stream %s(%d) for fsl", cp, l2rv);
  -            ctx.fsldebug_transientproblem = FALSE; /* opening the channel might work at next attempt */
  -            return rc;
  -        }
  -        l2rv = l2_channel_vlog(ctx.fsldebug_l2_nch, level, message, ap);
  -    }
  -
  -    if (l2rv == L2_OK)
  -        rc = TRUE;
  -
  -    /* if openlog(3) "did not request LOG_NDELAY" aka "did request delay" (~ctx.logopt & LOG_NDELAY),
  -     * until a syslog(3) was tried (ctx.delayopen == TRUE), operate in stealth mode by closing channel
  -     */
  -    if ((~ctx.logopt & LOG_NDELAY) && (ctx.delayopen == TRUE))
  -        (void)l2_channel_close(ctx.fsldebug_l2_nch);
  -
  -    return rc;
  -}
  -
  -static int fsldebugf2(l2_level_t level, const char *message, va_list ap)
  -{
  -    int rc = TRUE; /* the optimist */
  -    char cp[8];
  -
  -    if (level & L2_LEVEL_UPTO(L2_LEVEL_ERROR)) {
  -        fprintf( stderr, "%s: ", l2_util_l2s(cp, sizeof(cp), '\0', level) == L2_OK ? cp[0]&=0xDF, cp : "Log");
  -        vfprintf(stderr, message, ap);
  -        fprintf( stderr, "\n");
  -    }
  -    return rc;
  -}
  -
  -static void fsldebugdestroy()
  +#else /* ifdef FSL_DEBUGLOGCODE */
  +static void fsldebug(l2_level_t level, const char *message, ...)
   {
  -    if (ctx.fsldebug_l2_nch != NULL) {
  -        l2_channel_destroy(ctx.fsldebug_l2_nch);
  -        ctx.fsldebug_l2_nch = NULL;
  -    }
  -    if (ctx.fsldebug_l2_env != NULL) {
  -        l2_env_destroy(ctx.fsldebug_l2_env);
  -        ctx.fsldebug_l2_env = NULL;
  -    }
  -    ctx.fsldebug_transientproblem = FALSE;
  -    /*  fsldebug_permanentproblem kept */
  +    return;
   }
  +#endif /* ifdef FSL_DEBUGLOGCODE */
   
   /* append contents of a file to buffer */
   static fsl_rc_t appendfiletobuffer(buf_t *buffer, const char *filename)
  @@ -408,10 +385,8 @@
       if (buffer == NULL)
           CU(FSL_ERR_ARG);
   
  -    if ((cfgdir = getenv("FSL_CFGDIR")) == NULL)
  -        cfgdir = FSL_CFGDIR;
  -    if ((prefix = getenv("FSL_PREFIX")) == NULL)
  -        prefix = FSL_PREFIX;
  +    cfgdir = FSL_CFGDIR;
  +    prefix = FSL_PREFIX;
   
       fsldebug(L2_LEVEL_TRACE, "readallfiles() globbing \"%s/%s*\"", cfgdir, prefix);
   
  @@ -750,7 +725,6 @@
       int   i;  /* scratch variable */
       char *cpIdent;
       char *cpFacility;
  -    char *cpISF;
       l2_result_t   l2rv;
   
       /* initialization */
  @@ -759,7 +733,6 @@
       buf.used = 0;
       buf.size = 0;
       cpIdent = NULL;
  -    cpISF = NULL;
   
       /* properly prepare for repeated execution */
       closelog();
  @@ -822,12 +795,12 @@
               break;
           }
       }
  -    if ((cpISF = (char *)malloc(strlen(cpIdent) + 1 + strlen(cpFacility) + 1)) == NULL) {
  +    if ((ctx.cpISF = (char *)malloc(strlen(cpIdent) + 1 + strlen(cpFacility) + 1)) == NULL) {
           fsldebug(L2_LEVEL_ERROR, "openlog: malloc() failed"); CU(1); }
  -    cpISF[0] = '\0';
  -    strcat(cpISF, cpIdent);
  -    strcat(cpISF, "/");
  -    strcat(cpISF, cpFacility);
  +    ctx.cpISF[0] = '\0';
  +    strcat(ctx.cpISF, cpIdent);
  +    strcat(ctx.cpISF, "/");
  +    strcat(ctx.cpISF, cpFacility);
   
       /* read configuration file(s) into buffer */
       if ((rv = readallfiles(&buf)) != FSL_OK) {
  @@ -840,11 +813,11 @@
           (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "openlog: cfg_import() failed with error %s (%d)", cp, cfgrv); CU(1); }
   
       /*  process OSSP cfg node tree "map" and "ident" directives */
  -    if ((rv = processcfg(cfg, cpISF, 0)) != FSL_OK && (rv != FSL_NOIDENT)) {
  +    if ((rv = processcfg(cfg, ctx.cpISF, 0)) != FSL_OK && (rv != FSL_NOIDENT)) {
           fsldebug(L2_LEVEL_ERROR, "openlog: processcfg() failed with an unrecoverable error (%d)", rv); CU(1); }
   
       /*  optionally process OSSP cfg node tree "default" directives */
  -    if ((rv == FSL_NOIDENT) && ((rv = processcfg(cfg, cpISF, 1)) != FSL_OK)) {
  +    if ((rv == FSL_NOIDENT) && ((rv = processcfg(cfg, ctx.cpISF, 1)) != FSL_OK)) {
           fsldebug(L2_LEVEL_ERROR, "openlog: processcfg() failed with an unrecoverable error (%d)", rv); CU(1); }
   
       /*  open logging now or prepare for delayed open */
  @@ -859,8 +832,10 @@
   
       CU(0);
   CUS:
  -    if (cpISF != NULL)
  -        free(cpISF);
  +    if (ctx.cpISF != NULL) {
  +        free(ctx.cpISF);
  +        ctx.cpISF = NULL;
  +    }
       if (cpIdent != NULL)
           free(cpIdent);
       if (cfg != NULL)
  @@ -879,7 +854,6 @@
       /* tracing */
       fsldebug(L2_LEVEL_TRACE, "fsl in closelog(3)");
   
  -    fsldebugdestroy();
       if (ctx.l2_nch != NULL) {
           l2_channel_destroy(ctx.l2_nch);
           ctx.l2_nch = NULL;
  @@ -891,6 +865,10 @@
       if (ctx.levelmap != NULL) {
           free(ctx.levelmap);
           ctx.levelmap = NULL;
  +    }
  +    if (ctx.cpISF != NULL) {
  +        free(ctx.cpISF);
  +        ctx.cpISF = NULL;
       }
       ctx.maskpri = LOG_UPTO(LOG_DEBUG);
       ctx.logopt = 0;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl.pod
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 fsl.pod
  --- ossp-pkg/fsl/fsl.pod	6 Jan 2003 16:41:21 -0000	1.27
  +++ ossp-pkg/fsl/fsl.pod	22 May 2003 12:30:35 -0000	1.28
  @@ -479,38 +479,73 @@
        )
    };
   
  -=head1 ENVIRONMENT
  +=head1 CONFIGURE
   
  -The following environment variables affect the execution of B<OSSP fsl>:
  +Operation.
   
   =over 4
   
  -=item C<FSL_CFGDIR>
  +=item C<--with-fsl-cfgdir>
   
  -This variable overrides the default value (hard-coded in B<OSSP fsl>
  -under built-time via C<--with-fsl-cfgdir=>I<path>) under run-time. The
  -value has to point to an existing directory where configuration files
  -named "I<prefix>C<*>" (see below) exist. The default value is
  +The value has to point to an existing directory where configuration
  +files named "I<prefix>C<*>" (see below) exist. The default value is
   "C<@FSL_CFGDIR@>".
   
  -=item C<FSL_PREFIX>
  +=item C<--with-fsl-prefix>
   
  -This variable overrides the default value (hard-coded in B<OSSP fsl>
  -under built-time via C<--with-fsl-prefix=>I<prefix>) under run-time.
   The value has to be a valid partial Unix filename. The default value is
   "C<@FSL_PREFIX@>".
   
  -=item C<FSL_DEBUG>
  +=back
  +
  +Deployment.
  +
  +=over 4
  +
  +=item C<--with-fsl-debuglogcode>
   
  -This variable overrides the default value (hard-coded in B<OSSP fsl>
  -under built-time via C<--with-fsl-debug=>I<l2-spec>) under run-time.
  -The value has to be a valid B<OSSP l2> channel tree specification. An
  -empty value (either hard-coded or overridden) disables B<OSSP fsl>
  -debugging via B<OSSP l2> (but still logs errors to F<stderr>). A value
  -of "C<null>" instead disables debugging at all by discarding all
  -messages.
  +The value must be empty or something where empty omits and anything else
  +includes debugging code.  When debugging is not used the whole debugging
  +code is replaced with a simple no-operation stub function.  The default
  +value is "C<@FSL_DEBUGLOGCODE@>".
  +
  +=item C<--with-fsl-debuglogfile>
  +
  +The value has to point to a file where logging information is being
  +dumped into. The directory has to exist, the file must be
  +creatable/writable.  The file is opened, written in append mode and
  +closed for every debug log message. In case of problems the debug log
  +messages will be silently discarded.  The default value is
  +"C<@FSL_DEBUGLOGFILE@>".
  +
  +=item C<--with-fsl-debuglogmask>
  +
  +The value has to point to a symlink. The content of this symlink is the
  +name of a loglevel or a logmask. Possible values are panic, critical,
  +error, warning, notice, info, trace, debug; A single word is interpreted
  +as a log level and all messages with that or a more important level will
  +be logged. If a comma is found in the symlink content a logmask is build
  +by or'ing together the values behind all words. The same is true when
  +the entire value is inside round brackets, which makes this part of the
  +format compatible to l2spec and allows a single word to be a mask rather
  +than a level. If for any reasons the symlink does not exist, is not
  +readable, has a syntactically wrong value or any other problems the
  +debug log messages will be silently discarded.  The default value is
  +"C<@FSL_DEBUGLOGMASK@>".
  +
  +=item C<--with-fsl-debuglogstop>
  +
  +The value is the maximum size of the logfile in bytes.  If this size is
  +reached or exceeded before the message is written logging stops and
  +debug log messages will be silently discarded.  The default value is
  +"C<@FSL_DEBUGLOGSTOP@>".
   
   =back
  +
  +For convenience reasons, what(1) or a "strings binarywithfsl | grep
  +'@(#)'" will provide information about debugging code being omitted or
  +included and, in the latter case, which logfile and logmask are being
  +used.
   
   =head1 FILES
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl_version.c
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 fsl_version.c
  --- ossp-pkg/fsl/fsl_version.c	13 Feb 2003 15:40:30 -0000	1.15
  +++ ossp-pkg/fsl/fsl_version.c	22 May 2003 12:30:35 -0000	1.16
  @@ -8,7 +8,7 @@
   #ifndef _FSL_VERSION_C_
   #define _FSL_VERSION_C_
   
  -#define FSL_VERSION 0x100208
  +#define FSL_VERSION 0x101100
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _FSL_VERSION_C_AS_HEADER_
   
   fsl_version_t fsl_version = {
  -    0x100208,
  -    "1.0.8",
  -    "1.0.8 (13-Feb-2003)",
  -    "This is OSSP fsl, Version 1.0.8 (13-Feb-2003)",
  -    "OSSP fsl 1.0.8 (13-Feb-2003)",
  -    "OSSP fsl/1.0.8",
  -    "@(#)OSSP fsl 1.0.8 (13-Feb-2003)",
  -    "$Id: fsl_version.c,v 1.15 2003/02/13 15:40:30 rse Exp $"
  +    0x101100,
  +    "1.1b0",
  +    "1.1b0 (22-May-2003)",
  +    "This is OSSP fsl, Version 1.1b0 (22-May-2003)",
  +    "OSSP fsl 1.1b0 (22-May-2003)",
  +    "OSSP fsl/1.1b0",
  +    "@(#)OSSP fsl 1.1b0 (22-May-2003)",
  +    "$Id: fsl_version.c,v 1.16 2003/05/22 12:30:35 thl Exp $"
   };
   
   #endif /* _FSL_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 22 14:30:51 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D1FBB76D35; Thu, 22 May 2003 14:30:50 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ fsl_version.c
Message-Id: <20030522123050.D1FBB76D35@mail.ossp.org>
Date: Thu, 22 May 2003 14:30:50 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   22-May-2003 14:30:50
  Branch: HEAD                             Handle: 2003052213305000

  Modified files:
    ossp-pkg/fsl            fsl_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.17        +0  -0      ossp-pkg/fsl/fsl_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl_version.c
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 fsl_version.c
  --- ossp-pkg/fsl/fsl_version.c	22 May 2003 12:30:35 -0000	1.16
  +++ ossp-pkg/fsl/fsl_version.c	22 May 2003 12:30:50 -0000	1.17
  @@ -39,7 +39,7 @@
       "OSSP fsl 1.1b0 (22-May-2003)",
       "OSSP fsl/1.1b0",
       "@(#)OSSP fsl 1.1b0 (22-May-2003)",
  -    "$Id: fsl_version.c,v 1.16 2003/05/22 12:30:35 thl Exp $"
  +    "$Id: fsl_version.c,v 1.17 2003/05/22 12:30:50 thl Exp $"
   };
   
   #endif /* _FSL_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 22 14:31:49 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6FF7E76D25; Thu, 22 May 2003 14:31:48 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ devtool.conf
Message-Id: <20030522123148.6FF7E76D25@mail.ossp.org>
Date: Thu, 22 May 2003 14:31:48 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   22-May-2003 14:31:47
  Branch: HEAD                             Handle: 2003052213314600

  Modified files:
    ossp-pkg/fsl            devtool.conf

  Log:
    news are in ChangeLog, there is no NEWS file

  Summary:
    Revision    Changes     Path
    1.19        +0  -1      ossp-pkg/fsl/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 devtool.conf
  --- ossp-pkg/fsl/devtool.conf	22 May 2003 12:30:35 -0000	1.18
  +++ ossp-pkg/fsl/devtool.conf	22 May 2003 12:31:46 -0000	1.19
  @@ -50,7 +50,6 @@
       ./shtool version -l c -n "OSSP fsl" -p "fsl_" -e fsl_version.c
       V=`./shtool version -lc -dlong fsl_version.c`
       sed -e "s/Version .*/Version $V/g" <README >README.n && mv README.n README
  -    sed -e "s/Version .*/Version $V/g" <NEWS >NEWS.n && mv NEWS.n NEWS
   
   %tag
       V=`./shtool version -lc -dshort fsl_version.c | sed -e 's;\.;_;g'`
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 22 14:31:57 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9F45376D34; Thu, 22 May 2003 14:31:56 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ README
Message-Id: <20030522123156.9F45376D34@mail.ossp.org>
Date: Thu, 22 May 2003 14:31:56 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   22-May-2003 14:31:56
  Branch: HEAD                             Handle: 2003052213315400

  Modified files:
    ossp-pkg/fsl            README

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.31        +1  -1      ossp-pkg/fsl/README
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/README
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 README
  --- ossp-pkg/fsl/README	22 May 2003 12:30:35 -0000	1.30
  +++ ossp-pkg/fsl/README	22 May 2003 12:31:54 -0000	1.31
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_| |___/_|
    
     OSSP fsl - Faking/Flexible Syslog Library
  -  Version 1.1b0 (22-May-2003)
  +  Version 
   
     ABSTRACT
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 22 15:04:37 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D1D6676D25; Thu, 22 May 2003 15:04:36 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ fsl.c
Message-Id: <20030522130436.D1D6676D25@mail.ossp.org>
Date: Thu, 22 May 2003 15:04:36 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   22-May-2003 15:04:36
  Branch: HEAD                             Handle: 2003052214043300

  Modified files:
    ossp-pkg/fsl            fsl.c

  Log:
    what(1) gets confused by double quotes so do not use them

  Summary:
    Revision    Changes     Path
    1.59        +5  -5      ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl.c
  ============================================================================
  $ cvs diff -u -r1.58 -r1.59 fsl.c
  --- ossp-pkg/fsl/fsl.c	22 May 2003 12:30:35 -0000	1.58
  +++ ossp-pkg/fsl/fsl.c	22 May 2003 13:04:33 -0000	1.59
  @@ -216,15 +216,15 @@
       FALSE,
   #endif /* ifdef FSL_DEBUGLOGCODE */
       "@(#)OSSP fsl config "
  -    "cfgdir=\"" FSL_CFGDIR "\"" " "
  -    "prefix=\"" FSL_PREFIX "\""
  +    "cfgdir=" FSL_CFGDIR " "
  +    "prefix=" FSL_PREFIX 
       "\n"
       "@(#)OSSP fsl debug "
   #ifdef FSL_DEBUGLOGCODE
  -    "logfile=\"" FSL_DEBUGLOGFILE "\"" " "
  -    "logmask=\"" FSL_DEBUGLOGMASK "\""
  +    "logfile=" FSL_DEBUGLOGFILE " "
  +    "logmask=" FSL_DEBUGLOGMASK 
   #else /* ifdef FSL_DEBUGLOGCODE */
  -    "code omitted;"
  +    "code omitted"
   #endif /* ifdef FSL_DEBUGLOGCODE */
       "\n"
   };
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 22 15:05:03 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E3E7E76D2C; Thu, 22 May 2003 15:05:02 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ README fsl_version.c
Message-Id: <20030522130502.E3E7E76D2C@mail.ossp.org>
Date: Thu, 22 May 2003 15:05:02 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   22-May-2003 15:05:02
  Branch: HEAD                             Handle: 2003052214050000

  Modified files:
    ossp-pkg/fsl            README fsl_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.32        +1  -1      ossp-pkg/fsl/README
    1.18        +9  -9      ossp-pkg/fsl/fsl_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/README
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 README
  --- ossp-pkg/fsl/README	22 May 2003 12:31:54 -0000	1.31
  +++ ossp-pkg/fsl/README	22 May 2003 13:05:00 -0000	1.32
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_| |___/_|
    
     OSSP fsl - Faking/Flexible Syslog Library
  -  Version 
  +  Version 1.1b1 (22-May-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl_version.c
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 fsl_version.c
  --- ossp-pkg/fsl/fsl_version.c	22 May 2003 12:30:50 -0000	1.17
  +++ ossp-pkg/fsl/fsl_version.c	22 May 2003 13:05:00 -0000	1.18
  @@ -8,7 +8,7 @@
   #ifndef _FSL_VERSION_C_
   #define _FSL_VERSION_C_
   
  -#define FSL_VERSION 0x101100
  +#define FSL_VERSION 0x101101
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _FSL_VERSION_C_AS_HEADER_
   
   fsl_version_t fsl_version = {
  -    0x101100,
  -    "1.1b0",
  -    "1.1b0 (22-May-2003)",
  -    "This is OSSP fsl, Version 1.1b0 (22-May-2003)",
  -    "OSSP fsl 1.1b0 (22-May-2003)",
  -    "OSSP fsl/1.1b0",
  -    "@(#)OSSP fsl 1.1b0 (22-May-2003)",
  -    "$Id: fsl_version.c,v 1.17 2003/05/22 12:30:50 thl Exp $"
  +    0x101101,
  +    "1.1b1",
  +    "1.1b1 (22-May-2003)",
  +    "This is OSSP fsl, Version 1.1b1 (22-May-2003)",
  +    "OSSP fsl 1.1b1 (22-May-2003)",
  +    "OSSP fsl/1.1b1",
  +    "@(#)OSSP fsl 1.1b1 (22-May-2003)",
  +    "$Id: fsl_version.c,v 1.18 2003/05/22 13:05:00 thl Exp $"
   };
   
   #endif /* _FSL_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 22 15:48:48 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4615676752; Thu, 22 May 2003 15:48:48 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ fsl.c
Message-Id: <20030522134848.4615676752@mail.ossp.org>
Date: Thu, 22 May 2003 15:48:48 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   22-May-2003 15:48:47
  Branch: HEAD                             Handle: 2003052214484500

  Modified files:
    ossp-pkg/fsl            fsl.c

  Log:
    approved by make-up artist

  Summary:
    Revision    Changes     Path
    1.60        +1  -1      ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl.c
  ============================================================================
  $ cvs diff -u -r1.59 -r1.60 fsl.c
  --- ossp-pkg/fsl/fsl.c	22 May 2003 13:04:33 -0000	1.59
  +++ ossp-pkg/fsl/fsl.c	22 May 2003 13:48:45 -0000	1.60
  @@ -237,7 +237,7 @@
          strlen "bbb dd HH:MM:SS " + terminating NUL
          = 56
        */
  -    static char cp[56]; /* FIXME */
  +    static char cp[56];
       static char cpo[MAXWRITESIZE];
       int cpn;
       int n;
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 22 16:02:02 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5D4F776750; Thu, 22 May 2003 16:02:00 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ ChangeLog Makefile.in configure.ac devtool d...
Message-Id: <20030522140200.5D4F776750@mail.ossp.org>
Date: Thu, 22 May 2003 16:02:00 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   22-May-2003 16:01:59
  Branch: HEAD                             Handle: 2003052215015500

  Modified files:
    ossp-pkg/fsl            ChangeLog Makefile.in configure.ac devtool
                            devtool.func fsl.c fsl.pod fsl_test.cfg

  Log:
    whitespaces

  Summary:
    Revision    Changes     Path
    1.18        +8  -8      ossp-pkg/fsl/ChangeLog
    1.16        +2  -2      ossp-pkg/fsl/Makefile.in
    1.15        +10 -10     ossp-pkg/fsl/configure.ac
    1.2         +1  -1      ossp-pkg/fsl/devtool
    1.3         +1  -1      ossp-pkg/fsl/devtool.func
    1.61        +8  -8      ossp-pkg/fsl/fsl.c
    1.29        +27 -27     ossp-pkg/fsl/fsl.pod
    1.3         +5  -5      ossp-pkg/fsl/fsl_test.cfg
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 ChangeLog
  --- ossp-pkg/fsl/ChangeLog	22 May 2003 12:30:35 -0000	1.17
  +++ ossp-pkg/fsl/ChangeLog	22 May 2003 14:01:55 -0000	1.18
  @@ -3,7 +3,7 @@
     _|_||_| | | | \___ \___ \| |_) | | |_/ __| |
    |_||_|_| | |_| |___) |__) |  __/  |  _\__ \ |
     |_|_|_|  \___/|____/____/|_|     |_| |___/_|
  - 
  +
     OSSP fsl - Faking/Flexible Syslog Library
   
     CHANGELOG
  @@ -14,28 +14,28 @@
          openlog(2) is called without LOG_NDELAY no filedescriptor is
          consumed.  Prevously debugging unconditionally took one or more
          filedescriptors which violates POSIX.
  -   
  +
       *) for compatiblity reasons, the library will no longer print any
          messages to stderr under any circumstances. If debugging is not
          possible or disabled, messages will be silently discarded.
  -    
  +
       *) for security reasons the process environment is completely
          ignored.  The drawback is that FSL_CFGDIR, FSL_PREFIX and most
          debugging options are now configure options only.
  -   
  +
       *) for safety reasons, when debugging is not used the whole
          debugging code is replaced with a simple no-operation stub function.
  -   
  +
       *) for convenience reasons, what(1) or a "strings binarywithfsl |
          grep '@(#)'" will provide information about debugging code being
          omitted or included and, in the latter case, which logfile and
          logmask are being used.
  -   
  +
       *) for convenience reasons and to keep simple things simple,
          debugging now logs to a file only and support to use l2spec for
          debugging is entirely removed at this time. The logfile, the logstop
          maximum file size and the logmask are configure options.
  -   
  +
       *) for flexibility reasons but still to stay away from the process
          environment the logmask is configured by reading the content of a
          symlink.
  @@ -111,7 +111,7 @@
   
     Changes between 1.0.0 and 1.0.1 (01-Aug-2002 to 02-Aug-2002)
   
  -    *) Change building of fsl_version.c from direct inclusion 
  +    *) Change building of fsl_version.c from direct inclusion
          to standard object linking.
          [Ralf S. Engelschall <rse@engelschall.com>]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 Makefile.in
  --- ossp-pkg/fsl/Makefile.in	22 May 2003 12:30:35 -0000	1.15
  +++ ossp-pkg/fsl/Makefile.in	22 May 2003 14:01:55 -0000	1.16
  @@ -84,7 +84,7 @@
   _SUBDIRS_distclean _SUBDIRS_realclean _SUBDIRS_depend:
   	@$(MAKE) $(MFLAGS) \
   	         _SUBDIRS_TARGET=`echo $@ | sed -e 's/^_SUBDIRS_//'` \
  -	         _SUBDIRS_STEPDOWN 
  +	         _SUBDIRS_STEPDOWN
   
   #   the work horse rule which steps down to the subdirs in a loop
   _SUBDIRS_STEPDOWN:
  @@ -164,7 +164,7 @@
   	-$(RM) Makefile config.h sa-config
   	-$(RM) libtool
   
  -realclean: 
  +realclean:
   	@$(MAKE) $(MFLAGS) _SUBDIRS_realclean
   	@$(MAKE) $(MFLAGS) distclean
   	-$(RM) fsl.3
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/configure.ac
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 configure.ac
  --- ossp-pkg/fsl/configure.ac	6 Jan 2003 16:41:21 -0000	1.14
  +++ ossp-pkg/fsl/configure.ac	22 May 2003 14:01:55 -0000	1.15
  @@ -55,16 +55,16 @@
   AC_CHECK_LIB(nsl, gethostname)
   if test ".`echo $LIBS | grep nsl`" = . ;then
       AC_CHECK_LIB(nsl, gethostbyname)
  -fi  
  +fi
   AC_CHECK_LIB(socket, accept)
   
   dnl #   pre-processing for subdirs
   LIB_DEPS=""
   
   dnl #   check for OSSP l2 library
  -AC_CHECK_EXTLIB([OSSP l2], 
  -                l2, l2_stream_log, l2.h, 
  -                [SUBDIR_L2=""], 
  +AC_CHECK_EXTLIB([OSSP l2],
  +                l2, l2_stream_log, l2.h,
  +                [SUBDIR_L2=""],
                   [SUBDIR_L2="lib_l2"
                    CPPFLAGS="$CPPFLAGS -Ilib_l2"
                    CFLAGS="$CFLAGS -Ilib_l2"
  @@ -72,9 +72,9 @@
   AC_SUBST(SUBDIR_L2)
   
   dnl #   check for OSSP cfg library
  -AC_CHECK_EXTLIB([OSSP cfg], 
  -                cfg, cfg_syn_import, cfg.h, 
  -                [SUBDIR_CFG=""], 
  +AC_CHECK_EXTLIB([OSSP cfg],
  +                cfg, cfg_syn_import, cfg.h,
  +                [SUBDIR_CFG=""],
                   [SUBDIR_CFG="lib_cfg"
                    CPPFLAGS="$CPPFLAGS -Ilib_cfg"
                    CFLAGS="$CFLAGS -Ilib_cfg"
  @@ -82,9 +82,9 @@
   AC_SUBST(SUBDIR_CFG)
   
   dnl #   check for OSSP pcre library
  -AC_CHECK_EXTLIB([OSSP pcre], 
  -                pcre, pcre_compile, pcre.h, 
  -                [SUBDIR_PCRE=""], 
  +AC_CHECK_EXTLIB([OSSP pcre],
  +                pcre, pcre_compile, pcre.h,
  +                [SUBDIR_PCRE=""],
                   [SUBDIR_PCRE="lib_pcre"
                    CPPFLAGS="$CPPFLAGS -Ilib_pcre"
                    CFLAGS="$CFLAGS -Ilib_pcre"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/devtool
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 devtool
  --- ossp-pkg/fsl/devtool	9 Jul 2002 09:42:09 -0000	1.1
  +++ ossp-pkg/fsl/devtool	22 May 2003 14:01:55 -0000	1.2
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  devtool -- Development Tool
  -##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   if [ $# -eq 0 ]; then
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/devtool.func
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.func
  --- ossp-pkg/fsl/devtool.func	27 Jan 2003 16:29:31 -0000	1.2
  +++ ossp-pkg/fsl/devtool.func	22 May 2003 14:01:55 -0000	1.3
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   devtool_require () {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl.c
  ============================================================================
  $ cvs diff -u -r1.60 -r1.61 fsl.c
  --- ossp-pkg/fsl/fsl.c	22 May 2003 13:48:45 -0000	1.60
  +++ ossp-pkg/fsl/fsl.c	22 May 2003 14:01:55 -0000	1.61
  @@ -200,7 +200,7 @@
       int           fsldebug_permanentproblem;
   #endif /* ifdef FSL_DEBUGLOGCODE */
       char         *fsl_config;
  -} ctx = { 
  +} ctx = {
       NULL,
       NULL,
       NULL,
  @@ -217,12 +217,12 @@
   #endif /* ifdef FSL_DEBUGLOGCODE */
       "@(#)OSSP fsl config "
       "cfgdir=" FSL_CFGDIR " "
  -    "prefix=" FSL_PREFIX 
  +    "prefix=" FSL_PREFIX
       "\n"
       "@(#)OSSP fsl debug "
   #ifdef FSL_DEBUGLOGCODE
       "logfile=" FSL_DEBUGLOGFILE " "
  -    "logmask=" FSL_DEBUGLOGMASK 
  +    "logmask=" FSL_DEBUGLOGMASK
   #else /* ifdef FSL_DEBUGLOGCODE */
       "code omitted"
   #endif /* ifdef FSL_DEBUGLOGCODE */
  @@ -279,7 +279,7 @@
           /* level */
           l2_util_sprintf( &cpo[cpn], MAXWRITESIZE-cpn, "<%s> ", l2_util_l2s(cp, sizeof(cp), '\0', level) == L2_OK ? cp : "unknown");
           cpn = strlen(cpo);
  -        
  +
           /* program "name" and pid */
           l2_util_sprintf( &cpo[cpn], MAXWRITESIZE-cpn, "%s[%lu^%lu] ", ctx.cpISF != NULL ? ctx.cpISF : "unknown", (unsigned long)getpid(), (unsigned long)getppid());
           cpn = strlen(cpo);
  @@ -504,7 +504,7 @@
       return n;
   }
   
  -/*  process OSSP cfg node tree directives 
  +/*  process OSSP cfg node tree directives
       mode=0 processes map/ident,
       mode=1 processes default
    */
  @@ -685,7 +685,7 @@
                   }
                   if (mapto == -1) {
                       fsldebug(L2_LEVEL_ERROR, "processcfg: trying to map to unknown l2 level \"%s\"", cfgargtoka[2]); CU(FSL_ERR_CUS); }
  -                
  +
                   ctx.levelmap[mapfrom].l2 = l2level2string[mapto].level;
                   fsldebug(L2_LEVEL_DEBUG, "processcfg: map levelmap[%10s/%d].l2 = l2level2string[%10s/%d].level = 0x%.8lx", cfgargtoka[1], mapfrom, cfgargtoka[2], mapto, (unsigned long)l2level2string[mapto].level);
               }
  @@ -767,7 +767,7 @@
       for (i = 0; sysloglevel2string[i].string != NULL; i++) {
           ctx.levelmap[i].syslog = sysloglevel2string[i].level;
           ctx.levelmap[i].l2     = sysloglevel2string[i].deflevelmap;
  -        fsldebug(L2_LEVEL_DEBUG, "openlog: ctx.levelmap[%d].syslog = 0x%.8lx, ctx.levelmap[%d].l2 = 0x%.8lx", 
  +        fsldebug(L2_LEVEL_DEBUG, "openlog: ctx.levelmap[%d].syslog = 0x%.8lx, ctx.levelmap[%d].l2 = 0x%.8lx",
                    i, (unsigned long)ctx.levelmap[i].syslog, i, (unsigned long)ctx.levelmap[i].l2);
       }
   
  @@ -918,7 +918,7 @@
       int i;
       l2_result_t l2rv;
       char *cp;
  -    
  +
       /* tracing */
       fsldebug(L2_LEVEL_TRACE, "fsl in vsyslog(3) fmt=%s%s%s ...", fmt == NULL ? "" : "\"", fmt == NULL ? "NULL" : fmt, fmt == NULL ? "" : "\"");
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl.pod
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 fsl.pod
  --- ossp-pkg/fsl/fsl.pod	22 May 2003 12:30:35 -0000	1.28
  +++ ossp-pkg/fsl/fsl.pod	22 May 2003 14:01:55 -0000	1.29
  @@ -106,7 +106,7 @@
   context-free grammar:
   
   B<l2-spec>        ::= B<stream>
  -                 
  +
   B<stream>         ::= I<empty>
                    | B<channel>
                    | B<channel> '->' B<stream>
  @@ -146,7 +146,7 @@
                    | 'null'
                    | 'pipe'
                    | 'prefix'
  -                 | 'smtp' 
  +                 | 'smtp'
                    | 'socket'
                    | 'syslog'
                    | ...
  @@ -157,7 +157,7 @@
   
   B<channel_plist>  ::= B<channel_param>
                    | B<channel_param> ',' B<channel_plist>
  -        
  +
   B<channel_param>  ::= B<param_name> '=' B<param_value>
   
   B<param_name>     ::= m/[a-zA-Z][a-zA-Z0-9_-]*/
  @@ -203,7 +203,7 @@
   messages poured in from upper channels to this file. If the file at
   the given path already exists, additional data is either appended
   (I<append>=1) or the existing file is truncated (I<append>=0). The
  -desired permissions of the file can be set. 
  +desired permissions of the file can be set.
   
    o file   (STR path            m
              INT append          o [0=truncate|1=append] =1
  @@ -237,7 +237,7 @@
              STR username        o [string]           =localuser"@"localhost
              STR realname        o [string]           =username
              STR channel         o [string]           ="#l2"
  -           INT join            o [01]               =1 use JOIN/PART 
  +           INT join            o [01]               =1 use JOIN/PART
              STR host            m [hostname|address]
              STR port            o [tcpport]          =6667
              INT timeout         o [sec]              =30
  @@ -375,24 +375,24 @@
    -> {
        (info): filter(
            regex="foo"
  -     ) 
  +     )
        -> syslog(
            remotehost="localhost",
            ident="l2"
        );
        info: prefix(
            prefix="[%b %d %H:%M:%S] <%L> [%P]"
  -     ) 
  +     )
        -> {
            debug/error: buffer(
                size=65536
  -         ) 
  +         )
            -> file(
                path="a"
            );
            (trace|debug)/(trace): buffer(
                size=65536
  -         ) -> 
  +         ) ->
            file(
                path="b",
                perm=0660
  @@ -400,17 +400,17 @@
        };
        prefix() -> {
            warning: filter(
  -             negate=1, 
  +             negate=1,
                regex="foo"
  -         ) 
  +         )
            -> irc(
                host=irc.example.com,
                timeout=3
            );
            error: filter(
  -             nocase=1, 
  +             nocase=1,
                regex="foo"
  -         ) 
  +         )
            -> smtp(
                host=mail.example.com,
                rcpt=cfo@example.com
  @@ -436,45 +436,45 @@
    map notice  notice;
    map info    info;
    map debug   debug;
  - 
  +
    #   equivalent of the usual INN syslog.conf(5) entries:
    #   news.crit    @l_prefix@/var/inn/log/news.crit
    #   news.err     @l_prefix@/var/inn/log/news.err
    #   news.notice  @l_prefix@/var/inn/log/news.notice
    ident (.+)/news q{
        prefix(
  -       prefix="%b %d %H:%M:%S %N $1[%P]: ", 
  +       prefix="%b %d %H:%M:%S %N $1[%P]: ",
          timezone=local
  -     ) 
  +     )
        -> {
            critical: file(
                path="@l_prefix@/var/inn/log/news.crit",
  -             append=1, 
  +             append=1,
                perm=0644
            );
            error: file(
                path="@l_prefix@/var/inn/log/news.err",
  -             append=1, 
  +             append=1,
                perm=0644
            );
            notice: file(
                path="@l_prefix@/var/inn/log/news.notice",
  -             append=1, 
  +             append=1,
                perm=0644
            )
        }
    }
  - 
  +
    #   default logging
    default (.+)/.+ q{
  -     debug: 
  +     debug:
        prefix(
  -         prefix="%b %d %H:%M:%S <%L> $1[%P]: ", 
  +         prefix="%b %d %H:%M:%S <%L> $1[%P]: ",
            timezone=local
  -     ) -> 
  +     ) ->
        file(
  -         path="@l_prefix@/var/fsl/default.log", 
  -         append=1, 
  +         path="@l_prefix@/var/fsl/default.log",
  +         append=1,
            perm=0644
        )
    };
  @@ -553,7 +553,7 @@
   
   =item F<@FSL_CFGDIR@/@FSL_PREFIX@*>
   
  -B<OSSP fsl> reads configuration sections located in these files. 
  +B<OSSP fsl> reads configuration sections located in these files.
   
   =back
   
  @@ -610,7 +610,7 @@
   replacement for its old B<fakesyslog> library. It was prompted by the
   necessity to log to multiple files in the B<OpenPKG> F<inn> package
   and to write messages of particular log levels to different files in
  -the B<OpenPKG> F<postfix> package. 
  +the B<OpenPKG> F<postfix> package.
   
   The resulting work was generously contributed as Open Source Software
   to the B<OSSP> project by I<Cable & Wireless Deutschland GmbH>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl_test.cfg
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 fsl_test.cfg
  --- ossp-pkg/fsl/fsl_test.cfg	6 Aug 2002 11:34:32 -0000	1.2
  +++ ossp-pkg/fsl/fsl_test.cfg	22 May 2003 14:01:55 -0000	1.3
  @@ -13,14 +13,14 @@
   
   #   default logging specification
   default (.+)/.+ q{
  -    debug: 
  +    debug:
       prefix(
  -        prefix="%b %d %H:%M:%S <%L> $1[%P]@%N: ", 
  +        prefix="%b %d %H:%M:%S <%L> $1[%P]@%N: ",
           timezone=local
  -    ) -> 
  +    ) ->
       file(
  -        path="./fsl_test.syslog", 
  -        append=1, 
  +        path="./fsl_test.syslog",
  +        append=1,
           perm=0644
       )
   };
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 22 16:03:12 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6071D76762; Thu, 22 May 2003 16:03:12 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ README fsl_version.c
Message-Id: <20030522140312.6071D76762@mail.ossp.org>
Date: Thu, 22 May 2003 16:03:12 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   22-May-2003 16:03:12
  Branch: HEAD                             Handle: 2003052215030800

  Modified files:
    ossp-pkg/fsl            README fsl_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.33        +1  -1      ossp-pkg/fsl/README
    1.19        +9  -9      ossp-pkg/fsl/fsl_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/README
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 README
  --- ossp-pkg/fsl/README	22 May 2003 13:05:00 -0000	1.32
  +++ ossp-pkg/fsl/README	22 May 2003 14:03:08 -0000	1.33
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_| |___/_|
    
     OSSP fsl - Faking/Flexible Syslog Library
  -  Version 1.1b1 (22-May-2003)
  +  Version 1.1.0 (22-May-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl_version.c
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 fsl_version.c
  --- ossp-pkg/fsl/fsl_version.c	22 May 2003 13:05:00 -0000	1.18
  +++ ossp-pkg/fsl/fsl_version.c	22 May 2003 14:03:08 -0000	1.19
  @@ -8,7 +8,7 @@
   #ifndef _FSL_VERSION_C_
   #define _FSL_VERSION_C_
   
  -#define FSL_VERSION 0x101101
  +#define FSL_VERSION 0x101200
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _FSL_VERSION_C_AS_HEADER_
   
   fsl_version_t fsl_version = {
  -    0x101101,
  -    "1.1b1",
  -    "1.1b1 (22-May-2003)",
  -    "This is OSSP fsl, Version 1.1b1 (22-May-2003)",
  -    "OSSP fsl 1.1b1 (22-May-2003)",
  -    "OSSP fsl/1.1b1",
  -    "@(#)OSSP fsl 1.1b1 (22-May-2003)",
  -    "$Id: fsl_version.c,v 1.18 2003/05/22 13:05:00 thl Exp $"
  +    0x101200,
  +    "1.1.0",
  +    "1.1.0 (22-May-2003)",
  +    "This is OSSP fsl, Version 1.1.0 (22-May-2003)",
  +    "OSSP fsl 1.1.0 (22-May-2003)",
  +    "OSSP fsl/1.1.0",
  +    "@(#)OSSP fsl 1.1.0 (22-May-2003)",
  +    "$Id: fsl_version.c,v 1.19 2003/05/22 14:03:08 thl Exp $"
   };
   
   #endif /* _FSL_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 22 16:22:52 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4CC6476752; Thu, 22 May 2003 16:22:52 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/fsl/ faq.wml
Message-Id: <20030522142252.4CC6476752@mail.ossp.org>
Date: Thu, 22 May 2003 16:22:52 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-web                         Date:   22-May-2003 16:22:51
  Branch: HEAD                             Handle: 2003052215225100

  Modified files:
    ossp-web/pkg/lib/fsl    faq.wml

  Log:
    introduce fsl 1.1.0 feature

  Summary:
    Revision    Changes     Path
    1.6         +8  -0      ossp-web/pkg/lib/fsl/faq.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/fsl/faq.wml
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 faq.wml
  --- ossp-web/pkg/lib/fsl/faq.wml	17 Apr 2003 11:11:58 -0000	1.5
  +++ ossp-web/pkg/lib/fsl/faq.wml	22 May 2003 14:22:51 -0000	1.6
  @@ -120,5 +120,13 @@
           $ strings <i>/cw12/sbin/postfix</i> | grep '@(#)OSSP fsl'
           @(#)OSSP fsl 1.0.8 (13-Feb-2003)
       </pre>
  +    Starting with fsl 1.1.0 additional information about configure options is visible
  +    <pre>
  +            OSSP fsl config cfgdir=/cw/etc/fsl prefix=fsl.
  +    </pre>
  +    Starting with fsl 1.1.0 additional information about debugging options is visible
  +    <pre>
  +            OSSP fsl debug logfile=/tmp/fsl/var/fsl/debuglogfile logmask=/tmp/fsl/var/fsl/debuglogmask
  +    </pre>
   </faq>
   </ol>
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 22 16:29:32 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E157A76752; Thu, 22 May 2003 16:29:31 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/fsl/ index.wml oss...
Message-Id: <20030522142931.E157A76752@mail.ossp.org>
Date: Thu, 22 May 2003 16:29:31 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-web                         Date:   22-May-2003 16:29:31
  Branch: HEAD                             Handle: 2003052215292703

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/fsl    index.wml

  Log:
    introduce fsl v1.1.0

  Summary:
    Revision    Changes     Path
    1.60        +1  -0      ossp-web/new/news.txt
    1.18        +2  -2      ossp-web/pkg/lib/fsl/index.wml
    1.56        +1  -1      ossp-web/pkg/lib/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.59 -r1.60 news.txt
  --- ossp-web/new/news.txt	7 Mar 2003 16:02:57 -0000	1.59
  +++ ossp-web/new/news.txt	22 May 2003 14:29:27 -0000	1.60
  @@ -1,3 +1,4 @@
  +22-May-2003: Released L<OSSP fsl> 1.1.0
   07-Mar-2003: Released L<OSSP mm> 1.3.0
   17-Feb-2003: Released L<GNU pth> 2.0.0
   17-Feb-2003: Released L<OSSP str> 0.9.8
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/fsl/index.wml
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 index.wml
  --- ossp-web/pkg/lib/fsl/index.wml	24 Mar 2003 16:11:51 -0000	1.17
  +++ ossp-web/pkg/lib/fsl/index.wml	22 May 2003 14:29:30 -0000	1.18
  @@ -46,7 +46,7 @@
   <pkg_status
       name="fsl" assign="thl"
       genesis="Jul-2002"
  -    stable="1.0.8" stable_date="13-Feb-2003"
  +    stable="1.1.0" stable_date="22-May-2003"
       unstable="none"  unstable_date="none"
   	done=100>
   
  @@ -57,7 +57,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/fsl/
       directory=$(FTP_ROOT_DIR)/pkg/lib/fsl/
       files="fsl-*.tar.gz" 
  -	stable="fsl-1.0.8.tar.gz" unstable="none">
  +	stable="fsl-1.1.0.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.55 -r1.56 index.wml
  --- ossp-web/pkg/lib/index.wml	7 Mar 2003 16:03:00 -0000	1.55
  +++ ossp-web/pkg/lib/index.wml	22 May 2003 14:29:28 -0000	1.56
  @@ -27,7 +27,7 @@
   			done=100 stable=1.0.5 unstable=none>
     <pkg_item name="fsl" longname="OSSP fsl" type="lib"
               desc="Faked/Flexible Syslog"
  -			done=100 stable=1.0.8 unstable=none>
  +			done=100 stable=1.1.0 unstable=none>
     <pkg_item name="var" longname="OSSP var" type="lib"
               desc="Variable Expansion"
   			done=100 stable=1.0.0 unstable=none>
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 22 16:38:57 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1474476D25; Thu, 22 May 2003 16:38:57 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/fsl/ index.wml
Message-Id: <20030522143857.1474476D25@mail.ossp.org>
Date: Thu, 22 May 2003 16:38:57 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-web                         Date:   22-May-2003 16:38:56
  Branch: HEAD                             Handle: 2003052215385600

  Modified files:
    ossp-web/pkg/lib/fsl    index.wml

  Log:
    proper escaping of dot against wrong alpha/beta match

  Summary:
    Revision    Changes     Path
    1.19        +1  -1      ossp-web/pkg/lib/fsl/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/fsl/index.wml
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 index.wml
  --- ossp-web/pkg/lib/fsl/index.wml	22 May 2003 14:29:30 -0000	1.18
  +++ ossp-web/pkg/lib/fsl/index.wml	22 May 2003 14:38:56 -0000	1.19
  @@ -57,7 +57,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/fsl/
       directory=$(FTP_ROOT_DIR)/pkg/lib/fsl/
       files="fsl-*.tar.gz" 
  -	stable="fsl-1.1.0.tar.gz" unstable="none">
  +	stable="fsl-1.1\\\\\\\.0.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 22 16:45:23 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 54CA676D26; Thu, 22 May 2003 16:45:22 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/rc_test/ rc.dhcpd rc.ntp rc.pam rc.ralf rc.sam...
Message-Id: <20030522144522.54CA676D26@mail.ossp.org>
Date: Thu, 22 May 2003 16:45:22 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   22-May-2003 16:45:22
  Branch: HEAD                             Handle: 2003052215451401

  Modified files:
    ossp-pkg/rc/rc_test     rc.dhcpd rc.ntp rc.pam rc.ralf rc.samba rc.zebra

  Log:
    Add a 'test' section that just echos text.

  Summary:
    Revision    Changes     Path
    1.6         +3  -0      ossp-pkg/rc/rc_test/rc.dhcpd
    1.5         +3  -0      ossp-pkg/rc/rc_test/rc.ntp
    1.4         +4  -0      ossp-pkg/rc/rc_test/rc.pam
    1.2         +3  -0      ossp-pkg/rc/rc_test/rc.ralf
    1.4         +3  -0      ossp-pkg/rc/rc_test/rc.samba
    1.5         +3  -0      ossp-pkg/rc/rc_test/rc.zebra
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_test/rc.dhcpd
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 rc.dhcpd
  --- ossp-pkg/rc/rc_test/rc.dhcpd	19 May 2003 19:05:11 -0000	1.5
  +++ ossp-pkg/rc/rc_test/rc.dhcpd	22 May 2003 14:45:14 -0000	1.6
  @@ -6,6 +6,9 @@
       dhcpd_enable="yes"
       hacking="ofcourse"
   
  +%test
  +    echo "Just an echo to test dhcpd"
  +
   %start -p 220 -u root
       echo "Pri 220"
       opServiceEnabled dhcpd || exit 0
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_test/rc.ntp
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 rc.ntp
  --- ossp-pkg/rc/rc_test/rc.ntp	19 May 2003 19:05:11 -0000	1.4
  +++ ossp-pkg/rc/rc_test/rc.ntp	22 May 2003 14:45:15 -0000	1.5
  @@ -2,6 +2,9 @@
   
   echo "Run commands NTP starting"
   
  +%test
  +    echo "Just an echo to test ntp"
  +
   %start -p100 -u root
       echo "Pri 100"
       opServiceEnabled ntp || exit 0
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_test/rc.pam
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 rc.pam
  --- ossp-pkg/rc/rc_test/rc.pam	1 Aug 2002 13:25:33 -0000	1.3
  +++ ossp-pkg/rc/rc_test/rc.pam	22 May 2003 14:45:15 -0000	1.4
  @@ -14,6 +14,10 @@
   Here is some comments.
   Nada mas.
   
  +<test>
  +    echo "Just an echo to test pam"
  +</test>
  +
   <info>
       echo "PAM Enabled:           ${pam_enable}"
       echo "PAM Config  Location:  ${pam_cfgloc}"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_test/rc.ralf
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 rc.ralf
  --- ossp-pkg/rc/rc_test/rc.ralf	5 Jul 2002 11:16:20 -0000	1.1
  +++ ossp-pkg/rc/rc_test/rc.ralf	22 May 2003 14:45:15 -0000	1.2
  @@ -2,6 +2,9 @@
   
   echo "Run commands RALF starting"
   
  +%test
  +    echo "Just an echo to test ralf"
  +
   RALF="NiceGuy"
   HEILO="RockRoll"
   echo "$RALF s play $HEILO"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_test/rc.samba
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 rc.samba
  --- ossp-pkg/rc/rc_test/rc.samba	21 May 2003 15:16:44 -0000	1.3
  +++ ossp-pkg/rc/rc_test/rc.samba	22 May 2003 14:45:15 -0000	1.4
  @@ -5,6 +5,9 @@
   %config
       host aldi.de
   
  +%test
  +    echo "Just an echo to test samba"
  +
   %search
       whois cyvaned.com
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_test/rc.zebra
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 rc.zebra
  --- ossp-pkg/rc/rc_test/rc.zebra	19 May 2003 19:05:11 -0000	1.4
  +++ ossp-pkg/rc/rc_test/rc.zebra	22 May 2003 14:45:15 -0000	1.5
  @@ -12,5 +12,8 @@
   echo "Run commands Zebra finishing"
   echo
   
  +%test
  +    echo "Just an echo to test zebra"
  +
   %start -u ms
       echo "No priority given, Otay zebra in Umfolozi"
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 22 16:46:35 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 756DD76D26; Thu, 22 May 2003 16:46:35 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ 00TODO rc_proc.c
Message-Id: <20030522144635.756DD76D26@mail.ossp.org>
Date: Thu, 22 May 2003 16:46:35 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   22-May-2003 16:46:35
  Branch: HEAD                             Handle: 2003052215463300

  Modified files:
    ossp-pkg/rc             00TODO rc_proc.c

  Log:
    Half finish the per-user process logic, leading up to coding the fork(2) and
    waitpid(2).

  Summary:
    Revision    Changes     Path
    1.43        +1  -0      ossp-pkg/rc/00TODO
    1.32        +20 -18     ossp-pkg/rc/rc_proc.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/00TODO
  ============================================================================
  $ cvs diff -u -r1.42 -r1.43 00TODO
  --- ossp-pkg/rc/00TODO	21 May 2003 15:16:41 -0000	1.42
  +++ ossp-pkg/rc/00TODO	22 May 2003 14:46:33 -0000	1.43
  @@ -24,6 +24,7 @@
       sections of a rcfile are not kept together (logic copied anyways.)
     Rc file prefix rc. is hardcoded, and when wildcard is given, the prefix is
       used in selecting files. Location is not properly used. See rc_anal.c.
  +  when a section is not found, the config is also not executed
   
   Document
     Refs, pri, user, group, ci, go only in normal (not special) sections.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	21 May 2003 15:24:07 -0000	1.31
  +++ ossp-pkg/rc/rc_proc.c	22 May 2003 14:46:33 -0000	1.32
  @@ -196,6 +196,7 @@
       int   nSecs     = 0;              /* Section index       */
       char *szTmpfile = NULL;           /* Path of temporary file          */
       char *szTmp     = NULL;           /* Generic temporary string        */
  +    char *szCom     = NULL;           /* Stores common script text       */
       char *szExec    = NULL;           /* Used only during exec mode      */
       char *pszVec[RC_EXEC_MAXARGS];    /* For passing in to execv(3)      */
       rc_script_t   *pFatscript = NULL; /* To build a comprehensive script */
  @@ -263,10 +264,7 @@
       else if (configGetval(RC_EXC_VAL)) {                        /* Execute  */
           /* Allocate a block of section pointers to use temporarily */
           ppSectmp = calloc(pRc->m_pAnal->m_nRcs, sizeof(rc_section_t *));
  -        /* Allocate the command chain string to execute with execv(3) */
  -        szTmp = (char *)scriptTostring(pRc->m_pScriptcom);
  -        szExec = malloc((strlen(szTmp) + 1) * sizeof(char));
  -        strcpy(szExec, szTmp);
  +        szCom = (char *)scriptTostring(pRc->m_pScriptcom);
           for (nSecs = 0; nSecs < pRc->m_pAnal->m_nSecs; nSecs++) {
               for (nRcs = 0; nRcs < pRc->m_pAnal->m_nRcs; nRcs++) {
                   nTmp = 0;
  @@ -280,27 +278,31 @@
                       ppSectmp[nRcs] = NULL;
               }
               qsort((void *)ppSectmp, (size_t)pRc->m_pAnal->m_nRcs, sizeof(rc_section_t *), priCompare);
  -            nTmp = 0;
  +            pszVec[0] = "/bin/sh";  /* Run the bourne shell over the following */
  +            pszVec[1] = "-c";       /* Append script code of the sections */
  +            pszVec[3] = NULL;       /* Add a NULL to mark the end of the chain */
  +            nTmp = 0; /* Count from zero until however many sections we have */
               while (nTmp < pRc->m_pAnal->m_nRcs && ppSectmp[nTmp]) {
                   szTmp = (char *)sectionGetdata(ppSectmp[nTmp]);
  -                szExec = realloc(szExec, (strlen(szExec) + 1) * sizeof(char) + \
  -                                         (strlen(szTmp) + 1) * sizeof(char));
  -                strcat(szExec, szTmp); /* Build onto the command chain */
  +                szExec = malloc(strlen(szCom) * sizeof(char) + \
  +                               (strlen(szTmp) + 1) * sizeof(char));
  +                strcpy(szExec, szCom); /* Start out with just the common script code */
  +                strcat(szExec, szTmp); /* And build a section onto the command chain */
  +                pszVec[2] = szExec; /* Actually launch the new process image now */
  +
  +/* FIXME: Put the fork in here! */
  +                if (execvp(*pszVec, pszVec) == -1) {                    /* launch */
  +                    TRACE("Bad, execvp for common script in child returned -1");
  +                    return(RC_THROW(RC_ERR_INT));
  +                }
  +
  +                free(szExec); /* Cleanup after exec */
  +                szExec = NULL;
                   nTmp++;
               }
           }
           free(ppSectmp);
           ppSectmp = NULL;
  -
  -        /* Actually launch the new process image now */
  -        pszVec[0] = "/bin/sh";
  -        pszVec[1] = "-c";
  -        pszVec[2] = szExec;
  -        pszVec[3] = NULL;   /* Add a NULL to mark the end of the chain */
  -        if (execvp(*pszVec, pszVec) == -1) {                    /* launch */
  -            TRACE("Bad, execvp for common script in child returned -1");
  -            return(RC_THROW(RC_ERR_INT));
  -        }
       }
       else if (configGetval(RC_PRN_VAL)) {                        /* Print  */
           /* Allocate a block of section pointers to use as a temporary */
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 22 20:56:57 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3FF7D76D23; Thu, 22 May 2003 20:56:56 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/string-divert/ Divert.pm Divert.pod MANIFEST Make...
Message-Id: <20030522185656.3FF7D76D23@mail.ossp.org>
Date: Thu, 22 May 2003 20:56:56 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-May-2003 20:56:55
  Branch: HEAD                             Handle: 2003052219565001

  Added files:
    ossp-pkg/string-divert  Divert.pm Divert.pod MANIFEST Makefile.PL README
                            TODO sample1.pl sample2.pl test.pl

  Log:
    finally add this little nasty beast to CVS

  Summary:
    Revision    Changes     Path
    1.1         +541 -0     ossp-pkg/string-divert/Divert.pm
    1.1         +367 -0     ossp-pkg/string-divert/Divert.pod
    1.1         +9  -0      ossp-pkg/string-divert/MANIFEST
    1.1         +11 -0      ossp-pkg/string-divert/Makefile.PL
    1.1         +12 -0      ossp-pkg/string-divert/README
    1.1         +7  -0      ossp-pkg/string-divert/TODO
    1.1         +28 -0      ossp-pkg/string-divert/sample1.pl
    1.1         +55 -0      ossp-pkg/string-divert/sample2.pl
    1.1         +133 -0     ossp-pkg/string-divert/test.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/Divert.pm
  ============================================================================
  $ cvs diff -u -r0 -r1.1 Divert.pm
  --- /dev/null	2003-05-22 20:56:51.000000000 +0200
  +++ Divert.pm	2003-05-22 20:56:51.000000000 +0200
  @@ -0,0 +1,541 @@
  +##
  +##  String::Divert - Diversion String Object
  +##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com> 
  +##
  +##  This file is part of String::Divert, a Perl module for
  +##  dealing with strings containing nested diversions.
  +##
  +##  This program is free software; you can redistribute it and/or
  +##  modify it under the terms of the GNU General Public  License
  +##  as published by the Free Software Foundation; either version
  +##  2.0 of the License, or (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this file; if not, write to the Free Software Foundation,
  +##  Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
  +##
  +##  Divert.pm: Module Implementation
  +##
  +
  +use 5.005;
  +use strict;
  +use warnings;
  +
  +#   _________________________________________________________________________
  +#
  +#   STANDARD OBJECT ORIENTED API
  +#   _________________________________________________________________________
  +#
  +
  +package String::Divert;
  +
  +require Exporter;
  +
  +our @ISA       = qw(Exporter);
  +our @EXPORT_OK = qw(new destroy DESTROY 
  +                    name overwrite
  +                    assign append string bool
  +                    fold unfold folding folder
  +                    divert undivert diversion
  +                    overload);
  +our $VERSION   = '0.90';
  +
  +#   object construction
  +sub new ($;$) {
  +    my ($proto, $name) = @_;
  +
  +    my $class = ref($proto) || $proto;
  +    my $self = {};
  +    bless ($self, $class);
  +
  +    $self->{name}      = (defined($name) ? $name : '');
  +    $self->{overwrite} = 'none';
  +    $self->{chunks}    = [ '' ];
  +    $self->{diversion} = [];
  +    $self->{foldermk}  = '{#%s#}';
  +    $self->{folderre}  = '\{#([a-zA-Z_][a-zA-Z0-9_]*)#\}';
  +
  +    return $self;
  +}
  +
  +#   object destruction (explicit)
  +sub destroy ($) {
  +    $_[0]->overload(0);
  +    bless $_[0], 'UNIVERSAL';
  +    undef $_[0];
  +    return;
  +}
  +
  +#   object destruction (implicit)
  +sub DESTROY ($) {
  +    return;
  +}   
  +
  +#   operation: set/get name of object
  +sub name ($;$) {
  +    my ($self, $name) = @_;
  +    return $self->{diversion}->[-1]->name($name)
  +        if (@{$self->{diversion}} > 0);
  +    my $old_name = $self->{name};
  +    if (defined($name)) {
  +        $self->{name} = $name;
  +    }
  +    return $old_name;
  +}
  +
  +#   operation: set/get overwrite mode
  +sub overwrite ($;$) {
  +    my ($self, $mode) = @_;
  +    return $self->{diversion}->[-1]->overwrite($mode)
  +        if (@{$self->{diversion}} > 0);
  +    my $old_mode = $self->{overwrite};
  +    if (defined($mode)) {
  +        die "invalid mode argument"
  +            if ($mode !~ m/^(none|once|always)$/);
  +        $self->{overwrite} = $mode;
  +    }
  +    return $old_mode;
  +}
  +
  +#   internal: split string into chunks
  +sub _chunking ($) {
  +    my ($self, $string) = @_;
  +    my @chunks = ();
  +    my $folderre = $self->{folderre};
  +    while ($string =~ m/${folderre}()/s) {
  +        my ($prolog, $id) = ($`, $1);
  +        push(@chunks, $prolog) if ($prolog ne '');
  +        die "empty folding object name"
  +            if ($id eq '');
  +        my $object = $self->folding($id);
  +        $object = $self->new($id) if (not defined($object));
  +        die "cannot reuse or create folding sub object \"$id\""
  +            if (not defined($object));
  +        push(@chunks, $object);
  +        $string = $';
  +    }
  +    push(@chunks, $string) if ($string ne '');
  +    return @chunks;
  +}
  +
  +#   operation: assign a string
  +sub assign ($$) {
  +    my ($self, $string) = @_;
  +    return $self->{diversion}->[-1]->assign($string)
  +        if (@{$self->{diversion}} > 0);
  +    die "cannot assign undefined string"
  +        if (not defined($string));
  +    die "cannot assign reference ".ref($string)." as string"
  +        if (ref($string));
  +    $self->{chunks} = [];
  +    foreach my $chunk ($self->_chunking($string)) {
  +        push(@{$self->{chunks}}, $chunk);
  +    }
  +    return $self;
  +}
  +
  +#   operation: append a string
  +sub append ($$) {
  +    my ($self, $string) = @_;
  +    return $self->{diversion}->[-1]->append($string)
  +        if (@{$self->{diversion}} > 0);
  +    die "cannot assign undefined string"
  +        if (not defined($string));
  +    die "cannot assign reference as string"
  +        if (ref($string));
  +    if (   $self->{overwrite} eq 'once' 
  +        or $self->{overwrite} eq 'always') {
  +        $self->{chunks} = [];
  +        foreach my $chunk ($self->_chunking($string)) {
  +            push(@{$self->{chunks}}, $chunk);
  +        }
  +        $self->{overwrite} = 'none'
  +            if ($self->{overwrite} eq 'once');
  +    }
  +    else {
  +        foreach my $chunk ($self->_chunking($string)) {
  +            if (ref($chunk)) {
  +                push(@{$self->{chunks}}, $chunk);
  +            }
  +            else {
  +                if (ref($self->{chunks}->[-1])) {
  +                    push(@{$self->{chunks}}, $chunk);
  +                }
  +                else {
  +                    $self->{chunks}->[-1] .= $chunk;
  +                }
  +            }
  +        }
  +    }
  +    return $self;
  +}
  +
  +#   operation: unfold (and return) string contents temporarily
  +sub string ($) {
  +    my ($self) = @_;
  +    my $string = '';
  +    return $self->{diversion}->[-1]->string()
  +        if (@{$self->{diversion}} > 0);
  +    foreach my $chunk (@{$self->{chunks}}) {
  +        if (ref($chunk)) {
  +            my $prefix = '';
  +            if ($string =~ m|([^\n]*)(\r?\n)*$|s) {
  +                $prefix = $1;
  +                $prefix =~ s|[^ \t]| |sg;
  +            }
  +            my $block = $chunk->string(); # recursion!
  +            $block =~ s|\n(?=.)|\n$prefix|sg if ($prefix ne '');
  +            $string .= $block;
  +        }
  +        else {
  +            $string .= $chunk;
  +        }
  +    }
  +    return $string;
  +}
  +
  +#   operation: unfold string contents temporarily until already true or finally false
  +sub bool ($) {
  +    my ($self) = @_;
  +    my $string = '';
  +    return $self->{diversion}->[-1]->bool()
  +        if (@{$self->{diversion}} > 0);
  +    foreach my $chunk (@{$self->{chunks}}) {
  +        if (ref($chunk)) {
  +            $string .= $chunk->string(); # recursion!
  +        }
  +        else {
  +            $string .= $chunk;
  +        }
  +        return 1 if ($string);
  +    }
  +    return 0;
  +}
  +
  +#   operation: append folding sub-object
  +sub fold ($$) {
  +    my ($self, $id) = @_;
  +    return $self->{diversion}->[-1]->fold($id)
  +        if (@{$self->{diversion}} > 0);
  +    die "undefined folding object identifier"
  +        if (not defined($id));
  +    if (ref($id)) {
  +        die "folding object not of class String::Divert"
  +            if (   UNIVERSAL::isa($id, "String::Divert")
  +                or UNIVERSAL::isa($id, "String::Divert::__OVERLOAD__"));
  +        push(@{$self->{chunks}}, $id);
  +        return $id;
  +    }
  +    else {
  +        my $object = $self->folding($id);
  +        $object = $self->new($id) if (not defined($object));
  +        die "unable to create new folding object"
  +            if (not defined($object));
  +        push(@{$self->{chunks}}, $object);
  +        return $object;
  +    }
  +}
  +
  +#   operation: unfold string contents permanently
  +sub unfold ($) {
  +    my ($self) = @_;
  +    return $self->{diversion}->[-1]->unfold()
  +        if (@{$self->{diversion}} > 0);
  +    my $string = $self->string();
  +    $self->{chunks} = [ $string ];
  +    return $string;
  +}
  +
  +#   internal: compare whether two objects are the same
  +sub _isobjeq ($$) {
  +    my ($obj1, $obj2) = @_;
  +    my $ov1 = $obj1->overload();
  +    my $ov2 = $obj2->overload();
  +    $obj1->overload(0);
  +    $obj2->overload(0);
  +    my $rv = ($obj1 == $obj2);
  +    $obj1->overload($ov1);
  +    $obj2->overload($ov2);
  +    return $rv;
  +}
  +
  +#   operation: lookup particular or all folding sub-object(s)
  +sub folding ($;$) {
  +    my ($self, $id) = @_;
  +    return $self->{diversion}->[-1]->folding($id)
  +        if (@{$self->{diversion}} > 0);
  +    if (defined($id)) {
  +        my $folding = undef;
  +        foreach my $chunk (@{$self->{chunks}}) {
  +            if (ref($chunk)) {
  +                if (   (ref($id)     and &String::Divert::_isobjeq($chunk, $id))
  +                    or (not ref($id) and $chunk->name() eq $id) ) {
  +                    $folding = $chunk;
  +                    last;
  +                }
  +                $folding = $chunk->folding($id);
  +                last if (defined($folding));
  +            }
  +        }
  +        return $folding;
  +    }
  +    else {
  +        my @foldings = ();
  +        foreach my $chunk (@{$self->{chunks}}) {
  +            if (ref($chunk)) {
  +                foreach my $subchunk ($chunk->folding()) {
  +                    push(@foldings, $subchunk);
  +                }
  +                push(@foldings, $chunk);
  +            }
  +        }
  +        return @foldings;
  +    }
  +}
  +
  +#   operation: configure or generate textually represented folding object
  +sub folder ($$;$) {
  +    my ($self, $a, $b) = @_;
  +    if (defined($b)) {
  +        #   configure folder
  +        my $test = sprintf($a, "foo");
  +        my $id = ($test =~ m|${b}()|s);
  +        die "folder construction format and matching regular expression do not correspond"
  +            if ($id ne "foo");
  +        $self->{foldermk} = $a;
  +        $self->{folderre} = $b;
  +        return;
  +    }
  +    else {
  +        #   create folder
  +        my $folder = sprintf($self->{foldermk}, $a);
  +        return $folder;
  +    }
  +}
  +
  +#   operation: push diversion of operations to sub-object
  +sub divert ($$) {
  +    my ($self, $id) = @_;
  +    my $object = $self->folding($id);
  +    die "folding sub-object \"$id\" not found"
  +        if (not defined($object));
  +    push(@{$self->{diversion}}, $object);
  +    return $self;
  +}
  +
  +#   operation: pop diversion of operations to sub-object
  +sub undivert ($;$) {
  +    my ($self, $num) = @_;
  +    $num = 1 if (not defined($num));
  +    $num = @{$self->{diversion}} if ($num == 0);
  +    die "less number (".scalar(@{$self->{diversion}}).") of diversions active than requested ($num) to undivert"
  +        if ($num > @{$self->{diversion}});
  +    while ($num-- > 0) {
  +        pop(@{$self->{diversion}});
  +    }
  +    return $self;
  +}
  +
  +#   operation: lookup last or all diversion(s)
  +sub diversion ($) {
  +    my ($self) = @_;
  +    if (not wantarray) {
  +        #   return last diversion only
  +        return $self->{diversion}->[-1];
  +    }
  +    else {
  +        #   return all diversions (in reverse order of activation)
  +        return reverse(@{$self->{diversion}});
  +    }
  +}
  +
  +#   _________________________________________________________________________
  +#
  +#   API SWITCHING
  +#   _________________________________________________________________________
  +#
  +
  +#   object overloading toogle method
  +sub overload ($;$) {
  +    #   NOTICE: This function is special in that it exploits the fact
  +    #   that Perl's @_ contains just ALIASES for the arguments of
  +    #   the function and hence the function can adjust them. This
  +    #   allows us to tie() the variable of our object ($_[0]) into the
  +    #   overloading sub class or back to our main class. Just tie()ing
  +    #   a copy of $_[0] (usually named $self in the other methods)
  +    #   would be useless, because the Perl TIE mechanism is attached to
  +    #   _variables_ and not to the objects itself. Hence this function
  +    #   does no "my ($self, $mode) = @_;" and instead uses @_ directly
  +    #   throughout its body.
  +    my $old_mode = (ref($_[0]) eq "String::Divert" ? 0 : 1);
  +    if (defined($_[1])) {
  +        if ($_[1]) {
  +            #   bless and tie into overloaded subclass
  +            my $self = $_[0];
  +            bless $_[0], "String::Divert::__OVERLOAD__";
  +            #tie   $_[0], "String::Divert::__OVERLOAD__", $self;
  +            #   according to "BUGS" section in "perldoc overload":
  +            #   "Relation between overloading and tie()ing is broken.
  +            #   Overloading is triggered or not basing on the previous
  +            #   class of tie()d value. This happens because the presence
  +            #   of overloading is checked too early, before any tie()d
  +            #   access is attempted. If the FETCH()ed class of the
  +            #   tie()d value does not change, a simple workaround is to
  +            #   access the value immediately after tie()ing, so that
  +            #   after this call the previous class coincides with the
  +            #   current one."... So, do this now!
  +            #my $dummy = ref($_[0]);
  +        }
  +        else {
  +            #   untie and rebless into master class
  +            #untie $_[0];
  +            bless $_[0], "String::Divert";
  +        }
  +    }
  +    return $old_mode;
  +}
  +
  +#   _________________________________________________________________________
  +#
  +#   OPERATOR OVERLOADING API
  +#   _________________________________________________________________________
  +#
  +
  +package String::Divert::__OVERLOAD__;
  +
  +our @ISA       = qw(Exporter String::Divert);
  +our @EXPORT_OK = qw();
  +
  +#   define operator overloading
  +use overload (
  +     '""'       => \&op_string,
  +     'bool'     => \&op_bool,
  +     '0+'       => \&op_numeric,
  +     '.'        => \&op_concat,
  +     '.='       => \&op_append,
  +     '*='       => \&op_fold,
  +     '<>'       => \&op_unfold,
  +     '>>'       => \&op_divert,
  +     '<<'       => \&op_undivert,
  +    #'${}'      => \&op_deref_string,
  +    #'%{}'      => \&op_deref_hash,
  +    #'='        => \&op_copyconst,
  +    #'nomethod' => \&op_unknown,
  +     'fallback' => 0
  +);
  +
  +#sub TIESCALAR ($$) {
  +#    my ($class, $self) = @_;
  +#    bless $self, $class;
  +#    return $self;
  +#}
  +
  +#sub UNTIE ($) {
  +#    my ($self) = @_;
  +#    return;
  +#}
  +
  +#sub FETCH ($) {
  +#    my ($self) = @_;
  +#    return $self;
  +#}
  +
  +#sub STORE ($$) {
  +#    my ($self, $other) = @_;
  +#    return $self if (ref($other));
  +#    $self->assign($other);
  +#    my $dummy = ref($self);
  +#    return $self;
  +#}
  +
  +#sub op_copyconst {
  +#    my ($self, $other, $reverse) = @_;
  +#    #   intentionally do not copy at all
  +#    return $self;
  +#}
  +
  +#sub op_deref_string ($$$) {
  +#    my $self = shift;
  +#    return $self;
  +#}
  +
  +#sub op_deref_hash ($$$) {
  +#    my $self = shift;
  +#    return $self;
  +#}
  +
  +sub op_string ($$$) {
  +    my ($self, $other, $rev) = @_;
  +    return $self->string();
  +}
  +
  +sub op_bool ($$$) {
  +    my ($self, $other, $reverse) = @_;
  +    return $self->bool();
  +}
  +
  +sub op_numeric ($$$) {
  +    my ($self, $other, $reverse) = @_;
  +    return $self->string();
  +}
  +
  +sub op_concat ($$$) {
  +    my ($self, $other, $reverse) = @_;
  +    return ($reverse ? $other . $self->string() : $self->string() . $other);
  +}
  +
  +sub op_append ($$$) {
  +    my ($self, $other, $reverse) = @_;
  +    $self->append($other);
  +    return $self;
  +}
  +
  +sub op_fold ($$$) {
  +    my ($self, $other, $reverse) = @_;
  +    $self->fold($other);
  +    return $self;
  +}
  +
  +sub op_unfold ($$$) {
  +    my ($self, $other, $reverse) = @_;
  +    $self->unfold;
  +    return $self;
  +}
  +
  +#sub op_folding ($$$) {
  +#    my ($self, $other, $reverse) = @_;
  +#    $self->folding($other);
  +#    return $self;
  +#}
  +
  +sub op_divert ($$$) {
  +    my ($self, $other, $reverse) = @_;
  +    $self->divert($other);
  +    return $self;
  +}
  +
  +sub op_undivert ($$$) {
  +    my ($self, $other, $reverse) = @_;
  +    $self->undivert($other);
  +    return $self;
  +}
  +
  +#sub op_diversion ($$$) {
  +#    my ($self, $other, $reverse) = @_;
  +#    $self->diversion();
  +#    return $self;
  +#}
  +
  +#sub op_unknown ($$$$) {
  +#    my ($self, $other, $rev, $op) = @_;
  +#    print "<op_unknown>: op=$op\n";
  +#    return $self;
  +#}
  +
  +1;
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/Divert.pod
  ============================================================================
  $ cvs diff -u -r0 -r1.1 Divert.pod
  --- /dev/null	2003-05-22 20:56:51.000000000 +0200
  +++ Divert.pod	2003-05-22 20:56:52.000000000 +0200
  @@ -0,0 +1,367 @@
  +##
  +##  String::Divert - Diversion String Object
  +##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com> 
  +##
  +##  This file is part of String::Divert, a Perl module for
  +##  dealing with strings containing nested diversions.
  +##
  +##  This program is free software; you can redistribute it and/or
  +##  modify it under the terms of the GNU General Public  License
  +##  as published by the Free Software Foundation; either version
  +##  2.0 of the License, or (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this file; if not, write to the Free Software Foundation,
  +##  Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
  +##
  +##  Divert.pod: Module Documentation
  +##
  +
  +=pod
  +
  +=head1 NAME
  +
  +B<String::Divert> - String Object with Folding and Diversions
  +
  +=head1 SYNOPSIS
  +
  +  use String::Divert;
  +
  +  #   standard object-oriented API (SAPI)
  +  $x = new String::Divert;
  +  $x->assign("foo");
  +  $x->fold("sub");
  +  $x->append("quux");
  +  $x->divert("sub");
  +  $x->append("bar");
  +  $x->undivert(0);
  +  print "x=".$x->string()."\n";
  +  $x->destroy();
  +
  +  #   extended operator-overloaded API (XAPI)
  +  $x = new String::Divert;
  +  $x->overload(1);
  +  $x .= "foo";
  +  $x *= "sub";
  +  $x .= "quux";
  +  $x >> "sub";
  +  $x .= "bar";
  +  $x << 0;
  +  print "x=$x\n";
  +  undef $x;
  +
  +=head1 ABSTRACT
  +
  +B<String::Divert> is small Perl 5 module providing a scalar-like
  +string object with some overloaded operators, providing the concept of
  +I<Diversions> for supporting nested output generation.
  +
  +=head1 DESCRIPTION
  +
  +B<String::Divert> is small Perl 5 module providing a scalar-like
  +string object with some overloaded operators, providing the concept of
  +I<Diversions>. This supports the nested generation of structured outputs.
  +The idea is to decouple the sequential generation of structured output
  +from the nested and non-sequential structure of the output.
  +
  +=head1 APPLICATION PROGRAMMING INTERFACE (API)
  +
  +B<String::Divert> provides two Application Programming Interfaces (API):
  +a standard object-oriented API (SAPI) providing the core functionality
  +and an extended operator-overloading API (XAPI) providing additional
  +convinience in using the functionality (see also method B<overload>).
  +
  +=head2 Object Lifetime
  +
  +The following methods deal with the lifetime of a B<String::Divert>
  +object:
  +
  +=over 4
  +
  +=item SAPI: C<$x = >B<new String::Divert> [C<$name>]C<;>
  +
  +I<Object Construction>. This creates a new string object with either
  +an empty initial name or the one given in C<$name>.
  +
  +=item SAPI: C<$x-E<gt>>B<destroy>C<;>
  +
  +=item SAPI: C<undef $x;>
  +
  +I<Object Destruction>. This destroys the string object in C<$x> and this
  +way releases all of its resources. Folding sub objects are destroyed
  +implicitly unless they are still references by the application.
  +
  +=back
  +
  +=head2 Object Attributes
  +
  +The following methods adjust attributes of a B<String::Divert>
  +object:
  +
  +=over 4
  +
  +=item SAPI: C<$overloaded = $x-E<gt>>B<overload>C<;>
  +
  +=item SAPI: [C<$old_overloaded =>] C<$x-E<gt>>B<overload>C<($new_overloaded);>
  +
  +I<Object Operator Overloading>. Either just retrieves whether string
  +object C<$x> is operator overloaded or sets new operator overloading. If
  +C<$new_overloaded> is I<false>, operator overloading is disabled (only
  +SAPI is active); if it is I<true>, operator overloading is enabled (both
  +SAPI and XAPI are active).
  +
  +=item SAPI: C<$name = $x-E<gt>>B<name>C<;>
  +
  +=item SAPI: [C<$old_name =>] C<$x-E<gt>>B<name>C<($new_name);>
  +
  +I<Object Naming>. Either just retrieves the current name of string
  +object C<$x> or sets a new name. The name of a string object is used to
  +identify the object on folding and diversion in case no object reference
  +is used.
  +
  +=item SAPI: C<$mode = $x-E<gt>>B<overwrite>C<;>
  +
  +=item SAPI: [C<$old_mode =>] C<$x-E<gt>>B<overwrite>C<($new_mode);>
  +
  +I<Overwrite Mode>. Retrieves the current overwrite mode of string object
  +C<$x> or sets a new overwrite mode. The mode can be C<"none"> (no
  +overwriting), C<"once"> (no overwriting once on next B<append> operation
  +only), or C<"always"> (overwriting on every B<append> operation).
  +
  +=back
  +
  +=head2 Content Manipulation
  +
  +The following methods manipulate the contents of a B<String::Divert>
  +object:
  +
  +=over 4
  +
  +=item SAPI: [C<$x =>] C<$x-E<gt>>B<assign>C<($string);>
  +
  +I<Content Assignment>. Assigns C<$string> as the new contents
  +of the string object C<$x>. The existing contents is lost.
  +
  +=item SAPI: [C<$x =>] C<$x-E<gt>>B<append>C<($string);>
  +
  +=item XAPI: C<$x .= $string;>
  +
  +I<Content Appending>. Appends C<$string> to the existing contents of the
  +string object C<$x>. If the B<overwrite> mode (see above) is C<"once">,
  +the previous contents is removed first and the B<overwrite> mode set to
  +C<"none">. If it is C<"always">, the previous contents is removed every
  +time.
  +
  +=item SAPI: C<$string = $x-E<gt>>B<string>C<;>
  +
  +=item XAPI: C<$string = "$x";>
  +
  +I<Content Unfolding (Temporary)>. This unfolds the contents of string
  +object C<$x> and returns it as a string. The contents of the string
  +object is still kept in folded internal format. For permanently
  +unfolding the contents in string object C<$x>, you have to use operation
  +B<unfold>.
  +
  +=back
  +
  +=head2 Content Folding
  +
  +The following methods deal with content folding of a B<String::Divert>
  +object:
  +
  +=over 4
  +
  +=item SAPI: [C<$y =>] C<$x-E<gt>>B<fold>C<($name);>
  +
  +=item SAPI: C<$x-E<gt>>B<fold>C<($y);>
  +
  +=item XAPI: [C<$y = (>]C<$x E<gt>E<gt>= $name>[C<)>]C<;>
  +
  +=item XAPI: C<$x E<gt>E<gt> $y;>
  +
  +I<Content Folding>. This folds the contents of string cobject C<$x> at
  +the current position by appending a B<String::Divert> sub object (given
  +in existing object C<$y> or created on-the-fly with name I<name>). The
  +sub-object representing the folding is allowed to be re-appended by name
  +or through C<$y>.
  +
  +=item SAPI: [C<$string =>] C<$x-E<gt>>B<unfold>C<;>
  +
  +=item XAPI: [C<$string =>] C<E<lt>$xE<gt>;>
  +
  +I<Content Unfolding (Permanently)>. This unfolds the contents of string
  +object C<$x> and stores the result permanently as the new contents. For
  +temporarily unfolding the contents in string object C<$x>, you can
  +use operation B<string>.
  +
  +=item SAPI: C<$y = $x-E<gt>>B<folding>C<($name);>
  +
  +=item XAPI: C<$y = ($x E<lt>E<lt>= $name);>
  +
  +I<Content Folding Lookup>. This lookups in string object C<$x> the
  +contained folding sub-object with name C<$name>.
  +
  +=item SAPI: C<$x-E<gt>>B<folder>C<($format, $regex);>
  +
  +=item SAPI: C<$string = $x-E<gt>>B<folder>C<($name);>
  +
  +I<Content Folding Textual Representation>. This configures (if
  +the two argument form is used) or generates (if the one argument
  +form is used) textual representation of a content folding. For
  +configuring, the C<$format> has to be a Perl sprintf() format string
  +(containing only a single C<%s> for expanding the name of the folding
  +object) generating the textual representation and C<$regex> a Perl
  +regular expression (containing a single clustering parenthesis
  +pair) for matching a generated textual representation and returning
  +the name of the folding object. The defaults are "C<{#%s#}>" and
  +"C<\{#([a-zA-Z_][a-zA-Z0-9_]*)#\}>". In the one argument form, the
  +function applies C<$name> to the previously configured C<$format> and
  +returns the result for inclusion into a string which in turn is assigned
  +or appended to the string object.
  +
  +=back
  +
  +=head2 Operation Diversion
  +
  +The following methods deal with operation diversion of a
  +B<String::Divert> object:
  +
  +=over 4
  +
  +=item SAPI: [C<$x =>] C<$x-E<gt>>B<divert>C<($name);>
  +
  +=item SAPI: [C<$x =>] C<$x-E<gt>>B<divert>C<($y);>
  +
  +=item XAPI: C<$x E<gt>E<gt> $name;>
  +
  +=item XAPI: C<$x E<gt>E<gt> $y;>
  +
  +I<Content Diversion Activation>. This activates in string object C<$x>
  +a content diversion to a sub-object (given by name C<$name> or object
  +reference C<$y>). The diversion target should be a folded sub-object of
  +C<$x>, but is not technically required.
  +
  +=item SAPI: [C<$x =>] C<$x-E<gt>>B<undivert>C<($num);>
  +
  +=item XAPI: C<$x E<lt>E<lt> $num;>
  +
  +I<Content Diversion Deactivation>. This deactivates the last C<$num>
  +activated diversions. If C<$num> is C<0>, deactivates all activated
  +diversions.
  +
  +=item SAPI: C<$y = $x-E<gt>>B<diversion>C<;>
  +
  +=item SAPI: C<@y = $x-E<gt>>B<diversion>C<;>
  +
  +I<Content Diversion Lookup>. This lookups and returns the last or all
  +(in reverse oder of activation) sub-objects of activated diversion.
  +
  +=back
  +
  +=head1 EXAMPLE
  +
  +The following part of a fictive CGI program demonstrates how to generate
  +the structured HTML code in a nested, clean and intuitive fashion:
  +
  + #   create new object with operator overloading activated
  + use String::Divert;
  + my $html = new String::Divert;
  + $html->overload(1);
  + 
  + #   generate outer HTML framework
  + $html .=
  +     "<html>\n" .
  +     "  <head>\n" .
  +     "    " . $html->folder("head") .
  +     "  </head>\n" .
  +     "  <body>\n" .
  +     "    " . $html->folder("body") .
  +     "  </body>\n" .
  +     "</html>\n";
  + 
  + #   generate header
  + $html >> "head";
  + $html .= "<title>foo</title>\n";
  + $html << 1;
  + 
  + #   generate body
  + $html >> "body";
  + $html .= "<table>\n" .
  +          "  <tr>\n" .
  +          "   <td>\n" . 
  +          "     " . $html->folder("left") . 
  +          "   </td>\n" .
  +          "   <td>\n" . 
  +          "     " . $html->folder("right") .
  +          "   </td>\n" .
  +          "  </tr>\n" .
  +          "</table>\n";
  + 
  + #   generate left contents
  + $html >> "left";
  + $html .= "bar1\n" .
  +          "bar2\n";
  + 
  + #   generate right contents
  + $html >> "right";
  + $html .= "quux1\n" .
  +          "quux2\n";
  + 
  + #   undivert all diversions and output unfolded HTML
  + $html << 0;
  + print $html;
  + 
  + #   destroy object
  + $html->destroy;
  +
  +The output of this program obviously is:
  +
  + <html>
  +   <head>
  +     <title>foo</title>
  +   </head>
  +   <body>
  +     <table>
  +       <tr>
  +        <td>
  +          bar1
  +          bar2
  +        </td>
  +        <td>
  +          quux1
  +          quux2
  +        </td>
  +       </tr>
  +     </table>
  +   </body>
  + </html>
  +
  +=head1 SEE ALSO
  +
  +=over 0
  +
  +=item B<m4>'s C<divert()> function. 
  +
  +=item B<Perl> module B<Data::Location>. 
  +
  +=item B<WML>'s C<wml_p5_divert> filter.
  +
  +=back
  +
  +=head1 HISTORY
  +
  +B<String::Divert> was implemented in May 2003 by Ralf S. Engelschall
  +E<lt>rse@engelschall.comE<gt> for reducing the complexity in conditional
  +generation of HTML code within a web application.
  +
  +=head1 AUTHOR
  +
  +Ralf S. Engelschall E<lt>rse@engelschall.comE<gt>
  +
  +=cut
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/MANIFEST
  ============================================================================
  $ cvs diff -u -r0 -r1.1 MANIFEST
  --- /dev/null	2003-05-22 20:56:51.000000000 +0200
  +++ MANIFEST	2003-05-22 20:56:52.000000000 +0200
  @@ -0,0 +1,9 @@
  +MANIFEST
  +README
  +TODO
  +Makefile.PL
  +Divert.pm
  +Divert.pod
  +test.pl
  +sample1.pl
  +sample2.pl
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/Makefile.PL
  ============================================================================
  $ cvs diff -u -r0 -r1.1 Makefile.PL
  --- /dev/null	2003-05-22 20:56:51.000000000 +0200
  +++ Makefile.PL	2003-05-22 20:56:52.000000000 +0200
  @@ -0,0 +1,11 @@
  +
  +use 5.005;
  +use ExtUtils::MakeMaker;
  +
  +WriteMakefile(
  +    NAME          => 'String::Divert',
  +    VERSION_FROM  => 'Divert.pm',
  +    PREREQ_PM     => {},
  +    AUTHOR        => 'Ralf S. Engelschall <rse@engelschall.com>'
  +);
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/README
  ============================================================================
  $ cvs diff -u -r0 -r1.1 README
  --- /dev/null	2003-05-22 20:56:51.000000000 +0200
  +++ README	2003-05-22 20:56:53.000000000 +0200
  @@ -0,0 +1,12 @@
  +String::Divert
  +==============
  +
  +INSTALLATION
  +
  +To install this module type the following:
  +
  +   perl Makefile.PL
  +   make
  +   make test
  +   make install
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/TODO
  ============================================================================
  $ cvs diff -u -r0 -r1.1 TODO
  --- /dev/null	2003-05-22 20:56:51.000000000 +0200
  +++ TODO	2003-05-22 20:56:53.000000000 +0200
  @@ -0,0 +1,7 @@
  +
  + TODO
  + ====
  +
  + o recursion by fold und divert checken
  + o resurrect TIE mechanism for assignment once Perl is no longer buggy
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/sample1.pl
  ============================================================================
  $ cvs diff -u -r0 -r1.1 sample1.pl
  --- /dev/null	2003-05-22 20:56:51.000000000 +0200
  +++ sample1.pl	2003-05-22 20:56:53.000000000 +0200
  @@ -0,0 +1,28 @@
  +
  +use lib "./blib/lib";
  +
  +use String::Divert;
  +
  +#   standard object-oriented API (SAPI)
  +$x = new String::Divert;
  +$x->assign("foo");
  +$x->fold("sub");
  +$x->append("quux");
  +$x->divert("sub");
  +$x->append("bar");
  +$x->undivert(0);
  +print "x=".$x->string()."\n";
  +$x->destroy();
  +
  +#   extended operator-overloaded API (XAPI)
  +$x = new String::Divert;
  +$x->overload(1);
  +$x .= "foo";
  +$x *= "sub";
  +$x .= "quux";
  +$x >> "sub";
  +$x .= "bar";
  +$x << 0;
  +print "x=$x\n";
  +undef $x;
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/sample2.pl
  ============================================================================
  $ cvs diff -u -r0 -r1.1 sample2.pl
  --- /dev/null	2003-05-22 20:56:51.000000000 +0200
  +++ sample2.pl	2003-05-22 20:56:54.000000000 +0200
  @@ -0,0 +1,55 @@
  +
  +use lib "./blib/lib";
  +
  +#   create new object with operator overloading activated
  +use String::Divert;
  +my $html = new String::Divert;
  +$html->overload(1);
  +
  +#   generate outer HTML framework
  +$html .=
  +    "<html>\n" .
  +    "  <head>\n" .
  +    "    " . $html->folder("head") .
  +    "  </head>\n" .
  +    "  <body>\n" .
  +    "    " . $html->folder("body") .
  +    "  </body>\n" .
  +    "</html>\n";
  +
  +#   generate header
  +$html >> "head";
  +$html .= "<title>foo</title>\n";
  +$html << 1;
  +
  +#   generate body
  +$html >> "body";
  +$html .= "<table>\n" .
  +         "  <tr>\n" .
  +         "   <td>\n" . 
  +         "     " . $html->folder("left") . 
  +         "   </td>\n" .
  +         "   <td>\n" . 
  +         "     " . $html->folder("right") .
  +         "   </td>\n" .
  +         "  </tr>\n" .
  +         "</table>\n";
  +
  +#   generate left contents
  +$html >> "left";
  +$html .= "bar1\n" .
  +         "bar2\n";
  +$html << 1;
  +
  +#   generate right contents
  +$html >> "right";
  +$html .= "quux1\n" .
  +         "quux2\n";
  +
  +#   undivert all diversions and output unfolded HTML
  +$html << 0;
  +print $html;
  +
  +#   destroy object
  +$html->destroy;
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/test.pl
  ============================================================================
  $ cvs diff -u -r0 -r1.1 test.pl
  --- /dev/null	2003-05-22 20:56:51.000000000 +0200
  +++ test.pl	2003-05-22 20:56:55.000000000 +0200
  @@ -0,0 +1,133 @@
  +##
  +##  String::Divert - Diversion String Object
  +##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com> 
  +##
  +##  This file is part of String::Divert, a Perl module for
  +##  dealing with strings containing nested diversions.
  +##
  +##  This program is free software; you can redistribute it and/or
  +##  modify it under the terms of the GNU General Public  License
  +##  as published by the Free Software Foundation; either version
  +##  2.0 of the License, or (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this file; if not, write to the Free Software Foundation,
  +##  Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
  +##
  +##  test.pl: Module Test Suite
  +##
  +
  +use Test::More tests => 36;
  +
  +#   test: module loading
  +BEGIN { use_ok('String::Divert') };
  +
  +#   test: object creation
  +my $x = new String::Divert;
  +ok(defined($x), "object creation");
  +$x->destroy;
  +$x = new String::Divert;
  +ok(defined($x), "object (re)creation");
  +ok($x->name() eq "", "object name");
  +$x->name("xx");
  +ok($x->name() eq "xx", "overwritten object name");
  +$x->name("x");
  +
  +#   test: simple content
  +ok($x->string() eq "", "empty initial content");
  +$x->append("foo");
  +$x->append("bar");
  +ok($x->string() eq "foobar", "appended content");
  +$x->assign("quux");
  +ok($x->string() eq "quux", "assigned content");
  +$x->assign("foo");
  +ok($x->string() eq "foo", "(re)assigned content");
  +$x->append("bar");
  +ok($x->string() eq "foobar", "append after assign");
  +
  +#   test: content overwrite mode
  +$x->assign("foo");
  +$x->overwrite('once');
  +$x->append("bar");
  +$x->append("quux");
  +ok($x->string() eq "barquux", "appending with overwrite 'once'");
  +$x->overwrite('always');
  +$x->append("bar");
  +$x->append("quux");
  +ok($x->string() eq "quux", "appending with overwrite 'always'");
  +$x->overwrite('none');
  +$x->append("bar");
  +$x->append("quux");
  +ok($x->string() eq "quuxbarquux", "appending with overwrite 'none'");
  +
  +#   test: content folding
  +$x->assign("foo");
  +$x->fold("bar");
  +$x->append("quux");
  +my $bar = $x->folding("bar");
  +ok(defined($bar), "folding object retrival 1");
  +ok($x->string() eq "fooquux", "folding 1");
  +$bar->append("bar");
  +ok($x->string() eq "foobarquux", "folding 2");
  +$bar->fold("baz");
  +$bar->append("bar2");
  +$bar->fold("baz");
  +$bar->append("bar3");
  +ok($x->string() eq "foobarbar2bar3quux", "folding 3");
  +my $baz = $x->folding("baz");
  +ok(defined($baz), "folding object retrival 2");
  +$baz->append("baz");
  +ok($baz->string() eq "baz", "folding 3");
  +ok($bar->string() eq "barbazbar2bazbar3", "folding 4");
  +ok($x->string() eq "foobarbazbar2bazbar3quux", "folding 5");
  +$baz->assign("XX");
  +ok($baz->string() eq "XX", "folding 6");
  +ok($bar->string() eq "barXXbar2XXbar3", "folding 7");
  +ok($x->string() eq "foobarXXbar2XXbar3quux", "folding 8");
  +my @foldings = $x->folding();
  +ok(@foldings == 3, "folding 9");
  +
  +#   test: content diversion
  +$x->assign("foo");
  +$x->fold("bar");
  +$x->append("quux");
  +$x->divert("bar");
  +$x->append("bar1");
  +$x->fold("baz");
  +$x->append("bar2");
  +$x->divert("baz");
  +$x->append("baz");
  +ok($x->string() eq "baz", "diversion 1");
  +$x->undivert;
  +ok($x->string() eq "bar1bazbar2", "diversion 2");
  +$x->undivert;
  +ok($x->string() eq "foobar1bazbar2quux", "diversion 3");
  +$x->divert("bar");
  +$x->divert("baz");
  +my @diversions = $x->diversion();
  +ok(@diversions == 2, "diversion 4");
  +$x->undivert(0);
  +@diversions = $x->diversion();
  +ok(@diversions == 0, "diversion 5");
  +
  +#   test: operator overloading
  +ok($x->overload == 0, "default overloading mode");
  +$x->overload(1);
  +ok($x->overload == 1, "default overloading mode");
  +$x->assign("foo");
  +ok("$x" eq "foo", "stringify operation");
  +$x .= "bar";
  +ok("$x" eq "foobar", "appending string");
  +$x *= "baz";
  +$x .= "quux";
  +ok("$x" eq "foobarquux", "appending folding");
  +$x >> "baz";
  +$x .= "baz";
  +$x << 0;
  +ok("$x" eq "foobarbazquux", "diversion");
  +
  @@ .

From ossp-cvs-owner@ossp.org  Fri May 23 09:10:12 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B022C76D3F; Fri, 23 May 2003 09:10:11 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/string-divert/ .cvsignore
Message-Id: <20030523071011.B022C76D3F@mail.ossp.org>
Date: Fri, 23 May 2003 09:10:11 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-May-2003 09:10:11
  Branch: HEAD                             Handle: 2003052308101000

  Added files:
    ossp-pkg/string-divert  .cvsignore

  Log:
    ignore generated files

  Summary:
    Revision    Changes     Path
    1.1         +3  -0      ossp-pkg/string-divert/.cvsignore
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/.cvsignore
  ============================================================================
  $ cvs diff -u -r0 -r1.1 .cvsignore
  --- /dev/null	2003-05-23 09:10:11.000000000 +0200
  +++ .cvsignore	2003-05-23 09:10:11.000000000 +0200
  @@ -0,0 +1,3 @@
  +Makefile
  +blib
  +pm_to_blib
  @@ .

From ossp-cvs-owner@ossp.org  Fri May 23 13:09:59 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 33F4F76D31; Fri, 23 May 2003 13:09:59 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/string-divert/ ChangeLog Divert.pm Divert.pod Mak...
Message-Id: <20030523110959.33F4F76D31@mail.ossp.org>
Date: Fri, 23 May 2003 13:09:59 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-May-2003 13:09:58
  Branch: HEAD                             Handle: 2003052312095601

  Added files:
    ossp-pkg/string-divert  ChangeLog
  Modified files:
    ossp-pkg/string-divert  Divert.pm Divert.pod Makefile.PL TODO sample2.pl
                            test.pl

  Log:
    o direct MakeMaker to not install sample[12].pl
    o cleanup naming of module, etc.
    o remove trailing whitespaces from codes
    o cleanup and extend documentation

  Summary:
    Revision    Changes     Path
    1.1         +12 -0      ossp-pkg/string-divert/ChangeLog
    1.2         +10 -9      ossp-pkg/string-divert/Divert.pm
    1.2         +55 -29     ossp-pkg/string-divert/Divert.pod
    1.2         +27 -1      ossp-pkg/string-divert/Makefile.PL
    1.2         +5  -2      ossp-pkg/string-divert/TODO
    1.2         +3  -3      ossp-pkg/string-divert/sample2.pl
    1.2         +5  -4      ossp-pkg/string-divert/test.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/ChangeLog
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ChangeLog
  --- /dev/null	2003-05-23 13:09:57.000000000 +0200
  +++ ChangeLog	2003-05-23 13:09:57.000000000 +0200
  @@ -0,0 +1,12 @@
  +  
  +  ChangeLog
  +  =========
  +
  +  0.91 (23-Apr-2003)
  +      o direct MakeMaker to not install sample[12].pl
  +      o cleanup naming of module, etc.
  +      o remove trailing whitespaces from codes
  +      o cleanup and extend documentation
  +  0.90 (22-Apr-2003)
  +      o initial release
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/Divert.pm
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 Divert.pm
  --- ossp-pkg/string-divert/Divert.pm	22 May 2003 18:56:50 -0000	1.1
  +++ ossp-pkg/string-divert/Divert.pm	23 May 2003 11:09:56 -0000	1.2
  @@ -1,9 +1,9 @@
   ##
  -##  String::Divert - Diversion String Object
  -##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com> 
  +##  String::Divert - String Object supporting Folding and Diversion
  +##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
  -##  This file is part of String::Divert, a Perl module for
  -##  dealing with strings containing nested diversions.
  +##  This file is part of String::Divert, a Perl module providing
  +##  a string object supporting folding and diversion.
   ##
   ##  This program is free software; you can redistribute it and/or
   ##  modify it under the terms of the GNU General Public  License
  @@ -22,7 +22,7 @@
   ##  Divert.pm: Module Implementation
   ##
   
  -use 5.005;
  +use 5.006;
   use strict;
   use warnings;
   
  @@ -36,14 +36,15 @@
   
   require Exporter;
   
  +our $VERSION   = '0.91';
  +
   our @ISA       = qw(Exporter);
  -our @EXPORT_OK = qw(new destroy DESTROY 
  +our @EXPORT_OK = qw(new destroy DESTROY
                       name overwrite
                       assign append string bool
                       fold unfold folding folder
                       divert undivert diversion
                       overload);
  -our $VERSION   = '0.90';
   
   #   object construction
   sub new ($;$) {
  @@ -74,7 +75,7 @@
   #   object destruction (implicit)
   sub DESTROY ($) {
       return;
  -}   
  +}
   
   #   operation: set/get name of object
   sub name ($;$) {
  @@ -148,7 +149,7 @@
           if (not defined($string));
       die "cannot assign reference as string"
           if (ref($string));
  -    if (   $self->{overwrite} eq 'once' 
  +    if (   $self->{overwrite} eq 'once'
           or $self->{overwrite} eq 'always') {
           $self->{chunks} = [];
           foreach my $chunk ($self->_chunking($string)) {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/Divert.pod
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 Divert.pod
  --- ossp-pkg/string-divert/Divert.pod	22 May 2003 18:56:50 -0000	1.1
  +++ ossp-pkg/string-divert/Divert.pod	23 May 2003 11:09:57 -0000	1.2
  @@ -1,9 +1,9 @@
   ##
  -##  String::Divert - Diversion String Object
  -##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com> 
  +##  String::Divert - String Object supporting Folding and Diversion
  +##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
  -##  This file is part of String::Divert, a Perl module for
  -##  dealing with strings containing nested diversions.
  +##  This file is part of String::Divert, a Perl module providing
  +##  a string object supporting folding and diversion.
   ##
   ##  This program is free software; you can redistribute it and/or
   ##  modify it under the terms of the GNU General Public  License
  @@ -26,7 +26,7 @@
   
   =head1 NAME
   
  -B<String::Divert> - String Object with Folding and Diversions
  +B<String::Divert> - String Object supporting Folding and Diversions
   
   =head1 SYNOPSIS
   
  @@ -57,24 +57,50 @@
   
   =head1 ABSTRACT
   
  -B<String::Divert> is small Perl 5 module providing a scalar-like
  -string object with some overloaded operators, providing the concept of
  -I<Diversions> for supporting nested output generation.
  +B<String::Divert> is small Perl 5 module providing a scalar-like string
  +object with some overloaded operators, supporting the concept of
  +I<Folding> and I<Diversion>. This allows nested generation of structured
  +output. The idea is to decouple the sequential generation of output
  +from the nested and non-sequential structure of the output.
   
  -=head1 DESCRIPTION
  +The two most prominent examples are the generation of code in SGML/XML
  +based languages like [X]HTML (where large and deeply nested structures
  +occur) and the generation of code in typed 3GL procedural languages
  +like C/C++ (where symbols have to be declared before usage). Here
  +B<String::Divert> allows you to generate the code in steps from the
  +outer to the inner level or to append code to already generated previous
  +or later inserted parts.
   
  -B<String::Divert> is small Perl 5 module providing a scalar-like
  -string object with some overloaded operators, providing the concept of
  -I<Diversions>. This supports the nested generation of structured outputs.
  -The idea is to decouple the sequential generation of structured output
  -from the nested and non-sequential structure of the output.
  +This is achieved by leveraging two basic concepts: content folding
  +and operation diversion.
  +
  +=head2 Content Folding
   
  -=head1 APPLICATION PROGRAMMING INTERFACE (API)
  +The concept of content folding allows you to fold the content at the
  +current output position by inserting a placeholder corresponding to
  +a sub-output and just proceeding with the output generation. The
  +sub-output initially is empty. Once output is appended to it (see
  +diversion below), it will occur at the placeholder position if the
  +content is unfolded later. Folding can be applied to the sub-object
  +again and this way allowing arbitrary nested structures. A sub-output
  +even can be unfolded into multiple placeholder positions.
  +
  +=head2 Operation Diversion
  +
  +The concept of operation diversion allows you to automatically divert
  +an operation to one object to another object. Usually this is used for
  +diverting output generation operations on a top-level string object
  +to folded sub-objects without having to deal with multiple object
  +variables and without having to know that you are actually operating on
  +a sub-object. Diversions are applied in a stacked fashion, allowing the
  +stepping back to the previous active diversion.
  +
  +=head1 DESCRIPTION
   
   B<String::Divert> provides two Application Programming Interfaces (API):
   a standard object-oriented API (SAPI) providing the core functionality
   and an extended operator-overloading API (XAPI) providing additional
  -convinience in using the functionality (see also method B<overload>).
  +convenience in using the functionality (see also method B<overload>).
   
   =head2 Object Lifetime
   
  @@ -184,7 +210,7 @@
   
   =item XAPI: C<$x E<gt>E<gt> $y;>
   
  -I<Content Folding>. This folds the contents of string cobject C<$x> at
  +I<Content Folding>. This folds the contents of string object C<$x> at
   the current position by appending a B<String::Divert> sub object (given
   in existing object C<$y> or created on-the-fly with name I<name>). The
   sub-object representing the folding is allowed to be re-appended by name
  @@ -272,7 +298,7 @@
    use String::Divert;
    my $html = new String::Divert;
    $html->overload(1);
  - 
  +
    #   generate outer HTML framework
    $html .=
        "<html>\n" .
  @@ -283,39 +309,39 @@
        "    " . $html->folder("body") .
        "  </body>\n" .
        "</html>\n";
  - 
  +
    #   generate header
    $html >> "head";
    $html .= "<title>foo</title>\n";
    $html << 1;
  - 
  +
    #   generate body
    $html >> "body";
    $html .= "<table>\n" .
             "  <tr>\n" .
  -          "   <td>\n" . 
  -          "     " . $html->folder("left") . 
  +          "   <td>\n" .
  +          "     " . $html->folder("left") .
             "   </td>\n" .
  -          "   <td>\n" . 
  +          "   <td>\n" .
             "     " . $html->folder("right") .
             "   </td>\n" .
             "  </tr>\n" .
             "</table>\n";
  - 
  +
    #   generate left contents
    $html >> "left";
    $html .= "bar1\n" .
             "bar2\n";
  - 
  +
    #   generate right contents
    $html >> "right";
    $html .= "quux1\n" .
             "quux2\n";
  - 
  +
    #   undivert all diversions and output unfolded HTML
    $html << 0;
    print $html;
  - 
  +
    #   destroy object
    $html->destroy;
   
  @@ -345,9 +371,9 @@
   
   =over 0
   
  -=item B<m4>'s C<divert()> function. 
  +=item B<m4>'s C<divert()> function.
   
  -=item B<Perl> module B<Data::Location>. 
  +=item B<Perl> module B<Data::Location>.
   
   =item B<WML>'s C<wml_p5_divert> filter.
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/Makefile.PL
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 Makefile.PL
  --- ossp-pkg/string-divert/Makefile.PL	22 May 2003 18:56:50 -0000	1.1
  +++ ossp-pkg/string-divert/Makefile.PL	23 May 2003 11:09:57 -0000	1.2
  @@ -1,10 +1,36 @@
  +##
  +##  String::Divert - String Object supporting Folding and Diversion
  +##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +##
  +##  This file is part of String::Divert, a Perl module providing
  +##  a string object supporting folding and diversion.
  +##
  +##  This program is free software; you can redistribute it and/or
  +##  modify it under the terms of the GNU General Public  License
  +##  as published by the Free Software Foundation; either version
  +##  2.0 of the License, or (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this file; if not, write to the Free Software Foundation,
  +##  Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
  +##
  +##  Makefile.PL: Module Build Specification
  +##
   
  -use 5.005;
  +use 5.006;
   use ExtUtils::MakeMaker;
   
   WriteMakefile(
       NAME          => 'String::Divert',
       VERSION_FROM  => 'Divert.pm',
  +    ABSTRACT      => 'String Object supporting Folding and Diversion',
  +    PM            => { 'Divert.pm'  => '$(INST_LIBDIR)/Divert.pm',
  +                       'Divert.pod' => '$(INST_LIBDIR)/Divert.pod' },
       PREREQ_PM     => {},
       AUTHOR        => 'Ralf S. Engelschall <rse@engelschall.com>'
   );
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/TODO
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 TODO
  --- ossp-pkg/string-divert/TODO	22 May 2003 18:56:50 -0000	1.1
  +++ ossp-pkg/string-divert/TODO	23 May 2003 11:09:57 -0000	1.2
  @@ -2,6 +2,9 @@
    TODO
    ====
   
  - o recursion by fold und divert checken
  - o resurrect TIE mechanism for assignment once Perl is no longer buggy
  + o check recursion on folding and diversion to avoid loops
  +
  + o resurrect TIE mechanism for assignment operator once Perl 
  +   is no longer buggy (see "BUGS" in "perldoc overload") and
  +   no longer looses the overloading after STORE.
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/sample2.pl
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 sample2.pl
  --- ossp-pkg/string-divert/sample2.pl	22 May 2003 18:56:51 -0000	1.1
  +++ ossp-pkg/string-divert/sample2.pl	23 May 2003 11:09:57 -0000	1.2
  @@ -26,10 +26,10 @@
   $html >> "body";
   $html .= "<table>\n" .
            "  <tr>\n" .
  -         "   <td>\n" . 
  -         "     " . $html->folder("left") . 
  +         "   <td>\n" .
  +         "     " . $html->folder("left") .
            "   </td>\n" .
  -         "   <td>\n" . 
  +         "   <td>\n" .
            "     " . $html->folder("right") .
            "   </td>\n" .
            "  </tr>\n" .
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/test.pl
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 test.pl
  --- ossp-pkg/string-divert/test.pl	22 May 2003 18:56:51 -0000	1.1
  +++ ossp-pkg/string-divert/test.pl	23 May 2003 11:09:57 -0000	1.2
  @@ -1,9 +1,9 @@
   ##
  -##  String::Divert - Diversion String Object
  -##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com> 
  +##  String::Divert - String Object supporting Folding and Diversion
  +##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
  -##  This file is part of String::Divert, a Perl module for
  -##  dealing with strings containing nested diversions.
  +##  This file is part of String::Divert, a Perl module providing
  +##  a string object supporting folding and diversion.
   ##
   ##  This program is free software; you can redistribute it and/or
   ##  modify it under the terms of the GNU General Public  License
  @@ -22,6 +22,7 @@
   ##  test.pl: Module Test Suite
   ##
   
  +use 5.006;
   use Test::More tests => 36;
   
   #   test: module loading
  @@ .

From ossp-cvs-owner@ossp.org  Fri May 23 14:03:23 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E708D76D31; Fri, 23 May 2003 14:03:22 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/string-divert/ README
Message-Id: <20030523120322.E708D76D31@mail.ossp.org>
Date: Fri, 23 May 2003 14:03:22 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-May-2003 14:03:22
  Branch: HEAD                             Handle: 2003052313032100

  Modified files:
    ossp-pkg/string-divert  README

  Log:
    add ABSTRACT part for CPAN

  Summary:
    Revision    Changes     Path
    1.2         +40 -0      ossp-pkg/string-divert/README
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/README
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 README
  --- ossp-pkg/string-divert/README	22 May 2003 18:56:50 -0000	1.1
  +++ ossp-pkg/string-divert/README	23 May 2003 12:03:21 -0000	1.2
  @@ -1,6 +1,46 @@
   String::Divert
   ==============
   
  +ABSTRACT
  +
  +String::Divert is small Perl 5 module providing a scalar-like string
  +object with some overloaded operators, supporting the concept of Fold-
  +ing and Diversion. This allows nested generation of structured output.
  +The idea is to decouple the sequential generation of output from the
  +nested and non-sequential structure of the output.
  +
  +The two most prominent examples are the generation of code in SGML/XML
  +based languages like [X]HTML (where large and deeply nested structures
  +occur) and the generation of code in typed 3GL procedural languages
  +like C/C++ (where symbols have to be declared before usage). Here
  +String::Divert allows you to generate the code in steps from the outer
  +to the inner level or to append code to already generated previous or
  +later inserted parts.
  +
  +This is achieved by leveraging two basic concepts: content folding and
  +operation diversion.
  +
  +Content Folding
  +
  +The concept of content folding allows you to fold the content at the
  +current output position by inserting a placeholder corresponding to a
  +sub-output and just proceeding with the output generation. The sub-out-
  +put initially is empty. Once output is appended to it (see diversion
  +below), it will occur at the placeholder position if the content is
  +unfolded later. Folding can be applied to the sub-object again and this
  +way allowing arbitrary nested structures. A sub-output even can be
  +unfolded into multiple placeholder positions.
  +
  +Operation Diversion
  +
  +The concept of operation diversion allows you to automatically divert
  +an operation to one object to another object. Usually this is used for
  +diverting output generation operations on a top-level string object to
  +folded sub-objects without having to deal with multiple object vari-
  +ables and without having to know that you are actually operating on a
  +sub-object. Diversions are applied in a stacked fashion, allowing the
  +stepping back to the previous active diversion.
  +
   INSTALLATION
   
   To install this module type the following:
  @@ .

From ossp-cvs-owner@ossp.org  Fri May 23 16:14:10 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3C38E76D31; Fri, 23 May 2003 16:14:10 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_const.h rc_proc.c rc_script.c
Message-Id: <20030523141410.3C38E76D31@mail.ossp.org>
Date: Fri, 23 May 2003 16:14:10 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   23-May-2003 16:14:09
  Branch: HEAD                             Handle: 2003052315140900

  Modified files:
    ossp-pkg/rc             rc_const.h rc_proc.c rc_script.c

  Log:
    Mostly finish setuid(2) work in section parsing of userid, and exec
    mode.

  Summary:
    Revision    Changes     Path
    1.16        +1  -0      ossp-pkg/rc/rc_const.h
    1.33        +44 -16     ossp-pkg/rc/rc_proc.c
    1.21        +1  -1      ossp-pkg/rc/rc_script.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_const.h
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 rc_const.h
  --- ossp-pkg/rc/rc_const.h	21 May 2003 12:49:21 -0000	1.15
  +++ ossp-pkg/rc/rc_const.h	23 May 2003 14:14:09 -0000	1.16
  @@ -36,6 +36,7 @@
   #define RC_EEP_TEXT "The exec, eval, and print options may not be combined.\n"
   #define RC_SLO_TEXT "The silent option may not be combined with output options.\n"
   #define RC_SUM_TEXT "Option argument summary.\n"
  +#define RC_RUT_TEXT "Failed to set the user id. Please become the root user and try again.\n"
   
   /* Option descriptions used with popt, should not include termination */
   #define RC_USE_DESC "Print a short usage summary, then exit."
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	22 May 2003 14:46:33 -0000	1.32
  +++ ossp-pkg/rc/rc_proc.c	23 May 2003 14:14:09 -0000	1.33
  @@ -27,17 +27,16 @@
   **  rc_proc.c: Run-command processor ISO C source file
   */
   
  -#include <stdlib.h>     /* Standard system headers  */
  -#include <fcntl.h>      /* For reading rc files     */
  -#include <unistd.h>     /* For reading rc files     */
  -#include <string.h>     /* For string manipulation  */
  -
  -/* FIXME: Remove */
  -#include <sys/stat.h>
  -
  -#include "rc.h"         /* Public interfaces        */
  -#include "rc_const.h"   /* String and value const   */
  -#include "rc_config.h"  /* Option definitions       */
  +#include <stdlib.h>     /* Standard system headers    */
  +#include <fcntl.h>      /* For reading rc files       */
  +#include <unistd.h>     /* For reading rc files       */
  +#include <string.h>     /* For string manipulation    */
  +#include <signal.h>     /* For signal(3)              */
  +#include <sys/wait.h>   /* For waitpid(2) and fork(2) */
  +
  +#include "rc.h"         /* Public interfaces          */
  +#include "rc_const.h"   /* String and value const     */
  +#include "rc_config.h"  /* Option definitions         */
   
   
   /************************************************
  @@ -194,6 +193,9 @@
       int   nTmpname  = 0;              /* Temp file name size */
       int   nRcs      = 0;              /* Rc index            */
       int   nSecs     = 0;              /* Section index       */
  +    int   nSectuid  = -1;             /* The section's user id           */
  +    int   nRunuid   = -1;             /* The current user id             */
  +    pid_t Pidexec   = -1;             /* When spawning before execv(3)   */
       char *szTmpfile = NULL;           /* Path of temporary file          */
       char *szTmp     = NULL;           /* Generic temporary string        */
       char *szCom     = NULL;           /* Stores common script text       */
  @@ -262,6 +264,20 @@
           pFatscript = NULL;
       }
       else if (configGetval(RC_EXC_VAL)) {                        /* Execute  */
  +        /* FIXME FIXME FIXME FIXME */
  +        /* For however many labels */
  +            /* For however many sections in this label */
  +                /* If the we must setuid(2) */
  +                    /* If yes, are we root? */
  +                        /* If no, then report error and exit */
  +/*        for (nTmp = 0; ; nTmp++) {
  +            if ()
  +            nRunuid = getuid();
  +            if (nRunuid != 0 && nRunuid != nSectuid) {
  +                fprintf(stderr, RC_RUT_TEXT);
  +                return(RC_THROW(RC_ERR_USE));
  +            }
  +        }*/
           /* Allocate a block of section pointers to use temporarily */
           ppSectmp = calloc(pRc->m_pAnal->m_nRcs, sizeof(rc_section_t *));
           szCom = (char *)scriptTostring(pRc->m_pScriptcom);
  @@ -288,12 +304,24 @@
                                  (strlen(szTmp) + 1) * sizeof(char));
                   strcpy(szExec, szCom); /* Start out with just the common script code */
                   strcat(szExec, szTmp); /* And build a section onto the command chain */
  -                pszVec[2] = szExec; /* Actually launch the new process image now */
  +                pszVec[2] = szExec;    /* Actually launch the new process image now  */
   
  -/* FIXME: Put the fork in here! */
  -                if (execvp(*pszVec, pszVec) == -1) {                    /* launch */
  -                    TRACE("Bad, execvp for common script in child returned -1");
  -                    return(RC_THROW(RC_ERR_INT));
  +                /* Spawn the section shell code */
  +                switch (Pidexec = fork()){
  +                    case -1:    /* Broken */
  +                        return(RC_THROW(RC_ERR_INT));
  +                        break;  /* Huh? */
  +                    case 0:     /* Child, runs script code through bourne shell */
  +                        nSectuid = sectionGetuid(ppSectmp[nTmp]);
  +                        if (nSectuid >= 0 && getuid() != nSectuid)
  +                            if (setuid(nSectuid) != 0)
  +                                return(RC_THROW(RC_ERR_INT));
  +                        if (execvp(*pszVec, pszVec) == -1)
  +                            return(RC_THROW(RC_ERR_INT));
  +                        break;
  +                    default: /* Parent, blocks until child returns */
  +                        waitpid(Pidexec, NULL, WUNTRACED);
  +                        break;
                   }
   
                   free(szExec); /* Cleanup after exec */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_script.c
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 rc_script.c
  --- ossp-pkg/rc/rc_script.c	21 May 2003 15:16:41 -0000	1.20
  +++ ossp-pkg/rc/rc_script.c	23 May 2003 14:14:09 -0000	1.21
  @@ -32,7 +32,7 @@
   #include <unistd.h>     /* For mkstemp(3)             */
   #include <fcntl.h>      /* For open(2)                */
   #include <ctype.h>      /* For isspace(3)             */
  -#include <pwd.h>        /* For getlogin(2)            */
  +#include <pwd.h>        /* For getpwuid(3)            */
   
   #include "rc.h"         /* Public Rc interface        */
   #include "rc_pcre.h"    /* For section parsing        */
  @@ .

From ossp-cvs-owner@ossp.org  Fri May 23 16:14:35 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1A14476D4C; Fri, 23 May 2003 16:14:35 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ 00TODO
Message-Id: <20030523141435.1A14476D4C@mail.ossp.org>
Date: Fri, 23 May 2003 16:14:35 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   23-May-2003 16:14:35
  Branch: HEAD                             Handle: 2003052315143400

  Modified files:
    ossp-pkg/rc             00TODO

  Log:
    Remember to fix eval mode.

  Summary:
    Revision    Changes     Path
    1.44        +1  -0      ossp-pkg/rc/00TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/00TODO
  ============================================================================
  $ cvs diff -u -r1.43 -r1.44 00TODO
  --- ossp-pkg/rc/00TODO	22 May 2003 14:46:33 -0000	1.43
  +++ ossp-pkg/rc/00TODO	23 May 2003 14:14:34 -0000	1.44
  @@ -25,6 +25,7 @@
     Rc file prefix rc. is hardcoded, and when wildcard is given, the prefix is
       used in selecting files. Location is not properly used. See rc_anal.c.
     when a section is not found, the config is also not executed
  +  Eval mode is temporarily broken
   
   Document
     Refs, pri, user, group, ci, go only in normal (not special) sections.
  @@ .

From ossp-cvs-owner@ossp.org  Fri May 23 16:15:13 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 14C5F76D4A; Fri, 23 May 2003 16:15:13 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/rc_test/ rc.samba
Message-Id: <20030523141513.14C5F76D4A@mail.ossp.org>
Date: Fri, 23 May 2003 16:15:13 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   23-May-2003 16:15:13
  Branch: HEAD                             Handle: 2003052315151200

  Modified files:
    ossp-pkg/rc/rc_test     rc.samba

  Log:
    Add tests for recent setuid(2) additions during exec mode.

  Summary:
    Revision    Changes     Path
    1.5         +3  -1      ossp-pkg/rc/rc_test/rc.samba
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_test/rc.samba
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 rc.samba
  --- ossp-pkg/rc/rc_test/rc.samba	22 May 2003 14:45:15 -0000	1.4
  +++ ossp-pkg/rc/rc_test/rc.samba	23 May 2003 14:15:12 -0000	1.5
  @@ -8,10 +8,12 @@
   %test
       echo "Just an echo to test samba"
   
  -%search
  +%search -u root
  +    id -un
       whois cyvaned.com
   
   %destroy -u sw-n
  +    id -un
       ldd /usr/lib/libpcap.so
   
   %finish
  @@ .

From ossp-cvs-owner@ossp.org  Fri May 23 22:37:33 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1F4C276D31; Fri, 23 May 2003 22:37:32 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/string-divert/ ChangeLog Divert.pm
Message-Id: <20030523203732.1F4C276D31@mail.ossp.org>
Date: Fri, 23 May 2003 22:37:32 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-May-2003 22:37:32
  Branch: HEAD                             Handle: 2003052321373200

  Modified files:
    ossp-pkg/string-divert  ChangeLog Divert.pm

  Log:
    fix auto-indentation generation on unfolding

  Summary:
    Revision    Changes     Path
    1.2         +2  -0      ossp-pkg/string-divert/ChangeLog
    1.3         +5  -1      ossp-pkg/string-divert/Divert.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ChangeLog
  --- ossp-pkg/string-divert/ChangeLog	23 May 2003 11:09:56 -0000	1.1
  +++ ossp-pkg/string-divert/ChangeLog	23 May 2003 20:37:32 -0000	1.2
  @@ -2,6 +2,8 @@
     ChangeLog
     =========
   
  +  0.92 (23-Apr-2003)
  +      o fix auto-indentation generation on unfolding
     0.91 (23-Apr-2003)
         o direct MakeMaker to not install sample[12].pl
         o cleanup naming of module, etc.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/Divert.pm
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 Divert.pm
  --- ossp-pkg/string-divert/Divert.pm	23 May 2003 11:09:56 -0000	1.2
  +++ ossp-pkg/string-divert/Divert.pm	23 May 2003 20:37:32 -0000	1.3
  @@ -185,7 +185,11 @@
       foreach my $chunk (@{$self->{chunks}}) {
           if (ref($chunk)) {
               my $prefix = '';
  -            if ($string =~ m|([^\n]*)(\r?\n)*$|s) {
  +            #   check for existing prefix
  +            #   (keep in mind that m|([^\n]+)$|s _DOES NOT_
  +            #   take a possibly existing terminating newline
  +            #   into account, so we really need an extra match!)
  +            if ($string =~ m|([^\n]+)$|s and $string !~ m|\n$|s) {
                   $prefix = $1;
                   $prefix =~ s|[^ \t]| |sg;
               }
  @@ .

From ossp-cvs-owner@ossp.org  Mon May 26 10:10:38 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 199D576D4B; Mon, 26 May 2003 10:10:38 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_proc.c
Message-Id: <20030526081038.199D576D4B@mail.ossp.org>
Date: Mon, 26 May 2003 10:10:38 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   26-May-2003 10:10:37
  Branch: HEAD                             Handle: 2003052609103700

  Modified files:
    ossp-pkg/rc             rc_proc.c

  Log:
    Implement unpriviledged rc exec mode with safety checks.

  Summary:
    Revision    Changes     Path
    1.34        +15 -13     ossp-pkg/rc/rc_proc.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	23 May 2003 14:14:09 -0000	1.33
  +++ ossp-pkg/rc/rc_proc.c	26 May 2003 08:10:37 -0000	1.34
  @@ -264,20 +264,22 @@
           pFatscript = NULL;
       }
       else if (configGetval(RC_EXC_VAL)) {                        /* Execute  */
  -        /* FIXME FIXME FIXME FIXME */
  -        /* For however many labels */
  -            /* For however many sections in this label */
  -                /* If the we must setuid(2) */
  -                    /* If yes, are we root? */
  -                        /* If no, then report error and exit */
  -/*        for (nTmp = 0; ; nTmp++) {
  -            if ()
  -            nRunuid = getuid();
  -            if (nRunuid != 0 && nRunuid != nSectuid) {
  -                fprintf(stderr, RC_RUT_TEXT);
  -                return(RC_THROW(RC_ERR_USE));
  +        /* This block does nothing more than implement the feature,         */
  +        /* that allows rc to run unprivileged (as long as no privileged     */
  +        /* code is used in the script sections to be executed               */
  +        for (nSecs = 0; nSecs < pRc->m_pAnal->m_nSecs; nSecs++) {
  +            for (nTmp = 0; nTmp < pRc->m_pAnal->m_nRcs; nTmp++) {
  +                if (pRc->m_ppLabvec[nTmp]->m_ppSecvec) {
  +                    nRunuid = getuid();
  +                    nSectuid = pRc->m_ppLabvec[nTmp]->m_ppSecvec[nSecs]->m_nUid;
  +                    /* See if root user status is needed, and bail out if so */
  +                    if (nRunuid != 0 && nSectuid != -1 && nRunuid != nSectuid) {
  +                        fprintf(stderr, RC_RUT_TEXT);
  +                        return(RC_THROW(RC_ERR_USE));
  +                    }
  +                }
               }
  -        }*/
  +        }
           /* Allocate a block of section pointers to use temporarily */
           ppSectmp = calloc(pRc->m_pAnal->m_nRcs, sizeof(rc_section_t *));
           szCom = (char *)scriptTostring(pRc->m_pScriptcom);
  @@ .

From ossp-cvs-owner@ossp.org  Mon May 26 10:36:41 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1A50876D4B; Mon, 26 May 2003 10:36:41 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_config.c rc_const.h
Message-Id: <20030526083641.1A50876D4B@mail.ossp.org>
Date: Mon, 26 May 2003 10:36:41 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   26-May-2003 10:36:40
  Branch: HEAD                             Handle: 2003052609364000

  Modified files:
    ossp-pkg/rc             rc_config.c rc_const.h

  Log:
    Fix eval mode by replacing empty tempdir parameters.

  Summary:
    Revision    Changes     Path
    1.28        +8  -8      ossp-pkg/rc/rc_config.c
    1.17        +1  -0      ossp-pkg/rc/rc_const.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_config.c
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 rc_config.c
  --- ossp-pkg/rc/rc_config.c	1 Aug 2002 15:54:45 -0000	1.27
  +++ ossp-pkg/rc/rc_config.c	26 May 2003 08:36:40 -0000	1.28
  @@ -29,12 +29,13 @@
   
   #include <stdlib.h>
   #include <string.h>
  +#include <dirent.h>         /* For opendir(3) */
   
   #include "rc.h"
   #include "rc_config.h"
  -#include "rc_const.h"               /* String constants                     */
  +#include "rc_const.h"       /* String constants                     */
   
  -static int m_nLocks = 0;            /* Server locks, not thread-safe FIXME  */
  +static int m_nLocks = 0;    /* Server locks, not thread-safe FIXME  */
   
   
   /***************************************
  @@ -294,6 +295,7 @@
   rc_return_t configDefaults(void)
   {
       ex_t Except;
  +    DIR *pTmpdir = NULL; /* For detecting our temp dir with opendir(3) */
   
       try { /* Test members for empty attributes */
           if (!configGetval(RC_EVL_VAL) && !configGetval(RC_EXC_VAL) \
  @@ -332,14 +334,12 @@
   
   /*        if (!configGetval(RC_QRY_VAL))*/
   
  -/*
           if (!configGetval(RC_TMP_VAL)) {
  -            If exists '/tmp'
  -                clioptSetval(RC_TMP_VAL, "/tmp");
  -            Else
  -                RC_NOP;
  +            pTmpdir = opendir(RC_DEF_TMP);
  +            if (pTmpdir)
  +                clioptSetval(RC_TMP_VAL, RC_DEF_TMP);
  +            closedir(pTmpdir);
           }
  -*/
   
   /*        if (!configGetval(RC_OWN_VAL))
           if (!configGetval(RC_GRP_VAL))
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_const.h
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 rc_const.h
  --- ossp-pkg/rc/rc_const.h	23 May 2003 14:14:09 -0000	1.16
  +++ ossp-pkg/rc/rc_const.h	26 May 2003 08:36:40 -0000	1.17
  @@ -124,6 +124,7 @@
   /* Default values, do not include newlines and special chars must be escaped */
   #define RC_DEF_ON     "1"                       /* Digital switch */
   #define RC_DEF_OFF    "0"                       /* Digital switch */
  +#define RC_DEF_TMP    "/tmp"                    /* Temporary directory name */
   #define RC_DEF_DEF    "^%(\\w+)[ \t]*(.*?)\\n(.*?)^$" /* Section definition */
   #define RC_DEF_NCF    "config"                  /* Config section name */
   #define RC_DEF_UIG    "-u"                      /* Section user string */
  @@ .

From ossp-cvs-owner@ossp.org  Mon May 26 13:36:17 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DE6BD76D4A; Mon, 26 May 2003 13:36:16 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_proc.c
Message-Id: <20030526113616.DE6BD76D4A@mail.ossp.org>
Date: Mon, 26 May 2003 13:36:16 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   26-May-2003 13:36:16
  Branch: HEAD                             Handle: 2003052612361600

  Modified files:
    ossp-pkg/rc             rc_proc.c

  Log:
    Make a fancy broken ex box, and prepare to debug exception handling.

  Summary:
    Revision    Changes     Path
    1.35        +11 -0      ossp-pkg/rc/rc_proc.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	26 May 2003 08:10:37 -0000	1.34
  +++ ossp-pkg/rc/rc_proc.c	26 May 2003 11:36:16 -0000	1.35
  @@ -134,6 +134,17 @@
               RC_THROW(RC_ERR_IO);
   
           try {
  +
  +/* SEGFAULT SEGFAULT SEGFAULT SEGFAULT SEGFAULT SEGFAULT SEGFAULT SEGFAULT */
  +/*                                                                         */
  +/*                      CVS TAG OSSP_RC_EXBROKEN                           */
  +/*                                                                         */
  +/* FIXME: Move this throw macro inside the following if block to see magic */
  +/*                                                                         */
  +/* SEGFAULT SEGFAULT SEGFAULT SEGFAULT SEGFAULT SEGFAULT SEGFAULT SEGFAULT */
  +
  +/* RC_THROW(RC_ERR_USE); */
  +
               /* Append config section if it exists */
               pSec = scriptSection(pTempscript, configGetval(RC_NCF_VAL));
               if (pSec) { /* Only operate if the section lookup succeeds */
  @@ .

From ossp-cvs-owner@ossp.org  Mon May 26 18:03:59 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B4CB07697B; Mon, 26 May 2003 18:03:58 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_anal.c rc_cliopt.c rc_config.c rc_opt.c rc...
Message-Id: <20030526160358.B4CB07697B@mail.ossp.org>
Date: Mon, 26 May 2003 18:03:58 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   26-May-2003 18:03:58
  Branch: HEAD                             Handle: 2003052617035601

  Modified files:
    ossp-pkg/rc             rc_anal.c rc_cliopt.c rc_config.c rc_opt.c
                            rc_proc.c

  Log:
    Preliminary exception handling repairs.

  Summary:
    Revision    Changes     Path
    1.15        +4  -8      ossp-pkg/rc/rc_anal.c
    1.15        +5  -8      ossp-pkg/rc/rc_cliopt.c
    1.29        +27 -43     ossp-pkg/rc/rc_config.c
    1.7         +1  -2      ossp-pkg/rc/rc_opt.c
    1.36        +0  -11     ossp-pkg/rc/rc_proc.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_anal.c
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 rc_anal.c
  --- ossp-pkg/rc/rc_anal.c	20 May 2003 15:06:41 -0000	1.14
  +++ ossp-pkg/rc/rc_anal.c	26 May 2003 16:03:56 -0000	1.15
  @@ -72,10 +72,8 @@
               try {
                   analGloblocs(ppInst);
               }
  -            catch(Except) {
  -fprintf(stderr, "Placeholder until ex_ looping bug is fixed.\n");
  -/*                rethrow;*/ /* FIXME: Ralf! Looping problem with ex_ hier! */
  -            }
  +            catch(Except)
  +                rethrow;
           }
       }
   
  @@ -157,10 +155,8 @@
           (*ppInst)->m_pszSecs = vectorCopy(pkszVector);
           (*ppInst)->m_nSecs   = vectorCount(pkszVector);
       }
  -    ex_catch(Except) {
  -TRACE("VectorCopy broke");
  -/*        rethrow;*/
  -    }
  +    ex_catch(Except)
  +        rethrow;
   
       return(RC_THROW(RC_OK));
   }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_cliopt.c
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 rc_cliopt.c
  --- ossp-pkg/rc/rc_cliopt.c	1 Aug 2002 15:22:58 -0000	1.14
  +++ ossp-pkg/rc/rc_cliopt.c	26 May 2003 16:03:57 -0000	1.15
  @@ -178,9 +178,8 @@
       try {
           m_pszSecs = vectorCopy(pkszSecs);
       }
  -    catch(Except) {
  +    catch(Except)
           rethrow;
  -    }
   
       return(RC_THROW(RC_OK));
   }
  @@ -286,9 +285,8 @@
           try {                                          /* eating a new option */
               clioptProcess(cliOpt, popt_getoptarg(m_Optcon));
           }
  -        catch(Except) { /* Error condition probably deserves attention */
  +        catch(Except) /* Error condition probably deserves attention */
               rethrow;
  -        }
       }
   
       if (cliOpt < -1) { /* The option given was not found in the index */
  @@ -314,9 +312,8 @@
           clioptSetrcfile(popt_getarg(m_Optcon));
           clioptSetsecs(popt_getargs(m_Optcon));
       }
  -    catch(Except) {
  +    catch(Except)
           rethrow; /* Our generic response */
  -    }
   
       return(RC_THROW(RC_OK));
   }
  @@ -338,9 +335,9 @@
   /*        free(s_pBintab);*/              /* Deallocate cliopt and    */
   /*        s_pBintab = NULL;*/             /* clear its reference      */
   /*    }
  -    catch(Except) {
  +    catch(Except)
           rethrow;
  -    }*/
  +    */
   
       popt_freecontext(m_Optcon);         /* Free the popt context      */
       for (i = 0; i < RC_NUMOPTS; i++) {  /* Free the tuples themselves */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_config.c
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 rc_config.c
  --- ossp-pkg/rc/rc_config.c	26 May 2003 08:36:40 -0000	1.28
  +++ ossp-pkg/rc/rc_config.c	26 May 2003 16:03:57 -0000	1.29
  @@ -50,9 +50,8 @@
           try {                               /* then construct a new one */
               clioptNew();                    /* Member cliopt instance   */
           }
  -        catch(Except) {
  +        catch(Except)
               rethrow;
  -        }
       }
       m_nLocks++;                             /* FIXME not threadsafe     */
   
  @@ -94,9 +93,8 @@
           }
       }
   
  -    catch(Except) {
  +    catch(Except)
           rethrow;
  -    }
   
       return(RC_THROW(RC_OK));
   }
  @@ -108,22 +106,17 @@
   const char *configGetval(rc_opt_t Optname)
   {
       ex_t Except;
  -    char *szTemp = NULL;
  +    volatile char *oszTemp = NULL;
   
       if (m_nLocks) {                         /* Make sure config exists      */
           try {
  -            if ((szTemp = (char *)clioptGetval(Optname)))
  -                return((const char *)szTemp);
  -/*            else if (szTemp = envoptGetval(Optname))
  -                return((const char *)szTemp);
  -            else if (szTemp = cnfoptGetval(Optname))
  -                return((const char *)szTemp);*/
  -            else
  -                return(NULL);               /* Special case when not found  */
  +            if ((oszTemp = (char *)clioptGetval(Optname)));
  +/*            else if (oszTemp = envoptGetval(Optname));
  +            else if (oszTemp = cnfoptGetval(Optname));*/
           }
  -        catch(Except) {
  +        catch(Except)
               rethrow;
  -        }
  +        return((const char *)oszTemp);
       }
       else {
           RC_THROW(RC_ERR_USE);
  @@ -156,6 +149,7 @@
   const char *configGetrcfile(void)
   {
       ex_t Except;
  +    volatile char *oszRcname = NULL;
   
       if (m_nLocks) {                     /* Make sure config exists   */
           try {
  @@ -163,35 +157,32 @@
               /*         (2) it must be specified on the command line, */
               /* we don't bother checking the environment or conf file */
               /* contrary to the behaviour of Getval earlier           */
  -            return(clioptGetrcfile());
  +            oszRcname = (char *)clioptGetrcfile();
           }
  -        catch(Except) {
  +        catch(Except)
               rethrow;
  -        }
  +        return((const char *)oszRcname);
       }
  -    else {
  +    else
           RC_THROW(RC_ERR_USE);
  -    }
  -
       return(NULL);   /* Not reached */
   }
   
   const char **configGetsecs(void)
   {
       ex_t Except;
  +    volatile char **opszSecname = NULL;
   
  -    if (m_nLocks) {                             /* Make sure config exists   */
  -        try {                                   /* FIXME Might need to check */
  -            return(clioptGetsecs());            /* FIXME env, conf, configs  */
  +    if (m_nLocks) {                                 /* Make sure config exists   */
  +        try {                                       /* FIXME Might need to check */
  +            opszSecname = (char **)clioptGetsecs(); /* FIXME env, conf, configs  */
           }
  -        catch(Except) {
  +        catch(Except)
               rethrow;
  -        }
  +        return((const char **)opszSecname);
       }
  -    else {
  +    else
           RC_THROW(RC_ERR_USE);
  -    }
  -
       return(NULL);   /* Not reached  */
   }
   
  @@ -210,9 +201,8 @@
   /*        envoptParse(m_nLocks->pOpt);*/    /* Environment options   */
   /*        cnfoptParse(m_nLocks->pOpt);*/    /* Configfile options    */
       }
  -    catch(Except) {
  +    catch(Except)
           rethrow;
  -    }
   
       return(RC_THROW(RC_OK));
   }
  @@ -249,9 +239,9 @@
               bStop = TRUE;
           }
       }
  -    catch(Except) {
  +    catch(Except)
           rethrow;
  -    }
  +
       if (bStop) {                        /* Did user blow an option rule? */
           clioptPrintusage();             /* Yes, so announce it as SUE.   */
           return(RC_THROW(RC_ERR_TRM));
  @@ -271,16 +261,12 @@
               bStop = TRUE;
           }
           else if (configGetval(RC_INF_VAL)) {
  -/* FIXME: Ralf! If an exception is thrown (or rethrown) into this context, */
  -/*        then the local handler (in five lines) either segfaults or hangs */
  -fprintf(stderr, "Hello user, OSSP rc is broken if you use --info. Thanks.\n\n                                - The management\n");
  -/*            configInfo();*/
  +            configInfo();
               bStop = TRUE;
           }
       }
  -    catch(Except) {
  +    catch(Except)
           rethrow;
  -    }
   
       if (bStop)                          /* Did user request a non-operation?  */
           return(RC_THROW(RC_ERR_TRM));   /* Yes, so terminate after handling.  */
  @@ -360,9 +346,8 @@
           if (!configGetval(RC_DFL_VAL))
           if (!configGetval(RC_ERR_VAL))*/
       }
  -    catch(Except) {
  +    catch(Except)
           rethrow;
  -    }
   
       return(RC_THROW(RC_OK));    /* Normal response */
   }
  @@ -379,9 +364,8 @@
           try {                       /* FIXME, not thread-safe       */
               clioptDelete();
           }
  -        catch(Except) {
  +        catch(Except)
               rethrow;
  -        }
       }
       else
           return(RC_THROW(RC_ERR_USE));
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_opt.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 rc_opt.c
  --- ossp-pkg/rc/rc_opt.c	19 May 2003 19:03:41 -0000	1.6
  +++ ossp-pkg/rc/rc_opt.c	26 May 2003 16:03:57 -0000	1.7
  @@ -114,9 +114,8 @@
           free(*ppOption);                /* Deallocate option and    */
           *ppOption = NULL;               /* clear its reference      */
       }
  -    catch(Except) {
  +    catch(Except)
           rethrow;
  -    }
   
       return(RC_THROW(RC_OK));
   }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	26 May 2003 11:36:16 -0000	1.35
  +++ ossp-pkg/rc/rc_proc.c	26 May 2003 16:03:57 -0000	1.36
  @@ -134,17 +134,6 @@
               RC_THROW(RC_ERR_IO);
   
           try {
  -
  -/* SEGFAULT SEGFAULT SEGFAULT SEGFAULT SEGFAULT SEGFAULT SEGFAULT SEGFAULT */
  -/*                                                                         */
  -/*                      CVS TAG OSSP_RC_EXBROKEN                           */
  -/*                                                                         */
  -/* FIXME: Move this throw macro inside the following if block to see magic */
  -/*                                                                         */
  -/* SEGFAULT SEGFAULT SEGFAULT SEGFAULT SEGFAULT SEGFAULT SEGFAULT SEGFAULT */
  -
  -/* RC_THROW(RC_ERR_USE); */
  -
               /* Append config section if it exists */
               pSec = scriptSection(pTempscript, configGetval(RC_NCF_VAL));
               if (pSec) { /* Only operate if the section lookup succeeds */
  @@ .

From ossp-cvs-owner@ossp.org  Mon May 26 18:24:09 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 61FA9769D2; Mon, 26 May 2003 18:24:09 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_proc.c rc_script.c
Message-Id: <20030526162409.61FA9769D2@mail.ossp.org>
Date: Mon, 26 May 2003 18:24:09 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   26-May-2003 18:24:09
  Branch: HEAD                             Handle: 2003052617240800

  Modified files:
    ossp-pkg/rc             rc_proc.c rc_script.c

  Log:
    Fix logic to avoid false positives when comparing sections of unequal
    lengths.

  Summary:
    Revision    Changes     Path
    1.37        +1  -2      ossp-pkg/rc/rc_proc.c
    1.22        +2  -1      ossp-pkg/rc/rc_script.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.36 -r1.37 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	26 May 2003 16:03:57 -0000	1.36
  +++ ossp-pkg/rc/rc_proc.c	26 May 2003 16:24:08 -0000	1.37
  @@ -147,9 +147,8 @@
                   /* Extract a section from the temp script, and append it */
                   pSec = scriptSection(pTempscript, pRc->m_pAnal->m_pszSecs[nSect]);
   
  -                if (pSec) { /* Only copy if the section lookup succeeds */
  +                if (pSec) /* Only copy if the section lookup succeeds */
                       labelAppendsec(pRc->m_ppLabvec[nRc], pSec);
  -                }
                   else if (configGetval(RC_DBG_VAL)) /* Only show if debug set */
                       fprintf(stderr, "#Warning: Missing section '%s' in %s!\n",\
                           pRc->m_pAnal->m_pszSecs[nSect],\
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_script.c
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 rc_script.c
  --- ossp-pkg/rc/rc_script.c	23 May 2003 14:14:09 -0000	1.21
  +++ ossp-pkg/rc/rc_script.c	26 May 2003 16:24:08 -0000	1.22
  @@ -200,7 +200,8 @@
           nLabsize   = *(pnVec + 3) - *(pnVec + 2);
   
           /* Test the substring. If it matches our label, make a new section */
  -        if (!strncmp(piLabstart, kszSecname, nLabsize)) {
  +        if (strncmp(piLabstart, kszSecname, nLabsize) == 0 \
  +            && nLabsize == strlen(kszSecname) * sizeof (char)) {
               /* Handle the section body */
               piStart   = piBlocend + *(pnVec + 6);
               piEnd     = piBlocend + *(pnVec + 7);
  @@ .

From ossp-cvs-owner@ossp.org  Tue May 27 13:53:13 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5867F76D38; Tue, 27 May 2003 13:53:13 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ 00TODO rc_config.c
Message-Id: <20030527115313.5867F76D38@mail.ossp.org>
Date: Tue, 27 May 2003 13:53:13 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   27-May-2003 13:53:13
  Branch: HEAD                             Handle: 2003052712531200

  Modified files:
    ossp-pkg/rc             00TODO rc_config.c

  Log:
    Back out volatile identifier additions after better understanding
    their role.

  Summary:
    Revision    Changes     Path
    1.45        +1  -0      ossp-pkg/rc/00TODO
    1.30        +11 -11     ossp-pkg/rc/rc_config.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/00TODO
  ============================================================================
  $ cvs diff -u -r1.44 -r1.45 00TODO
  --- ossp-pkg/rc/00TODO	23 May 2003 14:14:34 -0000	1.44
  +++ ossp-pkg/rc/00TODO	27 May 2003 11:53:12 -0000	1.45
  @@ -35,6 +35,7 @@
     Should location regex specify a directory and prefix separately, or files*?
     Should we just parse %config of labels which have matching %<...> sections?
     Under which user/priority does the %config and %common sections run?
  +  Are there bugs due to unused 'volatile' identifiers?
   
   Variation to OpenPKG rc
     OpenPKG puts sections with no -p at end, but we give them implicitly -p 200
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_config.c
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 rc_config.c
  --- ossp-pkg/rc/rc_config.c	26 May 2003 16:03:57 -0000	1.29
  +++ ossp-pkg/rc/rc_config.c	27 May 2003 11:53:12 -0000	1.30
  @@ -106,17 +106,17 @@
   const char *configGetval(rc_opt_t Optname)
   {
       ex_t Except;
  -    volatile char *oszTemp = NULL;
  +    char *szTemp = NULL;
   
       if (m_nLocks) {                         /* Make sure config exists      */
           try {
  -            if ((oszTemp = (char *)clioptGetval(Optname)));
  -/*            else if (oszTemp = envoptGetval(Optname));
  -            else if (oszTemp = cnfoptGetval(Optname));*/
  +            if ((szTemp = (char *)clioptGetval(Optname)));
  +/*            else if (szTemp = envoptGetval(Optname));
  +            else if (szTemp = cnfoptGetval(Optname));*/
           }
           catch(Except)
               rethrow;
  -        return((const char *)oszTemp);
  +        return((const char *)szTemp);
       }
       else {
           RC_THROW(RC_ERR_USE);
  @@ -149,7 +149,7 @@
   const char *configGetrcfile(void)
   {
       ex_t Except;
  -    volatile char *oszRcname = NULL;
  +    char *szRcname = NULL;
   
       if (m_nLocks) {                     /* Make sure config exists   */
           try {
  @@ -157,11 +157,11 @@
               /*         (2) it must be specified on the command line, */
               /* we don't bother checking the environment or conf file */
               /* contrary to the behaviour of Getval earlier           */
  -            oszRcname = (char *)clioptGetrcfile();
  +            szRcname = (char *)clioptGetrcfile();
           }
           catch(Except)
               rethrow;
  -        return((const char *)oszRcname);
  +        return((const char *)szRcname);
       }
       else
           RC_THROW(RC_ERR_USE);
  @@ -171,15 +171,15 @@
   const char **configGetsecs(void)
   {
       ex_t Except;
  -    volatile char **opszSecname = NULL;
  +    char **pszSecname = NULL;
   
       if (m_nLocks) {                                 /* Make sure config exists   */
           try {                                       /* FIXME Might need to check */
  -            opszSecname = (char **)clioptGetsecs(); /* FIXME env, conf, configs  */
  +            pszSecname = (char **)clioptGetsecs(); /* FIXME env, conf, configs  */
           }
           catch(Except)
               rethrow;
  -        return((const char **)opszSecname);
  +        return((const char **)pszSecname);
       }
       else
           RC_THROW(RC_ERR_USE);
  @@ .

From ossp-cvs-owner@ossp.org  Tue May 27 13:56:01 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C3D5676D38; Tue, 27 May 2003 13:56:00 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_script.c
Message-Id: <20030527115600.C3D5676D38@mail.ossp.org>
Date: Tue, 27 May 2003 13:56:00 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   27-May-2003 13:56:00
  Branch: HEAD                             Handle: 2003052712560000

  Modified files:
    ossp-pkg/rc             rc_script.c

  Log:
    Put throw logic back in where it was previously removed due to longjmp(3)
    problems.

  Summary:
    Revision    Changes     Path
    1.23        +4  -8      ossp-pkg/rc/rc_script.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_script.c
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 rc_script.c
  --- ossp-pkg/rc/rc_script.c	26 May 2003 16:24:08 -0000	1.22
  +++ ossp-pkg/rc/rc_script.c	27 May 2003 11:56:00 -0000	1.23
  @@ -84,8 +84,7 @@
       assert(pScript); /* Script parameter must be valid */
   
       if (!szInbuf) {
  -TRACE("Problem with appendScript");
  -/*        return(RC_THROW(RC_ERR_USE));*/
  +        return(RC_THROW(RC_ERR_USE));
       }
   
       /* Short circuit in case of dumb noop call */
  @@ -96,8 +95,7 @@
       nResize = (*pScript != NULL ? strlen(*pScript) : 0) + Size + 2;
       /* Don't trust realloc(3) in this case */
       if ((pvRealloc = calloc(1, (size_t)nResize)) == NULL) {
  -TRACE("Problem with appendScript");
  -/*        return(RC_THROW(RC_ERR_MEM));*/
  +        return(RC_THROW(RC_ERR_MEM));
       }
   
       /* Coerce strings into one Script again */
  @@ -332,8 +330,7 @@
           return(RC_THROW(RC_OK));
       }
       else
  -        fprintf(stderr, "FIXME: Replace with a real ex_throw!\n");
  -/*        return(RC_THROW(RC_ERR_USE));*/
  +        return(RC_THROW(RC_ERR_USE));
   }
   
   /************************************************
  @@ -345,8 +342,7 @@
       if (*pScript)
           free(*pScript);
       else {
  -TRACE("Empty script created, unused, then destroyed");
  -/*        RC_THROW(RC_WRN_NUL);*/
  +        RC_THROW(RC_WRN_NUL);
       }
       free(pScript);
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue May 27 15:00:28 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 434F576D38; Tue, 27 May 2003 15:00:27 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_proc.c rc_script.c
Message-Id: <20030527130027.434F576D38@mail.ossp.org>
Date: Tue, 27 May 2003 15:00:27 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   27-May-2003 15:00:26
  Branch: HEAD                             Handle: 2003052714002200

  Modified files:
    ossp-pkg/rc             rc_proc.c rc_script.c

  Log:
    Bugfix eval mode temp file name creation, and scrap the nonportable BSD call
    to strnstr(3).

  Summary:
    Revision    Changes     Path
    1.38        +1  -1      ossp-pkg/rc/rc_proc.c
    1.24        +11 -4      ossp-pkg/rc/rc_script.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	26 May 2003 16:24:08 -0000	1.37
  +++ ossp-pkg/rc/rc_proc.c	27 May 2003 13:00:22 -0000	1.38
  @@ -251,7 +251,7 @@
           szTmpfile = malloc(nTmpname);
           strcpy(szTmpfile, configGetval(RC_TMP_VAL));
           if (*(szTmpfile + (strlen(szTmpfile) - 1) * sizeof(char)) != '/')
  -            *(szTmpfile + (strlen(szTmpfile)) * sizeof(char)) = '/';
  +            strcat(szTmpfile, "/");
           strcat(szTmpfile, RC_EVL_TMP);
           mktemp(szTmpfile);
           strcat(szTmpfile, RC_EVL_SUF);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_script.c
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 rc_script.c
  --- ossp-pkg/rc/rc_script.c	27 May 2003 11:56:00 -0000	1.23
  +++ ossp-pkg/rc/rc_script.c	27 May 2003 13:00:22 -0000	1.24
  @@ -125,12 +125,13 @@
       rc_section_t *pSec = NULL;
       char *piLabstart   = NULL;
       int   nLabsize     = NULL;
  -    char *piSubtemp    = NULL; /* To find priority and userid in substrings */
  -    char *piBlocend    = NULL; /* Misnomer used to control section looping */
  +    char *piSubtemp    = NULL; /* To find priority and userid in substrings  */
  +    char *piBlocend    = NULL; /* Misnomer used to control section looping   */
       char *piStart      = NULL;
       char *piEnd        = NULL;
       char *piSep        = NULL;
       char *szUser       = NULL;
  +    char *szTemp       = NULL; /* Holds temporarily the pri and user strings */
       struct passwd *pPwd = NULL;
       long  nPri         = 0;
       long  nUid         = 0;
  @@ -210,7 +211,9 @@
               /* Handle the section priority */
               piStart = piBlocend + *(pnVec + 4);
               piEnd   = piBlocend + *(pnVec + 5);
  -            piSubtemp = strnstr(piStart, RC_DEF_PRG, piEnd - piStart);
  +            szTemp  = malloc((piEnd - piStart + 1) * sizeof (char));
  +            strncpy(szTemp, piStart, piEnd - piStart + 1);
  +            piSubtemp = strstr(szTemp, RC_DEF_PRG);
               if (piSubtemp) { /* Priority pattern found */
                   for (nTmp = (int)piSubtemp + strlen(RC_DEF_PRG);\
                       isspace(*(char *)nTmp); nTmp += sizeof (char)); /* Strip */
  @@ -224,7 +227,7 @@
                   sectionSetpri(pSec, RC_DEF_PRI);
   
               /* Handle the section userid   */
  -            piSubtemp = strnstr(piStart, RC_DEF_UIG, piEnd - piStart);
  +            piSubtemp = strstr(szTemp, RC_DEF_UIG);
               if (piSubtemp) { /* Userid pattern found */
                   for (nTmp = (int)piSubtemp + strlen(RC_DEF_UIG); \
                       isspace(*(char *)nTmp); nTmp += sizeof (char)); /* Strip */
  @@ -258,6 +261,10 @@
               }
               else /* Fallback to default value */
                   sectionSetuid(pSec, RC_DEF_UID);
  +
  +            /* Cleanup */
  +            free(szTemp);
  +            szTemp = NULL;
   
               return(pSec); /* Section found, so return the text */
           }
  @@ .

From ossp-cvs-owner@ossp.org  Tue May 27 15:14:09 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5607A76D38; Tue, 27 May 2003 15:14:09 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_cliopt.c rc_script.c rc_sect.c
Message-Id: <20030527131409.5607A76D38@mail.ossp.org>
Date: Tue, 27 May 2003 15:14:09 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   27-May-2003 15:14:09
  Branch: HEAD                             Handle: 2003052714140800

  Modified files:
    ossp-pkg/rc             rc_cliopt.c rc_script.c rc_sect.c

  Log:
    Clean up non BSD compiler warnings.

  Summary:
    Revision    Changes     Path
    1.16        +1  -1      ossp-pkg/rc/rc_cliopt.c
    1.25        +1  -1      ossp-pkg/rc/rc_script.c
    1.11        +3  -3      ossp-pkg/rc/rc_sect.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_cliopt.c
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 rc_cliopt.c
  --- ossp-pkg/rc/rc_cliopt.c	26 May 2003 16:03:57 -0000	1.15
  +++ ossp-pkg/rc/rc_cliopt.c	27 May 2003 13:14:08 -0000	1.16
  @@ -98,7 +98,7 @@
   /*    s_pBintab->pOptlist->pvData = NULL;
       s_pBintab->pOptlist->pvNext = NULL;*/
   
  -    memset(m_pszOptuples, NULL, sizeof(m_pszOptuples));
  +    memset(m_pszOptuples, 0L, sizeof(m_pszOptuples));
   
       return(RC_THROW(RC_OK));
   }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_script.c
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 rc_script.c
  --- ossp-pkg/rc/rc_script.c	27 May 2003 13:00:22 -0000	1.24
  +++ ossp-pkg/rc/rc_script.c	27 May 2003 13:14:08 -0000	1.25
  @@ -124,7 +124,7 @@
   {
       rc_section_t *pSec = NULL;
       char *piLabstart   = NULL;
  -    int   nLabsize     = NULL;
  +    int   nLabsize     = 0;
       char *piSubtemp    = NULL; /* To find priority and userid in substrings  */
       char *piBlocend    = NULL; /* Misnomer used to control section looping   */
       char *piStart      = NULL;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_sect.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 rc_sect.c
  --- ossp-pkg/rc/rc_sect.c	21 May 2003 15:16:41 -0000	1.10
  +++ ossp-pkg/rc/rc_sect.c	27 May 2003 13:14:08 -0000	1.11
  @@ -202,17 +202,17 @@
   rc_return_t sectionSetndata(rc_section_t *pSec, const char *kszScript, size_t Len)
   { /* Data of section, this is the script body of the particular section */
       if (pSec) {
  -        pSec->m_Bytes = Len * sizeof(char) + sizeof(char); /* Set size */
  +        pSec->m_Bytes = (Len + 1) * sizeof(char);       /* Set size */
           if (pSec->m_szData) { /* The section data is already in use */
               free(pSec->m_szData);
               pSec->m_szData = malloc(pSec->m_Bytes);
               strncpy(pSec->m_szData, kszScript, Len);
  -            *(pSec->m_szData + Len) = NULL; /* Terminate outgoing */
  +            *(pSec->m_szData + Len) = '\0'; /* Terminate outgoing */
           }
           else { /* Set the data the usual way */
               pSec->m_szData = malloc(pSec->m_Bytes);
               strncpy(pSec->m_szData, kszScript, Len);
  -            *(pSec->m_szData + Len) = NULL; /* Terminate outgoing */
  +            *(pSec->m_szData + Len) = '\0'; /* Terminate outgoing */
           }
           return(RC_THROW(RC_OK));
       }
  @@ .

From ossp-cvs-owner@ossp.org  Tue May 27 16:51:41 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4082076D38; Tue, 27 May 2003 16:51:40 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_anal.c rc_util.c
Message-Id: <20030527145140.4082076D38@mail.ossp.org>
Date: Tue, 27 May 2003 16:51:40 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   27-May-2003 16:51:39
  Branch: HEAD                             Handle: 2003052715513800

  Modified files:
    ossp-pkg/rc             rc_anal.c rc_util.c

  Log:
    Fix vector copy terminate bug, and add checks to processor.

  Summary:
    Revision    Changes     Path
    1.16        +5  -2      ossp-pkg/rc/rc_anal.c
    1.9         +4  -3      ossp-pkg/rc/rc_util.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_anal.c
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 rc_anal.c
  --- ossp-pkg/rc/rc_anal.c	26 May 2003 16:03:56 -0000	1.15
  +++ ossp-pkg/rc/rc_anal.c	27 May 2003 14:51:38 -0000	1.16
  @@ -247,8 +247,11 @@
   /*        just copies of the stack parameters passed in.         */
       int nIter = 0;
   
  -    while (pInst->m_szRcs[nIter])   /* Rc file names       */
  -        free(pInst->m_szRcs[nIter++]);
  +    assert(pInst); /* Verify sanity */
  +
  +    if (pInst->m_szRcs && pInst->m_szRcs[nIter])
  +        while (pInst->m_szRcs[nIter]) /* Rc file names     */
  +            free(pInst->m_szRcs[nIter++]);
       if (pInst->m_szRcs)             /* Rc file name index  */
           free(pInst->m_szRcs);
       if (pInst->m_szTmp)             /* Temp file name      */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_util.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 rc_util.c
  --- ossp-pkg/rc/rc_util.c	20 May 2003 17:14:17 -0000	1.8
  +++ ossp-pkg/rc/rc_util.c	27 May 2003 14:51:38 -0000	1.9
  @@ -57,6 +57,7 @@
   {
       int nSecs  = 0;
       int nIndex = 0;
  +    size_t nBytes  = 0;
       char **pszTemp = NULL;
   
       if (kpszVec) {
  @@ -64,9 +65,9 @@
           pszTemp = malloc(sizeof (char **) * nSecs + 1);
   
           for (nIndex = 0; kpszVec[nIndex]; nIndex++) {           /* Copy loop */
  -            pszTemp[nIndex] = malloc(strlen(kpszVec[nIndex]));  /* for each  */
  -            memcpy(pszTemp[nIndex], kpszVec[nIndex],            /* element   */
  -                   strlen(kpszVec[nIndex]));                    /* in vector */
  +            nBytes = (strlen(kpszVec[nIndex]) + 1) * sizeof(char); /* for each */
  +            pszTemp[nIndex] = malloc(nBytes);                   /* element   */
  +            memcpy(pszTemp[nIndex], kpszVec[nIndex], nBytes);   /* in vector */
           }
           pszTemp[nIndex] = NULL; /* Used later to find the end of the array */
           return(pszTemp);        /* Success */
  @@ .

From ossp-cvs-owner@ossp.org  Tue May 27 17:02:59 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 59C2876D39; Tue, 27 May 2003 17:02:58 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_const.h
Message-Id: <20030527150258.59C2876D39@mail.ossp.org>
Date: Tue, 27 May 2003 17:02:58 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   27-May-2003 17:02:57
  Branch: HEAD                             Handle: 2003052716025600

  Modified files:
    ossp-pkg/rc             rc_const.h

  Log:
    Fix mktemp(3) bug, causing ignorance of user suggested temp file path.

  Summary:
    Revision    Changes     Path
    1.18        +1  -1      ossp-pkg/rc/rc_const.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_const.h
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 rc_const.h
  --- ossp-pkg/rc/rc_const.h	26 May 2003 08:36:40 -0000	1.17
  +++ ossp-pkg/rc/rc_const.h	27 May 2003 15:02:56 -0000	1.18
  @@ -133,7 +133,7 @@
   #define RC_DEF_PRI    200                       /* Section priority value */
   
   /* Handling temporary and output during evaluation mode */
  -#define RC_EVL_TMP    "rc.XXXX"                              /* Temporary file template */
  +#define RC_EVL_TMP    "rc.XXXXXX"                            /* Temporary file template */
   #define RC_EVL_SUF    ".tmp"                                 /* Temporary file suffix   */
   #define RC_EVL_OUT    ". %s; rm -f %s 2>/dev/null || true\n" /* Command line output     */
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue May 27 17:09:10 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4EABB76D39; Tue, 27 May 2003 17:09:10 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_script.c
Message-Id: <20030527150910.4EABB76D39@mail.ossp.org>
Date: Tue, 27 May 2003 17:09:10 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   27-May-2003 17:09:10
  Branch: HEAD                             Handle: 2003052716090900

  Modified files:
    ossp-pkg/rc             rc_script.c

  Log:
    Fix wrong type warning on SVR4.

  Summary:
    Revision    Changes     Path
    1.26        +2  -2      ossp-pkg/rc/rc_script.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_script.c
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 rc_script.c
  --- ossp-pkg/rc/rc_script.c	27 May 2003 13:14:08 -0000	1.25
  +++ ossp-pkg/rc/rc_script.c	27 May 2003 15:09:09 -0000	1.26
  @@ -216,7 +216,7 @@
               piSubtemp = strstr(szTemp, RC_DEF_PRG);
               if (piSubtemp) { /* Priority pattern found */
                   for (nTmp = (int)piSubtemp + strlen(RC_DEF_PRG);\
  -                    isspace(*(char *)nTmp); nTmp += sizeof (char)); /* Strip */
  +                    isspace(nTmp); nTmp += sizeof (char)); /* Strip */
                   nPri = strtol((char *)nTmp, &piSep, 10);
                   if ((char *)nTmp == piSep)  /* No priority number follows */
                       sectionSetpri(pSec, RC_DEF_PRI); /* which is an error */
  @@ -230,7 +230,7 @@
               piSubtemp = strstr(szTemp, RC_DEF_UIG);
               if (piSubtemp) { /* Userid pattern found */
                   for (nTmp = (int)piSubtemp + strlen(RC_DEF_UIG); \
  -                    isspace(*(char *)nTmp); nTmp += sizeof (char)); /* Strip */
  +                    isspace(nTmp); nTmp += sizeof (char)); /* Strip */
                   nUid = strtol((char *)nTmp, &piSep, 10);
                   if ((char *)nTmp == piSep)      /* No userid number follows */
                   {
  @@ .

From ossp-cvs-owner@ossp.org  Wed May 28 15:12:33 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 89E3076D03; Wed, 28 May 2003 15:12:32 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_anal.c
Message-Id: <20030528131232.89E3076D03@mail.ossp.org>
Date: Wed, 28 May 2003 15:12:32 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   28-May-2003 15:12:32
  Branch: HEAD                             Handle: 2003052814123100

  Modified files:
    ossp-pkg/rc             rc_anal.c

  Log:
    Replace nonportable scandir(3) with portable opendir(3) and
    readdir(3).

  Summary:
    Revision    Changes     Path
    1.17        +22 -17     ossp-pkg/rc/rc_anal.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_anal.c
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 rc_anal.c
  --- ossp-pkg/rc/rc_anal.c	27 May 2003 14:51:38 -0000	1.16
  +++ ossp-pkg/rc/rc_anal.c	28 May 2003 13:12:31 -0000	1.17
  @@ -181,35 +181,40 @@
   ************************************************/
   rc_return_t analGloblocs(rc_anal_t **ppInst)
   {
  -    struct dirent ***pppFiles = NULL;
  +    DIR *pLocdir = NULL;
  +    struct dirent *pDirent = NULL;
       int nCount = 0; /* How many globbed files we find */
  -    int nIter  = 0; /* Iterate over the number of globbed files */
  +    int nIter = 0;  /* Used to step through found files */
   
  -    assert(*ppInst); /* Verify sanity */
  +    assert(*ppInst); /* Sanity check */
   
  -    /* Write the globbed filenames to our anal object */
  -    pppFiles = malloc(sizeof(struct dirent));
  -    nCount = scandir((*ppInst)->m_szLocs, pppFiles, analFileselect, alphasort);
  +    /* First just learn how many globbed files we have */
  +    if ((pLocdir = opendir((*ppInst)->m_szLocs)) == NULL)
  +        return(RC_THROW(RC_ERR_DIR));
  +    for (pDirent = readdir(pLocdir); pDirent; pDirent = readdir(pLocdir))
  +        if (!strncmp(pDirent->d_name, "rc.", 3))
  +            nCount++;
  +    closedir(pLocdir);
   
  -    /* Check out the health of this directory listing */
  -    if (nCount == -1)
  +    if (nCount == 0) /* Check out the health of this directory listing */
           return(RC_THROW(RC_ERR_DIR));
       else /* Allocate for the string array to hold directory entry names */
           (*ppInst)->m_szRcs = malloc(sizeof((*((*ppInst)->m_szRcs))) * (nCount + 1));
   
       /* Loop through file index setting rc file names according to dirent */
  -    for (nIter = 0; nIter < nCount; ++nIter) {
  -        (*ppInst)->m_szRcs[nIter] = strdup((*pppFiles)[nIter]->d_name +\
  -            strlen("rc.") * sizeof(char));
  +    if ((pLocdir = opendir((*ppInst)->m_szLocs)) == NULL)
  +        return(RC_THROW(RC_ERR_DIR));
  +    for (pDirent = readdir(pLocdir); pDirent; pDirent = readdir(pLocdir)) {
  +        if (!strncmp(pDirent->d_name, "rc.", 3)) {
  +            (*ppInst)->m_szRcs[nIter] = strdup(pDirent->d_name + \
  +                                        strlen("rc.") * sizeof(char));
  +            nIter++;
  +        }
       }
  +    closedir(pLocdir);
  +
       (*ppInst)->m_szRcs[nIter] = NULL; /* Terminate */
       (*ppInst)->m_nRcs = nCount; /* Store how many globbed files there are */
  -
  -    /* Cleanup our Dirent object */
  -    if (pppFiles) {
  -        free(pppFiles);
  -        pppFiles = NULL;
  -    }
   
       return(RC_THROW(RC_OK));
   }
  @@ .

From ossp-cvs-owner@ossp.org  Wed May 28 15:31:56 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B18AA76D03; Wed, 28 May 2003 15:31:56 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_script.c ossp-pkg/rc/rc_test/ rc.ntp
Message-Id: <20030528133156.B18AA76D03@mail.ossp.org>
Date: Wed, 28 May 2003 15:31:56 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   28-May-2003 15:31:56
  Branch: HEAD                             Handle: 2003052814315501

  Modified files:
    ossp-pkg/rc             rc_script.c
    ossp-pkg/rc/rc_test     rc.ntp

  Log:
    Bug fix section to script extractor, and remove unneeded white space
    stripper.

  Summary:
    Revision    Changes     Path
    1.27        +3  -5      ossp-pkg/rc/rc_script.c
    1.6         +0  -1      ossp-pkg/rc/rc_test/rc.ntp
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_script.c
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 rc_script.c
  --- ossp-pkg/rc/rc_script.c	27 May 2003 15:09:09 -0000	1.26
  +++ ossp-pkg/rc/rc_script.c	28 May 2003 13:31:55 -0000	1.27
  @@ -215,11 +215,10 @@
               strncpy(szTemp, piStart, piEnd - piStart + 1);
               piSubtemp = strstr(szTemp, RC_DEF_PRG);
               if (piSubtemp) { /* Priority pattern found */
  -                for (nTmp = (int)piSubtemp + strlen(RC_DEF_PRG);\
  -                    isspace(nTmp); nTmp += sizeof (char)); /* Strip */
  +                nTmp = (int)piSubtemp + strlen(RC_DEF_PRG);
                   nPri = strtol((char *)nTmp, &piSep, 10);
                   if ((char *)nTmp == piSep)  /* No priority number follows */
  -                    sectionSetpri(pSec, RC_DEF_PRI); /* which is an error */
  +                    RC_THROW(RC_ERR_USE);   /* which is an error */
                   else
                       sectionSetpri(pSec, nPri);  /* Found a priority value */
               }
  @@ -229,8 +228,7 @@
               /* Handle the section userid   */
               piSubtemp = strstr(szTemp, RC_DEF_UIG);
               if (piSubtemp) { /* Userid pattern found */
  -                for (nTmp = (int)piSubtemp + strlen(RC_DEF_UIG); \
  -                    isspace(nTmp); nTmp += sizeof (char)); /* Strip */
  +                nTmp = (int)piSubtemp + strlen(RC_DEF_UIG);
                   nUid = strtol((char *)nTmp, &piSep, 10);
                   if ((char *)nTmp == piSep)      /* No userid number follows */
                   {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_test/rc.ntp
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 rc.ntp
  --- ossp-pkg/rc/rc_test/rc.ntp	22 May 2003 14:45:15 -0000	1.5
  +++ ossp-pkg/rc/rc_test/rc.ntp	28 May 2003 13:31:56 -0000	1.6
  @@ -16,7 +16,6 @@
       cat $0
   
   %stop -p 200 -u root
  -    opServiceEnabled ntp || exit 0
       kill -TERM `cat /sw/var/ntp/ntp.pid`
   
   echo "Run commands NTP finishing"
  @@ .

From ossp-cvs-owner@ossp.org  Wed May 28 16:25:58 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D917B76D05; Wed, 28 May 2003 16:25:57 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_script.c
Message-Id: <20030528142557.D917B76D05@mail.ossp.org>
Date: Wed, 28 May 2003 16:25:57 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   28-May-2003 16:25:57
  Branch: HEAD                             Handle: 2003052815255600

  Modified files:
    ossp-pkg/rc             rc_script.c

  Log:
    Bug fix user id parsing on linux, and put strip block back in.

  Summary:
    Revision    Changes     Path
    1.28        +6  -3      ossp-pkg/rc/rc_script.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_script.c
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 rc_script.c
  --- ossp-pkg/rc/rc_script.c	28 May 2003 13:31:55 -0000	1.27
  +++ ossp-pkg/rc/rc_script.c	28 May 2003 14:25:56 -0000	1.28
  @@ -215,7 +215,8 @@
               strncpy(szTemp, piStart, piEnd - piStart + 1);
               piSubtemp = strstr(szTemp, RC_DEF_PRG);
               if (piSubtemp) { /* Priority pattern found */
  -                nTmp = (int)piSubtemp + strlen(RC_DEF_PRG);
  +                for (nTmp = (int)piSubtemp + strlen(RC_DEF_PRG); \
  +                    isspace(*(char *)nTmp); nTmp += sizeof (char)); /* Strip */
                   nPri = strtol((char *)nTmp, &piSep, 10);
                   if ((char *)nTmp == piSep)  /* No priority number follows */
                       RC_THROW(RC_ERR_USE);   /* which is an error */
  @@ -228,11 +229,13 @@
               /* Handle the section userid   */
               piSubtemp = strstr(szTemp, RC_DEF_UIG);
               if (piSubtemp) { /* Userid pattern found */
  -                nTmp = (int)piSubtemp + strlen(RC_DEF_UIG);
  +                for (nTmp = (int)piSubtemp + strlen(RC_DEF_UIG); \
  +                    isspace(*(char *)nTmp); nTmp += sizeof (char)); /* Strip */
                   nUid = strtol((char *)nTmp, &piSep, 10);
                   if ((char *)nTmp == piSep)      /* No userid number follows */
                   {
  -                    nUserbytes = (strcspn(piSep, " \t\n") + sizeof (char)) * sizeof (char);
  +                    nUserbytes = strspn((strcspn(piSep, " \t\n") * sizeof (char) + piSep), " \t\n");
  +                    nUserbytes = (strlen(piSep) - nUserbytes + 1) * sizeof (char);
                       szUser = malloc(nUserbytes);
                       if (!szUser)
                           RC_THROW(RC_ERR_MEM);
  @@ .

From ossp-cvs-owner@ossp.org  Wed May 28 16:40:26 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B6E7776D06; Wed, 28 May 2003 16:40:25 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_proc.c
Message-Id: <20030528144025.B6E7776D06@mail.ossp.org>
Date: Wed, 28 May 2003 16:40:25 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   28-May-2003 16:40:25
  Branch: HEAD                             Handle: 2003052815402500

  Modified files:
    ossp-pkg/rc             rc_proc.c

  Log:
    Bug fix memory problems found by Solaris.

  Summary:
    Revision    Changes     Path
    1.39        +3  -1      ossp-pkg/rc/rc_proc.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.38 -r1.39 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	27 May 2003 13:00:22 -0000	1.38
  +++ ossp-pkg/rc/rc_proc.c	28 May 2003 14:40:25 -0000	1.39
  @@ -116,7 +116,9 @@
           pRc->m_ppLabvec[nRc] = labelNew(pRc->m_pAnal->m_szRcs[nRc]);
   
           /* Build the path name */
  -        szLocex = (char *)malloc(strlen(pRc->m_pAnal->m_szLocs) + strlen(pRc->m_pAnal->m_szRcs[nRc]) + 2);
  +        szLocex = (char *)malloc(strlen(pRc->m_pAnal->m_szLocs) + \
  +                                 strlen(pRc->m_pAnal->m_szRcs[nRc]) + \
  +                                 strlen("rc.") + 1);
           strcpy(szLocex, pRc->m_pAnal->m_szLocs);
           strcat(szLocex, "rc."); /* FIXME: Make the prefix configurable */
           strcat(szLocex, pRc->m_pAnal->m_szRcs[nRc]);
  @@ .

From ossp-cvs-owner@ossp.org  Wed May 28 16:45:18 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B579376D08; Wed, 28 May 2003 16:45:18 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/rc_test/ rc.ntp
Message-Id: <20030528144518.B579376D08@mail.ossp.org>
Date: Wed, 28 May 2003 16:45:18 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   28-May-2003 16:45:18
  Branch: HEAD                             Handle: 2003052815451800

  Modified files:
    ossp-pkg/rc/rc_test     rc.ntp

  Log:
    Better test for different userid and no whitespace between option.

  Summary:
    Revision    Changes     Path
    1.7         +3  -3      ossp-pkg/rc/rc_test/rc.ntp
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_test/rc.ntp
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 rc.ntp
  --- ossp-pkg/rc/rc_test/rc.ntp	28 May 2003 13:31:56 -0000	1.6
  +++ ossp-pkg/rc/rc_test/rc.ntp	28 May 2003 14:45:18 -0000	1.7
  @@ -10,10 +10,10 @@
       opServiceEnabled ntp || exit 0
       /sw/sbin/ntp >/dev/null 2>&1
   
  -%go
  -    ping -a -c 4 dt1.dev.de.cw.net
  +%go -umschloh
  +    ping -s design-web.co.uk 56 4
       curl -s ftp://ftp.openpkg.org/current/SRC/ | grep openssl
  -    cat $0
  +    echo $0
   
   %stop -p 200 -u root
       kill -TERM `cat /sw/var/ntp/ntp.pid`
  @@ .

From ossp-cvs-owner@ossp.org  Wed May 28 17:09:31 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 349A476D06; Wed, 28 May 2003 17:09:31 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_anal.c rc_private.h rc_proc.c
Message-Id: <20030528150931.349A476D06@mail.ossp.org>
Date: Wed, 28 May 2003 17:09:31 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   28-May-2003 17:09:30
  Branch: HEAD                             Handle: 2003052816092900

  Modified files:
    ossp-pkg/rc             rc_anal.c rc_private.h rc_proc.c

  Log:
    Fix incorrect variable name m_szRcs, bug fix analyzer rc list
    algorythm.

  Summary:
    Revision    Changes     Path
    1.18        +15 -13     ossp-pkg/rc/rc_anal.c
    1.29        +1  -1      ossp-pkg/rc/rc_private.h
    1.40        +7  -7      ossp-pkg/rc/rc_proc.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_anal.c
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 rc_anal.c
  --- ossp-pkg/rc/rc_anal.c	28 May 2003 13:12:31 -0000	1.17
  +++ ossp-pkg/rc/rc_anal.c	28 May 2003 15:09:29 -0000	1.18
  @@ -57,15 +57,17 @@
   {
       ex_t Except;
   
  -    assert(!(*ppInst)->m_szRcs); /* Rcs should be NULL until we set them */
  +    assert(!(*ppInst)->m_pszRcs); /* Rcs should be NULL until we set them */
   
       if (!kszName)
           return(RC_THROW(RC_ERR_RCF));
       else { /* Only enter block with valid string, strdup can't handle NULL */
  -        (*ppInst)->m_szRcs = malloc(sizeof(char **));
  +        (*ppInst)->m_pszRcs = malloc(sizeof(char **));
           if (strcmp(kszName, RC_GLOB_WILD)) {
  -            (*ppInst)->m_szRcs = malloc(sizeof(*((*ppInst)->m_szRcs)));
  -            *(*ppInst)->m_szRcs = strdup(kszName);
  +            (*ppInst)->m_pszRcs = malloc(sizeof(*((*ppInst)->m_pszRcs)) * 2);
  +            (*ppInst)->m_pszRcs[0] = strdup(kszName);
  +            (*ppInst)->m_pszRcs[0] = strdup(kszName);
  +            (*ppInst)->m_pszRcs[1] = NULL;
               (*ppInst)->m_nRcs = 1;            /* We handle just one rc file */
           }
           else { /* Wildcard rcfile indicates we must glob the locs directories */
  @@ -199,21 +201,21 @@
       if (nCount == 0) /* Check out the health of this directory listing */
           return(RC_THROW(RC_ERR_DIR));
       else /* Allocate for the string array to hold directory entry names */
  -        (*ppInst)->m_szRcs = malloc(sizeof((*((*ppInst)->m_szRcs))) * (nCount + 1));
  +        (*ppInst)->m_pszRcs = malloc(sizeof(*((*ppInst)->m_pszRcs)) * (nCount + 1));
   
       /* Loop through file index setting rc file names according to dirent */
       if ((pLocdir = opendir((*ppInst)->m_szLocs)) == NULL)
           return(RC_THROW(RC_ERR_DIR));
       for (pDirent = readdir(pLocdir); pDirent; pDirent = readdir(pLocdir)) {
           if (!strncmp(pDirent->d_name, "rc.", 3)) {
  -            (*ppInst)->m_szRcs[nIter] = strdup(pDirent->d_name + \
  -                                        strlen("rc.") * sizeof(char));
  +            (*ppInst)->m_pszRcs[nIter] = strdup(pDirent->d_name + \
  +                                         strlen("rc.") * sizeof(char));
               nIter++;
           }
       }
       closedir(pLocdir);
   
  -    (*ppInst)->m_szRcs[nIter] = NULL; /* Terminate */
  +    (*ppInst)->m_pszRcs[nIter] = NULL; /* Terminate */
       (*ppInst)->m_nRcs = nCount; /* Store how many globbed files there are */
   
       return(RC_THROW(RC_OK));
  @@ -254,11 +256,11 @@
   
       assert(pInst); /* Verify sanity */
   
  -    if (pInst->m_szRcs && pInst->m_szRcs[nIter])
  -        while (pInst->m_szRcs[nIter]) /* Rc file names     */
  -            free(pInst->m_szRcs[nIter++]);
  -    if (pInst->m_szRcs)             /* Rc file name index  */
  -        free(pInst->m_szRcs);
  +    if (pInst->m_pszRcs && pInst->m_pszRcs[nIter])
  +        while (pInst->m_pszRcs[nIter]) /* Rc file names    */
  +            free(pInst->m_pszRcs[nIter++]);
  +    if (pInst->m_pszRcs)            /* Rc file name index  */
  +        free(pInst->m_pszRcs);
       if (pInst->m_szTmp)             /* Temp file name      */
           free(pInst->m_szTmp);
       if (pInst->m_szFuncs)           /* Function file names */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_private.h
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 rc_private.h
  --- ossp-pkg/rc/rc_private.h	21 May 2003 12:49:21 -0000	1.28
  +++ ossp-pkg/rc/rc_private.h	28 May 2003 15:09:29 -0000	1.29
  @@ -77,7 +77,7 @@
   typedef struct {
       short m_nRcs;       /* How many rc files   */
       short m_nSecs;      /* How many sections   */
  -    char **m_szRcs;     /* Rc file names       */
  +    char **m_pszRcs;    /* Rc file names       */
       char *m_szTmp;      /* Temp file name      */
       char *m_szFuncs;    /* Function file names */
       char *m_szLocs;     /* Location path names */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.39 -r1.40 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	28 May 2003 14:40:25 -0000	1.39
  +++ ossp-pkg/rc/rc_proc.c	28 May 2003 15:09:29 -0000	1.40
  @@ -85,7 +85,7 @@
       char         *szLocex     = NULL;
       rc_script_t  *pTempscript = NULL;
   
  -    assert(*pRc->m_pAnal->m_szRcs);
  +    assert(*pRc->m_pAnal->m_pszRcs);
       sBuf = (char *)calloc(1, RC_READ_BUFSIZE);
   
       /* Stick on the starting shell id line */
  @@ -109,19 +109,19 @@
       /* Iteratively read possibly globbed rc files */
       for (nRc = 0; nRc < pRc->m_pAnal->m_nRcs; nRc++)
       {
  -        assert(*pRc->m_pAnal->m_szRcs); /* If one of these assertions fail, */
  -        assert(pRc->m_pAnal->m_szLocs); /* you've probably seen the ex_ bug */
  +        assert(*pRc->m_pAnal->m_pszRcs);
  +        assert(pRc->m_pAnal->m_szLocs);
   
           /* Construct a new label */
  -        pRc->m_ppLabvec[nRc] = labelNew(pRc->m_pAnal->m_szRcs[nRc]);
  +        pRc->m_ppLabvec[nRc] = labelNew(pRc->m_pAnal->m_pszRcs[nRc]);
   
           /* Build the path name */
           szLocex = (char *)malloc(strlen(pRc->m_pAnal->m_szLocs) + \
  -                                 strlen(pRc->m_pAnal->m_szRcs[nRc]) + \
  +                                 strlen(pRc->m_pAnal->m_pszRcs[nRc]) + \
                                    strlen("rc.") + 1);
           strcpy(szLocex, pRc->m_pAnal->m_szLocs);
           strcat(szLocex, "rc."); /* FIXME: Make the prefix configurable */
  -        strcat(szLocex, pRc->m_pAnal->m_szRcs[nRc]);
  +        strcat(szLocex, pRc->m_pAnal->m_pszRcs[nRc]);
   
           /* Open the rc file unconditionally */
           if ((nFdrc = open(szLocex, O_RDONLY)) == -1)
  @@ -154,7 +154,7 @@
                   else if (configGetval(RC_DBG_VAL)) /* Only show if debug set */
                       fprintf(stderr, "#Warning: Missing section '%s' in %s!\n",\
                           pRc->m_pAnal->m_pszSecs[nSect],\
  -                        pRc->m_pAnal->m_szRcs[nRc]);
  +                        pRc->m_pAnal->m_pszRcs[nRc]);
   
                   if (pSec) { /* Cleanup iterative section string */
                       sectionDelete(pSec);
  @@ .

From ossp-cvs-owner@ossp.org  Wed May 28 20:26:49 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 43F0E76D08; Wed, 28 May 2003 20:26:49 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/rc_test/ rc.ntp rc.zebra
Message-Id: <20030528182649.43F0E76D08@mail.ossp.org>
Date: Wed, 28 May 2003 20:26:49 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   28-May-2003 20:26:48
  Branch: HEAD                             Handle: 2003052819264800

  Modified files:
    ossp-pkg/rc/rc_test     rc.ntp rc.zebra

  Log:
    Test line spanning sections.

  Summary:
    Revision    Changes     Path
    1.8         +2  -0      ossp-pkg/rc/rc_test/rc.ntp
    1.6         +5  -0      ossp-pkg/rc/rc_test/rc.zebra
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_test/rc.ntp
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 rc.ntp
  --- ossp-pkg/rc/rc_test/rc.ntp	28 May 2003 14:45:18 -0000	1.7
  +++ ossp-pkg/rc/rc_test/rc.ntp	28 May 2003 18:26:48 -0000	1.8
  @@ -15,6 +15,8 @@
       curl -s ftp://ftp.openpkg.org/current/SRC/ | grep openssl
       echo $0
   
  +    echo "And again..."
  +
   %stop -p 200 -u root
       kill -TERM `cat /sw/var/ntp/ntp.pid`
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_test/rc.zebra
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 rc.zebra
  --- ossp-pkg/rc/rc_test/rc.zebra	22 May 2003 14:45:15 -0000	1.5
  +++ ossp-pkg/rc/rc_test/rc.zebra	28 May 2003 18:26:48 -0000	1.6
  @@ -17,3 +17,8 @@
   
   %start -u ms
       echo "No priority given, Otay zebra in Umfolozi"
  +    echo "No priority given, Otay zebra in Umfolozi"
  +
  +    pwd
  +    id
  +    uname -a
  @@ .

From ossp-cvs-owner@ossp.org  Wed May 28 20:27:22 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4BCBF76D4E; Wed, 28 May 2003 20:27:22 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_const.h
Message-Id: <20030528182722.4BCBF76D4E@mail.ossp.org>
Date: Wed, 28 May 2003 20:27:22 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   28-May-2003 20:27:22
  Branch: HEAD                             Handle: 2003052819272100

  Modified files:
    ossp-pkg/rc             rc_const.h

  Log:
    Slightly correct section definition default.

  Summary:
    Revision    Changes     Path
    1.19        +1  -1      ossp-pkg/rc/rc_const.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_const.h
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 rc_const.h
  --- ossp-pkg/rc/rc_const.h	27 May 2003 15:02:56 -0000	1.18
  +++ ossp-pkg/rc/rc_const.h	28 May 2003 18:27:21 -0000	1.19
  @@ -125,7 +125,7 @@
   #define RC_DEF_ON     "1"                       /* Digital switch */
   #define RC_DEF_OFF    "0"                       /* Digital switch */
   #define RC_DEF_TMP    "/tmp"                    /* Temporary directory name */
  -#define RC_DEF_DEF    "^%(\\w+)[ \t]*(.*?)\\n(.*?)^$" /* Section definition */
  +#define RC_DEF_DEF    "^%(\\w+)[ \t]+(.*?)\\n(.*?)^$" /* Section definition */
   #define RC_DEF_NCF    "config"                  /* Config section name */
   #define RC_DEF_UIG    "-u"                      /* Section user string */
   #define RC_DEF_UID    -1                        /* Section user value  */
  @@ .

From ossp-cvs-owner@ossp.org  Wed May 28 20:43:35 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3F5B776D49; Wed, 28 May 2003 20:43:35 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_const.h
Message-Id: <20030528184335.3F5B776D49@mail.ossp.org>
Date: Wed, 28 May 2003 20:43:35 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   28-May-2003 20:43:34
  Branch: HEAD                             Handle: 2003052819433400

  Modified files:
    ossp-pkg/rc             rc_const.h

  Log:
    Back out change, trying to get the default regex for label defs
    correct.

  Summary:
    Revision    Changes     Path
    1.20        +1  -1      ossp-pkg/rc/rc_const.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_const.h
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 rc_const.h
  --- ossp-pkg/rc/rc_const.h	28 May 2003 18:27:21 -0000	1.19
  +++ ossp-pkg/rc/rc_const.h	28 May 2003 18:43:34 -0000	1.20
  @@ -125,7 +125,7 @@
   #define RC_DEF_ON     "1"                       /* Digital switch */
   #define RC_DEF_OFF    "0"                       /* Digital switch */
   #define RC_DEF_TMP    "/tmp"                    /* Temporary directory name */
  -#define RC_DEF_DEF    "^%(\\w+)[ \t]+(.*?)\\n(.*?)^$" /* Section definition */
  +#define RC_DEF_DEF    "^%(\\w+)[ \t]*(.*?)\\n(.*?)^$" /* Section definition */
   #define RC_DEF_NCF    "config"                  /* Config section name */
   #define RC_DEF_UIG    "-u"                      /* Section user string */
   #define RC_DEF_UID    -1                        /* Section user value  */
  @@ .

From ossp-cvs-owner@ossp.org  Wed May 28 20:58:17 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CC75276D08; Wed, 28 May 2003 20:58:16 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_config.c
Message-Id: <20030528185816.CC75276D08@mail.ossp.org>
Date: Wed, 28 May 2003 20:58:16 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   28-May-2003 20:58:16
  Branch: HEAD                             Handle: 2003052819581600

  Modified files:
    ossp-pkg/rc             rc_config.c

  Log:
    Fix info option.

  Summary:
    Revision    Changes     Path
    1.31        +5  -4      ossp-pkg/rc/rc_config.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_config.c
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 rc_config.c
  --- ossp-pkg/rc/rc_config.c	27 May 2003 11:53:12 -0000	1.30
  +++ ossp-pkg/rc/rc_config.c	28 May 2003 18:58:16 -0000	1.31
  @@ -200,6 +200,11 @@
           clioptParseargs();                  /* Command line args */
   /*        envoptParse(m_nLocks->pOpt);*/    /* Environment options   */
   /*        cnfoptParse(m_nLocks->pOpt);*/    /* Configfile options    */
  +
  +        /* Test if information is asked of the operating environment */
  +        if (configGetval(RC_INF_VAL)) { /* These lines must come after */
  +            configInfo();               /* option parsing is finished! */
  +        }
       }
       catch(Except)
           rethrow;
  @@ -258,10 +263,6 @@
           }
           else if (configGetval(RC_VER_VAL)) {
               fprintf(stdout, "OSSP rc %s\n", RC_VERSION);
  -            bStop = TRUE;
  -        }
  -        else if (configGetval(RC_INF_VAL)) {
  -            configInfo();
               bStop = TRUE;
           }
       }
  @@ .

From ossp-cvs-owner@ossp.org  Wed May 28 21:03:27 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D09F276D3E; Wed, 28 May 2003 21:03:26 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_anal.c rc_anal.h
Message-Id: <20030528190326.D09F276D3E@mail.ossp.org>
Date: Wed, 28 May 2003 21:03:26 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   28-May-2003 21:03:26
  Branch: HEAD                             Handle: 2003052820032500

  Modified files:
    ossp-pkg/rc             rc_anal.c
  Removed files:
    ossp-pkg/rc             rc_anal.h

  Log:
    Clean up analyser object, and remove some obsolete code.

  Summary:
    Revision    Changes     Path
    1.19        +1  -15     ossp-pkg/rc/rc_anal.c
    1.3         +0  -37     ossp-pkg/rc/rc_anal.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_anal.c
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 rc_anal.c
  --- ossp-pkg/rc/rc_anal.c	28 May 2003 15:09:29 -0000	1.18
  +++ ossp-pkg/rc/rc_anal.c	28 May 2003 19:03:25 -0000	1.19
  @@ -29,11 +29,11 @@
   
   #include <stdlib.h>
   #include <string.h>
  +#include <dirent.h>
   
   #include "rc.h"         /* Public interfaces        */
   #include "rc_const.h"   /* String constants         */
   #include "rc_config.h"  /* Configuration interface  */
  -#include "rc_anal.h"    /* Anal specific headers    */
   
   
   /************************************************
  @@ -161,20 +161,6 @@
           rethrow;
   
       return(RC_THROW(RC_OK));
  -}
  -
  -/***************************************************************
  -* int analFileselect(struct dirent *Direntry)                  *
  -* Calculate whether a directory entry belongs to a defined set *
  -***************************************************************/
  -int analFileselect(struct dirent *Direntry)
  -{
  -    if ((Direntry->d_name != NULL) && (strncmp(Direntry->d_name, "rc.", 3) == 0))
  -        return (TRUE);
  -    else if ((strcmp(Direntry->d_name, ".") == 0) || (strcmp(Direntry->d_name, "..") == 0))
  -        return (FALSE);
  -    else /* Catchall returns false for all not met set conditions */
  -        return (FALSE);
   }
   
   /************************************************
  @@ .
  rm -f ossp-pkg/rc/rc_anal.h <<'@@ .'
  Index: ossp-pkg/rc/rc_anal.h
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 29 11:26:23 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 34D9576D2D; Thu, 29 May 2003 11:26:23 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ac/ README TODO ac ac.bash ac.pod
Message-Id: <20030529092623.34D9576D2D@mail.ossp.org>
Date: Thu, 29 May 2003 11:26:23 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-May-2003 11:26:22
  Branch: HEAD                             Handle: 2003052910262100

  Added files:
    ossp-pkg/ac             README TODO ac ac.bash ac.pod

  Log:
    add the first cut OSSP ac to CVS -- the new login server solution

  Summary:
    Revision    Changes     Path
    1.1         +3  -0      ossp-pkg/ac/README
    1.1         +39 -0      ossp-pkg/ac/TODO
    1.1         +1457 -0    ossp-pkg/ac/ac
    1.1         +52 -0      ossp-pkg/ac/ac.bash
    1.1         +59 -0      ossp-pkg/ac/ac.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ac/README
  ============================================================================
  $ cvs diff -u -r0 -r1.1 README
  --- /dev/null	2003-05-29 11:26:22.000000000 +0200
  +++ README	2003-05-29 11:26:22.000000000 +0200
  @@ -0,0 +1,3 @@
  +
  +  AutoConnect
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ac/TODO
  ============================================================================
  $ cvs diff -u -r0 -r1.1 TODO
  --- /dev/null	2003-05-29 11:26:22.000000000 +0200
  +++ TODO	2003-05-29 11:26:22.000000000 +0200
  @@ -0,0 +1,39 @@
  +
  +- "lock" command for locking the session
  +
  +- "not" (!) implementing in grants
  +
  +- error on /DNS
  +ac: connection establishing
  +Use of uninitialized value in hash element at /u/rse/ac/src/ac line 1216.
  +Use of uninitialized value in concatenation (.) or string at /u/rse/ac/src/ac line 1216.
  +ac:ERROR: invalid login method "" 
  +ac:ERROR: Can't call method "delwin" on an undefined value 
  +
  +- support not in grants with "!xx"
  +- access levels/tags:
  +  grant { @gsoc[0] } { @is };
  +  grant { @gsoc[1] } { rse cschug };
  +- display order
  +  order { @is @gsoc } { @is };
  +  order { @gsoc @is } { @gsoc };
  +- switch user
  +  superuser { rse cschug };
  +  grant { SUPERUSER } { rse };
  +- who's online, last login, busy time, ...$ who
  +- options: -+include, -+shell$(cmd), -+overrideentry 
  +- remove special case of "hostname" and make this the first argument of login args
  +- shell-style $(cmd) einbauen (und dafuer $ENVs rauswerfen?)
  +- usage of #1 for backreferences in expected strings should be locally scoped?!
  +- more expect methods
  +
  +- SIGWINCH support
  +- provide last-login information
  +- option -g for starting in CUI and staying there
  +
  +- add ac.pod documentation
  +
  +- better code commenting
  +- better consistrency checks
  +- better error checking, especially line/col info on parse errors
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ac/ac
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ac
  --- /dev/null	2003-05-29 11:26:22.000000000 +0200
  +++ ac	2003-05-29 11:26:22.000000000 +0200
  @@ -0,0 +1,1457 @@
  +#!/usr/opkg/bin/perl -w
  +##
  +##  OSSP ac -- Auto Connection
  +##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003 Cable & Wireless Germany <http://www.cw.com/de>
  +##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +##
  +##  This file is part of OSSP ac, a tool for automated login
  +##  sessions which can be found at http://www.ossp.org/pkg/tool/ac/.
  +##
  +##  This program is free software; you can redistribute it and/or
  +##  modify it under the terms of the GNU General Public  License
  +##  as published by the Free Software Foundation; either version
  +##  2.0 of the License, or (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this file; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +##  USA, or contact The OSSP Project <http://www.ossp.org>
  +##
  +##  ac: program implementation (syntax: Perl 5.x)
  +##
  +
  +require 5.008;
  +use strict;
  +$|++;
  +
  +#   load a plethora of Perl modules
  +#   (this really requires OpenPKG because of
  +#   patches in perl-curses for Curses::UI!)
  +use IO;                   # from OpenPKG "perl"
  +use POSIX;                # from OpenPKG "perl"
  +use Getopt::Long;         # from OpenPKG "perl"
  +use Data::Dumper;         # from OpenPKG "perl"
  +use Parse::RecDescent;    # from OpenPKG "perl-parse"
  +#use Term::ReadLine;      # from OpenPKG "perl-term"   (loaded deferred)
  +#use Term::ReadLine::Gnu; # from OpenPKG "perl-term"   (loaded deferred)
  +#use Curses;              # from OpenPKG "perl-curses" (loaded deferred)
  +#use Curses::UI;          # from OpenPKG "perl-curses" (loaded deferred)
  +#use Expect;              # from OpenPKG "perl-sys"    (loaded deferred)
  +
  +#   configure optional debugging
  +$Data::Dumper::Purity = 1;
  +$Data::Dumper::Indent = 1;
  +$Data::Dumper::Terse  = 1;
  +
  +#   fixed program information
  +my $my = {
  +    prog_name     => "ac",
  +    prog_vers     => "2.0.0",
  +    prog_date     => "11-Apr-2003",
  +    prog_global   => "/u/rse/ac/src/config",
  +    prog_homedir  => "$ENV{HOME}/.ac",
  +    prog_config   => "$ENV{HOME}/.ac/config",
  +    prog_complete => "$ENV{HOME}/.ac/.complete",
  +    prog_history  => "$ENV{HOME}/.ac/.history",
  +    prog_grammar  => "$ENV{HOME}/.ac/.grammar",
  +    prog_tmpfile  => "$ENV{HOME}/.ac/.tmp.$$",
  +    user_name     => ($ENV{USER} || $ENV{LOGNAME} || "unknown"),
  +};
  +
  +##  _________________________________________________________________________
  +##
  +##                        Command Line Option Parsing
  +##  _________________________________________________________________________
  +##
  +
  +#   default command line options
  +my $opt = {
  +    version => 0,
  +    verbose => 0,
  +    debug   => 0,
  +    update  => 0,
  +    config  => "",
  +    help    => 0,
  +    define  => [],
  +};
  +
  +#   global exception handling support
  +$SIG{__DIE__} = sub {
  +    my ($err) = @_;
  +    $err =~ s|\s+at\s+.*||s if (not $opt->{verbose});
  +    print STDERR "$my->{prog_name}:ERROR: $err ". ($! ? "($!)" : "") . "\n";
  +    exit(1);
  +};
  +
  +#   parse command line options
  +Getopt::Long::Configure("bundling");
  +my %getopt_spec = (
  +    'V|version'  => \$opt->{version},
  +    'v|verbose'  => \$opt->{verbose},
  +    'd|debug'    => \$opt->{debug},
  +    'h|help'     => \$opt->{help},
  +    'u|update'   => \$opt->{update},
  +    'D|define=s' =>  $opt->{define},
  +    'c|config=s' => \$opt->{config},
  +);
  +my $result = GetOptions(%getopt_spec)
  +    || die "command line option parsing failed";
  +if ($opt->{help}) {
  +    print "usage: $my->{prog_name} [<options>] <hostname>\n" .
  +          "available options are:\n" .
  +          "  -v,--verbose           enable verbose run-time mode\n" .
  +          "  -u,--update            update Bash command completion cache\n" .
  +          "  -V,--version           print program version\n" .
  +          "  -h,--help              print out this usage page\n" .
  +          "  -D,--define NAME=VAL   set (and overwrite) variable definitions\n" .
  +          "  -c,--config FILE       read this configuration file only\n";
  +    exit(0);
  +}
  +if ($opt->{version}) {
  +    print "$my->{prog_name} $my->{prog_vers} ($my->{prog_date})\n";
  +    exit(0);
  +}
  +
  +##  _________________________________________________________________________
  +##
  +##                          Configuration Parsing
  +##  _________________________________________________________________________
  +##
  +
  +#   $cf = {
  +#       user => {
  +#           -order => [ rse, ... ],
  +#           rse => { realname => "...", description => ...  },
  +#           ...
  +#       },
  +#       group => {
  +#           -order => [ en, ... ],
  +#           en => { description => "...", members => [...] },
  +#           ...
  +#       },
  +#       host => {
  +#           -order => [ en1, ... ],
  +#           en1 => { hostname => "...", ... },
  +#           ...
  +#       },
  +#       domain => {
  +#           -order => [ en, ... ],
  +#           en => { description => "...", members => [...] },
  +#           ...
  +#       },
  +#       grant => [
  +#           [ [ "...", ... ], [ "...", ... ] ],
  +#           ...
  +#       ],
  +#       method => {
  +#           ssh => [ [], [], ... ],
  +#           ...
  +#       }
  +#   };
  +
  +#   prepare in-core configuration representation
  +use vars qw($cf);
  +$cf = {
  +    user   => { -order => [] },
  +    group  => { -order => [] },
  +    host   => { -order => [] },
  +    domain => { -order => [] },
  +    grant  => [],
  +    method => {}
  +};
  +
  +#   parsing utility function: read configuration file
  +sub config_load {
  +    my ($ctx, $filename) = @_;
  +
  +    if ($filename !~ m|^/|s) {
  +        #   make absolute out of relative path
  +        $filename = $ctx->{cwd}->[-1]."/".$filename;
  +        $filename = &path_canonicalize($filename);
  +    }
  +    my $io = new IO::File "<$filename"
  +        or die "cannot open configuration file \"$filename\"";
  +    my $config = '';
  +    $config .= $_ while (<$io>);
  +    $io->close;
  +    $config =~ s|^\s*#.*?$||mg;
  +    return $config;
  +}
  +
  +#   parsing utility function: expand a token
  +sub expand_token {
  +    my ($ctx, $token) = @_;
  +    $token =~ s/\$\{([a-zA-Z][a-zA-Z0-9_]*)\}/$ctx->{def}->{$1} || $ENV{$1}          || ''/sge;
  +    $token =~ s/\%\{([a-zA-Z][a-zA-Z0-9_]*)\}/$ctx->{def}->{$1} || $ctx->{env}->{$1} || ''/sge;
  +    $token =~ s/\@\{([^\}]+)\}/&base64_decode($1)/sge;
  +    $token =~ s/\\t/\t/sg;
  +    $token =~ s/\\r/\r/sg;
  +    $token =~ s/\\n/\n/sg;
  +    $token =~ s/\\c(.)/eval "\\c$1"/sge;
  +    return $token;
  +}
  +
  +#   the top-down parsing grammar itself
  +my $grammar = q[
  +    #   create local variable for holding parsing context
  +    { use vars qw($ctx); $ctx = ""; }
  +
  +    #   start rule (for explicit context init and EOF handling)
  +    start:             { $ctx = $arg[0]; }
  +                       <skip: '[ \t\r\n]*'>
  +                       config /^\Z/
  +                     | <error>
  +
  +    #   whole configuration
  +    config:            directive(s)
  +                     | <error>
  +
  +    #   single configuration directive
  +    directive:         include
  +                     | scope
  +                     | set
  +                     | user
  +                     | group
  +                     | host
  +                     | domain
  +                     | grant
  +                     | method
  +                     | ""
  +                     | <error>
  +
  +    #   directive: "set <var-name> <var-value>;"
  +    set:               "set" token token ";" {
  +                           $ctx->{env}->{$item[2]} = &::expand_token($ctx, $item[3]);
  +                       }
  +                     | <error>
  +
  +    #   directive: "include <filename>;"
  +    include:           "include" token ";" {
  +                           my $file = $item[2];
  +                           my $dir  = $file;
  +                           $dir =~ s|/[^/]+$||s;
  +                           $dir = $ctx->{cwd}->[-1]."/".$dir if ($dir !~ m|^/|s);
  +                           $dir = &::path_canonicalize($dir);
  +                           #$text = "scope \"$dir\" { " . &::config_load($ctx, $file) . "}; " . $text;
  +                           $text = &::config_load($ctx, $file) . $text;
  +                           Parse::RecDescent::LineCounter::resync($thisline);
  +                       }
  +                     | <error>
  +
  +    #   directive: "scope <dir> { ... };"
  +    scope:             "scope" token "{" {
  +                           push(@{$ctx->{cwd}}, $item[2]);
  +                       }
  +                       config {
  +                           pop(@{$ctx->{cwd}});
  +                       } "}" ";"
  +                     | <error>
  +
  +    #   directive: "user <username> <realname> <email-address>;"
  +    user:              "user" token token token ";" {
  +                           die "line $thisline (column $thiscolumn): " .
  +                               "user \"$item[2]\" already defined"
  +                               if (defined($ctx->{cf}->{user}->{$item[2]}));
  +                           push(@{$ctx->{cf}->{user}->{-order}}, $item[2]);
  +                           $ctx->{cf}->{user}->{$item[2]} = {
  +                               'realname' => $item[3],
  +                               'email'    => $item[4]
  +                           };
  +                       }
  +                     | <error>
  +
  +    #   directive: "group <groupname> <description> { [<member> ...] };"
  +    group:             "group" token token "{" token(s?) "}" ";" {
  +                           die "line $thisline (column $thiscolumn): " .
  +                               "group \"$item[2]\" already defined"
  +                               if (defined($ctx->{cf}->{group}->{$item[2]}));
  +                           push(@{$ctx->{cf}->{group}->{-order}}, $item[2]);
  +                           $ctx->{cf}->{group}->{$item[2]} = {
  +                               'description' => $item[3],
  +                               'members'     => $item[5]
  +                           };
  +                       }
  +                     | <error>
  +
  +    #   directive: "host <hostname> { ... };"
  +    host:              <rulevar: $param = {};>
  +                     | "host" token "{" host_param[$param](s) "}" ";" {
  +                           die "line $thisline (column $thiscolumn): " .
  +                               "host \"$item[2]\" already defined"
  +                               if (defined($ctx->{cf}->{host}->{$item[2]}));
  +                           push(@{$ctx->{cf}->{host}->{-order}}, $item[2]);
  +                           $ctx->{cf}->{host}->{$item[2]} = $param;
  +                       }
  +                     | <error>
  +    host_param:        /(hostname|purpose|system|platform|location)/ token ";" {
  +                           $arg[0]->{$item[1]} = $item[2];
  +                       }
  +                     | /(login|domain)/ token(s) ";" {
  +                           $arg[0]->{$item[1]} = $item[2];
  +                       }
  +                     | <error>
  +
  +    #   directive: "domain <domainname> <description> { [<member> ...] };"
  +    domain:            "domain" token token "{" token(s?) "}" ";" {
  +                           die "line $thisline (column $thiscolumn): " .
  +                               "domain \"$item[2]\" already defined"
  +                               if (defined($ctx->{cf}->{domain}->{$item[2]}));
  +                           push(@{$ctx->{cf}->{domain}->{-order}}, $item[2]);
  +                           $ctx->{cf}->{domain}->{$item[2]} = {
  +                               'description' => $item[3],
  +                               'members'     => $item[5]
  +                           };
  +                       }
  +                     | <error>
  +
  +    #   directive: "grant { [<host> ...] } { [<user> ...] };"
  +    grant:             "grant" "{" token(s) "}" "{" token(s) "}" ";" {
  +                           push(@{$ctx->{cf}->{grant}}, [ $item[3], $item[6] ]);
  +                       }
  +                     | <error>
  +
  +    #   directive: "method <methodname> { [...] };"
  +    method:            "method" token "{" script "}" ";" {
  +                           die "line $thisline (column $thiscolumn): " .
  +                               "method \"$item[2]\" already defined"
  +                               if (defined($ctx->{cf}->{method}->{$item[2]}));
  +                           $ctx->{cf}->{method}->{$item[2]} = $item[4];
  +                       }
  +                     | <error>
  +
  +    #   login script
  +    script:            command ";" script       { unshift(@{$item[3]}, $item[1]);
  +                                                  $return = $item[3]; }
  +                     | command                  { $return = $item[1]; }
  +                     | <error>
  +
  +    #   login script: scripting directives
  +    command:           "system"  token          { $return = [ $item[1], $item[2] ]; }
  +                     | "spawn"   token          { $return = [ $item[1], $item[2] ]; }
  +                     | "timeout" token          { $return = [ $item[1], $item[2] ]; }
  +                     | "send"    token          { $return = [ $item[1], $item[2] ]; }
  +                     | "expect"  expect_args    { $return = [ $item[1], $item[2] ]; }
  +                     | "sleep"   token          { $return = [ $item[1], $item[2] ]; }
  +                     | "repeat"                 { $return = [ $item[1]           ]; }
  +                     | "interact"               { $return = [ $item[1]           ]; }
  +                     | if_clause                { $return = $item[1];               }
  +                     | ""                       { $return = [                    ]; }
  +                     | <error>
  +
  +    #   login script: expect argument(s): "regex [ script [ regex script ... ]]"
  +    expect_args:       expect_arg_std(1..)      { $return = $item[1]; }
  +                     | expect_arg_abr           { $return = [ $item[1] ]; }
  +                     | <error>
  +    expect_arg_std:    regex "{" script "}"     { $return = [ $item[1], $item[3] ]; }
  +                     | <error>
  +    expect_arg_abr:    regex                    { $return = [ $item[1], [] ]; }
  +                     | <error>
  +
  +    #   if clause
  +    if_clause:         "if" "(" expr ")" "{" script "}" ("else" "{" script "}")(?) {
  +                           $return = [ $item[1], $item[3], $item[6], $item[10] ];
  +                       }
  +                     | <error>
  +
  +    #   boolean expression
  +    #   (clean and obvious, but for top-down parsing
  +    #   not usable version because of left-recursion)
  +    #expr:             "(" expr ")"                  { $return = $item[2]; }
  +    #                | /[!-]/ expr                   { $return = [ "op:$item[1]", $item[2]           ]; }
  +    #                | expr /[.*\/%+-]/ expr         { $return = [ "op:$item[2]", $item[1], $item[3] ]; }
  +    #                | expr /(==|!=|<|<=|>=|>)/ expr { $return = [ "op:$item[2]", $item[1], $item[3] ]; }
  +    #                | expr "=~" regex               { $return = [ "op:$item[2]", $item[1], $item[3] ]; }
  +    #                | token                         { $return = [ "tok",         $item[1]           ]; }
  +    #                | <error>
  +
  +    #   boolean expression
  +    #   (ugly and confusing, but usable version,
  +    #   resulted through left-recursion elemination)
  +    expr:              "(" expr ")"             { $return = $item[2]; }
  +                       term[$item[4]]           { $return = $item[5]; }
  +                     | /[!-]/ expr              { $return = [ "op:$item[1]", $item[2]          ]; }
  +                       term[$item[3]]           { $return = $item[4]; }
  +                     | token                    { $return = [ "tok", $item[1]                  ]; }
  +                       term[$item[2]]           { $return = $item[3]; }
  +                     | <error>
  +    term:              /[.*\/%+-]/ expr         { $return = [ "op:$item[1]", $arg[0], $item[2] ]; }
  +                       term[$item[3]]           { $return = $item[4]; }
  +                     | /(==|!=|<|<=|>=|>)/ expr { $return = [ "op:$item[1]", $arg[0], $item[2] ]; }
  +                       term[$item[3]]           { $return = $item[4]; }
  +                     | "=~" regex               { $return = [ "op:$item[1]", $arg[0], $item[2] ]; }
  +                       term[$item[3]]           { $return = $item[4]; }
  +                     | {1}                      { $return = $arg[0];  }
  +                     | <error>
  +
  +    #   regular expression token
  +    regex:             m{/((\\\\/|[^/])*)/}     { $return = &::expand_token($ctx, $1); }
  +                     | token                    { $return = quotemeta($item[1]); }
  +                     | <error>
  +
  +    #   plain text token
  +    token:             m/\"((\\\"|[^\"])*)\"/   { $return = &::expand_token($ctx, $1); }
  +                     | m/'((\\\\'|[^'])*)'/     { $return = &::expand_token($ctx, $1); }
  +                     | m/[^ \t\r\n;\{\}\(\)]+/  { $return = &::expand_token($ctx, $item[1]); }
  +                     | <error>
  +];
  +
  +#   create configuration parser
  +if ($opt->{debug}) {
  +    #$::RD_TRACE  = 1;
  +    $::RD_HINT   = 1;
  +    $::RD_ERRORS = 1;
  +    $::RD_WARN   = 1;
  +}
  +my $parser;
  +if (not $opt->{debug}) {
  +    #   speed up run-time processing by pre-compiling grammar
  +    if (! -f "$my->{prog_grammar}") {
  +        #   perform pre-compilation operation
  +        my $cwd = POSIX::getcwd();
  +        chdir($my->{prog_homedir});
  +        Parse::RecDescent->Precompile($grammar, "ac::grammar");
  +        my $io = new IO::File "<grammar.pm"
  +            or die "unable to read precompiled grammar";
  +        my $pm; { local $/ = undef; $pm = <$io>; }
  +        $io->close;
  +        unlink("grammar.pm");
  +        chdir($cwd);
  +
  +        #   fixup pre-compilation result (at least necessary for P::RD <= 1.93)
  +        $pm =~ s|(sub\s+new\s+\{\s+)my\s+(bless\()|$1$2|s;
  +        $pm =~ s|$|\n1;\n|s;
  +
  +        #   store pre-compilation result for reuse
  +        $io = new IO::File ">$my->{prog_grammar}"
  +            or die "unable to write pre-compiled grammar to \"$my->{prog_grammar}\"";
  +        $io->print($pm);
  +        $io->close;
  +    }
  +
  +    #   read pre-compiled grammar
  +    require "$my->{prog_grammar}";
  +    import ac::grammar;
  +    $parser = new ac::grammar;
  +}
  +else {
  +    #   slow approach: parse from scratch
  +    $parser = new Parse::RecDescent ($grammar)
  +        or die "unable to parse configuration parsing grammar";
  +}
  +
  +#   prepare parsing context
  +my $ctx = {};
  +$ctx->{cf}  = $cf;
  +$ctx->{cwd} = [ POSIX::getcwd() ];
  +$ctx->{env} = {};
  +$ctx->{def} = {};
  +foreach my $define (@{$opt->{define}}) {
  +    if ($define =~ m|^([a-zA-Z][a-zA-Z0-9_]*)(?:[=:](.*))?$|) {
  +        my ($name, $value) = ($1, $2);
  +        $value ||= '';
  +        $ctx->{def}->{$name} = $value;
  +    }
  +}
  +
  +#   on-the-fly generate top-level configuration
  +my $config = '';
  +if ($opt->{config} ne '') {
  +    #   explicitly supplied configuration file
  +    $config .= "include \"$opt->{config}\";";
  +}
  +else {
  +    #   implicitly supplied global and local configuration files
  +    if (-f $my->{prog_global}) {
  +        $config .= "include \"$my->{prog_global}\";";
  +    }
  +    if (-f $my->{prog_config}) {
  +        $config .= "include \"$my->{prog_config}\";";
  +    }
  +}
  +
  +#   recursively parse configuration
  +defined $parser->start($config, 1, $ctx)
  +    or die "failed to parse configuration directives";
  +
  +##  _________________________________________________________________________
  +##
  +##                       Configuration Post-Processing
  +##  _________________________________________________________________________
  +##
  +
  +#   expand group references in community group memberships configuration
  +sub expand_group {
  +    my ($name) = @_;
  +    my $members = {};
  +    foreach my $member (@{$cf->{group}->{$name}->{members}}) {
  +        if ($member =~ m|^\@(.+)$|s) {
  +            die "reference to unknown group \"$1\" in group \"$name\""
  +                if (not defined($cf->{group}->{$1}));
  +            my $M = &expand_group($1);
  +            map { $members->{$_} = 1 } (@{$M});
  +        }
  +        else {
  +            die "reference to unknown user \"$member\" in group \"$name\""
  +                if (not defined($cf->{user}->{$member}));
  +            $members->{$member} = 1;
  +        }
  +    }
  +    return [ keys(%{$members}) ];
  +}
  +foreach my $name (keys(%{$cf->{group}})) {
  +    next if ($name eq '-order');
  +    $cf->{group}->{$name}->{members} = &expand_group($name);
  +}
  +
  +#   extend domain memberships with reverse/per-host domain specification
  +foreach my $host (keys(%{$cf->{host}})) {
  +    next if ($host eq '-order');
  +    if (defined($cf->{host}->{$host}->{domain})) {
  +        foreach my $domain (@{$cf->{host}->{$host}->{domain}}) {
  +            die "unknown domain \"$domain\"" 
  +               if (not defined($cf->{domain}->{$domain}));
  +            push(@{$cf->{domain}->{$domain}->{members}}, $host);
  +        }
  +    }
  +}
  +
  +#   expand domain references in system domain memberships configuration
  +sub expand_domain {
  +    my ($name) = @_;
  +    my $members = {};
  +    foreach my $member (@{$cf->{domain}->{$name}->{members}}) {
  +        if ($member =~ m|^\@(.+)$|s) {
  +            die "reference to unknown domain \"$1\" in domain \"$name\""
  +                if (not defined($cf->{domain}->{$1}));
  +            my $M = &expand_domain($1);
  +            map { $members->{$_} = 1 } (@{$M});
  +        }
  +        else {
  +            die "reference to unknown host \"$member\" in domain \"$name\""
  +                if (not defined($cf->{host}->{$member}));
  +            $members->{$member} = 1;
  +        }
  +    }
  +    return [ keys(%{$members}) ];
  +}
  +foreach my $name (keys(%{$cf->{domain}})) {
  +    next if ($name eq '-order');
  +    $cf->{domain}->{$name}->{members} = &expand_domain($name);
  +}
  +
  +#   extend reverse/per-host domain specification with domain memberships
  +foreach my $host (keys(%{$cf->{host}})) {
  +    next if ($host eq '-order');
  +    if (not defined($cf->{host}->{$host}->{domain})) {
  +        $cf->{host}->{$host}->{domain} = [];
  +    }
  +    foreach my $domain (@{$cf->{domain}->{-order}}) {
  +        next if ($domain eq '-order');
  +        foreach my $member (@{$cf->{domain}->{$domain}->{members}}) {
  +            if ($member eq $host) {
  +                if (not grep { $_ eq $domain } @{$cf->{host}->{$host}->{domain}}) {
  +                    push(@{$cf->{host}->{$host}->{domain}}, $domain);
  +                }
  +            }
  +        }
  +    }
  +}
  +
  +#   expand group/domain references in access grant configuration
  +foreach my $grant (@{$cf->{grant}}) {
  +    $grant->[0] = [ map { &expand_host($_) } @{$grant->[0]} ];
  +    $grant->[1] = [ map { &expand_user($_) } @{$grant->[1]} ];
  +    sub expand_host {
  +        my ($host) = @_;
  +        my $tag = "";
  +        if ($host =~ m|^(.+)(\[[^\]]+\])$|s) {
  +            ($host, $tag) = ($1, $2);
  +        }
  +        if ($host =~ m|^~(.+)$|s) {
  +            #   regular expression match
  +            $host = $1;
  +            if ($host =~ m|^\@(.+)$|s) {
  +                my $regex = $1;
  +                my @hosts = ();
  +                foreach my $domain (keys(%{$cf->{domain}})) {
  +                    next if ($domain eq '-open');
  +                    if ($domain =~ m|$regex|s) {
  +                        foreach my $host (@{$cf->{domain}->{$domain}->{members}}) {
  +                            push(@hosts, $host.$tag);
  +                        }
  +                    }
  +                }
  +                die "no domains match regular expression \"$regex\""
  +                    if (@hosts == 0);
  +                return @hosts;
  +            }
  +            else {
  +                my $regex = $host;
  +                my @hosts = ();
  +                foreach my $host (keys(%{$cf->{host}})) {
  +                    next if ($host eq '-open');
  +                    if ($host =~ m|$regex|s) {
  +                        push(@hosts, $host.$tag);
  +                    }
  +                }
  +                die "no hosts match regular expression \"$regex\""
  +                    if (@hosts == 0);
  +                return @hosts;
  +            }
  +        }
  +        else {
  +            #   plain text match
  +            if ($host =~ m|^\@(.+)$|s) {
  +                my $domain = $1;
  +                die "unknown domain \"$domain\""
  +                    if (not defined($cf->{domain}->{$domain}));
  +                return map { $_.$tag } @{$cf->{domain}->{$domain}->{members}};
  +            }
  +            else {
  +                die "unknown host \"$host\""
  +                    if (not defined($cf->{host}->{$host}));
  +                return ($host.$tag);
  +            }
  +        }
  +    }
  +    sub expand_user {
  +        my ($user) = @_;
  +        my @user = ();
  +        if ($user =~ m|^\@(.+)$|s) {
  +            my $group = $1;
  +            die "unknown community group \"$group\""
  +                if (not defined($cf->{group}->{$group}));
  +            return @{$cf->{group}->{$group}->{members}};
  +        }
  +        else {
  +            die "unknown user \"$user\""
  +                if (not defined($cf->{user}->{$user}));
  +            return ($user);
  +        }
  +    }
  +}
  +
  +#   multiply out access control list
  +my $acl_by_user = {};
  +my $acl_by_host = {};
  +foreach my $grant (@{$cf->{grant}}) {
  +    my ($hosts, $users) = ($grant->[0], $grant->[1]);
  +    foreach my $host (@{$hosts}) {
  +        foreach my $user (@{$users}) {
  +            $acl_by_user->{$user} ||= {};
  +            $acl_by_user->{$user}->{$host} = 1;
  +            $acl_by_host->{$host} ||= {};
  +            $acl_by_host->{$host}->{$user} = 1;
  +        }
  +    }
  +}
  +
  +#   optional configuration debugging
  +#print Data::Dumper->Dump([$cf]);
  +#exit(0);
  +
  +##  _________________________________________________________________________
  +##
  +##                              Main Procedure
  +##  _________________________________________________________________________
  +##
  +
  +#   operation: update Bash command line completion cache
  +my $rc = 0;
  +if ($opt->{update}) {
  +    $rc = &do_update();
  +}
  +if (@ARGV == 0) {
  +    $rc = &do_cli();
  +}
  +elsif (@ARGV == 1) {
  +    $rc = &do_connect($ARGV[0]);
  +}
  +else {
  +    die "invalid number of arguments";
  +}
  +exit($rc);
  +
  +##  _________________________________________________________________________
  +##
  +##                           Utility Functions
  +##  _________________________________________________________________________
  +##
  +
  +#   canonicalize filesystem path
  +sub path_canonicalize {
  +    my ($path) = @_;
  +
  +    $path =~ s|/{2,}|/|sg;
  +    1 while ($path =~ s|/\./||s);
  +    1 while ($path =~ s|/[^/]+/\.\./|/|s);
  +    return $path;
  +}
  +
  +#   encode a string into Base64 chunk
  +sub base64_encode {
  +    my ($obj, $eol) = @_;
  +    my $res = '';
  +
  +    $eol = "\n" unless defined($eol);
  +    pos($obj) = 0;
  +    while ($obj =~ m/(.{1,45})/gs) {
  +        $res .= substr(pack('u', $1), 1);
  +        chop($res);
  +    }
  +    $res =~ tr/` -_/AA-Za-z0-9+\//;
  +    my $padding = (3 - length($obj) % 3) % 3;
  +    $res =~ s/.{$padding}$/'=' x $padding/e if $padding;
  +    $res =~ s/(.{1,64})/$1$eol/g if (length($eol) > 0);
  +    return $res;
  +}
  +
  +#   decode a string from a Base64 chunk
  +sub base64_decode {
  +    local($^W) = 0;
  +    my ($str) = @_;
  +    my $res = '';
  +
  +    $str =~ tr|A-Za-z0-9+=/||cd;
  +    die 'invalid length of Base64 chunk' if (length($str) % 4);
  +    $str =~ s/=+$//;
  +    $str =~ tr|A-Za-z0-9+/| -_|;
  +    while ($str =~ m/(.{1,60})/gs) {
  +        my $len = chr(32 + length($1)*3/4);
  +        $res .= unpack('u', $len.$1);
  +    }
  +    return $res;
  +}
  +
  +sub text_fit {
  +    my ($col, $str) = @_;
  +    if (length($str) > $col) {
  +        $str = substr($str, 0, $col);
  +    }
  +    return sprintf("%-${col}s", $str);
  +}
  +
  +sub text_trim {
  +    my ($col, $str) = @_;
  +    if (length($str) > $col) {
  +        $str = substr($str, 0, $col);
  +    }
  +    return $str;
  +}
  +
  +##  _________________________________________________________________________
  +##
  +##                Operation: Update Command Line Completion Cache
  +##  _________________________________________________________________________
  +##
  +
  +sub do_update {
  +    my $cache = '';
  +    #   command line options
  +    foreach my $opt (keys(%getopt_spec)) {
  +        if ($opt =~ m/^(.)\|(.*)$/s) {
  +            $cache .= "option -$1\n";
  +            $cache .= "option --$2\n";
  +        }
  +    }
  +    #   hostnames
  +    foreach my $host (@{$cf->{host}->{-order}}) {
  +        if ($acl_by_user->{$my->{user_name}}->{$host}) {
  +            $cache .= "host ".$cf->{host}->{$host}->{hostname}."\n";
  +        }
  +    }
  +    my $io = new IO::File ">$my->{prog_complete}"
  +        or die "cannot write to completion cache file \"$my->{prog_complete}\"";
  +    $io->print($cache);
  +    $io->close;
  +    exit(0);
  +}
  +
  +##  _________________________________________________________________________
  +##
  +##                User Interface: Command Line Interface (CLI)
  +##  _________________________________________________________________________
  +##
  +
  +sub do_cli {
  +    my $user = $cf->{user}->{$my->{user_name}}
  +        or die "unknown user \"$my->{user_name}\"";
  +
  +    # FIXME
  +    print "  __ _  ___ \n" .
  +          " / _\` |/ __| Welcome ".$user->{realname}." <".$user->{email}.">\n" .
  +          "| (_| | (__  to the Cable & Wireless Auto Connect (AC) frontend\n" .
  +          " \\__,_|\\___| shell running on server ac.de.cw.net\n" .
  +          "\n" .
  +          "In case of any questions or problems please contact:\n" .
  +          "Internet Services, Ralf S. Engelschall <rse\@de.cw.com>\n" .
  +          "\n";
  +
  +    #   deferred loading of Term::ReadLine::Gnu
  +    eval {
  +        local $^W = 0;
  +        use Term::ReadLine;
  +        use Term::ReadLine::Gnu;
  +    };
  +
  +    my $rl = new Term::ReadLine $my->{prog_name};
  +    my $out = $rl->OUT || \*STDOUT;
  +    my $prompt = $my->{user_name}."@".$my->{prog_name}."> ";
  +    my $input;
  +    $rl->ornaments("md,me,,");
  +    $rl->MinLine(undef);
  +    $rl->read_history($my->{prog_history});
  +    my $rla = $rl->Attribs;
  +    $rla->{completion_function} = sub {
  +        my ($text, $line, $start) = @_;
  +        my @r = ();
  +        if ($start == 0) {
  +            @r = qw(info connect quit);
  +        }
  +        elsif ($line =~ m|^\s*i(n(f(o?)?)?)?\s+\S*$|s) {
  +            @r = map { $cf->{host}->{$_}->{hostname} } 
  +                 keys(%{$acl_by_user->{$my->{user_name}}});
  +        }
  +        elsif ($line =~ m|^\s*c(o(n(n(e(ct?)?)?)?)?)?\s+\S*$|s) {
  +            @r = map { $cf->{host}->{$_}->{hostname} } 
  +                 keys(%{$acl_by_user->{$my->{user_name}}});
  +        }
  +        return @r;
  +    };
  +    while (defined ($input = $rl->readline($prompt))) {
  +        if ($input =~ m|^\s*q(u(it?)?)?\s*$|s) {
  +            last;
  +        }
  +        elsif ($input =~ m|^\s*i(n(f(o?)?)?)?|s) {
  +            if ($input =~ m|^\s*\S+\s*$|s) {
  +                my $rc = &do_info("*");
  +            }
  +            elsif ($input =~ m|^\s*\S+\s+(\S+)\s*$|s) {
  +                my $rc = &do_info($1);
  +            }
  +            else {
  +                print $out $my->{prog_name}.":ERROR: invalid arguments on 'info' command\n";
  +            }
  +        }
  +        elsif ($input =~ m|^\s*c(o(n(n(e(ct?)?)?)?)?)?|s) {
  +            if ($input =~ m|^\s*\S+\s*$|s) {
  +                my $rc = &do_connect("*");
  +            }
  +            elsif ($input =~ m|^\s*\S+\s+(\S+)\s*$|s) {
  +                my $rc = &do_connect($1);
  +            }
  +            else {
  +                print $out $my->{prog_name}.":ERROR: invalid arguments on 'connect' command\n";
  +            }
  +        }
  +        elsif ($input =~ m/^\s*\?\s*$/s) {
  +            print $out
  +                "info <hostname> ......... output summary information\n" .
  +                "connect <hostname> ...... connect to a particular host\n" .
  +                "quit .................... quit this session\n";
  +        }
  +        elsif ($input eq '') {
  +            #   no operation
  +        }
  +        else {
  +            print $out $my->{prog_name}.":ERROR: invalid command (press '?' for help)\n";
  +        }
  +        $rl->addhistory($input) if ($input !~ m/^\S+$/);
  +    }
  +    print $out "\n" if (not defined($input));
  +    $rl->write_history($my->{prog_history});
  +    return 0;
  +}
  +
  +##  _________________________________________________________________________
  +##
  +##                User Interface: Console User Interface (CUI)
  +##  _________________________________________________________________________
  +##
  +
  +sub do_cui {
  +    my (@hosts) = @_;
  +
  +    #   deferred loading of Curses::UI
  +    if (not defined($Curses::VERSION) and not defined($Curses::UI::VERSION)) {
  +        eval {
  +            local $^W = 0;
  +            use Curses;
  +            use Curses::UI;
  +        };
  +    }
  +
  +    #   create the CUI root object
  +    my $cui = new Curses::UI (
  +        -clear_on_exit => 0,
  +        -debug         => 0
  +    );
  +    my $W = {};
  +
  +    #   determine width of screen
  +    my $max_width = $cui->width();
  +    die "screen width smaller than 80 characters" if ($max_width < 80);
  +    my $cols = [["p", 2], ["s", 22], ["p", 1], ["s", 13], ["p", 1],
  +                ["s", 12], ["p", 1], ["s", 12], ["p", 1], ["s", 13], ["p", 2]];
  +    my $width = 0;
  +    foreach my $col (@{$cols}) {
  +        $width += $col->[1];
  +    }
  +    my $i = 0;
  +    while ($width < $max_width) {
  +        while ($cols->[$i]->[0] eq 'p') {
  +            $i = (($i + 1) % ($#{$cols}+1));
  +        }
  +        $cols->[$i]->[1]++;
  +        $width++;
  +        $i = (($i + 1) % ($#{$cols}+1));
  +    }
  +    my $fmt = "";
  +    foreach my $col (@{$cols}) {
  +        if ($col->[0] eq 'p') {
  +            $fmt .= (" " x ($col->[1]));
  +        }
  +        else {
  +            $fmt .= "%-". $col->[1] . "s";
  +        }
  +    }
  +
  +    #   determine host list
  +    my $list_values = [];
  +    my $list_labels = {};
  +    my $domains = $cf->{domain}->{-order};
  +    $i = 0;
  +    foreach my $domain (@{$domains}) {
  +        my $headed = 0;
  +        my $hosts = $cf->{host}->{-order};
  +        foreach my $host (@{$hosts}) {
  +            if ((grep { $_ eq $cf->{host}->{$host}->{hostname} } @hosts) == 1
  +                and $cf->{host}->{$host}->{domain}->[0] eq $domain) {
  +                if (not $headed) {
  +                    push(@{$list_values}, "::$i");
  +                    $list_labels->{"::$i"} = "";
  +                    $i++;
  +                    push(@{$list_values}, "::$i");
  +                    $list_labels->{"::$i"} = "  <bold>".$cf->{domain}->{$domain}->{description}."</bold>";
  +                    $i++;
  +                    $headed = 1;
  +                }
  +                my $label = sprintf($fmt, 
  +                    &text_trim($cols->[1]->[1], $cf->{host}->{$host}->{'hostname'}),
  +                    &text_trim($cols->[3]->[1], $cf->{host}->{$host}->{'purpose'}),
  +                    &text_trim($cols->[5]->[1], $cf->{host}->{$host}->{'system'}),
  +                    &text_trim($cols->[7]->[1], $cf->{host}->{$host}->{'platform'}),
  +                    &text_trim($cols->[9]->[1], $cf->{host}->{$host}->{'location'}),
  +                    $cf->{host}->{$host}->{'hostname'});
  +                push(@{$list_values}, $cf->{host}->{$host});
  +                $list_labels->{$cf->{host}->{$host}} = $label;
  +            }
  +        }
  +    }
  +
  +    #   add main full-size window
  +    $W->{main} = $cui->add(
  +        'main', 'Window',
  +        -title        => "",
  +        -border       => 0,
  +        -padtop       => 0,
  +        -padbottom    => 0,
  +        -ipad         => 0,
  +        -width        => -1,
  +        -height       => -1,
  +    );
  +
  +    #   add header line
  +    my $header = sprintf($fmt, 
  +        "Hostname", "Purpose", "System", "Platform", "Location"
  +    );
  +    $W->{header} = $W->{main}->add(
  +        'header', 'Label',
  +        -y             => 0,
  +        -x             => 0,
  +        -width         => -1,
  +        -height        => 1,
  +        -border        => 0,
  +        -reverse       => 1,
  +        -paddingspaces => 1,
  +        -text          => $header,
  +    );
  +
  +    #   add scrolling list
  +    $W->{list} = $W->{main}->add(
  +        'list', 'Listbox',
  +        -y          => 1,
  +        -x          => 0,
  +        -width      => $W->{main}->width,
  +        -height     => $W->{main}->height - 2,
  +        -border     => 0,
  +        -values     => $list_values,
  +        -labels     => $list_labels,
  +        -multi      => 0,
  +        -title      => "",
  +        -vscrollbar => 0,
  +        -htmltext   => 1,
  +    );
  +
  +    #   add footer line
  +    my $footer = sprintf($fmt, 
  +        "Hostname", "Purpose", "System", "Platform", "Location"
  +    );
  +    $W->{footer} = $W->{main}->add(
  +        'footer', 'Label',
  +        -y             => -1,
  +        -x             => 0,
  +        -width         => -1,
  +        -height        => 1,
  +        -text          => $footer,
  +        -border        => 0,
  +        -reverse       => 1,
  +        -paddingspaces => 1
  +    );
  +
  +    #   overwrite Curses::UI::Listbox key bindings
  +    #   to provide skipped plain-text list items
  +    $W->{list}->set_binding(sub {
  +        my $w = shift;
  +        $w->do_routine("option-prevpage");
  +        $w->layout_content;
  +        while ($w->get_active_value() =~ m|^::|) {
  +            $w->do_routine("option-next");
  +        }
  +    }, KEY_PPAGE());
  +    $W->{list}->set_binding(sub {
  +        my $w = shift;
  +        $w->do_routine("option-nextpage");
  +        $w->layout_content;
  +        while ($w->get_active_value() =~ m|^::|) {
  +            $w->do_routine("option-prev");
  +        }
  +    }, KEY_NPAGE());
  +    $W->{list}->set_binding(sub {
  +        my $w = shift;
  +        my $n = 0;
  +        my $y = $w->{-ypos};
  +        return if ($y <= 0);
  +        $y--, $n++;
  +        $y--, $n++ while ($y > 0 and $w->{-values}->[$y] =~ m|^::|);
  +        $y++, $n-- while ($w->{-values}->[$y] =~ m|^::|);
  +        $w->do_routine("option-prev") while ($n-- > 0);
  +    }, KEY_UP());
  +    $W->{list}->set_binding(sub {
  +        my $w = shift;
  +        my $n = 0;
  +        my $y = $w->{-ypos};
  +        return if ($y >= $w->{-max_selected});
  +        $y++, $n++;
  +        $y++, $n++ while ($y < $w->{-max_selected} and $w->{-values}->[$y] =~ m|^::|);
  +        $y--, $n-- while ($w->{-values}->[$y] =~ m|^::|);
  +        $w->do_routine("option-next") while ($n-- > 0);
  +    }, KEY_DOWN());
  +
  +    #   CUI termination indicator
  +    my $cui_exit = 0;
  +
  +    #   terminate with "q" and LEFT
  +    $cui->set_binding(sub {
  +        $cui_exit = 2;
  +    }, "q");
  +    $cui->set_binding(sub {
  +        $cui_exit = 2;
  +    }, KEY_LEFT());
  +
  +    #   select entry on RETURN and RIGHT
  +    $W->{list}->set_binding(sub {
  +        my $w = shift;
  +        $w->do_routine("option-select");
  +        $cui_exit = 1;
  +    }, KEY_ENTER());
  +    $W->{list}->set_binding(sub {
  +        my $w = shift;
  +        $w->do_routine("option-select");
  +        $cui_exit = 1;
  +    }, KEY_RIGHT());
  +
  +    #   show info box on SPACE
  +    $W->{list}->set_binding(sub {
  +        my $w = shift;
  +        my $host = $w->get_active_value() || return;
  +
  +        my $lastlogin = "NOW";
  +        my $text = sprintf(
  +            " Hostname: %s Purpose:    %s \n" .
  +            " Platform: %s Location:   %s \n" .
  +            " System:   %s Last Login: %s ",
  +            &text_fit(22, $host->{'hostname'}),
  +            &text_fit(22, $host->{'purpose'}),
  +            &text_fit(22, $host->{'platform'}),
  +            &text_fit(22, $host->{'location'}),
  +            &text_fit(22, $host->{'system'}),
  +            &text_fit(22, $lastlogin));
  +        my $box = $W->{main}->add(
  +            'box', 'Dialog::Status',
  +            -message => $text
  +        );
  +        $box->draw;
  +        $box->focus;
  +        $W->{main}->delete('box');
  +    }, " ");
  +
  +    #   hack: inject DOWN and UP key sequence in order to get rid of
  +    #   special case when first entry is a skipped plain-text entry.
  +    $W->{list}->process_bindings(KEY_DOWN());
  +    $W->{list}->process_bindings(KEY_UP());
  +
  +    #   now perform the CUI main loop
  +    $cui->focus(undef, 1);
  +    $cui->draw;
  +    $cui->do_one_event() until ($cui_exit);
  +
  +    #   determine result
  +    my $host = ($cui_exit == 1 ? $W->{list}->get_active_value() : undef);
  +    $host = $host->{hostname} if (defined($host) and ref($host));
  +
  +    #   shutdown CUI
  +    $cui->DESTROY;
  +    undef $cui;
  +
  +    #   install program termination preparation sequence where stdout is
  +    #   redirected to get rid of the nasty (screen clearing) after-endwin()
  +    #   NCurses program termination cleanup sequence (which cannot be
  +    #   disabled from Perl as it looks).
  +    END {
  +        my $fd_stdout_new = POSIX::open("/dev/null", O_RDWR) || die;
  +        my $fd_stdout_old = POSIX::dup(fileno(STDOUT));
  +        dup2($fd_stdout_new, fileno(STDOUT));
  +    }
  +
  +    return $host;
  +}
  +
  +##  _________________________________________________________________________
  +##
  +##                Operation: Display Host Information
  +##  _________________________________________________________________________
  +##
  +
  +sub do_info {
  +    my ($hostname) = @_;
  +
  +    #   create hostname regex out of hostname pattern
  +    my $re_hostname = $hostname;
  +    $re_hostname =~ s|([.\$\@\%])|\\$1|sg;
  +    $re_hostname =~ s|\*|.*|s;
  +    $re_hostname =~ s|\?|.|s;
  +
  +    #   iterate over all hosts in configuration order
  +    my $first = 1;
  +    foreach my $host (@{$cf->{host}->{-order}}) {
  +        my $host = $cf->{host}->{$host};
  +        if ($host->{hostname} =~ m/^.*${re_hostname}.*$/) {
  +            #   FIXME
  +            my $lastlogin = "NOW";
  +            print "\n" if (not $first);
  +            $first = 0;
  +            printf(" Hostname: %s Purpose:    %s\n" .
  +                   " Platform: %s Location:   %s\n" .
  +                   " System:   %s Last Login: %s\n",
  +                   &text_fit(22, $host->{'hostname'}),
  +                   &text_fit(22, $host->{'purpose'}),
  +                   &text_fit(22, $host->{'platform'}),
  +                   &text_fit(22, $host->{'location'}),
  +                   &text_fit(22, $host->{'system'}),
  +                   &text_fit(22, $lastlogin));
  +        }
  +    }
  +    return 0;
  +}
  +
  +##  _________________________________________________________________________
  +##
  +##                    Operation: Connect to a Host
  +##  _________________________________________________________________________
  +##
  +
  +#   operation: connect to a host
  +sub do_connect {
  +    my ($host) = @_;
  +
  +    #   expand hostname via full hostname list
  +    my @hosts = map { $cf->{host}->{$_}->{hostname} }
  +                keys(%{$acl_by_user->{$my->{user_name}}});
  +    my $re_host = $host;
  +    $re_host =~ s|([.\$\@\%])|\\$1|sg;
  +    $re_host =~ s|\*|.*|s;
  +    $re_host =~ s|\?|.|s;
  +    @hosts = grep { m/^.*${re_host}.*$/ } @hosts;
  +
  +    my $rc = 0;
  +    if (@hosts == 0) {
  +        die "host \"".$host."\" not known";
  +    }
  +    elsif (@hosts == 1) {
  +        $rc = &do_connect_host($hosts[0]);
  +    }
  +    else {
  +        my $hostname = &do_cui(@hosts);
  +        if (defined($hostname)) {
  +            $rc = &do_connect_host($hostname);
  +        }
  +    }
  +    return $rc;
  +}
  +
  +sub do_connect_host {
  +    my ($hostname) = @_;
  +
  +    my $host = undef;
  +    foreach my $h (keys(%{$cf->{host}})) {
  +        next if ($h eq '-order');
  +        if ($cf->{host}->{$h}->{hostname} eq $hostname) {
  +            $host = $cf->{host}->{$h};
  +            last;
  +        }
  +    }
  +
  +    #   FIXME
  +    my $lastlogin = "NOW";
  +
  +    #   FIXME? Really?
  +    if ($opt->{verbose}) {
  +        &do_info($host->{'hostname'});
  +    }
  +
  +    #   deferred loading of Term::ReadLine::Gnu
  +    if (not defined($Expect::VERSION)) {
  +        eval {
  +            local $^W = 0;
  +            use Expect;
  +        };
  +    };
  +
  +    print "$my->{prog_name}: connection establishing\n";
  +
  +    #   prepare script execution context
  +    my $login = $host->{login};
  +    my $scr = $cf->{method}->{$login->[0]}
  +        or die "invalid login method \"$login->[0]\"";
  +    my $ctx = {};
  +    $ctx->{exp} = new Expect;
  +    $ctx->{exp}->raw_pty(0);
  +    $ctx->{timeout} = [ 10 ];
  +    $ctx->{level} = 0;
  +    $ctx->{args_by_pos} = [ $login->[0] ];
  +    $ctx->{args_by_name} = {};
  +    $ctx->{backref} = [ '' ];
  +    $ctx->{spawned} = 0;
  +    my $i = 1;
  +    $ctx->{args_by_name}->{hostname} = $host->{hostname}; # special
  +    foreach my $arg (@{$login}[1..$#{$login}]) {
  +        if ($arg =~ m|^([a-zA-Z][a-zA-Z0-9_]*)=(.*)$|) {
  +            $ctx->{args_by_name}->{$1} = $2;
  +        }
  +        else {
  +            $ctx->{args_by_pos}->[$i++] = $arg;
  +        }
  +    };
  +
  +    #   perform script execution
  +    &execute_script($ctx, $scr);
  +
  +    #   shutdown script execution and destroy context
  +    $ctx->{exp}->soft_close() if ($ctx->{spawned});
  +    print "\r"; # fix terminal cursor after scripting
  +    undef $ctx->{exp};
  +
  +    print "$my->{prog_name}: connection droppped\n";
  +
  +    return 0;
  +}
  +
  +##  _________________________________________________________________________
  +##
  +##                   Operation: Execute Send/Expect Script
  +##  _________________________________________________________________________
  +##
  +
  +#   expand an $X argument
  +sub expand_arg {
  +    my ($ctx, $token) = @_;
  +    $token =~ s/\#(\d+)/$ctx->{backref}->[$1] || ''/sge;
  +    $token =~ s/\#\{(\d+)\}/$ctx->{backref}->[$1] || ''/sge;
  +
  +    $token =~ s/\$(\d+)/$ctx->{args_by_pos}->[$1] || ''/sge;
  +    $token =~ s/\$\{(\d+)\}/$ctx->{args_by_pos}->[$1] || ''/sge;
  +    $token =~ s/\&\{([a-zA-Z][a-zA-Z0-9_]*)\}/$ctx->{args_by_name}->{$1} || ''/sge;
  +    return $token;
  +}
  +
  +#   execute send/expect script
  +sub execute_script {
  +    my ($ctx, $scr) = @_;
  +
  +    #   execute all commands in sequence
  +    foreach my $cmd (@{$scr}) {
  +        if ($cmd->[0] eq 'system') {
  +            #   execute a command synchronous
  +            my $shcmd = &expand_arg($ctx, $cmd->[1]);
  +            my $rc = system($shcmd);
  +            if ($rc != 0) {
  +                die "failed to spawn sychronous command: \"$shcmd\": $!";
  +            }
  +        }
  +        elsif ($cmd->[0] eq 'spawn') {
  +            #   execute a command asynchronous
  +            my $shcmd = &expand_arg($ctx, $cmd->[1]);
  +            $ctx->{exp}->spawn($shcmd)
  +                or die "failed to spawn asynchronous command \"$shcmd\": $!";
  +            $ctx->{spawned} = 1;
  +        }
  +        elsif ($cmd->[0] eq 'timeout') {
  +            #   set timeout (locally scoped)
  +            my $timeout = &expand_arg($ctx, $cmd->[1]);
  +            $timeout =~ m|^\d+$|
  +                or die "invalid timeout \"$timeout\"";
  +            $ctx->{timeout}->[-1] = $timeout;
  +        }
  +        elsif ($cmd->[0] eq 'send') {
  +            #   send a string
  +            my $string = &expand_arg($ctx, $cmd->[1]);
  +            $ctx->{exp}->send($string);
  +        }
  +        elsif ($cmd->[0] eq 'expect') {
  +            #   expect one ore more strings
  +
  +            #   open new scope
  +            push(@{$ctx->{timeout}}, $ctx->{timeout}->[-1]);
  +            $ctx->{level}++;
  +
  +            #   assemble expect list
  +            my @expected = ();
  +            sub expect_cb {
  +                my ($exp, $ctx, $scr) = @_;
  +                return '' if (@{$scr} == 0);   # short circuiting
  +                $ctx->{backref} = [ '', $exp->matchlist() ];
  +                return &::execute_script($ctx, $scr); # recursion(!)
  +            };
  +            foreach my $rule (@{$cmd->[1]}) {
  +                my $regex = &expand_arg($ctx, $rule->[0]);
  +                my $expect = [
  +                    "-re", $regex,
  +                    \&expect_cb, $ctx, $rule->[1]
  +                ];
  +                push(@expected, $expect);
  +            }
  +
  +            #   perform expect operation
  +            $ctx->{exp}->expect($ctx->{timeout}->[-1], @expected);
  +
  +            #   close current scope
  +            pop(@{$ctx->{timeout}});
  +            $ctx->{level}--;
  +        }
  +        elsif ($cmd->[0] eq 'sleep') {
  +            #   sleep for a while
  +            my $num = &expand_arg($ctx, $cmd->[1]);
  +            die "non-numeric argument to command 'sleep'"
  +                if ($num !~ m/^(\d+|\d*\.\d+)$/);
  +            select(undef, undef, undef, $num);
  +        }
  +        elsif ($cmd->[0] eq 'repeat') {
  +            #   indicate to Expect module the repeating of
  +            #   current 'expect' operation (see Expect manpage)
  +            if ($ctx->{level} == 0) {
  +                die "command 'repeat' not allowed at outmost level";
  +            }
  +            return "exp_continue";
  +        }
  +        elsif ($cmd->[0] eq 'interact') {
  +            #   enter interactive session until EOF
  +            if ($ctx->{level} != 0) {
  +                die "command 'interact' allowed at outmost level only";
  +            }
  +            $ctx->{exp}->interact();
  +        }
  +        elsif ($cmd->[0] eq 'if') {
  +            my ($expr, $true, $false) = ($cmd->[1], $cmd->[2], $cmd->[3]);
  +            my $rv = &execute_expr($ctx, $expr);
  +            if ($rv) {
  +                #   open new scope
  +                push(@{$ctx->{timeout}}, $ctx->{timeout}->[-1]);
  +                $ctx->{level}++;
  +
  +                #   perform true clause
  +                &execute_script($ctx, $true);
  +
  +                #   close current scope
  +                pop(@{$ctx->{timeout}});
  +                $ctx->{level}--;
  +            }
  +            if (not $rv and defined($false)) {
  +                #   open new scope
  +                push(@{$ctx->{timeout}}, $ctx->{timeout}->[-1]);
  +                $ctx->{level}++;
  +
  +                #   perform true clause
  +                &execute_script($ctx, $false);
  +
  +                #   close current scope
  +                pop(@{$ctx->{timeout}});
  +                $ctx->{level}--;
  +            }
  +        }
  +        else {
  +            die "invalid command \"$cmd->[0]\"";
  +        }
  +    }
  +    return '';
  +}
  +
  +sub execute_expr {
  +    my ($ctx, $expr) = @_;
  +
  +    my $rv = '';
  +    if ($expr->[0] eq 'tok') {
  +        #   simple plain-text token
  +        $rv = &expand_arg($ctx, $expr->[1]);
  +    }
  +    elsif ($expr->[0] =~ m/^op:([.*\/%+-]|==|!=|<|<=|>=|>)$/) {
  +        #   standard binary operator expression
  +        my ($op, $e1, $e2) = ($1, $expr->[1], $expr->[2]);
  +        $e1 = &execute_expr($ctx, $e1);
  +        $e2 = &execute_expr($ctx, $e2);
  +        if (    $op =~ m/^(==|!=|<|<=|>=|>)$/
  +            and ($e1 !~ m|^\d+$| or $e2 !~ m|^\d+$|)) {
  +            #   use string comparison operators except
  +            #   if both operands are really numerical
  +            my %op_map = (qw(== eq  != ne  < lt  <= le  > gt  >= ge));
  +            $op = $op_map{$op};
  +        }
  +        eval "\$rv = (\$e1 $op \$e2);";
  +    }
  +    elsif ($expr->[0] =~ m/^op:(=~)$/) {
  +        #   pattern matching binary operator expression
  +        my ($op, $e1, $re) = ($1, $expr->[1], $expr->[2]);
  +        $e1 = &execute_expr($ctx, $e1);
  +        $re = &expand_arg($ctx, $re);
  +        eval "\$rv = (\$e1 $op m/\$re/);";
  +    }
  +    elsif ($expr->[0] =~ m/^op:([!-])$/) {
  +        #   standard unary operator expression
  +        my ($op, $e1) = ($1, $expr->[1]);
  +        $e1 = &execute_expr($ctx, $e1);
  +        $op = '!' if ($op eq '-' and $e1 !~ m|^\d+$|);
  +        $e1 = ($e1 =~ m|^\s*$|s ? 0 : 1) if ($op eq '!');
  +        eval "\$rv = ($op \$e1);";
  +    }
  +    else {
  +        die "invalid expression operator \"$expr->[0]\"";
  +    }
  +    return $rv;
  +}
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ac/ac.bash
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ac.bash
  --- /dev/null	2003-05-29 11:26:22.000000000 +0200
  +++ ac.bash	2003-05-29 11:26:22.000000000 +0200
  @@ -0,0 +1,52 @@
  +##
  +##  OSSP ac -- Auto Connection
  +##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/> 
  +##  Copyright (c) 2003 Cable & Wireless Germany <http://www.cw.com/de> 
  +##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com> 
  +##
  +##  This file is part of OSSP ac, a tool for automated login
  +##  sessions which can be found at http://www.ossp.org/pkg/tool/ac/.
  +##
  +##  This program is free software; you can redistribute it and/or
  +##  modify it under the terms of the GNU General Public  License
  +##  as published by the Free Software Foundation; either version
  +##  2.0 of the License, or (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this file; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +##  USA, or contact The OSSP Project <http://www.ossp.org>
  +##
  +##  ac.bash: GNU Bash hooks (syntax: Bash 2.x)
  +##
  +
  +#   command line completion hook function
  +ac_complete () {
  +    #   determine current context
  +    local arg_pos="$COMP_CWORD"
  +    local arg_cur="${COMP_WORDS[COMP_CWORD]}"
  +    local arg_prev="${COMP_WORDS[COMP_CWORD-1]}"
  +
  +    #   initialize reply
  +    COMPREPLY=()
  +
  +    #   create cache file if still not existing
  +    if [ ! -f $HOME/.ac/.complete ]; then
  +        command ac --update
  +    fi
  +
  +    #   complete ac command line arguments
  +    case "$arg_cur" in
  +        -* ) COMPREPLY=($(compgen -W '$(egrep -- "^option" $HOME/.ac/.complete | sed -e "s;^[^ ]* ;;")' -- "$arg_cur")) ;;
  +        *  ) COMPREPLY=($(compgen -W '$(egrep -- "^host"   $HOME/.ac/.complete | sed -e "s;^[^ ]* ;;")' -- "$arg_cur")) ;;
  +    esac
  +}
  +
  +#   hook function into ac command line completion sequence
  +complete -F ac_complete ac
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ac/ac.pod
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ac.pod
  --- /dev/null	2003-05-29 11:26:22.000000000 +0200
  +++ ac.pod	2003-05-29 11:26:22.000000000 +0200
  @@ -0,0 +1,59 @@
  +##
  +##  OSSP ac -- Auto Connection
  +##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/> 
  +##  Copyright (c) 2003 Cable & Wireless Germany <http://www.cw.com/de> 
  +##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com> 
  +##
  +##  This file is part of OSSP ac, a tool for automated login
  +##  sessions which can be found at http://www.ossp.org/pkg/tool/ac/.
  +##
  +##  This program is free software; you can redistribute it and/or
  +##  modify it under the terms of the GNU General Public  License
  +##  as published by the Free Software Foundation; either version
  +##  2.0 of the License, or (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this file; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +##  USA, or contact The OSSP Project <http://www.ossp.org>
  +##
  +##  ac.pod: Unix manual page (syntax: Perl 5.x POD)
  +##
  +
  +=pod
  +
  +=head1 NAME
  +
  +B<OSSP ac> -- Auto Connection
  +
  +=head1 SYNOPSIS
  +
  +B<ac>
  +[B<-u>|B<--update>]
  +[B<-v>]
  +
  +=head1 DESCRIPTION
  +
  +=head1 HISTORY
  +
  +B<OSSP iselect>, an interactive full-screen selection tool, was
  +implemented in 1997 by Ralf S. Engelschall. As a useful application and
  +demonstration of B<OSSP iselect>, a small shell script wrapper named
  +F<ilogin> was implemented. Prompted by the requirement of automated
  +login sequences to Cable & Wireless Germany systems, in April 2003 the
  +idea of F<ilogin> was reimplemented from scratch in Perl. The result was
  +B<OSSP ac> 2.0.
  +
  +=head1 AUTHORS
  +
  + Ralf S. Engelschall
  + rse@engelschall.com
  + www.engelschall.com
  +
  +=cut
  +
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 29 11:32:13 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C66EA76D0A; Thu, 29 May 2003 11:32:12 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mct/ README TODO mct.cgi mct.css mct.html rsa.htm...
Message-Id: <20030529093212.C66EA76D0A@mail.ossp.org>
Date: Thu, 29 May 2003 11:32:12 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-May-2003 11:32:12
  Branch: HEAD                             Handle: 2003052910321100

  Added files:
    ossp-pkg/mct            README TODO mct.cgi mct.css mct.html rsa.html
                            rsa.mct

  Log:
    add our cool Multiple Choice Test (MCT) engine to OSSP CVS to make
    sure its source is not lost over time

  Summary:
    Revision    Changes     Path
    1.1         +3  -0      ossp-pkg/mct/README
    1.1         +5  -0      ossp-pkg/mct/TODO
    1.1         +700 -0     ossp-pkg/mct/mct.cgi
    1.1         +103 -0     ossp-pkg/mct/mct.css
    1.1         +8  -0      ossp-pkg/mct/mct.html
    1.1         +8  -0      ossp-pkg/mct/rsa.html
    1.1         +279 -0     ossp-pkg/mct/rsa.mct
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/mct/README
  ============================================================================
  $ cvs diff -u -r0 -r1.1 README
  --- /dev/null	2003-05-29 11:32:11.000000000 +0200
  +++ README	2003-05-29 11:32:11.000000000 +0200
  @@ -0,0 +1,3 @@
  +
  +  Multiple Choice Test (MCT) Engine
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mct/TODO
  ============================================================================
  $ cvs diff -u -r0 -r1.1 TODO
  --- /dev/null	2003-05-29 11:32:11.000000000 +0200
  +++ TODO	2003-05-29 11:32:11.000000000 +0200
  @@ -0,0 +1,5 @@
  +- $name -> $spec
  +- $form -> $button
  +- $help replace with better solution
  +- @TITLE@ in .html
  +- sd&m idea: store result and give anyone just their position
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mct/mct.cgi
  ============================================================================
  $ cvs diff -u -r0 -r1.1 mct.cgi
  --- /dev/null	2003-05-29 11:32:11.000000000 +0200
  +++ mct.cgi	2003-05-29 11:32:12.000000000 +0200
  @@ -0,0 +1,700 @@
  +#!/e/epaperwork/sw/bin/perl
  +##
  +##  OSSP mct - Multiple Choice Test Engine
  +##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##
  +##  This file is part of OSSP mct, a multiple choice test engine
  +##  which can be found at http://www.ossp.org/pkg/tool/mct/.
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  mct.cgi: multiple choice test CGI engine (language: Perl)
  +##
  +
  +#   requirements
  +require 5.006;
  +use IO;               # standard in Perl 5.6
  +use POSIX;            # standard in Perl 5.6
  +use CGI;              # standard in Perl 5.6
  +#use Mail::Sendmail;   # standard in OpenPKG's Perl, else: CPAN!
  +
  +#   program configuration
  +my $MY = {
  +    PROG_NAME => 'OSSP mct',
  +    PROG_VERS => '1.0.0',
  +    PROG_DESC => 'Multiple Choice Test Engine',
  +    PROG_HOME => 'http://www.ossp.org/pkg/tool/mct/',
  +    MAIL_FROM => 'mct@epaperwork.org',
  +    MAIL_HOST => 'mail.epaperwork.org',
  +    TEMPLATE  => "<html>\n<head>\n\@HEAD\@\n</head>\n<body>\n\@BODY\@\n</body></html>"
  +};
  +
  +#   switch to unbuffered output
  +$|++;
  +
  +#   establish CGI object
  +my $CGI = new CGI;
  +
  +#   generate an HTTP response
  +sub http_response {
  +    my ($head, $body) = @_;
  +
  +    #   fill in template page
  +    my $response = $MY->{TEMPLATE};
  +    $response =~ s|\@HEAD\@|$head|sg;
  +    $response =~ s|\@BODY\@|$body|sg;
  +    
  +    #   prepend with HTTP header
  +    $response = $CGI->header(
  +        -type             => 'text/html', 
  +        -expires          => 'now', 
  +        '-Content-length' => length($response)
  +    ) . $response;
  +
  +    return $response;
  +}
  +
  +#   activate a general error handler
  +$SIG{__DIE__} = sub {
  +    my ($err) = @_;
  +
  +    $err =~ s|at\s+\S+\s+line\s+(\d+)|(line $1)|s;
  +    $err =~ s|\n|<br>\n|sg;
  +    print STDOUT &http_response(
  +        "<title>ePaperwork :: Multiple Choice Test: ERROR</title>",
  +        "<h1>ePaperwork :: Multiple Choice Test: ERROR</h1>\n" .
  +        "<pre>$err</pre>\n"
  +    );
  +    exit(0);
  +};
  +
  +#   convert Sugar-style markup text to HTML text
  +sub sug2html {
  +	my ($text) = @_;
  +
  +    #   escape HTML special characters
  +	$text =~ s|&|&amp;|sg;
  +	$text =~ s|<|&lt;|sg;
  +	$text =~ s|>|&gt;|sg;
  +
  +    #   expand Sugar markup
  +	$text =~ s/\|\|(.+?)\|\|/<tt>$1<\/tt>/sg;
  +	$text =~ s|//(.+?)//|<i>$1</i>|sg;
  +	$text =~ s|\*\*(.+?)\*\*|<b>$1</b>|sg;
  +	$text =~ s|-&gt;(.+?)::(.+?)&lt;-|<a href="$2" target="mct-extern">$1</a>|sg;
  +	$text =~ s|-&gt;(.+?)&lt;-|<a href="$1" target="mct-extern">$1</a>|sg;
  +
  +	return $text;
  +}
  +
  +#   read and parse MCT specification
  +sub readmct {
  +    my ($name) = @_;
  +
  +    #   read MCT specification
  +    my $fh = new IO::File "<$name"
  +        || die "unable to open MCT specification \"$name\"";
  +    my $mct = '';
  +    $mct .= $_ while (defined($_ = $fh->getline()));
  +    $fh->close();
  +
  +    #   provide line continuation feature
  +    $mct =~ s|\s*\\\s*\n\s*| |sg;
  +
  +    #   parse MCT specification
  +    my $MCT = {
  +        'HEADER'   => {},
  +        'RESULT'   => [],
  +        'QUESTION' => []
  +    };
  +    $mct =~ s|^(.+?\n)\n(.+)$|&parse_header($1), &parse_body($2), ''|sge;
  +
  +    #   parse header lines
  +    sub parse_header {
  +        my ($mct) = @_;
  +        while ($mct =~ s|^([A-Za-z][A-Za-z0-9-]*):\s*(.*?)\n||s) {
  +            if (not defined($MCT->{HEADER}->{uc($1)})) {
  +                $MCT->{HEADER}->{uc($1)} = $2;
  +            }
  +            else {
  +                $MCT->{HEADER}->{uc($1)} .= $2;
  +            }
  +        }
  +    }
  +
  +    #   parse body blocks
  +    sub parse_body {
  +        my ($mct) = @_;
  +        $mct = "\n" . $mct . "\n";
  +        $mct =~ s|\n\?\?\s+(.+?)\n(.+?\n)(?=\n)|&parse_question($1, $2), ''|sge;
  +        $mct =~ s|\n==\s+(.+?)\n(.+?\n)(?=\n)|&parse_result($1, $2), ''|sge;
  +    }
  +
  +    #   parse a single question block
  +    sub parse_question {
  +        my ($title, $mct) = @_;
  +        my $e = { 
  +            'TITLE'   => $title, 
  +            'HINT'    => '',
  +            'CHOICES' => []
  +        };
  +        foreach my $line (split(/\n/, $mct)) {
  +            if ($line =~ m/^((?:!!))\s+(.+)$/s) {
  +                $e->{HINT} = $2;
  +            }
  +            elsif ($line =~ m/^((?:--|\+\+))\s+(.+)$/s) {
  +                my $c = { 'TYPE' => $1, 'TEXT' => $2 };
  +                push(@{$e->{CHOICES}}, $c);
  +            }
  +        }
  +        push(@{$MCT->{QUESTION}}, $e);
  +    }
  +
  +    #   parse a single result block
  +    sub parse_result {
  +        my ($title, $mct) = @_;
  +        my $e = { 
  +            'TITLE'   => $title, 
  +            'CHOICES' => []
  +        };
  +        foreach my $line (split(/\n/, $mct)) {
  +            if ($line =~ m/^((?:--))\s+(\d+)-(\d+)\s+(.+)$/s) {
  +                my $c = { 
  +                    'TYPE'  => $1, 
  +                    'RANGE' => [$2, $3], 
  +                    'TEXT'  => $4 };
  +                push(@{$e->{CHOICES}}, $c);
  +            }
  +        }
  +        push(@{$MCT->{RESULT}}, $e);
  +    }
  +
  +    return $MCT;
  +}
  +
  +#   deterministically permutate an array
  +sub permute {
  +    my ($k, @a) = @_;
  +
  +    my @b = ();
  +    $k = ($k * ($#a+1)) / 9;
  +    $k = 1 if ($k < 1);
  +    $k = ($k % ($#a+1));
  +    $k = 1 if ($k < 1);
  +
  +    my $i = $k/2;
  +    while ($#a > -1) {
  +        for (my $j = 0; $j < ($#a+1); $j++) {
  +            my $x = shift(@a);
  +            if (($i % $k) == 0) {
  +                push(@b, $x);
  +            }
  +            else {
  +                push(@a, $x);
  +            }
  +            $i++;
  +        }
  +        $k-- if ($k > 1);
  +    }
  +
  +    return @b;
  +}
  +
  +#   adjust CGI environment to make sure that self-referencing
  +#   URLs go again through the direct URL of the MCT file!!
  +$ENV{SCRIPT_NAME} = $ENV{PATH_INFO};
  +delete $ENV{REQUEST_URI};
  +
  +#   fetch CGI parameters
  +my $name   = $CGI->path_translated();
  +my $form   = $CGI->param('form')   || '';
  +my $perm   = $CGI->param('perm')   || '';
  +my $hint   = $CGI->param('hint')   || '';
  +my $note   = $CGI->param('note')   || '';
  +my $serial = $CGI->param('serial') || '';
  +
  +#   sanity checks on CGI parameters
  +if ($name !~ m|\.mct$|) {
  +    die "MCT specification \"$name\": invalid path name";
  +}
  +if (not -f $name) {
  +    die "MCT specification \"$name\": file not found";
  +}
  +if ($perm ne '' and $perm !~ m/^[1-9]$/) {
  +    die "Invalid \"perm\" parameter value \"$perm\"";
  +}
  +if ($hint ne '' and $hint !~ m/^[01]$/) {
  +    die "Invalid \"hint\" parameter value \"$hint\"";
  +}
  +if ($note ne '' and $note !~ m/^[01]$/) {
  +    die "Invalid \"note\" parameter value \"$note\"";
  +}
  +if ($serial ne '' and $serial !~ m/^\d+$/) {
  +    die "Invalid \"serial\" parameter value \"$serial\"";
  +}
  +
  +#   read MCT specification
  +my $MCT = &readmct($name);
  +
  +#  XXX
  +
  +#   optionally read HTML page template
  +my $template = $name;
  +$template =~ s|\.mct$|.html|s;
  +my $fh = new IO::File "<$template" || die;
  +$MY->{TEMPLATE} = '';
  +$MY->{TEMPLATE} .= $_ while (<$fh>);
  +$fh->close();
  +
  +#   make sure the serial numbers match
  +if ($serial ne '') {
  +    if ($serial ne $MCT->{HEADER}->{SERIAL}) {
  +        die "Sorry, serial in request (#$serial) does not match current MCT serial (#".$MCT->{HEADER}->{SERIAL}.")";
  +    }
  +}
  +$serial = $MCT->{HEADER}->{SERIAL};
  +
  +#   calculate query summary
  +my $summary = '';
  +sub summarynum {
  +    my ($num) = @_;
  +    return $num if ($num < 10);
  +    return "{$num}";
  +}
  +my $nq = 0;
  +foreach my $q (@{$MCT->{QUESTION}}) {
  +    $summary .= "," if ($summary ne '');
  +    $summary .= &summarynum($nq);
  +    $question = $CGI->param("q$nq");
  +    my $nc = 0;
  +    foreach my $c (@{$q->{CHOICES}}) {
  +        my $choice = ($CGI->param("q$nq.c$nc") || ($question eq "c$nc"));
  +        if ($choice) {
  +            $summary .= &summarynum($nc);
  +        }
  +        $nc++;
  +    }
  +    $nq++;
  +}
  +
  +#   support Submit button
  +if ($form eq 'Send Notes') {
  +    my $body = '';
  +    $body .= "Dear author of the Multiple Choice Test \"".$MCT->{HEADER}->{NAME}."\",\n" .
  +             "my current choice (".$CGI->url(-full => 1)."?choice=$summary)\n" .
  +             "resulted in the following annotation notes for you.\n" .
  +             "\n";
  +    $nq = 0;
  +    foreach my $q (@{$MCT->{QUESTION}}) {
  +        my $an = ($CGI->param("q${nq}.an") || "");
  +        if ($an ne '') {
  +            $body .= "Question:\n" .
  +                     "| ".$q->{TITLE}."\n";
  +            $an =~ s/^/| /mg;
  +            $body .= "Note:\n".$an;
  +            $body .= "\n\n";
  +        }
  +        $CGI->param("q${nq}.an", "");
  +        $nq++;
  +    }
  +    my %mailcfg = ( 
  +        'To'      => $MCT->{HEADER}->{"REPLY-TO"},
  +        'From'    => $MY->{MAIL_FROM},
  +        'Subject' => "Notes on MCT \"".$MCT->{HEADER}->{NAME}."\"",
  +        'Message' => $body,
  +        'smtp'    => $MY->{MAIL_HOST}
  +    );
  +    sendmail(%mailcfg) or die $Mail::Sendmail::error;
  +    $CGI->param('note', 0);
  +    $note = 0;
  +    $form = "  Rate!  ";
  +}
  +
  +#   support Mail button
  +if ($form eq 'Mail') {
  +    sub urlescape {
  +        my ($text) = @_;
  +        $text =~ s|([ \t&+?:/=\n\r])|sprintf("%%%02x", ord($1))|sge;
  +        return $text;
  +    }
  +    my $subject = &urlescape("Result in MCT \"".$MCT->{HEADER}->{NAME}."\"");
  +    my $body    = &urlescape("Result: ".$CGI->url(-full => 1)."?choice=$summary");
  +    print STDOUT $CGI->redirect(-uri => "mailto:".$MCT->{HEADER}->{"REPLY-TO"}."?subject=$subject&body=$body", -type => "text/plain");
  +    exit(0);
  +}
  +
  +#   support Restart button by redirecting via GET 
  +if ($form eq 'Restart') {
  +    print STDOUT $CGI->redirect(-uri => $CGI->url(-full => 1), -type => "text/html");
  +    exit(0);
  +}
  +
  +#   support Note button
  +if ($form eq 'Show Notes') {
  +    $CGI->param('note', 1);
  +    $note = 1;
  +}
  +elsif ($form eq 'Hide Notes') {
  +    $CGI->param('note', 0);
  +    $note = 0;
  +}
  +
  +#   support Hint button
  +if ($form eq 'Show Hints') {
  +    $CGI->param('hint', 1);
  +    $hint = 1;
  +}
  +elsif ($form eq 'Hide Hints') {
  +    $CGI->param('hint', 0);
  +    $hint = 0;
  +}
  +
  +#   calculate new permution index
  +if ($perm eq '') {
  +    $perm = int((rand 8) + 1);;
  +    $CGI->param('perm', $perm);
  +}
  +
  +#   support Bookmark button
  +if ($form eq 'Bookmark') {
  +    #   redirect to bookmark URL
  +    # XXX print STDOUT $CGI->redirect($CGI->url(-full => 1)."?name=$name&perm=$perm&choice=$summary");
  +    print STDOUT $CGI->redirect(-uri => $CGI->url(-full => 1)."?serial=$serial&perm=$perm&choice=$summary", -type => "text/plain");
  +    exit(0);
  +}
  +if ($CGI->param('choice') ne '') {
  +    #   import choice from bookmark URL
  +    my $choice = $CGI->param('choice');
  +    sub nextnum {
  +        my ($str) = @_;
  +        my $num = '';
  +        if ($str =~ m|^\{(\d+)\}(.*)$|s) {
  +            ($num, $str) = ($1, $2);
  +        }
  +        elsif ($str =~ m|^(\d)(.*)$|s) {
  +            ($num, $str) = ($1, $2);
  +        }
  +        elsif ($str =~ m|^.(.*)$|s) {
  +            $str = $1;
  +        }
  +        return ($num, $str);
  +    }
  +    foreach $str (split(/,/, $choice)) {
  +        my ($nq, $str) = &nextnum($str);
  +        if ($nq ne '') {
  +            if (defined($MCT->{QUESTION}->[$nq])) {
  +                $q = $MCT->{QUESTION}->[$nq];
  +                my $multichoice = 0;
  +                foreach my $c (@{$q->{CHOICES}}) {
  +                    if ($c->{TYPE} eq '++') {
  +                        $multichoice++;
  +                    }
  +                }
  +                $multichoice = 0 if ($multichoice <= 1);
  +                if ($multichoice) {
  +                    my $nc;
  +                    while ($str ne '') {
  +                        ($nc, $str) = &nextnum($str);
  +                        $CGI->param("q$nq.c$nc", "1");
  +                    }
  +                }
  +                else {
  +                    my ($nc, $str) = &nextnum($str);
  +                    $CGI->param("q$nq", "c$nc");
  +                }
  +            }
  +        }
  +    }
  +    $form = "  Rate!  ";
  +}
  +
  +#   start generating the web page
  +my $head = '';
  +my $body = '';
  +
  +$head .= "<title>ePaperwork :: Multiple Choice Test: ".
  +         $MCT->{HEADER}->{TITLE}."</title>";
  +
  +#   import CSS
  +sub addcss {
  +    my ($file) = @_;
  +    $head .= "<style type=\"text/css\"><!--\n";
  +    my $fh = new IO::File "<$file" || die;
  +    $head .= $_ while (<$fh>);
  +    $fh->close();
  +    $head .= "--></style>\n";
  +}
  +my $css = $name;
  +$css =~ s|\.mct$|.css|s;
  +if (-f "$css") {
  +    &addcss("$css");
  +}
  +if (-f "mct.css") {
  +    &addcss("mct.css");
  +}
  +
  +$body .= "<table width=100% cellspacing=0 cellpadding=1 border=0>";
  +$body .= "<tr><td colspan=2 class=mct-border>";
  +# XXX $body .= $CGI->startform(-method => "POST", -action => $CGI->url(-full => 1)."?name=$name");
  +$body .= $CGI->startform(-method => "POST", -action => $CGI->url(-full => 1));
  +#$body .= $CGI->hidden(-name => 'name', -default => [$name]);
  +$body .= $CGI->hidden(-name => 'perm', -default => [$perm]);
  +$body .= $CGI->hidden(-name => 'hint', -default => [$hint]);
  +$body .= $CGI->hidden(-name => 'note', -default => [$note]);
  +$body .= $CGI->hidden(-name => 'serial', -default => [$serial]);
  +
  +$body .= "<table width=100% cellspacing=0 cellpadding=4 border=0>";
  +$body .= "<tr><td colspan=2 class=\"mct-header\">\n";
  +$body .= "<blockquote>\n";
  +$body .= &sug2html($MCT->{HEADER}->{TITLE});
  +$body .= "</blockquote>\n";
  +$body .= "</td></tr>";
  +
  +#   determine whether to enable cheat mode
  +my $cheat = 0;
  +if ($MCT->{HEADER}->{PASSWORD} ne '') {
  +    $nq = 0;
  +    foreach my $q (@{$MCT->{QUESTION}}) {
  +        my $an = ($CGI->param("q${nq}.an") || "");
  +        if (index($an, $MCT->{HEADER}->{PASSWORD}) > -1) {
  +            $cheat = 1;
  +            last;
  +        }
  +        $nq++;
  +    }
  +}
  +
  +my $r_questions = 0;
  +my $r_score     = 0;
  +
  +$nq = 0;
  +foreach my $q (@{$MCT->{QUESTION}}) {
  +	$r_questions++;
  +	my $col0 = ($nq % 2);
  +	$body .= "<tr>\n";
  +	$body .= "<td width=40% valign=top class=mct-qt$col0>" .
  +			 "<span class=\"mct-qt\">".&sug2html($q->{TITLE})."</span>";
  +    my $multichoice = 0;
  +	foreach my $c (@{$q->{CHOICES}}) {
  +        if ($c->{TYPE} eq '++') {
  +            $multichoice++;
  +        }
  +    }
  +    if ($multichoice <= 1) {
  +        $multichoice = 0;
  +    }
  +    if ($multichoice) {
  +        $body .= "<br>($multichoice answers expected)";
  +    }
  +    if ($hint) {
  +        if ($q->{HINT} ne '') {
  +            $body .= "<br><span class=\"mct-hint\">Hint: ".&sug2html($q->{HINT})."</span>\n";
  +        }
  +    }
  +    if ($note) {
  +        $body .= "<br>" . 
  +                 $CGI->textarea(-name => "q${nq}.an",
  +                              -default => ($CGI->param("q${nq}.an") || ""), 
  +                              -rows => 3, -columns => "30%");
  +    }
  +    else {
  +        $body .= $CGI->hidden(-name => "q${nq}.an", -default => [($CGI->param("q${nq}.an") || "")]);
  +    }
  +    $body .= "<p></td>\n";
  +	$body .= "<td width=60% valign=top class=mct-qt$col0>" .
  +			 "<span class=\"mct-qc\">\n";
  +	$body .= "<table width=100% cellspacing=0 cellpadding=0 border=0>\n";
  +	my $nc = 0;
  +	my $q_choices = 0;
  +	my $q_score   = 0;
  +	my $q_ok      = 0;
  +    my @cells = ();
  +	foreach my $c (@{$q->{CHOICES}}) {
  +	    $q_choices++;
  +		my $choice = $CGI->param("q$nq.c$nc");
  +        if (not $multichoice) {
  +		    $choice = $CGI->param("q$nq");
  +            if ($choice eq "c$nc") {
  +                $choice = 1;
  +            }
  +            else {
  +                $choice = 0;
  +            }
  +        }
  +        my $class = '';
  +		if ($choice) {
  +			if ($c->{TYPE} eq '++') {
  +				$class = "OK";
  +				$q_score++;
  +			}
  +			else {
  +				$class = "BAD";
  +				$q_score--;
  +			}
  +		}
  +        else {
  +			if ($c->{TYPE} eq '++') {
  +				$class = "CHEAT" if ($form ne '' && $cheat);
  +            }
  +        }
  +		if ($c->{TYPE} eq '++') {
  +			$q_ok++;
  +		}
  +        my $cell = '';
  +        if ($multichoice) {
  +		    $cell .= "<input ".($choice ? "checked " : "").
  +                     "type=\"checkbox\" name=\"q$nq.c$nc\" value=\"1\">";
  +        }
  +        else {
  +		    $cell .= "<input ".($choice ? "checked " : "").
  +                     "type=\"radio\" name=\"q$nq\" value=\"c$nc\">";
  +        }
  +		$cell .= "&nbsp;".&sug2html($c->{TEXT})."<br>\n";
  +        my $c = {
  +            'CLASS'  => $class,
  +            'HTML'   => $cell,
  +            'LENGTH' => length($c->{TEXT})
  +        };
  +        push(@cells, $c);
  +		$nc++;
  +	}
  +
  +    @cells = &permute($perm, @cells);
  +
  +    my $maxlen  = 0;
  +    foreach my $cell (@cells) {
  +        if ($maxlen < $cell->{LENGTH}) {
  +            $maxlen = $cell->{LENGTH};
  +        }
  +    }
  +    my $cols = 1;
  +    $cols = 2 if ($maxlen < 30);
  +    $cols = 3 if ($maxlen < 10);
  +    $cols = 4 if ($maxlen < 5);
  +    my $rows = sprintf("%d", (($#cells+1) + ($cols - 1)) / $cols);
  +    for (my $i = 0; $i < $rows; $i++) {
  +        $body .= "<tr>\n";
  +        for (my $j = 0; $j < $cols; $j++) {
  +            my $cell = ($cells[$i+($j*$rows)] || { 'CLASS' => '', 'HTML' => '&nbsp;'});
  +            my $class = $cell->{CLASS};
  +            if ($class eq '' or $class eq 'OK') {
  +		        my $col1 = ($i % 2);
  +		        $class = "$col0$col1";
  +            }
  +		    $body .= "<td class=mct-qc$class>";
  +            $body .= $cell->{HTML};
  +		    $body .= "</td>";
  +        }
  +        $body .= "</tr>\n";
  +    }
  +	$q_score = 0 if ($q_score < 0);
  +	my $q_score = sprintf("%d", (($q_score / $q_ok) * 100));
  +	$r_score += $q_score;
  +	$body .= "</table>\n";
  +	$body .= "</span><p></td>\n";
  +	$body .= "</tr>\n";
  +	$nq++;
  +}
  +$body .= "</table>\n";
  +my $result = sprintf("%d", ($r_score / $r_questions));
  +
  +$body .= "</td></tr>";
  +$body .= "<tr>";
  +$body .= "<td align=left class=\"mct-button\">";
  +if ($form ne '') {
  +    if ($note) {
  +        $body .= "<span class=\"mct-button-switchnotes\">";
  +        $body .= $CGI->submit(-name => 'form', -value => "Hide Notes") . "\n";
  +        $body .= "</span>";
  +        $body .= "<span class=\"mct-button-sendnotes\">";
  +        $body .= $CGI->submit(-name => 'form', -value => "Send Notes") . "\n";
  +        $body .= "</span>";
  +    }
  +    else {
  +        $body .= "<span class=\"mct-button-switchnotes\">";
  +        $body .= $CGI->submit(-name => 'form', -value => "Show Notes") . "\n";
  +        $body .= "</span>";
  +    }
  +    if ($hint) {
  +        $body .= "<span class=\"mct-button-hints\">";
  +        $body .= $CGI->submit(-name => 'form', -value => "Hide Hints") . "\n";
  +        $body .= "</span>";
  +    }
  +    else {
  +        $body .= "<span class=\"mct-button-hints\">";
  +        $body .= $CGI->submit(-name => 'form', -value => "Show Hints") . "\n";
  +        $body .= "</span>";
  +    }
  +    $body .= "<span class=\"mct-button-bookmark\">";
  +    $body .= $CGI->submit(-name => 'form', -value => "Bookmark") . "\n";
  +    $body .= "</span>";
  +    $body .= "<span class=\"mct-button-mail\">" .
  +             $CGI->submit(-name => 'form', -value => "Mail") . 
  +             "</span>\n";
  +}
  +$body .= '&nbsp;';
  +$body .= "</td>";
  +$body .= "<td align=right class=\"mct-button\">";
  +if ($form ne '') {
  +    $body .= "<span class=\"mct-button-restart\">" .
  +             $CGI->submit(-name => 'form', -value => "Restart") .
  +             "</span>\n";
  +}
  +$body .= "<span class=\"mct-button-undo\">" .
  +         $CGI->reset(-value => "Undo") . 
  +         "</span>\n";
  +$body .= "<b><span class=\"mct-button-rate\">" . $CGI->submit(-name => 'form', -value => "  Rate!  ") . "</span></b>\n";
  +#$body .= "&nbsp;";
  +$body .= $CGI->endform;
  +$body .= "</td>";
  +$body .= "</tr>";
  +if ($form ne '') {
  +	#   display results
  +	$body .= "<tr>";
  +	$body .= "<td colspan=2 align=left class=\"mct-result\">";
  +	$body .= "<p><blockquote>";
  +	$body .= "You have achieved <span class=\"mct-result-percent\">${result}%</span> success in this multiple choice test.\n";
  +    foreach my $r (@{$MCT->{RESULT}}) {
  +	    $body .= $r->{TITLE} . " ";
  +	    foreach my $c (@{$r->{CHOICES}}) {
  +			if ($c->{RANGE}->[0] <= $result and $result <= $c->{RANGE}->[1]) {
  +				$body .= &sug2html($c->{TEXT});
  +				last;
  +			}
  +		}
  +		$body .= "\n";
  +	}
  +	$body .= "<br><br></blockquote>";
  +	$body .= "</td></tr>";
  +}
  +$body .= "<tr>";
  +$body .= "<td colspan=2 align=center class=\"mct-footer\">";
  +$body .= "<a href=\"".$MY->{PROG_HOME}."\">".$MY->{PROG_NAME}."</a> ".
  +         $MY->{PROG_VERS}." - ".$MY->{PROG_DESC}."<br>\n";
  +$body .= "</td>";
  +$body .= "</tr>";
  +$body .= "</table>\n";
  +$body .= "\n";
  +
  +print STDOUT &http_response($head, $body);
  +
  +exit(0);
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mct/mct.css
  ============================================================================
  $ cvs diff -u -r0 -r1.1 mct.css
  --- /dev/null	2003-05-29 11:32:11.000000000 +0200
  +++ mct.css	2003-05-29 11:32:12.000000000 +0200
  @@ -0,0 +1,103 @@
  +/*
  +**  OSSP mct - Multiple Choice Test
  +**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**
  +**  This file is part of OSSP mct, a multiple choice test engine
  +**  which can be found at http://www.ossp.org/pkg/tool/mct/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  mct.css: multiple choice test cascading style sheet (language: CSS1)
  +*/
  +
  +/* the outer border */
  +TD.mct-border                  { background: #000000; }
  +
  +/* the header area */
  +.mct-header                    { background: #000000; color: #ffffff; 
  +                                 font-family: helvetica,lucida,arial,sans-serif; font-weight: bold; font-size: 150%; }
  +.mct-header A                  { text-decoration: none; font-weight: bold; }
  +.mct-header A:link             { color: #ffffe0; }
  +.mct-header A:visited          { color: #ffffe0; }
  +.mct-header A:hover            { color: #ffffe0; text-decoration: underline; }
  +
  +/* the hint texts */
  +.mct-hint                      { color: #333366;
  +                                 font-family: helvetica,lucida,arial,sans-serif; font-weight: bold; }
  +.mct-hint A                    { text-decoration: none; font-weight: bold; }
  +.mct-hint A:link               { color: #666699; }
  +.mct-hint A:visited            { color: #666699; }
  +.mct-hint A:hover              { color: #666699; text-decoration: underline; }
  +
  +/* the question area */
  +.mct-qt                        { font-family: helvetica,lucida,arial,sans-serif; font-size: 125%; }
  +.mct-qt CODE                   { font-family: courier,courier-new,terminal,fixed,monospace; }
  +.mct-qt A                      { text-decoration: none; }
  +.mct-qt A:link                 { color: #666699; }
  +.mct-qt A:visited              { color: #666699; }
  +.mct-qt A:hover                { color: #666699; text-decoration: underline; }
  +
  +/* the choice area */
  +.mct-qc                        { font-family: helvetica,lucida,arial,sans-serif; }
  +.mct-qc A                      { text-decoration: none; }
  +.mct-qc A:link                 { color: #666699; }
  +.mct-qc A:visited              { color: #666699; }
  +.mct-qc A:hover                { color: #666699; text-decoration: underline; }
  +
  +/* the question and choice area background/foreground colors */
  +.mct-qt0                       { background: #f0f0f0; }
  +.mct-qt1                       { background: #e0e0f0; }
  +.mct-qc00                      { background: #f0f0f0; }
  +.mct-qc01                      { background: #f8f8f8; }
  +.mct-qc10                      { background: #e0e0f0; }
  +.mct-qc11                      { background: #e8e8f8; }
  +.mct-qcBAD                     { background: #cc3333; color: #ffffff; }
  +.mct-qcCHEAT                   { background: #339933; color: #ffffff; }
  +
  +/* the action button area */
  +.mct-button                    { background: #000000; }
  +.mct-button-switchnotes  INPUT { background: #666666; border-color: #666666; color: #cccccc; } 
  +.mct-button-sendnotes    INPUT { background: #666666; border-color: #666666; color: #cccccc; } 
  +.mct-button-hints        INPUT { background: #666666; border-color: #666666; color: #cccccc; } 
  +.mct-button-bookmark     INPUT { background: #666666; border-color: #666666; color: #cccccc; } 
  +.mct-button-mail         INPUT { background: #666666; border-color: #666666; color: #cccccc; }
  +.mct-button-restart      INPUT { background: #666666; border-color: #666666; color: #cccccc; } 
  +.mct-button-undo         INPUT { background: #666666; border-color: #666666; color: #cccccc; }
  +.mct-button-rate         INPUT { background: #c0c0f0; border-color: #c0c0f0; color: #000000; }
  +
  +/* the result text area */
  +.mct-result                    { background: #000000; color: #ffffff; 
  +                                 font-family: helvetica,lucida,arial,sans-serif; 
  +                                 font-size: 150%; }
  +.mct-result-percent            { color: #ccccff; font-weight: bold; }
  +.mct-result A                  { text-decoration: none; font-weight: bold; }
  +.mct-result A:link             { color: #ffffe0; }
  +.mct-result A:visited          { color: #ffffe0; }
  +.mct-result A:hover            { color: #ffffe0; text-decoration: underline; }
  +
  +/* the footer area (program name and version) */
  +.mct-footer                    { background: #000000; color: #c0c0c0;
  +                                 font-family: helvetica,lucida,arial,sans-serif; font-weight: normal; }
  +.mct-footer A                  { text-decoration: none; }
  +.mct-footer A:hover            { text-decoration: underline; }
  +.mct-footer A:link             { color: #c0c0c0; }
  +.mct-footer A:visited          { color: #c0c0c0; }
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mct/mct.html
  ============================================================================
  $ cvs diff -u -r0 -r1.1 mct.html
  --- /dev/null	2003-05-29 11:32:11.000000000 +0200
  +++ mct.html	2003-05-29 11:32:12.000000000 +0200
  @@ -0,0 +1,8 @@
  +<html>
  +  <head>
  +	@HEAD@
  +  </head>
  +  <body bgcolor="#ffffff">
  +    @BODY@
  +  </body>
  +</html>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mct/rsa.html
  ============================================================================
  $ cvs diff -u -r0 -r1.1 rsa.html
  --- /dev/null	2003-05-29 11:32:11.000000000 +0200
  +++ rsa.html	2003-05-29 11:32:12.000000000 +0200
  @@ -0,0 +1,8 @@
  +<html>
  +  <head>
  +	@HEAD@
  +  </head>
  +  <body bgcolor="#ffffff">
  +    @BODY@
  +  </body>
  +</html>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mct/rsa.mct
  ============================================================================
  $ cvs diff -u -r0 -r1.1 rsa.mct
  --- /dev/null	2003-05-29 11:32:11.000000000 +0200
  +++ rsa.mct	2003-05-29 11:32:12.000000000 +0200
  @@ -0,0 +1,279 @@
  +Name:      rsa
  +Title:     RSA Public Key Algorithm
  +Author:    ->Ralf S. Engelschall::mailto:rse@engelschall.com<-
  +Reply-To:  rse@engelschall.com
  +Created:   11-May-2002
  +Modified:  11-May-2002
  +Serial:    1
  +Password:  CheatMe!
  +
  +?? What does **RSA** stand for? 
  +!! presentation, ->slide 2::rsa/slide-002-n.html<-
  +-- Ronald's Security Algorithm
  +-- Ronald Shane Adleman
  +++ Rivest Shamir Adleman
  +-- Remainder Secret Algorithm
  +-- Remaining Security Advocation
  +-- Rivest Shamir Algorithm
  +
  +?? RSA is a...
  +!! presentation, ->slide 2::rsa/slide-002-n.html<-, ->slide 4::rsa/slide-004-n.html<-
  +++ asymmetric cryptography algorithm
  +-- symmetric cryptography algorithm
  +-- elliptic curve cryptography algorithm
  +-- private key cryptography algorithm
  +
  +?? The RSA algorithm provides...
  +!! presentation, ->slide 2::rsa/slide-002-n.html<-
  +++ Encryption
  +++ Digital Signatures
  +++ Secure Key Exchange
  +-- Steganography
  +-- Data Mining
  +-- Zero Knowledge 
  +-- Message Digesting
  +-- Electronic Cash
  +
  +?? RSA is one of the cryptrography algorithm underlying...
  +!! presentation, ->slide 3::rsa/slide-003-n.html<-
  +++ SSL/TLS
  +++ SSH
  +++ IPsec
  +++ DNSSEC
  +++ PGP
  +-- DNS
  +++ SMIME
  +-- MIME
  +-- HTTP
  +++ HTTPS
  +-- FTP
  +++ SFTP
  +-- IMAP
  +++ IMAPS
  +-- POP3
  +
  +?? RSA is **mainly** based on mathematical foundations from...
  +!! presentation, ->slide 3::rsa/slide-003-n.html<-
  +-- function theory
  +-- coding theory
  +++ algebra
  +++ number theory
  +-- analysis
  +-- geometry
  +
  +?? The major drawback in symmetric cryptography is that the...
  +!! presentation, ->slide 4::rsa/slide-004-n.html<-
  +++ key has to be securely interchanged before communication
  +-- key cannot be made as secure as needed
  +-- algorithms are not as secure as the asymmetric ones
  +-- algorithms can be implemented in hardware too easily
  +
  +?? Ciphers provide...
  +!! presentation, ->slide 4::rsa/slide-004-n.html<-
  +++ privacy
  +-- integrity
  +-- authentication
  +-- invisibility
  +
  +?? Message digests provide...
  +!! presentation, ->slide 5::rsa/slide-005-n.html<-
  +-- privacy
  +++ integrity
  +-- authentication
  +-- invisibility
  +
  +?? Certificates provide...
  +!! presentation, ->slide 6::rsa/slide-006-n.html<-
  +-- privacy
  +-- integrity
  +++ authentication
  +-- invisibility
  +
  +?? Which of the following are **symmetric** cryptography algorithms?
  +!! presentation, ->slide 4::rsa/slide-004-n.html<-
  +++ DES
  +++ AES
  +++ Blowfish
  +++ RC4
  +++ IDEA
  +-- DH
  +-- ElGammal
  +-- RSA
  +-- MD5
  +-- SHA1
  +-- RMD160
  +-- CRC
  +
  +?? Which of the following are **asymmetric** cryptography algorithms?
  +!! presentation, ->slide 4::rsa/slide-004-n.html<-
  +-- DES
  +-- AES
  +-- Blowfish
  +-- RC4
  +-- IDEA
  +++ DH
  +++ ElGammal
  +++ RSA
  +-- MD5
  +-- SHA1
  +-- RMD160
  +-- CRC
  +
  +?? Which of the following are **cryptographically-strong** message digest algorithms?
  +!! presentation, ->slide 5::rsa/slide-005-n.html<-
  +-- DES
  +-- AES
  +-- Blowfish
  +-- RC4
  +-- IDEA
  +-- DH
  +-- ElGammal
  +-- RSA
  +++ MD5
  +++ SHA1
  +++ RMD160
  +-- CRC
  +
  +?? Message digests generate for long variable-length messages...
  +!! presentation, ->slide 5::rsa/slide-005-n.html<-
  +-- long fixed-length representations
  +-- long variable-length representations
  +++ short fixed-length representations
  +-- short variable-length representations
  +
  +?? Message digests for two different messages...
  +!! presentation, ->slide 5::rsa/slide-005-n.html<-
  +-- are equal
  +-- should be equal
  +-- are different
  +++ should be different
  +
  +?? Digital certificates associate...
  +!! presentation, ->slide 6::rsa/slide-006-n.html<-
  +++ a public key with an identity
  +-- a private key with an identity
  +-- a public key with a private key
  +
  +?? "x mod n = y" (x, y, n, k: all integers greater than 0), is equivalent with
  +!! presentation, ->slide 8::rsa/slide-008-n.html<-
  +++ x = k*n + y
  +-- x = k/n + x
  +-- n = x/y
  +-- n = x*y
  +
  +?? Primes are numbers which...
  +!! presentation, ->slide 8::rsa/slide-008-n.html<-
  +-- if multiplied with theirself result in 1
  +++ are without remainder only divisible by theirself and 1 
  +++ have 1 as the greatest common divisor with all lower numbers
  +-- can be divided by theirself with a remainder of 1
  +
  +?? The primary mathematical foundation for the possibility that \
  +   the encryption of RSA can be decrypted is the theorem of...
  +!! presentation, ->slide 9::rsa/slide-009-n.html<-
  +-- Gauß
  +++ Euler/Fermat
  +-- Cauchy
  +-- Riemann
  +-- Rivest
  +-- Shamir
  +-- Adleman
  +-- Rivest/Shamir/Adleman
  +
  +?? Encrypting message M with RSA public key {e,n} (n modulus) into cipher text \
  +   C basically means calculating
  +!! presentation, ->slide 10::rsa/slide-010-n.html<-
  +++ C = M^e mod n
  +-- M = C^e mod n
  +-- C = M^n mod e
  +-- M = C^n mod e
  +-- e = M*C^2
  +-- C = M mod n^e
  +
  +?? Decrypting cipher text C with RSA private key {d,n} (n modulus) into message \
  +   M basically means calculating
  +!! presentation, ->slide 10::rsa/slide-010-n.html<-
  +-- C = M^d mod n
  +++ M = C^d mod n
  +-- C = M^n mod e
  +-- M = C^n mod e
  +-- d = M*C^2
  +-- M = C mod n^d
  +
  +?? In RSA the two involved keys are named the...
  +!! presentation, ->slide 11::rsa/slide-011-n.html<-
  +++ public key
  +++ private key
  +-- secret key
  +-- unsecure key
  +-- secure key
  +-- protected key
  +
  +?? The RSA private key is...
  +!! presentation, ->slide 11::rsa/slide-011-n.html<-
  +++ technically fully interchangeable with the public key
  +++ private by definition only, not by mathematical constraints 
  +-- private by mathematical constraints, not by definition
  +
  +?? **Very large** random prime numbers are efficiently determined by...
  +!! vocal explanations while presentation
  +-- deterministic calculation
  +++ repeated guessing and testing
  +-- looking up in a table
  +
  +?? For applying RSA to encrypt arbitrary texts, one has to...
  +!! presentation, ->slide 13::rsa/slide-013-n.html<-
  +++ treat character blocks as a large integer numbers
  +-- encrypt every single text character individually
  +
  +?? The security of RSA lies in the fact that...
  +!! presentation, ->slide 13::rsa/slide-013-n.html<-
  +++ no efficient algorithm is known for factorization of numbers
  +-- no efficient algorithm is known for calculating discrete logarithm
  +-- the remaining algorithm details are kept secret by RSA, Inc.
  +-- the algorithm is proofed to be unbreakable
  +-- the algorithm is definetely secure by design
  +
  +?? RSA, compared to the speed of DES/AES, is...
  +!! presentation, ->slide 13::rsa/slide-013-n.html<-
  +-- dramatically faster
  +-- slightly faster
  +-- approximately equal
  +-- slightly slower
  +++ dramatically slower
  +-- not comparable
  +
  +?? When implementing RSA, the **main** problems are that you need...
  +!! presentation, ->slide 13::rsa/slide-013-n.html<-
  +++ arbitrary precision arithmetic
  +++ good pseudo-random number generator
  +++ efficient primaly test
  +-- fast hardware
  +-- secure memory
  +-- assembly language
  +
  +?? There patent on RSA...
  +!! presentation, ->slide 2::rsa/slide-002-n.html<-
  +-- expired in 1978
  +++ started in 1978
  +++ expired in 2000
  +-- started in 2000
  +-- expires in 2038
  +-- starts in 2038
  +
  +== The analysis of your answers indicates that
  +-- 000-009 you have still not understood RSA at all. Sorry.
  +-- 010-029 you have understood only a few points about RSA. Hmmm..
  +-- 030-049 you have understood a fair amount about RSA. Go ahead.
  +-- 050-079 you have understood a lot about RSA, but failed a few points. Ok.
  +-- 080-089 you have understood mostly all about RSA. Great!
  +-- 090-100 you have fully understood RSA. Congratulations! Wohooo!
  +
  +== We have to conclude that you are
  +-- 000-009 sleeping while presentations are held. **:-(**
  +-- 010-029 still not familiar enough with cryptography. **:-|**
  +-- 030-049 a cryptography newbie with at least increasing potential. **:-)**
  +-- 050-079 a cryptography fan with an already large potential. **:-)**
  +-- 080-089 a cryptography enthusiast. Just a few steps missing to a guru. **;-)**
  +-- 090-100 a cryptography guru already shaking hands with Ron, Adi and Len. **;-)**
  +
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 29 11:36:40 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AFFDC76D0A; Thu, 29 May 2003 11:36:40 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: X: ossp-pkg/xmldb/x/ team.html team.xmldb xmldb.cgi xmldb....
Message-Id: <20030529093640.AFFDC76D0A@mail.ossp.org>
Date: Thu, 29 May 2003 11:36:40 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-May-2003 11:36:40
  Branch: X                                Handle: -NONE-

  Added files:              (Branch: X)
    ossp-pkg/xmldb/x        team.html team.xmldb xmldb.cgi xmldb.css

  Log:
    [Release Tag: Y]

  Summary:
    Revision    Changes     Path
    1.1.1.1     +8  -0      ossp-pkg/xmldb/x/team.html
    1.1.1.1     +89 -0      ossp-pkg/xmldb/x/team.xmldb
    1.1.1.1     +841 -0     ossp-pkg/xmldb/x/xmldb.cgi
    1.1.1.1     +109 -0     ossp-pkg/xmldb/x/xmldb.css
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/xmldb/x/team.html
  ============================================================================
  $ cvs diff -u -r0 -r1.1.1.1 x/team.html
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xmldb/x/team.xmldb
  ============================================================================
  $ cvs diff -u -r0 -r1.1.1.1 x/team.xmldb
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xmldb/x/xmldb.cgi
  ============================================================================
  $ cvs diff -u -r0 -r1.1.1.1 x/xmldb.cgi
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xmldb/x/xmldb.css
  ============================================================================
  $ cvs diff -u -r0 -r1.1.1.1 x/xmldb.css
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 29 11:38:34 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 811F976D0A; Thu, 29 May 2003 11:38:33 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/xmldb/ TODO team.html team.xmldb xmldb.cgi xmldb....
Message-Id: <20030529093833.811F976D0A@mail.ossp.org>
Date: Thu, 29 May 2003 11:38:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-May-2003 11:38:33
  Branch: HEAD                             Handle: 2003052910383101

  Added files:
    ossp-pkg/xmldb          TODO team.html team.xmldb xmldb.cgi xmldb.css

  Log:
    finally add the OSSP xmldb from last year to CVS to make sure its
    source is not lost over time

  Summary:
    Revision    Changes     Path
    1.1         +4  -0      ossp-pkg/xmldb/TODO
    1.1         +8  -0      ossp-pkg/xmldb/team.html
    1.1         +89 -0      ossp-pkg/xmldb/team.xmldb
    1.1         +841 -0     ossp-pkg/xmldb/xmldb.cgi
    1.1         +109 -0     ossp-pkg/xmldb/xmldb.css
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/xmldb/TODO
  ============================================================================
  $ cvs diff -u -r0 -r1.1 TODO
  --- /dev/null	2003-05-29 11:38:32.000000000 +0200
  +++ TODO	2003-05-29 11:38:32.000000000 +0200
  @@ -0,0 +1,4 @@
  +- new record dialog
  +- CSS optical look
  +- scrolling implementieren
  +- print version?
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xmldb/team.html
  ============================================================================
  $ cvs diff -u -r0 -r1.1 team.html
  --- /dev/null	2003-05-29 11:38:32.000000000 +0200
  +++ team.html	2003-05-29 11:38:32.000000000 +0200
  @@ -0,0 +1,8 @@
  +<html>
  +  <head>
  +    @HEAD@
  +  </head>
  +  <body bgcolor="#cccccc">
  +    @BODY@
  +  </body>
  +</html>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xmldb/team.xmldb
  ============================================================================
  $ cvs diff -u -r0 -r1.1 team.xmldb
  --- /dev/null	2003-05-29 11:38:32.000000000 +0200
  +++ team.xmldb	2003-05-29 11:38:32.000000000 +0200
  @@ -0,0 +1,89 @@
  +<!--
  +
  +team.xmldb -- Cable & Wireless, Internet Services, North Europe, Team Database
  +
  +-->
  +
  +<xmldb>
  +  <config>
  +    <title major="Cable &amp; Wireless Internet Services Europe" minor="Team Member Information"/>
  +    <contact name="Ralf S. Engelschall" email="ralf.engelschall@cw.com"/>
  +    <copyright year="2002" holder="Cable &amp; Wireless Deutschland GmbH"/>
  +  </config>
  +  <access>
  +    <user id="-" password="-" access="RO"/>
  +    <user id="is" password="IS" access="RW"/>
  +  </access>
  +  <schema>
  +    <attrib id="en" name="Employee Number" match="re:^(\d+)$" index="yes" list="no"/>
  +    <attrib id="realname" name="Name" match="re:.+" index="yes" list="yes"/>
  +    <attrib id="position" name="Position" match="mc:Manager|Teamleader|Engineer|Trainee" index="no" list="yes"/>
  +    <attrib id="team" name="Team" match="re:.+" index="no" list="no"/>
  +    <attrib id="location" name="Location" match="mc:Swindon|Munich|Stockholm|Genova|Moscow" index="no" list="yes"/>
  +    <attrib id="contract" name="Contract" match="mc:full-time|part-time" index="no" list="no"/>
  +    <attrib id="nickname" name="Nick Name" match="re:^[a-z][a-zA-Z0-9-]*$" index="no" list="no"/>
  +    <attrib id="email" name="Email Address" match="re:.+@.+" index="yes" list="yes"/>
  +    <attrib id="office" name="Office Number" match="re:^(\+[0-9-]+|-)$" index="no" list="yes"/>
  +    <attrib id="mobile" name="Mobile Number" match="re:^(\+[0-9-]+|-)$" index="no" list="yes"/>
  +    <attrib id="fax" name="Fax Number" match="re:^(\+[0-9-]+|-)$" index="no" list="no"/>
  +    <attrib id="homepage" name="Homepage" match="re:^(http|ftp)://.+$" index="no" list="no"/>
  +    <attrib id="skill-GN-MGT" name="General: Management" match="mc:unknown|beginner|intermediate|advanced|expert" index="no" list="no"/>
  +    <attrib id="skill-GN-EDU" name="General: Education" match="mc:unknown|beginner|intermediate|advanced|expert" index="no" list="no"/>
  +    <attrib id="skill-GN-SCI" name="General: Computer Science" match="mc:unknown|beginner|intermediate|advanced|expert" index="no" list="no"/>
  +    <attrib id="skill-ISP-PM" name="ISP: Project Management" match="mc:unknown|beginner|intermediate|advanced|expert" index="no" list="no"/>
  +    <attrib id="skill-ISP-DSI" name="ISP: Datacenter Infrastructure" match="mc:unknown|beginner|intermediate|advanced|expert" index="no" list="no"/>
  +    <attrib id="skill-ISP-BB" name="ISP: Backbone" match="mc:unknown|beginner|intermediate|advanced|expert" index="no" list="no"/>
  +    <attrib id="skill-LG-SCRT" name="Languages: Command" match="mc:unknown|beginner|intermediate|advanced|expert" index="no" list="no"/>
  +    <attrib id="skill-LG-PROG" name="Languages: Programming" match="mc:unknown|beginner|intermediate|advanced|expert" index="no" list="no"/>
  +    <attrib id="skill-LG-MARK" name="Languages: Markup" match="mc:unknown|beginner|intermediate|advanced|expert" index="no" list="no"/>
  +    <attrib id="skill-AP-FRNT" name="Applications: Frontend" match="mc:unknown|beginner|intermediate|advanced|expert" index="no" list="no"/>
  +    <attrib id="skill-AP-MIDL" name="Applications: Middleware" match="mc:unknown|beginner|intermediate|advanced|expert" index="no" list="no"/>
  +    <attrib id="skill-AP-BACK" name="Applications: Backend" match="mc:unknown|beginner|intermediate|advanced|expert" index="no" list="no"/>
  +    <attrib id="skill-OS-UNIX" name="Operating Systems: Unix" match="mc:unknown|beginner|intermediate|advanced|expert" index="no" list="no"/>
  +    <attrib id="skill-OS-WIN" name="Operating Systems: Windows" match="mc:unknown|beginner|intermediate|advanced|expert" index="no" list="no"/>
  +    <attrib id="skill-NE-OL57" name="Networking: OSI 5-7" match="mc:unknown|beginner|intermediate|advanced|expert" index="no" list="no"/>
  +    <attrib id="skill-NE-OL34" name="Networking: OSI 3-4" match="mc:unknown|beginner|intermediate|advanced|expert" index="no" list="no"/>
  +    <attrib id="skill-NE-OL12" name="Networking: OSI 1-2" match="mc:unknown|beginner|intermediate|advanced|expert" index="no" list="no"/>
  +    <attrib id="skill-HW-SERV" name="Hardware: Server" match="mc:unknown|beginner|intermediate|advanced|expert" index="no" list="no"/>
  +    <attrib id="skill-HW-STOR" name="Hardware: Storage" match="mc:unknown|beginner|intermediate|advanced|expert" index="no" list="no"/>
  +    <attrib id="skill-HW-NET" name="Hardware: Network" match="mc:unknown|beginner|intermediate|advanced|expert" index="no" list="no"/>
  +    <attrib id="skill-specials" name="Special Skills" match="re:.*" index="no" list="no"/>
  +  </schema>
  +  <records>
  +    <record en="29021" realname="Peter Kajinski" position="Manager" team="Germany" location="Munich" contract="full-time" nickname="peter" office="+49-89-92699-172" mobile="+49-172-8275676" fax="+49-89-92699-808" email="peter.kajinski@de.cw.com" homepage="http://www.cw.com/de" skill-GN-MGT="unknown" skill-GN-EDU="unknown" skill-GN-SCI="unknown" skill-ISP-PM="unknown" skill-ISP-DSI="unknown" skill-ISP-BB="unknown" skill-LG-SCRT="unknown" skill-LG-PROG="unknown" skill-LG-MARK="unknown" skill-AP-FRNT="unknown" skill-AP-MIDL="unknown" skill-AP-BACK="unknown" skill-OS-UNIX="unknown" skill-OS-WIN="unknown" skill-NE-OL57="unknown" skill-NE-OL34="unknown" skill-NE-OL12="unknown" skill-HW-SERV="unknown" skill-HW-STOR="unknown" skill-HW-NET="unknown" skill-specials=""/>
  +    <record en="29063" realname="Christoph Schug" position="Teamleader" team="Hosting" location="Munich" contract="full-time" nickname="cschug" office="+49-89-92699-267" mobile="+49-172-8979739" fax="+49-89-92699-808" email="cschug@de.cw.com" homepage="http://www.cw.com/de/" skill-GN-MGT="intermediate" skill-GN-EDU="intermediate" skill-GN-SCI="advanced" skill-ISP-PM="advanced" skill-ISP-DSI="expert" skill-ISP-BB="intermediate" skill-LG-SCRT="advanced" skill-LG-PROG="advanced" skill-LG-MARK="advanced" skill-AP-FRNT="advanced" skill-AP-MIDL="advanced" skill-AP-BACK="advanced" skill-OS-UNIX="expert" skill-OS-WIN="intermediate" skill-NE-OL57="expert" skill-NE-OL34="expert" skill-NE-OL12="advanced" skill-HW-SERV="expert" skill-HW-STOR="advanced" skill-HW-NET="advanced" skill-specials="OpenPKG, Solaris, Debian GNU/Linux, NetApp Filer, Scripting and Programming"/>
  +    <record en="29037" realname="Christian Muschiol" position="Engineer" team="Hosting" location="Munich" contract="full-time" nickname="cmuschio" office="+49-89-92699-124" mobile="+49-172-8979702" fax="+49-89-92699-808" email="christian.muschiol@cw.com" homepage="http://www.cw.com/" skill-GN-MGT="unknown" skill-GN-EDU="unknown" skill-GN-SCI="unknown" skill-ISP-PM="unknown" skill-ISP-DSI="unknown" skill-ISP-BB="unknown" skill-LG-SCRT="unknown" skill-LG-PROG="unknown" skill-LG-MARK="unknown" skill-AP-FRNT="unknown" skill-AP-MIDL="unknown" skill-AP-BACK="unknown" skill-OS-UNIX="unknown" skill-OS-WIN="unknown" skill-NE-OL57="unknown" skill-NE-OL34="unknown" skill-NE-OL12="unknown" skill-HW-SERV="unknown" skill-HW-STOR="unknown" skill-HW-NET="unknown" skill-specials=""/>
  +    <record en="29118" realname="Markus Sander" position="Engineer" team="Hosting" location="Munich" contract="full-time" nickname="msander" office="+49-89-92699-276" mobile="+49-172-8967304" fax="+49-89-92699-808" email="markus.sander@cw.com" homepage="http://www.cw.com/" skill-GN-MGT="unknown" skill-GN-EDU="unknown" skill-GN-SCI="unknown" skill-ISP-PM="unknown" skill-ISP-DSI="unknown" skill-ISP-BB="unknown" skill-LG-SCRT="unknown" skill-LG-PROG="unknown" skill-LG-MARK="unknown" skill-AP-FRNT="unknown" skill-AP-MIDL="unknown" skill-AP-BACK="unknown" skill-OS-UNIX="unknown" skill-OS-WIN="unknown" skill-NE-OL57="unknown" skill-NE-OL34="unknown" skill-NE-OL12="unknown" skill-HW-SERV="unknown" skill-HW-STOR="unknown" skill-HW-NET="unknown" skill-specials=""/>
  +    <record en="29078" realname="Manuel Hendel" position="Engineer" team="Hosting" location="Munich" contract="full-time" nickname="mhendel" office="+49-89-92699-385" mobile="+49-170-2454417" fax="+49-89-92699-808" email="manuel.hendel@de.cw.com" homepage="http://www.cw.com/" skill-GN-MGT="advanced" skill-GN-EDU="advanced" skill-GN-SCI="advanced" skill-ISP-PM="advanced" skill-ISP-DSI="intermediate" skill-ISP-BB="beginner" skill-LG-SCRT="beginner" skill-LG-PROG="beginner" skill-LG-MARK="intermediate" skill-AP-FRNT="advanced" skill-AP-MIDL="advanced" skill-AP-BACK="advanced" skill-OS-UNIX="advanced" skill-OS-WIN="intermediate" skill-NE-OL57="intermediate" skill-NE-OL34="intermediate" skill-NE-OL12="intermediate" skill-HW-SERV="advanced" skill-HW-STOR="intermediate" skill-HW-NET="intermediate" skill-specials=""/>
  +    <record en="29017" realname="Jost Blachnitzky" position="Engineer" team="Hosting" location="Munich" contract="part-time" nickname="scholli" office="+49-89-92699-128" mobile="+49-172-8275654" fax="+49-89-92699-808" email="jost.blachnitzky@de.cw.net" homepage="http://www.cw.com/" skill-GN-MGT="intermediate" skill-GN-EDU="intermediate" skill-GN-SCI="advanced" skill-ISP-PM="advanced" skill-ISP-DSI="intermediate" skill-ISP-BB="intermediate" skill-LG-SCRT="advanced" skill-LG-PROG="advanced" skill-LG-MARK="advanced" skill-AP-FRNT="advanced" skill-AP-MIDL="advanced" skill-AP-BACK="advanced" skill-OS-UNIX="intermediate" skill-OS-WIN="advanced" skill-NE-OL57="advanced" skill-NE-OL34="intermediate" skill-NE-OL12="intermediate" skill-HW-SERV="intermediate" skill-HW-STOR="beginner" skill-HW-NET="intermediate" skill-specials="real, netshow, Quicktime, delphi, PERL, MySQL"/>
  +    <record en="29461" realname="Thomas Rohde" position="Engineer" team="Hosting" location="Munich" contract="part-time" nickname="rohde" office="+49-89-92699-193" mobile="+49-172-8275655" fax="+49-89-92699-808" email="thomas.rohde@cw.com" homepage="http://www.cw.com/de/" skill-GN-MGT="advanced" skill-GN-EDU="advanced" skill-GN-SCI="intermediate" skill-ISP-PM="advanced" skill-ISP-DSI="advanced" skill-ISP-BB="advanced" skill-LG-SCRT="intermediate" skill-LG-PROG="intermediate" skill-LG-MARK="expert" skill-AP-FRNT="expert" skill-AP-MIDL="expert" skill-AP-BACK="advanced" skill-OS-UNIX="advanced" skill-OS-WIN="expert" skill-NE-OL57="expert" skill-NE-OL34="advanced" skill-NE-OL12="advanced" skill-HW-SERV="expert" skill-HW-STOR="intermediate" skill-HW-NET="advanced" skill-specials="PHP, CRM/CSM Appl., DNS, Linux, Win"/>
  +    <record en="29125" realname="Klaus Gruber" position="Engineer" team="Hosting" location="Munich" contract="full-time" nickname="kgruber" office="+49-89-92699-160" mobile="+49-172-8204010" fax="+49-89-92699-808" email="klaus.gruber@cw.com" homepage="http://www.cw.com/" skill-GN-MGT="unknown" skill-GN-EDU="unknown" skill-GN-SCI="unknown" skill-ISP-PM="unknown" skill-ISP-DSI="unknown" skill-ISP-BB="unknown" skill-LG-SCRT="unknown" skill-LG-PROG="unknown" skill-LG-MARK="unknown" skill-AP-FRNT="unknown" skill-AP-MIDL="unknown" skill-AP-BACK="unknown" skill-OS-UNIX="unknown" skill-OS-WIN="unknown" skill-NE-OL57="unknown" skill-NE-OL34="unknown" skill-NE-OL12="unknown" skill-HW-SERV="unknown" skill-HW-STOR="unknown" skill-HW-NET="unknown" skill-specials=""/>
  +    <record en="29081" realname="Alexander Wägner" position="Engineer" team="Hosting" location="Munich" contract="full-time" nickname="awaegner" office="+49-89-92699-379" mobile="+49-172-8914360" fax="+49-89-92699-808" email="alexander.waegner@cw.com" homepage="http://www.cw.com/" skill-GN-MGT="unknown" skill-GN-EDU="unknown" skill-GN-SCI="unknown" skill-ISP-PM="unknown" skill-ISP-DSI="unknown" skill-ISP-BB="unknown" skill-LG-SCRT="unknown" skill-LG-PROG="unknown" skill-LG-MARK="unknown" skill-AP-FRNT="unknown" skill-AP-MIDL="unknown" skill-AP-BACK="unknown" skill-OS-UNIX="unknown" skill-OS-WIN="unknown" skill-NE-OL57="unknown" skill-NE-OL34="unknown" skill-NE-OL12="unknown" skill-HW-SERV="unknown" skill-HW-STOR="unknown" skill-HW-NET="unknown" skill-specials=""/>
  +    <record en="29051" realname="Peter Brudna" position="Engineer" team="Hosting" location="Munich" contract="full-time" nickname="pbrudna" office="+49-89-92699-148" mobile="+0" fax="+49-89-92699-808" email="peter.brudna@cw.com" homepage="http://www.cw.com/de/" skill-GN-MGT="intermediate" skill-GN-EDU="intermediate" skill-GN-SCI="advanced" skill-ISP-PM="intermediate" skill-ISP-DSI="intermediate" skill-ISP-BB="intermediate" skill-LG-SCRT="intermediate" skill-LG-PROG="beginner" skill-LG-MARK="beginner" skill-AP-FRNT="advanced" skill-AP-MIDL="advanced" skill-AP-BACK="advanced" skill-OS-UNIX="intermediate" skill-OS-WIN="intermediate" skill-NE-OL57="intermediate" skill-NE-OL34="intermediate" skill-NE-OL12="intermediate" skill-HW-SERV="advanced" skill-HW-STOR="beginner" skill-HW-NET="intermediate" skill-specials=""/>
  +    <record en="29134" realname="Christian Botta" position="Teamleader" team="Database" location="Munich" contract="full-time" nickname="cbotta" office="+49-89-92699-348" mobile="+49-172-8908039" fax="+49-89-92699-811" email="christian.botta@cw.com" homepage="http://www.cw.com/" skill-GN-MGT="advanced" skill-GN-EDU="advanced" skill-GN-SCI="expert" skill-ISP-PM="expert" skill-ISP-DSI="intermediate" skill-ISP-BB="beginner" skill-LG-SCRT="intermediate" skill-LG-PROG="advanced" skill-LG-MARK="advanced" skill-AP-FRNT="advanced" skill-AP-MIDL="intermediate" skill-AP-BACK="intermediate" skill-OS-UNIX="advanced" skill-OS-WIN="advanced" skill-NE-OL57="intermediate" skill-NE-OL34="intermediate" skill-NE-OL12="beginner" skill-HW-SERV="intermediate" skill-HW-STOR="intermediate" skill-HW-NET="beginner" skill-specials="Oracle, MySQL, Project Management, Data Modelling, Perl, OOA, OOD, Java"/>
  +    <record en="29109" realname="Stephan Gans" position="Engineer" team="Database" location="Munich" contract="full-time" nickname="sgans" office="+49-89-92699-273" mobile="+49-172-8948583" fax="+49-89-92699-811" email="stephan.gans@cw.com" homepage="http://www.cw.com/" skill-GN-MGT="intermediate" skill-GN-EDU="expert" skill-GN-SCI="expert" skill-ISP-PM="intermediate" skill-ISP-DSI="beginner" skill-ISP-BB="beginner" skill-LG-SCRT="intermediate" skill-LG-PROG="advanced" skill-LG-MARK="intermediate" skill-AP-FRNT="advanced" skill-AP-MIDL="advanced" skill-AP-BACK="expert" skill-OS-UNIX="advanced" skill-OS-WIN="advanced" skill-NE-OL57="intermediate" skill-NE-OL34="intermediate" skill-NE-OL12="intermediate" skill-HW-SERV="intermediate" skill-HW-STOR="intermediate" skill-HW-NET="intermediate" skill-specials="Oracle Certified Professional, Java, C++, Perl, Database-Design"/>
  +    <record en="29107" realname="Sebastian Gierth" position="Engineer" team="Database" location="Munich" contract="full-time" nickname="sgierth" office="+49-89-92699-356" mobile="+49-172-8219343" fax="+49-89-92699-811" email="sebastian.gierth@cw.com" homepage="http://www.cw.com/" skill-GN-MGT="intermediate" skill-GN-EDU="intermediate" skill-GN-SCI="intermediate" skill-ISP-PM="intermediate" skill-ISP-DSI="intermediate" skill-ISP-BB="intermediate" skill-LG-SCRT="intermediate" skill-LG-PROG="intermediate" skill-LG-MARK="intermediate" skill-AP-FRNT="intermediate" skill-AP-MIDL="intermediate" skill-AP-BACK="intermediate" skill-OS-UNIX="intermediate" skill-OS-WIN="intermediate" skill-NE-OL57="intermediate" skill-NE-OL34="intermediate" skill-NE-OL12="intermediate" skill-HW-SERV="intermediate" skill-HW-STOR="intermediate" skill-HW-NET="intermediate" skill-specials="Oracle DBA"/>
  +    <record en="29115" realname="Christian Scheithauer" position="Engineer" team="Database" location="Munich" contract="full-time" nickname="cscheith" office="+49-89-92699-243" mobile="-" fax="+49-89-92699-811" email="christian.scheithauer@cw.com" homepage="http://www.cw.com/" skill-GN-MGT="intermediate" skill-GN-EDU="intermediate" skill-GN-SCI="beginner" skill-ISP-PM="beginner" skill-ISP-DSI="beginner" skill-ISP-BB="beginner" skill-LG-SCRT="advanced" skill-LG-PROG="beginner" skill-LG-MARK="beginner" skill-AP-FRNT="advanced" skill-AP-MIDL="intermediate" skill-AP-BACK="advanced" skill-OS-UNIX="intermediate" skill-OS-WIN="advanced" skill-NE-OL57="intermediate" skill-NE-OL34="intermediate" skill-NE-OL12="intermediate" skill-HW-SERV="intermediate" skill-HW-STOR="intermediate" skill-HW-NET="intermediate" skill-specials="ORALCE, MS SQL SERVER (MCP), MY SQL"/>
  +    <record en="29002" realname="Andrea Sikeler" position="Engineer" team="Database" location="Munich" contract="part-time" nickname="asikeler" office="+49-89-92699-144" mobile="-" fax="+49-89-92699-811" email="andrea.sikeler@cw.com" homepage="http://www.cw.com/" skill-GN-MGT="beginner" skill-GN-EDU="advanced" skill-GN-SCI="expert" skill-ISP-PM="beginner" skill-ISP-DSI="beginner" skill-ISP-BB="beginner" skill-LG-SCRT="beginner" skill-LG-PROG="intermediate" skill-LG-MARK="beginner" skill-AP-FRNT="beginner" skill-AP-MIDL="beginner" skill-AP-BACK="expert" skill-OS-UNIX="intermediate" skill-OS-WIN="beginner" skill-NE-OL57="beginner" skill-NE-OL34="beginner" skill-NE-OL12="beginner" skill-HW-SERV="beginner" skill-HW-STOR="beginner" skill-HW-NET="beginner" skill-specials="Oracle 8/9i"/>
  +    <record en="29033" realname="Ralf S. Engelschall" position="Teamleader" team="Development" location="Munich" contract="full-time" nickname="rse" office="+49-89-92699-251" mobile="+49-172-8986801" fax="+49-89-92699-808" email="rse@de.cw.com" homepage="http://dev.de.cw.com/" skill-GN-MGT="intermediate" skill-GN-EDU="expert" skill-GN-SCI="expert" skill-ISP-PM="advanced" skill-ISP-DSI="advanced" skill-ISP-BB="intermediate" skill-LG-SCRT="expert" skill-LG-PROG="expert" skill-LG-MARK="expert" skill-AP-FRNT="intermediate" skill-AP-MIDL="expert" skill-AP-BACK="advanced" skill-OS-UNIX="expert" skill-OS-WIN="intermediate" skill-NE-OL57="expert" skill-NE-OL34="expert" skill-NE-OL12="advanced" skill-HW-SERV="advanced" skill-HW-STOR="intermediate" skill-HW-NET="advanced" skill-specials="CS, Unix, sh, C, Perl, HTTP, SSL/TLS, BGP, VRRP"/>
  +    <record en="29137" realname="Thomas Lotterer" position="Engineer" team="Development" location="Munich" contract="part-time" nickname="thl" office="+49-89-92699-121" mobile="+49-172-8908037" fax="+49-89-92699-811" email="thl@dev.de.cw.com" homepage="http://dev.de.cw.com/" skill-GN-MGT="intermediate" skill-GN-EDU="expert" skill-GN-SCI="advanced" skill-ISP-PM="advanced" skill-ISP-DSI="advanced" skill-ISP-BB="advanced" skill-LG-SCRT="advanced" skill-LG-PROG="advanced" skill-LG-MARK="intermediate" skill-AP-FRNT="intermediate" skill-AP-MIDL="advanced" skill-AP-BACK="beginner" skill-OS-UNIX="advanced" skill-OS-WIN="advanced" skill-NE-OL57="advanced" skill-NE-OL34="expert" skill-NE-OL12="expert" skill-HW-SERV="expert" skill-HW-STOR="advanced" skill-HW-NET="advanced" skill-specials="Directory Services"/>
  +    <record en="29149" realname="Michael Schloh" position="Engineer" team="Development" location="Munich" contract="full-time" nickname="msvb" office="+49-89-92699-227" mobile="-" fax="+49-89-92699-811" email="michael.schloh@de.cw.com" homepage="http://dev.de.cw.com/" skill-GN-MGT="intermediate" skill-GN-EDU="advanced" skill-GN-SCI="advanced" skill-ISP-PM="beginner" skill-ISP-DSI="beginner" skill-ISP-BB="beginner" skill-LG-SCRT="unknown" skill-LG-PROG="intermediate" skill-LG-MARK="intermediate" skill-AP-FRNT="advanced" skill-AP-MIDL="advanced" skill-AP-BACK="intermediate" skill-OS-UNIX="intermediate" skill-OS-WIN="intermediate" skill-NE-OL57="advanced" skill-NE-OL34="intermediate" skill-NE-OL12="beginner" skill-HW-SERV="intermediate" skill-HW-STOR="beginner" skill-HW-NET="intermediate" skill-specials="software design advanced"/>
  +    <record en="29139" realname="Peter Smej" position="Engineer" team="Development" location="Munich" contract="full-time" nickname="ps" office="+49-89-92699-407" mobile="+49-172-8908031" fax="+49-89-92699-811" email="peter.smej@de.cw.com" homepage="http://dev.de.cw.com/" skill-GN-MGT="advanced" skill-GN-EDU="advanced" skill-GN-SCI="advanced" skill-ISP-PM="advanced" skill-ISP-DSI="advanced" skill-ISP-BB="advanced" skill-LG-SCRT="advanced" skill-LG-PROG="advanced" skill-LG-MARK="beginner" skill-AP-FRNT="advanced" skill-AP-MIDL="advanced" skill-AP-BACK="advanced" skill-OS-UNIX="advanced" skill-OS-WIN="advanced" skill-NE-OL57="advanced" skill-NE-OL34="advanced" skill-NE-OL12="advanced" skill-HW-SERV="expert" skill-HW-STOR="advanced" skill-HW-NET="advanced" skill-specials=""/>
  +    <record en="00001" realname="Stefan Lotter" position="Trainee" team="Hosting" location="Munich" contract="full-time" nickname="sl" office="+49-89-92699-xxx" mobile="-" fax="+49-89-92699-808" email="stefan.lotter@cw.com" homepage="http://www.cw.com/" skill-GN-MGT="unknown" skill-GN-EDU="unknown" skill-GN-SCI="unknown" skill-ISP-PM="unknown" skill-ISP-DSI="unknown" skill-ISP-BB="unknown" skill-LG-SCRT="unknown" skill-LG-PROG="unknown" skill-LG-MARK="unknown" skill-AP-FRNT="unknown" skill-AP-MIDL="unknown" skill-AP-BACK="unknown" skill-OS-UNIX="unknown" skill-OS-WIN="unknown" skill-NE-OL57="unknown" skill-NE-OL34="unknown" skill-NE-OL12="unknown" skill-HW-SERV="unknown" skill-HW-STOR="unknown" skill-HW-NET="unknown" skill-specials=""/>
  +    <record en="622009" realname="Bo Fjelkner" position="Manager" team="Sweden" location="Stockholm" contract="full-time" nickname="bo" office="+46-8-4599-530" mobile="+46-70-9599430" fax="+46-8-4599-499" email="bo.fjelkner@cw.com" homepage="http://www.cw.com/" skill-GN-MGT="unknown" skill-GN-EDU="unknown" skill-GN-SCI="unknown" skill-ISP-PM="unknown" skill-ISP-DSI="unknown" skill-ISP-BB="unknown" skill-LG-SCRT="unknown" skill-LG-PROG="unknown" skill-LG-MARK="unknown" skill-AP-FRNT="unknown" skill-AP-MIDL="unknown" skill-AP-BACK="unknown" skill-OS-UNIX="unknown" skill-OS-WIN="unknown" skill-NE-OL57="unknown" skill-NE-OL34="unknown" skill-NE-OL12="unknown" skill-HW-SERV="unknown" skill-HW-STOR="unknown" skill-HW-NET="unknown" skill-specials=""/>
  +    <record en="622026" realname="Lars Lyxell" position="Teamleader" team="Unix" location="Stockholm" contract="full-time" nickname="xx" office="+46-8-4599-449" mobile="+46-70-2504449" fax="+46-8-4599-499" email="lars.lyxell@cw.com" homepage="http://www.cw.com/" skill-GN-MGT="unknown" skill-GN-EDU="unknown" skill-GN-SCI="unknown" skill-ISP-PM="unknown" skill-ISP-DSI="unknown" skill-ISP-BB="unknown" skill-LG-SCRT="unknown" skill-LG-PROG="unknown" skill-LG-MARK="unknown" skill-AP-FRNT="unknown" skill-AP-MIDL="unknown" skill-AP-BACK="unknown" skill-OS-UNIX="unknown" skill-OS-WIN="unknown" skill-NE-OL57="unknown" skill-NE-OL34="unknown" skill-NE-OL12="unknown" skill-HW-SERV="unknown" skill-HW-STOR="unknown" skill-HW-NET="unknown" skill-specials=""/>
  +    <record en="622031" realname="Daniel Norin" position="Engineer" team="Unix" location="Stockholm" contract="full-time" nickname="xx" office="+46-8-4599-474" mobile="+46-70-9459946" fax="+46-8-4599-498" email="daniel.norin@cw.com" homepage="http://www.cw.com/" skill-GN-MGT="unknown" skill-GN-EDU="unknown" skill-GN-SCI="unknown" skill-ISP-PM="unknown" skill-ISP-DSI="unknown" skill-ISP-BB="unknown" skill-LG-SCRT="unknown" skill-LG-PROG="unknown" skill-LG-MARK="unknown" skill-AP-FRNT="unknown" skill-AP-MIDL="unknown" skill-AP-BACK="unknown" skill-OS-UNIX="unknown" skill-OS-WIN="unknown" skill-NE-OL57="unknown" skill-NE-OL34="unknown" skill-NE-OL12="unknown" skill-HW-SERV="unknown" skill-HW-STOR="unknown" skill-HW-NET="unknown" skill-specials=""/>
  +    <record en="622012" realname="Bjorn Grabbe" position="Engineer" team="Unix" location="Stockholm" contract="full-time" nickname="xx" office="+46-8-4599-xxx" mobile="+xx-xx-xxxxxx" fax="+46-8-4599-xxx" email="bjorn.grabbe@cw.com" homepage="http://www.cw.com/" skill-GN-MGT="unknown" skill-GN-EDU="unknown" skill-GN-SCI="unknown" skill-ISP-PM="unknown" skill-ISP-DSI="unknown" skill-ISP-BB="unknown" skill-LG-SCRT="unknown" skill-LG-PROG="unknown" skill-LG-MARK="unknown" skill-AP-FRNT="unknown" skill-AP-MIDL="unknown" skill-AP-BACK="unknown" skill-OS-UNIX="unknown" skill-OS-WIN="unknown" skill-NE-OL57="unknown" skill-NE-OL34="unknown" skill-NE-OL12="unknown" skill-HW-SERV="unknown" skill-HW-STOR="unknown" skill-HW-NET="unknown" skill-specials=""/>
  +    <record en="622028" realname="Johanna Moberg" position="Engineer" team="Unix" location="Stockholm" contract="full-time" nickname="xx" office="+46-8-4599-xxx" mobile="+xx-xx-xxxxxx" fax="+46-8-4599-xxx" email="johanna.moberg@cw.com" homepage="http://www.cw.com/" skill-GN-MGT="unknown" skill-GN-EDU="unknown" skill-GN-SCI="unknown" skill-ISP-PM="unknown" skill-ISP-DSI="unknown" skill-ISP-BB="unknown" skill-LG-SCRT="unknown" skill-LG-PROG="unknown" skill-LG-MARK="unknown" skill-AP-FRNT="unknown" skill-AP-MIDL="unknown" skill-AP-BACK="unknown" skill-OS-UNIX="unknown" skill-OS-WIN="unknown" skill-NE-OL57="unknown" skill-NE-OL34="unknown" skill-NE-OL12="unknown" skill-HW-SERV="unknown" skill-HW-STOR="unknown" skill-HW-NET="unknown" skill-specials=""/>
  +    <record en="00002" realname="Olle Back" position="Engineer" team="Windows" location="Stockholm" contract="full-time" nickname="xx" office="+46-8-4599-xxx" mobile="+xx-xx-xxxxxx" fax="+46-8-4599-xxx" email="olle.back@cw.com" homepage="http://www.cw.com/" skill-GN-MGT="unknown" skill-GN-EDU="unknown" skill-GN-SCI="unknown" skill-ISP-PM="unknown" skill-ISP-DSI="unknown" skill-ISP-BB="unknown" skill-LG-SCRT="unknown" skill-LG-PROG="unknown" skill-LG-MARK="unknown" skill-AP-FRNT="unknown" skill-AP-MIDL="unknown" skill-AP-BACK="unknown" skill-OS-UNIX="unknown" skill-OS-WIN="unknown" skill-NE-OL57="unknown" skill-NE-OL34="unknown" skill-NE-OL12="unknown" skill-HW-SERV="unknown" skill-HW-STOR="unknown" skill-HW-NET="unknown" skill-specials=""/>
  +    <record en="622032" realname="Moroni Norin" position="Engineer" team="Windows" location="Stockholm" contract="full-time" nickname="xx" office="+46-8-4599-xxx" mobile="+xx-xx-xxxxxx" fax="+46-8-4599-xxx" email="moroni.norin@cw.com" homepage="http://www.cw.com/" skill-GN-MGT="unknown" skill-GN-EDU="unknown" skill-GN-SCI="unknown" skill-ISP-PM="unknown" skill-ISP-DSI="unknown" skill-ISP-BB="unknown" skill-LG-SCRT="unknown" skill-LG-PROG="unknown" skill-LG-MARK="unknown" skill-AP-FRNT="unknown" skill-AP-MIDL="unknown" skill-AP-BACK="unknown" skill-OS-UNIX="unknown" skill-OS-WIN="unknown" skill-NE-OL57="unknown" skill-NE-OL34="unknown" skill-NE-OL12="unknown" skill-HW-SERV="unknown" skill-HW-STOR="unknown" skill-HW-NET="unknown" skill-specials=""/>
  +    <record en="622038" realname="Claes Sahlström" position="Teamleader" team="Windows" location="Stockholm" contract="full-time" nickname="xx" office="+46-8-4599-461" mobile="+xx-xx-xxxxxx" fax="+46-8-4599-xxx" email="claes.sahlstrom@cw.com" homepage="http://www.cw.com/" skill-GN-MGT="unknown" skill-GN-EDU="unknown" skill-GN-SCI="unknown" skill-ISP-PM="unknown" skill-ISP-DSI="unknown" skill-ISP-BB="unknown" skill-LG-SCRT="unknown" skill-LG-PROG="unknown" skill-LG-MARK="unknown" skill-AP-FRNT="unknown" skill-AP-MIDL="unknown" skill-AP-BACK="unknown" skill-OS-UNIX="unknown" skill-OS-WIN="unknown" skill-NE-OL57="unknown" skill-NE-OL34="unknown" skill-NE-OL12="unknown" skill-HW-SERV="unknown" skill-HW-STOR="unknown" skill-HW-NET="unknown" skill-specials=""/>
  +    <record en="622017" realname="Rickard Holmblad" position="Engineer" team="Windows" location="Stockholm" contract="full-time" nickname="xx" office="+46-8-4599-437" mobile="+46-70-841543" fax="+46-8-4599-400" email="richard.holmblad@cw.com" homepage="http://www.cw.com/" skill-GN-MGT="unknown" skill-GN-EDU="unknown" skill-GN-SCI="unknown" skill-ISP-PM="unknown" skill-ISP-DSI="unknown" skill-ISP-BB="unknown" skill-LG-SCRT="unknown" skill-LG-PROG="unknown" skill-LG-MARK="unknown" skill-AP-FRNT="advanced" skill-AP-MIDL="advanced" skill-AP-BACK="advanced" skill-OS-UNIX="unknown" skill-OS-WIN="expert" skill-NE-OL57="unknown" skill-NE-OL34="unknown" skill-NE-OL12="unknown" skill-HW-SERV="advanced" skill-HW-STOR="advanced" skill-HW-NET="unknown" skill-specials="Lotus Domino"/>
  +    <record en="00003" realname="Pompom Sonnfors" position="Engineer" team="Windows" location="Stockholm" contract="full-time" nickname="xx" office="+46-8-4599-xxx" mobile="+xx-xx-xxxxxx" fax="+46-7-4599-xxx" email="pompom.sonnfors@cw.com" homepage="http://www.cw.com/" skill-GN-MGT="unknown" skill-GN-EDU="unknown" skill-GN-SCI="unknown" skill-ISP-PM="unknown" skill-ISP-DSI="unknown" skill-ISP-BB="unknown" skill-LG-SCRT="unknown" skill-LG-PROG="unknown" skill-LG-MARK="unknown" skill-AP-FRNT="unknown" skill-AP-MIDL="unknown" skill-AP-BACK="unknown" skill-OS-UNIX="unknown" skill-OS-WIN="unknown" skill-NE-OL57="unknown" skill-NE-OL34="unknown" skill-NE-OL12="unknown" skill-HW-SERV="unknown" skill-HW-STOR="unknown" skill-HW-NET="unknown" skill-specials=""/>
  +    <record en="00004" realname="Robert von Bismarck" position="Manager" team="Switzerland" location="Genova" contract="full-time" nickname="robert" office="-" mobile="-" fax="-" email="robert.vonbismarck@cw.com" homepage="http://www.cw.com/ch/" skill-GN-MGT="unknown" skill-GN-EDU="unknown" skill-GN-SCI="unknown" skill-ISP-PM="unknown" skill-ISP-DSI="unknown" skill-ISP-BB="unknown" skill-LG-SCRT="unknown" skill-LG-PROG="unknown" skill-LG-MARK="unknown" skill-AP-FRNT="unknown" skill-AP-MIDL="unknown" skill-AP-BACK="unknown" skill-OS-UNIX="unknown" skill-OS-WIN="unknown" skill-NE-OL57="unknown" skill-NE-OL34="unknown" skill-NE-OL12="unknown" skill-HW-SERV="unknown" skill-HW-STOR="unknown" skill-HW-NET="unknown" skill-specials=""/>
  +    <record en="00005" realname="Aurelien Grosshans" position="Engineer" team="Switzerland" location="Genova" contract="full-time" nickname="xx" office="-" mobile="-" fax="-" email="arielien.grosshans@cw.com" homepage="http://www.cw.com/ch/" skill-GN-MGT="unknown" skill-GN-EDU="unknown" skill-GN-SCI="unknown" skill-ISP-PM="unknown" skill-ISP-DSI="unknown" skill-ISP-BB="unknown" skill-LG-SCRT="unknown" skill-LG-PROG="unknown" skill-LG-MARK="unknown" skill-AP-FRNT="unknown" skill-AP-MIDL="unknown" skill-AP-BACK="unknown" skill-OS-UNIX="unknown" skill-OS-WIN="unknown" skill-NE-OL57="unknown" skill-NE-OL34="unknown" skill-NE-OL12="unknown" skill-HW-SERV="unknown" skill-HW-STOR="unknown" skill-HW-NET="unknown" skill-specials=""/>
  +    <record en="00006" realname="Julien Mabillard" position="Engineer" team="Switzerland" location="Genova" contract="full-time" nickname="jmab" office="+41-22-87984-00" mobile="+41-79-5413725" fax="-" email="julien.mabillard@cw.com" homepage="http://www.cw.com/ch/" skill-GN-MGT="unknown" skill-GN-EDU="unknown" skill-GN-SCI="unknown" skill-ISP-PM="unknown" skill-ISP-DSI="unknown" skill-ISP-BB="unknown" skill-LG-SCRT="unknown" skill-LG-PROG="unknown" skill-LG-MARK="unknown" skill-AP-FRNT="unknown" skill-AP-MIDL="unknown" skill-AP-BACK="unknown" skill-OS-UNIX="unknown" skill-OS-WIN="unknown" skill-NE-OL57="unknown" skill-NE-OL34="unknown" skill-NE-OL12="unknown" skill-HW-SERV="unknown" skill-HW-STOR="unknown" skill-HW-NET="unknown" skill-specials=""/>
  +    <record en="622528" realname="Denis Serechenko" position="Manager" team="Russia" location="Moscow" contract="full-time" nickname="xx" office="+7-095-258-04-50" mobile="+7-095-773-65-54" fax="+7-095-258-04-49" email="denis.serechenko@cw.com" homepage="http://www.cw.com/" skill-GN-MGT="unknown" skill-GN-EDU="unknown" skill-GN-SCI="unknown" skill-ISP-PM="unknown" skill-ISP-DSI="unknown" skill-ISP-BB="unknown" skill-LG-SCRT="unknown" skill-LG-PROG="unknown" skill-LG-MARK="unknown" skill-AP-FRNT="unknown" skill-AP-MIDL="unknown" skill-AP-BACK="unknown" skill-OS-UNIX="unknown" skill-OS-WIN="unknown" skill-NE-OL57="unknown" skill-NE-OL34="unknown" skill-NE-OL12="unknown" skill-HW-SERV="unknown" skill-HW-STOR="unknown" skill-HW-NET="unknown" skill-specials=""/>
  +  </records>
  +</xmldb>
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xmldb/xmldb.cgi
  ============================================================================
  $ cvs diff -u -r0 -r1.1 xmldb.cgi
  --- /dev/null	2003-05-29 11:38:32.000000000 +0200
  +++ xmldb.cgi	2003-05-29 11:38:33.000000000 +0200
  @@ -0,0 +1,841 @@
  +#!/e/is/bin/perl
  +##
  +##  xmldb.cgi -- XML Database Engine
  +##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +
  +#   requirements
  +require 5.006;
  +use IO;               # standard in Perl 5.6
  +use POSIX;            # standard in Perl 5.6
  +use CGI;              # standard in Perl 5.6
  +use Fcntl ':flock';   # standard in Perl 5.6
  +
  +use Data::Dumper;
  +
  +#   program configuration
  +my $MY = {
  +    PROG_NAME => 'OSSP xmldb',
  +    PROG_VERS => '0.1.0',
  +    PROG_DESC => 'XML Database CGI Engine',
  +    PROG_HOME => 'http://www.ossp.org/pkg/tool/xmldb/',
  +    TEMPLATE  => "<html>\n<head>\n\@HEAD\@\n</head>\n<body>\n\@BODY\@\n</body></html>"
  +};
  +
  +#   switch to unbuffered output
  +$|++;
  +
  +#   adjust CGI environment to make sure that self-referencing
  +#   URLs go again through the direct URL of the MCT file!!
  +$ENV{SCRIPT_NAME} = $ENV{PATH_INFO};
  +delete $ENV{REQUEST_URI};
  +
  +#   remove and remember GET query strings
  +my $qs = '';
  +if ($ENV{QUERY_STRING} ne '') {
  +    $qs = $ENV{QUERY_STRING};
  +    delete $ENV{QUERY_STRING};
  +}
  +
  +#   establish CGI object
  +my $cgi = new CGI;
  +
  +#   re-insert GET query strings into CGI environment
  +if ($qs ne '') {
  +    if ($qs =~ m|^([^=]+)=([^=]+)$|s) {
  +        $cgi->param("action", "view");
  +        $cgi->param("field", &url_unescape($1));
  +        $cgi->param("key", &url_unescape($2));
  +    }
  +}
  +
  +#   generate an HTTP response
  +sub http_response {
  +    my ($head, $body) = @_;
  +
  +    #   fill in template page
  +    my $response = $MY->{TEMPLATE};
  +    $response =~ s|\@HEAD\@|$head|sg;
  +    $response =~ s|\@BODY\@|$body|sg;
  +
  +    #   prepend with HTTP header
  +    $response = $cgi->header(
  +        -type             => 'text/html',
  +        -expires          => 'now', 
  +        '-Content-length' => length($response)
  +    ) . $response;
  +
  +    return $response;
  +}
  +
  +#   activate a general error handler
  +$SIG{__DIE__} = sub {
  +    my ($err) = @_;
  +
  +    $err =~ s|at\s+\S+\s+line\s+(\d+)|(line $1)|s;
  +    $err =~ s|\n|<br>\n|sg;
  +    print STDOUT &http_response(
  +        "<title>XMLDB ERROR</title>",
  +        "<h1>XMLDB ERROR</h1>\n" .
  +        "<pre>$err</pre>\n"
  +    );
  +    exit(0);
  +};
  +
  +#   XML escape/unescape
  +sub xml_escape {
  +    my ($str) = @_;
  +    $str =~ s|&|&amp;|sg;
  +    $str =~ s|<|&lt;|sg;
  +    $str =~ s|>|&gt;|sg;
  +    $str =~ s|"|&quot;|sg;
  +    return $str;
  +}
  +sub xml_unescape {
  +    my ($str) = @_;
  +    $str =~ s|&amp;|&|sg;
  +    $str =~ s|&lt;|<|sg;
  +    $str =~ s|&gt;|>|sg;
  +    $str =~ s|&quot;|"|sg;
  +    return $str;  
  +}   
  +
  +#   import database
  +sub db_import {
  +    my ($file) = @_;
  +
  +    #   read XML file
  +    my $fh = new IO::File "<$file"
  +        || die "unable to open database \"$file\" for reading";
  +    my $xml = '';
  +    $xml .= $_ while (<$fh>);
  +    $fh->close;
  +
  +    #   parse XML
  +    my $db = {
  +        'TEXT'   => { 'PROLOG' => '', 'EPILOG' => '' },
  +        'ORDER'  => { 'USER' => undef, 'ATTRIB' => undef, 'RECORD' => undef },
  +        'INDEX'  => { 'USER' => {}, 'ATTRIB' => {}, 'RECORD' => {} },
  +        'CONFIG' => {},
  +        'USER'   => [],
  +        'ATTRIB' => [],
  +        'RECORD' => [],
  +    };
  +    if ($xml =~ m|^(.*?)<xmldb>(.*?)</xmldb>(.*)$|s) {
  +        $db->{TEXT}->{PROLOG} = $1;
  +        $xml = $2;
  +        $db->{TEXT}->{EPILOG} = $3;
  +    }
  +    else {
  +        die "invalid XML markup in database file \"$file\"";
  +    }
  +    $xml =~ s|<config>(.*?)</config>|&parse_config($1), ''|sge;
  +    sub parse_config {
  +        my ($xml) = @_;
  +        $xml =~ s|<([a-z][a-z0-9_-]*)((?:\s+[a-zA-Z][a-zA-Z0-9-]*="[^"]*")+)/>|&parse_config_entry($1, $2), ''|sge;
  +        sub parse_config_entry {
  +            my ($tag, $xml) = @_;
  +            $db->{CONFIG}->{$tag} = {};
  +	    while ($xml =~ s|^\s*([a-zA-Z][a-zA-Z0-9-]*)="([^"]*)"\s*||) {
  +	        $db->{CONFIG}->{$tag}->{$1} = &xml_unescape($2);
  +	    }
  +        }
  +    }
  +    $xml =~ s|<user((?:\s+[a-zA-Z][a-zA-Z0-9-]*="[^"]*")+)/>|&parse_user($1), ''|sge;
  +    $xml =~ s|<attrib((?:\s+[a-zA-Z][a-zA-Z0-9-]*="[^"]*")+)/>|&parse_attrib($1), ''|sge;
  +    $xml =~ s|<record((?:\s+[a-zA-Z][a-zA-Z0-9-]*="[^"]*")+)/>|&parse_record($1), ''|sge;
  +    sub parse_user {
  +        my ($xml) = @_;
  +        my $user = {};
  +        my $order = [];
  +        while ($xml =~ s|^\s*([a-zA-Z][a-zA-Z0-9-]*)="([^"]*)"\s*||) {
  +            $user->{$1} = &xml_unescape($2);
  +            push(@{$order}, $1);
  +        }
  +        if ($user->{"id"} ne '') {
  +            push(@{$db->{USER}}, $user);
  +            $db->{INDEX}->{USER}->{$user->{"id"}} = $user;
  +            if (not defined($db->{ORDER}->{USER})) {
  +                $db->{ORDER}->{USER} = $order;
  +            }
  +        }
  +    }
  +    sub parse_attrib {
  +        my ($xml) = @_;
  +        my $attrib = {};
  +        my $order = [];
  +        while ($xml =~ s|^\s*([a-zA-Z][a-zA-Z0-9-]*)="([^"]*)"\s*||) {
  +            $attrib->{$1} = &xml_unescape($2);
  +            push(@{$order}, $1);
  +        }
  +        if ($attrib->{"id"} ne '') {
  +            push(@{$db->{ATTRIB}}, $attrib);
  +            $db->{INDEX}->{ATTRIB}->{$attrib->{"id"}} = $attrib;
  +            if ($attrib->{"index"} eq 'yes') {
  +                $db->{INDEX}->{RECORD}->{$attrib->{"id"}} = {};
  +            }
  +            if (not defined($db->{ORDER}->{ATTRIB})) {
  +                $db->{ORDER}->{ATTRIB} = $order;
  +            }
  +        }
  +    }
  +    sub parse_record {
  +        my ($xml) = @_;
  +        my $record = {};
  +        my $order = [];
  +        while ($xml =~ s|^\s*([a-zA-Z][a-zA-Z0-9-]*)="([^"]*)"\s*||) {
  +            if (defined($db->{INDEX}->{ATTRIB}->{$1})) {
  +                $record->{$1} = &xml_unescape($2);
  +                if ($db->{INDEX}->{ATTRIB}->{$1}->{"index"} eq 'yes') {
  +                    $db->{INDEX}->{RECORD}->{$1}->{$2} = $record;
  +                }
  +                push(@{$order}, $1);
  +            }
  +        }
  +        push(@{$db->{RECORD}}, $record);
  +        if (not defined($db->{ORDER}->{RECORD})) {
  +            $db->{ORDER}->{RECORD} = $order;
  +        }
  +    }
  +
  +    return $db;
  +}
  +
  +#   export database
  +sub db_export {
  +    my ($db, $file) = @_;
  +
  +    #   read XML file
  +    my $fh = new IO::File "<$file"
  +        || die "unable to open database \"$file\" for reading";
  +    my $old = '';
  +    $old .= $_ while (<$fh>);
  +    $fh->close;
  +
  +    my $out = '';
  +    $out .= $db->{TEXT}->{PROLOG};
  +    $out .= "<xmldb>\n";
  +    $out .= "  <config>\n";
  +    $out .= "    <title major=\"".&xml_escape($db->{CONFIG}->{title}->{major} || "")."\" ".
  +                       "minor=\"".&xml_escape($db->{CONFIG}->{title}->{minor} || "")."\"/>\n";
  +    $out .= "    <contact name=\"".&xml_escape($db->{CONFIG}->{contact}->{name} || "")."\" ".
  +                         "email=\"".&xml_escape($db->{CONFIG}->{contact}->{email} || "")."\"/>\n";
  +    $out .= "    <copyright year=\"".&xml_escape($db->{CONFIG}->{copyright}->{year} || "")."\" ".
  +                         "holder=\"".&xml_escape($db->{CONFIG}->{copyright}->{holder} || "")."\"/>\n";
  +    $out .= "  </config>\n";
  +    $out .= "  <access>\n";
  +    foreach $user (@{$db->{USER}}) {
  +        $out .= "    <user";
  +        foreach $a (@{$db->{ORDER}->{USER}}) {
  +            $out .= " $a=\"".$user->{$a}."\"";
  +        }
  +        $out .= "/>\n";
  +    }
  +    $out .= "  </access>\n";
  +    $out .= "  <schema>\n";
  +    foreach $attrib (@{$db->{ATTRIB}}) {
  +        $out .= "    <attrib";
  +        foreach $a (@{$db->{ORDER}->{ATTRIB}}) {
  +            $out .= " $a=\"".$attrib->{$a}."\"";
  +        }
  +        $out .= "/>\n";
  +    }
  +    $out .= "  </schema>\n";
  +    $out .= "  <records>\n";
  +    foreach $record (@{$db->{RECORD}}) {
  +        $out .= "    <record";
  +        foreach $r (@{$db->{ORDER}->{RECORD}}) {
  +            $out .= " $r=\"".$record->{$r}."\"";
  +        }
  +        $out .= "/>\n";
  +    }
  +    $out .= "  </records>\n";
  +    $out .= "</xmldb>";
  +    $out .= $db->{TEXT}->{EPILOG};
  +
  +    my $fh = new IO::File ">$file"
  +        or die "unable to open database \"$file\" for writing";
  +    flock($fh, LOCK_EX) or die "(exclusive) lock failed: $!";
  +    $fh->print($out);
  +    $fh->flush();
  +    $fh->sync();
  +    flock($fh, LOCK_UN) or die "unlock failed: $!";
  +    $fh->close();
  +
  +    #   read XML file
  +    $fh = new IO::File "<$file"
  +        || die "unable to open database \"$file\" for reading";
  +    my $new = '';
  +    $new .= $_ while (<$fh>);
  +    $fh->close;
  +
  +    if ($new ne $out) {
  +        my $fh = new IO::File ">$file"
  +            or die "unable to open database \"$file\" for writing";
  +        flock($fh, LOCK_EX) or die "(exclusive) lock failed: $!";
  +        $fh->print($old);
  +        $fh->flush();
  +        $fh->sync();
  +        flock($fh, LOCK_UN) or die "unlock failed: $!";
  +        $fh->close();
  +        die "re-read newly written new database and found difference -- restored old database!";  
  +    }
  +
  +    return $out;
  +}
  +
  +#   convert Sugar-style markup text to HTML text
  +sub sug2html {
  +    my ($text) = @_;
  +
  +    #   escape HTML special characters
  +    $text =~ s|&|&amp;|sg;
  +    $text =~ s|<|&lt;|sg;
  +    $text =~ s|>|&gt;|sg;
  +
  +    #   expand Sugar markup
  +    $text =~ s/\|\|(.+?)\|\|/<tt>$1<\/tt>/sg;
  +    $text =~ s|//(.+?)//|<i>$1</i>|sg;
  +    $text =~ s|\*\*(.+?)\*\*|<b>$1</b>|sg;
  +    $text =~ s|-&gt;(.+?)::(.+?)&lt;-|<a href="$2" target="mct-extern">$1</a>|sg;
  +    $text =~ s|-&gt;(.+?)&lt;-|<a href="$1" target="mct-extern">$1</a>|sg;
  +
  +    return $text;
  +}   
  +
  +#   fetch CGI parameters
  +my $action = $cgi->param('action') || 'list';
  +my $xmldb  = $cgi->path_translated(); 
  +
  +my $head = '';
  +my $body = '';
  +
  +#   optionally read HTML page template
  +my $template = $xmldb;
  +$template =~ s|\.xmldb$|.html|s;
  +my $fh = new IO::File "<$template" || die;
  +$MY->{TEMPLATE} = ''; 
  +$MY->{TEMPLATE} .= $_ while (<$fh>);
  +$fh->close();
  +
  +#   import CSS
  +sub addcss {
  +    my ($file) = @_;
  +    $head .= "<style type=\"text/css\"><!--\n";
  +    my $fh = new IO::File "<$file" || die;
  +    $head .= $_ while (<$fh>);
  +    $fh->close();
  +    $head .= "--></style>\n";
  +}
  +my $css = $xmldb;
  +$css =~ s|\.xmldb$|.css|s;
  +if (-f "$css") {
  +    &addcss("$css");
  +}
  +if (-f "xmldb.css") {
  +    &addcss("xmldb.css");
  +}
  +
  +#   read database
  +my $db = &db_import($xmldb);
  +
  +#################################
  +
  +#$body .= "<pre>";
  +#$body .= Data::Dumper->Dump([$db]);
  +#$body .= "</pre>";
  +
  +#foreach $e (sort(keys(%ENV))) {
  +#    $body .= "$e=$ENV{$e}<br>\n";
  +#}
  +
  +sub url_escape {
  +    my ($text) = @_;
  +    $text =~ s|([ \t&+?:/=\n\r])|sprintf("%%%02x", ord($1))|sge;
  +    return $text;
  +}
  +
  +sub url_unescape {
  +    my ($text) = @_;
  +    $text =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('C', hex($1))/eg;
  +    return $text;
  +}
  +
  +my $sortby = $cgi->param("view.sortby") || "";
  +if ($sortby eq '') {
  +    for ($i = 0; $i < ($#{$db->{ORDER}->{RECORD}}+1); $i++) {
  +        if (($cgi->param("sortby-$i") || '') ne '') {
  +            $sortby = $i;
  +            $action = "list";
  +            last;
  +        }
  +    }
  +}
  +if ($sortby eq '' or $sortby < 0) {
  +    $sortby = 0;
  +}
  +
  +if ($cgi->param('new') ne '') {
  +    $action = "new";
  +}
  +if ($cgi->param('update') ne '') {
  +    $action = "list";
  +}
  +if ($cgi->param('list') ne '') {
  +    $action = "list";
  +}
  +if ($cgi->param('view') ne '') {
  +    $action = "view";
  +}
  +if ($cgi->param('edit') ne '') {
  +    $action = "edit";
  +}
  +if ($cgi->param('edit-save') ne '') {
  +    $action = "edit-save";
  +}
  +
  +my $hint = {};
  +DISPATCH:
  +my $title = "";
  +if ($action eq 'list') {
  +    $body .= "<table border=0 cellspacing=0 cellpadding=2>\n";
  +    $body .= $cgi->hidden(-name => 'view.sortby', -default => [ $sortby ]);
  +
  +    #   determine default list of columns
  +    my $view_field_name = [];
  +    foreach my $a (@{$db->{ATTRIB}}) {
  +        if ($a->{"list"} eq 'yes') {
  +            push(@{$view_field_name}, $a->{"id"});
  +        }
  +    }
  +
  +    #   determine number of fields to view
  +    my $view_fields_list = [];
  +    for ($i = 0; $i < $#{$db->{ORDER}->{RECORD}}+1; $i++) {
  +        push(@{$view_fields_list}, $i);
  +    }
  +    my $view_fields = $cgi->param("view.fields") || "";
  +    if ($view_fields eq '') {
  +        # $view_fields = sprintf("%d", ($#{$db->{ORDER}->{RECORD}}+1)/2);
  +        # $view_fields = 6 if ($view_fields > 6);
  +        $view_fields = sprintf("%d", $#{$view_field_name}+1);
  +    }
  +    elsif ($view_fields < 1) {
  +        $view_fields = 1;
  +    }
  +    elsif ($view_fields > $#{$db->{ORDER}->{RECORD}}+1) {
  +        $view_fields = $#{$db->{ORDER}->{RECORD}}+1;
  +    }
  +
  +    if ($view_fields > $#{$view_field_name}+1) {
  +        foreach my $a (@{$db->{ATTRIB}}) {
  +	    if ($a->{"list"} eq 'no') {
  +                if ($view_fields > $#{$view_field_name}+1) {
  +	            push(@{$view_field_name}, $a->{"id"});
  +                }
  +            }
  +        }
  +    }
  +
  +    $body .= "  <tr>\n";
  +    $body .= "    <td>\n";
  +    $body .= "<span class=\"xmldb-button-update\">" . 
  +             $cgi->submit(-name => 'update', -value => "Update") . 
  +             "</span>\n";
  +    $body .= "    </td>\n";
  +    for ($i = 0; $i < $view_fields; $i++) {
  +        $body .= "    <td>\n";
  +        $body .= "<span class=\"xmldb-button-sort".($i == $sortby ? "-active" :"")."\">";
  +        $body .= $cgi->submit(-name => "sortby-$i", -value => "Sort") ;
  +        $body .= "</span>";
  +        $body .= "    </td>\n";
  +    }
  +    $body .= "  </tr>\n";
  +
  +    $body .= "  <tr>\n";
  +    $body .= "    <td>\n";
  +    # FIXME
  +    # $body .= "<span class=\"xmldb-button\">" . 
  +    #          $cgi->submit(-name => 'new', -value => "New") . 
  +    #          "</span>\n";
  +    $body .= "    </td>\n";
  +    for ($i = 0; $i < $view_fields; $i++) {
  +        my $pattern = $cgi->param("view.field.$i.pattern") || "*";
  +        $body .= "    <td>\n";
  +        $body .= "<span class=\"xmldb-field-pattern".($i == $sortby ? "-active" :"")."\">";
  +	$body .= $cgi->textfield(-name => "view.field.$i.pattern",
  +	                         -default => $pattern,
  +	                         -size => 10, 
  +	                         -maxlength => 20);
  +        $body .= "</span>";
  +        $body .= "    </td>\n";
  +    }
  +    $body .= "  </tr>\n";
  +   
  +    $body .= "  <tr>\n";
  +    $body .= "    <td>\n";
  +    $body .= "<span class=\"xmldb-field-list\">";
  +    $body .= $cgi->popup_menu(-name    => 'view.fields',
  +                              -values  => $view_fields_list,
  +                              -default => $view_fields);
  +    $body .= "</span>";
  +
  +    $body .= "    </td>\n";
  +    for ($i = 0; $i < $view_fields; $i++) {
  +        #my $name = $cgi->param("view.field.$i.name") || $db->{ORDER}->{RECORD}->[$i];
  +        my $name    = $cgi->param("view.field.$i.name") || $view_field_name->[$i];
  +        $body .= "    <td>\n";
  +        $body .= "<span class=\"xmldb-field-select".($i == $sortby ? "-active" :"")."\">";
  +        $body .= $cgi->popup_menu(-name    => "view.field.$i.name",
  +                                  -values  => $db->{ORDER}->{RECORD},
  +                                  -default => $name);
  +        $body .= "</span>";
  +        $body .= "    </td>\n";
  +    }
  +    $body .= "  </tr>\n";
  +
  +    my @result = ();
  +    foreach my $r (@{$db->{RECORD}}) {
  +        my $match = 1;
  +        for ($i = 0; $i < $view_fields; $i++) {
  +             #my $name    = $cgi->param("view.field.$i.name") || $db->{ORDER}->{RECORD}->[$i];
  +             my $name    = $cgi->param("view.field.$i.name") || $view_field_name->[$i];
  +             my $pattern = $cgi->param("view.field.$i.pattern") || "*";
  +             sub pattern_match {
  +                 my ($s, $p) = @_;
  +                 $p =~ s|\*|.*|sg;
  +                 $p =~ s|\?|.|sg;
  +                 return ($s =~ m|^.*$p.*$|is);
  +             }
  +             if (not &pattern_match($r->{$name}, $pattern)) {
  +                 $match = 0;
  +                 last;
  +             }
  +        }
  +        if ($match) {
  +            my $entry = [];
  +            for ($i = 0; $i < $view_fields; $i++) {
  +                #my $name = $cgi->param("view.field.$i.name") || $db->{ORDER}->{RECORD}->[$i];
  +                my $name    = $cgi->param("view.field.$i.name") || $view_field_name->[$i];
  +                push(@{$entry}, $r->{$name});
  +            }
  +            push(@result, $entry);
  +        }
  +    }
  +
  +    my $view_rows = $cgi->param("view.rows") || 20;
  +    my $view_rows_list = [];
  +    for ($i = 1; $i < 100; $i++) {
  +        push(@{$view_rows_list}, $i);
  +    }
  +
  +    if ($sortby > $#result) {
  +        $sortby = $#result;
  +    }
  +    my @sorted = sort { return ($a->[$sortby] cmp $b->[$sortby]); } @result;
  +
  +    my $c = 0;
  +    my $row = 0;
  +    my $scroll = (($#sorted+1) > 10);
  +    foreach my $r (@sorted) {
  +	$body .= "  <tr class=xmldb-list-row$c>\n";
  +        $body .= "    <td>\n";
  +#        if ($scroll and $row == 0) {
  +#	    $body .= "<span class=\"xmldb-button\">" . 
  +#		     $cgi->submit(-name => 'scroll-up', -value => "U") . 
  +#		     "</span>\n";
  +#        }
  +#        elsif ($scroll and $row == 1) {
  +#	    $body .= $cgi->popup_menu(-name    => 'view.rows',
  +#				      -values  => $view_rows_list,
  +#				      -default => $view_rows);
  +#        }
  +#        elsif ($scroll and $row == 2) {
  +#	    $body .= "<span class=\"xmldb-button\">" . 
  +#		     $cgi->submit(-name => 'scroll-down', -value => "D") . 
  +#		     "</span>\n";
  +#        }
  +#        else {
  +            $body .= "&nbsp;";
  +#        }
  +        $body .= "    </td>\n";
  +        for ($i = 0; $i < $view_fields; $i++) {
  +            #my $name = $cgi->param("view.field.$i.name") || $db->{ORDER}->{RECORD}->[$i];
  +            my $name = $cgi->param("view.field.$i.name") || $view_field_name->[$i];
  +            my $a = $r->[$i];
  +            $body .= "    <td class=xmldb-list-col$c".($i == $sortby ? "-active" :"").">\n";
  +            $body .= "      <span class=\"xmldb-list-row-text".($i == $sortby ? "-active" :"")."\">";
  +            if ($db->{INDEX}->{ATTRIB}->{$name}->{"index"} eq 'yes') {
  +                $body .= "<a href=\"". $cgi->url(-full => 1)."?" .
  +                         &url_escape($name)."=".&url_escape($a) . 
  +                         "\">$a</a>";
  +            }
  +            else {
  +                $body .= $a;
  +            }
  +	    $body .= "      </span>\n";
  +	    $body .= "    </td>\n";
  +        }
  +	$body .= "  </tr>\n";
  +        $c = (($c + 1) % 2);
  +        $row++;
  +    }
  +
  +    $body .= "</table>\n";
  +    $title = "List Database";
  +}
  +elsif ($action eq 'view') {
  +    my $field = $cgi->param("field") || die;
  +    my $key   = $cgi->param("key") || die;
  +    my $r = $db->{INDEX}->{RECORD}->{$field}->{$key} || die;
  +    $body .= "<input type=\"hidden\" name=\"field\" value=\"$field\" />\n";
  +    $body .= "<input type=\"hidden\" name=\"key\" value=\"$key\" />\n";
  +    $body .= "<span class=\"xmldb-button-back\">" . 
  +	     $cgi->submit(-name => 'list', -value => "Back") . 
  +	     "</span>\n";
  +    $body .= "<span class=\"xmldb-button-refresh\">" . 
  +	     $cgi->submit(-name => 'view', -value => "Refresh") . 
  +	     "</span>\n";
  +    $body .= "<span class=\"xmldb-button-edit\">" . 
  +	     $cgi->submit(-name => 'edit', -value => "Edit") . 
  +	     "</span>\n";
  +    $body .= "<p>";
  +    $body .= "<table width=100% border=0 cellspacing=0 cellpadding=2>\n";
  +    my $c = 0;
  +    foreach $k (@{$db->{ORDER}->{RECORD}}) {
  +	$body .= "  <tr class=xmldb-list-row$c>\n";
  +        $body .= "    <td width=50%>";
  +        $body .= "      <span class=\"xmldb-list-row-text".($i == $sortby ? "-active" :"")."\">";
  +        $body .= $db->{INDEX}->{ATTRIB}->{$k}->{name} . ":&nbsp;&nbsp;";
  +        $body .= "      </span>\n";
  +        $body .= "    </td>\n";
  +        $body .= "    <td width=50%>\n";
  +        $body .= "      <span class=\"xmldb-list-row-text".($i == $sortby ? "-active" :"")."\">";
  +        my $x = $r->{$k};
  +        if ($x =~ m|^[^@]+@([^@.]+\.)*[^@.]+$|) {
  +            $x = "<a href=\"mailto:$x\">$x</a>";
  +        }
  +        elsif ($x =~ m/^(http|ftp):\/\/.+/) {
  +            $x = "<a href=\"$x\">$x</a>";
  +        }
  +        $body .= "      $x\n";
  +        $body .= "      </span>\n";
  +        $body .= "    </td>\n";
  +        $body .= "  </tr>\n";
  +        $c = ($c + 1) % 2;
  +    }
  +    $body .= "</table>\n";
  +    $title = "View Database Record";
  +}
  +elsif ($action eq 'edit') {
  +    my $field = $cgi->param("field") || die;
  +    my $key   = $cgi->param("key") || die;
  +    my $r = $db->{INDEX}->{RECORD}->{$field}->{$key} || die;
  +    $body .= "<input type=\"hidden\" name=\"field\" value=\"$field\" />\n";
  +    $body .= "<input type=\"hidden\" name=\"key\" value=\"$key\" />\n";
  +    $body .= "<span class=\"xmldb-button-cancel\">" . 
  +	     $cgi->submit(-name => 'view', -value => "Cancel") . 
  +	     "</span>\n";
  +    $body .= "<span class=\"xmldb-button-refresh\">" . 
  +	     $cgi->submit(-name => 'edit', -value => "Refresh") . 
  +	     "</span>\n";
  +    $body .= "<span class=\"xmldb-button-save\">" . 
  +             $cgi->submit(-name => 'edit-save', -value => "Save") . 
  +             "</span>\n";
  +    $body .= "<p>";
  +    $body .= "<table width=100% border=0 cellspacing=0 cellpadding=0>\n";
  +    my $c = 0;
  +    foreach $k (@{$db->{ORDER}->{RECORD}}) {
  +	$body .= "  <tr class=xmldb-list-row$c>\n";
  +        $body .= "    <td width=50%>";
  +        $body .= "      <span class=\"xmldb-list-row-text".($i == $sortby ? "-active" :"")."\">";
  +        $body .= $db->{INDEX}->{ATTRIB}->{$k}->{name} . ":&nbsp;&nbsp;";
  +        $body .= "      </span>\n";
  +        $body .= "    </td>";
  +        $body .= "    <td width=50%>";
  +        $body .= "      <span class=\"xmldb-list-row-text".($i == $sortby ? "-active" :"")."\">";
  +        my $match = $db->{INDEX}->{ATTRIB}->{$k}->{match};
  +        if ($match =~ m|^mc:(.*)$|) {
  +            my @mc = split(/\|/, $1);
  +            my $l = 0;
  +            $body .= "<table cellspacing=0 cellpadding=0 border=0>\n";
  +            foreach $mc (@mc) {
  +                $body .= "<tr>" if ($l % 3 == 0);
  +                $body .= "<td>";
  +	        $body .= "<input ".($r->{$k} eq $mc ? "checked " : "").
  +			 "type=\"radio\" name=\"$k\" value=\"$mc\">";
  +                $body .= "&nbsp;" . $mc . "&nbsp;";
  +                $body .= "</td>";
  +                $l++;
  +                $body .= "</tr>" if ($l % 3 == 0);
  +            }
  +            $body .= "</tr>" if ($l % 3 != 0);
  +            $body .= "</table>\n";
  +        }
  +        else {
  +	    $body .= $cgi->textfield(-name => "$k",
  +				     -default => $r->{$k},
  +				     -size => 40, 
  +				     -maxlength => 80);
  +        }
  +        $body .= "      </span>\n";
  +        $body .= "    </td>\n";
  +        $body .= "  </tr>\n";
  +        if (defined($hint->{$k}) && $hint->{$k} ne '') {
  +            $body .= "  <tr>\n";
  +            $body .= "    <td>\n";
  +            $body .= "    </td>\n";
  +            $body .= "    <td>\n";
  +            $body .= "      <span class=\"xmldb-text-edit-hint\">\n";
  +            $body .= "        ".$hint->{$k}."\n";
  +            $body .= "      </span>\n";
  +            $body .= "    </td>\n";
  +            $body .= "  </tr>\n";
  +        }
  +        $c = ($c + 1) % 2;
  +    }
  +    $body .= "</table>\n";
  +    $title = "Edit Database Record";
  +}
  +elsif ($action eq 'edit-save') {
  +    my $field = $cgi->param("field") || die;
  +    my $key   = $cgi->param("key") || die;
  +    my $r = $db->{INDEX}->{RECORD}->{$field}->{$key} || die;
  +    my $ok_global = 1;
  +    foreach $k (@{$db->{ORDER}->{RECORD}}) {
  +        my $val = $cgi->param("$k");
  +        my $match = $db->{INDEX}->{ATTRIB}->{$k}->{match};
  +        my $ok_local = 0;
  +        if ($match =~ m|^mc:(.*)$|s) {
  +            my @mc = split(/\|/, $1);
  +            foreach $mc (@mc) {
  +                if ($mc eq $val) {
  +                    $ok_local = 1;
  +                    last;
  +                }
  +            }
  +            if (not $ok_local) {
  +                $hint->{$k} = "has to be one of: ".join(", ", @mc).".";
  +            }
  +        }
  +        elsif ($match =~ m|^re:(.*)$|s) {
  +            my $re = $1;
  +            if ($val =~ m|$re|s) {
  +                $ok_local = 1;
  +            }
  +            else {
  +                $hint->{$k} = "has to match on regular expression \"$re\".";
  +            }
  +        }
  +        else {
  +            die "invalid match attribute \"$match\"";
  +        }
  +        if (not $ok_local) {
  +            $ok_global = 0;
  +        }
  +        else {
  +            $r->{$k} = $val;
  +        }
  +    }
  +    if (not $ok_global) {
  +        $action = "edit";
  +    }
  +    else {
  +        $action = "view";
  +        &db_export($db, $xmldb);
  +    }
  +    goto DISPATCH;
  +}
  +elsif ($action eq 'new') {
  +    $body .= "NEW!";
  +    $title = "New Database Record";
  +}
  +elsif ($action eq 'login') {
  +    my $login_username = '';
  +    my $login_password = '';
  +    my $body = '';
  +    $body .= "<table><tr>\n";
  +    $body .= "<td>Username:</td>\n";
  +    $body .= "<td>".$cgi->textfield(-name => "login_username", -default => $login_username, -size => 20, -maxlength => 40)."</td>";
  +    $body .= "<td>Password:</td>\n";
  +    $body .= "<td>".$cgi->password_field(-name => "login_password", -default => $login_password, -size => 20, -maxlength => 40)."</td>";
  +    $body .= "<td>".$cgi->submit(-name => 'login', -value => "Login")."</td>";
  +    $body .= "</tr></table>\n";
  +}
  +
  +my $login_dialog = '';
  +sub login_valid {
  +    my ($username, $password) = @_;
  +    return 0;
  +}
  +# FIXME
  +# if (&login_valid($login_username, $login_password)) {
  +#    $login_dialog .= "Logged in as ". $login_username;
  +# }
  +# else {
  +#     $login_dialog .= $cgi->submit(-name => 'login', -value => "Login");
  +# }
  +
  +$head .= "<title>XMLDB: $title</title>\n";
  +$body = $cgi->startform(-method => "POST", -action => $cgi->url(-full => 1)) .
  +        "<table class=xmldb-box-outmost>\n" .
  +        "  <tr>\n" .
  +        "    <td class=xmldb-title-cell valign=top>\n" .
  +        "      <span class=xmldb-title-text-major>".$db->{CONFIG}->{title}->{major}."</span><br>\n" .
  +        "      <span class=xmldb-title-text-minor>".$db->{CONFIG}->{title}->{minor}."</span>\n" .
  +        "    </td>\n" .
  +        "    <td align=right valign=top>\n" .
  +#               $login_dialog .
  +#        "      <br>\n" .
  +        "      &nbsp;&nbsp;" .
  +        "      <span class=xmldb-title-dialog>$title</span>\n" .
  +        "    </td>\n" .
  +        "  </tr>\n" .
  +        "  <tr>\n" .
  +        "    <td colspan=2>\n" .
  +        $body .
  +        "    </td>\n" .
  +        "  </tr>\n" .
  +#        "  <tr>\n" .
  +#        "    <td class=xmldb-foot-left-cell>\n" .
  +#        "       <span class=xmldb-foot-left-text>".
  +#        "Copyright &copy; ".$db->{CONFIG}->{copyright}->{year} ." ".
  +#        $db->{CONFIG}->{copyright}->{holder} . "<br>\n" . 
  +#        "Contact: ".$db->{CONFIG}->{contact}->{name} . " " .
  +#        "&lt;<a href=\"mailto:".$db->{CONFIG}->{contact}->{email}."\">".$db->{CONFIG}->{contact}->{email}."</a>&gt;".
  +#        "       </span>\n" .
  +#        "    </td>\n" .
  +#        "    <td class=xmldb-foot-right-cell>\n" .
  +#        "       <span class=xmldb-foot-right-text>".
  +#        "<a href=\"".$MY->{PROG_HOME}."\">".
  +#        $MY->{PROG_NAME} . "</a> " . $MY->{PROG_VERS} . "<br>" .
  +#        $MY->{PROG_DESC} .
  +#        "       </span>\n" .
  +#        "    </td>\n" .
  +#        "  </tr>\n" .
  +        "</table>\n" .
  +        $cgi->endform;
  +
  +print STDOUT &http_response($head, $body);
  +   
  +exit(0);
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xmldb/xmldb.css
  ============================================================================
  $ cvs diff -u -r0 -r1.1 xmldb.css
  --- /dev/null	2003-05-29 11:38:32.000000000 +0200
  +++ xmldb.css	2003-05-29 11:38:33.000000000 +0200
  @@ -0,0 +1,109 @@
  +
  +.xmldb-box-outmost { 
  +    border-style: solid;
  +    border-width: 1;
  +    border-color: #000000;
  +    background: #d0d0ff;
  +    margin: 0;
  +    padding: 0;
  +    spacing: 0;
  +}
  +.xmldb-title-cell { 
  +    background: #d0d0ff;
  +    vertical-align: top;
  +    text-align: left;
  +}
  +.xmldb-title-text-major { 
  +    font-family: helvetica,lucida,arial,sans-serif; 
  +    font-weight: bold;
  +    font-size: 150%;
  +    color: #000000;
  +}
  +.xmldb-title-text-minor { 
  +    font-family: helvetica,lucida,arial,sans-serif; 
  +    font-weight: bold;
  +    font-size: 100%;
  +    color: #000000;
  +}
  +.xmldb-title-dialog { 
  +    font-family: helvetica,lucida,arial,sans-serif; 
  +    font-weight: bold;
  +    font-size: 140%;
  +}
  +
  +.xmldb-foot-left-cell { 
  +    background: #f0f0f0;
  +    vertical-align: bottom;
  +    text-align: left;
  +}
  +.xmldb-foot-left-text { 
  +    font-family: helvetica,lucida,arial,sans-serif; 
  +    color: #999999;
  +}
  +.xmldb-foot-left-text A { 
  +    text-decoration: none;
  +    color: #999999;
  +}
  +.xmldb-foot-right-cell { 
  +    background: #f0f0f0;
  +    vertical-align: bottom;
  +    text-align: right;
  +}
  +.xmldb-foot-right-text { 
  +    font-family: helvetica,lucida,arial,sans-serif; 
  +    color: #999999;
  +}
  +.xmldb-foot-right-text A { 
  +    text-decoration: none;
  +    color: #999999;
  +}
  +
  +.xmldb-text-edit-hint { 
  +    font-family: helvetica,lucida,arial,sans-serif; 
  +    font-weight: bold;
  +    color: #cc3333;
  +}
  +
  +.xmldb-button-update        INPUT  { background: #666699; border-color: #666699; color: #f0f0ff; }
  +.xmldb-button-back          INPUT  { background: #666699; border-color: #666699; color: #f0f0ff; }
  +.xmldb-button-refresh       INPUT  { background: #666699; border-color: #666699; color: #f0f0ff; }
  +.xmldb-button-edit          INPUT  { background: #666699; border-color: #666699; color: #f0f0ff; }
  +.xmldb-button-cancel        INPUT  { background: #666699; border-color: #666699; color: #f0f0ff; }
  +.xmldb-button-save          INPUT  { background: #666699; border-color: #666699; color: #f0f0ff; }
  +
  +.xmldb-button-sort          INPUT  { background: #d0d0ff; border-color: #d0d0ff; color: #333366; }
  +.xmldb-button-sort-active   INPUT  { background: #ffffff; border-color: #ffffff; color: #000000; }
  +.xmldb-field-pattern        INPUT  { background: #c0c0ef; border-color: #c0c0ef; color: #333366; }
  +.xmldb-field-pattern-active INPUT  { background: #ffffff; border-color: #ffffff; color: #000000; }
  +.xmldb-field-list           SELECT { background: #c0c0ef; border-color: #c0c0ef; color: #333366; }
  +.xmldb-field-list-active    SELECT { background: #ffffff; border-color: #ffffff; color: #000000; }
  +.xmldb-field-select         SELECT { background: #c0c0ef; border-color: #c0c0ef; color: #333366; }
  +.xmldb-field-select-active  SELECT { background: #ffffff; border-color: #ffffff; color: #000000; }
  +
  +.xmldb-list-row0        { background: #c0c0ef; }
  +.xmldb-list-row1        { background: #b0b0df; }
  +.xmldb-list-col0        { background: #c0c0ef; }
  +.xmldb-list-col1        { background: #b0b0df; }
  +.xmldb-list-col0-active { background: #e0e0ff; }
  +.xmldb-list-col1-active { background: #d0d0ef; }
  +
  +.xmldb-list-row-text { 
  +    font-family: helvetica,lucida,arial,sans-serif; 
  +    color: #000000;
  +}
  +.xmldb-list-row-text A { 
  +    color: #333399; 
  +    text-decoration: none;
  +    font-weight: bold;
  +}
  +
  +.xmldb-list-row-text-active { 
  +    font-family: helvetica,lucida,arial,sans-serif; 
  +    color: #000000;
  +}
  +.xmldb-list-row-text-active A { 
  +    color: #333399; 
  +    text-decoration: none;
  +    font-weight: bold;
  +}
  +
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 29 11:39:18 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 42FD576D0A; Thu, 29 May 2003 11:39:18 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/xmldb/ README
Message-Id: <20030529093918.42FD576D0A@mail.ossp.org>
Date: Thu, 29 May 2003 11:39:18 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-May-2003 11:39:18
  Branch: HEAD                             Handle: 2003052910391700

  Added files:
    ossp-pkg/xmldb          README

  Log:
    remember what this stands for

  Summary:
    Revision    Changes     Path
    1.1         +3  -0      ossp-pkg/xmldb/README
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/xmldb/README
  ============================================================================
  $ cvs diff -u -r0 -r1.1 README
  --- /dev/null	2003-05-29 11:39:17.000000000 +0200
  +++ README	2003-05-29 11:39:18.000000000 +0200
  @@ -0,0 +1,3 @@
  +
  +  XML Database (XMLDB)
  +
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 29 11:43:35 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5C25C76D0A; Thu, 29 May 2003 11:43:34 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/changelog/ README changelog.1x1.gif changelog.cgi...
Message-Id: <20030529094334.5C25C76D0A@mail.ossp.org>
Date: Thu, 29 May 2003 11:43:34 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-May-2003 11:43:34
  Branch: HEAD                             Handle: 2003052910433100

  Added files:
    ossp-pkg/changelog      README changelog.1x1.gif changelog.cgi
                            changelog.foot.html changelog.head.html
                            changelog.logo.png changelog.logo.xcf
                            changelog.next.png changelog.prev.png
                            changelog.txt

  Log:
    finally add OSSP changelog to CVS to make sure its source is not lost
    over time

  Summary:
    Revision    Changes     Path
    1.1         +3  -0      ossp-pkg/changelog/README
    1.1         BLOB        ossp-pkg/changelog/changelog.1x1.gif
    1.1         +468 -0     ossp-pkg/changelog/changelog.cgi
    1.1         +2  -0      ossp-pkg/changelog/changelog.foot.html
    1.1         +21 -0      ossp-pkg/changelog/changelog.head.html
    1.1         BLOB        ossp-pkg/changelog/changelog.logo.png
    1.1         BLOB        ossp-pkg/changelog/changelog.logo.xcf
    1.1         BLOB        ossp-pkg/changelog/changelog.next.png
    1.1         BLOB        ossp-pkg/changelog/changelog.prev.png
    1.1         +1513 -0    ossp-pkg/changelog/changelog.txt
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/changelog/README
  ============================================================================
  $ cvs diff -u -r0 -r1.1 README
  --- /dev/null	2003-05-29 11:43:32.000000000 +0200
  +++ README	2003-05-29 11:43:32.000000000 +0200
  @@ -0,0 +1,3 @@
  +
  +  ChangeLog
  +
  @@ .
  (cd ossp-pkg/changelog && \
   uudecode <<'@@ .' && \
   xdelta patch changelog.1x1.gif.xdelta /dev/null changelog.1x1.gif && \
   rm -f changelog.1x1.gif.xdelta)
  Index: ossp-pkg/changelog/changelog.1x1.gif
  ============================================================================
  begin 664 changelog.1x1.gif.xdelta
  M)5A$6C`P-"4````(`!``#P````````````````````!S:&EE;&$N-S8Q-BYN
  M=6QL<VAI96QA+C<V,38N86QL'XL(`````````P,````````````?BP@`````
  M```#8V!H8&9@8#"X(MMSLY]A$\O+!LX9;WXXU0'%&``]X/R_'````````%,E
  '6$1:,#`T)0``
  `
  end
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/changelog/changelog.cgi
  ============================================================================
  $ cvs diff -u -r0 -r1.1 changelog.cgi
  --- /dev/null	2003-05-29 11:43:32.000000000 +0200
  +++ changelog.cgi	2003-05-29 11:43:32.000000000 +0200
  @@ -0,0 +1,468 @@
  +#!/cw/bin/perl
  +##
  +##  changelog.cgi -- Team ChangeLog Web-Interface
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  +##
  +
  +require 5.006;
  +use CGI;   # standard in Perl 5.6
  +use POSIX; # standard in Perl 5.6
  +
  +#   unbuffered STDOUT
  +$|++;
  +
  +#   establish CGI query object   
  +my $Q = new CGI;
  +
  +#   establish my configuration
  +my $MY = {};
  +$MY->{PROGNAME} = ($0 =~ m|^.*?([^/]+?)(?:\.[^/.]+)?$|)[0];
  +$MY->{HEADER} = '';
  +open(FP, "<".$MY->{PROGNAME}.".head.html");
  +$MY->{HEADER} .= $_ while (<FP>);
  +close(FP);
  +$MY->{FOOTER} = '';
  +open(FP, "<".$MY->{PROGNAME}.".foot.html");
  +$MY->{FOOTER} .= $_ while (<FP>);
  +close(FP);
  +
  +#   general error handler
  +$SIG{__DIE__} = sub {
  +    my ($err) = @_;
  +    $err =~ s|\s+at\s+.*||s;
  +    $err =~ s|\n|<br>\n|sg;
  +    my $page = "Content-Type: text/html\n" .
  +               "\n" .
  +               $MY->{HEADER} .
  +               "<h1>Application Services ChangeLog: ERROR</h1>\n" .
  +               "<pre>$err</pre>\n" .
  +               $MY->{FOOTER};
  +    print STDOUT $page;
  +    exit(0);
  +};
  +
  +#   database entry escaping
  +sub entry_escape {
  +    my ($str) = @_;
  +    $str =~ s/\|/\\x07/sg;
  +    $str =~ s/\s+/ /sg;
  +    return $str;
  +}
  +
  +#   database entry unescaping
  +sub entry_unescape {
  +    my ($str) = @_;
  +    $str =~ s/\\x07/\|/sg;
  +    return $str;
  +}
  +
  +#   wildcard patter matching
  +sub wildmat {
  +    my ($str, $pat) = @_;
  +    $pat =~ s|\*|.*|sg;
  +    $pat =~ s/\|/\\|/sg;
  +    return ($str =~ m|^$pat$|s);
  +}
  +
  +#   remember some parameters via HTTP cookies for the user's convinience
  +my $cookies = [];
  +foreach $param (qw(a_team a_person v_team v_person v_display)) {
  +    if ($Q->param($param) ne '' and ($Q->param($param) ne $Q->cookie($param))) {
  +        push(@{$cookies}, $Q->cookie(
  +            -name => $param,
  +            -value => $Q->param($param), 
  +            -expires => '+1d',
  +            -path => $Q->url(-absolute => 1),
  +            -secure => 0
  +        ));
  +    }
  +    if ($Q->param($param) eq '' and $Q->cookie($param) ne '') {
  +        $Q->param(-name => $param, -value => [$Q->cookie($param)]);
  +    }
  +}
  +
  +#   fetch HTTP GET/POST parameters
  +my $a_team    = $Q->param('a_team')    || 'is';
  +my $a_person  = $Q->param('a_person')  || '';
  +my $a_risk    = $Q->param('a_risk')    || 'low';
  +my $a_subject = $Q->param('a_subject') || '';
  +my $a_change  = $Q->param('a_change')  || '';
  +my $v_team    = $Q->param('v_team')    || '*';
  +my $v_person  = $Q->param('v_person')  || '*';
  +my $v_risk    = $Q->param('v_risk')    || '*';
  +my $v_subject = $Q->param('v_subject') || '*';
  +my $v_change  = $Q->param('v_change')  || '*';
  +my $v_start   = $Q->param('v_start')   || '0';
  +my $v_display = $Q->param('v_display') || '20';
  +
  +#   add a new ChangeLog entry
  +if ($Q->param('form') eq 'Add') {
  +    #   make sure the parameters really exists
  +    foreach $param (qw(a_team a_person a_risk a_subject a_change)) {
  +        if ($Q->param($param) eq '') {
  +            die "Parameter <b>" . uc(substr($param,2,1)).substr($param,3).  "</b> is empty";
  +        }
  +    }
  +
  +    #   generate time stamp
  +    my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time());
  +    my $time = sprintf("%04d-%02d-%02d/%02d:%02d", $year+1900, $mon+1, $mday, $hour, $min);
  +
  +    #   escape values
  +    my $x_team    = &entry_escape($a_team);
  +    my $x_person  = &entry_escape($a_person);
  +    my $x_subject = &entry_escape($a_subject);
  +    my $x_risk    = &entry_escape($a_risk);
  +    my $x_change  = &entry_escape($a_change);
  +
  +    #   read last entry from database
  +    my $entry_last = "";
  +    open(FP, "<".$MY->{PROGNAME}.".txt") || die "unable to read logfile";
  +    $entry_last = $_ while (<FP>);
  +    close(FP);
  +
  +    #   generate new entry
  +    my $entry = sprintf("%s|%s|%s|%s|%s|%s\n", $time, $x_team, $x_person, $x_risk, $x_subject, $x_change);
  +
  +    #   make sure we do not accidently add an entry multiple times
  +    #   (this can happen if people press "RELOAD" in their browser
  +    #   immediately after adding an entry by pressing "ADD" before).
  +    my $entry_now = $entry;
  +    $entry_now  =~ s/^[^|]+|//s;
  +    $entry_last =~ s/^[^|]+|//s;
  +    if ($entry_now eq $entry_last) {
  +        die "Adding the last entry a second time is not allowed!";
  +    }
  +
  +    #   write new entry to database   
  +    open(FP, ">>".$MY->{PROGNAME}.".txt") || die "unable to write logfile";
  +    printf FP $entry;
  +    close(FP);
  +
  +    #   reset values for subsequent processing
  +    $Q->param(-name => 'a_subject', -value => '');
  +    $Q->param(-name => 'a_change', -value => '');
  +    $a_subject = '';
  +    $a_change = '';
  +};
  +
  +#   start generating output page
  +my $page = '';
  +$page .= $Q->header (-cookie => $cookies, -expires => '+1s');
  +$page .= $MY->{HEADER};
  +
  +$page .= "<table width=100% bgcolor=\"#000000\" cellspacing=0 cellpadding=0>\n";
  +$page .= "<tr>\n" .
  +         "<td align=center>\n" .
  +         "<a href=\"http://as.de.cw.net/changelog.cgi\">" .
  +         "<img src=\"changelog.logo.png\" border=0>" .
  +         "</a>" .
  +         "</td>\n" .
  +         "</tr>\n" .
  +         "<tr>\n" .
  +         "<td>\n";
  +
  +$page .= "<table width=100% cellspacing=0 cellpadding=0 border=0>\n";
  +
  +$page .= "<tr>\n" .
  +         "<td><img src=\"changelog.1x1.gif\" width=140 height=1></td>" .
  +         "<td><img src=\"changelog.1x1.gif\" width=10 height=1></td>" .
  +         "<td><img src=\"changelog.1x1.gif\" width=10 height=1></td>" .
  +         "<td><img src=\"changelog.1x1.gif\" width=10 height=1></td>" .
  +         "<td><img src=\"changelog.1x1.gif\" width=10 height=1></td>" .
  +         "<td><img src=\"changelog.1x1.gif\" width=10 height=1></td>" .
  +         "</tr>\n";
  +
  +$page .= "<tr bgcolor=\"#666699\">\n" .
  +         "<td>&nbsp;</td>" .
  +         "<td><font color=\"#e0e0ff\">Team</font></td>" .
  +         "<td><font color=\"#e0e0ff\">Person</font></td>" .
  +         "<td><font color=\"#e0e0ff\">Risk</font></td>" .
  +         "<td><font color=\"#e0e0ff\">Subject</font></td>" .
  +         "<td><font color=\"#e0e0ff\">Change</font></td>" .
  +         "</tr>\n";
  +
  +#   generate "ADD" form
  +$page .= $Q->startform( -method => "POST", -action => $Q->url()) .
  +         "<tr bgcolor=\"#9999cc\">\n" .
  +         "<td align=right>" .
  +         "<b>" . $Q->submit(-name => 'form', -value => 'Add') . "</b>" .
  +         "</td>" .
  +         "<td>" .  
  +         $Q->popup_menu( 
  +             -name => 'a_team',
  +             -values => ['is', 'hosting', 'development', 'database'], 
  +             -default => $a_team
  +         ) .
  +         "</td>" .
  +         "<td>" . 
  +         $Q->popup_menu( 
  +             -name => 'a_person',
  +             -values => ['',
  +                         'peter', 
  +                         'cschug', 'rse', 'cbotta', 
  +                         'mhendel', 'pbrudna', 'awaegner', 'kgruber', 'rohde', 'scholli', 'msander', 'cmuschio',
  +                         'tlottere', 'psmej', 'mschloh', 
  +                         'sgans', 'cscheith', 'sgierth', 'asikeler', 
  +                        ], 
  +             -default => $a_person
  +         ) .
  +         "</td>" .
  +         "<td>" .  
  +         $Q->popup_menu( 
  +             -name => 'a_risk',
  +             -values => ['high', 'low'], 
  +             -default => $a_risk
  +         ) .
  +         "</td>" .
  +         "<td>" .
  +         $Q->textfield(
  +             -name => 'a_subject',
  +             -default => $a_subject,
  +             -size => 20, 
  +             -maxlength => 80
  +         ) .
  +         "</td>" .
  +         "<td>" . 
  +         "<table cellspacing=0 cellpadding=0><tr><td>" .
  +         $Q->textfield(
  +             -name => 'a_change',
  +             -default => $a_change,
  +             -size => 50,
  +             -maxlength => 200
  +         ) . 
  +         "</td>" .
  +         "</tr></table>" .
  +         "</td>" .
  +         "</tr>\n" .
  +         $Q->endform;
  +
  +#   generate "VIEW" form
  +$page .= $Q->startform(-method => "GET", -action => $Q->url()) .
  +         "<tr bgcolor=\"#666699\">\n" .
  +         "<td align=right>" .
  +         $Q->textfield(
  +             -name => 'v_display',
  +             -default => $v_display,
  +             -size => 2, 
  +             -maxlength => 3
  +         ) .
  +         "<b>" . $Q->submit(-name => 'form', -value => 'View') . "</b>" .
  +         "</td>" .  
  +         "<td>" .  
  +         $Q->popup_menu( 
  +             -name => 'v_team',
  +             -values => ['*', 'is', 'hosting', 'development', 'database'], 
  +             -default => $v_team
  +         ) .
  +         "</td>" .
  +         "<td>" . 
  +         $Q->popup_menu( 
  +             -name => 'v_person',
  +             -values => ['*', 
  +                         'peter', 
  +                         'cschug', 'rse', 'cbotta', 
  +                         'mhendel', 'pbrudna', 'awaegner', 'kgruber', 'rohde', 'scholli', 'msander', 'cmuschio',
  +                         'tlottere', 'psmej', 'mschloh', 
  +                         'sgans', 'cscheith', 'sgierth', 'asikeler', 
  +                        ], 
  +             -default => $v_person
  +         ) .
  +         "</td>" .
  +         "<td>" .  
  +         $Q->popup_menu( 
  +             -name => 'v_risk',
  +             -values => ['*', 'high', 'low'], 
  +             -default => $v_risk
  +         ) .
  +         "</td>" .
  +         "<td>" .
  +         $Q->textfield(
  +             -name => 'v_subject',
  +             -default => $v_subject,
  +             -size => 20, 
  +             -maxlength => 80
  +         ) .
  +         "</td>" .
  +         "<td>" . 
  +         "<table cellspacing=0 cellpadding=0><tr><td>" .
  +         $Q->textfield(
  +             -name => 'v_change',
  +             -default => $v_change,
  +             -size => 50,
  +             -maxlength => 200
  +         ) . 
  +         "</td>" .
  +         "</tr></table>" .
  +         "</td>" .
  +         "</tr>\n" .
  +         $Q->endform;
  +
  +#   read database
  +my $changelog = '';
  +open(FP, "<".$MY->{PROGNAME}.".txt") || die "reading";
  +$changelog .= $_ while (<FP>);
  +close(FP);
  +
  +#   reverse order of entries
  +my @changelog = reverse(split(/\n/, $changelog));
  +
  +#   calculate number of entries
  +my $db_entries = $#changelog + 1;
  +
  +#   restrict according to selected view
  +my @changelog_view = ();
  +foreach $line (@changelog) {
  +    next if ($line eq '');
  +    my ($time, $team, $person, $risk, $subject, $change) = split(/(?<!\\)\|/, $line);
  +    $team    = &entry_unescape($team);
  +    $person  = &entry_unescape($person);
  +    $subject = &entry_unescape($subject);
  +    $risk    = &entry_unescape($risk);
  +    $change  = &entry_unescape($change);
  +    if (    &wildmat($team,    $v_team)
  +        and &wildmat($person,  $v_person)
  +        and &wildmat($subject, $v_subject)
  +        and &wildmat($risk,    $v_risk)
  +        and &wildmat($change,  $v_change)) {
  +        push(@changelog_view, $line);
  +    }
  +}
  +@changelog = @changelog_view;
  +
  +#   determine view window
  +my $numdisplay = (($v_display >= 1 and $v_display <= 999) ? $v_display : 20);
  +my $prev = ($v_start - $numdisplay);
  +$prev = 0 if ($prev < 0);
  +my $next = ($v_start + $numdisplay);
  +$next = ($#changelog - $numdisplay) if ($next > ($#changelog-$numdisplay));
  +$next = 0 if ($next < 0);
  +if ($#changelog > 0) {
  +    $prev_percent = sprintf("%d", ($v_start / $#changelog) * 100);
  +    $next_percent = sprintf("%d", (($#changelog-$next) / $#changelog) * 100);
  +}
  +else {
  +    $prev_percent = 0;
  +    $next_percent = 0;
  +}
  +
  +#   determine navigation links
  +my $nav_prev = "<a href=\"".$Q->url(-relative => 1)."?v_start=$prev"."\"><img src=\"changelog.prev.png\" border=0></a> &nbsp;<font color=\"#cccccc\">($prev_percent\%)</font>";
  +$nav_prev = "" if ($v_start == 0);
  +my $nav_next = "<a href=\"".$Q->url(-relative => 1)."?v_start=$next"."\"><img src=\"changelog.next.png\" border=0></a> &nbsp;<font color=\"#cccccc\">($next_percent\%)</font>";
  +$nav_next = "" if ($v_start == ($#changelog - $numdisplay) or $next == 0);
  +
  +#   restrict to view window
  +@changelog = @changelog[$v_start .. ($v_start + $numdisplay)];
  +
  +$page .= "<tr bgcolor=\"#000000\">\n" .
  +         "<td><font color=\"#ffffff\">Time &nbsp;&nbsp;$nav_prev</font></td>" .
  +         "<td><font color=\"#ffffff\">Team</font></td>" .
  +         "<td><font color=\"#ffffff\">Person</font></td>" .
  +         "<td><font color=\"#ffffff\">Risk</font></td>" .
  +         "<td><font color=\"#ffffff\">Subject</font></td>" .
  +         "<td><font color=\"#ffffff\">Change</font></td>" .
  +         "</tr>\n";
  +
  +my $first = ($v_start == 0);
  +my $cnt = 0;
  +my $col = {
  +    'low'  => ['#f0f0f0', '#ffffff'],
  +    'high' => ['#f0f0f0', '#ffffff'],
  +};
  +my $datenext = '';
  +foreach $line (@changelog) {
  +    next if ($line eq '');
  +    my ($time, $team, $person, $risk, $subject, $change) = split(/\|/, $line);
  +    $team    = &entry_unescape($team);
  +    $person  = &entry_unescape($person);
  +    $subject = &entry_unescape($subject);
  +    $risk    = &entry_unescape($risk);
  +    $change  = &entry_unescape($change);
  +
  +    my $color = $col->{$risk}->[$cnt];
  +    my $date = $time;
  +    $date =~ s|/.*$||s;
  +    if ($datenext ne $date) {
  +        sub weekday {
  +            my ($date) = @_;
  +            my ($y, $m, $d) = ($date =~ m|^(\d{4})-(\d{2})-(\d{2})|s);
  +            my $t = mktime(0, 0, 0, $d, $m-1, $y-1900, 0, 0, 0);
  +            my $wday = (localtime($t))[6];
  +            $wday = 7 if ($wday == 0); # Sun
  +            return $wday;
  +        }
  +        if (&weekday($datenext) < &weekday($date)) {
  +            $page .= "<tr height=2 bgcolor=\"#000000\">" .
  +                     "<td colspan=6 height=2><img src=\"changelog.1x1.gif\" width=400 height=1></td>" .
  +                     "</tr>\n";
  +        }
  +        else {
  +            $page .= "<tr height=1 bgcolor=\"#cccccc\">" .
  +                     "<td colspan=6 height=1><img src=\"changelog.1x1.gif\" width=400 height=1></td>" .
  +                     "</tr>\n";
  +        }
  +        $datenext = $date;
  +    }
  +    sub html_escape {
  +        my ($str) = @_;
  +        $str =~ s|&|&amp;|sg;
  +        $str =~ s|<|&lt;|sg;
  +        $str =~ s|>|&gt;|sg;
  +        return $str;
  +    }
  +    $team    = &html_escape($team);
  +    $person  = &html_escape($person);
  +    $subject = &html_escape($subject);
  +    $risk    = &html_escape($risk);
  +    $change  = &html_escape($change);
  +    if ($first) {
  +        $first = 0;
  +        $color = "#e0e0ff";
  +    }
  +    my $tcolor = "#000000";
  +    if ($risk eq 'high') {
  +        $tcolor = "#333399";
  +        $risk = "<font color=\"#cc3333\"><b>$risk</b></font>";
  +    }
  +    $page .= "<tr bgcolor=\"".$color."\">" .
  +            "<td><font color=\"$tcolor\">$time&nbsp;&nbsp;</font></td>" .
  +            "<td><font color=\"$tcolor\">$team&nbsp;&nbsp;</font></td>" .
  +            "<td><font color=\"$tcolor\">$person&nbsp;&nbsp;</font></td>" .
  +            "<td><font color=\"$tcolor\">$risk&nbsp;&nbsp;</font></td>" .
  +            "<td><font color=\"$tcolor\">$subject&nbsp;&nbsp;</font></td>" .
  +            "<td width=100%><font color=\"$tcolor\">$change</font></td>" .
  +            "</tr>\n";
  +    $cnt = (($cnt+1) % 2);
  +}
  +
  +$page .= "<tr bgcolor=\"#000000\">\n" .
  +         "<td><font color=\"#ffffff\">Time &nbsp;&nbsp;$nav_next</font></td>" .
  +         "<td><font color=\"#ffffff\">Team</font></td>" .
  +         "<td><font color=\"#ffffff\">Person</font></td>" .
  +         "<td><font color=\"#ffffff\">Risk</font></td>" .
  +         "<td><font color=\"#ffffff\">Subject</font></td>" .
  +         "<td><font color=\"#ffffff\">Change</font></td>" .
  +         "</tr>\n";
  +
  +$page .= "</table>\n";
  +
  +$page .= "</td>\n" .
  +         "</tr>\n";
  +
  +$page .= "<tr bgcolor=\"#666699\">" .
  +         "<td align=center>" .
  +         "<font color=\"#e0e0ff\">" .
  +         "Copyright &copy; 2001-2002 Cable &amp; Wireless Deutschland GmbH<br>" .
  +         "Database: <b>$db_entries</b> entries, <a href=\"changelog.txt\">raw</a> version" .
  +         "</font>" .
  +         "</td>\n";
  +
  +$page .= "</tr>\n" .
  +         "</table>\n";
  +
  +$page .= $MY->{FOOTER};
  +
  +print STDOUT $page;
  +exit(0);
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/changelog/changelog.foot.html
  ============================================================================
  $ cvs diff -u -r0 -r1.1 changelog.foot.html
  --- /dev/null	2003-05-29 11:43:32.000000000 +0200
  +++ changelog.foot.html	2003-05-29 11:43:32.000000000 +0200
  @@ -0,0 +1,2 @@
  +</body>
  +</html>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/changelog/changelog.head.html
  ============================================================================
  $ cvs diff -u -r0 -r1.1 changelog.head.html
  --- /dev/null	2003-05-29 11:43:32.000000000 +0200
  +++ changelog.head.html	2003-05-29 11:43:33.000000000 +0200
  @@ -0,0 +1,21 @@
  +<html>
  +<head>
  +<title>Application Services ChangeLog</title>
  +<style type="text/css"><!--
  +BODY { position: absolute; left: 0px; top: 0px; background: #9999cc; }
  +BODY,DIV,SPAN,
  +TABLE,TR,TD,TH,P,
  +FONT,UL,OL,LI
  +FORM,INPUT,
  +BLOCKQUOTE,A,I,B,EM  { font-family: helvetica,lucida,arial,sans-serif; }
  +TT,CODE,SAMP,PRE     { font-family: courier,courier-new,terminal,fixed,monospace; font-size: 90%; }
  +A                    { text-decoration: none; font-weight: 600; }
  +A:link               { color: #f0f0ff; }
  +A:visited            { color: #f0f0ff; }
  +.nbs A               { text-decoration: none; font-weight: 300; color: #ffffff; }
  +.nbr A               { text-decoration: none; font-weight: 300; color: #000000; }
  +.nbr A:link          { text-decoration: none; font-weight: 300; color: #000000; }
  +.nbr A:visited       { text-decoration: none; font-weight: 300; color: #000000; }
  +--></style>
  +</head>
  +<body bgcolor="#9999cc" marginwidth="0" marginheight="0" leftmargin="0" rightmargin="0" topmargin="0">
  @@ .
  (cd ossp-pkg/changelog && \
   uudecode <<'@@ .' && \
   xdelta patch changelog.logo.png.xdelta /dev/null changelog.logo.png && \
   rm -f changelog.logo.png.xdelta)
  Index: ossp-pkg/changelog/changelog.logo.png
  ============================================================================
  begin 664 changelog.logo.png.xdelta
  M)5A$6C`P-"4````(`!``#P````````````````````!S:&EE;&$N-S8Q-BYN
  M=6QL<VAI96QA+C<V,38N86QL'XL(`````````P,````````````?BP@`````
  M```#8V!H8&9@8#"X(MMSLY]A$\O+!LX9;WXXU0'%&``]X/R_'````````%,E
  '6$1:,#`T)0``
  `
  end
  @@ .
  (cd ossp-pkg/changelog && \
   uudecode <<'@@ .' && \
   xdelta patch changelog.logo.xcf.xdelta /dev/null changelog.logo.xcf && \
   rm -f changelog.logo.xcf.xdelta)
  Index: ossp-pkg/changelog/changelog.logo.xcf
  ============================================================================
  begin 664 changelog.logo.xcf.xdelta
  M)5A$6C`P-"4````(`!``#P````````````````````!S:&EE;&$N-S8Q-BYN
  M=6QL<VAI96QA+C<V,38N86QL'XL(`````````P,````````````?BP@`````
  M```#8V!H8&9@8#"X(MMSLY]A$\O+!LX9;WXXU0'%&``]X/R_'````````%,E
  '6$1:,#`T)0``
  `
  end
  @@ .
  (cd ossp-pkg/changelog && \
   uudecode <<'@@ .' && \
   xdelta patch changelog.next.png.xdelta /dev/null changelog.next.png && \
   rm -f changelog.next.png.xdelta)
  Index: ossp-pkg/changelog/changelog.next.png
  ============================================================================
  begin 664 changelog.next.png.xdelta
  M)5A$6C`P-"4````(`!``#P````````````````````!S:&EE;&$N-S8Q-BYN
  M=6QL<VAI96QA+C<V,38N86QL'XL(`````````P,````````````?BP@`````
  M```#8V!H8&9@8#"X(MMSLY]A$\O+!LX9;WXXU0'%&``]X/R_'````````%,E
  '6$1:,#`T)0``
  `
  end
  @@ .
  (cd ossp-pkg/changelog && \
   uudecode <<'@@ .' && \
   xdelta patch changelog.prev.png.xdelta /dev/null changelog.prev.png && \
   rm -f changelog.prev.png.xdelta)
  Index: ossp-pkg/changelog/changelog.prev.png
  ============================================================================
  begin 664 changelog.prev.png.xdelta
  M)5A$6C`P-"4````(`!``#P````````````````````!S:&EE;&$N-S8Q-BYN
  M=6QL<VAI96QA+C<V,38N86QL'XL(`````````P,````````````?BP@`````
  M```#8V!H8&9@8#"X(MMSLY]A$\O+!LX9;WXXU0'%&``]X/R_'````````%,E
  '6$1:,#`T)0``
  `
  end
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/changelog/changelog.txt
  ============================================================================
  $ cvs diff -u -r0 -r1.1 changelog.txt
  --- /dev/null	2003-05-29 11:43:33.000000000 +0200
  +++ changelog.txt	2003-05-29 11:43:33.000000000 +0200
  @@ -0,0 +1,1513 @@
  +2001-09-12/09:00|development|psmej|low|dev0.dev.de.cw.net|appended "sendmail_flag=-a" to /e/openpkg/sw/etc/rc.config
  +2001-09-14/10:00|hosting|cschug|low|relay.amadeus.net|upgraded Sendmail (OpenPKG /cw)
  +2001-09-14/15:00|hosting|mhendel|high|relay.amadeus.net|switched SMTP service to temporary Postfix under /pf
  +2001-09-15/15:00|development|rse|high|dev0.dev.de.cw.net|upgraded OS to FreeBSD 4.4-STABLE
  +2001-09-15/15:00|development|rse|low|dev1.dev.de.cw.net|upgraded OS to FreeBSD 4.4-STABLE
  +2001-09-15/15:00|development|rse|low|dev4.dev.de.cw.net|upgraded OS to FreeBSD 4.4-STABLE
  +2001-09-16/15:00|development|rse|low|dev2.dev.de.cw.net|upgraded OS to FreeBSD 5.0-CURRENT
  +2001-09-17/15:00|hosting|mhendel|low|relay.amadeus.net|upgraded Postfix under /cw to latest version
  +2001-09-17/22:31|hosting|rohde|low|relay.amadeus.net|SMTP service dead, restarted Postfix
  +2001-09-18/04:45|hosting|rohde|low|relay.amadeus.net|network problems, rebooted system
  +2001-09-23/18:30|hosting|rohde|low|spd|password reset performed
  +2001-09-24/15:00|as|rse|high|as.de.cw.net|upgraded OS to FreeBSD 4.4-STABLE and updated OpenPKG packages
  +2001-09-24/18:46|hosting|scholli|low|ns.glamus.de|machine not reachable, disk problems, rebooted
  +2001-09-25/16:00|as|rse|low|as.de.cw.net|installed OpenPKG Apache (/cw) and changelog.cgi (/as/web)
  +2001-09-25/14:00|development|psmej|low|dev[01].dev.de.cw.net|changed backup targets to dev4
  +2001-09-25/18:07|hosting|kgruber|low|terramap|terramap info's: don't switch on the webservers tmsws6 & tmsws8!
  +2001-09-26/10:44|hosting|mhendel|high|relay.amadeus.net|deleted the whole /pf hierarchy
  +2001-09-26/10:55|hosting|pbrudna|low|zdnet1, 2, 7|changed secNS for preisradar.de
  +2001-09-26/13:16|development|rse|low|dev10.dev.de.cw.net|upgraded OS to 4.4-STABLE
  +2001-09-26/17:28|hosting|cmuschio|low|alko openpkg|updated openpkg to 0.9-36, installed libiconv and mutt
  +2001-09-26/17:34|hosting|cmuschio|low|alko majordomo|added password for majorcool webinterface
  +2001-09-26/17:40|hosting|scholli|low|www.newmonday.de|rebooted
  +2001-09-26/18:15|hosting|cmuschio|low|alko majordomo|changed list owner delivery to local user alko
  +2001-09-27/23:56|hosting|scholli|low|al-ko.de|sendmail config: RefuseLA=8 to 14
  +2001-09-28/08:18|hosting|scholli|low|whatsup|density von 5s auf 18s wg. al-ko SMTP (Nur für al-ko?)
  +2001-09-28/11:25|hosting|mhendel|low|relay.amadeus.net|called Amadeus because mucsmtp1 is refusing our connections
  +2001-09-28/11:35|hosting|mhendel|low|mail.de.cw.net|installed a 3rd hierarchy /pf on mail.de.cw.net for postfix
  +2001-09-29/12:39|hosting|scholli|low|www.dfs.de/www8|ftp restarted
  +2001-09-30/10:40|hosting|scholli|low|pop.ecrc.de|POP3 down, restarted inetd, rebooted machine
  +2001-10-02/14:23|hosting|cmuschio|low|tratranscamion aka evonautic|enabled ftp service
  +2001-10-02/18:19|hosting|cmuschio|low|evonautic|installed sudo, gave user evonautic root access to tomcat
  +2001-10-04/10:35|hosting|mhendel|low|relay.amadeus.net|edited the /cw/etc/rc.conf for rsyncing the pflogsumm output
  +2001-10-04/12:23|hosting|kgruber|low|procter|changed pgcareers directory on the productive site
  +2001-10-04/12:24|hosting|kgruber|low|procter|relaunched the productive environment of www.hugo.com
  +2001-10-04/12:25|hosting|kgruber|low|procter|edited sql database connection of hugo in \include\db.asp
  +2001-10-04/13:19|hosting|kgruber|high|prcoter|creating _MANY_ redirects on pgcareers. _NEVER_ delete files
  +2001-10-04/13:27|as|rohde|low|procter|copied 20 files from stag. to prod. svr for pgcareer
  +2001-10-04/15:23|as|msander|low|syslog pop.de.cw.net|changed syslog level of mail from * to notice because of hig
  +2001-10-05/16:42|hosting|msander|high|pop.de.cw.net: syslog|chngd syslg lvl mail.notice -> mail.info bcs of popauth prob
  +2001-10-05/19:30|hosting|rohde|low|dooyoo|rebooted three machines
  +2001-10-08/11:11|hosting|msander|high|procter019: SDS|SDS deconfigured, system runs without mirroring
  +2001-10-08/14:36|hosting|cschug|low|mail.de.cw.net|upgraded openpkg itself within /cw
  +2001-10-08/14:36|hosting|mhendel|low|relay.amadeus.net |did some changes to the stats - rrdtool
  +2001-10-08/15:39|hosting|mhendel|low|relay.amadeus.net|edited the /cw/etc/postfix/access to reject local addresses
  +2001-10-08/15:46|hosting|pbrudna|low|sec MX|added domain to mail.de.cw.net macoy.de
  +2001-10-08/16:22|hosting|cschug|low|mail.cweurope.net|upgraded ncurses, less & vim
  +2001-10-09/08:33|hosting|mhendel|low|relay.amadeus.net|edited the /cw/etc/postfix/access to reject local addresses
  +2001-10-09/10:45|hosting|mhendel|low|mhm|merlin2 (NT Server) rebootet
  +2001-10-09/10:45|hosting|mhendel|low|digitaladvertising|HP Sure Store ein- und ausgeschalten
  +2001-10-09/12:19|hosting|mhendel|low|www1-muc1.de.cw.net|updated openpkg and all other packages, not mysql - broken
  +2001-10-09/12:19|hosting|mhendel|low|relay.amadeus.net|edited the access file to reject more local addresses
  +2001-10-09/17:02|hosting|cschug|low|kenny.de.cw.net|upgr. openpkg, ncurses, slang, vim, libpcap; inst. nmap
  +2001-10-09/18:10|hosting|cschug|high|www.webmiles.de|commented out "tail -f $TOMLOG" in /export/home/wmlgr/webmiles.de/conf/tomcat-start.sh
  +2001-10-10/11:40|hosting|cmuschio|low|merck&finck|installed openpkg up to openssh on db1&2
  +2001-10-11/10:45|hosting|cschug|low|www.al-ko.de|restarted apache
  +2001-10-11/11:10|hosting|cschug|low|news.ecrc.de|added new feed amer.de
  +2001-10-11/11:56|as|rse|low|as.de.cw.net|upgraded OS to latest FreeBSD 4.4-STABLE
  +2001-10-11/12:01|as|rse|low|as.de.cw.net|upgraded /cw OpenPKG bootstrap to openpkg-0.9-36
  +2001-10-11/14:53|db-support|jschaedl|high|wwww.webmiles.de|changed system password to dbteam standard
  +2001-10-11/15:27|development|mschloh|low|dev7.dev.de.cw.net|httpd service added to dev7 in /etc/rc3.d/S51webservd runlevel 3 shell script
  +2001-10-11/15:37|hosting|mhendel|low|relay.amadeus.net|hugh queue but relay is fine
  +2001-10-11/15:38|hosting|mhendel|low|relay.amadeus.net|I changed the default_destination_concurrency_limit from 20 to 10
  +2001-10-11/19:37|hosting|rohde|low|kenny.de.cw.net|upgr. mysqld to 3.23.43
  +2001-10-12/08:42|db-support|cscheith|low|Procter&Gamble|Maxextents auf unlimited gesetzt beim TEMP-Tablespace (PROD)
  +2001-10-12/09:28|db-support|sgierth|low|procter012.pg-cw.de|Datafile of TEMP tablespace of Oracle PROD db enlarged from 50 to 100 MB
  +2001-10-12/11:41|hosting|cschug|low|mail.de.cw.net|added win-tel.ch as sec MX
  +2001-10-12/13:26|hosting|mhendel|high|relay.amadeus.net|installed a 2nd hierarchy (/pf) with the newest postfix to get the new nqmgr
  +2001-10-12/13:28|hosting|mhendel|high|relay.amadeus.net|disabled the incoming queue and reduced the processes on postfix under /cw
  +2001-10-12/13:30|hosting|mhendel|high|relay.amadeus.net|started the postfix under /pf - for any problems call me at any time
  +2001-10-12/14:43|hosting|cschug|high|news.ecrc.de|MANY openpkg upgrades
  +2001-10-12/14:43|hosting|cschug|high|news-FFM2.de.cw.net|MANY openpkg upgrades
  +2001-10-12/14:43|hosting|cschug|high|news-DUS2.de.cw.net|MANY openpkg upgrades
  +2001-10-12/14:43|hosting|cschug|high|news-MUC1.de.cw.net|MANY openpkg upgrades
  +2001-10-12/19:11|hosting|cschug|high|news-MUC1.de.cw.net|MANY openpkg upgrades
  +2001-10-15/10:43|db-support|asikeler|low|database.beautynet.de|Perfstat: Snapshots older than 01.09.2001 deleted (snap-id 638-1071)
  +2001-10-15/10:57|db-support|asikeler|low|alba.ecrc.de|removed backup_files from crontab (is anyway called by autom-bp_plus)
  +2001-10-15/11:40|db-support|asikeler|low|dba.ecrc.de|/u01/oracle/oradata/iso/users01.dbf resized to 5M
  +2001-10-15/11:40|db-support|asikeler|low|dba.ecrc.de|/u01/oracle/oradata/iso/users01.dbf resized to 5M
  +2001-10-15/17:07|hosting|cschug|low|netapp02-MUC1.de.cw.net|reconfigured filer volumes
  +2001-10-15/17:31|as|scholli|low|relay.amadeus.net|pf restartet; mucsmtp1... in /etc/hosts
  +2001-10-15/19:13|development|mschloh|low|dev7.dev.de.cw.net|ircd service added to dev7 in /etc/inet/inetd.conf at port 6667
  +2001-10-16/16:00|hosting|cmuschio|low|evonautic|changed hostname/config to www.ferryworld.de
  +2001-10-17/15:55|db-support|cscheith|low|procter012.pg-cw.de|Schema beinggirl_fr has moved from instance PROD to C&W,Reston
  +2001-10-17/15:56|db-support|sgierth|low|dbteam.ecrc.de - Oracledb RCAT|In /export/home/oracle/rcat-logs/list_bps.log Oracle sys password changed
  +2001-10-17/17:26|db-support|cscheith|low|procter012.pg-cw.de|Schema beinggirl_fr has moved from instance PROD to C&W,Reston
  +2001-10-18/07:37|hosting|mhendel|high|relay.amadeus.net |switched back to /cw hierarchy on tuesday morning
  +2001-10-18/09:31|hosting|pbrudna|low|relay.amadeus.net|changed htpasswd to "relay"
  +2001-10-18/10:40|hosting|mhendel|low|relay.amadeus.net|changed the /proc/sys/fs/file-max to 16384
  +2001-10-18/10:41|hosting|mhendel|low|relay.amadeus.net|changed master.cf to allow postfix to use 175 smtp processes
  +2001-10-18/10:42|hosting|mhendel|low|relay.amadeus.net|made some entries in the /cw/etc/postfix/access file
  +2001-10-18/11:50|db-support|asikeler|low|alba.ecrc.de|Script move_alertfile changed; now it is sent again to isdba@ecrc.de
  +2001-10-18/14:50|hosting|cmuschio|low|bayer|changed whatsup customer notification to noc@raytion.com
  +2001-10-18/17:01|db-support|sgierth|low|miles2.webmiles.de|Datafile for tbsp 'IND_PD_CH' resized from 5M to 50M on oracledb
  +2001-10-18/20:52|hosting|rohde|low|kenny.is.de.cw.net|installed rrdtool (openpkg)
  +2001-10-19/08:08|db-support|asikeler|low|alba.ecrc.de|Script move_alertfile changed; now it is sent again to isdba@ecrc.de
  +2001-10-19/10:14|db-support|asikeler|low|procter012.pg-cw.de|changed initprod.ora --> effective on next startup of the database
  +2001-10-19/10:28|db-support|asikeler|low|procter012.pg-cw.de|changed initprod.ora --> effective on next startup of the database
  +2001-10-19/10:30|db-support|asikeler|low|miles2.webmiles.de|datafile /u03/oracle/oradata/webmiles/ind_pd_fr01.dbf resized: 200 --> 300 MB
  +2001-10-19/10:31|db-support|asikeler|low|miles2.webmiles.de|datafile /u02/oracle/oradata/webmiles/ind_pd02.dbf resized: 500 --> 1024 MB
  +2001-10-19/12:20|hosting|mhendel|low|bayervital|rebooted with console
  +2001-10-19/12:21|hosting|mhendel|low|bayer.com|deleted files under /export/home/*/logs/200110(13-18).*
  +2001-10-19/12:22|hosting|mhendel|low|mail.preis24.de|tried to get telnet, ssh working on that maschine
  +2001-10-19/14:16|hosting|mhendel|low|mail.preis24.de|forwarded the ticket to SECOD to the firewall stuff
  +2001-10-19/16:46|hosting|pbrudna|low|vuw auf www6|changed passwd 4 vuw2 user
  +2001-10-19/16:48|hosting|pbrudna|low|bayervital|configured IP's on desicated Server
  +2001-10-19/17:58|hosting|mhendel|low|mail.preis24.de|connected the server to the foundry instead of to the switch
  +2001-10-19/18:00|hosting|mhendel|low|mail.preis24.de|installed openssh
  +2001-10-19/18:54|hosting|cschug|low|mail.preis24.com (195.27.139.40)|OpenSSH finally works despite f****ing Mandrake Linux
  +2001-10-22/07:27|hosting|mhendel|low|mail.preis24.com|all hosting keys are on there
  +2001-10-23/16:21|hosting|cmuschio|low|dbtest|installed openpkg up to ssh on dbtest 1&2
  +2001-10-24/13:16|hosting|cschug|low|support2.eu.cw.com (141.1.1.45)|updated openpkg and installed apache
  +2001-10-24/15:35|hosting|cschug|high|OLD www6-MUC.ecrc.net (62.208.30.44)|deactivated ncftpd (-> /etc/inittab !)
  +2001-10-24/17:55|hosting|cschug|low|OLD www6-MUC.ecrc.net (62.208.30.44)|modified apache config & restart
  +2001-10-25/09:50|hosting|cschug|high|OLD www6-MUC.ecrc.net (62.208.30.44)|upgraded kernel 2.0.35 (sigh :) to 2.0.39
  +2001-10-25/15:02|hosting|cschug|low|www.geze.de|upgraded Debian
  +2001-10-25/15:02|hosting|cschug|low|kenny.de.cw.net|upgraded Debian
  +2001-10-25/15:22|hosting|kgruber|high|pop.ecrc.de|found discrepancies between the password and shadow files; msander will take a look
  +2001-10-25/17:15|hosting|kgruber|low|procter|maxfactor: changed script access rights for proper functionating on procter004
  +2001-10-25/17:27|hosting|rohde|low|kenny.de.cw.net|installed php accelerator
  +2001-10-29/11:00|as|awaegner|low|kge-kommunalgrund.de|moved from www4 to tsw1 IP changed to 62.208.123.25
  +2001-10-29/11:02|hosting|pbrudna|low|mail.de.cw.net|sec MX added TT56833
  +2001-10-29/11:02|hosting|pbrudna|low|dooyoo|Reboot DB1
  +2001-10-29/11:17|hosting|mhendel|low|relay.westlb.de|installed second hierarchy for smooth upgrading
  +2001-10-29/11:17|hosting|mhendel|low|relay.westlb.de |changed active postfix from /cw to /pf
  +2001-10-29/11:18|hosting|msander|low|procter019: SDS|SDS rebuilt on 10.10.2001
  +2001-10-29/11:25|hosting|msander|low|procter009|moved /data/ariel to /content
  +2001-10-29/11:49|db-support|asikeler|low|alba.ecrc.de|admin script autom_del_moved_backups changed: keep moved backups 1 instead of 7 days
  +2001-10-29/12:11|hosting|msander|low|procter009: Domain|Added several domains and redirs to ariel, dash, bolt2in1
  +2001-10-29/13:23|hosting|awaegner|low|rae-weber-partner.de|moved from www4 to tsw1 IP changed to 62.208.123.26
  +2001-10-29/13:54|hosting|awaegner|low|boemmerl.de|moved from www4 to tsw1 IP changed to 62.208.123.27
  +2001-10-29/14:15|hosting|msander|low|procter009: update|Content of Ariel/Denmark
  +2001-10-29/14:40|hosting|cschug|low|kenny.de.cw.net|reboot (JFS hanged)
  +2001-10-29/14:43|hosting|cschug|low|news-FFM2.de.cw.net|deconfigured news feed for news.ops.de
  +2001-10-29/15:05|hosting|msander|low|Procter&Gamble|Released new UNIX-Docu what coveres new iPlanet redirects
  +2001-10-29/15:14|hosting|mhendel|low|relay.amadeus.net|They got spammed through their own firewall
  +2001-10-29/17:42|hosting|pbrudna|low|mail.de.cw.net|removed secMX iamc.de
  +2001-10-30/07:54|db-support|sgans|low|database.beautynet.de|Upgrade der Instance beauty von 8.1.6.2.1 auf 8.1.7.2.0
  +2001-10-30/07:59|db-support|sgans|low|database.beautynet.de|Tuning einiger init.ora-Parametern (db_block_buffers,java_pool_size,large_pool_size)
  +2001-10-30/10:37|hosting|msander|low|procter009: logging|switched dash.it to cronolog logging
  +2001-10-30/10:38|hosting|msander|low|procoter009: move|moved /data/dash to /content
  +2001-10-30/11:29|hosting|msander|low|procter009: logging|switched fairynonbio to cronolog logging
  +2001-10-30/14:48|hosting|rohde|low|kenny.de.cw.net|switched htdocs dev to production (removed restrictions)
  +2001-10-30/15:54|hosting|cmuschio|low|linux-demo|chown -R webprojects /var/www
  +2001-10-31/08:19|hosting|cschug|low|news.ecrc.de|modfied feed for msdnet.de
  +2001-10-31/14:27|as|msander|high|dbtest[12]|dbtest1 mounts dbtest2:/cdrom. Do not eject.
  +2001-10-31/17:28|hosting|mhendel|low|bayer.com|did some chages for access to /vol2/opt/SEEK...
  +2001-10-31/17:29|hosting|mhendel|low|holmes.bayer-healthvillage.com|/var ran out of space - we moved patrol to another partition and deleted some files
  +2001-10-31/17:31|hosting|mhendel|low|holmes.bayer-healthvillage.com|did some changes to the access of /export/home/wwwadm/SEEK..
  +2001-11-01/10:37|db-projects|cbotta|high|online orderform / dba.ecrc.de|converted the application currency from DM to Euro
  +2001-11-02/13:43|hosting|kgruber|low|alferano.com|sceduled move from www4 to tsw1 IP changed to 62.208.123.27
  +2001-11-02/16:01|hosting|kgruber|high|procter|created new staging site on procter004: allwaysselbstundsicher (194.112.105.60)
  +2001-11-02/16:01|hosting|kgruber|high|procter|pgcareers.com: Urgent Site Structure Change fullfilled
  +2001-11-02/16:02|hosting|kgruber|low|procter|iams-eu.com: live site file checked
  +2001-11-02/16:22|hosting|kgruber|high|procter|nt-sites: remember to deny upload requests like "upload all files"; allways ask for specific files/folders!
  +2001-11-02/17:25|hosting|kgruber|low|dooyoo|autonoy2: restarted ssh-demon; applied vga kabel to console switch
  +2001-11-05/11:50|db-support|moeller|low|Remedy - Oracle Recovery Catalog|Registration of DB 817 in Recovery Catalog, DB 817 Backup now via Oracle Recovery Catalog (Remedy not yet active!)
  +2001-11-05/11:51|db-support|moeller|low|Webmiles - Recovery Catalog|DB Backups now via Oracle Recovery Catalog, Reyync etc as well
  +2001-11-05/12:22|hosting|msander|low|procter009: update|fairynonbio: staging -> production. Changed Virtualhost's config
  +2001-11-06/10:10|db-support|moeller|low|Webmiles - redo logs|Resize Redo Logs to 80 MB to have more frequent checkpoints
  +2001-11-06/12:58|hosting|scholli|low|webprojects-NT|removed CodeRED. server was infected despite the latest security patches
  +2001-11-06/15:07|hosting|cschug|low|news.ecrc.de|created dedicated feed object for news-MUC1.de.cw.net
  +2001-11-06/17:46|development|mschloh|low|dev0.dev.de.cw.net|Added 'openpkg' entries to /sw/etc/sendmail/sendmail.cf and l.ournames
  +2001-11-06/18:03|hosting|msander|low|mail.de.cw.net: /ecrc|added script /root/scripts/smc.sh to monitor mailq-size
  +2001-11-07/08:32|hosting|cschug|low|kenny.ecrc.de|added /doc alias to intra.is.de.cw.net apache config
  +2001-11-07/08:34|hosting|cschug|low|kenny.ecrc.de|upgraded libc
  +2001-11-07/09:34|hosting|cschug|low|mail.de.cw.net|restarted mail.ecrc.de-sendmail
  +2001-11-07/09:35|hosting|cschug|low|mail.de.cw.net|added dirty hack to /ecrc/etc/rc.d/rc.sendmail daily behavior
  +2001-11-07/17:32|hosting|cmuschio|low|www1-muc1|updated openpkg, sendmail and procmail
  +2001-11-07/17:38|hosting|rohde|low|support.ecrc.de|openpkg auf 0.9 geupdated
  +2001-11-07/17:39|hosting|rohde|low|support.ecrc.de|openssh auf version 3.0p1 geupdated
  +2001-11-07/17:48|hosting|rohde|low|support.ecrc.de|openpkg pcre-3.5 installiert
  +2001-11-07/18:17|hosting|rohde|low|support2.eu.cw.com|openpkg auf 0.9 geupdated
  +2001-11-07/18:18|hosting|rohde|low|support2.eu.cw.com |openpkg pcre-3.5 installiert
  +2001-11-07/18:18|hosting|rohde|low|support2.eu.cw.com |openssh auf version 3.0p1 geupdate
  +2001-11-07/18:18|hosting|rohde|low|support2.eu.cw.com|mysql 3.23.44 geupdated
  +2001-11-08/08:16|as|asikeler|low|alba.ecrc.de|changed password of oracle user cwusa (adviced by NMIT)
  +2001-11-08/10:28|hosting|cschug|low|support2.eu.cw.com|libc, e2fsprogs update
  +2001-11-08/11:52|hosting|cschug|high|nfs-DUS.ecrc.net|shut interface e3
  +2001-11-08/13:27|hosting|mhendel|low|www1-muc1.de.cw.net|configured eth1 for backup ip 172.16.0.105
  +2001-11-08/13:28|hosting|mhendel|low|relay.westlb.de|updated openpkg
  +2001-11-08/13:40|hosting|mhendel|low|relay.westlb.de|changed from /pf hierarchy back to /cw hierarchy
  +2001-11-08/14:37|db-support|moeller|low|beautynet|registration of db into reccat 817, modif. and test of backups, paralell backups
  +2001-11-08/18:30|hosting|cschug|low|www.geze.de|libc, e2fsprogs update
  +2001-11-09/09:32|db-support|sgierth|low|tradecross oracle db 194.221.248.20|Upgrade Oracle Server 8.1.5.0.0  to 8.1.7.2.5, website is up and running
  +2001-11-09/10:46|db-support|sgierth|low|procter012.pg-cw.de|On Oracle Database circ temp tablespace extended to 250MB, db extents set to unlimited
  +2001-11-09/11:36|hosting|mhendel|low|mail.amadeus.net|is disconnected, everymail is handled by relay.amadeus.net :-)
  +2001-11-09/14:18|hosting|cmuschio|low|www.bayer.com|updated openpkg
  +2001-11-09/16:33|hosting|mhendel|low|zeppelin.com|added zeppelin.com on mail.de.cw.net
  +2001-11-09/18:05|hosting|cmuschio|low|www1-muc1|added virtual backup server for www.bayer.com/de
  +2001-11-12/15:32|hosting|cschug|high|web2.agrion.com|kernel decided to go on vacation :-) hard reset
  +2001-11-12/17:42|hosting|cschug|low|www.meisterverlag.de|updated entire OpenPKG distribution
  +2001-11-13/14:00|hosting|awaegner|low|Wintermserver|Windows Terminal Server Online (141.1.25.221) includes PC-Anywhere, Terminalclient and Office 2000
  +2001-11-13/14:02|hosting|awaegner|low|Support console|Console for support connected and active
  +2001-11-13/14:46|hosting|awaegner|low|Procter 033|New Logrotateserver (W2k-Teminal-Server 194.112.105.93) for Procter
  +2001-11-13/18:45|hosting|kgruber|low|procter|finished automated rotating scripts for urchin on procter033
  +2001-11-14/18:00|hosting|cschug|low|bugs.ecrc.de|updated Debian
  +2001-11-15/10:05|db-support|asikeler|low|procter012.pg-cw.de|changed removing of moved backups and archive logs to 60 days
  +2001-11-15/11:49|hosting|kgruber|low|procter|hugo: put the french version of the site into production
  +2001-11-15/11:50|hosting|kgruber|low|procter|hugo: changed iis access rights to allow screensavers to be downloaded
  +2001-11-15/16:12|hosting|cmuschio|low|www1-muc1|added virtual server wap1.netsccm.de
  +2001-11-15/17:10|hosting|kgruber|low|alferano.com|relocated alferano.com to nt2k shared server tsw1; change remedy info and dns
  +2001-11-15/17:29|hosting|kgruber|low|procter|procter033: changed rotating scripts from /ns-home/https-194.112.105.70.200/ to /ns-home/https-194.112.105.93.200/
  +2001-11-16/12:29|hosting|msander|low|www5/6|Deleted /export/home/8013 physically. Deleted user mukherjee and its files. Need someone deconfiguring BIGIP
  +2001-11-16/12:33|db-support|cscheith|low|Erdinger|Fixieren des Arbeitsspeichers der SQL-Instanz auf 200 MB
  +2001-11-16/13:59|db-support|cscheith|low|Erdinger|Fixieren des Arbeitsspeichers der SQL-Instanz auf 200 MB
  +2001-11-16/14:58|hosting|kgruber|high|terramap|tmsws5 with power failure; opened emergency case on sgi hotline (case no.: 2265772)
  +2001-11-16/14:59|hosting|kgruber|low|terramap|whatsup: added user Terramap and ip 193.26.32.66 aswhatsup user to watch their terramap.wup
  +2001-11-19/08:45|db-support|asikeler|low|miles2.webmiles.de|datafile /u04/oracle/oradata/webmiles/ind_dte_01.dbf resized: 800 --> 1024 MB
  +2001-11-20/14:47|hosting|mhendel|low|mail.de.cw.net|updated OpenPKG /pf hierarchy
  +2001-11-20/14:48|hosting|mhendel|low|mail.de.cw.net|configured postfix under /pf hierarchy to takeover
  +2001-11-20/16:08|hosting|mhendel|low|mail.de.cw.net|change to Postfix is done under /pf - I'll take care of it 
  +2001-11-20/16:26|hosting|cschug|low|www.cw-webprojects.com|changed physical network setup to reconnect the server to the net
  +2001-11-20/16:28|hosting|cschug|high|www.cw-webprojects.com|disabled dangerous network services (shell, login, finger)
  +2001-11-21/13:28|hosting|awaegner|low|procter|uploaded different files for pgcareers from staging to live see ticket 60363 and 60376 
  +2001-11-21/13:30|hosting|awaegner|low|procter|uploaded different files for pgprof-uk from staging to live see ticket 60367
  +2001-11-21/14:49|hosting|mhendel|low|mail.de.cw.net|subscribed to bugtraq, freebsd-questions, freebsd-ports, freebsd-announce, mutt-users, php, postfix mailinglists
  +2001-11-21/17:52|as|msander|low|bugs.ecrc.de|Versuch, Smartstartconfig durchzufuehren - bisher fehlgeschlagen
  +2001-11-21/17:54|as|msander|low|setup6|hab dem setup6 in APP1-B10 das Appex-Consolenkabel geklaut
  +2001-11-21/18:08|as|mhendel|low|smartstart bootfloppies|created /home/public/Application/Hosting/smartstart_floppies, where the ESSENTIAL smartstart floppies can be storted
  +2001-11-21/18:09|as|msander|low|smartstart bootfloppies|created /home/public/Application/Hosting/smartstart_floppies, where the ESSENTIAL smartstart floppies can be storted
  +2001-11-22/08:29|hosting|cschug|low|switch-apps.is.de.cw.net|configured port 22 for msander's terminal server project
  +2001-11-22/08:30|hosting|cschug|low|lsd.is.de.cw.net|updated Debian
  +2001-11-22/17:02|hosting|kgruber|high|terramap|TMSWS1 Shutdown until repeated asp & database connection erros. System will be reviewed by customer on friday 23.11.01
  +2001-11-22/17:37|hosting|cschug|low|news-FFM2.de.cw.net|updated openpkg, openssh; installed pcre
  +2001-11-22/17:46|hosting|cschug|low|news-FFM2.de.cw.net|added "-nocreate" to Cyclone startup script
  +2001-11-22/18:02|hosting|cschug|low|news-FFM2.de.cw.net|reboot
  +2001-11-22/19:27|hosting|cschug|high|news-FFM2.de.cw.net|applied current Solaris 2.6 recommended patch cluster
  +2001-11-22/19:28|hosting|cschug|high|news-FFM2.de.cw.net|changed default runlevel from 2 to 3
  +2001-11-22/19:30|hosting|cschug|low|news-FFM2.de.cw.net|reboot
  +2001-11-23/09:06|hosting|cschug|low|news-FFM2.de.cw.net|removed feed for mail.de.cw.net and dev12.dev.de.cw.net
  +2001-11-23/09:49|hosting|awaegner|low|procter|uploaded different files for pgprof.com from staging to live see ticket 60629 and 60630 
  +2001-11-23/09:49|hosting|awaegner|low|procter|uploaded different files for pgcareers from staging to live see ticket 60605
  +2001-11-23/09:51|hosting|awaegner|low|Whatsup|installed new IIS-Patch and then reboot
  +2001-11-23/13:00|hosting|rohde|low|www1-muc1.ecrc.net|Updated apache with php support
  +2001-11-23/13:48|hosting|pbrudna|low|spinag|debian+ssh installed on two new spin Servers
  +2001-11-23/15:27|hosting|msander|low|`www.spd.de|alten server vorruebergehend vom netz genommen
  +2001-11-23/15:45|hosting|msander|low|www.spd.de|alter server nur noch ueber 'neuen' (10.1.1.11) als 10.1.1.12 erreichbar, netmask 255.255.255.0
  +2001-11-25/12:28|hosting|cschug|low|www.al-ko.de|compressed zmod logs to lessen disk space probs on /
  +2001-11-26/11:37|hosting|kgruber|low|terramap|Webserver 7 & 8 sind nicht mehr im Loadbalancing der Foundry
  +2001-11-26/11:42|hosting|awaegner|low|Active Perl Update|Changed Active Perl version on all Windows shared servern to 5.6.1 Build 630
  +2001-11-26/12:22|hosting|scholli|low|logrotate 195.27.205.35/6|logrotate.conf: Syntaxfehler beseitigt, wsb.message in logrotate aufgenommen
  +2001-11-26/12:25|hosting|kgruber|low|procter|uploaded different files for pgcareers from staging to live
  +2001-11-26/12:26|hosting|kgruber|low|procter|recall of staging site: allways selbst und sicher
  +2001-11-26/12:26|hosting|kgruber|low|prcoter|added ICE TEAM Member Matteo Fabiano as an FTP Account for all staging sites
  +2001-11-26/12:57|hosting|scholli|low|tsw1.W2K.de.cw.net|2 neue gkm user. 2 gkm-user beseitigt
  +2001-11-27/10:48|hosting|kgruber|low|terramap|alle webserver bis auf einen abgeschaltet
  +2001-11-27/10:48|hosting|kgruber|low|terramap|zweiten webserver zum test zum system dazugefügt
  +2001-11-27/10:49|hosting|kgruber|low|terramap|TMSWS5 muss laufen, weil dort die seiten für den shop generiert werden. damit sind 3 webserver im produktiven einsatz. bis jetzt keine probleme beim anziegen der kartendaten
  +2001-11-27/12:38|hosting|kgruber|low|terramap|TMSWS5 muss laufen, weil dort die seiten für den shop generiert werden. damit sind 3 webserver im produktiven einsatz. bis jetzt keine probleme beim anziegen der kartendaten
  +2001-11-28/13:42|hosting|kgruber|low|terramap|TMWS5 off again - escalated SGI Trouble Ticket to Project Manager (GL)
  +2001-11-28/13:42|hosting|kgruber|low|terramap|TMSWS5: switched on again
  +2001-11-28/13:42|hosting|kgruber|low|terramap|TMSWS1: switched on again
  +2001-11-28/13:43|hosting|kgruber|low|terramap|TMSWS1: is currently running with asp script errors. customer will check his application
  +2001-11-28/13:43|hosting|kgruber|low|procter|doing some uploads on pgcareers site
  +2001-11-28/13:44|hosting|kgruber|low|terramap|correct dns & active directory error, that the main dns zone is still pointing on the former domain controller TMSWS1
  +2001-11-28/13:45|hosting|kgruber|low|terramap|switched internal dns zones for terramapserver.de to TMSDC1 & TMSDC2
  +2001-11-28/13:45|hosting|kgruber|low|terramap|devoted TMSWS1 from being an windows 2000 domain controller
  +2001-11-28/13:46|hosting|kgruber|low|terramap|TMSWS1: removed active directory from this server
  +2001-11-28/13:47|hosting|kgruber|low|terramap|TMSFS1A: checked - cluster node not in the domain anymore
  +2001-11-28/13:47|hosting|kgruber|low|terramap|TMSFS1B: checked - cluster node not in the domain anymore
  +2001-11-28/13:47|hosting|kgruber|low|terramap|TMSFIBER: cancelled windows 2000 cluster functionality
  +2001-11-28/13:48|hosting|kgruber|low|terramap|TMSFS1A/B: rebooted both cluster nodes and brought them in the windows 2000 domain again
  +2001-11-28/13:49|hosting|kgruber|low|terramap|TSMFIBER: restored fileserver cluster functionality - is up and running again
  +2001-11-28/13:59|hosting|cmuschio|low|www1-muc1|added virtual server for apeiron
  +2001-11-28/14:00|db-support|moeller|high|webmiles|password change for Oracle sys and system users
  +2001-11-28/14:00|db-support|moeller|high|beautynet|password change for Oracle sys and system users
  +2001-11-28/14:00|db-support|moeller|high|Merck+Finck|password change for Oracle sys and system users
  +2001-11-28/16:18|db-support|moeller|low|bayer-health-village|resize tablespaces users and tools
  +2001-11-28/16:46|hosting|kgruber|low|terramap|TMSWS1: Applied two Pre-SP3 IIS5 Security Patches
  +2001-11-29/08:54|as|sgierth|high|Remedy cluster caer, burga|password change for Oracle sys and system users
  +2001-11-29/08:55|as|sgierth|high|Oracle db ars1 on alba.ecrc.de|password change for Oracle sys and system users
  +2001-11-29/08:56|as|sgierth|high|Oracle db bhv on holmes.bayerhealthvillage.de|password change for Oracle sys and system users
  +2001-11-29/08:57|as|sgierth|high|Oracle db PROD, circ, STAG on procter012.pg-cw.de|password change for Oracle sys and system users
  +2001-11-29/09:14|db-support|moeller|low|webmiles|add datafile on /u04 for TS PD1024
  +2001-11-29/10:20|hosting|kgruber|low|terramap|TMSWS1: switched off server during repeated application problems
  +2001-11-29/10:20|hosting|kgruber|low|terramap|TMSWS5: SGI technican changing server hardware
  +2001-11-29/10:32|db-support|moeller|low|webmiles|parallization of backup procedure
  +2001-11-29/10:48|hosting|mhendel|low|mail.de.cw.net|upgraded OpenPKG, deinstalled sendmail, installed postfix
  +2001-11-29/11:05|hosting|kgruber|low|terramap|TMSWS5: SGI buildt in a new spare server for testing puposes
  +2001-11-29/11:12|hosting|kgruber|high|procter|Set domain admin account on proctordom for CWUSA Admin William Chee
  +2001-11-29/13:28|hosting|mhendel|low|ftp.de.cw.net|updated the /news hierarchy
  +2001-11-30/08:45|hosting|mhendel|low|mail.de.cw.net|I moved postfix from /pf to /cw hierarchy. Postfix in /pf is still running, but not listening on Port 25. I will delete this hierarchy at least after five days (the time we keep deferred mails)
  +2001-11-30/08:57|db-support|sgierth|low|dba.ecrc.de|coded new system password into $ORACLE_HOME_OEMSCRIPTE/export_pw
  +2001-11-30/10:47|hosting|cschug|low|www.al-ko.de|upgraded openpkg (the package itself) and make
  +2001-11-30/12:56|hosting|cschug|low|news.ecrc.de|configured down stream feed to news.de.cw.net
  +2001-11-30/12:57|hosting|cschug|low|news.de.cw.net|configured to accept feed from news.ecrc.de
  +2001-11-30/13:17|hosting|cschug|low|www.al-ko.de|upgraded gcc
  +2001-11-30/14:02|hosting|cschug|low|www.al-ko.de|upgraded gawk, bison, flex, zlib, gzip, bzip2, grep, sed, sharutils, tar, infozip, libpcap
  +2001-11-30/14:03|hosting|cschug|high|www.al-ko.de|upgraded ntp
  +2001-11-30/15:31|hosting|cschug|low|www.al-ko.de|upgraded fileutils, findutils, shellutils, textutils, patch, bash, pdksh, tcsh
  +2001-11-30/16:03|hosting|cschug|low|www.al-ko.de|restarted sendmail
  +2001-11-30/16:39|hosting|cschug|low|www.al-ko.de|upgraded ncurses, slang, vim, less; installed pcre
  +2001-11-30/16:57|hosting|cmuschio|high|www.al-ko.de|rotated apache access logfiles
  +2001-11-30/17:37|hosting|rohde|low|support2.eu.cw.com|Perlmodule MD5 installiert
  +2001-11-30/18:37|hosting|kgruber|high|terramap|Changed password of the domain admin account an all local administrator passwords
  +2001-11-30/18:37|hosting|kgruber|high|terramap|added several terramap users to administer the servers
  +2001-12-03/17:01|hosting|awaegner|low|Webtrends|New machine for webtrends mounted (DL-380) with IP from old IVW (194.221.99.114). Reachable with Terminalclient. Name will be webtrends.de.cw.net.
  +2001-12-03/17:03|hosting|awaegner|low|terramap|added the new users to "domain-admins" group
  +2001-12-04/09:11|hosting|mhendel|low|mail.de.cw.net|updated petidomo in /cw
  +2001-12-04/09:13|hosting|mhendel|low|www.webmiles.de|updated yesterday the root password to the courrent one
  +2001-12-04/09:32|hosting|mhendel|low|www1-muc1.de.cw.net|samba server installed, to provide logfiles to webtrends server
  +2001-12-05/08:46|hosting|cschug|low|procter002.pg-cw.de|restarted several virtual web servers
  +2001-12-05/15:11|hosting|kgruber|low|procter|procter02: restarted www.hugo.com & www.maxfactor.com - no errors in log found
  +2001-12-05/15:12|hosting|kgruber|low|terramap|reconfigured windows message queuing with certificates on the first domain controller
  +2001-12-05/15:13|hosting|kgruber|low|terramap|restarted webservers 2& 6 and checked them; they are productive now
  +2001-12-05/15:14|hosting|kgruber|low|terramap|TMSWS1: checked asp application error - programmer found no resolution - switched server off again
  +2001-12-06/11:37|hosting|mhendel|low|holmes.bayer-healthvillage.com|changed permissions for index.html and index_s.html to 644 in /export/home/htdocs/reports/lib..
  +2001-12-06/14:14|as|rse|high|ftp.de.cw.net|manually upgraded wu-ftpd under /e/ftp/sw/pkg/wuftpd/ to version 2.6.2 which includes fixes for latest security problems.
  +2001-12-06/14:58|hosting|kgruber|high|procter|finally patched the productive server registry to handle the high traffic on pgcareers/hugo/maxfactor; since then to error occured anymore. YEAH!
  +2001-12-06/15:07|hosting|msander|low|procter (UNIX)|Updated documentation, created summary in new intranet
  +2001-12-06/15:08|hosting|msander|low|bugs.ecrc.de|new installation with debian, ready to become a cd-burn server ;-)
  +2001-12-06/15:09|hosting|msander|low|procter011 (familiensache)|cleaned up some logs
  +2001-12-06/15:41|hosting|cmuschio|high|www1-muc1|updated apache with ssl support
  +2001-12-06/15:42|hosting|cmuschio|low|www1-muc1|added virtual ssl server for www1.netsccm.de
  +2001-12-06/16:59|hosting|mhendel|low|bayer.com|deleted the hr.old directory
  +2001-12-06/17:00|hosting|mhendel|low|mail.de.cw.net|we fixed the petidomo problem 
  +2001-12-06/17:45|hosting|awaegner|low|Terramap|DFS installed on TMSDC1, DFS-Link "metadbcache", Replicas TMSWS 2-6
  +2001-12-06/17:47|hosting|awaegner|low|TSW1|added new customer "vsgmbh" to shared-server tsw1 with FP-Extensions
  +2001-12-07/01:18|hosting|rohde|low|support2.eu.cw.com|added debian package smbclient
  +2001-12-07/12:05|db-support|moeller|low|webmiles|deletion of archive logs from controlfile after 60 days - modification of del_alogs.rcv
  +2001-12-07/12:07|db-support|moeller|low|remedy db - ars1|modification of deletion of archivelogs from controlfile (del_alogs.rcv)
  +2001-12-07/14:35|hosting|kgruber|high|terramap|TMSWS8: shutdown server due to customer request
  +2001-12-07/14:36|hosting|kgruber|high|procter|Procter02: rebooted server and changed some registry entries, cause the webserver doesn't response anymore
  +2001-12-09/16:18|hosting|cschug|low|news-FFM2.de.cw.net|re-activted console getty in /etc/inittab; Solaris patch cluster had replaced it by dtlogin :-(
  +2001-12-09/16:41|hosting|cschug|high|news-FFM2.de.cw.net|rebooted server to activated some kernel changes; increased TCP connection hash size, enabled priority paging and increased some values regarding pageout daemon; iostat -x looks MUCH better now
  +2001-12-10/00:31|hosting|kgruber|high|procter|switched www.maxfactor.com from procter02 to procter033
  +2001-12-10/13:32|hosting|cschug|high|news-FFM2.de.cw.net|changed default gw from 195.27.83.146 to 195.27.83.149; reboot
  +2001-12-10/14:19|db-support|sgierth|high|holmes.bayerhealthvillage.com|1. deletion of archive logs from controlfile after 60 days - modification of del_alogs.rcv 2. remove archive logs after 9 days from disk
  +2001-12-10/14:21|db-support|sgierth|high|database.beautynet.de|1. deletion of archive logs from controlfile after 60 days - modification of del_alogs.rcv 2. remove archive logs after 1.5 days from disk
  +2001-12-10/14:22|db-support|sgierth|high|oracle.merckfinck.de - Oracle db PROD|1. deletion of archive logs from controlfile after 60 days - modification of del_alogs.rcv 2. remove archive logs after 2 days from disk
  +2001-12-10/14:24|db-support|sgierth|high|oracle.merckfinck.de - Oracle db DEV|1. deletion of archive logs from controlfile after 60 days - modification of del_alogs.rcv 2. remove archive logs after 9 days from disk
  +2001-12-10/14:25|db-support|sgierth|high|procter012.pg-cw.de - Oracle db PROD|1. deletion of archive logs from controlfile after 60 days - modification of del_alogs.rcv 2. remove archive logs after 1 day from disk
  +2001-12-10/14:26|db-support|sgierth|high|procter012.pg-cw.de - Oracle db circ|1. deletion of archive logs from controlfile after 60 days - modification of del_alogs.rcv 2. remove archive logs after 61 days from disk (no TSM!)
  +2001-12-10/14:33|db-support|sgierth|low|procter012.pg-cw.de - Oracle db circ|DB circ added to patrol monitoring, new tablespace tools created, resized ts system to 120 MB
  +2001-12-10/15:11|hosting|msander|high|procter009/019|deleted pringles.ch. The VS-Root still exists within /content/pringles_REMOVE and the config in /usr/local/apache/conf/trash
  +2001-12-10/15:51|hosting|msander|high|procter009|prepared Netscape-Sites to be deleted. Removed lots of garbage within /home
  +2001-12-10/17:32|db-support|sgans|low|miles2.webmiles.de - Oracle db|New datafile added for tablespaces DTE_1024 (1GB) and IND_DTE (1GB)
  +2001-12-11/09:38|db-support|sgans|low|miles2.webmiles.de - Oracle db|New datafile added for tablespaces DTE_1024 (1GB) and IND_DTE (1GB)
  +2001-12-11/12:13|hosting|msander|low|NetCache muc, ffm2|maximum logfile size from 2 to 0.5 GB
  +2001-12-11/19:02|hosting|cschug|low|news-sw-MUC1.de.cw.net/setup1.setup.de.cw.net|patched setup1 to fastethernet0/7 of news-sw-MUC1
  +2001-12-11/19:03|hosting|cschug|low|news.de.cw.net|put /netapp02-MUC1 under control of autofs via direct map
  +2001-12-11/19:04|hosting|cschug|low|news-sw-MUC1.de.cw.net|enabled fastethernet0/7 100 Mbps full, VLAN 2
  +2001-12-11/19:04|hosting|cschug|low|netapp02-MUC1|exported /vol/vol1 to setup1.setup.de.cw.net
  +2001-12-11/19:05|hosting|cschug|low|setup1.setup.de.cw.net|mounted netapp02-MUC1:/vol/vol2 on /mnt
  +2001-12-12/13:52|hosting|cschug|low|master.openpkg.org|added all productive news server to the list of allowed hosts for openpkg release 1.0
  +2001-12-12/17:48|hosting|cschug|low|www.al-ko.de|updated openpkg package to 1.0
  +2001-12-13/10:23|hosting|awaegner|low|Whatsup|updated whatsup gold to version 7.0
  +2001-12-13/13:31|hosting|cmuschio|low|www1-muc1|removed virtual hosts for bayer
  +2001-12-14/14:28|db-support|cscheith|low|Webmiles DB|Neues Datenfile für den TEMP-TS angelegt (temp03.dbf auf /u05)
  +2001-12-14/15:07|hosting|awaegner|low|Payment|deleted config entries for contract terminated customer. Backupfiles: NT on the Desktop (server.cfg) and Solaris /opt/local/www/payment.ecrc.de/payssl/clientbkp.cfg
  +2001-12-17/14:34|db-support|sgierth|low|miles2.webmiles.de - Webmiles DB|Perfstat tablespace moved from /u07 to /u05 mount point because /u07 was 96%
  +2001-12-17/15:44|development|tlottere|low|master.openpkg.org|chmod g+w /e/openpkg/ftp/
  +2001-12-17/17:42|hosting|kgruber|low|procter|Pushed www.maxfactor.com from staging to production
  +2001-12-17/17:42|hosting|kgruber|low|procter|pushed some files from www.pgcareers.com from staging to production
  +2001-12-18/14:19|development|tlottere|low|ftp.openpkg.org|.msg.login pseudografik entfernt
  +2001-12-18/15:52|hosting|awaegner|low|Payment|set config back to old state
  +2001-12-18/16:54|hosting|awaegner|low|Wintermserver|installed office SR-1 SP2
  +2001-12-19/11:53|db-support|asikeler|low|miles2.webmiles.de - Webmiles DB|changed parameter log_archive_dest to /u08/oracle/arch/webmiles
  +2001-12-19/15:36|db-support|sgierth|low|miles2.webmiles.de|tnsnames.ora changed: RCAT.ECRC.DE hostname changed to ipaddress
  +2001-12-20/14:07|as|msander|high|pop.de.cw.net|fixed bug in /home/ecrcad/bin/pop_conf; submit "diff pop_conf_0.01 pop_conf" to see the changes
  +2001-12-21/11:05|hosting|cschug|low|www1-muc1|openssh restarted
  +2001-12-21/11:26|hosting|msander|low|mail.de.cw.net|Because the mails to "root@mail.de.cw.net" filled up the / partition, I added an alias "root: hosting@de.cw.net"
  +2001-12-21/12:01|hosting|msander|low|mail.de.cw.net|saved root's mails up to now in /d1/root.mailbox.gz
  +2001-12-21/18:32|hosting|cmuschio|low|proctor|added redirect, www.pgcareers.com/eip
  +2001-12-26/12:51|hosting|msander|low|pop.de.cw.net|killed unused 'tail -f' processes
  +2001-12-28/12:04|hosting|pbrudna|low|netsag|changed redirect from www to www3 CW-0000063528
  +2001-12-30/11:55|development|rse|high|ntp[12].de.cw.net|created OpenPKG /e/ntp, installed NTP 4.1.0, new revised peers
  +2001-12-30/11:56|development|rse|high|ntp[12].de.cw.net|switched to NTP from /e/ntp; removed NTP 4.x from OpenPKG /cw
  +2002-01-01/13:43|hosting|cschug|high|pop.de.cw.net|upgraded qpopper
  +2002-01-01/13:56|hosting|cschug|low|pop.de.cw.net|updated perl, installed perl-db
  +2002-01-01/14:03|hosting|cschug|low|pop.de.cw.net|installed pb4sd (POP3-before-SMTP daemon) -- it's not yet integrated into postfix
  +2002-01-02/10:39|hosting|msander|high|pop.de.cw.net|created a 'transport' for postfix, changed 'erdinger' configuration
  +2002-01-02/10:40|hosting|cschug|high|pop.de.cw.net|activated pb4sd, disabled my own quick hack shell script
  +2002-01-02/14:19|hosting|cschug|low|pop.de.cw.net|remove temp. local5 entry in /etc/syslog.conf, restarted syslogd
  +2002-01-02/15:17|as|rse|low|pop.de.cw.net|upgraded pb4sd to latest/fixed version 1.2
  +2002-01-02/16:25|hosting|msander|low|webmiles.ch webmiles.se|set root password to <root-password> ;)
  +2002-01-03/09:33|hosting|cschug|low|pop.de.cw.net|changed log file retention to 90 days for all relevant daemons -> /cw/etc/rc.conf
  +2002-01-03/14:32|as|rse|high|ftp.de.cw.net|upgraded OS to FreeBSD 4.5-PRE
  +2002-01-03/14:32|as|rse|high|mail.de.cw.net|upgraded OS to FreeBSD 4.5-PRE
  +2002-01-03/14:33|as|rse|low|ftp.de.cw.net|set root-password to standard hosting root-password
  +2002-01-03/14:34|as|rse|low|mail.de.cw.net|set root-password to standard hosting root-password
  +2002-01-03/14:51|as|rse|low|mail.de.cw.net|upgraded the few "ports" in /usr/local
  +2002-01-03/14:57|hosting|cschug|high|news-FFM1.de.cw.net|UseLogin=no, restarted sshd
  +2002-01-03/14:58|as|rse|low|mail.de.cw.net|killed and removed the already dead /pf OpenPKG hierarchy
  +2002-01-03/17:31|as|msander|low|web1.merckfink.de|installed openpkg with ssh, deaktivated old sshd
  +2002-01-03/17:49|as|msander|low|web2.merckfink.de|installed openpkg with ssh, deaktivated old sshd
  +2002-01-03/18:06|as|msander|low|web3.merckfink.de|installed openpkg with ssh, deaktivated old sshd
  +2002-01-03/19:21|hosting|cschug|high|holmes.bayer-healthvillage.com|installed initial OpenPKG 1.0 w/OpenSSH, deactivated old sshd -> /etc/rc2.d/
  +2002-01-03/19:26|hosting|cschug|high|www.bayer.com|deactivated sshd while upgrading
  +2002-01-03/19:54|hosting|cschug|high|www.bayer.com|upgraded to OpenPKG 1.0 w/OpenSSH; It seems that _somebody_ has tried to install additional perl modules to the existing OpenPKG perl installation, tried to migratie, but maybe it need to be clarified
  +2002-01-04/10:10|hosting|cschug|high|www.beautynet.de|installed initial OpenPKG 1.0 w/OpenSSH, deactivated old sshd -> /etc/rc2.d/
  +2002-01-04/10:35|hosting|pbrudna|low|schenken|chown schenken on www1-muc1
  +2002-01-04/10:36|hosting|cschug|high|gauss.beautynet.de|installed initial OpenPKG 1.0 w/OpenSSH, deactivated old sshd -> /etc/rc2.d/
  +2002-01-04/10:37|hosting|pbrudna|low|webmiles|set up new Server gewinnspiel.webmiles.de
  +2002-01-04/10:38|hosting|cschug|high|database.beautynet.de|installed initial OpenPKG 1.0 w/OpenSSH, deactivated old sshd -> /etc/rc2.d/
  +2002-01-04/10:42|hosting|cschug|high|shop.beautynet.de|installed initial OpenPKG 1.0 w/OpenSSH, deactivated old sshd -> /etc/rc2.d/
  +2002-01-04/10:47|hosting|cschug|high|shop2.beautynet.de|installed initial OpenPKG 1.0 w/OpenSSH, deactivated old sshd -> /etc/rc2.d/
  +2002-01-04/10:53|hosting|cschug|high|shop3.beautynet.de|installed initial OpenPKG 1.0 w/OpenSSH, deactivated old sshd -> /etc/rc2.d/
  +2002-01-04/11:41|as|msander|low|procter019.pg-cw.de|installed openpkg with ssh, deaktivated old sshd
  +2002-01-04/11:41|as|msander|low|procter009.pg-cw.de|installed openpkg with ssh, deaktivated old sshd
  +2002-01-04/11:41|as|msander|low|procter011.pg-cw.de|installed openpkg with ssh, deaktivated old sshd
  +2002-01-04/11:52|as|msander|low|procter012.pg-cw.de|installed openpkg with ssh, deaktivated old sshd
  +2002-01-04/15:15|as|rse|high|as.de.cw.net|upgraded OS to FreeBSD 4.5-PRE
  +2002-01-07/11:21|db-support|sgans|low|miles1/2.webmiles.de|Installated Tivoli Data Protection for Oracle and changed the backup database scripts
  +2002-01-08/13:09|hosting|mhendel|low|Lycos Europe|started Netfinity server
  +2002-01-08/15:08|hosting|mhendel|low|www.newmonday.de|changed the Administrator password and sent it to VNU
  +2002-01-08/17:42|hosting|mhendel|low|pop.de.cw.net|did a temporary entry for www.erdinger.de (195.27.214.130) to allow relaying
  +2002-01-09/16:22|as|msander|low|web1.tradecross.de|installed openpkg with ssh, deaktivated old sshd
  +2002-01-09/16:52|hosting|cschug|low|www.al-ko.de|serveral upgrades of OpenPKG packages towards release 1.0
  +2002-01-09/17:04|hosting|cschug|low|mail.cweurope.net|serveral upgrades of OpenPKG packages towards release 1.0
  +2002-01-09/17:04|hosting|cschug|high|www.al-ko.de|deactivated bind daemon
  +2002-01-09/17:33|hosting|cschug|high|www7-MUC.ecrc.net|deactivated apache
  +2002-01-09/17:35|hosting|cschug|high|www7-MUC.ecrc.net|deactivated sendmail
  +2002-01-09/17:36|hosting|cschug|high|www7-MUC.ecrc.net|deactivated ncftpd -> /etc/inittab
  +2002-01-09/17:37|hosting|cschug|high|www7-MUC.ecrc.net|deactivated dtlogin -> /etc/inittab
  +2002-01-09/17:43|hosting|cschug|high|www7-MUC.ecrc.net|deactivated coldfusion
  +2002-01-09/17:44|hosting|cschug|low|www7-MUC.ecrc.net|init refused to re-read /etc/inittab, thus renamed /usr/local/bin/ncftpd to /usr/local/bin/ncftpd_ -- weird
  +2002-01-09/17:51|hosting|cschug|high|www7-MUC.ecrc.net|deactivated mysql
  +2002-01-09/17:53|hosting|cschug|high|www7-MUC.ecrc.net|umounted /export/weblogs
  +2002-01-09/17:55|hosting|cschug|high|www7-MUC.ecrc.net|deactivated SafePassage secure tunnel SSL client
  +2002-01-09/17:56|hosting|cschug|high|www7-MUC.ecrc.net|umounted /opt/archive and /opt/local
  +2002-01-09/18:42|hosting|cschug|high|www.al-ko.de|upgraded OpenSSH
  +2002-01-10/11:11|hosting|pbrudna|low|www.zepelin.de|Ethernet disconnected APP1/C3 
  +2002-01-10/11:13|hosting|pbrudna|low|gewinnspiel.webmiles.de|openpgk gd, jpeg, png, freetype instaled
  +2002-01-10/13:55|hosting|msander|low|pop.de.cw.net|made several fixes and cleanups in postfix configuration
  +2002-01-11/09:22|hosting|awaegner|high|www5 und www6-muc.ecrc.net|stopped sshd on both machines for security reasons
  +2002-01-11/17:11|db-support|sgierth|low|www.procter012.pg-cw.de Oracle DB circ|Registered circ into Oracle Recovery Catalog on dbteam.ecrc.de, modified all necessary scripts on both machines
  +2002-01-14/14:25|hosting|cschug|high|www.geze.de|upgraded Debian (libc6, postfix, gzip, modconf)
  +2002-01-14/15:51|hosting|kgruber|low|terramap|restarted iis service on the shopservers 7 & 8 to implement an desired change for the customer
  +2002-01-14/15:51|hosting|kgruber|low|terramap|created an new admin account for terramap
  +2002-01-14/15:52|hosting|kgruber|low|procter|doing some uploads on pgcareers site
  +2002-01-14/15:52|hosting|kgruber|low|procter|doing some uploads on period power site
  +2002-01-14/15:52|hosting|kgruber|low|gkm|created gkm user on shared w2k server tsw1
  +2002-01-14/15:53|hosting|kgruber|low|procter|doing some uploads on hugo.com power site
  +2002-01-14/17:31|hosting|pbrudna|low|vodafone|added 139.7.0.0/16 to access on mail.de.cw.net
  +2002-01-14/17:35|hosting|pbrudna|low|pop.de.cw.net|mailforwarding for geze --> loeffelmann
  +2002-01-14/17:39|hosting|pbrudna|low|gewinnspiel.webmiles.de|recompiled apache with gd-support
  +2002-01-15/11:56|hosting|pbrudna|low|vertacross|all servers erased
  +2002-01-15/13:57|hosting|awaegner|low|Webtrends|installed PC-Anywhere instead of terminalserver for administration reasons
  +2002-01-15/14:55|hosting|cschug|high|www7-MUC.ecrc.net|init 5 - goodbye ol' friend
  +2002-01-15/15:02|hosting|pbrudna|low|media-base-marketing|added www.internetregistrierung.de to www1-muc1
  +2002-01-15/17:16|hosting|pbrudna|low|allocation|added www.apirion.de to www1-muc1
  +2002-01-16/08:33|hosting|cschug|high|www.al-ko.de|excluded user cw from /{opt,usr}/local/ to avoid unwanted side effects during compile tasks. Everything under /{opt,usr}/local/ _SHOULD_ be obsolete beside ColdFusion
  +2002-01-16/08:35|hosting|cschug|low|www.al-ko.de|removed skey package
  +2002-01-16/09:37|hosting|cschug|low|www.al-ko.de|commented out "cd $HOME" in ~cw/.bashrc (bug in OpenPKG which causes problems in this machine due to the specific old ITS installation)
  +2002-01-16/11:29|hosting|awaegner|low|www5|commented out old customer entries in httpd.conf apache graceful restarted
  +2002-01-16/14:34|hosting|pbrudna|low|redtec|changed radtec to redtec on www1-muc1
  +2002-01-16/15:19|hosting|cmuschio|low|fraport|added user fraport1&2 on devweb1 and web1
  +2002-01-16/19:08|hosting|cschug|low|www.al-ko.de|updated openpkg packages: bison cpio fileutils gzip libiconv make mm openpkg png textutils vim
  +2002-01-17/15:33|hosting|cschug|high|www.al-ko.de|updated openpkg packages: findutils flex infozip less nmap ntp pdksh proftpd rsync shtool sudo tcpdump texinfo
  +2002-01-17/16:18|db-support|sgierth|low|database.beautynet.de, Oracle db beauty|Enlarged tablespaces ECS001USER, ECS00USER by 100 MB each
  +2002-01-17/16:32|db-support|sgierth|low|alba.ecrc.de Oracle db ARS1|Truncated all PERFSTAT tables
  +2002-01-17/17:32|hosting|cmuschio|low|fraport|set all interfaces to 100m fd
  +2002-01-17/18:22|hosting|mhendel|low|www1-muc1|installed new kernel 2.2.20 and rebooted sever
  +2002-01-17/19:00|hosting|cschug|low|taserver2.webmiles.de|corrected login shell of user cw, updated make
  +2002-01-17/19:03|hosting|cschug|low|mail.cweurope.net|updated bison fileutils textutils zlib ntp perl
  +2002-01-17/19:35|hosting|cschug|low|kenny.ecrc.de|Debian upgrade (libc6 and others)
  +2002-01-17/20:07|hosting|cschug|low|www.al-ko.de|installed freetype and jpeg; updated gd
  +2002-01-17/20:31|hosting|cschug|low|mail.cweurope.net|updated slang wget pdksh texinfo
  +2002-01-17/20:32|hosting|cschug|low|taserver2.webmiles.de|updated zlib gzip; installed bzip2 gawk grep sed
  +2002-01-18/09:35|hosting|cschug|low|procter012.pg-cw.de|replaced "shtool log" by "shtool rotate" in /cw/etc/rc.d/rc.openssh (general bug in several rc.* scripts) and deleted /var/mail/root which was spamed cause of this error
  +2002-01-18/09:51|hosting|cschug|low|mail.cweurope.net|updated diffutils less groff openssl shellutils netcat tar libpcap libiconv
  +2002-01-18/09:59|hosting|cschug|low|taserver2.webmiles.de|installed patch; updated ncurses tar
  +2002-01-18/10:53|hosting|awaegner|low|www5|commented in port 8073 in httpd.conf apache graceful restarted
  +2002-01-18/11:02|hosting|awaegner|low|www1-muc1|moved shared-server content /d1/export/home to /v/www.mydomain
  +2002-01-18/14:24|hosting|awaegner|low|www1-muc1|added entry DirectoryIndex in apache.conf apache restarted graceful
  +2002-01-18/17:38|hosting|cschug|high|kenny.ecrc.de|upgraded to Linux kernel 2.4.17; incorporated IBM Journaling File System 1.0.12 as well as JFS client utilities
  +2002-01-18/19:45|hosting|cschug|low|kenny.ecrc.de|BIG OpenPKG upgrade 1: apache autoconf automake bash bc bind bison bzip2 cpio curl db diffutils figlet file fileutils findutils flex freetype gawk gcc gd gettext gnupg grep groff gzip infozip iozone
  +2002-01-18/19:46|hosting|cschug|low|kenny.ecrc.de|BIG OpenPKG upgrade 2: iselect ispell jpeg less libiconv libpcap libtool links lsof lynx m4 make mm mng mysql ncurses netcat nmap ntp openpkg openssh openssl patch pcre pdksh perl png psutils recode
  +2002-01-18/19:47|hosting|cschug|low|kenny.ecrc.de|BIG OpenPKG upgrade 3: rfc rrdtool rsync scanssh sed sharutils shellutils shtool slang sudo tar tcpdump tcsh texinfo textutils tiff uudeview vim w3m wgetwhatmask whois zlib zsh ... DONE! :-) 
  +2002-01-21/18:13|hosting|cschug|low|kenny.ecrc.de|Debian upgrade (at)
  +2002-01-21/21:23|hosting|cschug|low|news-DUS2.de.cw.net|OpenPKG update: autoconf bc bind bison calc cpio fileutils flex gettext infozip jpeg less libiconv libtool links lynx m4 mm netcat nmap ntp openpkg openssh openssl pcre png rfc rsync sharutils
  +2002-01-21/21:24|hosting|cschug|low|news-DUS2.de.cw.net|OpenPKG update: shellutils shtool sudo tar texinfo textutils tiff uudeview vim wget whois
  +2002-01-22/05:21|hosting|cschug|low|www.spd.de|restarted apache (the one under /usr/local/apache/bin/httpd, well quite a mess there again :)
  +2002-01-22/06:27|hosting|cschug|low|news-FFM2.de.cw.net|OpenPKG update: autoconf bc bind bison calc cpio fileutils flex gettext infozip jpeg less libiconv libtool links lynx m4 mm netcat nmap ntp openpkg openssh openssl pcre png rfc rsync sharutils
  +2002-01-22/06:29|hosting|cschug|low|news-FFM2.de.cw.net|OpenPKG update: shellutils shtool sudo tar texinfo textutils tiff uudeview vim wget whois
  +2002-01-22/06:29|hosting|cschug|low|news.ecrc.de|OpenPKG update: autoconf bc bind bison calc cpio fileutils flex gettext infozip jpeg less libiconv libtool links lynx m4 mm netcat nmap ntp openpkg openssh openssl pcre png rfc rsync sharutils
  +2002-01-22/06:30|hosting|cschug|low|news.ecrc.de|OpenPKG update: shellutils shtool sudo tar texinfo textutils tiff uudeview vim wget whois
  +2002-01-22/07:20|hosting|cschug|low|news-DUS.de.cw.net|removed skey package
  +2002-01-22/07:20|hosting|cschug|low|news-FFM2.de.cw.net|removed skey package
  +2002-01-22/07:21|hosting|cschug|low|news.ecrc.de|removed skey package
  +2002-01-23/11:48|as|msander|low|Terminal Server's Authentication|Radius Server is down. Use user "root" and our password to login in the meantime
  +2002-01-23/14:34|hosting|cschug|low|kenny.ecrc.de|added Alias for /sw; restarted apache
  +2002-01-23/18:23|hosting|cschug|high|taserver2.webmiles.de|Installed new apache according to contract 3138, TT 65399
  +2002-01-24/11:18|hosting|cschug|low|www.al-ko.de|moved log files and restarted apache; automatic log file handling is still an issue
  +2002-01-24/15:51|hosting|pbrudna|low|erdinger|added pop3-account 4 USR stmurvl on pop.de.cw.net
  +2002-01-28/09:15|db-support|asikeler|low|195.27.205.35/36|23.01.: Upgrade der Apptime-Software auf 2.1b09
  +2002-01-28/15:21|hosting|mhendel|low|fuchs-dea|added some domains of fuchs-dea to access at mail.de.cw.net
  +2002-01-28/15:22|hosting|mhendel|low|handshake.de|added handshake.de to the access file on mail.de.cw.net
  +2002-01-29/15:26|hosting|cmuschio|low|www1-muc1|added virtual server for www.allianz-park.de
  +2002-01-30/09:56|hosting|cschug|low|www1-HBG1.de.cw.net|upgraded OpenPKG to release 1.0
  +2002-01-30/15:26|hosting|cschug|low|pop.de.cw.net|installed libnet and libnids from CURRENT branch as req. for dsniff in order to recover lost passwords. Unfortunately dsniff does not build
  +2002-01-30/15:27|hosting|cschug|low|www.meisterverlag.de|upgraded OpenPKG to release 1.0
  +2002-01-30/15:27|hosting|msander|low|pop.de.cw.net|created a script and skeleton: /root/adpop.sh
  +2002-01-31/08:28|hosting|pbrudna|low|activia.at|added pop3 accounts on pop.de.cw.net
  +2002-01-31/08:29|hosting|pbrudna|low|mail.de.cw.net |added activia.at
  +2002-01-31/15:35|hosting|cschug|low|www.meisterverlag.de|installed mysql, png, jpeg, freetype, gd, apache, proftpd; content not yet migrated to apache and proftpd
  +2002-01-31/15:36|hosting|cschug|low|pop.de.cw.net|upgraded Debian GNU/Linux
  +2002-01-31/15:44|hosting|cschug|low|www1-MUC1.de.cw.net|fixed /etc/pam.conf
  +2002-01-31/16:10|hosting|cschug|low|pop.de.cw.net|upgraded openpkg, bison, vim, less, fileutils, textutils, openssh
  +2002-01-31/16:17|hosting|cschug|high|pop.de.cw.net|upgraded postfix
  +2002-01-31/16:34|hosting|pbrudna|low|www.meisterverlag.de|redirect pcfit-online pcfit2001 --> pcfit2000
  +2002-01-31/16:35|hosting|pbrudna|low|www.meisterverlag.de|added virtual Host www.pcfit-2002.de
  +2002-01-31/16:35|hosting|pbrudna|low|dolphin|PHP activated
  +2002-01-31/16:42|hosting|cschug|low|www1-MUC1.de.cw.net|upgraded zlib gzip bzip2 sed grep gawk bison bash fileutils textutils shellutils findutils flex tar
  +2002-01-31/17:12|hosting|cschug|low|www1-MUC1.de.cw.net|upgraded bind perl pcre ncurses ntp patch db png jpeg mm libpcap
  +2002-01-31/18:39|hosting|cschug|low|www1-MUC1.de.cw.net|upgraded openssl less proftpd vim openssh
  +2002-02-01/09:03|hosting|cschug|low|pop.de.cw.net|upgraded db to CURRENT release; installed dsniff; started sniffing of POP3 passwords for documentation (and for OpenLDAP?)
  +2002-02-01/10:34|hosting|awaegner|low|Webtrends|uninstalled terminlaservice for administration reasons; reachable with pc-anywhere; rebooted
  +2002-02-04/13:24|hosting|cschug|low|217.79.239.2 (Dolphin Telecom)|rm -rf /home/{cw,ecrcad}/; removed user ecrcad; umounted /home/, renamed and remounted as /d1/; fixed apache config and extracted relevant bits and pieces into /cw/etc/apache/apache.vhost-217.79.239.2
  +2002-02-04/13:53|hosting|awaegner|low|217.79.239.2 (Dolphin Telecom)|moved directories htdoc cgi-bin icons from /cw/share/apache to /v/217.79.239.2/ and changed it to the necessary rights
  +2002-02-04/15:03|hosting|cschug|high|www.meisterverlag.de|replaced vendor wu-ftpd by OpenPKG's proftpd
  +2002-02-04/18:07|hosting|rohde|low|support.de.cw.com|added php cgi for shell scripting in /d1/scripts/bin
  +2002-02-05/09:53|hosting|awaegner|low|familiensache.de|removed password protection for familiensache.de; apache restartet
  +2002-02-05/13:00|hosting|mhendel|low|pop.de.cw.net|Postfix an Qpopper couldn't write to the inboxes - /u had 700 - we changed this back to 755 - everything is working fine again
  +2002-02-06/09:59|db-support|asikeler|low|dbteam.ecrc.de|tnsnames.ora aufgeräumt und an globale tnsnames.ora angepasst
  +2002-02-06/10:12|hosting|mhendel|low|composo|told them to upload their web-stuff via www5-muc
  +2002-02-06/10:41|hosting|mhendel|low|mail.de.cw.net|entered the following domains in the access file: netgain.de, netgainag.de, bslag.de, bslag.com, coldfusion.de, jrun.de, midadis.de, midadis.com, e-bav.com, e-bav.net, e-bav.org, e-gad.de
  +2002-02-06/10:44|hosting|mhendel|low|mail.de.cw.net |entered the following domains in the access file: fonts-selection.de, fontsselection.de, individualrente.com, individualrente.de, u-kasse.com, u-kasse.net, europlan-rente.de
  +2002-02-06/13:24|hosting|mhendel|low|pop.de.cw.net|changed some addresses of journalmedia and added two new
  +2002-02-06/15:35|hosting|mhendel|low|pop.de.cw.net|ms@vsgmbh.de points to ma-schn now
  +2002-02-06/15:36|hosting|mhendel|low|pop.de.cw.net |changed gabriele.scheins-schneider@vsgmbh.de to gabriele.scheins@vsgmbh.de
  +2002-02-06/15:48|hosting|mhendel|low|pop.de.cw.net |entered anke.zeising@vsgmbh.de in virtual
  +2002-02-07/09:41|hosting|cschug|low|news-FFM2.ecrc.net|Feed fuer news.microware.de deaktiviert
  +2002-02-07/13:25|db-support|asikeler|low|all DB servers|changed password of standard DB users to a single password (see intranet)
  +2002-02-07/16:04|hosting|kgruber|low|procter|www.pgcareers.com: Variuos File Transfers
  +2002-02-07/16:05|hosting|kgruber|low|procter|www.hugo.com: Various File Transfers
  +2002-02-07/16:06|hosting|kgruber|low|procter|www.iams-eu.com: Preparing automatic data transfer of sensible customer data to xor
  +2002-02-07/16:06|hosting|kgruber|low|procter|www.varetje.nu: Various File Transfers
  +2002-02-07/16:06|hosting|kgruber|low|procter|www.pgcareers.com: Restarted Virtual Server due some problems
  +2002-02-07/16:07|hosting|kgruber|low|mail.de.cw.net|Added some secondary domains on ticket request
  +2002-02-07/16:08|hosting|kgruber|low|intra.is.de.cw.net|Updated Michael Hoereths Petidomo Howto to fix some error which could occur on configuring new mailing lists
  +2002-02-07/16:09|hosting|kgruber|low|procter|allways selbst & sicher: stopped & dismissed website on request of the procter and gamble ice team
  +2002-02-07/16:10|hosting|kgruber|low|procter|allways selbst & sicher: send data of the staging site to matteo fabiano of the procter and gamble ice team
  +2002-02-07/16:10|hosting|kgruber|low|procter|www.iams-eu.com: various file transfers
  +2002-02-08/09:43|hosting|cschug|low|62.208.30.44|relocated hylaxfax spool to /usr/var/spool/fax/ due to a super-tiny /var/ partition on that box and restarted hylafax
  +2002-02-08/14:23|hosting|awaegner|low|mail.de.cw.net|new entry for fglfreight.com
  +2002-02-08/14:25|hosting|awaegner|low|pop.de.cw.net|add new user bideler and mail address info@ideler.biz
  +2002-02-08/14:27|hosting|awaegner|low|Whatsup|add new server for bayer (62.208.63.5) and changed the smtp notification m_bayer to webadm@mcom.de 
  +2002-02-08/15:43|hosting|awaegner|low|www5|set password for user BeeDeeS to Fun71M3
  +2002-02-08/16:18|hosting|mhendel|low|mail.ecrc.de|switched mail.ecrc.de to mail.de.cw.net - postfix is listening on both ip-addresses
  +2002-02-08/16:40|hosting|mhendel|low|relay.amadeus.net|upgraded second /pf hierarchie to openpkg-20020208-20020208 and postfix-1.1.3-20020206
  +2002-02-08/16:42|hosting|mhendel|low|relay.amadeus.net|switched from /cw hierarchie to /pf hierarchie, if everything works fine, I'll upgrade /cw and switch back on monday or tuesday
  +2002-02-08/17:59|hosting|awaegner|low|bookshop|switched to new liveserver, Windows 2000 62.208.247.5 mapped to 192.168.0.33; if problems occur Peter Huss will call and the IP has to be switched to 192.168.0.34; reachable with terminalclient; 
  +2002-02-08/18:07|hosting|awaegner|low|bookshop|add entry for terminalclient on Winterm
  +2002-02-11/12:04|hosting|msander|low|news-ffm2|restarted cyclone
  +2002-02-11/12:05|hosting|msander|low|bonprix.de|Installed a new apache with php4, customer is now testing
  +2002-02-11/13:06|hosting|mhendel|low|relay.amadeus.net|upgraded to openpkg-20020208-20020208 and postfix-1.1.3-20020206
  +2002-02-11/14:24|hosting|msander|low|news.de.cw.net|Reboot for SDS installation
  +2002-02-11/14:34|hosting|msander|low|news.de.cw.net |Rebot for SDS patch
  +2002-02-11/14:56|hosting|mhendel|low|relay.amadeus.net|switched postfix from /pf hierarchie back to /cw
  +2002-02-11/15:21|hosting|cschug|low|kenny.ecrc.de|updated content of Heise publications c't and iX
  +2002-02-11/17:35|hosting|msander|low|news.de.cw.net|SDS is now ready.
  +2002-02-12/15:45|hosting|msander|low|bonprix.de|Changed startup script so that new apache will start
  +2002-02-12/16:56|hosting|cmuschio|low|evonautic|rebooted server
  +2002-02-12/18:20|hosting|scholli|low|dolphintelecom|apache docroot now /cw/share/apache/htdocs instead of /d1/v/...
  +2002-02-13/17:38|hosting|cmuschio|low|web2.agrion.com|server unreachable, had to do a hard reset
  +2002-02-14/15:39|hosting|msander|low|pop|added three users for @reischenbach
  +2002-02-14/15:53|hosting|msander|low|pop|changed config for klagenfurt.activia.at
  +2002-02-18/10:57|hosting|msander|low|pop|sporthouse24 problem fixed
  +2002-02-19/14:04|hosting|msander|low|pop|fixed subdomain forwarding for activia.at
  +2002-02-20/08:19|db-support|asikeler|low|195.27.249.98|SYSTEM tablespace resized to 400MB
  +2002-02-20/16:19|hosting|msander|low|pop|Because "unlimited.de" has problems with their prim. MX, I've made "unlimited.de" POP-Accounts ready for production and initiated MX change
  +2002-02-21/13:00|hosting|kgruber|low|procter|installed ssh secure copy on procter002 to transfer registration data via ssh from iams-eu.com to xor.com (pg data collector)
  +2002-02-21/16:59|hosting|cschug|low|relay.westlb.de|updated Debian (cron, libc, ncureses)
  +2002-02-21/17:33|hosting|cmuschio|low|erdinger|added 2 new pop accounts
  +2002-02-21/18:11|hosting|cschug|low|relay.westlb.de|updated openpkg gcc make zlib gzip bzip2 bison patch gawk grep sed libpcap flex file fileutils shellutils textutils ntp perl pcre ncurses db less vim findutils
  +2002-02-21/18:36|hosting|cschug|low|relay.westlb.de|updated m4 slang wget tar infozip openssl rsync bind bash libtool openssh ; removed skey
  +2002-02-22/11:46|hosting|awaegner|low|saymore|commented config in httpd.conf on www5 out because customer is insolvent; deleted from www1, as well.
  +2002-02-22/11:47|hosting|awaegner|low|bookshop|moved swapfile from C: to E: for space reasons
  +2002-02-22/13:42|hosting|cschug|low|pop.de.cw.net|upgraded Debian (ncurses)
  +2002-02-22/18:14|hosting|cschug|high|pop.de.cw.net|added NIC for backup LAN (2 minutes downtime)
  +2002-02-24/14:29|hosting|scholli|low|www1/unlimited.de|typo in apache-conf corrected. document root had missing htdoc in path
  +2002-02-25/15:02|hosting|cschug|low|kenny.ecrc.de|upgraded Debian (ncurses)
  +2002-02-26/09:58|hosting|cschug|low|62.208.30.44|restarted Hylafax
  +2002-02-26/10:52|hosting|mhendel|low|pop.de.cw.net|backup is now in place
  +2002-02-26/10:53|hosting|mhendel|low|www1-muc1.de.cw.net|backup is in place since last week
  +2002-02-26/13:25|hosting|mhendel|low|relay.de.cw.net|New Server for customers for relaying only SUN E250/Solaris 8/2 x 18GB mirrored with SDS
  +2002-02-26/14:12|hosting|mhendel|low|relay.de.cw.net|backup is now in place
  +2002-02-26/18:47|hosting|awaegner|low|meisterverlag|changed config for rezept-aus-pfanne-und-wok; it is no longer a redirect but now it is a self-contained website; made all necessary directories; restarted apache;
  +2002-02-26/18:48|hosting|awaegner|low|mail.de.cw.net|added entries for edzardpiltz.de and .com; postmap access;
  +2002-02-27/11:50|hosting|cschug|low|www.al-ko.de|restarted apache
  +2002-02-28/10:06|hosting|msander|low|meisterverlag|changed two redirects (HTTP) on meisterverlag
  +2002-02-28/10:21|hosting|cschug|high|www.al-ko.de|applied workaround for CERT Advisory CA-2002-05 (php.ini) and restarted apache
  +2002-02-28/10:26|hosting|cschug|high|www.al-ko.de|applied workaround for CERT Advisory CA-2002-05 (php.ini) for php (standalone, not apache!) as well
  +2002-02-28/10:37|hosting|msander|low|www.bayer.com|created a file dark_sites.pl_TEST
  +2002-02-28/10:45|hosting|msander|high|www1-muc1|applied workaround for CERT Advisory CA-2002-05 (php.ini) and restarted apache
  +2002-02-28/12:13|hosting|kgruber|low|procter|www.eukanuba-eu.com: changed default entry point to default.asp; beside that default.htm must reside in the configuration else the site won't work
  +2002-02-28/12:14|hosting|kgruber|high|terramap|changed domain admin password to the ecrc standard password
  +2002-02-28/12:35|hosting|cschug|low|relay.westlb.de|updated Debian (libc6 libc6-dev locales ncurses-base ncurses-bin libncurses5 libncurses5-dev groff nvi telnet modconf gzip)
  +2002-02-28/13:15|hosting|msander|low|www5|building a new php-3.0.18 with security patch
  +2002-02-28/13:16|hosting|msander|high|www5|testing if libphp3.so works as a symlink
  +2002-02-28/13:24|hosting|msander|high|www5|first try to activate php3.0.18 with security patch!
  +2002-02-28/13:27|hosting|msander|low|www5|mysql-support is missing, switching back
  +2002-02-28/13:56|hosting|msander|high|www5|php-3.0.18 now active! some few tests went OK! to backout: start ./BACKOUT_PHP.sh in /usr/local/apache/libexec
  +2002-02-28/14:42|hosting|mhendel|low|www1-muc1|apache is upgraded
  +2002-02-28/14:54|hosting|msander|low|news.ecrc.de|added reader account for dimos.de (focus-magazin)
  +2002-02-28/17:59|hosting|cmuschio|low|merckfinck|patched php on development server
  +2002-03-01/09:20|hosting|cschug|high|support2.eu.cw.com|full OpenPKG upgrade, over 70 packages
  +2002-03-01/09:50|hosting|cschug|high|www.al-ko.de|upgraded lsof, cvs; deleted some old ITS rpm stuff which should be redundant cause of OpenPKG
  +2002-03-01/10:59|hosting|cschug|low|www.al-ko.de|upgraded Zend Optimizer for php cgi-version to 1.2.0
  +2002-03-01/11:12|hosting|cschug|low|www.al-ko.de|upgraded mutt, php; installed lynx
  +2002-03-01/12:58|hosting|cschug|high|www.al-ko.de|upgraded perl and replace perl-addon by perl-ssl. Hope this does the job ;-)
  +2002-03-01/13:42|hosting|cmuschio|low|procter |www.pgcareers.com file uploads
  +2002-03-04/09:48|development|rse|low|dev0.dev.de.cw.net|Upgrade OS to latest FreeBSD 4.5-STABLE
  +2002-03-04/09:50|development|rse|low|dev1.dev.de.cw.net|Upgrade OS to latest FreeBSD 4.5-STABLE
  +2002-03-04/09:53|development|rse|low|en4 (OpenPKG, OSSP)|Upgrade OS to latest FreeBSD 4.5-STABLE
  +2002-03-04/09:53|development|rse|low|en6 (MMX)|Upgrade OS to latest FreeBSD 4.5-STABLE
  +2002-03-05/12:52|hosting|msander|low|terminal servers / floor.is.de.cw.net|upgraded cistron-radius to 1.6.6
  +2002-03-05/17:16|hosting|cschug|low|www1-MUC1.de.cw.net|fixed typo in vh_62.208.172.15_www.allianz-park.de and restarted apache
  +2002-03-06/15:16|hosting|cschug|low|kenny.ecrc.de|installed TSM client
  +2002-03-07/16:40|hosting|cschug|high|support1.eu.cw.com|upgraded OpenSSH
  +2002-03-07/16:40|hosting|cschug|high|support2.eu.cw.com|upgraded OpenSSH
  +2002-03-07/16:44|hosting|cschug|high|www.geze.de|Debian upgrade (ncurses, php3)
  +2002-03-07/16:47|hosting|cschug|high|news.de.cw.net|upgraded OpenSSH
  +2002-03-07/16:47|hosting|cschug|high|news-DUS2.de.cw.net|upgraded OpenSSH
  +2002-03-07/16:48|hosting|cschug|high|www1-HGB1.de.cw.net|upgraded OpenSSH
  +2002-03-07/16:50|hosting|cschug|high|news-FFM2.de.cw.net|upgraded OpenSSH
  +2002-03-07/16:56|hosting|cschug|high|news-FFM1.de.cw.net|upgraded OpenSSH
  +2002-03-07/16:56|hosting|cschug|high|kenny.ecrc.de|upgraded OpenSSH
  +2002-03-07/16:57|hosting|cschug|high|www.meisterverlag.de|upgraded OpenSSH
  +2002-03-07/16:59|hosting|cschug|high|62.208.30.44|upgraded OpenSSH
  +2002-03-07/17:27|hosting|mhendel|high|pop.de.cw.net|upgraded OpenSSH
  +2002-03-07/17:27|hosting|mhendel|high|mail.de.cw.net|upgraded OpenSSH
  +2002-03-07/17:27|hosting|mhendel|high|relay.de.cw.ne|upgraded OpenSSH
  +2002-03-07/17:27|hosting|mhendel|high|www1-muc1.de.cw.net|upgraded OpenSSH
  +2002-03-07/17:28|hosting|mhendel|high|www.beautynet.de|upgraded OpenSSH
  +2002-03-07/17:28|hosting|mhendel|high|shop.beautynet.de|upgraded OpenSSH
  +2002-03-07/17:28|hosting|mhendel|high|shop3.beautynet.de|upgraded OpenSSH
  +2002-03-07/17:28|hosting|mhendel|high|database.beautynet.de|upgraded OpenSSH
  +2002-03-07/17:29|hosting|mhendel|high|relay.amadeus.net|upgraded OpenSSH
  +2002-03-07/17:29|hosting|mhendel|high|relay.westlb.de|upgraded OpenSSH
  +2002-03-07/17:29|hosting|mhendel|high|bayer.com|upgraded OpenSSH
  +2002-03-07/17:29|hosting|mhendel|high|holmes.bayer-healthvillage.com|upgraded OpenSSH
  +2002-03-07/17:38|hosting|mhendel|high|mail.cweurope.net|upgraded OpenSSH
  +2002-03-07/18:06|hosting|cmuschio|high|development.merckfinck.de|upgraded OpenSSH
  +2002-03-07/18:06|hosting|cmuschio|high|web1.merckfinck.de|upgraded OpenSS
  +2002-03-07/18:07|hosting|cmuschio|high|web2.merckfinck.de|upgraded OpenSSH upgraded OpenSS
  +2002-03-07/18:08|hosting|cmuschio|high|web3.merckfinck.de|upgraded OpenSSH
  +2002-03-07/18:08|hosting|cmuschio|high|oracle1.merckfinck.de|upgraded OpenSSH
  +2002-03-07/18:08|hosting|cmuschio|high|oracle2.merckfinck.de|upgraded OpenSSH
  +2002-03-07/18:09|hosting|cmuschio|high|web1.fraport.de|upgraded OpenSSH
  +2002-03-07/18:09|hosting|cmuschio|high|devweb1.fraport.de|upgraded OpenSSH
  +2002-03-07/18:10|hosting|cmuschio|high|db1.fraport.de|upgraded OpenSSH
  +2002-03-07/18:10|hosting|cmuschio|high|devdb1.fraport.de|upgraded OpenSSH
  +2002-03-07/18:13|hosting|cmuschio|high|procter009.pg-cw.de|upgraded OpenSSH
  +2002-03-07/18:13|hosting|cmuschio|high|procter011.pg-cw.de|upgraded OpenSSH
  +2002-03-07/18:14|hosting|cmuschio|high|procter012.pg-cw.de|upgraded OpenSSH
  +2002-03-07/18:14|hosting|cmuschio|high|procter019.pg-cw.de|upgraded OpenSSH
  +2002-03-07/18:27|hosting|cschug|low|miles1.webmiles.de|ongoing installation of OpenPKG 1.0.x
  +2002-03-07/18:27|hosting|cschug|low|miles2.webmiles.de|ongoing installation of OpenPKG 1.0.x
  +2002-03-07/18:29|hosting|mhendel|low|shop2.beautynet.de|upgraded OpenSSH
  +2002-03-07/18:30|hosting|mhendel|high|gauss.beautynet.de|upgraded OpenSSH
  +2002-03-07/18:30|hosting|cschug|high|news.ecrc.de|upgraded OpenSSH
  +2002-03-08/09:35|hosting|cschug|low|news.ecrc.de|allowed *.is.de.cw.net, 194 .221.109.0/24 to access news.ecrc.de
  +2002-03-08/10:03|hosting|cschug|high|www.al-ko.de|upgraded OpenSSH
  +2002-03-08/10:48|hosting|cschug|high|miles2.webmiles.de|upgrade to OpenPKG 1.0.x incl. OpenSSH
  +2002-03-08/11:44|hosting|cschug|low|miles1.webmiles.de|altered NTP peer in /etc/inet/ntp.conf and synced time
  +2002-03-08/11:45|hosting|cschug|low|miles2.webmiles.de|altered NTP peer in /etc/inet/ntp.conf and synced time
  +2002-03-08/12:20|hosting|cschug|high|miles1.webmiles.de|upgrade to OpenPKG 1.0.x incl. OpenSSH
  +2002-03-08/13:28|hosting|cschug|high|www.geze.de|installation of OpenPKG 1.0.x incl. OpenSSH
  +2002-03-08/13:50|hosting|cschug|high|web1.tradecross.de|upgraded OpenSSH
  +2002-03-11/14:38|hosting|cmuschio|low|pop.de.cw.net|changed account, brggula@journalmedia.de -> breggulla@journalmedia.de
  +2002-03-11/17:56|hosting|cmuschio|low|procter|various file uploads
  +2002-03-11/18:16|hosting|cmuschio|low|pop.de.cw.net|added account info@designcontact.biz
  +2002-03-13/10:23|hosting|mhendel|high|pop.de.cw.net|upgraded zlib and OpenSSH
  +2002-03-13/10:36|hosting|mhendel|high|relay.de.cw.net|upgraded zlib and OpenSSH
  +2002-03-13/10:38|hosting|mhendel|high|mail.de.cw.net|upgraded zlib and OpenSSH
  +2002-03-13/10:41|hosting|mhendel|high|www1-muc1.de.cw.net|upgraded zlib and OpenSSH
  +2002-03-13/10:49|hosting|mhendel|high|www.beautynet.de|upgraded zlib and OpenSSH
  +2002-03-13/10:49|hosting|mhendel|high|www.al-ko.de|upgraded zlib and OpenSSH
  +2002-03-13/11:06|hosting|mhendel|high|shop.beautynet.de|upgraded zlib and OpenSSH
  +2002-03-13/11:06|hosting|mhendel|high|shop2.beautynet.de|upgraded zlib and OpenSSH
  +2002-03-13/11:07|hosting|mhendel|high|shop3.beautynet.de|upgraded zlib and OpenSSH
  +2002-03-13/11:15|hosting|mhendel|low|gauss.beautynet.d|upgraded zlib and OpenSSH
  +2002-03-13/11:16|hosting|mhendel|high|database.beautynet.de|upgraded zlib and OpenSSH
  +2002-03-13/11:18|hosting|mhendel|high|mail.cweurope.net|upgraded zlib and OpenSSH
  +2002-03-13/11:26|hosting|mhendel|high|relay.amadeus.net|upgraded zlib and OpenSSH
  +2002-03-13/11:31|hosting|mhendel|high|geze.de|upgraded zlib and OpenSSH
  +2002-03-13/11:34|hosting|mhendel|high|www.tradecross.de|upgraded zlib and OpenSSH
  +2002-03-13/11:35|hosting|mhendel|high|relay.westlb.de|upgraded zlib and OpenSSH
  +2002-03-13/11:47|hosting|mhendel|high|development.merckfinck.de|upgraded zlib and OpenSSH
  +2002-03-13/11:54|hosting|mhendel|high|web1.merckfinck.de|upgraded zlib and OpenSSH
  +2002-03-13/11:54|hosting|mhendel|high|web3.merckfinck.de|upgraded zlib and OpenSSH
  +2002-03-13/12:14|hosting|mhendel|high|bayer.com|upgraded zlib and OpenSSH
  +2002-03-13/12:20|hosting|mhendel|low|pop.de.cw.net|deleted account ga-di gabriele.distefano@vsgmbh.de
  +2002-03-13/12:20|hosting|mhendel|low|pop.de.cw.net |added account il-he ilona.heinke@vsgmbh.de
  +2002-03-13/12:22|hosting|mhendel|low|www1-muc1.de.cw.net|added support for server-parsed HTML files to vh_62.208.172.32_www.opg.de
  +2002-03-13/13:46|hosting|msander|low|procter009|updgraded zlib
  +2002-03-13/13:46|hosting|msander|low|procter019|updgraded zlib
  +2002-03-13/13:46|hosting|msander|low|procter011|updgraded zlib
  +2002-03-13/13:46|hosting|msander|low|procter012|updgraded zlib
  +2002-03-13/16:14|hosting|cmuschio|high|miles1.webmiles.de|upgraded zlib and openssh
  +2002-03-13/16:14|hosting|cmuschio|high|miles2.webmiles.de|upgraded zlib and openssh
  +2002-03-13/16:31|hosting|cmuschio|high|db1.fraport.de|upgraded zlib and openssh
  +2002-03-13/16:32|hosting|cmuschio|high|devdb1.fraport.de|upgraded zlib and openssh
  +2002-03-13/16:32|hosting|cmuschio|high|devweb1.fraport.de|upgraded zlib and openssh
  +2002-03-13/16:32|hosting|cmuschio|high|web1.fraport.de|upgraded zlib and openssh
  +2002-03-14/09:17|hosting|kgruber|high|procter|emergency reboot of the staging server procter004, cause of permanent file locking
  +2002-03-14/09:22|hosting|cschug|low|www.geze.de|upgraded Debian (zlib1g)
  +2002-03-14/11:40|hosting|awaegner|low|Whatsup|installed SP2 and SRUP
  +2002-03-14/11:41|hosting|awaegner|low|ms.ecrc.net|installed security patches for NT
  +2002-03-14/11:49|hosting|awaegner|low|Wintermserver|installed SRUP
  +2002-03-14/11:56|hosting|mhendel|low|pop.de.cw.net|delete some temp. entries for coware.de in the access file
  +2002-03-14/11:58|hosting|mhendel|low|pop.de.cw.net|stripped the master.cf and main.cf files, to better see what's configured
  +2002-03-14/12:03|hosting|mhendel|low|pop.de.cw.net|changed the mydestination parameter
  +2002-03-14/12:03|hosting|mhendel|low|pop.de.cw.net|changed the wrong configured mynetworks parameter
  +2002-03-14/13:24|hosting|mhendel|low|www1-muc1.de.cw.net|www.is-partner.de, www.partnercrew.de, www.holz-elektronik.de, www.opg.de, www.compeso.de, beedees.de are already migrated from www5-muc to www1-muc1
  +2002-03-14/14:41|hosting|mhendel|low|www.beautynet.de|add key for Herrn Kessler from Intershop
  +2002-03-14/14:41|hosting|mhendel|low|shop.beautynet.de |add key for Herrn Kessler from Intershop
  +2002-03-14/14:41|hosting|mhendel|low|shop2.beautynet.de|add key for Herrn Kessler from Intershop
  +2002-03-14/14:41|hosting|mhendel|low|shop3.beautynet.de|add key for Herrn Kessler from Intershop
  +2002-03-14/14:42|hosting|mhendel|low|gauss.beautynet.de|add key for Herrn Kessler from Intershop
  +2002-03-15/08:54|hosting|mhendel|low|relay.westlb.de|added a crontab entry to send postfix.sum to burkahard_dunkel@westlb-systems.de and ralf_raek@westlb-systems.de
  +2002-03-15/10:41|hosting|mhendel|low|www1-muc1.de.cw.net |added new customer www.albamoda.de
  +2002-03-15/13:02|hosting|mhendel|low|www1-muc1.de.cw.net|www.batron.de, www.parclife.com, www.telebox.de are already migrated from www5-muc to www1-muc1
  +2002-03-15/13:15|hosting|mhendel|low|www1-muc1.de.cw.net |www.lotter.de already migrated from www5-muc to www1-muc1
  +2002-03-15/13:55|as|awaegner|low|www1-muc1|www.and.de already migrated from www5-muc to www1-muc1
  +2002-03-15/14:55|as|cschug|low|kenny.ecrc.de|added 'Change Log' to top navigation bar in /d1/web/intra.is.de.cw.net/htdocs/themes/CW/theme.php
  +2002-03-15/16:44|hosting|msander|low|pop.ecrc.de|Deleted 2 tradecross-accounts
  +2002-03-15/17:05|hosting|msander|low|SPD (195.27.130.11)|DELL server is ready: gave root-access to Herrn Kroepelin
  +2002-03-15/17:06|hosting|msander|low|news-ffm2.ecrc.net|changed configuration for newsfeed.sap-ag.de.conf
  +2002-03-15/17:07|hosting|msander|low|news.ecrc.de|added reader access for siewert-kau.de
  +2002-03-15/17:08|as|msander|low|evita.ecrc.de|helped OoT understand why they are in th ORDB
  +2002-03-18/07:45|hosting|mhendel|low|www1-muc1.de.cw.net|www.nudelnmachengluecklich.de already migrated from www5-muc to www1-muc1
  +2002-03-18/09:24|hosting|mhendel|low|mail.de.cw.net|changed the Link in andechs-newsletter-de.sig for petidomo
  +2002-03-18/14:31|hosting|awaegner|low|www1-muc1|deleted old entries in apache.conf and /etc/interfaces, apachectl graceful;
  +2002-03-18/16:44|hosting|awaegner|low|www1-muc1|www.sm-bank.de already migrated from www5-muc to www1-muc1
  +2002-03-19/11:24|hosting|msander|low|news.ecrc.de|modified feed abics.net
  +2002-03-19/15:42|as|awaegner|low|www1-muc1|set up new customer www.buntrock-gmbh.de; apachectl graceful;
  +2002-03-19/18:32|hosting|awaegner|low|www1-muc1|www.hartmann-offenbach.de already migrated from www5-muc to www1-muc1
  +2002-03-20/14:07|hosting|mhendel|low|www1-muc1.de.cw.net |www.geze.ch already migrated from www5-muc to www1-muc1
  +2002-03-20/15:11|hosting|kgruber|high|www.t-mbs.de|completely reinstalled the server for www.t-mbs.de including windows 2000 server, sql server 2000, cold fusion 5, contens 2.0, verity search engine, what's up monitoring (map: standpunkt)
  +2002-03-21/11:50|hosting|cmuschio|high|www.meisterverlag.de|installed new Kernel, updated zlib+openssh
  +2002-03-21/12:59|hosting|kgruber|low|www.ferryworld.de|deleted user: evo-ftp on customer request
  +2002-03-21/14:55|hosting|cschug|low|web1.tradecross.de|compressed old apache logs
  +2002-03-21/14:56|hosting|kgruber|low|www.ferryworld.de|added identity.pub for Oliver Farrnbacher [farrnbacher@arison.de] in /home/evonautic/.ssh/authorized_keys on request
  +2002-03-21/15:02|hosting|cmuschio|high|web1.tradecross.de|installed new Kernel
  +2002-03-21/21:53|hosting|rohde|low|kenny.ecrc.de|Activate ADSM Backup
  +2002-03-21/21:53|hosting|rohde|low|support1.eu.cw.com|Activate ADSM Backup
  +2002-03-22/09:16|hosting|awaegner|low|www1-muc1|www.eventcenter-munich.de already migrated from www5-muc to www1-muc1
  +2002-03-22/12:45|hosting|kgruber|low|www.t-mbs.de|added host entry on machine www.t-mbs.de for self recognition
  +2002-03-22/12:46|hosting|kgruber|low|www.t-mbs.de|added ecrcad admin account on machine and made an entry with the details in our password list
  +2002-03-22/12:47|hosting|kgruber|low|www.t-mbs.de|edited cold fusion application settings to get the publishing function working correctly
  +2002-03-22/15:19|hosting|kgruber|low|www.t-mbs.de|change source path of the website as the cms can't handle dots in the pathname
  +2002-03-25/15:58|hosting|cschug|low|news-FFM2.de.cw.net|canceled nikoma feed cause of redundancy. Nikoma seems to be taken over by Tiscali/Nacamar.
  +2002-03-25/17:10|as|cmuschio|low|mail.de.cw.net|added airtahitinui.de to access table
  +2002-03-25/17:33|as|cmuschio|low|agrion/farmfriend|removed customer acces on web2.agrion.com, web1.agrion.com
  +2002-03-26/09:34|hosting|mhendel|low|raibank.de|Mail for raibank.de is migrated from pop.de.cw.net to relay.de.cw.net
  +2002-03-26/09:34|hosting|mhendel|low|erdinger.de|Mail for erdinger.de is migrated from pop.de.cw.net to relay.de.cw.net
  +2002-03-26/09:54|hosting|mhendel|low|pop.de.cw.net|disabled all interhyp accounts using (for i in `grep interhyp /etc/passwd \x07 cut -d ':' -f1`; do passwd -l $i; done). To enable the accounts again, just replace the (passwd -l) wiht (passwd -u)
  +2002-03-26/11:18|hosting|mhendel|low|www1-muc1.de.cw.net|www.mtr390.com migrated to www1-muc1
  +2002-03-27/02:31|hosting|awaegner|low|www.spd.de|temporarly shut down of monitoring after reading the customer setup
  +2002-03-27/02:57|hosting|awaegner|low|procter|shuted down the monitoring for websites which are already hosted in USA
  +2002-03-27/09:04|hosting|mhendel|low|pop.de.cw.net|disabled all am3.com, saymore.de and schuettendiebel.de accounts, using passwd -l
  +2002-03-27/09:05|hosting|mhendel|low|pop.de.cw.net|disabled all accounts for dwvb.de, using passwd -l
  +2002-03-27/09:08|hosting|mhendel|low|pop.de.cw.net |disabled the account for ideler.biz
  +2002-03-27/09:12|hosting|mhendel|low|pop.de.cw.net |disabled all accounts for swissprecision.de, using passwd -l
  +2002-03-27/09:17|hosting|mhendel|low|pop.de.cw.net |disabled all accounts for wagged.de and lookx.de, using passwd -l
  +2002-03-27/11:18|hosting|cschug|low|www1-MUC1.de.cw.net|re-enabled php file upload since apache has been updated some time ago
  +2002-03-27/11:55|hosting|mhendel|low|www.ferryworld.de|changed root Password to c&w root-password
  +2002-03-27/12:32|hosting|mhendel|low|www.ferryworld.de|disabled evonautic and ftp user with passwd -l
  +2002-03-27/12:33|hosting|mhendel|low|www.ferryworld.de |installed new ftpworldferry account
  +2002-03-27/12:33|hosting|mhendel|low|pop.de.cw.net |added new account for fraport
  +2002-03-27/13:58|hosting|awaegner|low|www1-muc1|www.sm-bank.de already migrated from www5-muc to www1-muc1
  +2002-03-27/13:58|hosting|awaegner|low|www1-muc1|www.pg-unfrage.de already migrated from www5-muc to www1-muc1
  +2002-03-27/14:54|hosting|mhendel|low|pop.de.cw.net|deleted the recipient_canonical table
  +2002-03-27/14:55|hosting|mhendel|low|pop.de.cw.net |cleanup access and mynetworks table
  +2002-03-27/16:11|hosting|mhendel|low|www1-muc1.de.cw.net|www.juniorz.com is migrated to www1-muc1.de.cw.net
  +2002-03-27/16:17|hosting|cschug|low|www1-MUC1.de.cw.net|upgraded Debian
  +2002-03-28/11:16|hosting|mhendel|low|mail.de.cw.net|added metec-sad.com and metec-sad.de 
  +2002-03-28/15:02|hosting|mhendel|low|www1-muc1.de.cw.net|www.parc-technologies.com and www.steinbeis-beratung.de migrated to www1-muc1 -- THAT'S IT --
  +2002-04-03/10:38|hosting|cschug|low|www1-MUC1.de.cw.net|upgraded Debian (mainly gcc)
  +2002-04-03/11:22|hosting|kgruber|low|procter|Set redirects from the pgcareers admin site to the us server of pgcareers on request
  +2002-04-03/13:08|hosting|cschug|low|www1-MUC1.de.cw.net|bound new IP 62.208.172.254 on eth0:254 and added new vhost for Webtrends and restarted proftpd
  +2002-04-03/13:52|hosting|kgruber|low|www.t-mbs.de|edited several .asp files to get the licence generator for mobile ident codes working on www.t-mbs.de
  +2002-04-04/08:48|hosting|cschug|low|mail.de.cw.net|added metrovacesa.es as 2nd MX
  +2002-04-05/13:55|hosting|cschug|low|support2.eu.cw.com|ugpraded Debian
  +2002-04-05/20:08|hosting|cschug|low|www1-MUC1.de.cw.net|limited memory resources for each apache process in general and restarted apache (happened already this morning :-)
  +2002-04-08/09:38|hosting|mhendel|low|pop.de.cw.net|changed the access file, there shouldn't be any entry, this is not a relay and virtual domains gets configured in the virtual or virtual.pcre file
  +2002-04-08/12:41|hosting|cschug|low|pop.de.cw.net|Debian upgrade
  +2002-04-08/16:22|hosting|cschug|low|www1-MUC1.de.cw.net|installed multisort
  +2002-04-08/17:21|hosting|awaegner|low|www1-muc1|changed password for webtrends user to standard password
  +2002-04-09/12:36|hosting|mhendel|low|www.webmiles.de|added user grel02 und dumk01
  +2002-04-09/12:37|hosting|mhendel|low|www.webmiles.ch|added user grel02 und dumk01
  +2002-04-09/12:41|hosting|mhendel|low|www.webmiles.de|enabled passwordauthentication
  +2002-04-09/17:51|hosting|cmuschio|low|al-ko|installed InktomiSearch, added user inktomi and startup scripts
  +2002-04-10/12:49|hosting|cmuschio|low|al-ko|added redirect for www.agb.al-ko.de
  +2002-04-10/16:51|hosting|msander|low|news.ecrc.de|added reader account for tricus.net
  +2002-04-10/16:52|hosting|msander|low|news-ffm2.ecrc.net|added feeder for news.xenologics.com
  +2002-04-11/10:09|db-support|asikeler|low|alba.ecrc.de|exported user perfstat and truncated its tables
  +2002-04-11/13:55|hosting|cschug|high|www5-MUC.ecrc.de|deactivated a lot of servers; see separate email to hosting@de.cw.net
  +2002-04-11/16:49|hosting|awaegner|low|Whatsup|installed IIS-SRUP; reboot;
  +2002-04-11/16:49|hosting|awaegner|low|Wintermserver|installed IIS-SRUP; reboot;
  +2002-04-11/16:49|hosting|awaegner|low|bookshop|installed IIS-SRUP; reboot;
  +2002-04-12/11:37|hosting|cschug|low|news.ecrc.de|added feed for Xenologics Networks & Communications GmbH (XNC)
  +2002-04-12/13:41|hosting|cschug|high|www5-MUC.ecrc.net|recycled some other legacy ECRC shared servers as well as bayernfonds and paediater 
  +2002-04-12/16:08|hosting|kgruber|low|standpunkt|www.t-mbs.de: Installed Cumulative Patch for Internet Information Services (Q319733)
  +2002-04-12/16:08|hosting|kgruber|low|www4-muc.ecrc.de|Installed Cumulative Patch for Internet Information Services (Q319733)
  +2002-04-12/16:08|hosting|kgruber|low|www8-muc.ecrc.de|Installed Cumulative Patch for Internet Information Services (Q319733)
  +2002-04-12/16:09|hosting|kgruber|low|terramap|TMSWS1: complete reinstallation from scratch on customer request
  +2002-04-12/16:09|hosting|kgruber|low|terramap|TMSWS4: Installed BMC-Patrol Agent
  +2002-04-12/16:10|hosting|kgruber|low|terramap|TMSWS1: Installed Cumulative Patch for Internet Information Services (Q319733)
  +2002-04-12/16:10|hosting|kgruber|low|terramap|TMSWS2: Installed Cumulative Patch for Internet Information Services (Q319733)
  +2002-04-12/16:10|hosting|kgruber|low|terramap|TMSWS3: Installed Cumulative Patch for Internet Information Services (Q319733)
  +2002-04-12/16:11|hosting|kgruber|low|terramap|TMSWS1: Installed Microsoft .NET Framework Redistributable
  +2002-04-12/16:11|hosting|kgruber|low|terramap|TMSWS2: Microsoft .NET Framework Redistributable
  +2002-04-12/16:12|hosting|kgruber|low|terramap|TMSWS3: Installed Microsoft .NET Framework Redistributable
  +2002-04-12/16:12|hosting|kgruber|low|terramap|TMSWS1: Installed Microsoft .NET Framework Service Pack 1
  +2002-04-12/16:12|hosting|kgruber|low|terramap|TMSWS2: Installed Microsoft .NET Framework Service Pack 1
  +2002-04-12/16:13|hosting|kgruber|low|terramap|TMSWS3: Installed Microsoft .NET Framework Service Pack 1
  +2002-04-12/16:13|hosting|kgruber|low|tsw1.w2k.de.cw.net|Installed Cumulative Patch for Internet Information Services (Q319733)
  +2002-04-12/16:54|hosting|kgruber|low|terramap|TMSWS1: Installed Microsoft Baseline Security Analyzer (MBSA) Version 1.0 (Q320454)
  +2002-04-12/18:27|hosting|cschug|high|ftp.de.cw.net/news-MUC1.de.cw.net|replaced FreeBSD's ssh by OpenPKG OpenSSH
  +2002-04-15/11:47|hosting|cmuschio|low|al-ko|cleaned up root partition
  +2002-04-15/15:46|hosting|cmuschio|low|al-ko|installed new apache and tomcat 3.3a under /cw2
  +2002-04-16/11:23|hosting|msander|low|news.ecrc.de|no space left on device: deleted some old logfiles
  +2002-04-16/13:16|hosting|cmuschio|low|webmiles|installed rsync on miles1&2 and db
  +2002-04-16/14:19|hosting|msander|high|cache-muc.ecrc.net|system is down since yesterday. waiting for software licenses to install SW upgrade
  +2002-04-16/17:06|hosting|cmuschio|low|www1-muc1|added missing apache include for www.albamoda.de
  +2002-04-17/08:56|hosting|cschug|high|www5-MUC.ecrc.net|disabled steinbeis virtual web server
  +2002-04-17/14:07|hosting|msander|low|cache-muc.ecrc.net|is now running on latest firmware & software
  +2002-04-17/14:29|hosting|msander|low|news-ffm2.ecrc.net|added new newsfeed: news.westend.com.conf
  +2002-04-17/14:32|development|msander|low|dbtest*|helped DB with rsh problem
  +2002-04-17/14:33|hosting|msander|low|dbtest*|helped DB with a due to OpenPKG-SSH destroyed pam.conf
  +2002-04-17/14:37|hosting|msander|low|SPD: Compaq Leihrechner|zurueck ins IS-Lab gebracht
  +2002-04-17/15:05|hosting|awaegner|low|www1-muc1|added singnalwerk.com because contract was wrongly terminated
  +2002-04-17/15:05|hosting|awaegner|low|erdinger.de|installed servicepack 6a again; reboot;
  +2002-04-17/15:06|hosting|awaegner|low|erdinger.de|installed securityupdate; reboot;
  +2002-04-17/15:11|hosting|awaegner|low|erdinger.de|installed important update package; reboot;
  +2002-04-17/15:45|hosting|awaegner|low|Terramap|installed terminalclient on tmsws1
  +2002-04-17/16:54|hosting|msander|low|cache-muc.ecrc.net|provided documentation about it on keny
  +2002-04-18/12:27|hosting|awaegner|high|www5-muc.ecrc.net|shut down of apache, mysql, ncftpd;
  +2002-04-18/16:56|hosting|awaegner|high|erdinger.de|removed script mapping for ism.dll (.htr extension)
  +2002-04-18/19:26|hosting|cschug|low|relay.de.cw.net|disabled reject_unauth_destination and reject_unknown_client; restarted postfix
  +2002-04-19/13:24|hosting|scholli|low|pw www.mtr390.com|pw geändert (Herr Huber hat angerufen)
  +2002-04-19/15:01|hosting|cschug|low|news.ecrc.de|restarted Typhoon to flush dns resolver
  +2002-04-19/15:22|hosting|cschug|low|news.ecrc.de|added feed for netuse
  +2002-04-19/16:15|hosting|cmuschio|low|relay.westlb.de|restarted postfix
  +2002-04-19/17:08|hosting|msander|low|al-ko.de|made serveral changes to 'majordomo'. please don't try anything at the moment
  +2002-04-19/17:56|hosting|kgruber|low|andechs|bmc patrol agent installed and connected
  +2002-04-22/13:08|hosting|kgruber|low|terramap|new .net structure including customer's .net application is up and running in the beta phase
  +2002-04-22/13:10|hosting|kgruber|low|standpunkt|finally solved the license generator cgi programm running problems together with the customer and the programmer from isreal (flash networks) now deutsche telekom is able to generate mobile licenses
  +2002-04-23/09:40|hosting|msander|low|smilla://public/Application/Hosting|moved Cutomer to setup.cust
  +2002-04-23/15:42|hosting|msander|low|news.ecrc.de|updated newsgroup "descriptions"
  +2002-04-23/15:43|hosting|msander|low|news.ecrc.de|added de.comm.software.mozilla for debugging
  +2002-04-23/16:05|hosting|msander|low|news.ecrc.de|deleted newsgroups that are not in ISC's active file
  +2002-04-23/16:10|hosting|msander|high|news.ecrc.de|added missing newsgroups (about 4000) 
  +2002-04-24/16:05|hosting|msander|low|al-ko.de|modified /cw/etc/sendmail/Makefile so that it takes majordomo.aliases into account
  +2002-04-24/16:06|hosting|msander|low|news-ffm2.ecrc.de|added feed "newsfeed.stueberl.de" (Udo Steinegger)
  +2002-04-30/12:46|hosting|cmuschio|low|al-ko|moved inktomi search from /opt to /var
  +2002-04-30/13:14|hosting|cmuschio|low|al-ko|rotated apache log files
  +2002-05-02/14:03|hosting|cmuschio|low|merckfinck|installed postfix on web2 and development
  +2002-05-08/13:52|hosting|cmuschio|low| al-ko|rotated apache log files
  +2002-05-08/14:58|as|rse|low|DNS|recieved delegation for is.eu.cw.{com,net} zones; master zones on mail.de.cw.net, /e/visp/etc/bind/named.db/cw/
  +2002-05-08/14:59|as|rse|low|mail.de.cw.net|created OpenPKG instance /e/is (Internet Services)
  +2002-05-08/17:08|as|rse|low|mail.de.cw.net|/e/is: installed postfix, petidomo, apache and dependent packages
  +2002-05-10/13:56|as|rse|low|ftp.de.cw.net|created "sun" account under /e/sun for Sun/OoT file interchange (temporary only)
  +2002-05-13/11:48|hosting|kgruber|low|Terramap|TMSWS8: Installed Raid 1 (Software Raid) and added a spare Volume
  +2002-05-14/13:18|hosting|msander|low|fraport|started tomcat on www.fraport.de PREVIEW
  +2002-05-14/13:19|hosting|msander|low|mail.de.cw.net|added relay acces for iits
  +2002-05-15/14:49|hosting|cschug|high|www1-MUC1.de.cw.net|upgraded mysql, gd, autoconf and automake. upgraded also apache cause of mysql DSO probs. To lessen further probs I remove mysql DSOs
  +2002-05-16/16:22|hosting|cschug|high|www5-MUC.ecrc.net|FINAL SHUTDOWN, machine powered off
  +2002-05-17/09:29|hosting|cschug|low|bunny.is.de.cw.net|Complete new install (Debian GNU/Linux 2.2) plus OpenPKG essentials plus MySQL and Apache
  +2002-05-17/11:09|hosting|cmuschio|low|www.al-ko.de|rotated sendmail logs
  +2002-05-17/12:46|hosting|cmuschio|low|pop.de.cw.net|removed mail forwarding for m.rasp@thuringia-netzsch.de and m.schnabel@thuringia-netzsch.de
  +2002-05-21/13:18|as|cschug|low|www.al-ko.de|compress web server logs to free root partition
  +2002-05-22/09:44|hosting|msander|high|www1-muc1|Introduced name based virtual host 62.208.172.3 to compensate s.o.'s mistake while "serverumzug"
  +2002-05-22/10:16|hosting|msander|high|relay.westlb.com|almost all transport entries to "[193.22.161.1]" (backup file exists)
  +2002-05-22/11:29|hosting|msander|high|relay.westlb.com|193.22.161.1 is wrong, 193.22.160.194!!!
  +2002-05-23/11:26|hosting|msander|low|news.ecrc.de|new reader "datamax"
  +2002-05-23/16:07|hosting|awaegner|low|Whatsup|updated to version 7.02, reboot;
  +2002-05-24/09:51|hosting|cschug|high|news.de.cw.net|applied patch cluster and rebooted server
  +2002-05-24/11:30|hosting|cmuschio|low|relay.de.cw.net|added 3 new smtp forwardings - CW-0000077937
  +2002-05-26/20:08|hosting|rse|low|f1.FFM1.news.eu.cw.net|upgraded OS to FreeBSD 4.6-RC
  +2002-05-26/20:08|hosting|rse|low|f1.FFM1.news.eu.cw.net|upgraded /cw OpenPKG hierarchy to latest -CURRENT versions
  +2002-05-26/20:09|hosting|rse|low|f1.FFM1.news.eu.cw.net|upgraded /news OpenPKG hierarchy to latest -CURRENT versions
  +2002-05-26/20:09|hosting|rse|low|f1.FFM1.news.eu.cw.net|installed Postfix, Apache and INN into /news
  +2002-05-27/13:21|hosting|msander|low|gewinnspiel.webmiles.de|fixed pam.conf (destroyed by OpenPKG) and changed root-password (requested by customer)
  +2002-05-27/14:33|hosting|mhendel|low|relay.de.cw.net|added a user for erdinger to recipient_canonical
  +2002-05-27/14:49|hosting|mhendel|low|pop.de.cw.net|added user for erdinger "vhifinger"
  +2002-05-27/15:00|hosting|mhendel|low|pop.de.cw.net|added user for journalmedia "mepo-journal"
  +2002-05-27/17:05|hosting|msander|low|mail.de.cw.net|Allowed relaying for powercase.de, pcfcrm.de
  +2002-05-27/17:05|hosting|msander|low|news-ffm2|changed newspeer config for mail.unlisys.net (req. per mail from Bettina Fink(
  +2002-05-28/08:45|db-support|sgierth|low|erdinger MS-SQL 195.27.214.130|Restored tabe "PersonenVerzeichnis" as of 15.5.2002 because messed up by web agency to database "erdinger"
  +2002-05-28/09:06|db-support|sgierth|low|database.beautynet.de|On database "beauty" truncated all tables of user "perfstat" because TS perfstat > 82%
  +2002-05-28/14:27|db-support|sgierth|low|webmiles - prod and integration db|5 new system privileges granted to Oracle db User WMLCH on production and integration
  +2002-05-28/21:00|hosting|cschug|high|relay.amadeus.net|agreed with Mr. Bayer to restart postfix every hour per root's crontab as temporary hack (-> TT 78356)
  +2002-05-28/21:02|hosting|cmuschio|high|merckfinck|installed new apache with php 4.2.1
  +2002-05-30/20:08|hosting|rse|low|news.ecrc.de|added read/post access for C&W SE customers
  +2002-05-31/11:35|hosting|cschug|high|holmes.bayer-healthvillage.com|removed some programs installed under /opt/local/ by ITS ages ago (lsof, tar, findutils)
  +2002-05-31/11:37|hosting|cschug|high|holmes.bayer-healthvillage.com|installed/upgraded OpenPKG packages (openpkg, bison, bzip2, file, fileutils, findutilsm flex, gawk, grep, lsof, perl, sed, shelltutils, tar, textutils, zlib)
  +2002-06-03/10:02|as|msander|low|holmes.bayerhealthvillage.com|Installed webtrends ver. 4 and geotrends into /opt
  +2002-06-03/14:17|hosting|msander|low|fraport|temporary redirect for www.fraport.de
  +2002-06-03/14:18|hosting|msander|low|fraport|temporary redirect for www.ausbau.flughafen-frankfurt.com
  +2002-06-04/11:44|hosting|msander|low|fraport|2002-06-03/15:00: stopped tomcat on 195.27.205.170:/cw
  +2002-06-05/18:13|hosting|cschug|low|news-FFM2.de.cw.net|disabled feed for lmx.inhouse.de
  +2002-06-05/18:35|hosting|cmuschio|low|merckfinck|added freetype support to Apache/PHP
  +2002-06-10/09:43|hosting|mhendel|low|relay.de.cw.net|added haritz-gw-MUC1.de.cw.net.191.59.194.in-addr.arpa for relaying
  +2002-06-10/18:08|hosting|msander|low|news-ffm2.de.cw.net|re-installed feed news.ediscom.de
  +2002-06-11/16:22|hosting|cschug|high|www.ecrc.net|deactivated all AS relevant services; DNS service still in use
  +2002-06-13/12:05|hosting|msander|high|web1.fraport.de|changed apache's MaxClients from 150 to 300 (in connection with "Lasttests")
  +2002-06-13/16:34|hosting|kgruber|low|www.t-mbs.de|assisting customer by installing a new application creating gif images via webinterface for deutsche telekom
  +2002-06-13/16:35|hosting|kgruber|low|Terramap|Tmsdc1: Added second network connection and enabled functionality
  +2002-06-13/16:35|hosting|kgruber|low|Terramap|Tmsdc2: Added second network connection and enabled functionality
  +2002-06-13/16:36|hosting|kgruber|low|Terramap|restarted distributed file system on tmsdc1 & tmsws3
  +2002-06-13/16:36|hosting|kgruber|low|Terramap|changed paging file size on tmsws2 & tmsws3 from 768mb to 1024mb for improving the .net functionality
  +2002-06-13/17:04|hosting|msander|high|web1.fraport.de|EVIL workaround for German locale installation problem: mv locale locale.SUNW ; copied locales from devweb1 ; ln -s locale.CPIO locale
  +2002-06-13/17:42|hosting|msander|low|web1.fraport.de|deactivated logfile rotating for b2c-apache in rc.apache
  +2002-06-18/09:31|hosting|mhendel|low|relay/pop.de.cw.net|added user thvffler for erdinger
  +2002-06-19/11:09|hosting|cschug|low|news.ecrc.de|disabled posting rights for internetwire.de cause of spam; informed customer
  +2002-06-19/11:10|hosting|cschug|low|news.ecrc.de|removed old logs
  +2002-06-19/11:15|hosting|cschug|low|news-DUS2.de.cw.net|removed old logs
  +2002-06-19/17:50|hosting|cschug|low|news-FFM2.de.cw.net|altered feed for Siemens
  +2002-06-19/17:50|hosting|cschug|low|news-FFM2.de.cw.net|disabled several peers which gave us an permission denied
  +2002-06-19/17:51|hosting|cschug|high|nfs-FFM2.de.cw.net|shutdown in e0 interface, disabled routed and dns.enable in /etc/rc
  +2002-06-20/07:50|hosting|cschug|high|www.geze.de|upgraded gcc and apache; removed lpr, nfs-common and nfs-kernel-server (who installed them?)
  +2002-06-20/09:20|hosting|cschug|low|kenny.ecrc.de|upgraded apache
  +2002-06-20/10:07|hosting|cschug|low|news-FFM2.de.cw.net|disabled more stale, ineffective peerings and ex-customers feeds
  +2002-06-20/11:55|hosting|mhendel|low|www1-muc1.de.cw.net|upgraded apache
  +2002-06-20/16:06|hosting|cmuschio|low|web2.merckfinck.de|added virtual apache host internetzwerk.net
  +2002-06-20/17:36|hosting|cschug|low|news-DUS2.de.cw.net|upgraded apache
  +2002-06-20/17:36|hosting|cschug|low|news-FFM2.de.cw.net|upgraded apache
  +2002-06-20/17:37|hosting|cschug|high|news.ecrc.de|disabled apache since it isn't useful anyway
  +2002-06-20/18:47|hosting|cschug|low|ftp.de.cw.net|replaced legacy rsync daemon by OpenPKG
  +2002-06-21/09:09|hosting|cschug|low|ftp.de.cw.net|replaced legacy apache by OpenPKG
  +2002-06-21/11:09|hosting|mhendel|low|www1-muc1.de.cw.net |upgraded apache again
  +2002-06-21/11:39|hosting|mhendel|low|60.208.30.44|upgraded apache
  +2002-06-21/16:02|hosting|msander|low|web2.merckfinck.de|changed vhost configfile for 'internetzwerk'
  +2002-06-21/16:03|hosting|msander|low|holmes.bayerhealthvillage.com|made some compile and run experiments with new apache. old system shouldn't be effected
  +2002-06-25/09:19|hosting|cschug|low|news.ecrc.de|modified DefaultIncomingGroupFilter to be more strict
  +2002-06-25/09:39|hosting|cschug|low|news.ecrc.de|forced hme0 (again and again) to 100 Mbps full (why does this thing always fall back to half after some weeks?)
  +2002-06-25/11:40|hosting|cmuschio|low|al-ko|cleaned up root partition
  +2002-06-25/11:43|hosting|cmuschio|low|fraport|updated openpkg on web1 and devweb1
  +2002-06-26/05:28|hosting|cschug|low|matrix.is.eu.cw.com|apache upgrade - couldn't sleep cause of forgot about this one ;-)
  +2002-06-26/12:08|hosting|cschug|high|www1-MUC1.de.cw.net|upgraded openpkg & openssh
  +2002-06-26/12:22|hosting|cschug|high|www.geze.de|upgraded openpkg & openssh
  +2002-06-26/13:44|hosting|cschug|high|mail.de.cw.net|upgraded openpkg & openssh
  +2002-06-26/13:44|hosting|cschug|high|r1.MUC1.news.de.cw.net|upgraded openpkg & openssh
  +2002-06-26/13:45|hosting|cschug|high|news.ecrc.de|upgraded openpkg & openssh
  +2002-06-26/14:02|hosting|cschug|high|r1.FFM1.news.de.cw.net|upgraded openpkg & openssh
  +2002-06-26/14:14|hosting|cschug|high|matrix.is.eu.cw.com|upgraded openssh
  +2002-06-26/14:19|hosting|cschug|high|ftp.de.cw.net|upgraded openpkg & openssh
  +2002-06-26/14:53|hosting|cschug|high|as.de.cw.net|upgraded openpkg, zlib, pcre & openssh
  +2002-06-26/14:59|hosting|cschug|high|news-DUS2.de.cw.net|upgraded openpkg & openssh
  +2002-06-26/15:06|hosting|cschug|high|news-FFM2.de.cw.net|upgraded openpkg & openssh
  +2002-06-26/15:17|hosting|cschug|high|kenny.ecrc.de|upgraded openpkg & openssh
  +2002-06-26/15:24|hosting|cschug|high|miles1.webmiles.de|upgraded openpkg & openssh
  +2002-06-26/15:36|hosting|cschug|high|miles2.webmiles.de|upgraded openpkg & openssh
  +2002-06-26/16:17|hosting|cschug|high|oracle2.merckfinck.de|upgraded openpkg & openssh
  +2002-06-26/16:18|hosting|cschug|high|oracle1.merckfinck.de|upgraded openpkg & openssh
  +2002-06-26/17:25|hosting|cschug|high|holmes.bayerhealthvillage.com|upgraded openpkg & openssh
  +2002-06-26/17:27|hosting|cschug|high|www.al-ko.de|upgraded openpkg & openssh
  +2002-06-26/17:29|hosting|cschug|high|devdb1.fraport.de|upgraded openpkg & openssh
  +2002-06-26/17:55|hosting|cschug|high|devweb1.fraport.de|upgraded openpkg & openssh
  +2002-06-26/17:55|hosting|cschug|high|web1.fraport.de|upgraded openpkg & openssh
  +2002-06-27/18:21|hosting|msander|high|group3g: tffex02|re-plugged network cable from qfe0 to 1 (right qfe-card)
  +2002-06-27/18:46|hosting|msander|high|group3g: tffex02|reverted last change
  +2002-06-28/10:12|hosting|cmuschio|high|fraport|updated apache on web1 and devweb1 (cw and b2c)
  +2002-06-28/15:42|hosting|cmuschio|high|backoffice.webmiles.de|updated apache
  +2002-06-28/15:42|hosting|cmuschio|high|taserver2.webmiles.de|updated apache
  +2002-06-28/16:12|hosting|cmuschio|high|merckfinck|updated apache
  +2002-07-01/14:41|hosting|cschug|low|news-FFM2.de.cw.net|deconfigured feed for BT/Viag Interkom
  +2002-07-02/14:08|hosting|cschug|low|news.ecrc.de|Configured feed for Rinol AG
  +2002-07-02/17:52|hosting|cschug|low|news.ecrc.de|added network 193.218.28.0/23 to feed of Abics GmbH
  +2002-07-03/11:36|hosting|cschug|low|relay.amadeus.net|reconfigured bind not to listen on any non-localhost network ports
  +2002-07-03/13:35|hosting|cschug|high|as.de.cw.net|upgraded FreeBSD from 4.5-PRERELEASE to 4.6-STABLE
  +2002-07-03/14:11|hosting|cschug|high|f1.FFM1.news.de.cw.net|upgraded FreeBSD from 4.6-RC to 4.6-STABLE
  +2002-07-03/19:05|hosting|cschug|high|ftp.de.cw.net|upgraded FreeBSD from 4.6-PRERELEASE to 4.6-STABLE
  +2002-07-04/10:17|hosting|cmuschio|low|www.al-ko.de|cleaned up root partition
  +2002-07-04/10:40|hosting|msander|low|holmes.bayer*|installed ncftp
  +2002-07-04/17:01|hosting|cschug|high|ns.vnunet.de|upgraded due to customer's request: Debian & OpenPKG & kernel (but not yet rebooted). All software version dated to March 2001 and are now up-to-date (BIG upgrade!)
  +2002-07-05/08:29|hosting|cschug|high|ns.vnunet.de|changed password cause it wasn't in sync with the password table
  +2002-07-05/08:30|hosting|cschug|high|ns.vnunet.de|rebooted server to activate new kernel 2.2.21
  +2002-07-05/10:06|hosting|cmuschio|low|fraport|updated java to 1.3.1_04 on web1 and devweb1
  +2002-07-05/16:17|hosting|msander|low|whatsup|deleted map "phase4" (customer monitors himself)
  +2002-07-05/16:18|hosting|msander|low|whatsup|started whatsup programm after crash
  +2002-07-08/16:10|hosting|msander|low|news.ecrc.de|new reader account atlas.de
  +2002-07-08/16:10|hosting|msander|low|news-ffm2.ecrc.net|new feed atlas.de
  +2002-07-08/16:11|hosting|msander|low|fraport: www.fraport.de|re-aktivated www.fraport.de's tomcat, removed redirect
  +2002-07-08/16:11|hosting|msander|low|fraport: www.ausbau.flughafen-frankfurt.de|re-aktivated tomcat, removed redirect
  +2002-07-08/16:13|hosting|msander|low|amadeus|added cronjob that restarts postfix periodically, period mod. by mhendel
  +2002-07-09/14:37|hosting|cschug|high|relay.de.cw.net|applied latest Solaris 8 patch cluster and rebooted machine
  +2002-07-09/15:12|hosting|cschug|high|news.ecrc.de|applied latest Solaris 2.6 patch cluster and rebooted machine
  +2002-07-09/17:32|hosting|cschug|high|news-DUS2.de.cw.net|applied latest Solaris 2.6 patch cluster and rebooted machine
  +2002-07-09/18:03|hosting|cschug|high|news-FFM2.de.cw.net|applied latest Solaris 2.6 patch cluster and rebooted machine
  +2002-07-10/09:53|hosting|cschug|low|news.ecrc.de|cleaned up old legacy ITS installation stuff under /opt/local/
  +2002-07-10/11:19|hosting|kgruber|high|Terramap|reinstalled the whole distributed filesystem, cause error occured by replicating the crossed iis cache directories
  +2002-07-10/11:20|hosting|kgruber|high|Terramap|applied special hotfix for the ntfs driver, which I've got directly from microsoft support
  +2002-07-10/11:22|hosting|kgruber|high|Standpunkt|installed smtp forwading for outgoing emails through relay.de.cw.net as smarthost with the support of manuel
  +2002-07-10/11:25|hosting|kgruber|high|Terramap|assisted christian scheithauer in installing an automated file backup job for the terramap databases from the server tmsdb to the fileserver tmsfiber. theese are business critical databases!
  +2002-07-10/11:27|hosting|kgruber|low|Whats'Up|done some cleaning and regulating of monitored services and customers on the what's up server
  +2002-07-10/14:17|hosting|cschug|low|news.ecrc.de|added new newsgroups like comp.lang.php
  +2002-07-10/15:11|hosting|cschug|high|fax.de.cw.net|upgraded FreeBSD; upgraded OpenSSH cause of problems with current FreeBSD; rebooted machine; added /cw to /etc/fstab
  +2002-07-10/17:34|hosting|cschug|low|www.geze.de|upgraded OpenPKG bind
  +2002-07-10/18:45|hosting|cschug|high|www.ecrc.net|upgraded kernel; forced 100 Mbps full; had to patch BMC Patrol to make it fly.
  +2002-07-11/11:34|hosting|cschug|high|www.beautynet.de|applied Solaris patch 105755-11
  +2002-07-11/11:36|hosting|cschug|high|www.al-ko.de|applied Solaris patch 105755-11
  +2002-07-11/11:40|hosting|cschug|high|web1.merckfinck.de|applied Solaris patch 105755-11
  +2002-07-11/11:40|hosting|cschug|high|shop3.beautynet.de|applied Solaris patch 105755-11
  +2002-07-11/11:42|hosting|cschug|high|shop.beautynet.de|applied Solaris patch 105755-11
  +2002-07-11/11:46|hosting|cschug|high|web3.merckfinck.de|applied Solaris patch 105755-11
  +2002-07-11/11:46|hosting|cschug|high|shop2.beautynet.de|applied Solaris patch 105755-11
  +2002-07-11/11:48|hosting|cschug|high|holmes.bayer-healthvillage.com|applied Solaris patch 105755-11
  +2002-07-11/11:48|hosting|cschug|high|oracle1.merckfinck.de|applied Solaris patch 105755-11
  +2002-07-11/11:48|hosting|cschug|high|oracle2.merckfinck.de|applied Solaris patch 105755-11
  +2002-07-11/11:49|hosting|cschug|high|database.beautynet.de|applied Solaris patch 105755-11
  +2002-07-11/11:50|hosting|cschug|high|gauss.beautynet.de|applied Solaris patch 105755-11
  +2002-07-11/11:57|hosting|cschug|high|miles1.webmiles.de|applied Solaris patch 109326-08
  +2002-07-11/11:58|hosting|cschug|high|web2.merckfinck.de|applied Solaris patch 109326-08
  +2002-07-11/11:59|hosting|cschug|high|miles2.webmiles.de|applied Solaris patch 109326-08
  +2002-07-11/12:04|hosting|cschug|high|db1.fraport.de|applied Solaris patch 109326-08
  +2002-07-11/12:04|hosting|cschug|high|devweb1.fraport.de|applied Solaris patch 109326-08
  +2002-07-11/12:05|hosting|cschug|high|devdb1.fraport.de|applied Solaris patch 109326-08
  +2002-07-11/12:05|hosting|cschug|high|web1.fraport.de|applied Solaris patch 109326-08
  +2002-07-11/16:55|hosting|msander|low|news-ffm2.ecrc.net|rebooted because of NFS problems
  +2002-07-11/20:27|hosting|msander|high|news-ffm2.ecrc.net|again NFS problems; backed out one more (tcp) patch, fsck manually, started up newsserver...
  +2002-07-12/17:30|hosting|cschug|high|news-FFM2.de.cw.net/nfs-FFM2.de.cw.net|[ come to my desk and I will tell you the whole story which is to long to be written down here :-) ]
  +2002-07-15/08:48|development|rse|high|gw.as.de.cw.net (Wireless AP)|upgraded to latest Firmware v11.21
  +2002-07-15/08:49|development|rse|high|sv0.dev.de.cw.net|upgraded to ONTAP 5.3.7R3 (latest for F540)
  +2002-07-15/10:55|development|rse|low|sv1.dev.de.cw.net|upgraded to latest FreeBSD 4.6-STABLE
  +2002-07-15/10:55|development|rse|low|sv2.dev.de.cw.net|upgraded to latest FreeBSD 4.6-STABLE
  +2002-07-15/10:55|development|rse|low|dv1.dev.de.cw.net|upgraded to latest FreeBSD 4.6-STABLE
  +2002-07-17/03:52|hosting|cmuschio|low|web1.fraport.de|disabled ssh login for users popnet and gft
  +2002-07-17/15:36|hosting|cmuschio|low|artedona|updated apache on mdo1 and mdo2
  +2002-07-18/11:02|hosting|cmuschio|low|agrion|removed all pop accounts
  +2002-07-18/13:17|hosting|cmuschio|low|www.al-ko.de|cleaned up root partition
  +2002-07-18/16:39|hosting|cmuschio|low|www.webmiles.de|shared root file system for backup over miles1
  +2002-07-18/19:31|hosting|cschug|high|www1-MUC1.de.cw.net|removed old stuff under /d2/tmp/ from the www5-MUC migration
  +2002-07-21/22:57|hosting|scholli|low|relay.de.cw.net hosts|added moria, whatsup to hosts due to sucking euro-cns1.cw.net
  +2002-07-22/09:16|hosting|mhendel|low|mail.de.cw.net|deleted brave.de, projekt.de from the access-cw file
  +2002-07-22/11:53|hosting|msander|low|web1.fraport.de|reactivated users in sshd_conf
  +2002-07-22/11:53|hosting|msander|low|web1.fraport.de|restarted jboss
  +2002-07-22/12:11|hosting|mhendel|low|new root password|cahnged on mail.de.cw.net, relay.de.cw.net, pop.de.cw.net, www1-muc1.de.cw.net
  +2002-07-22/12:15|hosting|mhendel|low|new root password|cahnged on www.al-ko.de, relay.amadeus.net, relay.westlb.de
  +2002-07-22/12:29|hosting|awaegner|low|new root password|changed password on tsw1.w2k.de.cw.net, thl.w2k.de.cw.net, tll.w2k.de.cw.net
  +2002-07-22/12:30|hosting|awaegner|low|new root password|changed password on winterm.as.de.cw.net, whatsup.w2k.de.cw.net, www4-muc.ecrc.net, www8-muc.ecrc.net
  +2002-07-22/12:31|hosting|awaegner|low|new root password|changed password on bookshop server, standpunkt server
  +2002-07-22/17:01|hosting|awaegner|low|new root password|changed password on webtrends.de.cw.net and on the DC of terramap
  +2002-07-23/13:50|hosting|cschug|high|www1-MUC1.de.cw.net|fixed ownerships and permissions of customer directories
  +2002-07-23/14:00|hosting|msander|low|web1.fraport.de|restarted /cw tomcat/jboss
  +2002-07-23/14:00|hosting|msander|low|web1.fraport.de|restarted /b2c jboss
  +2002-07-23/14:01|hosting|msander|low|web1.fraport.de|restarted /b2c jboss (again)
  +2002-07-23/14:38|hosting|msander|low|web1.fraport.de|restarted apache
  +2002-07-23/16:41|hosting|msander|low|web1.fraport.de|activated "keep alive" for flughafen-frankfurts apache
  +2002-07-23/16:44|hosting|cmuschio|low|www.al-ko.de|fixed coldfusion mail spool problem
  +2002-07-23/17:18|hosting|cmuschio|low|web2.merckfinck.de|updated Apache/PHP
  +2002-07-23/18:11|hosting|cschug|low|www.geze.de|upgraded Debian (mpack & analog)
  +2002-07-24/09:14|hosting|cschug|low|www.al-ko.de|installed cronolog; modified lof file handling
  +2002-07-24/11:52|hosting|cmuschio|low|web1.fraport.de|changed password for admin (apache)
  +2002-07-24/16:12|hosting|kgruber|high|Terramap|Reorganized Domain to solve the multihomed problem with two domain controlles and the browser list
  +2002-07-24/18:35|hosting|msander|high|news.ecrc.de|added many, many readers, ham.netz?00.conf
  +2002-07-25/07:04|hosting|rohde|high|smurf.is.de.cw.net|Systemupgrade to woody, kernelupgrade, nat-upgrade, portfilter installed
  +2002-07-25/07:05|hosting|rohde|high|smurf.is.de.cw.net|root pw changed, ext2 -> ext3
  +2002-07-25/07:07|hosting|rohde|high|intra.is.de.cw.net|moved from 141.1.64 to 141.1.116 network, accessible from Internet over https
  +2002-07-26/17:41|hosting|cschug|low|realy.westlb.de|upgraded some Debian packages
  +2002-07-26/19:47|hosting|cschug|high|www1-MUC1.de.cw.net|upgraded OpenPKG mm, openssh, apache
  +2002-07-26/19:47|hosting|cschug|high|development.merckfinck.de|upgraded OpenPKG mm, openssh
  +2002-07-30/11:48|hosting|msander|low|news.ecrc.de|added reader bfinet.de
  +2002-07-30/11:49|hosting|msander|low|news.ecrc.de|added reader htp-tel.de
  +2002-07-30/11:59|hosting|msander|low|news.ecrc.de|added reader oberberg.net
  +2002-07-30/12:00|hosting|msander|low|news-fffm2.ecrc.net|reseted password newsfeed.hamburg.cityline.net
  +2002-07-30/12:01|hosting|msander|low|news-ffm2.ecrc.net|changed Subscription to "*" for ediscom they might now be happy with the amount of data they get ;-)
  +2002-07-30/14:42|hosting|cschug|low|news.ecrc.de|added reader raytion.com
  +2002-07-30/16:51|hosting|cschug|high|f1.FFM1.news.de.cw.net|upgraded openssl and openssh
  +2002-07-30/17:29|hosting|cschug|high|relay.amadeus.net|stopped and started postfix (resource probs) in order to compile and install openssl
  +2002-07-30/17:33|hosting|cschug|high|ftp.de.cw.net|upgraded OpenPKG openssl
  +2002-07-30/17:55|hosting|cschug|high|r1.MUC1.news.de.cw.net|upgraded OpenPKG openssl
  +2002-07-30/17:55|hosting|cschug|high|web1.fraport.de|upgraded OpenPKG openssl
  +2002-07-30/17:55|hosting|cschug|high|db1.fraport.de|upgraded OpenPKG openssl
  +2002-07-30/17:55|hosting|cschug|high|devweb1.fraport.de|upgraded OpenPKG openssl
  +2002-07-30/17:55|hosting|cschug|high|devdb1.fraport.de|upgraded OpenPKG openssl
  +2002-07-30/17:55|hosting|cschug|high|relay.de.cw.net|upgraded OpenPKG openssl
  +2002-07-30/17:55|hosting|cschug|high|www.al-ko.de|upgraded OpenPKG openssl
  +2002-07-30/17:55|hosting|cschug|high|holmes.bayer-healthvillage.com|upgraded OpenPKG openssl
  +2002-07-30/17:55|hosting|cschug|high|database.beautynet.de|upgraded OpenPKG openssl
  +2002-07-30/17:55|hosting|cschug|high|gauss.beautynet.de|upgraded OpenPKG openssl
  +2002-07-30/17:55|hosting|cschug|high|shop.beautynet.de|upgraded OpenPKG openssl
  +2002-07-30/17:55|hosting|cschug|high|shop2.beautynet.de|upgraded OpenPKG openssl
  +2002-07-30/17:55|hosting|cschug|high|shop3.beautynet.de|upgraded OpenPKG openssl
  +2002-07-30/17:55|hosting|cschug|high|www.beautynet.de|upgraded OpenPKG openssl
  +2002-07-30/17:55|hosting|cschug|high|news.ecrc.de|upgraded OpenPKG openssl
  +2002-07-30/17:55|hosting|cschug|high|news-FFM2.de.cw.net|upgraded OpenPKG openssl
  +2002-07-30/17:55|hosting|cschug|high|news-DUS2.de.cw.net|upgraded OpenPKG openssl
  +2002-07-30/17:55|hosting|cschug|high|pop.de.cw.net|upgraded OpenPKG openssl
  +2002-07-30/17:55|hosting|cschug|high|www.geze.de|upgraded OpenPKG openssl
  +2002-07-30/17:55|hosting|cschug|high|web1.merckfinck.de|upgraded OpenPKG openssl
  +2002-07-30/17:55|hosting|cschug|high|web2.merckfinck.de|upgraded OpenPKG openssl
  +2002-07-30/17:55|hosting|cschug|high|web3.merckfinck.de|upgraded OpenPKG openssl
  +2002-07-30/17:55|hosting|cschug|high|oracle1.merckfinck.de|upgraded OpenPKG openssl
  +2002-07-30/17:55|hosting|cschug|high|oracle2.merckfinck.de|upgraded OpenPKG openssl
  +2002-07-30/17:55|hosting|cschug|high|relay.westlb.de|upgraded OpenPKG openssl
  +2002-07-30/17:55|hosting|cschug|high|relay.amadeus.net|upgraded OpenPKG openssl
  +2002-07-30/17:55|hosting|cschug|high|www.meisterverlag.de|upgraded OpenPKG openssl
  +2002-07-30/17:55|hosting|cschug|high|web1.tradecross.de|upgraded OpenPKG openssl
  +2002-07-30/17:55|hosting|cschug|high|www1-MUC1.de.cw.net|upgraded OpenPKG openssl
  +2002-07-30/17:55|hosting|cschug|high|ns.vnunet.de|upgraded OpenPKG openssl
  +2002-07-30/17:55|hosting|cschug|high|development.merckfinck.de|upgraded OpenPKG openssl
  +2002-07-30/17:55|hosting|cschug|high|fax.de.cw.net|upgraded OpenPKG openssl
  +2002-07-30/17:55|hosting|cschug|high|ftp.de.cw.net|upgraded OpenPKG openssl
  +2002-07-30/17:55|hosting|cschug|high|mail.de.cw.net|upgraded OpenPKG openssl
  +2002-07-31/09:55|hosting|cschug|high|r1.MUC1.news.de.cw.net|upgraded OpenPKG openssh
  +2002-07-31/09:55|hosting|cschug|high|web1.fraport.de|upgraded OpenPKG openssh
  +2002-07-31/09:55|hosting|cschug|high|db1.fraport.de|upgraded OpenPKG openssh
  +2002-07-31/09:55|hosting|cschug|high|devweb1.fraport.de|upgraded OpenPKG openssh
  +2002-07-31/09:55|hosting|cschug|high|devdb1.fraport.de|upgraded OpenPKG openssh
  +2002-07-31/09:55|hosting|cschug|high|relay.de.cw.net|upgraded OpenPKG openssh
  +2002-07-31/09:55|hosting|cschug|high|www.al-ko.de|upgraded OpenPKG openssh
  +2002-07-31/09:55|hosting|cschug|high|holmes.bayer-healthvillage.com|upgraded OpenPKG openssh
  +2002-07-31/09:55|hosting|cschug|high|database.beautynet.de|upgraded OpenPKG openssh
  +2002-07-31/09:55|hosting|cschug|high|gauss.beautynet.de|upgraded OpenPKG openssh
  +2002-07-31/09:55|hosting|cschug|high|shop.beautynet.de|upgraded OpenPKG openssh
  +2002-07-31/09:55|hosting|cschug|high|shop2.beautynet.de|upgraded OpenPKG openssh
  +2002-07-31/09:55|hosting|cschug|high|shop3.beautynet.de|upgraded OpenPKG openssh
  +2002-07-31/09:55|hosting|cschug|high|www.beautynet.de|upgraded OpenPKG openssh
  +2002-07-31/09:55|hosting|cschug|high|news.ecrc.de|upgraded OpenPKG openssh
  +2002-07-31/09:55|hosting|cschug|high|news-FFM2.de.cw.net|upgraded OpenPKG openssh
  +2002-07-31/09:55|hosting|cschug|high|news-DUS2.de.cw.net|upgraded OpenPKG openssh
  +2002-07-31/09:55|hosting|cschug|high|pop.de.cw.net|upgraded OpenPKG openssh
  +2002-07-31/09:55|hosting|cschug|high|www.geze.de|upgraded OpenPKG openssh
  +2002-07-31/09:55|hosting|cschug|high|web1.merckfinck.de|upgraded OpenPKG openssh
  +2002-07-31/09:55|hosting|cschug|high|web2.merckfinck.de|upgraded OpenPKG openssh
  +2002-07-31/09:55|hosting|cschug|high|web3.merckfinck.de|upgraded OpenPKG openssh
  +2002-07-31/09:55|hosting|cschug|high|oracle1.merckfinck.de|upgraded OpenPKG openssh
  +2002-07-31/09:55|hosting|cschug|high|oracle2.merckfinck.de|upgraded OpenPKG openssh
  +2002-07-31/09:55|hosting|cschug|high|relay.westlb.de|upgraded OpenPKG openssh
  +2002-07-31/09:55|hosting|cschug|high|relay.amadeus.net|upgraded OpenPKG openssh
  +2002-07-31/09:55|hosting|cschug|high|www.meisterverlag.de|upgraded OpenPKG openssh
  +2002-07-31/09:55|hosting|cschug|high|web1.tradecross.de|upgraded OpenPKG openssh
  +2002-07-31/09:55|hosting|cschug|high|www1-MUC1.de.cw.net|upgraded OpenPKG openssh
  +2002-07-31/09:55|hosting|cschug|high|ns.vnunet.de|upgraded OpenPKG openssh
  +2002-07-31/09:55|hosting|cschug|high|development.merckfinck.de|upgraded OpenPKG openssh
  +2002-07-31/09:55|hosting|cschug|high|fax.de.cw.net|upgraded OpenPKG openssh
  +2002-07-31/09:55|hosting|cschug|high|ftp.de.cw.net|upgraded OpenPKG openssh
  +2002-07-31/09:55|hosting|cschug|high|mail.de.cw.net|upgraded OpenPKG openssh
  +2002-07-31/11:14|hosting|rohde|high|intra.is.de.cw.net|upgrade OpenPKG (both stages) openssl/openpkg
  +2002-07-31/11:16|hosting|rohde|high|smurf.de.cw.net|upgrade Openssl
  +2002-07-31/12:46|hosting|rohde|low|intra.is.de.cw.net |upgrade OpenPKG openssh
  +2002-07-31/14:08|hosting|awaegner|low|fax.de.cw.net|put new dfs_new.cgi in /var/v/www6-MUC.ecrc.net/cgi/dfs; it`s written and handled by Mr. Padlesak form DFS; changed root password to the new one;
  +2002-07-31/15:28|hosting|kgruber|low|Terramap|TMSWS5: installed (physically ;-)) a new network card to prepare connection to the backup lan
  +2002-07-31/15:29|hosting|kgruber|high|Terramap|TMSWS1-6: added 6 virtual Webservers for new application "ruhrgas"
  +2002-07-31/15:31|hosting|kgruber|high|Terramap|TMSWS1-6: added 6 additional IP's for each server which are reachable from through the foundry main ip http://195.27.54.60
  +2002-07-31/15:33|hosting|kgruber|low|www4|stopped ftp- & webservices cause all remaining customers were moved to tsw1
  +2002-07-31/15:35|hosting|kgruber|high|Terramap|TMSWS1-8: removed software "diskeeper" which was installed by the customer and which caused several bmc patrol events
  +2002-07-31/15:36|hosting|kgruber|low|Standpunkt|reverse lookup entry for t-mbs.de
  +2002-07-31/15:37|hosting|kgruber|low|relay.de.cw.net|added customer standpunkt (www.t-mbs.de) in postfix client_access file for relaying outgoing mails
  +2002-07-31/15:38|hosting|kgruber|low|tsw1.w2k.de.cw.net|deleted the ip: 62.208.123.20 in the the dns entry for the server
  +2002-07-31/15:39|hosting|kgruber|low|Terramap|inition of memory rupgrade to 1564 Mbyte for all TMS webservers
  +2002-07-31/15:40|hosting|kgruber|low|Terramap|installed powerquest deploy center on tmsws6 for testing purposes on image cloning the webservers
  +2002-07-31/15:40|hosting|kgruber|low|Terramap|removed tmsws6 from dfs
  +2002-07-31/15:41|hosting|kgruber|low|Terramap|tmsws6 is currently set not produtive of the main terramap presence
  +2002-07-31/15:52|hosting|kgruber|low|Terramap|TMSWS1-8: the presence of the file "running.htm" indicates the foundry that the webserver is online and can be used in the loadbalancing system.
  +2002-07-31/16:10|hosting|kgruber|low|ns.vnunet.de|firewall change: source: 194.59.187.4, target (1): 62.208.224.162, target (2): 195.27.176.150, service: ftp, ftp-data
  +2002-08-01/15:59|hosting|msander|high|www.artedona.de|upgraded mm, openssl (OpenPKG)
  +2002-08-01/16:28|hosting|msander|high|www.artedona.de|upgraded openssh (OpenPKG)
  +2002-08-01/17:05|hosting|rohde|high|intra.is.de.cw.net|Update Apache/PHP (OpenPKG) running now in /sw Environment 
  +2002-08-02/09:04|hosting|cschug|low|oracle2.merckfinck.de|deactivated dmispd and snmpd
  +2002-08-02/09:04|hosting|cschug|low|oracle1.merckfinck.de|deactivated dmispd and snmpd
  +2002-08-02/11:57|hosting|kgruber|high|tll.w2k.de.cw.net|Upgraded operating system with windows 2000 service pack3
  +2002-08-02/13:51|hosting|msander|low|www.artedona.de|created some files in /cw that are not under rpm-control. Must remember to delete them later.
  +2002-08-02/15:23|hosting|kgruber|high|thl.w2k.de.cw.net|Upgraded operating system with windows 2000 service pack 3
  +2002-08-02/15:23|hosting|kgruber|low|pop|added users for @smb-ag.de
  +2002-08-02/15:24|hosting|kgruber|low|pop|added users for @lotter.de
  +2002-08-02/17:23|hosting|msander|low|devweb1.fraport.de|1. August: installed patches: 108434-08 108435-08 108827-26 108993-11
  +2002-08-02/17:46|hosting|msander|high|web1.fraport.de|installed patches: 108434-08 108435-08 108827-26 108993-11
  +2002-08-05/12:40|hosting|awaegner|low|console system|changed password on emerge to new root password;
  +2002-08-05/14:26|hosting|awaegner|high|webtrends.de.cw.net|upgraded os with windows 2000 service pack 3
  +2002-08-06/13:41|hosting|scholli|high|fraport core files|/var/core.0.000000.0.%t
  +2002-08-07/09:00|hosting|cschug|high|nntp.hamburg.pop.de|disabled all services except ssh on port 444
  +2002-08-07/09:02|hosting|cschug|high|news-FRA.pop.de|disabled all services except ssh on port 444
  +2002-08-09/12:02|hosting|cschug|low|relay.amadeus.net|restarted syslog to listen on 514/udp to receive logs from screening router on local7 facility
  +2002-08-12/16:27|hosting|cmuschio|low|web1.fraport.de|changed coreadm settings to write global core files
  +2002-08-14/15:04|development|mschloh|low|dv9.de.cw.com|Installed Bea application server on dv9.de.cw.com:/d1/bea
  +2002-08-14/15:51|hosting|cmuschio|low|www.al-ko.de|switched all secured directorys to .htaccess
  +2002-08-16/10:25|hosting|cschug|high|www.geze.de|upgraded Debian GNU/Linux glibc
  +2002-08-16/10:25|hosting|cschug|high|pop.de.cw.net|upgraded Debian GNU/Linux glibc
  +2002-08-16/10:26|hosting|cschug|high|relay.amadeus.net|upgraded Debian GNU/Linux glibc
  +2002-08-19/08:56|hosting|cschug|low|news.ecrc.de|htp-tel.de: disabled posting access due to massive spam
  +2002-08-19/15:29|hosting|msander|low|www.beautynet.de|changed /usr/local/bin/rotate.sh to fit new apache installation
  +2002-08-23/10:18|hosting|cschug|high|relay.de.cw.net|added G-Bag domain list
  +2002-08-23/10:18|hosting|cschug|high|mail.de.cw.net|added G-Bag domain list
  +2002-08-27/15:19|hosting|cschug|high|www1-MUC1.de.cw.net|glibc upgrade
  +2002-08-28/17:38|hosting|msander|low|news-ffm2.ecrc.net|new feed "oberberg"
  +2002-08-28/17:39|hosting|msander|low|news-ffm2.ecrc.net|new feed "cne"; temporarily deactivated.
  +2002-08-28/17:39|hosting|msander|low|floor.is.de.cw.net|passwords for radius admin, newsfeed database now in password table
  +2002-08-29/11:24|hosting|cschug|high|news.ecrc.de|typhoond cored; started daemon again
  +2002-08-29/17:52|hosting|cmuschio|low|www1-muc1|added new virtual server dcinfo.linde-le.com
  +2002-08-30/13:25|hosting|msander|low|www8-muc8|fixed a problem with file permissions for "multitest"
  +2002-08-30/13:27|hosting|cschug|high|www1-MUC1.de.cw.net|moved all HTTP redirects from G-Bag to us
  +2002-09-02/10:07|hosting|msander|low|news.ecrc.de|new reader: strauss1902
  +2002-09-03/13:43|hosting|cschug|high|nfs-MUC.ecrc.net|cleaned exports and revised config due to planned BigIP move
  +2002-09-03/13:44|hosting|cschug|high|Filer LAN 3Com Switch|cleaned config
  +2002-09-04/11:28|hosting|cschug|low|ftp.de.cw.net|disabled remote syslogging
  +2002-09-05/10:23|hosting|msander|low|devweb.fraport.de|added http-user "@dmin" for "ausbau"
  +2002-09-05/10:24|hosting|msander|low|relay.de.cw.net|repaired relaydomains.g-bag
  +2002-09-05/11:11|hosting|msander|high|relay.de.cw.net|changed link settings for hme0 to solve "output packet errors"
  +2002-09-05/17:48|hosting|msander|low|relay.de.cw.net|changed main.cf. must remember to reset changes tomorrow
  +2002-09-05/17:49|hosting|msander|low|mail.de.cw.net|allowed acg-gmbh to allow over mail.de.cw.net
  +2002-09-06/11:44|hosting|msander|low|relay.de.cw.net|deleted smarthost entry in /etc/mail/sendmail.cf
  +2002-09-06/12:10|hosting|msander|low|relay.de.cw.net|reseted changes to main.cf
  +2002-09-06/12:11|hosting|msander|low|relay.de.cw.net|changed aliases file (/etc/mail)
  +2002-09-06/13:16|development|mschloh|low|dv9.dev.de.cw.com|pkgrm SUNWj3dev SUNWj3dmo SUNWj3dvx SUNWj3irt SUNWj3man SUNWj3rt SUNWj3rtx
  +2002-09-06/13:17|development|mschloh|low|dv9.dev.de.cw.com|von j2sdk-1_4_0_01-solaris-sparc.tar.Z: pkgadd SUNWj3rt SUNWj3dev SUNWj3man SUNWj3dmo
  +2002-09-06/13:19|development|mschloh|low|dv9.dev.de.cw.com|installed poseidon-1.4 auf /d1, made link to /usr/local/poseidon
  +2002-09-06/13:42|hosting|cmuschio|low|www1-muc1|new "special" webserver, see CW-0000098799 for details
  +2002-09-06/15:17|development|mschloh|low|dv9.dev.de.cw.com|pkgadd SUNWj3rtx SUNWj3dvx SUNWj3dmx
  +2002-09-06/17:34|hosting|awaegner|low|mssql7.de.cw.net|installed windows sp3; reboot;
  +2002-09-10/09:42|hosting|cschug|low|www.al-ko.de|restarted sendmail; compressed old logs
  +2002-09-10/11:32|hosting|msander|low|devweb1.fraport.de|changed .htaccess for "ausbau"
  +2002-09-10/11:32|hosting|msander|low|devweb1.fraport.de|changed .htaccess for "fraport"
  +2002-09-10/11:47|hosting|msander|high|relay.de.cw.net|added interface settings to /etc/system
  +2002-09-10/11:48|hosting|msander|high|relay.de.cw.net|changed hme0 to 100fdx
  +2002-09-10/14:33|hosting|mhendel|low|relay.de.cw.net|upgraded to openpkg 1.1
  +2002-09-11/10:29|hosting|cschug|high|www1-MUC1.de.cw.net|added G-Bag customers to config and restarted proftpd
  +2002-09-13/14:08|development|rse|low|as.de.cw.net|moved /as/web to /cw/web to get a fresh /as
  +2002-09-15/20:39|hosting|rse|low|dv3.dev.de.cw.net|upgraded OS to NetBSD 1.6
  +2002-09-17/17:18|hosting|kgruber|high|terramap|tsws1: updated server os with service pack 3 on cutomer request
  +2002-09-18/12:38|development|rse|high|sv1.dev.de.cw.net|upgraded to FreeBSD 4.7-PR
  +2002-09-18/12:38|development|rse|high|sv2.dev.de.cw.net|upgraded to FreeBSD 4.7-PR
  +2002-09-18/12:38|development|rse|high|dv1.dev.de.cw.net|upgraded to FreeBSD 4.7-PR
  +2002-09-18/12:40|development|rse|high|dv2.dev.de.cw.net|upgraded to FreeBSD 5.0-CUR (gcc 3.2.1, rcNG, etc)
  +2002-09-18/12:40|development|rse|high|dv5.dev.de.cw.net|upgraded to Linux kernel 2.2.22
  +2002-09-18/12:41|development|rse|low|dt1.dev.de.cw.net|upgraded to FreeBSD 4.7-PR
  +2002-09-18/12:41|development|rse|low|dt2.dev.de.cw.net|upgraded to FreeBSD 4.7-PR
  +2002-09-18/12:44|development|rse|low|as.de.cw.net|installed OpenPKG hierarchy /as/sw for as.is.eu.cw.com
  +2002-09-19/14:28|hosting|msander|low|news.ecrc.de|disallowed posting for "eastlink"
  +2002-09-23/12:20|hosting|msander|low|www1-muc1|changed password for "steinbeis"
  +2002-09-23/13:24|hosting|kgruber|low|mail.de.cw.net|added customer popconcept
  +2002-09-23/13:25|hosting|kgruber|high|Terramap|TMSWS2: Upgrade Operation System W2K Service Pack 3
  +2002-09-23/13:25|hosting|kgruber|high|Terramap|TMSWS3: Upgrade Operation System W2K Service Pack 3
  +2002-09-24/16:25|development|rse|low|mail.de.cw.net|migrated is.de.cw.net and 109.221.194.in-addr.arpa to our DNS VISP
  +2002-09-25/15:11|hosting|kgruber|high|Terramap|TMSWS4: Upgrade Operation System W2K Service Pack 3
  +2002-09-25/15:11|hosting|kgruber|high|Terramap|TMSWS5: Upgrade Operation System W2K Service Pack 3
  +2002-09-30/10:53|hosting|msander|low|news.ecrc.de|removed old logs
  +2002-09-30/10:53|hosting|msander|low|news.ecrc.de|enabled compression for "alt" spool
  +2002-09-30/10:53|hosting|msander|low|db2.bea|fixed interface settings (hme0)
  +2002-09-30/10:54|hosting|msander|low|db1.bea|fixed interface settings (hme0)
  +2002-10-01/16:09|hosting|kgruber|high|Sarna|Installed and brought 2 new windows 2000 boxes online
  +2002-10-07/12:09|hosting|cschug|high|www.geze.de|upgraded libc, openssl, gd1 and php3
  +2002-10-07/13:33|hosting|mhendel|high|www1-muc1|upgraded apache to apache-1.3.22-1.0.5.src.rpm
  +2002-10-07/13:38|hosting|mhendel|low|mail.de.cw.net|upgraded apache (/e/is) to apache-1.3.26-1.1.1
  +2002-10-07/14:09|hosting|mhendel|high|www2-muc1|upgraded apache to apache-1.3.26-1.1.1
  +2002-10-07/15:16|hosting|mhendel|high|relay.amadeus.net|upgraded apache to apache-1.3.27-20021004.src.rpm
  +2002-10-08/16:41|hosting|kgruber|low|Sarna|added access details for sarna staging & sarna productive server in password list
  +2002-10-08/16:41|hosting|kgruber|high|tsw1.w2k.de.cw.net|Upgraded operating system with windows 2000 service pack 3
  +2002-10-09/05:51|is|rohde|high|intra.is.de.cw.net|upgraded openssl and apache (1.3.7 + php 4.2.3)
  +2002-10-10/16:34|hosting|msander|low|news-ffm2|test feed for "eastlink"
  +2002-10-10/16:35|hosting|msander|low|news-ffm2|POP-ALT: we feed uni-bremen.de now
  +2002-10-10/16:35|hosting|msander|low|news-ffm2|feed for employee peter smej: scapa.smej.org
  +2002-10-10/16:35|hosting|msander|low|news-ffm2|testfeed naime.mine.nu
  +2002-10-10/16:37|hosting|msander|low|news.ecrc.de|edited ECRC.conf to test actsync active file synchronisation
  +2002-10-10/16:50|hosting|msander|low|news-ffm2|wrote script to check stale newsfeeds
  +2002-10-11/10:17|hosting|cschug|low|www1-MUC1.de.cw.net|Debian upgrade
  +2002-10-14/16:57|hosting|msander|low|www.tradecross.de|added interface eth0:1, wondered why eth0:0 is up but not in /etc/sysconfig
  +2002-10-14/16:58|hosting|msander|low|www.tradecross.de|added VirtualHost "194.221.248.27" for later use from "www.windhorst.de"
  +2002-10-15/15:23|hosting|scholli|low|meisterverlag|added www.internetfit.de to conf incl Virtualhost "...14". added this to PDNS
  +2002-10-15/16:28|hosting|msander|low|news-ffm2|new peer "news.saab.se"
  +2002-10-16/11:19|hosting|msander|low|www.meisterverlag.de|repaired malformed passwd (who's guilty?)
  +2002-10-16/11:19|hosting|msander|low|www.meisterverlag.de|repaired mess in pam.d
  +2002-10-17/13:12|hosting|cschug|low|www1-MUC1.de.cw.net|added old POP domains to "www.ecrc.de" which itself redirects to www.cw.com/de/
  +2002-10-18/09:18|hosting|mhendel|low|www1-muc1|added www.hamburger-arbeit.de
  +2002-10-18/09:18|hosting|mhendel|low|www1-muc1 |added www.meyermotoren.de
  +2002-10-18/09:18|hosting|mhendel|low|www2-muc1|added www.deutscher-auto-dienst.de
  +2002-10-18/09:19|hosting|mhendel|low|www2-muc1|added www.dialsoft.de
  +2002-10-18/09:19|hosting|mhendel|low|www2-muc1|added www.elbe-immobilien.de
  +2002-10-18/09:19|hosting|mhendel|low|www2-muc1|added www.hoss.de
  +2002-10-18/09:20|hosting|mhendel|low|www2-muc1|added web.shopping24.de
  +2002-10-18/09:20|hosting|mhendel|low|www2-muc1|added www.ghw-mbh.de
  +2002-10-18/09:20|hosting|mhendel|low|www2-muc1|added www.greystone.de
  +2002-10-18/09:20|hosting|mhendel|low|www2-muc1|added www.treuorga.de
  +2002-10-18/09:21|hosting|mhendel|low|www2-muc1|added www.rinol.com
  +2002-10-18/09:21|hosting|mhendel|low|www2-muc1|added www.rinol.de
  +2002-10-18/09:21|hosting|mhendel|low|www2-muc1|added www.rocland.fr
  +2002-10-18/09:22|hosting|mhendel|low|www2-muc1 |added www.nps-partner-hh.de
  +2002-10-18/09:22|hosting|mhendel|low|www2-muc1|added www.otto-plattform.de
  +2002-10-18/09:22|hosting|mhendel|low|www2-muc1 |added www.photoimaging.de
  +2002-10-18/09:22|hosting|mhendel|low|www2-muc1|added www.scs-ag.de
  +2002-10-18/09:23|hosting|mhendel|low|www2-muc1|added www.greycc.de
  +2002-10-18/09:23|hosting|mhendel|low|www2-muc1|added www2.greyhh.de
  +2002-10-18/15:19|hosting|mhendel|low|www2-muc1|added www.otto-konzern-jobboerse.de
  +2002-10-21/13:00|hosting|msander|low|news.ecrc.de|added group italia.caserta.discussioni
  +2002-10-21/13:01|hosting|msander|low|news.ecrc.de|added group italia.crotone.discussioni
  +2002-10-21/13:01|hosting|msander|low|news.ecrc.de|added group italia.lecce.discussioni
  +2002-10-21/13:01|hosting|msander|low|news.ecrc.de|just kidding ...
  +2002-10-21/13:02|hosting|msander|low|news.ecrc.de|removed/added/changed hundrets of newsgroups
  +2002-10-24/17:04|hosting|msander|low|news.ecrc.de|access for pce.de
  +2002-10-24/17:04|hosting|msander|low|mail.de.cw.net|allowed POP-alt customer to use mail.de.cw.net as smarthost
  +2002-10-24/17:05|hosting|msander|low|www.tradecross.de|changed and PGP'ed root password to customer
  +2002-10-24/17:07|hosting|msander|low|news-ffm2|new feed "pover.de"
  +2002-10-24/17:09|hosting|msander|low|olm.spin.de|rebooted
  +2002-10-24/17:09|hosting|msander|low|top-service-team.de|deleted several email accounts via providat
  +2002-10-24/17:12|hosting|msander|low|www2-muc1|set/sent ftp password for ghw-gmbh
  +2002-10-25/10:54|hosting|msander|low|mail.de.cw.net|added two lines to /etc/hosts until DNS entries are ready. Must remember to delete them.
  +2002-10-25/12:41|hosting|msander|low|al-ko.de|changed proftp-lines in pam.conf
  +2002-10-25/14:30|hosting|msander|low|mail.de.cw.net|added reverse-entries for a whole class-c network (pop-customer-pool) untli DNS entries are done (delete later!!)
  +2002-10-25/15:41|hosting|msander|low|al-ko.de|moved /cw/var to /d1/cw/var
  +2002-10-26/19:56|hosting|msander|low|news.ecrc.net|disabled posting for htp-tel
  +2002-10-28/17:38|is|cmuschio|low|web1.fraport.de|decreased tcp_time_wait_interval to 60000 (1 min)
  +2002-10-30/17:10|is|cmuschio|low|web1.fraport.de|chnged several tcp options, see /etc/init.d/nettune for details
  +2002-10-30/17:38|hosting|msander|low|mail.de.cw.net|removed /etc/hosts entries for dialin IP-Pool
  +2002-10-31/10:01|is|pbrudna|low|relay.de.cw.net|added rinol.se to transport.g-bag
  +2002-11-04/12:19|hosting|cschug|low|news.ecrc.de|modified incoming group filter to be more strict on binary/xxx postings
  +2002-11-04/13:45|hosting|cschug|low|news-FFM2.de.cw.net|disabled feed for Mathworks (contract 391 terminated) and tuned feed to news.ecrc.de
  +2002-11-05/12:22|hosting|cmuschio|low|backoffice.webmiles.ch|restarted Apache (too many open files)
  +2002-11-05/12:22|hosting|cmuschio|low|relay.amadeus.net|changed smtp deliver to 193.23.186.174
  +2002-11-05/16:41|hosting|mhendel|low|relay.de.cw.net|added lots of domains for jahreszeitenverlag
  +2002-11-06/14:36|hosting|cschug|low|news-FFM2.de.cw.net|disabled feed for dpn.de (vianetworks)
  +2002-11-07/10:35|hosting|msander|low|relay.amadeus.net|2.11.2002: changed destination mailserver to mucsmtp2
  +2002-11-07/12:31|hosting|cschug|high|www.geze.de|upgraded Apache
  +2002-11-08/11:32|hosting|cschug|low|bunny.de.cw.com|fixed CSS issues in IS order tool
  +2002-11-08/11:39|hosting|cschug|high|bunny.de.cw.com|upgraded Debian GNU/Linux from 2.2 to 3.0
  +2002-11-08/12:47|hosting|cschug|high|bunny.de.cw.net|upgraded kernel, migrated ext2 fs to ext3, moved tmp to shm
  +2002-11-08/18:42|hosting|cschug|high|mail.hamburg.pop.de|added beloved friends of dsbl.org to the reject list
  +2002-11-12/15:04|hosting|msander|high|news-dus.ecrc.net|changed default gateway from 194.112.125.1 to 194.112.125.5 (recommended by IP-GSOC-OPERATIONS)
  +2002-11-13/15:30|hosting|msander|low|amnesie.hamburg.pop.de|added several ServerAliases for stageholding.de
  +2002-11-14/08:36|hosting|cschug|low|news-FFM2.de.cw.net|disables feed to nahenet since it seems they're DTAG customer now
  +2002-11-14/08:41|hosting|cschug|low|news-FFM2.de.cw.net|disabled also ceplus, easynet, c-tronic, tli & fh-hannover
  +2002-11-15/13:15|hosting|mhendel|low|www1-muc1.de.cw.net|moved www.timesystemgimini.com from POP/G-Bag 
  +2002-11-15/13:16|hosting|mhendel|low|www2-muc1.de.cw.net|moved www.buergel-giessen.de from POP/G-Bag
  +2002-11-15/13:17|hosting|mhendel|low|www2-muc1.de.cw.net |moved www.buergel-hamburg.de rom POP/G-Bag
  +2002-11-15/13:17|hosting|mhendel|low|www2-muc1.de.cw.net |moved www.buergel-niederrhein.de from POP/G-Bag
  +2002-11-15/13:18|hosting|mhendel|low|www2-muc1.de.cw.net |moved www.buergel-potsdam.de from POP/G-Bag
  +2002-11-15/13:18|hosting|mhendel|low|www2-muc1.de.cw.net|moved www.buergel-saarbruecken.de from POP/G-Bag
  +2002-11-15/13:19|hosting|mhendel|low|www2-muc1.de.cw.net |moved www.buergel-ulm.de from POP/G-Bag
  +2002-11-15/13:19|hosting|mhendel|low|www2-muc1.de.cw.net |moved www.buergel.de from POP/G-Bag
  +2002-11-15/13:20|hosting|mhendel|low|www2-muc1.de.cw.net|moved www.hectas.at from POP/G-Bag
  +2002-11-15/13:22|hosting|mhendel|low|www2-muc1.de.cw.net |moved www.hectas.com from POP/G-Bag
  +2002-11-15/13:23|hosting|mhendel|low|www2-muc1.de.cw.net|moved www.hectas.de from POP/G-Bag
  +2002-11-15/13:24|hosting|mhendel|low|www2-muc1.de.cw.net |moved www.rudolfweber.de from POP/G-Bag
  +2002-11-15/13:24|hosting|mhendel|low|www2-muc1.de.cw.net|moved www.concept-preview.de from POP/G-Bag
  +2002-11-15/13:26|hosting|mhendel|low|www2-muc1.de.cw.net |moved www.otto-talents.de from POP/G-Bag
  +2002-11-15/13:26|hosting|mhendel|low|www2-muc1.de.cw.net |moved www.photoimaging.de from POP/G-Bag
  +2002-11-15/13:27|hosting|mhendel|low|www2-muc1.de.cw.net |moved www.greycc.de from POP/G-Bag
  +2002-11-15/13:28|hosting|mhendel|low|www2-muc1.de.cw.net |moved www2.greyhh.de from POP/G-Bag
  +2002-11-15/13:28|hosting|mhendel|low|www2-muc1.de.cw.net |moved www.nps-partner-hh.de from POP/G-Bag
  +2002-11-15/13:29|hosting|mhendel|low|www2-muc1.de.cw.net |moved www.otto-plattform.de from POP/G-Bag
  +2002-11-15/13:29|hosting|mhendel|low|www2-muc1.de.cw.net|moved www.rinol.com from POP/G-Bag
  +2002-11-15/13:30|hosting|mhendel|low|www2-muc1.de.cw.net|moved www.rinol.de from POP/G-Bag
  +2002-11-15/13:30|hosting|mhendel|low|www2-muc1.de.cw.net|moved www.rocland.fr from POP/G-Bag
  +2002-11-18/11:22|hosting|cschug|high|proxy.hamburg.pop.de|upgraded bind; limited listening to lo interface
  +2002-11-18/11:23|hosting|cschug|high|relay.de.cw.net|upgraded bind, but this specific bind package for OpenPKG 1.0 has still some flaws ... will be fixed very soon
  +2002-11-18/11:40|hosting|msander|low|pop.de.cw.net|corrected file permissions for 'aweiher'
  +2002-11-18/17:29|hosting|cschug|high|ftp.de.cw.net|huge upgrade to OpenPKG 1.1 but not complete -> to be finished by tomorrow
  +2002-11-18/17:29|hosting|cschug|high|mail.de.cw.net|huge upgrade to OpenPKG 1.1 but not complete -> to be finished by tomorrow
  +2002-11-18/17:29|hosting|cschug|high|pop.de.cw.net|huge upgrade to OpenPKG 1.1 but not complete -> to be finished by tomorrow
  +2002-11-19/13:58|hosting|cschug|high|proxy.hamburg.pop.de|replaced legacy Squid by OpenPKG Squid
  +2002-11-19/14:05|hosting|msander|low|news.ecrc.de|new sucker account regiocom.net
  +2002-11-19/14:22|hosting|kgruber|high|CW Sweden|New Windwos 2000 Server online: cwse1 - 195.27.248.2
  +2002-11-19/14:22|hosting|kgruber|high|CW Sweden|New Windwos 2000 Server online: cwse2 - 195.27.248.3
  +2002-11-20/16:30|hosting|msander|low|news-ffm2.ecrc.net|new feed sysplain.net
  +2002-11-21/15:08|hosting|kgruber|high|CW Sweden|New Windwos 2000 Server online: cwse3 - 195.27.248.4
  +2002-11-21/15:08|hosting|kgruber|high|CW Sweden|New Windwos 2000 Server online: cwse4 - 195.27.248.5
  +2002-11-22/12:16|hosting|cschug|high|ns.vnunet.de|upgraded Debian GNU/Linux (glibc) and OpenPKG bind
  +2002-11-25/12:41|hosting|awaegner|low|relay.de.cw.net|changed in transport.g-bag smtp routing for centerline-pro.de to 212.79.49.19
  +2002-11-25/12:41|hosting|awaegner|low|relay.de.cw.net|changed in transport.g-bag smtp routing for hawe-spedition.de to 212.79.49.19
  +2002-11-27/14:31|hosting|cschug|high|all Unix servers|root password change on all Unix servers except news & Hamburg
  +2002-11-29/16:26|hosting|msander|low|news-ffm2.ecrc.net|repaired link to highwinds-software
  +2002-12-02/11:15|hosting|awaegner|low|pop.de.cw.net|added user act-eta for activia.at
  +2002-12-02/11:34|hosting|cschug|low|pop.de.cw.net|installed local caching name server
  +2002-12-06/09:05|hosting|cschug|low|relay.de.cw.net|upgraded to bind 9 and configured as local caching resolver
  +2002-12-06/10:19|hosting|awaegner|low|mail.provi.de|added new pop-box u.lampe for pieper-fleischwaren.de
  +2002-12-10/12:22|hosting|mhendel|low|www2-muc1.de.cw.net|installed gnupg
  +2002-12-10/12:23|hosting|mhendel|low|relay.de.cw.net|installed tsmc-5..... 
  +2002-12-12/10:00|hosting|mhendel|low|aerztekammer-hamburg.de|switched aerztekammer-hamburg.de from mail.hh.baycix.de to pop.de.cw.net - Primary DNS is mail.aerztekammer-hamburg.de which points to the IP of pop.de.cw.net
  +2002-12-12/10:40|hosting|mhendel|low|mammamia.de|switched mammamia.de from mail.hh.baycix.de to pop.de.cw.net - Primary DNS is mail.mammamia.de which points to the IP of pop.de.cw.net
  +2002-12-12/10:41|hosting|mhendel|low|buergel-niederrhein.de|switched buergel-niederrhein.de from mail.hh.baycix.de to pop.de.cw.net - Primary DNS is mail.buergel-niederrhein.de which points to the IP of pop.de.cw.net
  +2002-12-12/10:42|hosting|mhendel|low|loewenkoenig.de|switched loewenkoenig.de from mail.hh.baycix.de to pop.de.cw.net - Primary DNS is mail.loewenkoenig.de which points to the IP of pop.de.cw.net
  +2002-12-12/10:46|hosting|mhendel|low|heartkisses.de|switched heartkisses.de from mail.hh.baycix.de to pop.de.cw.net - Primary DNS is mail.heartkisses.de which points to the IP of pop.de.cw.net
  +2002-12-12/10:59|is|pbrudna|low|www.jilsander.de|SharedServer eingerichtet
  +2002-12-12/15:29|hosting|awaegner|high|andechs.de|installed sp3 for w2k and all security patches; reboot;
  +2002-12-12/15:29|hosting|awaegner|low|wagged.de|moved wagged.de from www8 to tsw1; changed dns entry;
  +2002-12-16/11:17|hosting|cschug|low|www1-MUC1.de.cw.net|added permanent redirect for eHR.is.de.cw.net
  +2002-12-16/16:00|hosting|cschug|high|pop.de.cw.net|installed procmail, upgraded postfix to OpenPKG 1.1
  +2002-12-16/17:16|hosting|cschug|high|pop.de.cw.net|upgraded qpopper to OpenPKG 1.1; upgraded perl as well; restarted pb4sd
  +2002-12-17/15:51|hosting|cschug|low|relay.de.cw.net|finished upgrades to OpenPKG 1.1
  +2002-12-17/16:22|hosting|kgruber|low|relay.amadeus.net|added 80.11.176.3 to allow smtp relaying
  +2002-12-17/16:23|hosting|kgruber|low|fuchs-silkolene.de|added an temporaly website for fuchs-dea on 62.208.123.56
  +2002-12-17/16:25|hosting|kgruber|low|mail.provi.de|removed forwarding for meier@top-service-team.de
  +2002-12-17/16:25|hosting|kgruber|low|mail.provi.de|added several pop3 boxes for hectas.de
  +2002-12-17/16:26|hosting|kgruber|low|mail.provi.de|added several pop3 boxes for top-service.de
  +2002-12-17/16:26|hosting|kgruber|low|mail.provi.de|given login informations of pop3 boxes from kito.de on request
  +2002-12-17/16:27|hosting|kgruber|low|dbteam|given ip address 62.208.123.6 for implemting the mssql 7 shared server from the dbteam
  +2002-12-17/16:29|hosting|kgruber|low|fraport|checked with christian the fraport sites cause of bmc trouble tickets - sites have heavy traffic
  +2002-12-17/16:38|hosting|cschug|high|kenny.de.cw.com|fixed broken /sw/ installation; moved old one to /d1/sw.old/
  +2002-12-17/16:50|hosting|cschug|high|kenny.de.cw.com|upgraded MySQL due to security bug
  +2002-12-17/20:33|hosting|cschug|high|www.al-ko.de|MySQL root pw reset (-> ~root/my.cnf), upgrade due to security bug
  +2002-12-17/21:04|hosting|cschug|high|bunny.is.de.cw.net|complete upgrade OpenPKG 1.0 -> 1.1
  +2002-12-17/21:19|hosting|cschug|high|www1-MUC1.de.cw.net|complete upgrade OpenPKG 1.0 -> 1.1 (except proftpd, tsmc & samba -> tomorrow)
  +2002-12-18/12:39|hosting|kgruber|low|pop.de.cw.net|created several pop3 boxes for journalmedia.de
  +2002-12-18/13:17|hosting|kgruber|low|mail.provi.de|added several pop3 boxes for projektwerk.de
  +2002-12-18/16:57|hosting|kgruber|low|pop.de.cw.net|created again several pop3 boxes for journalmedia.de
  +2002-12-20/11:55|hosting|awaegner|low|mail.provi.de|added several pop3 boxes for hectas.de
  +2002-12-20/11:56|hosting|awaegner|low|pop.de.cw.net|deleted entry for ulrich kohl; on relay as well;
  +2002-12-20/15:24|hosting|kgruber|low|member server|brought base system of shared member server online (debian_woody)
  +2002-12-30/10:36|hosting|kgruber|low|sarna|activated smtp server on the sarna production server and routed all mail to cs.sarna.com
  +2002-12-30/10:37|hosting|kgruber|low|bluepill.is.de.cw.net|upgraded shared member server to openpkg current
  +2003-01-02/17:10|development|rse|low|dv1.dev.de.cw.net|Upgrade OS to FreeBSD 4.7-STABLE as of today
  +2003-01-07/16:07|hosting|scholli|low|news c-tronic makeit4u|mv c-tronic makeit4u
  +2003-01-07/16:08|hosting|scholli|low|pop.de.cw.net|added pop3 box for hectas
  +2003-01-07/17:35|hosting|awaegner|low|www8-muc.ecrc.net|stopped dfs.de, grafix-online.de, mmmgroup.de; after moving to tsw1; two customers left;
  +2003-01-07/17:37|hosting|awaegner|low|webtrends.de.cw.net|added profiles for all-inform.de, fahrschule-lippardt.de, fuchs-silkolen.de, glasbau-stormann.de;
  +2003-01-08/18:09|hosting|cschug|low|www1-MUC1.de.cw.net|enabled php register_globals for www.timesystemgemini.com
  +2003-01-10/17:06|hosting|awaegner|low|www1-muc1.de.cw.net|changed IP for elisabeth-das-musical.de on euro-hm1 to 195.222.205.2;
  +2003-01-13/10:16|hosting|msander|low|news-ffm2.ecrc.net|feed for ision disabled (customers request)
  +2003-01-13/10:16|hosting|msander|low|www1-muc1|stageholding: repaired and consolidated domain redirects
  +2003-01-13/10:24|hosting|msander|low|www1-muc1|stageholding: switched redirect elisabeth-das-.... back to DNS-Name
  +2003-01-13/14:40|hosting|msander|low|news-ffm2|changed Hostname for feed c-tronic
  +2003-01-16/11:17|hosting|msander|low|mail.provi.de|added open relay 195.222.197.22 to rejectlist
  +2003-01-16/11:33|hosting|awaegner|low|www1-muc1.de.cw.net|enabled php register_globals for www.ok-trenwerbung.com
  +2003-01-16/12:08|hosting|msander|low|mail.provi.de|scheduled removel from dsbl list, changed 'postmaster' to personal my personal email account temporarily
  +2003-01-17/10:44|hosting|msander|low|pop.de.cw.net|deleted forwardings and popbox for vvissler
  +2003-01-17/11:06|hosting|msander|low|www2-muc1|spamhole found: disabled formail.pl of www.nps-partner-hh.de
  +2003-01-17/11:25|hosting|msander|low|www2-muc1|deleted mailq
  +2003-01-17/12:56|hosting|msander|low|pop.de.cw.net|deleted duplicates in 'virtual' for bmt-ts.com
  +2003-01-20/16:57|hosting|awaegner|low|www1-muc1.de.cw.net |enabled php register_globals for www.am3.com
  +2003-01-21/15:54|hosting|cschug|low|proxy.hamburg.pop.de|rotated Squid log files manually since the package does not do it (-> OpenPKG bug) and the log file reached 2 GByte limit
  +2003-01-23/10:59|hosting|msander|low|devweb1.fraport.de|changed cargocity apache-config
  +2003-01-23/10:59|hosting|msander|low|mail.de.cw.net|updated outdated /etc/resolv.conf
  +2003-01-28/11:51|hosting|msander|low|news-ffm2|updated outdated /etc/resolv.conf
  +2003-01-28/15:51|hosting|msander|low|news.ecrc.de|updated outdated /etc/resolv.conf
  +2003-01-29/11:38|hosting|msander|low|pop.de.cw.net|created 'msander' account for autoresponder tests
  +2003-01-29/11:43|hosting|msander|low|pop.de.cw.net|prepared quam-auto account for quam forwarding/autoresponding
  +2003-01-30/17:21|hosting|cmuschio|low|artedona|added new virtual hosts to apache, see also CW-0000118317
  +2003-02-04/17:52|hosting|msander|low|news-dus|updated outdated /etc/resolv.conf
  +2003-02-05/13:18|hosting|awaegner|low|whatsup.w2k.de.cw.net|Update to Version 7.03; Reboot;
  +2003-02-05/13:24|hosting|awaegner|low|whatsup.w2k.de.cw.net|Update to Version 7.04;
  +2003-02-05/13:26|hosting|awaegner|low|whatsup.w2k.de.cw.net|Installed IE6 SP1; Reboot;
  +2003-02-05/14:16|hosting|awaegner|low|tenovis|new administrative account for JRUN installation on WEB and SQL
  +2003-02-05/15:40|hosting|awaegner|high|www8-muc.ecrc.net|Shutdown of our last NT Shared-Server!!!
  +2003-02-05/15:51|hosting|msander|low|news-ffm2|cleaned disk space
  +2003-02-05/16:23|hosting|msander|low|news.ecrc.de|new reader account eops.de
  +2003-02-06/05:47|hosting|cschug|low|news-FFM2.de.cw.net|changed subscription of newsfeed.eusc.inter.net
  +2003-02-10/17:04|hosting|awaegner|low|www1-muc1.de.cw.net|deleted the setup for realis ag (www.bayernfonds.de); deleted everything on webtrends as well;
  +2003-02-11/12:40|hosting|msander|low|news-ffm2.de.cw.net|deactivated feed to DUS
  +2003-02-11/12:49|hosting|msander|low|news-dus.ecrc.net|deactivated feed to FFM2
  +2003-02-11/13:12|hosting|msander|low|news-dus.ecrc.net|deactivated all feeds that are obviously inactive -> 2 left
  +2003-02-11/17:36|hosting|msander|low|news-ffm2.ecrc.net|rebooted
  +2003-02-11/17:43|hosting|msander|low|news-ffm2.ecrc.net|added interface eth0:2, will be new "outgoing"
  +2003-02-11/17:50|hosting|msander|low|news-out.ecrc.de|one additional IP for news-out.ecrc.net: 195.27.83.147
  +2003-02-12/10:46|hosting|msander|low|news.ecrc.de|started typhoon. Don't know yet why it stopped
  +2003-02-12/16:03|hosting|msander|low|news-ffm2.ecrc.de|removed some feeds which IP-Addresses are not resolveable
  +2003-02-13/10:37|hosting|msander|low|news-ffm2.ecrc.de|Cycloned: Changed DefaultNumberOfStreams 2 DefaultMaxIncomingNumberOfStreams 4
  +2003-02-13/17:34|development|tlottere|low|as.is.eu.cw.com|upgrade to as-cui-0.6.1-20030213.src.rpm
  +2003-02-18/10:18|hosting|cschug|high|amnesie.hamburg.pop.de|altered ProFTPd startup mode from inetd to standalone & fixed loggin to /var/log/proftpd.*.log
  +2003-02-18/14:08|hosting|msander|low|tanto: xip-search-[12]|enabled automounter service for /mnt/nfs
  +2003-02-18/14:44|hosting|msander|low|news-MUC1.de.cw.net|disabled DUS2
  +2003-02-18/16:57|hosting|awaegner|low|tsw1.w2k.de.cw.net|Installed all new patches; reboot;
  +2003-02-19/14:20|hosting|msander|high|news-dus.ecrc.net|stopped news and apache service. Waiting for complaints.
  +2003-02-20/11:33|hosting|awaegner|low|thl.w2k.de.cw.net|Installed latest patches; reboot;
  +2003-02-20/11:35|hosting|awaegner|low|tll.w2k.de.cw.net|Installed latest patches; reboot;
  +2003-02-20/13:11|hosting|mhendel|low|mail.de.cw.net|cw-hierarchy is up to date now - OpenPKG 1.2 
  +2003-02-20/15:08|development|tlottere|low|as.is.eu.cw.com|upgrade to as-cui-0.6.2-20030220.src.rpm
  +2003-02-20/18:10|hosting|cmuschio|low|merckfinck|openpkg and openssh uptate to release 1.2 on all servers
  +2003-02-21/07:48|hosting|mhendel|low|www1-muc1.de.cw.net|cw-hierarchy is up to date now - OpenPKG 1.2
  +2003-02-21/07:48|hosting|mhendel|low|www2-muc1.de.cw.net|cw-hierarchy is up to date now - OpenPKG 1.2
  +2003-02-21/11:44|hosting|msander|high|news-dus.ecrc.net|halted server!
  +2003-02-25/08:44|development|tlottere|low|as.is.eu.cw.com|upgrade to as-cui-0.6.3-20030225.src.rpm
  +2003-02-25/16:31|development|tlottere|low|as.is.eu.cw.com|upgrade to as-cui-0.6.4-20030225.src.rpm
  +2003-02-26/14:38|hosting|msander|low|xip-*.tanto.de|changed amd.conf, set restart-mounts=yes
  +2003-02-26/15:05|is|pbrudna|high|fraport|configured 2 Redirects TT123161
  +2003-02-27/15:59|hosting|awaegner|low|tsw1.w2k.de.cw.net|latest patch for OS
  +2003-02-27/17:02|development|tlottere|low|as.is.eu.cw.com|upgrade to as-cui-0.6.5-20030227.src.rpm
  +2003-03-03/16:34|hosting|cmuschio|low|xip-www-1.tanto.de|installed perl-ole-20030207
  +2003-03-05/11:15|is|msander|low|par-www-?.parship.de|changed NFS mounts from hard to soft
  +2003-03-07/16:09|hosting|awaegner|low|tmsws1.terramapserver.de|Pagefile nearly full, reboot;
  +2003-03-07/16:41|development|rse|high|is3.is.eu.cw.net|upgraded OS to FreeBSD 4.8-RC and all OpenPKG instances
  +2003-03-07/16:42|development|rse|high|is4.is.eu.cw.net|upgraded OS to FreeBSD 4.8-RC and all OpenPKG instances
  +2003-03-07/16:42|development|rse|high|as.de.cw.net|upgraded OpenPKG instances
  +2003-03-10/17:35|hosting|cmuschio|low|www.al-ko.de|installed php-4.3.0 and updated openpkg to 1.2
  +2003-03-18/13:23|hosting|mhendel|high|pop.de.cw.net|upgraded: openssl, fetchmail, lynx, mutt, postfix, qpopper
  +2003-03-18/16:09|hosting|cmuschio|high|www.al-ko.de|upgraded openssh and openssl
  +2003-03-18/16:16|hosting|cmuschio|high|*.fraport.de|upgraded openpkg, openssh and openssl
  +2003-03-18/16:49|hosting|cmuschio|high|*.merckfinck.de|upgraded openpkg, openssh, openssl and apache
  +2003-03-19/13:30|hosting|pbrudna|low|par-www-1.parship.de|update openssl, postfix, lynx, wget
  +2003-03-19/13:31|hosting|pbrudna|low|par-www-2.parship.de|update openssl, postfix, lynx, wget
  +2003-03-19/13:31|hosting|pbrudna|low|par-www-3.parship.de|update openssl, postfix, lynx, wget
  +2003-03-19/13:32|hosting|pbrudna|low|par-fs-1.parship.de|update openssl, postfix, lynx, wget
  +2003-03-19/13:32|hosting|pbrudna|low|par-db-1.parship.de|update openssl, postfix, lynx, wget
  +2003-03-19/13:35|hosting|pbrudna|low|par-db-2.parship.de|update openssl, postfix, lynx, wget
  +2003-03-19/13:37|hosting|pbrudna|low|xip-www-1.tanto.de|update openssl, postfix, lynx, wget
  +2003-03-19/13:37|hosting|pbrudna|low|xip-www-2.tanto.de|update openssl, postfix, lynx, wget
  +2003-03-19/13:37|hosting|pbrudna|low|xip-www-3.tanto.de|update openssl, postfix, lynx, wget
  +2003-03-19/13:38|hosting|pbrudna|low|xip-check-1.tanto.de|update openssl, postfix, lynx, wget
  +2003-03-19/13:38|hosting|pbrudna|low|xip-cms.tanto.de|update openssl, postfix, lynx, wget
  +2003-03-19/13:39|hosting|pbrudna|low|xip-t-info.tanto.de|update openssl, postfix, lynx, wget
  +2003-03-19/13:39|hosting|pbrudna|low|xip-search-1.tanto.de|update openssl, postfix, lynx, wget
  +2003-03-19/13:39|hosting|pbrudna|low|xip-search-2.tanto.de|update openssl, postfix, lynx, wget
  +2003-03-19/13:41|hosting|pbrudna|low|xip-db-1.tanto.de|update openssl, postfix, lynx, wget
  +2003-03-19/13:41|hosting|pbrudna|low| xip-db-2.tanto.de|update openssl, postfix, lynx, wget
  +2003-03-20/09:38|hosting|mhendel|high|mail.de.cw.net|upgraded: openssl, lynx, mutt, postfix, w3m, wget
  +2003-03-20/09:39|hosting|mhendel|high|www1-muc1.de.cw.net|upgraded: apache, openssl, bind, samba, usw.
  +2003-03-20/17:31|hosting|pbrudna|low|par-www-1.parship.de|update openssl /cw/compat with deps
  +2003-03-20/17:31|hosting|pbrudna|low|par-www-2.parship.de|update openssl /cw/compat with deps
  +2003-03-20/17:31|hosting|pbrudna|low|par-www-3.parship.de|update openssl /cw/compat with deps
  +2003-03-20/17:32|hosting|pbrudna|low|par-db-1.parship.de|update openssl /cw/compat with deps
  +2003-03-21/08:53|hosting|mhendel|low|pest.is.de.cw.net|Openssl Upgrade die Zweite
  +2003-03-21/08:53|hosting|mhendel|low|pop.de.cw.net|Openssl Upgrade die Zweite
  +2003-03-21/09:35|hosting|mhendel|low|www1-muc1.de.cw.net|Openssl Upgrade die Zweite
  +2003-03-21/09:35|hosting|mhendel|low|www2-muc1.de.cw.net|Openssl Upgrade die Zweite
  +2003-03-21/11:56|hosting|mhendel|low|mail.de.cw.net|Openssl Upgrade die Zweite
  +2003-03-21/16:09|hosting|awaegner|high|www1-muc1.de.cw.net|upgraded: apache;
  +2003-03-21/16:10|hosting|awaegner|high|www2-muc1.de.cw.net|upgraded: apache;
  +2003-03-24/17:32|hosting|msander|high|relay.de.cw.net|upgraded postfix
  +2003-03-24/17:33|hosting|msander|low|shop*.artedona.de|installed sendmail security patch and removed it
  +2003-04-02/11:55|hosting|msander|low|erdinger.de|added MX records for mail.erdinger.de
  +2003-05-15/15:23|hosting|cschug|high|shop.hamburg.pop.de|shut down all services (apache, shop, proftpd) because there is no active customer any longer
  +2003-05-16/19:23|is|rse|high|sv1.dev.de.cw.net|upgrade OS to latest FreeBSD 4.x
  +2003-05-16/19:23|is|rse|high|sv2.dev.de.cw.net|upgrade OS to latest FreeBSD 4.x
  +2003-05-16/19:24|is|rse|low|dv1.dev.de.cw.net|upgrade OS to latest FreeBSD 4.x
  +2003-05-16/19:24|is|rse|low|dv2.dev.de.cw.net|upgrade OS to latest FreeBSD 5.x
  +2003-05-16/19:24|is|rse|low|dv12.dev.de.cw.net|upgrade OS to latest FreeBSD 5.x
  +2003-05-19/16:04|is|rse|high|is2.is.eu.cw.net (ftp.de.cw.net)|upgrade OS to latest FreeBSD 4.x
  +2003-05-19/16:05|is|rse|high|is1.is.eu.cw.net (mail.de.cw.net)|upgrade OS to latest FreeBSD 4.x
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 29 11:58:14 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 910DE76D50; Thu, 29 May 2003 11:58:14 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT/ modules
Message-Id: <20030529095814.910DE76D50@mail.ossp.org>
Date: Thu, 29 May 2003 11:58:14 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: CVSROOT                          Date:   29-May-2003 11:58:14
  Branch: HEAD                             Handle: 2003052910581300

  Modified files:
    CVSROOT                 modules

  Log:
    update modules file

  Summary:
    Revision    Changes     Path
    1.64        +12 -11     CVSROOT/modules
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: CVSROOT/modules
  ============================================================================
  $ cvs diff -u -r1.63 -r1.64 modules
  --- CVSROOT/modules	16 Dec 2002 13:52:27 -0000	1.63
  +++ CVSROOT/modules	29 May 2003 09:58:13 -0000	1.64
  @@ -81,34 +81,35 @@
   tai             ossp-pkg/tai
   cfg             ossp-pkg/cfg
   fsl             ossp-pkg/fsl
  -uuidgen         ossp-pkg/uuidgen
   sio             ossp-pkg/sio
   sorp            ossp-pkg/sorp
   al              ossp-pkg/al
  +getopt          ossp-pkg/getopt
  +res             ossp-pkg/res
  +ui64            ossp-pkg/ui64
  +srpc            ossp-pkg/srpc
  +string-divert   ossp-pkg/string-divert
   
   #   the OSSP applications
   eperl           ossp-pkg/eperl
   shiela          ossp-pkg/shiela
   shtool          ossp-pkg/shtool
   sugar           ossp-pkg/sugar
  +lmtp2nntp       ossp-pkg/lmtp2nntp
  +tabea           ossp-pkg/tabea
  +as              ossp-pkg/as
  +changelog       ossp-pkg/changelog
  +mct             ossp-pkg/mct
  +sugar           ossp-pkg/sugar
  +xmldb           ossp-pkg/xmldb
   
   #   the OSSP applications (third-party)
   cvs             ossp-pkg/cvs
   jitterbug       ossp-pkg/jitterbug
   petidomo        ossp-pkg/petidomo
   
  -#   OSSP lmtp2nntp
  -lmtp2nntp       ossp-pkg/lmtp2nntp
  -
  -#   OSSP tabea
  -tabea           ossp-pkg/tabea
  -
   #   OSSP rc
   rc              ossp-pkg/rc &rc_popt &rc_ex
  -#rc              ossp-pkg/rc &rc_popt &rc_ex &rc_str &rc_var &rc_val
   rc_popt         -d rc_popt ossp-pkg/popt
   rc_ex           -d rc_ex   ossp-pkg/ex
  -#rc_str          -d rc_str  ossp-pkg/str
  -#rc_var          -d rc_var  ossp-pkg/var
  -#rc_val          -d rc_val  ossp-pkg/val
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 29 11:58:27 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C468576D94; Thu, 29 May 2003 11:58:26 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT/ modules
Message-Id: <20030529095826.C468576D94@mail.ossp.org>
Date: Thu, 29 May 2003 11:58:26 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: CVSROOT                          Date:   29-May-2003 11:58:26
  Branch: HEAD                             Handle: 2003052910582600

  Modified files:
    CVSROOT                 modules

  Log:
    update modules file

  Summary:
    Revision    Changes     Path
    1.65        +0  -1      CVSROOT/modules
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: CVSROOT/modules
  ============================================================================
  $ cvs diff -u -r1.64 -r1.65 modules
  --- CVSROOT/modules	29 May 2003 09:58:13 -0000	1.64
  +++ CVSROOT/modules	29 May 2003 09:58:26 -0000	1.65
  @@ -87,7 +87,6 @@
   getopt          ossp-pkg/getopt
   res             ossp-pkg/res
   ui64            ossp-pkg/ui64
  -srpc            ossp-pkg/srpc
   string-divert   ossp-pkg/string-divert
   
   #   the OSSP applications
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 29 11:58:38 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D9B8E76DAF; Thu, 29 May 2003 11:58:37 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT/ modules
Message-Id: <20030529095837.D9B8E76DAF@mail.ossp.org>
Date: Thu, 29 May 2003 11:58:37 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: CVSROOT                          Date:   29-May-2003 11:58:37
  Branch: HEAD                             Handle: 2003052910583700

  Modified files:
    CVSROOT                 modules

  Log:
    update modules file

  Summary:
    Revision    Changes     Path
    1.66        +0  -1      CVSROOT/modules
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: CVSROOT/modules
  ============================================================================
  $ cvs diff -u -r1.65 -r1.66 modules
  --- CVSROOT/modules	29 May 2003 09:58:26 -0000	1.65
  +++ CVSROOT/modules	29 May 2003 09:58:37 -0000	1.66
  @@ -99,7 +99,6 @@
   as              ossp-pkg/as
   changelog       ossp-pkg/changelog
   mct             ossp-pkg/mct
  -sugar           ossp-pkg/sugar
   xmldb           ossp-pkg/xmldb
   
   #   the OSSP applications (third-party)
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 29 12:11:18 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D3DB076D03; Thu, 29 May 2003 12:11:17 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-db/bres/ bres-cfg.sql bres-history.sql bres...
Message-Id: <20030529101117.D3DB076D03@mail.ossp.org>
Date: Thu, 29 May 2003 12:11:17 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-May-2003 12:11:17
  Branch: HEAD                             Handle: 2003052911111500

  Added files:
    ossp-pkg/as/as-db/bres  bres-cfg.sql bres-history.sql bres-index.sql
                            bres-name2oid.sql bres-nonoverlap.sql
                            bres-rule.sql bres-varval.sql

  Log:
    add our AS stand-alone SQL and PL/pgSQL basic research stuff to CVS,
    too

  Summary:
    Revision    Changes     Path
    1.1         +74 -0      ossp-pkg/as/as-db/bres/bres-cfg.sql
    1.1         +296 -0     ossp-pkg/as/as-db/bres/bres-history.sql
    1.1         +25 -0      ossp-pkg/as/as-db/bres/bres-index.sql
    1.1         +116 -0     ossp-pkg/as/as-db/bres/bres-name2oid.sql
    1.1         +128 -0     ossp-pkg/as/as-db/bres/bres-nonoverlap.sql
    1.1         +56 -0      ossp-pkg/as/as-db/bres/bres-rule.sql
    1.1         +11 -0      ossp-pkg/as/as-db/bres/bres-varval.sql
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-db/bres/bres-cfg.sql
  ============================================================================
  $ cvs diff -u -r0 -r1.1 bres-cfg.sql
  --- /dev/null	2003-05-29 12:11:16.000000000 +0200
  +++ bres-cfg.sql	2003-05-29 12:11:16.000000000 +0200
  @@ -0,0 +1,74 @@
  +
  +DROP TABLE as_config CASCADE;
  +CREATE TABLE as_config (
  +    cf_var   TEXT,
  +    cf_val   TEXT
  +);
  +DROP TABLE as_config_session CASCADE;
  +CREATE TABLE as_config_session (
  +    cf_var   TEXT,
  +    cf_val   TEXT
  +);
  +
  +CREATE OR REPLACE FUNCTION as_session_start ()
  +RETURNS VOID LANGUAGE 'plpgsql' STABLE AS '
  +BEGIN
  +    CREATE LOCAL TEMPORARY TABLE as_config
  +        AS SELECT * FROM as_config;
  +    RETURN;
  +END;
  +';
  +CREATE OR REPLACE FUNCTION as_session_end ()
  +RETURNS VOID LANGUAGE 'sql' STABLE AS '
  +    DROP TABLE as_config;
  +';
  +CREATE OR REPLACE FUNCTION as_session_var (TEXT)
  +RETURNS TEXT LANGUAGE 'sql' STABLE AS '
  +    SELECT cf_val FROM as_config WHERE cf_var = $1;
  +';
  +CREATE OR REPLACE FUNCTION as_session_var (TEXT, TEXT)
  +RETURNS TEXT LANGUAGE 'plpgsql' STABLE AS '
  +DECLARE
  +    old TEXT;
  +BEGIN
  +    old := (SELECT cf_val FROM as_config WHERE cf_var = $1);
  +    UPDATE as_config SET cf_val = $2 WHERE cf_var = $1;
  +    return old;
  +END;
  +';
  +
  +CREATE OR REPLACE FUNCTION as_config_val (TEXT)
  +RETURNS TEXT LANGUAGE 'plpgsql' STABLE AS '
  +DECLARE
  +    var ALIAS FOR $1; 
  +    val TEXT;
  +BEGIN
  +    val := NULL;
  +    IF (SELECT tablename FROM pg_tables
  +        WHERE tablename = ''as_config_session'') IS NOT NULL THEN
  +        val := (SELECT cf_val FROM as_config_session WHERE cf_var = var);
  +    END IF;
  +    IF val IS NULL THEN
  +        val := (SELECT cf_val FROM as_config WHERE cf_var = var);
  +    END IF;
  +    RETURN val;
  +END;
  +';
  +
  +INSERT INTO as_config VALUES ('foo', '1');
  +INSERT INTO as_config VALUES ('bar',  '2');
  +-- INSERT INTO as_config_session VALUES ('quux', '3');
  +-- INSERT INTO as_config_session VALUES ('bar', '4');
  +
  +-- SELECT * FROM as_config;
  +-- SELECT * FROM as_config_session;
  +
  +SELECT as_session_start();
  +SELECT as_session_var('non-existing');
  +SELECT as_session_var('foo');
  +SELECT as_session_var('bar');
  +SELECT as_session_var('quux');
  +SELECT as_session_end();
  +
  +SELECT cf_var,as_session_var(cf_var) FROM as_config UNION (SELECT cf_var,cf_val FROM as_config_session);
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-db/bres/bres-history.sql
  ============================================================================
  $ cvs diff -u -r0 -r1.1 bres-history.sql
  --- /dev/null	2003-05-29 12:11:16.000000000 +0200
  +++ bres-history.sql	2003-05-29 12:11:16.000000000 +0200
  @@ -0,0 +1,296 @@
  +
  +-- ##
  +-- ##  Create Database Schema
  +-- ##
  +
  +DROP TABLE ac CASCADE;
  +CREATE TABLE ac(
  +    ac_oid    INTEGER,
  +    ac_name   TEXT,
  +    ac_hid    INTEGER
  +);
  +
  +DROP SEQUENCE st_seq CASCADE;
  +CREATE SEQUENCE st_seq
  +    INCREMENT 1 MINVALUE 1 START 1;
  +
  +DROP TABLE st CASCADE;
  +CREATE TABLE st (
  +    st_oid    INTEGER,
  +    st_hid    INTEGER DEFAULT nextval('st_seq') NOT NULL,
  +              -- discrete monton increasing value assigned to system time
  +    st_beg    INTEGER
  +              -- system time when system change occurred
  +);
  +
  +DROP TABLE ut CASCADE;
  +CREATE TABLE ut (
  +    ut_oid    INTEGER,
  +    ut_beg    INTEGER,
  +    ut_end    INTEGER,
  +    ut_hid    INTEGER
  +);
  +
  +DROP TABLE ut_no CASCADE;
  +CREATE TABLE ut_no (
  +    ut_oid    INTEGER,
  +    ut_beg    INTEGER,
  +    ut_end    INTEGER,
  +    ut_hid    INTEGER,
  +    ut_shid   INTEGER
  +);
  +
  +-- ##
  +-- ##  Update ut_no table for ut change on particular OID
  +-- ##
  +
  +--  Update function
  +DROP FUNCTION ut_update(INTEGER, INTEGER) CASCADE;
  +CREATE FUNCTION ut_update(INTEGER, INTEGER) 
  +RETURNS VOID LANGUAGE 'plpgsql' STABLE AS '
  +DECLARE
  +    oid INTEGER;
  +    hid INTEGER;
  +    pos_prev INTEGER;
  +    pos_this INTEGER;
  +    pos_next INTEGER;
  +    alt_this INTEGER;
  +    alt_prev INTEGER;
  +BEGIN
  +    oid := $1;
  +    hid := $2;
  +
  +    --  delete all old entries corresponding to OID
  +    DELETE FROM ut_no WHERE ut_oid = oid AND ut_shid = hid;
  +
  +    --  initialize iteration variables
  +    pos_prev := -1;
  +    pos_this := -1;
  +    pos_next := NULL;
  +    alt_this := NULL;
  +    alt_prev := NULL;
  +
  +    LOOP
  +        --  determine next position from existing begin/end positions
  +        pos_next := (
  +            SELECT min(v) FROM (
  +                    (SELECT min(ut_beg) FROM ut WHERE ut_beg > pos_this AND ut_oid = oid AND ut_hid <= hid)
  +              UNION (SELECT min(ut_end) FROM ut WHERE ut_end > pos_this AND ut_oid = oid AND ut_hid <= hid)
  +            ) AS result (v)
  +        );
  +        IF pos_next IS NULL THEN
  +            pos_next := 9999;
  +        END IF;
  +
  +        --  determine current altidude
  +        alt_this := (
  +            SELECT max(ut_hid) FROM ut
  +            WHERE ut_beg <= pos_this AND pos_this < ut_end AND ut_oid = oid AND ut_hid <= hid
  +        );
  +        IF alt_this IS NULL THEN
  +            alt_this := -1;
  +        END IF;
  +
  +        -- RAISE NOTICE ''pos_this = %, pos_next = %, alt_this = %'', pos_this, pos_next, alt_this;
  +
  +        IF alt_this = -1 THEN
  +            -- RAISE NOTICE ''hit ground - pruning entry'';
  +        ELSE
  +            IF alt_this = alt_prev THEN
  +                -- RAISE NOTICE ''keeping altitude - consolidating entry'';
  +                UPDATE ut_no SET ut_end = pos_next
  +                    WHERE ut_hid = alt_this AND ut_beg = pos_prev AND ut_end = pos_this AND ut_oid = oid AND ut_shid = hid;
  +            ELSE
  +                -- RAISE NOTICE ''changing altitude - new entry'';
  +                INSERT INTO ut_no (ut_hid, ut_oid, ut_beg, ut_end, ut_shid)
  +                    VALUES (alt_this, oid, pos_this, pos_next, hid);
  +                pos_prev := pos_this;
  +            END IF;
  +        END IF;
  +
  +        --  stop if maximum is reached
  +        IF pos_next >= 9999 THEN
  +           EXIT;
  +        END IF;
  +
  +        --  move one step
  +        pos_this := pos_next;
  +        alt_prev := alt_this;
  +    END LOOP;
  +    RETURN;
  +END;
  +';
  +
  +--  Trigger Stub Function
  +DROP FUNCTION ut_trigger() CASCADE;
  +CREATE FUNCTION ut_trigger() 
  +RETURNS TRIGGER LANGUAGE 'plpgsql' STABLE AS '
  +BEGIN
  +    IF TG_OP = ''INSERT'' OR TG_OP = ''UPDATE'' THEN
  +        PERFORM ut_update(NEW.ut_oid, NEW.ut_hid);
  +    ELSE
  +        IF TG_OP = ''DELETE'' THEN
  +            PERFORM ut_update(OLD.ut_oid, OLD.ut_hid);
  +        END IF;
  +    END IF;
  +    RETURN NULL;
  +END;
  +';
  +
  +--  Global Trigger
  +-- DROP TRIGGER ut_trigger ON ut CASCADE;
  +CREATE TRIGGER ut_trigger
  +    AFTER INSERT OR UPDATE OR DELETE
  +    ON ut FOR EACH ROW
  +    EXECUTE PROCEDURE ut_trigger ();
  +
  +-- ##
  +-- ##   Dynamic History Table
  +-- ##   <oid, hid-max>* := as_hs(ut_beg, ut_end[, st_beg, st_end[, st_max]])
  +-- ##
  +
  +-- This finds (optionally only maximum) oid/hid combinations between
  +-- st_beg and st_end (both inclusive) system time, for which the
  +-- user time touches the time range between ut_beg and ut_end (both
  +-- inclusive).
  +
  +DROP TYPE as_hs_t CASCADE;
  +CREATE TYPE as_hs_t AS (
  +    hs_oid INTEGER,
  +    hs_hid INTEGER
  +);
  +CREATE OR REPLACE FUNCTION as_hs(INTEGER, INTEGER, INTEGER, INTEGER, INTEGER)
  +RETURNS SETOF as_hs_t LANGUAGE 'plpgsql' STABLE AS '
  +DECLARE
  +    arg_ut_beg INTEGER; -- user   time begin (including)
  +    arg_ut_end INTEGER; -- user   time end   (including)
  +    arg_st_beg INTEGER; -- system time begin (including)
  +    arg_st_end INTEGER; -- system time end   (including)
  +    arg_st_max INTEGER; -- whether to take only maximum system time into account
  +    rec RECORD;
  +BEGIN
  +    --  pre-process input arguments by providing reasonable defaults
  +    arg_ut_beg := $1; IF arg_ut_beg IS NULL THEN arg_ut_beg := 0;    END IF;
  +    arg_ut_end := $2; IF arg_ut_end IS NULL THEN arg_ut_end := 9999; END IF;
  +    arg_st_beg := $3; IF arg_st_beg IS NULL THEN arg_st_beg := 0;    END IF;
  +    arg_st_end := $4; IF arg_st_end IS NULL THEN arg_st_end := 9999; END IF;
  +    arg_st_max := $5; IF arg_st_max IS NULL THEN arg_st_max := 1;    END IF;
  +    
  +    --  perform the query operation
  +    IF arg_st_max = 1 THEN
  +        --  variant 1: take only maximum system time for each user time and oid
  +        FOR rec IN
  +           SELECT ut_oid, ut_hid
  +           FROM ut_no, (
  +               SELECT   st_oid, max(st_hid) AS st_hid
  +               FROM     st 
  +               WHERE    (arg_st_beg <= st_beg AND st_beg <= arg_st_end)
  +               GROUP BY st_oid
  +           ) AS st
  +           WHERE
  +               ut_oid = st_oid AND ut_shid = st_hid
  +               AND (ut_beg <= arg_ut_end AND arg_ut_beg < ut_end)
  +        LOOP
  +           RETURN NEXT rec;
  +        END LOOP;
  +    ELSE
  +        --  variant 2: take all system times for each user time and oid
  +        FOR rec IN
  +           SELECT ut_oid, ut_hid
  +           FROM ut_no, (
  +               SELECT   st_oid, st_hid
  +               FROM     st 
  +               WHERE    (arg_st_beg <= st_beg AND st_beg <= arg_st_end)
  +           ) AS st
  +           WHERE
  +               ut_oid  = st_oid AND ut_shid = st_hid
  +               AND (ut_beg <= arg_ut_end AND arg_ut_beg < ut_end)
  +        LOOP
  +           RETURN NEXT rec;
  +        END LOOP;
  +    END IF;
  +    RETURN;
  +END;
  +';
  +
  +--  convinience overloaded function: without "st_max"
  +CREATE OR REPLACE FUNCTION as_hs(INTEGER, INTEGER, INTEGER, INTEGER)
  +RETURNS SETOF as_hs_t LANGUAGE 'sql' STABLE AS '
  +    SELECT * FROM as_hs($1, $2, $3, $4, NULL);
  +';
  +
  +--  convinience overloaded function: without "st" at all
  +CREATE OR REPLACE FUNCTION as_hs(INTEGER, INTEGER)
  +RETURNS SETOF as_hs_t LANGUAGE 'sql' STABLE AS '
  +    SELECT * FROM as_hs($1, $2, NULL, NULL, NULL);
  +';
  +
  +--  convinience overloaded function: without "ut" and "st" at all
  +CREATE OR REPLACE FUNCTION as_hs()
  +RETURNS SETOF as_hs_t LANGUAGE 'sql' STABLE AS '
  +    SELECT * FROM as_hs(NULL, NULL, NULL, NULL, NULL);
  +';
  +
  +-- ##
  +-- ##  Test Data
  +-- ##
  +
  +-- INSERT INTO ac VALUES (11, 'foo',  1);
  +-- INSERT INTO ac VALUES (10, 'foo2', 3);
  +-- INSERT INTO ac VALUES (10, 'foo3', 5);
  +-- INSERT INTO ac VALUES (10, 'foo',  7);
  +-- INSERT INTO ac VALUES (10, 'foo',  9);
  +-- 
  +-- INSERT INTO ac VALUES (20, 'bar',  2);
  +-- INSERT INTO ac VALUES (20, 'bar2', 4);
  +-- INSERT INTO ac VALUES (20, 'bar3', 6);
  +-- INSERT INTO ac VALUES (20, 'bar',  8);
  +-- INSERT INTO ac VALUES (20, 'bar',  10);
  +-- 
  +-- INSERT INTO st (st_oid,st_beg) VALUES (10, 100);
  +-- INSERT INTO st (st_oid,st_beg) VALUES (20, 110);
  +-- INSERT INTO st (st_oid,st_beg) VALUES (10, 120);
  +-- INSERT INTO st (st_oid,st_beg) VALUES (20, 130);
  +-- INSERT INTO st (st_oid,st_beg) VALUES (10, 140);
  +-- INSERT INTO st (st_oid,st_beg) VALUES (20, 150);
  +-- INSERT INTO st (st_oid,st_beg) VALUES (10, 160);
  +-- INSERT INTO st (st_oid,st_beg) VALUES (20, 170);
  +-- 
  +-- INSERT INTO ut VALUES (10, 100, 9999, 1);
  +-- INSERT INTO ut VALUES (10, 102, 9999, 3);
  +-- INSERT INTO ut VALUES (10, 104, 9999, 5);
  +-- INSERT INTO ut VALUES (10, 106, 9999, 7);
  +-- INSERT INTO ut VALUES (10, 100, 200,  9);
  +-- 
  +-- INSERT INTO ut VALUES (20, 101, 9999,  2);
  +-- INSERT INTO ut VALUES (20, 103, 9999,  4);
  +-- INSERT INTO ut VALUES (20, 105, 9999,  6);
  +-- INSERT INTO ut VALUES (20, 107, 9999,  8);
  +-- INSERT INTO ut VALUES (20, 100, 200,  10);
  +-- INSERT INTO ut VALUES (20, 300, 400,  10);
  +-- INSERT INTO ut VALUES (20, 500, 600,  10);
  +
  +INSERT INTO st (st_oid,st_beg) VALUES (10, 2001);
  +INSERT INTO ut VALUES (10, 100, 200, currval('st_seq'));
  +INSERT INTO ac VALUES (10, 'foo', currval('st_seq'));
  +
  +INSERT INTO st (st_oid,st_beg) VALUES (10, 2002);
  +INSERT INTO ut VALUES (10, 200, 300, currval('st_seq'));
  +INSERT INTO ac VALUES (10, 'bar', currval('st_seq'));
  +
  +INSERT INTO st (st_oid,st_beg) VALUES (10, 2004);
  +INSERT INTO ut VALUES (10, 100, 9999, currval('st_seq'));
  +INSERT INTO ac VALUES (10, 'foo', currval('st_seq'));
  +
  +INSERT INTO st (st_oid,st_beg) VALUES (20, 2005);
  +INSERT INTO ut VALUES (20, 100, 9999, currval('st_seq'));
  +INSERT INTO ac VALUES (20, 'bar1', currval('st_seq'));
  +
  +INSERT INTO st (st_oid,st_beg) VALUES (20, 2006);
  +INSERT INTO ut VALUES (20, 200, 9999, currval('st_seq'));
  +INSERT INTO ac VALUES (20, 'bar2', currval('st_seq'));
  +
  +INSERT INTO st (st_oid,st_beg) VALUES (20, 2007);
  +INSERT INTO ut VALUES (20, 200, 300, currval('st_seq'));
  +INSERT INTO ac VALUES (20, 'bar3', currval('st_seq'));
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-db/bres/bres-index.sql
  ============================================================================
  $ cvs diff -u -r0 -r1.1 bres-index.sql
  --- /dev/null	2003-05-29 12:11:16.000000000 +0200
  +++ bres-index.sql	2003-05-29 12:11:16.000000000 +0200
  @@ -0,0 +1,25 @@
  +
  +DROP TABLE bar;
  +CREATE TABLE bar (
  +    id     INTEGER,
  +    parent INTEGER,
  +    name   TEXT
  +);
  +
  +CREATE UNIQUE INDEX bar_idx1 ON bar USING btree (id);
  +CREATE UNIQUE INDEX bar_idx2 ON bar USING btree (name);
  +CREATE UNIQUE INDEX bar_idx3 ON bar USING btree (id, name);
  +
  +INSERT INTO bar VALUES (1, 1, '');
  +INSERT INTO bar VALUES (2, 1, 'a');
  +INSERT INTO bar VALUES (3, 2, 'b');
  +INSERT INTO bar VALUES (4, 3, 'c');
  +INSERT INTO bar VALUES (5, 3, 'C');
  +INSERT INTO bar VALUES (6, 1, 'x');
  +INSERT INTO bar VALUES (7, 6, 'y');
  +INSERT INTO bar VALUES (8, 7, 'z');
  +INSERT INTO bar VALUES (9, 7, 'Z');
  +
  +
  +SELECT * FROM bar;
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-db/bres/bres-name2oid.sql
  ============================================================================
  $ cvs diff -u -r0 -r1.1 bres-name2oid.sql
  --- /dev/null	2003-05-29 12:11:16.000000000 +0200
  +++ bres-name2oid.sql	2003-05-29 12:11:17.000000000 +0200
  @@ -0,0 +1,116 @@
  +
  +DROP TABLE foo;
  +CREATE TABLE foo (
  +    id     INTEGER,
  +    parent INTEGER,
  +    name   TEXT
  +);
  +
  +INSERT INTO foo VALUES (1, 1, '');
  +INSERT INTO foo VALUES (2, 1, 'a');
  +INSERT INTO foo VALUES (3, 2, 'b');
  +INSERT INTO foo VALUES (4, 3, 'c');
  +INSERT INTO foo VALUES (5, 3, 'C');
  +INSERT INTO foo VALUES (6, 1, 'x');
  +INSERT INTO foo VALUES (7, 6, 'y');
  +INSERT INTO foo VALUES (8, 7, 'z');
  +INSERT INTO foo VALUES (9, 7, 'Z');
  +
  +DROP FUNCTION name2oid(TEXT);
  +CREATE FUNCTION name2oid(TEXT) 
  +RETURNS INTEGER LANGUAGE 'plpgsql' STABLE AS '
  +DECLARE
  +    comp TEXT;
  +    path TEXT;
  +    oid INTEGER;
  +BEGIN
  +    RAISE NOTICE ''name2oid(%)'', $1;
  +    path := $1;
  +    IF substr(path, 1, 1) != ''/'' THEN
  +        RAISE EXCEPTION ''name2oid(%): path not starting with slash'', $1;
  +    END IF;
  +    oid := (SELECT id FROM foo
  +        WHERE name = '''' AND parent = id);
  +    IF oid IS NULL THEN
  +        RAISE EXCEPTION ''name2oid(%): root path component not found'', $1;
  +    END IF;
  +    path := substr(path, 2);
  +    -- RAISE NOTICE ''name2oid: "/" -> %'', oid;
  +    WHILE path != '''' LOOP
  +        comp := substring(path from ''^([^/]+)/*'');
  +        path := substring(path from ''^[^/]+/*(.*)$'');
  +        oid := (SELECT id FROM foo
  +            WHERE name = comp AND parent = oid);
  +        IF oid IS NULL THEN
  +            RAISE EXCEPTION ''name2oid(%): path component "%" not found'', $1, comp, path;
  +        END IF;
  +        -- RAISE NOTICE ''name2oid: "%" -> %'', comp, oid;
  +    END LOOP;
  +    RAISE NOTICE ''name2oid(%) = %'', $1, oid;
  +    RETURN oid;
  +END;
  +';
  +
  +DROP FUNCTION oid2name(TEXT);
  +CREATE FUNCTION oid2name(TEXT) 
  +RETURNS TEXT LANGUAGE 'plpgsql' AS '
  +DECLARE
  +    oid INTEGER;
  +    name TEXT;
  +    obj RECORD;
  +BEGIN
  +    RAISE NOTICE ''oid2name(%)'', $1;
  +    oid := $1;
  +    name := '''';
  +    LOOP
  +        SELECT * INTO obj FROM foo WHERE id = oid;
  +        IF NOT FOUND THEN
  +            RAISE EXCEPTION ''oid2name(%): object % not found'', $1, oid;
  +        END IF;
  +        -- RAISE NOTICE ''oid2name: % -> "%"'', oid, obj.name;
  +        IF obj.parent = oid THEN
  +            EXIT;
  +        END IF;
  +        name := ''/'' || obj.name || name;
  +        oid := obj.parent;
  +    END LOOP;
  +    IF name = '''' THEN
  +        name = ''/'';
  +    END IF;
  +    RAISE NOTICE ''oid2name(%) = %'', $1, name;
  +    RETURN name;
  +END;
  +';
  +
  +SELECT * FROM foo WHERE id = (SELECT name2oid('/'));
  +SELECT * FROM foo WHERE id = (SELECT name2oid('/a/b/c'));
  +SELECT * FROM foo WHERE id = (SELECT name2oid('/x/y/z'));
  +
  +SELECT oid2name(1);
  +SELECT oid2name(4);
  +SELECT oid2name(8);
  +SELECT *,oid2name(id) from foo;
  +
  +BEGIN TRANSACTION;
  +SELECT * FROM foo WHERE id = name2oid('/x/y/z');
  +SELECT * FROM foo WHERE id = name2oid('/x/y/z');
  +COMMIT;
  +
  +DROP FUNCTION fuck(TEXT);
  +CREATE FUNCTION fuck(TEXT) 
  +RETURNS TEXT LANGUAGE 'plpgsql' STABLE AS '
  +DECLARE
  +    foo RECORD;
  +BEGIN
  +    RAISE NOTICE ''fuck'';
  +    SELECT * INTO foo FROM foo;
  +    RETURN foo.name;
  +END;
  +';
  +
  +BEGIN TRANSACTION;
  +SELECT * FROM foo WHERE fuck('foo') != 'fuck';
  +SELECT * FROM foo WHERE fuck('foo') != 'fuck';
  +SELECT * FROM foo WHERE fuck('foo') != 'fuck';
  +COMMIT;
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-db/bres/bres-nonoverlap.sql
  ============================================================================
  $ cvs diff -u -r0 -r1.1 bres-nonoverlap.sql
  --- /dev/null	2003-05-29 12:11:16.000000000 +0200
  +++ bres-nonoverlap.sql	2003-05-29 12:11:17.000000000 +0200
  @@ -0,0 +1,128 @@
  +
  +DROP TABLE ht;
  +CREATE TABLE ht (
  +    ht_hid    INTEGER,
  +    ht_oid    INTEGER,
  +    ht_vb     INTEGER,
  +    ht_ve     INTEGER
  +);
  +
  +DROP TABLE htno;
  +CREATE TABLE htno (
  +    ht_hid    INTEGER,
  +    ht_oid    INTEGER,
  +    ht_vb     INTEGER,
  +    ht_ve     INTEGER
  +);
  +
  +--  Update htno table for ht change on particular OID
  +DROP FUNCTION ht2htno(INTEGER);
  +CREATE FUNCTION ht2htno(INTEGER) 
  +RETURNS INTEGER LANGUAGE 'plpgsql' STABLE AS '
  +DECLARE
  +    oid INTEGER;
  +    pos_prev INTEGER;
  +    pos_this INTEGER;
  +    pos_next INTEGER;
  +    alt_this INTEGER;
  +    alt_prev INTEGER;
  +BEGIN
  +    oid := $1;
  +
  +    --  delete all old entries corresponding to OID
  +    DELETE FROM htno WHERE ht_oid = oid;
  +
  +    --  initialize iteration variables
  +    pos_prev := -1;
  +    pos_this := -1;
  +    pos_next := NULL;
  +    alt_this := NULL;
  +    alt_prev := NULL;
  +
  +    LOOP
  +        --  determine next position from existing begin/end positions
  +        pos_next := (
  +            SELECT min(v) FROM (
  +                    (SELECT min(ht_vb) FROM ht WHERE ht_vb > pos_this AND ht_oid = oid)
  +              UNION (SELECT min(ht_ve) FROM ht WHERE ht_ve > pos_this AND ht_oid = oid)
  +            ) AS result (v)
  +        );
  +        IF pos_next IS NULL THEN
  +            pos_next := 9999;
  +        END IF;
  +
  +        --  determine current altidude
  +        alt_this := (SELECT max(ht_hid) FROM ht WHERE ht_vb <= pos_this AND pos_this < ht_ve AND ht_oid = oid);
  +        IF alt_this IS NULL THEN
  +            alt_this := -1;
  +        END IF;
  +
  +        -- RAISE NOTICE ''pos_this = %, pos_next = %, alt_this = %'', pos_this, pos_next, alt_this;
  +
  +        IF alt_this = -1 THEN
  +            -- RAISE NOTICE ''hit ground - pruning entry'';
  +        ELSE
  +            IF alt_this = alt_prev THEN
  +                -- RAISE NOTICE ''keeping altitude - consolidating entry'';
  +                UPDATE htno SET ht_ve = pos_next
  +                    WHERE ht_hid = alt_this AND ht_vb = pos_prev AND ht_ve = pos_this AND ht_oid = oid;
  +            ELSE
  +                -- RAISE NOTICE ''changing altitude - new entry'';
  +                INSERT INTO htno (ht_hid, ht_oid, ht_vb, ht_ve)
  +                    VALUES (alt_this, oid, pos_this, pos_next);
  +                pos_prev := pos_this;
  +            END IF;
  +        END IF;
  +
  +        --  stop if maximum is reached
  +        IF pos_next >= 9999 THEN
  +           EXIT;
  +        END IF;
  +
  +        --  move one step
  +        pos_this := pos_next;
  +        alt_prev := alt_this;
  +    END LOOP;
  +    RETURN 0;
  +END;
  +';
  +
  +--  Trigger Stub Function
  +DROP FUNCTION ht_trigger();
  +CREATE FUNCTION ht_trigger() 
  +RETURNS TRIGGER LANGUAGE 'plpgsql' STABLE AS '
  +BEGIN
  +    IF TG_OP = ''INSERT'' OR TG_OP = ''UPDATE'' THEN
  +        PERFORM ht2htno(NEW.ht_oid);
  +    ELSE
  +        IF TG_OP = ''DELETE'' THEN
  +            PERFORM ht2htno(OLD.ht_oid);
  +        END IF;
  +    END IF;
  +    RETURN NULL;
  +END;
  +';
  +
  +--  Global Trigger
  +CREATE TRIGGER ht_trigger
  +    AFTER INSERT OR UPDATE OR DELETE
  +    ON ht FOR EACH ROW
  +    EXECUTE PROCEDURE ht_trigger ();
  +
  +INSERT INTO ht VALUES (1, 1, 2, 4);
  +INSERT INTO ht VALUES (2, 1, 3, 6);
  +INSERT INTO ht VALUES (3, 1, 8, 9);
  +INSERT INTO ht VALUES (4, 1, 5, 6);
  +INSERT INTO ht VALUES (5, 1, 3, 5);
  +INSERT INTO ht VALUES (6, 1, 7, 8);
  +INSERT INTO ht VALUES (7, 1, 7, 9);
  +
  +INSERT INTO ht VALUES (30, 2, 10, 14);
  +INSERT INTO ht VALUES (31, 2, 12, 17);
  +INSERT INTO ht VALUES (32, 2, 13, 15);
  +INSERT INTO ht VALUES (33, 2, 16, 19);
  +INSERT INTO ht VALUES (34, 2, 20, 22);
  +
  +SELECT * FROM ht ORDER BY ht_hid;
  +SELECT * FROM htno ORDER BY ht_hid;
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-db/bres/bres-rule.sql
  ============================================================================
  $ cvs diff -u -r0 -r1.1 bres-rule.sql
  --- /dev/null	2003-05-29 12:11:16.000000000 +0200
  +++ bres-rule.sql	2003-05-29 12:11:17.000000000 +0200
  @@ -0,0 +1,56 @@
  +
  +-- Create Database Schema
  +DROP TABLE ac CASCADE;
  +CREATE TABLE ac(
  +    ac_oid    INTEGER DEFAULT 100,
  +    ac_name   TEXT,
  +    ac_hid    INTEGER
  +);
  +
  +DROP TABLE fo CASCADE;
  +CREATE TABLE fo(
  +    ac_oid    INTEGER DEFAULT 100,
  +    ac_name   TEXT,
  +    ac_hid    INTEGER
  +);
  +
  +-- DROP RULE "_RETURN";
  +-- CREATE OR REPLACE RULE "_RETURN" AS
  +--     ON SELECT TO fo
  +--     DO INSTEAD
  +--         -- SELECT * FROM ac WHERE ac_hid = 1;
  +--         -- SELECT ac_oid,ac_name,max(ac_hid) AS ac_hid FROM ac GROUP BY ac_oid,ac_name;
  +--         ( SELECT ac.ac_oid,ac.ac_name,ac.ac_hid FROM ac, ( SELECT ac_oid,max(ac_hid) AS ac_hid
  +--            FROM ac GROUP BY ac_oid) AS result WHERE ac.ac_oid = result.ac_oid AND
  +--           ac.ac_hid = result.ac_hid );
  +
  +CREATE OR REPLACE RULE "fuck" AS
  +    ON INSERT TO fo
  +    DO INSTEAD
  +        ( INSERT INTO ac VALUES (NEW.ac_oid, NEW.ac_name, NEW.ac_hid); );
  +
  +CREATE OR REPLACE FUNCTION fo_func (INTEGER)
  +RETURNS SETOF fo LANGUAGE 'sql' AS '
  +    SELECT * FROM ac WHERE ac_hid = $1;
  +';
  +
  +INSERT INTO ac VALUES (10, 'foo1', 1);
  +INSERT INTO ac VALUES (10, 'foo2', 2);
  +INSERT INTO ac VALUES (10, 'foo3', 3);
  +INSERT INTO ac VALUES (20, 'bar4', 1);
  +INSERT INTO ac VALUES (20, 'bar5', 2);
  +INSERT INTO ac VALUES (20, 'bar6', 3);
  +
  +SELECT * FROM ac;
  +SELECT * FROM fo;
  +SELECT * FROM ac WHERE ac_oid = 10;
  +SELECT * FROM fo WHERE ac_oid = 10;
  +
  +SELECT ac_name FROM (SELECT * FROM ac WHERE ac_hid = 1) AS foo WHERE ac_oid = 10;
  +SELECT ac_name FROM fo WHERE ac_oid = 10;
  +SELECT ac_name FROM fo_func(1) AS foo WHERE ac_oid = 10;
  +
  +INSERT INTO fo (ac_name, ac_hid) VALUES ('quux1', 4);
  +
  +-- Problem: fo requires same defaults for columns than ac!
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-db/bres/bres-varval.sql
  ============================================================================
  $ cvs diff -u -r0 -r1.1 bres-varval.sql
  --- /dev/null	2003-05-29 12:11:16.000000000 +0200
  +++ bres-varval.sql	2003-05-29 12:11:17.000000000 +0200
  @@ -0,0 +1,11 @@
  +
  +create table as_cfg (hid INTEGER DEFAULT 1, var TEXT UNIQUE, val TEXT);
  +create table as_cfg_tmp (hid INTEGER DEFAULT 2, var TEXT UNIQUE, val TEXT) inherits (as_cfg);
  +
  +# select single variable
  +select var,val from as_cfg where var = 'foo' order by hid desc limit 1;
  +
  +# select all variables
  +select as_cfg.var,as_cfg.val from as_cfg, ( select var,max(hid) as hid
  +from as_cfg group by var ) as foo where foo.var = as_cfg.var and foo.hid = as_cfg.hid;
  +
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 29 13:03:09 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EB0C976D03; Thu, 29 May 2003 13:03:08 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sdb/ .cvsignore Makefile sdb.cgi sdb.css sdb.html...
Message-Id: <20030529110308.EB0C976D03@mail.ossp.org>
Date: Thu, 29 May 2003 13:03:08 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-May-2003 13:03:08
  Branch: HEAD                             Handle: 2003052912030401

  Added files:
    ossp-pkg/sdb            .cvsignore Makefile sdb.cgi sdb.css sdb.html
                            sdb.sql sdb.txt

  Log:
    add work-in-progress source of OSSP sdb (skill database WebUI) to CVS

  Summary:
    Revision    Changes     Path
    1.1         +1  -0      ossp-pkg/sdb/.cvsignore
    1.1         +8  -0      ossp-pkg/sdb/Makefile
    1.1         +961 -0     ossp-pkg/sdb/sdb.cgi
    1.1         +101 -0     ossp-pkg/sdb/sdb.css
    1.1         +8  -0      ossp-pkg/sdb/sdb.html
    1.1         +150 -0     ossp-pkg/sdb/sdb.sql
    1.1         +42 -0      ossp-pkg/sdb/sdb.txt
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sdb/.cvsignore
  ============================================================================
  $ cvs diff -u -r0 -r1.1 .cvsignore
  --- /dev/null	2003-05-29 13:03:05.000000000 +0200
  +++ .cvsignore	2003-05-29 13:03:06.000000000 +0200
  @@ -0,0 +1 @@
  +sdb.db
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sdb/Makefile
  ============================================================================
  $ cvs diff -u -r0 -r1.1 Makefile
  --- /dev/null	2003-05-29 13:03:05.000000000 +0200
  +++ Makefile	2003-05-29 13:03:06.000000000 +0200
  @@ -0,0 +1,8 @@
  +
  +sdb.db: sdb.sql
  +	sqlite sdb.db <sdb.sql
  +	sqlite sdb.db .dump
  +
  +clean:
  +	rm -f sdb.db
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sdb/sdb.cgi
  ============================================================================
  $ cvs diff -u -r0 -r1.1 sdb.cgi
  --- /dev/null	2003-05-29 13:03:06.000000000 +0200
  +++ sdb.cgi	2003-05-29 13:03:06.000000000 +0200
  @@ -0,0 +1,961 @@
  +#!/usr/opkg/bin/perl
  +##
  +##  OSSP sdb -- Skill Database
  +##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +##
  +##  This file is part of OSSP sdb, a small skill database Web UI
  +##  which can be found at http://www.ossp.org/pkg/tool/sdb/
  +##
  +##  This program is free software; you can redistribute it and/or
  +##  modify it under the terms of the GNU General Public License
  +##  as published by the Free Software Foundation; either version
  +##  2.0 of the License, or (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this program; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +##  USA, or contact The OSSP Project <ossp@ossp.org>.
  +##
  +##  sdb.cgi: skill database CGI (language: Perl)
  +##
  +
  +#   requirements
  +require 5.006;
  +use POSIX;
  +use IO;
  +use CGI qw(:standard -nosticky -no_undef_params -oldstyle_urls -no_debug);
  +use DBI;
  +use DBD::SQLite;
  +use String::Divert;
  +use Data::Dumper;
  +
  +#   program configuration
  +my $my = {
  +    PROG_NAME => 'sdb',
  +    PROG_VERS => '0.0.1',
  +    PROG_DATE => '09-May-2003',
  +    PROG_DESC => 'Skill Database',
  +    TEMPLATE  => "<html>\n<head>\n\@HEAD\@\n</head>\n<body>\n\@BODY\@\n</body></html>"
  +};
  +
  +#   switch to unbuffered output
  +$|++;
  +
  +##  _________________________________________________________________________ 
  +##
  +##  Helper Functions
  +##  _________________________________________________________________________ 
  +##
  +
  +#   (un)escape URL chars
  +sub url_escape {
  +    my ($text) = @_;
  +    $text =~ s|([ \t&+?:/=\n\r])|sprintf("%%%02x", ord($1))|sge;
  +    return $text;
  +}
  +sub url_unescape {
  +    my ($text) = @_;
  +    $text =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('C', hex($1))/eg;
  +    return $text;
  +}
  +
  +#   (un)escape SQL chars
  +sub sql_escape {
  +    my ($text) = @_;
  +    $text =~ s|(.)|POSIX::isprint($1) ? $1 : "."|sge;
  +    $text =~ s|([''])|$1$1|sg;
  +    $text = "'" . $text . "'";
  +    return $text;
  +}
  +sub sql_unescape {
  +    my ($text) = @_;
  +    if ($text =~ m|^'(.*)'$|) {
  +        $text = $1;
  +        $text =~ s/''/'/sg;
  +    }
  +    return $text;
  +}
  +
  +##  _________________________________________________________________________ 
  +##
  +##  Initialize Environment
  +##  _________________________________________________________________________ 
  +##
  +
  +#   remove and remember GET query strings
  +my $qs = '';
  +if ($ENV{QUERY_STRING} ne '') {
  +    $qs = $ENV{QUERY_STRING};
  +    delete $ENV{QUERY_STRING};
  +}
  +
  +#   open CGI environment
  +my $cgi = new CGI;
  +$cgi->autoEscape(undef);
  +
  +#   re-insert GET query strings into CGI environment
  +if ($qs ne '') {
  +    foreach my $kv (split(/\&/, $qs)) {
  +        if ($kv =~ m|^([^=]+)(?:=([^=]+))?$|s) {
  +            my ($key, $val) = ($1, $2);
  +            $val ||= 1;
  +            $key = &url_unescape($key);
  +            $val = &url_unescape($val);
  +            $cgi->param($key, $val);
  +        }
  +    }
  +}
  +
  +#   remember self-referencing URL
  +$my->{URL} = $cgi->url(-full => 1);
  +
  +#   generate an HTTP response
  +sub http_response {
  +    my ($head, $body) = @_;
  +
  +    #   fill in template page
  +    my $response = $my->{TEMPLATE};
  +    if ($response =~ m|\n([^\n]*)\@HEAD\@|s) {
  +        my $prefix = " " x length($1);
  +        $head =~ s|\n(.)|\n$prefix$1|sg;
  +    }
  +    if ($response =~ m|\@HEAD\@[ \t]*\n|s) {
  +        $head =~ s|\n$||s;
  +    }
  +    $response =~ s|\@HEAD\@|$head|sg;
  +    if ($response =~ m|\n([^\n]*)\@BODY\@|s) {
  +        my $prefix = " " x length($1);
  +        $body =~ s|\n(.)|\n$prefix$1|sg;
  +    }
  +    if ($response =~ m|\@BODY\@[ \t]*\n|s) {
  +        $body =~ s|\n$||s;
  +    }
  +    $response =~ s|\@BODY\@|$body|sg;
  +
  +    #   prepend with HTTP header
  +    $response = $cgi->header(
  +        -type             => 'text/html',
  +        -expires          => 'now',
  +        '-Content-length' => length($response)
  +    ) . $response;
  +
  +    return $response;
  +}
  +
  +#   start output generation
  +my $head = '';
  +my $body = '';
  +
  +#   optionally read HTML page template
  +if (-f "sdb.html") {
  +    my $io = new IO::File "<sdb.html" || die;
  +    $my->{TEMPLATE} = ''; 
  +    $my->{TEMPLATE} .= $_ while (<$io>);
  +    $io->close();
  +}
  +
  +#   optionally activate CSS
  +if (-f "sdb.css") {
  +    $head .= "<link rel=\"stylesheet\" href=\"sdb.css\" type=\"text/css\"/>";
  +}
  +
  +#   activate a general error handler
  +$SIG{__DIE__} = sub {
  +    my ($err) = @_;
  +
  +    $err =~ s|at\s+\S+\s+line\s+(\d+)|(sdb.cgi:$1)|s;
  +    $err =~ s|\n|<br>\n|sg;
  +    $err =~ s|\n+$||s;
  +    $head .= "<title>".$my->{PROG_NAME}.": ERROR</title>";
  +    $body .= "<h2>ERROR</h1>" .
  +             "The following error occured:<p>" .
  +             "<pre class=error>$err</pre>\n";
  +    #   debugging
  +    $body .= "<pre>";
  +    my @names = $cgi->param;
  +    foreach my $name (@names) {
  +        my $value = $cgi->param($name);
  +        $body .= "$name=\"$value\"\n";
  +    }
  +    $body .= "</pre>";
  +    print STDOUT &http_response($head, $body);
  +    exit(0);
  +};
  +
  +#   open DB environment
  +my $db;
  +($db = DBI->connect("dbi:SQLite:dbname=sdb.db", "", ""))
  +    || die "unable to SQLite database sdb.db";
  +$db->{AutoCommit} = 1;
  +$db->{RaiseError} = 1;
  +
  +##  _________________________________________________________________________ 
  +##
  +##  Stage 0: Determine Parameters
  +##  _________________________________________________________________________ 
  +##
  +
  +#   list of UI display pages
  +my @ui_pages = qw(main person);
  +
  +#   initialize UI display parameters
  +my $ui = {};
  +foreach my $page (@ui_pages) {
  +    my $found = 0;
  +    foreach my $sub (
  +        "ui_${page}_init",
  +        "ui_init"
  +    ) {
  +        if (defined(&$sub)) {
  +            &$sub($my, $cgi, $db, $ui, $page);
  +            $found = 1;
  +            last;
  +        }
  +    }
  +    die "no initialization handler found for page \"$page\""
  +        if (not $found);
  +}
  +
  +#   determine UI display parameters
  +my @names = $cgi->param;
  +foreach my $name (@names) {
  +    if ($name =~ m|^([^.]+)(?:\.([^.]+)(?:\.([^.]+))?)?$|s) {
  +        my ($page, $area, $elem) = ($1, $2, $3);
  +        if (defined($page)) {
  +            $ui->{$page} = { -is => 'disable', -with => 'default' }
  +                if (not defined($ui->{$page}));
  +        }
  +        if (defined($area)) {
  +            $ui->{$page}->{$area} = { -is => 'disable', -with => 'default' }
  +                if (not defined($ui->{$page}->{$area}));
  +        }
  +        if (defined($elem)) {
  +            if ($name =~ m|\+$|s) {
  +                my @values = $cgi->param($name);
  +                $ui->{$page}->{$area}->{$elem} = [ @values ];
  +            }
  +            else {
  +                my $value = $cgi->param($name);
  +                $ui->{$page}->{$area}->{$elem} = $value;
  +            }
  +        }
  +        elsif (defined($area)) {
  +            my $value = $cgi->param($name);
  +            $value = "visible" if ($value eq "1");
  +            $ui->{$page}->{$area}->{-is} = $value;
  +        }
  +        elsif (defined($page)) {
  +            my $value = $cgi->param($name);
  +            $value = "visible" if ($value eq "1");
  +            $ui->{$page}->{-is} = $value;
  +        }
  +        $cgi->param($name, undef);
  +    }
  +}
  +
  +##  _________________________________________________________________________ 
  +##
  +##  Stage 1: Process Last Action
  +##  _________________________________________________________________________ 
  +##
  +
  +#   FIXME
  +#   determine default UI display
  +my $page = undef;
  +foreach my $p (keys(%{$ui})) {
  +    if ($ui->{$p}->{-is} eq 'visible') {
  +        $page = $p;
  +        last;
  +    }
  +}
  +if (not defined($page)) {
  +    $ui->{main}->{-is} = 'visible';
  +    $ui->{main}->{all}->{-is} = 'visible';
  +}
  +
  +#   determine which button was pressed and
  +#   perform an associated action (if defined)
  +foreach my $page (keys(%{$ui})) {
  +    foreach my $area (keys(%{$ui->{$page}})) {
  +        foreach my $elem (keys(%{$ui->{$page}->{$area}})) {
  +            if ($elem =~ m|^[A-Z][A-Z0-9_-]*$|) {
  +                if ($ui->{$page}->{$area}->{$elem}) {
  +                    my $found = 0;
  +                    foreach my $sub (
  +                        "ui_${page}_${area}_${elem}_action",
  +                        "ui_${page}_${area}_action",
  +                        "ui_${page}_action",
  +                        "ui_action"
  +                    ) {
  +                        if (defined(&$sub)) {
  +                            &$sub($my, $cgi, $db, $ui, $page, $area, $elem);
  +                            $found = 1;
  +                            last;
  +                        }
  +                    }
  +                    die "no action handler found for element \"$page.$area.$elem\""
  +                        if (not $found);
  +                }
  +                delete $ui->{$page}->{$area}->{$elem};
  +            }
  +        }
  +    }
  +}
  +
  +##  _________________________________________________________________________ 
  +##
  +##  Stage 2: Output New Display
  +##  _________________________________________________________________________ 
  +##
  +
  +#   start output generation
  +my $html = new String::Divert;
  +$html->overload(1);
  +
  +#   generate outmost class
  +$html .= "<!-- SDB BEGIN -->\n";
  +$html .= "<div class=\"sdb\">\n";
  +$html .= "  "; $html *= q{outmost};
  +$html .= "</div>\n";
  +$html .= "<!-- SDB END -->\n";
  +$html >> q{outmost};
  +
  +#   generate outmost self-referencing form
  +$html .= $cgi->startform(
  +    -method => "POST",
  +    -action => $my->{URL},
  +);
  +$html .= "  "; $html *= q{form};
  +$html .= $cgi->endform() . "\n";
  +$html >> q{form};
  +
  +#   generate top-level header & footer
  +$html .= "<h1>Skill Database</h1>\n";
  +$html .= ""; $html *= q{page};
  +$html .= "<p/>\n" .
  +         "<span class=\"footer\">\n" .
  +         "  $my->{PROG_NAME} $my->{PROG_VERS} ($my->{PROG_DATE})\n" .
  +         "</span>\n";
  +$html >> q{page};
  +
  +#   generate page contents
  +foreach my $page (sort(keys(%{$ui}))) {
  +    if ($ui->{$page}->{-is} =~ m/^(visible|hidden)$/) {
  +        my $found = 0;
  +        foreach my $sub (
  +            "ui_${page}_render",
  +            "ui_render"
  +        ) {
  +            if (defined(&$sub)) {
  +                $html .= &$sub($my, $cgi, $db, $ui, $page);
  +                $found = 1;
  +                last;
  +            }
  +        }
  +        die "no rendering handler found for page \"$page\""
  +            if (not $found);
  +    }
  +}
  +
  +#   insert html into output HTTP response body
  +$html->undivert(0);
  +$body .= $html->string();
  +
  +#   optional debugging
  +$body .= "<pre>\n";
  +my @names = $cgi->param;
  +foreach my $name (@names) {
  +    my $value = $cgi->param($name);
  +    $body .= "  $name=\"$value\"\n";
  +}
  +$body .= "</pre>\n";
  +
  +#   generate output
  +print STDOUT &http_response($head, $body);
  +
  +exit(0);
  +
  +##  _________________________________________________________________________ 
  +##
  +##  Page: main
  +##  _________________________________________________________________________ 
  +##
  +
  +sub ui_main_init {
  +    my ($my, $cgi, $db, $ui, $page) = @_;
  +
  +    $ui->{main}        = { -is => 'disable' };
  +    $ui->{main}->{all} = { -is => 'disable' };
  +}
  +
  +sub ui_main_action {
  +    my ($my, $cgi, $db, $ui, $page, $area, $elem) = @_;
  +
  +    die "invalid action \"$page.$area.$elem\"";
  +}
  +
  +sub ui_main_render {
  +    my ($my, $cgi, $db, $ui, $page) = @_;
  +
  +    #   start generating HTML
  +    my $html = new String::Divert;
  +    $html->overload(1);
  +
  +    #   generate outer class
  +    $html .= "<span class=\"main\">\n";
  +    $html .= "  "; $html *= q{body};
  +    $html .= "</span>\n";
  +    $html >> q{body};
  +
  +    #   generate header
  +    $html .= "<h2>Main Menu</h2>\n";
  +
  +    #   generate main menu
  +    $html .=
  +        "<ul>\n" .
  +        "  <li><a href=\"$my->{URL}?person\">Browse Persons</a> &rarr;\n" .
  +        "  <li><a href=\"$my->{URL}?team\">Browse Teams</a> &rarr;\n" .
  +        "  <li><a href=\"$my->{URL}?skill\">Browse Skills</a> &rarr;\n" .
  +        "  <li><a href=\"$my->{URL}?query\">Perform Skill Query</a> &rarr;\n" .
  +        "</ul>\n";
  +
  +    #   return unfolded HTML
  +    $html->undivert(0);
  +    return $html->string();
  +}
  +
  +##  _________________________________________________________________________ 
  +##
  +##  Page: person
  +##  _________________________________________________________________________ 
  +##
  +
  +sub ui_person_init {
  +    my ($my, $cgi, $db, $ui, $page) = @_;
  +
  +    $ui->{person}           = { -is => 'disable' };
  +    $ui->{person}->{select} = { -is => 'disable' };
  +    $ui->{person}->{detail} = { -is => 'disable' };
  +    $ui->{person}->{skill}  = { -is => 'disable' };
  +}
  +
  +sub ui_person_action {
  +    my ($my, $cgi, $db, $ui, $page, $area, $elem) = @_;
  +
  +    #   actions on select box
  +    if ($ui->{person}->{select}->{ADD}) {
  +        #   just open detail area for addition
  +        $ui->{person}->{detail}->{id} = undef;
  +        $ui->{person}->{detail}->{-is}   = 'visible';
  +        $ui->{person}->{detail}->{-with} = 'add';
  +    }
  +    elsif ($ui->{person}->{select}->{VIEW}) {
  +        #   just open detail area for viewing
  +        $ui->{person}->{detail}->{-is}   = 'visible';
  +        $ui->{person}->{detail}->{-with} = 'view';
  +    }
  +    elsif ($ui->{person}->{select}->{EDIT}) {
  +        #   just open detail area for editing
  +        $ui->{person}->{detail}->{-is}   = 'visible';
  +        $ui->{person}->{detail}->{-with} = 'edit';
  +    }
  +    elsif ($ui->{person}->{select}->{DELETE}) {
  +        #   delete person from database
  +        my $pe_id = $ui->{person}->{select}->{id};
  +        if ($pe_id eq '') {
  +            die "no person selected";
  +        }
  +        my @rv = $db->selectrow_array("SELECT pe_id FROM sdb_person WHERE pe_id = '$pe_id';");
  +        if (@rv == 0) {
  +            die "invalid person \"$pe_id\" selected";
  +        }
  +        $db->do(sprintf(
  +            "DELETE FROM sdb_person WHERE pe_id = %s;",
  +            &sql_escape($pe_id)
  +        ));
  +        $ui->{person}->{select}->{id} = '';
  +        $ui->{person}->{detail}->{-is} = 'remove';
  +        $ui->{person}->{skills}->{-is} = 'remove';
  +    }
  +
  +    #   actions on detail box
  +    if ($ui->{person}->{detail}->{'SKILL-VIEW'}) {
  +        #   just open skill area for viewing
  +        $ui->{person}->{skill}->{-is}   = 'visible';
  +        $ui->{person}->{skill}->{-with} = 'view';
  +    }
  +    elsif ($ui->{person}->{detail}->{'SKILL-EDIT'}) {
  +        #   just open skill area for editing
  +        $ui->{person}->{skill}->{-is}   = 'visible';
  +        $ui->{person}->{skill}->{-with} = 'edit';
  +    }
  +    elsif (   $ui->{person}->{detail}->{CLOSE}
  +           or $ui->{person}->{detail}->{CANCEL}) {
  +        #   just close detail area
  +        $ui->{person}->{detail}->{-is} = 'remove';
  +    }
  +    elsif ($ui->{person}->{detail}->{SAVE}) {
  +        #   save person details to database
  +        my $pe = {};
  +        $pe->{id} = $ui->{person}->{select}->{id};
  +        foreach my $a (qw(name email phone)) {
  +            $pe->{$a} = $ui->{person}->{detail}->{$a};
  +        }
  +        my $te_ids = $ui->{person}->{detail}->{"membership+"};
  +        if ($pe->{id} eq '') {
  +            #   add new entry
  +            my @rv = $db->selectrow_array(sprintf(
  +                "SELECT pe_id FROM sdb_person WHERE pe_name = %s;",
  +                &sql_escape($pe->{name})
  +            ));
  +            if (@rv > 0) {
  +               die "person \"$pe->{name}\" already existing -- delete first, please";
  +            }
  +            $db->do(sprintf(
  +                "INSERT INTO sdb_person (pe_name, pe_email, pe_phone) VALUES (%s, %s, %s);",
  +                &sql_escape($pe->{name}),
  +                &sql_escape($pe->{email}),
  +                &sql_escape($pe->{phone})
  +            ));
  +            foreach my $te_id (@{$te_ids}) {
  +                $db->do(sprintf(
  +                    "INSERT INTO sdb_member (ms_pe_id, ms_te_id) VALUES (%s, %s);",
  +                    &sql_escape($pe->{id}), &sql_escape($te_id)
  +                ));
  +            }
  +        }
  +        else {
  +            #   modify existing entry
  +            my @rv = $db->selectrow_array(sprintf(
  +                "SELECT pe_id FROM sdb_person WHERE pe_id = %s;",
  +                &sql_escape($pe->{id})
  +            ));
  +            if (@rv == 0) {
  +               die "person with id \"$pe->{id}\" not exists";
  +            }
  +            $db->do(sprintf(
  +                "UPDATE sdb_person" .
  +                "  SET pe_name = %s, pe_email = %s, pe_phone = %s" .
  +                "  WHERE pe_id = %s;",
  +                &sql_escape($pe->{name}),
  +                &sql_escape($pe->{email}),
  +                &sql_escape($pe->{phone}),
  +                &sql_escape($pe->{id})
  +            ));
  +            $db->do(sprintf(
  +                "DELETE FROM sdb_member WHERE ms_pe_id = %s;",
  +                &sql_escape($pe->{id})
  +            ));
  +            foreach my $te_id (@{$te_ids}) {
  +                $db->do(sprintf(
  +                    "INSERT INTO sdb_member (ms_pe_id, ms_te_id) " .
  +                    "  VALUES (%s, %s);",
  +                    &sql_escape($pe->{id}),
  +                    &sql_escape($te_id)
  +                ));
  +            }
  +        }
  +    }
  +}
  +
  +sub ui_person_render {
  +    my ($my, $cgi, $db, $ui, $page) = @_;
  +
  +    #   start output generation
  +    my $html = new String::Divert;
  +    $html->overload(1); 
  +
  +    if ($ui->{person}->{-is} eq 'visible') {
  +        #   generate outer page CSS class
  +        $html .= "<span class=\"person\">\n";
  +        $html .= "  "; $html *= q{person};
  +        $html .= "</span>\n";
  +        $html >> q{person};
  +
  +        #   generate header
  +        $html .= "<h2>Persons</h2>\n";
  +        $html .= "<a href=\"$my->{URL}\">&larr; Back to Main Menu</a>";
  +
  +        #   generate page canvas
  +        #   +-------+-------+
  +        #   | area1 | area2 |
  +        #   +-------+-------+
  +        #   |     area3     |
  +        #   +---------------+
  +        $html .= "<p>\n";
  +        $html .= "<table width=100%>\n";
  +        $html .= "  <tr>\n";
  +        $html .= "    <td valign=top class=\"box\" width=\"50%\">\n";
  +        $html .= "      "; $html *= q{area1};
  +        $html .= "    </td>\n";
  +        $html .= "    <td>\n";
  +        $html .= "      &nbsp;&nbsp;\n";
  +        $html .= "    </td>\n";
  +        $html .= "    <td valign=top class=\"box\" width=\"50%\">\n";
  +        $html .= "      "; $html *= q{area2};
  +        $html .= "    </td>\n";
  +        $html .= "  </tr>\n";
  +        $html .= "  <tr>\n";
  +        $html .= "    <td colspan=3>\n";
  +        $html .= "      &nbsp;\n";
  +        $html .= "    </td>\n";
  +        $html .= "  </tr>\n";
  +        $html .= "  <tr>\n";
  +        $html .= "    <td colspan=3 valign=top class=\"box\" width=\"100%\">\n";
  +        $html .= "      "; $html *= q{area3};
  +        $html .= "    </td>\n";
  +        $html .= "  </tr>\n";
  +        $html .= "</table>\n";
  +    }
  +    else {
  +        $html *= q{area1};
  +        $html *= q{area2};
  +        $html *= q{area3};
  +    }
  +
  +    ##
  +    ##  generate area: Person Selection
  +    ##
  +    if ($ui->{person}->{-is} eq 'visible') {
  +        #   force selection box to be always visible
  +        #   if whole area is visible
  +        $ui->{person}->{select}->{-is} = 'visible';
  +    }
  +    #$html->storage($ui->{person}->{select}->{-is} eq 'visible' ? 1 : 0);
  +    if ($ui->{person}->{select}->{-is} eq 'visible') {
  +        #   generate CSS class
  +        $html >> q{area1};
  +        $html .= "<span class=\"select\">\n";
  +        $html .= "  "; $html *= q{select};
  +        $html .= "</span>\n";
  +        $html >> q{select};
  +
  +        #   generate inner header
  +        $html .= "<h3>Select Person and Action</h3>\n";
  +
  +        #   generate inner canvas
  +        $html .= "<table width=100%>\n";
  +        $html .= "  <tr>\n";
  +        $html .= "    <td width=100%>\n";
  +        $html .= "      "; $html *= q{select-list};
  +        $html .= "    </td>\n";
  +        $html .= "    <td valign=top height=100%>\n";
  +        $html .= "      "; $html *= q{select-buttons};
  +        $html .= "    </td>\n";
  +        $html .= "  </tr>\n";
  +        $html .= "</table>\n";
  +
  +        #   generate the selection list widget
  +        $html >> q{select-list};
  +        my $rv = $db->selectall_arrayref(
  +            "SELECT pe_id,pe_name FROM sdb_person ORDER BY pe_name;"
  +        );
  +        my $pe_values = [];
  +        my $pe_labels = {};
  +        foreach my $r (@{$rv}) {
  +            push(@{$pe_values}, $r->[0]);
  +            $pe_labels->{$r->[0]} = $r->[1];
  +        }
  +        my $pe_default = $ui->{person}->{select}->{id} || $pe_values->[0];
  +        if (@{$pe_values} > 0) {
  +            $html .= $cgi->scrolling_list(
  +                -override  => 1,
  +                -name      => 'person.select.id',
  +                -values    => $pe_values,
  +                -labels    => $pe_labels,
  +                -default   => $pe_default,
  +                -size      => 20,
  +                -class     => 'id',
  +            ) . "\n";
  +        }
  +        $html << q{select-list};
  +
  +        #   generate the selection list attached buttons
  +        $html >> "select-buttons";
  +        $html .= $cgi->submit(
  +            -name  => 'person.select.ADD', 
  +            -value => 'Add Person &rarr;',
  +            -class => 'ADD'
  +        ) . "<br>";
  +        if (@{$pe_values} > 0) {
  +            $html .= $cgi->submit(
  +                -name  => 'person.select.VIEW',
  +                -value => 'View Person &rarr;',
  +                -class => 'VIEW'
  +            ) . "<br/>";
  +            $html .= $cgi->submit(
  +                -name  => 'person.select.EDIT',
  +                -value => "Edit Person &rarr;",
  +                -class => "EDIT"
  +            ) . "<br/>";
  +            $html .= $cgi->submit(
  +                -name  => 'person.select.DELETE',
  +                -value => '&larr; Delete Person',
  +                -class => 'DELETE'
  +            ) . "<br/>";
  +        }
  +        $html << q{select-buttons};
  +
  +        $html << q{area1};
  +    }
  +    else {
  +        $html >> q{area1};
  +        $html << q{area1};
  +    }
  +
  +    #   generate area: BEGIN PERSON DETAIL BOX
  +    if ($ui->{person}->{detail}->{-is} eq 'visible') {
  +        $html .= "<span class=\"detail\">";
  +        #   determine content variant
  +        my $action = $ui->{person}->{detail}->{-with};
  +        $html .= "<h3>".uc(substr($action,0,1)).substr($action,1)." Person</h3>";
  +        $html .= "<span class=\"$action\">";
  +
  +        #   fetch person details
  +        my $pe = undef;
  +        if ($action eq 'view' or $action eq 'edit') {
  +            my $id = $ui->{person}->{select}->{id};
  +            if ($id eq '') {
  +                die "no person selected";
  +            }
  +            $pe = $db->selectrow_hashref(sprintf(
  +                "SELECT pe_id AS id, pe_name AS name, pe_email AS email, pe_phone AS phone" .
  +                "  FROM sdb_person WHERE pe_id = %s;",
  +                &sql_escape($id)
  +            ));
  +            if (not defined($pe)) {
  +                die "person with id \"$id\" not found";
  +            }
  +        }
  +        else {
  +            $pe = { id => '', name => '', email => '', phone => '' };
  +        }
  +
  +        #   display person details
  +        $html .= "<table>\n";
  +        my $label = {
  +            'name'  => 'Person Name',
  +            'email' => 'Email Address',
  +            'phone' => 'Phone Number'
  +        };
  +        my $i = 0;
  +        foreach my $a (qw(name email phone)) {
  +            $html .= "  <tr class=\"row-$i\">\n";
  +            $html .= "    <td class=\"label\">\n";
  +            $html .= "      ".$label->{$a}.":";
  +            $html .= "    </td>\n";
  +            $html .= "    <td class=\"content\">\n";
  +            if ($action eq 'view') {
  +                $html .= $pe->{$a};
  +            }
  +            else {
  +                $html .= $cgi->textfield(
  +                    -override  => 1,
  +                    -name      => "person.detail.$a",
  +                    -default   => $pe->{$a},
  +                    -size      => 40,
  +                    -maxlength => 80
  +                );
  +            }
  +            $html .= "    </td>\n";
  +            $html .= "  </tr>\n";
  +            $i = ($i + 1) % 2;
  +        }
  +        $html .= "  <tr class=\"$row-$i\">\n";
  +        $html .= "    <td valign=top class=\"label\">Team Membership:\n";
  +        $html .= "    </td>\n";
  +        $html .= "    <td class=\"content\">\n";
  +        if ($action eq 'view') {
  +            my $te_all = $db->selectcol_arrayref(sprintf(
  +                "SELECT te_name FROM sdb_team,sdb_member" .
  +                "  WHERE te_id = ms_te_id AND ms_pe_id = %s" .
  +                "  ORDER BY te_name;",
  +                &sql_escape($pe->{id})
  +            ));
  +            if (@{$te_all} == 0) {
  +                $html .= "-none-";
  +            }
  +            else {
  +                for (my $i = 0; $i < @{$te_all}; $i++) {
  +                    my $te_name = $te_all->[$i];
  +                    $html .= ", " if ($i != 0);
  +                    $html .= $te_name;
  +                }
  +            }
  +        }
  +        else {
  +            my $te_values = [];
  +            my $te_labels = {};
  +            my $te_all = $db->selectall_arrayref(
  +                "SELECT te_id, te_name FROM sdb_team ORDER BY te_name;"
  +            );
  +            foreach my $r (@{$te_all}) {
  +                push(@{$te_values}, $r->[0]);
  +                $te_labels->{$r->[0]} = $r->[1];
  +            }
  +            my $te_defaults = [];
  +            if ($action eq 'edit') {
  +                $te_defaults = $db->selectcol_arrayref(sprintf(
  +                    "SELECT ms_te_id FROM sdb_member WHERE ms_pe_id = %s;",
  +                    &sql_escape($pe->{id})
  +                ));
  +            };
  +            if (@{$te_values} == 0) {
  +                $html .= "-none-";
  +            }
  +            else {
  +                $html .= $cgi->scrolling_list(
  +                    -override => 1,
  +                    -name     => 'person.detail.membership+',
  +                    -values   => $te_values,
  +                    -labels   => $te_labels,
  +                    -default  => $te_defaults,
  +                    -multiple => 'true',
  +                    -size     => 10,
  +                    -class    => 'membership',
  +                );
  +            }
  +        }
  +        $html .= "    </td>\n";
  +        $html .= "  </tr>\n";
  +
  +        $html .= "  <tr>\n";
  +        $html .= "    <td></td>\n";
  +        $html .= "    <td>\n";
  +
  +        $html .= "<table width=100%><tr>";
  +        if ($action eq 'view') {
  +            $html .= "<td>" . $cgi->submit(
  +                -name  => 'person.detail.CLOSE',
  +                -value => '&larr; Close',
  +                -class => 'CLOSE'
  +            ) . "</td>";
  +            $html .= "<td>" . $cgi->submit(
  +                -name  => 'person.detail.SKILL-VIEW',
  +                -value => 'View Skills &darr;',
  +                -class => 'SKILL-VIEW'
  +            ) . "</td>";
  +        }
  +        else {
  +            $html .= "<td>" . $cgi->submit(
  +                -name  => 'person.detail.CANCEL',
  +                -value => '&larr; Cancel',
  +                -class => 'CANCEL'
  +            ) . "</td>";
  +            $html .= "<td>" . $cgi->submit(
  +                -name  => 'person.detail.SAVE',
  +                -value => '&uarr; Save',
  +                -class => 'SAVE'
  +            ) . "</td>";
  +            $html .= "<td>" . $cgi->submit(
  +                -name  => 'person.detail.SKILL-EDIT',
  +                -value => 'Edit Skills &darr;',
  +                -class => 'SKILL-EDIT'
  +            ) . "</td>";
  +        }
  +        $html .= "</tr></table>";
  +
  +        $html .= "    </td>";
  +        $html .= "  </tr>";
  +        $html .= "</table>\n";
  +        $html .= "</span>";
  +        $html .= "</span>";
  +    }
  +    #   END PERSON DETAIL BOX
  +
  +    if ($edit eq 'rate' or $do eq 'view-skill') {
  +        if ($edit eq 'rate') {
  +            $html .= "<h3>Edit Skills</h3>";
  +        }
  +        else {
  +            $html .= "<h3>View Skills</h3>";
  +        }
  +
  +        my $pe_id = $cgi->param('person.id');
  +        if ($pe_id eq '') {
  +            die "no person selected";
  +        }
  +        my $rv = $db->selectall_arrayref(
  +            "SELECT sk_id,sk_name" .
  +            "  FROM sdb_skill " .
  +            "  ORDER BY sk_name;"
  +        );
  +        my $deg = $db->selectall_hashref(
  +            "SELECT sk_id,as_degree" .
  +            "  FROM sdb_skill,sdb_provide" .
  +            "  WHERE as_pe_id = '$pe_id' AND as_sk_id = sk_id;",
  +            'sk_id'
  +        );
  +
  +        $html .= "<table cellspacing=0 cellpadding=0>\n";
  +        $html .= "<tr><td valign=top width=50%>";
  +
  +        $html .= "<table cellspacing=0 cellpadding=0>\n";
  +        my $i = 0;
  +        my $n = 0;
  +        my $med = sprintf("%d", ($#{$rv}+1)/2);
  +        $html .= $cgi->hidden(-name => 'rate.pe_id', -default => $pe_id);
  +        foreach my $sk (@{$rv}) {
  +            if ($n == $med) {
  +                $html .= "</table>";
  +                $html .= "</td>";
  +                $html .= "<td>";
  +                $html .= "&nbsp;&nbsp;";
  +                $html .= "</td>";
  +                $html .= "<td valign=top width=50%>";
  +                $html .= "<table cellspacing=0 cellpadding=0>\n";
  +            }
  +            $html .= "<tr class=\"sdb-input-rate-$i\">\n";
  +            $html .= "<td width=100%>\n";
  +            $html .= $sk->[1]."&nbsp;&nbsp;";
  +            $html .= "</td>\n";
  +            $html .= "<td align=right>\n";
  +            my $default = $deg->{$sk->[0]}->{as_degree} || 0;
  +            my $labels = { 0 => 'unknown', 1 => 'beginner', 2 => 'intermediate', 3 => 'advanced', 4 => 'expert' };
  +            if ($do eq 'view-skill') {
  +                $html .= $labels->{$default};
  +            }
  +            else {
  +                $html .= $cgi->scrolling_list(
  +                    -name    => "rate.$sk->[0]",
  +                    -values  => [ 0, 1, 2, 3, 4 ],
  +                    -labels  => $labels,
  +                    -default => $default,
  +                    -size    => 1,
  +                    -class   => "sdb-input-rate-$i",
  +                    -style   => 'width: 100%;',
  +                );
  +            }
  +            $html .= "</td>\n";
  +            $html .= "</tr>\n";
  +            $i = ($i + 1) % 2;
  +            $n++;
  +        }
  +        $html .= "<tr><td colspan=2 align=right>\n";
  +        $html .= "<table><tr>";
  +        if ($do eq 'view-skill') {
  +            $html .= "<td>".$cgi->submit(-name => 'do.close-skill', -value => "Close", -class => "sdb-button-view")."</td>";
  +        }
  +        else {
  +            $html .= "<td>".$cgi->submit(-name => 'rate.save', -value => "Save", -class => "sdb-button-save")."</td>";
  +            $html .= "<td>".$cgi->submit(-name => 'rate.cancel', -value => "Cancel", -class => "sdb-button-cancel")."</td>";
  +        }
  +        $html .= "</tr></table>";
  +        $html .= "</td></tr>\n";
  +        $html .= "</table>\n";
  +
  +        $html .= "</td></tr>\n";
  +        $html .= "</table>\n";
  +
  +    }
  +
  +    $html->undivert(0);
  +    return $html->string();
  +}
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sdb/sdb.css
  ============================================================================
  $ cvs diff -u -r0 -r1.1 sdb.css
  --- /dev/null	2003-05-29 13:03:06.000000000 +0200
  +++ sdb.css	2003-05-29 13:03:07.000000000 +0200
  @@ -0,0 +1,101 @@
  +/*
  +**  OSSP sdb -- Skill Database
  +**  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +**
  +**  This file is part of OSSP sdb, a small skill database Web UI
  +**  which can be found at http://www.ossp.org/pkg/tool/sdb/
  +**
  +**  This program is free software; you can redistribute it and/or
  +**  modify it under the terms of the GNU General Public License
  +**  as published by the Free Software Foundation; either version
  +**  2.0 of the License, or (at your option) any later version.
  +**
  +**  This program is distributed in the hope that it will be useful,
  +**  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +**  General Public License for more details.
  +**
  +**  You should have received a copy of the GNU General Public License
  +**  along with this program; if not, write to the Free Software
  +**  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +**  USA, or contact The OSSP Project <ossp@ossp.org>.
  +**
  +**  sdb.css: skill database style-sheet (language: CSS)
  +*/
  +
  +/* general settings */
  +.sdb                    { background: #ffffff; color: #000000;
  +                          font-family: helvetica,lucida,arial,sans-serif; }
  +
  +/* outmost canvas */
  +DIV.sdb                 { padding: 10px; 
  +                          padding-left: 40px;
  +                          padding-right: 40px;
  +                          border-style: solid;
  +                          border-width: 1;
  +                          border-color: #000000; }
  +
  +/* outmost canvas footer */
  +.sdb .footer            { color: #c0c0c0; }
  +
  +/* general headlines */
  +.sdb H1                 { font-weight: bold; 
  +                          font-size: 220%; 
  +                          font-family: tahoma,helvetica,lucida,arial,sans-serif;
  +                          color: #666699; }
  +.sdb H2                 { font-weight: bold; 
  +                          font-size: 160%;
  +                          font-family: helvetica,lucida,arial,sans-serif; }
  +.sdb H3                 { font-weight: bold; 
  +                          font-size: 120%;
  +                          font-family: helvetica,lucida,arial,sans-serif; }
  +
  +/* anchors */
  +.sdb A                  { text-decoration: none; font-weight: bold; }
  +.sdb A:link             { color: #666699; }
  +.sdb A:visited          { color: #666699; }
  +.sdb A:hover            { color: #666699; text-decoration: underline; }
  +
  +/* error page */
  +.sdb PRE.error          { border-width: 1; border-color: #cc3333; border-style: solid;
  +                          padding: 10px; background: #fff0f0; color: #000000; } 
  +
  +.sdb INPUT              { background: #fafafa; 
  +                          border-color: #999999;
  +                          border-width: 1;
  +                          /* -moz-border-radius: 6px; */ }
  +
  +.sdb SELECT             { background: #fafafa; 
  +                          border-color: #999999;
  +                          border-width: 1; }
  +
  +.sdb TD.box             { border-width: 1; border-color: #dddddd; border-style: dashed;
  +                          padding: 10px; }
  +
  +/* person.select.* */
  +.sdb .person .select SELECT.id    { background: #ffffff; width: 100%; } 
  +.sdb .person .select INPUT.ADD    { background: #f0f8f0; width: 100%; } 
  +.sdb .person .select INPUT.VIEW   { background: #f0f0f0; width: 100%; font-weight: bold; } 
  +.sdb .person .select INPUT.EDIT   { background: #f0f0ff; width: 100%; } 
  +.sdb .person .select INPUT.DELETE { background: #fff0f0; width: 100%; } 
  +
  +/* person.detail.* */
  +.sdb .person .detail SELECT.membership { background: #ffffff; width: 100%; } 
  +.sdb .person .detail INPUT.CLOSE       { background: #f0f0f0; width: 100%; } 
  +.sdb .person .detail INPUT.SKILL-VIEW  { background: #f0f0f0; width: 100%; font-weight: bold; } 
  +.sdb .person .detail INPUT.SAVE        { background: #f0f8f0; width: 100%; font-weight: bold; }
  +.sdb .person .detail INPUT.CANCEL      { background: #f8f0f0; width: 100%; } 
  +.sdb .person .detail INPUT.SKILL-EDIT  { background: #f0f0f0; width: 100%; } 
  +.sdb .person .detail INPUT             { background: #ffffff; }
  +.sdb .person .detail       .label      { background: #f8f8f8; padding: 4px; padding-left: 10px; border: 1px solid #dddddd; -moz-border-radius-topleft: 5px; -moz-border-radius-bottomleft: 5px; }
  +.sdb .person .detail .add  .label      { background: #f0f8f0; border-color: #cceecc; }
  +.sdb .person .detail .edit .label      { background: #f0f0ff; border-color: #ccccff; }
  +.sdb .person .detail       .content    { border-bottom: 1px solid #dddddd; padding-left: 4px; }
  +
  +TR.sdb-input-rate-0      { background: #f5f5f5; } 
  +TR.sdb-input-rate-1      { background: #ffffff; } 
  +.sdb-input-rate-0 SELECT { background: #f5f5f5; font-size: 80%; } 
  +.sdb-input-rate-1 SELECT { background: #ffffff; font-size: 80%; } 
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sdb/sdb.html
  ============================================================================
  $ cvs diff -u -r0 -r1.1 sdb.html
  --- /dev/null	2003-05-29 13:03:07.000000000 +0200
  +++ sdb.html	2003-05-29 13:03:07.000000000 +0200
  @@ -0,0 +1,8 @@
  +<html>
  +  <head>
  +     @HEAD@
  +  </head>
  +  <body style="background-color: #c0c0c0;">
  +     @BODY@
  +  </body>
  +</html>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sdb/sdb.sql
  ============================================================================
  $ cvs diff -u -r0 -r1.1 sdb.sql
  --- /dev/null	2003-05-29 13:03:07.000000000 +0200
  +++ sdb.sql	2003-05-29 13:03:08.000000000 +0200
  @@ -0,0 +1,150 @@
  +--
  +--  OSSP sdb -- Skill Database
  +--  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  +--  Copyright (c) 2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +--  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +--
  +--  This file is part of OSSP sdb, a small skill database Web UI
  +--  which can be found at http://www.ossp.org/pkg/tool/sdb/
  +--
  +--  This program is free software; you can redistribute it and/or
  +--  modify it under the terms of the GNU General Public License
  +--  as published by the Free Software Foundation; either version
  +--  2.0 of the License, or (at your option) any later version.
  +--
  +--  This program is distributed in the hope that it will be useful,
  +--  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +--  General Public License for more details.
  +--
  +--  You should have received a copy of the GNU General Public License
  +--  along with this program; if not, write to the Free Software
  +--  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +--  USA, or contact The OSSP Project <ossp@ossp.org>.
  +--
  +--  sdb.sql: skill database schema (language: SQLite SQL)
  +--
  +
  +DROP TABLE sdb_person;
  +DROP TABLE sdb_team;
  +DROP TABLE sdb_skill;
  +DROP TABLE sdb_member;
  +DROP TABLE sdb_provide;
  +
  +CREATE TABLE sdb_person (
  +    pe_id         INTEGER PRIMARY KEY,
  +    pe_name       TEXT,
  +    pe_email      TEXT,
  +    pe_phone      TEXT
  +);
  +
  +CREATE TABLE sdb_team (
  +    te_id         INTEGER PRIMARY KEY,
  +    te_name       TEXT
  +);
  +
  +CREATE TABLE sdb_skill (
  +    sk_id         INTEGER PRIMARY KEY,
  +    sk_name       TEXT
  +);
  +
  +CREATE TABLE sdb_member (
  +    ms_pe_id      INTEGER,
  +    ms_te_id      INTEGER
  +);
  +
  +CREATE TABLE sdb_provide (
  +    as_pe_id      INTEGER,
  +    as_sk_id      INTEGER,
  +    as_degree     INTEGER
  +);
  +
  +INSERT INTO sdb_person VALUES (1,  'Peter Kajinski',        'peter@de.cw.com',         '+49-89-92699-xxx');
  +INSERT INTO sdb_person VALUES (2,  'Ralf S. Engelschall',   'rse@de.cw.com',           '+49-89-92699-251');
  +INSERT INTO sdb_person VALUES (3,  'Thomas Lotterer',       'thl@.dev.de.cw.com',      '+49-89-92699-xxx');
  +INSERT INTO sdb_person VALUES (4,  'Michael Schloh',        'ms@.dev.de.cw.com',       '+49-89-92699-xxx');
  +INSERT INTO sdb_person VALUES (5,  'Michael van Elst',      'mlelstv@.dev.de.cw.com',  '+49-89-92699-xxx');
  +INSERT INTO sdb_person VALUES (6,  'Christoph Schug',       'cschug@de.cw.com',        '+49-89-92699-xxx');
  +INSERT INTO sdb_person VALUES (7,  'Christian Muschiol',    'cmuschio@de.cw.com',      '+49-89-92699-xxx');
  +INSERT INTO sdb_person VALUES (8,  'Alexander Wägner',      'awaegner@de.cw.com',      '+49-89-92699-xxx');
  +INSERT INTO sdb_person VALUES (9,  'Manuel Hendel',         'mhendel@de.cw.com',       '+49-89-92699-xxx');
  +INSERT INTO sdb_person VALUES (10, 'Jost Blachnitzky',      'scholli@de.cw.com',       '+49-89-92699-xxx');
  +INSERT INTO sdb_person VALUES (11, 'Thomas Rohde',          'rohde@de.cw.com',         '+49-89-92699-xxx');
  +INSERT INTO sdb_person VALUES (12, 'Christian Botta',       'cbotta@de.cw.com',        '+49-89-92699-xxx');
  +INSERT INTO sdb_person VALUES (13, 'Stephan Gans',          'sgans@de.cw.com',         '+49-89-92699-xxx');
  +INSERT INTO sdb_person VALUES (14, 'Sebastian Gierth',      'sgierth@de.cw.com',       '+49-89-92699-xxx');
  +INSERT INTO sdb_person VALUES (15, 'Andrea Sikeler',        'asikeler@de.cw.com',      '+49-89-92699-xxx');
  +INSERT INTO sdb_person VALUES (16, 'Christian Scheithauer', 'cscheith@de.cw.com',      '+49-89-92699-xxx');
  +
  +INSERT INTO sdb_team VALUES (1,  'IS');
  +INSERT INTO sdb_team VALUES (2,  'IS/Dev');
  +INSERT INTO sdb_team VALUES (3,  'IS/Hst');
  +INSERT INTO sdb_team VALUES (4,  'IS/DB');
  +INSERT INTO sdb_team VALUES (5,  'IS/Man');
  +
  +INSERT INTO sdb_member VALUES (1,   1);
  +INSERT INTO sdb_member VALUES (2,   1);
  +INSERT INTO sdb_member VALUES (3,   1);
  +INSERT INTO sdb_member VALUES (4,   1);
  +INSERT INTO sdb_member VALUES (5,   1);
  +INSERT INTO sdb_member VALUES (6,   1);
  +INSERT INTO sdb_member VALUES (7,   1);
  +INSERT INTO sdb_member VALUES (8,   1);
  +INSERT INTO sdb_member VALUES (9,   1);
  +INSERT INTO sdb_member VALUES (10,  1);
  +INSERT INTO sdb_member VALUES (11,  1);
  +INSERT INTO sdb_member VALUES (12,  1);
  +INSERT INTO sdb_member VALUES (13,  1);
  +INSERT INTO sdb_member VALUES (14,  1);
  +INSERT INTO sdb_member VALUES (15,  1);
  +INSERT INTO sdb_member VALUES (16,  1);
  +
  +INSERT INTO sdb_member VALUES (2,   2);
  +INSERT INTO sdb_member VALUES (3,   2);
  +INSERT INTO sdb_member VALUES (4,   2);
  +INSERT INTO sdb_member VALUES (5,   2);
  +             
  +INSERT INTO sdb_member VALUES (6,   3);
  +INSERT INTO sdb_member VALUES (7,   3);
  +INSERT INTO sdb_member VALUES (8,   3);
  +INSERT INTO sdb_member VALUES (9,   3);
  +INSERT INTO sdb_member VALUES (10,  3);
  +INSERT INTO sdb_member VALUES (11,  3);
  +              
  +INSERT INTO sdb_member VALUES (12,  4);
  +INSERT INTO sdb_member VALUES (13,  4);
  +INSERT INTO sdb_member VALUES (14,  4);
  +INSERT INTO sdb_member VALUES (15,  4);
  +INSERT INTO sdb_member VALUES (16,  4);
  +               
  +INSERT INTO sdb_member VALUES (1,   5);
  +INSERT INTO sdb_member VALUES (2,   5);
  +INSERT INTO sdb_member VALUES (6,   5);
  +INSERT INTO sdb_member VALUES (12,  5);
  +                
  +INSERT INTO sdb_skill VALUES (1,   'General :: Management');
  +INSERT INTO sdb_skill VALUES (2,   'General :: Education');
  +INSERT INTO sdb_skill VALUES (3,   'General :: Computer Science');
  +INSERT INTO sdb_skill VALUES (4,   'ISP :: Project Management');
  +INSERT INTO sdb_skill VALUES (5,   'ISP :: Datacenter Infrastructure');
  +INSERT INTO sdb_skill VALUES (6,   'ISP :: Backbone');
  +INSERT INTO sdb_skill VALUES (7,   'Languages :: Command');
  +INSERT INTO sdb_skill VALUES (8,   'Languages :: Programming');
  +INSERT INTO sdb_skill VALUES (9,   'Languages :: Markup');
  +INSERT INTO sdb_skill VALUES (10,  'Applications :: Frontend');
  +INSERT INTO sdb_skill VALUES (11,  'Applications :: Middleware');
  +INSERT INTO sdb_skill VALUES (12,  'Applications :: Backend');
  +INSERT INTO sdb_skill VALUES (13,  'Operating Systems :: Unix');
  +INSERT INTO sdb_skill VALUES (14,  'Operating Systems :: Windows');
  +INSERT INTO sdb_skill VALUES (15,  'Networking :: OSI 5-7');
  +INSERT INTO sdb_skill VALUES (16,  'Networking :: OSI 3-4');
  +INSERT INTO sdb_skill VALUES (17,  'Networking :: OSI 1-2');
  +INSERT INTO sdb_skill VALUES (18,  'Hardware :: Server');
  +INSERT INTO sdb_skill VALUES (19,  'Hardware :: Storage');
  +INSERT INTO sdb_skill VALUES (20,  'Hardware :: Network');
  +
  +INSERT INTO sdb_provide VALUES (1,  1, 2);
  +INSERT INTO sdb_provide VALUES (2,  1, 3);
  +INSERT INTO sdb_provide VALUES (6,  1, 3);
  +INSERT INTO sdb_provide VALUES (12, 1, 4);
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sdb/sdb.txt
  ============================================================================
  $ cvs diff -u -r0 -r1.1 sdb.txt
  --- /dev/null	2003-05-29 13:03:07.000000000 +0200
  +++ sdb.txt	2003-05-29 13:03:08.000000000 +0200
  @@ -0,0 +1,42 @@
  +
  ++------------+ n      1 +------------+ 1        n +------------+
  +|   group    |----------|   person   |------------|   skill    |
  ++------------+  member  +------------+  provide   +------------+
  +
  +
  +G < { group  }
  +S < { skill  }
  +P < { person }
  +
  +query: (S, G) --> P
  +
  +menu
  +   --> edit groups
  +   --> edit persons
  +   --> edit skills
  +   --> find person
  +
  +Form: Edit Skill List
  +    "     " ADD
  +    skill-1 MODIFY DELETE
  +    skill-2 MODIFY DELETE
  +    skill-3 MODIFY DELETE
  +
  +Form: Edit Person List
  +    "      " ADD
  +    person-1 MODIFY DELETE
  +    person-2 MODIFY DELETE
  +    person-3 MODIFY DELETE
  +
  +Form: Edit Skills Of A Single Person
  +    MODIFY
  +    skill-1 
  +       skill-1-1 "....."
  +       skill-1-2 .....
  +    skill-2 
  +       skill-2-1 .....
  +       skill-2-2 .....
  +
  +Form: Enter Required Skills, Group of Persons, Get Possible Person(s)
  +
  +
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 29 20:43:52 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A08D476D46; Thu, 29 May 2003 20:43:51 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/string-divert/ ChangeLog Divert.pm Divert.pod
Message-Id: <20030529184351.A08D476D46@mail.ossp.org>
Date: Thu, 29 May 2003 20:43:51 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-May-2003 20:43:51
  Branch: HEAD                             Handle: 2003052919435000

  Modified files:
    ossp-pkg/string-divert  ChangeLog Divert.pm Divert.pod

  Log:
    o fix auto-indentation generation on unfolding
    o add "storage" mode functionality

  Summary:
    Revision    Changes     Path
    1.3         +2  -1      ossp-pkg/string-divert/ChangeLog
    1.4         +35 -8      ossp-pkg/string-divert/Divert.pm
    1.3         +19 -2      ossp-pkg/string-divert/Divert.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ChangeLog
  --- ossp-pkg/string-divert/ChangeLog	23 May 2003 20:37:32 -0000	1.2
  +++ ossp-pkg/string-divert/ChangeLog	29 May 2003 18:43:50 -0000	1.3
  @@ -2,8 +2,9 @@
     ChangeLog
     =========
   
  -  0.92 (23-Apr-2003)
  +  0.92 (29-Apr-2003)
         o fix auto-indentation generation on unfolding
  +      o add "storage" mode functionality
     0.91 (23-Apr-2003)
         o direct MakeMaker to not install sample[12].pl
         o cleanup naming of module, etc.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/Divert.pm
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 Divert.pm
  --- ossp-pkg/string-divert/Divert.pm	23 May 2003 20:37:32 -0000	1.3
  +++ ossp-pkg/string-divert/Divert.pm	29 May 2003 18:43:50 -0000	1.4
  @@ -40,7 +40,7 @@
   
   our @ISA       = qw(Exporter);
   our @EXPORT_OK = qw(new destroy DESTROY
  -                    name overwrite
  +                    name overwrite storage
                       assign append string bool
                       fold unfold folding folder
                       divert undivert diversion
  @@ -56,6 +56,7 @@
   
       $self->{name}      = (defined($name) ? $name : '');
       $self->{overwrite} = 'none';
  +    $self->{storage}   = 'all';
       $self->{chunks}    = [ '' ];
       $self->{diversion} = [];
       $self->{foldermk}  = '{#%s#}';
  @@ -103,6 +104,20 @@
       return $old_mode;
   }
   
  +#   operation: set/get storage mode
  +sub storage ($;$) {
  +    my ($self, $mode) = @_;
  +    return $self->{diversion}->[-1]->storage($mode)
  +        if (@{$self->{diversion}} > 0);
  +    my $old_mode = $self->{storage};
  +    if (defined($mode)) {
  +        die "invalid mode argument"
  +            if ($mode !~ m/^(none|fold|all)$/);
  +        $self->{storage} = $mode;
  +    }
  +    return $old_mode;
  +}
  +
   #   internal: split string into chunks
   sub _chunking ($) {
       my ($self, $string) = @_;
  @@ -110,17 +125,19 @@
       my $folderre = $self->{folderre};
       while ($string =~ m/${folderre}()/s) {
           my ($prolog, $id) = ($`, $1);
  -        push(@chunks, $prolog) if ($prolog ne '');
  +        push(@chunks, $prolog) if ($prolog ne '' and $self->{storage} !~ m/^(none|fold)/);
           die "empty folding object name"
               if ($id eq '');
  -        my $object = $self->folding($id);
  -        $object = $self->new($id) if (not defined($object));
  -        die "cannot reuse or create folding sub object \"$id\""
  -            if (not defined($object));
  -        push(@chunks, $object);
  +        if ($self->{storage} ne 'none') {
  +            my $object = $self->folding($id);
  +            $object = $self->new($id) if (not defined($object));
  +            die "cannot reuse or create folding sub object \"$id\""
  +                if (not defined($object));
  +            push(@chunks, $object);
  +        }
           $string = $';
       }
  -    push(@chunks, $string) if ($string ne '');
  +    push(@chunks, $string) if ($string ne '' and $self->{storage} !~ m/^(none|fold)/);
       return @chunks;
   }
   
  @@ -229,6 +246,7 @@
           if (@{$self->{diversion}} > 0);
       die "undefined folding object identifier"
           if (not defined($id));
  +    return undef if ($self->{storage} eq 'none');
       if (ref($id)) {
           die "folding object not of class String::Divert"
               if (   UNIVERSAL::isa($id, "String::Divert")
  @@ -318,6 +336,7 @@
       }
       else {
           #   create folder
  +        return "" if ($self->{storage} eq 'none');
           my $folder = sprintf($self->{foldermk}, $a);
           return $folder;
       }
  @@ -337,6 +356,14 @@
   sub undivert ($;$) {
       my ($self, $num) = @_;
       $num = 1 if (not defined($num));
  +    if ($num !~ m|^\d+$|) {
  +        my $name = $num;
  +        for ($num = 1; $num <= @{$self->{diversion}}; $num++) {
  +            last if ($self->{diversion}->[-$num]->{name} eq $name);
  +        }
  +        die "no object named \"$name\" found for undiversion"
  +            if ($num > @{$self->{diversion}});
  +    }
       $num = @{$self->{diversion}} if ($num == 0);
       die "less number (".scalar(@{$self->{diversion}}).") of diversions active than requested ($num) to undivert"
           if ($num > @{$self->{diversion}});
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/Divert.pod
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 Divert.pod
  --- ossp-pkg/string-divert/Divert.pod	23 May 2003 11:09:57 -0000	1.2
  +++ ossp-pkg/string-divert/Divert.pod	29 May 2003 18:43:50 -0000	1.3
  @@ -157,7 +157,18 @@
   I<Overwrite Mode>. Retrieves the current overwrite mode of string object
   C<$x> or sets a new overwrite mode. The mode can be C<"none"> (no
   overwriting), C<"once"> (no overwriting once on next B<append> operation
  -only), or C<"always"> (overwriting on every B<append> operation).
  +only), or C<"always"> (overwriting on every B<append> operation). The
  +default is C<"none">.
  +
  +=item SAPI: C<$mode = $x-E<gt>>B<storage>C<;>
  +
  +=item SAPI: [C<$old_mode =>] C<$x-E<gt>>B<storage>C<($new_mode);>
  +
  +I<Storage Mode>. Retrieves the current storage mode of string object
  +C<$x> or sets a new storage mode. The mode can be C<"none"> (neither
  +contents nor foldings is stored), C<"fold"> (only foldings are stored),
  +or C<"all"> (both contents and foldings are stored). The default is
  +C<"all">.
   
   =back
   
  @@ -274,11 +285,17 @@
   
   =item SAPI: [C<$x =>] C<$x-E<gt>>B<undivert>C<($num);>
   
  +=item SAPI: [C<$x =>] C<$x-E<gt>>B<undivert>C<($name);>
  +
   =item XAPI: C<$x E<lt>E<lt> $num;>
   
  +=item XAPI: C<$x E<lt>E<lt> $name;>
  +
   I<Content Diversion Deactivation>. This deactivates the last C<$num>
   activated diversions. If C<$num> is C<0>, deactivates all activated
  -diversions.
  +diversions. If C<$name> is given (i.e. the argument is not numeric), it
  +deactivates all last activated diversion up to and including the one to
  +the string object named C<$name>.
   
   =item SAPI: C<$y = $x-E<gt>>B<diversion>C<;>
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 29 20:45:51 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 200F876D2D; Thu, 29 May 2003 20:45:51 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/string-divert/ Divert.pm
Message-Id: <20030529184551.200F876D2D@mail.ossp.org>
Date: Thu, 29 May 2003 20:45:51 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-May-2003 20:45:50
  Branch: HEAD                             Handle: 2003052919454900

  Modified files:
    ossp-pkg/string-divert  Divert.pm

  Log:
    bump for release

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-pkg/string-divert/Divert.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/Divert.pm
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 Divert.pm
  --- ossp-pkg/string-divert/Divert.pm	29 May 2003 18:43:50 -0000	1.4
  +++ ossp-pkg/string-divert/Divert.pm	29 May 2003 18:45:49 -0000	1.5
  @@ -36,7 +36,7 @@
   
   require Exporter;
   
  -our $VERSION   = '0.91';
  +our $VERSION   = '0.92';
   
   our @ISA       = qw(Exporter);
   our @EXPORT_OK = qw(new destroy DESTROY
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 29 20:52:56 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E49A576D2D; Thu, 29 May 2003 20:52:55 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sdb/ sdb.cgi
Message-Id: <20030529185255.E49A576D2D@mail.ossp.org>
Date: Thu, 29 May 2003 20:52:55 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-May-2003 20:52:55
  Branch: HEAD                             Handle: 2003052919525500

  Modified files:
    ossp-pkg/sdb            sdb.cgi

  Log:
    fully work-off person select and detail areas after code restructuring

  Summary:
    Revision    Changes     Path
    1.2         +319 -348   ossp-pkg/sdb/sdb.cgi
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sdb/sdb.cgi
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 sdb.cgi
  --- ossp-pkg/sdb/sdb.cgi	29 May 2003 11:03:04 -0000	1.1
  +++ ossp-pkg/sdb/sdb.cgi	29 May 2003 18:52:55 -0000	1.2
  @@ -192,7 +192,7 @@
   #   open DB environment
   my $db;
   ($db = DBI->connect("dbi:SQLite:dbname=sdb.db", "", ""))
  -    || die "unable to SQLite database sdb.db";
  +    || die "unable to connect to SQLite database \"sdb.db\"";
   $db->{AutoCommit} = 1;
   $db->{RaiseError} = 1;
   
  @@ -266,7 +266,6 @@
   ##  _________________________________________________________________________ 
   ##
   
  -#   FIXME
   #   determine default UI display
   my $page = undef;
   foreach my $p (keys(%{$ui})) {
  @@ -346,7 +345,8 @@
   $html >> q{page};
   
   #   generate page contents
  -foreach my $page (sort(keys(%{$ui}))) {
  +foreach my $page (@ui_pages) {
  +    next if (not defined($ui->{$page}));
       if ($ui->{$page}->{-is} =~ m/^(visible|hidden)$/) {
           my $found = 0;
           foreach my $sub (
  @@ -364,14 +364,15 @@
       }
   }
   
  -#   insert html into output HTTP response body
  +#   insert HTML into output HTTP response body
   $html->undivert(0);
   $body .= $html->string();
   
   #   optional debugging
  +$body .= "<p/>\n";
   $body .= "<pre>\n";
   my @names = $cgi->param;
  -foreach my $name (@names) {
  +foreach my $name (sort(@names)) {
       my $value = $cgi->param($name);
       $body .= "  $name=\"$value\"\n";
   }
  @@ -391,8 +392,8 @@
   sub ui_main_init {
       my ($my, $cgi, $db, $ui, $page) = @_;
   
  -    $ui->{main}        = { -is => 'disable' };
  -    $ui->{main}->{all} = { -is => 'disable' };
  +    $ui->{main}        = { -is => 'disable', -with => 'default' };
  +    $ui->{main}->{all} = { -is => 'disable', -with => 'default' };
   }
   
   sub ui_main_action {
  @@ -440,19 +441,23 @@
   sub ui_person_init {
       my ($my, $cgi, $db, $ui, $page) = @_;
   
  -    $ui->{person}           = { -is => 'disable' };
  -    $ui->{person}->{select} = { -is => 'disable' };
  -    $ui->{person}->{detail} = { -is => 'disable' };
  -    $ui->{person}->{skill}  = { -is => 'disable' };
  +    #   initialize person page
  +    $ui->{person}           = { -is => 'disable', -with => 'default' };
  +    $ui->{person}->{select} = { -is => 'disable', -with => 'default' };
  +    $ui->{person}->{detail} = { -is => 'disable', -with => 'default' };
  +    $ui->{person}->{skill}  = { -is => 'disable', -with => 'default' };
   }
   
   sub ui_person_action {
       my ($my, $cgi, $db, $ui, $page, $area, $elem) = @_;
   
  +    #   recreate action string
  +    my $action = "$page.$area.$elem";
  +
       #   actions on select box
       if ($ui->{person}->{select}->{ADD}) {
           #   just open detail area for addition
  -        $ui->{person}->{detail}->{id} = undef;
  +        $ui->{person}->{detail}->{id}    = undef;
           $ui->{person}->{detail}->{-is}   = 'visible';
           $ui->{person}->{detail}->{-with} = 'add';
       }
  @@ -572,98 +577,96 @@
       my $html = new String::Divert;
       $html->overload(1); 
   
  -    if ($ui->{person}->{-is} eq 'visible') {
  -        #   generate outer page CSS class
  -        $html .= "<span class=\"person\">\n";
  -        $html .= "  "; $html *= q{person};
  -        $html .= "</span>\n";
  -        $html >> q{person};
  -
  -        #   generate header
  -        $html .= "<h2>Persons</h2>\n";
  -        $html .= "<a href=\"$my->{URL}\">&larr; Back to Main Menu</a>";
  -
  -        #   generate page canvas
  -        #   +-------+-------+
  -        #   | area1 | area2 |
  -        #   +-------+-------+
  -        #   |     area3     |
  -        #   +---------------+
  -        $html .= "<p>\n";
  -        $html .= "<table width=100%>\n";
  -        $html .= "  <tr>\n";
  -        $html .= "    <td valign=top class=\"box\" width=\"50%\">\n";
  -        $html .= "      "; $html *= q{area1};
  -        $html .= "    </td>\n";
  -        $html .= "    <td>\n";
  -        $html .= "      &nbsp;&nbsp;\n";
  -        $html .= "    </td>\n";
  -        $html .= "    <td valign=top class=\"box\" width=\"50%\">\n";
  -        $html .= "      "; $html *= q{area2};
  -        $html .= "    </td>\n";
  -        $html .= "  </tr>\n";
  -        $html .= "  <tr>\n";
  -        $html .= "    <td colspan=3>\n";
  -        $html .= "      &nbsp;\n";
  -        $html .= "    </td>\n";
  -        $html .= "  </tr>\n";
  -        $html .= "  <tr>\n";
  -        $html .= "    <td colspan=3 valign=top class=\"box\" width=\"100%\">\n";
  -        $html .= "      "; $html *= q{area3};
  -        $html .= "    </td>\n";
  -        $html .= "  </tr>\n";
  -        $html .= "</table>\n";
  -    }
  -    else {
  -        $html *= q{area1};
  -        $html *= q{area2};
  -        $html *= q{area3};
  -    }
  +    #   filter output according to visibility
  +    $html->storage(($ui->{person}->{-is} eq 'visible' ? 'all' : 'fold'));
   
  +    #   generate outer page CSS class
  +    $html .= "<span class=\"person\">\n";
  +    $html .= "  " . $cgi->hidden(-name  => "person", -default => 1)."\n";
  +    $html .= "  "; $html *= q{person};
  +    $html .= "</span>\n";
  +    $html >> q{person};
  +
  +    #   generate header
  +    $html .= "<h2>Persons</h2>\n";
  +    $html .= "<a href=\"$my->{URL}\">&larr; Back to Main Menu</a>";
  +
  +    #   generate page canvas
  +    #   +-------+-------+
  +    #   | area1 | area2 |
  +    #   +-------+-------+
  +    #   |     area3     |
  +    #   +---------------+
  +    $html .= "<p>\n";
  +    $html .= "<table width=100%>\n";
  +    $html .= "  <tr>\n";
  +    $html .= "    <td valign=top class=\"box\" width=\"50%\">\n";
  +    $html .= "      "; $html *= q{area1};
  +    $html .= "    </td>\n";
  +    $html .= "    <td>\n";
  +    $html .= "      &nbsp;&nbsp;\n";
  +    $html .= "    </td>\n";
  +    $html .= "    <td valign=top class=\"box\" width=\"50%\">\n";
  +    $html .= "      "; $html *= q{area2};
  +    $html .= "    </td>\n";
  +    $html .= "  </tr>\n";
  +    $html .= "  <tr>\n";
  +    $html .= "    <td colspan=3>\n";
  +    $html .= "      &nbsp;\n";
  +    $html .= "    </td>\n";
  +    $html .= "  </tr>\n";
  +    $html .= "  <tr>\n";
  +    $html .= "    <td colspan=3 valign=top class=\"box\" width=\"100%\">\n";
  +    $html .= "      "; $html *= q{area3};
  +    $html .= "    </td>\n";
  +    $html .= "  </tr>\n";
  +    $html .= "</table>\n";
  +
  +    ##  _____________________________________________________________________
       ##
       ##  generate area: Person Selection
  +    ##  _____________________________________________________________________
       ##
  -    if ($ui->{person}->{-is} eq 'visible') {
  -        #   force selection box to be always visible
  -        #   if whole area is visible
  -        $ui->{person}->{select}->{-is} = 'visible';
  +
  +    #   force selection box to be always visible if whole area is visible
  +    $ui->{person}->{select}->{-is} = 'visible'
  +        if ($ui->{person}->{-is} eq 'visible');
  +
  +    #   generate CSS class
  +    $html >> q{area1};
  +    $html .= "<span class=\"select\">\n";
  +    $html .= "  "; $html *= q{select};
  +    $html .= "</span>\n";
  +    $html >> q{select};
  +
  +    #   generate inner header
  +    $html .= "<h3>Select Person and Action</h3>\n";
  +
  +    #   generate inner canvas
  +    $html .= "<table width=100%>\n";
  +    $html .= "  <tr>\n";
  +    $html .= "    <td width=100%>\n";
  +    $html .= "      "; $html *= q{select-list};
  +    $html .= "    </td>\n";
  +    $html .= "    <td valign=top height=100%>\n";
  +    $html .= "      "; $html *= q{select-buttons};
  +    $html .= "    </td>\n";
  +    $html .= "  </tr>\n";
  +    $html .= "</table>\n";
  +
  +    #   generate the selection list widget
  +    $html >> q{select-list};
  +    my $rv = $db->selectall_arrayref(
  +        "SELECT pe_id,pe_name FROM sdb_person ORDER BY pe_name;"
  +    );
  +    my $pe_values = [];
  +    my $pe_labels = {};
  +    foreach my $r (@{$rv}) {
  +        push(@{$pe_values}, $r->[0]);
  +        $pe_labels->{$r->[0]} = $r->[1];
       }
  -    #$html->storage($ui->{person}->{select}->{-is} eq 'visible' ? 1 : 0);
  +    my $pe_default = $ui->{person}->{select}->{id} || $pe_values->[0];
       if ($ui->{person}->{select}->{-is} eq 'visible') {
  -        #   generate CSS class
  -        $html >> q{area1};
  -        $html .= "<span class=\"select\">\n";
  -        $html .= "  "; $html *= q{select};
  -        $html .= "</span>\n";
  -        $html >> q{select};
  -
  -        #   generate inner header
  -        $html .= "<h3>Select Person and Action</h3>\n";
  -
  -        #   generate inner canvas
  -        $html .= "<table width=100%>\n";
  -        $html .= "  <tr>\n";
  -        $html .= "    <td width=100%>\n";
  -        $html .= "      "; $html *= q{select-list};
  -        $html .= "    </td>\n";
  -        $html .= "    <td valign=top height=100%>\n";
  -        $html .= "      "; $html *= q{select-buttons};
  -        $html .= "    </td>\n";
  -        $html .= "  </tr>\n";
  -        $html .= "</table>\n";
  -
  -        #   generate the selection list widget
  -        $html >> q{select-list};
  -        my $rv = $db->selectall_arrayref(
  -            "SELECT pe_id,pe_name FROM sdb_person ORDER BY pe_name;"
  -        );
  -        my $pe_values = [];
  -        my $pe_labels = {};
  -        foreach my $r (@{$rv}) {
  -            push(@{$pe_values}, $r->[0]);
  -            $pe_labels->{$r->[0]} = $r->[1];
  -        }
  -        my $pe_default = $ui->{person}->{select}->{id} || $pe_values->[0];
           if (@{$pe_values} > 0) {
               $html .= $cgi->scrolling_list(
                   -override  => 1,
  @@ -675,87 +678,111 @@
                   -class     => 'id',
               ) . "\n";
           }
  -        $html << q{select-list};
  +    }
  +    else {
  +        $html .= $cgi->hidden(
  +            -name    => 'person.select.id',
  +            -default => $pe_default
  +        );
  +    }
  +    $html << q{select-list};
   
  -        #   generate the selection list attached buttons
  -        $html >> "select-buttons";
  +    #   generate the selection list attached buttons
  +    $html >> "select-buttons";
  +    $html .= $cgi->submit(
  +        -name  => 'person.select.ADD', 
  +        -value => 'Add Person &rarr;',
  +        -class => 'ADD'
  +    ) . "<br>";
  +    if (@{$pe_values} > 0) {
           $html .= $cgi->submit(
  -            -name  => 'person.select.ADD', 
  -            -value => 'Add Person &rarr;',
  -            -class => 'ADD'
  -        ) . "<br>";
  -        if (@{$pe_values} > 0) {
  -            $html .= $cgi->submit(
  -                -name  => 'person.select.VIEW',
  -                -value => 'View Person &rarr;',
  -                -class => 'VIEW'
  -            ) . "<br/>";
  -            $html .= $cgi->submit(
  -                -name  => 'person.select.EDIT',
  -                -value => "Edit Person &rarr;",
  -                -class => "EDIT"
  -            ) . "<br/>";
  -            $html .= $cgi->submit(
  -                -name  => 'person.select.DELETE',
  -                -value => '&larr; Delete Person',
  -                -class => 'DELETE'
  -            ) . "<br/>";
  -        }
  -        $html << q{select-buttons};
  +            -name  => 'person.select.VIEW',
  +            -value => 'View Person &rarr;',
  +            -class => 'VIEW'
  +        ) . "<br/>";
  +        $html .= $cgi->submit(
  +            -name  => 'person.select.EDIT',
  +            -value => "Edit Person &rarr;",
  +            -class => "EDIT"
  +        ) . "<br/>";
  +        $html .= $cgi->submit(
  +            -name  => 'person.select.DELETE',
  +            -value => '&larr; Delete Person',
  +            -class => 'DELETE'
  +        ) . "<br/>";
  +    }
  +    $html << q{select-buttons};
  +
  +    #   undivert from select area
  +    $html << q{area1};
  +
  +    ##  _____________________________________________________________________
  +    ##
  +    ##  generate area: Person Detail
  +    ##  _____________________________________________________________________
  +    ##
   
  -        $html << q{area1};
  +    #   generate CSS class
  +    $html >> q{area2};
  +    $html .= "<span class=\"detail\">\n";
  +    $html .= "  "; $html *= q{detail};
  +    $html .= "</span>\n";
  +    $html >> q{detail};
  +
  +    #   generate inner header
  +    my $action = $ui->{person}->{detail}->{-with};
  +    $html .= "<h3>".uc(substr($action,0,1)).substr($action,1)." Person</h3>\n";
  +    $html .= "<span class=\"$action\">\n";
  +    $html .= "  "; $html *= q{detail-sub};
  +    $html .= "</span>\n";
  +    $html >> q{detail-sub};
  +
  +    #   generate inner canvas
  +    $html .= "<table>\n";
  +    $html .= "  "; $html *= q{detail-standard};
  +    $html .= "  "; $html *= q{detail-membership};
  +    $html .= "  "; $html *= q{detail-buttons};
  +    $html .= "</table>\n";
  +
  +    #   fetch person details
  +    my $pe = undef;
  +    if ($action eq 'view' or $action eq 'edit') {
  +        my $id = $ui->{person}->{select}->{id};
  +        if ($id eq '') {
  +            die "no person selected";
  +        }
  +        $pe = $db->selectrow_hashref(sprintf(
  +            "SELECT pe_id AS id, pe_name AS name, pe_email AS email, pe_phone AS phone" .
  +            "  FROM sdb_person WHERE pe_id = %s;",
  +            &sql_escape($id)
  +        ));
  +        if (not defined($pe)) {
  +            die "person with id \"$id\" not found";
  +        }
       }
       else {
  -        $html >> q{area1};
  -        $html << q{area1};
  +        $pe = { id => '', name => '', email => '', phone => '' };
       }
   
  -    #   generate area: BEGIN PERSON DETAIL BOX
  -    if ($ui->{person}->{detail}->{-is} eq 'visible') {
  -        $html .= "<span class=\"detail\">";
  -        #   determine content variant
  -        my $action = $ui->{person}->{detail}->{-with};
  -        $html .= "<h3>".uc(substr($action,0,1)).substr($action,1)." Person</h3>";
  -        $html .= "<span class=\"$action\">";
  -
  -        #   fetch person details
  -        my $pe = undef;
  -        if ($action eq 'view' or $action eq 'edit') {
  -            my $id = $ui->{person}->{select}->{id};
  -            if ($id eq '') {
  -                die "no person selected";
  -            }
  -            $pe = $db->selectrow_hashref(sprintf(
  -                "SELECT pe_id AS id, pe_name AS name, pe_email AS email, pe_phone AS phone" .
  -                "  FROM sdb_person WHERE pe_id = %s;",
  -                &sql_escape($id)
  -            ));
  -            if (not defined($pe)) {
  -                die "person with id \"$id\" not found";
  -            }
  +    #   display person details (standard)
  +    $html >> q{detail-standard};
  +    my $label = {
  +        'name'  => 'Person Name',
  +        'email' => 'Email Address',
  +        'phone' => 'Phone Number'
  +    };
  +    my $i = 0;
  +    foreach my $a (qw(name email phone)) {
  +        $html .= "<tr class=\"row-$i\">\n";
  +        $html .= "  <td class=\"label\">\n";
  +        $html .= "    ".$label->{$a}.":";
  +        $html .= "  </td>\n";
  +        $html .= "  <td class=\"content\">\n";
  +        if ($action eq 'view') {
  +            $html .= $pe->{$a};
           }
           else {
  -            $pe = { id => '', name => '', email => '', phone => '' };
  -        }
  -
  -        #   display person details
  -        $html .= "<table>\n";
  -        my $label = {
  -            'name'  => 'Person Name',
  -            'email' => 'Email Address',
  -            'phone' => 'Phone Number'
  -        };
  -        my $i = 0;
  -        foreach my $a (qw(name email phone)) {
  -            $html .= "  <tr class=\"row-$i\">\n";
  -            $html .= "    <td class=\"label\">\n";
  -            $html .= "      ".$label->{$a}.":";
  -            $html .= "    </td>\n";
  -            $html .= "    <td class=\"content\">\n";
  -            if ($action eq 'view') {
  -                $html .= $pe->{$a};
  -            }
  -            else {
  +            if ($ui->{person}->{detail}->{-is} eq 'visible') {
                   $html .= $cgi->textfield(
                       -override  => 1,
                       -name      => "person.detail.$a",
  @@ -764,198 +791,142 @@
                       -maxlength => 80
                   );
               }
  -            $html .= "    </td>\n";
  -            $html .= "  </tr>\n";
  -            $i = ($i + 1) % 2;
  -        }
  -        $html .= "  <tr class=\"$row-$i\">\n";
  -        $html .= "    <td valign=top class=\"label\">Team Membership:\n";
  -        $html .= "    </td>\n";
  -        $html .= "    <td class=\"content\">\n";
  -        if ($action eq 'view') {
  -            my $te_all = $db->selectcol_arrayref(sprintf(
  -                "SELECT te_name FROM sdb_team,sdb_member" .
  -                "  WHERE te_id = ms_te_id AND ms_pe_id = %s" .
  -                "  ORDER BY te_name;",
  -                &sql_escape($pe->{id})
  -            ));
  -            if (@{$te_all} == 0) {
  -                $html .= "-none-";
  -            }
  -            else {
  -                for (my $i = 0; $i < @{$te_all}; $i++) {
  -                    my $te_name = $te_all->[$i];
  -                    $html .= ", " if ($i != 0);
  -                    $html .= $te_name;
  -                }
  -            }
  -        }
  -        else {
  -            my $te_values = [];
  -            my $te_labels = {};
  -            my $te_all = $db->selectall_arrayref(
  -                "SELECT te_id, te_name FROM sdb_team ORDER BY te_name;"
  -            );
  -            foreach my $r (@{$te_all}) {
  -                push(@{$te_values}, $r->[0]);
  -                $te_labels->{$r->[0]} = $r->[1];
  -            }
  -            my $te_defaults = [];
  -            if ($action eq 'edit') {
  -                $te_defaults = $db->selectcol_arrayref(sprintf(
  -                    "SELECT ms_te_id FROM sdb_member WHERE ms_pe_id = %s;",
  -                    &sql_escape($pe->{id})
  -                ));
  -            };
  -            if (@{$te_values} == 0) {
  -                $html .= "-none-";
  -            }
               else {
  -                $html .= $cgi->scrolling_list(
  -                    -override => 1,
  -                    -name     => 'person.detail.membership+',
  -                    -values   => $te_values,
  -                    -labels   => $te_labels,
  -                    -default  => $te_defaults,
  -                    -multiple => 'true',
  -                    -size     => 10,
  -                    -class    => 'membership',
  +                $html .= $cgi->hidden(
  +                    -name      => "person.detail.$a",
  +                    -default   => $pe->{$a}
                   );
               }
           }
  -        $html .= "    </td>\n";
  -        $html .= "  </tr>\n";
  -
  -        $html .= "  <tr>\n";
  -        $html .= "    <td></td>\n";
  -        $html .= "    <td>\n";
  -
  -        $html .= "<table width=100%><tr>";
  -        if ($action eq 'view') {
  -            $html .= "<td>" . $cgi->submit(
  -                -name  => 'person.detail.CLOSE',
  -                -value => '&larr; Close',
  -                -class => 'CLOSE'
  -            ) . "</td>";
  -            $html .= "<td>" . $cgi->submit(
  -                -name  => 'person.detail.SKILL-VIEW',
  -                -value => 'View Skills &darr;',
  -                -class => 'SKILL-VIEW'
  -            ) . "</td>";
  -        }
  -        else {
  -            $html .= "<td>" . $cgi->submit(
  -                -name  => 'person.detail.CANCEL',
  -                -value => '&larr; Cancel',
  -                -class => 'CANCEL'
  -            ) . "</td>";
  -            $html .= "<td>" . $cgi->submit(
  -                -name  => 'person.detail.SAVE',
  -                -value => '&uarr; Save',
  -                -class => 'SAVE'
  -            ) . "</td>";
  -            $html .= "<td>" . $cgi->submit(
  -                -name  => 'person.detail.SKILL-EDIT',
  -                -value => 'Edit Skills &darr;',
  -                -class => 'SKILL-EDIT'
  -            ) . "</td>";
  -        }
  -        $html .= "</tr></table>";
  -
  -        $html .= "    </td>";
  -        $html .= "  </tr>";
  -        $html .= "</table>\n";
  -        $html .= "</span>";
  -        $html .= "</span>";
  -    }
  -    #   END PERSON DETAIL BOX
  -
  -    if ($edit eq 'rate' or $do eq 'view-skill') {
  -        if ($edit eq 'rate') {
  -            $html .= "<h3>Edit Skills</h3>";
  +        $html .= "  </td>\n";
  +        $html .= "</tr>\n";
  +        $i = ($i + 1) % 2;
  +    }
  +    $html << q{detail-standard};
  +
  +    #   display person details (membership)
  +    $html >> q{detail-membership};
  +    $html .= "<tr class=\"$row-$i\">\n";
  +    $html .= "  <td valign=top class=\"label\">\n";
  +    $html .= "    Team Membership:\n";
  +    $html .= "  </td>\n";
  +    $html .= "  <td class=\"content\">\n";
  +    $html .= "    "; $html *= q{detail-membership-sub};
  +    $html .= "  </td>\n";
  +    $html .= "</tr>\n";
  +    $html >> q{detail-membership-sub};
  +    if ($action eq 'view') {
  +        my $te_all = $db->selectcol_arrayref(sprintf(
  +            "SELECT te_name FROM sdb_team,sdb_member" .
  +            "  WHERE te_id = ms_te_id AND ms_pe_id = %s" .
  +            "  ORDER BY te_name;",
  +            &sql_escape($pe->{id})
  +        ));
  +        if (@{$te_all} == 0) {
  +            $html .= "-none-";
           }
           else {
  -            $html .= "<h3>View Skills</h3>";
  -        }
  -
  -        my $pe_id = $cgi->param('person.id');
  -        if ($pe_id eq '') {
  -            die "no person selected";
  +            for (my $i = 0; $i < @{$te_all}; $i++) {
  +                my $te_name = $te_all->[$i];
  +                $html .= ", " if ($i != 0);
  +                $html .= $te_name;
  +            }
           }
  -        my $rv = $db->selectall_arrayref(
  -            "SELECT sk_id,sk_name" .
  -            "  FROM sdb_skill " .
  -            "  ORDER BY sk_name;"
  -        );
  -        my $deg = $db->selectall_hashref(
  -            "SELECT sk_id,as_degree" .
  -            "  FROM sdb_skill,sdb_provide" .
  -            "  WHERE as_pe_id = '$pe_id' AND as_sk_id = sk_id;",
  -            'sk_id'
  +    }
  +    else {
  +        my $te_values = [];
  +        my $te_labels = {};
  +        my $te_all = $db->selectall_arrayref(
  +            "SELECT te_id, te_name FROM sdb_team ORDER BY te_name;"
           );
  -
  -        $html .= "<table cellspacing=0 cellpadding=0>\n";
  -        $html .= "<tr><td valign=top width=50%>";
  -
  -        $html .= "<table cellspacing=0 cellpadding=0>\n";
  -        my $i = 0;
  -        my $n = 0;
  -        my $med = sprintf("%d", ($#{$rv}+1)/2);
  -        $html .= $cgi->hidden(-name => 'rate.pe_id', -default => $pe_id);
  -        foreach my $sk (@{$rv}) {
  -            if ($n == $med) {
  -                $html .= "</table>";
  -                $html .= "</td>";
  -                $html .= "<td>";
  -                $html .= "&nbsp;&nbsp;";
  -                $html .= "</td>";
  -                $html .= "<td valign=top width=50%>";
  -                $html .= "<table cellspacing=0 cellpadding=0>\n";
  -            }
  -            $html .= "<tr class=\"sdb-input-rate-$i\">\n";
  -            $html .= "<td width=100%>\n";
  -            $html .= $sk->[1]."&nbsp;&nbsp;";
  -            $html .= "</td>\n";
  -            $html .= "<td align=right>\n";
  -            my $default = $deg->{$sk->[0]}->{as_degree} || 0;
  -            my $labels = { 0 => 'unknown', 1 => 'beginner', 2 => 'intermediate', 3 => 'advanced', 4 => 'expert' };
  -            if ($do eq 'view-skill') {
  -                $html .= $labels->{$default};
  -            }
  -            else {
  -                $html .= $cgi->scrolling_list(
  -                    -name    => "rate.$sk->[0]",
  -                    -values  => [ 0, 1, 2, 3, 4 ],
  -                    -labels  => $labels,
  -                    -default => $default,
  -                    -size    => 1,
  -                    -class   => "sdb-input-rate-$i",
  -                    -style   => 'width: 100%;',
  -                );
  -            }
  -            $html .= "</td>\n";
  -            $html .= "</tr>\n";
  -            $i = ($i + 1) % 2;
  -            $n++;
  -        }
  -        $html .= "<tr><td colspan=2 align=right>\n";
  -        $html .= "<table><tr>";
  -        if ($do eq 'view-skill') {
  -            $html .= "<td>".$cgi->submit(-name => 'do.close-skill', -value => "Close", -class => "sdb-button-view")."</td>";
  +        foreach my $r (@{$te_all}) {
  +            push(@{$te_values}, $r->[0]);
  +            $te_labels->{$r->[0]} = $r->[1];
  +        }
  +        my $te_defaults = [];
  +        if ($action eq 'edit') {
  +            $te_defaults = $db->selectcol_arrayref(sprintf(
  +                "SELECT ms_te_id FROM sdb_member WHERE ms_pe_id = %s;",
  +                &sql_escape($pe->{id})
  +            ));
  +        };
  +        if (@{$te_values} == 0) {
  +            $html .= "-none-";
           }
           else {
  -            $html .= "<td>".$cgi->submit(-name => 'rate.save', -value => "Save", -class => "sdb-button-save")."</td>";
  -            $html .= "<td>".$cgi->submit(-name => 'rate.cancel', -value => "Cancel", -class => "sdb-button-cancel")."</td>";
  +            $html .= $cgi->scrolling_list(
  +                -override => 1,
  +                -name     => 'person.detail.membership+',
  +                -values   => $te_values,
  +                -labels   => $te_labels,
  +                -default  => $te_defaults,
  +                -multiple => 'true',
  +                -size     => 10,
  +                -class    => 'membership',
  +            );
           }
  -        $html .= "</tr></table>";
  -        $html .= "</td></tr>\n";
  -        $html .= "</table>\n";
  -
  -        $html .= "</td></tr>\n";
  -        $html .= "</table>\n";
  +    }
  +    $html << q{detail-membership};
   
  +    #   generate attached buttons
  +    $html >> q{detail-buttons};
  +    $html .= "<tr>\n";
  +    $html .= "  <td>\n";
  +    $html .= "    &nbsp;";
  +    $html .= "  </td>\n";
  +    $html .= "  <td>\n";
  +    $html .= "    "; $html *= q{detail-buttons-sub1};
  +    $html .= "  </td>\n";
  +    $html .= "</tr>\n";
  +    $html >> q{detail-buttons-sub1};
  +    $html .= "<table width=100%>\n";
  +    $html .= "  <tr>\n";
  +    $html .= "    "; $html *= q{detail-buttons-sub2};
  +    $html .= "  </tr>\n";
  +    $html .= "</table>\n";
  +    $html >> q{detail-buttons-sub2};
  +    if ($action eq 'view') {
  +        $html .= "<td>" . $cgi->submit(
  +            -name  => 'person.detail.CLOSE',
  +            -value => '&larr; Close',
  +            -class => 'CLOSE'
  +        ) . "</td>";
  +        $html .= "<td>" . $cgi->submit(
  +            -name  => 'person.detail.SKILL-VIEW',
  +            -value => 'View Skills &darr;',
  +            -class => 'SKILL-VIEW'
  +        ) . "</td>";
       }
  +    else {
  +        $html .= "<td>" . $cgi->submit(
  +            -name  => 'person.detail.CANCEL',
  +            -value => '&larr; Cancel',
  +            -class => 'CANCEL'
  +        ) . "</td>";
  +        $html .= "<td>" . $cgi->submit(
  +            -name  => 'person.detail.SAVE',
  +            -value => '&uarr; Save',
  +            -class => 'SAVE'
  +        ) . "</td>";
  +        $html .= "<td>" . $cgi->submit(
  +            -name  => 'person.detail.SKILL-EDIT',
  +            -value => 'Edit Skills &darr;',
  +            -class => 'SKILL-EDIT'
  +        ) . "</td>";
  +    }
  +    $html << q{detail-buttons};
  +    
  +    #   undivert from detail area
  +    $html << q{area2};
   
  +    ##  _____________________________________________________________________
  +    ##
  +    ##  generate area: Person Rating
  +    ##  _____________________________________________________________________
  +    ##
  +
  +    #   return unfolded HTML
       $html->undivert(0);
       return $html->string();
   }
  +
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jun  1 09:07:08 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8F10C76D74; Sun,  1 Jun 2003 09:07:07 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str/ TODO
Message-Id: <20030601070707.8F10C76D74@mail.ossp.org>
Date: Sun,  1 Jun 2003 09:07:07 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Jun-2003 09:07:06
  Branch: HEAD                             Handle: 2003060108070600

  Modified files:
    ossp-pkg/str            TODO

  Log:
    remember these issues

  Summary:
    Revision    Changes     Path
    1.24        +16 -0      ossp-pkg/str/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/TODO
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 TODO
  --- ossp-pkg/str/TODO	6 Jan 2003 19:13:47 -0000	1.23
  +++ ossp-pkg/str/TODO	1 Jun 2003 07:07:06 -0000	1.24
  @@ -65,3 +65,19 @@
   of course. Just use str_span() in a loop and replace the underlaying
   character in each step until str_span reached the end of the string.
   
  +  o Feedback from http://www.and.org/vstr/comparison.html:
  +
  +    The printf implementation is internal and based on the Apache
  +    snprintf() function, '\'' (thousand modifiers), 'a', 'F', 'Lf',
  +    'lld', 'td', 'zd', 'hhd' , etc. and i18n format parameter modifiers
  +    are all completely missing Unspecified precision is broken, as is
  +    corner cases for octal etc. also infinity/nan output is not correct
  +    with regard to case. Buffer overflows are possible in the integer
  +    formatting paths You can have custom modifiers, but only triggered
  +    on the system '%' character ... so gcc will currently spam warnings.
  +    It also looks like the ISO C std. is completely ignored for certain
  +    corner cases. Also note that due to the fact that the strings cannot
  +    be resized by the library the printf implementation uses a snprint()
  +    interface, this means that data can be lost using the interface if
  +    the programer isn't carefull.
  +
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jun  3 10:28:20 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6E8DA76D50; Tue,  3 Jun 2003 10:28:20 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog README VERSION sh.install
Message-Id: <20030603082820.6E8DA76D50@mail.ossp.org>
Date: Tue,  3 Jun 2003 10:28:20 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Jun-2003 10:28:20
  Branch: HEAD                             Handle: 2003060309281900

  Modified files:
    ossp-pkg/shtool         ChangeLog README VERSION sh.install

  Log:
    Make sure "shtool install -e ..." does not fail with "permission denied"
    on the internally created temporary files if the source file is not
    writeable to the current user. This occurs because cp(1) does not in all
    cases honor umask(2) (even without option -p) -- mainly if the source
    file is already owned by the current user (then the permissions are
    always copied). Hence an explicit "chmod u+w" is required if the "shtool
    install" substitution feature (option -e) is used.
    
    Discovered by: Thomas Lotterer <thomas@lotterer.net>

  Summary:
    Revision    Changes     Path
    1.188       +11 -0      ossp-pkg/shtool/ChangeLog
    1.95        +1  -1      ossp-pkg/shtool/README
    1.72        +1  -1      ossp-pkg/shtool/VERSION
    1.28        +1  -0      ossp-pkg/shtool/sh.install
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.187 -r1.188 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	16 May 2003 08:46:26 -0000	1.187
  +++ ossp-pkg/shtool/ChangeLog	3 Jun 2003 08:28:19 -0000	1.188
  @@ -11,6 +11,17 @@
   
    Changes between 1.6.2 and 2.0b0 (02-Nov-2002 to xx-May-2003):
   
  +   *) Make sure "shtool install -e ..." does not fail with "permission
  +      denied" on the internally created temporary files if the source
  +      file is not writeable to the current user. This occurs because
  +      cp(1) does not in all cases honor umask(2) (even without option
  +      -p) -- mainly if the source file is already owned by the current
  +      user (then the permissions are always copied). Hence an explicit
  +      "chmod u+w" is required if the "shtool install" substitution
  +      feature (option -e) is used.
  +      [Thomas Lotterer <thomas@lotterer.net>,
  +       Ralf S. Engelschall <rse@engelschall.com>]
  +
      *) When patching a file with "shtool subst" try to make it
         writeable first in case it has permissions set differently.
         [Ralf S. Engelschall <rse@engelschall.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/README
  ============================================================================
  $ cvs diff -u -r1.94 -r1.95 README
  --- ossp-pkg/shtool/README	9 May 2003 09:50:13 -0000	1.94
  +++ ossp-pkg/shtool/README	3 Jun 2003 08:28:19 -0000	1.95
  @@ -10,7 +10,7 @@
     http://www.gnu.org/software/shtool/
     ftp://ftp.gnu.org/gnu/shtool/
   
  -  Version 2.0b0 (09-May-2003)
  +  Version 2.0b0 (03-Jun-2003)
   
     The GNU shtool program is a compilation of small but very stable and
     portable shell scripts into a single shell tool. All ingredients
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/VERSION
  ============================================================================
  $ cvs diff -u -r1.71 -r1.72 VERSION
  --- ossp-pkg/shtool/VERSION	9 May 2003 09:50:13 -0000	1.71
  +++ ossp-pkg/shtool/VERSION	3 Jun 2003 08:28:19 -0000	1.72
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for GNU shtool (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is GNU shtool, Version 2.0b0 (09-May-2003)
  +  This is GNU shtool, Version 2.0b0 (03-Jun-2003)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.install
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 sh.install
  --- ossp-pkg/shtool/sh.install	11 Feb 2003 13:00:50 -0000	1.27
  +++ ossp-pkg/shtool/sh.install	3 Jun 2003 08:28:19 -0000	1.28
  @@ -137,6 +137,7 @@
               sed="$sed -e '$e'"
           done
           cp $dsttmp $dsttmp.old
  +        chmod u+w $dsttmp
           eval "$sed <$dsttmp.old >$dsttmp" || shtool_exit $?
           rm -f $dsttmp.old
       fi
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jun  3 17:26:54 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AD86A76D40; Tue,  3 Jun 2003 17:26:53 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_lab.c rc_proc.c
Message-Id: <20030603152653.AD86A76D40@mail.ossp.org>
Date: Tue,  3 Jun 2003 17:26:53 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   03-Jun-2003 17:26:53
  Branch: HEAD                             Handle: 2003060316265200

  Modified files:
    ossp-pkg/rc             rc_lab.c rc_proc.c

  Log:
    Fixed non terminal section bug causing segfault in processor

  Summary:
    Revision    Changes     Path
    1.3         +1  -0      ossp-pkg/rc/rc_lab.c
    1.41        +2  -1      ossp-pkg/rc/rc_proc.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_lab.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 rc_lab.c
  --- ossp-pkg/rc/rc_lab.c	20 May 2003 15:06:41 -0000	1.2
  +++ ossp-pkg/rc/rc_lab.c	3 Jun 2003 15:26:52 -0000	1.3
  @@ -67,6 +67,7 @@
       pLabel->m_ppSecvec = realloc(pLabel->m_ppSecvec, sizeof(rc_section_t *)\
           * (pLabel->m_nSecs + 1));
       pLabel->m_ppSecvec[pLabel->m_nSecs] = sectionNew(pInsec->m_szName);
  +    pLabel->m_ppSecvec[pLabel->m_nSecs + 1] = NULL;
   
       /* Simple value copy */
       pLabel->m_ppSecvec[pLabel->m_nSecs]->m_nPri  = pInsec->m_nPri;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.40 -r1.41 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	28 May 2003 15:09:29 -0000	1.40
  +++ ossp-pkg/rc/rc_proc.c	3 Jun 2003 15:26:52 -0000	1.41
  @@ -270,7 +270,8 @@
           /* code is used in the script sections to be executed               */
           for (nSecs = 0; nSecs < pRc->m_pAnal->m_nSecs; nSecs++) {
               for (nTmp = 0; nTmp < pRc->m_pAnal->m_nRcs; nTmp++) {
  -                if (pRc->m_ppLabvec[nTmp]->m_ppSecvec) {
  +                if (pRc->m_ppLabvec[nTmp]->m_ppSecvec && \
  +                    pRc->m_ppLabvec[nTmp]->m_ppSecvec[nSecs]) {
                       nRunuid = getuid();
                       nSectuid = pRc->m_ppLabvec[nTmp]->m_ppSecvec[nSecs]->m_nUid;
                       /* See if root user status is needed, and bail out if so */
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jun  3 17:27:13 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8A8D676D40; Tue,  3 Jun 2003 17:27:13 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_cliopt.c
Message-Id: <20030603152713.8A8D676D40@mail.ossp.org>
Date: Tue,  3 Jun 2003 17:27:13 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   03-Jun-2003 17:27:13
  Branch: HEAD                             Handle: 2003060316271300

  Modified files:
    ossp-pkg/rc             rc_cliopt.c

  Log:
    Fixed wrong debug option token name

  Summary:
    Revision    Changes     Path
    1.17        +1  -1      ossp-pkg/rc/rc_cliopt.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_cliopt.c
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 rc_cliopt.c
  --- ossp-pkg/rc/rc_cliopt.c	27 May 2003 13:14:08 -0000	1.16
  +++ ossp-pkg/rc/rc_cliopt.c	3 Jun 2003 15:27:13 -0000	1.17
  @@ -43,7 +43,7 @@
   static struct popt_option m_pOptable[] = {
       /* Long options are defined as short keys but no arguments */
       {RC_USE_NAME, '?', POPT_ARG_NONE, 0, RC_USE_VAL, RC_USE_DESC, NULL},
  -    {RC_DBG_NAME, 'd', POPT_ARG_NONE, 0, RC_DBG_VAL, RC_DBG_DESC, NULL},
  +    {RC_DBG_NAME, 'D', POPT_ARG_NONE, 0, RC_DBG_VAL, RC_DBG_DESC, NULL},
       {RC_VER_NAME, 'V', POPT_ARG_NONE, 0, RC_VER_VAL, RC_VER_DESC, NULL},
       {RC_EVL_NAME, 'e', POPT_ARG_NONE, 0, RC_EVL_VAL, RC_EVL_DESC, NULL},
       {RC_HLP_NAME, 'h', POPT_ARG_NONE, 0, RC_HLP_VAL, RC_HLP_DESC, NULL},
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jun  3 17:27:33 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5BBBF76D5D; Tue,  3 Jun 2003 17:27:33 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_test.sh
Message-Id: <20030603152733.5BBBF76D5D@mail.ossp.org>
Date: Tue,  3 Jun 2003 17:27:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   03-Jun-2003 17:27:33
  Branch: HEAD                             Handle: 2003060316273200

  Modified files:
    ossp-pkg/rc             rc_test.sh

  Log:
    Update test suite to current development state

  Summary:
    Revision    Changes     Path
    1.23        +96 -60     ossp-pkg/rc/rc_test.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_test.sh
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 rc_test.sh
  --- ossp-pkg/rc/rc_test.sh	3 Apr 2003 12:05:14 -0000	1.22
  +++ ossp-pkg/rc/rc_test.sh	3 Jun 2003 15:27:32 -0000	1.23
  @@ -29,39 +29,75 @@
   
   if [ -d $MOPKG/etc ]; then
       RCBASE=$MOPKG/etc
  -else
  +elif [ -d /sw/etc ]; then
  +    RCBASE=/sw/etc
  +elif [ -d /cw/etc ]; then
  +    RCBASE=/cw/etc
  +elif [ -d /usr/opkg/etc ]; then
       RCBASE=/usr/opkg/etc
   fi
   
  -# Test short options, should fail for false combination usage
  -#echo "./rc -dvef ./rc_test/rcfuncs -hilpsrvxLcqt samba start sleep=2 restart"
  -#./rc -dVef ./rc_test/rcfuncs -hilpsrvxLcqt samba start sleep=2 restart
  -
  -# Test short options, should succeed
  -#echo; echo "./rc -derv -L ./rc_test/rc.%{RCFILE:s/^all$/*/} -c ./rc.conf -f ./rc_test/rcfuncs -t /tmp openssh stop sleep=4 start daily minsize=2097152"
  -#./rc -derv -L ./rc_test/rc.d/rc.%{RCFILE:s/^all$/*/} -c ./rc.conf -f ./rc_test/rcfuncs -t /tmp openssh stop sleep=4 start daily minsize=2097152
  -
  -# Test some long options, should fail for false combination usage
  -#clear
  -echo; echo "./rc --verbose --silent --print --NameConfig config --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" uucp stop sleep=6 start"
  -./rc --verbose --silent --print --NameConfig config --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" uucp stop sleep=6 start
  -#read dummy;clear
  -echo; echo "./rc --query myvar --silent --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" zebra bing bang"
  -./rc --query myvar --silent --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" zebra bing bang
  -#read dummy;clear
  -echo; echo "./rc --conf ./rc.conf --ParseSectionDef \"^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>\" --locate ./rc_test/ --query this barf test"
  -./rc --conf ./rc.conf --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" --locate ./rc_test/ --query this barf test
  -#read dummy;clear
  -
  -# Test minimal set of long options, should succeed
  -echo; echo "./rc --debug --version --ParseSectionDef \"^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>\" rsyncd nothing matters but the version"
  -./rc --debug --version --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" rsyncd nothing matters but the version
  -#read dummy;clear
  -echo; echo "./rc --conf $RCBASE/rc.conf --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" --locate $RCBASE/rc.d:./rc_test:/etc/rc --query all barf test"
  +echo "*** Test short options, should fail for false combination usage ***"
  +echo "./rc -Dvexpf ./rc_test/rcfuncs -islrvc rc.conf -q somevalue -t /tmp -L rc_test samba search"
  +./rc -Dvexpf ./rc_test/rcfuncs -ilrvc rc.conf -q somevalue -t /tmp -L rc_test samba search
  +echo; echo "<Press enter to continue>"
  +read dummy;clear
  +
  +echo "*** Test short options, should succeed ***"
  +echo "./rc -Dpf ./rc_test/rcfuncs -irvt /tmp -L rc_test -c rc.conf samba search finish"
  +./rc -Dpf ./rc_test/rcfuncs -irvt /tmp -L rc_test -c rc.conf samba search finish
  +echo; echo "<Press enter to continue>"
  +read dummy;clear
  +#echo "./rc -Derv -L ./rc_test/rc.%{RCFILE:s/^all$/*/} -c ./rc.conf -f ./rc_test/rcfuncs -t /tmp openssh stop sleep=4 start daily minsize=2097152"
  +#./rc -Derv -L ./rc_test/rc.d/rc.%{RCFILE:s/^all$/*/} -c ./rc.conf -f ./rc_test/rcfuncs -t /tmp openssh stop sleep=4 start daily minsize=2097152
  +#echo; echo "<Press enter to continue>"
  +#read dummy;clear
  +
  +echo "*** Test some long options, should fail for false combination usage ***"
  +echo "./rc --verbose --silent --print --NameConfig config --locate rc_test --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" zebra sleep=6 start test"
  +./rc --verbose --silent --print --NameConfig config --locate rc_test --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" zebra sleep=6 start test
  +echo; echo "<Press enter to continue>"
  +read dummy;clear
  +echo "*** Test some long options, should fail for false combination usage ***"
  +echo "./rc --query myvar --print --exec --locate rc_test --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" zebra start test"
  +./rc --query myvar --print --exec --locate rc_test --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" zebra start test
  +echo; echo "<Press enter to continue>"
  +read dummy;clear
  +echo "*** Test some long options, should fail for false combination usage ***"
  +echo "./rc --info --print --eval --silent --ParseSectionDef \"^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>\" --query format --locate ./rc_test/ pam test"
  +./rc --info --print --eval --silent --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" --query format --locate ./rc_test/ pam test
  +echo; echo "<Press enter to continue>"
  +read dummy;clear
  +
  +echo "*** Test minimal set of long options, should succeed ***"
  +echo "./rc --locate rc_test --ParseSectionDef \"^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>\" rsyncd go"
  +./rc --locate rc_test --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" rsyncd go
  +echo; echo "<Press enter to continue>"
  +read dummy;clear
  +echo "*** Test minimal set of long options, should succeed ***"
  +echo "./rc --version --ParseSectionDef \"^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>\" rsyncd nothing matters but the version"
  +./rc --version --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" rsyncd nothing matters but the version
  +echo; echo "<Press enter to continue>"
  +read dummy;clear
  +echo "*** Test minimal set of long options, should succeed ***"
  +echo "./rc --exec --conf $RCBASE/rc.conf --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" --locate $RCBASE/rc.d:./rc_test:/etc/rc --query format all barf test"
  +./rc --exec --conf rc.conf --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" --locate rc_test --query format all barf test
  +echo; echo "<Press enter to continue>"
  +read dummy;clear
  +
  +# Some examples using fake rc files and REAL ONES AS WELL, use with care!
  +echo "The following test will execute test suite code,"
  +echo "and code ALSO FROM YOUR REAL OPENPKG RC FILES!!!"
  +echo "If this concerns you, then press Ctrl-C now to exit."
  +echo; echo "<Press enter to continue>"
  +read dummy;clear
  +echo "./rc --conf $RCBASE/rc.conf --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" --locate $RCBASE/rc.d:./rc_test:/etc/rc --query all barf test"
   ./rc --conf $RCBASE/rc.conf --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" --locate $RCBASE/rc.d:./rc_test:/etc/rc --query all barf test
  +echo; echo "<Press enter to continue>"
   #read dummy;clear
   
   # FIXME these cases are not handled yet by our configuration FIXME #
  +exit
   #echo; echo "./rc --debug --version"
   #./rc --debug --version
   #echo; echo "./rc --debug --help"
  @@ -74,70 +110,70 @@
   #./rc --conf $RCBASE/rc.conf --tmp /tmp --debug --labels rsyncd
   # FIXME these cases are not handled yet by our configuration FIXME #
   
  -echo; echo "./rc --func rc_test/rcfuncs --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" --verbose openssh stop sleep=4 start"
  -./rc --func rc_test/rcfuncs --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" --verbose openssh stop sleep=4 start
  +#echo; echo "./rc --func rc_test/rcfuncs --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" --verbose openssh stop sleep=4 start"
  +#./rc --func rc_test/rcfuncs --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" --verbose openssh stop sleep=4 start
   #read dummy;clear
  -echo; echo "./rc --func ./rc_test/rcfuncs --info --eval uucp restart"
  -./rc --func ./rc_test/rcfuncs --info --eval uucp restart
  +#echo; echo "./rc --func ./rc_test/rcfuncs --info --eval uucp restart"
  +#./rc --func ./rc_test/rcfuncs --info --eval uucp restart
   #read dummy;clear
  -echo; echo "./rc --conf rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --ParseSectionDef \"^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>\" uucp start"
  -./rc --conf rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" uucp start
  +#echo; echo "./rc --conf rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --ParseSectionDef \"^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>\" uucp start"
  +#./rc --conf rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" uucp start
   #read dummy;clear
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --ParseSectionDef \"^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>\" ntp sync"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" ntp sync
  +#echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --ParseSectionDef \"^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>\" ntp sync"
  +#./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" ntp sync
   #read dummy;clear
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --silent --ParseSectionDef \"^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>\" ralf feed suppe"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --silent --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" ralf feed suppe
  +#echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --silent --ParseSectionDef \"^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>\" ralf feed suppe"
  +#./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --silent --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" ralf feed suppe
   #read dummy;clear
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L rc_test --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" --tmp /tmp --silent samba search finish destroy"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L rc_test --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" --tmp /tmp --silent samba search finish destroy
  +#echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L rc_test --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" --tmp /tmp --silent samba search finish destroy"
  +#./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L rc_test --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" --tmp /tmp --silent samba search finish destroy
   #read dummy;clear
   
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" --tmp /tmp --silent all feed suppe"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" --tmp /tmp --silent all feed suppe
  +#echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" --tmp /tmp --silent all feed suppe"
  +#./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" --tmp /tmp --silent all feed suppe
   #read dummy;clear
   
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" --tmp /tmp --silent --debug all config barf gag"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" --tmp /tmp --silent --debug all config barf gag
  +#echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" --tmp /tmp --silent --debug all config barf gag"
  +#./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" --tmp /tmp --silent --debug all config barf gag
   #read dummy;clear
   
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" --tmp /tmp --silent --debug --eval all config start"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" --tmp /tmp --silent --debug --eval all config start
  +#echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" --tmp /tmp --silent --debug --eval all config start"
  +#./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" --tmp /tmp --silent --debug --eval all config start
   #read dummy;clear
   
   #echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" --tmp /tmp --silent --debug --exec all config start"
   #./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" --tmp /tmp --silent --debug --exec all config start
   
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --print --debug pam info"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --print --debug pam info
  +#echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --print --debug pam info"
  +#./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --print --debug pam info
   #read dummy;clear
   
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --debug apache config start"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --debug apache config start
  +#echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --debug apache config start"
  +#./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --debug apache config start
   #read dummy;clear
   
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef \"^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>\" --tmp /tmp --silent --debug all config start"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" --tmp /tmp --silent --debug all config start
  +#echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef \"^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>\" --tmp /tmp --silent --debug all config start"
  +#./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" --tmp /tmp --silent --debug all config start
   #read dummy;clear
   
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef \"^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>\" --tmp /tmp --silent --debug pam info"
  -./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" --tmp /tmp --silent --debug pam info
  +#echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef \"^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>\" --tmp /tmp --silent --debug pam info"
  +#./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" --tmp /tmp --silent --debug pam info
   #read dummy;clear
   
  -echo; echo "./rc --conf ./rc_test/myrc.conf --func $RCBASE/rc.func -L $RCBASE/rc.d/ --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" --tmp /tmp --silent --debug dhcpd start"
  -./rc --conf ./rc_test/myrc.conf --func $RCBASE/rc.func -L $RCBASE/rc.d/ --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" --tmp /tmp --silent --debug dhcpd start
  +#echo; echo "./rc --conf ./rc_test/myrc.conf --func $RCBASE/rc.func -L $RCBASE/rc.d/ --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" --tmp /tmp --silent --debug dhcpd start"
  +#./rc --conf ./rc_test/myrc.conf --func $RCBASE/rc.func -L $RCBASE/rc.d/ --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" --tmp /tmp --silent --debug dhcpd start
   #read dummy;clear
   
  -echo; echo "./rc --func ./rc_test/rcfuncs --exec --ParseSectionDef \"^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>\" -L ./rc_test pam autre"
  -./rc --func ./rc_test/rcfuncs --exec --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" -L ./rc_test pam autre
  +#echo; echo "./rc --func ./rc_test/rcfuncs --exec --ParseSectionDef \"^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>\" -L ./rc_test pam autre"
  +#./rc --func ./rc_test/rcfuncs --exec --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" -L ./rc_test pam autre
   #read dummy;clear
   
  -echo; echo "./rc --func ./rc_test/rcfuncs -L ./rc_test/ dhcpd stop"
  -./rc --func ./rc_test/rcfuncs -L ./rc_test/ dhcpd stop
  +#echo; echo "./rc --func ./rc_test/rcfuncs -L ./rc_test/ dhcpd stop"
  +#./rc --func ./rc_test/rcfuncs -L ./rc_test/ dhcpd stop
   #read dummy;clear
   
  -echo; echo "./rc --exec --func ./rc_test/rcfuncs -L ./rc_test/ dhcpd gotest"
  -./rc --exec --func ./rc_test/rcfuncs -L ./rc_test/ dhcpd gotest
  +#echo; echo "./rc --exec --func ./rc_test/rcfuncs -L ./rc_test/ dhcpd gotest"
  +#./rc --exec --func ./rc_test/rcfuncs -L ./rc_test/ dhcpd gotest
   #read dummy;clear
   
   # Next milestone
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jun  3 17:28:10 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 444F776D40; Tue,  3 Jun 2003 17:28:10 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/rc_test/ rc.rsyncd rc.samba rc.zebra
Message-Id: <20030603152810.444F776D40@mail.ossp.org>
Date: Tue,  3 Jun 2003 17:28:10 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   03-Jun-2003 17:28:10
  Branch: HEAD                             Handle: 2003060316280900

  Modified files:
    ossp-pkg/rc/rc_test     rc.rsyncd rc.samba rc.zebra

  Log:
    Add tests for broken rc file problems and start using rsyncd test

  Summary:
    Revision    Changes     Path
    1.2         +9  -0      ossp-pkg/rc/rc_test/rc.rsyncd
    1.6         +1  -0      ossp-pkg/rc/rc_test/rc.samba
    1.7         +3  -1      ossp-pkg/rc/rc_test/rc.zebra
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_test/rc.rsyncd
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 rc.rsyncd
  --- ossp-pkg/rc/rc_test/rc.rsyncd	5 Jul 2002 11:16:20 -0000	1.1
  +++ ossp-pkg/rc/rc_test/rc.rsyncd	3 Jun 2003 15:28:09 -0000	1.2
  @@ -2,6 +2,15 @@
   
   echo "Run commands Rsyncd starting"
   
  +# The only section in this rc file
  +<go -ucw-r>
  +    ping -s design-web.co.uk 56 4
  +    curl -s ftp://ftp.openpkg.org/current/SRC/ | grep openssl
  +    echo $0
  +
  +    echo "And again..."
  +</go>
  +
   ls /tmp
   which shutdown
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_test/rc.samba
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 rc.samba
  --- ossp-pkg/rc/rc_test/rc.samba	23 May 2003 14:15:12 -0000	1.5
  +++ ossp-pkg/rc/rc_test/rc.samba	3 Jun 2003 15:28:09 -0000	1.6
  @@ -3,6 +3,7 @@
   echo "Run commands Samba starting"
   
   %config
  +    somevalue=good
       host aldi.de
   
   %test
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_test/rc.zebra
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 rc.zebra
  --- ossp-pkg/rc/rc_test/rc.zebra	28 May 2003 18:26:48 -0000	1.6
  +++ ossp-pkg/rc/rc_test/rc.zebra	3 Jun 2003 15:28:09 -0000	1.7
  @@ -13,7 +13,9 @@
   echo
   
   %test
  -    echo "Just an echo to test zebra"
  +    echo "First"
  +
  +    echo "Biff borchert echo to test zebra"
   
   %start -u ms
       echo "No priority given, Otay zebra in Umfolozi"
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jun  4 12:48:16 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3FBC776D61; Wed,  4 Jun 2003 12:48:16 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ 00TODO
Message-Id: <20030604104816.3FBC776D61@mail.ossp.org>
Date: Wed,  4 Jun 2003 12:48:16 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   04-Jun-2003 12:48:15
  Branch: HEAD                             Handle: 2003060411481500

  Modified files:
    ossp-pkg/rc             00TODO

  Log:
    Keep track of error case when sections are not found.

  Summary:
    Revision    Changes     Path
    1.46        +24 -0      ossp-pkg/rc/00TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/00TODO
  ============================================================================
  $ cvs diff -u -r1.45 -r1.46 00TODO
  --- ossp-pkg/rc/00TODO	27 May 2003 11:53:12 -0000	1.45
  +++ ossp-pkg/rc/00TODO	4 Jun 2003 10:48:15 -0000	1.46
  @@ -73,6 +73,30 @@
     I think rc_anal is violating the singleton configuration.
     Totally remove warnings from the exception logic
   
  +Additional
  +  Request 14 was acted upon.
  +  This is a comment. It is not sent to the Requestor(s).
  +  _________________________________________________________________________
  +    
  +           URL: https://rt.openpkg.org/id/14
  +        Ticket: [OpenPKG #14]
  +       Subject: apache: invalid rc script arguments are ignored
  +    Requestors: markus.sander@de.cw.com
  +         Queue: openpkg
  +         Owner: Nobody
  +        Status: new
  +   Transaction: Comments added by rse
  +          Time: Tue Jun 03 16:45:08 2003
  +  _________________________________________________________________________
  +    
  +  This should be fixed with the new OSSP rc, but unfortunately
  +  the situation is complex: on "rc foo bad", "rc" could
  +  complain if rc.foo does not contain a "%bad". But
  +  what should it do on "rc all bad"? I think, in this
  +  situation is should not complain for all rc.* which do
  +  not contain "%bad", of course. Except: IF ALL rc.* DO NOT
  +  CONTAIN %bad!
  +
   Change data type locations to private for additional abstraction
     Index: ossp-pkg/cfg/cfg_buf.c
     ============================================================
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jun  5 12:58:38 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 841FD76D8F; Thu,  5 Jun 2003 12:58:38 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-db/bres/ bres-history.sql
Message-Id: <20030605105838.841FD76D8F@mail.ossp.org>
Date: Thu,  5 Jun 2003 12:58:38 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Jun-2003 12:58:38
  Branch: HEAD                             Handle: 2003060511583700

  Modified files:
    ossp-pkg/as/as-db/bres  bres-history.sql

  Log:
    flush this stuff for now

  Summary:
    Revision    Changes     Path
    1.2         +52 -58     ossp-pkg/as/as-db/bres/bres-history.sql
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-db/bres/bres-history.sql
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 bres-history.sql
  --- ossp-pkg/as/as-db/bres/bres-history.sql	29 May 2003 10:11:15 -0000	1.1
  +++ ossp-pkg/as/as-db/bres/bres-history.sql	5 Jun 2003 10:58:37 -0000	1.2
  @@ -5,9 +5,9 @@
   
   DROP TABLE ac CASCADE;
   CREATE TABLE ac(
  -    ac_oid    INTEGER,
  -    ac_name   TEXT,
  -    ac_hid    INTEGER
  +    ac_oid     INTEGER,
  +    ac_name    TEXT,
  +    ac_hid     INTEGER
   );
   
   DROP SEQUENCE st_seq CASCADE;
  @@ -16,28 +16,28 @@
   
   DROP TABLE st CASCADE;
   CREATE TABLE st (
  -    st_oid    INTEGER,
  -    st_hid    INTEGER DEFAULT nextval('st_seq') NOT NULL,
  -              -- discrete monton increasing value assigned to system time
  -    st_beg    INTEGER
  -              -- system time when system change occurred
  +    st_oid     INTEGER,
  +    st_hid     INTEGER DEFAULT nextval('st_seq') NOT NULL,
  +               -- discrete monton increasing value assigned to system time
  +    st_beg     INTEGER
  +               -- system time when system change occurred
   );
   
   DROP TABLE ut CASCADE;
   CREATE TABLE ut (
  -    ut_oid    INTEGER,
  -    ut_beg    INTEGER,
  -    ut_end    INTEGER,
  -    ut_hid    INTEGER
  +    ut_oid     INTEGER, --
  +    ut_beg     INTEGER, --
  +    ut_end     INTEGER, --
  +    ut_hid     INTEGER  --
   );
   
   DROP TABLE ut_no CASCADE;
   CREATE TABLE ut_no (
  -    ut_oid    INTEGER,
  -    ut_beg    INTEGER,
  -    ut_end    INTEGER,
  -    ut_hid    INTEGER,
  -    ut_shid   INTEGER
  +    ut_oid     INTEGER, -- oid
  +    ut_beg     INTEGER, -- user time begin
  +    ut_end     INTEGER, -- user time end
  +    ut_hid     INTEGER, -- user time history id (system time when this entry was made)
  +    ut_hid_max INTEGER  -- user time history id (system time until which this entry is valid)
   );
   
   -- ##
  @@ -61,7 +61,7 @@
       hid := $2;
   
       --  delete all old entries corresponding to OID
  -    DELETE FROM ut_no WHERE ut_oid = oid AND ut_shid = hid;
  +    DELETE FROM ut_no WHERE ut_oid = oid AND ut_hid_max = hid;
   
       --  initialize iteration variables
       pos_prev := -1;
  @@ -99,10 +99,10 @@
               IF alt_this = alt_prev THEN
                   -- RAISE NOTICE ''keeping altitude - consolidating entry'';
                   UPDATE ut_no SET ut_end = pos_next
  -                    WHERE ut_hid = alt_this AND ut_beg = pos_prev AND ut_end = pos_this AND ut_oid = oid AND ut_shid = hid;
  +                    WHERE ut_hid = alt_this AND ut_beg = pos_prev AND ut_end = pos_this AND ut_oid = oid AND ut_hid_max = hid;
               ELSE
                   -- RAISE NOTICE ''changing altitude - new entry'';
  -                INSERT INTO ut_no (ut_hid, ut_oid, ut_beg, ut_end, ut_shid)
  +                INSERT INTO ut_no (ut_hid, ut_oid, ut_beg, ut_end, ut_hid_max)
                       VALUES (alt_this, oid, pos_this, pos_next, hid);
                   pos_prev := pos_this;
               END IF;
  @@ -174,7 +174,7 @@
       arg_ut_end := $2; IF arg_ut_end IS NULL THEN arg_ut_end := 9999; END IF;
       arg_st_beg := $3; IF arg_st_beg IS NULL THEN arg_st_beg := 0;    END IF;
       arg_st_end := $4; IF arg_st_end IS NULL THEN arg_st_end := 9999; END IF;
  -    arg_st_max := $5; IF arg_st_max IS NULL THEN arg_st_max := 1;    END IF;
  +    arg_st_max := $5; IF arg_st_max IS NULL THEN arg_st_max := 0;    END IF;
       
       --  perform the query operation
       IF arg_st_max = 1 THEN
  @@ -188,7 +188,7 @@
                  GROUP BY st_oid
              ) AS st
              WHERE
  -               ut_oid = st_oid AND ut_shid = st_hid
  +               ut_oid = st_oid AND ut_hid_max = st_hid
                  AND (ut_beg <= arg_ut_end AND arg_ut_beg < ut_end)
           LOOP
              RETURN NEXT rec;
  @@ -196,14 +196,14 @@
       ELSE
           --  variant 2: take all system times for each user time and oid
           FOR rec IN
  -           SELECT ut_oid, ut_hid
  +           SELECT DISTINCT ut_oid, ut_hid
              FROM ut_no, (
                  SELECT   st_oid, st_hid
                  FROM     st 
                  WHERE    (arg_st_beg <= st_beg AND st_beg <= arg_st_end)
              ) AS st
              WHERE
  -               ut_oid  = st_oid AND ut_shid = st_hid
  +               ut_oid = st_oid AND ut_hid_max = st_hid
                  AND (ut_beg <= arg_ut_end AND arg_ut_beg < ut_end)
           LOOP
              RETURN NEXT rec;
  @@ -235,40 +235,16 @@
   -- ##  Test Data
   -- ##
   
  --- INSERT INTO ac VALUES (11, 'foo',  1);
  --- INSERT INTO ac VALUES (10, 'foo2', 3);
  --- INSERT INTO ac VALUES (10, 'foo3', 5);
  --- INSERT INTO ac VALUES (10, 'foo',  7);
  --- INSERT INTO ac VALUES (10, 'foo',  9);
  --- 
  --- INSERT INTO ac VALUES (20, 'bar',  2);
  --- INSERT INTO ac VALUES (20, 'bar2', 4);
  --- INSERT INTO ac VALUES (20, 'bar3', 6);
  --- INSERT INTO ac VALUES (20, 'bar',  8);
  --- INSERT INTO ac VALUES (20, 'bar',  10);
  --- 
  --- INSERT INTO st (st_oid,st_beg) VALUES (10, 100);
  --- INSERT INTO st (st_oid,st_beg) VALUES (20, 110);
  --- INSERT INTO st (st_oid,st_beg) VALUES (10, 120);
  --- INSERT INTO st (st_oid,st_beg) VALUES (20, 130);
  --- INSERT INTO st (st_oid,st_beg) VALUES (10, 140);
  --- INSERT INTO st (st_oid,st_beg) VALUES (20, 150);
  --- INSERT INTO st (st_oid,st_beg) VALUES (10, 160);
  --- INSERT INTO st (st_oid,st_beg) VALUES (20, 170);
  --- 
  --- INSERT INTO ut VALUES (10, 100, 9999, 1);
  --- INSERT INTO ut VALUES (10, 102, 9999, 3);
  --- INSERT INTO ut VALUES (10, 104, 9999, 5);
  --- INSERT INTO ut VALUES (10, 106, 9999, 7);
  --- INSERT INTO ut VALUES (10, 100, 200,  9);
  --- 
  --- INSERT INTO ut VALUES (20, 101, 9999,  2);
  --- INSERT INTO ut VALUES (20, 103, 9999,  4);
  --- INSERT INTO ut VALUES (20, 105, 9999,  6);
  --- INSERT INTO ut VALUES (20, 107, 9999,  8);
  --- INSERT INTO ut VALUES (20, 100, 200,  10);
  --- INSERT INTO ut VALUES (20, 300, 400,  10);
  --- INSERT INTO ut VALUES (20, 500, 600,  10);
  +-- #  ^
  +-- #  |
  +-- #  st   hid
  +-- #  2007 #6       |          [==20:bar3=[         |
  +-- #  2006 #5       |          [==20:bar2===========[
  +-- #  2005 #4       [=============20:bar1===========[
  +-- #  2004 #3       [=============10:foo============[
  +-- #  2002 #2       |          [==10:bar==[         |
  +-- #  2001 #1       [==10:foo==[          |         |
  +-- #     ut-->     100        200        300       9999
   
   INSERT INTO st (st_oid,st_beg) VALUES (10, 2001);
   INSERT INTO ut VALUES (10, 100, 200, currval('st_seq'));
  @@ -293,4 +269,22 @@
   INSERT INTO st (st_oid,st_beg) VALUES (20, 2007);
   INSERT INTO ut VALUES (20, 200, 300, currval('st_seq'));
   INSERT INTO ac VALUES (20, 'bar3', currval('st_seq'));
  +
  +-- ##
  +-- ##  Test Usage
  +-- ##
  +
  +select * from ac;
  +select * from ut;
  +select * from ut_no;
  +select * from st;
  +
  +-- whole test data (complete history, i.e. data at all hids), PLAIN
  +SELECT * FROM ac;
  +
  +-- whole history data
  +SELECT * FROM as_hs();
  +
  +-- whole test data (complete history, i.e. data at all hids), WITH HISTORY
  +SELECT * FROM ac, as_hs() WHERE ac_hid = hs_hid;
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jun  5 14:38:38 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1166976D9D; Thu,  5 Jun 2003 14:38:37 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-db/bres/ bres-history.sql
Message-Id: <20030605123837.1166976D9D@mail.ossp.org>
Date: Thu,  5 Jun 2003 14:38:37 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   05-Jun-2003 14:38:37
  Branch: HEAD                             Handle: 2003060513383700

  Modified files:
    ossp-pkg/as/as-db/bres  bres-history.sql

  Log:
    provide more docu

  Summary:
    Revision    Changes     Path
    1.3         +76 -7      ossp-pkg/as/as-db/bres/bres-history.sql
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-db/bres/bres-history.sql
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 bres-history.sql
  --- ossp-pkg/as/as-db/bres/bres-history.sql	5 Jun 2003 10:58:37 -0000	1.2
  +++ ossp-pkg/as/as-db/bres/bres-history.sql	5 Jun 2003 12:38:37 -0000	1.3
  @@ -174,7 +174,7 @@
       arg_ut_end := $2; IF arg_ut_end IS NULL THEN arg_ut_end := 9999; END IF;
       arg_st_beg := $3; IF arg_st_beg IS NULL THEN arg_st_beg := 0;    END IF;
       arg_st_end := $4; IF arg_st_end IS NULL THEN arg_st_end := 9999; END IF;
  -    arg_st_max := $5; IF arg_st_max IS NULL THEN arg_st_max := 0;    END IF;
  +    arg_st_max := $5; IF arg_st_max IS NULL THEN arg_st_max := 1;    END IF;
       
       --  perform the query operation
       IF arg_st_max = 1 THEN
  @@ -235,6 +235,7 @@
   -- ##  Test Data
   -- ##
   
  +-- whole test data as view
   -- #  ^
   -- #  |
   -- #  st   hid
  @@ -246,6 +247,23 @@
   -- #  2001 #1       [==10:foo==[          |         |
   -- #     ut-->     100        200        300       9999
   
  +-- whole test data as raw data
  +-- #  1st (systime hid=1) create record for oid=10, name="foo",  100 <= usertime < 200
  +-- #  2nd (systime hid=2) create record for oid=10, name="bar",  200 <= usertime < 300
  +-- #  3rd (systime hid=3) create record for oid=10, name="foo",  100 <= usertime < oo
  +-- #  4th (systime hid=4) create record for oid=20, name="bar1", 100 <= usertime < oo
  +-- #  5th (systime hid=5) create record for oid=20, name="bar2", 200 <= usertime < oo
  +-- #  6th (systime hid=6) create record for oid=20, name="bar3", 200 <= usertime < 300
  +
  +-- whole test data in prosa
  +-- #  1st create a new record "foo" containing payload valid between usertime 100 upto not including 200
  +-- #  2nd rename "foo" to "bar" and move usertime frame to 200 upto n. i. 300
  +-- #  3rd rename "bar" back to "foo", extend usertime begin back to original 100 and extend usertime end to infinity
  +-- #  4th create a new record "bar1" containing payload valid between usertime 100 and infinity
  +-- #  5th give "bar1" a new name "bar2" beginning with usertime 200
  +-- #  6th another new name "bar3" valid for usertime frame 200 upto n. i. 300
  +
  +-- whole test data injected
   INSERT INTO st (st_oid,st_beg) VALUES (10, 2001);
   INSERT INTO ut VALUES (10, 100, 200, currval('st_seq'));
   INSERT INTO ac VALUES (10, 'foo', currval('st_seq'));
  @@ -279,12 +297,63 @@
   select * from ut_no;
   select * from st;
   
  --- whole test data (complete history, i.e. data at all hids), PLAIN
  +-- whole test data retrieved
   SELECT * FROM ac;
  +-- #   ac_oid | ac_name | ac_hid 
  +-- #  --------+---------+--------
  +-- #       10 | foo     |      1
  +-- #       10 | bar     |      2
  +-- #       10 | foo     |      3
  +-- #       20 | bar1    |      4
  +-- #       20 | bar2    |      5
  +-- #       20 | bar3    |      6
  +-- #  (6 rows)
  +
  +-- for any usertime and any systime, list any valid oid for every point in systime (all oids with full history)
  +SELECT * FROM as_hs(0,9999,0,9999,0);
  +-- #   hs_oid | hs_hid 
  +-- #  --------+--------
  +-- #       10 |      1
  +-- #       10 |      2
  +-- #       10 |      3
  +-- #       20 |      4
  +-- #       20 |      5
  +-- #       20 |      6
  +-- #  (6 rows)
  +
  +-- for any usertime and any systime, list max valid oid for every point in systime (oids with highest altitude)
  +SELECT * FROM as_hs(0,9999,0,9999,1); -- same as SELECT FROM as_hs();
  +-- #   hs_oid | hs_hid 
  +-- #  --------+--------
  +-- #       10 |      3
  +-- #       20 |      4
  +-- #       20 |      6
  +-- #       20 |      5
  +-- #  (4 rows)
   
  --- whole history data
  -SELECT * FROM as_hs();
  -
  --- whole test data (complete history, i.e. data at all hids), WITH HISTORY
  +-- same as previous but join with payload to retrieve more details (details from oids with hightes altitude)
   SELECT * FROM ac, as_hs() WHERE ac_hid = hs_hid;
  -
  +-- #   ac_oid | ac_name | ac_hid | hs_oid | hs_hid 
  +-- #  --------+---------+--------+--------+--------
  +-- #       10 | foo     |      3 |     10 |      3
  +-- #       20 | bar1    |      4 |     20 |      4
  +-- #       20 | bar2    |      5 |     20 |      5
  +-- #       20 | bar3    |      6 |     20 |      6
  +-- #  (4 rows)
  +
  +
  +-- same as previous but we are only interested in oids valid for usertime point 222
  +SELECT * FROM ac, as_hs(222,222,0,9999,1) WHERE ac_hid = hs_hid;
  +-- #   ac_oid | ac_name | ac_hid | hs_oid | hs_hid 
  +-- #  --------+---------+--------+--------+--------
  +-- #       10 | foo     |      3 |     10 |      3
  +-- #       20 | bar3    |      6 |     20 |      6
  +-- #  (2 rows)
  +
  +-- same as previous but we look back in systime 2006
  +SELECT * FROM ac, as_hs(222,222,0,2006,1) WHERE ac_hid = hs_hid;
  +-- #   ac_oid | ac_name | ac_hid | hs_oid | hs_hid 
  +-- #  --------+---------+--------+--------+--------
  +-- #       10 | foo     |      3 |     10 |      3
  +-- #       20 | bar2    |      5 |     20 |      5
  +-- #  (2 rows)
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jun  5 14:43:22 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2FC3F76D9D; Thu,  5 Jun 2003 14:43:22 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-db/bres/ bres-history.sql
Message-Id: <20030605124322.2FC3F76D9D@mail.ossp.org>
Date: Thu,  5 Jun 2003 14:43:22 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Jun-2003 14:43:22
  Branch: HEAD                             Handle: 2003060513432100

  Modified files:
    ossp-pkg/as/as-db/bres  bres-history.sql

  Log:
    remember that we use half-open [..[ intervals in data, but closed
    [...] intervals in query

  Summary:
    Revision    Changes     Path
    1.4         +6  -6      ossp-pkg/as/as-db/bres/bres-history.sql
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-db/bres/bres-history.sql
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 bres-history.sql
  --- ossp-pkg/as/as-db/bres/bres-history.sql	5 Jun 2003 12:38:37 -0000	1.3
  +++ ossp-pkg/as/as-db/bres/bres-history.sql	5 Jun 2003 12:43:21 -0000	1.4
  @@ -25,17 +25,17 @@
   
   DROP TABLE ut CASCADE;
   CREATE TABLE ut (
  -    ut_oid     INTEGER, --
  -    ut_beg     INTEGER, --
  -    ut_end     INTEGER, --
  -    ut_hid     INTEGER  --
  +    ut_oid     INTEGER, -- oid
  +    ut_beg     INTEGER, -- user time begin (inclusive)
  +    ut_end     INTEGER, -- user time end   (exclusive)
  +    ut_hid     INTEGER  -- user time history id (system time when this entry was made)
   );
   
   DROP TABLE ut_no CASCADE;
   CREATE TABLE ut_no (
       ut_oid     INTEGER, -- oid
  -    ut_beg     INTEGER, -- user time begin
  -    ut_end     INTEGER, -- user time end
  +    ut_beg     INTEGER, -- user time begin (inclusive)
  +    ut_end     INTEGER, -- user time end   (exclusive)
       ut_hid     INTEGER, -- user time history id (system time when this entry was made)
       ut_hid_max INTEGER  -- user time history id (system time until which this entry is valid)
   );
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jun  5 14:45:56 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 808AC76D97; Thu,  5 Jun 2003 14:45:56 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-db/bres/ bres-history.sql
Message-Id: <20030605124556.808AC76D97@mail.ossp.org>
Date: Thu,  5 Jun 2003 14:45:56 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Jun-2003 14:45:56
  Branch: HEAD                             Handle: 2003060513455500

  Modified files:
    ossp-pkg/as/as-db/bres  bres-history.sql

  Log:
    remember one more issue

  Summary:
    Revision    Changes     Path
    1.5         +1  -0      ossp-pkg/as/as-db/bres/bres-history.sql
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-db/bres/bres-history.sql
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 bres-history.sql
  --- ossp-pkg/as/as-db/bres/bres-history.sql	5 Jun 2003 12:43:21 -0000	1.4
  +++ ossp-pkg/as/as-db/bres/bres-history.sql	5 Jun 2003 12:45:55 -0000	1.5
  @@ -17,6 +17,7 @@
   DROP TABLE st CASCADE;
   CREATE TABLE st (
       st_oid     INTEGER,
  +               -- redundant stored oid to avoid additional joins on query
       st_hid     INTEGER DEFAULT nextval('st_seq') NOT NULL,
                  -- discrete monton increasing value assigned to system time
       st_beg     INTEGER
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jun  6 10:28:22 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 84C4676D90; Fri,  6 Jun 2003 10:28:22 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/ 00README
Message-Id: <20030606082822.84C4676D90@mail.ossp.org>
Date: Fri,  6 Jun 2003 10:28:22 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Jun-2003 10:28:22
  Branch: HEAD                             Handle: 2003060609282100

  Modified files:
    ossp-pkg/as             00README

  Log:
    remember a few URLs

  Summary:
    Revision    Changes     Path
    1.4         +9  -3      ossp-pkg/as/00README
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/00README
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 00README
  --- ossp-pkg/as/00README	25 Sep 2002 08:06:23 -0000	1.3
  +++ ossp-pkg/as/00README	6 Jun 2003 08:28:21 -0000	1.4
  @@ -16,7 +16,13 @@
     o MOF:
       - http://intra.de.cw.com/gsoc-ip/mof/index.html
     o PostgreSQL:
  -    - http://www.de.postgresql.org/
  -    - http://www.ca.postgresql.org/docs/aw_pgsql_book/index.html
  -    - http://www.commandprompt.com/ppbook/
  +    - Home:  http://www.postgresql.org/
  +    - Docs:  http://www.postgresql.org/docs/view.php?version=7.3&idoc=1&file=index.html
  +    - Book:  http://www.postgresql.org/docs/aw_pgsql_book/index.html
  +    - Book:  http://www.commandprompt.com/ppbook/
  +    - ML:    http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&group=comp.databases.postgresql
  +    - ML:    http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&group=muc.lists.postgres.hackers
  +    - ML:    http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&group=muc.lists.postgres.questions
  +    - SETOF: http://archives.postgresql.org/pgsql-hackers/2002-09/msg01741.php
  +    - RULES: http://archives.postgresql.org/pgsql-bugs/1999-11/msg00034.php
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jun  6 11:46:28 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 31E0976D95; Fri,  6 Jun 2003 11:46:28 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-db/bres/ bres-history.sql
Message-Id: <20030606094628.31E0976D95@mail.ossp.org>
Date: Fri,  6 Jun 2003 11:46:28 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Jun-2003 11:46:27
  Branch: HEAD                             Handle: 2003060610462700

  Modified files:
    ossp-pkg/as/as-db/bres  bres-history.sql

  Log:
    finally convert from INTEGER to TIMESTAMP and cleanup the schema
    definition to closely look like the version we want in as_db.sql

  Summary:
    Revision    Changes     Path
    1.6         +198 -81    ossp-pkg/as/as-db/bres/bres-history.sql
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-db/bres/bres-history.sql
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 bres-history.sql
  --- ossp-pkg/as/as-db/bres/bres-history.sql	5 Jun 2003 12:45:55 -0000	1.5
  +++ ossp-pkg/as/as-db/bres/bres-history.sql	6 Jun 2003 09:46:27 -0000	1.6
  @@ -3,42 +3,107 @@
   -- ##  Create Database Schema
   -- ##
   
  +DROP SEQUENCE st_seq CASCADE;
  +DROP TABLE st CASCADE;
  +DROP TABLE ut CASCADE;
  +DROP TABLE ut_no CASCADE;
   DROP TABLE ac CASCADE;
  -CREATE TABLE ac(
  -    ac_oid     INTEGER,
  -    ac_name    TEXT,
  -    ac_hid     INTEGER
  -);
   
  -DROP SEQUENCE st_seq CASCADE;
  +--  System Time Sequence
   CREATE SEQUENCE st_seq
       INCREMENT 1 MINVALUE 1 START 1;
   
  -DROP TABLE st CASCADE;
  +--  System Time Table
   CREATE TABLE st (
  -    st_oid     INTEGER,
  -               -- redundant stored oid to avoid additional joins on query
  -    st_hid     INTEGER DEFAULT nextval('st_seq') NOT NULL,
  -               -- discrete monton increasing value assigned to system time
  -    st_beg     INTEGER
  -               -- system time when system change occurred
  +    st_oid         BIGINT
  +                   NOT NULL,
  +                   -- REFERENCES as_oid (id_oid)
  +                   -- MATCH FULL DEFERRABLE,
  +                   -- object identifier
  +                   -- [1] (rw)
  +    st_hid         BIGINT
  +                   UNIQUE NOT NULL
  +                   DEFAULT nextval('st_seq'),
  +                   -- history id associated with system time (discrete monoton increasing)
  +                   -- [742] (rw)
  +    st_beg         TIMESTAMP (4) WITH TIME ZONE
  +                   NOT NULL
  +                   -- system time of point in history (not monoton increasing, could backstep)
  +                   -- [2002-01-01 00:00:00.0000] (rw)
   );
   
  -DROP TABLE ut CASCADE;
  +--  User Time Table
   CREATE TABLE ut (
  -    ut_oid     INTEGER, -- oid
  -    ut_beg     INTEGER, -- user time begin (inclusive)
  -    ut_end     INTEGER, -- user time end   (exclusive)
  -    ut_hid     INTEGER  -- user time history id (system time when this entry was made)
  +    ut_oid         BIGINT
  +                   NOT NULL,
  +                   -- REFERENCES as_oid (id_oid)
  +                   -- MATCH FULL DEFERRABLE,
  +                   -- object identifier
  +                   -- [1] (rw)
  +    ut_beg         TIMESTAMP (4) WITH TIME ZONE
  +                   NOT NULL,
  +                   -- user time begin (inclusive)
  +                   -- [2002-01-01 00:00:00.0000] (rw)
  +    ut_end         TIMESTAMP (4) WITH TIME ZONE
  +                   NOT NULL,
  +                   -- user time end (exclusive)
  +                   -- [2002-01-01 00:00:00.0000] (rw)
  +    ut_hid         BIGINT
  +                   NOT NULL
  +                   REFERENCES st (st_hid)
  +                   MATCH FULL DEFERRABLE
  +                   -- user time history identifier
  +                   -- [42] (rw)
   );
   
  -DROP TABLE ut_no CASCADE;
  +--  User Time Table (non-overlapping)
   CREATE TABLE ut_no (
  -    ut_oid     INTEGER, -- oid
  -    ut_beg     INTEGER, -- user time begin (inclusive)
  -    ut_end     INTEGER, -- user time end   (exclusive)
  -    ut_hid     INTEGER, -- user time history id (system time when this entry was made)
  -    ut_hid_max INTEGER  -- user time history id (system time until which this entry is valid)
  +    ut_oid         BIGINT
  +                   NOT NULL,
  +                   -- REFERENCES as_oid (id_oid)
  +                   -- MATCH FULL DEFERRABLE,
  +                   -- object identifier
  +                   -- [1] (rw)
  +    ut_beg         TIMESTAMP (4) WITH TIME ZONE
  +                   NOT NULL,
  +                   -- user time begin (inclusive)
  +                   -- [2002-01-01 00:00:00.0000] (rw)
  +    ut_end         TIMESTAMP (4) WITH TIME ZONE
  +                   NOT NULL,
  +                   -- user time end (exclusive)
  +                   -- [2002-01-01 00:00:00.0000] (rw)
  +    ut_hid         BIGINT
  +                   NOT NULL
  +                   REFERENCES st (st_hid)
  +                   MATCH FULL DEFERRABLE,
  +                   -- user time history identifier
  +                   -- [42] (rw)
  +    ut_hid_max     BIGINT
  +                   NOT NULL
  +                   REFERENCES st (st_hid)
  +                   MATCH FULL DEFERRABLE
  +                   -- user time history identifier (maximum value until which this entry is valid)
  +                   -- [42] (rw)
  +);
  +
  +--  Account Table
  +CREATE TABLE ac(
  +    ac_oid         BIGINT
  +                   NOT NULL,
  +                   -- REFERENCES as_oid (id_oid)
  +                   -- MATCH FULL DEFERRABLE,
  +                   -- object identifier
  +                   -- [1] (rw)
  +    ac_name        TEXT
  +                   NOT NULL,
  +                   -- name of account
  +                   -- [foo] (rw)
  +    ac_hid         BIGINT
  +                   NOT NULL 
  +                   REFERENCES st (st_hid)
  +                   MATCH FULL DEFERRABLE
  +                   -- account history identifier
  +                   -- [42] (rw)
   );
   
   -- ##
  @@ -46,17 +111,17 @@
   -- ##
   
   --  Update function
  -DROP FUNCTION ut_update(INTEGER, INTEGER) CASCADE;
  -CREATE FUNCTION ut_update(INTEGER, INTEGER) 
  +DROP FUNCTION ut_update(BIGINT, BIGINT) CASCADE;
  +CREATE FUNCTION ut_update(BIGINT, BIGINT) 
   RETURNS VOID LANGUAGE 'plpgsql' STABLE AS '
   DECLARE
  -    oid INTEGER;
  -    hid INTEGER;
  -    pos_prev INTEGER;
  -    pos_this INTEGER;
  -    pos_next INTEGER;
  -    alt_this INTEGER;
  -    alt_prev INTEGER;
  +    oid BIGINT;
  +    hid BIGINT;
  +    pos_prev TIMESTAMP (4) WITH TIME ZONE;
  +    pos_this TIMESTAMP (4) WITH TIME ZONE;
  +    pos_next TIMESTAMP (4) WITH TIME ZONE;
  +    alt_this BIGINT;
  +    alt_prev BIGINT;
   BEGIN
       oid := $1;
       hid := $2;
  @@ -65,8 +130,8 @@
       DELETE FROM ut_no WHERE ut_oid = oid AND ut_hid_max = hid;
   
       --  initialize iteration variables
  -    pos_prev := -1;
  -    pos_this := -1;
  +    pos_prev := ''-infinity'';
  +    pos_this := ''-infinity'';
       pos_next := NULL;
       alt_this := NULL;
       alt_prev := NULL;
  @@ -80,7 +145,7 @@
               ) AS result (v)
           );
           IF pos_next IS NULL THEN
  -            pos_next := 9999;
  +            pos_next := ''infinity'';
           END IF;
   
           --  determine current altidude
  @@ -110,7 +175,7 @@
           END IF;
   
           --  stop if maximum is reached
  -        IF pos_next >= 9999 THEN
  +        IF pos_next >= ''infinity'' THEN
              EXIT;
           END IF;
   
  @@ -157,25 +222,27 @@
   
   DROP TYPE as_hs_t CASCADE;
   CREATE TYPE as_hs_t AS (
  -    hs_oid INTEGER,
  -    hs_hid INTEGER
  +    hs_oid BIGINT,
  +    hs_hid BIGINT
   );
  -CREATE OR REPLACE FUNCTION as_hs(INTEGER, INTEGER, INTEGER, INTEGER, INTEGER)
  +CREATE OR REPLACE FUNCTION as_hs
  +(TIMESTAMP (4) WITH TIME ZONE, TIMESTAMP (4) WITH TIME ZONE,
  + TIMESTAMP (4) WITH TIME ZONE, TIMESTAMP (4) WITH TIME ZONE, INTEGER)
   RETURNS SETOF as_hs_t LANGUAGE 'plpgsql' STABLE AS '
   DECLARE
  -    arg_ut_beg INTEGER; -- user   time begin (including)
  -    arg_ut_end INTEGER; -- user   time end   (including)
  -    arg_st_beg INTEGER; -- system time begin (including)
  -    arg_st_end INTEGER; -- system time end   (including)
  -    arg_st_max INTEGER; -- whether to take only maximum system time into account
  +    arg_ut_beg TIMESTAMP (4) WITH TIME ZONE; -- user   time begin (including)
  +    arg_ut_end TIMESTAMP (4) WITH TIME ZONE; -- user   time end   (including)
  +    arg_st_beg TIMESTAMP (4) WITH TIME ZONE; -- system time begin (including)
  +    arg_st_end TIMESTAMP (4) WITH TIME ZONE; -- system time end   (including)
  +    arg_st_max INTEGER;   -- whether to take only maximum system time into account
       rec RECORD;
   BEGIN
       --  pre-process input arguments by providing reasonable defaults
  -    arg_ut_beg := $1; IF arg_ut_beg IS NULL THEN arg_ut_beg := 0;    END IF;
  -    arg_ut_end := $2; IF arg_ut_end IS NULL THEN arg_ut_end := 9999; END IF;
  -    arg_st_beg := $3; IF arg_st_beg IS NULL THEN arg_st_beg := 0;    END IF;
  -    arg_st_end := $4; IF arg_st_end IS NULL THEN arg_st_end := 9999; END IF;
  -    arg_st_max := $5; IF arg_st_max IS NULL THEN arg_st_max := 1;    END IF;
  +    arg_ut_beg := $1; IF arg_ut_beg IS NULL THEN arg_ut_beg := ''-infinity''; END IF;
  +    arg_ut_end := $2; IF arg_ut_end IS NULL THEN arg_ut_end :=  ''infinity''; END IF;
  +    arg_st_beg := $3; IF arg_st_beg IS NULL THEN arg_st_beg := ''-infinity''; END IF;
  +    arg_st_end := $4; IF arg_st_end IS NULL THEN arg_st_end :=  ''infinity''; END IF;
  +    arg_st_max := $5; IF arg_st_max IS NULL THEN arg_st_max := 1;             END IF;
       
       --  perform the query operation
       IF arg_st_max = 1 THEN
  @@ -215,19 +282,22 @@
   ';
   
   --  convinience overloaded function: without "st_max"
  -CREATE OR REPLACE FUNCTION as_hs(INTEGER, INTEGER, INTEGER, INTEGER)
  +CREATE OR REPLACE FUNCTION as_hs
  +(TIMESTAMP (4) WITH TIME ZONE, TIMESTAMP (4) WITH TIME ZONE,
  + TIMESTAMP (4) WITH TIME ZONE, TIMESTAMP (4) WITH TIME ZONE)
   RETURNS SETOF as_hs_t LANGUAGE 'sql' STABLE AS '
       SELECT * FROM as_hs($1, $2, $3, $4, NULL);
   ';
   
   --  convinience overloaded function: without "st" at all
  -CREATE OR REPLACE FUNCTION as_hs(INTEGER, INTEGER)
  +CREATE OR REPLACE FUNCTION as_hs
  +(TIMESTAMP (4) WITH TIME ZONE, TIMESTAMP (4) WITH TIME ZONE)
   RETURNS SETOF as_hs_t LANGUAGE 'sql' STABLE AS '
       SELECT * FROM as_hs($1, $2, NULL, NULL, NULL);
   ';
   
   --  convinience overloaded function: without "ut" and "st" at all
  -CREATE OR REPLACE FUNCTION as_hs()
  +CREATE OR REPLACE FUNCTION as_hs ()
   RETURNS SETOF as_hs_t LANGUAGE 'sql' STABLE AS '
       SELECT * FROM as_hs(NULL, NULL, NULL, NULL, NULL);
   ';
  @@ -237,16 +307,16 @@
   -- ##
   
   -- whole test data as view
  --- #  ^
  --- #  |
  --- #  st   hid
  --- #  2007 #6       |          [==20:bar3=[         |
  --- #  2006 #5       |          [==20:bar2===========[
  --- #  2005 #4       [=============20:bar1===========[
  --- #  2004 #3       [=============10:foo============[
  --- #  2002 #2       |          [==10:bar==[         |
  --- #  2001 #1       [==10:foo==[          |         |
  --- #     ut-->     100        200        300       9999
  +-- #  ^          ^
  +-- #  |          |
  +-- #  st         hid      |          |          |         |
  +-- #  2007-01-01 #6       |          [==20:bar3=[         |
  +-- #  2006-01-01 #5       |          [==20:bar2===========[
  +-- #  2005-01-01 #4       [=============20:bar1===========[
  +-- #  2004-01-01 #3       [=============10:foo============[
  +-- #  2002-01-01 #2       |          [==10:bar==[         |
  +-- #  2001-01-01 #1       [==10:foo==[          |         |
  +-- #           ut-->  0100-01-01 0200-01-01 0300-01-01 infinity
   
   -- whole test data as raw data
   -- #  1st (systime hid=1) create record for oid=10, name="foo",  100 <= usertime < 200
  @@ -265,38 +335,85 @@
   -- #  6th another new name "bar3" valid for usertime frame 200 upto n. i. 300
   
   -- whole test data injected
  -INSERT INTO st (st_oid,st_beg) VALUES (10, 2001);
  -INSERT INTO ut VALUES (10, 100, 200, currval('st_seq'));
  +INSERT INTO st (st_oid,st_beg) VALUES (10, '2001-01-01');
  +INSERT INTO ut VALUES (10, '0100-01-01', '0200-01-01', currval('st_seq'));
   INSERT INTO ac VALUES (10, 'foo', currval('st_seq'));
   
  -INSERT INTO st (st_oid,st_beg) VALUES (10, 2002);
  -INSERT INTO ut VALUES (10, 200, 300, currval('st_seq'));
  +INSERT INTO st (st_oid,st_beg) VALUES (10, '2002-01-01');
  +INSERT INTO ut VALUES (10, '0200-01-01', '0300-01-01', currval('st_seq'));
   INSERT INTO ac VALUES (10, 'bar', currval('st_seq'));
   
  -INSERT INTO st (st_oid,st_beg) VALUES (10, 2004);
  -INSERT INTO ut VALUES (10, 100, 9999, currval('st_seq'));
  +INSERT INTO st (st_oid,st_beg) VALUES (10, '2004-01-01');
  +INSERT INTO ut VALUES (10, '0100-01-01', 'infinity', currval('st_seq'));
   INSERT INTO ac VALUES (10, 'foo', currval('st_seq'));
   
  -INSERT INTO st (st_oid,st_beg) VALUES (20, 2005);
  -INSERT INTO ut VALUES (20, 100, 9999, currval('st_seq'));
  +INSERT INTO st (st_oid,st_beg) VALUES (20, '2005-01-01');
  +INSERT INTO ut VALUES (20, '0100-01-01', 'infinity', currval('st_seq'));
   INSERT INTO ac VALUES (20, 'bar1', currval('st_seq'));
   
  -INSERT INTO st (st_oid,st_beg) VALUES (20, 2006);
  -INSERT INTO ut VALUES (20, 200, 9999, currval('st_seq'));
  +INSERT INTO st (st_oid,st_beg) VALUES (20, '2006-01-01');
  +INSERT INTO ut VALUES (20, '0200-01-01', 'infinity', currval('st_seq'));
   INSERT INTO ac VALUES (20, 'bar2', currval('st_seq'));
   
  -INSERT INTO st (st_oid,st_beg) VALUES (20, 2007);
  -INSERT INTO ut VALUES (20, 200, 300, currval('st_seq'));
  +INSERT INTO st (st_oid,st_beg) VALUES (20, '2007-01-01');
  +INSERT INTO ut VALUES (20, '0200-01-01', '0300-01-01', currval('st_seq'));
   INSERT INTO ac VALUES (20, 'bar3', currval('st_seq'));
   
   -- ##
  --- ##  Test Usage
  +-- ##  Data Dump
   -- ##
   
   select * from ac;
  +-- #  ac_oid | ac_name | ac_hid 
  +-- # --------+---------+--------
  +-- #      10 | foo     |      1
  +-- #      10 | bar     |      2
  +-- #      10 | foo     |      3
  +-- #      20 | bar1    |      4
  +-- #      20 | bar2    |      5
  +-- #      20 | bar3    |      6
  +-- # (6 rows)
  +
   select * from ut;
  +-- #  ut_oid |       ut_beg        |       ut_end        | ut_hid 
  +-- # --------+---------------------+---------------------+--------
  +-- #      10 | 0100-01-01 00:00:00 | 0200-01-01 00:00:00 |      1
  +-- #      10 | 0200-01-01 00:00:00 | 0300-01-01 00:00:00 |      2
  +-- #      10 | 0100-01-01 00:00:00 | infinity            |      3
  +-- #      20 | 0100-01-01 00:00:00 | infinity            |      4
  +-- #      20 | 0200-01-01 00:00:00 | infinity            |      5
  +-- #      20 | 0200-01-01 00:00:00 | 0300-01-01 00:00:00 |      6
  +-- # (6 rows)
  +
   select * from ut_no;
  +-- #  ut_oid |       ut_beg        |       ut_end        | ut_hid | ut_hid_max 
  +-- # --------+---------------------+---------------------+--------+------------
  +-- #      10 | 0100-01-01 00:00:00 | 0200-01-01 00:00:00 |      1 |          1
  +-- #      10 | 0100-01-01 00:00:00 | 0200-01-01 00:00:00 |      1 |          2
  +-- #      10 | 0200-01-01 00:00:00 | 0300-01-01 00:00:00 |      2 |          2
  +-- #      10 | 0100-01-01 00:00:00 | infinity            |      3 |          3
  +-- #      20 | 0100-01-01 00:00:00 | infinity            |      4 |          4
  +-- #      20 | 0100-01-01 00:00:00 | 0200-01-01 00:00:00 |      4 |          5
  +-- #      20 | 0200-01-01 00:00:00 | infinity            |      5 |          5
  +-- #      20 | 0100-01-01 00:00:00 | 0200-01-01 00:00:00 |      4 |          6
  +-- #      20 | 0200-01-01 00:00:00 | 0300-01-01 00:00:00 |      6 |          6
  +-- #      20 | 0300-01-01 00:00:00 | infinity            |      5 |          6
  +-- # (10 rows)
  +
   select * from st;
  +-- #  st_oid | st_hid |         st_beg         
  +-- # --------+--------+------------------------
  +-- #      10 |      1 | 2001-01-01 00:00:00+01
  +-- #      10 |      2 | 2002-01-01 00:00:00+01
  +-- #      10 |      3 | 2004-01-01 00:00:00+01
  +-- #      20 |      4 | 2005-01-01 00:00:00+01
  +-- #      20 |      5 | 2006-01-01 00:00:00+01
  +-- #      20 |      6 | 2007-01-01 00:00:00+01
  +-- # (6 rows)
  +
  +-- ##
  +-- ##  Test Usage
  +-- ##
   
   -- whole test data retrieved
   SELECT * FROM ac;
  @@ -311,7 +428,7 @@
   -- #  (6 rows)
   
   -- for any usertime and any systime, list any valid oid for every point in systime (all oids with full history)
  -SELECT * FROM as_hs(0,9999,0,9999,0);
  +SELECT * FROM as_hs('-infinity','infinity','-infinity','infinity',0);
   -- #   hs_oid | hs_hid 
   -- #  --------+--------
   -- #       10 |      1
  @@ -323,7 +440,7 @@
   -- #  (6 rows)
   
   -- for any usertime and any systime, list max valid oid for every point in systime (oids with highest altitude)
  -SELECT * FROM as_hs(0,9999,0,9999,1); -- same as SELECT FROM as_hs();
  +SELECT * FROM as_hs('-infinity','infinity','-infinity','infinity',1); -- same as SELECT FROM as_hs();
   -- #   hs_oid | hs_hid 
   -- #  --------+--------
   -- #       10 |      3
  @@ -342,9 +459,8 @@
   -- #       20 | bar3    |      6 |     20 |      6
   -- #  (4 rows)
   
  -
   -- same as previous but we are only interested in oids valid for usertime point 222
  -SELECT * FROM ac, as_hs(222,222,0,9999,1) WHERE ac_hid = hs_hid;
  +SELECT * FROM ac, as_hs('0222-01-01','0222-01-01','-infinity','infinity',1) WHERE ac_hid = hs_hid;
   -- #   ac_oid | ac_name | ac_hid | hs_oid | hs_hid 
   -- #  --------+---------+--------+--------+--------
   -- #       10 | foo     |      3 |     10 |      3
  @@ -352,9 +468,10 @@
   -- #  (2 rows)
   
   -- same as previous but we look back in systime 2006
  -SELECT * FROM ac, as_hs(222,222,0,2006,1) WHERE ac_hid = hs_hid;
  +SELECT * FROM ac, as_hs('0222-01-01','0222-01-01','-infinity','2006-01-01',1) WHERE ac_hid = hs_hid;
   -- #   ac_oid | ac_name | ac_hid | hs_oid | hs_hid 
   -- #  --------+---------+--------+--------+--------
   -- #       10 | foo     |      3 |     10 |      3
   -- #       20 | bar2    |      5 |     20 |      5
   -- #  (2 rows)
  +
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jun  6 12:09:19 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AD8CC76D92; Fri,  6 Jun 2003 12:09:18 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-db/bres/ bres-history.sql
Message-Id: <20030606100918.AD8CC76D92@mail.ossp.org>
Date: Fri,  6 Jun 2003 12:09:18 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Jun-2003 12:09:18
  Branch: HEAD                             Handle: 2003060611091700

  Modified files:
    ossp-pkg/as/as-db/bres  bres-history.sql

  Log:
    use also the final table names for as_db.sql

  Summary:
    Revision    Changes     Path
    1.7         +65 -65     ossp-pkg/as/as-db/bres/bres-history.sql
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-db/bres/bres-history.sql
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 bres-history.sql
  --- ossp-pkg/as/as-db/bres/bres-history.sql	6 Jun 2003 09:46:27 -0000	1.6
  +++ ossp-pkg/as/as-db/bres/bres-history.sql	6 Jun 2003 10:09:17 -0000	1.7
  @@ -3,18 +3,18 @@
   -- ##  Create Database Schema
   -- ##
   
  -DROP SEQUENCE st_seq CASCADE;
  -DROP TABLE st CASCADE;
  -DROP TABLE ut CASCADE;
  -DROP TABLE ut_no CASCADE;
  -DROP TABLE ac CASCADE;
  +DROP SEQUENCE as_hs_st_seq CASCADE;
  +DROP TABLE as_hs_st CASCADE;
  +DROP TABLE as_hs_ut CASCADE;
  +DROP TABLE as_hs_ut_no CASCADE;
  +DROP TABLE as_account CASCADE;
   
   --  System Time Sequence
  -CREATE SEQUENCE st_seq
  +CREATE SEQUENCE as_hs_st_seq
       INCREMENT 1 MINVALUE 1 START 1;
   
   --  System Time Table
  -CREATE TABLE st (
  +CREATE TABLE as_hs_st (
       st_oid         BIGINT
                      NOT NULL,
                      -- REFERENCES as_oid (id_oid)
  @@ -23,7 +23,7 @@
                      -- [1] (rw)
       st_hid         BIGINT
                      UNIQUE NOT NULL
  -                   DEFAULT nextval('st_seq'),
  +                   DEFAULT nextval('as_hs_st_seq'),
                      -- history id associated with system time (discrete monoton increasing)
                      -- [742] (rw)
       st_beg         TIMESTAMP (4) WITH TIME ZONE
  @@ -33,7 +33,7 @@
   );
   
   --  User Time Table
  -CREATE TABLE ut (
  +CREATE TABLE as_hs_ut (
       ut_oid         BIGINT
                      NOT NULL,
                      -- REFERENCES as_oid (id_oid)
  @@ -50,14 +50,14 @@
                      -- [2002-01-01 00:00:00.0000] (rw)
       ut_hid         BIGINT
                      NOT NULL
  -                   REFERENCES st (st_hid)
  +                   REFERENCES as_hs_st (st_hid)
                      MATCH FULL DEFERRABLE
                      -- user time history identifier
                      -- [42] (rw)
   );
   
   --  User Time Table (non-overlapping)
  -CREATE TABLE ut_no (
  +CREATE TABLE as_hs_ut_no (
       ut_oid         BIGINT
                      NOT NULL,
                      -- REFERENCES as_oid (id_oid)
  @@ -74,20 +74,20 @@
                      -- [2002-01-01 00:00:00.0000] (rw)
       ut_hid         BIGINT
                      NOT NULL
  -                   REFERENCES st (st_hid)
  +                   REFERENCES as_hs_st (st_hid)
                      MATCH FULL DEFERRABLE,
                      -- user time history identifier
                      -- [42] (rw)
       ut_hid_max     BIGINT
                      NOT NULL
  -                   REFERENCES st (st_hid)
  +                   REFERENCES as_hs_st (st_hid)
                      MATCH FULL DEFERRABLE
                      -- user time history identifier (maximum value until which this entry is valid)
                      -- [42] (rw)
   );
   
   --  Account Table
  -CREATE TABLE ac(
  +CREATE TABLE as_account(
       ac_oid         BIGINT
                      NOT NULL,
                      -- REFERENCES as_oid (id_oid)
  @@ -100,14 +100,14 @@
                      -- [foo] (rw)
       ac_hid         BIGINT
                      NOT NULL 
  -                   REFERENCES st (st_hid)
  +                   REFERENCES as_hs_st (st_hid)
                      MATCH FULL DEFERRABLE
                      -- account history identifier
                      -- [42] (rw)
   );
   
   -- ##
  --- ##  Update ut_no table for ut change on particular OID
  +-- ##  Update as_hs_ut_no table for as_hs_ut change on particular OID
   -- ##
   
   --  Update function
  @@ -127,7 +127,7 @@
       hid := $2;
   
       --  delete all old entries corresponding to OID
  -    DELETE FROM ut_no WHERE ut_oid = oid AND ut_hid_max = hid;
  +    DELETE FROM as_hs_ut_no WHERE ut_oid = oid AND ut_hid_max = hid;
   
       --  initialize iteration variables
       pos_prev := ''-infinity'';
  @@ -140,8 +140,8 @@
           --  determine next position from existing begin/end positions
           pos_next := (
               SELECT min(v) FROM (
  -                    (SELECT min(ut_beg) FROM ut WHERE ut_beg > pos_this AND ut_oid = oid AND ut_hid <= hid)
  -              UNION (SELECT min(ut_end) FROM ut WHERE ut_end > pos_this AND ut_oid = oid AND ut_hid <= hid)
  +                    (SELECT min(ut_beg) FROM as_hs_ut WHERE ut_beg > pos_this AND ut_oid = oid AND ut_hid <= hid)
  +              UNION (SELECT min(ut_end) FROM as_hs_ut WHERE ut_end > pos_this AND ut_oid = oid AND ut_hid <= hid)
               ) AS result (v)
           );
           IF pos_next IS NULL THEN
  @@ -150,7 +150,7 @@
   
           --  determine current altidude
           alt_this := (
  -            SELECT max(ut_hid) FROM ut
  +            SELECT max(ut_hid) FROM as_hs_ut
               WHERE ut_beg <= pos_this AND pos_this < ut_end AND ut_oid = oid AND ut_hid <= hid
           );
           IF alt_this IS NULL THEN
  @@ -164,11 +164,11 @@
           ELSE
               IF alt_this = alt_prev THEN
                   -- RAISE NOTICE ''keeping altitude - consolidating entry'';
  -                UPDATE ut_no SET ut_end = pos_next
  +                UPDATE as_hs_ut_no SET ut_end = pos_next
                       WHERE ut_hid = alt_this AND ut_beg = pos_prev AND ut_end = pos_this AND ut_oid = oid AND ut_hid_max = hid;
               ELSE
                   -- RAISE NOTICE ''changing altitude - new entry'';
  -                INSERT INTO ut_no (ut_hid, ut_oid, ut_beg, ut_end, ut_hid_max)
  +                INSERT INTO as_hs_ut_no (ut_hid, ut_oid, ut_beg, ut_end, ut_hid_max)
                       VALUES (alt_this, oid, pos_this, pos_next, hid);
                   pos_prev := pos_this;
               END IF;
  @@ -204,10 +204,10 @@
   ';
   
   --  Global Trigger
  --- DROP TRIGGER ut_trigger ON ut CASCADE;
  +-- DROP TRIGGER ut_trigger ON as_hs_ut CASCADE;
   CREATE TRIGGER ut_trigger
       AFTER INSERT OR UPDATE OR DELETE
  -    ON ut FOR EACH ROW
  +    ON as_hs_ut FOR EACH ROW
       EXECUTE PROCEDURE ut_trigger ();
   
   -- ##
  @@ -249,12 +249,12 @@
           --  variant 1: take only maximum system time for each user time and oid
           FOR rec IN
              SELECT ut_oid, ut_hid
  -           FROM ut_no, (
  +           FROM as_hs_ut_no, (
                  SELECT   st_oid, max(st_hid) AS st_hid
  -               FROM     st 
  +               FROM     as_hs_st 
                  WHERE    (arg_st_beg <= st_beg AND st_beg <= arg_st_end)
                  GROUP BY st_oid
  -           ) AS st
  +           ) AS as_hs_st
              WHERE
                  ut_oid = st_oid AND ut_hid_max = st_hid
                  AND (ut_beg <= arg_ut_end AND arg_ut_beg < ut_end)
  @@ -265,11 +265,11 @@
           --  variant 2: take all system times for each user time and oid
           FOR rec IN
              SELECT DISTINCT ut_oid, ut_hid
  -           FROM ut_no, (
  +           FROM as_hs_ut_no, (
                  SELECT   st_oid, st_hid
  -               FROM     st 
  +               FROM     as_hs_st 
                  WHERE    (arg_st_beg <= st_beg AND st_beg <= arg_st_end)
  -           ) AS st
  +           ) AS as_hs_st
              WHERE
                  ut_oid = st_oid AND ut_hid_max = st_hid
                  AND (ut_beg <= arg_ut_end AND arg_ut_beg < ut_end)
  @@ -289,14 +289,14 @@
       SELECT * FROM as_hs($1, $2, $3, $4, NULL);
   ';
   
  ---  convinience overloaded function: without "st" at all
  +--  convinience overloaded function: without "as_hs_st" at all
   CREATE OR REPLACE FUNCTION as_hs
   (TIMESTAMP (4) WITH TIME ZONE, TIMESTAMP (4) WITH TIME ZONE)
   RETURNS SETOF as_hs_t LANGUAGE 'sql' STABLE AS '
       SELECT * FROM as_hs($1, $2, NULL, NULL, NULL);
   ';
   
  ---  convinience overloaded function: without "ut" and "st" at all
  +--  convinience overloaded function: without "as_hs_ut" and "as_hs_st" at all
   CREATE OR REPLACE FUNCTION as_hs ()
   RETURNS SETOF as_hs_t LANGUAGE 'sql' STABLE AS '
       SELECT * FROM as_hs(NULL, NULL, NULL, NULL, NULL);
  @@ -309,14 +309,14 @@
   -- whole test data as view
   -- #  ^          ^
   -- #  |          |
  --- #  st         hid      |          |          |         |
  +-- #  as_hs_st         hid      |          |          |         |
   -- #  2007-01-01 #6       |          [==20:bar3=[         |
   -- #  2006-01-01 #5       |          [==20:bar2===========[
   -- #  2005-01-01 #4       [=============20:bar1===========[
   -- #  2004-01-01 #3       [=============10:foo============[
   -- #  2002-01-01 #2       |          [==10:bar==[         |
   -- #  2001-01-01 #1       [==10:foo==[          |         |
  --- #           ut-->  0100-01-01 0200-01-01 0300-01-01 infinity
  +-- #           as_hs_ut-->  0100-01-01 0200-01-01 0300-01-01 infinity
   
   -- whole test data as raw data
   -- #  1st (systime hid=1) create record for oid=10, name="foo",  100 <= usertime < 200
  @@ -335,35 +335,35 @@
   -- #  6th another new name "bar3" valid for usertime frame 200 upto n. i. 300
   
   -- whole test data injected
  -INSERT INTO st (st_oid,st_beg) VALUES (10, '2001-01-01');
  -INSERT INTO ut VALUES (10, '0100-01-01', '0200-01-01', currval('st_seq'));
  -INSERT INTO ac VALUES (10, 'foo', currval('st_seq'));
  -
  -INSERT INTO st (st_oid,st_beg) VALUES (10, '2002-01-01');
  -INSERT INTO ut VALUES (10, '0200-01-01', '0300-01-01', currval('st_seq'));
  -INSERT INTO ac VALUES (10, 'bar', currval('st_seq'));
  -
  -INSERT INTO st (st_oid,st_beg) VALUES (10, '2004-01-01');
  -INSERT INTO ut VALUES (10, '0100-01-01', 'infinity', currval('st_seq'));
  -INSERT INTO ac VALUES (10, 'foo', currval('st_seq'));
  -
  -INSERT INTO st (st_oid,st_beg) VALUES (20, '2005-01-01');
  -INSERT INTO ut VALUES (20, '0100-01-01', 'infinity', currval('st_seq'));
  -INSERT INTO ac VALUES (20, 'bar1', currval('st_seq'));
  -
  -INSERT INTO st (st_oid,st_beg) VALUES (20, '2006-01-01');
  -INSERT INTO ut VALUES (20, '0200-01-01', 'infinity', currval('st_seq'));
  -INSERT INTO ac VALUES (20, 'bar2', currval('st_seq'));
  -
  -INSERT INTO st (st_oid,st_beg) VALUES (20, '2007-01-01');
  -INSERT INTO ut VALUES (20, '0200-01-01', '0300-01-01', currval('st_seq'));
  -INSERT INTO ac VALUES (20, 'bar3', currval('st_seq'));
  +INSERT INTO as_hs_st (st_oid,st_beg) VALUES (10, '2001-01-01');
  +INSERT INTO as_hs_ut VALUES (10, '0100-01-01', '0200-01-01', currval('as_hs_st_seq'));
  +INSERT INTO as_account VALUES (10, 'foo', currval('as_hs_st_seq'));
  +
  +INSERT INTO as_hs_st (st_oid,st_beg) VALUES (10, '2002-01-01');
  +INSERT INTO as_hs_ut VALUES (10, '0200-01-01', '0300-01-01', currval('as_hs_st_seq'));
  +INSERT INTO as_account VALUES (10, 'bar', currval('as_hs_st_seq'));
  +
  +INSERT INTO as_hs_st (st_oid,st_beg) VALUES (10, '2004-01-01');
  +INSERT INTO as_hs_ut VALUES (10, '0100-01-01', 'infinity', currval('as_hs_st_seq'));
  +INSERT INTO as_account VALUES (10, 'foo', currval('as_hs_st_seq'));
  +
  +INSERT INTO as_hs_st (st_oid,st_beg) VALUES (20, '2005-01-01');
  +INSERT INTO as_hs_ut VALUES (20, '0100-01-01', 'infinity', currval('as_hs_st_seq'));
  +INSERT INTO as_account VALUES (20, 'bar1', currval('as_hs_st_seq'));
  +
  +INSERT INTO as_hs_st (st_oid,st_beg) VALUES (20, '2006-01-01');
  +INSERT INTO as_hs_ut VALUES (20, '0200-01-01', 'infinity', currval('as_hs_st_seq'));
  +INSERT INTO as_account VALUES (20, 'bar2', currval('as_hs_st_seq'));
  +
  +INSERT INTO as_hs_st (st_oid,st_beg) VALUES (20, '2007-01-01');
  +INSERT INTO as_hs_ut VALUES (20, '0200-01-01', '0300-01-01', currval('as_hs_st_seq'));
  +INSERT INTO as_account VALUES (20, 'bar3', currval('as_hs_st_seq'));
   
   -- ##
   -- ##  Data Dump
   -- ##
   
  -select * from ac;
  +select * from as_account;
   -- #  ac_oid | ac_name | ac_hid 
   -- # --------+---------+--------
   -- #      10 | foo     |      1
  @@ -374,7 +374,7 @@
   -- #      20 | bar3    |      6
   -- # (6 rows)
   
  -select * from ut;
  +select * from as_hs_ut;
   -- #  ut_oid |       ut_beg        |       ut_end        | ut_hid 
   -- # --------+---------------------+---------------------+--------
   -- #      10 | 0100-01-01 00:00:00 | 0200-01-01 00:00:00 |      1
  @@ -385,7 +385,7 @@
   -- #      20 | 0200-01-01 00:00:00 | 0300-01-01 00:00:00 |      6
   -- # (6 rows)
   
  -select * from ut_no;
  +select * from as_hs_ut_no;
   -- #  ut_oid |       ut_beg        |       ut_end        | ut_hid | ut_hid_max 
   -- # --------+---------------------+---------------------+--------+------------
   -- #      10 | 0100-01-01 00:00:00 | 0200-01-01 00:00:00 |      1 |          1
  @@ -400,7 +400,7 @@
   -- #      20 | 0300-01-01 00:00:00 | infinity            |      5 |          6
   -- # (10 rows)
   
  -select * from st;
  +select * from as_hs_st;
   -- #  st_oid | st_hid |         st_beg         
   -- # --------+--------+------------------------
   -- #      10 |      1 | 2001-01-01 00:00:00+01
  @@ -416,7 +416,7 @@
   -- ##
   
   -- whole test data retrieved
  -SELECT * FROM ac;
  +SELECT * FROM as_account;
   -- #   ac_oid | ac_name | ac_hid 
   -- #  --------+---------+--------
   -- #       10 | foo     |      1
  @@ -450,7 +450,7 @@
   -- #  (4 rows)
   
   -- same as previous but join with payload to retrieve more details (details from oids with hightes altitude)
  -SELECT * FROM ac, as_hs() WHERE ac_hid = hs_hid;
  +SELECT * FROM as_account, as_hs() WHERE ac_hid = hs_hid;
   -- #   ac_oid | ac_name | ac_hid | hs_oid | hs_hid 
   -- #  --------+---------+--------+--------+--------
   -- #       10 | foo     |      3 |     10 |      3
  @@ -460,7 +460,7 @@
   -- #  (4 rows)
   
   -- same as previous but we are only interested in oids valid for usertime point 222
  -SELECT * FROM ac, as_hs('0222-01-01','0222-01-01','-infinity','infinity',1) WHERE ac_hid = hs_hid;
  +SELECT * FROM as_account, as_hs('0222-01-01','0222-01-01','-infinity','infinity',1) WHERE ac_hid = hs_hid;
   -- #   ac_oid | ac_name | ac_hid | hs_oid | hs_hid 
   -- #  --------+---------+--------+--------+--------
   -- #       10 | foo     |      3 |     10 |      3
  @@ -468,7 +468,7 @@
   -- #  (2 rows)
   
   -- same as previous but we look back in systime 2006
  -SELECT * FROM ac, as_hs('0222-01-01','0222-01-01','-infinity','2006-01-01',1) WHERE ac_hid = hs_hid;
  +SELECT * FROM as_account, as_hs('0222-01-01','0222-01-01','-infinity','2006-01-01',1) WHERE ac_hid = hs_hid;
   -- #   ac_oid | ac_name | ac_hid | hs_oid | hs_hid 
   -- #  --------+---------+--------+--------+--------
   -- #       10 | foo     |      3 |     10 |      3
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jun  6 15:33:44 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 11C2276D94; Fri,  6 Jun 2003 15:33:43 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-db/bres/ bres-history.sql
Message-Id: <20030606133343.11C2276D94@mail.ossp.org>
Date: Fri,  6 Jun 2003 15:33:43 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Jun-2003 15:33:43
  Branch: HEAD                             Handle: 2003060614334300

  Modified files:
    ossp-pkg/as/as-db/bres  bres-history.sql

  Log:
    add as_hs_make() constructor function

  Summary:
    Revision    Changes     Path
    1.8         +96 -5      ossp-pkg/as/as-db/bres/bres-history.sql
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-db/bres/bres-history.sql
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 bres-history.sql
  --- ossp-pkg/as/as-db/bres/bres-history.sql	6 Jun 2003 10:09:17 -0000	1.7
  +++ ossp-pkg/as/as-db/bres/bres-history.sql	6 Jun 2003 13:33:43 -0000	1.8
  @@ -28,6 +28,7 @@
                      -- [742] (rw)
       st_beg         TIMESTAMP (4) WITH TIME ZONE
                      NOT NULL
  +                   DEFAULT 'now'
                      -- system time of point in history (not monoton increasing, could backstep)
                      -- [2002-01-01 00:00:00.0000] (rw)
   );
  @@ -41,11 +42,13 @@
                      -- object identifier
                      -- [1] (rw)
       ut_beg         TIMESTAMP (4) WITH TIME ZONE
  -                   NOT NULL,
  +                   NOT NULL
  +                   DEFAULT 'now',
                      -- user time begin (inclusive)
                      -- [2002-01-01 00:00:00.0000] (rw)
       ut_end         TIMESTAMP (4) WITH TIME ZONE
  -                   NOT NULL,
  +                   NOT NULL
  +                   DEFAULT 'infinity',
                      -- user time end (exclusive)
                      -- [2002-01-01 00:00:00.0000] (rw)
       ut_hid         BIGINT
  @@ -65,11 +68,13 @@
                      -- object identifier
                      -- [1] (rw)
       ut_beg         TIMESTAMP (4) WITH TIME ZONE
  -                   NOT NULL,
  +                   NOT NULL
  +                   DEFAULT 'now',
                      -- user time begin (inclusive)
                      -- [2002-01-01 00:00:00.0000] (rw)
       ut_end         TIMESTAMP (4) WITH TIME ZONE
  -                   NOT NULL,
  +                   NOT NULL
  +                   DEFAULT 'infinity',
                      -- user time end (exclusive)
                      -- [2002-01-01 00:00:00.0000] (rw)
       ut_hid         BIGINT
  @@ -211,8 +216,79 @@
       EXECUTE PROCEDURE ut_trigger ();
   
   -- ##
  +-- ##   Make History Tracking
  +-- ##   hid := as_hs_make([oid[, ut_beg, ut_end[, st_beg]]])
  +-- ##
  +
  +-- full featured implementation: as_hs_make(oid, ut_beg, ut_end, st_beg)
  +CREATE OR REPLACE FUNCTION as_hs_make
  +(BIGINT, TIMESTAMP (4) WITH TIME ZONE, TIMESTAMP (4) WITH TIME ZONE, TIMESTAMP (4) WITH TIME ZONE) 
  +RETURNS BIGINT LANGUAGE 'plpgsql' STABLE AS '
  +DECLARE
  +    var_oid    BIGINT;
  +    var_ut_beg TIMESTAMP (4) WITH TIME ZONE;
  +    var_ut_end TIMESTAMP (4) WITH TIME ZONE;
  +    var_st_beg TIMESTAMP (4) WITH TIME ZONE;
  +    var_hid    BIGINT;
  +BEGIN
  +    var_oid    := $1;
  +    var_ut_beg := $2; IF var_ut_beg IS NULL THEN var_ut_beg := now();        END IF;
  +    var_ut_end := $3; IF var_ut_end IS NULL THEN var_ut_end := ''infinity''; END IF;
  +    var_st_beg := $4; IF var_st_beg IS NULL THEN var_st_beg := now();        END IF;
  +    var_hid    := NULL;
  +    IF var_oid IS NOT NULL THEN
  +        --  create new system time entry
  +        INSERT INTO as_hs_st (st_oid, st_beg)
  +            VALUES (var_oid, var_st_beg);
  +        var_hid := currval(''as_hs_st_seq'');
  +        --  create new user time entry
  +        INSERT INTO as_hs_ut (ut_oid, ut_beg, ut_end, ut_hid)
  +            VALUES (var_oid, var_ut_beg, var_ut_end, var_hid);
  +    ELSE
  +        --  return just the current/maximum history id
  +        var_hid := currval(''as_hs_st_seq'');
  +    END IF;
  +    RETURN var_hid;
  +END;
  +';
  +
  +-- overloading: as_hs_make(oid, ut_beg, ut_end)
  +CREATE OR REPLACE FUNCTION as_hs_make
  +(BIGINT, TIMESTAMP (4) WITH TIME ZONE, TIMESTAMP (4) WITH TIME ZONE) 
  +RETURNS BIGINT LANGUAGE 'plpgsql' STABLE AS '
  +BEGIN
  +    RETURN as_hs_make($1, $2, $3, NULL);
  +END;
  +';
  +
  +-- overloading: as_hs_make(oid, ut_beg)
  +CREATE OR REPLACE FUNCTION as_hs_make
  +(BIGINT, TIMESTAMP (4) WITH TIME ZONE)
  +RETURNS BIGINT LANGUAGE 'plpgsql' STABLE AS '
  +BEGIN
  +    RETURN as_hs_make($1, $2, NULL, NULL);
  +END;
  +';
  +
  +-- overloading: as_hs_make(oid)
  +CREATE OR REPLACE FUNCTION as_hs_make(BIGINT) 
  +RETURNS BIGINT LANGUAGE 'plpgsql' STABLE AS '
  +BEGIN
  +    RETURN as_hs_make($1, NULL, NULL, NULL);
  +END;
  +';
  +
  +-- overloading: as_hs_make()
  +CREATE OR REPLACE FUNCTION as_hs_make() 
  +RETURNS BIGINT LANGUAGE 'plpgsql' STABLE AS '
  +BEGIN
  +    RETURN as_hs_make(NULL, NULL, NULL, NULL);
  +END;
  +';
  +
  +-- ##
   -- ##   Dynamic History Table
  --- ##   <oid, hid-max>* := as_hs(ut_beg, ut_end[, st_beg, st_end[, st_max]])
  +-- ##   <oid, hid-max>* := as_hs(ut_beg[, ut_end[, st_beg[, st_end[, st_max]]]])
   -- ##
   
   -- This finds (optionally only maximum) oid/hid combinations between
  @@ -289,11 +365,26 @@
       SELECT * FROM as_hs($1, $2, $3, $4, NULL);
   ';
   
  +--  convinience overloaded function: without "st_end"
  +CREATE OR REPLACE FUNCTION as_hs
  +(TIMESTAMP (4) WITH TIME ZONE, TIMESTAMP (4) WITH TIME ZONE,
  + TIMESTAMP (4) WITH TIME ZONE)
  +RETURNS SETOF as_hs_t LANGUAGE 'sql' STABLE AS '
  +    SELECT * FROM as_hs($1, $2, $3, NULL, NULL);
  +';
  +
   --  convinience overloaded function: without "as_hs_st" at all
   CREATE OR REPLACE FUNCTION as_hs
   (TIMESTAMP (4) WITH TIME ZONE, TIMESTAMP (4) WITH TIME ZONE)
   RETURNS SETOF as_hs_t LANGUAGE 'sql' STABLE AS '
       SELECT * FROM as_hs($1, $2, NULL, NULL, NULL);
  +';
  +
  +--  convinience overloaded function: without "ut_end" at all
  +CREATE OR REPLACE FUNCTION as_hs
  +(TIMESTAMP (4) WITH TIME ZONE)
  +RETURNS SETOF as_hs_t LANGUAGE 'sql' STABLE AS '
  +    SELECT * FROM as_hs($1, NULL, NULL, NULL, NULL);
   ';
   
   --  convinience overloaded function: without "as_hs_ut" and "as_hs_st" at all
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jun  6 15:40:46 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B501976D94; Fri,  6 Jun 2003 15:40:46 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-db/bres/ bres-history.sql
Message-Id: <20030606134046.B501976D94@mail.ossp.org>
Date: Fri,  6 Jun 2003 15:40:46 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Jun-2003 15:40:46
  Branch: HEAD                             Handle: 2003060614404600

  Modified files:
    ossp-pkg/as/as-db/bres  bres-history.sql

  Log:
    greatly simplify creation of sample data by using the new as_hs_make()
    constructor

  Summary:
    Revision    Changes     Path
    1.9         +6  -23     ossp-pkg/as/as-db/bres/bres-history.sql
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-db/bres/bres-history.sql
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 bres-history.sql
  --- ossp-pkg/as/as-db/bres/bres-history.sql	6 Jun 2003 13:33:43 -0000	1.8
  +++ ossp-pkg/as/as-db/bres/bres-history.sql	6 Jun 2003 13:40:46 -0000	1.9
  @@ -426,29 +426,12 @@
   -- #  6th another new name "bar3" valid for usertime frame 200 upto n. i. 300
   
   -- whole test data injected
  -INSERT INTO as_hs_st (st_oid,st_beg) VALUES (10, '2001-01-01');
  -INSERT INTO as_hs_ut VALUES (10, '0100-01-01', '0200-01-01', currval('as_hs_st_seq'));
  -INSERT INTO as_account VALUES (10, 'foo', currval('as_hs_st_seq'));
  -
  -INSERT INTO as_hs_st (st_oid,st_beg) VALUES (10, '2002-01-01');
  -INSERT INTO as_hs_ut VALUES (10, '0200-01-01', '0300-01-01', currval('as_hs_st_seq'));
  -INSERT INTO as_account VALUES (10, 'bar', currval('as_hs_st_seq'));
  -
  -INSERT INTO as_hs_st (st_oid,st_beg) VALUES (10, '2004-01-01');
  -INSERT INTO as_hs_ut VALUES (10, '0100-01-01', 'infinity', currval('as_hs_st_seq'));
  -INSERT INTO as_account VALUES (10, 'foo', currval('as_hs_st_seq'));
  -
  -INSERT INTO as_hs_st (st_oid,st_beg) VALUES (20, '2005-01-01');
  -INSERT INTO as_hs_ut VALUES (20, '0100-01-01', 'infinity', currval('as_hs_st_seq'));
  -INSERT INTO as_account VALUES (20, 'bar1', currval('as_hs_st_seq'));
  -
  -INSERT INTO as_hs_st (st_oid,st_beg) VALUES (20, '2006-01-01');
  -INSERT INTO as_hs_ut VALUES (20, '0200-01-01', 'infinity', currval('as_hs_st_seq'));
  -INSERT INTO as_account VALUES (20, 'bar2', currval('as_hs_st_seq'));
  -
  -INSERT INTO as_hs_st (st_oid,st_beg) VALUES (20, '2007-01-01');
  -INSERT INTO as_hs_ut VALUES (20, '0200-01-01', '0300-01-01', currval('as_hs_st_seq'));
  -INSERT INTO as_account VALUES (20, 'bar3', currval('as_hs_st_seq'));
  +INSERT INTO as_account VALUES (10, 'foo',  as_hs_make(10, '0100-01-01', '0200-01-01', '2001-01-01'));
  +INSERT INTO as_account VALUES (10, 'bar',  as_hs_make(10, '0200-01-01', '0300-01-01', '2002-01-01'));
  +INSERT INTO as_account VALUES (10, 'foo',  as_hs_make(10, '0100-01-01', 'infinity',   '2004-01-01'));
  +INSERT INTO as_account VALUES (20, 'bar1', as_hs_make(20, '0100-01-01', 'infinity',   '2005-01-01'));
  +INSERT INTO as_account VALUES (20, 'bar2', as_hs_make(20, '0200-01-01', 'infinity',   '2006-01-01'));
  +INSERT INTO as_account VALUES (20, 'bar3', as_hs_make(20, '0200-01-01', '0300-01-01', '2007-01-01'));
   
   -- ##
   -- ##  Data Dump
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jun  8 16:50:03 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 59C9876DA8; Sun,  8 Jun 2003 16:50:03 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-db/bres/ bres-history.sql
Message-Id: <20030608145003.59C9876DA8@mail.ossp.org>
Date: Sun,  8 Jun 2003 16:50:03 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Jun-2003 16:50:03
  Branch: HEAD                             Handle: 2003060815500200

  Modified files:
    ossp-pkg/as/as-db/bres  bres-history.sql

  Log:
    add as_account trigger and dynamic view

  Summary:
    Revision    Changes     Path
    1.10        +96 -3      ossp-pkg/as/as-db/bres/bres-history.sql
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-db/bres/bres-history.sql
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 bres-history.sql
  --- ossp-pkg/as/as-db/bres/bres-history.sql	6 Jun 2003 13:40:46 -0000	1.9
  +++ ossp-pkg/as/as-db/bres/bres-history.sql	8 Jun 2003 14:50:02 -0000	1.10
  @@ -1,3 +1,6 @@
  +-- TODO: delete entries from as_hs_ut for expiring history: does it still not correctly
  +-- and especially should only allow the oldest entry to be deleted or implicitly
  +-- delete also all older entries.
   
   -- ##
   -- ##  Create Database Schema
  @@ -85,8 +88,8 @@
                      -- [42] (rw)
       ut_hid_max     BIGINT
                      NOT NULL
  -                   REFERENCES as_hs_st (st_hid)
  -                   MATCH FULL DEFERRABLE
  +                   -- REFERENCES as_hs_st (st_hid)
  +                   -- MATCH FULL DEFERRABLE
                      -- user time history identifier (maximum value until which this entry is valid)
                      -- [42] (rw)
   );
  @@ -104,7 +107,7 @@
                      -- name of account
                      -- [foo] (rw)
       ac_hid         BIGINT
  -                   NOT NULL 
  +                   NOT NULL
                      REFERENCES as_hs_st (st_hid)
                      MATCH FULL DEFERRABLE
                      -- account history identifier
  @@ -252,6 +255,21 @@
   END;
   ';
   
  +-- full featured implementation: as_hs_delete(oid, st_hid)
  +CREATE OR REPLACE FUNCTION as_hs_delete (BIGINT, BIGINT)
  +RETURNS VOID LANGUAGE 'plpgsql' STABLE AS '
  +DECLARE
  +    var_oid BIGINT;
  +    var_hid BIGINT;
  +BEGIN
  +    var_oid := $1;
  +    var_hid := $2;
  +    DELETE FROM as_hs_ut WHERE ut_oid = var_oid AND ut_hid = var_hid;
  +    DELETE FROM as_hs_st WHERE st_oid = var_oid AND st_hid = var_hid;
  +    RETURN;
  +END;
  +';
  +
   -- overloading: as_hs_make(oid, ut_beg, ut_end)
   CREATE OR REPLACE FUNCTION as_hs_make
   (BIGINT, TIMESTAMP (4) WITH TIME ZONE, TIMESTAMP (4) WITH TIME ZONE) 
  @@ -392,6 +410,81 @@
   RETURNS SETOF as_hs_t LANGUAGE 'sql' STABLE AS '
       SELECT * FROM as_hs(NULL, NULL, NULL, NULL, NULL);
   ';
  +
  +-- ##
  +-- ##  Account Table Convinience Manipulation Triggers
  +-- ##
  +
  +--  as_account trigger function
  +CREATE OR REPLACE FUNCTION as_account_trigger() 
  +RETURNS TRIGGER LANGUAGE 'plpgsql' STABLE AS '
  +DECLARE
  +    hid INTEGER;
  +BEGIN
  +    IF TG_WHEN = ''BEFORE'' AND TG_OP = ''INSERT'' THEN
  +        IF new.ac_hid IS NULL THEN
  +            --  auto-generate history id if not explicitly set by user
  +            new.ac_hid := as_hs_make(new.ac_oid);
  +        END IF;
  +        RETURN new;
  +    END IF;
  +    IF TG_WHEN = ''BEFORE'' AND TG_OP = ''UPDATE'' THEN
  +        --  clone old entry to allow old entry to be overwritten as it would be new entry
  +        INSERT INTO as_account VALUES (old.ac_oid, old.ac_name, old.ac_hid);
  +        --  give new entry a new history id if not explicity set by user
  +        IF (new.ac_hid = old.ac_hid) THEN
  +            new.ac_hid := as_hs_make(new.ac_oid);
  +        END IF;
  +        RETURN new;
  +    END IF;
  +    IF TG_WHEN = ''AFTER'' AND TG_OP = ''DELETE'' THEN
  +        --  delete corresponding history entries
  +        PERFORM as_hs_delete(old.ac_oid, old.ac_hid); 
  +        RETURN old;
  +    END IF;
  +END;
  +';
  +
  +-- as_account triggers
  +CREATE TRIGGER as_account_trigger_before
  +    BEFORE INSERT OR UPDATE ON as_account FOR EACH ROW
  +    EXECUTE PROCEDURE as_account_trigger();
  +CREATE TRIGGER as_account_trigger_after
  +    AFTER DELETE ON as_account FOR EACH ROW
  +    EXECUTE PROCEDURE as_account_trigger();
  +
  +-- ##
  +-- ##  Account Table Dynamic View
  +-- ##  <as_account>* := as_account([ut_beg[, ut_end[, st_beg[, st_end[, st_max]]]]])
  +-- ##
  +
  +CREATE OR REPLACE FUNCTION as_account () 
  +RETURNS SETOF as_account LANGUAGE 'sql' STABLE AS '
  +    SELECT ac.* FROM as_account ac, as_hs() WHERE ac_hid = hs_hid;
  +';
  +CREATE OR REPLACE FUNCTION as_account
  +(TIMESTAMP (4) WITH TIME ZONE) 
  +RETURNS SETOF as_account LANGUAGE 'sql' STABLE AS '
  +    SELECT ac.* FROM as_account ac, as_hs($1) WHERE ac_hid = hs_hid;
  +';
  +CREATE OR REPLACE FUNCTION as_account
  +(TIMESTAMP (4) WITH TIME ZONE, TIMESTAMP (4) WITH TIME ZONE, TIMESTAMP (4) WITH TIME ZONE)
  +RETURNS SETOF as_account LANGUAGE 'sql' STABLE AS '
  +    SELECT ac.* FROM as_account ac, as_hs($1, $2, $3) WHERE ac_hid = hs_hid;
  +';
  +CREATE OR REPLACE FUNCTION as_account
  +(TIMESTAMP (4) WITH TIME ZONE, TIMESTAMP (4) WITH TIME ZONE,
  + TIMESTAMP (4) WITH TIME ZONE, TIMESTAMP (4) WITH TIME ZONE)
  +RETURNS SETOF as_account LANGUAGE 'sql' STABLE AS '
  +    SELECT ac.* FROM as_account ac, as_hs($1, $2, $3, $4) WHERE ac_hid = hs_hid;
  +';
  +CREATE OR REPLACE FUNCTION as_account
  +(TIMESTAMP (4) WITH TIME ZONE, TIMESTAMP (4) WITH TIME ZONE,
  + TIMESTAMP (4) WITH TIME ZONE, TIMESTAMP (4) WITH TIME ZONE, INTEGER)
  +RETURNS SETOF as_account LANGUAGE 'sql' STABLE AS '
  +    SELECT ac.* FROM as_account ac, as_hs($1, $2, $3, $4, $5) WHERE ac_hid = hs_hid;
  +';
  +
   
   -- ##
   -- ##  Test Data
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jun  8 17:07:48 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4623F76DAD; Sun,  8 Jun 2003 17:07:48 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-db/bres/ bres-history.sql
Message-Id: <20030608150748.4623F76DAD@mail.ossp.org>
Date: Sun,  8 Jun 2003 17:07:48 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Jun-2003 17:07:48
  Branch: HEAD                             Handle: 2003060816074700

  Modified files:
    ossp-pkg/as/as-db/bres  bres-history.sql

  Log:
    cleanup the syntax

  Summary:
    Revision    Changes     Path
    1.11        +119 -89    ossp-pkg/as/as-db/bres/bres-history.sql
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-db/bres/bres-history.sql
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 bres-history.sql
  --- ossp-pkg/as/as-db/bres/bres-history.sql	8 Jun 2003 14:50:02 -0000	1.10
  +++ ossp-pkg/as/as-db/bres/bres-history.sql	8 Jun 2003 15:07:47 -0000	1.11
  @@ -1,11 +1,42 @@
  --- TODO: delete entries from as_hs_ut for expiring history: does it still not correctly
  --- and especially should only allow the oldest entry to be deleted or implicitly
  --- delete also all older entries.
  -
  --- ##
  --- ##  Create Database Schema
  --- ##
  +--
  +--  OSSP as -- Accounting System
  +--  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +--  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +--
  +--  This file is part of OSSP as, an accounting system which can be
  +--  found at http://www.ossp.org/pkg/tool/as/
  +--
  +--  This program is free software; you can redistribute it and/or
  +--  modify it under the terms of the GNU General Public License
  +--  as published by the Free Software Foundation; either version
  +--  2.0 of the License, or (at your option) any later version.
  +--
  +--  This program is distributed in the hope that it will be useful,
  +--  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +--  General Public License for more details.
  +--
  +--  You should have received a copy of the GNU General Public License
  +--  along with this program; if not, write to the Free Software
  +--  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +--  USA, or contact The OSSP Project <ossp@ossp.org>.
  +--
  +--  bres-history.sql -- History Tracking Basic Research
  +--
  +
  +--  TODO:
  +--  - delete entries from as_hs_ut for expiring history: does it still not correctly
  +--    and especially should only allow the oldest entry to be deleted or implicitly
  +--    delete also all older entries.
  +
  +--  ##  _____________________________________________________________________
  +--  ##
  +--  ##  Database Schema
  +--  ##  _____________________________________________________________________
  +--  ##
   
  +--  cascadingly drop existing schema
  +--  (just ignore errors on console)
   DROP SEQUENCE as_hs_st_seq CASCADE;
   DROP TABLE as_hs_st CASCADE;
   DROP TABLE as_hs_ut CASCADE;
  @@ -20,8 +51,8 @@
   CREATE TABLE as_hs_st (
       st_oid         BIGINT
                      NOT NULL,
  -                   -- REFERENCES as_oid (id_oid)
  -                   -- MATCH FULL DEFERRABLE,
  +                   -- REFERENCES as_oid (id_oid) FIXME
  +                   -- MATCH FULL DEFERRABLE,     FIXME
                      -- object identifier
                      -- [1] (rw)
       st_hid         BIGINT
  @@ -40,8 +71,8 @@
   CREATE TABLE as_hs_ut (
       ut_oid         BIGINT
                      NOT NULL,
  -                   -- REFERENCES as_oid (id_oid)
  -                   -- MATCH FULL DEFERRABLE,
  +                   -- REFERENCES as_oid (id_oid) FIXME
  +                   -- MATCH FULL DEFERRABLE,     FIXME
                      -- object identifier
                      -- [1] (rw)
       ut_beg         TIMESTAMP (4) WITH TIME ZONE
  @@ -66,8 +97,8 @@
   CREATE TABLE as_hs_ut_no (
       ut_oid         BIGINT
                      NOT NULL,
  -                   -- REFERENCES as_oid (id_oid)
  -                   -- MATCH FULL DEFERRABLE,
  +                   -- REFERENCES as_oid (id_oid) FIXME
  +                   -- MATCH FULL DEFERRABLE,     FIXME
                      -- object identifier
                      -- [1] (rw)
       ut_beg         TIMESTAMP (4) WITH TIME ZONE
  @@ -88,8 +119,8 @@
                      -- [42] (rw)
       ut_hid_max     BIGINT
                      NOT NULL
  -                   -- REFERENCES as_hs_st (st_hid)
  -                   -- MATCH FULL DEFERRABLE
  +                   -- REFERENCES as_hs_st (st_hid) FIXME
  +                   -- MATCH FULL DEFERRABLE        FIXME
                      -- user time history identifier (maximum value until which this entry is valid)
                      -- [42] (rw)
   );
  @@ -114,13 +145,15 @@
                      -- [42] (rw)
   );
   
  --- ##
  --- ##  Update as_hs_ut_no table for as_hs_ut change on particular OID
  --- ##
  -
  ---  Update function
  -DROP FUNCTION ut_update(BIGINT, BIGINT) CASCADE;
  -CREATE FUNCTION ut_update(BIGINT, BIGINT) 
  +--  ##  _____________________________________________________________________
  +--  ##
  +--  ##  Automated Update of as_hs_ut_no Table
  +--  ##  _____________________________________________________________________
  +--  ##
  +
  +--  as_hs_ut update function
  +DROP FUNCTION as_hs_ut_update(BIGINT, BIGINT) CASCADE;
  +CREATE FUNCTION as_hs_ut_update(BIGINT, BIGINT) 
   RETURNS VOID LANGUAGE 'plpgsql' STABLE AS '
   DECLARE
       oid BIGINT;
  @@ -195,35 +228,36 @@
   END;
   ';
   
  ---  Trigger Stub Function
  +--  as_hs_ut trigger stub function
   DROP FUNCTION ut_trigger() CASCADE;
   CREATE FUNCTION ut_trigger() 
   RETURNS TRIGGER LANGUAGE 'plpgsql' STABLE AS '
   BEGIN
       IF TG_OP = ''INSERT'' OR TG_OP = ''UPDATE'' THEN
           PERFORM ut_update(NEW.ut_oid, NEW.ut_hid);
  -    ELSE
  -        IF TG_OP = ''DELETE'' THEN
  -            PERFORM ut_update(OLD.ut_oid, OLD.ut_hid);
  -        END IF;
  +    ELSIF TG_OP = ''DELETE'' THEN
  +        PERFORM ut_update(OLD.ut_oid, OLD.ut_hid);
       END IF;
       RETURN NULL;
   END;
   ';
   
  ---  Global Trigger
  --- DROP TRIGGER ut_trigger ON as_hs_ut CASCADE;
  +--  as_hs_ut trigger
  +--DROP TRIGGER ut_trigger ON as_hs_ut CASCADE;
   CREATE TRIGGER ut_trigger
       AFTER INSERT OR UPDATE OR DELETE
       ON as_hs_ut FOR EACH ROW
       EXECUTE PROCEDURE ut_trigger ();
   
  --- ##
  --- ##   Make History Tracking
  --- ##   hid := as_hs_make([oid[, ut_beg, ut_end[, st_beg]]])
  --- ##
  +--  ##  _____________________________________________________________________
  +--  ##
  +--  ##  Convinience History Tracking Constructor/Destructor Functions
  +--  ##  hid := as_hs_make([oid[, ut_beg, ut_end[, st_beg]]]);
  +--  ##  as_hs_delete(oid, st_hid);
  +--  ##  _____________________________________________________________________
  +--  ##
   
  --- full featured implementation: as_hs_make(oid, ut_beg, ut_end, st_beg)
  +--  hid := as_hs_make(oid, ut_beg, ut_end, st_beg)
   CREATE OR REPLACE FUNCTION as_hs_make
   (BIGINT, TIMESTAMP (4) WITH TIME ZONE, TIMESTAMP (4) WITH TIME ZONE, TIMESTAMP (4) WITH TIME ZONE) 
   RETURNS BIGINT LANGUAGE 'plpgsql' STABLE AS '
  @@ -255,22 +289,7 @@
   END;
   ';
   
  --- full featured implementation: as_hs_delete(oid, st_hid)
  -CREATE OR REPLACE FUNCTION as_hs_delete (BIGINT, BIGINT)
  -RETURNS VOID LANGUAGE 'plpgsql' STABLE AS '
  -DECLARE
  -    var_oid BIGINT;
  -    var_hid BIGINT;
  -BEGIN
  -    var_oid := $1;
  -    var_hid := $2;
  -    DELETE FROM as_hs_ut WHERE ut_oid = var_oid AND ut_hid = var_hid;
  -    DELETE FROM as_hs_st WHERE st_oid = var_oid AND st_hid = var_hid;
  -    RETURN;
  -END;
  -';
  -
  --- overloading: as_hs_make(oid, ut_beg, ut_end)
  +--  convinience function overloading
   CREATE OR REPLACE FUNCTION as_hs_make
   (BIGINT, TIMESTAMP (4) WITH TIME ZONE, TIMESTAMP (4) WITH TIME ZONE) 
   RETURNS BIGINT LANGUAGE 'plpgsql' STABLE AS '
  @@ -278,8 +297,6 @@
       RETURN as_hs_make($1, $2, $3, NULL);
   END;
   ';
  -
  --- overloading: as_hs_make(oid, ut_beg)
   CREATE OR REPLACE FUNCTION as_hs_make
   (BIGINT, TIMESTAMP (4) WITH TIME ZONE)
   RETURNS BIGINT LANGUAGE 'plpgsql' STABLE AS '
  @@ -287,16 +304,12 @@
       RETURN as_hs_make($1, $2, NULL, NULL);
   END;
   ';
  -
  --- overloading: as_hs_make(oid)
   CREATE OR REPLACE FUNCTION as_hs_make(BIGINT) 
   RETURNS BIGINT LANGUAGE 'plpgsql' STABLE AS '
   BEGIN
       RETURN as_hs_make($1, NULL, NULL, NULL);
   END;
   ';
  -
  --- overloading: as_hs_make()
   CREATE OR REPLACE FUNCTION as_hs_make() 
   RETURNS BIGINT LANGUAGE 'plpgsql' STABLE AS '
   BEGIN
  @@ -304,16 +317,34 @@
   END;
   ';
   
  --- ##
  --- ##   Dynamic History Table
  --- ##   <oid, hid-max>* := as_hs(ut_beg[, ut_end[, st_beg[, st_end[, st_max]]]])
  --- ##
  -
  --- This finds (optionally only maximum) oid/hid combinations between
  --- st_beg and st_end (both inclusive) system time, for which the
  --- user time touches the time range between ut_beg and ut_end (both
  --- inclusive).
  +--  as_hs_delete(oid, st_hid);
  +CREATE OR REPLACE FUNCTION as_hs_delete (BIGINT, BIGINT)
  +RETURNS VOID LANGUAGE 'plpgsql' STABLE AS '
  +DECLARE
  +    var_oid BIGINT;
  +    var_hid BIGINT;
  +BEGIN
  +    var_oid := $1;
  +    var_hid := $2;
  +    DELETE FROM as_hs_ut WHERE ut_oid = var_oid AND ut_hid = var_hid;
  +    DELETE FROM as_hs_st WHERE st_oid = var_oid AND st_hid = var_hid;
  +    RETURN;
  +END;
  +';
  +
  +--  ##  _____________________________________________________________________
  +--  ##
  +--  ##  Parametrized History Table View
  +--  ##  <oid, hid-max>* := as_hs(ut_beg[, ut_end[, st_beg[, st_end[, st_max]]]])
  +--  ##  _____________________________________________________________________
  +--  ##
  +
  +--  This finds (optionally only maximum) oid/hid combinations between
  +--  st_beg and st_end (both inclusive) system time, for which the
  +--  user time touches the time range between ut_beg and ut_end (both
  +--  inclusive).
   
  +--  parametrized view return type
   DROP TYPE as_hs_t CASCADE;
   CREATE TYPE as_hs_t AS (
       hs_oid BIGINT,
  @@ -375,45 +406,39 @@
   END;
   ';
   
  ---  convinience overloaded function: without "st_max"
  +--  convinience overloading functions
   CREATE OR REPLACE FUNCTION as_hs
   (TIMESTAMP (4) WITH TIME ZONE, TIMESTAMP (4) WITH TIME ZONE,
    TIMESTAMP (4) WITH TIME ZONE, TIMESTAMP (4) WITH TIME ZONE)
   RETURNS SETOF as_hs_t LANGUAGE 'sql' STABLE AS '
       SELECT * FROM as_hs($1, $2, $3, $4, NULL);
   ';
  -
  ---  convinience overloaded function: without "st_end"
   CREATE OR REPLACE FUNCTION as_hs
   (TIMESTAMP (4) WITH TIME ZONE, TIMESTAMP (4) WITH TIME ZONE,
    TIMESTAMP (4) WITH TIME ZONE)
   RETURNS SETOF as_hs_t LANGUAGE 'sql' STABLE AS '
       SELECT * FROM as_hs($1, $2, $3, NULL, NULL);
   ';
  -
  ---  convinience overloaded function: without "as_hs_st" at all
   CREATE OR REPLACE FUNCTION as_hs
   (TIMESTAMP (4) WITH TIME ZONE, TIMESTAMP (4) WITH TIME ZONE)
   RETURNS SETOF as_hs_t LANGUAGE 'sql' STABLE AS '
       SELECT * FROM as_hs($1, $2, NULL, NULL, NULL);
   ';
  -
  ---  convinience overloaded function: without "ut_end" at all
   CREATE OR REPLACE FUNCTION as_hs
   (TIMESTAMP (4) WITH TIME ZONE)
   RETURNS SETOF as_hs_t LANGUAGE 'sql' STABLE AS '
       SELECT * FROM as_hs($1, NULL, NULL, NULL, NULL);
   ';
  -
  ---  convinience overloaded function: without "as_hs_ut" and "as_hs_st" at all
   CREATE OR REPLACE FUNCTION as_hs ()
   RETURNS SETOF as_hs_t LANGUAGE 'sql' STABLE AS '
       SELECT * FROM as_hs(NULL, NULL, NULL, NULL, NULL);
   ';
   
  --- ##
  --- ##  Account Table Convinience Manipulation Triggers
  --- ##
  +--  ##  _____________________________________________________________________
  +--  ##
  +--  ##  Account Table Convinience Manipulation Triggers
  +--  ##  _____________________________________________________________________
  +--  ##
   
   --  as_account trigger function
   CREATE OR REPLACE FUNCTION as_account_trigger() 
  @@ -445,7 +470,7 @@
   END;
   ';
   
  --- as_account triggers
  +--  as_account triggers
   CREATE TRIGGER as_account_trigger_before
       BEFORE INSERT OR UPDATE ON as_account FOR EACH ROW
       EXECUTE PROCEDURE as_account_trigger();
  @@ -453,10 +478,12 @@
       AFTER DELETE ON as_account FOR EACH ROW
       EXECUTE PROCEDURE as_account_trigger();
   
  --- ##
  --- ##  Account Table Dynamic View
  --- ##  <as_account>* := as_account([ut_beg[, ut_end[, st_beg[, st_end[, st_max]]]]])
  --- ##
  +--  ##  _____________________________________________________________________
  +--  ##
  +--  ##  Parametrized Account Table View
  +--  ##  <as_account>* := as_account([ut_beg[, ut_end[, st_beg[, st_end[, st_max]]]]])
  +--  ##  _____________________________________________________________________
  +--  ##
   
   CREATE OR REPLACE FUNCTION as_account () 
   RETURNS SETOF as_account LANGUAGE 'sql' STABLE AS '
  @@ -485,10 +512,11 @@
       SELECT ac.* FROM as_account ac, as_hs($1, $2, $3, $4, $5) WHERE ac_hid = hs_hid;
   ';
   
  -
  --- ##
  --- ##  Test Data
  --- ##
  +--  ##  _____________________________________________________________________
  +--  ##
  +--  ##  Test Data
  +--  ##  _____________________________________________________________________
  +--  ##
   
   -- whole test data as view
   -- #  ^          ^
  @@ -526,9 +554,11 @@
   INSERT INTO as_account VALUES (20, 'bar2', as_hs_make(20, '0200-01-01', 'infinity',   '2006-01-01'));
   INSERT INTO as_account VALUES (20, 'bar3', as_hs_make(20, '0200-01-01', '0300-01-01', '2007-01-01'));
   
  --- ##
  --- ##  Data Dump
  --- ##
  +--  ##  _____________________________________________________________________
  +--  ##
  +--  ##  Test Data Dumping
  +--  ##  _____________________________________________________________________
  +--  ##
   
   select * from as_account;
   -- #  ac_oid | ac_name | ac_hid 
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jun  8 17:08:55 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8402076DAD; Sun,  8 Jun 2003 17:08:55 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-db/bres/ bres-history.sql
Message-Id: <20030608150855.8402076DAD@mail.ossp.org>
Date: Sun,  8 Jun 2003 17:08:55 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Jun-2003 17:08:55
  Branch: HEAD                             Handle: 2003060816085400

  Modified files:
    ossp-pkg/as/as-db/bres  bres-history.sql

  Log:
    simplify syntax

  Summary:
    Revision    Changes     Path
    1.12        +2  -4      ossp-pkg/as/as-db/bres/bres-history.sql
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-db/bres/bres-history.sql
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 bres-history.sql
  --- ossp-pkg/as/as-db/bres/bres-history.sql	8 Jun 2003 15:07:47 -0000	1.11
  +++ ossp-pkg/as/as-db/bres/bres-history.sql	8 Jun 2003 15:08:54 -0000	1.12
  @@ -452,8 +452,7 @@
               new.ac_hid := as_hs_make(new.ac_oid);
           END IF;
           RETURN new;
  -    END IF;
  -    IF TG_WHEN = ''BEFORE'' AND TG_OP = ''UPDATE'' THEN
  +    ELSIF TG_WHEN = ''BEFORE'' AND TG_OP = ''UPDATE'' THEN
           --  clone old entry to allow old entry to be overwritten as it would be new entry
           INSERT INTO as_account VALUES (old.ac_oid, old.ac_name, old.ac_hid);
           --  give new entry a new history id if not explicity set by user
  @@ -461,8 +460,7 @@
               new.ac_hid := as_hs_make(new.ac_oid);
           END IF;
           RETURN new;
  -    END IF;
  -    IF TG_WHEN = ''AFTER'' AND TG_OP = ''DELETE'' THEN
  +    ELSIF TG_WHEN = ''AFTER'' AND TG_OP = ''DELETE'' THEN
           --  delete corresponding history entries
           PERFORM as_hs_delete(old.ac_oid, old.ac_hid); 
           RETURN old;
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jun  8 17:09:39 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D7C0A76DAD; Sun,  8 Jun 2003 17:09:38 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-db/bres/ bres-history.sql
Message-Id: <20030608150938.D7C0A76DAD@mail.ossp.org>
Date: Sun,  8 Jun 2003 17:09:38 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Jun-2003 17:09:38
  Branch: HEAD                             Handle: 2003060816093800

  Modified files:
    ossp-pkg/as/as-db/bres  bres-history.sql

  Log:
    get working after cleanup again

  Summary:
    Revision    Changes     Path
    1.13        +2  -2      ossp-pkg/as/as-db/bres/bres-history.sql
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-db/bres/bres-history.sql
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 bres-history.sql
  --- ossp-pkg/as/as-db/bres/bres-history.sql	8 Jun 2003 15:08:54 -0000	1.12
  +++ ossp-pkg/as/as-db/bres/bres-history.sql	8 Jun 2003 15:09:38 -0000	1.13
  @@ -234,9 +234,9 @@
   RETURNS TRIGGER LANGUAGE 'plpgsql' STABLE AS '
   BEGIN
       IF TG_OP = ''INSERT'' OR TG_OP = ''UPDATE'' THEN
  -        PERFORM ut_update(NEW.ut_oid, NEW.ut_hid);
  +        PERFORM as_hs_ut_update(NEW.ut_oid, NEW.ut_hid);
       ELSIF TG_OP = ''DELETE'' THEN
  -        PERFORM ut_update(OLD.ut_oid, OLD.ut_hid);
  +        PERFORM as_hs_ut_update(OLD.ut_oid, OLD.ut_hid);
       END IF;
       RETURN NULL;
   END;
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jun 11 18:18:49 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4165976DBA; Wed, 11 Jun 2003 18:18:49 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc.h rc_const.h rc_lab.c rc_private.h rc_proc...
Message-Id: <20030611161849.4165976DBA@mail.ossp.org>
Date: Wed, 11 Jun 2003 18:18:49 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   11-Jun-2003 18:18:49
  Branch: HEAD                             Handle: 2003061117184800

  Modified files:
    ossp-pkg/rc             rc.h rc_const.h rc_lab.c rc_private.h rc_proc.c
                            rc_sect.c rc_test.sh

  Log:
    Implement limited verbosity on eval modus, and begin mergin the label object
    and the section object.

  Summary:
    Revision    Changes     Path
    1.47        +6  -0      ossp-pkg/rc/rc.h
    1.21        +3  -0      ossp-pkg/rc/rc_const.h
    1.4         +29 -0      ossp-pkg/rc/rc_lab.c
    1.30        +1  -0      ossp-pkg/rc/rc_private.h
    1.42        +10 -0      ossp-pkg/rc/rc_proc.c
    1.12        +42 -0      ossp-pkg/rc/rc_sect.c
    1.24        +7  -0      ossp-pkg/rc/rc_test.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc.h
  ============================================================================
  $ cvs diff -u -r1.46 -r1.47 rc.h
  --- ossp-pkg/rc/rc.h	21 May 2003 12:49:20 -0000	1.46
  +++ ossp-pkg/rc/rc.h	11 Jun 2003 16:18:48 -0000	1.47
  @@ -123,17 +123,23 @@
   rc_label_t *labelNew(const char *);
   rc_return_t labelAppendsec(rc_label_t *, rc_section_t *);
   rc_return_t labelDelete(rc_label_t *);
  +const char *labelGetname(rc_label_t *);
  +rc_return_t labelSetname(rc_label_t *, const char *);
   
   /* Section function prototypes */
   rc_section_t *sectionNew(const char *);
   rc_section_t *sectionCopy(rc_section_t *);
   const int sectionGetpri(rc_section_t *);
   const int sectionGetuid(rc_section_t *);
  +const char *sectionGetname(rc_section_t *);
  +const char *sectionGetlabel(rc_section_t *);
   const char *sectionGetlogin(rc_section_t *);
   const char *sectionGetdata(rc_section_t *);
   size_t sectionGetlen(rc_section_t *);
   rc_return_t sectionSetpri(rc_section_t *, long);
   rc_return_t sectionSetuid(rc_section_t *, long);
  +rc_return_t sectionSetname(rc_section_t *, const char *);
  +rc_return_t sectionSetlabel(rc_section_t *, const char *);
   rc_return_t sectionSetlogin(rc_section_t *, const char *);
   rc_return_t sectionSetdata(rc_section_t *, const char *);
   rc_return_t sectionSetndata(rc_section_t *, const char *, size_t);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_const.h
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 rc_const.h
  --- ossp-pkg/rc/rc_const.h	28 May 2003 18:43:34 -0000	1.20
  +++ ossp-pkg/rc/rc_const.h	11 Jun 2003 16:18:48 -0000	1.21
  @@ -37,6 +37,9 @@
   #define RC_SLO_TEXT "The silent option may not be combined with output options.\n"
   #define RC_SUM_TEXT "Option argument summary.\n"
   #define RC_RUT_TEXT "Failed to set the user id. Please become the root user and try again.\n"
  +#define RC_EVN_TEXT "# Evaluating section %s of script %s.\n"
  +#define RC_EXN_TEXT "# Executing section %s of script %s.\n"
  +#define RC_PRN_TEXT "# Printing section %s of script %s.\n"
   
   /* Option descriptions used with popt, should not include termination */
   #define RC_USE_DESC "Print a short usage summary, then exit."
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_lab.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 rc_lab.c
  --- ossp-pkg/rc/rc_lab.c	3 Jun 2003 15:26:52 -0000	1.3
  +++ ossp-pkg/rc/rc_lab.c	11 Jun 2003 16:18:48 -0000	1.4
  @@ -95,6 +95,35 @@
   }
   
   /************************************************
  +* labelGetXXX(rc_label_t *)                     *
  +* Accessor methods                              *
  +************************************************/
  +const char *labelGetname(rc_label_t *pLab)
  +{ /* Name of label, used for display during verbose */
  +    if (pLab)
  +        return(pLab->m_szName);
  +    else
  +        RC_THROW(RC_ERR_USE);
  +
  +    return(0); /* Not reached */
  +}
  +
  +/************************************************
  +* labelSetXXX(rc_label_t *, const ... *)        *
  +* Accessor methods                              *
  +************************************************/
  +rc_return_t labelSetname(rc_label_t *pLab, const char *szName)
  +{ /* Name of label, used for display during verbose */
  +    if (pLab) {
  +        pLab->m_szName = malloc((strlen(szName) + 1) * sizeof (char));
  +        strcpy(pLab->m_szName, szName);
  +        return(RC_THROW(RC_OK));
  +    }
  +
  +    return(RC_THROW(RC_ERR_USE));
  +}
  +
  +/************************************************
   * labelDelete(rc_label_t *)                     *
   * Destruct a label                              *
   ************************************************/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_private.h
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 rc_private.h
  --- ossp-pkg/rc/rc_private.h	28 May 2003 15:09:29 -0000	1.29
  +++ ossp-pkg/rc/rc_private.h	11 Jun 2003 16:18:48 -0000	1.30
  @@ -92,6 +92,7 @@
       int m_nPri;
       int m_nUid;
       char *m_szName;
  +    char *m_szLabel;
       char *m_szLogin;
       char *m_szData;
       size_t m_Bytes;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.41 -r1.42 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	3 Jun 2003 15:26:52 -0000	1.41
  +++ ossp-pkg/rc/rc_proc.c	11 Jun 2003 16:18:48 -0000	1.42
  @@ -232,6 +232,16 @@
                   sizeof(rc_section_t *), priCompare);
               nTmp = 0;
               while (nTmp < pRc->m_pAnal->m_nRcs && ppSectmp[nTmp]) {
  +                if (configGetval(RC_VRB_VAL)) {
  +                    size_t nBytes = 0;
  +                    char *szVerbose = NULL;
  +                    szTmp = (char *)sectionGetname(ppSectmp[nTmp]);
  +                    nBytes = (strlen(RC_EVN_TEXT) + strlen(szTmp) + 1) * sizeof (char);
  +                    szVerbose = malloc (nBytes);
  +                    sprintf(szVerbose, RC_EVN_TEXT, szTmp, szTmp);
  +                    scriptAppend(pFatscript, szVerbose, strlen(szVerbose));
  +                    free(szVerbose);
  +                }
                   if ((szTmp = (char *)sectionGetlogin(ppSectmp[nTmp])) != NULL) {
                       scriptAppend(pFatscript, "#su ", strlen("#su "));
                       scriptAppend(pFatscript, szTmp, strlen(szTmp));
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_sect.c
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 rc_sect.c
  --- ossp-pkg/rc/rc_sect.c	27 May 2003 13:14:08 -0000	1.11
  +++ ossp-pkg/rc/rc_sect.c	11 Jun 2003 16:18:48 -0000	1.12
  @@ -115,6 +115,26 @@
       return(0); /* Not reached */
   }
   
  +const char *sectionGetname(rc_section_t *pSec)
  +{ /* Name of section, used for display during verbose */
  +    if (pSec)
  +        return(pSec->m_szName);
  +    else
  +        RC_THROW(RC_ERR_USE);
  +
  +    return(0); /* Not reached */
  +}
  +
  +const char *sectionGetlabel(rc_section_t *pSec)
  +{ /* Rc label, used for display during verbose */
  +    if (pSec)
  +        return(pSec->m_szLabel);
  +    else
  +        RC_THROW(RC_ERR_USE);
  +
  +    return(0); /* Not reached */
  +}
  +
   const char *sectionGetlogin(rc_section_t *pSec)
   { /* User name of section, used for display during print */
       if (pSec)
  @@ -163,6 +183,28 @@
   { /* Userid of section, used with setuid during exec or eval */
       if (pSec) {
           pSec->m_nUid = nUserid;
  +        return(RC_THROW(RC_OK));
  +    }
  +
  +    return(RC_THROW(RC_ERR_USE));
  +}
  +
  +rc_return_t sectionSetname(rc_section_t *pSec, const char *szName)
  +{ /* Name of section, used for display during verbose */
  +    if (pSec) {
  +        pSec->m_szName = malloc((strlen(szName) + 1) * sizeof (char));
  +        strcpy(pSec->m_szName, szName);
  +        return(RC_THROW(RC_OK));
  +    }
  +
  +    return(RC_THROW(RC_ERR_USE));
  +}
  +
  +rc_return_t sectionSetlabel(rc_section_t *pSec, const char *szLabel)
  +{ /* Rc label, used for display during verbose */
  +    if (pSec) {
  +        pSec->m_szLabel = malloc((strlen(szLabel) + 1) * sizeof (char));
  +        strcpy(pSec->m_szLabel, szLabel);
           return(RC_THROW(RC_OK));
       }
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_test.sh
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 rc_test.sh
  --- ossp-pkg/rc/rc_test.sh	3 Jun 2003 15:27:32 -0000	1.23
  +++ ossp-pkg/rc/rc_test.sh	11 Jun 2003 16:18:48 -0000	1.24
  @@ -74,6 +74,13 @@
   ./rc --locate rc_test --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" rsyncd go
   echo; echo "<Press enter to continue>"
   read dummy;clear
  +
  +echo "*** Test minimal set of long options, should succeed ***"
  +echo "./rc -L rc_test --ParseSectionDef \"^%([a-zA-Z][a-zA-Z0-9]*)\s*(-[a-zA-Z]\s*\S+)*\n(.+?)\n^%\" zebra test"
  +./rc -L rc_test --ParseSectionDef "^%([a-zA-Z][a-zA-Z0-9]*)\s*(-[a-zA-Z]\s*\S+)*\n(.+?)\n^%" zebra test
  +echo; echo "<Press enter to continue>"
  +
  +read dummy;clear
   echo "*** Test minimal set of long options, should succeed ***"
   echo "./rc --version --ParseSectionDef \"^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>\" rsyncd nothing matters but the version"
   ./rc --version --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" rsyncd nothing matters but the version
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jun 12 15:27:45 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0A59B76DD2; Thu, 12 Jun 2003 15:27:44 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ 00TODO rc_const.h rc_proc.c
Message-Id: <20030612132744.0A59B76DD2@mail.ossp.org>
Date: Thu, 12 Jun 2003 15:27:44 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   12-Jun-2003 15:27:44
  Branch: HEAD                             Handle: 2003061214274400

  Modified files:
    ossp-pkg/rc             00TODO rc_const.h rc_proc.c

  Log:
    Complete verbose mode implementation.

  Summary:
    Revision    Changes     Path
    1.47        +1  -0      ossp-pkg/rc/00TODO
    1.22        +6  -0      ossp-pkg/rc/rc_const.h
    1.43        +112 -29    ossp-pkg/rc/rc_proc.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/00TODO
  ============================================================================
  $ cvs diff -u -r1.46 -r1.47 00TODO
  --- ossp-pkg/rc/00TODO	4 Jun 2003 10:48:15 -0000	1.46
  +++ ossp-pkg/rc/00TODO	12 Jun 2003 13:27:44 -0000	1.47
  @@ -63,6 +63,7 @@
     Use OSSP cfg library for dotconf parsing, ask Ralf to help.
     Make rc_section_t correspond to rc_section.c with own operators.
     Make consistent, sectionGetdata and scriptTostring should have same names
  +  Add printVerbal() to section class, removing 'if (configGetval(RC_VRB_VAL))'
   
   Implementation
     Correct assertion, sanity check, and if () checks according to one standard.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_const.h
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 rc_const.h
  --- ossp-pkg/rc/rc_const.h	11 Jun 2003 16:18:48 -0000	1.21
  +++ ossp-pkg/rc/rc_const.h	12 Jun 2003 13:27:44 -0000	1.22
  @@ -41,6 +41,9 @@
   #define RC_EXN_TEXT "# Executing section %s of script %s.\n"
   #define RC_PRN_TEXT "# Printing section %s of script %s.\n"
   
  +/* Single word user text, should not include termination */
  +#define RC_CMN_TEXT "common"
  +
   /* Option descriptions used with popt, should not include termination */
   #define RC_USE_DESC "Print a short usage summary, then exit."
   #define RC_DBG_DESC "Don't remove temporary files, and write debug messages to stderr."
  @@ -123,6 +126,9 @@
   #define RC_WRNSTR_NUL "NULLPointer"
   
   #define RC_GLOB_WILD  "all"
  +
  +/* Nontranslatable machine strings, do not translate */
  +#define RC_ECHO_STR   "echo "
   
   /* Default values, do not include newlines and special chars must be escaped */
   #define RC_DEF_ON     "1"                       /* Digital switch */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.42 -r1.43 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	11 Jun 2003 16:18:48 -0000	1.42
  +++ ossp-pkg/rc/rc_proc.c	12 Jun 2003 13:27:44 -0000	1.43
  @@ -191,6 +191,7 @@
   rc_return_t procRun(rc_proc_t *pRc)
   {
       int   nTmp      = 0;              /* Generic index       */
  +    size_t nBytes   = 0;              /* Size in bytes       */
       int   nTmpname  = 0;              /* Temp file name size */
       int   nRcs      = 0;              /* Rc index            */
       int   nSecs     = 0;              /* Section index       */
  @@ -201,6 +202,7 @@
       char *szTmp     = NULL;           /* Generic temporary string        */
       char *szCom     = NULL;           /* Stores common script text       */
       char *szExec    = NULL;           /* Used only during exec mode      */
  +    char *szVerbose = NULL;           /* Used when handling verbose mode */
       char *pszVec[RC_EXEC_MAXARGS];    /* For passing in to execv(3)      */
       rc_script_t   *pFatscript = NULL; /* To build a comprehensive script */
       rc_section_t **ppSectmp   = NULL; /* Used with priority scheduling   */
  @@ -214,8 +216,17 @@
       if (configGetval(RC_EVL_VAL)) {                             /* Evaluate */
           /* Allocate a block of section pointers to use temporarily */
           ppSectmp = calloc(pRc->m_pAnal->m_nRcs, sizeof(rc_section_t *));
  -        /* Allocate the command chain string to execute with execv(3) */
  -        pFatscript = scriptCopy(pRc->m_pScriptcom);
  +        pFatscript = scriptNew();
  +        /* Conditionally print common section notice in verbal mode */
  +        if (configGetval(RC_VRB_VAL)) {
  +            nBytes = (strlen(RC_PRN_TEXT) + strlen(RC_CMN_TEXT) * 2 + 1) * sizeof (char);
  +            szVerbose = malloc(nBytes);
  +            sprintf(szVerbose, RC_PRN_TEXT, RC_CMN_TEXT, RC_CMN_TEXT);
  +            scriptAppend(pFatscript, szVerbose, strlen(szVerbose));
  +            free(szVerbose);
  +        }
  +        scriptAppend(pFatscript, scriptTostring(pRc->m_pScriptcom), \
  +            strlen(scriptTostring(pRc->m_pScriptcom)));
           for (nSecs = 0; nSecs < pRc->m_pAnal->m_nSecs; nSecs++) {
               for (nRcs = 0; nRcs < pRc->m_pAnal->m_nRcs; nRcs++) {
                   nTmp = 0;
  @@ -232,12 +243,11 @@
                   sizeof(rc_section_t *), priCompare);
               nTmp = 0;
               while (nTmp < pRc->m_pAnal->m_nRcs && ppSectmp[nTmp]) {
  +                /* Conditionally print each section notice in verbal mode */
                   if (configGetval(RC_VRB_VAL)) {
  -                    size_t nBytes = 0;
  -                    char *szVerbose = NULL;
                       szTmp = (char *)sectionGetname(ppSectmp[nTmp]);
                       nBytes = (strlen(RC_EVN_TEXT) + strlen(szTmp) + 1) * sizeof (char);
  -                    szVerbose = malloc (nBytes);
  +                    szVerbose = malloc(nBytes);
                       sprintf(szVerbose, RC_EVN_TEXT, szTmp, szTmp);
                       scriptAppend(pFatscript, szVerbose, strlen(szVerbose));
                       free(szVerbose);
  @@ -313,34 +323,90 @@
               pszVec[3] = NULL;       /* Add a NULL to mark the end of the chain */
               nTmp = 0; /* Count from zero until however many sections we have */
               while (nTmp < pRc->m_pAnal->m_nRcs && ppSectmp[nTmp]) {
  -                szTmp = (char *)sectionGetdata(ppSectmp[nTmp]);
  -                szExec = malloc(strlen(szCom) * sizeof(char) + \
  -                               (strlen(szTmp) + 1) * sizeof(char));
  -                strcpy(szExec, szCom); /* Start out with just the common script code */
  -                strcat(szExec, szTmp); /* And build a section onto the command chain */
  -                pszVec[2] = szExec;    /* Actually launch the new process image now  */
  +                /* Conditionally print common and other section notices in verbal mode */
  +                if (configGetval(RC_VRB_VAL)) {
  +                    size_t nComverb = 0;
  +                    size_t nCommon  = 0;
  +                    size_t nSecverb = 0;
  +                    size_t nSection = 0;
  +                    nComverb = (strlen(RC_EXN_TEXT) + strlen(RC_CMN_TEXT) * 2 \
  +                        + strlen(RC_ECHO_STR) + strlen("\"\"") + 1) * sizeof (char);
  +                    szVerbose = malloc(nComverb);
  +                    sprintf(szVerbose, RC_EXN_TEXT, RC_CMN_TEXT, RC_CMN_TEXT);
  +                    nCommon = (strlen(szCom) + 1) * sizeof (char);
  +                    szExec = malloc(nComverb + nCommon);
  +                    strcpy(szExec, RC_ECHO_STR);    /* Start out with the echo string */
  +                    strcat(szExec, "\"");           /* Append a quote next to the echo */
  +                    strcat(szExec, szVerbose);      /* Continue with the verboseity text */
  +                    strcat(szExec, "\"");           /* Finalize the verbosity notice */
  +                    strcat(szExec, szCom);          /* Then with the common script code */
  +                    szTmp = (char *)sectionGetname(ppSectmp[nTmp]);
  +                    nSecverb = (strlen(RC_EXN_TEXT) + strlen(szTmp) * 2 \
  +                        + strlen(RC_ECHO_STR) + strlen("\"\"") + 1) * sizeof (char);
  +                    realloc(szVerbose, nSecverb);
  +                    sprintf(szVerbose, RC_EXN_TEXT, szTmp, szTmp);
  +                    szTmp = (char *)sectionGetdata(ppSectmp[nTmp]);
  +                    nSection = (strlen(szTmp) + 1) * sizeof (char);
  +                    realloc(szExec, nComverb + nCommon + nSecverb + nSection);
  +                    strcat(szExec, RC_ECHO_STR);    /* Start out with the echo string */
  +                    strcat(szExec, "\"");           /* Append a quote next to the echo */
  +                    strcat(szExec, szVerbose);      /* Continue with the verboseity text */
  +                    strcat(szExec, "\"");           /* Finalize the verbosity notice */
  +                    strcat(szExec, szTmp);          /* Then with the new script code */
  +                    pszVec[2] = szExec;             /* Launch the new process image now  */
  +                    free(szVerbose);
  +                    szVerbose = NULL;
   
  -                /* Spawn the section shell code */
  -                switch (Pidexec = fork()){
  -                    case -1:    /* Broken */
  -                        return(RC_THROW(RC_ERR_INT));
  -                        break;  /* Huh? */
  -                    case 0:     /* Child, runs script code through bourne shell */
  -                        nSectuid = sectionGetuid(ppSectmp[nTmp]);
  -                        if (nSectuid >= 0 && getuid() != nSectuid)
  -                            if (setuid(nSectuid) != 0)
  -                                return(RC_THROW(RC_ERR_INT));
  -                        if (execvp(*pszVec, pszVec) == -1)
  +                    /* Spawn the section shell code */
  +                    switch (Pidexec = fork()){
  +                        case -1:    /* Broken */
                               return(RC_THROW(RC_ERR_INT));
  -                        break;
  -                    default: /* Parent, blocks until child returns */
  -                        waitpid(Pidexec, NULL, WUNTRACED);
  -                        break;
  +                            break;  /* Huh? */
  +                        case 0:     /* Child, runs script code through bourne shell */
  +                            nSectuid = sectionGetuid(ppSectmp[nTmp]);
  +                            if (nSectuid >= 0 && getuid() != nSectuid)
  +                                if (setuid(nSectuid) != 0)
  +                                    return(RC_THROW(RC_ERR_INT));
  +                            if (execvp(*pszVec, pszVec) == -1)
  +                                return(RC_THROW(RC_ERR_INT));
  +                            break;
  +                        default: /* Parent, blocks until child returns */
  +                            waitpid(Pidexec, NULL, WUNTRACED);
  +                            break;
  +                    }
  +                    if (szExec) {
  +                        free(szExec); /* Cleanup after exec */
  +                        szExec = NULL;
  +                    }
                   }
  +                else {
  +                    szTmp = (char *)sectionGetdata(ppSectmp[nTmp]);
  +                    szExec = malloc((strlen(szCom) + strlen(szTmp) + 1) * sizeof(char));
  +                    strcpy(szExec, szCom); /* Start out with just the common script code */
  +                    strcat(szExec, szTmp); /* And build a section onto the command chain */
  +                    pszVec[2] = szExec;    /* Actually launch the new process image now  */
   
  -                free(szExec); /* Cleanup after exec */
  -                szExec = NULL;
  -                nTmp++;
  +                    /* Spawn the section shell code */
  +                    switch (Pidexec = fork()){
  +                        case -1:    /* Broken */
  +                            return(RC_THROW(RC_ERR_INT));
  +                            break;  /* Huh? */
  +                        case 0:     /* Child, runs script code through bourne shell */
  +                            nSectuid = sectionGetuid(ppSectmp[nTmp]);
  +                            if (nSectuid >= 0 && getuid() != nSectuid)
  +                                if (setuid(nSectuid) != 0)
  +                                    return(RC_THROW(RC_ERR_INT));
  +                            if (execvp(*pszVec, pszVec) == -1)
  +                                return(RC_THROW(RC_ERR_INT));
  +                            break;
  +                        default: /* Parent, blocks until child returns */
  +                            waitpid(Pidexec, NULL, WUNTRACED);
  +                            break;
  +                    }
  +                    free(szExec); /* Cleanup after exec */
  +                    szExec = NULL;
  +                }
  +                nTmp++; /* Next rc script */
               }
           }
           free(ppSectmp);
  @@ -349,6 +415,14 @@
       else if (configGetval(RC_PRN_VAL)) {                        /* Print  */
           /* Allocate a block of section pointers to use as a temporary */
           ppSectmp = calloc(pRc->m_pAnal->m_nRcs, sizeof(rc_section_t *));
  +        /* Conditionally print common section notice in verbal mode */
  +        if (configGetval(RC_VRB_VAL)) {
  +            nBytes = (strlen(RC_PRN_TEXT) + strlen(RC_CMN_TEXT) * 2 + 1) * sizeof (char);
  +            szVerbose = malloc(nBytes);
  +            sprintf(szVerbose, RC_PRN_TEXT, RC_CMN_TEXT, RC_CMN_TEXT);
  +            fprintf(stderr, "%s", szVerbose);
  +            free(szVerbose);
  +        }
           scriptDump(pRc->m_pScriptcom); /* Dump the common script */
           for (nSecs = 0; nSecs < pRc->m_pAnal->m_nSecs; nSecs++) {
               for (nRcs = 0; nRcs < pRc->m_pAnal->m_nRcs; nRcs++) {
  @@ -365,6 +439,15 @@
               qsort((void *)ppSectmp, (size_t)pRc->m_pAnal->m_nRcs, sizeof(rc_section_t *), priCompare);
               nTmp = 0;
               while (nTmp < pRc->m_pAnal->m_nRcs && ppSectmp[nTmp]) {
  +                /* Conditionally print each section notice in verbal mode */
  +                if (configGetval(RC_VRB_VAL)) {
  +                    szTmp = (char *)sectionGetname(ppSectmp[nTmp]);
  +                    nBytes = (strlen(RC_PRN_TEXT) + strlen(szTmp) + 1) * sizeof (char);
  +                    szVerbose = malloc(nBytes);
  +                    sprintf(szVerbose, RC_PRN_TEXT, szTmp, szTmp);
  +                    fprintf(stderr, "%s", szVerbose);
  +                    free(szVerbose);
  +                }
                   sectionDump(ppSectmp[nTmp]);
                   nTmp++;
               }
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jun 12 16:24:16 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0E6E976DD2; Thu, 12 Jun 2003 16:24:15 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_test.sh
Message-Id: <20030612142415.0E6E976DD2@mail.ossp.org>
Date: Thu, 12 Jun 2003 16:24:15 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   12-Jun-2003 16:24:15
  Branch: HEAD                             Handle: 2003061215241500

  Modified files:
    ossp-pkg/rc             rc_test.sh

  Log:
    Add explicit test for verbose mode.

  Summary:
    Revision    Changes     Path
    1.25        +5  -0      ossp-pkg/rc/rc_test.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_test.sh
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 rc_test.sh
  --- ossp-pkg/rc/rc_test.sh	11 Jun 2003 16:18:48 -0000	1.24
  +++ ossp-pkg/rc/rc_test.sh	12 Jun 2003 14:24:15 -0000	1.25
  @@ -44,6 +44,11 @@
   read dummy;clear
   
   echo "*** Test short options, should succeed ***"
  +echo "./rc -Dpf ./rc_test/rcfuncs -irt /tmp -L rc_test -c rc.conf samba search finish"
  +./rc -Dpf ./rc_test/rcfuncs -irt /tmp -L rc_test -c rc.conf samba search finish
  +echo; echo "<Press enter to continue>"
  +read dummy;clear
  +echo "*** Test short options with verbose, should succeed ***"
   echo "./rc -Dpf ./rc_test/rcfuncs -irvt /tmp -L rc_test -c rc.conf samba search finish"
   ./rc -Dpf ./rc_test/rcfuncs -irvt /tmp -L rc_test -c rc.conf samba search finish
   echo; echo "<Press enter to continue>"
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jun 12 16:24:32 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A1DA776DDA; Thu, 12 Jun 2003 16:24:32 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_const.h rc_proc.c
Message-Id: <20030612142432.A1DA776DDA@mail.ossp.org>
Date: Thu, 12 Jun 2003 16:24:32 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   12-Jun-2003 16:24:32
  Branch: HEAD                             Handle: 2003061215243200

  Modified files:
    ossp-pkg/rc             rc_const.h rc_proc.c

  Log:
    Fix shebang handling.

  Summary:
    Revision    Changes     Path
    1.23        +1  -0      ossp-pkg/rc/rc_const.h
    1.44        +29 -24     ossp-pkg/rc/rc_proc.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_const.h
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 rc_const.h
  --- ossp-pkg/rc/rc_const.h	12 Jun 2003 13:27:44 -0000	1.22
  +++ ossp-pkg/rc/rc_const.h	12 Jun 2003 14:24:32 -0000	1.23
  @@ -129,6 +129,7 @@
   
   /* Nontranslatable machine strings, do not translate */
   #define RC_ECHO_STR   "echo "
  +#define RC_BANG_STR   "#! /bin/sh\n"
   
   /* Default values, do not include newlines and special chars must be escaped */
   #define RC_DEF_ON     "1"                       /* Digital switch */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.43 -r1.44 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	12 Jun 2003 13:27:44 -0000	1.43
  +++ ossp-pkg/rc/rc_proc.c	12 Jun 2003 14:24:32 -0000	1.44
  @@ -88,9 +88,6 @@
       assert(*pRc->m_pAnal->m_pszRcs);
       sBuf = (char *)calloc(1, RC_READ_BUFSIZE);
   
  -    /* Stick on the starting shell id line */
  -    scriptAppend(pRc->m_pScriptcom, "#! /bin/sh\n", strlen("#! /bin/sh\n"));
  -
       /* Open the func file if it exists in the configuration */
       if (pRc->m_pAnal->m_szFuncs) {
           if ((nFdfunc = open(pRc->m_pAnal->m_szFuncs, O_RDONLY)) >= 0) {
  @@ -190,22 +187,23 @@
   ************************************************/
   rc_return_t procRun(rc_proc_t *pRc)
   {
  -    int   nTmp      = 0;              /* Generic index       */
  -    size_t nBytes   = 0;              /* Size in bytes       */
  -    int   nTmpname  = 0;              /* Temp file name size */
  -    int   nRcs      = 0;              /* Rc index            */
  -    int   nSecs     = 0;              /* Section index       */
  -    int   nSectuid  = -1;             /* The section's user id           */
  -    int   nRunuid   = -1;             /* The current user id             */
  -    pid_t Pidexec   = -1;             /* When spawning before execv(3)   */
  -    char *szTmpfile = NULL;           /* Path of temporary file          */
  -    char *szTmp     = NULL;           /* Generic temporary string        */
  -    char *szCom     = NULL;           /* Stores common script text       */
  -    char *szExec    = NULL;           /* Used only during exec mode      */
  -    char *szVerbose = NULL;           /* Used when handling verbose mode */
  -    char *pszVec[RC_EXEC_MAXARGS];    /* For passing in to execv(3)      */
  -    rc_script_t   *pFatscript = NULL; /* To build a comprehensive script */
  -    rc_section_t **ppSectmp   = NULL; /* Used with priority scheduling   */
  +    int   nTmp      = 0;                /* Generic index       */
  +    size_t nBytes   = 0;                /* Size in bytes       */
  +    int   nTmpname  = 0;                /* Temp file name size */
  +    int   nRcs      = 0;                /* Rc index            */
  +    int   nSecs     = 0;                /* Section index       */
  +    int   nSectuid  = -1;               /* The section's user id           */
  +    int   nRunuid   = -1;               /* The current user id             */
  +    pid_t Pidexec   = -1;               /* When spawning before execv(3)   */
  +    char *szTmpfile = NULL;             /* Path of temporary file          */
  +    char *szTmp     = NULL;             /* Generic temporary string        */
  +    char *szCom     = NULL;             /* Stores common script text       */
  +    char *szExec    = NULL;             /* Used only during exec mode      */
  +    char *szVerbose = NULL;             /* Used when handling verbose mode */
  +    char *pszVec[RC_EXEC_MAXARGS];      /* For passing in to execv(3)      */
  +    rc_script_t   *pBangscript = NULL;  /* Common script with the shebang  */
  +    rc_script_t   *pFatscript  = NULL;  /* To build a comprehensive script */
  +    rc_section_t **ppSectmp    = NULL;  /* Used with priority scheduling   */
   
       /****************************************************/
       /* This will execute, evaluate, or print the script */
  @@ -217,6 +215,7 @@
           /* Allocate a block of section pointers to use temporarily */
           ppSectmp = calloc(pRc->m_pAnal->m_nRcs, sizeof(rc_section_t *));
           pFatscript = scriptNew();
  +        scriptAppend(pFatscript, RC_BANG_STR, strlen(RC_BANG_STR)); /* Shebang */
           /* Conditionally print common section notice in verbal mode */
           if (configGetval(RC_VRB_VAL)) {
               nBytes = (strlen(RC_PRN_TEXT) + strlen(RC_CMN_TEXT) * 2 + 1) * sizeof (char);
  @@ -333,9 +332,10 @@
                           + strlen(RC_ECHO_STR) + strlen("\"\"") + 1) * sizeof (char);
                       szVerbose = malloc(nComverb);
                       sprintf(szVerbose, RC_EXN_TEXT, RC_CMN_TEXT, RC_CMN_TEXT);
  -                    nCommon = (strlen(szCom) + 1) * sizeof (char);
  +                    nCommon = (strlen(szCom) + strlen(RC_BANG_STR) + 1) * sizeof (char);
                       szExec = malloc(nComverb + nCommon);
  -                    strcpy(szExec, RC_ECHO_STR);    /* Start out with the echo string */
  +                    strcpy(szExec, RC_BANG_STR);    /* Start out with the bang string */
  +                    strcat(szExec, RC_ECHO_STR);    /* Continue with the echo string */
                       strcat(szExec, "\"");           /* Append a quote next to the echo */
                       strcat(szExec, szVerbose);      /* Continue with the verboseity text */
                       strcat(szExec, "\"");           /* Finalize the verbosity notice */
  @@ -382,7 +382,8 @@
                   else {
                       szTmp = (char *)sectionGetdata(ppSectmp[nTmp]);
                       szExec = malloc((strlen(szCom) + strlen(szTmp) + 1) * sizeof(char));
  -                    strcpy(szExec, szCom); /* Start out with just the common script code */
  +                    strcpy(szExec, RC_BANG_STR);    /* Start out with the shebang string */
  +                    strcat(szExec, szCom); /* Continue with just the common script code  */
                       strcat(szExec, szTmp); /* And build a section onto the command chain */
                       pszVec[2] = szExec;    /* Actually launch the new process image now  */
   
  @@ -415,15 +416,19 @@
       else if (configGetval(RC_PRN_VAL)) {                        /* Print  */
           /* Allocate a block of section pointers to use as a temporary */
           ppSectmp = calloc(pRc->m_pAnal->m_nRcs, sizeof(rc_section_t *));
  +        pBangscript = scriptNew();
  +        scriptAppend(pBangscript, RC_BANG_STR, (strlen(RC_BANG_STR) + 1) * sizeof (char));
           /* Conditionally print common section notice in verbal mode */
           if (configGetval(RC_VRB_VAL)) {
               nBytes = (strlen(RC_PRN_TEXT) + strlen(RC_CMN_TEXT) * 2 + 1) * sizeof (char);
               szVerbose = malloc(nBytes);
               sprintf(szVerbose, RC_PRN_TEXT, RC_CMN_TEXT, RC_CMN_TEXT);
  -            fprintf(stderr, "%s", szVerbose);
  +            scriptAppend(pBangscript, szVerbose, (strlen(szVerbose) + 1) * sizeof (char));
               free(szVerbose);
           }
  -        scriptDump(pRc->m_pScriptcom); /* Dump the common script */
  +        scriptDump(pBangscript);        /* Dump the common script with shebang */
  +        scriptDump(pRc->m_pScriptcom);  /* Dump the rest of the common script */
  +        scriptDelete(pBangscript);
           for (nSecs = 0; nSecs < pRc->m_pAnal->m_nSecs; nSecs++) {
               for (nRcs = 0; nRcs < pRc->m_pAnal->m_nRcs; nRcs++) {
                   nTmp = 0;
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jun 13 12:53:54 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 311D176D7E; Fri, 13 Jun 2003 12:53:54 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_script.c rc_test.sh
Message-Id: <20030613105354.311D176D7E@mail.ossp.org>
Date: Fri, 13 Jun 2003 12:53:54 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   13-Jun-2003 12:53:53
  Branch: HEAD                             Handle: 2003061311535300

  Modified files:
    ossp-pkg/rc             rc_script.c rc_test.sh

  Log:
    Force scriptNew to always allocate internal data, solving memory handling
    problems throughout the script class.

  Summary:
    Revision    Changes     Path
    1.29        +35 -25     ossp-pkg/rc/rc_script.c
    1.26        +5  -3      ossp-pkg/rc/rc_test.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_script.c
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 rc_script.c
  --- ossp-pkg/rc/rc_script.c	28 May 2003 14:25:56 -0000	1.28
  +++ ossp-pkg/rc/rc_script.c	13 Jun 2003 10:53:53 -0000	1.29
  @@ -49,9 +49,13 @@
       rc_script_t *pNew = NULL;
   
       pNew = (rc_script_t *)malloc(sizeof(rc_script_t));
  -    *pNew = malloc((strlen(scriptTostring(pOrig)) + 1) * sizeof(char));
  -    if (pNew)
  -        strcpy(*pNew, scriptTostring(pOrig));
  +    if (pNew) {
  +        *pNew = malloc((strlen(scriptTostring(pOrig)) + 1) * sizeof(char));
  +        if (*pNew)
  +            strcpy(*pNew, scriptTostring(pOrig));
  +        else
  +            RC_THROW(RC_ERR_MEM);
  +    }
       else
           RC_THROW(RC_ERR_MEM);
   
  @@ -67,7 +71,15 @@
       rc_script_t *pScript = NULL;
   
       pScript = (rc_script_t *)malloc(sizeof(rc_script_t));
  -    *pScript = NULL;
  +    if (pScript) {
  +        *pScript = malloc(sizeof(char));
  +        if (*pScript)
  +            **pScript = NULL;
  +        else
  +            RC_THROW(RC_ERR_MEM);
  +    }
  +    else
  +        RC_THROW(RC_ERR_MEM);
   
       return(pScript);
   }
  @@ -83,34 +95,27 @@
   
       assert(pScript); /* Script parameter must be valid */
   
  -    if (!szInbuf) {
  +    if (!szInbuf)
           return(RC_THROW(RC_ERR_USE));
  -    }
   
       /* Short circuit in case of dumb noop call */
       if (Size == 0)
           return(RC_THROW(RC_OK));
   
  -    /* Add 2 to end of nResize to ensure that a \0 precedes any strings */
  -    nResize = (*pScript != NULL ? strlen(*pScript) : 0) + Size + 2;
  +    /* Add 2 chars to ensure that a \0 precedes any strings */
  +    nResize = strlen(*pScript) + Size + sizeof (char) * 2;
       /* Don't trust realloc(3) in this case */
  -    if ((pvRealloc = calloc(1, (size_t)nResize)) == NULL) {
  +    if ((pvRealloc = calloc(1, (size_t)nResize)) == NULL)
           return(RC_THROW(RC_ERR_MEM));
  -    }
   
       /* Coerce strings into one Script again */
  -    if (*pScript) {
  +    if (*pScript)
           strcpy(pvRealloc, *pScript);
  -        strncat(pvRealloc, szInbuf, Size);
  -    }
  -    else
  -        strncpy(pvRealloc, szInbuf, Size);
  +    strncat(pvRealloc, szInbuf, Size);
   
       /* Cleanup and deallocate memory */
  -    if (*pScript) {
  +    if (*pScript)
           free(*pScript);
  -        *pScript = NULL;
  -    }
       *pScript = pvRealloc;
   
       return(RC_THROW(RC_OK));
  @@ -293,10 +298,10 @@
   {
       /* Don't remove this! It encapsulates the script object, */
       /*                    which might not be a simple string */
  -    if (pScript)
  +    if (pScript && *pScript)
           return(*pScript);
       else
  -        return(NULL);
  +        RC_THROW(RC_ERR_USE); /* Script was never constructed */
   }
   
   /************************************************
  @@ -308,7 +313,7 @@
       /* Don't remove this! It encapsulates the script object, */
       /*                    which might not be a simple string */
       if (pScript) {
  -        fprintf(stdout, "%s", *pScript);
  +        fprintf(stdout, "%s", scriptTostring(pScript));
           return(RC_THROW(RC_OK));
       }
       else
  @@ -333,7 +338,7 @@
       /* Don't remove this! It encapsulates the script object, */
       /*                    which might not be a simple string */
       if (pStream) {
  -        fprintf(pStream, "%s", *pScript);
  +        fprintf(pStream, "%s", scriptTostring(pScript));
           fclose(pStream);
           return(RC_THROW(RC_OK));
       }
  @@ -347,12 +352,17 @@
   ************************************************/
   rc_return_t scriptDelete(rc_script_t *pScript)
   {
  -    if (*pScript)
  +    assert(pScript); /* Check for a valid incoming script */
  +
  +    if (*pScript) {
           free(*pScript);
  -    else {
  -        RC_THROW(RC_WRN_NUL);
  +        *pScript = NULL;
       }
  +    else
  +        RC_THROW(RC_WRN_NUL);
  +
       free(pScript);
  +    pScript = NULL;
   
       return(RC_THROW(RC_OK));
   }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_test.sh
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 rc_test.sh
  --- ossp-pkg/rc/rc_test.sh	12 Jun 2003 14:24:15 -0000	1.25
  +++ ossp-pkg/rc/rc_test.sh	13 Jun 2003 10:53:53 -0000	1.26
  @@ -98,9 +98,11 @@
   read dummy;clear
   
   # Some examples using fake rc files and REAL ONES AS WELL, use with care!
  -echo "The following test will execute test suite code,"
  -echo "and code ALSO FROM YOUR REAL OPENPKG RC FILES!!!"
  -echo "If this concerns you, then press Ctrl-C now to exit."
  +echo "******************************************************"
  +echo "*The following test will execute test suite code,    *"
  +echo "*and code ALSO FROM YOUR REAL OPENPKG RC FILES!!!    *"
  +echo "*If this concerns you, then press Ctrl-C now to exit.*"
  +echo "******************************************************"
   echo; echo "<Press enter to continue>"
   read dummy;clear
   echo "./rc --conf $RCBASE/rc.conf --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" --locate $RCBASE/rc.d:./rc_test:/etc/rc --query all barf test"
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jun 13 13:50:38 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B6AD276D7E; Fri, 13 Jun 2003 13:50:37 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_private.h rc_sect.c
Message-Id: <20030613115037.B6AD276D7E@mail.ossp.org>
Date: Fri, 13 Jun 2003 13:50:37 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   13-Jun-2003 13:50:37
  Branch: HEAD                             Handle: 2003061312503700

  Modified files:
    ossp-pkg/rc             rc_private.h rc_sect.c

  Log:
    Strip off unused section label.

  Summary:
    Revision    Changes     Path
    1.31        +0  -1      ossp-pkg/rc/rc_private.h
    1.13        +0  -21     ossp-pkg/rc/rc_sect.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_private.h
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 rc_private.h
  --- ossp-pkg/rc/rc_private.h	11 Jun 2003 16:18:48 -0000	1.30
  +++ ossp-pkg/rc/rc_private.h	13 Jun 2003 11:50:37 -0000	1.31
  @@ -92,7 +92,6 @@
       int m_nPri;
       int m_nUid;
       char *m_szName;
  -    char *m_szLabel;
       char *m_szLogin;
       char *m_szData;
       size_t m_Bytes;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_sect.c
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 rc_sect.c
  --- ossp-pkg/rc/rc_sect.c	11 Jun 2003 16:18:48 -0000	1.12
  +++ ossp-pkg/rc/rc_sect.c	13 Jun 2003 11:50:37 -0000	1.13
  @@ -125,16 +125,6 @@
       return(0); /* Not reached */
   }
   
  -const char *sectionGetlabel(rc_section_t *pSec)
  -{ /* Rc label, used for display during verbose */
  -    if (pSec)
  -        return(pSec->m_szLabel);
  -    else
  -        RC_THROW(RC_ERR_USE);
  -
  -    return(0); /* Not reached */
  -}
  -
   const char *sectionGetlogin(rc_section_t *pSec)
   { /* User name of section, used for display during print */
       if (pSec)
  @@ -194,17 +184,6 @@
       if (pSec) {
           pSec->m_szName = malloc((strlen(szName) + 1) * sizeof (char));
           strcpy(pSec->m_szName, szName);
  -        return(RC_THROW(RC_OK));
  -    }
  -
  -    return(RC_THROW(RC_ERR_USE));
  -}
  -
  -rc_return_t sectionSetlabel(rc_section_t *pSec, const char *szLabel)
  -{ /* Rc label, used for display during verbose */
  -    if (pSec) {
  -        pSec->m_szLabel = malloc((strlen(szLabel) + 1) * sizeof (char));
  -        strcpy(pSec->m_szLabel, szLabel);
           return(RC_THROW(RC_OK));
       }
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jun 13 20:33:08 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6DC7B76D7D; Fri, 13 Jun 2003 20:33:08 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc.h rc_anal.c rc_cliopt.c rc_config.c rc_con...
Message-Id: <20030613183308.6DC7B76D7D@mail.ossp.org>
Date: Fri, 13 Jun 2003 20:33:08 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   13-Jun-2003 20:33:08
  Branch: HEAD                             Handle: 2003061319330700

  Modified files:
    ossp-pkg/rc             rc.h rc_anal.c rc_cliopt.c rc_config.c rc_config.h
                            rc_const.h rc_private.h rc_proc.c rc_script.c

  Log:
    Sweeping cleanups. Reduced the analyzer to almost nothing. Removed unused
    method prototypes. Added 'parse' mode option that doesn't work yet. Removed
    procReadtmp. Change the way we build path names from the locations directory.

  Summary:
    Revision    Changes     Path
    1.48        +2  -12     ossp-pkg/rc/rc.h
    1.20        +39 -131    ossp-pkg/rc/rc_anal.c
    1.18        +3  -0      ossp-pkg/rc/rc_cliopt.c
    1.32        +11 -10     ossp-pkg/rc/rc_config.c
    1.6         +23 -22     ossp-pkg/rc/rc_config.h
    1.24        +2  -0      ossp-pkg/rc/rc_const.h
    1.32        +1  -6      ossp-pkg/rc/rc_private.h
    1.45        +82 -40     ossp-pkg/rc/rc_proc.c
    1.30        +3  -1      ossp-pkg/rc/rc_script.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc.h
  ============================================================================
  $ cvs diff -u -r1.47 -r1.48 rc.h
  --- ossp-pkg/rc/rc.h	11 Jun 2003 16:18:48 -0000	1.47
  +++ ossp-pkg/rc/rc.h	13 Jun 2003 18:33:07 -0000	1.48
  @@ -101,13 +101,8 @@
   /* Analyser function prototypes */
   rc_anal_t *analNew(void);
   rc_return_t analDelete(rc_anal_t *);
  -rc_return_t analRcs(rc_anal_t **, const char *);
  -rc_return_t analTmp(rc_anal_t **, const char *);
  -rc_return_t analFuncs(rc_anal_t **, const char *);
  -rc_return_t analLocs(rc_anal_t **, const char *);
  -rc_return_t analSecs(rc_anal_t **, const char **);
  -rc_return_t analGloblocs(rc_anal_t **);
  -rc_return_t analParse(rc_anal_t *);
  +rc_return_t analRcs(rc_anal_t *, const char *);
  +rc_return_t analGloblocs(rc_anal_t *);
   
   /* Script function prototypes */
   rc_script_t *scriptNew(void);
  @@ -150,11 +145,6 @@
   /* Processor function prototypes */
   rc_proc_t *procNew(void);
   rc_return_t procDelete(rc_proc_t *);
  -rc_return_t procReadfuncs(rc_proc_t *, const char *);
  -rc_return_t procReadtmp(rc_proc_t *, const char *);
  -rc_return_t procReadrc(rc_proc_t *, const char *);
  -rc_return_t procSection(rc_proc_t *, const char *);
  -rc_return_t procParse(rc_proc_t *);
   rc_return_t procPopulate(rc_proc_t *);
   rc_return_t procRun(rc_proc_t *);
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_anal.c
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 rc_anal.c
  --- ossp-pkg/rc/rc_anal.c	28 May 2003 19:03:25 -0000	1.19
  +++ ossp-pkg/rc/rc_anal.c	13 Jun 2003 18:33:07 -0000	1.20
  @@ -50,29 +50,29 @@
   }
   
   /************************************************
  -* private analRcs(rc_anal_t **, const char *)   *
  +* private analRcs(rc_anal_t *, const char *)    *
   * Read a rc file identifier to analyse          *
   ************************************************/
  -rc_return_t analRcs(rc_anal_t **ppInst, const char *kszName)
  +rc_return_t analRcs(rc_anal_t *pInst, const char *kszName)
   {
       ex_t Except;
   
  -    assert(!(*ppInst)->m_pszRcs); /* Rcs should be NULL until we set them */
  +    assert(!(pInst)->m_pszRcs); /* Rcs should be NULL until we set them */
   
       if (!kszName)
           return(RC_THROW(RC_ERR_RCF));
       else { /* Only enter block with valid string, strdup can't handle NULL */
  -        (*ppInst)->m_pszRcs = malloc(sizeof(char **));
  +        pInst->m_pszRcs = malloc(sizeof(char **));
           if (strcmp(kszName, RC_GLOB_WILD)) {
  -            (*ppInst)->m_pszRcs = malloc(sizeof(*((*ppInst)->m_pszRcs)) * 2);
  -            (*ppInst)->m_pszRcs[0] = strdup(kszName);
  -            (*ppInst)->m_pszRcs[0] = strdup(kszName);
  -            (*ppInst)->m_pszRcs[1] = NULL;
  -            (*ppInst)->m_nRcs = 1;            /* We handle just one rc file */
  +            pInst->m_pszRcs = malloc(sizeof(*(pInst->m_pszRcs)) * 2);
  +            pInst->m_pszRcs[0] = strdup(kszName);
  +            pInst->m_pszRcs[0] = strdup(kszName);
  +            pInst->m_pszRcs[1] = NULL;
  +            pInst->m_nRcs = 1;            /* We handle just one rc file */
           }
           else { /* Wildcard rcfile indicates we must glob the locs directories */
               try {
  -                analGloblocs(ppInst);
  +                analGloblocs(pInst);
               }
               catch(Except)
                   rethrow;
  @@ -83,101 +83,39 @@
   }
   
   /************************************************
  -* private analTmp(rc_anal_t **, const char *)   *
  -* Read a temp file to analyze                   *
  -************************************************/
  -rc_return_t analTmp(rc_anal_t **ppInst, const char *kszName)
  -{
  -    if (!kszName) {
  -        (*ppInst)->m_szTmp = NULL;
  -/*        RC_THROW(RC_WRN_NUL);*/
  -    }
  -    else { /* Only enter block with valid string, strdup can't handle NULL */
  -        (*ppInst)->m_szTmp = strdup(kszName);
  -    }
  -
  -    return(RC_THROW(RC_OK));
  -}
  -
  -/************************************************
  -* private analFuncs(rc_anal_t **, const char *) *
  -* Read a functions file to analyse              *
  -************************************************/
  -rc_return_t analFuncs(rc_anal_t **ppInst, const char *kszName)
  -{
  -    if (!kszName) {
  -        (*ppInst)->m_szFuncs = NULL;
  -/*        RC_THROW(RC_WRN_NUL);*/
  -    }
  -    else { /* Only enter block with valid string, strdup can't handle NULL */
  -        (*ppInst)->m_szFuncs = strdup(kszName);
  -    }
  -
  -    return(RC_THROW(RC_OK));
  -}
  -
  -/************************************************
  -* private analLocs(rc_anal_t **, const char *)  *
  -* Read a location path expression to analyse    *
  +* analGloblocs(rc_anal_t *pInst)                *
  +* Glob all files of the location directories    *
   ************************************************/
  -rc_return_t analLocs(rc_anal_t **ppInst, const char *kszPathexpr)
  +rc_return_t analGloblocs(rc_anal_t *pInst)
   {
  -    if (!kszPathexpr) {
  -        (*ppInst)->m_szLocs = NULL;
  -        (*ppInst)->m_szLocs = strdup("./"); /* FIXME: Relocate default val */
  -/*        RC_THROW(RC_WRN_NUL);*/ /* FIXME: ex_ Illegal instruction - core dumped */
  +    DIR *pLocdir = NULL;
  +    struct dirent *pDirent = NULL;
  +    char *szLocations = NULL;   /* Locations of run command files */
  +    int nCount = 0;             /* How many globbed files we find */
  +    int nIter = 0;              /* Used to step through found files */
  +
  +    assert(pInst); /* Sanity check */
  +
  +    /* Build the location path name */
  +    if (!configGetval(RC_LOC_VAL)) {
  +        szLocations = NULL;
  +        szLocations = strdup("./"); /* FIXME: Relocate default val */
  +        RC_THROW(RC_ERR_INT);       /* Config should have given a locs default */
       }
       else { /* Only enter block with valid string, strdup can't handle NULL */
  -        if (*(kszPathexpr + strlen(kszPathexpr)) != '/') {
  -            (*ppInst)->m_szLocs = malloc(strlen(kszPathexpr) + 2 * sizeof(char));
  -            strcpy((*ppInst)->m_szLocs, kszPathexpr);
  -            if ((char)*((*ppInst)->m_szLocs + strlen((*ppInst)->m_szLocs) - 1) != '/')
  -                strcat((*ppInst)->m_szLocs, "/");
  +        if (*(configGetval(RC_LOC_VAL) + strlen(configGetval(RC_LOC_VAL)) - sizeof (char)) != '/') {
  +            szLocations = malloc(strlen(configGetval(RC_LOC_VAL)) + \
  +                                 sizeof (char) + \
  +                                 sizeof (char));
  +            strcpy(szLocations, configGetval(RC_LOC_VAL));
  +            strcat(szLocations, "/");
           }
           else
  -            (*ppInst)->m_szLocs = strdup(kszPathexpr);
  +            szLocations = strdup(configGetval(RC_LOC_VAL));
       }
   
  -    return(RC_THROW(RC_OK));
  -}
  -
  -/************************************************
  -* private analSecs(rc_anal_t **, const char **) *
  -* Read a sections vector to analyse             *
  -************************************************/
  -rc_return_t analSecs(rc_anal_t **ppInst, const char **pkszVector)
  -{
  -    ex_t Except;
  -
  -    if (!pkszVector) {
  -        RC_THROW(RC_WRN_NUL);
  -    }
  -
  -    ex_try {    /* Sections are a vector, so we must copy accordingly */
  -        (*ppInst)->m_pszSecs = vectorCopy(pkszVector);
  -        (*ppInst)->m_nSecs   = vectorCount(pkszVector);
  -    }
  -    ex_catch(Except)
  -        rethrow;
  -
  -    return(RC_THROW(RC_OK));
  -}
  -
  -/************************************************
  -* analGloblocs(rc_anal_t **ppInst)              *
  -* Glob all files of the location directories    *
  -************************************************/
  -rc_return_t analGloblocs(rc_anal_t **ppInst)
  -{
  -    DIR *pLocdir = NULL;
  -    struct dirent *pDirent = NULL;
  -    int nCount = 0; /* How many globbed files we find */
  -    int nIter = 0;  /* Used to step through found files */
  -
  -    assert(*ppInst); /* Sanity check */
  -
       /* First just learn how many globbed files we have */
  -    if ((pLocdir = opendir((*ppInst)->m_szLocs)) == NULL)
  +    if ((pLocdir = opendir(szLocations)) == NULL)
           return(RC_THROW(RC_ERR_DIR));
       for (pDirent = readdir(pLocdir); pDirent; pDirent = readdir(pLocdir))
           if (!strncmp(pDirent->d_name, "rc.", 3))
  @@ -187,44 +125,22 @@
       if (nCount == 0) /* Check out the health of this directory listing */
           return(RC_THROW(RC_ERR_DIR));
       else /* Allocate for the string array to hold directory entry names */
  -        (*ppInst)->m_pszRcs = malloc(sizeof(*((*ppInst)->m_pszRcs)) * (nCount + 1));
  +        pInst->m_pszRcs = malloc(sizeof(pInst->m_pszRcs) * (nCount + 1));
   
       /* Loop through file index setting rc file names according to dirent */
  -    if ((pLocdir = opendir((*ppInst)->m_szLocs)) == NULL)
  +    if ((pLocdir = opendir(szLocations)) == NULL)
           return(RC_THROW(RC_ERR_DIR));
       for (pDirent = readdir(pLocdir); pDirent; pDirent = readdir(pLocdir)) {
           if (!strncmp(pDirent->d_name, "rc.", 3)) {
  -            (*ppInst)->m_pszRcs[nIter] = strdup(pDirent->d_name + \
  +            pInst->m_pszRcs[nIter] = strdup(pDirent->d_name + \
                                            strlen("rc.") * sizeof(char));
               nIter++;
           }
       }
       closedir(pLocdir);
   
  -    (*ppInst)->m_pszRcs[nIter] = NULL; /* Terminate */
  -    (*ppInst)->m_nRcs = nCount; /* Store how many globbed files there are */
  -
  -    return(RC_THROW(RC_OK));
  -}
  -
  -/************************************************
  -* analParse(rc_anal_t *)                        *
  -* Parse the analyzed configuration data         *
  -************************************************/
  -rc_return_t analParse(rc_anal_t *pInst)
  -{
  -    ex_t Except;
  -
  -    assert(pInst); /* Verify sanity */
  -    ex_try { /* Read in data from the main configuration */
  -        analLocs (&pInst, configGetval(RC_LOC_VAL));
  -        analRcs  (&pInst, configGetrcfile());
  -        analTmp  (&pInst, configGetval(RC_TMP_VAL));
  -        analFuncs(&pInst, configGetval(RC_FNC_VAL));
  -        analSecs (&pInst, configGetsecs());
  -    }
  -    ex_catch(Except)
  -        rethrow;
  +    pInst->m_pszRcs[nIter] = NULL; /* Terminate */
  +    pInst->m_nRcs = nCount; /* Store how many globbed files there are */
   
       return(RC_THROW(RC_OK));
   }
  @@ -247,14 +163,6 @@
               free(pInst->m_pszRcs[nIter++]);
       if (pInst->m_pszRcs)            /* Rc file name index  */
           free(pInst->m_pszRcs);
  -    if (pInst->m_szTmp)             /* Temp file name      */
  -        free(pInst->m_szTmp);
  -    if (pInst->m_szFuncs)           /* Function file names */
  -        free(pInst->m_szFuncs);
  -    if (pInst->m_szLocs)            /* Location path names */
  -        free(pInst->m_szLocs);
  -    if (pInst->m_pszSecs)           /* Section names       */
  -        vectorDel(pInst->m_pszSecs);
   
       free(pInst);
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_cliopt.c
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 rc_cliopt.c
  --- ossp-pkg/rc/rc_cliopt.c	3 Jun 2003 15:27:13 -0000	1.17
  +++ ossp-pkg/rc/rc_cliopt.c	13 Jun 2003 18:33:07 -0000	1.18
  @@ -50,6 +50,7 @@
       {RC_INF_NAME, 'i', POPT_ARG_NONE, 0, RC_INF_VAL, RC_INF_DESC, NULL},
       {RC_LBL_NAME, 'l', POPT_ARG_NONE, 0, RC_LBL_VAL, RC_LBL_DESC, NULL},
       {RC_PRN_NAME, 'p', POPT_ARG_NONE, 0, RC_PRN_VAL, RC_PRN_DESC, NULL},
  +    {RC_PAR_NAME, 'a', POPT_ARG_NONE, 0, RC_PAR_VAL, RC_PAR_DESC, NULL},
       {RC_SIL_NAME, 's', POPT_ARG_NONE, 0, RC_SIL_VAL, RC_SIL_DESC, NULL},
       {RC_RAW_NAME, 'r', POPT_ARG_NONE, 0, RC_RAW_VAL, RC_RAW_DESC, NULL},
       {RC_VRB_NAME, 'v', POPT_ARG_NONE, 0, RC_VRB_VAL, RC_VRB_DESC, NULL},
  @@ -209,6 +210,8 @@
           case RC_LBL_VAL:                                   
               clioptSetval(cliOption, RC_DEF_ON); break;   /* Label    */
           case RC_PRN_VAL:                                   
  +            clioptSetval(cliOption, RC_DEF_ON); break;   /* Print    */
  +        case RC_PAR_VAL:                                   
               clioptSetval(cliOption, RC_DEF_ON); break;   /* Print    */
           case RC_SIL_VAL:                                   
               clioptSetval(cliOption, RC_DEF_ON); break;   /* Silent   */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_config.c
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 rc_config.c
  --- ossp-pkg/rc/rc_config.c	28 May 2003 18:58:16 -0000	1.31
  +++ ossp-pkg/rc/rc_config.c	13 Jun 2003 18:33:07 -0000	1.32
  @@ -129,12 +129,12 @@
       static char *s_szOptnametab[] = { /* NULL is for alignment */
           NULL,        RC_USE_NAME, RC_DBG_NAME, RC_VER_NAME,
           RC_EVL_NAME, RC_HLP_NAME, RC_INF_NAME, RC_LBL_NAME,
  -        RC_PRN_NAME, RC_SIL_NAME, RC_RAW_NAME, RC_VRB_NAME,
  -        RC_EXC_NAME, RC_LOC_NAME, RC_CNF_NAME, RC_FNC_NAME,
  -        RC_QRY_NAME, RC_TMP_NAME, RC_OWN_NAME, RC_GRP_NAME,
  -        RC_MSK_NAME, RC_ASS_NAME, RC_DEF_NAME, RC_REF_NAME,
  -        RC_PRM_NAME, RC_TRM_NAME, RC_NCF_NAME, RC_CMN_NAME,
  -        RC_DFL_NAME, RC_ERR_NAME
  +        RC_PRN_NAME, RC_PAR_NAME, RC_SIL_NAME, RC_RAW_NAME,
  +        RC_VRB_NAME, RC_EXC_NAME, RC_LOC_NAME, RC_CNF_NAME,
  +        RC_FNC_NAME, RC_QRY_NAME, RC_TMP_NAME, RC_OWN_NAME,
  +        RC_GRP_NAME, RC_MSK_NAME, RC_ASS_NAME, RC_DEF_NAME,
  +        RC_REF_NAME, RC_PRM_NAME, RC_TRM_NAME, RC_NCF_NAME,
  +        RC_CMN_NAME, RC_DFL_NAME, RC_ERR_NAME
       };
   
       if (m_nLocks) { /* Make sure config exists  */
  @@ -229,7 +229,8 @@
           /* Exec XOR Eval XOR Print */
           if (!configGetval(RC_EVL_VAL) \
               + !configGetval(RC_EXC_VAL) \
  -            + !configGetval(RC_PRN_VAL) < 2) { /* Warning! Magic number */
  +            + !configGetval(RC_PRN_VAL) \
  +            + !configGetval(RC_PAR_VAL) < 3) { /* Warning! Magic number */
               fprintf(stderr, RC_EEP_TEXT);
               bStop = TRUE;
           }
  @@ -238,8 +239,8 @@
               || configGetval(RC_VER_VAL) || configGetval(RC_EVL_VAL) \
               || configGetval(RC_HLP_VAL) || configGetval(RC_INF_VAL) \
               || configGetval(RC_LBL_VAL) || configGetval(RC_PRN_VAL) \
  -            || configGetval(RC_RAW_VAL) || configGetval(RC_VRB_VAL) \
  -            || configGetval(RC_QRY_VAL))) {
  +            || configGetval(RC_PAR_VAL) || configGetval(RC_RAW_VAL) \
  +            || configGetval(RC_VRB_VAL) || configGetval(RC_QRY_VAL))) {
               fprintf(stderr, RC_SLO_TEXT);
               bStop = TRUE;
           }
  @@ -286,7 +287,7 @@
   
       try { /* Test members for empty attributes */
           if (!configGetval(RC_EVL_VAL) && !configGetval(RC_EXC_VAL) \
  -            && !configGetval(RC_PRN_VAL))
  +            && !configGetval(RC_PRN_VAL) && !configGetval(RC_PAR_VAL))
               clioptSetval(RC_PRN_VAL, RC_DEF_ON);
   
   /*        if (!configGetval(RC_USE_VAL))
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_config.h
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 rc_config.h
  --- ossp-pkg/rc/rc_config.h	22 May 2002 13:29:40 -0000	1.5
  +++ ossp-pkg/rc/rc_config.h	13 Jun 2003 18:33:07 -0000	1.6
  @@ -40,28 +40,29 @@
   #define RC_INF_VAL   6  /* Info           */
   #define RC_LBL_VAL   7  /* Label          */
   #define RC_PRN_VAL   8  /* Print          */
  -#define RC_SIL_VAL   9  /* Silent         */
  -#define RC_RAW_VAL  10  /* Raw            */
  -#define RC_VRB_VAL  11  /* Verbose        */
  -#define RC_EXC_VAL  12  /* Exec           */
  -#define RC_LOC_VAL  13  /* Locations      */
  -#define RC_CNF_VAL  14  /* Conf file      */
  -#define RC_FNC_VAL  15  /* Func file      */
  -#define RC_QRY_VAL  16  /* Query          */
  -#define RC_TMP_VAL  17  /* Temp dir       */
  -#define RC_OWN_VAL  18  /* User name      */
  -#define RC_GRP_VAL  19  /* Group name     */
  -#define RC_MSK_VAL  20  /* Umask          */
  -#define RC_ASS_VAL  21  /* Assign regex   */
  -#define RC_DEF_VAL  22  /* Label regex    */
  -#define RC_REF_VAL  23  /* Ref regex      */
  -#define RC_PRM_VAL  24  /* Params regex   */
  -#define RC_TRM_VAL  25  /* Terminal regex */
  -#define RC_NCF_VAL  26  /* Config name    */
  -#define RC_CMN_VAL  27  /* Common name    */
  -#define RC_DFL_VAL  28  /* Default name   */
  -#define RC_ERR_VAL  29  /* Error name     */
  +#define RC_PAR_VAL   9  /* Parse names    */
  +#define RC_SIL_VAL  10  /* Silent         */
  +#define RC_RAW_VAL  11  /* Raw            */
  +#define RC_VRB_VAL  12  /* Verbose        */
  +#define RC_EXC_VAL  13  /* Exec           */
  +#define RC_LOC_VAL  14  /* Locations      */
  +#define RC_CNF_VAL  15  /* Conf file      */
  +#define RC_FNC_VAL  16  /* Func file      */
  +#define RC_QRY_VAL  17  /* Query          */
  +#define RC_TMP_VAL  18  /* Temp dir       */
  +#define RC_OWN_VAL  19  /* User name      */
  +#define RC_GRP_VAL  20  /* Group name     */
  +#define RC_MSK_VAL  21  /* Umask          */
  +#define RC_ASS_VAL  22  /* Assign regex   */
  +#define RC_DEF_VAL  23  /* Label regex    */
  +#define RC_REF_VAL  24  /* Ref regex      */
  +#define RC_PRM_VAL  25  /* Params regex   */
  +#define RC_TRM_VAL  26  /* Terminal regex */
  +#define RC_NCF_VAL  27  /* Config name    */
  +#define RC_CMN_VAL  28  /* Common name    */
  +#define RC_DFL_VAL  29  /* Default name   */
  +#define RC_ERR_VAL  30  /* Error name     */
   
  -#define RC_NUMOPTS  30  /* Increment with each option addition */
  +#define RC_NUMOPTS  31  /* Increment with each option addition */
   
   #endif /* __OSSPRC_CONFIG_H__ */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_const.h
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 rc_const.h
  --- ossp-pkg/rc/rc_const.h	12 Jun 2003 14:24:32 -0000	1.23
  +++ ossp-pkg/rc/rc_const.h	13 Jun 2003 18:33:07 -0000	1.24
  @@ -53,6 +53,7 @@
   #define RC_INF_DESC "Print a comprehensive summary of the rc environment."
   #define RC_LBL_DESC "Learn what section labels a rcfile has."
   #define RC_PRN_DESC "Output the command(s) in a format suitable for human reading, but do not run them."
  +#define RC_PAR_DESC "Parse the run command names along with each of their matching section names."
   #define RC_SIL_DESC "Be silent, and disable output to stdout."
   #define RC_RAW_DESC "Output text using no terminal control sequences."
   #define RC_VRB_DESC "Output text verbosely."
  @@ -86,6 +87,7 @@
   #define RC_INF_NAME "info"
   #define RC_LBL_NAME "labels"
   #define RC_PRN_NAME "print"
  +#define RC_PAR_NAME "parse"
   #define RC_SIL_NAME "silent"
   #define RC_RAW_NAME "raw"
   #define RC_VRB_NAME "verbose"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_private.h
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 rc_private.h
  --- ossp-pkg/rc/rc_private.h	13 Jun 2003 11:50:37 -0000	1.31
  +++ ossp-pkg/rc/rc_private.h	13 Jun 2003 18:33:07 -0000	1.32
  @@ -76,12 +76,7 @@
   /* Analyser type */
   typedef struct {
       short m_nRcs;       /* How many rc files   */
  -    short m_nSecs;      /* How many sections   */
       char **m_pszRcs;    /* Rc file names       */
  -    char *m_szTmp;      /* Temp file name      */
  -    char *m_szFuncs;    /* Function file names */
  -    char *m_szLocs;     /* Location path names */
  -    char **m_pszSecs;   /* Section vector      */
   } rc_anal_t;
   
   /* Script type */
  @@ -99,7 +94,7 @@
   
   /* Label type */
   typedef struct {
  -    int m_nSecs;
  +    short m_nSecs;
       char *m_szName;
       rc_section_t **m_ppSecvec;
   } rc_label_t;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.44 -r1.45 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	12 Jun 2003 14:24:32 -0000	1.44
  +++ ossp-pkg/rc/rc_proc.c	13 Jun 2003 18:33:07 -0000	1.45
  @@ -45,29 +45,23 @@
   ************************************************/
   rc_proc_t *procNew(void)
   {
  +    ex_t Except;
       rc_proc_t *pNewrc = NULL;
   
  -    pNewrc = malloc(sizeof(rc_proc_t));
  -    pNewrc->m_pAnal = analNew();        /* Construct a configuration analyser */
  -    analParse(pNewrc->m_pAnal);         /* Preprocess the anal configuration  */
  -    pNewrc->m_pScriptcom = scriptNew(); /* Construct a run-command script     */
  -    pNewrc->m_ppLabvec = calloc(pNewrc->m_pAnal->m_nRcs, sizeof(rc_label_t *));
  +    ex_try {
  +        pNewrc = malloc(sizeof(rc_proc_t));
  +        pNewrc->m_pAnal = analNew();        /* Construct a configuration analyser */
  +        analRcs (pNewrc->m_pAnal, configGetrcfile()); /* Preprocess analysis      */
  +        pNewrc->m_pScriptcom = scriptNew(); /* Construct a run-command script     */
  +        pNewrc->m_ppLabvec = calloc(pNewrc->m_pAnal->m_nRcs, sizeof(rc_label_t *));
  +    }
  +    ex_catch(Except)
  +        rethrow;
   
       return(pNewrc);
   }
   
   /************************************************
  -* procReadtmp(rc_proc_t *, const char *)        *
  -* Open and store a temp file                    *
  -************************************************/
  -rc_return_t procReadtmp(rc_proc_t *pRc, const char *szTmpname)
  -{
  -    fprintf(stderr, "%s!!!\n", szTmpname);
  -
  -    return(RC_THROW(RC_OK));
  -}
  -
  -/************************************************
   * procPopulate(rc_proc_t *)                     *
   * Populate the processor with run commands      *
   ************************************************/
  @@ -84,17 +78,18 @@
       rc_section_t *pSec        = NULL;
       char         *szLocex     = NULL;
       rc_script_t  *pTempscript = NULL;
  +    short         nTotalsecs  = vectorCount(configGetsecs());
   
       assert(*pRc->m_pAnal->m_pszRcs);
       sBuf = (char *)calloc(1, RC_READ_BUFSIZE);
   
       /* Open the func file if it exists in the configuration */
  -    if (pRc->m_pAnal->m_szFuncs) {
  -        if ((nFdfunc = open(pRc->m_pAnal->m_szFuncs, O_RDONLY)) >= 0) {
  +    if (configGetval(RC_FNC_VAL)) {
  +/* FIXME: Funcfile data does not belong in config section data! */
  +        if ((nFdfunc = open(configGetval(RC_FNC_VAL), O_RDONLY)) >= 0) {
               /* Read data from the func file */
  -            while ((nRet = read(nFdfunc, sBuf, RC_READ_BUFSIZE)) > 0) {
  +            while ((nRet = read(nFdfunc, sBuf, RC_READ_BUFSIZE)) > 0)
                   scriptAppend(pRc->m_pScriptcom, sBuf, nRet);
  -            }
               if (nRet == -1) /* Handle read errors */
                   RC_THROW(RC_ERR_IO);
               scriptAppend(pRc->m_pScriptcom, "\n", sizeof(char));
  @@ -107,18 +102,38 @@
       for (nRc = 0; nRc < pRc->m_pAnal->m_nRcs; nRc++)
       {
           assert(*pRc->m_pAnal->m_pszRcs);
  -        assert(pRc->m_pAnal->m_szLocs);
   
           /* Construct a new label */
           pRc->m_ppLabvec[nRc] = labelNew(pRc->m_pAnal->m_pszRcs[nRc]);
   
  -        /* Build the path name */
  -        szLocex = (char *)malloc(strlen(pRc->m_pAnal->m_szLocs) + \
  +        /* Build the location path name */
  +        if (!configGetval(RC_LOC_VAL)) {
  +            szLocex = NULL;
  +            szLocex = strdup("./"); /* FIXME: Relocate default val */
  +            RC_THROW(RC_ERR_INT);   /* Config should have given a locs default */
  +        }
  +        else { /* Only enter block with valid string, strdup can't handle NULL */
  +            if (*(configGetval(RC_LOC_VAL) + strlen(configGetval(RC_LOC_VAL)) - sizeof (char)) != '/') {
  +                szLocex = malloc(strlen(configGetval(RC_LOC_VAL)) + \
  +                                 sizeof (char) + \
  +                                 strlen("rc.") + \
  +                                 strlen(pRc->m_pAnal->m_pszRcs[nRc]) + \
  +                                 sizeof (char));
  +                strcpy(szLocex, configGetval(RC_LOC_VAL));
  +                strcat(szLocex, "/");
  +                strcat(szLocex, "rc."); /* FIXME: Make the prefix configurable */
  +                strcat(szLocex, pRc->m_pAnal->m_pszRcs[nRc]);
  +            }
  +            else {
  +                szLocex = malloc(strlen(configGetval(RC_LOC_VAL)) + \
  +                                 strlen("rc.") + \
                                    strlen(pRc->m_pAnal->m_pszRcs[nRc]) + \
  -                                 strlen("rc.") + 1);
  -        strcpy(szLocex, pRc->m_pAnal->m_szLocs);
  -        strcat(szLocex, "rc."); /* FIXME: Make the prefix configurable */
  -        strcat(szLocex, pRc->m_pAnal->m_pszRcs[nRc]);
  +                                 sizeof (char));
  +                strcpy(szLocex, configGetval(RC_LOC_VAL));
  +                strcat(szLocex, "rc."); /* FIXME: Make the prefix configurable */
  +                strcat(szLocex, pRc->m_pAnal->m_pszRcs[nRc]);
  +            }
  +        }
   
           /* Open the rc file unconditionally */
           if ((nFdrc = open(szLocex, O_RDONLY)) == -1)
  @@ -133,25 +148,24 @@
               RC_THROW(RC_ERR_IO);
   
           try {
  -            /* Append config section if it exists */
  +            /* Append common section if it exists */
               pSec = scriptSection(pTempscript, configGetval(RC_NCF_VAL));
               if (pSec) { /* Only operate if the section lookup succeeds */
                   scriptAppend(pRc->m_pScriptcom, sectionGetdata(pSec), strlen(sectionGetdata(pSec)));
  -                scriptAppend(pRc->m_pScriptcom, "\n", sizeof(char));
  +                scriptAppend(pRc->m_pScriptcom, "\n", strlen ("\n"));
                   sectionDelete(pSec);    /* Cleanup */
                   pSec = NULL;            /* Cleanup */
               }
   
  -            for (nSect = 0; nSect < pRc->m_pAnal->m_nSecs; nSect++) { /* Iterate over */
  +            for (nSect = 0; nSect < nTotalsecs; nSect++) { /* Iterate over */
                   /* Extract a section from the temp script, and append it */
  -                pSec = scriptSection(pTempscript, pRc->m_pAnal->m_pszSecs[nSect]);
  +                pSec = scriptSection(pTempscript, configGetsecs()[nSect]);
   
                   if (pSec) /* Only copy if the section lookup succeeds */
                       labelAppendsec(pRc->m_ppLabvec[nRc], pSec);
                   else if (configGetval(RC_DBG_VAL)) /* Only show if debug set */
                       fprintf(stderr, "#Warning: Missing section '%s' in %s!\n",\
  -                        pRc->m_pAnal->m_pszSecs[nSect],\
  -                        pRc->m_pAnal->m_pszRcs[nRc]);
  +                        configGetsecs()[nSect], pRc->m_pAnal->m_pszRcs[nRc]);
   
                   if (pSec) { /* Cleanup iterative section string */
                       sectionDelete(pSec);
  @@ -204,6 +218,7 @@
       rc_script_t   *pBangscript = NULL;  /* Common script with the shebang  */
       rc_script_t   *pFatscript  = NULL;  /* To build a comprehensive script */
       rc_section_t **ppSectmp    = NULL;  /* Used with priority scheduling   */
  +    short          nTotalsecs  = vectorCount(configGetsecs()); /* Sections */
   
       /****************************************************/
       /* This will execute, evaluate, or print the script */
  @@ -226,12 +241,12 @@
           }
           scriptAppend(pFatscript, scriptTostring(pRc->m_pScriptcom), \
               strlen(scriptTostring(pRc->m_pScriptcom)));
  -        for (nSecs = 0; nSecs < pRc->m_pAnal->m_nSecs; nSecs++) {
  +        for (nSecs = 0; nSecs < nTotalsecs; nSecs++) {
               for (nRcs = 0; nRcs < pRc->m_pAnal->m_nRcs; nRcs++) {
                   nTmp = 0;
                   while (nTmp < pRc->m_ppLabvec[nRcs]->m_nSecs && \
                       strcmp(pRc->m_ppLabvec[nRcs]->m_ppSecvec[nTmp]->m_szName, \
  -                                pRc->m_pAnal->m_pszSecs[nSecs]))
  +                                configGetsecs()[nSecs]))
                       nTmp++;
                   if (nTmp < pRc->m_ppLabvec[nRcs]->m_nSecs)
                       ppSectmp[nRcs] = pRc->m_ppLabvec[nRcs]->m_ppSecvec[nTmp];
  @@ -287,7 +302,7 @@
           /* This block does nothing more than implement the feature,         */
           /* that allows rc to run unprivileged (as long as no privileged     */
           /* code is used in the script sections to be executed               */
  -        for (nSecs = 0; nSecs < pRc->m_pAnal->m_nSecs; nSecs++) {
  +        for (nSecs = 0; nSecs < nTotalsecs; nSecs++) {
               for (nTmp = 0; nTmp < pRc->m_pAnal->m_nRcs; nTmp++) {
                   if (pRc->m_ppLabvec[nTmp]->m_ppSecvec && \
                       pRc->m_ppLabvec[nTmp]->m_ppSecvec[nSecs]) {
  @@ -304,12 +319,12 @@
           /* Allocate a block of section pointers to use temporarily */
           ppSectmp = calloc(pRc->m_pAnal->m_nRcs, sizeof(rc_section_t *));
           szCom = (char *)scriptTostring(pRc->m_pScriptcom);
  -        for (nSecs = 0; nSecs < pRc->m_pAnal->m_nSecs; nSecs++) {
  +        for (nSecs = 0; nSecs < nTotalsecs; nSecs++) {
               for (nRcs = 0; nRcs < pRc->m_pAnal->m_nRcs; nRcs++) {
                   nTmp = 0;
                   while (nTmp < pRc->m_ppLabvec[nRcs]->m_nSecs && \
                       strcmp(pRc->m_ppLabvec[nRcs]->m_ppSecvec[nTmp]->m_szName, \
  -                                pRc->m_pAnal->m_pszSecs[nSecs]))
  +                                configGetsecs()[nSecs]))
                       nTmp++;
                   if (nTmp < pRc->m_ppLabvec[nRcs]->m_nSecs)
                       ppSectmp[nRcs] = pRc->m_ppLabvec[nRcs]->m_ppSecvec[nTmp];
  @@ -429,12 +444,12 @@
           scriptDump(pBangscript);        /* Dump the common script with shebang */
           scriptDump(pRc->m_pScriptcom);  /* Dump the rest of the common script */
           scriptDelete(pBangscript);
  -        for (nSecs = 0; nSecs < pRc->m_pAnal->m_nSecs; nSecs++) {
  +        for (nSecs = 0; nSecs < nTotalsecs; nSecs++) {
               for (nRcs = 0; nRcs < pRc->m_pAnal->m_nRcs; nRcs++) {
                   nTmp = 0;
                   while (nTmp < pRc->m_ppLabvec[nRcs]->m_nSecs && \
                       strcmp(pRc->m_ppLabvec[nRcs]->m_ppSecvec[nTmp]->m_szName, \
  -                                pRc->m_pAnal->m_pszSecs[nSecs]))
  +                                configGetsecs()[nSecs]))
                       nTmp++;
                   if (nTmp < pRc->m_ppLabvec[nRcs]->m_nSecs)
                       ppSectmp[nRcs] = pRc->m_ppLabvec[nRcs]->m_ppSecvec[nTmp];
  @@ -454,6 +469,33 @@
                       free(szVerbose);
                   }
                   sectionDump(ppSectmp[nTmp]);
  +                nTmp++;
  +            }
  +        }
  +        free(ppSectmp);
  +        ppSectmp = NULL;
  +    }
  +    else if (configGetval(RC_PAR_VAL)) {                    /* Parse names */
  +        /* Allocate a block of section pointers to use as a temporary */
  +        ppSectmp = calloc(pRc->m_pAnal->m_nRcs, sizeof(rc_section_t *));
  +        fprintf(stderr, "file %s, section %s\n", pRc->m_ppLabvec[nRcs]->m_szName, RC_CMN_TEXT);
  +        for (nSecs = 0; nSecs < nTotalsecs; nSecs++) {
  +            for (nRcs = 0; nRcs < pRc->m_pAnal->m_nRcs; nRcs++) {
  +                nTmp = 0;
  +                while (nTmp < pRc->m_ppLabvec[nRcs]->m_nSecs && \
  +                    strcmp(pRc->m_ppLabvec[nRcs]->m_ppSecvec[nTmp]->m_szName, \
  +                                configGetsecs()[nSecs])) {
  +                    nTmp++;
  +                }
  +                if (nTmp < pRc->m_ppLabvec[nRcs]->m_nSecs)
  +                    ppSectmp[nRcs] = pRc->m_ppLabvec[nRcs]->m_ppSecvec[nTmp];
  +                else
  +                    ppSectmp[nRcs] = NULL;
  +            }
  +            qsort((void *)ppSectmp, (size_t)pRc->m_pAnal->m_nRcs, sizeof(rc_section_t *), priCompare);
  +            nTmp = 0;
  +            while (nTmp < pRc->m_pAnal->m_nRcs && ppSectmp[nTmp]) {
  +                fprintf(stderr, "section %s\n", ppSectmp[nTmp]->m_szName);
                   nTmp++;
               }
           }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_script.c
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 rc_script.c
  --- ossp-pkg/rc/rc_script.c	13 Jun 2003 10:53:53 -0000	1.29
  +++ ossp-pkg/rc/rc_script.c	13 Jun 2003 18:33:07 -0000	1.30
  @@ -301,7 +301,9 @@
       if (pScript && *pScript)
           return(*pScript);
       else
  -        RC_THROW(RC_ERR_USE); /* Script was never constructed */
  +        RC_THROW(RC_ERR_USE);   /* Script was never constructed */
  +
  +    return(NULL); /* Not reached */
   }
   
   /************************************************
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jun 17 16:01:26 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4BAB776DDC; Tue, 17 Jun 2003 16:01:24 +0200 (CEST)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ sio_sio.c
Message-Id: <20030617140124.4BAB776DDC@mail.ossp.org>
Date: Tue, 17 Jun 2003 16:01:24 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   17-Jun-2003 16:01:23
  Branch: HEAD                             Handle: 2003061715012300

  Modified files:
    ossp-pkg/sio            sio_sio.c

  Log:
    support systems that do not define SIZE_T_MAX

  Summary:
    Revision    Changes     Path
    1.4         +3  -0      ossp-pkg/sio/sio_sio.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_sio.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 sio_sio.c
  --- ossp-pkg/sio/sio_sio.c	6 Jan 2003 19:04:56 -0000	1.3
  +++ ossp-pkg/sio/sio_sio.c	17 Jun 2003 14:01:23 -0000	1.4
  @@ -32,6 +32,9 @@
   #include <stdlib.h>
   #include <string.h>
   #include <limits.h>
  +#ifndef SIZE_T_MAX
  +#define SIZE_T_MAX UINT_MAX
  +#endif
   
   #include "al.h"
   #include "sio.h"
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jun 18 16:35:31 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E715376E01; Wed, 18 Jun 2003 16:35:30 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ Makefile.in rc.h rc_anal.c rc_config.c rc_con...
Message-Id: <20030618143530.E715376E01@mail.ossp.org>
Date: Wed, 18 Jun 2003 16:35:30 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   18-Jun-2003 16:35:30
  Branch: HEAD                             Handle: 2003061815352900

  Added files:
    ossp-pkg/rc             rc_file.c rc_list.c
  Modified files:
    ossp-pkg/rc             Makefile.in rc.h rc_config.c rc_const.h
                            rc_private.h rc_proc.c rc_script.c rc_sect.c
  Removed files:
    ossp-pkg/rc             rc_anal.c rc_lab.c

  Log:
    Removed analyzer class, removed label class, implemented list class,
    implemented file class, cleanup and restructure.

  Summary:
    Revision    Changes     Path
    1.33        +2  -2      ossp-pkg/rc/Makefile.in
    1.49        +11 -11     ossp-pkg/rc/rc.h
    1.21        +0  -171    ossp-pkg/rc/rc_anal.c
    1.33        +5  -4      ossp-pkg/rc/rc_config.c
    1.25        +9  -3      ossp-pkg/rc/rc_const.h
    1.1         +182 -0     ossp-pkg/rc/rc_file.c
    1.5         +0  -154    ossp-pkg/rc/rc_lab.c
    1.1         +169 -0     ossp-pkg/rc/rc_list.c
    1.33        +10 -11     ossp-pkg/rc/rc_private.h
    1.46        +158 -116   ossp-pkg/rc/rc_proc.c
    1.31        +2  -2      ossp-pkg/rc/rc_script.c
    1.14        +6  -17     ossp-pkg/rc/rc_sect.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 Makefile.in
  --- ossp-pkg/rc/Makefile.in	20 May 2003 11:45:11 -0000	1.32
  +++ ossp-pkg/rc/Makefile.in	18 Jun 2003 14:35:29 -0000	1.33
  @@ -59,10 +59,10 @@
   TARGET_PROGS    = rc
   TARGET_MANS     = rc.1 rc-sample.5
   
  -SRCS            = rc.c rc_error.c rc_anal.c rc_script.c rc_lab.c rc_sect.c rc_config.c \
  +SRCS            = rc.c rc_error.c rc_list.c rc_script.c rc_file.c rc_sect.c rc_config.c \
                     rc_cliopt.c rc_proc.c rc_version.c rc_pcre.c rc_util.c
   
  -OBJS            = rc.o rc_error.o rc_anal.o rc_script.o rc_lab.o rc_sect.o rc_config.o \
  +OBJS            = rc.o rc_error.o rc_list.o rc_script.o rc_file.o rc_sect.o rc_config.o \
                     rc_cliopt.o rc_proc.o rc_version.o rc_pcre.o rc_util.o
   
   SUBDIRS         = @SUBDIR_EX@ @SUBDIR_POPT@
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc.h
  ============================================================================
  $ cvs diff -u -r1.48 -r1.49 rc.h
  --- ossp-pkg/rc/rc.h	13 Jun 2003 18:33:07 -0000	1.48
  +++ ossp-pkg/rc/rc.h	18 Jun 2003 14:35:29 -0000	1.49
  @@ -98,11 +98,10 @@
   rc_return_t clioptSetrcfile(const char *);
   rc_return_t clioptSetsecs(const char **);
   
  -/* Analyser function prototypes */
  -rc_anal_t *analNew(void);
  -rc_return_t analDelete(rc_anal_t *);
  -rc_return_t analRcs(rc_anal_t *, const char *);
  -rc_return_t analGloblocs(rc_anal_t *);
  +/* List function prototypes */
  +rc_list_t *listNew(void);
  +rc_return_t listDelete(rc_list_t *);
  +rc_return_t listPopulate(rc_list_t *, const char *);
   
   /* Script function prototypes */
   rc_script_t *scriptNew(void);
  @@ -114,12 +113,13 @@
   const char *scriptTostring(rc_script_t *);
   rc_return_t scriptDelete(rc_script_t *);
   
  -/* Label function prototypes */
  -rc_label_t *labelNew(const char *);
  -rc_return_t labelAppendsec(rc_label_t *, rc_section_t *);
  -rc_return_t labelDelete(rc_label_t *);
  -const char *labelGetname(rc_label_t *);
  -rc_return_t labelSetname(rc_label_t *, const char *);
  +/* Rcfile function prototypes */
  +rc_file_t  *rcfileNew(const char *);
  +rc_return_t rcfileAppendsec(rc_file_t *, rc_section_t *);
  +const char *rcfileGetname(rc_file_t *);
  +rc_return_t rcfileSetname(rc_file_t *, const char *);
  +short rcfileExists(rc_file_t *);
  +rc_return_t rcfileDelete(rc_file_t *);
   
   /* Section function prototypes */
   rc_section_t *sectionNew(const char *);
  @@ .
  rm -f ossp-pkg/rc/rc_anal.c <<'@@ .'
  Index: ossp-pkg/rc/rc_anal.c
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_config.c
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 rc_config.c
  --- ossp-pkg/rc/rc_config.c	13 Jun 2003 18:33:07 -0000	1.32
  +++ ossp-pkg/rc/rc_config.c	18 Jun 2003 14:35:29 -0000	1.33
  @@ -74,10 +74,10 @@
       char **pszTemp = NULL;  /* For holding the section string vector */
   
       try {
  -        fprintf(stderr, "Run command file: %s\n", configGetrcfile());
  +        fprintf(stderr, "# Run command file: %s\n", configGetrcfile());
   
           pszTemp = (char **)configGetsecs();
  -        fprintf(stderr, "Sections:");
  +        fprintf(stderr, "# Sections:");
           for (i = 0; pszTemp[i]; i++)
               fprintf(stderr, " %s", pszTemp[i]);
           fputc('\n', stderr);
  @@ -86,11 +86,12 @@
           for (i = 0; i < RC_NUMOPTS; i++) {
               if (configGetval(i) == NULL); /* NOP */
               else if (!(strcmp(configGetval(i), "1")))
  -                fprintf(stderr, "Option %s is on.\n", configGetname(i));
  +                fprintf(stderr, "# Option %s is on.\n", configGetname(i));
               else
  -                fprintf(stderr, "Option %s is %s.\n", configGetname(i),\
  +                fprintf(stderr, "# Option %s is %s.\n", configGetname(i),\
                       configGetval(i));
           }
  +        fputc('\n', stderr);
       }
   
       catch(Except)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_const.h
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 rc_const.h
  --- ossp-pkg/rc/rc_const.h	13 Jun 2003 18:33:07 -0000	1.24
  +++ ossp-pkg/rc/rc_const.h	18 Jun 2003 14:35:29 -0000	1.25
  @@ -37,9 +37,15 @@
   #define RC_SLO_TEXT "The silent option may not be combined with output options.\n"
   #define RC_SUM_TEXT "Option argument summary.\n"
   #define RC_RUT_TEXT "Failed to set the user id. Please become the root user and try again.\n"
  -#define RC_EVN_TEXT "# Evaluating section %s of script %s.\n"
  -#define RC_EXN_TEXT "# Executing section %s of script %s.\n"
  -#define RC_PRN_TEXT "# Printing section %s of script %s.\n"
  +
  +/* Generic text, should not include newline termination */
  +#define RC_VST_TEXT "# Start of run command script operations."
  +#define RC_EVF_TEXT "# Evaluating code from functions file."
  +#define RC_EVN_TEXT "# Evaluating section %s of script %s."
  +#define RC_EXF_TEXT "# Executing code from functions file."
  +#define RC_EXN_TEXT "# Executing section %s of script %s."
  +#define RC_PNF_TEXT "# Printing code from functions file."
  +#define RC_PRN_TEXT "# Printing section %s of script %s."
   
   /* Single word user text, should not include termination */
   #define RC_CMN_TEXT "common"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_file.c
  ============================================================================
  $ cvs diff -u -r0 -r1.1 rc_file.c
  --- /dev/null	2003-06-18 16:35:30.000000000 +0200
  +++ rc_file.c	2003-06-18 16:35:30.000000000 +0200
  @@ -0,0 +1,182 @@
  +/*  OSSP rc - Run-command processor
  +**  Copyright (c) 2002 Ralf S. Engelschall
  +**  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +**
  +**  This file is part of OSSP rc, a portable Run-command processor
  +**  which can be found at http://www.ossp.org/pkg/lib/rc/
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  rc_file.c: Run-command processor ISO C source file
  +*/
  +
  +#include <string.h> /* For string copy and such data ops */
  +#include <stdlib.h> /* For memory ops */
  +
  +#include "rc.h"     /* Public Rc interface */
  +
  +
  +/************************************************
  +* rcfileNew(void)                               *
  +* Construct a new rcfile                        *
  +************************************************/
  +rc_file_t *rcfileNew(const char *szName)
  +{
  +    rc_file_t *pRcfile = NULL;
  +
  +    pRcfile = (rc_file_t *)calloc(1, sizeof(rc_file_t));   /* Allocate and clear */
  +    if (!pRcfile)                                          /* Ensure storage */
  +        RC_THROW(RC_ERR_MEM);
  +
  +    if (szName) {
  +        pRcfile->m_szName = malloc((strlen(szName) + 1) * sizeof(char));
  +        strcpy(pRcfile->m_szName, szName);
  +    }
  +    else
  +        pRcfile->m_szName = NULL;
  +
  +    /* Default values */
  +    pRcfile->m_nSecs = -1;
  +    pRcfile->m_ppSecvec = NULL;
  +
  +    return(pRcfile);
  +}
  +
  +/****************************************************
  +* rcfileAppendsec(rc_file_t *, rc_section_t *)      *
  +* Append a section to this rcfile                   *
  +****************************************************/
  +rc_return_t rcfileAppendsec(rc_file_t *pRcfile, rc_section_t *pInsec)
  +{
  +    assert(pRcfile);    /* Rcfile parameter must be valid */
  +    if (!pInsec)        /* Check sanity */
  +        return(RC_THROW(RC_ERR_USE));
  +
  +    /* When appending to a brand new rcfile, reset the object key (m_nSecs) */
  +    if (pRcfile->m_nSecs == -1)
  +        pRcfile->m_nSecs = 0;
  +
  +    /* First make our vector larger to hold one more section */
  +    pRcfile->m_ppSecvec = realloc(pRcfile->m_ppSecvec, sizeof(rc_section_t *) \
  +                                                     * (pRcfile->m_nSecs + 1));
  +    pRcfile->m_ppSecvec[pRcfile->m_nSecs] = sectionNew(pInsec->m_szName);
  +    pRcfile->m_ppSecvec[pRcfile->m_nSecs + 1] = NULL;
  +
  +    /* Simple value copy */
  +    pRcfile->m_ppSecvec[pRcfile->m_nSecs]->m_nPri  = pInsec->m_nPri;
  +    pRcfile->m_ppSecvec[pRcfile->m_nSecs]->m_nUid  = pInsec->m_nUid;
  +
  +    /* Deep copy of user name */
  +    if (pInsec->m_szLogin) {
  +        pRcfile->m_ppSecvec[pRcfile->m_nSecs]->m_szLogin = \
  +            malloc((strlen(pInsec->m_szLogin) + sizeof(char)) * sizeof(char));
  +        strcpy(pRcfile->m_ppSecvec[pRcfile->m_nSecs]->m_szLogin, pInsec->m_szLogin);
  +    }
  +
  +    /* Deep copy of section text */
  +    if (pInsec->m_szData) {
  +        pRcfile->m_ppSecvec[pRcfile->m_nSecs]->m_szData = \
  +            malloc((strlen(pInsec->m_szData) + sizeof(char)) * sizeof(char));
  +        strcpy(pRcfile->m_ppSecvec[pRcfile->m_nSecs]->m_szData, pInsec->m_szData);
  +    }
  +
  +    /* Finally increment section count */
  +    pRcfile->m_nSecs++;
  +
  +    return(RC_THROW(RC_OK));
  +}
  +
  +/************************************************
  +* rcfileGetXXX(rc_file_t *)                     *
  +* Accessor methods                              *
  +************************************************/
  +const char *rcfileGetname(rc_file_t *pRcfile)
  +{ /* Name of rcfile, used for display during verbose */
  +    if (pRcfile)
  +        return(pRcfile->m_szName);
  +    else
  +        RC_THROW(RC_ERR_USE);
  +
  +    return(0); /* Not reached */
  +}
  +
  +/************************************************
  +* rcfileSetXXX(rc_file_t *, const ... *)        *
  +* Accessor methods                              *
  +************************************************/
  +rc_return_t rcfileSetname(rc_file_t *pRcfile, const char *szName)
  +{ /* Name of rcfile, used for display during verbose */
  +    if (pRcfile) {
  +        pRcfile->m_szName = malloc((strlen(szName) + 1) * sizeof (char));
  +        strcpy(pRcfile->m_szName, szName);
  +        return(RC_THROW(RC_OK));
  +    }
  +
  +    return(RC_THROW(RC_ERR_USE));
  +}
  +
  +/************************************************
  +* rcfileExists(rc_file_t *)                     *
  +* Tests for an existing rcfile object           *
  +************************************************/
  +short rcfileExists(rc_file_t *pRcfile)
  +{ /* Key on name of rcfile */
  +    if (pRcfile) {
  +        if (pRcfile->m_szName)
  +            return(TRUE);   /* Object does indeed exist */
  +        else
  +            return(FALSE);  /* Object does not exist    */
  +    }
  +
  +    return(RC_THROW(RC_ERR_USE));
  +}
  +
  +/************************************************
  +* rcfileDelete(rc_file_t *)                     *
  +* Destruct a rcfile                             *
  +************************************************/
  +rc_return_t rcfileDelete(rc_file_t *pRcfile)
  +{
  +    int nSecs = pRcfile->m_nSecs;
  +
  +    /* Cleanup our junk */
  +    if (pRcfile) {
  +        pRcfile->m_nSecs = 0;       /* Blank the section count    */
  +        if (pRcfile->m_szName) {    /* Destroy the rc name        */
  +            free(pRcfile->m_szName);
  +            pRcfile->m_szName = NULL;
  +        }
  +        while (nSecs-- > 0) {       /* Destroy the section vector */
  +            if (pRcfile->m_ppSecvec[nSecs]) {
  +                sectionDelete(pRcfile->m_ppSecvec[nSecs]);
  +                pRcfile->m_ppSecvec[nSecs] = NULL;
  +            }
  +        }
  +        free(pRcfile->m_ppSecvec);
  +        pRcfile->m_ppSecvec = NULL;
  +        free(pRcfile);
  +        pRcfile = NULL;
  +    }
  +    else    /* Dumbass passed an empty rcfile object */
  +        assert(FALSE);
  +
  +    return(RC_THROW(RC_OK));
  +}
  +
  @@ .
  rm -f ossp-pkg/rc/rc_lab.c <<'@@ .'
  Index: ossp-pkg/rc/rc_lab.c
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_list.c
  ============================================================================
  $ cvs diff -u -r0 -r1.1 rc_list.c
  --- /dev/null	2003-06-18 16:35:30.000000000 +0200
  +++ rc_list.c	2003-06-18 16:35:30.000000000 +0200
  @@ -0,0 +1,169 @@
  +/*  OSSP rc - Run-command processor
  +**  Copyright (c) 2002 Ralf S. Engelschall
  +**  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +**
  +**  This file is part of OSSP rc, a portable Run-command processor
  +**  which can be found at http://www.ossp.org/pkg/lib/rc/
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  rc_list.c: Run-command processor ISO C source file
  +*/
  +
  +#include <stdlib.h>
  +#include <string.h>
  +#include <dirent.h>
  +
  +#include "rc.h"         /* Public interfaces        */
  +#include "rc_const.h"   /* String constants         */
  +#include "rc_config.h"  /* Configuration interface  */
  +
  +
  +/************************************************
  +* listNew(void)                                 *
  +* Construct a new rcfile list                   *
  +************************************************/
  +rc_list_t *listNew(void)
  +{
  +    rc_list_t *pNew = NULL;
  +
  +    /* Allocate storage for one list object */
  +    pNew = calloc(1, sizeof(rc_list_t));
  +    return(pNew);
  +}
  +
  +/**************************************************
  +* private listPopulate(rc_list_t *, const char *) *
  +* Read the rcfile identifier and analyse it       *
  +**************************************************/
  +rc_return_t listPopulate(rc_list_t *pInst, const char *kszName)
  +{
  +    ex_t Except;
  +
  +    assert(pInst); /* Verify sanity */
  +    assert(!pInst->m_ppFilevec); /* Rcfiles should be NULL until we set them */
  +
  +    if (!kszName)
  +        return(RC_THROW(RC_ERR_RCF));
  +    else { /* Only enter block with valid string, strdup can't handle NULL */
  +        pInst->m_ppFilevec = malloc(sizeof (rc_file_t *));
  +        if (strcmp(kszName, RC_GLOB_WILD)) {
  +            pInst->m_ppFilevec[0] = rcfileNew(kszName);  /* For an object  */
  +            pInst->m_ppFilevec[1] = rcfileNew(NULL);     /* For the tail   */
  +            pInst->m_nFiles = 1;             /* We handle just one rc file */
  +        }
  +        else { /* Wildcard rcfile indicates to glob the locs directories  */
  +            try {
  +                DIR *pLocdir = NULL;
  +                struct dirent *pDirent = NULL;
  +                char *szLocations = NULL;   /* Locations of run command files */
  +                int nCount = 0;             /* How many globbed files we find */
  +                int nIter = 0;              /* Used to step through found files */
  +
  +                assert(pInst); /* Sanity check */
  +
  +                /* Build the location path name */
  +                if (!configGetval(RC_LOC_VAL)) {
  +                    szLocations = NULL;
  +                    szLocations = strdup("./"); /* FIXME: Relocate default val */
  +                    RC_THROW(RC_ERR_INT);       /* Config should have given a locs default */
  +                }
  +                else { /* Only enter block with valid string, strdup can't handle NULL */
  +                    if (*(configGetval(RC_LOC_VAL) + strlen(configGetval(RC_LOC_VAL)) - \
  +                                                     sizeof (char)) != '/') {
  +                        szLocations = malloc(strlen(configGetval(RC_LOC_VAL)) + \
  +                                             sizeof (char) + \
  +                                             sizeof (char));
  +                        strcpy(szLocations, configGetval(RC_LOC_VAL));
  +                        strcat(szLocations, "/");
  +                    }
  +                    else
  +                        szLocations = strdup(configGetval(RC_LOC_VAL));
  +                }
  +
  +                /* First just learn how many globbed files we have */
  +                if ((pLocdir = opendir(szLocations)) == NULL)
  +                    return(RC_THROW(RC_ERR_DIR));
  +                for (pDirent = readdir(pLocdir); pDirent; pDirent = readdir(pLocdir))
  +                    if (!strncmp(pDirent->d_name, "rc.", strlen("rc.")))
  +                        nCount++;
  +                closedir(pLocdir);
  +
  +                /* Prepare resources before entering rcfile allocation loop */
  +                if (nCount == 0) /* Check out the health of this directory listing */
  +                    return(RC_THROW(RC_ERR_DIR));
  +                nIter = 0; /* Used in the next for block, so initialize */
  +                pInst->m_ppFilevec = calloc(nCount + 1, sizeof (rc_file_t *));
  +                if (!pInst->m_ppFilevec) /* Guard against memory overruns */
  +                    return(RC_THROW(RC_ERR_MEM));
  +                if ((pLocdir = opendir(szLocations)) == NULL)
  +                    return(RC_THROW(RC_ERR_DIR));
  +
  +                /* Loop through file index setting rc file names according to dirent */
  +                for (pDirent = readdir(pLocdir); pDirent; pDirent = readdir(pLocdir))
  +                    if (!strncmp(pDirent->d_name, "rc.", strlen("rc.")))
  +                        pInst->m_ppFilevec[nIter++] = rcfileNew(pDirent->d_name + strlen("rc.") * sizeof (char));
  +
  +                /* Clean up our used resources and prepare to exit */
  +                pInst->m_ppFilevec[nIter] = rcfileNew(NULL); /* Make the tail */
  +                pInst->m_nFiles = nIter;      /* Store how many globbed files */
  +                assert(nCount == nIter);    /* Be cautious, ensure numbers */
  +                free(szLocations);          /* Cleanup our temp */
  +                szLocations = NULL;         /* locations string */
  +                closedir(pLocdir);
  +            }
  +            catch(Except)
  +                rethrow;
  +        }
  +    }
  +
  +    return(RC_THROW(RC_OK));
  +}
  +
  +/************************************************
  +* listDelete(rc_list_t *)                       *
  +* Destruct a rcfile list                        *
  +************************************************/
  +rc_return_t listDelete(rc_list_t *pInst)
  +{
  +/* FIXME: It could be that pInst needs to be a double pointer to */
  +/*        be properly used in destruction. Otherwise members are */
  +/*        just copies of the stack parameters passed in.         */
  +    int nIter = 0;
  +
  +    assert(pInst);  /* Verify sanity */
  +
  +    if (pInst->m_ppFilevec) {
  +        for (nIter = 0; nIter <= pInst->m_nFiles; nIter++) {
  +            if (pInst->m_ppFilevec[nIter]) {
  +                free(pInst->m_ppFilevec[nIter]); /* Deallocate a rcfile */
  +                pInst->m_ppFilevec[nIter] = NULL;
  +            }
  +        }
  +        free(pInst->m_ppFilevec);       /* Deallocate the rcfile vector */
  +        pInst->m_ppFilevec = NULL;
  +    }
  +
  +    free(pInst);                        /* Deallocate the list itself   */
  +    pInst = NULL;
  +
  +    return(RC_THROW(RC_OK));
  +}
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_private.h
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 rc_private.h
  --- ossp-pkg/rc/rc_private.h	13 Jun 2003 18:33:07 -0000	1.32
  +++ ossp-pkg/rc/rc_private.h	18 Jun 2003 14:35:29 -0000	1.33
  @@ -73,12 +73,6 @@
   
   typedef int rc_opt_t;   /* For use with RC_XXX_VAL definitions  */
   
  -/* Analyser type */
  -typedef struct {
  -    short m_nRcs;       /* How many rc files   */
  -    char **m_pszRcs;    /* Rc file names       */
  -} rc_anal_t;
  -
   /* Script type */
   typedef char * rc_script_t;
   
  @@ -89,21 +83,26 @@
       char *m_szName;
       char *m_szLogin;
       char *m_szData;
  -    size_t m_Bytes;
   } rc_section_t;
   
  -/* Label type */
  +/* Rcfile class */
   typedef struct {
       short m_nSecs;
       char *m_szName;
       rc_section_t **m_ppSecvec;
  -} rc_label_t;
  +} rc_file_t;
  +
  +/* List class (can be implemented as array) */
  +typedef struct {
  +    short m_nFiles;
  +    rc_file_t **m_ppFilevec;
  +} rc_list_t;
   
   /* Processor class */
   typedef struct {
  -    rc_anal_t *m_pAnal;
  +    rc_script_t *m_pScriptfunc;
       rc_script_t *m_pScriptcom;
  -    rc_label_t **m_ppLabvec;
  +    rc_list_t *m_pList;
   } rc_proc_t;
   
   #endif /* __OSSPRC_PRIVATE_H__ */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.45 -r1.46 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	13 Jun 2003 18:33:07 -0000	1.45
  +++ ossp-pkg/rc/rc_proc.c	18 Jun 2003 14:35:29 -0000	1.46
  @@ -50,10 +50,10 @@
   
       ex_try {
           pNewrc = malloc(sizeof(rc_proc_t));
  -        pNewrc->m_pAnal = analNew();        /* Construct a configuration analyser */
  -        analRcs (pNewrc->m_pAnal, configGetrcfile()); /* Preprocess analysis      */
  -        pNewrc->m_pScriptcom = scriptNew(); /* Construct a run-command script     */
  -        pNewrc->m_ppLabvec = calloc(pNewrc->m_pAnal->m_nRcs, sizeof(rc_label_t *));
  +        pNewrc->m_pList = listNew();              /* Construct a rcfile list  */
  +        listPopulate(pNewrc->m_pList, configGetrcfile()); /* Prepopulate list */
  +        pNewrc->m_pScriptfunc = scriptNew(); /* Construct a functions script  */
  +        pNewrc->m_pScriptcom  = scriptNew(); /* Construct a common script     */
       }
       ex_catch(Except)
           rethrow;
  @@ -71,40 +71,38 @@
       int nFdrc   = -1;
       int nFdfunc = -1;
       int nRet    = 0;
  -    int nRc     = 0;
  +    int nRcs    = 0;
       ex_t Except;
   
       char         *sBuf        = NULL;
  -    rc_section_t *pSec        = NULL;
       char         *szLocex     = NULL;
       rc_script_t  *pTempscript = NULL;
  +    rc_section_t *pSec        = NULL;
       short         nTotalsecs  = vectorCount(configGetsecs());
   
  -    assert(*pRc->m_pAnal->m_pszRcs);
  +    assert(pRc->m_pList->m_ppFilevec);
       sBuf = (char *)calloc(1, RC_READ_BUFSIZE);
   
       /* Open the func file if it exists in the configuration */
       if (configGetval(RC_FNC_VAL)) {
  -/* FIXME: Funcfile data does not belong in config section data! */
  +        /* FIXME: Funcfile data does not belong in config section data! */
           if ((nFdfunc = open(configGetval(RC_FNC_VAL), O_RDONLY)) >= 0) {
               /* Read data from the func file */
               while ((nRet = read(nFdfunc, sBuf, RC_READ_BUFSIZE)) > 0)
  -                scriptAppend(pRc->m_pScriptcom, sBuf, nRet);
  +                scriptAppend(pRc->m_pScriptfunc, sBuf, nRet);
               if (nRet == -1) /* Handle read errors */
                   RC_THROW(RC_ERR_IO);
  -            scriptAppend(pRc->m_pScriptcom, "\n", sizeof(char));
  +            scriptAppend(pRc->m_pScriptfunc, "\n", sizeof("\n"));
           }
           else
               RC_THROW(RC_ERR_FNC);
       }
   
       /* Iteratively read possibly globbed rc files */
  -    for (nRc = 0; nRc < pRc->m_pAnal->m_nRcs; nRc++)
  +    for (nRcs = 0; nRcs < pRc->m_pList->m_nFiles; nRcs++)
       {
  -        assert(*pRc->m_pAnal->m_pszRcs);
  -
  -        /* Construct a new label */
  -        pRc->m_ppLabvec[nRc] = labelNew(pRc->m_pAnal->m_pszRcs[nRc]);
  +        if (!pRc->m_pList->m_ppFilevec[nRcs])
  +            RC_THROW(RC_ERR_INT); /* Rcfile vector is missing its tail */
   
           /* Build the location path name */
           if (!configGetval(RC_LOC_VAL)) {
  @@ -117,21 +115,21 @@
                   szLocex = malloc(strlen(configGetval(RC_LOC_VAL)) + \
                                    sizeof (char) + \
                                    strlen("rc.") + \
  -                                 strlen(pRc->m_pAnal->m_pszRcs[nRc]) + \
  +                                 strlen(pRc->m_pList->m_ppFilevec[nRcs]->m_szName) + \
                                    sizeof (char));
                   strcpy(szLocex, configGetval(RC_LOC_VAL));
                   strcat(szLocex, "/");
                   strcat(szLocex, "rc."); /* FIXME: Make the prefix configurable */
  -                strcat(szLocex, pRc->m_pAnal->m_pszRcs[nRc]);
  +                strcat(szLocex, pRc->m_pList->m_ppFilevec[nRcs]->m_szName);
               }
               else {
                   szLocex = malloc(strlen(configGetval(RC_LOC_VAL)) + \
                                    strlen("rc.") + \
  -                                 strlen(pRc->m_pAnal->m_pszRcs[nRc]) + \
  +                                 strlen(pRc->m_pList->m_ppFilevec[nRcs]->m_szName) + \
                                    sizeof (char));
                   strcpy(szLocex, configGetval(RC_LOC_VAL));
                   strcat(szLocex, "rc."); /* FIXME: Make the prefix configurable */
  -                strcat(szLocex, pRc->m_pAnal->m_pszRcs[nRc]);
  +                strcat(szLocex, pRc->m_pList->m_ppFilevec[nRcs]->m_szName);
               }
           }
   
  @@ -162,10 +160,10 @@
                   pSec = scriptSection(pTempscript, configGetsecs()[nSect]);
   
                   if (pSec) /* Only copy if the section lookup succeeds */
  -                    labelAppendsec(pRc->m_ppLabvec[nRc], pSec);
  +                    rcfileAppendsec(pRc->m_pList->m_ppFilevec[nRcs], pSec);
                   else if (configGetval(RC_DBG_VAL)) /* Only show if debug set */
                       fprintf(stderr, "#Warning: Missing section '%s' in %s!\n",\
  -                        configGetsecs()[nSect], pRc->m_pAnal->m_pszRcs[nRc]);
  +                        configGetsecs()[nSect], pRc->m_pList->m_ppFilevec[nRcs]->m_szName);
   
                   if (pSec) { /* Cleanup iterative section string */
                       sectionDelete(pSec);
  @@ -211,6 +209,7 @@
       pid_t Pidexec   = -1;               /* When spawning before execv(3)   */
       char *szTmpfile = NULL;             /* Path of temporary file          */
       char *szTmp     = NULL;             /* Generic temporary string        */
  +    char *szFunc    = NULL;             /* Stores func script text         */
       char *szCom     = NULL;             /* Stores common script text       */
       char *szExec    = NULL;             /* Used only during exec mode      */
       char *szVerbose = NULL;             /* Used when handling verbose mode */
  @@ -228,43 +227,64 @@
       /****************************************************/
       if (configGetval(RC_EVL_VAL)) {                             /* Evaluate */
           /* Allocate a block of section pointers to use temporarily */
  -        ppSectmp = calloc(pRc->m_pAnal->m_nRcs, sizeof(rc_section_t *));
  +        ppSectmp = calloc(pRc->m_pList->m_nFiles, sizeof(rc_section_t *));
           pFatscript = scriptNew();
           scriptAppend(pFatscript, RC_BANG_STR, strlen(RC_BANG_STR)); /* Shebang */
  +        /* Conditionally output initial notice in verbal mode */
  +        if (configGetval(RC_VRB_VAL)) {
  +            szVerbose = malloc((strlen(RC_VST_TEXT) + 2) * sizeof (char));
  +            sprintf(szVerbose, "%s", RC_VST_TEXT);
  +            strcat(szVerbose, "\n");
  +            scriptAppend(pFatscript, szVerbose, strlen(szVerbose));
  +            free(szVerbose);
  +            szVerbose = NULL;
  +        }
  +        /* Conditionally print funcs section notice in verbal mode */
  +        if (configGetval(RC_VRB_VAL)) {
  +            szVerbose = malloc((strlen(RC_EVF_TEXT) + 2) * sizeof (char));
  +            sprintf(szVerbose, "%s", RC_EVF_TEXT);
  +            strcat(szVerbose, "\n");
  +            scriptAppend(pFatscript, szVerbose, strlen(szVerbose));
  +            free(szVerbose);
  +            szVerbose = NULL;
  +        }
  +        scriptAppend(pFatscript, scriptTostring(pRc->m_pScriptfunc), \
  +            strlen(scriptTostring(pRc->m_pScriptfunc)));
           /* Conditionally print common section notice in verbal mode */
           if (configGetval(RC_VRB_VAL)) {
  -            nBytes = (strlen(RC_PRN_TEXT) + strlen(RC_CMN_TEXT) * 2 + 1) * sizeof (char);
  +            nBytes = (strlen(RC_EVN_TEXT) + strlen(RC_CMN_TEXT) * 2 + 2) * sizeof (char);
               szVerbose = malloc(nBytes);
  -            sprintf(szVerbose, RC_PRN_TEXT, RC_CMN_TEXT, RC_CMN_TEXT);
  +            sprintf(szVerbose, RC_EVN_TEXT, RC_CMN_TEXT, RC_CMN_TEXT);
  +            strcat(szVerbose, "\n");
               scriptAppend(pFatscript, szVerbose, strlen(szVerbose));
               free(szVerbose);
  +            szVerbose = NULL;
           }
           scriptAppend(pFatscript, scriptTostring(pRc->m_pScriptcom), \
               strlen(scriptTostring(pRc->m_pScriptcom)));
           for (nSecs = 0; nSecs < nTotalsecs; nSecs++) {
  -            for (nRcs = 0; nRcs < pRc->m_pAnal->m_nRcs; nRcs++) {
  -                nTmp = 0;
  -                while (nTmp < pRc->m_ppLabvec[nRcs]->m_nSecs && \
  -                    strcmp(pRc->m_ppLabvec[nRcs]->m_ppSecvec[nTmp]->m_szName, \
  -                                configGetsecs()[nSecs]))
  -                    nTmp++;
  -                if (nTmp < pRc->m_ppLabvec[nRcs]->m_nSecs)
  -                    ppSectmp[nRcs] = pRc->m_ppLabvec[nRcs]->m_ppSecvec[nTmp];
  +            for (nRcs = 0; nRcs < pRc->m_pList->m_nFiles; nRcs++) {
  +                for (nTmp = 0; nTmp < pRc->m_pList->m_ppFilevec[nRcs]->m_nSecs && \
  +                    strcmp(pRc->m_pList->m_ppFilevec[nRcs]->m_ppSecvec[nTmp]->m_szName, \
  +                    configGetsecs()[nSecs]); nTmp++);
  +                if (nTmp < pRc->m_pList->m_ppFilevec[nRcs]->m_nSecs)
  +                    ppSectmp[nRcs] = pRc->m_pList->m_ppFilevec[nRcs]->m_ppSecvec[nTmp];
                   else
                       ppSectmp[nRcs] = NULL;
               }
  -            qsort((void *)ppSectmp, (size_t)pRc->m_pAnal->m_nRcs, \
  +            qsort((void *)ppSectmp, (size_t)pRc->m_pList->m_nFiles, \
                   sizeof(rc_section_t *), priCompare);
  -            nTmp = 0;
  -            while (nTmp < pRc->m_pAnal->m_nRcs && ppSectmp[nTmp]) {
  +            for (nTmp = 0; nTmp < pRc->m_pList->m_nFiles && ppSectmp[nTmp]; nTmp++) {
                   /* Conditionally print each section notice in verbal mode */
                   if (configGetval(RC_VRB_VAL)) {
                       szTmp = (char *)sectionGetname(ppSectmp[nTmp]);
  -                    nBytes = (strlen(RC_EVN_TEXT) + strlen(szTmp) + 1) * sizeof (char);
  +                    nBytes = (strlen(RC_EVN_TEXT) + strlen(szTmp) + 2) * sizeof (char);
                       szVerbose = malloc(nBytes);
                       sprintf(szVerbose, RC_EVN_TEXT, szTmp, szTmp);
  +                    strcat(szVerbose, "\n");
                       scriptAppend(pFatscript, szVerbose, strlen(szVerbose));
                       free(szVerbose);
  +                    szVerbose = NULL;
                   }
                   if ((szTmp = (char *)sectionGetlogin(ppSectmp[nTmp])) != NULL) {
                       scriptAppend(pFatscript, "#su ", strlen("#su "));
  @@ -273,7 +293,6 @@
                   }
                   szTmp = (char *)sectionGetdata(ppSectmp[nTmp]);
                   scriptAppend(pFatscript, szTmp, strlen(szTmp) + 1);
  -                nTmp++;
               }
           }
           free(ppSectmp);
  @@ -303,11 +322,11 @@
           /* that allows rc to run unprivileged (as long as no privileged     */
           /* code is used in the script sections to be executed               */
           for (nSecs = 0; nSecs < nTotalsecs; nSecs++) {
  -            for (nTmp = 0; nTmp < pRc->m_pAnal->m_nRcs; nTmp++) {
  -                if (pRc->m_ppLabvec[nTmp]->m_ppSecvec && \
  -                    pRc->m_ppLabvec[nTmp]->m_ppSecvec[nSecs]) {
  +            for (nTmp = 0; nTmp < pRc->m_pList->m_nFiles; nTmp++) {
  +                if (pRc->m_pList->m_ppFilevec[nTmp]->m_ppSecvec && \
  +                    pRc->m_pList->m_ppFilevec[nTmp]->m_ppSecvec[nSecs]) {
                       nRunuid = getuid();
  -                    nSectuid = pRc->m_ppLabvec[nTmp]->m_ppSecvec[nSecs]->m_nUid;
  +                    nSectuid = pRc->m_pList->m_ppFilevec[nTmp]->m_ppSecvec[nSecs]->m_nUid;
                       /* See if root user status is needed, and bail out if so */
                       if (nRunuid != 0 && nSectuid != -1 && nRunuid != nSectuid) {
                           fprintf(stderr, RC_RUT_TEXT);
  @@ -317,44 +336,57 @@
               }
           }
           /* Allocate a block of section pointers to use temporarily */
  -        ppSectmp = calloc(pRc->m_pAnal->m_nRcs, sizeof(rc_section_t *));
  -        szCom = (char *)scriptTostring(pRc->m_pScriptcom);
  +        ppSectmp = calloc(pRc->m_pList->m_nFiles, sizeof(rc_section_t *));
  +        szFunc = (char *)scriptTostring(pRc->m_pScriptfunc);
  +        szCom  = (char *)scriptTostring(pRc->m_pScriptcom);
           for (nSecs = 0; nSecs < nTotalsecs; nSecs++) {
  -            for (nRcs = 0; nRcs < pRc->m_pAnal->m_nRcs; nRcs++) {
  -                nTmp = 0;
  -                while (nTmp < pRc->m_ppLabvec[nRcs]->m_nSecs && \
  -                    strcmp(pRc->m_ppLabvec[nRcs]->m_ppSecvec[nTmp]->m_szName, \
  -                                configGetsecs()[nSecs]))
  -                    nTmp++;
  -                if (nTmp < pRc->m_ppLabvec[nRcs]->m_nSecs)
  -                    ppSectmp[nRcs] = pRc->m_ppLabvec[nRcs]->m_ppSecvec[nTmp];
  +            for (nRcs = 0; nRcs < pRc->m_pList->m_nFiles; nRcs++) {
  +                for (nTmp = 0; nTmp < pRc->m_pList->m_ppFilevec[nRcs]->m_nSecs && \
  +                    strcmp(pRc->m_pList->m_ppFilevec[nRcs]->m_ppSecvec[nTmp]->m_szName, \
  +                                configGetsecs()[nSecs]); nTmp++);
  +                if (nTmp < pRc->m_pList->m_ppFilevec[nRcs]->m_nSecs)
  +                    ppSectmp[nRcs] = pRc->m_pList->m_ppFilevec[nRcs]->m_ppSecvec[nTmp];
                   else
                       ppSectmp[nRcs] = NULL;
               }
  -            qsort((void *)ppSectmp, (size_t)pRc->m_pAnal->m_nRcs, sizeof(rc_section_t *), priCompare);
  +            qsort((void *)ppSectmp, (size_t)pRc->m_pList->m_nFiles, sizeof(rc_section_t *), priCompare);
               pszVec[0] = "/bin/sh";  /* Run the bourne shell over the following */
               pszVec[1] = "-c";       /* Append script code of the sections */
               pszVec[3] = NULL;       /* Add a NULL to mark the end of the chain */
               nTmp = 0; /* Count from zero until however many sections we have */
  -            while (nTmp < pRc->m_pAnal->m_nRcs && ppSectmp[nTmp]) {
  +            while (nTmp < pRc->m_pList->m_nFiles && ppSectmp[nTmp]) {
                   /* Conditionally print common and other section notices in verbal mode */
                   if (configGetval(RC_VRB_VAL)) {
  -                    size_t nComverb = 0;
  -                    size_t nCommon  = 0;
  +                    size_t nSizverb = 0;
  +                    size_t nPrescr  = 0;
                       size_t nSecverb = 0;
                       size_t nSection = 0;
  -                    nComverb = (strlen(RC_EXN_TEXT) + strlen(RC_CMN_TEXT) * 2 \
  +
  +                    /* Allocate space just for string to prepare for verbose */
  +                    nSizverb = (strlen(RC_EXN_TEXT) + strlen(RC_CMN_TEXT) * 2 \
                           + strlen(RC_ECHO_STR) + strlen("\"\"") + 1) * sizeof (char);
  -                    szVerbose = malloc(nComverb);
  +                    szVerbose = malloc(nSizverb);
                       sprintf(szVerbose, RC_EXN_TEXT, RC_CMN_TEXT, RC_CMN_TEXT);
  -                    nCommon = (strlen(szCom) + strlen(RC_BANG_STR) + 1) * sizeof (char);
  -                    szExec = malloc(nComverb + nCommon);
  +
  +                    /* Allocate space for entire string to execvp(3) */
  +                    nPrescr = (strlen(RC_VST_TEXT) + strlen(RC_EXF_TEXT) + \
  +                        strlen(szVerbose) + strlen(szFunc) + strlen(szCom) + \
  +                        strlen(RC_BANG_STR) + 1) * sizeof (char);
  +                    szExec = malloc(nSizverb + nPrescr);
  +
                       strcpy(szExec, RC_BANG_STR);    /* Start out with the bang string */
                       strcat(szExec, RC_ECHO_STR);    /* Continue with the echo string */
                       strcat(szExec, "\"");           /* Append a quote next to the echo */
  -                    strcat(szExec, szVerbose);      /* Continue with the verboseity text */
  -                    strcat(szExec, "\"");           /* Finalize the verbosity notice */
  -                    strcat(szExec, szCom);          /* Then with the common script code */
  +                    strcat(szExec, RC_VST_TEXT);    /* Continue with the start text */
  +                    strcat(szExec, "\n");           /* Stick a newline inbetween */
  +                    strcat(szExec, RC_EXF_TEXT);    /* Continue with the func text */
  +                    strcat(szExec, "\";");          /* Finalize the verbosity notice */
  +                    strcat(szExec, szFunc);         /* Continue with the common script code */
  +                    strcat(szExec, RC_ECHO_STR);    /* Continue with the echo string */
  +                    strcat(szExec, "\"");           /* Append a quote next to the echo */
  +                    strcat(szExec, szVerbose);      /* Continue with the common text */
  +                    strcat(szExec, "\";");          /* Finalize the verbosity notice */
  +                    strcat(szExec, szCom);          /* Then with the funcs script code  */
                       szTmp = (char *)sectionGetname(ppSectmp[nTmp]);
                       nSecverb = (strlen(RC_EXN_TEXT) + strlen(szTmp) * 2 \
                           + strlen(RC_ECHO_STR) + strlen("\"\"") + 1) * sizeof (char);
  @@ -362,11 +394,11 @@
                       sprintf(szVerbose, RC_EXN_TEXT, szTmp, szTmp);
                       szTmp = (char *)sectionGetdata(ppSectmp[nTmp]);
                       nSection = (strlen(szTmp) + 1) * sizeof (char);
  -                    realloc(szExec, nComverb + nCommon + nSecverb + nSection);
  +                    realloc(szExec, nSizverb + nPrescr + nSecverb + nSection);
                       strcat(szExec, RC_ECHO_STR);    /* Start out with the echo string */
                       strcat(szExec, "\"");           /* Append a quote next to the echo */
                       strcat(szExec, szVerbose);      /* Continue with the verboseity text */
  -                    strcat(szExec, "\"");           /* Finalize the verbosity notice */
  +                    strcat(szExec, "\";");          /* Finalize the verbosity notice */
                       strcat(szExec, szTmp);          /* Then with the new script code */
                       pszVec[2] = szExec;             /* Launch the new process image now  */
                       free(szVerbose);
  @@ -396,11 +428,13 @@
                   }
                   else {
                       szTmp = (char *)sectionGetdata(ppSectmp[nTmp]);
  -                    szExec = malloc((strlen(szCom) + strlen(szTmp) + 1) * sizeof(char));
  -                    strcpy(szExec, RC_BANG_STR);    /* Start out with the shebang string */
  -                    strcat(szExec, szCom); /* Continue with just the common script code  */
  -                    strcat(szExec, szTmp); /* And build a section onto the command chain */
  -                    pszVec[2] = szExec;    /* Actually launch the new process image now  */
  +                    szExec = malloc((strlen(szFunc) + strlen(szCom) + \
  +                        strlen(szTmp) + 1) * sizeof(char));
  +                    strcpy(szExec, RC_BANG_STR);     /* Start out with the shebang string */
  +                    strcat(szExec, szFunc); /* Continue with just the funcs script code   */
  +                    strcat(szExec, szCom);  /* Continue with just the common script code  */
  +                    strcat(szExec, szTmp);  /* And build a section onto the command chain */
  +                    pszVec[2] = szExec;     /* Actually launch the new process image now  */
   
                       /* Spawn the section shell code */
                       switch (Pidexec = fork()){
  @@ -430,35 +464,43 @@
       }
       else if (configGetval(RC_PRN_VAL)) {                        /* Print  */
           /* Allocate a block of section pointers to use as a temporary */
  -        ppSectmp = calloc(pRc->m_pAnal->m_nRcs, sizeof(rc_section_t *));
  +        ppSectmp = calloc(pRc->m_pList->m_nFiles, sizeof(rc_section_t *));
           pBangscript = scriptNew();
           scriptAppend(pBangscript, RC_BANG_STR, (strlen(RC_BANG_STR) + 1) * sizeof (char));
  +        scriptDump(pBangscript); /* Dump the shebang */
  +        scriptDelete(pBangscript);
  +
  +        /* Conditionally output initial notice in verbal mode */
  +        if (configGetval(RC_VRB_VAL))
  +            fprintf(stderr, "%s\n", RC_VST_TEXT);
  +        /* Conditionally print funcs section notice in verbal mode */
  +        if (configGetval(RC_VRB_VAL))
  +            fprintf(stderr, "%s\n", RC_EVF_TEXT);
  +        scriptDump(pRc->m_pScriptfunc); /* Dump the funcs script */
           /* Conditionally print common section notice in verbal mode */
           if (configGetval(RC_VRB_VAL)) {
  -            nBytes = (strlen(RC_PRN_TEXT) + strlen(RC_CMN_TEXT) * 2 + 1) * sizeof (char);
  +            nBytes = (strlen(RC_EVN_TEXT) + strlen(RC_CMN_TEXT) * 2 + 2) * sizeof (char);
               szVerbose = malloc(nBytes);
  -            sprintf(szVerbose, RC_PRN_TEXT, RC_CMN_TEXT, RC_CMN_TEXT);
  -            scriptAppend(pBangscript, szVerbose, (strlen(szVerbose) + 1) * sizeof (char));
  +            sprintf(szVerbose, RC_EVN_TEXT, RC_CMN_TEXT, RC_CMN_TEXT);
  +            strcat(szVerbose, "\n");
  +            fprintf(stderr, szVerbose);
               free(szVerbose);
  +            szVerbose = NULL;
           }
  -        scriptDump(pBangscript);        /* Dump the common script with shebang */
  -        scriptDump(pRc->m_pScriptcom);  /* Dump the rest of the common script */
  -        scriptDelete(pBangscript);
  +        scriptDump(pRc->m_pScriptcom);  /* Dump the common script */
  +
           for (nSecs = 0; nSecs < nTotalsecs; nSecs++) {
  -            for (nRcs = 0; nRcs < pRc->m_pAnal->m_nRcs; nRcs++) {
  -                nTmp = 0;
  -                while (nTmp < pRc->m_ppLabvec[nRcs]->m_nSecs && \
  -                    strcmp(pRc->m_ppLabvec[nRcs]->m_ppSecvec[nTmp]->m_szName, \
  -                                configGetsecs()[nSecs]))
  -                    nTmp++;
  -                if (nTmp < pRc->m_ppLabvec[nRcs]->m_nSecs)
  -                    ppSectmp[nRcs] = pRc->m_ppLabvec[nRcs]->m_ppSecvec[nTmp];
  +            for (nRcs = 0; nRcs < pRc->m_pList->m_nFiles; nRcs++) {
  +                for (nTmp = 0; nTmp < pRc->m_pList->m_ppFilevec[nRcs]->m_nSecs && \
  +                    strcmp(pRc->m_pList->m_ppFilevec[nRcs]->m_ppSecvec[nTmp]->m_szName, \
  +                                configGetsecs()[nSecs]); nTmp++);
  +                if (nTmp < pRc->m_pList->m_ppFilevec[nRcs]->m_nSecs)
  +                    ppSectmp[nRcs] = pRc->m_pList->m_ppFilevec[nRcs]->m_ppSecvec[nTmp];
                   else
                       ppSectmp[nRcs] = NULL;
               }
  -            qsort((void *)ppSectmp, (size_t)pRc->m_pAnal->m_nRcs, sizeof(rc_section_t *), priCompare);
  -            nTmp = 0;
  -            while (nTmp < pRc->m_pAnal->m_nRcs && ppSectmp[nTmp]) {
  +            qsort((void *)ppSectmp, (size_t)pRc->m_pList->m_nFiles, sizeof(rc_section_t *), priCompare);
  +            for (nTmp = 0; nTmp < pRc->m_pList->m_nFiles && ppSectmp[nTmp]; nTmp++) {
                   /* Conditionally print each section notice in verbal mode */
                   if (configGetval(RC_VRB_VAL)) {
                       szTmp = (char *)sectionGetname(ppSectmp[nTmp]);
  @@ -467,9 +509,9 @@
                       sprintf(szVerbose, RC_PRN_TEXT, szTmp, szTmp);
                       fprintf(stderr, "%s", szVerbose);
                       free(szVerbose);
  +                    szVerbose = NULL;
                   }
                   sectionDump(ppSectmp[nTmp]);
  -                nTmp++;
               }
           }
           free(ppSectmp);
  @@ -477,27 +519,21 @@
       }
       else if (configGetval(RC_PAR_VAL)) {                    /* Parse names */
           /* Allocate a block of section pointers to use as a temporary */
  -        ppSectmp = calloc(pRc->m_pAnal->m_nRcs, sizeof(rc_section_t *));
  -        fprintf(stderr, "file %s, section %s\n", pRc->m_ppLabvec[nRcs]->m_szName, RC_CMN_TEXT);
  +        ppSectmp = calloc(pRc->m_pList->m_nFiles, sizeof(rc_section_t *));
  +        fprintf(stderr, "file %s, section %s\n", pRc->m_pList->m_ppFilevec[nRcs]->m_szName, RC_CMN_TEXT);
           for (nSecs = 0; nSecs < nTotalsecs; nSecs++) {
  -            for (nRcs = 0; nRcs < pRc->m_pAnal->m_nRcs; nRcs++) {
  -                nTmp = 0;
  -                while (nTmp < pRc->m_ppLabvec[nRcs]->m_nSecs && \
  -                    strcmp(pRc->m_ppLabvec[nRcs]->m_ppSecvec[nTmp]->m_szName, \
  -                                configGetsecs()[nSecs])) {
  -                    nTmp++;
  -                }
  -                if (nTmp < pRc->m_ppLabvec[nRcs]->m_nSecs)
  -                    ppSectmp[nRcs] = pRc->m_ppLabvec[nRcs]->m_ppSecvec[nTmp];
  +            for (nRcs = 0; nRcs < pRc->m_pList->m_nFiles; nRcs++) {
  +                for (nTmp = 0; nTmp < pRc->m_pList->m_ppFilevec[nRcs]->m_nSecs && \
  +                    strcmp(pRc->m_pList->m_ppFilevec[nRcs]->m_ppSecvec[nTmp]->m_szName, \
  +                                configGetsecs()[nSecs]); nTmp++);
  +                if (nTmp < pRc->m_pList->m_ppFilevec[nRcs]->m_nSecs)
  +                    ppSectmp[nRcs] = pRc->m_pList->m_ppFilevec[nRcs]->m_ppSecvec[nTmp];
                   else
                       ppSectmp[nRcs] = NULL;
               }
  -            qsort((void *)ppSectmp, (size_t)pRc->m_pAnal->m_nRcs, sizeof(rc_section_t *), priCompare);
  -            nTmp = 0;
  -            while (nTmp < pRc->m_pAnal->m_nRcs && ppSectmp[nTmp]) {
  +            qsort((void *)ppSectmp, (size_t)pRc->m_pList->m_nFiles, sizeof(rc_section_t *), priCompare);
  +            for (nTmp = 0; nTmp < pRc->m_pList->m_nFiles && ppSectmp[nTmp]; nTmp++)
                   fprintf(stderr, "section %s\n", ppSectmp[nTmp]->m_szName);
  -                nTmp++;
  -            }
           }
           free(ppSectmp);
           ppSectmp = NULL;
  @@ -514,20 +550,26 @@
   ************************************************/
   rc_return_t procDelete(rc_proc_t *pRc)
   {
  -    int nRcs = pRc->m_pAnal->m_nRcs;
  +    int nRcs = pRc->m_pList->m_nFiles;
   
  -    /* Destroy the label vector */
  -    while (nRcs-- > 0) {
  -        if (pRc->m_ppLabvec[nRcs]) {
  -            labelDelete(pRc->m_ppLabvec[nRcs]);
  -            pRc->m_ppLabvec[nRcs] = NULL;
  -        }
  -    }
  -    free(pRc->m_ppLabvec);
  -    pRc->m_ppLabvec = NULL;
  -    scriptDelete(pRc->m_pScriptcom);    /* Destroy the script        */
  -    analDelete(pRc->m_pAnal);           /* Destroy the analyser      */
  +    scriptDelete(pRc->m_pScriptcom);    /* Destroy the common script */
  +    pRc->m_pScriptcom = NULL;
  +    scriptDelete(pRc->m_pScriptfunc);   /* Destroy the funcs script  */
  +    pRc->m_pScriptcom = NULL;
  +
  +    /* Destroy the rcfile objects */
  +    while (nRcs-- > 0)
  +        if (rcfileExists(pRc->m_pList->m_ppFilevec[nRcs])) {
  +            rcfileDelete(pRc->m_pList->m_ppFilevec[nRcs]);
  +            pRc->m_pList->m_ppFilevec[nRcs] = NULL;
  +        }
  +
  +    free(pRc->m_pList->m_ppFilevec);
  +    pRc->m_pList->m_ppFilevec = NULL;
  +    listDelete(pRc->m_pList);           /* Destroy the rcfile list   */
  +    pRc->m_pList = NULL;
       free(pRc);                          /* Free the processor itself */
  +    pRc = NULL;
   
       return(RC_THROW(RC_OK));
   }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_script.c
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 rc_script.c
  --- ossp-pkg/rc/rc_script.c	13 Jun 2003 18:33:07 -0000	1.30
  +++ ossp-pkg/rc/rc_script.c	18 Jun 2003 14:35:29 -0000	1.31
  @@ -354,7 +354,7 @@
   ************************************************/
   rc_return_t scriptDelete(rc_script_t *pScript)
   {
  -    assert(pScript); /* Check for a valid incoming script */
  +    assert(pScript);    /* Check for a valid incoming script */
   
       if (*pScript) {
           free(*pScript);
  @@ -363,7 +363,7 @@
       else
           RC_THROW(RC_WRN_NUL);
   
  -    free(pScript);
  +    free(pScript);      /* Free the script itself */
       pScript = NULL;
   
       return(RC_THROW(RC_OK));
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_sect.c
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 rc_sect.c
  --- ossp-pkg/rc/rc_sect.c	13 Jun 2003 11:50:37 -0000	1.13
  +++ ossp-pkg/rc/rc_sect.c	18 Jun 2003 14:35:29 -0000	1.14
  @@ -69,7 +69,6 @@
       pSec = (rc_section_t *)malloc(sizeof(rc_section_t));
       pSec->m_nPri    = pOrigsec->m_nPri;
       pSec->m_nUid    = pOrigsec->m_nUid;
  -    pSec->m_Bytes   = pOrigsec->m_Bytes;
   
       /* Deep copy of user name */
       if (pOrigsec->m_szLogin) {
  @@ -145,16 +144,6 @@
       return(0); /* Not reached */
   }
   
  -size_t sectionGetlen(rc_section_t *pSec)
  -{ /* Data length of section, length of a script body of a particular section */
  -    if (pSec)
  -        return(pSec->m_Bytes);
  -    else
  -        RC_THROW(RC_ERR_USE);
  -
  -    return(0); /* Not reached */
  -}
  -
   /************************************************
   * sectionSetXXX(rc_section_t *)                 *
   * Accessor methods                              *
  @@ -204,14 +193,14 @@
   rc_return_t sectionSetdata(rc_section_t *pSec, const char *kszScript)
   { /* Data of section, this is the script body of the particular section */
       if (pSec) {
  -        pSec->m_Bytes = (strlen(kszScript) + sizeof(char)) * sizeof(char);
  +        size_t nBytes = (strlen(kszScript) + sizeof(char)) * sizeof(char);
           if (pSec->m_szData) { /* The section data is already in use */
               free(pSec->m_szData);
  -            pSec->m_szData = malloc(pSec->m_Bytes);
  +            pSec->m_szData = malloc(nBytes);
               strcpy(pSec->m_szData, kszScript);
           }
           else { /* Set the data the usual way */
  -            pSec->m_szData = malloc(pSec->m_Bytes);
  +            pSec->m_szData = malloc(nBytes);
               strcpy(pSec->m_szData, kszScript);
           }
           return(RC_THROW(RC_OK));
  @@ -223,15 +212,15 @@
   rc_return_t sectionSetndata(rc_section_t *pSec, const char *kszScript, size_t Len)
   { /* Data of section, this is the script body of the particular section */
       if (pSec) {
  -        pSec->m_Bytes = (Len + 1) * sizeof(char);       /* Set size */
  +        size_t nBytes = (Len + 1) * sizeof(char);       /* Set size */
           if (pSec->m_szData) { /* The section data is already in use */
               free(pSec->m_szData);
  -            pSec->m_szData = malloc(pSec->m_Bytes);
  +            pSec->m_szData = malloc(nBytes);
               strncpy(pSec->m_szData, kszScript, Len);
               *(pSec->m_szData + Len) = '\0'; /* Terminate outgoing */
           }
           else { /* Set the data the usual way */
  -            pSec->m_szData = malloc(pSec->m_Bytes);
  +            pSec->m_szData = malloc(nBytes);
               strncpy(pSec->m_szData, kszScript, Len);
               *(pSec->m_szData + Len) = '\0'; /* Terminate outgoing */
           }
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jun 23 13:27:55 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9B50876E14; Mon, 23 Jun 2003 13:27:54 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_const.h rc_proc.c
Message-Id: <20030623112754.9B50876E14@mail.ossp.org>
Date: Mon, 23 Jun 2003 13:27:54 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   23-Jun-2003 13:27:54
  Branch: HEAD                             Handle: 2003062312275301

  Modified files:
    ossp-pkg/rc             rc_const.h rc_proc.c

  Log:
    Do not remove eval mode temp files when the debugging option is
    active.

  Summary:
    Revision    Changes     Path
    1.26        +4  -3      ossp-pkg/rc/rc_const.h
    1.47        +8  -1      ossp-pkg/rc/rc_proc.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_const.h
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 rc_const.h
  --- ossp-pkg/rc/rc_const.h	18 Jun 2003 14:35:29 -0000	1.25
  +++ ossp-pkg/rc/rc_const.h	23 Jun 2003 11:27:54 -0000	1.26
  @@ -151,8 +151,9 @@
   #define RC_DEF_PRI    200                       /* Section priority value */
   
   /* Handling temporary and output during evaluation mode */
  -#define RC_EVL_TMP    "rc.XXXXXX"                            /* Temporary file template */
  -#define RC_EVL_SUF    ".tmp"                                 /* Temporary file suffix   */
  -#define RC_EVL_OUT    ". %s; rm -f %s 2>/dev/null || true\n" /* Command line output     */
  +#define RC_EVL_TMP    "rc.XXXXXX"                            /* Temporary file template   */
  +#define RC_EVL_SUF    ".tmp"                                 /* Temporary file suffix     */
  +#define RC_EVL_OUT    ". %s; rm -f %s 2>/dev/null || true\n" /* Command line output       */
  +#define RC_EVL_DBG    ". %s\n"                               /* Command line debug output */
   
   #endif /* __OSSPRC_CONST_H__ */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.46 -r1.47 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	18 Jun 2003 14:35:29 -0000	1.46
  +++ ossp-pkg/rc/rc_proc.c	23 Jun 2003 11:27:53 -0000	1.47
  @@ -311,7 +311,14 @@
           mktemp(szTmpfile);
           strcat(szTmpfile, RC_EVL_SUF);
           scriptWrite(pFatscript, szTmpfile); /* Write the whole script out */
  -        fprintf(stdout, RC_EVL_OUT, szTmpfile, szTmpfile);
  +
  +        /* Conditionally don't remove the temp file (see constants) */
  +        if (configGetval(RC_DBG_VAL))
  +            fprintf(stdout, RC_EVL_DBG, szTmpfile);
  +        else
  +            fprintf(stdout, RC_EVL_OUT, szTmpfile, szTmpfile);
  +
  +        /* Cleanup eval processing crap */
           free(szTmpfile);
           szTmpfile = NULL;
           scriptDelete(pFatscript);
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jun 23 13:29:45 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 67DB876E14; Mon, 23 Jun 2003 13:29:45 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ 00TODO rc.pod
Message-Id: <20030623112945.67DB876E14@mail.ossp.org>
Date: Mon, 23 Jun 2003 13:29:45 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   23-Jun-2003 13:29:45
  Branch: HEAD                             Handle: 2003062312294400

  Modified files:
    ossp-pkg/rc             00TODO rc.pod

  Log:
    Remember possible feature, 'activate warnings on rcfile pattern'.

  Summary:
    Revision    Changes     Path
    1.48        +5  -0      ossp-pkg/rc/00TODO
    1.32        +11 -8      ossp-pkg/rc/rc.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/00TODO
  ============================================================================
  $ cvs diff -u -r1.47 -r1.48 00TODO
  --- ossp-pkg/rc/00TODO	12 Jun 2003 13:27:44 -0000	1.47
  +++ ossp-pkg/rc/00TODO	23 Jun 2003 11:29:44 -0000	1.48
  @@ -98,6 +98,11 @@
     not contain "%bad", of course. Except: IF ALL rc.* DO NOT
     CONTAIN %bad!
   
  +  mlelstv:
  +  What we need is some kind of sanity checking. For example, the rc file
  +  could prevent a service from beeing started when there is a .rpmsave
  +  configuration present.
  +
   Change data type locations to private for additional abstraction
     Index: ossp-pkg/cfg/cfg_buf.c
     ============================================================
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc.pod
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 rc.pod
  --- ossp-pkg/rc/rc.pod	21 May 2003 12:49:20 -0000	1.31
  +++ ossp-pkg/rc/rc.pod	23 Jun 2003 11:29:44 -0000	1.32
  @@ -69,7 +69,8 @@
   =head1 DESCRIPTION
   
   OSSP rc is a run-command processor. Its primary function is to scan F<rcfile>
  -script files for B<section>(s) and run the commands listed in the section(s).
  +script files for one or more B<section>s and run the commands listed in each
  +B<section>.
   
   The run-command processor can alternatively C<print> the commands in human
   readable format or reformat them for shell C<eval> input without executing
  @@ -77,14 +78,16 @@
   functionality to query their default, set and effective values.
   
   The structure of the F<rcfile>s is simple but the syntax is highly
  -configurable. A F<rcfile> is divided into B<section>s and each of them is
  -identified by a label build from the B<section> name. The distribution
  -contains various examples.
  +configurable. A F<rcfile> is divided into B<section>s, clearly identified by
  +applying a regular expression. The default regular expression leads to
  +identification of section text starting with a percent (%) and label (any
  +text). Various examples of this and other syntax possibilities is given in the
  +manpage B<rc(1)>.
   
  -With a single call to rc usually one F<rcfile> may be processed at, although
  -many B<sections> can be passed which are executed in given order. The only
  -exception to this rule is when the reserved keyword 'all' is used as F<rcfile>
  -meaning 'all F<rcfile>s.'
  +Often, only a single B<rcfile> name is processed. To process all B<rcfile>s,
  +substitute the keyword 'all' for the B<rcfile> name. The B<section>s of a
  +B<rcfil> processed match exactly the B<section>s given on the command line,
  +and even the ordering is kept.
   
   =head1 OPTIONS
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jun 23 16:43:49 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3459976E18; Mon, 23 Jun 2003 16:43:49 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc.pod rc_const.h
Message-Id: <20030623144349.3459976E18@mail.ossp.org>
Date: Mon, 23 Jun 2003 16:43:49 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   23-Jun-2003 16:43:48
  Branch: HEAD                             Handle: 2003062315434800

  Modified files:
    ossp-pkg/rc             rc.pod rc_const.h

  Log:
    Edit examples and group them according to the three run modes, and improve
    most basic error message.

  Summary:
    Revision    Changes     Path
    1.33        +24 -18     ossp-pkg/rc/rc.pod
    1.27        +1  -1      ossp-pkg/rc/rc_const.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc.pod
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 rc.pod
  --- ossp-pkg/rc/rc.pod	23 Jun 2003 11:29:44 -0000	1.32
  +++ ossp-pkg/rc/rc.pod	23 Jun 2003 14:43:48 -0000	1.33
  @@ -112,7 +112,7 @@
   =item B<-c>|B<--conf> I<file>[C<:>I<file>[...]]
   
   specify the location of the configuration file. If omitted, C<$OSSP_RC_CONF>
  -will be examined. If absent, F<@l_prefix@/etc/rc.conf> will be used. If no
  +will be examined. If absent, F</etc/rc.conf> will be used. If no
   F<rc.conf> exists at all, then only command line and environment specified
   options will override the defaults built-in to OSSP rc.
   
  @@ -286,16 +286,30 @@
   
   =head1 EXAMPLES
   
  -A runcommand consists of a single program name and one or more sections. The
  -wildcard 'all' can be given in place of a program name to denote all programs
  -with entries in the rc registry F<$OSSP_RC_ROOT/rc.d>. The following are
  -one-line examples of commonly used rc commands with no arguments.
  +The following are one-line examples of commonly used rc commands with no
  +arguments. Because no run mode option is specified, B<OSSP rc> will process
  +the commands by executing them directly.
   
    /usr/local/bin/rc --info
    /sbin/rc --query lmtp2nntp
  + /usr/local/bin/rc httpd reload
    /cw/etc/rc --conf /etc/rc.conf --debug smtpd stop
  - /sfw/etc/rc.d/rc.ntpd --silent start sync stop start
  - /usr/local/bin/rc httpd reload # sends a HUP signal
  + /opt/bin/rc ntpd --silent start sync stop start
  +
  +B<OSSP rc> offers more than just command execution. In the following examples
  +because the 'eval' run mode option is specified, B<OSSP rc> will prepare the
  +commands by writing a composite script to a tempfile. Then B<OSSP rc> will
  +print the file's location in a format most conveniently parsable by eval(1) or
  +the bourne shell for evaluation.
  +
  + eval `/usr/local/bin/rc --eval all env`
  + /usr/local/bin/rc --eval sendmail start | sh
  +
  +To read the results of a B<OSSP rc> operation without executing or evaluting
  +the runcommands, use the 'print' run mode.
  +
  + /opt/binbin/rc --print --info mico
  + /usr/local/bin/rc --print httpd reload
   
   Arguments in the form of name=value pairs may be passed to the section(s)
   given on the command line. In the F<rcfile>, such arguments will appear as
  @@ -311,14 +325,6 @@
    /cw/etc/rc.d/rc.ftpd start nMax=32   # a maximum of 32 users can connect
    rc -rdv all stop nSleep=2 start nSleep=4 sLevel="LOG_INFO" bQuiet=1
   
  -To evaluate a runcommand for all programs with an identical section name, a
  -short expression can be written into a F<.profile> file. When the shell
  -initializes itself, the runcommands will execute according to the C<eval(1)>
  -command. This is often seen when importing the environment of packages of an
  -B<OpenPKG> hierarchy, but is always a custom modification made by the user.
  -
  - $ eval `@l_prefix@/etc/rc --eval all env`
  -
   =head1 FILES
   
    F<rc.conf> - Master configuration file
  @@ -345,8 +351,8 @@
   B<OSSP rc> is a drop-in replacement for the prototype run-command facility used
   in OpenPKG (http://www.openpkg.org/). The prototype was a slow and less robust
   Bourne shell script. B<OSSP rc> is comparitively faster, more robust, and more
  -flexible. This flexibility allows for wider range of use, and B<OSSP rc> can
  -therefore be used in a larger variety of situations. It is no longer exclusive
  -to the OpenPKG project.
  +feature rich. Its generic design and improved flexibility allows for wider
  +range of use, and B<OSSP rc> can therefore be used in a larger variety of
  +situations. Today, B<OSSP rc> is not exclusive to the OpenPKG project.
   
   =cut
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_const.h
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 rc_const.h
  --- ossp-pkg/rc/rc_const.h	23 Jun 2003 11:27:54 -0000	1.26
  +++ ossp-pkg/rc/rc_const.h	23 Jun 2003 14:43:48 -0000	1.27
  @@ -32,7 +32,7 @@
   
   /* Generic text, should include newline termination */
   #define RC_NON_TEXT "No options exist.\n"
  -#define RC_LST_TEXT "Please enter just one rcfile and at least one section.\n"
  +#define RC_LST_TEXT "Please enter just one rcfile name and at least one section label.\n"
   #define RC_EEP_TEXT "The exec, eval, and print options may not be combined.\n"
   #define RC_SLO_TEXT "The silent option may not be combined with output options.\n"
   #define RC_SUM_TEXT "Option argument summary.\n"
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jun 23 16:46:34 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 46D9C76E1A; Mon, 23 Jun 2003 16:46:34 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc.pod
Message-Id: <20030623144634.46D9C76E1A@mail.ossp.org>
Date: Mon, 23 Jun 2003 16:46:34 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   23-Jun-2003 16:46:34
  Branch: HEAD                             Handle: 2003062315463300

  Modified files:
    ossp-pkg/rc             rc.pod

  Log:
    Really get the example text right.

  Summary:
    Revision    Changes     Path
    1.34        +4  -4      ossp-pkg/rc/rc.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc.pod
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 rc.pod
  --- ossp-pkg/rc/rc.pod	23 Jun 2003 14:43:48 -0000	1.33
  +++ ossp-pkg/rc/rc.pod	23 Jun 2003 14:46:33 -0000	1.34
  @@ -320,10 +320,10 @@
   the command line.
   
    /mybin/rc all start sFac="LOG_USER"  # pass LOG_USER as an argument to 'start'
  - /etc/rc lmtp2nntp start nSleep=2     # sleep for 2 seconds before returning
  - /etc/rc.d/rc.rsyncd restart nSleep=4 # pause 4 seconds between start and stop
  - /cw/etc/rc.d/rc.ftpd start nMax=32   # a maximum of 32 users can connect
  - rc -rdv all stop nSleep=2 start nSleep=4 sLevel="LOG_INFO" bQuiet=1
  + /opt/bin/rc lmtp2nntp start nSleep=2 # sleep for 2 seconds before returning
  + /cw/etc/rc/ ftpd start nMax=32       # a maximum of 32 users can connect
  + ./rc rsyncd restart nSleep=4         # pause 4 seconds between start and stop
  + ./rc -rdv all stop nSleep=2 start nSleep=4 sLevel="LOG_INFO" bQuiet=1
   
   =head1 FILES
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jun 23 16:53:11 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6469A76E1A; Mon, 23 Jun 2003 16:53:11 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc-sample.pod rc.pod
Message-Id: <20030623145311.6469A76E1A@mail.ossp.org>
Date: Mon, 23 Jun 2003 16:53:11 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   23-Jun-2003 16:53:11
  Branch: HEAD                             Handle: 2003062315531000

  Modified files:
    ossp-pkg/rc             rc-sample.pod rc.pod

  Log:
    Use term run-command consistently throughout docs.

  Summary:
    Revision    Changes     Path
    1.11        +4  -4      ossp-pkg/rc/rc-sample.pod
    1.35        +4  -4      ossp-pkg/rc/rc.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc-sample.pod
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 rc-sample.pod
  --- ossp-pkg/rc/rc-sample.pod	26 Mar 2002 17:11:06 -0000	1.10
  +++ ossp-pkg/rc/rc-sample.pod	23 Jun 2003 14:53:10 -0000	1.11
  @@ -34,10 +34,10 @@
   
   This documents typical use cases for B<OSSP rc>.
   
  -=head1 USE CASE: OpenPKG Runcommand Facility
  +=head1 USE CASE: OpenPKG Run-command Facility
   
   This describes how B<OSSP rc> is used as the B<OpenPKG>
  -(http://www.openpkg.org/) runcommand facility. 
  +(http://www.openpkg.org/) run-command facility. 
   
   First, the involved files:
   
  @@ -111,7 +111,7 @@
   This is the B<OpenPKG> configuration script where the administrator
   overrides the variables from the script's C<%config> sections. It it
   generated (as an empty file) on B<OpenPKG> bootstrap time and manually
  -edited later to influence the behaviours of the package's runcommand
  +edited later to influence the behaviours of the package's run-command
   scripts (here F</cw/etc/rc.d/rc.foo>).
   
    foo_enable=yes
  @@ -119,7 +119,7 @@
   
   =item F</cw/etc/rc.d/rc.foo> 
   
  -This is the example runcommand script of an B<OpenPKG> package C<foo>.
  +This is the example run-command script of an B<OpenPKG> package C<foo>.
   It is installed by package C<foo> and used read-only.
   
    #! /cw/etc/rc
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc.pod
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 rc.pod
  --- ossp-pkg/rc/rc.pod	23 Jun 2003 14:46:33 -0000	1.34
  +++ ossp-pkg/rc/rc.pod	23 Jun 2003 14:53:10 -0000	1.35
  @@ -244,9 +244,9 @@
   =head1 COMMAND INTERPRETER
   
   As long as a valid interpreter path is specified in the section labels of a
  -F<rcfile>, the runcommands resulting from a --eval, --exec, or --print
  +F<rcfile>, the run-commands resulting from a --eval, --exec, or --print
   operation can be written in any runtime-interpreted language. This means that
  -a perl programmer can write runcommands in perl, and specify the perl
  +a perl programmer can write run-commands in perl, and specify the perl
   interpreter path in the corresponding section label of the F<rcfile>. A
   different programming language can be used for each section, even though this
   would complicate inclusion of script from the B<%common> section and
  @@ -306,7 +306,7 @@
    /usr/local/bin/rc --eval sendmail start | sh
   
   To read the results of a B<OSSP rc> operation without executing or evaluting
  -the runcommands, use the 'print' run mode.
  +the run-commands, use the 'print' run mode.
   
    /opt/binbin/rc --print --info mico
    /usr/local/bin/rc --print httpd reload
  @@ -330,7 +330,7 @@
    F<rc.conf> - Master configuration file
    F<rc.func> - User defined functions library
    F<rc.env>  - Postprocess variable declaration file
  - F<rc.foo>  - Runcommands for 'foo' application
  + F<rc.foo>  - Run-commands for 'foo' application
   
   =head1 SEE ALSO
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jun 23 17:46:07 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 384BE76E1A; Mon, 23 Jun 2003 17:46:07 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc.pod rc_config.c rc_test.sh ossp-pkg/rc/rc_...
Message-Id: <20030623154607.384BE76E1A@mail.ossp.org>
Date: Mon, 23 Jun 2003 17:46:07 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   23-Jun-2003 17:46:06
  Branch: HEAD                             Handle: 2003062316460501

  Modified files:
    ossp-pkg/rc             rc.pod rc_config.c rc_test.sh
    ossp-pkg/rc/rc_test     rc.samba

  Log:
    Conform to original OpenPKG rc behaviour by processing in execute run mode by
    default, correct and explain return values, and adjust test suite.

  Summary:
    Revision    Changes     Path
    1.36        +4  -2      ossp-pkg/rc/rc.pod
    1.34        +1  -1      ossp-pkg/rc/rc_config.c
    1.27        +5  -0      ossp-pkg/rc/rc_test.sh
    1.7         +1  -1      ossp-pkg/rc/rc_test/rc.samba
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc.pod
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 rc.pod
  --- ossp-pkg/rc/rc.pod	23 Jun 2003 14:53:10 -0000	1.35
  +++ ossp-pkg/rc/rc.pod	23 Jun 2003 15:46:05 -0000	1.36
  @@ -256,9 +256,11 @@
   
   =head1 RETURN VALUE
   
  --1 Error in rc
    0 Success
  - 1 Error in command executed by rc
  + 1 Failure
  +
  + A non-zero return value signals failure, and may indicate such error states
  + as an illegal combination of options or nonexisting locations directory.
   
   =head1 ERROR HANDLING
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_config.c
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 rc_config.c
  --- ossp-pkg/rc/rc_config.c	18 Jun 2003 14:35:29 -0000	1.33
  +++ ossp-pkg/rc/rc_config.c	23 Jun 2003 15:46:05 -0000	1.34
  @@ -289,7 +289,7 @@
       try { /* Test members for empty attributes */
           if (!configGetval(RC_EVL_VAL) && !configGetval(RC_EXC_VAL) \
               && !configGetval(RC_PRN_VAL) && !configGetval(RC_PAR_VAL))
  -            clioptSetval(RC_PRN_VAL, RC_DEF_ON);
  +            clioptSetval(RC_EXC_VAL, RC_DEF_ON);
   
   /*        if (!configGetval(RC_USE_VAL))
           if (!configGetval(RC_HLP_VAL))
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_test.sh
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 rc_test.sh
  --- ossp-pkg/rc/rc_test.sh	13 Jun 2003 10:53:53 -0000	1.26
  +++ ossp-pkg/rc/rc_test.sh	23 Jun 2003 15:46:05 -0000	1.27
  @@ -48,6 +48,11 @@
   ./rc -Dpf ./rc_test/rcfuncs -irt /tmp -L rc_test -c rc.conf samba search finish
   echo; echo "<Press enter to continue>"
   read dummy;clear
  +echo "*** Test and evaluate short options, should succeed ***"
  +echo "eval \`./rc -Def ./rc_test/rcfuncs -irt /tmp -L rc_test -c rc.conf samba search finish\`"
  +eval `./rc -Def ./rc_test/rcfuncs -irt /tmp -L rc_test -c rc.conf samba search finish`
  +echo; echo "<Press enter to continue>"
  +read dummy;clear
   echo "*** Test short options with verbose, should succeed ***"
   echo "./rc -Dpf ./rc_test/rcfuncs -irvt /tmp -L rc_test -c rc.conf samba search finish"
   ./rc -Dpf ./rc_test/rcfuncs -irvt /tmp -L rc_test -c rc.conf samba search finish
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_test/rc.samba
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 rc.samba
  --- ossp-pkg/rc/rc_test/rc.samba	3 Jun 2003 15:28:09 -0000	1.6
  +++ ossp-pkg/rc/rc_test/rc.samba	23 Jun 2003 15:46:06 -0000	1.7
  @@ -11,7 +11,7 @@
   
   %search -u root
       id -un
  -    whois cyvaned.com
  +    whois cw.com
   
   %destroy -u sw-n
       id -un
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jun 23 18:09:48 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 892D176E16; Mon, 23 Jun 2003 18:09:48 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc.h rc_const.h rc_error.c rc_util.c
Message-Id: <20030623160948.892D176E16@mail.ossp.org>
Date: Mon, 23 Jun 2003 18:09:48 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   23-Jun-2003 18:09:48
  Branch: HEAD                             Handle: 2003062317094700

  Modified files:
    ossp-pkg/rc             rc.h rc_const.h rc_error.c rc_util.c

  Log:
    Complete error handling method according to all defined error values.

  Summary:
    Revision    Changes     Path
    1.50        +4  -3      ossp-pkg/rc/rc.h
    1.28        +1  -0      ossp-pkg/rc/rc_const.h
    1.2         +12 -0      ossp-pkg/rc/rc_error.c
    1.10        +1  -0      ossp-pkg/rc/rc_util.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc.h
  ============================================================================
  $ cvs diff -u -r1.49 -r1.50 rc.h
  --- ossp-pkg/rc/rc.h	18 Jun 2003 14:35:29 -0000	1.49
  +++ ossp-pkg/rc/rc.h	23 Jun 2003 16:09:47 -0000	1.50
  @@ -63,9 +63,10 @@
       RC_ERR_DIR = 9,  /* Location dir not found   */
       RC_ERR_RCF = 10, /* Rc file not found        */
       RC_ERR_TRM = 11, /* Request to terminate app */
  -    RC_WRN_0   = 12, /* Warning base             */
  -    RC_WRN_OWR = 13, /* Overwrite warning        */
  -    RC_WRN_NUL = 14  /* NULL pointer warning     */
  +    RC_ERR_CFG = 12, /* Config or option failure */
  +    RC_WRN_0   = 13, /* Warning base             */
  +    RC_WRN_OWR = 14, /* Overwrite warning        */
  +    RC_WRN_NUL = 15  /* NULL pointer warning     */
   } rc_return_t;
   
   /* Config function prototypes */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_const.h
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 rc_const.h
  --- ossp-pkg/rc/rc_const.h	23 Jun 2003 14:43:48 -0000	1.27
  +++ ossp-pkg/rc/rc_const.h	23 Jun 2003 16:09:47 -0000	1.28
  @@ -129,6 +129,7 @@
   #define RC_ERRSTR_DIR "Location"
   #define RC_ERRSTR_RCF "Rcfile"
   #define RC_ERRSTR_TRM "Terminate"
  +#define RC_ERRSTR_CFG "Config/Options"
   #define RC_ERRSTR_UNK "Unrecognized"
   #define RC_WRNSTR_OWR "Overwrite"
   #define RC_WRNSTR_NUL "NULLPointer"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_error.c
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 rc_error.c
  --- ossp-pkg/rc/rc_error.c	10 Jul 2002 19:02:24 -0000	1.1
  +++ ossp-pkg/rc/rc_error.c	23 Jun 2003 16:09:47 -0000	1.2
  @@ -40,12 +40,24 @@
       if (FAILED((rc_return_t)Localerr.ex_value)) { /* Error condition */
           if ((rc_return_t)Localerr.ex_value == RC_ERR_TRM)
               exit(0);
  +        else if ((rc_return_t)Localerr.ex_value == RC_ERR_USE)
  +            fprintf(stderr, "    Error condition, API usage is wrong.\n");
  +        else if ((rc_return_t)Localerr.ex_value == RC_ERR_MEM)
  +            fprintf(stderr, "    Error condition, memory allocation failure.\n");
  +        else if ((rc_return_t)Localerr.ex_value == RC_ERR_SYS)
  +            fprintf(stderr, "    Error condition, underlying system failure.\n");
  +        else if ((rc_return_t)Localerr.ex_value == RC_ERR_IO)
  +            fprintf(stderr, "    Error condition, input output failure.\n");
  +        else if ((rc_return_t)Localerr.ex_value == RC_ERR_INT)
  +            fprintf(stderr, "    Error condition, internal failure.\n");
           else if ((rc_return_t)Localerr.ex_value == RC_ERR_FNC)
               fprintf(stderr, "    Error condition, function file could not be opened.\n");
           else if ((rc_return_t)Localerr.ex_value == RC_ERR_DIR)
               fprintf(stderr, "    Error condition, location dir could not be opened.\n");
           else if ((rc_return_t)Localerr.ex_value == RC_ERR_RCF)
               fprintf(stderr, "    Error condition, rc file could not be opened.\n");
  +        else if ((rc_return_t)Localerr.ex_value == RC_ERR_CFG)
  +            fprintf(stderr, "    Error condition, configuration and options failure.\n");
           else
               fprintf(stderr, "    Error condition of class '%s',\n    exception %d in %s:%s():%d.\n", (char *)Localerr.ex_class, (int)Localerr.ex_value, Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
           exit(1); /* Return failure */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_util.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 rc_util.c
  --- ossp-pkg/rc/rc_util.c	27 May 2003 14:51:38 -0000	1.9
  +++ ossp-pkg/rc/rc_util.c	23 Jun 2003 16:09:47 -0000	1.10
  @@ -47,6 +47,7 @@
       else if (rv == RC_ERR_DIR) return RC_ERRSTR_DIR;
       else if (rv == RC_ERR_RCF) return RC_ERRSTR_RCF;
       else if (rv == RC_ERR_TRM) return RC_ERRSTR_TRM;
  +    else if (rv == RC_ERR_CFG) return RC_ERRSTR_CFG;
       else if (rv == RC_WRN_OWR) return RC_WRNSTR_OWR;
       else if (rv == RC_WRN_NUL) return RC_WRNSTR_NUL;
       else                       return RC_ERRSTR_UNK;
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jun 23 18:44:55 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7DB7776E16; Mon, 23 Jun 2003 18:44:55 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc.pod
Message-Id: <20030623164455.7DB7776E16@mail.ossp.org>
Date: Mon, 23 Jun 2003 18:44:55 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   23-Jun-2003 18:44:55
  Branch: HEAD                             Handle: 2003062317445500

  Modified files:
    ossp-pkg/rc             rc.pod

  Log:
    Edit text on special %error and %default sections.

  Summary:
    Revision    Changes     Path
    1.37        +13 -14     ossp-pkg/rc/rc.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc.pod
  ============================================================================
  $ cvs diff -u -r1.36 -r1.37 rc.pod
  --- ossp-pkg/rc/rc.pod	23 Jun 2003 15:46:05 -0000	1.36
  +++ ossp-pkg/rc/rc.pod	23 Jun 2003 16:44:55 -0000	1.37
  @@ -124,7 +124,7 @@
   
   specify the location of one or more optional function files. They act like
   libraries, containing commands which are prepended to the sections of their
  -corresponding C<rcfile>s just before execution.
  +corresponding F<rcfile>s just before execution.
   
   =item B<-h>|B<--help>
   
  @@ -264,27 +264,26 @@
   
   =head1 ERROR HANDLING
   
  -Rich and fine-tuned error handling is possible by writing one or both of the
  -following sections into F<rcfile>(s). These sections typically reference the
  -local F<rcfile>'s variables ${rc_errcode} and ${rc_errstring} for more
  -information about which error was encountered and its text.
  +Fine-tuned error handling is possible by writing one or both of the following
  +section labels into an F<rcfile>. These sections typically reference the local
  +F<rcfile>'s variables ${rc_errcode} and ${rc_errstring} for more information
  +about which error was encountered and its text.
   
   =item B<%error>
   
   If an error condition arises during an F<rcfile>'s processing, control will
   pass to the B<%error> section whose commands will begin to run. Should no such
  -B<%error> section exist, rc will stop any rcfile processing and write error
  -strings to the console and syslog using LOG_USER and LOG_ERR (see syslog(3)).
  -An empty B<%error> section in each F<rcfile> is synonymous to a
  -C<IgnoreAllErrors> option (which doesn't exist).
  +B<%error> section exist, rc will stop processing and write error strings to
  +the console and syslog using LOG_USER and LOG_ERR (see syslog(3)). An empty
  +B<%error> section in each F<rcfile> will cause errors to be ignored. In any
  +case of error however, rcfile processing will stop.
   
   =item B<%default>
   
   The commands in the B<%default> section are run when the corresponding
   F<rcfile> contains no section label matching the one(s) specified on the
   command line. If the appropriate section label doesn't exist and neither does
  -B<%default>, then an error is assumed and control flows to the B<%error>
  -section.
  +B<%default>, then nothing happens and processing silently procedes.
   
   =head1 EXAMPLES
   
  @@ -313,7 +312,7 @@
    /opt/binbin/rc --print --info mico
    /usr/local/bin/rc --print httpd reload
   
  -Arguments in the form of name=value pairs may be passed to the section(s)
  +Arguments in the form of name=value pairs may be passed to the B<sections>
   given on the command line. In the F<rcfile>, such arguments will appear as
   normal configuration variables. They can be referenced as such (by default as
   ${myarg}). On the command line, the arguments following a section will be
  @@ -337,8 +336,8 @@
   =head1 SEE ALSO
   
   OSSP rc integrates concepts taken from other run-command architectures. For
  -more information, inspect the /etc/rc structures provided by the NetBSD,
  -FreeBSD, Solaris, and Red Hat distributions.
  +more information, inspect the /etc/rc? structures provided by the NetBSD,
  +FreeBSD, Solaris, and Linux distributions.
   
   rc-sample(5).
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jun 23 18:55:06 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3568976E16; Mon, 23 Jun 2003 18:55:06 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc.pod
Message-Id: <20030623165506.3568976E16@mail.ossp.org>
Date: Mon, 23 Jun 2003 18:55:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   23-Jun-2003 18:55:05
  Branch: HEAD                             Handle: 2003062317550500

  Modified files:
    ossp-pkg/rc             rc.pod

  Log:
    Edit environment and command interpreter text.

  Summary:
    Revision    Changes     Path
    1.38        +6  -10     ossp-pkg/rc/rc.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc.pod
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 rc.pod
  --- ossp-pkg/rc/rc.pod	23 Jun 2003 16:44:55 -0000	1.37
  +++ ossp-pkg/rc/rc.pod	23 Jun 2003 16:55:05 -0000	1.38
  @@ -231,15 +231,11 @@
   
   =head1 ENVIRONMENT
   
  -The environment contains options just as the command line and F<rc.conf> file
  -does. An option's corresponding environment variable name must start with
  -'OSSP_RC_' and be all upper case. As a security measure, one environment
  -variable exists that is not found as an option elsewhere. This variable
  -deactivates B<OSSP rc>, and each subsequent usage will return success and
  -write 'No commands run: OSSP_RC_DEACT set to yes' to the console and syslog
  -with LOG_USER and LOG_ERR (see syslog(3)).
  -
  -B<OSSP_RC_DEACT> - Set to 'yes' or 'true' to totally deactivate B<OSSP rc>
  +The environment may contain options variables and values as well. Such
  +variable names must begin with 'OSSP_RC_' and follow with a long option name.
  +The value assigned to a environment variable indicates the processing
  +behaviour of B<OSSP rc> just as it would if given on the command line or in
  +the F<rc.conf> file.
   
   =head1 COMMAND INTERPRETER
   
  @@ -252,7 +248,7 @@
   would complicate inclusion of script from the B<%common> section and
   F<rc.func> sections (because each section is associated with only one
   interpreter). If the command interpreter in a section label is not specified,
  -then the Bourne shell will be used by default. See FILES/rc.foo for details.
  +then the Bourne shell will be used by default.
   
   =head1 RETURN VALUE
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jun 23 19:06:45 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 294E176E1A; Mon, 23 Jun 2003 19:06:45 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc.pod
Message-Id: <20030623170645.294E176E1A@mail.ossp.org>
Date: Mon, 23 Jun 2003 19:06:45 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   23-Jun-2003 19:06:44
  Branch: HEAD                             Handle: 2003062318064400

  Modified files:
    ossp-pkg/rc             rc.pod

  Log:
    Last text edit of options and their ordering.

  Summary:
    Revision    Changes     Path
    1.39        +15 -6      ossp-pkg/rc/rc.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc.pod
  ============================================================================
  $ cvs diff -u -r1.38 -r1.39 rc.pod
  --- ossp-pkg/rc/rc.pod	23 Jun 2003 16:55:05 -0000	1.38
  +++ ossp-pkg/rc/rc.pod	23 Jun 2003 17:06:44 -0000	1.39
  @@ -222,12 +222,20 @@
   
   name of the error section, defaults to %error.
   
  -Every command line longoption corresponds to a keyword in the F<rc.conf> file.
  -When prefixed with 'OSSP_RC_' and its name in upper case, an option can be set
  -as an environment variable. First, options from the F<rc.conf> file are read.
  -Then, options from the environment are read. Last, options from the command
  -line are read. This allows for flexibility when wishing to set a standard set
  -of OSSP rc options, and override them conditionally.
  +=head1 OPTIONS ORDERING
  +
  +B<OSSP rc> reads its options from three sources and builds a global
  +configuration which it uses when later processing F<rcfile>s and B<section>s.
  +The first source used is the F<rc.conf> file (see SEE ALSO). Next, B<OSSP rc>
  +reads options from the environment (see ENVIRONMENT). Finally, it reads
  +options from the command line. Of course, this means that any option given on
  +the command line overrides that of the other two sources.  This allows for
  +flexibility when wishing to set a standard set of OSSP rc options, and
  +override them conditionally.
  +
  +Some option values are mandatory, and if they do not exist in any of the three
  +sources then B<OSSP rc> supplies a default value. The global configuration
  +being used at any moment can be learned by using the --info switch.
   
   =head1 ENVIRONMENT
   
  @@ -336,6 +344,7 @@
   FreeBSD, Solaris, and Linux distributions.
   
   rc-sample(5).
  +rc.conf(5).
   
   =head1 AUTHORS
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jun 23 19:08:20 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9AF9C76E1A; Mon, 23 Jun 2003 19:08:20 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc.pod
Message-Id: <20030623170820.9AF9C76E1A@mail.ossp.org>
Date: Mon, 23 Jun 2003 19:08:20 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   23-Jun-2003 19:08:20
  Branch: HEAD                             Handle: 2003062318082000

  Modified files:
    ossp-pkg/rc             rc.pod

  Log:
    Reduce contractions.

  Summary:
    Revision    Changes     Path
    1.40        +6  -6      ossp-pkg/rc/rc.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc.pod
  ============================================================================
  $ cvs diff -u -r1.39 -r1.40 rc.pod
  --- ossp-pkg/rc/rc.pod	23 Jun 2003 17:06:44 -0000	1.39
  +++ ossp-pkg/rc/rc.pod	23 Jun 2003 17:08:20 -0000	1.40
  @@ -97,7 +97,7 @@
   
   =item B<-D>|B<--debug>
   
  -don't remove temporary files, and output debug messages to stderr
  +do not remove temporary files, and output debug messages to stderr
   
   =item B<-L>|B<--locate> I<file>[C<:>I<part>]
   
  @@ -166,7 +166,7 @@
   
   =item B<-v>|B<--verbose>
   
  -be verbose, output what's going on.
  +be verbose, output what is going on.
   
   =item B<-x>|B<--exec>
   
  @@ -176,15 +176,15 @@
   
   =item B<--RequireUmask umask>
   
  -umask a F<rcfile> has to have, otherwise it's ignored.
  +umask a F<rcfile> has to have, otherwise it is ignored.
   
   =item B<--RequireOwner uid|name>
   
  -owner of the F<rcfile> must match uid|name, otherwise it's ignored.
  +owner of the F<rcfile> must match uid|name, otherwise it is ignored.
   
   =item B<--RequireGroup gid|name>
   
  -group of the F<rcfile> must match gid|name, otherwise it's ignored.
  +group of the F<rcfile> must match gid|name, otherwise it is ignored.
   
   =item B<--ParseConfigAss regex>
   
  @@ -286,7 +286,7 @@
   
   The commands in the B<%default> section are run when the corresponding
   F<rcfile> contains no section label matching the one(s) specified on the
  -command line. If the appropriate section label doesn't exist and neither does
  +command line. If the appropriate section label does not exist and neither does
   B<%default>, then nothing happens and processing silently procedes.
   
   =head1 EXAMPLES
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jun 23 19:11:29 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2986976E1A; Mon, 23 Jun 2003 19:11:29 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc.pod
Message-Id: <20030623171129.2986976E1A@mail.ossp.org>
Date: Mon, 23 Jun 2003 19:11:29 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   23-Jun-2003 19:11:29
  Branch: HEAD                             Handle: 2003062318112800

  Modified files:
    ossp-pkg/rc             rc.pod

  Log:
    Fix missing punctuation.

  Summary:
    Revision    Changes     Path
    1.41        +5  -5      ossp-pkg/rc/rc.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc.pod
  ============================================================================
  $ cvs diff -u -r1.40 -r1.41 rc.pod
  --- ossp-pkg/rc/rc.pod	23 Jun 2003 17:08:20 -0000	1.40
  +++ ossp-pkg/rc/rc.pod	23 Jun 2003 17:11:28 -0000	1.41
  @@ -97,7 +97,7 @@
   
   =item B<-D>|B<--debug>
   
  -do not remove temporary files, and output debug messages to stderr
  +do not remove temporary files, and output debug messages to stderr.
   
   =item B<-L>|B<--locate> I<file>[C<:>I<part>]
   
  @@ -107,7 +107,7 @@
   
   =item B<-V>|B<--version>
   
  -print version and copyright, then exit
  +print version and copyright, then exit.
   
   =item B<-c>|B<--conf> I<file>[C<:>I<file>[...]]
   
  @@ -128,11 +128,11 @@
   
   =item B<-h>|B<--help>
   
  -print this help, then exit
  +print this help, then exit.
   
   =item B<-i>|B<--info>
   
  -print a comprehensive summary of the rc environment
  +print a comprehensive summary of the rc configuration.
   
   =item B<-l>|B<--labels>
   
  @@ -156,7 +156,7 @@
   
   =item B<-s>|B<--silent>
   
  -be silent, and disable output
  +be silent, and disable output.
   
   =item B<-t>|B<--tmp> I<dir>
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jun 23 19:22:42 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6D64776E16; Mon, 23 Jun 2003 19:22:42 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc.pod
Message-Id: <20030623172242.6D64776E16@mail.ossp.org>
Date: Mon, 23 Jun 2003 19:22:42 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   23-Jun-2003 19:22:42
  Branch: HEAD                             Handle: 2003062318224100

  Modified files:
    ossp-pkg/rc             rc.pod

  Log:
    Clean up examples and %error %default text.

  Summary:
    Revision    Changes     Path
    1.42        +7  -9      ossp-pkg/rc/rc.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc.pod
  ============================================================================
  $ cvs diff -u -r1.41 -r1.42 rc.pod
  --- ossp-pkg/rc/rc.pod	23 Jun 2003 17:11:28 -0000	1.41
  +++ ossp-pkg/rc/rc.pod	23 Jun 2003 17:22:41 -0000	1.42
  @@ -273,8 +273,7 @@
   F<rcfile>'s variables ${rc_errcode} and ${rc_errstring} for more information
   about which error was encountered and its text.
   
  -=item B<%error>
  -
  +B<%error>
   If an error condition arises during an F<rcfile>'s processing, control will
   pass to the B<%error> section whose commands will begin to run. Should no such
   B<%error> section exist, rc will stop processing and write error strings to
  @@ -282,8 +281,7 @@
   B<%error> section in each F<rcfile> will cause errors to be ignored. In any
   case of error however, rcfile processing will stop.
   
  -=item B<%default>
  -
  +B<%default>
   The commands in the B<%default> section are run when the corresponding
   F<rcfile> contains no section label matching the one(s) specified on the
   command line. If the appropriate section label does not exist and neither does
  @@ -324,11 +322,11 @@
   more than one section, then repeat its definition after each section given on
   the command line.
   
  - /mybin/rc all start sFac="LOG_USER"  # pass LOG_USER as an argument to 'start'
  - /opt/bin/rc lmtp2nntp start nSleep=2 # sleep for 2 seconds before returning
  - /cw/etc/rc/ ftpd start nMax=32       # a maximum of 32 users can connect
  - ./rc rsyncd restart nSleep=4         # pause 4 seconds between start and stop
  - ./rc -rdv all stop nSleep=2 start nSleep=4 sLevel="LOG_INFO" bQuiet=1
  + ./rc all start sFac="LOG_USER"  # pass LOG_USER as argument to 'start'
  + ./rc lmtp2nntp start nSleep=2   # sleep for 2 seconds before returning
  + /cw/etc/rc/ ftpd start nMax=32  # a maximum of 32 users can connect
  + /bin/rc rsyncd restart nSleep=4 # pause 4 seconds between start and stop
  + /bin/rc -rdv all stop nSleep=2 start nSleep=4 sLevel="LOG_INFO" bQuiet=1
   
   =head1 FILES
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jun 23 19:41:01 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B869E76E1A; Mon, 23 Jun 2003 19:41:00 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_config.c
Message-Id: <20030623174100.B869E76E1A@mail.ossp.org>
Date: Mon, 23 Jun 2003 19:41:00 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   23-Jun-2003 19:41:00
  Branch: HEAD                             Handle: 2003062318410000

  Modified files:
    ossp-pkg/rc             rc_config.c

  Log:
    Remove already implemented features from config default method, indicating
    that they are finished.

  Summary:
    Revision    Changes     Path
    1.35        +1  -4      ossp-pkg/rc/rc_config.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_config.c
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 rc_config.c
  --- ossp-pkg/rc/rc_config.c	23 Jun 2003 15:46:05 -0000	1.34
  +++ ossp-pkg/rc/rc_config.c	23 Jun 2003 17:41:00 -0000	1.35
  @@ -291,10 +291,7 @@
               && !configGetval(RC_PRN_VAL) && !configGetval(RC_PAR_VAL))
               clioptSetval(RC_EXC_VAL, RC_DEF_ON);
   
  -/*        if (!configGetval(RC_USE_VAL))
  -        if (!configGetval(RC_HLP_VAL))
  -        if (!configGetval(RC_INF_VAL))
  -        if (!configGetval(RC_LBL_VAL))
  +/*        if (!configGetval(RC_LBL_VAL))
           if (!configGetval(RC_SIL_VAL))
           if (!configGetval(RC_RAW_VAL))
           if (!configGetval(RC_VRB_VAL))*/
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jun 24 11:35:40 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D62A676E30; Tue, 24 Jun 2003 11:35:39 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_error.c
Message-Id: <20030624093539.D62A676E30@mail.ossp.org>
Date: Tue, 24 Jun 2003 11:35:39 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   24-Jun-2003 11:35:39
  Branch: HEAD                             Handle: 2003062410353900

  Modified files:
    ossp-pkg/rc             rc_error.c

  Log:
    Make error messages more descriptive.

  Summary:
    Revision    Changes     Path
    1.3         +18 -9      ossp-pkg/rc/rc_error.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_error.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 rc_error.c
  --- ossp-pkg/rc/rc_error.c	23 Jun 2003 16:09:47 -0000	1.2
  +++ ossp-pkg/rc/rc_error.c	24 Jun 2003 09:35:39 -0000	1.3
  @@ -41,23 +41,32 @@
           if ((rc_return_t)Localerr.ex_value == RC_ERR_TRM)
               exit(0);
           else if ((rc_return_t)Localerr.ex_value == RC_ERR_USE)
  -            fprintf(stderr, "    Error condition, API usage is wrong.\n");
  +            fprintf(stderr, "    Error condition, API usage is wrong in %s:%s():%d.\n", \
  +                Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
           else if ((rc_return_t)Localerr.ex_value == RC_ERR_MEM)
  -            fprintf(stderr, "    Error condition, memory allocation failure.\n");
  +            fprintf(stderr, "    Error condition, memory allocation failure in %s:%s():%d.\n", \
  +                Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
           else if ((rc_return_t)Localerr.ex_value == RC_ERR_SYS)
  -            fprintf(stderr, "    Error condition, underlying system failure.\n");
  +            fprintf(stderr, "    Error condition, underlying system failure in %s:%s():%d.\n", \
  +                Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
           else if ((rc_return_t)Localerr.ex_value == RC_ERR_IO)
  -            fprintf(stderr, "    Error condition, input output failure.\n");
  +            fprintf(stderr, "    Error condition, input output failure in %s:%s():%d.\n", \
  +                Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
           else if ((rc_return_t)Localerr.ex_value == RC_ERR_INT)
  -            fprintf(stderr, "    Error condition, internal failure.\n");
  +            fprintf(stderr, "    Error condition, internal failure in %s:%s():%d.\n", \
  +                Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
           else if ((rc_return_t)Localerr.ex_value == RC_ERR_FNC)
  -            fprintf(stderr, "    Error condition, function file could not be opened.\n");
  +            fprintf(stderr, "    Error condition, function file could not be opened in %s:%s():%d.\n", \
  +                Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
           else if ((rc_return_t)Localerr.ex_value == RC_ERR_DIR)
  -            fprintf(stderr, "    Error condition, location dir could not be opened.\n");
  +            fprintf(stderr, "    Error condition, location dir could not be opened in %s:%s():%d.\n", \
  +                Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
           else if ((rc_return_t)Localerr.ex_value == RC_ERR_RCF)
  -            fprintf(stderr, "    Error condition, rc file could not be opened.\n");
  +            fprintf(stderr, "    Error condition, rc file could not be opened in %s:%s():%d.\n", \
  +                Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
           else if ((rc_return_t)Localerr.ex_value == RC_ERR_CFG)
  -            fprintf(stderr, "    Error condition, configuration and options failure.\n");
  +            fprintf(stderr, "    Error condition, configuration and options failure in %s:%s():%d.\n", \
  +                Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
           else
               fprintf(stderr, "    Error condition of class '%s',\n    exception %d in %s:%s():%d.\n", (char *)Localerr.ex_class, (int)Localerr.ex_value, Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
           exit(1); /* Return failure */
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jun 26 20:45:17 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C7E4D76FA1; Thu, 26 Jun 2003 20:45:16 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ 00TODO rc.h rc.pod rc_config.c rc_const.h rc_...
Message-Id: <20030626184516.C7E4D76FA1@mail.ossp.org>
Date: Thu, 26 Jun 2003 20:45:16 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   26-Jun-2003 20:45:16
  Branch: HEAD                             Handle: 2003062619451401

  Modified files:
    ossp-pkg/rc             00TODO rc.h rc.pod rc_config.c rc_const.h
                            rc_file.c rc_private.h rc_proc.c rc_script.c
                            rc_sect.c
    ossp-pkg/rc/rc_test     rc.ntp rc.zebra

  Log:
    Break off before fully implementing common section run ops, but after
    reorganization of class data, and additional member functions for section and
    script manipulation.

  Summary:
    Revision    Changes     Path
    1.49        +1  -0      ossp-pkg/rc/00TODO
    1.51        +7  -1      ossp-pkg/rc/rc.h
    1.43        +1  -1      ossp-pkg/rc/rc.pod
    1.36        +3  -2      ossp-pkg/rc/rc_config.c
    1.29        +5  -4      ossp-pkg/rc/rc_const.h
    1.2         +303 -41    ossp-pkg/rc/rc_file.c
    1.34        +2  -1      ossp-pkg/rc/rc_private.h
    1.48        +33 -81     ossp-pkg/rc/rc_proc.c
    1.32        +59 -13     ossp-pkg/rc/rc_script.c
    1.15        +81 -43     ossp-pkg/rc/rc_sect.c
    1.9         +6  -0      ossp-pkg/rc/rc_test/rc.ntp
    1.8         +1  -1      ossp-pkg/rc/rc_test/rc.zebra
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/00TODO
  ============================================================================
  $ cvs diff -u -r1.48 -r1.49 00TODO
  --- ossp-pkg/rc/00TODO	23 Jun 2003 11:29:44 -0000	1.48
  +++ ossp-pkg/rc/00TODO	26 Jun 2003 18:45:14 -0000	1.49
  @@ -64,6 +64,7 @@
     Make rc_section_t correspond to rc_section.c with own operators.
     Make consistent, sectionGetdata and scriptTostring should have same names
     Add printVerbal() to section class, removing 'if (configGetval(RC_VRB_VAL))'
  +  Allow multiple identical section names (having different -u values)
   
   Implementation
     Correct assertion, sanity check, and if () checks according to one standard.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc.h
  ============================================================================
  $ cvs diff -u -r1.50 -r1.51 rc.h
  --- ossp-pkg/rc/rc.h	23 Jun 2003 16:09:47 -0000	1.50
  +++ ossp-pkg/rc/rc.h	26 Jun 2003 18:45:14 -0000	1.51
  @@ -107,15 +107,19 @@
   /* Script function prototypes */
   rc_script_t *scriptNew(void);
   rc_script_t *scriptCopy(rc_script_t *);
  +rc_return_t scriptAdd(rc_script_t *, rc_script_t *);
   rc_return_t scriptAppend(rc_script_t *, const char *, size_t);
   rc_section_t *scriptSection(rc_script_t *, const char *);
   rc_return_t scriptDump(rc_script_t *);
   rc_return_t scriptWrite(rc_script_t *, const char *);
  -const char *scriptTostring(rc_script_t *);
  +const char *scriptGetdata(rc_script_t *);
  +rc_return_t scriptSetdata(rc_script_t *, const char *);
   rc_return_t scriptDelete(rc_script_t *);
   
   /* Rcfile function prototypes */
   rc_file_t  *rcfileNew(const char *);
  +rc_return_t rcfileParse(rc_file_t *);
  +rc_section_t *rcfileGetsec(rc_file_t *, const char *);
   rc_return_t rcfileAppendsec(rc_file_t *, rc_section_t *);
   const char *rcfileGetname(rc_file_t *);
   rc_return_t rcfileSetname(rc_file_t *, const char *);
  @@ -128,6 +132,7 @@
   const int sectionGetpri(rc_section_t *);
   const int sectionGetuid(rc_section_t *);
   const char *sectionGetname(rc_section_t *);
  +const char *sectionGetparent(rc_section_t *);
   const char *sectionGetlabel(rc_section_t *);
   const char *sectionGetlogin(rc_section_t *);
   const char *sectionGetdata(rc_section_t *);
  @@ -135,6 +140,7 @@
   rc_return_t sectionSetpri(rc_section_t *, long);
   rc_return_t sectionSetuid(rc_section_t *, long);
   rc_return_t sectionSetname(rc_section_t *, const char *);
  +rc_return_t sectionSetparent(rc_section_t *, const char *);
   rc_return_t sectionSetlabel(rc_section_t *, const char *);
   rc_return_t sectionSetlogin(rc_section_t *, const char *);
   rc_return_t sectionSetdata(rc_section_t *, const char *);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc.pod
  ============================================================================
  $ cvs diff -u -r1.42 -r1.43 rc.pod
  --- ossp-pkg/rc/rc.pod	23 Jun 2003 17:22:41 -0000	1.42
  +++ ossp-pkg/rc/rc.pod	26 Jun 2003 18:45:14 -0000	1.43
  @@ -114,7 +114,7 @@
   specify the location of the configuration file. If omitted, C<$OSSP_RC_CONF>
   will be examined. If absent, F</etc/rc.conf> will be used. If no
   F<rc.conf> exists at all, then only command line and environment specified
  -options will override the defaults built-in to OSSP rc.
  +options will override B<OSSP rc>'s default values.
   
   =item B<-e>|B<--eval>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_config.c
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 rc_config.c
  --- ossp-pkg/rc/rc_config.c	23 Jun 2003 17:41:00 -0000	1.35
  +++ ossp-pkg/rc/rc_config.c	26 Jun 2003 18:45:14 -0000	1.36
  @@ -341,9 +341,10 @@
   
           if (!configGetval(RC_NCF_VAL))
               clioptSetval(RC_NCF_VAL, RC_DEF_NCF);
  +        if (!configGetval(RC_CMN_VAL))
  +            clioptSetval(RC_CMN_VAL, RC_DEF_CMN);
   
  -/*        if (!configGetval(RC_CMN_VAL))
  -        if (!configGetval(RC_DFL_VAL))
  +/*        if (!configGetval(RC_DFL_VAL))
           if (!configGetval(RC_ERR_VAL))*/
       }
       catch(Except)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_const.h
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 rc_const.h
  --- ossp-pkg/rc/rc_const.h	23 Jun 2003 16:09:47 -0000	1.28
  +++ ossp-pkg/rc/rc_const.h	26 Jun 2003 18:45:14 -0000	1.29
  @@ -41,14 +41,14 @@
   /* Generic text, should not include newline termination */
   #define RC_VST_TEXT "# Start of run command script operations."
   #define RC_EVF_TEXT "# Evaluating code from functions file."
  -#define RC_EVN_TEXT "# Evaluating section %s of script %s."
  +#define RC_EVN_TEXT "# Evaluating section %s of rcfile %s."
   #define RC_EXF_TEXT "# Executing code from functions file."
  -#define RC_EXN_TEXT "# Executing section %s of script %s."
  +#define RC_EXN_TEXT "# Executing section %s of rcfile %s."
   #define RC_PNF_TEXT "# Printing code from functions file."
  -#define RC_PRN_TEXT "# Printing section %s of script %s."
  +#define RC_PRN_TEXT "# Printing section %s of rcfile %s."
   
   /* Single word user text, should not include termination */
  -#define RC_CMN_TEXT "common"
  +#define RC_CFG_TEXT "config"
   
   /* Option descriptions used with popt, should not include termination */
   #define RC_USE_DESC "Print a short usage summary, then exit."
  @@ -146,6 +146,7 @@
   #define RC_DEF_TMP    "/tmp"                    /* Temporary directory name */
   #define RC_DEF_DEF    "^%(\\w+)[ \t]*(.*?)\\n(.*?)^$" /* Section definition */
   #define RC_DEF_NCF    "config"                  /* Config section name */
  +#define RC_DEF_CMN    "common"                  /* Common section name */
   #define RC_DEF_UIG    "-u"                      /* Section user string */
   #define RC_DEF_UID    -1                        /* Section user value  */
   #define RC_DEF_PRG    "-p"                      /* Section priority string */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_file.c
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 rc_file.c
  --- ossp-pkg/rc/rc_file.c	18 Jun 2003 14:35:29 -0000	1.1
  +++ ossp-pkg/rc/rc_file.c	26 Jun 2003 18:45:14 -0000	1.2
  @@ -27,10 +27,17 @@
   **  rc_file.c: Run-command processor ISO C source file
   */
   
  -#include <string.h> /* For string copy and such data ops */
  -#include <stdlib.h> /* For memory ops */
  -
  -#include "rc.h"     /* Public Rc interface */
  +#include <string.h>     /* For string copy and such data ops */
  +#include <stdlib.h>     /* For memory ops             */
  +#include <fcntl.h>      /* For reading rc files       */
  +#include <unistd.h>     /* For reading rc files       */
  +#include <ctype.h>      /* For isspace(3)             */
  +#include <pwd.h>        /* For getpwuid(3)            */
  +
  +#include "rc.h"         /* Public Rc interface        */
  +#include "rc_const.h"   /* For configuration defaults */
  +#include "rc_config.h"  /* Option definitions         */
  +#include "rc_pcre.h"    /* For section parsing        */
   
   
   /************************************************
  @@ -41,8 +48,8 @@
   {
       rc_file_t *pRcfile = NULL;
   
  -    pRcfile = (rc_file_t *)calloc(1, sizeof(rc_file_t));   /* Allocate and clear */
  -    if (!pRcfile)                                          /* Ensure storage */
  +    pRcfile = (rc_file_t *)calloc(1, sizeof(rc_file_t));    /* Allocate and clear */
  +    if (!pRcfile)                                           /* Ensure storage */
           RC_THROW(RC_ERR_MEM);
   
       if (szName) {
  @@ -52,26 +59,282 @@
       else
           pRcfile->m_szName = NULL;
   
  -    /* Default values */
  -    pRcfile->m_nSecs = -1;
  -    pRcfile->m_ppSecvec = NULL;
  +    /* Start section array with one empty allocated tail item */
  +    pRcfile->m_nSecs = 0;
  +    pRcfile->m_ppSecvec = malloc(sizeof(rc_section_t *));
  +    *pRcfile->m_ppSecvec = NULL;
   
       return(pRcfile);
   }
   
   /****************************************************
  +* rcfileParse(rc_file_t *)                          *
  +* Parse rcfile contents, initialize any sections    *
  +****************************************************/
  +rc_return_t rcfileParse(rc_file_t *pRcf)
  +{
  +    rc_script_t *pScript = NULL;
  +    char *szLocex = NULL;
  +    char *sBuf = NULL;
  +    int nFdrc = -1;
  +    int nRet  = 0;
  +
  +    if (pRcf->m_nSecs > 0)
  +        RC_THROW(RC_ERR_USE); /* Only virgin rcfiles can be parsed */
  +
  +    /* Build the location path name */
  +    if (!configGetval(RC_LOC_VAL))  /* Config should have */
  +        RC_THROW(RC_ERR_INT);       /* given a locs default */
  +    else { /* Only enter block with valid string, strdup can't handle NULL */
  +        if (*(configGetval(RC_LOC_VAL) + strlen(configGetval(RC_LOC_VAL)) - sizeof (char)) != '/') {
  +            szLocex = malloc(strlen(configGetval(RC_LOC_VAL)) + \
  +                             sizeof (char) + \
  +                             strlen("rc.") + \
  +                             strlen(pRcf->m_szName) + \
  +                             sizeof (char));
  +            strcpy(szLocex, configGetval(RC_LOC_VAL));
  +            strcat(szLocex, "/");
  +            strcat(szLocex, "rc."); /* FIXME: Make the prefix configurable */
  +            strcat(szLocex, pRcf->m_szName);
  +        }
  +        else {
  +            szLocex = malloc(strlen(configGetval(RC_LOC_VAL)) + \
  +                             strlen("rc.") + \
  +                             strlen(pRcf->m_szName) + \
  +                             sizeof (char));
  +            strcpy(szLocex, configGetval(RC_LOC_VAL));
  +            strcat(szLocex, "rc."); /* FIXME: Make the prefix configurable */
  +            strcat(szLocex, pRcf->m_szName);
  +        }
  +    }
  +
  +    /* Open the rc file unconditionally */
  +    if ((nFdrc = open(szLocex, O_RDONLY)) == -1)
  +        RC_THROW(RC_ERR_RCF);
  +
  +    /* Read data from the rcfile into a temporary script */
  +    pScript = scriptNew();
  +    sBuf = (char *)calloc(1, RC_READ_BUFSIZE);
  +    while ((nRet = read(nFdrc, sBuf, RC_READ_BUFSIZE)) > 0)
  +        scriptAppend(pScript, sBuf, nRet);
  +
  +    if (nRet == -1) /* Handle read errors */
  +        RC_THROW(RC_ERR_IO);
  +
  +    { /* Extract sections from script, and neatly place in rcfile */
  +        rc_section_t *pSec = NULL;
  +        char *piSecname    = NULL;
  +        int   nLabsize     = 0;
  +        int   nPribytes    = 0;
  +        char *piSubtemp    = NULL; /* To find priority and userid in substrings  */
  +        char *piBlocend    = NULL; /* Misnomer used to control section looping   */
  +        char *piStart      = NULL;
  +        char *piEnd        = NULL;
  +        char *piSep        = NULL;
  +        char *szUser       = NULL;
  +        char *szName       = NULL;
  +        char *szTemp       = NULL; /* Holds temporarily the pri and user strings */
  +        struct passwd *pPwd = NULL;
  +        long nPri          = 0;
  +        long nUid          = 0;
  +        int nUserbytes     = 0;
  +        int nTmp           = 0;
  +        int nOffset        = 0;
  +        int nFound         = 0;
  +        int nVecsize       = 0;
  +        int nSubstrings    = 0;
  +        int *pnVec         = NULL;
  +        const char *kszErr = NULL;
  +        const int kiRegopt = PCRE_DOTALL | PCRE_MULTILINE;
  +        /*const int kiRegopt = PCRE_DOTALL | PCRE_MULTILINE | PCRE_UNGREEDY;*/
  +
  +        pcre *pRegex       = NULL;  /* Perl Compatible Regular Expression */
  +        pcre_extra *pExtra = NULL;  /* Used for studying an expression    */
  +
  +        if ((pRegex = pcre_compile(configGetval(RC_DEF_VAL), kiRegopt, &kszErr, &nOffset, NULL)) == NULL)
  +            RC_THROW(RC_ERR_SYS);
  +
  +        pExtra = pcre_study(pRegex, 0, &kszErr); /* Study the FSM */
  +        if (kszErr) {   /* Variable contains a string reference in case of errors */
  +            free(pRegex);
  +            RC_THROW(RC_ERR_SYS);
  +        }
  +
  +        if (pcre_fullinfo(pRegex, pExtra, PCRE_INFO_CAPTURECOUNT, &nSubstrings))
  +            RC_THROW(RC_ERR_SYS);
  +
  +        /***********************************************************************/
  +        /* Reminder: PCRE writes vectors to help identify substrings.          */
  +        /*           That means that in the following code we can              */
  +        /*           execute a compiled PCRE regex (ab)(\s)(.*)$               */
  +        /*                                                                     */
  +        /*           piBlocend + pnVec[0] = 'start of whole matched string'    */
  +        /*           piBlocend + pnVec[1] = 'end of whole matched string'      */
  +        /*           piBlocend + pnVec[2] = 'start of first substring (ab)'    */
  +        /*           piBlocend + pnVec[3] = 'end of first substring (ab)'      */
  +        /*           piBlocend + pnVec[4] = 'start of second substring (\s)'   */
  +        /*           piBlocend + pnVec[5] = 'end of second substring (\s)'     */
  +        /*           piBlocend + pnVec[6] = 'start of third substring (.*)'    */
  +        /*           piBlocend + pnVec[7] = 'end of third substring (.*)'      */
  +        /***********************************************************************/
  +
  +        /* Use multiples of six, because PCRE needs 2x multiples of three */
  +        nVecsize = 6 * (nSubstrings > 0 ? nSubstrings : 1);
  +        nVecsize *= RC_GOOD_MEASURE; /* Add redundancy factor for error margin */
  +    /*    pAwesome += RC_GOOD_VIBRATIONS;*/ /* Add good vibes for super action */
  +
  +        /* Filter the rc file for the section label, do it here the first time */
  +        pnVec = calloc(nVecsize, sizeof(int));  /* 2/3 vec 1/3 scrapinfo */
  +        nFound = pcre_exec(pRegex, pExtra, *pScript,\
  +            strlen(*pScript), 0, 0, pnVec, nVecsize);
  +
  +        piBlocend = *pScript;   /* Start piBlocend pointing to the script object */
  +        while (nFound > 1) {    /* Loop as long as we have more sections */
  +            piSecname = piBlocend + *(pnVec + 2);
  +            nLabsize  = *(pnVec + 3) - *(pnVec + 2);
  +
  +            /* Handle the section name and body */
  +            piStart   = piBlocend + *(pnVec + 6);
  +            piEnd     = piBlocend + *(pnVec + 7);
  +            szName = malloc((nLabsize + 1) * sizeof (char));
  +            strncpy(szName, piSecname, nLabsize);
  +            *(szName + nLabsize * sizeof (char)) = '\0';
  +            pSec = sectionNew(szName);
  +            free(szName);   /* Get rid of the temporary, actually   */
  +            szName = NULL;  /* just for making a new section string */
  +            sectionSetndata(pSec, piStart, piEnd - piStart);
  +
  +            /* Handle the section parent */
  +            sectionSetparent(pSec, pRcf->m_szName);
  +
  +            /* FIXME: Implement --ParseSectionParam for extra gravy */
  +            /* Handle the section priority */
  +            piStart = piBlocend + *(pnVec + 4);
  +            piEnd   = piBlocend + *(pnVec + 5);
  +            nPribytes = piEnd - piStart;
  +            szTemp  = malloc(nPribytes + sizeof (char));
  +            strncpy(szTemp, piStart, nPribytes);
  +            *(szTemp + nPribytes) = '\0';
  +            piSubtemp = strstr(szTemp, RC_DEF_PRG);
  +            if (piSubtemp) { /* Priority pattern found */
  +                for (nTmp = (int)piSubtemp + strlen(RC_DEF_PRG); \
  +                    isspace(*(char *)nTmp); nTmp += sizeof (char)); /* Strip */
  +                nPri = strtol((char *)nTmp, &piSep, 10);
  +                if ((char *)nTmp == piSep)  /* No priority number follows */
  +                    RC_THROW(RC_ERR_USE);   /* which is an error */
  +                else
  +                    sectionSetpri(pSec, nPri);  /* Found a priority value */
  +            }
  +            else /* Fallback to default value */
  +                sectionSetpri(pSec, RC_DEF_PRI);
  +
  +            /* Handle the section userid   */
  +            piSubtemp = strstr(szTemp, RC_DEF_UIG);
  +            if (piSubtemp) { /* Userid pattern found */
  +                for (nTmp = (int)piSubtemp + strlen(RC_DEF_UIG); \
  +                    isspace(*(char *)nTmp); nTmp += sizeof (char)); /* Strip */
  +                nUid = strtol((char *)nTmp, &piSep, 10);
  +                if ((char *)nTmp == piSep)      /* No userid number follows */
  +                {
  +                    nUserbytes = strspn((strcspn(piSep, " \t\n") * sizeof (char) + piSep), " \t\n");
  +                    nUserbytes = (strlen(piSep) - nUserbytes) * sizeof (char);
  +                    szUser = malloc(nUserbytes + sizeof (char));
  +                    if (!szUser)
  +                        RC_THROW(RC_ERR_MEM);
  +                    strncpy(szUser, (const char *)nTmp, nUserbytes);
  +                    *(szUser + nUserbytes) = '\0';
  +                    strtok(szUser, " \t\n");
  +                    pPwd = getpwnam(szUser);
  +                    if (pPwd) {
  +                        sectionSetuid(pSec, pPwd->pw_uid);  /* Set to given   */
  +                        sectionSetlogin(pSec, szUser);      /* uid and login  */
  +                    }
  +                    else
  +                        sectionSetuid(pSec, RC_DEF_UID);    /* Set to default */
  +                    free(szUser);
  +                }
  +                else {
  +                    pPwd = getpwuid(nUid);
  +                    if (pPwd) {
  +                        sectionSetuid(pSec, nUid);              /* Found a value */
  +                        sectionSetlogin(pSec, pPwd->pw_name);   /* uid and login  */
  +                    }
  +                    else
  +                        sectionSetuid(pSec, RC_DEF_UID);        /* Set to default */
  +                }
  +            }
  +            else /* Fallback to default value */
  +                sectionSetuid(pSec, RC_DEF_UID);
  +
  +            /* Cleanup */
  +            free(szTemp);
  +            szTemp = NULL;
  +
  +            /* Copy a new section to that found in the script object */
  +            pRcf->m_ppSecvec = realloc(pRcf->m_ppSecvec, sizeof(rc_section_t *) \
  +                                                       * (pRcf->m_nSecs + 2));
  +            pRcf->m_ppSecvec[pRcf->m_nSecs] = sectionCopy(pSec);
  +            pRcf->m_ppSecvec[pRcf->m_nSecs + 1] = NULL;
  +            pRcf->m_nSecs++;
  +
  +            /* Clean up our temporary section */
  +            sectionDelete(pSec);
  +            pSec = NULL;
  +
  +            /* Find end of section block */
  +            piBlocend += *(pnVec + 1);
  +
  +            /* Try to match another section */
  +            nFound = pcre_exec(pRegex, pExtra, piBlocend,\
  +                strlen(piBlocend), 0, 0, pnVec, nVecsize);
  +        }
  +
  +    /* Handle errors */
  +    if (nFound == 1)                        /* User gave no klammern */
  +        RC_THROW(RC_ERR_USE);               /* so complain about it */
  +    else if (nFound < PCRE_ERROR_NOMATCH)   /* Generic problem so */
  +        RC_THROW(RC_ERR_SYS);               /* return an error */
  +    }
  +
  +    /* Deallocate and clean */
  +    scriptDelete(pScript);
  +    pScript = NULL;
  +    free(szLocex);
  +    szLocex = NULL;
  +    free(sBuf);
  +    sBuf = NULL;
  +    close(nFdrc);
  +
  +    return(RC_OK);
  +}
  +
  +/****************************************************
  +* rcfileGetsec(rc_file_t *, const char *)           *
  +* Get a section from the rcfile, and return it      *
  +****************************************************/
  +rc_section_t *rcfileGetsec(rc_file_t *pRcf, const char *szSec)
  +{
  +    int nIter = 0;
  +
  +    /* Return the section if it is found */
  +    for (nIter = 0; nIter < pRcf->m_nSecs; nIter++) {
  +        if (!strcmp(pRcf->m_ppSecvec[nIter]->m_szName, szSec))
  +            return(pRcf->m_ppSecvec[nIter]);
  +    }
  +
  +    return NULL;
  +}
  +
  +/****************************************************
   * rcfileAppendsec(rc_file_t *, rc_section_t *)      *
   * Append a section to this rcfile                   *
   ****************************************************/
   rc_return_t rcfileAppendsec(rc_file_t *pRcfile, rc_section_t *pInsec)
   {
  -    assert(pRcfile);    /* Rcfile parameter must be valid */
  -    if (!pInsec)        /* Check sanity */
  -        return(RC_THROW(RC_ERR_USE));
  -
  -    /* When appending to a brand new rcfile, reset the object key (m_nSecs) */
  -    if (pRcfile->m_nSecs == -1)
  -        pRcfile->m_nSecs = 0;
  +    assert(pRcfile && pInsec);  /* Parameters must be valid */
  +
  +    /* Grow the number of sections */
  +    pRcfile->m_nSecs++;
   
       /* First make our vector larger to hold one more section */
       pRcfile->m_ppSecvec = realloc(pRcfile->m_ppSecvec, sizeof(rc_section_t *) \
  @@ -83,6 +346,13 @@
       pRcfile->m_ppSecvec[pRcfile->m_nSecs]->m_nPri  = pInsec->m_nPri;
       pRcfile->m_ppSecvec[pRcfile->m_nSecs]->m_nUid  = pInsec->m_nUid;
   
  +    /* Deep copy of parent */
  +    if (pInsec->m_szParent) {
  +        pRcfile->m_ppSecvec[pRcfile->m_nSecs]->m_szParent = \
  +            malloc((strlen(pInsec->m_szParent) + sizeof(char)) * sizeof(char));
  +        strcpy(pRcfile->m_ppSecvec[pRcfile->m_nSecs]->m_szParent, pInsec->m_szParent);
  +    }
  +
       /* Deep copy of user name */
       if (pInsec->m_szLogin) {
           pRcfile->m_ppSecvec[pRcfile->m_nSecs]->m_szLogin = \
  @@ -91,14 +361,8 @@
       }
   
       /* Deep copy of section text */
  -    if (pInsec->m_szData) {
  -        pRcfile->m_ppSecvec[pRcfile->m_nSecs]->m_szData = \
  -            malloc((strlen(pInsec->m_szData) + sizeof(char)) * sizeof(char));
  -        strcpy(pRcfile->m_ppSecvec[pRcfile->m_nSecs]->m_szData, pInsec->m_szData);
  -    }
  -
  -    /* Finally increment section count */
  -    pRcfile->m_nSecs++;
  +    if (scriptGetdata(pInsec->m_pData))
  +        scriptSetdata(pRcfile->m_ppSecvec[pRcfile->m_nSecs]->m_pData, pInsec->m_pData);
   
       return(RC_THROW(RC_OK));
   }
  @@ -156,26 +420,24 @@
   {
       int nSecs = pRcfile->m_nSecs;
   
  +    assert(pRcfile); /* Stupidity check */
  +
       /* Cleanup our junk */
  -    if (pRcfile) {
  -        pRcfile->m_nSecs = 0;       /* Blank the section count    */
  -        if (pRcfile->m_szName) {    /* Destroy the rc name        */
  -            free(pRcfile->m_szName);
  -            pRcfile->m_szName = NULL;
  -        }
  -        while (nSecs-- > 0) {       /* Destroy the section vector */
  -            if (pRcfile->m_ppSecvec[nSecs]) {
  -                sectionDelete(pRcfile->m_ppSecvec[nSecs]);
  -                pRcfile->m_ppSecvec[nSecs] = NULL;
  -            }
  +    pRcfile->m_nSecs = 0;       /* Blank the section count    */
  +    if (pRcfile->m_szName) {    /* Destroy the rc name        */
  +        free(pRcfile->m_szName);
  +        pRcfile->m_szName = NULL;
  +    }
  +    while (--nSecs >= 0) {      /* Destroy the section vector */
  +        if (pRcfile->m_ppSecvec[nSecs]) {
  +            sectionDelete(pRcfile->m_ppSecvec[nSecs]);
  +            pRcfile->m_ppSecvec[nSecs] = NULL;
           }
  -        free(pRcfile->m_ppSecvec);
  -        pRcfile->m_ppSecvec = NULL;
  -        free(pRcfile);
  -        pRcfile = NULL;
       }
  -    else    /* Dumbass passed an empty rcfile object */
  -        assert(FALSE);
  +    free(pRcfile->m_ppSecvec);
  +    pRcfile->m_ppSecvec = NULL;
  +    free(pRcfile);
  +    pRcfile = NULL;
   
       return(RC_THROW(RC_OK));
   }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_private.h
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 rc_private.h
  --- ossp-pkg/rc/rc_private.h	18 Jun 2003 14:35:29 -0000	1.33
  +++ ossp-pkg/rc/rc_private.h	26 Jun 2003 18:45:14 -0000	1.34
  @@ -80,9 +80,10 @@
   typedef struct {
       int m_nPri;
       int m_nUid;
  +    char *m_szParent;
       char *m_szName;
       char *m_szLogin;
  -    char *m_szData;
  +    rc_script_t *m_pData;
   } rc_section_t;
   
   /* Rcfile class */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.47 -r1.48 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	23 Jun 2003 11:27:53 -0000	1.47
  +++ ossp-pkg/rc/rc_proc.c	26 Jun 2003 18:45:14 -0000	1.48
  @@ -68,16 +68,15 @@
   rc_return_t procPopulate(rc_proc_t *pRc)
   {
       int nSect   = 0;
  -    int nFdrc   = -1;
       int nFdfunc = -1;
       int nRet    = 0;
       int nRcs    = 0;
       ex_t Except;
   
       char         *sBuf        = NULL;
  -    char         *szLocex     = NULL;
  -    rc_script_t  *pTempscript = NULL;
  +    rc_file_t    *pRcfile     = NULL;
       rc_section_t *pSec        = NULL;
  +    rc_section_t *pCom        = NULL;
       short         nTotalsecs  = vectorCount(configGetsecs());
   
       assert(pRc->m_pList->m_ppFilevec);
  @@ -93,6 +92,7 @@
               if (nRet == -1) /* Handle read errors */
                   RC_THROW(RC_ERR_IO);
               scriptAppend(pRc->m_pScriptfunc, "\n", sizeof("\n"));
  +            close(nFdfunc); /* Close Func file handle */
           }
           else
               RC_THROW(RC_ERR_FNC);
  @@ -104,86 +104,40 @@
           if (!pRc->m_pList->m_ppFilevec[nRcs])
               RC_THROW(RC_ERR_INT); /* Rcfile vector is missing its tail */
   
  -        /* Build the location path name */
  -        if (!configGetval(RC_LOC_VAL)) {
  -            szLocex = NULL;
  -            szLocex = strdup("./"); /* FIXME: Relocate default val */
  -            RC_THROW(RC_ERR_INT);   /* Config should have given a locs default */
  -        }
  -        else { /* Only enter block with valid string, strdup can't handle NULL */
  -            if (*(configGetval(RC_LOC_VAL) + strlen(configGetval(RC_LOC_VAL)) - sizeof (char)) != '/') {
  -                szLocex = malloc(strlen(configGetval(RC_LOC_VAL)) + \
  -                                 sizeof (char) + \
  -                                 strlen("rc.") + \
  -                                 strlen(pRc->m_pList->m_ppFilevec[nRcs]->m_szName) + \
  -                                 sizeof (char));
  -                strcpy(szLocex, configGetval(RC_LOC_VAL));
  -                strcat(szLocex, "/");
  -                strcat(szLocex, "rc."); /* FIXME: Make the prefix configurable */
  -                strcat(szLocex, pRc->m_pList->m_ppFilevec[nRcs]->m_szName);
  -            }
  -            else {
  -                szLocex = malloc(strlen(configGetval(RC_LOC_VAL)) + \
  -                                 strlen("rc.") + \
  -                                 strlen(pRc->m_pList->m_ppFilevec[nRcs]->m_szName) + \
  -                                 sizeof (char));
  -                strcpy(szLocex, configGetval(RC_LOC_VAL));
  -                strcat(szLocex, "rc."); /* FIXME: Make the prefix configurable */
  -                strcat(szLocex, pRc->m_pList->m_ppFilevec[nRcs]->m_szName);
  -            }
  -        }
  +        pRcfile = rcfileNew(pRc->m_pList->m_ppFilevec[nRcs]->m_szName);
  +        rcfileParse(pRcfile);
   
  -        /* Open the rc file unconditionally */
  -        if ((nFdrc = open(szLocex, O_RDONLY)) == -1)
  -            RC_THROW(RC_ERR_RCF);
  -
  -        /* Read data from the rc file into a temporary script */
  -        pTempscript = scriptNew();
  -        while ((nRet = read(nFdrc, sBuf, RC_READ_BUFSIZE)) > 0)
  -            scriptAppend(pTempscript, sBuf, nRet);
  -
  -        if (nRet == -1) /* Handle read errors */
  -            RC_THROW(RC_ERR_IO);
  -
  -        try {
  -            /* Append common section if it exists */
  -            pSec = scriptSection(pTempscript, configGetval(RC_NCF_VAL));
  +        try { /* If it exists, append config section unconditionally */
  +            pSec = rcfileGetsec(pRcfile, configGetval(RC_NCF_VAL));
               if (pSec) { /* Only operate if the section lookup succeeds */
                   scriptAppend(pRc->m_pScriptcom, sectionGetdata(pSec), strlen(sectionGetdata(pSec)));
                   scriptAppend(pRc->m_pScriptcom, "\n", strlen ("\n"));
  -                sectionDelete(pSec);    /* Cleanup */
  -                pSec = NULL;            /* Cleanup */
               }
   
               for (nSect = 0; nSect < nTotalsecs; nSect++) { /* Iterate over */
                   /* Extract a section from the temp script, and append it */
  -                pSec = scriptSection(pTempscript, configGetsecs()[nSect]);
  -
  -                if (pSec) /* Only copy if the section lookup succeeds */
  +                pSec = rcfileGetsec(pRcfile, configGetsecs()[nSect]);
  +                if (pSec) {
  +                    /* Append common section only if the target section matches */
  +                    pCom = rcfileGetsec(pRcfile, configGetval(RC_CMN_VAL));
  +                    if (pCom)   /* Only append if the common lookup succeeds */
  +                        rcfileAppendsec(pRc->m_pList->m_ppFilevec[nRcs], pCom);
  +                    /* Only copy if the section lookup succeeds */
                       rcfileAppendsec(pRc->m_pList->m_ppFilevec[nRcs], pSec);
  +                }
                   else if (configGetval(RC_DBG_VAL)) /* Only show if debug set */
                       fprintf(stderr, "#Warning: Missing section '%s' in %s!\n",\
                           configGetsecs()[nSect], pRc->m_pList->m_ppFilevec[nRcs]->m_szName);
  -
  -                if (pSec) { /* Cleanup iterative section string */
  -                    sectionDelete(pSec);
  -                    pSec = NULL;
  -                }
               }
           }
           catch(Except)
               rethrow;
   
  -        /* Clean up our crap */
  -        scriptDelete(pTempscript); /* Temp script */
  -        pTempscript = NULL;
  -        free(szLocex);  /* Temp Location + Rcfile */
  -        szLocex = NULL;
  -        close(nFdrc);   /* Close Rc file handle */
  +        /* Attach our rcfile in the list */
  +        pRc->m_pList->m_ppFilevec[nRcs] = pRcfile;
  +        pRcfile = NULL;
       }
   
  -    close(nFdfunc);     /* Close Func file handle */
  -
       /* Memory cleanups */
       if (sBuf) {
           free(sBuf);
  @@ -248,20 +202,18 @@
               free(szVerbose);
               szVerbose = NULL;
           }
  -        scriptAppend(pFatscript, scriptTostring(pRc->m_pScriptfunc), \
  -            strlen(scriptTostring(pRc->m_pScriptfunc)));
  +        scriptAdd(pFatscript, pRc->m_pScriptfunc);
           /* Conditionally print common section notice in verbal mode */
           if (configGetval(RC_VRB_VAL)) {
  -            nBytes = (strlen(RC_EVN_TEXT) + strlen(RC_CMN_TEXT) * 2 + 2) * sizeof (char);
  +            nBytes = (strlen(RC_EVN_TEXT) + strlen(RC_CFG_TEXT) * 2 + 2) * sizeof (char);
               szVerbose = malloc(nBytes);
  -            sprintf(szVerbose, RC_EVN_TEXT, RC_CMN_TEXT, RC_CMN_TEXT);
  +            sprintf(szVerbose, RC_EVN_TEXT, RC_CFG_TEXT, RC_CFG_TEXT);
               strcat(szVerbose, "\n");
               scriptAppend(pFatscript, szVerbose, strlen(szVerbose));
               free(szVerbose);
               szVerbose = NULL;
           }
  -        scriptAppend(pFatscript, scriptTostring(pRc->m_pScriptcom), \
  -            strlen(scriptTostring(pRc->m_pScriptcom)));
  +        scriptAdd(pFatscript, pRc->m_pScriptcom);
           for (nSecs = 0; nSecs < nTotalsecs; nSecs++) {
               for (nRcs = 0; nRcs < pRc->m_pList->m_nFiles; nRcs++) {
                   for (nTmp = 0; nTmp < pRc->m_pList->m_ppFilevec[nRcs]->m_nSecs && \
  @@ -344,8 +296,8 @@
           }
           /* Allocate a block of section pointers to use temporarily */
           ppSectmp = calloc(pRc->m_pList->m_nFiles, sizeof(rc_section_t *));
  -        szFunc = (char *)scriptTostring(pRc->m_pScriptfunc);
  -        szCom  = (char *)scriptTostring(pRc->m_pScriptcom);
  +        szFunc = (char *)scriptGetdata(pRc->m_pScriptfunc);
  +        szCom  = (char *)scriptGetdata(pRc->m_pScriptcom);
           for (nSecs = 0; nSecs < nTotalsecs; nSecs++) {
               for (nRcs = 0; nRcs < pRc->m_pList->m_nFiles; nRcs++) {
                   for (nTmp = 0; nTmp < pRc->m_pList->m_ppFilevec[nRcs]->m_nSecs && \
  @@ -363,17 +315,17 @@
               nTmp = 0; /* Count from zero until however many sections we have */
               while (nTmp < pRc->m_pList->m_nFiles && ppSectmp[nTmp]) {
                   /* Conditionally print common and other section notices in verbal mode */
  -                if (configGetval(RC_VRB_VAL)) {
  +                if (configGetval(RC_VRB_VAL)) { /* Verbose mode is active */
                       size_t nSizverb = 0;
                       size_t nPrescr  = 0;
                       size_t nSecverb = 0;
                       size_t nSection = 0;
   
                       /* Allocate space just for string to prepare for verbose */
  -                    nSizverb = (strlen(RC_EXN_TEXT) + strlen(RC_CMN_TEXT) * 2 \
  +                    nSizverb = (strlen(RC_EXN_TEXT) + strlen(RC_CFG_TEXT) * 2 \
                           + strlen(RC_ECHO_STR) + strlen("\"\"") + 1) * sizeof (char);
                       szVerbose = malloc(nSizverb);
  -                    sprintf(szVerbose, RC_EXN_TEXT, RC_CMN_TEXT, RC_CMN_TEXT);
  +                    sprintf(szVerbose, RC_EXN_TEXT, RC_CFG_TEXT, RC_CFG_TEXT);
   
                       /* Allocate space for entire string to execvp(3) */
                       nPrescr = (strlen(RC_VST_TEXT) + strlen(RC_EXF_TEXT) + \
  @@ -388,12 +340,12 @@
                       strcat(szExec, "\n");           /* Stick a newline inbetween */
                       strcat(szExec, RC_EXF_TEXT);    /* Continue with the func text */
                       strcat(szExec, "\";");          /* Finalize the verbosity notice */
  -                    strcat(szExec, szFunc);         /* Continue with the common script code */
  +                    strcat(szExec, szFunc);         /* Continue with the funcs script code */
                       strcat(szExec, RC_ECHO_STR);    /* Continue with the echo string */
                       strcat(szExec, "\"");           /* Append a quote next to the echo */
                       strcat(szExec, szVerbose);      /* Continue with the common text */
                       strcat(szExec, "\";");          /* Finalize the verbosity notice */
  -                    strcat(szExec, szCom);          /* Then with the funcs script code  */
  +                    strcat(szExec, szCom);          /* Then with the common script code  */
                       szTmp = (char *)sectionGetname(ppSectmp[nTmp]);
                       nSecverb = (strlen(RC_EXN_TEXT) + strlen(szTmp) * 2 \
                           + strlen(RC_ECHO_STR) + strlen("\"\"") + 1) * sizeof (char);
  @@ -433,7 +385,7 @@
                           szExec = NULL;
                       }
                   }
  -                else {
  +                else { /* Verbose mode is off */
                       szTmp = (char *)sectionGetdata(ppSectmp[nTmp]);
                       szExec = malloc((strlen(szFunc) + strlen(szCom) + \
                           strlen(szTmp) + 1) * sizeof(char));
  @@ -486,9 +438,9 @@
           scriptDump(pRc->m_pScriptfunc); /* Dump the funcs script */
           /* Conditionally print common section notice in verbal mode */
           if (configGetval(RC_VRB_VAL)) {
  -            nBytes = (strlen(RC_EVN_TEXT) + strlen(RC_CMN_TEXT) * 2 + 2) * sizeof (char);
  +            nBytes = (strlen(RC_EVN_TEXT) + strlen(RC_CFG_TEXT) * 2 + 2) * sizeof (char);
               szVerbose = malloc(nBytes);
  -            sprintf(szVerbose, RC_EVN_TEXT, RC_CMN_TEXT, RC_CMN_TEXT);
  +            sprintf(szVerbose, RC_EVN_TEXT, RC_CFG_TEXT, RC_CFG_TEXT);
               strcat(szVerbose, "\n");
               fprintf(stderr, szVerbose);
               free(szVerbose);
  @@ -527,7 +479,7 @@
       else if (configGetval(RC_PAR_VAL)) {                    /* Parse names */
           /* Allocate a block of section pointers to use as a temporary */
           ppSectmp = calloc(pRc->m_pList->m_nFiles, sizeof(rc_section_t *));
  -        fprintf(stderr, "file %s, section %s\n", pRc->m_pList->m_ppFilevec[nRcs]->m_szName, RC_CMN_TEXT);
  +        fprintf(stderr, "file %s, section %s\n", pRc->m_pList->m_ppFilevec[nRcs]->m_szName, RC_CFG_TEXT);
           for (nSecs = 0; nSecs < nTotalsecs; nSecs++) {
               for (nRcs = 0; nRcs < pRc->m_pList->m_nFiles; nRcs++) {
                   for (nTmp = 0; nTmp < pRc->m_pList->m_ppFilevec[nRcs]->m_nSecs && \
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_script.c
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 rc_script.c
  --- ossp-pkg/rc/rc_script.c	18 Jun 2003 14:35:29 -0000	1.31
  +++ ossp-pkg/rc/rc_script.c	26 Jun 2003 18:45:14 -0000	1.32
  @@ -50,9 +50,9 @@
   
       pNew = (rc_script_t *)malloc(sizeof(rc_script_t));
       if (pNew) {
  -        *pNew = malloc((strlen(scriptTostring(pOrig)) + 1) * sizeof(char));
  +        *pNew = malloc((strlen(scriptGetdata(pOrig)) + 1) * sizeof(char));
           if (*pNew)
  -            strcpy(*pNew, scriptTostring(pOrig));
  +            strcpy(*pNew, scriptGetdata(pOrig));
           else
               RC_THROW(RC_ERR_MEM);
       }
  @@ -85,6 +85,36 @@
   }
   
   /****************************************************
  +* scriptAdd(rc_script_t *, rc_script_t *)           *
  +* Add one script to another                         *
  +****************************************************/
  +rc_return_t scriptAdd(rc_script_t *pDest, rc_script_t *pSource)
  +{
  +    int nResize     = 0;
  +    void *pvRealloc = NULL;
  +
  +    assert(pDest && pSource); /* Parameters must be valid */
  +
  +    /* Add 2 chars to ensure that a \0 precedes any strings */
  +    nResize = strlen(*pDest) + strlen(*pSource) + sizeof (char) * 2;
  +    /* Don't trust realloc(3) in this case */
  +    if ((pvRealloc = calloc(1, (size_t)nResize)) == NULL)
  +        return(RC_THROW(RC_ERR_MEM));
  +
  +    strcpy(pvRealloc, *pDest);
  +    strcat(pvRealloc, *pSource);
  +
  +    /* Cleanup and deallocate */
  +    if (*pDest) {
  +        free(*pDest);
  +        *pDest = NULL;
  +    }
  +
  +    *pDest = pvRealloc; /* Put the new data in */
  +    return(RC_THROW(RC_OK));
  +}
  +
  +/****************************************************
   * scriptAppend(rc_script_t *, const char *, size_t) *
   * Append text to a script                           *
   ****************************************************/
  @@ -138,8 +168,8 @@
       char *szUser       = NULL;
       char *szTemp       = NULL; /* Holds temporarily the pri and user strings */
       struct passwd *pPwd = NULL;
  -    long  nPri         = 0;
  -    long  nUid         = 0;
  +    long nPri          = 0;
  +    long nUid          = 0;
       int nUserbytes     = 0;
       int nTmp           = 0;
       int nOffset        = 0;
  @@ -291,19 +321,35 @@
   }
   
   /************************************************
  -* scriptTostring(rc_script_t *)                 *
  +* scriptGetdata(rc_script_t *)                  *
   * Return the private script data as a string    *
   ************************************************/
  -const char *scriptTostring(rc_script_t *pScript)
  +const char *scriptGetdata(rc_script_t *pScript)
   {
  +    assert(pScript);
  +
       /* Don't remove this! It encapsulates the script object, */
       /*                    which might not be a simple string */
  -    if (pScript && *pScript)
  -        return(*pScript);
  -    else
  -        RC_THROW(RC_ERR_USE);   /* Script was never constructed */
  +    return(*pScript);
  +}
   
  -    return(NULL); /* Not reached */
  +/************************************************
  +* scriptSetdata(rc_script_t *, const char *)    *
  +* Set the private script data from a string     *
  +************************************************/
  +rc_return_t scriptSetdata(rc_script_t *pScript, const char *kszIn)
  +{
  +    assert(pScript && kszIn); /* Avoid idiots */
  +
  +    if (*pScript) {
  +        free(*pScript);
  +        *pScript = NULL;
  +    }
  +
  +    *pScript = malloc((strlen(kszIn) + 1) * sizeof(char));
  +    strcpy(*pScript, kszIn);
  +
  +    return(RC_THROW(RC_OK));
   }
   
   /************************************************
  @@ -315,7 +361,7 @@
       /* Don't remove this! It encapsulates the script object, */
       /*                    which might not be a simple string */
       if (pScript) {
  -        fprintf(stdout, "%s", scriptTostring(pScript));
  +        fprintf(stdout, "%s", scriptGetdata(pScript));
           return(RC_THROW(RC_OK));
       }
       else
  @@ -340,7 +386,7 @@
       /* Don't remove this! It encapsulates the script object, */
       /*                    which might not be a simple string */
       if (pStream) {
  -        fprintf(pStream, "%s", scriptTostring(pScript));
  +        fprintf(pStream, "%s", scriptGetdata(pScript));
           fclose(pStream);
           return(RC_THROW(RC_OK));
       }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_sect.c
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 rc_sect.c
  --- ossp-pkg/rc/rc_sect.c	18 Jun 2003 14:35:29 -0000	1.14
  +++ ossp-pkg/rc/rc_sect.c	26 Jun 2003 18:45:14 -0000	1.15
  @@ -50,6 +50,7 @@
       if (pSec) {
           pSec->m_szName = malloc((strlen(szName) + 1) * sizeof(char));
           strcpy(pSec->m_szName, szName);
  +        pSec->m_pData = scriptNew();
       }
       else
           RC_THROW(RC_ERR_MEM);
  @@ -66,9 +67,23 @@
       rc_section_t *pSec = NULL;
   
       /* Today is a rain and no coffee day */
  -    pSec = (rc_section_t *)malloc(sizeof(rc_section_t));
  -    pSec->m_nPri    = pOrigsec->m_nPri;
  -    pSec->m_nUid    = pOrigsec->m_nUid;
  +    pSec = (rc_section_t *)calloc(1, sizeof(rc_section_t));
  +    pSec->m_nPri = pOrigsec->m_nPri;
  +    pSec->m_nUid = pOrigsec->m_nUid;
  +
  +    /* Deep copy of section name */
  +    if (pOrigsec->m_szName) {
  +        pSec->m_szName = malloc((strlen(pOrigsec->m_szName) + sizeof(char))\
  +            * sizeof(char));
  +        strcpy(pSec->m_szName, pOrigsec->m_szName);
  +    }
  +
  +    /* Deep copy of parent name */
  +    if (pOrigsec->m_szParent) {
  +        pSec->m_szParent = malloc((strlen(pOrigsec->m_szParent) + sizeof(char))\
  +            * sizeof(char));
  +        strcpy(pSec->m_szParent, pOrigsec->m_szParent);
  +    }
   
       /* Deep copy of user name */
       if (pOrigsec->m_szLogin) {
  @@ -78,10 +93,10 @@
       }
   
       /* Deep copy of section text */
  -    if (pOrigsec->m_szData) {
  -        pSec->m_szData  = malloc((strlen(pOrigsec->m_szData) + sizeof(char))\
  -            * sizeof(char));
  -        strcpy(pSec->m_szData, pOrigsec->m_szData);
  +    if (scriptGetdata(pOrigsec->m_pData)) {
  +        if (!pSec->m_pData)
  +            pSec->m_pData = scriptNew();
  +        scriptSetdata(pSec->m_pData, scriptGetdata(pOrigsec->m_pData));
       }
   
       if (!pSec)
  @@ -124,6 +139,16 @@
       return(0); /* Not reached */
   }
   
  +const char *sectionGetparent(rc_section_t *pSec)
  +{ /* Parent rcfile name of section, used for display during verbose */
  +    if (pSec)
  +        return(pSec->m_szParent);
  +    else
  +        RC_THROW(RC_ERR_USE);
  +
  +    return(0); /* Not reached */
  +}
  +
   const char *sectionGetlogin(rc_section_t *pSec)
   { /* User name of section, used for display during print */
       if (pSec)
  @@ -136,8 +161,8 @@
   
   const char *sectionGetdata(rc_section_t *pSec)
   { /* Data of section, this is the script body of the particular section */
  -    if (pSec && pSec->m_szData)
  -        return(pSec->m_szData);
  +    if (pSec && scriptGetdata(pSec->m_pData))
  +        return(scriptGetdata(pSec->m_pData));
       else
           RC_THROW(RC_ERR_USE);
   
  @@ -179,6 +204,17 @@
       return(RC_THROW(RC_ERR_USE));
   }
   
  +rc_return_t sectionSetparent(rc_section_t *pSec, const char *szName)
  +{ /* Parent rcfile name of section, used for display during verbose */
  +    if (pSec) {
  +        pSec->m_szParent = malloc((strlen(szName) + 1) * sizeof (char));
  +        strcpy(pSec->m_szParent, szName);
  +        return(RC_THROW(RC_OK));
  +    }
  +
  +    return(RC_THROW(RC_ERR_USE));
  +}
  +
   rc_return_t sectionSetlogin(rc_section_t *pSec, const char *szLogin)
   { /* User name of section, used for display during print */
       if (pSec) {
  @@ -190,44 +226,40 @@
       return(RC_THROW(RC_ERR_USE));
   }
   
  -rc_return_t sectionSetdata(rc_section_t *pSec, const char *kszScript)
  +rc_return_t sectionSetdata(rc_section_t *pSec, const char *kszIn)
   { /* Data of section, this is the script body of the particular section */
  -    if (pSec) {
  -        size_t nBytes = (strlen(kszScript) + sizeof(char)) * sizeof(char);
  -        if (pSec->m_szData) { /* The section data is already in use */
  -            free(pSec->m_szData);
  -            pSec->m_szData = malloc(nBytes);
  -            strcpy(pSec->m_szData, kszScript);
  -        }
  -        else { /* Set the data the usual way */
  -            pSec->m_szData = malloc(nBytes);
  -            strcpy(pSec->m_szData, kszScript);
  -        }
  -        return(RC_THROW(RC_OK));
  +
  +    assert(pSec && kszIn);
  +
  +    if (scriptGetdata(pSec->m_pData)) { /* The section data is already in use */
  +        scriptDelete(pSec->m_pData);
  +        pSec->m_pData = NULL;
       }
   
  -    return(RC_THROW(RC_ERR_USE));
  +    scriptSetdata(pSec->m_pData, kszIn);
  +    return(RC_THROW(RC_OK));
   }
   
  -rc_return_t sectionSetndata(rc_section_t *pSec, const char *kszScript, size_t Len)
  +rc_return_t sectionSetndata(rc_section_t *pSec, const char *kszIn, size_t Len)
   { /* Data of section, this is the script body of the particular section */
  -    if (pSec) {
  -        size_t nBytes = (Len + 1) * sizeof(char);       /* Set size */
  -        if (pSec->m_szData) { /* The section data is already in use */
  -            free(pSec->m_szData);
  -            pSec->m_szData = malloc(nBytes);
  -            strncpy(pSec->m_szData, kszScript, Len);
  -            *(pSec->m_szData + Len) = '\0'; /* Terminate outgoing */
  -        }
  -        else { /* Set the data the usual way */
  -            pSec->m_szData = malloc(nBytes);
  -            strncpy(pSec->m_szData, kszScript, Len);
  -            *(pSec->m_szData + Len) = '\0'; /* Terminate outgoing */
  -        }
  -        return(RC_THROW(RC_OK));
  +
  +    char *szTemp  = NULL;
  +    size_t nBytes = (Len + 1) * sizeof(char);       /* Set size */
  +
  +    assert(pSec && kszIn); /* Dummy detector */
  +
  +    if (pSec->m_pData) {    /* The section data is already in use */
  +        scriptDelete(pSec->m_pData);
       }
   
  -    return(RC_THROW(RC_ERR_USE));
  +    pSec->m_pData = scriptNew();
  +    szTemp = malloc(nBytes);
  +    strncpy(szTemp, kszIn, Len);
  +    *(szTemp + Len) = '\0';                 /* Terminate outgoing */
  +    scriptSetdata(pSec->m_pData, szTemp);   /* Finish the job */
  +    free(szTemp);                           /* Deallocate */
  +    szTemp = NULL;
  +    return(RC_THROW(RC_OK));
   }
   
   /************************************************
  @@ -281,12 +313,18 @@
   {
       /* Cleanup our junk */
       if (pSec) {
  -        if (pSec->m_szData)
  -            free(pSec->m_szData);
  -        if (pSec->m_szName)
  +        if (pSec->m_pData) {
  +            scriptDelete(pSec->m_pData);
  +            pSec->m_pData = NULL;
  +        }
  +        if (pSec->m_szName) {
               free(pSec->m_szName);
  -        if (pSec->m_szLogin)
  +            pSec->m_szName = NULL;
  +        }
  +        if (pSec->m_szLogin) {
               free(pSec->m_szLogin);
  +            pSec->m_szLogin = NULL;
  +        }
           free(pSec);
       }
       else    /* Dumbass passed an empty section object */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_test/rc.ntp
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 rc.ntp
  --- ossp-pkg/rc/rc_test/rc.ntp	28 May 2003 18:26:48 -0000	1.8
  +++ ossp-pkg/rc/rc_test/rc.ntp	26 Jun 2003 18:45:15 -0000	1.9
  @@ -2,6 +2,12 @@
   
   echo "Run commands NTP starting"
   
  +%config
  +    echo "Starting ntp config section"
  +
  +%common
  +    echo "Dis ist de commun sektion von ntp"
  +
   %test
       echo "Just an echo to test ntp"
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_test/rc.zebra
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 rc.zebra
  --- ossp-pkg/rc/rc_test/rc.zebra	3 Jun 2003 15:28:09 -0000	1.7
  +++ ossp-pkg/rc/rc_test/rc.zebra	26 Jun 2003 18:45:15 -0000	1.8
  @@ -13,7 +13,7 @@
   echo
   
   %test
  -    echo "First"
  +    echo "First line in zebra test"
   
       echo "Biff borchert echo to test zebra"
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jun 27 12:15:21 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 15AC576F98; Fri, 27 Jun 2003 12:15:20 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_private.h rc_proc.c
Message-Id: <20030627101520.15AC576F98@mail.ossp.org>
Date: Fri, 27 Jun 2003 12:15:20 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   27-Jun-2003 12:15:20
  Branch: HEAD                             Handle: 2003062711151900

  Modified files:
    ossp-pkg/rc             rc_private.h rc_proc.c

  Log:
    Fix a deallocation name bug, and change common-related names to config to
    avoid similar problems.

  Summary:
    Revision    Changes     Path
    1.35        +1  -1      ossp-pkg/rc/rc_private.h
    1.49        +18 -18     ossp-pkg/rc/rc_proc.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_private.h
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 rc_private.h
  --- ossp-pkg/rc/rc_private.h	26 Jun 2003 18:45:14 -0000	1.34
  +++ ossp-pkg/rc/rc_private.h	27 Jun 2003 10:15:19 -0000	1.35
  @@ -102,7 +102,7 @@
   /* Processor class */
   typedef struct {
       rc_script_t *m_pScriptfunc;
  -    rc_script_t *m_pScriptcom;
  +    rc_script_t *m_pScriptcnf;
       rc_list_t *m_pList;
   } rc_proc_t;
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.48 -r1.49 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	26 Jun 2003 18:45:14 -0000	1.48
  +++ ossp-pkg/rc/rc_proc.c	27 Jun 2003 10:15:19 -0000	1.49
  @@ -53,7 +53,7 @@
           pNewrc->m_pList = listNew();              /* Construct a rcfile list  */
           listPopulate(pNewrc->m_pList, configGetrcfile()); /* Prepopulate list */
           pNewrc->m_pScriptfunc = scriptNew(); /* Construct a functions script  */
  -        pNewrc->m_pScriptcom  = scriptNew(); /* Construct a common script     */
  +        pNewrc->m_pScriptcnf  = scriptNew(); /* Construct a config script     */
       }
       ex_catch(Except)
           rethrow;
  @@ -110,8 +110,8 @@
           try { /* If it exists, append config section unconditionally */
               pSec = rcfileGetsec(pRcfile, configGetval(RC_NCF_VAL));
               if (pSec) { /* Only operate if the section lookup succeeds */
  -                scriptAppend(pRc->m_pScriptcom, sectionGetdata(pSec), strlen(sectionGetdata(pSec)));
  -                scriptAppend(pRc->m_pScriptcom, "\n", strlen ("\n"));
  +                scriptAppend(pRc->m_pScriptcnf, sectionGetdata(pSec), strlen(sectionGetdata(pSec)));
  +                scriptAppend(pRc->m_pScriptcnf, "\n", strlen ("\n"));
               }
   
               for (nSect = 0; nSect < nTotalsecs; nSect++) { /* Iterate over */
  @@ -164,7 +164,7 @@
       char *szTmpfile = NULL;             /* Path of temporary file          */
       char *szTmp     = NULL;             /* Generic temporary string        */
       char *szFunc    = NULL;             /* Stores func script text         */
  -    char *szCom     = NULL;             /* Stores common script text       */
  +    char *szCnf     = NULL;             /* Stores config script text       */
       char *szExec    = NULL;             /* Used only during exec mode      */
       char *szVerbose = NULL;             /* Used when handling verbose mode */
       char *pszVec[RC_EXEC_MAXARGS];      /* For passing in to execv(3)      */
  @@ -203,7 +203,7 @@
               szVerbose = NULL;
           }
           scriptAdd(pFatscript, pRc->m_pScriptfunc);
  -        /* Conditionally print common section notice in verbal mode */
  +        /* Conditionally print config section notice in verbal mode */
           if (configGetval(RC_VRB_VAL)) {
               nBytes = (strlen(RC_EVN_TEXT) + strlen(RC_CFG_TEXT) * 2 + 2) * sizeof (char);
               szVerbose = malloc(nBytes);
  @@ -213,7 +213,7 @@
               free(szVerbose);
               szVerbose = NULL;
           }
  -        scriptAdd(pFatscript, pRc->m_pScriptcom);
  +        scriptAdd(pFatscript, pRc->m_pScriptcnf);
           for (nSecs = 0; nSecs < nTotalsecs; nSecs++) {
               for (nRcs = 0; nRcs < pRc->m_pList->m_nFiles; nRcs++) {
                   for (nTmp = 0; nTmp < pRc->m_pList->m_ppFilevec[nRcs]->m_nSecs && \
  @@ -297,7 +297,7 @@
           /* Allocate a block of section pointers to use temporarily */
           ppSectmp = calloc(pRc->m_pList->m_nFiles, sizeof(rc_section_t *));
           szFunc = (char *)scriptGetdata(pRc->m_pScriptfunc);
  -        szCom  = (char *)scriptGetdata(pRc->m_pScriptcom);
  +        szCnf  = (char *)scriptGetdata(pRc->m_pScriptcnf);
           for (nSecs = 0; nSecs < nTotalsecs; nSecs++) {
               for (nRcs = 0; nRcs < pRc->m_pList->m_nFiles; nRcs++) {
                   for (nTmp = 0; nTmp < pRc->m_pList->m_ppFilevec[nRcs]->m_nSecs && \
  @@ -314,7 +314,7 @@
               pszVec[3] = NULL;       /* Add a NULL to mark the end of the chain */
               nTmp = 0; /* Count from zero until however many sections we have */
               while (nTmp < pRc->m_pList->m_nFiles && ppSectmp[nTmp]) {
  -                /* Conditionally print common and other section notices in verbal mode */
  +                /* Conditionally print config and other section notices in verbal mode */
                   if (configGetval(RC_VRB_VAL)) { /* Verbose mode is active */
                       size_t nSizverb = 0;
                       size_t nPrescr  = 0;
  @@ -329,7 +329,7 @@
   
                       /* Allocate space for entire string to execvp(3) */
                       nPrescr = (strlen(RC_VST_TEXT) + strlen(RC_EXF_TEXT) + \
  -                        strlen(szVerbose) + strlen(szFunc) + strlen(szCom) + \
  +                        strlen(szVerbose) + strlen(szFunc) + strlen(szCnf) + \
                           strlen(RC_BANG_STR) + 1) * sizeof (char);
                       szExec = malloc(nSizverb + nPrescr);
   
  @@ -343,9 +343,9 @@
                       strcat(szExec, szFunc);         /* Continue with the funcs script code */
                       strcat(szExec, RC_ECHO_STR);    /* Continue with the echo string */
                       strcat(szExec, "\"");           /* Append a quote next to the echo */
  -                    strcat(szExec, szVerbose);      /* Continue with the common text */
  +                    strcat(szExec, szVerbose);      /* Continue with the config text */
                       strcat(szExec, "\";");          /* Finalize the verbosity notice */
  -                    strcat(szExec, szCom);          /* Then with the common script code  */
  +                    strcat(szExec, szCnf);          /* Then with the config script code  */
                       szTmp = (char *)sectionGetname(ppSectmp[nTmp]);
                       nSecverb = (strlen(RC_EXN_TEXT) + strlen(szTmp) * 2 \
                           + strlen(RC_ECHO_STR) + strlen("\"\"") + 1) * sizeof (char);
  @@ -387,11 +387,11 @@
                   }
                   else { /* Verbose mode is off */
                       szTmp = (char *)sectionGetdata(ppSectmp[nTmp]);
  -                    szExec = malloc((strlen(szFunc) + strlen(szCom) + \
  +                    szExec = malloc((strlen(szFunc) + strlen(szCnf) + \
                           strlen(szTmp) + 1) * sizeof(char));
                       strcpy(szExec, RC_BANG_STR);     /* Start out with the shebang string */
                       strcat(szExec, szFunc); /* Continue with just the funcs script code   */
  -                    strcat(szExec, szCom);  /* Continue with just the common script code  */
  +                    strcat(szExec, szCnf);  /* Continue with just the config script code  */
                       strcat(szExec, szTmp);  /* And build a section onto the command chain */
                       pszVec[2] = szExec;     /* Actually launch the new process image now  */
   
  @@ -436,7 +436,7 @@
           if (configGetval(RC_VRB_VAL))
               fprintf(stderr, "%s\n", RC_EVF_TEXT);
           scriptDump(pRc->m_pScriptfunc); /* Dump the funcs script */
  -        /* Conditionally print common section notice in verbal mode */
  +        /* Conditionally print config section notice in verbal mode */
           if (configGetval(RC_VRB_VAL)) {
               nBytes = (strlen(RC_EVN_TEXT) + strlen(RC_CFG_TEXT) * 2 + 2) * sizeof (char);
               szVerbose = malloc(nBytes);
  @@ -446,7 +446,7 @@
               free(szVerbose);
               szVerbose = NULL;
           }
  -        scriptDump(pRc->m_pScriptcom);  /* Dump the common script */
  +        scriptDump(pRc->m_pScriptcnf);  /* Dump the config script */
   
           for (nSecs = 0; nSecs < nTotalsecs; nSecs++) {
               for (nRcs = 0; nRcs < pRc->m_pList->m_nFiles; nRcs++) {
  @@ -511,10 +511,10 @@
   {
       int nRcs = pRc->m_pList->m_nFiles;
   
  -    scriptDelete(pRc->m_pScriptcom);    /* Destroy the common script */
  -    pRc->m_pScriptcom = NULL;
  +    scriptDelete(pRc->m_pScriptcnf);    /* Destroy the config script */
  +    pRc->m_pScriptcnf = NULL;
       scriptDelete(pRc->m_pScriptfunc);   /* Destroy the funcs script  */
  -    pRc->m_pScriptcom = NULL;
  +    pRc->m_pScriptfunc = NULL;
   
       /* Destroy the rcfile objects */
       while (nRcs-- > 0)
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jun 27 16:26:15 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DBBB476F98; Fri, 27 Jun 2003 16:26:14 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc.h rc_const.h rc_file.c rc_list.c rc_proc.c...
Message-Id: <20030627142614.DBBB476F98@mail.ossp.org>
Date: Fri, 27 Jun 2003 16:26:14 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   27-Jun-2003 16:26:14
  Branch: HEAD                             Handle: 2003062715261300

  Modified files:
    ossp-pkg/rc             rc.h rc_const.h rc_file.c rc_list.c rc_proc.c
                            rc_sect.c

  Log:
    Implement common section parsing and running on execution mode.

  Summary:
    Revision    Changes     Path
    1.52        +1  -0      ossp-pkg/rc/rc.h
    1.30        +0  -3      ossp-pkg/rc/rc_const.h
    1.3         +3  -1      ossp-pkg/rc/rc_file.c
    1.2         +20 -0      ossp-pkg/rc/rc_list.c
    1.50        +54 -14     ossp-pkg/rc/rc_proc.c
    1.16        +7  -2      ossp-pkg/rc/rc_sect.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc.h
  ============================================================================
  $ cvs diff -u -r1.51 -r1.52 rc.h
  --- ossp-pkg/rc/rc.h	26 Jun 2003 18:45:14 -0000	1.51
  +++ ossp-pkg/rc/rc.h	27 Jun 2003 14:26:13 -0000	1.52
  @@ -102,6 +102,7 @@
   /* List function prototypes */
   rc_list_t *listNew(void);
   rc_return_t listDelete(rc_list_t *);
  +rc_file_t *listGetrcfile(rc_list_t *, const char *);
   rc_return_t listPopulate(rc_list_t *, const char *);
   
   /* Script function prototypes */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_const.h
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 rc_const.h
  --- ossp-pkg/rc/rc_const.h	26 Jun 2003 18:45:14 -0000	1.29
  +++ ossp-pkg/rc/rc_const.h	27 Jun 2003 14:26:13 -0000	1.30
  @@ -47,9 +47,6 @@
   #define RC_PNF_TEXT "# Printing code from functions file."
   #define RC_PRN_TEXT "# Printing section %s of rcfile %s."
   
  -/* Single word user text, should not include termination */
  -#define RC_CFG_TEXT "config"
  -
   /* Option descriptions used with popt, should not include termination */
   #define RC_USE_DESC "Print a short usage summary, then exit."
   #define RC_DBG_DESC "Don't remove temporary files, and write debug messages to stderr."
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_file.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 rc_file.c
  --- ossp-pkg/rc/rc_file.c	26 Jun 2003 18:45:14 -0000	1.2
  +++ ossp-pkg/rc/rc_file.c	27 Jun 2003 14:26:13 -0000	1.3
  @@ -316,6 +316,8 @@
   {
       int nIter = 0;
   
  +    assert(pRcf && szSec);
  +
       /* Return the section if it is found */
       for (nIter = 0; nIter < pRcf->m_nSecs; nIter++) {
           if (!strcmp(pRcf->m_ppSecvec[nIter]->m_szName, szSec))
  @@ -362,7 +364,7 @@
   
       /* Deep copy of section text */
       if (scriptGetdata(pInsec->m_pData))
  -        scriptSetdata(pRcfile->m_ppSecvec[pRcfile->m_nSecs]->m_pData, pInsec->m_pData);
  +        scriptSetdata(pRcfile->m_ppSecvec[pRcfile->m_nSecs]->m_pData, scriptGetdata(pInsec->m_pData));
   
       return(RC_THROW(RC_OK));
   }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_list.c
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 rc_list.c
  --- ossp-pkg/rc/rc_list.c	18 Jun 2003 14:35:29 -0000	1.1
  +++ ossp-pkg/rc/rc_list.c	27 Jun 2003 14:26:13 -0000	1.2
  @@ -138,6 +138,26 @@
   }
   
   /************************************************
  +* listGetrcfile(rc_list_t *, const char *)      *
  +* Searches the rcfile list and returns the file *
  +* matching the given name                       *
  +************************************************/
  +rc_file_t *listGetrcfile(rc_list_t *pInst, const char *kszName)
  +{
  +    int nIter = 0;
  +
  +    assert(pInst && kszName); /* Dummy check */
  +
  +    /* Iterate through list, searching for a rcfile matching the given name */
  +    for (nIter = 0; nIter < pInst->m_nFiles && \
  +        strcmp(pInst->m_ppFilevec[nIter]->m_szName, kszName); nIter++);
  +    if (nIter < pInst->m_nFiles)
  +        return(pInst->m_ppFilevec[nIter]);  /* Name of rcfile in list matched */
  +    else
  +        return(NULL);                       /* Name did not match any rcfile  */
  +}
  +
  +/************************************************
   * listDelete(rc_list_t *)                       *
   * Destruct a rcfile list                        *
   ************************************************/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.49 -r1.50 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	27 Jun 2003 10:15:19 -0000	1.49
  +++ ossp-pkg/rc/rc_proc.c	27 Jun 2003 14:26:13 -0000	1.50
  @@ -205,9 +205,9 @@
           scriptAdd(pFatscript, pRc->m_pScriptfunc);
           /* Conditionally print config section notice in verbal mode */
           if (configGetval(RC_VRB_VAL)) {
  -            nBytes = (strlen(RC_EVN_TEXT) + strlen(RC_CFG_TEXT) * 2 + 2) * sizeof (char);
  +            nBytes = (strlen(RC_EVN_TEXT) + strlen(RC_DEF_NCF) * 2 + 2) * sizeof (char);
               szVerbose = malloc(nBytes);
  -            sprintf(szVerbose, RC_EVN_TEXT, RC_CFG_TEXT, RC_CFG_TEXT);
  +            sprintf(szVerbose, RC_EVN_TEXT, RC_DEF_NCF, RC_DEF_NCF);
               strcat(szVerbose, "\n");
               scriptAppend(pFatscript, szVerbose, strlen(szVerbose));
               free(szVerbose);
  @@ -232,7 +232,7 @@
                       szTmp = (char *)sectionGetname(ppSectmp[nTmp]);
                       nBytes = (strlen(RC_EVN_TEXT) + strlen(szTmp) + 2) * sizeof (char);
                       szVerbose = malloc(nBytes);
  -                    sprintf(szVerbose, RC_EVN_TEXT, szTmp, szTmp);
  +                    sprintf(szVerbose, RC_EVN_TEXT, szTmp, sectionGetparent(ppSectmp[nTmp]));
                       strcat(szVerbose, "\n");
                       scriptAppend(pFatscript, szVerbose, strlen(szVerbose));
                       free(szVerbose);
  @@ -322,10 +322,10 @@
                       size_t nSection = 0;
   
                       /* Allocate space just for string to prepare for verbose */
  -                    nSizverb = (strlen(RC_EXN_TEXT) + strlen(RC_CFG_TEXT) * 2 \
  +                    nSizverb = (strlen(RC_EXN_TEXT) + strlen(RC_DEF_NCF) * 2 \
                           + strlen(RC_ECHO_STR) + strlen("\"\"") + 1) * sizeof (char);
                       szVerbose = malloc(nSizverb);
  -                    sprintf(szVerbose, RC_EXN_TEXT, RC_CFG_TEXT, RC_CFG_TEXT);
  +                    sprintf(szVerbose, RC_EXN_TEXT, RC_DEF_NCF, sectionGetparent(ppSectmp[nTmp]));
   
                       /* Allocate space for entire string to execvp(3) */
                       nPrescr = (strlen(RC_VST_TEXT) + strlen(RC_EXF_TEXT) + \
  @@ -337,8 +337,12 @@
                       strcat(szExec, RC_ECHO_STR);    /* Continue with the echo string */
                       strcat(szExec, "\"");           /* Append a quote next to the echo */
                       strcat(szExec, RC_VST_TEXT);    /* Continue with the start text */
  -                    strcat(szExec, "\n");           /* Stick a newline inbetween */
  -                    strcat(szExec, RC_EXF_TEXT);    /* Continue with the func text */
  +
  +                    if (strlen(szFunc) > 0) {
  +                        strcat(szExec, "\n");        /* Stick a newline inbetween */
  +                        strcat(szExec, RC_EXF_TEXT); /* Continue with the func text */
  +                    }
  +
                       strcat(szExec, "\";");          /* Finalize the verbosity notice */
                       strcat(szExec, szFunc);         /* Continue with the funcs script code */
                       strcat(szExec, RC_ECHO_STR);    /* Continue with the echo string */
  @@ -346,14 +350,39 @@
                       strcat(szExec, szVerbose);      /* Continue with the config text */
                       strcat(szExec, "\";");          /* Finalize the verbosity notice */
                       strcat(szExec, szCnf);          /* Then with the config script code  */
  +
  +                    /* Examine our list, and try to take the corresponding */
  +                    /* common section data from it to add to your script   */
  +                    {
  +                        rc_section_t *pComsec = NULL;
  +                        pComsec = rcfileGetsec(listGetrcfile(pRc->m_pList, \
  +                            ppSectmp[nTmp]->m_szParent), configGetval(RC_CMN_VAL));
  +                        if (pComsec) { /* If we have a common section to load,  */
  +                            szTmp = (char *)sectionGetname(pComsec);
  +                            nSecverb = (strlen(RC_EXN_TEXT) + strlen(szTmp) * 2 \
  +                                + strlen(RC_ECHO_STR) + strlen("\"\"") + 1) * sizeof (char);
  +                            realloc(szVerbose, nSecverb);
  +                            sprintf(szVerbose, RC_EXN_TEXT, szTmp, sectionGetparent(pComsec));
  +                            nSection = (strlen(szTmp) + 1) * sizeof (char);
  +                            realloc(szExec, nSizverb + nPrescr + nSecverb + nSection);
  +                            strcat(szExec, RC_ECHO_STR);    /* Start out with the echo string */
  +                            strcat(szExec, "\"");           /* Append a quote next to the echo */
  +                            strcat(szExec, szVerbose);      /* Continue with the common text */
  +                            strcat(szExec, "\";");          /* Finalize the verbosity notice */
  +                            strcat(szExec, sectionGetdata(pComsec)); /* load it */
  +                        }
  +                    }
  +
  +                    /* Build last set of verbose data for the actual script */
                       szTmp = (char *)sectionGetname(ppSectmp[nTmp]);
                       nSecverb = (strlen(RC_EXN_TEXT) + strlen(szTmp) * 2 \
                           + strlen(RC_ECHO_STR) + strlen("\"\"") + 1) * sizeof (char);
                       realloc(szVerbose, nSecverb);
  -                    sprintf(szVerbose, RC_EXN_TEXT, szTmp, szTmp);
  -                    szTmp = (char *)sectionGetdata(ppSectmp[nTmp]);
  -                    nSection = (strlen(szTmp) + 1) * sizeof (char);
  +                    sprintf(szVerbose, RC_EXN_TEXT, szTmp, sectionGetparent(ppSectmp[nTmp]));
  +                    nSection = (strlen(szTmp) + strlen(sectionGetdata(ppSectmp[nTmp])) + 1) * sizeof (char);
                       realloc(szExec, nSizverb + nPrescr + nSecverb + nSection);
  +
  +                    szTmp = (char *)sectionGetdata(ppSectmp[nTmp]);
                       strcat(szExec, RC_ECHO_STR);    /* Start out with the echo string */
                       strcat(szExec, "\"");           /* Append a quote next to the echo */
                       strcat(szExec, szVerbose);      /* Continue with the verboseity text */
  @@ -392,6 +421,17 @@
                       strcpy(szExec, RC_BANG_STR);     /* Start out with the shebang string */
                       strcat(szExec, szFunc); /* Continue with just the funcs script code   */
                       strcat(szExec, szCnf);  /* Continue with just the config script code  */
  +
  +                    /* Examine our list, and try to take the corresponding */
  +                    /* common section data from it to add to your script   */
  +                    {
  +                        rc_section_t *pComsec = NULL;
  +                        pComsec = rcfileGetsec(listGetrcfile(pRc->m_pList, \
  +                            ppSectmp[nTmp]->m_szParent), configGetval(RC_CMN_VAL));
  +                        if (pComsec)   /* If we have a common section to load,  */
  +                            strcat(szExec, sectionGetdata(pComsec)); /* load it */
  +                    }
  +
                       strcat(szExec, szTmp);  /* And build a section onto the command chain */
                       pszVec[2] = szExec;     /* Actually launch the new process image now  */
   
  @@ -438,9 +478,9 @@
           scriptDump(pRc->m_pScriptfunc); /* Dump the funcs script */
           /* Conditionally print config section notice in verbal mode */
           if (configGetval(RC_VRB_VAL)) {
  -            nBytes = (strlen(RC_EVN_TEXT) + strlen(RC_CFG_TEXT) * 2 + 2) * sizeof (char);
  +            nBytes = (strlen(RC_EVN_TEXT) + strlen(RC_DEF_NCF) * 2 + 2) * sizeof (char);
               szVerbose = malloc(nBytes);
  -            sprintf(szVerbose, RC_EVN_TEXT, RC_CFG_TEXT, RC_CFG_TEXT);
  +            sprintf(szVerbose, RC_EVN_TEXT, RC_DEF_NCF, RC_DEF_NCF);
               strcat(szVerbose, "\n");
               fprintf(stderr, szVerbose);
               free(szVerbose);
  @@ -465,7 +505,7 @@
                       szTmp = (char *)sectionGetname(ppSectmp[nTmp]);
                       nBytes = (strlen(RC_PRN_TEXT) + strlen(szTmp) + 1) * sizeof (char);
                       szVerbose = malloc(nBytes);
  -                    sprintf(szVerbose, RC_PRN_TEXT, szTmp, szTmp);
  +                    sprintf(szVerbose, RC_PRN_TEXT, szTmp, sectionGetparent(ppSectmp[nTmp]));
                       fprintf(stderr, "%s", szVerbose);
                       free(szVerbose);
                       szVerbose = NULL;
  @@ -479,7 +519,7 @@
       else if (configGetval(RC_PAR_VAL)) {                    /* Parse names */
           /* Allocate a block of section pointers to use as a temporary */
           ppSectmp = calloc(pRc->m_pList->m_nFiles, sizeof(rc_section_t *));
  -        fprintf(stderr, "file %s, section %s\n", pRc->m_pList->m_ppFilevec[nRcs]->m_szName, RC_CFG_TEXT);
  +        fprintf(stderr, "file %s, section %s\n", pRc->m_pList->m_ppFilevec[nRcs]->m_szName, RC_DEF_NCF);
           for (nSecs = 0; nSecs < nTotalsecs; nSecs++) {
               for (nRcs = 0; nRcs < pRc->m_pList->m_nFiles; nRcs++) {
                   for (nTmp = 0; nTmp < pRc->m_pList->m_ppFilevec[nRcs]->m_nSecs && \
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_sect.c
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 rc_sect.c
  --- ossp-pkg/rc/rc_sect.c	26 Jun 2003 18:45:14 -0000	1.15
  +++ ossp-pkg/rc/rc_sect.c	27 Jun 2003 14:26:13 -0000	1.16
  @@ -161,8 +161,13 @@
   
   const char *sectionGetdata(rc_section_t *pSec)
   { /* Data of section, this is the script body of the particular section */
  -    if (pSec && scriptGetdata(pSec->m_pData))
  -        return(scriptGetdata(pSec->m_pData));
  +    char *szScriptdata = NULL;
  +
  +    if (pSec && (szScriptdata = scriptGetdata(pSec->m_pData)))
  +        if (strlen(szScriptdata) > 0)
  +            return(szScriptdata);
  +        else
  +            return NULL;
       else
           RC_THROW(RC_ERR_USE);
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jun 28 15:08:15 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4527B76F93; Sat, 28 Jun 2003 15:08:15 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20030628130815.4527B76F93@mail.ossp.org>
Date: Sat, 28 Jun 2003 15:08:15 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   28-Jun-2003 15:08:15
  Branch: HEAD                             Handle: 2003062814081301

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/sio    index.wml

  Log:
    OSSP sio 0.9.1 was released recently

  Summary:
    Revision    Changes     Path
    1.61        +1  -0      ossp-web/new/news.txt
    1.57        +1  -1      ossp-web/pkg/lib/index.wml
    1.7         +2  -2      ossp-web/pkg/lib/sio/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.60 -r1.61 news.txt
  --- ossp-web/new/news.txt	22 May 2003 14:29:27 -0000	1.60
  +++ ossp-web/new/news.txt	28 Jun 2003 13:08:13 -0000	1.61
  @@ -1,3 +1,4 @@
  +17-Jun-2003: Released L<OSSP sio> 0.9.1
   22-May-2003: Released L<OSSP fsl> 1.1.0
   07-Mar-2003: Released L<OSSP mm> 1.3.0
   17-Feb-2003: Released L<GNU pth> 2.0.0
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.56 -r1.57 index.wml
  --- ossp-web/pkg/lib/index.wml	22 May 2003 14:29:28 -0000	1.56
  +++ ossp-web/pkg/lib/index.wml	28 Jun 2003 13:08:14 -0000	1.57
  @@ -48,7 +48,7 @@
   			done=95 stable=none unstable=0.9.1>
     <pkg_item name="sio" longname="OSSP sio" type="lib"
               desc="Stream I/O"
  -			done=95 stable=none unstable=0.9.0>
  +			done=95 stable=none unstable=0.9.1>
     <pkg_item name="cfg" longname="OSSP cfg" type="lib"
               desc="Configuration Parsing"
   			done=95 stable=none unstable=0.9.0>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/sio/index.wml
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 index.wml
  --- ossp-web/pkg/lib/sio/index.wml	6 Feb 2003 14:40:53 -0000	1.6
  +++ ossp-web/pkg/lib/sio/index.wml	28 Jun 2003 13:08:14 -0000	1.7
  @@ -26,7 +26,7 @@
   <pkg_status
       name="sio" assign="mlelstv"
       stable="none" stable_date="none"
  -    unstable="0.9.0" unstable_date="06-Feb-2003"
  +    unstable="0.9.1" unstable_date="17-Jun-2003"
   	done=95>
   
   <h2>Source</h2>
  @@ -36,7 +36,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/sio/
       directory=$(FTP_ROOT_DIR)/pkg/lib/sio/
       files="sio-*.tar.gz" 
  -	stable="sio-0\.9\.0\.tar\.gz" unstable="sio-SNAP.*\.tar.gz">
  +	stable="sio-0\.9\.1\.tar\.gz" unstable="sio-SNAP.*\.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jun 30 12:36:54 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4F31C76F87; Mon, 30 Jun 2003 12:36:54 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/al/ devtool.conf ossp-pkg/sa/ devtool.conf ossp-p...
Message-Id: <20030630103654.4F31C76F87@mail.ossp.org>
Date: Mon, 30 Jun 2003 12:36:54 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Jun-2003 12:36:54
  Branch: HEAD                             Handle: 2003063011365201

  Modified files:
    ossp-pkg/al             devtool.conf
    ossp-pkg/sa             devtool.conf
    ossp-pkg/sio            ChangeLog README VERSION devtool.conf sio.ac
                            sio_bio.c sio_sa.c sio_sio.c sio_test.c sio_zlib.c

  Log:
    *) Correctly check the "status" return value of waitpid(3)
       in the test suite.
    
    *) Change in the test suite "%08lx" format string to "%d" because the
       ts library only has a minimal formatting engine and the argument
       is "int" and not "long" anyway.
    
    *) Make sure that sio_{bio,sa,zlib}.c are not empty compilation
       units (not allowed in ISO C) even if BIO, SA or ZLIB support is not
       activated.
    
    *) Changed SIZE_T_MAX fallback definition to a more portable variant
       based on sizeof(size_t) instead of relying on the existance of
       (non portable) UINT_MAX.
    
    *) Added GNU autoconf checks for libnsl/libsocket under Solaris.
    
    *) Upgraded to GNU libtool 1.5

  Summary:
    Revision    Changes     Path
    1.7         +1  -1      ossp-pkg/al/devtool.conf
    1.18        +1  -1      ossp-pkg/sa/devtool.conf
    1.4         +36 -1      ossp-pkg/sio/ChangeLog
    1.4         +1  -1      ossp-pkg/sio/README
    1.3         +1  -1      ossp-pkg/sio/VERSION
    1.7         +1  -1      ossp-pkg/sio/devtool.conf
    1.4         +6  -0      ossp-pkg/sio/sio.ac
    1.13        +5  -0      ossp-pkg/sio/sio_bio.c
    1.10        +4  -0      ossp-pkg/sio/sio_sa.c
    1.5         +4  -3      ossp-pkg/sio/sio_sio.c
    1.19        +22 -6      ossp-pkg/sio/sio_test.c
    1.9         +4  -0      ossp-pkg/sio/sio_zlib.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/al/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 devtool.conf
  --- ossp-pkg/al/devtool.conf	6 Jan 2003 13:49:25 -0000	1.6
  +++ ossp-pkg/al/devtool.conf	30 Jun 2003 10:36:53 -0000	1.7
  @@ -4,7 +4,7 @@
   
   %autogen
       @autogen shtool   1.6.2 "1.6.*" all
  -    @autogen libtool  1.4.3 "1.4*"
  +    @autogen libtool  1.5   "1.5*"
       @autogen autoconf 2.57  "2.5[3-9]*"
   
   %autoclean
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 devtool.conf
  --- ossp-pkg/sa/devtool.conf	6 Jan 2003 13:11:23 -0000	1.17
  +++ ossp-pkg/sa/devtool.conf	30 Jun 2003 10:36:53 -0000	1.18
  @@ -4,7 +4,7 @@
   
   %autogen
       @autogen shtool   1.6.2 "1.6.*" all
  -    @autogen libtool  1.4.3 "1.4*"
  +    @autogen libtool  1.5   "1.5*"
       @autogen autoconf 2.57  "2.5[3-9]*"
   
   %autoclean
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ChangeLog
  --- ossp-pkg/sio/ChangeLog	6 Feb 2003 14:45:37 -0000	1.3
  +++ ossp-pkg/sio/ChangeLog	30 Jun 2003 10:36:52 -0000	1.4
  @@ -11,5 +11,40 @@
     This is a list of all changes to OSSP sio.
     For a more brief summary please have a look at the NEWS file.
   
  -  Initial release 0.9.0 (06-Feb-2003)
  +  Changes between 0.9.1 and 0.9.2 (17-Jun-2003 to 30-Jun-2003)
  +
  +   *) Correctly check the "status" return value of waitpid(3)
  +      in the test suite.
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +   *) Change in the test suite "%08lx" format string to "%d" because the
  +      ts library only has a minimal formatting engine and the argument
  +      is "int" and not "long" anyway.
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +   *) Make sure that sio_{bio,sa,zlib}.c are not empty compilation
  +      units (not allowed in ISO C) even if BIO, SA or ZLIB support is not
  +      activated.
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +   *) Changed SIZE_T_MAX fallback definition to a more portable variant
  +      based on sizeof(size_t) instead of relying on the existance of
  +      (non portable) UINT_MAX.
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +   *) Added GNU autoconf checks for libnsl/libsocket under Solaris.
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +   *) Upgraded to GNU libtool 1.5
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +  Changes between 0.9.0 and 0.9.1 (06-Feb-2003 to 17-Jun-2003)
  +
  +   *) Support systems that do not define SIZE_T_MAX
  +      [Michael van Elst <mlelstv@dev.de.cw.net>]
  +
  +  Changes between *GENESIS* and 0.9.0 (06-Feb-2003)
  +    
  +   *) Initial Release
  +      [Michael van Elst <mlelstv@dev.de.cw.net>]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/README
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 README
  --- ossp-pkg/sio/README	6 Feb 2003 13:20:42 -0000	1.3
  +++ ossp-pkg/sio/README	30 Jun 2003 10:36:52 -0000	1.4
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/_|\___/
   
     OSSP sio - Stream I/O
  -  Version 0.9.0 (06-Feb-2003)
  +  Version 0.9.2 (30-Jun-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/VERSION
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 VERSION
  --- ossp-pkg/sio/VERSION	6 Feb 2003 13:44:35 -0000	1.2
  +++ ossp-pkg/sio/VERSION	30 Jun 2003 10:36:52 -0000	1.3
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP sio (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP sio, Version 0.9.0 (06-Feb-2003)
  +  This is OSSP sio, Version 0.9.2 (30-Jun-2003)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 devtool.conf
  --- ossp-pkg/sio/devtool.conf	6 Feb 2003 14:36:19 -0000	1.6
  +++ ossp-pkg/sio/devtool.conf	30 Jun 2003 10:36:52 -0000	1.7
  @@ -11,7 +11,7 @@
   
   %autogen
       @autogen shtool   1.6.2 "1.6.*" all
  -    @autogen libtool  1.4.3 "1.4*"
  +    @autogen libtool  1.5   "1.5*"
       @autogen autoconf 2.57  "2.5[3-9]*"
   
       for name in al sa; do
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio.ac
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 sio.ac
  --- ossp-pkg/sio/sio.ac	6 Feb 2003 14:21:38 -0000	1.3
  +++ ossp-pkg/sio/sio.ac	30 Jun 2003 10:36:52 -0000	1.4
  @@ -35,6 +35,12 @@
   dnl #     SIO_CHECK_ALL
   
   AC_DEFUN(SIO_CHECK_ALL,[
  +dnl #   make sure libnsl and libsocket are linked in if they exist
  +AC_CHECK_LIB(nsl, gethostname)
  +if test ".`echo $LIBS | grep nsl`" = .; then
  +    AC_CHECK_LIB(nsl, gethostbyname)
  +fi
  +AC_CHECK_LIB(socket, accept)
   
   dnl #   built-time configuration parameter --enable-bio
   AC_MSG_CHECKING(for BIO support)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_bio.c
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 sio_bio.c
  --- ossp-pkg/sio/sio_bio.c	6 Feb 2003 12:45:18 -0000	1.12
  +++ ossp-pkg/sio/sio_bio.c	30 Jun 2003 10:36:52 -0000	1.13
  @@ -641,4 +641,9 @@
       siobio_shutdown
   };
   
  +#else
  +
  +const char __sio_bio_c[] = "";
  +
   #endif /* ENABLE_BIO */
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_sa.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 sio_sa.c
  --- ossp-pkg/sio/sio_sa.c	9 Feb 2003 21:39:17 -0000	1.9
  +++ ossp-pkg/sio/sio_sa.c	30 Jun 2003 10:36:52 -0000	1.10
  @@ -261,4 +261,8 @@
       NULL
   };
   
  +#else
  +
  +const char __sio_sa_c[] = "";
  +
   #endif /* ENABLE_SA */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_sio.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 sio_sio.c
  --- ossp-pkg/sio/sio_sio.c	17 Jun 2003 14:01:23 -0000	1.4
  +++ ossp-pkg/sio/sio_sio.c	30 Jun 2003 10:36:52 -0000	1.5
  @@ -32,12 +32,13 @@
   #include <stdlib.h>
   #include <string.h>
   #include <limits.h>
  -#ifndef SIZE_T_MAX
  -#define SIZE_T_MAX UINT_MAX
  -#endif
   
   #include "al.h"
   #include "sio.h"
  +
  +#ifndef SIZE_T_MAX
  +#define SIZE_T_MAX (((((size_t)1 << ((sizeof(size_t) * 8) - 1)) - 1) << 1) + 1)
  +#endif
   
   typedef struct {
       sio_t      *upstream;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_test.c
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 sio_test.c
  --- ossp-pkg/sio/sio_test.c	11 Feb 2003 10:54:07 -0000	1.18
  +++ ossp-pkg/sio/sio_test.c	30 Jun 2003 10:36:52 -0000	1.19
  @@ -153,9 +153,17 @@
           (*client)(_t, pd[0], wcount);
           close(pd[0]);
           waitpid(child, &status, 0);
  -        if (status != 0) {
  -            ts_test_fail(TS_CTX, "child returned status %08lx\n",
  -                status);
  +        if (WIFEXITED(status) && WEXITSTATUS(status) != 0) {
  +            ts_test_fail(TS_CTX, "child terminated through exit with return code %d\n",
  +                WEXITSTATUS(status));
  +        }
  +        else if (WIFSIGNALED(status)) {
  +            ts_test_fail(TS_CTX, "child terminated through signal %d%s\n",
  +                WTERMSIG(status), WCOREDUMP(status) ? " (core dump written)" : "");
  +        }
  +        else if (WIFSTOPPED(status)) {
  +            ts_test_fail(TS_CTX, "child stopped through signal %d%s\n",
  +                WSTOPSIG(status));
           }
       }
   }
  @@ -1137,9 +1145,17 @@
           test_sio_sa_read(_t, sa_client, wcount);
           rc = sa_shutdown(sa_server, "r");
           waitpid(child, &status, 0);
  -        if (status != 0) {
  -            ts_test_fail(TS_CTX, "child returned status %08lx\n",
  -                status);
  +        if (WIFEXITED(status) && WEXITSTATUS(status) != 0) {
  +            ts_test_fail(TS_CTX, "child terminated through exit with return code %d\n",
  +                WEXITSTATUS(status));
  +        }
  +        else if (WIFSIGNALED(status)) {
  +            ts_test_fail(TS_CTX, "child terminated through signal %d%s\n",
  +                WTERMSIG(status), WCOREDUMP(status) ? " (core dump written)" : "");
  +        }
  +        else if (WIFSTOPPED(status)) {
  +            ts_test_fail(TS_CTX, "child stopped through signal %d%s\n",
  +                WSTOPSIG(status));
           }
       }
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_zlib.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 sio_zlib.c
  --- ossp-pkg/sio/sio_zlib.c	3 Feb 2003 17:18:46 -0000	1.8
  +++ ossp-pkg/sio/sio_zlib.c	30 Jun 2003 10:36:52 -0000	1.9
  @@ -378,4 +378,8 @@
       NULL
   };
   
  +#else
  +
  +const char __sio_zlib_c[] = "";
  +
   #endif /* ENABLE_ZLIB */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jun 30 13:04:35 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E36A176F87; Mon, 30 Jun 2003 13:04:34 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20030630110434.E36A176F87@mail.ossp.org>
Date: Mon, 30 Jun 2003 13:04:34 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   30-Jun-2003 13:04:34
  Branch: HEAD                             Handle: 2003063012043301

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/sio    index.wml

  Log:
    release OSSP sio 0.9.2

  Summary:
    Revision    Changes     Path
    1.62        +1  -0      ossp-web/new/news.txt
    1.58        +1  -1      ossp-web/pkg/lib/index.wml
    1.8         +2  -2      ossp-web/pkg/lib/sio/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.61 -r1.62 news.txt
  --- ossp-web/new/news.txt	28 Jun 2003 13:08:13 -0000	1.61
  +++ ossp-web/new/news.txt	30 Jun 2003 11:04:33 -0000	1.62
  @@ -1,3 +1,4 @@
  +30-Jun-2003: Released L<OSSP sio> 0.9.2
   17-Jun-2003: Released L<OSSP sio> 0.9.1
   22-May-2003: Released L<OSSP fsl> 1.1.0
   07-Mar-2003: Released L<OSSP mm> 1.3.0
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.57 -r1.58 index.wml
  --- ossp-web/pkg/lib/index.wml	28 Jun 2003 13:08:14 -0000	1.57
  +++ ossp-web/pkg/lib/index.wml	30 Jun 2003 11:04:33 -0000	1.58
  @@ -48,7 +48,7 @@
   			done=95 stable=none unstable=0.9.1>
     <pkg_item name="sio" longname="OSSP sio" type="lib"
               desc="Stream I/O"
  -			done=95 stable=none unstable=0.9.1>
  +			done=95 stable=none unstable=0.9.2>
     <pkg_item name="cfg" longname="OSSP cfg" type="lib"
               desc="Configuration Parsing"
   			done=95 stable=none unstable=0.9.0>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/sio/index.wml
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 index.wml
  --- ossp-web/pkg/lib/sio/index.wml	28 Jun 2003 13:08:14 -0000	1.7
  +++ ossp-web/pkg/lib/sio/index.wml	30 Jun 2003 11:04:34 -0000	1.8
  @@ -26,7 +26,7 @@
   <pkg_status
       name="sio" assign="mlelstv"
       stable="none" stable_date="none"
  -    unstable="0.9.1" unstable_date="17-Jun-2003"
  +    unstable="0.9.2" unstable_date="30-Jun-2003"
   	done=95>
   
   <h2>Source</h2>
  @@ -36,7 +36,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/sio/
       directory=$(FTP_ROOT_DIR)/pkg/lib/sio/
       files="sio-*.tar.gz" 
  -	stable="sio-0\.9\.1\.tar\.gz" unstable="sio-SNAP.*\.tar.gz">
  +	stable="sio-0\.9\.2\.tar\.gz" unstable="sio-SNAP.*\.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jun 30 13:13:10 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9E6B576F87; Mon, 30 Jun 2003 13:13:09 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ fsl.pod ossp-pkg/l2/ l2.pod l2_ch_file.c l2_...
Message-Id: <20030630111309.9E6B576F87@mail.ossp.org>
Date: Mon, 30 Jun 2003 13:13:09 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   30-Jun-2003 13:13:09
  Branch: HEAD                             Handle: 2003063012130801

  Modified files:
    ossp-pkg/fsl            fsl.pod
    ossp-pkg/l2             l2.pod l2_ch_file.c l2_test.c

  Log:
    introduce "trunc=" option for file channel; change default to append;
    keep support for obsolete "append" option

  Summary:
    Revision    Changes     Path
    1.30        +9  -7      ossp-pkg/fsl/fsl.pod
    1.15        +1  -1      ossp-pkg/l2/l2.pod
    1.26        +36 -6      ossp-pkg/l2/l2_ch_file.c
    1.54        +2  -2      ossp-pkg/l2/l2_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl.pod
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 fsl.pod
  --- ossp-pkg/fsl/fsl.pod	22 May 2003 14:01:55 -0000	1.29
  +++ ossp-pkg/fsl/fsl.pod	30 Jun 2003 11:13:08 -0000	1.30
  @@ -202,11 +202,17 @@
   The B<file> channel opens a file at the given I<path> and passes
   messages poured in from upper channels to this file. If the file at
   the given path already exists, additional data is either appended
  -(I<append>=1) or the existing file is truncated (I<append>=0). The
  -desired permissions of the file can be set.
  +(I<append>=1 or I<trunc>=0>) or the existing file is truncated
  +(I<append>=0 or I<trunc>=1>). The desired permissions of the file can be
  +set.  Both append and trunc work equally well but append is obsolete and
  +might be removed in the future.  Both options can be specified together
  +as long as they are set different. L2 versions which know the trunc
  +option default to append mode while previous versions only having the
  +append option defaulted to truncate mode.
   
    o file   (STR path            m
  -           INT append          o [0=truncate|1=append] =1
  +           INT append          o [0=no|1=yes]          =1
  +           INT trunc           o [0=no|1=yes]          =0
              INT perm            o [octal]               =0644
              )
   
  @@ -449,17 +455,14 @@
        -> {
            critical: file(
                path="@l_prefix@/var/inn/log/news.crit",
  -             append=1,
                perm=0644
            );
            error: file(
                path="@l_prefix@/var/inn/log/news.err",
  -             append=1,
                perm=0644
            );
            notice: file(
                path="@l_prefix@/var/inn/log/news.notice",
  -             append=1,
                perm=0644
            )
        }
  @@ -474,7 +477,6 @@
        ) ->
        file(
            path="@l_prefix@/var/fsl/default.log",
  -         append=1,
            perm=0644
        )
    };
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2.pod
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 l2.pod
  --- ossp-pkg/l2/l2.pod	6 Jan 2003 11:41:51 -0000	1.14
  +++ ossp-pkg/l2/l2.pod	30 Jun 2003 11:13:08 -0000	1.15
  @@ -118,7 +118,7 @@
    noop -> {
      debug: prefix(prefix="[%d-%m-%Y/%H:%M:%S] ")
         -> buffer(size=16384)
  -         -> file(path=foo.log, append=1);
  +         -> file(path=foo.log, trunc=0);
      error: syslog(ident=foo, facility=user,
                    remotehost=syslog.example.com,
                    target=remote);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_file.c
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 l2_ch_file.c
  --- ossp-pkg/l2/l2_ch_file.c	6 Jan 2003 11:41:51 -0000	1.25
  +++ ossp-pkg/l2/l2_ch_file.c	30 Jun 2003 11:13:08 -0000	1.26
  @@ -39,6 +39,7 @@
       int   fd;
       char *path;
       int   append;
  +    int   trunc;
       int   perm;
   } l2_ch_file_t;
   
  @@ -54,7 +55,8 @@
       /* initialize configuration with reasonable defaults */
       cfg->fd     = -1;
       cfg->path   = NULL;
  -    cfg->append = TRUE;
  +    cfg->append = -1;
  +    cfg->trunc  = -1;
       cfg->perm   = (S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
   
       /* link private channel configuration into channel context */
  @@ -74,11 +76,13 @@
       /* feed and call generic parameter parsing engine */
       L2_PARAM_SET(pa[0], path,   STR, &cfg->path);
       L2_PARAM_SET(pa[1], append, INT, &cfg->append);
  -    L2_PARAM_SET(pa[2], perm,   INT, &cfg->perm);
  -    L2_PARAM_END(pa[3]);
  +    L2_PARAM_SET(pa[2], trunc,  INT, &cfg->trunc);
  +    L2_PARAM_SET(pa[3], perm,   INT, &cfg->perm);
  +    L2_PARAM_END(pa[4]);
       l2_channel_env(ch, &env);
       rv = l2_util_setparams(env, pa, fmt, ap);
   
  +
       return rv;
   }
   
  @@ -89,16 +93,42 @@
       int mode;
       mode_t mask;
   
  +    /* "append" backward compatibility; only cfg->trunc is used in the code
  +     * make sure append/trunc either both use defaults, both are set different, or only one is set
  +     *
  +     * truth table for user input,       append, trunc => resulting trunc
  +     *                 -----------------+------+------+------------------
  +     *                                       -1     -1      0 (default)
  +     *                 trunc=0               -1      0      0 
  +     *                 trunc=1               -1      1      1 
  +     *                 append=0               0     -1      1 
  +     *                 append=0, trunc=0      0      0      ERROR
  +     *                 append=0, trunc=1      0      1      1 
  +     *                 append=1               1     -1      0 
  +     *                 append=1, trunc=0      1      0      0 
  +     *                 append=1, trunc=1      1      1      ERROR
  +     */
  +    if (cfg->append >= 1)
  +        cfg->append = 1; /* reduce to -1 (undef), 0 (no), 1 (yes) */
  +    if (cfg->trunc >= 1)
  +        cfg->trunc = 1; /* reduce to -1 (undef), 0 (no), 1 (yes) */
  +    if (   cfg->append != -1
  +        && cfg->trunc != -1
  +        && cfg->append == cfg->trunc) /* collision */
  +        return L2_ERR_USE;
  +    if (   cfg->trunc == -1)
  +        cfg->trunc = (1 - cfg->append) & 1;
  +
       /* make sure a path was set */
       if (cfg->path == NULL)
           return L2_ERR_USE;
   
       /* open channel file */
       mode = O_WRONLY|O_CREAT;
  -    if (cfg->append)
  -        mode |= O_APPEND;
  -    else
  +    if (cfg->trunc == 1)
           mode |= O_TRUNC;
  +    else
  +        mode |= O_APPEND;
       mask = umask(0);
       cfg->fd = open(cfg->path, mode, cfg->perm);
       umask(mask);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_test.c
  ============================================================================
  $ cvs diff -u -r1.53 -r1.54 l2_test.c
  --- ossp-pkg/l2/l2_test.c	11 Feb 2003 07:51:28 -0000	1.53
  +++ ossp-pkg/l2/l2_test.c	30 Jun 2003 11:13:09 -0000	1.54
  @@ -89,7 +89,7 @@
              "  filter(regex=hecking, negate=0)"
              "  -> prefix(prefix=\"[%d-%m-%Y/%H:%M:%S] %L test[%P]: \", timezone=local)"
              "     -> buffer(size=800)"
  -           "        -> file(path=l2_test.log, append=1, perm=0644) ;"
  +           "        -> file(path=l2_test.log, trunc=0, perm=0644) ;"
   /*
              "  syslog(ident=L2-Test, facility=user, "
              "         remotehost=localhost, logpid=1, target=remote)"
  @@ -124,7 +124,7 @@
       /* create file channel */
       if ((rv = l2_channel_create(&chFile, env, "file")) != L2_OK)
           die(env, rv, "failed to create file channel");
  -    if ((rv = l2_channel_configure(chFile, "path=l2_test.log, append=%d,perm=%d", TRUE, 0644)) != L2_OK)
  +    if ((rv = l2_channel_configure(chFile, "path=l2_test.log, trunc=%d,perm=%d", 0, 0644)) != L2_OK)
           die(env, rv, "failed to configure file channel");
       if ((rv = l2_channel_levels(chFile, L2_LEVEL_UPTO(L2_LEVEL_INFO), L2_LEVEL_NONE)) != L2_OK)
           die(env, rv, "failed to level of smtp channel");
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jun 30 14:38:18 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 08E2776F8C; Mon, 30 Jun 2003 14:38:17 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ l2_ch_fd.c l2_ch_file.c
Message-Id: <20030630123817.08E2776F8C@mail.ossp.org>
Date: Mon, 30 Jun 2003 14:38:17 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   30-Jun-2003 14:38:17
  Branch: HEAD                             Handle: 2003063013381700

  Modified files:
    ossp-pkg/l2             l2_ch_fd.c l2_ch_file.c

  Log:
    fix array too small by one element bug

  Summary:
    Revision    Changes     Path
    1.17        +1  -1      ossp-pkg/l2/l2_ch_fd.c
    1.27        +1  -1      ossp-pkg/l2/l2_ch_file.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_fd.c
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 l2_ch_fd.c
  --- ossp-pkg/l2/l2_ch_fd.c	6 Jan 2003 11:41:51 -0000	1.16
  +++ ossp-pkg/l2/l2_ch_fd.c	30 Jun 2003 12:38:17 -0000	1.17
  @@ -58,7 +58,7 @@
   static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
       l2_ch_fd_t *cfg;
  -    l2_param_t pa[1];
  +    l2_param_t pa[2];
       l2_result_t rv;
       l2_env_t *env;
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_file.c
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 l2_ch_file.c
  --- ossp-pkg/l2/l2_ch_file.c	30 Jun 2003 11:13:08 -0000	1.26
  +++ ossp-pkg/l2/l2_ch_file.c	30 Jun 2003 12:38:17 -0000	1.27
  @@ -69,7 +69,7 @@
   static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
       l2_ch_file_t *cfg = (l2_ch_file_t *)ctx->vp;
  -    l2_param_t pa[4];
  +    l2_param_t pa[5];
       l2_result_t rv;
       l2_env_t *env;
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jun 30 14:54:07 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0E5B276F9B; Mon, 30 Jun 2003 14:54:06 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ fsl.pod ossp-pkg/l2/ l2_ch_file.c
Message-Id: <20030630125406.0E5B276F9B@mail.ossp.org>
Date: Mon, 30 Jun 2003 14:54:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   30-Jun-2003 14:54:06
  Branch: HEAD                             Handle: 2003063013540501

  Modified files:
    ossp-pkg/fsl            fsl.pod
    ossp-pkg/l2             l2_ch_file.c

  Log:
    add jitter option to file channel

  Summary:
    Revision    Changes     Path
    1.31        +11 -6      ossp-pkg/fsl/fsl.pod
    1.28        +42 -5      ossp-pkg/l2/l2_ch_file.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl.pod
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 fsl.pod
  --- ossp-pkg/fsl/fsl.pod	30 Jun 2003 11:13:08 -0000	1.30
  +++ ossp-pkg/fsl/fsl.pod	30 Jun 2003 12:54:05 -0000	1.31
  @@ -203,16 +203,21 @@
   messages poured in from upper channels to this file. If the file at
   the given path already exists, additional data is either appended
   (I<append>=1 or I<trunc>=0>) or the existing file is truncated
  -(I<append>=0 or I<trunc>=1>). The desired permissions of the file can be
  -set.  Both append and trunc work equally well but append is obsolete and
  -might be removed in the future.  Both options can be specified together
  -as long as they are set different. L2 versions which know the trunc
  -option default to append mode while previous versions only having the
  -append option defaulted to truncate mode.
  +(I<append>=0 or I<trunc>=1>). If I<jitter> is set the logfile will be
  +opened and closed for every write operation. This makes log file
  +rotation easy at the price of performance. The desired permissions of
  +the logfile can be set through I<perm>.
  +
  +Note that both append and trunc work equally well but append is obsolete
  +and might be removed in the future.  Both options can be specified
  +together as long as they are set different. L2 versions which know the
  +trunc option default to append mode while previous versions limited to
  +support only the append option defaulted to truncate mode.
   
    o file   (STR path            m
              INT append          o [0=no|1=yes]          =1
              INT trunc           o [0=no|1=yes]          =0
  +           INT jitter          o [0=no|1=yes]          =0
              INT perm            o [octal]               =0644
              )
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_file.c
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 l2_ch_file.c
  --- ossp-pkg/l2/l2_ch_file.c	30 Jun 2003 12:38:17 -0000	1.27
  +++ ossp-pkg/l2/l2_ch_file.c	30 Jun 2003 12:54:06 -0000	1.28
  @@ -41,6 +41,7 @@
       int   append;
       int   trunc;
       int   perm;
  +    int   jitter;
   } l2_ch_file_t;
   
   /* create channel */
  @@ -58,6 +59,7 @@
       cfg->append = -1;
       cfg->trunc  = -1;
       cfg->perm   = (S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
  +    cfg->jitter = 0;
   
       /* link private channel configuration into channel context */
       ctx->vp = cfg;
  @@ -69,7 +71,7 @@
   static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
       l2_ch_file_t *cfg = (l2_ch_file_t *)ctx->vp;
  -    l2_param_t pa[5];
  +    l2_param_t pa[6];
       l2_result_t rv;
       l2_env_t *env;
   
  @@ -78,11 +80,11 @@
       L2_PARAM_SET(pa[1], append, INT, &cfg->append);
       L2_PARAM_SET(pa[2], trunc,  INT, &cfg->trunc);
       L2_PARAM_SET(pa[3], perm,   INT, &cfg->perm);
  -    L2_PARAM_END(pa[4]);
  +    L2_PARAM_SET(pa[4], jitter, INT, &cfg->jitter);
  +    L2_PARAM_END(pa[5]);
       l2_channel_env(ch, &env);
       rv = l2_util_setparams(env, pa, fmt, ap);
   
  -
       return rv;
   }
   
  @@ -119,6 +121,12 @@
       if (   cfg->trunc == -1)
           cfg->trunc = (1 - cfg->append) & 1;
   
  +    /* reduce jitter to 0 (no) or 1 (yes) */
  +    if (cfg->jitter <= 0)
  +        cfg->jitter = 0;
  +    if (cfg->jitter >= 1)
  +        cfg->jitter = 1;
  +
       /* make sure a path was set */
       if (cfg->path == NULL)
           return L2_ERR_USE;
  @@ -135,6 +143,12 @@
       if (cfg->fd == -1)
           return L2_ERR_SYS;
   
  +    /* close channel file if jittering, we just wanted to see a successful open and truncate if required */
  +    if (cfg->jitter == 1) {
  +        close(cfg->fd);
  +        cfg->fd = -1;
  +    }
  +
       return L2_OK;
   }
   
  @@ -143,12 +157,35 @@
                                 l2_level_t level, const char *buf, size_t buf_size)
   {
       l2_ch_file_t *cfg = (l2_ch_file_t *)ctx->vp;
  +    l2_result_t rc = L2_OK;
  +    mode_t mask;
  +
  +    /* handle the impossible; close any lingering file if jittering */
  +    if (cfg->fd != -1 && cfg->jitter == 1) {
  +        close(cfg->fd);
  +        cfg->fd = -1;
  +    }
  +
  +    /* open channel file if jittering */
  +    if (cfg->fd == -1 && cfg->jitter == 1) {
  +        mask = umask(0);
  +        cfg->fd = open(cfg->path, O_WRONLY|O_CREAT|O_APPEND, cfg->perm);
  +        umask(mask);
  +    }
  +    if (cfg->fd == -1)
  +        return L2_ERR_SYS;
   
       /* write message to channel file */
       if (write(cfg->fd, buf, buf_size) == -1)
  -        return L2_ERR_SYS;
  +        rc = L2_ERR_SYS;
   
  -    return L2_OK;
  +    /* close channel file if jittering */
  +    if (cfg->jitter == 1) {
  +        close(cfg->fd);
  +        cfg->fd = -1;
  +    }
  +
  +    return rc;
   }
   
   /* close channel */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jun 30 16:15:47 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 59DB176F9F; Mon, 30 Jun 2003 16:15:47 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ devtool.conf
Message-Id: <20030630141547.59DB176F9F@mail.ossp.org>
Date: Mon, 30 Jun 2003 16:15:47 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   30-Jun-2003 16:15:47
  Branch: HEAD                             Handle: 2003063015154600

  Modified files:
    ossp-pkg/l2             devtool.conf

  Log:
    tag/commit when releasing

  Summary:
    Revision    Changes     Path
    1.11        +2  -0      ossp-pkg/l2/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 devtool.conf
  --- ossp-pkg/l2/devtool.conf	6 Jan 2003 11:41:51 -0000	1.10
  +++ ossp-pkg/l2/devtool.conf	30 Jun 2003 14:15:46 -0000	1.11
  @@ -48,6 +48,7 @@
   
   %release
       ./devtool version
  +    ./devtool tag
       ./devtool dist
       ./devtool upload
   
  @@ -60,6 +61,7 @@
   %tag
       V=`./shtool version -l c -d short l2_version.c | sed -e 's;\.;_;g'`
       echo "+++ tagging CVS sources as L2_${V}"
  +    cvs commit -m 'flush pending changes before tagging'
       cvs tag L2_${V}
   
   %dist
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jun 30 16:15:59 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DF95876F9B; Mon, 30 Jun 2003 16:15:58 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ README l2_version.c
Message-Id: <20030630141558.DF95876F9B@mail.ossp.org>
Date: Mon, 30 Jun 2003 16:15:58 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   30-Jun-2003 16:15:58
  Branch: HEAD                             Handle: 2003063015155700

  Modified files:
    ossp-pkg/l2             README l2_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.11        +1  -1      ossp-pkg/l2/README
    1.7         +9  -9      ossp-pkg/l2/l2_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/README
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 README
  --- ossp-pkg/l2/README	6 Jan 2003 11:41:51 -0000	1.10
  +++ ossp-pkg/l2/README	30 Jun 2003 14:15:57 -0000	1.11
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_|_____|
   
     OSSP l2 -- Flexible Logging
  -  Version 0.9.1 (11-Oct-2002)
  +  Version 0.9.2 (30-Jun-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_version.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 l2_version.c
  --- ossp-pkg/l2/l2_version.c	11 Oct 2002 16:00:48 -0000	1.6
  +++ ossp-pkg/l2/l2_version.c	30 Jun 2003 14:15:57 -0000	1.7
  @@ -8,7 +8,7 @@
   #ifndef _L2_VERSION_C_
   #define _L2_VERSION_C_
   
  -#define L2_VERSION 0x009201
  +#define L2_VERSION 0x009202
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _L2_VERSION_C_AS_HEADER_
   
   l2_version_t l2_version = {
  -    0x009201,
  -    "0.9.1",
  -    "0.9.1 (11-Oct-2002)",
  -    "This is OSSP l2, Version 0.9.1 (11-Oct-2002)",
  -    "OSSP l2 0.9.1 (11-Oct-2002)",
  -    "OSSP l2/0.9.1",
  -    "@(#)OSSP l2 0.9.1 (11-Oct-2002)",
  -    "$Id: l2_version.c,v 1.6 2002/10/11 16:00:48 rse Exp $"
  +    0x009202,
  +    "0.9.2",
  +    "0.9.2 (30-Jun-2003)",
  +    "This is OSSP l2, Version 0.9.2 (30-Jun-2003)",
  +    "OSSP l2 0.9.2 (30-Jun-2003)",
  +    "OSSP l2/0.9.2",
  +    "@(#)OSSP l2 0.9.2 (30-Jun-2003)",
  +    "$Id: l2_version.c,v 1.7 2003/06/30 14:15:57 thl Exp $"
   };
   
   #endif /* _L2_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jun 30 16:30:11 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BB67E76F9F; Mon, 30 Jun 2003 16:30:10 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ ChangeLog README fsl_version.c
Message-Id: <20030630143010.BB67E76F9F@mail.ossp.org>
Date: Mon, 30 Jun 2003 16:30:10 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   30-Jun-2003 16:30:10
  Branch: HEAD                             Handle: 2003063015301000

  Modified files:
    ossp-pkg/fsl            ChangeLog README fsl_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.19        +12 -0      ossp-pkg/fsl/ChangeLog
    1.34        +1  -1      ossp-pkg/fsl/README
    1.20        +9  -9      ossp-pkg/fsl/fsl_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 ChangeLog
  --- ossp-pkg/fsl/ChangeLog	22 May 2003 14:01:55 -0000	1.18
  +++ ossp-pkg/fsl/ChangeLog	30 Jun 2003 14:30:10 -0000	1.19
  @@ -8,6 +8,18 @@
   
     CHANGELOG
   
  +  Changes between 1.1.0 and 1.2.0 (30-Jun-2003)
  +
  +    *) introduce "trunc=" option for file channel; keep support for
  +       obsolete "append" option.
  +
  +    *) change default mode for file channel to "append".
  +
  +    *) fix array too small by one element bug in fd and file channels.
  +
  +    *) add jitter option to file channel.
  +       [Thomas Lotterer <thomas@lotterer.net]
  +
     Changes between 1.0.8 and 1.1.0 (22-May-2003)
   
       *) for compatiblity reasons, when debugging is enabled and
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/README
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 README
  --- ossp-pkg/fsl/README	22 May 2003 14:03:08 -0000	1.33
  +++ ossp-pkg/fsl/README	30 Jun 2003 14:30:10 -0000	1.34
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_| |___/_|
    
     OSSP fsl - Faking/Flexible Syslog Library
  -  Version 1.1.0 (22-May-2003)
  +  Version 1.2.0 (30-Jun-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl_version.c
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 fsl_version.c
  --- ossp-pkg/fsl/fsl_version.c	22 May 2003 14:03:08 -0000	1.19
  +++ ossp-pkg/fsl/fsl_version.c	30 Jun 2003 14:30:10 -0000	1.20
  @@ -8,7 +8,7 @@
   #ifndef _FSL_VERSION_C_
   #define _FSL_VERSION_C_
   
  -#define FSL_VERSION 0x101200
  +#define FSL_VERSION 0x102200
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _FSL_VERSION_C_AS_HEADER_
   
   fsl_version_t fsl_version = {
  -    0x101200,
  -    "1.1.0",
  -    "1.1.0 (22-May-2003)",
  -    "This is OSSP fsl, Version 1.1.0 (22-May-2003)",
  -    "OSSP fsl 1.1.0 (22-May-2003)",
  -    "OSSP fsl/1.1.0",
  -    "@(#)OSSP fsl 1.1.0 (22-May-2003)",
  -    "$Id: fsl_version.c,v 1.19 2003/05/22 14:03:08 thl Exp $"
  +    0x102200,
  +    "1.2.0",
  +    "1.2.0 (30-Jun-2003)",
  +    "This is OSSP fsl, Version 1.2.0 (30-Jun-2003)",
  +    "OSSP fsl 1.2.0 (30-Jun-2003)",
  +    "OSSP fsl/1.2.0",
  +    "@(#)OSSP fsl 1.2.0 (30-Jun-2003)",
  +    "$Id: fsl_version.c,v 1.20 2003/06/30 14:30:10 thl Exp $"
   };
   
   #endif /* _FSL_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jun 30 16:39:10 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1BF1076F96; Mon, 30 Jun 2003 16:39:10 +0200 (CEST)
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/fsl/ index.wml oss...
Message-Id: <20030630143910.1BF1076F96@mail.ossp.org>
Date: Mon, 30 Jun 2003 16:39:10 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   OSSP Project Master
  Root:   /e/ossp/cvs                      Email:  ossp@ossp.org
  Module: ossp-web                         Date:   30-Jun-2003 16:39:09
  Branch: HEAD                             Handle: 2003063015390801

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/fsl    index.wml
    ossp-web/pkg/lib/l2     index.wml

  Log:
    new fsl/l2

  Summary:
    Revision    Changes     Path
    1.63        +2  -0      ossp-web/new/news.txt
    1.20        +2  -2      ossp-web/pkg/lib/fsl/index.wml
    1.59        +2  -2      ossp-web/pkg/lib/index.wml
    1.8         +2  -2      ossp-web/pkg/lib/l2/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.62 -r1.63 news.txt
  --- ossp-web/new/news.txt	30 Jun 2003 11:04:33 -0000	1.62
  +++ ossp-web/new/news.txt	30 Jun 2003 14:39:08 -0000	1.63
  @@ -1,3 +1,5 @@
  +30-Jun-2003: Released L<OSSP fsl> 1.2.0
  +30-Jun-2003: Released L<OSSP l2> 0.9.2
   30-Jun-2003: Released L<OSSP sio> 0.9.2
   17-Jun-2003: Released L<OSSP sio> 0.9.1
   22-May-2003: Released L<OSSP fsl> 1.1.0
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/fsl/index.wml
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 index.wml
  --- ossp-web/pkg/lib/fsl/index.wml	22 May 2003 14:38:56 -0000	1.19
  +++ ossp-web/pkg/lib/fsl/index.wml	30 Jun 2003 14:39:09 -0000	1.20
  @@ -46,7 +46,7 @@
   <pkg_status
       name="fsl" assign="thl"
       genesis="Jul-2002"
  -    stable="1.1.0" stable_date="22-May-2003"
  +    stable="1.2.0" stable_date="30-Jun-2003"
       unstable="none"  unstable_date="none"
   	done=100>
   
  @@ -57,7 +57,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/fsl/
       directory=$(FTP_ROOT_DIR)/pkg/lib/fsl/
       files="fsl-*.tar.gz" 
  -	stable="fsl-1.1\\\\\\\.0.tar.gz" unstable="none">
  +	stable="fsl-1.2\\\\\\\.0.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.58 -r1.59 index.wml
  --- ossp-web/pkg/lib/index.wml	30 Jun 2003 11:04:33 -0000	1.58
  +++ ossp-web/pkg/lib/index.wml	30 Jun 2003 14:39:08 -0000	1.59
  @@ -27,7 +27,7 @@
   			done=100 stable=1.0.5 unstable=none>
     <pkg_item name="fsl" longname="OSSP fsl" type="lib"
               desc="Faked/Flexible Syslog"
  -			done=100 stable=1.1.0 unstable=none>
  +			done=100 stable=1.2.0 unstable=none>
     <pkg_item name="var" longname="OSSP var" type="lib"
               desc="Variable Expansion"
   			done=100 stable=1.0.0 unstable=none>
  @@ -42,7 +42,7 @@
   			done=95 stable=none unstable=0.9.8>
     <pkg_item name="l2" longname="OSSP l2" type="lib"
               desc="Flexible Logging"
  -			done=95 stable=none unstable=0.9.1>
  +			done=95 stable=none unstable=0.9.2>
     <pkg_item name="al" longname="OSSP al" type="lib"
               desc="Assembly Line"
   			done=95 stable=none unstable=0.9.1>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/l2/index.wml
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 index.wml
  --- ossp-web/pkg/lib/l2/index.wml	11 Oct 2002 16:06:12 -0000	1.7
  +++ ossp-web/pkg/lib/l2/index.wml	30 Jun 2003 14:39:09 -0000	1.8
  @@ -39,7 +39,7 @@
   <pkg_status
       name="l2" assign="rse"
       stable="none"    stable_date="none"
  -    unstable="0.9.1" unstable_date="11-Oct-2002"
  +    unstable="0.9.2" unstable_date="30-Jun-2003"
   	done=95>
   
   <h2>Source</h2>
  @@ -49,7 +49,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/l2/
       directory=$(FTP_ROOT_DIR)/pkg/lib/l2/
       files="l2-*.tar.gz" 
  -	stable="none" unstable="l2-0.9.1.tar.gz">
  +	stable="none" unstable="l2-0.9.2.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jun 30 16:43:37 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DE5D276F99; Mon, 30 Jun 2003 16:43:36 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc.h rc_file.c rc_proc.c rc_script.c rc_sect....
Message-Id: <20030630144336.DE5D276F99@mail.ossp.org>
Date: Mon, 30 Jun 2003 16:43:36 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   30-Jun-2003 16:43:36
  Branch: HEAD                             Handle: 2003063015433600

  Modified files:
    ossp-pkg/rc             rc.h rc_file.c rc_proc.c rc_script.c rc_sect.c

  Log:
    Replace references to scriptAppend with scriptAdd, and change name of
    scriptAppend to scriptnAppend to avoid surprises. Also, debug minimal memory
    overallocation in scriptnAppend.

  Summary:
    Revision    Changes     Path
    1.53        +2  -1      ossp-pkg/rc/rc.h
    1.4         +1  -1      ossp-pkg/rc/rc_file.c
    1.51        +14 -15     ossp-pkg/rc/rc_proc.c
    1.33        +9  -9      ossp-pkg/rc/rc_script.c
    1.17        +15 -5      ossp-pkg/rc/rc_sect.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc.h
  ============================================================================
  $ cvs diff -u -r1.52 -r1.53 rc.h
  --- ossp-pkg/rc/rc.h	27 Jun 2003 14:26:13 -0000	1.52
  +++ ossp-pkg/rc/rc.h	30 Jun 2003 14:43:36 -0000	1.53
  @@ -109,7 +109,7 @@
   rc_script_t *scriptNew(void);
   rc_script_t *scriptCopy(rc_script_t *);
   rc_return_t scriptAdd(rc_script_t *, rc_script_t *);
  -rc_return_t scriptAppend(rc_script_t *, const char *, size_t);
  +rc_return_t scriptnAppend(rc_script_t *, const char *, size_t);
   rc_section_t *scriptSection(rc_script_t *, const char *);
   rc_return_t scriptDump(rc_script_t *);
   rc_return_t scriptWrite(rc_script_t *, const char *);
  @@ -136,6 +136,7 @@
   const char *sectionGetparent(rc_section_t *);
   const char *sectionGetlabel(rc_section_t *);
   const char *sectionGetlogin(rc_section_t *);
  +rc_script_t *sectionGetscript(rc_section_t *);
   const char *sectionGetdata(rc_section_t *);
   size_t sectionGetlen(rc_section_t *);
   rc_return_t sectionSetpri(rc_section_t *, long);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_file.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 rc_file.c
  --- ossp-pkg/rc/rc_file.c	27 Jun 2003 14:26:13 -0000	1.3
  +++ ossp-pkg/rc/rc_file.c	30 Jun 2003 14:43:36 -0000	1.4
  @@ -116,7 +116,7 @@
       pScript = scriptNew();
       sBuf = (char *)calloc(1, RC_READ_BUFSIZE);
       while ((nRet = read(nFdrc, sBuf, RC_READ_BUFSIZE)) > 0)
  -        scriptAppend(pScript, sBuf, nRet);
  +        scriptnAppend(pScript, sBuf, nRet);
   
       if (nRet == -1) /* Handle read errors */
           RC_THROW(RC_ERR_IO);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.50 -r1.51 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	27 Jun 2003 14:26:13 -0000	1.50
  +++ ossp-pkg/rc/rc_proc.c	30 Jun 2003 14:43:36 -0000	1.51
  @@ -88,10 +88,10 @@
           if ((nFdfunc = open(configGetval(RC_FNC_VAL), O_RDONLY)) >= 0) {
               /* Read data from the func file */
               while ((nRet = read(nFdfunc, sBuf, RC_READ_BUFSIZE)) > 0)
  -                scriptAppend(pRc->m_pScriptfunc, sBuf, nRet);
  +                scriptnAppend(pRc->m_pScriptfunc, sBuf, nRet);
               if (nRet == -1) /* Handle read errors */
                   RC_THROW(RC_ERR_IO);
  -            scriptAppend(pRc->m_pScriptfunc, "\n", sizeof("\n"));
  +            scriptnAppend(pRc->m_pScriptfunc, "\n", sizeof("\n"));
               close(nFdfunc); /* Close Func file handle */
           }
           else
  @@ -110,8 +110,8 @@
           try { /* If it exists, append config section unconditionally */
               pSec = rcfileGetsec(pRcfile, configGetval(RC_NCF_VAL));
               if (pSec) { /* Only operate if the section lookup succeeds */
  -                scriptAppend(pRc->m_pScriptcnf, sectionGetdata(pSec), strlen(sectionGetdata(pSec)));
  -                scriptAppend(pRc->m_pScriptcnf, "\n", strlen ("\n"));
  +                scriptAdd(pRc->m_pScriptcnf, sectionGetscript(pSec));
  +                scriptnAppend(pRc->m_pScriptcnf, "\n", strlen ("\n"));
               }
   
               for (nSect = 0; nSect < nTotalsecs; nSect++) { /* Iterate over */
  @@ -183,13 +183,13 @@
           /* Allocate a block of section pointers to use temporarily */
           ppSectmp = calloc(pRc->m_pList->m_nFiles, sizeof(rc_section_t *));
           pFatscript = scriptNew();
  -        scriptAppend(pFatscript, RC_BANG_STR, strlen(RC_BANG_STR)); /* Shebang */
  +        scriptnAppend(pFatscript, RC_BANG_STR, strlen(RC_BANG_STR)); /* Shebang */
           /* Conditionally output initial notice in verbal mode */
           if (configGetval(RC_VRB_VAL)) {
               szVerbose = malloc((strlen(RC_VST_TEXT) + 2) * sizeof (char));
               sprintf(szVerbose, "%s", RC_VST_TEXT);
               strcat(szVerbose, "\n");
  -            scriptAppend(pFatscript, szVerbose, strlen(szVerbose));
  +            scriptnAppend(pFatscript, szVerbose, strlen(szVerbose));
               free(szVerbose);
               szVerbose = NULL;
           }
  @@ -198,7 +198,7 @@
               szVerbose = malloc((strlen(RC_EVF_TEXT) + 2) * sizeof (char));
               sprintf(szVerbose, "%s", RC_EVF_TEXT);
               strcat(szVerbose, "\n");
  -            scriptAppend(pFatscript, szVerbose, strlen(szVerbose));
  +            scriptnAppend(pFatscript, szVerbose, strlen(szVerbose));
               free(szVerbose);
               szVerbose = NULL;
           }
  @@ -209,7 +209,7 @@
               szVerbose = malloc(nBytes);
               sprintf(szVerbose, RC_EVN_TEXT, RC_DEF_NCF, RC_DEF_NCF);
               strcat(szVerbose, "\n");
  -            scriptAppend(pFatscript, szVerbose, strlen(szVerbose));
  +            scriptnAppend(pFatscript, szVerbose, strlen(szVerbose));
               free(szVerbose);
               szVerbose = NULL;
           }
  @@ -234,17 +234,16 @@
                       szVerbose = malloc(nBytes);
                       sprintf(szVerbose, RC_EVN_TEXT, szTmp, sectionGetparent(ppSectmp[nTmp]));
                       strcat(szVerbose, "\n");
  -                    scriptAppend(pFatscript, szVerbose, strlen(szVerbose));
  +                    scriptnAppend(pFatscript, szVerbose, strlen(szVerbose));
                       free(szVerbose);
                       szVerbose = NULL;
                   }
                   if ((szTmp = (char *)sectionGetlogin(ppSectmp[nTmp])) != NULL) {
  -                    scriptAppend(pFatscript, "#su ", strlen("#su "));
  -                    scriptAppend(pFatscript, szTmp, strlen(szTmp));
  -                    scriptAppend(pFatscript, "\n", strlen("\n") + 1);
  +                    scriptnAppend(pFatscript, "#su ", strlen("#su "));
  +                    scriptnAppend(pFatscript, szTmp, strlen(szTmp));
  +                    scriptnAppend(pFatscript, "\n", strlen("\n"));
                   }
  -                szTmp = (char *)sectionGetdata(ppSectmp[nTmp]);
  -                scriptAppend(pFatscript, szTmp, strlen(szTmp) + 1);
  +                scriptAdd(pFatscript, sectionGetscript(ppSectmp[nTmp]));
               }
           }
           free(ppSectmp);
  @@ -465,7 +464,7 @@
           /* Allocate a block of section pointers to use as a temporary */
           ppSectmp = calloc(pRc->m_pList->m_nFiles, sizeof(rc_section_t *));
           pBangscript = scriptNew();
  -        scriptAppend(pBangscript, RC_BANG_STR, (strlen(RC_BANG_STR) + 1) * sizeof (char));
  +        scriptnAppend(pBangscript, RC_BANG_STR, strlen(RC_BANG_STR));
           scriptDump(pBangscript); /* Dump the shebang */
           scriptDelete(pBangscript);
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_script.c
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 rc_script.c
  --- ossp-pkg/rc/rc_script.c	26 Jun 2003 18:45:14 -0000	1.32
  +++ ossp-pkg/rc/rc_script.c	30 Jun 2003 14:43:36 -0000	1.33
  @@ -96,7 +96,7 @@
       assert(pDest && pSource); /* Parameters must be valid */
   
       /* Add 2 chars to ensure that a \0 precedes any strings */
  -    nResize = strlen(*pDest) + strlen(*pSource) + sizeof (char) * 2;
  +    nResize = strlen(*pDest) + strlen(*pSource) + sizeof (char);
       /* Don't trust realloc(3) in this case */
       if ((pvRealloc = calloc(1, (size_t)nResize)) == NULL)
           return(RC_THROW(RC_ERR_MEM));
  @@ -114,11 +114,11 @@
       return(RC_THROW(RC_OK));
   }
   
  -/****************************************************
  -* scriptAppend(rc_script_t *, const char *, size_t) *
  -* Append text to a script                           *
  -****************************************************/
  -rc_return_t scriptAppend(rc_script_t *pScript, const char *szInbuf, size_t Size)
  +/*****************************************************
  +* scriptnAppend(rc_script_t *, const char *, size_t) *
  +* Append n characters of text to a script            *
  +*****************************************************/
  +rc_return_t scriptnAppend(rc_script_t *pScript, const char *szInbuf, size_t Size)
   {
       int nResize     = 0;
       void *pvRealloc = NULL;
  @@ -133,7 +133,7 @@
           return(RC_THROW(RC_OK));
   
       /* Add 2 chars to ensure that a \0 precedes any strings */
  -    nResize = strlen(*pScript) + Size + sizeof (char) * 2;
  +    nResize = strlen(*pScript) + Size + sizeof (char);
       /* Don't trust realloc(3) in this case */
       if ((pvRealloc = calloc(1, (size_t)nResize)) == NULL)
           return(RC_THROW(RC_ERR_MEM));
  @@ -141,7 +141,7 @@
       /* Coerce strings into one Script again */
       if (*pScript)
           strcpy(pvRealloc, *pScript);
  -    strncat(pvRealloc, szInbuf, Size);
  +    strncat(pvRealloc, szInbuf, Size + 1);
   
       /* Cleanup and deallocate memory */
       if (*pScript)
  @@ -330,7 +330,7 @@
   
       /* Don't remove this! It encapsulates the script object, */
       /*                    which might not be a simple string */
  -    return(*pScript);
  +    return((const char *)*pScript);
   }
   
   /************************************************
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_sect.c
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 rc_sect.c
  --- ossp-pkg/rc/rc_sect.c	27 Jun 2003 14:26:13 -0000	1.16
  +++ ossp-pkg/rc/rc_sect.c	30 Jun 2003 14:43:36 -0000	1.17
  @@ -159,15 +159,25 @@
       return(0); /* Not reached */
   }
   
  +rc_script_t *sectionGetscript(rc_section_t *pSec)
  +{
  +    if (pSec)
  +        return(pSec->m_pData);
  +    else
  +        RC_THROW(RC_ERR_USE);
  +
  +    return(0); /* Not reached */
  +}
  +
   const char *sectionGetdata(rc_section_t *pSec)
   { /* Data of section, this is the script body of the particular section */
  -    char *szScriptdata = NULL;
  -
  -    if (pSec && (szScriptdata = scriptGetdata(pSec->m_pData)))
  -        if (strlen(szScriptdata) > 0)
  -            return(szScriptdata);
  +    if (pSec) {
  +        const char *kszScriptdata = scriptGetdata(pSec->m_pData);
  +        if (kszScriptdata && strlen(kszScriptdata) > 0)
  +            return(kszScriptdata);
           else
               return NULL;
  +    }
       else
           RC_THROW(RC_ERR_USE);
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jun 30 17:09:47 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 184B776561; Mon, 30 Jun 2003 17:09:47 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc.h rc_proc.c
Message-Id: <20030630150947.184B776561@mail.ossp.org>
Date: Mon, 30 Jun 2003 17:09:47 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   30-Jun-2003 17:09:46
  Branch: HEAD                             Handle: 2003063016094600

  Modified files:
    ossp-pkg/rc             rc.h rc_proc.c

  Log:
    Fix some verbose mode print run definitions, and fix error handling by using
    correct value 0 for RC_OK.

  Summary:
    Revision    Changes     Path
    1.54        +15 -15     ossp-pkg/rc/rc.h
    1.52        +3  -3      ossp-pkg/rc/rc_proc.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc.h
  ============================================================================
  $ cvs diff -u -r1.53 -r1.54 rc.h
  --- ossp-pkg/rc/rc.h	30 Jun 2003 14:43:36 -0000	1.53
  +++ ossp-pkg/rc/rc.h	30 Jun 2003 15:09:46 -0000	1.54
  @@ -52,21 +52,21 @@
   
   /* Rc return codes */
   typedef enum {
  -    RC_OK      = 1,  /* Success                  */
  -    RC_ERR_0   = 2,  /* Error base               */
  -    RC_ERR_USE = 3,  /* Usage error              */
  -    RC_ERR_MEM = 4,  /* Memory error             */
  -    RC_ERR_SYS = 5,  /* System error (see errno) */
  -    RC_ERR_IO  = 6,  /* Input/output error       */
  -    RC_ERR_INT = 7,  /* Internal error           */
  -    RC_ERR_FNC = 8,  /* Func file not found      */
  -    RC_ERR_DIR = 9,  /* Location dir not found   */
  -    RC_ERR_RCF = 10, /* Rc file not found        */
  -    RC_ERR_TRM = 11, /* Request to terminate app */
  -    RC_ERR_CFG = 12, /* Config or option failure */
  -    RC_WRN_0   = 13, /* Warning base             */
  -    RC_WRN_OWR = 14, /* Overwrite warning        */
  -    RC_WRN_NUL = 15  /* NULL pointer warning     */
  +    RC_OK      = 0,  /* Success                  */
  +    RC_ERR_0   = 1,  /* Error base               */
  +    RC_ERR_USE = 2,  /* Usage error              */
  +    RC_ERR_MEM = 3,  /* Memory error             */
  +    RC_ERR_SYS = 4,  /* System error (see errno) */
  +    RC_ERR_IO  = 5,  /* Input/output error       */
  +    RC_ERR_INT = 6,  /* Internal error           */
  +    RC_ERR_FNC = 7,  /* Func file not found      */
  +    RC_ERR_DIR = 8,  /* Location dir not found   */
  +    RC_ERR_RCF = 9,  /* Rc file not found        */
  +    RC_ERR_TRM = 10, /* Request to terminate app */
  +    RC_ERR_CFG = 11, /* Config or option failure */
  +    RC_WRN_0   = 12, /* Warning base             */
  +    RC_WRN_OWR = 13, /* Overwrite warning        */
  +    RC_WRN_NUL = 14  /* NULL pointer warning     */
   } rc_return_t;
   
   /* Config function prototypes */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.51 -r1.52 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	30 Jun 2003 14:43:36 -0000	1.51
  +++ ossp-pkg/rc/rc_proc.c	30 Jun 2003 15:09:46 -0000	1.52
  @@ -473,13 +473,13 @@
               fprintf(stderr, "%s\n", RC_VST_TEXT);
           /* Conditionally print funcs section notice in verbal mode */
           if (configGetval(RC_VRB_VAL))
  -            fprintf(stderr, "%s\n", RC_EVF_TEXT);
  +            fprintf(stderr, "%s\n", RC_PNF_TEXT);
           scriptDump(pRc->m_pScriptfunc); /* Dump the funcs script */
           /* Conditionally print config section notice in verbal mode */
           if (configGetval(RC_VRB_VAL)) {
  -            nBytes = (strlen(RC_EVN_TEXT) + strlen(RC_DEF_NCF) * 2 + 2) * sizeof (char);
  +            nBytes = (strlen(RC_PRN_TEXT) + strlen(RC_DEF_NCF) * 2 + 2) * sizeof (char);
               szVerbose = malloc(nBytes);
  -            sprintf(szVerbose, RC_EVN_TEXT, RC_DEF_NCF, RC_DEF_NCF);
  +            sprintf(szVerbose, RC_PRN_TEXT, RC_DEF_NCF, RC_DEF_NCF);
               strcat(szVerbose, "\n");
               fprintf(stderr, szVerbose);
               free(szVerbose);
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jun 30 17:27:39 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D927076768; Mon, 30 Jun 2003 17:27:38 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc.h rc_error.c rc_proc.c
Message-Id: <20030630152738.D927076768@mail.ossp.org>
Date: Mon, 30 Jun 2003 17:27:38 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   30-Jun-2003 17:27:38
  Branch: HEAD                             Handle: 2003063016273800

  Modified files:
    ossp-pkg/rc             rc.h rc_error.c rc_proc.c

  Log:
    Add RC_ERR_ROOT error, and improve error handling during forked child op
    failures.

  Summary:
    Revision    Changes     Path
    1.55        +16 -15     ossp-pkg/rc/rc.h
    1.4         +4  -1      ossp-pkg/rc/rc_error.c
    1.53        +11 -5      ossp-pkg/rc/rc_proc.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc.h
  ============================================================================
  $ cvs diff -u -r1.54 -r1.55 rc.h
  --- ossp-pkg/rc/rc.h	30 Jun 2003 15:09:46 -0000	1.54
  +++ ossp-pkg/rc/rc.h	30 Jun 2003 15:27:38 -0000	1.55
  @@ -52,21 +52,22 @@
   
   /* Rc return codes */
   typedef enum {
  -    RC_OK      = 0,  /* Success                  */
  -    RC_ERR_0   = 1,  /* Error base               */
  -    RC_ERR_USE = 2,  /* Usage error              */
  -    RC_ERR_MEM = 3,  /* Memory error             */
  -    RC_ERR_SYS = 4,  /* System error (see errno) */
  -    RC_ERR_IO  = 5,  /* Input/output error       */
  -    RC_ERR_INT = 6,  /* Internal error           */
  -    RC_ERR_FNC = 7,  /* Func file not found      */
  -    RC_ERR_DIR = 8,  /* Location dir not found   */
  -    RC_ERR_RCF = 9,  /* Rc file not found        */
  -    RC_ERR_TRM = 10, /* Request to terminate app */
  -    RC_ERR_CFG = 11, /* Config or option failure */
  -    RC_WRN_0   = 12, /* Warning base             */
  -    RC_WRN_OWR = 13, /* Overwrite warning        */
  -    RC_WRN_NUL = 14  /* NULL pointer warning     */
  +    RC_OK      = 0,   /* Success                  */
  +    RC_ERR_0   = 1,   /* Error base               */
  +    RC_ERR_USE = 2,   /* Usage error              */
  +    RC_ERR_MEM = 3,   /* Memory error             */
  +    RC_ERR_SYS = 4,   /* System error (see errno) */
  +    RC_ERR_IO  = 5,   /* Input/output error       */
  +    RC_ERR_INT = 6,   /* Internal error           */
  +    RC_ERR_FNC = 7,   /* Func file not found      */
  +    RC_ERR_DIR = 8,   /* Location dir not found   */
  +    RC_ERR_RCF = 9,   /* Rc file not found        */
  +    RC_ERR_TRM = 10,  /* Request to terminate app */
  +    RC_ERR_CFG = 11,  /* Config or option failure */
  +    RC_ERR_ROOT = 12, /* Process must run as root */
  +    RC_WRN_0   = 13,  /* Warning base             */
  +    RC_WRN_OWR = 14,  /* Overwrite warning        */
  +    RC_WRN_NUL = 15   /* NULL pointer warning     */
   } rc_return_t;
   
   /* Config function prototypes */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_error.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 rc_error.c
  --- ossp-pkg/rc/rc_error.c	24 Jun 2003 09:35:39 -0000	1.3
  +++ ossp-pkg/rc/rc_error.c	30 Jun 2003 15:27:38 -0000	1.4
  @@ -67,9 +67,12 @@
           else if ((rc_return_t)Localerr.ex_value == RC_ERR_CFG)
               fprintf(stderr, "    Error condition, configuration and options failure in %s:%s():%d.\n", \
                   Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
  +        else if ((rc_return_t)Localerr.ex_value == RC_ERR_ROOT)
  +            fprintf(stderr, "    Error condition, in %s:%s():%d. You must be root to run these commands\n", \
  +                Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
           else
               fprintf(stderr, "    Error condition of class '%s',\n    exception %d in %s:%s():%d.\n", (char *)Localerr.ex_class, (int)Localerr.ex_value, Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
  -        exit(1); /* Return failure */
  +        exit((int)Localerr.ex_value); /* Return failure */
       }
   #ifdef DEBUG
       else        /* Warning condition */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.52 -r1.53 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	30 Jun 2003 15:09:46 -0000	1.52
  +++ ossp-pkg/rc/rc_proc.c	30 Jun 2003 15:27:38 -0000	1.53
  @@ -276,6 +276,8 @@
           pFatscript = NULL;
       }
       else if (configGetval(RC_EXC_VAL)) {                        /* Execute  */
  +        int nStat; /* Used for reporting status on return of a forked child */
  +
           /* This block does nothing more than implement the feature,         */
           /* that allows rc to run unprivileged (as long as no privileged     */
           /* code is used in the script sections to be executed               */
  @@ -392,7 +394,7 @@
                       szVerbose = NULL;
   
                       /* Spawn the section shell code */
  -                    switch (Pidexec = fork()){
  +                    switch (Pidexec = fork()) {
                           case -1:    /* Broken */
                               return(RC_THROW(RC_ERR_INT));
                               break;  /* Huh? */
  @@ -400,12 +402,14 @@
                               nSectuid = sectionGetuid(ppSectmp[nTmp]);
                               if (nSectuid >= 0 && getuid() != nSectuid)
                                   if (setuid(nSectuid) != 0)
  -                                    return(RC_THROW(RC_ERR_INT));
  +                                    return(RC_THROW(RC_ERR_ROOT));
                               if (execvp(*pszVec, pszVec) == -1)
                                   return(RC_THROW(RC_ERR_INT));
                               break;
                           default: /* Parent, blocks until child returns */
  -                            waitpid(Pidexec, NULL, WUNTRACED);
  +                            waitpid(Pidexec, &nStat, WUNTRACED);
  +                            if ((nStat = WEXITSTATUS(nStat)) != 0)
  +                                return(nStat);
                               break;
                       }
                       if (szExec) {
  @@ -443,12 +447,14 @@
                               nSectuid = sectionGetuid(ppSectmp[nTmp]);
                               if (nSectuid >= 0 && getuid() != nSectuid)
                                   if (setuid(nSectuid) != 0)
  -                                    return(RC_THROW(RC_ERR_INT));
  +                                    return(RC_THROW(RC_ERR_ROOT));
                               if (execvp(*pszVec, pszVec) == -1)
                                   return(RC_THROW(RC_ERR_INT));
                               break;
                           default: /* Parent, blocks until child returns */
  -                            waitpid(Pidexec, NULL, WUNTRACED);
  +                            waitpid(Pidexec, &nStat, WUNTRACED);
  +                            if ((nStat = WEXITSTATUS(nStat)) != 0)
  +                                return(nStat);
                               break;
                       }
                       free(szExec); /* Cleanup after exec */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jun 30 17:54:23 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AB48176768; Mon, 30 Jun 2003 17:54:23 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ AUTHORS
Message-Id: <20030630155423.AB48176768@mail.ossp.org>
Date: Mon, 30 Jun 2003 17:54:23 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Jun-2003 17:54:23
  Branch: HEAD                             Handle: 2003063016542300

  Modified files:
    ossp-pkg/l2             AUTHORS

  Log:
    give Thomas credit for his work here, too

  Summary:
    Revision    Changes     Path
    1.4         +1  -0      ossp-pkg/l2/AUTHORS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/AUTHORS
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 AUTHORS
  --- ossp-pkg/l2/AUTHORS	6 Jan 2003 11:41:51 -0000	1.3
  +++ ossp-pkg/l2/AUTHORS	30 Jun 2003 15:54:23 -0000	1.4
  @@ -13,6 +13,7 @@
     or edited major parts of the OSSP l2 sources.
   
     Ralf S. Engelschall   <rse@engelschall.com>
  +  Thomas Lotterer       <thomas@lotterer.net>
     Michael Schloh        <michael.schloh@cw.com>
     Peter Simons          <simons@cryp.to>
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jun 30 17:54:44 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7863F76773; Mon, 30 Jun 2003 17:54:44 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ ChangeLog
Message-Id: <20030630155444.7863F76773@mail.ossp.org>
Date: Mon, 30 Jun 2003 17:54:44 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Jun-2003 17:54:44
  Branch: HEAD                             Handle: 2003063016544400

  Modified files:
    ossp-pkg/l2             ChangeLog

  Log:
    fill in this still missing information

  Summary:
    Revision    Changes     Path
    1.5         +41 -0      ossp-pkg/l2/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ChangeLog
  --- ossp-pkg/l2/ChangeLog	6 Jan 2003 11:41:51 -0000	1.4
  +++ ossp-pkg/l2/ChangeLog	30 Jun 2003 15:54:44 -0000	1.5
  @@ -9,3 +9,44 @@
     ChangeLog
     =========
   
  +  Changes between 0.9.1 and 0.9.2 (11-Oct-2002 to 30-Jun-2003)
  +  
  +    *) introduce "trunc=" option for file channel; keep support for
  +       obsolete "append" option.
  +       [Thomas Lotterer <thomas@lotterer.net]
  +
  +    *) change default mode for file channel to "append".
  +       [Thomas Lotterer <thomas@lotterer.net]
  +
  +    *) fix array too small by one element bug in fd and file channels.
  +       [Thomas Lotterer <thomas@lotterer.net]
  +
  +    *) add jitter option to file channel.
  +       [Thomas Lotterer <thomas@lotterer.net]
  +
  +  Changes between 0.9.0 and 0.9.1 (30-Jul-2002 to 11-Oct-2003)
  +
  +    *) Changed "filedescriptor" to "fs" in file descriptor channel
  +       configuration.
  +       [Thomas Lotterer <thomas@lotterer.net]
  +
  +    *) Upgraded to GNU autoconf 2.54.
  +       [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +    *) Simplify install/uninstall Makefile targets
  +       [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +    *) Fixed uname(3) usage in prefix channel.
  +       [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +    *) Fixed memory leak in l2_util_vasprintf().
  +       [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +    *) Upgraded to latest OSSP sa.
  +       [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +  Changes between *GENESIS* and 0.9.0 (30-Jul-2002 to 30-Jul-2002)
  +
  +    *) Initial release.
  +       [Ralf S. Engelschall <rse@engelschall.com>]
  +
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jun 30 17:58:50 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 493AB7676F; Mon, 30 Jun 2003 17:58:50 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ 00TODO rc_proc.c
Message-Id: <20030630155850.493AB7676F@mail.ossp.org>
Date: Mon, 30 Jun 2003 17:58:50 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   30-Jun-2003 17:58:50
  Branch: HEAD                             Handle: 2003063016584900

  Modified files:
    ossp-pkg/rc             00TODO rc_proc.c

  Log:
    Repaired print run mode before adding %common logic.

  Summary:
    Revision    Changes     Path
    1.50        +2  -0      ossp-pkg/rc/00TODO
    1.54        +19 -20     ossp-pkg/rc/rc_proc.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/00TODO
  ============================================================================
  $ cvs diff -u -r1.49 -r1.50 00TODO
  --- ossp-pkg/rc/00TODO	26 Jun 2003 18:45:14 -0000	1.49
  +++ ossp-pkg/rc/00TODO	30 Jun 2003 15:58:49 -0000	1.50
  @@ -26,6 +26,8 @@
       used in selecting files. Location is not properly used. See rc_anal.c.
     when a section is not found, the config is also not executed
     Eval mode is temporarily broken
  +  Eval and print mode, when -u given '#u' printed, but not always
  +    This is a problem if the following section is printed without '#u'
   
   Document
     Refs, pri, user, group, ci, go only in normal (not special) sections.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.53 -r1.54 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	30 Jun 2003 15:27:38 -0000	1.53
  +++ ossp-pkg/rc/rc_proc.c	30 Jun 2003 15:58:49 -0000	1.54
  @@ -168,7 +168,6 @@
       char *szExec    = NULL;             /* Used only during exec mode      */
       char *szVerbose = NULL;             /* Used when handling verbose mode */
       char *pszVec[RC_EXEC_MAXARGS];      /* For passing in to execv(3)      */
  -    rc_script_t   *pBangscript = NULL;  /* Common script with the shebang  */
       rc_script_t   *pFatscript  = NULL;  /* To build a comprehensive script */
       rc_section_t **ppSectmp    = NULL;  /* Used with priority scheduling   */
       short          nTotalsecs  = vectorCount(configGetsecs()); /* Sections */
  @@ -323,8 +322,9 @@
                       size_t nSection = 0;
   
                       /* Allocate space just for string to prepare for verbose */
  -                    nSizverb = (strlen(RC_EXN_TEXT) + strlen(RC_DEF_NCF) * 2 \
  -                        + strlen(RC_ECHO_STR) + strlen("\"\"") + 1) * sizeof (char);
  +                    nSizverb = (strlen(RC_EXN_TEXT) + strlen(RC_DEF_NCF) + \
  +                        strlen(sectionGetparent(ppSectmp[nTmp])) + strlen(RC_ECHO_STR) + \
  +                        strlen("\"\"") + 1) * sizeof (char);
                       szVerbose = malloc(nSizverb);
                       sprintf(szVerbose, RC_EXN_TEXT, RC_DEF_NCF, sectionGetparent(ppSectmp[nTmp]));
   
  @@ -469,10 +469,6 @@
       else if (configGetval(RC_PRN_VAL)) {                        /* Print  */
           /* Allocate a block of section pointers to use as a temporary */
           ppSectmp = calloc(pRc->m_pList->m_nFiles, sizeof(rc_section_t *));
  -        pBangscript = scriptNew();
  -        scriptnAppend(pBangscript, RC_BANG_STR, strlen(RC_BANG_STR));
  -        scriptDump(pBangscript); /* Dump the shebang */
  -        scriptDelete(pBangscript);
   
           /* Conditionally output initial notice in verbal mode */
           if (configGetval(RC_VRB_VAL))
  @@ -481,17 +477,6 @@
           if (configGetval(RC_VRB_VAL))
               fprintf(stderr, "%s\n", RC_PNF_TEXT);
           scriptDump(pRc->m_pScriptfunc); /* Dump the funcs script */
  -        /* Conditionally print config section notice in verbal mode */
  -        if (configGetval(RC_VRB_VAL)) {
  -            nBytes = (strlen(RC_PRN_TEXT) + strlen(RC_DEF_NCF) * 2 + 2) * sizeof (char);
  -            szVerbose = malloc(nBytes);
  -            sprintf(szVerbose, RC_PRN_TEXT, RC_DEF_NCF, RC_DEF_NCF);
  -            strcat(szVerbose, "\n");
  -            fprintf(stderr, szVerbose);
  -            free(szVerbose);
  -            szVerbose = NULL;
  -        }
  -        scriptDump(pRc->m_pScriptcnf);  /* Dump the config script */
   
           for (nSecs = 0; nSecs < nTotalsecs; nSecs++) {
               for (nRcs = 0; nRcs < pRc->m_pList->m_nFiles; nRcs++) {
  @@ -505,12 +490,26 @@
               }
               qsort((void *)ppSectmp, (size_t)pRc->m_pList->m_nFiles, sizeof(rc_section_t *), priCompare);
               for (nTmp = 0; nTmp < pRc->m_pList->m_nFiles && ppSectmp[nTmp]; nTmp++) {
  -                /* Conditionally print each section notice in verbal mode */
                   if (configGetval(RC_VRB_VAL)) {
  +                    /* Conditionally print config section notice in verbal mode */
  +                    nBytes = (strlen(RC_PRN_TEXT) + strlen(RC_DEF_NCF) + \
  +                        strlen(sectionGetparent(ppSectmp[nTmp])) + 2) * sizeof (char);
  +                    szVerbose = malloc(nBytes);
  +                    sprintf(szVerbose, RC_PRN_TEXT, RC_DEF_NCF, sectionGetparent(ppSectmp[nTmp]));
  +                    strcat(szVerbose, "\n");
  +                    fprintf(stderr, szVerbose);
  +                    free(szVerbose);
  +                    szVerbose = NULL;
  +                }
  +                scriptDump(pRc->m_pScriptcnf);  /* Dump the config script */
  +
  +                if (configGetval(RC_VRB_VAL)) {
  +                    /* Conditionally print each section notice in verbal mode */
                       szTmp = (char *)sectionGetname(ppSectmp[nTmp]);
  -                    nBytes = (strlen(RC_PRN_TEXT) + strlen(szTmp) + 1) * sizeof (char);
  +                    nBytes = (strlen(RC_PRN_TEXT) + strlen(szTmp) + 2) * sizeof (char);
                       szVerbose = malloc(nBytes);
                       sprintf(szVerbose, RC_PRN_TEXT, szTmp, sectionGetparent(ppSectmp[nTmp]));
  +                    strcat(szVerbose, "\n");
                       fprintf(stderr, "%s", szVerbose);
                       free(szVerbose);
                       szVerbose = NULL;
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jun 30 18:14:59 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1A4577676E; Mon, 30 Jun 2003 18:14:59 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_proc.c ossp-pkg/rc/rc_test/ rc.samba
Message-Id: <20030630161459.1A4577676E@mail.ossp.org>
Date: Mon, 30 Jun 2003 18:14:59 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   30-Jun-2003 18:14:58
  Branch: HEAD                             Handle: 2003063017145800

  Modified files:
    ossp-pkg/rc             rc_proc.c
    ossp-pkg/rc/rc_test     rc.samba

  Log:
    Implement common section handling in print run mode.

  Summary:
    Revision    Changes     Path
    1.55        +28 -2      ossp-pkg/rc/rc_proc.c
    1.8         +3  -0      ossp-pkg/rc/rc_test/rc.samba
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.54 -r1.55 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	30 Jun 2003 15:58:49 -0000	1.54
  +++ ossp-pkg/rc/rc_proc.c	30 Jun 2003 16:14:58 -0000	1.55
  @@ -360,8 +360,10 @@
                               ppSectmp[nTmp]->m_szParent), configGetval(RC_CMN_VAL));
                           if (pComsec) { /* If we have a common section to load,  */
                               szTmp = (char *)sectionGetname(pComsec);
  -                            nSecverb = (strlen(RC_EXN_TEXT) + strlen(szTmp) * 2 \
  -                                + strlen(RC_ECHO_STR) + strlen("\"\"") + 1) * sizeof (char);
  +                            nSecverb = (strlen(RC_EXN_TEXT) + strlen(szTmp) + \
  +                                strlen (sectionGetparent(pComsec)) + \
  +                                strlen(RC_ECHO_STR) + strlen("\"\"") + 1) * \
  +                                sizeof (char);
                               realloc(szVerbose, nSecverb);
                               sprintf(szVerbose, RC_EXN_TEXT, szTmp, sectionGetparent(pComsec));
                               nSection = (strlen(szTmp) + 1) * sizeof (char);
  @@ -502,6 +504,30 @@
                       szVerbose = NULL;
                   }
                   scriptDump(pRc->m_pScriptcnf);  /* Dump the config script */
  +
  +                /* Examine our list, and try to take the corresponding */
  +                /* common section data from it to add to your script   */
  +                {
  +                    rc_section_t *pComsec = NULL;
  +                    pComsec = rcfileGetsec(listGetrcfile(pRc->m_pList, \
  +                        ppSectmp[nTmp]->m_szParent), configGetval(RC_CMN_VAL));
  +                    if (pComsec) { /* Do we have a common section to load? */
  +                        if (configGetval(RC_VRB_VAL)) {
  +                            szTmp = (char *)sectionGetname(pComsec);
  +                            nBytes = (strlen(RC_EXN_TEXT) + strlen(szTmp) + \
  +                                strlen (sectionGetparent(pComsec)) + \
  +                                strlen(RC_ECHO_STR) + strlen("\"\"") + 1) * \
  +                                sizeof (char);
  +                            szVerbose = malloc(nBytes);
  +                            sprintf(szVerbose, RC_PRN_TEXT, szTmp, sectionGetparent(pComsec));
  +                            strcat(szVerbose, "\n");
  +                            fprintf(stderr, "%s", szVerbose);
  +                            free(szVerbose);
  +                            szVerbose = NULL;
  +                        }
  +                    sectionDump(pComsec);
  +                    }
  +                }
   
                   if (configGetval(RC_VRB_VAL)) {
                       /* Conditionally print each section notice in verbal mode */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_test/rc.samba
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 rc.samba
  --- ossp-pkg/rc/rc_test/rc.samba	23 Jun 2003 15:46:06 -0000	1.7
  +++ ossp-pkg/rc/rc_test/rc.samba	30 Jun 2003 16:14:58 -0000	1.8
  @@ -13,6 +13,9 @@
       id -un
       whois cw.com
   
  +%common
  +    echo "Hier, der common section von samba ausgeprinted"
  +
   %destroy -u sw-n
       id -un
       ldd /usr/lib/libpcap.so
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jun 30 18:25:55 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E2F637676E; Mon, 30 Jun 2003 18:25:54 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_proc.c
Message-Id: <20030630162554.E2F637676E@mail.ossp.org>
Date: Mon, 30 Jun 2003 18:25:54 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   30-Jun-2003 18:25:54
  Branch: HEAD                             Handle: 2003063017255400

  Modified files:
    ossp-pkg/rc             rc_proc.c

  Log:
    Repair and improve config section handling in eval run mode.

  Summary:
    Revision    Changes     Path
    1.56        +17 -12     ossp-pkg/rc/rc_proc.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.55 -r1.56 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	30 Jun 2003 16:14:58 -0000	1.55
  +++ ossp-pkg/rc/rc_proc.c	30 Jun 2003 16:25:54 -0000	1.56
  @@ -202,17 +202,6 @@
               szVerbose = NULL;
           }
           scriptAdd(pFatscript, pRc->m_pScriptfunc);
  -        /* Conditionally print config section notice in verbal mode */
  -        if (configGetval(RC_VRB_VAL)) {
  -            nBytes = (strlen(RC_EVN_TEXT) + strlen(RC_DEF_NCF) * 2 + 2) * sizeof (char);
  -            szVerbose = malloc(nBytes);
  -            sprintf(szVerbose, RC_EVN_TEXT, RC_DEF_NCF, RC_DEF_NCF);
  -            strcat(szVerbose, "\n");
  -            scriptnAppend(pFatscript, szVerbose, strlen(szVerbose));
  -            free(szVerbose);
  -            szVerbose = NULL;
  -        }
  -        scriptAdd(pFatscript, pRc->m_pScriptcnf);
           for (nSecs = 0; nSecs < nTotalsecs; nSecs++) {
               for (nRcs = 0; nRcs < pRc->m_pList->m_nFiles; nRcs++) {
                   for (nTmp = 0; nTmp < pRc->m_pList->m_ppFilevec[nRcs]->m_nSecs && \
  @@ -226,6 +215,20 @@
               qsort((void *)ppSectmp, (size_t)pRc->m_pList->m_nFiles, \
                   sizeof(rc_section_t *), priCompare);
               for (nTmp = 0; nTmp < pRc->m_pList->m_nFiles && ppSectmp[nTmp]; nTmp++) {
  +                /* Conditionally print config section notice in verbal mode */
  +                if (configGetval(RC_VRB_VAL)) {
  +                    /* Conditionally print config section notice in verbal mode */
  +                    nBytes = (strlen(RC_PRN_TEXT) + strlen(RC_DEF_NCF) + \
  +                        strlen(sectionGetparent(ppSectmp[nTmp])) + 2) * sizeof (char);
  +                    szVerbose = malloc(nBytes);
  +                    sprintf(szVerbose, RC_PRN_TEXT, RC_DEF_NCF, sectionGetparent(ppSectmp[nTmp]));
  +                    strcat(szVerbose, "\n");
  +                    scriptnAppend(pFatscript, szVerbose, strlen(szVerbose));
  +                    free(szVerbose);
  +                    szVerbose = NULL;
  +                }
  +                scriptAdd(pFatscript, pRc->m_pScriptcnf);
  +
                   /* Conditionally print each section notice in verbal mode */
                   if (configGetval(RC_VRB_VAL)) {
                       szTmp = (char *)sectionGetname(ppSectmp[nTmp]);
  @@ -240,8 +243,10 @@
                   if ((szTmp = (char *)sectionGetlogin(ppSectmp[nTmp])) != NULL) {
                       scriptnAppend(pFatscript, "#su ", strlen("#su "));
                       scriptnAppend(pFatscript, szTmp, strlen(szTmp));
  -                    scriptnAppend(pFatscript, "\n", strlen("\n"));
                   }
  +                else
  +                    scriptnAppend(pFatscript, "#exit ", strlen("#exit "));
  +                scriptnAppend(pFatscript, "\n", strlen("\n"));
                   scriptAdd(pFatscript, sectionGetscript(ppSectmp[nTmp]));
               }
           }
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jun 30 18:32:54 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 133277676F; Mon, 30 Jun 2003 18:32:54 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_proc.c
Message-Id: <20030630163254.133277676F@mail.ossp.org>
Date: Mon, 30 Jun 2003 18:32:54 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   30-Jun-2003 18:32:53
  Branch: HEAD                             Handle: 2003063017325300

  Modified files:
    ossp-pkg/rc             rc_proc.c

  Log:
    Bugfix eval mode config handling logic, and implement eval mode common
    handling logic.

  Summary:
    Revision    Changes     Path
    1.57        +29 -6      ossp-pkg/rc/rc_proc.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.56 -r1.57 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	30 Jun 2003 16:25:54 -0000	1.56
  +++ ossp-pkg/rc/rc_proc.c	30 Jun 2003 16:32:53 -0000	1.57
  @@ -215,13 +215,12 @@
               qsort((void *)ppSectmp, (size_t)pRc->m_pList->m_nFiles, \
                   sizeof(rc_section_t *), priCompare);
               for (nTmp = 0; nTmp < pRc->m_pList->m_nFiles && ppSectmp[nTmp]; nTmp++) {
  -                /* Conditionally print config section notice in verbal mode */
                   if (configGetval(RC_VRB_VAL)) {
  -                    /* Conditionally print config section notice in verbal mode */
  -                    nBytes = (strlen(RC_PRN_TEXT) + strlen(RC_DEF_NCF) + \
  +                    /* Conditionally evaluate config section notice in verbal mode */
  +                    nBytes = (strlen(RC_EVN_TEXT) + strlen(RC_DEF_NCF) + \
                           strlen(sectionGetparent(ppSectmp[nTmp])) + 2) * sizeof (char);
                       szVerbose = malloc(nBytes);
  -                    sprintf(szVerbose, RC_PRN_TEXT, RC_DEF_NCF, sectionGetparent(ppSectmp[nTmp]));
  +                    sprintf(szVerbose, RC_EVN_TEXT, RC_DEF_NCF, sectionGetparent(ppSectmp[nTmp]));
                       strcat(szVerbose, "\n");
                       scriptnAppend(pFatscript, szVerbose, strlen(szVerbose));
                       free(szVerbose);
  @@ -229,6 +228,30 @@
                   }
                   scriptAdd(pFatscript, pRc->m_pScriptcnf);
   
  +                /* Examine our list, and try to take the corresponding */
  +                /* common section data from it to add to your script   */
  +                {
  +                    rc_section_t *pComsec = NULL;
  +                    pComsec = rcfileGetsec(listGetrcfile(pRc->m_pList, \
  +                        ppSectmp[nTmp]->m_szParent), configGetval(RC_CMN_VAL));
  +                    if (pComsec) { /* Do we have a common section to load? */
  +                        if (configGetval(RC_VRB_VAL)) {
  +                            szTmp = (char *)sectionGetname(pComsec);
  +                            nBytes = (strlen(RC_EVN_TEXT) + strlen(szTmp) + \
  +                                strlen (sectionGetparent(pComsec)) + \
  +                                strlen(RC_ECHO_STR) + strlen("\"\"") + 1) * \
  +                                sizeof (char);
  +                            szVerbose = malloc(nBytes);
  +                            sprintf(szVerbose, RC_EVN_TEXT, szTmp, sectionGetparent(pComsec));
  +                            strcat(szVerbose, "\n");
  +                            scriptnAppend(pFatscript, szVerbose, strlen(szVerbose));
  +                            free(szVerbose);
  +                            szVerbose = NULL;
  +                        }
  +                        scriptAdd(pFatscript, sectionGetscript(pComsec));
  +                    }
  +                }
  +
                   /* Conditionally print each section notice in verbal mode */
                   if (configGetval(RC_VRB_VAL)) {
                       szTmp = (char *)sectionGetname(ppSectmp[nTmp]);
  @@ -519,7 +542,7 @@
                       if (pComsec) { /* Do we have a common section to load? */
                           if (configGetval(RC_VRB_VAL)) {
                               szTmp = (char *)sectionGetname(pComsec);
  -                            nBytes = (strlen(RC_EXN_TEXT) + strlen(szTmp) + \
  +                            nBytes = (strlen(RC_PRN_TEXT) + strlen(szTmp) + \
                                   strlen (sectionGetparent(pComsec)) + \
                                   strlen(RC_ECHO_STR) + strlen("\"\"") + 1) * \
                                   sizeof (char);
  @@ -530,7 +553,7 @@
                               free(szVerbose);
                               szVerbose = NULL;
                           }
  -                    sectionDump(pComsec);
  +                        sectionDump(pComsec);
                       }
                   }
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jul  1 15:26:27 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 77D507676F; Tue,  1 Jul 2003 15:26:26 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc.c rc.h rc_proc.c
Message-Id: <20030701132626.77D507676F@mail.ossp.org>
Date: Tue,  1 Jul 2003 15:26:26 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   01-Jul-2003 15:26:26
  Branch: HEAD                             Handle: 2003070114262500

  Modified files:
    ossp-pkg/rc             rc.c rc.h rc_proc.c

  Log:
    Processor separation, removing logic from generic procRun method and
    implementing procEval, procExec, procPrint, and procParse methods.

  Summary:
    Revision    Changes     Path
    1.42        +7  -7      ossp-pkg/rc/rc.c
    1.56        +4  -0      ossp-pkg/rc/rc.h
    1.58        +470 -408   ossp-pkg/rc/rc_proc.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc.c
  ============================================================================
  $ cvs diff -u -r1.41 -r1.42 rc.c
  --- ossp-pkg/rc/rc.c	1 Aug 2002 11:59:55 -0000	1.41
  +++ ossp-pkg/rc/rc.c	1 Jul 2003 13:26:25 -0000	1.42
  @@ -47,15 +47,15 @@
       catch(Except)               /* Exceptions of the configuration block      */
           rcError(Except);
   
  -    try {                       /* Main processing block, script built here   */
  +    try {                       /* Main processing block, script built */
           rc_proc_t *pProc = NULL;
  -        pProc = procNew();      /* Construct a new processor, build script    */
  -        procPopulate(pProc);    /* Populate with run commands                 */
  -        procRun(pProc);         /* [Execute|Evaluate|Print] script            */
  -        procDelete(pProc);      /* Destroy the processor                      */
  -        configDelete();         /* Destroy the configuration                  */
  +        pProc = procNew();      /* Construct a new processor           */
  +        procPopulate(pProc);    /* Populate with run commands          */
  +        procRun(pProc);         /* [Execute|Evaluate|Print] script     */
  +        procDelete(pProc);      /* Destroy the processor               */
  +        configDelete();         /* Destroy the configuration           */
       }
  -    catch(Except)               /* Exception thrown while script processing   */
  +    catch(Except)               /* Exceptions while script processing  */
           rcError(Except);
   
       exit(0);                    /* Return success */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc.h
  ============================================================================
  $ cvs diff -u -r1.55 -r1.56 rc.h
  --- ossp-pkg/rc/rc.h	30 Jun 2003 15:27:38 -0000	1.55
  +++ ossp-pkg/rc/rc.h	1 Jul 2003 13:26:25 -0000	1.56
  @@ -157,6 +157,10 @@
   rc_return_t procDelete(rc_proc_t *);
   rc_return_t procPopulate(rc_proc_t *);
   rc_return_t procRun(rc_proc_t *);
  +rc_return_t procEval(rc_proc_t *);
  +rc_return_t procExec(rc_proc_t *);
  +rc_return_t procPrint(rc_proc_t *);
  +rc_return_t procParse(rc_proc_t *);
   
   /* Utility (nonbounded) function prototypes */
   char *strErr(rc_return_t);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.57 -r1.58 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	30 Jun 2003 16:32:53 -0000	1.57
  +++ ossp-pkg/rc/rc_proc.c	1 Jul 2003 13:26:25 -0000	1.58
  @@ -147,391 +147,346 @@
       return(RC_THROW(RC_OK));
   }
   
  +/*******************************************
  +* procRun(rc_proc_t *)                     *
  +* Run the processed run-command script     *
  +* Exec  - Fork and execute each command    *
  +* Eval  - Print machine evaluatable format *
  +* Print - Print human readable format      *
  +*******************************************/
  +rc_return_t procRun(rc_proc_t *pRc)
  +{
  +    if (configGetval(RC_EVL_VAL))       /* Evaluate */
  +        return(procEval(pRc));
  +    else if (configGetval(RC_EXC_VAL))  /* Execute */
  +        return(procExec(pRc));
  +    else if (configGetval(RC_PRN_VAL))  /* Print  */
  +        return(procPrint(pRc));
  +    else if (configGetval(RC_PAR_VAL))  /* Parse */
  +        return(procParse(pRc));
  +    else
  +        return(RC_ERR_INT); /* Run mode was not correctly set */
  +}
  +
   /************************************************
  -* procRun(rc_proc_t *)                          *
  -* Run the processed run-command script          *
  +* procEval(rc_proc_t *)                         *
  +* Evaluate the run-command script               *
   ************************************************/
  -rc_return_t procRun(rc_proc_t *pRc)
  +rc_return_t procEval(rc_proc_t *pRc)
   {
  -    int   nTmp      = 0;                /* Generic index       */
  -    size_t nBytes   = 0;                /* Size in bytes       */
  -    int   nTmpname  = 0;                /* Temp file name size */
  -    int   nRcs      = 0;                /* Rc index            */
  -    int   nSecs     = 0;                /* Section index       */
  -    int   nSectuid  = -1;               /* The section's user id           */
  -    int   nRunuid   = -1;               /* The current user id             */
  -    pid_t Pidexec   = -1;               /* When spawning before execv(3)   */
  -    char *szTmpfile = NULL;             /* Path of temporary file          */
  -    char *szTmp     = NULL;             /* Generic temporary string        */
  -    char *szFunc    = NULL;             /* Stores func script text         */
  -    char *szCnf     = NULL;             /* Stores config script text       */
  -    char *szExec    = NULL;             /* Used only during exec mode      */
  -    char *szVerbose = NULL;             /* Used when handling verbose mode */
  -    char *pszVec[RC_EXEC_MAXARGS];      /* For passing in to execv(3)      */
  -    rc_script_t   *pFatscript  = NULL;  /* To build a comprehensive script */
  -    rc_section_t **ppSectmp    = NULL;  /* Used with priority scheduling   */
  -    short          nTotalsecs  = vectorCount(configGetsecs()); /* Sections */
  -
  -    /****************************************************/
  -    /* This will execute, evaluate, or print the script */
  -    /* Exec  - Fork and execute each command            */
  -    /* Eval  - Print machine evaluatable format         */
  -    /* Print - Print human readable format              */
  -    /****************************************************/
  -    if (configGetval(RC_EVL_VAL)) {                             /* Evaluate */
  -        /* Allocate a block of section pointers to use temporarily */
  -        ppSectmp = calloc(pRc->m_pList->m_nFiles, sizeof(rc_section_t *));
  -        pFatscript = scriptNew();
  -        scriptnAppend(pFatscript, RC_BANG_STR, strlen(RC_BANG_STR)); /* Shebang */
  -        /* Conditionally output initial notice in verbal mode */
  -        if (configGetval(RC_VRB_VAL)) {
  -            szVerbose = malloc((strlen(RC_VST_TEXT) + 2) * sizeof (char));
  -            sprintf(szVerbose, "%s", RC_VST_TEXT);
  -            strcat(szVerbose, "\n");
  -            scriptnAppend(pFatscript, szVerbose, strlen(szVerbose));
  -            free(szVerbose);
  -            szVerbose = NULL;
  -        }
  -        /* Conditionally print funcs section notice in verbal mode */
  -        if (configGetval(RC_VRB_VAL)) {
  -            szVerbose = malloc((strlen(RC_EVF_TEXT) + 2) * sizeof (char));
  -            sprintf(szVerbose, "%s", RC_EVF_TEXT);
  -            strcat(szVerbose, "\n");
  -            scriptnAppend(pFatscript, szVerbose, strlen(szVerbose));
  -            free(szVerbose);
  -            szVerbose = NULL;
  +    short  nSecs      = 0;                      /* Section index  */
  +    short  nTotalsecs = vectorCount(configGetsecs()); /* Sections */
  +    short  nRcs       = 0;                      /* Rc index       */
  +    int    nTmp       = 0;                      /* Generic index  */
  +    size_t nTmpname   = 0;                      /* Temp name size */
  +    size_t nBytes     = 0;                      /* Size in bytes  */
  +
  +    char *szTmp     = NULL;           /* Generic temporary string */
  +    char *szTmpfile = NULL;           /* Path of temporary file   */
  +    char *szVerbose = NULL;           /* Used when handling verbose mode */
  +
  +    rc_section_t **ppSectmp   = NULL; /* Used with priority scheduling   */
  +    rc_script_t   *pFatscript = NULL; /* To build a comprehensive script */
  +
  +    /* Allocate a block of section pointers to use temporarily */
  +    ppSectmp = calloc(pRc->m_pList->m_nFiles, sizeof(rc_section_t *));
  +    pFatscript = scriptNew();
  +    scriptnAppend(pFatscript, RC_BANG_STR, strlen(RC_BANG_STR)); /* Shebang */
  +    /* Conditionally output initial notice in verbal mode */
  +    if (configGetval(RC_VRB_VAL)) {
  +        szVerbose = malloc((strlen(RC_VST_TEXT) + 2) * sizeof (char));
  +        sprintf(szVerbose, "%s", RC_VST_TEXT);
  +        strcat(szVerbose, "\n");
  +        scriptnAppend(pFatscript, szVerbose, strlen(szVerbose));
  +        free(szVerbose);
  +        szVerbose = NULL;
  +    }
  +    /* Conditionally print funcs section notice in verbal mode */
  +    if (configGetval(RC_VRB_VAL)) {
  +        szVerbose = malloc((strlen(RC_EVF_TEXT) + 2) * sizeof (char));
  +        sprintf(szVerbose, "%s", RC_EVF_TEXT);
  +        strcat(szVerbose, "\n");
  +        scriptnAppend(pFatscript, szVerbose, strlen(szVerbose));
  +        free(szVerbose);
  +        szVerbose = NULL;
  +    }
  +    scriptAdd(pFatscript, pRc->m_pScriptfunc);
  +    for (nSecs = 0; nSecs < nTotalsecs; nSecs++) {
  +        for (nRcs = 0; nRcs < pRc->m_pList->m_nFiles; nRcs++) {
  +            for (nTmp = 0; nTmp < pRc->m_pList->m_ppFilevec[nRcs]->m_nSecs && \
  +                strcmp(pRc->m_pList->m_ppFilevec[nRcs]->m_ppSecvec[nTmp]->m_szName, \
  +                configGetsecs()[nSecs]); nTmp++);
  +            if (nTmp < pRc->m_pList->m_ppFilevec[nRcs]->m_nSecs)
  +                ppSectmp[nRcs] = pRc->m_pList->m_ppFilevec[nRcs]->m_ppSecvec[nTmp];
  +            else
  +                ppSectmp[nRcs] = NULL;
           }
  -        scriptAdd(pFatscript, pRc->m_pScriptfunc);
  -        for (nSecs = 0; nSecs < nTotalsecs; nSecs++) {
  -            for (nRcs = 0; nRcs < pRc->m_pList->m_nFiles; nRcs++) {
  -                for (nTmp = 0; nTmp < pRc->m_pList->m_ppFilevec[nRcs]->m_nSecs && \
  -                    strcmp(pRc->m_pList->m_ppFilevec[nRcs]->m_ppSecvec[nTmp]->m_szName, \
  -                    configGetsecs()[nSecs]); nTmp++);
  -                if (nTmp < pRc->m_pList->m_ppFilevec[nRcs]->m_nSecs)
  -                    ppSectmp[nRcs] = pRc->m_pList->m_ppFilevec[nRcs]->m_ppSecvec[nTmp];
  -                else
  -                    ppSectmp[nRcs] = NULL;
  +        qsort((void *)ppSectmp, (size_t)pRc->m_pList->m_nFiles, \
  +            sizeof(rc_section_t *), priCompare);
  +        for (nTmp = 0; nTmp < pRc->m_pList->m_nFiles && ppSectmp[nTmp]; nTmp++) {
  +            if (configGetval(RC_VRB_VAL)) {
  +                /* Conditionally evaluate config section notice in verbal mode */
  +                nBytes = (strlen(RC_EVN_TEXT) + strlen(RC_DEF_NCF) + \
  +                    strlen(sectionGetparent(ppSectmp[nTmp])) + 2) * sizeof (char);
  +                szVerbose = malloc(nBytes);
  +                sprintf(szVerbose, RC_EVN_TEXT, RC_DEF_NCF, sectionGetparent(ppSectmp[nTmp]));
  +                strcat(szVerbose, "\n");
  +                scriptnAppend(pFatscript, szVerbose, strlen(szVerbose));
  +                free(szVerbose);
  +                szVerbose = NULL;
               }
  -            qsort((void *)ppSectmp, (size_t)pRc->m_pList->m_nFiles, \
  -                sizeof(rc_section_t *), priCompare);
  -            for (nTmp = 0; nTmp < pRc->m_pList->m_nFiles && ppSectmp[nTmp]; nTmp++) {
  -                if (configGetval(RC_VRB_VAL)) {
  -                    /* Conditionally evaluate config section notice in verbal mode */
  -                    nBytes = (strlen(RC_EVN_TEXT) + strlen(RC_DEF_NCF) + \
  -                        strlen(sectionGetparent(ppSectmp[nTmp])) + 2) * sizeof (char);
  -                    szVerbose = malloc(nBytes);
  -                    sprintf(szVerbose, RC_EVN_TEXT, RC_DEF_NCF, sectionGetparent(ppSectmp[nTmp]));
  -                    strcat(szVerbose, "\n");
  -                    scriptnAppend(pFatscript, szVerbose, strlen(szVerbose));
  -                    free(szVerbose);
  -                    szVerbose = NULL;
  -                }
  -                scriptAdd(pFatscript, pRc->m_pScriptcnf);
  +            scriptAdd(pFatscript, pRc->m_pScriptcnf);
   
  -                /* Examine our list, and try to take the corresponding */
  -                /* common section data from it to add to your script   */
  -                {
  -                    rc_section_t *pComsec = NULL;
  -                    pComsec = rcfileGetsec(listGetrcfile(pRc->m_pList, \
  -                        ppSectmp[nTmp]->m_szParent), configGetval(RC_CMN_VAL));
  -                    if (pComsec) { /* Do we have a common section to load? */
  -                        if (configGetval(RC_VRB_VAL)) {
  -                            szTmp = (char *)sectionGetname(pComsec);
  -                            nBytes = (strlen(RC_EVN_TEXT) + strlen(szTmp) + \
  -                                strlen (sectionGetparent(pComsec)) + \
  -                                strlen(RC_ECHO_STR) + strlen("\"\"") + 1) * \
  -                                sizeof (char);
  -                            szVerbose = malloc(nBytes);
  -                            sprintf(szVerbose, RC_EVN_TEXT, szTmp, sectionGetparent(pComsec));
  -                            strcat(szVerbose, "\n");
  -                            scriptnAppend(pFatscript, szVerbose, strlen(szVerbose));
  -                            free(szVerbose);
  -                            szVerbose = NULL;
  -                        }
  -                        scriptAdd(pFatscript, sectionGetscript(pComsec));
  +            /* Examine our list, and try to take the corresponding */
  +            /* common section data from it to add to your script   */
  +            {
  +                rc_section_t *pComsec = NULL;
  +                pComsec = rcfileGetsec(listGetrcfile(pRc->m_pList, \
  +                    ppSectmp[nTmp]->m_szParent), configGetval(RC_CMN_VAL));
  +                if (pComsec) { /* Do we have a common section to load? */
  +                    if (configGetval(RC_VRB_VAL)) {
  +                        szTmp = (char *)sectionGetname(pComsec);
  +                        nBytes = (strlen(RC_EVN_TEXT) + strlen(szTmp) + \
  +                            strlen (sectionGetparent(pComsec)) + \
  +                            strlen(RC_ECHO_STR) + strlen("\"\"") + 1) * \
  +                            sizeof (char);
  +                        szVerbose = malloc(nBytes);
  +                        sprintf(szVerbose, RC_EVN_TEXT, szTmp, sectionGetparent(pComsec));
  +                        strcat(szVerbose, "\n");
  +                        scriptnAppend(pFatscript, szVerbose, strlen(szVerbose));
  +                        free(szVerbose);
  +                        szVerbose = NULL;
                       }
  +                    scriptAdd(pFatscript, sectionGetscript(pComsec));
                   }
  +            }
   
  -                /* Conditionally print each section notice in verbal mode */
  -                if (configGetval(RC_VRB_VAL)) {
  -                    szTmp = (char *)sectionGetname(ppSectmp[nTmp]);
  -                    nBytes = (strlen(RC_EVN_TEXT) + strlen(szTmp) + 2) * sizeof (char);
  -                    szVerbose = malloc(nBytes);
  -                    sprintf(szVerbose, RC_EVN_TEXT, szTmp, sectionGetparent(ppSectmp[nTmp]));
  -                    strcat(szVerbose, "\n");
  -                    scriptnAppend(pFatscript, szVerbose, strlen(szVerbose));
  -                    free(szVerbose);
  -                    szVerbose = NULL;
  -                }
  -                if ((szTmp = (char *)sectionGetlogin(ppSectmp[nTmp])) != NULL) {
  -                    scriptnAppend(pFatscript, "#su ", strlen("#su "));
  -                    scriptnAppend(pFatscript, szTmp, strlen(szTmp));
  -                }
  -                else
  -                    scriptnAppend(pFatscript, "#exit ", strlen("#exit "));
  -                scriptnAppend(pFatscript, "\n", strlen("\n"));
  -                scriptAdd(pFatscript, sectionGetscript(ppSectmp[nTmp]));
  +            /* Conditionally print each section notice in verbal mode */
  +            if (configGetval(RC_VRB_VAL)) {
  +                szTmp = (char *)sectionGetname(ppSectmp[nTmp]);
  +                nBytes = (strlen(RC_EVN_TEXT) + strlen(szTmp) + 2) * sizeof (char);
  +                szVerbose = malloc(nBytes);
  +                sprintf(szVerbose, RC_EVN_TEXT, szTmp, sectionGetparent(ppSectmp[nTmp]));
  +                strcat(szVerbose, "\n");
  +                scriptnAppend(pFatscript, szVerbose, strlen(szVerbose));
  +                free(szVerbose);
  +                szVerbose = NULL;
               }
  +            if ((szTmp = (char *)sectionGetlogin(ppSectmp[nTmp])) != NULL) {
  +                scriptnAppend(pFatscript, "#su ", strlen("#su "));
  +                scriptnAppend(pFatscript, szTmp, strlen(szTmp));
  +            }
  +            else
  +                scriptnAppend(pFatscript, "#exit ", strlen("#exit "));
  +            scriptnAppend(pFatscript, "\n", strlen("\n"));
  +            scriptAdd(pFatscript, sectionGetscript(ppSectmp[nTmp]));
           }
  -        free(ppSectmp);
  -        ppSectmp = NULL;
  -
  -        szTmpfile = (char *)configGetval(RC_TMP_VAL);
  -        nTmpname = (strlen(szTmpfile) + strlen(RC_EVL_TMP) + \
  -                    strlen(RC_EVL_SUF) + 1) * sizeof(char);
  -        if (*(szTmpfile + (strlen(szTmpfile) - 1) * sizeof(char)) != '/')
  -            nTmpname += sizeof(char);
  -        szTmpfile = malloc(nTmpname);
  -        strcpy(szTmpfile, configGetval(RC_TMP_VAL));
  -        if (*(szTmpfile + (strlen(szTmpfile) - 1) * sizeof(char)) != '/')
  -            strcat(szTmpfile, "/");
  -        strcat(szTmpfile, RC_EVL_TMP);
  -        mktemp(szTmpfile);
  -        strcat(szTmpfile, RC_EVL_SUF);
  -        scriptWrite(pFatscript, szTmpfile); /* Write the whole script out */
  -
  -        /* Conditionally don't remove the temp file (see constants) */
  -        if (configGetval(RC_DBG_VAL))
  -            fprintf(stdout, RC_EVL_DBG, szTmpfile);
  -        else
  -            fprintf(stdout, RC_EVL_OUT, szTmpfile, szTmpfile);
  -
  -        /* Cleanup eval processing crap */
  -        free(szTmpfile);
  -        szTmpfile = NULL;
  -        scriptDelete(pFatscript);
  -        pFatscript = NULL;
       }
  -    else if (configGetval(RC_EXC_VAL)) {                        /* Execute  */
  -        int nStat; /* Used for reporting status on return of a forked child */
  +    free(ppSectmp);
  +    ppSectmp = NULL;
   
  -        /* This block does nothing more than implement the feature,         */
  -        /* that allows rc to run unprivileged (as long as no privileged     */
  -        /* code is used in the script sections to be executed               */
  -        for (nSecs = 0; nSecs < nTotalsecs; nSecs++) {
  -            for (nTmp = 0; nTmp < pRc->m_pList->m_nFiles; nTmp++) {
  -                if (pRc->m_pList->m_ppFilevec[nTmp]->m_ppSecvec && \
  -                    pRc->m_pList->m_ppFilevec[nTmp]->m_ppSecvec[nSecs]) {
  -                    nRunuid = getuid();
  -                    nSectuid = pRc->m_pList->m_ppFilevec[nTmp]->m_ppSecvec[nSecs]->m_nUid;
  -                    /* See if root user status is needed, and bail out if so */
  -                    if (nRunuid != 0 && nSectuid != -1 && nRunuid != nSectuid) {
  -                        fprintf(stderr, RC_RUT_TEXT);
  -                        return(RC_THROW(RC_ERR_USE));
  -                    }
  +    szTmpfile = (char *)configGetval(RC_TMP_VAL);
  +    nTmpname = (strlen(szTmpfile) + strlen(RC_EVL_TMP) + \
  +                strlen(RC_EVL_SUF) + 1) * sizeof(char);
  +    if (*(szTmpfile + (strlen(szTmpfile) - 1) * sizeof(char)) != '/')
  +        nTmpname += sizeof(char);
  +    szTmpfile = malloc(nTmpname);
  +    strcpy(szTmpfile, configGetval(RC_TMP_VAL));
  +    if (*(szTmpfile + (strlen(szTmpfile) - 1) * sizeof(char)) != '/')
  +        strcat(szTmpfile, "/");
  +    strcat(szTmpfile, RC_EVL_TMP);
  +    mktemp(szTmpfile);
  +    strcat(szTmpfile, RC_EVL_SUF);
  +    scriptWrite(pFatscript, szTmpfile); /* Write the whole script out */
  +
  +    /* Conditionally don't remove the temp file (see constants) */
  +    if (configGetval(RC_DBG_VAL))
  +        fprintf(stdout, RC_EVL_DBG, szTmpfile);
  +    else
  +        fprintf(stdout, RC_EVL_OUT, szTmpfile, szTmpfile);
  +
  +    /* Cleanup eval processing crap */
  +    free(szTmpfile);
  +    szTmpfile = NULL;
  +    scriptDelete(pFatscript);
  +    pFatscript = NULL;
  +
  +    return(RC_THROW(RC_OK));
  +}
  +
  +/************************************************
  +* procExec(rc_proc_t *)                         *
  +* Execute the run-command script                *
  +************************************************/
  +rc_return_t procExec(rc_proc_t *pRc)
  +{
  +    short nRcs       =  0;                      /* Rc index       */
  +    short nSecs      =  0;                      /* Section index  */
  +    short nTotalsecs =  vectorCount(configGetsecs()); /* Sections */
  +    rc_section_t **ppSectmp = NULL; /* Used with priority scheduling */
  +
  +    int   nRunuid    = -1;                 /* The current user id */
  +    int   nSectuid   = -1;               /* The section's user id */
  +    int   nTmp       =  0;             /* Generic temporary index */
  +    int   nStat      =  0;                 /* Status forked child */
  +
  +    pid_t Pidexec    = -1;            /* Spawning before execv(3) */
  +    char *pszVec[RC_EXEC_MAXARGS];  /* For passing in to execv(3) */
  +    char *szTmp     = NULL;           /* Generic temporary string */
  +    char *szFunc    = NULL;          /* Stores func script text   */
  +    char *szCnf     = NULL;          /* Stores config script text */
  +    char *szExec    = NULL;         /* Used only during exec mode */
  +    char *szVerbose = NULL;    /* Used when handling verbose mode */
  +
  +    /* This block does nothing more than implement the feature,     */
  +    /* that allows rc to run unprivileged (as long as no privileged */
  +    /* code is used in the script sections to be executed           */
  +    for (nSecs = 0; nSecs < nTotalsecs; nSecs++) {
  +        for (nTmp = 0; nTmp < pRc->m_pList->m_nFiles; nTmp++) {
  +            if (pRc->m_pList->m_ppFilevec[nTmp]->m_ppSecvec && \
  +                pRc->m_pList->m_ppFilevec[nTmp]->m_ppSecvec[nSecs]) {
  +                nRunuid = getuid();
  +                nSectuid = pRc->m_pList->m_ppFilevec[nTmp]->m_ppSecvec[nSecs]->m_nUid;
  +                /* See if root user status is needed, and bail out if so */
  +                if (nRunuid != 0 && nSectuid != -1 && nRunuid != nSectuid) {
  +                    fprintf(stderr, RC_RUT_TEXT);
  +                    return(RC_THROW(RC_ERR_USE));
                   }
               }
           }
  -        /* Allocate a block of section pointers to use temporarily */
  -        ppSectmp = calloc(pRc->m_pList->m_nFiles, sizeof(rc_section_t *));
  -        szFunc = (char *)scriptGetdata(pRc->m_pScriptfunc);
  -        szCnf  = (char *)scriptGetdata(pRc->m_pScriptcnf);
  -        for (nSecs = 0; nSecs < nTotalsecs; nSecs++) {
  -            for (nRcs = 0; nRcs < pRc->m_pList->m_nFiles; nRcs++) {
  -                for (nTmp = 0; nTmp < pRc->m_pList->m_ppFilevec[nRcs]->m_nSecs && \
  -                    strcmp(pRc->m_pList->m_ppFilevec[nRcs]->m_ppSecvec[nTmp]->m_szName, \
  -                                configGetsecs()[nSecs]); nTmp++);
  -                if (nTmp < pRc->m_pList->m_ppFilevec[nRcs]->m_nSecs)
  -                    ppSectmp[nRcs] = pRc->m_pList->m_ppFilevec[nRcs]->m_ppSecvec[nTmp];
  -                else
  -                    ppSectmp[nRcs] = NULL;
  -            }
  -            qsort((void *)ppSectmp, (size_t)pRc->m_pList->m_nFiles, sizeof(rc_section_t *), priCompare);
  -            pszVec[0] = "/bin/sh";  /* Run the bourne shell over the following */
  -            pszVec[1] = "-c";       /* Append script code of the sections */
  -            pszVec[3] = NULL;       /* Add a NULL to mark the end of the chain */
  -            nTmp = 0; /* Count from zero until however many sections we have */
  -            while (nTmp < pRc->m_pList->m_nFiles && ppSectmp[nTmp]) {
  -                /* Conditionally print config and other section notices in verbal mode */
  -                if (configGetval(RC_VRB_VAL)) { /* Verbose mode is active */
  -                    size_t nSizverb = 0;
  -                    size_t nPrescr  = 0;
  -                    size_t nSecverb = 0;
  -                    size_t nSection = 0;
  -
  -                    /* Allocate space just for string to prepare for verbose */
  -                    nSizverb = (strlen(RC_EXN_TEXT) + strlen(RC_DEF_NCF) + \
  -                        strlen(sectionGetparent(ppSectmp[nTmp])) + strlen(RC_ECHO_STR) + \
  -                        strlen("\"\"") + 1) * sizeof (char);
  -                    szVerbose = malloc(nSizverb);
  -                    sprintf(szVerbose, RC_EXN_TEXT, RC_DEF_NCF, sectionGetparent(ppSectmp[nTmp]));
  -
  -                    /* Allocate space for entire string to execvp(3) */
  -                    nPrescr = (strlen(RC_VST_TEXT) + strlen(RC_EXF_TEXT) + \
  -                        strlen(szVerbose) + strlen(szFunc) + strlen(szCnf) + \
  -                        strlen(RC_BANG_STR) + 1) * sizeof (char);
  -                    szExec = malloc(nSizverb + nPrescr);
  -
  -                    strcpy(szExec, RC_BANG_STR);    /* Start out with the bang string */
  -                    strcat(szExec, RC_ECHO_STR);    /* Continue with the echo string */
  -                    strcat(szExec, "\"");           /* Append a quote next to the echo */
  -                    strcat(szExec, RC_VST_TEXT);    /* Continue with the start text */
  -
  -                    if (strlen(szFunc) > 0) {
  -                        strcat(szExec, "\n");        /* Stick a newline inbetween */
  -                        strcat(szExec, RC_EXF_TEXT); /* Continue with the func text */
  -                    }
  +    }
  +    /* Allocate a block of section pointers to use temporarily */
  +    ppSectmp = calloc(pRc->m_pList->m_nFiles, sizeof(rc_section_t *));
  +    szFunc = (char *)scriptGetdata(pRc->m_pScriptfunc);
  +    szCnf  = (char *)scriptGetdata(pRc->m_pScriptcnf);
  +    for (nSecs = 0; nSecs < nTotalsecs; nSecs++) {
  +        for (nRcs = 0; nRcs < pRc->m_pList->m_nFiles; nRcs++) {
  +            for (nTmp = 0; nTmp < pRc->m_pList->m_ppFilevec[nRcs]->m_nSecs && \
  +                strcmp(pRc->m_pList->m_ppFilevec[nRcs]->m_ppSecvec[nTmp]->m_szName, \
  +                            configGetsecs()[nSecs]); nTmp++);
  +            if (nTmp < pRc->m_pList->m_ppFilevec[nRcs]->m_nSecs)
  +                ppSectmp[nRcs] = pRc->m_pList->m_ppFilevec[nRcs]->m_ppSecvec[nTmp];
  +            else
  +                ppSectmp[nRcs] = NULL;
  +        }
  +        qsort((void *)ppSectmp, (size_t)pRc->m_pList->m_nFiles, sizeof(rc_section_t *), priCompare);
  +        pszVec[0] = "/bin/sh";  /* Run the bourne shell over the following */
  +        pszVec[1] = "-c";       /* Append script code of the sections */
  +        pszVec[3] = NULL;       /* Add a NULL to mark the end of the chain */
  +        nTmp = 0; /* Count from zero until however many sections we have */
  +        while (nTmp < pRc->m_pList->m_nFiles && ppSectmp[nTmp]) {
  +            /* Conditionally print config and other section notices in verbal mode */
  +            if (configGetval(RC_VRB_VAL)) { /* Verbose mode is active */
  +                size_t nSizverb = 0;
  +                size_t nPrescr  = 0;
  +                size_t nSecverb = 0;
  +                size_t nSection = 0;
  +
  +                /* Allocate space just for string to prepare for verbose */
  +                nSizverb = (strlen(RC_EXN_TEXT) + strlen(RC_DEF_NCF) + \
  +                    strlen(sectionGetparent(ppSectmp[nTmp])) + strlen(RC_ECHO_STR) + \
  +                    strlen("\"\"") + 1) * sizeof (char);
  +                szVerbose = malloc(nSizverb);
  +                sprintf(szVerbose, RC_EXN_TEXT, RC_DEF_NCF, sectionGetparent(ppSectmp[nTmp]));
  +
  +                /* Allocate space for entire string to execvp(3) */
  +                nPrescr = (strlen(RC_VST_TEXT) + strlen(RC_EXF_TEXT) + \
  +                    strlen(szVerbose) + strlen(szFunc) + strlen(szCnf) + \
  +                    strlen(RC_BANG_STR) + 1) * sizeof (char);
  +                szExec = malloc(nSizverb + nPrescr);
  +
  +                strcpy(szExec, RC_BANG_STR);    /* Start out with the bang string */
  +                strcat(szExec, RC_ECHO_STR);    /* Continue with the echo string */
  +                strcat(szExec, "\"");           /* Append a quote next to the echo */
  +                strcat(szExec, RC_VST_TEXT);    /* Continue with the start text */
  +
  +                if (strlen(szFunc) > 0) {
  +                    strcat(szExec, "\n");        /* Stick a newline inbetween */
  +                    strcat(szExec, RC_EXF_TEXT); /* Continue with the func text */
  +                }
   
  -                    strcat(szExec, "\";");          /* Finalize the verbosity notice */
  -                    strcat(szExec, szFunc);         /* Continue with the funcs script code */
  -                    strcat(szExec, RC_ECHO_STR);    /* Continue with the echo string */
  -                    strcat(szExec, "\"");           /* Append a quote next to the echo */
  -                    strcat(szExec, szVerbose);      /* Continue with the config text */
  -                    strcat(szExec, "\";");          /* Finalize the verbosity notice */
  -                    strcat(szExec, szCnf);          /* Then with the config script code  */
  -
  -                    /* Examine our list, and try to take the corresponding */
  -                    /* common section data from it to add to your script   */
  -                    {
  -                        rc_section_t *pComsec = NULL;
  -                        pComsec = rcfileGetsec(listGetrcfile(pRc->m_pList, \
  -                            ppSectmp[nTmp]->m_szParent), configGetval(RC_CMN_VAL));
  -                        if (pComsec) { /* If we have a common section to load,  */
  -                            szTmp = (char *)sectionGetname(pComsec);
  -                            nSecverb = (strlen(RC_EXN_TEXT) + strlen(szTmp) + \
  -                                strlen (sectionGetparent(pComsec)) + \
  -                                strlen(RC_ECHO_STR) + strlen("\"\"") + 1) * \
  -                                sizeof (char);
  -                            realloc(szVerbose, nSecverb);
  -                            sprintf(szVerbose, RC_EXN_TEXT, szTmp, sectionGetparent(pComsec));
  -                            nSection = (strlen(szTmp) + 1) * sizeof (char);
  -                            realloc(szExec, nSizverb + nPrescr + nSecverb + nSection);
  -                            strcat(szExec, RC_ECHO_STR);    /* Start out with the echo string */
  -                            strcat(szExec, "\"");           /* Append a quote next to the echo */
  -                            strcat(szExec, szVerbose);      /* Continue with the common text */
  -                            strcat(szExec, "\";");          /* Finalize the verbosity notice */
  -                            strcat(szExec, sectionGetdata(pComsec)); /* load it */
  -                        }
  -                    }
  +                strcat(szExec, "\";");          /* Finalize the verbosity notice */
  +                strcat(szExec, szFunc);         /* Continue with the funcs script code */
  +                strcat(szExec, RC_ECHO_STR);    /* Continue with the echo string */
  +                strcat(szExec, "\"");           /* Append a quote next to the echo */
  +                strcat(szExec, szVerbose);      /* Continue with the config text */
  +                strcat(szExec, "\";");          /* Finalize the verbosity notice */
  +                strcat(szExec, szCnf);          /* Then with the config script code  */
   
  -                    /* Build last set of verbose data for the actual script */
  -                    szTmp = (char *)sectionGetname(ppSectmp[nTmp]);
  -                    nSecverb = (strlen(RC_EXN_TEXT) + strlen(szTmp) * 2 \
  -                        + strlen(RC_ECHO_STR) + strlen("\"\"") + 1) * sizeof (char);
  -                    realloc(szVerbose, nSecverb);
  -                    sprintf(szVerbose, RC_EXN_TEXT, szTmp, sectionGetparent(ppSectmp[nTmp]));
  -                    nSection = (strlen(szTmp) + strlen(sectionGetdata(ppSectmp[nTmp])) + 1) * sizeof (char);
  -                    realloc(szExec, nSizverb + nPrescr + nSecverb + nSection);
  -
  -                    szTmp = (char *)sectionGetdata(ppSectmp[nTmp]);
  -                    strcat(szExec, RC_ECHO_STR);    /* Start out with the echo string */
  -                    strcat(szExec, "\"");           /* Append a quote next to the echo */
  -                    strcat(szExec, szVerbose);      /* Continue with the verboseity text */
  -                    strcat(szExec, "\";");          /* Finalize the verbosity notice */
  -                    strcat(szExec, szTmp);          /* Then with the new script code */
  -                    pszVec[2] = szExec;             /* Launch the new process image now  */
  -                    free(szVerbose);
  -                    szVerbose = NULL;
  -
  -                    /* Spawn the section shell code */
  -                    switch (Pidexec = fork()) {
  -                        case -1:    /* Broken */
  -                            return(RC_THROW(RC_ERR_INT));
  -                            break;  /* Huh? */
  -                        case 0:     /* Child, runs script code through bourne shell */
  -                            nSectuid = sectionGetuid(ppSectmp[nTmp]);
  -                            if (nSectuid >= 0 && getuid() != nSectuid)
  -                                if (setuid(nSectuid) != 0)
  -                                    return(RC_THROW(RC_ERR_ROOT));
  -                            if (execvp(*pszVec, pszVec) == -1)
  -                                return(RC_THROW(RC_ERR_INT));
  -                            break;
  -                        default: /* Parent, blocks until child returns */
  -                            waitpid(Pidexec, &nStat, WUNTRACED);
  -                            if ((nStat = WEXITSTATUS(nStat)) != 0)
  -                                return(nStat);
  -                            break;
  -                    }
  -                    if (szExec) {
  -                        free(szExec); /* Cleanup after exec */
  -                        szExec = NULL;
  +                /* Examine our list, and try to take the corresponding */
  +                /* common section data from it to add to your script   */
  +                {
  +                    rc_section_t *pComsec = NULL;
  +                    pComsec = rcfileGetsec(listGetrcfile(pRc->m_pList, \
  +                        ppSectmp[nTmp]->m_szParent), configGetval(RC_CMN_VAL));
  +                    if (pComsec) { /* If we have a common section to load,  */
  +                        szTmp = (char *)sectionGetname(pComsec);
  +                        nSecverb = (strlen(RC_EXN_TEXT) + strlen(szTmp) + \
  +                            strlen (sectionGetparent(pComsec)) + \
  +                            strlen(RC_ECHO_STR) + strlen("\"\"") + 1) * \
  +                            sizeof (char);
  +                        realloc(szVerbose, nSecverb);
  +                        sprintf(szVerbose, RC_EXN_TEXT, szTmp, sectionGetparent(pComsec));
  +                        nSection = (strlen(szTmp) + 1) * sizeof (char);
  +                        realloc(szExec, nSizverb + nPrescr + nSecverb + nSection);
  +                        strcat(szExec, RC_ECHO_STR);    /* Start out with the echo string */
  +                        strcat(szExec, "\"");           /* Append a quote next to the echo */
  +                        strcat(szExec, szVerbose);      /* Continue with the common text */
  +                        strcat(szExec, "\";");          /* Finalize the verbosity notice */
  +                        strcat(szExec, sectionGetdata(pComsec)); /* load it */
                       }
                   }
  -                else { /* Verbose mode is off */
  -                    szTmp = (char *)sectionGetdata(ppSectmp[nTmp]);
  -                    szExec = malloc((strlen(szFunc) + strlen(szCnf) + \
  -                        strlen(szTmp) + 1) * sizeof(char));
  -                    strcpy(szExec, RC_BANG_STR);     /* Start out with the shebang string */
  -                    strcat(szExec, szFunc); /* Continue with just the funcs script code   */
  -                    strcat(szExec, szCnf);  /* Continue with just the config script code  */
  -
  -                    /* Examine our list, and try to take the corresponding */
  -                    /* common section data from it to add to your script   */
  -                    {
  -                        rc_section_t *pComsec = NULL;
  -                        pComsec = rcfileGetsec(listGetrcfile(pRc->m_pList, \
  -                            ppSectmp[nTmp]->m_szParent), configGetval(RC_CMN_VAL));
  -                        if (pComsec)   /* If we have a common section to load,  */
  -                            strcat(szExec, sectionGetdata(pComsec)); /* load it */
  -                    }
   
  -                    strcat(szExec, szTmp);  /* And build a section onto the command chain */
  -                    pszVec[2] = szExec;     /* Actually launch the new process image now  */
  -
  -                    /* Spawn the section shell code */
  -                    switch (Pidexec = fork()){
  -                        case -1:    /* Broken */
  +                /* Build last set of verbose data for the actual script */
  +                szTmp = (char *)sectionGetname(ppSectmp[nTmp]);
  +                nSecverb = (strlen(RC_EXN_TEXT) + strlen(szTmp) * 2 \
  +                    + strlen(RC_ECHO_STR) + strlen("\"\"") + 1) * sizeof (char);
  +                realloc(szVerbose, nSecverb);
  +                sprintf(szVerbose, RC_EXN_TEXT, szTmp, sectionGetparent(ppSectmp[nTmp]));
  +                nSection = (strlen(szTmp) + strlen(sectionGetdata(ppSectmp[nTmp])) + 1) * sizeof (char);
  +                realloc(szExec, nSizverb + nPrescr + nSecverb + nSection);
  +
  +                szTmp = (char *)sectionGetdata(ppSectmp[nTmp]);
  +                strcat(szExec, RC_ECHO_STR);    /* Start out with the echo string */
  +                strcat(szExec, "\"");           /* Append a quote next to the echo */
  +                strcat(szExec, szVerbose);      /* Continue with the verboseity text */
  +                strcat(szExec, "\";");          /* Finalize the verbosity notice */
  +                strcat(szExec, szTmp);          /* Then with the new script code */
  +                pszVec[2] = szExec;             /* Launch the new process image now  */
  +                free(szVerbose);
  +                szVerbose = NULL;
  +
  +                /* Spawn the section shell code */
  +                switch (Pidexec = fork()) {
  +                    case -1:    /* Broken */
  +                        return(RC_THROW(RC_ERR_INT));
  +                        break;  /* Huh? */
  +                    case 0:     /* Child, runs script code through bourne shell */
  +                        nSectuid = sectionGetuid(ppSectmp[nTmp]);
  +                        if (nSectuid >= 0 && getuid() != nSectuid)
  +                            if (setuid(nSectuid) != 0)
  +                                return(RC_THROW(RC_ERR_ROOT));
  +                        if (execvp(*pszVec, pszVec) == -1)
                               return(RC_THROW(RC_ERR_INT));
  -                            break;  /* Huh? */
  -                        case 0:     /* Child, runs script code through bourne shell */
  -                            nSectuid = sectionGetuid(ppSectmp[nTmp]);
  -                            if (nSectuid >= 0 && getuid() != nSectuid)
  -                                if (setuid(nSectuid) != 0)
  -                                    return(RC_THROW(RC_ERR_ROOT));
  -                            if (execvp(*pszVec, pszVec) == -1)
  -                                return(RC_THROW(RC_ERR_INT));
  -                            break;
  -                        default: /* Parent, blocks until child returns */
  -                            waitpid(Pidexec, &nStat, WUNTRACED);
  -                            if ((nStat = WEXITSTATUS(nStat)) != 0)
  -                                return(nStat);
  -                            break;
  -                    }
  +                        break;
  +                    default: /* Parent, blocks until child returns */
  +                        waitpid(Pidexec, &nStat, WUNTRACED);
  +                        if ((nStat = WEXITSTATUS(nStat)) != 0)
  +                            return(nStat);
  +                        break;
  +                }
  +                if (szExec) {
                       free(szExec); /* Cleanup after exec */
                       szExec = NULL;
                   }
  -                nTmp++; /* Next rc script */
  -            }
  -        }
  -        free(ppSectmp);
  -        ppSectmp = NULL;
  -    }
  -    else if (configGetval(RC_PRN_VAL)) {                        /* Print  */
  -        /* Allocate a block of section pointers to use as a temporary */
  -        ppSectmp = calloc(pRc->m_pList->m_nFiles, sizeof(rc_section_t *));
  -
  -        /* Conditionally output initial notice in verbal mode */
  -        if (configGetval(RC_VRB_VAL))
  -            fprintf(stderr, "%s\n", RC_VST_TEXT);
  -        /* Conditionally print funcs section notice in verbal mode */
  -        if (configGetval(RC_VRB_VAL))
  -            fprintf(stderr, "%s\n", RC_PNF_TEXT);
  -        scriptDump(pRc->m_pScriptfunc); /* Dump the funcs script */
  -
  -        for (nSecs = 0; nSecs < nTotalsecs; nSecs++) {
  -            for (nRcs = 0; nRcs < pRc->m_pList->m_nFiles; nRcs++) {
  -                for (nTmp = 0; nTmp < pRc->m_pList->m_ppFilevec[nRcs]->m_nSecs && \
  -                    strcmp(pRc->m_pList->m_ppFilevec[nRcs]->m_ppSecvec[nTmp]->m_szName, \
  -                                configGetsecs()[nSecs]); nTmp++);
  -                if (nTmp < pRc->m_pList->m_ppFilevec[nRcs]->m_nSecs)
  -                    ppSectmp[nRcs] = pRc->m_pList->m_ppFilevec[nRcs]->m_ppSecvec[nTmp];
  -                else
  -                    ppSectmp[nRcs] = NULL;
               }
  -            qsort((void *)ppSectmp, (size_t)pRc->m_pList->m_nFiles, sizeof(rc_section_t *), priCompare);
  -            for (nTmp = 0; nTmp < pRc->m_pList->m_nFiles && ppSectmp[nTmp]; nTmp++) {
  -                if (configGetval(RC_VRB_VAL)) {
  -                    /* Conditionally print config section notice in verbal mode */
  -                    nBytes = (strlen(RC_PRN_TEXT) + strlen(RC_DEF_NCF) + \
  -                        strlen(sectionGetparent(ppSectmp[nTmp])) + 2) * sizeof (char);
  -                    szVerbose = malloc(nBytes);
  -                    sprintf(szVerbose, RC_PRN_TEXT, RC_DEF_NCF, sectionGetparent(ppSectmp[nTmp]));
  -                    strcat(szVerbose, "\n");
  -                    fprintf(stderr, szVerbose);
  -                    free(szVerbose);
  -                    szVerbose = NULL;
  -                }
  -                scriptDump(pRc->m_pScriptcnf);  /* Dump the config script */
  +            else { /* Verbose mode is off */
  +                szTmp = (char *)sectionGetdata(ppSectmp[nTmp]);
  +                szExec = malloc((strlen(szFunc) + strlen(szCnf) + \
  +                    strlen(szTmp) + 1) * sizeof(char));
  +                strcpy(szExec, RC_BANG_STR);     /* Start out with the shebang string */
  +                strcat(szExec, szFunc); /* Continue with just the funcs script code   */
  +                strcat(szExec, szCnf);  /* Continue with just the config script code  */
   
                   /* Examine our list, and try to take the corresponding */
                   /* common section data from it to add to your script   */
  @@ -539,64 +494,171 @@
                       rc_section_t *pComsec = NULL;
                       pComsec = rcfileGetsec(listGetrcfile(pRc->m_pList, \
                           ppSectmp[nTmp]->m_szParent), configGetval(RC_CMN_VAL));
  -                    if (pComsec) { /* Do we have a common section to load? */
  -                        if (configGetval(RC_VRB_VAL)) {
  -                            szTmp = (char *)sectionGetname(pComsec);
  -                            nBytes = (strlen(RC_PRN_TEXT) + strlen(szTmp) + \
  -                                strlen (sectionGetparent(pComsec)) + \
  -                                strlen(RC_ECHO_STR) + strlen("\"\"") + 1) * \
  -                                sizeof (char);
  -                            szVerbose = malloc(nBytes);
  -                            sprintf(szVerbose, RC_PRN_TEXT, szTmp, sectionGetparent(pComsec));
  -                            strcat(szVerbose, "\n");
  -                            fprintf(stderr, "%s", szVerbose);
  -                            free(szVerbose);
  -                            szVerbose = NULL;
  -                        }
  -                        sectionDump(pComsec);
  -                    }
  +                    if (pComsec)   /* If we have a common section to load,  */
  +                        strcat(szExec, sectionGetdata(pComsec)); /* load it */
                   }
   
  -                if (configGetval(RC_VRB_VAL)) {
  -                    /* Conditionally print each section notice in verbal mode */
  -                    szTmp = (char *)sectionGetname(ppSectmp[nTmp]);
  -                    nBytes = (strlen(RC_PRN_TEXT) + strlen(szTmp) + 2) * sizeof (char);
  -                    szVerbose = malloc(nBytes);
  -                    sprintf(szVerbose, RC_PRN_TEXT, szTmp, sectionGetparent(ppSectmp[nTmp]));
  -                    strcat(szVerbose, "\n");
  -                    fprintf(stderr, "%s", szVerbose);
  -                    free(szVerbose);
  -                    szVerbose = NULL;
  +                strcat(szExec, szTmp);  /* And build a section onto the command chain */
  +                pszVec[2] = szExec;     /* Actually launch the new process image now  */
  +
  +                /* Spawn the section shell code */
  +                switch (Pidexec = fork()){
  +                    case -1:    /* Broken */
  +                        return(RC_THROW(RC_ERR_INT));
  +                        break;  /* Huh? */
  +                    case 0:     /* Child, runs script code through bourne shell */
  +                        nSectuid = sectionGetuid(ppSectmp[nTmp]);
  +                        if (nSectuid >= 0 && getuid() != nSectuid)
  +                            if (setuid(nSectuid) != 0)
  +                                return(RC_THROW(RC_ERR_ROOT));
  +                        if (execvp(*pszVec, pszVec) == -1)
  +                            return(RC_THROW(RC_ERR_INT));
  +                        break;
  +                    default: /* Parent, blocks until child returns */
  +                        waitpid(Pidexec, &nStat, WUNTRACED);
  +                        if ((nStat = WEXITSTATUS(nStat)) != 0)
  +                            return(nStat);
  +                        break;
                   }
  -                sectionDump(ppSectmp[nTmp]);
  +                free(szExec); /* Cleanup after exec */
  +                szExec = NULL;
               }
  +            nTmp++; /* Next rc script */
           }
  -        free(ppSectmp);
  -        ppSectmp = NULL;
       }
  -    else if (configGetval(RC_PAR_VAL)) {                    /* Parse names */
  -        /* Allocate a block of section pointers to use as a temporary */
  -        ppSectmp = calloc(pRc->m_pList->m_nFiles, sizeof(rc_section_t *));
  -        fprintf(stderr, "file %s, section %s\n", pRc->m_pList->m_ppFilevec[nRcs]->m_szName, RC_DEF_NCF);
  -        for (nSecs = 0; nSecs < nTotalsecs; nSecs++) {
  -            for (nRcs = 0; nRcs < pRc->m_pList->m_nFiles; nRcs++) {
  -                for (nTmp = 0; nTmp < pRc->m_pList->m_ppFilevec[nRcs]->m_nSecs && \
  -                    strcmp(pRc->m_pList->m_ppFilevec[nRcs]->m_ppSecvec[nTmp]->m_szName, \
  -                                configGetsecs()[nSecs]); nTmp++);
  -                if (nTmp < pRc->m_pList->m_ppFilevec[nRcs]->m_nSecs)
  -                    ppSectmp[nRcs] = pRc->m_pList->m_ppFilevec[nRcs]->m_ppSecvec[nTmp];
  -                else
  -                    ppSectmp[nRcs] = NULL;
  +    free(ppSectmp);
  +    ppSectmp = NULL;
  +
  +    return(RC_THROW(RC_OK));
  +}
  +
  +/************************************************
  +* procPrint(rc_proc_t *)                        *
  +* Print the run-command script                  *
  +************************************************/
  +rc_return_t procPrint(rc_proc_t *pRc)
  +{
  +    size_t nBytes     = 0;                      /* Size in bytes  */
  +    int    nTmp       = 0;                      /* Generic index  */
  +    short  nRcs       = 0;                      /* Rc index       */
  +    short  nSecs      = 0;                      /* Section index  */
  +    short  nTotalsecs = vectorCount(configGetsecs()); /* Sections */
  +    rc_section_t **ppSectmp = NULL; /* Used with priority scheduling */
  +
  +    char *szVerbose = NULL;    /* Used when handling verbose mode */
  +    char *szTmp     = NULL;           /* Generic temporary string */
  +
  +    /* Allocate a block of section pointers to use as a temporary */
  +    ppSectmp = calloc(pRc->m_pList->m_nFiles, sizeof(rc_section_t *));
  +
  +    /* Conditionally output initial notice in verbal mode */
  +    if (configGetval(RC_VRB_VAL))
  +        fprintf(stderr, "%s\n", RC_VST_TEXT);
  +    /* Conditionally print funcs section notice in verbal mode */
  +    if (configGetval(RC_VRB_VAL))
  +        fprintf(stderr, "%s\n", RC_PNF_TEXT);
  +    scriptDump(pRc->m_pScriptfunc); /* Dump the funcs script */
  +
  +    for (nSecs = 0; nSecs < nTotalsecs; nSecs++) {
  +        for (nRcs = 0; nRcs < pRc->m_pList->m_nFiles; nRcs++) {
  +            for (nTmp = 0; nTmp < pRc->m_pList->m_ppFilevec[nRcs]->m_nSecs && \
  +                strcmp(pRc->m_pList->m_ppFilevec[nRcs]->m_ppSecvec[nTmp]->m_szName, \
  +                            configGetsecs()[nSecs]); nTmp++);
  +            if (nTmp < pRc->m_pList->m_ppFilevec[nRcs]->m_nSecs)
  +                ppSectmp[nRcs] = pRc->m_pList->m_ppFilevec[nRcs]->m_ppSecvec[nTmp];
  +            else
  +                ppSectmp[nRcs] = NULL;
  +        }
  +        qsort((void *)ppSectmp, (size_t)pRc->m_pList->m_nFiles, sizeof(rc_section_t *), priCompare);
  +        for (nTmp = 0; nTmp < pRc->m_pList->m_nFiles && ppSectmp[nTmp]; nTmp++) {
  +            if (configGetval(RC_VRB_VAL)) {
  +                /* Conditionally print config section notice in verbal mode */
  +                nBytes = (strlen(RC_PRN_TEXT) + strlen(RC_DEF_NCF) + \
  +                    strlen(sectionGetparent(ppSectmp[nTmp])) + 2) * sizeof (char);
  +                szVerbose = malloc(nBytes);
  +                sprintf(szVerbose, RC_PRN_TEXT, RC_DEF_NCF, sectionGetparent(ppSectmp[nTmp]));
  +                strcat(szVerbose, "\n");
  +                fprintf(stderr, szVerbose);
  +                free(szVerbose);
  +                szVerbose = NULL;
               }
  -            qsort((void *)ppSectmp, (size_t)pRc->m_pList->m_nFiles, sizeof(rc_section_t *), priCompare);
  -            for (nTmp = 0; nTmp < pRc->m_pList->m_nFiles && ppSectmp[nTmp]; nTmp++)
  -                fprintf(stderr, "section %s\n", ppSectmp[nTmp]->m_szName);
  +            scriptDump(pRc->m_pScriptcnf);  /* Dump the config script */
  +
  +            /* Examine our list, and try to take the corresponding */
  +            /* common section data from it to add to your script   */
  +            {
  +                rc_section_t *pComsec = NULL;
  +                pComsec = rcfileGetsec(listGetrcfile(pRc->m_pList, \
  +                    ppSectmp[nTmp]->m_szParent), configGetval(RC_CMN_VAL));
  +                if (pComsec) { /* Do we have a common section to load? */
  +                    if (configGetval(RC_VRB_VAL)) {
  +                        szTmp = (char *)sectionGetname(pComsec);
  +                        nBytes = (strlen(RC_PRN_TEXT) + strlen(szTmp) + \
  +                            strlen (sectionGetparent(pComsec)) + \
  +                            strlen(RC_ECHO_STR) + strlen("\"\"") + 1) * \
  +                            sizeof (char);
  +                        szVerbose = malloc(nBytes);
  +                        sprintf(szVerbose, RC_PRN_TEXT, szTmp, sectionGetparent(pComsec));
  +                        strcat(szVerbose, "\n");
  +                        fprintf(stderr, "%s", szVerbose);
  +                        free(szVerbose);
  +                        szVerbose = NULL;
  +                    }
  +                    sectionDump(pComsec);
  +                }
  +            }
  +
  +            if (configGetval(RC_VRB_VAL)) {
  +                /* Conditionally print each section notice in verbal mode */
  +                szTmp = (char *)sectionGetname(ppSectmp[nTmp]);
  +                nBytes = (strlen(RC_PRN_TEXT) + strlen(szTmp) + 2) * sizeof (char);
  +                szVerbose = malloc(nBytes);
  +                sprintf(szVerbose, RC_PRN_TEXT, szTmp, sectionGetparent(ppSectmp[nTmp]));
  +                strcat(szVerbose, "\n");
  +                fprintf(stderr, "%s", szVerbose);
  +                free(szVerbose);
  +                szVerbose = NULL;
  +            }
  +            sectionDump(ppSectmp[nTmp]);
  +        }
  +    }
  +    free(ppSectmp);
  +    ppSectmp = NULL;
  +
  +    return(RC_THROW(RC_OK));
  +}
  +
  +/************************************************
  +* procParse(rc_proc_t *)                        *
  +* Parse the run-command script                  *
  +************************************************/
  +rc_return_t procParse(rc_proc_t *pRc)
  +{
  +    rc_section_t **ppSectmp = NULL; /* Used with priority scheduling */
  +    int    nTmp       = 0;                         /* Generic index  */
  +    short  nRcs       = 0;                         /* Rc index       */
  +    short  nSecs      = 0;                         /* Section index  */
  +    short  nTotalsecs = vectorCount(configGetsecs()); /* Sections    */
  +
  +    /* Allocate a block of section pointers to use as a temporary */
  +    ppSectmp = calloc(pRc->m_pList->m_nFiles, sizeof(rc_section_t *));
  +    fprintf(stderr, "file %s, section %s\n", pRc->m_pList->m_ppFilevec[nRcs]->m_szName, RC_DEF_NCF);
  +    for (nSecs = 0; nSecs < nTotalsecs; nSecs++) {
  +        for (nRcs = 0; nRcs < pRc->m_pList->m_nFiles; nRcs++) {
  +            for (nTmp = 0; nTmp < pRc->m_pList->m_ppFilevec[nRcs]->m_nSecs && \
  +                strcmp(pRc->m_pList->m_ppFilevec[nRcs]->m_ppSecvec[nTmp]->m_szName, \
  +                            configGetsecs()[nSecs]); nTmp++);
  +            if (nTmp < pRc->m_pList->m_ppFilevec[nRcs]->m_nSecs)
  +                ppSectmp[nRcs] = pRc->m_pList->m_ppFilevec[nRcs]->m_ppSecvec[nTmp];
  +            else
  +                ppSectmp[nRcs] = NULL;
           }
  -        free(ppSectmp);
  -        ppSectmp = NULL;
  +        qsort((void *)ppSectmp, (size_t)pRc->m_pList->m_nFiles, sizeof(rc_section_t *), priCompare);
  +        for (nTmp = 0; nTmp < pRc->m_pList->m_nFiles && ppSectmp[nTmp]; nTmp++)
  +            fprintf(stderr, "section %s\n", ppSectmp[nTmp]->m_szName);
       }
  -    else /* Something is wrong here */
  -        return(RC_THROW(RC_ERR_INT));
  +    free(ppSectmp);
  +    ppSectmp = NULL;
   
       return(RC_THROW(RC_OK));
   }
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jul  2 14:40:16 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 61364767C1; Wed,  2 Jul 2003 14:40:16 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_error.c
Message-Id: <20030702124016.61364767C1@mail.ossp.org>
Date: Wed,  2 Jul 2003 14:40:16 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   02-Jul-2003 14:40:16
  Branch: HEAD                             Handle: 2003070213401500

  Modified files:
    ossp-pkg/rc             rc_error.c

  Log:
    Add debug option condition to error output, and reformat output to improve
    clarity of errors at runtime.

  Summary:
    Revision    Changes     Path
    1.5         +69 -33     ossp-pkg/rc/rc_error.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_error.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 rc_error.c
  --- ossp-pkg/rc/rc_error.c	30 Jun 2003 15:27:38 -0000	1.4
  +++ ossp-pkg/rc/rc_error.c	2 Jul 2003 12:40:15 -0000	1.5
  @@ -40,39 +40,75 @@
       if (FAILED((rc_return_t)Localerr.ex_value)) { /* Error condition */
           if ((rc_return_t)Localerr.ex_value == RC_ERR_TRM)
               exit(0);
  -        else if ((rc_return_t)Localerr.ex_value == RC_ERR_USE)
  -            fprintf(stderr, "    Error condition, API usage is wrong in %s:%s():%d.\n", \
  -                Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
  -        else if ((rc_return_t)Localerr.ex_value == RC_ERR_MEM)
  -            fprintf(stderr, "    Error condition, memory allocation failure in %s:%s():%d.\n", \
  -                Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
  -        else if ((rc_return_t)Localerr.ex_value == RC_ERR_SYS)
  -            fprintf(stderr, "    Error condition, underlying system failure in %s:%s():%d.\n", \
  -                Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
  -        else if ((rc_return_t)Localerr.ex_value == RC_ERR_IO)
  -            fprintf(stderr, "    Error condition, input output failure in %s:%s():%d.\n", \
  -                Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
  -        else if ((rc_return_t)Localerr.ex_value == RC_ERR_INT)
  -            fprintf(stderr, "    Error condition, internal failure in %s:%s():%d.\n", \
  -                Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
  -        else if ((rc_return_t)Localerr.ex_value == RC_ERR_FNC)
  -            fprintf(stderr, "    Error condition, function file could not be opened in %s:%s():%d.\n", \
  -                Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
  -        else if ((rc_return_t)Localerr.ex_value == RC_ERR_DIR)
  -            fprintf(stderr, "    Error condition, location dir could not be opened in %s:%s():%d.\n", \
  -                Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
  -        else if ((rc_return_t)Localerr.ex_value == RC_ERR_RCF)
  -            fprintf(stderr, "    Error condition, rc file could not be opened in %s:%s():%d.\n", \
  -                Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
  -        else if ((rc_return_t)Localerr.ex_value == RC_ERR_CFG)
  -            fprintf(stderr, "    Error condition, configuration and options failure in %s:%s():%d.\n", \
  -                Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
  -        else if ((rc_return_t)Localerr.ex_value == RC_ERR_ROOT)
  -            fprintf(stderr, "    Error condition, in %s:%s():%d. You must be root to run these commands\n", \
  -                Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
  -        else
  -            fprintf(stderr, "    Error condition of class '%s',\n    exception %d in %s:%s():%d.\n", (char *)Localerr.ex_class, (int)Localerr.ex_value, Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
  -        exit((int)Localerr.ex_value); /* Return failure */
  +        else if ((rc_return_t)Localerr.ex_value == RC_ERR_USE) {
  +            fprintf(stderr, "    API usage is wrong\n.");
  +            if (configGetvar(RC_DBG_VAL))
  +                fprintf(stderr, "    Error condition in %s:%s():%d.\n", \
  +                    Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
  +        }
  +        else if ((rc_return_t)Localerr.ex_value == RC_ERR_MEM) {
  +            fprintf(stderr, "    Memory allocation failure\n.");
  +            if (configGetvar(RC_DBG_VAL))
  +                fprintf(stderr, "    Error condition in %s:%s():%d.\n", \
  +                    Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
  +        }
  +        else if ((rc_return_t)Localerr.ex_value == RC_ERR_SYS) {
  +            fprintf(stderr, "    Underlying system failure\n.");
  +            if (configGetvar(RC_DBG_VAL))
  +                fprintf(stderr, "    Error condition in %s:%s():%d.\n", \
  +                    Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
  +        }
  +        else if ((rc_return_t)Localerr.ex_value == RC_ERR_IO) {
  +            fprintf(stderr, "    Input output failure\n.");
  +            if (configGetvar(RC_DBG_VAL))
  +                fprintf(stderr, "    Error condition in %s:%s():%d.\n", \
  +                    Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
  +        }
  +        else if ((rc_return_t)Localerr.ex_value == RC_ERR_INT) {
  +            fprintf(stderr, "    Internal failure\n.");
  +            if (configGetvar(RC_DBG_VAL))
  +                fprintf(stderr, "    Error condition in %s:%s():%d.\n", \
  +                    Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
  +        }
  +        else if ((rc_return_t)Localerr.ex_value == RC_ERR_FNC) {
  +            fprintf(stderr, "    Function file could not be opened\n.");
  +            if (configGetvar(RC_DBG_VAL))
  +                fprintf(stderr, "    Error condition in %s:%s():%d.\n", \
  +                    Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
  +        }
  +        else if ((rc_return_t)Localerr.ex_value == RC_ERR_DIR) {
  +            fprintf(stderr, "    Location dir could not be opened\n.");
  +            if (configGetvar(RC_DBG_VAL))
  +                fprintf(stderr, "    Error condition in %s:%s():%d.\n", \
  +                    Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
  +        }
  +        else if ((rc_return_t)Localerr.ex_value == RC_ERR_RCF) {
  +            fprintf(stderr, "    Rc file could not be opened\n.");
  +            if (configGetvar(RC_DBG_VAL))
  +                fprintf(stderr, "    Error condition in %s:%s():%d.\n", \
  +                    Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
  +        }
  +        else if ((rc_return_t)Localerr.ex_value == RC_ERR_CFG) {
  +            fprintf(stderr, "    Configuration and options failure\n.");
  +            if (configGetvar(RC_DBG_VAL))
  +                fprintf(stderr, "    Error condition in %s:%s():%d.\n", \
  +                    Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
  +        }
  +        else if ((rc_return_t)Localerr.ex_value == RC_ERR_ROOT) {
  +            fprintf(stderr, "    You must be root to run these commands\n.");
  +            if (configGetvar(RC_DBG_VAL))
  +                fprintf(stderr, "    Error condition in %s:%s():%d.\n", \
  +                    Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
  +        }
  +        else {
  +            fprintf(stderr, "    \n    Generic failure condition of class '%s',\n.");
  +            if (configGetvar(RC_DBG_VAL))
  +                fprintf(stderr, "    Error condition in %s:%s():%d.\n", \
  +                    Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
  +        }
  +
  +        /* Return a corresponding failure code in every case */
  +        exit((int)Localerr.ex_value);
       }
   #ifdef DEBUG
       else        /* Warning condition */
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jul  2 15:38:52 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BDB6F767C1; Wed,  2 Jul 2003 15:38:51 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ 00TODO
Message-Id: <20030702133851.BDB6F767C1@mail.ossp.org>
Date: Wed,  2 Jul 2003 15:38:51 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   02-Jul-2003 15:38:51
  Branch: HEAD                             Handle: 2003070214385100

  Modified files:
    ossp-pkg/rc             00TODO

  Log:
    Remember idea by Michael van Elst of avoiding suprising functionality based on
    file regex searches in location directory.

  Summary:
    Revision    Changes     Path
    1.51        +1  -0      ossp-pkg/rc/00TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/00TODO
  ============================================================================
  $ cvs diff -u -r1.50 -r1.51 00TODO
  --- ossp-pkg/rc/00TODO	30 Jun 2003 15:58:49 -0000	1.50
  +++ ossp-pkg/rc/00TODO	2 Jul 2003 13:38:51 -0000	1.51
  @@ -52,6 +52,7 @@
     If a requested section doesn't exist, should the rcfile's %config be added?
     Interpreter option irgendwo dass hat global scope.
       Als variable in %config Section?
  +  Option --search (for .saved postfix), and section %found (for --search)
   
   Must do
     Translate rc bourne shell script to ISO C.
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jul  2 16:45:26 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D8B7B767DE; Wed,  2 Jul 2003 16:45:25 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_const.h rc_util.c
Message-Id: <20030702144525.D8B7B767DE@mail.ossp.org>
Date: Wed,  2 Jul 2003 16:45:25 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   02-Jul-2003 16:45:25
  Branch: HEAD                             Handle: 2003070215452500

  Modified files:
    ossp-pkg/rc             rc_const.h rc_util.c

  Log:
    Remember the error string for new root permissions.

  Summary:
    Revision    Changes     Path
    1.31        +15 -14     ossp-pkg/rc/rc_const.h
    1.11        +15 -14     ossp-pkg/rc/rc_util.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_const.h
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 rc_const.h
  --- ossp-pkg/rc/rc_const.h	27 Jun 2003 14:26:13 -0000	1.30
  +++ ossp-pkg/rc/rc_const.h	2 Jul 2003 14:45:25 -0000	1.31
  @@ -116,20 +116,21 @@
   #define RC_ERR_NAME "NameError"
   
   /* Error and warning strings, should not include newline termination */
  -#define RC_ERRSTR_OK  "Okay"
  -#define RC_ERRSTR_USE "Usage"
  -#define RC_ERRSTR_MEM "Memory"
  -#define RC_ERRSTR_SYS "System"
  -#define RC_ERRSTR_IO  "Input/Output"
  -#define RC_ERRSTR_INT "Internal"
  -#define RC_ERRSTR_FNC "Funcfile"
  -#define RC_ERRSTR_DIR "Location"
  -#define RC_ERRSTR_RCF "Rcfile"
  -#define RC_ERRSTR_TRM "Terminate"
  -#define RC_ERRSTR_CFG "Config/Options"
  -#define RC_ERRSTR_UNK "Unrecognized"
  -#define RC_WRNSTR_OWR "Overwrite"
  -#define RC_WRNSTR_NUL "NULLPointer"
  +#define RC_ERRSTR_OK   "Okay"
  +#define RC_ERRSTR_USE  "Usage"
  +#define RC_ERRSTR_MEM  "Memory"
  +#define RC_ERRSTR_SYS  "System"
  +#define RC_ERRSTR_IO   "Input/Output"
  +#define RC_ERRSTR_INT  "Internal"
  +#define RC_ERRSTR_FNC  "Funcfile"
  +#define RC_ERRSTR_DIR  "Location"
  +#define RC_ERRSTR_RCF  "Rcfile"
  +#define RC_ERRSTR_TRM  "Terminate"
  +#define RC_ERRSTR_CFG  "Config/Options"
  +#define RC_ERRSTR_ROOT "Permissions"
  +#define RC_ERRSTR_UNK  "Unrecognized"
  +#define RC_WRNSTR_OWR  "Overwrite"
  +#define RC_WRNSTR_NUL  "NULLPointer"
   
   #define RC_GLOB_WILD  "all"
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_util.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 rc_util.c
  --- ossp-pkg/rc/rc_util.c	23 Jun 2003 16:09:47 -0000	1.10
  +++ ossp-pkg/rc/rc_util.c	2 Jul 2003 14:45:25 -0000	1.11
  @@ -37,20 +37,21 @@
   /* Translate an error code to a string */
   char *strErr(rc_return_t rv)
   {
  -    if      (rv == RC_OK)      return RC_ERRSTR_OK;
  -    else if (rv == RC_ERR_USE) return RC_ERRSTR_USE;
  -    else if (rv == RC_ERR_MEM) return RC_ERRSTR_MEM;
  -    else if (rv == RC_ERR_SYS) return RC_ERRSTR_SYS;
  -    else if (rv == RC_ERR_IO)  return RC_ERRSTR_IO;
  -    else if (rv == RC_ERR_INT) return RC_ERRSTR_INT;
  -    else if (rv == RC_ERR_FNC) return RC_ERRSTR_FNC;
  -    else if (rv == RC_ERR_DIR) return RC_ERRSTR_DIR;
  -    else if (rv == RC_ERR_RCF) return RC_ERRSTR_RCF;
  -    else if (rv == RC_ERR_TRM) return RC_ERRSTR_TRM;
  -    else if (rv == RC_ERR_CFG) return RC_ERRSTR_CFG;
  -    else if (rv == RC_WRN_OWR) return RC_WRNSTR_OWR;
  -    else if (rv == RC_WRN_NUL) return RC_WRNSTR_NUL;
  -    else                       return RC_ERRSTR_UNK;
  +    if      (rv == RC_OK)       return RC_ERRSTR_OK;
  +    else if (rv == RC_ERR_USE)  return RC_ERRSTR_USE;
  +    else if (rv == RC_ERR_MEM)  return RC_ERRSTR_MEM;
  +    else if (rv == RC_ERR_SYS)  return RC_ERRSTR_SYS;
  +    else if (rv == RC_ERR_IO)   return RC_ERRSTR_IO;
  +    else if (rv == RC_ERR_INT)  return RC_ERRSTR_INT;
  +    else if (rv == RC_ERR_FNC)  return RC_ERRSTR_FNC;
  +    else if (rv == RC_ERR_DIR)  return RC_ERRSTR_DIR;
  +    else if (rv == RC_ERR_RCF)  return RC_ERRSTR_RCF;
  +    else if (rv == RC_ERR_TRM)  return RC_ERRSTR_TRM;
  +    else if (rv == RC_ERR_CFG)  return RC_ERRSTR_CFG;
  +    else if (rv == RC_ERR_ROOT) return RC_ERRSTR_ROOT;
  +    else if (rv == RC_WRN_OWR)  return RC_WRNSTR_OWR;
  +    else if (rv == RC_WRN_NUL)  return RC_WRNSTR_NUL;
  +    else                        return RC_ERRSTR_UNK;
   }
   
   /* Vector copy constructor */
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jul  2 17:07:49 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E0E39767D5; Wed,  2 Jul 2003 17:07:48 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_error.c
Message-Id: <20030702150748.E0E39767D5@mail.ossp.org>
Date: Wed,  2 Jul 2003 17:07:48 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   02-Jul-2003 17:07:48
  Branch: HEAD                             Handle: 2003070216074800

  Modified files:
    ossp-pkg/rc             rc_error.c

  Log:
    Repair and improve with more details in case of missing files or directory
    open failures.

  Summary:
    Revision    Changes     Path
    1.6         +27 -24     ossp-pkg/rc/rc_error.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_error.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 rc_error.c
  --- ossp-pkg/rc/rc_error.c	2 Jul 2003 12:40:15 -0000	1.5
  +++ ossp-pkg/rc/rc_error.c	2 Jul 2003 15:07:48 -0000	1.6
  @@ -27,8 +27,9 @@
   **  rc_error.c: Run-command processor ISO C source file
   */
   
  -#include <stdlib.h> /* Just for calling 'exit(3)' once */
  -#include "rc.h"     /* Public interfaces */
  +#include <stdlib.h>    /* Just for calling 'exit(3)' once */
  +#include "rc.h"        /* Public interfaces               */
  +#include "rc_config.h" /* Interface to the configuration  */
   
   
   /************************************************
  @@ -41,68 +42,70 @@
           if ((rc_return_t)Localerr.ex_value == RC_ERR_TRM)
               exit(0);
           else if ((rc_return_t)Localerr.ex_value == RC_ERR_USE) {
  -            fprintf(stderr, "    API usage is wrong\n.");
  -            if (configGetvar(RC_DBG_VAL))
  +            fprintf(stderr, "    API usage is wrong.\n");
  +            if (configGetval(RC_DBG_VAL))
                   fprintf(stderr, "    Error condition in %s:%s():%d.\n", \
                       Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
           }
           else if ((rc_return_t)Localerr.ex_value == RC_ERR_MEM) {
  -            fprintf(stderr, "    Memory allocation failure\n.");
  -            if (configGetvar(RC_DBG_VAL))
  +            fprintf(stderr, "    Memory allocation failure.\n");
  +            if (configGetval(RC_DBG_VAL))
                   fprintf(stderr, "    Error condition in %s:%s():%d.\n", \
                       Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
           }
           else if ((rc_return_t)Localerr.ex_value == RC_ERR_SYS) {
  -            fprintf(stderr, "    Underlying system failure\n.");
  -            if (configGetvar(RC_DBG_VAL))
  +            fprintf(stderr, "    Underlying system failure.\n");
  +            if (configGetval(RC_DBG_VAL))
                   fprintf(stderr, "    Error condition in %s:%s():%d.\n", \
                       Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
           }
           else if ((rc_return_t)Localerr.ex_value == RC_ERR_IO) {
  -            fprintf(stderr, "    Input output failure\n.");
  -            if (configGetvar(RC_DBG_VAL))
  +            fprintf(stderr, "    Input output failure.\n");
  +            if (configGetval(RC_DBG_VAL))
                   fprintf(stderr, "    Error condition in %s:%s():%d.\n", \
                       Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
           }
           else if ((rc_return_t)Localerr.ex_value == RC_ERR_INT) {
  -            fprintf(stderr, "    Internal failure\n.");
  -            if (configGetvar(RC_DBG_VAL))
  +            fprintf(stderr, "    Internal failure.\n");
  +            if (configGetval(RC_DBG_VAL))
                   fprintf(stderr, "    Error condition in %s:%s():%d.\n", \
                       Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
           }
           else if ((rc_return_t)Localerr.ex_value == RC_ERR_FNC) {
  -            fprintf(stderr, "    Function file could not be opened\n.");
  -            if (configGetvar(RC_DBG_VAL))
  +            fprintf(stderr, "    Function file %s could not be opened.\n", \
  +                configGetval(RC_FNC_VAL));
  +            if (configGetval(RC_DBG_VAL))
                   fprintf(stderr, "    Error condition in %s:%s():%d.\n", \
                       Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
           }
           else if ((rc_return_t)Localerr.ex_value == RC_ERR_DIR) {
  -            fprintf(stderr, "    Location dir could not be opened\n.");
  -            if (configGetvar(RC_DBG_VAL))
  +            fprintf(stderr, "    Location dir %s could not be opened.\n", \
  +                configGetval(RC_LOC_VAL));
  +            if (configGetval(RC_DBG_VAL))
                   fprintf(stderr, "    Error condition in %s:%s():%d.\n", \
                       Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
           }
           else if ((rc_return_t)Localerr.ex_value == RC_ERR_RCF) {
  -            fprintf(stderr, "    Rc file could not be opened\n.");
  -            if (configGetvar(RC_DBG_VAL))
  +            fprintf(stderr, "    One or more rc files could not be opened.\n");
  +            if (configGetval(RC_DBG_VAL))
                   fprintf(stderr, "    Error condition in %s:%s():%d.\n", \
                       Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
           }
           else if ((rc_return_t)Localerr.ex_value == RC_ERR_CFG) {
  -            fprintf(stderr, "    Configuration and options failure\n.");
  -            if (configGetvar(RC_DBG_VAL))
  +            fprintf(stderr, "    Configuration failure.\n");
  +            if (configGetval(RC_DBG_VAL))
                   fprintf(stderr, "    Error condition in %s:%s():%d.\n", \
                       Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
           }
           else if ((rc_return_t)Localerr.ex_value == RC_ERR_ROOT) {
  -            fprintf(stderr, "    You must be root to run these commands\n.");
  -            if (configGetvar(RC_DBG_VAL))
  +            fprintf(stderr, "    You must be root to run these commands.\n");
  +            if (configGetval(RC_DBG_VAL))
                   fprintf(stderr, "    Error condition in %s:%s():%d.\n", \
                       Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
           }
           else {
  -            fprintf(stderr, "    \n    Generic failure condition of class '%s',\n.");
  -            if (configGetvar(RC_DBG_VAL))
  +            fprintf(stderr, "    \n    Generic failure condition of class '%s',.\n");
  +            if (configGetval(RC_DBG_VAL))
                   fprintf(stderr, "    Error condition in %s:%s():%d.\n", \
                       Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
           }
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jul  2 17:29:09 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C7FCA767C7; Wed,  2 Jul 2003 17:29:08 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_error.c
Message-Id: <20030702152908.C7FCA767C7@mail.ossp.org>
Date: Wed,  2 Jul 2003 17:29:08 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   02-Jul-2003 17:29:08
  Branch: HEAD                             Handle: 2003070216290800

  Modified files:
    ossp-pkg/rc             rc_error.c

  Log:
    Bugfix and add temporary dir error logic.

  Summary:
    Revision    Changes     Path
    1.7         +9  -2      ossp-pkg/rc/rc_error.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_error.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 rc_error.c
  --- ossp-pkg/rc/rc_error.c	2 Jul 2003 15:07:48 -0000	1.6
  +++ ossp-pkg/rc/rc_error.c	2 Jul 2003 15:29:08 -0000	1.7
  @@ -78,13 +78,20 @@
                   fprintf(stderr, "    Error condition in %s:%s():%d.\n", \
                       Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
           }
  -        else if ((rc_return_t)Localerr.ex_value == RC_ERR_DIR) {
  +        else if ((rc_return_t)Localerr.ex_value == RC_ERR_LOC) {
               fprintf(stderr, "    Location dir %s could not be opened.\n", \
                   configGetval(RC_LOC_VAL));
               if (configGetval(RC_DBG_VAL))
                   fprintf(stderr, "    Error condition in %s:%s():%d.\n", \
                       Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
           }
  +        else if ((rc_return_t)Localerr.ex_value == RC_ERR_TMP) {
  +            fprintf(stderr, "    Temporary dir %s could not be opened.\n", \
  +                configGetval(RC_TMP_VAL));
  +            if (configGetval(RC_DBG_VAL))
  +                fprintf(stderr, "    Error condition in %s:%s():%d.\n", \
  +                    Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
  +        }
           else if ((rc_return_t)Localerr.ex_value == RC_ERR_RCF) {
               fprintf(stderr, "    One or more rc files could not be opened.\n");
               if (configGetval(RC_DBG_VAL))
  @@ -104,7 +111,7 @@
                       Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
           }
           else {
  -            fprintf(stderr, "    \n    Generic failure condition of class '%s',.\n");
  +            fprintf(stderr, "    Generic failure condition of class '%s',.\n", (char *)Localerr.ex_class);
               if (configGetval(RC_DBG_VAL))
                   fprintf(stderr, "    Error condition in %s:%s():%d.\n", \
                       Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jul  2 17:30:21 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E177A767DE; Wed,  2 Jul 2003 17:30:20 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_config.c
Message-Id: <20030702153020.E177A767DE@mail.ossp.org>
Date: Wed,  2 Jul 2003 17:30:20 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   02-Jul-2003 17:30:20
  Branch: HEAD                             Handle: 2003070216302000

  Modified files:
    ossp-pkg/rc             rc_config.c

  Log:
    Implement location and temporary directory checks.

  Summary:
    Revision    Changes     Path
    1.37        +27 -11     ossp-pkg/rc/rc_config.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_config.c
  ============================================================================
  $ cvs diff -u -r1.36 -r1.37 rc_config.c
  --- ossp-pkg/rc/rc_config.c	26 Jun 2003 18:45:14 -0000	1.36
  +++ ossp-pkg/rc/rc_config.c	2 Jul 2003 15:30:20 -0000	1.37
  @@ -284,7 +284,7 @@
   rc_return_t configDefaults(void)
   {
       ex_t Except;
  -    DIR *pTmpdir = NULL; /* For detecting our temp dir with opendir(3) */
  +    DIR *pDir = NULL; /* For detecting our temp dir with opendir(3) */
   
       try { /* Test members for empty attributes */
           if (!configGetval(RC_EVL_VAL) && !configGetval(RC_EXC_VAL) \
  @@ -296,14 +296,16 @@
           if (!configGetval(RC_RAW_VAL))
           if (!configGetval(RC_VRB_VAL))*/
   
  -/*
  -        if (!configGetval(RC_LOC_VAL)) {
  -            If exists '/etc/rc.d'
  -                clioptSetval(RC_LOC_VAL, "/etc/rc.d/rc.");
  -                FIXME: !This 'rc.' reading logic must still be implemented!
  -            Else
  -                RC_NOP;
  +        if (configGetval(RC_LOC_VAL)) {
  +            if ((pDir = opendir(configGetval(RC_LOC_VAL))) == NULL)
  +                return(RC_THROW(RC_ERR_LOC));   /* Failure, dir doesn't exist */
  +            else
  +                closedir(pDir);                 /* Success, directory exists */
           }
  +        else
  +            clioptSetval(RC_LOC_VAL, "./");
  +
  +/*
           if (!configGetval(RC_CNF_VAL)) {
               If exists '/etc/rcconf'
                   clioptSetval(RC_CNF_VAL, "/etc/rcconf");
  @@ -320,11 +322,25 @@
   
   /*        if (!configGetval(RC_QRY_VAL))*/
   
  +        if (configGetval(RC_TMP_VAL)) {
  +            if ((pDir = opendir(configGetval(RC_TMP_VAL))) == NULL)
  +                return(RC_THROW(RC_ERR_TMP));   /* Failure, tmp doesn't exist */
  +            else
  +                closedir(pDir);                 /* Success, tmp dir exists */
  +        }
  +        else {                                      /* User didn't set tmp so */
  +            clioptSetval(RC_TMP_VAL, RC_DEF_TMP);   /* set it for them here   */
  +            if ((pDir = opendir(RC_DEF_TMP)) == NULL)    /* Try using default */
  +                return(RC_THROW(RC_ERR_TMP));   /* Failure, default not there */
  +            else
  +                closedir(pDir);
  +        }
  +
           if (!configGetval(RC_TMP_VAL)) {
  -            pTmpdir = opendir(RC_DEF_TMP);
  -            if (pTmpdir)
  +            pDir = opendir(RC_DEF_TMP);
  +            if (pDir)
                   clioptSetval(RC_TMP_VAL, RC_DEF_TMP);
  -            closedir(pTmpdir);
  +            closedir(pDir);
           }
   
   /*        if (!configGetval(RC_OWN_VAL))
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jul  2 17:31:39 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 09E19767D5; Wed,  2 Jul 2003 17:31:39 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc.h rc_const.h rc_list.c rc_util.c
Message-Id: <20030702153139.09E19767D5@mail.ossp.org>
Date: Wed,  2 Jul 2003 17:31:39 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   02-Jul-2003 17:31:38
  Branch: HEAD                             Handle: 2003070216313800

  Modified files:
    ossp-pkg/rc             rc.h rc_const.h rc_list.c rc_util.c

  Log:
    Add temporary directory option error logic.

  Summary:
    Revision    Changes     Path
    1.57        +9  -8      ossp-pkg/rc/rc.h
    1.32        +2  -1      ossp-pkg/rc/rc_const.h
    1.3         +3  -3      ossp-pkg/rc/rc_list.c
    1.12        +2  -1      ossp-pkg/rc/rc_util.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc.h
  ============================================================================
  $ cvs diff -u -r1.56 -r1.57 rc.h
  --- ossp-pkg/rc/rc.h	1 Jul 2003 13:26:25 -0000	1.56
  +++ ossp-pkg/rc/rc.h	2 Jul 2003 15:31:38 -0000	1.57
  @@ -60,14 +60,15 @@
       RC_ERR_IO  = 5,   /* Input/output error       */
       RC_ERR_INT = 6,   /* Internal error           */
       RC_ERR_FNC = 7,   /* Func file not found      */
  -    RC_ERR_DIR = 8,   /* Location dir not found   */
  -    RC_ERR_RCF = 9,   /* Rc file not found        */
  -    RC_ERR_TRM = 10,  /* Request to terminate app */
  -    RC_ERR_CFG = 11,  /* Config or option failure */
  -    RC_ERR_ROOT = 12, /* Process must run as root */
  -    RC_WRN_0   = 13,  /* Warning base             */
  -    RC_WRN_OWR = 14,  /* Overwrite warning        */
  -    RC_WRN_NUL = 15   /* NULL pointer warning     */
  +    RC_ERR_LOC = 8,   /* Location dir not found   */
  +    RC_ERR_TMP = 9,   /* Temporary dir not found  */
  +    RC_ERR_RCF = 10,  /* Rc file not found        */
  +    RC_ERR_TRM = 11,  /* Request to terminate app */
  +    RC_ERR_CFG = 12,  /* Config or option failure */
  +    RC_ERR_ROOT = 13, /* Process must run as root */
  +    RC_WRN_0   = 14,  /* Warning base             */
  +    RC_WRN_OWR = 15,  /* Overwrite warning        */
  +    RC_WRN_NUL = 16   /* NULL pointer warning     */
   } rc_return_t;
   
   /* Config function prototypes */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_const.h
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 rc_const.h
  --- ossp-pkg/rc/rc_const.h	2 Jul 2003 14:45:25 -0000	1.31
  +++ ossp-pkg/rc/rc_const.h	2 Jul 2003 15:31:38 -0000	1.32
  @@ -123,7 +123,8 @@
   #define RC_ERRSTR_IO   "Input/Output"
   #define RC_ERRSTR_INT  "Internal"
   #define RC_ERRSTR_FNC  "Funcfile"
  -#define RC_ERRSTR_DIR  "Location"
  +#define RC_ERRSTR_LOC  "Location"
  +#define RC_ERRSTR_TMP  "Tempdir"
   #define RC_ERRSTR_RCF  "Rcfile"
   #define RC_ERRSTR_TRM  "Terminate"
   #define RC_ERRSTR_CFG  "Config/Options"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_list.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 rc_list.c
  --- ossp-pkg/rc/rc_list.c	27 Jun 2003 14:26:13 -0000	1.2
  +++ ossp-pkg/rc/rc_list.c	2 Jul 2003 15:31:38 -0000	1.3
  @@ -100,7 +100,7 @@
   
                   /* First just learn how many globbed files we have */
                   if ((pLocdir = opendir(szLocations)) == NULL)
  -                    return(RC_THROW(RC_ERR_DIR));
  +                    return(RC_THROW(RC_ERR_LOC));
                   for (pDirent = readdir(pLocdir); pDirent; pDirent = readdir(pLocdir))
                       if (!strncmp(pDirent->d_name, "rc.", strlen("rc.")))
                           nCount++;
  @@ -108,13 +108,13 @@
   
                   /* Prepare resources before entering rcfile allocation loop */
                   if (nCount == 0) /* Check out the health of this directory listing */
  -                    return(RC_THROW(RC_ERR_DIR));
  +                    return(RC_THROW(RC_ERR_LOC));
                   nIter = 0; /* Used in the next for block, so initialize */
                   pInst->m_ppFilevec = calloc(nCount + 1, sizeof (rc_file_t *));
                   if (!pInst->m_ppFilevec) /* Guard against memory overruns */
                       return(RC_THROW(RC_ERR_MEM));
                   if ((pLocdir = opendir(szLocations)) == NULL)
  -                    return(RC_THROW(RC_ERR_DIR));
  +                    return(RC_THROW(RC_ERR_LOC));
   
                   /* Loop through file index setting rc file names according to dirent */
                   for (pDirent = readdir(pLocdir); pDirent; pDirent = readdir(pLocdir))
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_util.c
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 rc_util.c
  --- ossp-pkg/rc/rc_util.c	2 Jul 2003 14:45:25 -0000	1.11
  +++ ossp-pkg/rc/rc_util.c	2 Jul 2003 15:31:38 -0000	1.12
  @@ -44,7 +44,8 @@
       else if (rv == RC_ERR_IO)   return RC_ERRSTR_IO;
       else if (rv == RC_ERR_INT)  return RC_ERRSTR_INT;
       else if (rv == RC_ERR_FNC)  return RC_ERRSTR_FNC;
  -    else if (rv == RC_ERR_DIR)  return RC_ERRSTR_DIR;
  +    else if (rv == RC_ERR_LOC)  return RC_ERRSTR_LOC;
  +    else if (rv == RC_ERR_TMP)  return RC_ERRSTR_TMP;
       else if (rv == RC_ERR_RCF)  return RC_ERRSTR_RCF;
       else if (rv == RC_ERR_TRM)  return RC_ERRSTR_TRM;
       else if (rv == RC_ERR_CFG)  return RC_ERRSTR_CFG;
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jul  2 17:34:30 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4D3E8767D5; Wed,  2 Jul 2003 17:34:30 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ 00TODO
Message-Id: <20030702153430.4D3E8767D5@mail.ossp.org>
Date: Wed,  2 Jul 2003 17:34:30 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   02-Jul-2003 17:34:30
  Branch: HEAD                             Handle: 2003070216342900

  Modified files:
    ossp-pkg/rc             00TODO

  Log:
    Remember to sort out the remaining strings in code.

  Summary:
    Revision    Changes     Path
    1.52        +1  -0      ossp-pkg/rc/00TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/00TODO
  ============================================================================
  $ cvs diff -u -r1.51 -r1.52 00TODO
  --- ossp-pkg/rc/00TODO	2 Jul 2003 13:38:51 -0000	1.51
  +++ ossp-pkg/rc/00TODO	2 Jul 2003 15:34:29 -0000	1.52
  @@ -14,6 +14,7 @@
       Explain logical ordering of multiple section spanning multiple rcfiles.
       Give example semantics of a common scenario.
       No error semantics in pseudocode.
  +  Remove all character strings from code to rc_const.h
   
   Known bugs
     Not multithreaded (too many potentials for race conditions or overwrite)
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jul  7 14:13:47 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D53CA76DB7; Mon,  7 Jul 2003 14:13:46 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-gui/ devtool.func
Message-Id: <20030707121346.D53CA76DB7@mail.ossp.org>
Date: Mon,  7 Jul 2003 14:13:46 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   07-Jul-2003 14:13:46
  Branch: HEAD                             Handle: 2003070713134600

  Modified files:
    ossp-pkg/as/as-gui      devtool.func

  Log:
    Don't try to remve a file that doesn't exist.

  Summary:
    Revision    Changes     Path
    1.3         +1  -2      ossp-pkg/as/as-gui/devtool.func
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/devtool.func
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.func
  --- ossp-pkg/as/as-gui/devtool.func	28 Nov 2002 20:44:36 -0000	1.2
  +++ ossp-pkg/as/as-gui/devtool.func	7 Jul 2003 12:13:46 -0000	1.3
  @@ -57,8 +57,7 @@
       shift
       case $tool in
           autoconf )
  -            echo "removing: config.h.in ac_config.h.in"
  -            rm -f configure config.h.in
  +            echo "removing: configure ac_config.h.in"
               rm -f configure ac_config.h.in
               ;;
           libtool )
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jul  7 14:23:47 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1356B76D87; Mon,  7 Jul 2003 14:23:47 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-gui/ devtool devtool.conf
Message-Id: <20030707122347.1356B76D87@mail.ossp.org>
Date: Mon,  7 Jul 2003 14:23:47 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   07-Jul-2003 14:23:46
  Branch: HEAD                             Handle: 2003070713234600

  Modified files:
    ossp-pkg/as/as-gui      devtool devtool.conf

  Log:
    Light changes and corrections to build configuration.

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/as/as-gui/devtool
    1.16        +4  -4      ossp-pkg/as/as-gui/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/devtool
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 devtool
  --- ossp-pkg/as/as-gui/devtool	28 Nov 2002 20:44:36 -0000	1.2
  +++ ossp-pkg/as/as-gui/devtool	7 Jul 2003 12:23:46 -0000	1.3
  @@ -32,7 +32,7 @@
   else
       tmpdir="/tmp"
   fi
  -tmpfile="$tmpdir/titraq.$$.tmp"
  +tmpfile="$tmpdir/as-gui.$$.tmp"
   
   rm -f $tmpfile
   touch $tmpfile
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 devtool.conf
  --- ossp-pkg/as/as-gui/devtool.conf	6 Mar 2003 16:25:55 -0000	1.15
  +++ ossp-pkg/as/as-gui/devtool.conf	7 Jul 2003 12:23:46 -0000	1.16
  @@ -3,7 +3,7 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.2 "1.6.*" all
  +    @autogen shtool   1.6.2 "1.[56].*" all
       @autogen autoconf 2.57  "2.5[3-9]*"
   
   %autoclean
  @@ -12,8 +12,8 @@
   
   %configure
       ./configure \
  -        --prefix=/tmp/as_gui \
  -        --datadir=/tmp/as_gui/share \
  +        --prefix=/tmp/as_gui/ \
  +        --datadir=/tmp/as_gui/share/ \
           --with-mico \
           --with-esoap \
           "$@"
  @@ -23,7 +23,7 @@
       ./devtool upload
   
   %version
  -    ./shtool version -l c -n "OSSP as-gui" -p asgui_ -e as_version.cpp
  +    ./shtool version -l c -n "OSSP as-gui" -p "asgui_" -e as_version.cpp
       V=`./shtool version -l c -d long as_version.cpp`
       sed -e "s/Version .*(.*)/Version $V/g" <README >README.n
       mv README.n README
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jul  7 14:55:45 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9510576DB9; Mon,  7 Jul 2003 14:55:44 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ Makefile.in README aclocal.m4 configure.in de...
Message-Id: <20030707125544.9510576DB9@mail.ossp.org>
Date: Mon,  7 Jul 2003 14:55:44 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   07-Jul-2003 14:55:44
  Branch: HEAD                             Handle: 2003070713554200

  Modified files:
    ossp-pkg/rc             Makefile.in README aclocal.m4 configure.in devtool
                            devtool.func rc-sample.pod rc.c rc.h rc.pod
                            rc_cliopt.c rc_config.c rc_config.h rc_const.h
                            rc_error.c rc_file.c rc_list.c rc_opt.c
                            rc_private.h rc_proc.c rc_script.c rc_sect.c
                            rc_test.sh rc_util.c

  Log:
    Correct and update copyrights and source headers.

  Summary:
    Revision    Changes     Path
    1.34        +3  -3      ossp-pkg/rc/Makefile.in
    1.6         +3  -3      ossp-pkg/rc/README
    1.10        +3  -3      ossp-pkg/rc/aclocal.m4
    1.19        +5  -5      ossp-pkg/rc/configure.in
    1.2         +1  -1      ossp-pkg/rc/devtool
    1.8         +1  -1      ossp-pkg/rc/devtool.func
    1.12        +3  -3      ossp-pkg/rc/rc-sample.pod
    1.43        +3  -3      ossp-pkg/rc/rc.c
    1.58        +3  -3      ossp-pkg/rc/rc.h
    1.44        +3  -3      ossp-pkg/rc/rc.pod
    1.19        +3  -3      ossp-pkg/rc/rc_cliopt.c
    1.38        +3  -3      ossp-pkg/rc/rc_config.c
    1.7         +3  -3      ossp-pkg/rc/rc_config.h
    1.33        +3  -3      ossp-pkg/rc/rc_const.h
    1.8         +3  -3      ossp-pkg/rc/rc_error.c
    1.5         +3  -3      ossp-pkg/rc/rc_file.c
    1.4         +3  -3      ossp-pkg/rc/rc_list.c
    1.8         +3  -3      ossp-pkg/rc/rc_opt.c
    1.36        +3  -3      ossp-pkg/rc/rc_private.h
    1.59        +3  -3      ossp-pkg/rc/rc_proc.c
    1.34        +3  -3      ossp-pkg/rc/rc_script.c
    1.18        +3  -3      ossp-pkg/rc/rc_sect.c
    1.28        +3  -3      ossp-pkg/rc/rc_test.sh
    1.13        +3  -3      ossp-pkg/rc/rc_util.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 Makefile.in
  --- ossp-pkg/rc/Makefile.in	18 Jun 2003 14:35:29 -0000	1.33
  +++ ossp-pkg/rc/Makefile.in	7 Jul 2003 12:55:42 -0000	1.34
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP rc - Run-command processor
  -##  Copyright (c) 2002 Ralf S. Engelschall
  -##  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  -##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2003 Ralf S. Engelschall
  +##  Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH
  +##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP rc, a portable Run-command processor
   ##  which can be found at http://www.ossp.org/pkg/lib/rc/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/README
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 README
  --- ossp-pkg/rc/README	28 Aug 2002 21:47:10 -0000	1.5
  +++ ossp-pkg/rc/README	7 Jul 2003 12:55:42 -0000	1.6
  @@ -12,9 +12,9 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +  Copyright (c) 2002-2003 Ralf S. Engelschall
  +  Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH
  +  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
   
     This file is part of OSSP rc, a Run-command processor which
     can be found at http://www.ossp.org/pkg/lib/rc/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 aclocal.m4
  --- ossp-pkg/rc/aclocal.m4	26 Mar 2002 17:11:06 -0000	1.9
  +++ ossp-pkg/rc/aclocal.m4	7 Jul 2003 12:55:42 -0000	1.10
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP rc - Run-command processor
  -dnl ##  Copyright (c) 2002 Ralf S. Engelschall
  -dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  -dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall
  +dnl ##  Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH
  +dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
   dnl ##
   dnl ##  This file is part of OSSP rc, a portable Run-command processor
   dnl ##  which can be found at http://www.ossp.org/pkg/lib/rc/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/configure.in
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 configure.in
  --- ossp-pkg/rc/configure.in	24 Apr 2002 16:49:08 -0000	1.18
  +++ ossp-pkg/rc/configure.in	7 Jul 2003 12:55:42 -0000	1.19
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP rc - Run-command processor
  -dnl ##  Copyright (c) 2002 Ralf S. Engelschall
  -dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  -dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall
  +dnl ##  Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH
  +dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
   dnl ##
   dnl ##  This file is part of OSSP rc, a portable Run-command processor
   dnl ##  which can be found at http://www.ossp.org/pkg/lib/rc/
  @@ -35,8 +35,8 @@
   dnl Announce the product and version
   V=`./shtool version -lc -dlong rc_version.c`
   ./shtool echo -e "Configuring %BOSSP rc%b, version %B${V}%b"
  -echo "Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>"
  -echo "Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>"
  +echo "Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>"
  +echo "Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>"
   
   dnl Process this file with autoconf
   AC_INIT(rc.h)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/devtool
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 devtool
  --- ossp-pkg/rc/devtool	18 Jan 2002 16:47:17 -0000	1.1
  +++ ossp-pkg/rc/devtool	7 Jul 2003 12:55:42 -0000	1.2
  @@ -1,7 +1,7 @@
   #! /bin/sh
   ##
   ##  devtool -- Development Tool
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com> 
   ##
   
   if [ $# -eq 0 ]; then
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/devtool.func
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 devtool.func
  --- ossp-pkg/rc/devtool.func	8 Apr 2002 15:37:10 -0000	1.7
  +++ ossp-pkg/rc/devtool.func	7 Jul 2003 12:55:42 -0000	1.8
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com> 
   ##
   
   devtool_require () {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc-sample.pod
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 rc-sample.pod
  --- ossp-pkg/rc/rc-sample.pod	23 Jun 2003 14:53:10 -0000	1.11
  +++ ossp-pkg/rc/rc-sample.pod	7 Jul 2003 12:55:42 -0000	1.12
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP rc -- Run-command processor samples (manual page)
  -##  Copyright (c) 2000-2002 Cable & Wireless Deutschland GmbH
  -##  Copyright (c) 2000-2002 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH
  +##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc.c
  ============================================================================
  $ cvs diff -u -r1.42 -r1.43 rc.c
  --- ossp-pkg/rc/rc.c	1 Jul 2003 13:26:25 -0000	1.42
  +++ ossp-pkg/rc/rc.c	7 Jul 2003 12:55:42 -0000	1.43
  @@ -1,7 +1,7 @@
   /*  OSSP rc - Run-command processor
  -**  Copyright (c) 2002 Ralf S. Engelschall
  -**  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP rc, a portable Run-command processor
   **  which can be found at http://www.ossp.org/pkg/lib/rc/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc.h
  ============================================================================
  $ cvs diff -u -r1.57 -r1.58 rc.h
  --- ossp-pkg/rc/rc.h	2 Jul 2003 15:31:38 -0000	1.57
  +++ ossp-pkg/rc/rc.h	7 Jul 2003 12:55:42 -0000	1.58
  @@ -1,7 +1,7 @@
   /*  OSSP rc - Run-command processor
  -**  Copyright (c) 2002 Ralf S. Engelschall
  -**  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP rc, a portable Run-command processor
   **  which can be found at http://www.ossp.org/pkg/lib/rc/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc.pod
  ============================================================================
  $ cvs diff -u -r1.43 -r1.44 rc.pod
  --- ossp-pkg/rc/rc.pod	26 Jun 2003 18:45:14 -0000	1.43
  +++ ossp-pkg/rc/rc.pod	7 Jul 2003 12:55:42 -0000	1.44
  @@ -1,8 +1,8 @@
   ##
   ##  rc.pod -- OSSP Run-command Processor (manual page)
  -##  Copyright (c) 2000-2002 Cable & Wireless Deutschland GmbH
  -##  Copyright (c) 2000-2002 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH
  +##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_cliopt.c
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 rc_cliopt.c
  --- ossp-pkg/rc/rc_cliopt.c	13 Jun 2003 18:33:07 -0000	1.18
  +++ ossp-pkg/rc/rc_cliopt.c	7 Jul 2003 12:55:42 -0000	1.19
  @@ -1,7 +1,7 @@
   /*  OSSP rc - Run-command processor
  -**  Copyright (c) 2002 Ralf S. Engelschall
  -**  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP rc, a portable Run-command processor
   **  which can be found at http://www.ossp.org/pkg/lib/rc/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_config.c
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 rc_config.c
  --- ossp-pkg/rc/rc_config.c	2 Jul 2003 15:30:20 -0000	1.37
  +++ ossp-pkg/rc/rc_config.c	7 Jul 2003 12:55:42 -0000	1.38
  @@ -1,7 +1,7 @@
   /*  OSSP rc - Run-command processor
  -**  Copyright (c) 2002 Ralf S. Engelschall
  -**  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP rc, a portable Run-command processor
   **  which can be found at http://www.ossp.org/pkg/lib/rc/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_config.h
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 rc_config.h
  --- ossp-pkg/rc/rc_config.h	13 Jun 2003 18:33:07 -0000	1.6
  +++ ossp-pkg/rc/rc_config.h	7 Jul 2003 12:55:42 -0000	1.7
  @@ -1,7 +1,7 @@
   /*  OSSP rc - Run-command processor
  -**  Copyright (c) 2002 Ralf S. Engelschall
  -**  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP rc, a portable Run-command processor
   **  which can be found at http://www.ossp.org/pkg/lib/rc/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_const.h
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 rc_const.h
  --- ossp-pkg/rc/rc_const.h	2 Jul 2003 15:31:38 -0000	1.32
  +++ ossp-pkg/rc/rc_const.h	7 Jul 2003 12:55:42 -0000	1.33
  @@ -1,7 +1,7 @@
   /*  OSSP rc - Run-command processor
  -**  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002 Ralf S. Engelschall
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP rc, a portable Run-command processor
   **  which can be found at http://www.ossp.org/pkg/rc/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_error.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 rc_error.c
  --- ossp-pkg/rc/rc_error.c	2 Jul 2003 15:29:08 -0000	1.7
  +++ ossp-pkg/rc/rc_error.c	7 Jul 2003 12:55:42 -0000	1.8
  @@ -1,7 +1,7 @@
   /*  OSSP rc - Run-command processor
  -**  Copyright (c) 2002 Ralf S. Engelschall
  -**  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP rc, a portable Run-command processor
   **  which can be found at http://www.ossp.org/pkg/lib/rc/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_file.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 rc_file.c
  --- ossp-pkg/rc/rc_file.c	30 Jun 2003 14:43:36 -0000	1.4
  +++ ossp-pkg/rc/rc_file.c	7 Jul 2003 12:55:42 -0000	1.5
  @@ -1,7 +1,7 @@
   /*  OSSP rc - Run-command processor
  -**  Copyright (c) 2002 Ralf S. Engelschall
  -**  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP rc, a portable Run-command processor
   **  which can be found at http://www.ossp.org/pkg/lib/rc/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_list.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 rc_list.c
  --- ossp-pkg/rc/rc_list.c	2 Jul 2003 15:31:38 -0000	1.3
  +++ ossp-pkg/rc/rc_list.c	7 Jul 2003 12:55:42 -0000	1.4
  @@ -1,7 +1,7 @@
   /*  OSSP rc - Run-command processor
  -**  Copyright (c) 2002 Ralf S. Engelschall
  -**  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP rc, a portable Run-command processor
   **  which can be found at http://www.ossp.org/pkg/lib/rc/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_opt.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 rc_opt.c
  --- ossp-pkg/rc/rc_opt.c	26 May 2003 16:03:57 -0000	1.7
  +++ ossp-pkg/rc/rc_opt.c	7 Jul 2003 12:55:42 -0000	1.8
  @@ -1,7 +1,7 @@
   /*  OSSP rc - Run-command processor
  -**  Copyright (c) 2002 Ralf S. Engelschall
  -**  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP rc, a portable Run-command processor
   **  which can be found at http://www.ossp.org/pkg/lib/rc/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_private.h
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 rc_private.h
  --- ossp-pkg/rc/rc_private.h	27 Jun 2003 10:15:19 -0000	1.35
  +++ ossp-pkg/rc/rc_private.h	7 Jul 2003 12:55:42 -0000	1.36
  @@ -1,7 +1,7 @@
   /*  OSSP rc - Run-command processor
  -**  Copyright (c) 2002 Ralf S. Engelschall
  -**  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP rc, a portable Run-command processor
   **  which can be found at http://www.ossp.org/pkg/lib/rc/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.58 -r1.59 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	1 Jul 2003 13:26:25 -0000	1.58
  +++ ossp-pkg/rc/rc_proc.c	7 Jul 2003 12:55:42 -0000	1.59
  @@ -1,7 +1,7 @@
   /*  OSSP rc - Run-command processor
  -**  Copyright (c) 2002 Ralf S. Engelschall
  -**  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP rc, a portable Run-command processor
   **  which can be found at http://www.ossp.org/pkg/lib/rc/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_script.c
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 rc_script.c
  --- ossp-pkg/rc/rc_script.c	30 Jun 2003 14:43:36 -0000	1.33
  +++ ossp-pkg/rc/rc_script.c	7 Jul 2003 12:55:42 -0000	1.34
  @@ -1,7 +1,7 @@
   /*  OSSP rc - Run-command processor
  -**  Copyright (c) 2002 Ralf S. Engelschall
  -**  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP rc, a portable Run-command processor
   **  which can be found at http://www.ossp.org/pkg/lib/rc/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_sect.c
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 rc_sect.c
  --- ossp-pkg/rc/rc_sect.c	30 Jun 2003 14:43:36 -0000	1.17
  +++ ossp-pkg/rc/rc_sect.c	7 Jul 2003 12:55:42 -0000	1.18
  @@ -1,7 +1,7 @@
   /*  OSSP rc - Run-command processor
  -**  Copyright (c) 2002 Ralf S. Engelschall
  -**  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP rc, a portable Run-command processor
   **  which can be found at http://www.ossp.org/pkg/lib/rc/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_test.sh
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 rc_test.sh
  --- ossp-pkg/rc/rc_test.sh	23 Jun 2003 15:46:05 -0000	1.27
  +++ ossp-pkg/rc/rc_test.sh	7 Jul 2003 12:55:42 -0000	1.28
  @@ -1,8 +1,8 @@
   #! /bin/sh
   #  OSSP rc - Run-command processor
  -#  Copyright (c) 2002 Ralf S. Engelschall
  -#  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  -#  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +#  Copyright (c) 2002-2003 Ralf S. Engelschall
  +#  Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH
  +#  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
   #
   #  This file is part of OSSP rc, a portable Run-command processor
   #  which can be found at http://www.ossp.org/pkg/lib/rc/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_util.c
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 rc_util.c
  --- ossp-pkg/rc/rc_util.c	2 Jul 2003 15:31:38 -0000	1.12
  +++ ossp-pkg/rc/rc_util.c	7 Jul 2003 12:55:42 -0000	1.13
  @@ -1,7 +1,7 @@
   /*  OSSP rc - Run-command processor
  -**  Copyright (c) 2002 Ralf S. Engelschall
  -**  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  -**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall
  +**  Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH
  +**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP rc, a portable Run-command processor
   **  which can be found at http://www.ossp.org/pkg/lib/rc/
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jul  7 15:08:10 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DA83C76DC1; Mon,  7 Jul 2003 15:08:09 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ ChangeLog README
Message-Id: <20030707130809.DA83C76DC1@mail.ossp.org>
Date: Mon,  7 Jul 2003 15:08:09 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   07-Jul-2003 15:08:09
  Branch: HEAD                             Handle: 2003070714080900

  Modified files:
    ossp-pkg/rc             ChangeLog README

  Log:
    Normalize title text to OSSP standard.

  Summary:
    Revision    Changes     Path
    1.3         +5  -4      ossp-pkg/rc/ChangeLog
    1.7         +5  -4      ossp-pkg/rc/README
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ChangeLog
  --- ossp-pkg/rc/ChangeLog	10 Jan 2002 20:05:34 -0000	1.2
  +++ ossp-pkg/rc/ChangeLog	7 Jul 2003 13:08:09 -0000	1.3
  @@ -1,7 +1,8 @@
  -   _ __ ___ 
  -  | '__/ __|
  -  | | | (__ 
  -  |_|  \___|
  +    ___  ____ ____  ____             
  +   / _ \/ ___/ ___||  _ \   _ __ ___ 
  +  | | | \___ \___ \| |_) | | '__/ __|
  +  | |_| |___) |__) |  __/  | | | (__ 
  +   \___/|____/____/|_|     |_|  \___|
   
     rc - Runcommand processor
     ____________________________________________________________________
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/README
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 README
  --- ossp-pkg/rc/README	7 Jul 2003 12:55:42 -0000	1.6
  +++ ossp-pkg/rc/README	7 Jul 2003 13:08:09 -0000	1.7
  @@ -1,7 +1,8 @@
  -   _ __ ___ 
  -  | '__/ __|
  -  | | | (__ 
  -  |_|  \___|
  +    ___  ____ ____  ____             
  +   / _ \/ ___/ ___||  _ \   _ __ ___ 
  +  | | | \___ \___ \| |_) | | '__/ __|
  +  | |_| |___) |__) |  __/  | | | (__ 
  +   \___/|____/____/|_|     |_|  \___|
   
     OSSP rc - Run-command processor
     Version 0.1.0 (00-Duc-2002)
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jul  7 15:30:56 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 956B976DC1; Mon,  7 Jul 2003 15:30:55 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ AUTHORS ChangeLog Makefile.in README aclocal....
Message-Id: <20030707133055.956B976DC1@mail.ossp.org>
Date: Mon,  7 Jul 2003 15:30:55 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   07-Jul-2003 15:30:53
  Branch: HEAD                             Handle: 2003070714305001

  Modified files:
    ossp-pkg/rc             AUTHORS ChangeLog Makefile.in README aclocal.m4
                            configure.in rc-sample.pod rc.c rc.h rc_cliopt.c
                            rc_config.c rc_config.h rc_const.h rc_error.c
                            rc_list.c rc_opt.c rc_private.h rc_proc.c
                            rc_script.c rc_sect.c rc_test.sh rc_util.c

  Log:
    More header corrections and improvements.

  Summary:
    Revision    Changes     Path
    1.3         +13 -6      ossp-pkg/rc/AUTHORS
    1.4         +6  -7      ossp-pkg/rc/ChangeLog
    1.35        +2  -2      ossp-pkg/rc/Makefile.in
    1.8         +8  -8      ossp-pkg/rc/README
    1.11        +2  -2      ossp-pkg/rc/aclocal.m4
    1.20        +2  -2      ossp-pkg/rc/configure.in
    1.13        +1  -1      ossp-pkg/rc/rc-sample.pod
    1.44        +3  -3      ossp-pkg/rc/rc.c
    1.59        +3  -3      ossp-pkg/rc/rc.h
    1.20        +3  -3      ossp-pkg/rc/rc_cliopt.c
    1.39        +3  -3      ossp-pkg/rc/rc_config.c
    1.8         +3  -3      ossp-pkg/rc/rc_config.h
    1.34        +3  -3      ossp-pkg/rc/rc_const.h
    1.9         +3  -3      ossp-pkg/rc/rc_error.c
    1.5         +3  -3      ossp-pkg/rc/rc_list.c
    1.9         +3  -3      ossp-pkg/rc/rc_opt.c
    1.37        +3  -3      ossp-pkg/rc/rc_private.h
    1.60        +3  -3      ossp-pkg/rc/rc_proc.c
    1.35        +3  -3      ossp-pkg/rc/rc_script.c
    1.19        +3  -3      ossp-pkg/rc/rc_sect.c
    1.29        +3  -3      ossp-pkg/rc/rc_test.sh
    1.14        +3  -3      ossp-pkg/rc/rc_util.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/AUTHORS
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 AUTHORS
  --- ossp-pkg/rc/AUTHORS	31 Jan 2002 21:14:10 -0000	1.2
  +++ ossp-pkg/rc/AUTHORS	7 Jul 2003 13:30:50 -0000	1.3
  @@ -1,8 +1,15 @@
  -AUTHORS
  -=======
  +   _        ___  ____ ____  ____             
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _ __ ___ 
  +  _|_||_| | | | \___ \___ \| |_) | | '__/ __|
  + |_||_|_| | |_| |___) |__) |  __/  | | | (__ 
  +  |_|_|_|  \___/|____/____/|_|     |_|  \___|
   
  -This is a list of the authors who have written
  -or edited major parts of the OSSP rc source code.
  +  OSSP rc - Run-Command Processor
   
  -Ralf S. Engelschall             <ralf.engelschall@cw.com>
  -Michael Schloh von Bennewitz    <michael.schloh@cw.com>
  +  AUTHORS
  +
  +  This is a list of the authors who have written
  +  or edited major parts of the OSSP rc source code.
  +
  +  Ralf S. Engelschall             <ralf.engelschall@cw.com>
  +  Michael Schloh von Bennewitz    <michael.schloh@cw.com>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ChangeLog
  --- ossp-pkg/rc/ChangeLog	7 Jul 2003 13:08:09 -0000	1.3
  +++ ossp-pkg/rc/ChangeLog	7 Jul 2003 13:30:50 -0000	1.4
  @@ -1,11 +1,10 @@
  -    ___  ____ ____  ____             
  -   / _ \/ ___/ ___||  _ \   _ __ ___ 
  -  | | | \___ \___ \| |_) | | '__/ __|
  -  | |_| |___) |__) |  __/  | | | (__ 
  -   \___/|____/____/|_|     |_|  \___|
  +   _        ___  ____ ____  ____             
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _ __ ___ 
  +  _|_||_| | | | \___ \___ \| |_) | | '__/ __|
  + |_||_|_| | |_| |___) |__) |  __/  | | | (__ 
  +  |_|_|_|  \___/|____/____/|_|     |_|  \___|
   
  -  rc - Runcommand processor
  -  ____________________________________________________________________
  +  OSSP rc - Run-Command Processor
   
     ChangeLog
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 Makefile.in
  --- ossp-pkg/rc/Makefile.in	7 Jul 2003 12:55:42 -0000	1.34
  +++ ossp-pkg/rc/Makefile.in	7 Jul 2003 13:30:50 -0000	1.35
  @@ -1,10 +1,10 @@
   ##
  -##  OSSP rc - Run-command processor
  +##  OSSP rc - Run-Command Processor
   ##  Copyright (c) 2002-2003 Ralf S. Engelschall
   ##  Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH
   ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
   ##
  -##  This file is part of OSSP rc, a portable Run-command processor
  +##  This file is part of OSSP rc, a portable run-command processor
   ##  which can be found at http://www.ossp.org/pkg/lib/rc/
   ##
   ##  Permission to use, copy, modify, and distribute this software for
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/README
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 README
  --- ossp-pkg/rc/README	7 Jul 2003 13:08:09 -0000	1.7
  +++ ossp-pkg/rc/README	7 Jul 2003 13:30:50 -0000	1.8
  @@ -1,15 +1,15 @@
  -    ___  ____ ____  ____             
  -   / _ \/ ___/ ___||  _ \   _ __ ___ 
  -  | | | \___ \___ \| |_) | | '__/ __|
  -  | |_| |___) |__) |  __/  | | | (__ 
  -   \___/|____/____/|_|     |_|  \___|
  +   _        ___  ____ ____  ____             
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _ __ ___ 
  +  _|_||_| | | | \___ \___ \| |_) | | '__/ __|
  + |_||_|_| | |_| |___) |__) |  __/  | | | (__ 
  +  |_|_|_|  \___/|____/____/|_|     |_|  \___|
   
  -  OSSP rc - Run-command processor
  +  OSSP rc - Run-Command Processor
     Version 0.1.0 (00-Duc-2002)
   
     ABSTRACT
   
  -  The OSSP Run-command processor is a Duck.
  +  The OSSP Run-Command Processor is a Duck.
   
     COPYRIGHT AND LICENSE
   
  @@ -17,7 +17,7 @@
     Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH
     Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
   
  -  This file is part of OSSP rc, a Run-command processor which
  +  This file is part of OSSP rc, a run-command processor which
     can be found at http://www.ossp.org/pkg/lib/rc/.
   
     Permission to use, copy, modify, and distribute this software for
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 aclocal.m4
  --- ossp-pkg/rc/aclocal.m4	7 Jul 2003 12:55:42 -0000	1.10
  +++ ossp-pkg/rc/aclocal.m4	7 Jul 2003 13:30:50 -0000	1.11
  @@ -1,10 +1,10 @@
   dnl ##
  -dnl ##  OSSP rc - Run-command processor
  +dnl ##  OSSP rc - Run-Command Processor
   dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall
   dnl ##  Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH
   dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
   dnl ##
  -dnl ##  This file is part of OSSP rc, a portable Run-command processor
  +dnl ##  This file is part of OSSP rc, a portable run-command processor
   dnl ##  which can be found at http://www.ossp.org/pkg/lib/rc/
   dnl ##
   dnl ##  Permission to use, copy, modify, and distribute this software for
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/configure.in
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 configure.in
  --- ossp-pkg/rc/configure.in	7 Jul 2003 12:55:42 -0000	1.19
  +++ ossp-pkg/rc/configure.in	7 Jul 2003 13:30:51 -0000	1.20
  @@ -1,10 +1,10 @@
   dnl ##
  -dnl ##  OSSP rc - Run-command processor
  +dnl ##  OSSP rc - Run-Command Processor
   dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall
   dnl ##  Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH
   dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
   dnl ##
  -dnl ##  This file is part of OSSP rc, a portable Run-command processor
  +dnl ##  This file is part of OSSP rc, a portable run-command processor
   dnl ##  which can be found at http://www.ossp.org/pkg/lib/rc/
   dnl ##
   dnl ##  Permission to use, copy, modify, and distribute this software for
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc-sample.pod
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 rc-sample.pod
  --- ossp-pkg/rc/rc-sample.pod	7 Jul 2003 12:55:42 -0000	1.12
  +++ ossp-pkg/rc/rc-sample.pod	7 Jul 2003 13:30:51 -0000	1.13
  @@ -1,5 +1,5 @@
   ##
  -##  OSSP rc -- Run-command processor samples (manual page)
  +##  OSSP rc -- Run-Command Processor samples (manual page)
   ##  Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH
   ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc.c
  ============================================================================
  $ cvs diff -u -r1.43 -r1.44 rc.c
  --- ossp-pkg/rc/rc.c	7 Jul 2003 12:55:42 -0000	1.43
  +++ ossp-pkg/rc/rc.c	7 Jul 2003 13:30:51 -0000	1.44
  @@ -1,9 +1,9 @@
  -/*  OSSP rc - Run-command processor
  +/*  OSSP rc - Run-Command Processor
   **  Copyright (c) 2002-2003 Ralf S. Engelschall
   **  Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH
   **  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of OSSP rc, a portable Run-command processor
  +**  This file is part of OSSP rc, a portable run-command processor
   **  which can be found at http://www.ossp.org/pkg/lib/rc/
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -24,7 +24,7 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  rc.c: Run-command processor ISO C source file
  +**  rc.c: Run-Command Processor ISO C source file
   */
   
   #include <stdlib.h> /* Just for calling 'exit(3)' once */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc.h
  ============================================================================
  $ cvs diff -u -r1.58 -r1.59 rc.h
  --- ossp-pkg/rc/rc.h	7 Jul 2003 12:55:42 -0000	1.58
  +++ ossp-pkg/rc/rc.h	7 Jul 2003 13:30:51 -0000	1.59
  @@ -1,9 +1,9 @@
  -/*  OSSP rc - Run-command processor
  +/*  OSSP rc - Run-Command Processor
   **  Copyright (c) 2002-2003 Ralf S. Engelschall
   **  Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH
   **  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of OSSP rc, a portable Run-command processor
  +**  This file is part of OSSP rc, a portable run-command processor
   **  which can be found at http://www.ossp.org/pkg/lib/rc/
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -24,7 +24,7 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  rc.h: Run-command processor ISO C public header file
  +**  rc.h: Run-Command Processor ISO C public header file
   */
   
   #ifndef __OSSPRC_H__
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_cliopt.c
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 rc_cliopt.c
  --- ossp-pkg/rc/rc_cliopt.c	7 Jul 2003 12:55:42 -0000	1.19
  +++ ossp-pkg/rc/rc_cliopt.c	7 Jul 2003 13:30:51 -0000	1.20
  @@ -1,9 +1,9 @@
  -/*  OSSP rc - Run-command processor
  +/*  OSSP rc - Run-Command Processor
   **  Copyright (c) 2002-2003 Ralf S. Engelschall
   **  Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH
   **  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of OSSP rc, a portable Run-command processor
  +**  This file is part of OSSP rc, a portable run-command processor
   **  which can be found at http://www.ossp.org/pkg/lib/rc/
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -24,7 +24,7 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  rc_cliopt.c: Run-command processor ISO C source file
  +**  rc_cliopt.c: Run-Command Processor ISO C source file
   */
   
   #include <stdlib.h>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_config.c
  ============================================================================
  $ cvs diff -u -r1.38 -r1.39 rc_config.c
  --- ossp-pkg/rc/rc_config.c	7 Jul 2003 12:55:42 -0000	1.38
  +++ ossp-pkg/rc/rc_config.c	7 Jul 2003 13:30:51 -0000	1.39
  @@ -1,9 +1,9 @@
  -/*  OSSP rc - Run-command processor
  +/*  OSSP rc - Run-Command Processor
   **  Copyright (c) 2002-2003 Ralf S. Engelschall
   **  Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH
   **  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of OSSP rc, a portable Run-command processor
  +**  This file is part of OSSP rc, a portable run-command processor
   **  which can be found at http://www.ossp.org/pkg/lib/rc/
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -24,7 +24,7 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  rc_config.c: Run-command processor ISO C source file
  +**  rc_config.c: Run-Command Processor ISO C source file
   */
   
   #include <stdlib.h>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_config.h
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 rc_config.h
  --- ossp-pkg/rc/rc_config.h	7 Jul 2003 12:55:42 -0000	1.7
  +++ ossp-pkg/rc/rc_config.h	7 Jul 2003 13:30:51 -0000	1.8
  @@ -1,9 +1,9 @@
  -/*  OSSP rc - Run-command processor
  +/*  OSSP rc - Run-Command Processor
   **  Copyright (c) 2002-2003 Ralf S. Engelschall
   **  Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH
   **  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of OSSP rc, a portable Run-command processor
  +**  This file is part of OSSP rc, a portable run-command processor
   **  which can be found at http://www.ossp.org/pkg/lib/rc/
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -24,7 +24,7 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  rc_config.h: Run-command processor ISO C public header file
  +**  rc_config.h: Run-Command Processor ISO C public header file
   */
   
   #ifndef __OSSPRC_CONFIG_H__
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_const.h
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 rc_const.h
  --- ossp-pkg/rc/rc_const.h	7 Jul 2003 12:55:42 -0000	1.33
  +++ ossp-pkg/rc/rc_const.h	7 Jul 2003 13:30:51 -0000	1.34
  @@ -1,9 +1,9 @@
  -/*  OSSP rc - Run-command processor
  +/*  OSSP rc - Run-Command Processor
   **  Copyright (c) 2002-2003 Ralf S. Engelschall
   **  Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH
   **  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of OSSP rc, a portable Run-command processor
  +**  This file is part of OSSP rc, a portable run-command processor
   **  which can be found at http://www.ossp.org/pkg/rc/
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -24,7 +24,7 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  rc_const.h: Run-command processor ISO C public header file
  +**  rc_const.h: Run-Command Processor ISO C public header file
   */
   
   #ifndef __OSSPRC_CONST_H__
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_error.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 rc_error.c
  --- ossp-pkg/rc/rc_error.c	7 Jul 2003 12:55:42 -0000	1.8
  +++ ossp-pkg/rc/rc_error.c	7 Jul 2003 13:30:51 -0000	1.9
  @@ -1,9 +1,9 @@
  -/*  OSSP rc - Run-command processor
  +/*  OSSP rc - Run-Command Processor
   **  Copyright (c) 2002-2003 Ralf S. Engelschall
   **  Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH
   **  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of OSSP rc, a portable Run-command processor
  +**  This file is part of OSSP rc, a portable run-command processor
   **  which can be found at http://www.ossp.org/pkg/lib/rc/
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -24,7 +24,7 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  rc_error.c: Run-command processor ISO C source file
  +**  rc_error.c: Run-Command Processor ISO C source file
   */
   
   #include <stdlib.h>    /* Just for calling 'exit(3)' once */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_list.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 rc_list.c
  --- ossp-pkg/rc/rc_list.c	7 Jul 2003 12:55:42 -0000	1.4
  +++ ossp-pkg/rc/rc_list.c	7 Jul 2003 13:30:51 -0000	1.5
  @@ -1,9 +1,9 @@
  -/*  OSSP rc - Run-command processor
  +/*  OSSP rc - Run-Command Processor
   **  Copyright (c) 2002-2003 Ralf S. Engelschall
   **  Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH
   **  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of OSSP rc, a portable Run-command processor
  +**  This file is part of OSSP rc, a portable run-command processor
   **  which can be found at http://www.ossp.org/pkg/lib/rc/
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -24,7 +24,7 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  rc_list.c: Run-command processor ISO C source file
  +**  rc_list.c: Run-Command Processor ISO C source file
   */
   
   #include <stdlib.h>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_opt.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 rc_opt.c
  --- ossp-pkg/rc/rc_opt.c	7 Jul 2003 12:55:42 -0000	1.8
  +++ ossp-pkg/rc/rc_opt.c	7 Jul 2003 13:30:51 -0000	1.9
  @@ -1,9 +1,9 @@
  -/*  OSSP rc - Run-command processor
  +/*  OSSP rc - Run-Command Processor
   **  Copyright (c) 2002-2003 Ralf S. Engelschall
   **  Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH
   **  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of OSSP rc, a portable Run-command processor
  +**  This file is part of OSSP rc, a portable run-command processor
   **  which can be found at http://www.ossp.org/pkg/lib/rc/
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -24,7 +24,7 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  rc_opt.c: Run-command processor ISO C source file
  +**  rc_opt.c: Run-Command Processor ISO C source file
   */
   
   #include <stdio.h>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_private.h
  ============================================================================
  $ cvs diff -u -r1.36 -r1.37 rc_private.h
  --- ossp-pkg/rc/rc_private.h	7 Jul 2003 12:55:42 -0000	1.36
  +++ ossp-pkg/rc/rc_private.h	7 Jul 2003 13:30:51 -0000	1.37
  @@ -1,9 +1,9 @@
  -/*  OSSP rc - Run-command processor
  +/*  OSSP rc - Run-Command Processor
   **  Copyright (c) 2002-2003 Ralf S. Engelschall
   **  Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH
   **  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of OSSP rc, a portable Run-command processor
  +**  This file is part of OSSP rc, a portable run-command processor
   **  which can be found at http://www.ossp.org/pkg/lib/rc/
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -24,7 +24,7 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  rc_private.h: Run-command processor ISO C private API header file
  +**  rc_private.h: Run-Command Processor ISO C private API header file
   */
   
   #ifndef __OSSPRC_PRIVATE_H__
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.59 -r1.60 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	7 Jul 2003 12:55:42 -0000	1.59
  +++ ossp-pkg/rc/rc_proc.c	7 Jul 2003 13:30:51 -0000	1.60
  @@ -1,9 +1,9 @@
  -/*  OSSP rc - Run-command processor
  +/*  OSSP rc - Run-Command Processor
   **  Copyright (c) 2002-2003 Ralf S. Engelschall
   **  Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH
   **  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of OSSP rc, a portable Run-command processor
  +**  This file is part of OSSP rc, a portable run-command processor
   **  which can be found at http://www.ossp.org/pkg/lib/rc/
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -24,7 +24,7 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  rc_proc.c: Run-command processor ISO C source file
  +**  rc_proc.c: Run-Command Processor ISO C source file
   */
   
   #include <stdlib.h>     /* Standard system headers    */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_script.c
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 rc_script.c
  --- ossp-pkg/rc/rc_script.c	7 Jul 2003 12:55:42 -0000	1.34
  +++ ossp-pkg/rc/rc_script.c	7 Jul 2003 13:30:51 -0000	1.35
  @@ -1,9 +1,9 @@
  -/*  OSSP rc - Run-command processor
  +/*  OSSP rc - Run-Command Processor
   **  Copyright (c) 2002-2003 Ralf S. Engelschall
   **  Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH
   **  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of OSSP rc, a portable Run-command processor
  +**  This file is part of OSSP rc, a portable run-command processor
   **  which can be found at http://www.ossp.org/pkg/lib/rc/
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -24,7 +24,7 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  rc_script.c: Run-command processor ISO C source file
  +**  rc_script.c: Run-Command Processor ISO C source file
   */
   
   #include <string.h>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_sect.c
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 rc_sect.c
  --- ossp-pkg/rc/rc_sect.c	7 Jul 2003 12:55:42 -0000	1.18
  +++ ossp-pkg/rc/rc_sect.c	7 Jul 2003 13:30:51 -0000	1.19
  @@ -1,9 +1,9 @@
  -/*  OSSP rc - Run-command processor
  +/*  OSSP rc - Run-Command Processor
   **  Copyright (c) 2002-2003 Ralf S. Engelschall
   **  Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH
   **  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of OSSP rc, a portable Run-command processor
  +**  This file is part of OSSP rc, a portable run-command processor
   **  which can be found at http://www.ossp.org/pkg/lib/rc/
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -24,7 +24,7 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  rc_sect.c: Run-command processor ISO C source file
  +**  rc_sect.c: Run-Command Processor ISO C source file
   */
   
   #include <string.h> /* For string copy and such data ops */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_test.sh
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 rc_test.sh
  --- ossp-pkg/rc/rc_test.sh	7 Jul 2003 12:55:42 -0000	1.28
  +++ ossp-pkg/rc/rc_test.sh	7 Jul 2003 13:30:51 -0000	1.29
  @@ -1,10 +1,10 @@
   #! /bin/sh
  -#  OSSP rc - Run-command processor
  +#  OSSP rc - Run-Command Processor
   #  Copyright (c) 2002-2003 Ralf S. Engelschall
   #  Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH
   #  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
   #
  -#  This file is part of OSSP rc, a portable Run-command processor
  +#  This file is part of OSSP rc, a portable run-command processor
   #  which can be found at http://www.ossp.org/pkg/lib/rc/
   #
   #  Permission to use, copy, modify, and distribute this software for
  @@ -25,7 +25,7 @@
   #  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   #  SUCH DAMAGE.
   #
  -#  test_rc.sh: Run-command processor test script
  +#  test_rc.sh: Run-Command Processor test script
   
   if [ -d $MOPKG/etc ]; then
       RCBASE=$MOPKG/etc
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_util.c
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 rc_util.c
  --- ossp-pkg/rc/rc_util.c	7 Jul 2003 12:55:42 -0000	1.13
  +++ ossp-pkg/rc/rc_util.c	7 Jul 2003 13:30:51 -0000	1.14
  @@ -1,9 +1,9 @@
  -/*  OSSP rc - Run-command processor
  +/*  OSSP rc - Run-Command Processor
   **  Copyright (c) 2002-2003 Ralf S. Engelschall
   **  Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH
   **  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
   **
  -**  This file is part of OSSP rc, a portable Run-command processor
  +**  This file is part of OSSP rc, a portable run-command processor
   **  which can be found at http://www.ossp.org/pkg/lib/rc/
   **
   **  Permission to use, copy, modify, and distribute this software for
  @@ -24,7 +24,7 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  rc_util.c: Run-command processor ISO C source file
  +**  rc_util.c: Run-Command Processor ISO C source file
   */
   
   #include <stdlib.h>
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jul  7 17:19:27 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 29B8676DB9; Mon,  7 Jul 2003 17:19:27 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ README devtool.conf rc_version.c
Message-Id: <20030707151927.29B8676DB9@mail.ossp.org>
Date: Mon,  7 Jul 2003 17:19:27 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   07-Jul-2003 17:19:26
  Branch: HEAD                             Handle: 2003070716192600

  Modified files:
    ossp-pkg/rc             README devtool.conf rc_version.c

  Log:
    Complete build systeme.

  Summary:
    Revision    Changes     Path
    1.9         +1  -1      ossp-pkg/rc/README
    1.15        +41 -8      ossp-pkg/rc/devtool.conf
    1.2         +9  -9      ossp-pkg/rc/rc_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/README
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 README
  --- ossp-pkg/rc/README	7 Jul 2003 13:30:50 -0000	1.8
  +++ ossp-pkg/rc/README	7 Jul 2003 15:19:26 -0000	1.9
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_|  \___|
   
     OSSP rc - Run-Command Processor
  -  Version 0.1.0 (00-Duc-2002)
  +  Version 
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 devtool.conf
  --- ossp-pkg/rc/devtool.conf	29 Jul 2002 14:08:39 -0000	1.14
  +++ ossp-pkg/rc/devtool.conf	7 Jul 2003 15:19:26 -0000	1.15
  @@ -3,8 +3,8 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.1 "1.[56].*" all
  -    @autogen autoconf 2.53  "2.5[3-9]*"
  +    @autogen shtool   1.6.2 "1.[56].*" all
  +    @autogen autoconf 2.57  "2.5[3-9]*"
   
       echo "===> rc_ex (devtool autogen)"
       (cd rc_ex && ./devtool autogen)
  @@ -44,21 +44,54 @@
   
   %configure
       ./configure \
  -        --prefix=/tmp/rc \
  +        --prefix=/tmp/rc/ \
           --disable-shared \
           --enable-debug
           "$@"
   
   %version
  -    ./shtool version -l txt -n "OSSP rc" -e rc_version.c
  -    shtool version -l txt -n "OSSP rc" -p "rc_" -e rc_version.c
  -    V=`shtool version -l txt -d long rc_version.c`
  +    ./shtool version -l c -n "OSSP rc" -p "rc_" -e rc_version.c
  +    V=`./shtool version -l c -d long rc_version.c`
       sed -e "s/Version .*(.*)/Version $V/g" <README >README.n
       mv README.n README
   
  +%release
  +    ./devtool dist
  +    ./devtool upload
  +
  +%tag
  +    V=`./shtool version -l c -d short rc_version.c | sed -e 's;\.;_;g'`
  +    echo "+++ tagging CVS sources as OSSP_RC_${V}"
  +    cvs tag OSSP_RC_${V}
  +
   %dist
  +    echo "+++ cleaning"
  +    rm -f rc-*.tar.gz
  +    make distclean >/dev/null 2>&1
  +    ./devtool autoclean
  +    echo "+++ generating"
  +    ./devtool autogen
  +    echo "+++ configuring"
  +    ./devtool configure
  +    echo "+++ building"
  +    make clean all -j4
  +    echo "+++ cleaning"
       make distclean >/dev/null 2>&1
  +    echo "+++ fixing"
       ./shtool fixperm -v .
  -    V=`./shtool version -l txt -d short VERSION`
  +    echo "+++ rolling"
  +    V=`./shtool version -l c -d short rc_version.c`
       ./shtool tarball -o rc-${V}.tar.gz -d rc-${V} -u ossp -g ossp \
  -                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool.conf' -c 'gzip --best' .
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*,*.tar.gz,^#.*,.*~$,*.bak,00TODO,autom4te\.cache,^[0-9]\.*' \
  +                     -c 'gzip --best' .
  +    ls -l rc-${V}.tar.gz
  +    echo "+++ testing"
  +    gunzip <rc-${V}.tar.gz | tar tvf - | head -10
  +    echo "[...]"
  +    gunzip <rc-${V}.tar.gz | tar tvf - | tail -10
  +
  +%upload
  +    echo "+++ copying to ftp://ftp.ossp.org/pkg/tool/rc/"
  +	V=`./shtool version -lc -dshort rc_version.c`
  +    scp rc-${V}.tar.gz master.ossp.org:/e/ossp/ftp/pkg/tool/rc/
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_version.c
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 rc_version.c
  --- ossp-pkg/rc/rc_version.c	5 Feb 2002 19:12:24 -0000	1.1
  +++ ossp-pkg/rc/rc_version.c	7 Jul 2003 15:19:26 -0000	1.2
  @@ -8,7 +8,7 @@
   #ifndef _RC_VERSION_C_
   #define _RC_VERSION_C_
   
  -#define RC_VERSION 0x001201
  +#define RC_VERSION 0x007200
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _RC_VERSION_C_AS_HEADER_
   
   rc_version_t rc_version = {
  -    0x001201,
  -    "0.1.1",
  -    "0.1.1 (05-Feb-2002)",
  -    "This is OSSP rc, Version 0.1.1 (05-Feb-2002)",
  -    "OSSP rc 0.1.1 (05-Feb-2002)",
  -    "OSSP rc/0.1.1",
  -    "@(#)OSSP rc 0.1.1 (05-Feb-2002)",
  -    "$Id: rc_version.c,v 1.1 2002/02/05 19:12:24 ms Exp $"
  +    0x007200,
  +    "0.7.0",
  +    "0.7.0 (07-Jul-2003)",
  +    "This is OSSP rc, Version 0.7.0 (07-Jul-2003)",
  +    "OSSP rc 0.7.0 (07-Jul-2003)",
  +    "OSSP rc/0.7.0",
  +    "@(#)OSSP rc 0.7.0 (07-Jul-2003)",
  +    "$Id: rc_version.c,v 1.2 2003/07/07 15:19:26 ms Exp $"
   };
   
   #endif /* _RC_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jul  7 17:28:00 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 08E8376DBE; Mon,  7 Jul 2003 17:27:59 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ 00TODO README
Message-Id: <20030707152759.08E8376DBE@mail.ossp.org>
Date: Mon,  7 Jul 2003 17:27:59 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   07-Jul-2003 17:27:59
  Branch: HEAD                             Handle: 2003070716275900

  Modified files:
    ossp-pkg/rc             00TODO README

  Log:
    Finish up before a preliminary release.

  Summary:
    Revision    Changes     Path
    1.53        +1  -0      ossp-pkg/rc/00TODO
    1.10        +1  -1      ossp-pkg/rc/README
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/00TODO
  ============================================================================
  $ cvs diff -u -r1.52 -r1.53 00TODO
  --- ossp-pkg/rc/00TODO	2 Jul 2003 15:34:29 -0000	1.52
  +++ ossp-pkg/rc/00TODO	7 Jul 2003 15:27:59 -0000	1.53
  @@ -61,6 +61,7 @@
     If a variable is defined for which no default exists, warn user (Scholli.)
     Make own config, get rid of val because it doesn't hold strings.
     Write interlocking increment for thread-safe increments.
  +  Config object probably doesn't need a m_nLocks mutex, though.
     Convert some normal assert() to real runtime checks.
     Use str_hash von ossp str or static RC_XXX_VAL array from rc_option.h.
     Restore lost multiple location merging logic.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/README
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 README
  --- ossp-pkg/rc/README	7 Jul 2003 15:19:26 -0000	1.9
  +++ ossp-pkg/rc/README	7 Jul 2003 15:27:59 -0000	1.10
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_|  \___|
   
     OSSP rc - Run-Command Processor
  -  Version 
  +  Version 0.1.0 (00-Duc-2002)
   
     ABSTRACT
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jul  7 17:32:20 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A265E76DC1; Mon,  7 Jul 2003 17:32:20 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ ChangeLog README rc_version.c
Message-Id: <20030707153220.A265E76DC1@mail.ossp.org>
Date: Mon,  7 Jul 2003 17:32:20 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   07-Jul-2003 17:32:20
  Branch: HEAD                             Handle: 2003070716322000

  Modified files:
    ossp-pkg/rc             ChangeLog README rc_version.c

  Log:
    Bump version, and prepare for newborn pre-alpha virgin first green
    release.

  Summary:
    Revision    Changes     Path
    1.5         +5  -0      ossp-pkg/rc/ChangeLog
    1.11        +1  -1      ossp-pkg/rc/README
    1.3         +9  -9      ossp-pkg/rc/rc_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ChangeLog
  --- ossp-pkg/rc/ChangeLog	7 Jul 2003 13:30:50 -0000	1.4
  +++ ossp-pkg/rc/ChangeLog	7 Jul 2003 15:32:20 -0000	1.5
  @@ -8,6 +8,11 @@
   
     ChangeLog
   
  +  Changes between 0.1.0 and 0.7.1 (07-Jan-2002 to 07-July-2003):
  +
  +    *) Implemented most essential functionality to reach first milestone
  +       [Michael Schloh von Bennewitz]
  +
     Changes between *GENESIS* and 0.1.0 (07-Jan-2002 to 00-Duc-2002):
   
       *) Added Autoconf and other build configuration.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/README
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 README
  --- ossp-pkg/rc/README	7 Jul 2003 15:27:59 -0000	1.10
  +++ ossp-pkg/rc/README	7 Jul 2003 15:32:20 -0000	1.11
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_|  \___|
   
     OSSP rc - Run-Command Processor
  -  Version 0.1.0 (00-Duc-2002)
  +  Version 0.7.1 (07-Jul-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_version.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 rc_version.c
  --- ossp-pkg/rc/rc_version.c	7 Jul 2003 15:19:26 -0000	1.2
  +++ ossp-pkg/rc/rc_version.c	7 Jul 2003 15:32:20 -0000	1.3
  @@ -8,7 +8,7 @@
   #ifndef _RC_VERSION_C_
   #define _RC_VERSION_C_
   
  -#define RC_VERSION 0x007200
  +#define RC_VERSION 0x007201
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _RC_VERSION_C_AS_HEADER_
   
   rc_version_t rc_version = {
  -    0x007200,
  -    "0.7.0",
  -    "0.7.0 (07-Jul-2003)",
  -    "This is OSSP rc, Version 0.7.0 (07-Jul-2003)",
  -    "OSSP rc 0.7.0 (07-Jul-2003)",
  -    "OSSP rc/0.7.0",
  -    "@(#)OSSP rc 0.7.0 (07-Jul-2003)",
  -    "$Id: rc_version.c,v 1.2 2003/07/07 15:19:26 ms Exp $"
  +    0x007201,
  +    "0.7.1",
  +    "0.7.1 (07-Jul-2003)",
  +    "This is OSSP rc, Version 0.7.1 (07-Jul-2003)",
  +    "OSSP rc 0.7.1 (07-Jul-2003)",
  +    "OSSP rc/0.7.1",
  +    "@(#)OSSP rc 0.7.1 (07-Jul-2003)",
  +    "$Id: rc_version.c,v 1.3 2003/07/07 15:32:20 ms Exp $"
   };
   
   #endif /* _RC_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jul  8 13:41:54 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8FAE976D5B; Tue,  8 Jul 2003 13:41:54 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ Makefile.in
Message-Id: <20030708114154.8FAE976D5B@mail.ossp.org>
Date: Tue,  8 Jul 2003 13:41:54 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   08-Jul-2003 13:41:54
  Branch: HEAD                             Handle: 2003070812415400

  Modified files:
    ossp-pkg/rc             Makefile.in

  Log:
    Install executables with correct modes.

  Summary:
    Revision    Changes     Path
    1.36        +1  -1      ossp-pkg/rc/Makefile.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 Makefile.in
  --- ossp-pkg/rc/Makefile.in	7 Jul 2003 13:30:50 -0000	1.35
  +++ ossp-pkg/rc/Makefile.in	8 Jul 2003 11:41:54 -0000	1.36
  @@ -126,7 +126,7 @@
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man1
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man5
  -	$(SHTOOL) install -c -m 644 rc $(DESTDIR)$(bindir)/rc
  +	$(SHTOOL) install -c -m 755 rc $(DESTDIR)$(bindir)/rc
   	$(SHTOOL) install -c -m 644 rc.1 $(DESTDIR)$(mandir)/man1/rc.1
   	$(SHTOOL) install -c -m 644 rc-sample.5 $(DESTDIR)$(mandir)/man5/rc-sample.5
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jul  8 17:09:52 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4F80676D5B; Tue,  8 Jul 2003 17:09:52 +0200 (CEST)
From: "Michael van Elst" <mlelstv@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ configure.in devtool.conf rc_error.c rc_file....
Message-Id: <20030708150952.4F80676D5B@mail.ossp.org>
Date: Tue,  8 Jul 2003 17:09:52 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael van Elst
  Root:   /e/ossp/cvs                      Email:  mlelstv@ossp.org
  Module: ossp-pkg                         Date:   08-Jul-2003 17:09:52
  Branch: HEAD                             Handle: 2003070816095000

  Modified files:
    ossp-pkg/rc             configure.in devtool.conf rc_error.c rc_file.c
                            rc_list.c rc_opt.c rc_proc.c rc_sect.c

  Log:
    flush audit comments and changes

  Summary:
    Revision    Changes     Path
    1.21        +8  -8      ossp-pkg/rc/configure.in
    1.16        +19 -12     ossp-pkg/rc/devtool.conf
    1.10        +2  -0      ossp-pkg/rc/rc_error.c
    1.6         +22 -12     ossp-pkg/rc/rc_file.c
    1.6         +16 -6      ossp-pkg/rc/rc_list.c
    1.10        +10 -12     ossp-pkg/rc/rc_opt.c
    1.61        +7  -2      ossp-pkg/rc/rc_proc.c
    1.20        +38 -32     ossp-pkg/rc/rc_sect.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/configure.in
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 configure.in
  --- ossp-pkg/rc/configure.in	7 Jul 2003 13:30:51 -0000	1.20
  +++ ossp-pkg/rc/configure.in	8 Jul 2003 15:09:50 -0000	1.21
  @@ -72,10 +72,10 @@
   AC_CHECK_EXTLIB([OSSP popt],
                   popt, popt_getcontext, popt.h,
                   [SUBDIR_POPT=""],
  -                [SUBDIR_POPT="rc_popt"
  -                 CPPFLAGS="$CPPFLAGS -Irc_popt"
  -                 CFLAGS="$CFLAGS -Irc_popt"
  -                 LDFLAGS="$LDFLAGS -Lrc_popt/.libs"
  +                [SUBDIR_POPT="lib_popt"
  +                 CPPFLAGS="$CPPFLAGS -Ilib_popt"
  +                 CFLAGS="$CFLAGS -Ilib_popt"
  +                 LDFLAGS="$LDFLAGS -Llib_popt/.libs"
                    LIBS_EXTRA="$LIBS_EXTRA -lpopt"])
   AC_SUBST(SUBDIR_POPT)
   
  @@ -83,10 +83,10 @@
   AC_CHECK_EXTLIB([OSSP ex],
                   ex, __ex_ctx, ex.h,
                   [SUBDIR_EX=""],
  -                [SUBDIR_EX="rc_ex"
  -                 CPPFLAGS="$CPPFLAGS -Irc_ex"
  -                 CFLAGS="$CFLAGS -Irc_ex"
  -                 LDFLAGS="$LDFLAGS -Lrc_ex/.libs"
  +                [SUBDIR_EX="lib_ex"
  +                 CPPFLAGS="$CPPFLAGS -Ilib_ex"
  +                 CFLAGS="$CFLAGS -Ilib_ex"
  +                 LDFLAGS="$LDFLAGS -Llib_ex/.libs"
                    LIBS_EXTRA="$LIBS_EXTRA -lex"])
   AC_SUBST(SUBDIR_EX)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 devtool.conf
  --- ossp-pkg/rc/devtool.conf	7 Jul 2003 15:19:26 -0000	1.15
  +++ ossp-pkg/rc/devtool.conf	8 Jul 2003 15:09:50 -0000	1.16
  @@ -2,16 +2,23 @@
   ##  devtool.conf -- Development Tool Configuration
   ##
   
  +%checkout
  +    for name in ex popt; do
  +        echo "===> lib_${name} (cvs co)"
  +        cvs co -d lib_${name} ${name}
  +        echo "<=== lib_${name}"
  +    done
  +
   %autogen
       @autogen shtool   1.6.2 "1.[56].*" all
       @autogen autoconf 2.57  "2.5[3-9]*"
   
  -    echo "===> rc_ex (devtool autogen)"
  -    (cd rc_ex && ./devtool autogen)
  -    echo "<=== rc_ex"
  -    echo "===> rc_popt (devtool autogen)"
  -    (cd rc_popt && ./devtool autogen)
  -    echo "<=== rc_popt"
  +    echo "===> lib_ex (devtool autogen)"
  +    (cd lib_ex && ./devtool autogen)
  +    echo "<=== lib_ex"
  +    echo "===> lib_popt (devtool autogen)"
  +    (cd lib_popt && ./devtool autogen)
  +    echo "<=== lib_popt"
   #    echo "===> rc_str (devtool autogen)"
   #    (cd rc_str && ./devtool autogen)
   #    echo "<=== rc_str"
  @@ -26,12 +33,12 @@
       @autoclean shtool
       @autoclean autoconf
   
  -    echo "===> rc_ex (devtool autoclean)"
  -    (cd rc_ex && ./devtool autoclean)
  -    echo "<=== rc_ex"
  -    echo "===> rc_popt (devtool autoclean)"
  -    (cd rc_popt && ./devtool autoclean)
  -    echo "<=== rc_popt"
  +    echo "===> lib_ex (devtool autoclean)"
  +    (cd lib_ex && ./devtool autoclean)
  +    echo "<=== lib_ex"
  +    echo "===> lib_popt (devtool autoclean)"
  +    (cd lib_popt && ./devtool autoclean)
  +    echo "<=== lib_popt"
   #    echo "===> rc_str (devtool autoclean)"
   #    (cd rc_str && ./devtool autoclean)
   #    echo "<=== rc_str"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_error.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 rc_error.c
  --- ossp-pkg/rc/rc_error.c	7 Jul 2003 13:30:51 -0000	1.9
  +++ ossp-pkg/rc/rc_error.c	8 Jul 2003 15:09:50 -0000	1.10
  @@ -38,6 +38,8 @@
   ************************************************/
   void rcError(ex_t Localerr)
   {
  +    /* FIXME mlelstv -- looks like a case for a switch (pun intended) */
  +
       if (FAILED((rc_return_t)Localerr.ex_value)) { /* Error condition */
           if ((rc_return_t)Localerr.ex_value == RC_ERR_TRM)
               exit(0);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_file.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 rc_file.c
  --- ossp-pkg/rc/rc_file.c	7 Jul 2003 12:55:42 -0000	1.5
  +++ ossp-pkg/rc/rc_file.c	8 Jul 2003 15:09:50 -0000	1.6
  @@ -86,7 +86,9 @@
       if (!configGetval(RC_LOC_VAL))  /* Config should have */
           RC_THROW(RC_ERR_INT);       /* given a locs default */
       else { /* Only enter block with valid string, strdup can't handle NULL */
  -        if (*(configGetval(RC_LOC_VAL) + strlen(configGetval(RC_LOC_VAL)) - sizeof (char)) != '/') {
  +        /* FIXME mlelstv -- crashes on zero-length RC_LOC_VAL string */
  +        if (*(configGetval(RC_LOC_VAL) + strlen(configGetval(RC_LOC_VAL)) - 1) != '/') {
  +            /* FIXME mlelstv -- void pointer arithmetic from hell */
               szLocex = malloc(strlen(configGetval(RC_LOC_VAL)) + \
                                sizeof (char) + \
                                strlen("rc.") + \
  @@ -118,6 +120,7 @@
       while ((nRet = read(nFdrc, sBuf, RC_READ_BUFSIZE)) > 0)
           scriptnAppend(pScript, sBuf, nRet);
   
  +    /* FIXME mlelstv -- errno is lost ? */
       if (nRet == -1) /* Handle read errors */
           RC_THROW(RC_ERR_IO);
   
  @@ -139,6 +142,7 @@
           long nUid          = 0;
           int nUserbytes     = 0;
           int nTmp           = 0;
  +        char *pTmp         = NULL;
           int nOffset        = 0;
           int nFound         = 0;
           int nVecsize       = 0;
  @@ -160,8 +164,10 @@
               RC_THROW(RC_ERR_SYS);
           }
   
  -        if (pcre_fullinfo(pRegex, pExtra, PCRE_INFO_CAPTURECOUNT, &nSubstrings))
  +        if (pcre_fullinfo(pRegex, pExtra, PCRE_INFO_CAPTURECOUNT, &nSubstrings)) {
  +            free(pRegex);
               RC_THROW(RC_ERR_SYS);
  +        }
   
           /***********************************************************************/
           /* Reminder: PCRE writes vectors to help identify substrings.          */
  @@ -198,7 +204,7 @@
               piEnd     = piBlocend + *(pnVec + 7);
               szName = malloc((nLabsize + 1) * sizeof (char));
               strncpy(szName, piSecname, nLabsize);
  -            *(szName + nLabsize * sizeof (char)) = '\0';
  +            *(szName + nLabsize) = '\0';
               pSec = sectionNew(szName);
               free(szName);   /* Get rid of the temporary, actually   */
               szName = NULL;  /* just for making a new section string */
  @@ -217,10 +223,11 @@
               *(szTemp + nPribytes) = '\0';
               piSubtemp = strstr(szTemp, RC_DEF_PRG);
               if (piSubtemp) { /* Priority pattern found */
  -                for (nTmp = (int)piSubtemp + strlen(RC_DEF_PRG); \
  -                    isspace(*(char *)nTmp); nTmp += sizeof (char)); /* Strip */
  -                nPri = strtol((char *)nTmp, &piSep, 10);
  -                if ((char *)nTmp == piSep)  /* No priority number follows */
  +                for (pTmp = piSubtemp + strlen(RC_DEF_PRG); \
  +                    isspace(*pTmp); pTmp += 1)
  +                    continue; /* Strip */
  +                nPri = strtol(pTmp, &piSep, 10);
  +                if (pTmp == piSep)          /* No priority number follows */
                       RC_THROW(RC_ERR_USE);   /* which is an error */
                   else
                       sectionSetpri(pSec, nPri);  /* Found a priority value */
  @@ -289,11 +296,14 @@
                   strlen(piBlocend), 0, 0, pnVec, nVecsize);
           }
   
  -    /* Handle errors */
  -    if (nFound == 1)                        /* User gave no klammern */
  -        RC_THROW(RC_ERR_USE);               /* so complain about it */
  -    else if (nFound < PCRE_ERROR_NOMATCH)   /* Generic problem so */
  -        RC_THROW(RC_ERR_SYS);               /* return an error */
  +        /* release compiled regex */
  +        free(pRegex);
  +
  +        /* Handle errors */
  +        if (nFound == 1)                        /* User gave no klammern */
  +            RC_THROW(RC_ERR_USE);               /* so complain about it */
  +        else if (nFound < PCRE_ERROR_NOMATCH)   /* Generic problem so */
  +            RC_THROW(RC_ERR_SYS);               /* return an error */
       }
   
       /* Deallocate and clean */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_list.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 rc_list.c
  --- ossp-pkg/rc/rc_list.c	7 Jul 2003 13:30:51 -0000	1.5
  +++ ossp-pkg/rc/rc_list.c	8 Jul 2003 15:09:50 -0000	1.6
  @@ -63,8 +63,11 @@
       if (!kszName)
           return(RC_THROW(RC_ERR_RCF));
       else { /* Only enter block with valid string, strdup can't handle NULL */
  +        /* FIXME mlelstv -- why malloc only a single pointer ? */
  +        /* FIXME mlelstv -- why malloc when non-wildcard case allocs itself ? */
           pInst->m_ppFilevec = malloc(sizeof (rc_file_t *));
           if (strcmp(kszName, RC_GLOB_WILD)) {
  +            /* FIXME mlelstv -- already using two pointes here */
               pInst->m_ppFilevec[0] = rcfileNew(kszName);  /* For an object  */
               pInst->m_ppFilevec[1] = rcfileNew(NULL);     /* For the tail   */
               pInst->m_nFiles = 1;             /* We handle just one rc file */
  @@ -110,9 +113,13 @@
                   if (nCount == 0) /* Check out the health of this directory listing */
                       return(RC_THROW(RC_ERR_LOC));
                   nIter = 0; /* Used in the next for block, so initialize */
  +                /* FIXME mlelstv -- overwriting m_ppFilevec ?? */
                   pInst->m_ppFilevec = calloc(nCount + 1, sizeof (rc_file_t *));
                   if (!pInst->m_ppFilevec) /* Guard against memory overruns */
                       return(RC_THROW(RC_ERR_MEM));
  +                /* FIXME mlelstv -- scanning directory twice, so being unsure
  +                 *                  about how many files we have
  +                 */
                   if ((pLocdir = opendir(szLocations)) == NULL)
                       return(RC_THROW(RC_ERR_LOC));
   
  @@ -149,12 +156,13 @@
       assert(pInst && kszName); /* Dummy check */
   
       /* Iterate through list, searching for a rcfile matching the given name */
  -    for (nIter = 0; nIter < pInst->m_nFiles && \
  -        strcmp(pInst->m_ppFilevec[nIter]->m_szName, kszName); nIter++);
  -    if (nIter < pInst->m_nFiles)
  -        return(pInst->m_ppFilevec[nIter]);  /* Name of rcfile in list matched */
  -    else
  -        return(NULL);                       /* Name did not match any rcfile  */
  +    for (nIter = 0; nIter < pInst->m_nFiles; nIter++) {
  +        if (strcmp(pInst->m_ppFilevec[nIter]->m_szName, kszName) == 0)
  +            /* Name of rcfile in list matched */
  +            return(pInst->m_ppFilevec[nIter]);
  +    }
  +
  +    return(NULL);  /* Name did not match any rcfile  */
   }
   
   /************************************************
  @@ -171,8 +179,10 @@
       assert(pInst);  /* Verify sanity */
   
       if (pInst->m_ppFilevec) {
  +        /* free all rcfiles including extra tail element */
           for (nIter = 0; nIter <= pInst->m_nFiles; nIter++) {
               if (pInst->m_ppFilevec[nIter]) {
  +                /* FIXME mlelstv -- should be rcfileDelete() */
                   free(pInst->m_ppFilevec[nIter]); /* Deallocate a rcfile */
                   pInst->m_ppFilevec[nIter] = NULL;
               }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_opt.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 rc_opt.c
  --- ossp-pkg/rc/rc_opt.c	7 Jul 2003 13:30:51 -0000	1.9
  +++ ossp-pkg/rc/rc_opt.c	8 Jul 2003 15:09:50 -0000	1.10
  @@ -33,6 +33,7 @@
   
   #include "rc.h"
   
  +/* FIXME mlelstv -- why Construct/Destruct vs. New/Delete ? */
   
   /***************************************
   * optConstruct(rc_opt_t **)            *
  @@ -58,6 +59,7 @@
   rc_return_t optGetname(rc_opt_t *pOption, char **pszName)
   {
       assert(pOption && pOption->szName);
  +    /* FIXME mlelstv -- why non-shared read ? */
       if (!(*pszName = strdup(pOption->szName)))  /* Get name from option     */
           return(RC_THROW(RC_ERR_MEM));
       else
  @@ -67,6 +69,7 @@
   rc_return_t optGetval(rc_opt_t *pOption, char **pszVal)
   {
       assert(pOption && pOption->szVal);
  +    /* FIXME mlelstv -- why non-shared read ? */
       if (!(*pszVal = strdup(pOption->szVal)))    /* Get value from option    */
           return(RC_THROW(RC_ERR_MEM));
       else
  @@ -103,19 +106,14 @@
   ***************************************/
   rc_return_t optDestruct(rc_opt_t **ppOption)
   {
  -    ex_t Except;
  +    assert(*ppOption);              /* Error if not constructed */
   
  -    assert(*ppOption);                  /* Error if not constructed */
  -    try {
  -        if ((*ppOption)->szName)        /* Might not be mallocd yet */
  -            free((*ppOption)->szName);
  -        if ((*ppOption)->szVal)         /* Might not be mallocd yet */
  -            free((*ppOption)->szVal);
  -        free(*ppOption);                /* Deallocate option and    */
  -        *ppOption = NULL;               /* clear its reference      */
  -    }
  -    catch(Except)
  -        rethrow;
  +    if ((*ppOption)->szName)        /* Might not be mallocd yet */
  +        free((*ppOption)->szName);
  +    if ((*ppOption)->szVal)         /* Might not be mallocd yet */
  +        free((*ppOption)->szVal);
  +    free(*ppOption);                /* Deallocate option and    */
  +    *ppOption = NULL;               /* clear its reference      */
   
       return(RC_THROW(RC_OK));
   }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_proc.c
  ============================================================================
  $ cvs diff -u -r1.60 -r1.61 rc_proc.c
  --- ossp-pkg/rc/rc_proc.c	7 Jul 2003 13:30:51 -0000	1.60
  +++ ossp-pkg/rc/rc_proc.c	8 Jul 2003 15:09:50 -0000	1.61
  @@ -91,7 +91,7 @@
                   scriptnAppend(pRc->m_pScriptfunc, sBuf, nRet);
               if (nRet == -1) /* Handle read errors */
                   RC_THROW(RC_ERR_IO);
  -            scriptnAppend(pRc->m_pScriptfunc, "\n", sizeof("\n"));
  +            scriptnAppend(pRc->m_pScriptfunc, "\n", strlen("\n"));
               close(nFdfunc); /* Close Func file handle */
           }
           else
  @@ -133,7 +133,8 @@
           catch(Except)
               rethrow;
   
  -        /* Attach our rcfile in the list */
  +        /* Replace rcfile in the list with combined sections */
  +        rcfileDelete(pRc->m_pList->m_ppFilevec[nRcs]);
           pRc->m_pList->m_ppFilevec[nRcs] = pRcfile;
           pRcfile = NULL;
       }
  @@ -156,6 +157,10 @@
   *******************************************/
   rc_return_t procRun(rc_proc_t *pRc)
   {
  +    /* FIXME mlelstv - mode switch should be an enum
  +     *                 set to one of the four modes
  +     *                 and be tested with a switch()
  +     */
       if (configGetval(RC_EVL_VAL))       /* Evaluate */
           return(procEval(pRc));
       else if (configGetval(RC_EXC_VAL))  /* Execute */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_sect.c
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 rc_sect.c
  --- ossp-pkg/rc/rc_sect.c	7 Jul 2003 13:30:51 -0000	1.19
  +++ ossp-pkg/rc/rc_sect.c	8 Jul 2003 15:09:50 -0000	1.20
  @@ -46,15 +46,13 @@
       /* Among other things, they make great coffee at Cable & Wireless */
       /* This code would probably have more bugs if the coffee was not as good */
       pSec = (rc_section_t *)calloc(1, sizeof(rc_section_t));
  -
  -    if (pSec) {
  -        pSec->m_szName = malloc((strlen(szName) + 1) * sizeof(char));
  -        strcpy(pSec->m_szName, szName);
  -        pSec->m_pData = scriptNew();
  -    }
  -    else
  +    if (pSec == NULL)
           RC_THROW(RC_ERR_MEM);
   
  +    pSec->m_szName = malloc((strlen(szName) + 1) * sizeof(char));
  +    strcpy(pSec->m_szName, szName);
  +    pSec->m_pData = scriptNew();
  +
       return(pSec);
   }
   
  @@ -73,21 +71,21 @@
   
       /* Deep copy of section name */
       if (pOrigsec->m_szName) {
  -        pSec->m_szName = malloc((strlen(pOrigsec->m_szName) + sizeof(char))\
  +        pSec->m_szName = malloc((strlen(pOrigsec->m_szName) + 1)\
               * sizeof(char));
           strcpy(pSec->m_szName, pOrigsec->m_szName);
       }
   
       /* Deep copy of parent name */
       if (pOrigsec->m_szParent) {
  -        pSec->m_szParent = malloc((strlen(pOrigsec->m_szParent) + sizeof(char))\
  +        pSec->m_szParent = malloc((strlen(pOrigsec->m_szParent) + 1)\
               * sizeof(char));
           strcpy(pSec->m_szParent, pOrigsec->m_szParent);
       }
   
       /* Deep copy of user name */
       if (pOrigsec->m_szLogin) {
  -        pSec->m_szLogin = malloc((strlen(pOrigsec->m_szLogin) + sizeof(char))\
  +        pSec->m_szLogin = malloc((strlen(pOrigsec->m_szLogin) + 1)\
               * sizeof(char));
           strcpy(pSec->m_szLogin, pOrigsec->m_szLogin);
       }
  @@ -171,8 +169,10 @@
   
   const char *sectionGetdata(rc_section_t *pSec)
   { /* Data of section, this is the script body of the particular section */
  +  /* ATTENTION: data section may be NULL */
       if (pSec) {
           const char *kszScriptdata = scriptGetdata(pSec->m_pData);
  +        /* FIXME mlelstv -- why is an empty section NULL ? */
           if (kszScriptdata && strlen(kszScriptdata) > 0)
               return(kszScriptdata);
           else
  @@ -248,7 +248,7 @@
   
       if (scriptGetdata(pSec->m_pData)) { /* The section data is already in use */
           scriptDelete(pSec->m_pData);
  -        pSec->m_pData = NULL;
  +        pSec->m_pData = scriptNew();
       }
   
       scriptSetdata(pSec->m_pData, kszIn);
  @@ -261,17 +261,14 @@
       char *szTemp  = NULL;
       size_t nBytes = (Len + 1) * sizeof(char);       /* Set size */
   
  -    assert(pSec && kszIn); /* Dummy detector */
  -
  -    if (pSec->m_pData) {    /* The section data is already in use */
  -        scriptDelete(pSec->m_pData);
  -    }
  -
  -    pSec->m_pData = scriptNew();
  +    /* copy data with terminating NUL character */
       szTemp = malloc(nBytes);
       strncpy(szTemp, kszIn, Len);
       *(szTemp + Len) = '\0';                 /* Terminate outgoing */
  -    scriptSetdata(pSec->m_pData, szTemp);   /* Finish the job */
  +
  +    /* FIXME mlelstv -- how to do exception handling ?? */
  +    sectionSetdata(pSec, szTemp);           /* Finish the job */
  +
       free(szTemp);                           /* Deallocate */
       szTemp = NULL;
       return(RC_THROW(RC_OK));
  @@ -301,23 +298,32 @@
   ************************************************/
   rc_return_t sectionWrite(rc_section_t *pSec, const char *szPath)
   {
  -    int nFdtmp = open(szPath, O_WRONLY | O_CREAT, 0600);
  +    int nFdtmp = -1;
       FILE *pStream = NULL;
   
  -    /* Initial sanity checks */
  -    if (!pSec || nFdtmp < 0)
  +    /* Parameter sanity checks */
  +    if (!pSec)
           return(RC_THROW(RC_ERR_USE));
  -    else
  -        pStream = fdopen(nFdtmp, "w");
   
  -    if (pStream) {
  -        fprintf(pStream, "#su %s\n", sectionGetlogin(pSec));
  -        fprintf(pStream, "%s", sectionGetdata(pSec));
  -        fclose(pStream);
  -        return(RC_THROW(RC_OK));
  -    }
  -    else
  +    /* open file with restricted mode 0600 to preserve privacy */
  +    nFdtmp = open(szPath, O_WRONLY | O_CREAT, 0600);
  +    if (nFdtmp < 0)
  +        return(RC_THROW(RC_ERR_USE));
  +
  +    pStream = fdopen(nFdtmp, "w");
  +    if (pStream == NULL) {
  +        close(nFdtmp);
  +        unlink(szPath);
           return(RC_THROW(RC_ERR_USE));
  +    }
  +
  +    fprintf(pStream, "#su %s\n", sectionGetlogin(pSec));
  +    fprintf(pStream, "%s", sectionGetdata(pSec));
  +    fclose(pStream);
  +
  +    /* this file is deleted by user, no cleanup necessary */
  +
  +    return(RC_THROW(RC_OK));
   }
   
   /************************************************
  @@ -343,7 +349,7 @@
           free(pSec);
       }
       else    /* Dumbass passed an empty section object */
  -        assert(FALSE);
  +        return(RC_THROW(RC_ERR_USE));
   
       return(RC_THROW(RC_OK));
   }
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jul  9 09:13:59 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1109F76D5B; Wed,  9 Jul 2003 09:13:58 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ devtool.func
Message-Id: <20030709071358.1109F76D5B@mail.ossp.org>
Date: Wed,  9 Jul 2003 09:13:58 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   09-Jul-2003 09:13:58
  Branch: HEAD                             Handle: 2003070908135800

  Modified files:
    ossp-pkg/rc             devtool.func

  Log:
    take updated messages from lmtp2nntp

  Summary:
    Revision    Changes     Path
    1.9         +3  -2      ossp-pkg/rc/devtool.func
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/devtool.func
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 devtool.func
  --- ossp-pkg/rc/devtool.func	7 Jul 2003 12:55:42 -0000	1.8
  +++ ossp-pkg/rc/devtool.func	9 Jul 2003 07:13:58 -0000	1.9
  @@ -14,10 +14,10 @@
           $e )
               ;;
           $a )
  -            echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
  +            echo "devtool:WARNING: $t version $v accepted, but expected $e." 1>&2
               ;;
           * )
  -            echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
  +            echo "devtool:ERROR: $t version $v NOT acceptable, requires $e." 1>&2
               exit 1
               ;;
       esac
  @@ -70,3 +70,4 @@
               ;;
       esac
   }
  +
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jul  9 12:21:22 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D499E76D83; Wed,  9 Jul 2003 12:21:21 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc.pod
Message-Id: <20030709102121.D499E76D83@mail.ossp.org>
Date: Wed,  9 Jul 2003 12:21:21 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   09-Jul-2003 12:21:21
  Branch: HEAD                             Handle: 2003070911212100

  Modified files:
    ossp-pkg/rc             rc.pod

  Log:
    put top topics in first paragraph

  Summary:
    Revision    Changes     Path
    1.45        +38 -33     ossp-pkg/rc/rc.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc.pod
  ============================================================================
  $ cvs diff -u -r1.44 -r1.45 rc.pod
  --- ossp-pkg/rc/rc.pod	7 Jul 2003 12:55:42 -0000	1.44
  +++ ossp-pkg/rc/rc.pod	9 Jul 2003 10:21:21 -0000	1.45
  @@ -33,14 +33,14 @@
   
   B<rc>
   [B<-?>|B<--usage>]
  -[B<-D>|B<--debug>] 
  +[B<-D>|B<--debug>]
   [B<-L>|B<--locate> I<dir>[C<:>I<dir>[...]]]
   [B<-V>|B<--version>]
   [B<-c>|B<--conf> I<file>[C<:>I<file>[...]]]
   [B<-e>|B<--eval>]
  -[B<-f>|B<--func> I<file>[C<:>I<file>[...]]] 
  +[B<-f>|B<--func> I<file>[C<:>I<file>[...]]]
   [B<-h>|B<--help>]
  -[B<-i>|B<--info>] 
  +[B<-i>|B<--info>]
   [B<-l>|B<--labels>]
   [B<-p>|B<--print>]
   [B<-q>|B<--query>] I<format>
  @@ -48,7 +48,7 @@
   [B<-r>|B<--raw>]
   [B<-t>|B<--tmp> I<dir>]
   [B<-v>|B<--verbose>]
  -[B<-x>|B<--exec>] 
  +[B<-x>|B<--exec>]
   
   [B<--RequireUmask umask>]
   [B<--RequireOwner uid|name>]
  @@ -68,29 +68,32 @@
   
   =head1 DESCRIPTION
   
  -OSSP rc is a run-command processor. Its primary function is to scan F<rcfile>
  -script files for one or more B<section>s and run the commands listed in each
  -B<section>.
  -
  -The run-command processor can alternatively C<print> the commands in human
  -readable format or reformat them for shell C<eval> input without executing
  -them. The F<rcfile> files contain variables and the command processor has
  -functionality to query their default, set and effective values.
  +OSSP rc is a run-command processor. Its primary function is to assemble
  +a temporary file from excerpts of F<rcfile>s which are built out of text
  +snippets grouped into B<section>s.  The user specifies the desired parts
  +to use and also controls the order of assembly.
  +
  +OSSP rc defaults to B<exec>ute the concatenated temporary file, but it
  +can also B<print> it in human readable format or create shell
  +instructions suitable for the calling shell to B<eval>uate the temporary
  +file. The F<rcfile>s contain variables and the command processor has
  +functionality to B<query> their default, set and effective values.
   
   The structure of the F<rcfile>s is simple but the syntax is highly
  -configurable. A F<rcfile> is divided into B<section>s, clearly identified by
  -applying a regular expression. The default regular expression leads to
  -identification of section text starting with a percent (%) and label (any
  -text). Various examples of this and other syntax possibilities is given in the
  -manpage B<rc(1)>.
  -
  -Often, only a single B<rcfile> name is processed. To process all B<rcfile>s,
  -substitute the keyword 'all' for the B<rcfile> name. The B<section>s of a
  -B<rcfil> processed match exactly the B<section>s given on the command line,
  -and even the ordering is kept.
  +configurable. Included B<section>s are labeled for identification by the
  +user, while rc uses regular expressions to identifiy their boundaries.
  +The default regular expression leads to identification of section text
  +starting with a percent (%) and any subsequent text until a whitespace
  +identifies the label.  Various examples are listed below.
  +
  +Often, only a single B<rcfile> is processed. To process all B<rcfile>s,
  +substitute the keyword 'all' for the B<rcfile> name. This convenience
  +inhibits 'all' being used as a file name.
   
   =head1 OPTIONS
   
  +=over 4
  +
   =item B<-?>|B<--usage>
   
   print short usage summary, then exit.
  @@ -128,7 +131,7 @@
   
   =item B<-h>|B<--help>
   
  -print this help, then exit.
  +print help, then exit.
   
   =item B<-i>|B<--info>
   
  @@ -151,7 +154,7 @@
   
   output text using no terminal control sequences. The rc facility usually
   tries to improve output text for human readability using terminal control
  -sequences for color, bold and italic rendering. The default is determines at
  +sequences for color, bold and italic rendering. The default is determined at
   runtime and is automagically disabled if stdout is detached from a terminal.
   
   =item B<-s>|B<--silent>
  @@ -222,6 +225,8 @@
   
   name of the error section, defaults to %error.
   
  +=back
  +
   =head1 OPTIONS ORDERING
   
   B<OSSP rc> reads its options from three sources and builds a global
  @@ -294,10 +299,10 @@
   the commands by executing them directly.
   
    /usr/local/bin/rc --info
  - /sbin/rc --query lmtp2nntp
  + /usr/local/bin/rc --query lmtp2nntp
    /usr/local/bin/rc httpd reload
  - /cw/etc/rc --conf /etc/rc.conf --debug smtpd stop
  - /opt/bin/rc ntpd --silent start sync stop start
  + /usr/local/bin/rc --conf /etc/rc.conf --debug smtpd stop
  + /usr/local/bin/rc ntpd --silent start sync stop start
   
   B<OSSP rc> offers more than just command execution. In the following examples
   because the 'eval' run mode option is specified, B<OSSP rc> will prepare the
  @@ -311,7 +316,7 @@
   To read the results of a B<OSSP rc> operation without executing or evaluting
   the run-commands, use the 'print' run mode.
   
  - /opt/binbin/rc --print --info mico
  + /usr/local/bin/rc --print --info mico
    /usr/local/bin/rc --print httpd reload
   
   Arguments in the form of name=value pairs may be passed to the B<sections>
  @@ -322,11 +327,11 @@
   more than one section, then repeat its definition after each section given on
   the command line.
   
  - ./rc all start sFac="LOG_USER"  # pass LOG_USER as argument to 'start'
  - ./rc lmtp2nntp start nSleep=2   # sleep for 2 seconds before returning
  - /cw/etc/rc/ ftpd start nMax=32  # a maximum of 32 users can connect
  - /bin/rc rsyncd restart nSleep=4 # pause 4 seconds between start and stop
  - /bin/rc -rdv all stop nSleep=2 start nSleep=4 sLevel="LOG_INFO" bQuiet=1
  + /usr/local/bin/rc all start sFac="LOG_USER"  # pass LOG_USER as argument to 'start'
  + /usr/local/bin/rc lmtp2nntp start nSleep=2   # sleep for 2 seconds before returning
  + /usr/local/bin/rc ftpd start nMax=32         # a maximum of 32 users can connect
  + /usr/local/bin/rc rsyncd restart nSleep=4    # pause 4 seconds between start and stop
  + /usr/local/bin/rc -rdv all stop nSleep=2 start nSleep=4 sLevel="LOG_INFO" bQuiet=1
   
   =head1 FILES
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jul  9 15:20:39 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8347276F90; Wed,  9 Jul 2003 15:20:39 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT/ modules
Message-Id: <20030709132039.8347276F90@mail.ossp.org>
Date: Wed,  9 Jul 2003 15:20:39 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: CVSROOT                          Date:   09-Jul-2003 15:20:39
  Branch: HEAD                             Handle: 2003070914203800

  Modified files:
    CVSROOT                 modules

  Log:
    Rename subcomponent directories to more generic names as done in
    lmtp2nntp.

  Summary:
    Revision    Changes     Path
    1.67        +3  -3      CVSROOT/modules
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: CVSROOT/modules
  ============================================================================
  $ cvs diff -u -r1.66 -r1.67 modules
  --- CVSROOT/modules	29 May 2003 09:58:37 -0000	1.66
  +++ CVSROOT/modules	9 Jul 2003 13:20:38 -0000	1.67
  @@ -107,7 +107,7 @@
   petidomo        ossp-pkg/petidomo
   
   #   OSSP rc
  -rc              ossp-pkg/rc &rc_popt &rc_ex
  -rc_popt         -d rc_popt ossp-pkg/popt
  -rc_ex           -d rc_ex   ossp-pkg/ex
  +rc              ossp-pkg/rc &lib_popt &lib_ex
  +lib_popt        -d lib_popt ossp-pkg/popt
  +lib_ex          -d lib_ex   ossp-pkg/ex
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jul 10 16:01:51 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0422276FA7; Thu, 10 Jul 2003 16:01:50 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-doc/ accounts.txt
Message-Id: <20030710140150.0422276FA7@mail.ossp.org>
Date: Thu, 10 Jul 2003 16:01:50 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   10-Jul-2003 16:01:50
  Branch: HEAD                             Handle: 2003071015014900

  Modified files:
    ossp-pkg/as/as-doc      accounts.txt

  Log:
    Add entry to accounts for occurences of technical code reviews

  Summary:
    Revision    Changes     Path
    1.34        +1  -0      ossp-pkg/as/as-doc/accounts.txt
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-doc/accounts.txt
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 accounts.txt
  --- ossp-pkg/as/as-doc/accounts.txt	23 May 2003 14:23:30 -0000	1.33
  +++ ossp-pkg/as/as-doc/accounts.txt	10 Jul 2003 14:01:49 -0000	1.34
  @@ -124,6 +124,7 @@
   #   General
   R /de/is/dev/meeting                      # [I] Meeting, General
   R /de/is/dev/meeting/weekly               # [I] Meeting, Weekly Team-Meeting
  +R /de/is/dev/meeting/codereview           # [I] Meeting, Soruce Code Review
   R /de/is/dev/meeting/brainstorming        # [I] Meeting, Brainstormings
   R /de/is/dev/meeting/performance          # [I] Meeting, Performance Reviews
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jul 10 16:24:17 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A1F8576FA5; Thu, 10 Jul 2003 16:24:16 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-doc/ accounts.txt
Message-Id: <20030710142416.A1F8576FA5@mail.ossp.org>
Date: Thu, 10 Jul 2003 16:24:16 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   10-Jul-2003 16:24:16
  Branch: HEAD                             Handle: 2003071015241600

  Modified files:
    ossp-pkg/as/as-doc      accounts.txt

  Log:
    Fix typo.

  Summary:
    Revision    Changes     Path
    1.35        +1  -1      ossp-pkg/as/as-doc/accounts.txt
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-doc/accounts.txt
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 accounts.txt
  --- ossp-pkg/as/as-doc/accounts.txt	10 Jul 2003 14:01:49 -0000	1.34
  +++ ossp-pkg/as/as-doc/accounts.txt	10 Jul 2003 14:24:16 -0000	1.35
  @@ -124,7 +124,7 @@
   #   General
   R /de/is/dev/meeting                      # [I] Meeting, General
   R /de/is/dev/meeting/weekly               # [I] Meeting, Weekly Team-Meeting
  -R /de/is/dev/meeting/codereview           # [I] Meeting, Soruce Code Review
  +R /de/is/dev/meeting/codereview           # [I] Meeting, Source Code Review
   R /de/is/dev/meeting/brainstorming        # [I] Meeting, Brainstormings
   R /de/is/dev/meeting/performance          # [I] Meeting, Performance Reviews
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jul 10 20:04:22 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 65A4B76FA8; Thu, 10 Jul 2003 20:04:22 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/tool/ index.wml ossp-web/pkg/tool/rc/ index.w...
Message-Id: <20030710180422.65A4B76FA8@mail.ossp.org>
Date: Thu, 10 Jul 2003 20:04:22 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   10-Jul-2003 20:04:22
  Branch: HEAD                             Handle: 2003071019042001

  Modified files:
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/rc    index.wml

  Log:
    update website for OSSP rc 0.7.1

  Summary:
    Revision    Changes     Path
    1.28        +1  -1      ossp-web/pkg/tool/index.wml
    1.3         +9  -4      ossp-web/pkg/tool/rc/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 index.wml
  --- ossp-web/pkg/tool/index.wml	13 Feb 2003 10:12:36 -0000	1.27
  +++ ossp-web/pkg/tool/index.wml	10 Jul 2003 18:04:20 -0000	1.28
  @@ -32,7 +32,7 @@
   	        done=20 stable="none" unstable="none">
     <pkg_item name="rc" longname="OSSP rc" type="tool"
               desc="Run-Command Processor"
  -            done=20 stable="none" unstable="none">
  +            done=95 stable="none" unstable="0.7.1">
     <pkg_item name="dsotool" longname="OSSP dsotool" type="tool"
               desc="Dynamic Shared Objects (DSO)"
   	        done=20 stable="none" unstable="none">
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/rc/index.wml
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 index.wml
  --- ossp-web/pkg/tool/rc/index.wml	13 Jul 2002 20:09:38 -0000	1.2
  +++ ossp-web/pkg/tool/rc/index.wml	10 Jul 2003 18:04:21 -0000	1.3
  @@ -13,6 +13,11 @@
   run-command facility in an operating system or a sub-system like <a
   href="http://www.openpkg.org/">OpenPKG</a>.
   
  +<h2>Documentation</h2>
  +
  +<pkg_manpage name="rc" sect=1 path="/pkg/tool/rc/rc.pod">,
  +<pkg_manpage name="rc-sample" sect=5 path="/pkg/tool/rc/rc-sample.pod">.
  +
   <h2>Authors</h2>
   
   <pkg_author name="Michael Schloh v. Bennewitz" mail="michael.schloh@cw.com">
  @@ -20,9 +25,9 @@
   <h2>Status</h2>
   
   <pkg_status
  -    stable="none"    stable_date="none"
  -    unstable="none"  unstable_date="none"
  -	done=20>
  +    stable="none" stable_date="none"
  +    unstable="0.7.1" unstable_date="07-Jul-2003"
  +	done=95>
   
   <h2>Source</h2>
   
  @@ -31,5 +36,5 @@
       url=$(FTP_ROOT_URL)/pkg/tool/rc/
       directory=$(FTP_ROOT_DIR)/pkg/tool/rc/
       files="rc-*.tar.gz" 
  -	stable="none" unstable="none">
  +	stable="none" unstable="0.7.1">
   	
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jul 10 20:19:48 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A455976FA5; Thu, 10 Jul 2003 20:19:47 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ README
Message-Id: <20030710181947.A455976FA5@mail.ossp.org>
Date: Thu, 10 Jul 2003 20:19:47 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Jul-2003 20:19:47
  Branch: HEAD                             Handle: 2003071019194600

  Modified files:
    ossp-pkg/rc             README

  Log:
    add a first cut for an official abstract

  Summary:
    Revision    Changes     Path
    1.12        +10 -1      ossp-pkg/rc/README
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/README
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 README
  --- ossp-pkg/rc/README	7 Jul 2003 15:32:20 -0000	1.11
  +++ ossp-pkg/rc/README	10 Jul 2003 18:19:46 -0000	1.12
  @@ -9,7 +9,16 @@
   
     ABSTRACT
   
  -  The OSSP Run-Command Processor is a Duck.
  +  OSSP rc is a generic run-command processor. Its primary function is to
  +  assemble a temporary script from excerpts of one or more run-commmand
  +  files which are built out of text snippets grouped into sections.
  +  The user specifies the desired parts to use and also controls the
  +  order of assembly. The program is not tied to a particular syntax for
  +  neither the run-command section tags nor the contained scripts. By
  +  default, the assembled script is executed by a specified interpreter
  +  (usually a shell), but it can also be written into a temporary file
  +  for evaluation inside a calling shell, or even just printed to stdout
  +  for further processing.
   
     COPYRIGHT AND LICENSE
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul 11 10:49:37 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 390EB76E14; Fri, 11 Jul 2003 10:49:37 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_const.h rc_file.c rc_script.c
Message-Id: <20030711084937.390EB76E14@mail.ossp.org>
Date: Fri, 11 Jul 2003 10:49:37 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   11-Jul-2003 10:49:36
  Branch: HEAD                             Handle: 2003071109493600

  Modified files:
    ossp-pkg/rc             rc_const.h rc_file.c rc_script.c

  Log:
    Fix embedded newline regex matching bug.

  Summary:
    Revision    Changes     Path
    1.35        +1  -1      ossp-pkg/rc/rc_const.h
    1.7         +1  -1      ossp-pkg/rc/rc_file.c
    1.36        +1  -1      ossp-pkg/rc/rc_script.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_const.h
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 rc_const.h
  --- ossp-pkg/rc/rc_const.h	7 Jul 2003 13:30:51 -0000	1.34
  +++ ossp-pkg/rc/rc_const.h	11 Jul 2003 08:49:36 -0000	1.35
  @@ -143,7 +143,7 @@
   #define RC_DEF_ON     "1"                       /* Digital switch */
   #define RC_DEF_OFF    "0"                       /* Digital switch */
   #define RC_DEF_TMP    "/tmp"                    /* Temporary directory name */
  -#define RC_DEF_DEF    "^%(\\w+)[ \t]*(.*?)\\n(.*?)^$" /* Section definition */
  +#define RC_DEF_DEF    "(?:^|\\n)%(\\w+)[ \t]*(.*?)\\n(.*?)(?:\\n%|$)" /* Section definition */
   #define RC_DEF_NCF    "config"                  /* Config section name */
   #define RC_DEF_CMN    "common"                  /* Common section name */
   #define RC_DEF_UIG    "-u"                      /* Section user string */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_file.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 rc_file.c
  --- ossp-pkg/rc/rc_file.c	8 Jul 2003 15:09:50 -0000	1.6
  +++ ossp-pkg/rc/rc_file.c	11 Jul 2003 08:49:36 -0000	1.7
  @@ -149,7 +149,7 @@
           int nSubstrings    = 0;
           int *pnVec         = NULL;
           const char *kszErr = NULL;
  -        const int kiRegopt = PCRE_DOTALL | PCRE_MULTILINE;
  +        const int kiRegopt = PCRE_DOTALL | PCRE_DOLLAR_ENDONLY;
           /*const int kiRegopt = PCRE_DOTALL | PCRE_MULTILINE | PCRE_UNGREEDY;*/
   
           pcre *pRegex       = NULL;  /* Perl Compatible Regular Expression */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_script.c
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 rc_script.c
  --- ossp-pkg/rc/rc_script.c	7 Jul 2003 13:30:51 -0000	1.35
  +++ ossp-pkg/rc/rc_script.c	11 Jul 2003 08:49:36 -0000	1.36
  @@ -178,7 +178,7 @@
       int nSubstrings    = 0;
       int *pnVec         = NULL;
       const char *kszErr = NULL;
  -    const int kiRegopt = PCRE_DOTALL | PCRE_MULTILINE;
  +    const int kiRegopt = PCRE_DOTALL | PCRE_DOLLAR_ENDONLY;
   /*    const int kiRegopt = PCRE_DOTALL | PCRE_MULTILINE | PCRE_UNGREEDY;*/
   
       pcre *pRegex       = NULL;  /* Perl Compatible Regular Expression */
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul 11 11:18:22 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9CD9376E14; Fri, 11 Jul 2003 11:18:21 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_config.c rc_const.h rc_error.c
Message-Id: <20030711091821.9CD9376E14@mail.ossp.org>
Date: Fri, 11 Jul 2003 11:18:21 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   11-Jul-2003 11:18:21
  Branch: HEAD                             Handle: 2003071110182000

  Modified files:
    ossp-pkg/rc             rc_config.c rc_const.h rc_error.c

  Log:
    Replace embedded text strings from code to constants header. Address two
    functional problems identified by Thomas and Ralf, namely missing error
    message identifiers and confusing period punctuation with info option.

  Summary:
    Revision    Changes     Path
    1.40        +2  -2      ossp-pkg/rc/rc_config.c
    1.36        +15 -0      ossp-pkg/rc/rc_const.h
    1.11        +25 -24     ossp-pkg/rc/rc_error.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_config.c
  ============================================================================
  $ cvs diff -u -r1.39 -r1.40 rc_config.c
  --- ossp-pkg/rc/rc_config.c	7 Jul 2003 13:30:51 -0000	1.39
  +++ ossp-pkg/rc/rc_config.c	11 Jul 2003 09:18:20 -0000	1.40
  @@ -86,9 +86,9 @@
           for (i = 0; i < RC_NUMOPTS; i++) {
               if (configGetval(i) == NULL); /* NOP */
               else if (!(strcmp(configGetval(i), "1")))
  -                fprintf(stderr, "# Option %s is on.\n", configGetname(i));
  +                fprintf(stderr, "# Option %s is on\n", configGetname(i));
               else
  -                fprintf(stderr, "# Option %s is %s.\n", configGetname(i),\
  +                fprintf(stderr, "# Option %s is %s\n", configGetname(i),\
                       configGetval(i));
           }
           fputc('\n', stderr);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_const.h
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 rc_const.h
  --- ossp-pkg/rc/rc_const.h	11 Jul 2003 08:49:36 -0000	1.35
  +++ ossp-pkg/rc/rc_const.h	11 Jul 2003 09:18:20 -0000	1.36
  @@ -81,6 +81,21 @@
   #define RC_DFL_DESC "Name of the default section in a rcfile."
   #define RC_ERR_DESC "Name of the error section in a rcfile."
   
  +/* Error messages with newline termination */
  +#define RC_ERRTXT_ALL  "Error condition in %s:%s():%d.\n"
  +#define RC_ERRTXT_USE  "OSSP rc:API usage is wrong.\n"
  +#define RC_ERRTXT_MEM  "OSSP rc:Memory allocation failure.\n"
  +#define RC_ERRTXT_SYS  "OSSP rc:Underlying system failure.\n"
  +#define RC_ERRTXT_IO   "OSSP rc:Input output failure.\n"
  +#define RC_ERRTXT_INT  "OSSP rc:Internal failure.\n"
  +#define RC_ERRTXT_FNC  "OSSP rc:Function file %s could not be opened.\n"
  +#define RC_ERRTXT_LOC  "OSSP rc:Location dir %s could not be opened.\n"
  +#define RC_ERRTXT_TMP  "OSSP rc:Temporary dir %s could not be opened.\n"
  +#define RC_ERRTXT_RCF  "OSSP rc:One or more rc files could not be opened.\n"
  +#define RC_ERRTXT_CFG  "OSSP rc:Configuration failure.\n"
  +#define RC_ERRTXT_ROOT "OSSP rc:You must be root to run these commands.\n"
  +#define RC_ERRTXT_GEN  "OSSP rc:Generic failure condition of class '%s',.\n"
  +
   /* Option friendly names, should not include newline termination */
   #define RC_USE_NAME "usage"
   #define RC_DBG_NAME "debug"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_error.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 rc_error.c
  --- ossp-pkg/rc/rc_error.c	8 Jul 2003 15:09:50 -0000	1.10
  +++ ossp-pkg/rc/rc_error.c	11 Jul 2003 09:18:20 -0000	1.11
  @@ -30,6 +30,7 @@
   #include <stdlib.h>    /* Just for calling 'exit(3)' once */
   #include "rc.h"        /* Public interfaces               */
   #include "rc_config.h" /* Interface to the configuration  */
  +#include "rc_const.h"  /* Error message string constants  */
   
   
   /************************************************
  @@ -44,78 +45,78 @@
           if ((rc_return_t)Localerr.ex_value == RC_ERR_TRM)
               exit(0);
           else if ((rc_return_t)Localerr.ex_value == RC_ERR_USE) {
  -            fprintf(stderr, "    API usage is wrong.\n");
  +            fprintf(stderr, RC_ERRTXT_USE);
               if (configGetval(RC_DBG_VAL))
  -                fprintf(stderr, "    Error condition in %s:%s():%d.\n", \
  +                fprintf(stderr, RC_ERRTXT_ALL, \
                       Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
           }
           else if ((rc_return_t)Localerr.ex_value == RC_ERR_MEM) {
  -            fprintf(stderr, "    Memory allocation failure.\n");
  +            fprintf(stderr, RC_ERRTXT_MEM);
               if (configGetval(RC_DBG_VAL))
  -                fprintf(stderr, "    Error condition in %s:%s():%d.\n", \
  +                fprintf(stderr, RC_ERRTXT_ALL, \
                       Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
           }
           else if ((rc_return_t)Localerr.ex_value == RC_ERR_SYS) {
  -            fprintf(stderr, "    Underlying system failure.\n");
  +            fprintf(stderr, RC_ERRTXT_SYS);
               if (configGetval(RC_DBG_VAL))
  -                fprintf(stderr, "    Error condition in %s:%s():%d.\n", \
  +                fprintf(stderr, RC_ERRTXT_ALL, \
                       Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
           }
           else if ((rc_return_t)Localerr.ex_value == RC_ERR_IO) {
  -            fprintf(stderr, "    Input output failure.\n");
  +            fprintf(stderr, RC_ERRTXT_IO);
               if (configGetval(RC_DBG_VAL))
  -                fprintf(stderr, "    Error condition in %s:%s():%d.\n", \
  +                fprintf(stderr, RC_ERRTXT_ALL, \
                       Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
           }
           else if ((rc_return_t)Localerr.ex_value == RC_ERR_INT) {
  -            fprintf(stderr, "    Internal failure.\n");
  +            fprintf(stderr, RC_ERRTXT_INT);
               if (configGetval(RC_DBG_VAL))
  -                fprintf(stderr, "    Error condition in %s:%s():%d.\n", \
  +                fprintf(stderr, RC_ERRTXT_ALL, \
                       Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
           }
           else if ((rc_return_t)Localerr.ex_value == RC_ERR_FNC) {
  -            fprintf(stderr, "    Function file %s could not be opened.\n", \
  +            fprintf(stderr, RC_ERRTXT_FNC, \
                   configGetval(RC_FNC_VAL));
               if (configGetval(RC_DBG_VAL))
  -                fprintf(stderr, "    Error condition in %s:%s():%d.\n", \
  +                fprintf(stderr, RC_ERRTXT_ALL, \
                       Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
           }
           else if ((rc_return_t)Localerr.ex_value == RC_ERR_LOC) {
  -            fprintf(stderr, "    Location dir %s could not be opened.\n", \
  +            fprintf(stderr, RC_ERRTXT_LOC, \
                   configGetval(RC_LOC_VAL));
               if (configGetval(RC_DBG_VAL))
  -                fprintf(stderr, "    Error condition in %s:%s():%d.\n", \
  +                fprintf(stderr, RC_ERRTXT_ALL, \
                       Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
           }
           else if ((rc_return_t)Localerr.ex_value == RC_ERR_TMP) {
  -            fprintf(stderr, "    Temporary dir %s could not be opened.\n", \
  +            fprintf(stderr, RC_ERRTXT_TMP, \
                   configGetval(RC_TMP_VAL));
               if (configGetval(RC_DBG_VAL))
  -                fprintf(stderr, "    Error condition in %s:%s():%d.\n", \
  +                fprintf(stderr, RC_ERRTXT_ALL, \
                       Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
           }
           else if ((rc_return_t)Localerr.ex_value == RC_ERR_RCF) {
  -            fprintf(stderr, "    One or more rc files could not be opened.\n");
  +            fprintf(stderr, RC_ERRTXT_RCF);
               if (configGetval(RC_DBG_VAL))
  -                fprintf(stderr, "    Error condition in %s:%s():%d.\n", \
  +                fprintf(stderr, RC_ERRTXT_ALL, \
                       Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
           }
           else if ((rc_return_t)Localerr.ex_value == RC_ERR_CFG) {
  -            fprintf(stderr, "    Configuration failure.\n");
  +            fprintf(stderr, RC_ERRTXT_CFG);
               if (configGetval(RC_DBG_VAL))
  -                fprintf(stderr, "    Error condition in %s:%s():%d.\n", \
  +                fprintf(stderr, RC_ERRTXT_ALL, \
                       Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
           }
           else if ((rc_return_t)Localerr.ex_value == RC_ERR_ROOT) {
  -            fprintf(stderr, "    You must be root to run these commands.\n");
  +            fprintf(stderr, RC_ERRTXT_ROOT);
               if (configGetval(RC_DBG_VAL))
  -                fprintf(stderr, "    Error condition in %s:%s():%d.\n", \
  +                fprintf(stderr, RC_ERRTXT_ALL, \
                       Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
           }
           else {
  -            fprintf(stderr, "    Generic failure condition of class '%s',.\n", (char *)Localerr.ex_class);
  +            fprintf(stderr, RC_ERRTXT_GEN, (char *)Localerr.ex_class);
               if (configGetval(RC_DBG_VAL))
  -                fprintf(stderr, "    Error condition in %s:%s():%d.\n", \
  +                fprintf(stderr, RC_ERRTXT_ALL, \
                       Localerr.ex_file, Localerr.ex_func, Localerr.ex_line);
           }
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul 11 11:38:30 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3E45D76F89; Fri, 11 Jul 2003 11:38:30 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_config.c rc_private.h
Message-Id: <20030711093830.3E45D76F89@mail.ossp.org>
Date: Fri, 11 Jul 2003 11:38:30 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   11-Jul-2003 11:38:29
  Branch: HEAD                             Handle: 2003071110382900

  Modified files:
    ossp-pkg/rc             rc_config.c rc_private.h

  Log:
    Remove hardcoded version, and replace with dynamic shtool generated
    data.

  Summary:
    Revision    Changes     Path
    1.41        +8  -3      ossp-pkg/rc/rc_config.c
    1.38        +1  -4      ossp-pkg/rc/rc_private.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_config.c
  ============================================================================
  $ cvs diff -u -r1.40 -r1.41 rc_config.c
  --- ossp-pkg/rc/rc_config.c	11 Jul 2003 09:18:20 -0000	1.40
  +++ ossp-pkg/rc/rc_config.c	11 Jul 2003 09:38:29 -0000	1.41
  @@ -29,11 +29,16 @@
   
   #include <stdlib.h>
   #include <string.h>
  -#include <dirent.h>         /* For opendir(3) */
  +#include <dirent.h>     /* For opendir(3) */
   
   #include "rc.h"
   #include "rc_config.h"
  -#include "rc_const.h"       /* String constants                     */
  +#include "rc_const.h"   /* String constants */
  +
  +/* Cludge the version id */
  +#define _RC_VERSION_C_AS_HEADER_
  +#include "rc_version.c"
  +#undef  _RC_VERSION_C_AS_HEADER_
   
   static int m_nLocks = 0;    /* Server locks, not thread-safe FIXME  */
   
  @@ -264,7 +269,7 @@
               bStop = TRUE;
           }
           else if (configGetval(RC_VER_VAL)) {
  -            fprintf(stdout, "OSSP rc %s\n", RC_VERSION);
  +            fprintf(stdout, "OSSP rc %s\n", rc_version.v_short);
               bStop = TRUE;
           }
       }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_private.h
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 rc_private.h
  --- ossp-pkg/rc/rc_private.h	7 Jul 2003 13:30:51 -0000	1.37
  +++ ossp-pkg/rc/rc_private.h	11 Jul 2003 09:38:29 -0000	1.38
  @@ -45,10 +45,7 @@
   #define TRACEL(num) fprintf(stderr, "%s:%d: %ld\n", __FILE__, __LINE__, (long int)num)
   #endif
   
  -
  -/* FIXME Tie to shtool generation */
  -#define RC_VERSION   "77.77"
  -
  +/* Pointer and string manipulation constants */
   #define RC_SEC_SUB          1
   #define RC_GOOD_MEASURE     8
   #define RC_EXEC_MAXARGS     8
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul 11 13:35:30 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0D3ED76F89; Fri, 11 Jul 2003 13:35:29 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ AUTHORS README THANKS rc_version.c
Message-Id: <20030711113529.0D3ED76F89@mail.ossp.org>
Date: Fri, 11 Jul 2003 13:35:29 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   11-Jul-2003 13:35:29
  Branch: HEAD                             Handle: 2003071112352800

  Added files:
    ossp-pkg/rc             THANKS
  Modified files:
    ossp-pkg/rc             AUTHORS README rc_version.c

  Log:
    Minor changes and corrections to docs and bump version for interim
    release.

  Summary:
    Revision    Changes     Path
    1.4         +4  -4      ossp-pkg/rc/AUTHORS
    1.13        +3  -3      ossp-pkg/rc/README
    1.1         +19 -0      ossp-pkg/rc/THANKS
    1.4         +9  -9      ossp-pkg/rc/rc_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/AUTHORS
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 AUTHORS
  --- ossp-pkg/rc/AUTHORS	7 Jul 2003 13:30:50 -0000	1.3
  +++ ossp-pkg/rc/AUTHORS	11 Jul 2003 11:35:28 -0000	1.4
  @@ -8,8 +8,8 @@
   
     AUTHORS
   
  -  This is a list of the authors who have written
  -  or edited major parts of the OSSP rc source code.
  +  Major parts of the OSSP rc source code is written or edited by:
  +
  +  Ralf S. Engelschall           <ralf.engelschall@cw.com>
  +  Michael Schloh von Bennewitz  <michael.schloh@cw.com>
   
  -  Ralf S. Engelschall             <ralf.engelschall@cw.com>
  -  Michael Schloh von Bennewitz    <michael.schloh@cw.com>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/README
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 README
  --- ossp-pkg/rc/README	10 Jul 2003 18:19:46 -0000	1.12
  +++ ossp-pkg/rc/README	11 Jul 2003 11:35:28 -0000	1.13
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_|  \___|
   
     OSSP rc - Run-Command Processor
  -  Version 0.7.1 (07-Jul-2003)
  +  Version 0.7.2 (11-Jul-2003)
   
     ABSTRACT
   
  @@ -51,8 +51,8 @@
   
     Documentation and releases can be found at
   
  -  o http://www.ossp.org/pkg/rc/
  -  o  ftp://ftp.ossp.org/Duc/
  +  o http://www.ossp.org/pkg/tool/rc/
  +  o  ftp://ftp.ossp.org/pkg/tool/rc/
   
                                          Michael Schloh von Bennewitz
                                          michael.schloh@cw.com
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/THANKS
  ============================================================================
  $ cvs diff -u -r0 -r1.1 THANKS
  --- /dev/null	2003-07-11 13:35:28.000000000 +0200
  +++ THANKS	2003-07-11 13:35:28.000000000 +0200
  @@ -0,0 +1,19 @@
  +   _        ___  ____ ____  ____             
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _ __ ___ 
  +  _|_||_| | | | \___ \___ \| |_) | | '__/ __|
  + |_||_|_| | |_| |___) |__) |  __/  | | | (__ 
  +  |_|_|_|  \___/|____/____/|_|     |_|  \___|
  +
  +  OSSP rc - Run-Command Processor
  +
  +  THANKS
  +
  +  Credit goes to Cable & Wireless Telecommunications GmbH for
  +  supporting Opensource software projects with contributions of
  +  hardware, network and manpower resources.
  +
  +  Thanks to those who have contributed in various ways to OSSP rc.
  +
  +  Michael van Elst              <mlelstv@serpens.de>
  +  Thomas Lotterer               <thomas@lotterer.net>
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_version.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 rc_version.c
  --- ossp-pkg/rc/rc_version.c	7 Jul 2003 15:32:20 -0000	1.3
  +++ ossp-pkg/rc/rc_version.c	11 Jul 2003 11:35:28 -0000	1.4
  @@ -8,7 +8,7 @@
   #ifndef _RC_VERSION_C_
   #define _RC_VERSION_C_
   
  -#define RC_VERSION 0x007201
  +#define RC_VERSION 0x007202
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _RC_VERSION_C_AS_HEADER_
   
   rc_version_t rc_version = {
  -    0x007201,
  -    "0.7.1",
  -    "0.7.1 (07-Jul-2003)",
  -    "This is OSSP rc, Version 0.7.1 (07-Jul-2003)",
  -    "OSSP rc 0.7.1 (07-Jul-2003)",
  -    "OSSP rc/0.7.1",
  -    "@(#)OSSP rc 0.7.1 (07-Jul-2003)",
  -    "$Id: rc_version.c,v 1.3 2003/07/07 15:32:20 ms Exp $"
  +    0x007202,
  +    "0.7.2",
  +    "0.7.2 (11-Jul-2003)",
  +    "This is OSSP rc, Version 0.7.2 (11-Jul-2003)",
  +    "OSSP rc 0.7.2 (11-Jul-2003)",
  +    "OSSP rc/0.7.2",
  +    "@(#)OSSP rc 0.7.2 (11-Jul-2003)",
  +    "$Id: rc_version.c,v 1.4 2003/07/11 11:35:28 ms Exp $"
   };
   
   #endif /* _RC_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul 11 14:01:36 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BD1D276F89; Fri, 11 Jul 2003 14:01:32 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_const.h
Message-Id: <20030711120132.BD1D276F89@mail.ossp.org>
Date: Fri, 11 Jul 2003 14:01:32 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   11-Jul-2003 14:01:31
  Branch: HEAD                             Handle: 2003071113013100

  Modified files:
    ossp-pkg/rc             rc_const.h

  Log:
    More error message improvements in consistency.

  Summary:
    Revision    Changes     Path
    1.37        +17 -18     ossp-pkg/rc/rc_const.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_const.h
  ============================================================================
  $ cvs diff -u -r1.36 -r1.37 rc_const.h
  --- ossp-pkg/rc/rc_const.h	11 Jul 2003 09:18:20 -0000	1.36
  +++ ossp-pkg/rc/rc_const.h	11 Jul 2003 12:01:31 -0000	1.37
  @@ -31,12 +31,11 @@
   #define __OSSPRC_CONST_H__
   
   /* Generic text, should include newline termination */
  -#define RC_NON_TEXT "No options exist.\n"
  -#define RC_LST_TEXT "Please enter just one rcfile name and at least one section label.\n"
  -#define RC_EEP_TEXT "The exec, eval, and print options may not be combined.\n"
  -#define RC_SLO_TEXT "The silent option may not be combined with output options.\n"
  -#define RC_SUM_TEXT "Option argument summary.\n"
  -#define RC_RUT_TEXT "Failed to set the user id. Please become the root user and try again.\n"
  +#define RC_LST_TEXT "OSSP rc:Failure, please enter just one rcfile name and at least one section label.\n"
  +#define RC_EEP_TEXT "OSSP rc:Failure, the exec, eval, and print options may not be combined.\n"
  +#define RC_SLO_TEXT "OSSP rc:Failure, the silent option may not be combined with output options.\n"
  +#define RC_RUT_TEXT "OSSP rc:Failure, failed to set the user id. Please become the root user and try again.\n"
  +#define RC_SUM_TEXT "OSSP rc:Info, option argument summary.\n"
   
   /* Generic text, should not include newline termination */
   #define RC_VST_TEXT "# Start of run command script operations."
  @@ -83,18 +82,18 @@
   
   /* Error messages with newline termination */
   #define RC_ERRTXT_ALL  "Error condition in %s:%s():%d.\n"
  -#define RC_ERRTXT_USE  "OSSP rc:API usage is wrong.\n"
  -#define RC_ERRTXT_MEM  "OSSP rc:Memory allocation failure.\n"
  -#define RC_ERRTXT_SYS  "OSSP rc:Underlying system failure.\n"
  -#define RC_ERRTXT_IO   "OSSP rc:Input output failure.\n"
  -#define RC_ERRTXT_INT  "OSSP rc:Internal failure.\n"
  -#define RC_ERRTXT_FNC  "OSSP rc:Function file %s could not be opened.\n"
  -#define RC_ERRTXT_LOC  "OSSP rc:Location dir %s could not be opened.\n"
  -#define RC_ERRTXT_TMP  "OSSP rc:Temporary dir %s could not be opened.\n"
  -#define RC_ERRTXT_RCF  "OSSP rc:One or more rc files could not be opened.\n"
  -#define RC_ERRTXT_CFG  "OSSP rc:Configuration failure.\n"
  -#define RC_ERRTXT_ROOT "OSSP rc:You must be root to run these commands.\n"
  -#define RC_ERRTXT_GEN  "OSSP rc:Generic failure condition of class '%s',.\n"
  +#define RC_ERRTXT_USE  "OSSP rc:Failure, API usage is wrong.\n"
  +#define RC_ERRTXT_MEM  "OSSP rc:Failure, memory allocation.\n"
  +#define RC_ERRTXT_SYS  "OSSP rc:Failure, underlying system.\n"
  +#define RC_ERRTXT_IO   "OSSP rc:Failure, input output.\n"
  +#define RC_ERRTXT_INT  "OSSP rc:Failure, internal problem.\n"
  +#define RC_ERRTXT_FNC  "OSSP rc:Failure, function file %s could not be opened.\n"
  +#define RC_ERRTXT_LOC  "OSSP rc:Failure, location dir %s could not be opened.\n"
  +#define RC_ERRTXT_TMP  "OSSP rc:Failure, temporary dir %s could not be opened.\n"
  +#define RC_ERRTXT_RCF  "OSSP rc:Failure, one or more rc files could not be opened.\n"
  +#define RC_ERRTXT_CFG  "OSSP rc:Failure, configuration problem.\n"
  +#define RC_ERRTXT_ROOT "OSSP rc:Failure, you must be root to run these commands.\n"
  +#define RC_ERRTXT_GEN  "OSSP rc:Failure, generic problem of class '%s',.\n"
   
   /* Option friendly names, should not include newline termination */
   #define RC_USE_NAME "usage"
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul 11 14:43:02 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AA28676DC7; Fri, 11 Jul 2003 14:43:01 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_util.c
Message-Id: <20030711124301.AA28676DC7@mail.ossp.org>
Date: Fri, 11 Jul 2003 14:43:01 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   11-Jul-2003 14:43:01
  Branch: HEAD                             Handle: 2003071113430000

  Modified files:
    ossp-pkg/rc             rc_util.c

  Log:
    Don't initialize self after freeing, to be consistent with standard practices
    (caller should do this instead).

  Summary:
    Revision    Changes     Path
    1.15        +0  -2      ossp-pkg/rc/rc_util.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_util.c
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 rc_util.c
  --- ossp-pkg/rc/rc_util.c	7 Jul 2003 13:30:51 -0000	1.14
  +++ ossp-pkg/rc/rc_util.c	11 Jul 2003 12:43:00 -0000	1.15
  @@ -105,8 +105,6 @@
       }
   
       free(pszVec);                   /* Free the vector itself  */
  -    pszVec = NULL;
  -
       return(RC_THROW(RC_OK));
   }
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul 11 15:47:14 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 43C0376DCA; Fri, 11 Jul 2003 15:47:14 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_const.h
Message-Id: <20030711134714.43C0376DCA@mail.ossp.org>
Date: Fri, 11 Jul 2003 15:47:14 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   11-Jul-2003 15:47:13
  Branch: HEAD                             Handle: 2003071114471300

  Modified files:
    ossp-pkg/rc             rc_const.h

  Log:
    Debug regex.

  Summary:
    Revision    Changes     Path
    1.38        +1  -1      ossp-pkg/rc/rc_const.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_const.h
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 rc_const.h
  --- ossp-pkg/rc/rc_const.h	11 Jul 2003 12:01:31 -0000	1.37
  +++ ossp-pkg/rc/rc_const.h	11 Jul 2003 13:47:13 -0000	1.38
  @@ -157,7 +157,7 @@
   #define RC_DEF_ON     "1"                       /* Digital switch */
   #define RC_DEF_OFF    "0"                       /* Digital switch */
   #define RC_DEF_TMP    "/tmp"                    /* Temporary directory name */
  -#define RC_DEF_DEF    "(?:^|\\n)%(\\w+)[ \t]*(.*?)\\n(.*?)(?:\\n%|$)" /* Section definition */
  +#define RC_DEF_DEF    "(?:^|\\n)%(\\w+)[ \\t]*(.*?)\\n(.*?)(?:\\n%|$)" /* Section definition */
   #define RC_DEF_NCF    "config"                  /* Config section name */
   #define RC_DEF_CMN    "common"                  /* Common section name */
   #define RC_DEF_UIG    "-u"                      /* Section user string */
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul 11 16:03:54 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 35BCF76DCA; Fri, 11 Jul 2003 16:03:54 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ rc_const.h rc_file.c rc_script.c
Message-Id: <20030711140354.35BCF76DCA@mail.ossp.org>
Date: Fri, 11 Jul 2003 16:03:54 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   11-Jul-2003 16:03:53
  Branch: HEAD                             Handle: 2003071115035300

  Modified files:
    ossp-pkg/rc             rc_const.h rc_file.c rc_script.c

  Log:
    Back out regex fix, because the changed PCRE PCRE_DOLLAR_ENDONLY flag broke rc
    file parsing.

  Summary:
    Revision    Changes     Path
    1.39        +1  -1      ossp-pkg/rc/rc_const.h
    1.8         +1  -1      ossp-pkg/rc/rc_file.c
    1.37        +1  -1      ossp-pkg/rc/rc_script.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_const.h
  ============================================================================
  $ cvs diff -u -r1.38 -r1.39 rc_const.h
  --- ossp-pkg/rc/rc_const.h	11 Jul 2003 13:47:13 -0000	1.38
  +++ ossp-pkg/rc/rc_const.h	11 Jul 2003 14:03:53 -0000	1.39
  @@ -157,7 +157,7 @@
   #define RC_DEF_ON     "1"                       /* Digital switch */
   #define RC_DEF_OFF    "0"                       /* Digital switch */
   #define RC_DEF_TMP    "/tmp"                    /* Temporary directory name */
  -#define RC_DEF_DEF    "(?:^|\\n)%(\\w+)[ \\t]*(.*?)\\n(.*?)(?:\\n%|$)" /* Section definition */
  +#define RC_DEF_DEF    "^%(\\w+)[ \t]*(.*?)\\n(.*?)^$" /* Section definition */
   #define RC_DEF_NCF    "config"                  /* Config section name */
   #define RC_DEF_CMN    "common"                  /* Common section name */
   #define RC_DEF_UIG    "-u"                      /* Section user string */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_file.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 rc_file.c
  --- ossp-pkg/rc/rc_file.c	11 Jul 2003 08:49:36 -0000	1.7
  +++ ossp-pkg/rc/rc_file.c	11 Jul 2003 14:03:53 -0000	1.8
  @@ -149,7 +149,7 @@
           int nSubstrings    = 0;
           int *pnVec         = NULL;
           const char *kszErr = NULL;
  -        const int kiRegopt = PCRE_DOTALL | PCRE_DOLLAR_ENDONLY;
  +        const int kiRegopt = PCRE_DOTALL | PCRE_MULTILINE;
           /*const int kiRegopt = PCRE_DOTALL | PCRE_MULTILINE | PCRE_UNGREEDY;*/
   
           pcre *pRegex       = NULL;  /* Perl Compatible Regular Expression */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_script.c
  ============================================================================
  $ cvs diff -u -r1.36 -r1.37 rc_script.c
  --- ossp-pkg/rc/rc_script.c	11 Jul 2003 08:49:36 -0000	1.36
  +++ ossp-pkg/rc/rc_script.c	11 Jul 2003 14:03:53 -0000	1.37
  @@ -178,7 +178,7 @@
       int nSubstrings    = 0;
       int *pnVec         = NULL;
       const char *kszErr = NULL;
  -    const int kiRegopt = PCRE_DOTALL | PCRE_DOLLAR_ENDONLY;
  +    const int kiRegopt = PCRE_DOTALL | PCRE_MULTILINE;
   /*    const int kiRegopt = PCRE_DOTALL | PCRE_MULTILINE | PCRE_UNGREEDY;*/
   
       pcre *pRegex       = NULL;  /* Perl Compatible Regular Expression */
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul 11 16:05:45 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C567476DCA; Fri, 11 Jul 2003 16:05:44 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ README rc_version.c
Message-Id: <20030711140544.C567476DCA@mail.ossp.org>
Date: Fri, 11 Jul 2003 16:05:44 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   11-Jul-2003 16:05:44
  Branch: HEAD                             Handle: 2003071115054400

  Modified files:
    ossp-pkg/rc             README rc_version.c

  Log:
    Bump version for release.

  Summary:
    Revision    Changes     Path
    1.14        +1  -1      ossp-pkg/rc/README
    1.5         +9  -9      ossp-pkg/rc/rc_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/README
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 README
  --- ossp-pkg/rc/README	11 Jul 2003 11:35:28 -0000	1.13
  +++ ossp-pkg/rc/README	11 Jul 2003 14:05:44 -0000	1.14
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_|  \___|
   
     OSSP rc - Run-Command Processor
  -  Version 0.7.2 (11-Jul-2003)
  +  Version 0.7.3 (11-Jul-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_version.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 rc_version.c
  --- ossp-pkg/rc/rc_version.c	11 Jul 2003 11:35:28 -0000	1.4
  +++ ossp-pkg/rc/rc_version.c	11 Jul 2003 14:05:44 -0000	1.5
  @@ -8,7 +8,7 @@
   #ifndef _RC_VERSION_C_
   #define _RC_VERSION_C_
   
  -#define RC_VERSION 0x007202
  +#define RC_VERSION 0x007203
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _RC_VERSION_C_AS_HEADER_
   
   rc_version_t rc_version = {
  -    0x007202,
  -    "0.7.2",
  -    "0.7.2 (11-Jul-2003)",
  -    "This is OSSP rc, Version 0.7.2 (11-Jul-2003)",
  -    "OSSP rc 0.7.2 (11-Jul-2003)",
  -    "OSSP rc/0.7.2",
  -    "@(#)OSSP rc 0.7.2 (11-Jul-2003)",
  -    "$Id: rc_version.c,v 1.4 2003/07/11 11:35:28 ms Exp $"
  +    0x007203,
  +    "0.7.3",
  +    "0.7.3 (11-Jul-2003)",
  +    "This is OSSP rc, Version 0.7.3 (11-Jul-2003)",
  +    "OSSP rc 0.7.3 (11-Jul-2003)",
  +    "OSSP rc/0.7.3",
  +    "@(#)OSSP rc 0.7.3 (11-Jul-2003)",
  +    "$Id: rc_version.c,v 1.5 2003/07/11 14:05:44 ms Exp $"
   };
   
   #endif /* _RC_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul 11 16:13:18 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A73F776DCA; Fri, 11 Jul 2003 16:13:17 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/rc/ 00TODO Makefile.in rc.c rc.h rc_cliopt.c rc_c...
Message-Id: <20030711141317.A73F776DCA@mail.ossp.org>
Date: Fri, 11 Jul 2003 16:13:17 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   11-Jul-2003 16:13:17
  Branch: HEAD                             Handle: 2003071115131600

  Modified files:
    ossp-pkg/rc             00TODO Makefile.in rc.c rc.h rc_cliopt.c
                            rc_config.c rc_private.h

  Log:
    Flush of configuration changes before upcoming configuration structure is
    completed.

  Summary:
    Revision    Changes     Path
    1.54        +1  -0      ossp-pkg/rc/00TODO
    1.37        +3  -3      ossp-pkg/rc/Makefile.in
    1.45        +6  -5      ossp-pkg/rc/rc.c
    1.60        +12 -12     ossp-pkg/rc/rc.h
    1.21        +98 -136    ossp-pkg/rc/rc_cliopt.c
    1.42        +17 -12     ossp-pkg/rc/rc_config.c
    1.39        +12 -0      ossp-pkg/rc/rc_private.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/00TODO
  ============================================================================
  $ cvs diff -u -r1.53 -r1.54 00TODO
  --- ossp-pkg/rc/00TODO	7 Jul 2003 15:27:59 -0000	1.53
  +++ ossp-pkg/rc/00TODO	11 Jul 2003 14:13:16 -0000	1.54
  @@ -15,6 +15,7 @@
       Give example semantics of a common scenario.
       No error semantics in pseudocode.
     Remove all character strings from code to rc_const.h
  +  rc_script.c:254 isspace nimmt nicht char sondern unsigned char her
   
   Known bugs
     Not multithreaded (too many potentials for race conditions or overwrite)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.36 -r1.37 Makefile.in
  --- ossp-pkg/rc/Makefile.in	8 Jul 2003 11:41:54 -0000	1.36
  +++ ossp-pkg/rc/Makefile.in	11 Jul 2003 14:13:16 -0000	1.37
  @@ -60,10 +60,10 @@
   TARGET_MANS     = rc.1 rc-sample.5
   
   SRCS            = rc.c rc_error.c rc_list.c rc_script.c rc_file.c rc_sect.c rc_config.c \
  -                  rc_cliopt.c rc_proc.c rc_version.c rc_pcre.c rc_util.c
  +                  rc_filopt.c rc_cliopt.c rc_proc.c rc_version.c rc_pcre.c rc_util.c
   
   OBJS            = rc.o rc_error.o rc_list.o rc_script.o rc_file.o rc_sect.o rc_config.o \
  -                  rc_cliopt.o rc_proc.o rc_version.o rc_pcre.o rc_util.o
  +                  rc_filopt.o rc_cliopt.o rc_proc.o rc_version.o rc_pcre.o rc_util.o
   
   SUBDIRS         = @SUBDIR_EX@ @SUBDIR_POPT@
   #SUBDIRS         = @SUBDIR_EX@ @SUBDIR_VAR@ @SUBDIR_VAL@ @SUBDIR_STR@ @SUBDIR_POPT@
  @@ -126,7 +126,7 @@
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man1
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man5
  -	$(SHTOOL) install -c -m 755 rc $(DESTDIR)$(bindir)/rc
  +	$(SHTOOL) install -s -c -m 755 rc $(DESTDIR)$(bindir)/rc
   	$(SHTOOL) install -c -m 644 rc.1 $(DESTDIR)$(mandir)/man1/rc.1
   	$(SHTOOL) install -c -m 644 rc-sample.5 $(DESTDIR)$(mandir)/man5/rc-sample.5
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc.c
  ============================================================================
  $ cvs diff -u -r1.44 -r1.45 rc.c
  --- ossp-pkg/rc/rc.c	7 Jul 2003 13:30:51 -0000	1.44
  +++ ossp-pkg/rc/rc.c	11 Jul 2003 14:13:16 -0000	1.45
  @@ -38,22 +38,23 @@
   int main(int argc, char *argv[])
   {
       ex_t Except;
  +    rc_config_t *pConf = NULL;
  +    rc_proc_t *pProc = NULL;
   
       try {                       /* Configuration block, config is built here  */
  -        configNew();            /* Construct a new config, add default values */
  -        configLoad(argc, (const char **)argv);   /* Load cli, env, and conf   */
  -        configDefaults();       /* Add default values to empty config members */
  +        pConf = configNew();    /* Construct a new config, add default values */
  +        configLoad(pConf, argc, (const char **)argv); /* Load cli, env, conf  */
  +        configDefaults(pConf);  /* Add default values to empty config members */
       }
       catch(Except)               /* Exceptions of the configuration block      */
           rcError(Except);
   
       try {                       /* Main processing block, script built */
  -        rc_proc_t *pProc = NULL;
           pProc = procNew();      /* Construct a new processor           */
           procPopulate(pProc);    /* Populate with run commands          */
           procRun(pProc);         /* [Execute|Evaluate|Print] script     */
           procDelete(pProc);      /* Destroy the processor               */
  -        configDelete();         /* Destroy the configuration           */
  +        configDelete(pConf);    /* Destroy the configuration           */
       }
       catch(Except)               /* Exceptions while script processing  */
           rcError(Except);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc.h
  ============================================================================
  $ cvs diff -u -r1.59 -r1.60 rc.h
  --- ossp-pkg/rc/rc.h	7 Jul 2003 13:30:51 -0000	1.59
  +++ ossp-pkg/rc/rc.h	11 Jul 2003 14:13:16 -0000	1.60
  @@ -86,20 +86,20 @@
   const char **configGetsecs(void);
   
   /* Command line function prototypes */
  -rc_return_t clioptNew(void);
  -rc_return_t clioptPrintusage(void);
  -rc_return_t clioptProcess(int, const char *);
  -rc_return_t clioptParseopts(int, const char **);
  -rc_return_t clioptParseargs(void);
  -rc_return_t clioptDelete(void);
  +rc_cliopt_t *clioptNew(void);
  +rc_return_t clioptPrintusage(rc_cliopt_t *);
  +rc_return_t clioptProcess(rc_cliopt_t *, int, const char *);
  +rc_return_t clioptParseopts(rc_cliopt_t *, int, const char **);
  +rc_return_t clioptParseargs(rc_cliopt_t *);
  +rc_return_t clioptDelete(rc_cliopt_t *);
   
   /* Command line accessor prototypes */
  -const char *clioptGetval(rc_opt_t);
  -const char *clioptGetrcfile(void);
  -const char **clioptGetsecs(void);
  -rc_return_t clioptSetval(rc_opt_t, const char *);
  -rc_return_t clioptSetrcfile(const char *);
  -rc_return_t clioptSetsecs(const char **);
  +const char *clioptGetval(rc_cliopt_t *, rc_opt_t);
  +const char *clioptGetrcfile(rc_cliopt_t *);
  +const char **clioptGetsecs(rc_cliopt_t *);
  +rc_return_t clioptSetval(rc_cliopt_t *, rc_opt_t, const char *);
  +rc_return_t clioptSetrcfile(rc_cliopt_t *, const char *);
  +rc_return_t clioptSetsecs(rc_cliopt_t *, const char **);
   
   /* List function prototypes */
   rc_list_t *listNew(void);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_cliopt.c
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 rc_cliopt.c
  --- ossp-pkg/rc/rc_cliopt.c	7 Jul 2003 13:30:51 -0000	1.20
  +++ ossp-pkg/rc/rc_cliopt.c	11 Jul 2003 14:13:16 -0000	1.21
  @@ -31,64 +31,29 @@
   #include <string.h>
   
   #include "rc.h"
  +#include "rc_cliopt.h"
   #include "rc_const.h"
   #include "rc_config.h"
   #include "popt.h"                              /* OSSP popt options library   */
   
  -static char        *m_pszOptuples[RC_NUMOPTS]; /* Option name value tuples    */
  -static char        *m_szRcfile  = NULL;        /* rc file name                */
  -static char        **m_pszSecs  = NULL;        /* Section names               */
  -static popt_context m_Optcon;                  /* Context for parsing options */
  -
  -static struct popt_option m_pOptable[] = {
  -    /* Long options are defined as short keys but no arguments */
  -    {RC_USE_NAME, '?', POPT_ARG_NONE, 0, RC_USE_VAL, RC_USE_DESC, NULL},
  -    {RC_DBG_NAME, 'D', POPT_ARG_NONE, 0, RC_DBG_VAL, RC_DBG_DESC, NULL},
  -    {RC_VER_NAME, 'V', POPT_ARG_NONE, 0, RC_VER_VAL, RC_VER_DESC, NULL},
  -    {RC_EVL_NAME, 'e', POPT_ARG_NONE, 0, RC_EVL_VAL, RC_EVL_DESC, NULL},
  -    {RC_HLP_NAME, 'h', POPT_ARG_NONE, 0, RC_HLP_VAL, RC_HLP_DESC, NULL},
  -    {RC_INF_NAME, 'i', POPT_ARG_NONE, 0, RC_INF_VAL, RC_INF_DESC, NULL},
  -    {RC_LBL_NAME, 'l', POPT_ARG_NONE, 0, RC_LBL_VAL, RC_LBL_DESC, NULL},
  -    {RC_PRN_NAME, 'p', POPT_ARG_NONE, 0, RC_PRN_VAL, RC_PRN_DESC, NULL},
  -    {RC_PAR_NAME, 'a', POPT_ARG_NONE, 0, RC_PAR_VAL, RC_PAR_DESC, NULL},
  -    {RC_SIL_NAME, 's', POPT_ARG_NONE, 0, RC_SIL_VAL, RC_SIL_DESC, NULL},
  -    {RC_RAW_NAME, 'r', POPT_ARG_NONE, 0, RC_RAW_VAL, RC_RAW_DESC, NULL},
  -    {RC_VRB_NAME, 'v', POPT_ARG_NONE, 0, RC_VRB_VAL, RC_VRB_DESC, NULL},
  -    {RC_EXC_NAME, 'x', POPT_ARG_NONE, 0, RC_EXC_VAL, RC_EXC_DESC, NULL},
  -                                          
  -    /* Single argument long options with short keys */
  -    {RC_LOC_NAME, 'L', POPT_ARG_STRING, 0, RC_LOC_VAL, RC_LOC_DESC, "regx"},
  -    {RC_CNF_NAME, 'c', POPT_ARG_STRING, 0, RC_CNF_VAL, RC_CNF_DESC, "path"},
  -    {RC_FNC_NAME, 'f', POPT_ARG_STRING, 0, RC_FNC_VAL, RC_FNC_DESC, "path"},
  -    {RC_QRY_NAME, 'q', POPT_ARG_STRING, 0, RC_QRY_VAL, RC_QRY_DESC, "varx"},
  -    {RC_TMP_NAME, 't', POPT_ARG_STRING, 0, RC_TMP_VAL, RC_TMP_DESC, "path"},
  -
  -    /* Single argument long options without short keys */
  -    {RC_OWN_NAME, 0, POPT_ARG_STRING, 0, RC_OWN_VAL, RC_OWN_DESC, "user"},
  -    {RC_GRP_NAME, 0, POPT_ARG_STRING, 0, RC_GRP_VAL, RC_GRP_DESC, "group"},
  -    {RC_MSK_NAME, 0, POPT_ARG_INT,    0, RC_MSK_VAL, RC_MSK_DESC, "umask"},
  -    {RC_ASS_NAME, 0, POPT_ARG_STRING, 0, RC_ASS_VAL, RC_ASS_DESC, "regx"},
  -    {RC_DEF_NAME, 0, POPT_ARG_STRING, 0, RC_DEF_VAL, RC_DEF_DESC, "regx"},
  -    {RC_REF_NAME, 0, POPT_ARG_STRING, 0, RC_REF_VAL, RC_REF_DESC, "regx"},
  -    {RC_PRM_NAME, 0, POPT_ARG_STRING, 0, RC_PRM_VAL, RC_PRM_DESC, "regx"},
  -    {RC_TRM_NAME, 0, POPT_ARG_STRING, 0, RC_TRM_VAL, RC_TRM_DESC, "regx"},
  -    {RC_NCF_NAME, 0, POPT_ARG_STRING, 0, RC_NCF_VAL, RC_NCF_DESC, "name"},
  -    {RC_CMN_NAME, 0, POPT_ARG_STRING, 0, RC_CMN_VAL, RC_CMN_DESC, "name"},
  -    {RC_DFL_NAME, 0, POPT_ARG_STRING, 0, RC_DFL_VAL, RC_DFL_DESC, "name"},
  -    {RC_ERR_NAME, 0, POPT_ARG_STRING, 0, RC_ERR_VAL, RC_ERR_DESC, "name"},
  -
  -    /* Special stuff    */
  -    POPT_AUTOHELP
  -    {NULL, 0, 0, NULL, 0}
  -};
  -
   
   /***************************************
   * clioptNew(void)                      *
   * Construct a command line option      *
   ***************************************/
  -rc_return_t clioptNew(void)
  +rc_cliopt_t *clioptNew(void)
   {
  +    rc_cliopt_t *pRetobj = calloc(1, sizeof (rc_cliopt_t));
  +    if (pRetobj) {
  +        pRetobj->m_pszOptuples = calloc(RC_NUMOPTS, sizeof (char *));
  +        if (!pRetobj->m_pszOptuples)
  +            RC_THROW(RC_ERR_MEM);
  +    }
  +    else
  +        RC_THROW(RC_ERR_MEM);
  +
  +    return(pRetobj);
  +
   /*    assert(s_pBintab == NULL); */           /* Error if constructed already */
   /*    s_pBintab = malloc(sizeof(*s_pBintab));*/ /* Allocate a cliopt instance   */
   /*    if (!s_pBintab)
  @@ -98,17 +63,13 @@
   /*FIXME    optNew((rc_opt_t **)&s_pBintab->pOptlist->pvData);FIXME*/
   /*    s_pBintab->pOptlist->pvData = NULL;
       s_pBintab->pOptlist->pvNext = NULL;*/
  -
  -    memset(m_pszOptuples, 0L, sizeof(m_pszOptuples));
  -
  -    return(RC_THROW(RC_OK));
   }
   
   /***************************************
  -* clioptPrintusage()                   *
  +* clioptPrintusage(rc_cliopt_t *)      *
   * Print usage to command line stderr   *
   ***************************************/
  -rc_return_t clioptPrintusage(void)
  +rc_return_t clioptPrintusage(rc_cliopt_t *this)
   {
       popt_printusage(m_Optcon, stderr, 0);
   
  @@ -116,35 +77,35 @@
   }
   
   /***************************************
  -* clioptGetXXX()                       *
  -* clioptSetXXX()                       *
  +* clioptGetXXX(rc_cliopt_t *)          *
  +* clioptSetXXX(rc_cliopt_t *)          *
   * Command line option accessors        *
   ***************************************/
  -const char *clioptGetval(rc_opt_t Optname)
  +const char *clioptGetval(rc_cliopt_t *this, rc_opt_t Optname)
   {
       if (!(Optname < RC_NUMOPTS))    /* Validate option range    */
           RC_THROW(RC_ERR_USE);
   
  -    return((const char *)m_pszOptuples[Optname]);
  +    return((const char *)this->m_pszOptuples[Optname]);
   }
   
  -const char *clioptGetrcfile(void)
  +const char *clioptGetrcfile(rc_cliopt_t *this)
   {
  -    if (!m_szRcfile)
  +    if (!this->m_szRcfile)
           RC_THROW(RC_ERR_USE);
   
  -    return((const char *)m_szRcfile);
  +    return((const char *)this->m_szRcfile);
   }
   
  -const char **clioptGetsecs(void)
  +const char **clioptGetsecs(rc_cliopt_t *this)
   {
  -    if (!m_pszSecs)
  +    if (!this->m_pszSecs)
           RC_THROW(RC_ERR_USE);
   
  -    return((const char **)m_pszSecs);
  +    return((const char **)this->m_pszSecs);
   }
   
  -rc_return_t clioptSetval(rc_opt_t Optname, const char *kszOptval)
  +rc_return_t clioptSetval(rc_cliopt_t *this, rc_opt_t Optname, const char *kszOptval)
   {
       if (!(Optname < RC_NUMOPTS))    /* Validate option range    */
           return(RC_THROW(RC_ERR_USE));
  @@ -156,28 +117,28 @@
       return(RC_THROW(RC_OK));
   }
   
  -rc_return_t clioptSetrcfile(const char *kszRc)
  +rc_return_t clioptSetrcfile(rc_cliopt_t *this, const char *kszRc)
   {
  -    if (m_szRcfile)                     /* Warn on overwrites */
  +    if (this->m_szRcfile)                     /* Warn on overwrites */
           RC_THROW(RC_WRN_OWR);
       if (kszRc)
  -        m_szRcfile = strdup(kszRc);
  +        this->m_szRcfile = strdup(kszRc);
       else
           return(RC_THROW(RC_ERR_USE));   /* Incoming string is NULL? */
   
       return(RC_THROW(RC_OK));
   }
   
  -rc_return_t clioptSetsecs(const char **pkszSecs)
  +rc_return_t clioptSetsecs(rc_cliopt_t *this, const char **pkszSecs)
   {
       ex_t Except;
   
       assert (pkszSecs);          /* IF NULL, its broken */
  -    if (m_pszSecs)              /* Warn on overwrites */
  +    if (this->m_pszSecs)        /* Warn on overwrites */
           RC_THROW(RC_WRN_OWR);
   
       try {
  -        m_pszSecs = vectorCopy(pkszSecs);
  +        this->m_pszSecs = vectorCopy(pkszSecs);
       }
       catch(Except)
           rethrow;
  @@ -185,91 +146,91 @@
       return(RC_THROW(RC_OK));
   }
   
  -/***************************************
  -* clioptProcess(int)                   *
  -* Switch through available options     *
  -* processing the corresponding option  *
  -* and update option table accordingly  *
  -***************************************/
  -rc_return_t clioptProcess(int cliOption, const char *kszArg)
  +/****************************************************
  +* clioptProcess(rc_cliopt_t *, int, const char *)   *
  +* Switch through available options                  *
  +* processing the corresponding option               *
  +* and update option table accordingly               *
  +****************************************************/
  +rc_return_t clioptProcess(rc_cliopt_t *this, int cliOption, const char *kszArg)
   {
       switch (cliOption) {
       /* Begin concrete (digital) options */
           case RC_USE_VAL:
  -            clioptSetval(cliOption, RC_DEF_ON); break;   /* Usage    */
  +            clioptSetval(this, cliOption, RC_DEF_ON); break;   /* Usage    */
           case RC_DBG_VAL:
  -            clioptSetval(cliOption, RC_DEF_ON); break;   /* Debug    */
  +            clioptSetval(this, cliOption, RC_DEF_ON); break;   /* Debug    */
           case RC_VER_VAL:
  -            clioptSetval(cliOption, RC_DEF_ON); break;   /* Version  */
  +            clioptSetval(this, cliOption, RC_DEF_ON); break;   /* Version  */
           case RC_EVL_VAL:                                   
  -            clioptSetval(cliOption, RC_DEF_ON); break;   /* Eval     */
  +            clioptSetval(this, cliOption, RC_DEF_ON); break;   /* Eval     */
           case RC_HLP_VAL:                                   
  -            clioptSetval(cliOption, RC_DEF_ON); break;   /* Help     */
  +            clioptSetval(this, cliOption, RC_DEF_ON); break;   /* Help     */
           case RC_INF_VAL:                                   
  -            clioptSetval(cliOption, RC_DEF_ON); break;   /* Info     */
  +            clioptSetval(this, cliOption, RC_DEF_ON); break;   /* Info     */
           case RC_LBL_VAL:                                   
  -            clioptSetval(cliOption, RC_DEF_ON); break;   /* Label    */
  +            clioptSetval(this, cliOption, RC_DEF_ON); break;   /* Label    */
           case RC_PRN_VAL:                                   
  -            clioptSetval(cliOption, RC_DEF_ON); break;   /* Print    */
  +            clioptSetval(this, cliOption, RC_DEF_ON); break;   /* Print    */
           case RC_PAR_VAL:                                   
  -            clioptSetval(cliOption, RC_DEF_ON); break;   /* Print    */
  +            clioptSetval(this, cliOption, RC_DEF_ON); break;   /* Print    */
           case RC_SIL_VAL:                                   
  -            clioptSetval(cliOption, RC_DEF_ON); break;   /* Silent   */
  +            clioptSetval(this, cliOption, RC_DEF_ON); break;   /* Silent   */
           case RC_RAW_VAL:                                   
  -            clioptSetval(cliOption, RC_DEF_ON); break;   /* Raw      */
  +            clioptSetval(this, cliOption, RC_DEF_ON); break;   /* Raw      */
           case RC_VRB_VAL:                                   
  -            clioptSetval(cliOption, RC_DEF_ON); break;   /* Verbose  */
  +            clioptSetval(this, cliOption, RC_DEF_ON); break;   /* Verbose  */
           case RC_EXC_VAL:                                   
  -            clioptSetval(cliOption, RC_DEF_ON); break;   /* Exec     */
  +            clioptSetval(this, cliOption, RC_DEF_ON); break;   /* Exec     */
   
       /* Begin abstract (nondigital) options */
           case RC_LOC_VAL:
  -            clioptSetval(cliOption, kszArg); break; /* Locations   */
  +            clioptSetval(this, cliOption, kszArg); break; /* Locations   */
           case RC_CNF_VAL:
  -            clioptSetval(cliOption, kszArg); break; /* Conf file   */
  +            clioptSetval(this, cliOption, kszArg); break; /* Conf file   */
           case RC_FNC_VAL:
  -            clioptSetval(cliOption, kszArg); break; /* Func file   */
  +            clioptSetval(this, cliOption, kszArg); break; /* Func file   */
           case RC_QRY_VAL:
  -            clioptSetval(cliOption, kszArg); break; /* Format      */
  +            clioptSetval(this, cliOption, kszArg); break; /* Format      */
           case RC_TMP_VAL:
  -            clioptSetval(cliOption, kszArg); break; /* Temp dir    */
  +            clioptSetval(this, cliOption, kszArg); break; /* Temp dir    */
           case RC_OWN_VAL:
  -            clioptSetval(cliOption, kszArg); break; /* User name   */
  +            clioptSetval(this, cliOption, kszArg); break; /* User name   */
           case RC_GRP_VAL:
  -            clioptSetval(cliOption, kszArg); break; /* Group name  */
  +            clioptSetval(this, cliOption, kszArg); break; /* Group name  */
           case RC_MSK_VAL:
  -            clioptSetval(cliOption, kszArg); break; /* Umask       */
  +            clioptSetval(this, cliOption, kszArg); break; /* Umask       */
   
           case RC_ASS_VAL:
  -            clioptSetval(cliOption, kszArg); break; /* Assignregex */
  +            clioptSetval(this, cliOption, kszArg); break; /* Assignregex */
           case RC_DEF_VAL:
  -            clioptSetval(cliOption, kszArg); break; /* Labelregex  */
  +            clioptSetval(this, cliOption, kszArg); break; /* Labelregex  */
           case RC_REF_VAL:
  -            clioptSetval(cliOption, kszArg); break; /* Refregex    */
  +            clioptSetval(this, cliOption, kszArg); break; /* Refregex    */
           case RC_PRM_VAL:
  -            clioptSetval(cliOption, kszArg); break; /* Paramregex  */
  +            clioptSetval(this, cliOption, kszArg); break; /* Paramregex  */
           case RC_TRM_VAL:
  -            clioptSetval(cliOption, kszArg); break; /* Termregex   */
  +            clioptSetval(this, cliOption, kszArg); break; /* Termregex   */
   
           case RC_NCF_VAL:
  -            clioptSetval(cliOption, kszArg); break; /* Configname  */
  +            clioptSetval(this, cliOption, kszArg); break; /* Configname  */
           case RC_CMN_VAL:
  -            clioptSetval(cliOption, kszArg); break; /* Commonname  */
  +            clioptSetval(this, cliOption, kszArg); break; /* Commonname  */
           case RC_DFL_VAL:
  -            clioptSetval(cliOption, kszArg); break; /* Defaultname */
  +            clioptSetval(this, cliOption, kszArg); break; /* Defaultname */
           case RC_ERR_VAL:
  -            clioptSetval(cliOption, kszArg); break; /* Errorname   */
  +            clioptSetval(this, cliOption, kszArg); break; /* Errorname   */
           default : break;
       }
   
       return(RC_THROW(RC_OK));
   }
   
  -/***************************************
  -* clioptParseopts(int, const char **)  *
  -* Parse command line options           *
  -***************************************/
  -rc_return_t clioptParseopts(int nArgs, const char *szVector[])
  +/********************************************************
  +* clioptParseopts(rc_cliopt_t *, int, const char **)    *
  +* Parse command line options                            *
  +********************************************************/
  +rc_return_t clioptParseopts(rc_cliopt_t *this, int nArgs, const char *szVector[])
   {
       ex_t Except;
       char cliOpt = 0;    /* For argument parsing */
  @@ -286,7 +247,7 @@
       /* Now do options processing */
       while ((cliOpt = popt_getnextopt(m_Optcon)) >= 0) {/* Loop, each time     */
           try {                                          /* eating a new option */
  -            clioptProcess(cliOpt, popt_getoptarg(m_Optcon));
  +            clioptProcess(this, cliOpt, popt_getoptarg(m_Optcon));
           }
           catch(Except) /* Error condition probably deserves attention */
               rethrow;
  @@ -303,17 +264,17 @@
   }
   
   /******************************************
  -* clioptParseargs(void)                   *
  +* clioptParseargs(rc_cliopt_t *)          *
   * Parse command line rc file and sections *
   ******************************************/
  -rc_return_t clioptParseargs(void)
  +rc_return_t clioptParseargs(rc_cliopt_t *this)
   {
       ex_t Except;
   
       /* Use popt as a transport to read the user specified rcfile and sections */
       try {
  -        clioptSetrcfile(popt_getarg(m_Optcon));
  -        clioptSetsecs(popt_getargs(m_Optcon));
  +        clioptSetrcfile(this, popt_getarg(m_Optcon));
  +        clioptSetsecs(this, popt_getargs(m_Optcon));
       }
       catch(Except)
           rethrow; /* Our generic response */
  @@ -322,10 +283,10 @@
   }
   
   /***************************************
  -* clioptDelete(void)                   *
  +* clioptDelete(rc_cliopt_t *)          *
   * Destruct a command line option       *
   ***************************************/
  -rc_return_t clioptDelete(void)
  +rc_return_t clioptDelete(rc_cliopt_t *this)
   {
       int i = 0;
   /*    ex_t Except;
  @@ -343,24 +304,25 @@
       */
   
       popt_freecontext(m_Optcon);         /* Free the popt context      */
  -    for (i = 0; i < RC_NUMOPTS; i++) {  /* Free the tuples themselves */
  -        if (m_pszOptuples[i]) {
  -            free(m_pszOptuples[i]);
  -            m_pszOptuples[i] = NULL;
  +    if (m_pszOptuples) {
  +        for (i = 0; i < RC_NUMOPTS; i++) {  /* Free the tuples themselves */
  +            if (m_pszOptuples[i]) {
  +                free(m_pszOptuples[i]);
  +                m_pszOptuples[i] = NULL;
  +            }
           }
  +        free(this->m_pszOptuples);
  +        this->m_pszOptuples = NULL;
  +    }
  +    if (this->m_szRcfile) {         /* Free the rc file arg      */
  +        free(this->m_szRcfile);
  +        this->m_szRcfile = NULL;
  +    }
  +    if (this->m_pszSecs) {          /* Free the section name arg */
  +        vectorDel(this->m_pszSecs);
  +        this->m_pszSecs = NULL;
       }
   
  -    if (m_szRcfile)                     /* Free the rc file arg       */
  -        free(m_szRcfile);
  -
  -    if (m_pszSecs)                      /* Free the section name arg  */
  -        vectorDel(m_pszSecs);
  -
  -/* FIXME BEGIN DEBUG */
  -for (i = 0; i < RC_NUMOPTS; i++)
  -    if (m_pszOptuples[i])
  -        TRACE("Problem! Destructor failed!\n");
  -/* FIXME END DEBUG */
  -
  +    free(this);
       return(RC_THROW(RC_OK));
   }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_config.c
  ============================================================================
  $ cvs diff -u -r1.41 -r1.42 rc_config.c
  --- ossp-pkg/rc/rc_config.c	11 Jul 2003 09:38:29 -0000	1.41
  +++ ossp-pkg/rc/rc_config.c	11 Jul 2003 14:13:16 -0000	1.42
  @@ -40,31 +40,36 @@
   #include "rc_version.c"
   #undef  _RC_VERSION_C_AS_HEADER_
   
  -static int m_nLocks = 0;    /* Server locks, not thread-safe FIXME  */
   
  +static int m_nLocks = 0;    /* Server locks, not thread-safe FIXME  */
   
   /***************************************
   * configNew(void)                      *
   * Construct a configuration            *
   ***************************************/
  -rc_return_t configNew(void)
  +rc_config_t configNew(void)
   {
       ex_t Except;
  +    rc_config_t *pRetobj = NULL;
   
  -    if (m_nLocks == 0) {                    /* If we don't have one yet */
  -        try {                               /* then construct a new one */
  -            clioptNew();                    /* Member cliopt instance   */
  +    if (m_nLocks == 0) {                            /* If we don't have one yet */
  +        pRetobj = malloc(sizeof (rc_config_t));     /* then construct a new one */
  +        if (pRetobj) {
  +            try {
  +                pRetobj->m_pCliopts = clioptNew();  /* Member cliopt instance   */
  +            }
  +            catch(Except)
  +                rethrow;
           }
  -        catch(Except)
  -            rethrow;
  +        else
  +            RC_THROW(RC_ERR_MEM);
       }
       m_nLocks++;                             /* FIXME not threadsafe     */
  +    return(pRetobj);
   
   /* Warn: Experimental design pattern code abstracts operations from config */
   /*    configVisit(pfnSetdefaults);
       configVisit(pfnGetoptinfo);*/
  -
  -    return(RC_THROW(RC_OK));
   }
   
   /* FIXME: Make into configVisit, using callbacks to get and set option info */
  @@ -375,16 +380,16 @@
   }
   
   /***************************************
  -* configDelete(void)                   *
  +* configDelete(rc_config_t *)          *
   * Destruct a configuration             *
   ***************************************/
  -rc_return_t configDelete(void)
  +rc_return_t configDelete(rc_config_t *this)
   {
       ex_t Except;
   
       if (--m_nLocks == 0) {          /* If m_nLocks is 0, deallocate */
           try {                       /* FIXME, not thread-safe       */
  -            clioptDelete();
  +            clioptDelete(this->m_pCliopts);
           }
           catch(Except)
               rethrow;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/rc/rc_private.h
  ============================================================================
  $ cvs diff -u -r1.38 -r1.39 rc_private.h
  --- ossp-pkg/rc/rc_private.h	11 Jul 2003 09:38:29 -0000	1.38
  +++ ossp-pkg/rc/rc_private.h	11 Jul 2003 14:13:16 -0000	1.39
  @@ -70,6 +70,18 @@
   
   typedef int rc_opt_t;   /* For use with RC_XXX_VAL definitions  */
   
  +/* Cliopt class */
  +typedef struct {
  +    char  **m_pszOptuples;
  +    char  *m_szRcfile;
  +    char **m_pszSecs;
  +} rc_cliopt_t;
  +
  +/* Configuration class */
  +typedef struct {
  +    rc_cliopt_t *pCliopts;
  +} rc_config_t;
  +
   /* Script type */
   typedef char * rc_script_t;
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jul 17 15:50:45 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4A8927700D; Thu, 17 Jul 2003 15:50:44 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/SHARE/ ossp_canvas.wml
Message-Id: <20030717135044.4A8927700D@mail.ossp.org>
Date: Thu, 17 Jul 2003 15:50:44 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   17-Jul-2003 15:50:43
  Branch: HEAD                             Handle: 2003071714504300

  Modified files:
    ossp-web/SHARE          ossp_canvas.wml

  Log:
    adjust (currently deactivated) footer

  Summary:
    Revision    Changes     Path
    1.8         +1  -1      ossp-web/SHARE/ossp_canvas.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/SHARE/ossp_canvas.wml
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 ossp_canvas.wml
  --- ossp-web/SHARE/ossp_canvas.wml	2 Oct 2002 12:48:45 -0000	1.7
  +++ ossp-web/SHARE/ossp_canvas.wml	17 Jul 2003 13:50:43 -0000	1.8
  @@ -145,7 +145,7 @@
   #     <td>
   #       <center>
   #         <font size=-1 color="#999999">
  -#           Copyright &copy; 2000-2002 Cable &amp; Wireless Deutschland, The OpenPKG Project, Ralf S. Engelschall
  +#           Copyright &copy; 2000-2003 Cable &amp; Wireless, The OpenPKG Project, Ralf S. Engelschall
   #         </font>
   #       </center>
   #     </td>
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jul 17 15:54:01 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C84597700D; Thu, 17 Jul 2003 15:54:00 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/com/ sponsors.wml
Message-Id: <20030717135400.C84597700D@mail.ossp.org>
Date: Thu, 17 Jul 2003 15:54:00 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   17-Jul-2003 15:54:00
  Branch: HEAD                             Handle: 2003071714540000

  Modified files:
    ossp-web/com            sponsors.wml

  Log:
    use new official name of C&W

  Summary:
    Revision    Changes     Path
    1.8         +1  -1      ossp-web/com/sponsors.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/com/sponsors.wml
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 sponsors.wml
  --- ossp-web/com/sponsors.wml	10 Mar 2003 10:21:51 -0000	1.7
  +++ ossp-web/com/sponsors.wml	17 Jul 2003 13:54:00 -0000	1.8
  @@ -24,7 +24,7 @@
   
   <ul>
     <li><a href="http://www.cw.com/"><img src="$(IMG)/cw.png" alt="Cable & Wireless" align=right border=0></a>
  -      <a href="http://www.cw.com/de/"><b>Cable &amp; Wireless Deutschland GmbH</b></a> (1999-2003)<br>
  +      <a href="http://www.cw.com/de/"><b>Cable &amp; Wireless Telecommunication Services GmbH</b></a> (1999-2003)<br>
         (Hosting Rack-Space, Network Connectivity, Hardware, Manpower)
   </ul>
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jul 29 20:20:11 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C9F927705E; Tue, 29 Jul 2003 20:20:10 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-gui/ configure.in
Message-Id: <20030729182010.C9F927705E@mail.ossp.org>
Date: Tue, 29 Jul 2003 20:20:10 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   29-Jul-2003 20:20:10
  Branch: HEAD                             Handle: 2003072919200900

  Modified files:
    ossp-pkg/as/as-gui      configure.in

  Log:
    Allow compiling with new qt library version 3.2 using threads.

  Summary:
    Revision    Changes     Path
    1.22        +1  -0      ossp-pkg/as/as-gui/configure.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/configure.in
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 configure.in
  --- ossp-pkg/as/as-gui/configure.in	16 May 2003 18:52:55 -0000	1.21
  +++ ossp-pkg/as/as-gui/configure.in	29 Jul 2003 18:20:09 -0000	1.22
  @@ -124,6 +124,7 @@
   AC_CHECK_LIB(GL, glBegin, [LIBS="$LIBS -lGL"])
   AC_CHECK_LIB(ICE, IceOpenConnection, [LIBS="$LIBS -lICE"])
   AC_CHECK_LIB(dl, dlopen, [LIBS="$LIBS -ldl"])
  +AC_CHECK_LIB(rt, sched_get_priority_min, [LIBS="$LIBS -lrt"])
   
   enable_shared=no
   export enable_shared
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jul 29 20:20:32 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 504A67707E; Tue, 29 Jul 2003 20:20:32 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-gui/ TODO
Message-Id: <20030729182032.504A67707E@mail.ossp.org>
Date: Tue, 29 Jul 2003 20:20:32 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   29-Jul-2003 20:20:32
  Branch: HEAD                             Handle: 2003072919203100

  Modified files:
    ossp-pkg/as/as-gui      TODO

  Log:
    Remember to refresh the accountlist better.

  Summary:
    Revision    Changes     Path
    1.101       +1  -0      ossp-pkg/as/as-gui/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/TODO
  ============================================================================
  $ cvs diff -u -r1.100 -r1.101 TODO
  --- ossp-pkg/as/as-gui/TODO	16 May 2003 18:52:55 -0000	1.100
  +++ ossp-pkg/as/as-gui/TODO	29 Jul 2003 18:20:31 -0000	1.101
  @@ -86,6 +86,7 @@
   Runtime help system should not depend on installtime documentation
   App should start even if no accounts file is found
   Fully vimize all input widgets by subclassing them (w - back word)
  +Reload accountlist on startup, but reload during 'Open Doc' as well
   
   Screwey user notes ;-)
   ----------------------
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jul 31 09:29:53 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 66A3E7706C; Thu, 31 Jul 2003 09:29:53 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tai/ ts.c ossp-pkg/val/ val.c ossp-pkg/var/ var.c
Message-Id: <20030731072953.66A3E7706C@mail.ossp.org>
Date: Thu, 31 Jul 2003 09:29:53 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   31-Jul-2003 09:29:53
  Branch: HEAD                             Handle: 2003073108295101

  Modified files:
    ossp-pkg/tai            ts.c
    ossp-pkg/val            val.c
    ossp-pkg/var            var.c

  Log:
    va_list is not comparable against NULL (import from
    http://cvs.openpkg.org/chngview?cn=11246)

  Summary:
    Revision    Changes     Path
    1.2         +2  -2      ossp-pkg/tai/ts.c
    1.16        +2  -2      ossp-pkg/val/val.c
    1.100       +2  -2      ossp-pkg/var/var.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/tai/ts.c
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 ts.c
  --- ossp-pkg/tai/ts.c	18 Apr 2002 09:10:47 -0000	1.1.1.1
  +++ ossp-pkg/tai/ts.c	31 Jul 2003 07:29:51 -0000	1.2
  @@ -126,7 +126,7 @@
       int n;
       int bytes;
   
  -    if (format == NULL || ap == NULL)
  +    if (format == NULL)
           return -1;
       bytes = 0;
       while (*format != '\0') {
  @@ -200,7 +200,7 @@
       int n;
       va_list ap2;
   
  -    if (format == NULL || ap == NULL)
  +    if (format == NULL)
           return NULL;
       ap2 = ap;
       if ((n = ts_suite_mvxprintf(NULL, 0, format, ap)) == -1)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/val.c
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 val.c
  --- ossp-pkg/val/val.c	17 Feb 2003 14:35:25 -0000	1.15
  +++ ossp-pkg/val/val.c	31 Jul 2003 07:29:51 -0000	1.16
  @@ -824,7 +824,7 @@
       val_t *child;
   
       /* argument consistency check */
  -    if (val == NULL || name == NULL || ap == NULL)
  +    if (val == NULL || name == NULL)
           return VAL_RC(VAL_ERR_ARG);
   
       /* recursive step-down on structured name */
  @@ -888,7 +888,7 @@
       val_t *child;
   
       /* argument consistency check */
  -    if (val == NULL || name == NULL || ap == NULL)
  +    if (val == NULL || name == NULL)
           return VAL_RC(VAL_ERR_ARG);
   
       /* recursive step-down on structured name */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var.c
  ============================================================================
  $ cvs diff -u -r1.99 -r1.100 var.c
  --- ossp-pkg/var/var.c	14 Feb 2003 21:17:07 -0000	1.99
  +++ ossp-pkg/var/var.c	31 Jul 2003 07:29:52 -0000	1.100
  @@ -126,7 +126,7 @@
       int n;
       int bytes;
   
  -    if (format == NULL || ap == NULL)
  +    if (format == NULL)
           return -1;
       bytes = 0;
       while (*format != '\0') {
  @@ -214,7 +214,7 @@
       int n;
       var_mvsnprintf_cb_t ctx;
   
  -    if (format == NULL || ap == NULL)
  +    if (format == NULL)
           return -1;
       if (buffer != NULL && bufsize == 0)
           return -1;
  @@ .

From ossp-cvs-owner@ossp.org  Wed Aug  6 20:06:38 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BBC8E770AA; Wed,  6 Aug 2003 20:06:37 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-gui/ ChangeLog README as_version.cpp
Message-Id: <20030806180637.BBC8E770AA@mail.ossp.org>
Date: Wed,  6 Aug 2003 20:06:37 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   06-Aug-2003 20:06:37
  Branch: HEAD                             Handle: 2003080619063601

  Modified files:
    ossp-pkg/as/as-gui      ChangeLog README as_version.cpp

  Log:
    Prepare for release.

  Summary:
    Revision    Changes     Path
    1.50        +2  -0      ossp-pkg/as/as-gui/ChangeLog
    1.44        +6  -7      ossp-pkg/as/as-gui/README
    1.42        +9  -9      ossp-pkg/as/as-gui/as_version.cpp
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.49 -r1.50 ChangeLog
  --- ossp-pkg/as/as-gui/ChangeLog	28 Apr 2003 16:48:24 -0000	1.49
  +++ ossp-pkg/as/as-gui/ChangeLog	6 Aug 2003 18:06:36 -0000	1.50
  @@ -1,5 +1,7 @@
   Geschichte des OSSP titraq in Vorwaerts Cronordnung
   
  +030802 Added a check for sched_get_priority_min in librt to configure.in
  +
   030428 Fixed a bug, causing a cancelled focus operation on rowadd
   
   030306 Wrote the as-events.5 manpage in POD format
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/README
  ============================================================================
  $ cvs diff -u -r1.43 -r1.44 README
  --- ossp-pkg/as/as-gui/README	28 Apr 2003 16:48:24 -0000	1.43
  +++ ossp-pkg/as/as-gui/README	6 Aug 2003 18:06:36 -0000	1.44
  @@ -1,12 +1,11 @@
  -                           _
  -  __ _  ___   __ _  _   _ (_)
  - / _` |/ __| / _` || | | || |
  -| (_| |\__ \| (_| || |_| || |
  - \__,_||___/ \__, | \__,_||_|
  -             |___/
  +   ___  ___ ___ _ __      __ _ ___  __ _ _   _(_)
  +  / _ \/ __/ __| '_ \    / _` / __|/ _` | | | | |
  + | (_) \__ \__ \ |_) |  | (_| \__ \ (_| | |_| | |
  +  \___/|___/___/ .__/    \__,_|___/\__, |\__,_|_|
  +               |_|                 |___/
   
     OSSP asgui -- Accounting system graphical user interface
  -  Version 0.7.3 (28-Apr-2003)
  +  Version 0.7.4 (06-Aug-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_version.cpp
  ============================================================================
  $ cvs diff -u -r1.41 -r1.42 as_version.cpp
  --- ossp-pkg/as/as-gui/as_version.cpp	28 Apr 2003 16:48:24 -0000	1.41
  +++ ossp-pkg/as/as-gui/as_version.cpp	6 Aug 2003 18:06:37 -0000	1.42
  @@ -8,7 +8,7 @@
   #ifndef _AS_VERSION_CPP_
   #define _AS_VERSION_CPP_
   
  -#define ASGUI_VERSION 0x007203
  +#define ASGUI_VERSION 0x007204
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _AS_VERSION_CPP_AS_HEADER_
   
   asgui_version_t asgui_version = {
  -    0x007203,
  -    "0.7.3",
  -    "0.7.3 (28-Apr-2003)",
  -    "This is OSSP as-gui, Version 0.7.3 (28-Apr-2003)",
  -    "OSSP as-gui 0.7.3 (28-Apr-2003)",
  -    "OSSP as-gui/0.7.3",
  -    "@(#)OSSP as-gui 0.7.3 (28-Apr-2003)",
  -    "$Id: as_version.cpp,v 1.41 2003/04/28 16:48:24 ms Exp $"
  +    0x007204,
  +    "0.7.4",
  +    "0.7.4 (06-Aug-2003)",
  +    "This is OSSP as-gui, Version 0.7.4 (06-Aug-2003)",
  +    "OSSP as-gui 0.7.4 (06-Aug-2003)",
  +    "OSSP as-gui/0.7.4",
  +    "@(#)OSSP as-gui 0.7.4 (06-Aug-2003)",
  +    "$Id: as_version.cpp,v 1.42 2003/08/06 18:06:37 ms Exp $"
   };
   
   #endif /* _AS_VERSION_CPP_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Wed Aug 13 16:20:35 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6C3D2770CA; Wed, 13 Aug 2003 16:20:35 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog THANKS sh.common sh.echo sh.ins...
Message-Id: <20030813142035.6C3D2770CA@mail.ossp.org>
Date: Wed, 13 Aug 2003 16:20:35 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Aug-2003 16:20:35
  Branch: HEAD                             Handle: 2003081315203400

  Modified files:
    ossp-pkg/shtool         ChangeLog THANKS sh.common sh.echo sh.install
                            sh.mkdir sh.mkln sh.move sh.path sh.rotate sh.slo
                            sh.subst sh.tarball shtoolize.in

  Log:
    Replace "[ x -o/-a x ]" constructs with "[ x ] ||/&& [ x ]"
    and "egrep"/"fgrep" constructs with compatible "grep" or "case"
    constructs. This way GNU shtool is now more POSIX 1003.1-2001
    compliant.
    
    Submitted by: Paul Eggert <eggert@twinsun.com>

  Summary:
    Revision    Changes     Path
    1.189       +6  -0      ossp-pkg/shtool/ChangeLog
    1.31        +1  -0      ossp-pkg/shtool/THANKS
    1.21        +2  -2      ossp-pkg/shtool/sh.common
    1.36        +19 -19     ossp-pkg/shtool/sh.echo
    1.29        +1  -1      ossp-pkg/shtool/sh.install
    1.22        +1  -1      ossp-pkg/shtool/sh.mkdir
    1.16        +8  -3      ossp-pkg/shtool/sh.mkln
    1.18        +1  -1      ossp-pkg/shtool/sh.move
    1.25        +5  -5      ossp-pkg/shtool/sh.path
    1.8         +4  -4      ossp-pkg/shtool/sh.rotate
    1.22        +9  -7      ossp-pkg/shtool/sh.slo
    1.9         +2  -2      ossp-pkg/shtool/sh.subst
    1.19        +1  -1      ossp-pkg/shtool/sh.tarball
    1.31        +4  -4      ossp-pkg/shtool/shtoolize.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.188 -r1.189 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	3 Jun 2003 08:28:19 -0000	1.188
  +++ ossp-pkg/shtool/ChangeLog	13 Aug 2003 14:20:34 -0000	1.189
  @@ -11,6 +11,12 @@
   
    Changes between 1.6.2 and 2.0b0 (02-Nov-2002 to xx-May-2003):
   
  +   *) Replace "[ x -o/-a x ]" constructs with "[ x ] ||/&& [ x ]"
  +      and "egrep"/"fgrep" constructs with compatible "grep" or "case"
  +      constructs. This way GNU shtool is now more POSIX 1003.1-2001
  +      compliant.
  +      [Paul Eggert <eggert@twinsun.com>]
  +
      *) Make sure "shtool install -e ..." does not fail with "permission
         denied" on the internally created temporary files if the source
         file is not writeable to the current user. This occurs because
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/THANKS
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 THANKS
  --- ossp-pkg/shtool/THANKS	9 May 2003 09:51:19 -0000	1.30
  +++ ossp-pkg/shtool/THANKS	13 Aug 2003 14:20:34 -0000	1.31
  @@ -15,6 +15,7 @@
     o Denis Barbier            <barbier@imacs.polytechnique.fr>
     o Marcus Boerger           <marcus.boerger@t-online.de>
     o Bill Campbell            <bill@celestial.com>
  +  o Paul Eggert              <eggert@twinsun.com>
     o Alan Eldridge            <alane@geeksrus.net>
     o Michael van Elst         <mlelstv@serpens.de>
     o Scott R. Every           <scott@emji.net>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.common
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 sh.common
  --- ossp-pkg/shtool/sh.common	11 Feb 2003 12:56:39 -0000	1.20
  +++ ossp-pkg/shtool/sh.common	13 Aug 2003 14:20:34 -0000	1.21
  @@ -101,8 +101,8 @@
   
       #   determine whether option needs an argument
       eval "opt_MODE=\$opt_MODE_${opt_OPT}"
  -    if [ ".$opt_ARG" = . -a ".$opt_ARG_OK" != .yes ]; then
  -        if [ ".$opt_MODE" = ".:" -o ".$opt_MODE" = ".+" ]; then
  +    if [ ".$opt_ARG" = . ] && [ ".$opt_ARG_OK" != .yes ]; then
  +        if [ ".$opt_MODE" = ".:" ] || [ ".$opt_MODE" = ".+" ]; then
               opt_PREV="$opt_OPT"
               continue
           fi
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.echo
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 sh.echo
  --- ossp-pkg/shtool/sh.echo	22 Feb 2003 12:27:20 -0000	1.35
  +++ ossp-pkg/shtool/sh.echo	13 Aug 2003 14:20:34 -0000	1.36
  @@ -51,7 +51,7 @@
   #   determine terminal bold sequence
   term_bold=''
   term_norm=''
  -if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[Bb]'`" != . ]; then
  +if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%[Bb]'`" != . ]; then
       case $TERM in
           #   for the most important terminal types we directly know the sequences
           xterm|xterm*|vt220|vt220*)
  @@ -87,13 +87,13 @@
                           break
                       fi
                   done
  -                if [ ".$term_bold" != . -a ".$term_norm" != . ]; then
  +                if [ ".$term_bold" != . ] && [ ".$term_norm" != . ]; then
                       break;
                   fi
               done
               ;;
       esac
  -    if [ ".$term_bold" = . -o ".$term_norm" = . ]; then
  +    if [ ".$term_bold" = . ] || [ ".$term_norm" = . ]; then
           echo "$msgprefix:Warning: unable to determine terminal sequence for bold mode" 1>&2
           term_bold=''
           term_norm=''
  @@ -102,7 +102,7 @@
   
   #   determine user name
   username=''
  -if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[uUgG]'`" != . ]; then
  +if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%[uUgG]'`" != . ]; then
       username="`(id -un) 2>/dev/null`"
       if [ ".$username" = . ]; then
           str="`(id) 2>/dev/null`"
  @@ -131,7 +131,7 @@
   
   #   determine user id
   userid=''
  -if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%U'`" != . ]; then
  +if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%U'`" != . ]; then
       userid="`(id -u) 2>/dev/null`"
       if [ ".$userid" = . ]; then
           userid="`(id -u ${username}) 2>/dev/null`"
  @@ -144,11 +144,11 @@
                   userid=`(getent passwd ${username}) 2>/dev/null | \
                           sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'`
                   if [ ".$userid" = . ]; then
  -                    userid=`egrep "^${username}:" /etc/passwd 2>/dev/null | \
  +                    userid=`grep "^${username}:" /etc/passwd 2>/dev/null | \
                               sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'`
                       if [ ".$userid" = . ]; then
                           userid=`(ypcat passwd) 2>/dev/null |
  -                                egrep "^${username}:" | \
  +                                grep "^${username}:" | \
                                   sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'`
                           if [ ".$userid" = . ]; then
                               userid='?'
  @@ -162,7 +162,7 @@
   
   #   determine (primary) group id
   groupid=''
  -if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[gG]'`" != . ]; then
  +if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%[gG]'`" != . ]; then
       groupid="`(id -g ${username}) 2>/dev/null`"
       if [ ".$groupid" = . ]; then
           str="`(id) 2>/dev/null`"
  @@ -173,10 +173,10 @@
               groupid=`(getent passwd ${username}) 2>/dev/null | \
                        sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
               if [ ".$groupid" = . ]; then
  -                groupid=`egrep "^${username}:" /etc/passwd 2>/dev/null | \
  +                groupid=`grep "^${username}:" /etc/passwd 2>/dev/null | \
                            sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
                   if [ ".$groupid" = . ]; then
  -                    groupid=`(ypcat passwd) 2>/dev/null | egrep "^${username}:" | \
  +                    groupid=`(ypcat passwd) 2>/dev/null | grep "^${username}:" | \
                                sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
                       if [ ".$groupid" = . ]; then
                           groupid='?'
  @@ -189,7 +189,7 @@
   
   #   determine (primary) group name
   groupname=''
  -if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%g'`" != . ]; then
  +if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%g'`" != . ]; then
       groupname="`(id -gn ${username}) 2>/dev/null`"
       if [ ".$groupname" = . ]; then
           str="`(id) 2>/dev/null`"
  @@ -198,14 +198,14 @@
           fi
           if [ ".$groupname" = . ]; then
               groupname=`(getent group) 2>/dev/null | \
  -                       egrep "^[^:]*:[^:]*:${groupid}:" | \
  +                       grep "^[^:]*:[^:]*:${groupid}:" | \
                          sed -e 's/:.*$//'`
               if [ ".$groupname" = . ]; then
  -                groupname=`egrep "^[^:]*:[^:]*:${groupid}:" /etc/group 2>/dev/null | \
  +                groupname=`grep "^[^:]*:[^:]*:${groupid}:" /etc/group 2>/dev/null | \
                              sed -e 's/:.*$//'`
                   if [ ".$groupname" = . ]; then
                       groupname=`(ypcat group) 2>/dev/null | \
  -                               egrep "^[^:]*:[^:]*:${groupid}:" | \
  +                               grep "^[^:]*:[^:]*:${groupid}:" | \
                                  sed -e 's/:.*$//'`
                       if [ ".$groupname" = . ]; then
                           groupname='?'
  @@ -219,7 +219,7 @@
   #   determine host and domain name
   hostname=''
   domainname=''
  -if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%h'`" != . ]; then
  +if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%h'`" != . ]; then
       hostname="`(uname -n) 2>/dev/null |\
                  awk '{ printf("%s", $1); }'`"
       if [ ".$hostname" = . ]; then
  @@ -236,16 +236,16 @@
               ;;
       esac
   fi
  -if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%d'`" != . ]; then
  +if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%d'`" != . ]; then
       if [ ".$domainname" = . ]; then
           if [ -f /etc/resolv.conf ]; then
  -            domainname="`egrep '^[ 	]*domain' /etc/resolv.conf | sed -e 'q' |\
  +            domainname="`grep '^[ 	]*domain' /etc/resolv.conf | sed -e 'q' |\
                            sed -e 's/.*domain//' \
                                -e 's/^[ 	]*//' -e 's/^ *//' -e 's/^	*//' \
                                -e 's/^\.//' -e 's/^/./' |\
                            awk '{ printf("%s", $1); }'`"
               if [ ".$domainname" = . ]; then
  -                domainname="`egrep '^[ 	]*search' /etc/resolv.conf | sed -e 'q' |\
  +                domainname="`grep '^[ 	]*search' /etc/resolv.conf | sed -e 'q' |\
                                sed -e 's/.*search//' \
                                    -e 's/^[ 	]*//' -e 's/^ *//' -e 's/^	*//' \
                                    -e 's/ .*//' -e 's/	.*//' \
  @@ -261,7 +261,7 @@
   time_month=''
   time_year=''
   time_monthname=''
  -if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[DMYm]'`" != . ]; then
  +if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%[DMYm]'`" != . ]; then
       time_day=`date '+%d'`
       time_month=`date '+%m'`
       time_year=`date '+%Y' 2>/dev/null`
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.install
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 sh.install
  --- ossp-pkg/shtool/sh.install	3 Jun 2003 08:28:19 -0000	1.28
  +++ ossp-pkg/shtool/sh.install	13 Aug 2003 14:20:34 -0000	1.29
  @@ -76,7 +76,7 @@
   fi
   
   #   consistency check for destination
  -if [ $argc -gt 2 -a $dstisdir = 0 ]; then
  +if [ $argc -gt 2 ] && [ $dstisdir = 0 ]; then
       echo "$msgprefix:Error: multiple sources require destination to be directory" 1>&2
       shtool_exit 1
   fi
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.mkdir
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 sh.mkdir
  --- ossp-pkg/shtool/sh.mkdir	11 Feb 2003 13:00:50 -0000	1.21
  +++ ossp-pkg/shtool/sh.mkdir	13 Aug 2003 14:20:34 -0000	1.22
  @@ -38,7 +38,7 @@
   for p in ${1+"$@"}; do
       #   if the directory already exists...
       if [ -d "$p" ]; then
  -        if [ ".$opt_f" = .no -a ".$opt_p" = .no ]; then
  +        if [ ".$opt_f" = .no ] && [ ".$opt_p" = .no ]; then
               echo "$msgprefix:Error: directory already exists: $p" 1>&2
               errstatus=1
               break
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.mkln
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 sh.mkln
  --- ossp-pkg/shtool/sh.mkln	9 May 2003 09:50:13 -0000	1.15
  +++ ossp-pkg/shtool/sh.mkln	13 Aug 2003 14:20:34 -0000	1.16
  @@ -109,12 +109,12 @@
   
       #   split away a common prefix
       prefix=""
  -    if [ ".$srcdir" = ".$dstdir" -a ".$srcdir" != . ]; then
  +    if [ ".$srcdir" = ".$dstdir" ] && [ ".$srcdir" != . ]; then
           prefix="$srcdir/"
           srcdir=""
           dstdir=""
       else
  -        while [ ".$srcdir" != . -a ".$dstdir" != . ]; do
  +        while [ ".$srcdir" != . ] && [ ".$dstdir" != . ]; do
               presrc=`echo $srcdir | sed -e 's;^\([^/]*\)/.*;\1;'`
               predst=`echo $dstdir | sed -e 's;^\([^/]*\)/.*;\1;'`
               if [ ".$presrc" != ".$predst" ]; then
  @@ -132,7 +132,12 @@
       #   determine source prefix which is the reverse directory
       #   step-up corresponding to the destination directory
       srcpre=""
  -    if [ $oneisabs = 0 ] || [ ".$prefix" != . -a ".$prefix" != ./ ]; then
  +
  +    isroot=0
  +    if [ ".$prefix" = . ] || [ ".$prefix" = ./ ]; then
  +        isroot=1
  +    fi
  +    if [ $oneisabs = 0 ] || [ $isroot = 0 ]; then
           pl="$dstdir/"
           OIFS="$IFS"; IFS='/'
           for pe in $pl; do
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.move
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 sh.move
  --- ossp-pkg/shtool/sh.move	11 Feb 2003 13:00:50 -0000	1.17
  +++ ossp-pkg/shtool/sh.move	13 Aug 2003 14:20:34 -0000	1.18
  @@ -35,7 +35,7 @@
   dst="$2"
   
   #   consistency checks
  -if [ ".$src" = . -o ".$dst" = . ]; then
  +if [ ".$src" = . ] || [ ".$dst" = . ]; then
       echo "$msgprefix:Error: Invalid arguments" 1>&2
       shtool_exit 1
   fi
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.path
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 sh.path
  --- ossp-pkg/shtool/sh.path	11 Feb 2003 13:00:50 -0000	1.24
  +++ ossp-pkg/shtool/sh.path	13 Aug 2003 14:20:34 -0000	1.25
  @@ -80,7 +80,7 @@
   
   #   MAGIC SITUATION
   #   Perl Interpreter (perl)
  -if [ ".$opt_m" = .yes  -a ".$namelist" = .perl ]; then
  +if [ ".$opt_m" = .yes ] && [ ".$namelist" = .perl ]; then
       rm -f $tmpfile >/dev/null 2>&1
       touch $tmpfile
       found=0
  @@ -89,7 +89,7 @@
           dir=`echo $dir | sed -e 's;/*$;;'`
           nc=99
           for name in perl perl5 miniperl; do
  -             if [ $minusx "$dir/$name" -a ! -d "$dir/$name" ]; then
  +             if [ $minusx "$dir/$name" ] && [ ! -d "$dir/$name" ]; then
                    perl="$dir/$name"
                    pv=`$perl -e 'printf("%.3f", $]);'`
                    echo "$pv:$pc:$nc:$perl" >>$tmpfile
  @@ -111,7 +111,7 @@
   
   #   MAGIC SITUATION
   #   C pre-processor (cpp)
  -if [ ".$opt_m" = .yes -a ".$namelist" = .cpp ]; then
  +if [ ".$opt_m" = .yes ] && [ ".$namelist" = .cpp ]; then
       echo >$tmpfile.c "#include <assert.h>"
       echo >>$tmpfile.c "Syntax Error"
       #   1. try the standard cc -E approach
  @@ -127,7 +127,7 @@
               #   3. try a standalone cpp command in path and lib dirs
               for path in $paths /lib /usr/lib /usr/local/lib; do
                   path=`echo $path | sed -e 's;/*$;;'`
  -                if [ $minusx "$path/cpp" -a ! -d "$path/cpp" ]; then
  +                if [ $minusx "$path/cpp" ] && [ ! -d "$path/cpp" ]; then
                       cpp="$path/cpp"
                       break
                   fi
  @@ -157,7 +157,7 @@
       #   iterate over paths
       for path in $paths; do
           path=`echo $path | sed -e 's;/*$;;'`
  -        if [ $minusx "$path/$name" -a ! -d "$path/$name" ]; then
  +        if [ $minusx "$path/$name" ] && [ ! -d "$path/$name" ]; then
               if [ ".$opt_s" != .yes ]; then
                   echo "$path/$name"
               fi
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.rotate
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 sh.rotate
  --- ossp-pkg/shtool/sh.rotate	29 Apr 2003 08:01:01 -0000	1.7
  +++ ossp-pkg/shtool/sh.rotate	13 Aug 2003 14:20:34 -0000	1.8
  @@ -71,7 +71,7 @@
   fi
   
   #   option -d/-z consistency
  -if [ ".$opt_d" = .yes -a ".$opt_z" = . ]; then
  +if [ ".$opt_d" = .yes ] && [ ".$opt_z" = . ]; then
       echo "$msgprefix:Error: option -d requires option -z." 1>&2
       shtool_exit 1
   fi
  @@ -125,7 +125,7 @@
                       -e 's/:/ /g'`"
           for prg in bzip2 gzip compress; do
               for path in $paths; do
  -                if [ $minusx "$path/$prg" -a ! -d "$path/$prg" ]; then
  +                if [ $minusx "$path/$prg" ] && [ ! -d "$path/$prg" ]; then
                       comp_prg="$prg"
                       break
                   fi
  @@ -234,7 +234,7 @@
           m=$n
           n=`expr $n - 1`
           n=`echo dummy | awk "{ printf(\"%0${opt_p}d\", n); }" n=$n`
  -        if [ $n -eq 0 -a ".$opt_d" = .yes ]; then
  +        if [ $n -eq 0 ] && [ ".$opt_d" = .yes ]; then
               #   special case: first rotation file under delayed compression situation
               if [ ! -f "${adir}/${file}.${n}" ]; then
                   continue
  @@ -345,7 +345,7 @@
       fi
   
       #   regular compression step
  -    if [ ".$opt_z" != . -a ".$opt_d" = .no ]; then
  +    if [ ".$opt_z" != . ] && [ ".$opt_d" = .no ]; then
           #   compress file
           if [ ".$opt_b" = .yes ]; then
               if [ ".$opt_t" = .yes ]; then
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.slo
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 sh.slo
  --- ossp-pkg/shtool/sh.slo	29 Apr 2003 08:01:01 -0000	1.21
  +++ ossp-pkg/shtool/sh.slo	13 Aug 2003 14:20:34 -0000	1.22
  @@ -43,7 +43,7 @@
           optprev=''
       fi
       #   remember options for arg if used stand-alone
  -    if [ ".$opt" = ".-L" -o ".$opt" = ".-l" ]; then
  +    if [ ".$opt" = ".-L" ] || [ ".$opt" = ".-l" ]; then
           optprev="$opt"
           continue;
       fi
  @@ -122,9 +122,10 @@
       if [ ".$found" = .yes ]; then
           if [ ".$found_indefdir" != .yes ]; then
               eval "dirlist=\"\${DIRS_${found_type}}:\""
  -            if [ ".`echo \"$dirlist\" | fgrep :$found_dir:`" = . ]; then
  -                eval "DIRS_${found_type}=\"\$DIRS_${found_type}:${found_dir}\""
  -            fi
  +            case "$dirlist" in
  +                *:$found_dir:* ) ;;
  +                * ) eval "DIRS_${found_type}=\"\$DIRS_${found_type}:${found_dir}\"" ;;
  +            esac
               eval "LIBS_${found_type}=\"\$LIBS_${found_type}:$lib\""
           else
               eval "LIBS_${found_type}=\"\$LIBS_${found_type}:$lib\""
  @@ -142,9 +143,10 @@
   OIFS="$IFS"; IFS=':'
   for dir in $DIRS; do
       dirlist="${DIRS_OBJ}:${DIRS_PIC}:${DIRS_DSO}:"
  -    if [ ".`echo \"$dirlist\" | fgrep :$dir:`" = . ]; then
  -        DIRS_OBJ="$DIRS_OBJ:$dir"
  -    fi
  +    case "$dirlist" in
  +        *:$dir:* ) ;;
  +        * ) DIRS_OBJ="$DIRS_OBJ:$dir" ;;
  +    esac
   done
   IFS="$OIFS"
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.subst
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 sh.subst
  --- ossp-pkg/shtool/sh.subst	16 May 2003 08:46:26 -0000	1.8
  +++ ossp-pkg/shtool/sh.subst	13 Aug 2003 14:20:34 -0000	1.9
  @@ -40,11 +40,11 @@
   files="$*"
   
   #   parameter consistency check
  -if [ $# -eq 0 -a ".$opt_b" != . ]; then
  +if [ $# -eq 0 ] && [ ".$opt_b" != . ]; then
       echo "$msgprefix:Error: option -b cannot be applied to stdin" 1>&2
       shtool_exit 1
   fi
  -if [ $# -eq 0 -a ".$opt_s" = .yes ]; then
  +if [ $# -eq 0 ] && [ ".$opt_s" = .yes ]; then
       echo "$msgprefix:Error: option -s cannot be applied to stdin" 1>&2
       shtool_exit 1
   fi
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.tarball
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 sh.tarball
  --- ossp-pkg/shtool/sh.tarball	11 Feb 2003 13:00:50 -0000	1.18
  +++ ossp-pkg/shtool/sh.tarball	13 Aug 2003 14:20:34 -0000	1.19
  @@ -58,7 +58,7 @@
       for tool in `echo $tools | sed -e 's/,/ /g'`; do
           #   iterate over paths
           for path in $paths; do
  -            if [ $minusx "$path/$tool" -a ! -d "$path/$tool" ]; then
  +            if [ $minusx "$path/$tool" ] && [ ! -d "$path/$tool" ]; then
                   eval "prg_${prg}=\"$path/$tool\""
                   break
               fi
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtoolize.in
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 shtoolize.in
  --- ossp-pkg/shtool/shtoolize.in	11 Feb 2003 13:00:50 -0000	1.30
  +++ ossp-pkg/shtool/shtoolize.in	13 Aug 2003 14:20:34 -0000	1.31
  @@ -391,7 +391,7 @@
       echo "\$0:Hint:  run \\`\$0 -h' for usage" 1>&2
       exit 1
   fi
  -if [ ".\$1" = ".-h" -o ".\$1" = ".--help" ]; then
  +if [ ".\$1" = ".-h" ] || [ ".\$1" = ".--help" ]; then
       echo "This is GNU shtool, version ${version}"
       echo "Copyright (c) 1994-2003 Ralf S. Engelschall <rse\@engelschall.com>"
       echo "Report bugs to <bug-shtool\@gnu.org>"
  @@ -408,15 +408,15 @@
       echo ''
       exit 0
   fi
  -if [ ".\$1" = ".-v" -o ".\$1" = ."--version" ]; then
  +if [ ".\$1" = ".-v" ] || [ ".\$1" = ".--version" ]; then
       echo "GNU shtool ${version}"
       exit 0
   fi
  -if [ ".\$1" = ".-r" -o ".\$1" = ."--recreate" ]; then
  +if [ ".\$1" = ".-r" ] || [ ".\$1" = ".--recreate" ]; then
       ${recreate}
       exit 0
   fi
  -if [ ".\$1" = ".-d" -o ".\$1" = ."--debug" ]; then
  +if [ ".\$1" = ".-d" ] || [ ".\$1" = ".--debug" ]; then
       shift
       set -x
   fi
  @@ .

From ossp-cvs-owner@ossp.org  Wed Aug 13 16:23:21 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6EBBC770CA; Wed, 13 Aug 2003 16:23:21 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ README VERSION
Message-Id: <20030813142321.6EBBC770CA@mail.ossp.org>
Date: Wed, 13 Aug 2003 16:23:21 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Aug-2003 16:23:21
  Branch: HEAD                             Handle: 2003081315232100

  Modified files:
    ossp-pkg/shtool         README VERSION

  Log:
    bump date

  Summary:
    Revision    Changes     Path
    1.96        +1  -1      ossp-pkg/shtool/README
    1.73        +1  -1      ossp-pkg/shtool/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/README
  ============================================================================
  $ cvs diff -u -r1.95 -r1.96 README
  --- ossp-pkg/shtool/README	3 Jun 2003 08:28:19 -0000	1.95
  +++ ossp-pkg/shtool/README	13 Aug 2003 14:23:21 -0000	1.96
  @@ -10,7 +10,7 @@
     http://www.gnu.org/software/shtool/
     ftp://ftp.gnu.org/gnu/shtool/
   
  -  Version 2.0b0 (03-Jun-2003)
  +  Version 2.0b0 (13-Aug-2003)
   
     The GNU shtool program is a compilation of small but very stable and
     portable shell scripts into a single shell tool. All ingredients
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/VERSION
  ============================================================================
  $ cvs diff -u -r1.72 -r1.73 VERSION
  --- ossp-pkg/shtool/VERSION	3 Jun 2003 08:28:19 -0000	1.72
  +++ ossp-pkg/shtool/VERSION	13 Aug 2003 14:23:21 -0000	1.73
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for GNU shtool (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is GNU shtool, Version 2.0b0 (03-Jun-2003)
  +  This is GNU shtool, Version 2.0b0 (13-Aug-2003)
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Sep  1 17:22:45 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 60E6877107; Mon,  1 Sep 2003 17:22:44 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpd-probe/ 00BRAINSTORM 00README 00TODO Makefil...
Message-Id: <20030901152244.60E6877107@mail.ossp.org>
Date: Mon,  1 Sep 2003 17:22:44 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Sep-2003 17:22:44
  Branch: HEAD                             Handle: 2003090116224102

  Added files:
    ossp-pkg/snmpd-probe    00BRAINSTORM 00README 00TODO Makefile snmpd-probe
                            snmpd-probe.sh
    ossp-pkg/snmpd-probe/snmpd-probe.d
                            hwCpu.pm hwProd.pm swOp.pm swOs.pm sysLoad.pm
                            sysProc.pm sysUptime.pm sysUser.pm
    ossp-pkg/snmpd-probe/snmpd-probe.mib
                            .index snmpd-probe.mib

  Log:
    genesis of OSSP snmpd-probe

  Summary:
    Revision    Changes     Path
    1.1         +145 -0     ossp-pkg/snmpd-probe/00BRAINSTORM
    1.1         +53 -0      ossp-pkg/snmpd-probe/00README
    1.1         +14 -0      ossp-pkg/snmpd-probe/00TODO
    1.1         +27 -0      ossp-pkg/snmpd-probe/Makefile
    1.1         +734 -0     ossp-pkg/snmpd-probe/snmpd-probe
    1.1         +66 -0      ossp-pkg/snmpd-probe/snmpd-probe.d/hwCpu.pm
    1.1         +81 -0      ossp-pkg/snmpd-probe/snmpd-probe.d/hwProd.pm
    1.1         +50 -0      ossp-pkg/snmpd-probe/snmpd-probe.d/swOp.pm
    1.1         +55 -0      ossp-pkg/snmpd-probe/snmpd-probe.d/swOs.pm
    1.1         +63 -0      ossp-pkg/snmpd-probe/snmpd-probe.d/sysLoad.pm
    1.1         +76 -0      ossp-pkg/snmpd-probe/snmpd-probe.d/sysProc.pm
    1.1         +69 -0      ossp-pkg/snmpd-probe/snmpd-probe.d/sysUptime.pm
    1.1         +71 -0      ossp-pkg/snmpd-probe/snmpd-probe.d/sysUser.pm
    1.1         +1  -0      ossp-pkg/snmpd-probe/snmpd-probe.mib/.index
    1.1         +393 -0     ossp-pkg/snmpd-probe/snmpd-probe.mib/snmpd-probe.mib
    1.1         +20 -0      ossp-pkg/snmpd-probe/snmpd-probe.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpd-probe/00BRAINSTORM
  ============================================================================
  $ cvs diff -u -r0 -r1.1 00BRAINSTORM
  --- /dev/null	2003-09-01 17:22:42.000000000 +0200
  +++ 00BRAINSTORM	2003-09-01 17:22:42.000000000 +0200
  @@ -0,0 +1,145 @@
  +
  +Sitzt Michael schon an der SNMP-Geschichte? Wir haben bereits am Mittwoch
  +ein Folgemeeting, er waere gut, bis dahin erste Resultate zu haben. Ziel
  +ist es, von einer (zu schaffenden) Montoring Platform bestehend aus zwei
  +Sun Netra t1 ueber das Backup-LAN Hardware-Monitoring mittels SNMP zu
  +fahren. Die Netras werden auch von uns bereitgestellt, ich will diese dem
  +Zet.Net-Setup entnehmen. Dazu fehlt mir jedoch die Freigabe von Assuntina
  +Greco (Bill & Collect), welche jedoch erst zum 1.9. wieder da sein wird.
  +
  +Deshalb sollten wir uns erst mal auf die Client-Seite konzentriert werden.
  +Hierzu muss eine MIB entwickelt werden, mit der sich Parameter wir
  +Netzteil-Status (jeweils 1 oder mehrere), Plattenstatus (jeweils 1 oder
  +mehrere), Temperatur (jeweils 1 oder mehrere) etc. abfragen lassen. Wir
  +sollten erst einmal eine Referenzloesung und Sun Solaris schaffen.
  +Notwendige Punkte sind daher wohl
  +
  +o Config fuer den SNMP-Daemon aus OpenPKG, welcher diesen nur am
  +  Backup-Interface listenen laesst.
  +o Entwicklung von MIB und Skripten, mit der sich die relevanten
  +  Information extrahieren lassen (wahrscheinlich output von prtdiag
  +  parsen. Wie wir wissen, kann der output von prtdiag je nach Platform
  +  stark abweichen)
  +o Erweiterbarkeit der Loesung um andere Platformen, etwa Linux oder
  +  Windows (natuerlich nicht mit OpenPKG :-) muss gegeben sein.
  +o Waere es evtl. sinnvoll, die Skripte nicht direct durch den SNMP Daemon
  +  triggern zu lassen, insofern Daten lokal gecached bereits vorliegen?
  +  Der Cache koennte etwa eine RRD sein, welche durch cronjobs gespeist
  +  wird. So koennte man die Informationen noch evtl. anderweitig lokal
  +  nutzen (evtl. Reanimierung von poor man's monitoring probes sinnvoll?)
  +
  +Es sollen keine Traps ausgeloest werden, die Monitoring-Platform, auf der
  +dann ein BMC Agent laufen soll, pollt regelmaessig.
  +
  +
  +* 1.3         - ISO Identified Organization
  +* 1.3.6       - US Department of Defense
  +* 1.3.6.1     - OID assignments from 1.3.6.1 - Internet
  +* 1.3.6.1.4   - Internet Private
  +* 1.3.6.1.4.1 - IANA-registered Private Enterprises
  +* 1.3.6.1.4.1.2021 - RedHat Linux
  +* 1.3.6.1.4.1.4007 - Cable & Wireless Plc
  +
  +Cable & Wireless Communications plc Brian Norris <brian.norris@cwcom.co.uk>
  +                                    Brian Morris <brian.morris@uk.ibm.com>
  +
  +http://www.iana.org/assignments/enterprise-numbers
  +http://www.iana.org/cgi-bin/enterprise.pl
  +http://www.alvestrand.no/objectid/top.html
  +
  +{iso(1) org(3) dod(6) iana(1)}
  +
  +
  +pass .1.3.6.1.4.1.2021.255 /path/to/probe
  +$ /path/to/probe -g .1.3.6.1.4.1.2021.255
  +.1.3.6.1.4.1.2021.255
  +integer
  +42
  +
  +pass_persist .1.3.6.1.4.1.2021.255 /path/to/probe
  +> PING
  +< PONG
  +> GET
  +> .1.3.6.1.4.1.2021.255
  +< .1.3.6.1.4.1.2021.255
  +< integer
  +< 42
  +> GET
  +> .1.2.3
  +< NONE
  +
  +/cw/bin/snmpget  -cpublic -v2c -mALL 127.0.0.1 .1.3.6.1.4.1.4007.42.1
  +/cw/bin/snmpwalk -cpublic -v2c -mALL 127.0.0.1 .1.3.6.1.4.1.4007.42.1
  +/cw/bin/snmpwalk -M /u/rse/prj/snmp/snmpd-probe.d -cpublic -v2c -mALL 127.0.0.1 .1.3.6.1.4.1.4007.42
  +
  +-----------------------------------------------------------------------
  +
  +o hardware
  +  o CPU
  +    - number of
  +    - speed (mhz)
  +    - temperature
  +  o RAM
  +    - available
  +    - used
  +    - bank status (ok)
  +  o Disk
  +    o Logical
  +      - number of (parts)
  +      - available (space)
  +      - used
  +      - status
  +    o Physical
  +      - number of (parts)
  +      - available (space)
  +      - used
  +      - status
  +      - temperature
  +  o Power
  +    - number of (parts)
  +    - temperature
  +    - operating/shutdown
  +  o Chassis
  +    - open/closed
  +    - temperature
  +
  +o software
  +  o Operating System
  +    - uptime
  +    - load average (5/10/15)
  +    - processes
  +    - logged in users 
  +    - virtual memory
  +      - swap space (available/used)
  +      - RAM space (available/used)
  +  o Packages (installed)
  +    - Vendor
  +      - name, version
  +      - status (verified ok)
  +    - OpenPKG (multiple instances!)
  +      - name, version
  +      - status (verified ok)
  +  o Processes (running)
  +    - running
  +
  +------------------------
  +
  +FreeBSD:
  +/proc
  +sysctl
  +df
  +netstat 
  +ps
  +
  +Linux:
  +/proc
  +sysctl
  +df
  +netstat
  +ps
  +/proc/meminfo
  +
  +Solaris:
  +prtdiag 
  +/usr/sbin/sysdef
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpd-probe/00README
  ============================================================================
  $ cvs diff -u -r0 -r1.1 00README
  --- /dev/null	2003-09-01 17:22:42.000000000 +0200
  +++ 00README	2003-09-01 17:22:42.000000000 +0200
  @@ -0,0 +1,53 @@
  +   _        ___  ____ ____  ____
  +  |_|_ _   / _ \/ ___/ ___||  _ \ 
  +  _|_||_| | | | \___ \___ \| |_) |
  + |_||_|_| | |_| |___) |__) |  __/ 
  +  |_|_|_|  \___/|____/____/|_|    
  +                                 _                       _          
  +   ___ _ __  _ __ ___  _ __   __| |      _ __  _ __ ___ | |__   ___ 
  +  / __| '_ \| '_ ` _ \| '_ \ / _` |_____| '_ \| '__/ _ \| '_ \ / _ \
  +  \__ \ | | | | | | | | |_) | (_| |_____| |_) | | | (_) | |_) |  __/
  +  |___/_| |_|_| |_| |_| .__/ \__,_|     | .__/|_|  \___/|_.__/ \___|
  +                      |_|               |_|                         
  +
  +  OSSP snmpd-probe - SNMP Daemon Probe
  +  Version 0.1.0 (30-Jan-2003)
  +
  +  ABSTRACT
  +
  +  OSSP snmpd-probe is ...
  +
  +  COPYRIGHT AND LICENSE
  +
  +  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +
  +  This file is part of OSSP snmpd-probe, ...
  +  can be found at http://www.ossp.org/pkg/tool/snmpd-probe/.
  +
  +  Permission to use, copy, modify, and distribute this software for
  +  any purpose with or without fee is hereby granted, provided that
  +  the above copyright notice and this permission notice appear in all
  +  copies.
  +
  +  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +  SUCH DAMAGE.
  +
  +  HOME AND DOCUMENTATION
  +
  +  The documentation and latest release can be found on
  +
  +  o http://www.ossp.org/pkg/tool/snmpd-probe/
  +  o  ftp://ftp.ossp.org/pkg/tool/snmpd-probe/
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpd-probe/00TODO
  ============================================================================
  $ cvs diff -u -r0 -r1.1 00TODO
  --- /dev/null	2003-09-01 17:22:42.000000000 +0200
  +++ 00TODO	2003-09-01 17:22:42.000000000 +0200
  @@ -0,0 +1,14 @@
  +
  +- suplement command line options with configuration file
  +  (mainly because snmpd(8) does not support passing options)
  +
  +- implement more probes [thl]
  +
  +- support MIB SEQUENCEs [rse]
  +
  +- split out MIB parts of each probe into own sub-MIBs
  +
  +- Makefile and snmpd-probe.sh still contains some hard-coded things
  +
  +- provide top-level MIB prefix name as variable
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpd-probe/Makefile
  ============================================================================
  $ cvs diff -u -r0 -r1.1 Makefile
  --- /dev/null	2003-09-01 17:22:42.000000000 +0200
  +++ Makefile	2003-09-01 17:22:42.000000000 +0200
  @@ -0,0 +1,27 @@
  +
  +SRCDIR      = `pwd`
  +OPENPKG     = /cw
  +RC          = $(OPENPKG)/etc/rc
  +SNMPGET     = $(OPENPKG)/bin/snmpget
  +SNMPWALK    = $(OPENPKG)/bin/snmpget
  +SNMPHOSTS   = dv1 dv6 dv9
  +SNMPMIBDIR  = $(SRCDIR)/snmpd-probe.mib:$(OPENPKG)/share/snmp/mibs
  +SNMPMIBNAME = snmpd-probe
  +
  +restart:
  +	@for host in $(SNMPHOSTS); do \
  +	    echo "==== $$host ===="; \
  +	    ssh -t root@$$host "$(RC) snmp stop start"; \
  +	    $(SNMPGET) \
  +	        -M $(SNMPMIBDIR) -cpublic -v2c -mALL \
  +            $$host $(SNMPMIBNAME)::swOsName; \
  +	done
  +
  +query:
  +	@for host in $(SNMPHOSTS); do \
  +	    echo "==== $$host ===="; \
  +	    $(SNMPWALK) \
  +	        -M $(SNMPMIBDIR) -cpublic -v2c -mALL \
  +	        $$host $(SNMPMIBNAME); \
  +	done
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpd-probe/snmpd-probe
  ============================================================================
  $ cvs diff -u -r0 -r1.1 snmpd-probe
  --- /dev/null	2003-09-01 17:22:42.000000000 +0200
  +++ snmpd-probe	2003-09-01 17:22:42.000000000 +0200
  @@ -0,0 +1,734 @@
  +#!/bin/sh -- # -*- perl -*-
  +eval 'exec perl -S $0 ${1+"$@"}'
  +    if $running_under_some_shell;
  +##
  +##  OSSP snmpd-probe -- SNMP Daemon Probe
  +##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +
  +#   requirements
  +require 5;
  +use strict;
  +use warnings;
  +use Getopt::Long;
  +use IO;
  +
  +#   program information
  +my $progname = "snmpd-probe";
  +my $progvers = "0.1.0";
  +
  +##  _________________________________________________________________________
  +##
  +##  HELPER CLASS: LOGFILE WRITING
  +##  _________________________________________________________________________
  +##
  +
  +package My::Log;
  +
  +require Exporter;
  +
  +our @ISA = qw(Exporter);
  +our @EXPORT_OK = qw(new destroy DESTROY write);
  +
  +sub new ($$) {
  +    my $proto = shift @_;
  +    my $class = ref $proto || $proto;
  +    my $self = {};
  +    bless ($self, $class);
  +    my $level    = shift @_ || die "missing level argument";
  +    my $filename = shift @_ || die "missing filename argument";
  +    $self->{-level} = $level;
  +    $self->{-io} = new IO::File ">>$filename"
  +        or die "cannot open logfile \"$filename\" for writing";
  +    $self->{-io}->autoflush(1);
  +    return $self;
  +}
  +
  +sub destroy ($) {
  +    my ($self) = @_;
  +    $self->{-io}->close() if (defined($self->{-io}));
  +    return;
  +}
  +
  +sub DESTROY ($) {
  +    my ($self) = @_;
  +    $self->destroy;
  +    return;
  +}
  +
  +sub printf ($;@) {
  +    my $self  = shift @_;
  +    my $level = shift @_ || die "missing level argument";
  +    my $fmt   = shift @_ || die "missing format argument";
  +    if ($self->{-level} >= $level) {
  +        my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time());
  +        my $id = sprintf("[%04d-%02d-%02d/%02d:%02d:%02d@%05d] ", 
  +                         $year+1900, $mon+1, $mday, $hour, $min, $sec, $$);
  +        $self->{-io}->printf($id . $fmt . "\n", @_);
  +    }
  +    return;
  +}
  +
  +##  _________________________________________________________________________
  +##
  +##  HELPER CLASS: VALUE CACHING
  +##  _________________________________________________________________________
  +##
  +
  +package My::Cache;
  +
  +require Exporter;
  +
  +our @ISA = qw(Exporter);
  +our @EXPORT_OK = qw(new destroy DESTROY store fetch);
  +
  +sub new ($) {
  +    my ($proto) = @_;
  +    my $class = ref $proto || $proto;
  +    my $self = {};
  +    bless ($self, $class);
  +    $self->{-cache} = {};
  +    return $self;
  +}
  +
  +sub destroy ($) {
  +    my ($self) = @_;
  +    return;
  +}
  +
  +sub DESTROY ($) {
  +    my ($self) = @_;
  +    $self->destroy;
  +    return;
  +}
  +
  +sub store ($$$$) {
  +    my ($self, $id, $expires, $value) = @_;
  +
  +    die "invalid id" if (not defined($id) or $id eq '');
  +
  +    if    ($expires =~ m|^(\d+)[sS]?$|) { $expires = $1; }
  +    elsif ($expires =~ m|^(\d+)[mM]$|)  { $expires = $1 * 60; }
  +    elsif ($expires =~ m|^(\d+)[hH]$|)  { $expires = $1 * 60 * 60; }
  +    elsif ($expires =~ m|^(\d+)[dD]$|)  { $expires = $1 * 60 * 60 * 24; }
  +    elsif ($expires =~ m|^(\d+)[wW]$|)  { $expires = $1 * 60 * 60 * 24 * 7; }
  +    elsif ($expires =~ m|^forever$|i)   { $expires = 99999 * 365 * 24 * 60 * 60; }
  +    else { die "invalid expire time"; }
  +
  +    $expires = time() + $expires;
  +
  +    $self->{-cache}->{$id} = { -expires => $expires, -value => $value };
  +
  +    return;
  +}
  +
  +sub fetch ($$) {
  +    my ($self, $id) = @_;
  +
  +    my $value = undef;
  +    if (defined($self->{-cache}->{$id})) {
  +        if ($self->{-cache}->{$id}->{-expires} > time()) {
  +            $value = $self->{-cache}->{$id}->{-value};
  +        }
  +        else {
  +            undef $self->{-cache}->{$id};
  +        }
  +    }
  +    return $value;
  +}
  +
  +##  _________________________________________________________________________
  +##
  +##  HELPER CLASS: RUNNING SYSTEM COMMANDS
  +##  _________________________________________________________________________
  +##
  +
  +package My::System;
  +
  +require Exporter;
  +
  +our @ISA = qw(Exporter);
  +our @EXPORT_OK = qw(new destroy DESTROY run);
  +
  +sub new ($;$) {
  +    my ($proto, $log, $cache) = @_;
  +    my $class = ref $proto || $proto;
  +    my $self = {};
  +    bless ($self, $class);
  +    $self->{-log}   = $log;
  +    $self->{-cache} = (defined($cache) ? $cache : new My::Cache);
  +    return $self;
  +}
  +
  +sub destroy ($) {
  +    my ($self) = @_;
  +    $self->{-cache}->destroy() if (defined($self->{-cache}));
  +    return;
  +}
  +
  +sub DESTROY ($) {
  +    my ($self) = @_;
  +    $self->destroy;
  +    return;
  +}
  +
  +sub run ($$;$) {
  +    my ($self, $cmd, $expires) = @_;
  +
  +    $expires = "1m" if (not defined($expires));
  +    my $result = $self->{-cache}->fetch($cmd);
  +    if (defined($result)) {
  +        $self->{-log}->printf(4, "system: run: \"$cmd\" ($expires) [CACHE HIT]");
  +    }
  +    else {
  +        $self->{-log}->printf(3, "system: run: \"$cmd\" ($expires) [CACHE MISS]");
  +        $self->{-log}->printf(5, "system: executing command: \"$cmd\""); 
  +        $result = { -stdout => '', -rv => 0 };
  +        $result->{-stdout} = `$cmd 2>/dev/null`;
  +        $result->{-rv} = ($? >> 8);
  +        $self->{-log}->printf(6, "system: return value: ". $result->{-rv}); 
  +        $self->{-cache}->store($cmd, $expires, $result);
  +    }
  +    return $result;
  +}
  +
  +##  _________________________________________________________________________
  +##
  +##  HELPER CLASS: PLATFORM IDENTIFICATION
  +##  _________________________________________________________________________
  +##
  +
  +package My::Platform;
  +
  +require Exporter;
  +
  +our @ISA = qw(Exporter);
  +our @EXPORT_OK = qw(new destroy DESTROY id);
  +
  +sub new ($) {
  +    my ($proto) = @_;
  +    my $class = ref $proto || $proto;
  +    my $self = {};
  +    bless ($self, $class);
  +    $self->{-machine} = `(uname -m) 2>/dev/null`;
  +    $self->{-machine} = `(uname -p) 2>/dev/null` if ($self->{-machine} eq '');
  +    $self->{-machine} =~ s|^\s*(.+?)\s*$|$1|s;
  +    $self->{-system}  = `(uname -s) 2>/dev/null`;
  +    $self->{-system}  =~ s|^\s*(.+?)\s*$|$1|s;
  +    $self->{-release} = `(uname -r) 2>/dev/null`;
  +    $self->{-release} = `(uname -v) 2>/dev/null` if ($self->{-release} eq '');
  +    $self->{-release} =~ s|^\s*(.+?)\s*$|$1|s;
  +    return $self;
  +}
  +
  +sub destroy ($) {
  +    my ($self) = @_;
  +    return;
  +}
  +
  +sub DESTROY ($) {
  +    my ($self) = @_;
  +    $self->destroy;
  +    return;
  +}
  +
  +sub id ($) {
  +    my ($self) = @_;
  +    return sprintf("%s-%s-%s", 
  +        $self->{-machine}, $self->{-system}, $self->{-release});
  +}
  +
  +##  _________________________________________________________________________
  +##
  +##  HELPER CLASS: MIB OID/NAME MAPPING
  +##  _________________________________________________________________________
  +##
  +
  +package My::MIB;
  +
  +require Exporter;
  +
  +our @ISA = qw(Exporter);
  +our @EXPORT_OK = qw(new destroy DESTROY oid2name name2oid oid2type);
  +
  +sub new ($$$) {
  +    my ($proto, $bindir, $mibdir, $mib) = @_;
  +    my $class = ref $proto || $proto;
  +    my $self = {};
  +    bless ($self, $class);
  +    $self->{-oid2name} = {};
  +    $self->{-name2oid} = {};
  +    my @entries = `$bindir/snmptranslate -M $mibdir -m $mib -Tl`;
  +    foreach my $entry (@entries) {
  +        $entry =~ s|\n$||s;
  +        my $name = $entry;
  +        my $oid = '';
  +        $name =~ s|\((\d+)\)|$oid .= ".$1", ''|sge;
  +        my $out = `$bindir/snmptranslate -M $mibdir -m $mib -Td $oid`;
  +        if ($out =~ m|\s+MAX-ACCESS\s+not-accessible\s*|si) {
  +            next;
  +        }
  +        my $type;
  +        if ($out =~ m|TEXTUAL\s+CONVENTION\s+(.+?)\n\s+SYNTAX|si) {
  +            $type = $1;
  +        }
  +        elsif ($out =~ m|SYNTAX\s+(.+?)\s*\n|si) {
  +            $type = $1;
  +            $type =~ s|\s+\([^\)]+\)$||s;
  +        }
  +        else {
  +            next;
  +        }
  +        if ($name =~ m|[^.]+TABLE\.[^.]+ENTRY\.[^.]+$|) {
  +            $name .= ".#";
  +            $oid  .= ".#";
  +        }
  +        $self->{-oid2type}->{$oid} = $type;
  +        $self->{-oid2name}->{$oid} = $name;
  +        $self->{-name2oid}->{$name} = $oid;
  +    }
  +    return $self;
  +}
  +
  +sub destroy ($) {
  +    my ($self) = @_;
  +    return;
  +}
  +
  +sub DESTROY ($) {
  +    my ($self) = @_;
  +    $self->destroy;
  +    return;
  +}
  +
  +sub oid2name ($$) {
  +    my ($self, $oid) = @_;
  +    return $self->{-oid2name}->{$oid};
  +}
  +
  +sub name2oid ($$) {
  +    my ($self, $name) = @_;
  +    return $self->{-name2oid}->{$name};
  +}
  +
  +sub oid2type ($$) {
  +    my ($self, $oid) = @_;
  +    return $self->{-oid2type}->{$oid};
  +}
  +
  +sub oids ($;@) {
  +    my ($self, @patterns) = @_;
  +    my $oids = [];
  +    foreach my $pattern (@patterns) {
  +        $pattern = "*" if (not defined($pattern));
  +        $pattern =~ s/\./\\./sg;
  +        $pattern =~ s/\*/.*/sg;
  +        foreach my $name (keys(%{$self->{-name2oid}})) {
  +            if ($name =~ m|^${pattern}$|si) {
  +                push(@{$oids}, $self->{-name2oid}->{$name});
  +            }
  +        }
  +    }
  +    return $oids;
  +}
  +
  +##  _________________________________________________________________________
  +##
  +##  HELPER CLASS: PROBE (abstract only)
  +##  _________________________________________________________________________
  +##
  +
  +package My::Probe;
  +
  +require Exporter;
  +
  +our @ISA = qw(Exporter);
  +our @EXPORT_OK = qw(new destroy DESTROY oids probe);
  +
  +sub new ($$) {
  +    my ($proto, $ctx) = @_;
  +    my $class = ref $proto || $proto;
  +    my $self = {};
  +    bless ($self, $class);
  +    $self->{-ctx} = $ctx;
  +    return $self;
  +}
  +
  +sub destroy ($) {
  +    my ($self) = @_;
  +    return;
  +}
  +
  +sub DESTROY ($) {
  +    my ($self) = @_;
  +    $self->destroy;
  +    return;
  +}
  +
  +sub oids ($) {
  +    my ($self) = @_;
  +    return [];
  +}
  +
  +sub probe ($$$) {
  +    my ($self, $ctx, $oid) = @_;
  +    return {};
  +}
  +
  +##  _________________________________________________________________________
  +##
  +##  HELPER CLASS: Encoding
  +##  _________________________________________________________________________
  +##
  +
  +package My::Enc;
  +
  +require Exporter;
  +
  +our @ISA = qw(Exporter);
  +our @EXPORT_OK = qw(new destroy DESTROY dat_encode dat_decode octet_encode octet_decode);
  +
  +sub new ($$) {
  +    my ($proto) = @_;
  +    my $class = ref $proto || $proto;
  +    my $self = {};
  +    bless ($self, $class);
  +    return $self;
  +}
  +
  +sub destroy ($) {
  +    my ($self) = @_;
  +    return;
  +}
  +
  +sub DESTROY ($) {
  +    my ($self) = @_;
  +    $self->destroy;
  +    return;
  +}
  +
  +#   ASN.1 DateAndTime encoding/decoding
  +sub dat_encode ($$) {
  +    my ($self, $asc) = @_;
  +    my ($y, $m, $d, $H, $M, $S) = (0, 0, 0, 0, 0, 0);
  +    if ($asc =~ m|^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})$|) {
  +        ($y, $m, $d, $H, $M, $S) = ($1, $2, $3, $4, $5, $6);
  +    }
  +    return pack("nCCCCCCCCC", $y, $m, $d, $H, $M, $S, 0, 0, 0, 0);
  +}
  +sub dat_decode ($$) {
  +    my ($self, $bin) = @_;
  +    my ($y, $m, $d, $H, $M, $S) = unpack("nCCCCCCCCC", $bin);
  +    return sprintf("%04d-%02d-%02d %02d:%02d:%02d", $y, $m, $d, $H, $M, $S);
  +}
  +
  +#   snmpd(8) pass_persist protocol 'octet' encoding/decoding
  +sub octet_encode ($$) {
  +    my ($self, $bin) = @_;
  +    my $asc = '';
  +    $bin =~ s|(.)|$asc .= sprintf("%02x ", ord($1)), ''|sge;
  +    return $asc;
  +}
  +sub octet_decode ($$) {
  +    my ($self, $asc) = @_;
  +    my $bin = '';
  +    $asc =~ s|([0-9a-zA-Z]{2})\s*|$bin .= chr(hex($1)), ''|sge;
  +    return $bin;
  +}
  +
  +##  _________________________________________________________________________
  +##
  +##  MAIN PROCEDURE
  +##  _________________________________________________________________________
  +##
  +
  +package main;
  +
  +#   parameters (defaults)
  +my $version   = 0;
  +my $help      = 0;
  +my $tmpdir    = ($ENV{TMPDIR} || $ENV{TEMPDIR} || "/tmp");
  +my $get       = 0;
  +my $next      = 0;
  +my $bindir    = "/cw/bin";
  +my $probedir  = "./snmpd-probe.d";
  +my $probename = "*";
  +my $mibdir    = "./snmpd-probe.mib";
  +my $mibname   = "snmpd-probe";
  +my $logfile   = "./snmpd-probe.log";
  +my $loglevel  = 9;
  +
  +#   command line parsing
  +Getopt::Long::Configure("bundling");
  +my $result = GetOptions(
  +    'V|version'     => \$version,
  +    'h|help'        => \$help,
  +    't|tmpdir=s'    => \$tmpdir,
  +    'g|get'         => \$get,
  +    'n|next'        => \$next,
  +    'b|bindir=s'    => \$bindir,
  +    'P|probedir=s'  => \$probedir,
  +    'p|probename=s' => \$probename,
  +    'M|mibdir=s'    => \$mibdir,
  +    'm|mibname=s'   => \$mibname,
  +    'l|logfile=s'   => \$logfile,
  +    'L|loglevel=i'  => \$loglevel,
  +) || die "option parsing failed";
  +if ($help) {
  +    print "Usage: $progname [options] [SPECFILE ...]\n" .
  +          "Available options:\n" .
  +          " -V,--version        print program version\n" .
  +          " -h,--help           print out this usage page\n" .
  +          " -t,--tmpdir=PATH    filesystem path to temporary directory\n" .
  +          " -g,--get=MIBOID     get value of this MIB OID\n" .
  +          " -n,--next=MIBOID    get value of next MIB OID\n" .
  +          " -b,--bindir=PATH    path to the net-snmp binaries\n" .
  +          " -P,--probedir=PATH  path to probe directory\n" .
  +          " -p,--probename=NAME the pattern for probes to load\n" .
  +          " -M,--mibdir=PATH    path to MIB directory\n" .
  +          " -m,--mibname=MIB    the name of the MIB to act under\n" .
  +          " -l,--logfile=PATH   path to daemon logfile\n" .
  +          " -L,--loglevel=NUM   logging level (0...9)\n";
  +    exit(0);
  +}
  +if ($version) {
  +    print "$progname $progvers\n";
  +    exit(0);
  +}
  +
  +#   create daemon run-time context
  +my $ctx = {};
  +$ctx->{-log}      = new My::Log ($loglevel, $logfile);
  +$ctx->{-cache}    = new My::Cache;
  +$ctx->{-sys}      = new My::System ($ctx->{-log}, $ctx->{-cache});
  +$ctx->{-platform} = new My::Platform;
  +$ctx->{-log}->printf(1, "startup %s %s (%s)", $progname, $progvers, $ctx->{-platform}->id());
  +$ctx->{-mib}      = new My::MIB ($bindir, $mibdir, $mibname);
  +$ctx->{-enc}      = new My::Enc;
  +
  +#   exception handling support 
  +$SIG{__DIE__} = sub {
  +    my ($err) = @_;
  +    $err =~ s|\r?\n$||s;
  +    $ctx->{-log}->printf(1, "ERROR: $err ". ($! ? "($!)" : ""));
  +    undef $ctx;
  +    exit(1);
  +};
  +$SIG{__WARN__} = sub {
  +    my ($err) = @_;
  +    $err =~ s|\r?\n$||s;
  +    $ctx->{-log}->printf(1, "WARNING: $err");
  +    return;
  +};
  +
  +#   PROTOCOL   MIB        MIB TYPE            net-snmp API   CONVERT TYPE
  +#   ---------- ---------- ------------------- -------------- ------- ------
  +#   string     SNMPv2-TC  DisplayString       ASN_OCTET_STR  -       char *
  +#   integer    ASN.1      Integer32           ASN_INTEGER    strtol  long
  +#   unsigned   SNMPv2-SMI Unsigned32          ASN_UNSIGNED   strtoul long
  +#   counter    SNMPv2-SMI Counter32           ASN_COUNTER    strtoul long
  +#   octet      ASN.1      OCTET STRING        ASN_OCTET_STR  asc2bin char *
  +#   opaque     SNMPv2-SMI Opaque              ASN_OPAQUE     asc2bin char *
  +#   gauge      SNMPv2-SMI Gauge32             ASN_GAUGE      strtoul long
  +#   objectid   ASN.1      OBJECT IDENTIFIER   ASN_OBJECT_ID  -       char *
  +#   timetick   SNMPv2-SMI TimeTicks           ASN_TIMETICKS  strtoul long
  +#   ipaddress  SNMPv2-SMI IpAddress           ASN_IPADDRESS  htonl   long
  +#   octet      SNMPv2-TC  DateAndTime         ASN_OCTET_STR  asc2bin char *
  +
  +#   load probes and determine their handled OIDs
  +my $oidtable   = [];
  +my $oidhandler = {};
  +my $oidtype    = {
  +    'DisplayString'      => [ 'string',    'N.A.'    ],
  +    'Integer32'          => [ 'integer',   '-1'      ],
  +    'Unsigned32'         => [ 'unsigned',  '0'       ],
  +    'Counter32'          => [ 'counter',   '-1'      ],
  +    'OCTET STRING'       => [ 'octet',     'N.A.'    ],
  +    'Opaque'             => [ 'opaque',    'N.A.'    ],
  +    'Gauge32'            => [ 'gauge',     '-1'      ],
  +    'OBJECT IDENTIFIER'  => [ 'objectid',  '.0'      ],
  +    'TimeTicks'          => [ 'timetick',  '0'       ],
  +    'IpAddress'          => [ 'ipaddress', '0.0.0.0' ],
  +    'DateAndTime'        => [ 'octet',     $ctx->{-enc}->dat_encode("1970-01-01 01:02:03") ],
  +};
  +$ctx->{-log}->printf(1, "MIB id: %s", $mibname);
  +foreach my $probefile (glob("$probedir/$probename.pm")) {
  +    my $probe = $probefile;
  +    $probe =~ s|^.*/([^/]+)\.pm$|$1|sg;
  +    my $p;
  +    eval {
  +        local $SIG{__DIE__} = 'DEFAULT';
  +        eval "require \"$probefile\";";
  +        die if ($@);
  +        eval "\$p = new My::Probe::$probe (\$ctx);";
  +        die if ($@);
  +    };
  +    if ($@) {
  +        die "invalid probe \"$probe\"";
  +    }
  +    $ctx->{-log}->printf(2, "Probe: \"%s\"", $probe);
  +    foreach my $oid (sort(@{$p->oids()})) {
  +        push(@{$oidtable}, $oid);
  +        $oidhandler->{$oid} = $p;
  +        $ctx->{-log}->printf(1, "MIB OID: %s [%s] ::= %s (%s)",
  +            $oid, $ctx->{-mib}->oid2name($oid),
  +            $ctx->{-mib}->oid2type($oid),
  +            $oidtype->{$ctx->{-mib}->oid2type($oid)}->[0]);
  +    }
  +}
  +@{$oidtable} = sort(@{$oidtable});
  +
  +#   connect I/O channels
  +my $stdin = new IO::Handle;;
  +$stdin->fdopen(fileno(STDIN), "r");
  +$stdin->blocking(1);
  +my $stdout = new IO::Handle;;
  +$stdout->fdopen(fileno(STDOUT), "w");
  +$stdout->autoflush(1);
  +open(STDERR, ">/dev/null");
  +
  +#   daemon loop
  +while (1) {
  +    #   read next command from snmpd
  +    my $cmd = $stdin->getline;
  +    if (not defined($cmd)) {
  +        $ctx->{-log}->printf(4, "IO: EOF");
  +        last;
  +    }
  +    $cmd =~ s|\n?$||s;
  +    $ctx->{-log}->printf(4, "IO: recv: << \"%s\\n\"", $cmd);
  +
  +    if ($cmd =~ m/^PING$/i) {
  +        #   the PING/PONG protocol part
  +        $ctx->{-log}->printf(4, "IO: send: >> \"PONG\\n\"");
  +        $stdout->printf("PONG\n");
  +    }
  +    elsif ($cmd =~ m/^GET$/i or $cmd =~ m/^GETNEXT$/i) {
  +        #   the GET/GETNEXT protocol part
  +        my $error = 1;
  +        my $oid = $stdin->getline;
  +        if (not defined($oid)) {
  +            $ctx->{-log}->printf(1, "ERROR: EOF instead of OID");
  +            goto ERROR;
  +        }
  +        $oid =~ s|\n?$||s;
  +        $ctx->{-log}->printf(4, "IO: recv: << \"%s\\n\"", $oid);
  +        if ($oid !~ m/^(\.\d+)+$/) {
  +            $ctx->{-log}->printf(1, "ERROR: invalid query OID \"%s\"", $oid);
  +            goto ERROR;
  +        }
  +        my $oid_table = undef;
  +        if ($cmd =~ m/^GETNEXT$/i) {
  +            my $oid_parent = $oid;
  +            $oid_parent =~ s|(\.\d+)$||s;
  +            for (my $i = 0; defined($oidtable->[$i]); $i++) {
  +                if ($oidtable->[$i] =~ m|^\Q$oid\E(\.\d+)+$|) {
  +                    #   OID start with requested OID prefix, so use this OID
  +                    $oid = $oidtable->[$i];
  +                    last;
  +                }
  +                elsif ($oidtable->[$i] eq $oid) {
  +                    #   OID is the requested OID exactly, so use next OID
  +                    if (defined($oidtable->[$i+1])) {
  +                        $oid = $oidtable->[$i+1];
  +                        last;
  +                    }
  +                    else {
  +                        goto ERROR; # end-of-MIB case
  +                    }
  +                }
  +                elsif ($oidtable->[$i] =~ m|^\Q$oid\E(\.\d+)*(\.#)$|) {
  +                    #   OID start with requested OID prefix, so use this OID (special case of table)
  +                    $oid = $oidtable->[$i];
  +                    $oid =~ s|\.#$|.1|s;
  +                    last;
  +                }
  +                elsif ($oidtable->[$i] =~ m|^\Q$oid_parent\E\.#$|) {
  +                    #   OID is the a requested OID of a table, so use next OID in table
  +                    $oid = s|\.(\d+)$|".".($1+1)|se;
  +                    $oid_table = $oidtable->[$i+1];
  +                    $oid =~ s|\.#$|.1|s;
  +                    last;
  +                }
  +            }
  +        }
  +        TABLE_NEXT:
  +        my $oid_wild = $oid;
  +        my $handler = $oidhandler->{$oid};
  +        if (not defined($handler)) {
  +            $oid_wild =~ s|(\.\d+)$|.#|s;
  +            $handler = $oidhandler->{$oid_wild};
  +        }
  +        if (not defined($handler)) {
  +            $ctx->{-log}->printf(1, "ERROR: no handler found for OID \"%s\"", $oid);
  +            goto ERROR;
  +        }
  +        my $obj = {
  +            -oid   => $oid,
  +            -name  => $ctx->{-mib}->oid2name($oid_wild),
  +            -type  => $ctx->{-mib}->oid2type($oid_wild),
  +            -value => undef
  +        };
  +        $handler->probe($obj);
  +        if (not defined($obj->{-value})) {
  +            if (defined($oid_table)) {
  +                #   end of table entry
  +                $oid = $oid_table;
  +                goto TABLE_NEXT;
  +            }
  +            #$ctx->{-log}->printf(1, "ERROR: handler was unable to provide probe value for OID \"%s\"", $oid);
  +            #goto ERROR;
  +            $ctx->{-log}->printf(1, "WARNING: handler was unable to provide probe value for OID \"%s\"", $oid);
  +            $obj->{-value} = $oidtype->{$obj->{-type}}->[1];
  +        }
  +        if ($oidtype->{$obj->{-type}}->[0] =~ m/^(octet|opaque)$/) {
  +            $obj->{-value} = $ctx->{-enc}->octet_encode($obj->{-value});
  +        }
  +        $ctx->{-log}->printf(1, "QUERY: %s [%s] ::= %s \"%s\"",
  +            $obj->{-name}, $obj->{-oid}, $obj->{-type}, $obj->{-value});
  +        $stdout->printf("%s\n%s\n%s\n",
  +            $obj->{-oid}, $oidtype->{$obj->{-type}}->[0], $obj->{-value});
  +        $ctx->{-log}->printf(4, "IO: send: >> \"%s\\n%s\\n%s\\n\"",
  +            $obj->{-oid}, $oidtype->{$obj->{-type}}->[0], $obj->{-value});
  +        $error = 0;
  +
  +        if ($error) {
  +            #   end-of-MIB or error
  +            ERROR:
  +            $ctx->{-log}->printf(4, "IO: send: >> \"NONE\\n\"");
  +            $stdout->printf("NONE\n");
  +        }
  +    }
  +    else {
  +        #   for anything else (not expected) just send 
  +        #   something in case snmpd expects something.
  +        $ctx->{-log}->printf(4, "IO: send: >> \"\"");
  +        $stdout->printf("\n");
  +    }
  +}
  +
  +#   shutdown gracefully
  +$ctx->{-log}->printf(1, "shutdown");
  +undef $ctx;
  +exit(0);
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpd-probe/snmpd-probe.d/hwCpu.pm
  ============================================================================
  $ cvs diff -u -r0 -r1.1 hwCpu.pm
  --- /dev/null	2003-09-01 17:22:42.000000000 +0200
  +++ hwCpu.pm	2003-09-01 17:22:43.000000000 +0200
  @@ -0,0 +1,66 @@
  +##
  +##  snmpd-probe -- SNMP Daemon Probe
  +##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  hwCpu: Hardware, CPU
  +##
  +
  +package My::Probe::hwCpu;
  +our @ISA = qw(My::Probe);
  +
  +sub oids ($) {
  +    my ($self) = @_;
  +    return $self->{-ctx}->{-mib}->oids("*.snmpd-probe.host.hardware.hwCpu.*");
  +}
  +
  +sub probe ($$) {
  +    my ($self, $obj) = @_;
  +
  +    if ($obj->{-name} =~ m|\.hwCpuNum$|) {
  +        if ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i) {
  +            #   query sysctl(8)
  +            my $out = $self->{-ctx}->{-sys}->run("/sbin/sysctl -n hw.ncpu", "forever");
  +            $obj->{-value} = $out->{-stdout};
  +            $obj->{-value} =~ s/^\s*(.+?)\s*$/$1/s;
  +        }
  +    }
  +    elsif ($obj->{-name} =~ m|\.hwCpuSpeed$|) {
  +        if ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i) {
  +            #   query dmesg(8)
  +            #   FIXME: this works only within a reasonable time after booting
  +            #          but I don't know any alternative method for querying the speed!
  +            my $out = $self->{-ctx}->{-sys}->run("/sbin/dmesg", "forever");
  +            if ($out->{-stdout} =~ m|(\d+)(\.\d+)?[ -]*MHz|si) {
  +                $obj->{-value} = $1;
  +            }
  +        }
  +    }
  +    elsif ($obj->{-name} =~ m|\.hwCpuTemp$|) {
  +        if ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i) {
  +        }
  +    }
  +    return;
  +}
  +
  +1;
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpd-probe/snmpd-probe.d/hwProd.pm
  ============================================================================
  $ cvs diff -u -r0 -r1.1 hwProd.pm
  --- /dev/null	2003-09-01 17:22:42.000000000 +0200
  +++ hwProd.pm	2003-09-01 17:22:43.000000000 +0200
  @@ -0,0 +1,81 @@
  +##
  +##  snmpd-probe -- SNMP Daemon Probe
  +##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  hwProd: Hardware, Product
  +##
  +
  +package My::Probe::hwProd;
  +our @ISA = qw(My::Probe);
  +
  +sub oids ($) {
  +    my ($self) = @_;
  +    return $self->{-ctx}->{-mib}->oids("*.snmpd-probe.host.hardware.hwProd.*");
  +}
  +
  +sub probe ($$) {
  +    my ($self, $obj) = @_;
  +
  +    #   query hardware architecture via uname(1)
  +    my $uname = "uname";
  +    if    ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i)       { $uname = "/usr/bin/uname"; }
  +    elsif ($self->{-ctx}->{-platform}->id() =~ m/(Linux|SunOS)/i) { $uname = "/bin/uname";     }
  +    my $out = $self->{-ctx}->{-sys}->run("$uname -m 2>/dev/null || $uname -p 2>/dev/null", "1d");
  +    my $arch = $out->{-stdout};
  +    $arch =~ s|^\s*(.+?)\s*$|$1|s;
  +
  +    #   provide results
  +    if ($obj->{-name} =~ m|\.hwProdArch$|) {
  +        $obj->{-value} = $arch;
  +    }
  +    elsif ($obj->{-name} =~ m|\.hwProdName$|) {
  +        my $name = "NoName";
  +        if ($self->{-ctx}->{-platform}->id() =~ m/SunOS/i) {
  +            my $out = $self->{-ctx}->{-sys}->run("/usr/platform/`uname -i`/sbin/prtdiag", "1d");
  +            if ($out->{-stdout} =~ m|System\s+Configuration:\s+(.*?)\n|si) {
  +                #  System Configuration:  Sun Microsystems  sun4u Sun (TM) Enterprise 250 (2 X UltraSPARC-II 400MHz)
  +                #  System Configuration:  Sun Microsystems  sun4u Netra t1 (UltraSPARC-IIi 440MHz)
  +                #  System Configuration:  Sun Microsystems  sun4u Sun Ultra 450 (2 X UltraSPARC-II 248MHz)
  +                #  System Configuration:  Sun Microsystems  sun4u Sun Enterprise 420R (2 X UltraSPARC-II 450MHz)
  +                $name = $1;
  +                $name =~ s|\s+$arch||s;
  +                $name =~ s|(Sun Microsystems)\s+Sun|$1|si;
  +                $name =~ s|\s+\(TM\)||si;
  +            }
  +        }
  +        elsif ($arch =~ m/^(i?[3-6x]86|.*(pentium|athlon).*)$/i) {
  +            $name .= "-PC";
  +            if ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i) {
  +                my $out = $self->{-ctx}->{-sys}->run("/sbin/sysctl -n hw.model", "1d");
  +                my $model = $out->{-stdout};
  +                $model =~ s/^\s*(.+?)\s*$/$1/s;
  +                $name .= " ($model)";
  +            }
  +        }
  +        $obj->{-value} = $name;
  +    }
  +    return;
  +}
  +
  +1;
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpd-probe/snmpd-probe.d/swOp.pm
  ============================================================================
  $ cvs diff -u -r0 -r1.1 swOp.pm
  --- /dev/null	2003-09-01 17:22:42.000000000 +0200
  +++ swOp.pm	2003-09-01 17:22:43.000000000 +0200
  @@ -0,0 +1,50 @@
  +##
  +##  snmpd-probe -- SNMP Daemon Probe
  +##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  swOp: Software, OpenPKG
  +##
  +
  +package My::Probe::swOp;
  +our @ISA = qw(My::Probe);
  +
  +sub oids ($) {
  +    my ($self) = @_;
  +    my $oids = [];
  +    push(@{$oids}, @{$self->{-ctx}->{-mib}->oids("*.snmpd-probe.host.software.swOp.swOpVersion")});
  +    foreach my $oid (@{$self->{-ctx}->{-mib}->oids("*.snmpd-probe.host.software.swOp.swOpPkg.*")}) {
  +        push(@{$oids}, $oid.".1");
  +        push(@{$oids}, $oid.".2");
  +        push(@{$oids}, $oid.".3");
  +    }
  +    return $oids;
  +}
  +
  +sub probe ($$) {
  +    my ($self, $obj) = @_;
  +
  +    return;
  +}
  +
  +1;
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpd-probe/snmpd-probe.d/swOs.pm
  ============================================================================
  $ cvs diff -u -r0 -r1.1 swOs.pm
  --- /dev/null	2003-09-01 17:22:42.000000000 +0200
  +++ swOs.pm	2003-09-01 17:22:43.000000000 +0200
  @@ -0,0 +1,55 @@
  +##
  +##  snmpd-probe -- SNMP Daemon Probe
  +##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  swOs: Software, Operating System
  +##
  +
  +package My::Probe::swOs;
  +our @ISA = qw(My::Probe);
  +
  +sub oids ($) {
  +    my ($self) = @_;
  +    return $self->{-ctx}->{-mib}->oids("*.snmpd-probe.host.software.swOs.*");
  +}
  +
  +sub probe ($$) {
  +    my ($self, $obj) = @_;
  +
  +    #   query system via uname(1)
  +    my $uname = "uname";
  +    if    ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i)       { $uname = "/usr/bin/uname"; }
  +    elsif ($self->{-ctx}->{-platform}->id() =~ m/(Linux|SunOS)/i) { $uname = "/bin/uname";     }
  +    my $out1 = $self->{-ctx}->{-sys}->run("$uname -s 2>/dev/null || echo 'Unix'", "1d");
  +    my $out2 = $self->{-ctx}->{-sys}->run("$uname -r 2>/dev/null || $uname -v 2>/dev/null", "1d");
  +    my $name = $out1->{-stdout}; $name =~ s|^\s*(.+?)\s*$|$1|s;
  +    my $vers = $out2->{-stdout}; $vers =~ s|^\s*(.+?)\s*$|$1|s;
  +
  +    #   provide results
  +    if    ($obj->{-name} =~ m|\.swOsName$|)    { $obj->{-value} = $name; }
  +    elsif ($obj->{-name} =~ m|\.swOsVersion$|) { $obj->{-value} = $vers; }
  +    return;
  +}
  +
  +1;
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpd-probe/snmpd-probe.d/sysLoad.pm
  ============================================================================
  $ cvs diff -u -r0 -r1.1 sysLoad.pm
  --- /dev/null	2003-09-01 17:22:42.000000000 +0200
  +++ sysLoad.pm	2003-09-01 17:22:43.000000000 +0200
  @@ -0,0 +1,63 @@
  +##
  +##  snmpd-probe -- SNMP Daemon Probe
  +##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  sysLoad: System Load Average
  +##
  +
  +package My::Probe::sysLoad;
  +our @ISA = qw(My::Probe);
  +
  +sub oids ($) {
  +    my ($self) = @_;
  +    return $self->{-ctx}->{-mib}->oids("*.snmpd-probe.host.system.sysLoad.*");
  +}
  +
  +sub probe ($$) {
  +    my ($self, $obj) = @_;
  +
  +    #   query system via uptime(1)
  +    my $uptime = "uptime";
  +    if ($self->{-ctx}->{-platform}->id() =~ m/(FreeBSD|Linux|SunOS)/i) {
  +        $uptime = "/usr/bin/uptime"
  +    }
  +    my $out = $self->{-ctx}->{-sys}->run($uptime, "1m");
  +
  +    #   parse out details (example outputs follow)
  +    #   FreeBSD: "5:36PM  up 6 days, 54 mins, 9 users, load averages: 0.00, 0.02, 0.00"
  +    #   Linux:   "17:36:50 up 49 days,  8:16,  2 users,  load average: 0.00, 0.00, 0.00"
  +    #   SunOS:   "5:36pm  up 71 day(s),  3:29,  2 users,  load average: 0.16, 0.11, 0.13"
  +    my ($load5, $load10, $load15) = (0, 0, 0);
  +    if ($out->{-stdout} =~ m|load\s+averages?:\s+(\S+),\s+(\S+),\s+(\S+)|si) {
  +        ($load5, $load10, $load15) = ($1, $2, $3);
  +    }
  +
  +    #   provide result
  +    if    ($obj->{-name} =~ m|\.sysLoad5$|)  { $obj->{-value} = sprintf("%d", $load5  * 100); }
  +    elsif ($obj->{-name} =~ m|\.sysLoad10$|) { $obj->{-value} = sprintf("%d", $load10 * 100); }
  +    elsif ($obj->{-name} =~ m|\.sysLoad15$|) { $obj->{-value} = sprintf("%d", $load15 * 100); }
  +    return;
  +}
  +
  +1;
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpd-probe/snmpd-probe.d/sysProc.pm
  ============================================================================
  $ cvs diff -u -r0 -r1.1 sysProc.pm
  --- /dev/null	2003-09-01 17:22:42.000000000 +0200
  +++ sysProc.pm	2003-09-01 17:22:43.000000000 +0200
  @@ -0,0 +1,76 @@
  +##
  +##  snmpd-probe -- SNMP Daemon Probe
  +##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  sysProc: System Process Information
  +##
  +
  +package My::Probe::sysProc;
  +our @ISA = qw(My::Probe);
  +
  +sub oids ($) {
  +    my ($self) = @_;
  +    return $self->{-ctx}->{-mib}->oids("*.snmpd-probe.host.system.sysProc.*");
  +}
  +
  +sub probe ($$) {
  +    my ($self, $obj) = @_;
  +    
  +    if ($obj->{-name} =~ m|\.sysProcMax$|) {
  +        if ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i) {
  +            #   query system via sysctl(8)
  +            my $out = $self->{-ctx}->{-sys}->run("/sbin/sysctl -n kern.maxproc", "1d");
  +            $obj->{-value} = $out->{-stdout};
  +            $obj->{-value} =~ s/^\s*(.+?)\s*$/$1/s;
  +        }
  +        elsif ($self->{-ctx}->{-platform}->id() =~ m/Linux/i) {
  +            #   query system via /proc or sysctl(8)
  +            my $out = $self->{-ctx}->{-sys}->run(
  +                "cat /proc/sys/kernel/threads-max 2>&1 || " .
  +                "/sbin/sysctl kernel/threads-max", "1d");
  +            $obj->{-value} = $out->{-stdout};
  +            $obj->{-value} =~ s/^[^\d]*(\d+).*$/$1/s;
  +        }
  +        elsif ($self->{-ctx}->{-platform}->id() =~ m/SunOS/i) {
  +            #   query system via sysdef(8)
  +            my $out = $self->{-ctx}->{-sys}->run("/usr/sbin/sysdef -i", "1d");
  +            if ($out->{-stdout} =~ m/\s*(\d+)\s+maximum number of processes/s) {
  +                $obj->{-value} = $1;
  +            }
  +        }
  +    }
  +    elsif ($obj->{-name} =~ m|\.sysProcActive$|) {
  +        #   query system via ps(1)
  +        my $ps = "ps";
  +        if    ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i) { $ps = "/bin/ps -ax"; }
  +        elsif ($self->{-ctx}->{-platform}->id() =~ m/Linux/i)   { $ps = "/bin/ps ax";  }
  +        elsif ($self->{-ctx}->{-platform}->id() =~ m/SunOS/i)   { $ps = "/bin/ps -e";  }
  +        my $out = $self->{-ctx}->{-sys}->run($ps, "1m");
  +        my @lines = split(/\n/, $out->{-stdout});
  +        $obj->{-value} = ($#lines+1);
  +    }
  +    return;
  +}
  +
  +1;
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpd-probe/snmpd-probe.d/sysUptime.pm
  ============================================================================
  $ cvs diff -u -r0 -r1.1 sysUptime.pm
  --- /dev/null	2003-09-01 17:22:42.000000000 +0200
  +++ sysUptime.pm	2003-09-01 17:22:43.000000000 +0200
  @@ -0,0 +1,69 @@
  +##
  +##  snmpd-probe -- SNMP Daemon Probe
  +##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  sysUptime: System Uptime
  +##
  +
  +package My::Probe::sysUptime;
  +our @ISA = qw(My::Probe);
  +
  +sub oids ($) {
  +    my ($self) = @_;
  +    return $self->{-ctx}->{-mib}->oids("*.snmpd-probe.host.system.sysUptime");
  +}
  +
  +sub probe ($$) {
  +    my ($self, $obj) = @_;
  +    
  +    #   query system via uptime(1)
  +    my $uptime = "uptime";
  +    if ($self->{-ctx}->{-platform}->id() =~ m/(FreeBSD|Linux|SunOS)/i) {
  +        $uptime = "/usr/bin/uptime"
  +    }
  +    my $out = $self->{-ctx}->{-sys}->run($uptime, "1m");
  +
  +    #   parse out details (example outputs follow)
  +    #   FreeBSD: "5:36PM  up 6 days, 54 mins, 9 users, load averages: 0.00, 0.02, 0.00"
  +    #   Linux:   "17:36:50 up 49 days,  8:16,  2 users,  load average: 0.00, 0.00, 0.00"
  +    #   SunOS:   "5:36pm  up 71 day(s),  3:29,  2 users,  load average: 0.16, 0.11, 0.13"
  +    my ($days, $hours, $mins) = (0, 0, 0);
  +    my $spec = $out->{-stdout};
  +    $spec =~ s|^.*\s+up\s+||s;
  +    $spec =~ s|,\s+\d+\s+users.*$||s;
  +    $spec =~ s/(\d+)\s+day(s|\(s\))?/$days = $1, ''/se;
  +    $spec =~ s/(\d+):(\d{2})/$hours = $1, $mins = $2, ''/se;
  +    $spec =~ s/(\d+)\s+min(s|\(s\))?/$mins = $1, ''/se;
  +
  +    #   provide results
  +    my $t = 0;
  +    $t += ($days  * 24 * 60 * 60);
  +    $t += ($hours *      60 * 60);
  +    $t += ($mins  *           60);
  +    $t *= 100;
  +    $obj->{-value} = $t;
  +    return;
  +}
  +
  +1;
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpd-probe/snmpd-probe.d/sysUser.pm
  ============================================================================
  $ cvs diff -u -r0 -r1.1 sysUser.pm
  --- /dev/null	2003-09-01 17:22:42.000000000 +0200
  +++ sysUser.pm	2003-09-01 17:22:43.000000000 +0200
  @@ -0,0 +1,71 @@
  +##
  +##  snmpd-probe -- SNMP Daemon Probe
  +##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  sysUser: System User Information
  +##
  +
  +package My::Probe::sysUser;
  +our @ISA = qw(My::Probe);
  +
  +sub oids ($) {
  +    my ($self) = @_;
  +    return $self->{-ctx}->{-mib}->oids("*.snmpd-probe.host.system.sysUser.*");
  +}
  +
  +sub probe ($$) {
  +    my ($self, $obj) = @_;
  +    
  +    if ($obj->{-name} =~ m|\.sysUserMax$|) {
  +        if ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i) {
  +            #   query system via sysctl(8)
  +            my $out = $self->{-ctx}->{-sys}->run("/sbin/sysctl -n kern.maxusers", "1d");
  +            $obj->{-value} = $out->{-stdout};
  +            $obj->{-value} =~ s/^\s*(.+?)\s*$/$1/s;
  +        }
  +        elsif ($self->{-ctx}->{-platform}->id() =~ m/Linux/i) {
  +            #   TODO
  +        }
  +        elsif ($self->{-ctx}->{-platform}->id() =~ m/SunOS/i) {
  +            #   TODO
  +        }
  +    }
  +    elsif ($obj->{-name} =~ m|\.sysUserLoggedIn$|) {
  +        #   query system via uptime(1)
  +        #   FreeBSD: "5:36PM  up 6 days, 54 mins, 9 users, load averages: 0.00, 0.02, 0.00"
  +        #   Linux:   "17:36:50 up 49 days,  8:16,  2 users,  load average: 0.00, 0.00, 0.00"
  +        #   SunOS:   "5:36pm  up 71 day(s),  3:29,  2 users,  load average: 0.16, 0.11, 0.13"
  +        my $uptime = "uptime";
  +        if ($self->{-ctx}->{-platform}->id() =~ m/(FreeBSD|Linux|SunOS)/i) {
  +            $uptime = "/usr/bin/uptime"
  +        }
  +        my $out = $self->{-ctx}->{-sys}->run($uptime, "1m");
  +        if ($out->{-stdout} =~ m|\s*(\d+)\s+users|s) {
  +            $obj->{-value} = $1;
  +        }
  +    }
  +    return;
  +}
  +
  +1;
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpd-probe/snmpd-probe.mib/.index
  ============================================================================
  $ cvs diff -u -r0 -r1.1 .index
  --- /dev/null	2003-09-01 17:22:43.000000000 +0200
  +++ .index	2003-09-01 17:22:43.000000000 +0200
  @@ -0,0 +1 @@
  +snmpd-probe snmpd-probe.mib
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpd-probe/snmpd-probe.mib/snmpd-probe.mib
  ============================================================================
  $ cvs diff -u -r0 -r1.1 snmpd-probe.mib
  --- /dev/null	2003-09-01 17:22:43.000000000 +0200
  +++ snmpd-probe.mib	2003-09-01 17:22:44.000000000 +0200
  @@ -0,0 +1,393 @@
  +snmpd-probe DEFINITIONS ::= BEGIN
  +
  +IMPORTS
  +    MODULE-IDENTITY, OBJECT-TYPE, NOTIFICATION-TYPE,
  +    Integer32, Counter32, Gauge32, TimeTicks
  +        FROM SNMPv2-SMI
  +
  +    TEXTUAL-CONVENTION, DisplayString, DateAndTime
  +        FROM SNMPv2-TC
  +
  +    MODULE-COMPLIANCE, OBJECT-GROUP, NOTIFICATION-GROUP
  +        FROM SNMPv2-CONF;
  +
  +org            OBJECT IDENTIFIER ::= { iso 3 } -- iso = 1
  +dod            OBJECT IDENTIFIER ::= { org 6 }
  +internet       OBJECT IDENTIFIER ::= { dod 1 }
  +private        OBJECT IDENTIFIER ::= { internet 4 }
  +enterprises    OBJECT IDENTIFIER ::= { private 1 }
  +
  +cw             OBJECT IDENTIFIER ::= { enterprises 4007 }
  +snmpd-probe    OBJECT IDENTIFIER ::= { cw 42 }
  +
  +host           OBJECT IDENTIFIER ::= { snmpd-probe 1 }
  +hardware       OBJECT IDENTIFIER ::= { host 1 }
  +system         OBJECT IDENTIFIER ::= { host 2 }
  +software       OBJECT IDENTIFIER ::= { host 3 }
  +
  +--
  +--  System Identification
  +--
  +
  +sysId OBJECT IDENTIFIER
  +    ::= { system 1 }
  +
  +sysIdHostid OBJECT-TYPE
  +    SYNTAX      DisplayString
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "unique host identification of system"
  +    ::= { sysId 1 }
  +
  +sysIdHostname OBJECT-TYPE
  +    SYNTAX      DisplayString
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "fully qualified host name of system"
  +    ::= { sysId 2 }
  +
  +--
  +--  System Load Average
  +--
  +
  +sysLoad OBJECT IDENTIFIER
  +    ::= { system 2 }
  +
  +sysLoad5 OBJECT-TYPE
  +    SYNTAX      Gauge32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "load average during last 5 minutes"
  +    ::= { sysLoad 1 }
  +
  +sysLoad10 OBJECT-TYPE
  +    SYNTAX      Gauge32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "load average during last 10 minutes"
  +    ::= { sysLoad 2 }
  +
  +sysLoad15 OBJECT-TYPE
  +    SYNTAX      Gauge32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "load average during last 15 minutes"
  +    ::= { sysLoad 3 }
  +
  +--
  +--  System Processes
  +--
  +
  +sysProc OBJECT IDENTIFIER
  +    ::= { system 3 }
  +
  +sysProcMax OBJECT-TYPE
  +    SYNTAX      Integer32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "number of process contexts maximum possible"
  +    ::= { sysProc 1 }
  +
  +sysProcActive OBJECT-TYPE
  +    SYNTAX      Gauge32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "number of process contexts currently active"
  +    ::= { sysProc 2 }
  +
  +--
  +--  System Users
  +--
  +
  +sysUser OBJECT IDENTIFIER
  +    ::= { system 4 }
  +
  +sysUserMax OBJECT-TYPE
  +    SYNTAX      Integer32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "number of logged in users maximum possible"
  +    ::= { sysUser 1 }
  +
  +sysUserLoggedIn OBJECT-TYPE
  +    SYNTAX      Gauge32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "number of currently logged in users"
  +    ::= { sysUser 2 }
  +
  +--
  +--  System Uptime
  +--
  +
  +sysUptime OBJECT-TYPE
  +    SYNTAX      TimeTicks
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "time (in hundrets of a second) since the system was booted"
  +    ::= { system 5 }
  +
  +--
  +--  Hardware: Product
  +--
  +
  +hwProd OBJECT IDENTIFIER
  +    ::= { hardware 1 }
  +
  +hwProdArch OBJECT-TYPE
  +    SYNTAX      DisplayString
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "name of hardware architecture"
  +    ::= { hwProd 1 }
  +
  +hwProdName OBJECT-TYPE
  +    SYNTAX      DisplayString
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "name of hardware product"
  +    ::= { hwProd 2 }
  +
  +--
  +--  Hardware: CPU
  +--
  +
  +hwCpu OBJECT IDENTIFIER
  +    ::= { hardware 2 }
  +
  +hwCpuNum OBJECT-TYPE
  +    SYNTAX      Integer32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "number of CPUs"
  +    ::= { hwCpu 1 }
  +
  +hwCpuSpeed OBJECT-TYPE
  +    SYNTAX      Integer32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "number of CPUs"
  +    ::= { hwCpu 2 }
  +
  +hwCpuTemp OBJECT-TYPE
  +    SYNTAX      Gauge32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "temperature of CPU"
  +    ::= { hwCpu 3 }
  +
  +--
  +--  Hardware: RAM
  +--
  +
  +hwRam OBJECT IDENTIFIER
  +    ::= { hardware 3 }
  +
  +hwRamMax OBJECT-TYPE
  +    SYNTAX      Gauge32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "maximum available RAM in MB"
  +    ::= { hwRam 1 }
  +
  +hwRamUsed OBJECT-TYPE
  +    SYNTAX      Gauge32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "currently used RAM in MB"
  +    ::= { hwRam 2 }
  +
  +hwRamStatus OBJECT-TYPE
  +    SYNTAX      Integer32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "boolean status of RAM banks"
  +    ::= { hwRam 3 }
  +
  +--
  +--  Hardware: Disk Space
  +--
  +
  +hwDisk OBJECT IDENTIFIER
  +    ::= { hardware 4 }
  +
  +hwDiskMax OBJECT-TYPE
  +    SYNTAX      Gauge32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "maximum available Disk space in MB"
  +    ::= { hwDisk 1 }
  +
  +hwDiskUsed OBJECT-TYPE
  +    SYNTAX      Gauge32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "currently used Disk space in MB"
  +    ::= { hwDisk 2 }
  +
  +hwDiskTemp OBJECT-TYPE
  +    SYNTAX      Gauge32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "temperature of Disks"
  +    ::= { hwDisk 3 }
  +
  +hwDiskStatus OBJECT-TYPE
  +    SYNTAX      Integer32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "boolean status of Disks"
  +    ::= { hwDisk 4 }
  +
  +--
  +--  Hardware: Power Supply
  +--
  +
  +hwPS OBJECT IDENTIFIER
  +    ::= { hardware 5 }
  +
  +hwPSNum OBJECT-TYPE
  +    SYNTAX      Integer32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "number of power supplies"
  +    ::= { hwPS 1 }
  +
  +hwPSTemp OBJECT-TYPE
  +    SYNTAX      Gauge32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "temperature of Power Supply"
  +    ::= { hwPS 2 }
  +
  +hwPSStatus OBJECT-TYPE
  +    SYNTAX      Integer32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "boolean status of Power Supply (0:shutdown, 1:operating: 2:error)"
  +    ::= { hwPS 3 }
  +
  +--
  +--  Hardware: Chassis
  +--
  +
  +hwChassis OBJECT IDENTIFIER
  +    ::= { hardware 6 }
  +
  +hwChassisOpen OBJECT-TYPE
  +    SYNTAX      Integer32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "boolean open/close status of Chassis"
  +    ::= { hwChassis 1 }
  +
  +hwChassisTemp OBJECT-TYPE
  +    SYNTAX      Integer32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "temperature inside Chassis"
  +    ::= { hwChassis 2 }
  +
  +--
  +--  Software: Operating System
  +--
  +
  +swOs OBJECT IDENTIFIER
  +    ::= { software 1 }
  +
  +swOsName OBJECT-TYPE
  +    SYNTAX      DisplayString
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "name of operating system"
  +    ::= { swOs 1 }
  +
  +swOsVersion OBJECT-TYPE
  +    SYNTAX      DisplayString
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "version of operating system"
  +    ::= { swOs 2 }
  +
  +--
  +--  Software: OpenPKG Instances
  +--
  +
  +swOp OBJECT IDENTIFIER
  +    ::= { software 2 }
  +
  +swOpVersion OBJECT-TYPE
  +    SYNTAX      DisplayString
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "OpenPKG instance version"
  +    ::= { swOp 1 }
  +
  +swOpPkgTABLE OBJECT-TYPE
  +    SYNTAX	    SEQUENCE OF SwOpPkgENTRY
  +    MAX-ACCESS  not-accessible
  +    STATUS      current
  +    DESCRIPTION "OpenPKG package table"
  +    ::= { swOp 2 }
  +
  +swOpPkgENTRY OBJECT-TYPE
  +    SYNTAX	    SwOpPkgENTRY
  +    MAX-ACCESS	not-accessible
  +    STATUS	    current
  +    DESCRIPTION "An entry containing a load average and its values."
  +    INDEX	    { swOpPkgIndex }
  +    ::= { swOpPkgTABLE 1 }
  +
  +SwOpPkgENTRY ::= SEQUENCE {
  +    swOpPkgIndex     Integer32,
  +    swOpPkgName      DisplayString,
  +    swOpPkgVersion   DisplayString,
  +    swOpPkgRelease   DisplayString,
  +    swOpPkgBuilt     DateAndTime,
  +    swOpPkgInstalled DateAndTime,
  +}
  +
  +swOpPkgIndex OBJECT-TYPE
  +    SYNTAX	    Integer32
  +    MAX-ACCESS	read-only
  +    STATUS	    current
  +    DESCRIPTION "reference index/row number for each package"
  +    ::= { swOpPkgENTRY 1 }
  +
  +swOpPkgName OBJECT-TYPE
  +    SYNTAX      DisplayString
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "name of package"
  +    ::= { swOpPkgENTRY 2 }
  +
  +swOpPkgVersion OBJECT-TYPE
  +    SYNTAX	    DisplayString
  +    MAX-ACCESS	read-only
  +    STATUS	    current
  +    DESCRIPTION "vendor version of package"
  +    ::= { swOpPkgENTRY 3 }
  +
  +swOpPkgRelease OBJECT-TYPE
  +    SYNTAX	    DisplayString
  +    MAX-ACCESS	read-only
  +    STATUS	    current
  +    DESCRIPTION "OpenPKG release of package"
  +    ::= { swOpPkgENTRY 4 }
  +
  +swOpPkgBuilt OBJECT-TYPE
  +    SYNTAX	    DateAndTime
  +    MAX-ACCESS	read-only
  +    STATUS	    current
  +    DESCRIPTION "time package was built"
  +    ::= { swOpPkgENTRY 5 }
  +
  +swOpPkgInstalled OBJECT-TYPE
  +    SYNTAX	    DateAndTime
  +    MAX-ACCESS	read-only
  +    STATUS	    current
  +    DESCRIPTION "time package was installed"
  +    ::= { swOpPkgENTRY 6 }
  +
  +END
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpd-probe/snmpd-probe.sh
  ============================================================================
  $ cvs diff -u -r0 -r1.1 snmpd-probe.sh
  --- /dev/null	2003-09-01 17:22:42.000000000 +0200
  +++ snmpd-probe.sh	2003-09-01 17:22:42.000000000 +0200
  @@ -0,0 +1,20 @@
  +#!/bin/sh
  +openpkgdir=/cw
  +me="$0"
  +case "$me" in
  +    /*  ) ;;
  +    */* ) me="`pwd`/$me" ;;
  +    *   )
  +        for p in `echo $PATH | sed -e 's/:/ /g'`; do
  +            if [ -x "$p/$me" ]; then
  +                me="$p/$me"
  +                break
  +            fi
  +        done
  +        ;;
  +esac
  +rootdir=`echo $me | sed -e 's;/[^/]*$;;'`
  +$rootdir/snmpd-probe \
  +    -M $rootdir/snmpd-probe.mib:$openpkgdir/share/snmp/mibs \
  +    -P $rootdir/snmpd-probe.d \
  +    -l /tmp/snmpd-probe.log
  @@ .

From ossp-cvs-owner@ossp.org  Mon Sep  1 17:36:58 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BAA8977119; Mon,  1 Sep 2003 17:36:57 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpd-probe/snmpd-probe.d/ swOp.pm
Message-Id: <20030901153657.BAA8977119@mail.ossp.org>
Date: Mon,  1 Sep 2003 17:36:57 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Sep-2003 17:36:57
  Branch: HEAD                             Handle: 2003090116365700

  Modified files:
    ossp-pkg/snmpd-probe/snmpd-probe.d
                            swOp.pm

  Log:
    disable swOp probe until framwork really can handle MIB SEQUENCEs

  Summary:
    Revision    Changes     Path
    1.2         +1  -0      ossp-pkg/snmpd-probe/snmpd-probe.d/swOp.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpd-probe/snmpd-probe.d/swOp.pm
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 swOp.pm
  --- ossp-pkg/snmpd-probe/snmpd-probe.d/swOp.pm	1 Sep 2003 15:22:42 -0000	1.1
  +++ ossp-pkg/snmpd-probe/snmpd-probe.d/swOp.pm	1 Sep 2003 15:36:57 -0000	1.2
  @@ -30,6 +30,7 @@
   
   sub oids ($) {
       my ($self) = @_;
  +    return []; # FIXME
       my $oids = [];
       push(@{$oids}, @{$self->{-ctx}->{-mib}->oids("*.snmpd-probe.host.software.swOp.swOpVersion")});
       foreach my $oid (@{$self->{-ctx}->{-mib}->oids("*.snmpd-probe.host.software.swOp.swOpPkg.*")}) {
  @@ .

From ossp-cvs-owner@ossp.org  Mon Sep  1 17:37:32 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9AA7177141; Mon,  1 Sep 2003 17:37:32 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpd-probe/ snmpd-probe.sh
Message-Id: <20030901153732.9AA7177141@mail.ossp.org>
Date: Mon,  1 Sep 2003 17:37:32 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Sep-2003 17:37:32
  Branch: HEAD                             Handle: 2003090116373200

  Modified files:
    ossp-pkg/snmpd-probe    snmpd-probe.sh

  Log:
    use Perl from same OpenPKG instance

  Summary:
    Revision    Changes     Path
    1.2         +2  -2      ossp-pkg/snmpd-probe/snmpd-probe.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpd-probe/snmpd-probe.sh
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 snmpd-probe.sh
  --- ossp-pkg/snmpd-probe/snmpd-probe.sh	1 Sep 2003 15:22:41 -0000	1.1
  +++ ossp-pkg/snmpd-probe/snmpd-probe.sh	1 Sep 2003 15:37:32 -0000	1.2
  @@ -13,8 +13,8 @@
           done
           ;;
   esac
  -rootdir=`echo $me | sed -e 's;/[^/]*$;;'`
  -$rootdir/snmpd-probe \
  +rootdir=`echo $me | sed -e 's;/[^/]*$;;' | sed -e 's;//*;/;g'`
  +$openpkgdir/bin/perl $rootdir/snmpd-probe \
       -M $rootdir/snmpd-probe.mib:$openpkgdir/share/snmp/mibs \
       -P $rootdir/snmpd-probe.d \
       -l /tmp/snmpd-probe.log
  @@ .

From ossp-cvs-owner@ossp.org  Mon Sep  1 17:37:49 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8D38077119; Mon,  1 Sep 2003 17:37:49 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpd-probe/ Makefile
Message-Id: <20030901153749.8D38077119@mail.ossp.org>
Date: Mon,  1 Sep 2003 17:37:49 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Sep-2003 17:37:49
  Branch: HEAD                             Handle: 2003090116374900

  Modified files:
    ossp-pkg/snmpd-probe    Makefile

  Log:
    fix Makefile

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/snmpd-probe/Makefile
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpd-probe/Makefile
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 Makefile
  --- ossp-pkg/snmpd-probe/Makefile	1 Sep 2003 15:22:41 -0000	1.1
  +++ ossp-pkg/snmpd-probe/Makefile	1 Sep 2003 15:37:49 -0000	1.2
  @@ -3,7 +3,7 @@
   OPENPKG     = /cw
   RC          = $(OPENPKG)/etc/rc
   SNMPGET     = $(OPENPKG)/bin/snmpget
  -SNMPWALK    = $(OPENPKG)/bin/snmpget
  +SNMPWALK    = $(OPENPKG)/bin/snmpwalk
   SNMPHOSTS   = dv1 dv6 dv9
   SNMPMIBDIR  = $(SRCDIR)/snmpd-probe.mib:$(OPENPKG)/share/snmp/mibs
   SNMPMIBNAME = snmpd-probe
  @@ .

From ossp-cvs-owner@ossp.org  Tue Sep  2 09:25:54 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2702B77134; Tue,  2 Sep 2003 09:25:54 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-doc/ accounts.txt
Message-Id: <20030902072554.2702B77134@mail.ossp.org>
Date: Tue,  2 Sep 2003 09:25:54 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Sep-2003 09:25:53
  Branch: HEAD                             Handle: 2003090208255300

  Modified files:
    ossp-pkg/as/as-doc      accounts.txt

  Log:
    add OSSP snmpdx

  Summary:
    Revision    Changes     Path
    1.36        +1  -0      ossp-pkg/as/as-doc/accounts.txt
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-doc/accounts.txt
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 accounts.txt
  --- ossp-pkg/as/as-doc/accounts.txt	10 Jul 2003 14:24:16 -0000	1.35
  +++ ossp-pkg/as/as-doc/accounts.txt	2 Sep 2003 07:25:53 -0000	1.36
  @@ -172,6 +172,7 @@
   R /de/is/dev/prj/ossp/var                 # [I] Project OSSP var
   R /de/is/dev/prj/ossp/xds                 # [I] Project OSSP xds
   R /de/is/dev/prj/ossp/titraq              # [I] Project OSSP titraq
  +R /de/is/dev/prj/ossp/snmpdx              # [I] Project OSSP snmpdx
   
   #   AS
   R /de/is/dev/prj/as                       # [I] Project Accounting System (AS) (general)
  @@ .

From ossp-cvs-owner@ossp.org  Tue Sep  2 09:35:42 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D2F3B77141; Tue,  2 Sep 2003 09:35:41 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT/ modules
Message-Id: <20030902073541.D2F3B77141@mail.ossp.org>
Date: Tue,  2 Sep 2003 09:35:41 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: CVSROOT                          Date:   02-Sep-2003 09:35:41
  Branch: HEAD                             Handle: 2003090208354100

  Modified files:
    CVSROOT                 modules

  Log:
    add OSSP snmpdx

  Summary:
    Revision    Changes     Path
    1.68        +1  -0      CVSROOT/modules
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: CVSROOT/modules
  ============================================================================
  $ cvs diff -u -r1.67 -r1.68 modules
  --- CVSROOT/modules	9 Jul 2003 13:20:38 -0000	1.67
  +++ CVSROOT/modules	2 Sep 2003 07:35:41 -0000	1.68
  @@ -100,6 +100,7 @@
   changelog       ossp-pkg/changelog
   mct             ossp-pkg/mct
   xmldb           ossp-pkg/xmldb
  +snmpdx          ossp-pkg/snmpdx
   
   #   the OSSP applications (third-party)
   cvs             ossp-pkg/cvs
  @@ .

From ossp-cvs-owner@ossp.org  Tue Sep  2 14:12:57 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5F9E97712E; Tue,  2 Sep 2003 14:12:56 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ 00TODO snmpdx snmpdx.cfg snmpdx.sh
Message-Id: <20030902121256.5F9E97712E@mail.ossp.org>
Date: Tue,  2 Sep 2003 14:12:56 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Sep-2003 14:12:55
  Branch: HEAD                             Handle: 2003090213125500

  Added files:
    ossp-pkg/snmpdx         snmpdx.cfg
  Modified files:
    ossp-pkg/snmpdx         00TODO snmpdx
  Removed files:
    ossp-pkg/snmpdx         snmpdx.sh

  Log:
    no more wrapper script needed, because snmpdx now can read from a
    config file

  Summary:
    Revision    Changes     Path
    1.2         +0  -3      ossp-pkg/snmpdx/00TODO
    1.2         +34 -6      ossp-pkg/snmpdx/snmpdx
    1.1         +8  -0      ossp-pkg/snmpdx/snmpdx.cfg
    1.3         +0  -20     ossp-pkg/snmpdx/snmpdx.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/00TODO
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 00TODO
  --- ossp-pkg/snmpdx/00TODO	1 Sep 2003 15:22:41 -0000	1.1
  +++ ossp-pkg/snmpdx/00TODO	2 Sep 2003 12:12:55 -0000	1.2
  @@ -1,7 +1,4 @@
   
  -- suplement command line options with configuration file
  -  (mainly because snmpd(8) does not support passing options)
  -
   - implement more probes [thl]
   
   - support MIB SEQUENCEs [rse]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 snmpdx
  --- ossp-pkg/snmpdx/snmpdx	1 Sep 2003 15:22:41 -0000	1.1
  +++ ossp-pkg/snmpdx/snmpdx	2 Sep 2003 12:12:55 -0000	1.2
  @@ -30,6 +30,7 @@
   require 5;
   use strict;
   use warnings;
  +use FindBin;
   use Getopt::Long;
   use IO;
   
  @@ -464,23 +465,27 @@
   
   package main;
   
  +#   find path to ourself
  +my $myroot    = "$FindBin::Bin";
  +
   #   parameters (defaults)
  +my $config    = "$myroot/snmpdx.cfg";
   my $version   = 0;
   my $help      = 0;
   my $tmpdir    = ($ENV{TMPDIR} || $ENV{TEMPDIR} || "/tmp");
   my $get       = 0;
   my $next      = 0;
   my $bindir    = "/cw/bin";
  -my $probedir  = "./snmpdx.d";
  +my $probedir  = "$myroot/snmpdx.d";
   my $probename = "*";
  -my $mibdir    = "./snmpdx.mib";
  +my $mibdir    = "$myroot/snmpdx.mib";
   my $mibname   = "snmpdx";
  -my $logfile   = "./snmpdx.log";
  +my $logfile   = "$myroot/snmpdx.log";
   my $loglevel  = 9;
   
   #   command line parsing
  -Getopt::Long::Configure("bundling");
  -my $result = GetOptions(
  +my %options = (
  +    'c|config=s'    => \$config,
       'V|version'     => \$version,
       'h|help'        => \$help,
       't|tmpdir=s'    => \$tmpdir,
  @@ -493,10 +498,13 @@
       'm|mibname=s'   => \$mibname,
       'l|logfile=s'   => \$logfile,
       'L|loglevel=i'  => \$loglevel,
  -) || die "option parsing failed";
  +);
  +Getopt::Long::Configure("bundling");
  +my $result = GetOptions(%options) || die "option parsing failed";
   if ($help) {
       print "Usage: $progname [options] [SPECFILE ...]\n" .
             "Available options:\n" .
  +          " -c,--config=PATH    read command line options from configuration fil\n" .
             " -V,--version        print program version\n" .
             " -h,--help           print out this usage page\n" .
             " -t,--tmpdir=PATH    filesystem path to temporary directory\n" .
  @@ -514,6 +522,26 @@
   if ($version) {
       print "$progname $progvers\n";
       exit(0);
  +}
  +
  +#   support external configuration file
  +if (-f $config) {
  +    my $cfg = new IO::File "<$config";
  +    my $line;
  +    while (defined($line = $cfg->getline())) {
  +        $line =~ s|\r?\n$||s;
  +        next if ($line =~ m/^\s*(#.*)?$/s);
  +        my ($option, $value) = ($line =~ m|^\s*(\S+)\s+(.+?)\s*$|s);
  +        die "invalid configuration line \"$line\""
  +            if (not defined($option) or not defined($value));
  +        my ($var) = map  { $options{$_} } 
  +                    grep { $_ =~ m/^.\|\Q$option\E(=[si])?$/s }
  +                    keys(%options);
  +        die "invalid configuration option \"$option\""
  +            if (not defined($var));
  +        ${$var} = $value;
  +    }
  +    $cfg->close;
   }
   
   #   create daemon run-time context
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.cfg
  ============================================================================
  $ cvs diff -u -r0 -r1.1 snmpdx.cfg
  --- /dev/null	2003-09-02 14:12:55.000000000 +0200
  +++ snmpdx.cfg	2003-09-02 14:12:55.000000000 +0200
  @@ -0,0 +1,8 @@
  +##
  +##  snmpdx.cfg -- configuration file for SNMP Daemon Extension
  +##
  +
  +mibdir    /u/rse/wrk/ossp/snmpdx/snmpdx.mib:/cw/share/snmp/mibs
  +probedir  /u/rse/wrk/ossp/snmpdx/snmpdx.d
  +logfile   /tmp/snmpdx-rse.log
  +
  @@ .
  rm -f ossp-pkg/snmpdx/snmpdx.sh <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.sh
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .

From ossp-cvs-owner@ossp.org  Tue Sep  2 14:14:11 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A98E27712E; Tue,  2 Sep 2003 14:14:11 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ 00TODO
Message-Id: <20030902121411.A98E27712E@mail.ossp.org>
Date: Tue,  2 Sep 2003 14:14:11 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Sep-2003 14:14:11
  Branch: HEAD                             Handle: 2003090213141100

  Modified files:
    ossp-pkg/snmpdx         00TODO

  Log:
    we now have a config file instead

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/snmpdx/00TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/00TODO
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 00TODO
  --- ossp-pkg/snmpdx/00TODO	2 Sep 2003 12:12:55 -0000	1.2
  +++ ossp-pkg/snmpdx/00TODO	2 Sep 2003 12:14:11 -0000	1.3
  @@ -5,7 +5,7 @@
   
   - split out MIB parts of each probe into own sub-MIBs
   
  -- Makefile and snmpdx.sh still contains some hard-coded things
  +- Makefile and snmpdx.cfg still contains some hard-coded things
   
   - provide top-level MIB prefix name as variable
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Sep  2 14:19:43 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3396977121; Tue,  2 Sep 2003 14:19:43 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ snmpdx
Message-Id: <20030902121943.3396977121@mail.ossp.org>
Date: Tue,  2 Sep 2003 14:19:43 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Sep-2003 14:19:42
  Branch: HEAD                             Handle: 2003090213194100

  Modified files:
    ossp-pkg/snmpdx         snmpdx

  Log:
    we require a particular Perl from OpenPKG so hard-code path for now
    (sorry)

  Summary:
    Revision    Changes     Path
    1.3         +1  -3      ossp-pkg/snmpdx/snmpdx
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 snmpdx
  --- ossp-pkg/snmpdx/snmpdx	2 Sep 2003 12:12:55 -0000	1.2
  +++ ossp-pkg/snmpdx/snmpdx	2 Sep 2003 12:19:41 -0000	1.3
  @@ -1,6 +1,4 @@
  -#!/bin/sh -- # -*- perl -*-
  -eval 'exec perl -S $0 ${1+"$@"}'
  -    if $running_under_some_shell;
  +#!/cw/bin/perl
   ##
   ##  OSSP snmpdx -- SNMP Daemon Extension
   ##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  @@ .

From ossp-cvs-owner@ossp.org  Tue Sep  2 14:23:09 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 92A8D77121; Tue,  2 Sep 2003 14:23:09 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ 00TODO
Message-Id: <20030902122309.92A8D77121@mail.ossp.org>
Date: Tue,  2 Sep 2003 14:23:09 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Sep-2003 14:23:09
  Branch: HEAD                             Handle: 2003090213230900

  Modified files:
    ossp-pkg/snmpdx         00TODO

  Log:
    remember that -g/-n are still not implemented

  Summary:
    Revision    Changes     Path
    1.4         +2  -0      ossp-pkg/snmpdx/00TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/00TODO
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 00TODO
  --- ossp-pkg/snmpdx/00TODO	2 Sep 2003 12:14:11 -0000	1.3
  +++ ossp-pkg/snmpdx/00TODO	2 Sep 2003 12:23:09 -0000	1.4
  @@ -9,3 +9,5 @@
   
   - provide top-level MIB prefix name as variable
   
  +- support "pass" option from net-snmp's snmpd with -g/-n options
  +
  @@ .

From ossp-cvs-owner@ossp.org  Tue Sep  2 14:35:21 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 70E667712E; Tue,  2 Sep 2003 14:35:21 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ snmpdx
Message-Id: <20030902123521.70E667712E@mail.ossp.org>
Date: Tue,  2 Sep 2003 14:35:21 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Sep-2003 14:35:21
  Branch: HEAD                             Handle: 2003090213352000

  Modified files:
    ossp-pkg/snmpdx         snmpdx

  Log:
    move program information and command line options into context
    structure (so it is available to probes, too)

  Summary:
    Revision    Changes     Path
    1.4         +50 -39     ossp-pkg/snmpdx/snmpdx
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 snmpdx
  --- ossp-pkg/snmpdx/snmpdx	2 Sep 2003 12:19:41 -0000	1.3
  +++ ossp-pkg/snmpdx/snmpdx	2 Sep 2003 12:35:20 -0000	1.4
  @@ -33,8 +33,11 @@
   use IO;
   
   #   program information
  -my $progname = "snmpdx";
  -my $progvers = "0.1.0";
  +my $prg = {
  +    'name'    => 'OSSP snmpdx',
  +    'version' => '0.1.0',
  +    'date'    => '01-Sep-2003'
  +};
   
   ##  _________________________________________________________________________
   ##
  @@ -467,40 +470,42 @@
   my $myroot    = "$FindBin::Bin";
   
   #   parameters (defaults)
  -my $config    = "$myroot/snmpdx.cfg";
  -my $version   = 0;
  -my $help      = 0;
  -my $tmpdir    = ($ENV{TMPDIR} || $ENV{TEMPDIR} || "/tmp");
  -my $get       = 0;
  -my $next      = 0;
  -my $bindir    = "/cw/bin";
  -my $probedir  = "$myroot/snmpdx.d";
  -my $probename = "*";
  -my $mibdir    = "$myroot/snmpdx.mib";
  -my $mibname   = "snmpdx";
  -my $logfile   = "$myroot/snmpdx.log";
  -my $loglevel  = 9;
  +my $opt = {
  +    'config'    => "$myroot/snmpdx.cfg",
  +    'version'   => 0,
  +    'help'      => 0,
  +    'tmpdir'    => ($ENV{TMPDIR} || $ENV{TEMPDIR} || "/tmp"),
  +    'get'       => 0,
  +    'next'      => 0,
  +    'bindir'    => "/cw/bin",
  +    'probedir'  => "$myroot/snmpdx.d",
  +    'probename' => "*",
  +    'mibdir'    => "$myroot/snmpdx.mib",
  +    'mibname'   => "snmpdx",
  +    'logfile'   => "$myroot/snmpdx.log",
  +    'loglevel'  => 9,
  +};
   
   #   command line parsing
   my %options = (
  -    'c|config=s'    => \$config,
  -    'V|version'     => \$version,
  -    'h|help'        => \$help,
  -    't|tmpdir=s'    => \$tmpdir,
  -    'g|get'         => \$get,
  -    'n|next'        => \$next,
  -    'b|bindir=s'    => \$bindir,
  -    'P|probedir=s'  => \$probedir,
  -    'p|probename=s' => \$probename,
  -    'M|mibdir=s'    => \$mibdir,
  -    'm|mibname=s'   => \$mibname,
  -    'l|logfile=s'   => \$logfile,
  -    'L|loglevel=i'  => \$loglevel,
  +    'c|config=s'    => \$opt->{'config'},
  +    'V|version'     => \$opt->{'version'},
  +    'h|help'        => \$opt->{'help'},
  +    't|tmpdir=s'    => \$opt->{'tmpdir'},
  +    'g|get'         => \$opt->{'get'},        # FIXME: still unused!
  +    'n|next'        => \$opt->{'next'},       # FIXME: still unused!
  +    'b|bindir=s'    => \$opt->{'bindir'},
  +    'P|probedir=s'  => \$opt->{'probedir'},
  +    'p|probename=s' => \$opt->{'probename'},
  +    'M|mibdir=s'    => \$opt->{'mibdir'},
  +    'm|mibname=s'   => \$opt->{'mibname'},
  +    'l|logfile=s'   => \$opt->{'logfile'},
  +    'L|loglevel=i'  => \$opt->{'loglevel'},
   );
   Getopt::Long::Configure("bundling");
   my $result = GetOptions(%options) || die "option parsing failed";
  -if ($help) {
  -    print "Usage: $progname [options] [SPECFILE ...]\n" .
  +if ($opt->{'help'}) {
  +    print "Usage: $prg->{'name'} [options] [SPECFILE ...]\n" .
             "Available options:\n" .
             " -c,--config=PATH    read command line options from configuration fil\n" .
             " -V,--version        print program version\n" .
  @@ -517,14 +522,14 @@
             " -L,--loglevel=NUM   logging level (0...9)\n";
       exit(0);
   }
  -if ($version) {
  -    print "$progname $progvers\n";
  +if ($opt->{'version'}) {
  +    print "$prg->{'name'} $prg->{'version'} ($prg->{'date'})\n";
       exit(0);
   }
   
   #   support external configuration file
  -if (-f $config) {
  -    my $cfg = new IO::File "<$config";
  +if (-f $opt->{'config'}) {
  +    my $cfg = new IO::File "<$opt->{'config'}";
       my $line;
       while (defined($line = $cfg->getline())) {
           $line =~ s|\r?\n$||s;
  @@ -544,14 +549,20 @@
   
   #   create daemon run-time context
   my $ctx = {};
  -$ctx->{-log}      = new My::Log ($loglevel, $logfile);
  +$ctx->{-prg}      = $prg;
  +$ctx->{-opt}      = $opt;
  +$ctx->{-log}      = new My::Log ($opt->{'loglevel'}, $opt->{'logfile'});
   $ctx->{-cache}    = new My::Cache;
   $ctx->{-sys}      = new My::System ($ctx->{-log}, $ctx->{-cache});
   $ctx->{-platform} = new My::Platform;
  -$ctx->{-log}->printf(1, "startup %s %s (%s)", $progname, $progvers, $ctx->{-platform}->id());
  -$ctx->{-mib}      = new My::MIB ($bindir, $mibdir, $mibname);
  +$ctx->{-mib}      = new My::MIB ($opt->{'bindir'}, $opt->{'mibdir'}, $opt->{'mibname'});
   $ctx->{-enc}      = new My::Enc;
   
  +#   startup information
  +$ctx->{-log}->printf(1, "startup %s %s (%s) on %s",
  +    $prg->{'name'}, $prg->{'version'}, $prg->{'date'},
  +    $ctx->{-platform}->id());
  +
   #   exception handling support 
   $SIG{__DIE__} = sub {
       my ($err) = @_;
  @@ -597,8 +608,8 @@
       'IpAddress'          => [ 'ipaddress', '0.0.0.0' ],
       'DateAndTime'        => [ 'octet',     $ctx->{-enc}->dat_encode("1970-01-01 01:02:03") ],
   };
  -$ctx->{-log}->printf(1, "MIB id: %s", $mibname);
  -foreach my $probefile (glob("$probedir/$probename.pm")) {
  +$ctx->{-log}->printf(1, "MIB id: %s", $opt->{'mibname'});
  +foreach my $probefile (glob($opt->{'probedir'}."/".$opt->{'probename'}.".pm")) {
       my $probe = $probefile;
       $probe =~ s|^.*/([^/]+)\.pm$|$1|sg;
       my $p;
  @@ .

From ossp-cvs-owner@ossp.org  Tue Sep  2 14:39:21 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D26067712E; Tue,  2 Sep 2003 14:39:20 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ snmpdx
Message-Id: <20030902123920.D26067712E@mail.ossp.org>
Date: Tue,  2 Sep 2003 14:39:20 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Sep-2003 14:39:20
  Branch: HEAD                             Handle: 2003090213392000

  Modified files:
    ossp-pkg/snmpdx         snmpdx

  Log:
    provide architecture and os also separately and use attach os version
    directly

  Summary:
    Revision    Changes     Path
    1.5         +11 -2      ossp-pkg/snmpdx/snmpdx
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 snmpdx
  --- ossp-pkg/snmpdx/snmpdx	2 Sep 2003 12:35:20 -0000	1.4
  +++ ossp-pkg/snmpdx/snmpdx	2 Sep 2003 12:39:20 -0000	1.5
  @@ -254,10 +254,19 @@
       return;
   }
   
  +sub arch ($) {
  +    my ($self) = @_;
  +    return $self->{-machine};
  +}
  +
  +sub os ($) {
  +    my ($self) = @_;
  +    return sprintf("%s%s", $self->{-system}, $self->{-release});
  +}
  +
   sub id ($) {
       my ($self) = @_;
  -    return sprintf("%s-%s-%s", 
  -        $self->{-machine}, $self->{-system}, $self->{-release});
  +    return sprintf("%s-%s%s", $self->{-machine}, $self->{-system}, $self->{-release});
   }
   
   ##  _________________________________________________________________________
  @@ .

From ossp-cvs-owner@ossp.org  Tue Sep  2 14:40:29 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 191A47712E; Tue,  2 Sep 2003 14:40:29 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ 00TODO
Message-Id: <20030902124029.191A47712E@mail.ossp.org>
Date: Tue,  2 Sep 2003 14:40:29 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Sep-2003 14:40:29
  Branch: HEAD                             Handle: 2003090213402800

  Modified files:
    ossp-pkg/snmpdx         00TODO

  Log:
    MIB name now available to probes through context

  Summary:
    Revision    Changes     Path
    1.5         +0  -2      ossp-pkg/snmpdx/00TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/00TODO
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 00TODO
  --- ossp-pkg/snmpdx/00TODO	2 Sep 2003 12:23:09 -0000	1.4
  +++ ossp-pkg/snmpdx/00TODO	2 Sep 2003 12:40:28 -0000	1.5
  @@ -7,7 +7,5 @@
   
   - Makefile and snmpdx.cfg still contains some hard-coded things
   
  -- provide top-level MIB prefix name as variable
  -
   - support "pass" option from net-snmp's snmpd with -g/-n options
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Sep  2 14:41:09 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 76C587712E; Tue,  2 Sep 2003 14:41:09 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ 00TODO
Message-Id: <20030902124109.76C587712E@mail.ossp.org>
Date: Tue,  2 Sep 2003 14:41:09 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Sep-2003 14:41:09
  Branch: HEAD                             Handle: 2003090213410900

  Modified files:
    ossp-pkg/snmpdx         00TODO

  Log:
    differenciate between the todos

  Summary:
    Revision    Changes     Path
    1.6         +6  -3      ossp-pkg/snmpdx/00TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/00TODO
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 00TODO
  --- ossp-pkg/snmpdx/00TODO	2 Sep 2003 12:40:28 -0000	1.5
  +++ ossp-pkg/snmpdx/00TODO	2 Sep 2003 12:41:09 -0000	1.6
  @@ -1,11 +1,14 @@
   
  -- implement more probes [thl]
  +TODO
  +====
   
  +- implement more probes [thl]
   - support MIB SEQUENCEs [rse]
   
  -- split out MIB parts of each probe into own sub-MIBs
  +CANDO
  +=====
   
  +- split out MIB parts of each probe into own sub-MIBs
   - Makefile and snmpdx.cfg still contains some hard-coded things
  -
   - support "pass" option from net-snmp's snmpd with -g/-n options
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Sep  2 17:36:19 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 08F9D7712E; Tue,  2 Sep 2003 17:36:18 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ snmpdx
Message-Id: <20030902153618.08F9D7712E@mail.ossp.org>
Date: Tue,  2 Sep 2003 17:36:18 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Sep-2003 17:36:18
  Branch: HEAD                             Handle: 2003090216361800

  Modified files:
    ossp-pkg/snmpdx         snmpdx

  Log:
    add initial support to framework for MIB SEQUENCEs

  Summary:
    Revision    Changes     Path
    1.6         +171 -58    ossp-pkg/snmpdx/snmpdx
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 snmpdx
  --- ossp-pkg/snmpdx/snmpdx	2 Sep 2003 12:39:20 -0000	1.5
  +++ ossp-pkg/snmpdx/snmpdx	2 Sep 2003 15:36:18 -0000	1.6
  @@ -476,7 +476,7 @@
   package main;
   
   #   find path to ourself
  -my $myroot    = "$FindBin::Bin";
  +my $myroot = "$FindBin::Bin";
   
   #   parameters (defaults)
   my $opt = {
  @@ -493,6 +493,7 @@
       'mibname'   => "snmpdx",
       'logfile'   => "$myroot/snmpdx.log",
       'loglevel'  => 9,
  +    'strict'    => 0,
   };
   
   #   command line parsing
  @@ -510,6 +511,7 @@
       'm|mibname=s'   => \$opt->{'mibname'},
       'l|logfile=s'   => \$opt->{'logfile'},
       'L|loglevel=i'  => \$opt->{'loglevel'},
  +    's|strict'      => \$opt->{'strict'},
   );
   Getopt::Long::Configure("bundling");
   my $result = GetOptions(%options) || die "option parsing failed";
  @@ -528,7 +530,8 @@
             " -M,--mibdir=PATH    path to MIB directory\n" .
             " -m,--mibname=MIB    the name of the MIB to act under\n" .
             " -l,--logfile=PATH   path to daemon logfile\n" .
  -          " -L,--loglevel=NUM   logging level (0...9)\n";
  +          " -L,--loglevel=NUM   logging level (0...9)\n" .
  +          " -s,--strict         strict processing of unknown values\n";
       exit(0);
   }
   if ($opt->{'version'}) {
  @@ -604,6 +607,7 @@
   #   load probes and determine their handled OIDs
   my $oidtable   = [];
   my $oidhandler = {};
  +my $oidprobe   = {};
   my $oidtype    = {
       'DisplayString'      => [ 'string',    'N.A.'    ],
       'Integer32'          => [ 'integer',   '-1'      ],
  @@ -630,12 +634,13 @@
           die if ($@);
       };
       if ($@) {
  -        die "invalid probe \"$probe\"";
  +        die "invalid probe \"$probe\": $@";
       }
       $ctx->{-log}->printf(2, "Probe: \"%s\"", $probe);
       foreach my $oid (sort(@{$p->oids()})) {
           push(@{$oidtable}, $oid);
           $oidhandler->{$oid} = $p;
  +        $oidprobe->{$oid} = $probe;
           $ctx->{-log}->printf(1, "MIB OID: %s [%s] ::= %s (%s)",
               $oid, $ctx->{-mib}->oid2name($oid),
               $ctx->{-mib}->oid2type($oid),
  @@ -665,111 +670,219 @@
       $ctx->{-log}->printf(4, "IO: recv: << \"%s\\n\"", $cmd);
   
       if ($cmd =~ m/^PING$/i) {
  +        #
           #   the PING/PONG protocol part
  +        #
           $ctx->{-log}->printf(4, "IO: send: >> \"PONG\\n\"");
           $stdout->printf("PONG\n");
       }
  +
       elsif ($cmd =~ m/^GET$/i or $cmd =~ m/^GETNEXT$/i) {
  +        #
           #   the GET/GETNEXT protocol part
  +        #
  +
  +        #   read requested OID
           my $error = 1;
  -        my $oid = $stdin->getline;
  -        if (not defined($oid)) {
  +        my $oid_request = $stdin->getline;
  +        if (not defined($oid_request)) {
               $ctx->{-log}->printf(1, "ERROR: EOF instead of OID");
               goto ERROR;
           }
  -        $oid =~ s|\n?$||s;
  -        $ctx->{-log}->printf(4, "IO: recv: << \"%s\\n\"", $oid);
  -        if ($oid !~ m/^(\.\d+)+$/) {
  -            $ctx->{-log}->printf(1, "ERROR: invalid query OID \"%s\"", $oid);
  +        $oid_request =~ s|\n?$||s;
  +        $ctx->{-log}->printf(4, "IO: recv: << \"%s\\n\"", $oid_request);
  +        if ($oid_request !~ m/^(\.\d+)+$/) {
  +            $ctx->{-log}->printf(1, "ERROR: invalid query OID \"%s\"", $oid_request);
               goto ERROR;
           }
  -        my $oid_table = undef;
  -        if ($cmd =~ m/^GETNEXT$/i) {
  -            my $oid_parent = $oid;
  -            $oid_parent =~ s|(\.\d+)$||s;
  +
  +        #  re-entry point for OID processing
  +        my $oid_search = $oid_request;
  +        RETRY:
  +
  +        #   determine acted/handled OID
  +        my $oid_action  = undef;
  +        my $oid_handled = undef;
  +        my $oid_handler = undef;
  +        my $oid_next    = undef;
  +        if ($cmd =~ m/^GET$/i) {
  +            #   search for explicitly handled OID
               for (my $i = 0; defined($oidtable->[$i]); $i++) {
  -                if ($oidtable->[$i] =~ m|^\Q$oid\E(\.\d+)+$|) {
  -                    #   OID start with requested OID prefix, so use this OID
  -                    $oid = $oidtable->[$i];
  +                if ($oidtable->[$i] eq $oid_search) {
  +                    $oid_action  = $oidtable->[$i];
  +                    $oid_handled = $oidtable->[$i];
                       last;
                   }
  -                elsif ($oidtable->[$i] eq $oid) {
  +            }
  +            #   search for implicitly handled OID (sequence element)
  +            if (not defined($oid_handled)) {
  +                my $oid_parent = $oid_search;
  +                $oid_parent =~ s|(\.\d+)$||s;
  +                for (my $i = 0; defined($oidtable->[$i]); $i++) {
  +                    if ($oidtable->[$i] =~ m|^\Q$oid_parent\E\.#$|) {
  +                        $oid_action  = $oid_search;
  +                        $oid_handled = $oidtable->[$i];
  +                        last;
  +                    }
  +                }
  +            }
  +        }
  +        elsif ($cmd =~ m/^GETNEXT$/i) {
  +            #   search for explicitly handled OID
  +            for (my $i = 0; defined($oidtable->[$i]); $i++) {
  +                if ($oidtable->[$i] =~ m|^\Q$oid_search\E(\.\d+)+$|) {
  +                    #   OID starts with requested OID prefix, so use this OID
  +                    $oid_action  = $oidtable->[$i];
  +                    $oid_handled = $oidtable->[$i];
  +                    $oid_next    = $oidtable->[$i+1];
  +                    last;
  +                }
  +                elsif ($oidtable->[$i] eq $oid_search) {
                       #   OID is the requested OID exactly, so use next OID
                       if (defined($oidtable->[$i+1])) {
  -                        $oid = $oidtable->[$i+1];
  +                        $oid_action  = $oidtable->[$i+1];
  +                        $oid_action  =~ s|\.#$|.1|s;
  +                        $oid_handled = $oidtable->[$i+1];
  +                        $oid_next    = $oidtable->[$i+2];
                           last;
                       }
                       else {
  -                        goto ERROR; # end-of-MIB case
  +                        goto ERROR; # end-of-MIB
                       }
                   }
  -                elsif ($oidtable->[$i] =~ m|^\Q$oid\E(\.\d+)*(\.#)$|) {
  -                    #   OID start with requested OID prefix, so use this OID (special case of table)
  -                    $oid = $oidtable->[$i];
  -                    $oid =~ s|\.#$|.1|s;
  -                    last;
  -                }
  -                elsif ($oidtable->[$i] =~ m|^\Q$oid_parent\E\.#$|) {
  -                    #   OID is the a requested OID of a table, so use next OID in table
  -                    $oid = s|\.(\d+)$|".".($1+1)|se;
  -                    $oid_table = $oidtable->[$i+1];
  -                    $oid =~ s|\.#$|.1|s;
  -                    last;
  +            }
  +            #   search for implicitly handled OID (sequence element)
  +            if (not defined($oid_handled)) {
  +                my $oid_parent = $oid_search;
  +                $oid_parent =~ s|(\.\d+)$||s;
  +                for (my $i = 0; defined($oidtable->[$i]); $i++) {
  +                    #   search for implicitly handled OID (sequence element)
  +                    if ($oidtable->[$i] =~ m|^\Q$oid_search\E(\.\d+)*\.#$|) {
  +                        #   OID start with requested OID prefix, so use first OID in sequence
  +                        $oid_action  = $oidtable->[$i];
  +                        $oid_action  =~ s|\.#$|.1|s;
  +                        $oid_handled = $oidtable->[$i];
  +                        $oid_next    = $oidtable->[$i+1];
  +                        last;
  +                    }
  +                    elsif ($oidtable->[$i] =~ m|^\Q$oid_parent\E\.#$|) {
  +                        #   OID is the requested OID of a sequence exactly, so use next OID in sequence
  +                        $oid_action  = $oid_search;
  +                        $oid_action  =~ s|\.(\d+)$|".".($1+1)|se;
  +                        $oid_handled = $oidtable->[$i];
  +                        $oid_next    = $oidtable->[$i+1];
  +                        last;
  +                    }
                   }
               }
           }
  -        TABLE_NEXT:
  -        my $oid_wild = $oid;
  -        my $handler = $oidhandler->{$oid};
  -        if (not defined($handler)) {
  -            $oid_wild =~ s|(\.\d+)$|.#|s;
  -            $handler = $oidhandler->{$oid_wild};
  +        if (defined($oid_handled)) {
  +            $oid_handler = $oidhandler->{$oid_handled};
           }
  -        if (not defined($handler)) {
  -            $ctx->{-log}->printf(1, "ERROR: no handler found for OID \"%s\"", $oid);
  -            goto ERROR;
  +        else {
  +            $ctx->{-log}->printf(1, "ERROR: no handler found for OID \"%s\"", $oid_request);
  +            goto ERROR; # end-of-MIB
           }
  +
  +        #   prepare probe request object
           my $obj = {
  -            -oid   => $oid,
  -            -name  => $ctx->{-mib}->oid2name($oid_wild),
  -            -type  => $ctx->{-mib}->oid2type($oid_wild),
  +            -oid   => $oid_action,
  +            -name  => $ctx->{-mib}->oid2name($oid_handled),
  +            -type  => $ctx->{-mib}->oid2type($oid_handled),
               -value => undef
           };
  -        $handler->probe($obj);
  +
  +        #   provide mixed name/OID for sequence index
  +        if ($obj->{-name} =~ m|\.#$|) {
  +            my ($idx) = ($obj->{-oid} =~ m|\.(\d+)$|);
  +            $obj->{-name} =~ s|\.#$|.$idx|;
  +        }
  +
  +        #   probe value of OID
  +        $ctx->{-log}->printf(2, "probing \"%s\" for OID \"%s\"", $oidprobe->{$oid_handled}, $oid_action);
  +        $oid_handler->probe($obj);
  +
  +        #   handle special "end of sequence" situation
  +        #if (not defined($obj->{-value}) and $oid_handled =~ m|\.#$|) {
  +        #    if (defined($oid_next)) {
  +        #        $oid_search = $oid_next;
  +        #        $oid_search =~ s|\.#$||s;
  +        #        goto RETRY;
  +        #    }
  +        #    else {
  +        #        goto ERROR; # end-of-MIB
  +        #    }
  +        #}
  +
  +        #   handle special "unknown OID value" situation
           if (not defined($obj->{-value})) {
  -            if (defined($oid_table)) {
  -                #   end of table entry
  -                $oid = $oid_table;
  -                goto TABLE_NEXT;
  +            $ctx->{-log}->printf(1, "WARNING: handler was unable to provide probe value for OID \"%s\"", $oid_request);
  +            if ($opt->{'strict'}) {
  +                #   strict processing: return ERROR on unknown value
  +                #   for GET request and skip unknown OIDs on GETNEXT.
  +                if ($cmd =~ m/^GET$/i) {
  +                    goto ERROR; # no-value
  +                }
  +                else { # GETNEXT
  +                    if (defined($oid_next)) {
  +                        $oid_search = $oid_next;
  +                        $oid_search =~ s|\.#$||s;
  +                        goto RETRY;
  +                    }
  +                    else {
  +                        goto ERROR; # no-value
  +                    }
  +                }
  +            }
  +            else {
  +                #   non-strict processing: return a reasonable default value
  +                if ($oid_handled =~ m|\.#$|) {
  +                    if ($oid_action =~ m|\.1$|) {
  +                        $obj->{-value} = $oidtype->{$obj->{-type}}->[1];
  +                    }
  +                    else {
  +                        if (defined($oid_next)) {
  +                            $oid_search = $oid_next;
  +                            $oid_search =~ s|\.#$||s;
  +                            goto RETRY;
  +                        }
  +                        else {
  +                            goto ERROR; # end-of-MIB
  +                        }
  +                    }
  +                }
  +                else {
  +                    $obj->{-value} = $oidtype->{$obj->{-type}}->[1];
  +                }
               }
  -            #$ctx->{-log}->printf(1, "ERROR: handler was unable to provide probe value for OID \"%s\"", $oid);
  -            #goto ERROR;
  -            $ctx->{-log}->printf(1, "WARNING: handler was unable to provide probe value for OID \"%s\"", $oid);
  -            $obj->{-value} = $oidtype->{$obj->{-type}}->[1];
           }
  +
  +        #   optionally encode value to conform to snmpd(8) protocol
           if ($oidtype->{$obj->{-type}}->[0] =~ m/^(octet|opaque)$/) {
               $obj->{-value} = $ctx->{-enc}->octet_encode($obj->{-value});
           }
  +
  +        #   return result
           $ctx->{-log}->printf(1, "QUERY: %s [%s] ::= %s \"%s\"",
               $obj->{-name}, $obj->{-oid}, $obj->{-type}, $obj->{-value});
           $stdout->printf("%s\n%s\n%s\n",
               $obj->{-oid}, $oidtype->{$obj->{-type}}->[0], $obj->{-value});
           $ctx->{-log}->printf(4, "IO: send: >> \"%s\\n%s\\n%s\\n\"",
               $obj->{-oid}, $oidtype->{$obj->{-type}}->[0], $obj->{-value});
  -        $error = 0;
   
  +        #   end-of-MIB or no-value handling
  +        $error = 0;
           if ($error) {
  -            #   end-of-MIB or error
               ERROR:
               $ctx->{-log}->printf(4, "IO: send: >> \"NONE\\n\"");
               $stdout->printf("NONE\n");
           }
       }
       else {
  -        #   for anything else (not expected) just send 
  -        #   something in case snmpd expects something.
  -        $ctx->{-log}->printf(4, "IO: send: >> \"\"");
  -        $stdout->printf("\n");
  +        #   for anything else (not expected) just send at least
  +        #   "NONE" in case snmpd(8) expects something.
  +        $ctx->{-log}->printf(4, "IO: send: >> \"NONE\\n\"");
  +        $stdout->printf("NONE\n");
       }
   }
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Sep  2 17:37:27 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E2CB27712E; Tue,  2 Sep 2003 17:37:26 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/snmpdx.d/ swOp.pm
Message-Id: <20030902153726.E2CB27712E@mail.ossp.org>
Date: Tue,  2 Sep 2003 17:37:26 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Sep-2003 17:37:26
  Branch: HEAD                             Handle: 2003090216372600

  Modified files:
    ossp-pkg/snmpdx/snmpdx.d
                            swOp.pm

  Log:
    use new MIB SEQUENCE support in framework to provide initial OpenPKG
    RPM instance information

  Summary:
    Revision    Changes     Path
    1.3         +61 -9      ossp-pkg/snmpdx/snmpdx.d/swOp.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/swOp.pm
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 swOp.pm
  --- ossp-pkg/snmpdx/snmpdx.d/swOp.pm	1 Sep 2003 15:36:57 -0000	1.2
  +++ ossp-pkg/snmpdx/snmpdx.d/swOp.pm	2 Sep 2003 15:37:26 -0000	1.3
  @@ -30,20 +30,72 @@
   
   sub oids ($) {
       my ($self) = @_;
  -    return []; # FIXME
  -    my $oids = [];
  -    push(@{$oids}, @{$self->{-ctx}->{-mib}->oids("*.snmpdx.host.software.swOp.swOpVersion")});
  -    foreach my $oid (@{$self->{-ctx}->{-mib}->oids("*.snmpdx.host.software.swOp.swOpPkg.*")}) {
  -        push(@{$oids}, $oid.".1");
  -        push(@{$oids}, $oid.".2");
  -        push(@{$oids}, $oid.".3");
  -    }
  -    return $oids;
  +    return $self->{-ctx}->{-mib}->oids("*.snmpdx.host.software.swOp.*");
   }
   
   sub probe ($$) {
       my ($self, $obj) = @_;
   
  +    #   query details via rpm(1)
  +    my $out = $self->{-ctx}->{-sys}->run(
  +        "xrpm -qa --qf '[%{NAME} %{VERSION} %{RELEASE} %{BUILDTIME} %{INSTALLTIME}\\n]'", "10m");
  +
  +    #   parse details into internal structure
  +    my $pkg = [];
  +    foreach my $entry (sort(split(/\n/, $out->{-stdout}))) {
  +        my ($p_n, $p_v, $p_r, $p_bt, $p_it) = split(/\s+/, $entry);
  +        my $p = { -name => $p_n, -version => $p_v, -release => $p_r, -built => $p_bt, -installed => $p_it };
  +        push(@{$pkg}, $p);
  +    }
  +
  +    #   provide result
  +    $self->{-ctx}->{-log}->printf(4, "name=%s", $obj->{-name});
  +    if ($obj->{-name} =~ m|\.swOpVersion$|) {
  +        #   OpenPKG instance *main* version
  +        my %release = ();
  +        foreach my $p (@{$pkg}) {
  +            my $r = $p->{-release};
  +            $r =~ s|^(\d+\.d+)\.\d+$|$1|s;
  +            $r =~ s|^\d{8}$|CURRENT|s;
  +            $release{$r}++;
  +        }
  +        my $release = (reverse sort { $release{$a} <=> $release{$b} } keys(%release))[0];
  +        $obj->{-value} = "OpenPKG-$release";
  +    }
  +    elsif ($obj->{-name} =~ m|\.swOpPkgENTRY\.([^.]+)\.(\d+)$|) {
  +        #   OpenPKG package list
  +        my $col = $1;
  +        my $row = ($2 > 0 ? $2 - 1 : 0);
  +        $self->{-ctx}->{-log}->printf(4, "col=%s row=%s", $col, $row);
  +        if (defined($pkg->[$row])) {
  +            if ($col eq 'swOpPkgIndex') {
  +                $obj->{-value} = $row;
  +            }
  +            elsif ($col eq 'swOpPkgName') {
  +                $obj->{-value} = $pkg->[$row]->{-name};
  +            }
  +            elsif ($col eq 'swOpPkgVersion') {
  +                $obj->{-value} = $pkg->[$row]->{-version};
  +            }
  +            elsif ($col eq 'swOpPkgRelease') {
  +                $obj->{-value} = $pkg->[$row]->{-release};
  +            }
  +            elsif ($col eq 'swOpPkgBuilt') {
  +                local ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) =
  +                    localtime($pkg->[$row]->{-built});
  +                $obj->{-value} = $self->{-ctx}->{-enc}->dat_encode(
  +                    sprintf("%04d-%02d-%02d %02d:%02d:%02d",
  +                        $year+1900, $mon+1, $mday, $hour, $min, $sec));
  +            }
  +            elsif ($col eq 'swOpPkgInstalled') {
  +                local ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) =
  +                    localtime($pkg->[$row]->{-installed});
  +                $obj->{-value} = $self->{-ctx}->{-enc}->dat_encode(
  +                    sprintf("%04d-%02d-%02d %02d:%02d:%02d",
  +                        $year+1900, $mon+1, $mday, $hour, $min, $sec));
  +            }
  +        }
  +    }
       return;
   }
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Sep  2 20:08:51 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F03807714F; Tue,  2 Sep 2003 20:08:50 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ 00TODO
Message-Id: <20030902180850.F03807714F@mail.ossp.org>
Date: Tue,  2 Sep 2003 20:08:50 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Sep-2003 20:08:50
  Branch: HEAD                             Handle: 2003090219085000

  Modified files:
    ossp-pkg/snmpdx         00TODO

  Log:
    now done

  Summary:
    Revision    Changes     Path
    1.7         +0  -1      ossp-pkg/snmpdx/00TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/00TODO
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 00TODO
  --- ossp-pkg/snmpdx/00TODO	2 Sep 2003 12:41:09 -0000	1.6
  +++ ossp-pkg/snmpdx/00TODO	2 Sep 2003 18:08:50 -0000	1.7
  @@ -3,7 +3,6 @@
   ====
   
   - implement more probes [thl]
  -- support MIB SEQUENCEs [rse]
   
   CANDO
   =====
  @@ .

From ossp-cvs-owner@ossp.org  Tue Sep  2 20:34:28 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 22CB47714F; Tue,  2 Sep 2003 20:34:27 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/snmpdx.d/ swOp.pm
Message-Id: <20030902183427.22CB47714F@mail.ossp.org>
Date: Tue,  2 Sep 2003 20:34:27 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Sep-2003 20:34:27
  Branch: HEAD                             Handle: 2003090219342700

  Modified files:
    ossp-pkg/snmpdx/snmpdx.d
                            swOp.pm

  Log:
    Ops, I comitted the test typo

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/snmpdx/snmpdx.d/swOp.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/swOp.pm
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 swOp.pm
  --- ossp-pkg/snmpdx/snmpdx.d/swOp.pm	2 Sep 2003 15:37:26 -0000	1.3
  +++ ossp-pkg/snmpdx/snmpdx.d/swOp.pm	2 Sep 2003 18:34:27 -0000	1.4
  @@ -38,7 +38,7 @@
   
       #   query details via rpm(1)
       my $out = $self->{-ctx}->{-sys}->run(
  -        "xrpm -qa --qf '[%{NAME} %{VERSION} %{RELEASE} %{BUILDTIME} %{INSTALLTIME}\\n]'", "10m");
  +        "rpm -qa --qf '[%{NAME} %{VERSION} %{RELEASE} %{BUILDTIME} %{INSTALLTIME}\\n]'", "10m");
   
       #   parse details into internal structure
       my $pkg = [];
  @@ .

From ossp-cvs-owner@ossp.org  Tue Sep  2 20:37:05 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2ACBF7714F; Tue,  2 Sep 2003 20:37:05 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/snmpdx.d/ swOp.pm
Message-Id: <20030902183705.2ACBF7714F@mail.ossp.org>
Date: Tue,  2 Sep 2003 20:37:05 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Sep-2003 20:37:05
  Branch: HEAD                             Handle: 2003090219370400

  Modified files:
    ossp-pkg/snmpdx/snmpdx.d
                            swOp.pm

  Log:
    ignore GnuPG public keys as seen under RPM 4.2.1

  Summary:
    Revision    Changes     Path
    1.5         +1  -0      ossp-pkg/snmpdx/snmpdx.d/swOp.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/swOp.pm
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 swOp.pm
  --- ossp-pkg/snmpdx/snmpdx.d/swOp.pm	2 Sep 2003 18:34:27 -0000	1.4
  +++ ossp-pkg/snmpdx/snmpdx.d/swOp.pm	2 Sep 2003 18:37:04 -0000	1.5
  @@ -44,6 +44,7 @@
       my $pkg = [];
       foreach my $entry (sort(split(/\n/, $out->{-stdout}))) {
           my ($p_n, $p_v, $p_r, $p_bt, $p_it) = split(/\s+/, $entry);
  +        next if ($p_n eq 'gpg-key');
           my $p = { -name => $p_n, -version => $p_v, -release => $p_r, -built => $p_bt, -installed => $p_it };
           push(@{$pkg}, $p);
       }
  @@ .

From ossp-cvs-owner@ossp.org  Wed Sep  3 11:22:05 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C83FD77119; Wed,  3 Sep 2003 11:22:04 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/snmpdx.d/ sysVM.pm ossp-pkg/snmpdx/snmpdx....
Message-Id: <20030903092204.C83FD77119@mail.ossp.org>
Date: Wed,  3 Sep 2003 11:22:04 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Sep-2003 11:22:04
  Branch: HEAD                             Handle: 2003090310220301

  Added files:
    ossp-pkg/snmpdx/snmpdx.d
                            sysVM.pm
  Modified files:
    ossp-pkg/snmpdx/snmpdx.mib
                            snmpdx.mib

  Log:
    merge RAM and Swap into sysVM and start initial probe for it

  Summary:
    Revision    Changes     Path
    1.1         +56 -0      ossp-pkg/snmpdx/snmpdx.d/sysVM.pm
    1.2         +66 -18     ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/sysVM.pm
  ============================================================================
  $ cvs diff -u -r0 -r1.1 sysVM.pm
  --- /dev/null	2003-09-03 11:22:03.000000000 +0200
  +++ sysVM.pm	2003-09-03 11:22:04.000000000 +0200
  @@ -0,0 +1,56 @@
  +##
  +##  snmpdx -- SNMP Daemon Extension
  +##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  sysVM: System Vritual Memory
  +##
  +
  +package My::Probe::sysVM;
  +our @ISA = qw(My::Probe);
  +
  +sub oids ($) {
  +    my ($self) = @_;
  +    return $self->{-ctx}->{-mib}->oids("*.snmpdx.host.system.sysVM.*");
  +}
  +
  +sub probe ($$) {
  +    my ($self, $obj) = @_;
  +
  +    #               FreeBSD                Linux                                          Solaris
  +    #Mem Total      sysctl -n hw.physmem   /proc/meminfo:MemTotal                         /usr/platform/`uname -i`/sbin/prtdiag:Memory size
  +    #Mem Used       vmstat: avm            /proc/meminfo:MemTotal-Buffers-Cached-MemFree  "total" - "free"
  +    #Mem Free       "total"-"used"         "total"-"used"                                 sar -r  1 1: freemem * `pagesize`
  +    #Mem Status     N.A.                   N.A.                                           /usr/platform/`uname -i`/sbin/prtdiag:Status col. 
  +    #
  +    #Swap Total     swapinfo -k | tail -1  /proc/meminfo:SwapTotal                        swap -l: blocks * 512 (accumulate)
  +    #Swap Used      swapinfo -k | tail -1  "total" - "free"                               "total"-"free"
  +    #Swap Free      "total"-"used"         /proc/meminfo:SwapFree                         swap -l: free * 512 (accumulate)
  +    #
  +    #Mem/Swap       vmstat: pi+po          vmstat: si+so                                  vmstat: sr
  +    #Page Activity
  +   
  +    return;
  +}
  +
  +1;
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 snmpdx.mib
  --- ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib	1 Sep 2003 15:22:43 -0000	1.1
  +++ ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib	3 Sep 2003 09:22:04 -0000	1.2
  @@ -47,11 +47,73 @@
       ::= { sysId 2 }
   
   --
  +--  System Virtual Memory
  +--
  +
  +sysVM OBJECT IDENTIFIER
  +    ::= { system 2 }
  +
  +sysVMRam OBJECT IDENTIFIER
  +    ::= { sysVM 1 }
  +
  +sysVMRamMax OBJECT-TYPE
  +    SYNTAX      Gauge32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "maximum available RAM in MB"
  +    ::= { sysVMRam 1 }
  +
  +sysVMRamUsed OBJECT-TYPE
  +    SYNTAX      Gauge32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "currently used RAM in MB"
  +    ::= { sysVMRam 2 }
  +
  +sysVMRamFree OBJECT-TYPE
  +    SYNTAX      Gauge32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "currently free RAM in MB"
  +    ::= { sysVMRam 3 }
  +
  +sysVMSwap OBJECT IDENTIFIER
  +    ::= { sysVM 2 }
  +
  +sysVMSwapMax OBJECT-TYPE
  +    SYNTAX      Gauge32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "maximum available Swap in MB"
  +    ::= { sysVMSwap 1 }
  +
  +sysVMSwapUsed OBJECT-TYPE
  +    SYNTAX      Gauge32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "currently used Swap in MB"
  +    ::= { sysVMSwap 2 }
  +
  +sysVMSwapFree OBJECT-TYPE
  +    SYNTAX      Gauge32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "currently free Swap in MB"
  +    ::= { sysVMSwap 3 }
  +
  +sysVMActivity OBJECT-TYPE
  +    SYNTAX      Gauge32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "paging activity in units/time"
  +    ::= { sysVM 3 }
  +
  +--
   --  System Load Average
   --
   
   sysLoad OBJECT IDENTIFIER
  -    ::= { system 2 }
  +    ::= { system 3 }
   
   sysLoad5 OBJECT-TYPE
       SYNTAX      Gauge32
  @@ -79,7 +141,7 @@
   --
   
   sysProc OBJECT IDENTIFIER
  -    ::= { system 3 }
  +    ::= { system 4 }
   
   sysProcMax OBJECT-TYPE
       SYNTAX      Integer32
  @@ -100,7 +162,7 @@
   --
   
   sysUser OBJECT IDENTIFIER
  -    ::= { system 4 }
  +    ::= { system 5 }
   
   sysUserMax OBJECT-TYPE
       SYNTAX      Integer32
  @@ -125,7 +187,7 @@
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "time (in hundrets of a second) since the system was booted"
  -    ::= { system 5 }
  +    ::= { system 6 }
   
   --
   --  Hardware: Product
  @@ -182,20 +244,6 @@
   
   hwRam OBJECT IDENTIFIER
       ::= { hardware 3 }
  -
  -hwRamMax OBJECT-TYPE
  -    SYNTAX      Gauge32
  -    MAX-ACCESS  read-only
  -    STATUS      current
  -    DESCRIPTION "maximum available RAM in MB"
  -    ::= { hwRam 1 }
  -
  -hwRamUsed OBJECT-TYPE
  -    SYNTAX      Gauge32
  -    MAX-ACCESS  read-only
  -    STATUS      current
  -    DESCRIPTION "currently used RAM in MB"
  -    ::= { hwRam 2 }
   
   hwRamStatus OBJECT-TYPE
       SYNTAX      Integer32
  @@ .

From ossp-cvs-owner@ossp.org  Wed Sep  3 17:02:06 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6017777126; Wed,  3 Sep 2003 17:02:05 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ 00TODO
Message-Id: <20030903150205.6017777126@mail.ossp.org>
Date: Wed,  3 Sep 2003 17:02:05 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Sep-2003 17:02:05
  Branch: HEAD                             Handle: 2003090316020400

  Modified files:
    ossp-pkg/snmpdx         00TODO

  Log:
    add more points :-(

  Summary:
    Revision    Changes     Path
    1.8         +11 -1      ossp-pkg/snmpdx/00TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/00TODO
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 00TODO
  --- ossp-pkg/snmpdx/00TODO	2 Sep 2003 18:08:50 -0000	1.7
  +++ ossp-pkg/snmpdx/00TODO	3 Sep 2003 15:02:04 -0000	1.8
  @@ -3,11 +3,21 @@
   ====
   
   - implement more probes [thl]
  +- support "pass" option from net-snmp's snmpd with -g/-n options
  +  (especially useful for command line testing without snmpd(8))
  +- write snmpdx.pod documentation
   
   CANDO
   =====
   
  +- write probe snmpdx.pm which provides name and version and which
  +  especially can be also used as the always present probe in Makefile
  +  during restart.
  +- add --param=key:value command line option for passing key/value
  +  pairs into snmpdx for use by probes as some sort of configuration.
  +- provide "-expire" field in $obj which the probes can fill out.
  +  If filled out, the framework uses this to cache the result
  +  value to speed up things even more.
   - split out MIB parts of each probe into own sub-MIBs
   - Makefile and snmpdx.cfg still contains some hard-coded things
  -- support "pass" option from net-snmp's snmpd with -g/-n options
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Sep  3 17:11:21 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C494A77126; Wed,  3 Sep 2003 17:11:20 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ snmpdx.pod
Message-Id: <20030903151120.C494A77126@mail.ossp.org>
Date: Wed,  3 Sep 2003 17:11:20 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Sep-2003 17:11:20
  Branch: HEAD                             Handle: 2003090316112000

  Added files:
    ossp-pkg/snmpdx         snmpdx.pod

  Log:
    first cut for manual page

  Summary:
    Revision    Changes     Path
    1.1         +59 -0      ossp-pkg/snmpdx/snmpdx.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.pod
  ============================================================================
  $ cvs diff -u -r0 -r1.1 snmpdx.pod
  --- /dev/null	2003-09-03 17:11:20.000000000 +0200
  +++ snmpdx.pod	2003-09-03 17:11:20.000000000 +0200
  @@ -0,0 +1,59 @@
  +##
  +##  OSSP snmpdx -- SNMP Daemon Extension
  +##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +
  +=pod
  +
  +=head1 NAME
  +
  +B<OSSP snmpdx> - SNMP Daemon Extension
  +
  +=head1 SYNOPSIS
  +
  +=head1 DESCRIPTION
  +
  +B<OSSP snmpdx> is a framework for easily hooking into B<net-snmp>'s
  +snmpd(8) and providing an own SNMP MIB and the OID implementing probes.
  +It is a B<Perl> program which either can be configured as a C<pass>
  +(not recommended) or C<pass_persist> (recommended) program into
  +F<snmpd.conf>.
  +
  +=head1 SEE ALSO
  +
  +snmpd(8), F<snmpd.conf>.
  +
  +=head1 HISTORY
  +
  +B<OSSP snmpdx> was implemented in August 2003 by I<Ralf S. Engelschall>
  +under contract with I<Cable & Wireless> as an Open Source framework for
  +easily hooking into B<net-snmp> in order to provide an own SNMP MIB and
  +the OID implementing probes.
  +
  +=head1 AUTHORS
  +
  + Ralf S. Engelschall <rse@engelschall.com>
  + Thomas Lotterer     <thomas@lotterer.net>
  +
  +=cut
  +
  @@ .

From ossp-cvs-owner@ossp.org  Wed Sep  3 17:15:06 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7954A77126; Wed,  3 Sep 2003 17:15:06 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ snmpdx
Message-Id: <20030903151506.7954A77126@mail.ossp.org>
Date: Wed,  3 Sep 2003 17:15:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Sep-2003 17:15:06
  Branch: HEAD                             Handle: 2003090316150500

  Modified files:
    ossp-pkg/snmpdx         snmpdx

  Log:
    remove obsoleted stuff

  Summary:
    Revision    Changes     Path
    1.7         +0  -12     ossp-pkg/snmpdx/snmpdx
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 snmpdx
  --- ossp-pkg/snmpdx/snmpdx	2 Sep 2003 15:36:18 -0000	1.6
  +++ ossp-pkg/snmpdx/snmpdx	3 Sep 2003 15:15:05 -0000	1.7
  @@ -802,18 +802,6 @@
           $ctx->{-log}->printf(2, "probing \"%s\" for OID \"%s\"", $oidprobe->{$oid_handled}, $oid_action);
           $oid_handler->probe($obj);
   
  -        #   handle special "end of sequence" situation
  -        #if (not defined($obj->{-value}) and $oid_handled =~ m|\.#$|) {
  -        #    if (defined($oid_next)) {
  -        #        $oid_search = $oid_next;
  -        #        $oid_search =~ s|\.#$||s;
  -        #        goto RETRY;
  -        #    }
  -        #    else {
  -        #        goto ERROR; # end-of-MIB
  -        #    }
  -        #}
  -
           #   handle special "unknown OID value" situation
           if (not defined($obj->{-value})) {
               $ctx->{-log}->printf(1, "WARNING: handler was unable to provide probe value for OID \"%s\"", $oid_request);
  @@ .

From ossp-cvs-owner@ossp.org  Wed Sep  3 17:37:48 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8B5A677126; Wed,  3 Sep 2003 17:37:48 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ snmpdx
Message-Id: <20030903153748.8B5A677126@mail.ossp.org>
Date: Wed,  3 Sep 2003 17:37:48 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Sep-2003 17:37:48
  Branch: HEAD                             Handle: 2003090316374800

  Modified files:
    ossp-pkg/snmpdx         snmpdx

  Log:
    implement snmpd(8) 'pass' protocol, too. This especially can be also
    used for easy command line testing like 'snmpdx -n .1'

  Summary:
    Revision    Changes     Path
    1.8         +68 -20     ossp-pkg/snmpdx/snmpdx
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 snmpdx
  --- ossp-pkg/snmpdx/snmpdx	3 Sep 2003 15:15:05 -0000	1.7
  +++ ossp-pkg/snmpdx/snmpdx	3 Sep 2003 15:37:48 -0000	1.8
  @@ -486,6 +486,7 @@
       'tmpdir'    => ($ENV{TMPDIR} || $ENV{TEMPDIR} || "/tmp"),
       'get'       => 0,
       'next'      => 0,
  +    'set'       => 0,
       'bindir'    => "/cw/bin",
       'probedir'  => "$myroot/snmpdx.d",
       'probename' => "*",
  @@ -502,8 +503,9 @@
       'V|version'     => \$opt->{'version'},
       'h|help'        => \$opt->{'help'},
       't|tmpdir=s'    => \$opt->{'tmpdir'},
  -    'g|get'         => \$opt->{'get'},        # FIXME: still unused!
  -    'n|next'        => \$opt->{'next'},       # FIXME: still unused!
  +    'g|get'         => \$opt->{'get'},
  +    'n|next'        => \$opt->{'next'},
  +    's|set'         => \$opt->{'set'},
       'b|bindir=s'    => \$opt->{'bindir'},
       'P|probedir=s'  => \$opt->{'probedir'},
       'p|probename=s' => \$opt->{'probename'},
  @@ -511,7 +513,7 @@
       'm|mibname=s'   => \$opt->{'mibname'},
       'l|logfile=s'   => \$opt->{'logfile'},
       'L|loglevel=i'  => \$opt->{'loglevel'},
  -    's|strict'      => \$opt->{'strict'},
  +    'S|strict'      => \$opt->{'strict'},
   );
   Getopt::Long::Configure("bundling");
   my $result = GetOptions(%options) || die "option parsing failed";
  @@ -522,8 +524,9 @@
             " -V,--version        print program version\n" .
             " -h,--help           print out this usage page\n" .
             " -t,--tmpdir=PATH    filesystem path to temporary directory\n" .
  -          " -g,--get=MIBOID     get value of this MIB OID\n" .
  -          " -n,--next=MIBOID    get value of next MIB OID\n" .
  +          " -g,--get            get value of this MIB OID\n" .
  +          " -n,--next           get value of next MIB OID\n" .
  +          " -s,--set            set value of next MIB OID (NOT IMPLEMENTED)\n" .
             " -b,--bindir=PATH    path to the net-snmp binaries\n" .
             " -P,--probedir=PATH  path to probe directory\n" .
             " -p,--probename=NAME the pattern for probes to load\n" .
  @@ -531,7 +534,7 @@
             " -m,--mibname=MIB    the name of the MIB to act under\n" .
             " -l,--logfile=PATH   path to daemon logfile\n" .
             " -L,--loglevel=NUM   logging level (0...9)\n" .
  -          " -s,--strict         strict processing of unknown values\n";
  +          " -S,--strict         strict processing of unknown values\n";
       exit(0);
   }
   if ($opt->{'version'}) {
  @@ -649,6 +652,12 @@
   }
   @{$oidtable} = sort(@{$oidtable});
   
  +#   determine run-time mode
  +my $mode = "pass_persist";
  +if ($opt->{'get'} or $opt->{'next'} or $opt->{'set'}) {
  +    $mode = "pass";
  +}
  +
   #   connect I/O channels
   my $stdin = new IO::Handle;;
   $stdin->fdopen(fileno(STDIN), "r");
  @@ -658,17 +667,28 @@
   $stdout->autoflush(1);
   open(STDERR, ">/dev/null");
   
  -#   daemon loop
  +#   processing loop
   while (1) {
  -    #   read next command from snmpd
  -    my $cmd = $stdin->getline;
  -    if (not defined($cmd)) {
  -        $ctx->{-log}->printf(4, "IO: EOF");
  -        last;
  +    #   determine command
  +    my $cmd;
  +    if ($mode eq "pass_persist") {
  +        #   read next command from snmpd
  +        $cmd = $stdin->getline;
  +        if (not defined($cmd)) {
  +            $ctx->{-log}->printf(4, "IO: EOF");
  +                last;
  +        }
  +        $cmd =~ s|\n?$||s;
  +        $ctx->{-log}->printf(4, "IO: recv: << \"%s\\n\"", $cmd);
  +    }
  +    else {
  +        $cmd = ($opt->{'get'}  ? 'get'     :
  +               ($opt->{'next'} ? 'getnext' :
  +               ($opt->{'set'}  ? 'set'     : 'unknown')));
  +        $ctx->{-log}->printf(4, "CMD: \"%s\\n\"", $cmd);
       }
  -    $cmd =~ s|\n?$||s;
  -    $ctx->{-log}->printf(4, "IO: recv: << \"%s\\n\"", $cmd);
   
  +    #   act upon command
       if ($cmd =~ m/^PING$/i) {
           #
           #   the PING/PONG protocol part
  @@ -681,15 +701,21 @@
           #
           #   the GET/GETNEXT protocol part
           #
  +        my $error = 1;
   
           #   read requested OID
  -        my $error = 1;
  -        my $oid_request = $stdin->getline;
  -        if (not defined($oid_request)) {
  -            $ctx->{-log}->printf(1, "ERROR: EOF instead of OID");
  -            goto ERROR;
  +        my $oid_request;
  +        if ($mode eq "pass") {
  +            $oid_request = $ARGV[0];
  +        }
  +        else {
  +            $oid_request = $stdin->getline;
  +            if (not defined($oid_request)) {
  +                $ctx->{-log}->printf(1, "ERROR: EOF instead of OID");
  +                goto ERROR;
  +            }
  +            $oid_request =~ s|\n?$||s;
           }
  -        $oid_request =~ s|\n?$||s;
           $ctx->{-log}->printf(4, "IO: recv: << \"%s\\n\"", $oid_request);
           if ($oid_request !~ m/^(\.\d+)+$/) {
               $ctx->{-log}->printf(1, "ERROR: invalid query OID \"%s\"", $oid_request);
  @@ -862,9 +888,28 @@
           $error = 0;
           if ($error) {
               ERROR:
  +            if ($mode eq "pass_persist") {
  +                $ctx->{-log}->printf(4, "IO: send: >> \"NONE\\n\"");
  +                $stdout->printf("NONE\n");
  +            }
  +        }
  +    }
  +    elsif ($cmd =~ m/^SET$/i) {
  +        #
  +        #   the SET protocol part
  +        #
  +        if ($mode eq "pass_persist") {
  +            #   read requested OID/TYPE/VALUE (and ignore)
  +            my $oid       = $stdin->getline;
  +            my $oid_type  = $stdin->getline;
  +            my $oid_value = $stdin->getline;
               $ctx->{-log}->printf(4, "IO: send: >> \"NONE\\n\"");
               $stdout->printf("NONE\n");
           }
  +        else {
  +            $ctx->{-log}->printf(4, "IO: send: >> \"not-writable\\n\"");
  +            $stdout->printf("not-writable\n");
  +        }
       }
       else {
           #   for anything else (not expected) just send at least
  @@ -872,6 +917,9 @@
           $ctx->{-log}->printf(4, "IO: send: >> \"NONE\\n\"");
           $stdout->printf("NONE\n");
       }
  +
  +    #   stop processing on "pass" mode
  +    last if ($mode eq "pass");
   }
   
   #   shutdown gracefully
  @@ .

From ossp-cvs-owner@ossp.org  Wed Sep  3 17:41:05 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D134977126; Wed,  3 Sep 2003 17:41:04 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/snmpdx.d/ sysVM.pm
Message-Id: <20030903154104.D134977126@mail.ossp.org>
Date: Wed,  3 Sep 2003 17:41:04 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   03-Sep-2003 17:41:04
  Branch: HEAD                             Handle: 2003090316410400

  Modified files:
    ossp-pkg/snmpdx/snmpdx.d
                            sysVM.pm

  Log:
    sysVM for SunOS

  Summary:
    Revision    Changes     Path
    1.2         +133 -13    ossp-pkg/snmpdx/snmpdx.d/sysVM.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/sysVM.pm
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 sysVM.pm
  --- ossp-pkg/snmpdx/snmpdx.d/sysVM.pm	3 Sep 2003 09:22:03 -0000	1.1
  +++ ossp-pkg/snmpdx/snmpdx.d/sysVM.pm	3 Sep 2003 15:41:04 -0000	1.2
  @@ -36,20 +36,140 @@
   sub probe ($$) {
       my ($self, $obj) = @_;
   
  -    #               FreeBSD                Linux                                          Solaris
  -    #Mem Total      sysctl -n hw.physmem   /proc/meminfo:MemTotal                         /usr/platform/`uname -i`/sbin/prtdiag:Memory size
  -    #Mem Used       vmstat: avm            /proc/meminfo:MemTotal-Buffers-Cached-MemFree  "total" - "free"
  -    #Mem Free       "total"-"used"         "total"-"used"                                 sar -r  1 1: freemem * `pagesize`
  -    #Mem Status     N.A.                   N.A.                                           /usr/platform/`uname -i`/sbin/prtdiag:Status col. 
  -    #
  -    #Swap Total     swapinfo -k | tail -1  /proc/meminfo:SwapTotal                        swap -l: blocks * 512 (accumulate)
  -    #Swap Used      swapinfo -k | tail -1  "total" - "free"                               "total"-"free"
  -    #Swap Free      "total"-"used"         /proc/meminfo:SwapFree                         swap -l: free * 512 (accumulate)
  -    #
  -    #Mem/Swap       vmstat: pi+po          vmstat: si+so                                  vmstat: sr
  -    #Page Activity
  -   
  +    if ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i) {
  +        # sysVMRamMax   sysctl -n hw.physmem
  +        # sysVMRamUsed  vmstat: avm
  +        # sysVMRamFree  sysVMRamMax - sysVMRamUsed
  +        # sysVMSwapMax  swapinfo -k | tail -1
  +        # sysVMSwapUsed swapinfo -k | tail -1
  +        # sysVMSwapFree sysVMSwapMax - sysVMSwapUsed
  +        # sysVMActivity vmstat: pi+po
  +    }
  +    elsif ($self->{-ctx}->{-platform}->id() =~ m/Linux/i) {
  +        # sysVMRamMax   /proc/meminfo:MemTotal
  +        # sysVMRamUsed  /proc/meminfo:MemTotal-Buffers-Cached-MemFree
  +        # sysVMRamFree  sysVMRamMax - sysVMRamUsed
  +        # sysVMSwapMax  /proc/meminfo:SwapTotal
  +        # sysVMSwapUsed sysVMSwapMax - sysVMSwapFree
  +        # sysVMSwapFree /proc/meminfo:SwapFree
  +    }
  +    elsif ($self->{-ctx}->{-platform}->id() =~ m/SunOS/i) {
  +        # sysVMRamMax   "/usr/platform/$arch/sbin/prtdiag", Memory size
  +        # sysVMRamUsed  sysVMRamMax - sysVMRamFree
  +        # sysVMRamFree  "/bin/pagesize" * "/bin/sar -r 1 1", freemem, convert bytes to MB
  +        #
  +        if ($obj->{-name} =~ m/\.sysVMRam(Max|Used|Free)$/) {
  +            my $sysVMRamMax  = undef;
  +            my $sysVMRamUsed = undef;
  +            my $sysVMRamFree = undef;
  +
  +            #   initialize arch; get or assume pagesize(1)
  +            my $arch = $self->{-ctx}->{-platform}->arch();
  +            my $out = $self->{-ctx}->{-sys}->run("/bin/pagesize", "forever");
  +            my $pagesize = $out->{-stdout} || 4096;
  +
  +            #   sysVMRamMax
  +            my $out = $self->{-ctx}->{-sys}->run("/usr/platform/$arch/sbin/prtdiag -v", "1m");
  +            my $raw = $out->{-stdout};
  +            if ($raw =~ m/\nMemory size: (\d+) Megabytes/s) {
  +                $sysVMRamMax = $1;
  +            }
  +
  +            #   sysVMRamFree
  +            my $out = $self->{-ctx}->{-sys}->run("/bin/sar -r 1 1", "1m");
  +            my $raw = $out->{-stdout};
  +            my $i_sarr = {};
  +            if ($raw =~ m/^.*\n([^\n]*\bfreemem[^\n]*)\n(.*)$/s) {
  +                $i_sarr = &n2i(split / +/, $1) if (scalar keys %$i_sarr == 0);
  +            }
  +            @data = split(/ +/, $2);
  +            if (defined $i_sarr->{freemem}) {
  +                $sysVMRamFree  = 0 if (not defined $sysVMRamFree);
  +                $sysVMRamFree  += @data[$i_sarr->{freemem}];
  +            }
  +            $sysVMRamFree = int($sysVMRamFree * $pagesize / 1024 / 1024) if (defined $sysVMRamFree);
  +
  +            #   sysVMRamUsed
  +            if (defined $sysVMRamMax and defined $sysVMRamFree) {
  +                $sysVMRamUsed = $sysVMRamMax - $sysVMRamFree;
  +            }
  +
  +            $obj->{-value} = $sysVMRamMax  if ($obj->{-name} =~ m/\.sysVMRamMax$/);
  +            $obj->{-value} = $sysVMRamUsed if ($obj->{-name} =~ m/\.sysVMRamUsed$/);
  +            $obj->{-value} = $sysVMRamFree if ($obj->{-name} =~ m/\.sysVMRamFree$/);
  +        }
  +
  +        # sysVMSwapMax  "swap -l", egrep ^/ and accumulate, convert 512byte blocks to MB
  +        # sysVMSwapUsed sysVMSwapMax - sysVMSwapFree
  +        # sysVMSwapFree "swap -l", egrep ^/ and accumulate, convert 512byte blocks to MB
  +        #
  +        if ($obj->{-name} =~ m/\.sysVMSwap(Max|Used|Free)$/) {
  +            my $sysVMSwapMax  = undef;
  +            my $sysVMSwapUsed = undef;
  +            my $sysVMSwapFree = undef;
  +
  +            #   sysVMSwapMax, sysVMSwapFree
  +            my $out = $self->{-ctx}->{-sys}->run("/usr/sbin/swap -l", "1m");
  +            my $raw = $out->{-stdout};
  +            my $i_swapl = {};
  +            if ($raw =~ m/^\s*([^\n]*\bblocks[^\n]*\bfree[^\n]*)\n(.*)$/s) {
  +                $i_swapl = &n2i(split / +/, $1) if (scalar keys %$i_swapl == 0);
  +            }
  +            foreach my $r (split /\n/, $2) {
  +                if ($r =~ m/^\//) {
  +                    @data = split(/ +/, $r);
  +                    if (defined $i_swapl->{blocks}) {
  +                        $sysVMSwapMax  = 0 if (not defined $sysVMSwapMax);
  +                        $sysVMSwapMax  += @data[$i_swapl->{blocks}];
  +                    }
  +                    if (defined $i_swapl->{free}) {
  +                        $sysVMSwapFree = 0 if (not defined $sysVMSwapFree);
  +                        $sysVMSwapFree += @data[$i_swapl->{free}];
  +                    }
  +                }
  +            }
  +            $sysVMSwapMax  = int($sysVMSwapMax  * 512 / 1024 / 1024) if (defined $sysVMSwapMax);
  +            $sysVMSwapFree = int($sysVMSwapFree * 512 / 1024 / 1024) if (defined $sysVMSwapFree);
  +
  +            #   sysVMSwapUsed
  +            if (defined $sysVMSwapMax and defined $sysVMSwapFree) {
  +                $sysVMSwapUsed = $sysVMSwapMax - $sysVMSwapFree;
  +            }
  +
  +            $obj->{-value} = $sysVMSwapMax  if ($obj->{-name} =~ m/\.sysVMSwapMax$/);
  +            $obj->{-value} = $sysVMSwapUsed if ($obj->{-name} =~ m/\.sysVMSwapUsed$/);
  +            $obj->{-value} = $sysVMSwapFree if ($obj->{-name} =~ m/\.sysVMSwapFree$/);
  +        }
  +
  +        # sysVMActivity "/bin/vmstat", sr column
  +        #
  +        if ($obj->{-name} =~ m/\.sysVMActivity$/) {
  +            my $value = undef;
  +            my $out = $self->{-ctx}->{-sys}->run("/bin/vmstat", "1m");
  +            my $raw = $out->{-stdout};
  +            my $i_vmstat = {};
  +            if ($raw =~ m/^[^\n]*\n *([^\n]*\bsr\b[^\n]*)\n *([^\n]*)\n$/s) {
  +                $i_vmstat = &n2i(split / +/, $1) if (not defined $i_vmstat->{sr});
  +            }
  +            if (defined $i_vmstat->{sr}) {
  +                my @data = split(/ +/, $2);
  +                $value = @data[$i_vmstat->{sr}];
  +            }
  +            $obj->{-value} = $value;
  +        }
  +    }
       return;
  +}
  +
  +# name to index
  +sub n2i ($) {
  +    my (@name) = @_;
  +    my $rc = {};
  +    my $i = 0;
  +    foreach my $f (@name) {
  +        $rc->{$f} = $i++;
  +    };
  +    return $rc;
   }
   
   1;
  @@ .

From ossp-cvs-owner@ossp.org  Thu Sep  4 10:33:18 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9620F77125; Thu,  4 Sep 2003 10:33:17 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/snmpdx.d/ sysVM.pm
Message-Id: <20030904083317.9620F77125@mail.ossp.org>
Date: Thu,  4 Sep 2003 10:33:17 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   04-Sep-2003 10:33:17
  Branch: HEAD                             Handle: 2003090409331600

  Modified files:
    ossp-pkg/snmpdx/snmpdx.d
                            sysVM.pm

  Log:
    sysVM for Linux

  Summary:
    Revision    Changes     Path
    1.3         +93 -5      ossp-pkg/snmpdx/snmpdx.d/sysVM.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/sysVM.pm
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 sysVM.pm
  --- ossp-pkg/snmpdx/snmpdx.d/sysVM.pm	3 Sep 2003 15:41:04 -0000	1.2
  +++ ossp-pkg/snmpdx/snmpdx.d/sysVM.pm	4 Sep 2003 08:33:16 -0000	1.3
  @@ -22,7 +22,7 @@
   ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   ##  SUCH DAMAGE.
   ##
  -##  sysVM: System Vritual Memory
  +##  sysVM: System Virtual Memory
   ##
   
   package My::Probe::sysVM;
  @@ -46,12 +46,100 @@
           # sysVMActivity vmstat: pi+po
       }
       elsif ($self->{-ctx}->{-platform}->id() =~ m/Linux/i) {
  -        # sysVMRamMax   /proc/meminfo:MemTotal
  -        # sysVMRamUsed  /proc/meminfo:MemTotal-Buffers-Cached-MemFree
  +        # sysVMRamMax   "/bin/cat /proc/meminfo", MemTotal, convert KB to MB
  +        # sysVMRamUsed  "/bin/cat /proc/meminfo", MemTotal-Buffers-Cached-MemFree, convert KB to MB
           # sysVMRamFree  sysVMRamMax - sysVMRamUsed
  -        # sysVMSwapMax  /proc/meminfo:SwapTotal
  +        #
  +        # FIXME sysVMRamMax does not include the kernel and some of its structures so
  +        # FIXME             it is not pyhsical RAM, see dmesg | egrep '^Memory:'
  +        # FIXME /bin/cat is used here but could be replaced by native perl code to improve performance
  +        #
  +        if ($obj->{-name} =~ m/\.sysVMRam(Max|Used|Free)$/) {
  +            my $sysVMRamMax  = undef;
  +            my $sysVMRamUsed = undef;
  +            my $sysVMRamFree = undef;
  +
  +            #   sysVMRamMax, sysVMRamUsed
  +            my $out = $self->{-ctx}->{-sys}->run("/bin/cat /proc/meminfo", "1m");
  +            my $raw = $out->{-stdout};
  +            my $i_meminfo = {};
  +            $i_meminfo->{MemTotal} = int($1 / 1024) if ($raw =~ m/\nMemTotal:[^\n]*\b(\d+)\b[^\n]*kB\n/s);
  +                $self->{-ctx}->{-log}->printf(1, "DEBUG: 1=$1\n");
  +            $i_meminfo->{Buffers}  = int($1 / 1024) if ($raw =~ m/\nBuffers:[^\n]*\b(\d+)\b[^\n]*kB\n/s);
  +            $i_meminfo->{Cached}   = int($1 / 1024) if ($raw =~ m/\nCached:[^\n]*\b(\d+)\b[^\n]*kB\n/s);
  +            $i_meminfo->{MemFree}  = int($1 / 1024) if ($raw =~ m/\nMemFree:[^\n]*\b(\d+)\b[^\n]*kB\n/s);
  +            if (defined $i_meminfo->{MemTotal}) {
  +                $self->{-ctx}->{-log}->printf(1, "DEBUG: MemTotal=%s\n", $i_meminfo->{MemTotal});
  +                $sysVMRamMax = $i_meminfo->{MemTotal};
  +            }
  +
  +            if (    defined $i_meminfo->{MemTotal}
  +                and defined $i_meminfo->{Buffers}
  +                and defined $i_meminfo->{Cached}
  +                and defined $i_meminfo->{MemFree}
  +                   ) {
  +                $sysVMRamUsed  =   $i_meminfo->{MemTotal} 
  +                                 - $i_meminfo->{Buffers} 
  +                                 - $i_meminfo->{Cached} 
  +                                 - $i_meminfo->{MemFree};
  +            }
  +
  +            #   sysVMRamFree
  +            if (defined $sysVMRamMax and defined $sysVMRamUsed) {
  +                $sysVMRamFree = $sysVMRamMax - $sysVMRamUsed;
  +            }
  +
  +            $obj->{-value} = $sysVMRamMax  if ($obj->{-name} =~ m/\.sysVMRamMax$/);
  +            $obj->{-value} = $sysVMRamUsed if ($obj->{-name} =~ m/\.sysVMRamUsed$/);
  +            $obj->{-value} = $sysVMRamFree if ($obj->{-name} =~ m/\.sysVMRamFree$/);
  +        }
  +
  +        # sysVMSwapMax  "/bin/cat /proc/meminfo", SwapTotal, convert KB to MB
           # sysVMSwapUsed sysVMSwapMax - sysVMSwapFree
  -        # sysVMSwapFree /proc/meminfo:SwapFree
  +        # sysVMSwapFree "/bin/cat /proc/meminfo", SwapFree, convert KB to MB
  +        #
  +        if ($obj->{-name} =~ m/\.sysVMSwap(Max|Used|Free)$/) {
  +            my $sysVMSwapMax  = undef;
  +            my $sysVMSwapUsed = undef;
  +            my $sysVMSwapFree = undef;
  +
  +            #   sysVMSwapMax, sysVMSwapFree
  +            my $out = $self->{-ctx}->{-sys}->run("/bin/cat /proc/meminfo", "1m"); #FIXME this could be done in perl natively to improve performance
  +            my $raw = $out->{-stdout};
  +            my $i_swapl = {};
  +            if ($raw =~ m/\nSwapTotal:[^\n]*\b(\d+)\b[^\n]*kB\n/s) {
  +                $sysVMSwapMax  = int($1 / 1024);
  +            }
  +            if ($raw =~ m/\nSwapFree:[^\n]*\b(\d+)\b[^\n]*kB\n/s) {
  +                $sysVMSwapFree = int($1 / 1024);
  +            }
  +
  +            #   sysVMSwapUsed
  +            if (defined $sysVMSwapMax and defined $sysVMSwapFree) {
  +                $sysVMSwapUsed = $sysVMSwapMax - $sysVMSwapFree;
  +            }
  +
  +            $obj->{-value} = $sysVMSwapMax  if ($obj->{-name} =~ m/\.sysVMSwapMax$/);
  +            $obj->{-value} = $sysVMSwapUsed if ($obj->{-name} =~ m/\.sysVMSwapUsed$/);
  +            $obj->{-value} = $sysVMSwapFree if ($obj->{-name} =~ m/\.sysVMSwapFree$/);
  +        }
  +
  +        # sysVMActivity "/usr/bin/vmstat", add si and so column
  +        #
  +        if ($obj->{-name} =~ m/\.sysVMActivity$/) {
  +            my $value = undef;
  +            my $out = $self->{-ctx}->{-sys}->run("/usr/bin/vmstat", "1m");
  +            my $raw = $out->{-stdout};
  +            my $i_vmstat = {};
  +            if ($raw =~ m/^[^\n]*\n *([^\n]*(\bs[io]\b[^\n]*){2})\n *([^\n]*)\n$/s) {
  +                $i_vmstat = &n2i(split / +/, $1) if (not defined $i_vmstat->{sr});
  +            }
  +            if (defined $i_vmstat->{si} and defined $i_vmstat->{so}) {
  +                my @data = split(/ +/, $3);
  +                $value = @data[$i_vmstat->{si}] + @data[$i_vmstat->{so}];
  +            }
  +            $obj->{-value} = $value;
  +        }
       }
       elsif ($self->{-ctx}->{-platform}->id() =~ m/SunOS/i) {
           # sysVMRamMax   "/usr/platform/$arch/sbin/prtdiag", Memory size
  @@ .

From ossp-cvs-owner@ossp.org  Thu Sep  4 11:16:57 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F2CC07712B; Thu,  4 Sep 2003 11:16:56 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ 00TODO
Message-Id: <20030904091656.F2CC07712B@mail.ossp.org>
Date: Thu,  4 Sep 2003 11:16:56 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Sep-2003 11:16:56
  Branch: HEAD                             Handle: 2003090410165600

  Modified files:
    ossp-pkg/snmpdx         00TODO

  Log:
    now already implemented, too

  Summary:
    Revision    Changes     Path
    1.9         +0  -2      ossp-pkg/snmpdx/00TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/00TODO
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 00TODO
  --- ossp-pkg/snmpdx/00TODO	3 Sep 2003 15:02:04 -0000	1.8
  +++ ossp-pkg/snmpdx/00TODO	4 Sep 2003 09:16:56 -0000	1.9
  @@ -3,8 +3,6 @@
   ====
   
   - implement more probes [thl]
  -- support "pass" option from net-snmp's snmpd with -g/-n options
  -  (especially useful for command line testing without snmpd(8))
   - write snmpdx.pod documentation
   
   CANDO
  @@ .

From ossp-cvs-owner@ossp.org  Thu Sep  4 11:21:05 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3CB6F7712B; Thu,  4 Sep 2003 11:21:05 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/snmpdx.d/ sysVM.pm
Message-Id: <20030904092105.3CB6F7712B@mail.ossp.org>
Date: Thu,  4 Sep 2003 11:21:05 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   04-Sep-2003 11:21:05
  Branch: HEAD                             Handle: 2003090410210400

  Modified files:
    ossp-pkg/snmpdx/snmpdx.d
                            sysVM.pm

  Log:
    sysVM for FreeBSD

  Summary:
    Revision    Changes     Path
    1.4         +83 -8      ossp-pkg/snmpdx/snmpdx.d/sysVM.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/sysVM.pm
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 sysVM.pm
  --- ossp-pkg/snmpdx/snmpdx.d/sysVM.pm	4 Sep 2003 08:33:16 -0000	1.3
  +++ ossp-pkg/snmpdx/snmpdx.d/sysVM.pm	4 Sep 2003 09:21:04 -0000	1.4
  @@ -37,13 +37,88 @@
       my ($self, $obj) = @_;
   
       if ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i) {
  -        # sysVMRamMax   sysctl -n hw.physmem
  -        # sysVMRamUsed  vmstat: avm
  -        # sysVMRamFree  sysVMRamMax - sysVMRamUsed
  -        # sysVMSwapMax  swapinfo -k | tail -1
  -        # sysVMSwapUsed swapinfo -k | tail -1
  +        # sysVMRamMax   "/sbin/sysctl -n hw.physmem", convert bytes to MB
  +        # sysVMRamUsed  sysVMRamMax - sysVMRamFree
  +        # sysVMRamFree  "/usr/bin/vmstat", avm, convert KB to MB
  +        #
  +        if ($obj->{-name} =~ m/\.sysVMRam(Max|Used|Free)$/) {
  +            my $sysVMRamMax  = undef;
  +            my $sysVMRamUsed = undef;
  +            my $sysVMRamFree = undef;
  +
  +            #   sysVMRamMax
  +            my $out = $self->{-ctx}->{-sys}->run("/sbin/sysctl -n hw.physmem", "forever");
  +            my $raw = $out->{-stdout};
  +            $sysVMRamMax = int($1 / 1024 / 1024) if ($raw =~ m/^(\d+)$/);
  +
  +            #   sysVMRamFree
  +            my $out = $self->{-ctx}->{-sys}->run("/usr/bin/vmstat", "1m");
  +            my $raw = $out->{-stdout};
  +            my $i_vmstat = {};
  +            if ($raw =~ m/^[^\n]*\n *([^\n]*\bavm\b[^\n]*)\n *([^\n]*)\n$/s) {
  +                $i_vmstat = &n2i(split / +/, $1) if (not defined $i_vmstat->{sr});
  +            }
  +            if (defined $i_vmstat->{avm}) {
  +                my @data = split(/ +/, $2);
  +                $sysVMRamFree = int(@data[$i_vmstat->{avm}] / 1024);
  +            }
  +
  +            #   sysVMRamUsed
  +            if (defined $sysVMRamMax and defined $sysVMRamFree) {
  +                $sysVMRamUsed = $sysVMRamMax - $sysVMRamFree;
  +            }
  +
  +            $obj->{-value} = $sysVMRamMax  if ($obj->{-name} =~ m/\.sysVMRamMax$/);
  +            $obj->{-value} = $sysVMRamUsed if ($obj->{-name} =~ m/\.sysVMRamUsed$/);
  +            $obj->{-value} = $sysVMRamFree if ($obj->{-name} =~ m/\.sysVMRamFree$/);
  +        }
  +
  +        # sysVMSwapMax  "/usr/sbin/swapinfo -k", 1K-blocks, last line, convert KB to MB
  +        # sysVMSwapUsed "/usr/sbin/swapinfo -k", Used, last line, convert KB to MB
           # sysVMSwapFree sysVMSwapMax - sysVMSwapUsed
  -        # sysVMActivity vmstat: pi+po
  +        #
  +        if ($obj->{-name} =~ m/\.sysVMSwap(Max|Used|Free)$/) {
  +            my $sysVMSwapMax  = undef;
  +            my $sysVMSwapUsed = undef;
  +            my $sysVMSwapFree = undef;
  +
  +            #   sysVMSwapMax, sysVMSwapUsed
  +            my $out = $self->{-ctx}->{-sys}->run("/usr/sbin/swapinfo -k", "1m");
  +            my $raw = $out->{-stdout};
  +            my $i_swapl = {};
  +            if ($raw =~ m/^\s*([^\n]*\b1K-blocks[^\n]*\bUsed[^\n]*).*\n([^\n]+)$/s) {
  +                $i_swapl = &n2i(split / +/, $1) if (scalar keys %$i_swapl == 0);
  +            }
  +            @data = split(/ +/, $2);
  +            $sysVMSwapMax  = int(@data[$i_swapl->{_1K_blocks}] / 1024) if (defined $i_swapl->{_1K_blocks});
  +            $sysVMSwapUsed = int(@data[$i_swapl->{Used}]       / 1024) if (defined $i_swapl->{Used});
  +
  +            #   sysVMSwapFree
  +            if (defined $sysVMSwapMax and defined $sysVMSwapUsed) {
  +                $sysVMSwapFree = $sysVMSwapMax - $sysVMSwapUsed;
  +            }
  +
  +            $obj->{-value} = $sysVMSwapMax  if ($obj->{-name} =~ m/\.sysVMSwapMax$/);
  +            $obj->{-value} = $sysVMSwapUsed if ($obj->{-name} =~ m/\.sysVMSwapUsed$/);
  +            $obj->{-value} = $sysVMSwapFree if ($obj->{-name} =~ m/\.sysVMSwapFree$/);
  +        }
  +
  +        # sysVMActivity "/usr/bin/vmstat", add pi and po column
  +        #
  +        if ($obj->{-name} =~ m/\.sysVMActivity$/) {
  +            my $value = undef;
  +            my $out = $self->{-ctx}->{-sys}->run("/usr/bin/vmstat", "1m");
  +            my $raw = $out->{-stdout};
  +            my $i_vmstat = {};
  +            if ($raw =~ m/^[^\n]*\n *([^\n]*(\bp[io]\b[^\n]*){2})\n *([^\n]*)\n$/s) {
  +                $i_vmstat = &n2i(split / +/, $1) if (not defined $i_vmstat->{sr});
  +            }
  +            if (defined $i_vmstat->{pi} and defined $i_vmstat->{po}) {
  +                my @data = split(/ +/, $3);
  +                $value = @data[$i_vmstat->{pi}] + @data[$i_vmstat->{po}];
  +            }
  +            $obj->{-value} = $value;
  +        }
       }
       elsif ($self->{-ctx}->{-platform}->id() =~ m/Linux/i) {
           # sysVMRamMax   "/bin/cat /proc/meminfo", MemTotal, convert KB to MB
  @@ -64,12 +139,10 @@
               my $raw = $out->{-stdout};
               my $i_meminfo = {};
               $i_meminfo->{MemTotal} = int($1 / 1024) if ($raw =~ m/\nMemTotal:[^\n]*\b(\d+)\b[^\n]*kB\n/s);
  -                $self->{-ctx}->{-log}->printf(1, "DEBUG: 1=$1\n");
               $i_meminfo->{Buffers}  = int($1 / 1024) if ($raw =~ m/\nBuffers:[^\n]*\b(\d+)\b[^\n]*kB\n/s);
               $i_meminfo->{Cached}   = int($1 / 1024) if ($raw =~ m/\nCached:[^\n]*\b(\d+)\b[^\n]*kB\n/s);
               $i_meminfo->{MemFree}  = int($1 / 1024) if ($raw =~ m/\nMemFree:[^\n]*\b(\d+)\b[^\n]*kB\n/s);
               if (defined $i_meminfo->{MemTotal}) {
  -                $self->{-ctx}->{-log}->printf(1, "DEBUG: MemTotal=%s\n", $i_meminfo->{MemTotal});
                   $sysVMRamMax = $i_meminfo->{MemTotal};
               }
   
  @@ -255,6 +328,8 @@
       my $rc = {};
       my $i = 0;
       foreach my $f (@name) {
  +        $f =~ s/[^\w]/_/;
  +        $f =~ s/^([^a-zA-Z_])/_$1/;
           $rc->{$f} = $i++;
       };
       return $rc;
  @@ .

From ossp-cvs-owner@ossp.org  Thu Sep  4 12:07:48 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9D0E67712D; Thu,  4 Sep 2003 12:07:47 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/snmpdx.d/ sysVM.pm
Message-Id: <20030904100747.9D0E67712D@mail.ossp.org>
Date: Thu,  4 Sep 2003 12:07:47 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   04-Sep-2003 12:07:47
  Branch: HEAD                             Handle: 2003090411074700

  Modified files:
    ossp-pkg/snmpdx/snmpdx.d
                            sysVM.pm

  Log:
    variable name, namespace and coding style cleanup

  Summary:
    Revision    Changes     Path
    1.5         +133 -92    ossp-pkg/snmpdx/snmpdx.d/sysVM.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/sysVM.pm
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 sysVM.pm
  --- ossp-pkg/snmpdx/snmpdx.d/sysVM.pm	4 Sep 2003 09:21:04 -0000	1.4
  +++ ossp-pkg/snmpdx/snmpdx.d/sysVM.pm	4 Sep 2003 10:07:47 -0000	1.5
  @@ -46,21 +46,26 @@
               my $sysVMRamUsed = undef;
               my $sysVMRamFree = undef;
   
  +            #   local workspace
  +            my $out; my $raw; my $n2i; my @dat;
  +
               #   sysVMRamMax
  -            my $out = $self->{-ctx}->{-sys}->run("/sbin/sysctl -n hw.physmem", "forever");
  -            my $raw = $out->{-stdout};
  -            $sysVMRamMax = int($1 / 1024 / 1024) if ($raw =~ m/^(\d+)$/);
  +            $out = $self->{-ctx}->{-sys}->run("/sbin/sysctl -n hw.physmem", "forever");
  +            $raw = $out->{-stdout};
  +            if ($raw =~ m/^(\d+)$/) {
  +                $sysVMRamMax = int($1 / 1024 / 1024);
  +            }
   
               #   sysVMRamFree
  -            my $out = $self->{-ctx}->{-sys}->run("/usr/bin/vmstat", "1m");
  -            my $raw = $out->{-stdout};
  -            my $i_vmstat = {};
  +            $out = $self->{-ctx}->{-sys}->run("/usr/bin/vmstat", "1m");
  +            $raw = $out->{-stdout};
  +            $n2i = {};
               if ($raw =~ m/^[^\n]*\n *([^\n]*\bavm\b[^\n]*)\n *([^\n]*)\n$/s) {
  -                $i_vmstat = &n2i(split / +/, $1) if (not defined $i_vmstat->{sr});
  +                $n2i = &mkn2i(split / +/, $1);
               }
  -            if (defined $i_vmstat->{avm}) {
  -                my @data = split(/ +/, $2);
  -                $sysVMRamFree = int(@data[$i_vmstat->{avm}] / 1024);
  +            if (defined $n2i->{avm}) {
  +                @dat = split(/ +/, $2);
  +                $sysVMRamFree = int(@dat[$n2i->{avm}] / 1024);
               }
   
               #   sysVMRamUsed
  @@ -82,16 +87,23 @@
               my $sysVMSwapUsed = undef;
               my $sysVMSwapFree = undef;
   
  +            #   local workspace
  +            my $out; my $raw; my $n2i; my @dat;
  +
               #   sysVMSwapMax, sysVMSwapUsed
  -            my $out = $self->{-ctx}->{-sys}->run("/usr/sbin/swapinfo -k", "1m");
  -            my $raw = $out->{-stdout};
  -            my $i_swapl = {};
  +            $out = $self->{-ctx}->{-sys}->run("/usr/sbin/swapinfo -k", "1m");
  +            $raw = $out->{-stdout};
  +            $n2i = {};
               if ($raw =~ m/^\s*([^\n]*\b1K-blocks[^\n]*\bUsed[^\n]*).*\n([^\n]+)$/s) {
  -                $i_swapl = &n2i(split / +/, $1) if (scalar keys %$i_swapl == 0);
  +                $n2i = &mkn2i(split / +/, $1);
  +            }
  +            @dat = split(/ +/, $2);
  +            if (defined $n2i->{_1K_blocks}) {
  +                $sysVMSwapMax  = int(@dat[$n2i->{_1K_blocks}] / 1024)
  +            }
  +            if (defined $n2i->{Used}) {
  +                $sysVMSwapUsed = int(@dat[$n2i->{Used}] / 1024)
               }
  -            @data = split(/ +/, $2);
  -            $sysVMSwapMax  = int(@data[$i_swapl->{_1K_blocks}] / 1024) if (defined $i_swapl->{_1K_blocks});
  -            $sysVMSwapUsed = int(@data[$i_swapl->{Used}]       / 1024) if (defined $i_swapl->{Used});
   
               #   sysVMSwapFree
               if (defined $sysVMSwapMax and defined $sysVMSwapUsed) {
  @@ -106,18 +118,22 @@
           # sysVMActivity "/usr/bin/vmstat", add pi and po column
           #
           if ($obj->{-name} =~ m/\.sysVMActivity$/) {
  -            my $value = undef;
  -            my $out = $self->{-ctx}->{-sys}->run("/usr/bin/vmstat", "1m");
  -            my $raw = $out->{-stdout};
  -            my $i_vmstat = {};
  +            my $sysVMActivity = undef;
  +
  +            #   local workspace
  +            my $out; my $raw; my $n2i; my @dat;
  +
  +            $out = $self->{-ctx}->{-sys}->run("/usr/bin/vmstat", "1m");
  +            $raw = $out->{-stdout};
  +            $n2i = {};
               if ($raw =~ m/^[^\n]*\n *([^\n]*(\bp[io]\b[^\n]*){2})\n *([^\n]*)\n$/s) {
  -                $i_vmstat = &n2i(split / +/, $1) if (not defined $i_vmstat->{sr});
  +                $n2i = &mkn2i(split / +/, $1);
               }
  -            if (defined $i_vmstat->{pi} and defined $i_vmstat->{po}) {
  -                my @data = split(/ +/, $3);
  -                $value = @data[$i_vmstat->{pi}] + @data[$i_vmstat->{po}];
  +            if (defined $n2i->{pi} and defined $n2i->{po}) {
  +                @dat = split(/ +/, $3);
  +                $sysVMActivity = @dat[$n2i->{pi}] + @dat[$n2i->{po}];
               }
  -            $obj->{-value} = $value;
  +            $obj->{-value} = $sysVMActivity;
           }
       }
       elsif ($self->{-ctx}->{-platform}->id() =~ m/Linux/i) {
  @@ -134,27 +150,31 @@
               my $sysVMRamUsed = undef;
               my $sysVMRamFree = undef;
   
  +            #   local workspace
  +            my $out; my $raw; my $n2i; my @dat; my $tmp;
  +
               #   sysVMRamMax, sysVMRamUsed
  -            my $out = $self->{-ctx}->{-sys}->run("/bin/cat /proc/meminfo", "1m");
  -            my $raw = $out->{-stdout};
  -            my $i_meminfo = {};
  -            $i_meminfo->{MemTotal} = int($1 / 1024) if ($raw =~ m/\nMemTotal:[^\n]*\b(\d+)\b[^\n]*kB\n/s);
  -            $i_meminfo->{Buffers}  = int($1 / 1024) if ($raw =~ m/\nBuffers:[^\n]*\b(\d+)\b[^\n]*kB\n/s);
  -            $i_meminfo->{Cached}   = int($1 / 1024) if ($raw =~ m/\nCached:[^\n]*\b(\d+)\b[^\n]*kB\n/s);
  -            $i_meminfo->{MemFree}  = int($1 / 1024) if ($raw =~ m/\nMemFree:[^\n]*\b(\d+)\b[^\n]*kB\n/s);
  -            if (defined $i_meminfo->{MemTotal}) {
  -                $sysVMRamMax = $i_meminfo->{MemTotal};
  +            $out = $self->{-ctx}->{-sys}->run("/bin/cat /proc/meminfo", "1m");
  +            $raw = $out->{-stdout};
  +            $tmp = {};
  +            $tmp->{MemTotal} = $1 if ($raw =~ m/\nMemTotal:[^\n]*\b(\d+)\b[^\n]*kB\n/s);
  +            $tmp->{Buffers}  = $1 if ($raw =~ m/\nBuffers:[^\n]*\b(\d+)\b[^\n]*kB\n/s);
  +            $tmp->{Cached}   = $1 if ($raw =~ m/\nCached:[^\n]*\b(\d+)\b[^\n]*kB\n/s);
  +            $tmp->{MemFree}  = $1 if ($raw =~ m/\nMemFree:[^\n]*\b(\d+)\b[^\n]*kB\n/s);
  +            if (defined $tmp->{MemTotal}) {
  +                $sysVMRamMax = int($tmp->{MemTotal} / 1024);
               }
   
  -            if (    defined $i_meminfo->{MemTotal}
  -                and defined $i_meminfo->{Buffers}
  -                and defined $i_meminfo->{Cached}
  -                and defined $i_meminfo->{MemFree}
  +            if (    defined $tmp->{MemTotal}
  +                and defined $tmp->{Buffers}
  +                and defined $tmp->{Cached}
  +                and defined $tmp->{MemFree}
                      ) {
  -                $sysVMRamUsed  =   $i_meminfo->{MemTotal} 
  -                                 - $i_meminfo->{Buffers} 
  -                                 - $i_meminfo->{Cached} 
  -                                 - $i_meminfo->{MemFree};
  +                $sysVMRamUsed  = int ((  $tmp->{MemTotal} 
  +                                       - $tmp->{Buffers} 
  +                                       - $tmp->{Cached} 
  +                                       - $tmp->{MemFree}
  +                                       ) / 1024 );
               }
   
               #   sysVMRamFree
  @@ -176,10 +196,12 @@
               my $sysVMSwapUsed = undef;
               my $sysVMSwapFree = undef;
   
  +            #   local workspace
  +            my $out; my $raw; my $n2i; my @dat;
  +
               #   sysVMSwapMax, sysVMSwapFree
  -            my $out = $self->{-ctx}->{-sys}->run("/bin/cat /proc/meminfo", "1m"); #FIXME this could be done in perl natively to improve performance
  -            my $raw = $out->{-stdout};
  -            my $i_swapl = {};
  +            $out = $self->{-ctx}->{-sys}->run("/bin/cat /proc/meminfo", "1m");
  +            $raw = $out->{-stdout};
               if ($raw =~ m/\nSwapTotal:[^\n]*\b(\d+)\b[^\n]*kB\n/s) {
                   $sysVMSwapMax  = int($1 / 1024);
               }
  @@ -200,18 +222,22 @@
           # sysVMActivity "/usr/bin/vmstat", add si and so column
           #
           if ($obj->{-name} =~ m/\.sysVMActivity$/) {
  -            my $value = undef;
  -            my $out = $self->{-ctx}->{-sys}->run("/usr/bin/vmstat", "1m");
  -            my $raw = $out->{-stdout};
  -            my $i_vmstat = {};
  +            my $sysVMActivity = undef;
  +
  +            #   local workspace
  +            my $out; my $raw; my $n2i; my @dat;
  +
  +            $out = $self->{-ctx}->{-sys}->run("/usr/bin/vmstat", "1m");
  +            $raw = $out->{-stdout};
  +            $n2i = {};
               if ($raw =~ m/^[^\n]*\n *([^\n]*(\bs[io]\b[^\n]*){2})\n *([^\n]*)\n$/s) {
  -                $i_vmstat = &n2i(split / +/, $1) if (not defined $i_vmstat->{sr});
  +                $n2i = &mkn2i(split / +/, $1) if (not defined $n2i->{sr});
               }
  -            if (defined $i_vmstat->{si} and defined $i_vmstat->{so}) {
  -                my @data = split(/ +/, $3);
  -                $value = @data[$i_vmstat->{si}] + @data[$i_vmstat->{so}];
  +            if (defined $n2i->{si} and defined $n2i->{so}) {
  +                my @dat = split(/ +/, $3);
  +                $sysVMActivity = @dat[$n2i->{si}] + @dat[$n2i->{so}];
               }
  -            $obj->{-value} = $value;
  +            $obj->{-value} = $sysVMActivity;
           }
       }
       elsif ($self->{-ctx}->{-platform}->id() =~ m/SunOS/i) {
  @@ -224,31 +250,37 @@
               my $sysVMRamUsed = undef;
               my $sysVMRamFree = undef;
   
  +            #   local workspace
  +            my $out; my $raw; my $n2i; my @dat; my $arch; my $pagesize; my $tmp;
  +
               #   initialize arch; get or assume pagesize(1)
  -            my $arch = $self->{-ctx}->{-platform}->arch();
  -            my $out = $self->{-ctx}->{-sys}->run("/bin/pagesize", "forever");
  -            my $pagesize = $out->{-stdout} || 4096;
  +            $arch = $self->{-ctx}->{-platform}->arch();
  +            $out = $self->{-ctx}->{-sys}->run("/bin/pagesize", "forever");
  +            $raw = $out->{-stdout};
  +            $pagesize = 4096;
  +            if ($raw =~ m/^(\d+)$/) {
  +                $pagesize = $1;
  +            }
   
               #   sysVMRamMax
  -            my $out = $self->{-ctx}->{-sys}->run("/usr/platform/$arch/sbin/prtdiag -v", "1m");
  -            my $raw = $out->{-stdout};
  +            $out = $self->{-ctx}->{-sys}->run("/usr/platform/$arch/sbin/prtdiag -v", "1m");
  +            $raw = $out->{-stdout};
               if ($raw =~ m/\nMemory size: (\d+) Megabytes/s) {
                   $sysVMRamMax = $1;
               }
   
               #   sysVMRamFree
  -            my $out = $self->{-ctx}->{-sys}->run("/bin/sar -r 1 1", "1m");
  -            my $raw = $out->{-stdout};
  -            my $i_sarr = {};
  +            $out = $self->{-ctx}->{-sys}->run("/bin/sar -r 1 1", "1m");
  +            $raw = $out->{-stdout};
  +            $n2i = {};
               if ($raw =~ m/^.*\n([^\n]*\bfreemem[^\n]*)\n(.*)$/s) {
  -                $i_sarr = &n2i(split / +/, $1) if (scalar keys %$i_sarr == 0);
  +                $n2i = &mkn2i(split / +/, $1);
               }
  -            @data = split(/ +/, $2);
  -            if (defined $i_sarr->{freemem}) {
  -                $sysVMRamFree  = 0 if (not defined $sysVMRamFree);
  -                $sysVMRamFree  += @data[$i_sarr->{freemem}];
  +            @dat = split(/ +/, $2);
  +            if (defined $n2i->{freemem}) {
  +                $tmp = @dat[$n2i->{freemem}];
               }
  -            $sysVMRamFree = int($sysVMRamFree * $pagesize / 1024 / 1024) if (defined $sysVMRamFree);
  +            $sysVMRamFree = int($tmp * $pagesize / 1024 / 1024) if (defined $tmp);
   
               #   sysVMRamUsed
               if (defined $sysVMRamMax and defined $sysVMRamFree) {
  @@ -269,28 +301,33 @@
               my $sysVMSwapUsed = undef;
               my $sysVMSwapFree = undef;
   
  +            #   local workspace
  +            my $out; my $raw; my $n2i; my @dat; my $tmpMax; my $tmpFree;
  +
               #   sysVMSwapMax, sysVMSwapFree
  -            my $out = $self->{-ctx}->{-sys}->run("/usr/sbin/swap -l", "1m");
  -            my $raw = $out->{-stdout};
  -            my $i_swapl = {};
  +            $out = $self->{-ctx}->{-sys}->run("/usr/sbin/swap -l", "1m");
  +            $raw = $out->{-stdout};
  +            my $n2i = {};
               if ($raw =~ m/^\s*([^\n]*\bblocks[^\n]*\bfree[^\n]*)\n(.*)$/s) {
  -                $i_swapl = &n2i(split / +/, $1) if (scalar keys %$i_swapl == 0);
  +                $n2i = &mkn2i(split / +/, $1) if (scalar keys %$n2i == 0);
               }
  +            $tmpMax = undef;
  +            $tmpFree = undef;
               foreach my $r (split /\n/, $2) {
                   if ($r =~ m/^\//) {
  -                    @data = split(/ +/, $r);
  -                    if (defined $i_swapl->{blocks}) {
  -                        $sysVMSwapMax  = 0 if (not defined $sysVMSwapMax);
  -                        $sysVMSwapMax  += @data[$i_swapl->{blocks}];
  +                    @dat = split(/ +/, $r);
  +                    if (defined $n2i->{blocks}) {
  +                        $tmpMax  = 0 if (not defined $tmpMax);
  +                        $tmpMax  += @dat[$n2i->{blocks}];
                       }
  -                    if (defined $i_swapl->{free}) {
  -                        $sysVMSwapFree = 0 if (not defined $sysVMSwapFree);
  -                        $sysVMSwapFree += @data[$i_swapl->{free}];
  +                    if (defined $n2i->{free}) {
  +                        $tmpFree = 0 if (not defined $tmpFree);
  +                        $tmpFree += @dat[$n2i->{free}];
                       }
                   }
               }
  -            $sysVMSwapMax  = int($sysVMSwapMax  * 512 / 1024 / 1024) if (defined $sysVMSwapMax);
  -            $sysVMSwapFree = int($sysVMSwapFree * 512 / 1024 / 1024) if (defined $sysVMSwapFree);
  +            $sysVMSwapMax  = int($tmpMax  * 512 / 1024 / 1024) if (defined $tmpMax);
  +            $sysVMSwapFree = int($tmpFree * 512 / 1024 / 1024) if (defined $tmpFree);
   
               #   sysVMSwapUsed
               if (defined $sysVMSwapMax and defined $sysVMSwapFree) {
  @@ -305,25 +342,29 @@
           # sysVMActivity "/bin/vmstat", sr column
           #
           if ($obj->{-name} =~ m/\.sysVMActivity$/) {
  -            my $value = undef;
  -            my $out = $self->{-ctx}->{-sys}->run("/bin/vmstat", "1m");
  -            my $raw = $out->{-stdout};
  -            my $i_vmstat = {};
  +            my $sysVMActivity = undef;
  +
  +            #   local workspace
  +            my $out; my $raw; my $n2i; my @dat;
  +
  +            $out = $self->{-ctx}->{-sys}->run("/bin/vmstat", "1m");
  +            $raw = $out->{-stdout};
  +            $n2i = {};
               if ($raw =~ m/^[^\n]*\n *([^\n]*\bsr\b[^\n]*)\n *([^\n]*)\n$/s) {
  -                $i_vmstat = &n2i(split / +/, $1) if (not defined $i_vmstat->{sr});
  +                $n2i = &mkn2i(split / +/, $1) if (not defined $n2i->{sr});
               }
  -            if (defined $i_vmstat->{sr}) {
  -                my @data = split(/ +/, $2);
  -                $value = @data[$i_vmstat->{sr}];
  +            if (defined $n2i->{sr}) {
  +                @dat = split(/ +/, $2);
  +                $sysVMActivity = @dat[$n2i->{sr}];
               }
  -            $obj->{-value} = $value;
  +            $obj->{-value} = $sysVMActivity;
           }
       }
       return;
   }
   
   # name to index
  -sub n2i ($) {
  +sub mkn2i ($) {
       my (@name) = @_;
       my $rc = {};
       my $i = 0;
  @@ .

From ossp-cvs-owner@ossp.org  Thu Sep  4 14:36:37 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5EAC07712D; Thu,  4 Sep 2003 14:36:37 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/snmpdx.d/ hwRam.pm ossp-pkg/snmpdx/snmpdx....
Message-Id: <20030904123637.5EAC07712D@mail.ossp.org>
Date: Thu,  4 Sep 2003 14:36:37 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   04-Sep-2003 14:36:37
  Branch: HEAD                             Handle: 2003090413363600

  Added files:
    ossp-pkg/snmpdx/snmpdx.d
                            hwRam.pm
  Modified files:
    ossp-pkg/snmpdx/snmpdx.mib
                            snmpdx.mib

  Log:
    hwRAM for FreeBSD, Linux, SunOS

  Summary:
    Revision    Changes     Path
    1.1         +124 -0     ossp-pkg/snmpdx/snmpdx.d/hwRam.pm
    1.3         +8  -1      ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/hwRam.pm
  ============================================================================
  $ cvs diff -u -r0 -r1.1 hwRam.pm
  --- /dev/null	2003-09-04 14:36:37.000000000 +0200
  +++ hwRam.pm	2003-09-04 14:36:37.000000000 +0200
  @@ -0,0 +1,124 @@
  +##
  +##  snmpdx -- SNMP Daemon Extension
  +##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  hwRam: Hardware, RAM
  +##
  +
  +package My::Probe::hwRam;
  +our @ISA = qw(My::Probe);
  +
  +sub oids ($) {
  +    my ($self) = @_;
  +    return $self->{-ctx}->{-mib}->oids("*.snmpdx.host.hardware.hwRam.*");
  +}
  +
  +sub probe ($$) {
  +    my ($self, $obj) = @_;
  +    my $arch = $self->{-ctx}->{-platform}->arch();
  +
  +    if ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i) {
  +        # hwRamMax    "/sbin/sysctl -n hw.physmem", convert bytes to MB
  +        # hwRamStatus N.A.
  +        #
  +        if ($obj->{-name} =~ m/\.hwRamMax$/) {
  +            my $hwRamMax    = undef;
  +            my $hwRamStatus = undef;
  +
  +            #   local workspace
  +            my $out; my $raw;
  +
  +            #   hwRamMax
  +            $out = $self->{-ctx}->{-sys}->run("/sbin/sysctl -n hw.physmem", "forever");
  +            $raw = $out->{-stdout};
  +            if ($raw =~ m/^(\d+)$/) {
  +                $hwRamMax = int($1 / 1024 / 1024);
  +            }
  +            $obj->{-value} = $hwRamMax;
  +        }
  +    }
  +    elsif ($self->{-ctx}->{-platform}->id() =~ m/Linux/i) {
  +        # hwRamMax    "/bin/dmesg", Memory, convert KB to MB
  +        # hwRamStatus N.A.
  +        #
  +        if ($obj->{-name} =~ m/\.hwRamMax$/) {
  +            my $hwRamMax    = undef;
  +            my $hwRamStatus = undef;
  +
  +            #   local workspace
  +            my $out; my $raw;
  +
  +            #   hwRamMax
  +            $out = $self->{-ctx}->{-sys}->run("/bin/dmesg", "forever");
  +            $raw = $out->{-stdout};
  +            if ($raw =~ m/\nMemory:\s+\d+k\/(\d+)k available/s) {
  +                $hwRamMax = int($1 / 1024);
  +            }
  +            $obj->{-value} = $hwRamMax;
  +        }
  +    }
  +    elsif ($self->{-ctx}->{-platform}->id() =~ m/SunOS/i) {
  +        # hwRamMax    "/usr/platform/$arch/sbin/prtdiag -v", Memory size
  +        # hwRamStatus N.A.
  +        #
  +        #FIXME set prtdiag cache expiry to "forever" when cache supports multiple caching times
  +        #
  +        if ($obj->{-name} =~ m/\.hwRam(Max|Status)$/) {
  +            my $hwRamMax    = undef;
  +            my $hwRamStatus = undef;
  +
  +            #   local workspace
  +            my $out; my $raw; my $n2i; my @dat; my $arch;
  +
  +            #   initialize arch
  +            $arch = $self->{-ctx}->{-platform}->arch();
  +
  +            #   hwRamMax
  +            $out = $self->{-ctx}->{-sys}->run("/usr/platform/$arch/sbin/prtdiag -v", "1m");
  +            $raw = $out->{-stdout};
  +            if ($raw =~ m/\nMemory size: (\d+) Megabytes/s) {
  +                $hwRamMax = $1;
  +            }
  +
  +            #   hwRamStatus
  +            $raw = $out->{-stdout};
  +            if ($raw =~ m/\n=+ Memory =+\n(.*?)\n=+/s) {
  +                $raw = $1;
  +                $hwRamStatus = 1;
  +                foreach $line (split "\n", $raw) {
  +                    my ($bank, $interleavegroup, $socketname, $size, $status) = split(" ", $line);
  +                    if ($bank =~ m/\d/) {
  +                        $hwRamStatus = 0 if ($status !~ /^OK$/);
  +                    }
  +                }
  +            }
  +
  +            $obj->{-value} = $hwRamMax    if ($obj->{-name} =~ m/\.hwRamMax$/);
  +            $obj->{-value} = $hwRamStatus if ($obj->{-name} =~ m/\.hwRamStatus$/);
  +        }
  +    }
  +    return;
  +}
  +
  +1;
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 snmpdx.mib
  --- ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib	3 Sep 2003 09:22:04 -0000	1.2
  +++ ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib	4 Sep 2003 12:36:36 -0000	1.3
  @@ -245,12 +245,19 @@
   hwRam OBJECT IDENTIFIER
       ::= { hardware 3 }
   
  +hwRamMax OBJECT-TYPE
  +    SYNTAX      Gauge32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "installed RAM in MB"
  +    ::= { hwRam 1 }
  +
   hwRamStatus OBJECT-TYPE
       SYNTAX      Integer32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "boolean status of RAM banks"
  -    ::= { hwRam 3 }
  +    ::= { hwRam 2 }
   
   --
   --  Hardware: Disk Space
  @@ .

From ossp-cvs-owner@ossp.org  Mon Sep  8 12:48:32 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 65C2B77156; Mon,  8 Sep 2003 12:48:32 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/snmpdx.d/ hwRam.pm
Message-Id: <20030908104832.65C2B77156@mail.ossp.org>
Date: Mon,  8 Sep 2003 12:48:32 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   08-Sep-2003 12:48:32
  Branch: HEAD                             Handle: 2003090811483100

  Modified files:
    ossp-pkg/snmpdx/snmpdx.d
                            hwRam.pm

  Log:
    add redundant command for consistency

  Summary:
    Revision    Changes     Path
    1.2         +1  -0      ossp-pkg/snmpdx/snmpdx.d/hwRam.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/hwRam.pm
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 hwRam.pm
  --- ossp-pkg/snmpdx/snmpdx.d/hwRam.pm	4 Sep 2003 12:36:36 -0000	1.1
  +++ ossp-pkg/snmpdx/snmpdx.d/hwRam.pm	8 Sep 2003 10:48:31 -0000	1.2
  @@ -101,6 +101,7 @@
               }
   
               #   hwRamStatus
  +            $out = $self->{-ctx}->{-sys}->run("/usr/platform/$arch/sbin/prtdiag -v", "1m");
               $raw = $out->{-stdout};
               if ($raw =~ m/\n=+ Memory =+\n(.*?)\n=+/s) {
                   $raw = $1;
  @@ .

From ossp-cvs-owner@ossp.org  Mon Sep  8 12:49:36 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9DD2577156; Mon,  8 Sep 2003 12:49:36 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/snmpdx.d/ hwCpu.pm ossp-pkg/snmpdx/snmpdx....
Message-Id: <20030908104936.9DD2577156@mail.ossp.org>
Date: Mon,  8 Sep 2003 12:49:36 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   08-Sep-2003 12:49:36
  Branch: HEAD                             Handle: 2003090811493501

  Modified files:
    ossp-pkg/snmpdx/snmpdx.d
                            hwCpu.pm
    ossp-pkg/snmpdx/snmpdx.mib
                            snmpdx.mib

  Log:
    implement hwCpuSpeed and hwCpuTemp as array

  Summary:
    Revision    Changes     Path
    1.2         +60 -17     ossp-pkg/snmpdx/snmpdx.d/hwCpu.pm
    1.4         +28 -8      ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/hwCpu.pm
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 hwCpu.pm
  --- ossp-pkg/snmpdx/snmpdx.d/hwCpu.pm	1 Sep 2003 15:22:42 -0000	1.1
  +++ ossp-pkg/snmpdx/snmpdx.d/hwCpu.pm	8 Sep 2003 10:49:35 -0000	1.2
  @@ -36,27 +36,70 @@
   sub probe ($$) {
       my ($self, $obj) = @_;
   
  -    if ($obj->{-name} =~ m|\.hwCpuNum$|) {
  -        if ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i) {
  -            #   query sysctl(8)
  -            my $out = $self->{-ctx}->{-sys}->run("/sbin/sysctl -n hw.ncpu", "forever");
  -            $obj->{-value} = $out->{-stdout};
  -            $obj->{-value} =~ s/^\s*(.+?)\s*$/$1/s;
  +    if ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i) {
  +        #   query sysctl(8)
  +        my $out = $self->{-ctx}->{-sys}->run("/sbin/sysctl -n hw.ncpu", "forever");
  +        $obj->{-value} = $out->{-stdout};
  +        $obj->{-value} =~ s/^\s*(.+?)\s*$/$1/s;
  +    }
  +    elsif ($self->{-ctx}->{-platform}->id() =~ m/Linux/i) {
  +        #   query dmesg(8)
  +        #   FIXME: this works only within a reasonable time after booting
  +        #          but I don't know any alternative method for querying the speed!
  +        my $out = $self->{-ctx}->{-sys}->run("/sbin/dmesg", "forever");
  +        if ($out->{-stdout} =~ m|(\d+)(\.\d+)?[ -]*MHz|si) {
  +            $obj->{-value} = $1;
           }
       }
  -    elsif ($obj->{-name} =~ m|\.hwCpuSpeed$|) {
  -        if ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i) {
  -            #   query dmesg(8)
  -            #   FIXME: this works only within a reasonable time after booting
  -            #          but I don't know any alternative method for querying the speed!
  -            my $out = $self->{-ctx}->{-sys}->run("/sbin/dmesg", "forever");
  -            if ($out->{-stdout} =~ m|(\d+)(\.\d+)?[ -]*MHz|si) {
  -                $obj->{-value} = $1;
  +    elsif($self->{-ctx}->{-platform}->id() =~ m/SunOS/i) {
  +        my $hwCpuNum   = undef;
  +        #  $hwCpuSpeed see @dat[]->{hwCpuSpeed}
  +        #  $hwCpuTemp  see @dat[]->{hwCpuTemp}
  +
  +        #   local workspace
  +        my $out; my $raw; my @dat; my $arch;
  +
  +        #   initialize arch
  +        $arch = $self->{-ctx}->{-platform}->arch();
  +
  +        #   hwCpuSpeed
  +        $out = $self->{-ctx}->{-sys}->run("/usr/platform/$arch/sbin/prtdiag -v", "1m");
  +        $raw = $out->{-stdout};
  +        if ($raw =~ m/\n=+ CPUs =+\n.*?\n---[ -]+\n(.*?)\n=+/s) {
  +            $raw = $1;
  +            foreach $line (split "\n", $raw) {
  +                my ($brd,$cpu,$module,$mhz,$mb,$impl,$mask) = split(" ", $line);
  +                if ($cpu =~ m/^\d+$/) {
  +                    @dat[$cpu] = {} if (not defined @dat[$cpu]);
  +                    @dat[$cpu]->{hwCpuSpeed} = $mhz;
  +                }
               }
           }
  -    }
  -    elsif ($obj->{-name} =~ m|\.hwCpuTemp$|) {
  -        if ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i) {
  +
  +        #   hwCpuTemp
  +        $out = $self->{-ctx}->{-sys}->run("/usr/platform/$arch/sbin/prtdiag -v", "1m");
  +        $raw = $out->{-stdout};
  +        if ($raw =~ m/\n=+ Environmental Status =+\n\nSystem Temperatures \(Celsius\):\n-+\n(.*?)\n=+/s) {
  +            $raw = $1;
  +            foreach $line (split "\n", $raw) {
  +                my ($cpu,$temp) = split(" ", $line);
  +                if ($cpu =~ m/CPU(\d+)/) {
  +                    $cpu = $1;
  +                    @dat[$cpu] = {} if (not defined @dat[$cpu]);
  +                    @dat[$cpu]->{hwCpuTemp} = $temp;
  +                }
  +            }
  +        }
  +
  +        #   hwCpuNum
  +        $hwCpuNum = $#{@dat} + 1;
  +        
  +        $obj->{-value} = $hwCpuNum   if ($obj->{-name} =~ m/\.hwCpuNum$/);
  +        if ($obj->{-name} =~ m/\.hwCpuInfoENTRY\.([^.]+)\.(\d+)$/) {
  +            my $col = $1;
  +            my $row = ($2 > 0 ? $2 - 1 : 0);
  +            $self->{-ctx}->{-log}->printf(4, "col=%s row=%s", $col, $row);
  +            $obj->{-value} = @dat[$row]->{$col} if (defined @dat[$row]->{$col});
           }
       }
       return;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 snmpdx.mib
  --- ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib	4 Sep 2003 12:36:36 -0000	1.3
  +++ ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib	8 Sep 2003 10:49:36 -0000	1.4
  @@ -18,7 +18,7 @@
   enterprises    OBJECT IDENTIFIER ::= { private 1 }
   
   cw             OBJECT IDENTIFIER ::= { enterprises 4007 }
  -snmpdx         OBJECT IDENTIFIER ::= { cw 42 }
  +snmpdx         OBJECT IDENTIFIER ::= { cw 43 }
   
   host           OBJECT IDENTIFIER ::= { snmpdx 1 }
   hardware       OBJECT IDENTIFIER ::= { host 1 }
  @@ -224,19 +224,39 @@
       DESCRIPTION "number of CPUs"
       ::= { hwCpu 1 }
   
  -hwCpuSpeed OBJECT-TYPE
  -    SYNTAX      Integer32
  -    MAX-ACCESS  read-only
  +hwCpuInfoTABLE OBJECT-TYPE
  +    SYNTAX	    SEQUENCE OF HwCpuIndexENTRY
  +    MAX-ACCESS  not-accessible
       STATUS      current
  -    DESCRIPTION "number of CPUs"
  +    DESCRIPTION "FIXME Table description!?"
       ::= { hwCpu 2 }
   
  +hwCpuInfoENTRY OBJECT-TYPE
  +    SYNTAX	    HwCpuIndexENTRY
  +    MAX-ACCESS	not-accessible
  +    STATUS	    current
  +    DESCRIPTION "FIXME Row description!?"
  +    INDEX	    { hwCpuInfoIndex }
  +    ::= { hwCpuInfoTABLE 1 }
  +
  +HwCpuIndexENTRY ::= SEQUENCE {
  +    hwCpuSpeed Integer32,
  +    hwCpuTemp  Integer32
  +}
  +
  +hwCpuSpeed OBJECT-TYPE
  +    SYNTAX	    Integer32
  +    MAX-ACCESS	read-only
  +    STATUS	    current
  +    DESCRIPTION "CPU speed [MHz]"
  +    ::= { hwCpuInfoENTRY 1 }
  +
   hwCpuTemp OBJECT-TYPE
  -    SYNTAX      Gauge32
  +    SYNTAX      Integer32
       MAX-ACCESS  read-only
       STATUS      current
  -    DESCRIPTION "temperature of CPU"
  -    ::= { hwCpu 3 }
  +    DESCRIPTION "CPU temperature [Celsius]"
  +    ::= { hwCpuInfoENTRY 3 }
   
   --
   --  Hardware: RAM
  @@ .

From ossp-cvs-owner@ossp.org  Mon Sep  8 13:07:57 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7E2957715A; Mon,  8 Sep 2003 13:07:57 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/snmpdx.d/ hwCpu.pm
Message-Id: <20030908110757.7E2957715A@mail.ossp.org>
Date: Mon,  8 Sep 2003 13:07:57 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   08-Sep-2003 13:07:57
  Branch: HEAD                             Handle: 2003090812075600

  Modified files:
    ossp-pkg/snmpdx/snmpdx.d
                            hwCpu.pm

  Log:
    hwCpuNum for FreeBSD, Linux, SunOS

  Summary:
    Revision    Changes     Path
    1.3         +29 -8      ossp-pkg/snmpdx/snmpdx.d/hwCpu.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/hwCpu.pm
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 hwCpu.pm
  --- ossp-pkg/snmpdx/snmpdx.d/hwCpu.pm	8 Sep 2003 10:49:35 -0000	1.2
  +++ ossp-pkg/snmpdx/snmpdx.d/hwCpu.pm	8 Sep 2003 11:07:56 -0000	1.3
  @@ -37,24 +37,45 @@
       my ($self, $obj) = @_;
   
       if ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i) {
  +        my $hwCpuNum   = undef;
  +        my $hwCpuSpeed = undef; #N/A
  +        my $hwCpuTemp  = undef; #N/A
  +
  +        #   local workspace
  +        my $out; my $raw;
  +
           #   query sysctl(8)
  -        my $out = $self->{-ctx}->{-sys}->run("/sbin/sysctl -n hw.ncpu", "forever");
  -        $obj->{-value} = $out->{-stdout};
  -        $obj->{-value} =~ s/^\s*(.+?)\s*$/$1/s;
  +        $out = $self->{-ctx}->{-sys}->run("/sbin/sysctl -n hw.ncpu", "forever");
  +        $raw = $out->{-stdout};
  +        if ($raw =~ m/^\s*(.+?)\s*$/s) {
  +            $hwCpuNum = $1;
  +        }
  +
  +        $obj->{-value} = $hwCpuNum if ($obj->{-name} =~ m/\.hwCpuNum$/);
       }
       elsif ($self->{-ctx}->{-platform}->id() =~ m/Linux/i) {
  +        my $hwCpuNum   = undef;
  +        my $hwCpuSpeed = undef; #N/A
  +        my $hwCpuTemp  = undef; #N/A
  +
  +        #   local workspace
  +        my $out; my $raw;
  +
           #   query dmesg(8)
           #   FIXME: this works only within a reasonable time after booting
           #          but I don't know any alternative method for querying the speed!
  -        my $out = $self->{-ctx}->{-sys}->run("/sbin/dmesg", "forever");
  -        if ($out->{-stdout} =~ m|(\d+)(\.\d+)?[ -]*MHz|si) {
  -            $obj->{-value} = $1;
  +        $out = $self->{-ctx}->{-sys}->run("/bin/dmesg", "forever");
  +        $raw = $out->{-stdout};
  +        if ($raw =~ m/\nProcessors: (\d+)\n/si) {
  +            $hwCpuNum = $1;
           }
  +
  +        $obj->{-value} = $hwCpuNum if ($obj->{-name} =~ m/\.hwCpuNum$/);
       }
       elsif($self->{-ctx}->{-platform}->id() =~ m/SunOS/i) {
           my $hwCpuNum   = undef;
  -        #  $hwCpuSpeed see @dat[]->{hwCpuSpeed}
  -        #  $hwCpuTemp  see @dat[]->{hwCpuTemp}
  +        my $hwCpuSpeed = undef; #see @dat[]->{hwCpuSpeed}
  +        my $hwCpuTemp  = undef; #see @dat[]->{hwCpuTemp}
   
           #   local workspace
           my $out; my $raw; my @dat; my $arch;
  @@ .

From ossp-cvs-owner@ossp.org  Mon Sep  8 13:16:14 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5CE5477155; Mon,  8 Sep 2003 13:16:14 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/platform/ BRAINSTORM COPYING Makefile README plat...
Message-Id: <20030908111614.5CE5477155@mail.ossp.org>
Date: Mon,  8 Sep 2003 13:16:14 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Sep-2003 13:16:14
  Branch: HEAD                             Handle: 2003090812161300

  Added files:
    ossp-pkg/platform       BRAINSTORM COPYING Makefile README platform.pod
                            platform.sh

  Log:
    initial OSSP platform (FreeBSD, Linux and Solaris support only)

  Summary:
    Revision    Changes     Path
    1.1         +74 -0      ossp-pkg/platform/BRAINSTORM
    1.1         +280 -0     ossp-pkg/platform/COPYING
    1.1         +12 -0      ossp-pkg/platform/Makefile
    1.1         +43 -0      ossp-pkg/platform/README
    1.1         +63 -0      ossp-pkg/platform/platform.pod
    1.1         +477 -0     ossp-pkg/platform/platform.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/platform/BRAINSTORM
  ============================================================================
  $ cvs diff -u -r0 -r1.1 BRAINSTORM
  --- /dev/null	2003-09-08 13:16:13.000000000 +0200
  +++ BRAINSTORM	2003-09-08 13:16:13.000000000 +0200
  @@ -0,0 +1,74 @@
  +
  +concatenator char "/" +
  +separator    char " " /
  +lowercase    yes/no
  +
  +verbose      yes/no (with vendor name prefixed or not)  Sun Solaris (with [] parts)
  +normal                                                  Solaris     (without [] parts)
  +concise      yes/no (reduced to single word)            Solaris     (only <> parts or if no <> without [] and without special chars)
  +
  +RPM Filenames: --rpm ==> --sep="" --conc="+" --format="%{ap}-%{sp}" 
  +ia32-lsb2.0
  +ix86-redhat9
  +i686-gnu+linux2.2.3+2.4.22
  +
  +RPM .spec checks: --check ==> --sep="-" --conc="/" --format="%{at}:%{st}" 
  +ia32-lsb-2.0
  +ix86-redhat-9
  +i686-gnu+linux-2.2.3+2.4.22
  +
  +Web Identifiers: --id ==> --sep="-" --conc="+" --format="%{at}/%{st}" 
  +IA32/LSB2.0
  +ix86/RedHat-9
  +i686/GNU+Linux-2.2.3+2.4.22
  +
  +README/INSTALL files: --human ==> --sep=" " --conc="/" --format="%{sp} (%{ap})" 
  +LSB2.0 (IA32)
  +RedHat 9 (i686)
  +GNU/Linux 2.2.3/2.4.22 (i686)
  +
  +--all ==> --class --prod --tech
  +--class ==> Xc
  +--prod  ==> Xp
  +--tech  ==> xt
  +
  +--verbose                ==> []
  +--normal (or nothing)    ==> {}
  +--concise                ==> <>
  +
  +hardware architecture
  +- class       %ac       SPARC     SPARC     IA32  IA64  HPPA     Alpha    PPC         M68K
  +- product     %ap       sparc32   sparc64   ix86  ia64  hppa     alpha    PowerPC5    m6800x
  +- technology  %at       sun4c     sun4u     i686  ia64  hppa2.0  alphav5  PowerPC50x0 M68004
  +operating system
  +- class       %sc       SVR5            SVR4      4.4BSD              4.4BSD      LSB2.0                  4.2BSD
  +- product     %sp       OpenUNIX 8.0    Solaris9  FreeBSD4.8          NetBSD1.6   RedHat9                 Tru64 5.1B
  +- technology  %st       UnixWare/7.1.3  SunOS/5.9 FreeBSD/4.8-STABLE  NetBSD/1.6.1 GNU/Linux 2.2.3/2.4.22 OSF1/5.01
  +
  +"[Sun ]<Solaris> 9"
  +"[SCO ]UnixWare 7.1[.3]"
  +"FreeBSD 4.8[-STABLE]"
  +"<Debian>[ GNU/Linux] 2.2[.5]"
  +"GNU/<Linux> [3.3.1/]2.2.4/<2.4>.22"
  +
  +%(xx) with all parenthesis
  +%[xx]
  +%{xx} %xx
  +%<xx>
  +
  +/:+ " ":-
  +linux-2.4
  +
  +--------------------------
  +    capacity
  +        - CPU speed
  +        - RAM size
  +        - Disk size
  +        - Network bandwidth
  +cp_cpu
  +cp_ram
  +cp_dsk
  +cp_net
  +
  +platform
  +    
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/platform/COPYING
  ============================================================================
  $ cvs diff -u -r0 -r1.1 COPYING
  --- /dev/null	2003-09-08 13:16:13.000000000 +0200
  +++ COPYING	2003-09-08 13:16:13.000000000 +0200
  @@ -0,0 +1,280 @@
  +                    GNU GENERAL PUBLIC LICENSE
  +                       Version 2, June 1991
  +
  + Copyright (C) 1989, 1991 Free Software Foundation, Inc.
  +                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  + Everyone is permitted to copy and distribute verbatim copies
  + of this license document, but changing it is not allowed.
  +
  +                            Preamble
  +
  +  The licenses for most software are designed to take away your
  +freedom to share and change it.  By contrast, the GNU General Public
  +License is intended to guarantee your freedom to share and change free
  +software--to make sure the software is free for all its users.  This
  +General Public License applies to most of the Free Software
  +Foundation's software and to any other program whose authors commit to
  +using it.  (Some other Free Software Foundation software is covered by
  +the GNU Library General Public License instead.)  You can apply it to
  +your programs, too.
  +
  +  When we speak of free software, we are referring to freedom, not
  +price.  Our General Public Licenses are designed to make sure that you
  +have the freedom to distribute copies of free software (and charge for
  +this service if you wish), that you receive source code or can get it
  +if you want it, that you can change the software or use pieces of it
  +in new free programs; and that you know you can do these things.
  +
  +  To protect your rights, we need to make restrictions that forbid
  +anyone to deny you these rights or to ask you to surrender the rights.
  +These restrictions translate to certain responsibilities for you if you
  +distribute copies of the software, or if you modify it.
  +
  +  For example, if you distribute copies of such a program, whether
  +gratis or for a fee, you must give the recipients all the rights that
  +you have.  You must make sure that they, too, receive or can get the
  +source code.  And you must show them these terms so they know their
  +rights.
  +
  +  We protect your rights with two steps: (1) copyright the software, and
  +(2) offer you this license which gives you legal permission to copy,
  +distribute and/or modify the software.
  +
  +  Also, for each author's protection and ours, we want to make certain
  +that everyone understands that there is no warranty for this free
  +software.  If the software is modified by someone else and passed on, we
  +want its recipients to know that what they have is not the original, so
  +that any problems introduced by others will not reflect on the original
  +authors' reputations.
  +
  +  Finally, any free program is threatened constantly by software
  +patents.  We wish to avoid the danger that redistributors of a free
  +program will individually obtain patent licenses, in effect making the
  +program proprietary.  To prevent this, we have made it clear that any
  +patent must be licensed for everyone's free use or not licensed at all.
  +
  +  The precise terms and conditions for copying, distribution and
  +modification follow.
  +
  +                    GNU GENERAL PUBLIC LICENSE
  +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
  +
  +  0. This License applies to any program or other work which contains
  +a notice placed by the copyright holder saying it may be distributed
  +under the terms of this General Public License.  The "Program", below,
  +refers to any such program or work, and a "work based on the Program"
  +means either the Program or any derivative work under copyright law:
  +that is to say, a work containing the Program or a portion of it,
  +either verbatim or with modifications and/or translated into another
  +language.  (Hereinafter, translation is included without limitation in
  +the term "modification".)  Each licensee is addressed as "you".
  +
  +Activities other than copying, distribution and modification are not
  +covered by this License; they are outside its scope.  The act of
  +running the Program is not restricted, and the output from the Program
  +is covered only if its contents constitute a work based on the
  +Program (independent of having been made by running the Program).
  +Whether that is true depends on what the Program does.
  +
  +  1. You may copy and distribute verbatim copies of the Program's
  +source code as you receive it, in any medium, provided that you
  +conspicuously and appropriately publish on each copy an appropriate
  +copyright notice and disclaimer of warranty; keep intact all the
  +notices that refer to this License and to the absence of any warranty;
  +and give any other recipients of the Program a copy of this License
  +along with the Program.
  +
  +You may charge a fee for the physical act of transferring a copy, and
  +you may at your option offer warranty protection in exchange for a fee.
  +
  +  2. You may modify your copy or copies of the Program or any portion
  +of it, thus forming a work based on the Program, and copy and
  +distribute such modifications or work under the terms of Section 1
  +above, provided that you also meet all of these conditions:
  +
  +    a) You must cause the modified files to carry prominent notices
  +    stating that you changed the files and the date of any change.
  +
  +    b) You must cause any work that you distribute or publish, that in
  +    whole or in part contains or is derived from the Program or any
  +    part thereof, to be licensed as a whole at no charge to all third
  +    parties under the terms of this License.
  +
  +    c) If the modified program normally reads commands interactively
  +    when run, you must cause it, when started running for such
  +    interactive use in the most ordinary way, to print or display an
  +    announcement including an appropriate copyright notice and a
  +    notice that there is no warranty (or else, saying that you provide
  +    a warranty) and that users may redistribute the program under
  +    these conditions, and telling the user how to view a copy of this
  +    License.  (Exception: if the Program itself is interactive but
  +    does not normally print such an announcement, your work based on
  +    the Program is not required to print an announcement.)
  +
  +These requirements apply to the modified work as a whole.  If
  +identifiable sections of that work are not derived from the Program,
  +and can be reasonably considered independent and separate works in
  +themselves, then this License, and its terms, do not apply to those
  +sections when you distribute them as separate works.  But when you
  +distribute the same sections as part of a whole which is a work based
  +on the Program, the distribution of the whole must be on the terms of
  +this License, whose permissions for other licensees extend to the
  +entire whole, and thus to each and every part regardless of who wrote it.
  +
  +Thus, it is not the intent of this section to claim rights or contest
  +your rights to work written entirely by you; rather, the intent is to
  +exercise the right to control the distribution of derivative or
  +collective works based on the Program.
  +
  +In addition, mere aggregation of another work not based on the Program
  +with the Program (or with a work based on the Program) on a volume of
  +a storage or distribution medium does not bring the other work under
  +the scope of this License.
  +
  +  3. You may copy and distribute the Program (or a work based on it,
  +under Section 2) in object code or executable form under the terms of
  +Sections 1 and 2 above provided that you also do one of the following:
  +
  +    a) Accompany it with the complete corresponding machine-readable
  +    source code, which must be distributed under the terms of Sections
  +    1 and 2 above on a medium customarily used for software interchange; or,
  +
  +    b) Accompany it with a written offer, valid for at least three
  +    years, to give any third party, for a charge no more than your
  +    cost of physically performing source distribution, a complete
  +    machine-readable copy of the corresponding source code, to be
  +    distributed under the terms of Sections 1 and 2 above on a medium
  +    customarily used for software interchange; or,
  +
  +    c) Accompany it with the information you received as to the offer
  +    to distribute corresponding source code.  (This alternative is
  +    allowed only for noncommercial distribution and only if you
  +    received the program in object code or executable form with such
  +    an offer, in accord with Subsection b above.)
  +
  +The source code for a work means the preferred form of the work for
  +making modifications to it.  For an executable work, complete source
  +code means all the source code for all modules it contains, plus any
  +associated interface definition files, plus the scripts used to
  +control compilation and installation of the executable.  However, as a
  +special exception, the source code distributed need not include
  +anything that is normally distributed (in either source or binary
  +form) with the major components (compiler, kernel, and so on) of the
  +operating system on which the executable runs, unless that component
  +itself accompanies the executable.
  +
  +If distribution of executable or object code is made by offering
  +access to copy from a designated place, then offering equivalent
  +access to copy the source code from the same place counts as
  +distribution of the source code, even though third parties are not
  +compelled to copy the source along with the object code.
  +
  +  4. You may not copy, modify, sublicense, or distribute the Program
  +except as expressly provided under this License.  Any attempt
  +otherwise to copy, modify, sublicense or distribute the Program is
  +void, and will automatically terminate your rights under this License.
  +However, parties who have received copies, or rights, from you under
  +this License will not have their licenses terminated so long as such
  +parties remain in full compliance.
  +
  +  5. You are not required to accept this License, since you have not
  +signed it.  However, nothing else grants you permission to modify or
  +distribute the Program or its derivative works.  These actions are
  +prohibited by law if you do not accept this License.  Therefore, by
  +modifying or distributing the Program (or any work based on the
  +Program), you indicate your acceptance of this License to do so, and
  +all its terms and conditions for copying, distributing or modifying
  +the Program or works based on it.
  +
  +  6. Each time you redistribute the Program (or any work based on the
  +Program), the recipient automatically receives a license from the
  +original licensor to copy, distribute or modify the Program subject to
  +these terms and conditions.  You may not impose any further
  +restrictions on the recipients' exercise of the rights granted herein.
  +You are not responsible for enforcing compliance by third parties to
  +this License.
  +
  +  7. If, as a consequence of a court judgment or allegation of patent
  +infringement or for any other reason (not limited to patent issues),
  +conditions are imposed on you (whether by court order, agreement or
  +otherwise) that contradict the conditions of this License, they do not
  +excuse you from the conditions of this License.  If you cannot
  +distribute so as to satisfy simultaneously your obligations under this
  +License and any other pertinent obligations, then as a consequence you
  +may not distribute the Program at all.  For example, if a patent
  +license would not permit royalty-free redistribution of the Program by
  +all those who receive copies directly or indirectly through you, then
  +the only way you could satisfy both it and this License would be to
  +refrain entirely from distribution of the Program.
  +
  +If any portion of this section is held invalid or unenforceable under
  +any particular circumstance, the balance of the section is intended to
  +apply and the section as a whole is intended to apply in other
  +circumstances.
  +
  +It is not the purpose of this section to induce you to infringe any
  +patents or other property right claims or to contest validity of any
  +such claims; this section has the sole purpose of protecting the
  +integrity of the free software distribution system, which is
  +implemented by public license practices.  Many people have made
  +generous contributions to the wide range of software distributed
  +through that system in reliance on consistent application of that
  +system; it is up to the author/donor to decide if he or she is willing
  +to distribute software through any other system and a licensee cannot
  +impose that choice.
  +
  +This section is intended to make thoroughly clear what is believed to
  +be a consequence of the rest of this License.
  +
  +  8. If the distribution and/or use of the Program is restricted in
  +certain countries either by patents or by copyrighted interfaces, the
  +original copyright holder who places the Program under this License
  +may add an explicit geographical distribution limitation excluding
  +those countries, so that distribution is permitted only in or among
  +countries not thus excluded.  In such case, this License incorporates
  +the limitation as if written in the body of this License.
  +
  +  9. The Free Software Foundation may publish revised and/or new versions
  +of the General Public License from time to time.  Such new versions will
  +be similar in spirit to the present version, but may differ in detail to
  +address new problems or concerns.
  +
  +Each version is given a distinguishing version number.  If the Program
  +specifies a version number of this License which applies to it and "any
  +later version", you have the option of following the terms and conditions
  +either of that version or of any later version published by the Free
  +Software Foundation.  If the Program does not specify a version number of
  +this License, you may choose any version ever published by the Free Software
  +Foundation.
  +
  +  10. If you wish to incorporate parts of the Program into other free
  +programs whose distribution conditions are different, write to the author
  +to ask for permission.  For software which is copyrighted by the Free
  +Software Foundation, write to the Free Software Foundation; we sometimes
  +make exceptions for this.  Our decision will be guided by the two goals
  +of preserving the free status of all derivatives of our free software and
  +of promoting the sharing and reuse of software generally.
  +
  +                            NO WARRANTY
  +
  +  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
  +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
  +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
  +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
  +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
  +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
  +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
  +REPAIR OR CORRECTION.
  +
  +  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
  +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
  +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
  +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
  +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
  +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
  +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
  +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
  +POSSIBILITY OF SUCH DAMAGES.
  +
  +                     END OF TERMS AND CONDITIONS
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/platform/Makefile
  ============================================================================
  $ cvs diff -u -r0 -r1.1 Makefile
  --- /dev/null	2003-09-08 13:16:13.000000000 +0200
  +++ Makefile	2003-09-08 13:16:13.000000000 +0200
  @@ -0,0 +1,12 @@
  +
  +all:
  +	@echo "==== verbose ===="; \
  +	sh platform.sh -v; \
  +	echo "==== normal ===="; \
  +	sh platform.sh; \
  +	echo "==== concise ===="; \
  +	sh platform.sh -c; \
  +	echo "==== various ===="; \
  +	echo . | awk '{ printf("rpm-file:  "); }'; sh platform.sh -L -F "%ap-%sp" -S "" -C "+"; \
  +	echo . | awk '{ printf("rpm-check: "); }'; sh platform.sh -L -F "%at-%st" -S "" -C "+"
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/platform/README
  ============================================================================
  $ cvs diff -u -r0 -r1.1 README
  --- /dev/null	2003-09-08 13:16:13.000000000 +0200
  +++ README	2003-09-08 13:16:13.000000000 +0200
  @@ -0,0 +1,43 @@
  +   _        ___  ____ ____  ____          _       _    __
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _ __ | | __ _| |_ / _| ___  _ __ _ __ ___
  +  _|_||_| | | | \___ \___ \| |_) | | '_ \| |/ _` | __| |_ / _ \| '__| '_ ` _ \
  + |_||_|_| | |_| |___) |__) |  __/  | |_) | | (_| | |_|  _| (_) | |  | | | | | |
  +  |_|_|_|  \___/|____/____/|_|     | .__/|_|\__,_|\__|_|  \___/|_|  |_| |_| |_|
  +                                   |_|
  +
  +  OSSP platform - Unix Platform Identification
  +  Version 0.1.0 (09-Sep-2003)
  +
  +  ABSTRACT
  +
  +  OSSP platform is ...
  +
  +  COPYRIGHT AND LICENSE
  +
  +  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +
  +  This file is part of OSSP platform, a Unix platform identification
  +  program which can be found at http://www.ossp.org/pkg/tool/platform/.
  +
  +  This program is free software; you can redistribute it and/or modify
  +  it under the terms of the GNU General Public License as published by
  +  the Free Software Foundation; either version 2 of the License, or
  +  (at your option) any later version.
  +
  +  This program is distributed in the hope that it will be useful,
  +  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +  General Public License for more details.
  +
  +  You should have received a copy of the GNU General Public License
  +  along with this program; if not, write to the Free Software
  +  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +
  +  SEE ALSO
  +
  +  o Homepage ....... http://www.ossp.org/pkg/tool/platform/
  +  o Sources ........ http://cvs.ossp.org/pkg/tool/platform/
  +  o Distribution .... ftp://ftp.ossp.org/pkg/tool/platform/
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/platform/platform.pod
  ============================================================================
  $ cvs diff -u -r0 -r1.1 platform.pod
  --- /dev/null	2003-09-08 13:16:13.000000000 +0200
  +++ platform.pod	2003-09-08 13:16:14.000000000 +0200
  @@ -0,0 +1,63 @@
  +##
  +##  OSSP platform - Platform Identification
  +##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +##
  +##  This file is part of OSSP platform, a Unix platform identification
  +##  program which can be found at http://www.ossp.org/pkg/tool/platform/.
  +##
  +##  This program is free software; you can redistribute it and/or modify
  +##  it under the terms of the GNU General Public License as published by
  +##  the Free Software Foundation; either version 2.0 of the License, or
  +##  (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this library; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  platform.pod: the manual page (language: Plain Old Document)
  +##
  +
  +=pod
  +
  +=head1 NAME
  +
  +B<OSSP platform> - Unix Platform Identification
  +
  +=head1 SYNOPSIS
  +
  +...
  +
  +=head1 DESCRIPTION
  +
  +...
  +
  +=head1 SEE ALSO
  +
  +http://www.ossp.org/pkg/tool/platform/.
  +
  +uname(3), GNU F<config.guess>.
  +
  +=head1 HISTORY
  +
  +B<OSSP platform> was implemented in September 2003 by I<Ralf S.
  +Engelschall> for use in the B<OSSP> and B<OpenPKG> projects. It was
  +prompted by the need in B<OpenPKG> to have both product (for RPM
  +filenames) and technology (for build-time decisions) identifiers for the
  +Unix platforms packages are maintained for. It was inspired by B<GNU>
  +F<config.guess> and older B<GNU shtool> F<guessos> command.
  +
  +=head1 AUTHOR
  +
  + Ralf S. Engelschall
  + rse@engelschall.com
  + www.engelschall.com
  +
  +=cut
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/platform/platform.sh
  ============================================================================
  $ cvs diff -u -r0 -r1.1 platform.sh
  --- /dev/null	2003-09-08 13:16:13.000000000 +0200
  +++ platform.sh	2003-09-08 13:16:14.000000000 +0200
  @@ -0,0 +1,477 @@
  +##
  +##  OSSP platform - Platform Identification
  +##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +##
  +##  This file is part of OSSP platform, a Unix platform identification
  +##  program which can be found at http://www.ossp.org/pkg/tool/platform/.
  +##
  +##  This program is free software; you can redistribute it and/or modify
  +##  it under the terms of the GNU General Public License as published by
  +##  the Free Software Foundation; either version 2.0 of the License, or
  +##  (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this library; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  platform.sh: the program (language: Bourne-Shell)
  +##
  +
  +#   program information
  +prog_run="${prog_run}"
  +prog_cmd="platform"
  +prog_name="OSSP platform"
  +prog_vers="0.1.0"
  +prog_date="06-Sep-2003"
  +
  +##  _________________________________________________________________________
  +##
  +##                           COMMAND LINE PARSING
  +##                (partly derived from GNU shtool's sh.common)
  +##  _________________________________________________________________________
  +##
  +
  +#   the command line specification
  +str_usage="[-F|--format FORMAT]"
  +str_usage="$str_usage [-S|--sep STRING]"
  +str_usage="$str_usage [-C|--conc STRING]"
  +str_usage="$str_usage [-L|--lower]"
  +str_usage="$str_usage [-U|--lower]"
  +str_usage="$str_usage [-T|--type TYPE]"
  +str_usage="$str_usage [-v|--verbose]"
  +str_usage="$str_usage [-c|--concise]"
  +str_usage="$str_usage [-n|--newline]"
  +str_usage="$str_usage [-d|--debug]"
  +str_usage="$str_usage [-V|--version]"
  +str_usage="$str_usage [-h|--help]"
  +arg_spec="0="
  +opt_spec="F:S:C:L.U.T:v.c.n.d.V.h."
  +opt_alias="F:format,S:sep,C:conc,L:lower,T:type,v:verbose,c:consise,n:newline,d:debug,V:version,h:help"
  +opt_F="Class:      %sc (%ac)\\nProduct:    %sp (%ap)\\nTechnology: %st (%at)"
  +opt_S=" "
  +opt_C="/"
  +opt_L=no
  +opt_U=no
  +opt_T=""
  +opt_v=no
  +opt_c=no
  +opt_n=no
  +opt_d=no
  +opt_V=no
  +opt_h=no
  +
  +#   commonly used ASCII values
  +ASC_TAB="   "
  +ASC_NL="
  +"
  +
  +#   parse argument specification string
  +eval `echo $arg_spec |\
  +      sed -e 's/^\([0-9]*\)\([+=]\)/arg_NUMS=\1; arg_MODE=\2/'`
  +
  +#   parse option specification string
  +eval `echo $opt_spec |\
  +      sed -e 's/\([a-zA-Z0-9]\)\([.:+]\)/opt_MODE_\1=\2;/g'`
  +
  +#   parse option alias string
  +eval `echo $opt_alias |\
  +      tr 'x-' 'x_' | sed -e 's/\([a-zA-Z0-9]\):\([^,]*\),*/opt_ALIAS_\2=\1;/g'`
  +
  +#   interate over argument line
  +opt_PREV=''
  +while [ $# -gt 0 ]; do
  +    #   special option stops processing
  +    if [ ".$1" = ".--" ]; then
  +        shift
  +        break
  +    fi
  +
  +    #   determine option and argument
  +    opt_ARG_OK=no
  +    if [ ".$opt_PREV" != . ]; then
  +        #   merge previous seen option with argument
  +        opt_OPT="$opt_PREV"
  +        opt_ARG="$1"
  +        opt_ARG_OK=yes
  +        opt_PREV=''
  +    else
  +        #   split argument into option and argument
  +        case "$1" in
  +            --[a-zA-Z0-9]*=*)
  +                eval `echo "x$1" |\
  +                      sed -e 's/^x--\([a-zA-Z0-9-]*\)=\(.*\)$/opt_OPT="\1";opt_ARG="\2"/'`
  +                opt_STR=`echo $opt_OPT | tr 'x-' 'x_'`
  +                eval "opt_OPT=\${opt_ALIAS_${opt_STR}-${opt_OPT}}"
  +                ;;
  +            --[a-zA-Z0-9]*)
  +                opt_OPT=`echo "x$1" | cut -c4-`
  +                opt_STR=`echo $opt_OPT | tr 'x-' 'x_'`
  +                eval "opt_OPT=\${opt_ALIAS_${opt_STR}-${opt_OPT}}"
  +                opt_ARG=''
  +                ;;
  +            -[a-zA-Z0-9]*)
  +                eval `echo "x$1" |\
  +                      sed -e 's/^x-\([a-zA-Z0-9]\)/opt_OPT="\1";/' \
  +                          -e 's/";\(.*\)$/"; opt_ARG="\1"/'`
  +                ;;
  +            -[a-zA-Z0-9])
  +                opt_OPT=`echo "x$1" | cut -c3-`
  +                opt_ARG=''
  +                ;;
  +            *)
  +                break
  +                ;;
  +        esac
  +    fi
  +
  +    #   eat up option
  +    shift
  +
  +    #   determine whether option needs an argument
  +    eval "opt_MODE=\$opt_MODE_${opt_OPT}"
  +    if [ ".$opt_ARG" = . ] && [ ".$opt_ARG_OK" != .yes ]; then
  +        if [ ".$opt_MODE" = ".:" ] || [ ".$opt_MODE" = ".+" ]; then
  +            opt_PREV="$opt_OPT"
  +            continue
  +        fi
  +    fi
  +
  +    #   process option
  +    case $opt_MODE in
  +        '.' )
  +            #   boolean option
  +            eval "opt_${opt_OPT}=yes"
  +            ;;
  +        ':' )
  +            #   option with argument (multiple occurances override)
  +            eval "opt_${opt_OPT}=\"\$opt_ARG\""
  +            ;;
  +        '+' )
  +            #   option with argument (multiple occurances append)
  +            eval "opt_${opt_OPT}=\"\$opt_${opt_OPT}\${ASC_NL}\$opt_ARG\""
  +            ;;
  +        * )
  +            echo "${prog_cmd}:Error: unknown option: \`$opt_OPT'" 1>&2
  +            echo "${prog_cmd}:Hint:  run \`${prog_run} -h' or \`man ${prog_cmd}' for details" 1>&2
  +            exit 1
  +            ;;
  +    esac
  +done
  +if [ ".$opt_PREV" != . ]; then
  +    echo "${prog_cmd}:Error: missing argument to option \`$opt_PREV'" 1>&2
  +    echo "${prog_cmd}:Hint: run \`${prog_run} -h' or \`man ${prog_cmd}' for details" 1>&2
  +    exit 1
  +fi
  +
  +#   process help option
  +if [ ".$opt_h" = .yes ]; then
  +    echo "Usage: ${prog_run} ${str_usage}"
  +    exit 0
  +fi
  +
  +#   process version option
  +if [ ".$opt_V" = .yes ]; then
  +    echo "${prog_name} ${prog_vers} (${prog_date})"
  +    exit 0
  +fi
  +
  +#   complain about incorrect number of arguments
  +case $arg_MODE in
  +    '=' )
  +        if [ $# -ne $arg_NUMS ]; then
  +            echo "${prog_cmd}:Error: invalid number of arguments (exactly $arg_NUMS expected)" 1>&2
  +            echo "${prog_cmd}:Hint:  run \`${prog_run} -h' or \`man ${prog_cmd}' for details" 1>&2
  +            exit 1
  +        fi
  +        ;;
  +    '+' )
  +        if [ $# -lt $arg_NUMS ]; then
  +            echo "${prog_cmd}:Error: invalid number of arguments (at least $arg_NUMS expected)" 1>&2
  +            echo "${prog_cmd}:Hint:  run \`${prog_run} -h' or \`man ${prog_cmd}' for details" 1>&2
  +            exit 1
  +        fi
  +        ;;
  +esac
  +
  +##  _________________________________________________________________________
  +##
  +##                            UTILITY FUNCTIONS
  +##  _________________________________________________________________________
  +##
  +
  +#   map string to lower case
  +util_lower () {
  +    echo "$1" | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'
  +}
  +
  +#   map string to upper case
  +util_upper () {
  +    echo "$1" | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  +}
  +
  +##  _________________________________________________________________________
  +##
  +##                       ASSEMBLE INITIAL INFORMATION
  +##  _________________________________________________________________________
  +##
  +
  +UNAME_MACHINE=`(uname -m) 2>/dev/null` ||\
  +UNAME_MACHINE=`(uname -p) 2>/dev/null` ||\
  +UNAME_MACHINE='unknown'
  +UNAME_SYSTEM=`(uname -s) 2>/dev/null`  ||\
  +UNAME_SYSTEM='unknown'
  +UNAME_RELEASE=`(uname -r) 2>/dev/null` ||\
  +UNAME_RELEASE=`(uname -v) 2>/dev/null` ||\
  +UNAME_RELEASE='unknown'
  +
  +UNAME="${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}"
  +
  +if [ ".$opt_d" = .yes ]; then
  +    echo "uname => ${UNAME}" 1>&2
  +fi
  +
  +AC=""; AP=""; AT=""
  +SC=""; SP=""; ST=""
  +
  +##  _________________________________________________________________________
  +##
  +##                         DISPATCH INTO PLATFORMS
  +##  _________________________________________________________________________
  +##
  +
  +case "${UNAME}" in
  +
  +    #   FreeBSD
  +    *:FreeBSD:* )
  +        #   determine architecture
  +        AC="${UNAME_MACHINE}"
  +        case "${AC}" in
  +            i386 ) AC="iX86" ;;
  +        esac
  +        AP="${AC}"
  +        AT=`(/sbin/sysctl -n hw.model) 2>&1`
  +        case "${AT}" in
  +            *"Pentium Pro"* | *"Cyrix 6x86MX"* | *"Pentium II"* | *"Pentium III"* | *"Pentium 4"* | *"Celeron"* ) AT="i686" ;;
  +            *"Pentium"* ) AT="i586" ;; *"i486[SD]X"* | *"Cyrix 486"* | *"Cyrix [56]x86"* | *"Blue Lightning" | *"Cyrix 486S/DX" ) AT="i486" ;;
  +            *"i386[SD]X"* | *"NexGen 586"* ) AT="i386" ;;
  +            * ) AT="${AP}" ;;
  +        esac
  +        #   determine system
  +        r=`echo "${UNAME_RELEASE}" |\
  +           sed -e 's;[()];;' -e 's/\(-.*\)$/[\1]/'`
  +        ST="FreeBSD ${r}"
  +        SP="${ST}"
  +        case "${r}" in
  +            1.* ) SC="4.3BSD" ;;
  +            *   ) SC="4.4BSD" ;;
  +        esac
  +        ;;
  +
  +    #   GNU/Linux
  +    *:Linux:* )
  +        #   determine architecture
  +        AT="${UNAME_MACHINE}"
  +        AP="${AT}"
  +        case "${AP}" in
  +           i[3-6]86 ) AP='iX86' ;;
  +        esac
  +        AC="${AP}"
  +        #   determine system
  +        v_kern=`echo "${UNAME_RELEASE}" |\
  +            sed -e 's/^\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/'`
  +        v_libc=`(strings /lib/libc.so.* | grep '^GLIBC_' | sed -e 's/^GLIBC_//' |\
  +            sort -n | tail -1 | sed -e 's/^\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/') 2>&1`
  +        ST="GNU/Linux ${v_libc}/${v_kern}"
  +        for tagfile in dummy `cd /etc && echo *[_-]release *[_-]version 2>/dev/null`; do
  +            test ! -f /etc/${tagfile} && continue
  +            n=`echo ${tagfile} | sed -e 's/[_-]release$//' -e 's/[_-]version$//'`
  +            v=`cat /etc/${tagfile} | grep '[0-9]' | head -1 |\
  +               sed -e 's/^/#/' \
  +                   -e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' \
  +                   -e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' \
  +                   -e 's/^#[^0-9]*\([0-9][0-9]*\).*$/\1/' \
  +                   -e 's/^#.*$//'`
  +            case "`util_lower ${n}`" in
  +                debian   ) n="Debian[ GNU/Linux]" ;;
  +                redhat   ) n="RedHat[ Linux}"     ;;
  +                suse     ) n="SuSE[ Linux]"       ;;
  +                mandrake ) n="Mandrake[ Linux}"   ;;
  +                gentoo   ) n="Gentoo[ Linux]"     ;;
  +                *        ) n="${n}[ GNU/Linux]"   ;;
  +            esac
  +            SP="$n $v"
  +        done
  +        [ ".$SP" = . ] && SP="${ST}"
  +        SC="LSB"
  +        ;;
  +
  +    #   Sun Solaris
  +    *:SunOS:* )
  +        #   determine architecture
  +        AT="${UNAME_MACHINE}"
  +        case "${AT}" in
  +            i86pc ) AT="iX86" ;; 
  +        esac
  +        AP="${AT}"
  +        case "${AP}" in
  +            sun4[cdm] ) AP="SPARC32" ;;
  +            sun4u     ) AP="SPARC64" ;;
  +            sun4*     ) AP="SPARC"   ;;
  +        esac
  +        AC="${AP}"
  +        case "${AC}" in
  +            SPARC* ) AC="SPARC" ;;
  +        esac
  +        #   determine system
  +        ST="[Sun ]SunOS ${UNAME_RELEASE}"
  +        v=`echo "${UNAME_RELEASE}" |\
  +           sed -e 's;^4\.;1.;' \
  +               -e 's;^5\.\([0-6]\).*;2.\1;' \
  +               -e 's;^5\.\([0-9][0-9]*\).*;\1;'`
  +        SP="[Sun ]Solaris $v"
  +        case "${UNAME_RELEASE}" in
  +            4.* ) SC="4.2BSD" ;;
  +            5.* ) SC="SVR4"   ;;
  +        esac
  +        ;;
  +
  +
  +    #   TODO ...ADD YOUR NEW PLATFORM CHECK HERE... TODO
  +    # *:XXX:* )
  +    #   ...
  +    #   ;;
  +
  +    #   ...A STILL UNKNOWN PLATFORM...
  +    * )
  +        AT="${UNAME_MACHINE}"
  +        AP="${AT}"
  +        AC="${AP}"
  +        ST="${UNAME_SYSTEM} ${UNAME_RELEASE}"
  +        SP="${ST}"
  +        SC="${SP}"
  +        ;;
  +
  +esac
  +
  +##  _________________________________________________________________________
  +##
  +##                           PROVIDE RESULT OUTPUT
  +##  _________________________________________________________________________
  +##
  +
  +#   provide fallback values
  +[ ".$AT" = . ] && AT="${AP:-${AC}}"
  +[ ".$AP" = . ] && AP="${AT:-${AC}}"
  +[ ".$AC" = . ] && AC="${AP:-${AT}}"
  +[ ".$ST" = . ] && ST="${SP:-${SC}}"
  +[ ".$SP" = . ] && SP="${ST:-${SC}}"
  +[ ".$SC" = . ] && SC="${SP:-${ST}}"
  +
  +#   support explicit enforced verbose/concise output
  +if [ ".$opt_v" = .yes ]; then
  +    opt_F=`echo ":$opt_F" | sed -e 's/^://' -e 's/%\([as][cpt]\)/%[\1]/g'`
  +elif [ ".$opt_c" = .yes ]; then
  +    opt_F=`echo ":$opt_F" | sed -e 's/^://' -e 's/%\([as][cpt]\)/%<\1>/g'`
  +fi
  +
  +#   provide verbose and concise variants
  +AC_V=""; AC_N=""; AC_C=""
  +AP_V=""; AP_N=""; AP_C=""
  +AT_V=""; AT_N=""; AT_C=""
  +SC_V=""; SC_N=""; SC_C=""
  +SP_V=""; SP_N=""; SP_C=""
  +ST_V=""; ST_N=""; ST_C=""
  +for var_lc in at ap ac st sp sc; do
  +    case "$opt_F" in
  +        *"%[${val_lc}]"* | *"%{${val_lc}}"* | *"%${val_lc}"* | *"%<${val_lc}>"* )
  +        var_uc=`util_upper "$var_lc"`
  +        eval "val=\"\$${var_uc}\""
  +        val_V=""; val_N=""; val_C=""
  +        case "$opt_F" in
  +            *"%[${var_lc}]"* )
  +                val_V=`echo ":$val" | \
  +                       sed -e 's/^://' \
  +                           -e 's;\[\([^]]*\)\];\1;g' \
  +                           -e 's;<\([^>]*\)>;\1;'`
  +                eval "${var_uc}_V=\"\${val_V}\""
  +                ;;
  +        esac
  +        case "$opt_F" in
  +            *"%{${var_lc}}"* | *"%${var_lc}"* )
  +                val_N=`echo ":$val" | \
  +                       sed -e 's/^://' \
  +                           -e 's;\[\([^]]*\)\];;g' \
  +                           -e 's;<\([^>]*\)>;\1;'`
  +                eval "${var_uc}_N=\"\${val_N}\""
  +                ;;
  +        esac
  +        case "$opt_F" in
  +            *"%<${var_lc}>"* )
  +                val_C=`echo ":$val" | \
  +                       sed -e 's/^://' \
  +                           -e 's;\[\([^]]*\)\];;g' \
  +                           -e 's;[^<]*<\([^>]*\)>;\1;'`
  +                eval "${var_uc}_C=\"\${val_C}\""
  +                ;;
  +        esac
  +        ;;
  +    esac
  +done
  +
  +#   create output string
  +output=`echo ":$opt_F" |\
  +        sed -e "s/^://" \
  +            -e "s;%\[ac\];${AC_V};g" \
  +            -e "s;%{ac};${AC_N};g" \
  +            -e "s;%ac;${AC_N};g" \
  +            -e "s;%<ac>;${AC_C};g" \
  +            -e "s;%\[ap\];${AP_V};g" \
  +            -e "s;%{ap};${AP_N};g" \
  +            -e "s;%ap;${AP_N};g" \
  +            -e "s;%<ap>;${AP_C};g" \
  +            -e "s;%\[at\];${AT_V};g" \
  +            -e "s;%{at};${AT_N};g" \
  +            -e "s;%at;${AT_N};g" \
  +            -e "s;%<at>;${AT_C};g" \
  +            -e "s;%\[sc\];${SC_V};g" \
  +            -e "s;%{sc};${SC_N};g" \
  +            -e "s;%sc;${SC_N};g" \
  +            -e "s;%<sc>;${SC_C};g" \
  +            -e "s;%\[sp\];${SP_V};g" \
  +            -e "s;%{sp};${SP_N};g" \
  +            -e "s;%sp;${SP_N};g" \
  +            -e "s;%<sp>;${SP_C};g" \
  +            -e "s;%\[st\];${ST_V};g" \
  +            -e "s;%{st};${ST_N};g" \
  +            -e "s;%st;${ST_N};g" \
  +            -e "s;%<st>;${ST_C};g" \
  +            -e 's/\\\\n/^/g' |\
  +         tr '^' '\012'`
  +
  +#   support lower/upper-case mapping
  +if [ ".$opt_L" = .yes ]; then
  +    output=`util_lower "$output"`
  +elif [ ".$opt_U" = .yes ]; then
  +    output=`util_upper "$output"`
  +fi
  +
  +#   support particular separator and concatenator strings
  +output=`echo ":$output" |
  +        sed -e 's/^://' \
  +            -e "s; ;${opt_S};g" \
  +            -e "s;/;${opt_C};g"`
  +
  +#   display output string
  +if [ ".$opt_n" = .yes ]; then
  +    echo . | awk '{ printf("%s", output); }' output="$output"
  +else
  +    echo "$output"
  +fi
  +
  @@ .

From ossp-cvs-owner@ossp.org  Mon Sep  8 13:24:01 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9BF0877155; Mon,  8 Sep 2003 13:24:01 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/platform/ platform.sh
Message-Id: <20030908112401.9BF0877155@mail.ossp.org>
Date: Mon,  8 Sep 2003 13:24:01 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Sep-2003 13:24:01
  Branch: HEAD                             Handle: 2003090812240100

  Modified files:
    ossp-pkg/platform       platform.sh

  Log:
    fix --upper option

  Summary:
    Revision    Changes     Path
    1.2         +2  -2      ossp-pkg/platform/platform.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/platform/platform.sh
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 platform.sh
  --- ossp-pkg/platform/platform.sh	8 Sep 2003 11:16:13 -0000	1.1
  +++ ossp-pkg/platform/platform.sh	8 Sep 2003 11:24:01 -0000	1.2
  @@ -43,7 +43,7 @@
   str_usage="$str_usage [-S|--sep STRING]"
   str_usage="$str_usage [-C|--conc STRING]"
   str_usage="$str_usage [-L|--lower]"
  -str_usage="$str_usage [-U|--lower]"
  +str_usage="$str_usage [-U|--upper]"
   str_usage="$str_usage [-T|--type TYPE]"
   str_usage="$str_usage [-v|--verbose]"
   str_usage="$str_usage [-c|--concise]"
  @@ -53,7 +53,7 @@
   str_usage="$str_usage [-h|--help]"
   arg_spec="0="
   opt_spec="F:S:C:L.U.T:v.c.n.d.V.h."
  -opt_alias="F:format,S:sep,C:conc,L:lower,T:type,v:verbose,c:consise,n:newline,d:debug,V:version,h:help"
  +opt_alias="F:format,S:sep,C:conc,L:lower,U:upper,T:type,v:verbose,c:consise,n:newline,d:debug,V:version,h:help"
   opt_F="Class:      %sc (%ac)\\nProduct:    %sp (%ap)\\nTechnology: %st (%at)"
   opt_S=" "
   opt_C="/"
  @@ .

From ossp-cvs-owner@ossp.org  Mon Sep  8 13:25:29 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 365BC77155; Mon,  8 Sep 2003 13:25:29 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/snmpdx.mib/ snmpdx.mib
Message-Id: <20030908112529.365BC77155@mail.ossp.org>
Date: Mon,  8 Sep 2003 13:25:29 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   08-Sep-2003 13:25:29
  Branch: HEAD                             Handle: 2003090812252800

  Modified files:
    ossp-pkg/snmpdx/snmpdx.mib
                            snmpdx.mib

  Log:
    renumber to avoid gap

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 snmpdx.mib
  --- ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib	8 Sep 2003 10:49:36 -0000	1.4
  +++ ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib	8 Sep 2003 11:25:28 -0000	1.5
  @@ -256,7 +256,7 @@
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "CPU temperature [Celsius]"
  -    ::= { hwCpuInfoENTRY 3 }
  +    ::= { hwCpuInfoENTRY 2 }
   
   --
   --  Hardware: RAM
  @@ .

From ossp-cvs-owner@ossp.org  Mon Sep  8 13:47:06 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E972C77155; Mon,  8 Sep 2003 13:47:05 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/platform/ platform.pod
Message-Id: <20030908114705.E972C77155@mail.ossp.org>
Date: Mon,  8 Sep 2003 13:47:05 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Sep-2003 13:47:05
  Branch: HEAD                             Handle: 2003090812470500

  Modified files:
    ossp-pkg/platform       platform.pod

  Log:
    more initial documentation

  Summary:
    Revision    Changes     Path
    1.2         +107 -2     ossp-pkg/platform/platform.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/platform/platform.pod
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 platform.pod
  --- ossp-pkg/platform/platform.pod	8 Sep 2003 11:16:13 -0000	1.1
  +++ ossp-pkg/platform/platform.pod	8 Sep 2003 11:47:05 -0000	1.2
  @@ -32,11 +32,109 @@
   
   =head1 SYNOPSIS
   
  -...
  +B<platform>
  +[B<-F>|B<--format> I<FORMAT>]
  +[B<-S>|B<--sep> I<STRING>]
  +[B<-C>|B<--conc> I<STRING>]
  +[B<-L>|B<--lower>]
  +[B<-U>|B<--upper>]
  +[B<-T>|B<--type> I<TYPE>]
  +[B<-v>|B<--verbose>]
  +[B<-c>|B<--concise>]
  +[B<-n>|B<--newline>]
  +[B<-d>|B<--debug>]
  +
  +B<platform>
  +[B<-V>|B<--version>]
  +
  +B<platform>
  +[B<-h>|B<--help>]
   
   =head1 DESCRIPTION
   
  -...
  +B<OSSP platform> is a flexible Unix platform identification program.
  +It distinguishes a platform according to its I<hardware architecture>
  +and I<operating system>. For both there is a I<class>, I<product> and
  +I<technology> identification. For all of those six identifications,
  +there is a I<verbose>, I<regular> and I<concise> version. This leads to
  +eithteen (2x3x3) available identification strings for each platform,
  +from which usually 2 are choosen in a particular situation. This is
  +done by assembling the platform identification string using a I<FORMAT>
  +string containing one or more identification constructs of the forms
  +"C<%xx>", "C<%E<lt>xxE<gt>>". "C<%[xx]>", and "C<%{xx}>".
  +
  +=head1 OPTIONS
  +
  +The following command line options are available.
  +
  +=over 4
  +
  +=item B<-F>, B<--format> I<FORMAT>
  +
  + %[ac]  verbose hardware architecture class
  + %[ap]  verbose hardware architecture product
  + %[at]  verbose hardware architecture technology
  + %[sc]  verbose operating system class
  + %[sp]  verbose operating system product
  + %[st]  verbose operating system technology
  + %{ac}  regular hardware architecture class
  + %{ap}  regular hardware architecture product
  + %{at}  regular hardware architecture technology
  + %{sc}  regular operating system class
  + %{sp}  regular operating system product
  + %{st}  regular operating system technology
  + %<ac>  concise hardware architecture class
  + %<ap>  concise hardware architecture product
  + %<at>  concise hardware architecture technology
  + %<sc>  concise operating system class
  + %<sp>  concise operating system product
  + %<st>  concise operating system technology
  +
  +=item B<-S>, B<--sep> I<STRING>
  +
  +=item B<-C>, B<--conc> I<STRING>
  +
  +=item B<-L>, B<--lower>
  +
  +=item B<-U>, B<--upper>
  +
  +=item B<-T>, B<--type> I<TYPE>
  +
  +=item B<-v>, B<--verbose>
  +
  +=item B<-c>, B<--concise>
  +
  +=item B<-n>, B<--newline>
  +
  +=item B<-d>, B<--debug>
  +
  +=item B<-V>, B<--version>
  +
  +=item B<-h>, B<--help>
  +
  +=back
  +
  +=head1 EXAMPLES
  +
  +The following real-life use cases are known:
  +
  +=over 4
  +
  +=item B<OpenPKG> build-time decisions
  +
  + platform -c -L -S "" -C "+" -F "%at-%st"
  + platform -c -L -S "" -C "+" -F "%ac-%sc"
  +
  +=item B<OpenPKG> binary RPM packages
  + 
  + platform -c -L -S "" -C "+" -F "%ap-%sp"
  +
  +=item F<README> files
  + 
  + platform -v -F "%sp (%ap)"
  + platform -v -F "%sc (%ac)"
  +
  +=back
   
   =head1 SEE ALSO
   
  @@ -52,6 +150,13 @@
   filenames) and technology (for build-time decisions) identifiers for the
   Unix platforms packages are maintained for. It was inspired by B<GNU>
   F<config.guess> and older B<GNU shtool> F<guessos> command.
  +
  +The major difference to B<GNU> F<config.guess> is that B<OSSP platform>
  +does not use a I<vendor> identification (cannot be determined most of
  +the time and is not used at all in all projects I've ever seen), is
  +a lot more flexible (class, product and technology identifications
  +combined with verbose, regular and consise outputs). The drawback of
  +B<OSSP platform> is that it (still) knows less particular platforms.
   
   =head1 AUTHOR
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Sep  8 14:50:18 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 50D0B77155; Mon,  8 Sep 2003 14:50:18 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/snmpdx.d/ sysFs.pm ossp-pkg/snmpdx/snmpdx....
Message-Id: <20030908125018.50D0B77155@mail.ossp.org>
Date: Mon,  8 Sep 2003 14:50:18 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   08-Sep-2003 14:50:18
  Branch: HEAD                             Handle: 2003090813501700

  Added files:
    ossp-pkg/snmpdx/snmpdx.d
                            sysFs.pm
  Modified files:
    ossp-pkg/snmpdx/snmpdx.mib
                            snmpdx.mib

  Log:
    sysFs for FreeBSD, Linux, SunOS

  Summary:
    Revision    Changes     Path
    1.1         +185 -0     ossp-pkg/snmpdx/snmpdx.d/sysFs.pm
    1.6         +64 -0      ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/sysFs.pm
  ============================================================================
  $ cvs diff -u -r0 -r1.1 sysFs.pm
  --- /dev/null	2003-09-08 14:50:17.000000000 +0200
  +++ sysFs.pm	2003-09-08 14:50:18.000000000 +0200
  @@ -0,0 +1,185 @@
  +##
  +##  snmpdx -- SNMP Daemon Extension
  +##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  sysFs: System, Filesystem
  +##
  +
  +package My::Probe::sysFs;
  +our @ISA = qw(My::Probe);
  +
  +sub oids ($) {
  +    my ($self) = @_;
  +    return $self->{-ctx}->{-mib}->oids("*.snmpdx.host.system.sysFs.*");
  +}
  +
  +sub probe ($$) {
  +    my ($self, $obj) = @_;
  +
  +    if ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i) {
  +    	my $sysFsInfoENTRY  = undef;
  +        
  +        #   local workspace
  +		my $out; my $raw; my $n2i; my @dat; my $new;
  +
  +        #  	process df
  +        $out = $self->{-ctx}->{-sys}->run("/bin/df -m", "1m");
  +        $raw = $out->{-stdout};
  +		$n2i = {};
  +		if ($raw =~ m/^([^\n]*\bFilesystem\b[^\n]*)\n(.*)$/s) {
  +			$n2i = &mkn2i(split / +/, $1);
  +			foreach $line (split "\n", $2) {
  +				@dat = split(/ +/, $line);
  +				if (@dat[$n2i->{Filesystem}] =~ m|^/dev/|) {
  +					$new = {};
  +					if (defined $n2i->{Filesystem}) {
  +						$new->{sysFsDevice} = @dat[$n2i->{Filesystem}];
  +					}
  +					if (defined $n2i->{Mounted}) {
  +						$new->{sysFsMountpoint} = @dat[$n2i->{Mounted}];
  +					}
  +					if (defined $n2i->{_1M_blocks}) {
  +						$new->{sysFsMax} = @dat[$n2i->{_1M_blocks}];
  +					}
  +					if (defined $n2i->{Avail}) {
  +						$new->{sysFsFree} = @dat[$n2i->{Avail}];
  +					}
  +					if (defined $new->{sysFsMax} and defined $new->{sysFsFree}) {
  +						$new->{sysFsUsed} = $new->{sysFsMax} - $new->{sysFsFree};
  +					}
  +					push(@sysFsInfoENTRY, $new);
  +				}
  +			}
  +        }
  +
  +        if ($obj->{-name} =~ m/\.sysFsInfoENTRY\.([^.]+)\.(\d+)$/) {
  +            my $col = $1;
  +            my $row = ($2 > 0 ? $2 - 1 : 0);
  +            $self->{-ctx}->{-log}->printf(4, "col=%s row=%s", $col, $row);
  +            $obj->{-value} = @sysFsInfoENTRY[$row]->{$col} if (defined @sysFsInfoENTRY[$row]->{$col});
  +        }
  +    }
  +    elsif ($self->{-ctx}->{-platform}->id() =~ m/Linux/i) {
  +    	my $sysFsInfoENTRY  = undef;
  +        
  +        #   local workspace
  +		my $out; my $raw; my $n2i; my @dat; my $new;
  +
  +        #  	process df
  +        $out = $self->{-ctx}->{-sys}->run("/bin/df -m", "1m");
  +        $raw = $out->{-stdout};
  +		$n2i = {};
  +		if ($raw =~ m/^([^\n]*\bFilesystem\b[^\n]*)\n(.*)$/s) {
  +			$n2i = &mkn2i(split / +/, $1);
  +			foreach $line (split "\n", $2) {
  +				@dat = split(/ +/, $line);
  +				if (@dat[$n2i->{Filesystem}] =~ m|^/dev/|) {
  +					$new = {};
  +					if (defined $n2i->{Filesystem}) {
  +						$new->{sysFsDevice} = @dat[$n2i->{Filesystem}];
  +					}
  +					if (defined $n2i->{Mounted}) {
  +						$new->{sysFsMountpoint} = @dat[$n2i->{Mounted}];
  +					}
  +					if (defined $n2i->{_1M_blocks}) {
  +						$new->{sysFsMax} = @dat[$n2i->{_1M_blocks}];
  +					}
  +					if (defined $n2i->{Available}) {
  +						$new->{sysFsFree} = @dat[$n2i->{Available}];
  +					}
  +					if (defined $new->{sysFsMax} and defined $new->{sysFsFree}) {
  +						$new->{sysFsUsed} = $new->{sysFsMax} - $new->{sysFsFree};
  +					}
  +					push(@sysFsInfoENTRY, $new);
  +				}
  +			}
  +        }
  +
  +        if ($obj->{-name} =~ m/\.sysFsInfoENTRY\.([^.]+)\.(\d+)$/) {
  +            my $col = $1;
  +            my $row = ($2 > 0 ? $2 - 1 : 0);
  +            $self->{-ctx}->{-log}->printf(4, "col=%s row=%s", $col, $row);
  +            $obj->{-value} = @sysFsInfoENTRY[$row]->{$col} if (defined @sysFsInfoENTRY[$row]->{$col});
  +        }
  +    }
  +    elsif($self->{-ctx}->{-platform}->id() =~ m/SunOS/i) {
  +    	my $sysFsInfoENTRY  = undef;
  +        
  +        #   local workspace
  +		my $out; my $raw; my $n2i; my @dat; my $new;
  +
  +        #  	process df
  +        $out = $self->{-ctx}->{-sys}->run("/bin/df -k", "1m");
  +        $raw = $out->{-stdout};
  +		$n2i = {};
  +		if ($raw =~ m/^([^\n]*\bFilesystem\b[^\n]*)\n(.*)$/s) {
  +			$n2i = &mkn2i(split / +/, $1);
  +			foreach $line (split "\n", $2) {
  +				@dat = split(/ +/, $line);
  +				if (@dat[$n2i->{Filesystem}] =~ m|^/dev/|) {
  +					$new = {};
  +					if (defined $n2i->{Filesystem}) {
  +						$new->{sysFsDevice} = @dat[$n2i->{Filesystem}];
  +					}
  +					if (defined $n2i->{Mounted}) {
  +						$new->{sysFsMountpoint} = @dat[$n2i->{Mounted}];
  +					}
  +					if (defined $n2i->{kbytes}) {
  +						$new->{sysFsMax} = int(@dat[$n2i->{kbytes}] / 1024);
  +					}
  +					if (defined $n2i->{avail}) {
  +						$new->{sysFsFree} = int(@dat[$n2i->{avail}] / 1024);
  +					}
  +					if (defined $new->{sysFsMax} and defined $new->{sysFsFree}) {
  +						$new->{sysFsUsed} = $new->{sysFsMax} - $new->{sysFsFree};
  +					}
  +					push(@sysFsInfoENTRY, $new);
  +				}
  +			}
  +        }
  +
  +        if ($obj->{-name} =~ m/\.sysFsInfoENTRY\.([^.]+)\.(\d+)$/) {
  +            my $col = $1;
  +            my $row = ($2 > 0 ? $2 - 1 : 0);
  +            $self->{-ctx}->{-log}->printf(4, "col=%s row=%s", $col, $row);
  +            $obj->{-value} = @sysFsInfoENTRY[$row]->{$col} if (defined @sysFsInfoENTRY[$row]->{$col});
  +        }
  +    }
  +    return;
  +}
  +
  +# name to index
  +sub mkn2i ($) {
  +    my (@name) = @_;
  +    my $rc = {};
  +    my $i = 0;
  +    foreach my $f (@name) {
  +        $f =~ s/[^\w]/_/;
  +        $f =~ s/^([^a-zA-Z_])/_$1/;
  +        $rc->{$f} = $i++;
  +    };
  +    return $rc;
  +}
  +
  +1;
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 snmpdx.mib
  --- ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib	8 Sep 2003 11:25:28 -0000	1.5
  +++ ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib	8 Sep 2003 12:50:17 -0000	1.6
  @@ -190,6 +190,70 @@
       ::= { system 6 }
   
   --
  +--  System Filesystem
  +--
  +
  +sysFs OBJECT IDENTIFIER
  +    ::= { system 7 }
  +
  +sysFsInfoTABLE OBJECT-TYPE
  +    SYNTAX	    SEQUENCE OF SysFsIndexENTRY
  +    MAX-ACCESS  not-accessible
  +    STATUS      current
  +    DESCRIPTION "FIXME Table description!?"
  +    ::= { sysFs 1 }
  +
  +sysFsInfoENTRY OBJECT-TYPE
  +    SYNTAX	    SysFsIndexENTRY
  +    MAX-ACCESS	not-accessible
  +    STATUS	    current
  +    DESCRIPTION "FIXME Row description!?"
  +    INDEX	    { sysFsInfoIndex }
  +    ::= { sysFsInfoTABLE 1 }
  +
  +SysFsIndexENTRY ::= SEQUENCE {
  +    sysFsDevice     DisplayString,
  +    sysFsMountpoint DisplayString,
  +    sysFsMax        Integer32,
  +    sysFsUsed       Integer32,
  +    sysFsFree       Integer32
  +}
  +
  +sysFsDevice OBJECT-TYPE
  +    SYNTAX      DisplayString
  +    MAX-ACCESS	read-only
  +    STATUS	    current
  +    DESCRIPTION "filesystem device"
  +    ::= { sysFsInfoENTRY 1 }
  +
  +sysFsMountpoint OBJECT-TYPE
  +    SYNTAX      DisplayString
  +    MAX-ACCESS	read-only
  +    STATUS	    current
  +    DESCRIPTION "filesystem mount point"
  +    ::= { sysFsInfoENTRY 2 }
  +
  +sysFsMax OBJECT-TYPE
  +    SYNTAX      Integer32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "maximum available filesystem space in MB"
  +    ::= { sysFsInfoENTRY 3 }
  +
  +sysFsUsed OBJECT-TYPE
  +    SYNTAX      Integer32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "currently used filesystem space in MB"
  +    ::= { sysFsInfoENTRY 4 }
  +
  +sysFsFree OBJECT-TYPE
  +    SYNTAX      Integer32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "currently free filesystem space in MB"
  +    ::= { sysFsInfoENTRY 5 }
  +--
   --  Hardware: Product
   --
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Sep  8 15:42:06 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 03E0F7715B; Mon,  8 Sep 2003 15:42:05 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/snmpdx.d/ hwCpu.pm
Message-Id: <20030908134205.03E0F7715B@mail.ossp.org>
Date: Mon,  8 Sep 2003 15:42:05 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   08-Sep-2003 15:42:05
  Branch: HEAD                             Handle: 2003090814420500

  Modified files:
    ossp-pkg/snmpdx/snmpdx.d
                            hwCpu.pm

  Log:
    variable name cleanup

  Summary:
    Revision    Changes     Path
    1.4         +14 -17     ossp-pkg/snmpdx/snmpdx.d/hwCpu.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/hwCpu.pm
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 hwCpu.pm
  --- ossp-pkg/snmpdx/snmpdx.d/hwCpu.pm	8 Sep 2003 11:07:56 -0000	1.3
  +++ ossp-pkg/snmpdx/snmpdx.d/hwCpu.pm	8 Sep 2003 13:42:05 -0000	1.4
  @@ -37,9 +37,8 @@
       my ($self, $obj) = @_;
   
       if ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i) {
  -        my $hwCpuNum   = undef;
  -        my $hwCpuSpeed = undef; #N/A
  -        my $hwCpuTemp  = undef; #N/A
  +        my $hwCpuNum       = undef;
  +        my $hwCpuInfoENTRY = undef; #N/A
   
           #   local workspace
           my $out; my $raw;
  @@ -54,9 +53,8 @@
           $obj->{-value} = $hwCpuNum if ($obj->{-name} =~ m/\.hwCpuNum$/);
       }
       elsif ($self->{-ctx}->{-platform}->id() =~ m/Linux/i) {
  -        my $hwCpuNum   = undef;
  -        my $hwCpuSpeed = undef; #N/A
  -        my $hwCpuTemp  = undef; #N/A
  +        my $hwCpuNum       = undef;
  +        my $hwCpuInfoENTRY = undef; #N/A
   
           #   local workspace
           my $out; my $raw;
  @@ -73,12 +71,11 @@
           $obj->{-value} = $hwCpuNum if ($obj->{-name} =~ m/\.hwCpuNum$/);
       }
       elsif($self->{-ctx}->{-platform}->id() =~ m/SunOS/i) {
  -        my $hwCpuNum   = undef;
  -        my $hwCpuSpeed = undef; #see @dat[]->{hwCpuSpeed}
  -        my $hwCpuTemp  = undef; #see @dat[]->{hwCpuTemp}
  +        my $hwCpuNum       = undef;
  +        my $hwCpuInfoENTRY = undef;
   
           #   local workspace
  -        my $out; my $raw; my @dat; my $arch;
  +        my $out; my $raw; my $arch;
   
           #   initialize arch
           $arch = $self->{-ctx}->{-platform}->arch();
  @@ -91,8 +88,8 @@
               foreach $line (split "\n", $raw) {
                   my ($brd,$cpu,$module,$mhz,$mb,$impl,$mask) = split(" ", $line);
                   if ($cpu =~ m/^\d+$/) {
  -                    @dat[$cpu] = {} if (not defined @dat[$cpu]);
  -                    @dat[$cpu]->{hwCpuSpeed} = $mhz;
  +                    @hwCpuInfoENTRY[$cpu] = {} if (not defined @hwCpuInfoENTRY[$cpu]);
  +                    @hwCpuInfoENTRY[$cpu]->{hwCpuSpeed} = $mhz;
                   }
               }
           }
  @@ -100,27 +97,27 @@
           #   hwCpuTemp
           $out = $self->{-ctx}->{-sys}->run("/usr/platform/$arch/sbin/prtdiag -v", "1m");
           $raw = $out->{-stdout};
  -        if ($raw =~ m/\n=+ Environmental Status =+\n\nSystem Temperatures \(Celsius\):\n-+\n(.*?)\n=+/s) {
  +        if ($raw =~ m/\n=+ Environmental Status =+\n.*\nSystem Temperatures \(Celsius\):\n-+\n(.*?)\n=+/s) {
               $raw = $1;
               foreach $line (split "\n", $raw) {
                   my ($cpu,$temp) = split(" ", $line);
                   if ($cpu =~ m/CPU(\d+)/) {
                       $cpu = $1;
  -                    @dat[$cpu] = {} if (not defined @dat[$cpu]);
  -                    @dat[$cpu]->{hwCpuTemp} = $temp;
  +                    @hwCpuInfoENTRY[$cpu] = {} if (not defined @hwCpuInfoENTRY[$cpu]);
  +                    @hwCpuInfoENTRY[$cpu]->{hwCpuTemp} = $temp;
                   }
               }
           }
   
           #   hwCpuNum
  -        $hwCpuNum = $#{@dat} + 1;
  +        $hwCpuNum = $#{@hwCpuInfoENTRY} + 1;
           
           $obj->{-value} = $hwCpuNum   if ($obj->{-name} =~ m/\.hwCpuNum$/);
           if ($obj->{-name} =~ m/\.hwCpuInfoENTRY\.([^.]+)\.(\d+)$/) {
               my $col = $1;
               my $row = ($2 > 0 ? $2 - 1 : 0);
               $self->{-ctx}->{-log}->printf(4, "col=%s row=%s", $col, $row);
  -            $obj->{-value} = @dat[$row]->{$col} if (defined @dat[$row]->{$col});
  +            $obj->{-value} = @hwCpuInfoENTRY[$row]->{$col} if (defined @hwCpuInfoENTRY[$row]->{$col});
           }
       }
       return;
  @@ .

From ossp-cvs-owner@ossp.org  Mon Sep  8 15:43:06 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5DEFB7715B; Mon,  8 Sep 2003 15:43:06 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/snmpdx.d/ hwDisk.pm ossp-pkg/snmpdx/snmpdx...
Message-Id: <20030908134306.5DEFB7715B@mail.ossp.org>
Date: Mon,  8 Sep 2003 15:43:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   08-Sep-2003 15:43:06
  Branch: HEAD                             Handle: 2003090814430500

  Added files:
    ossp-pkg/snmpdx/snmpdx.d
                            hwDisk.pm
  Modified files:
    ossp-pkg/snmpdx/snmpdx.mib
                            snmpdx.mib

  Log:
    hwDisk for SunOS as array

  Summary:
    Revision    Changes     Path
    1.1         +87 -0      ossp-pkg/snmpdx/snmpdx.d/hwDisk.pm
    1.7         +29 -22     ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/hwDisk.pm
  ============================================================================
  $ cvs diff -u -r0 -r1.1 hwDisk.pm
  --- /dev/null	2003-09-08 15:43:06.000000000 +0200
  +++ hwDisk.pm	2003-09-08 15:43:06.000000000 +0200
  @@ -0,0 +1,87 @@
  +##
  +##  snmpdx -- SNMP Daemon Extension
  +##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  hwDisk: Hardware, Disk
  +##
  +
  +package My::Probe::hwDisk;
  +our @ISA = qw(My::Probe);
  +
  +sub oids ($) {
  +    my ($self) = @_;
  +    return $self->{-ctx}->{-mib}->oids("*.snmpdx.host.hardware.hwDisk.*");
  +}
  +
  +sub probe ($$) {
  +    my ($self, $obj) = @_;
  +
  +    if ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i) {
  +        my $hwDiskInfoENTRY = undef; #N/A
  +    }
  +    elsif ($self->{-ctx}->{-platform}->id() =~ m/Linux/i) {
  +        my $hwDiskInfoENTRY = undef; #N/A
  +    }
  +    elsif($self->{-ctx}->{-platform}->id() =~ m/SunOS/i) {
  +        my $hwDiskInfoENTRY = undef;
  +
  +        #   local workspace
  +        my $out; my $raw; my $arch; my $new;
  +
  +        #   initialize arch
  +        $arch = $self->{-ctx}->{-platform}->arch();
  +
  +        #   hwDiskInfoENTRY
  +        $out = $self->{-ctx}->{-sys}->run("/usr/platform/$arch/sbin/prtdiag -v", "1m");
  +        $raw = $out->{-stdout};
  +        if ($raw =~ m/\n=+ Environmental Status =+\n.*\nDisk LED Status:[^\n]+\n(.*?)\n=+/s) {
  +            $raw = $1;
  +            $raw =~ s/[[:]//gs;
  +            $raw =~ s/\]/\n/gs;
  +            foreach $line (split "\n", $raw) {
  +                if ($line =~ m/DISK\s+(\d+)\s+(OK|ERROR)/) {
  +                    my $new = {};
  +                    $new->{hwDiskId} = "DISK$1";
  +                    if ($2 =~ m/^OK$/) {
  +                        $new->{hwDiskStatus} = 1;
  +                    }
  +                    else {
  +                        $new->{hwDiskStatus} = 0;
  +                    }
  +                    push(@hwDiskInfoENTRY, $new);
  +                }
  +            }
  +        }
  +
  +        if ($obj->{-name} =~ m/\.hwDiskInfoENTRY\.([^.]+)\.(\d+)$/) {
  +            my $col = $1;
  +            my $row = ($2 > 0 ? $2 - 1 : 0);
  +            $self->{-ctx}->{-log}->printf(4, "col=%s row=%s", $col, $row);
  +            $obj->{-value} = @hwDiskInfoENTRY[$row]->{$col} if (defined @hwDiskInfoENTRY[$row]->{$col});
  +        }
  +    }
  +    return;
  +}
  +
  +1;
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 snmpdx.mib
  --- ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib	8 Sep 2003 12:50:17 -0000	1.6
  +++ ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib	8 Sep 2003 13:43:05 -0000	1.7
  @@ -344,39 +344,46 @@
       ::= { hwRam 2 }
   
   --
  ---  Hardware: Disk Space
  +--  Hardware: Disk
   --
   
   hwDisk OBJECT IDENTIFIER
       ::= { hardware 4 }
   
  -hwDiskMax OBJECT-TYPE
  -    SYNTAX      Gauge32
  -    MAX-ACCESS  read-only
  +hwDiskInfoTABLE OBJECT-TYPE
  +    SYNTAX	    SEQUENCE OF HwDiskIndexENTRY
  +    MAX-ACCESS  not-accessible
       STATUS      current
  -    DESCRIPTION "maximum available Disk space in MB"
  +    DESCRIPTION "FIXME Table description!?"
       ::= { hwDisk 1 }
   
  -hwDiskUsed OBJECT-TYPE
  -    SYNTAX      Gauge32
  -    MAX-ACCESS  read-only
  -    STATUS      current
  -    DESCRIPTION "currently used Disk space in MB"
  -    ::= { hwDisk 2 }
  +hwDiskInfoENTRY OBJECT-TYPE
  +    SYNTAX	    HwDiskIndexENTRY
  +    MAX-ACCESS	not-accessible
  +    STATUS	    current
  +    DESCRIPTION "FIXME Row description!?"
  +    INDEX	    { hwDiskInfoIndex }
  +    ::= { hwDiskInfoTABLE 1 }
   
  -hwDiskTemp OBJECT-TYPE
  -    SYNTAX      Gauge32
  -    MAX-ACCESS  read-only
  -    STATUS      current
  -    DESCRIPTION "temperature of Disks"
  -    ::= { hwDisk 3 }
  +HwDiskIndexENTRY ::= SEQUENCE {
  +    hwDiskId       DisplayString,
  +    hwDiskStatus   Integer32
  +}
  +
  +hwDiskId OBJECT-TYPE
  +    SYNTAX      DisplayString
  +    MAX-ACCESS	read-only
  +    STATUS	    current
  +    DESCRIPTION "Disk identification"
  +    ::= { hwDiskInfoENTRY 1 }
   
   hwDiskStatus OBJECT-TYPE
  -    SYNTAX      Integer32
  -    MAX-ACCESS  read-only
  -    STATUS      current
  -    DESCRIPTION "boolean status of Disks"
  -    ::= { hwDisk 4 }
  +    SYNTAX      DisplayString
  +    MAX-ACCESS	read-only
  +    STATUS	    current
  +    DESCRIPTION "Disk status"
  +    ::= { hwDiskInfoENTRY 2 }
  +
   
   --
   --  Hardware: Power Supply
  @@ .

From ossp-cvs-owner@ossp.org  Mon Sep  8 16:34:57 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8B5F37715B; Mon,  8 Sep 2003 16:34:57 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/snmpdx.d/ hwCpu.pm hwDisk.pm sysFs.pm
Message-Id: <20030908143457.8B5F37715B@mail.ossp.org>
Date: Mon,  8 Sep 2003 16:34:57 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   08-Sep-2003 16:34:57
  Branch: HEAD                             Handle: 2003090815345600

  Modified files:
    ossp-pkg/snmpdx/snmpdx.d
                            hwCpu.pm hwDisk.pm sysFs.pm

  Log:
    avoid referencing undefined hash

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-pkg/snmpdx/snmpdx.d/hwCpu.pm
    1.2         +1  -1      ossp-pkg/snmpdx/snmpdx.d/hwDisk.pm
    1.2         +3  -3      ossp-pkg/snmpdx/snmpdx.d/sysFs.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/hwCpu.pm
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 hwCpu.pm
  --- ossp-pkg/snmpdx/snmpdx.d/hwCpu.pm	8 Sep 2003 13:42:05 -0000	1.4
  +++ ossp-pkg/snmpdx/snmpdx.d/hwCpu.pm	8 Sep 2003 14:34:56 -0000	1.5
  @@ -117,7 +117,7 @@
               my $col = $1;
               my $row = ($2 > 0 ? $2 - 1 : 0);
               $self->{-ctx}->{-log}->printf(4, "col=%s row=%s", $col, $row);
  -            $obj->{-value} = @hwCpuInfoENTRY[$row]->{$col} if (defined @hwCpuInfoENTRY[$row]->{$col});
  +            $obj->{-value} = @hwCpuInfoENTRY[$row]->{$col} if (defined @hwCpuInfoENTRY[$row] and defined @hwCpuInfoENTRY[$row]->{$col});
           }
       }
       return;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/hwDisk.pm
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 hwDisk.pm
  --- ossp-pkg/snmpdx/snmpdx.d/hwDisk.pm	8 Sep 2003 13:43:05 -0000	1.1
  +++ ossp-pkg/snmpdx/snmpdx.d/hwDisk.pm	8 Sep 2003 14:34:56 -0000	1.2
  @@ -77,7 +77,7 @@
               my $col = $1;
               my $row = ($2 > 0 ? $2 - 1 : 0);
               $self->{-ctx}->{-log}->printf(4, "col=%s row=%s", $col, $row);
  -            $obj->{-value} = @hwDiskInfoENTRY[$row]->{$col} if (defined @hwDiskInfoENTRY[$row]->{$col});
  +            $obj->{-value} = @hwDiskInfoENTRY[$row]->{$col} if (defined @hwDiskInfoENTRY[$row] and defined @hwDiskInfoENTRY[$row]->{$col});
           }
       }
       return;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/sysFs.pm
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 sysFs.pm
  --- ossp-pkg/snmpdx/snmpdx.d/sysFs.pm	8 Sep 2003 12:50:17 -0000	1.1
  +++ ossp-pkg/snmpdx/snmpdx.d/sysFs.pm	8 Sep 2003 14:34:56 -0000	1.2
  @@ -76,7 +76,7 @@
               my $col = $1;
               my $row = ($2 > 0 ? $2 - 1 : 0);
               $self->{-ctx}->{-log}->printf(4, "col=%s row=%s", $col, $row);
  -            $obj->{-value} = @sysFsInfoENTRY[$row]->{$col} if (defined @sysFsInfoENTRY[$row]->{$col});
  +            $obj->{-value} = @sysFsInfoENTRY[$row]->{$col} if (defined @sysFsInfoENTRY[$row] and defined @sysFsInfoENTRY[$row]->{$col});
           }
       }
       elsif ($self->{-ctx}->{-platform}->id() =~ m/Linux/i) {
  @@ -119,7 +119,7 @@
               my $col = $1;
               my $row = ($2 > 0 ? $2 - 1 : 0);
               $self->{-ctx}->{-log}->printf(4, "col=%s row=%s", $col, $row);
  -            $obj->{-value} = @sysFsInfoENTRY[$row]->{$col} if (defined @sysFsInfoENTRY[$row]->{$col});
  +            $obj->{-value} = @sysFsInfoENTRY[$row]->{$col} if (defined @sysFsInfoENTRY[$row] and defined @sysFsInfoENTRY[$row]->{$col});
           }
       }
       elsif($self->{-ctx}->{-platform}->id() =~ m/SunOS/i) {
  @@ -162,7 +162,7 @@
               my $col = $1;
               my $row = ($2 > 0 ? $2 - 1 : 0);
               $self->{-ctx}->{-log}->printf(4, "col=%s row=%s", $col, $row);
  -            $obj->{-value} = @sysFsInfoENTRY[$row]->{$col} if (defined @sysFsInfoENTRY[$row]->{$col});
  +            $obj->{-value} = @sysFsInfoENTRY[$row]->{$col} if (defined @sysFsInfoENTRY[$row] and defined @sysFsInfoENTRY[$row]->{$col});
           }
       }
       return;
  @@ .

From ossp-cvs-owner@ossp.org  Mon Sep  8 16:37:22 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 206B57715C; Mon,  8 Sep 2003 16:37:22 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/snmpdx.d/ hwFan.pm hwPs.pm ossp-pkg/snmpdx...
Message-Id: <20030908143722.206B57715C@mail.ossp.org>
Date: Mon,  8 Sep 2003 16:37:22 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   08-Sep-2003 16:37:22
  Branch: HEAD                             Handle: 2003090815372100

  Added files:
    ossp-pkg/snmpdx/snmpdx.d
                            hwFan.pm hwPs.pm
  Modified files:
    ossp-pkg/snmpdx/snmpdx.mib
                            snmpdx.mib

  Log:
    hwFan and hwPs for SunOS as array

  Summary:
    Revision    Changes     Path
    1.1         +86 -0      ossp-pkg/snmpdx/snmpdx.d/hwFan.pm
    1.1         +85 -0      ossp-pkg/snmpdx/snmpdx.d/hwPs.pm
    1.8         +82 -20     ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/hwFan.pm
  ============================================================================
  $ cvs diff -u -r0 -r1.1 hwFan.pm
  --- /dev/null	2003-09-08 16:37:21.000000000 +0200
  +++ hwFan.pm	2003-09-08 16:37:21.000000000 +0200
  @@ -0,0 +1,86 @@
  +##
  +##  snmpdx -- SNMP Daemon Extension
  +##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  hwFan: Hardware, Fan
  +##
  +
  +package My::Probe::hwFan;
  +our @ISA = qw(My::Probe);
  +
  +sub oids ($) {
  +    my ($self) = @_;
  +    return $self->{-ctx}->{-mib}->oids("*.snmpdx.host.hardware.hwFan.*");
  +}
  +
  +sub probe ($$) {
  +    my ($self, $obj) = @_;
  +
  +    if ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i) {
  +        my $hwFanInfoENTRY = undef; #N/A
  +    }
  +    elsif ($self->{-ctx}->{-platform}->id() =~ m/Linux/i) {
  +        my $hwFanInfoENTRY = undef; #N/A
  +    }
  +    elsif($self->{-ctx}->{-platform}->id() =~ m/SunOS/i) {
  +        my $hwFanInfoENTRY = undef;
  +
  +        #   local workspace
  +        my $out; my $raw; my $arch; my $new;
  +
  +        #   initialize arch
  +        $arch = $self->{-ctx}->{-platform}->arch();
  +
  +        #   hwFanInfoENTRY
  +        $out = $self->{-ctx}->{-sys}->run("/usr/platform/$arch/sbin/prtdiag -v", "1m");
  +        $raw = $out->{-stdout};
  +        if ($raw =~ m/\n=+ Environmental Status =+\n.*\nFan Bank.:[^\n]*\n(.*?)\n=+/s) {
  +            $raw = $1;
  +            foreach $line (split "\n", $raw) {
  +                if ($line =~ m/([A-Z]+)\s+(\d+)\s+(OK|ERROR)/) {
  +                    my $new = {};
  +                    $new->{hwFanId} = "$1";
  +                    $new->{hwFanSpeed} = "$2";
  +                    if ($3 =~ m/^OK$/) {
  +                        $new->{hwFanStatus} = 1;
  +                    }
  +                    else {
  +                        $new->{hwFanStatus} = 0;
  +                    }
  +                    push(@hwFanInfoENTRY, $new);
  +                }
  +            }
  +        }
  +
  +        if ($obj->{-name} =~ m/\.hwFanInfoENTRY\.([^.]+)\.(\d+)$/) {
  +            my $col = $1;
  +            my $row = ($2 > 0 ? $2 - 1 : 0);
  +            $self->{-ctx}->{-log}->printf(4, "col=%s row=%s", $col, $row);
  +            $obj->{-value} = @hwFanInfoENTRY[$row]->{$col} if (defined @hwFanInfoENTRY[$row] and defined @hwFanInfoENTRY[$row]->{$col});
  +        }
  +    }
  +    return;
  +}
  +
  +1;
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/hwPs.pm
  ============================================================================
  $ cvs diff -u -r0 -r1.1 hwPs.pm
  --- /dev/null	2003-09-08 16:37:21.000000000 +0200
  +++ hwPs.pm	2003-09-08 16:37:22.000000000 +0200
  @@ -0,0 +1,85 @@
  +##
  +##  snmpdx -- SNMP Daemon Extension
  +##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  hwPs: Hardware, Powersupply
  +##
  +
  +package My::Probe::hwPs;
  +our @ISA = qw(My::Probe);
  +
  +sub oids ($) {
  +    my ($self) = @_;
  +    return $self->{-ctx}->{-mib}->oids("*.snmpdx.host.hardware.hwPs.*");
  +}
  +
  +sub probe ($$) {
  +    my ($self, $obj) = @_;
  +
  +    if ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i) {
  +        my $hwPsInfoENTRY = undef; #N/A
  +    }
  +    elsif ($self->{-ctx}->{-platform}->id() =~ m/Linux/i) {
  +        my $hwPsInfoENTRY = undef; #N/A
  +    }
  +    elsif($self->{-ctx}->{-platform}->id() =~ m/SunOS/i) {
  +        my $hwPsInfoENTRY = undef;
  +
  +        #   local workspace
  +        my $out; my $raw; my $arch; my $new;
  +
  +        #   initialize arch
  +        $arch = $self->{-ctx}->{-platform}->arch();
  +
  +        #   hwPsInfoENTRY
  +        $out = $self->{-ctx}->{-sys}->run("/usr/platform/$arch/sbin/prtdiag -v", "1m");
  +        $raw = $out->{-stdout};
  +        if ($raw =~ m/\n=+ Environmental Status =+\n.*\nPower Supplies:[^\n]*\n(.*?)\n=+/s) {
  +            $raw = $1;
  +            foreach $line (split "\n", $raw) {
  +                if ($line =~ m/(\d+)\s+(OK|ERROR)/) {
  +                    my $new = {};
  +                    $new->{hwPsId} = "PS$1";
  +                    if ($2 =~ m/^OK$/) {
  +                        $new->{hwPsStatus} = 1;
  +                    }
  +                    else {
  +                        $new->{hwPsStatus} = 0;
  +                    }
  +                    push(@hwPsInfoENTRY, $new);
  +                }
  +            }
  +        }
  +
  +        if ($obj->{-name} =~ m/\.hwPsInfoENTRY\.([^.]+)\.(\d+)$/) {
  +            my $col = $1;
  +            my $row = ($2 > 0 ? $2 - 1 : 0);
  +            $self->{-ctx}->{-log}->printf(4, "col=%s row=%s", $col, $row);
  +            $obj->{-value} = @hwPsInfoENTRY[$row]->{$col} if (defined @hwPsInfoENTRY[$row] and defined @hwPsInfoENTRY[$row]->{$col});
  +        }
  +    }
  +    return;
  +}
  +
  +1;
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 snmpdx.mib
  --- ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib	8 Sep 2003 13:43:05 -0000	1.7
  +++ ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib	8 Sep 2003 14:37:21 -0000	1.8
  @@ -253,6 +253,7 @@
       STATUS      current
       DESCRIPTION "currently free filesystem space in MB"
       ::= { sysFsInfoENTRY 5 }
  +
   --
   --  Hardware: Product
   --
  @@ -378,47 +379,108 @@
       ::= { hwDiskInfoENTRY 1 }
   
   hwDiskStatus OBJECT-TYPE
  -    SYNTAX      DisplayString
  +    SYNTAX      Integer32
       MAX-ACCESS	read-only
       STATUS	    current
       DESCRIPTION "Disk status"
       ::= { hwDiskInfoENTRY 2 }
   
  -
   --
  ---  Hardware: Power Supply
  +--  Hardware: Fan
   --
   
  -hwPS OBJECT IDENTIFIER
  +hwFan OBJECT IDENTIFIER
       ::= { hardware 5 }
   
  -hwPSNum OBJECT-TYPE
  -    SYNTAX      Integer32
  -    MAX-ACCESS  read-only
  +hwFanInfoTABLE OBJECT-TYPE
  +    SYNTAX	    SEQUENCE OF HwFanIndexENTRY
  +    MAX-ACCESS  not-accessible
       STATUS      current
  -    DESCRIPTION "number of power supplies"
  -    ::= { hwPS 1 }
  +    DESCRIPTION "FIXME Table description!?"
  +    ::= { hwFan 1 }
   
  -hwPSTemp OBJECT-TYPE
  -    SYNTAX      Gauge32
  -    MAX-ACCESS  read-only
  -    STATUS      current
  -    DESCRIPTION "temperature of Power Supply"
  -    ::= { hwPS 2 }
  +hwFanInfoENTRY OBJECT-TYPE
  +    SYNTAX	    HwFanIndexENTRY
  +    MAX-ACCESS	not-accessible
  +    STATUS	    current
  +    DESCRIPTION "FIXME Row description!?"
  +    INDEX	    { hwFanInfoIndex }
  +    ::= { hwFanInfoTABLE 1 }
  +
  +HwFanIndexENTRY ::= SEQUENCE {
  +    hwFanId       DisplayString,
  +    hwFanSpeed    Integer32,
  +    hwFanStatus   Integer32
  +}
  +
  +hwFanId OBJECT-TYPE
  +    SYNTAX      DisplayString
  +    MAX-ACCESS	read-only
  +    STATUS	    current
  +    DESCRIPTION "Fan identification"
  +    ::= { hwFanInfoENTRY 1 }
   
  -hwPSStatus OBJECT-TYPE
  +hwFanSpeed OBJECT-TYPE
       SYNTAX      Integer32
  -    MAX-ACCESS  read-only
  +    MAX-ACCESS	read-only
  +    STATUS	    current
  +    DESCRIPTION "Fan speed"
  +    ::= { hwFanInfoENTRY 2 }
  +
  +hwFanStatus OBJECT-TYPE
  +    SYNTAX      Integer32
  +    MAX-ACCESS	read-only
  +    STATUS	    current
  +    DESCRIPTION "Fan status"
  +    ::= { hwFanInfoENTRY 3 }
  +
  +--
  +--  Hardware: Powersupply
  +--
  +
  +hwPs OBJECT IDENTIFIER
  +    ::= { hardware 6 }
  +
  +hwPsInfoTABLE OBJECT-TYPE
  +    SYNTAX	    SEQUENCE OF HwPsIndexENTRY
  +    MAX-ACCESS  not-accessible
       STATUS      current
  -    DESCRIPTION "boolean status of Power Supply (0:shutdown, 1:operating: 2:error)"
  -    ::= { hwPS 3 }
  +    DESCRIPTION "FIXME Table description!?"
  +    ::= { hwPs 1 }
  +
  +hwPsInfoENTRY OBJECT-TYPE
  +    SYNTAX	    HwPsIndexENTRY
  +    MAX-ACCESS	not-accessible
  +    STATUS	    current
  +    DESCRIPTION "FIXME Row description!?"
  +    INDEX	    { hwPsInfoIndex }
  +    ::= { hwPsInfoTABLE 1 }
  +
  +HwPsIndexENTRY ::= SEQUENCE {
  +    hwPsId       DisplayString,
  +    hwPsStatus   Integer32
  +}
  +
  +hwPsId OBJECT-TYPE
  +    SYNTAX      DisplayString
  +    MAX-ACCESS	read-only
  +    STATUS	    current
  +    DESCRIPTION "Powersupply identification"
  +    ::= { hwPsInfoENTRY 1 }
  +
  +hwPsStatus OBJECT-TYPE
  +    SYNTAX      Integer32
  +    MAX-ACCESS	read-only
  +    STATUS	    current
  +    DESCRIPTION "Powersupply status"
  +    ::= { hwPsInfoENTRY 2 }
   
   --
   --  Hardware: Chassis
   --
   
   hwChassis OBJECT IDENTIFIER
  -    ::= { hardware 6 }
  +    ::= { hardware 7 }
   
   hwChassisOpen OBJECT-TYPE
       SYNTAX      Integer32
  @@ .

From ossp-cvs-owner@ossp.org  Mon Sep  8 21:03:04 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 26AB27715C; Mon,  8 Sep 2003 21:03:04 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/platform/ platform.pod platform.sh
Message-Id: <20030908190304.26AB27715C@mail.ossp.org>
Date: Mon,  8 Sep 2003 21:03:04 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Sep-2003 21:03:03
  Branch: HEAD                             Handle: 2003090820030300

  Modified files:
    ossp-pkg/platform       platform.pod platform.sh

  Log:
    finish mostly all (initial ;-) features of this program and the
    corresponding documentation

  Summary:
    Revision    Changes     Path
    1.3         +85 -28     ossp-pkg/platform/platform.pod
    1.3         +93 -17     ossp-pkg/platform/platform.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/platform/platform.pod
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 platform.pod
  --- ossp-pkg/platform/platform.pod	8 Sep 2003 11:47:05 -0000	1.2
  +++ ossp-pkg/platform/platform.pod	8 Sep 2003 19:03:03 -0000	1.3
  @@ -38,13 +38,17 @@
   [B<-C>|B<--conc> I<STRING>]
   [B<-L>|B<--lower>]
   [B<-U>|B<--upper>]
  -[B<-T>|B<--type> I<TYPE>]
   [B<-v>|B<--verbose>]
   [B<-c>|B<--concise>]
   [B<-n>|B<--newline>]
   [B<-d>|B<--debug>]
   
   B<platform>
  +[B<-t>|B<--type> I<TYPE>]
  +[B<-n>|B<--newline>]
  +[B<-d>|B<--debug>]
  +
  +B<platform>
   [B<-V>|B<--version>]
   
   B<platform>
  @@ -71,47 +75,96 @@
   
   =item B<-F>, B<--format> I<FORMAT>
   
  - %[ac]  verbose hardware architecture class
  - %[ap]  verbose hardware architecture product
  - %[at]  verbose hardware architecture technology
  - %[sc]  verbose operating system class
  - %[sp]  verbose operating system product
  - %[st]  verbose operating system technology
  - %{ac}  regular hardware architecture class
  - %{ap}  regular hardware architecture product
  - %{at}  regular hardware architecture technology
  - %{sc}  regular operating system class
  - %{sp}  regular operating system product
  - %{st}  regular operating system technology
  - %<ac>  concise hardware architecture class
  - %<ap>  concise hardware architecture product
  - %<at>  concise hardware architecture technology
  - %<sc>  concise operating system class
  - %<sp>  concise operating system product
  - %<st>  concise operating system technology
  +This option controls the output formatting of this program. It is a
  +plain-text string with the "C<%>I<xx>" constructs which expand to the
  +various platform information strings. "C<%{>I<xx>C<}>" is the canonical
  +regular version of the information. "C<%[>I<xx>C<]>" is the verbose
  +version of the information. "C<%E<lt>>I<xx>C<E<gt>>" is the concise
  +version of the information. In total, the following constructs
  +are available for expansion:
  +
  + %[ac]    verbose hardware architecture class
  + %{ac}    regular hardware architecture class
  + %<ac>    concise hardware architecture class
  + %[ap]    verbose hardware architecture product
  + %{ap}    regular hardware architecture product
  + %<ap>    concise hardware architecture product
  + %[at]    verbose hardware architecture technology
  + %{at}    regular hardware architecture technology
  + %<at>    concise hardware architecture technology
  + %[sc]    verbose operating system class
  + %{sc}    regular operating system class
  + %<sc>    concise operating system class
  + %[sp]    verbose operating system product
  + %{sp}    regular operating system product
  + %<sp>    concise operating system product
  + %[st]    verbose operating system technology
  + %{st}    regular operating system technology
  + %<st>    concise operating system technology
  +
  +The default I<FORMAT> string is "C<%{sp} (%{ap})>", providing the
  +regular operating system and hardware architecture product information.
   
   =item B<-S>, B<--sep> I<STRING>
   
  +This option sets the word I<separation> string for the platform
  +information strings. By default it is "C< >" (whitespace). It is
  +especially used for separating the operating system name and
  +the operating system version.
  +
   =item B<-C>, B<--conc> I<STRING>
   
  +This option sets the word I<concatenation> string for the platform
  +information strings. By default it is "C</>". It is especially used to
  +concatenate multiple parts in operating system name and version parts.
  +
   =item B<-L>, B<--lower>
   
  +This options enforces conversion of the output to all I<lower> case.
  +
   =item B<-U>, B<--upper>
   
  -=item B<-T>, B<--type> I<TYPE>
  +This options enforces conversion of the output to all I<upper> case.
   
   =item B<-v>, B<--verbose>
   
  +This option enforces verbose versions of all expansion constructs
  +in I<FORMAT> string of option B<-F>. It is equal to specifying all
  +expansion constructs as "C<%[>I<xx>C<]>".
  +
   =item B<-c>, B<--concise>
   
  -=item B<-n>, B<--newline>
  +This option enforces concise versions of all expansion constructs
  +in I<FORMAT> string of option B<-F>. It is equal to specifying all
  +expansion constructs as "C<%E<lt>>I<xx>C<E<gt>>".
  +
  +=item B<-n>, B<--no-newline>
  +
  +This option omits the usual trailing newline character in the output.
  +
  +=item B<-t>, B<--type> I<TYPE>
  +
  +This option is a meta option which internally sets options B<-F>, B<-S>,
  +B<-C>, B<-L>, B<-U>, B<-v> or B<-c> according to I<TYPE>. It can be
  +used to easily specify various commonly known outputs. The following
  +I<TYPE>s are available: "C<binary>" for binary package id (OpenPKG
  +RPM), "C<build>" for build time checking (OpenPKG RPM), "C<gnu> for GNU
  +F<config.guess> style id "C<web>" for non-whitespace HTTP Server-header
  +id, "C<summary>" for human readable verbose summary information, and
  +"C<all-in-one>" for an all-in-one full-table information.
   
   =item B<-d>, B<--debug>
   
  +This option enables some internal debugging messages.
  +
   =item B<-V>, B<--version>
   
  +This option outputs the version information of B<OSSP platform> only.
  +
   =item B<-h>, B<--help>
   
  +This option outputs the usage information of B<OSSP platform> only.
  +
   =back
   
   =head1 EXAMPLES
  @@ -122,17 +175,21 @@
   
   =item B<OpenPKG> build-time decisions
   
  - platform -c -L -S "" -C "+" -F "%at-%st"
  - platform -c -L -S "" -C "+" -F "%ac-%sc"
  + $ platform -c -L -S "" -C "+" -F "%at-%st"
  + $ platform -c -L -S "" -C "+" -F "%ac-%sc"
   
   =item B<OpenPKG> binary RPM packages
  - 
  - platform -c -L -S "" -C "+" -F "%ap-%sp"
  +
  + $ platform -c -L -S "" -C "+" -F "%ap-%sp"
   
   =item F<README> files
  - 
  - platform -v -F "%sp (%ap)"
  - platform -v -F "%sc (%ac)"
  +
  + $ platform -v -F "%sp (%ap)"
  + $ platform -v -F "%sc (%ac)"
  +
  +=item Debugging
  +
  + $ platform --type=all-in-one
   
   =back
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/platform/platform.sh
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 platform.sh
  --- ossp-pkg/platform/platform.sh	8 Sep 2003 11:24:01 -0000	1.2
  +++ ossp-pkg/platform/platform.sh	8 Sep 2003 19:03:03 -0000	1.3
  @@ -25,7 +25,7 @@
   ##
   
   #   program information
  -prog_run="${prog_run}"
  +prog_run="${0}"
   prog_cmd="platform"
   prog_name="OSSP platform"
   prog_vers="0.1.0"
  @@ -44,22 +44,22 @@
   str_usage="$str_usage [-C|--conc STRING]"
   str_usage="$str_usage [-L|--lower]"
   str_usage="$str_usage [-U|--upper]"
  -str_usage="$str_usage [-T|--type TYPE]"
   str_usage="$str_usage [-v|--verbose]"
   str_usage="$str_usage [-c|--concise]"
  -str_usage="$str_usage [-n|--newline]"
  +str_usage="$str_usage [-n|--no-newline]"
  +str_usage="$str_usage [-t|--type TYPE]"
   str_usage="$str_usage [-d|--debug]"
   str_usage="$str_usage [-V|--version]"
   str_usage="$str_usage [-h|--help]"
   arg_spec="0="
  -opt_spec="F:S:C:L.U.T:v.c.n.d.V.h."
  -opt_alias="F:format,S:sep,C:conc,L:lower,U:upper,T:type,v:verbose,c:consise,n:newline,d:debug,V:version,h:help"
  -opt_F="Class:      %sc (%ac)\\nProduct:    %sp (%ap)\\nTechnology: %st (%at)"
  +opt_spec="F:S:C:L.U.v.c.n.t:d.V.h."
  +opt_alias="F:format,S:sep,C:conc,L:lower,U:upper,v:verbose,c:consise,t:type,n:no-newline,d:debug,V:version,h:help"
  +opt_F="%{sp} (%{ap})"
   opt_S=" "
   opt_C="/"
   opt_L=no
   opt_U=no
  -opt_T=""
  +opt_t=""
   opt_v=no
   opt_c=no
   opt_n=no
  @@ -68,7 +68,7 @@
   opt_h=no
   
   #   commonly used ASCII values
  -ASC_TAB="   "
  +ASC_TAB="	"
   ASC_NL="
   "
   
  @@ -202,6 +202,76 @@
   
   ##  _________________________________________________________________________
   ##
  +##                         OPTION POST-PROCESSING
  +##  _________________________________________________________________________
  +##
  +
  +if [ ".$opt_t" != . ]; then
  +    case "$opt_t" in
  +        binary )
  +            #   binary package id (OpenPKG RPM)
  +            opt_F="%<ap>-%<sp>"
  +            opt_L=yes
  +            opt_S=""
  +            opt_C="+"
  +            ;;
  +        build )
  +            #   build time checking (OpenPKG RPM)
  +            opt_F="%<at>-%<st>"
  +            opt_L=yes
  +            opt_S=""
  +            opt_C="+"
  +            ;;
  +        gnu )
  +            #   GNU config.guess style <arch>-<vendor>-<os><osversion>
  +            opt_F="%<at>-unknown-%<st>"
  +            opt_L=yes
  +            opt_S=""
  +            opt_C="+"
  +            ;;
  +        web )
  +            #   non-whitespace HTTP Server-header id
  +            opt_F="%<ap>-%<sp>"
  +            opt_S="/"
  +            opt_C="+"
  +            ;;
  +        summary)
  +            #   human readable verbose summary information
  +            opt_F="Class:      %[sc] (%[ac])\\nProduct:    %[sp] (%[ap])\\nTechnology: %[st] (%[at])"
  +            opt_S=" "
  +            opt_C="/"
  +            ;;
  +        all-in-one )
  +            #   full-table all-in-one information
  +            opt_F=""
  +            opt_F="${opt_F}concise architecture class:      %<ac>\\n"
  +            opt_F="${opt_F}regular architecture class:      %{ac}\\n"
  +            opt_F="${opt_F}verbose architecture class:      %[ac]\\n"
  +            opt_F="${opt_F}concise architecture product:    %<ap>\\n"
  +            opt_F="${opt_F}regular architecture product:    %{ap}\\n"
  +            opt_F="${opt_F}verbose architecture product:    %[ap]\\n"
  +            opt_F="${opt_F}concise architecture technology: %<at>\\n"
  +            opt_F="${opt_F}regular architecture technology: %{at}\\n"
  +            opt_F="${opt_F}verbose architecture technology: %[at]\\n"
  +            opt_F="${opt_F}concise system class:            %<sc>\\n"
  +            opt_F="${opt_F}regular system class:            %{sc}\\n"
  +            opt_F="${opt_F}verbose system class:            %[sc]\\n"
  +            opt_F="${opt_F}concise system product:          %<sp>\\n"
  +            opt_F="${opt_F}regular system product:          %{sp}\\n"
  +            opt_F="${opt_F}verbose system product:          %[sp]\\n"
  +            opt_F="${opt_F}concise system technology:       %<st>\\n"
  +            opt_F="${opt_F}regular system technology:       %{st}\\n"
  +            opt_F="${opt_F}verbose system technology:       %[st]"
  +            ;;
  +        * )
  +            echo "${prog_cmd}:Error: invalid type \`$opt_t'" 1>&2
  +            exit 1
  +            ;;
  +    esac
  +fi
  +
  +##  _________________________________________________________________________
  +##
   ##                            UTILITY FUNCTIONS
   ##  _________________________________________________________________________
   ##
  @@ -399,7 +469,11 @@
                   val_V=`echo ":$val" | \
                          sed -e 's/^://' \
                              -e 's;\[\([^]]*\)\];\1;g' \
  -                           -e 's;<\([^>]*\)>;\1;'`
  +                           -e 's;<\([^>]*\)>;\1;' \
  +                           -e "s; ;§§;g" \
  +                           -e "s;/;%%;g" \
  +                           -e "s;§§;${opt_S};g" \
  +                           -e "s;%%;${opt_C};g"`
                   eval "${var_uc}_V=\"\${val_V}\""
                   ;;
           esac
  @@ -408,7 +482,11 @@
                   val_N=`echo ":$val" | \
                          sed -e 's/^://' \
                              -e 's;\[\([^]]*\)\];;g' \
  -                           -e 's;<\([^>]*\)>;\1;'`
  +                           -e 's;<\([^>]*\)>;\1;' \
  +                           -e "s; ;§§;g" \
  +                           -e "s;/;%%;g" \
  +                           -e "s;§§;${opt_S};g" \
  +                           -e "s;%%;${opt_C};g"`
                   eval "${var_uc}_N=\"\${val_N}\""
                   ;;
           esac
  @@ -417,7 +495,11 @@
                   val_C=`echo ":$val" | \
                          sed -e 's/^://' \
                              -e 's;\[\([^]]*\)\];;g' \
  -                           -e 's;[^<]*<\([^>]*\)>;\1;'`
  +                           -e 's;[^<]*<\([^>]*\)>;\1;' \
  +                           -e "s; ;§§;g" \
  +                           -e "s;/;%%;g" \
  +                           -e "s;§§;${opt_S};g" \
  +                           -e "s;%%;${opt_C};g"`
                   eval "${var_uc}_C=\"\${val_C}\""
                   ;;
           esac
  @@ -461,12 +543,6 @@
   elif [ ".$opt_U" = .yes ]; then
       output=`util_upper "$output"`
   fi
  -
  -#   support particular separator and concatenator strings
  -output=`echo ":$output" |
  -        sed -e 's/^://' \
  -            -e "s; ;${opt_S};g" \
  -            -e "s;/;${opt_C};g"`
   
   #   display output string
   if [ ".$opt_n" = .yes ]; then
  @@ .

From ossp-cvs-owner@ossp.org  Mon Sep  8 21:13:01 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A62937715C; Mon,  8 Sep 2003 21:13:00 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/platform/ platform.sh
Message-Id: <20030908191300.A62937715C@mail.ossp.org>
Date: Mon,  8 Sep 2003 21:13:00 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Sep-2003 21:13:00
  Branch: HEAD                             Handle: 2003090820130000

  Modified files:
    ossp-pkg/platform       platform.sh

  Log:
    better LSB support for Linux boxes (especially important for SuSE)

  Summary:
    Revision    Changes     Path
    1.4         +28 -20     ossp-pkg/platform/platform.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/platform/platform.sh
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 platform.sh
  --- ossp-pkg/platform/platform.sh	8 Sep 2003 19:03:03 -0000	1.3
  +++ ossp-pkg/platform/platform.sh	8 Sep 2003 19:13:00 -0000	1.4
  @@ -359,27 +359,35 @@
           v_libc=`(strings /lib/libc.so.* | grep '^GLIBC_' | sed -e 's/^GLIBC_//' |\
               sort -n | tail -1 | sed -e 's/^\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/') 2>&1`
           ST="GNU/Linux ${v_libc}/${v_kern}"
  -        for tagfile in dummy `cd /etc && echo *[_-]release *[_-]version 2>/dev/null`; do
  -            test ! -f /etc/${tagfile} && continue
  -            n=`echo ${tagfile} | sed -e 's/[_-]release$//' -e 's/[_-]version$//'`
  -            v=`cat /etc/${tagfile} | grep '[0-9]' | head -1 |\
  -               sed -e 's/^/#/' \
  -                   -e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' \
  -                   -e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' \
  -                   -e 's/^#[^0-9]*\([0-9][0-9]*\).*$/\1/' \
  -                   -e 's/^#.*$//'`
  -            case "`util_lower ${n}`" in
  -                debian   ) n="Debian[ GNU/Linux]" ;;
  -                redhat   ) n="RedHat[ Linux}"     ;;
  -                suse     ) n="SuSE[ Linux]"       ;;
  -                mandrake ) n="Mandrake[ Linux}"   ;;
  -                gentoo   ) n="Gentoo[ Linux]"     ;;
  -                *        ) n="${n}[ GNU/Linux]"   ;;
  -            esac
  -            SP="$n $v"
  -        done
  +        if [ -f /etc/lsb-release ]; then
  +            eval `( . /etc/lsb-release
  +              echo "SC=\"LSB${LSB_VERSION}\""
  +              echo "SP=\"${DISTRIB_ID} ${DISTRIB_RELEASE}\""
  +            ) 2>/dev/null`
  +        fi
  +        if [ ".$SP" = . ]; then
  +            for tagfile in dummy `cd /etc && echo *[_-]release *[_-]version 2>/dev/null`; do
  +                test ! -f /etc/${tagfile} && continue
  +                n=`echo ${tagfile} | sed -e 's/[_-]release$//' -e 's/[_-]version$//'`
  +                v=`cat /etc/${tagfile} | grep '[0-9]' | head -1 |\
  +                   sed -e 's/^/#/' \
  +                       -e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' \
  +                       -e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' \
  +                       -e 's/^#[^0-9]*\([0-9][0-9]*\).*$/\1/' \
  +                       -e 's/^#.*$//'`
  +                case "`util_lower ${n}`" in
  +                    debian   ) n="Debian[ GNU/Linux]" ;;
  +                    redhat   ) n="RedHat[ Linux]"     ;;
  +                    suse     ) n="SuSE[ Linux]"       ;;
  +                    mandrake ) n="Mandrake[ Linux}"   ;;
  +                    gentoo   ) n="Gentoo[ Linux]"     ;;
  +                    *        ) n="${n}[ GNU/Linux]"   ;;
  +                esac
  +                SP="$n $v"
  +            done
  +        fi
           [ ".$SP" = . ] && SP="${ST}"
  -        SC="LSB"
  +        [ ".$SC" = . ] && SC="LSB"
           ;;
   
       #   Sun Solaris
  @@ .

From ossp-cvs-owner@ossp.org  Tue Sep  9 09:46:04 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3B3367715F; Tue,  9 Sep 2003 09:46:04 +0200 (CEST)
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/tool/rc/ index.wml
Message-Id: <20030909074604.3B3367715F@mail.ossp.org>
Date: Tue,  9 Sep 2003 09:46:04 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   OSSP Project Master
  Root:   /e/ossp/cvs                      Email:  ossp@ossp.org
  Module: ossp-web                         Date:   09-Sep-2003 09:46:03
  Branch: HEAD                             Handle: 2003090908460300

  Modified files:
    ossp-web/pkg/tool/rc    index.wml

  Log:
    flush pending work

  Summary:
    Revision    Changes     Path
    1.4         +13 -3      ossp-web/pkg/tool/rc/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/rc/index.wml
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 index.wml
  --- ossp-web/pkg/tool/rc/index.wml	10 Jul 2003 18:04:21 -0000	1.3
  +++ ossp-web/pkg/tool/rc/index.wml	9 Sep 2003 07:46:03 -0000	1.4
  @@ -7,9 +7,19 @@
   
   <h2>Abstract</h2>
   
  -OSSP rc is a run-command processor. Its primary function is to scan
  -run-command script files for run-command sections and run the commands
  -listed in the sections. Its primary purpose is to be used as a generic
  +OSSP rc is a generic run-command processor. Its primary function is to
  +assemble a temporary script from excerpts of one or more run-commmand
  +files which are built out of text snippets grouped into sections.
  +The user specifies the desired parts to use and also controls the
  +order of assembly. The program is not tied to a particular syntax for
  +neither the run-command section tags nor the contained scripts. By
  +default, the assembled script is executed by a specified interpreter
  +(usually a shell), but it can also be written into a temporary file
  +for evaluation inside a calling shell, or even just printed to stdout
  +for further processing.
  +
  +<p>
  +Its primary purpose is to be used as a generic
   run-command facility in an operating system or a sub-system like <a
   href="http://www.openpkg.org/">OpenPKG</a>.
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Sep  9 11:05:32 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CBD9677168; Tue,  9 Sep 2003 11:05:31 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/platform/ platform.sh
Message-Id: <20030909090531.CBD9677168@mail.ossp.org>
Date: Tue,  9 Sep 2003 11:05:31 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Sep-2003 11:05:31
  Branch: HEAD                             Handle: 2003090910053100

  Modified files:
    ossp-pkg/platform       platform.sh

  Log:
    fix consise output generation and ommit the GNU part in GNU/Linux
    under consise output

  Summary:
    Revision    Changes     Path
    1.5         +4  -4      ossp-pkg/platform/platform.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/platform/platform.sh
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 platform.sh
  --- ossp-pkg/platform/platform.sh	8 Sep 2003 19:13:00 -0000	1.4
  +++ ossp-pkg/platform/platform.sh	9 Sep 2003 09:05:31 -0000	1.5
  @@ -358,7 +358,7 @@
               sed -e 's/^\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/'`
           v_libc=`(strings /lib/libc.so.* | grep '^GLIBC_' | sed -e 's/^GLIBC_//' |\
               sort -n | tail -1 | sed -e 's/^\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/') 2>&1`
  -        ST="GNU/Linux ${v_libc}/${v_kern}"
  +        ST="GNU/<Linux >${v_libc}/<${v_kern}>"
           if [ -f /etc/lsb-release ]; then
               eval `( . /etc/lsb-release
                 echo "SC=\"LSB${LSB_VERSION}\""
  @@ -477,7 +477,7 @@
                   val_V=`echo ":$val" | \
                          sed -e 's/^://' \
                              -e 's;\[\([^]]*\)\];\1;g' \
  -                           -e 's;<\([^>]*\)>;\1;' \
  +                           -e 's;<\([^>]*\)>;\1;g' \
                              -e "s; ;§§;g" \
                              -e "s;/;%%;g" \
                              -e "s;§§;${opt_S};g" \
  @@ -490,7 +490,7 @@
                   val_N=`echo ":$val" | \
                          sed -e 's/^://' \
                              -e 's;\[\([^]]*\)\];;g' \
  -                           -e 's;<\([^>]*\)>;\1;' \
  +                           -e 's;<\([^>]*\)>;\1;g' \
                              -e "s; ;§§;g" \
                              -e "s;/;%%;g" \
                              -e "s;§§;${opt_S};g" \
  @@ -503,7 +503,7 @@
                   val_C=`echo ":$val" | \
                          sed -e 's/^://' \
                              -e 's;\[\([^]]*\)\];;g' \
  -                           -e 's;[^<]*<\([^>]*\)>;\1;' \
  +                           -e 's;[^<]*<\([^>]*\)>;\1;g' \
                              -e "s; ;§§;g" \
                              -e "s;/;%%;g" \
                              -e "s;§§;${opt_S};g" \
  @@ .

From ossp-cvs-owner@ossp.org  Tue Sep  9 11:05:58 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D0A1477176; Tue,  9 Sep 2003 11:05:57 +0200 (CEST)
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/tool/ index.wml ossp-web/pkg/tool/snmpdx/ .cv...
Message-Id: <20030909090557.D0A1477176@mail.ossp.org>
Date: Tue,  9 Sep 2003 11:05:57 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   OSSP Project Master
  Root:   /e/ossp/cvs                      Email:  ossp@ossp.org
  Module: ossp-web                         Date:   09-Sep-2003 11:05:57
  Branch: HEAD                             Handle: 2003090910055601

  Added files:
    ossp-web/pkg/tool/snmpdx
                            .cvsignore index.wml
  Modified files:
    ossp-web/pkg/tool       index.wml

  Log:
    add snmpdx

  Summary:
    Revision    Changes     Path
    1.29        +3  -0      ossp-web/pkg/tool/index.wml
    1.1         +1  -0      ossp-web/pkg/tool/snmpdx/.cvsignore
    1.1         +39 -0      ossp-web/pkg/tool/snmpdx/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 index.wml
  --- ossp-web/pkg/tool/index.wml	10 Jul 2003 18:04:20 -0000	1.28
  +++ ossp-web/pkg/tool/index.wml	9 Sep 2003 09:05:56 -0000	1.29
  @@ -54,5 +54,8 @@
     <pkg_item name="mct" longname="OSSP mct" type="tool"
               desc="Multiple Choice Test Engine"
   	        done=90 stable="none" unstable="none">
  +  <pkg_item name="snmpdx" longname="OSSP snmpdx" type="tool"
  +            desc="SNMP Daemon Extension"
  +	        done=20 stable="none" unstable="0.2.0">
   </pkg_list>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/snmpdx/.cvsignore
  ============================================================================
  $ cvs diff -u -r0 -r1.1 .cvsignore
  --- /dev/null	2003-09-09 11:05:57.000000000 +0200
  +++ .cvsignore	2003-09-09 11:05:57.000000000 +0200
  @@ -0,0 +1 @@
  +*.html
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/snmpdx/index.wml
  ============================================================================
  $ cvs diff -u -r0 -r1.1 index.wml
  --- /dev/null	2003-09-09 11:05:57.000000000 +0200
  +++ index.wml	2003-09-09 11:05:57.000000000 +0200
  @@ -0,0 +1,39 @@
  +
  +#use wml::ossp area=pkg:tool subarea=snmpdx
  +
  +<title>OSSP snmpdx</title>
  +
  +<h1>SNMP Daemon Extension</h1>
  +
  +<h2>Abstract</h2>
  +
  +OSSP snmpdx is a framework for easily hooking into net-snmp's snmpd(8) and
  +providing an own SNMP MIB and the OID implementing probes. It is a Perl
  +program which either can be configured as a pass (not recommended) or
  +pass_persist (recommended) program into snmpd.conf.
  +
  +<h2>Authors</h2>
  +
  +<pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  +<pkg_author name="Thomas Lotterer" mail="thomas@lotterer.net">
  +
  +<h2>Status</h2>
  +
  +<pkg_status
  +    stable="none" stable_date="none"
  +    unstable="0.2.0" unstable_date="9-Sep-2003"
  +	done=20>
  +
  +<h2>Source</h2>
  +
  +<pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/tool/snmpdx/
  +    url=$(FTP_ROOT_URL)/pkg/tool/snmpdx/
  +    directory=$(FTP_ROOT_DIR)/pkg/tool/snmpdx/
  +    files="snmpdx-*.tar.gz" 
  +	stable="none" unstable="snmpdx-0.2.0.tar.gz">
  +	
  +<h2>Donation</h2>
  +
  +<pkg_donation name="snmpdx" return="$(BASE_URL)/pkg/tool/snmpdx/">
  +
  @@ .

From ossp-cvs-owner@ossp.org  Tue Sep  9 11:24:33 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 339B977168; Tue,  9 Sep 2003 11:24:33 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/platform/ platform.sh
Message-Id: <20030909092433.339B977168@mail.ossp.org>
Date: Tue,  9 Sep 2003 11:24:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Sep-2003 11:24:32
  Branch: HEAD                             Handle: 2003090910243200

  Modified files:
    ossp-pkg/platform       platform.sh

  Log:
    FreeBSD output just Xeon sometimes

  Summary:
    Revision    Changes     Path
    1.6         +1  -1      ossp-pkg/platform/platform.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/platform/platform.sh
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 platform.sh
  --- ossp-pkg/platform/platform.sh	9 Sep 2003 09:05:31 -0000	1.5
  +++ ossp-pkg/platform/platform.sh	9 Sep 2003 09:24:32 -0000	1.6
  @@ -328,7 +328,7 @@
           AP="${AC}"
           AT=`(/sbin/sysctl -n hw.model) 2>&1`
           case "${AT}" in
  -            *"Pentium Pro"* | *"Cyrix 6x86MX"* | *"Pentium II"* | *"Pentium III"* | *"Pentium 4"* | *"Celeron"* ) AT="i686" ;;
  +            *"Xeon"* | *"Pentium Pro"* | *"Cyrix 6x86MX"* | *"Pentium II"* | *"Pentium III"* | *"Pentium 4"* | *"Celeron"* ) AT="i686" ;;
               *"Pentium"* ) AT="i586" ;; *"i486[SD]X"* | *"Cyrix 486"* | *"Cyrix [56]x86"* | *"Blue Lightning" | *"Cyrix 486S/DX" ) AT="i486" ;;
               *"i386[SD]X"* | *"NexGen 586"* ) AT="i386" ;;
               * ) AT="${AP}" ;;
  @@ .

From ossp-cvs-owner@ossp.org  Tue Sep  9 11:28:37 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 109737716E; Tue,  9 Sep 2003 11:28:37 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ devtool.conf
Message-Id: <20030909092837.109737716E@mail.ossp.org>
Date: Tue,  9 Sep 2003 11:28:37 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   09-Sep-2003 11:28:36
  Branch: HEAD                             Handle: 2003090910283600

  Modified files:
    ossp-pkg/snmpdx         devtool.conf

  Log:
    snmpdx is a tool not a library

  Summary:
    Revision    Changes     Path
    1.2         +2  -2      ossp-pkg/snmpdx/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.conf
  --- ossp-pkg/snmpdx/devtool.conf	9 Sep 2003 09:24:28 -0000	1.1
  +++ ossp-pkg/snmpdx/devtool.conf	9 Sep 2003 09:28:36 -0000	1.2
  @@ -60,7 +60,7 @@
       gunzip <snmpdx-${V}.tar.gz | tar tvf - | tail -10
   
   %upload
  -    echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/snmpdx/"
  +    echo "+++ copying to ftp://ftp.ossp.org/pkg/tool/snmpdx/"
       V=`./shtool version -lc -dshort VERSION`
  -    scp snmpdx-${V}.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/snmpdx/
  +    scp snmpdx-${V}.tar.gz master.ossp.org:/e/ossp/ftp/pkg/tool/snmpdx/
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Sep  9 11:28:55 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7F6917717E; Tue,  9 Sep 2003 11:28:55 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ .cvsignore
Message-Id: <20030909092855.7F6917717E@mail.ossp.org>
Date: Tue,  9 Sep 2003 11:28:55 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   09-Sep-2003 11:28:55
  Branch: HEAD                             Handle: 2003090910285500

  Added files:
    ossp-pkg/snmpdx         .cvsignore

  Log:
    ignore tarballs

  Summary:
    Revision    Changes     Path
    1.1         +4  -0      ossp-pkg/snmpdx/.cvsignore
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/.cvsignore
  ============================================================================
  $ cvs diff -u -r0 -r1.1 .cvsignore
  --- /dev/null	2003-09-09 11:28:55.000000000 +0200
  +++ .cvsignore	2003-09-09 11:28:55.000000000 +0200
  @@ -0,0 +1,4 @@
  +*.tar
  +*.tar.Z
  +*.tar.gz
  +*.tar.bz2
  @@ .

From ossp-cvs-owner@ossp.org  Tue Sep  9 14:50:05 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A51727715A; Tue,  9 Sep 2003 14:50:05 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ AUTHORS ChangeLog INSTALL Makefile.in REA...
Message-Id: <20030909125005.A51727715A@mail.ossp.org>
Date: Tue,  9 Sep 2003 14:50:05 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   09-Sep-2003 14:50:05
  Branch: HEAD                             Handle: 2003090913500400

  Added files:
    ossp-pkg/snmpdx         snmpdx.cfg.in
  Modified files:
    ossp-pkg/snmpdx         AUTHORS ChangeLog INSTALL Makefile.in README
                            THANKS VERSION configure.ac shtool snmpdx.pl
  Removed files:
    ossp-pkg/snmpdx         snmpdx.cfg

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/snmpdx/AUTHORS
    1.2         +1  -1      ossp-pkg/snmpdx/ChangeLog
    1.2         +1  -1      ossp-pkg/snmpdx/INSTALL
    1.2         +48 -21     ossp-pkg/snmpdx/Makefile.in
    1.2         +1  -1      ossp-pkg/snmpdx/README
    1.2         +1  -1      ossp-pkg/snmpdx/THANKS
    1.2         +8  -8      ossp-pkg/snmpdx/VERSION
    1.2         +1  -1      ossp-pkg/snmpdx/configure.ac
    1.2         +0  -0      ossp-pkg/snmpdx/shtool
    1.3         +0  -8      ossp-pkg/snmpdx/snmpdx.cfg
    1.1         +8  -0      ossp-pkg/snmpdx/snmpdx.cfg.in
    1.2         +6  -9      ossp-pkg/snmpdx/snmpdx.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/AUTHORS
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 AUTHORS
  --- ossp-pkg/snmpdx/AUTHORS	9 Sep 2003 09:24:28 -0000	1.1
  +++ ossp-pkg/snmpdx/AUTHORS	9 Sep 2003 12:50:04 -0000	1.2
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|    
   
     OSSP snmpdx - SNMP Daemon Extension
  -  Version 0.2.0 (09-Sep-2003)
  +  Version 0.2.1 (09-Sep-2003)
     ____________________________________________________________________
   
     AUTHORS
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ChangeLog
  --- ossp-pkg/snmpdx/ChangeLog	9 Sep 2003 09:24:28 -0000	1.1
  +++ ossp-pkg/snmpdx/ChangeLog	9 Sep 2003 12:50:04 -0000	1.2
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|    
   
     OSSP snmpdx - SNMP Daemon Extension
  -  Version 0.2.0 (09-Sep-2003)
  +  Version 0.2.1 (09-Sep-2003)
     ____________________________________________________________________
   
     ChangeLog
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/INSTALL
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 INSTALL
  --- ossp-pkg/snmpdx/INSTALL	9 Sep 2003 09:24:28 -0000	1.1
  +++ ossp-pkg/snmpdx/INSTALL	9 Sep 2003 12:50:04 -0000	1.2
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|    
   
     OSSP snmpdx - SNMP Daemon Extension
  -  Version 0.2.0 (09-Sep-2003)
  +  Version 0.2.1 (09-Sep-2003)
     ____________________________________________________________________
   
     INSTALLATION
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 Makefile.in
  --- ossp-pkg/snmpdx/Makefile.in	9 Sep 2003 09:24:28 -0000	1.1
  +++ ossp-pkg/snmpdx/Makefile.in	9 Sep 2003 12:50:04 -0000	1.2
  @@ -28,29 +28,50 @@
   
   @SET_MAKE@
   
  -SHELL       = /bin/sh
  -SHTOOL      = ./shtool
  -RM          = rm -f
  -SED         = sed
  -POD2MAN     = pod2man
  -PERL        = @PATH_PERL@
  -
  -prefix      = @prefix@
  -exec_prefix = @exec_prefix@
  -bindir      = @bindir@
  -libdir      = @libdir@
  -includedir  = @includedir@
  -mandir      = @mandir@
  +SHELL         = /bin/sh
  +SHTOOL        = ./shtool
  +RM            = rm -f
  +SED           = sed
  +POD2MAN       = pod2man
  +PERL          = @PATH_PERL@
  +              
  +prefix        = @prefix@
  +exec_prefix   = @exec_prefix@
  +bindir        = @bindir@
  +libdir        = @libdir@
  +sysconfdir    = @sysconfdir@
  +libexecdir    = @libexecdir@
  +includedir    = @includedir@
  +mandir        = @mandir@
  +datadir       = @datadir@
  +localstatedir = @localstatedir@
   
  -DESTDIR     =
  +DESTDIR       =
   
  -all: snmpdx snmpdx.1
  +all: snmpdx snmpdx.cfg snmpdx.1
   
   snmpdx: snmpdx.pl
   	@$(SHTOOL) echo -e "%Bgenerating snmpdx%b"
  -	$(SED) -e "s;#!\@PERL\@;#!$(PERL);" \
  -	<snmpdx.pl >snmpdx && \
  -	chmod a+x snmpdx
  +	V=`$(SHTOOL) version -l txt -d short VERSION`; \
  +	D=`$(SHTOOL) version -l txt -d long VERSION | $(SED) -e 's;.*(;;' -e 's;).*;;'`; \
  +	$(SED) \
  +		-e "s;#!\@PERL\@;#!$(PERL);" \
  +		-e "s;\@V\@;$$V;" \
  +		-e "s;\@D\@;$$D;" \
  +		-e "s;\@sysconfdir\@;$(sysconfdir);" \
  +		-e "s;\@libexecdir\@;$(libexecdir);" \
  +		-e "s;\@datadir\@;$(datadir);" \
  +		-e "s;\@localstatedir\@;$(localstatedir);" \
  +		<snmpdx.pl >snmpdx && \
  +		chmod a+x snmpdx
  +
  +snmpdx.cfg: snmpdx.cfg.in
  +	@$(SHTOOL) echo -e "%Bgenerating snmpdx.cfg%b"
  +	$(SED) \
  +		-e 's;\@libexecdir\@;$(libexecdir);g' \
  +		-e 's;\@datadir\@;$(datadir);g' \
  +		-e 's;\@localstatedir\@;$(localstatedir);g' \
  +		<snmpdx.cfg.in >snmpdx.cfg
   
   snmpdx.1: snmpdx.pod
   	@$(SHTOOL) echo -e "%Bgenerating snmpdx.1%b"
  @@ -61,15 +82,21 @@
   
   install: all
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
  -	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libdir)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(sysconfdir)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(datadir)/snmpdx/mibs
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libexecdir)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man1
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(localstatedir)
   	$(SHTOOL) install -c -m 755 snmpdx $(DESTDIR)$(bindir)/snmpdx
  +	$(SHTOOL) install -c -m 644 snmpdx.cfg $(DESTDIR)$(sysconfdir)/snmpdx.cfg
  +	$(SHTOOL) install -c -m 644 snmpdx.mib/*.mib $(DESTDIR)$(datadir)/snmpdx/mibs/
  +	$(SHTOOL) install -c -m 644 snmpdx.d/*.pm $(DESTDIR)$(libexecdir)/
   	$(SHTOOL) install -c -m 644 snmpdx.1 $(DESTDIR)$(mandir)/man1/snmpdx.1
   
   clean:
  -	$(RM) snmpdx snmpdx.1
  +	$(RM) snmpdx snmpdx.cfg snmpdx.1
   
   distclean: clean
   	$(RM) config.cache config.status config.log
  -	$(RM) Makefile config.h
  +	$(RM) Makefile
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/README
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 README
  --- ossp-pkg/snmpdx/README	9 Sep 2003 09:24:28 -0000	1.1
  +++ ossp-pkg/snmpdx/README	9 Sep 2003 12:50:04 -0000	1.2
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|    
   
     OSSP snmpdx - SNMP Daemon Extension
  -  Version 0.2.0 (09-Sep-2003)
  +  Version 0.2.1 (09-Sep-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/THANKS
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 THANKS
  --- ossp-pkg/snmpdx/THANKS	9 Sep 2003 09:24:28 -0000	1.1
  +++ ossp-pkg/snmpdx/THANKS	9 Sep 2003 12:50:04 -0000	1.2
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|    
   
     OSSP snmpdx - SNMP Daemon Extension
  -  Version 0.2.0 (09-Sep-2003)
  +  Version 0.2.1 (09-Sep-2003)
     ____________________________________________________________________
     
     THANKS
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/VERSION
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 VERSION
  --- ossp-pkg/snmpdx/VERSION	9 Sep 2003 09:24:28 -0000	1.1
  +++ ossp-pkg/snmpdx/VERSION	9 Sep 2003 12:50:04 -0000	1.2
  @@ -4,14 +4,14 @@
   ##
   
   my $snmpdx_version = {
  -    'v_hex'   => 0x002200,
  -    'v_short' => "0.2.0",
  -    'v_long'  => "0.2.0 (09-Sep-2003)",
  -    'v_tex'   => "This is OSSP snmpdx, Version 0.2.0 (09-Sep-2003)",
  -    'v_gnu'   => "OSSP snmpdx 0.2.0 (09-Sep-2003)",
  -    'v_web'   => "OSSP snmpdx/0.2.0",
  -    'v_sccs'  => "@(#)OSSP snmpdx 0.2.0 (09-Sep-2003)",
  -    'v_rcs'   => "\$Id: VERSION,v 1.1 2003/09/09 09:24:28 thl Exp $/"
  +    'v_hex'   => 0x002201,
  +    'v_short' => "0.2.1",
  +    'v_long'  => "0.2.1 (09-Sep-2003)",
  +    'v_tex'   => "This is OSSP snmpdx, Version 0.2.1 (09-Sep-2003)",
  +    'v_gnu'   => "OSSP snmpdx 0.2.1 (09-Sep-2003)",
  +    'v_web'   => "OSSP snmpdx/0.2.1",
  +    'v_sccs'  => "@(#)OSSP snmpdx 0.2.1 (09-Sep-2003)",
  +    'v_rcs'   => "\$Id: VERSION,v 1.2 2003/09/09 12:50:04 thl Exp $/"
   };
   
   1;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/configure.ac
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 configure.ac
  --- ossp-pkg/snmpdx/configure.ac	9 Sep 2003 09:24:28 -0000	1.1
  +++ ossp-pkg/snmpdx/configure.ac	9 Sep 2003 12:50:04 -0000	1.2
  @@ -49,7 +49,7 @@
   
   AC_SET_MAKE
   
  -AC_CONFIG_HEADERS(config.h)
  +##AC_CONFIG_HEADERS(config.h)
   AC_CONFIG_FILES([Makefile])
   AC_OUTPUT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/shtool
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 shtool
  --- ossp-pkg/snmpdx/shtool	9 Sep 2003 09:24:28 -0000	1.1
  +++ ossp-pkg/snmpdx/shtool	9 Sep 2003 12:50:04 -0000	1.2
  @@ -3241,7 +3241,7 @@
           vGNU="${name} ${triple} (${tim})"
           vWeb="${name}/${triple}"
           vSCCS="@(#)${name} ${triple} (${tim})"
  -        vRCS="\$Id: shtool,v 1.1 2003/09/09 09:24:28 thl Exp ${name} ${triple} (${tim}) \$"
  +        vRCS="\$Id: shtool,v 1.2 2003/09/09 12:50:04 thl Exp ${name} ${triple} (${tim}) \$"
       
           #   determine string out of filename
           #   (do NOT try to optimize this in any way because of portability)
  @@ .
  rm -f ossp-pkg/snmpdx/snmpdx.cfg <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.cfg
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.cfg.in
  ============================================================================
  $ cvs diff -u -r0 -r1.1 snmpdx.cfg.in
  --- /dev/null	2003-09-09 14:50:04.000000000 +0200
  +++ snmpdx.cfg.in	2003-09-09 14:50:04.000000000 +0200
  @@ -0,0 +1,8 @@
  +##
  +##  snmpdx.cfg -- configuration file for SNMP Daemon Extension
  +##
  +
  +mibdir    @datadir@/snmpdx/mibs:@datadir@/snmp/mibs
  +probedir  @libexecdir@
  +logfile   @localstatedir@/snmpdx.log
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.pl
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 snmpdx.pl
  --- ossp-pkg/snmpdx/snmpdx.pl	9 Sep 2003 09:24:28 -0000	1.1
  +++ ossp-pkg/snmpdx/snmpdx.pl	9 Sep 2003 12:50:04 -0000	1.2
  @@ -35,8 +35,8 @@
   #   program information
   my $prg = {
       'name'    => 'OSSP snmpdx',
  -    'version' => '0.2.0',
  -    'date'    => '01-Sep-2003'
  +    'version' => '@V@',
  +    'date'    => '@D@'
   };
   
   ##  _________________________________________________________________________
  @@ -475,12 +475,9 @@
   
   package main;
   
  -#   find path to ourself
  -my $myroot = "$FindBin::Bin";
  -
   #   parameters (defaults)
   my $opt = {
  -    'config'    => "$myroot/snmpdx.cfg",
  +    'config'    => "@sysconfdir@/snmpdx.cfg",
       'version'   => 0,
       'help'      => 0,
       'tmpdir'    => ($ENV{TMPDIR} || $ENV{TEMPDIR} || "/tmp"),
  @@ -488,11 +485,11 @@
       'next'      => 0,
       'set'       => 0,
       'bindir'    => "/cw/bin",
  -    'probedir'  => "$myroot/snmpdx.d",
  +    'probedir'  => "@libexecdir@",
       'probename' => "*",
  -    'mibdir'    => "$myroot/snmpdx.mib",
  +    'mibdir'    => "@datadir@/snmpdx/mibs",
       'mibname'   => "snmpdx",
  -    'logfile'   => "$myroot/snmpdx.log",
  +    'logfile'   => "@localstatedir@/snmpdx.log",
       'loglevel'  => 9,
       'strict'    => 0,
   };
  @@ .

From ossp-cvs-owner@ossp.org  Tue Sep  9 15:21:30 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AF1307715A; Tue,  9 Sep 2003 15:21:29 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/snmpdx.mib/ snmpdx.mib
Message-Id: <20030909132129.AF1307715A@mail.ossp.org>
Date: Tue,  9 Sep 2003 15:21:29 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   09-Sep-2003 15:21:29
  Branch: HEAD                             Handle: 2003090914212900

  Modified files:
    ossp-pkg/snmpdx/snmpdx.mib
                            snmpdx.mib

  Log:
    correct enterprises identifier for cw

  Summary:
    Revision    Changes     Path
    1.9         +1  -1      ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 snmpdx.mib
  --- ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib	8 Sep 2003 14:37:21 -0000	1.8
  +++ ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib	9 Sep 2003 13:21:29 -0000	1.9
  @@ -18,7 +18,7 @@
   enterprises    OBJECT IDENTIFIER ::= { private 1 }
   
   cw             OBJECT IDENTIFIER ::= { enterprises 4007 }
  -snmpdx         OBJECT IDENTIFIER ::= { cw 43 }
  +snmpdx         OBJECT IDENTIFIER ::= { cw 42 }
   
   host           OBJECT IDENTIFIER ::= { snmpdx 1 }
   hardware       OBJECT IDENTIFIER ::= { host 1 }
  @@ .

From ossp-cvs-owner@ossp.org  Tue Sep  9 15:43:45 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 870947716E; Tue,  9 Sep 2003 15:43:45 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/snmpdx.d/ sysVM.pm
Message-Id: <20030909134345.870947716E@mail.ossp.org>
Date: Tue,  9 Sep 2003 15:43:45 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   09-Sep-2003 15:43:45
  Branch: HEAD                             Handle: 2003090914434500

  Modified files:
    ossp-pkg/snmpdx/snmpdx.d
                            sysVM.pm

  Log:
    fix local variable warning

  Summary:
    Revision    Changes     Path
    1.6         +1  -1      ossp-pkg/snmpdx/snmpdx.d/sysVM.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/sysVM.pm
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 sysVM.pm
  --- ossp-pkg/snmpdx/snmpdx.d/sysVM.pm	4 Sep 2003 10:07:47 -0000	1.5
  +++ ossp-pkg/snmpdx/snmpdx.d/sysVM.pm	9 Sep 2003 13:43:45 -0000	1.6
  @@ -307,7 +307,7 @@
               #   sysVMSwapMax, sysVMSwapFree
               $out = $self->{-ctx}->{-sys}->run("/usr/sbin/swap -l", "1m");
               $raw = $out->{-stdout};
  -            my $n2i = {};
  +            $n2i = {};
               if ($raw =~ m/^\s*([^\n]*\bblocks[^\n]*\bfree[^\n]*)\n(.*)$/s) {
                   $n2i = &mkn2i(split / +/, $1) if (scalar keys %$n2i == 0);
               }
  @@ .

From ossp-cvs-owner@ossp.org  Tue Sep  9 15:44:05 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DEBD37717E; Tue,  9 Sep 2003 15:44:04 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/snmpdx.d/ hwCpu.pm hwDisk.pm hwFan.pm hwPs...
Message-Id: <20030909134404.DEBD37717E@mail.ossp.org>
Date: Tue,  9 Sep 2003 15:44:04 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   09-Sep-2003 15:44:04
  Branch: HEAD                             Handle: 2003090914440400

  Modified files:
    ossp-pkg/snmpdx/snmpdx.d
                            hwCpu.pm hwDisk.pm hwFan.pm hwPs.pm sysFs.pm

  Log:
    fix array/scalar problem

  Summary:
    Revision    Changes     Path
    1.6         +3  -3      ossp-pkg/snmpdx/snmpdx.d/hwCpu.pm
    1.3         +3  -3      ossp-pkg/snmpdx/snmpdx.d/hwDisk.pm
    1.2         +3  -3      ossp-pkg/snmpdx/snmpdx.d/hwFan.pm
    1.2         +3  -3      ossp-pkg/snmpdx/snmpdx.d/hwPs.pm
    1.3         +3  -3      ossp-pkg/snmpdx/snmpdx.d/sysFs.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/hwCpu.pm
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 hwCpu.pm
  --- ossp-pkg/snmpdx/snmpdx.d/hwCpu.pm	8 Sep 2003 14:34:56 -0000	1.5
  +++ ossp-pkg/snmpdx/snmpdx.d/hwCpu.pm	9 Sep 2003 13:44:04 -0000	1.6
  @@ -38,7 +38,7 @@
   
       if ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i) {
           my $hwCpuNum       = undef;
  -        my $hwCpuInfoENTRY = undef; #N/A
  +        my @hwCpuInfoENTRY = undef; #N/A
   
           #   local workspace
           my $out; my $raw;
  @@ -54,7 +54,7 @@
       }
       elsif ($self->{-ctx}->{-platform}->id() =~ m/Linux/i) {
           my $hwCpuNum       = undef;
  -        my $hwCpuInfoENTRY = undef; #N/A
  +        my @hwCpuInfoENTRY = undef; #N/A
   
           #   local workspace
           my $out; my $raw;
  @@ -72,7 +72,7 @@
       }
       elsif($self->{-ctx}->{-platform}->id() =~ m/SunOS/i) {
           my $hwCpuNum       = undef;
  -        my $hwCpuInfoENTRY = undef;
  +        my @hwCpuInfoENTRY = undef;
   
           #   local workspace
           my $out; my $raw; my $arch;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/hwDisk.pm
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 hwDisk.pm
  --- ossp-pkg/snmpdx/snmpdx.d/hwDisk.pm	8 Sep 2003 14:34:56 -0000	1.2
  +++ ossp-pkg/snmpdx/snmpdx.d/hwDisk.pm	9 Sep 2003 13:44:04 -0000	1.3
  @@ -37,13 +37,13 @@
       my ($self, $obj) = @_;
   
       if ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i) {
  -        my $hwDiskInfoENTRY = undef; #N/A
  +        my @hwDiskInfoENTRY = undef; #N/A
       }
       elsif ($self->{-ctx}->{-platform}->id() =~ m/Linux/i) {
  -        my $hwDiskInfoENTRY = undef; #N/A
  +        my @hwDiskInfoENTRY = undef; #N/A
       }
       elsif($self->{-ctx}->{-platform}->id() =~ m/SunOS/i) {
  -        my $hwDiskInfoENTRY = undef;
  +        my @hwDiskInfoENTRY = undef;
   
           #   local workspace
           my $out; my $raw; my $arch; my $new;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/hwFan.pm
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 hwFan.pm
  --- ossp-pkg/snmpdx/snmpdx.d/hwFan.pm	8 Sep 2003 14:37:21 -0000	1.1
  +++ ossp-pkg/snmpdx/snmpdx.d/hwFan.pm	9 Sep 2003 13:44:04 -0000	1.2
  @@ -37,13 +37,13 @@
       my ($self, $obj) = @_;
   
       if ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i) {
  -        my $hwFanInfoENTRY = undef; #N/A
  +        my @hwFanInfoENTRY = undef; #N/A
       }
       elsif ($self->{-ctx}->{-platform}->id() =~ m/Linux/i) {
  -        my $hwFanInfoENTRY = undef; #N/A
  +        my @hwFanInfoENTRY = undef; #N/A
       }
       elsif($self->{-ctx}->{-platform}->id() =~ m/SunOS/i) {
  -        my $hwFanInfoENTRY = undef;
  +        my @hwFanInfoENTRY = undef;
   
           #   local workspace
           my $out; my $raw; my $arch; my $new;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/hwPs.pm
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 hwPs.pm
  --- ossp-pkg/snmpdx/snmpdx.d/hwPs.pm	8 Sep 2003 14:37:21 -0000	1.1
  +++ ossp-pkg/snmpdx/snmpdx.d/hwPs.pm	9 Sep 2003 13:44:04 -0000	1.2
  @@ -37,13 +37,13 @@
       my ($self, $obj) = @_;
   
       if ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i) {
  -        my $hwPsInfoENTRY = undef; #N/A
  +        my @hwPsInfoENTRY = undef; #N/A
       }
       elsif ($self->{-ctx}->{-platform}->id() =~ m/Linux/i) {
  -        my $hwPsInfoENTRY = undef; #N/A
  +        my @hwPsInfoENTRY = undef; #N/A
       }
       elsif($self->{-ctx}->{-platform}->id() =~ m/SunOS/i) {
  -        my $hwPsInfoENTRY = undef;
  +        my @hwPsInfoENTRY = undef;
   
           #   local workspace
           my $out; my $raw; my $arch; my $new;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/sysFs.pm
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 sysFs.pm
  --- ossp-pkg/snmpdx/snmpdx.d/sysFs.pm	8 Sep 2003 14:34:56 -0000	1.2
  +++ ossp-pkg/snmpdx/snmpdx.d/sysFs.pm	9 Sep 2003 13:44:04 -0000	1.3
  @@ -37,7 +37,7 @@
       my ($self, $obj) = @_;
   
       if ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i) {
  -    	my $sysFsInfoENTRY  = undef;
  +    	my @sysFsInfoENTRY  = undef;
           
           #   local workspace
   		my $out; my $raw; my $n2i; my @dat; my $new;
  @@ -80,7 +80,7 @@
           }
       }
       elsif ($self->{-ctx}->{-platform}->id() =~ m/Linux/i) {
  -    	my $sysFsInfoENTRY  = undef;
  +    	my @sysFsInfoENTRY  = undef;
           
           #   local workspace
   		my $out; my $raw; my $n2i; my @dat; my $new;
  @@ -123,7 +123,7 @@
           }
       }
       elsif($self->{-ctx}->{-platform}->id() =~ m/SunOS/i) {
  -    	my $sysFsInfoENTRY  = undef;
  +    	my @sysFsInfoENTRY  = undef;
           
           #   local workspace
   		my $out; my $raw; my $n2i; my @dat; my $new;
  @@ .

From ossp-cvs-owner@ossp.org  Tue Sep  9 15:50:23 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 462137715A; Tue,  9 Sep 2003 15:50:23 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ .cvsignore shtool
Message-Id: <20030909135023.462137715A@mail.ossp.org>
Date: Tue,  9 Sep 2003 15:50:23 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   09-Sep-2003 15:50:23
  Branch: HEAD                             Handle: 2003090914502200

  Modified files:
    ossp-pkg/snmpdx         .cvsignore
  Removed files:
    ossp-pkg/snmpdx         shtool

  Log:
    remove and ignore generated shtool

  Summary:
    Revision    Changes     Path
    1.2         +2  -0      ossp-pkg/snmpdx/.cvsignore
    1.3         +0  -3506   ossp-pkg/snmpdx/shtool
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/.cvsignore
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 .cvsignore
  --- ossp-pkg/snmpdx/.cvsignore	9 Sep 2003 09:28:55 -0000	1.1
  +++ ossp-pkg/snmpdx/.cvsignore	9 Sep 2003 13:50:22 -0000	1.2
  @@ -2,3 +2,5 @@
   *.tar.Z
   *.tar.gz
   *.tar.bz2
  +configure
  +shtool
  @@ .
  rm -f ossp-pkg/snmpdx/shtool <<'@@ .'
  Index: ossp-pkg/snmpdx/shtool
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .

From ossp-cvs-owner@ossp.org  Tue Sep  9 15:52:17 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 452D97715A; Tue,  9 Sep 2003 15:52:17 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ Makefile.in snmpdx.cfg.in snmpdx.pl
Message-Id: <20030909135217.452D97715A@mail.ossp.org>
Date: Tue,  9 Sep 2003 15:52:17 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   09-Sep-2003 15:52:17
  Branch: HEAD                             Handle: 2003090914521600

  Modified files:
    ossp-pkg/snmpdx         Makefile.in snmpdx.cfg.in snmpdx.pl

  Log:
    relocate logs and perl modules into subdir

  Summary:
    Revision    Changes     Path
    1.3         +2  -2      ossp-pkg/snmpdx/Makefile.in
    1.2         +2  -2      ossp-pkg/snmpdx/snmpdx.cfg.in
    1.3         +1  -1      ossp-pkg/snmpdx/snmpdx.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 Makefile.in
  --- ossp-pkg/snmpdx/Makefile.in	9 Sep 2003 12:50:04 -0000	1.2
  +++ ossp-pkg/snmpdx/Makefile.in	9 Sep 2003 13:52:16 -0000	1.3
  @@ -84,13 +84,13 @@
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(sysconfdir)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(datadir)/snmpdx/mibs
  -	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libexecdir)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libexecdir)/snmpdx
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man1
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(localstatedir)
   	$(SHTOOL) install -c -m 755 snmpdx $(DESTDIR)$(bindir)/snmpdx
   	$(SHTOOL) install -c -m 644 snmpdx.cfg $(DESTDIR)$(sysconfdir)/snmpdx.cfg
   	$(SHTOOL) install -c -m 644 snmpdx.mib/*.mib $(DESTDIR)$(datadir)/snmpdx/mibs/
  -	$(SHTOOL) install -c -m 644 snmpdx.d/*.pm $(DESTDIR)$(libexecdir)/
  +	$(SHTOOL) install -c -m 644 snmpdx.d/*.pm $(DESTDIR)$(libexecdir)/snmpdx/
   	$(SHTOOL) install -c -m 644 snmpdx.1 $(DESTDIR)$(mandir)/man1/snmpdx.1
   
   clean:
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.cfg.in
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 snmpdx.cfg.in
  --- ossp-pkg/snmpdx/snmpdx.cfg.in	9 Sep 2003 12:50:04 -0000	1.1
  +++ ossp-pkg/snmpdx/snmpdx.cfg.in	9 Sep 2003 13:52:16 -0000	1.2
  @@ -3,6 +3,6 @@
   ##
   
   mibdir    @datadir@/snmpdx/mibs:@datadir@/snmp/mibs
  -probedir  @libexecdir@
  -logfile   @localstatedir@/snmpdx.log
  +probedir  @libexecdir@/snmpdx
  +logfile   @localstatedir@/snmpdx/snmpdx.log
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.pl
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 snmpdx.pl
  --- ossp-pkg/snmpdx/snmpdx.pl	9 Sep 2003 12:50:04 -0000	1.2
  +++ ossp-pkg/snmpdx/snmpdx.pl	9 Sep 2003 13:52:16 -0000	1.3
  @@ -485,7 +485,7 @@
       'next'      => 0,
       'set'       => 0,
       'bindir'    => "/cw/bin",
  -    'probedir'  => "@libexecdir@",
  +    'probedir'  => "@libexecdir@/snmpdx",
       'probename' => "*",
       'mibdir'    => "@datadir@/snmpdx/mibs",
       'mibname'   => "snmpdx",
  @@ .

From ossp-cvs-owner@ossp.org  Tue Sep  9 15:52:43 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DFB347717E; Tue,  9 Sep 2003 15:52:42 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ AUTHORS ChangeLog INSTALL README THANKS
Message-Id: <20030909135242.DFB347717E@mail.ossp.org>
Date: Tue,  9 Sep 2003 15:52:42 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   09-Sep-2003 15:52:42
  Branch: HEAD                             Handle: 2003090914524200

  Modified files:
    ossp-pkg/snmpdx         AUTHORS ChangeLog INSTALL README THANKS

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/snmpdx/AUTHORS
    1.3         +1  -1      ossp-pkg/snmpdx/ChangeLog
    1.3         +1  -1      ossp-pkg/snmpdx/INSTALL
    1.3         +1  -1      ossp-pkg/snmpdx/README
    1.3         +1  -1      ossp-pkg/snmpdx/THANKS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/AUTHORS
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 AUTHORS
  --- ossp-pkg/snmpdx/AUTHORS	9 Sep 2003 12:50:04 -0000	1.2
  +++ ossp-pkg/snmpdx/AUTHORS	9 Sep 2003 13:52:42 -0000	1.3
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|    
   
     OSSP snmpdx - SNMP Daemon Extension
  -  Version 0.2.1 (09-Sep-2003)
  +  Version 
     ____________________________________________________________________
   
     AUTHORS
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ChangeLog
  --- ossp-pkg/snmpdx/ChangeLog	9 Sep 2003 12:50:04 -0000	1.2
  +++ ossp-pkg/snmpdx/ChangeLog	9 Sep 2003 13:52:42 -0000	1.3
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|    
   
     OSSP snmpdx - SNMP Daemon Extension
  -  Version 0.2.1 (09-Sep-2003)
  +  Version 
     ____________________________________________________________________
   
     ChangeLog
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/INSTALL
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 INSTALL
  --- ossp-pkg/snmpdx/INSTALL	9 Sep 2003 12:50:04 -0000	1.2
  +++ ossp-pkg/snmpdx/INSTALL	9 Sep 2003 13:52:42 -0000	1.3
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|    
   
     OSSP snmpdx - SNMP Daemon Extension
  -  Version 0.2.1 (09-Sep-2003)
  +  Version 
     ____________________________________________________________________
   
     INSTALLATION
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/README
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 README
  --- ossp-pkg/snmpdx/README	9 Sep 2003 12:50:04 -0000	1.2
  +++ ossp-pkg/snmpdx/README	9 Sep 2003 13:52:42 -0000	1.3
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|    
   
     OSSP snmpdx - SNMP Daemon Extension
  -  Version 0.2.1 (09-Sep-2003)
  +  Version 
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/THANKS
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 THANKS
  --- ossp-pkg/snmpdx/THANKS	9 Sep 2003 12:50:04 -0000	1.2
  +++ ossp-pkg/snmpdx/THANKS	9 Sep 2003 13:52:42 -0000	1.3
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|    
   
     OSSP snmpdx - SNMP Daemon Extension
  -  Version 0.2.1 (09-Sep-2003)
  +  Version 
     ____________________________________________________________________
     
     THANKS
  @@ .

From ossp-cvs-owner@ossp.org  Tue Sep  9 16:02:26 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 015557716E; Tue,  9 Sep 2003 16:02:24 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ AUTHORS ChangeLog INSTALL README THANKS V...
Message-Id: <20030909140224.015557716E@mail.ossp.org>
Date: Tue,  9 Sep 2003 16:02:24 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   09-Sep-2003 16:02:24
  Branch: HEAD                             Handle: 2003090915022300

  Modified files:
    ossp-pkg/snmpdx         AUTHORS ChangeLog INSTALL README THANKS VERSION

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/snmpdx/AUTHORS
    1.4         +1  -1      ossp-pkg/snmpdx/ChangeLog
    1.4         +1  -1      ossp-pkg/snmpdx/INSTALL
    1.4         +1  -1      ossp-pkg/snmpdx/README
    1.4         +1  -1      ossp-pkg/snmpdx/THANKS
    1.3         +8  -8      ossp-pkg/snmpdx/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/AUTHORS
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 AUTHORS
  --- ossp-pkg/snmpdx/AUTHORS	9 Sep 2003 13:52:42 -0000	1.3
  +++ ossp-pkg/snmpdx/AUTHORS	9 Sep 2003 14:02:23 -0000	1.4
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|    
   
     OSSP snmpdx - SNMP Daemon Extension
  -  Version 
  +  Version 0.2.2 (09-Sep-2003)
     ____________________________________________________________________
   
     AUTHORS
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ChangeLog
  --- ossp-pkg/snmpdx/ChangeLog	9 Sep 2003 13:52:42 -0000	1.3
  +++ ossp-pkg/snmpdx/ChangeLog	9 Sep 2003 14:02:23 -0000	1.4
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|    
   
     OSSP snmpdx - SNMP Daemon Extension
  -  Version 
  +  Version 0.2.2 (09-Sep-2003)
     ____________________________________________________________________
   
     ChangeLog
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/INSTALL
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 INSTALL
  --- ossp-pkg/snmpdx/INSTALL	9 Sep 2003 13:52:42 -0000	1.3
  +++ ossp-pkg/snmpdx/INSTALL	9 Sep 2003 14:02:23 -0000	1.4
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|    
   
     OSSP snmpdx - SNMP Daemon Extension
  -  Version 
  +  Version 0.2.2 (09-Sep-2003)
     ____________________________________________________________________
   
     INSTALLATION
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/README
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 README
  --- ossp-pkg/snmpdx/README	9 Sep 2003 13:52:42 -0000	1.3
  +++ ossp-pkg/snmpdx/README	9 Sep 2003 14:02:23 -0000	1.4
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|    
   
     OSSP snmpdx - SNMP Daemon Extension
  -  Version 
  +  Version 0.2.2 (09-Sep-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/THANKS
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 THANKS
  --- ossp-pkg/snmpdx/THANKS	9 Sep 2003 13:52:42 -0000	1.3
  +++ ossp-pkg/snmpdx/THANKS	9 Sep 2003 14:02:23 -0000	1.4
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|    
   
     OSSP snmpdx - SNMP Daemon Extension
  -  Version 
  +  Version 0.2.2 (09-Sep-2003)
     ____________________________________________________________________
     
     THANKS
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/VERSION
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 VERSION
  --- ossp-pkg/snmpdx/VERSION	9 Sep 2003 12:50:04 -0000	1.2
  +++ ossp-pkg/snmpdx/VERSION	9 Sep 2003 14:02:23 -0000	1.3
  @@ -4,14 +4,14 @@
   ##
   
   my $snmpdx_version = {
  -    'v_hex'   => 0x002201,
  -    'v_short' => "0.2.1",
  -    'v_long'  => "0.2.1 (09-Sep-2003)",
  -    'v_tex'   => "This is OSSP snmpdx, Version 0.2.1 (09-Sep-2003)",
  -    'v_gnu'   => "OSSP snmpdx 0.2.1 (09-Sep-2003)",
  -    'v_web'   => "OSSP snmpdx/0.2.1",
  -    'v_sccs'  => "@(#)OSSP snmpdx 0.2.1 (09-Sep-2003)",
  -    'v_rcs'   => "\$Id: VERSION,v 1.2 2003/09/09 12:50:04 thl Exp $/"
  +    'v_hex'   => 0x002202,
  +    'v_short' => "0.2.2",
  +    'v_long'  => "0.2.2 (09-Sep-2003)",
  +    'v_tex'   => "This is OSSP snmpdx, Version 0.2.2 (09-Sep-2003)",
  +    'v_gnu'   => "OSSP snmpdx 0.2.2 (09-Sep-2003)",
  +    'v_web'   => "OSSP snmpdx/0.2.2",
  +    'v_sccs'  => "@(#)OSSP snmpdx 0.2.2 (09-Sep-2003)",
  +    'v_rcs'   => "\$Id: VERSION,v 1.3 2003/09/09 14:02:23 thl Exp $/"
   };
   
   1;
  @@ .

From ossp-cvs-owner@ossp.org  Tue Sep  9 16:08:29 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 865B47716E; Tue,  9 Sep 2003 16:08:29 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ Makefile.in snmpdx.pl
Message-Id: <20030909140829.865B47716E@mail.ossp.org>
Date: Tue,  9 Sep 2003 16:08:29 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   09-Sep-2003 16:08:29
  Branch: HEAD                             Handle: 2003090915082900

  Modified files:
    ossp-pkg/snmpdx         Makefile.in snmpdx.pl

  Log:
    relocate configuration into subdir

  Summary:
    Revision    Changes     Path
    1.4         +2  -2      ossp-pkg/snmpdx/Makefile.in
    1.4         +1  -1      ossp-pkg/snmpdx/snmpdx.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 Makefile.in
  --- ossp-pkg/snmpdx/Makefile.in	9 Sep 2003 13:52:16 -0000	1.3
  +++ ossp-pkg/snmpdx/Makefile.in	9 Sep 2003 14:08:29 -0000	1.4
  @@ -82,13 +82,13 @@
   
   install: all
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
  -	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(sysconfdir)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(sysconfdir)/snmpdx
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(datadir)/snmpdx/mibs
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libexecdir)/snmpdx
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man1
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(localstatedir)
   	$(SHTOOL) install -c -m 755 snmpdx $(DESTDIR)$(bindir)/snmpdx
  -	$(SHTOOL) install -c -m 644 snmpdx.cfg $(DESTDIR)$(sysconfdir)/snmpdx.cfg
  +	$(SHTOOL) install -c -m 644 snmpdx.cfg $(DESTDIR)$(sysconfdir)/snmpdx/snmpdx.cfg
   	$(SHTOOL) install -c -m 644 snmpdx.mib/*.mib $(DESTDIR)$(datadir)/snmpdx/mibs/
   	$(SHTOOL) install -c -m 644 snmpdx.d/*.pm $(DESTDIR)$(libexecdir)/snmpdx/
   	$(SHTOOL) install -c -m 644 snmpdx.1 $(DESTDIR)$(mandir)/man1/snmpdx.1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.pl
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 snmpdx.pl
  --- ossp-pkg/snmpdx/snmpdx.pl	9 Sep 2003 13:52:16 -0000	1.3
  +++ ossp-pkg/snmpdx/snmpdx.pl	9 Sep 2003 14:08:29 -0000	1.4
  @@ -477,7 +477,7 @@
   
   #   parameters (defaults)
   my $opt = {
  -    'config'    => "@sysconfdir@/snmpdx.cfg",
  +    'config'    => "@sysconfdir@/snmpdx/snmpdx.cfg",
       'version'   => 0,
       'help'      => 0,
       'tmpdir'    => ($ENV{TMPDIR} || $ENV{TEMPDIR} || "/tmp"),
  @@ .

From ossp-cvs-owner@ossp.org  Tue Sep  9 16:08:41 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5AC2577180; Tue,  9 Sep 2003 16:08:41 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ AUTHORS ChangeLog INSTALL README THANKS V...
Message-Id: <20030909140841.5AC2577180@mail.ossp.org>
Date: Tue,  9 Sep 2003 16:08:41 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   09-Sep-2003 16:08:41
  Branch: HEAD                             Handle: 2003090915084000

  Modified files:
    ossp-pkg/snmpdx         AUTHORS ChangeLog INSTALL README THANKS VERSION

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-pkg/snmpdx/AUTHORS
    1.5         +1  -1      ossp-pkg/snmpdx/ChangeLog
    1.5         +1  -1      ossp-pkg/snmpdx/INSTALL
    1.5         +1  -1      ossp-pkg/snmpdx/README
    1.5         +1  -1      ossp-pkg/snmpdx/THANKS
    1.4         +8  -8      ossp-pkg/snmpdx/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/AUTHORS
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 AUTHORS
  --- ossp-pkg/snmpdx/AUTHORS	9 Sep 2003 14:02:23 -0000	1.4
  +++ ossp-pkg/snmpdx/AUTHORS	9 Sep 2003 14:08:40 -0000	1.5
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|    
   
     OSSP snmpdx - SNMP Daemon Extension
  -  Version 0.2.2 (09-Sep-2003)
  +  Version 0.2.3 (09-Sep-2003)
     ____________________________________________________________________
   
     AUTHORS
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ChangeLog
  --- ossp-pkg/snmpdx/ChangeLog	9 Sep 2003 14:02:23 -0000	1.4
  +++ ossp-pkg/snmpdx/ChangeLog	9 Sep 2003 14:08:40 -0000	1.5
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|    
   
     OSSP snmpdx - SNMP Daemon Extension
  -  Version 0.2.2 (09-Sep-2003)
  +  Version 0.2.3 (09-Sep-2003)
     ____________________________________________________________________
   
     ChangeLog
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/INSTALL
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 INSTALL
  --- ossp-pkg/snmpdx/INSTALL	9 Sep 2003 14:02:23 -0000	1.4
  +++ ossp-pkg/snmpdx/INSTALL	9 Sep 2003 14:08:40 -0000	1.5
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|    
   
     OSSP snmpdx - SNMP Daemon Extension
  -  Version 0.2.2 (09-Sep-2003)
  +  Version 0.2.3 (09-Sep-2003)
     ____________________________________________________________________
   
     INSTALLATION
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/README
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 README
  --- ossp-pkg/snmpdx/README	9 Sep 2003 14:02:23 -0000	1.4
  +++ ossp-pkg/snmpdx/README	9 Sep 2003 14:08:40 -0000	1.5
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|    
   
     OSSP snmpdx - SNMP Daemon Extension
  -  Version 0.2.2 (09-Sep-2003)
  +  Version 0.2.3 (09-Sep-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/THANKS
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 THANKS
  --- ossp-pkg/snmpdx/THANKS	9 Sep 2003 14:02:23 -0000	1.4
  +++ ossp-pkg/snmpdx/THANKS	9 Sep 2003 14:08:40 -0000	1.5
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|    
   
     OSSP snmpdx - SNMP Daemon Extension
  -  Version 0.2.2 (09-Sep-2003)
  +  Version 0.2.3 (09-Sep-2003)
     ____________________________________________________________________
     
     THANKS
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/VERSION
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 VERSION
  --- ossp-pkg/snmpdx/VERSION	9 Sep 2003 14:02:23 -0000	1.3
  +++ ossp-pkg/snmpdx/VERSION	9 Sep 2003 14:08:40 -0000	1.4
  @@ -4,14 +4,14 @@
   ##
   
   my $snmpdx_version = {
  -    'v_hex'   => 0x002202,
  -    'v_short' => "0.2.2",
  -    'v_long'  => "0.2.2 (09-Sep-2003)",
  -    'v_tex'   => "This is OSSP snmpdx, Version 0.2.2 (09-Sep-2003)",
  -    'v_gnu'   => "OSSP snmpdx 0.2.2 (09-Sep-2003)",
  -    'v_web'   => "OSSP snmpdx/0.2.2",
  -    'v_sccs'  => "@(#)OSSP snmpdx 0.2.2 (09-Sep-2003)",
  -    'v_rcs'   => "\$Id: VERSION,v 1.3 2003/09/09 14:02:23 thl Exp $/"
  +    'v_hex'   => 0x002203,
  +    'v_short' => "0.2.3",
  +    'v_long'  => "0.2.3 (09-Sep-2003)",
  +    'v_tex'   => "This is OSSP snmpdx, Version 0.2.3 (09-Sep-2003)",
  +    'v_gnu'   => "OSSP snmpdx 0.2.3 (09-Sep-2003)",
  +    'v_web'   => "OSSP snmpdx/0.2.3",
  +    'v_sccs'  => "@(#)OSSP snmpdx 0.2.3 (09-Sep-2003)",
  +    'v_rcs'   => "\$Id: VERSION,v 1.4 2003/09/09 14:08:40 thl Exp $/"
   };
   
   1;
  @@ .

From ossp-cvs-owner@ossp.org  Tue Sep  9 16:16:18 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CB54C77168; Tue,  9 Sep 2003 16:16:17 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ Makefile.in
Message-Id: <20030909141617.CB54C77168@mail.ossp.org>
Date: Tue,  9 Sep 2003 16:16:17 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   09-Sep-2003 16:16:17
  Branch: HEAD                             Handle: 2003090915161700

  Modified files:
    ossp-pkg/snmpdx         Makefile.in

  Log:
    relocate logs into subdir

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-pkg/snmpdx/Makefile.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 Makefile.in
  --- ossp-pkg/snmpdx/Makefile.in	9 Sep 2003 14:08:29 -0000	1.4
  +++ ossp-pkg/snmpdx/Makefile.in	9 Sep 2003 14:16:17 -0000	1.5
  @@ -86,7 +86,7 @@
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(datadir)/snmpdx/mibs
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libexecdir)/snmpdx
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man1
  -	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(localstatedir)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(localstatedir)/snmpdx
   	$(SHTOOL) install -c -m 755 snmpdx $(DESTDIR)$(bindir)/snmpdx
   	$(SHTOOL) install -c -m 644 snmpdx.cfg $(DESTDIR)$(sysconfdir)/snmpdx/snmpdx.cfg
   	$(SHTOOL) install -c -m 644 snmpdx.mib/*.mib $(DESTDIR)$(datadir)/snmpdx/mibs/
  @@ .

From ossp-cvs-owner@ossp.org  Tue Sep  9 16:16:26 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9AFDF77180; Tue,  9 Sep 2003 16:16:26 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ AUTHORS ChangeLog INSTALL README THANKS V...
Message-Id: <20030909141626.9AFDF77180@mail.ossp.org>
Date: Tue,  9 Sep 2003 16:16:26 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   09-Sep-2003 16:16:26
  Branch: HEAD                             Handle: 2003090915162500

  Modified files:
    ossp-pkg/snmpdx         AUTHORS ChangeLog INSTALL README THANKS VERSION

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.6         +1  -1      ossp-pkg/snmpdx/AUTHORS
    1.6         +1  -1      ossp-pkg/snmpdx/ChangeLog
    1.6         +1  -1      ossp-pkg/snmpdx/INSTALL
    1.6         +1  -1      ossp-pkg/snmpdx/README
    1.6         +1  -1      ossp-pkg/snmpdx/THANKS
    1.5         +8  -8      ossp-pkg/snmpdx/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/AUTHORS
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 AUTHORS
  --- ossp-pkg/snmpdx/AUTHORS	9 Sep 2003 14:08:40 -0000	1.5
  +++ ossp-pkg/snmpdx/AUTHORS	9 Sep 2003 14:16:25 -0000	1.6
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|    
   
     OSSP snmpdx - SNMP Daemon Extension
  -  Version 0.2.3 (09-Sep-2003)
  +  Version 0.2.4 (09-Sep-2003)
     ____________________________________________________________________
   
     AUTHORS
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ChangeLog
  --- ossp-pkg/snmpdx/ChangeLog	9 Sep 2003 14:08:40 -0000	1.5
  +++ ossp-pkg/snmpdx/ChangeLog	9 Sep 2003 14:16:25 -0000	1.6
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|    
   
     OSSP snmpdx - SNMP Daemon Extension
  -  Version 0.2.3 (09-Sep-2003)
  +  Version 0.2.4 (09-Sep-2003)
     ____________________________________________________________________
   
     ChangeLog
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/INSTALL
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 INSTALL
  --- ossp-pkg/snmpdx/INSTALL	9 Sep 2003 14:08:40 -0000	1.5
  +++ ossp-pkg/snmpdx/INSTALL	9 Sep 2003 14:16:25 -0000	1.6
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|    
   
     OSSP snmpdx - SNMP Daemon Extension
  -  Version 0.2.3 (09-Sep-2003)
  +  Version 0.2.4 (09-Sep-2003)
     ____________________________________________________________________
   
     INSTALLATION
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/README
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 README
  --- ossp-pkg/snmpdx/README	9 Sep 2003 14:08:40 -0000	1.5
  +++ ossp-pkg/snmpdx/README	9 Sep 2003 14:16:25 -0000	1.6
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|    
   
     OSSP snmpdx - SNMP Daemon Extension
  -  Version 0.2.3 (09-Sep-2003)
  +  Version 0.2.4 (09-Sep-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/THANKS
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 THANKS
  --- ossp-pkg/snmpdx/THANKS	9 Sep 2003 14:08:40 -0000	1.5
  +++ ossp-pkg/snmpdx/THANKS	9 Sep 2003 14:16:25 -0000	1.6
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|    
   
     OSSP snmpdx - SNMP Daemon Extension
  -  Version 0.2.3 (09-Sep-2003)
  +  Version 0.2.4 (09-Sep-2003)
     ____________________________________________________________________
     
     THANKS
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/VERSION
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 VERSION
  --- ossp-pkg/snmpdx/VERSION	9 Sep 2003 14:08:40 -0000	1.4
  +++ ossp-pkg/snmpdx/VERSION	9 Sep 2003 14:16:25 -0000	1.5
  @@ -4,14 +4,14 @@
   ##
   
   my $snmpdx_version = {
  -    'v_hex'   => 0x002203,
  -    'v_short' => "0.2.3",
  -    'v_long'  => "0.2.3 (09-Sep-2003)",
  -    'v_tex'   => "This is OSSP snmpdx, Version 0.2.3 (09-Sep-2003)",
  -    'v_gnu'   => "OSSP snmpdx 0.2.3 (09-Sep-2003)",
  -    'v_web'   => "OSSP snmpdx/0.2.3",
  -    'v_sccs'  => "@(#)OSSP snmpdx 0.2.3 (09-Sep-2003)",
  -    'v_rcs'   => "\$Id: VERSION,v 1.4 2003/09/09 14:08:40 thl Exp $/"
  +    'v_hex'   => 0x002204,
  +    'v_short' => "0.2.4",
  +    'v_long'  => "0.2.4 (09-Sep-2003)",
  +    'v_tex'   => "This is OSSP snmpdx, Version 0.2.4 (09-Sep-2003)",
  +    'v_gnu'   => "OSSP snmpdx 0.2.4 (09-Sep-2003)",
  +    'v_web'   => "OSSP snmpdx/0.2.4",
  +    'v_sccs'  => "@(#)OSSP snmpdx 0.2.4 (09-Sep-2003)",
  +    'v_rcs'   => "\$Id: VERSION,v 1.5 2003/09/09 14:16:25 thl Exp $/"
   };
   
   1;
  @@ .

From ossp-cvs-owner@ossp.org  Wed Sep 10 11:45:41 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EE75677166; Wed, 10 Sep 2003 11:45:39 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/snmpdx.mib/ snmpdx.mib
Message-Id: <20030910094539.EE75677166@mail.ossp.org>
Date: Wed, 10 Sep 2003 11:45:39 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Sep-2003 11:45:39
  Branch: HEAD                             Handle: 2003091010453900

  Modified files:
    ossp-pkg/snmpdx/snmpdx.mib
                            snmpdx.mib

  Log:
    TABLE restructuring

  Summary:
    Revision    Changes     Path
    1.10        +20 -12     ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 snmpdx.mib
  --- ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib	9 Sep 2003 13:21:29 -0000	1.9
  +++ ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib	10 Sep 2003 09:45:39 -0000	1.10
  @@ -196,22 +196,23 @@
   sysFs OBJECT IDENTIFIER
       ::= { system 7 }
   
  -sysFsInfoTABLE OBJECT-TYPE
  -    SYNTAX	    SEQUENCE OF SysFsIndexENTRY
  +sysFsTABLE OBJECT-TYPE
  +    SYNTAX	    SEQUENCE OF SysFsENTRY
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION "FIXME Table description!?"
       ::= { sysFs 1 }
   
  -sysFsInfoENTRY OBJECT-TYPE
  -    SYNTAX	    SysFsIndexENTRY
  +sysFsENTRY OBJECT-TYPE
  +    SYNTAX	    SysFsENTRY
       MAX-ACCESS	not-accessible
       STATUS	    current
       DESCRIPTION "FIXME Row description!?"
  -    INDEX	    { sysFsInfoIndex }
  -    ::= { sysFsInfoTABLE 1 }
  +    INDEX	    { sysFsIndex }
  +    ::= { sysFsTABLE 1 }
   
  -SysFsIndexENTRY ::= SEQUENCE {
  +SysFsENTRY ::= SEQUENCE {
  +    sysFsIndex      Integer32,
       sysFsDevice     DisplayString,
       sysFsMountpoint DisplayString,
       sysFsMax        Integer32,
  @@ -219,40 +220,47 @@
       sysFsFree       Integer32
   }
   
  +sysFsIndex OBJECT-TYPE
  +    SYNTAX	    Integer32
  +    MAX-ACCESS	read-only
  +    STATUS	    current
  +    DESCRIPTION "reference index/row number for each filesystem"
  +    ::= { sysFsENTRY 1 }
  +
   sysFsDevice OBJECT-TYPE
       SYNTAX      DisplayString
       MAX-ACCESS	read-only
       STATUS	    current
       DESCRIPTION "filesystem device"
  -    ::= { sysFsInfoENTRY 1 }
  +    ::= { sysFsENTRY 2 }
   
   sysFsMountpoint OBJECT-TYPE
       SYNTAX      DisplayString
       MAX-ACCESS	read-only
       STATUS	    current
       DESCRIPTION "filesystem mount point"
  -    ::= { sysFsInfoENTRY 2 }
  +    ::= { sysFsENTRY 3 }
   
   sysFsMax OBJECT-TYPE
       SYNTAX      Integer32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "maximum available filesystem space in MB"
  -    ::= { sysFsInfoENTRY 3 }
  +    ::= { sysFsENTRY 4 }
   
   sysFsUsed OBJECT-TYPE
       SYNTAX      Integer32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "currently used filesystem space in MB"
  -    ::= { sysFsInfoENTRY 4 }
  +    ::= { sysFsENTRY 5 }
   
   sysFsFree OBJECT-TYPE
       SYNTAX      Integer32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "currently free filesystem space in MB"
  -    ::= { sysFsInfoENTRY 5 }
  +    ::= { sysFsENTRY 6 }
   
   --
   --  Hardware: Product
  @@ .

From ossp-cvs-owner@ossp.org  Wed Sep 10 14:29:09 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8526B7716C; Wed, 10 Sep 2003 14:29:08 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/snmpdx.d/ hwCpu.pm hwDisk.pm hwFan.pm hwPs...
Message-Id: <20030910122908.8526B7716C@mail.ossp.org>
Date: Wed, 10 Sep 2003 14:29:08 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   10-Sep-2003 14:29:08
  Branch: HEAD                             Handle: 2003091013290601

  Modified files:
    ossp-pkg/snmpdx/snmpdx.d
                            hwCpu.pm hwDisk.pm hwFan.pm hwPs.pm sysFs.pm
    ossp-pkg/snmpdx/snmpdx.mib
                            snmpdx.mib

  Log:
    fix more array/scalar problem; add Index; rename variables removing
    Info

  Summary:
    Revision    Changes     Path
    1.7         +18 -13     ossp-pkg/snmpdx/snmpdx.d/hwCpu.pm
    1.4         +10 -8      ossp-pkg/snmpdx/snmpdx.d/hwDisk.pm
    1.3         +10 -8      ossp-pkg/snmpdx/snmpdx.d/hwFan.pm
    1.3         +10 -8      ossp-pkg/snmpdx/snmpdx.d/hwPs.pm
    1.4         +18 -12     ossp-pkg/snmpdx/snmpdx.d/sysFs.pm
    1.11        +89 -48     ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/hwCpu.pm
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 hwCpu.pm
  --- ossp-pkg/snmpdx/snmpdx.d/hwCpu.pm	9 Sep 2003 13:44:04 -0000	1.6
  +++ ossp-pkg/snmpdx/snmpdx.d/hwCpu.pm	10 Sep 2003 12:29:06 -0000	1.7
  @@ -37,8 +37,8 @@
       my ($self, $obj) = @_;
   
       if ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i) {
  -        my $hwCpuNum       = undef;
  -        my @hwCpuInfoENTRY = undef; #N/A
  +        my $hwCpuNum   = undef;
  +        my @hwCpuENTRY = undef; #N/A
   
           #   local workspace
           my $out; my $raw;
  @@ -53,8 +53,8 @@
           $obj->{-value} = $hwCpuNum if ($obj->{-name} =~ m/\.hwCpuNum$/);
       }
       elsif ($self->{-ctx}->{-platform}->id() =~ m/Linux/i) {
  -        my $hwCpuNum       = undef;
  -        my @hwCpuInfoENTRY = undef; #N/A
  +        my $hwCpuNum   = undef;
  +        my @hwCpuENTRY = undef; #N/A
   
           #   local workspace
           my $out; my $raw;
  @@ -71,8 +71,8 @@
           $obj->{-value} = $hwCpuNum if ($obj->{-name} =~ m/\.hwCpuNum$/);
       }
       elsif($self->{-ctx}->{-platform}->id() =~ m/SunOS/i) {
  -        my $hwCpuNum       = undef;
  -        my @hwCpuInfoENTRY = undef;
  +        my $hwCpuNum   = undef;
  +        my @hwCpuENTRY = undef;
   
           #   local workspace
           my $out; my $raw; my $arch;
  @@ -88,8 +88,10 @@
               foreach $line (split "\n", $raw) {
                   my ($brd,$cpu,$module,$mhz,$mb,$impl,$mask) = split(" ", $line);
                   if ($cpu =~ m/^\d+$/) {
  -                    @hwCpuInfoENTRY[$cpu] = {} if (not defined @hwCpuInfoENTRY[$cpu]);
  -                    @hwCpuInfoENTRY[$cpu]->{hwCpuSpeed} = $mhz;
  +                    $hwCpuENTRY[$cpu] = {} if (not defined $hwCpuENTRY[$cpu]);
  +                    $hwCpuENTRY[$cpu]->{hwCpuIndex} = $cpu;
  +                    $hwCpuENTRY[$cpu]->{hwCpuId}    = "Cpu_$cpu";
  +                    $hwCpuENTRY[$cpu]->{hwCpuSpeed} = $mhz;
                   }
               }
           }
  @@ -103,21 +105,24 @@
                   my ($cpu,$temp) = split(" ", $line);
                   if ($cpu =~ m/CPU(\d+)/) {
                       $cpu = $1;
  -                    @hwCpuInfoENTRY[$cpu] = {} if (not defined @hwCpuInfoENTRY[$cpu]);
  -                    @hwCpuInfoENTRY[$cpu]->{hwCpuTemp} = $temp;
  +                    $new->{$cpu} = $cpu;
  +                    $hwCpuENTRY[$cpu] = {} if (not defined $hwCpuENTRY[$cpu]);
  +                    $hwCpuENTRY[$cpu]->{hwCpuIndex} = $cpu;
  +                    $hwCpuENTRY[$cpu]->{hwCpuId}    = "Cpu_$cpu";
  +                    $hwCpuENTRY[$cpu]->{hwCpuTemp}  = $temp;
                   }
               }
           }
   
           #   hwCpuNum
  -        $hwCpuNum = $#{@hwCpuInfoENTRY} + 1;
  +        $hwCpuNum = $#{@hwCpuENTRY} + 1;
           
           $obj->{-value} = $hwCpuNum   if ($obj->{-name} =~ m/\.hwCpuNum$/);
  -        if ($obj->{-name} =~ m/\.hwCpuInfoENTRY\.([^.]+)\.(\d+)$/) {
  +        if ($obj->{-name} =~ m/\.hwCpuENTRY\.([^.]+)\.(\d+)$/) {
               my $col = $1;
               my $row = ($2 > 0 ? $2 - 1 : 0);
               $self->{-ctx}->{-log}->printf(4, "col=%s row=%s", $col, $row);
  -            $obj->{-value} = @hwCpuInfoENTRY[$row]->{$col} if (defined @hwCpuInfoENTRY[$row] and defined @hwCpuInfoENTRY[$row]->{$col});
  +            $obj->{-value} = $hwCpuENTRY[$row]->{$col} if (defined $hwCpuENTRY[$row] and defined $hwCpuENTRY[$row]->{$col});
           }
       }
       return;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/hwDisk.pm
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 hwDisk.pm
  --- ossp-pkg/snmpdx/snmpdx.d/hwDisk.pm	9 Sep 2003 13:44:04 -0000	1.3
  +++ ossp-pkg/snmpdx/snmpdx.d/hwDisk.pm	10 Sep 2003 12:29:06 -0000	1.4
  @@ -37,13 +37,14 @@
       my ($self, $obj) = @_;
   
       if ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i) {
  -        my @hwDiskInfoENTRY = undef; #N/A
  +        my @hwDiskENTRY = undef; #N/A
       }
       elsif ($self->{-ctx}->{-platform}->id() =~ m/Linux/i) {
  -        my @hwDiskInfoENTRY = undef; #N/A
  +        my @hwDiskENTRY = undef; #N/A
       }
       elsif($self->{-ctx}->{-platform}->id() =~ m/SunOS/i) {
  -        my @hwDiskInfoENTRY = undef;
  +        my @hwDiskENTRY = undef;
  +        my $n = 0;
   
           #   local workspace
           my $out; my $raw; my $arch; my $new;
  @@ -51,7 +52,7 @@
           #   initialize arch
           $arch = $self->{-ctx}->{-platform}->arch();
   
  -        #   hwDiskInfoENTRY
  +        #   hwDiskENTRY
           $out = $self->{-ctx}->{-sys}->run("/usr/platform/$arch/sbin/prtdiag -v", "1m");
           $raw = $out->{-stdout};
           if ($raw =~ m/\n=+ Environmental Status =+\n.*\nDisk LED Status:[^\n]+\n(.*?)\n=+/s) {
  @@ -61,23 +62,24 @@
               foreach $line (split "\n", $raw) {
                   if ($line =~ m/DISK\s+(\d+)\s+(OK|ERROR)/) {
                       my $new = {};
  -                    $new->{hwDiskId} = "DISK$1";
  +                    $new->{hwDiskIndex} = $n;
  +                    $new->{hwDiskId}    = "Disk_$1";
                       if ($2 =~ m/^OK$/) {
                           $new->{hwDiskStatus} = 1;
                       }
                       else {
                           $new->{hwDiskStatus} = 0;
                       }
  -                    push(@hwDiskInfoENTRY, $new);
  +                    $hwDiskENTRY[$n++] = $new;
                   }
               }
           }
   
  -        if ($obj->{-name} =~ m/\.hwDiskInfoENTRY\.([^.]+)\.(\d+)$/) {
  +        if ($obj->{-name} =~ m/\.hwDiskENTRY\.([^.]+)\.(\d+)$/) {
               my $col = $1;
               my $row = ($2 > 0 ? $2 - 1 : 0);
               $self->{-ctx}->{-log}->printf(4, "col=%s row=%s", $col, $row);
  -            $obj->{-value} = @hwDiskInfoENTRY[$row]->{$col} if (defined @hwDiskInfoENTRY[$row] and defined @hwDiskInfoENTRY[$row]->{$col});
  +            $obj->{-value} = $hwDiskENTRY[$row]->{$col} if (defined $hwDiskENTRY[$row] and defined $hwDiskENTRY[$row]->{$col});
           }
       }
       return;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/hwFan.pm
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 hwFan.pm
  --- ossp-pkg/snmpdx/snmpdx.d/hwFan.pm	9 Sep 2003 13:44:04 -0000	1.2
  +++ ossp-pkg/snmpdx/snmpdx.d/hwFan.pm	10 Sep 2003 12:29:06 -0000	1.3
  @@ -37,13 +37,14 @@
       my ($self, $obj) = @_;
   
       if ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i) {
  -        my @hwFanInfoENTRY = undef; #N/A
  +        my @hwFanENTRY = undef; #N/A
       }
       elsif ($self->{-ctx}->{-platform}->id() =~ m/Linux/i) {
  -        my @hwFanInfoENTRY = undef; #N/A
  +        my @hwFanENTRY = undef; #N/A
       }
       elsif($self->{-ctx}->{-platform}->id() =~ m/SunOS/i) {
  -        my @hwFanInfoENTRY = undef;
  +        my @hwFanENTRY = undef;
  +        my $n = 0;
   
           #   local workspace
           my $out; my $raw; my $arch; my $new;
  @@ -51,7 +52,7 @@
           #   initialize arch
           $arch = $self->{-ctx}->{-platform}->arch();
   
  -        #   hwFanInfoENTRY
  +        #   hwFanENTRY
           $out = $self->{-ctx}->{-sys}->run("/usr/platform/$arch/sbin/prtdiag -v", "1m");
           $raw = $out->{-stdout};
           if ($raw =~ m/\n=+ Environmental Status =+\n.*\nFan Bank.:[^\n]*\n(.*?)\n=+/s) {
  @@ -59,7 +60,8 @@
               foreach $line (split "\n", $raw) {
                   if ($line =~ m/([A-Z]+)\s+(\d+)\s+(OK|ERROR)/) {
                       my $new = {};
  -                    $new->{hwFanId} = "$1";
  +                    $new->{hwFanIndex} = $n;
  +                    $new->{hwFanId}    = "Fan_$1";
                       $new->{hwFanSpeed} = "$2";
                       if ($3 =~ m/^OK$/) {
                           $new->{hwFanStatus} = 1;
  @@ -67,16 +69,16 @@
                       else {
                           $new->{hwFanStatus} = 0;
                       }
  -                    push(@hwFanInfoENTRY, $new);
  +                    $hwFanENTRY[$n++] = $new;
                   }
               }
           }
   
  -        if ($obj->{-name} =~ m/\.hwFanInfoENTRY\.([^.]+)\.(\d+)$/) {
  +        if ($obj->{-name} =~ m/\.hwFanENTRY\.([^.]+)\.(\d+)$/) {
               my $col = $1;
               my $row = ($2 > 0 ? $2 - 1 : 0);
               $self->{-ctx}->{-log}->printf(4, "col=%s row=%s", $col, $row);
  -            $obj->{-value} = @hwFanInfoENTRY[$row]->{$col} if (defined @hwFanInfoENTRY[$row] and defined @hwFanInfoENTRY[$row]->{$col});
  +            $obj->{-value} = $hwFanENTRY[$row]->{$col} if (defined $hwFanENTRY[$row] and defined $hwFanENTRY[$row]->{$col});
           }
       }
       return;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/hwPs.pm
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 hwPs.pm
  --- ossp-pkg/snmpdx/snmpdx.d/hwPs.pm	9 Sep 2003 13:44:04 -0000	1.2
  +++ ossp-pkg/snmpdx/snmpdx.d/hwPs.pm	10 Sep 2003 12:29:06 -0000	1.3
  @@ -37,13 +37,14 @@
       my ($self, $obj) = @_;
   
       if ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i) {
  -        my @hwPsInfoENTRY = undef; #N/A
  +        my @hwPsENTRY = undef; #N/A
       }
       elsif ($self->{-ctx}->{-platform}->id() =~ m/Linux/i) {
  -        my @hwPsInfoENTRY = undef; #N/A
  +        my @hwPsENTRY = undef; #N/A
       }
       elsif($self->{-ctx}->{-platform}->id() =~ m/SunOS/i) {
  -        my @hwPsInfoENTRY = undef;
  +        my @hwPsENTRY = undef;
  +        my $n = 0;
   
           #   local workspace
           my $out; my $raw; my $arch; my $new;
  @@ -51,7 +52,7 @@
           #   initialize arch
           $arch = $self->{-ctx}->{-platform}->arch();
   
  -        #   hwPsInfoENTRY
  +        #   hwPsENTRY
           $out = $self->{-ctx}->{-sys}->run("/usr/platform/$arch/sbin/prtdiag -v", "1m");
           $raw = $out->{-stdout};
           if ($raw =~ m/\n=+ Environmental Status =+\n.*\nPower Supplies:[^\n]*\n(.*?)\n=+/s) {
  @@ -59,23 +60,24 @@
               foreach $line (split "\n", $raw) {
                   if ($line =~ m/(\d+)\s+(OK|ERROR)/) {
                       my $new = {};
  -                    $new->{hwPsId} = "PS$1";
  +                    $new->{hwPsIndex} = $n;
  +                    $new->{hwPsId}    = "Powersupply_$1";
                       if ($2 =~ m/^OK$/) {
                           $new->{hwPsStatus} = 1;
                       }
                       else {
                           $new->{hwPsStatus} = 0;
                       }
  -                    push(@hwPsInfoENTRY, $new);
  +                    $hwPsENTRY[$n++] = $new;
                   }
               }
           }
   
  -        if ($obj->{-name} =~ m/\.hwPsInfoENTRY\.([^.]+)\.(\d+)$/) {
  +        if ($obj->{-name} =~ m/\.hwPsENTRY\.([^.]+)\.(\d+)$/) {
               my $col = $1;
               my $row = ($2 > 0 ? $2 - 1 : 0);
               $self->{-ctx}->{-log}->printf(4, "col=%s row=%s", $col, $row);
  -            $obj->{-value} = @hwPsInfoENTRY[$row]->{$col} if (defined @hwPsInfoENTRY[$row] and defined @hwPsInfoENTRY[$row]->{$col});
  +            $obj->{-value} = $hwPsENTRY[$row]->{$col} if (defined $hwPsENTRY[$row] and defined $hwPsENTRY[$row]->{$col});
           }
       }
       return;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/sysFs.pm
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 sysFs.pm
  --- ossp-pkg/snmpdx/snmpdx.d/sysFs.pm	9 Sep 2003 13:44:04 -0000	1.3
  +++ ossp-pkg/snmpdx/snmpdx.d/sysFs.pm	10 Sep 2003 12:29:06 -0000	1.4
  @@ -37,7 +37,8 @@
       my ($self, $obj) = @_;
   
       if ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i) {
  -    	my @sysFsInfoENTRY  = undef;
  +    	my @sysFsENTRY  = undef;
  +        my $n = 0;
           
           #   local workspace
   		my $out; my $raw; my $n2i; my @dat; my $new;
  @@ -52,6 +53,7 @@
   				@dat = split(/ +/, $line);
   				if (@dat[$n2i->{Filesystem}] =~ m|^/dev/|) {
   					$new = {};
  +                    $new->{sysFsIndex} = $n;
   					if (defined $n2i->{Filesystem}) {
   						$new->{sysFsDevice} = @dat[$n2i->{Filesystem}];
   					}
  @@ -67,20 +69,21 @@
   					if (defined $new->{sysFsMax} and defined $new->{sysFsFree}) {
   						$new->{sysFsUsed} = $new->{sysFsMax} - $new->{sysFsFree};
   					}
  -					push(@sysFsInfoENTRY, $new);
  +					$sysFsENTRY[$n++] = $new;
   				}
   			}
           }
   
  -        if ($obj->{-name} =~ m/\.sysFsInfoENTRY\.([^.]+)\.(\d+)$/) {
  +        if ($obj->{-name} =~ m/\.sysFsENTRY\.([^.]+)\.(\d+)$/) {
               my $col = $1;
               my $row = ($2 > 0 ? $2 - 1 : 0);
               $self->{-ctx}->{-log}->printf(4, "col=%s row=%s", $col, $row);
  -            $obj->{-value} = @sysFsInfoENTRY[$row]->{$col} if (defined @sysFsInfoENTRY[$row] and defined @sysFsInfoENTRY[$row]->{$col});
  +            $obj->{-value} = $sysFsENTRY[$row]->{$col} if (defined $sysFsENTRY[$row] and defined $sysFsENTRY[$row]->{$col});
           }
       }
       elsif ($self->{-ctx}->{-platform}->id() =~ m/Linux/i) {
  -    	my @sysFsInfoENTRY  = undef;
  +    	my @sysFsENTRY  = undef;
  +        my $n = 0;
           
           #   local workspace
   		my $out; my $raw; my $n2i; my @dat; my $new;
  @@ -95,6 +98,7 @@
   				@dat = split(/ +/, $line);
   				if (@dat[$n2i->{Filesystem}] =~ m|^/dev/|) {
   					$new = {};
  +                    $new->{sysFsIndex} = $n;
   					if (defined $n2i->{Filesystem}) {
   						$new->{sysFsDevice} = @dat[$n2i->{Filesystem}];
   					}
  @@ -110,20 +114,21 @@
   					if (defined $new->{sysFsMax} and defined $new->{sysFsFree}) {
   						$new->{sysFsUsed} = $new->{sysFsMax} - $new->{sysFsFree};
   					}
  -					push(@sysFsInfoENTRY, $new);
  +					$sysFsENTRY[$n++] = $new;
   				}
   			}
           }
   
  -        if ($obj->{-name} =~ m/\.sysFsInfoENTRY\.([^.]+)\.(\d+)$/) {
  +        if ($obj->{-name} =~ m/\.sysFsENTRY\.([^.]+)\.(\d+)$/) {
               my $col = $1;
               my $row = ($2 > 0 ? $2 - 1 : 0);
               $self->{-ctx}->{-log}->printf(4, "col=%s row=%s", $col, $row);
  -            $obj->{-value} = @sysFsInfoENTRY[$row]->{$col} if (defined @sysFsInfoENTRY[$row] and defined @sysFsInfoENTRY[$row]->{$col});
  +            $obj->{-value} = $sysFsENTRY[$row]->{$col} if (defined $sysFsENTRY[$row] and defined $sysFsENTRY[$row]->{$col});
           }
       }
       elsif($self->{-ctx}->{-platform}->id() =~ m/SunOS/i) {
  -    	my @sysFsInfoENTRY  = undef;
  +    	my @sysFsENTRY  = undef;
  +        my $n = 0;
           
           #   local workspace
   		my $out; my $raw; my $n2i; my @dat; my $new;
  @@ -138,6 +143,7 @@
   				@dat = split(/ +/, $line);
   				if (@dat[$n2i->{Filesystem}] =~ m|^/dev/|) {
   					$new = {};
  +                    $new->{sysFsIndex} = $n;
   					if (defined $n2i->{Filesystem}) {
   						$new->{sysFsDevice} = @dat[$n2i->{Filesystem}];
   					}
  @@ -153,16 +159,16 @@
   					if (defined $new->{sysFsMax} and defined $new->{sysFsFree}) {
   						$new->{sysFsUsed} = $new->{sysFsMax} - $new->{sysFsFree};
   					}
  -					push(@sysFsInfoENTRY, $new);
  +					$sysFsENTRY[$n++] = $new;
   				}
   			}
           }
   
  -        if ($obj->{-name} =~ m/\.sysFsInfoENTRY\.([^.]+)\.(\d+)$/) {
  +        if ($obj->{-name} =~ m/\.sysFsENTRY\.([^.]+)\.(\d+)$/) {
               my $col = $1;
               my $row = ($2 > 0 ? $2 - 1 : 0);
               $self->{-ctx}->{-log}->printf(4, "col=%s row=%s", $col, $row);
  -            $obj->{-value} = @sysFsInfoENTRY[$row]->{$col} if (defined @sysFsInfoENTRY[$row] and defined @sysFsInfoENTRY[$row]->{$col});
  +            $obj->{-value} = $sysFsENTRY[$row]->{$col} if (defined $sysFsENTRY[$row] and defined $sysFsENTRY[$row]->{$col});
           }
       }
       return;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 snmpdx.mib
  --- ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib	10 Sep 2003 09:45:39 -0000	1.10
  +++ ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib	10 Sep 2003 12:29:07 -0000	1.11
  @@ -200,14 +200,14 @@
       SYNTAX	    SEQUENCE OF SysFsENTRY
       MAX-ACCESS  not-accessible
       STATUS      current
  -    DESCRIPTION "FIXME Table description!?"
  +    DESCRIPTION "sysFsTABLE"
       ::= { sysFs 1 }
   
   sysFsENTRY OBJECT-TYPE
       SYNTAX	    SysFsENTRY
       MAX-ACCESS	not-accessible
       STATUS	    current
  -    DESCRIPTION "FIXME Row description!?"
  +    DESCRIPTION "sysFsENTRY"
       INDEX	    { sysFsIndex }
       ::= { sysFsTABLE 1 }
   
  @@ -297,39 +297,56 @@
       DESCRIPTION "number of CPUs"
       ::= { hwCpu 1 }
   
  -hwCpuInfoTABLE OBJECT-TYPE
  -    SYNTAX	    SEQUENCE OF HwCpuIndexENTRY
  +hwCpuTABLE OBJECT-TYPE
  +    SYNTAX	    SEQUENCE OF HwCpuENTRY
       MAX-ACCESS  not-accessible
       STATUS      current
  -    DESCRIPTION "FIXME Table description!?"
  +    DESCRIPTION "hwCpuTABLE"
       ::= { hwCpu 2 }
   
  -hwCpuInfoENTRY OBJECT-TYPE
  -    SYNTAX	    HwCpuIndexENTRY
  +hwCpuENTRY OBJECT-TYPE
  +    SYNTAX	    HwCpuENTRY
       MAX-ACCESS	not-accessible
       STATUS	    current
  -    DESCRIPTION "FIXME Row description!?"
  -    INDEX	    { hwCpuInfoIndex }
  -    ::= { hwCpuInfoTABLE 1 }
  -
  -HwCpuIndexENTRY ::= SEQUENCE {
  +    DESCRIPTION "hwCpuENTRY"
  +    INDEX	    { hwCpuIndex }
  +    ::= { hwCpuTABLE 1 }
  +
  +HwCpuENTRY ::= SEQUENCE {
  +    hwCpuIndex Integer32,
  +    hwCpuId    DisplayString,
       hwCpuSpeed Integer32,
       hwCpuTemp  Integer32
   }
   
  +hwCpuIndex OBJECT-TYPE
  +    SYNTAX	    Integer32
  +    MAX-ACCESS	read-only
  +    STATUS	    current
  +    DESCRIPTION "reference index/row number for each CPU"
  +    ::= { hwCpuENTRY 1 }
  +
  +hwCpuId OBJECT-TYPE
  +    SYNTAX      DisplayString
  +    MAX-ACCESS	read-only
  +    STATUS	    current
  +    DESCRIPTION "CPU identification"
  +    ::= { hwCpuENTRY 2 }
  +
  +
   hwCpuSpeed OBJECT-TYPE
       SYNTAX	    Integer32
       MAX-ACCESS	read-only
       STATUS	    current
       DESCRIPTION "CPU speed [MHz]"
  -    ::= { hwCpuInfoENTRY 1 }
  +    ::= { hwCpuENTRY 3 }
   
   hwCpuTemp OBJECT-TYPE
       SYNTAX      Integer32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "CPU temperature [Celsius]"
  -    ::= { hwCpuInfoENTRY 2 }
  +    ::= { hwCpuENTRY 4 }
   
   --
   --  Hardware: RAM
  @@ -359,39 +376,47 @@
   hwDisk OBJECT IDENTIFIER
       ::= { hardware 4 }
   
  -hwDiskInfoTABLE OBJECT-TYPE
  -    SYNTAX	    SEQUENCE OF HwDiskIndexENTRY
  +hwDiskTABLE OBJECT-TYPE
  +    SYNTAX	    SEQUENCE OF HwDiskENTRY
       MAX-ACCESS  not-accessible
       STATUS      current
  -    DESCRIPTION "FIXME Table description!?"
  +    DESCRIPTION "hwDiskTABLE"
       ::= { hwDisk 1 }
   
  -hwDiskInfoENTRY OBJECT-TYPE
  -    SYNTAX	    HwDiskIndexENTRY
  +hwDiskENTRY OBJECT-TYPE
  +    SYNTAX	    HwDiskENTRY
       MAX-ACCESS	not-accessible
       STATUS	    current
  -    DESCRIPTION "FIXME Row description!?"
  -    INDEX	    { hwDiskInfoIndex }
  -    ::= { hwDiskInfoTABLE 1 }
  +    DESCRIPTION "hwDiskENTRY"
  +    INDEX	    { hwDiskIndex }
  +    ::= { hwDiskTABLE 1 }
   
  -HwDiskIndexENTRY ::= SEQUENCE {
  +HwDiskENTRY ::= SEQUENCE {
  +    hwDiskIndex    Integer32,
       hwDiskId       DisplayString,
       hwDiskStatus   Integer32
   }
   
  +hwDiskIndex OBJECT-TYPE
  +    SYNTAX	    Integer32
  +    MAX-ACCESS	read-only
  +    STATUS	    current
  +    DESCRIPTION "reference index/row number for each Disk"
  +    ::= { hwDiskENTRY 1 }
  +
   hwDiskId OBJECT-TYPE
       SYNTAX      DisplayString
       MAX-ACCESS	read-only
       STATUS	    current
       DESCRIPTION "Disk identification"
  -    ::= { hwDiskInfoENTRY 1 }
  +    ::= { hwDiskENTRY 2 }
   
   hwDiskStatus OBJECT-TYPE
       SYNTAX      Integer32
       MAX-ACCESS	read-only
       STATUS	    current
       DESCRIPTION "Disk status"
  -    ::= { hwDiskInfoENTRY 2 }
  +    ::= { hwDiskENTRY 3 }
   
   --
   --  Hardware: Fan
  @@ -400,47 +425,55 @@
   hwFan OBJECT IDENTIFIER
       ::= { hardware 5 }
   
  -hwFanInfoTABLE OBJECT-TYPE
  -    SYNTAX	    SEQUENCE OF HwFanIndexENTRY
  +hwFanTABLE OBJECT-TYPE
  +    SYNTAX	    SEQUENCE OF HwFanENTRY
       MAX-ACCESS  not-accessible
       STATUS      current
  -    DESCRIPTION "FIXME Table description!?"
  +    DESCRIPTION "hwFanTABLE"
       ::= { hwFan 1 }
   
  -hwFanInfoENTRY OBJECT-TYPE
  -    SYNTAX	    HwFanIndexENTRY
  +hwFanENTRY OBJECT-TYPE
  +    SYNTAX	    HwFanENTRY
       MAX-ACCESS	not-accessible
       STATUS	    current
  -    DESCRIPTION "FIXME Row description!?"
  -    INDEX	    { hwFanInfoIndex }
  -    ::= { hwFanInfoTABLE 1 }
  +    DESCRIPTION "hwFanENTRY"
  +    INDEX	    { hwFanIndex }
  +    ::= { hwFanTABLE 1 }
   
  -HwFanIndexENTRY ::= SEQUENCE {
  +HwFanENTRY ::= SEQUENCE {
  +    hwFanIndex    Integer32,
       hwFanId       DisplayString,
       hwFanSpeed    Integer32,
       hwFanStatus   Integer32
   }
   
  +hwFanIndex OBJECT-TYPE
  +    SYNTAX	    Integer32
  +    MAX-ACCESS	read-only
  +    STATUS	    current
  +    DESCRIPTION "reference index/row number for each Fan"
  +    ::= { hwFanENTRY 1 }
  +
   hwFanId OBJECT-TYPE
       SYNTAX      DisplayString
       MAX-ACCESS	read-only
       STATUS	    current
       DESCRIPTION "Fan identification"
  -    ::= { hwFanInfoENTRY 1 }
  +    ::= { hwFanENTRY 2 }
   
   hwFanSpeed OBJECT-TYPE
       SYNTAX      Integer32
       MAX-ACCESS	read-only
       STATUS	    current
       DESCRIPTION "Fan speed"
  -    ::= { hwFanInfoENTRY 2 }
  +    ::= { hwFanENTRY 3 }
   
   hwFanStatus OBJECT-TYPE
       SYNTAX      Integer32
       MAX-ACCESS	read-only
       STATUS	    current
       DESCRIPTION "Fan status"
  -    ::= { hwFanInfoENTRY 3 }
  +    ::= { hwFanENTRY 4 }
   
   --
   --  Hardware: Powersupply
  @@ -449,39 +482,47 @@
   hwPs OBJECT IDENTIFIER
       ::= { hardware 6 }
   
  -hwPsInfoTABLE OBJECT-TYPE
  -    SYNTAX	    SEQUENCE OF HwPsIndexENTRY
  +hwPsTABLE OBJECT-TYPE
  +    SYNTAX	    SEQUENCE OF HwPsENTRY
       MAX-ACCESS  not-accessible
       STATUS      current
  -    DESCRIPTION "FIXME Table description!?"
  +    DESCRIPTION "hwPsTABLE"
       ::= { hwPs 1 }
   
  -hwPsInfoENTRY OBJECT-TYPE
  -    SYNTAX	    HwPsIndexENTRY
  +hwPsENTRY OBJECT-TYPE
  +    SYNTAX	    HwPsENTRY
       MAX-ACCESS	not-accessible
       STATUS	    current
  -    DESCRIPTION "FIXME Row description!?"
  -    INDEX	    { hwPsInfoIndex }
  -    ::= { hwPsInfoTABLE 1 }
  +    DESCRIPTION "hwPsENTRY"
  +    INDEX	    { hwPsIndex }
  +    ::= { hwPsTABLE 1 }
   
  -HwPsIndexENTRY ::= SEQUENCE {
  +HwPsENTRY ::= SEQUENCE {
  +    hwPsIndex    Integer32,
       hwPsId       DisplayString,
       hwPsStatus   Integer32
   }
   
  +hwPsIndex OBJECT-TYPE
  +    SYNTAX	    Integer32
  +    MAX-ACCESS	read-only
  +    STATUS	    current
  +    DESCRIPTION "reference index/row number for each Powersupply"
  +    ::= { hwPsENTRY 1 }
  +
   hwPsId OBJECT-TYPE
       SYNTAX      DisplayString
       MAX-ACCESS	read-only
       STATUS	    current
       DESCRIPTION "Powersupply identification"
  -    ::= { hwPsInfoENTRY 1 }
  +    ::= { hwPsENTRY 2 }
   
   hwPsStatus OBJECT-TYPE
       SYNTAX      Integer32
       MAX-ACCESS	read-only
       STATUS	    current
       DESCRIPTION "Powersupply status"
  -    ::= { hwPsInfoENTRY 2 }
  +    ::= { hwPsENTRY 3 }
   
   --
   --  Hardware: Chassis
  @@ .

From ossp-cvs-owner@ossp.org  Wed Sep 10 15:02:19 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C053777176; Wed, 10 Sep 2003 15:02:18 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ l2_ch_prefix.c
Message-Id: <20030910130218.C053777176@mail.ossp.org>
Date: Wed, 10 Sep 2003 15:02:18 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Sep-2003 15:02:18
  Branch: HEAD                             Handle: 2003091014021700

  Modified files:
    ossp-pkg/l2             l2_ch_prefix.c

  Log:
    make sure we do atomic downstream writes for now

  Summary:
    Revision    Changes     Path
    1.24        +2  -0      ossp-pkg/l2/l2_ch_prefix.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_prefix.c
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 l2_ch_prefix.c
  --- ossp-pkg/l2/l2_ch_prefix.c	6 Jan 2003 11:41:51 -0000	1.23
  +++ ossp-pkg/l2/l2_ch_prefix.c	10 Sep 2003 13:02:17 -0000	1.24
  @@ -172,10 +172,12 @@
               return L2_ERR_ARG;
           if ((n = strftime(buf2, sizeof(buf2), buf1, tm)) == 0)
               return L2_ERR_SYS;
  +        n += l2_ut_sprintf(buf2+n, sizeof(buf2)-n, "%s", buf);
           downstream = NULL;
           while ((rv = l2_channel_downstream(ch, &downstream)) == L2_OK)
               if ((rv = l2_channel_write(downstream, level, buf2, n)) != L2_OK)
                   return rv;
  +        return L2_OK;
       }
   
       return L2_OK_PASS;
  @@ .

From ossp-cvs-owner@ossp.org  Wed Sep 10 15:10:23 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1318C77176; Wed, 10 Sep 2003 15:10:22 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ 00TODO
Message-Id: <20030910131022.1318C77176@mail.ossp.org>
Date: Wed, 10 Sep 2003 15:10:22 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Sep-2003 15:10:22
  Branch: HEAD                             Handle: 2003091014102200

  Modified files:
    ossp-pkg/snmpdx         00TODO

  Log:
    remember issues

  Summary:
    Revision    Changes     Path
    1.10        +3  -0      ossp-pkg/snmpdx/00TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/00TODO
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 00TODO
  --- ossp-pkg/snmpdx/00TODO	4 Sep 2003 09:16:56 -0000	1.9
  +++ ossp-pkg/snmpdx/00TODO	10 Sep 2003 13:10:22 -0000	1.10
  @@ -8,6 +8,9 @@
   CANDO
   =====
   
  +- allow two modules to run and cache the same command with different 
  +  expire times by using/enforcing the smaller expire time in the cache object.
  +- speed up initial MIB processing by trying to consolidate snmptranslate calls?
   - write probe snmpdx.pm which provides name and version and which
     especially can be also used as the always present probe in Makefile
     during restart.
  @@ .

From ossp-cvs-owner@ossp.org  Wed Sep 10 15:13:18 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1E71077176; Wed, 10 Sep 2003 15:13:18 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/tool/snmpdx/ index.wml
Message-Id: <20030910131318.1E71077176@mail.ossp.org>
Date: Wed, 10 Sep 2003 15:13:18 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   10-Sep-2003 15:13:18
  Branch: HEAD                             Handle: 2003091014131700

  Modified files:
    ossp-web/pkg/tool/snmpdx
                            index.wml

  Log:
    update

  Summary:
    Revision    Changes     Path
    1.2         +2  -2      ossp-web/pkg/tool/snmpdx/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/snmpdx/index.wml
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/tool/snmpdx/index.wml	9 Sep 2003 09:05:57 -0000	1.1
  +++ ossp-web/pkg/tool/snmpdx/index.wml	10 Sep 2003 13:13:17 -0000	1.2
  @@ -21,7 +21,7 @@
   
   <pkg_status
       stable="none" stable_date="none"
  -    unstable="0.2.0" unstable_date="9-Sep-2003"
  +    unstable="0.2.4" unstable_date="9-Sep-2003"
   	done=20>
   
   <h2>Source</h2>
  @@ -31,7 +31,7 @@
       url=$(FTP_ROOT_URL)/pkg/tool/snmpdx/
       directory=$(FTP_ROOT_DIR)/pkg/tool/snmpdx/
       files="snmpdx-*.tar.gz" 
  -	stable="none" unstable="snmpdx-0.2.0.tar.gz">
  +	stable="none" unstable="snmpdx-0.2.4.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Sep 10 15:14:17 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1CF2E77176; Wed, 10 Sep 2003 15:14:17 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/tool/snmpdx/ index.wml
Message-Id: <20030910131417.1CF2E77176@mail.ossp.org>
Date: Wed, 10 Sep 2003 15:14:17 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   10-Sep-2003 15:14:17
  Branch: HEAD                             Handle: 2003091014141600

  Modified files:
    ossp-web/pkg/tool/snmpdx
                            index.wml

  Log:
    add genesis

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-web/pkg/tool/snmpdx/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/snmpdx/index.wml
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 index.wml
  --- ossp-web/pkg/tool/snmpdx/index.wml	10 Sep 2003 13:13:17 -0000	1.2
  +++ ossp-web/pkg/tool/snmpdx/index.wml	10 Sep 2003 13:14:16 -0000	1.3
  @@ -22,7 +22,7 @@
   <pkg_status
       stable="none" stable_date="none"
       unstable="0.2.4" unstable_date="9-Sep-2003"
  -	done=20>
  +	genesis="August 2003" done=20>
   
   <h2>Source</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Sep 10 15:30:49 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DB9C077176; Wed, 10 Sep 2003 15:30:48 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ 00BRAINSTORM 00TODO AUTHORS ChangeLog INS...
Message-Id: <20030910133048.DB9C077176@mail.ossp.org>
Date: Wed, 10 Sep 2003 15:30:48 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Sep-2003 15:30:48
  Branch: HEAD                             Handle: 2003091014304700

  Modified files:
    ossp-pkg/snmpdx         00BRAINSTORM 00TODO AUTHORS ChangeLog INSTALL
                            Makefile.in README THANKS VERSION configure.ac
                            devtool.conf devtool.func snmpdx.pl

  Log:
    source tree polishing

  Summary:
    Revision    Changes     Path
    1.2         +11 -57     ossp-pkg/snmpdx/00BRAINSTORM
    1.11        +28 -19     ossp-pkg/snmpdx/00TODO
    1.7         +10 -10     ossp-pkg/snmpdx/AUTHORS
    1.7         +15 -10     ossp-pkg/snmpdx/ChangeLog
    1.7         +8  -9      ossp-pkg/snmpdx/INSTALL
    1.6         +5  -5      ossp-pkg/snmpdx/Makefile.in
    1.7         +8  -8      ossp-pkg/snmpdx/README
    1.7         +9  -10     ossp-pkg/snmpdx/THANKS
    1.6         +3  -15     ossp-pkg/snmpdx/VERSION
    1.3         +5  -7      ossp-pkg/snmpdx/configure.ac
    1.3         +5  -8      ossp-pkg/snmpdx/devtool.conf
    1.2         +1  -1      ossp-pkg/snmpdx/devtool.func
    1.5         +6  -6      ossp-pkg/snmpdx/snmpdx.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/00BRAINSTORM
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 00BRAINSTORM
  --- ossp-pkg/snmpdx/00BRAINSTORM	1 Sep 2003 15:22:41 -0000	1.1
  +++ ossp-pkg/snmpdx/00BRAINSTORM	10 Sep 2003 13:30:47 -0000	1.2
  @@ -1,43 +1,19 @@
  +   _        ___  ____ ____  ____                                  _
  +  |_|_ _   / _ \/ ___/ ___||  _ \   ___ _ __  _ __ ___  _ __   __| |_  __
  +  _|_||_| | | | \___ \___ \| |_) | / __| '_ \| '_ ` _ \| '_ \ / _` \ \/ /
  + |_||_|_| | |_| |___) |__) |  __/  \__ \ | | | | | | | | |_) | (_| |>  <
  +  |_|_|_|  \___/|____/____/|_|     |___/_| |_|_| |_| |_| .__/ \__,_/_/\_\
  +                                                       |_|
  +  OSSP snmpdx - SNMP Daemon Extension
   
  -Sitzt Michael schon an der SNMP-Geschichte? Wir haben bereits am Mittwoch
  -ein Folgemeeting, er waere gut, bis dahin erste Resultate zu haben. Ziel
  -ist es, von einer (zu schaffenden) Montoring Platform bestehend aus zwei
  -Sun Netra t1 ueber das Backup-LAN Hardware-Monitoring mittels SNMP zu
  -fahren. Die Netras werden auch von uns bereitgestellt, ich will diese dem
  -Zet.Net-Setup entnehmen. Dazu fehlt mir jedoch die Freigabe von Assuntina
  -Greco (Bill & Collect), welche jedoch erst zum 1.9. wieder da sein wird.
  -
  -Deshalb sollten wir uns erst mal auf die Client-Seite konzentriert werden.
  -Hierzu muss eine MIB entwickelt werden, mit der sich Parameter wir
  -Netzteil-Status (jeweils 1 oder mehrere), Plattenstatus (jeweils 1 oder
  -mehrere), Temperatur (jeweils 1 oder mehrere) etc. abfragen lassen. Wir
  -sollten erst einmal eine Referenzloesung und Sun Solaris schaffen.
  -Notwendige Punkte sind daher wohl
  -
  -o Config fuer den SNMP-Daemon aus OpenPKG, welcher diesen nur am
  -  Backup-Interface listenen laesst.
  -o Entwicklung von MIB und Skripten, mit der sich die relevanten
  -  Information extrahieren lassen (wahrscheinlich output von prtdiag
  -  parsen. Wie wir wissen, kann der output von prtdiag je nach Platform
  -  stark abweichen)
  -o Erweiterbarkeit der Loesung um andere Platformen, etwa Linux oder
  -  Windows (natuerlich nicht mit OpenPKG :-) muss gegeben sein.
  -o Waere es evtl. sinnvoll, die Skripte nicht direct durch den SNMP Daemon
  -  triggern zu lassen, insofern Daten lokal gecached bereits vorliegen?
  -  Der Cache koennte etwa eine RRD sein, welche durch cronjobs gespeist
  -  wird. So koennte man die Informationen noch evtl. anderweitig lokal
  -  nutzen (evtl. Reanimierung von poor man's monitoring probes sinnvoll?)
  -
  -Es sollen keine Traps ausgeloest werden, die Monitoring-Platform, auf der
  -dann ein BMC Agent laufen soll, pollt regelmaessig.
  -
  +  BRAINSTORM
  +  ==========
   
   * 1.3         - ISO Identified Organization
   * 1.3.6       - US Department of Defense
   * 1.3.6.1     - OID assignments from 1.3.6.1 - Internet
   * 1.3.6.1.4   - Internet Private
   * 1.3.6.1.4.1 - IANA-registered Private Enterprises
  -* 1.3.6.1.4.1.2021 - RedHat Linux
   * 1.3.6.1.4.1.4007 - Cable & Wireless Plc
   
   Cable & Wireless Communications plc Brian Norris <brian.norris@cwcom.co.uk>
  @@ -47,8 +23,7 @@
   http://www.iana.org/cgi-bin/enterprise.pl
   http://www.alvestrand.no/objectid/top.html
   
  -{iso(1) org(3) dod(6) iana(1)}
  -
  +-----------------------------------------------------------------------
   
   pass .1.3.6.1.4.1.2021.255 /path/to/probe
   $ /path/to/probe -g .1.3.6.1.4.1.2021.255
  @@ -108,7 +83,7 @@
       - uptime
       - load average (5/10/15)
       - processes
  -    - logged in users 
  +    - logged in users
       - virtual memory
         - swap space (available/used)
         - RAM space (available/used)
  @@ -121,25 +96,4 @@
         - status (verified ok)
     o Processes (running)
       - running
  -
  -------------------------
  -
  -FreeBSD:
  -/proc
  -sysctl
  -df
  -netstat 
  -ps
  -
  -Linux:
  -/proc
  -sysctl
  -df
  -netstat
  -ps
  -/proc/meminfo
  -
  -Solaris:
  -prtdiag 
  -/usr/sbin/sysdef
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/00TODO
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 00TODO
  --- ossp-pkg/snmpdx/00TODO	10 Sep 2003 13:10:22 -0000	1.10
  +++ ossp-pkg/snmpdx/00TODO	10 Sep 2003 13:30:47 -0000	1.11
  @@ -1,24 +1,33 @@
  +   _        ___  ____ ____  ____                                  _
  +  |_|_ _   / _ \/ ___/ ___||  _ \   ___ _ __  _ __ ___  _ __   __| |_  __
  +  _|_||_| | | | \___ \___ \| |_) | / __| '_ \| '_ ` _ \| '_ \ / _` \ \/ /
  + |_||_|_| | |_| |___) |__) |  __/  \__ \ | | | | | | | | |_) | (_| |>  <
  +  |_|_|_|  \___/|____/____/|_|     |___/_| |_|_| |_| |_| .__/ \__,_/_/\_\
  +                                                       |_|
  +  OSSP snmpdx - SNMP Daemon Extension
   
  -TODO
  -====
  +  TODO
  +  ====
   
  -- implement more probes [thl]
  -- write snmpdx.pod documentation
  +  - snmp mibs dir was lost
   
  -CANDO
  -=====
  +  - implement more probes [thl]
  +  - write snmpdx.pod documentation
   
  -- allow two modules to run and cache the same command with different 
  -  expire times by using/enforcing the smaller expire time in the cache object.
  -- speed up initial MIB processing by trying to consolidate snmptranslate calls?
  -- write probe snmpdx.pm which provides name and version and which
  -  especially can be also used as the always present probe in Makefile
  -  during restart.
  -- add --param=key:value command line option for passing key/value
  -  pairs into snmpdx for use by probes as some sort of configuration.
  -- provide "-expire" field in $obj which the probes can fill out.
  -  If filled out, the framework uses this to cache the result
  -  value to speed up things even more.
  -- split out MIB parts of each probe into own sub-MIBs
  -- Makefile and snmpdx.cfg still contains some hard-coded things
  +  CANDO
  +  =====
  +
  +  - allow two modules to run and cache the same command with different
  +    expire times by using/enforcing the smaller expire time in the cache object.
  +  - speed up initial MIB processing by trying to consolidate snmptranslate calls?
  +  - write probe snmpdx.pm which provides name and version and which
  +    especially can be also used as the always present probe in Makefile
  +    during restart.
  +  - add --param=key:value command line option for passing key/value
  +    pairs into snmpdx for use by probes as some sort of configuration.
  +  - provide "-expire" field in $obj which the probes can fill out.
  +    If filled out, the framework uses this to cache the result
  +    value to speed up things even more.
  +  - split out MIB parts of each probe into own sub-MIBs
  +  - Makefile and snmpdx.cfg still contains some hard-coded things
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/AUTHORS
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 AUTHORS
  --- ossp-pkg/snmpdx/AUTHORS	9 Sep 2003 14:16:25 -0000	1.6
  +++ ossp-pkg/snmpdx/AUTHORS	10 Sep 2003 13:30:47 -0000	1.7
  @@ -1,19 +1,19 @@
  -   _        ___  ____ ____  ____
  -  |_|_ _   / _ \/ ___/ ___||  _ \ 
  -  _|_||_| | | | \___ \___ \| |_) |
  - |_||_|_| | |_| |___) |__) |  __/ 
  -  |_|_|_|  \___/|____/____/|_|    
  -
  +   _        ___  ____ ____  ____                                  _
  +  |_|_ _   / _ \/ ___/ ___||  _ \   ___ _ __  _ __ ___  _ __   __| |_  __
  +  _|_||_| | | | \___ \___ \| |_) | / __| '_ \| '_ ` _ \| '_ \ / _` \ \/ /
  + |_||_|_| | |_| |___) |__) |  __/  \__ \ | | | | | | | | |_) | (_| |>  <
  +  |_|_|_|  \___/|____/____/|_|     |___/_| |_|_| |_| |_| .__/ \__,_/_/\_\
  +                                                       |_|
     OSSP snmpdx - SNMP Daemon Extension
     Version 0.2.4 (09-Sep-2003)
     ____________________________________________________________________
   
     AUTHORS
   
  -  This is a list of authors who have written or edited parts of 
  +  This is a list of authors who have written or edited parts of
     the OSSP snmpdx sources.
   
     o  OSSP snmpdx (as a whole)
  -     Written by: Ralf S. Engelschall <rse@engelschall.com> 
  -                 Thomas Lotterer     <thomas@lotterer.net> 
  -  
  +     Written by: Ralf S. Engelschall <rse@engelschall.com>
  +                 Thomas Lotterer     <thomas@lotterer.net>
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ChangeLog
  --- ossp-pkg/snmpdx/ChangeLog	9 Sep 2003 14:16:25 -0000	1.6
  +++ ossp-pkg/snmpdx/ChangeLog	10 Sep 2003 13:30:47 -0000	1.7
  @@ -1,20 +1,25 @@
  -   _        ___  ____ ____  ____
  -  |_|_ _   / _ \/ ___/ ___||  _ \ 
  -  _|_||_| | | | \___ \___ \| |_) |
  - |_||_|_| | |_| |___) |__) |  __/ 
  -  |_|_|_|  \___/|____/____/|_|    
  -
  +   _        ___  ____ ____  ____                                  _
  +  |_|_ _   / _ \/ ___/ ___||  _ \   ___ _ __  _ __ ___  _ __   __| |_  __
  +  _|_||_| | | | \___ \___ \| |_) | / __| '_ \| '_ ` _ \| '_ \ / _` \ \/ /
  + |_||_|_| | |_| |___) |__) |  __/  \__ \ | | | | | | | | |_) | (_| |>  <
  +  |_|_|_|  \___/|____/____/|_|     |___/_| |_|_| |_| |_| .__/ \__,_/_/\_\
  +                                                       |_|
     OSSP snmpdx - SNMP Daemon Extension
  -  Version 0.2.4 (09-Sep-2003)
  -  ____________________________________________________________________
   
     ChangeLog
   
  -  Changes between 0.1.0 and 0.2.0 (9-Sep-2003):
  +  Changes between 0.2.0 and 0.2.4 (09-Sep-2003):
  +
  +   *) Lot's of fiddling with the build environment.
  +      [Thomas Lotterer]
  +
  +  Changes between 0.1.0 and 0.2.0 (09-Sep-2003):
  +
      *) Build environment, OpenPKG package
         [Thomas Lotterer]
   
  -  Changes between *GENESIS* and 0.1.0 (Aug-2003 to 9-Sep-2003):
  +  Changes between *GENESIS* and 0.1.0 (xx-Aug-2003 to 09-Sep-2003):
  +
      *) Framework and initial probes
         [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/INSTALL
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 INSTALL
  --- ossp-pkg/snmpdx/INSTALL	9 Sep 2003 14:16:25 -0000	1.6
  +++ ossp-pkg/snmpdx/INSTALL	10 Sep 2003 13:30:47 -0000	1.7
  @@ -1,14 +1,13 @@
  -   _        ___  ____ ____  ____
  -  |_|_ _   / _ \/ ___/ ___||  _ \ 
  -  _|_||_| | | | \___ \___ \| |_) |
  - |_||_|_| | |_| |___) |__) |  __/ 
  -  |_|_|_|  \___/|____/____/|_|    
  -
  +   _        ___  ____ ____  ____                                  _
  +  |_|_ _   / _ \/ ___/ ___||  _ \   ___ _ __  _ __ ___  _ __   __| |_  __
  +  _|_||_| | | | \___ \___ \| |_) | / __| '_ \| '_ ` _ \| '_ \ / _` \ \/ /
  + |_||_|_| | |_| |___) |__) |  __/  \__ \ | | | | | | | | |_) | (_| |>  <
  +  |_|_|_|  \___/|____/____/|_|     |___/_| |_|_| |_| |_| .__/ \__,_/_/\_\
  +                                                       |_|
     OSSP snmpdx - SNMP Daemon Extension
  -  Version 0.2.4 (09-Sep-2003)
  -  ____________________________________________________________________
   
     INSTALLATION
  -  
  +  ============
  +
     FIXME
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 Makefile.in
  --- ossp-pkg/snmpdx/Makefile.in	9 Sep 2003 14:16:17 -0000	1.5
  +++ ossp-pkg/snmpdx/Makefile.in	10 Sep 2003 13:30:47 -0000	1.6
  @@ -3,14 +3,14 @@
   ##
   ##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP snmpd, a SNMP Daemon Extension which
   ##  can be found at http://www.ossp.org/pkg/tool/snmpdx/.
   ##
   ##  This program is free software; you can redistribute it and/or
  -##  modify it under the terms of the GNU General Public  License 
  -##  as published by the Free Software Foundation; either version 
  +##  modify it under the terms of the GNU General Public  License
  +##  as published by the Free Software Foundation; either version
   ##  2.0 of the License, or (at your option) any later version.
   ##
   ##  This program is distributed in the hope that it will be useful,
  @@ -18,7 +18,7 @@
   ##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
   ##  General Public License for more details.
   ##
  -##  You should have received a copy of the GNU General Public License 
  +##  You should have received a copy of the GNU General Public License
   ##  along with this file; if not, write to the Free Software
   ##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
   ##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  @@ -34,7 +34,7 @@
   SED           = sed
   POD2MAN       = pod2man
   PERL          = @PATH_PERL@
  -              
  +
   prefix        = @prefix@
   exec_prefix   = @exec_prefix@
   bindir        = @bindir@
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/README
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 README
  --- ossp-pkg/snmpdx/README	9 Sep 2003 14:16:25 -0000	1.6
  +++ ossp-pkg/snmpdx/README	10 Sep 2003 13:30:47 -0000	1.7
  @@ -1,11 +1,11 @@
  -   _        ___  ____ ____  ____
  -  |_|_ _   / _ \/ ___/ ___||  _ \ 
  -  _|_||_| | | | \___ \___ \| |_) |
  - |_||_|_| | |_| |___) |__) |  __/ 
  -  |_|_|_|  \___/|____/____/|_|    
  -
  +   _        ___  ____ ____  ____                                  _
  +  |_|_ _   / _ \/ ___/ ___||  _ \   ___ _ __  _ __ ___  _ __   __| |_  __
  +  _|_||_| | | | \___ \___ \| |_) | / __| '_ \| '_ ` _ \| '_ \ / _` \ \/ /
  + |_||_|_| | |_| |___) |__) |  __/  \__ \ | | | | | | | | |_) | (_| |>  <
  +  |_|_|_|  \___/|____/____/|_|     |___/_| |_|_| |_| |_| .__/ \__,_/_/\_\
  +                                                       |_|
     OSSP snmpdx - SNMP Daemon Extension
  -  Version 0.2.4 (09-Sep-2003)
  +  Version 0.2.5 (10-Sep-2003)
   
     ABSTRACT
   
  @@ -18,7 +18,7 @@
   
     Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
     Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  -  Copyright (c) 2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
   
     This file is part of OSSP snmpd, a SNMP Daemon Extension which
     can be found at http://www.ossp.org/pkg/tool/snmpdx/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/THANKS
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 THANKS
  --- ossp-pkg/snmpdx/THANKS	9 Sep 2003 14:16:25 -0000	1.6
  +++ ossp-pkg/snmpdx/THANKS	10 Sep 2003 13:30:47 -0000	1.7
  @@ -1,19 +1,18 @@
  -   _        ___  ____ ____  ____
  -  |_|_ _   / _ \/ ___/ ___||  _ \ 
  -  _|_||_| | | | \___ \___ \| |_) |
  - |_||_|_| | |_| |___) |__) |  __/ 
  -  |_|_|_|  \___/|____/____/|_|    
  -
  +   _        ___  ____ ____  ____                                  _
  +  |_|_ _   / _ \/ ___/ ___||  _ \   ___ _ __  _ __ ___  _ __   __| |_  __
  +  _|_||_| | | | \___ \___ \| |_) | / __| '_ \| '_ ` _ \| '_ \ / _` \ \/ /
  + |_||_|_| | |_| |___) |__) |  __/  \__ \ | | | | | | | | |_) | (_| |>  <
  +  |_|_|_|  \___/|____/____/|_|     |___/_| |_|_| |_| |_| .__/ \__,_/_/\_\
  +                                                       |_|
     OSSP snmpdx - SNMP Daemon Extension
  -  Version 0.2.4 (09-Sep-2003)
  -  ____________________________________________________________________
  -  
  +
     THANKS
  +  ======
   
     Credit has to be given to the following people who contributed ideas,
     stuff, bugfixes, hints etc. (in alphabetical order):
   
     o Christoph Schug          <chris@schug.net>
   
  -  ...and all other OSSP snmpd users who gave me feedback but I've forgot.
  +  ...and all other OSSP snmpdx users who gave me feedback but I've forgot.
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/VERSION
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 VERSION
  --- ossp-pkg/snmpdx/VERSION	9 Sep 2003 14:16:25 -0000	1.5
  +++ ossp-pkg/snmpdx/VERSION	10 Sep 2003 13:30:47 -0000	1.6
  @@ -1,18 +1,6 @@
  -##
  -##  VERSION -- Version Information for OSSP snmpdx (syntax: Perl)
  -##  [automatically generated and maintained by GNU shtool]
  -##
   
  -my $snmpdx_version = {
  -    'v_hex'   => 0x002204,
  -    'v_short' => "0.2.4",
  -    'v_long'  => "0.2.4 (09-Sep-2003)",
  -    'v_tex'   => "This is OSSP snmpdx, Version 0.2.4 (09-Sep-2003)",
  -    'v_gnu'   => "OSSP snmpdx 0.2.4 (09-Sep-2003)",
  -    'v_web'   => "OSSP snmpdx/0.2.4",
  -    'v_sccs'  => "@(#)OSSP snmpdx 0.2.4 (09-Sep-2003)",
  -    'v_rcs'   => "\$Id: VERSION,v 1.5 2003/09/09 14:16:25 thl Exp $/"
  -};
  +  VERSION -- Version Information for OSSP snmpdx (syntax: Text)
  +  [automatically generated and maintained by GNU shtool]
   
  -1;
  +  This is OSSP snmpdx, Version 0.2.5 (10-Sep-2003)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/configure.ac
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 configure.ac
  --- ossp-pkg/snmpdx/configure.ac	9 Sep 2003 12:50:04 -0000	1.2
  +++ ossp-pkg/snmpdx/configure.ac	10 Sep 2003 13:30:47 -0000	1.3
  @@ -1,16 +1,15 @@
   ##
   ##  OSSP snmpdx - SNMP Daemon Extension
  -##
   ##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP snmpd, a SNMP Daemon Extension which
   ##  can be found at http://www.ossp.org/pkg/tool/snmpdx/.
   ##
   ##  This program is free software; you can redistribute it and/or
  -##  modify it under the terms of the GNU General Public  License 
  -##  as published by the Free Software Foundation; either version 
  +##  modify it under the terms of the GNU General Public  License
  +##  as published by the Free Software Foundation; either version
   ##  2.0 of the License, or (at your option) any later version.
   ##
   ##  This program is distributed in the hope that it will be useful,
  @@ -18,7 +17,7 @@
   ##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
   ##  General Public License for more details.
   ##
  -##  You should have received a copy of the GNU General Public License 
  +##  You should have received a copy of the GNU General Public License
   ##  along with this file; if not, write to the Free Software
   ##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
   ##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  @@ -33,7 +32,7 @@
   ./shtool echo -e "Configuring %BOSSP snmpdx%b, Version %B${V}%b"
   echo "Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>"
   echo "Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>"
  -echo "Copyright (c) 2003 Cable & Wireless Germany <http://www.cw.com/de/>"
  +echo "Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>"
   
   AC_MSG_CHECKING(for Perl program)
   AC_ARG_WITH(perl,dnl
  @@ -49,7 +48,6 @@
   
   AC_SET_MAKE
   
  -##AC_CONFIG_HEADERS(config.h)
   AC_CONFIG_FILES([Makefile])
   AC_OUTPUT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.conf
  --- ossp-pkg/snmpdx/devtool.conf	9 Sep 2003 09:28:36 -0000	1.2
  +++ ossp-pkg/snmpdx/devtool.conf	10 Sep 2003 13:30:47 -0000	1.3
  @@ -8,7 +8,6 @@
   
   %autoclean
       @autoclean shtool
  -    @autoclean libtool
       @autoclean autoconf
   
   %configure
  @@ -23,14 +22,12 @@
       ./devtool upload
   
   %version
  -    ./shtool version -lperl -n "OSSP snmpdx" -p "snmpdx_" -e VERSION
  -    V=`./shtool version -lperl -dlong VERSION`
  -    for i in AUTHORS ChangeLog INSTALL README THANKS; do
  -        sed -e "s/  Version .*/  Version $V/g" <$i >$i.n && mv $i.n $i
  -    done
  +    ./shtool version -ltxt -n "OSSP snmpdx" -p "snmpdx_" -e VERSION
  +    V=`./shtool version -ltxt -dlong VERSION`
  +    sed -e "s/  Version .*/  Version $V/g" <README >README.n && mv README.n README
   
   %tag
  -    V=`./shtool version -lc -dshort VERSION | sed -e 's;\.;_;g'`
  +    V=`./shtool version -ltxt -dshort VERSION | sed -e 's;\.;_;g'`
       echo "+++ tagging CVS sources as SNMPDX_${V}"
       cvs commit -m 'flush pending changes before tagging'
       cvs tag SNMPDX_${V}
  @@ -52,7 +49,7 @@
       echo "+++ rolling"
       V=`./shtool version -lc -dshort VERSION`
       ./shtool tarball -o snmpdx-${V}.tar.gz -d snmpdx-${V} -u ossp -g ossp \
  -                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*,*.tar.gz,^#.*,.*~$' -c 'gzip --best' .
  +                     -e '00*,CVS,\.cvsignore,\.[ao]$,^\.,devtool*,*.tar.gz,^#.*,.*~$' -c 'gzip --best' .
       ls -l snmpdx-${V}.tar.gz
       echo "+++ testing"
       gunzip <snmpdx-${V}.tar.gz | tar tvf - | head -10
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/devtool.func
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.func
  --- ossp-pkg/snmpdx/devtool.func	9 Sep 2003 09:24:28 -0000	1.1
  +++ ossp-pkg/snmpdx/devtool.func	10 Sep 2003 13:30:47 -0000	1.2
  @@ -32,7 +32,7 @@
               autoconf_version=`devtool_require autoconf --version 4 "$1" "$2"`
               echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
               autoconf
  -            autoheader 2>&1 | grep -v "is unchanged"
  +            #autoheader 2>&1 | grep -v "is unchanged"
               rm -rf autom4te.cache >/dev/null 2>&1
               ;;
           libtool )
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.pl
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 snmpdx.pl
  --- ossp-pkg/snmpdx/snmpdx.pl	9 Sep 2003 14:08:29 -0000	1.4
  +++ ossp-pkg/snmpdx/snmpdx.pl	10 Sep 2003 13:30:47 -0000	1.5
  @@ -84,7 +84,7 @@
       my $fmt   = shift @_ || die "missing format argument";
       if ($self->{-level} >= $level) {
           my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time());
  -        my $id = sprintf("[%04d-%02d-%02d/%02d:%02d:%02d@%05d] ", 
  +        my $id = sprintf("[%04d-%02d-%02d/%02d:%02d:%02d@%05d] ",
                            $year+1900, $mon+1, $mday, $hour, $min, $sec, $$);
           $self->{-io}->printf($id . $fmt . "\n", @_);
       }
  @@ -204,11 +204,11 @@
       }
       else {
           $self->{-log}->printf(3, "system: run: \"$cmd\" ($expires) [CACHE MISS]");
  -        $self->{-log}->printf(5, "system: executing command: \"$cmd\""); 
  +        $self->{-log}->printf(5, "system: executing command: \"$cmd\"");
           $result = { -stdout => '', -rv => 0 };
           $result->{-stdout} = `$cmd 2>/dev/null`;
           $result->{-rv} = ($? >> 8);
  -        $self->{-log}->printf(6, "system: return value: ". $result->{-rv}); 
  +        $self->{-log}->printf(6, "system: return value: ". $result->{-rv});
           $self->{-cache}->store($cmd, $expires, $result);
       }
       return $result;
  @@ -487,7 +487,7 @@
       'bindir'    => "/cw/bin",
       'probedir'  => "@libexecdir@/snmpdx",
       'probename' => "*",
  -    'mibdir'    => "@datadir@/snmpdx/mibs",
  +    'mibdir'    => "@datadir@/snmpdx/mibs", # FIXME
       'mibname'   => "snmpdx",
       'logfile'   => "@localstatedir@/snmpdx.log",
       'loglevel'  => 9,
  @@ -549,7 +549,7 @@
           my ($option, $value) = ($line =~ m|^\s*(\S+)\s+(.+?)\s*$|s);
           die "invalid configuration line \"$line\""
               if (not defined($option) or not defined($value));
  -        my ($var) = map  { $options{$_} } 
  +        my ($var) = map  { $options{$_} }
                       grep { $_ =~ m/^.\|\Q$option\E(=[si])?$/s }
                       keys(%options);
           die "invalid configuration option \"$option\""
  @@ -575,7 +575,7 @@
       $prg->{'name'}, $prg->{'version'}, $prg->{'date'},
       $ctx->{-platform}->id());
   
  -#   exception handling support 
  +#   exception handling support
   $SIG{__DIE__} = sub {
       my ($err) = @_;
       $err =~ s|\r?\n$||s;
  @@ .

From ossp-cvs-owner@ossp.org  Wed Sep 10 15:34:55 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8EB0B77176; Wed, 10 Sep 2003 15:34:55 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ .cvsignore
Message-Id: <20030910133455.8EB0B77176@mail.ossp.org>
Date: Wed, 10 Sep 2003 15:34:55 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Sep-2003 15:34:55
  Branch: HEAD                             Handle: 2003091014345500

  Modified files:
    ossp-pkg/snmpdx         .cvsignore

  Log:
    ignore generated files

  Summary:
    Revision    Changes     Path
    1.3         +4  -0      ossp-pkg/snmpdx/.cvsignore
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/.cvsignore
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 .cvsignore
  --- ossp-pkg/snmpdx/.cvsignore	9 Sep 2003 13:50:22 -0000	1.2
  +++ ossp-pkg/snmpdx/.cvsignore	10 Sep 2003 13:34:55 -0000	1.3
  @@ -4,3 +4,7 @@
   *.tar.bz2
   configure
   shtool
  +Makefile
  +snmpdx
  +snmpdx.1
  +snmpdx.cfg
  @@ .

From ossp-cvs-owner@ossp.org  Wed Sep 10 15:35:03 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2D8BF7717A; Wed, 10 Sep 2003 15:35:03 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ 00TODO
Message-Id: <20030910133503.2D8BF7717A@mail.ossp.org>
Date: Wed, 10 Sep 2003 15:35:03 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Sep-2003 15:35:03
  Branch: HEAD                             Handle: 2003091014350200

  Modified files:
    ossp-pkg/snmpdx         00TODO

  Log:
    remember more todo

  Summary:
    Revision    Changes     Path
    1.12        +2  -1      ossp-pkg/snmpdx/00TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/00TODO
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 00TODO
  --- ossp-pkg/snmpdx/00TODO	10 Sep 2003 13:30:47 -0000	1.11
  +++ ossp-pkg/snmpdx/00TODO	10 Sep 2003 13:35:02 -0000	1.12
  @@ -10,7 +10,8 @@
     ====
   
     - snmp mibs dir was lost
  -
  +  - pod2man is found in $PATH
  +  - we should add --with-snmp
     - implement more probes [thl]
     - write snmpdx.pod documentation
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Sep 10 15:35:15 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BAEC377177; Wed, 10 Sep 2003 15:35:15 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ Makefile.in snmpdx.cfg.in snmpdx.pl
Message-Id: <20030910133515.BAEC377177@mail.ossp.org>
Date: Wed, 10 Sep 2003 15:35:15 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Sep-2003 15:35:15
  Branch: HEAD                             Handle: 2003091014351500

  Modified files:
    ossp-pkg/snmpdx         Makefile.in snmpdx.cfg.in snmpdx.pl

  Log:
    no need for an extra subdir 'mibs' for now

  Summary:
    Revision    Changes     Path
    1.7         +2  -2      ossp-pkg/snmpdx/Makefile.in
    1.3         +1  -1      ossp-pkg/snmpdx/snmpdx.cfg.in
    1.6         +1  -1      ossp-pkg/snmpdx/snmpdx.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 Makefile.in
  --- ossp-pkg/snmpdx/Makefile.in	10 Sep 2003 13:30:47 -0000	1.6
  +++ ossp-pkg/snmpdx/Makefile.in	10 Sep 2003 13:35:15 -0000	1.7
  @@ -83,13 +83,13 @@
   install: all
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(sysconfdir)/snmpdx
  -	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(datadir)/snmpdx/mibs
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(datadir)/snmpdx
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libexecdir)/snmpdx
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man1
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(localstatedir)/snmpdx
   	$(SHTOOL) install -c -m 755 snmpdx $(DESTDIR)$(bindir)/snmpdx
   	$(SHTOOL) install -c -m 644 snmpdx.cfg $(DESTDIR)$(sysconfdir)/snmpdx/snmpdx.cfg
  -	$(SHTOOL) install -c -m 644 snmpdx.mib/*.mib $(DESTDIR)$(datadir)/snmpdx/mibs/
  +	$(SHTOOL) install -c -m 644 snmpdx.mib/*.mib $(DESTDIR)$(datadir)/snmpdx/
   	$(SHTOOL) install -c -m 644 snmpdx.d/*.pm $(DESTDIR)$(libexecdir)/snmpdx/
   	$(SHTOOL) install -c -m 644 snmpdx.1 $(DESTDIR)$(mandir)/man1/snmpdx.1
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.cfg.in
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 snmpdx.cfg.in
  --- ossp-pkg/snmpdx/snmpdx.cfg.in	9 Sep 2003 13:52:16 -0000	1.2
  +++ ossp-pkg/snmpdx/snmpdx.cfg.in	10 Sep 2003 13:35:15 -0000	1.3
  @@ -2,7 +2,7 @@
   ##  snmpdx.cfg -- configuration file for SNMP Daemon Extension
   ##
   
  -mibdir    @datadir@/snmpdx/mibs:@datadir@/snmp/mibs
  +mibdir    @datadir@/snmpdx:@datadir@/snmp/mibs
   probedir  @libexecdir@/snmpdx
   logfile   @localstatedir@/snmpdx/snmpdx.log
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.pl
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 snmpdx.pl
  --- ossp-pkg/snmpdx/snmpdx.pl	10 Sep 2003 13:30:47 -0000	1.5
  +++ ossp-pkg/snmpdx/snmpdx.pl	10 Sep 2003 13:35:15 -0000	1.6
  @@ -487,7 +487,7 @@
       'bindir'    => "/cw/bin",
       'probedir'  => "@libexecdir@/snmpdx",
       'probename' => "*",
  -    'mibdir'    => "@datadir@/snmpdx/mibs", # FIXME
  +    'mibdir'    => "@datadir@/snmpdx", # FIXME
       'mibname'   => "snmpdx",
       'logfile'   => "@localstatedir@/snmpdx.log",
       'loglevel'  => 9,
  @@ .

From ossp-cvs-owner@ossp.org  Wed Sep 10 15:43:52 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 92EA977176; Wed, 10 Sep 2003 15:43:52 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/tool/ index.wml ossp-w...
Message-Id: <20030910134352.92EA977176@mail.ossp.org>
Date: Wed, 10 Sep 2003 15:43:52 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   10-Sep-2003 15:43:52
  Branch: HEAD                             Handle: 2003091014435101

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/snmpdx
                            index.wml

  Log:
    release OSSP snmpdx 0.2.5

  Summary:
    Revision    Changes     Path
    1.64        +5  -0      ossp-web/new/news.txt
    1.30        +1  -1      ossp-web/pkg/tool/index.wml
    1.4         +3  -3      ossp-web/pkg/tool/snmpdx/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.63 -r1.64 news.txt
  --- ossp-web/new/news.txt	30 Jun 2003 14:39:08 -0000	1.63
  +++ ossp-web/new/news.txt	10 Sep 2003 13:43:51 -0000	1.64
  @@ -1,3 +1,8 @@
  +10-Sep-2003: Released T<OSSP snmpdx> 0.2.5
  +09-Sep-2003: Released T<OSSP snmpdx> 0.2.4
  +09-Sep-2003: Released T<OSSP snmpdx> 0.2.3
  +09-Sep-2003: Released T<OSSP snmpdx> 0.2.2
  +08-Sep-2003: Released T<OSSP snmpdx> 0.2.1
   30-Jun-2003: Released L<OSSP fsl> 1.2.0
   30-Jun-2003: Released L<OSSP l2> 0.9.2
   30-Jun-2003: Released L<OSSP sio> 0.9.2
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 index.wml
  --- ossp-web/pkg/tool/index.wml	9 Sep 2003 09:05:56 -0000	1.29
  +++ ossp-web/pkg/tool/index.wml	10 Sep 2003 13:43:51 -0000	1.30
  @@ -56,6 +56,6 @@
   	        done=90 stable="none" unstable="none">
     <pkg_item name="snmpdx" longname="OSSP snmpdx" type="tool"
               desc="SNMP Daemon Extension"
  -	        done=20 stable="none" unstable="0.2.0">
  +	        done=80 stable="none" unstable="0.2.5">
   </pkg_list>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/snmpdx/index.wml
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 index.wml
  --- ossp-web/pkg/tool/snmpdx/index.wml	10 Sep 2003 13:14:16 -0000	1.3
  +++ ossp-web/pkg/tool/snmpdx/index.wml	10 Sep 2003 13:43:52 -0000	1.4
  @@ -21,8 +21,8 @@
   
   <pkg_status
       stable="none" stable_date="none"
  -    unstable="0.2.4" unstable_date="9-Sep-2003"
  -	genesis="August 2003" done=20>
  +    unstable="0.2.5" unstable_date="10-Sep-2003"
  +	genesis="August 2003" done=80>
   
   <h2>Source</h2>
   
  @@ -31,7 +31,7 @@
       url=$(FTP_ROOT_URL)/pkg/tool/snmpdx/
       directory=$(FTP_ROOT_DIR)/pkg/tool/snmpdx/
       files="snmpdx-*.tar.gz" 
  -	stable="none" unstable="snmpdx-0.2.4.tar.gz">
  +	stable="none" unstable="snmpdx-0.2.5.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Sep 10 15:54:34 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AF06F7716C; Wed, 10 Sep 2003 15:54:33 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ 00TODO ChangeLog Makefile.in configure.ac
Message-Id: <20030910135433.AF06F7716C@mail.ossp.org>
Date: Wed, 10 Sep 2003 15:54:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Sep-2003 15:54:33
  Branch: HEAD                             Handle: 2003091014543300

  Modified files:
    ossp-pkg/snmpdx         00TODO ChangeLog Makefile.in configure.ac

  Log:
    Find pod2man(1) side-by-side with perl(1) executable.

  Summary:
    Revision    Changes     Path
    1.13        +0  -1      ossp-pkg/snmpdx/00TODO
    1.8         +10 -0      ossp-pkg/snmpdx/ChangeLog
    1.8         +1  -1      ossp-pkg/snmpdx/Makefile.in
    1.4         +2  -0      ossp-pkg/snmpdx/configure.ac
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/00TODO
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 00TODO
  --- ossp-pkg/snmpdx/00TODO	10 Sep 2003 13:35:02 -0000	1.12
  +++ ossp-pkg/snmpdx/00TODO	10 Sep 2003 13:54:33 -0000	1.13
  @@ -10,7 +10,6 @@
     ====
   
     - snmp mibs dir was lost
  -  - pod2man is found in $PATH
     - we should add --with-snmp
     - implement more probes [thl]
     - write snmpdx.pod documentation
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 ChangeLog
  --- ossp-pkg/snmpdx/ChangeLog	10 Sep 2003 13:30:47 -0000	1.7
  +++ ossp-pkg/snmpdx/ChangeLog	10 Sep 2003 13:54:33 -0000	1.8
  @@ -8,6 +8,16 @@
   
     ChangeLog
   
  +  Changes between 0.2.5 and 0.2.6 (10-Sep-2003 to 10-Sep-2003):
  +
  +   *) Find pod2man(1) side-by-side with perl(1) executable.
  +      [Ralf S. Engelschall]
  +
  +  Changes between 0.2.4 and 0.2.5 (09-Sep-2003 to 10-Sep-2003):
  +
  +   *) Source tree polishing.
  +      [Ralf S. Engelschall]
  +
     Changes between 0.2.0 and 0.2.4 (09-Sep-2003):
   
      *) Lot's of fiddling with the build environment.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 Makefile.in
  --- ossp-pkg/snmpdx/Makefile.in	10 Sep 2003 13:35:15 -0000	1.7
  +++ ossp-pkg/snmpdx/Makefile.in	10 Sep 2003 13:54:33 -0000	1.8
  @@ -32,7 +32,7 @@
   SHTOOL        = ./shtool
   RM            = rm -f
   SED           = sed
  -POD2MAN       = pod2man
  +POD2MAN       = @PATH_POD2MAN@
   PERL          = @PATH_PERL@
   
   prefix        = @prefix@
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/configure.ac
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 configure.ac
  --- ossp-pkg/snmpdx/configure.ac	10 Sep 2003 13:30:47 -0000	1.3
  +++ ossp-pkg/snmpdx/configure.ac	10 Sep 2003 13:54:33 -0000	1.4
  @@ -45,6 +45,8 @@
   PATH_PERL="$with_perl"
   AC_SUBST(PATH_PERL)
   AC_MSG_RESULT($PATH_PERL)
  +PATH_POD2MAN=`echo "$PATH_PERL" | sed -e 's;/[[^/]]*$;/pod2man;'`
  +AC_SUBST(PATH_POD2MAN)
   
   AC_SET_MAKE
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Sep 10 15:57:31 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D980A7716C; Wed, 10 Sep 2003 15:57:30 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ ChangeLog Makefile.in
Message-Id: <20030910135730.D980A7716C@mail.ossp.org>
Date: Wed, 10 Sep 2003 15:57:30 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Sep-2003 15:57:30
  Branch: HEAD                             Handle: 2003091014573000

  Modified files:
    ossp-pkg/snmpdx         ChangeLog Makefile.in

  Log:
    Place executable snmpdx into sbindir/ and man/man8/

  Summary:
    Revision    Changes     Path
    1.9         +3  -0      ossp-pkg/snmpdx/ChangeLog
    1.9         +11 -10     ossp-pkg/snmpdx/Makefile.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 ChangeLog
  --- ossp-pkg/snmpdx/ChangeLog	10 Sep 2003 13:54:33 -0000	1.8
  +++ ossp-pkg/snmpdx/ChangeLog	10 Sep 2003 13:57:30 -0000	1.9
  @@ -10,6 +10,9 @@
   
     Changes between 0.2.5 and 0.2.6 (10-Sep-2003 to 10-Sep-2003):
   
  +   *) Place executable "snmpdx" into sbindir/ and man/man8/
  +      [Ralf S. Engelschall]
  +
      *) Find pod2man(1) side-by-side with perl(1) executable.
         [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 Makefile.in
  --- ossp-pkg/snmpdx/Makefile.in	10 Sep 2003 13:54:33 -0000	1.8
  +++ ossp-pkg/snmpdx/Makefile.in	10 Sep 2003 13:57:30 -0000	1.9
  @@ -38,6 +38,7 @@
   prefix        = @prefix@
   exec_prefix   = @exec_prefix@
   bindir        = @bindir@
  +sbindir       = @sbindir@
   libdir        = @libdir@
   sysconfdir    = @sysconfdir@
   libexecdir    = @libexecdir@
  @@ -48,7 +49,7 @@
   
   DESTDIR       =
   
  -all: snmpdx snmpdx.cfg snmpdx.1
  +all: snmpdx snmpdx.cfg snmpdx.8
   
   snmpdx: snmpdx.pl
   	@$(SHTOOL) echo -e "%Bgenerating snmpdx%b"
  @@ -73,28 +74,28 @@
   		-e 's;\@localstatedir\@;$(localstatedir);g' \
   		<snmpdx.cfg.in >snmpdx.cfg
   
  -snmpdx.1: snmpdx.pod
  -	@$(SHTOOL) echo -e "%Bgenerating snmpdx.1%b"
  +snmpdx.8: snmpdx.pod
  +	@$(SHTOOL) echo -e "%Bgenerating snmpdx.8%b"
   	V=`$(SHTOOL) version -l txt -d short VERSION`; \
   	D=`$(SHTOOL) version -l txt -d long VERSION | $(SED) -e 's;.*(;;' -e 's;).*;;'`; \
  -	$(POD2MAN) --section=1 --center="SNMP Daemon Extension" \
  -	           --release="$$D" --date="OSSP snmpdx $$V" snmpdx.pod >snmpdx.1
  +	$(POD2MAN) --section=8 --center="SNMP Daemon Extension" \
  +	           --release="$$D" --date="OSSP snmpdx $$V" snmpdx.pod >snmpdx.8
   
   install: all
  -	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(sbindir)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(sysconfdir)/snmpdx
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(datadir)/snmpdx
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libexecdir)/snmpdx
  -	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man1
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man8
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(localstatedir)/snmpdx
  -	$(SHTOOL) install -c -m 755 snmpdx $(DESTDIR)$(bindir)/snmpdx
  +	$(SHTOOL) install -c -m 755 snmpdx $(DESTDIR)$(sbindir)/snmpdx
   	$(SHTOOL) install -c -m 644 snmpdx.cfg $(DESTDIR)$(sysconfdir)/snmpdx/snmpdx.cfg
   	$(SHTOOL) install -c -m 644 snmpdx.mib/*.mib $(DESTDIR)$(datadir)/snmpdx/
   	$(SHTOOL) install -c -m 644 snmpdx.d/*.pm $(DESTDIR)$(libexecdir)/snmpdx/
  -	$(SHTOOL) install -c -m 644 snmpdx.1 $(DESTDIR)$(mandir)/man1/snmpdx.1
  +	$(SHTOOL) install -c -m 644 snmpdx.8 $(DESTDIR)$(mandir)/man8/snmpdx.8
   
   clean:
  -	$(RM) snmpdx snmpdx.cfg snmpdx.1
  +	$(RM) snmpdx snmpdx.cfg snmpdx.8
   
   distclean: clean
   	$(RM) config.cache config.status config.log
  @@ .

From ossp-cvs-owner@ossp.org  Wed Sep 10 16:12:39 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AD2297716F; Wed, 10 Sep 2003 16:12:38 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ .cvsignore
Message-Id: <20030910141238.AD2297716F@mail.ossp.org>
Date: Wed, 10 Sep 2003 16:12:38 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Sep-2003 16:12:38
  Branch: HEAD                             Handle: 2003091015123800

  Modified files:
    ossp-pkg/snmpdx         .cvsignore

  Log:
    manpage is now snmpdx.8

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/snmpdx/.cvsignore
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/.cvsignore
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 .cvsignore
  --- ossp-pkg/snmpdx/.cvsignore	10 Sep 2003 13:34:55 -0000	1.3
  +++ ossp-pkg/snmpdx/.cvsignore	10 Sep 2003 14:12:38 -0000	1.4
  @@ -6,5 +6,5 @@
   shtool
   Makefile
   snmpdx
  -snmpdx.1
  +snmpdx.8
   snmpdx.cfg
  @@ .

From ossp-cvs-owner@ossp.org  Wed Sep 10 16:17:06 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E9CA97713A; Wed, 10 Sep 2003 16:17:05 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ 00TODO ChangeLog Makefile.in configure.ac...
Message-Id: <20030910141705.E9CA97713A@mail.ossp.org>
Date: Wed, 10 Sep 2003 16:17:05 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Sep-2003 16:17:05
  Branch: HEAD                             Handle: 2003091015170500

  Modified files:
    ossp-pkg/snmpdx         00TODO ChangeLog Makefile.in configure.ac
                            devtool.conf snmpdx.cfg.in snmpdx.pl

  Log:
    Add Autoconf option --with-snmp=PREFIX for specifying
    installation prefix of net-snmp package in order to
    find the net-snmp MIB directory.

  Summary:
    Revision    Changes     Path
    1.14        +0  -2      ossp-pkg/snmpdx/00TODO
    1.10        +5  -0      ossp-pkg/snmpdx/ChangeLog
    1.10        +3  -0      ossp-pkg/snmpdx/Makefile.in
    1.5         +29 -1      ossp-pkg/snmpdx/configure.ac
    1.4         +2  -0      ossp-pkg/snmpdx/devtool.conf
    1.4         +1  -1      ossp-pkg/snmpdx/snmpdx.cfg.in
    1.7         +1  -1      ossp-pkg/snmpdx/snmpdx.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/00TODO
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 00TODO
  --- ossp-pkg/snmpdx/00TODO	10 Sep 2003 13:54:33 -0000	1.13
  +++ ossp-pkg/snmpdx/00TODO	10 Sep 2003 14:17:05 -0000	1.14
  @@ -9,8 +9,6 @@
     TODO
     ====
   
  -  - snmp mibs dir was lost
  -  - we should add --with-snmp
     - implement more probes [thl]
     - write snmpdx.pod documentation
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 ChangeLog
  --- ossp-pkg/snmpdx/ChangeLog	10 Sep 2003 13:57:30 -0000	1.9
  +++ ossp-pkg/snmpdx/ChangeLog	10 Sep 2003 14:17:05 -0000	1.10
  @@ -10,6 +10,11 @@
   
     Changes between 0.2.5 and 0.2.6 (10-Sep-2003 to 10-Sep-2003):
   
  +   *) Add Autoconf option --with-snmp=PREFIX for specifying
  +      installation prefix of net-snmp package in order to
  +      find the net-snmp MIB directory.
  +      [Ralf S. Engelschall]
  +
      *) Place executable "snmpdx" into sbindir/ and man/man8/
         [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 Makefile.in
  --- ossp-pkg/snmpdx/Makefile.in	10 Sep 2003 13:57:30 -0000	1.9
  +++ ossp-pkg/snmpdx/Makefile.in	10 Sep 2003 14:17:05 -0000	1.10
  @@ -46,6 +46,7 @@
   mandir        = @mandir@
   datadir       = @datadir@
   localstatedir = @localstatedir@
  +snmpmibdir    = @snmpmibdir@
   
   DESTDIR       =
   
  @@ -63,6 +64,7 @@
   		-e "s;\@libexecdir\@;$(libexecdir);" \
   		-e "s;\@datadir\@;$(datadir);" \
   		-e "s;\@localstatedir\@;$(localstatedir);" \
  +		-e "s;\@snmpmibdir\@;$(snmpmibdir);" \
   		<snmpdx.pl >snmpdx && \
   		chmod a+x snmpdx
   
  @@ -72,6 +74,7 @@
   		-e 's;\@libexecdir\@;$(libexecdir);g' \
   		-e 's;\@datadir\@;$(datadir);g' \
   		-e 's;\@localstatedir\@;$(localstatedir);g' \
  +		-e "s;\@snmpmibdir\@;$(snmpmibdir);" \
   		<snmpdx.cfg.in >snmpdx.cfg
   
   snmpdx.8: snmpdx.pod
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/configure.ac
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 configure.ac
  --- ossp-pkg/snmpdx/configure.ac	10 Sep 2003 13:54:33 -0000	1.4
  +++ ossp-pkg/snmpdx/configure.ac	10 Sep 2003 14:17:05 -0000	1.5
  @@ -25,16 +25,19 @@
   ##  configure.ac: auto-configuration source (syntax: Autoconf)
   ##
   
  +dnl # standard Autoconf prolog
   AC_PREREQ(2.53)
   AC_INIT
   
  +dnl # standard OSSP style header
   V=`./shtool version -ltxt -dlong VERSION`
   ./shtool echo -e "Configuring %BOSSP snmpdx%b, Version %B${V}%b"
   echo "Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>"
   echo "Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>"
   echo "Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>"
   
  -AC_MSG_CHECKING(for Perl program)
  +dnl # check for Perl
  +AC_MSG_CHECKING(for perl program)
   AC_ARG_WITH(perl,dnl
   [  --with-perl=PATH        force the use of a particular Perl program],
   with_perl="$withval",
  @@ -48,8 +51,33 @@
   PATH_POD2MAN=`echo "$PATH_PERL" | sed -e 's;/[[^/]]*$;/pod2man;'`
   AC_SUBST(PATH_POD2MAN)
   
  +dnl # check for net-snmp
  +AC_MSG_CHECKING(for net-snmp prefix)
  +AC_ARG_WITH(snmp,dnl
  +[  --with-snmp=PREFIX      force the use of a particular net-snmp installation],
  +snmp_prefix="$withval",
  +if test ".$snmp_prefix" = .; then
  +    snmp_prefix=`(net-snmp-config --prefix) 2>/dev/null`
  +fi
  +)dnl
  +if test ".$snmp_prefix" = .; then
  +    AC_MSG_ERROR([path to net-snmp package not found (specify with --with-snmp=PREFIX])
  +fi
  +snmp_mibdir=`find $snmp_prefix/share/ -type d -name "mibs" -print 2>/dev/null | head -1 | sed -e 's;//*;/;g'`
  +if test ".$snmp_mibdir" = .; then
  +    snmp_mibdir=`find $snmp_prefix/ -type d -name "mibs" -print 2>/dev/null | head -1 | sed -e 's;//*;/;g'`
  +fi
  +if test ".$snmp_mibdir" = .; then
  +    AC_MSG_ERROR([net-snmp MIB directory not found under $snmp_prefix])
  +fi
  +snmpmibdir="$snmp_mibdir"
  +AC_SUBST(snmpmibdir)
  +AC_MSG_RESULT($snmpmibdir)
  +
  +dnl # check for make(1)
   AC_SET_MAKE
   
  +dnl # standard Autoconf epilog
   AC_CONFIG_FILES([Makefile])
   AC_OUTPUT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.conf
  --- ossp-pkg/snmpdx/devtool.conf	10 Sep 2003 13:30:47 -0000	1.3
  +++ ossp-pkg/snmpdx/devtool.conf	10 Sep 2003 14:17:05 -0000	1.4
  @@ -13,6 +13,8 @@
   %configure
       ./configure \
           --prefix=/tmp/snmpdx \
  +        --with-perl=/cw/bin/perl \
  +        --with-snmp=/cw \
           "$@"
   
   %release
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.cfg.in
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 snmpdx.cfg.in
  --- ossp-pkg/snmpdx/snmpdx.cfg.in	10 Sep 2003 13:35:15 -0000	1.3
  +++ ossp-pkg/snmpdx/snmpdx.cfg.in	10 Sep 2003 14:17:05 -0000	1.4
  @@ -2,7 +2,7 @@
   ##  snmpdx.cfg -- configuration file for SNMP Daemon Extension
   ##
   
  -mibdir    @datadir@/snmpdx:@datadir@/snmp/mibs
  +mibdir    @datadir@/snmpdx:@snmpmibdir@
   probedir  @libexecdir@/snmpdx
   logfile   @localstatedir@/snmpdx/snmpdx.log
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.pl
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 snmpdx.pl
  --- ossp-pkg/snmpdx/snmpdx.pl	10 Sep 2003 13:35:15 -0000	1.6
  +++ ossp-pkg/snmpdx/snmpdx.pl	10 Sep 2003 14:17:05 -0000	1.7
  @@ -487,7 +487,7 @@
       'bindir'    => "/cw/bin",
       'probedir'  => "@libexecdir@/snmpdx",
       'probename' => "*",
  -    'mibdir'    => "@datadir@/snmpdx", # FIXME
  +    'mibdir'    => "@datadir@/snmpdx:@snmpmibdir@",
       'mibname'   => "snmpdx",
       'logfile'   => "@localstatedir@/snmpdx.log",
       'loglevel'  => 9,
  @@ .

From ossp-cvs-owner@ossp.org  Wed Sep 10 16:17:57 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 12E4D7713A; Wed, 10 Sep 2003 16:17:57 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ README VERSION
Message-Id: <20030910141757.12E4D7713A@mail.ossp.org>
Date: Wed, 10 Sep 2003 16:17:57 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Sep-2003 16:17:56
  Branch: HEAD                             Handle: 2003091015175600

  Modified files:
    ossp-pkg/snmpdx         README VERSION

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.8         +1  -1      ossp-pkg/snmpdx/README
    1.7         +1  -1      ossp-pkg/snmpdx/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/README
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 README
  --- ossp-pkg/snmpdx/README	10 Sep 2003 13:30:47 -0000	1.7
  +++ ossp-pkg/snmpdx/README	10 Sep 2003 14:17:56 -0000	1.8
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/_| |_|_| |_| |_| .__/ \__,_/_/\_\
                                                          |_|
     OSSP snmpdx - SNMP Daemon Extension
  -  Version 0.2.5 (10-Sep-2003)
  +  Version 0.2.6 (10-Sep-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/VERSION
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 VERSION
  --- ossp-pkg/snmpdx/VERSION	10 Sep 2003 13:30:47 -0000	1.6
  +++ ossp-pkg/snmpdx/VERSION	10 Sep 2003 14:17:56 -0000	1.7
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP snmpdx (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP snmpdx, Version 0.2.5 (10-Sep-2003)
  +  This is OSSP snmpdx, Version 0.2.6 (10-Sep-2003)
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Sep 10 16:36:18 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1352A7716F; Wed, 10 Sep 2003 16:36:17 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ devtool.conf
Message-Id: <20030910143617.1352A7716F@mail.ossp.org>
Date: Wed, 10 Sep 2003 16:36:17 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Sep-2003 16:36:17
  Branch: HEAD                             Handle: 2003091015361700

  Modified files:
    ossp-pkg/snmpdx         devtool.conf

  Log:
    add a little test command for us developers

  Summary:
    Revision    Changes     Path
    1.5         +3  -0      ossp-pkg/snmpdx/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 devtool.conf
  --- ossp-pkg/snmpdx/devtool.conf	10 Sep 2003 14:17:05 -0000	1.4
  +++ ossp-pkg/snmpdx/devtool.conf	10 Sep 2003 14:36:17 -0000	1.5
  @@ -63,3 +63,6 @@
       V=`./shtool version -lc -dshort VERSION`
       scp snmpdx-${V}.tar.gz master.ossp.org:/e/ossp/ftp/pkg/tool/snmpdx/
   
  +%test
  +    /cw/bin/snmpwalk -M /tmp/snmpdx/share/snmpdx:/cw/share/snmp/mibs -cpublic -v2c -mALL dv1 .1.3.6.1.4.1.4007.42
  +
  @@ .

From ossp-cvs-owner@ossp.org  Wed Sep 10 17:01:50 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2B66D7716F; Wed, 10 Sep 2003 17:01:48 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ AUTHORS ChangeLog Makefile.in README ossp...
Message-Id: <20030910150148.2B66D7716F@mail.ossp.org>
Date: Wed, 10 Sep 2003 17:01:48 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Sep-2003 17:01:48
  Branch: HEAD                             Handle: 2003091016014403

  Modified files:
    ossp-pkg/snmpdx         AUTHORS ChangeLog Makefile.in README snmpdx.pl
                            snmpdx.pod
    ossp-pkg/snmpdx/snmpdx.d
                            hwCpu.pm hwDisk.pm hwFan.pm hwProd.pm hwPs.pm
                            hwRam.pm swOp.pm swOs.pm sysFs.pm sysLoad.pm
                            sysProc.pm sysUptime.pm sysUser.pm sysVM.pm
    ossp-pkg/snmpdx/snmpdx.mib
                            snmpdx.mib

  Log:
    More source tree cleanups and polishing, especially adding the
    GPL-based copyright header used inside OSSP packages

  Summary:
    Revision    Changes     Path
    1.8         +1  -2      ossp-pkg/snmpdx/AUTHORS
    1.11        +6  -0      ossp-pkg/snmpdx/ChangeLog
    1.11        +2  -3      ossp-pkg/snmpdx/Makefile.in
    1.9         +15 -18     ossp-pkg/snmpdx/README
    1.8         +18 -18     ossp-pkg/snmpdx/snmpdx.d/hwCpu.pm
    1.5         +18 -18     ossp-pkg/snmpdx/snmpdx.d/hwDisk.pm
    1.4         +18 -18     ossp-pkg/snmpdx/snmpdx.d/hwFan.pm
    1.2         +18 -18     ossp-pkg/snmpdx/snmpdx.d/hwProd.pm
    1.4         +18 -18     ossp-pkg/snmpdx/snmpdx.d/hwPs.pm
    1.3         +18 -18     ossp-pkg/snmpdx/snmpdx.d/hwRam.pm
    1.6         +18 -18     ossp-pkg/snmpdx/snmpdx.d/swOp.pm
    1.2         +18 -18     ossp-pkg/snmpdx/snmpdx.d/swOs.pm
    1.5         +18 -18     ossp-pkg/snmpdx/snmpdx.d/sysFs.pm
    1.2         +18 -18     ossp-pkg/snmpdx/snmpdx.d/sysLoad.pm
    1.2         +18 -18     ossp-pkg/snmpdx/snmpdx.d/sysProc.pm
    1.2         +18 -18     ossp-pkg/snmpdx/snmpdx.d/sysUptime.pm
    1.2         +18 -18     ossp-pkg/snmpdx/snmpdx.d/sysUser.pm
    1.7         +18 -18     ossp-pkg/snmpdx/snmpdx.d/sysVM.pm
    1.12        +27 -0      ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib
    1.8         +19 -17     ossp-pkg/snmpdx/snmpdx.pl
    1.2         +19 -17     ossp-pkg/snmpdx/snmpdx.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/AUTHORS
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 AUTHORS
  --- ossp-pkg/snmpdx/AUTHORS	10 Sep 2003 13:30:47 -0000	1.7
  +++ ossp-pkg/snmpdx/AUTHORS	10 Sep 2003 15:01:44 -0000	1.8
  @@ -5,10 +5,9 @@
     |_|_|_|  \___/|____/____/|_|     |___/_| |_|_| |_| |_| .__/ \__,_/_/\_\
                                                          |_|
     OSSP snmpdx - SNMP Daemon Extension
  -  Version 0.2.4 (09-Sep-2003)
  -  ____________________________________________________________________
   
     AUTHORS
  +  =======
   
     This is a list of authors who have written or edited parts of
     the OSSP snmpdx sources.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 ChangeLog
  --- ossp-pkg/snmpdx/ChangeLog	10 Sep 2003 14:17:05 -0000	1.10
  +++ ossp-pkg/snmpdx/ChangeLog	10 Sep 2003 15:01:44 -0000	1.11
  @@ -7,6 +7,12 @@
     OSSP snmpdx - SNMP Daemon Extension
   
     ChangeLog
  +  =========
  +
  +  Changes between 0.2.6 and 0.2.7 (10-Sep-2003 to 10-Sep-2003):
  +
  +   *) More source tree cleanups and polishing.
  +      [Ralf S. Engelschall]
   
     Changes between 0.2.5 and 0.2.6 (10-Sep-2003 to 10-Sep-2003):
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 Makefile.in
  --- ossp-pkg/snmpdx/Makefile.in	10 Sep 2003 14:17:05 -0000	1.10
  +++ ossp-pkg/snmpdx/Makefile.in	10 Sep 2003 15:01:44 -0000	1.11
  @@ -1,11 +1,10 @@
   ##
   ##  OSSP snmpdx - SNMP Daemon Extension
  -##
  -##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
   ##
  -##  This file is part of OSSP snmpd, a SNMP Daemon Extension which
  +##  This file is part of OSSP snmpdx, a SNMP daemon extension which
   ##  can be found at http://www.ossp.org/pkg/tool/snmpdx/.
   ##
   ##  This program is free software; you can redistribute it and/or
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/README
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 README
  --- ossp-pkg/snmpdx/README	10 Sep 2003 14:17:56 -0000	1.8
  +++ ossp-pkg/snmpdx/README	10 Sep 2003 15:01:44 -0000	1.9
  @@ -16,30 +16,27 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
     Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
     Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
   
  -  This file is part of OSSP snmpd, a SNMP Daemon Extension which
  +  This file is part of OSSP snmpdx, a SNMP daemon extension which
     can be found at http://www.ossp.org/pkg/tool/snmpdx/.
   
  -  Permission to use, copy, modify, and distribute this software for
  -  any purpose with or without fee is hereby granted, provided that
  -  the above copyright notice and this permission notice appear in all
  -  copies.
  +  This program is free software; you can redistribute it and/or modify
  +  it under the terms of the GNU General Public License as published by
  +  the Free Software Foundation; either version 2 of the License, or
  +  (at your option) any later version.
  +
  +  This program is distributed in the hope that it will be useful,
  +  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +  General Public License for more details.
   
  -  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  -  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  -  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  -  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  -  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  -  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  -  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  -  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  -  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  -  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  -  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  -  SUCH DAMAGE.
  +  You should have received a copy of the GNU General Public License
  +  along with this program; if not, write to the Free Software
  +  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
   
     HOME AND DOCUMENTATION
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/hwCpu.pm
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 hwCpu.pm
  --- ossp-pkg/snmpdx/snmpdx.d/hwCpu.pm	10 Sep 2003 12:29:06 -0000	1.7
  +++ ossp-pkg/snmpdx/snmpdx.d/hwCpu.pm	10 Sep 2003 15:01:46 -0000	1.8
  @@ -1,28 +1,28 @@
   ##
  -##  snmpdx -- SNMP Daemon Extension
  +##  OSSP snmpdx - SNMP Daemon Extension
   ##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
   ##
  -##  Permission to use, copy, modify, and distribute this software for
  -##  any purpose with or without fee is hereby granted, provided that
  -##  the above copyright notice and this permission notice appear in all
  -##  copies.
  +##  This file is part of OSSP snmpdx, a SNMP daemon extension which
  +##  can be found at http://www.ossp.org/pkg/tool/snmpdx/.
   ##
  -##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  -##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  -##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  -##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  -##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  -##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  -##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  -##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  -##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  -##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  -##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  -##  SUCH DAMAGE.
  +##  This program is free software; you can redistribute it and/or
  +##  modify it under the terms of the GNU General Public  License
  +##  as published by the Free Software Foundation; either version
  +##  2.0 of the License, or (at your option) any later version.
   ##
  -##  hwCpu: Hardware, CPU
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this file; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  hwCpu.pm: probe for Hardware, CPU
   ##
   
   package My::Probe::hwCpu;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/hwDisk.pm
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 hwDisk.pm
  --- ossp-pkg/snmpdx/snmpdx.d/hwDisk.pm	10 Sep 2003 12:29:06 -0000	1.4
  +++ ossp-pkg/snmpdx/snmpdx.d/hwDisk.pm	10 Sep 2003 15:01:46 -0000	1.5
  @@ -1,28 +1,28 @@
   ##
  -##  snmpdx -- SNMP Daemon Extension
  +##  OSSP snmpdx - SNMP Daemon Extension
   ##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
   ##
  -##  Permission to use, copy, modify, and distribute this software for
  -##  any purpose with or without fee is hereby granted, provided that
  -##  the above copyright notice and this permission notice appear in all
  -##  copies.
  +##  This file is part of OSSP snmpdx, a SNMP daemon extension which
  +##  can be found at http://www.ossp.org/pkg/tool/snmpdx/.
   ##
  -##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  -##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  -##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  -##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  -##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  -##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  -##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  -##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  -##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  -##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  -##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  -##  SUCH DAMAGE.
  +##  This program is free software; you can redistribute it and/or
  +##  modify it under the terms of the GNU General Public  License
  +##  as published by the Free Software Foundation; either version
  +##  2.0 of the License, or (at your option) any later version.
   ##
  -##  hwDisk: Hardware, Disk
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this file; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  hwDisk.pm: probe for Hardware, Disk
   ##
   
   package My::Probe::hwDisk;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/hwFan.pm
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 hwFan.pm
  --- ossp-pkg/snmpdx/snmpdx.d/hwFan.pm	10 Sep 2003 12:29:06 -0000	1.3
  +++ ossp-pkg/snmpdx/snmpdx.d/hwFan.pm	10 Sep 2003 15:01:46 -0000	1.4
  @@ -1,28 +1,28 @@
   ##
  -##  snmpdx -- SNMP Daemon Extension
  +##  OSSP snmpdx - SNMP Daemon Extension
   ##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
   ##
  -##  Permission to use, copy, modify, and distribute this software for
  -##  any purpose with or without fee is hereby granted, provided that
  -##  the above copyright notice and this permission notice appear in all
  -##  copies.
  +##  This file is part of OSSP snmpdx, a SNMP daemon extension which
  +##  can be found at http://www.ossp.org/pkg/tool/snmpdx/.
   ##
  -##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  -##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  -##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  -##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  -##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  -##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  -##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  -##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  -##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  -##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  -##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  -##  SUCH DAMAGE.
  +##  This program is free software; you can redistribute it and/or
  +##  modify it under the terms of the GNU General Public  License
  +##  as published by the Free Software Foundation; either version
  +##  2.0 of the License, or (at your option) any later version.
   ##
  -##  hwFan: Hardware, Fan
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this file; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  hwFan.pm: probe for Hardware, Fan
   ##
   
   package My::Probe::hwFan;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/hwProd.pm
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 hwProd.pm
  --- ossp-pkg/snmpdx/snmpdx.d/hwProd.pm	1 Sep 2003 15:22:42 -0000	1.1
  +++ ossp-pkg/snmpdx/snmpdx.d/hwProd.pm	10 Sep 2003 15:01:46 -0000	1.2
  @@ -1,28 +1,28 @@
   ##
  -##  snmpdx -- SNMP Daemon Extension
  +##  OSSP snmpdx - SNMP Daemon Extension
   ##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
   ##
  -##  Permission to use, copy, modify, and distribute this software for
  -##  any purpose with or without fee is hereby granted, provided that
  -##  the above copyright notice and this permission notice appear in all
  -##  copies.
  +##  This file is part of OSSP snmpdx, a SNMP daemon extension which
  +##  can be found at http://www.ossp.org/pkg/tool/snmpdx/.
   ##
  -##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  -##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  -##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  -##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  -##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  -##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  -##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  -##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  -##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  -##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  -##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  -##  SUCH DAMAGE.
  +##  This program is free software; you can redistribute it and/or
  +##  modify it under the terms of the GNU General Public  License
  +##  as published by the Free Software Foundation; either version
  +##  2.0 of the License, or (at your option) any later version.
   ##
  -##  hwProd: Hardware, Product
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this file; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  hwProd.pm: probe for Hardware, Product
   ##
   
   package My::Probe::hwProd;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/hwPs.pm
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 hwPs.pm
  --- ossp-pkg/snmpdx/snmpdx.d/hwPs.pm	10 Sep 2003 12:29:06 -0000	1.3
  +++ ossp-pkg/snmpdx/snmpdx.d/hwPs.pm	10 Sep 2003 15:01:46 -0000	1.4
  @@ -1,28 +1,28 @@
   ##
  -##  snmpdx -- SNMP Daemon Extension
  +##  OSSP snmpdx - SNMP Daemon Extension
   ##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
   ##
  -##  Permission to use, copy, modify, and distribute this software for
  -##  any purpose with or without fee is hereby granted, provided that
  -##  the above copyright notice and this permission notice appear in all
  -##  copies.
  +##  This file is part of OSSP snmpdx, a SNMP daemon extension which
  +##  can be found at http://www.ossp.org/pkg/tool/snmpdx/.
   ##
  -##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  -##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  -##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  -##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  -##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  -##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  -##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  -##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  -##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  -##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  -##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  -##  SUCH DAMAGE.
  +##  This program is free software; you can redistribute it and/or
  +##  modify it under the terms of the GNU General Public  License
  +##  as published by the Free Software Foundation; either version
  +##  2.0 of the License, or (at your option) any later version.
   ##
  -##  hwPs: Hardware, Powersupply
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this file; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  hwPs.pm: probe for Hardware, Power Supply
   ##
   
   package My::Probe::hwPs;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/hwRam.pm
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 hwRam.pm
  --- ossp-pkg/snmpdx/snmpdx.d/hwRam.pm	8 Sep 2003 10:48:31 -0000	1.2
  +++ ossp-pkg/snmpdx/snmpdx.d/hwRam.pm	10 Sep 2003 15:01:46 -0000	1.3
  @@ -1,28 +1,28 @@
   ##
  -##  snmpdx -- SNMP Daemon Extension
  +##  OSSP snmpdx - SNMP Daemon Extension
   ##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
   ##
  -##  Permission to use, copy, modify, and distribute this software for
  -##  any purpose with or without fee is hereby granted, provided that
  -##  the above copyright notice and this permission notice appear in all
  -##  copies.
  +##  This file is part of OSSP snmpdx, a SNMP daemon extension which
  +##  can be found at http://www.ossp.org/pkg/tool/snmpdx/.
   ##
  -##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  -##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  -##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  -##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  -##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  -##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  -##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  -##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  -##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  -##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  -##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  -##  SUCH DAMAGE.
  +##  This program is free software; you can redistribute it and/or
  +##  modify it under the terms of the GNU General Public  License
  +##  as published by the Free Software Foundation; either version
  +##  2.0 of the License, or (at your option) any later version.
   ##
  -##  hwRam: Hardware, RAM
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this file; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  hwRam.pm: probe for Hardware, RAM
   ##
   
   package My::Probe::hwRam;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/swOp.pm
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 swOp.pm
  --- ossp-pkg/snmpdx/snmpdx.d/swOp.pm	2 Sep 2003 18:37:04 -0000	1.5
  +++ ossp-pkg/snmpdx/snmpdx.d/swOp.pm	10 Sep 2003 15:01:46 -0000	1.6
  @@ -1,28 +1,28 @@
   ##
  -##  snmpdx -- SNMP Daemon Extension
  +##  OSSP snmpdx - SNMP Daemon Extension
   ##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
   ##
  -##  Permission to use, copy, modify, and distribute this software for
  -##  any purpose with or without fee is hereby granted, provided that
  -##  the above copyright notice and this permission notice appear in all
  -##  copies.
  +##  This file is part of OSSP snmpdx, a SNMP daemon extension which
  +##  can be found at http://www.ossp.org/pkg/tool/snmpdx/.
   ##
  -##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  -##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  -##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  -##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  -##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  -##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  -##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  -##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  -##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  -##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  -##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  -##  SUCH DAMAGE.
  +##  This program is free software; you can redistribute it and/or
  +##  modify it under the terms of the GNU General Public  License
  +##  as published by the Free Software Foundation; either version
  +##  2.0 of the License, or (at your option) any later version.
   ##
  -##  swOp: Software, OpenPKG
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this file; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  swOp.pm: probe for Software, OpenPKG
   ##
   
   package My::Probe::swOp;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/swOs.pm
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 swOs.pm
  --- ossp-pkg/snmpdx/snmpdx.d/swOs.pm	1 Sep 2003 15:22:42 -0000	1.1
  +++ ossp-pkg/snmpdx/snmpdx.d/swOs.pm	10 Sep 2003 15:01:46 -0000	1.2
  @@ -1,28 +1,28 @@
   ##
  -##  snmpdx -- SNMP Daemon Extension
  +##  OSSP snmpdx - SNMP Daemon Extension
   ##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
   ##
  -##  Permission to use, copy, modify, and distribute this software for
  -##  any purpose with or without fee is hereby granted, provided that
  -##  the above copyright notice and this permission notice appear in all
  -##  copies.
  +##  This file is part of OSSP snmpdx, a SNMP daemon extension which
  +##  can be found at http://www.ossp.org/pkg/tool/snmpdx/.
   ##
  -##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  -##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  -##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  -##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  -##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  -##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  -##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  -##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  -##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  -##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  -##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  -##  SUCH DAMAGE.
  +##  This program is free software; you can redistribute it and/or
  +##  modify it under the terms of the GNU General Public  License
  +##  as published by the Free Software Foundation; either version
  +##  2.0 of the License, or (at your option) any later version.
   ##
  -##  swOs: Software, Operating System
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this file; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  swOs.pm: probe for Software, Operating System
   ##
   
   package My::Probe::swOs;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/sysFs.pm
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 sysFs.pm
  --- ossp-pkg/snmpdx/snmpdx.d/sysFs.pm	10 Sep 2003 12:29:06 -0000	1.4
  +++ ossp-pkg/snmpdx/snmpdx.d/sysFs.pm	10 Sep 2003 15:01:46 -0000	1.5
  @@ -1,28 +1,28 @@
   ##
  -##  snmpdx -- SNMP Daemon Extension
  +##  OSSP snmpdx - SNMP Daemon Extension
   ##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
   ##
  -##  Permission to use, copy, modify, and distribute this software for
  -##  any purpose with or without fee is hereby granted, provided that
  -##  the above copyright notice and this permission notice appear in all
  -##  copies.
  +##  This file is part of OSSP snmpdx, a SNMP daemon extension which
  +##  can be found at http://www.ossp.org/pkg/tool/snmpdx/.
   ##
  -##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  -##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  -##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  -##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  -##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  -##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  -##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  -##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  -##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  -##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  -##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  -##  SUCH DAMAGE.
  +##  This program is free software; you can redistribute it and/or
  +##  modify it under the terms of the GNU General Public  License
  +##  as published by the Free Software Foundation; either version
  +##  2.0 of the License, or (at your option) any later version.
   ##
  -##  sysFs: System, Filesystem
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this file; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  sysFs.pm: probe for System, Filesystem
   ##
   
   package My::Probe::sysFs;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/sysLoad.pm
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 sysLoad.pm
  --- ossp-pkg/snmpdx/snmpdx.d/sysLoad.pm	1 Sep 2003 15:22:42 -0000	1.1
  +++ ossp-pkg/snmpdx/snmpdx.d/sysLoad.pm	10 Sep 2003 15:01:46 -0000	1.2
  @@ -1,28 +1,28 @@
   ##
  -##  snmpdx -- SNMP Daemon Extension
  +##  OSSP snmpdx - SNMP Daemon Extension
   ##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
   ##
  -##  Permission to use, copy, modify, and distribute this software for
  -##  any purpose with or without fee is hereby granted, provided that
  -##  the above copyright notice and this permission notice appear in all
  -##  copies.
  +##  This file is part of OSSP snmpdx, a SNMP daemon extension which
  +##  can be found at http://www.ossp.org/pkg/tool/snmpdx/.
   ##
  -##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  -##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  -##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  -##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  -##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  -##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  -##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  -##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  -##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  -##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  -##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  -##  SUCH DAMAGE.
  +##  This program is free software; you can redistribute it and/or
  +##  modify it under the terms of the GNU General Public  License
  +##  as published by the Free Software Foundation; either version
  +##  2.0 of the License, or (at your option) any later version.
   ##
  -##  sysLoad: System Load Average
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this file; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  sysLoad.pm: probe for System Load Average
   ##
   
   package My::Probe::sysLoad;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/sysProc.pm
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 sysProc.pm
  --- ossp-pkg/snmpdx/snmpdx.d/sysProc.pm	1 Sep 2003 15:22:42 -0000	1.1
  +++ ossp-pkg/snmpdx/snmpdx.d/sysProc.pm	10 Sep 2003 15:01:46 -0000	1.2
  @@ -1,28 +1,28 @@
   ##
  -##  snmpdx -- SNMP Daemon Extension
  +##  OSSP snmpdx - SNMP Daemon Extension
   ##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
   ##
  -##  Permission to use, copy, modify, and distribute this software for
  -##  any purpose with or without fee is hereby granted, provided that
  -##  the above copyright notice and this permission notice appear in all
  -##  copies.
  +##  This file is part of OSSP snmpdx, a SNMP daemon extension which
  +##  can be found at http://www.ossp.org/pkg/tool/snmpdx/.
   ##
  -##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  -##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  -##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  -##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  -##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  -##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  -##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  -##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  -##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  -##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  -##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  -##  SUCH DAMAGE.
  +##  This program is free software; you can redistribute it and/or
  +##  modify it under the terms of the GNU General Public  License
  +##  as published by the Free Software Foundation; either version
  +##  2.0 of the License, or (at your option) any later version.
   ##
  -##  sysProc: System Process Information
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this file; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  sysProc.pm: probe for System Process Information
   ##
   
   package My::Probe::sysProc;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/sysUptime.pm
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 sysUptime.pm
  --- ossp-pkg/snmpdx/snmpdx.d/sysUptime.pm	1 Sep 2003 15:22:42 -0000	1.1
  +++ ossp-pkg/snmpdx/snmpdx.d/sysUptime.pm	10 Sep 2003 15:01:46 -0000	1.2
  @@ -1,28 +1,28 @@
   ##
  -##  snmpdx -- SNMP Daemon Extension
  +##  OSSP snmpdx - SNMP Daemon Extension
   ##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
   ##
  -##  Permission to use, copy, modify, and distribute this software for
  -##  any purpose with or without fee is hereby granted, provided that
  -##  the above copyright notice and this permission notice appear in all
  -##  copies.
  +##  This file is part of OSSP snmpdx, a SNMP daemon extension which
  +##  can be found at http://www.ossp.org/pkg/tool/snmpdx/.
   ##
  -##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  -##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  -##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  -##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  -##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  -##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  -##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  -##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  -##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  -##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  -##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  -##  SUCH DAMAGE.
  +##  This program is free software; you can redistribute it and/or
  +##  modify it under the terms of the GNU General Public  License
  +##  as published by the Free Software Foundation; either version
  +##  2.0 of the License, or (at your option) any later version.
   ##
  -##  sysUptime: System Uptime
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this file; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  sysUptime.pm: probe for System Uptime
   ##
   
   package My::Probe::sysUptime;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/sysUser.pm
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 sysUser.pm
  --- ossp-pkg/snmpdx/snmpdx.d/sysUser.pm	1 Sep 2003 15:22:42 -0000	1.1
  +++ ossp-pkg/snmpdx/snmpdx.d/sysUser.pm	10 Sep 2003 15:01:46 -0000	1.2
  @@ -1,28 +1,28 @@
   ##
  -##  snmpdx -- SNMP Daemon Extension
  +##  OSSP snmpdx - SNMP Daemon Extension
   ##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
   ##
  -##  Permission to use, copy, modify, and distribute this software for
  -##  any purpose with or without fee is hereby granted, provided that
  -##  the above copyright notice and this permission notice appear in all
  -##  copies.
  +##  This file is part of OSSP snmpdx, a SNMP daemon extension which
  +##  can be found at http://www.ossp.org/pkg/tool/snmpdx/.
   ##
  -##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  -##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  -##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  -##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  -##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  -##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  -##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  -##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  -##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  -##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  -##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  -##  SUCH DAMAGE.
  +##  This program is free software; you can redistribute it and/or
  +##  modify it under the terms of the GNU General Public  License
  +##  as published by the Free Software Foundation; either version
  +##  2.0 of the License, or (at your option) any later version.
   ##
  -##  sysUser: System User Information
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this file; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  sysUser.pm: probe for System User Information
   ##
   
   package My::Probe::sysUser;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/sysVM.pm
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 sysVM.pm
  --- ossp-pkg/snmpdx/snmpdx.d/sysVM.pm	9 Sep 2003 13:43:45 -0000	1.6
  +++ ossp-pkg/snmpdx/snmpdx.d/sysVM.pm	10 Sep 2003 15:01:46 -0000	1.7
  @@ -1,28 +1,28 @@
   ##
  -##  snmpdx -- SNMP Daemon Extension
  +##  OSSP snmpdx - SNMP Daemon Extension
   ##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
   ##
  -##  Permission to use, copy, modify, and distribute this software for
  -##  any purpose with or without fee is hereby granted, provided that
  -##  the above copyright notice and this permission notice appear in all
  -##  copies.
  +##  This file is part of OSSP snmpdx, a SNMP daemon extension which
  +##  can be found at http://www.ossp.org/pkg/tool/snmpdx/.
   ##
  -##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  -##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  -##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  -##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  -##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  -##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  -##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  -##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  -##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  -##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  -##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  -##  SUCH DAMAGE.
  +##  This program is free software; you can redistribute it and/or
  +##  modify it under the terms of the GNU General Public  License
  +##  as published by the Free Software Foundation; either version
  +##  2.0 of the License, or (at your option) any later version.
   ##
  -##  sysVM: System Virtual Memory
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this file; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  sysVM.pm: probe for System Virtual Memory
   ##
   
   package My::Probe::sysVM;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 snmpdx.mib
  --- ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib	10 Sep 2003 12:29:07 -0000	1.11
  +++ ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib	10 Sep 2003 15:01:47 -0000	1.12
  @@ -1,3 +1,30 @@
  +--
  +--  OSSP snmpdx - SNMP Daemon Extension
  +--  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  +--  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +--  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
  +--
  +--  This file is part of OSSP snmpdx, a SNMP daemon extension which
  +--  can be found at http://www.ossp.org/pkg/tool/snmpdx/.
  +--
  +--  This program is free software; you can redistribute it and/or
  +--  modify it under the terms of the GNU General Public  License
  +--  as published by the Free Software Foundation; either version
  +--  2.0 of the License, or (at your option) any later version.
  +--
  +--  This program is distributed in the hope that it will be useful,
  +--  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +--  General Public License for more details.
  +--
  +--  You should have received a copy of the GNU General Public License
  +--  along with this file; if not, write to the Free Software
  +--  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +--  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +--
  +--  snmpdx.mib: Management Information Base (MIB)
  +--
  +
   snmpdx DEFINITIONS ::= BEGIN
   
   IMPORTS
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.pl
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 snmpdx.pl
  --- ossp-pkg/snmpdx/snmpdx.pl	10 Sep 2003 14:17:05 -0000	1.7
  +++ ossp-pkg/snmpdx/snmpdx.pl	10 Sep 2003 15:01:44 -0000	1.8
  @@ -1,27 +1,29 @@
   #!@PERL@ -w
   ##
  -##  OSSP snmpdx -- SNMP Daemon Extension
  +##  OSSP snmpdx - SNMP Daemon Extension
   ##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
   ##
  -##  Permission to use, copy, modify, and distribute this software for
  -##  any purpose with or without fee is hereby granted, provided that
  -##  the above copyright notice and this permission notice appear in all
  -##  copies.
  +##  This file is part of OSSP snmpdx, a SNMP daemon extension which
  +##  can be found at http://www.ossp.org/pkg/tool/snmpdx/.
   ##
  -##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  -##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  -##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  -##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  -##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  -##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  -##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  -##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  -##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  -##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  -##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  -##  SUCH DAMAGE.
  +##  This program is free software; you can redistribute it and/or
  +##  modify it under the terms of the GNU General Public  License
  +##  as published by the Free Software Foundation; either version
  +##  2.0 of the License, or (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this file; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  snmpdx.pl: framework program
   ##
   
   #   requirements
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.pod
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 snmpdx.pod
  --- ossp-pkg/snmpdx/snmpdx.pod	3 Sep 2003 15:11:20 -0000	1.1
  +++ ossp-pkg/snmpdx/snmpdx.pod	10 Sep 2003 15:01:44 -0000	1.2
  @@ -1,26 +1,28 @@
   ##
  -##  OSSP snmpdx -- SNMP Daemon Extension
  +##  OSSP snmpdx - SNMP Daemon Extension
   ##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
   ##
  -##  Permission to use, copy, modify, and distribute this software for
  -##  any purpose with or without fee is hereby granted, provided that
  -##  the above copyright notice and this permission notice appear in all
  -##  copies.
  +##  This file is part of OSSP snmpdx, a SNMP daemon extension which
  +##  can be found at http://www.ossp.org/pkg/tool/snmpdx/.
   ##
  -##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  -##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  -##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  -##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  -##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  -##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  -##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  -##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  -##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  -##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  -##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  -##  SUCH DAMAGE.
  +##  This program is free software; you can redistribute it and/or
  +##  modify it under the terms of the GNU General Public  License
  +##  as published by the Free Software Foundation; either version
  +##  2.0 of the License, or (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this file; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  snmpdx.pod: Unix manual page
   ##
   
   =pod
  @@ .

From ossp-cvs-owner@ossp.org  Thu Sep 11 19:59:35 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 28C3A7717F; Thu, 11 Sep 2003 19:59:35 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/platform/ platform.sh
Message-Id: <20030911175935.28C3A7717F@mail.ossp.org>
Date: Thu, 11 Sep 2003 19:59:35 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Sep-2003 19:59:34
  Branch: HEAD                             Handle: 2003091118593400

  Modified files:
    ossp-pkg/platform       platform.sh

  Log:
    improve and bugfix Linux detection

  Summary:
    Revision    Changes     Path
    1.7         +16 -12     ossp-pkg/platform/platform.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/platform/platform.sh
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 platform.sh
  --- ossp-pkg/platform/platform.sh	9 Sep 2003 09:24:32 -0000	1.6
  +++ ossp-pkg/platform/platform.sh	11 Sep 2003 17:59:34 -0000	1.7
  @@ -357,17 +357,20 @@
           v_kern=`echo "${UNAME_RELEASE}" |\
               sed -e 's/^\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/'`
           v_libc=`(strings /lib/libc.so.* | grep '^GLIBC_' | sed -e 's/^GLIBC_//' |\
  -            sort -n | tail -1 | sed -e 's/^\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/') 2>&1`
  +            sort -n | tail -1 | sed -e 's/^\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/') 2>/dev/null`
           ST="GNU/<Linux >${v_libc}/<${v_kern}>"
           if [ -f /etc/lsb-release ]; then
               eval `( . /etc/lsb-release
  -              echo "SC=\"LSB${LSB_VERSION}\""
  -              echo "SP=\"${DISTRIB_ID} ${DISTRIB_RELEASE}\""
  +                echo "SC=\"LSB${LSB_VERSION}\""
  +                echo "SP=\"${DISTRIB_ID} ${DISTRIB_RELEASE}\""
               ) 2>/dev/null`
           fi
           if [ ".$SP" = . ]; then
  -            for tagfile in dummy `cd /etc && echo *[_-]release *[_-]version 2>/dev/null`; do
  -                test ! -f /etc/${tagfile} && continue
  +            for tagfile in x `cd /etc && \
  +                /bin/ls *[_-]release *[_-]version 2>/dev/null | \
  +                sed -e '/redhat-release/d'; echo redhat-release`; do
  +                [ ".${tagfile}" = .x ] && continue
  +                [ ! -f "/etc/${tagfile}" ] && continue
                   n=`echo ${tagfile} | sed -e 's/[_-]release$//' -e 's/[_-]version$//'`
                   v=`cat /etc/${tagfile} | grep '[0-9]' | head -1 |\
                      sed -e 's/^/#/' \
  @@ -379,11 +382,12 @@
                       debian   ) n="Debian[ GNU/Linux]" ;;
                       redhat   ) n="RedHat[ Linux]"     ;;
                       suse     ) n="SuSE[ Linux]"       ;;
  -                    mandrake ) n="Mandrake[ Linux}"   ;;
  +                    mandrake ) n="Mandrake[ Linux]"   ;;
                       gentoo   ) n="Gentoo[ Linux]"     ;;
                       *        ) n="${n}[ GNU/Linux]"   ;;
                   esac
                   SP="$n $v"
  +                break
               done
           fi
           [ ".$SP" = . ] && SP="${ST}"
  @@ -518,27 +522,27 @@
   #   create output string
   output=`echo ":$opt_F" |\
           sed -e "s/^://" \
  -            -e "s;%\[ac\];${AC_V};g" \
  +            -e "s;%\\[ac\\];${AC_V};g" \
               -e "s;%{ac};${AC_N};g" \
               -e "s;%ac;${AC_N};g" \
               -e "s;%<ac>;${AC_C};g" \
  -            -e "s;%\[ap\];${AP_V};g" \
  +            -e "s;%\\[ap\\];${AP_V};g" \
               -e "s;%{ap};${AP_N};g" \
               -e "s;%ap;${AP_N};g" \
               -e "s;%<ap>;${AP_C};g" \
  -            -e "s;%\[at\];${AT_V};g" \
  +            -e "s;%\\[at\\];${AT_V};g" \
               -e "s;%{at};${AT_N};g" \
               -e "s;%at;${AT_N};g" \
               -e "s;%<at>;${AT_C};g" \
  -            -e "s;%\[sc\];${SC_V};g" \
  +            -e "s;%\\[sc\\];${SC_V};g" \
               -e "s;%{sc};${SC_N};g" \
               -e "s;%sc;${SC_N};g" \
               -e "s;%<sc>;${SC_C};g" \
  -            -e "s;%\[sp\];${SP_V};g" \
  +            -e "s;%\\[sp\\];${SP_V};g" \
               -e "s;%{sp};${SP_N};g" \
               -e "s;%sp;${SP_N};g" \
               -e "s;%<sp>;${SP_C};g" \
  -            -e "s;%\[st\];${ST_V};g" \
  +            -e "s;%\\[st\\];${ST_V};g" \
               -e "s;%{st};${ST_N};g" \
               -e "s;%st;${ST_N};g" \
               -e "s;%<st>;${ST_C};g" \
  @@ .

From ossp-cvs-owner@ossp.org  Fri Sep 12 11:25:07 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 99FE477176; Fri, 12 Sep 2003 11:25:06 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/platform/ platform.sh
Message-Id: <20030912092506.99FE477176@mail.ossp.org>
Date: Fri, 12 Sep 2003 11:25:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Sep-2003 11:25:06
  Branch: HEAD                             Handle: 2003091210250600

  Modified files:
    ossp-pkg/platform       platform.sh

  Log:
    RedHat's (optional) lsb-release file contains only LSB_VERSION, so
    make sure we do not set SP to a whitespace, which in turn would
    disable later checks

  Summary:
    Revision    Changes     Path
    1.8         +3  -1      ossp-pkg/platform/platform.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/platform/platform.sh
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 platform.sh
  --- ossp-pkg/platform/platform.sh	11 Sep 2003 17:59:34 -0000	1.7
  +++ ossp-pkg/platform/platform.sh	12 Sep 2003 09:25:06 -0000	1.8
  @@ -362,7 +362,9 @@
           if [ -f /etc/lsb-release ]; then
               eval `( . /etc/lsb-release
                   echo "SC=\"LSB${LSB_VERSION}\""
  -                echo "SP=\"${DISTRIB_ID} ${DISTRIB_RELEASE}\""
  +                if [ ".${DISTRIB_ID}" != . ]; then
  +                    echo "SP=\"${DISTRIB_ID} ${DISTRIB_RELEASE}\""
  +                fi
               ) 2>/dev/null`
           fi
           if [ ".$SP" = . ]; then
  @@ .

From ossp-cvs-owner@ossp.org  Sat Sep 13 20:17:50 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3C4B677183; Sat, 13 Sep 2003 20:17:50 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/platform/ platform.sh
Message-Id: <20030913181750.3C4B677183@mail.ossp.org>
Date: Sat, 13 Sep 2003 20:17:50 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Sep-2003 20:17:49
  Branch: HEAD                             Handle: 2003091319174900

  Modified files:
    ossp-pkg/platform       platform.sh

  Log:
    add more knowledge about particular major Linux distros

  Summary:
    Revision    Changes     Path
    1.9         +9  -6      ossp-pkg/platform/platform.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/platform/platform.sh
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 platform.sh
  --- ossp-pkg/platform/platform.sh	12 Sep 2003 09:25:06 -0000	1.8
  +++ ossp-pkg/platform/platform.sh	13 Sep 2003 18:17:49 -0000	1.9
  @@ -381,12 +381,15 @@
                          -e 's/^#[^0-9]*\([0-9][0-9]*\).*$/\1/' \
                          -e 's/^#.*$//'`
                   case "`util_lower ${n}`" in
  -                    debian   ) n="Debian[ GNU/Linux]" ;;
  -                    redhat   ) n="RedHat[ Linux]"     ;;
  -                    suse     ) n="SuSE[ Linux]"       ;;
  -                    mandrake ) n="Mandrake[ Linux]"   ;;
  -                    gentoo   ) n="Gentoo[ Linux]"     ;;
  -                    *        ) n="${n}[ GNU/Linux]"   ;;
  +                    debian      ) n="Debian[ GNU/Linux]" ;;
  +                    redhat      ) n="RedHat[ Linux]"     ;;
  +                    suse        ) n="SuSE[ Linux]"       ;;
  +                    mandrake    ) n="Mandrake[ Linux]"   ;;
  +                    gentoo      ) n="Gentoo[ Linux]"     ;;
  +                    slackware   ) n="Slackware[ Linux]"  ;;
  +                    turbolinux  ) n="TurboLinux"         ;;
  +                    unitedlinux ) n="UnitedLinux"        ;;
  +                    *           ) n="${n}[ GNU/Linux]"   ;;
                   esac
                   SP="$n $v"
                   break
  @@ .

From ossp-cvs-owner@ossp.org  Mon Sep 15 09:44:34 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D57A077183; Mon, 15 Sep 2003 09:44:33 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ ChangeLog README l2_version.c
Message-Id: <20030915074433.D57A077183@mail.ossp.org>
Date: Mon, 15 Sep 2003 09:44:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   15-Sep-2003 09:44:33
  Branch: HEAD                             Handle: 2003091508443201

  Modified files:
    ossp-pkg/l2             ChangeLog README l2_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.6         +5  -0      ossp-pkg/l2/ChangeLog
    1.12        +1  -1      ossp-pkg/l2/README
    1.8         +9  -9      ossp-pkg/l2/l2_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ChangeLog
  --- ossp-pkg/l2/ChangeLog	30 Jun 2003 15:54:44 -0000	1.5
  +++ ossp-pkg/l2/ChangeLog	15 Sep 2003 07:44:32 -0000	1.6
  @@ -9,6 +9,11 @@
     ChangeLog
     =========
   
  +  Changes between 0.9.2 and 0.9.3 (30-Jun-2003 to 15-Sep-2003)
  +
  +    *) make sure prefix channel does atomar downstream writes
  +       [Ralf S. Engelschall <rse@engelschall.com>]
  +
     Changes between 0.9.1 and 0.9.2 (11-Oct-2002 to 30-Jun-2003)
     
       *) introduce "trunc=" option for file channel; keep support for
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/README
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 README
  --- ossp-pkg/l2/README	30 Jun 2003 14:15:57 -0000	1.11
  +++ ossp-pkg/l2/README	15 Sep 2003 07:44:33 -0000	1.12
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_|_____|
   
     OSSP l2 -- Flexible Logging
  -  Version 0.9.2 (30-Jun-2003)
  +  Version 0.9.3 (15-Sep-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_version.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 l2_version.c
  --- ossp-pkg/l2/l2_version.c	30 Jun 2003 14:15:57 -0000	1.7
  +++ ossp-pkg/l2/l2_version.c	15 Sep 2003 07:44:33 -0000	1.8
  @@ -8,7 +8,7 @@
   #ifndef _L2_VERSION_C_
   #define _L2_VERSION_C_
   
  -#define L2_VERSION 0x009202
  +#define L2_VERSION 0x009203
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _L2_VERSION_C_AS_HEADER_
   
   l2_version_t l2_version = {
  -    0x009202,
  -    "0.9.2",
  -    "0.9.2 (30-Jun-2003)",
  -    "This is OSSP l2, Version 0.9.2 (30-Jun-2003)",
  -    "OSSP l2 0.9.2 (30-Jun-2003)",
  -    "OSSP l2/0.9.2",
  -    "@(#)OSSP l2 0.9.2 (30-Jun-2003)",
  -    "$Id: l2_version.c,v 1.7 2003/06/30 14:15:57 thl Exp $"
  +    0x009203,
  +    "0.9.3",
  +    "0.9.3 (15-Sep-2003)",
  +    "This is OSSP l2, Version 0.9.3 (15-Sep-2003)",
  +    "OSSP l2 0.9.3 (15-Sep-2003)",
  +    "OSSP l2/0.9.3",
  +    "@(#)OSSP l2 0.9.3 (15-Sep-2003)",
  +    "$Id: l2_version.c,v 1.8 2003/09/15 07:44:33 thl Exp $"
   };
   
   #endif /* _L2_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Sep 15 09:45:23 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7086A77185; Mon, 15 Sep 2003 09:45:23 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ l2_version.c
Message-Id: <20030915074523.7086A77185@mail.ossp.org>
Date: Mon, 15 Sep 2003 09:45:23 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   15-Sep-2003 09:45:23
  Branch: HEAD                             Handle: 2003091508452300

  Modified files:
    ossp-pkg/l2             l2_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.9         +0  -0      ossp-pkg/l2/l2_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_version.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 l2_version.c
  --- ossp-pkg/l2/l2_version.c	15 Sep 2003 07:44:33 -0000	1.8
  +++ ossp-pkg/l2/l2_version.c	15 Sep 2003 07:45:23 -0000	1.9
  @@ -39,7 +39,7 @@
       "OSSP l2 0.9.3 (15-Sep-2003)",
       "OSSP l2/0.9.3",
       "@(#)OSSP l2 0.9.3 (15-Sep-2003)",
  -    "$Id: l2_version.c,v 1.8 2003/09/15 07:44:33 thl Exp $"
  +    "$Id: l2_version.c,v 1.9 2003/09/15 07:45:23 thl Exp $"
   };
   
   #endif /* _L2_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Sep 15 10:12:29 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EBA9177185; Mon, 15 Sep 2003 10:12:28 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ l2_ch_prefix.c
Message-Id: <20030915081228.EBA9177185@mail.ossp.org>
Date: Mon, 15 Sep 2003 10:12:28 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   15-Sep-2003 10:12:28
  Branch: HEAD                             Handle: 2003091509122800

  Modified files:
    ossp-pkg/l2             l2_ch_prefix.c

  Log:
    fix function name

  Summary:
    Revision    Changes     Path
    1.25        +1  -1      ossp-pkg/l2/l2_ch_prefix.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_prefix.c
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 l2_ch_prefix.c
  --- ossp-pkg/l2/l2_ch_prefix.c	10 Sep 2003 13:02:17 -0000	1.24
  +++ ossp-pkg/l2/l2_ch_prefix.c	15 Sep 2003 08:12:28 -0000	1.25
  @@ -172,7 +172,7 @@
               return L2_ERR_ARG;
           if ((n = strftime(buf2, sizeof(buf2), buf1, tm)) == 0)
               return L2_ERR_SYS;
  -        n += l2_ut_sprintf(buf2+n, sizeof(buf2)-n, "%s", buf);
  +        n += l2_util_sprintf(buf2+n, sizeof(buf2)-n, "%s", buf);
           downstream = NULL;
           while ((rv = l2_channel_downstream(ch, &downstream)) == L2_OK)
               if ((rv = l2_channel_write(downstream, level, buf2, n)) != L2_OK)
  @@ .

From ossp-cvs-owner@ossp.org  Mon Sep 15 10:12:48 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7C7AA7718E; Mon, 15 Sep 2003 10:12:48 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ l2_version.c
Message-Id: <20030915081248.7C7AA7718E@mail.ossp.org>
Date: Mon, 15 Sep 2003 10:12:48 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   15-Sep-2003 10:12:48
  Branch: HEAD                             Handle: 2003091509124800

  Modified files:
    ossp-pkg/l2             l2_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.10        +0  -0      ossp-pkg/l2/l2_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_version.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 l2_version.c
  --- ossp-pkg/l2/l2_version.c	15 Sep 2003 07:45:23 -0000	1.9
  +++ ossp-pkg/l2/l2_version.c	15 Sep 2003 08:12:48 -0000	1.10
  @@ -39,7 +39,7 @@
       "OSSP l2 0.9.3 (15-Sep-2003)",
       "OSSP l2/0.9.3",
       "@(#)OSSP l2 0.9.3 (15-Sep-2003)",
  -    "$Id: l2_version.c,v 1.9 2003/09/15 07:45:23 thl Exp $"
  +    "$Id: l2_version.c,v 1.10 2003/09/15 08:12:48 thl Exp $"
   };
   
   #endif /* _L2_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Sep 15 10:14:50 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6003C77185; Mon, 15 Sep 2003 10:14:50 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ l2_version.c
Message-Id: <20030915081450.6003C77185@mail.ossp.org>
Date: Mon, 15 Sep 2003 10:14:50 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   15-Sep-2003 10:14:50
  Branch: HEAD                             Handle: 2003091509144900

  Modified files:
    ossp-pkg/l2             l2_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.11        +0  -0      ossp-pkg/l2/l2_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_version.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 l2_version.c
  --- ossp-pkg/l2/l2_version.c	15 Sep 2003 08:12:48 -0000	1.10
  +++ ossp-pkg/l2/l2_version.c	15 Sep 2003 08:14:49 -0000	1.11
  @@ -39,7 +39,7 @@
       "OSSP l2 0.9.3 (15-Sep-2003)",
       "OSSP l2/0.9.3",
       "@(#)OSSP l2 0.9.3 (15-Sep-2003)",
  -    "$Id: l2_version.c,v 1.10 2003/09/15 08:12:48 thl Exp $"
  +    "$Id: l2_version.c,v 1.11 2003/09/15 08:14:49 thl Exp $"
   };
   
   #endif /* _L2_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Sep 15 10:24:03 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2D1C977183; Mon, 15 Sep 2003 10:24:03 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ ChangeLog README fsl_version.c
Message-Id: <20030915082403.2D1C977183@mail.ossp.org>
Date: Mon, 15 Sep 2003 10:24:03 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   15-Sep-2003 10:24:02
  Branch: HEAD                             Handle: 2003091509240200

  Modified files:
    ossp-pkg/fsl            ChangeLog README fsl_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.20        +6  -0      ossp-pkg/fsl/ChangeLog
    1.35        +1  -1      ossp-pkg/fsl/README
    1.21        +9  -9      ossp-pkg/fsl/fsl_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 ChangeLog
  --- ossp-pkg/fsl/ChangeLog	30 Jun 2003 14:30:10 -0000	1.19
  +++ ossp-pkg/fsl/ChangeLog	15 Sep 2003 08:24:02 -0000	1.20
  @@ -8,6 +8,12 @@
   
     CHANGELOG
   
  +  Changes between 1.2.0 and 1.2.1 (15-Sep-2003)
  +
  +    *) include updated lib_l2 v0.9.3 to make sure prefix channel does
  +       atomar downstream writes
  +       [Thomas Lotterer <thomas@lotterer.net]
  +
     Changes between 1.1.0 and 1.2.0 (30-Jun-2003)
   
       *) introduce "trunc=" option for file channel; keep support for
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/README
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 README
  --- ossp-pkg/fsl/README	30 Jun 2003 14:30:10 -0000	1.34
  +++ ossp-pkg/fsl/README	15 Sep 2003 08:24:02 -0000	1.35
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_| |___/_|
    
     OSSP fsl - Faking/Flexible Syslog Library
  -  Version 1.2.0 (30-Jun-2003)
  +  Version 1.2.1 (15-Sep-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl_version.c
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 fsl_version.c
  --- ossp-pkg/fsl/fsl_version.c	30 Jun 2003 14:30:10 -0000	1.20
  +++ ossp-pkg/fsl/fsl_version.c	15 Sep 2003 08:24:02 -0000	1.21
  @@ -8,7 +8,7 @@
   #ifndef _FSL_VERSION_C_
   #define _FSL_VERSION_C_
   
  -#define FSL_VERSION 0x102200
  +#define FSL_VERSION 0x102201
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _FSL_VERSION_C_AS_HEADER_
   
   fsl_version_t fsl_version = {
  -    0x102200,
  -    "1.2.0",
  -    "1.2.0 (30-Jun-2003)",
  -    "This is OSSP fsl, Version 1.2.0 (30-Jun-2003)",
  -    "OSSP fsl 1.2.0 (30-Jun-2003)",
  -    "OSSP fsl/1.2.0",
  -    "@(#)OSSP fsl 1.2.0 (30-Jun-2003)",
  -    "$Id: fsl_version.c,v 1.20 2003/06/30 14:30:10 thl Exp $"
  +    0x102201,
  +    "1.2.1",
  +    "1.2.1 (15-Sep-2003)",
  +    "This is OSSP fsl, Version 1.2.1 (15-Sep-2003)",
  +    "OSSP fsl 1.2.1 (15-Sep-2003)",
  +    "OSSP fsl/1.2.1",
  +    "@(#)OSSP fsl 1.2.1 (15-Sep-2003)",
  +    "$Id: fsl_version.c,v 1.21 2003/09/15 08:24:02 thl Exp $"
   };
   
   #endif /* _FSL_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Wed Sep 17 19:28:02 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F24B676FA3; Wed, 17 Sep 2003 19:28:01 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/com/ sponsors.wml
Message-Id: <20030917172801.F24B676FA3@mail.ossp.org>
Date: Wed, 17 Sep 2003 19:28:01 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   17-Sep-2003 19:28:01
  Branch: HEAD                             Handle: 2003091718280100

  Modified files:
    ossp-web/com            sponsors.wml

  Log:
    give credit to ABAKUS Internet Marketing for their donation

  Summary:
    Revision    Changes     Path
    1.9         +1  -0      ossp-web/com/sponsors.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/com/sponsors.wml
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 sponsors.wml
  --- ossp-web/com/sponsors.wml	17 Jul 2003 13:54:00 -0000	1.8
  +++ ossp-web/com/sponsors.wml	17 Sep 2003 17:28:01 -0000	1.9
  @@ -49,5 +49,6 @@
   
   <ul>
      <li><a href="mailto:alby@thirteen.net"><b>Albert Lash</b></a> (2002)
  +   <li><a href="http://www.abakus-internet-marketing.de/"><b>ABAKUS Internet Marketing</b></a> (2003)
   </ul>
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Sep 19 12:32:45 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EFDD876FE4; Fri, 19 Sep 2003 12:32:44 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ ChangeLog README VERSION snmpdx.pl
Message-Id: <20030919103244.EFDD876FE4@mail.ossp.org>
Date: Fri, 19 Sep 2003 12:32:44 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-Sep-2003 12:32:44
  Branch: HEAD                             Handle: 2003091911324400

  Modified files:
    ossp-pkg/snmpdx         ChangeLog README VERSION snmpdx.pl

  Log:
    Fix location of net-snmp tools by correctly substituting the bindir
    location.

  Summary:
    Revision    Changes     Path
    1.12        +4  -0      ossp-pkg/snmpdx/ChangeLog
    1.10        +1  -1      ossp-pkg/snmpdx/README
    1.8         +1  -1      ossp-pkg/snmpdx/VERSION
    1.9         +1  -1      ossp-pkg/snmpdx/snmpdx.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 ChangeLog
  --- ossp-pkg/snmpdx/ChangeLog	10 Sep 2003 15:01:44 -0000	1.11
  +++ ossp-pkg/snmpdx/ChangeLog	19 Sep 2003 10:32:44 -0000	1.12
  @@ -11,6 +11,10 @@
   
     Changes between 0.2.6 and 0.2.7 (10-Sep-2003 to 10-Sep-2003):
   
  +   *) Fix location of net-snmp tools by correctly substituting
  +      the bindir location.
  +      [Ralf S. Engelschall]
  +
      *) More source tree cleanups and polishing.
         [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/README
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 README
  --- ossp-pkg/snmpdx/README	10 Sep 2003 15:01:44 -0000	1.9
  +++ ossp-pkg/snmpdx/README	19 Sep 2003 10:32:44 -0000	1.10
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/_| |_|_| |_| |_| .__/ \__,_/_/\_\
                                                          |_|
     OSSP snmpdx - SNMP Daemon Extension
  -  Version 0.2.6 (10-Sep-2003)
  +  Version 0.2.7 (19-Sep-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/VERSION
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 VERSION
  --- ossp-pkg/snmpdx/VERSION	10 Sep 2003 14:17:56 -0000	1.7
  +++ ossp-pkg/snmpdx/VERSION	19 Sep 2003 10:32:44 -0000	1.8
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP snmpdx (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP snmpdx, Version 0.2.6 (10-Sep-2003)
  +  This is OSSP snmpdx, Version 0.2.7 (19-Sep-2003)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.pl
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 snmpdx.pl
  --- ossp-pkg/snmpdx/snmpdx.pl	10 Sep 2003 15:01:44 -0000	1.8
  +++ ossp-pkg/snmpdx/snmpdx.pl	19 Sep 2003 10:32:44 -0000	1.9
  @@ -486,7 +486,7 @@
       'get'       => 0,
       'next'      => 0,
       'set'       => 0,
  -    'bindir'    => "/cw/bin",
  +    'bindir'    => "@bindir@",
       'probedir'  => "@libexecdir@/snmpdx",
       'probename' => "*",
       'mibdir'    => "@datadir@/snmpdx:@snmpmibdir@",
  @@ .

From ossp-cvs-owner@ossp.org  Fri Sep 19 12:33:14 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6871876FEA; Fri, 19 Sep 2003 12:33:14 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ Makefile.in
Message-Id: <20030919103314.6871876FEA@mail.ossp.org>
Date: Fri, 19 Sep 2003 12:33:14 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-Sep-2003 12:33:14
  Branch: HEAD                             Handle: 2003091911331400

  Modified files:
    ossp-pkg/snmpdx         Makefile.in

  Log:
    also subst bindir

  Summary:
    Revision    Changes     Path
    1.12        +1  -0      ossp-pkg/snmpdx/Makefile.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 Makefile.in
  --- ossp-pkg/snmpdx/Makefile.in	10 Sep 2003 15:01:44 -0000	1.11
  +++ ossp-pkg/snmpdx/Makefile.in	19 Sep 2003 10:33:14 -0000	1.12
  @@ -59,6 +59,7 @@
   		-e "s;#!\@PERL\@;#!$(PERL);" \
   		-e "s;\@V\@;$$V;" \
   		-e "s;\@D\@;$$D;" \
  +		-e "s;\@bindir\@;$(bindir);" \
   		-e "s;\@sysconfdir\@;$(sysconfdir);" \
   		-e "s;\@libexecdir\@;$(libexecdir);" \
   		-e "s;\@datadir\@;$(datadir);" \
  @@ .

From ossp-cvs-owner@ossp.org  Sat Sep 20 12:11:23 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5D00676FF2; Sat, 20 Sep 2003 12:11:23 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/snmpdx.d/ sysVM.pm
Message-Id: <20030920101123.5D00676FF2@mail.ossp.org>
Date: Sat, 20 Sep 2003 12:11:23 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Sep-2003 12:11:23
  Branch: HEAD                             Handle: 2003092011112200

  Modified files:
    ossp-pkg/snmpdx/snmpdx.d
                            sysVM.pm

  Log:
    some code refactoring and additional commenting before I try to fix
    the FreeBSD memory statistics

  Summary:
    Revision    Changes     Path
    1.8         +141 -165   ossp-pkg/snmpdx/snmpdx.d/sysVM.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/sysVM.pm
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 sysVM.pm
  --- ossp-pkg/snmpdx/snmpdx.d/sysVM.pm	10 Sep 2003 15:01:46 -0000	1.7
  +++ ossp-pkg/snmpdx/snmpdx.d/sysVM.pm	20 Sep 2003 10:11:22 -0000	1.8
  @@ -37,324 +37,300 @@
       my ($self, $obj) = @_;
   
       if ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i) {
  -        # sysVMRamMax   "/sbin/sysctl -n hw.physmem", convert bytes to MB
  -        # sysVMRamUsed  sysVMRamMax - sysVMRamFree
  -        # sysVMRamFree  "/usr/bin/vmstat", avm, convert KB to MB
  -        #
  +        ##
  +        ##  FreeBSD 4/5
  +        ##
  +        ##  sysVMRamMax   "/sbin/sysctl -n hw.physmem", convert bytes to MB
  +        ##  sysVMRamUsed  sysVMRamMax - sysVMRamFree
  +        ##  sysVMRamFree  "/usr/bin/vmstat", avm, convert KB to MB
  +        ##  sysVMSwapMax  "/usr/sbin/swapinfo -k", 1K-blocks, last line, convert KB to MB
  +        ##  sysVMSwapUsed "/usr/sbin/swapinfo -k", Used, last line, convert KB to MB
  +        ##  sysVMSwapFree sysVMSwapMax - sysVMSwapUsed
  +        ##  sysVMActivity "/usr/bin/vmstat", add pi and po column
  +        ##
           if ($obj->{-name} =~ m/\.sysVMRam(Max|Used|Free)$/) {
               my $sysVMRamMax  = undef;
               my $sysVMRamUsed = undef;
               my $sysVMRamFree = undef;
   
  -            #   local workspace
  -            my $out; my $raw; my $n2i; my @dat;
  -
  -            #   sysVMRamMax
  -            $out = $self->{-ctx}->{-sys}->run("/sbin/sysctl -n hw.physmem", "forever");
  -            $raw = $out->{-stdout};
  +            #   determine sysVMRamMax
  +            my $out = $self->{-ctx}->{-sys}->run("/sbin/sysctl -n hw.physmem", "forever");
  +            my $raw = $out->{-stdout};
               if ($raw =~ m/^(\d+)$/) {
  -                $sysVMRamMax = int($1 / 1024 / 1024);
  +                $sysVMRamMax = int($1 / (1024*1024));
               }
   
  -            #   sysVMRamFree
  +            #   determine sysVMRamFree
               $out = $self->{-ctx}->{-sys}->run("/usr/bin/vmstat", "1m");
               $raw = $out->{-stdout};
  -            $n2i = {};
  +            my $n2i = {};
               if ($raw =~ m/^[^\n]*\n *([^\n]*\bavm\b[^\n]*)\n *([^\n]*)\n$/s) {
  -                $n2i = &mkn2i(split / +/, $1);
  +                $n2i = &mkn2i(split(/\s+/, $1));
               }
  -            if (defined $n2i->{avm}) {
  -                @dat = split(/ +/, $2);
  +            if (defined($n2i->{avm})) {
  +                my @dat = split(/\s+/, $2);
                   $sysVMRamFree = int(@dat[$n2i->{avm}] / 1024);
               }
   
  -            #   sysVMRamUsed
  -            if (defined $sysVMRamMax and defined $sysVMRamFree) {
  +            #   determine sysVMRamUsed
  +            if (defined($sysVMRamMax) and defined($sysVMRamFree)) {
                   $sysVMRamUsed = $sysVMRamMax - $sysVMRamFree;
               }
   
  +            #   provide result
               $obj->{-value} = $sysVMRamMax  if ($obj->{-name} =~ m/\.sysVMRamMax$/);
               $obj->{-value} = $sysVMRamUsed if ($obj->{-name} =~ m/\.sysVMRamUsed$/);
               $obj->{-value} = $sysVMRamFree if ($obj->{-name} =~ m/\.sysVMRamFree$/);
           }
  -
  -        # sysVMSwapMax  "/usr/sbin/swapinfo -k", 1K-blocks, last line, convert KB to MB
  -        # sysVMSwapUsed "/usr/sbin/swapinfo -k", Used, last line, convert KB to MB
  -        # sysVMSwapFree sysVMSwapMax - sysVMSwapUsed
  -        #
  -        if ($obj->{-name} =~ m/\.sysVMSwap(Max|Used|Free)$/) {
  +        elsif ($obj->{-name} =~ m/\.sysVMSwap(Max|Used|Free)$/) {
               my $sysVMSwapMax  = undef;
               my $sysVMSwapUsed = undef;
               my $sysVMSwapFree = undef;
   
  -            #   local workspace
  -            my $out; my $raw; my $n2i; my @dat;
  -
  -            #   sysVMSwapMax, sysVMSwapUsed
  -            $out = $self->{-ctx}->{-sys}->run("/usr/sbin/swapinfo -k", "1m");
  -            $raw = $out->{-stdout};
  -            $n2i = {};
  +            #   determine sysVMSwapMax and sysVMSwapUsed
  +            my $out = $self->{-ctx}->{-sys}->run("/usr/sbin/swapinfo -k", "1m");
  +            my $raw = $out->{-stdout};
  +            my $n2i = {};
               if ($raw =~ m/^\s*([^\n]*\b1K-blocks[^\n]*\bUsed[^\n]*).*\n([^\n]+)$/s) {
  -                $n2i = &mkn2i(split / +/, $1);
  +                $n2i = &mkn2i(split(/\s+/, $1));
               }
  -            @dat = split(/ +/, $2);
  -            if (defined $n2i->{_1K_blocks}) {
  -                $sysVMSwapMax  = int(@dat[$n2i->{_1K_blocks}] / 1024)
  +            my @dat = split(/\s+/, $2);
  +            if (defined($n2i->{_1K_blocks})) {
  +                $sysVMSwapMax = int(@dat[$n2i->{_1K_blocks}] / 1024)
               }
  -            if (defined $n2i->{Used}) {
  +            if (defined($n2i->{Used})) {
                   $sysVMSwapUsed = int(@dat[$n2i->{Used}] / 1024)
               }
   
  -            #   sysVMSwapFree
  -            if (defined $sysVMSwapMax and defined $sysVMSwapUsed) {
  +            #   determine sysVMSwapFree
  +            if (defined($sysVMSwapMax) and defined($sysVMSwapUsed)) {
                   $sysVMSwapFree = $sysVMSwapMax - $sysVMSwapUsed;
               }
   
  +            #   provide result
               $obj->{-value} = $sysVMSwapMax  if ($obj->{-name} =~ m/\.sysVMSwapMax$/);
               $obj->{-value} = $sysVMSwapUsed if ($obj->{-name} =~ m/\.sysVMSwapUsed$/);
               $obj->{-value} = $sysVMSwapFree if ($obj->{-name} =~ m/\.sysVMSwapFree$/);
           }
  -
  -        # sysVMActivity "/usr/bin/vmstat", add pi and po column
  -        #
  -        if ($obj->{-name} =~ m/\.sysVMActivity$/) {
  +        elsif ($obj->{-name} =~ m/\.sysVMActivity$/) {
               my $sysVMActivity = undef;
   
  -            #   local workspace
  -            my $out; my $raw; my $n2i; my @dat;
  -
  -            $out = $self->{-ctx}->{-sys}->run("/usr/bin/vmstat", "1m");
  -            $raw = $out->{-stdout};
  -            $n2i = {};
  +            my $out = $self->{-ctx}->{-sys}->run("/usr/bin/vmstat", "1m");
  +            my $raw = $out->{-stdout};
  +            my $n2i = {};
               if ($raw =~ m/^[^\n]*\n *([^\n]*(\bp[io]\b[^\n]*){2})\n *([^\n]*)\n$/s) {
                   $n2i = &mkn2i(split / +/, $1);
               }
  -            if (defined $n2i->{pi} and defined $n2i->{po}) {
  -                @dat = split(/ +/, $3);
  +            if (defined($n2i->{pi}) and defined($n2i->{po})) {
  +                my @dat = split(/ +/, $3);
                   $sysVMActivity = @dat[$n2i->{pi}] + @dat[$n2i->{po}];
               }
               $obj->{-value} = $sysVMActivity;
           }
       }
       elsif ($self->{-ctx}->{-platform}->id() =~ m/Linux/i) {
  -        # sysVMRamMax   "/bin/cat /proc/meminfo", MemTotal, convert KB to MB
  -        # sysVMRamUsed  "/bin/cat /proc/meminfo", MemTotal-Buffers-Cached-MemFree, convert KB to MB
  -        # sysVMRamFree  sysVMRamMax - sysVMRamUsed
  -        #
  -        # FIXME sysVMRamMax does not include the kernel and some of its structures so
  -        # FIXME             it is not pyhsical RAM, see dmesg | egrep '^Memory:'
  -        # FIXME /bin/cat is used here but could be replaced by native perl code to improve performance
  -        #
  +        ##
  +        ##  Linux 2.2/2.4
  +        ##
  +        ##  sysVMRamMax   "/bin/cat /proc/meminfo", MemTotal, convert KB to MB
  +        ##  sysVMRamUsed  "/bin/cat /proc/meminfo", MemTotal-Buffers-Cached-MemFree, convert KB to MB
  +        ##  sysVMRamFree  sysVMRamMax - sysVMRamUsed
  +        ##  sysVMSwapMax  "/bin/cat /proc/meminfo", SwapTotal, convert KB to MB
  +        ##  sysVMSwapUsed sysVMSwapMax - sysVMSwapFree
  +        ##  sysVMSwapFree "/bin/cat /proc/meminfo", SwapFree, convert KB to MB
  +        ##  sysVMActivity "/usr/bin/vmstat", add si and so column
  +        ##
  +        ##  FIXME: sysVMRamMax does not include the kernel and some of
  +        ##  its structures so it is not pyhsical RAM, see dmesg | egrep
  +        ##  '^Memory:'. Additionally, /bin/cat is used here but could be
  +        ##  replaced by native Perl code to improve performance...
  +        ##
           if ($obj->{-name} =~ m/\.sysVMRam(Max|Used|Free)$/) {
               my $sysVMRamMax  = undef;
               my $sysVMRamUsed = undef;
               my $sysVMRamFree = undef;
   
  -            #   local workspace
  -            my $out; my $raw; my $n2i; my @dat; my $tmp;
  -
  -            #   sysVMRamMax, sysVMRamUsed
  -            $out = $self->{-ctx}->{-sys}->run("/bin/cat /proc/meminfo", "1m");
  -            $raw = $out->{-stdout};
  -            $tmp = {};
  +            #   determine sysVMRamMax and sysVMRamUsed
  +            my $out = $self->{-ctx}->{-sys}->run("/bin/cat /proc/meminfo", "1m");
  +            my $raw = $out->{-stdout};
  +            my $tmp = {};
               $tmp->{MemTotal} = $1 if ($raw =~ m/\nMemTotal:[^\n]*\b(\d+)\b[^\n]*kB\n/s);
               $tmp->{Buffers}  = $1 if ($raw =~ m/\nBuffers:[^\n]*\b(\d+)\b[^\n]*kB\n/s);
               $tmp->{Cached}   = $1 if ($raw =~ m/\nCached:[^\n]*\b(\d+)\b[^\n]*kB\n/s);
               $tmp->{MemFree}  = $1 if ($raw =~ m/\nMemFree:[^\n]*\b(\d+)\b[^\n]*kB\n/s);
  -            if (defined $tmp->{MemTotal}) {
  +            if (defined($tmp->{MemTotal})) {
                   $sysVMRamMax = int($tmp->{MemTotal} / 1024);
               }
  -
  -            if (    defined $tmp->{MemTotal}
  -                and defined $tmp->{Buffers}
  -                and defined $tmp->{Cached}
  -                and defined $tmp->{MemFree}
  -                   ) {
  -                $sysVMRamUsed  = int ((  $tmp->{MemTotal} 
  -                                       - $tmp->{Buffers} 
  -                                       - $tmp->{Cached} 
  -                                       - $tmp->{MemFree}
  -                                       ) / 1024 );
  +            if (    defined($tmp->{MemTotal})
  +                and defined($tmp->{Buffers})
  +                and defined($tmp->{Cached})
  +                and defined($tmp->{MemFree}) ) {
  +                $sysVMRamUsed = int ((  $tmp->{MemTotal} 
  +                                      - $tmp->{Buffers} 
  +                                      - $tmp->{Cached} 
  +                                      - $tmp->{MemFree} ) / 1024 );
               }
   
  -            #   sysVMRamFree
  +            #   determine sysVMRamFree
               if (defined $sysVMRamMax and defined $sysVMRamUsed) {
                   $sysVMRamFree = $sysVMRamMax - $sysVMRamUsed;
               }
   
  +            #   provide result
               $obj->{-value} = $sysVMRamMax  if ($obj->{-name} =~ m/\.sysVMRamMax$/);
               $obj->{-value} = $sysVMRamUsed if ($obj->{-name} =~ m/\.sysVMRamUsed$/);
               $obj->{-value} = $sysVMRamFree if ($obj->{-name} =~ m/\.sysVMRamFree$/);
           }
  -
  -        # sysVMSwapMax  "/bin/cat /proc/meminfo", SwapTotal, convert KB to MB
  -        # sysVMSwapUsed sysVMSwapMax - sysVMSwapFree
  -        # sysVMSwapFree "/bin/cat /proc/meminfo", SwapFree, convert KB to MB
  -        #
  -        if ($obj->{-name} =~ m/\.sysVMSwap(Max|Used|Free)$/) {
  +        elsif ($obj->{-name} =~ m/\.sysVMSwap(Max|Used|Free)$/) {
               my $sysVMSwapMax  = undef;
               my $sysVMSwapUsed = undef;
               my $sysVMSwapFree = undef;
   
  -            #   local workspace
  -            my $out; my $raw; my $n2i; my @dat;
  -
  -            #   sysVMSwapMax, sysVMSwapFree
  -            $out = $self->{-ctx}->{-sys}->run("/bin/cat /proc/meminfo", "1m");
  -            $raw = $out->{-stdout};
  +            #   determine sysVMSwapMax and sysVMSwapFree
  +            my $out = $self->{-ctx}->{-sys}->run("/bin/cat /proc/meminfo", "1m");
  +            my $raw = $out->{-stdout};
               if ($raw =~ m/\nSwapTotal:[^\n]*\b(\d+)\b[^\n]*kB\n/s) {
  -                $sysVMSwapMax  = int($1 / 1024);
  +                $sysVMSwapMax = int($1 / 1024);
               }
               if ($raw =~ m/\nSwapFree:[^\n]*\b(\d+)\b[^\n]*kB\n/s) {
                   $sysVMSwapFree = int($1 / 1024);
               }
   
  -            #   sysVMSwapUsed
  -            if (defined $sysVMSwapMax and defined $sysVMSwapFree) {
  +            #   determine sysVMSwapUsed
  +            if (defined($sysVMSwapMax) and defined($sysVMSwapFree)) {
                   $sysVMSwapUsed = $sysVMSwapMax - $sysVMSwapFree;
               }
   
  +            #   provide result
               $obj->{-value} = $sysVMSwapMax  if ($obj->{-name} =~ m/\.sysVMSwapMax$/);
               $obj->{-value} = $sysVMSwapUsed if ($obj->{-name} =~ m/\.sysVMSwapUsed$/);
               $obj->{-value} = $sysVMSwapFree if ($obj->{-name} =~ m/\.sysVMSwapFree$/);
           }
  -
  -        # sysVMActivity "/usr/bin/vmstat", add si and so column
  -        #
  -        if ($obj->{-name} =~ m/\.sysVMActivity$/) {
  +        elsif ($obj->{-name} =~ m/\.sysVMActivity$/) {
               my $sysVMActivity = undef;
   
  -            #   local workspace
  -            my $out; my $raw; my $n2i; my @dat;
  -
  -            $out = $self->{-ctx}->{-sys}->run("/usr/bin/vmstat", "1m");
  -            $raw = $out->{-stdout};
  -            $n2i = {};
  +            my $out = $self->{-ctx}->{-sys}->run("/usr/bin/vmstat", "1m");
  +            my $raw = $out->{-stdout};
  +            my $n2i = {};
               if ($raw =~ m/^[^\n]*\n *([^\n]*(\bs[io]\b[^\n]*){2})\n *([^\n]*)\n$/s) {
  -                $n2i = &mkn2i(split / +/, $1) if (not defined $n2i->{sr});
  +                $n2i = &mkn2i(split(/\s+/, $1)) if (not defined($n2i->{sr}));
               }
  -            if (defined $n2i->{si} and defined $n2i->{so}) {
  -                my @dat = split(/ +/, $3);
  +            if (defined($n2i->{si}) and defined($n2i->{so})) {
  +                my @dat = split(/\s+/, $3);
                   $sysVMActivity = @dat[$n2i->{si}] + @dat[$n2i->{so}];
               }
               $obj->{-value} = $sysVMActivity;
           }
       }
       elsif ($self->{-ctx}->{-platform}->id() =~ m/SunOS/i) {
  -        # sysVMRamMax   "/usr/platform/$arch/sbin/prtdiag", Memory size
  -        # sysVMRamUsed  sysVMRamMax - sysVMRamFree
  -        # sysVMRamFree  "/bin/pagesize" * "/bin/sar -r 1 1", freemem, convert bytes to MB
  -        #
  +        ##
  +        ##  Sun Solaris 2.x (SunOS 5.x)
  +        ##
  +        ##  sysVMRamMax   "/usr/platform/$arch/sbin/prtdiag", Memory size
  +        ##  sysVMRamUsed  sysVMRamMax - sysVMRamFree
  +        ##  sysVMRamFree  "/bin/pagesize" * "/bin/sar -r 1 1", freemem, convert bytes to MB
  +        ##  sysVMSwapMax  "swap -l", egrep ^/ and accumulate, convert 512byte blocks to MB
  +        ##  sysVMSwapUsed sysVMSwapMax - sysVMSwapFree
  +        ##  sysVMSwapFree "swap -l", egrep ^/ and accumulate, convert 512byte blocks to MB
  +        ##  sysVMActivity "/bin/vmstat", sr column
  +        ##
           if ($obj->{-name} =~ m/\.sysVMRam(Max|Used|Free)$/) {
               my $sysVMRamMax  = undef;
               my $sysVMRamUsed = undef;
               my $sysVMRamFree = undef;
   
  -            #   local workspace
  -            my $out; my $raw; my $n2i; my @dat; my $arch; my $pagesize; my $tmp;
  +            #   determine architecture
  +            my $arch = $self->{-ctx}->{-platform}->arch();
   
  -            #   initialize arch; get or assume pagesize(1)
  -            $arch = $self->{-ctx}->{-platform}->arch();
  -            $out = $self->{-ctx}->{-sys}->run("/bin/pagesize", "forever");
  -            $raw = $out->{-stdout};
  -            $pagesize = 4096;
  +            #   determine page size
  +            my $out = $self->{-ctx}->{-sys}->run("/bin/pagesize", "forever");
  +            my $raw = $out->{-stdout};
  +            my $pagesize = 4096;
               if ($raw =~ m/^(\d+)$/) {
                   $pagesize = $1;
               }
   
  -            #   sysVMRamMax
  +            #   determine sysVMRamMax
               $out = $self->{-ctx}->{-sys}->run("/usr/platform/$arch/sbin/prtdiag -v", "1m");
               $raw = $out->{-stdout};
               if ($raw =~ m/\nMemory size: (\d+) Megabytes/s) {
                   $sysVMRamMax = $1;
               }
   
  -            #   sysVMRamFree
  +            #   determine sysVMRamFree
               $out = $self->{-ctx}->{-sys}->run("/bin/sar -r 1 1", "1m");
               $raw = $out->{-stdout};
  -            $n2i = {};
  +            my $n2i = {};
               if ($raw =~ m/^.*\n([^\n]*\bfreemem[^\n]*)\n(.*)$/s) {
  -                $n2i = &mkn2i(split / +/, $1);
  +                $n2i = &mkn2i(split(/\s+/, $1));
               }
  -            @dat = split(/ +/, $2);
  -            if (defined $n2i->{freemem}) {
  +            my @dat = split(/\s+/, $2);
  +            if (defined($n2i->{freemem})) {
                   $tmp = @dat[$n2i->{freemem}];
               }
  -            $sysVMRamFree = int($tmp * $pagesize / 1024 / 1024) if (defined $tmp);
  +            $sysVMRamFree = int($tmp * $pagesize / (1024*1024)) if (defined($tmp));
   
  -            #   sysVMRamUsed
  -            if (defined $sysVMRamMax and defined $sysVMRamFree) {
  +            #   determine sysVMRamUsed
  +            if (defined($sysVMRamMax) and defined($sysVMRamFree)) {
                   $sysVMRamUsed = $sysVMRamMax - $sysVMRamFree;
               }
   
  +            #   provide result
               $obj->{-value} = $sysVMRamMax  if ($obj->{-name} =~ m/\.sysVMRamMax$/);
               $obj->{-value} = $sysVMRamUsed if ($obj->{-name} =~ m/\.sysVMRamUsed$/);
               $obj->{-value} = $sysVMRamFree if ($obj->{-name} =~ m/\.sysVMRamFree$/);
           }
  -
  -        # sysVMSwapMax  "swap -l", egrep ^/ and accumulate, convert 512byte blocks to MB
  -        # sysVMSwapUsed sysVMSwapMax - sysVMSwapFree
  -        # sysVMSwapFree "swap -l", egrep ^/ and accumulate, convert 512byte blocks to MB
  -        #
  -        if ($obj->{-name} =~ m/\.sysVMSwap(Max|Used|Free)$/) {
  +        elsif ($obj->{-name} =~ m/\.sysVMSwap(Max|Used|Free)$/) {
               my $sysVMSwapMax  = undef;
               my $sysVMSwapUsed = undef;
               my $sysVMSwapFree = undef;
   
  -            #   local workspace
  -            my $out; my $raw; my $n2i; my @dat; my $tmpMax; my $tmpFree;
  -
  -            #   sysVMSwapMax, sysVMSwapFree
  -            $out = $self->{-ctx}->{-sys}->run("/usr/sbin/swap -l", "1m");
  -            $raw = $out->{-stdout};
  -            $n2i = {};
  +            #   determine sysVMSwapMax, sysVMSwapFree
  +            my $out = $self->{-ctx}->{-sys}->run("/usr/sbin/swap -l", "1m");
  +            my $raw = $out->{-stdout};
  +            my $n2i = {};
               if ($raw =~ m/^\s*([^\n]*\bblocks[^\n]*\bfree[^\n]*)\n(.*)$/s) {
  -                $n2i = &mkn2i(split / +/, $1) if (scalar keys %$n2i == 0);
  +                $n2i = &mkn2i(split(/\s+/, $1)) if (scalar(keys(%{$n2i})) == 0);
               }
  -            $tmpMax = undef;
  -            $tmpFree = undef;
  -            foreach my $r (split /\n/, $2) {
  +            my $tmpMax  = undef;
  +            my $tmpFree = undef;
  +            foreach my $r (split(/\n/, $2)) {
                   if ($r =~ m/^\//) {
  -                    @dat = split(/ +/, $r);
  -                    if (defined $n2i->{blocks}) {
  -                        $tmpMax  = 0 if (not defined $tmpMax);
  +                    my @dat = split(/\s+/, $r);
  +                    if (defined($n2i->{blocks})) {
  +                        $tmpMax  = 0 if (not defined($tmpMax));
                           $tmpMax  += @dat[$n2i->{blocks}];
                       }
  -                    if (defined $n2i->{free}) {
  -                        $tmpFree = 0 if (not defined $tmpFree);
  +                    if (defined($n2i->{free})) {
  +                        $tmpFree = 0 if (not defined($tmpFree));
                           $tmpFree += @dat[$n2i->{free}];
                       }
                   }
               }
  -            $sysVMSwapMax  = int($tmpMax  * 512 / 1024 / 1024) if (defined $tmpMax);
  -            $sysVMSwapFree = int($tmpFree * 512 / 1024 / 1024) if (defined $tmpFree);
  +            $sysVMSwapMax  = int($tmpMax  * 512 / 1024 / 1024) if (defined($tmpMax));
  +            $sysVMSwapFree = int($tmpFree * 512 / 1024 / 1024) if (defined($tmpFree));
   
  -            #   sysVMSwapUsed
  -            if (defined $sysVMSwapMax and defined $sysVMSwapFree) {
  +            #   determine sysVMSwapUsed
  +            if (defined($sysVMSwapMax) and defined($sysVMSwapFree)) {
                   $sysVMSwapUsed = $sysVMSwapMax - $sysVMSwapFree;
               }
   
  +            #   provide result
               $obj->{-value} = $sysVMSwapMax  if ($obj->{-name} =~ m/\.sysVMSwapMax$/);
               $obj->{-value} = $sysVMSwapUsed if ($obj->{-name} =~ m/\.sysVMSwapUsed$/);
               $obj->{-value} = $sysVMSwapFree if ($obj->{-name} =~ m/\.sysVMSwapFree$/);
           }
  -
  -        # sysVMActivity "/bin/vmstat", sr column
  -        #
  -        if ($obj->{-name} =~ m/\.sysVMActivity$/) {
  +        elsif ($obj->{-name} =~ m/\.sysVMActivity$/) {
               my $sysVMActivity = undef;
   
  -            #   local workspace
  -            my $out; my $raw; my $n2i; my @dat;
  -
  -            $out = $self->{-ctx}->{-sys}->run("/bin/vmstat", "1m");
  -            $raw = $out->{-stdout};
  -            $n2i = {};
  +            my $out = $self->{-ctx}->{-sys}->run("/bin/vmstat", "1m");
  +            my $raw = $out->{-stdout};
  +            my $n2i = {};
               if ($raw =~ m/^[^\n]*\n *([^\n]*\bsr\b[^\n]*)\n *([^\n]*)\n$/s) {
  -                $n2i = &mkn2i(split / +/, $1) if (not defined $n2i->{sr});
  +                $n2i = &mkn2i(split(/\s+/, $1)) if (not defined($n2i->{sr}));
               }
               if (defined $n2i->{sr}) {
  -                @dat = split(/ +/, $2);
  +                my @dat = split(/\s+/, $2);
                   $sysVMActivity = @dat[$n2i->{sr}];
               }
               $obj->{-value} = $sysVMActivity;
  @@ -363,7 +339,7 @@
       return;
   }
   
  -# name to index
  +#   table row name to index mapping
   sub mkn2i ($) {
       my (@name) = @_;
       my $rc = {};
  @@ .

From ossp-cvs-owner@ossp.org  Sat Sep 20 12:33:18 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2E86676FF2; Sat, 20 Sep 2003 12:33:18 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/snmpdx.d/ sysVM.pm
Message-Id: <20030920103318.2E86676FF2@mail.ossp.org>
Date: Sat, 20 Sep 2003 12:33:18 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Sep-2003 12:33:18
  Branch: HEAD                             Handle: 2003092011331700

  Modified files:
    ossp-pkg/snmpdx/snmpdx.d
                            sysVM.pm

  Log:
    Reimplement the FreeBSD sysVMRam* variables because the vmstat->avm
    is totally bogus and cannot be used for RAM usage determination at
    all. Instead calculate the stuff through the only reliable source: the
    vm.stats.vm* sysctl(8) variables which directly came from the kernel
    variables of the VM subsystem. The used calculation in sysVM.pm is now
    derived from a larger basic research on this topic resulting in a script
    which gives this output:
    
    SYSTEM MEMORY INFORMATION:
    mem_wire:         179642368 (    171MB) [  8%] Wired: disabled for paging out
    mem_active:  +    158838784 (    151MB) [  7%] Active: recently referenced
    mem_inactive:+   1147584512 (   1094MB) [ 54%] Inactive: recently not referenced
    mem_cache:   +     71606272 (     68MB) [  3%] Cached: almost avail. for allocation
    mem_free:    +    549912576 (    524MB) [ 26%] Free: fully available for allocation
    mem_gap_vm:  +       364544 (      0MB) [  0%] Memory gap: UNKNOWN
    -------------- ------------ ----------- ------
    mem_all:     =   2107949056 (   2010MB) [100%] Total real memory managed
    mem_gap_sys: +     35684352 (     34MB)        Memory gap: Kernel?!
    -------------- ------------ -----------
    mem_phys:    =   2143633408 (   2044MB)        Total real memory available
    mem_gap_hw:  +      3850240 (      3MB)        Memory gap: Segment Mappings?!
    -------------- ------------ -----------
    mem_hw:      =  -2147483648 (   2048MB)        Total real memory installed
    
    SYSTEM MEMORY SUMMARY:
    mem_used:         378380288 (    360MB) [ 17%] Logically unused memory
    mem_avail:   +   1769103360 (   1687MB) [ 82%] Logically available memory
    -------------- ------------ ----------- ------
    mem_total:   =  -2147483648 (   2048MB) [100%] Logically total memory
    
    The script itself is appended for reference, too.
    
    --------------------------------------------------------------------
    #!/usr/opkg/bin/perl
    
    #   query the system through the generic sysctl(8) interface
    #   (this does not require special priviledges)
    my $sysctl = {};
    my $sysctl_output = `/sbin/sysctl -a`;
    foreach my $line (split(/\n/, $sysctl_output)) {
        if ($line =~ m/^([^:]+):\s+(.+)\s*$/s) {
            $sysctl->{$1} = $2;
        }
    }
    
    #   round the physical memory size to the next power of two which is
    #   reasonable for memory cards. We do this by first determining the
    #   guessed memory card size under the assumption that usual computer
    #   hardware has an average of a maximally eight memory cards installed
    #   and those are usually of equal size.
    sub mem_rounded {
        my ($mem_size) = @_;
        my $chip_size  = 1;
        my $chip_guess = ($mem_size / 8) - 1;
        while ($chip_guess != 0) {
            $chip_guess >>= 1;
            $chip_size  <<= 1;
        }
        my $mem_round = (int($mem_size / $chip_size) + 1) * $chip_size;
        return $mem_round;
    }
    
    #   determine the individual known information
    #   NOTICE: forget hw.usermem, it is just (hw.physmem - vm.stats.vm.v_wire_count).
    #   NOTICE: forget vm.stats.misc.zero_page_count, it is just the subset of
    #           vm.stats.vm.v_free_count which is already pre-zeroed.
    my $mem_hw        = &mem_rounded($sysctl->{"hw.physmem"});
    my $mem_phys      = $sysctl->{"hw.physmem"};
    my $mem_all       = $sysctl->{"vm.stats.vm.v_page_count"}      * $sysctl->{"hw.pagesize"};
    my $mem_wire      = $sysctl->{"vm.stats.vm.v_wire_count"}      * $sysctl->{"hw.pagesize"};
    my $mem_active    = $sysctl->{"vm.stats.vm.v_active_count"}    * $sysctl->{"hw.pagesize"};
    my $mem_inactive  = $sysctl->{"vm.stats.vm.v_inactive_count"}  * $sysctl->{"hw.pagesize"};
    my $mem_cache     = $sysctl->{"vm.stats.vm.v_cache_count"}     * $sysctl->{"hw.pagesize"};
    my $mem_free      = $sysctl->{"vm.stats.vm.v_free_count"}      * $sysctl->{"hw.pagesize"};
    
    #   determine the individual unknown information
    my $mem_gap_vm    = $mem_all - ($mem_wire + $mem_active + $mem_inactive + $mem_cache + $mem_free);
    my $mem_gap_sys   = $mem_phys - $mem_all;
    my $mem_gap_hw    = $mem_hw   - $mem_phys;
    
    #   determine logical summary information
    my $mem_total = $mem_hw;
    my $mem_avail = $mem_inactive + $mem_cache + $mem_free;
    my $mem_used  = $mem_total - $mem_avail;
    
    #   information annotations
    my $info = {
        "mem_wire"     => 'Wired: disabled for paging out',
        "mem_active"   => 'Active: recently referenced',
        "mem_inactive" => 'Inactive: recently not referenced',
        "mem_cache"    => 'Cached: almost avail. for allocation',
        "mem_free"     => 'Free: fully available for allocation',
        "mem_gap_vm"   => 'Memory gap: UNKNOWN',
        "mem_all"      => 'Total real memory managed',
        "mem_gap_sys"  => 'Memory gap: Kernel?!',
        "mem_phys"     => 'Total real memory available',
        "mem_gap_hw"   => 'Memory gap: Segment Mappings?!',
        "mem_hw"       => 'Total real memory installed',
        "mem_used"     => 'Logically unused memory',
        "mem_avail"    => 'Logically available memory',
        "mem_total"    => 'Logically total memory',
    };
    
    #   print system results
    printf("SYSTEM MEMORY INFORMATION:\n");
    printf("mem_wire:      %12d (%7dMB) [%3d%%] %s\n", $mem_wire,     $mem_wire     / (1024*1024), ($mem_wire     / $mem_all) * 100, $info->{"mem_wire"});
    printf("mem_active:  + %12d (%7dMB) [%3d%%] %s\n", $mem_active,   $mem_active   / (1024*1024), ($mem_active   / $mem_all) * 100, $info->{"mem_active"});
    printf("mem_inactive:+ %12d (%7dMB) [%3d%%] %s\n", $mem_inactive, $mem_inactive / (1024*1024), ($mem_inactive / $mem_all) * 100, $info->{"mem_inactive"});
    printf("mem_cache:   + %12d (%7dMB) [%3d%%] %s\n", $mem_cache,    $mem_cache    / (1024*1024), ($mem_cache    / $mem_all) * 100, $info->{"mem_cache"});
    printf("mem_free:    + %12d (%7dMB) [%3d%%] %s\n", $mem_free,     $mem_free     / (1024*1024), ($mem_free     / $mem_all) * 100, $info->{"mem_free"});
    printf("mem_gap_vm:  + %12d (%7dMB) [%3d%%] %s\n", $mem_gap_vm,   $mem_gap_vm   / (1024*1024), ($mem_gap_vm   / $mem_all) * 100, $info->{"mem_gap_vm"});
    printf("-------------- ------------ ----------- ------\n");
    printf("mem_all:     = %12d (%7dMB) [100%%] %s\n", $mem_all,      $mem_all      / (1024*1024), $info->{"mem_all"});
    printf("mem_gap_sys: + %12d (%7dMB)        %s\n",  $mem_gap_sys,  $mem_gap_sys  / (1024*1024), $info->{"mem_gap_sys"});
    printf("-------------- ------------ -----------\n");
    printf("mem_phys:    = %12d (%7dMB)        %s\n",  $mem_phys,     $mem_phys     / (1024*1024), $info->{"mem_phys"});
    printf("mem_gap_hw:  + %12d (%7dMB)        %s\n",  $mem_gap_hw,   $mem_gap_hw   / (1024*1024), $info->{"mem_gap_hw"});
    printf("-------------- ------------ -----------\n");
    printf("mem_hw:      = %12d (%7dMB)        %s\n",  $mem_hw,       $mem_hw       / (1024*1024), $info->{"mem_hw"});
    
    #   print logical results
    printf("\n");
    printf("SYSTEM MEMORY SUMMARY:\n");
    printf("mem_used:      %12d (%7dMB) [%3d%%] %s\n", $mem_used,  $mem_used  / (1024*1024), ($mem_used  / $mem_total) * 100, $info->{"mem_used"});
    printf("mem_avail:   + %12d (%7dMB) [%3d%%] %s\n", $mem_avail, $mem_avail / (1024*1024), ($mem_avail / $mem_total) * 100, $info->{"mem_avail"});
    printf("-------------- ------------ ----------- ------\n");
    printf("mem_total:   = %12d (%7dMB) [100%%] %s\n", $mem_total, $mem_total / (1024*1024), $info->{"mem_total"});
    
    --------------------------------------------------------------------

  Summary:
    Revision    Changes     Path
    1.9         +33 -18     ossp-pkg/snmpdx/snmpdx.d/sysVM.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/sysVM.pm
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 sysVM.pm
  --- ossp-pkg/snmpdx/snmpdx.d/sysVM.pm	20 Sep 2003 10:11:22 -0000	1.8
  +++ ossp-pkg/snmpdx/snmpdx.d/sysVM.pm	20 Sep 2003 10:33:17 -0000	1.9
  @@ -40,9 +40,9 @@
           ##
           ##  FreeBSD 4/5
           ##
  -        ##  sysVMRamMax   "/sbin/sysctl -n hw.physmem", convert bytes to MB
  +        ##  sysVMRamMax   "/sbin/sysctl -a", "hw.physmem", convert bytes to MB
           ##  sysVMRamUsed  sysVMRamMax - sysVMRamFree
  -        ##  sysVMRamFree  "/usr/bin/vmstat", avm, convert KB to MB
  +        ##  sysVMRamFree  "/sbin/sysctl -a", "vm.stats.vm.*", convert pages to MB
           ##  sysVMSwapMax  "/usr/sbin/swapinfo -k", 1K-blocks, last line, convert KB to MB
           ##  sysVMSwapUsed "/usr/sbin/swapinfo -k", Used, last line, convert KB to MB
           ##  sysVMSwapFree sysVMSwapMax - sysVMSwapUsed
  @@ -53,28 +53,26 @@
               my $sysVMRamUsed = undef;
               my $sysVMRamFree = undef;
   
  -            #   determine sysVMRamMax
  -            my $out = $self->{-ctx}->{-sys}->run("/sbin/sysctl -n hw.physmem", "forever");
  -            my $raw = $out->{-stdout};
  -            if ($raw =~ m/^(\d+)$/) {
  -                $sysVMRamMax = int($1 / (1024*1024));
  +            #   query system for sysctl(8) variables
  +            my $out = $self->{-ctx}->{-sys}->run("/sbin/sysctl -a", "1m");
  +            my $sysctl = {};
  +            foreach my $line (split(/\n/, $out->{-stdout})) {
  +                $sysctl->{$1} = $2 if ($line =~ m/^([^:]+):\s+(.+)\s*$/s);
               }
   
  +            #   determine sysVMRamMax
  +            $sysVMRamMax = int(&mem_rounded($sysctl->{"hw.physmem"}) / (1024*1024));
  +
               #   determine sysVMRamFree
  -            $out = $self->{-ctx}->{-sys}->run("/usr/bin/vmstat", "1m");
  -            $raw = $out->{-stdout};
  -            my $n2i = {};
  -            if ($raw =~ m/^[^\n]*\n *([^\n]*\bavm\b[^\n]*)\n *([^\n]*)\n$/s) {
  -                $n2i = &mkn2i(split(/\s+/, $1));
  -            }
  -            if (defined($n2i->{avm})) {
  -                my @dat = split(/\s+/, $2);
  -                $sysVMRamFree = int(@dat[$n2i->{avm}] / 1024);
  -            }
  +            my $sysVMRamFree =
  +                int((  $sysctl->{"hw.pagesize"}
  +                     * (  $sysctl->{"vm.stats.vm.v_inactive_count"} 
  +                        + $sysctl->{"vm.stats.vm.v_cache_count"}
  +                        + $sysctl->{"vm.stats.vm.v_free_count"}    )) / (1024*1024));
   
               #   determine sysVMRamUsed
               if (defined($sysVMRamMax) and defined($sysVMRamFree)) {
  -                $sysVMRamUsed = $sysVMRamMax - $sysVMRamFree;
  +                $sysVMRamUsed = ($sysVMRamMax - $sysVMRamFree);
               }
   
               #   provide result
  @@ -350,6 +348,23 @@
           $rc->{$f} = $i++;
       };
       return $rc;
  +}
  +
  +#   round the physical memory size to the next power of two which is
  +#   reasonable for memory cards. We do this by first determining the
  +#   guessed memory card size under the assumption that usual computer
  +#   hardware has an average of a maximally eight memory cards installed
  +#   and those are usually of equal size.
  +sub mem_rounded {
  +    my ($mem_size) = @_;
  +    my $chip_size  = 1;
  +    my $chip_guess = ($mem_size / 8) - 1;
  +    while ($chip_guess != 0) {
  +        $chip_guess >>= 1;
  +        $chip_size  <<= 1;
  +    }
  +    my $mem_round = (int($mem_size / $chip_size) + 1) * $chip_size;
  +    return $mem_round;
   }
   
   1;
  @@ .

From ossp-cvs-owner@ossp.org  Sat Sep 20 13:10:41 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0CE7776FF2; Sat, 20 Sep 2003 13:10:40 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ ChangeLog
Message-Id: <20030920111040.0CE7776FF2@mail.ossp.org>
Date: Sat, 20 Sep 2003 13:10:40 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Sep-2003 13:10:40
  Branch: HEAD                             Handle: 2003092012104000

  Modified files:
    ossp-pkg/snmpdx         ChangeLog

  Log:
    remember change

  Summary:
    Revision    Changes     Path
    1.13        +5  -1      ossp-pkg/snmpdx/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 ChangeLog
  --- ossp-pkg/snmpdx/ChangeLog	19 Sep 2003 10:32:44 -0000	1.12
  +++ ossp-pkg/snmpdx/ChangeLog	20 Sep 2003 11:10:40 -0000	1.13
  @@ -9,7 +9,11 @@
     ChangeLog
     =========
   
  -  Changes between 0.2.6 and 0.2.7 (10-Sep-2003 to 10-Sep-2003):
  +  Changes between 0.2.6 and 0.2.7 (10-Sep-2003 to 20-Sep-2003):
  +
  +   *) Reimplemented the implementation of sysVMRam* for FreeBSD
  +      correctly determine amount of used memory.
  +      [Ralf S. Engelschall]
   
      *) Fix location of net-snmp tools by correctly substituting
         the bindir location.
  @@ .

From ossp-cvs-owner@ossp.org  Sat Sep 20 13:11:01 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3319777183; Sat, 20 Sep 2003 13:11:01 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ README VERSION
Message-Id: <20030920111101.3319777183@mail.ossp.org>
Date: Sat, 20 Sep 2003 13:11:01 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Sep-2003 13:11:01
  Branch: HEAD                             Handle: 2003092012110000

  Modified files:
    ossp-pkg/snmpdx         README VERSION

  Log:
    adjust version for release

  Summary:
    Revision    Changes     Path
    1.11        +1  -1      ossp-pkg/snmpdx/README
    1.9         +1  -1      ossp-pkg/snmpdx/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/README
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 README
  --- ossp-pkg/snmpdx/README	19 Sep 2003 10:32:44 -0000	1.10
  +++ ossp-pkg/snmpdx/README	20 Sep 2003 11:11:00 -0000	1.11
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/_| |_|_| |_| |_| .__/ \__,_/_/\_\
                                                          |_|
     OSSP snmpdx - SNMP Daemon Extension
  -  Version 0.2.7 (19-Sep-2003)
  +  Version 0.2.7 (20-Sep-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/VERSION
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 VERSION
  --- ossp-pkg/snmpdx/VERSION	19 Sep 2003 10:32:44 -0000	1.8
  +++ ossp-pkg/snmpdx/VERSION	20 Sep 2003 11:11:00 -0000	1.9
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP snmpdx (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP snmpdx, Version 0.2.7 (19-Sep-2003)
  +  This is OSSP snmpdx, Version 0.2.7 (20-Sep-2003)
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Sep 20 13:14:06 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7B76876FF2; Sat, 20 Sep 2003 13:14:06 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/tool/ index.wml ossp-w...
Message-Id: <20030920111406.7B76876FF2@mail.ossp.org>
Date: Sat, 20 Sep 2003 13:14:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   20-Sep-2003 13:14:06
  Branch: HEAD                             Handle: 2003092012140501

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/snmpdx
                            index.wml

  Log:
    release OSSP snmpdx 0.2.7

  Summary:
    Revision    Changes     Path
    1.65        +4  -0      ossp-web/new/news.txt
    1.31        +1  -1      ossp-web/pkg/tool/index.wml
    1.5         +2  -2      ossp-web/pkg/tool/snmpdx/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.64 -r1.65 news.txt
  --- ossp-web/new/news.txt	10 Sep 2003 13:43:51 -0000	1.64
  +++ ossp-web/new/news.txt	20 Sep 2003 11:14:05 -0000	1.65
  @@ -1,3 +1,7 @@
  +20-Sep-2003: Released T<OSSP snmpdx> 0.2.7
  +15-Sep-2003: Released L<OSSP fsl> 1.2.1
  +15-Sep-2003: Released L<OSSP l2> 0.9.3
  +10-Sep-2003: Released T<OSSP snmpdx> 0.2.6
   10-Sep-2003: Released T<OSSP snmpdx> 0.2.5
   09-Sep-2003: Released T<OSSP snmpdx> 0.2.4
   09-Sep-2003: Released T<OSSP snmpdx> 0.2.3
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 index.wml
  --- ossp-web/pkg/tool/index.wml	10 Sep 2003 13:43:51 -0000	1.30
  +++ ossp-web/pkg/tool/index.wml	20 Sep 2003 11:14:05 -0000	1.31
  @@ -56,6 +56,6 @@
   	        done=90 stable="none" unstable="none">
     <pkg_item name="snmpdx" longname="OSSP snmpdx" type="tool"
               desc="SNMP Daemon Extension"
  -	        done=80 stable="none" unstable="0.2.5">
  +	        done=80 stable="none" unstable="0.2.7">
   </pkg_list>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/snmpdx/index.wml
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 index.wml
  --- ossp-web/pkg/tool/snmpdx/index.wml	10 Sep 2003 13:43:52 -0000	1.4
  +++ ossp-web/pkg/tool/snmpdx/index.wml	20 Sep 2003 11:14:06 -0000	1.5
  @@ -21,7 +21,7 @@
   
   <pkg_status
       stable="none" stable_date="none"
  -    unstable="0.2.5" unstable_date="10-Sep-2003"
  +    unstable="0.2.7" unstable_date="20-Sep-2003"
   	genesis="August 2003" done=80>
   
   <h2>Source</h2>
  @@ -31,7 +31,7 @@
       url=$(FTP_ROOT_URL)/pkg/tool/snmpdx/
       directory=$(FTP_ROOT_DIR)/pkg/tool/snmpdx/
       files="snmpdx-*.tar.gz" 
  -	stable="none" unstable="snmpdx-0.2.5.tar.gz">
  +	stable="none" unstable="snmpdx-0.2.7.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Sep 22 13:50:50 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 45CDF7711C; Mon, 22 Sep 2003 13:50:50 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ ChangeLog shiela-install.sh
Message-Id: <20030922115050.45CDF7711C@mail.ossp.org>
Date: Mon, 22 Sep 2003 13:50:50 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Sep-2003 13:50:49
  Branch: HEAD                             Handle: 2003092212504900

  Modified files:
    ossp-pkg/shiela         ChangeLog shiela-install.sh

  Log:
    Allow Shiela to accept CVS 1.12 and higher, too.

  Summary:
    Revision    Changes     Path
    1.36        +5  -0      ossp-pkg/shiela/ChangeLog
    1.20        +1  -1      ossp-pkg/shiela/shiela-install.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	23 Dec 2002 14:33:55 -0000	1.35
  +++ ossp-pkg/shiela/ChangeLog	22 Sep 2003 11:50:49 -0000	1.36
  @@ -9,6 +9,11 @@
   
     ChangeLog
   
  +  Changes between 1.0.4 and 1.0.5 (23-Dec-2002 to xx-Oct-2003):
  +
  +   *) Allow Shiela to accept CVS 1.12 and higher, too.
  +      [Ralf S. Engelschall]
  +
     Changes between 1.0.3 and 1.0.4 (23-Dec-2002 to 23-Dec-2002):
   
      *) Log also the user id of the committer in the OSSP shiela logfile
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-install.sh
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 shiela-install.sh
  --- ossp-pkg/shiela/shiela-install.sh	23 Dec 2002 14:45:16 -0000	1.19
  +++ ossp-pkg/shiela/shiela-install.sh	22 Sep 2003 11:50:49 -0000	1.20
  @@ -371,7 +371,7 @@
       CVS_VENDOR=CVSHome.org
   fi
   case $CVS_VERSION in
  -   1.10.[789]* | 1.10.1[0123456789]* | 1.11.* )
  +   1.10.[789]* | 1.10.1[0123456789]* | 1.1[1-9].* )
          ;;
      * )
          echo "ERROR: CVS has to be at least version 1.10.7"
  @@ .

From ossp-cvs-owner@ossp.org  Mon Sep 22 14:58:27 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 714537716D; Mon, 22 Sep 2003 14:58:26 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/string-divert/ ChangeLog Divert.pm test.pl
Message-Id: <20030922125826.714537716D@mail.ossp.org>
Date: Mon, 22 Sep 2003 14:58:26 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Sep-2003 14:58:26
  Branch: HEAD                             Handle: 2003092213582500

  Modified files:
    ossp-pkg/string-divert  ChangeLog Divert.pm test.pl

  Log:
    fix obj->folder(format, pattern) implementation

  Summary:
    Revision    Changes     Path
    1.4         +2  -0      ossp-pkg/string-divert/ChangeLog
    1.6         +3  -3      ossp-pkg/string-divert/Divert.pm
    1.3         +6  -1      ossp-pkg/string-divert/test.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ChangeLog
  --- ossp-pkg/string-divert/ChangeLog	29 May 2003 18:43:50 -0000	1.3
  +++ ossp-pkg/string-divert/ChangeLog	22 Sep 2003 12:58:25 -0000	1.4
  @@ -2,6 +2,8 @@
     ChangeLog
     =========
   
  +  0.93 (22-Sep-2003)
  +      o fix obj->folder(format, pattern) implementation
     0.92 (29-Apr-2003)
         o fix auto-indentation generation on unfolding
         o add "storage" mode functionality
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/Divert.pm
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 Divert.pm
  --- ossp-pkg/string-divert/Divert.pm	29 May 2003 18:45:49 -0000	1.5
  +++ ossp-pkg/string-divert/Divert.pm	22 Sep 2003 12:58:25 -0000	1.6
  @@ -36,7 +36,7 @@
   
   require Exporter;
   
  -our $VERSION   = '0.92';
  +our $VERSION   = '0.93';
   
   our @ISA       = qw(Exporter);
   our @EXPORT_OK = qw(new destroy DESTROY
  @@ -327,9 +327,9 @@
       if (defined($b)) {
           #   configure folder
           my $test = sprintf($a, "foo");
  -        my $id = ($test =~ m|${b}()|s);
  +        my ($id) = ($test =~ m|${b}()|s);
           die "folder construction format and matching regular expression do not correspond"
  -            if ($id ne "foo");
  +            if (not defined($id) or (defined($id) and $id ne "foo"));
           $self->{foldermk} = $a;
           $self->{folderre} = $b;
           return;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/test.pl
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 test.pl
  --- ossp-pkg/string-divert/test.pl	23 May 2003 11:09:57 -0000	1.2
  +++ ossp-pkg/string-divert/test.pl	22 Sep 2003 12:58:25 -0000	1.3
  @@ -23,7 +23,7 @@
   ##
   
   use 5.006;
  -use Test::More tests => 36;
  +use Test::More tests => 37;
   
   #   test: module loading
   BEGIN { use_ok('String::Divert') };
  @@ -131,4 +131,9 @@
   $x .= "baz";
   $x << 0;
   ok("$x" eq "foobarbazquux", "diversion");
  +
  +#   configuring folder patters
  +$x->assign("x");
  +$x->folder('{#%s#}', '\{#([a-zA-Z_][a-zA-Z0-9_.-]*)#\}');
  +ok("$x" eq "x", "folder pattern 1");
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Sep 25 09:25:28 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 29F9B771B7; Thu, 25 Sep 2003 09:25:28 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp.pod
Message-Id: <20030925072528.29F9B771B7@mail.ossp.org>
Date: Thu, 25 Sep 2003 09:25:28 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   25-Sep-2003 09:25:27
  Branch: HEAD                             Handle: 2003092508252700

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.pod

  Log:
    replace obsolete "command line arguments" with option terminology
    which reflects the use of a config file. (Damian Gerow)

  Summary:
    Revision    Changes     Path
    1.42        +2  -2      ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ============================================================================
  $ cvs diff -u -r1.41 -r1.42 lmtp2nntp.pod
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.pod	10 Feb 2003 10:13:11 -0000	1.41
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.pod	25 Sep 2003 07:25:27 -0000	1.42
  @@ -172,8 +172,8 @@
   envelope and headers are ignored.  In C<envelope> mode the newsgroup(s) are
   taken from the LMTP envelope, in C<header> mode the newsgroup(s) are taken
   from the header.  In all modes C<Newsgroups:> header is rewritten. In
  -C<envelope> and C<header> mode groups must still be specified as command line
  -arguments. However, in these modes the command line arguments are filters
  +C<envelope> and C<header> mode groups must still be specified as newsgroup
  +options. However, in these modes the newsgroup options are filters
   representing allowed groups. Filters can be specified as wildmat's.
   MULTI.
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Sep 25 15:12:07 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 04F94771C3; Thu, 25 Sep 2003 15:12:06 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ l2tool.c
Message-Id: <20030925131206.04F94771C3@mail.ossp.org>
Date: Thu, 25 Sep 2003 15:12:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   25-Sep-2003 15:12:06
  Branch: HEAD                             Handle: 2003092514120600

  Modified files:
    ossp-pkg/l2             l2tool.c

  Log:
    enhance command line parsing and add "-s sleepsec" option

  Summary:
    Revision    Changes     Path
    1.5         +30 -6      ossp-pkg/l2/l2tool.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2tool.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 l2tool.c
  --- ossp-pkg/l2/l2tool.c	6 Jan 2003 11:41:52 -0000	1.4
  +++ ossp-pkg/l2/l2tool.c	25 Sep 2003 13:12:06 -0000	1.5
  @@ -31,6 +31,11 @@
   #include <stdio.h>
   #include "l2.h"
   
  +#include <unistd.h>
  +extern int getopt(int, char *const *, const char *);
  +extern int optind;
  +extern char *optarg;
  +
   static void die(l2_env_t *env, l2_result_t rv, char *fmt, ...)
   {
       va_list ap;
  @@ -45,6 +50,13 @@
       exit(1);
   }
   
  +static void usage(void)
  +{
  +    fprintf(stderr, "l2tool:ERROR: invalid command line\n");
  +    fprintf(stderr, "l2tool:USAGE: l2tool [-s sleepsec] <specification>\n");
  +    exit(1);
  +}
  +
   int main(int argc, char *argv[])
   {
       l2_channel_t *ch;
  @@ -57,14 +69,23 @@
       char *cpMsg;
       char *cp;
       unsigned int nLevel;
  +    int option;
  +    int nSleep = 0;
   
  -    /* minimal command line parsing */
  -    if (argc != 2) {
  -        fprintf(stderr, "l2tool:ERROR: invalid command line\n");
  -        fprintf(stderr, "l2tool:USAGE: l2tool <specification>\n");
  -        exit(1);
  +    /* command line parsing */
  +    while ((option = getopt(argc, argv, "s:")) != EOF) {
  +        switch ((char) option) {
  +            case 's':
  +                nSleep = atoi(optarg);
  +                break;
  +            default:
  +                usage();
  +        /* NOTREACHED */
  +        }
       }
  -    spec = argv[1];
  +    if (argc - optind != 1)
  +        usage();
  +    spec = argv[optind];
   
       /* create environment */
       if ((rv = l2_env_create(&env)) != L2_OK)
  @@ -101,6 +122,9 @@
           /* perform log operation(s) */
           if ((rv = l2_channel_log(ch, nLevel, "%s", cpMsg)) != L2_OK)
               die(env, rv, "failed to log message to channel tree");
  +
  +        /* artifical delay */
  +        sleep(nSleep);
       }
   
       /* destroy channel tree */
  @@ .

From ossp-cvs-owner@ossp.org  Thu Sep 25 15:15:25 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DDD1A771EB; Thu, 25 Sep 2003 15:15:24 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ l2_ch_file.c
Message-Id: <20030925131524.DDD1A771EB@mail.ossp.org>
Date: Thu, 25 Sep 2003 15:15:24 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   25-Sep-2003 15:15:24
  Branch: HEAD                             Handle: 2003092514152400

  Modified files:
    ossp-pkg/l2             l2_ch_file.c

  Log:
    whitespaces

  Summary:
    Revision    Changes     Path
    1.29        +6  -6      ossp-pkg/l2/l2_ch_file.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_file.c
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 l2_ch_file.c
  --- ossp-pkg/l2/l2_ch_file.c	30 Jun 2003 12:54:06 -0000	1.28
  +++ ossp-pkg/l2/l2_ch_file.c	25 Sep 2003 13:15:24 -0000	1.29
  @@ -101,13 +101,13 @@
        * truth table for user input,       append, trunc => resulting trunc
        *                 -----------------+------+------+------------------
        *                                       -1     -1      0 (default)
  -     *                 trunc=0               -1      0      0 
  -     *                 trunc=1               -1      1      1 
  -     *                 append=0               0     -1      1 
  +     *                 trunc=0               -1      0      0
  +     *                 trunc=1               -1      1      1
  +     *                 append=0               0     -1      1
        *                 append=0, trunc=0      0      0      ERROR
  -     *                 append=0, trunc=1      0      1      1 
  -     *                 append=1               1     -1      0 
  -     *                 append=1, trunc=0      1      0      0 
  +     *                 append=0, trunc=1      0      1      1
  +     *                 append=1               1     -1      0
  +     *                 append=1, trunc=0      1      0      0
        *                 append=1, trunc=1      1      1      ERROR
        */
       if (cfg->append >= 1)
  @@ .

From ossp-cvs-owner@ossp.org  Thu Sep 25 15:20:35 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 89E81771B7; Thu, 25 Sep 2003 15:20:35 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ l2_ch_file.c
Message-Id: <20030925132035.89E81771B7@mail.ossp.org>
Date: Thu, 25 Sep 2003 15:20:35 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   25-Sep-2003 15:20:35
  Branch: HEAD                             Handle: 2003092514203400

  Modified files:
    ossp-pkg/l2             l2_ch_file.c

  Log:
    remodel jitter from flag to count; move open logic into openchfile()
    function

  Summary:
    Revision    Changes     Path
    1.30        +50 -44     ossp-pkg/l2/l2_ch_file.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_file.c
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 l2_ch_file.c
  --- ossp-pkg/l2/l2_ch_file.c	25 Sep 2003 13:15:24 -0000	1.29
  +++ ossp-pkg/l2/l2_ch_file.c	25 Sep 2003 13:20:34 -0000	1.30
  @@ -42,8 +42,24 @@
       int   trunc;
       int   perm;
       int   jitter;
  +    int   jittercount;
   } l2_ch_file_t;
   
  +/* open channel file */
  +static void openchfile(l2_context_t *ctx, l2_channel_t *ch, int mode)
  +{
  +    l2_ch_file_t *cfg = (l2_ch_file_t *)ctx->vp;
  +    mode_t mask;
  +
  +    /* open channel file */
  +    mask = umask(0);
  +    cfg->fd = open(cfg->path, mode, cfg->perm);
  +    umask(mask);
  +
  +    /* prepare jittering counter */
  +    cfg->jittercount = 0;
  +}
  +
   /* create channel */
   static l2_result_t hook_create(l2_context_t *ctx, l2_channel_t *ch)
   {
  @@ -54,12 +70,13 @@
           return L2_ERR_ARG;
   
       /* initialize configuration with reasonable defaults */
  -    cfg->fd     = -1;
  -    cfg->path   = NULL;
  -    cfg->append = -1;
  -    cfg->trunc  = -1;
  -    cfg->perm   = (S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
  -    cfg->jitter = 0;
  +    cfg->fd          = -1;
  +    cfg->path        = NULL;
  +    cfg->append      = -1;
  +    cfg->trunc       = -1;
  +    cfg->perm        = (S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
  +    cfg->jitter      = 0;
  +    cfg->jittercount = 0;
   
       /* link private channel configuration into channel context */
       ctx->vp = cfg;
  @@ -76,11 +93,11 @@
       l2_env_t *env;
   
       /* feed and call generic parameter parsing engine */
  -    L2_PARAM_SET(pa[0], path,   STR, &cfg->path);
  -    L2_PARAM_SET(pa[1], append, INT, &cfg->append);
  -    L2_PARAM_SET(pa[2], trunc,  INT, &cfg->trunc);
  -    L2_PARAM_SET(pa[3], perm,   INT, &cfg->perm);
  -    L2_PARAM_SET(pa[4], jitter, INT, &cfg->jitter);
  +    L2_PARAM_SET(pa[0], path,    STR, &cfg->path);
  +    L2_PARAM_SET(pa[1], append,  INT, &cfg->append);
  +    L2_PARAM_SET(pa[2], trunc,   INT, &cfg->trunc);
  +    L2_PARAM_SET(pa[3], perm,    INT, &cfg->perm);
  +    L2_PARAM_SET(pa[4], jitter,  INT, &cfg->jitter);
       L2_PARAM_END(pa[5]);
       l2_channel_env(ch, &env);
       rv = l2_util_setparams(env, pa, fmt, ap);
  @@ -92,8 +109,6 @@
   static l2_result_t hook_open(l2_context_t *ctx, l2_channel_t *ch)
   {
       l2_ch_file_t *cfg = (l2_ch_file_t *)ctx->vp;
  -    int mode;
  -    mode_t mask;
   
       /* "append" backward compatibility; only cfg->trunc is used in the code
        * make sure append/trunc either both use defaults, both are set different, or only one is set
  @@ -121,34 +136,23 @@
       if (   cfg->trunc == -1)
           cfg->trunc = (1 - cfg->append) & 1;
   
  -    /* reduce jitter to 0 (no) or 1 (yes) */
  -    if (cfg->jitter <= 0)
  -        cfg->jitter = 0;
  -    if (cfg->jitter >= 1)
  -        cfg->jitter = 1;
  +    /* make sure jitter count is positive number */
  +    if (cfg->jitter < 0)
  +        return L2_ERR_USE;
   
       /* make sure a path was set */
       if (cfg->path == NULL)
           return L2_ERR_USE;
   
       /* open channel file */
  -    mode = O_WRONLY|O_CREAT;
       if (cfg->trunc == 1)
  -        mode |= O_TRUNC;
  +        openchfile(ctx, ch, O_WRONLY|O_CREAT|O_TRUNC);
       else
  -        mode |= O_APPEND;
  -    mask = umask(0);
  -    cfg->fd = open(cfg->path, mode, cfg->perm);
  -    umask(mask);
  +        openchfile(ctx, ch, O_WRONLY|O_CREAT|O_APPEND);
  +
       if (cfg->fd == -1)
           return L2_ERR_SYS;
   
  -    /* close channel file if jittering, we just wanted to see a successful open and truncate if required */
  -    if (cfg->jitter == 1) {
  -        close(cfg->fd);
  -        cfg->fd = -1;
  -    }
  -
       return L2_OK;
   }
   
  @@ -158,32 +162,34 @@
   {
       l2_ch_file_t *cfg = (l2_ch_file_t *)ctx->vp;
       l2_result_t rc = L2_OK;
  -    mode_t mask;
  +    int reopen = 0;
   
  -    /* handle the impossible; close any lingering file if jittering */
  -    if (cfg->fd != -1 && cfg->jitter == 1) {
  +    /* if jittering, count writes and reopen file if jitter threshold is reached or exceeded */
  +    if (cfg->jitter >= 1) {
  +        cfg->jittercount++;
  +        if (cfg->jittercount >= cfg->jitter) {
  +            cfg->jittercount = 0;
  +            reopen = 1;
  +        }
  +    }
  +
  +    /* close for reopen if required */
  +    if (reopen == 1 && cfg->fd != -1) {
           close(cfg->fd);
           cfg->fd = -1;
       }
   
  -    /* open channel file if jittering */
  -    if (cfg->fd == -1 && cfg->jitter == 1) {
  -        mask = umask(0);
  -        cfg->fd = open(cfg->path, O_WRONLY|O_CREAT|O_APPEND, cfg->perm);
  -        umask(mask);
  +    /* open if required */
  +    if (cfg->fd == -1) {
  +        openchfile(ctx, ch, O_WRONLY|O_CREAT|O_APPEND);
       }
  +
       if (cfg->fd == -1)
           return L2_ERR_SYS;
   
       /* write message to channel file */
       if (write(cfg->fd, buf, buf_size) == -1)
           rc = L2_ERR_SYS;
  -
  -    /* close channel file if jittering */
  -    if (cfg->jitter == 1) {
  -        close(cfg->fd);
  -        cfg->fd = -1;
  -    }
   
       return rc;
   }
  @@ .

From ossp-cvs-owner@ossp.org  Thu Sep 25 15:22:33 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1BEF8771B7; Thu, 25 Sep 2003 15:22:33 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ l2_ch_file.c
Message-Id: <20030925132233.1BEF8771B7@mail.ossp.org>
Date: Thu, 25 Sep 2003 15:22:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   25-Sep-2003 15:22:33
  Branch: HEAD                             Handle: 2003092514223200

  Modified files:
    ossp-pkg/l2             l2_ch_file.c

  Log:
    add monitor option to file channel

  Summary:
    Revision    Changes     Path
    1.31        +64 -2      ossp-pkg/l2/l2_ch_file.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_file.c
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 l2_ch_file.c
  --- ossp-pkg/l2/l2_ch_file.c	25 Sep 2003 13:20:34 -0000	1.30
  +++ ossp-pkg/l2/l2_ch_file.c	25 Sep 2003 13:22:32 -0000	1.31
  @@ -33,6 +33,9 @@
   #include <fcntl.h>
   #include <unistd.h>
   #include <sys/stat.h>
  +#include <sys/time.h>
  +#include <sys/types.h>
  +#include <sys/stat.h>
   
   /* declare private channel configuration */
   typedef struct {
  @@ -43,6 +46,10 @@
       int   perm;
       int   jitter;
       int   jittercount;
  +    int   monitor;
  +    long  monitortime;
  +    dev_t monitordev;
  +    ino_t monitorino;
   } l2_ch_file_t;
   
   /* open channel file */
  @@ -50,6 +57,8 @@
   {
       l2_ch_file_t *cfg = (l2_ch_file_t *)ctx->vp;
       mode_t mask;
  +    struct timeval tv;
  +    struct stat st;
   
       /* open channel file */
       mask = umask(0);
  @@ -58,6 +67,23 @@
   
       /* prepare jittering counter */
       cfg->jittercount = 0;
  +
  +    /* prepare monitoring time and stat */
  +    if (cfg->monitor >= 1) {
  +        if (gettimeofday(&tv, NULL) != -1)
  +            cfg->monitortime = tv.tv_sec;
  +        else
  +            cfg->monitortime = 0;
  +        if (   (cfg->fd != -1)
  +            && (fstat(cfg->fd, &st) != -1)) {
  +            cfg->monitordev = st.st_dev;
  +            cfg->monitorino = st.st_ino;
  +        }
  +        else {
  +            cfg->monitordev = 0;
  +            cfg->monitorino = 0;
  +        }
  +    }
   }
   
   /* create channel */
  @@ -77,6 +103,10 @@
       cfg->perm        = (S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
       cfg->jitter      = 0;
       cfg->jittercount = 0;
  +    cfg->monitor     = 0;
  +    cfg->monitortime = 0;
  +    cfg->monitordev  = 0;
  +    cfg->monitorino  = 0;
   
       /* link private channel configuration into channel context */
       ctx->vp = cfg;
  @@ -88,7 +118,7 @@
   static l2_result_t hook_configure(l2_context_t *ctx, l2_channel_t *ch, const char *fmt, va_list ap)
   {
       l2_ch_file_t *cfg = (l2_ch_file_t *)ctx->vp;
  -    l2_param_t pa[6];
  +    l2_param_t pa[7];
       l2_result_t rv;
       l2_env_t *env;
   
  @@ -98,7 +128,8 @@
       L2_PARAM_SET(pa[2], trunc,   INT, &cfg->trunc);
       L2_PARAM_SET(pa[3], perm,    INT, &cfg->perm);
       L2_PARAM_SET(pa[4], jitter,  INT, &cfg->jitter);
  -    L2_PARAM_END(pa[5]);
  +    L2_PARAM_SET(pa[5], monitor, INT, &cfg->monitor);
  +    L2_PARAM_END(pa[6]);
       l2_channel_env(ch, &env);
       rv = l2_util_setparams(env, pa, fmt, ap);
   
  @@ -140,6 +171,10 @@
       if (cfg->jitter < 0)
           return L2_ERR_USE;
   
  +    /* make sure monitor time is positive number */
  +    if (cfg->monitor < 0)
  +        return L2_ERR_USE;
  +
       /* make sure a path was set */
       if (cfg->path == NULL)
           return L2_ERR_USE;
  @@ -163,6 +198,8 @@
       l2_ch_file_t *cfg = (l2_ch_file_t *)ctx->vp;
       l2_result_t rc = L2_OK;
       int reopen = 0;
  +    struct timeval tv;
  +    struct stat st;
   
       /* if jittering, count writes and reopen file if jitter threshold is reached or exceeded */
       if (cfg->jitter >= 1) {
  @@ -170,6 +207,31 @@
           if (cfg->jittercount >= cfg->jitter) {
               cfg->jittercount = 0;
               reopen = 1;
  +        }
  +    }
  +
  +    /* if monitoring, from time to time check for a renamed log and reopen file on detection */
  +    if (cfg->monitor >= 1) {
  +        int dostat = 0;
  +        if (gettimeofday(&tv, NULL) != -1) {
  +            if ((tv.tv_sec - cfg->monitortime) >= cfg->monitor) {
  +                cfg->monitortime = tv.tv_sec;
  +                dostat = 1;
  +            }
  +        }
  +        else {
  +            dostat = 1;
  +        }
  +        if (dostat == 1) {
  +            if (stat(cfg->path, &st) == -1) {
  +                reopen = 1;
  +            }
  +            else {
  +                if (   (cfg->monitordev != st.st_dev)
  +                    || (cfg->monitorino != st.st_ino)) {
  +                    reopen = 1;
  +                }
  +            }
           }
       }
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Sep 25 15:57:24 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6253A771B7; Thu, 25 Sep 2003 15:57:24 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ ChangeLog fsl.pod
Message-Id: <20030925135724.6253A771B7@mail.ossp.org>
Date: Thu, 25 Sep 2003 15:57:24 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   25-Sep-2003 15:57:24
  Branch: HEAD                             Handle: 2003092514572300

  Modified files:
    ossp-pkg/fsl            ChangeLog fsl.pod

  Log:
    document changes in jitter and new monitor option in file channel

  Summary:
    Revision    Changes     Path
    1.21        +8  -1      ossp-pkg/fsl/ChangeLog
    1.32        +19 -11     ossp-pkg/fsl/fsl.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 ChangeLog
  --- ossp-pkg/fsl/ChangeLog	15 Sep 2003 08:24:02 -0000	1.20
  +++ ossp-pkg/fsl/ChangeLog	25 Sep 2003 13:57:23 -0000	1.21
  @@ -8,10 +8,17 @@
   
     CHANGELOG
   
  +  Changes between 1.2.1 and 1.2.2 (25-Sep-2003)
  +    *) change jitter option in file channel from flag to count.
  +       [Thomas Lotterer <thomas@lotterer.net]
  +
  +    *) add monitor option to file channel.
  +       [Thomas Lotterer <thomas@lotterer.net]
  +
     Changes between 1.2.0 and 1.2.1 (15-Sep-2003)
   
       *) include updated lib_l2 v0.9.3 to make sure prefix channel does
  -       atomar downstream writes
  +       atomar downstream writes.
          [Thomas Lotterer <thomas@lotterer.net]
   
     Changes between 1.1.0 and 1.2.0 (30-Jun-2003)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl.pod
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 fsl.pod
  --- ossp-pkg/fsl/fsl.pod	30 Jun 2003 12:54:05 -0000	1.31
  +++ ossp-pkg/fsl/fsl.pod	25 Sep 2003 13:57:23 -0000	1.32
  @@ -202,22 +202,30 @@
   The B<file> channel opens a file at the given I<path> and passes
   messages poured in from upper channels to this file. If the file at
   the given path already exists, additional data is either appended
  -(I<append>=1 or I<trunc>=0>) or the existing file is truncated
  -(I<append>=0 or I<trunc>=1>). If I<jitter> is set the logfile will be
  -opened and closed for every write operation. This makes log file
  -rotation easy at the price of performance. The desired permissions of
  -the logfile can be set through I<perm>.
  +(I<trunc>=0>) or the existing file is truncated (I<trunc>=1>). The
  +desired permissions of the logfile can be set through I<perm>. If
  +I<jitter> is set to a number n other than zero the logfile will be
  +closed and reopened before every n'th write operation. In other words,
  +a logfile moved away will receive a maximum of n additional messages,
  +then a new file using the old name will be opened without truncation. If
  +I<monitor> is set to n seconds other than zero a timer is set. For every
  +write operation the time is checked. If n or more seconds have passed by
  +the timer is reset and it is checked whether the logfile was moved or
  +disappeard. In such case the logfile will be closed an reopened before
  +the actual write. In other words, a logfile moved away will receive
  +messages no longer than the timer is set to, then a new file using the
  +old name will be opened without truncation. These options make external
  +log file rotation easy at a controllable price of performance. It is
  +possible to combine I<jitter> and I<monitor>.
   
  -Note that both append and trunc work equally well but append is obsolete
  -and might be removed in the future.  Both options can be specified
  -together as long as they are set different. L2 versions which know the
  -trunc option default to append mode while previous versions limited to
  -support only the append option defaulted to truncate mode.
  +Note that the append option is obsolete and might be removed in the
  +future. Use the trunc option with inverse logic instead.
   
    o file   (STR path            m
              INT append          o [0=no|1=yes]          =1
              INT trunc           o [0=no|1=yes]          =0
  -           INT jitter          o [0=no|1=yes]          =0
  +           INT jitter          o [count]               =0 (disabled)
  +           INT monitor         o [sec]                 =0 (disabled)
              INT perm            o [octal]               =0644
              )
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Sep 25 17:14:15 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 80243771E6; Thu, 25 Sep 2003 17:14:15 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ ChangeLog README l2_version.c
Message-Id: <20030925151415.80243771E6@mail.ossp.org>
Date: Thu, 25 Sep 2003 17:14:15 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   25-Sep-2003 17:14:15
  Branch: HEAD                             Handle: 2003092516141400

  Modified files:
    ossp-pkg/l2             ChangeLog README l2_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.7         +13 -5      ossp-pkg/l2/ChangeLog
    1.13        +1  -1      ossp-pkg/l2/README
    1.12        +9  -9      ossp-pkg/l2/l2_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ChangeLog
  --- ossp-pkg/l2/ChangeLog	15 Sep 2003 07:44:32 -0000	1.6
  +++ ossp-pkg/l2/ChangeLog	25 Sep 2003 15:14:14 -0000	1.7
  @@ -9,6 +9,14 @@
     ChangeLog
     =========
   
  +  Changes between 0.9.3 and 0.9.4 (15-Sep-2003 to 25-Sep-2003)
  +
  +    *) change jitter option in file channel from flag to count.
  +       [Thomas Lotterer <thomas@lotterer.net>]
  +
  +    *) add monitor option to file channel.
  +       [Thomas Lotterer <thomas@lotterer.net>]
  +
     Changes between 0.9.2 and 0.9.3 (30-Jun-2003 to 15-Sep-2003)
   
       *) make sure prefix channel does atomar downstream writes
  @@ -18,22 +26,22 @@
     
       *) introduce "trunc=" option for file channel; keep support for
          obsolete "append" option.
  -       [Thomas Lotterer <thomas@lotterer.net]
  +       [Thomas Lotterer <thomas@lotterer.net>]
   
       *) change default mode for file channel to "append".
  -       [Thomas Lotterer <thomas@lotterer.net]
  +       [Thomas Lotterer <thomas@lotterer.net>]
   
       *) fix array too small by one element bug in fd and file channels.
  -       [Thomas Lotterer <thomas@lotterer.net]
  +       [Thomas Lotterer <thomas@lotterer.net>]
   
       *) add jitter option to file channel.
  -       [Thomas Lotterer <thomas@lotterer.net]
  +       [Thomas Lotterer <thomas@lotterer.net>]
   
     Changes between 0.9.0 and 0.9.1 (30-Jul-2002 to 11-Oct-2003)
   
       *) Changed "filedescriptor" to "fs" in file descriptor channel
          configuration.
  -       [Thomas Lotterer <thomas@lotterer.net]
  +       [Thomas Lotterer <thomas@lotterer.net>]
   
       *) Upgraded to GNU autoconf 2.54.
          [Ralf S. Engelschall <rse@engelschall.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/README
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 README
  --- ossp-pkg/l2/README	15 Sep 2003 07:44:33 -0000	1.12
  +++ ossp-pkg/l2/README	25 Sep 2003 15:14:14 -0000	1.13
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_|_____|
   
     OSSP l2 -- Flexible Logging
  -  Version 0.9.3 (15-Sep-2003)
  +  Version 0.9.4 (25-Sep-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_version.c
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 l2_version.c
  --- ossp-pkg/l2/l2_version.c	15 Sep 2003 08:14:49 -0000	1.11
  +++ ossp-pkg/l2/l2_version.c	25 Sep 2003 15:14:14 -0000	1.12
  @@ -8,7 +8,7 @@
   #ifndef _L2_VERSION_C_
   #define _L2_VERSION_C_
   
  -#define L2_VERSION 0x009203
  +#define L2_VERSION 0x009204
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _L2_VERSION_C_AS_HEADER_
   
   l2_version_t l2_version = {
  -    0x009203,
  -    "0.9.3",
  -    "0.9.3 (15-Sep-2003)",
  -    "This is OSSP l2, Version 0.9.3 (15-Sep-2003)",
  -    "OSSP l2 0.9.3 (15-Sep-2003)",
  -    "OSSP l2/0.9.3",
  -    "@(#)OSSP l2 0.9.3 (15-Sep-2003)",
  -    "$Id: l2_version.c,v 1.11 2003/09/15 08:14:49 thl Exp $"
  +    0x009204,
  +    "0.9.4",
  +    "0.9.4 (25-Sep-2003)",
  +    "This is OSSP l2, Version 0.9.4 (25-Sep-2003)",
  +    "OSSP l2 0.9.4 (25-Sep-2003)",
  +    "OSSP l2/0.9.4",
  +    "@(#)OSSP l2 0.9.4 (25-Sep-2003)",
  +    "$Id: l2_version.c,v 1.12 2003/09/25 15:14:14 thl Exp $"
   };
   
   #endif /* _L2_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Thu Sep 25 17:18:05 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EFCCC771C4; Thu, 25 Sep 2003 17:18:04 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ ChangeLog README fsl_version.c
Message-Id: <20030925151804.EFCCC771C4@mail.ossp.org>
Date: Thu, 25 Sep 2003 17:18:04 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   25-Sep-2003 17:18:04
  Branch: HEAD                             Handle: 2003092516180400

  Modified files:
    ossp-pkg/fsl            ChangeLog README fsl_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.22        +7  -6      ossp-pkg/fsl/ChangeLog
    1.36        +1  -1      ossp-pkg/fsl/README
    1.22        +9  -9      ossp-pkg/fsl/fsl_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 ChangeLog
  --- ossp-pkg/fsl/ChangeLog	25 Sep 2003 13:57:23 -0000	1.21
  +++ ossp-pkg/fsl/ChangeLog	25 Sep 2003 15:18:04 -0000	1.22
  @@ -9,17 +9,18 @@
     CHANGELOG
   
     Changes between 1.2.1 and 1.2.2 (25-Sep-2003)
  +
       *) change jitter option in file channel from flag to count.
  -       [Thomas Lotterer <thomas@lotterer.net]
  +       [Thomas Lotterer <thomas@lotterer.net>]
   
       *) add monitor option to file channel.
  -       [Thomas Lotterer <thomas@lotterer.net]
  +       [Thomas Lotterer <thomas@lotterer.net>]
   
     Changes between 1.2.0 and 1.2.1 (15-Sep-2003)
   
       *) include updated lib_l2 v0.9.3 to make sure prefix channel does
          atomar downstream writes.
  -       [Thomas Lotterer <thomas@lotterer.net]
  +       [Thomas Lotterer <thomas@lotterer.net>]
   
     Changes between 1.1.0 and 1.2.0 (30-Jun-2003)
   
  @@ -31,7 +32,7 @@
       *) fix array too small by one element bug in fd and file channels.
   
       *) add jitter option to file channel.
  -       [Thomas Lotterer <thomas@lotterer.net]
  +       [Thomas Lotterer <thomas@lotterer.net>]
   
     Changes between 1.0.8 and 1.1.0 (22-May-2003)
   
  @@ -64,7 +65,7 @@
       *) for flexibility reasons but still to stay away from the process
          environment the logmask is configured by reading the content of a
          symlink.
  -       [Thomas Lotterer <thomas@lotterer.net]
  +       [Thomas Lotterer <thomas@lotterer.net>]
   
     Changes between 1.0.7 and 1.0.8 (13-Feb-2003)
   
  @@ -85,7 +86,7 @@
          data. All other implementations seem to keep the data and
          l2_channel_downstream() traversed through still valid pointers
          in unmalloc(3)ed areas.
  -       [Thomas Lotterer <thomas@lotterer.net]
  +       [Thomas Lotterer <thomas@lotterer.net>]
   
       *) memory handling cleanups in lib_cfg
          [Ralf S. Engelschall <rse@engelschall.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/README
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 README
  --- ossp-pkg/fsl/README	15 Sep 2003 08:24:02 -0000	1.35
  +++ ossp-pkg/fsl/README	25 Sep 2003 15:18:04 -0000	1.36
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_| |___/_|
    
     OSSP fsl - Faking/Flexible Syslog Library
  -  Version 1.2.1 (15-Sep-2003)
  +  Version 1.2b2 (25-Sep-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl_version.c
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 fsl_version.c
  --- ossp-pkg/fsl/fsl_version.c	15 Sep 2003 08:24:02 -0000	1.21
  +++ ossp-pkg/fsl/fsl_version.c	25 Sep 2003 15:18:04 -0000	1.22
  @@ -8,7 +8,7 @@
   #ifndef _FSL_VERSION_C_
   #define _FSL_VERSION_C_
   
  -#define FSL_VERSION 0x102201
  +#define FSL_VERSION 0x102102
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _FSL_VERSION_C_AS_HEADER_
   
   fsl_version_t fsl_version = {
  -    0x102201,
  -    "1.2.1",
  -    "1.2.1 (15-Sep-2003)",
  -    "This is OSSP fsl, Version 1.2.1 (15-Sep-2003)",
  -    "OSSP fsl 1.2.1 (15-Sep-2003)",
  -    "OSSP fsl/1.2.1",
  -    "@(#)OSSP fsl 1.2.1 (15-Sep-2003)",
  -    "$Id: fsl_version.c,v 1.21 2003/09/15 08:24:02 thl Exp $"
  +    0x102102,
  +    "1.2b2",
  +    "1.2b2 (25-Sep-2003)",
  +    "This is OSSP fsl, Version 1.2b2 (25-Sep-2003)",
  +    "OSSP fsl 1.2b2 (25-Sep-2003)",
  +    "OSSP fsl/1.2b2",
  +    "@(#)OSSP fsl 1.2b2 (25-Sep-2003)",
  +    "$Id: fsl_version.c,v 1.22 2003/09/25 15:18:04 thl Exp $"
   };
   
   #endif /* _FSL_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Thu Sep 25 18:59:38 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CBE3F7713D; Thu, 25 Sep 2003 18:59:37 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ README fsl_version.c
Message-Id: <20030925165937.CBE3F7713D@mail.ossp.org>
Date: Thu, 25 Sep 2003 18:59:37 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   25-Sep-2003 18:59:37
  Branch: HEAD                             Handle: 2003092517593700

  Modified files:
    ossp-pkg/fsl            README fsl_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.37        +1  -1      ossp-pkg/fsl/README
    1.23        +9  -9      ossp-pkg/fsl/fsl_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/README
  ============================================================================
  $ cvs diff -u -r1.36 -r1.37 README
  --- ossp-pkg/fsl/README	25 Sep 2003 15:18:04 -0000	1.36
  +++ ossp-pkg/fsl/README	25 Sep 2003 16:59:37 -0000	1.37
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_| |___/_|
    
     OSSP fsl - Faking/Flexible Syslog Library
  -  Version 1.2b2 (25-Sep-2003)
  +  Version 1.3b1 (25-Sep-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl_version.c
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 fsl_version.c
  --- ossp-pkg/fsl/fsl_version.c	25 Sep 2003 15:18:04 -0000	1.22
  +++ ossp-pkg/fsl/fsl_version.c	25 Sep 2003 16:59:37 -0000	1.23
  @@ -8,7 +8,7 @@
   #ifndef _FSL_VERSION_C_
   #define _FSL_VERSION_C_
   
  -#define FSL_VERSION 0x102102
  +#define FSL_VERSION 0x103101
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _FSL_VERSION_C_AS_HEADER_
   
   fsl_version_t fsl_version = {
  -    0x102102,
  -    "1.2b2",
  -    "1.2b2 (25-Sep-2003)",
  -    "This is OSSP fsl, Version 1.2b2 (25-Sep-2003)",
  -    "OSSP fsl 1.2b2 (25-Sep-2003)",
  -    "OSSP fsl/1.2b2",
  -    "@(#)OSSP fsl 1.2b2 (25-Sep-2003)",
  -    "$Id: fsl_version.c,v 1.22 2003/09/25 15:18:04 thl Exp $"
  +    0x103101,
  +    "1.3b1",
  +    "1.3b1 (25-Sep-2003)",
  +    "This is OSSP fsl, Version 1.3b1 (25-Sep-2003)",
  +    "OSSP fsl 1.3b1 (25-Sep-2003)",
  +    "OSSP fsl/1.3b1",
  +    "@(#)OSSP fsl 1.3b1 (25-Sep-2003)",
  +    "$Id: fsl_version.c,v 1.23 2003/09/25 16:59:37 thl Exp $"
   };
   
   #endif /* _FSL_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Sun Sep 28 14:17:10 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 741ED771C0; Sun, 28 Sep 2003 14:17:09 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/platform/ platform.sh
Message-Id: <20030928121709.741ED771C0@mail.ossp.org>
Date: Sun, 28 Sep 2003 14:17:09 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Sep-2003 14:17:09
  Branch: HEAD                             Handle: 2003092813170800

  Modified files:
    ossp-pkg/platform       platform.sh

  Log:
    add SCO UnixWare, QNX Neutrino RTOS and SGI IRIX support

  Summary:
    Revision    Changes     Path
    1.10        +48 -0      ossp-pkg/platform/platform.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/platform/platform.sh
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 platform.sh
  --- ossp-pkg/platform/platform.sh	13 Sep 2003 18:17:49 -0000	1.9
  +++ ossp-pkg/platform/platform.sh	28 Sep 2003 12:17:08 -0000	1.10
  @@ -429,6 +429,54 @@
           esac
           ;;
   
  +    #   SCO UnixWare
  +    *:UnixWare:* )
  +        #   determine architecture
  +        AT="${UNAME_MACHINE}"
  +        case "${AT}" in
  +            i[3-6]86 | ix86at ) AT="iX86" ;; 
  +        esac
  +        AP="${AT}"
  +        #   determine system
  +        v=`/sbin/uname -v`
  +        ST="[SCO ]UnixWare ${v}"
  +        SP="${ST}"
  +        SC="SVR${UNAME_RELEASE}"
  +        ;;
  +
  +    #   QNX
  +    *:QNX:* )
  +        #   determine architecture
  +        AT="${UNAME_MACHINE}"
  +        case "${AT}" in
  +            x86pc ) AT="iX86" ;; 
  +        esac
  +        AP="${AT}"
  +        #   determine system
  +        v="${UNAME_RELEASE}"
  +        ST="QNX[ Neutrino RTOS] ${v}"
  +        v=`echo "${v}" | sed -e 's;^\([0-9][0-9]*\.[0-9][0-9]*\).*$;\1;'`
  +        SP="QNX[ Neutrino RTOS] ${v}"
  +        SC="QNX"
  +        ;;
  +
  +    #   SGI IRIX
  +    *:IRIX*:* )
  +        #   determine architecture
  +        AT="${UNAME_MACHINE}"
  +        AP="${AT}"
  +        case "${AP}:${UNAME_SYSTEM}" in
  +            IP*:IRIX64 ) AP="MIPS64" ;; 
  +            IP*:*      ) AP="MIPS"   ;; 
  +        esac
  +        AC="${AP}"
  +        #   determine system
  +        v=`(/bin/uname -R || /bin/uname -r) 2>/dev/null | sed -e 's;[0-9.]* ;;'`
  +        ST="[SGI ]IRIX ${v}"
  +        v="${UNAME_RELEASE}"
  +        SP="[SGI ]IRIX ${v}"
  +        SC="BSD"
  +        ;;
   
       #   TODO ...ADD YOUR NEW PLATFORM CHECK HERE... TODO
       # *:XXX:* )
  @@ .

From ossp-cvs-owner@ossp.org  Mon Sep 29 12:11:32 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0B389771B4; Mon, 29 Sep 2003 12:11:31 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/platform/ platform.sh
Message-Id: <20030929101131.0B389771B4@mail.ossp.org>
Date: Mon, 29 Sep 2003 12:11:31 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Sep-2003 12:11:31
  Branch: HEAD                             Handle: 2003092911113100

  Modified files:
    ossp-pkg/platform       platform.sh

  Log:
    add NetBSD, OpenBSD, HP HP-UX and HP Tru64 support

  Summary:
    Revision    Changes     Path
    1.11        +84 -0      ossp-pkg/platform/platform.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/platform/platform.sh
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 platform.sh
  --- ossp-pkg/platform/platform.sh	28 Sep 2003 12:17:08 -0000	1.10
  +++ ossp-pkg/platform/platform.sh	29 Sep 2003 10:11:31 -0000	1.11
  @@ -344,6 +344,38 @@
           esac
           ;;
   
  +    #   OpenBSD
  +    *:OpenBSD:* )
  +        #   determine architecture
  +        AT="${UNAME_MACHINE}"
  +        AP="${AT}"
  +        case "${AP}" in
  +            i[3-6]86 ) AP="iX86" ;;
  +        esac
  +        AC="${AP}"
  +        #   determine system
  +        r=`echo "${UNAME_RELEASE}" | sed -e 's/\(-.*\)$/[\1]/'`
  +        ST="OpenBSD ${r}"
  +        SP="${ST}"
  +        SC="4.4BSD"
  +        ;;
  +
  +    #   NetBSD
  +    *:NetBSD:* )
  +        #   determine architecture
  +        AT="${UNAME_MACHINE}"
  +        AP="${AT}"
  +        case "${AP}" in
  +            i[3-6]86 ) AP="iX86" ;;
  +        esac
  +        AC="${AP}"
  +        #   determine system
  +        r=`echo "${UNAME_RELEASE}" | sed -e 's/\(-.*\)$/[\1]/'`
  +        ST="NetBSD ${r}"
  +        SP="${ST}"
  +        SC="4.4BSD"
  +        ;;
  +
       #   GNU/Linux
       *:Linux:* )
           #   determine architecture
  @@ -475,6 +507,58 @@
           ST="[SGI ]IRIX ${v}"
           v="${UNAME_RELEASE}"
           SP="[SGI ]IRIX ${v}"
  +        SC="BSD"
  +        ;;
  +
  +    #   HP HP-UX
  +    *:HP-UX:* )
  +        #   determine architecture
  +        AT="${UNAME_MACHINE}"
  +        case "${AT}" in
  +            ia64 ) AT="IA64" ;;
  +            9000/[34]?? ) AT=M68K ;;
  +            9000/[678][0-9][0-9]) 
  +                sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
  +                sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
  +                case "${sc_cpu_version}" in
  +                    523 ) AT="HPPA1.0" ;;
  +                    528 ) AT="HPPA1.1" ;;
  +                    532 ) AT="HPPA2.0"
  +                        case "${sc_kernel_bits}" in
  +                            32 ) AT="${AT}n" ;;
  +                            64 ) AT="${AT}w" ;;
  +                        esac
  +                        ;;
  +                esac
  +                ;;
  +        esac
  +        AP="${AT}"
  +        case "${AP}" in
  +            HPPA* ) AP="HPPA" ;;
  +        esac
  +        AC="${AP}"
  +        #   determine system
  +        v=`echo "${UNAME_RELEASE}" | sed -e 's;^[^0-9]*;;'`
  +        ST="[HP ]HP-UX ${v}"
  +        SP="${ST}"
  +        SC="BSD"
  +        ;;
  +
  +    #   HP Tru64 (OSF1)
  +    *:OSF1:* )
  +        #   determine architecture
  +        AP="${UNAME_MACHINE}"
  +        case "${AP}" in
  +            alpha ) AP="Alpha" ;;
  +        esac
  +        alpha_type=`(/usr/sbin/psrinfo -v) 2>/dev/null |\
  +            sed -n -e 's/^.*The alpha \([^ ][^ ]*\).*processor.*$/\1/p' | head -n 1`
  +        AT="${AP}${alpha_type}"
  +        AC="${AP}"
  +        #   determine system
  +        v=`echo "${UNAME_RELEASE}" | sed -e 's;^[VTX];;'`
  +        ST="[HP ]Tru64 ${v}"
  +        SP="${ST}"
           SC="BSD"
           ;;
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Sep 29 14:53:16 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 24489771B6; Mon, 29 Sep 2003 14:53:16 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/platform/ platform.pod platform.sh
Message-Id: <20030929125316.24489771B6@mail.ossp.org>
Date: Mon, 29 Sep 2003 14:53:16 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Sep-2003 14:53:15
  Branch: HEAD                             Handle: 2003092913531500

  Modified files:
    ossp-pkg/platform       platform.pod platform.sh

  Log:
    add blind IBM AIX support; add platforms to manual page; cleanup and
    fix system classes

  Summary:
    Revision    Changes     Path
    1.4         +10 -0      ossp-pkg/platform/platform.pod
    1.12        +30 -11     ossp-pkg/platform/platform.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/platform/platform.pod
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 platform.pod
  --- ossp-pkg/platform/platform.pod	8 Sep 2003 19:03:03 -0000	1.3
  +++ ossp-pkg/platform/platform.pod	29 Sep 2003 12:53:15 -0000	1.4
  @@ -193,6 +193,16 @@
   
   =back
   
  +=head1 SUPPORT
  +
  +B<OSSP platform> currently knows the following particular Unix platforms
  +in detail: FreeBSD, NetBSD, OpenBSD, Linux, Sun Solaris, SCO UnixWare,
  +QNX Neutrino, SGI IRIX, HP HP-UX, HP Tru64, IBM AIX.
  +
  +All other Unix platforms are recognized through generic uname(1)
  +information and so usually can be identified sufficiently, although the
  +identification might be not as precise as possible.
  +
   =head1 SEE ALSO
   
   http://www.ossp.org/pkg/tool/platform/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/platform/platform.sh
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 platform.sh
  --- ossp-pkg/platform/platform.sh	29 Sep 2003 10:11:31 -0000	1.11
  +++ ossp-pkg/platform/platform.sh	29 Sep 2003 12:53:15 -0000	1.12
  @@ -344,8 +344,8 @@
           esac
           ;;
   
  -    #   OpenBSD
  -    *:OpenBSD:* )
  +    #   NetBSD
  +    *:NetBSD:* )
           #   determine architecture
           AT="${UNAME_MACHINE}"
           AP="${AT}"
  @@ -355,13 +355,16 @@
           AC="${AP}"
           #   determine system
           r=`echo "${UNAME_RELEASE}" | sed -e 's/\(-.*\)$/[\1]/'`
  -        ST="OpenBSD ${r}"
  +        ST="NetBSD ${r}"
           SP="${ST}"
  -        SC="4.4BSD"
  +        case "${r}" in
  +            0.* ) SC="4.3BSD" ;;
  +            *   ) SC="4.4BSD" ;;
  +        esac
           ;;
   
  -    #   NetBSD
  -    *:NetBSD:* )
  +    #   OpenBSD
  +    *:OpenBSD:* )
           #   determine architecture
           AT="${UNAME_MACHINE}"
           AP="${AT}"
  @@ -371,7 +374,7 @@
           AC="${AP}"
           #   determine system
           r=`echo "${UNAME_RELEASE}" | sed -e 's/\(-.*\)$/[\1]/'`
  -        ST="NetBSD ${r}"
  +        ST="OpenBSD ${r}"
           SP="${ST}"
           SC="4.4BSD"
           ;;
  @@ -456,7 +459,7 @@
                  -e 's;^5\.\([0-9][0-9]*\).*;\1;'`
           SP="[Sun ]Solaris $v"
           case "${UNAME_RELEASE}" in
  -            4.* ) SC="4.2BSD" ;;
  +            4.* ) SC="4.3BSD" ;;
               5.* ) SC="SVR4"   ;;
           esac
           ;;
  @@ -507,7 +510,7 @@
           ST="[SGI ]IRIX ${v}"
           v="${UNAME_RELEASE}"
           SP="[SGI ]IRIX ${v}"
  -        SC="BSD"
  +        SC="4.2BSD${opt_C}SVR3"
           ;;
   
       #   HP HP-UX
  @@ -541,7 +544,10 @@
           v=`echo "${UNAME_RELEASE}" | sed -e 's;^[^0-9]*;;'`
           ST="[HP ]HP-UX ${v}"
           SP="${ST}"
  -        SC="BSD"
  +        case "${v}" in
  +            10.*   ) SC="SVR4.2" ;;
  +            [7-9]* ) SC="SVR4"   ;;
  +        esac
           ;;
   
       #   HP Tru64 (OSF1)
  @@ -559,7 +565,20 @@
           v=`echo "${UNAME_RELEASE}" | sed -e 's;^[VTX];;'`
           ST="[HP ]Tru64 ${v}"
           SP="${ST}"
  -        SC="BSD"
  +        SC="OSF1"
  +        ;;
  +
  +    #   IBM AIX
  +    *:AIX:* )
  +        AT="${UNAME_MACHINE}"
  +        AP="${AT}"
  +        AC="${AP}"
  +        ST="[IBM ]AIX ${UNAME_RELEASE}"
  +        SP="${ST}"
  +        case "${UNAME_RELEASE}" in
  +            [12]* ) SC="SVR2" ;;
  +            *     ) SC="SVR4" ;;
  +        esac
           ;;
   
       #   TODO ...ADD YOUR NEW PLATFORM CHECK HERE... TODO
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  6 12:10:39 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DC4677719E; Mon,  6 Oct 2003 12:10:38 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ ChangeLog README fsl_version.c
Message-Id: <20031006101038.DC4677719E@mail.ossp.org>
Date: Mon,  6 Oct 2003 12:10:38 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   06-Oct-2003 12:10:38
  Branch: HEAD                             Handle: 2003100611103800

  Modified files:
    ossp-pkg/fsl            ChangeLog README fsl_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.23        +2  -2      ossp-pkg/fsl/ChangeLog
    1.38        +1  -1      ossp-pkg/fsl/README
    1.24        +9  -9      ossp-pkg/fsl/fsl_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 ChangeLog
  --- ossp-pkg/fsl/ChangeLog	25 Sep 2003 15:18:04 -0000	1.22
  +++ ossp-pkg/fsl/ChangeLog	6 Oct 2003 10:10:38 -0000	1.23
  @@ -8,7 +8,7 @@
   
     CHANGELOG
   
  -  Changes between 1.2.1 and 1.2.2 (25-Sep-2003)
  +  Changes between 1.2.1 and 1.3.0 (06-Oct-2003)
   
       *) change jitter option in file channel from flag to count.
          [Thomas Lotterer <thomas@lotterer.net>]
  @@ -38,7 +38,7 @@
   
       *) for compatiblity reasons, when debugging is enabled and
          openlog(2) is called without LOG_NDELAY no filedescriptor is
  -       consumed.  Prevously debugging unconditionally took one or more
  +       consumed.  Previously debugging unconditionally took one or more
          filedescriptors which violates POSIX.
   
       *) for compatiblity reasons, the library will no longer print any
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/README
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 README
  --- ossp-pkg/fsl/README	25 Sep 2003 16:59:37 -0000	1.37
  +++ ossp-pkg/fsl/README	6 Oct 2003 10:10:38 -0000	1.38
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_| |___/_|
    
     OSSP fsl - Faking/Flexible Syslog Library
  -  Version 1.3b1 (25-Sep-2003)
  +  Version 1.3.0 (06-Oct-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl_version.c
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 fsl_version.c
  --- ossp-pkg/fsl/fsl_version.c	25 Sep 2003 16:59:37 -0000	1.23
  +++ ossp-pkg/fsl/fsl_version.c	6 Oct 2003 10:10:38 -0000	1.24
  @@ -8,7 +8,7 @@
   #ifndef _FSL_VERSION_C_
   #define _FSL_VERSION_C_
   
  -#define FSL_VERSION 0x103101
  +#define FSL_VERSION 0x103200
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _FSL_VERSION_C_AS_HEADER_
   
   fsl_version_t fsl_version = {
  -    0x103101,
  -    "1.3b1",
  -    "1.3b1 (25-Sep-2003)",
  -    "This is OSSP fsl, Version 1.3b1 (25-Sep-2003)",
  -    "OSSP fsl 1.3b1 (25-Sep-2003)",
  -    "OSSP fsl/1.3b1",
  -    "@(#)OSSP fsl 1.3b1 (25-Sep-2003)",
  -    "$Id: fsl_version.c,v 1.23 2003/09/25 16:59:37 thl Exp $"
  +    0x103200,
  +    "1.3.0",
  +    "1.3.0 (06-Oct-2003)",
  +    "This is OSSP fsl, Version 1.3.0 (06-Oct-2003)",
  +    "OSSP fsl 1.3.0 (06-Oct-2003)",
  +    "OSSP fsl/1.3.0",
  +    "@(#)OSSP fsl 1.3.0 (06-Oct-2003)",
  +    "$Id: fsl_version.c,v 1.24 2003/10/06 10:10:38 thl Exp $"
   };
   
   #endif /* _FSL_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 10 16:07:50 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5CFBA771F7; Fri, 10 Oct 2003 16:07:50 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ ChangeLog fsl.c
Message-Id: <20031010140750.5CFBA771F7@mail.ossp.org>
Date: Fri, 10 Oct 2003 16:07:50 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   10-Oct-2003 16:07:50
  Branch: HEAD                             Handle: 2003101015074900

  Modified files:
    ossp-pkg/fsl            ChangeLog fsl.c

  Log:
    Sort valid fsl filenames before adding their contents to the buffer. This
    mostly fixes the problem of the 'drifting' fsl configuration, by ensuring
    that l2 sections from filenames with a postfix are placed last in the
    identifier matching logic.

  Summary:
    Revision    Changes     Path
    1.24        +8  -0      ossp-pkg/fsl/ChangeLog
    1.62        +47 -12     ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 ChangeLog
  --- ossp-pkg/fsl/ChangeLog	6 Oct 2003 10:10:38 -0000	1.23
  +++ ossp-pkg/fsl/ChangeLog	10 Oct 2003 14:07:49 -0000	1.24
  @@ -8,6 +8,14 @@
   
     CHANGELOG
   
  +  Changes between 1.3.0 and 1.3.1 (10-Oct-2003)
  +
  +    *) add logic to sort dirent filenames before adding their contents
  +       to the buffer. This mostly fixes the problem of the 'drifting'
  +       fsl configuration, by ensuring that l2 sections from filenames
  +       with a postfix are placed last in the identifier matching logic.
  +       [Michael Schloh von Bennewitz <michael@schloh.com>]
  +
     Changes between 1.2.1 and 1.3.0 (06-Oct-2003)
   
       *) change jitter option in file channel from flag to count.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl.c
  ============================================================================
  $ cvs diff -u -r1.61 -r1.62 fsl.c
  --- ossp-pkg/fsl/fsl.c	22 May 2003 14:01:55 -0000	1.61
  +++ ossp-pkg/fsl/fsl.c	10 Oct 2003 14:07:49 -0000	1.62
  @@ -371,6 +371,24 @@
       return rc;
   }
   
  +/* alphabetically compare one string with another, to use with qsort(3) */
  +static int fnamecmp(const void *str1, const void *str2)
  +{
  +    /* because the end goal is to sort an array of strings in alphabetical */
  +    /* decending order, tailor the bahaviour of this compare method to     */
  +    /* account for null strings that should go at the end of the array     */
  +    if (*(const char **)str1) {
  +        if (*(const char **)str2)
  +            return strcmp(*(const char **)str1, *(const char **)str2);
  +        else
  +            return (-1); /* only str2 was null, so str1 is lesser by default */
  +    }
  +    else if (*(const char **)str2)
  +        return (1); /* only str1 was null, so str2 is lesser by default */
  +    else
  +        return (0); /* both str1 and str2 were null, so they are equal */
  +}
  +
   /* read all possible files "fsl.*" into buffer */
   static fsl_rc_t readallfiles(buf_t *buffer)
   {
  @@ -380,7 +398,11 @@
       char *filename = NULL;
       char *cfgdir;
       char *prefix;
  -    int n;
  +    char **filearr = NULL;
  +    size_t filemem = 0;
  +    int filecnt = 0;
  +    int fileidx = 0;
  +    int n = 0;
   
       if (buffer == NULL)
           CU(FSL_ERR_ARG);
  @@ -395,20 +417,33 @@
   
       rc = FSL_ERR_ARG;
       while ((de = readdir(dp)) != NULL) {
  -        n = strlen(de->d_name);
  -        if (   (n >= strlen(prefix))
  +        if (   (strlen(de->d_name) >= strlen(prefix))
               && (strncmp(de->d_name, prefix, strlen(prefix)) == 0)) {
  -            if ((filename = (char *)malloc(strlen(cfgdir) + 1 + n + 1)) == NULL)
  +
  +            /* prepare to insert a new file string, so make room for one more */
  +            if ((filearr = (char **)realloc(filearr, filemem + sizeof(char *))) == NULL)
  +                CU(FSL_ERR_MEM);
  +            else
  +                filemem += sizeof(char *);
  +
  +            /* allocate for actual filename string from dirent and copy out */
  +            n = strlen(cfgdir) + strlen("/") + strlen(de->d_name) + 1;
  +            if ((filearr[filecnt] = (char *)malloc(n)) == NULL)
                   CU(FSL_ERR_MEM);
  -            filename[0] = '\0';
  -            strcat(filename, cfgdir);
  -            strcat(filename, "/");
  -            strcat(filename, de->d_name);
  -            if (appendfiletobuffer(buffer, filename) == FSL_OK)
  -                rc = FSL_OK;
  -            free(filename);
  -            filename = NULL;
  +            *filearr[filecnt] = '\0';
  +            strcat(filearr[filecnt], cfgdir);
  +            strcat(filearr[filecnt], "/");
  +            strcat(filearr[filecnt], de->d_name);
  +            filecnt++;
           }
  +    }
  +    qsort((void *)filearr, (size_t)filecnt, sizeof(char *), fnamecmp);
  +    while (fileidx < filecnt) { /* loop once for every string in sorted array */
  +        if (appendfiletobuffer(buffer, filearr[fileidx]) == FSL_OK)
  +            rc = FSL_OK;
  +        free(filearr[fileidx]);
  +        filearr[fileidx] = NULL;
  +        fileidx++;
       }
       CU(rc);
   CUS:
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct 13 15:18:29 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 202547721E; Mon, 13 Oct 2003 15:18:29 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ fsl.c
Message-Id: <20031013131829.202547721E@mail.ossp.org>
Date: Mon, 13 Oct 2003 15:18:29 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   13-Oct-2003 15:18:28
  Branch: HEAD                             Handle: 2003101314182800

  Modified files:
    ossp-pkg/fsl            fsl.c

  Log:
    make fnamecmp() more self-explanatory

  Summary:
    Revision    Changes     Path
    1.63        +13 -14     ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl.c
  ============================================================================
  $ cvs diff -u -r1.62 -r1.63 fsl.c
  --- ossp-pkg/fsl/fsl.c	10 Oct 2003 14:07:49 -0000	1.62
  +++ ossp-pkg/fsl/fsl.c	13 Oct 2003 13:18:28 -0000	1.63
  @@ -371,22 +371,21 @@
       return rc;
   }
   
  -/* alphabetically compare one string with another, to use with qsort(3) */
  +/* alphabetically compare two filenames, use with qsort(3) */
   static int fnamecmp(const void *str1, const void *str2)
   {
  -    /* because the end goal is to sort an array of strings in alphabetical */
  -    /* decending order, tailor the bahaviour of this compare method to     */
  -    /* account for null strings that should go at the end of the array     */
  -    if (*(const char **)str1) {
  -        if (*(const char **)str2)
  -            return strcmp(*(const char **)str1, *(const char **)str2);
  -        else
  -            return (-1); /* only str2 was null, so str1 is lesser by default */
  -    }
  -    else if (*(const char **)str2)
  -        return (1); /* only str1 was null, so str2 is lesser by default */
  -    else
  -        return (0); /* both str1 and str2 were null, so they are equal */
  +    if ((*(const char **)str1 != NULL) && (*(const char **)str2 != NULL))
  +        return strcmp(*(const char **)str1, *(const char **)str2);
  +
  +    /* this must never happen but be prepared for the impossible */
  +
  +    if ((*(const char **)str1 != NULL) && (*(const char **)str2 == NULL))
  +        return strcmp(*(const char **)str1, "");
  +
  +    if ((*(const char **)str1 == NULL) && (*(const char **)str2 != NULL))
  +        return strcmp("", *(const char **)str1);
  +
  +    return strcmp("", "");
   }
   
   /* read all possible files "fsl.*" into buffer */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct 13 15:35:52 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 44CB27721A; Mon, 13 Oct 2003 15:35:52 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ fsl.c
Message-Id: <20031013133552.44CB27721A@mail.ossp.org>
Date: Mon, 13 Oct 2003 15:35:52 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   13-Oct-2003 15:35:52
  Branch: HEAD                             Handle: 2003101314355100

  Modified files:
    ossp-pkg/fsl            fsl.c

  Log:
    remove unused filename; revamp while() into for() and repeat for
    cleanup sequence

  Summary:
    Revision    Changes     Path
    1.64        +6  -8      ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl.c
  ============================================================================
  $ cvs diff -u -r1.63 -r1.64 fsl.c
  --- ossp-pkg/fsl/fsl.c	13 Oct 2003 13:18:28 -0000	1.63
  +++ ossp-pkg/fsl/fsl.c	13 Oct 2003 13:35:51 -0000	1.64
  @@ -394,7 +394,6 @@
       fsl_rc_t rc;
       DIR *dp = NULL;
       struct dirent *de;
  -    char *filename = NULL;
       char *cfgdir;
       char *prefix;
       char **filearr = NULL;
  @@ -437,19 +436,18 @@
           }
       }
       qsort((void *)filearr, (size_t)filecnt, sizeof(char *), fnamecmp);
  -    while (fileidx < filecnt) { /* loop once for every string in sorted array */
  +    for (fileidx = 0; fileidx < filecnt; fileidx++)
           if (appendfiletobuffer(buffer, filearr[fileidx]) == FSL_OK)
               rc = FSL_OK;
  -        free(filearr[fileidx]);
  -        filearr[fileidx] = NULL;
  -        fileidx++;
  -    }
       CU(rc);
   CUS:
       if (dp != NULL)
           closedir(dp);
  -    if (filename != NULL)
  -        free(filename);
  +    if (filearr != NULL) {
  +        for (fileidx = 0; fileidx < filecnt; fileidx++)
  +            free(filearr[fileidx]);
  +        free(filearr);
  +    }
       return rc;
   }
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct 13 16:01:42 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7DFB277224; Mon, 13 Oct 2003 16:01:39 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ fsl.c
Message-Id: <20031013140139.7DFB277224@mail.ossp.org>
Date: Mon, 13 Oct 2003 16:01:39 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   13-Oct-2003 16:01:38
  Branch: HEAD                             Handle: 2003101315013800

  Modified files:
    ossp-pkg/fsl            fsl.c

  Log:
    improve readability, find and fix str1 == NULL bug

  Summary:
    Revision    Changes     Path
    1.65        +9  -6      ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl.c
  ============================================================================
  $ cvs diff -u -r1.64 -r1.65 fsl.c
  --- ossp-pkg/fsl/fsl.c	13 Oct 2003 13:35:51 -0000	1.64
  +++ ossp-pkg/fsl/fsl.c	13 Oct 2003 14:01:38 -0000	1.65
  @@ -374,16 +374,19 @@
   /* alphabetically compare two filenames, use with qsort(3) */
   static int fnamecmp(const void *str1, const void *str2)
   {
  -    if ((*(const char **)str1 != NULL) && (*(const char **)str2 != NULL))
  -        return strcmp(*(const char **)str1, *(const char **)str2);
  +    const char *s1 = *(const char **)str1;
  +    const char *s2 = *(const char **)str2;
  +
  +    if ((s1 != NULL) && (s2 != NULL))
  +        return strcmp(s1, s2);
   
       /* this must never happen but be prepared for the impossible */
   
  -    if ((*(const char **)str1 != NULL) && (*(const char **)str2 == NULL))
  -        return strcmp(*(const char **)str1, "");
  +    if ((s1 != NULL) && (s2 == NULL))
  +        return strcmp(s1, "");
   
  -    if ((*(const char **)str1 == NULL) && (*(const char **)str2 != NULL))
  -        return strcmp("", *(const char **)str1);
  +    if ((s1 == NULL) && (s2 != NULL))
  +        return strcmp("", s2);
   
       return strcmp("", "");
   }
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 17 19:39:31 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BB9F777247; Fri, 17 Oct 2003 19:39:30 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog aclocal.m4 devtool.conf pth_string...
Message-Id: <20031017173930.BB9F777247@mail.ossp.org>
Date: Fri, 17 Oct 2003 19:39:30 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-Oct-2003 19:39:30
  Branch: HEAD                             Handle: 2003101718392900

  Modified files:
    ossp-pkg/pth            ChangeLog aclocal.m4 devtool.conf pth_string.c

  Log:
    1. Use GCC 3.3 option "-fno-strict-aliasing" (if available) under
    Autoconf option "--enable-debug" because mainly pth_mctx.c contains
    important and correct pointer casting constructs which are not
    acceptable in "strict aliasing" for GCC.
    
    2. Upgraded to GNU libtool 1.5.

  Summary:
    Revision    Changes     Path
    1.608       +9  -0      ossp-pkg/pth/ChangeLog
    1.102       +1  -0      ossp-pkg/pth/aclocal.m4
    1.15        +1  -1      ossp-pkg/pth/devtool.conf
    1.10        +3  -3      ossp-pkg/pth/pth_string.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.607 -r1.608 ChangeLog
  --- ossp-pkg/pth/ChangeLog	3 Apr 2003 18:09:05 -0000	1.607
  +++ ossp-pkg/pth/ChangeLog	17 Oct 2003 17:39:29 -0000	1.608
  @@ -21,6 +21,15 @@
                     
     Changes between 2.0.0 and 2.0.1 (17-Feb-2003 to xx-XXX-2003)
   
  +   *) Use GCC 3.3 option "-fno-strict-aliasing" (if available) under
  +      Autoconf option "--enable-debug" because mainly pth_mctx.c
  +      contains important and correct pointer casting constructs which
  +      are not acceptable in "strict aliasing" for GCC.
  +      [Ralf S. Engelschall]
  +
  +   *) Upgraded to GNU libtool 1.5.
  +      [Ralf S. Engelschall]
  +
      *) Fixed implementation so that --enable-pthread now correctly
         implies --enable-syscall-soft.
         [Steve Alstrin <Steve.Alstrin@NetIQ.com>, Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.101 -r1.102 aclocal.m4
  --- ossp-pkg/pth/aclocal.m4	1 Jan 2003 15:49:11 -0000	1.101
  +++ ossp-pkg/pth/aclocal.m4	17 Oct 2003 17:39:29 -0000	1.102
  @@ -394,6 +394,7 @@
       WMORE="$WMORE -Wmissing-prototypes -Wmissing-declarations -Wnested-externs"
       AC_COMPILER_OPTION(wmore, -W<xxx>, $WMORE, CFLAGS="$CFLAGS $WMORE")
       AC_COMPILER_OPTION(wnolonglong, -Wno-long-long, -Wno-long-long, CFLAGS="$CFLAGS -Wno-long-long")
  +    AC_COMPILER_OPTION(fnostrictaliasing, -fno-strict-aliasing, -fno-strict-aliasing, CFLAGS="$CFLAGS -fno-strict-aliasing")
   else
       case "$CFLAGS" in
           *-g* ) ;;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 devtool.conf
  --- ossp-pkg/pth/devtool.conf	11 Feb 2003 13:19:27 -0000	1.14
  +++ ossp-pkg/pth/devtool.conf	17 Oct 2003 17:39:29 -0000	1.15
  @@ -4,7 +4,7 @@
   
   %autogen
       @autogen shtool   1.6.2 "1.6.*" echo version scpp mkdir install fixperm tarball
  -    @autogen libtool  1.4.3 "1.4*"
  +    @autogen libtool  1.5   "1.5*"
       @autogen autoconf 2.57  "2.5*"
   
   %autoclean
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_string.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 pth_string.c
  --- ossp-pkg/pth/pth_string.c	22 Mar 2003 20:28:42 -0000	1.9
  +++ ossp-pkg/pth/pth_string.c	17 Oct 2003 17:39:29 -0000	1.10
  @@ -485,12 +485,12 @@
   }
   
   static LDOUBLE
  -pow10(int exp)
  +pow10(int exponent)
   {
       LDOUBLE result = 1;
  -    while (exp) {
  +    while (exponent > 0) {
           result *= 10;
  -        exp--;
  +        exponent--;
       }
       return result;
   }
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 17 19:42:20 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 055BD77247; Fri, 17 Oct 2003 19:42:19 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ ChangeLog
Message-Id: <20031017174219.055BD77247@mail.ossp.org>
Date: Fri, 17 Oct 2003 19:42:19 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-Oct-2003 19:42:19
  Branch: HEAD                             Handle: 2003101718421900

  Modified files:
    ossp-pkg/sa             ChangeLog

  Log:
    Upgrade to GNU libtool 1.5

  Summary:
    Revision    Changes     Path
    1.26        +3  -0      ossp-pkg/sa/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 ChangeLog
  --- ossp-pkg/sa/ChangeLog	9 Feb 2003 14:43:28 -0000	1.25
  +++ ossp-pkg/sa/ChangeLog	17 Oct 2003 17:42:19 -0000	1.26
  @@ -13,6 +13,9 @@
   
     Changes between 1.0.5 and 1.1.0 (31-Jan-2003 to xx-Feb-2003)
   
  +   o Upgrade to GNU libtool 1.5.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
      o Fix memory leak in test suite (sa_test.c).
        [Ralf S. Engelschall <rse@engelschall.com>]
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Oct 21 20:13:18 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CA55377283; Tue, 21 Oct 2003 20:13:17 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ ChangeLog THANKS ossp-pkg/snmpdx/snmpdx.d...
Message-Id: <20031021181317.CA55377283@mail.ossp.org>
Date: Tue, 21 Oct 2003 20:13:17 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Oct-2003 20:13:17
  Branch: HEAD                             Handle: 2003102119131601

  Modified files:
    ossp-pkg/snmpdx         ChangeLog THANKS snmpdx.pl
    ossp-pkg/snmpdx/snmpdx.d
                            swOp.pm

  Log:
    1. Get rid of "use IO;" deprecation warnings under Perl 5.8.1
    2. Do not provide "snmpdx::swOp*" OIDs only if "rpm" is really found.
    
    Submitted by: Peter Eckel <Peter.Eckel@Eckel-EDV.de>

  Summary:
    Revision    Changes     Path
    1.14        +8  -0      ossp-pkg/snmpdx/ChangeLog
    1.8         +1  -0      ossp-pkg/snmpdx/THANKS
    1.7         +1  -0      ossp-pkg/snmpdx/snmpdx.d/swOp.pm
    1.10        +2  -1      ossp-pkg/snmpdx/snmpdx.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 ChangeLog
  --- ossp-pkg/snmpdx/ChangeLog	20 Sep 2003 11:10:40 -0000	1.13
  +++ ossp-pkg/snmpdx/ChangeLog	21 Oct 2003 18:13:16 -0000	1.14
  @@ -9,6 +9,14 @@
     ChangeLog
     =========
   
  +  Changes between 0.2.7 and 0.2.8 (20-Sep-2003 to 21-Oct-2003):
  +
  +   *) Get rid of "use IO;" deprecation warnings under Perl 5.8.1
  +      [Peter Eckel <Peter.Eckel@Eckel-EDV.de>]
  +
  +   *) Do not provide "snmpdx::swOp*" OIDs only if "rpm" is really found.
  +      [Peter Eckel <Peter.Eckel@Eckel-EDV.de>]
  +
     Changes between 0.2.6 and 0.2.7 (10-Sep-2003 to 20-Sep-2003):
   
      *) Reimplemented the implementation of sysVMRam* for FreeBSD
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/THANKS
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 THANKS
  --- ossp-pkg/snmpdx/THANKS	10 Sep 2003 13:30:47 -0000	1.7
  +++ ossp-pkg/snmpdx/THANKS	21 Oct 2003 18:13:16 -0000	1.8
  @@ -12,6 +12,7 @@
     Credit has to be given to the following people who contributed ideas,
     stuff, bugfixes, hints etc. (in alphabetical order):
   
  +  o Peter Eckel              <Peter.Eckel@Eckel-EDV.de>
     o Christoph Schug          <chris@schug.net>
   
     ...and all other OSSP snmpdx users who gave me feedback but I've forgot.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/swOp.pm
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 swOp.pm
  --- ossp-pkg/snmpdx/snmpdx.d/swOp.pm	10 Sep 2003 15:01:46 -0000	1.6
  +++ ossp-pkg/snmpdx/snmpdx.d/swOp.pm	21 Oct 2003 18:13:17 -0000	1.7
  @@ -39,6 +39,7 @@
       #   query details via rpm(1)
       my $out = $self->{-ctx}->{-sys}->run(
           "rpm -qa --qf '[%{NAME} %{VERSION} %{RELEASE} %{BUILDTIME} %{INSTALLTIME}\\n]'", "10m");
  +    return if ($out->{-stdout} eq '');
   
       #   parse details into internal structure
       my $pkg = [];
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.pl
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 snmpdx.pl
  --- ossp-pkg/snmpdx/snmpdx.pl	19 Sep 2003 10:32:44 -0000	1.9
  +++ ossp-pkg/snmpdx/snmpdx.pl	21 Oct 2003 18:13:16 -0000	1.10
  @@ -32,7 +32,8 @@
   use warnings;
   use FindBin;
   use Getopt::Long;
  -use IO;
  +use IO::Handle;
  +use IO::File;
   
   #   program information
   my $prg = {
  @@ .

From ossp-cvs-owner@ossp.org  Tue Oct 21 20:14:29 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E701277283; Tue, 21 Oct 2003 20:14:28 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ README VERSION
Message-Id: <20031021181428.E701277283@mail.ossp.org>
Date: Tue, 21 Oct 2003 20:14:28 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Oct-2003 20:14:28
  Branch: HEAD                             Handle: 2003102119142800

  Modified files:
    ossp-pkg/snmpdx         README VERSION

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.12        +1  -1      ossp-pkg/snmpdx/README
    1.10        +1  -1      ossp-pkg/snmpdx/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/README
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 README
  --- ossp-pkg/snmpdx/README	20 Sep 2003 11:11:00 -0000	1.11
  +++ ossp-pkg/snmpdx/README	21 Oct 2003 18:14:28 -0000	1.12
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/_| |_|_| |_| |_| .__/ \__,_/_/\_\
                                                          |_|
     OSSP snmpdx - SNMP Daemon Extension
  -  Version 0.2.7 (20-Sep-2003)
  +  Version 0.2.8 (21-Oct-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/VERSION
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 VERSION
  --- ossp-pkg/snmpdx/VERSION	20 Sep 2003 11:11:00 -0000	1.9
  +++ ossp-pkg/snmpdx/VERSION	21 Oct 2003 18:14:28 -0000	1.10
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP snmpdx (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP snmpdx, Version 0.2.7 (20-Sep-2003)
  +  This is OSSP snmpdx, Version 0.2.8 (21-Oct-2003)
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Oct 21 20:19:10 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9BD6677283; Tue, 21 Oct 2003 20:19:10 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/tool/ index.wml ossp-w...
Message-Id: <20031021181910.9BD6677283@mail.ossp.org>
Date: Tue, 21 Oct 2003 20:19:10 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   21-Oct-2003 20:19:10
  Branch: HEAD                             Handle: 2003102119190802

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/snmpdx
                            index.wml

  Log:
    release OSSP snmpdx 0.2.8

  Summary:
    Revision    Changes     Path
    1.66        +3  -0      ossp-web/new/news.txt
    1.32        +1  -1      ossp-web/pkg/tool/index.wml
    1.6         +2  -2      ossp-web/pkg/tool/snmpdx/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.65 -r1.66 news.txt
  --- ossp-web/new/news.txt	20 Sep 2003 11:14:05 -0000	1.65
  +++ ossp-web/new/news.txt	21 Oct 2003 18:19:08 -0000	1.66
  @@ -1,3 +1,6 @@
  +21-Oct-2003: Released T<OSSP snmpdx> 0.2.8
  +06-Oct-2003: Released L<OSSP fsl> 1.3.0
  +25-Sep-2003: Released L<OSSP l2> 0.9.4
   20-Sep-2003: Released T<OSSP snmpdx> 0.2.7
   15-Sep-2003: Released L<OSSP fsl> 1.2.1
   15-Sep-2003: Released L<OSSP l2> 0.9.3
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 index.wml
  --- ossp-web/pkg/tool/index.wml	20 Sep 2003 11:14:05 -0000	1.31
  +++ ossp-web/pkg/tool/index.wml	21 Oct 2003 18:19:09 -0000	1.32
  @@ -56,6 +56,6 @@
   	        done=90 stable="none" unstable="none">
     <pkg_item name="snmpdx" longname="OSSP snmpdx" type="tool"
               desc="SNMP Daemon Extension"
  -	        done=80 stable="none" unstable="0.2.7">
  +	        done=80 stable="none" unstable="0.2.8">
   </pkg_list>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/snmpdx/index.wml
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 index.wml
  --- ossp-web/pkg/tool/snmpdx/index.wml	20 Sep 2003 11:14:06 -0000	1.5
  +++ ossp-web/pkg/tool/snmpdx/index.wml	21 Oct 2003 18:19:10 -0000	1.6
  @@ -21,7 +21,7 @@
   
   <pkg_status
       stable="none" stable_date="none"
  -    unstable="0.2.7" unstable_date="20-Sep-2003"
  +    unstable="0.2.8" unstable_date="21-Oct-2003"
   	genesis="August 2003" done=80>
   
   <h2>Source</h2>
  @@ -31,7 +31,7 @@
       url=$(FTP_ROOT_URL)/pkg/tool/snmpdx/
       directory=$(FTP_ROOT_DIR)/pkg/tool/snmpdx/
       files="snmpdx-*.tar.gz" 
  -	stable="none" unstable="snmpdx-0.2.7.tar.gz">
  +	stable="none" unstable="snmpdx-0.2.8.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 24 20:24:36 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E185C7728F; Fri, 24 Oct 2003 20:24:35 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var/ ChangeLog devtool.conf
Message-Id: <20031024182435.E185C7728F@mail.ossp.org>
Date: Fri, 24 Oct 2003 20:24:35 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Oct-2003 20:24:35
  Branch: HEAD                             Handle: 2003102419243500

  Modified files:
    ossp-pkg/var            ChangeLog devtool.conf

  Log:
    switch to libtool 1.5

  Summary:
    Revision    Changes     Path
    1.2         +5  -0      ossp-pkg/var/ChangeLog
    1.8         +1  -1      ossp-pkg/var/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ChangeLog
  --- ossp-pkg/var/ChangeLog	14 Feb 2003 21:17:06 -0000	1.1
  +++ ossp-pkg/var/ChangeLog	24 Oct 2003 18:24:35 -0000	1.2
  @@ -11,6 +11,11 @@
     This is a list of all source changes to OSSP var.
     For less details please have a look at the NEWS file.
   
  +  Changes between 1.0.0 and 1.0.1 (14-Feb-2002 to xx-Oct-2003)
  +
  +   o Upgraded build environment to GNU libtool 1.5
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
     Changes between 0.9.0 and 1.0.0 (08-Mar-2002 to 14-Feb-2003)
   
      o Adjusted C source code to allow it to be built also with 
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 devtool.conf
  --- ossp-pkg/var/devtool.conf	14 Feb 2003 21:17:07 -0000	1.7
  +++ ossp-pkg/var/devtool.conf	24 Oct 2003 18:24:35 -0000	1.8
  @@ -4,7 +4,7 @@
   
   %autogen
       @autogen shtool   1.6.2 "1.[56].*" all
  -    @autogen libtool  1.4.3 "1.4*"
  +    @autogen libtool  1.5   "1.5*"
       @autogen autoconf 2.57  "2.5[3-9]*"
   
   %autoclean
  @@ .

From ossp-cvs-owner@ossp.org  Sat Oct 25 21:56:08 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 54EFB772A4; Sat, 25 Oct 2003 21:56:08 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var/ var_test.c
Message-Id: <20031025195608.54EFB772A4@mail.ossp.org>
Date: Sat, 25 Oct 2003 21:56:08 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Oct-2003 21:56:08
  Branch: HEAD                             Handle: 2003102520560700

  Modified files:
    ossp-pkg/var            var_test.c

  Log:
    use 'expect' instead of 'exp' because most systems have a exp(3)
    function and so the symbols shadow

  Summary:
    Revision    Changes     Path
    1.49        +10 -10     ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var_test.c
  ============================================================================
  $ cvs diff -u -r1.48 -r1.49 var_test.c
  --- ossp-pkg/var/var_test.c	14 Feb 2003 21:17:07 -0000	1.48
  +++ ossp-pkg/var/var_test.c	25 Oct 2003 19:56:07 -0000	1.49
  @@ -317,7 +317,7 @@
       var_t *var;
       char *err;
       char *fmt;
  -    char *exp;
  +    char *expect;
       char *got;
   
       ts_test_check(TS_CTX, "create environment");
  @@ -334,15 +334,15 @@
   
       /* check trivial formatting */
       fmt = "foo";
  -    exp = "foo";
  +    expect = "foo";
       ts_test_check(TS_CTX, "formatting \"%s\"", fmt);
       if ((rc = var_format(var, &got, 1, fmt)) != VAR_OK) {
           var_strerror(var, rc, &err);
           ts_test_fail(TS_CTX, "var_format: %s (%d)", err, rc);
           return;
       }
  -    if (strcmp(got, exp) != 0) {
  -        ts_test_fail(TS_CTX, "var_format: expected \"%s\", got \"%s\"\n", exp, got);
  +    if (strcmp(got, expect) != 0) {
  +        ts_test_fail(TS_CTX, "var_format: expected \"%s\", got \"%s\"\n", expect, got);
           free(got);
           return;
       }
  @@ -350,15 +350,15 @@
   
       /* check real formatting */
       fmt = "foo<%s><%d><%c>quux";
  -    exp = "foo<bar><123><x>quux";
  +    expect = "foo<bar><123><x>quux";
       ts_test_check(TS_CTX, "formatting \"%s\"", fmt);
       if ((rc = var_format(var, &got, 1, fmt, "bar", 123, 'x')) != VAR_OK) {
           var_strerror(var, rc, &err);
           ts_test_fail(TS_CTX, "var_format: %s (%d)", err, rc);
           return;
       }
  -    if (strcmp(got, exp) != 0) {
  -        ts_test_fail(TS_CTX, "var_format: expected \"%s\", got \"%s\"\n", exp, got);
  +    if (strcmp(got, expect) != 0) {
  +        ts_test_fail(TS_CTX, "var_format: expected \"%s\", got \"%s\"\n", expect, got);
           free(got);
           return;
       }
  @@ -366,15 +366,15 @@
   
       /* check combined formatting and expansion */
       fmt = "foo<${ARRAY[%d]}>bar";
  -    exp = "foo<entry1>bar";
  +    expect = "foo<entry1>bar";
       ts_test_check(TS_CTX, "formatting \"%s\"", fmt);
       if ((rc = var_format(var, &got, 1, fmt, 1)) != VAR_OK) {
           var_strerror(var, rc, &err);
           ts_test_fail(TS_CTX, "var_format: %s (%d)", err, rc);
           return;
       }
  -    if (strcmp(got, exp) != 0) {
  -        ts_test_fail(TS_CTX, "var_format: expected \"%s\", got \"%s\"\n", exp, got);
  +    if (strcmp(got, expect) != 0) {
  +        ts_test_fail(TS_CTX, "var_format: expected \"%s\", got \"%s\"\n", expect, got);
           free(got);
           return;
       }
  @@ .

From ossp-cvs-owner@ossp.org  Sun Oct 26 11:12:19 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8EA4377296; Sun, 26 Oct 2003 11:12:19 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/platform/ platform.sh
Message-Id: <20031026101219.8EA4377296@mail.ossp.org>
Date: Sun, 26 Oct 2003 11:12:19 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Oct-2003 11:12:19
  Branch: HEAD                             Handle: 2003102610121800

  Modified files:
    ossp-pkg/platform       platform.sh

  Log:
    - Recognize AMD64 architecture under Linux
    - correctly recognize SuSE version through "VERSION = xxx" in /etc/SuSE-config
    - add Apple MacOS X Darwin detection support
    - provide more robust detection for unknown platforms

  Summary:
    Revision    Changes     Path
    1.13        +28 -3      ossp-pkg/platform/platform.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/platform/platform.sh
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 platform.sh
  --- ossp-pkg/platform/platform.sh	29 Sep 2003 12:53:15 -0000	1.12
  +++ ossp-pkg/platform/platform.sh	26 Oct 2003 10:12:18 -0000	1.13
  @@ -383,6 +383,9 @@
       *:Linux:* )
           #   determine architecture
           AT="${UNAME_MACHINE}"
  +        case "${AT}" in
  +           x86_64 ) AT='AMD64' ;;
  +        esac
           AP="${AT}"
           case "${AP}" in
              i[3-6]86 ) AP='iX86' ;;
  @@ -409,7 +412,7 @@
                   [ ".${tagfile}" = .x ] && continue
                   [ ! -f "/etc/${tagfile}" ] && continue
                   n=`echo ${tagfile} | sed -e 's/[_-]release$//' -e 's/[_-]version$//'`
  -                v=`cat /etc/${tagfile} | grep '[0-9]' | head -1 |\
  +                v=`(grep VERSION /etc/${tagfile}; cat /etc/${tagfile}) | grep '[0-9]' | head -1 |\
                      sed -e 's/^/#/' \
                          -e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' \
                          -e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' \
  @@ -581,6 +584,22 @@
           esac
           ;;
   
  +    #   Apple MacOS X Darwin
  +    *:Darwin:* )
  +        AT=`uname -p`
  +        case "${AT}" in
  +            powerpc ) AT="PPC" ;;
  +        esac
  +        AP="${AT}"
  +        AC="${AP}"
  +        case "${AC}" in
  +            i?86 ) AC="iX86" ;;
  +        esac
  +        ST="[Apple ]${UNAME_SYSTEM} ${UNAME_RELEASE}"
  +        SP="${ST}"
  +        SC="4.4BSD${opt_C}Mach3"
  +        ;;
  +
       #   TODO ...ADD YOUR NEW PLATFORM CHECK HERE... TODO
       # *:XXX:* )
       #   ...
  @@ -588,10 +607,16 @@
   
       #   ...A STILL UNKNOWN PLATFORM...
       * )
  -        AT="${UNAME_MACHINE}"
  +        AT=`echo "${UNAME_MACHINE}" | sed -e "s; ;${opt_C};g"`
           AP="${AT}"
           AC="${AP}"
  -        ST="${UNAME_SYSTEM} ${UNAME_RELEASE}"
  +        v=`echo "${UNAME_RELEASE}" |\
  +           sed -e 's/^/#/' \
  +               -e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' \
  +               -e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' \
  +               -e 's/^#[^0-9]*\([0-9][0-9]*\).*$/\1/' \
  +               -e 's/^#.*$/?/'`
  +        ST="${UNAME_SYSTEM} ${v}"
           SP="${ST}"
           SC="${SP}"
           ;;
  @@ .

From ossp-cvs-owner@ossp.org  Sun Oct 26 12:31:13 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 934E777296; Sun, 26 Oct 2003 12:31:13 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/platform/ platform.sh
Message-Id: <20031026113113.934E777296@mail.ossp.org>
Date: Sun, 26 Oct 2003 12:31:13 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Oct-2003 12:31:13
  Branch: HEAD                             Handle: 2003102611311200

  Modified files:
    ossp-pkg/platform       platform.sh

  Log:
    remove trailing blanks

  Summary:
    Revision    Changes     Path
    1.14        +7  -7      ossp-pkg/platform/platform.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/platform/platform.sh
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 platform.sh
  --- ossp-pkg/platform/platform.sh	26 Oct 2003 10:12:18 -0000	1.13
  +++ ossp-pkg/platform/platform.sh	26 Oct 2003 11:31:12 -0000	1.14
  @@ -231,7 +231,7 @@
               ;;
           web )
               #   non-whitespace HTTP Server-header id
  -            opt_F="%<ap>-%<sp>"
  +            opt_F="%<sp>-%<ap>"
               opt_S="/"
               opt_C="+"
               ;;
  @@ -442,7 +442,7 @@
           #   determine architecture
           AT="${UNAME_MACHINE}"
           case "${AT}" in
  -            i86pc ) AT="iX86" ;; 
  +            i86pc ) AT="iX86" ;;
           esac
           AP="${AT}"
           case "${AP}" in
  @@ -472,7 +472,7 @@
           #   determine architecture
           AT="${UNAME_MACHINE}"
           case "${AT}" in
  -            i[3-6]86 | ix86at ) AT="iX86" ;; 
  +            i[3-6]86 | ix86at ) AT="iX86" ;;
           esac
           AP="${AT}"
           #   determine system
  @@ -487,7 +487,7 @@
           #   determine architecture
           AT="${UNAME_MACHINE}"
           case "${AT}" in
  -            x86pc ) AT="iX86" ;; 
  +            x86pc ) AT="iX86" ;;
           esac
           AP="${AT}"
           #   determine system
  @@ -504,8 +504,8 @@
           AT="${UNAME_MACHINE}"
           AP="${AT}"
           case "${AP}:${UNAME_SYSTEM}" in
  -            IP*:IRIX64 ) AP="MIPS64" ;; 
  -            IP*:*      ) AP="MIPS"   ;; 
  +            IP*:IRIX64 ) AP="MIPS64" ;;
  +            IP*:*      ) AP="MIPS"   ;;
           esac
           AC="${AP}"
           #   determine system
  @@ -523,7 +523,7 @@
           case "${AT}" in
               ia64 ) AT="IA64" ;;
               9000/[34]?? ) AT=M68K ;;
  -            9000/[678][0-9][0-9]) 
  +            9000/[678][0-9][0-9])
                   sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
                   sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
                   case "${sc_cpu_version}" in
  @@ .

From ossp-cvs-owner@ossp.org  Sun Oct 26 12:34:45 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8AD9A77296; Sun, 26 Oct 2003 12:34:45 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/platform/ platform.pod
Message-Id: <20031026113445.8AD9A77296@mail.ossp.org>
Date: Sun, 26 Oct 2003 12:34:45 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Oct-2003 12:34:45
  Branch: HEAD                             Handle: 2003102611344400

  Modified files:
    ossp-pkg/platform       platform.pod

  Log:
    improve documentation

  Summary:
    Revision    Changes     Path
    1.5         +76 -20     ossp-pkg/platform/platform.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/platform/platform.pod
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 platform.pod
  --- ossp-pkg/platform/platform.pod	29 Sep 2003 12:53:15 -0000	1.4
  +++ ossp-pkg/platform/platform.pod	26 Oct 2003 11:34:44 -0000	1.5
  @@ -59,13 +59,16 @@
   B<OSSP platform> is a flexible Unix platform identification program.
   It distinguishes a platform according to its I<hardware architecture>
   and I<operating system>. For both there is a I<class>, I<product> and
  -I<technology> identification. For all of those six identifications,
  -there is a I<verbose>, I<regular> and I<concise> version. This leads to
  -eithteen (2x3x3) available identification strings for each platform,
  -from which usually 2 are choosen in a particular situation. This is
  -done by assembling the platform identification string using a I<FORMAT>
  -string containing one or more identification constructs of the forms
  -"C<%xx>", "C<%E<lt>xxE<gt>>". "C<%[xx]>", and "C<%{xx}>".
  +I<technology> identification. For each of those six identifications,
  +there is a I<verbose>, I<regular> and I<concise> version.
  +
  +This leads to eithteen (2x3x3) available identification strings for each
  +platform, from which usually 2 are choosen in a particular situation.
  +This is done by assembling the platform identification string using a
  +I<FORMAT> string containing one or more identification constructs of the
  +forms "C<%[xx]>" (verbose), "C<%{xx}>" (regular) and "C<%E<lt>xxE<gt>>"
  +(concise).
  +
   
   =head1 OPTIONS
   
  @@ -86,18 +89,23 @@
    %[ac]    verbose hardware architecture class
    %{ac}    regular hardware architecture class
    %<ac>    concise hardware architecture class
  +
    %[ap]    verbose hardware architecture product
    %{ap}    regular hardware architecture product
    %<ap>    concise hardware architecture product
  +
    %[at]    verbose hardware architecture technology
    %{at}    regular hardware architecture technology
    %<at>    concise hardware architecture technology
  +
    %[sc]    verbose operating system class
    %{sc}    regular operating system class
    %<sc>    concise operating system class
  +
    %[sp]    verbose operating system product
    %{sp}    regular operating system product
    %<sp>    concise operating system product
  +
    %[st]    verbose operating system technology
    %{st}    regular operating system technology
    %<st>    concise operating system technology
  @@ -145,13 +153,58 @@
   =item B<-t>, B<--type> I<TYPE>
   
   This option is a meta option which internally sets options B<-F>, B<-S>,
  -B<-C>, B<-L>, B<-U>, B<-v> or B<-c> according to I<TYPE>. It can be
  -used to easily specify various commonly known outputs. The following
  -I<TYPE>s are available: "C<binary>" for binary package id (OpenPKG
  -RPM), "C<build>" for build time checking (OpenPKG RPM), "C<gnu> for GNU
  -F<config.guess> style id "C<web>" for non-whitespace HTTP Server-header
  -id, "C<summary>" for human readable verbose summary information, and
  -"C<all-in-one>" for an all-in-one full-table information.
  +B<-C>, B<-L>, B<-U>, B<-v> or B<-c> according to I<TYPE>. It can be used
  +to easily specify various commonly known outputs. The following I<TYPE>s
  +are available:
  +
  +=over 4
  +
  +=item B<binary>
  +
  +Binary Package Id (OpenPKG RPM).
  +This is equal to "C<-F '%<ap>-%<sp>' -L -S '' -C '+'>"
  +and results in outputs like "C<ix86-freebsd4.9>" and "C<ix86-debian3.0>".
  +
  +=item B<build>
  +
  +Build-Time Checking (OpenPKG RPM).
  +This is equal to "C<-F '%<at>-%<st>' -L -S '' -C '+'>"
  +and results in outputs like "C<i686-freebsd4.9>" and "C<i586-linux2.4>".
  +
  +=item B<gnu>
  +
  +GNU F<config.guess> Style Id.
  +This is similar to B<build> and is equal to "C<-F '"%<at>-unknown-%<st>' -L -S '' -C '+'>"
  +and results in outputs like "C<i686-unknown-freebsd4.9>" and "C<i586-unknown-linux2.4>".
  +
  +=item B<web>
  +
  +HTTP Server Header Id.
  +This is equal to "C<-F '"%<sp>-%<ac>' -S '/' -C '+'>"
  +and results in outputs like "C<FreeBSD/4.9-iX86>" and "C<Debian/3.0-iX86>".
  +
  +=item B<summary>
  +
  +Human Readable Verbose Summary Information. This is equal to "C<-F
  +'Class: %[sc] (%[ac])\nProduct: %[sp] (%[ap])\nTechnology: %[st]
  +(%[at])' -S ' ' -C '/'>" and results in outputs like:
  +
  + Class:      4.4BSD (iX86)
  + Product:    FreeBSD 4.9-RC (iX86)
  + Technology: FreeBSD 4.9-RC (i686)
  +
  +and
  +
  + Class:      LSB (iX86)
  + Product:    Debian GNU/Linux 3.0 (iX86)
  + Technology: GNU/Linux 2.2/2.4 (i686)
  +
  +=item B<all-in-one>
  +
  +All-In-One Full-Table Information. This just outputs really
  +all 2x2x3 identification strings as a table.
  +
  +=back
   
   =item B<-d>, B<--debug>
   
  @@ -197,7 +250,8 @@
   
   B<OSSP platform> currently knows the following particular Unix platforms
   in detail: FreeBSD, NetBSD, OpenBSD, Linux, Sun Solaris, SCO UnixWare,
  -QNX Neutrino, SGI IRIX, HP HP-UX, HP Tru64, IBM AIX.
  +QNX Neutrino, SGI IRIX, HP HP-UX, HP Tru64, IBM AIX and Apple MacOS X
  +Darwin.
   
   All other Unix platforms are recognized through generic uname(1)
   information and so usually can be identified sufficiently, although the
  @@ -215,15 +269,17 @@
   Engelschall> for use in the B<OSSP> and B<OpenPKG> projects. It was
   prompted by the need in B<OpenPKG> to have both product (for RPM
   filenames) and technology (for build-time decisions) identifiers for the
  -Unix platforms packages are maintained for. It was inspired by B<GNU>
  -F<config.guess> and older B<GNU shtool> F<guessos> command.
  +Unix platforms, OpenPKG packages are maintained for. It was inspired by
  +the B<GNU> F<config.guess> and the old B<GNU shtool> F<guessos> command.
   
   The major difference to B<GNU> F<config.guess> is that B<OSSP platform>
   does not use a I<vendor> identification (cannot be determined most of
  -the time and is not used at all in all projects I've ever seen), is
  -a lot more flexible (class, product and technology identifications
  +the time and is not used at all in all projects I've ever seen) and
  +is a lot more flexible (class, product and technology identifications
   combined with verbose, regular and consise outputs). The drawback of
  -B<OSSP platform> is that it (still) knows less particular platforms.
  +B<OSSP platform> is that it (still) knows less particular platforms,
  +although the generic platform identification is sufficient enough most
  +of the time.
   
   =head1 AUTHOR
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Oct 28 10:31:50 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 23E7C772BF; Tue, 28 Oct 2003 10:31:50 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/platform/ platform.sh
Message-Id: <20031028093150.23E7C772BF@mail.ossp.org>
Date: Tue, 28 Oct 2003 10:31:50 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Oct-2003 10:31:49
  Branch: HEAD                             Handle: 2003102809314900

  Modified files:
    ossp-pkg/platform       platform.sh

  Log:
    correctly support Solaris 10

  Summary:
    Revision    Changes     Path
    1.15        +1  -1      ossp-pkg/platform/platform.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/platform/platform.sh
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 platform.sh
  --- ossp-pkg/platform/platform.sh	26 Oct 2003 11:31:12 -0000	1.14
  +++ ossp-pkg/platform/platform.sh	28 Oct 2003 09:31:49 -0000	1.15
  @@ -458,7 +458,7 @@
           ST="[Sun ]SunOS ${UNAME_RELEASE}"
           v=`echo "${UNAME_RELEASE}" |\
              sed -e 's;^4\.;1.;' \
  -               -e 's;^5\.\([0-6]\).*;2.\1;' \
  +               -e 's;^5\.\([0-6]\)[^0-9]*$;2.\1;' \
                  -e 's;^5\.\([0-9][0-9]*\).*;\1;'`
           SP="[Sun ]Solaris $v"
           case "${UNAME_RELEASE}" in
  @@ .

From ossp-cvs-owner@ossp.org  Tue Oct 28 16:27:03 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8180F772C3; Tue, 28 Oct 2003 16:27:03 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ devtool.conf ossp-pkg/fsl/ devtool.conf ossp...
Message-Id: <20031028152703.8180F772C3@mail.ossp.org>
Date: Tue, 28 Oct 2003 16:27:03 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   28-Oct-2003 16:27:03
  Branch: HEAD                             Handle: 2003102815270101

  Modified files:
    ossp-pkg/cfg            devtool.conf
    ossp-pkg/fsl            devtool.conf
    ossp-pkg/l2             devtool.conf
    ossp-pkg/pcre           devtool.conf

  Log:
    uprev libtool support to 1.5

  Summary:
    Revision    Changes     Path
    1.11        +1  -1      ossp-pkg/cfg/devtool.conf
    1.20        +1  -1      ossp-pkg/fsl/devtool.conf
    1.12        +1  -1      ossp-pkg/l2/devtool.conf
    1.6         +1  -1      ossp-pkg/pcre/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 devtool.conf
  --- ossp-pkg/cfg/devtool.conf	6 Jan 2003 11:17:43 -0000	1.10
  +++ ossp-pkg/cfg/devtool.conf	28 Oct 2003 15:27:01 -0000	1.11
  @@ -30,7 +30,7 @@
   
   %autogen
       @autogen shtool   1.6.2 "1.6.*" all
  -    @autogen libtool  1.4.3 "1.4*"
  +    @autogen libtool  1.5 "1.[45]*"
       @autogen autoconf 2.57  "2.5[4-9]*"
   
   %autoclean
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 devtool.conf
  --- ossp-pkg/fsl/devtool.conf	22 May 2003 12:31:46 -0000	1.19
  +++ ossp-pkg/fsl/devtool.conf	28 Oct 2003 15:27:01 -0000	1.20
  @@ -11,7 +11,7 @@
   
   %autogen
       @autogen shtool   1.6.2 "1.6.*" all
  -    @autogen libtool  1.4.3 "1.4*"
  +    @autogen libtool  1.5 "1.[45]*"
       @autogen autoconf 2.57  "2.5[4-9]*"
   
       for name in l2 cfg pcre; do
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 devtool.conf
  --- ossp-pkg/l2/devtool.conf	30 Jun 2003 14:15:46 -0000	1.11
  +++ ossp-pkg/l2/devtool.conf	28 Oct 2003 15:27:02 -0000	1.12
  @@ -30,7 +30,7 @@
   
   %autogen
       @autogen shtool   1.6.2 "1.6.*" all
  -    @autogen libtool  1.4.3 "1.4*"
  +    @autogen libtool  1.5 "1.[45]*"
       @autogen autoconf 2.57  "2.5[6-9]*"
   
   %autoclean
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pcre/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 devtool.conf
  --- ossp-pkg/pcre/devtool.conf	30 Jan 2003 19:07:40 -0000	1.5
  +++ ossp-pkg/pcre/devtool.conf	28 Oct 2003 15:27:02 -0000	1.6
  @@ -4,7 +4,7 @@
   
   %autogen
       @autogen shtool   1.6.2 "1.6.*" echo install mkdir fixperm tarball
  -    @autogen libtool  1.4.3 "1.4*"
  +    @autogen libtool  1.5 "1.[45]*"
       @autogen autoconf 2.57  "2.5[3-9]*"
   
   %autoclean
  @@ .

From ossp-cvs-owner@ossp.org  Tue Oct 28 16:46:40 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9F5DB772C3; Tue, 28 Oct 2003 16:46:40 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ ChangeLog fsl.ac
Message-Id: <20031028154640.9F5DB772C3@mail.ossp.org>
Date: Tue, 28 Oct 2003 16:46:40 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   28-Oct-2003 16:46:40
  Branch: HEAD                             Handle: 2003102815463900

  Modified files:
    ossp-pkg/fsl            ChangeLog fsl.ac

  Log:
    renumber; added support for Solaris 10; improve filename sort
    explanation

  Summary:
    Revision    Changes     Path
    1.25        +9  -5      ossp-pkg/fsl/ChangeLog
    1.7         +3  -0      ossp-pkg/fsl/fsl.ac
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 ChangeLog
  --- ossp-pkg/fsl/ChangeLog	10 Oct 2003 14:07:49 -0000	1.24
  +++ ossp-pkg/fsl/ChangeLog	28 Oct 2003 15:46:39 -0000	1.25
  @@ -8,12 +8,16 @@
   
     CHANGELOG
   
  -  Changes between 1.3.0 and 1.3.1 (10-Oct-2003)
  +  Changes between 1.3.0 and 1.4a1 (28-Oct-2003)
   
  -    *) add logic to sort dirent filenames before adding their contents
  -       to the buffer. This mostly fixes the problem of the 'drifting'
  -       fsl configuration, by ensuring that l2 sections from filenames
  -       with a postfix are placed last in the identifier matching logic.
  +    *) added support for Solaris 10
  +       [Michael Schloh von Bennewitz <michael@schloh.com>]
  +
  +    *) add logic to sort filenames before adding their contents into
  +       the buffer. This ensures that suffixed files (i.e. ".orig") are
  +       read after the plain file and makes results more intuitive,
  +       predictive and eventually reproduceable. Formerly, read order was
  +       entirely dependend on the getdirentries(2) implementation.
          [Michael Schloh von Bennewitz <michael@schloh.com>]
   
     Changes between 1.2.1 and 1.3.0 (06-Oct-2003)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl.ac
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 fsl.ac
  --- ossp-pkg/fsl/fsl.ac	22 May 2003 12:30:35 -0000	1.6
  +++ ossp-pkg/fsl/fsl.ac	28 Oct 2003 15:46:39 -0000	1.7
  @@ -48,6 +48,9 @@
       *-*-solaris2.[[6-9]]* )
           AC_DEFINE(HAVE_VSYSLOG_USVALIST, 1, [vsyslog(3) uses __va_list])
           ;;
  +    *-*-solaris2.10* )
  +        AC_DEFINE(HAVE_VSYSLOG_USVALIST, 1, [vsyslog(3) uses __va_list])
  +        ;;
       *-*-osf* )
           CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED"
           ;;
  @@ .

From ossp-cvs-owner@ossp.org  Tue Oct 28 17:05:34 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id ECAC07726D; Tue, 28 Oct 2003 17:05:33 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ README fsl_version.c
Message-Id: <20031028160533.ECAC07726D@mail.ossp.org>
Date: Tue, 28 Oct 2003 17:05:33 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   28-Oct-2003 17:05:33
  Branch: HEAD                             Handle: 2003102816053200

  Modified files:
    ossp-pkg/fsl            README fsl_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.39        +1  -1      ossp-pkg/fsl/README
    1.25        +9  -9      ossp-pkg/fsl/fsl_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/README
  ============================================================================
  $ cvs diff -u -r1.38 -r1.39 README
  --- ossp-pkg/fsl/README	6 Oct 2003 10:10:38 -0000	1.38
  +++ ossp-pkg/fsl/README	28 Oct 2003 16:05:32 -0000	1.39
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_| |___/_|
    
     OSSP fsl - Faking/Flexible Syslog Library
  -  Version 1.3.0 (06-Oct-2003)
  +  Version 1.4a1 (28-Oct-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl_version.c
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 fsl_version.c
  --- ossp-pkg/fsl/fsl_version.c	6 Oct 2003 10:10:38 -0000	1.24
  +++ ossp-pkg/fsl/fsl_version.c	28 Oct 2003 16:05:32 -0000	1.25
  @@ -8,7 +8,7 @@
   #ifndef _FSL_VERSION_C_
   #define _FSL_VERSION_C_
   
  -#define FSL_VERSION 0x103200
  +#define FSL_VERSION 0x104001
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _FSL_VERSION_C_AS_HEADER_
   
   fsl_version_t fsl_version = {
  -    0x103200,
  -    "1.3.0",
  -    "1.3.0 (06-Oct-2003)",
  -    "This is OSSP fsl, Version 1.3.0 (06-Oct-2003)",
  -    "OSSP fsl 1.3.0 (06-Oct-2003)",
  -    "OSSP fsl/1.3.0",
  -    "@(#)OSSP fsl 1.3.0 (06-Oct-2003)",
  -    "$Id: fsl_version.c,v 1.24 2003/10/06 10:10:38 thl Exp $"
  +    0x104001,
  +    "1.4a1",
  +    "1.4a1 (28-Oct-2003)",
  +    "This is OSSP fsl, Version 1.4a1 (28-Oct-2003)",
  +    "OSSP fsl 1.4a1 (28-Oct-2003)",
  +    "OSSP fsl/1.4a1",
  +    "@(#)OSSP fsl 1.4a1 (28-Oct-2003)",
  +    "$Id: fsl_version.c,v 1.25 2003/10/28 16:05:32 thl Exp $"
   };
   
   #endif /* _FSL_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Tue Oct 28 20:47:10 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3CABF771F5; Tue, 28 Oct 2003 20:47:10 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ fsl.ac
Message-Id: <20031028194710.3CABF771F5@mail.ossp.org>
Date: Tue, 28 Oct 2003 20:47:10 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   28-Oct-2003 20:47:09
  Branch: HEAD                             Handle: 2003102819470900

  Modified files:
    ossp-pkg/fsl            fsl.ac

  Log:
    simplify case construct and prepare for post-Solaris 10

  Summary:
    Revision    Changes     Path
    1.8         +1  -4      ossp-pkg/fsl/fsl.ac
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl.ac
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 fsl.ac
  --- ossp-pkg/fsl/fsl.ac	28 Oct 2003 15:46:39 -0000	1.7
  +++ ossp-pkg/fsl/fsl.ac	28 Oct 2003 19:47:09 -0000	1.8
  @@ -45,10 +45,7 @@
   fi
   AC_MSG_RESULT([$PLATFORM])
   case $PLATFORM in
  -    *-*-solaris2.[[6-9]]* )
  -        AC_DEFINE(HAVE_VSYSLOG_USVALIST, 1, [vsyslog(3) uses __va_list])
  -        ;;
  -    *-*-solaris2.10* )
  +    *-*-solaris2.[[6-9]]* | *-*-solaris2.1[[0-9]] )
           AC_DEFINE(HAVE_VSYSLOG_USVALIST, 1, [vsyslog(3) uses __va_list])
           ;;
       *-*-osf* )
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 31 21:00:09 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DB307772B6; Fri, 31 Oct 2003 21:00:08 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/platform/ platform.pod
Message-Id: <20031031200008.DB307772B6@mail.ossp.org>
Date: Fri, 31 Oct 2003 21:00:08 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Oct-2003 21:00:08
  Branch: HEAD                             Handle: 2003103120000500

  Modified files:
    ossp-pkg/platform       platform.pod

  Log:
    fix typos

  Summary:
    Revision    Changes     Path
    1.6         +4  -4      ossp-pkg/platform/platform.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/platform/platform.pod
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 platform.pod
  --- ossp-pkg/platform/platform.pod	26 Oct 2003 11:34:44 -0000	1.5
  +++ ossp-pkg/platform/platform.pod	31 Oct 2003 20:00:05 -0000	1.6
  @@ -1,5 +1,5 @@
   ##
  -##  OSSP platform - Platform Identification
  +##  OSSP platform - Unix Platform Identification
   ##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
  @@ -62,8 +62,8 @@
   I<technology> identification. For each of those six identifications,
   there is a I<verbose>, I<regular> and I<concise> version.
   
  -This leads to eithteen (2x3x3) available identification strings for each
  -platform, from which usually 2 are choosen in a particular situation.
  +This leads to eighteen (2x3x3) available identification strings for each
  +platform, from which usually 2 are chosen in a particular situation.
   This is done by assembling the platform identification string using a
   I<FORMAT> string containing one or more identification constructs of the
   forms "C<%[xx]>" (verbose), "C<%{xx}>" (regular) and "C<%E<lt>xxE<gt>>"
  @@ -276,7 +276,7 @@
   does not use a I<vendor> identification (cannot be determined most of
   the time and is not used at all in all projects I've ever seen) and
   is a lot more flexible (class, product and technology identifications
  -combined with verbose, regular and consise outputs). The drawback of
  +combined with verbose, regular and concise outputs). The drawback of
   B<OSSP platform> is that it (still) knows less particular platforms,
   although the generic platform identification is sufficient enough most
   of the time.
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 31 21:01:23 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 46E9E772AB; Fri, 31 Oct 2003 21:01:22 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/platform/ platform.sh
Message-Id: <20031031200122.46E9E772AB@mail.ossp.org>
Date: Fri, 31 Oct 2003 21:01:22 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Oct-2003 21:01:21
  Branch: HEAD                             Handle: 2003103120011800

  Modified files:
    ossp-pkg/platform       platform.sh

  Log:
    small fixes (found through HP TestDrive machines)

  Summary:
    Revision    Changes     Path
    1.16        +8  -5      ossp-pkg/platform/platform.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/platform/platform.sh
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 platform.sh
  --- ossp-pkg/platform/platform.sh	28 Oct 2003 09:31:49 -0000	1.15
  +++ ossp-pkg/platform/platform.sh	31 Oct 2003 20:01:18 -0000	1.16
  @@ -1,5 +1,5 @@
   ##
  -##  OSSP platform - Platform Identification
  +##  OSSP platform - Unix Platform Identification
   ##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
  @@ -384,7 +384,10 @@
           #   determine architecture
           AT="${UNAME_MACHINE}"
           case "${AT}" in
  -           x86_64 ) AT='AMD64' ;;
  +           ia64     ) AT="IA64"   ;;
  +           x86_64   ) AT='AMD64'  ;;
  +           parisc   ) AT="HPPA32" ;;
  +           parisc64 ) AT="HPPA64" ;;
           esac
           AP="${AT}"
           case "${AP}" in
  @@ -513,7 +516,7 @@
           ST="[SGI ]IRIX ${v}"
           v="${UNAME_RELEASE}"
           SP="[SGI ]IRIX ${v}"
  -        SC="4.2BSD${opt_C}SVR3"
  +        SC="4.2BSD/SVR3"
           ;;
   
       #   HP HP-UX
  @@ -545,7 +548,7 @@
           AC="${AP}"
           #   determine system
           v=`echo "${UNAME_RELEASE}" | sed -e 's;^[^0-9]*;;'`
  -        ST="[HP ]HP-UX ${v}"
  +        ST="[HP ]<HP>-<UX> ${v}"
           SP="${ST}"
           case "${v}" in
               10.*   ) SC="SVR4.2" ;;
  @@ -597,7 +600,7 @@
           esac
           ST="[Apple ]${UNAME_SYSTEM} ${UNAME_RELEASE}"
           SP="${ST}"
  -        SC="4.4BSD${opt_C}Mach3"
  +        SC="4.4BSD/Mach3"
           ;;
   
       #   TODO ...ADD YOUR NEW PLATFORM CHECK HERE... TODO
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 31 21:27:49 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3730E772B6; Fri, 31 Oct 2003 21:27:49 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/platform/ platform.sh
Message-Id: <20031031202749.3730E772B6@mail.ossp.org>
Date: Fri, 31 Oct 2003 21:27:49 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Oct-2003 21:27:48
  Branch: HEAD                             Handle: 2003103120274800

  Modified files:
    ossp-pkg/platform       platform.sh

  Log:
    more correct IBM AIX platform information determination (not tried on
    a real AIX box, but assembled together from various information pieces
    found on the net)

  Summary:
    Revision    Changes     Path
    1.17        +18 -3      ossp-pkg/platform/platform.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/platform/platform.sh
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 platform.sh
  --- ossp-pkg/platform/platform.sh	31 Oct 2003 20:01:18 -0000	1.16
  +++ ossp-pkg/platform/platform.sh	31 Oct 2003 20:27:48 -0000	1.17
  @@ -576,12 +576,27 @@
   
       #   IBM AIX
       *:AIX:* )
  -        AT="${UNAME_MACHINE}"
  +        cpu_arch=rs6000
  +        if [ -x /usr/sbin/lsdev -a -x /usr/sbin/lsattr ]; then
  +            cpu_id=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
  +            if [ ".`/usr/sbin/lsattr -El ${cpu_id} | grep -i powerpc`" != . ]; then
  +                cpu_arch=powerpc
  +            fi
  +        fi
  +        if [ -x /usr/bin/oslevel ]; then
  +            os_level=`/usr/bin/oslevel`
  +        else
  +            os_level="`uname -r`.`uname -v`"
  +        fi
  +        os_level=`echo "${os_level}" |\
  +                  sed -e 's;^\([0-9][0-9]*\.[0-9][0-9]*\)\(\.[0-9][0-9]*\)\(.*\)$;<\1>\2[\3];' \
  +                      -e 's;^\([0-9][0-9]*\.[0-9][0-9]*\)\(.*\)$;<\1>\2;'`
  +        AT="${cpu_arch}"
           AP="${AT}"
           AC="${AP}"
  -        ST="[IBM ]AIX ${UNAME_RELEASE}"
  +        ST="[IBM ]AIX ${os_level}"
           SP="${ST}"
  -        case "${UNAME_RELEASE}" in
  +        case "${os_level}" in
               [12]* ) SC="SVR2" ;;
               *     ) SC="SVR4" ;;
           esac
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 31 21:43:58 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F038677291; Fri, 31 Oct 2003 21:43:57 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/platform/ platform.sh
Message-Id: <20031031204357.F038677291@mail.ossp.org>
Date: Fri, 31 Oct 2003 21:43:57 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Oct-2003 21:43:57
  Branch: HEAD                             Handle: 2003103120435700

  Modified files:
    ossp-pkg/platform       platform.sh

  Log:
    bump date

  Summary:
    Revision    Changes     Path
    1.18        +1  -1      ossp-pkg/platform/platform.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/platform/platform.sh
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 platform.sh
  --- ossp-pkg/platform/platform.sh	31 Oct 2003 20:27:48 -0000	1.17
  +++ ossp-pkg/platform/platform.sh	31 Oct 2003 20:43:57 -0000	1.18
  @@ -29,7 +29,7 @@
   prog_cmd="platform"
   prog_name="OSSP platform"
   prog_vers="0.1.0"
  -prog_date="06-Sep-2003"
  +prog_date="30-Oct-2003"
   
   ##  _________________________________________________________________________
   ##
  @@ .

From ossp-cvs-owner@ossp.org  Thu Nov  6 12:07:43 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DA271772B4; Thu,  6 Nov 2003 12:07:42 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/l2/ index.wml
Message-Id: <20031106110742.DA271772B4@mail.ossp.org>
Date: Thu,  6 Nov 2003 12:07:42 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-web                         Date:   06-Nov-2003 12:07:42
  Branch: HEAD                             Handle: 2003110611074100

  Modified files:
    ossp-web/pkg/lib/l2     index.wml

  Log:
    Correct attribution

  Summary:
    Revision    Changes     Path
    1.9         +1  -0      ossp-web/pkg/lib/l2/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/l2/index.wml
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 index.wml
  --- ossp-web/pkg/lib/l2/index.wml	30 Jun 2003 14:39:09 -0000	1.8
  +++ ossp-web/pkg/lib/l2/index.wml	6 Nov 2003 11:07:41 -0000	1.9
  @@ -32,6 +32,7 @@
   <h2>Authors</h2>
   
   <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  +<pkg_author name="Thomas Lotterer" mail="thomas.lotterer@cw.com">
   <pkg_author name="Michael Schloh v. Bennewitz" mail="michael.schloh@cw.com">
   
   <h2>Status</h2>
  @@ .

From ossp-cvs-owner@ossp.org  Thu Nov  6 12:50:59 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 76B38772C8; Thu,  6 Nov 2003 12:50:59 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ l2_spec_scan.l
Message-Id: <20031106115059.76B38772C8@mail.ossp.org>
Date: Thu,  6 Nov 2003 12:50:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   06-Nov-2003 12:50:59
  Branch: HEAD                             Handle: 2003110611505800

  Modified files:
    ossp-pkg/l2             l2_spec_scan.l

  Log:
    Add bison-locations to conditionally include new M4 yylloc macro into
    analyzer skeleton code. Keep now redundant bison-bridge option around (this
    doesn't hurt), just incase the new conditional reentrant yylloc reverts.

  Summary:
    Revision    Changes     Path
    1.13        +1  -0      ossp-pkg/l2/l2_spec_scan.l
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_spec_scan.l
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 l2_spec_scan.l
  --- ossp-pkg/l2/l2_spec_scan.l	6 Jan 2003 11:41:52 -0000	1.12
  +++ ossp-pkg/l2/l2_spec_scan.l	6 Nov 2003 11:50:58 -0000	1.13
  @@ -60,6 +60,7 @@
   %option stack
   %option reentrant
   %option bison-bridge
  +%option bison-locations
   %option never-interactive
   %option noyywrap
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Nov  6 12:59:03 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 25304772C8; Thu,  6 Nov 2003 12:59:03 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ ChangeLog
Message-Id: <20031106115903.25304772C8@mail.ossp.org>
Date: Thu,  6 Nov 2003 12:59:03 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   06-Nov-2003 12:59:03
  Branch: HEAD                             Handle: 2003110611590200

  Modified files:
    ossp-pkg/l2             ChangeLog

  Log:
    Document fixed reentrant yylloc scanner problem

  Summary:
    Revision    Changes     Path
    1.8         +6  -0      ossp-pkg/l2/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 ChangeLog
  --- ossp-pkg/l2/ChangeLog	25 Sep 2003 15:14:14 -0000	1.7
  +++ ossp-pkg/l2/ChangeLog	6 Nov 2003 11:59:02 -0000	1.8
  @@ -9,6 +9,12 @@
     ChangeLog
     =========
   
  +  Changes between 0.9.4 and 0.9.5 (25-Sep-2003 to ??-???-????)
  +
  +    *) Added bison-locations option to scanner, fixing the missing
  +       reentrant yylloc with flex-2.5.31.
  +       [Michael Schloh <michael@schloh.com>]
  +
     Changes between 0.9.3 and 0.9.4 (15-Sep-2003 to 25-Sep-2003)
   
       *) change jitter option in file channel from flag to count.
  @@ .

From ossp-cvs-owner@ossp.org  Thu Nov  6 13:58:22 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E79C9772CC; Thu,  6 Nov 2003 13:58:21 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ TODO
Message-Id: <20031106125821.E79C9772CC@mail.ossp.org>
Date: Thu,  6 Nov 2003 13:58:21 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   06-Nov-2003 13:58:21
  Branch: HEAD                             Handle: 2003110612582100

  Modified files:
    ossp-pkg/l2             TODO

  Log:
    update bug and feature request list

  Summary:
    Revision    Changes     Path
    1.61        +18 -1      ossp-pkg/l2/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/TODO
  ============================================================================
  $ cvs diff -u -r1.60 -r1.61 TODO
  --- ossp-pkg/l2/TODO	24 Mar 2003 15:16:00 -0000	1.60
  +++ ossp-pkg/l2/TODO	6 Nov 2003 12:58:21 -0000	1.61
  @@ -9,6 +9,18 @@
     TODO
     ====
   
  +20030611 thl
  +    Fix Problem where l2 does not terminate a message when
  +    it contains a \n so if previous message was longer the
  +    part between \n and the end of the previous message is
  +    repeated in the current message.
  +    http://cvs.ossp.org/tktview?tn=23
  +
  +20030611 thl
  +    Fix Problem where l2 is not thread safe when multiple
  +    threads use the same env as is true with with fsl.
  +    http://cvs.ossp.org/tktview?tn=24
  +
   20030324 thl
       The sanity checking in the l2_ch_syslog.c:hook_configure()
       implementation causes an artifical sensibility to the order of
  @@ -125,9 +137,14 @@
       standard out or to the next channel, allowing for parsing
       through an unknown protocol.
   
  -- l2_ch_nntp for administration through news.
  +- l2_ch_nntp for logging messages to NNTP (news) service.
  +    support post and feed modes
   
   - l2_ch_snmp logs a stream to an SNMP listener.
  +
  +- ls_ch_trigger pulls the trigger to flush downstream if a certain critera is met
  +
  +- l2_ch_ring keeps messages in a ring buffer until someone pulls the trigger (backtrace)
   
   Existing Channels -----------------------------------------
   - l2_ch_socket bind and udp parameters need work. (RSE: why and what?)
  @@ .

From ossp-cvs-owner@ossp.org  Thu Nov  6 16:25:11 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 05F0E772C8; Thu,  6 Nov 2003 16:25:10 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ ChangeLog cfg_syn_scan.l
Message-Id: <20031106152510.05F0E772C8@mail.ossp.org>
Date: Thu,  6 Nov 2003 16:25:10 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   06-Nov-2003 16:25:10
  Branch: HEAD                             Handle: 2003110615251000

  Modified files:
    ossp-pkg/cfg            ChangeLog cfg_syn_scan.l

  Log:
    Add and document bison-locations to conditionally include new M4
    yylloc macro into analyzer skeleton code. Keep now redundant
    bison-bridge option around (this doesn't hurt), just incase the new
    conditional reentrant yylloc reverts.

  Summary:
    Revision    Changes     Path
    1.5         +6  -0      ossp-pkg/cfg/ChangeLog
    1.17        +1  -0      ossp-pkg/cfg/cfg_syn_scan.l
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	10 Nov 2002 12:12:23 -0000	1.4
  +++ ossp-pkg/cfg/ChangeLog	6 Nov 2003 15:25:10 -0000	1.5
  @@ -8,6 +8,12 @@
   
     CHANGELOG
   
  +  Changes between 0.9.1 and 0.9.2 (??-???-???? to ??-???-????)
  +
  +   *) Added bison-locations option to scanner, fixing the missing
  +      reentrant yylloc with flex-2.5.31. Taken from OSSP l2.
  +      [Thomas Lotterer <thomas@lotterer.net>]
  +
     Changes between 0.9.0 and 0.9.1 (01-Jul-2002 to xx-Nov-2002)
   
      *) Enhanced test suite by comparing against previously saved output
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_syn_scan.l
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 cfg_syn_scan.l
  --- ossp-pkg/cfg/cfg_syn_scan.l	6 Jan 2003 11:17:43 -0000	1.16
  +++ ossp-pkg/cfg/cfg_syn_scan.l	6 Nov 2003 15:25:10 -0000	1.17
  @@ -69,6 +69,7 @@
   %option stack
   %option reentrant
   %option bison-bridge
  +%option bison-locations
   %option never-interactive
   %option noyywrap
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Nov  6 16:26:17 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3A871772C8; Thu,  6 Nov 2003 16:26:17 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ aclocal.m4
Message-Id: <20031106152617.3A871772C8@mail.ossp.org>
Date: Thu,  6 Nov 2003 16:26:17 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   06-Nov-2003 16:26:17
  Branch: HEAD                             Handle: 2003110615261600

  Modified files:
    ossp-pkg/cfg            aclocal.m4

  Log:
    reorganize compiler warning options for easier comparison with other
    packages; remove traditional

  Summary:
    Revision    Changes     Path
    1.4         +13 -5      ossp-pkg/cfg/aclocal.m4
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 aclocal.m4
  --- ossp-pkg/cfg/aclocal.m4	6 Jan 2003 11:17:42 -0000	1.3
  +++ ossp-pkg/cfg/aclocal.m4	6 Nov 2003 15:26:16 -0000	1.4
  @@ -79,11 +79,19 @@
       AC_COMPILER_OPTION(defdbg, -DDEBUG, -DDEBUG, CFLAGS="$CFLAGS -DDEBUG")
       CFLAGS="$CFLAGS -pedantic"
       CFLAGS="$CFLAGS -Wall"
  -    WMORE="-Wmultichar -Wno-system-headers -Wtraditional"
  -    WMORE="$WMORE -Wshadow -Wpointer-arith"
  -    WMORE="$WMORE -Wbad-function-cast -Wcast-align"
  -    WMORE="$WMORE -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations"
  -    WMORE="$WMORE -Wredundant-decls -Wnested-externs -Winline"
  +    WMORE=""
  +    WMORE="$WMORE -Wbad-function-cast"
  +    WMORE="$WMORE -Wcast-align"
  +    WMORE="$WMORE -Winline"
  +    WMORE="$WMORE -Wmissing-declarations"
  +    WMORE="$WMORE -Wmissing-prototypes"
  +    WMORE="$WMORE -Wmultichar"
  +    WMORE="$WMORE -Wnested-externs"
  +    WMORE="$WMORE -Wno-system-headers"
  +    WMORE="$WMORE -Wpointer-arith"
  +    WMORE="$WMORE -Wredundant-decls"
  +    WMORE="$WMORE -Wshadow"
  +    WMORE="$WMORE -Wstrict-prototypes"
       AC_COMPILER_OPTION(wmore, -W<xxx>, $WMORE, CFLAGS="$CFLAGS $WMORE")
   else
       case "$CFLAGS" in
  @@ .

From ossp-cvs-owner@ossp.org  Thu Nov  6 16:26:39 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 453EB772DF; Thu,  6 Nov 2003 16:26:39 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ aclocal.m4
Message-Id: <20031106152639.453EB772DF@mail.ossp.org>
Date: Thu,  6 Nov 2003 16:26:39 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   06-Nov-2003 16:26:39
  Branch: HEAD                             Handle: 2003110615263800

  Modified files:
    ossp-pkg/l2             aclocal.m4

  Log:
    reorganize compiler warning options for easier comparison with other
    packages

  Summary:
    Revision    Changes     Path
    1.15        +13 -2      ossp-pkg/l2/aclocal.m4
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 aclocal.m4
  --- ossp-pkg/l2/aclocal.m4	6 Jan 2003 11:41:51 -0000	1.14
  +++ ossp-pkg/l2/aclocal.m4	6 Nov 2003 15:26:38 -0000	1.15
  @@ -141,8 +141,19 @@
       AC_COMPILER_OPTION(defdbg, -DDEBUG, -DDEBUG, CFLAGS="$CFLAGS -DDEBUG")
       CFLAGS="$CFLAGS -pedantic"
       CFLAGS="$CFLAGS -Wall"
  -    WMORE="-Wshadow -Wpointer-arith -Wcast-align -Winline"
  -    WMORE="$WMORE -Wmissing-prototypes -Wmissing-declarations -Wnested-externs"
  +    WMORE=""
  +    WMORE="$WMORE -Wbad-function-cast"
  +    WMORE="$WMORE -Wcast-align"
  +    WMORE="$WMORE -Winline"
  +    WMORE="$WMORE -Wmissing-declarations"
  +    WMORE="$WMORE -Wmissing-prototypes"
  +    WMORE="$WMORE -Wmultichar"
  +    WMORE="$WMORE -Wnested-externs"
  +    WMORE="$WMORE -Wno-system-headers"
  +    WMORE="$WMORE -Wpointer-arith"
  +    WMORE="$WMORE -Wredundant-decls"
  +    WMORE="$WMORE -Wshadow"
  +    WMORE="$WMORE -Wstrict-prototypes"
       AC_COMPILER_OPTION(wmore, -W<xxx>, $WMORE, CFLAGS="$CFLAGS $WMORE")
       AC_COMPILER_OPTION(wnolonglong, -Wno-long-long, -Wno-long-long, CFLAGS="$CFLAGS -Wno-long-long")
   else
  @@ .

From ossp-cvs-owner@ossp.org  Thu Nov  6 16:31:48 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 543F5772B4; Thu,  6 Nov 2003 16:31:48 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ ChangeLog TODO l2_channel.c l2_p.h
Message-Id: <20031106153148.543F5772B4@mail.ossp.org>
Date: Thu,  6 Nov 2003 16:31:48 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   06-Nov-2003 16:31:48
  Branch: HEAD                             Handle: 2003110615314700

  Modified files:
    ossp-pkg/l2             ChangeLog TODO l2_channel.c l2_p.h

  Log:
    fix PR#23: l2 does not terminate a message when it contains a newline

  Summary:
    Revision    Changes     Path
    1.9         +7  -0      ossp-pkg/l2/ChangeLog
    1.62        +0  -7      ossp-pkg/l2/TODO
    1.33        +15 -7      ossp-pkg/l2/l2_channel.c
    1.35        +4  -2      ossp-pkg/l2/l2_p.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 ChangeLog
  --- ossp-pkg/l2/ChangeLog	6 Nov 2003 11:59:02 -0000	1.8
  +++ ossp-pkg/l2/ChangeLog	6 Nov 2003 15:31:47 -0000	1.9
  @@ -11,6 +11,13 @@
   
     Changes between 0.9.4 and 0.9.5 (25-Sep-2003 to ??-???-????)
   
  +    *) Fix Problem where l2 does not terminate a message when it
  +       contains a \n so if previous message was longer the part between
  +       \n and the end of the previous message is repeated in the current
  +       message.
  +       http://cvs.ossp.org/tktview?tn=23
  +       [Thomas Lotterer <thomas@lotterer.net>]
  +
       *) Added bison-locations option to scanner, fixing the missing
          reentrant yylloc with flex-2.5.31.
          [Michael Schloh <michael@schloh.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/TODO
  ============================================================================
  $ cvs diff -u -r1.61 -r1.62 TODO
  --- ossp-pkg/l2/TODO	6 Nov 2003 12:58:21 -0000	1.61
  +++ ossp-pkg/l2/TODO	6 Nov 2003 15:31:47 -0000	1.62
  @@ -10,13 +10,6 @@
     ====
   
   20030611 thl
  -    Fix Problem where l2 does not terminate a message when
  -    it contains a \n so if previous message was longer the
  -    part between \n and the end of the previous message is
  -    repeated in the current message.
  -    http://cvs.ossp.org/tktview?tn=23
  -
  -20030611 thl
       Fix Problem where l2 is not thread safe when multiple
       threads use the same env as is true with with fsl.
       http://cvs.ossp.org/tktview?tn=24
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_channel.c
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 l2_channel.c
  --- ossp-pkg/l2/l2_channel.c	13 Feb 2003 15:37:28 -0000	1.32
  +++ ossp-pkg/l2/l2_channel.c	6 Nov 2003 15:31:47 -0000	1.33
  @@ -582,18 +582,26 @@
       vfmt.data[1].i  = L2_ERR_FMT;
       vfmt.flush  = l2_channel_vlog_flush;
       vfmt.format = l2_channel_vlog_format;
  -    if ((len = l2_util_format(&vfmt, fmt, ap)) == -1)
  +    len = l2_util_format(&vfmt, fmt, ap);
  +
  +    /* check for formatting error including buffer overrun */
  +    if (len == -1)
           return (l2_result_t)(vfmt.data[1].i);
  +
  +    /* check for formatting led to completely empty message */
       if (len == 0)
           return L2_ERR_FMT;
   
  -    /* make sure a trailing newline exists */
  -    if (env->message[len-1] != '\n') {
  -        if (len == L2_MAX_MSGSIZE)
  -            return L2_ERR_MEM;
  +    /* check for formatting led to newline-only message */
  +    if (len == 1 && env->message[len] == '\n')
  +        return L2_ERR_FMT;
  +
  +    /* make sure a trailing newline exists; L2_MSG_BUFSIZE has room for CR/LF */
  +    if (env->message[len-1] != '\n')
           env->message[len++] = '\n';
  -        env->message[len]   = '\0';
  -    }
  +
  +    /* make sure a trailing NUL exists; L2_MSG_BUFSIZE has room for NUL  */
  +    env->message[len] = '\0';
   
       /* write message to channel */
       rv = L2_OK;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_p.h
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 l2_p.h
  --- ossp-pkg/l2/l2_p.h	6 Jan 2003 11:41:52 -0000	1.34
  +++ ossp-pkg/l2/l2_p.h	6 Nov 2003 15:31:47 -0000	1.35
  @@ -73,7 +73,9 @@
           cu(value)
   
   /* some hard-coded sizes :-( */
  -#define L2_MAX_MSGSIZE         4096
  +#define L2_MAX_OUTSIZE          4098 /* this value is for compatiblity with previous versions of L2 */
  +#define L2_MAX_MSGSIZE          L2_MAX_OUTSIZE - 2 /* leave room for CR/LF although OSSP/UNIX use LF only */
  +#define L2_MSG_BUFSIZE          L2_MAX_OUTSIZE + 1 /* reserve space for convenient trailing NUL */
   #define L2_MAX_FORMATTERS       128
   #define L2_MAX_HANDLERS         128
   #define L2_BROKEN_TIMER          -1
  @@ -112,7 +114,7 @@
       int                   interval;
       l2_formatter_entry_t  formatters[L2_MAX_FORMATTERS];
       l2_handler_t         *handlers[L2_MAX_HANDLERS];
  -    char                  message[L2_MAX_MSGSIZE];
  +    char                  message[L2_MSG_BUFSIZE];
       char                  szError[1024];
       char                  szErrorInfo[512];
       l2_result_t           rvErrorInfo;
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 10 16:12:49 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 080F9772CF; Mon, 10 Nov 2003 16:12:48 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ l2.h.in
Message-Id: <20031110151248.080F9772CF@mail.ossp.org>
Date: Mon, 10 Nov 2003 16:12:48 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   10-Nov-2003 16:12:48
  Branch: HEAD                             Handle: 2003111015124800

  Modified files:
    ossp-pkg/l2             l2.h.in

  Log:
    remove non-generic code (possibly leaked from lmtp2nntp) as it
    violates prefix-safety and collides with Darwin log2() math function

  Summary:
    Revision    Changes     Path
    1.32        +0  -7      ossp-pkg/l2/l2.h.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2.h.in
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 l2.h.in
  --- ossp-pkg/l2/l2.h.in	6 Jan 2003 11:41:51 -0000	1.31
  +++ ossp-pkg/l2/l2.h.in	10 Nov 2003 15:12:48 -0000	1.32
  @@ -104,13 +104,6 @@
      to and including a particular low level */
   #define L2_LEVEL_UPTO(level) (((level)-1)|(level))
   
  -/* macros for easy logging */
  -#define log0(ctx,level,msg)             l2_channel_log((ctx)->l2, L2_LEVEL_##level, "%P" msg)
  -#define log1(ctx,level,msg,a1)          l2_channel_log((ctx)->l2, L2_LEVEL_##level, "%P" msg, a1)
  -#define log2(ctx,level,msg,a1,a2)       l2_channel_log((ctx)->l2, L2_LEVEL_##level, "%P" msg, a1, a2)
  -#define log3(ctx,level,msg,a1,a2,a3)    l2_channel_log((ctx)->l2, L2_LEVEL_##level, "%P" msg, a1, a2, a3)
  -#define log4(ctx,level,msg,a1,a2,a3,a4) l2_channel_log((ctx)->l2, L2_LEVEL_##level, "%P" msg, a1, a2, a3, a4)
  -
   /* list of return values */
   typedef enum {
       L2_OK,         /* everything ok */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 10 16:14:11 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 71B81772CF; Mon, 10 Nov 2003 16:14:11 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ l2_ut_sa.h
Message-Id: <20031110151411.71B81772CF@mail.ossp.org>
Date: Mon, 10 Nov 2003 16:14:11 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   10-Nov-2003 16:14:11
  Branch: HEAD                             Handle: 2003111015141100

  Modified files:
    ossp-pkg/l2             l2_ut_sa.h

  Log:
    fix build on Darwin by using correct prototype

  Summary:
    Revision    Changes     Path
    1.19        +1  -1      ossp-pkg/l2/l2_ut_sa.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_sa.h
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 l2_ut_sa.h
  --- ossp-pkg/l2/l2_ut_sa.h	10 Feb 2003 10:13:23 -0000	1.18
  +++ ossp-pkg/l2/l2_ut_sa.h	10 Nov 2003 15:14:11 -0000	1.19
  @@ -180,7 +180,7 @@
   extern sa_rc_t sa_timeout      (sa_t  *__sa, sa_timeout_t __id, long __sec, long __usec);
   extern sa_rc_t sa_buffer       (sa_t  *__sa, sa_buffer_t  __id, size_t __size);
   extern sa_rc_t sa_option       (sa_t  *__sa, sa_option_t  __id, ...);
  -extern sa_rc_t sa_syscall      (sa_t  *__sa, sa_syscall_t __id, void (*__fptr)(), void *__fctx);
  +extern sa_rc_t sa_syscall      (sa_t  *__sa, sa_syscall_t __id, void (*__fptr)(void), void *__fctx);
   
   /* socket connection operations */
   extern sa_rc_t sa_bind         (sa_t  *__sa, sa_addr_t  *__laddr);
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 10 16:29:25 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 164D6772D3; Mon, 10 Nov 2003 16:29:25 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ ChangeLog README l2_version.c
Message-Id: <20031110152925.164D6772D3@mail.ossp.org>
Date: Mon, 10 Nov 2003 16:29:25 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   10-Nov-2003 16:29:24
  Branch: HEAD                             Handle: 2003111015292400

  Modified files:
    ossp-pkg/l2             ChangeLog README l2_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.10        +5  -1      ossp-pkg/l2/ChangeLog
    1.14        +1  -1      ossp-pkg/l2/README
    1.13        +9  -9      ossp-pkg/l2/l2_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 ChangeLog
  --- ossp-pkg/l2/ChangeLog	6 Nov 2003 15:31:47 -0000	1.9
  +++ ossp-pkg/l2/ChangeLog	10 Nov 2003 15:29:24 -0000	1.10
  @@ -9,7 +9,11 @@
     ChangeLog
     =========
   
  -  Changes between 0.9.4 and 0.9.5 (25-Sep-2003 to ??-???-????)
  +  Changes between 0.9.4 and 0.9.5 (25-Sep-2003 to 10-Nov-2003)
  +
  +    *) remove log0...4 macros
  +
  +    *) minor adjustments porting to OpenDarwin 6.6
   
       *) Fix Problem where l2 does not terminate a message when it
          contains a \n so if previous message was longer the part between
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/README
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 README
  --- ossp-pkg/l2/README	25 Sep 2003 15:14:14 -0000	1.13
  +++ ossp-pkg/l2/README	10 Nov 2003 15:29:24 -0000	1.14
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_|_____|
   
     OSSP l2 -- Flexible Logging
  -  Version 0.9.4 (25-Sep-2003)
  +  Version 0.9.5 (10-Nov-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_version.c
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 l2_version.c
  --- ossp-pkg/l2/l2_version.c	25 Sep 2003 15:14:14 -0000	1.12
  +++ ossp-pkg/l2/l2_version.c	10 Nov 2003 15:29:24 -0000	1.13
  @@ -8,7 +8,7 @@
   #ifndef _L2_VERSION_C_
   #define _L2_VERSION_C_
   
  -#define L2_VERSION 0x009204
  +#define L2_VERSION 0x009205
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _L2_VERSION_C_AS_HEADER_
   
   l2_version_t l2_version = {
  -    0x009204,
  -    "0.9.4",
  -    "0.9.4 (25-Sep-2003)",
  -    "This is OSSP l2, Version 0.9.4 (25-Sep-2003)",
  -    "OSSP l2 0.9.4 (25-Sep-2003)",
  -    "OSSP l2/0.9.4",
  -    "@(#)OSSP l2 0.9.4 (25-Sep-2003)",
  -    "$Id: l2_version.c,v 1.12 2003/09/25 15:14:14 thl Exp $"
  +    0x009205,
  +    "0.9.5",
  +    "0.9.5 (10-Nov-2003)",
  +    "This is OSSP l2, Version 0.9.5 (10-Nov-2003)",
  +    "OSSP l2 0.9.5 (10-Nov-2003)",
  +    "OSSP l2/0.9.5",
  +    "@(#)OSSP l2 0.9.5 (10-Nov-2003)",
  +    "$Id: l2_version.c,v 1.13 2003/11/10 15:29:24 thl Exp $"
   };
   
   #endif /* _L2_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 10 19:38:28 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5CFFF772CD; Mon, 10 Nov 2003 19:38:28 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ ChangeLog devtool.conf
Message-Id: <20031110183828.5CFFF772CD@mail.ossp.org>
Date: Mon, 10 Nov 2003 19:38:28 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Nov-2003 19:38:28
  Branch: HEAD                             Handle: 2003111018382700

  Modified files:
    ossp-pkg/sa             ChangeLog devtool.conf

  Log:
    upgrade to Autoconf 2.58

  Summary:
    Revision    Changes     Path
    1.27        +5  -2      ossp-pkg/sa/ChangeLog
    1.19        +1  -1      ossp-pkg/sa/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 ChangeLog
  --- ossp-pkg/sa/ChangeLog	17 Oct 2003 17:42:19 -0000	1.26
  +++ ossp-pkg/sa/ChangeLog	10 Nov 2003 18:38:27 -0000	1.27
  @@ -11,9 +11,12 @@
     This is a list of all changes to OSSP sa.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 1.0.5 and 1.1.0 (31-Jan-2003 to xx-Feb-2003)
  +  Changes between 1.0.5 and 1.1.0 (31-Jan-2003 to xx-Nov-2003)
  +   
  +   o Upgrade build environment to GNU autoconf 2.58.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
   
  -   o Upgrade to GNU libtool 1.5.
  +   o Upgrade build environment to GNU libtool 1.5.
        [Ralf S. Engelschall <rse@engelschall.com>]
   
      o Fix memory leak in test suite (sa_test.c).
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 devtool.conf
  --- ossp-pkg/sa/devtool.conf	30 Jun 2003 10:36:53 -0000	1.18
  +++ ossp-pkg/sa/devtool.conf	10 Nov 2003 18:38:27 -0000	1.19
  @@ -5,7 +5,7 @@
   %autogen
       @autogen shtool   1.6.2 "1.6.*" all
       @autogen libtool  1.5   "1.5*"
  -    @autogen autoconf 2.57  "2.5[3-9]*"
  +    @autogen autoconf 2.58  "2.5[3-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 10 19:50:29 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0EF83772D2; Mon, 10 Nov 2003 19:50:28 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ ChangeLog README VERSION
Message-Id: <20031110185028.0EF83772D2@mail.ossp.org>
Date: Mon, 10 Nov 2003 19:50:28 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Nov-2003 19:50:28
  Branch: HEAD                             Handle: 2003111018502800

  Modified files:
    ossp-pkg/sa             ChangeLog README VERSION

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.28        +1  -1      ossp-pkg/sa/ChangeLog
    1.17        +1  -1      ossp-pkg/sa/README
    1.14        +1  -1      ossp-pkg/sa/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 ChangeLog
  --- ossp-pkg/sa/ChangeLog	10 Nov 2003 18:38:27 -0000	1.27
  +++ ossp-pkg/sa/ChangeLog	10 Nov 2003 18:50:28 -0000	1.28
  @@ -11,7 +11,7 @@
     This is a list of all changes to OSSP sa.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 1.0.5 and 1.1.0 (31-Jan-2003 to xx-Nov-2003)
  +  Changes between 1.0.5 and 1.1.0 (31-Jan-2003 to 10-Nov-2003)
      
      o Upgrade build environment to GNU autoconf 2.58.
        [Ralf S. Engelschall <rse@engelschall.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/README
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 README
  --- ossp-pkg/sa/README	31 Jan 2003 18:59:18 -0000	1.16
  +++ ossp-pkg/sa/README	10 Nov 2003 18:50:28 -0000	1.17
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/\__,_|
   
     OSSP sa - Socket Abstraction
  -  Version 1.0.5 (31-Jan-2003)
  +  Version 1.1.0 (10-Nov-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/VERSION
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 VERSION
  --- ossp-pkg/sa/VERSION	31 Jan 2003 18:59:18 -0000	1.13
  +++ ossp-pkg/sa/VERSION	10 Nov 2003 18:50:28 -0000	1.14
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP sa (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP sa, Version 1.0.5 (31-Jan-2003)
  +  This is OSSP sa, Version 1.1.0 (10-Nov-2003)
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 10 19:52:36 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5BDB1772D2; Mon, 10 Nov 2003 19:52:36 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ sa.c
Message-Id: <20031110185236.5BDB1772D2@mail.ossp.org>
Date: Mon, 10 Nov 2003 19:52:36 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Nov-2003 19:52:36
  Branch: HEAD                             Handle: 2003111018523500

  Modified files:
    ossp-pkg/sa             sa.c

  Log:
    be consistent in quoting ;-)

  Summary:
    Revision    Changes     Path
    1.75        +1  -1      ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.c
  ============================================================================
  $ cvs diff -u -r1.74 -r1.75 sa.c
  --- ossp-pkg/sa/sa.c	7 Feb 2003 20:47:51 -0000	1.74
  +++ ossp-pkg/sa/sa.c	10 Nov 2003 18:52:35 -0000	1.75
  @@ -39,7 +39,7 @@
   #include <stdarg.h>      /* for "va_XXX()" and "va_list" */
   #include <string.h>      /* for "strXXX()" and "size_t" */
   #include <sys/types.h>   /* for general prerequisites */
  -#include <ctype.h>       /* for isXXX() */
  +#include <ctype.h>       /* for "isXXX()" */
   #include <errno.h>       /* for "EXXX" */
   #include <fcntl.h>       /* for "F_XXX" and "O_XXX" */
   #include <unistd.h>      /* for standard Unix stuff */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 10 19:57:43 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B1E0D772D2; Mon, 10 Nov 2003 19:57:43 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ devtool.conf
Message-Id: <20031110185743.B1E0D772D2@mail.ossp.org>
Date: Mon, 10 Nov 2003 19:57:43 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Nov-2003 19:57:43
  Branch: HEAD                             Handle: 2003111018574300

  Modified files:
    ossp-pkg/sa             devtool.conf

  Log:
    change to our more recent version of %dist/%upload

  Summary:
    Revision    Changes     Path
    1.20        +15 -20     ossp-pkg/sa/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 devtool.conf
  --- ossp-pkg/sa/devtool.conf	10 Nov 2003 18:38:27 -0000	1.19
  +++ ossp-pkg/sa/devtool.conf	10 Nov 2003 18:57:43 -0000	1.20
  @@ -26,36 +26,31 @@
       mv README.n README
   
   %dist
  +    echo "+++ removing old tarballs"
       rm -f sa-*.tar.gz
  +    echo "+++ generating"
       ./devtool autoclean
       ./devtool autogen
  +    echo "+++ configuring"
       ./configure
  +    echo "+++ building"
       make clean all man
  +    echo "+++ cleaning"
       make distclean
  +    echo "+++ fixing"
       ./shtool fixperm -v .
  +    echo "+++ rolling"
       V=`./shtool version -l txt -d short VERSION`
  -    ./shtool tarball -o sa-${V}.tar.gz -d sa-${V} -u ossp -g sa \
  -                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*' -c 'gzip --best' .
  +    ./shtool tarball -o sa-${V}.tar.gz -d sa-${V} -u ossp -g ossp \
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*,*.tar.gz,^#.*,.*~$' -c 'gzip --best' .
       ls -l sa-${V}.tar.gz
  -    gunzip <sa-${V}.tar.gz | tar tvf - | head -10; echo "[...]"
  +    echo "+++ testing"
  +    gunzip <sa-${V}.tar.gz | tar tvf - | head -10
  +    echo "[...]"
       gunzip <sa-${V}.tar.gz | tar tvf - | tail -10
   
  -%snap
  -    rm -f sa-*.tar.gz
  -    ./devtool autoclean
  -    ./devtool autogen
  -    ./configure
  -    make clean all man
  -    make distclean
  -    ./shtool fixperm -v .
  -    D=`date '+%Y%m%d'`
  -    ./shtool tarball -o sa-SNAP-${D}.tar.gz -d sa-SNAP-${D} -u ossp -g sa \
  -                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*' -c 'gzip --best' .
  -    ls -l sa-SNAP-${D}.tar.gz
  -    gunzip <sa-SNAP-${D}.tar.gz | tar tvf - | head -10; echo "[...]"
  -    gunzip <sa-SNAP-${D}.tar.gz | tar tvf - | tail -10
  -
  -%release
  +%upload
       echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/sa/"
  -    scp sa-*.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/sa/
  +    V=`./shtool version -l txt -d short VERSION`
  +    scp sa-${V}.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/sa/
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 10 20:04:54 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7653C772CD; Mon, 10 Nov 2003 20:04:54 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/cfg/ index.wml oss...
Message-Id: <20031110190454.7653C772CD@mail.ossp.org>
Date: Mon, 10 Nov 2003 20:04:54 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   10-Nov-2003 20:04:54
  Branch: HEAD                             Handle: 2003111019045102

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/cfg    index.wml
    ossp-web/pkg/lib/l2     index.wml
    ossp-web/pkg/lib/sa     index.wml

  Log:
    release OSSP sa 1.1.0, OSSP cfg 0.9.1 and OSSP l2 0.9.5

  Summary:
    Revision    Changes     Path
    1.67        +3  -0      ossp-web/new/news.txt
    1.8         +2  -2      ossp-web/pkg/lib/cfg/index.wml
    1.60        +4  -4      ossp-web/pkg/lib/index.wml
    1.10        +3  -3      ossp-web/pkg/lib/l2/index.wml
    1.14        +2  -2      ossp-web/pkg/lib/sa/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.66 -r1.67 news.txt
  --- ossp-web/new/news.txt	21 Oct 2003 18:19:08 -0000	1.66
  +++ ossp-web/new/news.txt	10 Nov 2003 19:04:51 -0000	1.67
  @@ -1,3 +1,6 @@
  +10-Nov-2003: Released L<OSSP sa> 1.1.0
  +10-Nov-2003: Released L<OSSP cfg> 0.9.1
  +10-Nov-2003: Released L<OSSP l2> 0.9.5
   21-Oct-2003: Released T<OSSP snmpdx> 0.2.8
   06-Oct-2003: Released L<OSSP fsl> 1.3.0
   25-Sep-2003: Released L<OSSP l2> 0.9.4
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/cfg/index.wml
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 index.wml
  --- ossp-web/pkg/lib/cfg/index.wml	2 Oct 2002 12:44:35 -0000	1.7
  +++ ossp-web/pkg/lib/cfg/index.wml	10 Nov 2003 19:04:53 -0000	1.8
  @@ -36,7 +36,7 @@
   <pkg_status
       name="cfg" assign="rse"
       stable="none"    stable_date="none"
  -    unstable="0.9.0" unstable_date="30-Jul-2002"
  +    unstable="0.9.1" unstable_date="10-Nov-2003"
   	done=95>
   
   <h2>Source</h2>
  @@ -46,7 +46,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/cfg/
       directory=$(FTP_ROOT_DIR)/pkg/lib/cfg/
       files="cfg-*.tar.gz" 
  -	stable="none" unstable="cfg-0.9.0.tar.gz">
  +	stable="none" unstable="cfg-0.9.1.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.59 -r1.60 index.wml
  --- ossp-web/pkg/lib/index.wml	30 Jun 2003 14:39:08 -0000	1.59
  +++ ossp-web/pkg/lib/index.wml	10 Nov 2003 19:04:52 -0000	1.60
  @@ -24,10 +24,10 @@
   			done=100 stable=1.0.2 unstable=none>
     <pkg_item name="sa" longname="OSSP sa" type="lib"
               desc="Socket Abstraction"
  -			done=100 stable=1.0.5 unstable=none>
  +			done=100 stable=1.1.0 unstable=none>
     <pkg_item name="fsl" longname="OSSP fsl" type="lib"
               desc="Faked/Flexible Syslog"
  -			done=100 stable=1.2.0 unstable=none>
  +			done=100 stable=1.3.0 unstable=none>
     <pkg_item name="var" longname="OSSP var" type="lib"
               desc="Variable Expansion"
   			done=100 stable=1.0.0 unstable=none>
  @@ -42,7 +42,7 @@
   			done=95 stable=none unstable=0.9.8>
     <pkg_item name="l2" longname="OSSP l2" type="lib"
               desc="Flexible Logging"
  -			done=95 stable=none unstable=0.9.2>
  +			done=95 stable=none unstable=0.9.5>
     <pkg_item name="al" longname="OSSP al" type="lib"
               desc="Assembly Line"
   			done=95 stable=none unstable=0.9.1>
  @@ -51,7 +51,7 @@
   			done=95 stable=none unstable=0.9.2>
     <pkg_item name="cfg" longname="OSSP cfg" type="lib"
               desc="Configuration Parsing"
  -			done=95 stable=none unstable=0.9.0>
  +			done=95 stable=none unstable=0.9.1>
     <pkg_item name="act" longname="OSSP act" type="lib"
               desc="Abstract Container Types"
   			done=25 stable=none unstable=none>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/l2/index.wml
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 index.wml
  --- ossp-web/pkg/lib/l2/index.wml	6 Nov 2003 11:07:41 -0000	1.9
  +++ ossp-web/pkg/lib/l2/index.wml	10 Nov 2003 19:04:53 -0000	1.10
  @@ -32,7 +32,7 @@
   <h2>Authors</h2>
   
   <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  -<pkg_author name="Thomas Lotterer" mail="thomas.lotterer@cw.com">
  +<pkg_author name="Thomas Lotterer" mail="thomas@lotterer.net">
   <pkg_author name="Michael Schloh v. Bennewitz" mail="michael.schloh@cw.com">
   
   <h2>Status</h2>
  @@ -40,7 +40,7 @@
   <pkg_status
       name="l2" assign="rse"
       stable="none"    stable_date="none"
  -    unstable="0.9.2" unstable_date="30-Jun-2003"
  +    unstable="0.9.5" unstable_date="10-Nov-2003"
   	done=95>
   
   <h2>Source</h2>
  @@ -50,7 +50,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/l2/
       directory=$(FTP_ROOT_DIR)/pkg/lib/l2/
       files="l2-*.tar.gz" 
  -	stable="none" unstable="l2-0.9.2.tar.gz">
  +	stable="none" unstable="l2-0.9.5.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/sa/index.wml
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 index.wml
  --- ossp-web/pkg/lib/sa/index.wml	31 Jan 2003 19:07:56 -0000	1.13
  +++ ossp-web/pkg/lib/sa/index.wml	10 Nov 2003 19:04:52 -0000	1.14
  @@ -110,7 +110,7 @@
   
   <pkg_status
       name="sa" assign="rse"
  -    stable="1.0.5"    stable_date="31-Jan-2003"
  +    stable="1.1.0"    stable_date="10-Nov-2003"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -121,7 +121,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/sa/
       directory=$(FTP_ROOT_DIR)/pkg/lib/sa/
       files="sa-*.tar.gz" 
  -	stable="sa-1\.0\.5\.tar\.gz" unstable="sa-SNAP.*\.tar.gz">
  +	stable="sa-1\.1\.0\.tar\.gz" unstable="sa-SNAP.*\.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 10 20:10:39 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 42D56772CD; Mon, 10 Nov 2003 20:10:39 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ ChangeLog
Message-Id: <20031110191039.42D56772CD@mail.ossp.org>
Date: Mon, 10 Nov 2003 20:10:39 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Nov-2003 20:10:39
  Branch: HEAD                             Handle: 2003111019103800

  Modified files:
    ossp-pkg/cfg            ChangeLog

  Log:
    fix ChangeLog -- we are at 0.9.1 only until now

  Summary:
    Revision    Changes     Path
    1.6         +3  -5      ossp-pkg/cfg/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	6 Nov 2003 15:25:10 -0000	1.5
  +++ ossp-pkg/cfg/ChangeLog	10 Nov 2003 19:10:38 -0000	1.6
  @@ -8,13 +8,11 @@
   
     CHANGELOG
   
  -  Changes between 0.9.1 and 0.9.2 (??-???-???? to ??-???-????)
  +  Changes between 0.9.0 and 0.9.1 (01-Jul-2002 to 10-Nov-2003)
   
  -   *) Added bison-locations option to scanner, fixing the missing
  -      reentrant yylloc with flex-2.5.31. Taken from OSSP l2.
  +   *) Added Bison-locations option to scanner, fixing the missing
  +      reentrant "yylloc" with flex 2.5.31. Taken over from OSSP l2.
         [Thomas Lotterer <thomas@lotterer.net>]
  -
  -  Changes between 0.9.0 and 0.9.1 (01-Jul-2002 to xx-Nov-2002)
   
      *) Enhanced test suite by comparing against previously saved output
         [Ralf S. Engelschall <rse@engelschall.com>]
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 10 20:13:25 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D58DE772CD; Mon, 10 Nov 2003 20:13:24 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ README cfg_vers.c
Message-Id: <20031110191324.D58DE772CD@mail.ossp.org>
Date: Mon, 10 Nov 2003 20:13:24 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Nov-2003 20:13:24
  Branch: HEAD                             Handle: 2003111019132400

  Modified files:
    ossp-pkg/cfg            README cfg_vers.c

  Log:
    fix date

  Summary:
    Revision    Changes     Path
    1.6         +1  -1      ossp-pkg/cfg/README
    1.2         +5  -5      ossp-pkg/cfg/cfg_vers.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/README
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 README
  --- ossp-pkg/cfg/README	6 Jan 2003 11:17:42 -0000	1.5
  +++ ossp-pkg/cfg/README	10 Nov 2003 19:13:24 -0000	1.6
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \___|_|  \__, |
                                                |___/
     OSSP cfg - Configuration Parsing
  -  Version 0.9.1 (02-Aug-2002)
  +  Version 0.9.1 (10-Nov-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_vers.c
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 cfg_vers.c
  --- ossp-pkg/cfg/cfg_vers.c	2 Aug 2002 19:07:12 -0000	1.1
  +++ ossp-pkg/cfg/cfg_vers.c	10 Nov 2003 19:13:24 -0000	1.2
  @@ -34,12 +34,12 @@
   __cfg_version_t __cfg_version = {
       0x009201,
       "0.9.1",
  -    "0.9.1 (02-Aug-2002)",
  -    "This is OSSP cfg, Version 0.9.1 (02-Aug-2002)",
  -    "OSSP cfg 0.9.1 (02-Aug-2002)",
  +    "0.9.1 (10-Nov-2003)",
  +    "This is OSSP cfg, Version 0.9.1 (10-Nov-2003)",
  +    "OSSP cfg 0.9.1 (10-Nov-2003)",
       "OSSP cfg/0.9.1",
  -    "@(#)OSSP cfg 0.9.1 (02-Aug-2002)",
  -    "$Id: cfg_vers.c,v 1.1 2002/08/02 19:07:12 rse Exp $"
  +    "@(#)OSSP cfg 0.9.1 (10-Nov-2003)",
  +    "$Id: cfg_vers.c,v 1.2 2003/11/10 19:13:24 rse Exp $"
   };
   
   #endif /* _CFG_VERS_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 10 20:15:58 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6FE5A772CC; Mon, 10 Nov 2003 20:15:57 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ ChangeLog README cfg_vers.c devtool.conf
Message-Id: <20031110191557.6FE5A772CC@mail.ossp.org>
Date: Mon, 10 Nov 2003 20:15:57 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Nov-2003 20:15:56
  Branch: HEAD                             Handle: 2003111019155400

  Modified files:
    ossp-pkg/cfg            ChangeLog README cfg_vers.c devtool.conf

  Log:
    upgrade build environment

  Summary:
    Revision    Changes     Path
    1.7         +6  -0      ossp-pkg/cfg/ChangeLog
    1.7         +1  -1      ossp-pkg/cfg/README
    1.3         +9  -9      ossp-pkg/cfg/cfg_vers.c
    1.12        +2  -2      ossp-pkg/cfg/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	10 Nov 2003 19:10:38 -0000	1.6
  +++ ossp-pkg/cfg/ChangeLog	10 Nov 2003 19:15:54 -0000	1.7
  @@ -8,6 +8,12 @@
   
     CHANGELOG
   
  +  Changes between 0.9.1 and 0.9.2 (10-Nov-2003 to 10-Nov-2003)
  +
  +   *) Upgraded build environment to GNU libtool 1.5 and
  +      GNU autoconf 2.58.
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
     Changes between 0.9.0 and 0.9.1 (01-Jul-2002 to 10-Nov-2003)
   
      *) Added Bison-locations option to scanner, fixing the missing
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/README
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 README
  --- ossp-pkg/cfg/README	10 Nov 2003 19:13:24 -0000	1.6
  +++ ossp-pkg/cfg/README	10 Nov 2003 19:15:54 -0000	1.7
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \___|_|  \__, |
                                                |___/
     OSSP cfg - Configuration Parsing
  -  Version 0.9.1 (10-Nov-2003)
  +  Version 0.9.2 (10-Nov-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_vers.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 cfg_vers.c
  --- ossp-pkg/cfg/cfg_vers.c	10 Nov 2003 19:13:24 -0000	1.2
  +++ ossp-pkg/cfg/cfg_vers.c	10 Nov 2003 19:15:54 -0000	1.3
  @@ -8,7 +8,7 @@
   #ifndef _CFG_VERS_C_
   #define _CFG_VERS_C_
   
  -#define __CFG_VERSION 0x009201
  +#define __CFG_VERSION 0x009202
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _CFG_VERS_C_AS_HEADER_
   
   __cfg_version_t __cfg_version = {
  -    0x009201,
  -    "0.9.1",
  -    "0.9.1 (10-Nov-2003)",
  -    "This is OSSP cfg, Version 0.9.1 (10-Nov-2003)",
  -    "OSSP cfg 0.9.1 (10-Nov-2003)",
  -    "OSSP cfg/0.9.1",
  -    "@(#)OSSP cfg 0.9.1 (10-Nov-2003)",
  -    "$Id: cfg_vers.c,v 1.2 2003/11/10 19:13:24 rse Exp $"
  +    0x009202,
  +    "0.9.2",
  +    "0.9.2 (10-Nov-2003)",
  +    "This is OSSP cfg, Version 0.9.2 (10-Nov-2003)",
  +    "OSSP cfg 0.9.2 (10-Nov-2003)",
  +    "OSSP cfg/0.9.2",
  +    "@(#)OSSP cfg 0.9.2 (10-Nov-2003)",
  +    "$Id: cfg_vers.c,v 1.3 2003/11/10 19:15:54 rse Exp $"
   };
   
   #endif /* _CFG_VERS_C_AS_HEADER_ */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 devtool.conf
  --- ossp-pkg/cfg/devtool.conf	28 Oct 2003 15:27:01 -0000	1.11
  +++ ossp-pkg/cfg/devtool.conf	10 Nov 2003 19:15:54 -0000	1.12
  @@ -30,8 +30,8 @@
   
   %autogen
       @autogen shtool   1.6.2 "1.6.*" all
  -    @autogen libtool  1.5 "1.[45]*"
  -    @autogen autoconf 2.57  "2.5[4-9]*"
  +    @autogen libtool  1.5   "1.[45]*"
  +    @autogen autoconf 2.58  "2.5[4-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 10 20:21:05 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0E3CA772CC; Mon, 10 Nov 2003 20:21:04 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ ChangeLog
Message-Id: <20031110192104.0E3CA772CC@mail.ossp.org>
Date: Mon, 10 Nov 2003 20:21:04 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Nov-2003 20:21:04
  Branch: HEAD                             Handle: 2003111019210400

  Modified files:
    ossp-pkg/l2             ChangeLog

  Log:
    add name of author

  Summary:
    Revision    Changes     Path
    1.11        +2  -0      ossp-pkg/l2/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 ChangeLog
  --- ossp-pkg/l2/ChangeLog	10 Nov 2003 15:29:24 -0000	1.10
  +++ ossp-pkg/l2/ChangeLog	10 Nov 2003 19:21:04 -0000	1.11
  @@ -12,8 +12,10 @@
     Changes between 0.9.4 and 0.9.5 (25-Sep-2003 to 10-Nov-2003)
   
       *) remove log0...4 macros
  +       [Thomas Lotterer <thomas@lotterer.net>]
   
       *) minor adjustments porting to OpenDarwin 6.6
  +       [Thomas Lotterer <thomas@lotterer.net>]
   
       *) Fix Problem where l2 does not terminate a message when it
          contains a \n so if previous message was longer the part between
  @@ .

From ossp-cvs-owner@ossp.org  Fri Nov 14 18:21:38 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4EEBA77313; Fri, 14 Nov 2003 18:21:38 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog NEWS
Message-Id: <20031114172138.4EEBA77313@mail.ossp.org>
Date: Fri, 14 Nov 2003 18:21:38 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   14-Nov-2003 18:21:38
  Branch: HEAD                             Handle: 2003111417213700

  Modified files:
    ossp-pkg/shtool         ChangeLog NEWS

  Log:
    remember changes

  Summary:
    Revision    Changes     Path
    1.190       +1  -1      ossp-pkg/shtool/ChangeLog
    1.6         +6  -0      ossp-pkg/shtool/NEWS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.189 -r1.190 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	13 Aug 2003 14:20:34 -0000	1.189
  +++ ossp-pkg/shtool/ChangeLog	14 Nov 2003 17:21:37 -0000	1.190
  @@ -9,7 +9,7 @@
   
    ChangeLog
   
  - Changes between 1.6.2 and 2.0b0 (02-Nov-2002 to xx-May-2003):
  + Changes between 1.6.2 and 2.0.0 (02-Nov-2002 to xx-Nov-2003):
   
      *) Replace "[ x -o/-a x ]" constructs with "[ x ] ||/&& [ x ]"
         and "egrep"/"fgrep" constructs with compatible "grep" or "case"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/NEWS
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 NEWS
  --- ossp-pkg/shtool/NEWS	2 Nov 2002 12:49:48 -0000	1.5
  +++ ossp-pkg/shtool/NEWS	14 Nov 2003 17:21:37 -0000	1.6
  @@ -9,6 +9,12 @@
     This is a list of user-visible and/or major changes to GNU shtool.
     For more details please have a look at the ChangeLog file.
   
  +  Changes between 1.6 and 2.0 (02-Nov-2002 to xx-Nov-2003)
  +
  +   *) Even more POSIX 1003.1-2001 compliancy and portability.
  +   *) Many workarounds and fixed for permission related problems
  +   *) Fixed error exit in all commands by introducing an "shtool_exit"
  +
     Changes between 1.5 and 1.6 (14-Jun-2001 to 02-Nov-2002)
   
      *) Added `shtool install -d' variant.
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 17 11:37:05 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5088377329; Mon, 17 Nov 2003 11:37:05 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ devtool.conf ossp-pkg/fsl/ devtool.conf ossp...
Message-Id: <20031117103705.5088377329@mail.ossp.org>
Date: Mon, 17 Nov 2003 11:37:05 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   17-Nov-2003 11:37:05
  Branch: HEAD                             Handle: 2003111710370301

  Modified files:
    ossp-pkg/cfg            devtool.conf
    ossp-pkg/fsl            devtool.conf
    ossp-pkg/l2             devtool.conf
    ossp-pkg/pcre           devtool.conf

  Log:
    align devtool.conf sections; add missing commit in cfg %tag

  Summary:
    Revision    Changes     Path
    1.13        +9  -8      ossp-pkg/cfg/devtool.conf
    1.21        +5  -5      ossp-pkg/fsl/devtool.conf
    1.13        +10 -11     ossp-pkg/l2/devtool.conf
    1.7         +3  -3      ossp-pkg/pcre/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 devtool.conf
  --- ossp-pkg/cfg/devtool.conf	10 Nov 2003 19:15:54 -0000	1.12
  +++ ossp-pkg/cfg/devtool.conf	17 Nov 2003 10:37:03 -0000	1.13
  @@ -29,7 +29,7 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.2 "1.6.*" all
  +    @autogen shtool   1.6.2 "1.6.*" echo fixperm install mkdir tarball version
       @autogen libtool  1.5   "1.[45]*"
       @autogen autoconf 2.58  "2.5[4-9]*"
   
  @@ -53,13 +53,14 @@
       ./devtool upload
   
   %version
  -    ./shtool version -l c -n "OSSP cfg" -p "__cfg_" -e cfg_vers.c
  -	V=`./shtool version -lc -dlong cfg_vers.c`
  -	sed -e "s/Version .*(.*)/Version $V/g" <README >README.n && mv README.n README
  +    ./shtool version -lc -n "OSSP cfg" -p "cfg_" -e cfg_vers.c
  +    V=`./shtool version -lc -dlong cfg_vers.c`
  +    sed -e "s/Version .*(.*)/Version $V/g" <README >README.n && mv README.n README
   
   %tag
  -	V=`./shtool version -lc -dshort cfg_vers.c | sed -e 's;\.;_;g'`
  +    V=`./shtool version -lc -dshort cfg_vers.c | sed -e 's;\.;_;g'`
       echo "+++ tagging CVS sources as CFG_${V}"
  +    cvs commit -m 'flush pending changes before tagging'
       cvs tag CFG_${V}
   
   %dist
  @@ -69,7 +70,7 @@
       ./devtool autoclean
       ./devtool autogen
       echo "+++ configuring"
  -    ./configure
  +    ./devtool configure
       echo "+++ building"
       make clean all man
       echo "+++ cleaning"
  @@ -77,7 +78,7 @@
       echo "+++ fixing"
       ./shtool fixperm -v .
       echo "+++ rolling"
  -	V=`./shtool version -lc -dshort cfg_vers.c`
  +    V=`./shtool version -lc -dshort cfg_vers.c`
       ./shtool tarball -o cfg-${V}.tar.gz -d cfg-${V} -u ossp -g ossp \
                        -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*,*.tar.gz,^#.*,.*~$' -c 'gzip --best' .
       ls -l cfg-${V}.tar.gz
  @@ -88,6 +89,6 @@
   
   %upload
       echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/cfg/"
  -	V=`./shtool version -lc -dshort cfg_vers.c`
  +    V=`./shtool version -lc -dshort cfg_vers.c`
       scp cfg-${V}.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/cfg/
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 devtool.conf
  --- ossp-pkg/fsl/devtool.conf	28 Oct 2003 15:27:01 -0000	1.20
  +++ ossp-pkg/fsl/devtool.conf	17 Nov 2003 10:37:03 -0000	1.21
  @@ -10,9 +10,9 @@
       done
   
   %autogen
  -    @autogen shtool   1.6.2 "1.6.*" all
  +    @autogen shtool   1.6.2 "1.6.*" echo fixperm install mkdir tarball version
       @autogen libtool  1.5 "1.[45]*"
  -    @autogen autoconf 2.57  "2.5[4-9]*"
  +    @autogen autoconf 2.58  "2.5[4-9]*"
   
       for name in l2 cfg pcre; do
           echo "===> lib_${name} (devtool autogen)"
  @@ -37,7 +37,7 @@
           --disable-shared \
           --enable-maintainer \
           --enable-debug \
  -       #--with-fsl-debuglogcode=yes \
  +        --with-fsl-debuglogcode=yes \
           "$@"
   
   %release
  @@ -47,9 +47,9 @@
       ./devtool upload
   
   %version
  -    ./shtool version -l c -n "OSSP fsl" -p "fsl_" -e fsl_version.c
  +    ./shtool version -lc -n "OSSP fsl" -p "fsl_" -e fsl_version.c
       V=`./shtool version -lc -dlong fsl_version.c`
  -    sed -e "s/Version .*/Version $V/g" <README >README.n && mv README.n README
  +    sed -e "s/Version .*(.*)/Version $V/g" <README >README.n && mv README.n README
   
   %tag
       V=`./shtool version -lc -dshort fsl_version.c | sed -e 's;\.;_;g'`
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 devtool.conf
  --- ossp-pkg/l2/devtool.conf	28 Oct 2003 15:27:02 -0000	1.12
  +++ ossp-pkg/l2/devtool.conf	17 Nov 2003 10:37:04 -0000	1.13
  @@ -29,9 +29,9 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.2 "1.6.*" all
  -    @autogen libtool  1.5 "1.[45]*"
  -    @autogen autoconf 2.57  "2.5[6-9]*"
  +    @autogen shtool   1.6.2 "1.6.*" echo fixperm install mkdir tarball version
  +    @autogen libtool  1.5   "1.[45]*"
  +    @autogen autoconf 2.58  "2.5[4-9]*"
   
   %autoclean
       @autoclean shtool
  @@ -53,13 +53,12 @@
       ./devtool upload
   
   %version
  -    ./shtool version -l c -n "OSSP l2" -p l2_ -e l2_version.c
  -    V=`./shtool version -l c -d long l2_version.c`
  -    sed -e "s/Version .*(.*)/Version $V/g" <README >README.n
  -    mv README.n README
  +    ./shtool version -lc -n "OSSP l2" -p "l2_" -e l2_version.c
  +    V=`./shtool version -lc -dlong l2_version.c`
  +    sed -e "s/Version .*(.*)/Version $V/g" <README >README.n && mv README.n README
   
   %tag
  -    V=`./shtool version -l c -d short l2_version.c | sed -e 's;\.;_;g'`
  +    V=`./shtool version -lc -dshort l2_version.c | sed -e 's;\.;_;g'`
       echo "+++ tagging CVS sources as L2_${V}"
       cvs commit -m 'flush pending changes before tagging'
       cvs tag L2_${V}
  @@ -71,7 +70,7 @@
       ./devtool autoclean
       ./devtool autogen
       echo "+++ configuring"
  -    ./configure
  +    ./devtool configure
       echo "+++ building"
       make clean all man
       echo "+++ cleaning"
  @@ -79,7 +78,7 @@
       echo "+++ fixing"
       ./shtool fixperm -v .
       echo "+++ rolling"
  -    V=`./shtool version -l c -d short l2_version.c`
  +    V=`./shtool version -lc -dshort l2_version.c`
       ./shtool tarball -o l2-${V}.tar.gz -d l2-${V} -u ossp -g ossp \
                        -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*,*.tar.gz,^#.*,.*~$' -c 'gzip --best' .
       ls -l l2-${V}.tar.gz
  @@ -90,6 +89,6 @@
   
   %upload
       echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/l2/"
  -    V=`./shtool version -l c -d short l2_version.c`
  +    V=`./shtool version -lc -dshort l2_version.c`
       scp l2-${V}.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/l2/
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pcre/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 devtool.conf
  --- ossp-pkg/pcre/devtool.conf	28 Oct 2003 15:27:02 -0000	1.6
  +++ ossp-pkg/pcre/devtool.conf	17 Nov 2003 10:37:04 -0000	1.7
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.2 "1.6.*" echo install mkdir fixperm tarball
  -    @autogen libtool  1.5 "1.[45]*"
  -    @autogen autoconf 2.57  "2.5[3-9]*"
  +    @autogen shtool   1.6.2 "1.6.*" echo fixperm install mkdir tarball version
  +    @autogen libtool  1.5   "1.[45]*"
  +    @autogen autoconf 2.58  "2.5[4-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 17 13:36:43 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 83D9577331; Mon, 17 Nov 2003 13:36:43 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog devtool.conf
Message-Id: <20031117123643.83D9577331@mail.ossp.org>
Date: Mon, 17 Nov 2003 13:36:43 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-Nov-2003 13:36:43
  Branch: HEAD                             Handle: 2003111712364200

  Modified files:
    ossp-pkg/shtool         ChangeLog devtool.conf

  Log:
    Upgraded to GNU Autoconf 2.58 environment.

  Summary:
    Revision    Changes     Path
    1.191       +4  -1      ossp-pkg/shtool/ChangeLog
    1.6         +1  -1      ossp-pkg/shtool/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.190 -r1.191 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	14 Nov 2003 17:21:37 -0000	1.190
  +++ ossp-pkg/shtool/ChangeLog	17 Nov 2003 12:36:42 -0000	1.191
  @@ -9,7 +9,10 @@
   
    ChangeLog
   
  - Changes between 1.6.2 and 2.0.0 (02-Nov-2002 to xx-Nov-2003):
  + Changes between 1.6.2 and 2.0.0 (02-Nov-2002 to 17-Nov-2003):
  +   
  +   *) Upgraded to GNU Autoconf 2.58 environment.
  +      [Ralf S. Engelschall]
   
      *) Replace "[ x -o/-a x ]" constructs with "[ x ] ||/&& [ x ]"
         and "egrep"/"fgrep" constructs with compatible "grep" or "case"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 devtool.conf
  --- ossp-pkg/shtool/devtool.conf	11 Feb 2003 13:03:10 -0000	1.5
  +++ ossp-pkg/shtool/devtool.conf	17 Nov 2003 12:36:42 -0000	1.6
  @@ -3,7 +3,7 @@
   ##
   
   %autogen
  -    @autogen autoconf 2.57 "2.5*"
  +    @autogen autoconf 2.58 "2.5*"
   
   %autoclean
       @autoclean autoconf
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 17 20:03:51 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5E36977338; Mon, 17 Nov 2003 20:03:51 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-gui/ Makefile.in aclocal.m4 configure.in
Message-Id: <20031117190351.5E36977338@mail.ossp.org>
Date: Mon, 17 Nov 2003 20:03:51 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   17-Nov-2003 20:03:51
  Branch: HEAD                             Handle: 2003111719035000

  Modified files:
    ossp-pkg/as/as-gui      Makefile.in aclocal.m4 configure.in

  Log:
    More reliably detect X11 features like Xft and Xrender, and integrate
    pkg-config aclocal M4 macro to call pkg-config from within a configure
    script. We use that to learn about the underlying Qt installation at build
    time.

  Summary:
    Revision    Changes     Path
    1.50        +9  -7      ossp-pkg/as/as-gui/Makefile.in
    1.16        +56 -0      ossp-pkg/as/as-gui/aclocal.m4
    1.23        +17 -31     ossp-pkg/as/as-gui/configure.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.49 -r1.50 Makefile.in
  --- ossp-pkg/as/as-gui/Makefile.in	6 Mar 2003 17:01:48 -0000	1.49
  +++ ossp-pkg/as/as-gui/Makefile.in	17 Nov 2003 19:03:50 -0000	1.50
  @@ -57,6 +57,8 @@
   IDL             = $(CORBABASE)/bin/idl
   
   # Qt-specific variables
  +QTCFLAGS        = @QT_CFLAGS@
  +QTLIBS          = @QT_LIBS@
   QTBASE          = @QTBASE@
   UIC             = @UIC@
   MOC             = @MOC@
  @@ -91,16 +93,16 @@
   .SUFFIXES:
   .SUFFIXES: .c .cc .cpp .cxx .o
   .c.o:
  -	$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $<
  +	$(CXX) -c $(CPPFLAGS) $(QTCFLAGS) $(CXXFLAGS) $<
   
   .cc.o:
  -	$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $<
  +	$(CXX) -c $(CPPFLAGS) $(QTCFLAGS) $(CXXFLAGS) $<
   
   .cpp.o:
  -	$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $<
  +	$(CXX) -c $(CPPFLAGS) $(QTCFLAGS) $(CXXFLAGS) $<
   
   .cxx.o:
  -	$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $<
  +	$(CXX) -c $(CPPFLAGS) $(QTCFLAGS) $(CXXFLAGS) $<
   
   all: Makefile $(TARGET_PROGS)
   
  @@ -108,10 +110,10 @@
   # RPC stubs and skeleton objects
   ifdef CORBABASE
   $(PROG_NAME): $(OBJS) $(IDL_OBJ) $(MOC_OBJ)
  -	$(CXX) $(LDFLAGS) -o $@ $+ $(LIBS)
  +	$(CXX) $(LDFLAGS) -o $@ $+ $(QTLIBS) $(LIBS)
   else
   $(PROG_NAME): $(OBJS) $(MOC_OBJ)
  -	$(CXX) $(LDFLAGS) -o $@ $+ $(LIBS)
  +	$(CXX) $(LDFLAGS) -o $@ $+ $(QTLIBS) $(LIBS)
   endif
   
   moc_%.cpp: %.h
  @@ -134,7 +136,7 @@
   
   # Special treatment for help panel class, which needs the $datadir variable
   as_helpanel.o: as_helpanel.cpp
  -	$(CXX) -c -DTITRAQ_DOCDIR=\"$(datadir)\" $(CPPFLAGS) $(CXXFLAGS) $<
  +	$(CXX) -c -DTITRAQ_DOCDIR=\"$(datadir)\" $(CPPFLAGS) $(QTCFLAGS) $(CXXFLAGS) $<
   
   doc: as-gui.1 as-gui.conf.5 as-events.5 as-accounts.5
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 aclocal.m4
  --- ossp-pkg/as/as-gui/aclocal.m4	6 Mar 2003 00:03:26 -0000	1.15
  +++ ossp-pkg/as/as-gui/aclocal.m4	17 Nov 2003 19:03:50 -0000	1.16
  @@ -401,6 +401,62 @@
   ])
   
   
  +dnl ##  PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4, action-if, action-not)
  +dnl ##  defines GSTUFF_LIBS, GSTUFF_CFLAGS, see pkg-config man page
  +dnl ##  also defines GSTUFF_PKG_ERRORS on error
  +AC_DEFUN(PKG_CHECK_MODULES, [
  +  succeeded=no
  +
  +  if test -z "$PKG_CONFIG"; then
  +    AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
  +  fi
  +
  +  if test "$PKG_CONFIG" = "no" ; then
  +     echo "*** The pkg-config script could not be found. Make sure it is"
  +     echo "*** in your path, or set the PKG_CONFIG environment variable"
  +     echo "*** to the full path to pkg-config."
  +     echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
  +  else
  +     PKG_CONFIG_MIN_VERSION=0.9.0
  +     if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
  +        AC_MSG_CHECKING(for $2)
  +
  +        if $PKG_CONFIG --exists "$2" ; then
  +            AC_MSG_RESULT(yes)
  +            succeeded=yes
  +
  +            AC_MSG_CHECKING($1_CFLAGS)
  +            $1_CFLAGS=`$PKG_CONFIG --cflags "$2"`
  +            AC_MSG_RESULT($$1_CFLAGS)
  +
  +            AC_MSG_CHECKING($1_LIBS)
  +            $1_LIBS=`$PKG_CONFIG --libs "$2"`
  +            AC_MSG_RESULT($$1_LIBS)
  +        else
  +            $1_CFLAGS=""
  +            $1_LIBS=""
  +            ## If we have a custom action on failure, don't print errors, but 
  +            ## do set a variable so people can do so.
  +            $1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
  +            ifelse([$4], ,echo $$1_PKG_ERRORS,)
  +        fi
  +
  +        AC_SUBST($1_CFLAGS)
  +        AC_SUBST($1_LIBS)
  +     else
  +        echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer."
  +        echo "*** See http://www.freedesktop.org/software/pkgconfig"
  +     fi
  +  fi
  +
  +  if test $succeeded = yes; then
  +     ifelse([$3], , :, [$3])
  +  else
  +     ifelse([$4], , AC_MSG_ERROR([Library requirements ($2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.]), [$4])
  +  fi
  +])
  +
  +
   dnl ##
   dnl ##  Debugging Support
   dnl ##
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/configure.in
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 configure.in
  --- ossp-pkg/as/as-gui/configure.in	29 Jul 2003 18:20:09 -0000	1.22
  +++ ossp-pkg/as/as-gui/configure.in	17 Nov 2003 19:03:50 -0000	1.23
  @@ -62,6 +62,23 @@
   CXXFLAGS="$CXXFLAGS $PTHREAD_CFLAGS"
   LIBS="`echo $PTHREAD_CFLAGS | sed -e 's;.*\(-[[pmk]]thread[[s]]*\).*;\1;'` $LIBS"
   
  +dnl Do Qt checks
  +PKG_CHECK_MODULES(QT, qt >= 3.2.0, have_qt=true, AC_MSG_ERROR([No qt installation found]))
  +    AC_SUBST(QT_LIBS)
  +    AC_SUBST(QT_CFLAGS)
  +
  +dnl Find Qt locations
  +AC_CHECK_QT
  +AC_SUBST(QTBASE)
  +AC_CHECK_UIC
  +AC_SUBST(UIC)
  +AC_CHECK_MOC
  +AC_SUBST(MOC)
  +
  +dnl Check generic libraries
  +AC_CHECK_LIB(dl, dlopen, [LIBS="$LIBS -ldl"])
  +AC_CHECK_LIB(rt, sched_get_priority_min, [LIBS="$LIBS -lrt"])
  +
   dnl Check other requirements
   AC_PROG_MAKE_SET
   AC_CHECK_DEBUGGING
  @@ -86,28 +103,6 @@
   AC_TEST_ESOAP
   AC_SUBST(SOAPBASE)
   
  -dnl Find out where the Qt implementation resides
  -AC_CHECK_QT
  -AC_SUBST(QTBASE)
  -AC_CHECK_UIC
  -AC_SUBST(UIC)
  -AC_CHECK_MOC
  -AC_SUBST(MOC)
  -
  -dnl Check our X environment
  -AC_PATH_X
  -if test ".$no_x" = .yes; then
  -    AC_ERROR([X11 includes and libraries are required, but none were found.])
  -else
  -if test $x_includes; then
  -    CXXFLAGS="$CXXFLAGS -I$x_includes"
  -fi
  -if test $x_libraries; then
  -    LDFLAGS="$LDFLAGS -L$x_libraries"
  -    LIBS="$LIBS -lX11 -lXext -lSM -lm"
  -fi
  -fi
  -
   dnl Check data type sizes of particular architecture
   dnl Hack: We're really interested in the unsigned types,
   dnl       but they're the same size according to ISO C++
  @@ -116,15 +111,6 @@
   AC_CHECK_SIZEOF(int)
   AC_CHECK_SIZEOF(long)
   AC_CHECK_SIZEOF(long long)
  -
  -dnl Check some X resources, typical of XFree86
  -AC_CHECK_LIB(Xft, XftFreeTypeOpen, [LIBS="$LIBS -lXft"])
  -AC_CHECK_LIB(Xrender, XRenderFindFormat, [LIBS="$LIBS -lXrender"])
  -AC_CHECK_LIB(Xinerama, XineramaIsActive, [LIBS="$LIBS -lXinerama"])
  -AC_CHECK_LIB(GL, glBegin, [LIBS="$LIBS -lGL"])
  -AC_CHECK_LIB(ICE, IceOpenConnection, [LIBS="$LIBS -lICE"])
  -AC_CHECK_LIB(dl, dlopen, [LIBS="$LIBS -ldl"])
  -AC_CHECK_LIB(rt, sched_get_priority_min, [LIBS="$LIBS -lrt"])
   
   enable_shared=no
   export enable_shared
  @@ .

From ossp-cvs-owner@ossp.org  Thu Nov 20 12:31:58 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4647777320; Thu, 20 Nov 2003 12:31:51 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-gui/ Makefile.in README aclocal.m4 as-accou...
Message-Id: <20031120113151.4647777320@mail.ossp.org>
Date: Thu, 20 Nov 2003 12:31:51 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   20-Nov-2003 12:31:49
  Branch: HEAD                             Handle: 2003112011311929

  Modified files:
    ossp-pkg/as/as-gui      Makefile.in README aclocal.m4 as-accounts.pod
                            as-events.pod as-gui.conf.pod as-gui.pod
                            as_amount.cpp as_amount.h as_assist.cpp as_const.h
                            as_crc.cpp as_crc.h as_dataop.cpp as_datedit.h
                            as_except.cpp as_except.h as_generic.cpp
                            as_generic.h as_gui.cpp as_gui.h as_gui_test.sh
                            as_helpanel.cpp as_helpanel.h as_main.cpp
                            as_numdial.cpp as_numdial.h as_panel.cpp
                            as_panel.h as_rand.cpp as_rand.h
                            as_reportpanel.cpp as_reportpanel.h as_sfile.cpp
                            as_sfile.h as_slot.cpp as_stub.idl as_table.cpp
                            as_table.h as_tableitem.h as_user.cpp as_user.h
                            as_uuid.cpp as_uuid.h configure.in
    ossp-pkg/as/as-gui/as_gfx
                            cwlogo.xpm osspicon.xpm ossplogo.xpm refresh.xpm
                            refreshd.xpm revcolour.xpm rowadd.xpm rowaddd.xpm
                            rowdel.xpm rowdeld.xpm sync.xpm

  Log:
    Handle the time consuming bureaucracy of changing a company name.

  Summary:
    Revision    Changes     Path
    1.51        +1  -1      ossp-pkg/as/as-gui/Makefile.in
    1.45        +3  -1      ossp-pkg/as/as-gui/README
    1.17        +5  -4      ossp-pkg/as/as-gui/aclocal.m4
    1.2         +1  -1      ossp-pkg/as/as-gui/as-accounts.pod
    1.3         +1  -1      ossp-pkg/as/as-gui/as-events.pod
    1.5         +1  -1      ossp-pkg/as/as-gui/as-gui.conf.pod
    1.7         +1  -1      ossp-pkg/as/as-gui/as-gui.pod
    1.7         +1  -1      ossp-pkg/as/as-gui/as_amount.cpp
    1.5         +1  -1      ossp-pkg/as/as-gui/as_amount.h
    1.116       +1  -1      ossp-pkg/as/as-gui/as_assist.cpp
    1.62        +1  -1      ossp-pkg/as/as-gui/as_const.h
    1.2         +1  -1      ossp-pkg/as/as-gui/as_crc.cpp
    1.3         +1  -1      ossp-pkg/as/as-gui/as_crc.h
    1.52        +1  -1      ossp-pkg/as/as-gui/as_dataop.cpp
    1.2         +1  -1      ossp-pkg/as/as-gui/as_datedit.h
    1.5         +1  -1      ossp-pkg/as/as-gui/as_except.cpp
    1.4         +1  -1      ossp-pkg/as/as-gui/as_except.h
    1.6         +1  -1      ossp-pkg/as/as-gui/as_generic.cpp
    1.4         +1  -1      ossp-pkg/as/as-gui/as_generic.h
    1.3         +1  -1      ossp-pkg/as/as-gui/as_gfx/cwlogo.xpm
    1.3         +1  -1      ossp-pkg/as/as-gui/as_gfx/osspicon.xpm
    1.6         +1  -1      ossp-pkg/as/as-gui/as_gfx/ossplogo.xpm
    1.3         +1  -1      ossp-pkg/as/as-gui/as_gfx/refresh.xpm
    1.3         +1  -1      ossp-pkg/as/as-gui/as_gfx/refreshd.xpm
    1.2         +1  -1      ossp-pkg/as/as-gui/as_gfx/revcolour.xpm
    1.3         +1  -1      ossp-pkg/as/as-gui/as_gfx/rowadd.xpm
    1.4         +1  -1      ossp-pkg/as/as-gui/as_gfx/rowaddd.xpm
    1.3         +1  -1      ossp-pkg/as/as-gui/as_gfx/rowdel.xpm
    1.3         +1  -1      ossp-pkg/as/as-gui/as_gfx/rowdeld.xpm
    1.3         +1  -1      ossp-pkg/as/as-gui/as_gfx/sync.xpm
    1.41        +1  -1      ossp-pkg/as/as-gui/as_gui.cpp
    1.78        +1  -1      ossp-pkg/as/as-gui/as_gui.h
    1.6         +1  -1      ossp-pkg/as/as-gui/as_gui_test.sh
    1.3         +1  -1      ossp-pkg/as/as-gui/as_helpanel.cpp
    1.3         +1  -1      ossp-pkg/as/as-gui/as_helpanel.h
    1.15        +1  -1      ossp-pkg/as/as-gui/as_main.cpp
    1.2         +1  -1      ossp-pkg/as/as-gui/as_numdial.cpp
    1.2         +1  -1      ossp-pkg/as/as-gui/as_numdial.h
    1.17        +1  -1      ossp-pkg/as/as-gui/as_panel.cpp
    1.15        +1  -1      ossp-pkg/as/as-gui/as_panel.h
    1.4         +1  -1      ossp-pkg/as/as-gui/as_rand.cpp
    1.2         +1  -1      ossp-pkg/as/as-gui/as_rand.h
    1.16        +1  -1      ossp-pkg/as/as-gui/as_reportpanel.cpp
    1.8         +1  -1      ossp-pkg/as/as-gui/as_reportpanel.h
    1.4         +1  -1      ossp-pkg/as/as-gui/as_sfile.cpp
    1.2         +1  -1      ossp-pkg/as/as-gui/as_sfile.h
    1.139       +5  -6      ossp-pkg/as/as-gui/as_slot.cpp
    1.6         +1  -1      ossp-pkg/as/as-gui/as_stub.idl
    1.24        +1  -1      ossp-pkg/as/as-gui/as_table.cpp
    1.16        +1  -1      ossp-pkg/as/as-gui/as_table.h
    1.6         +1  -1      ossp-pkg/as/as-gui/as_tableitem.h
    1.2         +1  -1      ossp-pkg/as/as-gui/as_user.cpp
    1.2         +1  -1      ossp-pkg/as/as-gui/as_user.h
    1.11        +1  -1      ossp-pkg/as/as-gui/as_uuid.cpp
    1.9         +1  -1      ossp-pkg/as/as-gui/as_uuid.h
    1.24        +1  -1      ossp-pkg/as/as-gui/configure.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.50 -r1.51 Makefile.in
  --- ossp-pkg/as/as-gui/Makefile.in	17 Nov 2003 19:03:50 -0000	1.50
  +++ ossp-pkg/as/as-gui/Makefile.in	20 Nov 2003 11:31:19 -0000	1.51
  @@ -1,9 +1,9 @@
   ##
   ##  OSSP asgui - Accounting system graphical user interface
   ##  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +##  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   ##
   ##  This file is part of OSSP asgui, an accounting system graphical user
   ##  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/README
  ============================================================================
  $ cvs diff -u -r1.44 -r1.45 README
  --- ossp-pkg/as/as-gui/README	6 Aug 2003 18:06:36 -0000	1.44
  +++ ossp-pkg/as/as-gui/README	20 Nov 2003 11:31:20 -0000	1.45
  @@ -16,7 +16,9 @@
     COPYRIGHT AND LICENSE
   
     Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   
     This file is part of OSSP asgui, an accounting system interface which
     can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 aclocal.m4
  --- ossp-pkg/as/as-gui/aclocal.m4	17 Nov 2003 19:03:50 -0000	1.16
  +++ ossp-pkg/as/as-gui/aclocal.m4	20 Nov 2003 11:31:20 -0000	1.17
  @@ -1,8 +1,9 @@
   ##
  -##  OSSP titraq - Graphical user interface for time accounting
  -##  Copyright (c) 2002 Cable & Wireless Deutschland GmbH
  -##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002 Ralf S. Engelschall
  +##  OSSP asgui - Accounting system graphical user interface
  +##  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +##  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   ##
   ##  This file is part of OSSP GUI, a graphical user interface
   ##  for OSSP which can be found at http://www.ossp.org/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as-accounts.pod
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 as-accounts.pod
  --- ossp-pkg/as/as-gui/as-accounts.pod	6 Mar 2003 16:59:13 -0000	1.1
  +++ ossp-pkg/as/as-gui/as-accounts.pod	20 Nov 2003 11:31:20 -0000	1.2
  @@ -1,9 +1,9 @@
   ##
   ##  OSSP asgui - Accounting system graphical user interface
   ##  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +##  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   ##
   ##  This file is part of OSSP asgui, an accounting system graphical user
   ##  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as-events.pod
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 as-events.pod
  --- ossp-pkg/as/as-gui/as-events.pod	6 Mar 2003 17:02:57 -0000	1.2
  +++ ossp-pkg/as/as-gui/as-events.pod	20 Nov 2003 11:31:20 -0000	1.3
  @@ -1,9 +1,9 @@
   ##
   ##  OSSP asgui - Accounting system graphical user interface
   ##  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +##  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   ##
   ##  This file is part of OSSP asgui, an accounting system graphical user
   ##  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as-gui.conf.pod
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 as-gui.conf.pod
  --- ossp-pkg/as/as-gui/as-gui.conf.pod	6 Mar 2003 17:02:57 -0000	1.4
  +++ ossp-pkg/as/as-gui/as-gui.conf.pod	20 Nov 2003 11:31:20 -0000	1.5
  @@ -1,9 +1,9 @@
   ##
   ##  OSSP asgui - Accounting system graphical user interface
   ##  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +##  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   ##
   ##  This file is part of OSSP asgui, an accounting system graphical user
   ##  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as-gui.pod
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 as-gui.pod
  --- ossp-pkg/as/as-gui/as-gui.pod	6 Mar 2003 17:02:57 -0000	1.6
  +++ ossp-pkg/as/as-gui/as-gui.pod	20 Nov 2003 11:31:20 -0000	1.7
  @@ -1,9 +1,9 @@
   ##
   ##  OSSP asgui - Accounting system graphical user interface
   ##  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +##  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   ##
   ##  This file is part of OSSP asgui, an accounting system graphical user
   ##  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_amount.cpp
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 as_amount.cpp
  --- ossp-pkg/as/as-gui/as_amount.cpp	17 Feb 2003 13:38:22 -0000	1.6
  +++ ossp-pkg/as/as-gui/as_amount.cpp	20 Nov 2003 11:31:20 -0000	1.7
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
   //  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   //  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   //  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_amount.h
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 as_amount.h
  --- ossp-pkg/as/as-gui/as_amount.h	17 Feb 2003 13:38:22 -0000	1.4
  +++ ossp-pkg/as/as-gui/as_amount.h	20 Nov 2003 11:31:20 -0000	1.5
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
   //  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   //  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   //  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_assist.cpp
  ============================================================================
  $ cvs diff -u -r1.115 -r1.116 as_assist.cpp
  --- ossp-pkg/as/as-gui/as_assist.cpp	5 Mar 2003 15:23:33 -0000	1.115
  +++ ossp-pkg/as/as-gui/as_assist.cpp	20 Nov 2003 11:31:20 -0000	1.116
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
   //  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   //  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   //  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_const.h
  ============================================================================
  $ cvs diff -u -r1.61 -r1.62 as_const.h
  --- ossp-pkg/as/as-gui/as_const.h	5 Mar 2003 20:27:34 -0000	1.61
  +++ ossp-pkg/as/as-gui/as_const.h	20 Nov 2003 11:31:20 -0000	1.62
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
   //  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   //  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   //  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_crc.cpp
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 as_crc.cpp
  --- ossp-pkg/as/as-gui/as_crc.cpp	3 Feb 2003 21:14:58 -0000	1.1
  +++ ossp-pkg/as/as-gui/as_crc.cpp	20 Nov 2003 11:31:20 -0000	1.2
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
   //  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   //  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   //  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_crc.h
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 as_crc.h
  --- ossp-pkg/as/as-gui/as_crc.h	7 Feb 2003 16:37:55 -0000	1.2
  +++ ossp-pkg/as/as-gui/as_crc.h	20 Nov 2003 11:31:20 -0000	1.3
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
   //  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   //  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   //  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_dataop.cpp
  ============================================================================
  $ cvs diff -u -r1.51 -r1.52 as_dataop.cpp
  --- ossp-pkg/as/as-gui/as_dataop.cpp	28 Feb 2003 17:12:24 -0000	1.51
  +++ ossp-pkg/as/as-gui/as_dataop.cpp	20 Nov 2003 11:31:20 -0000	1.52
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
   //  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   //  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   //  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_datedit.h
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 as_datedit.h
  --- ossp-pkg/as/as-gui/as_datedit.h	30 Jan 2003 14:39:33 -0000	1.1
  +++ ossp-pkg/as/as-gui/as_datedit.h	20 Nov 2003 11:31:20 -0000	1.2
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
   //  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   //  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   //  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_except.cpp
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 as_except.cpp
  --- ossp-pkg/as/as-gui/as_except.cpp	18 Dec 2002 10:36:10 -0000	1.4
  +++ ossp-pkg/as/as-gui/as_except.cpp	20 Nov 2003 11:31:20 -0000	1.5
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
   //  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   //  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   //  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_except.h
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 as_except.h
  --- ossp-pkg/as/as-gui/as_except.h	18 Dec 2002 10:36:10 -0000	1.3
  +++ ossp-pkg/as/as-gui/as_except.h	20 Nov 2003 11:31:20 -0000	1.4
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
   //  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   //  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   //  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_generic.cpp
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 as_generic.cpp
  --- ossp-pkg/as/as-gui/as_generic.cpp	18 Feb 2003 18:26:14 -0000	1.5
  +++ ossp-pkg/as/as-gui/as_generic.cpp	20 Nov 2003 11:31:20 -0000	1.6
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
   //  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   //  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   //  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_generic.h
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 as_generic.h
  --- ossp-pkg/as/as-gui/as_generic.h	7 Feb 2003 16:37:55 -0000	1.3
  +++ ossp-pkg/as/as-gui/as_generic.h	20 Nov 2003 11:31:20 -0000	1.4
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
   //  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   //  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   //  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_gfx/cwlogo.xpm
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 cwlogo.xpm
  --- ossp-pkg/as/as-gui/as_gfx/cwlogo.xpm	28 Nov 2002 20:44:39 -0000	1.2
  +++ ossp-pkg/as/as-gui/as_gfx/cwlogo.xpm	20 Nov 2003 11:31:48 -0000	1.3
  @@ -1,9 +1,9 @@
   /*
   **  OSSP asgui - Accounting system graphical user interface
   **  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   **  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +**  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   **
   **  This file is part of OSSP asgui, an accounting system graphical user
   **  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_gfx/osspicon.xpm
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 osspicon.xpm
  --- ossp-pkg/as/as-gui/as_gfx/osspicon.xpm	28 Nov 2002 20:44:39 -0000	1.2
  +++ ossp-pkg/as/as-gui/as_gfx/osspicon.xpm	20 Nov 2003 11:31:48 -0000	1.3
  @@ -1,9 +1,9 @@
   /*
   **  OSSP asgui - Accounting system graphical user interface
   **  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   **  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +**  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   **
   **  This file is part of OSSP asgui, an accounting system graphical user
   **  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_gfx/ossplogo.xpm
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ossplogo.xpm
  --- ossp-pkg/as/as-gui/as_gfx/ossplogo.xpm	28 Nov 2002 20:44:39 -0000	1.5
  +++ ossp-pkg/as/as-gui/as_gfx/ossplogo.xpm	20 Nov 2003 11:31:48 -0000	1.6
  @@ -1,9 +1,9 @@
   /*
   **  OSSP asgui - Accounting system graphical user interface
   **  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   **  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +**  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   **
   **  This file is part of OSSP asgui, an accounting system graphical user
   **  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_gfx/refresh.xpm
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 refresh.xpm
  --- ossp-pkg/as/as-gui/as_gfx/refresh.xpm	19 Dec 2002 20:34:58 -0000	1.2
  +++ ossp-pkg/as/as-gui/as_gfx/refresh.xpm	20 Nov 2003 11:31:48 -0000	1.3
  @@ -1,9 +1,9 @@
   /*
   **  OSSP asgui - Accounting system graphical user interface
   **  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   **  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +**  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   **
   **  This file is part of OSSP asgui, an accounting system graphical user
   **  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_gfx/refreshd.xpm
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 refreshd.xpm
  --- ossp-pkg/as/as-gui/as_gfx/refreshd.xpm	20 Dec 2002 12:16:10 -0000	1.2
  +++ ossp-pkg/as/as-gui/as_gfx/refreshd.xpm	20 Nov 2003 11:31:48 -0000	1.3
  @@ -1,9 +1,9 @@
   /*
   **  OSSP asgui - Accounting system graphical user interface
   **  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   **  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +**  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   **
   **  This file is part of OSSP asgui, an accounting system graphical user
   **  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_gfx/revcolour.xpm
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 revcolour.xpm
  --- ossp-pkg/as/as-gui/as_gfx/revcolour.xpm	21 Feb 2003 15:03:24 -0000	1.1
  +++ ossp-pkg/as/as-gui/as_gfx/revcolour.xpm	20 Nov 2003 11:31:48 -0000	1.2
  @@ -1,9 +1,9 @@
   /*
   **  OSSP asgui - Accounting system graphical user interface
   **  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   **  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +**  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   **
   **  This file is part of OSSP asgui, an accounting system graphical user
   **  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_gfx/rowadd.xpm
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 rowadd.xpm
  --- ossp-pkg/as/as-gui/as_gfx/rowadd.xpm	28 Nov 2002 20:44:39 -0000	1.2
  +++ ossp-pkg/as/as-gui/as_gfx/rowadd.xpm	20 Nov 2003 11:31:48 -0000	1.3
  @@ -1,9 +1,9 @@
   /*
   **  OSSP asgui - Accounting system graphical user interface
   **  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   **  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +**  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   **
   **  This file is part of OSSP asgui, an accounting system graphical user
   **  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_gfx/rowaddd.xpm
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 rowaddd.xpm
  --- ossp-pkg/as/as-gui/as_gfx/rowaddd.xpm	14 Feb 2003 19:23:41 -0000	1.3
  +++ ossp-pkg/as/as-gui/as_gfx/rowaddd.xpm	20 Nov 2003 11:31:48 -0000	1.4
  @@ -1,9 +1,9 @@
   /*
   **  OSSP asgui - Accounting system graphical user interface
   **  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   **  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +**  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   **
   **  This file is part of OSSP asgui, an accounting system graphical user
   **  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_gfx/rowdel.xpm
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 rowdel.xpm
  --- ossp-pkg/as/as-gui/as_gfx/rowdel.xpm	28 Nov 2002 20:44:39 -0000	1.2
  +++ ossp-pkg/as/as-gui/as_gfx/rowdel.xpm	20 Nov 2003 11:31:48 -0000	1.3
  @@ -1,9 +1,9 @@
   /*
   **  OSSP asgui - Accounting system graphical user interface
   **  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   **  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +**  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   **
   **  This file is part of OSSP asgui, an accounting system graphical user
   **  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_gfx/rowdeld.xpm
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 rowdeld.xpm
  --- ossp-pkg/as/as-gui/as_gfx/rowdeld.xpm	20 Dec 2002 12:16:10 -0000	1.2
  +++ ossp-pkg/as/as-gui/as_gfx/rowdeld.xpm	20 Nov 2003 11:31:48 -0000	1.3
  @@ -1,9 +1,9 @@
   /*
   **  OSSP asgui - Accounting system graphical user interface
   **  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   **  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +**  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   **
   **  This file is part of OSSP asgui, an accounting system graphical user
   **  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_gfx/sync.xpm
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 sync.xpm
  --- ossp-pkg/as/as-gui/as_gfx/sync.xpm	21 Feb 2003 15:03:24 -0000	1.2
  +++ ossp-pkg/as/as-gui/as_gfx/sync.xpm	20 Nov 2003 11:31:48 -0000	1.3
  @@ -1,9 +1,9 @@
   /*
   **  OSSP asgui - Accounting system graphical user interface
   **  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   **  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   **  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +**  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   **
   **  This file is part of OSSP asgui, an accounting system graphical user
   **  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_gui.cpp
  ============================================================================
  $ cvs diff -u -r1.40 -r1.41 as_gui.cpp
  --- ossp-pkg/as/as-gui/as_gui.cpp	14 Feb 2003 17:31:54 -0000	1.40
  +++ ossp-pkg/as/as-gui/as_gui.cpp	20 Nov 2003 11:31:20 -0000	1.41
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
   //  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   //  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   //  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_gui.h
  ============================================================================
  $ cvs diff -u -r1.77 -r1.78 as_gui.h
  --- ossp-pkg/as/as-gui/as_gui.h	17 Feb 2003 17:18:24 -0000	1.77
  +++ ossp-pkg/as/as-gui/as_gui.h	20 Nov 2003 11:31:20 -0000	1.78
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
   //  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   //  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   //  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_gui_test.sh
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 as_gui_test.sh
  --- ossp-pkg/as/as-gui/as_gui_test.sh	19 Dec 2002 21:02:22 -0000	1.5
  +++ ossp-pkg/as/as-gui/as_gui_test.sh	20 Nov 2003 11:31:20 -0000	1.6
  @@ -1,9 +1,9 @@
   ##
   ##  OSSP asgui - Accounting system graphical user interface
   ##  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +##  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   ##
   ##  This file is part of OSSP asgui, an accounting system graphical user
   ##  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_helpanel.cpp
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 as_helpanel.cpp
  --- ossp-pkg/as/as-gui/as_helpanel.cpp	5 Mar 2003 20:27:34 -0000	1.2
  +++ ossp-pkg/as/as-gui/as_helpanel.cpp	20 Nov 2003 11:31:20 -0000	1.3
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
   //  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   //  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   //  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_helpanel.h
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 as_helpanel.h
  --- ossp-pkg/as/as-gui/as_helpanel.h	5 Mar 2003 20:27:34 -0000	1.2
  +++ ossp-pkg/as/as-gui/as_helpanel.h	20 Nov 2003 11:31:20 -0000	1.3
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
   //  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   //  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   //  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_main.cpp
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 as_main.cpp
  --- ossp-pkg/as/as-gui/as_main.cpp	14 Feb 2003 19:27:03 -0000	1.14
  +++ ossp-pkg/as/as-gui/as_main.cpp	20 Nov 2003 11:31:20 -0000	1.15
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
   //  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   //  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   //  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_numdial.cpp
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 as_numdial.cpp
  --- ossp-pkg/as/as-gui/as_numdial.cpp	25 Feb 2003 09:24:07 -0000	1.1
  +++ ossp-pkg/as/as-gui/as_numdial.cpp	20 Nov 2003 11:31:20 -0000	1.2
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
   //  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   //  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   //  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_numdial.h
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 as_numdial.h
  --- ossp-pkg/as/as-gui/as_numdial.h	25 Feb 2003 09:24:07 -0000	1.1
  +++ ossp-pkg/as/as-gui/as_numdial.h	20 Nov 2003 11:31:20 -0000	1.2
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
   //  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   //  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   //  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_panel.cpp
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 as_panel.cpp
  --- ossp-pkg/as/as-gui/as_panel.cpp	25 Feb 2003 09:26:17 -0000	1.16
  +++ ossp-pkg/as/as-gui/as_panel.cpp	20 Nov 2003 11:31:20 -0000	1.17
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
   //  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   //  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   //  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_panel.h
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 as_panel.h
  --- ossp-pkg/as/as-gui/as_panel.h	25 Feb 2003 09:26:16 -0000	1.14
  +++ ossp-pkg/as/as-gui/as_panel.h	20 Nov 2003 11:31:20 -0000	1.15
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
   //  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   //  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   //  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_rand.cpp
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 as_rand.cpp
  --- ossp-pkg/as/as-gui/as_rand.cpp	30 Jan 2003 15:14:57 -0000	1.3
  +++ ossp-pkg/as/as-gui/as_rand.cpp	20 Nov 2003 11:31:20 -0000	1.4
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
   //  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   //  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   //  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_rand.h
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 as_rand.h
  --- ossp-pkg/as/as-gui/as_rand.h	22 Jan 2003 18:57:57 -0000	1.1
  +++ ossp-pkg/as/as-gui/as_rand.h	20 Nov 2003 11:31:20 -0000	1.2
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
   //  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   //  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   //  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_reportpanel.cpp
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 as_reportpanel.cpp
  --- ossp-pkg/as/as-gui/as_reportpanel.cpp	27 Feb 2003 13:56:22 -0000	1.15
  +++ ossp-pkg/as/as-gui/as_reportpanel.cpp	20 Nov 2003 11:31:20 -0000	1.16
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
   //  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   //  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   //  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_reportpanel.h
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 as_reportpanel.h
  --- ossp-pkg/as/as-gui/as_reportpanel.h	25 Feb 2003 09:29:31 -0000	1.7
  +++ ossp-pkg/as/as-gui/as_reportpanel.h	20 Nov 2003 11:31:20 -0000	1.8
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
   //  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   //  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   //  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_sfile.cpp
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 as_sfile.cpp
  --- ossp-pkg/as/as-gui/as_sfile.cpp	13 Feb 2003 21:50:35 -0000	1.3
  +++ ossp-pkg/as/as-gui/as_sfile.cpp	20 Nov 2003 11:31:20 -0000	1.4
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
   //  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   //  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   //  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_sfile.h
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 as_sfile.h
  --- ossp-pkg/as/as-gui/as_sfile.h	8 Feb 2003 18:10:09 -0000	1.1
  +++ ossp-pkg/as/as-gui/as_sfile.h	20 Nov 2003 11:31:20 -0000	1.2
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
   //  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   //  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   //  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_slot.cpp
  ============================================================================
  $ cvs diff -u -r1.138 -r1.139 as_slot.cpp
  --- ossp-pkg/as/as-gui/as_slot.cpp	28 Apr 2003 16:47:26 -0000	1.138
  +++ ossp-pkg/as/as-gui/as_slot.cpp	20 Nov 2003 11:31:20 -0000	1.139
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
   //  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   //  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   //  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ -1888,11 +1888,10 @@
   {
       QString Namever = QString(TITRAQ_APPTITLE) + ' ' + asgui_version.v_short;
       QMessageBox *pCwmsg = new QMessageBox(Namever,
  -        QObject::trUtf8("The as-gui is a time and task-based\n"
  -               "accounting system that acts as both a\n"
  -               "work-like punch card and time tracker.\n"
  -               "Development of as-gui is sponsored by\n"
  -               "Cable & Wireless Deutschland GmbH."),
  +        QObject::trUtf8("The as-gui is a time and task-based accounting\n"
  +               "system that acts as both a work-like punch card and\n"
  +               "time tracker. Development of as-gui is sponsored by\n"
  +               "Cable & Wireless Telecommunications Services GmbH."),
           QMessageBox::NoIcon, QMessageBox::Ok | QMessageBox::Default,
           QMessageBox::NoButton, QMessageBox::NoButton,
           NULL, "Titraqmessage", true, Qt::WStyle_NormalBorder);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_stub.idl
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 as_stub.idl
  --- ossp-pkg/as/as-gui/as_stub.idl	4 Feb 2003 20:32:46 -0000	1.5
  +++ ossp-pkg/as/as-gui/as_stub.idl	20 Nov 2003 11:31:20 -0000	1.6
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
   //  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   //  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   //  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_table.cpp
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 as_table.cpp
  --- ossp-pkg/as/as-gui/as_table.cpp	21 Feb 2003 10:12:02 -0000	1.23
  +++ ossp-pkg/as/as-gui/as_table.cpp	20 Nov 2003 11:31:20 -0000	1.24
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
   //  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   //  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   //  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_table.h
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 as_table.h
  --- ossp-pkg/as/as-gui/as_table.h	21 Feb 2003 10:12:02 -0000	1.15
  +++ ossp-pkg/as/as-gui/as_table.h	20 Nov 2003 11:31:20 -0000	1.16
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
   //  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   //  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   //  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_tableitem.h
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 as_tableitem.h
  --- ossp-pkg/as/as-gui/as_tableitem.h	4 Dec 2002 20:30:54 -0000	1.5
  +++ ossp-pkg/as/as-gui/as_tableitem.h	20 Nov 2003 11:31:20 -0000	1.6
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
   //  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   //  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   //  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_user.cpp
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 as_user.cpp
  --- ossp-pkg/as/as-gui/as_user.cpp	30 Jan 2003 16:51:45 -0000	1.1
  +++ ossp-pkg/as/as-gui/as_user.cpp	20 Nov 2003 11:31:20 -0000	1.2
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
   //  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   //  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   //  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_user.h
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 as_user.h
  --- ossp-pkg/as/as-gui/as_user.h	30 Jan 2003 16:52:09 -0000	1.1
  +++ ossp-pkg/as/as-gui/as_user.h	20 Nov 2003 11:31:20 -0000	1.2
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
   //  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   //  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   //  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_uuid.cpp
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 as_uuid.cpp
  --- ossp-pkg/as/as-gui/as_uuid.cpp	4 Feb 2003 19:39:44 -0000	1.10
  +++ ossp-pkg/as/as-gui/as_uuid.cpp	20 Nov 2003 11:31:20 -0000	1.11
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
   //  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   //  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   //  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_uuid.h
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 as_uuid.h
  --- ossp-pkg/as/as-gui/as_uuid.h	20 Feb 2003 16:46:15 -0000	1.8
  +++ ossp-pkg/as/as-gui/as_uuid.h	20 Nov 2003 11:31:20 -0000	1.9
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
   //  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   //  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   //  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/configure.in
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 configure.in
  --- ossp-pkg/as/as-gui/configure.in	17 Nov 2003 19:03:50 -0000	1.23
  +++ ossp-pkg/as/as-gui/configure.in	20 Nov 2003 11:31:20 -0000	1.24
  @@ -1,9 +1,9 @@
   ##
   ##  OSSP asgui - Accounting system graphical user interface
   ##  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
   ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  +##  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
   ##
   ##  This file is part of OSSP asgui, an accounting system graphical user
   ##  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .

From ossp-cvs-owner@ossp.org  Thu Nov 20 12:44:16 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0BAFA77320; Thu, 20 Nov 2003 12:44:15 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-gui/ ChangeLog README as_version.cpp
Message-Id: <20031120114415.0BAFA77320@mail.ossp.org>
Date: Thu, 20 Nov 2003 12:44:15 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   20-Nov-2003 12:44:15
  Branch: HEAD                             Handle: 2003112011441500

  Modified files:
    ossp-pkg/as/as-gui      ChangeLog README as_version.cpp

  Log:
    Prepare for release.

  Summary:
    Revision    Changes     Path
    1.51        +6  -0      ossp-pkg/as/as-gui/ChangeLog
    1.46        +1  -1      ossp-pkg/as/as-gui/README
    1.43        +9  -9      ossp-pkg/as/as-gui/as_version.cpp
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.50 -r1.51 ChangeLog
  --- ossp-pkg/as/as-gui/ChangeLog	6 Aug 2003 18:06:36 -0000	1.50
  +++ ossp-pkg/as/as-gui/ChangeLog	20 Nov 2003 11:44:15 -0000	1.51
  @@ -1,5 +1,11 @@
   Geschichte des OSSP titraq in Vorwaerts Cronordnung
   
  +031120 Handle the time consuming bureaucracy of changing a company name.
  +
  +031118 More reliably detect X11 features like Xft and Xrender, and
  +       integrate pkg-config aclocal M4 macro to call pkg-config from
  +       within configure. Now OSSP as-gui requires Gnome pkg-config.
  +
   030802 Added a check for sched_get_priority_min in librt to configure.in
   
   030428 Fixed a bug, causing a cancelled focus operation on rowadd
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/README
  ============================================================================
  $ cvs diff -u -r1.45 -r1.46 README
  --- ossp-pkg/as/as-gui/README	20 Nov 2003 11:31:20 -0000	1.45
  +++ ossp-pkg/as/as-gui/README	20 Nov 2003 11:44:15 -0000	1.46
  @@ -5,7 +5,7 @@
                  |_|                 |___/
   
     OSSP asgui -- Accounting system graphical user interface
  -  Version 0.7.4 (06-Aug-2003)
  +  Version 0.7.5 (20-Nov-2003)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_version.cpp
  ============================================================================
  $ cvs diff -u -r1.42 -r1.43 as_version.cpp
  --- ossp-pkg/as/as-gui/as_version.cpp	6 Aug 2003 18:06:37 -0000	1.42
  +++ ossp-pkg/as/as-gui/as_version.cpp	20 Nov 2003 11:44:15 -0000	1.43
  @@ -8,7 +8,7 @@
   #ifndef _AS_VERSION_CPP_
   #define _AS_VERSION_CPP_
   
  -#define ASGUI_VERSION 0x007204
  +#define ASGUI_VERSION 0x007205
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _AS_VERSION_CPP_AS_HEADER_
   
   asgui_version_t asgui_version = {
  -    0x007204,
  -    "0.7.4",
  -    "0.7.4 (06-Aug-2003)",
  -    "This is OSSP as-gui, Version 0.7.4 (06-Aug-2003)",
  -    "OSSP as-gui 0.7.4 (06-Aug-2003)",
  -    "OSSP as-gui/0.7.4",
  -    "@(#)OSSP as-gui 0.7.4 (06-Aug-2003)",
  -    "$Id: as_version.cpp,v 1.42 2003/08/06 18:06:37 ms Exp $"
  +    0x007205,
  +    "0.7.5",
  +    "0.7.5 (20-Nov-2003)",
  +    "This is OSSP as-gui, Version 0.7.5 (20-Nov-2003)",
  +    "OSSP as-gui 0.7.5 (20-Nov-2003)",
  +    "OSSP as-gui/0.7.5",
  +    "@(#)OSSP as-gui 0.7.5 (20-Nov-2003)",
  +    "$Id: as_version.cpp,v 1.43 2003/11/20 11:44:15 ms Exp $"
   };
   
   #endif /* _AS_VERSION_CPP_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Dec  1 18:13:35 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A893477384; Mon,  1 Dec 2003 18:13:34 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-doc/ accounts.txt
Message-Id: <20031201171334.A893477384@mail.ossp.org>
Date: Mon,  1 Dec 2003 18:13:34 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   01-Dec-2003 18:13:34
  Branch: HEAD                             Handle: 2003120117133400

  Modified files:
    ossp-pkg/as/as-doc      accounts.txt

  Log:
    merge in new items discussed at Peter K's meeting

  Summary:
    Revision    Changes     Path
    1.37        +72 -7      ossp-pkg/as/as-doc/accounts.txt
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-doc/accounts.txt
  ============================================================================
  $ cvs diff -u -r1.36 -r1.37 accounts.txt
  --- ossp-pkg/as/as-doc/accounts.txt	2 Sep 2003 07:25:53 -0000	1.36
  +++ ossp-pkg/as/as-doc/accounts.txt	1 Dec 2003 17:13:34 -0000	1.37
  @@ -55,6 +55,39 @@
   R /de/is/prj/issc                          # [I] Project IS Setup Consolidation
   
   ##
  +##  C&W DE, Combined Group (New Listings)
  +##
  +
  +#   Generic Servers
  +R /de/is/com/server                       # [I] Generic Servers
  +R /de/is/com/server/phaseout              # [I] Generic Servers, Service Phaseout
  +R /de/is/com/server/migration             # [I] Generic Servers, Service Migration
  +
  +#   DNS Servers
  +R /de/is/com/dns                          # [I] DNS Servers
  +R /de/is/com/dns/installation             # [I] DNS Servers, Installation
  +R /de/is/com/dns/maintenance              # [I] DNS Servers, Maintenance
  +R /de/is/com/dns/security                 # [I] DNS Servers, Security
  +
  +#   PESP Servers
  +R /de/is/com/pesp                         # [I] PESP Servers
  +R /de/is/com/pesp/installation            # [I] PESP Servers, Installation
  +R /de/is/com/pesp/maintenance             # [I] PESP Servers, Maintenance
  +R /de/is/com/pesp/security                # [I] PESP Servers, Security
  +
  +#   ITS Servers
  +R /de/is/com/its                          # [I] ITS Servers
  +R /de/is/com/its/installation             # [I] ITS Servers, Installation
  +R /de/is/com/its/maintenance              # [I] ITS Servers, Maintenance
  +R /de/is/com/its/security                 # [I] ITS Servers, Security
  +
  +#   OSS/BSS Servers
  +R /de/is/com/oss                          # [I] OSS/BSS Servers
  +R /de/is/com/oss/installation             # [I] OSS/BSS Servers, Installation
  +R /de/is/com/oss/maintenance              # [I] OSS/BSS Servers, Maintenance
  +R /de/is/com/oss/security                 # [I] OSS/BSS Servers, Security
  +
  +##
   ##  C&W DE, IS, Management
   ##
   
  @@ -201,13 +234,45 @@
   R /de/is/cus/any/troubleshooting          # [E] Customer, Troubleshooting
   
   #   Customer Fraport
  -R /de/is/cus/fraport                       # [E] Fraport, General
  -R /de/is/cus/fraport/meeting               # [E] Fraport, Meeting
  -R /de/is/cus/fraport/offerings             # [E] Fraport, Offerings
  -R /de/is/cus/fraport/consulting            # [E] Fraport, Consulting
  -R /de/is/cus/fraport/evaluation            # [E] Fraport, Evaluation
  -R /de/is/cus/fraport/implementation        # [E] Fraport, Implementation
  -R /de/is/cus/fraport/troubleshooting       # [E] Fraport, Troubleshooting
  +R /de/is/cus/fraport                      # [E] Fraport, General
  +R /de/is/cus/fraport/meeting              # [E] Fraport, Meeting
  +R /de/is/cus/fraport/offerings            # [E] Fraport, Offerings
  +R /de/is/cus/fraport/consulting           # [E] Fraport, Consulting
  +R /de/is/cus/fraport/evaluation           # [E] Fraport, Evaluation
  +R /de/is/cus/fraport/implementation       # [E] Fraport, Implementation
  +R /de/is/cus/fraport/troubleshooting      # [E] Fraport, Troubleshooting
  +
  +#   Customer AL-KO
  +R /de/is/cus/al-ko                        # [E] AL-KO, General
  +R /de/is/cus/al-ko/meeting                # [E] AL-KO, Meeting
  +R /de/is/cus/al-ko/offerings              # [E] AL-KO, Offerings
  +R /de/is/cus/al-ko/consulting             # [E] AL-KO, Consulting
  +R /de/is/cus/al-ko/evaluation             # [E] AL-KO, Evaluation
  +R /de/is/cus/al-ko/implementation         # [E] AL-KO, Implementation
  +R /de/is/cus/al-ko/troubleshooting        # [E] AL-KO, Troubleshooting
  +
  +#   Customer Phonefile
  +R /de/is/cus/phonefile                    # [E] Phonefile, General
  +R /de/is/cus/phonefile/meeting            # [E] Phonefile, Meeting
  +R /de/is/cus/phonefile/offerings          # [E] Phonefile, Offerings
  +R /de/is/cus/phonefile/consulting         # [E] Phonefile, Consulting
  +R /de/is/cus/phonefile/evaluation         # [E] Phonefile, Evaluation
  +R /de/is/cus/phonefile/implementation     # [E] Phonefile, Implementation
  +R /de/is/cus/phonefile/troubleshooting    # [E] Phonefile, Troubleshooting
  +
  +#   Customer Die Zeit
  +R /de/is/cus/diezeit                      # [E] Die Zeit, General
  +R /de/is/cus/diezeit/meeting              # [E] Die Zeit, Meeting
  +R /de/is/cus/diezeit/offerings            # [E] Die Zeit, Offerings
  +R /de/is/cus/diezeit/consulting           # [E] Die Zeit, Consulting
  +R /de/is/cus/diezeit/evaluation           # [E] Die Zeit, Evaluation
  +R /de/is/cus/diezeit/implementation       # [E] Die Zeit, Implementation
  +R /de/is/cus/diezeit/troubleshooting      # [E] Die Zeit, Troubleshooting
  +
  +#   Customer Support Server
  +R /de/is/cus/supportserver                # [E] Customer Support Server, General
  +R /de/is/cus/supportserver/phaseout       # [E] Customer Support Server, DE phase out
  +R /de/is/cus/supportserver/implement      # [E] Customer Support Server, EU phase in
   
   #   Customer STRATO
   R /de/is/cus/strato                       # [E] STRATO, General
  @@ .

From ossp-cvs-owner@ossp.org  Mon Dec  1 18:43:58 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 895BC77384; Mon,  1 Dec 2003 18:43:58 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-gui/ as_reportpanel.cpp
Message-Id: <20031201174358.895BC77384@mail.ossp.org>
Date: Mon,  1 Dec 2003 18:43:58 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   01-Dec-2003 18:43:58
  Branch: HEAD                             Handle: 2003120117435700

  Modified files:
    ossp-pkg/as/as-gui      as_reportpanel.cpp

  Log:
    Correct label text on save and print buttons.

  Summary:
    Revision    Changes     Path
    1.17        +2  -2      ossp-pkg/as/as-gui/as_reportpanel.cpp
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_reportpanel.cpp
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 as_reportpanel.cpp
  --- ossp-pkg/as/as-gui/as_reportpanel.cpp	20 Nov 2003 11:31:20 -0000	1.16
  +++ ossp-pkg/as/as-gui/as_reportpanel.cpp	1 Dec 2003 17:43:57 -0000	1.17
  @@ -741,10 +741,10 @@
       this->setCaption(trUtf8("AS local report", "Local report using weekly or monthly data."));
   
       // Top level push buttons associated with accept and save slots
  -    m_pSavebutt->setText(trUtf8("Save", "Comment for Savebutton"));
  +    m_pSavebutt->setText(trUtf8("Save As...", "Comment for Savebutton"));
       QToolTip::add(m_pSavebutt, trUtf8("Saves the report text", "Comment for tooltip Savebutton"));
       QWhatsThis::add(m_pSavebutt, trUtf8("The save button saves the report text to a file", "Comment for whatsThis Savebutton"));
  -    m_pPrintbutt->setText(trUtf8("Print", "Comment for Printbutton"));
  +    m_pPrintbutt->setText(trUtf8("Print...", "Comment for Printbutton"));
       QToolTip::add(m_pPrintbutt, trUtf8("Print the report text", "Comment for tooltip Printbutton"));
       QWhatsThis::add(m_pPrintbutt, trUtf8("The print button prints the report text to a file", "Comment for whatsThis Printbutton"));
       m_pDismissbutt->setText(trUtf8("Dismiss", "Comment for Dismissbutton"));
  @@ .

From ossp-cvs-owner@ossp.org  Mon Dec  1 19:18:27 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C6CAE77384; Mon,  1 Dec 2003 19:18:26 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-doc/ accounts.txt
Message-Id: <20031201181826.C6CAE77384@mail.ossp.org>
Date: Mon,  1 Dec 2003 19:18:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   01-Dec-2003 19:18:26
  Branch: HEAD                             Handle: 2003120118182600

  Modified files:
    ossp-pkg/as/as-doc      accounts.txt

  Log:
    Fix Phonofile name.

  Summary:
    Revision    Changes     Path
    1.38        +8  -8      ossp-pkg/as/as-doc/accounts.txt
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-doc/accounts.txt
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 accounts.txt
  --- ossp-pkg/as/as-doc/accounts.txt	1 Dec 2003 17:13:34 -0000	1.37
  +++ ossp-pkg/as/as-doc/accounts.txt	1 Dec 2003 18:18:26 -0000	1.38
  @@ -251,14 +251,14 @@
   R /de/is/cus/al-ko/implementation         # [E] AL-KO, Implementation
   R /de/is/cus/al-ko/troubleshooting        # [E] AL-KO, Troubleshooting
   
  -#   Customer Phonefile
  -R /de/is/cus/phonefile                    # [E] Phonefile, General
  -R /de/is/cus/phonefile/meeting            # [E] Phonefile, Meeting
  -R /de/is/cus/phonefile/offerings          # [E] Phonefile, Offerings
  -R /de/is/cus/phonefile/consulting         # [E] Phonefile, Consulting
  -R /de/is/cus/phonefile/evaluation         # [E] Phonefile, Evaluation
  -R /de/is/cus/phonefile/implementation     # [E] Phonefile, Implementation
  -R /de/is/cus/phonefile/troubleshooting    # [E] Phonefile, Troubleshooting
  +#   Customer Phonofile
  +R /de/is/cus/phonofile                    # [E] Phonofile, General
  +R /de/is/cus/phonofile/meeting            # [E] Phonofile, Meeting
  +R /de/is/cus/phonofile/offerings          # [E] Phonofile, Offerings
  +R /de/is/cus/phonofile/consulting         # [E] Phonofile, Consulting
  +R /de/is/cus/phonofile/evaluation         # [E] Phonofile, Evaluation
  +R /de/is/cus/phonofile/implementation     # [E] Phonofile, Implementation
  +R /de/is/cus/phonofile/troubleshooting    # [E] Phonofile, Troubleshooting
   
   #   Customer Die Zeit
   R /de/is/cus/diezeit                      # [E] Die Zeit, General
  @@ .

From ossp-cvs-owner@ossp.org  Mon Dec  8 12:02:59 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B3C43773BC; Mon,  8 Dec 2003 12:02:59 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-doc/ accounts.txt
Message-Id: <20031208110259.B3C43773BC@mail.ossp.org>
Date: Mon,  8 Dec 2003 12:02:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   08-Dec-2003 12:02:59
  Branch: HEAD                             Handle: 2003120811025900

  Modified files:
    ossp-pkg/as/as-doc      accounts.txt

  Log:
    add new weekly common team meeting

  Summary:
    Revision    Changes     Path
    1.39        +1  -0      ossp-pkg/as/as-doc/accounts.txt
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-doc/accounts.txt
  ============================================================================
  $ cvs diff -u -r1.38 -r1.39 accounts.txt
  --- ossp-pkg/as/as-doc/accounts.txt	1 Dec 2003 18:18:26 -0000	1.38
  +++ ossp-pkg/as/as-doc/accounts.txt	8 Dec 2003 11:02:59 -0000	1.39
  @@ -17,6 +17,7 @@
   R /de/is/com/absence/vacation             # [A] approved absence (annual vacation)
   R /de/is/com/absence/holiday              # [A] approved absence (global holiday: Christmas, etc)
   R /de/is/com/meeting                      # [I] team-meeting and other meetings in IS
  +R /de/is/com/meeting/weekly               # [I] Meeting, Weekly Team-Meeting
   R /de/is/com/evaluation                   # [I] Evaluation
   R /de/is/com/troubleshooting              # [I] Troubleshooting
   R /de/is/com/accounting                   # [I] AS accounting task itself
  @@ .

From ossp-cvs-owner@ossp.org  Thu Dec 11 21:43:42 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B4348773D5; Thu, 11 Dec 2003 21:43:41 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/platform/ platform.sh
Message-Id: <20031211204341.B4348773D5@mail.ossp.org>
Date: Thu, 11 Dec 2003 21:43:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Dec-2003 21:43:41
  Branch: HEAD                             Handle: 2003121120434100

  Modified files:
    ossp-pkg/platform       platform.sh

  Log:
    add RedHat AS, ES, WS and Fedora support

  Summary:
    Revision    Changes     Path
    1.19        +17 -3      ossp-pkg/platform/platform.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/platform/platform.sh
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 platform.sh
  --- ossp-pkg/platform/platform.sh	31 Oct 2003 20:43:57 -0000	1.18
  +++ ossp-pkg/platform/platform.sh	11 Dec 2003 20:43:41 -0000	1.19
  @@ -403,15 +403,18 @@
           if [ -f /etc/lsb-release ]; then
               eval `( . /etc/lsb-release
                   echo "SC=\"LSB${LSB_VERSION}\""
  -                if [ ".${DISTRIB_ID}" != . ]; then
  +                if [ ".${DISTRIB_ID}" != . -a ".${DISTRIB_RELEASE}" != . ]; then
                       echo "SP=\"${DISTRIB_ID} ${DISTRIB_RELEASE}\""
                   fi
               ) 2>/dev/null`
           fi
           if [ ".$SP" = . ]; then
  -            for tagfile in x `cd /etc && \
  +            for tagfile in x \
  +                `cd /etc && \
                   /bin/ls *[_-]release *[_-]version 2>/dev/null | \
  -                sed -e '/redhat-release/d'; echo redhat-release`; do
  +                sed -e '/^redhat-release$/d' -e '/^lsb-release$/d'; \
  +                echo redhat-release lsb-release`
  +            do
                   [ ".${tagfile}" = .x ] && continue
                   [ ! -f "/etc/${tagfile}" ] && continue
                   n=`echo ${tagfile} | sed -e 's/[_-]release$//' -e 's/[_-]version$//'`
  @@ -421,8 +424,16 @@
                          -e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' \
                          -e 's/^#[^0-9]*\([0-9][0-9]*\).*$/\1/' \
                          -e 's/^#.*$//'`
  +                t=""
  +                if [ ".${n}" = .redhat ]; then
  +                    t=`head -1 /etc/${tagfile} | \
  +                       sed -e 's/^/#/' \
  +                           -e 's/^#.*Red Hat Enterprise Linux \([AEW]S\).*$/\1/' \
  +                           -e 's/^#.*$//'`
  +                fi
                   case "`util_lower ${n}`" in
                       debian      ) n="Debian[ GNU/Linux]" ;;
  +                    fedora      ) n="Fedora[ GNU/Linux]" ;;
                       redhat      ) n="RedHat[ Linux]"     ;;
                       suse        ) n="SuSE[ Linux]"       ;;
                       mandrake    ) n="Mandrake[ Linux]"   ;;
  @@ -432,6 +443,9 @@
                       unitedlinux ) n="UnitedLinux"        ;;
                       *           ) n="${n}[ GNU/Linux]"   ;;
                   esac
  +                if [ ".${t}" != . ]; then
  +                    n="${n} ${t}"
  +                fi
                   SP="$n $v"
                   break
               done
  @@ .

From ossp-cvs-owner@ossp.org  Sat Dec 13 22:23:58 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1479B773E2; Sat, 13 Dec 2003 22:23:58 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ AUTHORS ChangeLog Makefile.in NEWS README...
Message-Id: <20031213212358.1479B773E2@mail.ossp.org>
Date: Sat, 13 Dec 2003 22:23:58 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Dec-2003 22:23:57
  Branch: HEAD                             Handle: 2003121321235500

  Added files:
    ossp-pkg/shtool         sh.platform
  Modified files:
    ossp-pkg/shtool         AUTHORS ChangeLog Makefile.in NEWS README
                            sh.common shtool.pod shtoolize.in shtoolize.pod
                            test.db
  Removed files:
    ossp-pkg/shtool         sh.guessos

  Log:
    Replaced old and inflexible "shtool guessos" command
    with a completely new command "shtool platform" command.
    It distinguishes a Unix platform according to its hardware
    architecture and operating system. For both there is a class,
    product and technology identification. For each of those six
    identifications, there is a verbose, regular and concise version.

  Summary:
    Revision    Changes     Path
    1.6         +0  -4      ossp-pkg/shtool/AUTHORS
    1.192       +10 -2      ossp-pkg/shtool/ChangeLog
    1.48        +1  -1      ossp-pkg/shtool/Makefile.in
    1.7         +2  -1      ossp-pkg/shtool/NEWS
    1.97        +1  -1      ossp-pkg/shtool/README
    1.22        +10 -0      ossp-pkg/shtool/sh.common
    1.24        +0  -257    ossp-pkg/shtool/sh.guessos
    1.1         +585 -0     ossp-pkg/shtool/sh.platform
    1.64        +123 -11    ossp-pkg/shtool/shtool.pod
    1.32        +1  -1      ossp-pkg/shtool/shtoolize.in
    1.11        +2  -2      ossp-pkg/shtool/shtoolize.pod
    1.21        +3  -3      ossp-pkg/shtool/test.db
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/AUTHORS
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 AUTHORS
  --- ossp-pkg/shtool/AUTHORS	14 Jun 2001 14:24:16 -0000	1.5
  +++ ossp-pkg/shtool/AUTHORS	13 Dec 2003 21:23:55 -0000	1.6
  @@ -21,7 +21,3 @@
        Written by: Ulrich Drepper, Ralf S. Engelschall
        Edited  by: Ralf S. Engelschall
   
  -  o  sh.guessos:
  -     Written by: Jim Jagielski et all, ASF
  -     Edited  by: Ralf S. Engelschall
  -
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.191 -r1.192 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	17 Nov 2003 12:36:42 -0000	1.191
  +++ ossp-pkg/shtool/ChangeLog	13 Dec 2003 21:23:55 -0000	1.192
  @@ -9,8 +9,16 @@
   
    ChangeLog
   
  - Changes between 1.6.2 and 2.0.0 (02-Nov-2002 to 17-Nov-2003):
  -   
  + Changes between 1.6.2 and 2.0.0 (02-Nov-2002 to xx-Dec-2003):
  +
  +   *) Replaced old and inflexible "shtool guessos" command
  +      with a completely new command "shtool platform" command.
  +      It distinguishes a Unix platform according to its hardware
  +      architecture and operating system. For both there is a class,
  +      product and technology identification. For each of those six
  +      identifications, there is a verbose, regular and concise version.
  +      [Ralf S. Engelschall]
  +
      *) Upgraded to GNU Autoconf 2.58 environment.
         [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.47 -r1.48 Makefile.in
  --- ossp-pkg/shtool/Makefile.in	11 Feb 2003 13:00:49 -0000	1.47
  +++ ossp-pkg/shtool/Makefile.in	13 Dec 2003 21:23:55 -0000	1.48
  @@ -54,7 +54,7 @@
    sh.rotate \
    sh.tarball \
    sh.subst \
  - sh.guessos \
  + sh.platform \
    sh.arx \
    sh.slo \
    sh.scpp \
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/NEWS
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 NEWS
  --- ossp-pkg/shtool/NEWS	14 Nov 2003 17:21:37 -0000	1.6
  +++ ossp-pkg/shtool/NEWS	13 Dec 2003 21:23:55 -0000	1.7
  @@ -9,8 +9,9 @@
     This is a list of user-visible and/or major changes to GNU shtool.
     For more details please have a look at the ChangeLog file.
   
  -  Changes between 1.6 and 2.0 (02-Nov-2002 to xx-Nov-2003)
  +  Changes between 1.6 and 2.0 (02-Nov-2002 to xx-Dec-2003)
   
  +   *) Replaced old `shtool guessos' with a new `shtool platform' command
      *) Even more POSIX 1003.1-2001 compliancy and portability.
      *) Many workarounds and fixed for permission related problems
      *) Fixed error exit in all commands by introducing an "shtool_exit"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/README
  ============================================================================
  $ cvs diff -u -r1.96 -r1.97 README
  --- ossp-pkg/shtool/README	13 Aug 2003 14:23:21 -0000	1.96
  +++ ossp-pkg/shtool/README	13 Dec 2003 21:23:55 -0000	1.97
  @@ -35,7 +35,7 @@
     rotate     Rotate logfiles
     tarball    Roll distribution tarballs
     subst      Apply sed(1) substitution operations
  -  guessos    Simple OS/platform guesser
  +  platform   Platform identification utility
     arx        Extended archive command
     slo        Separate linker options by library class
     scpp       Sharing C Pre-Processor
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.common
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 sh.common
  --- ossp-pkg/shtool/sh.common	13 Aug 2003 14:20:34 -0000	1.21
  +++ ossp-pkg/shtool/sh.common	13 Dec 2003 21:23:55 -0000	1.22
  @@ -174,6 +174,16 @@
       chmod 600 $tmpfile
   fi
   
  +#   utility function: map string to lower case
  +util_lower () {
  +    echo "$1" | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'
  +}
  +
  +#   utility function: map string to upper case
  +util_upper () {
  +    echo "$1" | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  +}
  +
   #   cleanup procedure
   shtool_exit () {
       rc="$1"
  @@ .
  rm -f ossp-pkg/shtool/sh.guessos <<'@@ .'
  Index: ossp-pkg/shtool/sh.guessos
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.platform
  ============================================================================
  $ cvs diff -u -r0 -r1.1 sh.platform
  --- /dev/null	2003-12-13 22:23:56.000000000 +0100
  +++ sh.platform	2003-12-13 22:23:56.000000000 +0100
  @@ -0,0 +1,585 @@
  +##
  +##  platform -- Platform Identification Utility
  +##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Originally written for use in OpenPKG
  +##
  +##  This file is part of shtool and free software; you can redistribute
  +##  it and/or modify it under the terms of the GNU General Public
  +##  License as published by the Free Software Foundation; either version
  +##  2 of the License, or (at your option) any later version.
  +##
  +##  This file is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this program; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +
  +str_tool="platform"
  +str_usage="[-F|--format FORMAT]"
  +str_usage="$str_usage [-S|--sep STRING]"
  +str_usage="$str_usage [-C|--conc STRING]"
  +str_usage="$str_usage [-L|--lower]"
  +str_usage="$str_usage [-U|--upper]"
  +str_usage="$str_usage [-v|--verbose]"
  +str_usage="$str_usage [-c|--concise]"
  +str_usage="$str_usage [-n|--no-newline]"
  +str_usage="$str_usage [-t|--type TYPE]"
  +str_usage="$str_usage [-V|--version]"
  +str_usage="$str_usage [-h|--help]"
  +arg_spec="0="
  +opt_spec="F:S:C:L.U.v.c.n.t:d.V.h."
  +opt_alias="F:format,S:sep,C:conc,L:lower,U:upper,v:verbose,c:consise,t:type,n:no-newline,V:version,h:help"
  +opt_F="%{sp} (%{ap})"
  +opt_S=" "
  +opt_C="/"
  +opt_L=no
  +opt_U=no
  +opt_t=""
  +opt_v=no
  +opt_c=no
  +opt_n=no
  +opt_V=no
  +opt_h=no
  +
  +. ./sh.common
  +
  +#   option post-processing
  +if [ ".$opt_t" != . ]; then
  +    case "$opt_t" in
  +        binary )
  +            #   binary package id (OpenPKG RPM)
  +            opt_F="%<ap>-%<sp>"
  +            opt_L=yes
  +            opt_S=""
  +            opt_C="+"
  +            ;;
  +        build )
  +            #   build time checking (OpenPKG RPM)
  +            opt_F="%<at>-%<st>"
  +            opt_L=yes
  +            opt_S=""
  +            opt_C="+"
  +            ;;
  +        gnu )
  +            #   GNU config.guess style <arch>-<vendor>-<os><osversion>
  +            opt_F="%<at>-unknown-%<st>"
  +            opt_L=yes
  +            opt_S=""
  +            opt_C="+"
  +            ;;
  +        web )
  +            #   non-whitespace HTTP Server-header id
  +            opt_F="%<sp>-%<ap>"
  +            opt_S="/"
  +            opt_C="+"
  +            ;;
  +        summary)
  +            #   human readable verbose summary information
  +            opt_F="Class:      %[sc] (%[ac])\\nProduct:    %[sp] (%[ap])\\nTechnology: %[st] (%[at])"
  +            opt_S=" "
  +            opt_C="/"
  +            ;;
  +        all-in-one )
  +            #   full-table all-in-one information
  +            opt_F=""
  +            opt_F="${opt_F}concise architecture class:      %<ac>\\n"
  +            opt_F="${opt_F}regular architecture class:      %{ac}\\n"
  +            opt_F="${opt_F}verbose architecture class:      %[ac]\\n"
  +            opt_F="${opt_F}concise architecture product:    %<ap>\\n"
  +            opt_F="${opt_F}regular architecture product:    %{ap}\\n"
  +            opt_F="${opt_F}verbose architecture product:    %[ap]\\n"
  +            opt_F="${opt_F}concise architecture technology: %<at>\\n"
  +            opt_F="${opt_F}regular architecture technology: %{at}\\n"
  +            opt_F="${opt_F}verbose architecture technology: %[at]\\n"
  +            opt_F="${opt_F}concise system class:            %<sc>\\n"
  +            opt_F="${opt_F}regular system class:            %{sc}\\n"
  +            opt_F="${opt_F}verbose system class:            %[sc]\\n"
  +            opt_F="${opt_F}concise system product:          %<sp>\\n"
  +            opt_F="${opt_F}regular system product:          %{sp}\\n"
  +            opt_F="${opt_F}verbose system product:          %[sp]\\n"
  +            opt_F="${opt_F}concise system technology:       %<st>\\n"
  +            opt_F="${opt_F}regular system technology:       %{st}\\n"
  +            opt_F="${opt_F}verbose system technology:       %[st]"
  +            ;;
  +        * )
  +            echo "$msgprefix:Error: invalid type \`$opt_t'" 1>&2
  +            exit 1
  +            ;;
  +    esac
  +fi
  +
  +#   assemble initial platform information
  +UNAME_MACHINE=`(uname -m) 2>/dev/null` ||\
  +UNAME_MACHINE=`(uname -p) 2>/dev/null` ||\
  +UNAME_MACHINE='unknown'
  +UNAME_SYSTEM=`(uname -s) 2>/dev/null`  ||\
  +UNAME_SYSTEM='unknown'
  +UNAME_RELEASE=`(uname -r) 2>/dev/null` ||\
  +UNAME_RELEASE=`(uname -v) 2>/dev/null` ||\
  +UNAME_RELEASE='unknown'
  +
  +UNAME="${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}"
  +
  +AC=""; AP=""; AT=""
  +SC=""; SP=""; ST=""
  +
  +#    dispatch into platform specific sections
  +case "${UNAME}" in
  +
  +    #   FreeBSD
  +    *:FreeBSD:* )
  +        #   determine architecture
  +        AC="${UNAME_MACHINE}"
  +        case "${AC}" in
  +            i386 ) AC="iX86" ;;
  +        esac
  +        AP="${AC}"
  +        AT=`(/sbin/sysctl -n hw.model) 2>&1`
  +        case "${AT}" in
  +            *"Xeon"* | *"Pentium Pro"* | *"Cyrix 6x86MX"* | *"Pentium II"* | *"Pentium III"* | *"Pentium 4"* | *"Celeron"* ) AT="i686" ;;
  +            *"Pentium"* ) AT="i586" ;; *"i486[SD]X"* | *"Cyrix 486"* | *"Cyrix [56]x86"* | *"Blue Lightning" | *"Cyrix 486S/DX" ) AT="i486" ;;
  +            *"i386[SD]X"* | *"NexGen 586"* ) AT="i386" ;;
  +            * ) AT="${AP}" ;;
  +        esac
  +        #   determine system
  +        r=`echo "${UNAME_RELEASE}" |\
  +           sed -e 's;[()];;' -e 's/\(-.*\)$/[\1]/'`
  +        ST="FreeBSD ${r}"
  +        SP="${ST}"
  +        case "${r}" in
  +            1.* ) SC="4.3BSD" ;;
  +            *   ) SC="4.4BSD" ;;
  +        esac
  +        ;;
  +
  +    #   NetBSD
  +    *:NetBSD:* )
  +        #   determine architecture
  +        AT="${UNAME_MACHINE}"
  +        AP="${AT}"
  +        case "${AP}" in
  +            i[3-6]86 ) AP="iX86" ;;
  +        esac
  +        AC="${AP}"
  +        #   determine system
  +        r=`echo "${UNAME_RELEASE}" | sed -e 's/\(-.*\)$/[\1]/'`
  +        ST="NetBSD ${r}"
  +        SP="${ST}"
  +        case "${r}" in
  +            0.* ) SC="4.3BSD" ;;
  +            *   ) SC="4.4BSD" ;;
  +        esac
  +        ;;
  +
  +    #   OpenBSD
  +    *:OpenBSD:* )
  +        #   determine architecture
  +        AT="${UNAME_MACHINE}"
  +        AP="${AT}"
  +        case "${AP}" in
  +            i[3-6]86 ) AP="iX86" ;;
  +        esac
  +        AC="${AP}"
  +        #   determine system
  +        r=`echo "${UNAME_RELEASE}" | sed -e 's/\(-.*\)$/[\1]/'`
  +        ST="OpenBSD ${r}"
  +        SP="${ST}"
  +        SC="4.4BSD"
  +        ;;
  +
  +    #   GNU/Linux
  +    *:Linux:* )
  +        #   determine architecture
  +        AT="${UNAME_MACHINE}"
  +        case "${AT}" in
  +           ia64     ) AT="IA64"   ;;
  +           x86_64   ) AT='AMD64'  ;;
  +           parisc   ) AT="HPPA32" ;;
  +           parisc64 ) AT="HPPA64" ;;
  +        esac
  +        AP="${AT}"
  +        case "${AP}" in
  +           i[3-6]86 ) AP='iX86' ;;
  +        esac
  +        AC="${AP}"
  +        #   determine system
  +        v_kern=`echo "${UNAME_RELEASE}" |\
  +            sed -e 's/^\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/'`
  +        v_libc=`(strings /lib/libc.so.* | grep '^GLIBC_' | sed -e 's/^GLIBC_//' |\
  +            sort -n | tail -1 | sed -e 's/^\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/') 2>/dev/null`
  +        ST="GNU/<Linux >${v_libc}/<${v_kern}>"
  +        if [ -f /etc/lsb-release ]; then
  +            eval `( . /etc/lsb-release
  +                echo "SC=\"LSB${LSB_VERSION}\""
  +                if [ ".${DISTRIB_ID}" != . -a ".${DISTRIB_RELEASE}" != . ]; then
  +                    echo "SP=\"${DISTRIB_ID} ${DISTRIB_RELEASE}\""
  +                fi
  +            ) 2>/dev/null`
  +        fi
  +        if [ ".$SP" = . ]; then
  +            for tagfile in x \
  +                `cd /etc && \
  +                /bin/ls *[_-]release *[_-]version 2>/dev/null | \
  +                sed -e '/^redhat-release$/d' -e '/^lsb-release$/d'; \
  +                echo redhat-release lsb-release`
  +            do
  +                [ ".${tagfile}" = .x ] && continue
  +                [ ! -f "/etc/${tagfile}" ] && continue
  +                n=`echo ${tagfile} | sed -e 's/[_-]release$//' -e 's/[_-]version$//'`
  +                v=`(grep VERSION /etc/${tagfile}; cat /etc/${tagfile}) | grep '[0-9]' | head -1 |\
  +                   sed -e 's/^/#/' \
  +                       -e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' \
  +                       -e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' \
  +                       -e 's/^#[^0-9]*\([0-9][0-9]*\).*$/\1/' \
  +                       -e 's/^#.*$//'`
  +                t=""
  +                if [ ".${n}" = .redhat ]; then
  +                    t=`head -1 /etc/${tagfile} | \
  +                       sed -e 's/^/#/' \
  +                           -e 's/^#.*Red Hat Enterprise Linux \([AEW]S\).*$/\1/' \
  +                           -e 's/^#.*$//'`
  +                fi
  +                case "`util_lower ${n}`" in
  +                    debian      ) n="Debian[ GNU/Linux]" ;;
  +                    fedora      ) n="Fedora[ GNU/Linux]" ;;
  +                    redhat      ) n="RedHat[ Linux]"     ;;
  +                    suse        ) n="SuSE[ Linux]"       ;;
  +                    mandrake    ) n="Mandrake[ Linux]"   ;;
  +                    gentoo      ) n="Gentoo[ Linux]"     ;;
  +                    slackware   ) n="Slackware[ Linux]"  ;;
  +                    turbolinux  ) n="TurboLinux"         ;;
  +                    unitedlinux ) n="UnitedLinux"        ;;
  +                    *           ) n="${n}[ GNU/Linux]"   ;;
  +                esac
  +                if [ ".${t}" != . ]; then
  +                    n="${n} ${t}"
  +                fi
  +                SP="$n $v"
  +                break
  +            done
  +        fi
  +        [ ".$SP" = . ] && SP="${ST}"
  +        [ ".$SC" = . ] && SC="LSB"
  +        ;;
  +
  +    #   Sun Solaris
  +    *:SunOS:* )
  +        #   determine architecture
  +        AT="${UNAME_MACHINE}"
  +        case "${AT}" in
  +            i86pc ) AT="iX86" ;;
  +        esac
  +        AP="${AT}"
  +        case "${AP}" in
  +            sun4[cdm] ) AP="SPARC32" ;;
  +            sun4u     ) AP="SPARC64" ;;
  +            sun4*     ) AP="SPARC"   ;;
  +        esac
  +        AC="${AP}"
  +        case "${AC}" in
  +            SPARC* ) AC="SPARC" ;;
  +        esac
  +        #   determine system
  +        ST="[Sun ]SunOS ${UNAME_RELEASE}"
  +        v=`echo "${UNAME_RELEASE}" |\
  +           sed -e 's;^4\.;1.;' \
  +               -e 's;^5\.\([0-6]\)[^0-9]*$;2.\1;' \
  +               -e 's;^5\.\([0-9][0-9]*\).*;\1;'`
  +        SP="[Sun ]Solaris $v"
  +        case "${UNAME_RELEASE}" in
  +            4.* ) SC="4.3BSD" ;;
  +            5.* ) SC="SVR4"   ;;
  +        esac
  +        ;;
  +
  +    #   SCO UnixWare
  +    *:UnixWare:* )
  +        #   determine architecture
  +        AT="${UNAME_MACHINE}"
  +        case "${AT}" in
  +            i[3-6]86 | ix86at ) AT="iX86" ;;
  +        esac
  +        AP="${AT}"
  +        #   determine system
  +        v=`/sbin/uname -v`
  +        ST="[SCO ]UnixWare ${v}"
  +        SP="${ST}"
  +        SC="SVR${UNAME_RELEASE}"
  +        ;;
  +
  +    #   QNX
  +    *:QNX:* )
  +        #   determine architecture
  +        AT="${UNAME_MACHINE}"
  +        case "${AT}" in
  +            x86pc ) AT="iX86" ;;
  +        esac
  +        AP="${AT}"
  +        #   determine system
  +        v="${UNAME_RELEASE}"
  +        ST="QNX[ Neutrino RTOS] ${v}"
  +        v=`echo "${v}" | sed -e 's;^\([0-9][0-9]*\.[0-9][0-9]*\).*$;\1;'`
  +        SP="QNX[ Neutrino RTOS] ${v}"
  +        SC="QNX"
  +        ;;
  +
  +    #   SGI IRIX
  +    *:IRIX*:* )
  +        #   determine architecture
  +        AT="${UNAME_MACHINE}"
  +        AP="${AT}"
  +        case "${AP}:${UNAME_SYSTEM}" in
  +            IP*:IRIX64 ) AP="MIPS64" ;;
  +            IP*:*      ) AP="MIPS"   ;;
  +        esac
  +        AC="${AP}"
  +        #   determine system
  +        v=`(/bin/uname -R || /bin/uname -r) 2>/dev/null | sed -e 's;[0-9.]* ;;'`
  +        ST="[SGI ]IRIX ${v}"
  +        v="${UNAME_RELEASE}"
  +        SP="[SGI ]IRIX ${v}"
  +        SC="4.2BSD/SVR3"
  +        ;;
  +
  +    #   HP HP-UX
  +    *:HP-UX:* )
  +        #   determine architecture
  +        AT="${UNAME_MACHINE}"
  +        case "${AT}" in
  +            ia64 ) AT="IA64" ;;
  +            9000/[34]?? ) AT=M68K ;;
  +            9000/[678][0-9][0-9])
  +                sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
  +                sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
  +                case "${sc_cpu_version}" in
  +                    523 ) AT="HPPA1.0" ;;
  +                    528 ) AT="HPPA1.1" ;;
  +                    532 ) AT="HPPA2.0"
  +                        case "${sc_kernel_bits}" in
  +                            32 ) AT="${AT}n" ;;
  +                            64 ) AT="${AT}w" ;;
  +                        esac
  +                        ;;
  +                esac
  +                ;;
  +        esac
  +        AP="${AT}"
  +        case "${AP}" in
  +            HPPA* ) AP="HPPA" ;;
  +        esac
  +        AC="${AP}"
  +        #   determine system
  +        v=`echo "${UNAME_RELEASE}" | sed -e 's;^[^0-9]*;;'`
  +        ST="[HP ]<HP>-<UX> ${v}"
  +        SP="${ST}"
  +        case "${v}" in
  +            10.*   ) SC="SVR4.2" ;;
  +            [7-9]* ) SC="SVR4"   ;;
  +        esac
  +        ;;
  +
  +    #   HP Tru64 (OSF1)
  +    *:OSF1:* )
  +        #   determine architecture
  +        AP="${UNAME_MACHINE}"
  +        case "${AP}" in
  +            alpha ) AP="Alpha" ;;
  +        esac
  +        alpha_type=`(/usr/sbin/psrinfo -v) 2>/dev/null |\
  +            sed -n -e 's/^.*The alpha \([^ ][^ ]*\).*processor.*$/\1/p' | head -n 1`
  +        AT="${AP}${alpha_type}"
  +        AC="${AP}"
  +        #   determine system
  +        v=`echo "${UNAME_RELEASE}" | sed -e 's;^[VTX];;'`
  +        ST="[HP ]Tru64 ${v}"
  +        SP="${ST}"
  +        SC="OSF1"
  +        ;;
  +
  +    #   IBM AIX
  +    *:AIX:* )
  +        cpu_arch=rs6000
  +        if [ -x /usr/sbin/lsdev -a -x /usr/sbin/lsattr ]; then
  +            cpu_id=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
  +            if [ ".`/usr/sbin/lsattr -El ${cpu_id} | grep -i powerpc`" != . ]; then
  +                cpu_arch=powerpc
  +            fi
  +        fi
  +        if [ -x /usr/bin/oslevel ]; then
  +            os_level=`/usr/bin/oslevel`
  +        else
  +            os_level="`uname -r`.`uname -v`"
  +        fi
  +        os_level=`echo "${os_level}" |\
  +                  sed -e 's;^\([0-9][0-9]*\.[0-9][0-9]*\)\(\.[0-9][0-9]*\)\(.*\)$;<\1>\2[\3];' \
  +                      -e 's;^\([0-9][0-9]*\.[0-9][0-9]*\)\(.*\)$;<\1>\2;'`
  +        AT="${cpu_arch}"
  +        AP="${AT}"
  +        AC="${AP}"
  +        ST="[IBM ]AIX ${os_level}"
  +        SP="${ST}"
  +        case "${os_level}" in
  +            [12]* ) SC="SVR2" ;;
  +            *     ) SC="SVR4" ;;
  +        esac
  +        ;;
  +
  +    #   Apple MacOS X Darwin
  +    *:Darwin:* )
  +        AT=`uname -p`
  +        case "${AT}" in
  +            powerpc ) AT="PPC" ;;
  +        esac
  +        AP="${AT}"
  +        AC="${AP}"
  +        case "${AC}" in
  +            i?86 ) AC="iX86" ;;
  +        esac
  +        ST="[Apple ]${UNAME_SYSTEM} ${UNAME_RELEASE}"
  +        SP="${ST}"
  +        SC="4.4BSD/Mach3"
  +        ;;
  +
  +    #   TODO ...ADD YOUR NEW PLATFORM CHECK HERE... TODO
  +    # *:XXX:* )
  +    #   ...
  +    #   ;;
  +
  +    #   ...A STILL UNKNOWN PLATFORM...
  +    * )
  +        AT=`echo "${UNAME_MACHINE}" | sed -e "s; ;${opt_C};g"`
  +        AP="${AT}"
  +        AC="${AP}"
  +        v=`echo "${UNAME_RELEASE}" |\
  +           sed -e 's/^/#/' \
  +               -e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' \
  +               -e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' \
  +               -e 's/^#[^0-9]*\([0-9][0-9]*\).*$/\1/' \
  +               -e 's/^#.*$/?/'`
  +        ST="${UNAME_SYSTEM} ${v}"
  +        SP="${ST}"
  +        SC="${SP}"
  +        ;;
  +
  +esac
  +
  +#   provide fallback values
  +[ ".$AT" = . ] && AT="${AP:-${AC}}"
  +[ ".$AP" = . ] && AP="${AT:-${AC}}"
  +[ ".$AC" = . ] && AC="${AP:-${AT}}"
  +[ ".$ST" = . ] && ST="${SP:-${SC}}"
  +[ ".$SP" = . ] && SP="${ST:-${SC}}"
  +[ ".$SC" = . ] && SC="${SP:-${ST}}"
  +
  +#   support explicit enforced verbose/concise output
  +if [ ".$opt_v" = .yes ]; then
  +    opt_F=`echo ":$opt_F" | sed -e 's/^://' -e 's/%\([as][cpt]\)/%[\1]/g'`
  +elif [ ".$opt_c" = .yes ]; then
  +    opt_F=`echo ":$opt_F" | sed -e 's/^://' -e 's/%\([as][cpt]\)/%<\1>/g'`
  +fi
  +
  +#   provide verbose and concise variants
  +AC_V=""; AC_N=""; AC_C=""
  +AP_V=""; AP_N=""; AP_C=""
  +AT_V=""; AT_N=""; AT_C=""
  +SC_V=""; SC_N=""; SC_C=""
  +SP_V=""; SP_N=""; SP_C=""
  +ST_V=""; ST_N=""; ST_C=""
  +for var_lc in at ap ac st sp sc; do
  +    case "$opt_F" in
  +        *"%[${val_lc}]"* | *"%{${val_lc}}"* | *"%${val_lc}"* | *"%<${val_lc}>"* )
  +        var_uc=`util_upper "$var_lc"`
  +        eval "val=\"\$${var_uc}\""
  +        val_V=""; val_N=""; val_C=""
  +        case "$opt_F" in
  +            *"%[${var_lc}]"* )
  +                val_V=`echo ":$val" | \
  +                       sed -e 's/^://' \
  +                           -e 's;\[\([^]]*\)\];\1;g' \
  +                           -e 's;<\([^>]*\)>;\1;g' \
  +                           -e "s; ;§§;g" \
  +                           -e "s;/;%%;g" \
  +                           -e "s;§§;${opt_S};g" \
  +                           -e "s;%%;${opt_C};g"`
  +                eval "${var_uc}_V=\"\${val_V}\""
  +                ;;
  +        esac
  +        case "$opt_F" in
  +            *"%{${var_lc}}"* | *"%${var_lc}"* )
  +                val_N=`echo ":$val" | \
  +                       sed -e 's/^://' \
  +                           -e 's;\[\([^]]*\)\];;g' \
  +                           -e 's;<\([^>]*\)>;\1;g' \
  +                           -e "s; ;§§;g" \
  +                           -e "s;/;%%;g" \
  +                           -e "s;§§;${opt_S};g" \
  +                           -e "s;%%;${opt_C};g"`
  +                eval "${var_uc}_N=\"\${val_N}\""
  +                ;;
  +        esac
  +        case "$opt_F" in
  +            *"%<${var_lc}>"* )
  +                val_C=`echo ":$val" | \
  +                       sed -e 's/^://' \
  +                           -e 's;\[\([^]]*\)\];;g' \
  +                           -e 's;[^<]*<\([^>]*\)>;\1;g' \
  +                           -e "s; ;§§;g" \
  +                           -e "s;/;%%;g" \
  +                           -e "s;§§;${opt_S};g" \
  +                           -e "s;%%;${opt_C};g"`
  +                eval "${var_uc}_C=\"\${val_C}\""
  +                ;;
  +        esac
  +        ;;
  +    esac
  +done
  +
  +#   create output string
  +output=`echo ":$opt_F" |\
  +        sed -e "s/^://" \
  +            -e "s;%\\[ac\\];${AC_V};g" \
  +            -e "s;%{ac};${AC_N};g" \
  +            -e "s;%ac;${AC_N};g" \
  +            -e "s;%<ac>;${AC_C};g" \
  +            -e "s;%\\[ap\\];${AP_V};g" \
  +            -e "s;%{ap};${AP_N};g" \
  +            -e "s;%ap;${AP_N};g" \
  +            -e "s;%<ap>;${AP_C};g" \
  +            -e "s;%\\[at\\];${AT_V};g" \
  +            -e "s;%{at};${AT_N};g" \
  +            -e "s;%at;${AT_N};g" \
  +            -e "s;%<at>;${AT_C};g" \
  +            -e "s;%\\[sc\\];${SC_V};g" \
  +            -e "s;%{sc};${SC_N};g" \
  +            -e "s;%sc;${SC_N};g" \
  +            -e "s;%<sc>;${SC_C};g" \
  +            -e "s;%\\[sp\\];${SP_V};g" \
  +            -e "s;%{sp};${SP_N};g" \
  +            -e "s;%sp;${SP_N};g" \
  +            -e "s;%<sp>;${SP_C};g" \
  +            -e "s;%\\[st\\];${ST_V};g" \
  +            -e "s;%{st};${ST_N};g" \
  +            -e "s;%st;${ST_N};g" \
  +            -e "s;%<st>;${ST_C};g" \
  +            -e 's/\\\\n/^/g' |\
  +         tr '^' '\012'`
  +
  +#   support lower/upper-case mapping
  +if [ ".$opt_L" = .yes ]; then
  +    output=`util_lower "$output"`
  +elif [ ".$opt_U" = .yes ]; then
  +    output=`util_upper "$output"`
  +fi
  +
  +#   display output string
  +if [ ".$opt_n" = .yes ]; then
  +    echo . | awk '{ printf("%s", output); }' output="$output"
  +else
  +    echo "$output"
  +fi
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtool.pod
  ============================================================================
  $ cvs diff -u -r1.63 -r1.64 shtool.pod
  --- ossp-pkg/shtool/shtool.pod	11 Feb 2003 13:00:50 -0000	1.63
  +++ ossp-pkg/shtool/shtool.pod	13 Dec 2003 21:23:55 -0000	1.64
  @@ -259,10 +259,9 @@
   
   Apply sed(1) substitution operations.
   
  -=item B<guessos>
  +=item B<platform>
   
  -Simple operating system and platform architecture guesser which
  -determines a GNU I<platform-triple> style identification string.
  +Determines platform identification information.
   
   =item B<arx>
   
  @@ -674,17 +673,130 @@
             `find . -name Makefile -print`
         make install
   
  -=item B<guessos>
  +=item B<platform> [B<-F>|B<--format> I<FORMAT>] [B<-S>|B<--sep> I<STRING>] [B<-C>|B<--conc> I<STRING>] [B<-L>|B<--lower>] [B<-U>|B<--upper>] [B<-v>|B<--verbose>] [B<-c>|B<--concise>] [B<-n>|B<--newline>] [B<-t>|B<--type> I<TYPE>] [B<-V>|B<--version>] [B<-h>|B<--help>]
   
  -This command is a simple operating system and platform architecture guesser
  -which determines a so-called ``GNU I<platform-triple>'' style identification
  -string ``I<arch>-I<hardware>-I<os>I<osversion>''. For instance a FreeBSD 3.1
  -running on a Pentium II is identified as ``C<i686-pc-freebsd3.1>''.  When you
  -need a more sophisticated platform guesser, use the GNU
  -C<config.guess>/C<config.sub> scripts, please.
  +This command privides Unix platform identifications. It distinguishes
  +a platform according to its I<hardware architecture> and I<operating
  +system>. For both there is a I<class>, I<product> and I<technology>
  +identification. For each of those six identifications, there is a
  +I<verbose>, I<regular> and I<concise> version.
  +
  +This leads to eighteen (2x3x3) available identification strings for each
  +platform, from which usually 2 are chosen in a particular situation.
  +This is done by assembling the platform identification string using a
  +I<FORMAT> string containing one or more identification constructs of the
  +forms "C<%[xx]>" (verbose), "C<%{xx}>" (regular) and "C<%E<lt>xxE<gt>>"
  +(concise).
  +
  +Option B<-F> controls the output formatting of this command. It is a
  +plain-text string with the "C<%>I<xx>" constructs which expand to the
  +various platform information strings. "C<%{>I<xx>C<}>" is the canonical
  +regular version of the information. "C<%[>I<xx>C<]>" is the verbose
  +version of the information. "C<%E<lt>>I<xx>C<E<gt>>" is the concise
  +version of the information. In total, the following constructs
  +are available for expansion:
  +
  + %[ac]    verbose hardware architecture class
  + %{ac}    regular hardware architecture class
  + %<ac>    concise hardware architecture class
  + %[ap]    verbose hardware architecture product
  + %{ap}    regular hardware architecture product
  + %<ap>    concise hardware architecture product
  + %[at]    verbose hardware architecture technology
  + %{at}    regular hardware architecture technology
  + %<at>    concise hardware architecture technology
  + %[sc]    verbose operating system class
  + %{sc}    regular operating system class
  + %<sc>    concise operating system class
  + %[sp]    verbose operating system product
  + %{sp}    regular operating system product
  + %<sp>    concise operating system product
  + %[st]    verbose operating system technology
  + %{st}    regular operating system technology
  + %<st>    concise operating system technology
  +
  +The default I<FORMAT> string is "C<%{sp} (%{ap})>", providing the
  +regular operating system and hardware architecture product information.
  +
  +Option B<-S> sets the word I<separation> string for the platform
  +information strings. By default it is "C< >" (whitespace). It is
  +especially used for separating the operating system name and the
  +operating system version. Option B<-C> sets the word I<concatenation>
  +string for the platform information strings. By default it is "C</>".
  +It is especially used to concatenate multiple parts in operating
  +system name and version parts. Option B<-L> enforces conversion of the
  +output to all I<lower> case. Option B<-U> enforces conversion of the
  +output to all I<upper> case. 
  +
  +Option B<-v> enforces verbose versions of all expansion constructs
  +in I<FORMAT> string of option B<-F>. It is equal to specifying all
  +expansion constructs as "C<%[>I<xx>C<]>". Option B<-c> enforces
  +concise versions of all expansion constructs in I<FORMAT> string of
  +option B<-F>. It is equal to specifying all expansion constructs as
  +"C<%E<lt>>I<xx>C<E<gt>>". Option B<-n> omits the usual trailing newline
  +character in the output.
  +
  +Option B<-t> is a meta option which internally sets options B<-F>,
  +B<-S>, B<-C>, B<-L>, B<-U>, B<-v> or B<-c> according to I<TYPE>. It can
  +be used to easily specify various commonly known outputs. The following
  +I<TYPE>s are available:
  +
  +=over 4
  +
  +=item B<binary>
  +
  +Binary Package Id (OpenPKG RPM).
  +This is equal to "C<-F '%<ap>-%<sp>' -L -S '' -C '+'>"
  +and results in outputs like "C<ix86-freebsd4.9>" and "C<ix86-debian3.0>".
  +
  +=item B<build>
  +
  +Build-Time Checking (OpenPKG RPM).
  +This is equal to "C<-F '%<at>-%<st>' -L -S '' -C '+'>"
  +and results in outputs like "C<i686-freebsd4.9>" and "C<i586-linux2.4>".
  +
  +=item B<gnu>
  +
  +GNU F<config.guess> Style Id.
  +This is similar to B<build> and is equal to "C<-F '"%<at>-unknown-%<st>' -L -S '' -C '+'>"
  +and results in outputs like "C<i686-unknown-freebsd4.9>" and "C<i586-unknown-linux2.4>".
  +
  +=item B<web>
  +
  +HTTP Server Header Id.
  +This is equal to "C<-F '"%<sp>-%<ac>' -S '/' -C '+'>"
  +and results in outputs like "C<FreeBSD/4.9-iX86>" and "C<Debian/3.0-iX86>".
  +
  +=item B<summary>
  +
  +Human Readable Verbose Summary Information. This is equal to "C<-F
  +'Class: %[sc] (%[ac])\nProduct: %[sp] (%[ap])\nTechnology: %[st]
  +(%[at])' -S ' ' -C '/'>" and results in outputs like:
  +
  + Class:      4.4BSD (iX86)
  + Product:    FreeBSD 4.9-RC (iX86)
  + Technology: FreeBSD 4.9-RC (i686)
  +
  +and
  +
  + Class:      LSB (iX86)
  + Product:    Debian GNU/Linux 3.0 (iX86)
  + Technology: GNU/Linux 2.2/2.4 (i686)
  +
  +=item B<all-in-one>
  +
  +All-In-One Full-Table Information. This just outputs really
  +all 2x2x3 identification strings as a table.
  +
  +=back
  +
  +Option B<-V> outputs the version information of B<OSSP platform> only.
  +Option B<-h> outputs the usage information of B<OSSP platform> only.
  +
  +Example:
   
    #   configure.in
  - OS=`shtool guessos`
  + PLATFORM=`shtool platform --type=binary`
   
   =item B<arx> [B<-t>|B<--trace>] [B<-C>|B<--command> I<cmd>] I<op> I<archive> I<file> [I<file> ...]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtoolize.in
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 shtoolize.in
  --- ossp-pkg/shtool/shtoolize.in	13 Aug 2003 14:20:34 -0000	1.31
  +++ ossp-pkg/shtool/shtoolize.in	13 Dec 2003 21:23:55 -0000	1.32
  @@ -35,7 +35,7 @@
   #   Available modules
   my @available = qw(
       echo mdate table prop move install mkdir mkln mkshadow
  -    fixperm rotate tarball subst guessos arx slo scpp version path
  +    fixperm rotate tarball subst platform arx slo scpp version path
   );
   
   ##
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtoolize.pod
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 shtoolize.pod
  --- ossp-pkg/shtool/shtoolize.pod	11 Feb 2003 13:00:50 -0000	1.10
  +++ ossp-pkg/shtool/shtoolize.pod	13 Dec 2003 21:23:55 -0000	1.11
  @@ -57,7 +57,7 @@
    rotate     Rotate a logfile
    tarball    Roll distribution tarballs
    subst      Apply sed(1) substitution operations
  - guessos    Simple OS/platform guesser
  + platform   Platform identification utility
    arx        Extended archive command
    slo        Separate linker options by library class
    scpp       Sharing C Pre-Processor
  @@ -66,7 +66,7 @@
   
   Additionally there is a pseudo-module ``C<all>'' which can be used as a
   short-hand for ``C<echo mdate table prop move install mkdir mkln mkshadow
  -fixperm guessos arx slo scpp version path>'', i.e. to build a B<shtool> script
  +fixperm platform arx slo scpp version path>'', i.e. to build a B<shtool> script
   with all modules in the standard order. An installed B<shtool> is usually
   built this way via ``C<shtoolize -o shtool all>''.
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/test.db
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 test.db
  --- ossp-pkg/shtool/test.db	11 Feb 2003 13:00:50 -0000	1.20
  +++ ossp-pkg/shtool/test.db	13 Dec 2003 21:23:55 -0000	1.21
  @@ -130,10 +130,10 @@
   test ".`cat baz`" = ".CbazC"
   @end{subst}
   
  -@begin{guessos}
  +@begin{platform}
   #   cannot be checked easily, so just start it
  -shtool guessos
  -@end{guessos}
  +shtool platform
  +@end{platform}
   
   @begin{arx}
   echo foo >foo.o
  @@ .

From ossp-cvs-owner@ossp.org  Sat Dec 13 22:32:25 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EFF7F773DF; Sat, 13 Dec 2003 22:32:24 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ README VERSION
Message-Id: <20031213213224.EFF7F773DF@mail.ossp.org>
Date: Sat, 13 Dec 2003 22:32:24 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Dec-2003 22:32:24
  Branch: HEAD                             Handle: 2003121321322400

  Modified files:
    ossp-pkg/shtool         README VERSION

  Log:
    bump date

  Summary:
    Revision    Changes     Path
    1.98        +1  -1      ossp-pkg/shtool/README
    1.74        +1  -1      ossp-pkg/shtool/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/README
  ============================================================================
  $ cvs diff -u -r1.97 -r1.98 README
  --- ossp-pkg/shtool/README	13 Dec 2003 21:23:55 -0000	1.97
  +++ ossp-pkg/shtool/README	13 Dec 2003 21:32:24 -0000	1.98
  @@ -10,7 +10,7 @@
     http://www.gnu.org/software/shtool/
     ftp://ftp.gnu.org/gnu/shtool/
   
  -  Version 2.0b0 (13-Aug-2003)
  +  Version 2.0b0 (13-Dec-2003)
   
     The GNU shtool program is a compilation of small but very stable and
     portable shell scripts into a single shell tool. All ingredients
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/VERSION
  ============================================================================
  $ cvs diff -u -r1.73 -r1.74 VERSION
  --- ossp-pkg/shtool/VERSION	13 Aug 2003 14:23:21 -0000	1.73
  +++ ossp-pkg/shtool/VERSION	13 Dec 2003 21:32:24 -0000	1.74
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for GNU shtool (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is GNU shtool, Version 2.0b0 (13-Aug-2003)
  +  This is GNU shtool, Version 2.0b0 (13-Dec-2003)
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Dec 13 22:33:58 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0E88C773E5; Sat, 13 Dec 2003 22:33:58 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ sh.platform
Message-Id: <20031213213358.0E88C773E5@mail.ossp.org>
Date: Sat, 13 Dec 2003 22:33:58 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Dec-2003 22:33:57
  Branch: HEAD                             Handle: 2003121321335700

  Modified files:
    ossp-pkg/shtool         sh.platform

  Log:
    join together, because shtoolize requires it this way

  Summary:
    Revision    Changes     Path
    1.2         +1  -11     ossp-pkg/shtool/sh.platform
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.platform
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 sh.platform
  --- ossp-pkg/shtool/sh.platform	13 Dec 2003 21:23:55 -0000	1.1
  +++ ossp-pkg/shtool/sh.platform	13 Dec 2003 21:33:57 -0000	1.2
  @@ -20,17 +20,7 @@
   ##
   
   str_tool="platform"
  -str_usage="[-F|--format FORMAT]"
  -str_usage="$str_usage [-S|--sep STRING]"
  -str_usage="$str_usage [-C|--conc STRING]"
  -str_usage="$str_usage [-L|--lower]"
  -str_usage="$str_usage [-U|--upper]"
  -str_usage="$str_usage [-v|--verbose]"
  -str_usage="$str_usage [-c|--concise]"
  -str_usage="$str_usage [-n|--no-newline]"
  -str_usage="$str_usage [-t|--type TYPE]"
  -str_usage="$str_usage [-V|--version]"
  -str_usage="$str_usage [-h|--help]"
  +str_usage="[-F|--format FORMAT] [-S|--sep STRING] [-C|--conc STRING] [-L|--lower] [-U|--upper] [-v|--verbose] [-c|--concise] [-n|--no-newline] [-t|--type TYPE] [-V|--version] [-h|--help]"
   arg_spec="0="
   opt_spec="F:S:C:L.U.v.c.n.t:d.V.h."
   opt_alias="F:format,S:sep,C:conc,L:lower,U:upper,v:verbose,c:consise,t:type,n:no-newline,V:version,h:help"
  @@ .

From ossp-cvs-owner@ossp.org  Mon Dec 15 18:59:50 2003
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 645BD773F8; Mon, 15 Dec 2003 18:59:50 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ac/ ac
Message-Id: <20031215175950.645BD773F8@mail.ossp.org>
Date: Mon, 15 Dec 2003 18:59:50 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Dec-2003 18:59:50
  Branch: HEAD                             Handle: 2003121517594900

  Modified files:
    ossp-pkg/ac             ac

  Log:
    use IO::File because top-level IO now complains in 5.8.2

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/ac/ac
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ac/ac
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ac
  --- ossp-pkg/ac/ac	29 May 2003 09:26:21 -0000	1.1
  +++ ossp-pkg/ac/ac	15 Dec 2003 17:59:49 -0000	1.2
  @@ -33,7 +33,7 @@
   #   load a plethora of Perl modules
   #   (this really requires OpenPKG because of
   #   patches in perl-curses for Curses::UI!)
  -use IO;                   # from OpenPKG "perl"
  +use IO::File;             # from OpenPKG "perl"
   use POSIX;                # from OpenPKG "perl"
   use Getopt::Long;         # from OpenPKG "perl"
   use Data::Dumper;         # from OpenPKG "perl"
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan  1 17:54:25 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2D14677493; Thu,  1 Jan 2004 17:54:25 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog Makefile.in README configure.ac...
Message-Id: <20040101165425.2D14677493@mail.ossp.org>
Date: Thu,  1 Jan 2004 17:54:25 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Jan-2004 17:54:24
  Branch: HEAD                             Handle: 2004010116542000

  Modified files:
    ossp-pkg/shtool         ChangeLog Makefile.in README configure.ac
                            devtool.func sh.arx sh.echo sh.fixperm sh.install
                            sh.mkdir sh.mkln sh.mkshadow sh.move sh.path
                            sh.platform sh.prop sh.rotate sh.scpp sh.slo
                            sh.subst sh.table sh.tarball sh.version shtool.m4
                            shtool.pod shtool.spec shtoolize.in shtoolize.pod
                            test.db test.sh

  Log:
    Bump copyright year for 2004

  Summary:
    Revision    Changes     Path
    1.193       +4  -1      ossp-pkg/shtool/ChangeLog
    1.49        +1  -1      ossp-pkg/shtool/Makefile.in
    1.99        +1  -1      ossp-pkg/shtool/README
    1.5         +2  -2      ossp-pkg/shtool/configure.ac
    1.4         +1  -1      ossp-pkg/shtool/devtool.func
    1.20        +1  -1      ossp-pkg/shtool/sh.arx
    1.37        +1  -1      ossp-pkg/shtool/sh.echo
    1.17        +1  -1      ossp-pkg/shtool/sh.fixperm
    1.30        +1  -1      ossp-pkg/shtool/sh.install
    1.23        +1  -1      ossp-pkg/shtool/sh.mkdir
    1.17        +1  -1      ossp-pkg/shtool/sh.mkln
    1.23        +1  -1      ossp-pkg/shtool/sh.mkshadow
    1.19        +1  -1      ossp-pkg/shtool/sh.move
    1.26        +1  -1      ossp-pkg/shtool/sh.path
    1.3         +1  -1      ossp-pkg/shtool/sh.platform
    1.17        +1  -1      ossp-pkg/shtool/sh.prop
    1.9         +1  -1      ossp-pkg/shtool/sh.rotate
    1.25        +1  -1      ossp-pkg/shtool/sh.scpp
    1.23        +1  -1      ossp-pkg/shtool/sh.slo
    1.10        +1  -1      ossp-pkg/shtool/sh.subst
    1.19        +1  -1      ossp-pkg/shtool/sh.table
    1.20        +1  -1      ossp-pkg/shtool/sh.tarball
    1.35        +1  -1      ossp-pkg/shtool/sh.version
    1.6         +1  -1      ossp-pkg/shtool/shtool.m4
    1.65        +1  -1      ossp-pkg/shtool/shtool.pod
    1.19        +1  -1      ossp-pkg/shtool/shtool.spec
    1.33        +3  -3      ossp-pkg/shtool/shtoolize.in
    1.12        +1  -1      ossp-pkg/shtool/shtoolize.pod
    1.22        +1  -1      ossp-pkg/shtool/test.db
    1.11        +1  -1      ossp-pkg/shtool/test.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.192 -r1.193 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	13 Dec 2003 21:23:55 -0000	1.192
  +++ ossp-pkg/shtool/ChangeLog	1 Jan 2004 16:54:20 -0000	1.193
  @@ -9,7 +9,10 @@
   
    ChangeLog
   
  - Changes between 1.6.2 and 2.0.0 (02-Nov-2002 to xx-Dec-2003):
  + Changes between 1.6.2 and 2.0.0 (02-Nov-2002 to xx-Jan-2004):
  +
  +   *) Bumped copyright year for 2004.
  +      [Ralf S. Engelschall]
   
      *) Replaced old and inflexible "shtool guessos" command
         with a completely new command "shtool platform" command.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.48 -r1.49 Makefile.in
  --- ossp-pkg/shtool/Makefile.in	13 Dec 2003 21:23:55 -0000	1.48
  +++ ossp-pkg/shtool/Makefile.in	1 Jan 2004 16:54:20 -0000	1.49
  @@ -1,6 +1,6 @@
   ##
   ##  Makefile for GNU shtool
  -##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/README
  ============================================================================
  $ cvs diff -u -r1.98 -r1.99 README
  --- ossp-pkg/shtool/README	13 Dec 2003 21:32:24 -0000	1.98
  +++ ossp-pkg/shtool/README	1 Jan 2004 16:54:20 -0000	1.99
  @@ -5,7 +5,7 @@
     |___/_| |_|\__\___/ \___/|_|
   
     GNU shtool -- The GNU Portable Shell Tool
  -  Copyright (c) 1994-2003 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
   
     http://www.gnu.org/software/shtool/
     ftp://ftp.gnu.org/gnu/shtool/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/configure.ac
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 configure.ac
  --- ossp-pkg/shtool/configure.ac	11 Feb 2003 13:00:49 -0000	1.4
  +++ ossp-pkg/shtool/configure.ac	1 Jan 2004 16:54:20 -0000	1.5
  @@ -1,6 +1,6 @@
   dnl ##
   dnl ##  configure.ac -- Autoconf source for GNU shtool
  -dnl ##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##
   dnl ##  This file is part of shtool and free software; you can redistribute
   dnl ##  it and/or modify it under the terms of the GNU General Public
  @@ -24,7 +24,7 @@
   
   SHTOOL_VERSION_STR="`sh sh.version -l txt -d long VERSION`"
   sh sh.echo -e "Configuring %BGNU shtool%b (Portable Shell Tool), version %B${SHTOOL_VERSION_STR}%b"
  -echo "Copyright (c) 1994-2003 Ralf S. Engelschall <rse@engelschall.com>"
  +echo "Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>"
   AC_SUBST(SHTOOL_VERSION_STR)
   
   AC_PREFIX_DEFAULT(/usr/local)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/devtool.func
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.func
  --- ossp-pkg/shtool/devtool.func	11 Feb 2003 13:00:49 -0000	1.3
  +++ ossp-pkg/shtool/devtool.func	1 Jan 2004 16:54:20 -0000	1.4
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com> 
   ##
   
   devtool_require () {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.arx
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 sh.arx
  --- ossp-pkg/shtool/sh.arx	11 Feb 2003 13:00:49 -0000	1.19
  +++ ossp-pkg/shtool/sh.arx	1 Jan 2004 16:54:20 -0000	1.20
  @@ -1,6 +1,6 @@
   ##
   ##  arx -- Extended archive command
  -##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for shtool
   ##
   ##  This file is part of shtool and free software; you can redistribute
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.echo
  ============================================================================
  $ cvs diff -u -r1.36 -r1.37 sh.echo
  --- ossp-pkg/shtool/sh.echo	13 Aug 2003 14:20:34 -0000	1.36
  +++ ossp-pkg/shtool/sh.echo	1 Jan 2004 16:54:20 -0000	1.37
  @@ -1,6 +1,6 @@
   ##
   ##  echo -- Print string with optional construct expansion
  -##  Copyright (c) 1998-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for WML as buildinfo
   ##
   ##  This file is part of shtool and free software; you can redistribute
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.fixperm
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 sh.fixperm
  --- ossp-pkg/shtool/sh.fixperm	11 Feb 2003 13:00:50 -0000	1.16
  +++ ossp-pkg/shtool/sh.fixperm	1 Jan 2004 16:54:20 -0000	1.17
  @@ -1,6 +1,6 @@
   ##
   ##  fixperm -- Fix file permissions inside a source tree
  -##  Copyright (c) 1996-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1996-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for ePerl
   ##
   ##  This file is part of shtool and free software; you can redistribute
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.install
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 sh.install
  --- ossp-pkg/shtool/sh.install	13 Aug 2003 14:20:34 -0000	1.29
  +++ ossp-pkg/shtool/sh.install	1 Jan 2004 16:54:20 -0000	1.30
  @@ -1,6 +1,6 @@
   ##
   ##  install -- Install a program, script or datafile
  -##  Copyright (c) 1997-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1997-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for shtool
   ##
   ##  This file is part of shtool and free software; you can redistribute
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.mkdir
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 sh.mkdir
  --- ossp-pkg/shtool/sh.mkdir	13 Aug 2003 14:20:34 -0000	1.22
  +++ ossp-pkg/shtool/sh.mkdir	1 Jan 2004 16:54:20 -0000	1.23
  @@ -1,6 +1,6 @@
   ##
   ##  mkdir -- Make one or more directories
  -##  Copyright (c) 1996-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1996-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for public domain by Noah Friedman <friedman@prep.ai.mit.edu>
   ##  Cleaned up and enhanced for shtool
   ##
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.mkln
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 sh.mkln
  --- ossp-pkg/shtool/sh.mkln	13 Aug 2003 14:20:34 -0000	1.16
  +++ ossp-pkg/shtool/sh.mkln	1 Jan 2004 16:54:20 -0000	1.17
  @@ -1,6 +1,6 @@
   ##
   ##  mkln -- Make link with calculation of relative paths
  -##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for shtool
   ##
   ##  This file is part of shtool and free software; you can redistribute
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.mkshadow
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 sh.mkshadow
  --- ossp-pkg/shtool/sh.mkshadow	11 Feb 2003 13:00:50 -0000	1.22
  +++ ossp-pkg/shtool/sh.mkshadow	1 Jan 2004 16:54:20 -0000	1.23
  @@ -1,6 +1,6 @@
   ##
   ##  mkshadow -- Make a shadow tree through symbolic links
  -##  Copyright (c) 1998-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for Apache
   ##
   ##  This file is part of shtool and free software; you can redistribute
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.move
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 sh.move
  --- ossp-pkg/shtool/sh.move	13 Aug 2003 14:20:34 -0000	1.18
  +++ ossp-pkg/shtool/sh.move	1 Jan 2004 16:54:20 -0000	1.19
  @@ -1,6 +1,6 @@
   ##
   ##  move -- Move files with simultaneous substitution
  -##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for shtool
   ##
   ##  This file is part of shtool and free software; you can redistribute
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.path
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 sh.path
  --- ossp-pkg/shtool/sh.path	13 Aug 2003 14:20:34 -0000	1.25
  +++ ossp-pkg/shtool/sh.path	1 Jan 2004 16:54:20 -0000	1.26
  @@ -1,6 +1,6 @@
   ##
   ##  path -- Deal with program paths
  -##  Copyright (c) 1998-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for Apache
   ##
   ##  This file is part of shtool and free software; you can redistribute
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.platform
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 sh.platform
  --- ossp-pkg/shtool/sh.platform	13 Dec 2003 21:33:57 -0000	1.2
  +++ ossp-pkg/shtool/sh.platform	1 Jan 2004 16:54:20 -0000	1.3
  @@ -1,6 +1,6 @@
   ##
   ##  platform -- Platform Identification Utility
  -##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for use in OpenPKG
   ##
   ##  This file is part of shtool and free software; you can redistribute
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.prop
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 sh.prop
  --- ossp-pkg/shtool/sh.prop	11 Feb 2003 13:00:50 -0000	1.16
  +++ ossp-pkg/shtool/sh.prop	1 Jan 2004 16:54:20 -0000	1.17
  @@ -1,6 +1,6 @@
   ##
   ##  prop -- Display progress with a running propeller
  -##  Copyright (c) 1998-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for mod_ssl
   ##
   ##  This file is part of shtool and free software; you can redistribute
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.rotate
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 sh.rotate
  --- ossp-pkg/shtool/sh.rotate	13 Aug 2003 14:20:34 -0000	1.8
  +++ ossp-pkg/shtool/sh.rotate	1 Jan 2004 16:54:20 -0000	1.9
  @@ -1,6 +1,6 @@
   ##
   ##  rotate -- Logfile rotation
  -##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for use in OpenPKG
   ##
   ##  This file is part of shtool and free software; you can redistribute
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.scpp
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 sh.scpp
  --- ossp-pkg/shtool/sh.scpp	11 Feb 2003 13:00:50 -0000	1.24
  +++ ossp-pkg/shtool/sh.scpp	1 Jan 2004 16:54:20 -0000	1.25
  @@ -1,6 +1,6 @@
   ##
   ##  scpp -- Sharing C Pre-Processor
  -##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for GNU Pth
   ##
   ##  This file is part of shtool and free software; you can redistribute
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.slo
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 sh.slo
  --- ossp-pkg/shtool/sh.slo	13 Aug 2003 14:20:34 -0000	1.22
  +++ ossp-pkg/shtool/sh.slo	1 Jan 2004 16:54:20 -0000	1.23
  @@ -1,6 +1,6 @@
   ##
   ##  slo -- Separate linker options by library class
  -##  Copyright (c) 1998-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for Apache
   ##
   ##  This file is part of shtool and free software; you can redistribute
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.subst
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 sh.subst
  --- ossp-pkg/shtool/sh.subst	13 Aug 2003 14:20:34 -0000	1.9
  +++ ossp-pkg/shtool/sh.subst	1 Jan 2004 16:54:20 -0000	1.10
  @@ -1,6 +1,6 @@
   ##
   ##  subst -- Apply sed(1) substitution operations
  -##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for OpenPKG's rpmtool
   ##
   ##  This file is part of shtool and free software; you can redistribute
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.table
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 sh.table
  --- ossp-pkg/shtool/sh.table	11 Feb 2003 13:00:50 -0000	1.18
  +++ ossp-pkg/shtool/sh.table	1 Jan 2004 16:54:20 -0000	1.19
  @@ -1,6 +1,6 @@
   ##
   ##  table -- Pretty-print a field-separated list as a table
  -##  Copyright (c) 1998-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for Apache
   ##
   ##  This file is part of shtool and free software; you can redistribute
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.tarball
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 sh.tarball
  --- ossp-pkg/shtool/sh.tarball	13 Aug 2003 14:20:34 -0000	1.19
  +++ ossp-pkg/shtool/sh.tarball	1 Jan 2004 16:54:20 -0000	1.20
  @@ -1,6 +1,6 @@
   ##
   ##  tarball -- Roll distribution tarballs
  -##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for shtool
   ##
   ##  This file is part of shtool and free software; you can redistribute
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.version
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 sh.version
  --- ossp-pkg/shtool/sh.version	11 Feb 2003 13:00:50 -0000	1.34
  +++ ossp-pkg/shtool/sh.version	1 Jan 2004 16:54:20 -0000	1.35
  @@ -1,6 +1,6 @@
   ##
   ##  version -- Maintain a version information file
  -##  Copyright (c) 1994-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##  Originally written for ePerl, rewritten from scratch for shtool
   ##
   ##  This file is part of shtool and free software; you can redistribute
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtool.m4
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 shtool.m4
  --- ossp-pkg/shtool/shtool.m4	11 Feb 2003 13:00:50 -0000	1.5
  +++ ossp-pkg/shtool/shtool.m4	1 Jan 2004 16:54:20 -0000	1.6
  @@ -1,6 +1,6 @@
   ##
   ##  shtool.m4 -- GNU shtool Autoconf macros
  -##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtool.pod
  ============================================================================
  $ cvs diff -u -r1.64 -r1.65 shtool.pod
  --- ossp-pkg/shtool/shtool.pod	13 Dec 2003 21:23:55 -0000	1.64
  +++ ossp-pkg/shtool/shtool.pod	1 Jan 2004 16:54:20 -0000	1.65
  @@ -1,6 +1,6 @@
   ##
   ##  shtool.pod -- Manual Page for shtool in POD format
  -##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtool.spec
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 shtool.spec
  --- ossp-pkg/shtool/shtool.spec	11 Feb 2003 13:00:50 -0000	1.18
  +++ ossp-pkg/shtool/shtool.spec	1 Jan 2004 16:54:20 -0000	1.19
  @@ -1,6 +1,6 @@
   ##
   ##  shtool.spec -- RPM specification for shtool package
  -##  Copyright (c) 2000-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtoolize.in
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 shtoolize.in
  --- ossp-pkg/shtool/shtoolize.in	13 Dec 2003 21:23:55 -0000	1.32
  +++ ossp-pkg/shtool/shtoolize.in	1 Jan 2004 16:54:20 -0000	1.33
  @@ -1,7 +1,7 @@
   #!@PERL@
   ##
   ##  shtoolize -- Build shtool script out of ingredient scripts
  -##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ -347,7 +347,7 @@
   #!/bin/sh
   ##
   ##  GNU shtool -- The GNU Portable Shell Tool
  -##  Copyright (c) 1994-2003 Ralf S. Engelschall <rse\@engelschall.com>
  +##  Copyright (c) 1994-2004 Ralf S. Engelschall <rse\@engelschall.com>
   ##
   ##  See http://www.gnu.org/software/shtool/ for more information.
   ##  See ftp://ftp.gnu.org/gnu/shtool/ for latest version.
  @@ -393,7 +393,7 @@
   fi
   if [ ".\$1" = ".-h" ] || [ ".\$1" = ".--help" ]; then
       echo "This is GNU shtool, version ${version}"
  -    echo "Copyright (c) 1994-2003 Ralf S. Engelschall <rse\@engelschall.com>"
  +    echo "Copyright (c) 1994-2004 Ralf S. Engelschall <rse\@engelschall.com>"
       echo "Report bugs to <bug-shtool\@gnu.org>"
       echo ''
       echo "Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtoolize.pod
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 shtoolize.pod
  --- ossp-pkg/shtool/shtoolize.pod	13 Dec 2003 21:23:55 -0000	1.11
  +++ ossp-pkg/shtool/shtoolize.pod	1 Jan 2004 16:54:20 -0000	1.12
  @@ -1,6 +1,6 @@
   ##
   ##  shtoolize.pod -- Manual Page for shtoolize in POD format
  -##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/test.db
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 test.db
  --- ossp-pkg/shtool/test.db	13 Dec 2003 21:23:55 -0000	1.21
  +++ ossp-pkg/shtool/test.db	1 Jan 2004 16:54:20 -0000	1.22
  @@ -1,6 +1,6 @@
   ##
   ##  test.db -- GNU shtool test suite (minimalistic)
  -##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   @begin{echo}
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/test.sh
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 test.sh
  --- ossp-pkg/shtool/test.sh	11 Feb 2003 13:00:50 -0000	1.10
  +++ ossp-pkg/shtool/test.sh	1 Jan 2004 16:54:20 -0000	1.11
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  test.sh -- GNU shtool test suite driver
  -##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan  1 17:56:34 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 81A1377493; Thu,  1 Jan 2004 17:56:34 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog README VERSION devtool.conf
Message-Id: <20040101165634.81A1377493@mail.ossp.org>
Date: Thu,  1 Jan 2004 17:56:34 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Jan-2004 17:56:34
  Branch: HEAD                             Handle: 2004010116563300

  Modified files:
    ossp-pkg/shtool         ChangeLog README VERSION devtool.conf

  Log:
    use Autoconf 2.59 and update date

  Summary:
    Revision    Changes     Path
    1.194       +3  -0      ossp-pkg/shtool/ChangeLog
    1.100       +1  -1      ossp-pkg/shtool/README
    1.75        +1  -1      ossp-pkg/shtool/VERSION
    1.7         +1  -1      ossp-pkg/shtool/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.193 -r1.194 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	1 Jan 2004 16:54:20 -0000	1.193
  +++ ossp-pkg/shtool/ChangeLog	1 Jan 2004 16:56:33 -0000	1.194
  @@ -11,6 +11,9 @@
   
    Changes between 1.6.2 and 2.0.0 (02-Nov-2002 to xx-Jan-2004):
   
  +   *) Upgraded to GNU Autoconf 2.59 environment.
  +      [Ralf S. Engelschall]
  +
      *) Bumped copyright year for 2004.
         [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/README
  ============================================================================
  $ cvs diff -u -r1.99 -r1.100 README
  --- ossp-pkg/shtool/README	1 Jan 2004 16:54:20 -0000	1.99
  +++ ossp-pkg/shtool/README	1 Jan 2004 16:56:33 -0000	1.100
  @@ -10,7 +10,7 @@
     http://www.gnu.org/software/shtool/
     ftp://ftp.gnu.org/gnu/shtool/
   
  -  Version 2.0b0 (13-Dec-2003)
  +  Version 2.0b0 (01-Jan-2004)
   
     The GNU shtool program is a compilation of small but very stable and
     portable shell scripts into a single shell tool. All ingredients
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/VERSION
  ============================================================================
  $ cvs diff -u -r1.74 -r1.75 VERSION
  --- ossp-pkg/shtool/VERSION	13 Dec 2003 21:32:24 -0000	1.74
  +++ ossp-pkg/shtool/VERSION	1 Jan 2004 16:56:33 -0000	1.75
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for GNU shtool (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is GNU shtool, Version 2.0b0 (13-Dec-2003)
  +  This is GNU shtool, Version 2.0b0 (01-Jan-2004)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 devtool.conf
  --- ossp-pkg/shtool/devtool.conf	17 Nov 2003 12:36:42 -0000	1.6
  +++ ossp-pkg/shtool/devtool.conf	1 Jan 2004 16:56:33 -0000	1.7
  @@ -3,7 +3,7 @@
   ##
   
   %autogen
  -    @autogen autoconf 2.58 "2.5*"
  +    @autogen autoconf 2.59 "2.5*"
   
   %autoclean
       @autoclean autoconf
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jan  6 21:14:31 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3EAAF774A9; Tue,  6 Jan 2004 21:14:31 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ Makefile.in README VERSION aclocal.m4 confi...
Message-Id: <20040106201431.3EAAF774A9@mail.ossp.org>
Date: Tue,  6 Jan 2004 21:14:31 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Jan-2004 21:14:31
  Branch: HEAD                             Handle: 2004010620142800

  Added files:
    ossp-pkg/uuid           Makefile.in README VERSION aclocal.m4 configure.ac
                            devtool devtool.conf devtool.func uuid-config.in
                            uuid.ac uuid.c uuid.h uuidtool.c

  Log:
    import the first cut for our forthcoming OSSP uuid library

  Summary:
    Revision    Changes     Path
    1.1         +128 -0     ossp-pkg/uuid/Makefile.in
    1.1         +46 -0      ossp-pkg/uuid/README
    1.1         +6  -0      ossp-pkg/uuid/VERSION
    1.1         +116 -0     ossp-pkg/uuid/aclocal.m4
    1.1         +50 -0      ossp-pkg/uuid/configure.ac
    1.1         +47 -0      ossp-pkg/uuid/devtool
    1.1         +56 -0      ossp-pkg/uuid/devtool.conf
    1.1         +73 -0      ossp-pkg/uuid/devtool.func
    1.1         +144 -0     ossp-pkg/uuid/uuid-config.in
    1.1         +92 -0      ossp-pkg/uuid/uuid.ac
    1.1         +211 -0     ossp-pkg/uuid/uuid.c
    1.1         +112 -0     ossp-pkg/uuid/uuid.h
    1.1         +165 -0     ossp-pkg/uuid/uuidtool.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r0 -r1.1 Makefile.in
  --- /dev/null	2004-01-06 21:14:28.000000000 +0100
  +++ Makefile.in	2004-01-06 21:14:28.000000000 +0100
  @@ -0,0 +1,128 @@
  +##
  +##  OSSP uuid - Universally Unique Identifier
  +##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP uuid, a library for the generation
  +##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  Makefile.in: make(1) build procedure
  +##
  +
  +@SET_MAKE@
  +
  +DESTDIR     =
  +prefix      = @prefix@
  +exec_prefix = @exec_prefix@
  +bindir      = @bindir@
  +libdir      = @libdir@
  +includedir  = @includedir@
  +mandir      = @mandir@
  +
  +CC          = @CC@
  +CPPFLAGS    = @CPPFLAGS@
  +CFLAGS      = @DEFS@ @CFLAGS@
  +LDFLAGS     = @LDFLAGS@
  +LIBS        = @LIBS@
  +RM          = rm -f
  +RMDIR       = rmdir
  +SHTOOL      = ./shtool
  +LIBTOOL     = ./libtool
  +TRUE        = true
  +POD2MAN     = pod2man
  +
  +LIB_NAME    = libuuid.la
  +LIB_OBJS    = uuid.lo
  +
  +PRG_NAME    = uuidtool
  +PRG_OBJS    = uuidtool.o
  +
  +.SUFFIXES:
  +.SUFFIXES: .c .o .lo
  +
  +all: $(LIB_NAME) $(PRG_NAME)
  +
  +.c.o:
  +	$(CC) $(CPPFLAGS) $(CFLAGS) -c $<
  +
  +.c.lo:
  +	@$(LIBTOOL) --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS) -c $<
  +
  +$(LIB_NAME): $(LIB_OBJS)
  +	@$(LIBTOOL) --mode=link $(CC) -o $(LIB_NAME) $(LIB_OBJS) -rpath $(libdir) \
  +	    -version-info `$(SHTOOL) version -l txt -d libtool VERSION`
  +
  +$(PRG_NAME): $(PRG_OBJS) $(LIB_NAME)
  +	@$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $(PRG_NAME) $(PRG_OBJS) $(LIB_NAME) $(LIBS)
  +
  +man: uuid.3
  +uuid.3: uuid.pod
  +	V1=`$(SHTOOL) version -l txt -d short VERSION`; \
  +	V2=`$(SHTOOL) version -l txt -d long VERSION`; \
  +	D=`$(SHTOOL) version -l txt -d long VERSION | sed -e 's;.*(;;' -e 's;).*;;'`; \
  +	$(POD2MAN) --quotes=none \
  +	           --section=3 --center="Universally Unique Identifiers" \
  +	           --release="$$D" --date="OSSP uuid $$V1" uuid.pod | \
  +	sed -e "s;UUID_VERSION_STR;$$V2;" >uuid.3
  +
  +check: $(PRG_NAME)
  +	@$(LIBTOOL) --mode=execute ./$(PRG_NAME) -n 16
  +
  +install:
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(includedir)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libdir)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man3
  +	$(SHTOOL) install -c -m 755 uuid-config $(DESTDIR)$(bindir)/
  +	$(SHTOOL) install -c -m 644 uuid.h $(DESTDIR)$(includedir)/
  +	$(SHTOOL) install -c -m 644 uuid.3 $(DESTDIR)$(mandir)/man3/
  +	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libuuid.la $(DESTDIR)$(libdir)/
  +
  +uninstall:
  +	@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libuuid.la
  +	-$(RM) $(DESTDIR)$(mandir)/man3/uuid.3
  +	-$(RM) $(DESTDIR)$(includedir)/uuid.h
  +	-$(RM) $(DESTDIR)$(bindir)/uuid-config
  +	-$(RMDIR) $(DESTDIR)$(mandir)/man3 >/dev/null 2>&1 || $(TRUE)
  +	-$(RMDIR) $(DESTDIR)$(mandir) >/dev/null 2>&1 || $(TRUE)
  +	-$(RMDIR) $(DESTDIR)$(libdir) >/dev/null 2>&1 || $(TRUE)
  +	-$(RMDIR) $(DESTDIR)$(includedir) >/dev/null 2>&1 || $(TRUE)
  +	-$(RMDIR) $(DESTDIR)$(bindir) >/dev/null 2>&1 || $(TRUE)
  +	-$(RMDIR) $(DESTDIR)$(prefix) >/dev/null 2>&1 || $(TRUE)
  +
  +clean:
  +	-$(RM) $(LIB_NAME) $(LIB_OBJS)
  +	-$(RM) $(PRG_NAME) $(PRG_OBJS)
  +	-$(RM) -r .libs >/dev/null 2>&1 || $(TRUE)
  +	-$(RM) *.o *.lo
  +
  +distclean: clean
  +	-$(RM) config.log config.status config.cache
  +	-$(RM) Makefile config.h uuid-config
  +	-$(RM) libtool
  +
  +realclean: distclean
  +	-$(RM) uuid.3
  +	-$(RM) configure config.h.in
  +	-$(RM) shtool
  +	-$(RM) ltmain.sh libtool.m4 config.guess config.sub
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r0 -r1.1 README
  --- /dev/null	2004-01-06 21:14:28.000000000 +0100
  +++ README	2004-01-06 21:14:29.000000000 +0100
  @@ -0,0 +1,46 @@
  +   _        ___  ____ ____  ____                _     _
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _   _ _   _(_) __| |
  +  _|_||_| | | | \___ \___ \| |_) | | | | | | | | |/ _` |
  + |_||_|_| | |_| |___) |__) |  __/  | |_| | |_| | | (_| |
  +  |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
  +
  +  OSSP uuid - Universally Unique Identifiers
  +  Version 0.1.0 (06-Jan-2004)
  +
  +  ABSTRACT
  +
  +  OSSP uuid is ...
  +
  +  COPYRIGHT AND LICENSE
  +
  +  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +
  +  This file is part of OSSP uuid, a library for the generation
  +  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +
  +  Permission to use, copy, modify, and distribute this software for
  +  any purpose with or without fee is hereby granted, provided that
  +  the above copyright notice and this permission notice appear in all
  +  copies.
  +
  +  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +  SUCH DAMAGE.
  +
  +  HOME AND DOCUMENTATION
  +
  +  The documentation and latest release can be found on
  +
  +  o http://www.ossp.org/pkg/lib/uuid/
  +  o  ftp://ftp.ossp.org/pkg/lib/uuid/
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/VERSION
  ============================================================================
  $ cvs diff -u -r0 -r1.1 VERSION
  --- /dev/null	2004-01-06 21:14:28.000000000 +0100
  +++ VERSION	2004-01-06 21:14:29.000000000 +0100
  @@ -0,0 +1,6 @@
  +
  +  VERSION -- Version Information for OSSP uuid (syntax: Text)
  +  [automatically generated and maintained by GNU shtool]
  +
  +  This is OSSP uuid, Version 0.1.0 (06-Jan-2004)
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/aclocal.m4
  ============================================================================
  $ cvs diff -u -r0 -r1.1 aclocal.m4
  --- /dev/null	2004-01-06 21:14:28.000000000 +0100
  +++ aclocal.m4	2004-01-06 21:14:29.000000000 +0100
  @@ -0,0 +1,116 @@
  +dnl ##
  +dnl ##  SA - OSSP Socket Abstraction Library
  +dnl ##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##
  +dnl ##  This file is part of OSSP SA, a socket abstraction library which
  +dnl ##  can be found at http://www.ossp.org/pkg/sa/.
  +dnl ##
  +dnl ##  Permission to use, copy, modify, and distribute this software for
  +dnl ##  any purpose with or without fee is hereby granted, provided that
  +dnl ##  the above copyright notice and this permission notice appear in all
  +dnl ##  copies.
  +dnl ##
  +dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +dnl ##  SUCH DAMAGE.
  +dnl ##
  +dnl ##  aclocal.m4: GNU Autoconf local macro definitions
  +dnl ##
  +
  +dnl ##
  +dnl ##  Check whether compiler option works
  +dnl ##
  +dnl ##  configure.in:
  +dnl ##    AC_COMPILER_OPTION(<name>, <display>, <option>,
  +dnl ##                       <action-success>, <action-failure>)
  +dnl ##
  +
  +AC_DEFUN(AC_COMPILER_OPTION,[dnl
  +AC_MSG_CHECKING(whether compiler option(s) $2 work)
  +AC_CACHE_VAL(ac_cv_compiler_option_$1,[
  +SAVE_CFLAGS="$CFLAGS"
  +CFLAGS="$CFLAGS $3"
  +AC_TRY_COMPILE([],[], ac_cv_compiler_option_$1=yes, ac_cv_compiler_option_$1=no)
  +CFLAGS="$SAVE_CFLAGS"
  +])dnl
  +if test ".$ac_cv_compiler_option_$1" = .yes; then
  +    ifelse([$4], , :, [$4])
  +else
  +    ifelse([$5], , :, [$5])
  +fi
  +AC_MSG_RESULT([$ac_cv_compiler_option_$1])
  +])dnl
  +
  +dnl ##
  +dnl ##  Debugging Support
  +dnl ##
  +dnl ##  configure.in:
  +dnl ##    AC_CHECK_DEBUGGING
  +dnl ##
  +
  +AC_DEFUN(AC_CHECK_DEBUGGING,[dnl
  +AC_ARG_ENABLE(debug,dnl
  +[  --enable-debug          build for debugging (default=no)],
  +[dnl
  +if test ".$ac_cv_prog_gcc" = ".yes"; then
  +    case "$CFLAGS" in
  +        *-O* ) ;;
  +           * ) CFLAGS="$CFLAGS -O2" ;;
  +    esac
  +    case "$CFLAGS" in
  +        *-g* ) ;;
  +           * ) CFLAGS="$CFLAGS -g" ;;
  +    esac
  +    case "$CFLAGS" in
  +        *-pipe* ) ;;
  +              * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
  +    esac
  +    AC_COMPILER_OPTION(defdbg, -DDEBUG, -DDEBUG, CFLAGS="$CFLAGS -DDEBUG")
  +    CFLAGS="$CFLAGS -pedantic"
  +    CFLAGS="$CFLAGS -Wall"
  +    WMORE="-Wshadow -Wpointer-arith -Wcast-align -Winline"
  +    WMORE="$WMORE -Wmissing-prototypes -Wmissing-declarations -Wnested-externs"
  +    AC_COMPILER_OPTION(wmore, -W<xxx>, $WMORE, CFLAGS="$CFLAGS $WMORE")
  +    AC_COMPILER_OPTION(wnolonglong, -Wno-long-long, -Wno-long-long, CFLAGS="$CFLAGS -Wno-long-long")
  +else
  +    case "$CFLAGS" in
  +        *-g* ) ;;
  +           * ) CFLAGS="$CFLAGS -g" ;;
  +    esac
  +fi
  +msg="enabled"
  +],[
  +if test ".$ac_cv_prog_gcc" = ".yes"; then
  +case "$CFLAGS" in
  +    *-pipe* ) ;;
  +          * ) AC_COMPILER_OPTION(pipe, -pipe, -pipe, CFLAGS="$CFLAGS -pipe") ;;
  +esac
  +fi
  +case "$CFLAGS" in
  +    *-g* ) CFLAGS=`echo "$CFLAGS" |\
  +                   sed -e 's/ -g / /g' -e 's/ -g$//' -e 's/^-g //g' -e 's/^-g$//'` ;;
  +esac
  +case "$CXXFLAGS" in
  +    *-g* ) CXXFLAGS=`echo "$CXXFLAGS" |\
  +                     sed -e 's/ -g / /g' -e 's/ -g$//' -e 's/^-g //g' -e 's/^-g$//'` ;;
  +esac
  +msg=disabled
  +])dnl
  +AC_MSG_CHECKING(for compilation debug mode)
  +AC_MSG_RESULT([$msg])
  +if test ".$msg" = .enabled; then
  +    enable_shared=no
  +fi
  +])
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/configure.ac
  ============================================================================
  $ cvs diff -u -r0 -r1.1 configure.ac
  --- /dev/null	2004-01-06 21:14:28.000000000 +0100
  +++ configure.ac	2004-01-06 21:14:29.000000000 +0100
  @@ -0,0 +1,50 @@
  +dnl ##
  +dnl ##  OSSP uuid - Universally Unique Identifier
  +dnl ##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +dnl ##
  +dnl ##  This file is part of OSSP uuid, a library for the generation
  +dnl ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +dnl ##
  +dnl ##  Permission to use, copy, modify, and distribute this software for
  +dnl ##  any purpose with or without fee is hereby granted, provided that
  +dnl ##  the above copyright notice and this permission notice appear in all
  +dnl ##  copies.
  +dnl ##
  +dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +dnl ##  SUCH DAMAGE.
  +dnl ##
  +dnl ##  configure.ac: GNU Autoconf source script
  +dnl ##
  +
  +AC_PREREQ(2.53)
  +AC_INIT
  +SA_VERSION_STR=`./shtool version -l txt -d long VERSION`
  +./shtool echo -e "Configuring %BOSSP uuid%b (Universally Unique Identifiers), version %B${UUID_VERSION_STR}%b"
  +AC_SUBST(UUID_VERSION_STR)
  +
  +AC_PROG_MAKE_SET
  +AC_PROG_CC
  +AC_CHECK_DEBUGGING
  +
  +sinclude(libtool.m4)
  +AC_PROG_LIBTOOL
  +
  +sinclude(uuid.ac)
  +UUID_CHECK_ALL
  +
  +AC_CONFIG_HEADERS(config.h)
  +AC_CONFIG_FILES([Makefile uuid-config])
  +AC_CONFIG_COMMANDS([adjustment], [chmod a+x uuid-config])
  +AC_OUTPUT
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool
  ============================================================================
  $ cvs diff -u -r0 -r1.1 devtool
  --- /dev/null	2004-01-06 21:14:28.000000000 +0100
  +++ devtool	2004-01-06 21:14:29.000000000 +0100
  @@ -0,0 +1,47 @@
  +#!/bin/sh
  +##
  +##  devtool -- Development Tool
  +##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  +##
  +
  +if [ $# -eq 0 ]; then
  +    echo "devtool:USAGE: devtool <command> [<arg> ...]" 1>&2
  +    exit 1
  +fi
  +
  +cmd="$1"
  +shift
  +
  +devtoolfunc="./devtool.func"
  +
  +if [ ! -f devtool.conf ]; then
  +    echo "devtool:ERROR: no devtool.conf in current directory" 1>&2
  +    exit 1
  +fi
  +
  +cmdline=`grep "^%$cmd" devtool.conf`
  +if [ ".$cmdline" = . ]; then
  +    echo "devtool:ERROR: command $cmd not found in devtool.conf" 1>&2
  +    exit 1
  +fi
  +
  +if [ ".$TMPDIR" != . ]; then
  +    tmpdir="$TMPDIR"
  +elif [ ".$TEMPDIR" != . ]; then
  +    tmpdir="$TEMPDIR"
  +else
  +    tmpdir="/tmp"
  +fi
  +tmpfile="$tmpdir/rc.$$.tmp"
  +
  +rm -f $tmpfile
  +touch $tmpfile
  +echo ". $devtoolfunc" >>$tmpfile
  +( sed <devtool.conf -e "1,/^%common/d" -e '/^%.*/,$d'
  +  sed <devtool.conf -e "1,/^%$cmd/d" -e '/^%.*/,$d' ) |\
  +sed -e 's;\([ 	]\)@\([a-zA-Z_][a-zA-Z0-9_]*\);\1devtool_\2;' >>$tmpfile
  +
  +sh $tmpfile "$@"
  +
  +rm -f $tmpfile >/dev/null 2>&1 || true
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool.conf
  ============================================================================
  $ cvs diff -u -r0 -r1.1 devtool.conf
  --- /dev/null	2004-01-06 21:14:28.000000000 +0100
  +++ devtool.conf	2004-01-06 21:14:29.000000000 +0100
  @@ -0,0 +1,56 @@
  +##
  +##  devtool.conf -- Development Tool Configuration
  +##
  +
  +%autogen
  +    @autogen shtool   1.6.2 "1.6.*" all
  +    @autogen libtool  1.5   "1.5*"
  +    @autogen autoconf 2.59  "2.5[3-9]*"
  +
  +%autoclean
  +    @autoclean shtool
  +    @autoclean libtool
  +    @autoclean autoconf
  +
  +%configure
  +    ./configure \
  +        --prefix=/tmp/uuid \
  +        --disable-shared \
  +        --enable-debug \
  +        "$@"
  +
  +%version
  +    ./shtool version -l txt -n "OSSP uuid" -e VERSION
  +    V=`./shtool version -l txt -d long VERSION`
  +    sed -e "s/Version .*/Version $V/g" <README >README.n
  +    mv README.n README
  +
  +%dist
  +    echo "+++ removing old tarballs"
  +    rm -f uuid-*.tar.gz
  +    echo "+++ generating"
  +    ./devtool autoclean
  +    ./devtool autogen
  +    echo "+++ configuring"
  +    ./configure
  +    echo "+++ building"
  +    make clean all man
  +    echo "+++ cleaning"
  +    make distclean
  +    echo "+++ fixing"
  +    ./shtool fixperm -v .
  +    echo "+++ rolling"
  +    V=`./shtool version -l txt -d short VERSION`
  +    ./shtool tarball -o uuid-${V}.tar.gz -d uuid-${V} -u ossp -g ossp \
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*,*.tar.gz,^#.*,.*~$' -c 'gzip --best' .
  +    ls -l uuid-${V}.tar.gz
  +    echo "+++ testing"
  +    gunzip <uuid-${V}.tar.gz | tar tvf - | head -10
  +    echo "[...]"
  +    gunzip <uuid-${V}.tar.gz | tar tvf - | tail -10
  +
  +%upload
  +    echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/uuid/"
  +    V=`./shtool version -l txt -d short VERSION`
  +    scp uuid-${V}.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/uuid/
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool.func
  ============================================================================
  $ cvs diff -u -r0 -r1.1 devtool.func
  --- /dev/null	2004-01-06 21:14:28.000000000 +0100
  +++ devtool.func	2004-01-06 21:14:30.000000000 +0100
  @@ -0,0 +1,73 @@
  +##
  +##  devtool.func -- Development Tool Functions
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  +##
  +
  +devtool_require () {
  +    t="$1"; o="$2"; p="$3"; e="$4"; a="$5"
  +    v=`($t $o | head -1 | awk "{ print \\\$$p; }") 2>/dev/null`
  +    if [ ".$v" = . ]; then
  +        echo "devtool:ERROR: unable to determine version of $t" 1>&2
  +        exit 1
  +    fi
  +    case "$v" in
  +        $e )
  +            ;;
  +        $a )
  +            echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
  +            ;;
  +        * )
  +            echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
  +            exit 1
  +            ;;
  +    esac
  +    echo "$v"
  +}
  +
  +devtool_autogen () {
  +    tool=$1
  +    shift
  +    case $tool in
  +        autoconf )
  +            autoconf_version=`devtool_require autoconf --version 4 "$1" "$2"`
  +            echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
  +            autoconf
  +            autoheader 2>&1 | grep -v "is unchanged"
  +            rm -rf autom4te.cache >/dev/null 2>&1
  +            ;;
  +        libtool )
  +            libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
  +            echo "generating (GNU Libtool $libtoolize_version): ltmain.sh, libtool.m4, config.guess, config.sub"
  +            libtoolize --force --copy >/dev/null 2>&1
  +            cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
  +                sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` libtool.m4
  +            ;;
  +        shtool )
  +            shtoolize_version=`devtool_require shtoolize -v 3 "$1" "$2"`
  +            echo "generating (GNU Shtool $shtoolize_version): shtool"
  +            shift
  +            shift
  +            shtoolize -q "$@"
  +            ;;
  +    esac
  +}
  +
  +devtool_autoclean () {
  +    tool=$1
  +    shift
  +    case $tool in
  +        autoconf )
  +            echo "removing: configure config.h.in"
  +            rm -f configure config.h.in
  +            ;;
  +        libtool )
  +            echo "removing: ltmain.sh libtool.m4 config.guess config.sub"
  +            rm -f ltmain.sh libtool.m4 config.guess config.sub
  +            ;;
  +        shtool )
  +            echo "removing: shtool"
  +            rm -f shtool
  +            ;;
  +    esac
  +}
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid-config.in
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid-config.in
  --- /dev/null	2004-01-06 21:14:28.000000000 +0100
  +++ uuid-config.in	2004-01-06 21:14:30.000000000 +0100
  @@ -0,0 +1,144 @@
  +#!/bin/sh
  +##
  +##  OSSP uuid - Universally Unique Identifier
  +##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP uuid, a library for the generation
  +##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  uuid-config.in: library build utility
  +##
  +
  +DIFS=' 
  +'
  +
  +prefix="@prefix@"
  +exec_prefix="@exec_prefix@"
  +
  +uuid_prefix="$prefix"
  +uuid_exec_prefix="$exec_prefix"
  +uuid_bindir="@bindir@"
  +uuid_libdir="@libdir@"
  +uuid_includedir="@includedir@"
  +uuid_mandir="@mandir@"
  +uuid_datadir="@datadir@"
  +uuid_acdir="@datadir@/aclocal"
  +uuid_cflags="@CFLAGS@"
  +uuid_ldflags="@LDFLAGS@"
  +uuid_libs="@LIBS@"
  +uuid_version="@SA_VERSION_STR@"
  +
  +help=no
  +version=no
  +
  +usage="uuid-config"
  +usage="$usage [--help] [--version] [--all]"
  +usage="$usage [--prefix] [--exec-prefix] [--bindir] [--libdir] [--includedir] [--mandir] [--datadir] [--acdir]"
  +usage="$usage [--cflags] [--ldflags] [--libs]"
  +if [ $# -eq 0 ]; then
  +    echo "uuid-config:Error: Invalid option" 1>&2
  +    echo "uuid-config:Usage: $usage" 1>&2
  +    exit 1
  +fi
  +output=''
  +output_extra=''
  +all=no
  +prev=''
  +OIFS="$IFS" IFS="$DIFS"
  +for option
  +do
  +    if [ ".$prev" != . ]; then
  +        eval "$prev=\$option"
  +        prev=''
  +        continue
  +    fi
  +    case "$option" in
  +        -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
  +           *) optarg='' ;;
  +    esac
  +    case "$option" in
  +        --help|-h)
  +            echo "Usage: $usage"
  +            exit 0
  +            ;;
  +        --version|-v)
  +            echo "OSSP sa $uuid_version"
  +            exit 0
  +            ;;
  +        --all)
  +            all=yes
  +            ;;
  +        --prefix)
  +            output="$output $uuid_prefix"
  +            ;;
  +        --exec-prefix)
  +            output="$output $uuid_exec_prefix"
  +            ;;
  +        --bindir)
  +            output="$output $uuid_bindir"
  +            ;;
  +        --libdir)
  +            output="$output $uuid_libdir"
  +            ;;
  +        --includedir)
  +            output="$output $uuid_includedir"
  +            ;;
  +        --mandir)
  +            output="$output $uuid_mandir"
  +            ;;
  +        --datadir)
  +            output="$output $uuid_datadir"
  +            ;;
  +        --acdir)
  +            output="$output $uuid_acdir"
  +            ;;
  +        --cflags)
  +            output="$output -I$uuid_includedir"
  +            output_extra="$output_extra $uuid_cflags"
  +            ;;
  +        --ldflags)
  +            output="$output -L$uuid_libdir"
  +            output_extra="$output_extra $uuid_ldflags"
  +            ;;
  +        --libs)
  +            output="$output -luuid"
  +            output_extra="$output_extra $uuid_libs"
  +            ;;
  +        * )
  +            echo "uuid-config:Error: Invalid option" 1>&2
  +            echo "uuid-config:Usage: $usage" 1>&2
  +            exit 1;
  +            ;;
  +    esac
  +done
  +IFS="$OIFS"
  +if [ ".$prev" != . ]; then
  +    echo "uuid-config:Error: missing argument to --`echo $prev | sed 's/_/-/g'`" 1>&2
  +    exit 1
  +fi
  +if [ ".$output" != . ]; then
  +    if [ ".$all" = .yes ]; then
  +        output="$output $output_extra"
  +    fi
  +    echo $output
  +fi
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.ac
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid.ac
  --- /dev/null	2004-01-06 21:14:28.000000000 +0100
  +++ uuid.ac	2004-01-06 21:14:30.000000000 +0100
  @@ -0,0 +1,92 @@
  +dnl ##
  +dnl ##  OSSP uuid - Universally Unique Identifier
  +dnl ##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +dnl ##
  +dnl ##  This file is part of OSSP uuid, a library for the generation
  +dnl ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +dnl ##
  +dnl ##  Permission to use, copy, modify, and distribute this software for
  +dnl ##  any purpose with or without fee is hereby granted, provided that
  +dnl ##  the above copyright notice and this permission notice appear in all
  +dnl ##  copies.
  +dnl ##
  +dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +dnl ##  SUCH DAMAGE.
  +dnl ##
  +dnl ##  uuid.ac: UUID specific Autoconf checks
  +dnl ##
  +
  +dnl #   Check for an ANSI C typedef in a header
  +dnl #   configure.in:
  +dnl #     SA_CHECK_TYPEDEF(<typedef>, <header>)
  +dnl #   acconfig.h:
  +dnl #     #undef HAVE_<typedef>
  +
  +AC_DEFUN(SA_CHECK_TYPEDEF,[dnl
  +    AC_REQUIRE([AC_HEADER_STDC])dnl
  +    AC_MSG_CHECKING(for typedef $1)
  +    AC_CACHE_VAL(ac_cv_typedef_$1,[
  +        AC_EGREP_CPP(dnl
  +changequote(<<,>>)dnl
  +<<(^|[^a-zA-Z_0-9])$1[^a-zA-Z_0-9]>>dnl
  +changequote([,]), [
  +#include <$2>],
  +            ac_cv_typedef_$1=yes,
  +            ac_cv_typedef_$1=no
  +        )
  +    ])dnl
  +    AC_MSG_RESULT($ac_cv_typedef_$1)
  +    if test $ac_cv_typedef_$1 = yes; then
  +        AC_DEFINE(HAVE_[]translit($1, [a-z], [A-Z]), 1, [Define to 1 if $1 exists])
  +    fi
  +])
  +
  +dnl #   Check for anything OSSP uuid wants to know
  +dnl #   configure.in:
  +dnl #     UUID_CHECK_ALL
  +
  +AC_DEFUN(UUID_CHECK_ALL,[
  +    dnl #   make sure libnsl and libsocket are linked in if they exist
  +    AC_CHECK_LIB(nsl, gethostname)
  +    if test ".`echo $LIBS | grep nsl`" = .; then
  +        AC_CHECK_LIB(nsl, gethostbyname)
  +    fi
  +    AC_CHECK_LIB(socket, accept)
  +
  +    dnl #   make sure some platforms find their IPv6 library
  +    AC_CHECK_LIB(inet6, getaddrinfo)
  +
  +    dnl #   check for system headers
  +    AC_CHECK_HEADERS(string.h sys/types.h sys/socket.h netdb.h netinet/in.h)
  +
  +    dnl #   check for system functions
  +    AC_CHECK_FUNCS(getaddrinfo)
  +
  +    dnl #   check size of built-in types
  +    AC_CHECK_SIZEOF(char, 1)
  +    AC_CHECK_SIZEOF(unsigned char, 1)
  +    AC_CHECK_SIZEOF(short, 2)
  +    AC_CHECK_SIZEOF(unsigned short, 2)
  +    AC_CHECK_SIZEOF(int, 4)
  +    AC_CHECK_SIZEOF(unsigned int, 4)
  +    AC_CHECK_SIZEOF(long, 4)
  +    AC_CHECK_SIZEOF(unsigned long, 4)
  +    AC_CHECK_SIZEOF(long long, 8)
  +    AC_CHECK_SIZEOF(unsigned long long, 8)
  +
  +    dnl #   check for network/socket size type
  +    SA_CHECK_TYPEDEF(socklen_t, sys/socket.h)
  +    SA_CHECK_TYPEDEF(ssize_t, sys/types.h)
  +])
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid.c
  --- /dev/null	2004-01-06 21:14:28.000000000 +0100
  +++ uuid.c	2004-01-06 21:14:30.000000000 +0100
  @@ -0,0 +1,211 @@
  +/*
  +**  OSSP uuid - Universally Unique Identifier
  +**  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +**
  +**  This file is part of OSSP uuid, a library for the generation
  +**  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  uuid.c: library API implementation
  +*/
  +
  +#include <stdio.h>
  +#include <stdlib.h>
  +#include <string.h>
  +#include <unistd.h>
  +
  +#include "config.h"
  +#include "uuid.h"
  +
  +/* determine types of 8-bit size */
  +#if SIZEOF_CHAR == 1
  +typedef char uuid_int8_t;
  +#else
  +#error uexpected: sizeof(char) != 1 !?
  +#endif
  +#if SIZEOF_UNSIGNED_CHAR == 1
  +typedef unsigned char uuid_uint8_t;
  +#else
  +#error uexpected: sizeof(unsigned char) != 1 !?
  +#endif
  +
  +/* determine types of 16-bit size */
  +#if SIZEOF_SHORT == 2
  +typedef short uuid_int16_t;
  +#elif SIZEOF_INT == 2
  +typedef int uuid_int16_t;
  +#elif SIZEOF_LONG == 2
  +typedef long uuid_int16_t;
  +#else
  +#error unexpected: no type found for uuid_int16_t
  +#endif
  +#if SIZEOF_UNSIGNED_SHORT == 2
  +typedef unsigned short uuid_uint16_t;
  +#elif SIZEOF_UNSIGNED_INT == 2
  +typedef unsigned int uuid_uint16_t;
  +#elif SIZEOF_UNSIGNED_LONG == 2
  +typedef unsigned long uuid_uint16_t;
  +#else
  +#error unexpected: no type found for uuid_uint16_t
  +#endif
  +
  +/* determine types of 32-bit size */
  +#if SIZEOF_SHORT == 4
  +typedef short uuid_int32_t;
  +#elif SIZEOF_INT == 4
  +typedef int uuid_int32_t;
  +#elif SIZEOF_LONG == 4
  +typedef long uuid_int32_t;
  +#elif SIZEOF_LONG_LONG == 4
  +typedef long long uuid_int32_t;
  +#else
  +#error unexpected: no type found for uuid_int32_t
  +#endif
  +#if SIZEOF_UNSIGNED_SHORT == 4
  +typedef unsigned short uuid_uint32_t;
  +#elif SIZEOF_UNSIGNED_INT == 4
  +typedef unsigned int uuid_uint32_t;
  +#elif SIZEOF_UNSIGNED_LONG == 4
  +typedef unsigned long uuid_uint32_t;
  +#elif SIZEOF_UNSIGNED_LONG_LONG == 4
  +typedef unsigned long long uuid_uint32_t;
  +#else
  +#error unexpected: no type found for uuid_uint32_t
  +#endif
  +
  +/* private data type declaration */
  +struct uuid_st {
  +    uuid_uint32_t   time_low;
  +    uuid_uint16_t   time_mid;
  +    uuid_uint16_t   time_hi_and_version;
  +    uuid_uint8_t    clock_seq_hi_and_reserved;
  +    uuid_uint8_t    clock_seq_low;
  +    uuid_uint8_t    node[6];
  +};
  +
  +uuid_rc_t uuid_create(uuid_t **uuid)
  +{
  +    if (uuid == NULL)
  +        return UUID_RC_ARG;
  +    if ((*uuid = (uuid_t *)malloc(sizeof(uuid_t))) == NULL)
  +        return UUID_RC_MEM;
  +    uuid_null(*uuid);
  +    return UUID_RC_OK;
  +}
  +
  +uuid_rc_t uuid_destroy(uuid_t *uuid)
  +{
  +    if (uuid == NULL)
  +        return UUID_RC_ARG;
  +    free(uuid);
  +    return UUID_RC_OK;
  +}
  +
  +uuid_rc_t uuid_null(uuid_t *uuid)
  +{
  +    if (uuid == NULL)
  +        return UUID_RC_ARG;
  +    memset(uuid, '\0', sizeof(uuid_t));
  +    return UUID_RC_OK;
  +}
  +
  +uuid_rc_t uuid_generate(uuid_t *uuid)
  +{
  +    if (uuid == NULL)
  +        return UUID_RC_ARG;
  +    /* FIXME */
  +    return UUID_RC_OK;
  +}
  +
  +uuid_rc_t uuid_compare(uuid_t *uuid, uuid_t *uuid2, int *result)
  +{
  +    if (uuid == NULL || uuid2 == NULL || result == NULL)
  +        return UUID_RC_ARG;
  +    /* FIXME */
  +    return UUID_RC_OK;
  +}
  +
  +uuid_rc_t uuid_isnull(uuid_t *uuid, int *result)
  +{
  +    if (uuid == NULL || result == NULL)
  +        return UUID_RC_ARG;
  +    *result = 0;
  +    if (   uuid->time_low == 0
  +        && uuid->time_mid == 0
  +        && uuid->time_hi_and_version == 0
  +        && uuid->clock_seq_hi_and_reserved == 0
  +        && uuid->clock_seq_low == 0
  +        && uuid->node[0] == 0
  +        && uuid->node[1] == 0
  +        && uuid->node[2] == 0
  +        && uuid->node[3] == 0
  +        && uuid->node[4] == 0
  +        && uuid->node[5] == 0)
  +        *result = 1;
  +    return UUID_RC_OK;
  +}
  +
  +uuid_rc_t uuid_parse(uuid_t *uuid, const char *str)
  +{
  +    if (uuid == NULL)
  +        return UUID_RC_ARG;
  +    /* FIXME */
  +    return UUID_RC_OK;
  +}
  +
  +uuid_rc_t uuid_format(uuid_t *uuid, char **str)
  +{
  +    if (uuid == NULL || str == NULL)
  +        return UUID_RC_ARG;
  +    /* FIXME */
  +    return UUID_RC_OK;
  +}
  +
  +uuid_rc_t uuid_read(uuid_t *uuid, const void *buf)
  +{
  +    if (uuid == NULL)
  +        return UUID_RC_ARG;
  +    /* FIXME */
  +    return UUID_RC_OK;
  +}
  +
  +uuid_rc_t uuid_write(uuid_t *uuid, void **buf)
  +{
  +    if (uuid == NULL || buf == NULL)
  +        return UUID_RC_ARG;
  +    /* FIXME */
  +    return UUID_RC_OK;
  +}
  +
  +char *uuid_error(uuid_rc_t rc)
  +{
  +    char *str;
  +
  +    switch (rc) {
  +        case UUID_RC_OK:  str = "everything ok";    break;
  +        case UUID_RC_ARG: str = "invalid argument"; break;
  +        case UUID_RC_MEM: str = "out of memory";    break;
  +        case UUID_RC_SYS: str = "system error";     break;
  +        default:          str = NULL;               break;
  +    }
  +    return str;
  +}
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.h
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid.h
  --- /dev/null	2004-01-06 21:14:28.000000000 +0100
  +++ uuid.h	2004-01-06 21:14:30.000000000 +0100
  @@ -0,0 +1,112 @@
  +/*
  +**  OSSP uuid - Universally Unique Identifier
  +**  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +**
  +**  This file is part of OSSP uuid, a library for the generation
  +**  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  uuid.h: library API definition
  +*/
  +
  +#ifndef __UUID_H__
  +#define __UUID_H__
  +
  +/*
  + *  UUID Binary Representation:
  + *
  + *  0                   1                   2                   3
  + *   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  + *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  + * 0|                          time_low                             |
  + *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  + * 1|       time_mid                |         time_hi_and_version   |
  + *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  + * 2|clk_seq_hi_res |  clk_seq_low  |         node (0-1)            |
  + *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  + * 3|                         node (2-5)                            |
  + *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  + *
  + *  UUID ASCII String Representation:
  + *
  + *  uuid                   = <time_low> "-" <time_mid> "-"
  + *                           <time_high_and_version> "-"
  + *                           <clock_seq_and_reserved>
  + *                           <clock_seq_low> "-" <node>
  + *  time_low               = 4*<hexOctet>
  + *  time_mid               = 2*<hexOctet>
  + *  time_high_and_version  = 2*<hexOctet>
  + *  clock_seq_and_reserved = <hexOctet>
  + *  clock_seq_low          = <hexOctet>
  + *  node                   = 6*<hexOctet>
  + *  hexOctet               = <hexDigit> <hexDigit>
  + *  hexDigit =               "0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9"
  + *                          |"a"|"b"|"c"|"d"|"e"|"f"
  + *                          |"A"|"B"|"C"|"D"|"E"|"F"
  + *
  + *  Example string representation of a UUID:
  + *
  + *  "f81d4fae-7dec-11d0-a765-00a0c91e6bf6"
  + */
  +
  +/* encoding lengths */
  +#define UUID_LEN_BIN_BIT 128
  +#define UUID_LEN_BIN_CHR (UUID_LEN_BIN_BIT / 8 /*bytes*/)
  +#define UUID_LEN_STR_CHR (UUID_LEN_BIN_BIT / 4 /*nibbles*/ + 4 /*hyphens*/ + 1 /*nul*/)
  +#define UUID_LEN_STR_BIT (UUID_LEN_STR_CHR * 8)
  +
  +/* return codes */
  +typedef enum {
  +    UUID_RC_OK  = 0,
  +    UUID_RC_ARG = 1,
  +    UUID_RC_MEM = 2,
  +    UUID_RC_SYS = 3
  +} uuid_rc_t;
  +
  +/* abstract data type */
  +struct uuid_st;
  +typedef struct uuid_st uuid_t;
  +
  +/* object handling */
  +extern uuid_rc_t  uuid_create   (uuid_t **uuid);
  +extern uuid_rc_t  uuid_destroy  (uuid_t  *uuid);
  +extern uuid_rc_t  uuid_null     (uuid_t  *uuid);
  +
  +/* UUID comparison */
  +extern uuid_rc_t  uuid_compare  (uuid_t  *uuid, uuid_t *uuid2, int *result);
  +extern uuid_rc_t  uuid_isnull   (uuid_t  *uuid,                int *result);
  +
  +/* UUID generation */
  +extern uuid_rc_t  uuid_generate (uuid_t  *uuid);
  +
  +/* string representation handling */
  +extern uuid_rc_t  uuid_parse    (uuid_t  *uuid, const char  *str);
  +extern uuid_rc_t  uuid_format   (uuid_t  *uuid,       char **str);
  +
  +/* binary representation handling */
  +extern uuid_rc_t  uuid_read     (uuid_t  *uuid, const void  *buf);
  +extern uuid_rc_t  uuid_write    (uuid_t  *uuid,       void **buf);
  +
  +/* error handling */
  +extern char      *uuid_error    (uuid_rc_t rc);
  +
  +#endif /* __UUID_H__ */
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuidtool.c
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuidtool.c
  --- /dev/null	2004-01-06 21:14:28.000000000 +0100
  +++ uuidtool.c	2004-01-06 21:14:30.000000000 +0100
  @@ -0,0 +1,165 @@
  +/*
  +**  OSSP uuid - Universally Unique Identifier
  +**  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +**
  +**  This file is part of OSSP uuid, a library for the generation
  +**  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  uuidtool.c: command line tool
  +*/
  +
  +#include <stdio.h>
  +#include <stdlib.h>
  +#include <stdarg.h>
  +#include <unistd.h>
  +#include <string.h>
  +#include <errno.h>
  +
  +#include "uuid.h"
  +
  +/* error handler */
  +static void
  +error(int ec, const char *str, ...)
  +{
  +    va_list ap;
  +
  +    va_start(ap, str);
  +    fprintf(stderr, "uuidtool:ERROR: ");
  +    vfprintf(stderr, str, ap);
  +    fprintf(stderr, "\n");
  +    va_end(ap);
  +    exit(ec);
  +}
  +
  +/* usage handler */
  +static void
  +usage(void)
  +{
  +    fprintf(stderr, "usage: uuidtool [-1] [-n count] [-a] [-d] [-o filename] [UUID]\n");
  +    exit(1);
  +}
  +
  +/* main procedure */
  +int main(int argc, char *argv[])
  +{
  +    uuid_t *uuid;
  +    uuid_rc_t rc;
  +    FILE *fp;
  +    char *p;
  +    int ch;
  +    int count;
  +    int i;
  +    int iterate;
  +    int ascii;
  +    int decode;
  +    char *cp;
  +    void *vp;
  +
  +    /* command line parsing */
  +    count = -1;     /* no count yet */
  +    fp = stdout;    /* default output file */
  +    iterate = 0;    /* not one at a time */
  +    ascii = 0;      /* default is binary output */
  +    decode = 0;     /* default is to encode */
  +    while ((ch = getopt(argc, argv, "1n:ado:")) != -1) {
  +        switch (ch) {
  +            case '1':
  +                iterate = 1;
  +                break;
  +            case 'n':
  +                if (count > 0)
  +                    usage();
  +                count = strtol(optarg, &p, 10);
  +                if (*p != 0 || count < 1)
  +                    usage();
  +                break;
  +            case 'a':
  +                ascii = 1;
  +                break;
  +            case 'd':
  +                decode = 1;
  +                break;
  +            case 'o':
  +                if (fp != stdout)
  +                    error(1, "multiple output files are not allowed");
  +                if ((fp = fopen(optarg, "w")) == NULL)
  +                    error(1, "fopen: %s", strerror(errno));
  +                break;
  +            default:
  +                usage();
  +        }
  +    }
  +    argv += optind;
  +    argc -= optind;
  +    if (count == -1)
  +        count = 1;
  +
  +    if (decode) {
  +        /* decoding */
  +        if (argc != 1)
  +            usage();
  +        /* FIXME */
  +    }
  +    else {
  +        /* encoding */
  +        if (argc < 0 || argc > 1)
  +            usage();
  +        if ((rc = uuid_create(&uuid)) != UUID_RC_OK)
  +            error(1, "uuid_create: %s", uuid_error(rc));
  +        if (argc == 1) {
  +            /* load initial UUID for setting old generator state */
  +            if ((rc = uuid_parse(uuid, argv[0])) != UUID_RC_OK)
  +                error(1, "uuid_parse: %s", uuid_error(rc));
  +        }
  +        for (i = 0; i < count; i++) {
  +            if (iterate) {
  +                if ((rc = uuid_null(uuid)) != UUID_RC_OK)
  +                    error(1, "uuid_null: %s", uuid_error(rc));
  +            }
  +            if ((rc = uuid_generate(uuid)) != UUID_RC_OK)
  +                error(1, "uuid_generate: %s", uuid_error(rc));
  +            if (ascii) {
  +                cp = NULL;
  +                if ((rc = uuid_format(uuid, &cp)) != UUID_RC_OK)
  +                    error(1, "uuid_format: %s", uuid_error(rc));
  +                fprintf(fp, "%s\n", cp);
  +                free(cp);
  +            }
  +            else {
  +                vp = NULL;
  +                if ((rc = uuid_write(uuid, &vp)) != UUID_RC_OK)
  +                    error(1, "uuid_format: %s", uuid_error(rc));
  +                fwrite(vp, UUID_LEN_BIN_CHR, 1, fp);
  +                free(vp);
  +            }
  +        }
  +        if ((rc = uuid_destroy(uuid)) != UUID_RC_OK)
  +            error(1, "uuid_destroy: %s", uuid_error(rc));
  +    }
  +
  +    /* close output channel */
  +    if (fp != stdout)
  +        fclose(fp);
  +
  +    return 0;
  +}
  +
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jan  6 21:20:13 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A3A8E774A8; Tue,  6 Jan 2004 21:20:13 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ Makefile.in uuid.pod uuidtool.pod
Message-Id: <20040106202013.A3A8E774A8@mail.ossp.org>
Date: Tue,  6 Jan 2004 21:20:13 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Jan-2004 21:20:13
  Branch: HEAD                             Handle: 2004010620201200

  Added files:
    ossp-pkg/uuid           uuid.pod uuidtool.pod
  Modified files:
    ossp-pkg/uuid           Makefile.in

  Log:
    add manual page frameworks

  Summary:
    Revision    Changes     Path
    1.2         +17 -1      ossp-pkg/uuid/Makefile.in
    1.1         +135 -0     ossp-pkg/uuid/uuid.pod
    1.1         +53 -0      ossp-pkg/uuid/uuidtool.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	6 Jan 2004 20:14:28 -0000	1.1
  +++ ossp-pkg/uuid/Makefile.in	6 Jan 2004 20:20:12 -0000	1.2
  @@ -55,6 +55,8 @@
   PRG_NAME    = uuidtool
   PRG_OBJS    = uuidtool.o
   
  +MAN_NAME    = uuid.3 uuidtool.1
  +
   .SUFFIXES:
   .SUFFIXES: .c .o .lo
   
  @@ -83,6 +85,16 @@
   	           --release="$$D" --date="OSSP uuid $$V1" uuid.pod | \
   	sed -e "s;UUID_VERSION_STR;$$V2;" >uuid.3
   
  +man: uuidtool.1
  +uuidtool.1: uuidtool.pod
  +	V1=`$(SHTOOL) version -l txt -d short VERSION`; \
  +	V2=`$(SHTOOL) version -l txt -d long VERSION`; \
  +	D=`$(SHTOOL) version -l txt -d long VERSION | sed -e 's;.*(;;' -e 's;).*;;'`; \
  +	$(POD2MAN) --quotes=none \
  +	           --section=1 --center="Universally Unique Identifiers" \
  +	           --release="$$D" --date="OSSP uuid $$V1" uuid.pod | \
  +	sed -e "s;UUID_VERSION_STR;$$V2;" >uuidtool.1
  +
   check: $(PRG_NAME)
   	@$(LIBTOOL) --mode=execute ./$(PRG_NAME) -n 16
   
  @@ -96,8 +108,12 @@
   	$(SHTOOL) install -c -m 644 uuid.h $(DESTDIR)$(includedir)/
   	$(SHTOOL) install -c -m 644 uuid.3 $(DESTDIR)$(mandir)/man3/
   	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libuuid.la $(DESTDIR)$(libdir)/
  +	$(SHTOOL) install -c -s -m 755 uuidtool $(DESTDIR)$(bindir)/
  +	$(SHTOOL) install -c -m 644 uuidtool.1 $(DESTDIR)$(mandir)/man1/
   
   uninstall:
  +	-$(RM) $(DESTDIR)$(mandir)/man1/uuidtool.1
  +	-$(RM) $(DESTDIR)$(bindir)/uuidtool
   	@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libuuid.la
   	-$(RM) $(DESTDIR)$(mandir)/man3/uuid.3
   	-$(RM) $(DESTDIR)$(includedir)/uuid.h
  @@ -121,7 +137,7 @@
   	-$(RM) libtool
   
   realclean: distclean
  -	-$(RM) uuid.3
  +	-$(RM) uuid.3 uuidtool.1
   	-$(RM) configure config.h.in
   	-$(RM) shtool
   	-$(RM) ltmain.sh libtool.m4 config.guess config.sub
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid.pod
  --- /dev/null	2004-01-06 21:20:13.000000000 +0100
  +++ uuid.pod	2004-01-06 21:20:13.000000000 +0100
  @@ -0,0 +1,135 @@
  +##
  +##  OSSP uuid - Universally Unique Identifier
  +##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP uuid, a library for the generation
  +##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  uuid.pod: manual page
  +##
  +
  +=pod
  +
  +=head1 NAME
  +
  +B<OSSP uuid> - B<Universally Unique Identifier>
  +
  +=head1 SYNOPSIS
  +
  +...FIXME...
  +
  +=head1 DESCRIPTION
  +
  +=head2 Overview
  +
  +B<UUID> stands for B<U>niversal B<U>nique B<ID>entifier (aka B<GUID>
  +which stands for B<G>lobally B<U>nique B<ID>entifier). B<UUID>s are 128
  +bit numbers assigned to any object and which are intended to have a high
  +likelihood of uniqueness over space and time and are computationally
  +difficult to guess.
  +
  +A B<UUID> is usually encoded using the ASCII character string
  +representation described in ISO/IEC 11578:1996: a string
  +consisting of 8 hexadecimal digits followed by a hyphen,
  +then three groups of 4 hexadecimal digits each followed by a
  +hyphen, then 12 hexadecimal digits. An example of a B<UUID> is
  +"C<54531d28-402b-11d8-af12-0002a5094c23>".
  +
  +=head2 Uniqueness
  +
  +The mechanism used to guarantee that B<UUID>s are unique is
  +through combinations of hardware addresses, time stamps and random
  +seeds.
  +
  +There is a reference in the B<UUID> to the hardware (MAC) address of
  +the first network interface card (NIC) on the host which generated the
  +B<UUID> -- this reference is intended to ensure the B<UUID> will be
  +unique in space as the MAC address of every network card is assigned by
  +a single global authority (IEEE) and is guaranteed to be unique.
  +
  +The next component in a B<UUID> is a timestamp which, as clock always
  +(should) move forward, will be unique in time.
  +
  +Just in case some part of the above goes wrong (the hardware address
  +cannot be determined or the clock moved a step backward), there is
  +a random component placed into the B<UUID> as a "catch-all" for
  +uniqueness.
  +
  +=head1 APPLICATION PROGRAMMING INTERFACE
  +
  +...FIXME...
  +
  +=head1 SEE ALSO
  +
  +See the following are references to more B<UUID> documentation and specifications:
  +
  +=over 4
  +
  +=item 
  +
  +B<UUIDs and GUIDs>,
  +IETF Internet Draft (expired),
  +Paul J. Leach, Rich Salz,
  +February 1998, 27 pages,
  +http://www.opengroup.org/dce/info/draft-leach-uuids-guids-01.txt
  +
  +=item 
  +
  +B<DCE 1.1: Remote Procedure Call>,
  +appendix B<Universally Unique Identifier>,
  +Open Group Technical Standard
  +Document Number C706, August 1997, 737 pages,
  +(supercedes C309 DCE: Remote Procedure Call 8/1994,
  +which was basis for ISO/IEC 11578:1996 specification),
  +http://www.opengroup.org/publications/catalog/c706.htm 
  +
  +=item 
  +
  +B<Information technology -- Open Systems Interconnection (OSI) -- Remote Procedure Call (RPC)>,
  +ISO/IEC 11578:1996,
  +August 2001, 570 pages, (CHF 340,00),
  +http://www.iso.ch/cate/d2229.html
  +
  +=item 
  +
  +B<HTTP Extensions for Distributed Authoring (WebDAV)>,
  +section B<6.4.1 Node Field Generation Without the IEEE 802 Address>,
  +IETF RFC 2518,
  +February 1999, 94 pages,
  +http://www.ietf.org/rfc/rfc2518.txt
  +
  +=item
  +
  +B<A UUID URN Namespace>,
  +P. Leach, M. Mealling, R. Salz,
  +IETF Internet Draft draft-mealling-uuid-urn-01,
  +October 2003, 31 pages,
  +http://www.ietf.org/internet-drafts/draft-mealling-uuid-urn-01.txt
  +
  +=item
  +
  +B<DCE 1.1 compliant UUID functions>,
  +FreeBSD manual pages uuid(3) and uuidgen(2),
  +http://www.freebsd.org/cgi/man.cgi?query=uuid&manpath=FreeBSD+5.2-RELEASE
  +
  +=cut
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuidtool.pod
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuidtool.pod
  --- /dev/null	2004-01-06 21:20:13.000000000 +0100
  +++ uuidtool.pod	2004-01-06 21:20:13.000000000 +0100
  @@ -0,0 +1,53 @@
  +##
  +##  OSSP uuid - Universally Unique Identifier
  +##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP uuid, a library for the generation
  +##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  uuidtool.pod: manual page
  +##
  +
  +=pod
  +
  +=head1 NAME
  +
  +B<OSSP uuidtool> - B<Universally Unique Identifier Command-Line Tool>
  +
  +=head1 SYNOPSIS
  +
  +...FIXME...
  +
  +=head1 DESCRIPTION
  +
  +...FIXME...
  +
  +=head1 OPTIONS
  +
  +...FIXME...
  +
  +=head1 SEE ALSO
  +
  +uuid(3).
  +
  +=cut
  +
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jan  6 21:27:00 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C5A15774A8; Tue,  6 Jan 2004 21:26:59 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ .cvsignore
Message-Id: <20040106202659.C5A15774A8@mail.ossp.org>
Date: Tue,  6 Jan 2004 21:26:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Jan-2004 21:26:59
  Branch: HEAD                             Handle: 2004010620265900

  Added files:
    ossp-pkg/uuid           .cvsignore

  Log:
    ignore generated files

  Summary:
    Revision    Changes     Path
    1.1         +13 -0      ossp-pkg/uuid/.cvsignore
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/.cvsignore
  ============================================================================
  $ cvs diff -u -r0 -r1.1 .cvsignore
  --- /dev/null	2004-01-06 21:26:59.000000000 +0100
  +++ .cvsignore	2004-01-06 21:26:59.000000000 +0100
  @@ -0,0 +1,13 @@
  +Makefile
  +config.guess
  +config.h
  +config.h.in
  +config.sub
  +configure
  +libtool.m4
  +ltmain.sh
  +shtool
  +uuid-config
  +uuid.3
  +uuidtool
  +uuidtool.1
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jan  6 21:29:52 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 166CD774A8; Tue,  6 Jan 2004 21:29:52 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.h uuidtool.c
Message-Id: <20040106202952.166CD774A8@mail.ossp.org>
Date: Tue,  6 Jan 2004 21:29:52 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Jan-2004 21:29:51
  Branch: HEAD                             Handle: 2004010620295100

  Modified files:
    ossp-pkg/uuid           uuid.h uuidtool.c

  Log:
    simplify API

  Summary:
    Revision    Changes     Path
    1.2         +3  -5      ossp-pkg/uuid/uuid.h
    1.2         +1  -1      ossp-pkg/uuid/uuidtool.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.h
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid.h
  --- ossp-pkg/uuid/uuid.h	6 Jan 2004 20:14:28 -0000	1.1
  +++ ossp-pkg/uuid/uuid.h	6 Jan 2004 20:29:51 -0000	1.2
  @@ -67,11 +67,9 @@
    *  "f81d4fae-7dec-11d0-a765-00a0c91e6bf6"
    */
   
  -/* encoding lengths */
  -#define UUID_LEN_BIN_BIT 128
  -#define UUID_LEN_BIN_CHR (UUID_LEN_BIN_BIT / 8 /*bytes*/)
  -#define UUID_LEN_STR_CHR (UUID_LEN_BIN_BIT / 4 /*nibbles*/ + 4 /*hyphens*/ + 1 /*nul*/)
  -#define UUID_LEN_STR_BIT (UUID_LEN_STR_CHR * 8)
  +/* encoding octet stream lengths */
  +#define UUID_LEN_BIN (128 / 8 /*bytes*/)
  +#define UUID_LEN_STR (128 / 4 /*nibbles*/ + 4 /*hyphens*/ + 1 /*nul*/)
   
   /* return codes */
   typedef enum {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuidtool.c
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuidtool.c
  --- ossp-pkg/uuid/uuidtool.c	6 Jan 2004 20:14:28 -0000	1.1
  +++ ossp-pkg/uuid/uuidtool.c	6 Jan 2004 20:29:51 -0000	1.2
  @@ -148,7 +148,7 @@
                   vp = NULL;
                   if ((rc = uuid_write(uuid, &vp)) != UUID_RC_OK)
                       error(1, "uuid_format: %s", uuid_error(rc));
  -                fwrite(vp, UUID_LEN_BIN_CHR, 1, fp);
  +                fwrite(vp, UUID_LEN_BIN, 1, fp);
                   free(vp);
               }
           }
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jan  6 21:43:35 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7F401774A8; Tue,  6 Jan 2004 21:43:35 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.c
Message-Id: <20040106204335.7F401774A8@mail.ossp.org>
Date: Tue,  6 Jan 2004 21:43:35 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Jan-2004 21:43:35
  Branch: HEAD                             Handle: 2004010620433400

  Modified files:
    ossp-pkg/uuid           uuid.c

  Log:
    implement uuid_compare function

  Summary:
    Revision    Changes     Path
    1.2         +51 -3      ossp-pkg/uuid/uuid.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid.c
  --- ossp-pkg/uuid/uuid.c	6 Jan 2004 20:14:28 -0000	1.1
  +++ ossp-pkg/uuid/uuid.c	6 Jan 2004 20:43:34 -0000	1.2
  @@ -135,11 +135,59 @@
       return UUID_RC_OK;
   }
   
  -uuid_rc_t uuid_compare(uuid_t *uuid, uuid_t *uuid2, int *result)
  +uuid_rc_t uuid_compare(uuid_t *a, uuid_t *b, int *result)
   {
  -    if (uuid == NULL || uuid2 == NULL || result == NULL)
  +    int r;
  +
  +    if (result == NULL)
           return UUID_RC_ARG;
  -    /* FIXME */
  +
  +    /* deal with NULL or equal pointers. */
  +    if (a == b) {
  +        *result = 0;
  +        return UUID_RC_OK;
  +    }
  +    if (a == NULL && b == NULL) {
  +        *result = 0;
  +        return UUID_RC_OK;
  +    }
  +    if (a == NULL) {
  +        *result = ((uuid_isnull(b, &r), r) ? 0 : -1);
  +        return UUID_RC_OK;
  +    }
  +    if (b == NULL) {
  +        *result = ((uuid_isnull(a, &r), r) ? 0 : 1);
  +        return UUID_RC_OK;
  +    }
  +
  +    /* we have to compare the hard way. */
  +    if (a->time_low != b->time_low) {
  +        *result = ((a->time_low < b->time_low) ? -1 : 1);
  +        return UUID_RC_OK;
  +    }
  +    if ((r = (int)a->time_mid - (int)b->time_mid) != 0) {
  +        *result = ((r < 0) ? -1 : 1);
  +        return UUID_RC_OK;
  +    }
  +    if ((r = (int)a->time_hi_and_version - (int)b->time_hi_and_version) != 0) {
  +        *result = ((r < 0) ? -1 : 1);
  +        return UUID_RC_OK;
  +    }
  +    if ((r = (int)a->clock_seq_hi_and_reserved - (int)b->clock_seq_hi_and_reserved) != 0) {
  +        *result = ((r < 0) ? -1 : 1);
  +        return UUID_RC_OK;
  +    }
  +    if ((r = (int)a->clock_seq_low - (int)b->clock_seq_low) != 0) {
  +        *result = ((r < 0) ? -1 : 1);
  +        return UUID_RC_OK;
  +    }
  +    if ((r = memcmp(a->node, b->node, sizeof(a->node))) != 0) {
  +        *result = ((r < 0) ? -1 : 1);
  +        return UUID_RC_OK;
  +    }
  +
  +    /* else the keys are equal */
  +    *result = 0;
       return UUID_RC_OK;
   }
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan  8 22:31:48 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6F0E6774B3; Thu,  8 Jan 2004 22:31:48 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.c uuid.h uuidtool.c
Message-Id: <20040108213148.6F0E6774B3@mail.ossp.org>
Date: Thu,  8 Jan 2004 22:31:48 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Jan-2004 22:31:48
  Branch: HEAD                             Handle: 2004010821314700

  Modified files:
    ossp-pkg/uuid           uuid.c uuid.h uuidtool.c

  Log:
    introduce UUID versioning into API

  Summary:
    Revision    Changes     Path
    1.3         +14 -1      ossp-pkg/uuid/uuid.c
    1.3         +12 -1      ossp-pkg/uuid/uuid.h
    1.3         +38 -10     ossp-pkg/uuid/uuidtool.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid.c
  --- ossp-pkg/uuid/uuid.c	6 Jan 2004 20:43:34 -0000	1.2
  +++ ossp-pkg/uuid/uuid.c	8 Jan 2004 21:31:47 -0000	1.3
  @@ -29,6 +29,7 @@
   
   #include <stdio.h>
   #include <stdlib.h>
  +#include <stdarg.h>
   #include <string.h>
   #include <unistd.h>
   
  @@ -127,11 +128,15 @@
       return UUID_RC_OK;
   }
   
  -uuid_rc_t uuid_generate(uuid_t *uuid)
  +uuid_rc_t uuid_generate(uuid_t *uuid, unsigned int mode, ...)
   {
  +    va_list ap;
  +
       if (uuid == NULL)
           return UUID_RC_ARG;
  +    va_start(ap, mode);
       /* FIXME */
  +    va_end(ap);
       return UUID_RC_OK;
   }
   
  @@ -238,6 +243,14 @@
   uuid_rc_t uuid_write(uuid_t *uuid, void **buf)
   {
       if (uuid == NULL || buf == NULL)
  +        return UUID_RC_ARG;
  +    /* FIXME */
  +    return UUID_RC_OK;
  +}
  +
  +uuid_rc_t uuid_dump(uuid_t *uuid, char **str)
  +{
  +    if (uuid == NULL || str == NULL)
           return UUID_RC_ARG;
       /* FIXME */
       return UUID_RC_OK;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.h
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid.h
  --- ossp-pkg/uuid/uuid.h	6 Jan 2004 20:29:51 -0000	1.2
  +++ ossp-pkg/uuid/uuid.h	8 Jan 2004 21:31:47 -0000	1.3
  @@ -79,6 +79,14 @@
       UUID_RC_SYS = 3
   } uuid_rc_t;
   
  +/* generation mode flags */
  +enum {
  +    UUID_VERSION1      = (1 << 0),
  +    UUID_VERSION3      = (1 << 1),
  +    UUID_VERSION4      = (1 << 2),
  +    UUID_MCASTRND      = (1 << 3)
  +};
  +
   /* abstract data type */
   struct uuid_st;
   typedef struct uuid_st uuid_t;
  @@ -93,7 +101,7 @@
   extern uuid_rc_t  uuid_isnull   (uuid_t  *uuid,                int *result);
   
   /* UUID generation */
  -extern uuid_rc_t  uuid_generate (uuid_t  *uuid);
  +extern uuid_rc_t  uuid_generate (uuid_t  *uuid, unsigned int mode, ...);
   
   /* string representation handling */
   extern uuid_rc_t  uuid_parse    (uuid_t  *uuid, const char  *str);
  @@ -102,6 +110,9 @@
   /* binary representation handling */
   extern uuid_rc_t  uuid_read     (uuid_t  *uuid, const void  *buf);
   extern uuid_rc_t  uuid_write    (uuid_t  *uuid,       void **buf);
  +
  +/* UUID dumping */
  +extern uuid_rc_t  uuid_dump     (uuid_t  *uuid, char **str);
   
   /* error handling */
   extern char      *uuid_error    (uuid_rc_t rc);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuidtool.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuidtool.c
  --- ossp-pkg/uuid/uuidtool.c	6 Jan 2004 20:29:51 -0000	1.2
  +++ ossp-pkg/uuid/uuidtool.c	8 Jan 2004 21:31:47 -0000	1.3
  @@ -52,9 +52,18 @@
   
   /* usage handler */
   static void
  -usage(void)
  +usage(const char *str, ...)
   {
  +    va_list ap;
  +
  +    va_start(ap, str);
  +    if (str != NULL) {
  +        fprintf(stderr, "uuidtool:ERROR: ");
  +        vfprintf(stderr, str, ap);
  +        fprintf(stderr, "\n");
  +    }
       fprintf(stderr, "usage: uuidtool [-1] [-n count] [-a] [-d] [-o filename] [UUID]\n");
  +    va_end(ap);
       exit(1);
   }
   
  @@ -73,6 +82,7 @@
       int decode;
       char *cp;
       void *vp;
  +    unsigned int version;
   
       /* command line parsing */
       count = -1;     /* no count yet */
  @@ -80,17 +90,18 @@
       iterate = 0;    /* not one at a time */
       ascii = 0;      /* default is binary output */
       decode = 0;     /* default is to encode */
  -    while ((ch = getopt(argc, argv, "1n:ado:")) != -1) {
  +    version = UUID_VERSION1;
  +    while ((ch = getopt(argc, argv, "1n:ado:v:")) != -1) {
           switch (ch) {
               case '1':
                   iterate = 1;
                   break;
               case 'n':
                   if (count > 0)
  -                    usage();
  +                    usage("option 'n' specified multiple times");
                   count = strtol(optarg, &p, 10);
  -                if (*p != 0 || count < 1)
  -                    usage();
  +                if (*p != '\0' || count < 1)
  +                    usage("invalid argument to option 'n'");
                   break;
               case 'a':
                   ascii = 1;
  @@ -104,8 +115,21 @@
                   if ((fp = fopen(optarg, "w")) == NULL)
                       error(1, "fopen: %s", strerror(errno));
                   break;
  +            case 'v':
  +                i = strtol(optarg, &p, 10);
  +                if (*p != '\0')
  +                    usage("invalid argument to option 'v'");
  +                switch (i) {
  +                    case 1: version = UUID_VERSION1; break;;
  +                    case 3: version = UUID_VERSION3; break;;
  +                    case 4: version = UUID_VERSION4; break;;
  +                    default:
  +                        usage("invalid version on option 'v'");
  +                        break;
  +                }
  +                break;
               default:
  -                usage();
  +                usage("invalid option '%c'", ch);
           }
       }
       argv += optind;
  @@ -116,13 +140,13 @@
       if (decode) {
           /* decoding */
           if (argc != 1)
  -            usage();
  +            usage("invalid number of arguments");
           /* FIXME */
       }
       else {
           /* encoding */
  -        if (argc < 0 || argc > 1)
  -            usage();
  +        if (argc < 0 || ((version == UUID_VERSION3 && argc > 2) || argc > 1))
  +            usage("invalid number of arguments");
           if ((rc = uuid_create(&uuid)) != UUID_RC_OK)
               error(1, "uuid_create: %s", uuid_error(rc));
           if (argc == 1) {
  @@ -135,7 +159,11 @@
                   if ((rc = uuid_null(uuid)) != UUID_RC_OK)
                       error(1, "uuid_null: %s", uuid_error(rc));
               }
  -            if ((rc = uuid_generate(uuid)) != UUID_RC_OK)
  +            if (version == UUID_VERSION3)
  +                rc = uuid_generate(uuid, version, argv[0]);
  +            else
  +                rc = uuid_generate(uuid, version);
  +            if (rc != UUID_RC_OK)
                   error(1, "uuid_generate: %s", uuid_error(rc));
               if (ascii) {
                   cp = NULL;
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jan  9 10:02:59 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7FE7B774AB; Fri,  9 Jan 2004 10:02:59 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ configure.ac
Message-Id: <20040109090259.7FE7B774AB@mail.ossp.org>
Date: Fri,  9 Jan 2004 10:02:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Jan-2004 10:02:59
  Branch: HEAD                             Handle: 2004010909025800

  Modified files:
    ossp-pkg/uuid           configure.ac

  Log:
    fix prefix

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/uuid/configure.ac
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/configure.ac
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 configure.ac
  --- ossp-pkg/uuid/configure.ac	6 Jan 2004 20:14:28 -0000	1.1
  +++ ossp-pkg/uuid/configure.ac	9 Jan 2004 09:02:58 -0000	1.2
  @@ -29,7 +29,7 @@
   
   AC_PREREQ(2.53)
   AC_INIT
  -SA_VERSION_STR=`./shtool version -l txt -d long VERSION`
  +UUID_VERSION_STR=`./shtool version -l txt -d long VERSION`
   ./shtool echo -e "Configuring %BOSSP uuid%b (Universally Unique Identifiers), version %B${UUID_VERSION_STR}%b"
   AC_SUBST(UUID_VERSION_STR)
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jan  9 10:06:26 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 308E3774AB; Fri,  9 Jan 2004 10:06:26 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.c uuid.h
Message-Id: <20040109090626.308E3774AB@mail.ossp.org>
Date: Fri,  9 Jan 2004 10:06:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Jan-2004 10:06:26
  Branch: HEAD                             Handle: 2004010909062500

  Modified files:
    ossp-pkg/uuid           uuid.c uuid.h

  Log:
    use 'nil' instead of 'null' because the standards name the special
    zeroed UUID 'nil'

  Summary:
    Revision    Changes     Path
    1.4         +3  -3      ossp-pkg/uuid/uuid.c
    1.4         +1  -1      ossp-pkg/uuid/uuid.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 uuid.c
  --- ossp-pkg/uuid/uuid.c	8 Jan 2004 21:31:47 -0000	1.3
  +++ ossp-pkg/uuid/uuid.c	9 Jan 2004 09:06:25 -0000	1.4
  @@ -157,11 +157,11 @@
           return UUID_RC_OK;
       }
       if (a == NULL) {
  -        *result = ((uuid_isnull(b, &r), r) ? 0 : -1);
  +        *result = ((uuid_isnil(b, &r), r) ? 0 : -1);
           return UUID_RC_OK;
       }
       if (b == NULL) {
  -        *result = ((uuid_isnull(a, &r), r) ? 0 : 1);
  +        *result = ((uuid_isnil(a, &r), r) ? 0 : 1);
           return UUID_RC_OK;
       }
   
  @@ -196,7 +196,7 @@
       return UUID_RC_OK;
   }
   
  -uuid_rc_t uuid_isnull(uuid_t *uuid, int *result)
  +uuid_rc_t uuid_isnil(uuid_t *uuid, int *result)
   {
       if (uuid == NULL || result == NULL)
           return UUID_RC_ARG;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.h
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 uuid.h
  --- ossp-pkg/uuid/uuid.h	8 Jan 2004 21:31:47 -0000	1.3
  +++ ossp-pkg/uuid/uuid.h	9 Jan 2004 09:06:25 -0000	1.4
  @@ -98,7 +98,7 @@
   
   /* UUID comparison */
   extern uuid_rc_t  uuid_compare  (uuid_t  *uuid, uuid_t *uuid2, int *result);
  -extern uuid_rc_t  uuid_isnull   (uuid_t  *uuid,                int *result);
  +extern uuid_rc_t  uuid_isnil    (uuid_t  *uuid,                int *result);
   
   /* UUID generation */
   extern uuid_rc_t  uuid_generate (uuid_t  *uuid, unsigned int mode, ...);
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jan  9 11:47:54 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 78C4F774BF; Fri,  9 Jan 2004 11:47:54 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ ChangeLog
Message-Id: <20040109104754.78C4F774BF@mail.ossp.org>
Date: Fri,  9 Jan 2004 11:47:54 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   09-Jan-2004 11:47:54
  Branch: HEAD                             Handle: 2004010910475300

  Modified files:
    ossp-pkg/fsl            ChangeLog

  Log:
    document Changes between 1.4a1 and 1.4b1

  Summary:
    Revision    Changes     Path
    1.26        +32 -0      ossp-pkg/fsl/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 ChangeLog
  --- ossp-pkg/fsl/ChangeLog	28 Oct 2003 15:46:39 -0000	1.25
  +++ ossp-pkg/fsl/ChangeLog	9 Jan 2004 10:47:53 -0000	1.26
  @@ -8,7 +8,39 @@
   
     CHANGELOG
   
  +  Changes between 1.4a1 and 1.4b1 (09-Jan-2004)
  +
  +    *) Adjust copyright messages to include new year 2004.
  +       [Thomas Lotterer <thomas@lotterer.net>]
  +
  +    *) align devtool.conf environment and compiler warnings across OSSP
  +       fsl, OSSP cfg and OSSP l2.
  +       [Thomas Lotterer <thomas@lotterer.net>]
  +
  +    *) inherit OSSP l2 code removal to fix prefix-safety violation which
  +       collides with Darwin log2() math function.
  +       [Thomas Lotterer <thomas@lotterer.net>]
  +
  +    *) inherit OSSP l2 fix PR#23: l2 does not terminate a message when
  +       it contains a newline.
  +       [Thomas Lotterer <thomas@lotterer.net>]
  +
  +    *) inherit OSSP cfg and OSSP l2 yylloc scanner fix.
  +       [Michael Schloh von Bennewitz <michael@schloh.com>]
  +
  +    *) kludge for Alpha CPUs has been proven the "gp-relative relocation
  +       against dynamic symbol" is not limited to fsl. It is a general
  +       issue with much wider scope. The patch is not taken into fsl
  +       release and will be removed from the OpenPKG cvs, too.
  +       [Thomas Lotterer <thomas@lotterer.net>]
  +
     Changes between 1.3.0 and 1.4a1 (28-Oct-2003)
  +
  +    *) testing kludge to work around "gp-relative relocation against
  +       dynamic symbol" problem on Alpha CPUs using
  +       a patch that only exists in OpenPKG cvs, see
  +       http://cvs.openpkg.org/chngview?cn=13354.
  +       [Thomas Lotterer <thomas@lotterer.net>]
   
       *) added support for Solaris 10
          [Michael Schloh von Bennewitz <michael@schloh.com>]
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jan  9 11:48:28 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 37F2B774C4; Fri,  9 Jan 2004 11:48:28 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ Makefile.in README aclocal.m4 configure.ac f...
Message-Id: <20040109104828.37F2B774C4@mail.ossp.org>
Date: Fri,  9 Jan 2004 11:48:28 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   09-Jan-2004 11:48:28
  Branch: HEAD                             Handle: 2004010910482601

  Modified files:
    ossp-pkg/fsl            Makefile.in README aclocal.m4 configure.ac
                            fsl-config.in fsl.ac fsl.c fsl.pod fsl_version.c

  Log:
    Adjust copyright messages to include new year 2004

  Summary:
    Revision    Changes     Path
    1.17        +3  -3      ossp-pkg/fsl/Makefile.in
    1.40        +4  -4      ossp-pkg/fsl/README
    1.4         +3  -3      ossp-pkg/fsl/aclocal.m4
    1.16        +6  -6      ossp-pkg/fsl/configure.ac
    1.5         +3  -3      ossp-pkg/fsl/fsl-config.in
    1.9         +3  -3      ossp-pkg/fsl/fsl.ac
    1.66        +3  -3      ossp-pkg/fsl/fsl.c
    1.33        +3  -3      ossp-pkg/fsl/fsl.pod
    1.26        +9  -9      ossp-pkg/fsl/fsl_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 Makefile.in
  --- ossp-pkg/fsl/Makefile.in	22 May 2003 14:01:55 -0000	1.16
  +++ ossp-pkg/fsl/Makefile.in	9 Jan 2004 10:48:26 -0000	1.17
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP fsl - Faking/Flexible Syslog Library
  -##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2004 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP fsl, a syslog(3) API faking library which
   ##  can be found at http://www.ossp.org/pkg/lib/fsl/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/README
  ============================================================================
  $ cvs diff -u -r1.39 -r1.40 README
  --- ossp-pkg/fsl/README	28 Oct 2003 16:05:32 -0000	1.39
  +++ ossp-pkg/fsl/README	9 Jan 2004 10:48:26 -0000	1.40
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_| |___/_|
    
     OSSP fsl - Faking/Flexible Syslog Library
  -  Version 1.4a1 (28-Oct-2003)
  +  Version 1.4b1 (09-Jan-2004)
   
     ABSTRACT
   
  @@ -20,9 +20,9 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2002-2004 Cable & Wireless Deutschland <http://www.cw.com/de/>
   
     This file is part of OSSP fsl, a syslog(3) API faking library which
     can be found at http://www.ossp.org/pkg/lib/fsl/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 aclocal.m4
  --- ossp-pkg/fsl/aclocal.m4	6 Jan 2003 16:41:21 -0000	1.3
  +++ ossp-pkg/fsl/aclocal.m4	9 Jan 2004 10:48:26 -0000	1.4
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP fsl - Faking/Flexible Syslog Library
  -dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2004 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP fsl, a syslog(3) API faking library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/fsl/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/configure.ac
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 configure.ac
  --- ossp-pkg/fsl/configure.ac	22 May 2003 14:01:55 -0000	1.15
  +++ ossp-pkg/fsl/configure.ac	9 Jan 2004 10:48:26 -0000	1.16
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP fsl - Faking/Flexible Syslog Library
  -dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2004 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP fsl, a syslog(3) API faking library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/fsl/.
  @@ -34,9 +34,9 @@
   dnl #   announce our version
   V=`./shtool version -lc -dlong fsl_version.c`
   ./shtool echo -e "Configuring %BOSSP fsl%b (Faking/Flexible Syslog Library), Version %B${V}%b"
  -echo "Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>"
  -echo "Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>"
  -echo "Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>"
  +echo "Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>"
  +echo "Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>"
  +echo "Copyright (c) 2002-2004 Cable & Wireless Deutschland <http://www.cw.com/de/>"
   
   AC_PROG_MAKE_SET
   AC_PROG_CC
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl-config.in
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 fsl-config.in
  --- ossp-pkg/fsl/fsl-config.in	6 Jan 2003 16:41:21 -0000	1.4
  +++ ossp-pkg/fsl/fsl-config.in	9 Jan 2004 10:48:27 -0000	1.5
  @@ -1,9 +1,9 @@
   #!/bin/sh
   ##
   ##  OSSP fsl - Faking/Flexible Syslog Library
  -##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2004 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP fsl, a syslog(3) API faking library which
   ##  can be found at http://www.ossp.org/pkg/lib/fsl/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl.ac
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 fsl.ac
  --- ossp-pkg/fsl/fsl.ac	28 Oct 2003 19:47:09 -0000	1.8
  +++ ossp-pkg/fsl/fsl.ac	9 Jan 2004 10:48:27 -0000	1.9
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP fsl - Faking/Flexible Syslog Library
  -dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2004 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP fsl, a syslog(3) API faking library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/fsl/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl.c
  ============================================================================
  $ cvs diff -u -r1.65 -r1.66 fsl.c
  --- ossp-pkg/fsl/fsl.c	13 Oct 2003 14:01:38 -0000	1.65
  +++ ossp-pkg/fsl/fsl.c	9 Jan 2004 10:48:27 -0000	1.66
  @@ -1,8 +1,8 @@
   /*
   **  OSSP fsl - Faking/Flexible Syslog Library
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2004 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP fsl, a syslog(3) API faking library which
   **  can be found at http://www.ossp.org/pkg/lib/fsl/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl.pod
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 fsl.pod
  --- ossp-pkg/fsl/fsl.pod	25 Sep 2003 13:57:23 -0000	1.32
  +++ ossp-pkg/fsl/fsl.pod	9 Jan 2004 10:48:27 -0000	1.33
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP fsl - Faking/Flexible Syslog Library
  -##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2004 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP fsl, a syslog(3) API faking library which
   ##  can be found at http://www.ossp.org/pkg/lib/fsl/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl_version.c
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 fsl_version.c
  --- ossp-pkg/fsl/fsl_version.c	28 Oct 2003 16:05:32 -0000	1.25
  +++ ossp-pkg/fsl/fsl_version.c	9 Jan 2004 10:48:27 -0000	1.26
  @@ -8,7 +8,7 @@
   #ifndef _FSL_VERSION_C_
   #define _FSL_VERSION_C_
   
  -#define FSL_VERSION 0x104001
  +#define FSL_VERSION 0x104101
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _FSL_VERSION_C_AS_HEADER_
   
   fsl_version_t fsl_version = {
  -    0x104001,
  -    "1.4a1",
  -    "1.4a1 (28-Oct-2003)",
  -    "This is OSSP fsl, Version 1.4a1 (28-Oct-2003)",
  -    "OSSP fsl 1.4a1 (28-Oct-2003)",
  -    "OSSP fsl/1.4a1",
  -    "@(#)OSSP fsl 1.4a1 (28-Oct-2003)",
  -    "$Id: fsl_version.c,v 1.25 2003/10/28 16:05:32 thl Exp $"
  +    0x104101,
  +    "1.4b1",
  +    "1.4b1 (09-Jan-2004)",
  +    "This is OSSP fsl, Version 1.4b1 (09-Jan-2004)",
  +    "OSSP fsl 1.4b1 (09-Jan-2004)",
  +    "OSSP fsl/1.4b1",
  +    "@(#)OSSP fsl 1.4b1 (09-Jan-2004)",
  +    "$Id: fsl_version.c,v 1.26 2004/01/09 10:48:27 thl Exp $"
   };
   
   #endif /* _FSL_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jan  9 11:48:39 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A5161774C3; Fri,  9 Jan 2004 11:48:39 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ fsl_version.c
Message-Id: <20040109104839.A5161774C3@mail.ossp.org>
Date: Fri,  9 Jan 2004 11:48:39 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   09-Jan-2004 11:48:39
  Branch: HEAD                             Handle: 2004010910483900

  Modified files:
    ossp-pkg/fsl            fsl_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.27        +0  -0      ossp-pkg/fsl/fsl_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl_version.c
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 fsl_version.c
  --- ossp-pkg/fsl/fsl_version.c	9 Jan 2004 10:48:27 -0000	1.26
  +++ ossp-pkg/fsl/fsl_version.c	9 Jan 2004 10:48:39 -0000	1.27
  @@ -39,7 +39,7 @@
       "OSSP fsl 1.4b1 (09-Jan-2004)",
       "OSSP fsl/1.4b1",
       "@(#)OSSP fsl 1.4b1 (09-Jan-2004)",
  -    "$Id: fsl_version.c,v 1.26 2004/01/09 10:48:27 thl Exp $"
  +    "$Id: fsl_version.c,v 1.27 2004/01/09 10:48:39 thl Exp $"
   };
   
   #endif /* _FSL_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jan  9 12:24:23 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B8115772D4; Fri,  9 Jan 2004 12:24:22 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ui64/ README devtool devtool.conf devtool.func ts...
Message-Id: <20040109112422.B8115772D4@mail.ossp.org>
Date: Fri,  9 Jan 2004 12:24:22 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Jan-2004 12:24:22
  Branch: HEAD                             Handle: 2004010911242001

  Modified files:
    ossp-pkg/ui64           README devtool devtool.conf devtool.func ts.c
                            ui64.c ui64.h ui64.pod ui64_test.c

  Log:
    strip trailing whitespaces

  Summary:
    Revision    Changes     Path
    1.4         +5  -5      ossp-pkg/ui64/README
    1.2         +1  -1      ossp-pkg/ui64/devtool
    1.4         +1  -1      ossp-pkg/ui64/devtool.conf
    1.2         +1  -1      ossp-pkg/ui64/devtool.func
    1.2         +4  -4      ossp-pkg/ui64/ts.c
    1.4         +5  -5      ossp-pkg/ui64/ui64.c
    1.6         +16 -16     ossp-pkg/ui64/ui64.h
    1.7         +26 -26     ossp-pkg/ui64/ui64.pod
    1.3         +20 -20     ossp-pkg/ui64/ui64_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/README
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 README
  --- ossp-pkg/ui64/README	23 Mar 2003 18:07:15 -0000	1.3
  +++ ossp-pkg/ui64/README	9 Jan 2004 11:24:20 -0000	1.4
  @@ -1,9 +1,9 @@
  -         _  __   _  _   
  -   _   _(_)/ /_ | || |  
  -  | | | | | '_ \| || |_ 
  +         _  __   _  _
  +   _   _(_)/ /_ | || |
  +  | | | | | '_ \| || |_
     | |_| | | (_) |__   _|
  -   \__,_|_|\___/   |_|  
  -                      
  +   \__,_|_|\___/   |_|
  +
     OSSP ui64 - 64-Bit Arithmetic
     Version 0.1.0 (28-Apr-2002)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/devtool
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 devtool
  --- ossp-pkg/ui64/devtool	28 Apr 2002 13:22:49 -0000	1.1
  +++ ossp-pkg/ui64/devtool	9 Jan 2004 11:24:20 -0000	1.2
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  devtool -- Development Tool
  -##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   if [ $# -eq 0 ]; then
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.conf
  --- ossp-pkg/ui64/devtool.conf	28 Jul 2002 08:08:42 -0000	1.3
  +++ ossp-pkg/ui64/devtool.conf	9 Jan 2004 11:24:21 -0000	1.4
  @@ -23,7 +23,7 @@
   %version
       ./shtool version -l txt -n "OSSP ui64" -e VERSION
       V=`./shtool version -l txt -d long VERSION`
  -    sed -e "s/Version .*(.*)/Version $V/g" <README >README.n 
  +    sed -e "s/Version .*(.*)/Version $V/g" <README >README.n
       mv README.n README
   
   %dist
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/devtool.func
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.func
  --- ossp-pkg/ui64/devtool.func	28 Apr 2002 13:22:49 -0000	1.1
  +++ ossp-pkg/ui64/devtool.func	9 Jan 2004 11:24:21 -0000	1.2
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   devtool_require () {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/ts.c
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ts.c
  --- ossp-pkg/ui64/ts.c	28 Apr 2002 13:22:49 -0000	1.1
  +++ ossp-pkg/ui64/ts.c	9 Jan 2004 11:24:21 -0000	1.2
  @@ -119,7 +119,7 @@
   static int ts_suite_mvxprintf(char *buffer, size_t bufsize, const char *format, va_list ap)
   {
       /* sufficient integer buffer: <available-bits> x log_10(2) + safety */
  -    char ibuf[((sizeof(int)*8)/3)+10]; 
  +    char ibuf[((sizeof(int)*8)/3)+10];
       char *cp;
       char c;
       int d;
  @@ -351,9 +351,9 @@
       /* print test suite summary */
       fprintf(stdout, " __________________________________________________________________\n");
       fprintf(stdout, "\n");
  -    fprintf(stdout, " Test Summary: %d tests (%d ok, %d failed), %d checks (%d ok, %d failed)\n", 
  -            total_tests, (total_tests - total_tests_suite_failed), total_tests_suite_failed, 
  -            total_checks, (total_checks - total_checks_failed), total_checks_failed); 
  +    fprintf(stdout, " Test Summary: %d tests (%d ok, %d failed), %d checks (%d ok, %d failed)\n",
  +            total_tests, (total_tests - total_tests_suite_failed), total_tests_suite_failed,
  +            total_checks, (total_checks - total_checks_failed), total_checks_failed);
       if (total_tests_suite_failed > 0)
           fprintf(stdout, " Test Suite: FAILED\n");
       else
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/ui64.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ui64.c
  --- ossp-pkg/ui64/ui64.c	23 Mar 2003 18:07:15 -0000	1.3
  +++ ossp-pkg/ui64/ui64.c	9 Jan 2004 11:24:21 -0000	1.4
  @@ -109,15 +109,15 @@
           10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, /* a...m */
           23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35  /* m...z */
       };
  -    
  +
       ui64_fill(z, 0);
       if (str == NULL || (base < 2 || base > 36))
           return z;
       cp = str;
       while (*cp != '\0' && isspace((int)(*cp)))
           cp++;
  -    while (   *cp != '\0' 
  -           && isalnum((int)(*cp)) 
  +    while (   *cp != '\0'
  +           && isalnum((int)(*cp))
              && map[(int)(*cp)-'0'] < base) {
           z = ui64_muln(z, base, &carry);
           if (carry)
  @@ -318,7 +318,7 @@
       int i;
       int n, m;
       int ovn;
  -    
  +
       /* determine actual number of involved digits */
       n = ui64_len(x);
       m = ui64_len(y);
  @@ -364,7 +364,7 @@
                  qk := rx[k+m-2...k+m]/y[m-2...m-1] */
               km = k + m;
               y2 = (y.x[m-1]*UI64_BASE) + y.x[m-2];
  -            r3 = (rx.x[km]*(UI64_BASE*UI64_BASE)) + 
  +            r3 = (rx.x[km]*(UI64_BASE*UI64_BASE)) +
                    (rx.x[km-1]*UI64_BASE) + rx.x[km-2];
               qk = r3 / y2;
               if (qk >= UI64_BASE)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/ui64.h
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ui64.h
  --- ossp-pkg/ui64/ui64.h	23 Mar 2003 18:07:15 -0000	1.5
  +++ ossp-pkg/ui64/ui64.h	9 Jan 2004 11:24:21 -0000	1.6
  @@ -44,26 +44,26 @@
   #endif
   #define ui64_t     UI64_CONCAT(UI64_PREFIX,ui64_t)
   #define ui64_zero  UI64_CONCAT(UI64_PREFIX,ui64_zero)
  -#define ui64_max   UI64_CONCAT(UI64_PREFIX,ui64_max) 
  -#define ui64_n2i   UI64_CONCAT(UI64_PREFIX,ui64_n2i) 
  -#define ui64_i2n   UI64_CONCAT(UI64_PREFIX,ui64_i2n) 
  -#define ui64_s2i   UI64_CONCAT(UI64_PREFIX,ui64_s2i) 
  -#define ui64_i2s   UI64_CONCAT(UI64_PREFIX,ui64_i2s) 
  -#define ui64_add   UI64_CONCAT(UI64_PREFIX,ui64_add) 
  +#define ui64_max   UI64_CONCAT(UI64_PREFIX,ui64_max)
  +#define ui64_n2i   UI64_CONCAT(UI64_PREFIX,ui64_n2i)
  +#define ui64_i2n   UI64_CONCAT(UI64_PREFIX,ui64_i2n)
  +#define ui64_s2i   UI64_CONCAT(UI64_PREFIX,ui64_s2i)
  +#define ui64_i2s   UI64_CONCAT(UI64_PREFIX,ui64_i2s)
  +#define ui64_add   UI64_CONCAT(UI64_PREFIX,ui64_add)
   #define ui64_addn  UI64_CONCAT(UI64_PREFIX,ui64_addn)
  -#define ui64_sub   UI64_CONCAT(UI64_PREFIX,ui64_sub) 
  +#define ui64_sub   UI64_CONCAT(UI64_PREFIX,ui64_sub)
   #define ui64_subn  UI64_CONCAT(UI64_PREFIX,ui64_subn)
  -#define ui64_mul   UI64_CONCAT(UI64_PREFIX,ui64_mul) 
  +#define ui64_mul   UI64_CONCAT(UI64_PREFIX,ui64_mul)
   #define ui64_muln  UI64_CONCAT(UI64_PREFIX,ui64_muln)
  -#define ui64_div   UI64_CONCAT(UI64_PREFIX,ui64_div) 
  +#define ui64_div   UI64_CONCAT(UI64_PREFIX,ui64_div)
   #define ui64_divn  UI64_CONCAT(UI64_PREFIX,ui64_divn)
  -#define ui64_and   UI64_CONCAT(UI64_PREFIX,ui64_and) 
  -#define ui64_or    UI64_CONCAT(UI64_PREFIX,ui64_or)  
  -#define ui64_xor   UI64_CONCAT(UI64_PREFIX,ui64_xor) 
  -#define ui64_not   UI64_CONCAT(UI64_PREFIX,ui64_not) 
  -#define ui64_rol   UI64_CONCAT(UI64_PREFIX,ui64_rol) 
  -#define ui64_ror   UI64_CONCAT(UI64_PREFIX,ui64_ror)  
  -#define ui64_len   UI64_CONCAT(UI64_PREFIX,ui64_len)  
  +#define ui64_and   UI64_CONCAT(UI64_PREFIX,ui64_and)
  +#define ui64_or    UI64_CONCAT(UI64_PREFIX,ui64_or)
  +#define ui64_xor   UI64_CONCAT(UI64_PREFIX,ui64_xor)
  +#define ui64_not   UI64_CONCAT(UI64_PREFIX,ui64_not)
  +#define ui64_rol   UI64_CONCAT(UI64_PREFIX,ui64_rol)
  +#define ui64_ror   UI64_CONCAT(UI64_PREFIX,ui64_ror)
  +#define ui64_len   UI64_CONCAT(UI64_PREFIX,ui64_len)
   #define ui64_cmp   UI64_CONCAT(UI64_PREFIX,ui64_cmp)
   #endif
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/ui64.pod
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ui64.pod
  --- ossp-pkg/ui64/ui64.pod	23 Mar 2003 18:07:15 -0000	1.6
  +++ ossp-pkg/ui64/ui64.pod	9 Jan 2004 11:24:21 -0000	1.7
  @@ -40,28 +40,28 @@
   
   =head1 SYNOPSIS
   
  -B<ui64_zero>, 
  -B<ui64_max>,  
  -B<ui64_n2i>,  
  -B<ui64_i2n>,  
  -B<ui64_s2i>,  
  -B<ui64_i2s>,  
  -B<ui64_add>,  
  -B<ui64_addn>, 
  -B<ui64_sub>,  
  -B<ui64_subn>, 
  -B<ui64_mul>,  
  -B<ui64_muln>, 
  -B<ui64_div>,  
  -B<ui64_divn>, 
  -B<ui64_and>,  
  -B<ui64_or>,   
  -B<ui64_xor>,  
  -B<ui64_not>,  
  -B<ui64_rol>,  
  -B<ui64_ror>,  
  -B<ui64_len>,  
  -B<ui64_cmp>.  
  +B<ui64_zero>,
  +B<ui64_max>,
  +B<ui64_n2i>,
  +B<ui64_i2n>,
  +B<ui64_s2i>,
  +B<ui64_i2s>,
  +B<ui64_add>,
  +B<ui64_addn>,
  +B<ui64_sub>,
  +B<ui64_subn>,
  +B<ui64_mul>,
  +B<ui64_muln>,
  +B<ui64_div>,
  +B<ui64_divn>,
  +B<ui64_and>,
  +B<ui64_or>,
  +B<ui64_xor>,
  +B<ui64_not>,
  +B<ui64_rol>,
  +B<ui64_ror>,
  +B<ui64_len>,
  +B<ui64_cmp>.
   
   =head1 DESCRIPTION
   
  @@ -144,7 +144,7 @@
   
   =item ui64_t B<ui64_add>(ui64_t I<x>, ui64_t I<y>, ui64_t *I<ov>);
   
  -Addition of I<x> and I<y>. 
  +Addition of I<x> and I<y>.
   If I<ov> is not C<NULL>, it receives the overflow value of
   this operation (carry).
   
  @@ -154,7 +154,7 @@
   
   =item ui64_t B<ui64_sub>(ui64_t I<x>, ui64_t I<y>, ui64_t *I<ov>);
   
  -Subtraction of I<y> from I<x>. 
  +Subtraction of I<y> from I<x>.
   If I<ov> is not C<NULL>, it receives the overflow value of
   this operation (borrow).
   
  @@ -164,7 +164,7 @@
   
   =item ui64_t B<ui64_mul>(ui64_t I<x>, ui64_t I<y>, ui64_t *I<ov>);
   
  -Multiplication of I<x> and I<y>. 
  +Multiplication of I<x> and I<y>.
   If I<ov> is not C<NULL>, it receives the overflow value of
   this operation).
   
  @@ -174,7 +174,7 @@
   
   =item ui64_t B<ui64_div>(ui64_t I<x>, ui64_t I<y>, ui64_t *I<ov>);
   
  -Division of I<x> by I<y>. 
  +Division of I<x> by I<y>.
   If I<ov> is not C<NULL>, it receives the overflow value of
   this operation (remainder).
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/ui64_test.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ui64_test.c
  --- ossp-pkg/ui64/ui64_test.c	23 Mar 2003 18:07:16 -0000	1.2
  +++ ossp-pkg/ui64/ui64_test.c	9 Jan 2004 11:24:21 -0000	1.3
  @@ -56,7 +56,7 @@
           n = ui64_i2n(x);
           if (n != table[i].num) {
               ts_test_fail(TS_CTX, "input %d, "
  -                         "expected output %d, got output %d", 
  +                         "expected output %d, got output %d",
                            table[i].num, table[i].num, n);
           }
       }
  @@ -92,9 +92,9 @@
           cp = ui64_i2s(x, buf, sizeof(buf), table[i].in_base);
           if (strcasecmp(table[i].in_str, cp) != 0) {
               ts_test_fail(TS_CTX, "input \"%s\" (%d), "
  -                         "expected output \"%s\" (%d), got output \"%s\" (%d)", 
  -                         table[i].in_str, table[i].in_base, 
  -                         table[i].in_str, table[i].in_base, 
  +                         "expected output \"%s\" (%d), got output \"%s\" (%d)",
  +                         table[i].in_str, table[i].in_base,
  +                         table[i].in_str, table[i].in_base,
                            cp, table[i].in_base);
           }
   
  @@ -103,9 +103,9 @@
           cp = ui64_i2s(x, buf, sizeof(buf), table[i].out_base);
           if (strcasecmp(table[i].out_str, cp) != 0) {
               ts_test_fail(TS_CTX, "input \"%s\" (%d), "
  -                         "expected output \"%s\" (%d), got output \"%s\" (%d)", 
  -                         table[i].out_str, table[i].out_base, 
  -                         table[i].out_str, table[i].out_base, 
  +                         "expected output \"%s\" (%d), got output \"%s\" (%d)",
  +                         table[i].out_str, table[i].out_base,
  +                         table[i].out_str, table[i].out_base,
                            cp, table[i].out_base);
           }
   
  @@ -114,9 +114,9 @@
           cp = ui64_i2s(x, buf, sizeof(buf), table[i].out_base);
           if (strcasecmp(table[i].out_str, cp) != 0) {
               ts_test_fail(TS_CTX, "input \"%s\" (%d), "
  -                         "expected output \"%s\" (%d), got output \"%s\" (%d)", 
  -                         table[i].in_str, table[i].in_base, 
  -                         table[i].out_str, table[i].out_base, 
  +                         "expected output \"%s\" (%d), got output \"%s\" (%d)",
  +                         table[i].in_str, table[i].in_base,
  +                         table[i].out_str, table[i].out_base,
                            cp, table[i].out_base);
           }
       }
  @@ -131,11 +131,11 @@
       char ov_a[128];
       char *ov_s;
       struct {
  -        char *a1; 
  +        char *a1;
           char *op;
  -        char *a2; 
  -        char *re; 
  -        char *ov; 
  +        char *a2;
  +        char *re;
  +        char *ov;
       } table[] = {
           /* addition */
           { "0", "+", "0", "0", "0" },
  @@ -199,7 +199,7 @@
           if (   strcasecmp(re_s, table[i].re) != 0
               || strcasecmp(ov_s, table[i].ov) != 0) {
               ts_test_fail(TS_CTX, "%s %s %s = (expected) %s [%s] != %s [%s] (got)",
  -                          table[i].a1, table[i].op, table[i].a2, 
  +                          table[i].a1, table[i].op, table[i].a2,
                             table[i].re, table[i].ov, re_s, ov_s);
           }
       }
  @@ -215,11 +215,11 @@
       char ov_a[128];
       char *ov_s;
       struct {
  -        char *a1; 
  +        char *a1;
           char *op;
  -        int a2; 
  -        char *re; 
  -        char *ov; 
  +        int a2;
  +        char *re;
  +        char *ov;
       } table[] = {
           /* rotate left */
           { "0", "<", 0, "0", "0" },
  @@ -252,7 +252,7 @@
           if (   strcasecmp(re_s, table[i].re) != 0
               || strcasecmp(ov_s, table[i].ov) != 0) {
               ts_test_fail(TS_CTX, "%s %s %d = (expected) %s [%s] != %s [%s] (got)",
  -                          table[i].a1, table[i].op, table[i].a2, 
  +                          table[i].a1, table[i].op, table[i].a2,
                             table[i].re, table[i].ov, re_s, ov_s);
           }
       }
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jan  9 12:25:50 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C6C8C772D4; Fri,  9 Jan 2004 12:25:49 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ui64/ Makefile.in README aclocal.m4 configure.ac ...
Message-Id: <20040109112549.C6C8C772D4@mail.ossp.org>
Date: Fri,  9 Jan 2004 12:25:49 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Jan-2004 12:25:49
  Branch: HEAD                             Handle: 2004010911254800

  Modified files:
    ossp-pkg/ui64           Makefile.in README aclocal.m4 configure.ac
                            ui64-config.in ui64.c ui64.h ui64.pod ui64_test.c

  Log:
    bump copyright for year 2004

  Summary:
    Revision    Changes     Path
    1.3         +3  -3      ossp-pkg/ui64/Makefile.in
    1.5         +3  -3      ossp-pkg/ui64/README
    1.3         +3  -3      ossp-pkg/ui64/aclocal.m4
    1.3         +3  -3      ossp-pkg/ui64/configure.ac
    1.3         +3  -3      ossp-pkg/ui64/ui64-config.in
    1.5         +3  -3      ossp-pkg/ui64/ui64.c
    1.7         +3  -3      ossp-pkg/ui64/ui64.h
    1.8         +3  -3      ossp-pkg/ui64/ui64.pod
    1.4         +3  -3      ossp-pkg/ui64/ui64_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 Makefile.in
  --- ossp-pkg/ui64/Makefile.in	23 Mar 2003 18:07:15 -0000	1.2
  +++ ossp-pkg/ui64/Makefile.in	9 Jan 2004 11:25:48 -0000	1.3
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP ui64 - 64-Bit Arithmetic
  -##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2004 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP ui64, a 64-bit arithmetic library
   ##  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/README
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 README
  --- ossp-pkg/ui64/README	9 Jan 2004 11:24:20 -0000	1.4
  +++ ossp-pkg/ui64/README	9 Jan 2004 11:25:48 -0000	1.5
  @@ -15,9 +15,9 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2002-2004 Cable & Wireless Deutschland <http://www.cw.com/de/>
   
     This file is part of OSSP ui64, a 64-bit arithmetic library
     which can be found at http://www.ossp.org/pkg/lib/ui64/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 aclocal.m4
  --- ossp-pkg/ui64/aclocal.m4	23 Mar 2003 18:07:15 -0000	1.2
  +++ ossp-pkg/ui64/aclocal.m4	9 Jan 2004 11:25:48 -0000	1.3
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP ui64 - 64-Bit Arithmetic
  -dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2004 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP ui64, a 64-bit arithmetic library
   dnl ##  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/configure.ac
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 configure.ac
  --- ossp-pkg/ui64/configure.ac	23 Mar 2003 18:07:15 -0000	1.2
  +++ ossp-pkg/ui64/configure.ac	9 Jan 2004 11:25:48 -0000	1.3
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP ui64 - 64-Bit Arithmetic
  -dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2004 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP ui64, a 64-bit arithmetic library
   dnl ##  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/ui64-config.in
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ui64-config.in
  --- ossp-pkg/ui64/ui64-config.in	23 Mar 2003 18:07:15 -0000	1.2
  +++ ossp-pkg/ui64/ui64-config.in	9 Jan 2004 11:25:48 -0000	1.3
  @@ -1,9 +1,9 @@
   #!/bin/sh
   ##
   ##  OSSP ui64 - 64-Bit Arithmetic
  -##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2004 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP ui64, a 64-bit arithmetic library
   ##  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/ui64.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ui64.c
  --- ossp-pkg/ui64/ui64.c	9 Jan 2004 11:24:21 -0000	1.4
  +++ ossp-pkg/ui64/ui64.c	9 Jan 2004 11:25:48 -0000	1.5
  @@ -1,8 +1,8 @@
   /*
   **  OSSP ui64 - 64-Bit Arithmetic
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2004 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP ui64, a 64-bit arithmetic library
   **  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/ui64.h
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ui64.h
  --- ossp-pkg/ui64/ui64.h	9 Jan 2004 11:24:21 -0000	1.6
  +++ ossp-pkg/ui64/ui64.h	9 Jan 2004 11:25:48 -0000	1.7
  @@ -1,8 +1,8 @@
   /*
   **  OSSP ui64 - 64-Bit Arithmetic
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2004 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP ui64, a 64-bit arithmetic library
   **  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/ui64.pod
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 ui64.pod
  --- ossp-pkg/ui64/ui64.pod	9 Jan 2004 11:24:21 -0000	1.7
  +++ ossp-pkg/ui64/ui64.pod	9 Jan 2004 11:25:48 -0000	1.8
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP ui64 - 64-Bit Arithmetic
  -##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2004 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP ui64, a 64-bit arithmetic library
   ##  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/ui64_test.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ui64_test.c
  --- ossp-pkg/ui64/ui64_test.c	9 Jan 2004 11:24:21 -0000	1.3
  +++ ossp-pkg/ui64/ui64_test.c	9 Jan 2004 11:25:48 -0000	1.4
  @@ -1,8 +1,8 @@
   /*
   **  OSSP ui64 - 64-Bit Arithmetic
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2004 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP ui64, a 64-bit arithmetic library
   **  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jan  9 12:28:24 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DD829772D4; Fri,  9 Jan 2004 12:28:23 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ui64/ Makefile.in README aclocal.m4 configure.ac ...
Message-Id: <20040109112823.DD829772D4@mail.ossp.org>
Date: Fri,  9 Jan 2004 12:28:23 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Jan-2004 12:28:23
  Branch: HEAD                             Handle: 2004010911282201

  Modified files:
    ossp-pkg/ui64           Makefile.in README aclocal.m4 configure.ac
                            ui64-config.in ui64.c ui64.h ui64.pod ui64_test.c

  Log:
    OSSP ui64 was never done under C&W work time, so no need to give them
    the copyright

  Summary:
    Revision    Changes     Path
    1.4         +0  -1      ossp-pkg/ui64/Makefile.in
    1.6         +0  -1      ossp-pkg/ui64/README
    1.4         +0  -1      ossp-pkg/ui64/aclocal.m4
    1.4         +0  -1      ossp-pkg/ui64/configure.ac
    1.4         +0  -1      ossp-pkg/ui64/ui64-config.in
    1.6         +0  -1      ossp-pkg/ui64/ui64.c
    1.8         +0  -1      ossp-pkg/ui64/ui64.h
    1.9         +0  -1      ossp-pkg/ui64/ui64.pod
    1.5         +0  -1      ossp-pkg/ui64/ui64_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 Makefile.in
  --- ossp-pkg/ui64/Makefile.in	9 Jan 2004 11:25:48 -0000	1.3
  +++ ossp-pkg/ui64/Makefile.in	9 Jan 2004 11:28:22 -0000	1.4
  @@ -2,7 +2,6 @@
   ##  OSSP ui64 - 64-Bit Arithmetic
   ##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2004 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP ui64, a 64-bit arithmetic library
   ##  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/README
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 README
  --- ossp-pkg/ui64/README	9 Jan 2004 11:25:48 -0000	1.5
  +++ ossp-pkg/ui64/README	9 Jan 2004 11:28:22 -0000	1.6
  @@ -17,7 +17,6 @@
   
     Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
     Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -  Copyright (c) 2002-2004 Cable & Wireless Deutschland <http://www.cw.com/de/>
   
     This file is part of OSSP ui64, a 64-bit arithmetic library
     which can be found at http://www.ossp.org/pkg/lib/ui64/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 aclocal.m4
  --- ossp-pkg/ui64/aclocal.m4	9 Jan 2004 11:25:48 -0000	1.3
  +++ ossp-pkg/ui64/aclocal.m4	9 Jan 2004 11:28:22 -0000	1.4
  @@ -2,7 +2,6 @@
   dnl ##  OSSP ui64 - 64-Bit Arithmetic
   dnl ##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002-2004 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP ui64, a 64-bit arithmetic library
   dnl ##  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/configure.ac
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 configure.ac
  --- ossp-pkg/ui64/configure.ac	9 Jan 2004 11:25:48 -0000	1.3
  +++ ossp-pkg/ui64/configure.ac	9 Jan 2004 11:28:22 -0000	1.4
  @@ -2,7 +2,6 @@
   dnl ##  OSSP ui64 - 64-Bit Arithmetic
   dnl ##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002-2004 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP ui64, a 64-bit arithmetic library
   dnl ##  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/ui64-config.in
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ui64-config.in
  --- ossp-pkg/ui64/ui64-config.in	9 Jan 2004 11:25:48 -0000	1.3
  +++ ossp-pkg/ui64/ui64-config.in	9 Jan 2004 11:28:22 -0000	1.4
  @@ -3,7 +3,6 @@
   ##  OSSP ui64 - 64-Bit Arithmetic
   ##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2004 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP ui64, a 64-bit arithmetic library
   ##  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/ui64.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ui64.c
  --- ossp-pkg/ui64/ui64.c	9 Jan 2004 11:25:48 -0000	1.5
  +++ ossp-pkg/ui64/ui64.c	9 Jan 2004 11:28:22 -0000	1.6
  @@ -2,7 +2,6 @@
   **  OSSP ui64 - 64-Bit Arithmetic
   **  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
   **  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2004 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP ui64, a 64-bit arithmetic library
   **  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/ui64.h
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 ui64.h
  --- ossp-pkg/ui64/ui64.h	9 Jan 2004 11:25:48 -0000	1.7
  +++ ossp-pkg/ui64/ui64.h	9 Jan 2004 11:28:22 -0000	1.8
  @@ -2,7 +2,6 @@
   **  OSSP ui64 - 64-Bit Arithmetic
   **  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
   **  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2004 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP ui64, a 64-bit arithmetic library
   **  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/ui64.pod
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 ui64.pod
  --- ossp-pkg/ui64/ui64.pod	9 Jan 2004 11:25:48 -0000	1.8
  +++ ossp-pkg/ui64/ui64.pod	9 Jan 2004 11:28:23 -0000	1.9
  @@ -2,7 +2,6 @@
   ##  OSSP ui64 - 64-Bit Arithmetic
   ##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2004 Cable & Wireless Deutschland <http://www.cw.com/de/>
   ##
   ##  This file is part of OSSP ui64, a 64-bit arithmetic library
   ##  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/ui64_test.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ui64_test.c
  --- ossp-pkg/ui64/ui64_test.c	9 Jan 2004 11:25:48 -0000	1.4
  +++ ossp-pkg/ui64/ui64_test.c	9 Jan 2004 11:28:23 -0000	1.5
  @@ -2,7 +2,6 @@
   **  OSSP ui64 - 64-Bit Arithmetic
   **  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
   **  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2004 Cable & Wireless Deutschland <http://www.cw.com/de/>
   **
   **  This file is part of OSSP ui64, a 64-bit arithmetic library
   **  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jan  9 12:28:57 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CB980772D4; Fri,  9 Jan 2004 12:28:56 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.c uuid.h uuidtool.c
Message-Id: <20040109112856.CB980772D4@mail.ossp.org>
Date: Fri,  9 Jan 2004 12:28:56 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Jan-2004 12:28:56
  Branch: HEAD                             Handle: 2004010911285600

  Modified files:
    ossp-pkg/uuid           uuid.c uuid.h uuidtool.c

  Log:
    flush work of this forenoon

  Summary:
    Revision    Changes     Path
    1.5         +247 -81    ossp-pkg/uuid/uuid.c
    1.5         +8  -10     ossp-pkg/uuid/uuid.h
    1.4         +6  -6      ossp-pkg/uuid/uuidtool.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 uuid.c
  --- ossp-pkg/uuid/uuid.c	9 Jan 2004 09:06:25 -0000	1.4
  +++ ossp-pkg/uuid/uuid.c	9 Jan 2004 11:28:56 -0000	1.5
  @@ -32,6 +32,7 @@
   #include <stdarg.h>
   #include <string.h>
   #include <unistd.h>
  +#include <ctype.h>
   
   #include "config.h"
   #include "uuid.h"
  @@ -92,7 +93,14 @@
   #error unexpected: no type found for uuid_uint32_t
   #endif
   
  -/* private data type declaration */
  +#ifndef FALSE
  +#define FALSE 0
  +#endif
  +#ifndef TRUE
  +#define TRUE !FALSE
  +#endif
  +
  +/* UUID binary representation according to UUID standards */
   struct uuid_st {
       uuid_uint32_t   time_low;
       uuid_uint16_t   time_mid;
  @@ -104,39 +112,41 @@
   
   uuid_rc_t uuid_create(uuid_t **uuid)
   {
  +    /* argument sanity check */
       if (uuid == NULL)
           return UUID_RC_ARG;
  +
  +    /* allocate UUID binary representation buffer */
       if ((*uuid = (uuid_t *)malloc(sizeof(uuid_t))) == NULL)
           return UUID_RC_MEM;
  -    uuid_null(*uuid);
  +
  +    /* set initially to "nil UUID" */
  +    uuid_nil(*uuid);
  +
       return UUID_RC_OK;
   }
   
   uuid_rc_t uuid_destroy(uuid_t *uuid)
   {
  +    /* argument sanity check */
       if (uuid == NULL)
           return UUID_RC_ARG;
  +
  +    /* free UUID binary representation buffer */
       free(uuid);
  +
       return UUID_RC_OK;
   }
   
  -uuid_rc_t uuid_null(uuid_t *uuid)
  +uuid_rc_t uuid_nil(uuid_t *uuid)
   {
  +    /* argument sanity check */
       if (uuid == NULL)
           return UUID_RC_ARG;
  -    memset(uuid, '\0', sizeof(uuid_t));
  -    return UUID_RC_OK;
  -}
   
  -uuid_rc_t uuid_generate(uuid_t *uuid, unsigned int mode, ...)
  -{
  -    va_list ap;
  +    /* clear all octets to create "nil UUID" */
  +    memset(uuid, '\0', sizeof(uuid_t));
   
  -    if (uuid == NULL)
  -        return UUID_RC_ARG;
  -    va_start(ap, mode);
  -    /* FIXME */
  -    va_end(ap);
       return UUID_RC_OK;
   }
   
  @@ -144,112 +154,268 @@
   {
       int r;
   
  +    /* argument sanity check */
       if (result == NULL)
           return UUID_RC_ARG;
   
  -    /* deal with NULL or equal pointers. */
  -    if (a == b) {
  -        *result = 0;
  -        return UUID_RC_OK;
  -    }
  -    if (a == NULL && b == NULL) {
  -        *result = 0;
  -        return UUID_RC_OK;
  -    }
  -    if (a == NULL) {
  -        *result = ((uuid_isnil(b, &r), r) ? 0 : -1);
  -        return UUID_RC_OK;
  -    }
  -    if (b == NULL) {
  -        *result = ((uuid_isnil(a, &r), r) ? 0 : 1);
  -        return UUID_RC_OK;
  -    }
  +    /* convinience macro for setting result */
  +#   define RESULT(r) \
  +    do { \
  +        *result = (r); \
  +        goto result_exit; \
  +    } while (0)
  +
  +    /* special cases: NULL or equal UUIDs */
  +    if (a == b)
  +        RESULT(0);
  +    if (a == NULL && b == NULL)
  +        RESULT(0);
  +    if (a == NULL)
  +        RESULT((uuid_isnil(b, &r), r) ? 0 : -1);
  +    if (b == NULL)
  +        RESULT((uuid_isnil(a, &r), r) ? 0 : 1);
  +
  +    /* standard cases: regular different UUIDs */
  +    if (a->time_low != b->time_low)
  +        RESULT((a->time_low < b->time_low) ? -1 : 1);
  +    if ((r = (int)a->time_mid
  +           - (int)b->time_mid) != 0)
  +        RESULT((r < 0) ? -1 : 1);
  +    if ((r = (int)a->time_hi_and_version
  +           - (int)b->time_hi_and_version) != 0)
  +        RESULT((r < 0) ? -1 : 1);
  +    if ((r = (int)a->clock_seq_hi_and_reserved
  +           - (int)b->clock_seq_hi_and_reserved) != 0)
  +        RESULT((r < 0) ? -1 : 1);
  +    if ((r = (int)a->clock_seq_low
  +           - (int)b->clock_seq_low) != 0)
  +        RESULT((r < 0) ? -1 : 1);
  +    if ((r = memcmp(a->node, b->node, sizeof(a->node))) != 0)
  +        RESULT((r < 0) ? -1 : 1);
   
  -    /* we have to compare the hard way. */
  -    if (a->time_low != b->time_low) {
  -        *result = ((a->time_low < b->time_low) ? -1 : 1);
  -        return UUID_RC_OK;
  -    }
  -    if ((r = (int)a->time_mid - (int)b->time_mid) != 0) {
  -        *result = ((r < 0) ? -1 : 1);
  -        return UUID_RC_OK;
  -    }
  -    if ((r = (int)a->time_hi_and_version - (int)b->time_hi_and_version) != 0) {
  -        *result = ((r < 0) ? -1 : 1);
  -        return UUID_RC_OK;
  -    }
  -    if ((r = (int)a->clock_seq_hi_and_reserved - (int)b->clock_seq_hi_and_reserved) != 0) {
  -        *result = ((r < 0) ? -1 : 1);
  -        return UUID_RC_OK;
  -    }
  -    if ((r = (int)a->clock_seq_low - (int)b->clock_seq_low) != 0) {
  -        *result = ((r < 0) ? -1 : 1);
  -        return UUID_RC_OK;
  -    }
  -    if ((r = memcmp(a->node, b->node, sizeof(a->node))) != 0) {
  -        *result = ((r < 0) ? -1 : 1);
  -        return UUID_RC_OK;
  -    }
  -
  -    /* else the keys are equal */
  +    /* default case: the keys are equal */
       *result = 0;
  +
  +    result_exit:
       return UUID_RC_OK;
   }
   
   uuid_rc_t uuid_isnil(uuid_t *uuid, int *result)
   {
  +    const unsigned char *ucp;
  +    int i;
  +
  +    /* sanity check argument(s) */
       if (uuid == NULL || result == NULL)
           return UUID_RC_ARG;
  -    *result = 0;
  -    if (   uuid->time_low == 0
  -        && uuid->time_mid == 0
  -        && uuid->time_hi_and_version == 0
  -        && uuid->clock_seq_hi_and_reserved == 0
  -        && uuid->clock_seq_low == 0
  -        && uuid->node[0] == 0
  -        && uuid->node[1] == 0
  -        && uuid->node[2] == 0
  -        && uuid->node[3] == 0
  -        && uuid->node[4] == 0
  -        && uuid->node[5] == 0)
  -        *result = 1;
  +
  +    /* a "nil UUID" is defined as all octets zero, so check for this case */
  +    *result = TRUE;
  +    for (i = 0, ucp = (unsigned char *)uuid; i < UUID_LEN_BIN; i++) {
  +        if (*ucp++ != '\0') {
  +            *result = FALSE;
  +            break;
  +        }
  +    }
  +
       return UUID_RC_OK;
   }
   
  -uuid_rc_t uuid_parse(uuid_t *uuid, const char *str)
  +uuid_rc_t uuid_unpack(uuid_t *uuid, const void *buf)
   {
  -    if (uuid == NULL)
  +    const uuid_uint8_t *in;
  +    uuid_uint32_t tmp32;
  +    uuid_uint16_t tmp16;
  +    int i;
  +
  +    /* sanity check argument(s) */
  +    if (uuid == NULL || buf == NULL)
           return UUID_RC_ARG;
  -    /* FIXME */
  +
  +    /* treat input buffer as octet stream */
  +    in = (const uuid_uint8_t *)buf;
  +
  +    /* unpack "time_low" field */
  +    tmp32 = *in++;
  +    tmp32 = (tmp32 << 8) | *in++;
  +    tmp32 = (tmp32 << 8) | *in++;
  +    tmp32 = (tmp32 << 8) | *in++;
  +    uuid->time_low = tmp32;
  +
  +    /* unpack "time_mid" field */
  +    tmp16 = *in++;
  +    tmp16 = (tmp16 << 8) | *in++;
  +    uuid->time_mid = tmp16;
  +
  +    /* unpack "time_hi_and_version" field */
  +    tmp16 = *in++;
  +    tmp16 = (tmp16 << 8) | *in++;
  +    uuid->time_hi_and_version = tmp16;
  +
  +    /* unpack "clock_seq_hi_and_reserved" field */
  +    uuid->clock_seq_hi_and_reserved = *in++;
  +
  +    /* unpack "clock_seq_low" field */
  +    uuid->clock_seq_low = *in++;
  +
  +    /* unpack "node" field */
  +    for (i = 0; i < sizeof(uuid->node); i++)
  +        uuid->node[i] = *in++;
  +
       return UUID_RC_OK;
   }
   
  -uuid_rc_t uuid_format(uuid_t *uuid, char **str)
  +uuid_rc_t uuid_pack(uuid_t *uuid, void **buf)
   {
  +    uuid_uint8_t *out;
  +    uuid_uint32_t tmp32;
  +    uuid_uint16_t tmp16;
  +    int i;
  +
  +    /* sanity check argument(s) */
  +    if (uuid == NULL || buf == NULL)
  +        return UUID_RC_ARG;
  +
  +    /* optionally allocate octet buffer */
  +    if (*buf == NULL)
  +        if ((*buf = malloc(sizeof(uuid_t))) == NULL)
  +            return UUID_RC_MEM;
  +
  +    /* treat output buffer as octet stream */
  +    out = (uuid_uint8_t *)(*buf);
  +
  +    /* pack "time_low" field */
  +    tmp32 = uuid->time_low;
  +    out[3] = (uuid_uint8_t)(tmp32 & 0xff); tmp32 >>= 8;
  +    out[2] = (uuid_uint8_t)(tmp32 & 0xff); tmp32 >>= 8;
  +    out[1] = (uuid_uint8_t)(tmp32 & 0xff); tmp32 >>= 8;
  +    out[0] = (uuid_uint8_t)(tmp32 & 0xff);
  +
  +    /* pack "time_mid" field */
  +    tmp16 = uuid->time_mid;
  +    out[5] = (uuid_uint8_t)(tmp16 & 0xff); tmp16 >>= 8;
  +    out[4] = (uuid_uint8_t)(tmp16 & 0xff);
  +
  +    /* pack "time_hi_and_version" field */
  +    tmp16 = uuid->time_hi_and_version;
  +    out[7] = (uuid_uint8_t)(tmp16 & 0xff); tmp16 >>= 8;
  +    out[6] = (uuid_uint8_t)(tmp16 & 0xff);
  +
  +    /* pack "clock_seq_hi_and_reserved" field */
  +    out[8] = uuid->clock_seq_hi_and_reserved;
  +
  +    /* pack "clock_seq_low" field */
  +    out[9] = uuid->clock_seq_low;
  +
  +    /* pack "node" field */
  +    for (i = 0; i < sizeof(uuid->node); i++)
  +        out[10+i] = uuid->node[i];
  +
  +    return UUID_RC_OK;
  +}
  +
  +uuid_rc_t uuid_parse(uuid_t *uuid, const char *str)
  +{
  +    uuid_t uuid_tmp;
  +    uuid_uint16_t tmp16;
  +    const char *cp;
  +    char hexbuf[3];
  +    int i;
  +
  +    /* sanity check argument(s) */
       if (uuid == NULL || str == NULL)
           return UUID_RC_ARG;
  -    /* FIXME */
  +
  +    /*
  +     * pass 1: check UUID string representation syntax
  +     * example reference:
  +     *   f81d4fae-7dec-11d0-a765-00a0c91e6bf6
  +     *   012345678901234567890123456789012345
  +     *   0         1         2         3
  +     */
  +    if (strlen(str) != UUID_LEN_STR)
  +        return UUID_RC_ARG;
  +    for (i = 0, cp = str; i <= UUID_LEN_STR; i++, cp++) {
  +        if ((i == 8) || (i == 13) || (i == 18) || (i == 23)) {
  +            if (*cp == '-')
  +                continue;
  +            else
  +                return -1;
  +        }
  +        if (i == UUID_LEN_STR)
  +            if (*cp == '\0')
  +                continue;
  +        if (!isxdigit(*cp))
  +            return UUID_RC_ARG;
  +    }
  +
  +    /*
  +     * pass 2: parse hex values of string representation syntax
  +     */
  +    uuid_tmp.time_low            = (uuid_uint32_t)strtoul(str,    NULL, 16);
  +    uuid_tmp.time_mid            = (uuid_uint16_t)strtoul(str+9,  NULL, 16);
  +    uuid_tmp.time_hi_and_version = (uuid_uint16_t)strtoul(str+14, NULL, 16);
  +    tmp16 = (uuid_uint16_t)strtoul(str+19, NULL, 16);
  +    uuid_tmp.clock_seq_low             = (uuid_uint8_t)(tmp16 & 0xff); tmp16 >>= 8;
  +    uuid_tmp.clock_seq_hi_and_reserved = (uuid_uint8_t)(tmp16 & 0xff);
  +    cp = str+24;
  +    hexbuf[2] = '\0';
  +    for (i = 0; i < sizeof(uuid_tmp.node); i++) {
  +        hexbuf[0] = *cp++;
  +        hexbuf[1] = *cp++;
  +        uuid_tmp.node[i] = strtoul(hexbuf, NULL, 16);
  +    }
  +
       return UUID_RC_OK;
   }
   
  -uuid_rc_t uuid_read(uuid_t *uuid, const void *buf)
  +uuid_rc_t uuid_unparse(uuid_t *uuid, char **str)
   {
  -    if (uuid == NULL)
  +    uuid_t uuid_tmp;
  +
  +    /* sanity check argument(s) */
  +    if (uuid == NULL || str == NULL)
           return UUID_RC_ARG;
  -    /* FIXME */
  +
  +    /* optionally allocate string buffer */
  +    if (*str == NULL)
  +        if ((*str = (char *)malloc(UUID_LEN_STR+1)) == NULL)
  +            return UUID_RC_MEM;
  +
  +    /* format UUID into string representation */
  +    sprintf(*str,
  +        "%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
  +        (unsigned long)uuid_tmp.time_low,
  +        (unsigned int)uuid_tmp.time_mid,
  +        (unsigned int)uuid_tmp.time_hi_and_version,
  +        (unsigned int)uuid_tmp.clock_seq_hi_and_reserved,
  +        (unsigned int)uuid_tmp.clock_seq_low,
  +        (unsigned int)uuid_tmp.node[0],
  +        (unsigned int)uuid_tmp.node[1],
  +        (unsigned int)uuid_tmp.node[2],
  +        (unsigned int)uuid_tmp.node[3],
  +        (unsigned int)uuid_tmp.node[4],
  +        (unsigned int)uuid_tmp.node[5]);
  +
       return UUID_RC_OK;
   }
   
  -uuid_rc_t uuid_write(uuid_t *uuid, void **buf)
  +uuid_rc_t uuid_generate(uuid_t *uuid, unsigned int mode, ...)
   {
  -    if (uuid == NULL || buf == NULL)
  +    va_list ap;
  +
  +    /* sanity check argument(s) */
  +    if (uuid == NULL)
           return UUID_RC_ARG;
  +    va_start(ap, mode);
       /* FIXME */
  +    va_end(ap);
       return UUID_RC_OK;
   }
   
   uuid_rc_t uuid_dump(uuid_t *uuid, char **str)
   {
  +    /* sanity check argument(s) */
       if (uuid == NULL || str == NULL)
           return UUID_RC_ARG;
       /* FIXME */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.h
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 uuid.h
  --- ossp-pkg/uuid/uuid.h	9 Jan 2004 09:06:25 -0000	1.4
  +++ ossp-pkg/uuid/uuid.h	9 Jan 2004 11:28:56 -0000	1.5
  @@ -69,7 +69,7 @@
   
   /* encoding octet stream lengths */
   #define UUID_LEN_BIN (128 / 8 /*bytes*/)
  -#define UUID_LEN_STR (128 / 4 /*nibbles*/ + 4 /*hyphens*/ + 1 /*nul*/)
  +#define UUID_LEN_STR (128 / 4 /*nibbles*/ + 4 /*hyphens*/)
   
   /* return codes */
   typedef enum {
  @@ -94,24 +94,22 @@
   /* object handling */
   extern uuid_rc_t  uuid_create   (uuid_t **uuid);
   extern uuid_rc_t  uuid_destroy  (uuid_t  *uuid);
  -extern uuid_rc_t  uuid_null     (uuid_t  *uuid);
  +extern uuid_rc_t  uuid_nil      (uuid_t  *uuid);
   
   /* UUID comparison */
   extern uuid_rc_t  uuid_compare  (uuid_t  *uuid, uuid_t *uuid2, int *result);
   extern uuid_rc_t  uuid_isnil    (uuid_t  *uuid,                int *result);
   
  -/* UUID generation */
  -extern uuid_rc_t  uuid_generate (uuid_t  *uuid, unsigned int mode, ...);
  +/* binary representation handling */
  +extern uuid_rc_t  uuid_unpack   (uuid_t  *uuid, const void  *buf);
  +extern uuid_rc_t  uuid_pack     (uuid_t  *uuid,       void **buf);
   
   /* string representation handling */
   extern uuid_rc_t  uuid_parse    (uuid_t  *uuid, const char  *str);
  -extern uuid_rc_t  uuid_format   (uuid_t  *uuid,       char **str);
  +extern uuid_rc_t  uuid_unparse  (uuid_t  *uuid,       char **str);
   
  -/* binary representation handling */
  -extern uuid_rc_t  uuid_read     (uuid_t  *uuid, const void  *buf);
  -extern uuid_rc_t  uuid_write    (uuid_t  *uuid,       void **buf);
  -
  -/* UUID dumping */
  +/* UUID generation and dumping */
  +extern uuid_rc_t  uuid_generate (uuid_t  *uuid, unsigned int mode, ...);
   extern uuid_rc_t  uuid_dump     (uuid_t  *uuid, char **str);
   
   /* error handling */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuidtool.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 uuidtool.c
  --- ossp-pkg/uuid/uuidtool.c	8 Jan 2004 21:31:47 -0000	1.3
  +++ ossp-pkg/uuid/uuidtool.c	9 Jan 2004 11:28:56 -0000	1.4
  @@ -156,8 +156,8 @@
           }
           for (i = 0; i < count; i++) {
               if (iterate) {
  -                if ((rc = uuid_null(uuid)) != UUID_RC_OK)
  -                    error(1, "uuid_null: %s", uuid_error(rc));
  +                if ((rc = uuid_nil(uuid)) != UUID_RC_OK)
  +                    error(1, "uuid_nil: %s", uuid_error(rc));
               }
               if (version == UUID_VERSION3)
                   rc = uuid_generate(uuid, version, argv[0]);
  @@ -167,15 +167,15 @@
                   error(1, "uuid_generate: %s", uuid_error(rc));
               if (ascii) {
                   cp = NULL;
  -                if ((rc = uuid_format(uuid, &cp)) != UUID_RC_OK)
  -                    error(1, "uuid_format: %s", uuid_error(rc));
  +                if ((rc = uuid_unparse(uuid, &cp)) != UUID_RC_OK)
  +                    error(1, "uuid_unparse: %s", uuid_error(rc));
                   fprintf(fp, "%s\n", cp);
                   free(cp);
               }
               else {
                   vp = NULL;
  -                if ((rc = uuid_write(uuid, &vp)) != UUID_RC_OK)
  -                    error(1, "uuid_format: %s", uuid_error(rc));
  +                if ((rc = uuid_unpack(uuid, &vp)) != UUID_RC_OK)
  +                    error(1, "uuid_unpack: %s", uuid_error(rc));
                   fwrite(vp, UUID_LEN_BIN, 1, fp);
                   free(vp);
               }
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jan  9 12:32:07 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EBFE4772CD; Fri,  9 Jan 2004 12:32:06 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ Makefile.in uuid.c uuid_ui64.c uuid_ui64.h
Message-Id: <20040109113206.EBFE4772CD@mail.ossp.org>
Date: Fri,  9 Jan 2004 12:32:06 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Jan-2004 12:32:06
  Branch: HEAD                             Handle: 2004010911320600

  Added files:
    ossp-pkg/uuid           uuid_ui64.c uuid_ui64.h
  Modified files:
    ossp-pkg/uuid           Makefile.in uuid.c

  Log:
    add copy of OSSP ui64 for 64-bit arithmetics

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/uuid/Makefile.in
    1.6         +1  -0      ossp-pkg/uuid/uuid.c
    1.1         +582 -0     ossp-pkg/uuid/uuid_ui64.c
    1.1         +113 -0     ossp-pkg/uuid/uuid_ui64.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	6 Jan 2004 20:20:12 -0000	1.2
  +++ ossp-pkg/uuid/Makefile.in	9 Jan 2004 11:32:06 -0000	1.3
  @@ -50,7 +50,7 @@
   POD2MAN     = pod2man
   
   LIB_NAME    = libuuid.la
  -LIB_OBJS    = uuid.lo
  +LIB_OBJS    = uuid.lo uuid_ui64.lo
   
   PRG_NAME    = uuidtool
   PRG_OBJS    = uuidtool.o
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 uuid.c
  --- ossp-pkg/uuid/uuid.c	9 Jan 2004 11:28:56 -0000	1.5
  +++ ossp-pkg/uuid/uuid.c	9 Jan 2004 11:32:06 -0000	1.6
  @@ -36,6 +36,7 @@
   
   #include "config.h"
   #include "uuid.h"
  +#include "uuid_ui64.h"
   
   /* determine types of 8-bit size */
   #if SIZEOF_CHAR == 1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_ui64.c
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid_ui64.c
  --- /dev/null	2004-01-09 12:32:06.000000000 +0100
  +++ uuid_ui64.c	2004-01-09 12:32:06.000000000 +0100
  @@ -0,0 +1,582 @@
  +/*
  +**  OSSP ui64 - 64-Bit Arithmetic
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +**
  +**  This file is part of OSSP ui64, a 64-bit arithmetic library
  +**  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  ui64.c: implementation of 64-bit unsigned integer arithmetic
  +*/
  +
  +#include <string.h>
  +#include <ctype.h>
  +
  +#include "uuid_ui64.h"
  +
  +#define UI64_BASE   256 /* 2^8 */
  +#define UI64_DIGITS 8   /* 8*8 = 64 bit */
  +#define UIXX_T(n) struct { unsigned char x[n]; }
  +
  +/* fill an ui64_t with a sequence of a particular digit */
  +#define ui64_fill(__x, __n) \
  +    do { int __i; \
  +      for (__i = 0; __i < UI64_DIGITS; __i++) \
  +          (__x).x[__i] = (__n); \
  +    } while(0)
  +
  +/* the value zero */
  +ui64_t ui64_zero(void)
  +{
  +    ui64_t z;
  +
  +    ui64_fill(z, 0);
  +    return z;
  +}
  +
  +/* the maximum value */
  +ui64_t ui64_max(void)
  +{
  +    ui64_t z;
  +
  +    ui64_fill(z, UI64_BASE-1);
  +    return z;
  +}
  +
  +/* convert ISO-C "unsigned long" into internal format */
  +ui64_t ui64_n2i(unsigned long n)
  +{
  +    ui64_t z;
  +    int i;
  +
  +    i = 0;
  +    do {
  +        z.x[i++] = (n % UI64_BASE);
  +    } while ((n /= UI64_BASE) > 0 && i < UI64_DIGITS);
  +    for ( ; i < UI64_DIGITS; i++)
  +        z.x[i] = 0;
  +    return z;
  +}
  +
  +/* convert internal format into ISO-C "unsigned long";
  +   truncates if sizeof(unsigned long) is less than UI64_DIGITS! */
  +unsigned long ui64_i2n(ui64_t x)
  +{
  +    unsigned long n;
  +    int i;
  +
  +    n = 0;
  +    i = (int)sizeof(n);
  +    if (i > UI64_DIGITS)
  +        i = UI64_DIGITS;
  +    while (--i >= 0) {
  +        n = (n * UI64_BASE) + x.x[i];
  +    }
  +    return n;
  +}
  +
  +/* convert string representation of arbitrary base into internal format */
  +ui64_t ui64_s2i(const char *str, char **end, int base)
  +{
  +    ui64_t z;
  +    const char *cp;
  +    int carry;
  +    static char map[] = {
  +         0,  1,  2,  3,  4,  5,  6,  7,  8,  9,             /* 0...9 */
  +        36, 36, 36, 36, 36, 36, 36,                         /* illegal chars */
  +        10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, /* A...M */
  +        23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, /* N...Z */
  +        36, 36, 36, 36, 36, 36,                             /* illegal chars */
  +        10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, /* a...m */
  +        23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35  /* m...z */
  +    };
  +
  +    ui64_fill(z, 0);
  +    if (str == NULL || (base < 2 || base > 36))
  +        return z;
  +    cp = str;
  +    while (*cp != '\0' && isspace((int)(*cp)))
  +        cp++;
  +    while (   *cp != '\0'
  +           && isalnum((int)(*cp))
  +           && map[(int)(*cp)-'0'] < base) {
  +        z = ui64_muln(z, base, &carry);
  +        if (carry)
  +            break;
  +        z = ui64_addn(z, map[(int)(*cp)-'0'], &carry);
  +        if (carry)
  +            break;
  +        cp++;
  +    }
  +    if (end != NULL)
  +        *end = (char *)cp;
  +    return z;
  +}
  +
  +/* convert internal format into string representation of arbitrary base */
  +char *ui64_i2s(ui64_t x, char *str, size_t len, int base)
  +{
  +    static char map[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  +    char c;
  +    int r;
  +    int n;
  +    int i, j;
  +
  +    if (str == NULL || len < 2 || (base < 2 || base > 36))
  +        return NULL;
  +    n = ui64_len(x);
  +    i = 0;
  +	do {
  +		x = ui64_divn(x, base, &r);
  +		str[i++] = map[r];
  +		while (n > 1 && x.x[n-1] == 0)
  +			n--;
  +	} while (i < (len-1) && (n > 1 || x.x[0] != 0));
  +	str[i] = '\0';
  +    for (j = 0; j < --i; j++) {
  +        c = str[j];
  +        str[j] = str[i];
  +        str[i] = c;
  +    }
  +	return str;
  +}
  +
  +/* addition of two ui64_t */
  +ui64_t ui64_add(ui64_t x, ui64_t y, ui64_t *ov)
  +{
  +    ui64_t z;
  +    int carry;
  +    int i;
  +
  +    carry = 0;
  +    for (i = 0; i < UI64_DIGITS; i++) {
  +        carry += (x.x[i] + y.x[i]);
  +        z.x[i] = (carry % UI64_BASE);
  +        carry /= UI64_BASE;
  +    }
  +    if (ov != NULL)
  +        *ov = ui64_n2i((unsigned long)carry);
  +    return z;
  +}
  +
  +/* addition of an ui64_t and a single digit */
  +ui64_t ui64_addn(ui64_t x, int y, int *ov)
  +{
  +    ui64_t z;
  +    int i;
  +
  +    for (i = 0; i < UI64_DIGITS; i++) {
  +        y += x.x[i];
  +        z.x[i] = (y % UI64_BASE);
  +        y /= UI64_BASE;
  +    }
  +    if (ov != NULL)
  +        *ov = y;
  +    return z;
  +}
  +
  +/* subtraction of two ui64_t */
  +ui64_t ui64_sub(ui64_t x, ui64_t y, ui64_t *ov)
  +{
  +    ui64_t z;
  +    int borrow;
  +    int i;
  +    int d;
  +
  +    borrow = 0;
  +    for (i = 0; i < UI64_DIGITS; i++) {
  +        d = ((x.x[i] + UI64_BASE) - borrow - y.x[i]);
  +        z.x[i] = (d % UI64_BASE);
  +        borrow = (1 - (d/UI64_BASE));
  +    }
  +    if (ov != NULL)
  +        *ov = ui64_n2i((unsigned long)borrow);
  +    return z;
  +}
  +
  +/* subtraction of an ui64_t and a single digit */
  +ui64_t ui64_subn(ui64_t x, int y, int *ov)
  +{
  +    ui64_t z;
  +    int i;
  +    int d;
  +
  +    for (i = 0; i < UI64_DIGITS; i++) {
  +        d = (x.x[i] + UI64_BASE) - y;
  +        z.x[i] = (d % UI64_BASE);
  +        y = (1 - (d/UI64_BASE));
  +    }
  +    if (ov != NULL)
  +        *ov = y;
  +    return z;
  +}
  +
  +/*
  +             7 3 2
  +         * 9 4 2 8
  +         ---------
  +           5 8 5 6
  +   +     1 4 6 4
  +   +   2 9 2 8
  +   + 6 5 8 8
  +   ---------------
  +   = 6 9 0 1 2 9 6
  +*/
  +
  +ui64_t ui64_mul(ui64_t x, ui64_t y, ui64_t *ov)
  +{
  +    UIXX_T(UI64_DIGITS+UI64_DIGITS) zx;
  +    ui64_t z;
  +    int carry;
  +    int i, j;
  +
  +    /* clear temporary result buffer */
  +    for (i = 0; i < (UI64_DIGITS+UI64_DIGITS); i++)
  +        zx.x[i] = 0;
  +
  +    /* perform multiplication operation */
  +    for (i = 0; i < UI64_DIGITS; i++) {
  +        /* calculate partial product and immediately add to z */
  +        carry = 0;
  +        for (j = 0; j < UI64_DIGITS; j++) {
  +            carry += (x.x[i] * y.x[j]) + zx.x[i+j];
  +            zx.x[i+j] = (carry % UI64_BASE);
  +            carry /= UI64_BASE;
  +        }
  +        /* add carry to remaining digits in z */
  +        for ( ; j < UI64_DIGITS + UI64_DIGITS - i; j++) {
  +            carry += zx.x[i+j];
  +            zx.x[i+j] = (carry % UI64_BASE);
  +            carry /= UI64_BASE;
  +        }
  +    }
  +
  +    /* provide result by splitting zx into z and ov */
  +    memcpy(z.x, zx.x, UI64_DIGITS);
  +    if (ov != NULL)
  +        memcpy((*ov).x, &zx.x[UI64_DIGITS], UI64_DIGITS);
  +
  +    return z;
  +}
  +
  +ui64_t ui64_muln(ui64_t x, int y, int *ov)
  +{
  +    ui64_t z;
  +    int carry;
  +    int i;
  +
  +    carry = 0;
  +    for (i = 0; i < UI64_DIGITS; i++) {
  +        carry += (x.x[i] * y);
  +        z.x[i] = (carry % UI64_BASE);
  +        carry /= UI64_BASE;
  +    }
  +    if (ov != NULL)
  +        *ov = carry;
  +    return z;
  +}
  +
  +/*
  +  =   2078 [q]
  +   0615367 [x] : 296 [y]
  +  -0592    [dq]
  +  -----
  +  = 0233
  +   -0000   [dq]
  +   -----
  +   = 2336
  +    -2072  [dq]
  +    -----
  +    = 2647
  +     -2308 [dq]
  +     -----
  +     = 279 [r]
  + */
  +ui64_t ui64_div(ui64_t x, ui64_t y, ui64_t *ov)
  +{
  +    ui64_t q;
  +    ui64_t r;
  +    int i;
  +    int n, m;
  +    int ovn;
  +
  +    /* determine actual number of involved digits */
  +    n = ui64_len(x);
  +    m = ui64_len(y);
  +
  +    if (m == 1) {
  +        /* simple case #1: reduceable to ui64_divn() */
  +        if (y.x[0] == 0) {
  +            /* error case: division by zero! */
  +            ui64_fill(q, 0);
  +            ui64_fill(r, 0);
  +        }
  +        else {
  +            q = ui64_divn(x, y.x[0], &ovn);
  +            ui64_fill(r, 0);
  +            r.x[0] = (unsigned char)ovn;
  +        }
  +
  +    } else if (n < m) {
  +        /* simple case #2: everything is in the remainder */
  +        ui64_fill(q, 0);
  +        r = x;
  +
  +    } else { /* n >= m, m > 1 */
  +        /* standard case: x[0..n] / y[0..m] */
  +        UIXX_T(UI64_DIGITS+1) rx;
  +        UIXX_T(UI64_DIGITS+1) dq;
  +        ui64_t t;
  +        int km;
  +        int k;
  +        int qk;
  +        unsigned long y2;
  +        unsigned long r3;
  +        int borrow;
  +        int d;
  +
  +        /* rx is x with a leading zero in order to make
  +           sure that n > m and not just n >= m */
  +        memcpy(rx.x, x.x, UI64_DIGITS);
  +        rx.x[UI64_DIGITS] = 0;
  +
  +        for (k = n - m; k >= 0; k--) {
  +            /* efficiently compute qk by guessing
  +               qk := rx[k+m-2...k+m]/y[m-2...m-1] */
  +            km = k + m;
  +            y2 = (y.x[m-1]*UI64_BASE) + y.x[m-2];
  +            r3 = (rx.x[km]*(UI64_BASE*UI64_BASE)) +
  +                 (rx.x[km-1]*UI64_BASE) + rx.x[km-2];
  +            qk = r3 / y2;
  +            if (qk >= UI64_BASE)
  +                qk = UI64_BASE - 1;
  +
  +            /* dq := y*qk (post-adjust qk if guessed incorrectly) */
  +            t = ui64_muln(y, qk, &ovn);
  +            memcpy(dq.x, t.x, UI64_DIGITS);
  +            dq.x[m] = (unsigned char)ovn;
  +            for (i = m; i > 0; i--)
  +                if (rx.x[i+k] != dq.x[i])
  +                    break;
  +            if (rx.x[i+k] < dq.x[i]) {
  +                t = ui64_muln(y, --qk, &ovn);
  +                memcpy(dq.x, t.x, UI64_DIGITS);
  +                dq.x[m] = (unsigned char)ovn;
  +            }
  +
  +            /* store qk */
  +            q.x[k] = (unsigned char)qk;
  +
  +            /* rx := rx - dq*(b^k) */
  +            borrow = 0;
  +            for (i = 0; i < m+1; i++) {
  +                d = ((rx.x[k+i] + UI64_BASE) - borrow - dq.x[i]);
  +                rx.x[k+i] = (d % UI64_BASE);
  +                borrow = (1 - (d/UI64_BASE));
  +            }
  +        }
  +        memcpy(r.x, rx.x, m);
  +
  +        /* fill out results with leading zeros */
  +        for (i = n-m+1; i < UI64_DIGITS; i++)
  +            q.x[i] = 0;
  +        for (i = m; i < UI64_DIGITS; i++)
  +            r.x[i] = 0;
  +    }
  +
  +    /* provide results */
  +    if (ov != NULL)
  +        *ov = r;
  +    return q;
  +}
  +
  +ui64_t ui64_divn(ui64_t x, int y, int *ov)
  +{
  +    ui64_t z;
  +    unsigned int carry;
  +    int i;
  +
  +    carry = 0;
  +    for (i = (UI64_DIGITS - 1); i >= 0; i--) {
  +        carry = (carry * UI64_BASE) + x.x[i];
  +        z.x[i] = (carry / y);
  +        carry %= y;
  +    }
  +    if (ov != NULL)
  +        *ov = carry;
  +    return z;
  +}
  +
  +ui64_t ui64_and(ui64_t x, ui64_t y)
  +{
  +    ui64_t z;
  +    int i;
  +
  +    for (i = 0; i < UI64_DIGITS; i++)
  +        z.x[i] = (x.x[i] & y.x[i]);
  +    return z;
  +}
  +
  +ui64_t ui64_or(ui64_t x, ui64_t y)
  +{
  +    ui64_t z;
  +    int i;
  +
  +    for (i = 0; i < UI64_DIGITS; i++)
  +        z.x[i] = (x.x[i] | y.x[i]);
  +    return z;
  +}
  +
  +ui64_t ui64_xor(ui64_t x, ui64_t y)
  +{
  +    ui64_t z;
  +    int i;
  +
  +    for (i = 0; i < UI64_DIGITS; i++)
  +        z.x[i] = ((x.x[i] & ~(y.x[i])) | (~(x.x[i]) & (y.x[i])));
  +    return z;
  +}
  +
  +ui64_t ui64_not(ui64_t x)
  +{
  +    ui64_t z;
  +    int i;
  +
  +    for (i = 0; i < UI64_DIGITS; i++)
  +        z.x[i] = ~(x.x[i]);
  +    return z;
  +}
  +
  +ui64_t ui64_rol(ui64_t x, int s, ui64_t *ov)
  +{
  +    UIXX_T(UI64_DIGITS+UI64_DIGITS) zx;
  +    ui64_t z;
  +	int i;
  +    int carry;
  +
  +    if (s <= 0) {
  +        /* no shift at all */
  +        if (ov != NULL)
  +            *ov = ui64_zero();
  +        return x;
  +    }
  +    else if (s > 64) {
  +        /* too large shift */
  +        if (ov != NULL)
  +            *ov = ui64_zero();
  +        return ui64_zero();
  +    }
  +    else if (s == 64) {
  +        /* maximum shift */
  +        if (ov != NULL)
  +            *ov = x;
  +        return ui64_zero();
  +    }
  +    else { /* regular shift */
  +        /* shift (logically) left by s/8 bytes */
  +        for (i = 0; i < UI64_DIGITS+UI64_DIGITS; i++)
  +            zx.x[i] = 0;
  +        for (i = 0; i < UI64_DIGITS; i++)
  +            zx.x[i+(s/8)] = x.x[i];
  +        /* shift (logically) left by remaining s%8 bits */
  +        s %= 8;
  +        if (s > 0) {
  +            carry = 0;
  +            for (i = 0; i < UI64_DIGITS+UI64_DIGITS; i++) {
  +                carry += (zx.x[i] * (1 << s));
  +                zx.x[i] = (carry % UI64_BASE);
  +                carry /= UI64_BASE;
  +            }
  +        }
  +        memcpy(z.x, zx.x, UI64_DIGITS);
  +        if (ov != NULL)
  +            memcpy((*ov).x, &zx.x[UI64_DIGITS], UI64_DIGITS);
  +    }
  +    return z;
  +}
  +
  +ui64_t ui64_ror(ui64_t x, int s, ui64_t *ov)
  +{
  +    UIXX_T(UI64_DIGITS+UI64_DIGITS) zx;
  +    ui64_t z;
  +	int i;
  +    int carry;
  +
  +    if (s <= 0) {
  +        /* no shift at all */
  +        if (ov != NULL)
  +            *ov = ui64_zero();
  +        return x;
  +    }
  +    else if (s > 64) {
  +        /* too large shift */
  +        if (ov != NULL)
  +            *ov = ui64_zero();
  +        return ui64_zero();
  +    }
  +    else if (s == 64) {
  +        /* maximum shift */
  +        if (ov != NULL)
  +            *ov = x;
  +        return ui64_zero();
  +    }
  +    else { /* regular shift */
  +        /* shift (logically) right by s/8 bytes */
  +        for (i = 0; i < UI64_DIGITS+UI64_DIGITS; i++)
  +            zx.x[i] = 0;
  +        for (i = 0; i < UI64_DIGITS; i++)
  +            zx.x[UI64_DIGITS+i-(s/8)] = x.x[i];
  +        /* shift (logically) right by remaining s%8 bits */
  +        s %= 8;
  +        if (s > 0) {
  +            carry = 0;
  +            for (i = (UI64_DIGITS+UI64_DIGITS - 1); i >= 0; i--) {
  +                carry = (carry * UI64_BASE) + zx.x[i];
  +                zx.x[i] = (carry / (1 << s));
  +                carry %= (1 << s);
  +            }
  +        }
  +        memcpy(z.x, &zx.x[UI64_DIGITS], UI64_DIGITS);
  +        if (ov != NULL)
  +            memcpy((*ov).x, zx.x, UI64_DIGITS);
  +    }
  +    return z;
  +}
  +
  +int ui64_cmp(ui64_t x, ui64_t y)
  +{
  +    int i;
  +
  +    i = UI64_DIGITS - 1;
  +    while (i > 0 && x.x[i] == y.x[i])
  +        i--;
  +    return (x.x[i] - y.x[i]);
  +}
  +
  +int ui64_len(ui64_t x)
  +{
  +    int i;
  +
  +    for (i = UI64_DIGITS; i > 1 && x.x[i-1] == 0; i--)
  +        ;
  +    return i;
  +}
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_ui64.h
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid_ui64.h
  --- /dev/null	2004-01-09 12:32:06.000000000 +0100
  +++ uuid_ui64.h	2004-01-09 12:32:06.000000000 +0100
  @@ -0,0 +1,113 @@
  +/*
  +**  OSSP ui64 - 64-Bit Arithmetic
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +**
  +**  This file is part of OSSP ui64, a 64-bit arithmetic library
  +**  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  ui64.h: API declaration
  +*/
  +
  +#ifndef __UI64_H__
  +#define __UI64_H__
  +
  +#include <string.h>
  +
  +#define UI64_PREFIX uuid_
  +
  +/* embedding support */
  +#ifdef UI64_PREFIX
  +#if defined(__STDC__) || defined(__cplusplus)
  +#define __UI64_CONCAT(x,y) x ## y
  +#define UI64_CONCAT(x,y) __UI64_CONCAT(x,y)
  +#else
  +#define __UI64_CONCAT(x) x
  +#define UI64_CONCAT(x,y) __UI64_CONCAT(x)y
  +#endif
  +#define ui64_t     UI64_CONCAT(UI64_PREFIX,ui64_t)
  +#define ui64_zero  UI64_CONCAT(UI64_PREFIX,ui64_zero)
  +#define ui64_max   UI64_CONCAT(UI64_PREFIX,ui64_max)
  +#define ui64_n2i   UI64_CONCAT(UI64_PREFIX,ui64_n2i)
  +#define ui64_i2n   UI64_CONCAT(UI64_PREFIX,ui64_i2n)
  +#define ui64_s2i   UI64_CONCAT(UI64_PREFIX,ui64_s2i)
  +#define ui64_i2s   UI64_CONCAT(UI64_PREFIX,ui64_i2s)
  +#define ui64_add   UI64_CONCAT(UI64_PREFIX,ui64_add)
  +#define ui64_addn  UI64_CONCAT(UI64_PREFIX,ui64_addn)
  +#define ui64_sub   UI64_CONCAT(UI64_PREFIX,ui64_sub)
  +#define ui64_subn  UI64_CONCAT(UI64_PREFIX,ui64_subn)
  +#define ui64_mul   UI64_CONCAT(UI64_PREFIX,ui64_mul)
  +#define ui64_muln  UI64_CONCAT(UI64_PREFIX,ui64_muln)
  +#define ui64_div   UI64_CONCAT(UI64_PREFIX,ui64_div)
  +#define ui64_divn  UI64_CONCAT(UI64_PREFIX,ui64_divn)
  +#define ui64_and   UI64_CONCAT(UI64_PREFIX,ui64_and)
  +#define ui64_or    UI64_CONCAT(UI64_PREFIX,ui64_or)
  +#define ui64_xor   UI64_CONCAT(UI64_PREFIX,ui64_xor)
  +#define ui64_not   UI64_CONCAT(UI64_PREFIX,ui64_not)
  +#define ui64_rol   UI64_CONCAT(UI64_PREFIX,ui64_rol)
  +#define ui64_ror   UI64_CONCAT(UI64_PREFIX,ui64_ror)
  +#define ui64_len   UI64_CONCAT(UI64_PREFIX,ui64_len)
  +#define ui64_cmp   UI64_CONCAT(UI64_PREFIX,ui64_cmp)
  +#endif
  +
  +typedef struct {
  +    unsigned char x[8]; /* x_0, ..., x_7 */
  +} ui64_t;
  +
  +#define ui64_cons(x7,x6,x5,x4,x3,x2,x1,x0) \
  +    { { 0x##x0, 0x##x1, 0x##x2, 0x##x3, 0x##x4, 0x##x5, 0x##x6, 0x##x7 } }
  +
  +/* particular values */
  +extern ui64_t        ui64_zero (void);
  +extern ui64_t        ui64_max  (void);
  +
  +/* import and export via ISO-C "unsigned long" */
  +extern ui64_t        ui64_n2i  (unsigned long n);
  +extern unsigned long ui64_i2n  (ui64_t x);
  +
  +/* import and export via ISO-C string of arbitrary base */
  +extern ui64_t        ui64_s2i  (const char *str, char **end, int base);
  +extern char *        ui64_i2s  (ui64_t x, char *str, size_t len, int base);
  +
  +/* arithmetical operations */
  +extern ui64_t        ui64_add  (ui64_t x, ui64_t y, ui64_t *ov);
  +extern ui64_t        ui64_addn (ui64_t x, int    y, int    *ov);
  +extern ui64_t        ui64_sub  (ui64_t x, ui64_t y, ui64_t *ov);
  +extern ui64_t        ui64_subn (ui64_t x, int    y, int    *ov);
  +extern ui64_t        ui64_mul  (ui64_t x, ui64_t y, ui64_t *ov);
  +extern ui64_t        ui64_muln (ui64_t x, int    y, int    *ov);
  +extern ui64_t        ui64_div  (ui64_t x, ui64_t y, ui64_t *ov);
  +extern ui64_t        ui64_divn (ui64_t x, int    y, int    *ov);
  +
  +/* bit operations */
  +extern ui64_t        ui64_and  (ui64_t x, ui64_t y);
  +extern ui64_t        ui64_or   (ui64_t x, ui64_t y);
  +extern ui64_t        ui64_xor  (ui64_t x, ui64_t y);
  +extern ui64_t        ui64_not  (ui64_t x);
  +extern ui64_t        ui64_rol  (ui64_t x, int s, ui64_t *ov);
  +extern ui64_t        ui64_ror  (ui64_t x, int s, ui64_t *ov);
  +
  +/* other operations */
  +extern int           ui64_len  (ui64_t x);
  +extern int           ui64_cmp  (ui64_t x, ui64_t y);
  +
  +#endif /* __UI64_H__ */
  +
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jan  9 16:49:41 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6B017772DD; Fri,  9 Jan 2004 16:49:41 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ Makefile.in uuid_md5.c uuid_md5.h
Message-Id: <20040109154941.6B017772DD@mail.ossp.org>
Date: Fri,  9 Jan 2004 16:49:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Jan-2004 16:49:41
  Branch: HEAD                             Handle: 2004010915494000

  Added files:
    ossp-pkg/uuid           uuid_md5.c uuid_md5.h
  Modified files:
    ossp-pkg/uuid           Makefile.in

  Log:
    add RFC-derived and cleaned up MD5 implementation

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/uuid/Makefile.in
    1.1         +446 -0     ossp-pkg/uuid/uuid_md5.c
    1.1         +74 -0      ossp-pkg/uuid/uuid_md5.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	9 Jan 2004 11:32:06 -0000	1.3
  +++ ossp-pkg/uuid/Makefile.in	9 Jan 2004 15:49:40 -0000	1.4
  @@ -50,7 +50,7 @@
   POD2MAN     = pod2man
   
   LIB_NAME    = libuuid.la
  -LIB_OBJS    = uuid.lo uuid_ui64.lo
  +LIB_OBJS    = uuid.lo uuid_md5.lo uuid_ui64.lo
   
   PRG_NAME    = uuidtool
   PRG_OBJS    = uuidtool.o
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_md5.c
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid_md5.c
  --- /dev/null	2004-01-09 16:49:40.000000000 +0100
  +++ uuid_md5.c	2004-01-09 16:49:41.000000000 +0100
  @@ -0,0 +1,446 @@
  +/*
  +**  OSSP uuid - Universally Unique Identifier
  +**  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +**
  +**  This file is part of OSSP uuid, a library for the generation
  +**  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  uuid_md5.c: MD5 API implementation
  +*/
  +
  +#include <stdlib.h>
  +#include <string.h>
  +
  +#include "uuid_md5.h"
  +
  +/*
  + * This is a RFC 1321 compliant Message Digest 5 (MD5) algorithm
  + * implementation. It is directly derived from the RSA code published in
  + * RFC 1321 with just the following functionality keeping changes:
  + * - converted function definitions from K&R to ANSI C
  + * - included contents of the "global.h" and "md5.h" headers
  + * - moved the SXX defines into the MD5Transform function
  + * - replaced MD5_memcpy() with memcpy(3) and MD5_memset() with memset(3)
  + * - renamed "index" variables to "idx" to avoid namespace conflicts
  + * - reformatted C style to conform with OSSP C style
  + * - added own OSSP style frontend API
  + */
  +
  +/*
  +** ==== BEGIN RFC 1321 CODE ====
  +*/
  +
  +/*
  + * RSA Data Security, Inc., MD5 message-digest algorithm
  + * Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991.
  + * All rights reserved.
  + *
  + * License to copy and use this software is granted provided that it
  + * is identified as the "RSA Data Security, Inc. MD5 Message-Digest
  + * Algorithm" in all material mentioning or referencing this software
  + * or this function.
  + *
  + * License is also granted to make and use derivative works provided
  + * that such works are identified as "derived from the RSA Data
  + * Security, Inc. MD5 Message-Digest Algorithm" in all material
  + * mentioning or referencing the derived work.
  + *
  + * RSA Data Security, Inc. makes no representations concerning either
  + * the merchantability of this software or the suitability of this
  + * software for any particular purpose. It is provided "as is"
  + * without express or implied warranty of any kind.
  + *
  + * These notices must be retained in any copies of any part of this
  + * documentation and/or software.
  + */
  +
  +/* POINTER defines a generic pointer type */
  +typedef unsigned char *POINTER;
  +
  +/* UINT2 defines a two byte word */
  +typedef unsigned short int UINT2;
  +
  +/* UINT4 defines a four byte word */
  +typedef unsigned long int UINT4;
  +
  +/* MD5 context. */
  +typedef struct {
  +  UINT4 state[4];                                   /* state (ABCD) */
  +  UINT4 count[2];        /* number of bits, modulo 2^64 (lsb first) */
  +  unsigned char buffer[64];                         /* input buffer */
  +} MD5_CTX;
  +
  +static void MD5Init      (MD5_CTX *_ctx);
  +static void MD5Update    (MD5_CTX *_ctx, unsigned char *, unsigned int);
  +static void MD5Final     (unsigned char [16], MD5_CTX *);
  +
  +static void MD5Transform (UINT4 [4], unsigned char [64]);
  +static void Encode       (unsigned char *, UINT4 *, unsigned int);
  +static void Decode       (UINT4 *, unsigned char *, unsigned int);
  +
  +static unsigned char PADDING[64] = {
  +  0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  +  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  +  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  +};
  +
  +/* F, G, H and I are basic MD5 functions. */
  +#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
  +#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
  +#define H(x, y, z) ((x) ^ (y) ^ (z))
  +#define I(x, y, z) ((y) ^ ((x) | (~z)))
  +
  +/* ROTATE_LEFT rotates x left n bits. */
  +#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
  +
  +/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
  +   Rotation is separate from addition to prevent recomputation. */
  +#define FF(a, b, c, d, x, s, ac) { \
  + (a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \
  + (a) = ROTATE_LEFT ((a), (s)); \
  + (a) += (b); \
  +}
  +#define GG(a, b, c, d, x, s, ac) { \
  + (a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \
  + (a) = ROTATE_LEFT ((a), (s)); \
  + (a) += (b); \
  +}
  +#define HH(a, b, c, d, x, s, ac) { \
  + (a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \
  + (a) = ROTATE_LEFT ((a), (s)); \
  + (a) += (b); \
  +}
  +#define II(a, b, c, d, x, s, ac) { \
  + (a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \
  + (a) = ROTATE_LEFT ((a), (s)); \
  + (a) += (b); \
  +}
  +
  +/* MD5 initialization. Begins an MD5 operation, writing a new context. */
  +static void MD5Init(
  +    MD5_CTX *context)
  +{
  +    context->count[0] = context->count[1] = 0;
  +
  +    /* Load magic initialization constants. */
  +    context->state[0] = 0x67452301;
  +    context->state[1] = 0xefcdab89;
  +    context->state[2] = 0x98badcfe;
  +    context->state[3] = 0x10325476;
  +}
  +
  +/* MD5 block update operation. Continues an MD5 message-digest
  +   operation, processing another message block, and updating the
  +   context. */
  +static void MD5Update(
  +    MD5_CTX *context,                                        /* context */
  +    unsigned char *input,                                /* input block */
  +    unsigned int inputLen)                     /* length of input block */
  +{
  +    unsigned int i, idx, partLen;
  +
  +    /* Compute number of bytes mod 64 */
  +    idx = (unsigned int)((context->count[0] >> 3) & 0x3F);
  +
  +    /* Update number of bits */
  +    if ((context->count[0] += ((UINT4)inputLen << 3)) < ((UINT4)inputLen << 3))
  +        context->count[1]++;
  +    context->count[1] += ((UINT4)inputLen >> 29);
  +
  +    partLen = 64 - idx;
  +
  +    /* Transform as many times as possible.  */
  +    if (inputLen >= partLen) {
  +        memcpy((POINTER)&context->buffer[idx], (POINTER)input, partLen);
  +        MD5Transform(context->state, context->buffer);
  +        for (i = partLen; i + 63 < inputLen; i += 64)
  +            MD5Transform (context->state, &input[i]);
  +        idx = 0;
  +    }
  +    else
  +        i = 0;
  +
  +    /* Buffer remaining input */
  +    memcpy((POINTER)&context->buffer[idx], (POINTER)&input[i], inputLen-i);
  +}
  +
  +/* MD5 finalization. Ends an MD5 message-digest operation, writing the
  +   the message digest and zeroizing the context. */
  +static void MD5Final(
  +    unsigned char digest[16],                        /* message digest */
  +    MD5_CTX *context)                                       /* context */
  +{
  +    unsigned char bits[8];
  +    unsigned int idx, padLen;
  +
  +    /* Save number of bits */
  +    Encode(bits, context->count, 8);
  +
  +    /* Pad out to 56 mod 64. */
  +    idx = (unsigned int)((context->count[0] >> 3) & 0x3f);
  +    padLen = (idx < 56) ? (56 - idx) : (120 - idx);
  +    MD5Update(context, PADDING, padLen);
  +
  +    /* Append length (before padding) */
  +    MD5Update(context, bits, 8);
  +
  +    /* Store state in digest */
  +    Encode(digest, context->state, 16);
  +
  +    /* Zeroize sensitive information. */
  +    memset((POINTER)context, 0, sizeof (*context));
  +}
  +
  +/* MD5 basic transformation. Transforms state based on block. */
  +static void MD5Transform(
  +    UINT4 state[4],
  +    unsigned char block[64])
  +{
  +    UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16];
  +
  +    Decode(x, block, 64);
  +
  +    /* Round 1 */
  +#define S11 7
  +#define S12 12
  +#define S13 17
  +#define S14 22
  +    FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */
  +    FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */
  +    FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */
  +    FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */
  +    FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */
  +    FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */
  +    FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */
  +    FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */
  +    FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */
  +    FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */
  +    FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
  +    FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
  +    FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
  +    FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
  +    FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
  +    FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
  +
  +   /* Round 2 */
  +#define S21 5
  +#define S22 9
  +#define S23 14
  +#define S24 20
  +    GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */
  +    GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */
  +    GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
  +    GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */
  +    GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */
  +    GG (d, a, b, c, x[10], S22,  0x2441453); /* 22 */
  +    GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
  +    GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */
  +    GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */
  +    GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
  +    GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */
  +    GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */
  +    GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
  +    GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */
  +    GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */
  +    GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
  +
  +    /* Round 3 */
  +#define S31 4
  +#define S32 11
  +#define S33 16
  +#define S34 23
  +    HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */
  +    HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */
  +    HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
  +    HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
  +    HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */
  +    HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */
  +    HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */
  +    HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
  +    HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
  +    HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */
  +    HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */
  +    HH (b, c, d, a, x[ 6], S34,  0x4881d05); /* 44 */
  +    HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */
  +    HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
  +    HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
  +    HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */
  +
  +    /* Round 4 */
  +#define S41 6
  +#define S42 10
  +#define S43 15
  +#define S44 21
  +    II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */
  +    II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */
  +    II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
  +    II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */
  +    II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
  +    II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */
  +    II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
  +    II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */
  +    II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */
  +    II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
  +    II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */
  +    II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
  +    II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */
  +    II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
  +    II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */
  +    II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */
  +
  +    state[0] += a;
  +    state[1] += b;
  +    state[2] += c;
  +    state[3] += d;
  +
  +    /* Zeroize sensitive information. */
  +    memset((POINTER)x, 0, sizeof (x));
  +}
  +
  +/* Encodes input (UINT4) into output (unsigned char).
  +   Assumes len is a multiple of 4. */
  +static void Encode(
  +    unsigned char *output,
  +    UINT4 *input,
  +    unsigned int len)
  +{
  +    unsigned int i, j;
  +
  +    for (i = 0, j = 0; j < len; i++, j += 4) {
  +        output[j]   = (unsigned char)( input[i]        & 0xff);
  +        output[j+1] = (unsigned char)((input[i] >> 8)  & 0xff);
  +        output[j+2] = (unsigned char)((input[i] >> 16) & 0xff);
  +        output[j+3] = (unsigned char)((input[i] >> 24) & 0xff);
  +    }
  +}
  +
  +/* Decodes input (unsigned char) into output (UINT4).
  +   Assumes len is a multiple of 4. */
  +static void Decode(
  +    UINT4 *output,
  +    unsigned char *input,
  +    unsigned int len)
  +{
  +    unsigned int i, j;
  +
  +    for (i = 0, j = 0; j < len; i++, j += 4)
  +        output[i] =   ( (UINT4)input[j])
  +                    | (((UINT4)input[j+1]) << 8 )
  +                    | (((UINT4)input[j+2]) << 16)
  +                    | (((UINT4)input[j+3]) << 24);
  +}
  +
  +/*
  +** ==== END RFC 1321 CODE ====
  +*/
  +
  +struct md5_st {
  +    MD5_CTX ctx;
  +};
  +
  +md5_rc_t md5_create(md5_t **md5)
  +{
  +    if (md5 == NULL)
  +        return MD5_RC_ARG;
  +    if ((*md5 = (md5_t *)malloc(sizeof(md5_t))) == NULL)
  +        return MD5_RC_MEM;
  +    MD5Init(&((*md5)->ctx));
  +    return MD5_RC_OK;
  +}
  +
  +md5_rc_t md5_update(md5_t *md5, const void *data_ptr, size_t data_len)
  +{
  +    if (md5 == NULL)
  +        return MD5_RC_ARG;
  +    MD5Update(&(md5->ctx), (unsigned char *)data_ptr, (unsigned int)data_len);
  +    return MD5_RC_OK;
  +}
  +
  +md5_rc_t md5_store(md5_t *md5, void **data_ptr, size_t *data_len)
  +{
  +    MD5_CTX ctx;
  +
  +    if (md5 == NULL || data_ptr == NULL)
  +        return MD5_RC_ARG;
  +    if (*data_ptr == NULL) {
  +        if ((*data_ptr = malloc(MD5_LEN_BIN)) == NULL)
  +            return MD5_RC_MEM;
  +        if (data_len != NULL)
  +            *data_len = MD5_LEN_BIN;
  +    }
  +    else {
  +        if (data_len == NULL)
  +            return MD5_RC_ARG;
  +        if (*data_len < MD5_LEN_BIN)
  +            return MD5_RC_MEM;
  +    }
  +    memcpy((void *)(&ctx), (void *)(&(md5->ctx)), sizeof(MD5_CTX));
  +    MD5Final((unsigned char *)(*data_ptr), &(md5->ctx));
  +    memcpy((void *)(&(md5->ctx)), (void *)(&ctx), sizeof(MD5_CTX));
  +    return MD5_RC_OK;
  +}
  +
  +md5_rc_t md5_format(md5_t *md5, char **data_ptr, size_t *data_len)
  +{
  +    static const char hex[] = "0123456789abcdef";
  +    unsigned char buf[MD5_LEN_BIN];
  +    unsigned char *bufptr;
  +    size_t buflen;
  +    md5_rc_t rc;
  +    int i;
  +
  +    if (md5 == NULL || data_ptr == NULL)
  +        return MD5_RC_ARG;
  +    if (*data_ptr == NULL) {
  +        if ((*data_ptr = malloc(MD5_LEN_STR+1)) == NULL)
  +            return MD5_RC_MEM;
  +        if (data_len != NULL)
  +            *data_len = MD5_LEN_STR+1;
  +    }
  +    else {
  +        if (data_len == NULL)
  +            return MD5_RC_ARG;
  +        if (*data_len < (MD5_LEN_STR+1))
  +            return MD5_RC_MEM;
  +    }
  +
  +    bufptr = buf;
  +    buflen = sizeof(buf);
  +    if ((rc = md5_store(md5, (void *)(&bufptr), &buflen)) != MD5_RC_OK)
  +        return rc;
  +
  +    for (i = 0; i < buflen; i++) {
  +	    (*data_ptr)[(i*2)+0] = hex[(int)(bufptr[i] >> 4)];
  +	    (*data_ptr)[(i*2)+1] = hex[(int)(bufptr[i] & 0x0f)];
  +    }
  +    (*data_ptr)[(i*2)] = '\0';
  +    return MD5_RC_OK;
  +}
  +
  +md5_rc_t md5_destroy(md5_t *md5)
  +{
  +    if (md5 == NULL)
  +        return MD5_RC_ARG;
  +    free(md5);
  +    return MD5_RC_OK;
  +}
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_md5.h
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid_md5.h
  --- /dev/null	2004-01-09 16:49:40.000000000 +0100
  +++ uuid_md5.h	2004-01-09 16:49:41.000000000 +0100
  @@ -0,0 +1,74 @@
  +/*
  +**  OSSP uuid - Universally Unique Identifier
  +**  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +**
  +**  This file is part of OSSP uuid, a library for the generation
  +**  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  uuid_md5.h: MD5 API definition
  +*/
  +
  +#ifndef __MD5_H___
  +#define __MD5_H___
  +
  +#include <string.h> /* size_t */
  +
  +#define MD5_PREFIX uuid_
  +
  +/* embedding support */
  +#ifdef MD5_PREFIX
  +#if defined(__STDC__) || defined(__cplusplus)
  +#define __MD5_CONCAT(x,y) x ## y
  +#define MD5_CONCAT(x,y) __MD5_CONCAT(x,y)
  +#else
  +#define __MD5_CONCAT(x) x
  +#define MD5_CONCAT(x,y) __MD5_CONCAT(x)y
  +#endif
  +#define md5_st      MD5_CONCAT(MD5_PREFIX,md5_st)
  +#define md5_t       MD5_CONCAT(MD5_PREFIX,md5_t)
  +#define md5_create  MD5_CONCAT(MD5_PREFIX,md5_create)
  +#define md5_update  MD5_CONCAT(MD5_PREFIX,md5_update)
  +#define md5_store   MD5_CONCAT(MD5_PREFIX,md5_store)
  +#define md5_format  MD5_CONCAT(MD5_PREFIX,md5_format)
  +#define md5_destroy MD5_CONCAT(MD5_PREFIX,md5_destroy)
  +#endif
  +
  +struct md5_st;
  +typedef struct md5_st md5_t;
  +
  +#define MD5_LEN_BIN 16
  +#define MD5_LEN_STR 32
  +
  +typedef enum {
  +    MD5_RC_OK  = 0,
  +    MD5_RC_ARG = 1,
  +    MD5_RC_MEM = 2
  +} md5_rc_t;
  +
  +extern md5_rc_t md5_create  (md5_t **md5);
  +extern md5_rc_t md5_update  (md5_t  *md5, const void  *data_ptr, size_t  data_len);
  +extern md5_rc_t md5_store   (md5_t  *md5,       void **data_ptr, size_t *data_len);
  +extern md5_rc_t md5_format  (md5_t  *md5,       char **data_ptr, size_t *data_len);
  +extern md5_rc_t md5_destroy (md5_t  *md5);
  +
  +#endif /* __MD5_H___ */
  +
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jan  9 16:51:21 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7E94D772DD; Fri,  9 Jan 2004 16:51:21 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid_md5.c
Message-Id: <20040109155121.7E94D772DD@mail.ossp.org>
Date: Fri,  9 Jan 2004 16:51:21 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Jan-2004 16:51:21
  Branch: HEAD                             Handle: 2004010915512000

  Modified files:
    ossp-pkg/uuid           uuid_md5.c

  Log:
    better wording

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/uuid/uuid_md5.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_md5.c
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid_md5.c
  --- ossp-pkg/uuid/uuid_md5.c	9 Jan 2004 15:49:40 -0000	1.1
  +++ ossp-pkg/uuid/uuid_md5.c	9 Jan 2004 15:51:20 -0000	1.2
  @@ -35,7 +35,7 @@
   /*
    * This is a RFC 1321 compliant Message Digest 5 (MD5) algorithm
    * implementation. It is directly derived from the RSA code published in
  - * RFC 1321 with just the following functionality keeping changes:
  + * RFC 1321 with just the following functionality preserving changes:
    * - converted function definitions from K&R to ANSI C
    * - included contents of the "global.h" and "md5.h" headers
    * - moved the SXX defines into the MD5Transform function
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jan  9 17:11:41 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 02D0B772DA; Fri,  9 Jan 2004 17:11:40 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.c uuid.h uuidtool.c
Message-Id: <20040109161140.02D0B772DA@mail.ossp.org>
Date: Fri,  9 Jan 2004 17:11:40 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Jan-2004 17:11:40
  Branch: HEAD                             Handle: 2004010916114000

  Modified files:
    ossp-pkg/uuid           uuid.c uuid.h uuidtool.c

  Log:
    use format instead of unparse and fix pack/unpack usage

  Summary:
    Revision    Changes     Path
    1.7         +1  -1      ossp-pkg/uuid/uuid.c
    1.6         +1  -1      ossp-pkg/uuid/uuid.h
    1.5         +3  -3      ossp-pkg/uuid/uuidtool.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 uuid.c
  --- ossp-pkg/uuid/uuid.c	9 Jan 2004 11:32:06 -0000	1.6
  +++ ossp-pkg/uuid/uuid.c	9 Jan 2004 16:11:40 -0000	1.7
  @@ -370,7 +370,7 @@
       return UUID_RC_OK;
   }
   
  -uuid_rc_t uuid_unparse(uuid_t *uuid, char **str)
  +uuid_rc_t uuid_format(uuid_t *uuid, char **str)
   {
       uuid_t uuid_tmp;
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.h
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 uuid.h
  --- ossp-pkg/uuid/uuid.h	9 Jan 2004 11:28:56 -0000	1.5
  +++ ossp-pkg/uuid/uuid.h	9 Jan 2004 16:11:40 -0000	1.6
  @@ -106,7 +106,7 @@
   
   /* string representation handling */
   extern uuid_rc_t  uuid_parse    (uuid_t  *uuid, const char  *str);
  -extern uuid_rc_t  uuid_unparse  (uuid_t  *uuid,       char **str);
  +extern uuid_rc_t  uuid_format   (uuid_t  *uuid,       char **str);
   
   /* UUID generation and dumping */
   extern uuid_rc_t  uuid_generate (uuid_t  *uuid, unsigned int mode, ...);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuidtool.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 uuidtool.c
  --- ossp-pkg/uuid/uuidtool.c	9 Jan 2004 11:28:56 -0000	1.4
  +++ ossp-pkg/uuid/uuidtool.c	9 Jan 2004 16:11:40 -0000	1.5
  @@ -167,16 +167,16 @@
                   error(1, "uuid_generate: %s", uuid_error(rc));
               if (ascii) {
                   cp = NULL;
  -                if ((rc = uuid_unparse(uuid, &cp)) != UUID_RC_OK)
  +                if ((rc = uuid_format(uuid, &cp)) != UUID_RC_OK)
                       error(1, "uuid_unparse: %s", uuid_error(rc));
                   fprintf(fp, "%s\n", cp);
                   free(cp);
               }
               else {
                   vp = NULL;
  -                if ((rc = uuid_unpack(uuid, &vp)) != UUID_RC_OK)
  +                if ((rc = uuid_pack(uuid, &vp)) != UUID_RC_OK)
                       error(1, "uuid_unpack: %s", uuid_error(rc));
  -                fwrite(vp, UUID_LEN_BIN, 1, fp);
  +                fwrite(vp, UUID_LEN_BIN, 1, vp);
                   free(vp);
               }
           }
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jan  9 22:01:06 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 05C5B772E5; Fri,  9 Jan 2004 22:01:05 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.c uuidtool.c
Message-Id: <20040109210105.05C5B772E5@mail.ossp.org>
Date: Fri,  9 Jan 2004 22:01:05 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Jan-2004 22:01:05
  Branch: HEAD                             Handle: 2004010921010400

  Modified files:
    ossp-pkg/uuid           uuid.c uuidtool.c

  Log:
    fix framework and print ASCII output by default

  Summary:
    Revision    Changes     Path
    1.8         +18 -21     ossp-pkg/uuid/uuid.c
    1.6         +14 -14     ossp-pkg/uuid/uuidtool.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 uuid.c
  --- ossp-pkg/uuid/uuid.c	9 Jan 2004 16:11:40 -0000	1.7
  +++ ossp-pkg/uuid/uuid.c	9 Jan 2004 21:01:04 -0000	1.8
  @@ -317,7 +317,6 @@
   
   uuid_rc_t uuid_parse(uuid_t *uuid, const char *str)
   {
  -    uuid_t uuid_tmp;
       uuid_uint16_t tmp16;
       const char *cp;
       char hexbuf[3];
  @@ -353,18 +352,18 @@
       /*
        * pass 2: parse hex values of string representation syntax
        */
  -    uuid_tmp.time_low            = (uuid_uint32_t)strtoul(str,    NULL, 16);
  -    uuid_tmp.time_mid            = (uuid_uint16_t)strtoul(str+9,  NULL, 16);
  -    uuid_tmp.time_hi_and_version = (uuid_uint16_t)strtoul(str+14, NULL, 16);
  +    uuid->time_low            = (uuid_uint32_t)strtoul(str,    NULL, 16);
  +    uuid->time_mid            = (uuid_uint16_t)strtoul(str+9,  NULL, 16);
  +    uuid->time_hi_and_version = (uuid_uint16_t)strtoul(str+14, NULL, 16);
       tmp16 = (uuid_uint16_t)strtoul(str+19, NULL, 16);
  -    uuid_tmp.clock_seq_low             = (uuid_uint8_t)(tmp16 & 0xff); tmp16 >>= 8;
  -    uuid_tmp.clock_seq_hi_and_reserved = (uuid_uint8_t)(tmp16 & 0xff);
  +    uuid->clock_seq_low             = (uuid_uint8_t)(tmp16 & 0xff); tmp16 >>= 8;
  +    uuid->clock_seq_hi_and_reserved = (uuid_uint8_t)(tmp16 & 0xff);
       cp = str+24;
       hexbuf[2] = '\0';
  -    for (i = 0; i < sizeof(uuid_tmp.node); i++) {
  +    for (i = 0; i < sizeof(uuid->node); i++) {
           hexbuf[0] = *cp++;
           hexbuf[1] = *cp++;
  -        uuid_tmp.node[i] = strtoul(hexbuf, NULL, 16);
  +        uuid->node[i] = strtoul(hexbuf, NULL, 16);
       }
   
       return UUID_RC_OK;
  @@ -372,8 +371,6 @@
   
   uuid_rc_t uuid_format(uuid_t *uuid, char **str)
   {
  -    uuid_t uuid_tmp;
  -
       /* sanity check argument(s) */
       if (uuid == NULL || str == NULL)
           return UUID_RC_ARG;
  @@ -386,17 +383,17 @@
       /* format UUID into string representation */
       sprintf(*str,
           "%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
  -        (unsigned long)uuid_tmp.time_low,
  -        (unsigned int)uuid_tmp.time_mid,
  -        (unsigned int)uuid_tmp.time_hi_and_version,
  -        (unsigned int)uuid_tmp.clock_seq_hi_and_reserved,
  -        (unsigned int)uuid_tmp.clock_seq_low,
  -        (unsigned int)uuid_tmp.node[0],
  -        (unsigned int)uuid_tmp.node[1],
  -        (unsigned int)uuid_tmp.node[2],
  -        (unsigned int)uuid_tmp.node[3],
  -        (unsigned int)uuid_tmp.node[4],
  -        (unsigned int)uuid_tmp.node[5]);
  +        (unsigned long)uuid->time_low,
  +        (unsigned int)uuid->time_mid,
  +        (unsigned int)uuid->time_hi_and_version,
  +        (unsigned int)uuid->clock_seq_hi_and_reserved,
  +        (unsigned int)uuid->clock_seq_low,
  +        (unsigned int)uuid->node[0],
  +        (unsigned int)uuid->node[1],
  +        (unsigned int)uuid->node[2],
  +        (unsigned int)uuid->node[3],
  +        (unsigned int)uuid->node[4],
  +        (unsigned int)uuid->node[5]);
   
       return UUID_RC_OK;
   }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuidtool.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 uuidtool.c
  --- ossp-pkg/uuid/uuidtool.c	9 Jan 2004 16:11:40 -0000	1.5
  +++ ossp-pkg/uuid/uuidtool.c	9 Jan 2004 21:01:04 -0000	1.6
  @@ -78,7 +78,7 @@
       int count;
       int i;
       int iterate;
  -    int ascii;
  +    int raw;
       int decode;
       char *cp;
       void *vp;
  @@ -88,10 +88,10 @@
       count = -1;     /* no count yet */
       fp = stdout;    /* default output file */
       iterate = 0;    /* not one at a time */
  -    ascii = 0;      /* default is binary output */
  +    raw = 0;        /* default is ASCII output */
       decode = 0;     /* default is to encode */
       version = UUID_VERSION1;
  -    while ((ch = getopt(argc, argv, "1n:ado:v:")) != -1) {
  +    while ((ch = getopt(argc, argv, "1n:rdo:v:")) != -1) {
           switch (ch) {
               case '1':
                   iterate = 1;
  @@ -103,8 +103,8 @@
                   if (*p != '\0' || count < 1)
                       usage("invalid argument to option 'n'");
                   break;
  -            case 'a':
  -                ascii = 1;
  +            case 'r':
  +                raw = 1;
                   break;
               case 'd':
                   decode = 1;
  @@ -165,19 +165,19 @@
                   rc = uuid_generate(uuid, version);
               if (rc != UUID_RC_OK)
                   error(1, "uuid_generate: %s", uuid_error(rc));
  -            if (ascii) {
  +            if (raw) {
  +                vp = NULL;
  +                if ((rc = uuid_pack(uuid, &vp)) != UUID_RC_OK)
  +                    error(1, "uuid_pack: %s", uuid_error(rc));
  +                fwrite(vp, UUID_LEN_BIN, 1, fp);
  +                free(vp);
  +            }
  +            else {
                   cp = NULL;
                   if ((rc = uuid_format(uuid, &cp)) != UUID_RC_OK)
  -                    error(1, "uuid_unparse: %s", uuid_error(rc));
  +                    error(1, "uuid_format: %s", uuid_error(rc));
                   fprintf(fp, "%s\n", cp);
                   free(cp);
  -            }
  -            else {
  -                vp = NULL;
  -                if ((rc = uuid_pack(uuid, &vp)) != UUID_RC_OK)
  -                    error(1, "uuid_unpack: %s", uuid_error(rc));
  -                fwrite(vp, UUID_LEN_BIN, 1, vp);
  -                free(vp);
               }
           }
           if ((rc = uuid_destroy(uuid)) != UUID_RC_OK)
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jan  9 22:59:58 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 30EF8772E1; Fri,  9 Jan 2004 22:59:58 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.c
Message-Id: <20040109215958.30EF8772E1@mail.ossp.org>
Date: Fri,  9 Jan 2004 22:59:58 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Jan-2004 22:59:58
  Branch: HEAD                             Handle: 2004010921595700

  Modified files:
    ossp-pkg/uuid           uuid.c

  Log:
    add generator framework and implement version 4 UUIDs (random number
    only)

  Summary:
    Revision    Changes     Path
    1.9         +126 -2     ossp-pkg/uuid/uuid.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 uuid.c
  --- ossp-pkg/uuid/uuid.c	9 Jan 2004 21:01:04 -0000	1.8
  +++ ossp-pkg/uuid/uuid.c	9 Jan 2004 21:59:57 -0000	1.9
  @@ -33,6 +33,10 @@
   #include <string.h>
   #include <unistd.h>
   #include <ctype.h>
  +#include <time.h>
  +#include <sys/time.h>
  +#include <unistd.h>
  +#include <fcntl.h>
   
   #include "config.h"
   #include "uuid.h"
  @@ -398,17 +402,137 @@
       return UUID_RC_OK;
   }
   
  +/* pseudo-random number generator (PRNG) */
  +static void uuid_prng_getdata(uuid_uint8_t *data_ptr, size_t data_len)
  +{
  +    static int initialized = FALSE;
  +    static int fd = -1;
  +    struct timeval tv;
  +    pid_t pid;
  +    size_t n;
  +    size_t i;
  +    uuid_uint8_t *p;
  +    int cnt;
  +
  +    if (!initialized) {
  +        /* try to open the system PRNG device */
  +        if ((fd = open("/dev/urandom", O_RDONLY)) == -1)
  +            fd = open("/dev/random", O_RDONLY|O_NONBLOCK);
  +        if (fd != -1)
  +            fcntl(fd, F_SETFD, FD_CLOEXEC);
  +
  +        /* seed the PRNG once */
  +        gettimeofday(&tv, NULL);
  +        pid = getpid();
  +        srand((unsigned int)(
  +              ((uuid_uint32_t)pid << 16)
  +            ^ (uuid_uint32_t)pid
  +            ^ (uuid_uint32_t)tv.tv_sec
  +            ^ (uuid_uint32_t)tv.tv_usec));
  +
  +        /* crank the PRNG a few times */
  +        gettimeofday(&tv, NULL);
  +        for (i = (unsigned int)(tv.tv_sec ^ tv.tv_usec) & 0x1F; i > 0; i--)
  +            (void)rand();
  +
  +        initialized = TRUE;
  +    }
  +
  +    /* try to gather data from the system PRNG device */
  +    if (fd != -1) {
  +        p = data_ptr;
  +        n = data_len;
  +        cnt = 0;
  +        while (n > 0) {
  +            i = read(fd, (void *)p, n);
  +            if (i <= 0) {
  +                if (cnt++ > 16)
  +                    break;
  +                continue;
  +            }
  +            n -= i;
  +            p += i;
  +            cnt = 0;
  +        }
  +    }
  +
  +    /* always also apply the weaker PRNG. In case the stronger PRNG device
  +       based source failed, this is the only remaining randomness, of course */
  +    for (p = data_ptr, n = 0; n < data_len; n++)
  +        *p++ ^= (uuid_uint8_t)(((uuid_uint32_t)rand() >> 7) & 0xFF);
  +
  +    return;
  +}
  +
  +/* brand UUID with version and variant */
  +static void uuid_brand(uuid_t *uuid, int version)
  +{
  +    /* set version (as given) */
  +    uuid->time_hi_and_version &= 0x0fff;
  +    uuid->time_hi_and_version |= (((uuid_uint16_t)version & 0x0fff) << 12);
  +
  +    /* set variant (always DCE 1.1 only) */
  +    uuid->clock_seq_hi_and_reserved &= ~((0x03) << 6);
  +    uuid->clock_seq_hi_and_reserved |= (0x02 << 6);
  +    return;
  +}
  +
  +/* generate UUID version 1: time, clock and node based */
  +static uuid_rc_t uuid_generate_v1(uuid_t *uuid, unsigned int mode, va_list ap)
  +{
  +    /* brand with version and variant */
  +    uuid_brand(uuid, 1);
  +
  +    /* FIXME */
  +
  +    return UUID_RC_OK;
  +}
  +
  +/* generate UUID version 3: name based */
  +static uuid_rc_t uuid_generate_v3(uuid_t *uuid, unsigned int mode, va_list ap)
  +{
  +    /* brand with version and variant */
  +    uuid_brand(uuid, 3);
  +
  +    /* FIXME */
  +
  +    return UUID_RC_OK;
  +}
  +
  +/* generate UUID version 4: random number based */
  +static uuid_rc_t uuid_generate_v4(uuid_t *uuid, unsigned int mode, va_list ap)
  +{
  +    /* fill with random data */
  +    uuid_prng_getdata((void *)uuid, sizeof(uuid_t));
  +
  +    /* brand with version and variant */
  +    uuid_brand(uuid, 4);
  +
  +    return UUID_RC_OK;
  +}
  +
   uuid_rc_t uuid_generate(uuid_t *uuid, unsigned int mode, ...)
   {
       va_list ap;
  +    uuid_rc_t rc;
   
       /* sanity check argument(s) */
       if (uuid == NULL)
           return UUID_RC_ARG;
  +
  +    /* dispatch into version dependent generation functions */
       va_start(ap, mode);
  -    /* FIXME */
  +    if (mode & UUID_VERSION1)
  +        rc = uuid_generate_v1(uuid, mode, ap);
  +    else if (mode & UUID_VERSION3)
  +        rc = uuid_generate_v3(uuid, mode, ap);
  +    else if (mode & UUID_VERSION4)
  +        rc = uuid_generate_v4(uuid, mode, ap);
  +    else
  +        rc = UUID_RC_ARG;
       va_end(ap);
  -    return UUID_RC_OK;
  +
  +    return rc;
   }
   
   uuid_rc_t uuid_dump(uuid_t *uuid, char **str)
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jan 10 11:49:01 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0FE2E77301; Sat, 10 Jan 2004 11:49:00 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.c uuid_md5.c uuidtool.c
Message-Id: <20040110104900.0FE2E77301@mail.ossp.org>
Date: Sat, 10 Jan 2004 11:49:00 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Jan-2004 11:49:00
  Branch: HEAD                             Handle: 2004011010490000

  Modified files:
    ossp-pkg/uuid           uuid.c uuid_md5.c uuidtool.c

  Log:
    add UUID version 3 (name based) generation support (verified to be
    correct against Data::UUID, the only name supporting UUID
    implementation available for comparison)

  Summary:
    Revision    Changes     Path
    1.10        +66 -5      ossp-pkg/uuid/uuid.c
    1.3         +10 -8      ossp-pkg/uuid/uuid_md5.c
    1.7         +4  -2      ossp-pkg/uuid/uuidtool.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 uuid.c
  --- ossp-pkg/uuid/uuid.c	9 Jan 2004 21:59:57 -0000	1.9
  +++ ossp-pkg/uuid/uuid.c	10 Jan 2004 10:49:00 -0000	1.10
  @@ -40,6 +40,7 @@
   
   #include "config.h"
   #include "uuid.h"
  +#include "uuid_md5.h"
   #include "uuid_ui64.h"
   
   /* determine types of 8-bit size */
  @@ -488,13 +489,73 @@
       return UUID_RC_OK;
   }
   
  +/*
  + * UUID Namespace Ids as pre-defined by draft-leach-uuids-guids-01.txt
  + * (defined here as network byte ordered octet stream for direct MD5 feeding)
  + */
  +struct {
  +    char *name;
  +    uuid_uint8_t uuid[UUID_LEN_BIN];
  +} uuid_ns_table[] = {
  +    { "DNS",  /* 6ba7b810-9dad-11d1-80b4-00c04fd430c8 */
  +      { 0x6b,0xa7,0xb8,0x10,0x9d,0xad,0x11,0xd1,0x80,0xb4,0x00,0xc0,0x4f,0xd4,0x30,0xc8 } },
  +    { "URL",  /* 6ba7b811-9dad-11d1-80b4-00c04fd430c8 */
  +      { 0x6b,0xa7,0xb8,0x11,0x9d,0xad,0x11,0xd1,0x80,0xb4,0x00,0xc0,0x4f,0xd4,0x30,0xc8 } },
  +    { "OID",  /* 6ba7b812-9dad-11d1-80b4-00c04fd430c8 */
  +      { 0x6b,0xa7,0xb8,0x12,0x9d,0xad,0x11,0xd1,0x80,0xb4,0x00,0xc0,0x4f,0xd4,0x30,0xc8 } },
  +    { "X500", /* 6ba7b814-9dad-11d1-80b4-00c04fd430c8 */
  +      { 0x6b,0xa7,0xb8,0x14,0x9d,0xad,0x11,0xd1,0x80,0xb4,0x00,0xc0,0x4f,0xd4,0x30,0xc8 } }
  +};
  +
   /* generate UUID version 3: name based */
   static uuid_rc_t uuid_generate_v3(uuid_t *uuid, unsigned int mode, va_list ap)
   {
  -    /* brand with version and variant */
  -    uuid_brand(uuid, 3);
  +    char *str;
  +    char *ns_name;
  +    void *ns_uuid;
  +    md5_t *md5;
  +    int i;
   
  -    /* FIXME */
  +    /* determine namespace UUID name and argument name string */
  +    if ((ns_name = (char *)va_arg(ap, char *)) == NULL)
  +        return UUID_RC_ARG;
  +    if ((str = (char *)va_arg(ap, char *)) == NULL)
  +        return UUID_RC_ARG;
  +
  +    /* create MD5 context */
  +    if (md5_create(&md5) != MD5_RC_OK)
  +        return UUID_RC_MEM;
  +
  +    /* load the namespace UUID into MD5 context */
  +    ns_uuid = NULL;
  +    for (i = 0; i < sizeof(uuid_ns_table)/sizeof(uuid_ns_table[0]); i++) {
  +         if (strcmp(uuid_ns_table[i].name, ns_name) == 0) {
  +             ns_uuid = uuid_ns_table[i].uuid;
  +             break;
  +         }
  +    }
  +    if (ns_uuid == NULL)
  +        return UUID_RC_ARG;
  +    md5_update(md5, ns_uuid, UUID_LEN_BIN);
  +
  +    /* load the argument name string into MD5 context */
  +    md5_update(md5, str, strlen(str));
  +
  +    /* store MD5 result into UUID
  +       (requires MD5_LEN_BIN space, UUID_LEN_BIN space is available,
  +       and both are equal in size, so we are safe!) */
  +    md5_store(md5, (void *)&uuid, NULL);
  +
  +    /* destroy MD5 context */
  +    md5_destroy(md5);
  +
  +    /* fulfill requirement of standard and convert UUID data into
  +       local/host byte order (this uses fact that uuid_unpack() is
  +       able to operate in-place!) */
  +    uuid_unpack(uuid, (void *)uuid);
  +
  +    /* brand UUID with version and variant */
  +    uuid_brand(uuid, 3);
   
       return UUID_RC_OK;
   }
  @@ -502,10 +563,10 @@
   /* generate UUID version 4: random number based */
   static uuid_rc_t uuid_generate_v4(uuid_t *uuid, unsigned int mode, va_list ap)
   {
  -    /* fill with random data */
  +    /* fill UUID with random data */
       uuid_prng_getdata((void *)uuid, sizeof(uuid_t));
   
  -    /* brand with version and variant */
  +    /* brand UUID with version and variant */
       uuid_brand(uuid, 4);
   
       return UUID_RC_OK;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_md5.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid_md5.c
  --- ossp-pkg/uuid/uuid_md5.c	9 Jan 2004 15:51:20 -0000	1.2
  +++ ossp-pkg/uuid/uuid_md5.c	10 Jan 2004 10:49:00 -0000	1.3
  @@ -388,10 +388,11 @@
               *data_len = MD5_LEN_BIN;
       }
       else {
  -        if (data_len == NULL)
  -            return MD5_RC_ARG;
  -        if (*data_len < MD5_LEN_BIN)
  -            return MD5_RC_MEM;
  +        if (data_len != NULL) {
  +            if (*data_len < MD5_LEN_BIN)
  +                return MD5_RC_MEM;
  +            *data_len = MD5_LEN_BIN;
  +        }
       }
       memcpy((void *)(&ctx), (void *)(&(md5->ctx)), sizeof(MD5_CTX));
       MD5Final((unsigned char *)(*data_ptr), &(md5->ctx));
  @@ -417,10 +418,11 @@
               *data_len = MD5_LEN_STR+1;
       }
       else {
  -        if (data_len == NULL)
  -            return MD5_RC_ARG;
  -        if (*data_len < (MD5_LEN_STR+1))
  -            return MD5_RC_MEM;
  +        if (data_len != NULL) {
  +            if (*data_len < MD5_LEN_STR+1)
  +                return MD5_RC_MEM;
  +            *data_len = MD5_LEN_STR+1;
  +        }
       }
   
       bufptr = buf;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuidtool.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 uuidtool.c
  --- ossp-pkg/uuid/uuidtool.c	9 Jan 2004 21:01:04 -0000	1.6
  +++ ossp-pkg/uuid/uuidtool.c	10 Jan 2004 10:49:00 -0000	1.7
  @@ -145,7 +145,9 @@
       }
       else {
           /* encoding */
  -        if (argc < 0 || ((version == UUID_VERSION3 && argc > 2) || argc > 1))
  +        if (   (version == UUID_VERSION1 && argc != 0)
  +            || (version == UUID_VERSION3 && argc != 2)
  +            || (version == UUID_VERSION4 && argc != 0))
               usage("invalid number of arguments");
           if ((rc = uuid_create(&uuid)) != UUID_RC_OK)
               error(1, "uuid_create: %s", uuid_error(rc));
  @@ -160,7 +162,7 @@
                       error(1, "uuid_nil: %s", uuid_error(rc));
               }
               if (version == UUID_VERSION3)
  -                rc = uuid_generate(uuid, version, argv[0]);
  +                rc = uuid_generate(uuid, version, argv[0], argv[1]);
               else
                   rc = uuid_generate(uuid, version);
               if (rc != UUID_RC_OK)
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jan 10 12:07:27 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 65268772FE; Sat, 10 Jan 2004 12:07:27 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.c
Message-Id: <20040110110727.65268772FE@mail.ossp.org>
Date: Sat, 10 Jan 2004 12:07:27 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Jan-2004 12:07:27
  Branch: HEAD                             Handle: 2004011011072600

  Modified files:
    ossp-pkg/uuid           uuid.c

  Log:
    be more flexible and allow custom namespace UUIDs

  Summary:
    Revision    Changes     Path
    1.11        +54 -24     ossp-pkg/uuid/uuid.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 uuid.c
  --- ossp-pkg/uuid/uuid.c	10 Jan 2004 10:49:00 -0000	1.10
  +++ ossp-pkg/uuid/uuid.c	10 Jan 2004 11:07:26 -0000	1.11
  @@ -320,49 +320,64 @@
       return UUID_RC_OK;
   }
   
  -uuid_rc_t uuid_parse(uuid_t *uuid, const char *str)
  +/* check for correct UUID string representation syntax */
  +static int uuid_isstr(const char *str)
   {
  -    uuid_uint16_t tmp16;
  -    const char *cp;
  -    char hexbuf[3];
       int i;
  -
  -    /* sanity check argument(s) */
  -    if (uuid == NULL || str == NULL)
  -        return UUID_RC_ARG;
  +    const char *cp;
   
       /*
  -     * pass 1: check UUID string representation syntax
        * example reference:
        *   f81d4fae-7dec-11d0-a765-00a0c91e6bf6
        *   012345678901234567890123456789012345
        *   0         1         2         3
        */
  +    if (str == NULL)
  +        return FALSE;
       if (strlen(str) != UUID_LEN_STR)
  -        return UUID_RC_ARG;
  +        return FALSE;
       for (i = 0, cp = str; i <= UUID_LEN_STR; i++, cp++) {
           if ((i == 8) || (i == 13) || (i == 18) || (i == 23)) {
               if (*cp == '-')
                   continue;
               else
  -                return -1;
  +                return FALSE;
           }
           if (i == UUID_LEN_STR)
               if (*cp == '\0')
                   continue;
           if (!isxdigit(*cp))
  -            return UUID_RC_ARG;
  +            return FALSE;
       }
  +    return TRUE;
  +}
   
  -    /*
  -     * pass 2: parse hex values of string representation syntax
  -     */
  +uuid_rc_t uuid_parse(uuid_t *uuid, const char *str)
  +{
  +    uuid_uint16_t tmp16;
  +    const char *cp;
  +    char hexbuf[3];
  +    int i;
  +
  +    /* sanity check argument(s) */
  +    if (uuid == NULL || str == NULL)
  +        return UUID_RC_ARG;
  +
  +    /* check for correct UUID string representation syntax */
  +    if (!uuid_isstr(str))
  +        return UUID_RC_ARG;
  +
  +    /* parse hex values of "time" parts */
       uuid->time_low            = (uuid_uint32_t)strtoul(str,    NULL, 16);
       uuid->time_mid            = (uuid_uint16_t)strtoul(str+9,  NULL, 16);
       uuid->time_hi_and_version = (uuid_uint16_t)strtoul(str+14, NULL, 16);
  +
  +    /* parse hex values of "clock" parts */
       tmp16 = (uuid_uint16_t)strtoul(str+19, NULL, 16);
       uuid->clock_seq_low             = (uuid_uint8_t)(tmp16 & 0xff); tmp16 >>= 8;
       uuid->clock_seq_hi_and_reserved = (uuid_uint8_t)(tmp16 & 0xff);
  +
  +    /* parse hex values of "node" part */
       cp = str+24;
       hexbuf[2] = '\0';
       for (i = 0; i < sizeof(uuid->node); i++) {
  @@ -513,6 +528,8 @@
       char *str;
       char *ns_name;
       void *ns_uuid;
  +    uuid_t *uuid_tmp;
  +    uuid_rc_t rc;
       md5_t *md5;
       int i;
   
  @@ -527,16 +544,29 @@
           return UUID_RC_MEM;
   
       /* load the namespace UUID into MD5 context */
  -    ns_uuid = NULL;
  -    for (i = 0; i < sizeof(uuid_ns_table)/sizeof(uuid_ns_table[0]); i++) {
  -         if (strcmp(uuid_ns_table[i].name, ns_name) == 0) {
  -             ns_uuid = uuid_ns_table[i].uuid;
  -             break;
  -         }
  +    if (uuid_isstr(ns_name)) {
  +        /* custom namespace via UUID string representation */
  +        if ((rc = uuid_create(&uuid_tmp)) != UUID_RC_OK)
  +            return rc;
  +        if ((rc = uuid_parse(uuid_tmp, ns_name)) != UUID_RC_OK)
  +            return rc;
  +        uuid_pack(uuid_tmp, (void **)&uuid_tmp);
  +        md5_update(md5, (void *)uuid_tmp, UUID_LEN_BIN);
  +        uuid_destroy(uuid_tmp);
  +    }
  +    else {
  +        /* standard namespace via UUID namespace id */
  +        ns_uuid = NULL;
  +        for (i = 0; i < sizeof(uuid_ns_table)/sizeof(uuid_ns_table[0]); i++) {
  +             if (strcmp(uuid_ns_table[i].name, ns_name) == 0) {
  +                 ns_uuid = uuid_ns_table[i].uuid;
  +                 break;
  +             }
  +        }
  +        if (ns_uuid == NULL)
  +            return UUID_RC_ARG;
  +        md5_update(md5, ns_uuid, UUID_LEN_BIN);
       }
  -    if (ns_uuid == NULL)
  -        return UUID_RC_ARG;
  -    md5_update(md5, ns_uuid, UUID_LEN_BIN);
   
       /* load the argument name string into MD5 context */
       md5_update(md5, str, strlen(str));
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jan 10 12:14:19 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E3B8677302; Sat, 10 Jan 2004 12:14:18 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.c
Message-Id: <20040110111418.E3B8677302@mail.ossp.org>
Date: Sat, 10 Jan 2004 12:14:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Jan-2004 12:14:18
  Branch: HEAD                             Handle: 2004011011141800

  Modified files:
    ossp-pkg/uuid           uuid.c

  Log:
    cleanups and more code documentation

  Summary:
    Revision    Changes     Path
    1.12        +40 -32     ossp-pkg/uuid/uuid.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 uuid.c
  --- ossp-pkg/uuid/uuid.c	10 Jan 2004 11:07:26 -0000	1.11
  +++ ossp-pkg/uuid/uuid.c	10 Jan 2004 11:14:18 -0000	1.12
  @@ -116,6 +116,7 @@
       uuid_uint8_t    node[6];
   };
   
  +/* create UUID object */
   uuid_rc_t uuid_create(uuid_t **uuid)
   {
       /* argument sanity check */
  @@ -132,6 +133,7 @@
       return UUID_RC_OK;
   }
   
  +/* destroy UUID object */
   uuid_rc_t uuid_destroy(uuid_t *uuid)
   {
       /* argument sanity check */
  @@ -144,6 +146,7 @@
       return UUID_RC_OK;
   }
   
  +/* set UUID object to represents 'nil UUID' */
   uuid_rc_t uuid_nil(uuid_t *uuid)
   {
       /* argument sanity check */
  @@ -156,6 +159,7 @@
       return UUID_RC_OK;
   }
   
  +/* compare UUID objects */
   uuid_rc_t uuid_compare(uuid_t *a, uuid_t *b, int *result)
   {
       int r;
  @@ -206,6 +210,7 @@
       return UUID_RC_OK;
   }
   
  +/* check whether UUID object represents 'nil UUID' */
   uuid_rc_t uuid_isnil(uuid_t *uuid, int *result)
   {
       const unsigned char *ucp;
  @@ -227,6 +232,7 @@
       return UUID_RC_OK;
   }
   
  +/* unpack UUID binary presentation into UUID object (allows in-place operation!) */
   uuid_rc_t uuid_unpack(uuid_t *uuid, const void *buf)
   {
       const uuid_uint8_t *in;
  @@ -271,6 +277,7 @@
       return UUID_RC_OK;
   }
   
  +/* pack UUID object into binary representation (allows in-place operation!) */
   uuid_rc_t uuid_pack(uuid_t *uuid, void **buf)
   {
       uuid_uint8_t *out;
  @@ -320,18 +327,16 @@
       return UUID_RC_OK;
   }
   
  -/* check for correct UUID string representation syntax */
  +/* INTERNAL: check for valid UUID string representation syntax */
   static int uuid_isstr(const char *str)
   {
       int i;
       const char *cp;
   
  -    /*
  -     * example reference:
  -     *   f81d4fae-7dec-11d0-a765-00a0c91e6bf6
  -     *   012345678901234567890123456789012345
  -     *   0         1         2         3
  -     */
  +    /* example reference:
  +       f81d4fae-7dec-11d0-a765-00a0c91e6bf6
  +       012345678901234567890123456789012345
  +       0         1         2         3       */
       if (str == NULL)
           return FALSE;
       if (strlen(str) != UUID_LEN_STR)
  @@ -352,6 +357,7 @@
       return TRUE;
   }
   
  +/* parse string representation into UUID object */
   uuid_rc_t uuid_parse(uuid_t *uuid, const char *str)
   {
       uuid_uint16_t tmp16;
  @@ -389,6 +395,7 @@
       return UUID_RC_OK;
   }
   
  +/* format UUID object into string representation */
   uuid_rc_t uuid_format(uuid_t *uuid, char **str)
   {
       /* sanity check argument(s) */
  @@ -418,7 +425,7 @@
       return UUID_RC_OK;
   }
   
  -/* pseudo-random number generator (PRNG) */
  +/* INTERNAL: pseudo-random number generator (PRNG) */
   static void uuid_prng_getdata(uuid_uint8_t *data_ptr, size_t data_len)
   {
       static int initialized = FALSE;
  @@ -480,7 +487,7 @@
       return;
   }
   
  -/* brand UUID with version and variant */
  +/* INTERNAL: brand UUID with version and variant */
   static void uuid_brand(uuid_t *uuid, int version)
   {
       /* set version (as given) */
  @@ -493,7 +500,7 @@
       return;
   }
   
  -/* generate UUID version 1: time, clock and node based */
  +/* INTERNAL: generate UUID version 1: time, clock and node based */
   static uuid_rc_t uuid_generate_v1(uuid_t *uuid, unsigned int mode, va_list ap)
   {
       /* brand with version and variant */
  @@ -504,11 +511,9 @@
       return UUID_RC_OK;
   }
   
  -/*
  - * UUID Namespace Ids as pre-defined by draft-leach-uuids-guids-01.txt
  - * (defined here as network byte ordered octet stream for direct MD5 feeding)
  - */
  -struct {
  +/* INTERNAL: UUID Namespace Ids as pre-defined by draft-leach-uuids-guids-01.txt
  +   (defined here as network byte ordered octet stream for direct MD5 feeding) */
  +static struct {
       char *name;
       uuid_uint8_t uuid[UUID_LEN_BIN];
   } uuid_ns_table[] = {
  @@ -522,19 +527,19 @@
         { 0x6b,0xa7,0xb8,0x14,0x9d,0xad,0x11,0xd1,0x80,0xb4,0x00,0xc0,0x4f,0xd4,0x30,0xc8 } }
   };
   
  -/* generate UUID version 3: name based */
  +/* INTERNAL: generate UUID version 3: name based */
   static uuid_rc_t uuid_generate_v3(uuid_t *uuid, unsigned int mode, va_list ap)
   {
       char *str;
  -    char *ns_name;
  -    void *ns_uuid;
  -    uuid_t *uuid_tmp;
  +    char *ns;
  +    void *uuid_octets;
  +    uuid_t *uuid_object;
       uuid_rc_t rc;
       md5_t *md5;
       int i;
   
       /* determine namespace UUID name and argument name string */
  -    if ((ns_name = (char *)va_arg(ap, char *)) == NULL)
  +    if ((ns = (char *)va_arg(ap, char *)) == NULL)
           return UUID_RC_ARG;
       if ((str = (char *)va_arg(ap, char *)) == NULL)
           return UUID_RC_ARG;
  @@ -544,28 +549,28 @@
           return UUID_RC_MEM;
   
       /* load the namespace UUID into MD5 context */
  -    if (uuid_isstr(ns_name)) {
  +    if (uuid_isstr(ns)) {
           /* custom namespace via UUID string representation */
  -        if ((rc = uuid_create(&uuid_tmp)) != UUID_RC_OK)
  +        if ((rc = uuid_create(&uuid_object)) != UUID_RC_OK)
               return rc;
  -        if ((rc = uuid_parse(uuid_tmp, ns_name)) != UUID_RC_OK)
  +        if ((rc = uuid_parse(uuid_object, ns)) != UUID_RC_OK)
               return rc;
  -        uuid_pack(uuid_tmp, (void **)&uuid_tmp);
  -        md5_update(md5, (void *)uuid_tmp, UUID_LEN_BIN);
  -        uuid_destroy(uuid_tmp);
  +        uuid_pack(uuid_object, (void **)&uuid_object);
  +        md5_update(md5, (void *)uuid_object, UUID_LEN_BIN);
  +        uuid_destroy(uuid_object);
       }
       else {
           /* standard namespace via UUID namespace id */
  -        ns_uuid = NULL;
  +        uuid_octets = NULL;
           for (i = 0; i < sizeof(uuid_ns_table)/sizeof(uuid_ns_table[0]); i++) {
  -             if (strcmp(uuid_ns_table[i].name, ns_name) == 0) {
  -                 ns_uuid = uuid_ns_table[i].uuid;
  +             if (strcmp(uuid_ns_table[i].name, ns) == 0) {
  +                 uuid_octets = uuid_ns_table[i].uuid;
                    break;
                }
           }
  -        if (ns_uuid == NULL)
  +        if (uuid_octets == NULL)
               return UUID_RC_ARG;
  -        md5_update(md5, ns_uuid, UUID_LEN_BIN);
  +        md5_update(md5, uuid_octets, UUID_LEN_BIN);
       }
   
       /* load the argument name string into MD5 context */
  @@ -590,7 +595,7 @@
       return UUID_RC_OK;
   }
   
  -/* generate UUID version 4: random number based */
  +/* INTERNAL: generate UUID version 4: random number based */
   static uuid_rc_t uuid_generate_v4(uuid_t *uuid, unsigned int mode, va_list ap)
   {
       /* fill UUID with random data */
  @@ -602,6 +607,7 @@
       return UUID_RC_OK;
   }
   
  +/* generate UUID */
   uuid_rc_t uuid_generate(uuid_t *uuid, unsigned int mode, ...)
   {
       va_list ap;
  @@ -626,6 +632,7 @@
       return rc;
   }
   
  +/* dump UUID object as descriptive text */
   uuid_rc_t uuid_dump(uuid_t *uuid, char **str)
   {
       /* sanity check argument(s) */
  @@ -635,6 +642,7 @@
       return UUID_RC_OK;
   }
   
  +/* translate UUID API error code into corresponding error string */
   char *uuid_error(uuid_rc_t rc)
   {
       char *str;
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jan 10 12:54:05 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A20D677301; Sat, 10 Jan 2004 12:54:05 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.c
Message-Id: <20040110115405.A20D677301@mail.ossp.org>
Date: Sat, 10 Jan 2004 12:54:05 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Jan-2004 12:54:05
  Branch: HEAD                             Handle: 2004011011540500

  Modified files:
    ossp-pkg/uuid           uuid.c

  Log:
    move internal binary representation into sub-object of API abstract
    data type in order to have room for adding internal PRNG and MD5
    states to the abstract data type

  Summary:
    Revision    Changes     Path
    1.13        +73 -64     ossp-pkg/uuid/uuid.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 uuid.c
  --- ossp-pkg/uuid/uuid.c	10 Jan 2004 11:14:18 -0000	1.12
  +++ ossp-pkg/uuid/uuid.c	10 Jan 2004 11:54:05 -0000	1.13
  @@ -107,13 +107,18 @@
   #endif
   
   /* UUID binary representation according to UUID standards */
  -struct uuid_st {
  +typedef struct {
       uuid_uint32_t   time_low;
       uuid_uint16_t   time_mid;
       uuid_uint16_t   time_hi_and_version;
       uuid_uint8_t    clock_seq_hi_and_reserved;
       uuid_uint8_t    clock_seq_low;
       uuid_uint8_t    node[6];
  +} uuid_obj_t;
  +
  +/* abstract data type (ADT) of API */
  +struct uuid_st {
  +    uuid_obj_t obj;
   };
   
   /* create UUID object */
  @@ -154,13 +159,13 @@
           return UUID_RC_ARG;
   
       /* clear all octets to create "nil UUID" */
  -    memset(uuid, '\0', sizeof(uuid_t));
  +    memset((void *)&(uuid->obj), '\0', sizeof(uuid->obj));
   
       return UUID_RC_OK;
   }
   
   /* compare UUID objects */
  -uuid_rc_t uuid_compare(uuid_t *a, uuid_t *b, int *result)
  +uuid_rc_t uuid_compare(uuid_t *uuid1, uuid_t *uuid2, int *result)
   {
       int r;
   
  @@ -176,31 +181,31 @@
       } while (0)
   
       /* special cases: NULL or equal UUIDs */
  -    if (a == b)
  +    if (uuid1 == uuid2)
           RESULT(0);
  -    if (a == NULL && b == NULL)
  +    if (uuid1 == NULL && uuid2 == NULL)
           RESULT(0);
  -    if (a == NULL)
  -        RESULT((uuid_isnil(b, &r), r) ? 0 : -1);
  -    if (b == NULL)
  -        RESULT((uuid_isnil(a, &r), r) ? 0 : 1);
  +    if (uuid1 == NULL)
  +        RESULT((uuid_isnil(uuid2, &r), r) ? 0 : -1);
  +    if (uuid2 == NULL)
  +        RESULT((uuid_isnil(uuid1, &r), r) ? 0 : 1);
   
       /* standard cases: regular different UUIDs */
  -    if (a->time_low != b->time_low)
  -        RESULT((a->time_low < b->time_low) ? -1 : 1);
  -    if ((r = (int)a->time_mid
  -           - (int)b->time_mid) != 0)
  +    if (uuid1->obj.time_low != uuid2->obj.time_low)
  +        RESULT((uuid1->obj.time_low < uuid2->obj.time_low) ? -1 : 1);
  +    if ((r = (int)uuid1->obj.time_mid
  +           - (int)uuid2->obj.time_mid) != 0)
           RESULT((r < 0) ? -1 : 1);
  -    if ((r = (int)a->time_hi_and_version
  -           - (int)b->time_hi_and_version) != 0)
  +    if ((r = (int)uuid1->obj.time_hi_and_version
  +           - (int)uuid2->obj.time_hi_and_version) != 0)
           RESULT((r < 0) ? -1 : 1);
  -    if ((r = (int)a->clock_seq_hi_and_reserved
  -           - (int)b->clock_seq_hi_and_reserved) != 0)
  +    if ((r = (int)uuid1->obj.clock_seq_hi_and_reserved
  +           - (int)uuid2->obj.clock_seq_hi_and_reserved) != 0)
           RESULT((r < 0) ? -1 : 1);
  -    if ((r = (int)a->clock_seq_low
  -           - (int)b->clock_seq_low) != 0)
  +    if ((r = (int)uuid1->obj.clock_seq_low
  +           - (int)uuid2->obj.clock_seq_low) != 0)
           RESULT((r < 0) ? -1 : 1);
  -    if ((r = memcmp(a->node, b->node, sizeof(a->node))) != 0)
  +    if ((r = memcmp(uuid1->obj.node, uuid2->obj.node, sizeof(uuid1->obj.node))) != 0)
           RESULT((r < 0) ? -1 : 1);
   
       /* default case: the keys are equal */
  @@ -222,7 +227,7 @@
   
       /* a "nil UUID" is defined as all octets zero, so check for this case */
       *result = TRUE;
  -    for (i = 0, ucp = (unsigned char *)uuid; i < UUID_LEN_BIN; i++) {
  +    for (i = 0, ucp = (unsigned char *)&(uuid->obj); i < UUID_LEN_BIN; i++) {
           if (*ucp++ != '\0') {
               *result = FALSE;
               break;
  @@ -232,7 +237,8 @@
       return UUID_RC_OK;
   }
   
  -/* unpack UUID binary presentation into UUID object (allows in-place operation!) */
  +/* unpack UUID binary presentation into UUID object
  +   (allows in-place operation for internal efficiency!) */
   uuid_rc_t uuid_unpack(uuid_t *uuid, const void *buf)
   {
       const uuid_uint8_t *in;
  @@ -252,32 +258,33 @@
       tmp32 = (tmp32 << 8) | *in++;
       tmp32 = (tmp32 << 8) | *in++;
       tmp32 = (tmp32 << 8) | *in++;
  -    uuid->time_low = tmp32;
  +    uuid->obj.time_low = tmp32;
   
       /* unpack "time_mid" field */
       tmp16 = *in++;
       tmp16 = (tmp16 << 8) | *in++;
  -    uuid->time_mid = tmp16;
  +    uuid->obj.time_mid = tmp16;
   
       /* unpack "time_hi_and_version" field */
       tmp16 = *in++;
       tmp16 = (tmp16 << 8) | *in++;
  -    uuid->time_hi_and_version = tmp16;
  +    uuid->obj.time_hi_and_version = tmp16;
   
       /* unpack "clock_seq_hi_and_reserved" field */
  -    uuid->clock_seq_hi_and_reserved = *in++;
  +    uuid->obj.clock_seq_hi_and_reserved = *in++;
   
       /* unpack "clock_seq_low" field */
  -    uuid->clock_seq_low = *in++;
  +    uuid->obj.clock_seq_low = *in++;
   
       /* unpack "node" field */
  -    for (i = 0; i < sizeof(uuid->node); i++)
  -        uuid->node[i] = *in++;
  +    for (i = 0; i < sizeof(uuid->obj.node); i++)
  +        uuid->obj.node[i] = *in++;
   
       return UUID_RC_OK;
   }
   
  -/* pack UUID object into binary representation (allows in-place operation!) */
  +/* pack UUID object into binary representation
  +   (allows in-place operation for internal efficiency!) */
   uuid_rc_t uuid_pack(uuid_t *uuid, void **buf)
   {
       uuid_uint8_t *out;
  @@ -298,31 +305,31 @@
       out = (uuid_uint8_t *)(*buf);
   
       /* pack "time_low" field */
  -    tmp32 = uuid->time_low;
  +    tmp32 = uuid->obj.time_low;
       out[3] = (uuid_uint8_t)(tmp32 & 0xff); tmp32 >>= 8;
       out[2] = (uuid_uint8_t)(tmp32 & 0xff); tmp32 >>= 8;
       out[1] = (uuid_uint8_t)(tmp32 & 0xff); tmp32 >>= 8;
       out[0] = (uuid_uint8_t)(tmp32 & 0xff);
   
       /* pack "time_mid" field */
  -    tmp16 = uuid->time_mid;
  +    tmp16 = uuid->obj.time_mid;
       out[5] = (uuid_uint8_t)(tmp16 & 0xff); tmp16 >>= 8;
       out[4] = (uuid_uint8_t)(tmp16 & 0xff);
   
       /* pack "time_hi_and_version" field */
  -    tmp16 = uuid->time_hi_and_version;
  +    tmp16 = uuid->obj.time_hi_and_version;
       out[7] = (uuid_uint8_t)(tmp16 & 0xff); tmp16 >>= 8;
       out[6] = (uuid_uint8_t)(tmp16 & 0xff);
   
       /* pack "clock_seq_hi_and_reserved" field */
  -    out[8] = uuid->clock_seq_hi_and_reserved;
  +    out[8] = uuid->obj.clock_seq_hi_and_reserved;
   
       /* pack "clock_seq_low" field */
  -    out[9] = uuid->clock_seq_low;
  +    out[9] = uuid->obj.clock_seq_low;
   
       /* pack "node" field */
  -    for (i = 0; i < sizeof(uuid->node); i++)
  -        out[10+i] = uuid->node[i];
  +    for (i = 0; i < sizeof(uuid->obj.node); i++)
  +        out[10+i] = uuid->obj.node[i];
   
       return UUID_RC_OK;
   }
  @@ -374,22 +381,22 @@
           return UUID_RC_ARG;
   
       /* parse hex values of "time" parts */
  -    uuid->time_low            = (uuid_uint32_t)strtoul(str,    NULL, 16);
  -    uuid->time_mid            = (uuid_uint16_t)strtoul(str+9,  NULL, 16);
  -    uuid->time_hi_and_version = (uuid_uint16_t)strtoul(str+14, NULL, 16);
  +    uuid->obj.time_low            = (uuid_uint32_t)strtoul(str,    NULL, 16);
  +    uuid->obj.time_mid            = (uuid_uint16_t)strtoul(str+9,  NULL, 16);
  +    uuid->obj.time_hi_and_version = (uuid_uint16_t)strtoul(str+14, NULL, 16);
   
       /* parse hex values of "clock" parts */
       tmp16 = (uuid_uint16_t)strtoul(str+19, NULL, 16);
  -    uuid->clock_seq_low             = (uuid_uint8_t)(tmp16 & 0xff); tmp16 >>= 8;
  -    uuid->clock_seq_hi_and_reserved = (uuid_uint8_t)(tmp16 & 0xff);
  +    uuid->obj.clock_seq_low             = (uuid_uint8_t)(tmp16 & 0xff); tmp16 >>= 8;
  +    uuid->obj.clock_seq_hi_and_reserved = (uuid_uint8_t)(tmp16 & 0xff);
   
       /* parse hex values of "node" part */
       cp = str+24;
       hexbuf[2] = '\0';
  -    for (i = 0; i < sizeof(uuid->node); i++) {
  +    for (i = 0; i < sizeof(uuid->obj.node); i++) {
           hexbuf[0] = *cp++;
           hexbuf[1] = *cp++;
  -        uuid->node[i] = strtoul(hexbuf, NULL, 16);
  +        uuid->obj.node[i] = strtoul(hexbuf, NULL, 16);
       }
   
       return UUID_RC_OK;
  @@ -410,17 +417,17 @@
       /* format UUID into string representation */
       sprintf(*str,
           "%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
  -        (unsigned long)uuid->time_low,
  -        (unsigned int)uuid->time_mid,
  -        (unsigned int)uuid->time_hi_and_version,
  -        (unsigned int)uuid->clock_seq_hi_and_reserved,
  -        (unsigned int)uuid->clock_seq_low,
  -        (unsigned int)uuid->node[0],
  -        (unsigned int)uuid->node[1],
  -        (unsigned int)uuid->node[2],
  -        (unsigned int)uuid->node[3],
  -        (unsigned int)uuid->node[4],
  -        (unsigned int)uuid->node[5]);
  +        (unsigned long)uuid->obj.time_low,
  +        (unsigned int)uuid->obj.time_mid,
  +        (unsigned int)uuid->obj.time_hi_and_version,
  +        (unsigned int)uuid->obj.clock_seq_hi_and_reserved,
  +        (unsigned int)uuid->obj.clock_seq_low,
  +        (unsigned int)uuid->obj.node[0],
  +        (unsigned int)uuid->obj.node[1],
  +        (unsigned int)uuid->obj.node[2],
  +        (unsigned int)uuid->obj.node[3],
  +        (unsigned int)uuid->obj.node[4],
  +        (unsigned int)uuid->obj.node[5]);
   
       return UUID_RC_OK;
   }
  @@ -491,12 +498,12 @@
   static void uuid_brand(uuid_t *uuid, int version)
   {
       /* set version (as given) */
  -    uuid->time_hi_and_version &= 0x0fff;
  -    uuid->time_hi_and_version |= (((uuid_uint16_t)version & 0x0fff) << 12);
  +    uuid->obj.time_hi_and_version &= 0x0fff;
  +    uuid->obj.time_hi_and_version |= (((uuid_uint16_t)version & 0x0fff) << 12);
   
       /* set variant (always DCE 1.1 only) */
  -    uuid->clock_seq_hi_and_reserved &= ~((0x03) << 6);
  -    uuid->clock_seq_hi_and_reserved |= (0x02 << 6);
  +    uuid->obj.clock_seq_hi_and_reserved &= ~((0x03) << 6);
  +    uuid->obj.clock_seq_hi_and_reserved |= (0x02 << 6);
       return;
   }
   
  @@ -555,8 +562,9 @@
               return rc;
           if ((rc = uuid_parse(uuid_object, ns)) != UUID_RC_OK)
               return rc;
  -        uuid_pack(uuid_object, (void **)&uuid_object);
  -        md5_update(md5, (void *)uuid_object, UUID_LEN_BIN);
  +        uuid_octets = (void *)&(uuid_object->obj);
  +        uuid_pack(uuid_object, &uuid_octets);
  +        md5_update(md5, uuid_octets, UUID_LEN_BIN);
           uuid_destroy(uuid_object);
       }
       else {
  @@ -579,7 +587,8 @@
       /* store MD5 result into UUID
          (requires MD5_LEN_BIN space, UUID_LEN_BIN space is available,
          and both are equal in size, so we are safe!) */
  -    md5_store(md5, (void *)&uuid, NULL);
  +    uuid_octets = (void *)&(uuid->obj);
  +    md5_store(md5, &uuid_octets, NULL);
   
       /* destroy MD5 context */
       md5_destroy(md5);
  @@ -587,7 +596,7 @@
       /* fulfill requirement of standard and convert UUID data into
          local/host byte order (this uses fact that uuid_unpack() is
          able to operate in-place!) */
  -    uuid_unpack(uuid, (void *)uuid);
  +    uuid_unpack(uuid, (void *)&(uuid->obj));
   
       /* brand UUID with version and variant */
       uuid_brand(uuid, 3);
  @@ -599,7 +608,7 @@
   static uuid_rc_t uuid_generate_v4(uuid_t *uuid, unsigned int mode, va_list ap)
   {
       /* fill UUID with random data */
  -    uuid_prng_getdata((void *)uuid, sizeof(uuid_t));
  +    uuid_prng_getdata((void *)&(uuid->obj), sizeof(uuid->obj));
   
       /* brand UUID with version and variant */
       uuid_brand(uuid, 4);
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jan 10 13:16:05 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BC9FC77301; Sat, 10 Jan 2004 13:16:04 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ Makefile.in uuid.c uuid.h uuid_md5.c uuid_m...
Message-Id: <20040110121604.BC9FC77301@mail.ossp.org>
Date: Sat, 10 Jan 2004 13:16:04 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Jan-2004 13:16:04
  Branch: HEAD                             Handle: 2004011012160300

  Added files:
    ossp-pkg/uuid           uuid_prng.c uuid_prng.h
  Modified files:
    ossp-pkg/uuid           Makefile.in uuid.c uuid.h uuid_md5.c uuid_md5.h

  Log:
    move out PRNG into own object and attach a PRNG and MD5 object for
    reuse into the UUID object

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-pkg/uuid/Makefile.in
    1.14        +24 -77     ossp-pkg/uuid/uuid.c
    1.7         +2  -1      ossp-pkg/uuid/uuid.h
    1.4         +8  -0      ossp-pkg/uuid/uuid_md5.c
    1.2         +1  -0      ossp-pkg/uuid/uuid_md5.h
    1.1         +132 -0     ossp-pkg/uuid/uuid_prng.c
    1.1         +67 -0      ossp-pkg/uuid/uuid_prng.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	9 Jan 2004 15:49:40 -0000	1.4
  +++ ossp-pkg/uuid/Makefile.in	10 Jan 2004 12:16:03 -0000	1.5
  @@ -50,7 +50,7 @@
   POD2MAN     = pod2man
   
   LIB_NAME    = libuuid.la
  -LIB_OBJS    = uuid.lo uuid_md5.lo uuid_ui64.lo
  +LIB_OBJS    = uuid.lo uuid_md5.lo uuid_prng.lo uuid_ui64.lo
   
   PRG_NAME    = uuidtool
   PRG_OBJS    = uuidtool.o
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 uuid.c
  --- ossp-pkg/uuid/uuid.c	10 Jan 2004 11:54:05 -0000	1.13
  +++ ossp-pkg/uuid/uuid.c	10 Jan 2004 12:16:03 -0000	1.14
  @@ -41,6 +41,7 @@
   #include "config.h"
   #include "uuid.h"
   #include "uuid_md5.h"
  +#include "uuid_prng.h"
   #include "uuid_ui64.h"
   
   /* determine types of 8-bit size */
  @@ -118,7 +119,9 @@
   
   /* abstract data type (ADT) of API */
   struct uuid_st {
  -    uuid_obj_t obj;
  +    uuid_obj_t  obj;  /* inlined UUID object */
  +    prng_t     *prng; /* RPNG sub-object */
  +    md5_t      *md5;  /* MD5 sub-object */
   };
   
   /* create UUID object */
  @@ -128,13 +131,19 @@
       if (uuid == NULL)
           return UUID_RC_ARG;
   
  -    /* allocate UUID binary representation buffer */
  +    /* allocate UUID object */
       if ((*uuid = (uuid_t *)malloc(sizeof(uuid_t))) == NULL)
           return UUID_RC_MEM;
   
  -    /* set initially to "nil UUID" */
  +    /* set UUID object initially to "nil UUID" */
       uuid_nil(*uuid);
   
  +    /* create PRNG and MD5 sub-objects */
  +    if (prng_create(&(*uuid)->prng) != PRNG_RC_OK)
  +        return UUID_RC_INT;
  +    if (md5_create(&(*uuid)->md5) != MD5_RC_OK)
  +        return UUID_RC_INT;
  +
       return UUID_RC_OK;
   }
   
  @@ -145,7 +154,11 @@
       if (uuid == NULL)
           return UUID_RC_ARG;
   
  -    /* free UUID binary representation buffer */
  +    /* destroy PRNG and MD5 sub-objects */
  +    prng_destroy(uuid->prng);
  +    md5_destroy(uuid->md5);
  +
  +    /* free UUID object */
       free(uuid);
   
       return UUID_RC_OK;
  @@ -432,68 +445,6 @@
       return UUID_RC_OK;
   }
   
  -/* INTERNAL: pseudo-random number generator (PRNG) */
  -static void uuid_prng_getdata(uuid_uint8_t *data_ptr, size_t data_len)
  -{
  -    static int initialized = FALSE;
  -    static int fd = -1;
  -    struct timeval tv;
  -    pid_t pid;
  -    size_t n;
  -    size_t i;
  -    uuid_uint8_t *p;
  -    int cnt;
  -
  -    if (!initialized) {
  -        /* try to open the system PRNG device */
  -        if ((fd = open("/dev/urandom", O_RDONLY)) == -1)
  -            fd = open("/dev/random", O_RDONLY|O_NONBLOCK);
  -        if (fd != -1)
  -            fcntl(fd, F_SETFD, FD_CLOEXEC);
  -
  -        /* seed the PRNG once */
  -        gettimeofday(&tv, NULL);
  -        pid = getpid();
  -        srand((unsigned int)(
  -              ((uuid_uint32_t)pid << 16)
  -            ^ (uuid_uint32_t)pid
  -            ^ (uuid_uint32_t)tv.tv_sec
  -            ^ (uuid_uint32_t)tv.tv_usec));
  -
  -        /* crank the PRNG a few times */
  -        gettimeofday(&tv, NULL);
  -        for (i = (unsigned int)(tv.tv_sec ^ tv.tv_usec) & 0x1F; i > 0; i--)
  -            (void)rand();
  -
  -        initialized = TRUE;
  -    }
  -
  -    /* try to gather data from the system PRNG device */
  -    if (fd != -1) {
  -        p = data_ptr;
  -        n = data_len;
  -        cnt = 0;
  -        while (n > 0) {
  -            i = read(fd, (void *)p, n);
  -            if (i <= 0) {
  -                if (cnt++ > 16)
  -                    break;
  -                continue;
  -            }
  -            n -= i;
  -            p += i;
  -            cnt = 0;
  -        }
  -    }
  -
  -    /* always also apply the weaker PRNG. In case the stronger PRNG device
  -       based source failed, this is the only remaining randomness, of course */
  -    for (p = data_ptr, n = 0; n < data_len; n++)
  -        *p++ ^= (uuid_uint8_t)(((uuid_uint32_t)rand() >> 7) & 0xFF);
  -
  -    return;
  -}
  -
   /* INTERNAL: brand UUID with version and variant */
   static void uuid_brand(uuid_t *uuid, int version)
   {
  @@ -542,7 +493,6 @@
       void *uuid_octets;
       uuid_t *uuid_object;
       uuid_rc_t rc;
  -    md5_t *md5;
       int i;
   
       /* determine namespace UUID name and argument name string */
  @@ -551,8 +501,8 @@
       if ((str = (char *)va_arg(ap, char *)) == NULL)
           return UUID_RC_ARG;
   
  -    /* create MD5 context */
  -    if (md5_create(&md5) != MD5_RC_OK)
  +    /* initialize MD5 context */
  +    if (md5_init(uuid->md5) != MD5_RC_OK)
           return UUID_RC_MEM;
   
       /* load the namespace UUID into MD5 context */
  @@ -564,7 +514,7 @@
               return rc;
           uuid_octets = (void *)&(uuid_object->obj);
           uuid_pack(uuid_object, &uuid_octets);
  -        md5_update(md5, uuid_octets, UUID_LEN_BIN);
  +        md5_update(uuid->md5, uuid_octets, UUID_LEN_BIN);
           uuid_destroy(uuid_object);
       }
       else {
  @@ -578,20 +528,17 @@
           }
           if (uuid_octets == NULL)
               return UUID_RC_ARG;
  -        md5_update(md5, uuid_octets, UUID_LEN_BIN);
  +        md5_update(uuid->md5, uuid_octets, UUID_LEN_BIN);
       }
   
       /* load the argument name string into MD5 context */
  -    md5_update(md5, str, strlen(str));
  +    md5_update(uuid->md5, str, strlen(str));
   
       /* store MD5 result into UUID
          (requires MD5_LEN_BIN space, UUID_LEN_BIN space is available,
          and both are equal in size, so we are safe!) */
       uuid_octets = (void *)&(uuid->obj);
  -    md5_store(md5, &uuid_octets, NULL);
  -
  -    /* destroy MD5 context */
  -    md5_destroy(md5);
  +    md5_store(uuid->md5, &uuid_octets, NULL);
   
       /* fulfill requirement of standard and convert UUID data into
          local/host byte order (this uses fact that uuid_unpack() is
  @@ -608,7 +555,7 @@
   static uuid_rc_t uuid_generate_v4(uuid_t *uuid, unsigned int mode, va_list ap)
   {
       /* fill UUID with random data */
  -    uuid_prng_getdata((void *)&(uuid->obj), sizeof(uuid->obj));
  +    prng_data(uuid->prng, (void *)&(uuid->obj), sizeof(uuid->obj));
   
       /* brand UUID with version and variant */
       uuid_brand(uuid, 4);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.h
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 uuid.h
  --- ossp-pkg/uuid/uuid.h	9 Jan 2004 16:11:40 -0000	1.6
  +++ ossp-pkg/uuid/uuid.h	10 Jan 2004 12:16:03 -0000	1.7
  @@ -76,7 +76,8 @@
       UUID_RC_OK  = 0,
       UUID_RC_ARG = 1,
       UUID_RC_MEM = 2,
  -    UUID_RC_SYS = 3
  +    UUID_RC_SYS = 3,
  +    UUID_RC_INT = 4
   } uuid_rc_t;
   
   /* generation mode flags */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_md5.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 uuid_md5.c
  --- ossp-pkg/uuid/uuid_md5.c	10 Jan 2004 10:49:00 -0000	1.3
  +++ ossp-pkg/uuid/uuid_md5.c	10 Jan 2004 12:16:03 -0000	1.4
  @@ -367,6 +367,14 @@
       return MD5_RC_OK;
   }
   
  +md5_rc_t md5_init(md5_t *md5)
  +{
  +    if (md5 == NULL)
  +        return MD5_RC_ARG;
  +    MD5Init(&(md5->ctx));
  +    return MD5_RC_OK;
  +}
  +
   md5_rc_t md5_update(md5_t *md5, const void *data_ptr, size_t data_len)
   {
       if (md5 == NULL)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_md5.h
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid_md5.h
  --- ossp-pkg/uuid/uuid_md5.h	9 Jan 2004 15:49:40 -0000	1.1
  +++ ossp-pkg/uuid/uuid_md5.h	10 Jan 2004 12:16:03 -0000	1.2
  @@ -65,6 +65,7 @@
   } md5_rc_t;
   
   extern md5_rc_t md5_create  (md5_t **md5);
  +extern md5_rc_t md5_init    (md5_t  *md5);
   extern md5_rc_t md5_update  (md5_t  *md5, const void  *data_ptr, size_t  data_len);
   extern md5_rc_t md5_store   (md5_t  *md5,       void **data_ptr, size_t *data_len);
   extern md5_rc_t md5_format  (md5_t  *md5,       char **data_ptr, size_t *data_len);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_prng.c
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid_prng.c
  --- /dev/null	2004-01-10 13:16:04.000000000 +0100
  +++ uuid_prng.c	2004-01-10 13:16:04.000000000 +0100
  @@ -0,0 +1,132 @@
  +/*
  +**  OSSP uuid - Universally Unique Identifier
  +**  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +**
  +**  This file is part of OSSP uuid, a library for the generation
  +**  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  uuid_prng.c: PRNG API implementation
  +*/
  +
  +#include <stdlib.h>
  +#include <string.h>
  +#include <unistd.h>
  +#include <time.h>
  +#include <sys/time.h>
  +#include <fcntl.h>
  +
  +#include "uuid_prng.h"
  +
  +struct prng_st {
  +    int devfd;
  +};
  +
  +prng_rc_t prng_create(prng_t **prng)
  +{
  +    int fd = -1;
  +    struct timeval tv;
  +    pid_t pid;
  +    size_t i;
  +
  +    /* sanity check argument(s) */
  +    if (prng == NULL)
  +        return PRNG_RC_ARG;
  +
  +    /* allocate object */
  +    if ((*prng = (prng_t *)malloc(sizeof(prng_t))) == NULL)
  +        return PRNG_RC_MEM;
  +
  +    /* try to open the system PRNG device */
  +    (*prng)->devfd = -1;
  +    if ((fd = open("/dev/urandom", O_RDONLY)) == -1)
  +        fd = open("/dev/random", O_RDONLY|O_NONBLOCK);
  +    if (fd != -1) {
  +        fcntl(fd, F_SETFD, FD_CLOEXEC);
  +        (*prng)->devfd = fd;
  +    }
  +
  +    /* seed the C library PRNG once */
  +    gettimeofday(&tv, NULL);
  +    pid = getpid();
  +    srand((unsigned int)(
  +        ((unsigned int)pid << 16)
  +        ^ (unsigned int)pid
  +        ^ (unsigned int)tv.tv_sec
  +        ^ (unsigned int)tv.tv_usec));
  +
  +    /* crank the PRNG a few times */
  +    gettimeofday(&tv, NULL);
  +    for (i = (unsigned int)(tv.tv_sec ^ tv.tv_usec) & 0x1F; i > 0; i--)
  +        (void)rand();
  +
  +    return PRNG_RC_OK;
  +}
  +
  +prng_rc_t prng_data(prng_t *prng, void *data_ptr, size_t data_len)
  +{
  +    size_t n;
  +    unsigned char *p;
  +    int cnt;
  +    int i;
  +
  +    /* sanity check argument(s) */
  +    if (prng == NULL || data_len == 0)
  +        return PRNG_RC_ARG;
  +
  +    /* try to gather data from the system PRNG device */
  +    if (prng->devfd != -1) {
  +        p = data_ptr;
  +        n = data_len;
  +        cnt = 0;
  +        while (n > 0) {
  +            i = read(prng->devfd, (void *)p, n);
  +            if (i <= 0) {
  +                if (cnt++ > 16)
  +                    break;
  +                continue;
  +            }
  +            n -= i;
  +            p += i;
  +            cnt = 0;
  +        }
  +    }
  +
  +    /* always also apply the weaker PRNG. In case the stronger PRNG device
  +       based source failed, this is the only remaining randomness, of course */
  +    for (p = data_ptr, n = 0; n < data_len; n++)
  +        *p++ ^= (unsigned char)(((unsigned int)rand() >> 7) & 0xFF);
  +
  +    return PRNG_RC_OK;
  +}
  +
  +prng_rc_t prng_destroy(prng_t *prng)
  +{
  +    /* sanity check argument(s) */
  +    if (prng == NULL)
  +        return PRNG_RC_ARG;
  +
  +    /* free object */
  +    free(prng);
  +
  +    return PRNG_RC_OK;
  +}
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_prng.h
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid_prng.h
  --- /dev/null	2004-01-10 13:16:04.000000000 +0100
  +++ uuid_prng.h	2004-01-10 13:16:04.000000000 +0100
  @@ -0,0 +1,67 @@
  +/*
  +**  OSSP uuid - Universally Unique Identifier
  +**  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +**
  +**  This file is part of OSSP uuid, a library for the generation
  +**  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  uuid_prng.h: PRNG API definition
  +*/
  +
  +#ifndef __PRNG_H___
  +#define __PRNG_H___
  +
  +#include <string.h> /* size_t */
  +
  +#define PRNG_PREFIX uuid_
  +
  +/* embedding support */
  +#ifdef PRNG_PREFIX
  +#if defined(__STDC__) || defined(__cplusplus)
  +#define __PRNG_CONCAT(x,y) x ## y
  +#define PRNG_CONCAT(x,y) __PRNG_CONCAT(x,y)
  +#else
  +#define __PRNG_CONCAT(x) x
  +#define PRNG_CONCAT(x,y) __PRNG_CONCAT(x)y
  +#endif
  +#define prng_st      PRNG_CONCAT(PRNG_PREFIX,prng_st)
  +#define prng_t       PRNG_CONCAT(PRNG_PREFIX,prng_t)
  +#define prng_create  PRNG_CONCAT(PRNG_PREFIX,prng_create)
  +#define prng_data    PRNG_CONCAT(PRNG_PREFIX,prng_data)
  +#define prng_destroy PRNG_CONCAT(PRNG_PREFIX,prng_destroy)
  +#endif
  +
  +struct prng_st;
  +typedef struct prng_st prng_t;
  +
  +typedef enum {
  +    PRNG_RC_OK  = 0,
  +    PRNG_RC_ARG = 1,
  +    PRNG_RC_MEM = 2
  +} prng_rc_t;
  +
  +extern prng_rc_t prng_create  (prng_t **prng);
  +extern prng_rc_t prng_data    (prng_t  *prng, void *data_ptr, size_t data_len);
  +extern prng_rc_t prng_destroy (prng_t  *prng);
  +
  +#endif /* __PRNG_H___ */
  +
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jan 10 16:19:21 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A205877302; Sat, 10 Jan 2004 16:19:21 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.c
Message-Id: <20040110151921.A205877302@mail.ossp.org>
Date: Sat, 10 Jan 2004 16:19:21 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Jan-2004 16:19:21
  Branch: HEAD                             Handle: 2004011015192100

  Modified files:
    ossp-pkg/uuid           uuid.c

  Log:
    add time part of UUID v1 generation

  Summary:
    Revision    Changes     Path
    1.15        +63 -2      ossp-pkg/uuid/uuid.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 uuid.c
  --- ossp-pkg/uuid/uuid.c	10 Jan 2004 12:16:03 -0000	1.14
  +++ ossp-pkg/uuid/uuid.c	10 Jan 2004 15:19:21 -0000	1.15
  @@ -458,13 +458,74 @@
       return;
   }
   
  +/* INTERNAL: generate UUID version 1, time part */
  +static uuid_rc_t uuid_generate_v1_time(uuid_t *uuid, unsigned int mode, va_list ap)
  +{
  +    struct timeval tv;
  +    ui64_t t;
  +    ui64_t offset;
  +    ui64_t ov;
  +
  +    /* determine current system time */
  +    if (gettimeofday(&tv, NULL) == -1)
  +        return UUID_RC_SYS;
  +
  +    /* convert from timeval (sec,usec) to OSSP ui64 (100*nsec) format */
  +    t = ui64_n2i(tv.tv_sec);
  +    t = ui64_muln(t, 1000000, NULL);
  +    t = ui64_addn(t, tv.tv_usec, NULL);
  +    t = ui64_muln(t, 10, NULL);
  +
  +    /* adjust for offset between UUID and Unix Epoch time through adding
  +       the magic offset 01B21DD213814000 from draft-leach-uuids-guids-01.
  +       (UUID UTC base time is October 15, 1582
  +        Unix UTC base time is January  1, 1970) */
  +    offset = ui64_s2i("01B21DD213814000", NULL, 16);
  +    t = ui64_add(t, offset, NULL);
  +
  +    /* store the 60 LSB of the time in the UUID */
  +    t = ui64_rol(t, 16, &ov);
  +    uuid->obj.time_hi_and_version =
  +        (uuid_uint16_t)(ui64_i2n(ov) & 0x00000fff); /* 12 of 16 bit only! */
  +    t = ui64_rol(t, 16, &ov);
  +    uuid->obj.time_mid =
  +        (uuid_uint16_t)(ui64_i2n(ov) & 0x0000ffff); /* all 16 bit */
  +    t = ui64_rol(t, 32, &ov);
  +    uuid->obj.time_low =
  +        (uuid_uint32_t)(ui64_i2n(ov) & 0xffffffff); /* all 32 bit */
  +
  +    return UUID_RC_OK;
  +}
  +
  +/* INTERNAL: generate UUID version 1, clock part */
  +static uuid_rc_t uuid_generate_v1_clock(uuid_t *uuid, unsigned int mode, va_list ap)
  +{
  +    /* FIXME */
  +    return UUID_RC_OK;
  +}
  +
  +/* INTERNAL: generate UUID version 1, node part */
  +static uuid_rc_t uuid_generate_v1_node(uuid_t *uuid, unsigned int mode, va_list ap)
  +{
  +    /* FIXME */
  +    return UUID_RC_OK;
  +}
  +
   /* INTERNAL: generate UUID version 1: time, clock and node based */
   static uuid_rc_t uuid_generate_v1(uuid_t *uuid, unsigned int mode, va_list ap)
   {
  +    uuid_rc_t rc;
  +
  +    /* generate individual parts of v1 UUID */
  +    if ((rc = uuid_generate_v1_time (uuid, mode, ap)) != UUID_RC_OK)
  +        return rc;
  +    if ((rc = uuid_generate_v1_clock(uuid, mode, ap)) != UUID_RC_OK)
  +        return rc;
  +    if ((rc = uuid_generate_v1_node (uuid, mode, ap)) != UUID_RC_OK)
  +        return rc;
  +
       /* brand with version and variant */
       uuid_brand(uuid, 1);
  -
  -    /* FIXME */
   
       return UUID_RC_OK;
   }
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jan 10 18:01:23 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3235B77303; Sat, 10 Jan 2004 18:01:23 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ Makefile.in uuid.ac uuid.c uuid_mac.c uuid_...
Message-Id: <20040110170123.3235B77303@mail.ossp.org>
Date: Sat, 10 Jan 2004 18:01:23 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Jan-2004 18:01:23
  Branch: HEAD                             Handle: 2004011017012200

  Added files:
    ossp-pkg/uuid           uuid_mac.c uuid_mac.h
  Modified files:
    ossp-pkg/uuid           Makefile.in uuid.ac uuid.c

  Log:
    add MAC address framework part of UUID v1 generation and implement the
    MAC address resolving for BSD style platforms with getifaddrs(3)

  Summary:
    Revision    Changes     Path
    1.6         +1  -1      ossp-pkg/uuid/Makefile.in
    1.2         +4  -3      ossp-pkg/uuid/uuid.ac
    1.16        +23 -6      ossp-pkg/uuid/uuid.c
    1.1         +110 -0     ossp-pkg/uuid/uuid_mac.c
    1.1         +40 -0      ossp-pkg/uuid/uuid_mac.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	10 Jan 2004 12:16:03 -0000	1.5
  +++ ossp-pkg/uuid/Makefile.in	10 Jan 2004 17:01:22 -0000	1.6
  @@ -50,7 +50,7 @@
   POD2MAN     = pod2man
   
   LIB_NAME    = libuuid.la
  -LIB_OBJS    = uuid.lo uuid_md5.lo uuid_prng.lo uuid_ui64.lo
  +LIB_OBJS    = uuid.lo uuid_md5.lo uuid_prng.lo uuid_mac.lo uuid_ui64.lo
   
   PRG_NAME    = uuidtool
   PRG_OBJS    = uuidtool.o
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.ac
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid.ac
  --- ossp-pkg/uuid/uuid.ac	6 Jan 2004 20:14:28 -0000	1.1
  +++ ossp-pkg/uuid/uuid.ac	10 Jan 2004 17:01:22 -0000	1.2
  @@ -68,10 +68,11 @@
       AC_CHECK_LIB(inet6, getaddrinfo)
   
       dnl #   check for system headers
  -    AC_CHECK_HEADERS(string.h sys/types.h sys/socket.h netdb.h netinet/in.h)
  +    AC_CHECK_HEADERS(string.h sys/types.h sys/socket.h netdb.h netinet/in.h net/if.h)
   
  -    dnl #   check for system functions
  -    AC_CHECK_FUNCS(getaddrinfo)
  +    dnl #   check for MAC determination on BSD class platforms
  +    AC_CHECK_HEADERS(ifaddrs.h net/if_dl.h)
  +    AC_CHECK_FUNCS(getifaddrs)
   
       dnl #   check size of built-in types
       AC_CHECK_SIZEOF(char, 1)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 uuid.c
  --- ossp-pkg/uuid/uuid.c	10 Jan 2004 15:19:21 -0000	1.15
  +++ ossp-pkg/uuid/uuid.c	10 Jan 2004 17:01:22 -0000	1.16
  @@ -33,15 +33,17 @@
   #include <string.h>
   #include <unistd.h>
   #include <ctype.h>
  -#include <time.h>
  -#include <sys/time.h>
   #include <unistd.h>
   #include <fcntl.h>
  +#include <time.h>
  +#include <sys/time.h>
  +#include <sys/types.h>
   
   #include "config.h"
   #include "uuid.h"
   #include "uuid_md5.h"
   #include "uuid_prng.h"
  +#include "uuid_mac.h"
   #include "uuid_ui64.h"
   
   /* determine types of 8-bit size */
  @@ -119,9 +121,10 @@
   
   /* abstract data type (ADT) of API */
   struct uuid_st {
  -    uuid_obj_t  obj;  /* inlined UUID object */
  -    prng_t     *prng; /* RPNG sub-object */
  -    md5_t      *md5;  /* MD5 sub-object */
  +    uuid_obj_t   obj;    /* inlined UUID object */
  +    prng_t      *prng;   /* RPNG sub-object */
  +    md5_t       *md5;    /* MD5 sub-object */
  +    uuid_uint8_t mac[6]; /* pre-determined MAC address */
   };
   
   /* create UUID object */
  @@ -144,6 +147,12 @@
       if (md5_create(&(*uuid)->md5) != MD5_RC_OK)
           return UUID_RC_INT;
   
  +    /* resolve MAC address for insertion into node field of UUIDs */
  +    if (!mac_address((unsigned char *)((*uuid)->mac), sizeof((*uuid)->mac))) {
  +        memset((*uuid)->mac, '\0', sizeof((*uuid)->mac));
  +        (*uuid)->mac[0] = 0x80;
  +    }
  +
       return UUID_RC_OK;
   }
   
  @@ -507,7 +516,15 @@
   /* INTERNAL: generate UUID version 1, node part */
   static uuid_rc_t uuid_generate_v1_node(uuid_t *uuid, unsigned int mode, va_list ap)
   {
  -    /* FIXME */
  +    if ((mode & UUID_MCASTRND) || (uuid->mac[0] & 0x80)) {
  +        /* use random multi-cast MAC address */
  +        prng_data(uuid->prng, (void *)&(uuid->obj.node), sizeof(uuid->obj.node));
  +        uuid->obj.node[0] |= 0x80;
  +    }
  +    else {
  +        /* use real regular MAC address */
  +        memcpy(uuid->obj.node, uuid->mac, sizeof(uuid->mac));
  +    }
       return UUID_RC_OK;
   }
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_mac.c
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid_mac.c
  --- /dev/null	2004-01-10 18:01:22.000000000 +0100
  +++ uuid_mac.c	2004-01-10 18:01:22.000000000 +0100
  @@ -0,0 +1,110 @@
  +/*
  +**  OSSP uuid - Universally Unique Identifier
  +**  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +**
  +**  This file is part of OSSP uuid, a library for the generation
  +**  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  uuid_mac.c: Media Access Control (MAC) resolver implementation
  +*/
  +
  +#include "config.h"
  +#include "uuid_mac.h"
  +
  +#include <stdlib.h>
  +#include <string.h>
  +#include <unistd.h>
  +#include <time.h>
  +#include <sys/time.h>
  +#include <fcntl.h>
  +#include <time.h>
  +#include <sys/time.h>
  +#include <sys/types.h>
  +
  +#ifdef HAVE_IFADDRS_H
  +#include <ifaddrs.h>
  +#endif
  +#ifdef HAVE_NET_IF_DL_H
  +#include <net/if_dl.h>
  +#endif
  +
  +#ifdef HAVE_SYS_IOCTL_H
  +#include <sys/ioctl.h>
  +#endif
  +#ifdef HAVE_SYS_SOCKET_H
  +#include <sys/socket.h>
  +#endif
  +#ifdef HAVE_SYS_SOCKIO_H
  +#include <sys/sockio.h>
  +#endif
  +#ifdef HAVE_NET_IF_H
  +#include <net/if.h>
  +#endif
  +#ifdef HAVE_NETINET_IN_H
  +#include <netinet/in.h>
  +#endif
  +
  +#ifndef FALSE
  +#define FALSE 0
  +#endif
  +#ifndef TRUE
  +#define TRUE !FALSE
  +#endif
  +
  +/* return the Media Access Control (MAC) address of
  +   the FIRST network interface card (NIC) */
  +int mac_address(unsigned char *data_ptr, size_t data_len)
  +{
  +    /* sanity check arguments */
  +    if (data_ptr == NULL || data_len < MAC_LEN)
  +        return FALSE;
  +
  +#if defined(HAVE_IFADDRS_H) && defined(HAVE_NET_IF_DL_H) && defined(HAVE_GETIFADDRS)
  +    /* use getifaddrs(3) on BSD class platforms */
  +    {
  +        struct ifaddrs *ifap;
  +        struct ifaddrs *ifap_head;
  +        const struct sockaddr_dl *sdl;
  +        unsigned char *ucp;
  +        int i;
  +
  +        if (getifaddrs(&ifap_head) != 0)
  +            return FALSE;
  +        for (ifap = ifap_head; ifap != NULL; ifap = ifap->ifa_next) {
  +            if (ifap->ifa_addr != NULL && ifap->ifa_addr->sa_family == AF_LINK) {
  +                sdl = (const struct sockaddr_dl *)ifap->ifa_addr;
  +                ucp = (unsigned char *)(sdl->sdl_data + sdl->sdl_nlen);
  +                if (ucp != NULL && sdl->sdl_alen > 0) {
  +                    for (i = 0; i < MAC_LEN && i < sdl->sdl_alen; i++, ucp++)
  +                        data_ptr[i] = (*ucp & 0xff);
  +                    freeifaddrs(ifap_head);
  +                    return TRUE;
  +                }
  +            }
  +        }
  +        freeifaddrs(ifap_head);
  +    }
  +#endif
  +
  +    return FALSE;
  +}
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_mac.h
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid_mac.h
  --- /dev/null	2004-01-10 18:01:22.000000000 +0100
  +++ uuid_mac.h	2004-01-10 18:01:22.000000000 +0100
  @@ -0,0 +1,40 @@
  +/*
  +**  OSSP uuid - Universally Unique Identifier
  +**  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +**
  +**  This file is part of OSSP uuid, a library for the generation
  +**  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  uuid_mac.h: Media Access Control (MAC) resolver API definition
  +*/
  +
  +#ifndef __UUID_MAC_H__
  +#define __UUID_MAC_H__
  +
  +#include <string.h> /* size_t */
  +
  +#define MAC_LEN 6
  +
  +extern int mac_address(unsigned char *data_ptr, size_t data_len);
  +
  +#endif /* __UUID_MAC_H__ */
  +
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jan 10 19:50:25 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D765577304; Sat, 10 Jan 2004 19:50:24 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.ac uuid_mac.c
Message-Id: <20040110185024.D765577304@mail.ossp.org>
Date: Sat, 10 Jan 2004 19:50:24 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Jan-2004 19:50:24
  Branch: HEAD                             Handle: 2004011018502400

  Modified files:
    ossp-pkg/uuid           uuid.ac uuid_mac.c

  Log:
    add blind Linux and Solaris MAC address support

  Summary:
    Revision    Changes     Path
    1.3         +3  -4      ossp-pkg/uuid/uuid.ac
    1.2         +66 -10     ossp-pkg/uuid/uuid_mac.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.ac
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid.ac
  --- ossp-pkg/uuid/uuid.ac	10 Jan 2004 17:01:22 -0000	1.2
  +++ ossp-pkg/uuid/uuid.ac	10 Jan 2004 18:50:24 -0000	1.3
  @@ -68,10 +68,9 @@
       AC_CHECK_LIB(inet6, getaddrinfo)
   
       dnl #   check for system headers
  -    AC_CHECK_HEADERS(string.h sys/types.h sys/socket.h netdb.h netinet/in.h net/if.h)
  -
  -    dnl #   check for MAC determination on BSD class platforms
  -    AC_CHECK_HEADERS(ifaddrs.h net/if_dl.h)
  +    AC_CHECK_HEADERS(string.h sys/types.h sys/socket.h netdb.h netinet/in.h dnl
  +                     ifaddrs.h net/if_dl.h net/if_arp.h net/if.h sys/ioctl.h dnl
  +                     sys/sockio.h arpa/inet.h)
       AC_CHECK_FUNCS(getifaddrs)
   
       dnl #   check size of built-in types
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_mac.c
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid_mac.c
  --- ossp-pkg/uuid/uuid_mac.c	10 Jan 2004 17:01:22 -0000	1.1
  +++ ossp-pkg/uuid/uuid_mac.c	10 Jan 2004 18:50:24 -0000	1.2
  @@ -40,13 +40,6 @@
   #include <sys/time.h>
   #include <sys/types.h>
   
  -#ifdef HAVE_IFADDRS_H
  -#include <ifaddrs.h>
  -#endif
  -#ifdef HAVE_NET_IF_DL_H
  -#include <net/if_dl.h>
  -#endif
  -
   #ifdef HAVE_SYS_IOCTL_H
   #include <sys/ioctl.h>
   #endif
  @@ -59,9 +52,21 @@
   #ifdef HAVE_NET_IF_H
   #include <net/if.h>
   #endif
  +#ifdef HAVE_NET_IF_DL_H
  +#include <net/if_dl.h>
  +#endif
  +#ifdef HAVE_IF_ARP_H
  +#include <net/if_arp.h>
  +#endif
   #ifdef HAVE_NETINET_IN_H
   #include <netinet/in.h>
   #endif
  +#ifdef HAVE_ARPA_INET_H
  +#include <arpa/inet.h>
  +#endif
  +#ifdef HAVE_IFADDRS_H
  +#include <ifaddrs.h>
  +#endif
   
   #ifndef FALSE
   #define FALSE 0
  @@ -79,7 +84,7 @@
           return FALSE;
   
   #if defined(HAVE_IFADDRS_H) && defined(HAVE_NET_IF_DL_H) && defined(HAVE_GETIFADDRS)
  -    /* use getifaddrs(3) on BSD class platforms */
  +    /* use getifaddrs(3) on BSD class platforms (xxxBSD, MacOS X, etc) */
       {
           struct ifaddrs *ifap;
           struct ifaddrs *ifap_head;
  @@ -87,7 +92,7 @@
           unsigned char *ucp;
           int i;
   
  -        if (getifaddrs(&ifap_head) != 0)
  +        if (getifaddrs(&ifap_head) < 0)
               return FALSE;
           for (ifap = ifap_head; ifap != NULL; ifap = ifap->ifa_next) {
               if (ifap->ifa_addr != NULL && ifap->ifa_addr->sa_family == AF_LINK) {
  @@ -95,13 +100,64 @@
                   ucp = (unsigned char *)(sdl->sdl_data + sdl->sdl_nlen);
                   if (ucp != NULL && sdl->sdl_alen > 0) {
                       for (i = 0; i < MAC_LEN && i < sdl->sdl_alen; i++, ucp++)
  -                        data_ptr[i] = (*ucp & 0xff);
  +                        data_ptr[i] = (unsigned char)(*ucp & 0xff);
                       freeifaddrs(ifap_head);
                       return TRUE;
                   }
               }
           }
           freeifaddrs(ifap_head);
  +    }
  +#endif
  +
  +#if defined(HAVE_NET_IF_H) && defined(SIOCGIFHWADDR)
  +    /* use SIOCGIFHWADDR ioctl(2) on Linux class platforms */
  +    {
  +        struct ifreq ifr;
  +        struct sockaddr *sa;
  +        int s;
  +
  +        if ((s = socket(PF_INET, SOCK_DGRAM, 0)) < 0)
  +            return FALSE;
  +        sprintf(ifr.ifr_name, "eth0");
  +        if (ioctl(s, SIOCGIFHWADDR, &ifr) < 0) {
  +            close(s);
  +            return FALSE;
  +        }
  +        sa = (struct sockaddr *)&ifr.ifr_addr;
  +        for (i = 0; i < MAC_LEN; i++)
  +            data_ptr[i] = (unsigned char)(sa->sa_data[i] & 0xff);
  +        close(s);
  +        return TRUE;
  +    }
  +#endif
  +
  +#if defined(SIOCGARP)
  +    /* use SIOCGARP ioctl(2) on SVR4 class platforms (Solaris, etc) */
  +    {
  +        char hostname[MAXHOSTNAMELEN];
  +        struct hostent *he;
  +        struct arpreq ar;
  +        struct sockaddr_in *sa;
  +
  +        if (gethostname(hostname, sizeof(hostname)) < 0)
  +            return FALSE;
  +        if ((he = gethostbyname(hostname)) < 0)
  +            return FALSE;
  +        if ((s = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0)
  +            return FALSE;
  +        memset(&ar, '\0', sizeof(ar));
  +        sa = (struct sockaddr_in *)&(ar.arp_pa);
  +        sa->sin_family = AF_INET;
  +        memcpy(&(sa->sin_addr), *(he->h_addr_list), sizeof(struct in_addr));
  +        if (ioctl(s, SIOCGARP, &ar) < 0) {
  +            close(s);
  +            return FALSE;
  +        }
  +        for (i = 0; i < MAC_LEN; i++)
  +            data_ptr[i] = (unsigned char)(ar.arp_ha.sa_data[i] & 0xff);
  +        close(s);
  +        return TRUE;
       }
   #endif
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jan 10 20:17:40 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CCA3B77304; Sat, 10 Jan 2004 20:17:39 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.c uuid_mac.c
Message-Id: <20040110191739.CCA3B77304@mail.ossp.org>
Date: Sat, 10 Jan 2004 20:17:39 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Jan-2004 20:17:39
  Branch: HEAD                             Handle: 2004011019173900

  Modified files:
    ossp-pkg/uuid           uuid.c uuid_mac.c

  Log:
    apply fixed after run-time testing under Linux and Solaris

  Summary:
    Revision    Changes     Path
    1.17        +1  -1      ossp-pkg/uuid/uuid.c
    1.3         +11 -3      ossp-pkg/uuid/uuid_mac.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 uuid.c
  --- ossp-pkg/uuid/uuid.c	10 Jan 2004 17:01:22 -0000	1.16
  +++ ossp-pkg/uuid/uuid.c	10 Jan 2004 19:17:39 -0000	1.17
  @@ -380,7 +380,7 @@
           if (i == UUID_LEN_STR)
               if (*cp == '\0')
                   continue;
  -        if (!isxdigit(*cp))
  +        if (!isxdigit((int)(*cp)))
               return FALSE;
       }
       return TRUE;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_mac.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid_mac.c
  --- ossp-pkg/uuid/uuid_mac.c	10 Jan 2004 18:50:24 -0000	1.2
  +++ ossp-pkg/uuid/uuid_mac.c	10 Jan 2004 19:17:39 -0000	1.3
  @@ -30,9 +30,11 @@
   #include "config.h"
   #include "uuid_mac.h"
   
  +#include <stdio.h>
   #include <stdlib.h>
   #include <string.h>
   #include <unistd.h>
  +#include <sys/param.h>
   #include <time.h>
   #include <sys/time.h>
   #include <fcntl.h>
  @@ -49,13 +51,16 @@
   #ifdef HAVE_SYS_SOCKIO_H
   #include <sys/sockio.h>
   #endif
  +#ifdef HAVE_NETDB_H
  +#include <netdb.h>
  +#endif
   #ifdef HAVE_NET_IF_H
   #include <net/if.h>
   #endif
   #ifdef HAVE_NET_IF_DL_H
   #include <net/if_dl.h>
   #endif
  -#ifdef HAVE_IF_ARP_H
  +#ifdef HAVE_NET_IF_ARP_H
   #include <net/if_arp.h>
   #endif
   #ifdef HAVE_NETINET_IN_H
  @@ -116,6 +121,7 @@
           struct ifreq ifr;
           struct sockaddr *sa;
           int s;
  +        int i;
   
           if ((s = socket(PF_INET, SOCK_DGRAM, 0)) < 0)
               return FALSE;
  @@ -139,15 +145,17 @@
           struct hostent *he;
           struct arpreq ar;
           struct sockaddr_in *sa;
  +        int s;
  +        int i;
   
           if (gethostname(hostname, sizeof(hostname)) < 0)
               return FALSE;
  -        if ((he = gethostbyname(hostname)) < 0)
  +        if ((he = gethostbyname(hostname)) == NULL)
               return FALSE;
           if ((s = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0)
               return FALSE;
           memset(&ar, '\0', sizeof(ar));
  -        sa = (struct sockaddr_in *)&(ar.arp_pa);
  +        sa = (struct sockaddr_in *)((void *)&(ar.arp_pa));
           sa->sin_family = AF_INET;
           memcpy(&(sa->sin_addr), *(he->h_addr_list), sizeof(struct in_addr));
           if (ioctl(s, SIOCGARP, &ar) < 0) {
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jan 10 20:34:27 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1F79477303; Sat, 10 Jan 2004 20:34:27 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ Makefile.in
Message-Id: <20040110193427.1F79477303@mail.ossp.org>
Date: Sat, 10 Jan 2004 20:34:27 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Jan-2004 20:34:26
  Branch: HEAD                             Handle: 2004011019342600

  Modified files:
    ossp-pkg/uuid           Makefile.in

  Log:
    fix uuid(1) manual page generation

  Summary:
    Revision    Changes     Path
    1.7         +6  -5      ossp-pkg/uuid/Makefile.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	10 Jan 2004 17:01:22 -0000	1.6
  +++ ossp-pkg/uuid/Makefile.in	10 Jan 2004 19:34:26 -0000	1.7
  @@ -43,6 +43,7 @@
   LDFLAGS     = @LDFLAGS@
   LIBS        = @LIBS@
   RM          = rm -f
  +CP          = cp
   RMDIR       = rmdir
   SHTOOL      = ./shtool
   LIBTOOL     = ./libtool
  @@ -75,7 +76,7 @@
   $(PRG_NAME): $(PRG_OBJS) $(LIB_NAME)
   	@$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $(PRG_NAME) $(PRG_OBJS) $(LIB_NAME) $(LIBS)
   
  -man: uuid.3
  +man: uuid.3 uuid.1
   uuid.3: uuid.pod
   	V1=`$(SHTOOL) version -l txt -d short VERSION`; \
   	V2=`$(SHTOOL) version -l txt -d long VERSION`; \
  @@ -84,16 +85,16 @@
   	           --section=3 --center="Universally Unique Identifiers" \
   	           --release="$$D" --date="OSSP uuid $$V1" uuid.pod | \
   	sed -e "s;UUID_VERSION_STR;$$V2;" >uuid.3
  -
  -man: uuid.1
   uuid.1: uuid_cli.pod
   	V1=`$(SHTOOL) version -l txt -d short VERSION`; \
   	V2=`$(SHTOOL) version -l txt -d long VERSION`; \
   	D=`$(SHTOOL) version -l txt -d long VERSION | sed -e 's;.*(;;' -e 's;).*;;'`; \
  +	$(CP) uuid_cli.pod /tmp/uuid.pod; \
   	$(POD2MAN) --quotes=none \
   	           --section=1 --center="Universally Unique Identifiers" \
  -	           --release="$$D" --date="OSSP uuid $$V1" uuid_cli.pod | \
  -	sed -e "s;UUID_VERSION_STR;$$V2;" >uuid.1
  +	           --release="$$D" --date="OSSP uuid $$V1" /tmp/uuid.pod | \
  +	sed -e "s;UUID_VERSION_STR;$$V2;" >uuid.1; \
  +	$(RM) /tmp/uuid.pod
   
   check: $(PRG_NAME)
   	@$(LIBTOOL) --mode=execute ./$(PRG_NAME) -n 16
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jan 10 20:35:03 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CDDE877303; Sat, 10 Jan 2004 20:35:02 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ TODO
Message-Id: <20040110193502.CDDE877303@mail.ossp.org>
Date: Sat, 10 Jan 2004 20:35:02 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Jan-2004 20:35:02
  Branch: HEAD                             Handle: 2004011019350200

  Added files:
    ossp-pkg/uuid           TODO

  Log:
    remember TODO points

  Summary:
    Revision    Changes     Path
    1.1         +4  -0      ossp-pkg/uuid/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/TODO
  ============================================================================
  $ cvs diff -u -r0 -r1.1 TODO
  --- /dev/null	2004-01-10 20:35:02.000000000 +0100
  +++ TODO	2004-01-10 20:35:02.000000000 +0100
  @@ -0,0 +1,4 @@
  +- clock part of UUID v1 generation
  +- write documentation uuid(3) [uuid.pod]
  +- write documentation uuid(1) [uuid_cli.pod]
  +- more platform support in uuid_mac.c?!
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jan 10 21:12:47 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4458977309; Sat, 10 Jan 2004 21:12:47 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ README TODO uuid.pod uuid_cli.pod
Message-Id: <20040110201247.4458977309@mail.ossp.org>
Date: Sat, 10 Jan 2004 21:12:47 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Jan-2004 21:12:47
  Branch: HEAD                             Handle: 2004011020124600

  Modified files:
    ossp-pkg/uuid           README TODO uuid.pod uuid_cli.pod

  Log:
    add a bunch of initial documentation

  Summary:
    Revision    Changes     Path
    1.2         +5  -1      ossp-pkg/uuid/README
    1.2         +1  -0      ossp-pkg/uuid/TODO
    1.2         +58 -4      ossp-pkg/uuid/uuid.pod
    1.2         +73 -3      ossp-pkg/uuid/uuid_cli.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 README
  --- ossp-pkg/uuid/README	6 Jan 2004 20:14:28 -0000	1.1
  +++ ossp-pkg/uuid/README	10 Jan 2004 20:12:46 -0000	1.2
  @@ -9,7 +9,11 @@
   
     ABSTRACT
   
  -  OSSP uuid is ...
  +  OSSP uuid is a ISO-C application programming interface (API) and
  +  corresponding command line interface (CLI) for the generation of DCE
  +  1.1 and ISO/IEC 11578:1996 compliant Universally Unique Identifiers
  +  (UUID). It supports DCE 1.1 variant UUIDs of version 1 (time and node
  +  based), version 3 (name based) and version 4 (random number based).
   
     COPYRIGHT AND LICENSE
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/TODO
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 TODO
  --- ossp-pkg/uuid/TODO	10 Jan 2004 19:35:02 -0000	1.1
  +++ ossp-pkg/uuid/TODO	10 Jan 2004 20:12:46 -0000	1.2
  @@ -2,3 +2,4 @@
   - write documentation uuid(3) [uuid.pod]
   - write documentation uuid(1) [uuid_cli.pod]
   - more platform support in uuid_mac.c?!
  +- implement uuid -d (uuid_dump): dumping/decoding
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	6 Jan 2004 20:20:12 -0000	1.1
  +++ ossp-pkg/uuid/uuid.pod	10 Jan 2004 20:12:46 -0000	1.2
  @@ -33,11 +33,15 @@
   
   B<OSSP uuid> - B<Universally Unique Identifier>
   
  -=head1 SYNOPSIS
  +=head1 DESCRIPTION
   
  -...FIXME...
  +B<OSSP uuid> is a ISO-C application programming interface (API) and
  +corresponding command line interface (CLI) for the generation of DCE
  +1.1 and ISO/IEC 11578:1996 compliant I<Universally Unique Identifiers>
  +(UUID). It supports DCE 1.1 variant UUIDs of version 1 (time and node
  +based), version 3 (name based) and version 4 (random number based).
   
  -=head1 DESCRIPTION
  +This is the ISO-C application programming interface (API).
   
   =head2 Overview
   
  @@ -76,7 +80,57 @@
   
   =head1 APPLICATION PROGRAMMING INTERFACE
   
  -...FIXME...
  +=over 4
  +
  +=item uuid_rc_t B<uuid_create>(uuid_t **I<uuid>);
  +
  +FIXME
  +
  +=item uuid_rc_t B<uuid_destroy>(uuid_t *I<uuid>);
  +
  +FIXME
  +
  +=item uuid_rc_t B<uuid_nil>(uuid_t *I<uuid>);
  +
  +FIXME
  +
  +=item uuid_rc_t B<uuid_compare>(uuid_t *I<uuid>, uuid_t *I<uuid2>, int *I<result>);
  +
  +FIXME
  +
  +=item uuid_rc_t B<uuid_isnil>(uuid_t *I<uuid>, int *I<result>);
  +
  +FIXME
  +
  +=item uuid_rc_t B<uuid_unpack>(uuid_t *I<uuid>, const void *I<buf>);
  +
  +FIXME
  +
  +=item uuid_rc_t B<uuid_pack>(uuid_t *I<uuid>, void **I<buf>);
  +
  +FIXME
  +
  +=item uuid_rc_t B<uuid_parse>(uuid_t  *I<uuid>, const char  *I<str>);
  +
  +FIXME
  +
  +=item uuid_rc_t B<uuid_format>(uuid_t *I<uuid>, char **I<str>);
  +
  +FIXME
  +
  +=item uuid_rc_t B<uuid_generate>(uuid_t *I<uuid>, unsigned int I<mode>, ...);
  +
  +FIXME
  +
  +=item uuid_rc_t B<uuid_dump>(uuid_t *I<uuid>, char **I<str>);
  +
  +FIXME
  +
  +=item char *B<uuid_error>(uuid_rc_t I<rc>);
  +
  +FIXME
  +
  +=back
   
   =head1 SEE ALSO
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.pod
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid_cli.pod
  --- ossp-pkg/uuid/uuid_cli.pod	6 Jan 2004 20:20:12 -0000	1.1
  +++ ossp-pkg/uuid/uuid_cli.pod	10 Jan 2004 20:12:46 -0000	1.2
  @@ -35,15 +35,85 @@
   
   =head1 SYNOPSIS
   
  -...FIXME...
  +B<uuid>
  +[B<-v> I<version>]
  +[B<-n> I<count>]
  +[B<-1>]
  +[B<-r>]
  +[B<-o> I<filename>]
  +[I<namespace> I<name>]
  +
  +B<uuid>
  +B<-d>
  +[B<-r>]
  +[B<-o> I<filename>]
  +[I<uuid>]
   
   =head1 DESCRIPTION
   
  -...FIXME...
  +B<OSSP uuid> is a ISO-C application programming interface (API) and
  +corresponding command line interface (CLI) for the generation of DCE
  +1.1 and ISO/IEC 11578:1996 compliant I<Universally Unique Identifiers>
  +(UUID). It supports DCE 1.1 variant UUIDs of version 1 (time and node
  +based), version 3 (name based) and version 4 (random number based).
  +
  +This is the command line interface (CLI). For a brief overview of UUIDs
  +see the documentation of the application programming interface (API) in
  +uuid(3).
   
   =head1 OPTIONS
   
  -...FIXME...
  +=over 3
  +
  +=item B<-v> I<version>
  +
  +Sets the version of the generated DCE 1.1 variant UUID.
  +Supported are I<version> "C<1>", "C<3>" and "C<4>".
  +The default is "C<1>".
  +
  +=item B<-n> I<count>
  +
  +Generate I<count> UUIDs instead of just a single one (the default).
  +
  +=item B<-1>
  +
  +If option B<-n> is used with a I<count> greater than C<1>, then this
  +option can enforce the reset the UUID context for each generated UUID.
  +This makes no difference for I<version> C<3> and C<4> UUIDs. But
  +version C<1> UUIDs are based on the previously generated UUID which is
  +remembered in the UUID context of the API. Option B<-1> deletes the
  +remembered UUID on each iteration.
  +
  +=item B<-r>
  +
  +Output the generated UUID in 128 bit (network byte order) raw binary
  +representation format. The default is to output the generated UUID in
  +the standardized ASCII string representation.
  +
  +=item B<-o> I<filename>
  +
  +Write output to I<filename> instead of to F<stdout>.
  +
  +=item B<-d>
  +
  +Decode a given UUID (either on F<stdin> or as an argument on the command
  +line) and dump textual information about the UUID.
  +
  +=back
  +
  +=head1 EXAMPLES
  +
  + # generate DCE 1.1 variant UUID of version 1 (time and node based)
  + $ uuid -v1
  + 1430fcde-43a9-11d8-8000-0090272ff725
  +
  + # generate DCE 1.1 variant UUID of version 3 (name based)
  + $ uuid -v3 URL http://www.ossp.org/
  + 02d9e6d5-9467-382e-8f9b-9300a64ac3cd
  + 
  + # generate DCE 1.1 variant UUID of version 4 (random data based)
  + $ ./uuid -v4                         
  + eb424026-6f54-4ef8-a4d0-bb658a1fc6cf
   
   =head1 SEE ALSO
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jan 10 22:16:23 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 47DD477307; Sat, 10 Jan 2004 22:16:23 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ TODO
Message-Id: <20040110211623.47DD477307@mail.ossp.org>
Date: Sat, 10 Jan 2004 22:16:23 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Jan-2004 22:16:23
  Branch: HEAD                             Handle: 2004011021162200

  Modified files:
    ossp-pkg/uuid           TODO

  Log:
    remember issues

  Summary:
    Revision    Changes     Path
    1.3         +2  -0      ossp-pkg/uuid/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/TODO
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 TODO
  --- ossp-pkg/uuid/TODO	10 Jan 2004 20:12:46 -0000	1.2
  +++ ossp-pkg/uuid/TODO	10 Jan 2004 21:16:22 -0000	1.3
  @@ -3,3 +3,5 @@
   - write documentation uuid(1) [uuid_cli.pod]
   - more platform support in uuid_mac.c?!
   - implement uuid -d (uuid_dump): dumping/decoding
  +- global locking according to standard?
  +- persistent/non-volatile state writing?
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jan 10 22:47:46 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 272BD77307; Sat, 10 Jan 2004 22:47:46 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.ac uuid.c
Message-Id: <20040110214746.272BD77307@mail.ossp.org>
Date: Sat, 10 Jan 2004 22:47:46 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Jan-2004 22:47:46
  Branch: HEAD                             Handle: 2004011021474500

  Modified files:
    ossp-pkg/uuid           uuid.ac uuid.c

  Log:
    add system clock resolution compensation according to the UUID
    standard(s)

  Summary:
    Revision    Changes     Path
    1.4         +3  -1      ossp-pkg/uuid/uuid.ac
    1.18        +61 -9      ossp-pkg/uuid/uuid.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.ac
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 uuid.ac
  --- ossp-pkg/uuid/uuid.ac	10 Jan 2004 18:50:24 -0000	1.3
  +++ ossp-pkg/uuid/uuid.ac	10 Jan 2004 21:47:45 -0000	1.4
  @@ -71,7 +71,9 @@
       AC_CHECK_HEADERS(string.h sys/types.h sys/socket.h netdb.h netinet/in.h dnl
                        ifaddrs.h net/if_dl.h net/if_arp.h net/if.h sys/ioctl.h dnl
                        sys/sockio.h arpa/inet.h)
  -    AC_CHECK_FUNCS(getifaddrs)
  +
  +    dnl #   check for functions
  +    AC_CHECK_FUNCS(getifaddrs nanosleep)
   
       dnl #   check size of built-in types
       AC_CHECK_SIZEOF(char, 1)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 uuid.c
  --- ossp-pkg/uuid/uuid.c	10 Jan 2004 19:17:39 -0000	1.17
  +++ ossp-pkg/uuid/uuid.c	10 Jan 2004 21:47:45 -0000	1.18
  @@ -121,10 +121,12 @@
   
   /* abstract data type (ADT) of API */
   struct uuid_st {
  -    uuid_obj_t   obj;    /* inlined UUID object */
  -    prng_t      *prng;   /* RPNG sub-object */
  -    md5_t       *md5;    /* MD5 sub-object */
  -    uuid_uint8_t mac[6]; /* pre-determined MAC address */
  +    uuid_obj_t     obj;       /* inlined UUID object */
  +    prng_t        *prng;      /* RPNG sub-object */
  +    md5_t         *md5;       /* MD5 sub-object */
  +    uuid_uint8_t   mac[6];    /* pre-determined MAC address */
  +    struct timeval time_last; /* last retrieved timestamp */
  +    unsigned long  time_seq;  /* last timestamp sequence counter */
   };
   
   /* create UUID object */
  @@ -153,6 +155,11 @@
           (*uuid)->mac[0] = 0x80;
       }
   
  +    /* initialize time attributes */
  +    (*uuid)->time_last.tv_sec  = 0;
  +    (*uuid)->time_last.tv_usec = 0;
  +    (*uuid)->time_seq = 0;
  +
       return UUID_RC_OK;
   }
   
  @@ -467,22 +474,62 @@
       return;
   }
   
  +/* maximum number of 100ns ticks of the actual resolution of system clock
  +   (which in our case is 1us (= 1000ns) because we use gettimeofday(2) */
  +#define UUIDS_PER_TICK 10
  +
   /* INTERNAL: generate UUID version 1, time part */
   static uuid_rc_t uuid_generate_v1_time(uuid_t *uuid, unsigned int mode, va_list ap)
   {
  +    struct timeval time_now;
       struct timeval tv;
       ui64_t t;
       ui64_t offset;
       ui64_t ov;
   
  -    /* determine current system time */
  -    if (gettimeofday(&tv, NULL) == -1)
  -        return UUID_RC_SYS;
  +    /* determine current system time and sequence counter */
  +    while (1) {
  +        /* determine current system time */
  +        if (gettimeofday(&time_now, NULL) == -1)
  +            return UUID_RC_SYS;
  +
  +        /* check whether system time changed since last retrieve */
  +        if (!(   time_now.tv_sec  == uuid->time_last.tv_sec
  +              && time_now.tv_usec == uuid->time_last.tv_usec)) {
  +            /* reset time sequence counter */
  +            uuid->time_seq = 0;
  +
  +            /* remember system time for next iteration */
  +            uuid->time_last.tv_sec  = time_now.tv_sec;
  +            uuid->time_last.tv_usec = time_now.tv_usec;
  +        }
  +
  +        /* until we are out of UUIDs per tick, increment
  +           the time/tick sequence counter and continue */
  +        if (uuid->time_seq < UUIDS_PER_TICK) {
  +            uuid->time_seq++;
  +            break;
  +        }
  +
  +        /* else sleep a little bit until the system clock (which has
  +           a gettimeofday(2) resolution of 1us) has changed. */
  +#ifdef HAVE_NANOSLEEP
  +        /* sleep for 500ns (1/2us) */
  +        ts.tv_sec  = 0;
  +        ts.tv_nsec = 500;
  +        nanosleep(&ts, NULL);
  +#else
  +        /* sleep for 1000ns (1us) */
  +        tv.tv_sec  = 0;
  +        tv.tv_usec = 1;
  +        select(0, NULL, NULL, NULL, &tv);
  +#endif
  +    }
   
       /* convert from timeval (sec,usec) to OSSP ui64 (100*nsec) format */
  -    t = ui64_n2i(tv.tv_sec);
  +    t = ui64_n2i(time_now.tv_sec);
       t = ui64_muln(t, 1000000, NULL);
  -    t = ui64_addn(t, tv.tv_usec, NULL);
  +    t = ui64_addn(t, time_now.tv_usec, NULL);
       t = ui64_muln(t, 10, NULL);
   
       /* adjust for offset between UUID and Unix Epoch time through adding
  @@ -491,6 +538,11 @@
           Unix UTC base time is January  1, 1970) */
       offset = ui64_s2i("01B21DD213814000", NULL, 16);
       t = ui64_add(t, offset, NULL);
  +
  +    /* compensate for low resolution system clock by adding
  +       the time/tick sequence counter */
  +    if (uuid->time_seq > 0)
  +        t = ui64_addn(t, uuid->time_seq, NULL);
   
       /* store the 60 LSB of the time in the UUID */
       t = ui64_rol(t, 16, &ov);
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jan 10 22:54:52 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8374F77307; Sat, 10 Jan 2004 22:54:52 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.c
Message-Id: <20040110215452.8374F77307@mail.ossp.org>
Date: Sat, 10 Jan 2004 22:54:52 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Jan-2004 22:54:52
  Branch: HEAD                             Handle: 2004011021545200

  Modified files:
    ossp-pkg/uuid           uuid.c

  Log:
    better wording

  Summary:
    Revision    Changes     Path
    1.19        +2  -2      ossp-pkg/uuid/uuid.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 uuid.c
  --- ossp-pkg/uuid/uuid.c	10 Jan 2004 21:47:45 -0000	1.18
  +++ ossp-pkg/uuid/uuid.c	10 Jan 2004 21:54:52 -0000	1.19
  @@ -511,8 +511,8 @@
               break;
           }
   
  -        /* else sleep a little bit until the system clock (which has
  -           a gettimeofday(2) resolution of 1us) has changed. */
  +        /* stall the UUID generation until the system clock (which
  +           has a gettimeofday(2) resolution of 1us) catches up */
   #ifdef HAVE_NANOSLEEP
           /* sleep for 500ns (1/2us) */
           ts.tv_sec  = 0;
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jan 10 23:18:49 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0967677307; Sat, 10 Jan 2004 23:18:48 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.c
Message-Id: <20040110221848.0967677307@mail.ossp.org>
Date: Sat, 10 Jan 2004 23:18:48 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Jan-2004 23:18:48
  Branch: HEAD                             Handle: 2004011022184800

  Modified files:
    ossp-pkg/uuid           uuid.c

  Log:
    implement last component of v1 UUID generation: clock sequence

  Summary:
    Revision    Changes     Path
    1.20        +44 -34     ossp-pkg/uuid/uuid.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 uuid.c
  --- ossp-pkg/uuid/uuid.c	10 Jan 2004 21:54:52 -0000	1.19
  +++ ossp-pkg/uuid/uuid.c	10 Jan 2004 22:18:48 -0000	1.20
  @@ -478,14 +478,19 @@
      (which in our case is 1us (= 1000ns) because we use gettimeofday(2) */
   #define UUIDS_PER_TICK 10
   
  -/* INTERNAL: generate UUID version 1, time part */
  -static uuid_rc_t uuid_generate_v1_time(uuid_t *uuid, unsigned int mode, va_list ap)
  +/* INTERNAL: generate UUID version 1: time, clock and node based */
  +static uuid_rc_t uuid_generate_v1(uuid_t *uuid, unsigned int mode, va_list ap)
   {
       struct timeval time_now;
       struct timeval tv;
       ui64_t t;
       ui64_t offset;
       ui64_t ov;
  +    uuid_uint16_t clck;
  +
  +    /*
  +     *  GENERATE TIME
  +     */
   
       /* determine current system time and sequence counter */
       while (1) {
  @@ -495,15 +500,10 @@
   
           /* check whether system time changed since last retrieve */
           if (!(   time_now.tv_sec  == uuid->time_last.tv_sec
  -              && time_now.tv_usec == uuid->time_last.tv_usec)) {
  +              && time_now.tv_usec == uuid->time_last.tv_usec))
               /* reset time sequence counter */
               uuid->time_seq = 0;
   
  -            /* remember system time for next iteration */
  -            uuid->time_last.tv_sec  = time_now.tv_sec;
  -            uuid->time_last.tv_usec = time_now.tv_usec;
  -        }
  -
           /* until we are out of UUIDs per tick, increment
              the time/tick sequence counter and continue */
           if (uuid->time_seq < UUIDS_PER_TICK) {
  @@ -555,19 +555,36 @@
       uuid->obj.time_low =
           (uuid_uint32_t)(ui64_i2n(ov) & 0xffffffff); /* all 32 bit */
   
  -    return UUID_RC_OK;
  -}
  -
  -/* INTERNAL: generate UUID version 1, clock part */
  -static uuid_rc_t uuid_generate_v1_clock(uuid_t *uuid, unsigned int mode, va_list ap)
  -{
  -    /* FIXME */
  -    return UUID_RC_OK;
  -}
  +    /*
  +     *  GENERATE CLOCK
  +     */
  +
  +    /* retrieve current clock sequence */
  +    clck = ((uuid->obj.clock_seq_hi_and_reserved & ~((0x03) << 6)) << 8)
  +           + uuid->obj.clock_seq_low;
  +
  +    /* generate new random clock sequence (initially or if the
  +       time has stepped backwards) or else just increase it */
  +    if (   clck == 0
  +        || (   time_now.tv_sec < uuid->time_last.tv_sec
  +            || (   time_now.tv_sec == uuid->time_last.tv_sec
  +                && time_now.tv_usec < uuid->time_last.tv_usec)))
  +        prng_data(uuid->prng, (void *)&clck, sizeof(clck));
  +    else
  +        clck++;
  +    clck &= ~((0x03) << 6);
  +
  +    /* store back new clock sequence */
  +    uuid->obj.clock_seq_hi_and_reserved =
  +        (uuid->obj.clock_seq_hi_and_reserved & ((0x03) << 6))
  +        | (uuid_uint8_t)((clck >> 8) & 0xff);
  +    uuid->obj.clock_seq_low =
  +        (uuid_uint8_t)(clck & 0xff);
  +
  +    /*
  +     *  GENERATE NODE
  +     */
   
  -/* INTERNAL: generate UUID version 1, node part */
  -static uuid_rc_t uuid_generate_v1_node(uuid_t *uuid, unsigned int mode, va_list ap)
  -{
       if ((mode & UUID_MCASTRND) || (uuid->mac[0] & 0x80)) {
           /* use random multi-cast MAC address */
           prng_data(uuid->prng, (void *)&(uuid->obj.node), sizeof(uuid->obj.node));
  @@ -577,21 +594,14 @@
           /* use real regular MAC address */
           memcpy(uuid->obj.node, uuid->mac, sizeof(uuid->mac));
       }
  -    return UUID_RC_OK;
  -}
  -
  -/* INTERNAL: generate UUID version 1: time, clock and node based */
  -static uuid_rc_t uuid_generate_v1(uuid_t *uuid, unsigned int mode, va_list ap)
  -{
  -    uuid_rc_t rc;
   
  -    /* generate individual parts of v1 UUID */
  -    if ((rc = uuid_generate_v1_time (uuid, mode, ap)) != UUID_RC_OK)
  -        return rc;
  -    if ((rc = uuid_generate_v1_clock(uuid, mode, ap)) != UUID_RC_OK)
  -        return rc;
  -    if ((rc = uuid_generate_v1_node (uuid, mode, ap)) != UUID_RC_OK)
  -        return rc;
  +    /*
  +     *  FINISH
  +     */
  +
  +    /* remember current system time for next iteration */
  +    uuid->time_last.tv_sec  = time_now.tv_sec;
  +    uuid->time_last.tv_usec = time_now.tv_usec;
   
       /* brand with version and variant */
       uuid_brand(uuid, 1);
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jan 10 23:19:55 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5117F77307; Sat, 10 Jan 2004 23:19:55 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ TODO
Message-Id: <20040110221955.5117F77307@mail.ossp.org>
Date: Sat, 10 Jan 2004 23:19:55 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Jan-2004 23:19:55
  Branch: HEAD                             Handle: 2004011022195400

  Modified files:
    ossp-pkg/uuid           TODO

  Log:
    remove already done points

  Summary:
    Revision    Changes     Path
    1.4         +0  -2      ossp-pkg/uuid/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/TODO
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 TODO
  --- ossp-pkg/uuid/TODO	10 Jan 2004 21:16:22 -0000	1.3
  +++ ossp-pkg/uuid/TODO	10 Jan 2004 22:19:54 -0000	1.4
  @@ -1,6 +1,4 @@
  -- clock part of UUID v1 generation
   - write documentation uuid(3) [uuid.pod]
  -- write documentation uuid(1) [uuid_cli.pod]
   - more platform support in uuid_mac.c?!
   - implement uuid -d (uuid_dump): dumping/decoding
   - global locking according to standard?
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jan 10 23:21:08 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BD3E877307; Sat, 10 Jan 2004 23:21:08 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ README VERSION
Message-Id: <20040110222108.BD3E877307@mail.ossp.org>
Date: Sat, 10 Jan 2004 23:21:08 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Jan-2004 23:21:08
  Branch: HEAD                             Handle: 2004011022210800

  Modified files:
    ossp-pkg/uuid           README VERSION

  Log:
    now that all important functionality is implemented, bump up to 0.9.0

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/uuid/README
    1.2         +1  -1      ossp-pkg/uuid/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 README
  --- ossp-pkg/uuid/README	10 Jan 2004 20:12:46 -0000	1.2
  +++ ossp-pkg/uuid/README	10 Jan 2004 22:21:08 -0000	1.3
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
   
     OSSP uuid - Universally Unique Identifiers
  -  Version 0.1.0 (06-Jan-2004)
  +  Version 0.9.0 (10-Jan-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/VERSION
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 VERSION
  --- ossp-pkg/uuid/VERSION	6 Jan 2004 20:14:28 -0000	1.1
  +++ ossp-pkg/uuid/VERSION	10 Jan 2004 22:21:08 -0000	1.2
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP uuid (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP uuid, Version 0.1.0 (06-Jan-2004)
  +  This is OSSP uuid, Version 0.9.0 (10-Jan-2004)
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jan 10 23:21:48 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 66C2E77307; Sat, 10 Jan 2004 23:21:48 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ Makefile.in
Message-Id: <20040110222148.66C2E77307@mail.ossp.org>
Date: Sat, 10 Jan 2004 23:21:48 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Jan-2004 23:21:48
  Branch: HEAD                             Handle: 2004011022214700

  Modified files:
    ossp-pkg/uuid           Makefile.in

  Log:
    fix installation

  Summary:
    Revision    Changes     Path
    1.8         +2  -0      ossp-pkg/uuid/Makefile.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	10 Jan 2004 19:34:26 -0000	1.7
  +++ ossp-pkg/uuid/Makefile.in	10 Jan 2004 22:21:47 -0000	1.8
  @@ -105,6 +105,7 @@
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(includedir)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libdir)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man3
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man1
   	$(SHTOOL) install -c -m 755 uuid-config $(DESTDIR)$(bindir)/
   	$(SHTOOL) install -c -m 644 uuid.h $(DESTDIR)$(includedir)/
   	$(SHTOOL) install -c -m 644 uuid.3 $(DESTDIR)$(mandir)/man3/
  @@ -119,6 +120,7 @@
   	-$(RM) $(DESTDIR)$(mandir)/man3/uuid.3
   	-$(RM) $(DESTDIR)$(includedir)/uuid.h
   	-$(RM) $(DESTDIR)$(bindir)/uuid-config
  +	-$(RMDIR) $(DESTDIR)$(mandir)/man1 >/dev/null 2>&1 || $(TRUE)
   	-$(RMDIR) $(DESTDIR)$(mandir)/man3 >/dev/null 2>&1 || $(TRUE)
   	-$(RMDIR) $(DESTDIR)$(mandir) >/dev/null 2>&1 || $(TRUE)
   	-$(RMDIR) $(DESTDIR)$(libdir) >/dev/null 2>&1 || $(TRUE)
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jan 10 23:32:32 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2DD1077309; Sat, 10 Jan 2004 23:32:32 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/ index.wml ossp-web/pkg/lib/uuid/ .cvsign...
Message-Id: <20040110223232.2DD1077309@mail.ossp.org>
Date: Sat, 10 Jan 2004 23:32:32 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   10-Jan-2004 23:32:32
  Branch: HEAD                             Handle: 2004011022323100

  Added files:
    ossp-web/pkg/lib/uuid   .cvsignore index.wml
  Modified files:
    ossp-web/pkg/lib        index.wml

  Log:
    add OSSP uuid webpage

  Summary:
    Revision    Changes     Path
    1.61        +3  -0      ossp-web/pkg/lib/index.wml
    1.1         +1  -0      ossp-web/pkg/lib/uuid/.cvsignore
    1.1         +48 -0      ossp-web/pkg/lib/uuid/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.60 -r1.61 index.wml
  --- ossp-web/pkg/lib/index.wml	10 Nov 2003 19:04:52 -0000	1.60
  +++ ossp-web/pkg/lib/index.wml	10 Jan 2004 22:32:31 -0000	1.61
  @@ -40,6 +40,9 @@
     <pkg_item name="str" longname="OSSP str" type="lib"
               desc="String Handling"
   			done=95 stable=none unstable=0.9.8>
  +  <pkg_item name="uuid" longname="OSSP uuid" type="lib"
  +            desc="Universally Unique Identifiers"
  +			done=90 stable=none unstable=0.9.0>
     <pkg_item name="l2" longname="OSSP l2" type="lib"
               desc="Flexible Logging"
   			done=95 stable=none unstable=0.9.5>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/uuid/.cvsignore
  ============================================================================
  $ cvs diff -u -r0 -r1.1 .cvsignore
  --- /dev/null	2004-01-10 23:32:31.000000000 +0100
  +++ .cvsignore	2004-01-10 23:32:32.000000000 +0100
  @@ -0,0 +1 @@
  +*.html
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/uuid/index.wml
  ============================================================================
  $ cvs diff -u -r0 -r1.1 index.wml
  --- /dev/null	2004-01-10 23:32:31.000000000 +0100
  +++ index.wml	2004-01-10 23:32:32.000000000 +0100
  @@ -0,0 +1,48 @@
  +
  +#use wml::ossp area=pkg:lib subarea=uuid
  +
  +<title>OSSP uuid</title>
  +
  +<h1>Universally Unique Identifiers</h1>
  +
  +<img src="socket.png" alt="" align=right>
  +
  +<h2>Abstract</h2>
  +
  +OSSP uuid is a ISO-C application programming interface (API) and
  +corresponding command line interface (CLI) for the generation of DCE
  +1.1 and ISO/IEC 11578:1996 compliant Universally Unique Identifiers
  +(UUID). It supports DCE 1.1 variant UUIDs of version 1 (time and node
  +based), version 3 (name based) and version 4 (random number based).
  +
  +<h2>Documentation</h2>
  +
  +<pkg_manpage name="uuid" sect=3 path="/pkg/lib/uuid/uuid.pod">,
  +<pkg_manpage name="uuid" sect=1 path="/pkg/lib/uuid/uuid_cli.pod">,
  +<pkg_manpage name="uuid-config" sect=1 path="/pkg/lib/sa/uuid-config.pod">.
  +
  +<h2>Authors</h2>
  +
  +<pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  +
  +<h2>Status</h2>
  +
  +<pkg_status
  +    name="uuid" assign="rse"
  +    stable="none"    stable_date="none"
  +    unstable="0.9.0" unstable_date="10-Jan-2004"
  +	done=90>
  +
  +<h2>Source</h2>
  +
  +<pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/lib/uuid/
  +    url=$(FTP_ROOT_URL)/pkg/lib/uuid/
  +    directory=$(FTP_ROOT_DIR)/pkg/lib/uuid/
  +    files="uuid-*.tar.gz" 
  +	stable="uuid-0\.9\.0\.tar\.gz" unstable="uuid-SNAP.*\.tar.gz">
  +	
  +<h2>Donation</h2>
  +
  +<pkg_donation name="uuid" return="$(BASE_URL)/pkg/lib/uuid/">
  +
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jan 10 23:43:41 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 458BA77309; Sat, 10 Jan 2004 23:43:41 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.c
Message-Id: <20040110224341.458BA77309@mail.ossp.org>
Date: Sat, 10 Jan 2004 23:43:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Jan-2004 23:43:41
  Branch: HEAD                             Handle: 2004011022434000

  Modified files:
    ossp-pkg/uuid           uuid.c

  Log:
    fix building

  Summary:
    Revision    Changes     Path
    1.21        +4  -0      ossp-pkg/uuid/uuid.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 uuid.c
  --- ossp-pkg/uuid/uuid.c	10 Jan 2004 22:18:48 -0000	1.20
  +++ ossp-pkg/uuid/uuid.c	10 Jan 2004 22:43:40 -0000	1.21
  @@ -482,7 +482,11 @@
   static uuid_rc_t uuid_generate_v1(uuid_t *uuid, unsigned int mode, va_list ap)
   {
       struct timeval time_now;
  +#ifdef HAVE_NANOSLEEP
  +    struct timespec ts;
  +#else
       struct timeval tv;
  +#endif
       ui64_t t;
       ui64_t offset;
       ui64_t ov;
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jan 10 23:44:22 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9ADCD77309; Sat, 10 Jan 2004 23:44:22 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ README uuid.pod
Message-Id: <20040110224422.9ADCD77309@mail.ossp.org>
Date: Sat, 10 Jan 2004 23:44:22 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Jan-2004 23:44:22
  Branch: HEAD                             Handle: 2004011022442200

  Modified files:
    ossp-pkg/uuid           README uuid.pod

  Log:
    more description

  Summary:
    Revision    Changes     Path
    1.4         +8  -0      ossp-pkg/uuid/README
    1.3         +8  -0      ossp-pkg/uuid/uuid.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 README
  --- ossp-pkg/uuid/README	10 Jan 2004 22:21:08 -0000	1.3
  +++ ossp-pkg/uuid/README	10 Jan 2004 22:44:22 -0000	1.4
  @@ -15,6 +15,14 @@
     (UUID). It supports DCE 1.1 variant UUIDs of version 1 (time and node
     based), version 3 (name based) and version 4 (random number based).
   
  +  UUIDs are 128 bit numbers which are intended to have a high likelihood
  +  of uniqueness over space and time and are computationally difficult
  +  to guess. They are globally unique identifiers which can be locally
  +  generated without contacting a global registration authority. UUIDs
  +  are intended as unique identifiers for both mass tagging objects
  +  with an extremely short lifetime and to reliably identifying very
  +  persistent objects across a network.
  +
     COPYRIGHT AND LICENSE
   
     Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	10 Jan 2004 20:12:46 -0000	1.2
  +++ ossp-pkg/uuid/uuid.pod	10 Jan 2004 22:44:22 -0000	1.3
  @@ -51,6 +51,14 @@
   likelihood of uniqueness over space and time and are computationally
   difficult to guess.
   
  +UUIDs are 128 bit numbers which are intended to have a high likelihood
  +of uniqueness over space and time and are computationally difficult
  +to guess. They are globally unique identifiers which can be locally
  +generated without contacting a global registration authority. UUIDs are
  +intended as unique identifiers for both mass tagging objects with an
  +extremely short lifetime and to reliably identifying very persistent
  +objects across a network.
  +
   A B<UUID> is usually encoded using the ASCII character string
   representation described in ISO/IEC 11578:1996: a string
   consisting of 8 hexadecimal digits followed by a hyphen,
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jan 11 08:38:36 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 39AB8772ED; Sun, 11 Jan 2004 08:38:36 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ TODO
Message-Id: <20040111073836.39AB8772ED@mail.ossp.org>
Date: Sun, 11 Jan 2004 08:38:36 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Jan-2004 08:38:36
  Branch: HEAD                             Handle: 2004011107383500

  Modified files:
    ossp-pkg/uuid           TODO

  Log:
    remember two more issues

  Summary:
    Revision    Changes     Path
    1.5         +2  -0      ossp-pkg/uuid/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/TODO
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 TODO
  --- ossp-pkg/uuid/TODO	10 Jan 2004 22:19:54 -0000	1.4
  +++ ossp-pkg/uuid/TODO	11 Jan 2004 07:38:35 -0000	1.5
  @@ -3,3 +3,5 @@
   - implement uuid -d (uuid_dump): dumping/decoding
   - global locking according to standard?
   - persistent/non-volatile state writing?
  +- additional C API for DCE 1.1 compatibility
  +- additional Perl API for covering Perl language
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jan 11 09:27:19 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0074A772EA; Sun, 11 Jan 2004 09:27:18 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.ac uuid_mac.c
Message-Id: <20040111082718.0074A772EA@mail.ossp.org>
Date: Sun, 11 Jan 2004 09:27:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Jan-2004 09:27:18
  Branch: HEAD                             Handle: 2004011108271800

  Modified files:
    ossp-pkg/uuid           uuid.ac uuid_mac.c

  Log:
    cleanup and fix header checks

  Summary:
    Revision    Changes     Path
    1.5         +13 -3      ossp-pkg/uuid/uuid.ac
    1.4         +8  -4      ossp-pkg/uuid/uuid_mac.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.ac
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 uuid.ac
  --- ossp-pkg/uuid/uuid.ac	10 Jan 2004 21:47:45 -0000	1.4
  +++ ossp-pkg/uuid/uuid.ac	11 Jan 2004 08:27:18 -0000	1.5
  @@ -68,9 +68,19 @@
       AC_CHECK_LIB(inet6, getaddrinfo)
   
       dnl #   check for system headers
  -    AC_CHECK_HEADERS(string.h sys/types.h sys/socket.h netdb.h netinet/in.h dnl
  -                     ifaddrs.h net/if_dl.h net/if_arp.h net/if.h sys/ioctl.h dnl
  -                     sys/sockio.h arpa/inet.h)
  +    AC_CHECK_HEADERS(sys/types.h sys/param.h sys/time.h sys/socket.h sys/sockio.h sys/ioctl.h)
  +    AC_CHECK_HEADERS(netdb.h ifaddrs.h net/if.h net/if_dl.h net/if_arp.h netinet/in.h arpa/inet.h,,,
  +[[
  +#if HAVE_SYS_TYPES_H
  +#include <sys/types.h>
  +#endif
  +#if HAVE_SYS_SOCKET_H
  +#include <sys/socket.h>
  +#endif
  +#if HAVE_SYS_IOCTL_H
  +#include <sys/ioctl.h>
  +#endif
  +]])
   
       dnl #   check for functions
       AC_CHECK_FUNCS(getifaddrs nanosleep)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_mac.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 uuid_mac.c
  --- ossp-pkg/uuid/uuid_mac.c	10 Jan 2004 19:17:39 -0000	1.3
  +++ ossp-pkg/uuid/uuid_mac.c	11 Jan 2004 08:27:18 -0000	1.4
  @@ -34,14 +34,18 @@
   #include <stdlib.h>
   #include <string.h>
   #include <unistd.h>
  -#include <sys/param.h>
  -#include <time.h>
  -#include <sys/time.h>
   #include <fcntl.h>
   #include <time.h>
  +
  +#ifdef HAVE_SYS_TIME_H
   #include <sys/time.h>
  +#endif
  +#ifdef HAVE_SYS_TYPES_H
   #include <sys/types.h>
  -
  +#endif
  +#ifdef HAVE_SYS_PARAM_H
  +#include <sys/param.h>
  +#endif
   #ifdef HAVE_SYS_IOCTL_H
   #include <sys/ioctl.h>
   #endif
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jan 11 09:36:03 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C7E4E772ED; Sun, 11 Jan 2004 09:36:02 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ Makefile.in
Message-Id: <20040111083602.C7E4E772ED@mail.ossp.org>
Date: Sun, 11 Jan 2004 09:36:02 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Jan-2004 09:36:02
  Branch: HEAD                             Handle: 2004011108360200

  Modified files:
    ossp-pkg/uuid           Makefile.in

  Log:
    perform some more and different tests

  Summary:
    Revision    Changes     Path
    1.9         +10 -1      ossp-pkg/uuid/Makefile.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	10 Jan 2004 22:21:47 -0000	1.8
  +++ ossp-pkg/uuid/Makefile.in	11 Jan 2004 08:36:02 -0000	1.9
  @@ -97,7 +97,16 @@
   	$(RM) /tmp/uuid.pod
   
   check: $(PRG_NAME)
  -	@$(LIBTOOL) --mode=execute ./$(PRG_NAME) -n 16
  +	@echo "==== UUID version 1 (time and node based): 8 single iterations"; \
  +	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v1 -n 8 -1
  +	@echo "==== UUID version 1 (time and node based): 16 subsequent iterations"; \
  +	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v1 -n 8
  +	@echo "==== UUID version 3 (name based): 2 times repeated"; \
  +	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v3 -n 2 URL http://www.ossp.org/
  +	@echo "==== UUID version 4 (random data based): 16 single iterations"; \
  +	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v4 -n 8 -1
  +	@echo "==== UUID version 4 (random data based): 16 subsequent iterations"; \
  +	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v4 -n 8
   
   install:
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jan 11 09:37:23 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 46E3B772ED; Sun, 11 Jan 2004 09:37:23 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ README VERSION
Message-Id: <20040111083723.46E3B772ED@mail.ossp.org>
Date: Sun, 11 Jan 2004 09:37:23 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Jan-2004 09:37:23
  Branch: HEAD                             Handle: 2004011108372200

  Modified files:
    ossp-pkg/uuid           README VERSION

  Log:
    bump for release

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-pkg/uuid/README
    1.3         +1  -1      ossp-pkg/uuid/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 README
  --- ossp-pkg/uuid/README	10 Jan 2004 22:44:22 -0000	1.4
  +++ ossp-pkg/uuid/README	11 Jan 2004 08:37:22 -0000	1.5
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
   
     OSSP uuid - Universally Unique Identifiers
  -  Version 0.9.0 (10-Jan-2004)
  +  Version 0.9.0 (11-Jan-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/VERSION
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 VERSION
  --- ossp-pkg/uuid/VERSION	10 Jan 2004 22:21:08 -0000	1.2
  +++ ossp-pkg/uuid/VERSION	11 Jan 2004 08:37:22 -0000	1.3
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP uuid (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP uuid, Version 0.9.0 (10-Jan-2004)
  +  This is OSSP uuid, Version 0.9.0 (11-Jan-2004)
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jan 11 09:43:51 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9F0C7772ED; Sun, 11 Jan 2004 09:43:51 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/uuid/ index.wml
Message-Id: <20040111084351.9F0C7772ED@mail.ossp.org>
Date: Sun, 11 Jan 2004 09:43:51 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   11-Jan-2004 09:43:51
  Branch: HEAD                             Handle: 2004011108435001

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib/uuid   index.wml

  Log:
    release OSSP uuid 0.9.0

  Summary:
    Revision    Changes     Path
    1.68        +1  -0      ossp-web/new/news.txt
    1.2         +10 -3      ossp-web/pkg/lib/uuid/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.67 -r1.68 news.txt
  --- ossp-web/new/news.txt	10 Nov 2003 19:04:51 -0000	1.67
  +++ ossp-web/new/news.txt	11 Jan 2004 08:43:50 -0000	1.68
  @@ -1,3 +1,4 @@
  +11-Jan-2004: Released L<OSSP uuid> 0.9.0
   10-Nov-2003: Released L<OSSP sa> 1.1.0
   10-Nov-2003: Released L<OSSP cfg> 0.9.1
   10-Nov-2003: Released L<OSSP l2> 0.9.5
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/uuid/index.wml
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/lib/uuid/index.wml	10 Jan 2004 22:32:31 -0000	1.1
  +++ ossp-web/pkg/lib/uuid/index.wml	11 Jan 2004 08:43:51 -0000	1.2
  @@ -5,8 +5,6 @@
   
   <h1>Universally Unique Identifiers</h1>
   
  -<img src="socket.png" alt="" align=right>
  -
   <h2>Abstract</h2>
   
   OSSP uuid is a ISO-C application programming interface (API) and
  @@ -15,6 +13,15 @@
   (UUID). It supports DCE 1.1 variant UUIDs of version 1 (time and node
   based), version 3 (name based) and version 4 (random number based).
   
  +<p>
  +UUIDs are 128 bit numbers which are intended to have a high likelihood
  +of uniqueness over space and time and are computationally difficult
  +to guess. They are globally unique identifiers which can be locally
  +generated without contacting a global registration authority. UUIDs
  +are intended as unique identifiers for both mass tagging objects
  +with an extremely short lifetime and to reliably identifying very
  +persistent objects across a network.
  +
   <h2>Documentation</h2>
   
   <pkg_manpage name="uuid" sect=3 path="/pkg/lib/uuid/uuid.pod">,
  @@ -30,7 +37,7 @@
   <pkg_status
       name="uuid" assign="rse"
       stable="none"    stable_date="none"
  -    unstable="0.9.0" unstable_date="10-Jan-2004"
  +    unstable="0.9.0" unstable_date="11-Jan-2004"
   	done=90>
   
   <h2>Source</h2>
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jan 11 09:48:13 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2B0C3772EA; Sun, 11 Jan 2004 09:48:13 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ AUTHORS ChangeLog INSTALL NEWS THANKS
Message-Id: <20040111084813.2B0C3772EA@mail.ossp.org>
Date: Sun, 11 Jan 2004 09:48:13 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Jan-2004 09:48:13
  Branch: HEAD                             Handle: 2004011108481200

  Added files:
    ossp-pkg/uuid           AUTHORS ChangeLog INSTALL NEWS THANKS

  Log:
    add the usual amount of standard files, too

  Summary:
    Revision    Changes     Path
    1.1         +15 -0      ossp-pkg/uuid/AUTHORS
    1.1         +18 -0      ossp-pkg/uuid/ChangeLog
    1.1         +18 -0      ossp-pkg/uuid/INSTALL
    1.1         +15 -0      ossp-pkg/uuid/NEWS
    1.1         +15 -0      ossp-pkg/uuid/THANKS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/AUTHORS
  ============================================================================
  $ cvs diff -u -r0 -r1.1 AUTHORS
  --- /dev/null	2004-01-11 09:48:12.000000000 +0100
  +++ AUTHORS	2004-01-11 09:48:12.000000000 +0100
  @@ -0,0 +1,15 @@
  +   _        ___  ____ ____  ____                _     _
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _   _ _   _(_) __| |
  +  _|_||_| | | | \___ \___ \| |_) | | | | | | | | |/ _` |
  + |_||_|_| | |_| |___) |__) |  __/  | |_| | |_| | | (_| |
  +  |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
  +
  +  OSSP uuid - Universally Unique Identifiers
  +
  +  AUTHORS
  +
  +  This is a list of authors who have written
  +  or edited major parts of the OSSP uuid sources.
  +
  +  Ralf S. Engelschall   <rse@engelschall.com>
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ChangeLog
  --- /dev/null	2004-01-11 09:48:12.000000000 +0100
  +++ ChangeLog	2004-01-11 09:48:12.000000000 +0100
  @@ -0,0 +1,18 @@
  +   _        ___  ____ ____  ____                _     _
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _   _ _   _(_) __| |
  +  _|_||_| | | | \___ \___ \| |_) | | | | | | | | |/ _` |
  + |_||_|_| | |_| |___) |__) |  __/  | |_| | |_| | | (_| |
  +  |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
  +
  +  OSSP uuid - Universally Unique Identifiers
  +
  +  CHANGELOG
  +
  +  This is a list of all changes to OSSP uuid.
  +  For a more brief summary please have a look at the NEWS file.
  +
  +  Changes between 0.9.0 and 0.9.1 (11-Jan-2004 to xx-Jan-2004)
  +
  +   o ...
  +     [Ralf S. Engelschall]
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/INSTALL
  ============================================================================
  $ cvs diff -u -r0 -r1.1 INSTALL
  --- /dev/null	2004-01-11 09:48:12.000000000 +0100
  +++ INSTALL	2004-01-11 09:48:12.000000000 +0100
  @@ -0,0 +1,18 @@
  +   _        ___  ____ ____  ____                _     _
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _   _ _   _(_) __| |
  +  _|_||_| | | | \___ \___ \| |_) | | | | | | | | |/ _` |
  + |_||_|_| | |_| |___) |__) |  __/  | |_| | |_| | | (_| |
  +  |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
  +
  +  OSSP uuid - Universally Unique Identifiers
  +
  +  INSTALLATION
  +
  +  To install OSSP uuid into /path/to/uuid/ perform
  +  the following steps in your shell:
  +
  +    $ ./configure --prefix=/path/to/uuid
  +    $ make
  +    $ make check
  +    $ make install [DESTDIR=/path/to/temp/root]
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/NEWS
  ============================================================================
  $ cvs diff -u -r0 -r1.1 NEWS
  --- /dev/null	2004-01-11 09:48:12.000000000 +0100
  +++ NEWS	2004-01-11 09:48:13.000000000 +0100
  @@ -0,0 +1,15 @@
  +   _        ___  ____ ____  ____                _     _
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _   _ _   _(_) __| |
  +  _|_||_| | | | \___ \___ \| |_) | | | | | | | | |/ _` |
  + |_||_|_| | |_| |___) |__) |  __/  | |_| | |_| | | (_| |
  +  |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
  +
  +  OSSP uuid - Universally Unique Identifiers
  +
  +  NEWS
  +
  +  This is a list of major changes to OSSP uuid. For more detailed
  +  change descriptions, please have a look at the ChangeLog file.
  +
  +  -NONE-
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/THANKS
  ============================================================================
  $ cvs diff -u -r0 -r1.1 THANKS
  --- /dev/null	2004-01-11 09:48:12.000000000 +0100
  +++ THANKS	2004-01-11 09:48:13.000000000 +0100
  @@ -0,0 +1,15 @@
  +   _        ___  ____ ____  ____                _     _
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _   _ _   _(_) __| |
  +  _|_||_| | | | \___ \___ \| |_) | | | | | | | | |/ _` |
  + |_||_|_| | |_| |___) |__) |  __/  | |_| | |_| | | (_| |
  +  |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
  +
  +  OSSP uuid - Universally Unique Identifiers
  +
  +  THANKS
  +
  +  Credit has to be given to the following people who contributed ideas,
  +  bugfixes, hints, gave platform feedback, etc. (in alphabetical order):
  +
  +    o  Thomas Lotterer             <thomas@lotterer.net>
  +
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jan 11 09:54:19 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 45EC1772EA; Sun, 11 Jan 2004 09:54:19 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ AUTHORS ChangeLog INSTALL Makefile.in NEWS ...
Message-Id: <20040111085419.45EC1772EA@mail.ossp.org>
Date: Sun, 11 Jan 2004 09:54:19 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Jan-2004 09:54:19
  Branch: HEAD                             Handle: 2004011108541701

  Modified files:
    ossp-pkg/uuid           AUTHORS ChangeLog INSTALL Makefile.in NEWS README
                            THANKS configure.ac uuid.pod uuid_cli.pod

  Log:
    use 'Universally Unique Identifier' with plural

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/uuid/AUTHORS
    1.2         +1  -1      ossp-pkg/uuid/ChangeLog
    1.2         +1  -1      ossp-pkg/uuid/INSTALL
    1.10        +2  -2      ossp-pkg/uuid/Makefile.in
    1.2         +1  -1      ossp-pkg/uuid/NEWS
    1.6         +2  -2      ossp-pkg/uuid/README
    1.2         +1  -1      ossp-pkg/uuid/THANKS
    1.3         +1  -1      ossp-pkg/uuid/configure.ac
    1.4         +1  -1      ossp-pkg/uuid/uuid.pod
    1.3         +1  -1      ossp-pkg/uuid/uuid_cli.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/AUTHORS
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 AUTHORS
  --- ossp-pkg/uuid/AUTHORS	11 Jan 2004 08:48:12 -0000	1.1
  +++ ossp-pkg/uuid/AUTHORS	11 Jan 2004 08:54:17 -0000	1.2
  @@ -4,7 +4,7 @@
    |_||_|_| | |_| |___) |__) |  __/  | |_| | |_| | | (_| |
     |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
   
  -  OSSP uuid - Universally Unique Identifiers
  +  OSSP uuid - Universally Unique Identifier
   
     AUTHORS
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	11 Jan 2004 08:48:12 -0000	1.1
  +++ ossp-pkg/uuid/ChangeLog	11 Jan 2004 08:54:17 -0000	1.2
  @@ -4,7 +4,7 @@
    |_||_|_| | |_| |___) |__) |  __/  | |_| | |_| | | (_| |
     |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
   
  -  OSSP uuid - Universally Unique Identifiers
  +  OSSP uuid - Universally Unique Identifier
   
     CHANGELOG
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/INSTALL
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 INSTALL
  --- ossp-pkg/uuid/INSTALL	11 Jan 2004 08:48:12 -0000	1.1
  +++ ossp-pkg/uuid/INSTALL	11 Jan 2004 08:54:17 -0000	1.2
  @@ -4,7 +4,7 @@
    |_||_|_| | |_| |___) |__) |  __/  | |_| | |_| | | (_| |
     |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
   
  -  OSSP uuid - Universally Unique Identifiers
  +  OSSP uuid - Universally Unique Identifier
   
     INSTALLATION
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	11 Jan 2004 08:36:02 -0000	1.9
  +++ ossp-pkg/uuid/Makefile.in	11 Jan 2004 08:54:17 -0000	1.10
  @@ -82,7 +82,7 @@
   	V2=`$(SHTOOL) version -l txt -d long VERSION`; \
   	D=`$(SHTOOL) version -l txt -d long VERSION | sed -e 's;.*(;;' -e 's;).*;;'`; \
   	$(POD2MAN) --quotes=none \
  -	           --section=3 --center="Universally Unique Identifiers" \
  +	           --section=3 --center="Universally Unique Identifier" \
   	           --release="$$D" --date="OSSP uuid $$V1" uuid.pod | \
   	sed -e "s;UUID_VERSION_STR;$$V2;" >uuid.3
   uuid.1: uuid_cli.pod
  @@ -91,7 +91,7 @@
   	D=`$(SHTOOL) version -l txt -d long VERSION | sed -e 's;.*(;;' -e 's;).*;;'`; \
   	$(CP) uuid_cli.pod /tmp/uuid.pod; \
   	$(POD2MAN) --quotes=none \
  -	           --section=1 --center="Universally Unique Identifiers" \
  +	           --section=1 --center="Universally Unique Identifier" \
   	           --release="$$D" --date="OSSP uuid $$V1" /tmp/uuid.pod | \
   	sed -e "s;UUID_VERSION_STR;$$V2;" >uuid.1; \
   	$(RM) /tmp/uuid.pod
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/NEWS
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 NEWS
  --- ossp-pkg/uuid/NEWS	11 Jan 2004 08:48:12 -0000	1.1
  +++ ossp-pkg/uuid/NEWS	11 Jan 2004 08:54:18 -0000	1.2
  @@ -4,7 +4,7 @@
    |_||_|_| | |_| |___) |__) |  __/  | |_| | |_| | | (_| |
     |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
   
  -  OSSP uuid - Universally Unique Identifiers
  +  OSSP uuid - Universally Unique Identifier
   
     NEWS
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 README
  --- ossp-pkg/uuid/README	11 Jan 2004 08:37:22 -0000	1.5
  +++ ossp-pkg/uuid/README	11 Jan 2004 08:54:18 -0000	1.6
  @@ -4,14 +4,14 @@
    |_||_|_| | |_| |___) |__) |  __/  | |_| | |_| | | (_| |
     |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
   
  -  OSSP uuid - Universally Unique Identifiers
  +  OSSP uuid - Universally Unique Identifier
     Version 0.9.0 (11-Jan-2004)
   
     ABSTRACT
   
     OSSP uuid is a ISO-C application programming interface (API) and
     corresponding command line interface (CLI) for the generation of DCE
  -  1.1 and ISO/IEC 11578:1996 compliant Universally Unique Identifiers
  +  1.1 and ISO/IEC 11578:1996 compliant Universally Unique Identifier
     (UUID). It supports DCE 1.1 variant UUIDs of version 1 (time and node
     based), version 3 (name based) and version 4 (random number based).
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/THANKS
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 THANKS
  --- ossp-pkg/uuid/THANKS	11 Jan 2004 08:48:12 -0000	1.1
  +++ ossp-pkg/uuid/THANKS	11 Jan 2004 08:54:18 -0000	1.2
  @@ -4,7 +4,7 @@
    |_||_|_| | |_| |___) |__) |  __/  | |_| | |_| | | (_| |
     |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
   
  -  OSSP uuid - Universally Unique Identifiers
  +  OSSP uuid - Universally Unique Identifier
   
     THANKS
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/configure.ac
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 configure.ac
  --- ossp-pkg/uuid/configure.ac	9 Jan 2004 09:02:58 -0000	1.2
  +++ ossp-pkg/uuid/configure.ac	11 Jan 2004 08:54:18 -0000	1.3
  @@ -30,7 +30,7 @@
   AC_PREREQ(2.53)
   AC_INIT
   UUID_VERSION_STR=`./shtool version -l txt -d long VERSION`
  -./shtool echo -e "Configuring %BOSSP uuid%b (Universally Unique Identifiers), version %B${UUID_VERSION_STR}%b"
  +./shtool echo -e "Configuring %BOSSP uuid%b (Universally Unique Identifier), version %B${UUID_VERSION_STR}%b"
   AC_SUBST(UUID_VERSION_STR)
   
   AC_PROG_MAKE_SET
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	10 Jan 2004 22:44:22 -0000	1.3
  +++ ossp-pkg/uuid/uuid.pod	11 Jan 2004 08:54:18 -0000	1.4
  @@ -37,7 +37,7 @@
   
   B<OSSP uuid> is a ISO-C application programming interface (API) and
   corresponding command line interface (CLI) for the generation of DCE
  -1.1 and ISO/IEC 11578:1996 compliant I<Universally Unique Identifiers>
  +1.1 and ISO/IEC 11578:1996 compliant I<Universally Unique Identifier>
   (UUID). It supports DCE 1.1 variant UUIDs of version 1 (time and node
   based), version 3 (name based) and version 4 (random number based).
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.pod
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid_cli.pod
  --- ossp-pkg/uuid/uuid_cli.pod	10 Jan 2004 20:12:46 -0000	1.2
  +++ ossp-pkg/uuid/uuid_cli.pod	11 Jan 2004 08:54:18 -0000	1.3
  @@ -53,7 +53,7 @@
   
   B<OSSP uuid> is a ISO-C application programming interface (API) and
   corresponding command line interface (CLI) for the generation of DCE
  -1.1 and ISO/IEC 11578:1996 compliant I<Universally Unique Identifiers>
  +1.1 and ISO/IEC 11578:1996 compliant I<Universally Unique Identifier>
   (UUID). It supports DCE 1.1 variant UUIDs of version 1 (time and node
   based), version 3 (name based) and version 4 (random number based).
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jan 11 13:14:21 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C61D9772F1; Sun, 11 Jan 2004 13:14:20 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid.c uuid.h uuid.pod uuid_cli.p...
Message-Id: <20040111121420.C61D9772F1@mail.ossp.org>
Date: Sun, 11 Jan 2004 13:14:20 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Jan-2004 13:14:20
  Branch: HEAD                             Handle: 2004011112141901

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid.c uuid.h uuid.pod uuid_cli.pod

  Log:
    more documentation

  Summary:
    Revision    Changes     Path
    1.3         +4  -1      ossp-pkg/uuid/ChangeLog
    1.22        +22 -22     ossp-pkg/uuid/uuid.c
    1.8         +1  -1      ossp-pkg/uuid/uuid.h
    1.5         +156 -52    ossp-pkg/uuid/uuid.pod
    1.4         +11 -3      ossp-pkg/uuid/uuid_cli.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	11 Jan 2004 08:54:17 -0000	1.2
  +++ ossp-pkg/uuid/ChangeLog	11 Jan 2004 12:14:19 -0000	1.3
  @@ -13,6 +13,9 @@
   
     Changes between 0.9.0 and 0.9.1 (11-Jan-2004 to xx-Jan-2004)
   
  -   o ...
  +   o 
  +     [Ralf S. Engelschall]
  +
  +   o cleaned up source tree documentation files.
        [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 uuid.c
  --- ossp-pkg/uuid/uuid.c	10 Jan 2004 22:43:40 -0000	1.21
  +++ ossp-pkg/uuid/uuid.c	11 Jan 2004 12:14:19 -0000	1.22
  @@ -193,6 +193,28 @@
       return UUID_RC_OK;
   }
   
  +/* check whether UUID object represents 'nil UUID' */
  +uuid_rc_t uuid_isnil(uuid_t *uuid, int *result)
  +{
  +    const unsigned char *ucp;
  +    int i;
  +
  +    /* sanity check argument(s) */
  +    if (uuid == NULL || result == NULL)
  +        return UUID_RC_ARG;
  +
  +    /* a "nil UUID" is defined as all octets zero, so check for this case */
  +    *result = TRUE;
  +    for (i = 0, ucp = (unsigned char *)&(uuid->obj); i < UUID_LEN_BIN; i++) {
  +        if (*ucp++ != '\0') {
  +            *result = FALSE;
  +            break;
  +        }
  +    }
  +
  +    return UUID_RC_OK;
  +}
  +
   /* compare UUID objects */
   uuid_rc_t uuid_compare(uuid_t *uuid1, uuid_t *uuid2, int *result)
   {
  @@ -241,28 +263,6 @@
       *result = 0;
   
       result_exit:
  -    return UUID_RC_OK;
  -}
  -
  -/* check whether UUID object represents 'nil UUID' */
  -uuid_rc_t uuid_isnil(uuid_t *uuid, int *result)
  -{
  -    const unsigned char *ucp;
  -    int i;
  -
  -    /* sanity check argument(s) */
  -    if (uuid == NULL || result == NULL)
  -        return UUID_RC_ARG;
  -
  -    /* a "nil UUID" is defined as all octets zero, so check for this case */
  -    *result = TRUE;
  -    for (i = 0, ucp = (unsigned char *)&(uuid->obj); i < UUID_LEN_BIN; i++) {
  -        if (*ucp++ != '\0') {
  -            *result = FALSE;
  -            break;
  -        }
  -    }
  -
       return UUID_RC_OK;
   }
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.h
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 uuid.h
  --- ossp-pkg/uuid/uuid.h	10 Jan 2004 12:16:03 -0000	1.7
  +++ ossp-pkg/uuid/uuid.h	11 Jan 2004 12:14:19 -0000	1.8
  @@ -98,8 +98,8 @@
   extern uuid_rc_t  uuid_nil      (uuid_t  *uuid);
   
   /* UUID comparison */
  -extern uuid_rc_t  uuid_compare  (uuid_t  *uuid, uuid_t *uuid2, int *result);
   extern uuid_rc_t  uuid_isnil    (uuid_t  *uuid,                int *result);
  +extern uuid_rc_t  uuid_compare  (uuid_t  *uuid, uuid_t *uuid2, int *result);
   
   /* binary representation handling */
   extern uuid_rc_t  uuid_unpack   (uuid_t  *uuid, const void  *buf);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	11 Jan 2004 08:54:18 -0000	1.4
  +++ ossp-pkg/uuid/uuid.pod	11 Jan 2004 12:14:19 -0000	1.5
  @@ -41,90 +41,194 @@
   (UUID). It supports DCE 1.1 variant UUIDs of version 1 (time and node
   based), version 3 (name based) and version 4 (random number based).
   
  -This is the ISO-C application programming interface (API).
  -
  -=head2 Overview
  -
  -B<UUID> stands for B<U>niversal B<U>nique B<ID>entifier (aka B<GUID>
  -which stands for B<G>lobally B<U>nique B<ID>entifier). B<UUID>s are 128
  -bit numbers assigned to any object and which are intended to have a high
  -likelihood of uniqueness over space and time and are computationally
  -difficult to guess.
  -
   UUIDs are 128 bit numbers which are intended to have a high likelihood
   of uniqueness over space and time and are computationally difficult
   to guess. They are globally unique identifiers which can be locally
  -generated without contacting a global registration authority. UUIDs are
  -intended as unique identifiers for both mass tagging objects with an
  -extremely short lifetime and to reliably identifying very persistent
  -objects across a network.
  -
  -A B<UUID> is usually encoded using the ASCII character string
  -representation described in ISO/IEC 11578:1996: a string
  -consisting of 8 hexadecimal digits followed by a hyphen,
  -then three groups of 4 hexadecimal digits each followed by a
  -hyphen, then 12 hexadecimal digits. An example of a B<UUID> is
  -"C<54531d28-402b-11d8-af12-0002a5094c23>".
  -
  -=head2 Uniqueness
  -
  -The mechanism used to guarantee that B<UUID>s are unique is
  -through combinations of hardware addresses, time stamps and random
  -seeds.
  -
  -There is a reference in the B<UUID> to the hardware (MAC) address of
  -the first network interface card (NIC) on the host which generated the
  -B<UUID> -- this reference is intended to ensure the B<UUID> will be
  -unique in space as the MAC address of every network card is assigned by
  -a single global authority (IEEE) and is guaranteed to be unique.
  -
  -The next component in a B<UUID> is a timestamp which, as clock always
  -(should) move forward, will be unique in time.
  -
  -Just in case some part of the above goes wrong (the hardware address
  -cannot be determined or the clock moved a step backward), there is
  -a random component placed into the B<UUID> as a "catch-all" for
  -uniqueness.
  +generated without contacting a global registration authority. UUIDs
  +are intended as unique identifiers for both mass tagging objects
  +with an extremely short lifetime and to reliably identifying very
  +persistent objects across a network.
  +
  +This is the ISO-C application programming interface (API) of B<OSSP uuid>.
  +
  +=head2 UUID Binary Representation
  +
  +According to the DCE 1.1 and ISO/IEC 11578:1996 standards, a DCE 1.1
  +variant UUID is a 128 bit number defined out of 7 fields, each field a
  +multiple of an octet in size and stored in network byte order:
  +
  +  0                   1                   2                   3
  +   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  + 0|                          time_low                             |
  +  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  + 1|       time_mid                |         time_hi_and_version   |
  +  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  + 2|clk_seq_hi_res |  clk_seq_low  |         node (0-1)            |
  +  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  + 3|                         node (2-5)                            |
  +  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  +
  +An example of a UUID binary representation is the octet stream "C<0xEC
  +0xB9 0xF3 0x5F 0x44 0x2A 0x11 0xD8 0x8A 0x24 0x00 0x90 0x27 0x2F 0xF7
  +0x25>". The binary representation format is exactly what the B<OSSP uuid>
  +API functions B<uuid_pack>() and B<uuid_unpack>() deal with.
  +
  +=head2 UUID ASCII String Representation
  +
  +According to the DCE 1.1 and ISO/IEC 11578:1996 standards, a DCE
  +1.1 variant UUID is represented as an ASCII string consisting
  +of 8 hexadecimal digits followed by a hyphen, then three groups
  +of 4 hexadecimal digits each followed by a hyphen, then 12
  +hexadecimal digits. Formally, the string representation is defined by
  +the following grammar:
  +
  + uuid                   = <time_low> "-" <time_mid> "-"
  +                          <time_high_and_version> "-"
  +                          <clock_seq_and_reserved>
  +                          <clock_seq_low> "-" <node>
  + time_low               = 4*<hexOctet>
  + time_mid               = 2*<hexOctet>
  + time_high_and_version  = 2*<hexOctet>
  + clock_seq_and_reserved = <hexOctet>
  + clock_seq_low          = <hexOctet>
  + node                   = 6*<hexOctet>
  + hexOctet               = <hexDigit> <hexDigit>
  + hexDigit =               "0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9"
  +                         |"a"|"b"|"c"|"d"|"e"|"f"
  +                         |"A"|"B"|"C"|"D"|"E"|"F"
  +
  +An example of a UUID string representation is the ASCII string
  +"C<54531d28-402b-11d8-af12-0002a5094c23>". The string representation
  +format is exactly what the B<OSSP uuid> API functions B<uuid_parse>() and
  +B<uuid_format>() deal with.
  +
  +=head2 UUID Variants and Versions
  +
  +A UUID has a variant and version. The variant defines the layout of the
  +UUID. The version defines the content of the UUID. The UUID variant
  +supported in B<OSSP uuid> is the DCE 1.1 variant only. The DCE 1.1 UUID
  +variant versions supported in B<OSSP uuid> are version 1 (time and node
  +based), version 3 (name based) and version 4 (random data based).
  +
  +=head2 UUID Uniqueness
  +
  +Version 1 UUIDs are guaranteed to be unique through combinations of
  +hardware addresses, time stamps and random seeds. There is a reference
  +in the UUID to the hardware (MAC) address of the first network interface
  +card (NIC) on the host which generated the UUID -- this reference
  +is intended to ensure the UUID will be unique in space as the MAC
  +address of every network card is assigned by a single global authority
  +(IEEE) and is guaranteed to be unique. The next component in a UUID
  +is a timestamp which, as clock always (should) move forward, will
  +be unique in time. Just in case some part of the above goes wrong
  +(the hardware address cannot be determined or the clock moved steps
  +backward), there is a random clock sequence component placed into the
  +UUID as a "catch-all" for uniqueness.
  +
  +Version 3 UUIDs are guaranteed to be inherently globally unique if the
  +combination of namespace and name used to generate them is unique.
  +
  +Version 4 UUIDs are not guaranteed to be globally unique, because they
  +are generated out of locally gathered pseudo-random numbers only.
  +Nevertheless there is still a high likelihood of uniqueness over space
  +and time and that they are computationally difficult to guess.
  +
  +=head2 Nil UUID
  +
  +There is a special I<Nil> UUID consisting of all octets set to zero in
  +the binary representation. It can be used as a special UUID value which does
  +not conflict with real UUIDs.
   
   =head1 APPLICATION PROGRAMMING INTERFACE
   
  +The ISO-C Application Programming Interface (API) of B<OSSP uuid>
  +consists of the following components.
  +
  +=head2 CONSTANTS
  +
  +The following constants are provided:
  +
  +=over 4
  +
  +=item B<UUID_LEN_BIN>, B<UUID_LEN_STR>
  +
  +The number of octets of the UUID binary and string representations.
  +Notice that the lengths of the string representation does I<not> include
  +the necessary C<NUL> termination character.
  +
  +=item B<UUID_VERSION1>, B<UUID_VERSION3>, B<UUID_VERSION4>, B<UUID_MCASTRND>
  +
  +The I<mode> bits for use with B<uuid_generate>(). The
  +B<UUID_VERSION>I<N> specify which UUID version to generate. The
  +B<UUID_MCASTRND> forces the use of a random multi-cast MAC address
  +instead of the real physical MAC address in version 1 UUIDs.
  +
  +=item B<UUID_RC_OK>, B<UUID_RC_ARG>, B<UUID_RC_MEM>, B<UUID_RC_SYS>, B<UUID_RC_INT>
  +
  +The possible numerical return-codes of API functions.
  +Use B<uuid_error>() to translate them into string versions.
  +
  +=back
  +
  +=head2 FUNCTIONS
  +
  +The following functions are provided:
  +
   =over 4
   
   =item uuid_rc_t B<uuid_create>(uuid_t **I<uuid>);
   
  -FIXME
  +Create a new UUID object and store a pointer to it in C<*>I<uuid>.
  +A UUID object consists of an internal representation of a UUID, the
  +internal PRNG and MD5 generator contexts, and cached MAC address and
  +timestamp information. The initial UUID is the I<Nil> UUID.
   
   =item uuid_rc_t B<uuid_destroy>(uuid_t *I<uuid>);
   
  -FIXME
  +Destroy UUID object I<uuid>.
   
   =item uuid_rc_t B<uuid_nil>(uuid_t *I<uuid>);
   
  -FIXME
  +Sets or resets the UUID in I<uuid> to the I<Nil> UUID.
   
  -=item uuid_rc_t B<uuid_compare>(uuid_t *I<uuid>, uuid_t *I<uuid2>, int *I<result>);
  +=item uuid_rc_t B<uuid_isnil>(uuid_t *I<uuid>, int *I<result>);
   
  -FIXME
  +Checks whether the UUID in I<uuid> is the I<Nil> UUID.
  +If this is the case, it returns I<true> in C<*>I<result>.
  +Else it returns I<false> in C<*>I<result>.
   
  -=item uuid_rc_t B<uuid_isnil>(uuid_t *I<uuid>, int *I<result>);
  +=item uuid_rc_t B<uuid_compare>(uuid_t *I<uuid>, uuid_t *I<uuid2>, int *I<result>);
   
  -FIXME
  +Compares the order of the two UUIDs in I<uuid1> and I<uuid2>
  +and returns the result in C<*>I<result>: C<-1> if I<uuid1> is
  +smaller than I<uuid2>, C<0> if I<uuid1> is equal to I<uuid2>
  +and C<+1> if I<uuid1> is greater than I<uuid2>.
   
   =item uuid_rc_t B<uuid_unpack>(uuid_t *I<uuid>, const void *I<buf>);
   
  -FIXME
  +Imports the value of the UUID in I<uuid> by unpacking the binary
  +representation of length C<UUID_LEN_BIN> starting at I<buf>.
   
   =item uuid_rc_t B<uuid_pack>(uuid_t *I<uuid>, void **I<buf>);
   
  -FIXME
  +Exports the value of the UUID in I<uuid> by packing it into the
  +binary representation and storing it (with length C<UUID_LEN_BIN>)
  +at I<buf>. If I<buf> points to a C<NULL> pointer, a buffer of length
  +C<UUID_LEN_BIN> is allocated and stored into C<*>I<buf> first.
   
   =item uuid_rc_t B<uuid_parse>(uuid_t  *I<uuid>, const char  *I<str>);
   
  -FIXME
  +Imports the value of the UUID in I<uuid> by parsing the string
  +representation of length C<UUID_LEN_STR> starting at I<str>.
   
   =item uuid_rc_t B<uuid_format>(uuid_t *I<uuid>, char **I<str>);
   
  -FIXME
  +Exports the value of the UUID in I<uuid> by formatting it into the
  +C<NUL>-terminated string representation and storing it (with length
  +C<UUID_LEN_STR>+1) at I<str>. If I<str> points to a C<NULL> pointer,
  +a buffer of length C<UUID_LEN_STR>+1 is allocated and stored into
  +C<*>I<str> first.
   
   =item uuid_rc_t B<uuid_generate>(uuid_t *I<uuid>, unsigned int I<mode>, ...);
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.pod
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 uuid_cli.pod
  --- ossp-pkg/uuid/uuid_cli.pod	11 Jan 2004 08:54:18 -0000	1.3
  +++ ossp-pkg/uuid/uuid_cli.pod	11 Jan 2004 12:14:20 -0000	1.4
  @@ -57,9 +57,17 @@
   (UUID). It supports DCE 1.1 variant UUIDs of version 1 (time and node
   based), version 3 (name based) and version 4 (random number based).
   
  -This is the command line interface (CLI). For a brief overview of UUIDs
  -see the documentation of the application programming interface (API) in
  -uuid(3).
  +UUIDs are 128 bit numbers which are intended to have a high likelihood
  +of uniqueness over space and time and are computationally difficult
  +to guess. They are globally unique identifiers which can be locally
  +generated without contacting a global registration authority. UUIDs
  +are intended as unique identifiers for both mass tagging objects
  +with an extremely short lifetime and to reliably identifying very
  +persistent objects across a network.
  +
  +This is the command line interface (CLI) of B<OSSP uuid>. For a
  +detailed description of UUIDs see the documentation of the application
  +programming interface (API) in uuid(3).
   
   =head1 OPTIONS
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jan 11 19:26:58 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A30FE772F8; Sun, 11 Jan 2004 19:26:57 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ TODO uuid.pod
Message-Id: <20040111182657.A30FE772F8@mail.ossp.org>
Date: Sun, 11 Jan 2004 19:26:57 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Jan-2004 19:26:57
  Branch: HEAD                             Handle: 2004011118265600

  Modified files:
    ossp-pkg/uuid           TODO uuid.pod

  Log:
    finish API documentation

  Summary:
    Revision    Changes     Path
    1.6         +0  -1      ossp-pkg/uuid/TODO
    1.6         +37 -2      ossp-pkg/uuid/uuid.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/TODO
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 TODO
  --- ossp-pkg/uuid/TODO	11 Jan 2004 07:38:35 -0000	1.5
  +++ ossp-pkg/uuid/TODO	11 Jan 2004 18:26:56 -0000	1.6
  @@ -1,4 +1,3 @@
  -- write documentation uuid(3) [uuid.pod]
   - more platform support in uuid_mac.c?!
   - implement uuid -d (uuid_dump): dumping/decoding
   - global locking according to standard?
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	11 Jan 2004 12:14:19 -0000	1.5
  +++ ossp-pkg/uuid/uuid.pod	11 Jan 2004 18:26:56 -0000	1.6
  @@ -232,7 +232,27 @@
   
   =item uuid_rc_t B<uuid_generate>(uuid_t *I<uuid>, unsigned int I<mode>, ...);
   
  -FIXME
  +Generates a new UUID in I<uuid> according to I<mode> and optional
  +arguments (dependent on I<mode>).
  +
  +If I<mode> contains the C<UUID_VERSION1> bit, a DCE 1.1 variant UUID of
  +version 1 is generated. Then optionally the bit C<UUID_MCASTRND> forces
  +the use of random multi-cast MAC address instead of the real physical
  +MAC address (the default). The UUID is generated out of the 60-bit current
  +system time, a 12-bit clock sequence and the 48-bit MAC address.
  +
  +If I<mode> contains the C<UUID_VERSION3> bit, a DCE 1.1 variant UUID
  +of version 3 is generated and two additional C<NUL>-terminated string
  +arguments of type "C<const char *>" are expected: first a namespace,
  +given as an internally pre-defined id (currently known are ids "C<DNS>",
  +"C<URL>", "C<OID>", and "C<X500>") or a UUID in string representation.
  +Second, a name string of arbitrary length. The UUID is generated out of
  +the 128-bit MD5 from the concatenated octet stream of namespace UUID and name
  +string.
  +
  +If I<mode> contains the C<UUID_VERSION4> bit, a DCE 1.1 variant UUID
  +of version 4 is generated. The UUID is generated out of 128-bit random
  +data.
   
   =item uuid_rc_t B<uuid_dump>(uuid_t *I<uuid>, char **I<str>);
   
  @@ -240,7 +260,8 @@
   
   =item char *B<uuid_error>(uuid_rc_t I<rc>);
   
  -FIXME
  +Returns a constangt string representation corresponding to the
  +return-code I<rc> for use in displaying B<OSSP uuid> errors.
   
   =back
   
  @@ -296,6 +317,20 @@
   B<DCE 1.1 compliant UUID functions>,
   FreeBSD manual pages uuid(3) and uuidgen(2),
   http://www.freebsd.org/cgi/man.cgi?query=uuid&manpath=FreeBSD+5.2-RELEASE
  +
  +=back
  +
  +=head1 HISTORY
  +
  +B<OSSP uuid> was implemented in January 2004 by Ralf S. Engelschall
  +E<lt>rse@engelschall.comE<gt>. It was prompted by the use of UUIDs
  +in the B<OSSP as> and B<OpenPKG> projects. It is a clean room
  +implementation intended to be strictly standards compliant and maximum
  +portable.
  +
  +=head1 SEE ALSO
  +
  +uuid(1), uuid-config(1).
   
   =cut
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jan 11 19:32:38 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7876B772FA; Sun, 11 Jan 2004 19:32:38 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.h
Message-Id: <20040111183238.7876B772FA@mail.ossp.org>
Date: Sun, 11 Jan 2004 19:32:38 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Jan-2004 19:32:38
  Branch: HEAD                             Handle: 2004011118323800

  Modified files:
    ossp-pkg/uuid           uuid.h

  Log:
    clarify comment

  Summary:
    Revision    Changes     Path
    1.9         +2  -2      ossp-pkg/uuid/uuid.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.h
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 uuid.h
  --- ossp-pkg/uuid/uuid.h	11 Jan 2004 12:14:19 -0000	1.8
  +++ ossp-pkg/uuid/uuid.h	11 Jan 2004 18:32:38 -0000	1.9
  @@ -101,11 +101,11 @@
   extern uuid_rc_t  uuid_isnil    (uuid_t  *uuid,                int *result);
   extern uuid_rc_t  uuid_compare  (uuid_t  *uuid, uuid_t *uuid2, int *result);
   
  -/* binary representation handling */
  +/* UUID binary representation handling */
   extern uuid_rc_t  uuid_unpack   (uuid_t  *uuid, const void  *buf);
   extern uuid_rc_t  uuid_pack     (uuid_t  *uuid,       void **buf);
   
  -/* string representation handling */
  +/* UUID string representation handling */
   extern uuid_rc_t  uuid_parse    (uuid_t  *uuid, const char  *str);
   extern uuid_rc_t  uuid_format   (uuid_t  *uuid,       char **str);
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 12 10:08:37 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 931247730C; Mon, 12 Jan 2004 10:08:37 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ ChangeLog README fsl_version.c
Message-Id: <20040112090837.931247730C@mail.ossp.org>
Date: Mon, 12 Jan 2004 10:08:37 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   12-Jan-2004 10:08:37
  Branch: HEAD                             Handle: 2004011209083600

  Modified files:
    ossp-pkg/fsl            ChangeLog README fsl_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.27        +10 -0      ossp-pkg/fsl/ChangeLog
    1.41        +1  -1      ossp-pkg/fsl/README
    1.28        +9  -9      ossp-pkg/fsl/fsl_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 ChangeLog
  --- ossp-pkg/fsl/ChangeLog	9 Jan 2004 10:47:53 -0000	1.26
  +++ ossp-pkg/fsl/ChangeLog	12 Jan 2004 09:08:36 -0000	1.27
  @@ -8,6 +8,16 @@
   
     CHANGELOG
   
  +  Changes between 1.4b1 and 1.4 (12-Jan-2004)
  +
  +    *) None. OpenPKG build farm succeeded on
  +       FreeBSD 4.9-STABLE, FreeBSD 5.2-CURRENT, Debian GNU/Linux 2.2,
  +       Debian GNU/Linux 3.0, Debian GNU/Linux 3.1-pre, RedHat Linux 9,
  +       RedHat Enterprise Linux AS 3, SuSE Linux 8.2, SuSE Linux 9.0,
  +       Sun Solaris 9/x86, Sun Solaris 8, Sun Solaris 9, Sun Solaris 10/x86,
  +       Sun Solaris 2.6;
  +       [Thomas Lotterer <thomas@lotterer.net>]
  +
     Changes between 1.4a1 and 1.4b1 (09-Jan-2004)
   
       *) Adjust copyright messages to include new year 2004.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/README
  ============================================================================
  $ cvs diff -u -r1.40 -r1.41 README
  --- ossp-pkg/fsl/README	9 Jan 2004 10:48:26 -0000	1.40
  +++ ossp-pkg/fsl/README	12 Jan 2004 09:08:36 -0000	1.41
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_| |___/_|
    
     OSSP fsl - Faking/Flexible Syslog Library
  -  Version 1.4b1 (09-Jan-2004)
  +  Version 1.4.0 (12-Jan-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl_version.c
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 fsl_version.c
  --- ossp-pkg/fsl/fsl_version.c	9 Jan 2004 10:48:39 -0000	1.27
  +++ ossp-pkg/fsl/fsl_version.c	12 Jan 2004 09:08:36 -0000	1.28
  @@ -8,7 +8,7 @@
   #ifndef _FSL_VERSION_C_
   #define _FSL_VERSION_C_
   
  -#define FSL_VERSION 0x104101
  +#define FSL_VERSION 0x104200
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _FSL_VERSION_C_AS_HEADER_
   
   fsl_version_t fsl_version = {
  -    0x104101,
  -    "1.4b1",
  -    "1.4b1 (09-Jan-2004)",
  -    "This is OSSP fsl, Version 1.4b1 (09-Jan-2004)",
  -    "OSSP fsl 1.4b1 (09-Jan-2004)",
  -    "OSSP fsl/1.4b1",
  -    "@(#)OSSP fsl 1.4b1 (09-Jan-2004)",
  -    "$Id: fsl_version.c,v 1.27 2004/01/09 10:48:39 thl Exp $"
  +    0x104200,
  +    "1.4.0",
  +    "1.4.0 (12-Jan-2004)",
  +    "This is OSSP fsl, Version 1.4.0 (12-Jan-2004)",
  +    "OSSP fsl 1.4.0 (12-Jan-2004)",
  +    "OSSP fsl/1.4.0",
  +    "@(#)OSSP fsl 1.4.0 (12-Jan-2004)",
  +    "$Id: fsl_version.c,v 1.28 2004/01/12 09:08:36 thl Exp $"
   };
   
   #endif /* _FSL_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jan 13 10:20:04 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7E83C7736C; Tue, 13 Jan 2004 10:20:04 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid_cli.pod
Message-Id: <20040113092004.7E83C7736C@mail.ossp.org>
Date: Tue, 13 Jan 2004 10:20:04 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Jan-2004 10:20:04
  Branch: HEAD                             Handle: 2004011309200300

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid_cli.pod

  Log:
    Document in uuid(1) [uuid_cli.pod] that for version 3
    UUIDs additional arguments are required and what pre-defined
    namespace ids are known.
    
    Submitted by: M.Daniel <mdaniel@scdi.com>
    PR: 31

  Summary:
    Revision    Changes     Path
    1.4         +4  -2      ossp-pkg/uuid/ChangeLog
    1.5         +8  -3      ossp-pkg/uuid/uuid_cli.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	11 Jan 2004 12:14:19 -0000	1.3
  +++ ossp-pkg/uuid/ChangeLog	13 Jan 2004 09:20:03 -0000	1.4
  @@ -13,8 +13,10 @@
   
     Changes between 0.9.0 and 0.9.1 (11-Jan-2004 to xx-Jan-2004)
   
  -   o 
  -     [Ralf S. Engelschall]
  +   o Document in uuid(1) [uuid_cli.pod] that for version 3
  +     UUIDs additional arguments are required and what pre-defined
  +     namespace ids are known.
  +     [Ralf S. Engelschall, M.Daniel <mdaniel@scdi.com>]
   
      o cleaned up source tree documentation files.
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.pod
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 uuid_cli.pod
  --- ossp-pkg/uuid/uuid_cli.pod	11 Jan 2004 12:14:20 -0000	1.4
  +++ ossp-pkg/uuid/uuid_cli.pod	13 Jan 2004 09:20:03 -0000	1.5
  @@ -75,9 +75,14 @@
   
   =item B<-v> I<version>
   
  -Sets the version of the generated DCE 1.1 variant UUID.
  -Supported are I<version> "C<1>", "C<3>" and "C<4>".
  -The default is "C<1>".
  +Sets the version of the generated DCE 1.1 variant UUID. Supported
  +are I<version> "C<1>", "C<3>" and "C<4>". The default is "C<1>".
  +
  +For version 3 UUIDs the additional command line arguments I<namespace>
  +and I<name> have to be given. The I<namespace> is either a UUID in
  +string representation or an identifier for internally pre-defined
  +namespace UUIDs (currently known are "C<DNS>", "C<URL>", "C<OID>", and
  +"C<X500>"). The I<name> is a string of arbitrary length.
   
   =item B<-n> I<count>
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jan 13 10:26:47 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CA3987736C; Tue, 13 Jan 2004 10:26:46 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog Makefile.in
Message-Id: <20040113092646.CA3987736C@mail.ossp.org>
Date: Tue, 13 Jan 2004 10:26:46 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Jan-2004 10:26:46
  Branch: HEAD                             Handle: 2004011309264600

  Modified files:
    ossp-pkg/uuid           ChangeLog Makefile.in

  Log:
    Fixed "make install" and "make uninstall": the uuid(1) CLI
    has to be [un]installed through GNU libtool, too.
    
    Submitted by: Matthias Andree <matthias.andree@gmx.de>
    PR: 30

  Summary:
    Revision    Changes     Path
    1.5         +4  -0      ossp-pkg/uuid/ChangeLog
    1.11        +3  -3      ossp-pkg/uuid/Makefile.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	13 Jan 2004 09:20:03 -0000	1.4
  +++ ossp-pkg/uuid/ChangeLog	13 Jan 2004 09:26:46 -0000	1.5
  @@ -13,6 +13,10 @@
   
     Changes between 0.9.0 and 0.9.1 (11-Jan-2004 to xx-Jan-2004)
   
  +   o Fixed "make install" and "make uninstall": the uuid(1) CLI
  +     has to be [un]installed through GNU libtool, too.
  +     [Matthias Andree <matthias.andree@gmx.de>] 
  +
      o Document in uuid(1) [uuid_cli.pod] that for version 3
        UUIDs additional arguments are required and what pre-defined
        namespace ids are known.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	11 Jan 2004 08:54:17 -0000	1.10
  +++ ossp-pkg/uuid/Makefile.in	13 Jan 2004 09:26:46 -0000	1.11
  @@ -119,13 +119,13 @@
   	$(SHTOOL) install -c -m 644 uuid.h $(DESTDIR)$(includedir)/
   	$(SHTOOL) install -c -m 644 uuid.3 $(DESTDIR)$(mandir)/man3/
   	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libuuid.la $(DESTDIR)$(libdir)/
  -	$(SHTOOL) install -c -s -m 755 uuid $(DESTDIR)$(bindir)/
  +	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -s -m 755 uuid $(DESTDIR)$(bindir)/
   	$(SHTOOL) install -c -m 644 uuid.1 $(DESTDIR)$(mandir)/man1/
   
   uninstall:
   	-$(RM) $(DESTDIR)$(mandir)/man1/uuid.1
  -	-$(RM) $(DESTDIR)$(bindir)/uuid
  -	@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libuuid.la
  +	-@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(bindir)/uuid
  +	-@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libuuid.la
   	-$(RM) $(DESTDIR)$(mandir)/man3/uuid.3
   	-$(RM) $(DESTDIR)$(includedir)/uuid.h
   	-$(RM) $(DESTDIR)$(bindir)/uuid-config
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jan 13 10:29:48 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C1C037736C; Tue, 13 Jan 2004 10:29:48 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid_cli.c
Message-Id: <20040113092948.C1C037736C@mail.ossp.org>
Date: Tue, 13 Jan 2004 10:29:48 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Jan-2004 10:29:48
  Branch: HEAD                             Handle: 2004011309294800

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid_cli.c

  Log:
    Print involved option character (instead of '?') on invalid
    option for uuid(1) CLI.
    
    Submitted by: Matthias Andree <matthias.andree@gmx.de>
    PR: 29

  Summary:
    Revision    Changes     Path
    1.6         +4  -0      ossp-pkg/uuid/ChangeLog
    1.8         +1  -1      ossp-pkg/uuid/uuid_cli.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	13 Jan 2004 09:26:46 -0000	1.5
  +++ ossp-pkg/uuid/ChangeLog	13 Jan 2004 09:29:48 -0000	1.6
  @@ -13,6 +13,10 @@
   
     Changes between 0.9.0 and 0.9.1 (11-Jan-2004 to xx-Jan-2004)
   
  +   o Print involved option character (instead of '?') on invalid
  +     option for uuid(1) CLI.
  +     [Matthias Andree <matthias.andree@gmx.de>] 
  +
      o Fixed "make install" and "make uninstall": the uuid(1) CLI
        has to be [un]installed through GNU libtool, too.
        [Matthias Andree <matthias.andree@gmx.de>] 
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 uuid_cli.c
  --- ossp-pkg/uuid/uuid_cli.c	10 Jan 2004 10:49:00 -0000	1.7
  +++ ossp-pkg/uuid/uuid_cli.c	13 Jan 2004 09:29:48 -0000	1.8
  @@ -129,7 +129,7 @@
                   }
                   break;
               default:
  -                usage("invalid option '%c'", ch);
  +                usage("invalid option '%c'", optopt);
           }
       }
       argv += optind;
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jan 13 11:02:27 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4387C773A2; Tue, 13 Jan 2004 11:02:27 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog configure.ac
Message-Id: <20040113100227.4387C773A2@mail.ossp.org>
Date: Tue, 13 Jan 2004 11:02:27 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Jan-2004 11:02:27
  Branch: HEAD                             Handle: 2004011310022600

  Modified files:
    ossp-pkg/uuid           ChangeLog configure.ac

  Log:
    Disable the C++ and F77 checks in GNU libtool.

  Summary:
    Revision    Changes     Path
    1.7         +3  -0      ossp-pkg/uuid/ChangeLog
    1.4         +4  -0      ossp-pkg/uuid/configure.ac
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	13 Jan 2004 09:29:48 -0000	1.6
  +++ ossp-pkg/uuid/ChangeLog	13 Jan 2004 10:02:26 -0000	1.7
  @@ -13,6 +13,9 @@
   
     Changes between 0.9.0 and 0.9.1 (11-Jan-2004 to xx-Jan-2004)
   
  +   o Disable the C++ and F77 checks in GNU libtool.
  +     [Ralf S. Engelschall]
  +
      o Print involved option character (instead of '?') on invalid
        option for uuid(1) CLI.
        [Matthias Andree <matthias.andree@gmx.de>] 
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/configure.ac
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 configure.ac
  --- ossp-pkg/uuid/configure.ac	11 Jan 2004 08:54:18 -0000	1.3
  +++ ossp-pkg/uuid/configure.ac	13 Jan 2004 10:02:26 -0000	1.4
  @@ -37,6 +37,10 @@
   AC_PROG_CC
   AC_CHECK_DEBUGGING
   
  +m4_defun([AC_PROG_CXX])
  +m4_defun([AC_PROG_CXXCPP])
  +m4_defun([AC_PROG_F77])
  +with_tags=""
   sinclude(libtool.m4)
   AC_PROG_LIBTOOL
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jan 13 15:36:00 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4F19C773A2; Tue, 13 Jan 2004 15:36:00 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.h
Message-Id: <20040113143600.4F19C773A2@mail.ossp.org>
Date: Tue, 13 Jan 2004 15:36:00 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Jan-2004 15:36:00
  Branch: HEAD                             Handle: 2004011314355900

  Modified files:
    ossp-pkg/uuid           uuid.h

  Log:
    no need to duplicate here what is also in the API manpage

  Summary:
    Revision    Changes     Path
    1.10        +0  -37     ossp-pkg/uuid/uuid.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.h
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 uuid.h
  --- ossp-pkg/uuid/uuid.h	11 Jan 2004 18:32:38 -0000	1.9
  +++ ossp-pkg/uuid/uuid.h	13 Jan 2004 14:35:59 -0000	1.10
  @@ -30,43 +30,6 @@
   #ifndef __UUID_H__
   #define __UUID_H__
   
  -/*
  - *  UUID Binary Representation:
  - *
  - *  0                   1                   2                   3
  - *   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  - *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  - * 0|                          time_low                             |
  - *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  - * 1|       time_mid                |         time_hi_and_version   |
  - *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  - * 2|clk_seq_hi_res |  clk_seq_low  |         node (0-1)            |
  - *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  - * 3|                         node (2-5)                            |
  - *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  - *
  - *  UUID ASCII String Representation:
  - *
  - *  uuid                   = <time_low> "-" <time_mid> "-"
  - *                           <time_high_and_version> "-"
  - *                           <clock_seq_and_reserved>
  - *                           <clock_seq_low> "-" <node>
  - *  time_low               = 4*<hexOctet>
  - *  time_mid               = 2*<hexOctet>
  - *  time_high_and_version  = 2*<hexOctet>
  - *  clock_seq_and_reserved = <hexOctet>
  - *  clock_seq_low          = <hexOctet>
  - *  node                   = 6*<hexOctet>
  - *  hexOctet               = <hexDigit> <hexDigit>
  - *  hexDigit =               "0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9"
  - *                          |"a"|"b"|"c"|"d"|"e"|"f"
  - *                          |"A"|"B"|"C"|"D"|"E"|"F"
  - *
  - *  Example string representation of a UUID:
  - *
  - *  "f81d4fae-7dec-11d0-a765-00a0c91e6bf6"
  - */
  -
   /* encoding octet stream lengths */
   #define UUID_LEN_BIN (128 / 8 /*bytes*/)
   #define UUID_LEN_STR (128 / 4 /*nibbles*/ + 4 /*hyphens*/)
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jan 13 20:43:16 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6DD79773A4; Tue, 13 Jan 2004 20:43:16 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog Makefile.in TODO uuid.ac uuid.c u...
Message-Id: <20040113194316.6DD79773A4@mail.ossp.org>
Date: Tue, 13 Jan 2004 20:43:16 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Jan-2004 20:43:16
  Branch: HEAD                             Handle: 2004011319431401

  Added files:
    ossp-pkg/uuid           uuid_bm.h uuid_str.c uuid_str.h
  Modified files:
    ossp-pkg/uuid           ChangeLog Makefile.in TODO uuid.ac uuid.c
                            uuid_cli.c uuid_cli.pod

  Log:
    Implement uuid_dump() and corresponding uuid CLI "-d"
    option for dumping a given UUID into clear text. For convinience
    reasons add uuid_bm.h (bit mask API) and uuid_str (string
    formatting API) sub-modules.

  Summary:
    Revision    Changes     Path
    1.8         +10 -0      ossp-pkg/uuid/ChangeLog
    1.12        +1  -1      ossp-pkg/uuid/Makefile.in
    1.7         +1  -1      ossp-pkg/uuid/TODO
    1.6         +1  -0      ossp-pkg/uuid/uuid.ac
    1.23        +127 -6     ossp-pkg/uuid/uuid.c
    1.1         +80 -0      ossp-pkg/uuid/uuid_bm.h
    1.9         +14 -2      ossp-pkg/uuid/uuid_cli.c
    1.6         +7  -0      ossp-pkg/uuid/uuid_cli.pod
    1.1         +752 -0     ossp-pkg/uuid/uuid_str.c
    1.1         +63 -0      ossp-pkg/uuid/uuid_str.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	13 Jan 2004 10:02:26 -0000	1.7
  +++ ossp-pkg/uuid/ChangeLog	13 Jan 2004 19:43:14 -0000	1.8
  @@ -13,6 +13,16 @@
   
     Changes between 0.9.0 and 0.9.1 (11-Jan-2004 to xx-Jan-2004)
   
  +   o Implement uuid_dump() and corresponding uuid CLI "-d"
  +     option for dumping a given UUID into clear text. For convinience
  +     reasons add uuid_bm.h (bit mask API) and uuid_str (string
  +     formatting API) sub-modules.
  +     [Ralf S. Engelschall]
  +
  +   o Add "-m" option to CLI for allowing to generate v1 UUIDs
  +     with random multi-cast addresses (API UUID_MCASTRND option).
  +     [Ralf S. Engelschall]
  +
      o Disable the C++ and F77 checks in GNU libtool.
        [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	13 Jan 2004 09:26:46 -0000	1.11
  +++ ossp-pkg/uuid/Makefile.in	13 Jan 2004 19:43:14 -0000	1.12
  @@ -51,7 +51,7 @@
   POD2MAN     = pod2man
   
   LIB_NAME    = libuuid.la
  -LIB_OBJS    = uuid.lo uuid_md5.lo uuid_prng.lo uuid_mac.lo uuid_ui64.lo
  +LIB_OBJS    = uuid.lo uuid_md5.lo uuid_prng.lo uuid_mac.lo uuid_ui64.lo uuid_str.lo
   
   PRG_NAME    = uuid
   PRG_OBJS    = uuid_cli.o
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/TODO
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 TODO
  --- ossp-pkg/uuid/TODO	11 Jan 2004 18:26:56 -0000	1.6
  +++ ossp-pkg/uuid/TODO	13 Jan 2004 19:43:14 -0000	1.7
  @@ -1,6 +1,6 @@
   - more platform support in uuid_mac.c?!
  -- implement uuid -d (uuid_dump): dumping/decoding
   - global locking according to standard?
   - persistent/non-volatile state writing?
   - additional C API for DCE 1.1 compatibility
   - additional Perl API for covering Perl language
  +- use uuid_bm.h stuff throughout code
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.ac
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 uuid.ac
  --- ossp-pkg/uuid/uuid.ac	11 Jan 2004 08:27:18 -0000	1.5
  +++ ossp-pkg/uuid/uuid.ac	13 Jan 2004 19:43:14 -0000	1.6
  @@ -86,6 +86,7 @@
       AC_CHECK_FUNCS(getifaddrs nanosleep)
   
       dnl #   check size of built-in types
  +    AC_CHECK_TYPES([long long, long double])
       AC_CHECK_SIZEOF(char, 1)
       AC_CHECK_SIZEOF(unsigned char, 1)
       AC_CHECK_SIZEOF(short, 2)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 uuid.c
  --- ossp-pkg/uuid/uuid.c	11 Jan 2004 12:14:19 -0000	1.22
  +++ ossp-pkg/uuid/uuid.c	13 Jan 2004 19:43:14 -0000	1.23
  @@ -45,6 +45,8 @@
   #include "uuid_prng.h"
   #include "uuid_mac.h"
   #include "uuid_ui64.h"
  +#include "uuid_str.h"
  +#include "uuid_bm.h"
   
   /* determine types of 8-bit size */
   #if SIZEOF_CHAR == 1
  @@ -478,6 +480,11 @@
      (which in our case is 1us (= 1000ns) because we use gettimeofday(2) */
   #define UUIDS_PER_TICK 10
   
  +/* time offset between UUID and Unix Epoch time according to standards.
  +   (UUID UTC base time is October 15, 1582
  +    Unix UTC base time is January  1, 1970) */
  +#define UUID_TIMEOFFSET "01B21DD213814000"
  +
   /* INTERNAL: generate UUID version 1: time, clock and node based */
   static uuid_rc_t uuid_generate_v1(uuid_t *uuid, unsigned int mode, va_list ap)
   {
  @@ -536,11 +543,8 @@
       t = ui64_addn(t, time_now.tv_usec, NULL);
       t = ui64_muln(t, 10, NULL);
   
  -    /* adjust for offset between UUID and Unix Epoch time through adding
  -       the magic offset 01B21DD213814000 from draft-leach-uuids-guids-01.
  -       (UUID UTC base time is October 15, 1582
  -        Unix UTC base time is January  1, 1970) */
  -    offset = ui64_s2i("01B21DD213814000", NULL, 16);
  +    /* adjust for offset between UUID and Unix Epoch time */
  +    offset = ui64_s2i(UUID_TIMEOFFSET, NULL, 16);
       t = ui64_add(t, offset, NULL);
   
       /* compensate for low resolution system clock by adding
  @@ -732,13 +736,130 @@
       return rc;
   }
   
  +/* decoding tables */
  +static struct {
  +    uuid_uint8_t num;
  +    const char *desc;
  +} uuid_dectab_variant[] = {
  +    { BM_OCTET(0,0,0,0,0,0,0,0), "reserved (NCS backward compatible)" },
  +    { BM_OCTET(1,0,0,0,0,0,0,0), "DCE 1.1, ISO/IEC 11578:1996" },
  +    { BM_OCTET(1,1,0,0,0,0,0,0), "reserved (Microsoft GUID)" },
  +    { BM_OCTET(1,1,1,0,0,0,0,0), "reserved (future use)" }
  +};
  +static struct {
  +    int num;
  +    const char *desc;
  +} uuid_dectab_version[] = {
  +    { 1, "time and node based" },
  +    { 3, "name based" },
  +    { 4, "random data based" }
  +};
  +
   /* dump UUID object as descriptive text */
   uuid_rc_t uuid_dump(uuid_t *uuid, char **str)
   {
  +    const char *version;
  +    const char *variant;
  +    uint8_t tmp8;
  +    uint16_t tmp16;
  +    uint32_t tmp32;
  +    char string[UUID_LEN_STR+1];
  +    char *s;
  +    int i;
  +    ui64_t t;
  +    ui64_t offset;
  +    int t_nsec;
  +    int t_usec;
  +    time_t t_sec;
  +    char buf[19+1]; /* YYYY-MM-DD HH:MM:SS */
  +    struct tm *tm;
  +
       /* sanity check argument(s) */
       if (uuid == NULL || str == NULL)
           return UUID_RC_ARG;
  -    /* FIXME */
  +
  +    /* initialize output buffer */
  +    *str = NULL;
  +
  +    /* decode into string representation */
  +    s = string;
  +    uuid_format(uuid, &s);
  +    str_rsprintf(str, "UUID:    %s\n", s);
  +
  +    /* decode UUID variant */
  +    variant = "unknown";
  +    tmp8 = uuid->obj.clock_seq_hi_and_reserved;
  +    for (i = 7; i >= 0; i--) {
  +        if ((tmp8 & BM_BIT(i,1)) == 0) {
  +            tmp8 &= ~BM_MASK(i,0);
  +            break;
  +        }
  +    }
  +    for (i = 0; i < sizeof(uuid_dectab_variant)/sizeof(uuid_dectab_variant[0]); i++) {
  +        if (uuid_dectab_variant[i].num == tmp8) {
  +            variant = uuid_dectab_variant[i].desc;
  +            break;
  +        }
  +    }
  +    str_rsprintf(str, "variant: %s\n", variant);
  +
  +    /* decode UUID version */
  +    version = "unknown";
  +    tmp16 = (BM_SHR(uuid->obj.time_hi_and_version, 12) & 0x000f);
  +    for (i = 0; i < sizeof(uuid_dectab_version)/sizeof(uuid_dectab_version[0]); i++) {
  +        if (uuid_dectab_version[i].num == (int)tmp16) {
  +            version = uuid_dectab_version[i].desc;
  +            break;
  +        }
  +    }
  +    str_rsprintf(str, "version: %d (%s)\n", (int)tmp16, version);
  +
  +    /* we currently support DCE 1.1 variants of version 1/3/4 only */
  +    if (!(   tmp8 == BM_OCTET(1,0,0,0,0,0,0,0)
  +          && (tmp16 == 1 || tmp16 == 3 || tmp16 == 4)))
  +        return UUID_RC_OK;
  +
  +    /* decode more */
  +    if (tmp16 == 1) {
  +        /* decode version 1 */
  +
  +        /* decode system time */
  +        t = ui64_rol(ui64_n2i((unsigned long)(uuid->obj.time_hi_and_version & 0x0fff)), 48, NULL),
  +        t = ui64_or(t, ui64_rol(ui64_n2i((unsigned long)(uuid->obj.time_mid)), 32, NULL));
  +        t = ui64_or(t, ui64_n2i((unsigned long)(uuid->obj.time_low)));
  +        offset = ui64_s2i(UUID_TIMEOFFSET, NULL, 16);
  +        t = ui64_sub(t, offset, NULL);
  +        t = ui64_divn(t, 10, &t_nsec);
  +        t = ui64_divn(t, 1000000, &t_usec);
  +        t_sec = (time_t)ui64_i2n(t);
  +        tm = gmtime(&t_sec);
  +        strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", tm);
  +        str_rsprintf(str, "content: time:  %s.%06d.%d UTC\n", buf, t_usec, t_nsec);
  +
  +        /* decode clock sequence */
  +        tmp32 = ((uuid->obj.clock_seq_hi_and_reserved & ~((0x03) << 6)) << 8)
  +                + uuid->obj.clock_seq_low;
  +        str_rsprintf(str, "         clock: %ld (usually random)\n", (unsigned long)tmp32);
  +
  +        /* decode node MAC address */
  +        str_rsprintf(str, "         node:  %02x:%02x:%02x:%02x:%02x:%02x (%s)\n",
  +            (unsigned int)uuid->obj.node[0],
  +            (unsigned int)uuid->obj.node[1],
  +            (unsigned int)uuid->obj.node[2],
  +            (unsigned int)uuid->obj.node[3],
  +            (unsigned int)uuid->obj.node[4],
  +            (unsigned int)uuid->obj.node[5],
  +            (uuid->obj.node[0] & 0x80 ? "random multicast" : "real unicast"));
  +    }
  +    else if (tmp16 == 3) {
  +        /* decode version 3 */
  +        str_rsprintf(str, "content: [not decipherable]\n");
  +    }
  +    else if (tmp16 == 4) {
  +        /* decode version 4 */
  +        str_rsprintf(str, "content: [no semantics]\n");
  +    }
  +
       return UUID_RC_OK;
   }
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_bm.h
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid_bm.h
  --- /dev/null	2004-01-13 20:43:15.000000000 +0100
  +++ uuid_bm.h	2004-01-13 20:43:15.000000000 +0100
  @@ -0,0 +1,80 @@
  +/*
  +**  OSSP uuid - Universally Unique Identifier
  +**  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +**
  +**  This file is part of OSSP uuid, a library for the generation
  +**  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  uuid_bm.c: bitmask API implementation
  +*/
  +
  +#ifndef __UUID_BM_H__
  +#define __UUID_BM_H__
  +
  +/*
  + *  Bitmask Calculation Macros
  + *  (Notice: bit positions are counted n...0, i.e. lowest bit is position 0)
  + */
  +
  +/* generate a bitmask consisting of 1 bits from (and including)
  +   bit position `l' (left) to (and including) bit position `r' */
  +#define BM_MASK(l,r) \
  +    (((1<<((l)-(r)+1))-1)<<(r))
  +
  +/* extract a value v from a word w at position `l' to `r' and return value */
  +#define BM_GET(w,l,r) \
  +    (((w)>>(r))&BM_MASK((l)-(r),0))
  +
  +/* insert a value v into a word w at position `l' to `r' and return word */
  +#define BM_SET(w,l,r,v) \
  +    ((w)|(((v)&BM_MASK((l)-(r),0))<<(r)))
  +
  +/* generate a single bit `b' (0 or 1) at bit position `n' */
  +#define BM_BIT(n,b) \
  +    ((b)<<(n))
  +
  +/* generate a quad word octet of bits (a half byte, i.e. bit positions 3 to 0) */
  +#define BM_QUAD(b3,b2,b1,b0) \
  +    (BM_BIT(3,(b3))|BM_BIT(2,(b2))|BM_BIT(1,(b1))|BM_BIT(0,(b0)))
  +
  +/* generate an octet word of bits (a byte, i.e. bit positions 7 to 0) */
  +#define BM_OCTET(b7,b6,b5,b4,b3,b2,b1,b0) \
  +    ((BM_QUAD(b7,b6,b5,b4)<<4)|BM_QUAD(b3,b2,b1,b0))
  +
  +/* generate the value 2^n */
  +#define BM_POW2(n) \
  +    BM_BIT(1,n)
  +
  +/* shift word w k bits to the left or to the right */
  +#define BM_SHL(w,k) \
  +    ((w)<<(k))
  +#define BM_SHR(w,k) \
  +    ((w)>>(k))
  +
  +/* rotate word w (of bits n..0) k bits to the left or to the right */
  +#define BM_ROL(w,n,k) \
  +    (BM_SHL((w),(k))&BM_MASK(n,0))|BM_SHR(((w)&BM_MASK(n,0)),(n)-(k))
  +#define BM_ROR(w,n,k) \
  +    (BM_SHR(((w)&BM_MASK(n,0)),(k)))|BM_SHL(((w),(n)-(k))&BM_MASK(n,0))
  +
  +#endif /* __UUID_BM_H__ */
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 uuid_cli.c
  --- ossp-pkg/uuid/uuid_cli.c	13 Jan 2004 09:29:48 -0000	1.8
  +++ ossp-pkg/uuid/uuid_cli.c	13 Jan 2004 19:43:14 -0000	1.9
  @@ -91,7 +91,7 @@
       raw = 0;        /* default is ASCII output */
       decode = 0;     /* default is to encode */
       version = UUID_VERSION1;
  -    while ((ch = getopt(argc, argv, "1n:rdo:v:")) != -1) {
  +    while ((ch = getopt(argc, argv, "1n:rdmo:v:")) != -1) {
           switch (ch) {
               case '1':
                   iterate = 1;
  @@ -115,6 +115,9 @@
                   if ((fp = fopen(optarg, "w")) == NULL)
                       error(1, "fopen: %s", strerror(errno));
                   break;
  +            case 'm':
  +                version |= UUID_MCASTRND;
  +                break;
               case 'v':
                   i = strtol(optarg, &p, 10);
                   if (*p != '\0')
  @@ -141,7 +144,16 @@
           /* decoding */
           if (argc != 1)
               usage("invalid number of arguments");
  -        /* FIXME */
  +        if ((rc = uuid_create(&uuid)) != UUID_RC_OK)
  +            error(1, "uuid_create: %s", uuid_error(rc));
  +        if ((rc = uuid_parse(uuid, argv[0])) != UUID_RC_OK)
  +            error(1, "uuid_parse: %s", uuid_error(rc));
  +        if ((rc = uuid_dump(uuid, &cp)) != UUID_RC_OK)
  +            error(1, "uuid_dump: %s", uuid_error(rc));
  +        fprintf(stdout, "%s", cp);
  +        free(cp);
  +        if ((rc = uuid_destroy(uuid)) != UUID_RC_OK)
  +            error(1, "uuid_destroy: %s", uuid_error(rc));
       }
       else {
           /* encoding */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.pod
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 uuid_cli.pod
  --- ossp-pkg/uuid/uuid_cli.pod	13 Jan 2004 09:20:03 -0000	1.5
  +++ ossp-pkg/uuid/uuid_cli.pod	13 Jan 2004 19:43:15 -0000	1.6
  @@ -37,6 +37,7 @@
   
   B<uuid>
   [B<-v> I<version>]
  +[B<-m>]
   [B<-n> I<count>]
   [B<-1>]
   [B<-r>]
  @@ -83,6 +84,12 @@
   string representation or an identifier for internally pre-defined
   namespace UUIDs (currently known are "C<DNS>", "C<URL>", "C<OID>", and
   "C<X500>"). The I<name> is a string of arbitrary length.
  +
  +=item B<-m>
  +
  +Forces the use of a random multi-cast MAC address when generating
  +version 1 UUIDs. By default the real physical MAC address of the system
  +is used.
   
   =item B<-n> I<count>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_str.c
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid_str.c
  --- /dev/null	2004-01-13 20:43:15.000000000 +0100
  +++ uuid_str.c	2004-01-13 20:43:15.000000000 +0100
  @@ -0,0 +1,752 @@
  +/*
  +**  OSSP uuid - Universally Unique Identifier
  +**  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +**
  +**  This file is part of OSSP uuid, a library for the generation
  +**  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  uuid_str.c: string formatting functions
  +*/
  +
  +/*
  + * Copyright Patrick Powell 1995
  + * This code is based on code written by Patrick Powell <papowell@astart.com>
  + * It may be used for any purpose as long as this notice remains intact
  + * on all source code distributions.
  + */
  +
  +/*
  + * This code contains numerious changes and enhancements which were
  + * made by lots of contributors over the last years to Patrick Powell's
  + * original code:
  + *
  + * o Patrick Powell <papowell@astart.com>      (1995)
  + * o Brandon Long <blong@fiction.net>          (1996, for Mutt)
  + * o Thomas Roessler <roessler@guug.de>        (1998, for Mutt)
  + * o Michael Elkins <me@cs.hmc.edu>            (1998, for Mutt)
  + * o Andrew Tridgell <tridge@samba.org>        (1998, for Samba)
  + * o Luke Mewburn <lukem@netbsd.org>           (1999, for LukemFTP)
  + * o Ralf S. Engelschall <rse@engelschall.com> (1999, for OSSP)
  + */
  +
  +#include <stdlib.h>
  +#include <stdarg.h>
  +#include <string.h>
  +#include <ctype.h>
  +
  +#include "config.h"
  +#include "uuid_str.h"
  +
  +#if HAVE_LONG_LONG
  +#define LLONG long long
  +#else
  +#define LLONG long
  +#endif
  +
  +#if HAVE_LONG_DOUBLE
  +#define LDOUBLE long double
  +#else
  +#define LDOUBLE double
  +#endif
  +
  +static void fmtstr     (char *, size_t *, size_t, char *, int, int, int);
  +static void fmtint     (char *, size_t *, size_t, LLONG, int, int, int, int);
  +static void fmtfp      (char *, size_t *, size_t, LDOUBLE, int, int, int);
  +static void dopr_outch (char *, size_t *, size_t, int);
  +
  +/* format read states */
  +#define DP_S_DEFAULT    0
  +#define DP_S_FLAGS      1
  +#define DP_S_MIN        2
  +#define DP_S_DOT        3
  +#define DP_S_MAX        4
  +#define DP_S_MOD        5
  +#define DP_S_CONV       6
  +#define DP_S_DONE       7
  +
  +/* format flags - Bits */
  +#define DP_F_MINUS      (1 << 0)
  +#define DP_F_PLUS       (1 << 1)
  +#define DP_F_SPACE      (1 << 2)
  +#define DP_F_NUM        (1 << 3)
  +#define DP_F_ZERO       (1 << 4)
  +#define DP_F_UP         (1 << 5)
  +#define DP_F_UNSIGNED   (1 << 6)
  +
  +/* conversion flags */
  +#define DP_C_SHORT      1
  +#define DP_C_LONG       2
  +#define DP_C_LDOUBLE    3
  +#define DP_C_LLONG      4
  +
  +/* some handy macros */
  +#define char_to_int(p) (p - '0')
  +#define MAX(p,q) ((p >= q) ? p : q)
  +#define NUL '\0'
  +
  +static void
  +dopr(
  +    char *buffer,
  +    size_t maxlen,
  +    size_t *retlen,
  +    const char *format,
  +    va_list args)
  +{
  +    char ch;
  +    LLONG value;
  +    LDOUBLE fvalue;
  +    char *strvalue;
  +    int min;
  +    int max;
  +    int state;
  +    int flags;
  +    int cflags;
  +    size_t currlen;
  +
  +    state = DP_S_DEFAULT;
  +    flags = currlen = cflags = min = 0;
  +    max = -1;
  +    ch = *format++;
  +
  +    if (buffer == NULL)
  +        maxlen = 999999;
  +
  +    while (state != DP_S_DONE) {
  +        if ((ch == NUL) || (currlen >= maxlen))
  +            state = DP_S_DONE;
  +
  +        switch (state) {
  +        case DP_S_DEFAULT:
  +            if (ch == '%')
  +                state = DP_S_FLAGS;
  +            else
  +                dopr_outch(buffer, &currlen, maxlen, ch);
  +            ch = *format++;
  +            break;
  +        case DP_S_FLAGS:
  +            switch (ch) {
  +                case '-':
  +                    flags |= DP_F_MINUS;
  +                    ch = *format++;
  +                    break;
  +                case '+':
  +                    flags |= DP_F_PLUS;
  +                    ch = *format++;
  +                    break;
  +                case ' ':
  +                    flags |= DP_F_SPACE;
  +                    ch = *format++;
  +                    break;
  +                case '#':
  +                    flags |= DP_F_NUM;
  +                    ch = *format++;
  +                    break;
  +                case '0':
  +                    flags |= DP_F_ZERO;
  +                    ch = *format++;
  +                    break;
  +                default:
  +                    state = DP_S_MIN;
  +                    break;
  +            }
  +            break;
  +        case DP_S_MIN:
  +            if (isdigit((unsigned char)ch)) {
  +                min = 10 * min + char_to_int(ch);
  +                ch = *format++;
  +            } else if (ch == '*') {
  +                min = va_arg(args, int);
  +                ch = *format++;
  +                state = DP_S_DOT;
  +            } else
  +                state = DP_S_DOT;
  +            break;
  +        case DP_S_DOT:
  +            if (ch == '.') {
  +                state = DP_S_MAX;
  +                ch = *format++;
  +            } else
  +                state = DP_S_MOD;
  +            break;
  +        case DP_S_MAX:
  +            if (isdigit((unsigned char)ch)) {
  +                if (max < 0)
  +                    max = 0;
  +                max = 10 * max + char_to_int(ch);
  +                ch = *format++;
  +            } else if (ch == '*') {
  +                max = va_arg(args, int);
  +                ch = *format++;
  +                state = DP_S_MOD;
  +            } else
  +                state = DP_S_MOD;
  +            break;
  +        case DP_S_MOD:
  +            switch (ch) {
  +                case 'h':
  +                    cflags = DP_C_SHORT;
  +                    ch = *format++;
  +                    break;
  +                case 'l':
  +                    if (*format == 'l') {
  +                        cflags = DP_C_LLONG;
  +                        format++;
  +                    } else
  +                        cflags = DP_C_LONG;
  +                    ch = *format++;
  +                    break;
  +                case 'q':
  +                    cflags = DP_C_LLONG;
  +                    ch = *format++;
  +                    break;
  +                case 'L':
  +                    cflags = DP_C_LDOUBLE;
  +                    ch = *format++;
  +                    break;
  +                default:
  +                    break;
  +            }
  +            state = DP_S_CONV;
  +            break;
  +        case DP_S_CONV:
  +            switch (ch) {
  +            case 'd':
  +            case 'i':
  +                switch (cflags) {
  +                case DP_C_SHORT:
  +                    value = (short int)va_arg(args, int);
  +                    break;
  +                case DP_C_LONG:
  +                    value = va_arg(args, long int);
  +                    break;
  +                case DP_C_LLONG:
  +                    value = va_arg(args, LLONG);
  +                    break;
  +                default:
  +                    value = va_arg(args, int);
  +                    break;
  +                }
  +                fmtint(buffer, &currlen, maxlen, value, 10, min, max, flags);
  +                break;
  +            case 'X':
  +                flags |= DP_F_UP;
  +                /* FALLTHROUGH */
  +            case 'x':
  +            case 'o':
  +            case 'u':
  +                flags |= DP_F_UNSIGNED;
  +                switch (cflags) {
  +                    case DP_C_SHORT:
  +                        value = (unsigned short int)va_arg(args, unsigned int);
  +                        break;
  +                    case DP_C_LONG:
  +                        value = (LLONG)va_arg(args, unsigned long int);
  +                        break;
  +                    case DP_C_LLONG:
  +                        value = va_arg(args, unsigned LLONG);
  +                        break;
  +                    default:
  +                        value = (LLONG)va_arg(args, unsigned int);
  +                        break;
  +                }
  +                fmtint(buffer, &currlen, maxlen, value,
  +                       ch == 'o' ? 8 : (ch == 'u' ? 10 : 16),
  +                       min, max, flags);
  +                break;
  +            case 'f':
  +                if (cflags == DP_C_LDOUBLE)
  +                    fvalue = va_arg(args, LDOUBLE);
  +                else
  +                    fvalue = va_arg(args, double);
  +                fmtfp(buffer, &currlen, maxlen, fvalue, min, max, flags);
  +                break;
  +            case 'E':
  +                flags |= DP_F_UP;
  +            case 'e':
  +                if (cflags == DP_C_LDOUBLE)
  +                    fvalue = va_arg(args, LDOUBLE);
  +                else
  +                    fvalue = va_arg(args, double);
  +                break;
  +            case 'G':
  +                flags |= DP_F_UP;
  +            case 'g':
  +                if (cflags == DP_C_LDOUBLE)
  +                    fvalue = va_arg(args, LDOUBLE);
  +                else
  +                    fvalue = va_arg(args, double);
  +                break;
  +            case 'c':
  +                dopr_outch(buffer, &currlen, maxlen, va_arg(args, int));
  +                break;
  +            case 's':
  +                strvalue = va_arg(args, char *);
  +                if (max < 0)
  +                    max = maxlen;
  +                fmtstr(buffer, &currlen, maxlen, strvalue, flags, min, max);
  +                break;
  +            case 'p':
  +                value = (long)va_arg(args, void *);
  +                fmtint(buffer, &currlen, maxlen, value, 16, min, max, flags);
  +                break;
  +            case 'n': /* XXX */
  +                if (cflags == DP_C_SHORT) {
  +                    short int *num;
  +                    num = va_arg(args, short int *);
  +                    *num = currlen;
  +                } else if (cflags == DP_C_LONG) { /* XXX */
  +                    long int *num;
  +                    num = va_arg(args, long int *);
  +                    *num = (long int) currlen;
  +                } else if (cflags == DP_C_LLONG) { /* XXX */
  +                    LLONG *num;
  +                    num = va_arg(args, LLONG *);
  +                    *num = (LLONG) currlen;
  +                } else {
  +                    int    *num;
  +                    num = va_arg(args, int *);
  +                    *num = currlen;
  +                }
  +                break;
  +            case '%':
  +                dopr_outch(buffer, &currlen, maxlen, ch);
  +                break;
  +            case 'w':
  +                /* not supported yet, treat as next char */
  +                ch = *format++;
  +                break;
  +            default:
  +                /* unknown, skip */
  +                break;
  +            }
  +            ch = *format++;
  +            state = DP_S_DEFAULT;
  +            flags = cflags = min = 0;
  +            max = -1;
  +            break;
  +        case DP_S_DONE:
  +            break;
  +        default:
  +            break;
  +        }
  +    }
  +    if (currlen >= maxlen - 1)
  +        currlen = maxlen - 1;
  +    if (buffer != NULL)
  +        buffer[currlen] = NUL;
  +    *retlen = currlen;
  +    return;
  +}
  +
  +static void
  +fmtstr(
  +    char *buffer,
  +    size_t *currlen,
  +    size_t maxlen,
  +    char *value,
  +    int flags,
  +    int min,
  +    int max)
  +{
  +    int padlen, strln;
  +    int cnt = 0;
  +
  +    if (value == NULL)
  +        value = "<NULL>";
  +    for (strln = 0; value[strln] != '\0'; strln++)
  +        ;
  +    padlen = min - strln;
  +    if (padlen < 0)
  +        padlen = 0;
  +    if (flags & DP_F_MINUS)
  +        padlen = -padlen;
  +
  +    while ((padlen > 0) && (cnt < max)) {
  +        dopr_outch(buffer, currlen, maxlen, ' ');
  +        --padlen;
  +        ++cnt;
  +    }
  +    while (*value && (cnt < max)) {
  +        dopr_outch(buffer, currlen, maxlen, *value++);
  +        ++cnt;
  +    }
  +    while ((padlen < 0) && (cnt < max)) {
  +        dopr_outch(buffer, currlen, maxlen, ' ');
  +        ++padlen;
  +        ++cnt;
  +    }
  +}
  +
  +static void
  +fmtint(
  +    char *buffer,
  +    size_t *currlen,
  +    size_t maxlen,
  +    LLONG value,
  +    int base,
  +    int min,
  +    int max,
  +    int flags)
  +{
  +    int signvalue = 0;
  +    unsigned LLONG uvalue;
  +    char convert[20];
  +    int place = 0;
  +    int spadlen = 0;
  +    int zpadlen = 0;
  +    int caps = 0;
  +
  +    if (max < 0)
  +        max = 0;
  +    uvalue = value;
  +    if (!(flags & DP_F_UNSIGNED)) {
  +        if (value < 0) {
  +            signvalue = '-';
  +            uvalue = -value;
  +        } else if (flags & DP_F_PLUS)
  +            signvalue = '+';
  +        else if (flags & DP_F_SPACE)
  +            signvalue = ' ';
  +    }
  +    if (flags & DP_F_UP)
  +        caps = 1;
  +    do {
  +        convert[place++] =
  +            (caps ? "0123456789ABCDEF" : "0123456789abcdef")
  +            [uvalue % (unsigned) base];
  +        uvalue = (uvalue / (unsigned) base);
  +    } while (uvalue && (place < 20));
  +    if (place == 20)
  +        place--;
  +    convert[place] = 0;
  +
  +    zpadlen = max - place;
  +    spadlen = min - MAX(max, place) - (signvalue ? 1 : 0);
  +    if (zpadlen < 0)
  +        zpadlen = 0;
  +    if (spadlen < 0)
  +        spadlen = 0;
  +    if (flags & DP_F_ZERO) {
  +        zpadlen = MAX(zpadlen, spadlen);
  +        spadlen = 0;
  +    }
  +    if (flags & DP_F_MINUS)
  +        spadlen = -spadlen;
  +
  +    /* spaces */
  +    while (spadlen > 0) {
  +        dopr_outch(buffer, currlen, maxlen, ' ');
  +        --spadlen;
  +    }
  +
  +    /* sign */
  +    if (signvalue)
  +        dopr_outch(buffer, currlen, maxlen, signvalue);
  +
  +    /* zeros */
  +    if (zpadlen > 0) {
  +        while (zpadlen > 0) {
  +            dopr_outch(buffer, currlen, maxlen, '0');
  +            --zpadlen;
  +        }
  +    }
  +    /* digits */
  +    while (place > 0)
  +        dopr_outch(buffer, currlen, maxlen, convert[--place]);
  +
  +    /* left justified spaces */
  +    while (spadlen < 0) {
  +        dopr_outch(buffer, currlen, maxlen, ' ');
  +        ++spadlen;
  +    }
  +    return;
  +}
  +
  +static LDOUBLE
  +abs_val(LDOUBLE value)
  +{
  +    LDOUBLE result = value;
  +    if (value < 0)
  +        result = -value;
  +    return result;
  +}
  +
  +static LDOUBLE
  +pow10(int exponent)
  +{
  +    LDOUBLE result = 1;
  +    while (exponent > 0) {
  +        result *= 10;
  +        exponent--;
  +    }
  +    return result;
  +}
  +
  +static long
  +round(LDOUBLE value)
  +{
  +    long intpart;
  +    intpart = (long) value;
  +    value = value - intpart;
  +    if (value >= 0.5)
  +        intpart++;
  +    return intpart;
  +}
  +
  +static void
  +fmtfp(
  +    char *buffer,
  +    size_t *currlen,
  +    size_t maxlen,
  +    LDOUBLE fvalue,
  +    int min,
  +    int max,
  +    int flags)
  +{
  +    int signvalue = 0;
  +    LDOUBLE ufvalue;
  +    char iconvert[20];
  +    char fconvert[20];
  +    int iplace = 0;
  +    int fplace = 0;
  +    int padlen = 0;
  +    int zpadlen = 0;
  +    int caps = 0;
  +    long intpart;
  +    long fracpart;
  +
  +    if (max < 0)
  +        max = 6;
  +    ufvalue = abs_val(fvalue);
  +    if (fvalue < 0)
  +        signvalue = '-';
  +    else if (flags & DP_F_PLUS)
  +        signvalue = '+';
  +    else if (flags & DP_F_SPACE)
  +        signvalue = ' ';
  +
  +    intpart = (long)ufvalue;
  +
  +    /* sorry, we only support 9 digits past the decimal because of our
  +       conversion method */
  +    if (max > 9)
  +        max = 9;
  +
  +    /* we "cheat" by converting the fractional part to integer by
  +       multiplying by a factor of 10 */
  +    fracpart = round((pow10(max)) * (ufvalue - intpart));
  +
  +    if (fracpart >= pow10(max)) {
  +        intpart++;
  +        fracpart -= pow10(max);
  +    }
  +
  +    /* convert integer part */
  +    do {
  +        iconvert[iplace++] =
  +            (caps ? "0123456789ABCDEF"
  +              : "0123456789abcdef")[intpart % 10];
  +        intpart = (intpart / 10);
  +    } while (intpart && (iplace < 20));
  +    if (iplace == 20)
  +        iplace--;
  +    iconvert[iplace] = 0;
  +
  +    /* convert fractional part */
  +    do {
  +        fconvert[fplace++] =
  +            (caps ? "0123456789ABCDEF"
  +              : "0123456789abcdef")[fracpart % 10];
  +        fracpart = (fracpart / 10);
  +    } while (fracpart && (fplace < 20));
  +    if (fplace == 20)
  +        fplace--;
  +    fconvert[fplace] = 0;
  +
  +    /* -1 for decimal point, another -1 if we are printing a sign */
  +    padlen = min - iplace - max - 1 - ((signvalue) ? 1 : 0);
  +    zpadlen = max - fplace;
  +    if (zpadlen < 0)
  +        zpadlen = 0;
  +    if (padlen < 0)
  +        padlen = 0;
  +    if (flags & DP_F_MINUS)
  +        padlen = -padlen;
  +
  +    if ((flags & DP_F_ZERO) && (padlen > 0)) {
  +        if (signvalue) {
  +            dopr_outch(buffer, currlen, maxlen, signvalue);
  +            --padlen;
  +            signvalue = 0;
  +        }
  +        while (padlen > 0) {
  +            dopr_outch(buffer, currlen, maxlen, '0');
  +            --padlen;
  +        }
  +    }
  +    while (padlen > 0) {
  +        dopr_outch(buffer, currlen, maxlen, ' ');
  +        --padlen;
  +    }
  +    if (signvalue)
  +        dopr_outch(buffer, currlen, maxlen, signvalue);
  +
  +    while (iplace > 0)
  +        dopr_outch(buffer, currlen, maxlen, iconvert[--iplace]);
  +
  +    /*
  +     * Decimal point. This should probably use locale to find the correct
  +     * char to print out.
  +     */
  +    if (max > 0) {
  +        dopr_outch(buffer, currlen, maxlen, '.');
  +
  +        while (fplace > 0)
  +            dopr_outch(buffer, currlen, maxlen, fconvert[--fplace]);
  +    }
  +    while (zpadlen > 0) {
  +        dopr_outch(buffer, currlen, maxlen, '0');
  +        --zpadlen;
  +    }
  +
  +    while (padlen < 0) {
  +        dopr_outch(buffer, currlen, maxlen, ' ');
  +        ++padlen;
  +    }
  +    return;
  +}
  +
  +static void
  +dopr_outch(
  +    char *buffer,
  +    size_t *currlen,
  +    size_t maxlen,
  +    int c)
  +{
  +    if (*currlen < maxlen) {
  +        if (buffer != NULL)
  +            buffer[(*currlen)] = (char)c;
  +        (*currlen)++;
  +    }
  +    return;
  +}
  +
  +int
  +str_vsnprintf(
  +    char *str,
  +    size_t count,
  +    const char *fmt,
  +    va_list args)
  +{
  +    size_t retlen;
  +
  +    if (str != NULL)
  +        str[0] = NUL;
  +    dopr(str, count, &retlen, fmt, args);
  +    return retlen;
  +}
  +
  +int
  +str_snprintf(
  +    char *str,
  +    size_t count,
  +    const char *fmt,
  +    ...)
  +{
  +    va_list ap;
  +    int rv;
  +
  +    va_start(ap, fmt);
  +    rv = str_vsnprintf(str, count, fmt, ap);
  +    va_end(ap);
  +    return rv;
  +}
  +
  +char *
  +str_vasprintf(
  +    const char *fmt,
  +    va_list ap)
  +{
  +    char *rv;
  +    int n;
  +
  +    n = str_vsnprintf(NULL, -1, fmt, ap);
  +    if ((rv = (char *)malloc(n+1)) == NULL)
  +        return NULL;
  +    str_vsnprintf(rv, n+1, fmt, ap);
  +    return rv;
  +}
  +
  +char *
  +str_asprintf(
  +    const char *fmt,
  +    ...)
  +{
  +    va_list ap;
  +    char *rv;
  +
  +    va_start(ap, fmt);
  +    rv = str_vasprintf(fmt, ap);
  +    va_end(ap);
  +    return rv;
  +}
  +
  +int
  +str_vrsprintf(
  +    char **str,
  +    const char *fmt,
  +    va_list ap)
  +{
  +    int rv;
  +    size_t n;
  +
  +    if (str == NULL)
  +        return -1;
  +    if (*str == NULL) {
  +        *str = str_vasprintf(fmt, ap);
  +        rv = strlen(*str);
  +    }
  +    else {
  +        n = strlen(*str);
  +        rv = str_vsnprintf(NULL, -1, fmt, ap);
  +        if ((*str = (char *)realloc(*str, n+rv+1)) == NULL)
  +            return -1;
  +        str_vsnprintf((*str)+n, rv+1, fmt, ap);
  +    }
  +    return rv;
  +}
  +
  +int
  +str_rsprintf(
  +    char **str,
  +    const char *fmt,
  +    ...)
  +{
  +    va_list ap;
  +    int rv;
  +
  +    va_start(ap, fmt);
  +    rv = str_vrsprintf(str, fmt, ap);
  +    va_end(ap);
  +    return rv;
  +}
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_str.h
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid_str.h
  --- /dev/null	2004-01-13 20:43:15.000000000 +0100
  +++ uuid_str.h	2004-01-13 20:43:15.000000000 +0100
  @@ -0,0 +1,63 @@
  +/*
  +**  OSSP uuid - Universally Unique Identifier
  +**  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +**
  +**  This file is part of OSSP uuid, a library for the generation
  +**  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  uuid_str.h: string formatting functions
  +*/
  +
  +#ifndef __UUID_STR_H__
  +#define __UUID_STR_H__
  +
  +#include <stdarg.h>
  +#include <string.h>
  +
  +#define STR_PREFIX uuid_
  +
  +/* embedding support */
  +#ifdef STR_PREFIX
  +#if defined(__STDC__) || defined(__cplusplus)
  +#define __STR_CONCAT(x,y) x ## y
  +#define STR_CONCAT(x,y) __STR_CONCAT(x,y)
  +#else
  +#define __STR_CONCAT(x) x
  +#define STR_CONCAT(x,y) __STR_CONCAT(x)y
  +#endif
  +#define str_vsnprintf  STR_CONCAT(STR_PREFIX,str_vsnprintf)
  +#define str_snprintf   STR_CONCAT(STR_PREFIX,str_snprintf)
  +#define str_vrsprintf  STR_CONCAT(STR_PREFIX,str_vrsprintf)
  +#define str_rsprintf   STR_CONCAT(STR_PREFIX,str_rsprintf)
  +#define str_vasprintf  STR_CONCAT(STR_PREFIX,str_vasprintf)
  +#define str_asprintf   STR_CONCAT(STR_PREFIX,str_asprintf)
  +#endif
  +
  +extern int   str_vsnprintf (char  *, size_t, const char *, va_list);
  +extern int   str_snprintf  (char  *, size_t, const char *, ...);
  +extern int   str_vrsprintf (char **,         const char *, va_list);
  +extern int   str_rsprintf  (char **,         const char *, ...);
  +extern char *str_vasprintf (                 const char *, va_list);
  +extern char *str_asprintf  (                 const char *, ...);
  +
  +#endif /* __UUID_STR_H__ */
  +
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jan 13 20:48:02 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7CCBF7748A; Tue, 13 Jan 2004 20:48:02 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid_mac.h uuid_md5.h
Message-Id: <20040113194802.7CCBF7748A@mail.ossp.org>
Date: Tue, 13 Jan 2004 20:48:02 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Jan-2004 20:48:02
  Branch: HEAD                             Handle: 2004011319480100

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid_mac.h uuid_md5.h

  Log:
    Make "md5_init" and "mac_address" symbols namespace clean
    by adding correct embedding support via "uuid_" prefix.

  Summary:
    Revision    Changes     Path
    1.9         +4  -0      ossp-pkg/uuid/ChangeLog
    1.2         +14 -0      ossp-pkg/uuid/uuid_mac.h
    1.3         +1  -0      ossp-pkg/uuid/uuid_md5.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	13 Jan 2004 19:43:14 -0000	1.8
  +++ ossp-pkg/uuid/ChangeLog	13 Jan 2004 19:48:01 -0000	1.9
  @@ -13,6 +13,10 @@
   
     Changes between 0.9.0 and 0.9.1 (11-Jan-2004 to xx-Jan-2004)
   
  +   o Make "md5_init" and "mac_address" symbols namespace clean
  +     by adding correct embedding support via "uuid_" prefix.
  +     [Ralf S. Engelschall]
  +
      o Implement uuid_dump() and corresponding uuid CLI "-d"
        option for dumping a given UUID into clear text. For convinience
        reasons add uuid_bm.h (bit mask API) and uuid_str (string
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_mac.h
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid_mac.h
  --- ossp-pkg/uuid/uuid_mac.h	10 Jan 2004 17:01:22 -0000	1.1
  +++ ossp-pkg/uuid/uuid_mac.h	13 Jan 2004 19:48:01 -0000	1.2
  @@ -32,6 +32,20 @@
   
   #include <string.h> /* size_t */
   
  +#define MAC_PREFIX uuid_
  +
  +/* embedding support */
  +#ifdef MAC_PREFIX
  +#if defined(__STDC__) || defined(__cplusplus)
  +#define __MAC_CONCAT(x,y) x ## y
  +#define MAC_CONCAT(x,y) __MAC_CONCAT(x,y)
  +#else
  +#define __MAC_CONCAT(x) x
  +#define MAC_CONCAT(x,y) __MAC_CONCAT(x)y
  +#endif
  +#define mac_address MAC_CONCAT(MAC_PREFIX,mac_create)
  +#endif
  +
   #define MAC_LEN 6
   
   extern int mac_address(unsigned char *data_ptr, size_t data_len);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_md5.h
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid_md5.h
  --- ossp-pkg/uuid/uuid_md5.h	10 Jan 2004 12:16:03 -0000	1.2
  +++ ossp-pkg/uuid/uuid_md5.h	13 Jan 2004 19:48:01 -0000	1.3
  @@ -46,6 +46,7 @@
   #define md5_st      MD5_CONCAT(MD5_PREFIX,md5_st)
   #define md5_t       MD5_CONCAT(MD5_PREFIX,md5_t)
   #define md5_create  MD5_CONCAT(MD5_PREFIX,md5_create)
  +#define md5_init    MD5_CONCAT(MD5_PREFIX,md5_init)
   #define md5_update  MD5_CONCAT(MD5_PREFIX,md5_update)
   #define md5_store   MD5_CONCAT(MD5_PREFIX,md5_store)
   #define md5_format  MD5_CONCAT(MD5_PREFIX,md5_format)
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jan 13 20:49:05 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1DD867748A; Tue, 13 Jan 2004 20:49:05 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ TODO
Message-Id: <20040113194905.1DD867748A@mail.ossp.org>
Date: Tue, 13 Jan 2004 20:49:05 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Jan-2004 20:49:05
  Branch: HEAD                             Handle: 2004011319490400

  Modified files:
    ossp-pkg/uuid           TODO

  Log:
     classify TODO items

  Summary:
    Revision    Changes     Path
    1.8         +5  -2      ossp-pkg/uuid/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/TODO
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 TODO
  --- ossp-pkg/uuid/TODO	13 Jan 2004 19:43:14 -0000	1.7
  +++ ossp-pkg/uuid/TODO	13 Jan 2004 19:49:04 -0000	1.8
  @@ -1,6 +1,9 @@
  +TODO
  +- none
  +CANDO
   - more platform support in uuid_mac.c?!
   - global locking according to standard?
   - persistent/non-volatile state writing?
  -- additional C API for DCE 1.1 compatibility
  -- additional Perl API for covering Perl language
   - use uuid_bm.h stuff throughout code
  +- additional Perl API for covering Perl language
  +- additional C API for DCE 1.1 compatibility
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jan 13 20:50:21 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 453307748A; Tue, 13 Jan 2004 20:50:21 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ README VERSION
Message-Id: <20040113195021.453307748A@mail.ossp.org>
Date: Tue, 13 Jan 2004 20:50:21 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Jan-2004 20:50:21
  Branch: HEAD                             Handle: 2004011319502000

  Modified files:
    ossp-pkg/uuid           README VERSION

  Log:
    bump for release

  Summary:
    Revision    Changes     Path
    1.7         +1  -1      ossp-pkg/uuid/README
    1.4         +1  -1      ossp-pkg/uuid/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 README
  --- ossp-pkg/uuid/README	11 Jan 2004 08:54:18 -0000	1.6
  +++ ossp-pkg/uuid/README	13 Jan 2004 19:50:20 -0000	1.7
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
   
     OSSP uuid - Universally Unique Identifier
  -  Version 0.9.0 (11-Jan-2004)
  +  Version 0.9.1 (13-Jan-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/VERSION
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 VERSION
  --- ossp-pkg/uuid/VERSION	11 Jan 2004 08:37:22 -0000	1.3
  +++ ossp-pkg/uuid/VERSION	13 Jan 2004 19:50:20 -0000	1.4
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP uuid (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP uuid, Version 0.9.0 (11-Jan-2004)
  +  This is OSSP uuid, Version 0.9.1 (13-Jan-2004)
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jan 13 20:55:36 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E4A27774B2; Tue, 13 Jan 2004 20:55:35 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20040113195535.E4A27774B2@mail.ossp.org>
Date: Tue, 13 Jan 2004 20:55:35 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   13-Jan-2004 20:55:35
  Branch: HEAD                             Handle: 2004011319553401

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/uuid   index.wml

  Log:
    release OSSP uuid 0.9.1

  Summary:
    Revision    Changes     Path
    1.69        +1  -0      ossp-web/new/news.txt
    1.62        +1  -1      ossp-web/pkg/lib/index.wml
    1.3         +3  -3      ossp-web/pkg/lib/uuid/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.68 -r1.69 news.txt
  --- ossp-web/new/news.txt	11 Jan 2004 08:43:50 -0000	1.68
  +++ ossp-web/new/news.txt	13 Jan 2004 19:55:34 -0000	1.69
  @@ -1,3 +1,4 @@
  +13-Jan-2004: Released L<OSSP uuid> 0.9.1
   11-Jan-2004: Released L<OSSP uuid> 0.9.0
   10-Nov-2003: Released L<OSSP sa> 1.1.0
   10-Nov-2003: Released L<OSSP cfg> 0.9.1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.61 -r1.62 index.wml
  --- ossp-web/pkg/lib/index.wml	10 Jan 2004 22:32:31 -0000	1.61
  +++ ossp-web/pkg/lib/index.wml	13 Jan 2004 19:55:34 -0000	1.62
  @@ -42,7 +42,7 @@
   			done=95 stable=none unstable=0.9.8>
     <pkg_item name="uuid" longname="OSSP uuid" type="lib"
               desc="Universally Unique Identifiers"
  -			done=90 stable=none unstable=0.9.0>
  +			done=95 stable=none unstable=0.9.1>
     <pkg_item name="l2" longname="OSSP l2" type="lib"
               desc="Flexible Logging"
   			done=95 stable=none unstable=0.9.5>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/uuid/index.wml
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 index.wml
  --- ossp-web/pkg/lib/uuid/index.wml	11 Jan 2004 08:43:51 -0000	1.2
  +++ ossp-web/pkg/lib/uuid/index.wml	13 Jan 2004 19:55:35 -0000	1.3
  @@ -37,8 +37,8 @@
   <pkg_status
       name="uuid" assign="rse"
       stable="none"    stable_date="none"
  -    unstable="0.9.0" unstable_date="11-Jan-2004"
  -	done=90>
  +    unstable="0.9.1" unstable_date="13-Jan-2004"
  +	done=95>
   
   <h2>Source</h2>
   
  @@ -47,7 +47,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/uuid/
       directory=$(FTP_ROOT_DIR)/pkg/lib/uuid/
       files="uuid-*.tar.gz" 
  -	stable="uuid-0\.9\.0\.tar\.gz" unstable="uuid-SNAP.*\.tar.gz">
  +	stable="uuid-0\.9\.1\.tar\.gz" unstable="uuid-SNAP.*\.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jan 13 21:10:30 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AF8E3773A4; Tue, 13 Jan 2004 21:10:30 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/uuid/ index.wml
Message-Id: <20040113201030.AF8E3773A4@mail.ossp.org>
Date: Tue, 13 Jan 2004 21:10:30 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   13-Jan-2004 21:10:30
  Branch: HEAD                             Handle: 2004011320103000

  Modified files:
    ossp-web/pkg/lib/uuid   index.wml

  Log:
    add a little bit of illustration

  Summary:
    Revision    Changes     Path
    1.4         +7  -0      ossp-web/pkg/lib/uuid/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/uuid/index.wml
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 index.wml
  --- ossp-web/pkg/lib/uuid/index.wml	13 Jan 2004 19:55:35 -0000	1.3
  +++ ossp-web/pkg/lib/uuid/index.wml	13 Jan 2004 20:10:30 -0000	1.4
  @@ -5,6 +5,13 @@
   
   <h1>Universally Unique Identifiers</h1>
   
  +<p align=right>
  +<table bgcolor="e5e5e0" cellspacing=0 cellpadding=10><tr><td>
  +<font size=-1 color="#000000"><tt>$ uuid -v3 URL http://www.ossp.org/<br>
  +<b>02d9e6d5-9467-382e-8f9b-9300a64ac3cd</b></tt></font>
  +</td></tr></table>
  +</p>
  +
   <h2>Abstract</h2>
   
   OSSP uuid is a ISO-C application programming interface (API) and
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jan 13 21:11:43 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 383B9773A4; Tue, 13 Jan 2004 21:11:43 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/ index.wml ossp-web/pkg/lib/uuid/ index.w...
Message-Id: <20040113201143.383B9773A4@mail.ossp.org>
Date: Tue, 13 Jan 2004 21:11:43 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   13-Jan-2004 21:11:43
  Branch: HEAD                             Handle: 2004011320114200

  Modified files:
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/uuid   index.wml

  Log:
    no plural

  Summary:
    Revision    Changes     Path
    1.63        +1  -1      ossp-web/pkg/lib/index.wml
    1.5         +1  -1      ossp-web/pkg/lib/uuid/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.62 -r1.63 index.wml
  --- ossp-web/pkg/lib/index.wml	13 Jan 2004 19:55:34 -0000	1.62
  +++ ossp-web/pkg/lib/index.wml	13 Jan 2004 20:11:42 -0000	1.63
  @@ -41,7 +41,7 @@
               desc="String Handling"
   			done=95 stable=none unstable=0.9.8>
     <pkg_item name="uuid" longname="OSSP uuid" type="lib"
  -            desc="Universally Unique Identifiers"
  +            desc="Universally Unique Identifier"
   			done=95 stable=none unstable=0.9.1>
     <pkg_item name="l2" longname="OSSP l2" type="lib"
               desc="Flexible Logging"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/uuid/index.wml
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 index.wml
  --- ossp-web/pkg/lib/uuid/index.wml	13 Jan 2004 20:10:30 -0000	1.4
  +++ ossp-web/pkg/lib/uuid/index.wml	13 Jan 2004 20:11:42 -0000	1.5
  @@ -3,7 +3,7 @@
   
   <title>OSSP uuid</title>
   
  -<h1>Universally Unique Identifiers</h1>
  +<h1>Universally Unique Identifier</h1>
   
   <p align=right>
   <table bgcolor="e5e5e0" cellspacing=0 cellpadding=10><tr><td>
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jan 14 13:48:12 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 274C3774C1; Wed, 14 Jan 2004 13:48:12 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT/ modules
Message-Id: <20040114124812.274C3774C1@mail.ossp.org>
Date: Wed, 14 Jan 2004 13:48:12 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: CVSROOT                          Date:   14-Jan-2004 13:48:12
  Branch: HEAD                             Handle: 2004011412481100

  Modified files:
    CVSROOT                 modules

  Log:
    add OSSP uuid

  Summary:
    Revision    Changes     Path
    1.69        +1  -0      CVSROOT/modules
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: CVSROOT/modules
  ============================================================================
  $ cvs diff -u -r1.68 -r1.69 modules
  --- CVSROOT/modules	2 Sep 2003 07:35:41 -0000	1.68
  +++ CVSROOT/modules	14 Jan 2004 12:48:11 -0000	1.69
  @@ -88,6 +88,7 @@
   res             ossp-pkg/res
   ui64            ossp-pkg/ui64
   string-divert   ossp-pkg/string-divert
  +uuid            ossp-pkg/uuid
   
   #   the OSSP applications
   eperl           ossp-pkg/eperl
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jan 14 13:49:00 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EDAFE77396; Wed, 14 Jan 2004 13:48:59 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-doc/ accounts.txt
Message-Id: <20040114124859.EDAFE77396@mail.ossp.org>
Date: Wed, 14 Jan 2004 13:48:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   14-Jan-2004 13:48:59
  Branch: HEAD                             Handle: 2004011412485900

  Modified files:
    ossp-pkg/as/as-doc      accounts.txt

  Log:
    add OSSP uuid

  Summary:
    Revision    Changes     Path
    1.40        +1  -0      ossp-pkg/as/as-doc/accounts.txt
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-doc/accounts.txt
  ============================================================================
  $ cvs diff -u -r1.39 -r1.40 accounts.txt
  --- ossp-pkg/as/as-doc/accounts.txt	8 Dec 2003 11:02:59 -0000	1.39
  +++ ossp-pkg/as/as-doc/accounts.txt	14 Jan 2004 12:48:59 -0000	1.40
  @@ -207,6 +207,7 @@
   R /de/is/dev/prj/ossp/xds                 # [I] Project OSSP xds
   R /de/is/dev/prj/ossp/titraq              # [I] Project OSSP titraq
   R /de/is/dev/prj/ossp/snmpdx              # [I] Project OSSP snmpdx
  +R /de/is/dev/prj/ossp/uuid                # [I] Project OSSP snmpdx
   
   #   AS
   R /de/is/dev/prj/as                       # [I] Project Accounting System (AS) (general)
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jan 14 13:54:08 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5098677396; Wed, 14 Jan 2004 13:54:08 +0100 (CET)
From: "Christoph Schug" <cs@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-doc/ accounts.txt
Message-Id: <20040114125408.5098677396@mail.ossp.org>
Date: Wed, 14 Jan 2004 13:54:08 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Christoph Schug
  Root:   /e/ossp/cvs                      Email:  cs@ossp.org
  Module: ossp-pkg                         Date:   14-Jan-2004 13:54:08
  Branch: HEAD                             Handle: 2004011412540700

  Modified files:
    ossp-pkg/as/as-doc      accounts.txt

  Log:
    new accounts for Manuel

  Summary:
    Revision    Changes     Path
    1.41        +4  -0      ossp-pkg/as/as-doc/accounts.txt
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-doc/accounts.txt
  ============================================================================
  $ cvs diff -u -r1.40 -r1.41 accounts.txt
  --- ossp-pkg/as/as-doc/accounts.txt	14 Jan 2004 12:48:59 -0000	1.40
  +++ ossp-pkg/as/as-doc/accounts.txt	14 Jan 2004 12:54:07 -0000	1.41
  @@ -28,6 +28,10 @@
   R /de/is/com/office/communication         # [I] Office Work, Communication
   R /de/is/com/office/communication/mail    # [I] Office Work, Communication, Mail
   R /de/is/com/office/communication/news    # [I] Office Work, Communication, News (Freshmeat, Heise, etc)
  +R /de/is/com/office/work                  # [I] Office Work, Work in general
  +
  +#   Home Office Work
  +R /de/is/com/homeoffice/work              # [I] Home Office Work, Work in general
   
   #   Trainings
   R /de/is/com/training/prepare             # [I] Training, Preparation (Circular Lesson, Educational Service, etc)  
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jan 14 17:00:37 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B895A7748A; Wed, 14 Jan 2004 17:00:36 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid_cli.pod
Message-Id: <20040114160036.B895A7748A@mail.ossp.org>
Date: Wed, 14 Jan 2004 17:00:36 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   14-Jan-2004 17:00:36
  Branch: HEAD                             Handle: 2004011416003500

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid_cli.pod

  Log:
    Add decoding examples to uuid(1) manual page.

  Summary:
    Revision    Changes     Path
    1.10        +6  -1      ossp-pkg/uuid/ChangeLog
    1.7         +28 -5      ossp-pkg/uuid/uuid_cli.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	13 Jan 2004 19:48:01 -0000	1.9
  +++ ossp-pkg/uuid/ChangeLog	14 Jan 2004 16:00:35 -0000	1.10
  @@ -11,7 +11,12 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 0.9.0 and 0.9.1 (11-Jan-2004 to xx-Jan-2004)
  +  Changes between 0.9.1 and 0.9.2 (13-Jan-2004 to xx-Jan-2004)
  +
  +   o Add decoding examples to uuid(1) manual page.
  +     [Ralf S. Engelschall]
  +
  +  Changes between 0.9.0 and 0.9.1 (11-Jan-2004 to 13-Jan-2004)
   
      o Make "md5_init" and "mac_address" symbols namespace clean
        by adding correct embedding support via "uuid_" prefix.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.pod
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 uuid_cli.pod
  --- ossp-pkg/uuid/uuid_cli.pod	13 Jan 2004 19:43:15 -0000	1.6
  +++ ossp-pkg/uuid/uuid_cli.pod	14 Jan 2004 16:00:35 -0000	1.7
  @@ -123,17 +123,40 @@
   
   =head1 EXAMPLES
   
  - # generate DCE 1.1 variant UUID of version 1 (time and node based)
  + # generate DCE 1.1 v1 UUID (time and node based)
    $ uuid -v1
    1430fcde-43a9-11d8-8000-0090272ff725
   
  - # generate DCE 1.1 variant UUID of version 3 (name based)
  + # decode and dump DCE 1.1 v1 UUID (time and node based)
  + $ uuid -d 1430fcde-43a9-11d8-8000-0090272ff725
  + UUID:    1430fcde-43a9-11d8-8000-0090272ff725
  + variant: DCE 1.1, ISO/IEC 11578:1996
  + version: 1 (time and node based)
  + content: time:  2004-01-10 20:10:47.471843.0 UTC
  +          clock: 0 (usually random)
  +          node:  00:90:27:2f:f7:25 (real unicast)
  +
  + # generate DCE 1.1 v3 UUID (name based)
    $ uuid -v3 URL http://www.ossp.org/
    02d9e6d5-9467-382e-8f9b-9300a64ac3cd
  - 
  - # generate DCE 1.1 variant UUID of version 4 (random data based)
  - $ ./uuid -v4                         
  +
  + # decode and dump DCE 1.1 v3 UUID (name based)
  + $ uuid -d 02d9e6d5-9467-382e-8f9b-9300a64ac3cd
  + UUID:    02d9e6d5-9467-382e-8f9b-9300a64ac3cd
  + variant: DCE 1.1, ISO/IEC 11578:1996
  + version: 3 (name based)
  + content: [not decipherable]
  +
  + # generate DCE 1.1 v4 UUID 4 (random data based)
  + $ uuid -v4                         
    eb424026-6f54-4ef8-a4d0-bb658a1fc6cf
  +
  + # decode and dump DCE 1.1 v4 UUID 4 (random data based)
  + $ uuid -d eb424026-6f54-4ef8-a4d0-bb658a1fc6cf
  + UUID:    eb424026-6f54-4ef8-a4d0-bb658a1fc6cf
  + variant: DCE 1.1, ISO/IEC 11578:1996
  + version: 4 (random data based)
  + content: [no semantics]
   
   =head1 SEE ALSO
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 15 13:32:27 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7A48D7735D; Thu, 15 Jan 2004 13:32:27 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid.c uuid.h
Message-Id: <20040115123227.7A48D7735D@mail.ossp.org>
Date: Thu, 15 Jan 2004 13:32:27 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Jan-2004 13:32:27
  Branch: HEAD                             Handle: 2004011512322600

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid.c uuid.h

  Log:
    Fixed portability by replacing accidentally introduced
    uint{8,16,32}_t with the portable uuid_uint{8,16,32}_t.
    Prefix all variable symbols in uuid.h with underscores
    to avoid namespace conflicts.
    
    Submitted by: Guerry Semones <guerry@tsunamiresearch.com>

  Summary:
    Revision    Changes     Path
    1.11        +8  -0      ossp-pkg/uuid/ChangeLog
    1.24        +3  -3      ossp-pkg/uuid/uuid.c
    1.11        +12 -12     ossp-pkg/uuid/uuid.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	14 Jan 2004 16:00:35 -0000	1.10
  +++ ossp-pkg/uuid/ChangeLog	15 Jan 2004 12:32:26 -0000	1.11
  @@ -13,6 +13,14 @@
   
     Changes between 0.9.1 and 0.9.2 (13-Jan-2004 to xx-Jan-2004)
   
  +   o Fixed portability by replacing accidentally introduced
  +     uint{8,16,32}_t with the portable uuid_uint{8,16,32}_t.
  +     [Guerry Semones <guerry@tsunamiresearch.com>]
  +
  +   o Prefix all variable symbols in uuid.h with underscores
  +     to avoid namespace conflicts.
  +     [Ralf S. Engelschall]
  +
      o Add decoding examples to uuid(1) manual page.
        [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 uuid.c
  --- ossp-pkg/uuid/uuid.c	13 Jan 2004 19:43:14 -0000	1.23
  +++ ossp-pkg/uuid/uuid.c	15 Jan 2004 12:32:26 -0000	1.24
  @@ -760,9 +760,9 @@
   {
       const char *version;
       const char *variant;
  -    uint8_t tmp8;
  -    uint16_t tmp16;
  -    uint32_t tmp32;
  +    uuid_uint8_t tmp8;
  +    uuid_uint16_t tmp16;
  +    uuid_uint32_t tmp32;
       char string[UUID_LEN_STR+1];
       char *s;
       int i;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.h
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 uuid.h
  --- ossp-pkg/uuid/uuid.h	13 Jan 2004 14:35:59 -0000	1.10
  +++ ossp-pkg/uuid/uuid.h	15 Jan 2004 12:32:26 -0000	1.11
  @@ -56,28 +56,28 @@
   typedef struct uuid_st uuid_t;
   
   /* object handling */
  -extern uuid_rc_t  uuid_create   (uuid_t **uuid);
  -extern uuid_rc_t  uuid_destroy  (uuid_t  *uuid);
  -extern uuid_rc_t  uuid_nil      (uuid_t  *uuid);
  +extern uuid_rc_t  uuid_create   (uuid_t **_uuid);
  +extern uuid_rc_t  uuid_destroy  (uuid_t  *_uuid);
  +extern uuid_rc_t  uuid_nil      (uuid_t  *_uuid);
   
   /* UUID comparison */
  -extern uuid_rc_t  uuid_isnil    (uuid_t  *uuid,                int *result);
  -extern uuid_rc_t  uuid_compare  (uuid_t  *uuid, uuid_t *uuid2, int *result);
  +extern uuid_rc_t  uuid_isnil    (uuid_t  *_uuid,                 int *_result);
  +extern uuid_rc_t  uuid_compare  (uuid_t  *_uuid, uuid_t *_uuid2, int *_result);
   
   /* UUID binary representation handling */
  -extern uuid_rc_t  uuid_unpack   (uuid_t  *uuid, const void  *buf);
  -extern uuid_rc_t  uuid_pack     (uuid_t  *uuid,       void **buf);
  +extern uuid_rc_t  uuid_unpack   (uuid_t  *_uuid, const void  *_buf);
  +extern uuid_rc_t  uuid_pack     (uuid_t  *_uuid,       void **_buf);
   
   /* UUID string representation handling */
  -extern uuid_rc_t  uuid_parse    (uuid_t  *uuid, const char  *str);
  -extern uuid_rc_t  uuid_format   (uuid_t  *uuid,       char **str);
  +extern uuid_rc_t  uuid_parse    (uuid_t  *_uuid, const char  *_str);
  +extern uuid_rc_t  uuid_format   (uuid_t  *_uuid,       char **_str);
   
   /* UUID generation and dumping */
  -extern uuid_rc_t  uuid_generate (uuid_t  *uuid, unsigned int mode, ...);
  -extern uuid_rc_t  uuid_dump     (uuid_t  *uuid, char **str);
  +extern uuid_rc_t  uuid_generate (uuid_t  *_uuid, unsigned int _mode, ...);
  +extern uuid_rc_t  uuid_dump     (uuid_t  *_uuid, char **_str);
   
   /* error handling */
  -extern char      *uuid_error    (uuid_rc_t rc);
  +extern char      *uuid_error    (uuid_rc_t _rc);
   
   #endif /* __UUID_H__ */
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 15 13:38:33 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 81CB07735D; Thu, 15 Jan 2004 13:38:33 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid.c uuid_ac.h
Message-Id: <20040115123833.81CB07735D@mail.ossp.org>
Date: Thu, 15 Jan 2004 13:38:33 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Jan-2004 13:38:33
  Branch: HEAD                             Handle: 2004011512383200

  Added files:
    ossp-pkg/uuid           uuid_ac.h
  Modified files:
    ossp-pkg/uuid           ChangeLog uuid.c

  Log:
    Moved uuid_[u]int{8,16,32}_t auto-configuration into
    own internal header uuid_ac.h.

  Summary:
    Revision    Changes     Path
    1.12        +4  -0      ossp-pkg/uuid/ChangeLog
    1.25        +10 -70     ossp-pkg/uuid/uuid.c
    1.1         +96 -0      ossp-pkg/uuid/uuid_ac.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	15 Jan 2004 12:32:26 -0000	1.11
  +++ ossp-pkg/uuid/ChangeLog	15 Jan 2004 12:38:32 -0000	1.12
  @@ -13,6 +13,10 @@
   
     Changes between 0.9.1 and 0.9.2 (13-Jan-2004 to xx-Jan-2004)
   
  +   o Moved uuid_[u]int{8,16,32}_t auto-configuration into
  +     own internal header uuid_ac.h.
  +     [Ralf S. Engelschall]
  +
      o Fixed portability by replacing accidentally introduced
        uint{8,16,32}_t with the portable uuid_uint{8,16,32}_t.
        [Guerry Semones <guerry@tsunamiresearch.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 uuid.c
  --- ossp-pkg/uuid/uuid.c	15 Jan 2004 12:32:26 -0000	1.24
  +++ ossp-pkg/uuid/uuid.c	15 Jan 2004 12:38:32 -0000	1.25
  @@ -27,6 +27,7 @@
   **  uuid.c: library API implementation
   */
   
  +/* system headers */
   #include <stdio.h>
   #include <stdlib.h>
   #include <stdarg.h>
  @@ -39,6 +40,7 @@
   #include <sys/time.h>
   #include <sys/types.h>
   
  +/* own headers */
   #include "config.h"
   #include "uuid.h"
   #include "uuid_md5.h"
  @@ -47,69 +49,7 @@
   #include "uuid_ui64.h"
   #include "uuid_str.h"
   #include "uuid_bm.h"
  -
  -/* determine types of 8-bit size */
  -#if SIZEOF_CHAR == 1
  -typedef char uuid_int8_t;
  -#else
  -#error uexpected: sizeof(char) != 1 !?
  -#endif
  -#if SIZEOF_UNSIGNED_CHAR == 1
  -typedef unsigned char uuid_uint8_t;
  -#else
  -#error uexpected: sizeof(unsigned char) != 1 !?
  -#endif
  -
  -/* determine types of 16-bit size */
  -#if SIZEOF_SHORT == 2
  -typedef short uuid_int16_t;
  -#elif SIZEOF_INT == 2
  -typedef int uuid_int16_t;
  -#elif SIZEOF_LONG == 2
  -typedef long uuid_int16_t;
  -#else
  -#error unexpected: no type found for uuid_int16_t
  -#endif
  -#if SIZEOF_UNSIGNED_SHORT == 2
  -typedef unsigned short uuid_uint16_t;
  -#elif SIZEOF_UNSIGNED_INT == 2
  -typedef unsigned int uuid_uint16_t;
  -#elif SIZEOF_UNSIGNED_LONG == 2
  -typedef unsigned long uuid_uint16_t;
  -#else
  -#error unexpected: no type found for uuid_uint16_t
  -#endif
  -
  -/* determine types of 32-bit size */
  -#if SIZEOF_SHORT == 4
  -typedef short uuid_int32_t;
  -#elif SIZEOF_INT == 4
  -typedef int uuid_int32_t;
  -#elif SIZEOF_LONG == 4
  -typedef long uuid_int32_t;
  -#elif SIZEOF_LONG_LONG == 4
  -typedef long long uuid_int32_t;
  -#else
  -#error unexpected: no type found for uuid_int32_t
  -#endif
  -#if SIZEOF_UNSIGNED_SHORT == 4
  -typedef unsigned short uuid_uint32_t;
  -#elif SIZEOF_UNSIGNED_INT == 4
  -typedef unsigned int uuid_uint32_t;
  -#elif SIZEOF_UNSIGNED_LONG == 4
  -typedef unsigned long uuid_uint32_t;
  -#elif SIZEOF_UNSIGNED_LONG_LONG == 4
  -typedef unsigned long long uuid_uint32_t;
  -#else
  -#error unexpected: no type found for uuid_uint32_t
  -#endif
  -
  -#ifndef FALSE
  -#define FALSE 0
  -#endif
  -#ifndef TRUE
  -#define TRUE !FALSE
  -#endif
  +#include "uuid_ac.h"
   
   /* UUID binary representation according to UUID standards */
   typedef struct {
  @@ -206,10 +146,10 @@
           return UUID_RC_ARG;
   
       /* a "nil UUID" is defined as all octets zero, so check for this case */
  -    *result = TRUE;
  +    *result = UUID_TRUE;
       for (i = 0, ucp = (unsigned char *)&(uuid->obj); i < UUID_LEN_BIN; i++) {
           if (*ucp++ != '\0') {
  -            *result = FALSE;
  +            *result = UUID_FALSE;
               break;
           }
       }
  @@ -376,23 +316,23 @@
          012345678901234567890123456789012345
          0         1         2         3       */
       if (str == NULL)
  -        return FALSE;
  +        return UUID_FALSE;
       if (strlen(str) != UUID_LEN_STR)
  -        return FALSE;
  +        return UUID_FALSE;
       for (i = 0, cp = str; i <= UUID_LEN_STR; i++, cp++) {
           if ((i == 8) || (i == 13) || (i == 18) || (i == 23)) {
               if (*cp == '-')
                   continue;
               else
  -                return FALSE;
  +                return UUID_FALSE;
           }
           if (i == UUID_LEN_STR)
               if (*cp == '\0')
                   continue;
           if (!isxdigit((int)(*cp)))
  -            return FALSE;
  +            return UUID_FALSE;
       }
  -    return TRUE;
  +    return UUID_TRUE;
   }
   
   /* parse string representation into UUID object */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_ac.h
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid_ac.h
  --- /dev/null	2004-01-15 13:38:33.000000000 +0100
  +++ uuid_ac.h	2004-01-15 13:38:33.000000000 +0100
  @@ -0,0 +1,96 @@
  +/*
  +**  OSSP uuid - Universally Unique Identifier
  +**  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +**
  +**  This file is part of OSSP uuid, a library for the generation
  +**  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  uuid_ac.c: auto-configuration
  +*/
  +
  +#ifndef __UUID_AC_H__
  +#define __UUID_AC_H__
  +
  +#include "config.h"
  +
  +/* define boolean values */
  +#define UUID_FALSE 0
  +#define UUID_TRUE  !UUID_FALSE
  +
  +/* determine types of 8-bit size */
  +#if SIZEOF_CHAR == 1
  +typedef char uuid_int8_t;
  +#else
  +#error uexpected: sizeof(char) != 1 !?
  +#endif
  +#if SIZEOF_UNSIGNED_CHAR == 1
  +typedef unsigned char uuid_uint8_t;
  +#else
  +#error uexpected: sizeof(unsigned char) != 1 !?
  +#endif
  +
  +/* determine types of 16-bit size */
  +#if SIZEOF_SHORT == 2
  +typedef short uuid_int16_t;
  +#elif SIZEOF_INT == 2
  +typedef int uuid_int16_t;
  +#elif SIZEOF_LONG == 2
  +typedef long uuid_int16_t;
  +#else
  +#error unexpected: no type found for uuid_int16_t
  +#endif
  +#if SIZEOF_UNSIGNED_SHORT == 2
  +typedef unsigned short uuid_uint16_t;
  +#elif SIZEOF_UNSIGNED_INT == 2
  +typedef unsigned int uuid_uint16_t;
  +#elif SIZEOF_UNSIGNED_LONG == 2
  +typedef unsigned long uuid_uint16_t;
  +#else
  +#error unexpected: no type found for uuid_uint16_t
  +#endif
  +
  +/* determine types of 32-bit size */
  +#if SIZEOF_SHORT == 4
  +typedef short uuid_int32_t;
  +#elif SIZEOF_INT == 4
  +typedef int uuid_int32_t;
  +#elif SIZEOF_LONG == 4
  +typedef long uuid_int32_t;
  +#elif SIZEOF_LONG_LONG == 4
  +typedef long long uuid_int32_t;
  +#else
  +#error unexpected: no type found for uuid_int32_t
  +#endif
  +#if SIZEOF_UNSIGNED_SHORT == 4
  +typedef unsigned short uuid_uint32_t;
  +#elif SIZEOF_UNSIGNED_INT == 4
  +typedef unsigned int uuid_uint32_t;
  +#elif SIZEOF_UNSIGNED_LONG == 4
  +typedef unsigned long uuid_uint32_t;
  +#elif SIZEOF_UNSIGNED_LONG_LONG == 4
  +typedef unsigned long long uuid_uint32_t;
  +#else
  +#error unexpected: no type found for uuid_uint32_t
  +#endif
  +
  +#endif /* __UUID_AC_H__ */
  +
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 15 13:43:53 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EEDC97735D; Thu, 15 Jan 2004 13:43:52 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid.ac
Message-Id: <20040115124352.EEDC97735D@mail.ossp.org>
Date: Thu, 15 Jan 2004 13:43:52 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Jan-2004 13:43:52
  Branch: HEAD                             Handle: 2004011512435200

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid.ac

  Log:
    Cleanup uuid.ac for unused elements.

  Summary:
    Revision    Changes     Path
    1.13        +3  -0      ossp-pkg/uuid/ChangeLog
    1.7         +0  -32     ossp-pkg/uuid/uuid.ac
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	15 Jan 2004 12:38:32 -0000	1.12
  +++ ossp-pkg/uuid/ChangeLog	15 Jan 2004 12:43:52 -0000	1.13
  @@ -13,6 +13,9 @@
   
     Changes between 0.9.1 and 0.9.2 (13-Jan-2004 to xx-Jan-2004)
   
  +   o Cleanup uuid.ac for unused elements.
  +     [Ralf S. Engelschall]
  +
      o Moved uuid_[u]int{8,16,32}_t auto-configuration into
        own internal header uuid_ac.h.
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.ac
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 uuid.ac
  --- ossp-pkg/uuid/uuid.ac	13 Jan 2004 19:43:14 -0000	1.6
  +++ ossp-pkg/uuid/uuid.ac	15 Jan 2004 12:43:52 -0000	1.7
  @@ -27,31 +27,6 @@
   dnl ##  uuid.ac: UUID specific Autoconf checks
   dnl ##
   
  -dnl #   Check for an ANSI C typedef in a header
  -dnl #   configure.in:
  -dnl #     SA_CHECK_TYPEDEF(<typedef>, <header>)
  -dnl #   acconfig.h:
  -dnl #     #undef HAVE_<typedef>
  -
  -AC_DEFUN(SA_CHECK_TYPEDEF,[dnl
  -    AC_REQUIRE([AC_HEADER_STDC])dnl
  -    AC_MSG_CHECKING(for typedef $1)
  -    AC_CACHE_VAL(ac_cv_typedef_$1,[
  -        AC_EGREP_CPP(dnl
  -changequote(<<,>>)dnl
  -<<(^|[^a-zA-Z_0-9])$1[^a-zA-Z_0-9]>>dnl
  -changequote([,]), [
  -#include <$2>],
  -            ac_cv_typedef_$1=yes,
  -            ac_cv_typedef_$1=no
  -        )
  -    ])dnl
  -    AC_MSG_RESULT($ac_cv_typedef_$1)
  -    if test $ac_cv_typedef_$1 = yes; then
  -        AC_DEFINE(HAVE_[]translit($1, [a-z], [A-Z]), 1, [Define to 1 if $1 exists])
  -    fi
  -])
  -
   dnl #   Check for anything OSSP uuid wants to know
   dnl #   configure.in:
   dnl #     UUID_CHECK_ALL
  @@ -64,9 +39,6 @@
       fi
       AC_CHECK_LIB(socket, accept)
   
  -    dnl #   make sure some platforms find their IPv6 library
  -    AC_CHECK_LIB(inet6, getaddrinfo)
  -
       dnl #   check for system headers
       AC_CHECK_HEADERS(sys/types.h sys/param.h sys/time.h sys/socket.h sys/sockio.h sys/ioctl.h)
       AC_CHECK_HEADERS(netdb.h ifaddrs.h net/if.h net/if_dl.h net/if_arp.h netinet/in.h arpa/inet.h,,,
  @@ -97,9 +69,5 @@
       AC_CHECK_SIZEOF(unsigned long, 4)
       AC_CHECK_SIZEOF(long long, 8)
       AC_CHECK_SIZEOF(unsigned long long, 8)
  -
  -    dnl #   check for network/socket size type
  -    SA_CHECK_TYPEDEF(socklen_t, sys/socket.h)
  -    SA_CHECK_TYPEDEF(ssize_t, sys/types.h)
   ])
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 15 13:55:58 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8DF9777311; Thu, 15 Jan 2004 13:55:57 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ .cvsignore ChangeLog Makefile.in uuid-confi...
Message-Id: <20040115125557.8DF9777311@mail.ossp.org>
Date: Thu, 15 Jan 2004 13:55:57 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Jan-2004 13:55:56
  Branch: HEAD                             Handle: 2004011512555103

  Added files:
    ossp-pkg/uuid           uuid-config.pod
  Modified files:
    ossp-pkg/uuid           .cvsignore ChangeLog Makefile.in uuid-config.in
                            uuid.pod uuid_cli.pod

  Log:
    o Added missing manual page uuid-config(1).
    o Fixed output of "uuid-config --version"
    o Fixed typos in uuid.pod

  Summary:
    Revision    Changes     Path
    1.2         +2  -1      ossp-pkg/uuid/.cvsignore
    1.14        +9  -0      ossp-pkg/uuid/ChangeLog
    1.13        +11 -1      ossp-pkg/uuid/Makefile.in
    1.2         +1  -1      ossp-pkg/uuid/uuid-config.in
    1.1         +155 -0     ossp-pkg/uuid/uuid-config.pod
    1.7         +6  -2      ossp-pkg/uuid/uuid.pod
    1.8         +4  -0      ossp-pkg/uuid/uuid_cli.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/.cvsignore
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 .cvsignore
  --- ossp-pkg/uuid/.cvsignore	6 Jan 2004 20:26:59 -0000	1.1
  +++ ossp-pkg/uuid/.cvsignore	15 Jan 2004 12:55:51 -0000	1.2
  @@ -8,6 +8,7 @@
   ltmain.sh
   shtool
   uuid-config
  -uuid.3
  +uuid-config.1
   uuid.1
  +uuid.3
   uuid
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	15 Jan 2004 12:43:52 -0000	1.13
  +++ ossp-pkg/uuid/ChangeLog	15 Jan 2004 12:55:51 -0000	1.14
  @@ -13,6 +13,15 @@
   
     Changes between 0.9.1 and 0.9.2 (13-Jan-2004 to xx-Jan-2004)
   
  +   o Added missing manual page uuid-config(1).
  +     [Ralf S. Engelschall]
  +
  +   o Fixed output of "uuid-config --version"
  +     [Ralf S. Engelschall]
  +
  +   o Fixed typos in uuid.pod
  +     [Ralf S. Engelschall]
  +
      o Cleanup uuid.ac for unused elements.
        [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	13 Jan 2004 19:43:14 -0000	1.12
  +++ ossp-pkg/uuid/Makefile.in	15 Jan 2004 12:55:52 -0000	1.13
  @@ -76,7 +76,7 @@
   $(PRG_NAME): $(PRG_OBJS) $(LIB_NAME)
   	@$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $(PRG_NAME) $(PRG_OBJS) $(LIB_NAME) $(LIBS)
   
  -man: uuid.3 uuid.1
  +man: uuid.3 uuid-config.1 uuid.1
   uuid.3: uuid.pod
   	V1=`$(SHTOOL) version -l txt -d short VERSION`; \
   	V2=`$(SHTOOL) version -l txt -d long VERSION`; \
  @@ -85,6 +85,14 @@
   	           --section=3 --center="Universally Unique Identifier" \
   	           --release="$$D" --date="OSSP uuid $$V1" uuid.pod | \
   	sed -e "s;UUID_VERSION_STR;$$V2;" >uuid.3
  +uuid-config.1: uuid-config.pod
  +	V1=`$(SHTOOL) version -l txt -d short VERSION`; \
  +	V2=`$(SHTOOL) version -l txt -d long VERSION`; \
  +	D=`$(SHTOOL) version -l txt -d long VERSION | sed -e 's;.*(;;' -e 's;).*;;'`; \
  +	$(POD2MAN) --quotes=none \
  +	           --section=3 --center="Universally Unique Identifier" \
  +	           --release="$$D" --date="OSSP uuid $$V1" uuid-config.pod | \
  +	sed -e "s;UUID_VERSION_STR;$$V2;" >uuid-config.1
   uuid.1: uuid_cli.pod
   	V1=`$(SHTOOL) version -l txt -d short VERSION`; \
   	V2=`$(SHTOOL) version -l txt -d long VERSION`; \
  @@ -116,6 +124,7 @@
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man3
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man1
   	$(SHTOOL) install -c -m 755 uuid-config $(DESTDIR)$(bindir)/
  +	$(SHTOOL) install -c -m 644 uuid-config.1 $(DESTDIR)$(mandir)/man1/
   	$(SHTOOL) install -c -m 644 uuid.h $(DESTDIR)$(includedir)/
   	$(SHTOOL) install -c -m 644 uuid.3 $(DESTDIR)$(mandir)/man3/
   	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libuuid.la $(DESTDIR)$(libdir)/
  @@ -128,6 +137,7 @@
   	-@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libuuid.la
   	-$(RM) $(DESTDIR)$(mandir)/man3/uuid.3
   	-$(RM) $(DESTDIR)$(includedir)/uuid.h
  +	-$(RM) $(DESTDIR)$(mandir)/man1/uuid-config.1
   	-$(RM) $(DESTDIR)$(bindir)/uuid-config
   	-$(RMDIR) $(DESTDIR)$(mandir)/man1 >/dev/null 2>&1 || $(TRUE)
   	-$(RMDIR) $(DESTDIR)$(mandir)/man3 >/dev/null 2>&1 || $(TRUE)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid-config.in
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid-config.in
  --- ossp-pkg/uuid/uuid-config.in	6 Jan 2004 20:14:28 -0000	1.1
  +++ ossp-pkg/uuid/uuid-config.in	15 Jan 2004 12:55:53 -0000	1.2
  @@ -45,7 +45,7 @@
   uuid_cflags="@CFLAGS@"
   uuid_ldflags="@LDFLAGS@"
   uuid_libs="@LIBS@"
  -uuid_version="@SA_VERSION_STR@"
  +uuid_version="@UUID_VERSION_STR@"
   
   help=no
   version=no
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid-config.pod
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid-config.pod
  --- /dev/null	2004-01-15 13:55:54.000000000 +0100
  +++ uuid-config.pod	2004-01-15 13:55:55.000000000 +0100
  @@ -0,0 +1,155 @@
  +#!/bin/sh
  +##
  +##  OSSP uuid - Universally Unique Identifier
  +##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP uuid, a library for the generation
  +##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  uuid-config.pod: library build utility manpage
  +##
  +
  +=pod
  +
  +=head1 NAME
  +
  +B<uuid-config> - B<OSSP uuid API build utility>
  +
  +=head1 VERSION
  +
  +OSSP uuid UUID_VERSION_STR
  +
  +=head1 SYNOPSIS
  +
  +B<uuid-config>
  +[B<--help>]
  +[B<--version>]
  +[B<--all>]
  +[B<--prefix>]
  +[B<--exec-prefix>]
  +[B<--bindir>]
  +[B<--libdir>]
  +[B<--includedir>]
  +[B<--mandir>]
  +[B<--datadir>]
  +[B<--acdir>]
  +[B<--cflags>]
  +[B<--ldflags>]
  +[B<--libs>]
  +
  +=head1 DESCRIPTION
  +
  +The B<uuid-config> program is a little helper utility for easy configuring and
  +building applications based on the uuid(3) library.  It can be used to query the
  +C compiler and linker flags which are required to correctly compile and link
  +the application against the uuid(3) library.
  +
  +=head1 OPTIONS
  +
  +B<uuid-config> accepts the following options:
  +
  +=over 2
  +
  +=item B<--help>
  +
  +Prints the short usage information.
  +
  +=item B<--version>
  +
  +Prints the version number and date of the installed uuid(3) library.
  +
  +=item B<--all>
  +
  +Forces the output of all flags, that is, including extra flags which are not
  +B<OSSP uuid> specific.
  +
  +=item B<--prefix>
  +
  +Prints the installation prefix of architecture independent files
  +
  +=item B<--exec-prefix>
  +
  +Prints the installation prefix of architecture dependent files.
  +
  +=item B<--bindir>
  +
  +Prints the installation directory of binaries.
  +
  +=item B<--libdir>
  +
  +Prints the installation directory of libraries.
  +
  +=item B<--includedir>
  +
  +Prints the installation directory of include headers.
  +
  +=item B<--mandir>
  +
  +Prints the installation directory of manual pages.
  +
  +=item B<--datadir>
  +
  +Prints the installation directory of shared data.
  +
  +=item B<--acdir>
  +
  +Prints the installation directory of B<autoconf> data.
  +
  +=item B<--cflags>
  +
  +Prints the C compiler flags which are needed to compile the uuid(3)-based
  +application. The output is usually added to the C<CFLAGS> uuidiable of the
  +applications C<Makefile>.
  +
  +=item B<--ldflags>
  +
  +Prints the linker flags (C<-L>) which are needed to link the application with
  +the uuid(3) library. The output is usually added to the C<LDFLAGS> uuidiable of
  +the applications C<Makefile>.
  +
  +=item B<--libs>
  +
  +Prints the library flags (C<-l>) which are needed to link the application with
  +the C uuid(3) library. The output is usually added to the C<LIBS> uuidiable of the
  +applications C<Makefile>.
  +
  +=back
  +
  +=head1 EXAMPLE
  +
  + CC      = cc
  + CFLAGS  = -O `uuid-config --cflags`
  + LDFLAGS = `uuid-config --ldflags`
  + LIBS    = -lm `uuid-config --libs`
  +
  + all: foo
  + foo: foo.o
  +     $(CC) $(LDFLAGS) -o foo foo.o $(LIBS)
  + foo.o: foo.c
  +     $(CC) $(CFLAGS) -c foo.c
  +
  +=head1 SEE ALSO
  +
  +uuid(3), uuid(1).
  +
  +=cut
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	11 Jan 2004 18:26:56 -0000	1.6
  +++ ossp-pkg/uuid/uuid.pod	15 Jan 2004 12:55:53 -0000	1.7
  @@ -33,6 +33,10 @@
   
   B<OSSP uuid> - B<Universally Unique Identifier>
   
  +=head1 VERSION
  +
  +OSSP uuid UUID_VERSION_STR
  +
   =head1 DESCRIPTION
   
   B<OSSP uuid> is a ISO-C application programming interface (API) and
  @@ -260,7 +264,7 @@
   
   =item char *B<uuid_error>(uuid_rc_t I<rc>);
   
  -Returns a constangt string representation corresponding to the
  +Returns a constant string representation corresponding to the
   return-code I<rc> for use in displaying B<OSSP uuid> errors.
   
   =back
  @@ -285,7 +289,7 @@
   appendix B<Universally Unique Identifier>,
   Open Group Technical Standard
   Document Number C706, August 1997, 737 pages,
  -(supercedes C309 DCE: Remote Procedure Call 8/1994,
  +(supersedes C309 DCE: Remote Procedure Call 8/1994,
   which was basis for ISO/IEC 11578:1996 specification),
   http://www.opengroup.org/publications/catalog/c706.htm 
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.pod
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 uuid_cli.pod
  --- ossp-pkg/uuid/uuid_cli.pod	14 Jan 2004 16:00:35 -0000	1.7
  +++ ossp-pkg/uuid/uuid_cli.pod	15 Jan 2004 12:55:54 -0000	1.8
  @@ -33,6 +33,10 @@
   
   B<OSSP uuid> - B<Universally Unique Identifier Command-Line Tool>
   
  +=head1 VERSION
  +
  +OSSP uuid UUID_VERSION_STR
  +
   =head1 SYNOPSIS
   
   B<uuid>
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 15 13:58:18 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 023D777311; Thu, 15 Jan 2004 13:58:17 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ TODO
Message-Id: <20040115125817.023D777311@mail.ossp.org>
Date: Thu, 15 Jan 2004 13:58:17 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Jan-2004 13:58:17
  Branch: HEAD                             Handle: 2004011512581600

  Modified files:
    ossp-pkg/uuid           TODO

  Log:
    remember issue

  Summary:
    Revision    Changes     Path
    1.9         +1  -1      ossp-pkg/uuid/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/TODO
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 TODO
  --- ossp-pkg/uuid/TODO	13 Jan 2004 19:49:04 -0000	1.8
  +++ ossp-pkg/uuid/TODO	15 Jan 2004 12:58:16 -0000	1.9
  @@ -1,5 +1,5 @@
   TODO
  -- none
  +- in-depth code review
   CANDO
   - more platform support in uuid_mac.c?!
   - global locking according to standard?
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 15 14:02:22 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 19CC17735D; Thu, 15 Jan 2004 14:02:22 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid_ac.h
Message-Id: <20040115130222.19CC17735D@mail.ossp.org>
Date: Thu, 15 Jan 2004 14:02:22 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Jan-2004 14:02:21
  Branch: HEAD                             Handle: 2004011513022100

  Modified files:
    ossp-pkg/uuid           uuid_ac.h

  Log:
    fix typos

  Summary:
    Revision    Changes     Path
    1.2         +2  -2      ossp-pkg/uuid/uuid_ac.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_ac.h
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid_ac.h
  --- ossp-pkg/uuid/uuid_ac.h	15 Jan 2004 12:38:32 -0000	1.1
  +++ ossp-pkg/uuid/uuid_ac.h	15 Jan 2004 13:02:21 -0000	1.2
  @@ -40,12 +40,12 @@
   #if SIZEOF_CHAR == 1
   typedef char uuid_int8_t;
   #else
  -#error uexpected: sizeof(char) != 1 !?
  +#error unexpected: sizeof(char) != 1 !?
   #endif
   #if SIZEOF_UNSIGNED_CHAR == 1
   typedef unsigned char uuid_uint8_t;
   #else
  -#error uexpected: sizeof(unsigned char) != 1 !?
  +#error unexpected: sizeof(unsigned char) != 1 !?
   #endif
   
   /* determine types of 16-bit size */
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 15 14:18:14 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1E75977311; Thu, 15 Jan 2004 14:18:14 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ TODO
Message-Id: <20040115131814.1E75977311@mail.ossp.org>
Date: Thu, 15 Jan 2004 14:18:14 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Jan-2004 14:18:14
  Branch: HEAD                             Handle: 2004011513181300

  Modified files:
    ossp-pkg/uuid           TODO

  Log:
    remember issue

  Summary:
    Revision    Changes     Path
    1.10        +1  -0      ossp-pkg/uuid/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/TODO
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 TODO
  --- ossp-pkg/uuid/TODO	15 Jan 2004 12:58:16 -0000	1.9
  +++ ossp-pkg/uuid/TODO	15 Jan 2004 13:18:13 -0000	1.10
  @@ -1,5 +1,6 @@
   TODO
   - in-depth code review
  +- at least minimum test suite
   CANDO
   - more platform support in uuid_mac.c?!
   - global locking according to standard?
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 15 14:37:54 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B5EEC7735D; Thu, 15 Jan 2004 14:37:54 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.pod
Message-Id: <20040115133754.B5EEC7735D@mail.ossp.org>
Date: Thu, 15 Jan 2004 14:37:54 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Jan-2004 14:37:54
  Branch: HEAD                             Handle: 2004011513375400

  Modified files:
    ossp-pkg/uuid           uuid.pod

  Log:
    use consistent style

  Summary:
    Revision    Changes     Path
    1.8         +8  -8      ossp-pkg/uuid/uuid.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	15 Jan 2004 12:55:53 -0000	1.7
  +++ ossp-pkg/uuid/uuid.pod	15 Jan 2004 13:37:54 -0000	1.8
  @@ -91,14 +91,14 @@
                             <time_high_and_version> "-"
                             <clock_seq_and_reserved>
                             <clock_seq_low> "-" <node>
  - time_low               = 4*<hexOctet>
  - time_mid               = 2*<hexOctet>
  - time_high_and_version  = 2*<hexOctet>
  - clock_seq_and_reserved = <hexOctet>
  - clock_seq_low          = <hexOctet>
  - node                   = 6*<hexOctet>
  - hexOctet               = <hexDigit> <hexDigit>
  - hexDigit =               "0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9"
  + time_low               = 4*<hex_octet>
  + time_mid               = 2*<hex_octet>
  + time_high_and_version  = 2*<hex_octet>
  + clock_seq_and_reserved = <hex_octet>
  + clock_seq_low          = <hex_octet>
  + node                   = 6*<hex_octet>
  + hex_octet              = <hex_digit> <hex_digit>
  + hex_digit              = "0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9"
                            |"a"|"b"|"c"|"d"|"e"|"f"
                            |"A"|"B"|"C"|"D"|"E"|"F"
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 15 14:41:38 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B44007735D; Thu, 15 Jan 2004 14:41:37 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid_bm.h
Message-Id: <20040115134137.B44007735D@mail.ossp.org>
Date: Thu, 15 Jan 2004 14:41:37 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Jan-2004 14:41:37
  Branch: HEAD                             Handle: 2004011513413600

  Modified files:
    ossp-pkg/uuid           uuid_bm.h

  Log:
    remember that the macros use 'int' type implicitly so are 32 bit only

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/uuid/uuid_bm.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_bm.h
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid_bm.h
  --- ossp-pkg/uuid/uuid_bm.h	13 Jan 2004 19:43:14 -0000	1.1
  +++ ossp-pkg/uuid/uuid_bm.h	15 Jan 2004 13:41:36 -0000	1.2
  @@ -31,7 +31,7 @@
   #define __UUID_BM_H__
   
   /*
  - *  Bitmask Calculation Macros
  + *  Bitmask Calculation Macros (up to 32 bit only)
    *  (Notice: bit positions are counted n...0, i.e. lowest bit is position 0)
    */
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 15 14:45:19 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 60C787738F; Thu, 15 Jan 2004 14:45:19 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid.c uuid_cli.c
Message-Id: <20040115134519.60C787738F@mail.ossp.org>
Date: Thu, 15 Jan 2004 14:45:19 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Jan-2004 14:45:19
  Branch: HEAD                             Handle: 2004011513451800

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid.c uuid_cli.c

  Log:
    Use BM_XXX() and str_xxx() APIs throughout internal implementation.

  Summary:
    Revision    Changes     Path
    1.15        +3  -0      ossp-pkg/uuid/ChangeLog
    1.26        +36 -34     ossp-pkg/uuid/uuid.c
    1.10        +4  -0      ossp-pkg/uuid/uuid_cli.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	15 Jan 2004 12:55:51 -0000	1.14
  +++ ossp-pkg/uuid/ChangeLog	15 Jan 2004 13:45:18 -0000	1.15
  @@ -13,6 +13,9 @@
   
     Changes between 0.9.1 and 0.9.2 (13-Jan-2004 to xx-Jan-2004)
   
  +   o Use BM_XXX() and str_xxx() APIs throughout internal implementation.
  +     [Ralf S. Engelschall]
  +
      o Added missing manual page uuid-config(1).
        [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 uuid.c
  --- ossp-pkg/uuid/uuid.c	15 Jan 2004 12:38:32 -0000	1.25
  +++ ossp-pkg/uuid/uuid.c	15 Jan 2004 13:45:18 -0000	1.26
  @@ -51,24 +51,27 @@
   #include "uuid_bm.h"
   #include "uuid_ac.h"
   
  +/* IEEE 802 MAC address octet length */
  +#define MAC_OCTETS 6
  +
   /* UUID binary representation according to UUID standards */
   typedef struct {
  -    uuid_uint32_t   time_low;
  -    uuid_uint16_t   time_mid;
  -    uuid_uint16_t   time_hi_and_version;
  -    uuid_uint8_t    clock_seq_hi_and_reserved;
  -    uuid_uint8_t    clock_seq_low;
  -    uuid_uint8_t    node[6];
  +    uuid_uint32_t  time_low;                  /* bits  0-31 of time field */
  +    uuid_uint16_t  time_mid;                  /* bits 32-47 of time field */
  +    uuid_uint16_t  time_hi_and_version;       /* bits 48-59 of time field plus 4 bit version */
  +    uuid_uint8_t   clock_seq_hi_and_reserved; /* bits  8-13 of clock sequence field plus 2 bit variant */
  +    uuid_uint8_t   clock_seq_low;             /* bits  0-7  of clock sequence field */
  +    uuid_uint8_t   node[MAC_OCTETS];          /* bits  0-47 of node MAC address */
   } uuid_obj_t;
   
   /* abstract data type (ADT) of API */
   struct uuid_st {
  -    uuid_obj_t     obj;       /* inlined UUID object */
  -    prng_t        *prng;      /* RPNG sub-object */
  -    md5_t         *md5;       /* MD5 sub-object */
  -    uuid_uint8_t   mac[6];    /* pre-determined MAC address */
  -    struct timeval time_last; /* last retrieved timestamp */
  -    unsigned long  time_seq;  /* last timestamp sequence counter */
  +    uuid_obj_t     obj;                       /* inlined UUID object */
  +    prng_t        *prng;                      /* RPNG sub-object */
  +    md5_t         *md5;                       /* MD5 sub-object */
  +    uuid_uint8_t   mac[MAC_OCTETS];           /* pre-determined MAC address */
  +    struct timeval time_last;                 /* last retrieved timestamp */
  +    unsigned long  time_seq;                  /* last timestamp sequence counter */
   };
   
   /* create UUID object */
  @@ -94,7 +97,7 @@
       /* resolve MAC address for insertion into node field of UUIDs */
       if (!mac_address((unsigned char *)((*uuid)->mac), sizeof((*uuid)->mac))) {
           memset((*uuid)->mac, '\0', sizeof((*uuid)->mac));
  -        (*uuid)->mac[0] = 0x80;
  +        (*uuid)->mac[0] = BM_OCTET(1,0,0,0,0,0,0,0);
       }
   
       /* initialize time attributes */
  @@ -306,7 +309,7 @@
   }
   
   /* INTERNAL: check for valid UUID string representation syntax */
  -static int uuid_isstr(const char *str)
  +static int uuid_isstr(const char *str, size_t str_len)
   {
       int i;
       const char *cp;
  @@ -317,18 +320,17 @@
          0         1         2         3       */
       if (str == NULL)
           return UUID_FALSE;
  -    if (strlen(str) != UUID_LEN_STR)
  +    if (str_len == 0)
  +        str_len = strlen(str);
  +    if (str_len < UUID_LEN_STR)
           return UUID_FALSE;
  -    for (i = 0, cp = str; i <= UUID_LEN_STR; i++, cp++) {
  +    for (i = 0, cp = str; i < UUID_LEN_STR; i++, cp++) {
           if ((i == 8) || (i == 13) || (i == 18) || (i == 23)) {
               if (*cp == '-')
                   continue;
               else
                   return UUID_FALSE;
           }
  -        if (i == UUID_LEN_STR)
  -            if (*cp == '\0')
  -                continue;
           if (!isxdigit((int)(*cp)))
               return UUID_FALSE;
       }
  @@ -348,7 +350,7 @@
           return UUID_RC_ARG;
   
       /* check for correct UUID string representation syntax */
  -    if (!uuid_isstr(str))
  +    if (!uuid_isstr(str, 0))
           return UUID_RC_ARG;
   
       /* parse hex values of "time" parts */
  @@ -386,7 +388,7 @@
               return UUID_RC_MEM;
   
       /* format UUID into string representation */
  -    sprintf(*str,
  +    str_snprintf(*str, UUID_LEN_STR+1,
           "%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
           (unsigned long)uuid->obj.time_low,
           (unsigned int)uuid->obj.time_mid,
  @@ -407,12 +409,12 @@
   static void uuid_brand(uuid_t *uuid, int version)
   {
       /* set version (as given) */
  -    uuid->obj.time_hi_and_version &= 0x0fff;
  -    uuid->obj.time_hi_and_version |= (((uuid_uint16_t)version & 0x0fff) << 12);
  +    uuid->obj.time_hi_and_version &= BM_MASK(11,0);
  +    uuid->obj.time_hi_and_version |= BM_SHL((uuid_uint16_t)version, 12);
   
       /* set variant (always DCE 1.1 only) */
  -    uuid->obj.clock_seq_hi_and_reserved &= ~((0x03) << 6);
  -    uuid->obj.clock_seq_hi_and_reserved |= (0x02 << 6);
  +    uuid->obj.clock_seq_hi_and_reserved &= BM_MASK(5,0);
  +    uuid->obj.clock_seq_hi_and_reserved |= BM_SHL(0x02, 6);
       return;
   }
   
  @@ -508,7 +510,7 @@
        */
   
       /* retrieve current clock sequence */
  -    clck = ((uuid->obj.clock_seq_hi_and_reserved & ~((0x03) << 6)) << 8)
  +    clck = ((uuid->obj.clock_seq_hi_and_reserved & BM_MASK(5,0)) << 8)
              + uuid->obj.clock_seq_low;
   
       /* generate new random clock sequence (initially or if the
  @@ -520,11 +522,11 @@
           prng_data(uuid->prng, (void *)&clck, sizeof(clck));
       else
           clck++;
  -    clck &= ~((0x03) << 6);
  +    clck &= BM_MASK(5,0);
   
       /* store back new clock sequence */
       uuid->obj.clock_seq_hi_and_reserved =
  -        (uuid->obj.clock_seq_hi_and_reserved & ((0x03) << 6))
  +        (uuid->obj.clock_seq_hi_and_reserved & BM_MASK(7,6))
           | (uuid_uint8_t)((clck >> 8) & 0xff);
       uuid->obj.clock_seq_low =
           (uuid_uint8_t)(clck & 0xff);
  @@ -533,10 +535,10 @@
        *  GENERATE NODE
        */
   
  -    if ((mode & UUID_MCASTRND) || (uuid->mac[0] & 0x80)) {
  +    if ((mode & UUID_MCASTRND) || (uuid->mac[0] & BM_OCTET(1,0,0,0,0,0,0,0))) {
           /* use random multi-cast MAC address */
           prng_data(uuid->prng, (void *)&(uuid->obj.node), sizeof(uuid->obj.node));
  -        uuid->obj.node[0] |= 0x80;
  +        uuid->obj.node[0] |= BM_OCTET(1,0,0,0,0,0,0,0);
       }
       else {
           /* use real regular MAC address */
  @@ -594,7 +596,7 @@
           return UUID_RC_MEM;
   
       /* load the namespace UUID into MD5 context */
  -    if (uuid_isstr(ns)) {
  +    if (uuid_isstr(ns, 0)) {
           /* custom namespace via UUID string representation */
           if ((rc = uuid_create(&uuid_object)) != UUID_RC_OK)
               return rc;
  @@ -745,7 +747,7 @@
   
       /* decode UUID version */
       version = "unknown";
  -    tmp16 = (BM_SHR(uuid->obj.time_hi_and_version, 12) & 0x000f);
  +    tmp16 = (BM_SHR(uuid->obj.time_hi_and_version, 12) & BM_MASK(3,0));
       for (i = 0; i < sizeof(uuid_dectab_version)/sizeof(uuid_dectab_version[0]); i++) {
           if (uuid_dectab_version[i].num == (int)tmp16) {
               version = uuid_dectab_version[i].desc;
  @@ -764,7 +766,7 @@
           /* decode version 1 */
   
           /* decode system time */
  -        t = ui64_rol(ui64_n2i((unsigned long)(uuid->obj.time_hi_and_version & 0x0fff)), 48, NULL),
  +        t = ui64_rol(ui64_n2i((unsigned long)(uuid->obj.time_hi_and_version & BM_MASK(11,0))), 48, NULL),
           t = ui64_or(t, ui64_rol(ui64_n2i((unsigned long)(uuid->obj.time_mid)), 32, NULL));
           t = ui64_or(t, ui64_n2i((unsigned long)(uuid->obj.time_low)));
           offset = ui64_s2i(UUID_TIMEOFFSET, NULL, 16);
  @@ -777,7 +779,7 @@
           str_rsprintf(str, "content: time:  %s.%06d.%d UTC\n", buf, t_usec, t_nsec);
   
           /* decode clock sequence */
  -        tmp32 = ((uuid->obj.clock_seq_hi_and_reserved & ~((0x03) << 6)) << 8)
  +        tmp32 = ((uuid->obj.clock_seq_hi_and_reserved & BM_MASK(5,0)) << 8)
                   + uuid->obj.clock_seq_low;
           str_rsprintf(str, "         clock: %ld (usually random)\n", (unsigned long)tmp32);
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 uuid_cli.c
  --- ossp-pkg/uuid/uuid_cli.c	13 Jan 2004 19:43:14 -0000	1.9
  +++ ossp-pkg/uuid/uuid_cli.c	15 Jan 2004 13:45:18 -0000	1.10
  @@ -146,6 +146,8 @@
               usage("invalid number of arguments");
           if ((rc = uuid_create(&uuid)) != UUID_RC_OK)
               error(1, "uuid_create: %s", uuid_error(rc));
  +        if (strlen(argv[0]) != UUID_LEN_STR)
  +            error(1, "invalid length of UUID string representation");
           if ((rc = uuid_parse(uuid, argv[0])) != UUID_RC_OK)
               error(1, "uuid_parse: %s", uuid_error(rc));
           if ((rc = uuid_dump(uuid, &cp)) != UUID_RC_OK)
  @@ -165,6 +167,8 @@
               error(1, "uuid_create: %s", uuid_error(rc));
           if (argc == 1) {
               /* load initial UUID for setting old generator state */
  +            if (strlen(argv[0]) != UUID_LEN_STR)
  +                error(1, "invalid length of UUID string representation");
               if ((rc = uuid_parse(uuid, argv[0])) != UUID_RC_OK)
                   error(1, "uuid_parse: %s", uuid_error(rc));
           }
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 15 16:29:37 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D8F1A7738F; Thu, 15 Jan 2004 16:29:36 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.c
Message-Id: <20040115152936.D8F1A7738F@mail.ossp.org>
Date: Thu, 15 Jan 2004 16:29:36 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Jan-2004 16:29:36
  Branch: HEAD                             Handle: 2004011515293600

  Modified files:
    ossp-pkg/uuid           uuid.c

  Log:
    fix clock calculation

  Summary:
    Revision    Changes     Path
    1.27        +1  -1      ossp-pkg/uuid/uuid.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 uuid.c
  --- ossp-pkg/uuid/uuid.c	15 Jan 2004 13:45:18 -0000	1.26
  +++ ossp-pkg/uuid/uuid.c	15 Jan 2004 15:29:36 -0000	1.27
  @@ -522,7 +522,7 @@
           prng_data(uuid->prng, (void *)&clck, sizeof(clck));
       else
           clck++;
  -    clck &= BM_MASK(5,0);
  +    clck %= BM_POW2(14);
   
       /* store back new clock sequence */
       uuid->obj.clock_seq_hi_and_reserved =
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 15 16:36:10 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4A4A77735D; Thu, 15 Jan 2004 16:36:10 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ Makefile.in
Message-Id: <20040115153610.4A4A77735D@mail.ossp.org>
Date: Thu, 15 Jan 2004 16:36:10 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Jan-2004 16:36:10
  Branch: HEAD                             Handle: 2004011515360900

  Modified files:
    ossp-pkg/uuid           Makefile.in

  Log:
    add complete list of dependencies

  Summary:
    Revision    Changes     Path
    1.14        +8  -0      ossp-pkg/uuid/Makefile.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	15 Jan 2004 12:55:52 -0000	1.13
  +++ ossp-pkg/uuid/Makefile.in	15 Jan 2004 15:36:09 -0000	1.14
  @@ -76,6 +76,14 @@
   $(PRG_NAME): $(PRG_OBJS) $(LIB_NAME)
   	@$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $(PRG_NAME) $(PRG_OBJS) $(LIB_NAME) $(LIBS)
   
  +uuid.lo: uuid.c config.h uuid.h uuid_md5.h uuid_prng.h uuid_mac.h uuid_ui64.h uuid_str.h uuid_bm.h uuid_ac.h
  +uuid_mac.lo: uuid_mac.c config.h uuid_mac.h
  +uuid_md5.lo: uuid_md5.c uuid_md5.h
  +uuid_prng.lo: uuid_prng.c uuid_prng.h
  +uuid_str.lo: uuid_str.c config.h uuid_str.h
  +uuid_ui64.lo: uuid_ui64.c uuid_ui64.h
  +uuid_cli.o: uuid_cli.c uuid.h
  +
   man: uuid.3 uuid-config.1 uuid.1
   uuid.3: uuid.pod
   	V1=`$(SHTOOL) version -l txt -d short VERSION`; \
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 15 16:36:27 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DFDC67748A; Thu, 15 Jan 2004 16:36:26 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ TODO
Message-Id: <20040115153626.DFDC67748A@mail.ossp.org>
Date: Thu, 15 Jan 2004 16:36:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Jan-2004 16:36:26
  Branch: HEAD                             Handle: 2004011515362600

  Modified files:
    ossp-pkg/uuid           TODO

  Log:
    remember idea and remove already done issue

  Summary:
    Revision    Changes     Path
    1.11        +4  -1      ossp-pkg/uuid/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/TODO
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 TODO
  --- ossp-pkg/uuid/TODO	15 Jan 2004 13:18:13 -0000	1.10
  +++ ossp-pkg/uuid/TODO	15 Jan 2004 15:36:26 -0000	1.11
  @@ -5,6 +5,9 @@
   - more platform support in uuid_mac.c?!
   - global locking according to standard?
   - persistent/non-volatile state writing?
  -- use uuid_bm.h stuff throughout code
   - additional Perl API for covering Perl language
   - additional C API for DCE 1.1 compatibility
  +- unify pack/unpack/parse/format/dump into:
  +  typedef enum { UUID_FMT_BIN, UUID_FMT_STR, UUID_FMT_TXT, UUID_FMT_XML } uuid_fmt_t;
  +  uuid_rc_t uuid_import(uuid_t *_uuid, uuid_fmt_t _fmt, const void  *_buf, size_t _size);
  +  uuid_rc_t uuid_export(uuid_t *_uuid, uuid_fmt_t _fmt,       void **_buf, size_t _size);
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 15 16:36:51 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BFF7C774C8; Thu, 15 Jan 2004 16:36:51 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid_bm.h
Message-Id: <20040115153651.BFF7C774C8@mail.ossp.org>
Date: Thu, 15 Jan 2004 16:36:51 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Jan-2004 16:36:51
  Branch: HEAD                             Handle: 2004011515365100

  Modified files:
    ossp-pkg/uuid           uuid_bm.h

  Log:
    fix implementation bug

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/uuid/uuid_bm.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_bm.h
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid_bm.h
  --- ossp-pkg/uuid/uuid_bm.h	15 Jan 2004 13:41:36 -0000	1.2
  +++ ossp-pkg/uuid/uuid_bm.h	15 Jan 2004 15:36:51 -0000	1.3
  @@ -62,7 +62,7 @@
   
   /* generate the value 2^n */
   #define BM_POW2(n) \
  -    BM_BIT(1,n)
  +    BM_BIT(n,1)
   
   /* shift word w k bits to the left or to the right */
   #define BM_SHL(w,k) \
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 15 16:38:09 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BC02E7735D; Thu, 15 Jan 2004 16:38:09 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.pod uuid_cli.pod
Message-Id: <20040115153809.BC02E7735D@mail.ossp.org>
Date: Thu, 15 Jan 2004 16:38:09 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Jan-2004 16:38:09
  Branch: HEAD                             Handle: 2004011515380900

  Modified files:
    ossp-pkg/uuid           uuid.pod uuid_cli.pod

  Log:
    document uuid_dump function

  Summary:
    Revision    Changes     Path
    1.9         +10 -1      ossp-pkg/uuid/uuid.pod
    1.9         +5  -5      ossp-pkg/uuid/uuid_cli.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	15 Jan 2004 13:37:54 -0000	1.8
  +++ ossp-pkg/uuid/uuid.pod	15 Jan 2004 15:38:09 -0000	1.9
  @@ -260,7 +260,16 @@
   
   =item uuid_rc_t B<uuid_dump>(uuid_t *I<uuid>, char **I<str>);
   
  -FIXME
  +This decodes the loaded UUID in I<uuid> and dumps a textual description
  +into a string buffer which is allocated under C<*>I<str>. The output has
  +the format (for DCE 1.1 v1 UUIDs):
  +
  + UUID:    ab3734b7-4770-11d8-9753-0090272ff725
  + variant: DCE 1.1, ISO/IEC 11578:1996
  + version: 1 (time and node based)
  + content: time:  2004-01-15 15:37:04.186079.1 UTC
  +          clock: 5971 (usually random)
  +          node:  00:90:27:2f:f7:25 (real unicast)
   
   =item char *B<uuid_error>(uuid_rc_t I<rc>);
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.pod
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 uuid_cli.pod
  --- ossp-pkg/uuid/uuid_cli.pod	15 Jan 2004 12:55:54 -0000	1.8
  +++ ossp-pkg/uuid/uuid_cli.pod	15 Jan 2004 15:38:09 -0000	1.9
  @@ -129,15 +129,15 @@
   
    # generate DCE 1.1 v1 UUID (time and node based)
    $ uuid -v1
  - 1430fcde-43a9-11d8-8000-0090272ff725
  + ab3734b7-4770-11d8-9753-0090272ff725
   
    # decode and dump DCE 1.1 v1 UUID (time and node based)
  - $ uuid -d 1430fcde-43a9-11d8-8000-0090272ff725
  - UUID:    1430fcde-43a9-11d8-8000-0090272ff725
  + $ uuid -d ab3734b7-4770-11d8-9753-0090272ff725
  + UUID:    ab3734b7-4770-11d8-9753-0090272ff725
    variant: DCE 1.1, ISO/IEC 11578:1996
    version: 1 (time and node based)
  - content: time:  2004-01-10 20:10:47.471843.0 UTC
  -          clock: 0 (usually random)
  + content: time:  2004-01-15 15:37:04.186079.1 UTC
  +          clock: 5971 (usually random)
             node:  00:90:27:2f:f7:25 (real unicast)
   
    # generate DCE 1.1 v3 UUID (name based)
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 15 16:38:48 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0D6C17735D; Thu, 15 Jan 2004 16:38:48 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog
Message-Id: <20040115153848.0D6C17735D@mail.ossp.org>
Date: Thu, 15 Jan 2004 16:38:48 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Jan-2004 16:38:47
  Branch: HEAD                             Handle: 2004011515384700

  Modified files:
    ossp-pkg/uuid           ChangeLog

  Log:
    remember what was done

  Summary:
    Revision    Changes     Path
    1.16        +6  -0      ossp-pkg/uuid/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	15 Jan 2004 13:45:18 -0000	1.15
  +++ ossp-pkg/uuid/ChangeLog	15 Jan 2004 15:38:47 -0000	1.16
  @@ -13,6 +13,12 @@
   
     Changes between 0.9.1 and 0.9.2 (13-Jan-2004 to xx-Jan-2004)
   
  +   o Added missing documentation for uuid_dump().
  +     [Ralf S. Engelschall]
  +
  +   o Fixed BM_POW2() macro implementation.
  +     [Ralf S. Engelschall]
  +
      o Use BM_XXX() and str_xxx() APIs throughout internal implementation.
        [Ralf S. Engelschall]
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 15 17:22:10 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E65A57738F; Thu, 15 Jan 2004 17:22:09 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid.ac uuid.c
Message-Id: <20040115162209.E65A57738F@mail.ossp.org>
Date: Thu, 15 Jan 2004 17:22:09 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Jan-2004 17:22:09
  Branch: HEAD                             Handle: 2004011516220900

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid.ac uuid.c

  Log:
    Provide both incorrect RFC2518-based and correct IEEE 802
    multicast address generation. The default now is the correct
    IEEE 802 multicast address generation but compile-time option
    --with-rfc2518 selects the broken variant.

  Summary:
    Revision    Changes     Path
    1.17        +9  -0      ossp-pkg/uuid/ChangeLog
    1.8         +8  -0      ossp-pkg/uuid/uuid.ac
    1.28        +65 -4      ossp-pkg/uuid/uuid.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	15 Jan 2004 15:38:47 -0000	1.16
  +++ ossp-pkg/uuid/ChangeLog	15 Jan 2004 16:22:09 -0000	1.17
  @@ -13,6 +13,15 @@
   
     Changes between 0.9.1 and 0.9.2 (13-Jan-2004 to xx-Jan-2004)
   
  +   o Provide both incorrect RFC2518-based and correct IEEE 802
  +     multicast address generation. The default now is the correct
  +     IEEE 802 multicast address generation but compile-time option
  +     --with-rfc2518 selects the broken variant.
  +     [Ralf S. Engelschall]
  +
  +   o Decode also the IEEE 802 MAC address local/global bit.
  +     [Ralf S. Engelschall]
  +
      o Added missing documentation for uuid_dump().
        [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.ac
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 uuid.ac
  --- ossp-pkg/uuid/uuid.ac	15 Jan 2004 12:43:52 -0000	1.7
  +++ ossp-pkg/uuid/uuid.ac	15 Jan 2004 16:22:09 -0000	1.8
  @@ -69,5 +69,13 @@
       AC_CHECK_SIZEOF(unsigned long, 4)
       AC_CHECK_SIZEOF(long long, 8)
       AC_CHECK_SIZEOF(unsigned long long, 8)
  +
  +    dnl #   options
  +    AC_ARG_WITH(rfc2518,
  +        AC_HELP_STRING([--with-rfc2518], [use incorrect generation of IEEE 802 multicast addresses according to RFC2518]),
  +        [ac_cv_with_rfc2518=$withval], [ac_cv_with_rfc2518=no])
  +    if test ".$ac_cv_with_rfc2518" == .yes; then
  +        AC_DEFINE(WITH_RFC2518, 1, [whether to use incorrect generation of IEEE 802 multicast addresses according to RFC2518])
  +    fi
   ])
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 uuid.c
  --- ossp-pkg/uuid/uuid.c	15 Jan 2004 15:29:36 -0000	1.27
  +++ ossp-pkg/uuid/uuid.c	15 Jan 2004 16:22:09 -0000	1.28
  @@ -427,6 +427,65 @@
       Unix UTC base time is January  1, 1970) */
   #define UUID_TIMEOFFSET "01B21DD213814000"
   
  +/*
  + * ATTENTION:
  + *
  + * In case no real/physical IEEE 802 address is available, both
  + * "draft-leach-uuids-guids-01" (section "4. Node IDs when no IEEE 802
  + * network card is available") and RFC 2518 (section "6.4.1 Node Field
  + * Generation Without the IEEE 802 Address") recommend (quoted from RFC
  + * 2518):
  + *
  + * "The ideal solution is to obtain a 47 bit cryptographic quality
  + * random number, and use it as the low 47 bits of the node ID, with the
  + * most significant bit of the first octet of the node ID set to 1. This
  + * bit is the unicast/multicast bit, which will never be set in IEEE 802
  + * addresses obtained from network cards; hence, there can never be a
  + * conflict between UUIDs generated by machines with and without network
  + * cards."
  + *
  + * This clearly explains what the intention is. Unfortunately, it
  + * explains it incorrectly how to achieve this. Because (see also
  + * http://www.iana.org/assignments/ethernet-numbers and "Understanding
  + * Physical Addresses" in "Ethernet -- The Definitive Guide", p.43) it
  + * is the "LEAST significant bit of the first octet of the node ID" in a
  + * memory representation of a 48-bit MAC address. The reason is that it
  + * is the MOST significant bit only in IEEE 802.3 _transmission order_
  + * of a MAC address. The memory order of an octet from a MAC address is
  + * always with the bits from left/MSB/bit-7 to right/LSB/bit-0!
  + *
  + * Unfortunately, even the reference code in
  + * "draft-leach-uuids-guids-01" incorrectly sets the multicast bit with
  + * an "OR 0x80" bit operation. This could be considered "standards
  + * compliant" (because the exact wording above is "with the most
  + * significant bit"), but from the remaining explanation it becomes 100%
  + * clear that the intention was different and the wording and code was
  + * incorrect because the authors were unaware of this difference in bit
  + * ordering between memory and wire transmission.
  + *
  + * So, OSSP uuid does it the intended/correct way and generates a real
  + * IEEE 802 multicast address, but with a compile-time option one can
  + * nevertheless enforce the generation of incorrect addresses according
  + * to the standards. For the decoding we always use the correct way, of
  + * course.
  + *
  + * Luckily, both DCE 1.1 and ISO/IEC 11578:1996 do not deal with the
  + * situation of not available IEEE 802 addresses at all and so have
  + * avoided to adopt this bug from the original draft and code ;-)
  + */
  +
  +/* encoding */
  +#ifdef WITH_RFC2518
  +#define IEEE_MAC_MCBIT_ENC BM_OCTET(1,0,0,0,0,0,0,0)
  +#else
  +#define IEEE_MAC_MCBIT_ENC BM_OCTET(0,0,0,0,0,0,0,1)
  +#endif
  +#define IEEE_MAC_LOBIT_ENC BM_OCTET(0,0,0,0,0,0,1,0)
  +
  +/* decoding */
  +#define IEEE_MAC_MCBIT_DEC BM_OCTET(0,0,0,0,0,0,0,1)
  +#define IEEE_MAC_LOBIT_DEC BM_OCTET(0,0,0,0,0,0,1,0)
  +
   /* INTERNAL: generate UUID version 1: time, clock and node based */
   static uuid_rc_t uuid_generate_v1(uuid_t *uuid, unsigned int mode, va_list ap)
   {
  @@ -536,9 +595,10 @@
        */
   
       if ((mode & UUID_MCASTRND) || (uuid->mac[0] & BM_OCTET(1,0,0,0,0,0,0,0))) {
  -        /* use random multi-cast MAC address */
  +        /* generate random IEEE 802 local multicast MAC address */
           prng_data(uuid->prng, (void *)&(uuid->obj.node), sizeof(uuid->obj.node));
  -        uuid->obj.node[0] |= BM_OCTET(1,0,0,0,0,0,0,0);
  +        uuid->obj.node[0] |= IEEE_MAC_MCBIT_ENC;
  +        uuid->obj.node[0] |= IEEE_MAC_LOBIT_ENC;
       }
       else {
           /* use real regular MAC address */
  @@ -784,14 +844,15 @@
           str_rsprintf(str, "         clock: %ld (usually random)\n", (unsigned long)tmp32);
   
           /* decode node MAC address */
  -        str_rsprintf(str, "         node:  %02x:%02x:%02x:%02x:%02x:%02x (%s)\n",
  +        str_rsprintf(str, "         node:  %02x:%02x:%02x:%02x:%02x:%02x (%s %s)\n",
               (unsigned int)uuid->obj.node[0],
               (unsigned int)uuid->obj.node[1],
               (unsigned int)uuid->obj.node[2],
               (unsigned int)uuid->obj.node[3],
               (unsigned int)uuid->obj.node[4],
               (unsigned int)uuid->obj.node[5],
  -            (uuid->obj.node[0] & 0x80 ? "random multicast" : "real unicast"));
  +            (uuid->obj.node[0] & IEEE_MAC_LOBIT_DEC ? "local" : "global"),
  +            (uuid->obj.node[0] & IEEE_MAC_MCBIT_DEC ? "multicast" : "unicast"));
       }
       else if (tmp16 == 3) {
           /* decode version 3 */
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 15 17:23:35 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 632A07738F; Thu, 15 Jan 2004 17:23:35 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.pod uuid_cli.pod
Message-Id: <20040115162335.632A07738F@mail.ossp.org>
Date: Thu, 15 Jan 2004 17:23:35 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Jan-2004 17:23:35
  Branch: HEAD                             Handle: 2004011516233400

  Modified files:
    ossp-pkg/uuid           uuid.pod uuid_cli.pod

  Log:
    use new sample UUIDs with new output

  Summary:
    Revision    Changes     Path
    1.10        +4  -4      ossp-pkg/uuid/uuid.pod
    1.10        +6  -6      ossp-pkg/uuid/uuid_cli.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	15 Jan 2004 15:38:09 -0000	1.9
  +++ ossp-pkg/uuid/uuid.pod	15 Jan 2004 16:23:34 -0000	1.10
  @@ -264,12 +264,12 @@
   into a string buffer which is allocated under C<*>I<str>. The output has
   the format (for DCE 1.1 v1 UUIDs):
   
  - UUID:    ab3734b7-4770-11d8-9753-0090272ff725
  + UUID:    01c47915-4777-11d8-bc70-0090272ff725
    variant: DCE 1.1, ISO/IEC 11578:1996
    version: 1 (time and node based)
  - content: time:  2004-01-15 15:37:04.186079.1 UTC
  -          clock: 5971 (usually random)
  -          node:  00:90:27:2f:f7:25 (real unicast)
  + content: time:  2004-01-15 16:22:26.376322.1 UTC
  +          clock: 15472 (usually random)
  +          node:  00:90:27:2f:f7:25 (global unicast)
   
   =item char *B<uuid_error>(uuid_rc_t I<rc>);
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.pod
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 uuid_cli.pod
  --- ossp-pkg/uuid/uuid_cli.pod	15 Jan 2004 15:38:09 -0000	1.9
  +++ ossp-pkg/uuid/uuid_cli.pod	15 Jan 2004 16:23:34 -0000	1.10
  @@ -129,16 +129,16 @@
   
    # generate DCE 1.1 v1 UUID (time and node based)
    $ uuid -v1
  - ab3734b7-4770-11d8-9753-0090272ff725
  + 01c47915-4777-11d8-bc70-0090272ff725
   
    # decode and dump DCE 1.1 v1 UUID (time and node based)
  - $ uuid -d ab3734b7-4770-11d8-9753-0090272ff725
  - UUID:    ab3734b7-4770-11d8-9753-0090272ff725
  + $ uuid -d 01c47915-4777-11d8-bc70-0090272ff725
  + UUID:    01c47915-4777-11d8-bc70-0090272ff725
    variant: DCE 1.1, ISO/IEC 11578:1996
    version: 1 (time and node based)
  - content: time:  2004-01-15 15:37:04.186079.1 UTC
  -          clock: 5971 (usually random)
  -          node:  00:90:27:2f:f7:25 (real unicast)
  + content: time:  2004-01-15 16:22:26.376322.1 UTC
  +          clock: 15472 (usually random)
  +          node:  00:90:27:2f:f7:25 (global unicast)
   
    # generate DCE 1.1 v3 UUID (name based)
    $ uuid -v3 URL http://www.ossp.org/
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 15 18:24:59 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 544087738F; Thu, 15 Jan 2004 18:24:57 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.c
Message-Id: <20040115172457.544087738F@mail.ossp.org>
Date: Thu, 15 Jan 2004 18:24:57 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   15-Jan-2004 18:24:57
  Branch: HEAD                             Handle: 2004011517245600

  Modified files:
    ossp-pkg/uuid           uuid.c

  Log:
    Fix grammar and improve usage.

  Summary:
    Revision    Changes     Path
    1.29        +13 -13     ossp-pkg/uuid/uuid.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 uuid.c
  --- ossp-pkg/uuid/uuid.c	15 Jan 2004 16:22:09 -0000	1.28
  +++ ossp-pkg/uuid/uuid.c	15 Jan 2004 17:24:56 -0000	1.29
  @@ -444,34 +444,34 @@
    * conflict between UUIDs generated by machines with and without network
    * cards."
    *
  - * This clearly explains what the intention is. Unfortunately, it
  - * explains it incorrectly how to achieve this. Because (see also
  + * This clearly explains the intention. Unfortunately, it incorrectly
  + * explains how to achieve it. Because (see also
    * http://www.iana.org/assignments/ethernet-numbers and "Understanding
    * Physical Addresses" in "Ethernet -- The Definitive Guide", p.43) it
    * is the "LEAST significant bit of the first octet of the node ID" in a
    * memory representation of a 48-bit MAC address. The reason is that it
    * is the MOST significant bit only in IEEE 802.3 _transmission order_
  - * of a MAC address. The memory order of an octet from a MAC address is
  - * always with the bits from left/MSB/bit-7 to right/LSB/bit-0!
  + * of a MAC address. The bitwise memory order of a MAC address octet is
  + * always from left/MSB/bit-7 to right/LSB/bit-0!
    *
    * Unfortunately, even the reference code in
    * "draft-leach-uuids-guids-01" incorrectly sets the multicast bit with
    * an "OR 0x80" bit operation. This could be considered "standards
    * compliant" (because the exact wording above is "with the most
  - * significant bit"), but from the remaining explanation it becomes 100%
  + * significant bit"). However, from the remaining explanation it becomes 100%
    * clear that the intention was different and the wording and code was
  - * incorrect because the authors were unaware of this difference in bit
  + * incorrect. The authors were likely unaware of this difference in bit
    * ordering between memory and wire transmission.
    *
  - * So, OSSP uuid does it the intended/correct way and generates a real
  - * IEEE 802 multicast address, but with a compile-time option one can
  - * nevertheless enforce the generation of incorrect addresses according
  - * to the standards. For the decoding we always use the correct way, of
  + * By default, OSSP uuid works the intended/correct way and generates a real
  + * IEEE 802 multicast address. Nevertheless, a compile-time option exists
  + * for the generation of incorrect addresses according
  + * to the standards. For the decoding we always use the correct way of
    * course.
    *
  - * Luckily, both DCE 1.1 and ISO/IEC 11578:1996 do not deal with the
  - * situation of not available IEEE 802 addresses at all and so have
  - * avoided to adopt this bug from the original draft and code ;-)
  + * Luckily, neither DCE 1.1 nor ISO/IEC 11578:1996 are affected by this problem.
  + * They disregard the topic of missing IEEE 802 addresses entirely, and thus
  + * avoid adopting this bug from the original draft and code ;-)
    */
   
   /* encoding */
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 15 18:39:41 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 85E837735D; Thu, 15 Jan 2004 18:39:41 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.c
Message-Id: <20040115173941.85E837735D@mail.ossp.org>
Date: Thu, 15 Jan 2004 18:39:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   15-Jan-2004 18:39:41
  Branch: HEAD                             Handle: 2004011517394000

  Modified files:
    ossp-pkg/uuid           uuid.c

  Log:
    Correct grammar and improve clarity.

  Summary:
    Revision    Changes     Path
    1.30        +4  -5      ossp-pkg/uuid/uuid.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 uuid.c
  --- ossp-pkg/uuid/uuid.c	15 Jan 2004 17:24:56 -0000	1.29
  +++ ossp-pkg/uuid/uuid.c	15 Jan 2004 17:39:40 -0000	1.30
  @@ -445,12 +445,11 @@
    * cards."
    *
    * This clearly explains the intention. Unfortunately, it incorrectly
  - * explains how to achieve it. Because (see also
  - * http://www.iana.org/assignments/ethernet-numbers and "Understanding
  - * Physical Addresses" in "Ethernet -- The Definitive Guide", p.43) it
  + * explains how to achieve it. Both http://www.iana.org/assignments/ethernet-numbers and "Understanding
  + * Physical Addresses" in "Ethernet -- The Definitive Guide", p.43 state that the unicast/multicast bit
    * is the "LEAST significant bit of the first octet of the node ID" in a
  - * memory representation of a 48-bit MAC address. The reason is that it
  - * is the MOST significant bit only in IEEE 802.3 _transmission order_
  + * memory representation of a 48-bit MAC address. However, this unicast/multicast bit
  + * is the MOST significant bit in the IEEE 802.3 _transmission order_
    * of a MAC address. The bitwise memory order of a MAC address octet is
    * always from left/MSB/bit-7 to right/LSB/bit-0!
    *
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 15 20:19:50 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7AF837738F; Thu, 15 Jan 2004 20:19:50 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.c
Message-Id: <20040115191950.7AF837738F@mail.ossp.org>
Date: Thu, 15 Jan 2004 20:19:50 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Jan-2004 20:19:50
  Branch: HEAD                             Handle: 2004011519194900

  Modified files:
    ossp-pkg/uuid           uuid.c

  Log:
    after solving the conflicts with Michael's fixes, this is my cleaned
    up version. Feel free to fix the grammar again if I introduced new
    problems. But I wanted to refactor the text a little bit now.

  Summary:
    Revision    Changes     Path
    1.31        +52 -45     ossp-pkg/uuid/uuid.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 uuid.c
  --- ossp-pkg/uuid/uuid.c	15 Jan 2004 17:39:40 -0000	1.30
  +++ ossp-pkg/uuid/uuid.c	15 Jan 2004 19:19:49 -0000	1.31
  @@ -427,51 +427,58 @@
       Unix UTC base time is January  1, 1970) */
   #define UUID_TIMEOFFSET "01B21DD213814000"
   
  -/*
  - * ATTENTION:
  - *
  - * In case no real/physical IEEE 802 address is available, both
  - * "draft-leach-uuids-guids-01" (section "4. Node IDs when no IEEE 802
  - * network card is available") and RFC 2518 (section "6.4.1 Node Field
  - * Generation Without the IEEE 802 Address") recommend (quoted from RFC
  - * 2518):
  - *
  - * "The ideal solution is to obtain a 47 bit cryptographic quality
  - * random number, and use it as the low 47 bits of the node ID, with the
  - * most significant bit of the first octet of the node ID set to 1. This
  - * bit is the unicast/multicast bit, which will never be set in IEEE 802
  - * addresses obtained from network cards; hence, there can never be a
  - * conflict between UUIDs generated by machines with and without network
  - * cards."
  - *
  - * This clearly explains the intention. Unfortunately, it incorrectly
  - * explains how to achieve it. Both http://www.iana.org/assignments/ethernet-numbers and "Understanding
  - * Physical Addresses" in "Ethernet -- The Definitive Guide", p.43 state that the unicast/multicast bit
  - * is the "LEAST significant bit of the first octet of the node ID" in a
  - * memory representation of a 48-bit MAC address. However, this unicast/multicast bit
  - * is the MOST significant bit in the IEEE 802.3 _transmission order_
  - * of a MAC address. The bitwise memory order of a MAC address octet is
  - * always from left/MSB/bit-7 to right/LSB/bit-0!
  - *
  - * Unfortunately, even the reference code in
  - * "draft-leach-uuids-guids-01" incorrectly sets the multicast bit with
  - * an "OR 0x80" bit operation. This could be considered "standards
  - * compliant" (because the exact wording above is "with the most
  - * significant bit"). However, from the remaining explanation it becomes 100%
  - * clear that the intention was different and the wording and code was
  - * incorrect. The authors were likely unaware of this difference in bit
  - * ordering between memory and wire transmission.
  - *
  - * By default, OSSP uuid works the intended/correct way and generates a real
  - * IEEE 802 multicast address. Nevertheless, a compile-time option exists
  - * for the generation of incorrect addresses according
  - * to the standards. For the decoding we always use the correct way of
  - * course.
  - *
  - * Luckily, neither DCE 1.1 nor ISO/IEC 11578:1996 are affected by this problem.
  - * They disregard the topic of missing IEEE 802 addresses entirely, and thus
  - * avoid adopting this bug from the original draft and code ;-)
  - */
  +/* IEEE 802 MAC address encoding/decoding bit fields
  +
  +   ATTENTION:
  +
  +   In case no real/physical IEEE 802 address is available, both
  +   "draft-leach-uuids-guids-01" (section "4. Node IDs when no IEEE 802
  +   network card is available") and RFC 2518 (section "6.4.1 Node Field
  +   Generation Without the IEEE 802 Address") recommend (quoted from RFC
  +   2518):
  +
  +     "The ideal solution is to obtain a 47 bit cryptographic quality
  +     random number, and use it as the low 47 bits of the node ID, with
  +     the most significant bit of the first octet of the node ID set to
  +     1. This bit is the unicast/multicast bit, which will never be set
  +     in IEEE 802 addresses obtained from network cards; hence, there can
  +     never be a conflict between UUIDs generated by machines with and
  +     without network cards."
  +
  +   This clearly explains that the intention is to use IEEE 802 multicast
  +   addresses. Unfortunately, it incorrectly explains how to implement
  +   this! It actually is the "*LEAST* significant bit of the first octet
  +   of the node ID" in a memory and hexadecimal string representation of
  +   a 48-bit IEEE 802 MAC address.
  +
  +   Unfortunately, even the reference implementation included in the
  +   expired IETF "draft-leach-uuids-guids-01" incorrectly set the
  +   multicast bit with an OR bit operation and an incorrect mask of
  +   0x80. Hence, multiple other UUID implementations can be found on the
  +   Internet which inherited this bug.
  +
  +   Luckily, neither DCE 1.1 nor ISO/IEC 11578:1996 are affected by this
  +   problem. They disregard the topic of missing IEEE 802 addresses
  +   entirely, and thus avoid adopting this bug from the original draft
  +   and code ;-)
  +
  +   The reason for the bug in the standards seems to be that the
  +   multicast bit actually is the *MOST* significant bit in IEEE 802.3
  +   (Ethernet) _transmission order_ of an IEEE 802 MAC address. The
  +   authors seem to be confused by this and especially were not aware
  +   that the bitwise order of an octet from a MAC address memory and
  +   hexadecimal string representation is still always from left (MSB, bit
  +   7) to right (LSB, bit 0).
  +
  +   For more information on this, see especially "Understanding
  +   Physical Addresses" in "Ethernet -- The Definitive Guide",
  +   p.43, and section "ETHERNET MULTICAST ADDRESSES" in
  +   http://www.iana.org/assignments/ethernet-numbers.
  +
  +   Hence, we do it the intended/correct way and generate a real IEEE 802
  +   multicast address, but with a brain-dead compile-time option one can
  +   nevertheless enforce the broken generation of IEEE 802 MAC addresses.
  +   For the decoding we always use the correct way, of course. */
   
   /* encoding */
   #ifdef WITH_RFC2518
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 15 20:23:52 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C98C77747F; Thu, 15 Jan 2004 20:23:51 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog README VERSION
Message-Id: <20040115192351.C98C77747F@mail.ossp.org>
Date: Thu, 15 Jan 2004 20:23:51 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Jan-2004 20:23:51
  Branch: HEAD                             Handle: 2004011519235100

  Modified files:
    ossp-pkg/uuid           ChangeLog README VERSION

  Log:
    bump version for release

  Summary:
    Revision    Changes     Path
    1.18        +1  -1      ossp-pkg/uuid/ChangeLog
    1.8         +1  -1      ossp-pkg/uuid/README
    1.5         +1  -1      ossp-pkg/uuid/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	15 Jan 2004 16:22:09 -0000	1.17
  +++ ossp-pkg/uuid/ChangeLog	15 Jan 2004 19:23:51 -0000	1.18
  @@ -11,7 +11,7 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 0.9.1 and 0.9.2 (13-Jan-2004 to xx-Jan-2004)
  +  Changes between 0.9.1 and 0.9.2 (13-Jan-2004 to 15-Jan-2004)
   
      o Provide both incorrect RFC2518-based and correct IEEE 802
        multicast address generation. The default now is the correct
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 README
  --- ossp-pkg/uuid/README	13 Jan 2004 19:50:20 -0000	1.7
  +++ ossp-pkg/uuid/README	15 Jan 2004 19:23:51 -0000	1.8
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
   
     OSSP uuid - Universally Unique Identifier
  -  Version 0.9.1 (13-Jan-2004)
  +  Version 0.9.2 (15-Jan-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/VERSION
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 VERSION
  --- ossp-pkg/uuid/VERSION	13 Jan 2004 19:50:20 -0000	1.4
  +++ ossp-pkg/uuid/VERSION	15 Jan 2004 19:23:51 -0000	1.5
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP uuid (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP uuid, Version 0.9.1 (13-Jan-2004)
  +  This is OSSP uuid, Version 0.9.2 (15-Jan-2004)
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 15 20:28:14 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8920D7738F; Thu, 15 Jan 2004 20:28:14 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20040115192814.8920D7738F@mail.ossp.org>
Date: Thu, 15 Jan 2004 20:28:14 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   15-Jan-2004 20:28:14
  Branch: HEAD                             Handle: 2004011519281201

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/uuid   index.wml

  Log:
    release OSSP uuid 0.9.2

  Summary:
    Revision    Changes     Path
    1.70        +1  -0      ossp-web/new/news.txt
    1.64        +1  -1      ossp-web/pkg/lib/index.wml
    1.6         +3  -3      ossp-web/pkg/lib/uuid/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.69 -r1.70 news.txt
  --- ossp-web/new/news.txt	13 Jan 2004 19:55:34 -0000	1.69
  +++ ossp-web/new/news.txt	15 Jan 2004 19:28:12 -0000	1.70
  @@ -1,3 +1,4 @@
  +15-Jan-2004: Released L<OSSP uuid> 0.9.2
   13-Jan-2004: Released L<OSSP uuid> 0.9.1
   11-Jan-2004: Released L<OSSP uuid> 0.9.0
   10-Nov-2003: Released L<OSSP sa> 1.1.0
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.63 -r1.64 index.wml
  --- ossp-web/pkg/lib/index.wml	13 Jan 2004 20:11:42 -0000	1.63
  +++ ossp-web/pkg/lib/index.wml	15 Jan 2004 19:28:13 -0000	1.64
  @@ -42,7 +42,7 @@
   			done=95 stable=none unstable=0.9.8>
     <pkg_item name="uuid" longname="OSSP uuid" type="lib"
               desc="Universally Unique Identifier"
  -			done=95 stable=none unstable=0.9.1>
  +			done=95 stable=none unstable=0.9.2>
     <pkg_item name="l2" longname="OSSP l2" type="lib"
               desc="Flexible Logging"
   			done=95 stable=none unstable=0.9.5>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/uuid/index.wml
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 index.wml
  --- ossp-web/pkg/lib/uuid/index.wml	13 Jan 2004 20:11:42 -0000	1.5
  +++ ossp-web/pkg/lib/uuid/index.wml	15 Jan 2004 19:28:13 -0000	1.6
  @@ -3,7 +3,7 @@
   
   <title>OSSP uuid</title>
   
  -<h1>Universally Unique Identifier</h1>
  +<h1>Universally Unique Identifier (UUID)</h1>
   
   <p align=right>
   <table bgcolor="e5e5e0" cellspacing=0 cellpadding=10><tr><td>
  @@ -44,7 +44,7 @@
   <pkg_status
       name="uuid" assign="rse"
       stable="none"    stable_date="none"
  -    unstable="0.9.1" unstable_date="13-Jan-2004"
  +    unstable="0.9.2" unstable_date="15-Jan-2004"
   	done=95>
   
   <h2>Source</h2>
  @@ -54,7 +54,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/uuid/
       directory=$(FTP_ROOT_DIR)/pkg/lib/uuid/
       files="uuid-*.tar.gz" 
  -	stable="uuid-0\.9\.1\.tar\.gz" unstable="uuid-SNAP.*\.tar.gz">
  +	stable="uuid-0\.9\.2\.tar\.gz" unstable="uuid-SNAP.*\.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 15 21:26:25 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 942777738F; Thu, 15 Jan 2004 21:26:20 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid-config.in
Message-Id: <20040115202620.942777738F@mail.ossp.org>
Date: Thu, 15 Jan 2004 21:26:20 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Jan-2004 21:26:20
  Branch: HEAD                             Handle: 2004011520261800

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid-config.in

  Log:
    ops, one more 'sa' left over from copy & paste

  Summary:
    Revision    Changes     Path
    1.19        +4  -0      ossp-pkg/uuid/ChangeLog
    1.3         +1  -1      ossp-pkg/uuid/uuid-config.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	15 Jan 2004 19:23:51 -0000	1.18
  +++ ossp-pkg/uuid/ChangeLog	15 Jan 2004 20:26:18 -0000	1.19
  @@ -11,6 +11,10 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 0.9.2 and 0.9.3 (15-Jan-2004 to xx-Jan-2004)
  +
  +   o ...
  +
     Changes between 0.9.1 and 0.9.2 (13-Jan-2004 to 15-Jan-2004)
   
      o Provide both incorrect RFC2518-based and correct IEEE 802
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid-config.in
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid-config.in
  --- ossp-pkg/uuid/uuid-config.in	15 Jan 2004 12:55:53 -0000	1.2
  +++ ossp-pkg/uuid/uuid-config.in	15 Jan 2004 20:26:18 -0000	1.3
  @@ -81,7 +81,7 @@
               exit 0
               ;;
           --version|-v)
  -            echo "OSSP sa $uuid_version"
  +            echo "OSSP uuid $uuid_version"
               exit 0
               ;;
           --all)
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jan 16 13:09:04 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9197E7747F; Fri, 16 Jan 2004 13:09:04 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ ChangeLog shiela-install.sh
Message-Id: <20040116120904.9197E7747F@mail.ossp.org>
Date: Fri, 16 Jan 2004 13:09:04 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Jan-2004 13:09:04
  Branch: HEAD                             Handle: 2004011612090300

  Modified files:
    ossp-pkg/shiela         ChangeLog shiela-install.sh

  Log:
    Fix a nasty syntax error in shiela-install.sh occurring
    if variables are passes as command line parameters.
    
    Submitted by: Christoph Schug <chris@schug.net>

  Summary:
    Revision    Changes     Path
    1.37        +4  -0      ossp-pkg/shiela/ChangeLog
    1.21        +1  -1      ossp-pkg/shiela/shiela-install.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.36 -r1.37 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	22 Sep 2003 11:50:49 -0000	1.36
  +++ ossp-pkg/shiela/ChangeLog	16 Jan 2004 12:09:03 -0000	1.37
  @@ -11,6 +11,10 @@
   
     Changes between 1.0.4 and 1.0.5 (23-Dec-2002 to xx-Oct-2003):
   
  +   *) Fix a nasty syntax error in shiela-install.sh occurring
  +      if variables are passes as command line parameters.
  +      [Ralf S. Engelschall]
  +
      *) Allow Shiela to accept CVS 1.12 and higher, too.
         [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-install.sh
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 shiela-install.sh
  --- ossp-pkg/shiela/shiela-install.sh	22 Sep 2003 11:50:49 -0000	1.20
  +++ ossp-pkg/shiela/shiela-install.sh	16 Jan 2004 12:09:03 -0000	1.21
  @@ -104,7 +104,7 @@
   EOT
   
   for arg; do
  -    eval `echo $arg | sed -e 's/^\([^=]*\)=\(.*\)$/V_\1="\2"/`
  +    eval `echo $arg | sed -e 's/^\([^=]*\)=\(.*\)$/V_\1="\2"/'`
   done
   
   query () {
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jan 16 13:09:44 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C460B7747F; Fri, 16 Jan 2004 13:09:44 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ THANKS
Message-Id: <20040116120944.C460B7747F@mail.ossp.org>
Date: Fri, 16 Jan 2004 13:09:44 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Jan-2004 13:09:44
  Branch: HEAD                             Handle: 2004011612094400

  Modified files:
    ossp-pkg/shiela         THANKS

  Log:
    give credit where credit is due

  Summary:
    Revision    Changes     Path
    1.3         +1  -0      ossp-pkg/shiela/THANKS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/THANKS
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 THANKS
  --- ossp-pkg/shiela/THANKS	21 Dec 2002 09:42:57 -0000	1.2
  +++ ossp-pkg/shiela/THANKS	16 Jan 2004 12:09:44 -0000	1.3
  @@ -14,6 +14,7 @@
   
     o Denis Barbier            <barbier@imacs.polytechnique.fr>
     o Markus Sander            <msander@de.cw.com>
  +  o Christoph Schug          <chris@schug.net>
   
     ...and all other OSSP shiela users who gave me feedback but I've forgot.
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jan 16 13:11:08 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 60B7D7747F; Fri, 16 Jan 2004 13:11:08 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ shiela-install.sh
Message-Id: <20040116121108.60B7D7747F@mail.ossp.org>
Date: Fri, 16 Jan 2004 13:11:08 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Jan-2004 13:11:08
  Branch: HEAD                             Handle: 2004011612110700

  Modified files:
    ossp-pkg/shiela         shiela-install.sh

  Log:
    add more quoting

  Summary:
    Revision    Changes     Path
    1.22        +1  -1      ossp-pkg/shiela/shiela-install.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-install.sh
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 shiela-install.sh
  --- ossp-pkg/shiela/shiela-install.sh	16 Jan 2004 12:09:03 -0000	1.21
  +++ ossp-pkg/shiela/shiela-install.sh	16 Jan 2004 12:11:07 -0000	1.22
  @@ -104,7 +104,7 @@
   EOT
   
   for arg; do
  -    eval `echo $arg | sed -e 's/^\([^=]*\)=\(.*\)$/V_\1="\2"/'`
  +    eval `echo "$arg" | sed -e 's/^\([^=]*\)=\(.*\)$/V_\1="\2"/'`
   done
   
   query () {
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jan 16 13:20:46 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3AAE0774B5; Fri, 16 Jan 2004 13:20:46 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.c
Message-Id: <20040116122046.3AAE0774B5@mail.ossp.org>
Date: Fri, 16 Jan 2004 13:20:46 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Jan-2004 13:20:46
  Branch: HEAD                             Handle: 2004011612204500

  Modified files:
    ossp-pkg/uuid           uuid.c

  Log:
    be correct and pass signed long

  Summary:
    Revision    Changes     Path
    1.32        +1  -1      ossp-pkg/uuid/uuid.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 uuid.c
  --- ossp-pkg/uuid/uuid.c	15 Jan 2004 19:19:49 -0000	1.31
  +++ ossp-pkg/uuid/uuid.c	16 Jan 2004 12:20:45 -0000	1.32
  @@ -847,7 +847,7 @@
           /* decode clock sequence */
           tmp32 = ((uuid->obj.clock_seq_hi_and_reserved & BM_MASK(5,0)) << 8)
                   + uuid->obj.clock_seq_low;
  -        str_rsprintf(str, "         clock: %ld (usually random)\n", (unsigned long)tmp32);
  +        str_rsprintf(str, "         clock: %ld (usually random)\n", (long)tmp32);
   
           /* decode node MAC address */
           str_rsprintf(str, "         node:  %02x:%02x:%02x:%02x:%02x:%02x (%s %s)\n",
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jan 16 13:21:15 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 90E2F774B5; Fri, 16 Jan 2004 13:21:15 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ Makefile.in
Message-Id: <20040116122115.90E2F774B5@mail.ossp.org>
Date: Fri, 16 Jan 2004 13:21:15 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Jan-2004 13:21:15
  Branch: HEAD                             Handle: 2004011612211500

  Modified files:
    ossp-pkg/uuid           Makefile.in

  Log:
    add one more simple check: generation and decoding

  Summary:
    Revision    Changes     Path
    1.15        +3  -0      ossp-pkg/uuid/Makefile.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	15 Jan 2004 15:36:09 -0000	1.14
  +++ ossp-pkg/uuid/Makefile.in	16 Jan 2004 12:21:15 -0000	1.15
  @@ -123,6 +123,9 @@
   	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v4 -n 8 -1
   	@echo "==== UUID version 4 (random data based): 16 subsequent iterations"; \
   	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v4 -n 8
  +	@echo "==== UUID version 1 generation and decoding"; \
  +	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -d `$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v1`; \
  +	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -d `$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v1 -m`
   
   install:
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jan 16 16:35:39 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C9EB7774EC; Fri, 16 Jan 2004 16:35:38 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid.ac
Message-Id: <20040116153538.C9EB7774EC@mail.ossp.org>
Date: Fri, 16 Jan 2004 16:35:38 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Jan-2004 16:35:38
  Branch: HEAD                             Handle: 2004011615353700

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid.ac

  Log:
    Fix syntax error in uuid.ac

  Summary:
    Revision    Changes     Path
    1.20        +2  -1      ossp-pkg/uuid/ChangeLog
    1.9         +1  -1      ossp-pkg/uuid/uuid.ac
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	15 Jan 2004 20:26:18 -0000	1.19
  +++ ossp-pkg/uuid/ChangeLog	16 Jan 2004 15:35:37 -0000	1.20
  @@ -13,7 +13,8 @@
   
     Changes between 0.9.2 and 0.9.3 (15-Jan-2004 to xx-Jan-2004)
   
  -   o ...
  +   o Fix syntax error in uuid.ac.
  +     [Ralf S. Engelschall]
   
     Changes between 0.9.1 and 0.9.2 (13-Jan-2004 to 15-Jan-2004)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.ac
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 uuid.ac
  --- ossp-pkg/uuid/uuid.ac	15 Jan 2004 16:22:09 -0000	1.8
  +++ ossp-pkg/uuid/uuid.ac	16 Jan 2004 15:35:37 -0000	1.9
  @@ -74,7 +74,7 @@
       AC_ARG_WITH(rfc2518,
           AC_HELP_STRING([--with-rfc2518], [use incorrect generation of IEEE 802 multicast addresses according to RFC2518]),
           [ac_cv_with_rfc2518=$withval], [ac_cv_with_rfc2518=no])
  -    if test ".$ac_cv_with_rfc2518" == .yes; then
  +    if test ".$ac_cv_with_rfc2518" = ".yes"; then
           AC_DEFINE(WITH_RFC2518, 1, [whether to use incorrect generation of IEEE 802 multicast addresses according to RFC2518])
       fi
   ])
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jan 16 16:42:50 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A3EE0774EC; Fri, 16 Jan 2004 16:42:50 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog
Message-Id: <20040116154250.A3EE0774EC@mail.ossp.org>
Date: Fri, 16 Jan 2004 16:42:50 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Jan-2004 16:42:50
  Branch: HEAD                             Handle: 2004011615425000

  Modified files:
    ossp-pkg/uuid           ChangeLog

  Log:
    remember change

  Summary:
    Revision    Changes     Path
    1.21        +3  -0      ossp-pkg/uuid/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	16 Jan 2004 15:35:37 -0000	1.20
  +++ ossp-pkg/uuid/ChangeLog	16 Jan 2004 15:42:50 -0000	1.21
  @@ -13,6 +13,9 @@
   
     Changes between 0.9.2 and 0.9.3 (15-Jan-2004 to xx-Jan-2004)
   
  +   o Fixed minor formatting bug in call to str_rsprintf().
  +     [Ralf S. Engelschall]
  +
      o Fix syntax error in uuid.ac.
        [Ralf S. Engelschall]
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jan 16 16:50:31 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 84E677738F; Fri, 16 Jan 2004 16:50:31 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog PORTING
Message-Id: <20040116155031.84E677738F@mail.ossp.org>
Date: Fri, 16 Jan 2004 16:50:31 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Jan-2004 16:50:31
  Branch: HEAD                             Handle: 2004011615503000

  Added files:
    ossp-pkg/uuid           PORTING
  Modified files:
    ossp-pkg/uuid           ChangeLog

  Log:
    Tested OSSP uuid on 16 particular Unix platforms and list
    those in the new PORTING file.

  Summary:
    Revision    Changes     Path
    1.22        +4  -0      ossp-pkg/uuid/ChangeLog
    1.1         +33 -0      ossp-pkg/uuid/PORTING
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	16 Jan 2004 15:42:50 -0000	1.21
  +++ ossp-pkg/uuid/ChangeLog	16 Jan 2004 15:50:30 -0000	1.22
  @@ -13,6 +13,10 @@
   
     Changes between 0.9.2 and 0.9.3 (15-Jan-2004 to xx-Jan-2004)
   
  +   o Tested OSSP uuid on 16 particular Unix platforms and list
  +     those in the new PORTING file.
  +     [Ralf S. Engelschall]
  +
      o Fixed minor formatting bug in call to str_rsprintf().
        [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/PORTING
  ============================================================================
  $ cvs diff -u -r0 -r1.1 PORTING
  --- /dev/null	2004-01-16 16:50:31.000000000 +0100
  +++ PORTING	2004-01-16 16:50:31.000000000 +0100
  @@ -0,0 +1,33 @@
  +   _        ___  ____ ____  ____                _     _
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _   _ _   _(_) __| |
  +  _|_||_| | | | \___ \___ \| |_) | | | | | | | | |/ _` |
  + |_||_|_| | |_| |___) |__) |  __/  | |_| | |_| | | (_| |
  +  |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
  +
  +  OSSP uuid - Universally Unique Identifier
  +
  +  PORTING
  + 
  +  OSSP uuid was already written with maximum portability in mind, so
  +  there should be no great effort required to get it running on any Unix
  +  platform with a reasonable POSIX API. Additionally, the portability
  +  was tested by successfully building and running it on the following
  +  particular Unix platforms (syntax is "<cpu>-<os> (<compiler>)"):
  +
  +      alpha-tru644.0 (cc)
  +      alpha-tru645.1 (gcc, cc)
  +      hppa-hpux11.11 (cc)
  +      ia64-hpux11.23 (cc)
  +      ix86-debian2.2 (gcc, icc)
  +      ix86-debian3.0 (gcc)
  +      ix86-debian3.1 (gcc)
  +      ix86-freebsd4.9 (gcc)
  +      ix86-freebsd5.2 (gcc, icc)
  +      ix86-netbsd1.6 (gcc)
  +      ix86-qnx6.2 (gcc)
  +      ix86-solaris10 (gcc)
  +      ix86-unixware7.1.3 (cc)
  +      mips64-irix6.5 (gcc)
  +      sparc64-solaris8 (gcc, forte)
  +      sparc64-solaris9 (gcc)
  +
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jan 16 16:52:31 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2BA4C7738F; Fri, 16 Jan 2004 16:52:31 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ TODO
Message-Id: <20040116155231.2BA4C7738F@mail.ossp.org>
Date: Fri, 16 Jan 2004 16:52:31 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Jan-2004 16:52:31
  Branch: HEAD                             Handle: 2004011615523000

  Modified files:
    ossp-pkg/uuid           TODO

  Log:
    ok, the beast is ready, I think

  Summary:
    Revision    Changes     Path
    1.12        +2  -2      ossp-pkg/uuid/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/TODO
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 TODO
  --- ossp-pkg/uuid/TODO	15 Jan 2004 15:36:26 -0000	1.11
  +++ ossp-pkg/uuid/TODO	16 Jan 2004 15:52:30 -0000	1.12
  @@ -1,7 +1,7 @@
   TODO
  -- in-depth code review
  -- at least minimum test suite
  +- <none>
   CANDO
  +- a more sophisticated test suite
   - more platform support in uuid_mac.c?!
   - global locking according to standard?
   - persistent/non-volatile state writing?
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jan 16 16:53:20 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 245E17738F; Fri, 16 Jan 2004 16:53:20 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ THANKS
Message-Id: <20040116155320.245E17738F@mail.ossp.org>
Date: Fri, 16 Jan 2004 16:53:20 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Jan-2004 16:53:20
  Branch: HEAD                             Handle: 2004011615531900

  Modified files:
    ossp-pkg/uuid           THANKS

  Log:
    give Michael credit, too

  Summary:
    Revision    Changes     Path
    1.3         +1  -0      ossp-pkg/uuid/THANKS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/THANKS
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 THANKS
  --- ossp-pkg/uuid/THANKS	11 Jan 2004 08:54:18 -0000	1.2
  +++ ossp-pkg/uuid/THANKS	16 Jan 2004 15:53:19 -0000	1.3
  @@ -12,4 +12,5 @@
     bugfixes, hints, gave platform feedback, etc. (in alphabetical order):
   
       o  Thomas Lotterer             <thomas@lotterer.net>
  +    o  Michael Schloh              <michael@schloh.com>
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jan 16 16:54:30 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E93097738F; Fri, 16 Jan 2004 16:54:29 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ THANKS
Message-Id: <20040116155429.E93097738F@mail.ossp.org>
Date: Fri, 16 Jan 2004 16:54:29 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Jan-2004 16:54:29
  Branch: HEAD                             Handle: 2004011615542900

  Modified files:
    ossp-pkg/uuid           THANKS

  Log:
    give feedback submitters credit, too

  Summary:
    Revision    Changes     Path
    1.4         +3  -0      ossp-pkg/uuid/THANKS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/THANKS
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 THANKS
  --- ossp-pkg/uuid/THANKS	16 Jan 2004 15:53:19 -0000	1.3
  +++ ossp-pkg/uuid/THANKS	16 Jan 2004 15:54:29 -0000	1.4
  @@ -11,6 +11,9 @@
     Credit has to be given to the following people who contributed ideas,
     bugfixes, hints, gave platform feedback, etc. (in alphabetical order):
   
  +    o  Matthias Andree             <matthias.andree@gmx.de>
  +    o  M. Daniel                   <mdaniel@scdi.com>
       o  Thomas Lotterer             <thomas@lotterer.net>
       o  Michael Schloh              <michael@schloh.com>
  +    o  Guerry Semones              <guerry@tsunamiresearch.com>
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jan 16 16:55:14 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2F4857738F; Fri, 16 Jan 2004 16:55:14 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog README VERSION
Message-Id: <20040116155514.2F4857738F@mail.ossp.org>
Date: Fri, 16 Jan 2004 16:55:14 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Jan-2004 16:55:14
  Branch: HEAD                             Handle: 2004011615551300

  Modified files:
    ossp-pkg/uuid           ChangeLog README VERSION

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.23        +1  -1      ossp-pkg/uuid/ChangeLog
    1.9         +1  -1      ossp-pkg/uuid/README
    1.6         +1  -1      ossp-pkg/uuid/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	16 Jan 2004 15:50:30 -0000	1.22
  +++ ossp-pkg/uuid/ChangeLog	16 Jan 2004 15:55:13 -0000	1.23
  @@ -11,7 +11,7 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 0.9.2 and 0.9.3 (15-Jan-2004 to xx-Jan-2004)
  +  Changes between 0.9.2 and 0.9.3 (15-Jan-2004 to 16-Jan-2004)
   
      o Tested OSSP uuid on 16 particular Unix platforms and list
        those in the new PORTING file.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 README
  --- ossp-pkg/uuid/README	15 Jan 2004 19:23:51 -0000	1.8
  +++ ossp-pkg/uuid/README	16 Jan 2004 15:55:13 -0000	1.9
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
   
     OSSP uuid - Universally Unique Identifier
  -  Version 0.9.2 (15-Jan-2004)
  +  Version 0.9.3 (16-Jan-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/VERSION
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 VERSION
  --- ossp-pkg/uuid/VERSION	15 Jan 2004 19:23:51 -0000	1.5
  +++ ossp-pkg/uuid/VERSION	16 Jan 2004 15:55:13 -0000	1.6
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP uuid (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP uuid, Version 0.9.2 (15-Jan-2004)
  +  This is OSSP uuid, Version 0.9.3 (16-Jan-2004)
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jan 16 16:59:40 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7AC3A7738F; Fri, 16 Jan 2004 16:59:40 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/ index.wml ossp-web/pkg/lib/uuid/ index.w...
Message-Id: <20040116155940.7AC3A7738F@mail.ossp.org>
Date: Fri, 16 Jan 2004 16:59:40 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   16-Jan-2004 16:59:40
  Branch: HEAD                             Handle: 2004011615593901

  Modified files:
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/uuid   index.wml

  Log:
    release OSSP uuid 0.9.3

  Summary:
    Revision    Changes     Path
    1.65        +1  -1      ossp-web/pkg/lib/index.wml
    1.7         +2  -2      ossp-web/pkg/lib/uuid/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.64 -r1.65 index.wml
  --- ossp-web/pkg/lib/index.wml	15 Jan 2004 19:28:13 -0000	1.64
  +++ ossp-web/pkg/lib/index.wml	16 Jan 2004 15:59:39 -0000	1.65
  @@ -42,7 +42,7 @@
   			done=95 stable=none unstable=0.9.8>
     <pkg_item name="uuid" longname="OSSP uuid" type="lib"
               desc="Universally Unique Identifier"
  -			done=95 stable=none unstable=0.9.2>
  +			done=95 stable=none unstable=0.9.3>
     <pkg_item name="l2" longname="OSSP l2" type="lib"
               desc="Flexible Logging"
   			done=95 stable=none unstable=0.9.5>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/uuid/index.wml
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 index.wml
  --- ossp-web/pkg/lib/uuid/index.wml	15 Jan 2004 19:28:13 -0000	1.6
  +++ ossp-web/pkg/lib/uuid/index.wml	16 Jan 2004 15:59:40 -0000	1.7
  @@ -44,7 +44,7 @@
   <pkg_status
       name="uuid" assign="rse"
       stable="none"    stable_date="none"
  -    unstable="0.9.2" unstable_date="15-Jan-2004"
  +    unstable="0.9.3" unstable_date="16-Jan-2004"
   	done=95>
   
   <h2>Source</h2>
  @@ -54,7 +54,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/uuid/
       directory=$(FTP_ROOT_DIR)/pkg/lib/uuid/
       files="uuid-*.tar.gz" 
  -	stable="uuid-0\.9\.2\.tar\.gz" unstable="uuid-SNAP.*\.tar.gz">
  +	stable="uuid-0\.9\.3\.tar\.gz" unstable="uuid-SNAP.*\.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jan 17 15:21:58 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1FD03774D9; Sat, 17 Jan 2004 15:21:58 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid.c
Message-Id: <20040117142158.1FD03774D9@mail.ossp.org>
Date: Sat, 17 Jan 2004 15:21:58 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-Jan-2004 15:21:57
  Branch: HEAD                             Handle: 2004011714215700

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid.c

  Log:
    Recognize special "Nil UUID" on decoding in uuid_dump().

  Summary:
    Revision    Changes     Path
    1.24        +5  -0      ossp-pkg/uuid/ChangeLog
    1.33        +9  -0      ossp-pkg/uuid/uuid.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	16 Jan 2004 15:55:13 -0000	1.23
  +++ ossp-pkg/uuid/ChangeLog	17 Jan 2004 14:21:57 -0000	1.24
  @@ -11,6 +11,11 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 0.9.3 and 0.9.4 (16-Jan-2004 to xx-Jan-2004)
  +
  +   o Recognize special "Nil UUID" on decoding in uuid_dump().
  +     [Ralf S. Engelschall]
  +
     Changes between 0.9.2 and 0.9.3 (15-Jan-2004 to 16-Jan-2004)
   
      o Tested OSSP uuid on 16 particular Unix platforms and list
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 uuid.c
  --- ossp-pkg/uuid/uuid.c	16 Jan 2004 12:20:45 -0000	1.32
  +++ ossp-pkg/uuid/uuid.c	17 Jan 2004 14:21:57 -0000	1.33
  @@ -781,6 +781,7 @@
       time_t t_sec;
       char buf[19+1]; /* YYYY-MM-DD HH:MM:SS */
       struct tm *tm;
  +    int r;
   
       /* sanity check argument(s) */
       if (uuid == NULL || str == NULL)
  @@ -793,6 +794,14 @@
       s = string;
       uuid_format(uuid, &s);
       str_rsprintf(str, "UUID:    %s\n", s);
  +
  +    /* short-circuit special case of 'nil UUID' */
  +    if (uuid_isnil(uuid, &r), r) {
  +        str_rsprintf(str, "variant: [none]\n"
  +                          "version: [none]\n"
  +                          "content: Nil UUID\n");
  +        return UUID_RC_OK;
  +    }
   
       /* decode UUID variant */
       variant = "unknown";
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jan 18 12:31:11 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C6E69774D9; Sun, 18 Jan 2004 12:31:10 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid.c
Message-Id: <20040118113110.C6E69774D9@mail.ossp.org>
Date: Sun, 18 Jan 2004 12:31:10 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Jan-2004 12:31:10
  Branch: HEAD                             Handle: 2004011811310901

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid.c

  Log:
    Improvide decoding in uuid_dump() by at least hex-dumping the
    binary representation in case of v3, v4 and Nil UUIDs. Also,
    annotate with better hints.

  Summary:
    Revision    Changes     Path
    1.25        +5  -0      ossp-pkg/uuid/ChangeLog
    1.34        +72 -43     ossp-pkg/uuid/uuid.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	17 Jan 2004 14:21:57 -0000	1.24
  +++ ossp-pkg/uuid/ChangeLog	18 Jan 2004 11:31:09 -0000	1.25
  @@ -13,6 +13,11 @@
   
     Changes between 0.9.3 and 0.9.4 (16-Jan-2004 to xx-Jan-2004)
   
  +   o Improvide decoding in uuid_dump() by at least hex-dumping the
  +     binary representation in case of v3, v4 and Nil UUIDs. Also,
  +     annotate with better hints.
  +     [Ralf S. Engelschall]
  +
      o Recognize special "Nil UUID" on decoding in uuid_dump().
        [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 uuid.c
  --- ossp-pkg/uuid/uuid.c	17 Jan 2004 14:21:57 -0000	1.33
  +++ ossp-pkg/uuid/uuid.c	18 Jan 2004 11:31:10 -0000	1.34
  @@ -85,7 +85,7 @@
       if ((*uuid = (uuid_t *)malloc(sizeof(uuid_t))) == NULL)
           return UUID_RC_MEM;
   
  -    /* set UUID object initially to "nil UUID" */
  +    /* set UUID object initially to "Nil UUID" */
       uuid_nil(*uuid);
   
       /* create PRNG and MD5 sub-objects */
  @@ -125,20 +125,20 @@
       return UUID_RC_OK;
   }
   
  -/* set UUID object to represents 'nil UUID' */
  +/* set UUID object to represents "Nil UUID" */
   uuid_rc_t uuid_nil(uuid_t *uuid)
   {
       /* argument sanity check */
       if (uuid == NULL)
           return UUID_RC_ARG;
   
  -    /* clear all octets to create "nil UUID" */
  +    /* clear all octets to create "Nil UUID" */
       memset((void *)&(uuid->obj), '\0', sizeof(uuid->obj));
   
       return UUID_RC_OK;
   }
   
  -/* check whether UUID object represents 'nil UUID' */
  +/* check whether UUID object represents "Nil UUID" */
   uuid_rc_t uuid_isnil(uuid_t *uuid, int *result)
   {
       const unsigned char *ucp;
  @@ -148,7 +148,7 @@
       if (uuid == NULL || result == NULL)
           return UUID_RC_ARG;
   
  -    /* a "nil UUID" is defined as all octets zero, so check for this case */
  +    /* a "Nil UUID" is defined as all octets zero, so check for this case */
       *result = UUID_TRUE;
       for (i = 0, ucp = (unsigned char *)&(uuid->obj); i < UUID_LEN_BIN; i++) {
           if (*ucp++ != '\0') {
  @@ -768,6 +768,7 @@
   {
       const char *version;
       const char *variant;
  +    uuid_rc_t rc;
       uuid_uint8_t tmp8;
       uuid_uint16_t tmp16;
       uuid_uint32_t tmp32;
  @@ -780,8 +781,11 @@
       int t_usec;
       time_t t_sec;
       char buf[19+1]; /* YYYY-MM-DD HH:MM:SS */
  +    char *content;
       struct tm *tm;
  -    int r;
  +    int isnil;
  +    uuid_uint8_t tmp[UUID_LEN_BIN];
  +    void *tmp_ptr;
   
       /* sanity check argument(s) */
       if (uuid == NULL || str == NULL)
  @@ -795,50 +799,52 @@
       uuid_format(uuid, &s);
       str_rsprintf(str, "UUID:    %s\n", s);
   
  -    /* short-circuit special case of 'nil UUID' */
  -    if (uuid_isnil(uuid, &r), r) {
  -        str_rsprintf(str, "variant: [none]\n"
  -                          "version: [none]\n"
  -                          "content: Nil UUID\n");
  -        return UUID_RC_OK;
  -    }
  +    /* check for special case of "Nil UUID" */
  +    if ((rc = uuid_isnil(uuid, &isnil)) != UUID_RC_OK)
  +        return rc;
   
       /* decode UUID variant */
  -    variant = "unknown";
       tmp8 = uuid->obj.clock_seq_hi_and_reserved;
  -    for (i = 7; i >= 0; i--) {
  -        if ((tmp8 & BM_BIT(i,1)) == 0) {
  -            tmp8 &= ~BM_MASK(i,0);
  -            break;
  +    if (isnil)
  +        variant = "n.a.";
  +    else {
  +        variant = "unknown";
  +        for (i = 7; i >= 0; i--) {
  +            if ((tmp8 & BM_BIT(i,1)) == 0) {
  +                tmp8 &= ~BM_MASK(i,0);
  +                break;
  +            }
           }
  -    }
  -    for (i = 0; i < sizeof(uuid_dectab_variant)/sizeof(uuid_dectab_variant[0]); i++) {
  -        if (uuid_dectab_variant[i].num == tmp8) {
  -            variant = uuid_dectab_variant[i].desc;
  -            break;
  +        for (i = 0; i < sizeof(uuid_dectab_variant)/sizeof(uuid_dectab_variant[0]); i++) {
  +            if (uuid_dectab_variant[i].num == tmp8) {
  +                variant = uuid_dectab_variant[i].desc;
  +                break;
  +            }
           }
       }
       str_rsprintf(str, "variant: %s\n", variant);
   
       /* decode UUID version */
  -    version = "unknown";
       tmp16 = (BM_SHR(uuid->obj.time_hi_and_version, 12) & BM_MASK(3,0));
  -    for (i = 0; i < sizeof(uuid_dectab_version)/sizeof(uuid_dectab_version[0]); i++) {
  -        if (uuid_dectab_version[i].num == (int)tmp16) {
  -            version = uuid_dectab_version[i].desc;
  -            break;
  +    if (isnil)
  +        version = "n.a.";
  +    else {
  +        version = "unknown";
  +        for (i = 0; i < sizeof(uuid_dectab_version)/sizeof(uuid_dectab_version[0]); i++) {
  +            if (uuid_dectab_version[i].num == (int)tmp16) {
  +                version = uuid_dectab_version[i].desc;
  +                break;
  +            }
           }
       }
       str_rsprintf(str, "version: %d (%s)\n", (int)tmp16, version);
   
  -    /* we currently support DCE 1.1 variants of version 1/3/4 only */
  -    if (!(   tmp8 == BM_OCTET(1,0,0,0,0,0,0,0)
  -          && (tmp16 == 1 || tmp16 == 3 || tmp16 == 4)))
  -        return UUID_RC_OK;
  -
  -    /* decode more */
  -    if (tmp16 == 1) {
  -        /* decode version 1 */
  +    /*
  +     * decode UUID content
  +     */
  +
  +    if (tmp8 == BM_OCTET(1,0,0,0,0,0,0,0) && tmp16 == 1) {
  +        /* decode DCE 1.1 version 1 UUID */
   
           /* decode system time */
           t = ui64_rol(ui64_n2i((unsigned long)(uuid->obj.time_hi_and_version & BM_MASK(11,0))), 48, NULL),
  @@ -869,13 +875,36 @@
               (uuid->obj.node[0] & IEEE_MAC_LOBIT_DEC ? "local" : "global"),
               (uuid->obj.node[0] & IEEE_MAC_MCBIT_DEC ? "multicast" : "unicast"));
       }
  -    else if (tmp16 == 3) {
  -        /* decode version 3 */
  -        str_rsprintf(str, "content: [not decipherable]\n");
  -    }
  -    else if (tmp16 == 4) {
  -        /* decode version 4 */
  -        str_rsprintf(str, "content: [no semantics]\n");
  +    else {
  +        /* decode anything else as hexadecimal byte-string only */
  +
  +        /* determine annotational hint */
  +        content = "not decipherable, because unknown UUID version";
  +        if (isnil)
  +            content = "special case of DCE 1.1 Nil UUID";
  +        else if (tmp16 == 3)
  +            content = "not decipherable, because message digest only";
  +        else if (tmp16 == 4)
  +            content = "no semantics, because random data only";
  +
  +        /* pack UUID into binary representation */
  +        tmp_ptr = tmp;
  +        if ((rc = uuid_pack(uuid, &tmp_ptr)) != UUID_RC_OK)
  +            return rc;
  +
  +        /* mask out version and variant parts */
  +        tmp[6] &= BM_MASK(3,0);
  +        tmp[8] &= BM_MASK(5,0);
  +
  +        /* dump as colon-seperated hexadecimal byte-string */
  +        str_rsprintf(str,
  +            "content: %02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X\n"
  +            "         (%s)\n",
  +            (unsigned int)tmp[0],  (unsigned int)tmp[1],  (unsigned int)tmp[2],  (unsigned int)tmp[3],
  +            (unsigned int)tmp[4],  (unsigned int)tmp[5],  (unsigned int)tmp[6],  (unsigned int)tmp[7],
  +            (unsigned int)tmp[8],  (unsigned int)tmp[9],  (unsigned int)tmp[10], (unsigned int)tmp[11],
  +            (unsigned int)tmp[12], (unsigned int)tmp[13], (unsigned int)tmp[14], (unsigned int)tmp[15],
  +            content);
       }
   
       return UUID_RC_OK;
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jan 18 12:32:40 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AFBE8774D9; Sun, 18 Jan 2004 12:32:40 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid_cli.pod
Message-Id: <20040118113240.AFBE8774D9@mail.ossp.org>
Date: Sun, 18 Jan 2004 12:32:40 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Jan-2004 12:32:40
  Branch: HEAD                             Handle: 2004011811324000

  Modified files:
    ossp-pkg/uuid           uuid_cli.pod

  Log:
    use new hexdump output in examples, too

  Summary:
    Revision    Changes     Path
    1.11        +4  -2      ossp-pkg/uuid/uuid_cli.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.pod
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 uuid_cli.pod
  --- ossp-pkg/uuid/uuid_cli.pod	15 Jan 2004 16:23:34 -0000	1.10
  +++ ossp-pkg/uuid/uuid_cli.pod	18 Jan 2004 11:32:40 -0000	1.11
  @@ -149,7 +149,8 @@
    UUID:    02d9e6d5-9467-382e-8f9b-9300a64ac3cd
    variant: DCE 1.1, ISO/IEC 11578:1996
    version: 3 (name based)
  - content: [not decipherable]
  + content: 02:D9:E6:D5:94:67:08:2E:0F:9B:93:00:A6:4A:C3:CD
  +          (not decipherable, because message digest only)
   
    # generate DCE 1.1 v4 UUID 4 (random data based)
    $ uuid -v4                         
  @@ -160,7 +161,8 @@
    UUID:    eb424026-6f54-4ef8-a4d0-bb658a1fc6cf
    variant: DCE 1.1, ISO/IEC 11578:1996
    version: 4 (random data based)
  - content: [no semantics]
  + content: EB:42:40:26:6F:54:0E:F8:24:D0:BB:65:8A:1F:C6:CF
  +          (no semantics, because random data only)
   
   =head1 SEE ALSO
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jan 18 19:48:13 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3359077505; Sun, 18 Jan 2004 19:48:13 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ TODO
Message-Id: <20040118184813.3359077505@mail.ossp.org>
Date: Sun, 18 Jan 2004 19:48:13 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Jan-2004 19:48:13
  Branch: HEAD                             Handle: 2004011818481200

  Modified files:
    ossp-pkg/uuid           TODO

  Log:
    remember issues

  Summary:
    Revision    Changes     Path
    1.13        +7  -1      ossp-pkg/uuid/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/TODO
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 TODO
  --- ossp-pkg/uuid/TODO	16 Jan 2004 15:52:30 -0000	1.12
  +++ ossp-pkg/uuid/TODO	18 Jan 2004 18:48:12 -0000	1.13
  @@ -1,6 +1,12 @@
   TODO
  -- <none>
  +- C++ support "extern C"
  +- API versioning
  +- documentation of Vx and intentions
  +  v1: one-time global unique identifier
  +  v3: repeatable not-unique message digest
  +  v4: one-time local unique identifier
   CANDO
  +- getopt_long support
   - a more sophisticated test suite
   - more platform support in uuid_mac.c?!
   - global locking according to standard?
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jan 18 19:53:15 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C5B3B77505; Sun, 18 Jan 2004 19:53:14 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ Makefile.in
Message-Id: <20040118185314.C5B3B77505@mail.ossp.org>
Date: Sun, 18 Jan 2004 19:53:14 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Jan-2004 19:53:14
  Branch: HEAD                             Handle: 2004011818531000

  Modified files:
    ossp-pkg/uuid           Makefile.in

  Log:
    perform more different tests

  Summary:
    Revision    Changes     Path
    1.16        +12 -8      ossp-pkg/uuid/Makefile.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	16 Jan 2004 12:21:15 -0000	1.15
  +++ ossp-pkg/uuid/Makefile.in	18 Jan 2004 18:53:10 -0000	1.16
  @@ -113,19 +113,23 @@
   	$(RM) /tmp/uuid.pod
   
   check: $(PRG_NAME)
  -	@echo "==== UUID version 1 (time and node based): 8 single iterations"; \
  -	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v1 -n 8 -1
  -	@echo "==== UUID version 1 (time and node based): 16 subsequent iterations"; \
  -	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v1 -n 8
  +	@echo "==== UUID version 1 (time and node based): 4 single iterations"; \
  +	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v1 -n 4 -1
  +	@echo "==== UUID version 1 (time and node based): 4 subsequent iterations"; \
  +	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v1 -n 4
   	@echo "==== UUID version 3 (name based): 2 times repeated"; \
   	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v3 -n 2 URL http://www.ossp.org/
  -	@echo "==== UUID version 4 (random data based): 16 single iterations"; \
  -	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v4 -n 8 -1
  -	@echo "==== UUID version 4 (random data based): 16 subsequent iterations"; \
  -	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v4 -n 8
  +	@echo "==== UUID version 4 (random data based): 4 single iterations"; \
  +	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v4 -n 4 -1
  +	@echo "==== UUID version 4 (random data based): 4 subsequent iterations"; \
  +	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v4 -n 4
   	@echo "==== UUID version 1 generation and decoding"; \
   	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -d `$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v1`; \
   	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -d `$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v1 -m`
  +	@echo "==== UUID version 3 generation and decoding"; \
  +	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -d `$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v3 URL http://www.ossp.org/`
  +	@echo "==== UUID version 3 generation and decoding"; \
  +	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -d `$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v4`
   
   install:
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jan 18 20:22:56 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1696877505; Sun, 18 Jan 2004 20:22:56 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid.c uuid.h uuid_md5.c uuid_prn...
Message-Id: <20040118192256.1696877505@mail.ossp.org>
Date: Sun, 18 Jan 2004 20:22:56 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Jan-2004 20:22:55
  Branch: HEAD                             Handle: 2004011819225401

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid.c uuid.h uuid_md5.c uuid_prng.c
                            uuid_str.c uuid_ui64.c

  Log:
    - Cleanup the C code to also pass warning-free a C++ compiler.
    - Support C++ by enclosing the C API declarations in
      'extern "C" {...}' within uuid.h.
    
    Submitted by: Guerry Semones <guerry@tsunamiresearch.com>

  Summary:
    Revision    Changes     Path
    1.26        +7  -0      ossp-pkg/uuid/ChangeLog
    1.35        +5  -5      ossp-pkg/uuid/uuid.c
    1.12        +13 -0      ossp-pkg/uuid/uuid.h
    1.5         +3  -3      ossp-pkg/uuid/uuid_md5.c
    1.2         +2  -2      ossp-pkg/uuid/uuid_prng.c
    1.2         +3  -3      ossp-pkg/uuid/uuid_str.c
    1.2         +1  -1      ossp-pkg/uuid/uuid_ui64.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	18 Jan 2004 11:31:09 -0000	1.25
  +++ ossp-pkg/uuid/ChangeLog	18 Jan 2004 19:22:54 -0000	1.26
  @@ -13,6 +13,13 @@
   
     Changes between 0.9.3 and 0.9.4 (16-Jan-2004 to xx-Jan-2004)
   
  +   o Cleanup the C code to also pass warning-free a C++ compiler.
  +     [Ralf S. Engelschall]
  +
  +   o Support C++ by enclosing the C API declarations in
  +     'extern "C" {...}' within uuid.h.
  +     [Guerry Semones <guerry@tsunamiresearch.com>]
  +
      o Improvide decoding in uuid_dump() by at least hex-dumping the
        binary representation in case of v3, v4 and Nil UUIDs. Also,
        annotate with better hints.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 uuid.c
  --- ossp-pkg/uuid/uuid.c	18 Jan 2004 11:31:10 -0000	1.34
  +++ ossp-pkg/uuid/uuid.c	18 Jan 2004 19:22:54 -0000	1.35
  @@ -218,7 +218,7 @@
       const uuid_uint8_t *in;
       uuid_uint32_t tmp32;
       uuid_uint16_t tmp16;
  -    int i;
  +    unsigned int i;
   
       /* sanity check argument(s) */
       if (uuid == NULL || buf == NULL)
  @@ -264,7 +264,7 @@
       uuid_uint8_t *out;
       uuid_uint32_t tmp32;
       uuid_uint16_t tmp16;
  -    int i;
  +    unsigned int i;
   
       /* sanity check argument(s) */
       if (uuid == NULL || buf == NULL)
  @@ -343,7 +343,7 @@
       uuid_uint16_t tmp16;
       const char *cp;
       char hexbuf[3];
  -    int i;
  +    unsigned int i;
   
       /* sanity check argument(s) */
       if (uuid == NULL || str == NULL)
  @@ -649,7 +649,7 @@
       void *uuid_octets;
       uuid_t *uuid_object;
       uuid_rc_t rc;
  -    int i;
  +    unsigned int i;
   
       /* determine namespace UUID name and argument name string */
       if ((ns = (char *)va_arg(ap, char *)) == NULL)
  @@ -774,7 +774,7 @@
       uuid_uint32_t tmp32;
       char string[UUID_LEN_STR+1];
       char *s;
  -    int i;
  +    unsigned int i;
       ui64_t t;
       ui64_t offset;
       int t_nsec;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.h
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 uuid.h
  --- ossp-pkg/uuid/uuid.h	15 Jan 2004 12:32:26 -0000	1.11
  +++ ossp-pkg/uuid/uuid.h	18 Jan 2004 19:22:54 -0000	1.12
  @@ -30,6 +30,17 @@
   #ifndef __UUID_H__
   #define __UUID_H__
   
  +/* minimum C++ support */
  +#ifdef __cplusplus
  +#define DECLARATION_BEGIN extern "C" {
  +#define DECLARATION_END   }
  +#else
  +#define DECLARATION_BEGIN /*nop*/
  +#define DECLARATION_END   /*nop*/
  +#endif
  +
  +DECLARATION_BEGIN
  +
   /* encoding octet stream lengths */
   #define UUID_LEN_BIN (128 / 8 /*bytes*/)
   #define UUID_LEN_STR (128 / 4 /*nibbles*/ + 4 /*hyphens*/)
  @@ -78,6 +89,8 @@
   
   /* error handling */
   extern char      *uuid_error    (uuid_rc_t _rc);
  +
  +DECLARATION_END
   
   #endif /* __UUID_H__ */
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_md5.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 uuid_md5.c
  --- ossp-pkg/uuid/uuid_md5.c	10 Jan 2004 12:16:03 -0000	1.4
  +++ ossp-pkg/uuid/uuid_md5.c	18 Jan 2004 19:22:54 -0000	1.5
  @@ -420,7 +420,7 @@
       if (md5 == NULL || data_ptr == NULL)
           return MD5_RC_ARG;
       if (*data_ptr == NULL) {
  -        if ((*data_ptr = malloc(MD5_LEN_STR+1)) == NULL)
  +        if ((*data_ptr = (char *)malloc(MD5_LEN_STR+1)) == NULL)
               return MD5_RC_MEM;
           if (data_len != NULL)
               *data_len = MD5_LEN_STR+1;
  @@ -435,10 +435,10 @@
   
       bufptr = buf;
       buflen = sizeof(buf);
  -    if ((rc = md5_store(md5, (void *)(&bufptr), &buflen)) != MD5_RC_OK)
  +    if ((rc = md5_store(md5, (void **)&bufptr, &buflen)) != MD5_RC_OK)
           return rc;
   
  -    for (i = 0; i < buflen; i++) {
  +    for (i = 0; i < (int)buflen; i++) {
   	    (*data_ptr)[(i*2)+0] = hex[(int)(bufptr[i] >> 4)];
   	    (*data_ptr)[(i*2)+1] = hex[(int)(bufptr[i] & 0x0f)];
       }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_prng.c
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid_prng.c
  --- ossp-pkg/uuid/uuid_prng.c	10 Jan 2004 12:16:03 -0000	1.1
  +++ ossp-pkg/uuid/uuid_prng.c	18 Jan 2004 19:22:54 -0000	1.2
  @@ -94,7 +94,7 @@
   
       /* try to gather data from the system PRNG device */
       if (prng->devfd != -1) {
  -        p = data_ptr;
  +        p = (unsigned char *)data_ptr;
           n = data_len;
           cnt = 0;
           while (n > 0) {
  @@ -112,7 +112,7 @@
   
       /* always also apply the weaker PRNG. In case the stronger PRNG device
          based source failed, this is the only remaining randomness, of course */
  -    for (p = data_ptr, n = 0; n < data_len; n++)
  +    for (p = (unsigned char *)data_ptr, n = 0; n < data_len; n++)
           *p++ ^= (unsigned char)(((unsigned int)rand() >> 7) & 0xFF);
   
       return PRNG_RC_OK;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_str.c
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid_str.c
  --- ossp-pkg/uuid/uuid_str.c	13 Jan 2004 19:43:15 -0000	1.1
  +++ ossp-pkg/uuid/uuid_str.c	18 Jan 2004 19:22:54 -0000	1.2
  @@ -557,7 +557,7 @@
   
       if (fracpart >= pow10(max)) {
           intpart++;
  -        fracpart -= pow10(max);
  +        fracpart -= (long)pow10(max);
       }
   
       /* convert integer part */
  @@ -689,7 +689,7 @@
       char *rv;
       int n;
   
  -    n = str_vsnprintf(NULL, -1, fmt, ap);
  +    n = str_vsnprintf(NULL, 0, fmt, ap);
       if ((rv = (char *)malloc(n+1)) == NULL)
           return NULL;
       str_vsnprintf(rv, n+1, fmt, ap);
  @@ -727,7 +727,7 @@
       }
       else {
           n = strlen(*str);
  -        rv = str_vsnprintf(NULL, -1, fmt, ap);
  +        rv = str_vsnprintf(NULL, 0, fmt, ap);
           if ((*str = (char *)realloc(*str, n+rv+1)) == NULL)
               return -1;
           str_vsnprintf((*str)+n, rv+1, fmt, ap);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_ui64.c
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid_ui64.c
  --- ossp-pkg/uuid/uuid_ui64.c	9 Jan 2004 11:32:06 -0000	1.1
  +++ ossp-pkg/uuid/uuid_ui64.c	18 Jan 2004 19:22:55 -0000	1.2
  @@ -149,7 +149,7 @@
   		str[i++] = map[r];
   		while (n > 1 && x.x[n-1] == 0)
   			n--;
  -	} while (i < (len-1) && (n > 1 || x.x[0] != 0));
  +	} while (i < ((int)len-1) && (n > 1 || x.x[0] != 0));
   	str[i] = '\0';
       for (j = 0; j < --i; j++) {
           c = str[j];
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jan 18 20:23:13 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4B73D7750F; Sun, 18 Jan 2004 20:23:13 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ TODO
Message-Id: <20040118192313.4B73D7750F@mail.ossp.org>
Date: Sun, 18 Jan 2004 20:23:13 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Jan-2004 20:23:13
  Branch: HEAD                             Handle: 2004011819231200

  Modified files:
    ossp-pkg/uuid           TODO

  Log:
    done

  Summary:
    Revision    Changes     Path
    1.14        +0  -1      ossp-pkg/uuid/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/TODO
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 TODO
  --- ossp-pkg/uuid/TODO	18 Jan 2004 18:48:12 -0000	1.13
  +++ ossp-pkg/uuid/TODO	18 Jan 2004 19:23:12 -0000	1.14
  @@ -1,5 +1,4 @@
   TODO
  -- C++ support "extern C"
   - API versioning
   - documentation of Vx and intentions
     v1: one-time global unique identifier
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jan 18 20:39:13 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2C46077504; Sun, 18 Jan 2004 20:39:12 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid_md5.c
Message-Id: <20040118193912.2C46077504@mail.ossp.org>
Date: Sun, 18 Jan 2004 20:39:12 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Jan-2004 20:39:11
  Branch: HEAD                             Handle: 2004011819391100

  Modified files:
    ossp-pkg/uuid           uuid_md5.c

  Log:
    make both C and C++ happy by doing strange double-cast

  Summary:
    Revision    Changes     Path
    1.6         +1  -1      ossp-pkg/uuid/uuid_md5.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_md5.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 uuid_md5.c
  --- ossp-pkg/uuid/uuid_md5.c	18 Jan 2004 19:22:54 -0000	1.5
  +++ ossp-pkg/uuid/uuid_md5.c	18 Jan 2004 19:39:11 -0000	1.6
  @@ -435,7 +435,7 @@
   
       bufptr = buf;
       buflen = sizeof(buf);
  -    if ((rc = md5_store(md5, (void **)&bufptr, &buflen)) != MD5_RC_OK)
  +    if ((rc = md5_store(md5, (void **)((void *)&bufptr), &buflen)) != MD5_RC_OK)
           return rc;
   
       for (i = 0; i < (int)buflen; i++) {
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jan 18 20:59:14 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DC74E77506; Sun, 18 Jan 2004 20:59:13 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog TODO uuid.c uuid.h uuid.pod uuid_...
Message-Id: <20040118195913.DC74E77506@mail.ossp.org>
Date: Sun, 18 Jan 2004 20:59:13 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Jan-2004 20:59:13
  Branch: HEAD                             Handle: 2004011819591201

  Modified files:
    ossp-pkg/uuid           ChangeLog TODO uuid.c uuid.h uuid.pod uuid_cli.c

  Log:
    - Refactor the API by merging uuid_{unpack,pack,parse,format,dump}()
      functions into unified uuid_{import,export}() functions. This
      allows us to easily add support for other formats (e.g. XML) in the
      future without having the change the API in principle.
    - Document what DCE 1.1 UUID versions exist and what they are
      intended for.

  Summary:
    Revision    Changes     Path
    1.27        +10 -0      ossp-pkg/uuid/ChangeLog
    1.15        +1  -8      ossp-pkg/uuid/TODO
    1.36        +364 -279   ossp-pkg/uuid/uuid.c
    1.13        +16 -13     ossp-pkg/uuid/uuid.h
    1.11        +86 -37     ossp-pkg/uuid/uuid.pod
    1.11        +9  -7      ossp-pkg/uuid/uuid_cli.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	18 Jan 2004 19:22:54 -0000	1.26
  +++ ossp-pkg/uuid/ChangeLog	18 Jan 2004 19:59:12 -0000	1.27
  @@ -13,6 +13,16 @@
   
     Changes between 0.9.3 and 0.9.4 (16-Jan-2004 to xx-Jan-2004)
   
  +   o Refactor the API by merging uuid_{unpack,pack,parse,format,dump}()
  +     functions into unified uuid_{import,export}() functions. This
  +     allows us to easily add support for other formats (e.g. XML) in the
  +     future without having the change the API in principle.
  +     [Ralf S. Engelschall]
  +
  +   o Document what DCE 1.1 UUID versions exist and what they are
  +     intended for.
  +     [Ralf S. Engelschall]
  +
      o Cleanup the C code to also pass warning-free a C++ compiler.
        [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/TODO
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 TODO
  --- ossp-pkg/uuid/TODO	18 Jan 2004 19:23:12 -0000	1.14
  +++ ossp-pkg/uuid/TODO	18 Jan 2004 19:59:12 -0000	1.15
  @@ -1,9 +1,6 @@
   TODO
   - API versioning
  -- documentation of Vx and intentions
  -  v1: one-time global unique identifier
  -  v3: repeatable not-unique message digest
  -  v4: one-time local unique identifier
  +- why are nanoseconds always "1"?!
   CANDO
   - getopt_long support
   - a more sophisticated test suite
  @@ -12,7 +9,3 @@
   - persistent/non-volatile state writing?
   - additional Perl API for covering Perl language
   - additional C API for DCE 1.1 compatibility
  -- unify pack/unpack/parse/format/dump into:
  -  typedef enum { UUID_FMT_BIN, UUID_FMT_STR, UUID_FMT_TXT, UUID_FMT_XML } uuid_fmt_t;
  -  uuid_rc_t uuid_import(uuid_t *_uuid, uuid_fmt_t _fmt, const void  *_buf, size_t _size);
  -  uuid_rc_t uuid_export(uuid_t *_uuid, uuid_fmt_t _fmt,       void **_buf, size_t _size);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 uuid.c
  --- ossp-pkg/uuid/uuid.c	18 Jan 2004 19:22:54 -0000	1.35
  +++ ossp-pkg/uuid/uuid.c	18 Jan 2004 19:59:12 -0000	1.36
  @@ -51,8 +51,82 @@
   #include "uuid_bm.h"
   #include "uuid_ac.h"
   
  +/* maximum number of 100ns ticks of the actual resolution of system clock
  +   (which in our case is 1us (= 1000ns) because we use gettimeofday(2) */
  +#define UUIDS_PER_TICK 10
  +
  +/* time offset between UUID and Unix Epoch time according to standards.
  +   (UUID UTC base time is October 15, 1582
  +    Unix UTC base time is January  1, 1970) */
  +#define UUID_TIMEOFFSET "01B21DD213814000"
  +
  +/* IEEE 802 MAC address encoding/decoding bit fields
  +
  +   ATTENTION:
  +
  +   In case no real/physical IEEE 802 address is available, both
  +   "draft-leach-uuids-guids-01" (section "4. Node IDs when no IEEE 802
  +   network card is available") and RFC 2518 (section "6.4.1 Node Field
  +   Generation Without the IEEE 802 Address") recommend (quoted from RFC
  +   2518):
  +
  +     "The ideal solution is to obtain a 47 bit cryptographic quality
  +     random number, and use it as the low 47 bits of the node ID, with
  +     the most significant bit of the first octet of the node ID set to
  +     1. This bit is the unicast/multicast bit, which will never be set
  +     in IEEE 802 addresses obtained from network cards; hence, there can
  +     never be a conflict between UUIDs generated by machines with and
  +     without network cards."
  +
  +   This clearly explains that the intention is to use IEEE 802 multicast
  +   addresses. Unfortunately, it incorrectly explains how to implement
  +   this! It actually is the "*LEAST* significant bit of the first octet
  +   of the node ID" in a memory and hexadecimal string representation of
  +   a 48-bit IEEE 802 MAC address.
  +
  +   Unfortunately, even the reference implementation included in the
  +   expired IETF "draft-leach-uuids-guids-01" incorrectly set the
  +   multicast bit with an OR bit operation and an incorrect mask of
  +   0x80. Hence, multiple other UUID implementations can be found on the
  +   Internet which inherited this bug.
  +
  +   Luckily, neither DCE 1.1 nor ISO/IEC 11578:1996 are affected by this
  +   problem. They disregard the topic of missing IEEE 802 addresses
  +   entirely, and thus avoid adopting this bug from the original draft
  +   and code ;-)
  +
  +   The reason for the bug in the standards seems to be that the
  +   multicast bit actually is the *MOST* significant bit in IEEE 802.3
  +   (Ethernet) _transmission order_ of an IEEE 802 MAC address. The
  +   authors seem to be confused by this and especially were not aware
  +   that the bitwise order of an octet from a MAC address memory and
  +   hexadecimal string representation is still always from left (MSB, bit
  +   7) to right (LSB, bit 0).
  +
  +   For more information on this, see especially "Understanding
  +   Physical Addresses" in "Ethernet -- The Definitive Guide",
  +   p.43, and section "ETHERNET MULTICAST ADDRESSES" in
  +   http://www.iana.org/assignments/ethernet-numbers.
  +
  +   Hence, we do it the intended/correct way and generate a real IEEE 802
  +   multicast address, but with a brain-dead compile-time option one can
  +   nevertheless enforce the broken generation of IEEE 802 MAC addresses.
  +   For the decoding we always use the correct way, of course. */
  +
  +/* encoding */
  +#ifdef WITH_RFC2518
  +#define IEEE_MAC_MCBIT_ENC BM_OCTET(1,0,0,0,0,0,0,0)
  +#else
  +#define IEEE_MAC_MCBIT_ENC BM_OCTET(0,0,0,0,0,0,0,1)
  +#endif
  +#define IEEE_MAC_LOBIT_ENC BM_OCTET(0,0,0,0,0,0,1,0)
  +
  +/* decoding */
  +#define IEEE_MAC_MCBIT_DEC BM_OCTET(0,0,0,0,0,0,0,1)
  +#define IEEE_MAC_LOBIT_DEC BM_OCTET(0,0,0,0,0,0,1,0)
  +
   /* IEEE 802 MAC address octet length */
  -#define MAC_OCTETS 6
  +#define IEEE_MAC_OCTETS 6
   
   /* UUID binary representation according to UUID standards */
   typedef struct {
  @@ -61,7 +135,7 @@
       uuid_uint16_t  time_hi_and_version;       /* bits 48-59 of time field plus 4 bit version */
       uuid_uint8_t   clock_seq_hi_and_reserved; /* bits  8-13 of clock sequence field plus 2 bit variant */
       uuid_uint8_t   clock_seq_low;             /* bits  0-7  of clock sequence field */
  -    uuid_uint8_t   node[MAC_OCTETS];          /* bits  0-47 of node MAC address */
  +    uuid_uint8_t   node[IEEE_MAC_OCTETS];     /* bits  0-47 of node MAC address */
   } uuid_obj_t;
   
   /* abstract data type (ADT) of API */
  @@ -69,7 +143,7 @@
       uuid_obj_t     obj;                       /* inlined UUID object */
       prng_t        *prng;                      /* RPNG sub-object */
       md5_t         *md5;                       /* MD5 sub-object */
  -    uuid_uint8_t   mac[MAC_OCTETS];           /* pre-determined MAC address */
  +    uuid_uint8_t   mac[IEEE_MAC_OCTETS];      /* pre-determined MAC address */
       struct timeval time_last;                 /* last retrieved timestamp */
       unsigned long  time_seq;                  /* last timestamp sequence counter */
   };
  @@ -125,19 +199,6 @@
       return UUID_RC_OK;
   }
   
  -/* set UUID object to represents "Nil UUID" */
  -uuid_rc_t uuid_nil(uuid_t *uuid)
  -{
  -    /* argument sanity check */
  -    if (uuid == NULL)
  -        return UUID_RC_ARG;
  -
  -    /* clear all octets to create "Nil UUID" */
  -    memset((void *)&(uuid->obj), '\0', sizeof(uuid->obj));
  -
  -    return UUID_RC_OK;
  -}
  -
   /* check whether UUID object represents "Nil UUID" */
   uuid_rc_t uuid_isnil(uuid_t *uuid, int *result)
   {
  @@ -211,9 +272,9 @@
       return UUID_RC_OK;
   }
   
  -/* unpack UUID binary presentation into UUID object
  +/* INTERNAL: unpack UUID binary presentation into UUID object
      (allows in-place operation for internal efficiency!) */
  -uuid_rc_t uuid_unpack(uuid_t *uuid, const void *buf)
  +static uuid_rc_t uuid_import_bin(uuid_t *uuid, const void *data_ptr, size_t data_len)
   {
       const uuid_uint8_t *in;
       uuid_uint32_t tmp32;
  @@ -221,11 +282,11 @@
       unsigned int i;
   
       /* sanity check argument(s) */
  -    if (uuid == NULL || buf == NULL)
  +    if (uuid == NULL || data_ptr == NULL || data_len < UUID_LEN_BIN)
           return UUID_RC_ARG;
   
  -    /* treat input buffer as octet stream */
  -    in = (const uuid_uint8_t *)buf;
  +    /* treat input data_ptrfer as octet stream */
  +    in = (const uuid_uint8_t *)data_ptr;
   
       /* unpack "time_low" field */
       tmp32 = *in++;
  @@ -257,9 +318,9 @@
       return UUID_RC_OK;
   }
   
  -/* pack UUID object into binary representation
  +/* INTERNAL: pack UUID object into binary representation
      (allows in-place operation for internal efficiency!) */
  -uuid_rc_t uuid_pack(uuid_t *uuid, void **buf)
  +static uuid_rc_t uuid_export_bin(uuid_t *uuid, void **data_ptr, size_t *data_len)
   {
       uuid_uint8_t *out;
       uuid_uint32_t tmp32;
  @@ -267,16 +328,26 @@
       unsigned int i;
   
       /* sanity check argument(s) */
  -    if (uuid == NULL || buf == NULL)
  +    if (uuid == NULL || data_ptr == NULL)
           return UUID_RC_ARG;
   
  -    /* optionally allocate octet buffer */
  -    if (*buf == NULL)
  -        if ((*buf = malloc(sizeof(uuid_t))) == NULL)
  +    /* optionally allocate octet data_ptrfer */
  +    if (*data_ptr == NULL) {
  +        if ((*data_ptr = malloc(sizeof(uuid_t))) == NULL)
  +            return UUID_RC_MEM;
  +        if (data_len != NULL)
  +            *data_len = UUID_LEN_BIN;
  +    }
  +    else {
  +        if (data_len == NULL)
  +            return UUID_RC_ARG;
  +        if (*data_len < UUID_LEN_BIN)
               return UUID_RC_MEM;
  +        *data_len = UUID_LEN_BIN;
  +    }
   
  -    /* treat output buffer as octet stream */
  -    out = (uuid_uint8_t *)(*buf);
  +    /* treat output data_ptrfer as octet stream */
  +    out = (uuid_uint8_t *)(*data_ptr);
   
       /* pack "time_low" field */
       tmp32 = uuid->obj.time_low;
  @@ -337,19 +408,21 @@
       return UUID_TRUE;
   }
   
  -/* parse string representation into UUID object */
  -uuid_rc_t uuid_parse(uuid_t *uuid, const char *str)
  +/* INTERNAL: import UUID object from string representation */
  +static uuid_rc_t uuid_import_str(uuid_t *uuid, const void *data_ptr, size_t data_len)
   {
       uuid_uint16_t tmp16;
       const char *cp;
       char hexbuf[3];
  +    const char *str;
       unsigned int i;
   
       /* sanity check argument(s) */
  -    if (uuid == NULL || str == NULL)
  +    if (uuid == NULL || data_ptr == NULL || data_len < UUID_LEN_STR)
           return UUID_RC_ARG;
   
       /* check for correct UUID string representation syntax */
  +    str = (const char *)data_ptr;
       if (!uuid_isstr(str, 0))
           return UUID_RC_ARG;
   
  @@ -375,20 +448,30 @@
       return UUID_RC_OK;
   }
   
  -/* format UUID object into string representation */
  -uuid_rc_t uuid_format(uuid_t *uuid, char **str)
  +/* INTERNAL: export UUID object to string representation */
  +static uuid_rc_t uuid_export_str(uuid_t *uuid, void **data_ptr, size_t *data_len)
   {
       /* sanity check argument(s) */
  -    if (uuid == NULL || str == NULL)
  +    if (uuid == NULL || data_ptr == NULL)
           return UUID_RC_ARG;
   
  -    /* optionally allocate string buffer */
  -    if (*str == NULL)
  -        if ((*str = (char *)malloc(UUID_LEN_STR+1)) == NULL)
  +    /* allocate output buffer */
  +    if (*data_ptr == NULL) {
  +        if ((*data_ptr = (void *)malloc(UUID_LEN_STR+1)) == NULL)
  +            return UUID_RC_MEM;
  +        if (data_len != NULL)
  +            *data_len = UUID_LEN_STR+1;
  +    }
  +    else {
  +        if (data_len == NULL)
  +            return UUID_RC_ARG;
  +        if (*data_len < UUID_LEN_STR+1)
               return UUID_RC_MEM;
  +        *data_len = UUID_LEN_STR+1;
  +    }
   
       /* format UUID into string representation */
  -    str_snprintf(*str, UUID_LEN_STR+1,
  +    str_snprintf((char *)(*data_ptr), UUID_LEN_STR+1,
           "%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
           (unsigned long)uuid->obj.time_low,
           (unsigned int)uuid->obj.time_mid,
  @@ -405,92 +488,247 @@
       return UUID_RC_OK;
   }
   
  -/* INTERNAL: brand UUID with version and variant */
  -static void uuid_brand(uuid_t *uuid, int version)
  +/* decoding tables */
  +static struct {
  +    uuid_uint8_t num;
  +    const char *desc;
  +} uuid_dectab_variant[] = {
  +    { BM_OCTET(0,0,0,0,0,0,0,0), "reserved (NCS backward compatible)" },
  +    { BM_OCTET(1,0,0,0,0,0,0,0), "DCE 1.1, ISO/IEC 11578:1996" },
  +    { BM_OCTET(1,1,0,0,0,0,0,0), "reserved (Microsoft GUID)" },
  +    { BM_OCTET(1,1,1,0,0,0,0,0), "reserved (future use)" }
  +};
  +static struct {
  +    int num;
  +    const char *desc;
  +} uuid_dectab_version[] = {
  +    { 1, "time and node based" },
  +    { 3, "name based" },
  +    { 4, "random data based" }
  +};
  +
  +/* INTERNAL: dump UUID object as descriptive text */
  +static uuid_rc_t uuid_export_txt(uuid_t *uuid, void **data_ptr, size_t *data_len)
   {
  -    /* set version (as given) */
  -    uuid->obj.time_hi_and_version &= BM_MASK(11,0);
  -    uuid->obj.time_hi_and_version |= BM_SHL((uuid_uint16_t)version, 12);
  +    uuid_rc_t rc;
  +    char **out;
  +    char *out_ptr;
  +    size_t out_len;
  +    const char *version;
  +    const char *variant;
  +    char *content;
  +    int isnil;
  +    uuid_uint8_t tmp8;
  +    uuid_uint16_t tmp16;
  +    uuid_uint32_t tmp32;
  +    uuid_uint8_t tmp_bin[UUID_LEN_BIN];
  +    char tmp_str[UUID_LEN_STR+1];
  +    void *tmp_ptr;
  +    size_t tmp_len;
  +    ui64_t t;
  +    ui64_t t_offset;
  +    int t_nsec;
  +    int t_usec;
  +    time_t t_sec;
  +    char t_buf[19+1]; /* YYYY-MM-DD HH:MM:SS */
  +    struct tm *tm;
  +    unsigned int i;
   
  -    /* set variant (always DCE 1.1 only) */
  -    uuid->obj.clock_seq_hi_and_reserved &= BM_MASK(5,0);
  -    uuid->obj.clock_seq_hi_and_reserved |= BM_SHL(0x02, 6);
  -    return;
  -}
  +    /* sanity check argument(s) */
  +    if (uuid == NULL || data_ptr == NULL)
  +        return UUID_RC_ARG;
   
  -/* maximum number of 100ns ticks of the actual resolution of system clock
  -   (which in our case is 1us (= 1000ns) because we use gettimeofday(2) */
  -#define UUIDS_PER_TICK 10
  +    /* initialize output buffer */
  +    out_ptr = NULL;
  +    out = &out_ptr;
   
  -/* time offset between UUID and Unix Epoch time according to standards.
  -   (UUID UTC base time is October 15, 1582
  -    Unix UTC base time is January  1, 1970) */
  -#define UUID_TIMEOFFSET "01B21DD213814000"
  +    /* check for special case of "Nil UUID" */
  +    if ((rc = uuid_isnil(uuid, &isnil)) != UUID_RC_OK)
  +        return rc;
   
  -/* IEEE 802 MAC address encoding/decoding bit fields
  +    /* decode into string representation */
  +    tmp_ptr = (void *)&tmp_str;
  +    tmp_len = sizeof(tmp_str);
  +    if ((rc = uuid_export(uuid, UUID_FMT_STR, &tmp_ptr, &tmp_len)) != UUID_RC_OK)
  +        return rc;
  +    str_rsprintf(out, "UUID:    %s\n", tmp_str);
   
  -   ATTENTION:
  +    /* decode UUID variant */
  +    tmp8 = uuid->obj.clock_seq_hi_and_reserved;
  +    if (isnil)
  +        variant = "n.a.";
  +    else {
  +        variant = "unknown";
  +        for (i = 7; i >= 0; i--) {
  +            if ((tmp8 & BM_BIT(i,1)) == 0) {
  +                tmp8 &= ~BM_MASK(i,0);
  +                break;
  +            }
  +        }
  +        for (i = 0; i < sizeof(uuid_dectab_variant)/sizeof(uuid_dectab_variant[0]); i++) {
  +            if (uuid_dectab_variant[i].num == tmp8) {
  +                variant = uuid_dectab_variant[i].desc;
  +                break;
  +            }
  +        }
  +    }
  +    str_rsprintf(out, "variant: %s\n", variant);
   
  -   In case no real/physical IEEE 802 address is available, both
  -   "draft-leach-uuids-guids-01" (section "4. Node IDs when no IEEE 802
  -   network card is available") and RFC 2518 (section "6.4.1 Node Field
  -   Generation Without the IEEE 802 Address") recommend (quoted from RFC
  -   2518):
  +    /* decode UUID version */
  +    tmp16 = (BM_SHR(uuid->obj.time_hi_and_version, 12) & BM_MASK(3,0));
  +    if (isnil)
  +        version = "n.a.";
  +    else {
  +        version = "unknown";
  +        for (i = 0; i < sizeof(uuid_dectab_version)/sizeof(uuid_dectab_version[0]); i++) {
  +            if (uuid_dectab_version[i].num == (int)tmp16) {
  +                version = uuid_dectab_version[i].desc;
  +                break;
  +            }
  +        }
  +    }
  +    str_rsprintf(out, "version: %d (%s)\n", (int)tmp16, version);
   
  -     "The ideal solution is to obtain a 47 bit cryptographic quality
  -     random number, and use it as the low 47 bits of the node ID, with
  -     the most significant bit of the first octet of the node ID set to
  -     1. This bit is the unicast/multicast bit, which will never be set
  -     in IEEE 802 addresses obtained from network cards; hence, there can
  -     never be a conflict between UUIDs generated by machines with and
  -     without network cards."
  +    /*
  +     * decode UUID content
  +     */
   
  -   This clearly explains that the intention is to use IEEE 802 multicast
  -   addresses. Unfortunately, it incorrectly explains how to implement
  -   this! It actually is the "*LEAST* significant bit of the first octet
  -   of the node ID" in a memory and hexadecimal string representation of
  -   a 48-bit IEEE 802 MAC address.
  +    if (tmp8 == BM_OCTET(1,0,0,0,0,0,0,0) && tmp16 == 1) {
  +        /* decode DCE 1.1 version 1 UUID */
   
  -   Unfortunately, even the reference implementation included in the
  -   expired IETF "draft-leach-uuids-guids-01" incorrectly set the
  -   multicast bit with an OR bit operation and an incorrect mask of
  -   0x80. Hence, multiple other UUID implementations can be found on the
  -   Internet which inherited this bug.
  +        /* decode system time */
  +        t = ui64_rol(ui64_n2i((unsigned long)(uuid->obj.time_hi_and_version & BM_MASK(11,0))), 48, NULL),
  +        t = ui64_or(t, ui64_rol(ui64_n2i((unsigned long)(uuid->obj.time_mid)), 32, NULL));
  +        t = ui64_or(t, ui64_n2i((unsigned long)(uuid->obj.time_low)));
  +        t_offset = ui64_s2i(UUID_TIMEOFFSET, NULL, 16);
  +        t = ui64_sub(t, t_offset, NULL);
  +        t = ui64_divn(t, 10, &t_nsec);
  +        t = ui64_divn(t, 1000000, &t_usec);
  +        t_sec = (time_t)ui64_i2n(t);
  +        tm = gmtime(&t_sec);
  +        strftime(t_buf, sizeof(t_buf), "%Y-%m-%d %H:%M:%S", tm);
  +        str_rsprintf(out, "content: time:  %s.%06d.%d UTC\n", t_buf, t_usec, t_nsec);
   
  -   Luckily, neither DCE 1.1 nor ISO/IEC 11578:1996 are affected by this
  -   problem. They disregard the topic of missing IEEE 802 addresses
  -   entirely, and thus avoid adopting this bug from the original draft
  -   and code ;-)
  +        /* decode clock sequence */
  +        tmp32 = ((uuid->obj.clock_seq_hi_and_reserved & BM_MASK(5,0)) << 8)
  +                + uuid->obj.clock_seq_low;
  +        str_rsprintf(out, "         clock: %ld (usually random)\n", (long)tmp32);
   
  -   The reason for the bug in the standards seems to be that the
  -   multicast bit actually is the *MOST* significant bit in IEEE 802.3
  -   (Ethernet) _transmission order_ of an IEEE 802 MAC address. The
  -   authors seem to be confused by this and especially were not aware
  -   that the bitwise order of an octet from a MAC address memory and
  -   hexadecimal string representation is still always from left (MSB, bit
  -   7) to right (LSB, bit 0).
  +        /* decode node MAC address */
  +        str_rsprintf(out, "         node:  %02x:%02x:%02x:%02x:%02x:%02x (%s %s)\n",
  +            (unsigned int)uuid->obj.node[0],
  +            (unsigned int)uuid->obj.node[1],
  +            (unsigned int)uuid->obj.node[2],
  +            (unsigned int)uuid->obj.node[3],
  +            (unsigned int)uuid->obj.node[4],
  +            (unsigned int)uuid->obj.node[5],
  +            (uuid->obj.node[0] & IEEE_MAC_LOBIT_DEC ? "local" : "global"),
  +            (uuid->obj.node[0] & IEEE_MAC_MCBIT_DEC ? "multicast" : "unicast"));
  +    }
  +    else {
  +        /* decode anything else as hexadecimal byte-string only */
   
  -   For more information on this, see especially "Understanding
  -   Physical Addresses" in "Ethernet -- The Definitive Guide",
  -   p.43, and section "ETHERNET MULTICAST ADDRESSES" in
  -   http://www.iana.org/assignments/ethernet-numbers.
  +        /* determine annotational hint */
  +        content = "not decipherable, because unknown UUID version";
  +        if (isnil)
  +            content = "special case of DCE 1.1 Nil UUID";
  +        else if (tmp16 == 3)
  +            content = "not decipherable, because message digest only";
  +        else if (tmp16 == 4)
  +            content = "no semantics, because random data only";
   
  -   Hence, we do it the intended/correct way and generate a real IEEE 802
  -   multicast address, but with a brain-dead compile-time option one can
  -   nevertheless enforce the broken generation of IEEE 802 MAC addresses.
  -   For the decoding we always use the correct way, of course. */
  +        /* pack UUID into binary representation */
  +        tmp_ptr = (void *)&tmp_bin;
  +        tmp_len = sizeof(tmp_bin);
  +        if ((rc = uuid_export_bin(uuid, &tmp_ptr, &tmp_len)) != UUID_RC_OK)
  +            return rc;
   
  -/* encoding */
  -#ifdef WITH_RFC2518
  -#define IEEE_MAC_MCBIT_ENC BM_OCTET(1,0,0,0,0,0,0,0)
  -#else
  -#define IEEE_MAC_MCBIT_ENC BM_OCTET(0,0,0,0,0,0,0,1)
  -#endif
  -#define IEEE_MAC_LOBIT_ENC BM_OCTET(0,0,0,0,0,0,1,0)
  +        /* mask out version and variant parts */
  +        tmp_bin[6] &= BM_MASK(3,0);
  +        tmp_bin[8] &= BM_MASK(5,0);
   
  -/* decoding */
  -#define IEEE_MAC_MCBIT_DEC BM_OCTET(0,0,0,0,0,0,0,1)
  -#define IEEE_MAC_LOBIT_DEC BM_OCTET(0,0,0,0,0,0,1,0)
  +        /* dump as colon-seperated hexadecimal byte-string */
  +        str_rsprintf(out,
  +            "content: %02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X\n"
  +            "         (%s)\n",
  +            (unsigned int)tmp_bin[0],  (unsigned int)tmp_bin[1],  (unsigned int)tmp_bin[2],
  +            (unsigned int)tmp_bin[3],  (unsigned int)tmp_bin[4],  (unsigned int)tmp_bin[5],
  +            (unsigned int)tmp_bin[6],  (unsigned int)tmp_bin[7],  (unsigned int)tmp_bin[8],
  +            (unsigned int)tmp_bin[9],  (unsigned int)tmp_bin[10], (unsigned int)tmp_bin[11],
  +            (unsigned int)tmp_bin[12], (unsigned int)tmp_bin[13], (unsigned int)tmp_bin[14],
  +            (unsigned int)tmp_bin[15], content);
  +    }
  +
  +    /* provide result */
  +    out_len = strlen(out_ptr)+1;
  +    if (*data_ptr == NULL) {
  +        *data_ptr = (void *)out_ptr;
  +        if (data_len != NULL)
  +            *data_len = out_len;
  +    }
  +    else {
  +        if (data_len == NULL)
  +            return UUID_RC_ARG;
  +        if (*data_len < out_len)
  +            return UUID_RC_MEM;
  +        memcpy(*data_ptr, &out_ptr, out_len);
  +    }
  +
  +    return UUID_RC_OK;
  +}
  +
  +/* UUID importing */
  +uuid_rc_t uuid_import(uuid_t *uuid, uuid_fmt_t fmt, const void *data_ptr, size_t data_len)
  +{
  +    uuid_rc_t rc;
  +
  +    /* sanity check argument(s) */
  +    if (uuid == NULL || data_ptr == NULL)
  +        return UUID_RC_ARG;
  +
  +    /* dispatch into format-specific functions */
  +    switch (fmt) {
  +        case UUID_FMT_BIN: rc = uuid_import_bin(uuid, data_ptr, data_len); break;
  +        case UUID_FMT_STR: rc = uuid_import_str(uuid, data_ptr, data_len); break;
  +        case UUID_FMT_TXT: rc = UUID_RC_IMP; /* not implemented */ break;
  +        default:           rc = UUID_RC_ARG;
  +    }
  +
  +    return rc;
  +}
  +
  +/* UUID exporting */
  +uuid_rc_t uuid_export(uuid_t *uuid, uuid_fmt_t fmt, void **data_ptr, size_t *data_len)
  +{
  +    uuid_rc_t rc;
  +
  +    /* sanity check argument(s) */
  +    if (uuid == NULL || data_ptr == NULL)
  +        return UUID_RC_ARG;
  +
  +    /* dispatch into format-specific functions */
  +    switch (fmt) {
  +        case UUID_FMT_BIN: rc = uuid_export_bin(uuid, data_ptr, data_len); break;
  +        case UUID_FMT_STR: rc = uuid_export_str(uuid, data_ptr, data_len); break;
  +        case UUID_FMT_TXT: rc = uuid_export_txt(uuid, data_ptr, data_len); break;
  +        default:           rc = UUID_RC_ARG;
  +    }
  +
  +    return rc;
  +}
  +
  +/* INTERNAL: brand UUID with version and variant */
  +static void uuid_brand(uuid_t *uuid, int version)
  +{
  +    /* set version (as given) */
  +    uuid->obj.time_hi_and_version &= BM_MASK(11,0);
  +    uuid->obj.time_hi_and_version |= BM_SHL((uuid_uint16_t)version, 12);
  +
  +    /* set variant (always DCE 1.1 only) */
  +    uuid->obj.clock_seq_hi_and_reserved &= BM_MASK(5,0);
  +    uuid->obj.clock_seq_hi_and_reserved |= BM_SHL(0x02, 6);
  +    return;
  +}
   
   /* INTERNAL: generate UUID version 1: time, clock and node based */
   static uuid_rc_t uuid_generate_v1(uuid_t *uuid, unsigned int mode, va_list ap)
  @@ -625,6 +863,19 @@
       return UUID_RC_OK;
   }
   
  +/* set UUID object to represents "Nil UUID" */
  +uuid_rc_t uuid_nil(uuid_t *uuid)
  +{
  +    /* argument sanity check */
  +    if (uuid == NULL)
  +        return UUID_RC_ARG;
  +
  +    /* clear all octets to create "Nil UUID" */
  +    memset((void *)&(uuid->obj), '\0', sizeof(uuid->obj));
  +
  +    return UUID_RC_OK;
  +}
  +
   /* INTERNAL: UUID Namespace Ids as pre-defined by draft-leach-uuids-guids-01.txt
      (defined here as network byte ordered octet stream for direct MD5 feeding) */
   static struct {
  @@ -666,10 +917,10 @@
           /* custom namespace via UUID string representation */
           if ((rc = uuid_create(&uuid_object)) != UUID_RC_OK)
               return rc;
  -        if ((rc = uuid_parse(uuid_object, ns)) != UUID_RC_OK)
  +        if ((rc = uuid_import_str(uuid_object, ns, strlen(ns))) != UUID_RC_OK)
               return rc;
           uuid_octets = (void *)&(uuid_object->obj);
  -        uuid_pack(uuid_object, &uuid_octets);
  +        uuid_export_bin(uuid_object, &uuid_octets, NULL);
           md5_update(uuid->md5, uuid_octets, UUID_LEN_BIN);
           uuid_destroy(uuid_object);
       }
  @@ -697,9 +948,9 @@
       md5_store(uuid->md5, &uuid_octets, NULL);
   
       /* fulfill requirement of standard and convert UUID data into
  -       local/host byte order (this uses fact that uuid_unpack() is
  +       local/host byte order (this uses fact that uuid_import_bin() is
          able to operate in-place!) */
  -    uuid_unpack(uuid, (void *)&(uuid->obj));
  +    uuid_import_bin(uuid, (void *)&(uuid->obj), UUID_LEN_BIN);
   
       /* brand UUID with version and variant */
       uuid_brand(uuid, 3);
  @@ -742,172 +993,6 @@
       va_end(ap);
   
       return rc;
  -}
  -
  -/* decoding tables */
  -static struct {
  -    uuid_uint8_t num;
  -    const char *desc;
  -} uuid_dectab_variant[] = {
  -    { BM_OCTET(0,0,0,0,0,0,0,0), "reserved (NCS backward compatible)" },
  -    { BM_OCTET(1,0,0,0,0,0,0,0), "DCE 1.1, ISO/IEC 11578:1996" },
  -    { BM_OCTET(1,1,0,0,0,0,0,0), "reserved (Microsoft GUID)" },
  -    { BM_OCTET(1,1,1,0,0,0,0,0), "reserved (future use)" }
  -};
  -static struct {
  -    int num;
  -    const char *desc;
  -} uuid_dectab_version[] = {
  -    { 1, "time and node based" },
  -    { 3, "name based" },
  -    { 4, "random data based" }
  -};
  -
  -/* dump UUID object as descriptive text */
  -uuid_rc_t uuid_dump(uuid_t *uuid, char **str)
  -{
  -    const char *version;
  -    const char *variant;
  -    uuid_rc_t rc;
  -    uuid_uint8_t tmp8;
  -    uuid_uint16_t tmp16;
  -    uuid_uint32_t tmp32;
  -    char string[UUID_LEN_STR+1];
  -    char *s;
  -    unsigned int i;
  -    ui64_t t;
  -    ui64_t offset;
  -    int t_nsec;
  -    int t_usec;
  -    time_t t_sec;
  -    char buf[19+1]; /* YYYY-MM-DD HH:MM:SS */
  -    char *content;
  -    struct tm *tm;
  -    int isnil;
  -    uuid_uint8_t tmp[UUID_LEN_BIN];
  -    void *tmp_ptr;
  -
  -    /* sanity check argument(s) */
  -    if (uuid == NULL || str == NULL)
  -        return UUID_RC_ARG;
  -
  -    /* initialize output buffer */
  -    *str = NULL;
  -
  -    /* decode into string representation */
  -    s = string;
  -    uuid_format(uuid, &s);
  -    str_rsprintf(str, "UUID:    %s\n", s);
  -
  -    /* check for special case of "Nil UUID" */
  -    if ((rc = uuid_isnil(uuid, &isnil)) != UUID_RC_OK)
  -        return rc;
  -
  -    /* decode UUID variant */
  -    tmp8 = uuid->obj.clock_seq_hi_and_reserved;
  -    if (isnil)
  -        variant = "n.a.";
  -    else {
  -        variant = "unknown";
  -        for (i = 7; i >= 0; i--) {
  -            if ((tmp8 & BM_BIT(i,1)) == 0) {
  -                tmp8 &= ~BM_MASK(i,0);
  -                break;
  -            }
  -        }
  -        for (i = 0; i < sizeof(uuid_dectab_variant)/sizeof(uuid_dectab_variant[0]); i++) {
  -            if (uuid_dectab_variant[i].num == tmp8) {
  -                variant = uuid_dectab_variant[i].desc;
  -                break;
  -            }
  -        }
  -    }
  -    str_rsprintf(str, "variant: %s\n", variant);
  -
  -    /* decode UUID version */
  -    tmp16 = (BM_SHR(uuid->obj.time_hi_and_version, 12) & BM_MASK(3,0));
  -    if (isnil)
  -        version = "n.a.";
  -    else {
  -        version = "unknown";
  -        for (i = 0; i < sizeof(uuid_dectab_version)/sizeof(uuid_dectab_version[0]); i++) {
  -            if (uuid_dectab_version[i].num == (int)tmp16) {
  -                version = uuid_dectab_version[i].desc;
  -                break;
  -            }
  -        }
  -    }
  -    str_rsprintf(str, "version: %d (%s)\n", (int)tmp16, version);
  -
  -    /*
  -     * decode UUID content
  -     */
  -
  -    if (tmp8 == BM_OCTET(1,0,0,0,0,0,0,0) && tmp16 == 1) {
  -        /* decode DCE 1.1 version 1 UUID */
  -
  -        /* decode system time */
  -        t = ui64_rol(ui64_n2i((unsigned long)(uuid->obj.time_hi_and_version & BM_MASK(11,0))), 48, NULL),
  -        t = ui64_or(t, ui64_rol(ui64_n2i((unsigned long)(uuid->obj.time_mid)), 32, NULL));
  -        t = ui64_or(t, ui64_n2i((unsigned long)(uuid->obj.time_low)));
  -        offset = ui64_s2i(UUID_TIMEOFFSET, NULL, 16);
  -        t = ui64_sub(t, offset, NULL);
  -        t = ui64_divn(t, 10, &t_nsec);
  -        t = ui64_divn(t, 1000000, &t_usec);
  -        t_sec = (time_t)ui64_i2n(t);
  -        tm = gmtime(&t_sec);
  -        strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", tm);
  -        str_rsprintf(str, "content: time:  %s.%06d.%d UTC\n", buf, t_usec, t_nsec);
  -
  -        /* decode clock sequence */
  -        tmp32 = ((uuid->obj.clock_seq_hi_and_reserved & BM_MASK(5,0)) << 8)
  -                + uuid->obj.clock_seq_low;
  -        str_rsprintf(str, "         clock: %ld (usually random)\n", (long)tmp32);
  -
  -        /* decode node MAC address */
  -        str_rsprintf(str, "         node:  %02x:%02x:%02x:%02x:%02x:%02x (%s %s)\n",
  -            (unsigned int)uuid->obj.node[0],
  -            (unsigned int)uuid->obj.node[1],
  -            (unsigned int)uuid->obj.node[2],
  -            (unsigned int)uuid->obj.node[3],
  -            (unsigned int)uuid->obj.node[4],
  -            (unsigned int)uuid->obj.node[5],
  -            (uuid->obj.node[0] & IEEE_MAC_LOBIT_DEC ? "local" : "global"),
  -            (uuid->obj.node[0] & IEEE_MAC_MCBIT_DEC ? "multicast" : "unicast"));
  -    }
  -    else {
  -        /* decode anything else as hexadecimal byte-string only */
  -
  -        /* determine annotational hint */
  -        content = "not decipherable, because unknown UUID version";
  -        if (isnil)
  -            content = "special case of DCE 1.1 Nil UUID";
  -        else if (tmp16 == 3)
  -            content = "not decipherable, because message digest only";
  -        else if (tmp16 == 4)
  -            content = "no semantics, because random data only";
  -
  -        /* pack UUID into binary representation */
  -        tmp_ptr = tmp;
  -        if ((rc = uuid_pack(uuid, &tmp_ptr)) != UUID_RC_OK)
  -            return rc;
  -
  -        /* mask out version and variant parts */
  -        tmp[6] &= BM_MASK(3,0);
  -        tmp[8] &= BM_MASK(5,0);
  -
  -        /* dump as colon-seperated hexadecimal byte-string */
  -        str_rsprintf(str,
  -            "content: %02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X\n"
  -            "         (%s)\n",
  -            (unsigned int)tmp[0],  (unsigned int)tmp[1],  (unsigned int)tmp[2],  (unsigned int)tmp[3],
  -            (unsigned int)tmp[4],  (unsigned int)tmp[5],  (unsigned int)tmp[6],  (unsigned int)tmp[7],
  -            (unsigned int)tmp[8],  (unsigned int)tmp[9],  (unsigned int)tmp[10], (unsigned int)tmp[11],
  -            (unsigned int)tmp[12], (unsigned int)tmp[13], (unsigned int)tmp[14], (unsigned int)tmp[15],
  -            content);
  -    }
  -
  -    return UUID_RC_OK;
   }
   
   /* translate UUID API error code into corresponding error string */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.h
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 uuid.h
  --- ossp-pkg/uuid/uuid.h	18 Jan 2004 19:22:54 -0000	1.12
  +++ ossp-pkg/uuid/uuid.h	18 Jan 2004 19:59:12 -0000	1.13
  @@ -51,7 +51,8 @@
       UUID_RC_ARG = 1,
       UUID_RC_MEM = 2,
       UUID_RC_SYS = 3,
  -    UUID_RC_INT = 4
  +    UUID_RC_INT = 4,
  +    UUID_RC_IMP = 5
   } uuid_rc_t;
   
   /* generation mode flags */
  @@ -62,6 +63,13 @@
       UUID_MCASTRND      = (1 << 3)
   };
   
  +/* import/export formats */
  +typedef enum {
  +    UUID_FMT_BIN = 0, /* import/export */
  +    UUID_FMT_STR = 1, /* import/export */
  +    UUID_FMT_TXT = 2  /* export only */
  +} uuid_fmt_t;
  +
   /* abstract data type */
   struct uuid_st;
   typedef struct uuid_st uuid_t;
  @@ -69,25 +77,20 @@
   /* object handling */
   extern uuid_rc_t  uuid_create   (uuid_t **_uuid);
   extern uuid_rc_t  uuid_destroy  (uuid_t  *_uuid);
  +
  +/* UUID generation */
   extern uuid_rc_t  uuid_nil      (uuid_t  *_uuid);
  +extern uuid_rc_t  uuid_generate (uuid_t  *_uuid, unsigned int _mode, ...);
   
   /* UUID comparison */
   extern uuid_rc_t  uuid_isnil    (uuid_t  *_uuid,                 int *_result);
   extern uuid_rc_t  uuid_compare  (uuid_t  *_uuid, uuid_t *_uuid2, int *_result);
   
  -/* UUID binary representation handling */
  -extern uuid_rc_t  uuid_unpack   (uuid_t  *_uuid, const void  *_buf);
  -extern uuid_rc_t  uuid_pack     (uuid_t  *_uuid,       void **_buf);
  -
  -/* UUID string representation handling */
  -extern uuid_rc_t  uuid_parse    (uuid_t  *_uuid, const char  *_str);
  -extern uuid_rc_t  uuid_format   (uuid_t  *_uuid,       char **_str);
  -
  -/* UUID generation and dumping */
  -extern uuid_rc_t  uuid_generate (uuid_t  *_uuid, unsigned int _mode, ...);
  -extern uuid_rc_t  uuid_dump     (uuid_t  *_uuid, char **_str);
  +/* UUID import/export */
  +extern uuid_rc_t  uuid_import   (uuid_t  *_uuid, uuid_fmt_t _fmt, const void  *_data_ptr, size_t  _data_len);
  +extern uuid_rc_t  uuid_export   (uuid_t  *_uuid, uuid_fmt_t _fmt,       void **_data_ptr, size_t *_data_len);
   
  -/* error handling */
  +/* library error handling */
   extern char      *uuid_error    (uuid_rc_t _rc);
   
   DECLARATION_END
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	15 Jan 2004 16:23:34 -0000	1.10
  +++ ossp-pkg/uuid/uuid.pod	18 Jan 2004 19:59:12 -0000	1.11
  @@ -112,8 +112,31 @@
   A UUID has a variant and version. The variant defines the layout of the
   UUID. The version defines the content of the UUID. The UUID variant
   supported in B<OSSP uuid> is the DCE 1.1 variant only. The DCE 1.1 UUID
  -variant versions supported in B<OSSP uuid> are version 1 (time and node
  -based), version 3 (name based) and version 4 (random data based).
  +variant versions supported in B<OSSP uuid> are:
  +
  +=over 4
  +
  +=item B<Version 1> (time and node based)
  +
  +These are the classical UUIDs, created out of a 60-bit system time,
  +a 14-bit local clock sequence and 48-bit system MAC address. The MAC
  +address can be either the real one of a physical network interface card
  +(NIC) or a random multi-cast MAC address. Version 1 UUIDs are usually
  +used as one-time global unique identifiers.
  +
  +=item B<Version 3> (name based)
  +
  +These are UUIDs which are based on the 128-bit MD5 message digest of the
  +concatenation of a 128-bit namespace UUID and a name string of arbitrary
  +length. Version 3 UUIDs are usually used for non-unique but repeatable
  +message digest identifiers.
  +
  +=item B<Version 4> (random data based)
  +
  +These are UUIDs which are based on just 128-bit of random data. Version
  +4 UUIDs are usually used as one-time local unique identifiers.
  +
  +=back
   
   =head2 UUID Uniqueness
   
  @@ -173,6 +196,14 @@
   The possible numerical return-codes of API functions.
   Use B<uuid_error>() to translate them into string versions.
   
  +=item B<UUID_FMT_BIN>, B<UUID_FMT_STR>, B<UUID_FMT_TXT>
  +
  +The I<fmt> formats for use with B<uuid_import>() and B<uuid_export>().
  +The B<UUID_FMT_BIN> indicates the UUID binary representation (of
  +length B<UUID_LEN_BIN>), the B<UUID_FMT_STR> indicates the UUID string
  +representation (of length B<UUID_LEN_STR>) and the B<UUID_FMT_TXT>
  +indicates the textual description (of arbitrary length) of a UUID.
  +
   =back
   
   =head2 FUNCTIONS
  @@ -209,30 +240,29 @@
   smaller than I<uuid2>, C<0> if I<uuid1> is equal to I<uuid2>
   and C<+1> if I<uuid1> is greater than I<uuid2>.
   
  -=item uuid_rc_t B<uuid_unpack>(uuid_t *I<uuid>, const void *I<buf>);
  -
  -Imports the value of the UUID in I<uuid> by unpacking the binary
  -representation of length C<UUID_LEN_BIN> starting at I<buf>.
  -
  -=item uuid_rc_t B<uuid_pack>(uuid_t *I<uuid>, void **I<buf>);
  -
  -Exports the value of the UUID in I<uuid> by packing it into the
  -binary representation and storing it (with length C<UUID_LEN_BIN>)
  -at I<buf>. If I<buf> points to a C<NULL> pointer, a buffer of length
  -C<UUID_LEN_BIN> is allocated and stored into C<*>I<buf> first.
  -
  -=item uuid_rc_t B<uuid_parse>(uuid_t  *I<uuid>, const char  *I<str>);
   
  -Imports the value of the UUID in I<uuid> by parsing the string
  -representation of length C<UUID_LEN_STR> starting at I<str>.
  +=item uuid_rc_t B<uuid_import>(uuid_t *I<uuid>, uuid_fmt_t I<fmt>, const void *I<data_ptr>, size_t I<data_len>);
   
  -=item uuid_rc_t B<uuid_format>(uuid_t *I<uuid>, char **I<str>);
  -
  -Exports the value of the UUID in I<uuid> by formatting it into the
  -C<NUL>-terminated string representation and storing it (with length
  -C<UUID_LEN_STR>+1) at I<str>. If I<str> points to a C<NULL> pointer,
  -a buffer of length C<UUID_LEN_STR>+1 is allocated and stored into
  -C<*>I<str> first.
  +Imports a UUID I<uuid> from an external representation of format I<fmt>.
  +The data is read from the buffer at I<data_ptr> which contains at least
  +I<data_len> bytes.
  +
  +The format of the external representation is specified by I<fmt> and the
  +minimum expected length in I<data_len> depends on it. Valid values for
  +I<fmt> are B<UUID_FMT_BIN> and B<UUID_FMT_STR>.
  +
  +=item uuid_rc_t B<uuid_export>(uuid_t *I<uuid>, uuid_fmt_t I<fmt>, void **I<data_ptr>, size_t *I<data_len>);
  +
  +Exports a UUID I<uuid> into an external representation of format I<fmt>.
  +The data is written to the buffer at C<*>I<data_ptr> which has room
  +for at least C<*>I<data_len> bytes. If C<*>I<data_ptr> is C<NULL>,
  +a new buffer is allocated (and I<data_len> ignored as input). If
  +I<data_len> is not C<NULL>, the number of written bytes are stored into
  +C<*>I<data_len>.
  +
  +The format of the external representation is specified by I<fmt> and the
  +minimum required length in C<*>I<data_len> depends on it. Valid values
  +for I<fmt> are B<UUID_FMT_BIN>, B<UUID_FMT_STR> and B<UUID_FMT_TXT>.
   
   =item uuid_rc_t B<uuid_generate>(uuid_t *I<uuid>, unsigned int I<mode>, ...);
   
  @@ -258,25 +288,44 @@
   of version 4 is generated. The UUID is generated out of 128-bit random
   data.
   
  -=item uuid_rc_t B<uuid_dump>(uuid_t *I<uuid>, char **I<str>);
  -
  -This decodes the loaded UUID in I<uuid> and dumps a textual description
  -into a string buffer which is allocated under C<*>I<str>. The output has
  -the format (for DCE 1.1 v1 UUIDs):
  -
  - UUID:    01c47915-4777-11d8-bc70-0090272ff725
  - variant: DCE 1.1, ISO/IEC 11578:1996
  - version: 1 (time and node based)
  - content: time:  2004-01-15 16:22:26.376322.1 UTC
  -          clock: 15472 (usually random)
  -          node:  00:90:27:2f:f7:25 (global unicast)
  -
   =item char *B<uuid_error>(uuid_rc_t I<rc>);
   
   Returns a constant string representation corresponding to the
   return-code I<rc> for use in displaying B<OSSP uuid> errors.
   
   =back
  +
  +=head1 EXAMPLE
  +
  +The following shows an example usage of the API. Error handling is
  +omitted for code simplification and has to be re-added for production
  +code.
  +
  + /* generate a DCE 1.1 v1 UUID from system environment */
  + char *uuid_v1(void) 
  + {
  +     uuid_t *uuid;
  +     char *str = NULL;
  +
  +     uuid_create(&uuid);
  +     uuid_generate(uuid, UUID_VERSION1);
  +     uuid_export(uuid, UUID_FMT_STR, &str, NULL);
  +     uuid_destroy(uuid);
  +     return str;
  + }
  +
  + /* generate a DCE 1.1 v3 UUID from an URL */
  + char *uuid_v3(const char *url) 
  + {
  +     uuid_t *uuid;
  +     char *str = NULL;
  +
  +     uuid_create(&uuid);
  +     uuid_generate(uuid, UUID_VERSION3, "URL", url);
  +     uuid_export(uuid, UUID_FMT_STR, &str, NULL);
  +     uuid_destroy(uuid);
  +     return str;
  + }
   
   =head1 SEE ALSO
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 uuid_cli.c
  --- ossp-pkg/uuid/uuid_cli.c	15 Jan 2004 13:45:18 -0000	1.10
  +++ ossp-pkg/uuid/uuid_cli.c	18 Jan 2004 19:59:13 -0000	1.11
  @@ -82,6 +82,7 @@
       int decode;
       char *cp;
       void *vp;
  +    size_t n;
       unsigned int version;
   
       /* command line parsing */
  @@ -148,9 +149,10 @@
               error(1, "uuid_create: %s", uuid_error(rc));
           if (strlen(argv[0]) != UUID_LEN_STR)
               error(1, "invalid length of UUID string representation");
  -        if ((rc = uuid_parse(uuid, argv[0])) != UUID_RC_OK)
  +        if ((rc = uuid_import(uuid, UUID_FMT_STR, argv[0], strlen(argv[0]))) != UUID_RC_OK)
               error(1, "uuid_parse: %s", uuid_error(rc));
  -        if ((rc = uuid_dump(uuid, &cp)) != UUID_RC_OK)
  +        cp = NULL;
  +        if ((rc = uuid_export(uuid, UUID_FMT_TXT, (void **)&cp, NULL)) != UUID_RC_OK)
               error(1, "uuid_dump: %s", uuid_error(rc));
           fprintf(stdout, "%s", cp);
           free(cp);
  @@ -169,7 +171,7 @@
               /* load initial UUID for setting old generator state */
               if (strlen(argv[0]) != UUID_LEN_STR)
                   error(1, "invalid length of UUID string representation");
  -            if ((rc = uuid_parse(uuid, argv[0])) != UUID_RC_OK)
  +            if ((rc = uuid_import(uuid, UUID_FMT_STR, argv[0], strlen(argv[0]))) != UUID_RC_OK)
                   error(1, "uuid_parse: %s", uuid_error(rc));
           }
           for (i = 0; i < count; i++) {
  @@ -185,14 +187,14 @@
                   error(1, "uuid_generate: %s", uuid_error(rc));
               if (raw) {
                   vp = NULL;
  -                if ((rc = uuid_pack(uuid, &vp)) != UUID_RC_OK)
  -                    error(1, "uuid_pack: %s", uuid_error(rc));
  -                fwrite(vp, UUID_LEN_BIN, 1, fp);
  +                if ((rc = uuid_export(uuid, UUID_FMT_BIN, &vp, &n)) != UUID_RC_OK)
  +                    error(1, "uuid_export: %s", uuid_error(rc));
  +                fwrite(vp, n, 1, fp);
                   free(vp);
               }
               else {
                   cp = NULL;
  -                if ((rc = uuid_format(uuid, &cp)) != UUID_RC_OK)
  +                if ((rc = uuid_export(uuid, UUID_FMT_STR, (void **)&cp, &n)) != UUID_RC_OK)
                       error(1, "uuid_format: %s", uuid_error(rc));
                   fprintf(fp, "%s\n", cp);
                   free(cp);
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jan 18 21:00:09 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4F71077506; Sun, 18 Jan 2004 21:00:09 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ TODO
Message-Id: <20040118200009.4F71077506@mail.ossp.org>
Date: Sun, 18 Jan 2004 21:00:09 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Jan-2004 21:00:09
  Branch: HEAD                             Handle: 2004011820000800

  Modified files:
    ossp-pkg/uuid           TODO

  Log:
    remember issues

  Summary:
    Revision    Changes     Path
    1.16        +2  -1      ossp-pkg/uuid/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/TODO
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 TODO
  --- ossp-pkg/uuid/TODO	18 Jan 2004 19:59:12 -0000	1.15
  +++ ossp-pkg/uuid/TODO	18 Jan 2004 20:00:08 -0000	1.16
  @@ -1,6 +1,7 @@
   TODO
  -- API versioning
  +- add versioning to API itself
   - why are nanoseconds always "1"?!
  +- check UUID_LEN_STR+1 handling for consistency
   CANDO
   - getopt_long support
   - a more sophisticated test suite
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jan 18 21:23:40 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6E5D177506; Sun, 18 Jan 2004 21:23:40 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ devtool.conf
Message-Id: <20040118202340.6E5D177506@mail.ossp.org>
Date: Sun, 18 Jan 2004 21:23:40 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Jan-2004 21:23:40
  Branch: HEAD                             Handle: 2004011820234000

  Modified files:
    ossp-pkg/uuid           devtool.conf

  Log:
    add snapshot rolling support

  Summary:
    Revision    Changes     Path
    1.3         +24 -0      ossp-pkg/uuid/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.conf
  --- ossp-pkg/uuid/devtool.conf	18 Jan 2004 20:19:23 -0000	1.2
  +++ ossp-pkg/uuid/devtool.conf	18 Jan 2004 20:23:40 -0000	1.3
  @@ -49,6 +49,30 @@
       echo "[...]"
       gunzip <uuid-${V}.tar.gz | tar tvf - | tail -10
   
  +%snap
  +    echo "+++ removing old tarballs"
  +    rm -f uuid-*.tar.gz
  +    echo "+++ generating"
  +    ./devtool autoclean
  +    ./devtool autogen
  +    echo "+++ configuring"
  +    ./configure
  +    echo "+++ building"
  +    make clean all man
  +    echo "+++ cleaning"
  +    make distclean
  +    echo "+++ fixing"
  +    ./shtool fixperm -v .
  +    echo "+++ rolling"
  +    D=`date '+%Y%m%d'`
  +    ./shtool tarball -o uuid-SNAP-${D}.tar.gz -d uuid-SNAP-${D} -u ossp -g ossp \
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*,*.tar.gz,^#.*,.*~$' -c 'gzip --best' .
  +    ls -l uuid-SNAP-${D}.tar.gz
  +    echo "+++ testing"
  +    gunzip <uuid-SNAP-${D}.tar.gz | tar tvf - | head -10
  +    echo "[...]"
  +    gunzip <uuid-SNAP-${D}.tar.gz | tar tvf - | tail -10
  +
   %upload
       echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/uuid/"
       V=`./shtool version -l c -d short uuid_vers.h`
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 19 10:11:00 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 87492774EF; Mon, 19 Jan 2004 10:11:00 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid_cli.c
Message-Id: <20040119091100.87492774EF@mail.ossp.org>
Date: Mon, 19 Jan 2004 10:11:00 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-Jan-2004 10:11:00
  Branch: HEAD                             Handle: 2004011909110000

  Modified files:
    ossp-pkg/uuid           uuid_cli.c

  Log:
    cleanup pointer casting by using a void pointer

  Summary:
    Revision    Changes     Path
    1.12        +8  -9      ossp-pkg/uuid/uuid_cli.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.c
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 uuid_cli.c
  --- ossp-pkg/uuid/uuid_cli.c	18 Jan 2004 19:59:13 -0000	1.11
  +++ ossp-pkg/uuid/uuid_cli.c	19 Jan 2004 09:11:00 -0000	1.12
  @@ -80,7 +80,6 @@
       int iterate;
       int raw;
       int decode;
  -    char *cp;
       void *vp;
       size_t n;
       unsigned int version;
  @@ -151,11 +150,11 @@
               error(1, "invalid length of UUID string representation");
           if ((rc = uuid_import(uuid, UUID_FMT_STR, argv[0], strlen(argv[0]))) != UUID_RC_OK)
               error(1, "uuid_parse: %s", uuid_error(rc));
  -        cp = NULL;
  -        if ((rc = uuid_export(uuid, UUID_FMT_TXT, (void **)&cp, NULL)) != UUID_RC_OK)
  +        vp = NULL;
  +        if ((rc = uuid_export(uuid, UUID_FMT_TXT, &vp, NULL)) != UUID_RC_OK)
               error(1, "uuid_dump: %s", uuid_error(rc));
  -        fprintf(stdout, "%s", cp);
  -        free(cp);
  +        fprintf(stdout, "%s", (char *)vp);
  +        free(vp);
           if ((rc = uuid_destroy(uuid)) != UUID_RC_OK)
               error(1, "uuid_destroy: %s", uuid_error(rc));
       }
  @@ -193,11 +192,11 @@
                   free(vp);
               }
               else {
  -                cp = NULL;
  -                if ((rc = uuid_export(uuid, UUID_FMT_STR, (void **)&cp, &n)) != UUID_RC_OK)
  +                vp = NULL;
  +                if ((rc = uuid_export(uuid, UUID_FMT_STR, &vp, &n)) != UUID_RC_OK)
                       error(1, "uuid_format: %s", uuid_error(rc));
  -                fprintf(fp, "%s\n", cp);
  -                free(cp);
  +                fprintf(fp, "%s\n", (char *)vp);
  +                free(vp);
               }
           }
           if ((rc = uuid_destroy(uuid)) != UUID_RC_OK)
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 19 10:17:30 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F3A98774D9; Mon, 19 Jan 2004 10:17:28 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.c
Message-Id: <20040119091728.F3A98774D9@mail.ossp.org>
Date: Mon, 19 Jan 2004 10:17:28 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-Jan-2004 10:17:28
  Branch: HEAD                             Handle: 2004011909172700

  Modified files:
    ossp-pkg/uuid           uuid.c

  Log:
    fix typos

  Summary:
    Revision    Changes     Path
    1.38        +3  -3      ossp-pkg/uuid/uuid.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 uuid.c
  --- ossp-pkg/uuid/uuid.c	18 Jan 2004 20:19:23 -0000	1.37
  +++ ossp-pkg/uuid/uuid.c	19 Jan 2004 09:17:27 -0000	1.38
  @@ -286,7 +286,7 @@
       if (uuid == NULL || data_ptr == NULL || data_len < UUID_LEN_BIN)
           return UUID_RC_ARG;
   
  -    /* treat input data_ptrfer as octet stream */
  +    /* treat input data buffer as octet stream */
       in = (const uuid_uint8_t *)data_ptr;
   
       /* unpack "time_low" field */
  @@ -332,7 +332,7 @@
       if (uuid == NULL || data_ptr == NULL)
           return UUID_RC_ARG;
   
  -    /* optionally allocate octet data_ptrfer */
  +    /* optionally allocate octet data buffer */
       if (*data_ptr == NULL) {
           if ((*data_ptr = malloc(sizeof(uuid_t))) == NULL)
               return UUID_RC_MEM;
  @@ -347,7 +347,7 @@
           *data_len = UUID_LEN_BIN;
       }
   
  -    /* treat output data_ptrfer as octet stream */
  +    /* treat output data buffer as octet stream */
       out = (uuid_uint8_t *)(*data_ptr);
   
       /* pack "time_low" field */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 19 10:26:58 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4320E774D9; Mon, 19 Jan 2004 10:26:56 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.c
Message-Id: <20040119092656.4320E774D9@mail.ossp.org>
Date: Mon, 19 Jan 2004 10:26:56 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-Jan-2004 10:26:56
  Branch: HEAD                             Handle: 2004011909265500

  Modified files:
    ossp-pkg/uuid           uuid.c

  Log:
    use meta-API also internally to be consistent

  Summary:
    Revision    Changes     Path
    1.39        +4  -4      ossp-pkg/uuid/uuid.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.38 -r1.39 uuid.c
  --- ossp-pkg/uuid/uuid.c	19 Jan 2004 09:17:27 -0000	1.38
  +++ ossp-pkg/uuid/uuid.c	19 Jan 2004 09:26:55 -0000	1.39
  @@ -641,7 +641,7 @@
           /* pack UUID into binary representation */
           tmp_ptr = (void *)&tmp_bin;
           tmp_len = sizeof(tmp_bin);
  -        if ((rc = uuid_export_bin(uuid, &tmp_ptr, &tmp_len)) != UUID_RC_OK)
  +        if ((rc = uuid_export(uuid, UUID_FMT_BIN, &tmp_ptr, &tmp_len)) != UUID_RC_OK)
               return rc;
   
           /* mask out version and variant parts */
  @@ -918,10 +918,10 @@
           /* custom namespace via UUID string representation */
           if ((rc = uuid_create(&uuid_object)) != UUID_RC_OK)
               return rc;
  -        if ((rc = uuid_import_str(uuid_object, ns, strlen(ns))) != UUID_RC_OK)
  +        if ((rc = uuid_import(uuid_object, UUID_FMT_STR, ns, strlen(ns))) != UUID_RC_OK)
               return rc;
           uuid_octets = (void *)&(uuid_object->obj);
  -        uuid_export_bin(uuid_object, &uuid_octets, NULL);
  +        uuid_export(uuid_object, UUID_FMT_BIN, &uuid_octets, NULL);
           md5_update(uuid->md5, uuid_octets, UUID_LEN_BIN);
           uuid_destroy(uuid_object);
       }
  @@ -951,7 +951,7 @@
       /* fulfill requirement of standard and convert UUID data into
          local/host byte order (this uses fact that uuid_import_bin() is
          able to operate in-place!) */
  -    uuid_import_bin(uuid, (void *)&(uuid->obj), UUID_LEN_BIN);
  +    uuid_import(uuid, UUID_FMT_BIN, (void *)&(uuid->obj), UUID_LEN_BIN);
   
       /* brand UUID with version and variant */
       uuid_brand(uuid, 3);
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 19 13:08:29 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A8130774EF; Mon, 19 Jan 2004 13:08:28 +0100 (CET)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.c
Message-Id: <20040119120828.A8130774EF@mail.ossp.org>
Date: Mon, 19 Jan 2004 13:08:28 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   19-Jan-2004 13:08:28
  Branch: HEAD                             Handle: 2004011912082800

  Modified files:
    ossp-pkg/uuid           uuid.c

  Log:
    edited comments for grammar and usage corrections, and formatted text
    as well

  Summary:
    Revision    Changes     Path
    1.40        +20 -21     ossp-pkg/uuid/uuid.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.39 -r1.40 uuid.c
  --- ossp-pkg/uuid/uuid.c	19 Jan 2004 09:26:55 -0000	1.39
  +++ ossp-pkg/uuid/uuid.c	19 Jan 2004 12:08:28 -0000	1.40
  @@ -79,40 +79,39 @@
        never be a conflict between UUIDs generated by machines with and
        without network cards."
   
  -   This clearly explains that the intention is to use IEEE 802 multicast
  +   This passage clearly explains the intention to use IEEE 802 multicast
      addresses. Unfortunately, it incorrectly explains how to implement
  -   this! It actually is the "*LEAST* significant bit of the first octet
  -   of the node ID" in a memory and hexadecimal string representation of
  -   a 48-bit IEEE 802 MAC address.
  +   this! It should instead specify the "*LEAST* significant bit of the
  +   first octet of the node ID" as the multicast bit in a memory and
  +   hexadecimal string representation of a 48-bit IEEE 802 MAC address.
   
      Unfortunately, even the reference implementation included in the
      expired IETF "draft-leach-uuids-guids-01" incorrectly set the
      multicast bit with an OR bit operation and an incorrect mask of
  -   0x80. Hence, multiple other UUID implementations can be found on the
  -   Internet which inherited this bug.
  +   0x80. Hence, several other UUID implementations found on the
  +   Internet have inherited this bug.
   
      Luckily, neither DCE 1.1 nor ISO/IEC 11578:1996 are affected by this
      problem. They disregard the topic of missing IEEE 802 addresses
      entirely, and thus avoid adopting this bug from the original draft
      and code ;-)
   
  -   The reason for the bug in the standards seems to be that the
  -   multicast bit actually is the *MOST* significant bit in IEEE 802.3
  -   (Ethernet) _transmission order_ of an IEEE 802 MAC address. The
  -   authors seem to be confused by this and especially were not aware
  -   that the bitwise order of an octet from a MAC address memory and
  -   hexadecimal string representation is still always from left (MSB, bit
  -   7) to right (LSB, bit 0).
  +   It seems that this standards bug arises from a false interpretation,
  +   as the multicast bit is actually is the *MOST* significant bit in
  +   IEEE 802.3 (Ethernet) _transmission order_ of an IEEE 802 MAC address.
  +   The authors were likely not aware that the bitwise order of an octet
  +   from a MAC address memory and hexadecimal string representation is
  +   still always from left (MSB, bit 7) to right (LSB, bit 0).
   
  -   For more information on this, see especially "Understanding
  -   Physical Addresses" in "Ethernet -- The Definitive Guide",
  -   p.43, and section "ETHERNET MULTICAST ADDRESSES" in
  -   http://www.iana.org/assignments/ethernet-numbers.
  +   For more information, see "Understanding Physical Addresses" in
  +   "Ethernet -- The Definitive Guide", p.43, and the section "ETHERNET
  +   MULTICAST ADDRESSES" in http://www.iana.org/assignments/ethernet-numbers.
   
  -   Hence, we do it the intended/correct way and generate a real IEEE 802
  -   multicast address, but with a brain-dead compile-time option one can
  -   nevertheless enforce the broken generation of IEEE 802 MAC addresses.
  -   For the decoding we always use the correct way, of course. */
  +   At OSSP, we do it the intended/correct way and generate a real IEEE 802
  +   multicast address. Those wanting to encode broken IEEE 802 MAC addresses
  +   (as specified) can nevertheless use a brain dead compile-time option
  +   to switch off the correct behavior. When decoding we always use the
  +   correct behavior of course. */
   
   /* encoding */
   #ifdef WITH_RFC2518
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 19 13:15:08 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C8779774EF; Mon, 19 Jan 2004 13:15:07 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid.c uuid.h uuid.pod uuid_cli.c
Message-Id: <20040119121507.C8779774EF@mail.ossp.org>
Date: Mon, 19 Jan 2004 13:15:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-Jan-2004 13:15:07
  Branch: HEAD                             Handle: 2004011912150401

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid.c uuid.h uuid.pod uuid_cli.c

  Log:
    o Include <string.h> in uuid.h because of size_t usage.
    
    o INCOMPATIBILITY: Refactor the API and rename uuid_generate()
      to uuid_make() and use a "uuid_t" pointer for the namespace
      on UUID_VERSION3 generation. To allow access to the internal
      pre-defined namespace UUIDs, provide a new uuid_load() function.
      Because uuid_load() now also allows the loading of the "nil" UUID,
      remove uuid_nil() from the API. After this second refactoring the
      API is now the one we originally wished for the forthcoming version
      1.0 of OSSP uuid.

  Summary:
    Revision    Changes     Path
    1.29        +18 -4      ossp-pkg/uuid/ChangeLog
    1.41        +58 -61     ossp-pkg/uuid/uuid.c
    1.15        +5  -2      ossp-pkg/uuid/uuid.h
    1.12        +41 -18     ossp-pkg/uuid/uuid.pod
    1.13        +23 -12     ossp-pkg/uuid/uuid_cli.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	18 Jan 2004 20:19:23 -0000	1.28
  +++ ossp-pkg/uuid/ChangeLog	19 Jan 2004 12:15:04 -0000	1.29
  @@ -13,14 +13,28 @@
   
     Changes between 0.9.3 and 0.9.4 (16-Jan-2004 to xx-Jan-2004)
   
  +   o Include <string.h> in uuid.h because of size_t usage.
  +     [Ralf S. Engelschall]
  +
  +   o INCOMPATIBILITY: Refactor the API and rename uuid_generate()
  +     to uuid_make() and use a "uuid_t" pointer for the namespace
  +     on UUID_VERSION3 generation. To allow access to the internal
  +     pre-defined namespace UUIDs, provide a new uuid_load() function.
  +     Because uuid_load() now also allows the loading of the "nil" UUID,
  +     remove uuid_nil() from the API. After this second refactoring the
  +     API is now the one we originally wished for the forthcoming version
  +     1.0 of OSSP uuid.
  +     [Ralf S. Engelschall]
  +
      o Add version support to API via UUID_VERSION (compile-time)
        and uuid_version() (link-time).
        [Ralf S. Engelschall]
   
  -   o Refactor the API by merging uuid_{unpack,pack,parse,format,dump}()
  -     functions into unified uuid_{import,export}() functions. This
  -     allows us to easily add support for other formats (e.g. XML) in the
  -     future without having the change the API in principle.
  +   o INCOMPATIBILITY: Refactor the API by merging
  +     uuid_{unpack,pack,parse,format,dump}() functions into unified
  +     uuid_{import,export}() functions. This allows us to easily add
  +     support for other formats (e.g. XML) in the future without having
  +     the change the API in principle.
        [Ralf S. Engelschall]
   
      o Document what DCE 1.1 UUID versions exist and what they are
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.40 -r1.41 uuid.c
  --- ossp-pkg/uuid/uuid.c	19 Jan 2004 12:08:28 -0000	1.40
  +++ ossp-pkg/uuid/uuid.c	19 Jan 2004 12:15:05 -0000	1.41
  @@ -160,7 +160,7 @@
           return UUID_RC_MEM;
   
       /* set UUID object initially to "Nil UUID" */
  -    uuid_nil(*uuid);
  +    uuid_load(*uuid, "nil");
   
       /* create PRNG and MD5 sub-objects */
       if (prng_create(&(*uuid)->prng) != PRNG_RC_OK)
  @@ -731,7 +731,7 @@
   }
   
   /* INTERNAL: generate UUID version 1: time, clock and node based */
  -static uuid_rc_t uuid_generate_v1(uuid_t *uuid, unsigned int mode, va_list ap)
  +static uuid_rc_t uuid_make_v1(uuid_t *uuid, unsigned int mode, va_list ap)
   {
       struct timeval time_now;
   #ifdef HAVE_NANOSLEEP
  @@ -863,47 +863,64 @@
       return UUID_RC_OK;
   }
   
  -/* set UUID object to represents "Nil UUID" */
  -uuid_rc_t uuid_nil(uuid_t *uuid)
  -{
  -    /* argument sanity check */
  -    if (uuid == NULL)
  -        return UUID_RC_ARG;
  -
  -    /* clear all octets to create "Nil UUID" */
  -    memset((void *)&(uuid->obj), '\0', sizeof(uuid->obj));
  -
  -    return UUID_RC_OK;
  -}
  -
  -/* INTERNAL: UUID Namespace Ids as pre-defined by draft-leach-uuids-guids-01.txt
  -   (defined here as network byte ordered octet stream for direct MD5 feeding) */
  +/* INTERNAL: pre-defined UUID values.
  +   (defined as network byte ordered octet stream) */
   static struct {
       char *name;
       uuid_uint8_t uuid[UUID_LEN_BIN];
  -} uuid_ns_table[] = {
  -    { "DNS",  /* 6ba7b810-9dad-11d1-80b4-00c04fd430c8 */
  +} uuid_value_table[] = {
  +    { "nil",     /* 00000000-0000-0000-0000-000000000000 ("Nil UUID") */
  +      { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 } },
  +    { "ns:DNS",  /* 6ba7b810-9dad-11d1-80b4-00c04fd430c8 (see draft-leach-uuids-guids-01.txt) */
         { 0x6b,0xa7,0xb8,0x10,0x9d,0xad,0x11,0xd1,0x80,0xb4,0x00,0xc0,0x4f,0xd4,0x30,0xc8 } },
  -    { "URL",  /* 6ba7b811-9dad-11d1-80b4-00c04fd430c8 */
  +    { "ns:URL",  /* 6ba7b811-9dad-11d1-80b4-00c04fd430c8 (see draft-leach-uuids-guids-01.txt) */
         { 0x6b,0xa7,0xb8,0x11,0x9d,0xad,0x11,0xd1,0x80,0xb4,0x00,0xc0,0x4f,0xd4,0x30,0xc8 } },
  -    { "OID",  /* 6ba7b812-9dad-11d1-80b4-00c04fd430c8 */
  +    { "ns:OID",  /* 6ba7b812-9dad-11d1-80b4-00c04fd430c8 (see draft-leach-uuids-guids-01.txt) */
         { 0x6b,0xa7,0xb8,0x12,0x9d,0xad,0x11,0xd1,0x80,0xb4,0x00,0xc0,0x4f,0xd4,0x30,0xc8 } },
  -    { "X500", /* 6ba7b814-9dad-11d1-80b4-00c04fd430c8 */
  +    { "ns:X500", /* 6ba7b814-9dad-11d1-80b4-00c04fd430c8 (see draft-leach-uuids-guids-01.txt) */
         { 0x6b,0xa7,0xb8,0x14,0x9d,0xad,0x11,0xd1,0x80,0xb4,0x00,0xc0,0x4f,0xd4,0x30,0xc8 } }
   };
   
  -/* INTERNAL: generate UUID version 3: name based */
  -static uuid_rc_t uuid_generate_v3(uuid_t *uuid, unsigned int mode, va_list ap)
  +/* load UUID object with pre-defined value */
  +uuid_rc_t uuid_load(uuid_t *uuid, const char *name)
   {
  -    char *str;
  -    char *ns;
  -    void *uuid_octets;
  -    uuid_t *uuid_object;
  +    uuid_uint8_t *uuid_octets;
       uuid_rc_t rc;
       unsigned int i;
   
  -    /* determine namespace UUID name and argument name string */
  -    if ((ns = (char *)va_arg(ap, char *)) == NULL)
  +    /* sanity check argument(s) */
  +    if (uuid == NULL || name == NULL)
  +        return UUID_RC_ARG;
  +
  +    /* search for UUID in table */
  +    uuid_octets = NULL;
  +    for (i = 0; i < sizeof(uuid_value_table)/sizeof(uuid_value_table[0]); i++) {
  +         if (strcmp(uuid_value_table[i].name, name) == 0) {
  +             uuid_octets = uuid_value_table[i].uuid;
  +             break;
  +         }
  +    }
  +    if (uuid_octets == NULL)
  +        return UUID_RC_ARG;
  +
  +    /* import value into UUID object */
  +    if ((rc = uuid_import(uuid, UUID_FMT_BIN, uuid_octets, UUID_LEN_BIN)) != UUID_RC_OK)
  +        return rc;
  +
  +    return UUID_RC_OK;
  +}
  +
  +/* INTERNAL: generate UUID version 3: name based */
  +static uuid_rc_t uuid_make_v3(uuid_t *uuid, unsigned int mode, va_list ap)
  +{
  +    char *str;
  +    uuid_t *uuid_ns;
  +    uuid_uint8_t uuid_buf[UUID_LEN_BIN];
  +    void *uuid_ptr;
  +    size_t uuid_len;
  +
  +    /* determine namespace UUID and name string arguments */
  +    if ((uuid_ns = (uuid_t *)va_arg(ap, void *)) == NULL)
           return UUID_RC_ARG;
       if ((str = (char *)va_arg(ap, char *)) == NULL)
           return UUID_RC_ARG;
  @@ -913,30 +930,10 @@
           return UUID_RC_MEM;
   
       /* load the namespace UUID into MD5 context */
  -    if (uuid_isstr(ns, 0)) {
  -        /* custom namespace via UUID string representation */
  -        if ((rc = uuid_create(&uuid_object)) != UUID_RC_OK)
  -            return rc;
  -        if ((rc = uuid_import(uuid_object, UUID_FMT_STR, ns, strlen(ns))) != UUID_RC_OK)
  -            return rc;
  -        uuid_octets = (void *)&(uuid_object->obj);
  -        uuid_export(uuid_object, UUID_FMT_BIN, &uuid_octets, NULL);
  -        md5_update(uuid->md5, uuid_octets, UUID_LEN_BIN);
  -        uuid_destroy(uuid_object);
  -    }
  -    else {
  -        /* standard namespace via UUID namespace id */
  -        uuid_octets = NULL;
  -        for (i = 0; i < sizeof(uuid_ns_table)/sizeof(uuid_ns_table[0]); i++) {
  -             if (strcmp(uuid_ns_table[i].name, ns) == 0) {
  -                 uuid_octets = uuid_ns_table[i].uuid;
  -                 break;
  -             }
  -        }
  -        if (uuid_octets == NULL)
  -            return UUID_RC_ARG;
  -        md5_update(uuid->md5, uuid_octets, UUID_LEN_BIN);
  -    }
  +    uuid_ptr = (void *)&uuid_buf;
  +    uuid_len = sizeof(uuid_buf);
  +    uuid_export(uuid_ns, UUID_FMT_BIN, &uuid_ptr, &uuid_len);
  +    md5_update(uuid->md5, uuid_buf, uuid_len);
   
       /* load the argument name string into MD5 context */
       md5_update(uuid->md5, str, strlen(str));
  @@ -944,8 +941,8 @@
       /* store MD5 result into UUID
          (requires MD5_LEN_BIN space, UUID_LEN_BIN space is available,
          and both are equal in size, so we are safe!) */
  -    uuid_octets = (void *)&(uuid->obj);
  -    md5_store(uuid->md5, &uuid_octets, NULL);
  +    uuid_ptr = (void *)&(uuid->obj);
  +    md5_store(uuid->md5, &uuid_ptr, NULL);
   
       /* fulfill requirement of standard and convert UUID data into
          local/host byte order (this uses fact that uuid_import_bin() is
  @@ -959,7 +956,7 @@
   }
   
   /* INTERNAL: generate UUID version 4: random number based */
  -static uuid_rc_t uuid_generate_v4(uuid_t *uuid, unsigned int mode, va_list ap)
  +static uuid_rc_t uuid_make_v4(uuid_t *uuid, unsigned int mode, va_list ap)
   {
       /* fill UUID with random data */
       prng_data(uuid->prng, (void *)&(uuid->obj), sizeof(uuid->obj));
  @@ -971,7 +968,7 @@
   }
   
   /* generate UUID */
  -uuid_rc_t uuid_generate(uuid_t *uuid, unsigned int mode, ...)
  +uuid_rc_t uuid_make(uuid_t *uuid, unsigned int mode, ...)
   {
       va_list ap;
       uuid_rc_t rc;
  @@ -983,11 +980,11 @@
       /* dispatch into version dependent generation functions */
       va_start(ap, mode);
       if (mode & UUID_VERSION1)
  -        rc = uuid_generate_v1(uuid, mode, ap);
  +        rc = uuid_make_v1(uuid, mode, ap);
       else if (mode & UUID_VERSION3)
  -        rc = uuid_generate_v3(uuid, mode, ap);
  +        rc = uuid_make_v3(uuid, mode, ap);
       else if (mode & UUID_VERSION4)
  -        rc = uuid_generate_v4(uuid, mode, ap);
  +        rc = uuid_make_v4(uuid, mode, ap);
       else
           rc = UUID_RC_ARG;
       va_end(ap);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.h
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 uuid.h
  --- ossp-pkg/uuid/uuid.h	18 Jan 2004 20:19:23 -0000	1.14
  +++ ossp-pkg/uuid/uuid.h	19 Jan 2004 12:15:05 -0000	1.15
  @@ -30,6 +30,9 @@
   #ifndef __UUID_H__
   #define __UUID_H__
   
  +/* required system headers */
  +#include <string.h>
  +
   /* OSSP uuid version (compile-time information) */
   #define UUID_VERSION 0x009204
   
  @@ -82,8 +85,8 @@
   extern uuid_rc_t  uuid_destroy  (uuid_t  *_uuid);
   
   /* UUID generation */
  -extern uuid_rc_t  uuid_nil      (uuid_t  *_uuid);
  -extern uuid_rc_t  uuid_generate (uuid_t  *_uuid, unsigned int _mode, ...);
  +extern uuid_rc_t  uuid_load     (uuid_t  *_uuid, const char *_name);
  +extern uuid_rc_t  uuid_make     (uuid_t  *_uuid, unsigned int _mode, ...);
   
   /* UUID comparison */
   extern uuid_rc_t  uuid_isnil    (uuid_t  *_uuid,                 int *_result);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	18 Jan 2004 19:59:12 -0000	1.11
  +++ ossp-pkg/uuid/uuid.pod	19 Jan 2004 12:15:05 -0000	1.12
  @@ -186,7 +186,7 @@
   
   =item B<UUID_VERSION1>, B<UUID_VERSION3>, B<UUID_VERSION4>, B<UUID_MCASTRND>
   
  -The I<mode> bits for use with B<uuid_generate>(). The
  +The I<mode> bits for use with B<uuid_make>(). The
   B<UUID_VERSION>I<N> specify which UUID version to generate. The
   B<UUID_MCASTRND> forces the use of a random multi-cast MAC address
   instead of the real physical MAC address in version 1 UUIDs.
  @@ -223,10 +223,6 @@
   
   Destroy UUID object I<uuid>.
   
  -=item uuid_rc_t B<uuid_nil>(uuid_t *I<uuid>);
  -
  -Sets or resets the UUID in I<uuid> to the I<Nil> UUID.
  -
   =item uuid_rc_t B<uuid_isnil>(uuid_t *I<uuid>, int *I<result>);
   
   Checks whether the UUID in I<uuid> is the I<Nil> UUID.
  @@ -240,7 +236,6 @@
   smaller than I<uuid2>, C<0> if I<uuid1> is equal to I<uuid2>
   and C<+1> if I<uuid1> is greater than I<uuid2>.
   
  -
   =item uuid_rc_t B<uuid_import>(uuid_t *I<uuid>, uuid_fmt_t I<fmt>, const void *I<data_ptr>, size_t I<data_len>);
   
   Imports a UUID I<uuid> from an external representation of format I<fmt>.
  @@ -264,7 +259,31 @@
   minimum required length in C<*>I<data_len> depends on it. Valid values
   for I<fmt> are B<UUID_FMT_BIN>, B<UUID_FMT_STR> and B<UUID_FMT_TXT>.
   
  -=item uuid_rc_t B<uuid_generate>(uuid_t *I<uuid>, unsigned int I<mode>, ...);
  +=item uuid_rc_t B<uuid_load>(uuid_t *I<uuid>, const char *I<name>);
  +
  +Loads a pre-defined UUID value into the UUID object I<uuid>. The
  +following I<name> arguments are currently known:
  +
  +=over 4
  +
  +=item I<name>      I<UUID>
  +
  +=item nil       00000000-0000-0000-0000-000000000000
  +
  +=item ns:DNS    6ba7b810-9dad-11d1-80b4-00c04fd430c8
  +
  +=item ns:URL    6ba7b811-9dad-11d1-80b4-00c04fd430c8
  +
  +=item ns:OID    6ba7b812-9dad-11d1-80b4-00c04fd430c8
  +
  +=item ns:X500   6ba7b814-9dad-11d1-80b4-00c04fd430c8
  +
  +=back
  +
  +The "C<ns:>I<XXX>" are names of pre-defined name-space UUIDs for use in
  +the generation of DCE 1.1 version 3 UUIDs.
  +
  +=item uuid_rc_t B<uuid_make>(uuid_t *I<uuid>, unsigned int I<mode>, ...);
   
   Generates a new UUID in I<uuid> according to I<mode> and optional
   arguments (dependent on I<mode>).
  @@ -302,27 +321,31 @@
   code.
   
    /* generate a DCE 1.1 v1 UUID from system environment */
  - char *uuid_v1(void) 
  + char *uuid_v1(void)
    {
        uuid_t *uuid;
        char *str = NULL;
   
        uuid_create(&uuid);
  -     uuid_generate(uuid, UUID_VERSION1);
  -     uuid_export(uuid, UUID_FMT_STR, &str, NULL);
  +     uuid_make(uuid, UUID_VERSION1);
  +     uuid_export(uuid, UUID_FMT_STR, (void **)&str, NULL);
        uuid_destroy(uuid);
        return str;
    }
   
    /* generate a DCE 1.1 v3 UUID from an URL */
  - char *uuid_v3(const char *url) 
  + char *uuid_v3(const char *url)
    {
        uuid_t *uuid;
  +     uuid_t *uuid_ns;
        char *str = NULL;
   
        uuid_create(&uuid);
  -     uuid_generate(uuid, UUID_VERSION3, "URL", url);
  -     uuid_export(uuid, UUID_FMT_STR, &str, NULL);
  +     uuid_create(&uuid_ns);
  +     uuid_load(uuid_ns, "ns:URL");
  +     uuid_make(uuid, UUID_VERSION3, uuid_ns, url);
  +     uuid_export(uuid, UUID_FMT_STR, (void **)&str, NULL);
  +     uuid_destroy(uuid_ns);
        uuid_destroy(uuid);
        return str;
    }
  @@ -333,7 +356,7 @@
   
   =over 4
   
  -=item 
  +=item
   
   B<UUIDs and GUIDs>,
   IETF Internet Draft (expired),
  @@ -341,7 +364,7 @@
   February 1998, 27 pages,
   http://www.opengroup.org/dce/info/draft-leach-uuids-guids-01.txt
   
  -=item 
  +=item
   
   B<DCE 1.1: Remote Procedure Call>,
   appendix B<Universally Unique Identifier>,
  @@ -349,16 +372,16 @@
   Document Number C706, August 1997, 737 pages,
   (supersedes C309 DCE: Remote Procedure Call 8/1994,
   which was basis for ISO/IEC 11578:1996 specification),
  -http://www.opengroup.org/publications/catalog/c706.htm 
  +http://www.opengroup.org/publications/catalog/c706.htm
   
  -=item 
  +=item
   
   B<Information technology -- Open Systems Interconnection (OSI) -- Remote Procedure Call (RPC)>,
   ISO/IEC 11578:1996,
   August 2001, 570 pages, (CHF 340,00),
   http://www.iso.ch/cate/d2229.html
   
  -=item 
  +=item
   
   B<HTTP Extensions for Distributed Authoring (WebDAV)>,
   section B<6.4.1 Node Field Generation Without the IEEE 802 Address>,
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.c
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 uuid_cli.c
  --- ossp-pkg/uuid/uuid_cli.c	19 Jan 2004 09:11:00 -0000	1.12
  +++ ossp-pkg/uuid/uuid_cli.c	19 Jan 2004 12:15:05 -0000	1.13
  @@ -71,6 +71,7 @@
   int main(int argc, char *argv[])
   {
       uuid_t *uuid;
  +    uuid_t *uuid_ns;
       uuid_rc_t rc;
       FILE *fp;
       char *p;
  @@ -149,10 +150,10 @@
           if (strlen(argv[0]) != UUID_LEN_STR)
               error(1, "invalid length of UUID string representation");
           if ((rc = uuid_import(uuid, UUID_FMT_STR, argv[0], strlen(argv[0]))) != UUID_RC_OK)
  -            error(1, "uuid_parse: %s", uuid_error(rc));
  +            error(1, "uuid_import: %s", uuid_error(rc));
           vp = NULL;
           if ((rc = uuid_export(uuid, UUID_FMT_TXT, &vp, NULL)) != UUID_RC_OK)
  -            error(1, "uuid_dump: %s", uuid_error(rc));
  +            error(1, "uuid_export: %s", uuid_error(rc));
           fprintf(stdout, "%s", (char *)vp);
           free(vp);
           if ((rc = uuid_destroy(uuid)) != UUID_RC_OK)
  @@ -171,19 +172,29 @@
               if (strlen(argv[0]) != UUID_LEN_STR)
                   error(1, "invalid length of UUID string representation");
               if ((rc = uuid_import(uuid, UUID_FMT_STR, argv[0], strlen(argv[0]))) != UUID_RC_OK)
  -                error(1, "uuid_parse: %s", uuid_error(rc));
  +                error(1, "uuid_import: %s", uuid_error(rc));
           }
           for (i = 0; i < count; i++) {
               if (iterate) {
  -                if ((rc = uuid_nil(uuid)) != UUID_RC_OK)
  -                    error(1, "uuid_nil: %s", uuid_error(rc));
  +                if ((rc = uuid_load(uuid, "nil")) != UUID_RC_OK)
  +                    error(1, "uuid_load: %s", uuid_error(rc));
  +            }
  +            if (version == UUID_VERSION3) {
  +                if ((rc = uuid_create(&uuid_ns)) != UUID_RC_OK)
  +                    error(1, "uuid_create: %s", uuid_error(rc));
  +                if ((rc = uuid_load(uuid_ns, argv[0])) != UUID_RC_OK) {
  +                    if ((rc = uuid_import(uuid_ns, UUID_FMT_STR, argv[0], strlen(argv[0]))) != UUID_RC_OK)
  +                        error(1, "uuid_import: %s", uuid_error(rc));
  +                }
  +                if ((rc = uuid_make(uuid, version, uuid_ns, argv[1])) != UUID_RC_OK)
  +                    error(1, "uuid_make: %s", uuid_error(rc));
  +                if ((rc = uuid_destroy(uuid_ns)) != UUID_RC_OK)
  +                    error(1, "uuid_destroy: %s", uuid_error(rc));
  +            }
  +            else {
  +                if ((rc = uuid_make(uuid, version)) != UUID_RC_OK)
  +                    error(1, "uuid_make: %s", uuid_error(rc));
               }
  -            if (version == UUID_VERSION3)
  -                rc = uuid_generate(uuid, version, argv[0], argv[1]);
  -            else
  -                rc = uuid_generate(uuid, version);
  -            if (rc != UUID_RC_OK)
  -                error(1, "uuid_generate: %s", uuid_error(rc));
               if (raw) {
                   vp = NULL;
                   if ((rc = uuid_export(uuid, UUID_FMT_BIN, &vp, &n)) != UUID_RC_OK)
  @@ -194,7 +205,7 @@
               else {
                   vp = NULL;
                   if ((rc = uuid_export(uuid, UUID_FMT_STR, &vp, &n)) != UUID_RC_OK)
  -                    error(1, "uuid_format: %s", uuid_error(rc));
  +                    error(1, "uuid_export: %s", uuid_error(rc));
                   fprintf(fp, "%s\n", (char *)vp);
                   free(vp);
               }
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 19 13:15:59 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D908E774F2; Mon, 19 Jan 2004 13:15:58 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog PORTING devtool devtool.func uuid...
Message-Id: <20040119121558.D908E774F2@mail.ossp.org>
Date: Mon, 19 Jan 2004 13:15:58 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-Jan-2004 13:15:57
  Branch: HEAD                             Handle: 2004011912155700

  Modified files:
    ossp-pkg/uuid           ChangeLog PORTING devtool devtool.func
                            uuid_cli.pod

  Log:
    strip trailing whitespaces

  Summary:
    Revision    Changes     Path
    1.30        +2  -2      ossp-pkg/uuid/ChangeLog
    1.2         +1  -1      ossp-pkg/uuid/PORTING
    1.2         +1  -1      ossp-pkg/uuid/devtool
    1.2         +1  -1      ossp-pkg/uuid/devtool.func
    1.12        +1  -1      ossp-pkg/uuid/uuid_cli.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	19 Jan 2004 12:15:04 -0000	1.29
  +++ ossp-pkg/uuid/ChangeLog	19 Jan 2004 12:15:57 -0000	1.30
  @@ -136,11 +136,11 @@
   
      o Print involved option character (instead of '?') on invalid
        option for uuid(1) CLI.
  -     [Matthias Andree <matthias.andree@gmx.de>] 
  +     [Matthias Andree <matthias.andree@gmx.de>]
   
      o Fixed "make install" and "make uninstall": the uuid(1) CLI
        has to be [un]installed through GNU libtool, too.
  -     [Matthias Andree <matthias.andree@gmx.de>] 
  +     [Matthias Andree <matthias.andree@gmx.de>]
   
      o Document in uuid(1) [uuid_cli.pod] that for version 3
        UUIDs additional arguments are required and what pre-defined
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/PORTING
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 PORTING
  --- ossp-pkg/uuid/PORTING	16 Jan 2004 15:50:30 -0000	1.1
  +++ ossp-pkg/uuid/PORTING	19 Jan 2004 12:15:57 -0000	1.2
  @@ -7,7 +7,7 @@
     OSSP uuid - Universally Unique Identifier
   
     PORTING
  - 
  +
     OSSP uuid was already written with maximum portability in mind, so
     there should be no great effort required to get it running on any Unix
     platform with a reasonable POSIX API. Additionally, the portability
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 devtool
  --- ossp-pkg/uuid/devtool	6 Jan 2004 20:14:28 -0000	1.1
  +++ ossp-pkg/uuid/devtool	19 Jan 2004 12:15:57 -0000	1.2
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  devtool -- Development Tool
  -##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   if [ $# -eq 0 ]; then
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool.func
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.func
  --- ossp-pkg/uuid/devtool.func	6 Jan 2004 20:14:28 -0000	1.1
  +++ ossp-pkg/uuid/devtool.func	19 Jan 2004 12:15:57 -0000	1.2
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   devtool_require () {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.pod
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 uuid_cli.pod
  --- ossp-pkg/uuid/uuid_cli.pod	18 Jan 2004 11:32:40 -0000	1.11
  +++ ossp-pkg/uuid/uuid_cli.pod	19 Jan 2004 12:15:57 -0000	1.12
  @@ -153,7 +153,7 @@
             (not decipherable, because message digest only)
   
    # generate DCE 1.1 v4 UUID 4 (random data based)
  - $ uuid -v4                         
  + $ uuid -v4
    eb424026-6f54-4ef8-a4d0-bb658a1fc6cf
   
    # decode and dump DCE 1.1 v4 UUID 4 (random data based)
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 19 13:19:26 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 30813774EF; Mon, 19 Jan 2004 13:19:26 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.h uuid.h.in
Message-Id: <20040119121926.30813774EF@mail.ossp.org>
Date: Mon, 19 Jan 2004 13:19:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-Jan-2004 13:19:25
  Branch: HEAD                             Handle: 2004011912192500

  Modified files:
    ossp-pkg/uuid           uuid.h uuid.h.in

  Log:
    fix building (I've changed the generated file last time)

  Summary:
    Revision    Changes     Path
    1.16        +0  -3      ossp-pkg/uuid/uuid.h
    1.2         +2  -2      ossp-pkg/uuid/uuid.h.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.h
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 uuid.h
  --- ossp-pkg/uuid/uuid.h	19 Jan 2004 12:15:05 -0000	1.15
  +++ ossp-pkg/uuid/uuid.h	19 Jan 2004 12:19:25 -0000	1.16
  @@ -30,9 +30,6 @@
   #ifndef __UUID_H__
   #define __UUID_H__
   
  -/* required system headers */
  -#include <string.h>
  -
   /* OSSP uuid version (compile-time information) */
   #define UUID_VERSION 0x009204
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.h.in
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid.h.in
  --- ossp-pkg/uuid/uuid.h.in	18 Jan 2004 20:19:23 -0000	1.1
  +++ ossp-pkg/uuid/uuid.h.in	19 Jan 2004 12:19:25 -0000	1.2
  @@ -82,8 +82,8 @@
   extern uuid_rc_t  uuid_destroy  (uuid_t  *_uuid);
   
   /* UUID generation */
  -extern uuid_rc_t  uuid_nil      (uuid_t  *_uuid);
  -extern uuid_rc_t  uuid_generate (uuid_t  *_uuid, unsigned int _mode, ...);
  +extern uuid_rc_t  uuid_load     (uuid_t  *_uuid, const char *_name);
  +extern uuid_rc_t  uuid_make     (uuid_t  *_uuid, unsigned int _mode, ...);
   
   /* UUID comparison */
   extern uuid_rc_t  uuid_isnil    (uuid_t  *_uuid,                 int *_result);
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 19 14:46:03 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7E2A7774EF; Mon, 19 Jan 2004 14:46:03 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ configure.ac
Message-Id: <20040119134603.7E2A7774EF@mail.ossp.org>
Date: Mon, 19 Jan 2004 14:46:03 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-Jan-2004 14:46:03
  Branch: HEAD                             Handle: 2004011913460300

  Modified files:
    ossp-pkg/uuid           configure.ac

  Log:
    make sure we do not accidentely change the generated file again

  Summary:
    Revision    Changes     Path
    1.6         +1  -1      ossp-pkg/uuid/configure.ac
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/configure.ac
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 configure.ac
  --- ossp-pkg/uuid/configure.ac	18 Jan 2004 20:19:23 -0000	1.5
  +++ ossp-pkg/uuid/configure.ac	19 Jan 2004 13:46:03 -0000	1.6
  @@ -51,6 +51,6 @@
   
   AC_CONFIG_HEADERS(config.h)
   AC_CONFIG_FILES([Makefile uuid-config uuid.h])
  -AC_CONFIG_COMMANDS([adjustment], [chmod a+x uuid-config])
  +AC_CONFIG_COMMANDS([adjustment], [chmod a-w uuid.h; chmod a+x uuid-config])
   AC_OUTPUT
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 19 14:48:31 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E2A7E774EF; Mon, 19 Jan 2004 14:48:30 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.h.in
Message-Id: <20040119134830.E2A7E774EF@mail.ossp.org>
Date: Mon, 19 Jan 2004 14:48:30 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-Jan-2004 14:48:30
  Branch: HEAD                             Handle: 2004011913483000

  Modified files:
    ossp-pkg/uuid           uuid.h.in

  Log:
    add lost include

  Summary:
    Revision    Changes     Path
    1.3         +3  -0      ossp-pkg/uuid/uuid.h.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.h.in
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid.h.in
  --- ossp-pkg/uuid/uuid.h.in	19 Jan 2004 12:19:25 -0000	1.2
  +++ ossp-pkg/uuid/uuid.h.in	19 Jan 2004 13:48:30 -0000	1.3
  @@ -30,6 +30,9 @@
   #ifndef __UUID_H__
   #define __UUID_H__
   
  +/* required system headers */
  +#include <string.h>
  +
   /* OSSP uuid version (compile-time information) */
   #define UUID_VERSION @UUID_VERSION_HEX@
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 19 14:55:19 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 01AD9774EF; Mon, 19 Jan 2004 14:55:18 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.c
Message-Id: <20040119135518.01AD9774EF@mail.ossp.org>
Date: Mon, 19 Jan 2004 14:55:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-Jan-2004 14:55:18
  Branch: HEAD                             Handle: 2004011913551800

  Modified files:
    ossp-pkg/uuid           uuid.c

  Log:
    remove doubled 'is' and reformat with par(1)

  Summary:
    Revision    Changes     Path
    1.42        +10 -10     ossp-pkg/uuid/uuid.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.41 -r1.42 uuid.c
  --- ossp-pkg/uuid/uuid.c	19 Jan 2004 12:15:05 -0000	1.41
  +++ ossp-pkg/uuid/uuid.c	19 Jan 2004 13:55:18 -0000	1.42
  @@ -97,21 +97,21 @@
      and code ;-)
   
      It seems that this standards bug arises from a false interpretation,
  -   as the multicast bit is actually is the *MOST* significant bit in
  -   IEEE 802.3 (Ethernet) _transmission order_ of an IEEE 802 MAC address.
  -   The authors were likely not aware that the bitwise order of an octet
  -   from a MAC address memory and hexadecimal string representation is
  -   still always from left (MSB, bit 7) to right (LSB, bit 0).
  +   as the multicast bit is actually the *MOST* significant bit in IEEE
  +   802.3 (Ethernet) _transmission order_ of an IEEE 802 MAC address. The
  +   authors were likely not aware that the bitwise order of an octet from
  +   a MAC address memory and hexadecimal string representation is still
  +   always from left (MSB, bit 7) to right (LSB, bit 0).
   
      For more information, see "Understanding Physical Addresses" in
      "Ethernet -- The Definitive Guide", p.43, and the section "ETHERNET
      MULTICAST ADDRESSES" in http://www.iana.org/assignments/ethernet-numbers.
   
  -   At OSSP, we do it the intended/correct way and generate a real IEEE 802
  -   multicast address. Those wanting to encode broken IEEE 802 MAC addresses
  -   (as specified) can nevertheless use a brain dead compile-time option
  -   to switch off the correct behavior. When decoding we always use the
  -   correct behavior of course. */
  +   At OSSP, we do it the intended/correct way and generate a real
  +   IEEE 802 multicast address. Those wanting to encode broken IEEE
  +   802 MAC addresses (as specified) can nevertheless use a brain dead
  +   compile-time option to switch off the correct behavior. When decoding
  +   we always use the correct behavior of course. */
   
   /* encoding */
   #ifdef WITH_RFC2518
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 19 15:11:51 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DDF02774F1; Mon, 19 Jan 2004 15:11:50 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog Makefile.in uuid.c uuid.h uuid.h....
Message-Id: <20040119141150.DDF02774F1@mail.ossp.org>
Date: Mon, 19 Jan 2004 15:11:50 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-Jan-2004 15:11:50
  Branch: HEAD                             Handle: 2004011914114901

  Modified files:
    ossp-pkg/uuid           ChangeLog Makefile.in uuid.c uuid.h uuid.h.in
                            uuid_cli.c uuid_cli.pod

  Log:
    flush more pending cleanups

  Summary:
    Revision    Changes     Path
    1.31        +4  -0      ossp-pkg/uuid/ChangeLog
    1.17        +2  -2      ossp-pkg/uuid/Makefile.in
    1.43        +6  -4      ossp-pkg/uuid/uuid.c
    1.17        +38 -35     ossp-pkg/uuid/uuid.h
    1.4         +36 -36     ossp-pkg/uuid/uuid.h.in
    1.14        +9  -9      ossp-pkg/uuid/uuid_cli.c
    1.13        +4  -3      ossp-pkg/uuid/uuid_cli.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	19 Jan 2004 12:15:57 -0000	1.30
  +++ ossp-pkg/uuid/ChangeLog	19 Jan 2004 14:11:49 -0000	1.31
  @@ -26,6 +26,10 @@
        1.0 of OSSP uuid.
        [Ralf S. Engelschall]
   
  +   o INCOMPATIBILITY: rename UUID_VERSIONx to UUID_MAKE_Vx and
  +     UUID_MCASTRND to UUID_MAKE_MC to be more consistent throughout API.
  +     [Ralf S. Engelschall]
  +
      o Add version support to API via UUID_VERSION (compile-time)
        and uuid_version() (link-time).
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	18 Jan 2004 18:53:10 -0000	1.16
  +++ ossp-pkg/uuid/Makefile.in	19 Jan 2004 14:11:49 -0000	1.17
  @@ -118,7 +118,7 @@
   	@echo "==== UUID version 1 (time and node based): 4 subsequent iterations"; \
   	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v1 -n 4
   	@echo "==== UUID version 3 (name based): 2 times repeated"; \
  -	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v3 -n 2 URL http://www.ossp.org/
  +	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v3 -n 2 ns:URL http://www.ossp.org/
   	@echo "==== UUID version 4 (random data based): 4 single iterations"; \
   	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v4 -n 4 -1
   	@echo "==== UUID version 4 (random data based): 4 subsequent iterations"; \
  @@ -127,7 +127,7 @@
   	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -d `$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v1`; \
   	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -d `$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v1 -m`
   	@echo "==== UUID version 3 generation and decoding"; \
  -	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -d `$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v3 URL http://www.ossp.org/`
  +	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -d `$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v3 ns:URL http://www.ossp.org/`
   	@echo "==== UUID version 3 generation and decoding"; \
   	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -d `$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v4`
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.42 -r1.43 uuid.c
  --- ossp-pkg/uuid/uuid.c	19 Jan 2004 13:55:18 -0000	1.42
  +++ ossp-pkg/uuid/uuid.c	19 Jan 2004 14:11:49 -0000	1.43
  @@ -838,7 +838,7 @@
        *  GENERATE NODE
        */
   
  -    if ((mode & UUID_MCASTRND) || (uuid->mac[0] & BM_OCTET(1,0,0,0,0,0,0,0))) {
  +    if ((mode & UUID_MAKE_MC) || (uuid->mac[0] & BM_OCTET(1,0,0,0,0,0,0,0))) {
           /* generate random IEEE 802 local multicast MAC address */
           prng_data(uuid->prng, (void *)&(uuid->obj.node), sizeof(uuid->obj.node));
           uuid->obj.node[0] |= IEEE_MAC_MCBIT_ENC;
  @@ -979,11 +979,11 @@
   
       /* dispatch into version dependent generation functions */
       va_start(ap, mode);
  -    if (mode & UUID_VERSION1)
  +    if (mode & UUID_MAKE_V1)
           rc = uuid_make_v1(uuid, mode, ap);
  -    else if (mode & UUID_VERSION3)
  +    else if (mode & UUID_MAKE_V3)
           rc = uuid_make_v3(uuid, mode, ap);
  -    else if (mode & UUID_VERSION4)
  +    else if (mode & UUID_MAKE_V4)
           rc = uuid_make_v4(uuid, mode, ap);
       else
           rc = UUID_RC_ARG;
  @@ -1002,6 +1002,8 @@
           case UUID_RC_ARG: str = "invalid argument"; break;
           case UUID_RC_MEM: str = "out of memory";    break;
           case UUID_RC_SYS: str = "system error";     break;
  +        case UUID_RC_INT: str = "internal error";   break;
  +        case UUID_RC_IMP: str = "not implemented";  break;
           default:          str = NULL;               break;
       }
       return str;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.h
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 uuid.h
  --- ossp-pkg/uuid/uuid.h	19 Jan 2004 12:19:25 -0000	1.16
  +++ ossp-pkg/uuid/uuid.h	19 Jan 2004 14:11:50 -0000	1.17
  @@ -30,72 +30,75 @@
   #ifndef __UUID_H__
   #define __UUID_H__
   
  -/* OSSP uuid version (compile-time information) */
  -#define UUID_VERSION 0x009204
  +/* required system headers */
  +#include <string.h>
   
   /* minimum C++ support */
   #ifdef __cplusplus
   #define DECLARATION_BEGIN extern "C" {
   #define DECLARATION_END   }
   #else
  -#define DECLARATION_BEGIN /*nop*/
  -#define DECLARATION_END   /*nop*/
  +#define DECLARATION_BEGIN
  +#define DECLARATION_END
   #endif
   
   DECLARATION_BEGIN
   
  +/* OSSP uuid version (compile-time information) */
  +#define UUID_VERSION  0x009204
  +
   /* encoding octet stream lengths */
  -#define UUID_LEN_BIN (128 / 8 /*bytes*/)
  -#define UUID_LEN_STR (128 / 4 /*nibbles*/ + 4 /*hyphens*/)
  +#define UUID_LEN_BIN  (128 /*bit*/ / 8 /*bytes*/)
  +#define UUID_LEN_STR  (128 /*bit*/ / 4 /*nibbles*/ + 4 /*hyphens*/)
   
  -/* return codes */
  +/* API return codes */
   typedef enum {
  -    UUID_RC_OK  = 0,
  -    UUID_RC_ARG = 1,
  -    UUID_RC_MEM = 2,
  -    UUID_RC_SYS = 3,
  -    UUID_RC_INT = 4,
  -    UUID_RC_IMP = 5
  +    UUID_RC_OK   = 0,        /* everything ok    */
  +    UUID_RC_ARG  = 1,        /* invalid argument */
  +    UUID_RC_MEM  = 2,        /* out of memory    */
  +    UUID_RC_SYS  = 3,        /* system error     */
  +    UUID_RC_INT  = 4,        /* internal error   */
  +    UUID_RC_IMP  = 5         /* not implemented  */
   } uuid_rc_t;
   
  -/* generation mode flags */
  +/* UUID make modes */
   enum {
  -    UUID_VERSION1      = (1 << 0),
  -    UUID_VERSION3      = (1 << 1),
  -    UUID_VERSION4      = (1 << 2),
  -    UUID_MCASTRND      = (1 << 3)
  +    UUID_MAKE_V1 = (1 << 0), /* DCE 1.1 v1 UUID */
  +    UUID_MAKE_V3 = (1 << 1), /* DCE 1.1 v3 UUID */
  +    UUID_MAKE_V4 = (1 << 2), /* DCE 1.1 v4 UUID */
  +    UUID_MAKE_MC = (1 << 3)  /* enforce multi-cast MAC address */
   };
   
  -/* import/export formats */
  +/* UUID import/export formats */
   typedef enum {
  -    UUID_FMT_BIN = 0, /* import/export */
  -    UUID_FMT_STR = 1, /* import/export */
  -    UUID_FMT_TXT = 2  /* export only */
  +    UUID_FMT_BIN = 0,        /* binary representation (import/export) */
  +    UUID_FMT_STR = 1,        /* string representation (import/export) */
  +    UUID_FMT_TXT = 2         /* textual description   (export only)   */
   } uuid_fmt_t;
   
  -/* abstract data type */
  +/* UUID abstract data type */
   struct uuid_st;
   typedef struct uuid_st uuid_t;
   
  -/* object handling */
  -extern uuid_rc_t  uuid_create   (uuid_t **_uuid);
  -extern uuid_rc_t  uuid_destroy  (uuid_t  *_uuid);
  +/* UUID object handling */
  +extern uuid_rc_t     uuid_create   (uuid_t **_uuid);
  +extern uuid_rc_t     uuid_destroy  (uuid_t  *_uuid);
   
   /* UUID generation */
  -extern uuid_rc_t  uuid_load     (uuid_t  *_uuid, const char *_name);
  -extern uuid_rc_t  uuid_make     (uuid_t  *_uuid, unsigned int _mode, ...);
  +extern uuid_rc_t     uuid_load     (uuid_t  *_uuid, const char *_name);
  +extern uuid_rc_t     uuid_make     (uuid_t  *_uuid, unsigned int _mode, ...);
   
   /* UUID comparison */
  -extern uuid_rc_t  uuid_isnil    (uuid_t  *_uuid,                 int *_result);
  -extern uuid_rc_t  uuid_compare  (uuid_t  *_uuid, uuid_t *_uuid2, int *_result);
  +extern uuid_rc_t     uuid_isnil    (uuid_t  *_uuid,                 int *_result);
  +extern uuid_rc_t     uuid_compare  (uuid_t  *_uuid, uuid_t *_uuid2, int *_result);
   
   /* UUID import/export */
  -extern uuid_rc_t  uuid_import   (uuid_t  *_uuid, uuid_fmt_t _fmt, const void  *_data_ptr, size_t  _data_len);
  -extern uuid_rc_t  uuid_export   (uuid_t  *_uuid, uuid_fmt_t _fmt,       void **_data_ptr, size_t *_data_len);
  +extern uuid_rc_t     uuid_import   (uuid_t  *_uuid, uuid_fmt_t _fmt, const void  *_data_ptr, size_t  _data_len);
  +extern uuid_rc_t     uuid_export   (uuid_t  *_uuid, uuid_fmt_t _fmt,       void **_data_ptr, size_t *_data_len);
   
  -/* library error handling */
  -extern char      *uuid_error    (uuid_rc_t _rc);
  -extern unsigned long uuid_version (void);
  +/* library utilities */
  +extern char         *uuid_error    (uuid_rc_t _rc);
  +extern unsigned long uuid_version  (void);
   
   DECLARATION_END
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.h.in
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 uuid.h.in
  --- ossp-pkg/uuid/uuid.h.in	19 Jan 2004 13:48:30 -0000	1.3
  +++ ossp-pkg/uuid/uuid.h.in	19 Jan 2004 14:11:50 -0000	1.4
  @@ -33,72 +33,72 @@
   /* required system headers */
   #include <string.h>
   
  -/* OSSP uuid version (compile-time information) */
  -#define UUID_VERSION @UUID_VERSION_HEX@
  -
   /* minimum C++ support */
   #ifdef __cplusplus
   #define DECLARATION_BEGIN extern "C" {
   #define DECLARATION_END   }
   #else
  -#define DECLARATION_BEGIN /*nop*/
  -#define DECLARATION_END   /*nop*/
  +#define DECLARATION_BEGIN
  +#define DECLARATION_END
   #endif
   
   DECLARATION_BEGIN
   
  +/* OSSP uuid version (compile-time information) */
  +#define UUID_VERSION  @UUID_VERSION_HEX@
  +
   /* encoding octet stream lengths */
  -#define UUID_LEN_BIN (128 / 8 /*bytes*/)
  -#define UUID_LEN_STR (128 / 4 /*nibbles*/ + 4 /*hyphens*/)
  +#define UUID_LEN_BIN  (128 /*bit*/ / 8 /*bytes*/)
  +#define UUID_LEN_STR  (128 /*bit*/ / 4 /*nibbles*/ + 4 /*hyphens*/)
   
  -/* return codes */
  +/* API return codes */
   typedef enum {
  -    UUID_RC_OK  = 0,
  -    UUID_RC_ARG = 1,
  -    UUID_RC_MEM = 2,
  -    UUID_RC_SYS = 3,
  -    UUID_RC_INT = 4,
  -    UUID_RC_IMP = 5
  +    UUID_RC_OK   = 0,        /* everything ok    */
  +    UUID_RC_ARG  = 1,        /* invalid argument */
  +    UUID_RC_MEM  = 2,        /* out of memory    */
  +    UUID_RC_SYS  = 3,        /* system error     */
  +    UUID_RC_INT  = 4,        /* internal error   */
  +    UUID_RC_IMP  = 5         /* not implemented  */
   } uuid_rc_t;
   
  -/* generation mode flags */
  +/* UUID make modes */
   enum {
  -    UUID_VERSION1      = (1 << 0),
  -    UUID_VERSION3      = (1 << 1),
  -    UUID_VERSION4      = (1 << 2),
  -    UUID_MCASTRND      = (1 << 3)
  +    UUID_MAKE_V1 = (1 << 0), /* DCE 1.1 v1 UUID */
  +    UUID_MAKE_V3 = (1 << 1), /* DCE 1.1 v3 UUID */
  +    UUID_MAKE_V4 = (1 << 2), /* DCE 1.1 v4 UUID */
  +    UUID_MAKE_MC = (1 << 3)  /* enforce multi-cast MAC address */
   };
   
  -/* import/export formats */
  +/* UUID import/export formats */
   typedef enum {
  -    UUID_FMT_BIN = 0, /* import/export */
  -    UUID_FMT_STR = 1, /* import/export */
  -    UUID_FMT_TXT = 2  /* export only */
  +    UUID_FMT_BIN = 0,        /* binary representation (import/export) */
  +    UUID_FMT_STR = 1,        /* string representation (import/export) */
  +    UUID_FMT_TXT = 2         /* textual description   (export only)   */
   } uuid_fmt_t;
   
  -/* abstract data type */
  +/* UUID abstract data type */
   struct uuid_st;
   typedef struct uuid_st uuid_t;
   
  -/* object handling */
  -extern uuid_rc_t  uuid_create   (uuid_t **_uuid);
  -extern uuid_rc_t  uuid_destroy  (uuid_t  *_uuid);
  +/* UUID object handling */
  +extern uuid_rc_t     uuid_create   (uuid_t **_uuid);
  +extern uuid_rc_t     uuid_destroy  (uuid_t  *_uuid);
   
   /* UUID generation */
  -extern uuid_rc_t  uuid_load     (uuid_t  *_uuid, const char *_name);
  -extern uuid_rc_t  uuid_make     (uuid_t  *_uuid, unsigned int _mode, ...);
  +extern uuid_rc_t     uuid_load     (uuid_t  *_uuid, const char *_name);
  +extern uuid_rc_t     uuid_make     (uuid_t  *_uuid, unsigned int _mode, ...);
   
   /* UUID comparison */
  -extern uuid_rc_t  uuid_isnil    (uuid_t  *_uuid,                 int *_result);
  -extern uuid_rc_t  uuid_compare  (uuid_t  *_uuid, uuid_t *_uuid2, int *_result);
  +extern uuid_rc_t     uuid_isnil    (uuid_t  *_uuid,                 int *_result);
  +extern uuid_rc_t     uuid_compare  (uuid_t  *_uuid, uuid_t *_uuid2, int *_result);
   
   /* UUID import/export */
  -extern uuid_rc_t  uuid_import   (uuid_t  *_uuid, uuid_fmt_t _fmt, const void  *_data_ptr, size_t  _data_len);
  -extern uuid_rc_t  uuid_export   (uuid_t  *_uuid, uuid_fmt_t _fmt,       void **_data_ptr, size_t *_data_len);
  +extern uuid_rc_t     uuid_import   (uuid_t  *_uuid, uuid_fmt_t _fmt, const void  *_data_ptr, size_t  _data_len);
  +extern uuid_rc_t     uuid_export   (uuid_t  *_uuid, uuid_fmt_t _fmt,       void **_data_ptr, size_t *_data_len);
   
  -/* library error handling */
  -extern char      *uuid_error    (uuid_rc_t _rc);
  -extern unsigned long uuid_version (void);
  +/* library utilities */
  +extern char         *uuid_error    (uuid_rc_t _rc);
  +extern unsigned long uuid_version  (void);
   
   DECLARATION_END
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.c
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 uuid_cli.c
  --- ossp-pkg/uuid/uuid_cli.c	19 Jan 2004 12:15:05 -0000	1.13
  +++ ossp-pkg/uuid/uuid_cli.c	19 Jan 2004 14:11:50 -0000	1.14
  @@ -91,7 +91,7 @@
       iterate = 0;    /* not one at a time */
       raw = 0;        /* default is ASCII output */
       decode = 0;     /* default is to encode */
  -    version = UUID_VERSION1;
  +    version = UUID_MAKE_V1;
       while ((ch = getopt(argc, argv, "1n:rdmo:v:")) != -1) {
           switch (ch) {
               case '1':
  @@ -117,16 +117,16 @@
                       error(1, "fopen: %s", strerror(errno));
                   break;
               case 'm':
  -                version |= UUID_MCASTRND;
  +                version |= UUID_MAKE_MC;
                   break;
               case 'v':
                   i = strtol(optarg, &p, 10);
                   if (*p != '\0')
                       usage("invalid argument to option 'v'");
                   switch (i) {
  -                    case 1: version = UUID_VERSION1; break;;
  -                    case 3: version = UUID_VERSION3; break;;
  -                    case 4: version = UUID_VERSION4; break;;
  +                    case 1: version = UUID_MAKE_V1; break;;
  +                    case 3: version = UUID_MAKE_V3; break;;
  +                    case 4: version = UUID_MAKE_V4; break;;
                       default:
                           usage("invalid version on option 'v'");
                           break;
  @@ -161,9 +161,9 @@
       }
       else {
           /* encoding */
  -        if (   (version == UUID_VERSION1 && argc != 0)
  -            || (version == UUID_VERSION3 && argc != 2)
  -            || (version == UUID_VERSION4 && argc != 0))
  +        if (   (version == UUID_MAKE_V1 && argc != 0)
  +            || (version == UUID_MAKE_V3 && argc != 2)
  +            || (version == UUID_MAKE_V4 && argc != 0))
               usage("invalid number of arguments");
           if ((rc = uuid_create(&uuid)) != UUID_RC_OK)
               error(1, "uuid_create: %s", uuid_error(rc));
  @@ -179,7 +179,7 @@
                   if ((rc = uuid_load(uuid, "nil")) != UUID_RC_OK)
                       error(1, "uuid_load: %s", uuid_error(rc));
               }
  -            if (version == UUID_VERSION3) {
  +            if (version == UUID_MAKE_V3) {
                   if ((rc = uuid_create(&uuid_ns)) != UUID_RC_OK)
                       error(1, "uuid_create: %s", uuid_error(rc));
                   if ((rc = uuid_load(uuid_ns, argv[0])) != UUID_RC_OK) {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.pod
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 uuid_cli.pod
  --- ossp-pkg/uuid/uuid_cli.pod	19 Jan 2004 12:15:57 -0000	1.12
  +++ ossp-pkg/uuid/uuid_cli.pod	19 Jan 2004 14:11:50 -0000	1.13
  @@ -86,8 +86,9 @@
   For version 3 UUIDs the additional command line arguments I<namespace>
   and I<name> have to be given. The I<namespace> is either a UUID in
   string representation or an identifier for internally pre-defined
  -namespace UUIDs (currently known are "C<DNS>", "C<URL>", "C<OID>", and
  -"C<X500>"). The I<name> is a string of arbitrary length.
  +namespace UUIDs (currently known are "C<ns:DNS>", "C<ns:URL>",
  +"C<ns:OID>", and "C<ns:X500>"). The I<name> is a string of arbitrary
  +length.
   
   =item B<-m>
   
  @@ -141,7 +142,7 @@
             node:  00:90:27:2f:f7:25 (global unicast)
   
    # generate DCE 1.1 v3 UUID (name based)
  - $ uuid -v3 URL http://www.ossp.org/
  + $ uuid -v3 ns:URL http://www.ossp.org/
    02d9e6d5-9467-382e-8f9b-9300a64ac3cd
   
    # decode and dump DCE 1.1 v3 UUID (name based)
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 19 15:23:40 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 79231774EF; Mon, 19 Jan 2004 15:23:40 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ TODO
Message-Id: <20040119142340.79231774EF@mail.ossp.org>
Date: Mon, 19 Jan 2004 15:23:40 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-Jan-2004 15:23:40
  Branch: HEAD                             Handle: 2004011914234000

  Modified files:
    ossp-pkg/uuid           TODO

  Log:
    seems to be ok

  Summary:
    Revision    Changes     Path
    1.18        +0  -1      ossp-pkg/uuid/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/TODO
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 TODO
  --- ossp-pkg/uuid/TODO	18 Jan 2004 20:19:23 -0000	1.17
  +++ ossp-pkg/uuid/TODO	19 Jan 2004 14:23:40 -0000	1.18
  @@ -1,6 +1,5 @@
   TODO
   - why are nanoseconds always "1"?!
  -- check UUID_LEN_STR+1 handling for consistency
   CANDO
   - getopt_long support
   - a more sophisticated test suite
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 19 15:56:36 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BFEB3774EF; Mon, 19 Jan 2004 15:56:35 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.c
Message-Id: <20040119145635.BFEB3774EF@mail.ossp.org>
Date: Mon, 19 Jan 2004 15:56:35 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-Jan-2004 15:56:35
  Branch: HEAD                             Handle: 2004011914563500

  Modified files:
    ossp-pkg/uuid           uuid.c

  Log:
    nanosecond calculations are correct. Nevertheless start counting from
    0 because it looks better ;-)

  Summary:
    Revision    Changes     Path
    1.44        +4  -2      ossp-pkg/uuid/uuid.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.43 -r1.44 uuid.c
  --- ossp-pkg/uuid/uuid.c	19 Jan 2004 14:11:49 -0000	1.43
  +++ ossp-pkg/uuid/uuid.c	19 Jan 2004 14:56:35 -0000	1.44
  @@ -756,9 +756,11 @@
   
           /* check whether system time changed since last retrieve */
           if (!(   time_now.tv_sec  == uuid->time_last.tv_sec
  -              && time_now.tv_usec == uuid->time_last.tv_usec))
  -            /* reset time sequence counter */
  +              && time_now.tv_usec == uuid->time_last.tv_usec)) {
  +            /* reset time sequence counter and continue */
               uuid->time_seq = 0;
  +            break;
  +        }
   
           /* until we are out of UUIDs per tick, increment
              the time/tick sequence counter and continue */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 19 15:58:08 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 805F9774EF; Mon, 19 Jan 2004 15:58:08 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ TODO
Message-Id: <20040119145808.805F9774EF@mail.ossp.org>
Date: Mon, 19 Jan 2004 15:58:08 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-Jan-2004 15:58:08
  Branch: HEAD                             Handle: 2004011914580800

  Modified files:
    ossp-pkg/uuid           TODO

  Log:
    done

  Summary:
    Revision    Changes     Path
    1.19        +1  -1      ossp-pkg/uuid/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/TODO
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 TODO
  --- ossp-pkg/uuid/TODO	19 Jan 2004 14:23:40 -0000	1.18
  +++ ossp-pkg/uuid/TODO	19 Jan 2004 14:58:08 -0000	1.19
  @@ -1,5 +1,5 @@
   TODO
  -- why are nanoseconds always "1"?!
  +- <none>
   CANDO
   - getopt_long support
   - a more sophisticated test suite
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 19 15:59:18 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A0A68774EF; Mon, 19 Jan 2004 15:59:18 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog README uuid_vers.h
Message-Id: <20040119145918.A0A68774EF@mail.ossp.org>
Date: Mon, 19 Jan 2004 15:59:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-Jan-2004 15:59:18
  Branch: HEAD                             Handle: 2004011914591800

  Modified files:
    ossp-pkg/uuid           ChangeLog README uuid_vers.h

  Log:
    bump for release

  Summary:
    Revision    Changes     Path
    1.32        +1  -1      ossp-pkg/uuid/ChangeLog
    1.11        +1  -1      ossp-pkg/uuid/README
    1.2         +5  -5      ossp-pkg/uuid/uuid_vers.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	19 Jan 2004 14:11:49 -0000	1.31
  +++ ossp-pkg/uuid/ChangeLog	19 Jan 2004 14:59:18 -0000	1.32
  @@ -11,7 +11,7 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 0.9.3 and 0.9.4 (16-Jan-2004 to xx-Jan-2004)
  +  Changes between 0.9.3 and 0.9.4 (16-Jan-2004 to 19-Jan-2004)
   
      o Include <string.h> in uuid.h because of size_t usage.
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 README
  --- ossp-pkg/uuid/README	18 Jan 2004 20:19:23 -0000	1.10
  +++ ossp-pkg/uuid/README	19 Jan 2004 14:59:18 -0000	1.11
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
   
     OSSP uuid - Universally Unique Identifier
  -  Version 0.9.4 (18-Jan-2004)
  +  Version 0.9.4 (19-Jan-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_vers.h
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid_vers.h
  --- ossp-pkg/uuid/uuid_vers.h	18 Jan 2004 20:19:24 -0000	1.1
  +++ ossp-pkg/uuid/uuid_vers.h	19 Jan 2004 14:59:18 -0000	1.2
  @@ -34,12 +34,12 @@
   _uuid_version_t _uuid_version = {
       0x009204,
       "0.9.4",
  -    "0.9.4 (18-Jan-2004)",
  -    "This is OSSP uuid, Version 0.9.4 (18-Jan-2004)",
  -    "OSSP uuid 0.9.4 (18-Jan-2004)",
  +    "0.9.4 (19-Jan-2004)",
  +    "This is OSSP uuid, Version 0.9.4 (19-Jan-2004)",
  +    "OSSP uuid 0.9.4 (19-Jan-2004)",
       "OSSP uuid/0.9.4",
  -    "@(#)OSSP uuid 0.9.4 (18-Jan-2004)",
  -    "$Id: uuid_vers.h,v 1.1 2004/01/18 20:19:24 rse Exp $"
  +    "@(#)OSSP uuid 0.9.4 (19-Jan-2004)",
  +    "$Id: uuid_vers.h,v 1.2 2004/01/19 14:59:18 rse Exp $"
   };
   
   #endif /* _UUID_VERS_H_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 19 16:35:57 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 97577774F1; Mon, 19 Jan 2004 16:35:56 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20040119153556.97577774F1@mail.ossp.org>
Date: Mon, 19 Jan 2004 16:35:56 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   19-Jan-2004 16:35:56
  Branch: HEAD                             Handle: 2004011915355401

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/uuid   index.wml

  Log:
    release OSSP uuid 0.9.4

  Summary:
    Revision    Changes     Path
    1.71        +2  -0      ossp-web/new/news.txt
    1.66        +1  -1      ossp-web/pkg/lib/index.wml
    1.8         +2  -2      ossp-web/pkg/lib/uuid/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.70 -r1.71 news.txt
  --- ossp-web/new/news.txt	15 Jan 2004 19:28:12 -0000	1.70
  +++ ossp-web/new/news.txt	19 Jan 2004 15:35:54 -0000	1.71
  @@ -1,3 +1,5 @@
  +19-Jan-2004: Released L<OSSP uuid> 0.9.4
  +16-Jan-2004: Released L<OSSP uuid> 0.9.3
   15-Jan-2004: Released L<OSSP uuid> 0.9.2
   13-Jan-2004: Released L<OSSP uuid> 0.9.1
   11-Jan-2004: Released L<OSSP uuid> 0.9.0
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.65 -r1.66 index.wml
  --- ossp-web/pkg/lib/index.wml	16 Jan 2004 15:59:39 -0000	1.65
  +++ ossp-web/pkg/lib/index.wml	19 Jan 2004 15:35:55 -0000	1.66
  @@ -42,7 +42,7 @@
   			done=95 stable=none unstable=0.9.8>
     <pkg_item name="uuid" longname="OSSP uuid" type="lib"
               desc="Universally Unique Identifier"
  -			done=95 stable=none unstable=0.9.3>
  +			done=95 stable=none unstable=0.9.4>
     <pkg_item name="l2" longname="OSSP l2" type="lib"
               desc="Flexible Logging"
   			done=95 stable=none unstable=0.9.5>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/uuid/index.wml
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 index.wml
  --- ossp-web/pkg/lib/uuid/index.wml	16 Jan 2004 15:59:40 -0000	1.7
  +++ ossp-web/pkg/lib/uuid/index.wml	19 Jan 2004 15:35:55 -0000	1.8
  @@ -44,7 +44,7 @@
   <pkg_status
       name="uuid" assign="rse"
       stable="none"    stable_date="none"
  -    unstable="0.9.3" unstable_date="16-Jan-2004"
  +    unstable="0.9.4" unstable_date="19-Jan-2004"
   	done=95>
   
   <h2>Source</h2>
  @@ -54,7 +54,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/uuid/
       directory=$(FTP_ROOT_DIR)/pkg/lib/uuid/
       files="uuid-*.tar.gz" 
  -	stable="uuid-0\.9\.3\.tar\.gz" unstable="uuid-SNAP.*\.tar.gz">
  +	stable="uuid-0\.9\.4\.tar\.gz" unstable="uuid-SNAP.*\.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jan 21 15:18:07 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 660AD7750D; Wed, 21 Jan 2004 15:18:07 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-doc/ accounts.txt
Message-Id: <20040121141807.660AD7750D@mail.ossp.org>
Date: Wed, 21 Jan 2004 15:18:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Jan-2004 15:18:07
  Branch: HEAD                             Handle: 2004012114180600

  Modified files:
    ossp-pkg/as/as-doc      accounts.txt

  Log:
    add PMF stuff

  Summary:
    Revision    Changes     Path
    1.42        +1  -0      ossp-pkg/as/as-doc/accounts.txt
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-doc/accounts.txt
  ============================================================================
  $ cvs diff -u -r1.41 -r1.42 accounts.txt
  --- ossp-pkg/as/as-doc/accounts.txt	14 Jan 2004 12:54:07 -0000	1.41
  +++ ossp-pkg/as/as-doc/accounts.txt	21 Jan 2004 14:18:06 -0000	1.42
  @@ -107,6 +107,7 @@
   R /de/is/man/prj/mor/ru                   # [I] MOR Rack Utilization Report
   R /de/is/man/prj/mor/oi                   # [I] MOR Order Intake Report
   R /de/is/man/prj/sdb                      # [I] Skill Database
  +R /de/is/man/prj/pmf                      # [I] Kurs Projektmanagement-Fachmann
   
   ##
   ##  C&W DE, IS, Hosting Team
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jan 21 21:40:54 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A20E07750F; Wed, 21 Jan 2004 21:40:53 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ sh.platform
Message-Id: <20040121204053.A20E07750F@mail.ossp.org>
Date: Wed, 21 Jan 2004 21:40:53 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Jan-2004 21:40:52
  Branch: HEAD                             Handle: 2004012120405100

  Modified files:
    ossp-pkg/shtool         sh.platform

  Log:
    fix bug in concise formatting and change redhat and fedora naming

  Summary:
    Revision    Changes     Path
    1.4         +21 -22     ossp-pkg/shtool/sh.platform
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.platform
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 sh.platform
  --- ossp-pkg/shtool/sh.platform	1 Jan 2004 16:54:20 -0000	1.3
  +++ ossp-pkg/shtool/sh.platform	21 Jan 2004 20:40:51 -0000	1.4
  @@ -227,29 +227,28 @@
                          -e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' \
                          -e 's/^#[^0-9]*\([0-9][0-9]*\).*$/\1/' \
                          -e 's/^#.*$//'`
  -                t=""
  -                if [ ".${n}" = .redhat ]; then
  -                    t=`head -1 /etc/${tagfile} | \
  -                       sed -e 's/^/#/' \
  -                           -e 's/^#.*Red Hat Enterprise Linux \([AEW]S\).*$/\1/' \
  -                           -e 's/^#.*$//'`
  -                fi
                   case "`util_lower ${n}`" in
  -                    debian      ) n="Debian[ GNU/Linux]" ;;
  -                    fedora      ) n="Fedora[ GNU/Linux]" ;;
  -                    redhat      ) n="RedHat[ Linux]"     ;;
  -                    suse        ) n="SuSE[ Linux]"       ;;
  -                    mandrake    ) n="Mandrake[ Linux]"   ;;
  -                    gentoo      ) n="Gentoo[ Linux]"     ;;
  -                    slackware   ) n="Slackware[ Linux]"  ;;
  -                    turbolinux  ) n="TurboLinux"         ;;
  -                    unitedlinux ) n="UnitedLinux"        ;;
  -                    *           ) n="${n}[ GNU/Linux]"   ;;
  +                    redhat )
  +                        if [ ".`grep 'Red Hat Enterprise Linux' /etc/${tagfile}`" != . ]; then
  +                            n="<R>ed <H>at <E>nterprise <L>inux"
  +                        else
  +                            n="<R>ed <H>at <L>inux"
  +                        fi
  +                        ;;
  +                    debian      ) n="Debian[ GNU/Linux]"        ;;
  +                    fedora      ) n="<Fedora> Core[ GNU/Linux]" ;;
  +                    suse        ) n="SuSE[ Linux]"              ;;
  +                    mandrake    ) n="Mandrake[ Linux]"          ;;
  +                    gentoo      ) n="Gentoo[ GNU/Linux]"        ;;
  +                    slackware   ) n="Slackware[ Linux]"         ;;
  +                    turbolinux  ) n="TurboLinux"                ;;
  +                    unitedlinux ) n="UnitedLinux"               ;;
  +                    *           ) n="${n}[ GNU/Linux]"          ;;
  +                esac
  +                case "$n" in
  +                    *"<"*">"* ) SP="$n <$v>" ;;
  +                    *         ) SP="$n $v"   ;;
                   esac
  -                if [ ".${t}" != . ]; then
  -                    n="${n} ${t}"
  -                fi
  -                SP="$n $v"
                   break
               done
           fi
  @@ -517,7 +516,7 @@
                   val_C=`echo ":$val" | \
                          sed -e 's/^://' \
                              -e 's;\[\([^]]*\)\];;g' \
  -                           -e 's;[^<]*<\([^>]*\)>;\1;g' \
  +                           -e 's;[^<]*<\([^>]*\)>[^<]*;\1;g' \
                              -e "s; ;§§;g" \
                              -e "s;/;%%;g" \
                              -e "s;§§;${opt_S};g" \
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jan 27 20:14:43 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7512C7754B; Tue, 27 Jan 2004 20:14:43 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog devtool.conf
Message-Id: <20040127191443.7512C7754B@mail.ossp.org>
Date: Tue, 27 Jan 2004 20:14:43 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   27-Jan-2004 20:14:43
  Branch: HEAD                             Handle: 2004012719144200

  Modified files:
    ossp-pkg/uuid           ChangeLog devtool.conf

  Log:
    Upgraded build environment to GNU libtool 1.5.2.

  Summary:
    Revision    Changes     Path
    1.33        +5  -0      ossp-pkg/uuid/ChangeLog
    1.4         +1  -1      ossp-pkg/uuid/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	19 Jan 2004 14:59:18 -0000	1.32
  +++ ossp-pkg/uuid/ChangeLog	27 Jan 2004 19:14:42 -0000	1.33
  @@ -11,6 +11,11 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 0.9.4 and 0.9.5 (19-Jan-2004 to xx-Jan-2004)
  +
  +   o Upgraded build environment to GNU libtool 1.5.2.
  +     [Ralf S. Engelschall]
  +
     Changes between 0.9.3 and 0.9.4 (16-Jan-2004 to 19-Jan-2004)
   
      o Include <string.h> in uuid.h because of size_t usage.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.conf
  --- ossp-pkg/uuid/devtool.conf	18 Jan 2004 20:23:40 -0000	1.3
  +++ ossp-pkg/uuid/devtool.conf	27 Jan 2004 19:14:42 -0000	1.4
  @@ -4,7 +4,7 @@
   
   %autogen
       @autogen shtool   1.6.2 "1.6.*" all
  -    @autogen libtool  1.5   "1.5*"
  +    @autogen libtool  1.5.2 "1.5*"
       @autogen autoconf 2.59  "2.5[3-9]*"
   
   %autoclean
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb  2 20:50:26 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1D41A774E3; Mon,  2 Feb 2004 20:50:26 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/petidomo/ acl.y config-files.c hermes.c listserv....
Message-Id: <20040202195026.1D41A774E3@mail.ossp.org>
Date: Mon,  2 Feb 2004 20:50:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   02-Feb-2004 20:50:25
  Branch: HEAD                             Handle: 2004020219502500

  Modified files:
    ossp-pkg/petidomo       acl.y config-files.c hermes.c listserv.c
                            petidomo.h version.c

  Log:
    both peti and rse did overlapping work based on (untagged) 4.0b1; peti
    committed to the CVS first (no version created ever); this is an
    attempt to manually merge rse's acl pre/post changes in (claim
    themselfs to lead to 4.0b2

  Summary:
    Revision    Changes     Path
    1.12        +16 -9      ossp-pkg/petidomo/acl.y
    1.5         +15 -8      ossp-pkg/petidomo/config-files.c
    1.21        +23 -2      ossp-pkg/petidomo/hermes.c
    1.9         +16 -2      ossp-pkg/petidomo/listserv.c
    1.21        +12 -4      ossp-pkg/petidomo/petidomo.h
    1.2         +9  -9      ossp-pkg/petidomo/version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/petidomo/acl.y
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 acl.y
  --- ossp-pkg/petidomo/acl.y	20 Jan 2001 13:42:01 -0000	1.11
  +++ ossp-pkg/petidomo/acl.y	2 Feb 2004 19:50:25 -0000	1.12
  @@ -1,6 +1,6 @@
   /*
      $Source: /e/ossp/cvs/ossp-pkg/petidomo/acl.y,v $
  -   $Revision: 1.11 $
  +   $Revision: 1.12 $
   
      Copyright (C) 2000 by CyberSolutions GmbH, Germany.
   
  @@ -235,7 +235,8 @@
   int checkACL(struct Mail *   MailStruct,
                const char *    listname,
                int *           operation_ptr,
  -             char **         parameter_ptr)
  +             char **         parameter_ptr,
  +             acl_type_t      type)
   {
       const struct PD_Config * MasterConfig;
       const struct List_Config * ListConfig;
  @@ -256,15 +257,17 @@
   
       /* First check the mail against the master acl file. */
   
  -    yyin = fopen(MasterConfig->acl_file, "r");
  +    yyin = fopen((type == ACL_PRE ? MasterConfig->acl_file_pre : MasterConfig->acl_file_post), "r");
       if (yyin == NULL) {
           switch(errno) {
             case ENOENT:
                 /* no master acl file */
  -              syslog(LOG_WARNING, "You have no global acl file (%s). This is probably not a good idea.", MasterConfig->acl_file);
  +              syslog(LOG_WARNING, "You have no global acl file (%s). This is probably not a good idea.", 
  +                     (type == ACL_PRE ? MasterConfig->acl_file_pre : MasterConfig->acl_file_post));
                 goto check_local_acl_file;
             default:
  -              syslog(LOG_ERR, "Couldn't open \"%s\" acl file: %s", MasterConfig->acl_file,  strerror(errno));
  +              syslog(LOG_ERR, "Couldn't open \"%s\" acl file: %s", 
  +                     (type == ACL_PRE ? MasterConfig->acl_file_pre : MasterConfig->acl_file_post), strerror(errno));
                 return -1;
           }
       }
  @@ -277,7 +280,8 @@
           yyin = NULL;
       }
       if (rc != 0) {
  -        syslog(LOG_ERR, "Parsing \"%s\" file returned with an error.", MasterConfig->acl_file);
  +        syslog(LOG_ERR, "Parsing \"%s\" file returned with an error.", 
  +               (type == ACL_PRE ? MasterConfig->acl_file_pre : MasterConfig->acl_file_post));
           return -1;
       }
   
  @@ -301,14 +305,16 @@
       lineno = 1; operation = ACL_NONE;
   
       ListConfig = getListConfig(listname);
  -    yyin = fopen(ListConfig->acl_file, "r");
  +    yyin = fopen((type == ACL_PRE ? ListConfig->acl_file_pre : ListConfig->acl_file_post), "r");
       if (yyin == NULL) {
           switch(errno) {
             case ENOENT:
                 /* no list acl file */
   	      goto finished;
             default:
  -              syslog(LOG_ERR, "Couldn't open acl file \"%s\": %s", ListConfig->acl_file,  strerror(errno));
  +              syslog(LOG_ERR, "Couldn't open acl file \"%s\": %s", 
  +                     (type == ACL_PRE ? ListConfig->acl_file_pre : ListConfig->acl_file_post),
  +                     strerror(errno));
                 return -1;
           }
       }
  @@ -317,7 +323,8 @@
       fclose(yyin);
       yyin = NULL;
       if (rc != 0) {
  -        syslog(LOG_ERR, "Parsing \"%s\" file returned with an error.", ListConfig->acl_file);
  +        syslog(LOG_ERR, "Parsing \"%s\" file returned with an error.", 
  +               (type == ACL_PRE ? ListConfig->acl_file_pre : ListConfig->acl_file_post));
           return -1;
       }
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/petidomo/config-files.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 config-files.c
  --- ossp-pkg/petidomo/config-files.c	12 Feb 2001 19:23:15 -0000	1.4
  +++ ossp-pkg/petidomo/config-files.c	2 Feb 2004 19:50:25 -0000	1.5
  @@ -1,6 +1,6 @@
   /*
      $Source: /e/ossp/cvs/ossp-pkg/petidomo/config-files.c,v $
  -   $Revision: 1.4 $
  +   $Revision: 1.5 $
   
      Copyright (C) 2000 by CyberSolutions GmbH, Germany.
   
  @@ -38,7 +38,8 @@
   static char*  mta             = NULL;
   static char*  mta_options     = "-i -f%s";
   static char*  help_file       = DATADIR "/help";
  -static char*  acl_file        = SYSCONFDIR "/petidomo.acl";
  +static char*  acl_file_pre    = SYSCONFDIR "/petidomo.acl-pre";
  +static char*  acl_file_post   = SYSCONFDIR "/petidomo.acl-post";
   static char*  index_file      = LOCALSTATEDIR "/index";
   static char*  list_dir        = LOCALSTATEDIR "/lists";
   static char*  ack_queue_dir   = LOCALSTATEDIR "/ack-queue";
  @@ -56,7 +57,8 @@
   	{ "MTA", CF_STRING, &mta },
   	{ "MTAOptions", CF_STRING, &mta_options },
   	{ "HelpFile", CF_STRING, &help_file },
  -	{ "AclFile", CF_STRING, &acl_file },
  +	{ "AclFilePre", CF_STRING, &acl_file_pre },
  +	{ "AclFilePost", CF_STRING, &acl_file_post },
   	{ "IndexFile", CF_STRING, &index_file },
   	{ "ListDirectory", CF_STRING, &list_dir },
   	{ "AckQueueDirectory", CF_STRING, &ack_queue_dir },
  @@ -115,7 +117,8 @@
       MasterConfig->mta = mta;
       MasterConfig->mta_options = mta_options;
       MasterConfig->help_file = help_file;
  -    MasterConfig->acl_file = acl_file;
  +    MasterConfig->acl_file_pre = acl_file_pre;
  +    MasterConfig->acl_file_post = acl_file_post;
       MasterConfig->index_file = index_file;
       MasterConfig->list_dir = list_dir;
       MasterConfig->ack_queue_dir = ack_queue_dir;
  @@ -142,7 +145,8 @@
   static char*     sig_file;
   static char*     desc_file;
   static char*     header_file;
  -static char*     list_acl_file;
  +static char*     list_acl_file_pre;
  +static char*     list_acl_file_post;
   static char*     address_file;
   static char*     ack_file;
   
  @@ -172,7 +176,8 @@
   	{ "SignatureFile", CF_STRING, &sig_file },
   	{ "DescriptionFile", CF_STRING, &desc_file },
   	{ "HeaderFile", CF_STRING, &header_file },
  -	{ "ACLFile", CF_STRING, &list_acl_file },
  +	{ "ACLFilePre", CF_STRING, &list_acl_file_pre },
  +	{ "ACLFilePost", CF_STRING, &list_acl_file_post },
   	{ "AddressFile", CF_STRING, &address_file },
   	{ "AcknowledgementFile", CF_STRING, &ack_file },
   	{ NULL, 0, NULL}
  @@ -193,7 +198,8 @@
       sig_file         = "signature";
       desc_file        = "description";
       header_file      = "header";
  -    list_acl_file    = "acl";
  +    list_acl_file_pre  = "acl-pre";
  +    list_acl_file_post = "acl-post";
       address_file     = "list";
       ack_file         = "acks";
   
  @@ -301,7 +307,8 @@
       EXPAND(desc_file, desc_file);
       EXPAND(sig_file, sig_file);
       EXPAND(header_file, header_file);
  -    EXPAND(acl_file, list_acl_file);
  +    EXPAND(acl_file_pre, list_acl_file_pre);
  +    EXPAND(acl_file_post, list_acl_file_post);
       EXPAND(address_file, address_file);
       EXPAND(ack_file, ack_file);
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/petidomo/hermes.c
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 hermes.c
  --- ossp-pkg/petidomo/hermes.c	17 Feb 2001 21:37:05 -0000	1.20
  +++ ossp-pkg/petidomo/hermes.c	2 Feb 2004 19:50:25 -0000	1.21
  @@ -1,6 +1,6 @@
   /*
      $Source: /e/ossp/cvs/ossp-pkg/petidomo/hermes.c,v $
  -   $Revision: 1.20 $
  +   $Revision: 1.21 $
   
      Copyright (C) 2000 by CyberSolutions GmbH, Germany.
   
  @@ -101,7 +101,7 @@
   	   processing is over. That's why we check the posting
   	   password again below. */
   
  -	if (checkACL(MailStruct, listname, &operation, &parameter) != 0)
  +	if (checkACL(MailStruct, listname, &operation, &parameter, ACL_PRE) != 0)
   	    {
   	    syslog(LOG_ERR, "checkACL() failed with an error.");
   	    exit(1);
  @@ -285,6 +285,27 @@
   		}
   	    }
   	}
  +
  +    /* additional ACL check */
  +    if (isValidPostingPassword(MailStruct->Approve, listname) == FALSE)
  +	{
  +        if (checkACL(MailStruct, listname, &operation, &parameter, ACL_POST) != 0)
  +            {
  +            syslog(LOG_ERR, "checkACL() failed with an error.");
  +            exit(1);
  +            }
  +        rc = handleACL(MailStruct, listname, operation, parameter);
  +        switch(rc)
  +            {
  +            case -1:
  +                syslog(LOG_ERR, "handleACL() failed with an error.");
  +                exit(1);
  +            case 0:
  +                break;
  +            case 1:
  +                return;
  +            }
  +        }
   
       /* Copy the desired headers from the original mail to our own
          buffer. */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/petidomo/listserv.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 listserv.c
  --- ossp-pkg/petidomo/listserv.c	12 Feb 2001 20:44:13 -0000	1.8
  +++ ossp-pkg/petidomo/listserv.c	2 Feb 2004 19:50:25 -0000	1.9
  @@ -1,6 +1,6 @@
   /*
      $Source: /e/ossp/cvs/ossp-pkg/petidomo/listserv.c,v $
  -   $Revision: 1.8 $
  +   $Revision: 1.9 $
   
      Copyright (C) 2000 by CyberSolutions GmbH, Germany.
   
  @@ -64,7 +64,21 @@
   
       /* Do access control. */
   
  -    if (checkACL(MailStruct, NULL, &operator, &parameter) != 0) {
  +    if (checkACL(MailStruct, NULL, &operator, &parameter, ACL_PRE) != 0) {
  +	syslog(LOG_ERR, "checkACL() failed with an error.");
  +	exit(1);
  +    }
  +    rc = handleACL(MailStruct, NULL, operator, parameter);
  +    switch(rc) {
  +      case -1:
  +	  syslog(LOG_ERR, "handleACL() failed with an error.");
  +	  exit(1);
  +      case 0:
  +	  break;
  +      case 1:
  +	  return;
  +    }
  +    if (checkACL(MailStruct, NULL, &operator, &parameter, ACL_POST) != 0) {
   	syslog(LOG_ERR, "checkACL() failed with an error.");
   	exit(1);
       }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/petidomo/petidomo.h
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 petidomo.h
  --- ossp-pkg/petidomo/petidomo.h	20 Jan 2001 14:29:28 -0000	1.20
  +++ ossp-pkg/petidomo/petidomo.h	2 Feb 2004 19:50:25 -0000	1.21
  @@ -1,6 +1,6 @@
   /*
      $Source: /e/ossp/cvs/ossp-pkg/petidomo/petidomo.h,v $
  -   $Revision: 1.20 $
  +   $Revision: 1.21 $
   
      Copyright (C) 2000 by CyberSolutions GmbH, Germany.
   
  @@ -64,7 +64,8 @@
       char *    list_dir;
       char *    ack_queue_dir;
       char *    help_file;
  -    char *    acl_file;
  +    char *    acl_file_pre;
  +    char *    acl_file_post;
       char *    index_file;
       };
   
  @@ -77,6 +78,12 @@
       LIST_ACKED_ONCE
       };
   
  +typedef enum 
  +    {
  +    ACL_PRE,
  +    ACL_POST
  +    } acl_type_t;
  +
   enum subscription_type_t
       {
       SUBSCRIPTION_PUBLIC,
  @@ -99,7 +106,8 @@
       char *        desc_file;
       char *        sig_file;
       char *        header_file;
  -    char *        acl_file;
  +    char *        acl_file_pre;
  +    char *        acl_file_post;
       char *        list_dir;
       char *        address_file;
       char *        ack_file;
  @@ -156,7 +164,7 @@
   
   /********** acl.c **********/
   
  -int checkACL(struct Mail *, const char *, int *, char **);
  +int checkACL(struct Mail *, const char *, int *, char **, acl_type_t);
   enum
       {
       ACL_DROP,
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/petidomo/version.c
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 version.c
  --- ossp-pkg/petidomo/version.c	19 Jan 2001 15:01:19 -0000	1.1
  +++ ossp-pkg/petidomo/version.c	2 Feb 2004 19:50:25 -0000	1.2
  @@ -8,7 +8,7 @@
   #ifndef _VERSION_C_
   #define _VERSION_C_
   
  -#define PETIDOMO_VERSION 0x400101
  +#define PETIDOMO_VERSION 0x400102
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _VERSION_C_AS_HEADER_
   
   petidomo_version_t petidomo_version = {
  -    0x400101,
  -    "4.0b1",
  -    "4.0b1 (18-Jan-2001)",
  -    "This is Petidomo, Version 4.0b1 (18-Jan-2001)",
  -    "Petidomo 4.0b1 (18-Jan-2001)",
  -    "Petidomo/4.0b1",
  -    "@(#)Petidomo 4.0b1 (18-Jan-2001)",
  -    "$Id: version.c,v 1.1 2001/01/19 15:01:19 rse Exp $"
  +    0x400102,
  +    "4.0b2",
  +    "4.0b2 (24-Apr-2002)",
  +    "This is Petidomo, Version 4.0b2 (24-Apr-2002)",
  +    "Petidomo 4.0b2 (24-Apr-2002)",
  +    "Petidomo/4.0b2",
  +    "@(#)Petidomo 4.0b2 (24-Apr-2002)",
  +    "$Id: version.c,v 1.2 2004/02/02 19:50:25 thl Exp $"
   };
   
   #endif /* _VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb  2 20:55:27 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BE036774E3; Mon,  2 Feb 2004 20:55:26 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/petidomo/ hermes.c
Message-Id: <20040202195526.BE036774E3@mail.ossp.org>
Date: Mon,  2 Feb 2004 20:55:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   02-Feb-2004 20:55:26
  Branch: HEAD                             Handle: 2004020219552600

  Modified files:
    ossp-pkg/petidomo       hermes.c

  Log:
    merge in OpenPKG X-Spam-Flag addition

  Summary:
    Revision    Changes     Path
    1.22        +2  -1      ossp-pkg/petidomo/hermes.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/petidomo/hermes.c
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 hermes.c
  --- ossp-pkg/petidomo/hermes.c	2 Feb 2004 19:50:25 -0000	1.21
  +++ ossp-pkg/petidomo/hermes.c	2 Feb 2004 19:55:26 -0000	1.22
  @@ -1,6 +1,6 @@
   /*
      $Source: /e/ossp/cvs/ossp-pkg/petidomo/hermes.c,v $
  -   $Revision: 1.21 $
  +   $Revision: 1.22 $
   
      Copyright (C) 2000 by CyberSolutions GmbH, Germany.
   
  @@ -333,6 +333,7 @@
   	    !strncasecmp(currLine, "In-Reply-To:", 12) ||
   	    !strncasecmp(currLine, "References:", 11) ||
   	    !strncasecmp(currLine, "Message-Id:", 11) ||
  +  	    !strncasecmp(currLine, "X-Spam-Flag:", 12) ||
   	    !strncasecmp(currLine, "Keywords:", 11) ||
   	    !strncasecmp(currLine, "Summary:", 11) ||
   	    !strncasecmp(currLine, "Received:", 9))
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb  2 20:56:39 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2786A774E3; Mon,  2 Feb 2004 20:56:39 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/petidomo/ hermes.c
Message-Id: <20040202195639.2786A774E3@mail.ossp.org>
Date: Mon,  2 Feb 2004 20:56:39 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   02-Feb-2004 20:56:39
  Branch: HEAD                             Handle: 2004020219563800

  Modified files:
    ossp-pkg/petidomo       hermes.c

  Log:
    merge in thl slpit cookie update from OpenPKG

  Summary:
    Revision    Changes     Path
    1.23        +16 -9      ossp-pkg/petidomo/hermes.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/petidomo/hermes.c
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 hermes.c
  --- ossp-pkg/petidomo/hermes.c	2 Feb 2004 19:55:26 -0000	1.22
  +++ ossp-pkg/petidomo/hermes.c	2 Feb 2004 19:56:38 -0000	1.23
  @@ -1,6 +1,6 @@
   /*
      $Source: /e/ossp/cvs/ossp-pkg/petidomo/hermes.c,v $
  -   $Revision: 1.22 $
  +   $Revision: 1.23 $
   
      Copyright (C) 2000 by CyberSolutions GmbH, Germany.
   
  @@ -188,6 +188,7 @@
   	    /* Every posting needs an acknowledgement. */
   
   	    char* cookie;
  +	    char c;
   	    char* originator = (MailStruct->Reply_To) ? MailStruct->Reply_To : MailStruct->From;
   
   	    syslog(LOG_INFO, "\"%s\" tried to post to acknowledged list \"%s\"; posting " \
  @@ -203,12 +204,14 @@
   		fprintf(fh, "Precedence: junk\n");
   		fprintf(fh, "Sender: %s\n", owner);
   		fprintf(fh, "\n");
  -		fprintf(fh, "Your posting needs to be approved. Do this by replying\n");
  -		fprintf(fh, "to this mail and citing the string\n");
  +		fprintf(fh, "Your posting needs to be approved. Reply to this mail and\n");
  +		fprintf(fh, "concatenate the two following strings to one large string\n");
   		fprintf(fh, "\n");
  -		fprintf(fh, "    %s\n", cookie);
  + 		c = cookie[16];
  + 		cookie[16] = '\0'; fprintf(fh, "    %s\n", &cookie[ 0]);
  + 		cookie[16] = c;    fprintf(fh, "    %s\n", &cookie[16]);
   		fprintf(fh, "\n");
  -		fprintf(fh, "in your reply.\n");
  +		fprintf(fh, "This validates your will to send and your will to read.\n");
   		CloseMailer(fh);
   		}
   	    else
  @@ -249,6 +252,7 @@
   		else if (rc == 0)
   		    {
   		    char* cookie;
  +		    char c;
   
   		    syslog(LOG_INFO, "\"%s\" tried to post to ack-once list \"%s\", but is posting " \
   			   "for the first time; posting has been deferred.", MailStruct->From, listname);
  @@ -264,12 +268,15 @@
   			fprintf(fh, "Precedence: junk\n");
   			fprintf(fh, "Sender: %s\n", owner);
   			fprintf(fh, "\n");
  -			fprintf(fh, "Your posting needs to be approved. Do this by replying\n");
  -			fprintf(fh, "to this mail and citing the string\n");
  +			fprintf(fh, "Your posting needs to be approved. Reply to this mail and\n");
  +			fprintf(fh, "concatenate the two following strings to one large string\n");
   			fprintf(fh, "\n");
  -			fprintf(fh, "    %s\n", cookie);
  +			c = cookie[16];
  +			cookie[16] = '\0'; fprintf(fh, "    %s\n", &cookie[ 0]);
  +			cookie[16] = c;    fprintf(fh, "    %s\n", &cookie[16]);
   			fprintf(fh, "\n");
  -			fprintf(fh, "in your reply. You won't have to do that again.\n");
  +			fprintf(fh, "This validates your will to send and your will to read.\n");
  +			fprintf(fh, "You won't have to repeat that action in the future.\n");
   			CloseMailer(fh);
   			}
   		    else
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb  2 21:19:27 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A60DA763FD; Mon,  2 Feb 2004 21:19:26 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/petidomo/ .cvsignore README configure.in devtool ...
Message-Id: <20040202201926.A60DA763FD@mail.ossp.org>
Date: Mon,  2 Feb 2004 21:19:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   02-Feb-2004 21:19:26
  Branch: HEAD                             Handle: 2004020220192500

  Added files:
    ossp-pkg/petidomo       devtool devtool.conf devtool.func
  Modified files:
    ossp-pkg/petidomo       .cvsignore README configure.in version.c

  Log:
    add devtool environment and bump version

  Summary:
    Revision    Changes     Path
    1.4         +5  -0      ossp-pkg/petidomo/.cvsignore
    1.7         +178 -44    ossp-pkg/petidomo/README
    1.11        +5  -5      ossp-pkg/petidomo/configure.in
    1.1         +47 -0      ossp-pkg/petidomo/devtool
    1.1         +91 -0      ossp-pkg/petidomo/devtool.conf
    1.1         +73 -0      ossp-pkg/petidomo/devtool.func
    1.3         +10 -10     ossp-pkg/petidomo/version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/petidomo/.cvsignore
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 .cvsignore
  --- ossp-pkg/petidomo/.cvsignore	20 Jan 2001 13:43:30 -0000	1.3
  +++ ossp-pkg/petidomo/.cvsignore	2 Feb 2004 20:19:25 -0000	1.4
  @@ -2,3 +2,8 @@
   acl.c acl-scan.c acl-scan.h
   petidomo
   petidomo.1
  +config.guess
  +config.sub
  +libtool.m4
  +ltmain.sh
  +shtool
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/petidomo/README
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 README
  --- ossp-pkg/petidomo/README	23 Aug 2001 14:02:21 -0000	1.6
  +++ ossp-pkg/petidomo/README	2 Feb 2004 20:19:25 -0000	1.7
  @@ -1,45 +1,179 @@
  -                          OSSP Petidomo 4.0
  +   _        ___  ____ ____  ____              _   _     _                       
  +  |_|_ _   / _ \/ ___/ ___||  _ \  _ __   ___| |_(_) __| | ___  _ __ ___   ___  
  +  _|_||_| | | | \___ \___ \| |_) || '_ \ / _ \ __| |/ _` |/ _ \| '_ ` _ \ / _ \ 
  + |_||_|_| | |_| |___) |__) |  __/ | |_) |  __/ |_| | (_| | (_) | | | | | | (_) |
  +  |_|_|_|  \___/|____/____/|_|    | .__/ \___|\__|_|\__,_|\___/|_| |_| |_|\___/ 
  +                                  |_|                                            
  +  OSSP petidomo - mailing list manager
  +  Version 4.0b3 (02-Feb-2004)
  +
  +  ABSTRACT
  +
  +    On December 12th, 2000, CyberSolutions GmbH published a version of
  +    Petidomo 2.2 under the GNU General Public License. The OSSP project
  +    enhanced that version significantly and hereby releases the result
  +    of its efforts as »OSSP Petidomo 4.0«. OSSP Petidomo is a small but
  +    powerful package that can be used to host and maintain mailing lists
  +    on an Unix machine. Its only requirement is that there is a working
  +    mail transport agent installed, such as sendmail.
  +
  +    OSSP Petidomo has -- among other things -- the following features:
  +
  +  * A simple-to-use e-mail command interface, which can be used by users
  +    and administrators of a mailing list to subscribe or unsubscribe
  +    addresses, approve postings that have been deferred or rejected,
  +    alist ll subscribed addresses of a list, etc.
  +  
  +  * Petidomo supports various modes of operation for a mailing list such
  +    as open lists, closed lists, and moderated lists.
  +  
  +  * Mailing list subscriptions or postings can be verified by requiring
  +    an acknowledgement. This feature is particularly useful when used
  +    for mailing list postings as it will keep the vast majority of all
  +    spam mail off the list.
  +  
  +  * Petidomo can host an arbitrary number of mailing lists in entirely
  +    different domain name spaces -- also known as »Virtual Hosting«.
  +  
  +  * A powerful »Access Control Language« (ACL) can be used to reject,
  +    approve, drop, or redirect postings or subscription attempts.
  +  
  +  * Mailing list postings can be piped through an external »Posting
  +    Filter«, which can modify the article before it's delivered in any
  +    way it sees fit.
  +
  +  * Petidomo can be configured to add arbitrary headers to any mail
  +    that's posted on a mailing list.
  +  
  +  * Petidomo can be configured to add a signature to any mail that's
  +    posted on a mailing list.
  +
  +    The whole package is written in ISO-C and should compile
  +    out-of-the-box on any POSIX.1 compliant system that provides a mail
  +    transport agent. It has been released under the GNU General Public
  +    License.
  +
  +  COPYRIGHT AND LICENSE
  +
  +  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +
  +  This file is part of OSSP petidomo, an application for managing
  +  mailing lists which can found at http://www.ossp.org/pkg/lib/uuid/
  +
  +  Permission to use, copy, modify, and distribute this software for
  +  any purpose with or without fee is hereby granted, provided that
  +  the above copyright notice and this permission notice appear in all
  +  copies.
  +
  +  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +  SUCH DAMAGE.
  +
  +  HOME AND DOCUMENTATION
  +
  +  The documentation and latest release can be found on
  +
  +  o http://www.ossp.org/pkg/lib/uuid/
  +  o  ftp://ftp.ossp.org/pkg/lib/uuid/
  +
  +  PETI's STATEMENT
  +
  +		    Petidomo Mailing List Manager
  +			  Version 4.0b3 (02-Feb-2004)
  +
  +
  +Greetings citizen,
  +
  +I know how  tedious reading "manuals"  is when you're eager to install
  +the new  software,  so  I'll keep  it   as short as  possible.  Before
  +Petidomo can  be   installed, either  from  a   binary or  a    source
  +distribution, you -must- do the following:
  +
  + 1) Create a user of the name "petidomo".
  +
  +    The petidomo-user is needed by the software,  but will usually not
  +    be used to  log into  the system,  so you should  set the password
  +    entry   to   "*"  and  the  login   shell   to "/usr/bin/true"  or
  +    "/sbin/nologin" -- depending on what your system uses.
  +
  +
  + 2) Create a group of the name "petidomo".
  +
  +    This group should contain all users of your system who are allowed
  +    to  administrate Petidomo or for  other reasons need access to the
  +    installation. The  "petidomo" user  should be   a member  of  this
  +    group, too, even though this is not strictly necessary.
  +
  +
  + 3) Create the home directory of the "petidomo" user.
  +
  +    The home directory  is the place  where  the package will  live. A
  +    good  place   is "/usr/local/petidomo",   but   you  can  place it
  +    wherever it suits your installation.
  +
  +
  +Once  the user, the  group and  the directory  exist, you can  use the
  +following mechanisms to do the actual installation.
  +
  +If you're upgrading  from  Petidomo 2.0 and  have  some  mailing lists
  +installed  already, you  can safely use   these mechanisms, too. In no
  +event  will the installation procedure  overwrite your config files or
  +change anything except for the actual binaries.
  +
  +The installation itself works as follows:
  +
  + Binary distribution:
  +
  +    Become 'root' and   start  the "install.sh" script,  which  can be
  +    found in the same directory as this file. install.sh will populate
  +    the home  directory of the  petidomo user and  insert the required
  +    mail  aliases  into  /etc/aliases.  Then  it will install  the CGI
  +    config manager and that's it: Petidomo is ready to run.
  +
  +
  + Source distribution:
  +
  +    Obviously you  need to compile the sources  first of all. In order
  +    to compile Petidomo, you will need the following tools:
  +
  +     - a C compiler, preferably gcc or egcs
  +
  +     - a  version of   make(1)  that  understands   the "include"  and
  +       ".PHONY" statement (use GNU make if your native make doesn't)
  +
  +     - flex, the GNU version of lex
  +
  +     - bison, the  GNU version of yacc,  at least version  1.25. Older
  +       version -might- work,  but I had   problems with them,  because
  +       they're lacking the YYERROR_VERBOSE mechanism.
  +
  +    If  you have all  these tools,  you can  compile Petidomo with the
  +    following commands:
  +
  +      $ make
  +      $ make install      (must be done as root)
  +
  +
  +In  case you experience any  problems  you're not  able to fix, you're
  +welcome to file a problem report  with the "send-pr" utility, included
  +in  the distribution.   You   might  also  want    to check out    the
  +petidomo-users mailing list, to which  you can subscribe by sending  a
  +SUBSCRIBE command to the following address:
  +
  +   petidomo-users-request@petidomo.com
  +
  +Okay, I hope you'll find the Petidomo Mailing List Manager useful, and
  +may the force be with you!
  +
  +
  +                                    Peter Simons <simons@petidomo.com>
   
  -On December 12th, 2000, CyberSolutions GmbH published a version of
  -Petidomo 2.2 under the GNU General Public License. The OSSP project
  -enhanced that version significantly and hereby releases the result of
  -its efforts as »OSSP Petidomo 4.0«. OSSP Petidomo is a small but
  -powerful package that can be used to host and maintain mailing lists
  -on an Unix machine. Its only requirement is that there is a working
  -mail transport agent installed, such as sendmail.
  -
  -OSSP Petidomo has -- among other things -- the following features:
  -
  - * A simple-to-use e-mail command interface, which can be used by
  -   users and administrators of a mailing list to subscribe or
  -   unsubscribe addresses, approve postings that have been deferred or
  -   rejected, list all subscribed addresses of a list, etc.
  -
  - * Petidomo supports various modes of operation for a mailing list
  -   such as open lists, closed lists, and moderated lists.
  -
  - * Mailing list subscriptions or postings can be verified by requiring
  -   an acknowledgement. This feature is particularly useful when used
  -   for mailing list postings as it will keep the vast majority of all
  -   spam mail off the list.
  -
  - * Petidomo can host an arbitrary number of mailing lists in entirely
  -   different domain name spaces -- also known as »Virtual Hosting«.
  -
  - * A powerful »Access Control Language« (ACL) can be used to reject,
  -   approve, drop, or redirect postings or subscription attempts.
  -
  - * Mailing list postings can be piped through an external »Posting
  -   Filter«, which can modify the article before it's delivered in any
  -   way it sees fit.
  -
  - * Petidomo can be configured to add arbitrary headers to any mail
  -   that's posted on a mailing list.
  -
  - * Petidomo can be configured to add a signature to any mail that's
  -   posted on a mailing list.
  -
  -The whole package is written in ISO-C and should compile
  -out-of-the-box on any POSIX.1 compliant system that provides a mail
  -transport agent. It has been released under the GNU General Public
  -License.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/petidomo/configure.in
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 configure.in
  --- ossp-pkg/petidomo/configure.in	18 Feb 2001 00:05:39 -0000	1.10
  +++ ossp-pkg/petidomo/configure.in	2 Feb 2004 20:19:25 -0000	1.11
  @@ -1,17 +1,17 @@
   dnl
   dnl configure.in -- Process this file with autoconf to produce a configure script.
   dnl
  -dnl $Header: /e/ossp/cvs/ossp-pkg/petidomo/configure.in,v 1.10 2001/02/18 00:05:39 simons Exp $
  +dnl $Header: /e/ossp/cvs/ossp-pkg/petidomo/configure.in,v 1.11 2004/02/02 20:19:25 thl Exp $
   dnl
   
   AC_INIT(petidomo.h)
   
   dnl Print the standard OSSP.
   dnl
  -AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)
  -V=`./etc/shtool version -lc -dlong version.c`
  -./etc/shtool echo -e "Configuring %BOSSP Petidomo%b, Version %B${V}%b"
  -AC_DIVERT_POP()
  +dnl AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)
  +V=`./shtool version -lc -dlong version.c`
  +./shtool echo -e "Configuring %BOSSP Petidomo%b, Version %B${V}%b"
  +dnl AC_DIVERT_POP()
   
   dnl Get rid of the lousy -g and -O defaults in CFLAGS.
   dnl
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/petidomo/devtool
  ============================================================================
  $ cvs diff -u -r0 -r1.1 devtool
  --- /dev/null	2004-02-02 21:19:25.000000000 +0100
  +++ devtool	2004-02-02 21:19:25.000000000 +0100
  @@ -0,0 +1,47 @@
  +#!/bin/sh
  +##
  +##  devtool -- Development Tool
  +##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
  +##
  +
  +if [ $# -eq 0 ]; then
  +    echo "devtool:USAGE: devtool <command> [<arg> ...]" 1>&2
  +    exit 1
  +fi
  +
  +cmd="$1"
  +shift
  +
  +devtoolfunc="./devtool.func"
  +
  +if [ ! -f devtool.conf ]; then
  +    echo "devtool:ERROR: no devtool.conf in current directory" 1>&2
  +    exit 1
  +fi
  +
  +cmdline=`grep "^%$cmd" devtool.conf`
  +if [ ".$cmdline" = . ]; then
  +    echo "devtool:ERROR: command $cmd not found in devtool.conf" 1>&2
  +    exit 1
  +fi
  +
  +if [ ".$TMPDIR" != . ]; then
  +    tmpdir="$TMPDIR"
  +elif [ ".$TEMPDIR" != . ]; then
  +    tmpdir="$TEMPDIR"
  +else
  +    tmpdir="/tmp"
  +fi
  +tmpfile="$tmpdir/rc.$$.tmp"
  +
  +rm -f $tmpfile
  +touch $tmpfile
  +echo ". $devtoolfunc" >>$tmpfile
  +( sed <devtool.conf -e "1,/^%common/d" -e '/^%.*/,$d'
  +  sed <devtool.conf -e "1,/^%$cmd/d" -e '/^%.*/,$d' ) |\
  +sed -e 's;\([ 	]\)@\([a-zA-Z_][a-zA-Z0-9_]*\);\1devtool_\2;' >>$tmpfile
  +
  +sh $tmpfile "$@"
  +
  +rm -f $tmpfile >/dev/null 2>&1 || true
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/petidomo/devtool.conf
  ============================================================================
  $ cvs diff -u -r0 -r1.1 devtool.conf
  --- /dev/null	2004-02-02 21:19:25.000000000 +0100
  +++ devtool.conf	2004-02-02 21:19:25.000000000 +0100
  @@ -0,0 +1,91 @@
  +##
  +##  devtool.conf -- Development Tool Configuration
  +##
  +
  +%autogen
  +    @autogen shtool   1.6.2 "1.6.*" all
  +    @autogen libtool  1.5.2 "1.5*"
  +    @autogen autoconf 2.59  "2.5[3-9]*"
  +
  +%autoclean
  +    @autoclean shtool
  +    @autoclean libtool
  +    @autoclean autoconf
  +
  +%configure
  +    ./configure \
  +        --prefix=/tmp/petidomo \
  +        --disable-shared \
  +        --enable-debug \
  +        "$@"
  +
  +%release
  +    ./devtool version
  +    ./devtool tag
  +    ./devtool dist
  +    ./devtool upload
  +
  +%version
  +    ./shtool version -l c -n "OSSP petidomo" -p petidomo_ -e version.c
  +    V=`./shtool version -l c -d long version.c`
  +    sed -e "s/Version .*/Version $V/g" <README >README.n && mv README.n README
  +
  +%tag
  +	V=`./shtool version -l c -dshort version.c | sed -e 's;\.;_;g'`
  +    echo "+++ tagging CVS sources as PETIDOMO_${V}"
  +    cvs commit -m 'flush pending changes before tagging'
  +    cvs tag PETIDOMO_${V}
  +
  +%dist
  +    echo "+++ removing old tarballs"
  +    rm -f petidomo-*.tar.gz
  +    echo "+++ generating"
  +    ./devtool autoclean
  +    ./devtool autogen
  +    echo "+++ configuring"
  +    ./configure
  +    echo "+++ building"
  +    make clean all man
  +    echo "+++ cleaning"
  +    make distclean
  +    echo "+++ fixing"
  +    ./shtool fixperm -v .
  +    echo "+++ rolling"
  +    V=`./shtool version -l c -d short version.c`
  +    ./shtool tarball -o petidomo-${V}.tar.gz -d petidomo-${V} -u ossp -g ossp \
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*,*.tar.gz,^#.*,.*~$' -c 'gzip --best' .
  +    ls -l petidomo-${V}.tar.gz
  +    echo "+++ testing"
  +    gunzip <petidomo-${V}.tar.gz | tar tvf - | head -10
  +    echo "[...]"
  +    gunzip <petidomo-${V}.tar.gz | tar tvf - | tail -10
  +
  +%snap
  +    echo "+++ removing old tarballs"
  +    rm -f petidomo-*.tar.gz
  +    echo "+++ generating"
  +    ./devtool autoclean
  +    ./devtool autogen
  +    echo "+++ configuring"
  +    ./configure
  +    echo "+++ building"
  +    make clean all man
  +    echo "+++ cleaning"
  +    make distclean
  +    echo "+++ fixing"
  +    ./shtool fixperm -v .
  +    echo "+++ rolling"
  +    D=`date '+%Y%m%d'`
  +    ./shtool tarball -o petidomo-SNAP-${D}.tar.gz -d petidomo-SNAP-${D} -u ossp -g ossp \
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*,*.tar.gz,^#.*,.*~$' -c 'gzip --best' .
  +    ls -l petidomo-SNAP-${D}.tar.gz
  +    echo "+++ testing"
  +    gunzip <petidomo-SNAP-${D}.tar.gz | tar tvf - | head -10
  +    echo "[...]"
  +    gunzip <petidomo-SNAP-${D}.tar.gz | tar tvf - | tail -10
  +
  +%upload
  +    echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/petidomo/"
  +    V=`./shtool version -l c -d short version.c`
  +    scp petidomo-${V}.tar.gz master.ossp.org:/e/ossp/ftp/pkg/tool/petidomo/
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/petidomo/devtool.func
  ============================================================================
  $ cvs diff -u -r0 -r1.1 devtool.func
  --- /dev/null	2004-02-02 21:19:25.000000000 +0100
  +++ devtool.func	2004-02-02 21:19:25.000000000 +0100
  @@ -0,0 +1,73 @@
  +##
  +##  devtool.func -- Development Tool Functions
  +##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##
  +
  +devtool_require () {
  +    t="$1"; o="$2"; p="$3"; e="$4"; a="$5"
  +    v=`($t $o | head -1 | awk "{ print \\\$$p; }") 2>/dev/null`
  +    if [ ".$v" = . ]; then
  +        echo "devtool:ERROR: unable to determine version of $t" 1>&2
  +        exit 1
  +    fi
  +    case "$v" in
  +        $e )
  +            ;;
  +        $a )
  +            echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
  +            ;;
  +        * )
  +            echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
  +            exit 1
  +            ;;
  +    esac
  +    echo "$v"
  +}
  +
  +devtool_autogen () {
  +    tool=$1
  +    shift
  +    case $tool in
  +        autoconf )
  +            autoconf_version=`devtool_require autoconf --version 4 "$1" "$2"`
  +            echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
  +            autoconf
  +            autoheader 2>&1 | grep -v "is unchanged"
  +            rm -rf autom4te.cache >/dev/null 2>&1
  +            ;;
  +        libtool )
  +            libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
  +            echo "generating (GNU Libtool $libtoolize_version): ltmain.sh, libtool.m4, config.guess, config.sub"
  +            libtoolize --force --copy >/dev/null 2>&1
  +            cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
  +                sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` libtool.m4
  +            ;;
  +        shtool )
  +            shtoolize_version=`devtool_require shtoolize -v 3 "$1" "$2"`
  +            echo "generating (GNU Shtool $shtoolize_version): shtool"
  +            shift
  +            shift
  +            shtoolize -q "$@"
  +            ;;
  +    esac
  +}
  +
  +devtool_autoclean () {
  +    tool=$1
  +    shift
  +    case $tool in
  +        autoconf )
  +            echo "removing: configure config.h.in"
  +            rm -f configure config.h.in
  +            ;;
  +        libtool )
  +            echo "removing: ltmain.sh libtool.m4 config.guess config.sub"
  +            rm -f ltmain.sh libtool.m4 config.guess config.sub
  +            ;;
  +        shtool )
  +            echo "removing: shtool"
  +            rm -f shtool
  +            ;;
  +    esac
  +}
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/petidomo/version.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 version.c
  --- ossp-pkg/petidomo/version.c	2 Feb 2004 19:50:25 -0000	1.2
  +++ ossp-pkg/petidomo/version.c	2 Feb 2004 20:19:25 -0000	1.3
  @@ -1,5 +1,5 @@
   /*
  -**  version.c -- Version Information for Petidomo (syntax: C/C++)
  +**  version.c -- Version Information for OSSP petidomo (syntax: C/C++)
   **  [automatically generated and maintained by GNU shtool]
   */
   
  @@ -8,7 +8,7 @@
   #ifndef _VERSION_C_
   #define _VERSION_C_
   
  -#define PETIDOMO_VERSION 0x400102
  +#define PETIDOMO_VERSION 0x400103
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _VERSION_C_AS_HEADER_
   
   petidomo_version_t petidomo_version = {
  -    0x400102,
  -    "4.0b2",
  -    "4.0b2 (24-Apr-2002)",
  -    "This is Petidomo, Version 4.0b2 (24-Apr-2002)",
  -    "Petidomo 4.0b2 (24-Apr-2002)",
  -    "Petidomo/4.0b2",
  -    "@(#)Petidomo 4.0b2 (24-Apr-2002)",
  -    "$Id: version.c,v 1.2 2004/02/02 19:50:25 thl Exp $"
  +    0x400103,
  +    "4.0b3",
  +    "4.0b3 (02-Feb-2004)",
  +    "This is OSSP petidomo, Version 4.0b3 (02-Feb-2004)",
  +    "OSSP petidomo 4.0b3 (02-Feb-2004)",
  +    "OSSP petidomo/4.0b3",
  +    "@(#)OSSP petidomo 4.0b3 (02-Feb-2004)",
  +    "$Id: version.c,v 1.3 2004/02/02 20:19:25 thl Exp $"
   };
   
   #endif /* _VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb  2 21:19:36 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8C7CE774B8; Mon,  2 Feb 2004 21:19:36 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/petidomo/ version.c
Message-Id: <20040202201936.8C7CE774B8@mail.ossp.org>
Date: Mon,  2 Feb 2004 21:19:36 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   02-Feb-2004 21:19:36
  Branch: HEAD                             Handle: 2004020220193600

  Modified files:
    ossp-pkg/petidomo       version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.4         +0  -0      ossp-pkg/petidomo/version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/petidomo/version.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 version.c
  --- ossp-pkg/petidomo/version.c	2 Feb 2004 20:19:25 -0000	1.3
  +++ ossp-pkg/petidomo/version.c	2 Feb 2004 20:19:36 -0000	1.4
  @@ -39,7 +39,7 @@
       "OSSP petidomo 4.0b3 (02-Feb-2004)",
       "OSSP petidomo/4.0b3",
       "@(#)OSSP petidomo 4.0b3 (02-Feb-2004)",
  -    "$Id: version.c,v 1.3 2004/02/02 20:19:25 thl Exp $"
  +    "$Id: version.c,v 1.4 2004/02/02 20:19:36 thl Exp $"
   };
   
   #endif /* _VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb  2 21:28:55 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C7A85763FE; Mon,  2 Feb 2004 21:28:54 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/petidomo/ Makefile.in
Message-Id: <20040202202854.C7A85763FE@mail.ossp.org>
Date: Mon,  2 Feb 2004 21:28:54 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   02-Feb-2004 21:28:54
  Branch: HEAD                             Handle: 2004020220285400

  Modified files:
    ossp-pkg/petidomo       Makefile.in

  Log:
    correct dir for shtool

  Summary:
    Revision    Changes     Path
    1.47        +1  -1      ossp-pkg/petidomo/Makefile.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/petidomo/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.46 -r1.47 Makefile.in
  --- ossp-pkg/petidomo/Makefile.in	20 Aug 2001 13:08:21 -0000	1.46
  +++ ossp-pkg/petidomo/Makefile.in	2 Feb 2004 20:28:54 -0000	1.47
  @@ -18,7 +18,7 @@
   RANLIB		= @RANLIB@
   LEX		= @LEX@
   YACC		= @YACC@
  -SHTOOL		= ./etc/shtool
  +SHTOOL		= ./shtool
   
   CFLAGS		= @CFLAGS@
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Feb  4 07:24:29 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0C09C77574; Wed,  4 Feb 2004 07:24:28 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid_prng.c
Message-Id: <20040204062428.0C09C77574@mail.ossp.org>
Date: Wed,  4 Feb 2004 07:24:28 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Feb-2004 07:24:28
  Branch: HEAD                             Handle: 2004020406242800

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid_prng.c

  Log:
    Fixed filedescriptor leak in the PRNG sub-API.
    
    Submitted by: Guerry Semones <guerry@tsunamiresearch.com>

  Summary:
    Revision    Changes     Path
    1.34        +3  -0      ossp-pkg/uuid/ChangeLog
    1.3         +4  -0      ossp-pkg/uuid/uuid_prng.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	27 Jan 2004 19:14:42 -0000	1.33
  +++ ossp-pkg/uuid/ChangeLog	4 Feb 2004 06:24:28 -0000	1.34
  @@ -13,6 +13,9 @@
   
     Changes between 0.9.4 and 0.9.5 (19-Jan-2004 to xx-Jan-2004)
   
  +   o Fixed filedescriptor leak in the PRNG sub-API.
  +     [Guerry Semones <guerry@tsunamiresearch.com>]
  +
      o Upgraded build environment to GNU libtool 1.5.2.
        [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_prng.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid_prng.c
  --- ossp-pkg/uuid/uuid_prng.c	18 Jan 2004 19:22:54 -0000	1.2
  +++ ossp-pkg/uuid/uuid_prng.c	4 Feb 2004 06:24:28 -0000	1.3
  @@ -124,6 +124,10 @@
       if (prng == NULL)
           return PRNG_RC_ARG;
   
  +    /* close PRNG device */
  +    if (prng->devfd != -1)
  +        close(prng->devfd);
  +
       /* free object */
       free(prng);
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Feb  6 09:51:39 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 22ABF77592; Fri,  6 Feb 2004 09:51:38 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog README uuid_vers.h
Message-Id: <20040206085138.22ABF77592@mail.ossp.org>
Date: Fri,  6 Feb 2004 09:51:38 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Feb-2004 09:51:37
  Branch: HEAD                             Handle: 2004020608513600

  Modified files:
    ossp-pkg/uuid           ChangeLog README uuid_vers.h

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.35        +1  -1      ossp-pkg/uuid/ChangeLog
    1.12        +1  -1      ossp-pkg/uuid/README
    1.3         +9  -9      ossp-pkg/uuid/uuid_vers.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	4 Feb 2004 06:24:28 -0000	1.34
  +++ ossp-pkg/uuid/ChangeLog	6 Feb 2004 08:51:36 -0000	1.35
  @@ -11,7 +11,7 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 0.9.4 and 0.9.5 (19-Jan-2004 to xx-Jan-2004)
  +  Changes between 0.9.4 and 0.9.5 (19-Jan-2004 to 06-Feb-2004)
   
      o Fixed filedescriptor leak in the PRNG sub-API.
        [Guerry Semones <guerry@tsunamiresearch.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 README
  --- ossp-pkg/uuid/README	19 Jan 2004 14:59:18 -0000	1.11
  +++ ossp-pkg/uuid/README	6 Feb 2004 08:51:36 -0000	1.12
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
   
     OSSP uuid - Universally Unique Identifier
  -  Version 0.9.4 (19-Jan-2004)
  +  Version 0.9.5 (06-Feb-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_vers.h
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid_vers.h
  --- ossp-pkg/uuid/uuid_vers.h	19 Jan 2004 14:59:18 -0000	1.2
  +++ ossp-pkg/uuid/uuid_vers.h	6 Feb 2004 08:51:36 -0000	1.3
  @@ -8,7 +8,7 @@
   #ifndef _UUID_VERS_H_
   #define _UUID_VERS_H_
   
  -#define _UUID_VERSION 0x009204
  +#define _UUID_VERSION 0x009205
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _UUID_VERS_H_AS_HEADER_
   
   _uuid_version_t _uuid_version = {
  -    0x009204,
  -    "0.9.4",
  -    "0.9.4 (19-Jan-2004)",
  -    "This is OSSP uuid, Version 0.9.4 (19-Jan-2004)",
  -    "OSSP uuid 0.9.4 (19-Jan-2004)",
  -    "OSSP uuid/0.9.4",
  -    "@(#)OSSP uuid 0.9.4 (19-Jan-2004)",
  -    "$Id: uuid_vers.h,v 1.2 2004/01/19 14:59:18 rse Exp $"
  +    0x009205,
  +    "0.9.5",
  +    "0.9.5 (06-Feb-2004)",
  +    "This is OSSP uuid, Version 0.9.5 (06-Feb-2004)",
  +    "OSSP uuid 0.9.5 (06-Feb-2004)",
  +    "OSSP uuid/0.9.5",
  +    "@(#)OSSP uuid 0.9.5 (06-Feb-2004)",
  +    "$Id: uuid_vers.h,v 1.3 2004/02/06 08:51:36 rse Exp $"
   };
   
   #endif /* _UUID_VERS_H_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Fri Feb  6 09:55:25 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7393677592; Fri,  6 Feb 2004 09:55:25 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20040206085525.7393677592@mail.ossp.org>
Date: Fri,  6 Feb 2004 09:55:25 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   06-Feb-2004 09:55:25
  Branch: HEAD                             Handle: 2004020608552202

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/uuid   index.wml

  Log:
    release OSSP uuid 0.9.5

  Summary:
    Revision    Changes     Path
    1.72        +1  -0      ossp-web/new/news.txt
    1.67        +1  -1      ossp-web/pkg/lib/index.wml
    1.9         +2  -2      ossp-web/pkg/lib/uuid/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.71 -r1.72 news.txt
  --- ossp-web/new/news.txt	19 Jan 2004 15:35:54 -0000	1.71
  +++ ossp-web/new/news.txt	6 Feb 2004 08:55:22 -0000	1.72
  @@ -1,3 +1,4 @@
  +06-Feb-2004: Released L<OSSP uuid> 0.9.5
   19-Jan-2004: Released L<OSSP uuid> 0.9.4
   16-Jan-2004: Released L<OSSP uuid> 0.9.3
   15-Jan-2004: Released L<OSSP uuid> 0.9.2
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.66 -r1.67 index.wml
  --- ossp-web/pkg/lib/index.wml	19 Jan 2004 15:35:55 -0000	1.66
  +++ ossp-web/pkg/lib/index.wml	6 Feb 2004 08:55:23 -0000	1.67
  @@ -42,7 +42,7 @@
   			done=95 stable=none unstable=0.9.8>
     <pkg_item name="uuid" longname="OSSP uuid" type="lib"
               desc="Universally Unique Identifier"
  -			done=95 stable=none unstable=0.9.4>
  +			done=95 stable=none unstable=0.9.5>
     <pkg_item name="l2" longname="OSSP l2" type="lib"
               desc="Flexible Logging"
   			done=95 stable=none unstable=0.9.5>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/uuid/index.wml
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 index.wml
  --- ossp-web/pkg/lib/uuid/index.wml	19 Jan 2004 15:35:55 -0000	1.8
  +++ ossp-web/pkg/lib/uuid/index.wml	6 Feb 2004 08:55:24 -0000	1.9
  @@ -44,7 +44,7 @@
   <pkg_status
       name="uuid" assign="rse"
       stable="none"    stable_date="none"
  -    unstable="0.9.4" unstable_date="19-Jan-2004"
  +    unstable="0.9.5" unstable_date="06-Feb-2004"
   	done=95>
   
   <h2>Source</h2>
  @@ -54,7 +54,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/uuid/
       directory=$(FTP_ROOT_DIR)/pkg/lib/uuid/
       files="uuid-*.tar.gz" 
  -	stable="uuid-0\.9\.4\.tar\.gz" unstable="uuid-SNAP.*\.tar.gz">
  +	stable="uuid-0\.9\.5\.tar\.gz" unstable="uuid-SNAP.*\.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 10 20:59:15 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BBF2E775DD; Tue, 10 Feb 2004 20:59:14 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.h
Message-Id: <20040210195914.BBF2E775DD@mail.ossp.org>
Date: Tue, 10 Feb 2004 20:59:14 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Feb-2004 20:59:14
  Branch: HEAD                             Handle: 2004021019591300

  Modified files:
    ossp-pkg/uuid           uuid.h

  Log:
    flush pending change

  Summary:
    Revision    Changes     Path
    1.18        +1  -1      ossp-pkg/uuid/uuid.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.h
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 uuid.h
  --- ossp-pkg/uuid/uuid.h	19 Jan 2004 14:11:50 -0000	1.17
  +++ ossp-pkg/uuid/uuid.h	10 Feb 2004 19:59:13 -0000	1.18
  @@ -45,7 +45,7 @@
   DECLARATION_BEGIN
   
   /* OSSP uuid version (compile-time information) */
  -#define UUID_VERSION  0x009204
  +#define UUID_VERSION  0x009205
   
   /* encoding octet stream lengths */
   #define UUID_LEN_BIN  (128 /*bit*/ / 8 /*bytes*/)
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 10 21:00:15 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9C2A0775D9; Tue, 10 Feb 2004 21:00:14 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.h
Message-Id: <20040210200014.9C2A0775D9@mail.ossp.org>
Date: Tue, 10 Feb 2004 21:00:14 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Feb-2004 21:00:14
  Branch: HEAD                             Handle: 2004021020001300

  Removed files:
    ossp-pkg/uuid           uuid.h

  Log:
    remove generated file

  Summary:
    Revision    Changes     Path
    1.19        +0  -106    ossp-pkg/uuid/uuid.h
  ____________________________________________________________________________

  rm -f ossp-pkg/uuid/uuid.h <<'@@ .'
  Index: ossp-pkg/uuid/uuid.h
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .

From ossp-cvs-owner@ossp.org  Wed Feb 11 09:34:48 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7638C775DB; Wed, 11 Feb 2004 09:34:47 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ ChangeLog sio.c
Message-Id: <20040211083447.7638C775DB@mail.ossp.org>
Date: Wed, 11 Feb 2004 09:34:47 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Feb-2004 09:34:47
  Branch: HEAD                             Handle: 2004021108344600

  Modified files:
    ossp-pkg/sio            ChangeLog sio.c

  Log:
    Fixed OSSP ex support by internally using a non-conflicting
    namespace for the OSSP ex API.
    
    Submitted by: Kimura Fuyuki <fuyuki@nigredo.org>

  Summary:
    Revision    Changes     Path
    1.5         +8  -0      ossp-pkg/sio/ChangeLog
    1.25        +1  -0      ossp-pkg/sio/sio.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ChangeLog
  --- ossp-pkg/sio/ChangeLog	30 Jun 2003 10:36:52 -0000	1.4
  +++ ossp-pkg/sio/ChangeLog	11 Feb 2004 08:34:46 -0000	1.5
  @@ -11,6 +11,14 @@
     This is a list of all changes to OSSP sio.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 0.9.2 and 0.9.3 (30-Jun-2003 to xx-Feb-2004)
  +
  +   ...
  +
  +   *) Fixed OSSP ex support by internally using a non-conflicting
  +      namespace for the OSSP ex API.
  +      [Kimura Fuyuki <fuyuki@nigredo.org>]
  +
     Changes between 0.9.1 and 0.9.2 (17-Jun-2003 to 30-Jun-2003)
   
      *) Correctly check the "status" return value of waitpid(3)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio.c
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 sio.c
  --- ossp-pkg/sio/sio.c	6 Feb 2003 10:59:18 -0000	1.24
  +++ ossp-pkg/sio/sio.c	11 Feb 2004 08:34:46 -0000	1.25
  @@ -47,6 +47,7 @@
   
   /* support for OSSP ex based exception throwing */
   #ifdef WITH_EX
  +#define __EX_NS_UCCXX__
   #include "ex.h"
   #define SIO_RC(rv) \
       (  (rv) != SIO_OK && (ex_catching && !ex_shielding) \
  @@ .

From ossp-cvs-owner@ossp.org  Wed Feb 11 15:38:42 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6EEAA775DB; Wed, 11 Feb 2004 15:38:41 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog Makefile.in uuid.ac uuid_dce.c uu...
Message-Id: <20040211143841.6EEAA775DB@mail.ossp.org>
Date: Wed, 11 Feb 2004 15:38:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Feb-2004 15:38:41
  Branch: HEAD                             Handle: 2004021114384000

  Added files:
    ossp-pkg/uuid           uuid_dce.c uuid_dce.h
  Modified files:
    ossp-pkg/uuid           ChangeLog Makefile.in uuid.ac

  Log:
    Added an experimental additional DCE 1.1 API for backward
    compatibility with existing applications.

  Summary:
    Revision    Changes     Path
    1.36        +5  -1      ossp-pkg/uuid/ChangeLog
    1.18        +31 -1      ossp-pkg/uuid/Makefile.in
    1.10        +13 -0      ossp-pkg/uuid/uuid.ac
    1.1         +291 -0     ossp-pkg/uuid/uuid_dce.c
    1.1         +88 -0      ossp-pkg/uuid/uuid_dce.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	6 Feb 2004 08:51:36 -0000	1.35
  +++ ossp-pkg/uuid/ChangeLog	11 Feb 2004 14:38:40 -0000	1.36
  @@ -11,7 +11,11 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 0.9.4 and 0.9.5 (19-Jan-2004 to 06-Feb-2004)
  +  Changes between 0.9.4 and 0.9.5 (19-Jan-2004 to 11-Feb-2004)
  +
  +   o Added an experimental additional DCE 1.1 API for backward
  +     compatibility with existing applications.
  +     [Ralf S. Engelschall]
   
      o Fixed filedescriptor leak in the PRNG sub-API.
        [Guerry Semones <guerry@tsunamiresearch.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	19 Jan 2004 14:11:49 -0000	1.17
  +++ ossp-pkg/uuid/Makefile.in	11 Feb 2004 14:38:40 -0000	1.18
  @@ -53,15 +53,22 @@
   LIB_NAME    = libuuid.la
   LIB_OBJS    = uuid.lo uuid_md5.lo uuid_prng.lo uuid_mac.lo uuid_ui64.lo uuid_str.lo
   
  +DCE_NAME    = libuuid_dce.la
  +DCE_OBJS    = $(LIB_OBJS) uuid_dce.lo
  +
   PRG_NAME    = uuid
   PRG_OBJS    = uuid_cli.o
   
   MAN_NAME    = uuid.3 uuid.1
   
  +TARGETS     = $(LIB_NAME) @DCE_NAME@ $(PRG_NAME)
  +
  +WITH_DCE    = @WITH_DCE@
  +
   .SUFFIXES:
   .SUFFIXES: .c .o .lo
   
  -all: $(LIB_NAME) $(PRG_NAME)
  +all: $(TARGETS)
   
   .c.o:
   	$(CC) $(CPPFLAGS) $(CFLAGS) -c $<
  @@ -73,6 +80,10 @@
   	@$(LIBTOOL) --mode=link $(CC) -o $(LIB_NAME) $(LIB_OBJS) -rpath $(libdir) \
   	    -version-info `$(SHTOOL) version -l txt -d libtool VERSION`
   
  +$(DCE_NAME): $(DCE_OBJS)
  +	@$(LIBTOOL) --mode=link $(CC) -o $(DCE_NAME) $(DCE_OBJS) -rpath $(libdir) \
  +	    -version-info `$(SHTOOL) version -l txt -d libtool VERSION`
  +
   $(PRG_NAME): $(PRG_OBJS) $(LIB_NAME)
   	@$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $(PRG_NAME) $(PRG_OBJS) $(LIB_NAME) $(LIBS)
   
  @@ -82,6 +93,7 @@
   uuid_prng.lo: uuid_prng.c uuid_prng.h
   uuid_str.lo: uuid_str.c config.h uuid_str.h
   uuid_ui64.lo: uuid_ui64.c uuid_ui64.h
  +uuid_dce.lo: uuid_dce.c uuid.h uuid_dce.h
   uuid_cli.o: uuid_cli.c uuid.h
   
   man: uuid.3 uuid-config.1 uuid.1
  @@ -141,8 +153,15 @@
   	$(SHTOOL) install -c -m 755 uuid-config $(DESTDIR)$(bindir)/
   	$(SHTOOL) install -c -m 644 uuid-config.1 $(DESTDIR)$(mandir)/man1/
   	$(SHTOOL) install -c -m 644 uuid.h $(DESTDIR)$(includedir)/
  +	-@if [ ".$(WITH_DCE)" = .yes ]; then \
  +	    echo "$(SHTOOL) install -c -m 644 uuid_dce.h $(DESTDIR)$(includedir)/"; \
  +	    $(SHTOOL) install -c -m 644 uuid_dce.h $(DESTDIR)$(includedir)/; \
  +	fi
   	$(SHTOOL) install -c -m 644 uuid.3 $(DESTDIR)$(mandir)/man3/
   	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libuuid.la $(DESTDIR)$(libdir)/
  +	-@if [ ".$(WITH_DCE)" = .yes ]; then \
  +	    $(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libuuid_dce.la $(DESTDIR)$(libdir)/; \
  +	fi
   	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -s -m 755 uuid $(DESTDIR)$(bindir)/
   	$(SHTOOL) install -c -m 644 uuid.1 $(DESTDIR)$(mandir)/man1/
   
  @@ -150,8 +169,15 @@
   	-$(RM) $(DESTDIR)$(mandir)/man1/uuid.1
   	-@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(bindir)/uuid
   	-@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libuuid.la
  +	-@if [ ".$(WITH_DCE)" = .yes ]; then \
  +	    $(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libuuid_dce.la; \
  +	fi
   	-$(RM) $(DESTDIR)$(mandir)/man3/uuid.3
   	-$(RM) $(DESTDIR)$(includedir)/uuid.h
  +	-@if [ ".$(WITH_DCE)" = .yes ]; then \
  +	    echo "$(RM) $(DESTDIR)$(includedir)/uuid_dce.h"; \
  +	    $(RM) $(DESTDIR)$(includedir)/uuid_dce.h; \
  +	fi
   	-$(RM) $(DESTDIR)$(mandir)/man1/uuid-config.1
   	-$(RM) $(DESTDIR)$(bindir)/uuid-config
   	-$(RMDIR) $(DESTDIR)$(mandir)/man1 >/dev/null 2>&1 || $(TRUE)
  @@ -164,6 +190,10 @@
   
   clean:
   	-$(RM) $(LIB_NAME) $(LIB_OBJS)
  +	-@if [ ".$(WITH_DCE)" = .yes ]; then \
  +	    echo "$(RM) $(DCE_NAME) $(DCE_OBJS)"; \
  +	    $(RM) $(DCE_NAME) $(DCE_OBJS); \
  +	fi
   	-$(RM) $(PRG_NAME) $(PRG_OBJS)
   	-$(RM) -r .libs >/dev/null 2>&1 || $(TRUE)
   	-$(RM) *.o *.lo
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.ac
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 uuid.ac
  --- ossp-pkg/uuid/uuid.ac	16 Jan 2004 15:35:37 -0000	1.9
  +++ ossp-pkg/uuid/uuid.ac	11 Feb 2004 14:38:40 -0000	1.10
  @@ -77,5 +77,18 @@
       if test ".$ac_cv_with_rfc2518" = ".yes"; then
           AC_DEFINE(WITH_RFC2518, 1, [whether to use incorrect generation of IEEE 802 multicast addresses according to RFC2518])
       fi
  +    AC_ARG_WITH(dce,
  +        AC_HELP_STRING([--with-dce], [build DCE 1.1 backward compatibility API]),
  +        [ac_cv_with_dce=$withval], [ac_cv_with_dce=no])
  +    if test ".$ac_cv_with_dce" = ".yes"; then
  +        AC_DEFINE(WITH_DCE, 1, [whether to build DCE 1.1 backward compatibility API])
  +        WITH_DCE='yes'
  +        DCE_NAME='$(DCE_NAME)'
  +    else
  +        WITH_DCE='no'
  +        DCE_NAME=''
  +    fi
  +    AC_SUBST(WITH_DCE)
  +    AC_SUBST(DCE_NAME)
   ])
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_dce.c
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid_dce.c
  --- /dev/null	2004-02-11 15:38:40.000000000 +0100
  +++ uuid_dce.c	2004-02-11 15:38:40.000000000 +0100
  @@ -0,0 +1,291 @@
  +/*
  +**  OSSP uuid - Universally Unique Identifier
  +**  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +**
  +**  This file is part of OSSP uuid, a library for the generation
  +**  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  uuid_dce.c: DCE 1.1 compatibility API implementation
  +*/
  +
  +/* include DCE 1.1 API */
  +#define uuid_t uuid_dce_t
  +#include "uuid_dce.h"
  +#undef uuid_t
  +#undef uuid_create
  +#undef uuid_create_nil
  +#undef uuid_is_nil
  +#undef uuid_compare
  +#undef uuid_equal
  +#undef uuid_from_string
  +#undef uuid_to_string
  +#undef uuid_hash
  +
  +/* include regular API */
  +#include "uuid.h"
  +
  +/* create a UUID (v1 only) */
  +void uuid_dce_create(uuid_dce_t *uuid_dce, int *status)
  +{
  +    uuid_t *uuid;
  +    size_t len;
  +    void *vp;
  +
  +    /* initialize status */
  +    if (status != NULL)
  +        *status = uuid_s_error;
  +
  +    /* sanity check argument(s) */
  +    if (uuid_dce == NULL)
  +        return;
  +
  +    /* create UUID and export as binary representation */
  +    if (uuid_create(&uuid) != UUID_RC_OK)
  +        return;
  +    if (uuid_make(uuid, UUID_MAKE_V1) != UUID_RC_OK) {
  +        uuid_destroy(uuid);
  +        return;
  +    }
  +    vp  = uuid_dce;
  +    len = UUID_LEN_BIN;
  +    if (uuid_export(uuid, UUID_FMT_BIN, &vp, &len) != UUID_RC_OK) {
  +        uuid_destroy(uuid);
  +        return;
  +    }
  +    uuid_destroy(uuid);
  +
  +    /* return successfully */
  +    if (status != NULL)
  +        *status = uuid_s_ok;
  +    return;
  +}
  +
  +/* create a Nil UUID */
  +void uuid_dce_create_nil(uuid_dce_t *uuid_dce, int *status)
  +{
  +    /* initialize status */
  +    if (status != NULL)
  +        *status = uuid_s_error;
  +
  +    /* sanity check argument(s) */
  +    if (uuid_dce == NULL)
  +        return;
  +
  +    /* short-circuit implementation, because Nil UUID is trivial to
  +       create, so no need to use regular OSSP uuid API */
  +    memset(uuid_dce, '\0', UUID_LEN_BIN);
  +
  +    /* return successfully */
  +    if (status != NULL)
  +        *status = uuid_s_ok;
  +    return;
  +}
  +
  +/* check whether it is Nil UUID */
  +int uuid_dce_is_nil(uuid_dce_t *uuid_dce, int *status)
  +{
  +    int i;
  +    int result;
  +    unsigned char *ucp;
  +
  +    /* initialize status */
  +    if (status != NULL)
  +        *status = uuid_s_error;
  +
  +    /* sanity check argument(s) */
  +    if (uuid_dce == NULL)
  +        return 0;
  +
  +    /* short-circuit implementation, because Nil UUID is trivial to
  +       check, so no need to use regular OSSP uuid API */
  +    result = 1;
  +    ucp = (unsigned char *)uuid_dce;
  +    for (i = 0; i < UUID_LEN_BIN; i++) {
  +        if (ucp[i] != '\0') {
  +            result = 0;
  +            break;
  +        }
  +    }
  +
  +    /* return successfully with result */
  +    if (status != NULL)
  +        *status = uuid_s_ok;
  +    return result;
  +}
  +
  +/* compare two UUIDs */
  +int uuid_dce_compare(uuid_dce_t *uuid_dce1, uuid_dce_t *uuid_dce2, int *status)
  +{
  +    uuid_t *uuid1 = NULL;
  +    uuid_t *uuid2 = NULL;
  +    int result = 0;
  +
  +    /* initialize status */
  +    if (status != NULL)
  +        *status = uuid_s_error;
  +
  +    /* sanity check argument(s) */
  +    if (uuid_dce1 == NULL || uuid_dce2 == NULL)
  +        return 0;
  +
  +    /* import both UUID binary representations and compare them */
  +    if (uuid_create(&uuid1) != UUID_RC_OK)
  +        goto leave;
  +    if (uuid_create(&uuid2) != UUID_RC_OK)
  +        goto leave;
  +    if (uuid_import(uuid1, UUID_FMT_BIN, uuid_dce1, UUID_LEN_BIN) != UUID_RC_OK)
  +        goto leave;
  +    if (uuid_import(uuid2, UUID_FMT_BIN, uuid_dce2, UUID_LEN_BIN) != UUID_RC_OK)
  +        goto leave;
  +    if (uuid_compare(uuid1, uuid2, &result) != UUID_RC_OK)
  +        goto leave;
  +
  +    /* indicate successful operation */
  +    if (status != NULL)
  +        *status = uuid_s_ok;
  +
  +    /* cleanup and return */
  +    leave:
  +    if (uuid1 != NULL)
  +        uuid_destroy(uuid1);
  +    if (uuid2 != NULL)
  +        uuid_destroy(uuid2);
  +    return result;
  +}
  +
  +/* compare two UUIDs (equality only) */
  +int uuid_dce_equal(uuid_dce_t *uuid_dce1, uuid_dce_t *uuid_dce2, int *status)
  +{
  +    /* initialize status */
  +    if (status != NULL)
  +        *status = uuid_s_error;
  +
  +    /* sanity check argument(s) */
  +    if (uuid_dce1 == NULL || uuid_dce2 == NULL)
  +        return 0;
  +
  +    /* pass through to generic compare function */
  +    return (uuid_dce_compare(uuid_dce1, uuid_dce2, status) == 0 ? 1 : 0);
  +}
  +
  +/* import UUID from string representation */
  +void uuid_dce_from_string(const char *str, uuid_dce_t *uuid_dce, int *status)
  +{
  +    uuid_t *uuid = NULL;
  +    size_t len;
  +    void *vp;
  +
  +    /* initialize status */
  +    if (status != NULL)
  +        *status = uuid_s_error;
  +
  +    /* sanity check argument(s) */
  +    if (str == NULL || uuid_dce == NULL)
  +        return;
  +
  +    /* import string representation and export binary representation */
  +    if (uuid_create(&uuid) != UUID_RC_OK)
  +        goto leave;
  +    if (uuid_import(uuid, UUID_FMT_STR, str, UUID_LEN_STR) != UUID_RC_OK)
  +        goto leave;
  +    vp  = uuid_dce;
  +    len = UUID_LEN_BIN;
  +    if (uuid_export(uuid, UUID_FMT_BIN, &vp, &len) != UUID_RC_OK)
  +        goto leave;
  +
  +    /* indicate successful operation */
  +    if (status != NULL)
  +        *status = uuid_s_ok;
  +
  +    /* cleanup and return */
  +    leave:
  +    if (uuid != NULL)
  +        uuid_destroy(uuid);
  +    return;
  +}
  +
  +/* export UUID to string representation */
  +void uuid_dce_to_string(uuid_dce_t *uuid_dce, char **str, int *status)
  +{
  +    uuid_t *uuid = NULL;
  +    size_t len;
  +    void *vp;
  +
  +    /* initialize status */
  +    if (status != NULL)
  +        *status = uuid_s_error;
  +
  +    /* sanity check argument(s) */
  +    if (str == NULL || uuid_dce == NULL)
  +        return;
  +
  +    /* import binary representation and export string representation */
  +    if (uuid_create(&uuid) != UUID_RC_OK)
  +        goto leave;
  +    if (uuid_import(uuid, UUID_FMT_BIN, uuid_dce, UUID_LEN_BIN) != UUID_RC_OK)
  +        goto leave;
  +    vp  = str;
  +    len = UUID_LEN_STR;
  +    if (uuid_export(uuid, UUID_FMT_STR, &vp, &len) != UUID_RC_OK)
  +        goto leave;
  +
  +    /* indicate successful operation */
  +    if (status != NULL)
  +        *status = uuid_s_ok;
  +
  +    /* cleanup and return */
  +    leave:
  +    if (uuid != NULL)
  +        uuid_destroy(uuid);
  +    return;
  +}
  +
  +/* export UUID into hash value */
  +unsigned int uuid_dce_hash(uuid_dce_t *uuid_dce, int *status)
  +{
  +    int i;
  +    unsigned char *ucp;
  +    unsigned int hash;
  +
  +    /* initialize status */
  +    if (status != NULL)
  +        *status = uuid_s_error;
  +
  +    /* sanity check argument(s) */
  +    if (uuid_dce == NULL)
  +        return 0;
  +
  +    /* generate a hash value
  +       (DCE 1.1 actually requires 16-bit only) */
  +    hash = 0;
  +    ucp = (unsigned char *)uuid_dce;
  +    for (i = UUID_LEN_BIN-1; i >= 0; i--) {
  +        hash <<= 8;
  +        hash |= ucp[i];
  +    }
  +
  +    /* return successfully */
  +    if (status != NULL)
  +        *status = uuid_s_ok;
  +    return hash;
  +}
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_dce.h
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid_dce.h
  --- /dev/null	2004-02-11 15:38:40.000000000 +0100
  +++ uuid_dce.h	2004-02-11 15:38:40.000000000 +0100
  @@ -0,0 +1,88 @@
  +/*
  +**  OSSP uuid - Universally Unique Identifier
  +**  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +**
  +**  This file is part of OSSP uuid, a library for the generation
  +**  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  uuid_dce.h: DCE 1.1 compatibility API definition
  +*/
  +
  +#ifndef __UUID_DCE_H___
  +#define __UUID_DCE_H___
  +
  +/* sanity check usage */
  +#ifdef __UUID_H__
  +#error the regular OSSP uuid API and the DCE 1.1 backward compatibility API are mutually exclusive -- you cannot use them at the same time.
  +#endif
  +
  +/* resolve namespace conflicts (at linking level) with regular OSSP uuid API */
  +#define uuid_create      uuid_dce_create
  +#define uuid_create_nil  uuid_dce_create_nil
  +#define uuid_is_nil      uuid_dce_is_nil
  +#define uuid_compare     uuid_dce_compare
  +#define uuid_equal       uuid_dce_equal
  +#define uuid_from_string uuid_dce_from_string
  +#define uuid_to_string   uuid_dce_to_string
  +#define uuid_hash        uuid_dce_hash
  +
  +/* DCE 1.1 uuid_t type */
  +typedef struct {
  +#if 0
  +    /* stricter but unportable version */
  +    uuid_uint32_t   time_low;
  +    uuid_uint16_t   time_mid;
  +    uuid_uint16_t   time_hi_and_version;
  +    uuid_uint8_t    clock_seq_hi_and_reserved;
  +    uuid_uint8_t    clock_seq_low;
  +    uuid_uint8_t    node[6];
  +#else
  +    /* sufficient and portable version */
  +    unsigned char   data[16];
  +#endif
  +} uuid_t;
  +typedef uuid_t *uuid_p_t;
  +
  +/* DCE 1.1 uuid_vector_t type */
  +typedef struct {
  +    unsigned int    count;
  +    uuid_t         *uuid[1];
  +} uuid_vector_t;
  +
  +/* DCE 1.1 UUID API status codes */
  +enum {
  +    uuid_s_ok = 0,     /* standardized */
  +    uuid_s_error = 1   /* implementation specific */
  +};
  +
  +/* DCE 1.1 UUID API functions */
  +extern void          uuid_create      (uuid_t *,               int *);
  +extern void          uuid_create_nil  (uuid_t *,               int *);
  +extern int           uuid_is_nil      (uuid_t *,               int *);
  +extern int           uuid_compare     (uuid_t *, uuid_t *,     int *);
  +extern int           uuid_equal       (uuid_t *, uuid_t *,     int *);
  +extern void          uuid_from_string (const char *, uuid_t *, int *);
  +extern void          uuid_to_string   (uuid_t *,     char **,  int *);
  +extern unsigned int  uuid_hash        (uuid_t *,               int *);
  +
  +#endif /* __UUID_DCE_H___ */
  +
  @@ .

From ossp-cvs-owner@ossp.org  Wed Feb 11 15:39:08 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 37F2A775E4; Wed, 11 Feb 2004 15:39:08 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ TODO
Message-Id: <20040211143908.37F2A775E4@mail.ossp.org>
Date: Wed, 11 Feb 2004 15:39:08 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Feb-2004 15:39:08
  Branch: HEAD                             Handle: 2004021114390700

  Modified files:
    ossp-pkg/uuid           TODO

  Log:
    done

  Summary:
    Revision    Changes     Path
    1.20        +0  -1      ossp-pkg/uuid/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/TODO
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 TODO
  --- ossp-pkg/uuid/TODO	19 Jan 2004 14:58:08 -0000	1.19
  +++ ossp-pkg/uuid/TODO	11 Feb 2004 14:39:07 -0000	1.20
  @@ -7,4 +7,3 @@
   - global locking according to standard?
   - persistent/non-volatile state writing?
   - additional Perl API for covering Perl language
  -- additional C API for DCE 1.1 compatibility
  @@ .

From ossp-cvs-owner@ossp.org  Wed Feb 11 15:39:57 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 53926775DB; Wed, 11 Feb 2004 15:39:57 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ TODO
Message-Id: <20040211143957.53926775DB@mail.ossp.org>
Date: Wed, 11 Feb 2004 15:39:57 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Feb-2004 15:39:57
  Branch: HEAD                             Handle: 2004021114395600

  Modified files:
    ossp-pkg/uuid           TODO

  Log:
    sort

  Summary:
    Revision    Changes     Path
    1.21        +4  -4      ossp-pkg/uuid/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/TODO
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 TODO
  --- ossp-pkg/uuid/TODO	11 Feb 2004 14:39:07 -0000	1.20
  +++ ossp-pkg/uuid/TODO	11 Feb 2004 14:39:56 -0000	1.21
  @@ -1,9 +1,9 @@
   TODO
   - <none>
   CANDO
  -- getopt_long support
  -- a more sophisticated test suite
  +- additional Perl API for covering Perl language
  +- getopt_long support?
  +- a more sophisticated test suite?!
   - more platform support in uuid_mac.c?!
  -- global locking according to standard?
  +- global memory locking according to standard?
   - persistent/non-volatile state writing?
  -- additional Perl API for covering Perl language
  @@ .

From ossp-cvs-owner@ossp.org  Wed Feb 11 15:40:46 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9922D775DB; Wed, 11 Feb 2004 15:40:45 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ README uuid_vers.h
Message-Id: <20040211144045.9922D775DB@mail.ossp.org>
Date: Wed, 11 Feb 2004 15:40:45 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Feb-2004 15:40:45
  Branch: HEAD                             Handle: 2004021114404500

  Modified files:
    ossp-pkg/uuid           README uuid_vers.h

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.13        +1  -1      ossp-pkg/uuid/README
    1.4         +9  -9      ossp-pkg/uuid/uuid_vers.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 README
  --- ossp-pkg/uuid/README	6 Feb 2004 08:51:36 -0000	1.12
  +++ ossp-pkg/uuid/README	11 Feb 2004 14:40:45 -0000	1.13
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
   
     OSSP uuid - Universally Unique Identifier
  -  Version 0.9.5 (06-Feb-2004)
  +  Version 0.9.6 (11-Feb-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_vers.h
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 uuid_vers.h
  --- ossp-pkg/uuid/uuid_vers.h	6 Feb 2004 08:51:36 -0000	1.3
  +++ ossp-pkg/uuid/uuid_vers.h	11 Feb 2004 14:40:45 -0000	1.4
  @@ -8,7 +8,7 @@
   #ifndef _UUID_VERS_H_
   #define _UUID_VERS_H_
   
  -#define _UUID_VERSION 0x009205
  +#define _UUID_VERSION 0x009206
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _UUID_VERS_H_AS_HEADER_
   
   _uuid_version_t _uuid_version = {
  -    0x009205,
  -    "0.9.5",
  -    "0.9.5 (06-Feb-2004)",
  -    "This is OSSP uuid, Version 0.9.5 (06-Feb-2004)",
  -    "OSSP uuid 0.9.5 (06-Feb-2004)",
  -    "OSSP uuid/0.9.5",
  -    "@(#)OSSP uuid 0.9.5 (06-Feb-2004)",
  -    "$Id: OSSP uuid 0.9.5 (06-Feb-2004) $"
  +    0x009206,
  +    "0.9.6",
  +    "0.9.6 (11-Feb-2004)",
  +    "This is OSSP uuid, Version 0.9.6 (11-Feb-2004)",
  +    "OSSP uuid 0.9.6 (11-Feb-2004)",
  +    "OSSP uuid/0.9.6",
  +    "@(#)OSSP uuid 0.9.6 (11-Feb-2004)",
  +    "$Id: OSSP uuid 0.9.6 (11-Feb-2004) $"
   };
   
   #endif /* _UUID_VERS_H_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Wed Feb 11 15:42:42 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 877E7775DB; Wed, 11 Feb 2004 15:42:41 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ devtool.conf
Message-Id: <20040211144241.877E7775DB@mail.ossp.org>
Date: Wed, 11 Feb 2004 15:42:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Feb-2004 15:42:41
  Branch: HEAD                             Handle: 2004021114424100

  Modified files:
    ossp-pkg/uuid           devtool.conf

  Log:
    do a real clean step to make sure manual pages are regenerated

  Summary:
    Revision    Changes     Path
    1.5         +6  -2      ossp-pkg/uuid/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 devtool.conf
  --- ossp-pkg/uuid/devtool.conf	27 Jan 2004 19:14:42 -0000	1.4
  +++ ossp-pkg/uuid/devtool.conf	11 Feb 2004 14:42:41 -0000	1.5
  @@ -33,9 +33,13 @@
       ./devtool autogen
       echo "+++ configuring"
       ./configure
  +    echo "+++ real cleaning"
  +    make realclean
  +    echo "+++ re-configuring"
  +    ./configure
       echo "+++ building"
  -    make clean all man
  -    echo "+++ cleaning"
  +    make all man
  +    echo "+++ dist cleaning"
       make distclean
       echo "+++ fixing"
       ./shtool fixperm -v .
  @@ .

From ossp-cvs-owner@ossp.org  Wed Feb 11 15:45:11 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 691D3775E1; Wed, 11 Feb 2004 15:45:11 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ devtool.conf
Message-Id: <20040211144511.691D3775E1@mail.ossp.org>
Date: Wed, 11 Feb 2004 15:45:11 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Feb-2004 15:45:11
  Branch: HEAD                             Handle: 2004021114451000

  Modified files:
    ossp-pkg/uuid           devtool.conf

  Log:
    ops, we have to re-generate, too

  Summary:
    Revision    Changes     Path
    1.6         +3  -0      ossp-pkg/uuid/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 devtool.conf
  --- ossp-pkg/uuid/devtool.conf	11 Feb 2004 14:42:41 -0000	1.5
  +++ ossp-pkg/uuid/devtool.conf	11 Feb 2004 14:45:10 -0000	1.6
  @@ -35,6 +35,9 @@
       ./configure
       echo "+++ real cleaning"
       make realclean
  +    echo "+++ re-generating"
  +    ./devtool autoclean
  +    ./devtool autogen
       echo "+++ re-configuring"
       ./configure
       echo "+++ building"
  @@ .

From ossp-cvs-owner@ossp.org  Wed Feb 11 15:50:51 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BDC1E775E0; Wed, 11 Feb 2004 15:50:50 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20040211145050.BDC1E775E0@mail.ossp.org>
Date: Wed, 11 Feb 2004 15:50:50 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   11-Feb-2004 15:50:50
  Branch: HEAD                             Handle: 2004021114504802

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/uuid   index.wml

  Log:
    release OSSP uuid 0.9.6

  Summary:
    Revision    Changes     Path
    1.73        +1  -1      ossp-web/new/news.txt
    1.68        +1  -1      ossp-web/pkg/lib/index.wml
    1.10        +3  -3      ossp-web/pkg/lib/uuid/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.72 -r1.73 news.txt
  --- ossp-web/new/news.txt	6 Feb 2004 08:55:22 -0000	1.72
  +++ ossp-web/new/news.txt	11 Feb 2004 14:50:48 -0000	1.73
  @@ -1,4 +1,4 @@
  -06-Feb-2004: Released L<OSSP uuid> 0.9.5
  +11-Feb-2004: Released L<OSSP uuid> 0.9.6
   19-Jan-2004: Released L<OSSP uuid> 0.9.4
   16-Jan-2004: Released L<OSSP uuid> 0.9.3
   15-Jan-2004: Released L<OSSP uuid> 0.9.2
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.67 -r1.68 index.wml
  --- ossp-web/pkg/lib/index.wml	6 Feb 2004 08:55:23 -0000	1.67
  +++ ossp-web/pkg/lib/index.wml	11 Feb 2004 14:50:49 -0000	1.68
  @@ -42,7 +42,7 @@
   			done=95 stable=none unstable=0.9.8>
     <pkg_item name="uuid" longname="OSSP uuid" type="lib"
               desc="Universally Unique Identifier"
  -			done=95 stable=none unstable=0.9.5>
  +			done=100 stable=none unstable=0.9.6>
     <pkg_item name="l2" longname="OSSP l2" type="lib"
               desc="Flexible Logging"
   			done=95 stable=none unstable=0.9.5>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/uuid/index.wml
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 index.wml
  --- ossp-web/pkg/lib/uuid/index.wml	6 Feb 2004 08:55:24 -0000	1.9
  +++ ossp-web/pkg/lib/uuid/index.wml	11 Feb 2004 14:50:50 -0000	1.10
  @@ -44,8 +44,8 @@
   <pkg_status
       name="uuid" assign="rse"
       stable="none"    stable_date="none"
  -    unstable="0.9.5" unstable_date="06-Feb-2004"
  -	done=95>
  +    unstable="0.9.6" unstable_date="11-Feb-2004"
  +	done=100>
   
   <h2>Source</h2>
   
  @@ -54,7 +54,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/uuid/
       directory=$(FTP_ROOT_DIR)/pkg/lib/uuid/
       files="uuid-*.tar.gz" 
  -	stable="uuid-0\.9\.5\.tar\.gz" unstable="uuid-SNAP.*\.tar.gz">
  +	stable="uuid-0\.9\.6\.tar\.gz" unstable="uuid-SNAP.*\.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Feb 11 15:53:01 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3C68D775E0; Wed, 11 Feb 2004 15:53:01 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog
Message-Id: <20040211145301.3C68D775E0@mail.ossp.org>
Date: Wed, 11 Feb 2004 15:53:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Feb-2004 15:53:00
  Branch: HEAD                             Handle: 2004021114530000

  Modified files:
    ossp-pkg/uuid           ChangeLog

  Log:
    Ops, fix ChangeLog entries

  Summary:
    Revision    Changes     Path
    1.37        +3  -1      ossp-pkg/uuid/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.36 -r1.37 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	11 Feb 2004 14:38:40 -0000	1.36
  +++ ossp-pkg/uuid/ChangeLog	11 Feb 2004 14:53:00 -0000	1.37
  @@ -11,11 +11,13 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 0.9.4 and 0.9.5 (19-Jan-2004 to 11-Feb-2004)
  +  Changes between 0.9.5 and 0.9.6 (06-Feb-2004 to 11-Feb-2004)
   
      o Added an experimental additional DCE 1.1 API for backward
        compatibility with existing applications.
        [Ralf S. Engelschall]
  +
  +  Changes between 0.9.4 and 0.9.5 (19-Jan-2004 to 06-Feb-2004)
   
      o Fixed filedescriptor leak in the PRNG sub-API.
        [Guerry Semones <guerry@tsunamiresearch.com>]
  @@ .

From ossp-cvs-owner@ossp.org  Wed Feb 11 15:59:23 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 91BDA775E0; Wed, 11 Feb 2004 15:59:23 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/uuid/ index.wml
Message-Id: <20040211145923.91BDA775E0@mail.ossp.org>
Date: Wed, 11 Feb 2004 15:59:23 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   11-Feb-2004 15:59:23
  Branch: HEAD                             Handle: 2004021114592300

  Modified files:
    ossp-web/pkg/lib/uuid   index.wml

  Log:
    use correct syntax

  Summary:
    Revision    Changes     Path
    1.11        +1  -1      ossp-web/pkg/lib/uuid/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/uuid/index.wml
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 index.wml
  --- ossp-web/pkg/lib/uuid/index.wml	11 Feb 2004 14:50:50 -0000	1.10
  +++ ossp-web/pkg/lib/uuid/index.wml	11 Feb 2004 14:59:23 -0000	1.11
  @@ -7,7 +7,7 @@
   
   <p align=right>
   <table bgcolor="e5e5e0" cellspacing=0 cellpadding=10><tr><td>
  -<font size=-1 color="#000000"><tt>$ uuid -v3 URL http://www.ossp.org/<br>
  +<font size=-1 color="#000000"><tt>$ uuid -v3 ns:URL http://www.ossp.org/<br>
   <b>02d9e6d5-9467-382e-8f9b-9300a64ac3cd</b></tt></font>
   </td></tr></table>
   </p>
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb 12 17:06:33 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6BAC8775E9; Thu, 12 Feb 2004 17:06:31 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ .cvsignore ChangeLog Makefile.in RATIONAL...
Message-Id: <20040212160631.6BAC8775E9@mail.ossp.org>
Date: Thu, 12 Feb 2004 17:06:31 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Feb-2004 17:06:30
  Branch: HEAD                             Handle: 2004021216062601

  Added files:
    ossp-pkg/shtool         RATIONAL
  Modified files:
    ossp-pkg/shtool         .cvsignore ChangeLog Makefile.in README THANKS
                            VERSION sh.arx sh.echo sh.fixperm sh.install
                            sh.mdate sh.mkdir sh.mkln sh.mkshadow sh.move
                            sh.path sh.platform sh.prop sh.rotate sh.scpp
                            sh.slo sh.subst sh.table sh.tarball sh.version
                            shtool.pod shtoolize.in

  Log:
    Embedded the command documentation from shtool.pod into the
    individual sh.xxxx scripts and this way split the large shtool(1)
    manual page into individual manual pages shtool-xxxx(1).
    
    Submitted partly by: Thomas Lotterer <thomas@lotterer.net>

  Summary:
    Revision    Changes     Path
    1.5         +2  -2      ossp-pkg/shtool/.cvsignore
    1.195       +6  -1      ossp-pkg/shtool/ChangeLog
    1.50        +29 -22     ossp-pkg/shtool/Makefile.in
    1.1         +129 -0     ossp-pkg/shtool/RATIONAL
    1.101       +1  -1      ossp-pkg/shtool/README
    1.32        +1  -0      ossp-pkg/shtool/THANKS
    1.76        +1  -1      ossp-pkg/shtool/VERSION
    1.21        +77 -1      ossp-pkg/shtool/sh.arx
    1.38        +121 -2     ossp-pkg/shtool/sh.echo
    1.18        +64 -1      ossp-pkg/shtool/sh.fixperm
    1.31        +120 -1     ossp-pkg/shtool/sh.install
    1.14        +87 -2      ossp-pkg/shtool/sh.mdate
    1.24        +91 -2      ossp-pkg/shtool/sh.mkdir
    1.18        +68 -2      ossp-pkg/shtool/sh.mkln
    1.24        +67 -1      ossp-pkg/shtool/sh.mkshadow
    1.20        +77 -1      ossp-pkg/shtool/sh.move
    1.27        +82 -1      ossp-pkg/shtool/sh.path
    1.5         +255 -2     ossp-pkg/shtool/sh.platform
    1.18        +56 -1      ossp-pkg/shtool/sh.prop
    1.10        +190 -2     ossp-pkg/shtool/sh.rotate
    1.26        +154 -1     ossp-pkg/shtool/sh.scpp
    1.24        +85 -1      ossp-pkg/shtool/sh.slo
    1.11        +99 -2      ossp-pkg/shtool/sh.subst
    1.20        +65 -1      ossp-pkg/shtool/sh.table
    1.21        +93 -1      ossp-pkg/shtool/sh.tarball
    1.36        +106 -1     ossp-pkg/shtool/sh.version
    1.66        +21 -854    ossp-pkg/shtool/shtool.pod
    1.34        +5  -2      ossp-pkg/shtool/shtoolize.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/.cvsignore
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 .cvsignore
  --- ossp-pkg/shtool/.cvsignore	1 Feb 2002 14:58:04 -0000	1.4
  +++ ossp-pkg/shtool/.cvsignore	12 Feb 2004 16:06:26 -0000	1.5
  @@ -4,6 +4,6 @@
   config.status
   configure
   shtool
  -shtool.1
   shtoolize
  -shtoolize.1
  +*.1
  +.timestamp
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.194 -r1.195 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	1 Jan 2004 16:56:33 -0000	1.194
  +++ ossp-pkg/shtool/ChangeLog	12 Feb 2004 16:06:26 -0000	1.195
  @@ -9,7 +9,12 @@
   
    ChangeLog
   
  - Changes between 1.6.2 and 2.0.0 (02-Nov-2002 to xx-Jan-2004):
  + Changes between 1.6.2 and 2.0.0 (02-Nov-2002 to xx-Feb-2004):
  +
  +   *) Embedded the command documentation from shtool.pod into the
  +      individual sh.xxxx scripts and this way split the large shtool(1)
  +      manual page into individual manual pages shtool-xxxx(1).
  +      [Ralf S. Engelschall, Thomas Lotterer <thomas@lotterer.net>]
   
      *) Upgraded to GNU Autoconf 2.59 environment.
         [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.49 -r1.50 Makefile.in
  --- ossp-pkg/shtool/Makefile.in	1 Jan 2004 16:54:20 -0000	1.49
  +++ ossp-pkg/shtool/Makefile.in	12 Feb 2004 16:06:26 -0000	1.50
  @@ -61,29 +61,28 @@
    sh.version \
    sh.path
   
  -all: shtool shtool.1 shtoolize.1
  +all: shtool manpages
   
   shtool: $(SCRIPTS) sh.common shtoolize
  -	@$(SHELL) sh.echo -e "%BBuilding shtool program:%b"
  +	@$(SHELL) sh.echo -e "%Bbuilding program shtool%b"
   	./shtoolize -o shtool all
   
  -shtool.1: shtool.pod
  -	@$(SHELL) sh.echo -e "%BBuilding shtool.1 manual page:%b"
  -	V1=`$(SHELL) sh.version -l txt -d short VERSION`; \
  +manpages: .timestamp
  +.timestamp: shtoolize.pod shtool.pod $(SCRIPTS)
  +	-@V1=`$(SHELL) sh.version -l txt -d short VERSION`; \
   	V2=`$(SHELL) sh.version -l txt -d long VERSION`; \
   	D=`$(SHELL) sh.version -l txt -d long VERSION | sed -e 's;.*(;;' -e 's;).*;;'`; \
  -	$(POD2MAN) --section=1 --center="GNU Portable Shell Tool" \
  -	           --release="$$D" --date="shtool $$V1" shtool.pod |\
  -	sed -e "s;SHTOOL_VERSION_STR;$$V2;" >shtool.1
  -
  -shtoolize.1: shtoolize.pod
  -	@$(SHELL) sh.echo -e "%BBuilding shtoolize.1 manual page:%b"
  -	V1=`$(SHELL) sh.version -l txt -d short VERSION`; \
  -	V2=`$(SHELL) sh.version -l txt -d long VERSION`; \
  -	D=`$(SHELL) sh.version -l txt -d long VERSION | sed -e 's;.*(;;' -e 's;).*;;'`; \
  -	$(POD2MAN) --section=1 --center="GNU Portable Shell Tool" \
  -	           --release="$$D" --date="shtool $$V1" shtoolize.pod |\
  -	sed -e "s;SHTOOL_VERSION_STR;$$V2;" >shtoolize.1
  +	for ifile in shtoolize.pod shtool.pod $(SCRIPTS); do \
  +	    tfile=`echo "$$ifile" | sed -e 's/\.pod$$/.tmp/' -e 's/^sh\.\(.*\)$$/shtool-\1.tmp/'`; \
  +	    ofile=`echo "$$ifile" | sed -e 's/\.pod$$/.1/' -e 's/^sh\.\(.*\)$$/shtool-\1.1/'`; \
  +		cp $$ifile $$tfile; \
  +	    $(SHELL) sh.echo -e "%Bbuilding manpage $$ofile%b"; \
  +	    $(POD2MAN) --section=1 --center="GNU Portable Shell Tool" \
  +	               --release="$$D" --date="shtool $$V1" $$tfile |\
  +	    sed -e "s;SHTOOL_VERSION_STR;$$V2;" >$$ofile; \
  +		rm -f $$tfile; \
  +	done; \
  +	touch .timestamp
   
   check: test
   test: all
  @@ -98,8 +97,11 @@
   	./shtool mkdir -f -p -m 755 $(DESTDIR)$(pkgdatadir)
   	./shtool install -c -m 755 shtool $(DESTDIR)$(bindir)/shtool
   	./shtool install -c -m 755 shtoolize $(DESTDIR)$(bindir)/shtoolize
  -	./shtool install -c -m 644 shtool.1 $(DESTDIR)$(mandir)/man1/shtool.1
  -	./shtool install -c -m 644 shtoolize.1 $(DESTDIR)$(mandir)/man1/shtoolize.1
  +	-@for ifile in shtoolize.pod shtool.pod $(SCRIPTS); do \
  +	    ofile=`echo "$$ifile" | sed -e 's/\.pod$$/.1/' -e 's/^sh\.\(.*\)$$/shtool-\1.1/'`; \
  +	    echo "./shtool install -c -m 644 $$ofile $(DESTDIR)$(mandir)/man1/$$ofile"; \
  +	    ./shtool install -c -m 644 $$ofile $(DESTDIR)$(mandir)/man1/$$ofile; \
  +	done
   	./shtool install -c -m 644 shtool.m4 $(DESTDIR)$(aclocaldir)/shtool.m4
   	@for script in sh.common $(SCRIPTS); do \
   	    echo "./shtool install -c -m 644 $$script $(DESTDIR)$(pkgdatadir)/$$script"; \
  @@ -112,8 +114,11 @@
   	    $(RM) $(DESTDIR)$(pkgdatadir)/$$script; \
   	done
   	$(RM) $(DESTDIR)$(aclocaldir)/shtool.m4
  -	$(RM) $(DESTDIR)$(mandir)/man1/shtoolize.1
  -	$(RM) $(DESTDIR)$(mandir)/man1/shtool.1
  +	-@for ifile in shtoolize.pod shtool.pod $(SCRIPTS); do \
  +	    ofile=`echo "$$ifile" | sed -e 's/\.pod$$/.1/' -e 's/^sh\.\(.*\)$$/shtool-\1.1/'`; \
  +	    echo "$(RM) $(DESTDIR)$(mandir)/man1/$$ofile"; \
  +	    $(RM) $(DESTDIR)$(mandir)/man1/$$ofile; \
  +	done
   	$(RM) $(DESTDIR)$(bindir)/shtoolize
   	$(RM) $(DESTDIR)$(bindir)/shtool
   	$(RMDIR) $(DESTDIR)$(aclocaldir) >/dev/null 2>&1 || $(TRUE)
  @@ -125,9 +130,11 @@
   	$(RMDIR) $(DESTDIR)$(prefix) >/dev/null 2>&1 || $(TRUE)
   
   clean:
  -	$(RM) shtool shtool.1 shtoolize.1
  +	$(RM) shtool
  +	$(RM) *.1
   
   distclean: clean
   	$(RM) Makefile shtoolize
   	$(RM) config.cache config.status config.log
  +	$(RM) .timestamp
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/RATIONAL
  ============================================================================
  $ cvs diff -u -r0 -r1.1 RATIONAL
  --- /dev/null	2004-02-12 17:06:28.000000000 +0100
  +++ RATIONAL	2004-02-12 17:06:28.000000000 +0100
  @@ -0,0 +1,129 @@
  +       _     _              _
  +   ___| |__ | |_ ___   ___ | |
  +  / __| '_ \| __/ _ \ / _ \| |
  +  \__ \ | | | || (_) | (_) | |
  +  |___/_| |_|\__\___/ \___/|_|
  +
  +  GNU shtool -- The GNU Portable Shell Tool
  +
  +  RATIONAL
  +  ========
  +
  +  The Context
  +
  +  For the configuration, build and installation environment of modern
  +  free software packages one nowadays uses GNU autoconf, GNU automake and
  +  GNU libtool. GNU autoconf covers the configuration, GNU automake covers
  +  the generation of the build environment and GNU libtool covers most of
  +  a libraries build process. But at least when it comes to the installa-
  +  tion step one usually have to use a few auxiliary scripts like
  +  "mkdir.sh", "install.sh", etc. These scripts are replacements for sys-
  +  tem tools and are required mainly for portability reasons. The result
  +  is usually an "etc/" subdirectory in the source tree where over time a
  +  lot shell scripts accumulate.
  +
  +  Maintainance Problem
  +
  +  The problem with those "etc/" shell scripts starts if one has to main-
  +  tain lots of free software packages as it's the case for the author of
  +  shtool. Then over time all "etc/" directories diverge and with every
  +  day it gets more and more nasty to always keep them in sync. Especially
  +  if some scripts were locally adjusted because no centralized main-
  +  tainance location exists, of course. For autoconf no such problem
  +  exists, because the resulting "configure" script is generated
  +  on-the-fly. The same applies to automake and the various "Makefile.in"
  +  files.
  +
  +  Only for libtool one always has to grab the latest copy. But because
  +  it's just two files ("ltmain.sh" and "ltconfig"), keeping a source
  +  trees in sync is not too complicated (especially not if using the handy
  +  "libtoolize" program). But the "etc/" shell script mess is nasty, espe-
  +  cially because there is no master version on the net. Additionally
  +  everytime one starts a new project, one has to establish a new source
  +  tree. For a GNU hacker it's immediately clear that autoconf and friends
  +  are part of the game. But which "etc/" shell scripts are needed this
  +  time? And from which existing source tree to copy them from?  Hmmm...
  +  the same procedure as last year?!
  +
  +  The Aesthetic Problem
  +
  +  When a free software package has a large source tree (say, more than 50
  +  files and especially with one or more subdirectories) it's usually no
  +  problem to have an additional "etc/" subdirectory with some scripts.
  +  They then totally go down. But for smaller packages, especially those
  +  living in a single source directory (a degenerated tree), some people
  +  (like the author of shtool) have aesthetic problems. Because it looks
  +  strange to them that 20% of the files in the source tree are just aux-
  +  iliary scripts. Sure, the actual amount of script code even shtool can-
  +  not reduce, but shtool merges them together into a single file and this
  +  way they optically totally disappear from the source tree.
  +
  +  This is a pure aesthetical issue, of course. But keep in mind that
  +  hacking is a piece of art. And a well layouted source tree is a piece
  +  of art for real hackers, too. Oh, and for those who really insist on a
  +  technical reason: it's also easier to upgrade a single file than multi-
  +  ple files ;)
  +
  +  Filling the gap
  +
  +  So, wouldn't it be nice to have a fourth package (beside autoconf,
  +  automake and libtool) which fills the gap, i.e. which provides the
  +  functionality of the old files in "etc/", is maintained at a central-
  +  ized location and even consists of just a single (perhaps large) script
  +  one can threat as a black box the same way one already does this for
  +  libtool? The author thought this would be actually very useful and the
  +  result is the current GNU shtool package which at least successfully
  +  solved the above problems of the author.
  +
  +  The goals in detail
  +
  +  To better understand the intentions behind shtool and to avoid confu-
  +  sion, here are the original goals of the shtool script:
  +
  +  1. It has to be self-contained and reside in a single file
  +     This was achieved by compiling the resulting shtool script out of
  +     the ingredient source scripts. The advantage is that shtool is still
  +     easily maintainable, because one can test each script separately.
  +     But the final functionality then resides in an all-in-one script
  +     which can be easily spread over multiple source trees.
  +
  +  2. It has to cover all functionality of the old scripts
  +     This was achieved by (re)implementing really all functionality which
  +     experience showed is important in source trees of typical free soft-
  +     ware packages.
  +
  +  3. It has to be maximum portable over all Unix flavors
  +     This was achieved by basing the ingredient shell scripts only on
  +     well-proven code which already survived practice in other projects
  +     over more than a few months. Especially this means that a lot of
  +     complicated emulations are done to avoid the use of unportable Unix
  +     programs (like "fmt", "tr", etc) or unportable features of well-
  +     known Unix programs (like shell functions, special "sed" features,
  +     etc. pp). That's why shtool's code sometimes looks crazy and like
  +     overkill to you. Don't think this is because of the authors crazy-
  +     ness. Instead it's most of the time mainly for portability reasons.
  +
  +  4. It has to be clean and fully documented
  +     This was achieved by reimplementing too ugly functionality from
  +     scratch and cleaning up old shell script code plus writing a com-
  +     plete set of manual pages.
  +
  +  5. It has to stay under a reasonable and common license
  +     This was achieved by placing the shtool package under the GNU Gen-
  +     eral Public License (GPL). This way the shtool package itself is
  +     well protected and is guarrantied to be kept free software, but the
  +     resulting shtool script can be nevertheless used in all types of
  +     source trees. Notice here: given that one includes GNU shtool verba-
  +     tim into an own source tree, one is justified in saying that it
  +     remains separate from the own package, and that this way one is sim-
  +     ply just using shtool. So, in this situation, there is no require-
  +     ment that the package itself is licensed under the GNU General Pub-
  +     lic License in order to take advantage of shtool. Keep this in mind
  +     ;)
  +
  +  6. It has to be modularized for flexibility reasons
  +     This was achieved by using an auxiliary tool shtoolize(1) which can
  +     be used to build individual "shtool" scripts out of the ingredient
  +     shell scripts. This way if one don't need all the available func-
  +     tionality one can assemble together an individual "shtool" script.
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/README
  ============================================================================
  $ cvs diff -u -r1.100 -r1.101 README
  --- ossp-pkg/shtool/README	1 Jan 2004 16:56:33 -0000	1.100
  +++ ossp-pkg/shtool/README	12 Feb 2004 16:06:26 -0000	1.101
  @@ -10,7 +10,7 @@
     http://www.gnu.org/software/shtool/
     ftp://ftp.gnu.org/gnu/shtool/
   
  -  Version 2.0b0 (01-Jan-2004)
  +  Version 2.0b0 (12-Feb-2004)
   
     The GNU shtool program is a compilation of small but very stable and
     portable shell scripts into a single shell tool. All ingredients
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/THANKS
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 THANKS
  --- ossp-pkg/shtool/THANKS	13 Aug 2003 14:20:34 -0000	1.31
  +++ ossp-pkg/shtool/THANKS	12 Feb 2004 16:06:26 -0000	1.32
  @@ -28,6 +28,7 @@
     o Thomas Linden            <tom@izb.net>
     o Mirko Liss               <mirko.liss@web.de>
     o Liones                   <liones@myrealbox.com>
  +  o Thomas Lotterer          <thomas@lotterer.net>
     o Markus F.X.J. Oberhumer  <markus.oberhumer@jk.uni-linz.ac.at>
     o Benjamin Saller          <case@appliedtheory.com>
     o Michael Schloh           <michael@schloh.com>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/VERSION
  ============================================================================
  $ cvs diff -u -r1.75 -r1.76 VERSION
  --- ossp-pkg/shtool/VERSION	1 Jan 2004 16:56:33 -0000	1.75
  +++ ossp-pkg/shtool/VERSION	12 Feb 2004 16:06:26 -0000	1.76
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for GNU shtool (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is GNU shtool, Version 2.0b0 (01-Jan-2004)
  +  This is GNU shtool, Version 2.0b0 (12-Feb-2004)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.arx
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 sh.arx
  --- ossp-pkg/shtool/sh.arx	1 Jan 2004 16:54:20 -0000	1.20
  +++ ossp-pkg/shtool/sh.arx	12 Feb 2004 16:06:26 -0000	1.21
  @@ -1,7 +1,6 @@
   ##
   ##  arx -- Extended archive command
   ##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Originally written for shtool
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ -98,4 +97,81 @@
       fi
       rm -rf $tmpdir
   fi
  +
  +shtool_exit 0
  +
  +##
  +##  manual page
  +##
  +
  +=pod
  +
  +=head1 NAME
  +
  +B<shtool arx> - B<GNU shtool> ar(1) extensional command
  +
  +=head1 SYNOPSIS
  +
  +B<shtool arx>
  +[B<-t>|B<--trace>]
  +[B<-C>|B<--command> I<cmd>]
  +I<op>
  +I<archive>
  +I<file> [I<file> ...]
  +
  +=head1 DESCRIPTION
  +
  +B<shtool arx> is a wrapper around the archiving tool ar(1). It provides
  +the ability to create archives out of existing archives, i.e., if one of
  +I<file> matches "C<*.a>", the archive member files of I<file> are used
  +instead of I<file> itself.
  +
  +The trick of this command is the automatic handling of archive members
  +which is especially interesting if one wants to construct a (usually
  +top-level) library archive out of pre-built sub-library archives
  +(usually staying inside subdirs) in a large source tree. For B<GNU
  +libtool> based projects, a similar functionality is provided by B<GNU
  +libtool> internally, too.
  +
  +=head1 OPTIONS
  +
  +The following command line options are available.
  +
  +=over 4
  +
  +=item B<-t>, B<--trace>
  +
  +Shows the actually involved shell commands.
  +
  +=item B<-C>, B<--command> I<cmd>
  +
  +Set the used ar(1) command to I<cmd> instead of just "ar" (searched in C<$PATH>).
  +
  +=back
  +
  +=head1 EXAMPLE
  +
  + #   Makefile
  + AR=ar
  + RANLIB=ranlib
  +   :
  + OBJS=foo.o bar.o
  + LIBS=baz/libbaz.a quux/libquux.a
  +   :
  + libfoo.a: $(OBJS) $(LIBS)
  +     shtool arx -C $(AR) rc libfoo.a $(OBJS) $(LIBS)
  +     $(RANLIB) libfoo.a
  +
  +=head1 HISTORY
  +
  +The B<GNU shtool> B<arx> command was originally written by Ralf S.
  +Engelschall E<lt>rse@engelschall.comE<gt> in 1999 for B<GNU shtool>. It
  +was prompted by need to build libraries out of sub-libraries inside the
  +B<OSSP> project.
  +
  +=head1 SEE ALSO
  +
  +shtool(1), ar(1).
  +
  +=cut
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.echo
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 sh.echo
  --- ossp-pkg/shtool/sh.echo	1 Jan 2004 16:54:20 -0000	1.37
  +++ ossp-pkg/shtool/sh.echo	12 Feb 2004 16:06:26 -0000	1.38
  @@ -1,7 +1,6 @@
   ##
   ##  echo -- Print string with optional construct expansion
   ##  Copyright (c) 1998-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Originally written for WML as buildinfo
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ -20,7 +19,7 @@
   ##
   
   str_tool="echo"
  -str_usage="[-n|--newline] [-e|--expand] [<str> ...]"
  +str_usage="[-n|--newline] [-e|--expand] [<string> ...]"
   arg_spec="0+"
   opt_spec="n.e."
   opt_alias="n:newline,e:expand"
  @@ -317,4 +316,124 @@
           echo dummy | awk '{ printf("%s", TEXT); }' TEXT="$text"
       fi
   fi
  +
  +shtool_exit 0
  +
  +##
  +##  manual page
  +##
  +
  +=pod
  +
  +=head1 NAME
  +
  +B<shtool echo> - B<GNU shtool> echo(1) extensional command
  +
  +=head1 SYNOPSIS
  +
  +B<shtool echo>
  +[B<-n>|B<--newline>]
  +[B<-e>|B<--expand>]
  +I<string>
  +
  +=head1 DESCRIPTION
  +
  +B<shtool echo> is an echo(1) style command which prints I<string> to
  +F<stdout> and optionally provides special expansion constructs (terminal
  +bold mode, environment details, date, etc) and newline control. The
  +trick of this command is that it provides a portable B<-n> option and
  +hides the gory details needed to find out the environment details under
  +option B<-e>.
  +
  +=head1 OPTIONS
  +
  +The following command line options are available.
  +
  +=over 4
  +
  +=item B<-n>, B<--newline>
  +
  +By default, output is written to F<stdout> followed by a "newline"
  +(ASCII character 0x0a). If option B<-n> is used, this newline character
  +is omitted.
  +
  +=item B<-e>, B<--expand>
  +
  +If option B<-e> is used, I<string> can contain special "B<%>I<x>"
  +constructs which are expanded before the output is written. Currently
  +the following constructs are recognized:
  +
  +=over 4
  +
  +=item B<%B>
  +
  +switch terminal mode to bold display mode.
  +
  +=item B<%b>
  +
  +switch terminal mode back to normal display mode.
  +
  +=item B<%u>
  +
  +the current user name.
  +
  +=item B<%U>
  +
  +the current user id (numerical).
  +
  +=item B<%g>
  +
  +the current group name.
  +
  +=item B<%G>
  +
  +the current group id (numerical).
  +
  +=item B<%h>
  +
  +the current hostname (without any domain extension).
  +
  +=item B<%d>
  +
  +the current domain name.
  +
  +=item B<%D>
  +
  +the current day of the month.
  +
  +=item B<%M>
  +
  +the current month (numerical).
  +
  +=item B<%m>
  +
  +the current month name.
  +
  +=item B<%Y>
  +
  +the current year.
  +
  +=back
  +
  +=back
  +
  +=head1 EXAMPLE
  +
  + #   shell script
  + shtool echo -n -e "Enter your name [%B%u%b]: "; read name
  + shtool echo -e "Your Email address might be %u@%h%d"
  + shtool echo -e "The current date is %D-%m-%Y"
  +
  +=head1 HISTORY
  +
  +The B<GNU shtool> B<echo> command was originally written by Ralf S.
  +Engelschall E<lt>rse@engelschall.comE<gt> in 1998 for I<Website META
  +Language> (WML) under the name B<buildinfo>. It was later taken over
  +into B<GNU shtool>.
  +
  +=head1 SEE ALSO
  +
  +shtool(1), echo(1).
  +
  +=cut
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.fixperm
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 sh.fixperm
  --- ossp-pkg/shtool/sh.fixperm	1 Jan 2004 16:54:20 -0000	1.17
  +++ ossp-pkg/shtool/sh.fixperm	12 Feb 2004 16:06:26 -0000	1.18
  @@ -1,7 +1,6 @@
   ##
   ##  fixperm -- Fix file permissions inside a source tree
   ##  Copyright (c) 1996-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Originally written for ePerl
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ -76,4 +75,68 @@
           fi
       done
   done
  +
  +shtool_exit 0
  +
  +##
  +##  manual page
  +##
  +
  +=pod
  +
  +=head1 NAME
  +
  +B<shtool fixperm> - B<GNU shtool> file permission fixing command
  +
  +=head1 SYNOPSIS
  +
  +B<shtool fixperm>
  +[B<-v>|B<--verbose>]
  +[B<-t>|B<--trace>]
  +I<path>
  +[I<path> ...]
  +
  +=head1 DESCRIPTION
  +
  +B<shtool fixperm> fixes file permissions inside a source tree under
  +I<path> by cleaning up the permission bits. It determines the cleaned up
  +permission from the already set bits. It is intended to be run before
  +a tarball is rolled (usually with B<shtool tarball>) out of a source
  +tree. The trick is that this is more convenient than having to set the
  +permissions manually or by using a large file list.
  +
  +=head1 OPTIONS
  +
  +The following command line options are available.
  +
  +=over 4
  +
  +=item B<-v>, B<--verbose>
  +
  +Display some processing information.
  +
  +=item B<-t>, B<--trace>
  +
  +Enable the output of the essential shell commands which are executed.
  +
  +=back
  +
  +=head1 EXAMPLE
  +
  + #   Makefile.in
  + dist:
  +     shtool fixperm -v *
  +     ...
  +
  +=head1 HISTORY
  +
  +The B<GNU shtool> B<fixperm> command was originally written by Ralf S.
  +Engelschall E<lt>rse@engelschall.comE<gt> in 1996 for I<OSSP eperl>.
  +It was later taken over into B<GNU shtool>.
  +
  +=head1 SEE ALSO
  +
  +shtool(1), chmod(1).
  +
  +=cut
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.install
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 sh.install
  --- ossp-pkg/shtool/sh.install	1 Jan 2004 16:54:20 -0000	1.30
  +++ ossp-pkg/shtool/sh.install	12 Feb 2004 16:06:26 -0000	1.31
  @@ -1,7 +1,6 @@
   ##
   ##  install -- Install a program, script or datafile
   ##  Copyright (c) 1997-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Originally written for shtool
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ -190,4 +189,124 @@
           rm -f $dst && mv $dsttmp $dst
       fi
   done
  +
  +shtool_exit 0
  +
  +##
  +##  manual page
  +##
  +
  +=pod
  +
  +=head1 NAME
  +
  +B<shtool install> - B<GNU shtool> install(1) command
  +
  +=head1 SYNOPSIS
  +
  +B<shtool install>
  +[B<-v>|B<--verbose>]
  +[B<-t>|B<--trace>]
  +[B<-d>|B<--mkdir>]
  +[B<-c>|B<--copy>]
  +[B<-C>|B<--compare-copy>]
  +[B<-s>|B<--strip>]
  +[B<-m>|B<--mode> I<mode>]
  +[B<-o>|B<--owner> I<owner>]
  +[B<-g>|B<--group> I<group>]
  +[B<-e>|B<--exec> I<sed-cmd>]
  +I<file> [I<file> ...]
  +I<path>
  +
  +=head1 DESCRIPTION
  +
  +This command installs a one or more I<file>s to a given target I<path>
  +providing all important options of the BSD install(1) command.
  +The trick is that the functionality is provided in a portable way.
  +
  +=head1 OPTIONS
  +
  +The following command line options are available.
  +
  +=over 4
  +
  +=item B<-v>, B<--verbose>
  +
  +Display some processing information.
  +
  +=item B<-t>, B<--trace>
  +
  +Enable the output of the essential shell commands which are executed.
  +
  +=item B<-d>, B<--mkdir>
  +
  +To maximize BSD compatiblity, the BSD "B<shtool> C<install -d>" usage is
  +internally mapped to the "B<shtool> C<mkdir -f -p -m 755>" command.
  +
  +=item B<-c>, B<--copy>
  +
  +Copy the I<file> to the target I<path>. Default is to move.
  +
  +=item B<-C>, B<--compare-copy>
  +
  +Same as B<-c> except if the destination file already exists and is
  +identical to the source file, no installation is done and the target
  +remains untouched.
  +
  +=item B<-s>, B<--strip>
  +
  +This option strips program executables during the installation, see
  +strip(1). Default is to install verbatim.
  +
  +=item B<-m>, B<--mode> I<mode>
  +
  +The file mode applied to the target, see chmod(1). Setting mode to
  +"C<->" skips this step and leaves the operating system default which is
  +usually based on umask(1). Some file modes require superuser privileges
  +to be set. Default is 0755.
  +
  +=item B<-o>, B<--owner> I<owner>
  +
  +The file owner name or id applied to the target, see chown(1). This
  +option requires superuser privileges to execute. Default is to skip this
  +step and leave the operating system default which is usually based on
  +the executing uid or the parent setuid directory.
  +
  +=item B<-g>, B<--group> I<group>
  +
  +The file group name or id applied to the target, see chgrp(1). This
  +option requires superuser privileges to execute to the fullest extend,
  +otherwise the choice of I<group> is limited on most operating systems.
  +Default is to skip this step and leave the operating system default
  +which is usually based on the executing gid or the parent setgid
  +directory.
  +
  +=item B<-e>, B<--exec> I<sed-cmd>
  +
  +This option can be used one or multiple times to apply one or more
  +sed(1) commands to the file contents during installation.
  +
  +=back
  +
  +=head1 EXAMPLE
  +
  + #   Makefile
  + install:
  +      :
  +     shtool install -c -s -m 4755 foo $(bindir)/
  +     shtool install -c -m 644 foo.man $(mandir)/man1/foo.1
  +     shtool install -c -m 644 -e "s/@p@/$prefix/g" foo.conf $(etcdir)/
  +
  +=head1 HISTORY
  +
  +The B<GNU shtool> B<install> command was originally written by Ralf S.
  +Engelschall E<lt>rse@engelschall.comE<gt> in 1997 for B<GNU shtool>. It
  +was prompted by portability issues in the installation procedures of
  +B<OSSP> libraries.
  +
  +=head1 SEE ALSO
  +
  +shtool(1), umask(1), chmod(1), chown(1), chgrp(1), strip(1), sed(1).
  +
  +=cut
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.mdate
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 sh.mdate
  --- ossp-pkg/shtool/sh.mdate	4 Apr 2003 16:36:01 -0000	1.13
  +++ ossp-pkg/shtool/sh.mdate	12 Feb 2004 16:06:26 -0000	1.14
  @@ -1,8 +1,7 @@
   ##
   ##  mdate -- Pretty-print modification time of a file or dir
   ##  Copyright (c) 1995-1997 Free Software Foundation, Inc.
  -##  Originally idea and basis code by Ulrich Drepper
  -##  Enhanced by Ralf S. Engelschall for shtool
  +##  Copyright (c) 1998-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ -149,4 +148,90 @@
           printf("\n");
   }' "day=$day" "month=$month" "year=$year" \
      "field=$opt_f" "order=$opt_o" "newline=$opt_n"
  +
  +shtool_exit 0
  +
  +##
  +##  manual page
  +##
  +
  +=pod
  +
  +=head1 NAME
  +
  +B<shtool mdate> - B<GNU shtool> pretty-print last modification time
  +
  +=head1 SYNOPSIS
  +
  +B<shtool mdate>
  +[B<-n>|B<--newline>]
  +[B<-z>|B<--zero>]
  +[B<-s>|B<--shorten>]
  +[B<-d>|B<--digits>]
  +[B<-f>|B<--field-sep> I<str>]
  +[B<-o>|B<--order> I<spec>]
  +I<path>
  +
  +=head1 DESCRIPTION
  +
  +This command pretty-prints the last modification time of a given file or
  +directory I<path>, while still allowing one to specify the format of the
  +date to display.
  +
  +=head1 OPTIONS
  +
  +The following command line options are available.
  +
  +=over 4
  +
  +=item B<-n>, B<--newline>
  +
  +By default, output is written to F<stdout> followed by a "newline"
  +(ASCII character 0x0a). If option B<-n> is used, this newline character
  +is omitted.
  +
  +=item B<-z>, B<--zero>
  +
  +Pads numeric day and numeric month with a leading zero. Default is to
  +have variable width.
  +
  +=item B<-s>, B<--shorten>
  +
  +Shortens the name of the month to a english three character
  +abbreviation. Default is full english name. This option is silently
  +ignored when combined with B<-d>.
  +
  +=item B<-d>, B<--digits>
  +
  +Use digits for month. Default is to use a english name.
  +
  +=item B<-f>, B<--field-sep> I<str>
  +
  +Field separator string between the day month year tripple. Default is a
  +single space character.
  +
  +=item B<-o>, B<--order> I<spec>
  +
  +Specifies order of the day month year elements within the tripple. Each
  +element represented as a single character out of ``C<d>'', ``C<m>'' and
  +``C<y>''. The default for I<spec> is ``C<dmy>''.
  +
  +=head1 EXAMPLE
  +
  + #   shell script
  + shtool mdate -n /
  + shtool mdate -f '/' -z -d -o ymd foo.txt
  + shtool mdate -f '-' -s foo.txt
  +
  +=head1 HISTORY
  +
  +The B<GNU shtool> B<mdate> command was originally written by
  +Ulrich Drepper in 1995 and revised by Ralf S. Engelschall
  +E<lt>rse@engelschall.comE<gt> in 1998 for inclusion into B<GNU shtool>.
  +
  +=head1 SEE ALSO
  +
  +shtool(1), date(1), ls(1).
  +
  +=cut
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.mkdir
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 sh.mkdir
  --- ossp-pkg/shtool/sh.mkdir	1 Jan 2004 16:54:20 -0000	1.23
  +++ ossp-pkg/shtool/sh.mkdir	12 Feb 2004 16:06:27 -0000	1.24
  @@ -1,8 +1,6 @@
   ##
   ##  mkdir -- Make one or more directories
   ##  Copyright (c) 1996-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Originally written for public domain by Noah Friedman <friedman@prep.ai.mit.edu>
  -##  Cleaned up and enhanced for shtool
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ -112,5 +110,96 @@
           done
       fi
   done
  +
   shtool_exit $errstatus
  +
  +##
  +##  manual page
  +##
  +
  +=pod
  +
  +=head1 NAME
  +
  +B<shtool mkdir> - B<GNU shtool> mkdir(1) style command
  +
  +=head1 SYNOPSIS
  +
  +B<shtool mkdir>
  +[B<-t>|B<--trace>]
  +[B<-f>|B<--force>]
  +[B<-p>|B<--parents>]
  +[B<-m>|B<--mode> I<mode>]
  +[B<-o>|B<--owner> I<owner>]
  +[B<-g>|B<--group> I<group>]
  +I<dir> [I<dir> ...]
  +
  +=head1 DESCRIPTION
  +
  +This is a mkdir(1) style command with additional options and the ability
  +to be smart if the directory already exists which is important for
  +installation procedures.
  +
  +=head1 OPTIONS
  +
  +The following command line options are available.
  +
  +=over 4
  +
  +=item B<-t>, B<--trace>
  +
  +Shows the actually involved shell commands.
  +
  +=item B<-f>, B<--force>
  +
  +Forced continuation and no complaints if directory already exists.
  +Default is to terminate with error.
  +
  +=item B<-p>, B<--parents>
  +
  +Automatic parent directory creation. Default is to only create the last
  +directory in the path and fail if parents are missing.
  +
  +=item B<-m>, B<--mode> I<mode>
  +
  +The directory mode applied to the directory, see chmod(1). Omitting mode
  +skips this step and leaves the operating system default which is usually
  +based on umask(1). Some directory modes require superuser privileges to
  +be set. Default is to stick with operating system defaults.
  +
  +=item B<-o>, B<--owner> I<owner>
  +
  +The directory owner name or id applied to the directory, see chown(1).
  +This option requires superuser privileges to execute. Default is to skip
  +this step and leave the operating system default which is usually based
  +on the executing uid or the parent setuid directory.
  +
  +=item B<-g>, B<--group> I<group>
  +
  +The directory group name or id applied to the directory, see chgrp(1). This
  +option requires superuser privileges to execute to the fullest extend,
  +otherwise the choice of I<group> is limited on most operating systems.
  +Default is to skip this step and leave the operating system default
  +which is usually based on the executing gid or the parent setgid
  +directory.
  +
  +=head1 EXAMPLE
  +
  + #   Makefile
  + install:
  +     shtool mkdir -f -p -m 755 $(bindir)
  +     shtool mkdir -f -p -m 755 $(mandir)/man1
  +      :
  +
  +=head1 HISTORY
  +
  +The B<GNU shtool> B<mkdir> command was originally written for Public
  +Domain by Noah Friedman and later revised by Ralf S. Engelschall
  +E<lt>rse@engelschall.comE<gt> in 1999 for inclusion into B<GNU shtool>.
  +
  +=head1 SEE ALSO
  +
  +shtool(1), mkdir(1).
  +
  +=cut
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.mkln
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 sh.mkln
  --- ossp-pkg/shtool/sh.mkln	1 Jan 2004 16:54:20 -0000	1.17
  +++ ossp-pkg/shtool/sh.mkln	12 Feb 2004 16:06:27 -0000	1.18
  @@ -1,7 +1,6 @@
   ##
   ##  mkln -- Make link with calculation of relative paths
  -##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Originally written for shtool
  +##  Copyright (c) 1998-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ -171,4 +170,71 @@
       fi
       eval ln$lnopt $srcpre$srcdir$srcbase $dstpre$dstdir$dstbase
   done
  +
  +shtool_exit 0
  +
  +##
  +##  manual page
  +##
  +
  +=pod
  +
  +=head1 NAME
  +
  +B<shtool mkln> - B<GNU shtool> enhanced ln(1) replacement
  +
  +=head1 SYNOPSIS
  +
  +B<shtool mkln>
  +[B<-t>|B<--trace>]
  +[B<-f>|B<--force>]
  +[B<-s>|B<--symbolic>]
  +I<src-path> [I<src-path> ...]
  +I<dst-path>
  +
  +=head1 DESCRIPTION
  +
  +This is a ln(1) style command. It is enhanced to provide automatic
  +calculation and usage of relative links with the shortest possible path,
  +if possible. Usually if I<src-path> and I<dst-path> are not absolute
  +paths or at least they share a common prefix except the root directory
  +(``C</>''). When more than one I<src-path> is specified, all of them are
  +linked into I<dst-path>.
  +
  +=head1 OPTIONS
  +
  +The following command line options are available.
  +
  +=over 4
  +
  +=item B<-t>, B<--trace>
  +
  +Enable the output of the essential shell commands which are executed.
  +
  +=item B<-f>, B<--force>
  +
  +Force the creation of the link even if it exists. Default is to fail
  +with error.
  +
  +=item B<-s>, B<--symbolic>
  +
  +Create a symbolic link instead of a hard-link.
  +
  +=back
  +
  +=head1 EXAMPLE
  +
  + #   shell script
  + shtool mkln -s foo/bar baz/quux
  +
  +=head1 HISTORY
  +
  +The B<GNU shtool> B<fixperm> command was originally written by Ralf S.
  +Engelschall E<lt>rse@engelschall.comE<gt> in 1998 for I<ePerl>.
  +
  +=head1 SEE ALSO
  +
  +shtool(1), ln(1).
  +
  +=cut
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.mkshadow
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 sh.mkshadow
  --- ossp-pkg/shtool/sh.mkshadow	1 Jan 2004 16:54:20 -0000	1.23
  +++ ossp-pkg/shtool/sh.mkshadow	12 Feb 2004 16:06:27 -0000	1.24
  @@ -1,7 +1,6 @@
   ##
   ##  mkshadow -- Make a shadow tree through symbolic links
   ##  Copyright (c) 1998-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Originally written for Apache
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ -138,4 +137,71 @@
        fi
        ln -s $from $to
   done
  +
  +shtool_exit 0
  +
  +##
  +##  manual page
  +##
  +
  +=pod
  +
  +=head1 NAME
  +
  +B<shtool mkshadow> - B<GNU shtool> create shadow tree using symlinks
  +
  +=head1 SYNOPSIS
  +
  +B<shtool mkshadow>
  +[B<-v>|B<--verbose>]
  +[B<-t>|B<--trace>]
  +[B<-a>|B<--all>]
  +I<src-dir>
  +I<dst-dir>
  +
  +=head1 DESCRIPTION
  +
  +This command creates a shadow tree of I<src-dir> under I<dst-dir> by
  +recreating the directory hierarchy of I<src-dir> under I<dst-dir> and by
  +creating the files of I<src-dir> by linking them into the corresponding
  +directories under I<dst-dir> via symbolic links. When I<src-dir> can
  +be reached via relative paths from I<dst-dir>, relative symbolic links
  +are used, too. This high-level functionality is originally designed for
  +developers to create copies of source trees.
  +
  +=head1 OPTIONS
  +
  +The following command line options are available.
  +
  +=over 4
  +
  +=item B<-v>, B<--verbose>
  +
  +Display some processing information.
  +
  +=item B<-t>, B<--trace>
  +
  +Enable the output of the essential shell commands which are executed.
  +
  +=item B<-a>, B<--all>
  +
  +Really shadow all files and directories in I<src-dir>. Default is to
  +skip CVS related files and directories, backup files, object files, etc.
  +
  +=head1 EXAMPLE
  +
  + #   shell script
  + shtool mkshadow -v -a . /tmp/shadow
  +
  +=head1 HISTORY
  +
  +The B<GNU shtool> B<mkshadow> command was originally written by Ralf S.
  +Engelschall E<lt>rse@engelschall.comE<gt> in 1998 for B<Apache>. It was
  +later revised and taken over into B<GNU shtool>.
  +
  +=head1 SEE ALSO
  +
  +shtool(1), ln(1).
  +
  +=cut
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.move
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 sh.move
  --- ossp-pkg/shtool/sh.move	1 Jan 2004 16:54:20 -0000	1.19
  +++ ossp-pkg/shtool/sh.move	12 Feb 2004 16:06:27 -0000	1.20
  @@ -1,7 +1,6 @@
   ##
   ##  move -- Move files with simultaneous substitution
   ##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Originally written for shtool
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ -113,5 +112,82 @@
           break;
       fi
   done
  +
   shtool_exit $errorstatus
  +
  +##
  +##  manual page
  +##
  +
  +=pod
  +
  +=head1 NAME
  +
  +B<shtool move> - B<GNU shtool> enhanced mv(1) replacement
  +
  +=head1 SYNOPSIS
  +
  +B<shtool move>
  +[B<-v>|B<--verbose>]
  +[B<-t>|B<--trace>]
  +[B<-e>|B<--expand>]
  +[B<-p>|B<--preserve>]
  +I<src-file>
  +I<dst-file>
  +
  +=head1 DESCRIPTION
  +
  +This is a mv(1) style command enhanced with the ability to rename
  +multiple files in a single operation and the ability to detect and not
  +touch existing equal destinations files, thus preserving timestamps.
  +
  +=head1 OPTIONS
  +
  +The following command line options are available.
  +
  +=over 4
  +
  +=item B<-v>, B<--verbose>
  +
  +Display some processing information.
  +
  +=item B<-t>, B<--trace>
  +
  +Enable the output of the essential shell commands which are executed.
  +
  +=item B<-e>, B<--expand>
  +
  +Expand asterisk in I<src> to be used as "C<%>I<n>" (where I<n> is
  +C<1>,C<2>,...) in I<dst-file>. This is useful for renaming multiple
  +files at once.
  +
  +=item B<-p>, B<--preserve>
  +
  +Detect I<src-file> and I<dst-file> having equal content and not touch
  +existing destination files, thus perserving timestamps. This is useful
  +for applications that monitor timestamps, i.e. suppress make(1L)
  +repeating actions for unchanged files.
  +
  +=back
  +
  +=head1 EXAMPLE
  +
  + #   shell script
  + shtool move -v -e '*.txt' %1.asc
  +
  + #   Makefile
  + scanner.c: scanner.l
  +     lex scanner.l
  +     shtool move -t -p lex.yy.c scanner.c
  +
  +=head1 HISTORY
  +
  +The B<GNU shtool> B<move> command was originally written by Ralf S.
  +Engelschall E<lt>rse@engelschall.comE<gt> in 1999 for B<GNU shtool>.
  +
  +=head1 SEE ALSO
  +
  +shtool(1), mv(1), make(1).
  +
  +=cut
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.path
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 sh.path
  --- ossp-pkg/shtool/sh.path	1 Jan 2004 16:54:20 -0000	1.26
  +++ ossp-pkg/shtool/sh.path	12 Feb 2004 16:06:27 -0000	1.27
  @@ -1,7 +1,6 @@
   ##
   ##  path -- Deal with program paths
   ##  Copyright (c) 1998-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Originally written for Apache
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ -165,5 +164,87 @@
           fi
       done
   done
  +
   shtool_exit 1
  +
  +##
  +##  manual page
  +##
  +
  +=pod
  +
  +=head1 NAME
  +
  +B<shtool path> - B<GNU shtool> command dealing with shell path variables
  +
  +=head1 SYNOPSIS
  +
  +B<shtool path>
  +[B<-s>|B<--suppress>]
  +[B<-r>|B<--reverse>]
  +[B<-d>|B<--dirname>]
  +[B<-b>|B<--basename>]
  +[B<-m>|B<--magic>]
  +[B<-p>|B<--path> I<path>]
  +I<str> [I<str> ...]
  +
  +=head1 DESCRIPTION
  +
  +This command deals with shell C<$PATH> variables. It can find a program
  +through one or more filenames given by one or more I<str> arguments.
  +It prints the absolute filesystem path to the program displayed on
  +C<stdout> plus an exit code of 0 if it was really found.
  +
  +=head1 OPTIONS
  +
  +The following command line options are available.
  +
  +=over 4
  +
  +=item B<-s>, B<--suppress>
  +
  +Supress output. Useful to only test whether a program exists with the
  +help of the return code.
  +
  +=item B<-r>, B<--reverse>
  +
  +Transform a forward path to a subdirectory into a reverse path.
  +
  +=item B<-d>, B<--dirname>
  +
  +Output the directory name of I<str>.
  +
  +=item B<-b>, B<--basename>
  +
  +Output the base name of I<str>.
  +
  +=item B<-m>, B<--magic>
  +
  +Enable advanced magic search for "C<perl>" and "C<cpp>".
  +
  +=item B<-p>, B<--path> I<path>
  +
  +Search in I<path>. Default is to search in $PATH.
  +
  +=back
  +
  +=head1 EXAMPLE
  +
  + #   shell script
  + awk=`shtool path -p "${PATH}:." gawk nawk awk`
  + perl=`shtool path -m perl`
  + cpp=`shtool path -m cpp`
  + revpath=`shtool path -r path/to/subdir`
  +
  +=head1 HISTORY
  +
  +The B<GNU shtool> B<path> command was originally written by Ralf S.
  +Engelschall E<lt>rse@engelschall.comE<gt> in 1998 for B<Apache>. It was
  +later taken over into B<GNU shtool>.
  +
  +=head1 SEE ALSO
  +
  +shtool(1), which(1).
  +
  +=cut
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.platform
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 sh.platform
  --- ossp-pkg/shtool/sh.platform	21 Jan 2004 20:40:51 -0000	1.4
  +++ ossp-pkg/shtool/sh.platform	12 Feb 2004 16:06:27 -0000	1.5
  @@ -1,7 +1,6 @@
   ##
   ##  platform -- Platform Identification Utility
   ##  Copyright (c) 2003-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Originally written for use in OpenPKG
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ -20,7 +19,7 @@
   ##
   
   str_tool="platform"
  -str_usage="[-F|--format FORMAT] [-S|--sep STRING] [-C|--conc STRING] [-L|--lower] [-U|--upper] [-v|--verbose] [-c|--concise] [-n|--no-newline] [-t|--type TYPE] [-V|--version] [-h|--help]"
  +str_usage="[-F|--format <format>] [-S|--sep <string>] [-C|--conc <string>] [-L|--lower] [-U|--upper] [-v|--verbose] [-c|--concise] [-n|--no-newline] [-t|--type <type>] [-V|--version] [-h|--help]"
   arg_spec="0="
   opt_spec="F:S:C:L.U.v.c.n.t:d.V.h."
   opt_alias="F:format,S:sep,C:conc,L:lower,U:upper,v:verbose,c:consise,t:type,n:no-newline,V:version,h:help"
  @@ -571,4 +570,258 @@
   else
       echo "$output"
   fi
  +
  +shtool_exit 0
  +
  +##
  +##  manual page
  +##
  +
  +=pod
  +
  +=head1 NAME
  +
  +B<shtool platform> - B<GNU shtool> Unix platform identification
  +
  +=head1 SYNOPSIS
  +
  +B<shtool platform>
  +[B<-F>|B<--format> I<format>]
  +[B<-S>|B<--sep> I<string>]
  +[B<-C>|B<--conc> I<string>]
  +[B<-L>|B<--lower>]
  +[B<-U>|B<--upper>]
  +[B<-v>|B<--verbose>]
  +[B<-c>|B<--concise>]
  +[B<-n>|B<--newline>]
  +[B<-d>|B<--debug>]
  +[B<-t>|B<--type> I<type>]
  +[B<-n>|B<--newline>]
  +[B<-d>|B<--debug>]
  +
  +=head1 DESCRIPTION
  +
  +B<shtool platform> is a flexible Unix platform identification program.
  +It distinguishes a platform according to its I<hardware architecture>
  +and I<operating system>. For both there is a I<class>, I<product> and
  +I<technology> identification. For each of those six identifications,
  +there is a I<verbose>, I<regular> and I<concise> version.
  +
  +This leads to eighteen (2x3x3) available identification strings for each
  +platform, from which usually 2 are chosen in a particular situation.
  +This is done by assembling the platform identification string using a
  +I<format> string containing one or more identification constructs of the
  +forms "C<%[xx]>" (verbose), "C<%{xx}>" (regular) and "C<%E<lt>xxE<gt>>"
  +(concise).
  +
  +=head1 OPTIONS
  +
  +The following command line options are available.
  +
  +=over 4
  +
  +=item B<-F>, B<--format> I<format>
  +
  +This option controls the output formatting of this program. It is a
  +plain-text string with the "C<%>I<xx>" constructs which expand to the
  +various platform information strings. "C<%{>I<xx>C<}>" is the canonical
  +regular version of the information. "C<%[>I<xx>C<]>" is the verbose
  +version of the information. "C<%E<lt>>I<xx>C<E<gt>>" is the concise
  +version of the information. In total, the following constructs
  +are available for expansion:
  +
  + %[ac]    verbose hardware architecture class
  + %{ac}    regular hardware architecture class
  + %<ac>    concise hardware architecture class
  +
  + %[ap]    verbose hardware architecture product
  + %{ap}    regular hardware architecture product
  + %<ap>    concise hardware architecture product
  +
  + %[at]    verbose hardware architecture technology
  + %{at}    regular hardware architecture technology
  + %<at>    concise hardware architecture technology
  +
  + %[sc]    verbose operating system class
  + %{sc}    regular operating system class
  + %<sc>    concise operating system class
  +
  + %[sp]    verbose operating system product
  + %{sp}    regular operating system product
  + %<sp>    concise operating system product
  +
  + %[st]    verbose operating system technology
  + %{st}    regular operating system technology
  + %<st>    concise operating system technology
  +
  +The default I<format> string is "C<%{sp} (%{ap})>", providing the
  +regular operating system and hardware architecture product information.
  +
  +=item B<-S>, B<--sep> I<string>
  +
  +This option sets the word I<separation> string for the platform
  +information strings. By default it is "C< >" (whitespace). It is
  +especially used for separating the operating system name and
  +the operating system version.
  +
  +=item B<-C>, B<--conc> I<string>
  +
  +This option sets the word I<concatenation> string for the platform
  +information strings. By default it is "C</>". It is especially used to
  +concatenate multiple parts in operating system name and version parts.
  +
  +=item B<-L>, B<--lower>
  +
  +This options enforces conversion of the output to all I<lower> case.
  +
  +=item B<-U>, B<--upper>
  +
  +This options enforces conversion of the output to all I<upper> case.
  +
  +=item B<-v>, B<--verbose>
  +
  +This option enforces verbose versions of all expansion constructs
  +in I<format> string of option B<-F>. It is equal to specifying all
  +expansion constructs as "C<%[>I<xx>C<]>".
  +
  +=item B<-c>, B<--concise>
  +
  +This option enforces concise versions of all expansion constructs
  +in I<format> string of option B<-F>. It is equal to specifying all
  +expansion constructs as "C<%E<lt>>I<xx>C<E<gt>>".
  +
  +=item B<-n>, B<--no-newline>
  +
  +This option omits the usual trailing newline character in the output.
  +
  +=item B<-t>, B<--type> I<type>
  +
  +This option is a meta option which internally sets options B<-F>, B<-S>,
  +B<-C>, B<-L>, B<-U>, B<-v> or B<-c> according to I<TYPE>. It can be used
  +to easily specify various commonly known outputs. The following I<TYPE>s
  +are available:
  +
  +=over 4
  +
  +=item B<binary>
  +
  +Binary Package Id (OpenPKG RPM).
  +This is equal to "C<-F '%<ap>-%<sp>' -L -S '' -C '+'>"
  +and results in outputs like "C<ix86-freebsd4.9>" and "C<ix86-debian3.0>".
  +
  +=item B<build>
  +
  +Build-Time Checking (OpenPKG RPM).
  +This is equal to "C<-F '%<at>-%<st>' -L -S '' -C '+'>"
  +and results in outputs like "C<i686-freebsd4.9>" and "C<i586-linux2.4>".
  +
  +=item B<gnu>
  +
  +GNU F<config.guess> Style Id.
  +This is similar to B<build> and is equal to "C<-F '"%<at>-unknown-%<st>' -L -S '' -C '+'>"
  +and results in outputs like "C<i686-unknown-freebsd4.9>" and "C<i586-unknown-linux2.4>".
  +
  +=item B<web>
  +
  +HTTP Server Header Id.
  +This is equal to "C<-F '"%<sp>-%<ac>' -S '/' -C '+'>"
  +and results in outputs like "C<FreeBSD/4.9-iX86>" and "C<Debian/3.0-iX86>".
  +
  +=item B<summary>
  +
  +Human Readable Verbose Summary Information. This is equal to "C<-F
  +'Class: %[sc] (%[ac])\nProduct: %[sp] (%[ap])\nTechnology: %[st]
  +(%[at])' -S ' ' -C '/'>" and results in outputs like:
  +
  + Class:      4.4BSD (iX86)
  + Product:    FreeBSD 4.9-RC (iX86)
  + Technology: FreeBSD 4.9-RC (i686)
  +
  +and
  +
  + Class:      LSB (iX86)
  + Product:    Debian GNU/Linux 3.0 (iX86)
  + Technology: GNU/Linux 2.2/2.4 (i686)
  +
  +=item B<all-in-one>
  +
  +All-In-One Full-Table Information. This just outputs really
  +all 2x2x3 identification strings as a table.
  +
  +=back
  +
  +=item B<-d>, B<--debug>
  +
  +This option enables some internal debugging messages.
  +
  +=item B<-V>, B<--version>
  +
  +This option outputs the version information of B<shtool platform> only.
  +
  +=item B<-h>, B<--help>
  +
  +This option outputs the usage information of B<shtool platform> only.
  +
  +=back
  +
  +=head1 EXAMPLE
  +
  +The following real-life use cases are known:
  +
  +=over 4
  +
  +=item B<OpenPKG> build-time decisions
  +
  + $ platform -c -L -S "" -C "+" -F "%at-%st"
  + $ platform -c -L -S "" -C "+" -F "%ac-%sc"
  +
  +=item B<OpenPKG> binary RPM packages
  +
  + $ platform -c -L -S "" -C "+" -F "%ap-%sp"
  +
  +=item F<README> files
  +
  + $ platform -v -F "%sp (%ap)"
  + $ platform -v -F "%sc (%ac)"
  +
  +=item Debugging
  +
  + $ platform --type=all-in-one
  +
  +=back
  +
  +=head1 SUPPORT
  +
  +B<shtool platform> currently knows the following particular Unix platforms
  +in detail: FreeBSD, NetBSD, OpenBSD, Linux, Sun Solaris, SCO UnixWare,
  +QNX Neutrino, SGI IRIX, HP HP-UX, HP Tru64, IBM AIX and Apple MacOS X
  +Darwin.
  +
  +All other Unix platforms are recognized through generic uname(1)
  +information and so usually can be identified sufficiently, although the
  +identification might be not as precise as possible.
  +
  +=head1 HISTORY
  +
  +B<shtool platform> was implemented in September 2003 by I<Ralf S.
  +Engelschall> for use in the B<OSSP> and B<OpenPKG> projects. It was
  +prompted by the need in B<OpenPKG> to have both product (for RPM
  +filenames) and technology (for build-time decisions) identifiers for the
  +Unix platforms, OpenPKG packages are maintained for. It was inspired by
  +the B<GNU> F<config.guess> and the old B<GNU shtool> F<guessos> command.
  +
  +The major difference to B<GNU> F<config.guess> is that B<shtool platform>
  +does not use a I<vendor> identification (cannot be determined most of
  +the time and is not used at all in all projects I've ever seen) and
  +is a lot more flexible (class, product and technology identifications
  +combined with verbose, regular and concise outputs). The drawback of
  +B<shtool platform> is that it (still) knows less particular platforms,
  +although the generic platform identification is sufficient enough most
  +of the time.
  +
  +=head1 SEE ALSO
  +
  +uname(3), GNU F<config.guess>.
  +
  +=cut
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.prop
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 sh.prop
  --- ossp-pkg/shtool/sh.prop	1 Jan 2004 16:54:20 -0000	1.17
  +++ ossp-pkg/shtool/sh.prop	12 Feb 2004 16:06:27 -0000	1.18
  @@ -1,7 +1,6 @@
   ##
   ##  prop -- Display progress with a running propeller
   ##  Copyright (c) 1998-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Originally written for mod_ssl
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ -64,4 +63,60 @@
           }
       ' "prefix=$opt_p"
   fi
  +
  +shtool_exit 0
  +
  +##
  +##  manual page
  +##
  +
  +=pod
  +
  +=head1 NAME
  +
  +B<shtool prop> - B<GNU shtool> propeller processing indication
  +
  +=head1 SYNOPSIS
  +
  +B<shtool prop>
  +[B<-p>|B<--prefix> I<str>]
  +
  +=head1 DESCRIPTION
  +
  +This command displays a processing indication though a running
  +propeller. It is intended to be run at the end of a pipe ("C<|>")
  +sequence where on C<stdin> logging/processing informations found. For
  +every line on C<stdin> the propeller advances one step clock-wise.
  +
  +=head1 OPTIONS
  +
  +The following command line options are available.
  +
  +=over 4
  +
  +=item B<-p>, B<--prefix> I<str>
  +
  +Set a particular prefix I<str> which is displayed in front of the
  +propeller. The default is no prefix string.
  +
  +=back
  +
  +=head1 EXAMPLE
  +
  + #   shell script
  + configure 2>&1 |\
  +     tee logfile |\
  +     shtool prop -p "Configuring sources"
  +
  +=head1 HISTORY
  +
  +The B<GNU shtool> B<prop> command was originally written by Ralf S.
  +Engelschall E<lt>rse@engelschall.comE<gt> in 1998 for B<mod_ssl>. It was
  +later taken over into B<GNU shtool>.
  +
  +=head1 SEE ALSO
  +
  +shtool(1).
  +
  +=cut
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.rotate
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 sh.rotate
  --- ossp-pkg/shtool/sh.rotate	1 Jan 2004 16:54:20 -0000	1.9
  +++ ossp-pkg/shtool/sh.rotate	12 Feb 2004 16:06:27 -0000	1.10
  @@ -1,7 +1,6 @@
   ##
   ##  rotate -- Logfile rotation
   ##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Originally written for use in OpenPKG
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ -20,7 +19,7 @@
   ##
   
   str_tool="rotate"
  -str_usage="[-v|--verbose] [-t|--trace] [-f|--force] [-n|--num-files <count>] [-s|--size <size>] [-c|--copy] [-r|--remove] [-a|--archive-dir <dir>] [-z|--compress [<tool>:]<level>] [-b|--background] [-d|--delay] [-p|--pad <len>] [-o|--owner <owner>] [-g|--group <group>] [-m|--mode <mode>] [-M|--migrate <cmd>] [-P|--prolog <cmd>] [-E|--epilog <cmd>] <file> [...]"
  +str_usage="[-v|--verbose] [-t|--trace] [-f|--force] [-n|--num-files <count>] [-s|--size <size>] [-c|--copy] [-r|--remove] [-a|--archive-dir <dir>] [-z|--compress [<tool>:]<level>] [-b|--background] [-d|--delay] [-p|--pad <len>] [-m|--mode <mode>] [-o|--owner <owner>] [-g|--group <group>] [-M|--migrate <cmd>] [-P|--prolog <cmd>] [-E|--epilog <cmd>] <file> [...]"
   arg_spec="1+"
   opt_spec="v.t.f.n:s:c.r.a:z:b.d.p:o:g:m:M:P:E:"
   opt_alias="v:verbose,t:trace,f:force,n:num-files,s:size,c:copy,r:remove,a:archive-dir,z:compress,b:background,d:delay,p:pad,o:owner,g:group,m:mode,M:migrate,P:prolog,E:epilog"
  @@ -399,4 +398,193 @@
           [ $? -ne 0 ] && shtool_exit $?
       fi
   done
  +
  +shtool_exit 0
  +
  +##
  +##  manual page
  +##
  +
  +=pod
  +
  +=head1 NAME
  +
  +B<shtool rotate> - B<GNU shtool> log file rotation
  +
  +=head1 SYNOPSIS
  +
  +B<shtool rotate>
  +[B<-v>|B<--verbose>]
  +[B<-t>|B<--trace>]
  +[B<-f>|B<--force>]
  +[B<-n>|B<--num-files> I<count>]
  +[B<-s>|B<--size> I<size>]
  +[B<-c>|B<--copy>]
  +[B<-r>|B<--remove>]
  +[B<-a>|B<--archive-dir> I<dir>]
  +[B<-z>|B<--compress> [I<tool>:]I<level>]
  +[B<-b>|B<--background>]
  +[B<-d>|B<--delay>]
  +[B<-p>|B<--pad> I<len>]
  +[B<-m>|B<--mode> I<mode>]
  +[B<-o>|B<--owner> I<owner>]
  +[B<-g>|B<--group> I<group>]
  +[B<-M>|B<--migrate> I<cmd>]
  +[B<-P>|B<--prolog> I<cmd>]
  +[B<-E>|B<--epilog> I<cmd>]
  +I<file> [I<file> ...]
  +
  +=head1 DESCRIPTION
  +
  +This command rotates a logfile I<file> by subsequently creating up to
  +I<count> (optionally compressed) archive files of it. Archive files are
  +named "I<file>.I<number>[I<compress-suffix]>" where I<number> is the
  +version number, 0 being the newest and "I<count>-1" the oldest.
  +
  +A rotation step consists of the following steps
  +
  +1. remove last archive file
  +2. shift archive file numbers
  +3. create archive file 0 from I<file>
  +4. truncate/recreate I<file>
  +
  +=head1 OPTIONS
  +
  +The following command line options are available.
  +
  +=over 4
  +
  +=item B<-v>, B<--verbose>
  +
  +Display some processing information.
  +
  +=item B<-t>, B<--trace>
  +
  +Enable the output of the essential shell commands which are executed.
  +
  +=item B<-f>, B<--force>
  +
  +Force silent creation of archive directory if it does not exists. Also
  +skip missing intermediate logfiles in the rotation step. Default is to
  +exit with error in both cases. FIXME
  +
  +=item B<-n>, B<--num-files> I<count>
  +
  +Create I<count> archive files. Default is 10.
  +
  +=item B<-s>, B<--size> I<size>
  +
  +Only rotate if logfile exceeds I<size>. The argument I<size> can be
  +specified also with the trailing units C<K> (kilo), C<M> (mega) or C<G>
  +(giga). The "prolog" and "epilog" are only executed if rotation actually
  +takes place.
  +
  +=item B<-c>, B<--copy>
  +
  +Copy I<file> to archive then truncate original. The default is to move
  +I<file> to archive.
  +
  +Unless an application reopens its logfile it will continue to write
  +to the same file. In the default move case the application will write
  +to the archive which it had previously opened as I<file>. In the copy
  +case the application will write to the original I<file>. The drawback
  +of the copy approach is that logfile entries are lost when they are
  +written to I<file> between the execution of the copy and the truncation
  +operation. The drawback of the move approach is that the application
  +needs to detect the move or must be triggered to reopen its log (i.e.
  +through epilog).
  +
  +=item B<-r>, B<--remove>
  +
  +Removes I<file> after rotation instead of providing a new empty file.
  +
  +=item B<-a>, B<--archive-dir> I<dir>
  +
  +Specify the archive directory. Default is to create archives in the same
  +directory as I<file> is located.
  +
  +=item B<-z>, B<--compress> [I<tool>:]I<level>
  +
  +Enables compression of archive files with compression level I<level> By
  +default, the tools bzip2(1), gzip(1) and compress(1) are searched for in
  +C<$PATH>, but one also can override this by prefixing the compression
  +level with one of the three particular tool names.
  +
  +=item B<-b>, B<--background>
  +
  +Enable background compression.
  +
  +=item B<-d>, B<--delay>
  +
  +Delays the compression of archive file number 0. This is useful if
  +``B<-c>'' is not used, because an application might continue to write to
  +archive file 0 through an already open file handle.
  +
  +=item B<-p>, B<--pad> I<len>
  +
  +Enables padding with leading zeros in the I<number> part of the filename
  +"I<file>.I<number>I<compress-suffix>". The default padding I<len> is 1.
  +This is interesting if more than 10 archive files are used, because it
  +leads to still sorted directory listings.
  +
  +=item B<-m>, B<--mode> I<mode>
  +
  +The file mode applied to the created files, see chmod(1). Setting mode to
  +C<-> skips this step and leaves the operating system default which is
  +usually based on umask(1). Some file modes require superuser privileges
  +to be set. Default is 0755.
  +
  +=item B<-o>, B<--owner> I<owner>
  +
  +The file owner name or id applied to the created files, see chown(1). This
  +option requires superuser privileges to execute. Default is to skip this
  +step and leave the operating system default which is usually based on
  +the executing uid or the parent setuid directory.
  +
  +=item B<-g>, B<--group> I<group>
  +
  +The file group name or id applied to the created files, see chgrp(1). This
  +option requires superuser privileges to execute to the fullest extend,
  +otherwise the choice of I<group> is limited on most operating systems.
  +Default is to skip this step and leave the operating system default
  +which is usually based on the executing gid or the parent setgid
  +directory.
  +
  +=item B<-M>, B<--migrate> I<cmd>
  +
  +Execute a "migration" command just before the archive file number
  +I<count>-1 is removed from the filesystem. The specified I<cmd> receives
  +the archive filename as command line argument.
  +
  +=item B<-P>, B<--prolog> I<cmd>
  +
  +Execute a "prolog" command before the rotation step. Useful in
  +conjunction with B<-s>.
  +
  +=item B<-E>, B<--epilog> I<cmd>
  +
  +Execute a "epilog" command after the rotation step. Useful in
  +conjunction with B<-s>.
  +
  +=back
  +
  +=head1 EXAMPLE
  +
  + #   shell script
  + shtool rotate -n10 -s1M -zbzip2:9 -d -r /var/log/ap.access.log
  + shtool rotate -n5 -s128K -zbzip2:9 -d -r /var/log/ap.error.log
  + apachectl graceful
  +
  +=head1 HISTORY
  +
  +The B<GNU shtool> B<rotate> command was originally written by Ralf S.
  +Engelschall E<lt>rse@engelschall.comE<gt> in 2001 for B<GNU shtool>.
  +Its development was prompted by the need to have a flexible
  +logfile rotation facility in the B<OpenPKG> project.
  +
  +=head1 SEE ALSO
  +
  +shtool(1), BSD newsyslog(8).
  +
  +=cut
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.scpp
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 sh.scpp
  --- ossp-pkg/shtool/sh.scpp	1 Jan 2004 16:54:20 -0000	1.25
  +++ ossp-pkg/shtool/sh.scpp	12 Feb 2004 16:06:27 -0000	1.26
  @@ -1,7 +1,6 @@
   ##
   ##  scpp -- Sharing C Pre-Processor
   ##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Originally written for GNU Pth
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ -246,4 +245,158 @@
   fi
   rm -f $output
   rm -f $tmpfile $tmpfile.* >/dev/null 2>&1
  +
  +shtool_exit 0
  +
  +##
  +##  manual page
  +##
  +
  +=pod
  +
  +=head1 NAME
  +
  +B<shtool scpp> - B<GNU shtool> C source file pre-processor
  +
  +=head1 SYNOPSIS
  +
  +B<shtool scpp>
  +[B<-v>|B<--verbose>]
  +[B<-p>|B<--preserve>]
  +[B<-f>|B<--filter> I<filter>]
  +[B<-o>|B<--output> I<ofile>]
  +[B<-t>|B<--template> I<tfile>]
  +[B<-M>|B<--mark> I<mark>]
  +[B<-D>|B<--define> I<dname>]
  +[B<-C>|B<--class> I<cname>]
  +I<file> [I<file> ...]
  +
  +=head1 DESCRIPTION
  +
  +This command is an additional ANSI C source file pre-processor for sharing
  +cpp(1) code segments, internal variables and internal functions. The intention
  +for this comes from writing libraries in ANSI C. Here a common shared internal
  +header file is usually used for sharing information between the library
  +source files.
  +
  +The operation is to parse special constructs in I<file>s, generate a few
  +things out of these constructs and insert them at position I<mark> in I<tfile>
  +by writing the output to I<ofile>. Additionally the I<file>s are never touched
  +or modified. Instead the constructs are removed later by the cpp(1) phase of
  +the build process. The only prerequisite is that every I<file> has a
  +``C<#include ">I<ofile>C<">'' at the top.
  +
  +This command provides the following features: First it avoids namespace
  +pollution and reduces prototyping efforts for internal symbols by recognizing
  +functions and variables which are defined with the storage class identifier
  +``I<cname>''.  For instance if I<cname> is ``intern'', a function ``C<intern
  +void *foobar(int quux)>'' in one of the I<file>s is translated into both a
  +``C<#define foobar __foobar>'' and a ``C<extern void *foobar(int quux);>'' in
  +I<ofile>. Additionally a global ``C<#define> I<cname> C</**/>'' is also
  +created in I<ofile> to let the compiler silently ignore this additional
  +storage class identifier.
  +
  +Second, the library source files usually want to share C<typedef>s,
  +C<#define>s, etc.  over the source file boundaries. To achieve this one can
  +either place this stuff manually into I<tfile> or use the second feature of
  +B<scpp>: All code in I<file>s encapsulated with ``C<#if >I<dname> ...
  +C<#endif>'' is automatically copied to I<ofile>. Additionally a global
  +``C<#define> I<dname> C<0>'' is also created in I<ofile> to let the compiler
  +silently skip this parts (because it was already found in the header).
  +
  +=head1 OPTIONS
  +
  +The following command line options are available.
  +
  +=over 4
  +
  +=item B<-v>, B<--verbose>
  +
  +Display some processing information.
  +
  +=item B<-p>, B<--preserve>
  +
  +Preserves I<ofile> independent of the generated ``#line'' lines. This is
  +useful for Makefiles if the real contents of I<ofile> will not change,
  +just line numbers. Default is to overwrite.
  +
  +=item B<-f>, B<--filter> I<filter>
  +
  +Apply one or more pre-processing sed(1) I<filter> commands (usually of
  +type ``C<s/.../.../>'') to each input file before their input is parsed.
  +This option can occur multiple times.
  +
  +=item B<-o>, B<--output> I<ofile>
  +
  +Output file name. Default is C<lib.h>.
  +
  +=item B<-t>, B<--template> I<tfile>
  +
  +Template file name. Default is C<lib.h.in>.
  +
  +=item B<-M>, B<--mark> I<mark>
  +
  +Mark to be replaced by generated constructs. Default is C<%%MARK%%>.
  +
  +=item B<-D>, B<--define> I<dname>
  +
  +FIXME. Default is C<cpp>.
  +
  +=item B<-C>, B<--class> I<cname>
  +
  +FIXME. Default is C<intern>.
  +
  +=back
  +
  +=head1 EXAMPLE
  +
  + #   Makefile
  + SRCS=foo_bar.c foo_quux.c
  + foo_p.h: foo_p.h.in
  +      shtool scpp -o foo_p.h -t foo_p.h.in \
  +                  -M %%MARK%% -D cpp -C intern $(SRCS)
  +
  + /* foo_p.h.in */
  + #ifndef FOO_P_H
  + #define FOO_P_H
  + %%MARK%%
  + #endif /* FOO_P_H */
  +
  + /* foo_bar.c */
  + #include "foo_p.h"
  + #if cpp
  + #define OURS_INIT 4711
  + #endif
  + intern int ours;
  + static int myone = 0815;
  + intern int bar(void)
  + {
  +     ours += myone;
  + }
  +
  + /* foo_quux.c */
  + #include "foo_p.h"
  + int main(int argc, char *argv[])
  + {
  +     int i;
  +     ours = OURS_INIT
  +     for (i = 0; i < 10; i++) {
  +         bar();
  +         printf("ours now %d\n", ours);
  +     }
  +     return 0;
  + }
  +
  +=head1 HISTORY
  +
  +The B<GNU shtool> B<scpp> command was originally written by Ralf S.
  +Engelschall E<lt>rse@engelschall.comE<gt> in 1999 for B<GNU shtool>.
  +Its was prompted by the need to have a pre-processing facility
  +in the B<GNU pth> project.
  +
  +=head1 SEE ALSO
  +
  +shtool(1), cpp(1).
  +
  +=cut
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.slo
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 sh.slo
  --- ossp-pkg/shtool/sh.slo	1 Jan 2004 16:54:20 -0000	1.23
  +++ ossp-pkg/shtool/sh.slo	12 Feb 2004 16:06:27 -0000	1.24
  @@ -1,7 +1,6 @@
   ##
   ##  slo -- Separate linker options by library class
   ##  Copyright (c) 1998-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Originally written for Apache
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ -177,4 +176,89 @@
       val="`echo $val | sed -e 's/^ *//'`"
       echo "${opt_p}${var}=\"${val}\""
   done
  +
  +shtool_exit 0
  +
  +##
  +##  manual page
  +##
  +
  +=pod
  +
  +=head1 NAME
  +
  +B<shtool slo> - B<GNU shtool> separate linker options by library class
  +
  +=head1 SYNOPSIS
  +
  +B<shtool slo>
  +[B<-p>|B<--prefix> I<str>]
  +--
  +B<-L>I<dir>
  +B<-l>I<lib>
  +[B<-L>I<dir> B<-l>I<lib> ...]
  +
  +=head1 DESCRIPTION
  +
  +This command separates the linker options ``B<-L>'' and ``B<-l>'' by library
  +class. It's argument line can actually be an arbitrary command line where those
  +options are contained. B<slo> parses these two options only and ignores the
  +remaining contents. The result is a trivial shell script on C<stdout> which
  +defines six variables containing the ``B<-L>'' and ``B<-l>'' options sorted by
  +class:
  +
  +``C<SLO_DIRS_OBJ>'' and ``C<SLO_LIBS_OBJ>'' contains the ``B<-L>'' and
  +``B<-l>'' options of static libraries,  ``C<SLO_DIRS_PIC>'' and
  +``C<SLO_LIBS_PIC>'' contains the ``B<-L>'' and ``B<-l>'' options of static
  +libraries containing PIC ("Position Independent Code") and
  +``C<SLO_DIRS_DSO>'' and ``C<SLO_LIBS_DSO>'' contains the ``B<-L>'' and
  +``B<-l>'' options of shared libraries. The B<-p> option can be used to
  +change the default variable prefix from "C<SLO_>" to I<str>.
  +
  +The intent of this separation is to provide a way between static and shared
  +libraries which is important if one wants to link custom DSOs against
  +libraries, because not all platforms all one to link these DSOs against shared
  +libraries. So one first has to separate out the shared libraries and link the
  +DSO only against the static libraries.  One can use this command also to just
  +sort the options.
  +
  +=head1 OPTIONS
  +
  +The following command line options are available.
  +
  +=over 4
  +
  +=item B<-p>, B<--prefix> I<str>
  +
  +    FIXME
  +
  +=item B<-L>I<dir>
  +
  +Directory where libraries are searched in.
  +
  +=item B<-l>I<lib>
  +
  +Library to search for.
  +
  +=back
  +
  +=head1 EXAMPLE
  +
  + #   configure.in
  + LINK_STD="$LDFLAGS $LIBS"
  + eval `shtool slo $LINK_STD`
  + LINK_DSO="$SLO_DIRS_OBJ $SLO_LIBS_OBJ $SLO_DIRS_PIC $SLO_LIBS_PIC"
  +   :
  +
  +=head1 HISTORY
  +
  +The B<GNU shtool> B<slo> command was originally written by Ralf S.
  +Engelschall E<lt>rse@engelschall.comE<gt> in 1998 for B<Apache>.
  +It was later taken over into B<GNU shtool>.
  +
  +=head1 SEE ALSO
  +
  +shtool(1), ld(1).
  +
  +=cut
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.subst
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 sh.subst
  --- ossp-pkg/shtool/sh.subst	1 Jan 2004 16:54:20 -0000	1.10
  +++ ossp-pkg/shtool/sh.subst	12 Feb 2004 16:06:27 -0000	1.11
  @@ -1,7 +1,6 @@
   ##
   ##  subst -- Apply sed(1) substitution operations
   ##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Originally written for OpenPKG's rpmtool
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ -55,7 +54,7 @@
       OIFS="$IFS"; IFS="$ASC_NL"; set -- $opt_e; IFS="$OIFS"
       for e
       do
  -        sedcmd="$sedcmd -e '$e'" 
  +        sedcmd="$sedcmd -e '$e'"
       done
   elif [ ".$opt_f" != . ]; then
       if [ ! -f $opt_f ]; then
  @@ -165,4 +164,102 @@
           eval "$sedcmd"
       fi
   fi
  +
  +shtool_exit 0
  +
  +##
  +##  manual page
  +##
  +
  +=pod
  +
  +=head1 NAME
  +
  +B<shtool subst> - B<GNU shtool> sed(1) substitution operations
  +
  +=head1 SYNOPSIS
  +
  +B<shtool subst>
  +[B<-v>|B<--verbose>]
  +[B<-t>|B<--trace>]
  +[B<-n>|B<--nop>]
  +[B<-s>|B<--stealth>]
  +[B<-i>|B<--interactive>]
  +[B<-b>|B<--backup> I<ext>]
  +[B<-e>|B<--exec> I<cmd>]
  +[B<-f>|B<--file> I<cmd-file>]
  +[I<file>] [I<file> ...]
  +
  +=head1 DESCRIPTION
  +
  +This command applies one or more sed(1) substitution operations to
  +F<stdin> or any number of files.
  +
  +=head1 OPTIONS
  +
  +The following command line options are available.
  +
  +=over 4
  +
  +=item B<-v>, B<--verbose>
  +
  +Display some processing information.
  +
  +=item B<-t>, B<--trace>
  +
  +Enable the output of the essential shell commands which are executed.
  +
  +=item B<-n>, B<--nop>
  +
  +No operation mode. Actual execution of the essential shell commands
  +which would be executed is suppressed.
  +
  +=item B<-s>, B<--stealth>
  +
  +Stealth operation. Preserve timestamp on I<file>.
  +
  +=item B<-i>, B<--interactive>
  +
  +Enter interactive mode where the user has to approve each operation.
  +
  +=item B<-b>, B<--backup> I<ext>
  +
  +Preserve backup of original file using file name extension I<ext>      .
  +Default is to overwrite the original file                              .
  +
  +=item B<-e>, B<--exec> I<cmd>
  +
  +Specify sed(1) command directly.
  +
  +=item B<-f>, B<--file> I<cmd-file>
  +
  +Read sed(1) command from I<file>.
  +
  +=back
  +
  +=head1 EXAMPLE
  +
  + #   shell script
  + shtool subst -i -e 's;(c) \([0-9]*\)-2000;(c) \1-2001;' *.[ch]
  +
  + #    RPM spec-file
  + %install
  +     shtool subst -v -n \
  +         -e 's;^\(prefix=\).*;\1 $RPM_BUILD_ROOT%{_prefix};g' \
  +         -e 's;^\(sysconfdir=\).*;\1 $RPM_BUILD_ROOT%{_prefix}/etc;g' \
  +         `find . -name Makefile -print`
  +     make install
  +
  +=head1 HISTORY
  +
  +The B<GNU shtool> B<subst> command was originally written by Ralf S.
  +Engelschall E<lt>rse@engelschall.comE<gt> in 2001 for B<GNU shtool>.
  +It was prompted by the need to have a uniform and convinient patching
  +frontend to sed(1) operations in the B<OpenPKG> package specifications.
  +
  +=head1 SEE ALSO
  +
  +shtool(1), sed(1).
  +
  +=cut
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.table
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 sh.table
  --- ossp-pkg/shtool/sh.table	1 Jan 2004 16:54:20 -0000	1.19
  +++ ossp-pkg/shtool/sh.table	12 Feb 2004 16:06:27 -0000	1.20
  @@ -1,7 +1,6 @@
   ##
   ##  table -- Pretty-print a field-separated list as a table
   ##  Copyright (c) 1998-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Originally written for Apache
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ -86,4 +85,69 @@
       }
   }"
   IFS="$OIFS"
  +
  +shtool_exit 0
  +
  +##
  +##  manual page
  +##
  +
  +=pod
  +
  +=head1 NAME
  +
  +B<shtool table> - B<GNU shtool> pretty-print a field-separated list
  +
  +=head1 SYNOPSIS
  +
  +B<shtool table>
  +[B<-F>|B<--field-sep> I<sep>]
  +[B<-w>|B<--width> I<width>]
  +[B<-c>|B<--columns> I<cols>]
  +[B<-s>|B<--strip> I<strip>]
  +I<str>B<sep>I<str>...
  +
  +=head1 DESCRIPTION
  +
  +This pretty-prints a list of strings as a table.
  +
  +=head1 OPTIONS
  +
  +The following command line options are available.
  +
  +=over 4
  +
  +=item B<-F>, B<--field-sep> I<sep>
  +
  +Separate columns using I<sep>. Default is C<:>.
  +
  +=item B<-w>, B<--width> I<width>
  +
  +Width of each column. Default is 15 characters.
  +
  +=item B<-c>, B<--columns> I<cols>
  +
  +Number of columns. Default is C<3>.
  +
  +=item B<-s>, B<--strip> I<strip>
  +
  +Strip off any characters past I<strip>. Default is C<79>.
  +
  +=back
  +
  +=head1 EXAMPLE
  +
  + #   shell script
  + shtool table -F , -w 5 -c 4 "1,2,3,4,5,6,7,8,9,10,11,12"
  +
  +=head1 HISTORY
  +
  +The B<GNU shtool> B<table> command was originally written by Ralf S.
  +Engelschall E<lt>rse@engelschall.comE<gt> in 1999 for B<GNU shtool>.
  +
  +=head1 SEE ALSO
  +
  +shtool(1), tr(1), fmt(1), sh(1), awk(1), sed(1).
  +
  +=cut
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.tarball
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 sh.tarball
  --- ossp-pkg/shtool/sh.tarball	1 Jan 2004 16:54:20 -0000	1.20
  +++ ossp-pkg/shtool/sh.tarball	12 Feb 2004 16:06:27 -0000	1.21
  @@ -1,7 +1,6 @@
   ##
   ##  tarball -- Roll distribution tarballs
   ##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Originally written for shtool
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ -190,4 +189,97 @@
       echo "rm -f $tmpfile.lst $tmpfile.out" 1>&2
   fi
   rm -f $tmpfile.lst $tmpfile.out
  +
  +shtool_exit 0
  +
  +##
  +##  manual page
  +##
  +
  +=pod
  +
  +=head1 NAME
  +
  +B<shtool tarball> - B<GNU shtool> command for rolling standardized tarballs
  +
  +=head1 SYNOPSIS
  +
  +B<shtool tarball>
  +[B<-t>|B<--trace>]
  +[B<-v>|B<--verbose>]
  +[B<-o>|B<--output> I<tarball>]
  +[B<-c>|B<--compress> I<prog>]
  +[B<-u>|B<--user> I<user>]
  +[B<-g>|B<--group> I<group>]
  +[B<-e>|B<--exclude> I<pattern>]
  +I<path> [I<path> ...]
  +
  +=head1 DESCRIPTION
  +
  +This command is for rolling input files under I<path> into a
  +distribution tarballs which can be extracted by tar(1).
  +
  +The four important aspects of good open source software tarballs are:
  +(1) unpack into a single top-level directory, (2) top-level directory
  +corresponds to the tarball filename, (3) tarball should be sorted and
  +(4) arbitrary names for file owner and group.
  +
  +=head1 OPTIONS
  +
  +The following command line options are available.
  +
  +=over 4
  +
  +=item B<-v>, B<--verbose>
  +
  +Display some processing information.
  +
  +=item B<-t>, B<--trace>
  +
  +Enable the output of the essential shell commands which are executed.
  +
  +=item B<-o>, B<--output> I<tarball>
  +
  +Output tarball to file I<tarball>.
  +
  +=item B<-c>, B<--compress> I<prog>
  +
  +Pipe resulting tarball through compression program I<prog>.
  +
  +=item B<-u>, B<--user> I<user>
  +
  +The user (owner) of files and directories in the tarball to I<user>.
  +
  +=item B<-g>, B<--group> I<group>
  +
  +The group of files and directories in the tarball to I<group>.
  +
  +=item B<-e>, B<--exclude> I<pattern>
  +
  +Exclude files and directories matching comma-separated list of
  +regex I<pattern> from the tarball. Directories are expanded
  +before the filtering takes place. The default filter pattern is
  +"C<CVS,\\.cvsignore,\\.[oa]\$>".
  +
  +=back
  +
  +=head1 EXAMPLE
  +
  + #   Makefile.in
  + dist:
  +     ...
  +     V=`shtool version -d short ...`; \
  +     shtool tarball -o foobar-$$V.tar.gz -c 'gzip -9' \
  +                    -u bar -g gnu -e 'CVS,\.cvsignore' .
  +
  +=head1 HISTORY
  +
  +The B<GNU shtool> B<tarball> command was originally written by Ralf S.
  +Engelschall E<lt>rse@engelschall.comE<gt> in 1999 for B<GNU shtool>.
  +
  +=head1 SEE ALSO
  +
  +shtool(1), tar(1), compress(1).
  +
  +=cut
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.version
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 sh.version
  --- ossp-pkg/shtool/sh.version	1 Jan 2004 16:54:20 -0000	1.35
  +++ ossp-pkg/shtool/sh.version	12 Feb 2004 16:06:27 -0000	1.36
  @@ -1,7 +1,6 @@
   ##
   ##  version -- Maintain a version information file
   ##  Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Originally written for ePerl, rewritten from scratch for shtool
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ -303,4 +302,110 @@
               ;;
       esac
   fi
  +
  +shtool_exit 0
  +
  +##
  +##  manual page
  +##
  +
  +=pod
  +
  +=head1 NAME
  +
  +B<shtool version> - B<GNU shtool> maintain version information file
  +
  +=head1 SYNOPSIS
  +
  +B<shtool version>
  +[B<-l>|B<--language> I<lang>]
  +[B<-n>|B<--name> I<name>]
  +[B<-p>|B<--prefix> I<prefix>]
  +[B<-s>|B<--set> I<version>]
  +[B<-e>|B<--edit>]
  +[B<-i>|B<--increase> I<knob>]
  +[B<-d>|B<--display> I<type>]
  +I<file>
  +
  +=head1 DESCRIPTION
  +
  +This command displays and maintains version information in I<file>.
  +
  +The version is always described with a triple
  +E<lt>I<version>,I<revision>,I<level>E<gt> and is represented
  +by a string which always matches the regular expression
  +"C<[0-9]+\.[0-9]+[sabp.][0-9]+>".
  +
  +The hexadecimal format for a version C<v.rtl> is C<VVRRTLL> where C<VV>
  +and C<RR> directly correspond to C<v> and C<r>, C<T> encodes the level
  +type as C<9>, C<2>, C<1>, C<0> (representing C<s>, C<p>/C<.>, C<b>, C<a>
  +in this order) and C<LL> is either directly corresponding to C<l> or set
  +to C<99> if level type is C<s>.
  +
  +=head1 OPTIONS
  +
  +The following command line options are available.
  +
  +=over 4
  +
  +=item B<-v>, B<--verbose>
  +
  +Print verbose information during processing.
  +
  +=item B<-l>, B<--language> I<lang>
  +
  +Choose format of version file I<file>. I<lang>="C<txt>", ANSI C
  +(I<lang>="c"), Perl (I<lang>="perl") or Python (I<lang>="python").
  +Default is C<txt>.
  +
  +=item B<-n>, B<--name> I<name>
  +
  +Name the program the version is maintained for. Default is C<unknown>.
  +
  +=item B<-p>, B<--prefix> I<prefix>
  +=item B<-s>, B<--set> I<version>
  +
  +Set the version to I<version>.
  +
  +=item B<-e>, B<--edit>
  +
  +Interactively enter a new version.
  +
  +=item B<-i>, B<--increase> I<knob>
  +
  +When option ``B<-i>'' is used, the current version in I<file> is updated
  +by increasing one element of the version where I<knob> can be one of
  +the following: ``C<v>'' for increasing the version by 1 (and resetting
  +revision and level to 0), ``C<r>'' for increasing the revision by 1 (and
  +resetting level to 0) or ``C<l>'' for increasing the level by 1.
  +
  +=item B<-d>, B<--display> I<type>
  +
  +Control the display type: "C<short>" for a short version display,
  +"C<long>" for a longer version display, "C<hex>" for a hexadecimal
  +display of the version and "C<libtool>" for a format suitable for use
  +with GNU libtool.
  +
  +=back
  +
  +=head1 EXAMPLE
  +
  + #   shell script
  + shtool version -l c -n FooBar -p foobar -s 1.2b3 version.c
  +
  + #   configure.in
  + V=`shtool version -l c -d long version.c`
  + echo "Configuring FooBar, Version $V"
  +
  +=head1 HISTORY
  +
  +The B<GNU shtool> B<version> command was originally written by Ralf S.
  +Engelschall E<lt>rse@engelschall.comE<gt> in 1994 for B<OSSP eperl>. It
  +was later rewritten from scratch for inclusion into B<GNU shtool>.
  +
  +=head1 SEE ALSO
  +
  +shtool(1).
  +
  +=cut
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtool.pod
  ============================================================================
  $ cvs diff -u -r1.65 -r1.66 shtool.pod
  --- ossp-pkg/shtool/shtool.pod	1 Jan 2004 16:54:20 -0000	1.65
  +++ ossp-pkg/shtool/shtool.pod	12 Feb 2004 16:06:27 -0000	1.66
  @@ -45,128 +45,6 @@
   There it can take over various (usually non-portable) tasks related to the
   building and installation of such packages.
   
  -=head2 Context Background
  -
  -For the configuration, build and installation environment of modern free
  -software packages one nowadays uses GNU B<autoconf> and friends (i.e.
  -usually B<autoconf>, B<automake> and B<libtool>). B<Autoconf> covers the
  -configuration, B<automake> covers the generation of the build environment and
  -B<libtool> covers most of a libraries build process. But at least when it
  -comes to the installation step one usually have to use a few auxiliary scripts
  -like C<mkdir.sh>, C<install.sh>, etc. These scripts are usually replacements
  -for system tools and are required mainly for portability reasons. The result
  -is usually an C<etc/> subdirectory in the source tree where over time a
  -lot shell scripts accumulate.
  -
  -=head2 Maintainance Problem
  -
  -The problem with those C<etc/> shell scripts starts if one has to maintain
  -I<lots> of free software packages as it's the case for the author of B<shtool>.
  -Then over time all C<etc/> directories diverge and with every day it gets more
  -and more nasty to always keep them in sync. Especially if some scripts
  -were locally adjusted because no centralized maintainance location exists, of
  -course. For B<autoconf> no such problem exists, because the resulting
  -C<configure> script is generated on-the-fly. The same applies to B<automake>
  -and the various C<Makefile.in> files.
  -
  -Only for B<libtool> one always has to grab the latest copy. But because it's
  -just two files (C<ltmain.sh> and C<ltconfig>), keeping a source trees in sync
  -is not too complicated (especially not if using the handy C<libtoolize>
  -program). But the C<etc/> shell script mess is nasty, especially because there
  -is no master version on the net. Additionally everytime one starts a new
  -project, one has to establish a new source tree. For a GNU hacker it's
  -immediately clear that B<autoconf> and friends are part of the game. But which
  -C<etc/> shell scripts are needed this time? And from which existing source
  -tree to copy them from? Hmmm... the same procedure as last year?!
  -
  -=head2 The Aesthetic Problem
  -
  -When a free software package has a large source tree (say, more than 50 files
  -and especially with one or more subdirectories) it's usually no problem to
  -have an additional C<etc/> subdirectory with some scripts. They then totally
  -go down. But for smaller packages, especially those living in a single source
  -directory (a degenerated tree), some people (like the author of B<shtool>)
  -have aesthetic problems. Because it looks strange to them that 20% of the
  -files in the source tree are just auxiliary scripts. Sure, the actual amount
  -of script code even B<shtool> cannot reduce, but B<shtool> merges them
  -together into a single file and this way they optically totally disappear from
  -the source tree.
  -
  -This is a pure aesthetical issue, of course. But keep in mind that hacking is
  -a piece of art. And a well layouted source tree is a piece of art for real
  -hackers, too.  Oh, and for those who really insist on a technical reason: it's
  -also easier to upgrade a single file than multiple files ;)
  -
  -=head2 Filling the gap
  -
  -So, wouldn't it be nice to have a fourth package (beside B<autoconf>,
  -B<automake> and B<libtool>) which fills the gap, i.e. which provides the
  -functionality of the old files in C<etc/>, is maintained at a centralized
  -location and even consists of just a single (perhaps large) script one can
  -threat as a black box the same way one already does this for B<libtool>?  The
  -author thought this I<would> be actually very useful and the result is the
  -current GNU B<shtool> package which at least successfully solved the above
  -problems of the author.
  -
  -=head2 The goals in detail
  -
  -To better understand the intentions behind B<shtool> and to avoid confusion,
  -here are the original goals of the B<shtool> script:
  -
  -=over 3
  -
  -=item B<1. It has to be self-contained and reside in a single file>
  -
  -This was achieved by compiling the resulting B<shtool> script out of the
  -ingredient source scripts. The advantage is that B<shtool> is still easily
  -maintainable, because one can test each script separately. But the final
  -functionality then resides in an all-in-one script which can be easily spread
  -over multiple source trees.
  -
  -=item B<2. It has to cover all functionality of the old scripts>
  -
  -This was achieved by (re)implementing really all functionality which
  -experience showed is important in source trees of typical free software
  -packages.
  -
  -=item B<3. It has to be maximum portable over all Unix flavors>
  -
  -This was achieved by basing the ingredient shell scripts only on well-proven
  -code which already survived practice in other projects over more than a few
  -months. Especially this means that a lot of complicated emulations are done to
  -avoid the use of unportable Unix programs (like C<fmt>, C<tr>, etc) or
  -unportable features of well-known Unix programs (like shell functions, special
  -C<sed> features, etc. pp).  That's why B<shtool>'s code sometimes looks crazy
  -and like overkill to you. Don't think this is because of the authors
  -crazyness. Instead it's most of the time mainly for portability reasons.
  -
  -=item B<4. It has to be clean and fully documented>
  -
  -This was achieved by reimplementing too ugly functionality from scratch and
  -cleaning up old shell script code plus writing this complete manual page.
  -
  -=item B<5. It has to stay under a reasonable and common license>
  -
  -This was achieved by placing the B<shtool> package under the GNU General
  -Public License (GPL).  This way the B<shtool> package itself is well protected
  -and is guarrantied to be kept free software, but the resulting B<shtool>
  -script can be nevertheless I<used> in I<all> types of source trees.  Notice
  -here: given that one includes GNU B<shtool> verbatim into an own source tree,
  -one is justified in saying that it remains separate from the own package, and
  -that this way one is simply just I<using> B<shtool>.  So, in this situation,
  -there is no requirement that the package itself is licensed under the GNU
  -General Public License in order to take advantage of B<shtool>. Keep this in
  -mind ;)
  -
  -=item B<6. It has to be modularized for flexibility reasons>
  -
  -This was achieved by using an auxiliary tool shtoolize(1) which can be used to
  -build individual C<shtool> scripts out of the ingredient shell scripts. This
  -way if one don't need all the available functionality one can assemble
  -together an individual C<shtool> script.
  -
  -=back
  -
   =head1 GLOBAL OPTIONS
   
   The following I<global options> are available for B<shtool>. Any I<command>s
  @@ -195,12 +73,14 @@
   
   =head1 COMMANDS
   
  -The following I<command>s are provided by B<shtool>. They are all called via
  -``C<shtool> I<command>''. Any trailing I<command_options> are specific to the
  -particular I<command>. They are listed (here and also below) sorted by topic,
  -i.e. related commands are listed side-by-side.
  +The following I<command>s are provided by B<shtool>. They are all called
  +via "C<shtool> I<command>". Any command options I<command_opts> and
  +arguments I<command_args> are specific to the particular I<command> and
  +are described in the corresponding manual page B<shtool_>I<command>(1).
  +The commands are listed here sorted by topic, i.e., related commands are
  +listed side-by-side.
   
  -=over 12
  +=over 16
   
   =item B<echo>
   
  @@ -209,30 +89,32 @@
   
   =item B<mdate>
   
  -Pretty-prints the last modification time of a file or directory.
  +Pretty-printing of the last modification time of a file or directory.
   
   =item B<table>
   
  -Pretty-prints a field-separately list as a table.
  +Pretty-printing a field-separated list as a two-dimensional table.
   
   =item B<prop>
   
  -Display a processing indication though a running propeller.
  +Displaying of a processing indication though a running terminal
  +character propeller.
   
   =item B<move>
   
  -mv(1) style command, but can rename/move multiple files at once and allows
  -source files just to be deleted if contents didn't change.
  +mv(1) style command for renaming/moving multiple files at once and
  +allowing source files just to be deleted if contents did not change.
   
   =item B<install>
   
  -Install a program, script or datafile in a portable way.
  +install(1) style command for installing a program, script or data file
  +in a portable way.
   
   =item B<mkdir>
   
  -mkdir(1) style command providing support for auto-parent-dir creation,
  -directory permission control and smart skipping if directory already
  -exists.
  +mkdir(1) style command providing support for automatical parent
  +directory creation, directory permission control and smart skipping if
  +directory already exists.
   
   =item B<mkln>
   
  @@ -241,11 +123,12 @@
   
   =item B<mkshadow>
   
  -Create a shadow source tree by the help of symbolic links.
  +Creation of a shadow filesystem tree by the help of symbolic links.
   
   =item B<fixperm>
   
  -Fix file permissions inside a source tree by cleaning up the permission bits.
  +Fixing of file permissions in a source tree by cleaning up the
  +permission bits.
   
   =item B<rotate>
   
  @@ -284,722 +167,6 @@
   =item B<path>
   
   Deal with shell path variables.
  -
  -=back
  -
  -=head1 COMMAND DESCRIPTION
  -
  -In the following the available I<commands> and their corresponding
  -I<command_options> are described in detail.
  -
  -=over 4
  -
  -=item B<echo> [B<-n>|B<--newline>] [B<-e>|B<--expand>] I<str>
  -
  -This is an echo(1) style print command which provides special expansion
  -constructs (terminal bold mode, environment details, date) and newline
  -control.  Per default I<string> is written to I<stdout> followed by a newline
  -character (``C<\n>''). When option ``B<-n>'' is used this newline character is
  -left out.
  -
  -The I<str> can contain special ``B<%>I<x>'' constructs which which
  -are expanded before the output is written if option ``B<-e>'' is
  -used. Currently the following constructs are recognized: ``B<%B>''
  -for switching to terminal bold mode, ``B<%b>'' for switching terminal
  -mode back to normal display mode, ``B<%u>'' for the current user name,
  -``B<%U>'' for the current user id (numerical), ``B<%g>'' for the current
  -group name, ``B<%G>'' for the current group id (numerical), ``B<%h>''
  -for the current hostname, ``B<%d>'' for the current domain name,
  -``B<%D>'' for the current day of the month, ``B<%M>'' for the current
  -month (numerical), ``B<%m>'' for the current month name and ``B<%Y>''
  -for the current year.
  -
  -The trick of this command is that it provides a portable ``B<-n>'' option and
  -hides the gory details needed to find out the environment details.
  -
  -Examples:
  -
  - #   shell script
  - shtool echo -n -e "Enter your name [%B%u%b]: "; read name
  - shtool echo -e "Your Email address might be %u@%h%d"
  - shtool echo -e "The current date is %D-%m-%Y"
  -
  -=item B<mdate> [B<-n>|B<--newline>] [B<-z>|B<--zero>] [B<-s>|B<--shorten>] [B<-d>|B<--digits>] [B<-f>|B<--field-sep> I<str>] [B<-o>|B<--order> I<spec>] I<path>
  -
  -This command pretty-prints the last modification time of a file or directory
  -I<path>. Option ``B<-n>'' suppresses the output of a trailing newline
  -character, option ``B<-z>'' pads numeric day (and optionally month) with a
  -leading zero, option ``B<-s>'' shortens the months name to an abbreviation of
  -three characters, option ``B<-d>'' replaces the month name with the
  -corresponding digits, option ``B<-f>'' uses I<str> as the field separator
  -(default is a single space character) and option ``B<-o>'' specified the order
  -in which the fields are printed.
  -
  -The default for I<spec> is ``C<dmy>'' which means an output of ``<day> <month>
  -<year>''.  Any combination of the chars ``C<d>'', ``C<m>'' and ``C<y>'' or
  -allowed for I<spec>.
  -
  -The trick of this command is that it provides a portable way to find out the
  -date of a file or directory while still allowing one to specify the format of
  -the date display.
  -
  -Examples:
  -
  - #   shell script
  - shtool mdate -n /
  - shtool mdate -f '/' -z -d -o ymd foo.txt
  - shtool mdate -f '-' -s foo.txt
  -
  -=item B<table> [B<-F>|B<--field-sep> I<sep>] [B<-w>|B<--width> I<width>] [B<-c>|B<--columns> I<cols>] [B<-s>|B<--strip> I<strip>] I<str>B<sep>I<str>...
  -
  -This pretty-prints a I<sep>-separated list of I<str>ings as a table.  Per
  -default a colon-separated list (I<sep>=":") is pretty printed as a
  -three-column (<cols>=3) table no longer than 79 chars (I<strip>=79) is
  -generated where each column is 15 characters wide (I<width>=15).
  -
  -The trick of this command is that it avoids to use the unportable tr(1) and
  -fmt(1) commands and instead is based entirely on sh(1), awk(1) and sed(1)
  -functionality.
  -
  -Example:
  -
  - #   shell script
  - shtool table -F , -w 5 -c 4 "1,2,3,4,5,6,7,8,9,10,11,12"
  -
  -=item B<prop> [B<-p>|B<--prefix> I<str>]
  -
  -This command displays a processing indication though a running propeller. The
  -option ``B<-p>'' can be used to set a particular prefix I<str> which is
  -displayed in front of the propeller. The default is no prefix string, i.e. the
  -propeller is at the left border of the terminal.  This command is intended to
  -be run at the end of a pipe (``C<|>'') sequence where on C<stdin>
  -logging/processing informations found.  For every line on C<stdin> the
  -propeller cycles one step clock-wise.
  -
  -The trick of this command is that it provides a portable and easy to use way
  -to display such nice and psychologically important process indicators.
  -
  -Example:
  -
  - #   shell script
  - configure 2>&1 |\
  -     tee logfile |\
  -     shtool prop -p "Configuring sources"
  -
  -=item B<move> [B<-v>|B<--verbose>] [B<-t>|B<--trace>] [B<-e>|B<--expand>] [B<-p>|B<--preserve>] I<src-file> I<dst-file>
  -
  -This is a mv(1) style command, but with two special features: First if
  -option ``B<-e>'' (`expand') is used and an asterisk occurs somewhere in I<src>
  -one can use ``C<%>I<n>'' (where I<n> is C<1>,C<2>,...) in I<dst-file>. This is
  -useful for renaming multiple files at once.  Second, if option ``B<-p>''
  -(for `preserve') is used and I<src-file> and I<dst-file> are byte-wise the
  -same it just deletes I<src-file>. The intention is that the permissions and
  -time stamps on I<dst> aren't changed which is important if I<dst-file> is
  -used in conjunction with Makefiles.  Option ``B<-v>'' (verbose) can be used to
  -enable the output of extra processing information. Option ``B<-t>'' (trace)
  -can be used to enable the output of the essential shell commands which are
  -executed.
  -
  -The trick of this command is that it can rename multiple files at once and
  -preserves the timestamps if the contents isn't changed.
  -
  -Examples:
  -
  - #   shell script
  - shtool move -v -e '*.txt' %1.asc
  -
  - #   Makefile
  - scanner.c: scanner.l
  -     lex scanner.l
  -     shtool move -t -p lex.yy.c scanner.c
  -
  -=item B<install> [B<-v>|B<--verbose>] [B<-t>|B<--trace>] [B<-c>|B<--copy>] [B<-C>|B<--compare-copy>] [B<-s>|B<--strip>] [B<-m>|B<--mode> I<mode>] [B<-o>|B<--owner> I<owner>] [B<-g>|B<--group> I<group>] [B<-e>|B<--exec> I<sed-cmd>] [B<-d>|B<--mkdir>] I<file> I<path>
  -
  -This command installs a program, script or datafile (dependent on I<mode>) in
  -a portable way while providing all important options of the BSD install(1)
  -command. Per default I<file> is moved to the target I<path>, but with option
  -``B<-c>'' I<file> is copied. The target file is created with owner/group set
  -to the current active uid/gid, but if this script is called as root (uid 0)
  -the options ``B<-o>'' and ``B<-g>'' can be used to override this.
  -
  -Additionally program executables is stripped with strip(1) after
  -installation if option ``B<-s>'' is used. Option ``B<-C>'' is like
  -``B<-c>'', except if the destination file already exists and is the
  -same as the source file, no file is copied at all. Option ``B<-e>''
  -can be used one or multiple times to apply one or more sed(1) commands
  -on-the-fly to the contents of the input I<file> before the output file
  -is created. Option ``B<-v>'' (verbose) can be used to enable the output
  -of extra processing information. Option ``B<-t>'' (trace) can be used to
  -enable the output of the essential shell commands which are executed.
  -
  -The trick of this command is that it provides the functionality of BSD
  -install(1) in a portable emulated way. For even more compatibility,
  -the BSD "B<shtool> C<install -d>" usage is internally mapped to the
  -"B<shtool> C<mkdir -f -p -m 755>" command.
  -
  -Example:
  -
  - #   Makefile
  - install:
  -      :
  -     shtool install -c -s -m 4755 foo $(bindir)/
  -     shtool install -c -m 644 foo.man $(mandir)/man1/foo.1
  -     shtool install -c -m 644 -e "s/@p@/$prefix/g" foo.conf $(etcdir)/
  -
  -=item B<mkdir> [B<-t>|B<--trace>] [B<-f>|B<--force>] [B<-p>|B<--parents>] [B<-m>|B<--mode> I<mode>] [B<-o>|B<--owner> I<owner>] [B<-g>|B<--group> I<group>] I<dir> [I<dir> ...]
  -
  -This is a mkdir(1) style command providing support for automatic parent
  -directory creation (if option ``B<-p>'' is used), directory permission
  -control (with option ``B<-m> I<mode>'' where I<mode> can be in any of
  -the formats specified to the chmod(1) command) and smart skipping if
  -I<dir> already exists (triggered by the force option ``B<-f>''). Option
  -``B<-t>'' (trace) can be used to enable the output of the essential
  -shell commands which are executed. The target directory is created with
  -owner/group set to the current active uid/gid, but if this script is
  -called as root (uid 0) the options ``B<-o>'' and ``B<-g>'' can be used
  -to override this.
  -
  -The trick of this command is that it provides both a portable ``B<-p>''
  -functionality and the ability to be smart if the directory already exists
  -which is important for installation procedures.
  -
  -Example:
  -
  - #   Makefile
  - install:
  -     shtool mkdir -f -p -m 755 $(bindir)
  -     shtool mkdir -f -p -m 755 $(mandir)/man1
  -      :
  -
  -=item B<mkln> [B<-t>|B<--trace>] [B<-f>|B<--force>] [B<-s>|B<--symbolic>] I<src-path> [I<src-path> ...] I<dst-path>
  -
  -This is a ln(1) style command which provides automatic calculation and usage
  -of relative links if possible, i.e. usually if I<src-path> and I<dst-path>
  -are not absolute paths or at least they share a common prefix except the root
  -directory (``C</>''). When more than one I<src-path> is specified, all of them
  -are linked into I<dst-path>. Options ``B<-f>'' and ``B<-s>'' are similar to
  -ln(1), i.e.  they force the creation of the link (even if it exists) and
  -create a symbolic link instead of a hard-link.  Option ``B<-t>'' (trace) can
  -be used to enable the output of the essential ``C<ln>'' command which is
  -executed.
  -
  -The trick of this command is that it tried hard to calculate the paths to get
  -the maximum possible relative paths.
  -
  -Example:
  -
  - #   shell script
  - shtool mkln -s foo/bar baz/quux
  -
  -=item B<mkshadow> [B<-v>|B<--verbose>] [B<-t>|B<--trace>] [B<-a>|B<--all>] I<src-dir> I<dst-dir>
  -
  -This command creates a shadow tree of I<src-dir> under I<dst-dir> by
  -recreating the directory hierarchy of I<src-dir> under I<dst-dir> and by
  -creating the files of I<src-dir> by linking them into the corresponding
  -directories under I<dst-dir> via symbolic links. When I<src-dir> can be
  -reached via relative paths from I<dst-dir>, relative symbolic links are used,
  -too.
  -
  -Option ``B<-v>'' (verbose) can be used to enable some displaying of processing
  -information.  Option ``B<-t>'' (trace) can be used to display all commands
  -which are executed in order to construct I<dst-dir>.  Option ``B<-a>'' (all)
  -can be used to really shadow all files and directories in I<src-dir>. Per
  -default CVS related files and directories, backup files, object files, etc.
  -are not shadowed.
  -
  -The trick of this is that is provides such a high-level functionality with a
  -single command and hides all gory details.
  -
  -Example:
  -
  - #   shell script
  - shtool mkshadow -v -a . /tmp/shadow
  -
  -=item B<fixperm> [B<-v>|B<--verbose>] [B<-t>|B<--trace>] I<path> [ I<path> ... ]
  -
  -This command fixes file permissions inside a source tree under I<path> by
  -cleaning up the permission bits. It determines the cleaned up permission from
  -the already set bits. It's intended to be run before a tarball is rolled out
  -of the source tree. Option ``B<-v>'' can be used to display some processing
  -information.  Option ``B<-t>'' (trace) can be used to enable the output of the
  -essential shell commands which are executed.
  -
  -The trick is that this is more convenient that having to set the permissions
  -manually or with a large file list.
  -
  -Example:
  -
  -  #   Makefile.in
  -  dist:
  -      shtool fixperm -v *
  -      ...
  -
  -=item B<rotate> [B<-v>|B<--verbose>] [B<-t>|B<--trace>] [B<-f>|B<--force>] [B<-n>|B<--num-files> I<count>] [B<-s>|B<--size> I<size>] [B<-c>|B<--copy>] [B<-r>|B<--remove>] [B<-a>|B<--archive-dir> I<dir>] [B<-z>|B<--compress> [I<tool>:]I<level>] [B<-b>|B<--background>] [B<-d>|B<--delay>] [B<-p>|B<--pad> I<len>] [B<-o>|B<--owner> I<owner>] [B<-g>|B<--group> I<group>] [B<-m>|B<--mode> I<mode>] [B<-M>|B<--migrate> I<cmd>] [B<-P>|B<--prolog> I<cmd>] [B<-E>|B<--epilog> I<cmd>] I<file> [...]
  -
  -This command rotates a logfile I<file> by subsequently creating up to
  -I<count> (optionally compressed) archive files of it. Archive files are
  -named "I<file>.I<number>[I<compress-suffix]>" where I<number> is the
  -version number, 0 being the newest and "I<count>-1" the oldest.
  -
  -A rotation step consists of the following steps: 1. remove archive file
  -number I<count>-1; 2. move archive file number I<N>-1 to I<N> for I<N>
  -counting from 1 to I<count>-1; 3. move I<file> to archive file number 0;
  -4. creating a new and empty instance of I<file>.
  -
  -Option ``B<-s>'' can be used to only start a rotation step if I<file> is
  -at least I<size> bytes long. The argument I<size> can be specified also
  -with the trailing units C<K> (kilo), C<M> (mega) or C<G> (giga).
  -
  -Option ``B<-c>'' changes the approach of moving I<file> to archive file
  -number 0: instead of a move followed by the creation of a new I<file>, a
  -copy is performed followed by a truncation of I<file>. The difference is
  -that in the first case (the default), if an application has I<file>
  -still opened, after the rotation step it will have archive file number
  -0 opened and usually has to reopen the new I<file>, while in the second
  -case the application can keep its open file handles to I<file>. The
  -drawback of the second approach is that logfile entries are lost when
  -they are written to I<file> between the execution of the copy and the
  -subsequent truncation operation.
  -
  -Option ``B<-r>'' removes I<file> after rotation instead of providing a
  -new empty file. Option ``B<-a>'' forces archive files to be created in
  -the separate directory I<dir>.
  -
  -Option ``B<-z>'' enables compression of archive files with compression
  -level I<level> (if option ``B<-b>'' is present, compression takes place in
  -background). By default, the tools bzip2(1), gzip(1) and compress(1) are
  -searched for in C<$PATH> (in this order), but one also can override this
  -by prefixing the compression level with one of the three particular tool
  -names. Option ``B<-d>'' delays the compression of archive file number 0.
  -This is useful if option ``B<-c>'' is not used, because an application
  -might still write to archive file 0 (through an open file handle).
  -
  -Option ``B<-p>'' enables padding with leading zeros in the I<number>
  -part of the filename "I<file>.I<number>I<compress-suffix>". The default
  -padding I<len> is 1. This is interesting if more than 10 archive files
  -are used, because it leads to still sorted directory listings.
  -
  -Options ``B<-o>'', ``B<-g>'' and ``B<-m>'' can be used to make sure that
  -the created files have particular file attributes. The valid arguments
  -are the same as for chown(1), chgrp(1) and chmod(1). Be aware that using
  -options ``B<-o>'' and ``B<-g>'' require root privileges.
  -
  -Option ``B<-M>'' allows one to execute a "migration" command just before
  -the archive file number I<count>-1 is removed from the filesystem. The
  -specified I<cmd> gets the archive filename as an argument appended.
  -Options ``B<-P>'' (prolog) and ``B<-E>'' (epilog) can be used to execute
  -commands before and after the rotation step. They are interesting in
  -conjunction with option ``B<-s>'', because they are not executed at all
  -if it is decided that no rotation step is performed.
  -
  -Option ``B<-f>'' (force) can be used to allow the archive directory
  -(option ``B<-a>'') to be silently created if it still does not exist and
  -that still not existing intermediate logfiles are silently skipped in
  -the rotation step.
  -
  -Option ``B<-v>'' (verbose) can be used to display the files which are
  -rotated. Option ``B<-t>'' (trace) can be used to enable the output of
  -the essential shell commands which are executed for the rotation step.
  -
  -Example:
  -
  -  #   shell script
  -  shtool rotate -n10 -s1M -zbzip2:9 -d -r /var/log/ap.access.log
  -  shtool rotate -n5 -s128K -zbzip2:9 -d -r /var/log/ap.error.log
  -  apachectl graceful
  -
  -=item B<tarball> [B<-t>|B<--trace>] [B<-v>|B<--verbose>] [B<-o>|B<--output> I<tarball>] [B<-c>|B<--compress> I<prog>] [B<-u>|B<--user> I<user>] [B<-g>|B<--group> I<group>] [B<-e>|B<--exclude> I<pattern>] I<path> [I<path> ...]
  -
  -This command is for `rolling' distribution `tarballs', i.e. for the creation
  -of distribution files generated by `C<tar>'. The important aspects of
  -standardized free software tarballs are: first they have to unpack into a
  -single top-level directory; second this top-level directory should correspond
  -to the tarball filename (i.e. a tarball `C<foobar-0.8.15.tar>' per convention
  -unpacks into a top-level directory `C<foobar-0.8.15/>'); third the files in
  -the tarball should be sorted to allow users to use the `C<tar tvf ->' command
  -in a reasonable way; fourth the owner and group of the files in the tarball
  -for security reasons can be set to arbitrary names.
  -
  -The input files are given by the file or directory arguments I<path>.
  -Directories are expanded before the comma-separated exclude (option B<-e>)
  -I<pattern>s (B<grep> regular expressions) are used to filter the list.  The
  -default filter is ``C<CVS,\\.cvsignore,\\.[oa]\$>''. Then the tarball is
  -created with its files owned by I<user> (option B<-u>) and I<group> (option
  -B<-g>). Finally the resulting tarball is piped through an optional compression
  -(option B<-c>) program and written to the output file I<tarball> (option
  -B<-o>).  Option ``B<-v>'' can be used to display the files which are stored in
  -the tarball. Option ``B<-t>'' (trace) can be used to enable the output of the
  -essential shell commands which are executed.
  -
  -The trick of this command is that it combines the complex process of rolling a
  -good tarball into a I<single> command.
  -
  -Example:
  -
  -  #   Makefile.in
  -  dist:
  -      ...
  -      V=`shtool version -d short ...'; \
  -      shtool tarball -o foobar-$$V.tar.gz -c 'gzip -9' \
  -                     -u bar -g gnu -e 'CVS,\.cvsignore' .
  -
  -=item B<subst> [B<-v>|B<--verbose>] [B<-t>|B<--trace>] [B<-n>|B<--nop>] [B<-s>|B<--stealth>] [B<-i>|B<--interactive>] [B<-b>|B<--backup> I<ext>] [B<-e>|B<--exec> I<cmd>] [B<-f>|B<--file> I<cmd-file>] [I<file>] [I<file> ...]
  -
  -This command applies one or more sed(1) substitution operations to
  -F<stdin> or any number of files. The sed(1) operations are either
  -specified on the command line with option ``B<-e>'' or are contained
  -in a file I<cmd-file> and are specified with option ``B<-f>''. The
  -original untouched I<file> is usually overridden. If option ``B<-b>''
  -is given and specifies a file extension, the original file is preserved
  -as ``I<file>.I<ext>''. If option ``B<-s>'' (stealth) is specified,
  -the timestamp is preserved on I<file>, too. Option ``B<-i>'' enables
  -interactive mode where the user has to approve each operation. Option
  -``B<-n>'' (no operation) can be used to disable the actual execution of
  -the essential shell commands which would be executed. Option ``B<-t>''
  -(trace) can be used to enable the output of the essential shell commands
  -which are executed. Option ``B<-v>'' (verbose) can be used to display
  -the files which are patched.
  -
  -Example:
  -
  -  #    interactive shell
  -  shtool subst -i -e 's;(c) \([0-9]*\)-2000;(c) \1-2001;' *.[ch]
  -
  -  #    RPM spec-file
  -  %install
  -      shtool subst -v -n \
  -          -e 's;^\(prefix=\).*;\1 $RPM_BUILD_ROOT%{_prefix};g' \
  -          -e 's;^\(sysconfdir=\).*;\1 $RPM_BUILD_ROOT%{_prefix}/etc;g' \
  -          `find . -name Makefile -print`
  -      make install
  -
  -=item B<platform> [B<-F>|B<--format> I<FORMAT>] [B<-S>|B<--sep> I<STRING>] [B<-C>|B<--conc> I<STRING>] [B<-L>|B<--lower>] [B<-U>|B<--upper>] [B<-v>|B<--verbose>] [B<-c>|B<--concise>] [B<-n>|B<--newline>] [B<-t>|B<--type> I<TYPE>] [B<-V>|B<--version>] [B<-h>|B<--help>]
  -
  -This command privides Unix platform identifications. It distinguishes
  -a platform according to its I<hardware architecture> and I<operating
  -system>. For both there is a I<class>, I<product> and I<technology>
  -identification. For each of those six identifications, there is a
  -I<verbose>, I<regular> and I<concise> version.
  -
  -This leads to eighteen (2x3x3) available identification strings for each
  -platform, from which usually 2 are chosen in a particular situation.
  -This is done by assembling the platform identification string using a
  -I<FORMAT> string containing one or more identification constructs of the
  -forms "C<%[xx]>" (verbose), "C<%{xx}>" (regular) and "C<%E<lt>xxE<gt>>"
  -(concise).
  -
  -Option B<-F> controls the output formatting of this command. It is a
  -plain-text string with the "C<%>I<xx>" constructs which expand to the
  -various platform information strings. "C<%{>I<xx>C<}>" is the canonical
  -regular version of the information. "C<%[>I<xx>C<]>" is the verbose
  -version of the information. "C<%E<lt>>I<xx>C<E<gt>>" is the concise
  -version of the information. In total, the following constructs
  -are available for expansion:
  -
  - %[ac]    verbose hardware architecture class
  - %{ac}    regular hardware architecture class
  - %<ac>    concise hardware architecture class
  - %[ap]    verbose hardware architecture product
  - %{ap}    regular hardware architecture product
  - %<ap>    concise hardware architecture product
  - %[at]    verbose hardware architecture technology
  - %{at}    regular hardware architecture technology
  - %<at>    concise hardware architecture technology
  - %[sc]    verbose operating system class
  - %{sc}    regular operating system class
  - %<sc>    concise operating system class
  - %[sp]    verbose operating system product
  - %{sp}    regular operating system product
  - %<sp>    concise operating system product
  - %[st]    verbose operating system technology
  - %{st}    regular operating system technology
  - %<st>    concise operating system technology
  -
  -The default I<FORMAT> string is "C<%{sp} (%{ap})>", providing the
  -regular operating system and hardware architecture product information.
  -
  -Option B<-S> sets the word I<separation> string for the platform
  -information strings. By default it is "C< >" (whitespace). It is
  -especially used for separating the operating system name and the
  -operating system version. Option B<-C> sets the word I<concatenation>
  -string for the platform information strings. By default it is "C</>".
  -It is especially used to concatenate multiple parts in operating
  -system name and version parts. Option B<-L> enforces conversion of the
  -output to all I<lower> case. Option B<-U> enforces conversion of the
  -output to all I<upper> case. 
  -
  -Option B<-v> enforces verbose versions of all expansion constructs
  -in I<FORMAT> string of option B<-F>. It is equal to specifying all
  -expansion constructs as "C<%[>I<xx>C<]>". Option B<-c> enforces
  -concise versions of all expansion constructs in I<FORMAT> string of
  -option B<-F>. It is equal to specifying all expansion constructs as
  -"C<%E<lt>>I<xx>C<E<gt>>". Option B<-n> omits the usual trailing newline
  -character in the output.
  -
  -Option B<-t> is a meta option which internally sets options B<-F>,
  -B<-S>, B<-C>, B<-L>, B<-U>, B<-v> or B<-c> according to I<TYPE>. It can
  -be used to easily specify various commonly known outputs. The following
  -I<TYPE>s are available:
  -
  -=over 4
  -
  -=item B<binary>
  -
  -Binary Package Id (OpenPKG RPM).
  -This is equal to "C<-F '%<ap>-%<sp>' -L -S '' -C '+'>"
  -and results in outputs like "C<ix86-freebsd4.9>" and "C<ix86-debian3.0>".
  -
  -=item B<build>
  -
  -Build-Time Checking (OpenPKG RPM).
  -This is equal to "C<-F '%<at>-%<st>' -L -S '' -C '+'>"
  -and results in outputs like "C<i686-freebsd4.9>" and "C<i586-linux2.4>".
  -
  -=item B<gnu>
  -
  -GNU F<config.guess> Style Id.
  -This is similar to B<build> and is equal to "C<-F '"%<at>-unknown-%<st>' -L -S '' -C '+'>"
  -and results in outputs like "C<i686-unknown-freebsd4.9>" and "C<i586-unknown-linux2.4>".
  -
  -=item B<web>
  -
  -HTTP Server Header Id.
  -This is equal to "C<-F '"%<sp>-%<ac>' -S '/' -C '+'>"
  -and results in outputs like "C<FreeBSD/4.9-iX86>" and "C<Debian/3.0-iX86>".
  -
  -=item B<summary>
  -
  -Human Readable Verbose Summary Information. This is equal to "C<-F
  -'Class: %[sc] (%[ac])\nProduct: %[sp] (%[ap])\nTechnology: %[st]
  -(%[at])' -S ' ' -C '/'>" and results in outputs like:
  -
  - Class:      4.4BSD (iX86)
  - Product:    FreeBSD 4.9-RC (iX86)
  - Technology: FreeBSD 4.9-RC (i686)
  -
  -and
  -
  - Class:      LSB (iX86)
  - Product:    Debian GNU/Linux 3.0 (iX86)
  - Technology: GNU/Linux 2.2/2.4 (i686)
  -
  -=item B<all-in-one>
  -
  -All-In-One Full-Table Information. This just outputs really
  -all 2x2x3 identification strings as a table.
  -
  -=back
  -
  -Option B<-V> outputs the version information of B<OSSP platform> only.
  -Option B<-h> outputs the usage information of B<OSSP platform> only.
  -
  -Example:
  -
  - #   configure.in
  - PLATFORM=`shtool platform --type=binary`
  -
  -=item B<arx> [B<-t>|B<--trace>] [B<-C>|B<--command> I<cmd>] I<op> I<archive> I<file> [I<file> ...]
  -
  -This is a wrapper around the archive (``C<ar>'') tool. It provides the ability
  -to create archives out of existing archives, i.e.  if one of I<file> matches
  -``C<*.a>'' the archive member files of I<file> are used instead of I<file>
  -itself. When option ``B<-t>'' (trace) is given B<arx> shows the actually
  -involved shell commands. Option ``B<-C>'' can be used to set the ``ar''
  -command to I<cmd>.
  -
  -The trick of this command is the automatic handling of archive members which
  -is especially interesting if one wants to construct a (usually top-level)
  -library archive out of pre-build sub-library archives (usually staying inside
  -subdirs) in a large source tree.
  -
  -Example:
  -
  - #   Makefile
  - AR=ar
  - RANLIB=ranlib
  -   :
  - OBJS=foo.o bar.o
  - LIBS=baz/libbaz.a quux/libquux.a
  -   :
  - libfoo.a: $(OBJS) $(LIBS)
  -     shtool arx -C $(AR) rc libfoo.a $(OBJS) $(LIBS)
  -     $(RANLIB) libfoo.a
  -
  -=item B<slo> [B<-p>|B<--prefix> I<str>] -- B<-L>I<dir> B<-l>I<lib> [ B<-L>I<dir> B<-l>I<lib> ... ]
  -
  -This command separates the linker options ``B<-L>'' and ``B<-l>'' by library
  -class. It's argument line can actually be an arbitrary command line where those
  -options are contained. B<slo> parses these two options only and ignores the
  -remaining contents. The result is a trivial shell script on C<stdout> which
  -defines six variables containing the ``B<-L>'' and ``B<-l>'' options sorted by
  -class:
  -
  -``C<SLO_DIRS_OBJ>'' and ``C<SLO_LIBS_OBJ>'' contains the ``B<-L>'' and
  -``B<-l>'' options of static libraries,  ``C<SLO_DIRS_PIC>'' and
  -``C<SLO_LIBS_PIC>'' contains the ``B<-L>'' and ``B<-l>'' options of static
  -libraries containing PIC ("Position Independent Code") and
  -``C<SLO_DIRS_DSO>'' and ``C<SLO_LIBS_DSO>'' contains the ``B<-L>'' and
  -``B<-l>'' options of shared libraries. The B<-p> option can be used to
  -change the default variable prefix from "C<SLO_>" to I<str>.
  -
  -The intent of this separation is to provide a way between static and shared
  -libraries which is important if one wants to link custom DSOs against
  -libraries, because not all platforms all one to link these DSOs against shared
  -libraries. So one first has to separate out the shared libraries and link the
  -DSO only against the static libraries.  One can use this command also to just
  -sort the options.
  -
  -Example:
  -
  -  #   configure.in
  -  LINK_STD="$LDFLAGS $LIBS"
  -  eval `shtool slo $LINK_STD`
  -  LINK_DSO="$SLO_DIRS_OBJ $SLO_LIBS_OBJ $SLO_DIRS_PIC $SLO_LIBS_PIC"
  -    :
  -
  -=item B<scpp> [B<-v>|B<--verbose>] [B<-p>|B<--preserve>] [B<-f>|B<--filter> I<filter>] [B<-o>|B<--output> I<ofile>] [B<-t>|B<--template> I<tfile>] [B<-M>|B<--mark> I<mark>] [B<-D>|B<--define> I<dname>] [B<-C>|B<--class> I<cname>] I<file> [I<file> ...]
  -
  -This command is an additional ANSI C source file pre-processor for sharing
  -cpp(1) code segments, internal variables and internal functions. The intention
  -for this comes from writing libraries in ANSI C. Here a common shared internal
  -header file is usually used for sharing information between the library
  -source files.
  -
  -The operation is to parse special constructs in I<file>s, generate a few
  -things out of these constructs and insert them at position I<mark> in I<tfile>
  -by writing the output to I<ofile>. Additionally the I<file>s are never touched
  -or modified. Instead the constructs are removed later by the cpp(1) phase of
  -the build process. The only prerequisite is that every I<file> has a
  -``C<#include ">I<ofile>C<">'' at the top.
  -
  -This command provides the following features: First it avoids namespace
  -pollution and reduces prototyping efforts for internal symbols by recognizing
  -functions and variables which are defined with the storage class identifier
  -``I<cname>''.  For instance if I<cname> is ``intern'', a function ``C<intern
  -void *foobar(int quux)>'' in one of the I<file>s is translated into both a
  -``C<#define foobar __foobar>'' and a ``C<extern void *foobar(int quux);>'' in
  -I<ofile>. Additionally a global ``C<#define> I<cname> C</**/>'' is also
  -created in I<ofile> to let the compiler silently ignore this additional
  -storage class identifier.
  -
  -Second, the library source files usually want to share C<typedef>s,
  -C<#define>s, etc.  over the source file boundaries. To achieve this one can
  -either place this stuff manually into I<tfile> or use the second feature of
  -B<scpp>: All code in I<file>s encapsulated with ``C<#if >I<dname> ...
  -C<#endif>'' is automatically copied to I<ofile>. Additionally a global
  -``C<#define> I<dname> C<0>'' is also created in I<ofile> to let the compiler
  -silently skip this parts (because it was already found in the header).
  -
  -Option ``B<-v>'' can be used to enable some processing output. Option
  -``B<-p>'' can be used to make the decision whether to overwrite I<ofile>
  -independent of the generated ``#line'' lines. This is useful for
  -Makefiles if the real contents of I<ofile> will not change, just
  -line numbers. Option ``B<-f>'' (which can occur multiple times) can
  -be used to apply one or more pre-processing sed(1) I<filter> commands
  -(usually of type ``C<s/.../.../>'') to each input file before their
  -input is parsed.
  -
  -Example:
  -
  -  #   Makefile
  -  SRCS=foo_bar.c foo_quux.c
  -  foo_p.h: foo_p.h.in
  -       shtool scpp -o foo_p.h -t foo_p.h.in \
  -                   -M %%MARK%% -D cpp -C intern $(SRCS)
  -
  -  /* foo_p.h.in */
  -  #ifndef FOO_P_H
  -  #define FOO_P_H
  -  %%MARK%%
  -  #endif /* FOO_P_H */
  -
  -  /* foo_bar.c */
  -  #include "foo_p.h"
  -  #if cpp
  -  #define OURS_INIT 4711
  -  #endif
  -  intern int ours;
  -  static int myone = 0815;
  -  intern int bar(void)
  -  {
  -      ours += myone;
  -  }
  -
  -  /* foo_quux.c */
  -  #include "foo_p.h"
  -  int main(int argc, char *argv[])
  -  {
  -      int i;
  -      ours = OURS_INIT
  -      for (i = 0; i < 10; i++) {
  -          bar();
  -          printf("ours now %d\n", ours);
  -      }
  -      return 0;
  -  }
  -
  -=item B<version> [B<-l>|B<--language> I<lang>] [B<-n>|B<--name> I<name>] [B<-p>|B<--prefix> I<prefix>] [B<-s>|B<--set> I<version>] [B<-e>|B<--edit>] [B<-i>|B<--increase> I<knob>] [B<-d>|B<--display> I<type>] I<file>
  -
  -This command generates and maintains a version information
  -file I<file> for program name I<name> in either textual
  -(I<lang>="C<txt>"), ANSI C (I<lang>="c"), Perl (I<lang>="perl") or
  -Python (I<lang>="python") language. The version is always described
  -with a triple E<lt>I<version>,I<revision>,I<level>E<gt> and is
  -represented by a string which always matches the regular expression
  -``C<[0-9]+\.[0-9]+[sabp.][0-9]+>''. When the option ``B<-s>'' is given,
  -the contents of I<file> is overridden with the specified I<version>.
  -
  -When option ``B<-i>'' is used, the current version in I<file> is updated
  -by increasing one element of the version where I<knob> can be one of
  -the following: ``C<v>'' for increasing the version by 1 (and resetting
  -revision and level to 0), ``C<r>'' for increasing the revision by 1 (and
  -resetting level to 0) or ``C<l>'' for increasing the level by 1.  Option
  -``B<-e>'' can be used to interactively enter a new version.
  -
  -Unless option ``B<-e>'', ``B<-i>'' or ``B<-s>'' is specified, the performed
  -action is to display the current version.  Option ``B<-d>'' then can be used
  -to control the display type: "C<short>" for a short version display, "C<long>"
  -for a longer version display, "C<hex>" for a hexadecimal display of the version
  -and "C<libtool>" for a format suitable for use with GNU libtool.
  -
  -The hexadecimal format for a version C<v.rtl> is C<VVRRTLL> where C<VV>
  -and C<RR> directly correspond to C<v> and C<r>, C<T> encodes the level
  -type as C<9>, C<2>, C<1>, C<0> (representing C<s>, C<p>/C<.>, C<b>, C<a>
  -in this order) and C<LL> is either directly corresponding to C<l> or set
  -to C<99> if level type is C<s>.
  -
  -Example:
  -
  - #   shell script
  - shtool version -l c -n FooBar -p foobar -s 1.2b3 version.c
  -
  - #   configure.in
  - V=`shtool version -l c -d long version.c`
  - echo "Configuring FooBar, Version $V"
  -
  -=item B<path> [B<-s>|B<--suppress>] [B<-r>|B<--reverse>] [B<-d>|B<--dirname>] [B<-b>|B<--basename>] [B<-m>|B<--magic>] [B<-p>|B<--path> I<path>] I<str> [I<str> ...]
  -
  -This command deals with shell C<$PATH> variables. It can find a program
  -executable in $PATH or I<path> through one or more filenames (given by one or
  -more I<str> arguments). The result is the absolute filesystem path to the
  -program displayed on C<stdout> plus an exit code of 0 if it was really
  -found.
  -
  -The option ``B<-s>'' can be used to suppress the output which is useful to
  -just test whether a program exists with the help of the return code.  The
  -option ``B<-m>'' enables some magic where currently for the programs
  -``C<perl>'' and ``C<cpp>'' an advanced magic search is done. The option
  -``B<-r>'' can be used to transform a forward path to a subdirectory into a
  -reverse path. Option ``B<-d>'' and ``B<-b>'' just output the directory or base
  -name of I<str>.
  -
  -Examples:
  -
  - #   shell script
  - awk=`shtool path -p "${PATH}:." gawk nawk awk`
  - perl=`shtool path -m perl`
  - cpp=`shtool path -m cpp`
  - revpath=`shtool path -r path/to/subdir`
   
   =back
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtoolize.in
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 shtoolize.in
  --- ossp-pkg/shtool/shtoolize.in	1 Jan 2004 16:54:20 -0000	1.33
  +++ ossp-pkg/shtool/shtoolize.in	12 Feb 2004 16:06:27 -0000	1.34
  @@ -181,6 +181,9 @@
       $code .= $_ while (<FP>);
       close(FP);
   
  +    #   strip away embedded documentation
  +    $code =~ s|##\n##\s+manual\s+page\n##\s+.+$||si;
  +
       #   determine attributes
       my $len = length($code);
       my $oneline = '';
  @@ -451,7 +454,7 @@
   foreach $name (@used) {
       print OUT "    $name )\n";
       $code = $SCRIPT->{$name}->{CODE1};
  -    $code =~ s|^|        |mg;
  +    $code =~ s|^(.)|        $1|mg;
       sub mysub {
           my ($prolog, $code, $epilog) = @_;
           $code =~ s|^        ||mg;
  @@ -496,7 +499,7 @@
   foreach $name (@used) {
       print OUT "$name )\n";
       $code = $SCRIPT->{$name}->{CODE2};
  -    $code =~ s|^|    |mg;
  +    $code =~ s|^(.)|    $1|mg;
       sub mysub {
           my ($prolog, $code, $epilog) = @_;
           $code =~ s|^    ||mg;
  @@ .

From ossp-cvs-owner@ossp.org  Fri Feb 13 15:29:34 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B94B3775B1; Fri, 13 Feb 2004 15:29:33 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid_cli.c uuid_cli.pod
Message-Id: <20040213142933.B94B3775B1@mail.ossp.org>
Date: Fri, 13 Feb 2004 15:29:33 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Feb-2004 15:29:33
  Branch: HEAD                             Handle: 2004021314293200

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid_cli.c uuid_cli.pod

  Log:
    Fixed "uuid -h" command.
    
    Submitted by: fuyuki@nigredo.org

  Summary:
    Revision    Changes     Path
    1.38        +4  -1      ossp-pkg/uuid/ChangeLog
    1.15        +6  -2      ossp-pkg/uuid/uuid_cli.c
    1.14        +1  -1      ossp-pkg/uuid/uuid_cli.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	11 Feb 2004 14:53:00 -0000	1.37
  +++ ossp-pkg/uuid/ChangeLog	13 Feb 2004 14:29:32 -0000	1.38
  @@ -11,7 +11,10 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 0.9.5 and 0.9.6 (06-Feb-2004 to 11-Feb-2004)
  +  Changes between 0.9.5 and 0.9.6 (06-Feb-2004 to 13-Feb-2004)
  +
  +   o Fixed "uuid -h" command.
  +     [Ralf S. Engelschall, <fuyuki@nigredo.org>]
   
      o Added an experimental additional DCE 1.1 API for backward
        compatibility with existing applications.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.c
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 uuid_cli.c
  --- ossp-pkg/uuid/uuid_cli.c	19 Jan 2004 14:11:50 -0000	1.14
  +++ ossp-pkg/uuid/uuid_cli.c	13 Feb 2004 14:29:32 -0000	1.15
  @@ -62,7 +62,8 @@
           vfprintf(stderr, str, ap);
           fprintf(stderr, "\n");
       }
  -    fprintf(stderr, "usage: uuid [-1] [-n count] [-a] [-d] [-o filename] [UUID]\n");
  +    fprintf(stderr, "usage: uuid [-v version] [-m] [-n count] [-1] [-r] [-o filename] [namespace-name]\n");
  +    fprintf(stderr, "usage: uuid -d [-r] [-o filename] [uuid]\n");
       va_end(ap);
       exit(1);
   }
  @@ -92,7 +93,7 @@
       raw = 0;        /* default is ASCII output */
       decode = 0;     /* default is to encode */
       version = UUID_MAKE_V1;
  -    while ((ch = getopt(argc, argv, "1n:rdmo:v:")) != -1) {
  +    while ((ch = getopt(argc, argv, "1n:rdmo:v:h")) != -1) {
           switch (ch) {
               case '1':
                   iterate = 1;
  @@ -131,6 +132,9 @@
                           usage("invalid version on option 'v'");
                           break;
                   }
  +                break;
  +            case 'h':
  +                usage(NULL);
                   break;
               default:
                   usage("invalid option '%c'", optopt);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.pod
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 uuid_cli.pod
  --- ossp-pkg/uuid/uuid_cli.pod	19 Jan 2004 14:11:50 -0000	1.13
  +++ ossp-pkg/uuid/uuid_cli.pod	13 Feb 2004 14:29:32 -0000	1.14
  @@ -52,7 +52,7 @@
   B<-d>
   [B<-r>]
   [B<-o> I<filename>]
  -[I<uuid>]
  +I<uuid>
   
   =head1 DESCRIPTION
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Feb 13 15:32:38 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4E8C5775B1; Fri, 13 Feb 2004 15:32:38 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid.pod
Message-Id: <20040213143238.4E8C5775B1@mail.ossp.org>
Date: Fri, 13 Feb 2004 15:32:38 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Feb-2004 15:32:38
  Branch: HEAD                             Handle: 2004021314323700

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid.pod

  Log:
    Replaced overlooked references to old
    uuid_{unpack,pack,parse,format,dump}() functions with their
    current uuid_{import,export}() replacements.
    
    Submitted by: <fuyuki@nigredo.org>

  Summary:
    Revision    Changes     Path
    1.39        +5  -0      ossp-pkg/uuid/ChangeLog
    1.13        +5  -4      ossp-pkg/uuid/uuid.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.38 -r1.39 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	13 Feb 2004 14:29:32 -0000	1.38
  +++ ossp-pkg/uuid/ChangeLog	13 Feb 2004 14:32:37 -0000	1.39
  @@ -13,6 +13,11 @@
   
     Changes between 0.9.5 and 0.9.6 (06-Feb-2004 to 13-Feb-2004)
   
  +   o Replaced overlooked references to old
  +     uuid_{unpack,pack,parse,format,dump}() functions with their
  +     current uuid_{import,export}() replacements.
  +     [Ralf S. Engelschall, <fuyuki@nigredo.org>]
  +
      o Fixed "uuid -h" command.
        [Ralf S. Engelschall, <fuyuki@nigredo.org>]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	19 Jan 2004 12:15:05 -0000	1.12
  +++ ossp-pkg/uuid/uuid.pod	13 Feb 2004 14:32:37 -0000	1.13
  @@ -75,8 +75,9 @@
   
   An example of a UUID binary representation is the octet stream "C<0xEC
   0xB9 0xF3 0x5F 0x44 0x2A 0x11 0xD8 0x8A 0x24 0x00 0x90 0x27 0x2F 0xF7
  -0x25>". The binary representation format is exactly what the B<OSSP uuid>
  -API functions B<uuid_pack>() and B<uuid_unpack>() deal with.
  +0x25>". The binary representation format is exactly what the B<OSSP
  +uuid> API functions B<uuid_import>() and B<uuid_export>() deal with
  +under C<UUID_FMT_BIN>.
   
   =head2 UUID ASCII String Representation
   
  @@ -104,8 +105,8 @@
   
   An example of a UUID string representation is the ASCII string
   "C<54531d28-402b-11d8-af12-0002a5094c23>". The string representation
  -format is exactly what the B<OSSP uuid> API functions B<uuid_parse>() and
  -B<uuid_format>() deal with.
  +format is exactly what the B<OSSP uuid> API functions B<uuid_import>()
  +and B<uuid_export>() deal with under C<UUID_FMT_STR>.
   
   =head2 UUID Variants and Versions
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Feb 13 16:13:15 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F2906775B1; Fri, 13 Feb 2004 16:13:14 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid.pod
Message-Id: <20040213151314.F2906775B1@mail.ossp.org>
Date: Fri, 13 Feb 2004 16:13:14 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Feb-2004 16:13:14
  Branch: HEAD                             Handle: 2004021315131400

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid.pod

  Log:
    Adjust references for new draft-mealling-uuid-urn-02.txt.

  Summary:
    Revision    Changes     Path
    1.40        +5  -2      ossp-pkg/uuid/ChangeLog
    1.14        +3  -3      ossp-pkg/uuid/uuid.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.39 -r1.40 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	13 Feb 2004 14:32:37 -0000	1.39
  +++ ossp-pkg/uuid/ChangeLog	13 Feb 2004 15:13:14 -0000	1.40
  @@ -13,13 +13,16 @@
   
     Changes between 0.9.5 and 0.9.6 (06-Feb-2004 to 13-Feb-2004)
   
  +   o Adjust references for new draft-mealling-uuid-urn-02.txt.
  +     [<fuyuki@nigredo.org>]
  +
      o Replaced overlooked references to old
        uuid_{unpack,pack,parse,format,dump}() functions with their
        current uuid_{import,export}() replacements.
  -     [Ralf S. Engelschall, <fuyuki@nigredo.org>]
  +     [<fuyuki@nigredo.org>]
   
      o Fixed "uuid -h" command.
  -     [Ralf S. Engelschall, <fuyuki@nigredo.org>]
  +     [<fuyuki@nigredo.org>]
   
      o Added an experimental additional DCE 1.1 API for backward
        compatibility with existing applications.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	13 Feb 2004 14:32:37 -0000	1.13
  +++ ossp-pkg/uuid/uuid.pod	13 Feb 2004 15:13:14 -0000	1.14
  @@ -394,9 +394,9 @@
   
   B<A UUID URN Namespace>,
   P. Leach, M. Mealling, R. Salz,
  -IETF Internet Draft draft-mealling-uuid-urn-01,
  -October 2003, 31 pages,
  -http://www.ietf.org/internet-drafts/draft-mealling-uuid-urn-01.txt
  +IETF Internet Draft draft-mealling-uuid-urn-02,
  +January 2004, 31 pages,
  +http://www.ietf.org/internet-drafts/draft-mealling-uuid-urn-02.txt
   
   =item
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Feb 13 17:01:25 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B3A88775B6; Fri, 13 Feb 2004 17:01:24 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid.pod
Message-Id: <20040213160124.B3A88775B6@mail.ossp.org>
Date: Fri, 13 Feb 2004 17:01:24 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Feb-2004 17:01:24
  Branch: HEAD                             Handle: 2004021316012300

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid.pod

  Log:
    Add missing documentation entries for UUID_XXXX API constants and
    uuid_version() function.
    
    Submitted by: <fuyuki@nigredo.org>

  Summary:
    Revision    Changes     Path
    1.41        +4  -0      ossp-pkg/uuid/ChangeLog
    1.15        +25 -6      ossp-pkg/uuid/uuid.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.40 -r1.41 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	13 Feb 2004 15:13:14 -0000	1.40
  +++ ossp-pkg/uuid/ChangeLog	13 Feb 2004 16:01:23 -0000	1.41
  @@ -12,6 +12,10 @@
     For a more brief summary please have a look at the NEWS file.
   
     Changes between 0.9.5 and 0.9.6 (06-Feb-2004 to 13-Feb-2004)
  +   
  +   o Add missing documentation entries for UUID_XXXX API constants and
  +     uuid_version() function.
  +     [<fuyuki@nigredo.org>]
   
      o Adjust references for new draft-mealling-uuid-urn-02.txt.
        [<fuyuki@nigredo.org>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	13 Feb 2004 15:13:14 -0000	1.14
  +++ ossp-pkg/uuid/uuid.pod	13 Feb 2004 16:01:23 -0000	1.15
  @@ -179,22 +179,35 @@
   
   =over 4
   
  +=item B<UUID_VERSION>
  +
  +The hexadecimal encoded B<OSSP uuid> version. This allows compile-time
  +checking of the B<OSSP uuid> version. For run-time checking use
  +B<uuid_version>() instead.
  +
  +The hexadecimal encoding for a version "$I<v>.$I<r>$I<t>$I<l>" is
  +calculated with the B<GNU shtool> B<version> command and is (in
  +Perl-style for concise description) "sprintf('0x%x%02x%d%02x', $I<v>,
  +$I<r>, {qw(s 9 . 2 b 1 a 0)}->{$I<t>}, ($I<t> eq 's' ? 99 : $I<l>))",
  +i.e., the version 0.9.6 is encoded as "0x009206".
  +
   =item B<UUID_LEN_BIN>, B<UUID_LEN_STR>
   
   The number of octets of the UUID binary and string representations.
   Notice that the lengths of the string representation does I<not> include
   the necessary C<NUL> termination character.
   
  -=item B<UUID_VERSION1>, B<UUID_VERSION3>, B<UUID_VERSION4>, B<UUID_MCASTRND>
  +=item B<UUID_MAKE_V1>, B<UUID_MAKE_V3>, B<UUID_MAKE_V4>, B<UUID_MAKE_MC>
   
  -The I<mode> bits for use with B<uuid_make>(). The
  -B<UUID_VERSION>I<N> specify which UUID version to generate. The
  -B<UUID_MCASTRND> forces the use of a random multi-cast MAC address
  -instead of the real physical MAC address in version 1 UUIDs.
  +The I<mode> bits for use with B<uuid_make>(). The B<UUID_MAKE_V>I<N>
  +specify which UUID version to generate. The B<UUID_MAKE_MC> forces the
  +use of a random multi-cast MAC address instead of the real physical MAC
  +address in version 1 UUIDs.
   
  -=item B<UUID_RC_OK>, B<UUID_RC_ARG>, B<UUID_RC_MEM>, B<UUID_RC_SYS>, B<UUID_RC_INT>
  +=item B<UUID_RC_OK>, B<UUID_RC_ARG>, B<UUID_RC_MEM>, B<UUID_RC_SYS>, B<UUID_RC_INT>, B<UUID_RC_IMP>
   
   The possible numerical return-codes of API functions.
  +The C<UUID_RC_OK> indicates success, the others indicate errors.
   Use B<uuid_error>() to translate them into string versions.
   
   =item B<UUID_FMT_BIN>, B<UUID_FMT_STR>, B<UUID_FMT_TXT>
  @@ -312,6 +325,12 @@
   
   Returns a constant string representation corresponding to the
   return-code I<rc> for use in displaying B<OSSP uuid> errors.
  +
  +=item unsigned long B<uuid_version>(void);
  +
  +Returns the hexadecimal encoded B<OSSP uuid> version as compiled into
  +the library object files. This allows run-time checking of the B<OSSP
  +uuid> version. For compile-time checking use C<UUID_VERSION> instead.
   
   =back
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Feb 13 17:17:08 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E7C8F775EE; Fri, 13 Feb 2004 17:17:07 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid_cli.c uuid_cli.pod
Message-Id: <20040213161707.E7C8F775EE@mail.ossp.org>
Date: Fri, 13 Feb 2004 17:17:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Feb-2004 17:17:07
  Branch: HEAD                             Handle: 2004021316170700

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid_cli.c uuid_cli.pod

  Log:
    Add support to uuid(1) CLI for decoding from stdin for
    both binary and string representations.

  Summary:
    Revision    Changes     Path
    1.42        +7  -1      ossp-pkg/uuid/ChangeLog
    1.16        +27 -6      ossp-pkg/uuid/uuid_cli.c
    1.15        +3  -2      ossp-pkg/uuid/uuid_cli.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.41 -r1.42 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	13 Feb 2004 16:01:23 -0000	1.41
  +++ ossp-pkg/uuid/ChangeLog	13 Feb 2004 16:17:07 -0000	1.42
  @@ -11,7 +11,11 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 0.9.5 and 0.9.6 (06-Feb-2004 to 13-Feb-2004)
  +  Changes between 0.9.6 and 0.9.7 (11-Feb-2004 to 13-Feb-2004)
  +
  +   o Add support to uuid(1) CLI for decoding from stdin for
  +     both binary and string representations.
  +     [Ralf S. Engelschall]
      
      o Add missing documentation entries for UUID_XXXX API constants and
        uuid_version() function.
  @@ -27,6 +31,8 @@
   
      o Fixed "uuid -h" command.
        [<fuyuki@nigredo.org>]
  +
  +  Changes between 0.9.5 and 0.9.6 (06-Feb-2004 to 11-Feb-2004)
   
      o Added an experimental additional DCE 1.1 API for backward
        compatibility with existing applications.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.c
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 uuid_cli.c
  --- ossp-pkg/uuid/uuid_cli.c	13 Feb 2004 14:29:32 -0000	1.15
  +++ ossp-pkg/uuid/uuid_cli.c	13 Feb 2004 16:17:07 -0000	1.16
  @@ -71,6 +71,8 @@
   /* main procedure */
   int main(int argc, char *argv[])
   {
  +    char uuid_buf_bin[UUID_LEN_BIN];
  +    char uuid_buf_str[UUID_LEN_STR+1];
       uuid_t *uuid;
       uuid_t *uuid_ns;
       uuid_rc_t rc;
  @@ -147,14 +149,33 @@
   
       if (decode) {
           /* decoding */
  -        if (argc != 1)
  -            usage("invalid number of arguments");
           if ((rc = uuid_create(&uuid)) != UUID_RC_OK)
               error(1, "uuid_create: %s", uuid_error(rc));
  -        if (strlen(argv[0]) != UUID_LEN_STR)
  -            error(1, "invalid length of UUID string representation");
  -        if ((rc = uuid_import(uuid, UUID_FMT_STR, argv[0], strlen(argv[0]))) != UUID_RC_OK)
  -            error(1, "uuid_import: %s", uuid_error(rc));
  +        if (argc != 1)
  +            usage("invalid number of arguments");
  +        if (strcmp(argv[0], "-") == 0) {
  +            if (raw) {
  +                if (fread(uuid_buf_bin, UUID_LEN_BIN, 1, stdin) != 1)
  +                    error(1, "fread: failed to read %d (UUID_LEN_BIN) bytes from stdin", UUID_LEN_BIN);
  +                if ((rc = uuid_import(uuid, UUID_FMT_BIN, uuid_buf_bin, UUID_LEN_BIN)) != UUID_RC_OK)
  +                    error(1, "uuid_import: %s", uuid_error(rc));
  +            }
  +            else {
  +                if (fread(uuid_buf_str, UUID_LEN_STR, 1, stdin) != 1)
  +                    error(1, "fread: failed to read %d (UUID_LEN_STR) bytes from stdin", UUID_LEN_STR);
  +                uuid_buf_str[UUID_LEN_STR] = '\0';
  +                if ((rc = uuid_import(uuid, UUID_FMT_STR, uuid_buf_str, UUID_LEN_STR)) != UUID_RC_OK)
  +                    error(1, "uuid_import: %s", uuid_error(rc));
  +            }
  +        }
  +        else {
  +            if (raw)
  +                error(1, "raw input mode only possible if reading from stdin");
  +            if (strlen(argv[0]) != UUID_LEN_STR)
  +                error(1, "invalid length of UUID string representation");
  +            if ((rc = uuid_import(uuid, UUID_FMT_STR, argv[0], strlen(argv[0]))) != UUID_RC_OK)
  +                error(1, "uuid_import: %s", uuid_error(rc));
  +        }
           vp = NULL;
           if ((rc = uuid_export(uuid, UUID_FMT_TXT, &vp, NULL)) != UUID_RC_OK)
               error(1, "uuid_export: %s", uuid_error(rc));
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.pod
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 uuid_cli.pod
  --- ossp-pkg/uuid/uuid_cli.pod	13 Feb 2004 14:29:32 -0000	1.14
  +++ ossp-pkg/uuid/uuid_cli.pod	13 Feb 2004 16:17:07 -0000	1.15
  @@ -121,8 +121,9 @@
   
   =item B<-d>
   
  -Decode a given UUID (either on F<stdin> or as an argument on the command
  -line) and dump textual information about the UUID.
  +Decode a given UUID (given as a command line argument or if the command
  +line argument is "C<->" the UUID is read from F<stdin>) and dump textual
  +information about the UUID.
   
   =back
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Feb 13 20:20:01 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 81ABA775EF; Fri, 13 Feb 2004 20:20:00 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ HISTORY
Message-Id: <20040213192000.81ABA775EF@mail.ossp.org>
Date: Fri, 13 Feb 2004 20:20:00 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Feb-2004 20:20:00
  Branch: HEAD                             Handle: 2004021319195900

  Added files:
    ossp-pkg/uuid           HISTORY

  Log:
    remember some snapshots for historical reasons

  Summary:
    Revision    Changes     Path
    1.1         +212 -0     ossp-pkg/uuid/HISTORY
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/HISTORY
  ============================================================================
  $ cvs diff -u -r0 -r1.1 HISTORY
  --- /dev/null	2004-02-13 20:19:59.000000000 +0100
  +++ HISTORY	2004-02-13 20:19:59.000000000 +0100
  @@ -0,0 +1,212 @@
  +   _        ___  ____ ____  ____                _     _
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _   _ _   _(_) __| |
  +  _|_||_| | | | \___ \___ \| |_) | | | | | | | | |/ _` |
  + |_||_|_| | |_| |___) |__) |  __/  | |_| | |_| | | (_| |
  +  |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
  +
  +  OSSP uuid - Universally Unique Identifier
  +
  +  HISTORY
  +
  +  During OSSP uuid we were totally puzzled by a subtle bug in the UUID
  +  standards related to the generation of multi-cast MAC addresses.
  +  This part of the history shows a very interesting technical bug,
  +  the unusual way of having to fix a standard (which was multiple
  +  times revised by different standard authorities, including the
  +  IETF, the OpenGroup and ISO/IEC) afterwards plus the fixing of six
  +  implementations into which the bug was inherited similarly. Below are
  +  some snapshot of this part of history: the first implementation fix
  +  (for FreeBSD) and the notification of the IETF standards authors.
  +
  +  ___________________________________________________________________________
  +
  +  Date: Fri, 13 Feb 2004 16:09:31 +0100
  +  From: "Ralf S. Engelschall" <rse@en1.engelschall.com>
  +  To: paulle@microsoft.com, michael@neonym.net, rsalz@datapower.com
  +  Subject: [PATCH] draft-mealling-uuid-urn-02.txt
  +  Message-ID: <20040213150931.GA7656@engelschall.com>
  +
  +  During implementation of OSSP uuid (a flexible CLI and C API for
  +  generation and partial decoding of version 1, 3 and 4 UUIDs, see
  +  http://www.ossp.org/pkg/lib/uuid/ for details), I discovered a nasty bug
  +  in the generation of random multicast MAC addresses. It is present in
  +  all standards and drafts (both expired ones and current ones) and was
  +  also inherited (until I fixed it by submitting patches to the authors
  +  recently) by all six freely available UUID implementations (Apache APR,
  +  FreeBSD uuidgen(2), Java JUG, Linux's libuuid from e2fsutil, Perl's
  +  Data::UUID and WINE's UUID generator)).
  +
  +  In case no real/physical IEEE 802 address is available, both the
  +  expired "draft-leach-uuids-guids-01" (section "4. Node IDs when no IEEE
  +  802 network card is available"), RFC 2518 (section "6.4.1 Node Field
  +  Generation Without the IEEE 802 Address") and now even your current
  +  "draft-mealling-uuid-urn-02.txt" (section "4.5 Node IDs that do not
  +  identify the host") recommend:
  +
  +      "A better solution is to obtain a 47-bit cryptographic quality
  +      random number, and use it as the low 47 bits of the node ID, with
  +      the _most_ significant bit of the first octet of the node ID set to
  +      one. This bit is the unicast/multicast bit, which will never be set
  +      in IEEE 802 addresses obtained from network cards; hence, there can
  +      never be a conflict between UUIDs generated by machines with and
  +      without network cards."
  +
  +  Unfortunately, this incorrectly explains how to implement this and even
  +  the example implementation (draft-mealling-uuid-urn-02.txt, "Appendix
  +  A. Appendix A - Sample Implementation") inherited this. Correct is
  +  "the _least_ significant bit of the first octet of the node ID" as the
  +  multicast bit in a memory and hexadecimal string representation of a
  +  48-bit IEEE 802 MAC address.
  +
  +  This standards bug arised from a false interpretation, as the multicast
  +  bit is actually the _most_ significant bit in IEEE 802.3 (Ethernet)
  +  _transmission order_ of an IEEE 802 MAC address. But you forgot that the
  +  bitwise order of an _octet_ from a MAC address _memory_ and hexadecimal
  +  string representation is still always from left (MSB, bit 7) to right
  +  (LSB, bit 0). And the standard deals with memory representations only,
  +  so the transmission order of a MAC doesnt' matter here.
  +
  +  As mentioned, OSSP uuid already implements this correctly. The FreeBSD
  +  uuidgen(2) and Apache APR generators I've also fixed myself recently in
  +  CVS. And for the remaining implementations I've submitted patches to the
  +  authors and they all (except for WINE) responded that they took over the
  +  patch. So the results of this long-standing bug we were able to fix --
  +  at least for the free software world ;-). What is now remaining is that
  +  you finally also should fix this in your standard so the bug does not
  +  spread any longer into other implementations.
  +
  +  Here is the minimal required patch against your draft:
  +
  +  --- draft-mealling-uuid-urn-02.txt.orig	Mon Feb  2 21:50:35 2004
  +  +++ draft-mealling-uuid-urn-02.txt	Fri Feb 13 15:41:49 2004
  +  @@ -751,7 +751,7 @@
  +      [6], and the cost was US$550.
  +
  +      A better solution is to obtain a 47-bit cryptographic quality random
  +  -   number, and use it as the low 47 bits of the node ID, with the most
  +  +   number, and use it as the low 47 bits of the node ID, with the least
  +      significant bit of the first octet of the node ID set to one. This
  +      bit is the unicast/multicast bit, which will never be set in IEEE 802
  +      addresses obtained from network cards; hence, there can never be a
  +  @@ -1369,7 +1369,7 @@
  +              }
  +              else {
  +                  get_random_info(seed);
  +  -               seed[0] |= 0x80;
  +  +               seed[0] |= 0x01;
  +                  memcpy(&saved_node, seed, sizeof saved_node);
  +                  fp = fopen("nodeid", "wb");
  +                  if (fp) {
  +
  +  But I recommend you to perhaps also add one or two sentences which
  +  explain what I explained above (the difference between memory and
  +  transmission order), just to make sure people are not confused in the
  +  other direction and then think there is a bug (in the then fixed and
  +  correct) standard, because they know about the transmission order of MAC
  +  addresses.
  +
  +  Yours,
  +                                         Ralf S. Engelschall
  +                                         rse@engelschall.com
  +                                         www.engelschall.com
  +
  +  Date: Fri, 13 Feb 2004 11:05:51 -0500
  +  From: Rich Salz <rsalz@datapower.com>
  +  To: rse@engelschall.com
  +  Cc: paulle@microsoft.com, michael@neonym.net
  +  Message-ID: <402CF5DF.4020601@datapower.com>
  +  Subject: Re: [PATCH] draft-mealling-uuid-urn-02.txt
  +  References: <20040213150931.GA7656@engelschall.com>
  +  Content-Length: 431
  +  Lines: 11
  +
  +  Thanks for writing, Ralf.
  +
  +  You're correct, and this has been noted by the IESG and will be fixed in 
  +  the next draft.  It's unfortunate we made it this far with the bug.
  +
  +      /r$
  +  -- 
  +  Rich Salz, Chief Security Architect
  +  DataPower Technology                           http://www.datapower.com
  +  XS40 XML Security Gateway   http://www.datapower.com/products/xs40.html
  +  XML Security Overview  http://www.datapower.com/xmldev/xmlsecurity.html
  +
  +  Date: Thu, 22 Jan 2004 05:34:11 -0800 (PST)
  +  From: "Ralf S. Engelschall" <rse@FreeBSD.org>
  +  Message-Id: <200401221334.i0MDYB1K018137@repoman.freebsd.org>
  +  To: src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org
  +  Subject: cvs commit: src/sys/kern kern_uuid.c
  +  X-FreeBSD-CVS-Branch: HEAD
  +  X-Loop: FreeBSD.ORG
  +  Content-Length: 1907
  +  Lines: 42
  +
  +  rse         2004/01/22 05:34:11 PST
  +
  +    FreeBSD src repository
  +
  +    Modified files:
  +      sys/kern             kern_uuid.c 
  +    Log:
  +    Fix generation of random multicast MAC address.
  +    
  +    In case no real/physical IEEE 802 address is available, both the expired
  +    "draft-leach-uuids-guids-01" (section "4. Node IDs when no IEEE 802
  +    network card is available") and RFC 2518 (section "6.4.1 Node Field
  +    Generation Without the IEEE 802 Address") recommend (quoted from RFC
  +    2518):
  +    
  +      "The ideal solution is to obtain a 47 bit cryptographic quality random
  +      number, and use it as the low 47 bits of the node ID, with the _most_
  +      significant bit of the first octet of the node ID set to 1. This bit
  +      is the unicast/multicast bit, which will never be set in IEEE 802
  +      addresses obtained from network cards; hence, there can never be a
  +      conflict between UUIDs generated by machines with and without network
  +      cards."
  +    
  +    Unfortunately, this incorrectly explains how to implement this and
  +    the FreeBSD UUID generator code inherited this generation bug from
  +    the broken reference code in the standards draft. They should instead
  +    specify the "_least_ significant bit of the first octet of the node ID"
  +    as the multicast bit in a memory and hexadecimal string representation
  +    of a 48-bit IEEE 802 MAC address.
  +    
  +    This standards bug arised from a false interpretation, as the multicast
  +    bit is actually the _most_ significant bit in IEEE 802.3 (Ethernet)
  +    _transmission order_ of an IEEE 802 MAC address. The standards authors
  +    forgot that the bitwise order of an _octet_ from a MAC address _memory_
  +    and hexadecimal string representation is still always from left (MSB,
  +    bit 7) to right (LSB, bit 0).
  +    
  +    Fortunately, this UUID generation bug could have occurred on systems
  +    without any Ethernet NICs only.
  +    
  +    Revision  Changes    Path
  +    1.7       +1 -1      src/sys/kern/kern_uuid.c
  +
  +  Date: Thu, 22 Jan 2004 15:20:22 -0800
  +  From: Marcel Moolenaar <marcel@xcllnt.net>
  +  To: "Ralf S. Engelschall" <rse@FreeBSD.org>
  +  Cc: src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org
  +  Subject: Re: cvs commit: src/sys/kern kern_uuid.c
  +  Message-ID: <20040122232022.GA77798@ns1.xcllnt.net>
  +  References: <200401221334.i0MDYB1K018137@repoman.freebsd.org>
  +  Content-Length: 380
  +  Lines: 14
  +
  +  On Thu, Jan 22, 2004 at 05:34:11AM -0800, Ralf S. Engelschall wrote:
  +  > rse         2004/01/22 05:34:11 PST
  +  > 
  +  >   FreeBSD src repository
  +  > 
  +  >   Modified files:
  +  >     sys/kern             kern_uuid.c 
  +  >   Log:
  +  >   Fix generation of random multicast MAC address.
  +
  +  An excellent catch and an outstanding commit log. Chapeau!
  +
  +  -- 
  +   Marcel Moolenaar	  USPA: A-39004		 marcel@xcllnt.net
  +
  @@ .

From ossp-cvs-owner@ossp.org  Fri Feb 13 22:01:47 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 43BA6775EF; Fri, 13 Feb 2004 22:01:44 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid.ac uuid.c
Message-Id: <20040213210144.43BA6775EF@mail.ossp.org>
Date: Fri, 13 Feb 2004 22:01:44 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Feb-2004 22:01:44
  Branch: HEAD                             Handle: 2004021321014100

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid.ac uuid.c

  Log:
    remove --with-rfc2518 option and functionality because
    even the IETF/IESG has finally approved our report about the broken
    random multicast MAC address generation in the standard (and
    will fix it in new versions of the draft-mealling-uuid-urn). So,
    finally get rid of this broken-by-design backward compatibility

  Summary:
    Revision    Changes     Path
    1.43        +8  -0      ossp-pkg/uuid/ChangeLog
    1.11        +0  -6      ossp-pkg/uuid/uuid.ac
    1.45        +7  -67     ossp-pkg/uuid/uuid.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.42 -r1.43 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	13 Feb 2004 16:17:07 -0000	1.42
  +++ ossp-pkg/uuid/ChangeLog	13 Feb 2004 21:01:41 -0000	1.43
  @@ -13,6 +13,14 @@
   
     Changes between 0.9.6 and 0.9.7 (11-Feb-2004 to 13-Feb-2004)
   
  +   o remove --with-rfc2518 option and functionality because
  +     even the IETF/IESG has finally approved our report about the broken
  +     random multicast MAC address generation in the standard (and
  +     will fix it in new versions of the draft-mealling-uuid-urn). So,
  +     finally get rid of this broken-by-design backward compatibility
  +     functionality.
  +     [Ralf S. Engelschall]
  +
      o Add support to uuid(1) CLI for decoding from stdin for
        both binary and string representations.
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.ac
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 uuid.ac
  --- ossp-pkg/uuid/uuid.ac	11 Feb 2004 14:38:40 -0000	1.10
  +++ ossp-pkg/uuid/uuid.ac	13 Feb 2004 21:01:41 -0000	1.11
  @@ -71,12 +71,6 @@
       AC_CHECK_SIZEOF(unsigned long long, 8)
   
       dnl #   options
  -    AC_ARG_WITH(rfc2518,
  -        AC_HELP_STRING([--with-rfc2518], [use incorrect generation of IEEE 802 multicast addresses according to RFC2518]),
  -        [ac_cv_with_rfc2518=$withval], [ac_cv_with_rfc2518=no])
  -    if test ".$ac_cv_with_rfc2518" = ".yes"; then
  -        AC_DEFINE(WITH_RFC2518, 1, [whether to use incorrect generation of IEEE 802 multicast addresses according to RFC2518])
  -    fi
       AC_ARG_WITH(dce,
           AC_HELP_STRING([--with-dce], [build DCE 1.1 backward compatibility API]),
           [ac_cv_with_dce=$withval], [ac_cv_with_dce=no])
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.44 -r1.45 uuid.c
  --- ossp-pkg/uuid/uuid.c	19 Jan 2004 14:56:35 -0000	1.44
  +++ ossp-pkg/uuid/uuid.c	13 Feb 2004 21:01:41 -0000	1.45
  @@ -61,69 +61,9 @@
       Unix UTC base time is January  1, 1970) */
   #define UUID_TIMEOFFSET "01B21DD213814000"
   
  -/* IEEE 802 MAC address encoding/decoding bit fields
  -
  -   ATTENTION:
  -
  -   In case no real/physical IEEE 802 address is available, both
  -   "draft-leach-uuids-guids-01" (section "4. Node IDs when no IEEE 802
  -   network card is available") and RFC 2518 (section "6.4.1 Node Field
  -   Generation Without the IEEE 802 Address") recommend (quoted from RFC
  -   2518):
  -
  -     "The ideal solution is to obtain a 47 bit cryptographic quality
  -     random number, and use it as the low 47 bits of the node ID, with
  -     the most significant bit of the first octet of the node ID set to
  -     1. This bit is the unicast/multicast bit, which will never be set
  -     in IEEE 802 addresses obtained from network cards; hence, there can
  -     never be a conflict between UUIDs generated by machines with and
  -     without network cards."
  -
  -   This passage clearly explains the intention to use IEEE 802 multicast
  -   addresses. Unfortunately, it incorrectly explains how to implement
  -   this! It should instead specify the "*LEAST* significant bit of the
  -   first octet of the node ID" as the multicast bit in a memory and
  -   hexadecimal string representation of a 48-bit IEEE 802 MAC address.
  -
  -   Unfortunately, even the reference implementation included in the
  -   expired IETF "draft-leach-uuids-guids-01" incorrectly set the
  -   multicast bit with an OR bit operation and an incorrect mask of
  -   0x80. Hence, several other UUID implementations found on the
  -   Internet have inherited this bug.
  -
  -   Luckily, neither DCE 1.1 nor ISO/IEC 11578:1996 are affected by this
  -   problem. They disregard the topic of missing IEEE 802 addresses
  -   entirely, and thus avoid adopting this bug from the original draft
  -   and code ;-)
  -
  -   It seems that this standards bug arises from a false interpretation,
  -   as the multicast bit is actually the *MOST* significant bit in IEEE
  -   802.3 (Ethernet) _transmission order_ of an IEEE 802 MAC address. The
  -   authors were likely not aware that the bitwise order of an octet from
  -   a MAC address memory and hexadecimal string representation is still
  -   always from left (MSB, bit 7) to right (LSB, bit 0).
  -
  -   For more information, see "Understanding Physical Addresses" in
  -   "Ethernet -- The Definitive Guide", p.43, and the section "ETHERNET
  -   MULTICAST ADDRESSES" in http://www.iana.org/assignments/ethernet-numbers.
  -
  -   At OSSP, we do it the intended/correct way and generate a real
  -   IEEE 802 multicast address. Those wanting to encode broken IEEE
  -   802 MAC addresses (as specified) can nevertheless use a brain dead
  -   compile-time option to switch off the correct behavior. When decoding
  -   we always use the correct behavior of course. */
  -
  -/* encoding */
  -#ifdef WITH_RFC2518
  -#define IEEE_MAC_MCBIT_ENC BM_OCTET(1,0,0,0,0,0,0,0)
  -#else
  -#define IEEE_MAC_MCBIT_ENC BM_OCTET(0,0,0,0,0,0,0,1)
  -#endif
  -#define IEEE_MAC_LOBIT_ENC BM_OCTET(0,0,0,0,0,0,1,0)
  -
  -/* decoding */
  -#define IEEE_MAC_MCBIT_DEC BM_OCTET(0,0,0,0,0,0,0,1)
  -#define IEEE_MAC_LOBIT_DEC BM_OCTET(0,0,0,0,0,0,1,0)
  +/* IEEE 802 MAC address encoding/decoding bit fields */
  +#define IEEE_MAC_MCBIT BM_OCTET(0,0,0,0,0,0,0,1)
  +#define IEEE_MAC_LOBIT BM_OCTET(0,0,0,0,0,0,1,0)
   
   /* IEEE 802 MAC address octet length */
   #define IEEE_MAC_OCTETS 6
  @@ -622,8 +562,8 @@
               (unsigned int)uuid->obj.node[3],
               (unsigned int)uuid->obj.node[4],
               (unsigned int)uuid->obj.node[5],
  -            (uuid->obj.node[0] & IEEE_MAC_LOBIT_DEC ? "local" : "global"),
  -            (uuid->obj.node[0] & IEEE_MAC_MCBIT_DEC ? "multicast" : "unicast"));
  +            (uuid->obj.node[0] & IEEE_MAC_LOBIT ? "local" : "global"),
  +            (uuid->obj.node[0] & IEEE_MAC_MCBIT ? "multicast" : "unicast"));
       }
       else {
           /* decode anything else as hexadecimal byte-string only */
  @@ -843,8 +783,8 @@
       if ((mode & UUID_MAKE_MC) || (uuid->mac[0] & BM_OCTET(1,0,0,0,0,0,0,0))) {
           /* generate random IEEE 802 local multicast MAC address */
           prng_data(uuid->prng, (void *)&(uuid->obj.node), sizeof(uuid->obj.node));
  -        uuid->obj.node[0] |= IEEE_MAC_MCBIT_ENC;
  -        uuid->obj.node[0] |= IEEE_MAC_LOBIT_ENC;
  +        uuid->obj.node[0] |= IEEE_MAC_MCBIT;
  +        uuid->obj.node[0] |= IEEE_MAC_LOBIT;
       }
       else {
           /* use real regular MAC address */
  @@ .

From ossp-cvs-owner@ossp.org  Fri Feb 13 22:03:19 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C0176775EF; Fri, 13 Feb 2004 22:03:18 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ HISTORY
Message-Id: <20040213210318.C0176775EF@mail.ossp.org>
Date: Fri, 13 Feb 2004 22:03:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Feb-2004 22:03:18
  Branch: HEAD                             Handle: 2004021321031800

  Modified files:
    ossp-pkg/uuid           HISTORY

  Log:
    remember old functionality for historical reasons

  Summary:
    Revision    Changes     Path
    1.2         +146 -0     ossp-pkg/uuid/HISTORY
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/HISTORY
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 HISTORY
  --- ossp-pkg/uuid/HISTORY	13 Feb 2004 19:19:59 -0000	1.1
  +++ ossp-pkg/uuid/HISTORY	13 Feb 2004 21:03:18 -0000	1.2
  @@ -210,3 +210,149 @@
     -- 
      Marcel Moolenaar	  USPA: A-39004		 marcel@xcllnt.net
   
  +  ___________________________________________________________________________
  +
  +  Index: ChangeLog
  +  ===================================================================
  +  RCS file: /e/ossp/cvs/ossp-pkg/uuid/ChangeLog,v
  +  retrieving revision 1.42
  +  diff -u -d -r1.42 ChangeLog
  +  --- ChangeLog	13 Feb 2004 16:17:07 -0000	1.42
  +  +++ ChangeLog	13 Feb 2004 21:01:07 -0000
  +  @@ -13,6 +13,14 @@
  +   
  +     Changes between 0.9.6 and 0.9.7 (11-Feb-2004 to 13-Feb-2004)
  +   
  +  +   o remove --with-rfc2518 option and functionality because
  +  +     even the IETF/IESG has finally approved our report about the broken
  +  +     random multicast MAC address generation in the standard (and
  +  +     will fix it in new versions of the draft-mealling-uuid-urn). So,
  +  +     finally get rid of this broken-by-design backward compatibility
  +  +     functionality.
  +  +     [Ralf S. Engelschall]
  +  +
  +      o Add support to uuid(1) CLI for decoding from stdin for
  +        both binary and string representations.
  +        [Ralf S. Engelschall]
  +  Index: uuid.ac
  +  ===================================================================
  +  RCS file: /e/ossp/cvs/ossp-pkg/uuid/uuid.ac,v
  +  retrieving revision 1.10
  +  diff -u -d -r1.10 uuid.ac
  +  --- uuid.ac	11 Feb 2004 14:38:40 -0000	1.10
  +  +++ uuid.ac	13 Feb 2004 19:20:32 -0000
  +  @@ -71,12 +71,6 @@
  +       AC_CHECK_SIZEOF(unsigned long long, 8)
  +   
  +       dnl #   options
  +  -    AC_ARG_WITH(rfc2518,
  +  -        AC_HELP_STRING([--with-rfc2518], [use incorrect generation of IEEE 802 multicast addresses according to RFC2518]),
  +  -        [ac_cv_with_rfc2518=$withval], [ac_cv_with_rfc2518=no])
  +  -    if test ".$ac_cv_with_rfc2518" = ".yes"; then
  +  -        AC_DEFINE(WITH_RFC2518, 1, [whether to use incorrect generation of IEEE 802 multicast addresses according to RFC2518])
  +  -    fi
  +       AC_ARG_WITH(dce,
  +           AC_HELP_STRING([--with-dce], [build DCE 1.1 backward compatibility API]),
  +           [ac_cv_with_dce=$withval], [ac_cv_with_dce=no])
  +  Index: uuid.c
  +  ===================================================================
  +  RCS file: /e/ossp/cvs/ossp-pkg/uuid/uuid.c,v
  +  retrieving revision 1.44
  +  diff -u -d -r1.44 uuid.c
  +  --- uuid.c	19 Jan 2004 14:56:35 -0000	1.44
  +  +++ uuid.c	13 Feb 2004 19:22:01 -0000
  +  @@ -61,69 +61,9 @@
  +       Unix UTC base time is January  1, 1970) */
  +   #define UUID_TIMEOFFSET "01B21DD213814000"
  +   
  +  -/* IEEE 802 MAC address encoding/decoding bit fields
  +  -
  +  -   ATTENTION:
  +  -
  +  -   In case no real/physical IEEE 802 address is available, both
  +  -   "draft-leach-uuids-guids-01" (section "4. Node IDs when no IEEE 802
  +  -   network card is available") and RFC 2518 (section "6.4.1 Node Field
  +  -   Generation Without the IEEE 802 Address") recommend (quoted from RFC
  +  -   2518):
  +  -
  +  -     "The ideal solution is to obtain a 47 bit cryptographic quality
  +  -     random number, and use it as the low 47 bits of the node ID, with
  +  -     the most significant bit of the first octet of the node ID set to
  +  -     1. This bit is the unicast/multicast bit, which will never be set
  +  -     in IEEE 802 addresses obtained from network cards; hence, there can
  +  -     never be a conflict between UUIDs generated by machines with and
  +  -     without network cards."
  +  -
  +  -   This passage clearly explains the intention to use IEEE 802 multicast
  +  -   addresses. Unfortunately, it incorrectly explains how to implement
  +  -   this! It should instead specify the "*LEAST* significant bit of the
  +  -   first octet of the node ID" as the multicast bit in a memory and
  +  -   hexadecimal string representation of a 48-bit IEEE 802 MAC address.
  +  -
  +  -   Unfortunately, even the reference implementation included in the
  +  -   expired IETF "draft-leach-uuids-guids-01" incorrectly set the
  +  -   multicast bit with an OR bit operation and an incorrect mask of
  +  -   0x80. Hence, several other UUID implementations found on the
  +  -   Internet have inherited this bug.
  +  -
  +  -   Luckily, neither DCE 1.1 nor ISO/IEC 11578:1996 are affected by this
  +  -   problem. They disregard the topic of missing IEEE 802 addresses
  +  -   entirely, and thus avoid adopting this bug from the original draft
  +  -   and code ;-)
  +  -
  +  -   It seems that this standards bug arises from a false interpretation,
  +  -   as the multicast bit is actually the *MOST* significant bit in IEEE
  +  -   802.3 (Ethernet) _transmission order_ of an IEEE 802 MAC address. The
  +  -   authors were likely not aware that the bitwise order of an octet from
  +  -   a MAC address memory and hexadecimal string representation is still
  +  -   always from left (MSB, bit 7) to right (LSB, bit 0).
  +  -
  +  -   For more information, see "Understanding Physical Addresses" in
  +  -   "Ethernet -- The Definitive Guide", p.43, and the section "ETHERNET
  +  -   MULTICAST ADDRESSES" in http://www.iana.org/assignments/ethernet-numbers.
  +  -
  +  -   At OSSP, we do it the intended/correct way and generate a real
  +  -   IEEE 802 multicast address. Those wanting to encode broken IEEE
  +  -   802 MAC addresses (as specified) can nevertheless use a brain dead
  +  -   compile-time option to switch off the correct behavior. When decoding
  +  -   we always use the correct behavior of course. */
  +  -
  +  -/* encoding */
  +  -#ifdef WITH_RFC2518
  +  -#define IEEE_MAC_MCBIT_ENC BM_OCTET(1,0,0,0,0,0,0,0)
  +  -#else
  +  -#define IEEE_MAC_MCBIT_ENC BM_OCTET(0,0,0,0,0,0,0,1)
  +  -#endif
  +  -#define IEEE_MAC_LOBIT_ENC BM_OCTET(0,0,0,0,0,0,1,0)
  +  -
  +  -/* decoding */
  +  -#define IEEE_MAC_MCBIT_DEC BM_OCTET(0,0,0,0,0,0,0,1)
  +  -#define IEEE_MAC_LOBIT_DEC BM_OCTET(0,0,0,0,0,0,1,0)
  +  +/* IEEE 802 MAC address encoding/decoding bit fields */
  +  +#define IEEE_MAC_MCBIT BM_OCTET(0,0,0,0,0,0,0,1)
  +  +#define IEEE_MAC_LOBIT BM_OCTET(0,0,0,0,0,0,1,0)
  +   
  +   /* IEEE 802 MAC address octet length */
  +   #define IEEE_MAC_OCTETS 6
  +  @@ -622,8 +562,8 @@
  +               (unsigned int)uuid->obj.node[3],
  +               (unsigned int)uuid->obj.node[4],
  +               (unsigned int)uuid->obj.node[5],
  +  -            (uuid->obj.node[0] & IEEE_MAC_LOBIT_DEC ? "local" : "global"),
  +  -            (uuid->obj.node[0] & IEEE_MAC_MCBIT_DEC ? "multicast" : "unicast"));
  +  +            (uuid->obj.node[0] & IEEE_MAC_LOBIT ? "local" : "global"),
  +  +            (uuid->obj.node[0] & IEEE_MAC_MCBIT ? "multicast" : "unicast"));
  +       }
  +       else {
  +           /* decode anything else as hexadecimal byte-string only */
  +  @@ -843,8 +783,8 @@
  +       if ((mode & UUID_MAKE_MC) || (uuid->mac[0] & BM_OCTET(1,0,0,0,0,0,0,0))) {
  +           /* generate random IEEE 802 local multicast MAC address */
  +           prng_data(uuid->prng, (void *)&(uuid->obj.node), sizeof(uuid->obj.node));
  +  -        uuid->obj.node[0] |= IEEE_MAC_MCBIT_ENC;
  +  -        uuid->obj.node[0] |= IEEE_MAC_LOBIT_ENC;
  +  +        uuid->obj.node[0] |= IEEE_MAC_MCBIT;
  +  +        uuid->obj.node[0] |= IEEE_MAC_LOBIT;
  +       }
  +       else {
  +           /* use real regular MAC address */
  @@ .

From ossp-cvs-owner@ossp.org  Fri Feb 13 22:08:18 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C3143775EF; Fri, 13 Feb 2004 22:08:17 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog HISTORY
Message-Id: <20040213210817.C3143775EF@mail.ossp.org>
Date: Fri, 13 Feb 2004 22:08:17 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Feb-2004 22:08:17
  Branch: HEAD                             Handle: 2004021321081700

  Modified files:
    ossp-pkg/uuid           ChangeLog HISTORY

  Log:
    remove trailing whitespaces

  Summary:
    Revision    Changes     Path
    1.44        +1  -1      ossp-pkg/uuid/ChangeLog
    1.3         +18 -18     ossp-pkg/uuid/HISTORY
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.43 -r1.44 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	13 Feb 2004 21:01:41 -0000	1.43
  +++ ossp-pkg/uuid/ChangeLog	13 Feb 2004 21:08:17 -0000	1.44
  @@ -24,7 +24,7 @@
      o Add support to uuid(1) CLI for decoding from stdin for
        both binary and string representations.
        [Ralf S. Engelschall]
  -   
  +
      o Add missing documentation entries for UUID_XXXX API constants and
        uuid_version() function.
        [<fuyuki@nigredo.org>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/HISTORY
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 HISTORY
  --- ossp-pkg/uuid/HISTORY	13 Feb 2004 21:03:18 -0000	1.2
  +++ ossp-pkg/uuid/HISTORY	13 Feb 2004 21:08:17 -0000	1.3
  @@ -122,11 +122,11 @@
   
     Thanks for writing, Ralf.
   
  -  You're correct, and this has been noted by the IESG and will be fixed in 
  +  You're correct, and this has been noted by the IESG and will be fixed in
     the next draft.  It's unfortunate we made it this far with the bug.
   
         /r$
  -  -- 
  +  --
     Rich Salz, Chief Security Architect
     DataPower Technology                           http://www.datapower.com
     XS40 XML Security Gateway   http://www.datapower.com/products/xs40.html
  @@ -147,16 +147,16 @@
       FreeBSD src repository
   
       Modified files:
  -      sys/kern             kern_uuid.c 
  +      sys/kern             kern_uuid.c
       Log:
       Fix generation of random multicast MAC address.
  -    
  +
       In case no real/physical IEEE 802 address is available, both the expired
       "draft-leach-uuids-guids-01" (section "4. Node IDs when no IEEE 802
       network card is available") and RFC 2518 (section "6.4.1 Node Field
       Generation Without the IEEE 802 Address") recommend (quoted from RFC
       2518):
  -    
  +
         "The ideal solution is to obtain a 47 bit cryptographic quality random
         number, and use it as the low 47 bits of the node ID, with the _most_
         significant bit of the first octet of the node ID set to 1. This bit
  @@ -164,24 +164,24 @@
         addresses obtained from network cards; hence, there can never be a
         conflict between UUIDs generated by machines with and without network
         cards."
  -    
  +
       Unfortunately, this incorrectly explains how to implement this and
       the FreeBSD UUID generator code inherited this generation bug from
       the broken reference code in the standards draft. They should instead
       specify the "_least_ significant bit of the first octet of the node ID"
       as the multicast bit in a memory and hexadecimal string representation
       of a 48-bit IEEE 802 MAC address.
  -    
  +
       This standards bug arised from a false interpretation, as the multicast
       bit is actually the _most_ significant bit in IEEE 802.3 (Ethernet)
       _transmission order_ of an IEEE 802 MAC address. The standards authors
       forgot that the bitwise order of an _octet_ from a MAC address _memory_
       and hexadecimal string representation is still always from left (MSB,
       bit 7) to right (LSB, bit 0).
  -    
  +
       Fortunately, this UUID generation bug could have occurred on systems
       without any Ethernet NICs only.
  -    
  +
       Revision  Changes    Path
       1.7       +1 -1      src/sys/kern/kern_uuid.c
   
  @@ -197,17 +197,17 @@
   
     On Thu, Jan 22, 2004 at 05:34:11AM -0800, Ralf S. Engelschall wrote:
     > rse         2004/01/22 05:34:11 PST
  -  > 
  +  >
     >   FreeBSD src repository
  -  > 
  +  >
     >   Modified files:
  -  >     sys/kern             kern_uuid.c 
  +  >     sys/kern             kern_uuid.c
     >   Log:
     >   Fix generation of random multicast MAC address.
   
     An excellent catch and an outstanding commit log. Chapeau!
   
  -  -- 
  +  --
      Marcel Moolenaar	  USPA: A-39004		 marcel@xcllnt.net
   
     ___________________________________________________________________________
  @@ -220,9 +220,9 @@
     --- ChangeLog	13 Feb 2004 16:17:07 -0000	1.42
     +++ ChangeLog	13 Feb 2004 21:01:07 -0000
     @@ -13,6 +13,14 @@
  -   
  +
        Changes between 0.9.6 and 0.9.7 (11-Feb-2004 to 13-Feb-2004)
  -   
  +
     +   o remove --with-rfc2518 option and functionality because
     +     even the IETF/IESG has finally approved our report about the broken
     +     random multicast MAC address generation in the standard (and
  @@ -243,7 +243,7 @@
     +++ uuid.ac	13 Feb 2004 19:20:32 -0000
     @@ -71,12 +71,6 @@
          AC_CHECK_SIZEOF(unsigned long long, 8)
  -   
  +
          dnl #   options
     -    AC_ARG_WITH(rfc2518,
     -        AC_HELP_STRING([--with-rfc2518], [use incorrect generation of IEEE 802 multicast addresses according to RFC2518]),
  @@ -264,7 +264,7 @@
     @@ -61,69 +61,9 @@
          Unix UTC base time is January  1, 1970) */
      #define UUID_TIMEOFFSET "01B21DD213814000"
  -   
  +
     -/* IEEE 802 MAC address encoding/decoding bit fields
     -
     -   ATTENTION:
  @@ -331,7 +331,7 @@
     +/* IEEE 802 MAC address encoding/decoding bit fields */
     +#define IEEE_MAC_MCBIT BM_OCTET(0,0,0,0,0,0,0,1)
     +#define IEEE_MAC_LOBIT BM_OCTET(0,0,0,0,0,0,1,0)
  -   
  +
      /* IEEE 802 MAC address octet length */
      #define IEEE_MAC_OCTETS 6
     @@ -622,8 +562,8 @@
  @@ .

From ossp-cvs-owner@ossp.org  Fri Feb 13 22:09:29 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A7A6E775EF; Fri, 13 Feb 2004 22:09:28 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ README uuid_vers.h
Message-Id: <20040213210928.A7A6E775EF@mail.ossp.org>
Date: Fri, 13 Feb 2004 22:09:28 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Feb-2004 22:09:28
  Branch: HEAD                             Handle: 2004021321092800

  Modified files:
    ossp-pkg/uuid           README uuid_vers.h

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.14        +1  -1      ossp-pkg/uuid/README
    1.5         +9  -9      ossp-pkg/uuid/uuid_vers.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 README
  --- ossp-pkg/uuid/README	11 Feb 2004 14:40:45 -0000	1.13
  +++ ossp-pkg/uuid/README	13 Feb 2004 21:09:28 -0000	1.14
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
   
     OSSP uuid - Universally Unique Identifier
  -  Version 0.9.6 (11-Feb-2004)
  +  Version 0.9.7 (13-Feb-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_vers.h
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 uuid_vers.h
  --- ossp-pkg/uuid/uuid_vers.h	11 Feb 2004 14:40:45 -0000	1.4
  +++ ossp-pkg/uuid/uuid_vers.h	13 Feb 2004 21:09:28 -0000	1.5
  @@ -8,7 +8,7 @@
   #ifndef _UUID_VERS_H_
   #define _UUID_VERS_H_
   
  -#define _UUID_VERSION 0x009206
  +#define _UUID_VERSION 0x009207
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _UUID_VERS_H_AS_HEADER_
   
   _uuid_version_t _uuid_version = {
  -    0x009206,
  -    "0.9.6",
  -    "0.9.6 (11-Feb-2004)",
  -    "This is OSSP uuid, Version 0.9.6 (11-Feb-2004)",
  -    "OSSP uuid 0.9.6 (11-Feb-2004)",
  -    "OSSP uuid/0.9.6",
  -    "@(#)OSSP uuid 0.9.6 (11-Feb-2004)",
  -    "$Id: OSSP uuid 0.9.6 (11-Feb-2004) $"
  +    0x009207,
  +    "0.9.7",
  +    "0.9.7 (13-Feb-2004)",
  +    "This is OSSP uuid, Version 0.9.7 (13-Feb-2004)",
  +    "OSSP uuid 0.9.7 (13-Feb-2004)",
  +    "OSSP uuid/0.9.7",
  +    "@(#)OSSP uuid 0.9.7 (13-Feb-2004)",
  +    "$Id: OSSP uuid 0.9.7 (13-Feb-2004) $"
   };
   
   #endif /* _UUID_VERS_H_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Fri Feb 13 22:10:37 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 97C68775EF; Fri, 13 Feb 2004 22:10:36 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ Makefile.in
Message-Id: <20040213211036.97C68775EF@mail.ossp.org>
Date: Fri, 13 Feb 2004 22:10:36 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Feb-2004 22:10:36
  Branch: HEAD                             Handle: 2004021321103500

  Modified files:
    ossp-pkg/uuid           Makefile.in

  Log:
    remove uuid.h also on 'make distclean'

  Summary:
    Revision    Changes     Path
    1.19        +1  -1      ossp-pkg/uuid/Makefile.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	11 Feb 2004 14:38:40 -0000	1.18
  +++ ossp-pkg/uuid/Makefile.in	13 Feb 2004 21:10:35 -0000	1.19
  @@ -200,7 +200,7 @@
   
   distclean: clean
   	-$(RM) config.log config.status config.cache
  -	-$(RM) Makefile config.h uuid-config
  +	-$(RM) Makefile config.h uuid-config uuid.h
   	-$(RM) libtool
   
   realclean: distclean
  @@ .

From ossp-cvs-owner@ossp.org  Fri Feb 13 22:17:16 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0C392775EC; Fri, 13 Feb 2004 22:17:15 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20040213211715.0C392775EC@mail.ossp.org>
Date: Fri, 13 Feb 2004 22:17:15 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   13-Feb-2004 22:17:15
  Branch: HEAD                             Handle: 2004021321171203

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/uuid   index.wml

  Log:
    release OSSP uuid 0.9.7

  Summary:
    Revision    Changes     Path
    1.74        +1  -0      ossp-web/new/news.txt
    1.69        +1  -1      ossp-web/pkg/lib/index.wml
    1.12        +2  -2      ossp-web/pkg/lib/uuid/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.73 -r1.74 news.txt
  --- ossp-web/new/news.txt	11 Feb 2004 14:50:48 -0000	1.73
  +++ ossp-web/new/news.txt	13 Feb 2004 21:17:12 -0000	1.74
  @@ -1,3 +1,4 @@
  +13-Feb-2004: Released L<OSSP uuid> 0.9.7
   11-Feb-2004: Released L<OSSP uuid> 0.9.6
   19-Jan-2004: Released L<OSSP uuid> 0.9.4
   16-Jan-2004: Released L<OSSP uuid> 0.9.3
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.68 -r1.69 index.wml
  --- ossp-web/pkg/lib/index.wml	11 Feb 2004 14:50:49 -0000	1.68
  +++ ossp-web/pkg/lib/index.wml	13 Feb 2004 21:17:14 -0000	1.69
  @@ -42,7 +42,7 @@
   			done=95 stable=none unstable=0.9.8>
     <pkg_item name="uuid" longname="OSSP uuid" type="lib"
               desc="Universally Unique Identifier"
  -			done=100 stable=none unstable=0.9.6>
  +			done=100 stable=none unstable=0.9.7>
     <pkg_item name="l2" longname="OSSP l2" type="lib"
               desc="Flexible Logging"
   			done=95 stable=none unstable=0.9.5>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/uuid/index.wml
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 index.wml
  --- ossp-web/pkg/lib/uuid/index.wml	11 Feb 2004 14:59:23 -0000	1.11
  +++ ossp-web/pkg/lib/uuid/index.wml	13 Feb 2004 21:17:15 -0000	1.12
  @@ -44,7 +44,7 @@
   <pkg_status
       name="uuid" assign="rse"
       stable="none"    stable_date="none"
  -    unstable="0.9.6" unstable_date="11-Feb-2004"
  +    unstable="0.9.7" unstable_date="13-Feb-2004"
   	done=100>
   
   <h2>Source</h2>
  @@ -54,7 +54,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/uuid/
       directory=$(FTP_ROOT_DIR)/pkg/lib/uuid/
       files="uuid-*.tar.gz" 
  -	stable="uuid-0\.9\.6\.tar\.gz" unstable="uuid-SNAP.*\.tar.gz">
  +	stable="uuid-0\.9\.7\.tar\.gz" unstable="uuid-SNAP.*\.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 16 10:14:00 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A915377618; Mon, 16 Feb 2004 10:13:59 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog THANKS uuid.c uuid_str.c
Message-Id: <20040216091359.A915377618@mail.ossp.org>
Date: Mon, 16 Feb 2004 10:13:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Feb-2004 10:13:59
  Branch: HEAD                             Handle: 2004021609135800

  Modified files:
    ossp-pkg/uuid           ChangeLog THANKS uuid.c uuid_str.c

  Log:
    - Resolve namespace conflicts with GCC 3.4 internal pow10() and round()
      functions within uuid_str.c.
    - Fix buffer handling in "uuid_export(..., UUID_FMT_TXT, vp, ...)" in
      case "vp" is not NULL.
    
    Partly submitted by: Fuyuki <fuyuki@nigredo.org>

  Summary:
    Revision    Changes     Path
    1.45        +14 -4      ossp-pkg/uuid/ChangeLog
    1.5         +1  -0      ossp-pkg/uuid/THANKS
    1.46        +1  -1      ossp-pkg/uuid/uuid.c
    1.3         +7  -7      ossp-pkg/uuid/uuid_str.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.44 -r1.45 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	13 Feb 2004 21:08:17 -0000	1.44
  +++ ossp-pkg/uuid/ChangeLog	16 Feb 2004 09:13:58 -0000	1.45
  @@ -11,6 +11,16 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 0.9.7 and 1.0.0 (13-Feb-2004 to 16-Feb-2004)
  +
  +   o Resolve namespace conflicts with GCC 3.4 internal pow10() and round()
  +     functions within uuid_str.c.
  +     [Ralf S. Engelschall]
  +
  +   o Fix buffer handling in "uuid_export(..., UUID_FMT_TXT, vp, ...)" in
  +     case "vp" is not NULL.
  +     [Fuyuki <fuyuki@nigredo.org>]
  +
     Changes between 0.9.6 and 0.9.7 (11-Feb-2004 to 13-Feb-2004)
   
      o remove --with-rfc2518 option and functionality because
  @@ -27,18 +37,18 @@
   
      o Add missing documentation entries for UUID_XXXX API constants and
        uuid_version() function.
  -     [<fuyuki@nigredo.org>]
  +     [Fuyuki <fuyuki@nigredo.org>]
   
      o Adjust references for new draft-mealling-uuid-urn-02.txt.
  -     [<fuyuki@nigredo.org>]
  +     [Fuyuki <fuyuki@nigredo.org>]
   
      o Replaced overlooked references to old
        uuid_{unpack,pack,parse,format,dump}() functions with their
        current uuid_{import,export}() replacements.
  -     [<fuyuki@nigredo.org>]
  +     [Fuyuki <fuyuki@nigredo.org>]
   
      o Fixed "uuid -h" command.
  -     [<fuyuki@nigredo.org>]
  +     [Fuyuki <fuyuki@nigredo.org>]
   
     Changes between 0.9.5 and 0.9.6 (06-Feb-2004 to 11-Feb-2004)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/THANKS
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 THANKS
  --- ossp-pkg/uuid/THANKS	16 Jan 2004 15:54:29 -0000	1.4
  +++ ossp-pkg/uuid/THANKS	16 Feb 2004 09:13:58 -0000	1.5
  @@ -13,6 +13,7 @@
   
       o  Matthias Andree             <matthias.andree@gmx.de>
       o  M. Daniel                   <mdaniel@scdi.com>
  +    o  Fuyuki                      <fuyuki@nigredo.org>
       o  Thomas Lotterer             <thomas@lotterer.net>
       o  Michael Schloh              <michael@schloh.com>
       o  Guerry Semones              <guerry@tsunamiresearch.com>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.45 -r1.46 uuid.c
  --- ossp-pkg/uuid/uuid.c	13 Feb 2004 21:01:41 -0000	1.45
  +++ ossp-pkg/uuid/uuid.c	16 Feb 2004 09:13:58 -0000	1.46
  @@ -611,7 +611,7 @@
               return UUID_RC_ARG;
           if (*data_len < out_len)
               return UUID_RC_MEM;
  -        memcpy(*data_ptr, &out_ptr, out_len);
  +        memcpy(*data_ptr, out_ptr, out_len);
       }
   
       return UUID_RC_OK;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_str.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid_str.c
  --- ossp-pkg/uuid/uuid_str.c	18 Jan 2004 19:22:54 -0000	1.2
  +++ ossp-pkg/uuid/uuid_str.c	16 Feb 2004 09:13:58 -0000	1.3
  @@ -482,7 +482,7 @@
   }
   
   static LDOUBLE
  -abs_val(LDOUBLE value)
  +math_abs(LDOUBLE value)
   {
       LDOUBLE result = value;
       if (value < 0)
  @@ -491,7 +491,7 @@
   }
   
   static LDOUBLE
  -pow10(int exponent)
  +math_pow10(int exponent)
   {
       LDOUBLE result = 1;
       while (exponent > 0) {
  @@ -502,7 +502,7 @@
   }
   
   static long
  -round(LDOUBLE value)
  +math_round(LDOUBLE value)
   {
       long intpart;
       intpart = (long) value;
  @@ -536,7 +536,7 @@
   
       if (max < 0)
           max = 6;
  -    ufvalue = abs_val(fvalue);
  +    ufvalue = math_abs(fvalue);
       if (fvalue < 0)
           signvalue = '-';
       else if (flags & DP_F_PLUS)
  @@ -553,11 +553,11 @@
   
       /* we "cheat" by converting the fractional part to integer by
          multiplying by a factor of 10 */
  -    fracpart = round((pow10(max)) * (ufvalue - intpart));
  +    fracpart = math_round((math_pow10(max)) * (ufvalue - intpart));
   
  -    if (fracpart >= pow10(max)) {
  +    if (fracpart >= math_pow10(max)) {
           intpart++;
  -        fracpart -= (long)pow10(max);
  +        fracpart -= (long)math_pow10(max);
       }
   
       /* convert integer part */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 16 10:41:53 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BCECC77617; Mon, 16 Feb 2004 10:41:52 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid.pod
Message-Id: <20040216094152.BCECC77617@mail.ossp.org>
Date: Mon, 16 Feb 2004 10:41:52 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Feb-2004 10:41:52
  Branch: HEAD                             Handle: 2004021609415100

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid.pod

  Log:
    Replace remaining (old) UUID_VERSIONX names with UUID_MAKE_VX
    in the documentation (uuid.pod).

  Summary:
    Revision    Changes     Path
    1.46        +4  -0      ossp-pkg/uuid/ChangeLog
    1.16        +6  -6      ossp-pkg/uuid/uuid.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.45 -r1.46 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	16 Feb 2004 09:13:58 -0000	1.45
  +++ ossp-pkg/uuid/ChangeLog	16 Feb 2004 09:41:51 -0000	1.46
  @@ -13,6 +13,10 @@
   
     Changes between 0.9.7 and 1.0.0 (13-Feb-2004 to 16-Feb-2004)
   
  +   o Replace remaining (old) UUID_VERSIONX names with UUID_MAKE_VX
  +     in the documentation (uuid.pod).
  +     [Ralf S. Engelschall]
  +
      o Resolve namespace conflicts with GCC 3.4 internal pow10() and round()
        functions within uuid_str.c.
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	13 Feb 2004 16:01:23 -0000	1.15
  +++ ossp-pkg/uuid/uuid.pod	16 Feb 2004 09:41:51 -0000	1.16
  @@ -302,13 +302,13 @@
   Generates a new UUID in I<uuid> according to I<mode> and optional
   arguments (dependent on I<mode>).
   
  -If I<mode> contains the C<UUID_VERSION1> bit, a DCE 1.1 variant UUID of
  -version 1 is generated. Then optionally the bit C<UUID_MCASTRND> forces
  +If I<mode> contains the C<UUID_MAKE_V1> bit, a DCE 1.1 variant UUID of
  +version 1 is generated. Then optionally the bit C<UUID_MAKE_MC> forces
   the use of random multi-cast MAC address instead of the real physical
   MAC address (the default). The UUID is generated out of the 60-bit current
   system time, a 12-bit clock sequence and the 48-bit MAC address.
   
  -If I<mode> contains the C<UUID_VERSION3> bit, a DCE 1.1 variant UUID
  +If I<mode> contains the C<UUID_MAKE_V3> bit, a DCE 1.1 variant UUID
   of version 3 is generated and two additional C<NUL>-terminated string
   arguments of type "C<const char *>" are expected: first a namespace,
   given as an internally pre-defined id (currently known are ids "C<DNS>",
  @@ -317,7 +317,7 @@
   the 128-bit MD5 from the concatenated octet stream of namespace UUID and name
   string.
   
  -If I<mode> contains the C<UUID_VERSION4> bit, a DCE 1.1 variant UUID
  +If I<mode> contains the C<UUID_MAKE_V4> bit, a DCE 1.1 variant UUID
   of version 4 is generated. The UUID is generated out of 128-bit random
   data.
   
  @@ -347,7 +347,7 @@
        char *str = NULL;
   
        uuid_create(&uuid);
  -     uuid_make(uuid, UUID_VERSION1);
  +     uuid_make(uuid, UUID_MAKE_V1);
        uuid_export(uuid, UUID_FMT_STR, (void **)&str, NULL);
        uuid_destroy(uuid);
        return str;
  @@ -363,7 +363,7 @@
        uuid_create(&uuid);
        uuid_create(&uuid_ns);
        uuid_load(uuid_ns, "ns:URL");
  -     uuid_make(uuid, UUID_VERSION3, uuid_ns, url);
  +     uuid_make(uuid, UUID_MAKE_V3, uuid_ns, url);
        uuid_export(uuid, UUID_FMT_STR, (void **)&str, NULL);
        uuid_destroy(uuid_ns);
        uuid_destroy(uuid);
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 16 10:43:58 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0C9A377617; Mon, 16 Feb 2004 10:43:57 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ TODO
Message-Id: <20040216094357.0C9A377617@mail.ossp.org>
Date: Mon, 16 Feb 2004 10:43:57 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Feb-2004 10:43:57
  Branch: HEAD                             Handle: 2004021609435700

  Modified files:
    ossp-pkg/uuid           TODO

  Log:
    align TODO file in style

  Summary:
    Revision    Changes     Path
    1.22        +23 -9      ossp-pkg/uuid/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/TODO
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 TODO
  --- ossp-pkg/uuid/TODO	11 Feb 2004 14:39:56 -0000	1.21
  +++ ossp-pkg/uuid/TODO	16 Feb 2004 09:43:57 -0000	1.22
  @@ -1,9 +1,23 @@
  -TODO
  -- <none>
  -CANDO
  -- additional Perl API for covering Perl language
  -- getopt_long support?
  -- a more sophisticated test suite?!
  -- more platform support in uuid_mac.c?!
  -- global memory locking according to standard?
  -- persistent/non-volatile state writing?
  +   _        ___  ____ ____  ____                _     _
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _   _ _   _(_) __| |
  +  _|_||_| | | | \___ \___ \| |_) | | | | | | | | |/ _` |
  + |_||_|_| | |_| |___) |__) |  __/  | |_| | |_| | | (_| |
  +  |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
  +
  +  OSSP uuid - Universally Unique Identifier
  +
  +  TODO
  +  ====
  +
  +  - <none>
  +
  +  CANDO
  +  =====
  +
  +  - additional Perl API for covering Perl language
  +  - getopt_long support for CLI?
  +  - a more sophisticated test suite?!
  +  - more platform support in uuid_mac.c?!
  +  - global memory locking according to standard??
  +  - persistent/non-volatile state writing according to standard??
  +
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 16 10:44:28 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F06E67761D; Mon, 16 Feb 2004 10:44:27 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ README uuid_vers.h
Message-Id: <20040216094427.F06E67761D@mail.ossp.org>
Date: Mon, 16 Feb 2004 10:44:27 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Feb-2004 10:44:27
  Branch: HEAD                             Handle: 2004021609442700

  Modified files:
    ossp-pkg/uuid           README uuid_vers.h

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.15        +1  -1      ossp-pkg/uuid/README
    1.6         +9  -9      ossp-pkg/uuid/uuid_vers.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 README
  --- ossp-pkg/uuid/README	13 Feb 2004 21:09:28 -0000	1.14
  +++ ossp-pkg/uuid/README	16 Feb 2004 09:44:27 -0000	1.15
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
   
     OSSP uuid - Universally Unique Identifier
  -  Version 0.9.7 (13-Feb-2004)
  +  Version 1.0.0 (16-Feb-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_vers.h
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 uuid_vers.h
  --- ossp-pkg/uuid/uuid_vers.h	13 Feb 2004 21:09:28 -0000	1.5
  +++ ossp-pkg/uuid/uuid_vers.h	16 Feb 2004 09:44:27 -0000	1.6
  @@ -8,7 +8,7 @@
   #ifndef _UUID_VERS_H_
   #define _UUID_VERS_H_
   
  -#define _UUID_VERSION 0x009207
  +#define _UUID_VERSION 0x100200
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _UUID_VERS_H_AS_HEADER_
   
   _uuid_version_t _uuid_version = {
  -    0x009207,
  -    "0.9.7",
  -    "0.9.7 (13-Feb-2004)",
  -    "This is OSSP uuid, Version 0.9.7 (13-Feb-2004)",
  -    "OSSP uuid 0.9.7 (13-Feb-2004)",
  -    "OSSP uuid/0.9.7",
  -    "@(#)OSSP uuid 0.9.7 (13-Feb-2004)",
  -    "$Id: OSSP uuid 0.9.7 (13-Feb-2004) $"
  +    0x100200,
  +    "1.0.0",
  +    "1.0.0 (16-Feb-2004)",
  +    "This is OSSP uuid, Version 1.0.0 (16-Feb-2004)",
  +    "OSSP uuid 1.0.0 (16-Feb-2004)",
  +    "OSSP uuid/1.0.0",
  +    "@(#)OSSP uuid 1.0.0 (16-Feb-2004)",
  +    "$Id: OSSP uuid 1.0.0 (16-Feb-2004) $"
   };
   
   #endif /* _UUID_VERS_H_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 16 10:52:51 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7E0927760C; Mon, 16 Feb 2004 10:52:51 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20040216095251.7E0927760C@mail.ossp.org>
Date: Mon, 16 Feb 2004 10:52:51 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   16-Feb-2004 10:52:51
  Branch: HEAD                             Handle: 2004021609524901

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/uuid   index.wml

  Log:
    release OSSP uuid 1.0.0

  Summary:
    Revision    Changes     Path
    1.75        +1  -0      ossp-web/new/news.txt
    1.70        +3  -3      ossp-web/pkg/lib/index.wml
    1.13        +4  -4      ossp-web/pkg/lib/uuid/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.74 -r1.75 news.txt
  --- ossp-web/new/news.txt	13 Feb 2004 21:17:12 -0000	1.74
  +++ ossp-web/new/news.txt	16 Feb 2004 09:52:49 -0000	1.75
  @@ -1,3 +1,4 @@
  +16-Feb-2004: Released L<OSSP uuid> 1.0.0
   13-Feb-2004: Released L<OSSP uuid> 0.9.7
   11-Feb-2004: Released L<OSSP uuid> 0.9.6
   19-Jan-2004: Released L<OSSP uuid> 0.9.4
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.69 -r1.70 index.wml
  --- ossp-web/pkg/lib/index.wml	13 Feb 2004 21:17:14 -0000	1.69
  +++ ossp-web/pkg/lib/index.wml	16 Feb 2004 09:52:50 -0000	1.70
  @@ -31,6 +31,9 @@
     <pkg_item name="var" longname="OSSP var" type="lib"
               desc="Variable Expansion"
   			done=100 stable=1.0.0 unstable=none>
  +  <pkg_item name="uuid" longname="OSSP uuid" type="lib"
  +            desc="Universally Unique Identifier"
  +			done=100 stable=none unstable=1.0.0>
     <pkg_item name="val" longname="OSSP val" type="lib"
               desc="Value Access"
   			done=95 stable=none unstable=0.9.1>
  @@ -40,9 +43,6 @@
     <pkg_item name="str" longname="OSSP str" type="lib"
               desc="String Handling"
   			done=95 stable=none unstable=0.9.8>
  -  <pkg_item name="uuid" longname="OSSP uuid" type="lib"
  -            desc="Universally Unique Identifier"
  -			done=100 stable=none unstable=0.9.7>
     <pkg_item name="l2" longname="OSSP l2" type="lib"
               desc="Flexible Logging"
   			done=95 stable=none unstable=0.9.5>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/uuid/index.wml
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 index.wml
  --- ossp-web/pkg/lib/uuid/index.wml	13 Feb 2004 21:17:15 -0000	1.12
  +++ ossp-web/pkg/lib/uuid/index.wml	16 Feb 2004 09:52:50 -0000	1.13
  @@ -43,8 +43,8 @@
   
   <pkg_status
       name="uuid" assign="rse"
  -    stable="none"    stable_date="none"
  -    unstable="0.9.7" unstable_date="13-Feb-2004"
  +    stable="1.0.0"    stable_date="16-Feb-2004"
  +    unstable="none" unstable_date="none"
   	done=100>
   
   <h2>Source</h2>
  @@ -53,8 +53,8 @@
       cvs=$(CVS_ROOT_URL)/pkg/lib/uuid/
       url=$(FTP_ROOT_URL)/pkg/lib/uuid/
       directory=$(FTP_ROOT_DIR)/pkg/lib/uuid/
  -    files="uuid-*.tar.gz" 
  -	stable="uuid-0\.9\.7\.tar\.gz" unstable="uuid-SNAP.*\.tar.gz">
  +    files="uuid-[0-9.]*.tar.gz" 
  +	stable="uuid-1\.0\.0\.tar\.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 17 09:54:15 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4837C77613; Tue, 17 Feb 2004 09:54:15 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ sh.subst sh.tarball
Message-Id: <20040217085415.4837C77613@mail.ossp.org>
Date: Tue, 17 Feb 2004 09:54:15 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   17-Feb-2004 09:54:14
  Branch: HEAD                             Handle: 2004021708541400

  Modified files:
    ossp-pkg/shtool         sh.subst sh.tarball

  Log:
    correct spelling: privileges, convenient;

  Summary:
    Revision    Changes     Path
    1.12        +1  -1      ossp-pkg/shtool/sh.subst
    1.22        +2  -2      ossp-pkg/shtool/sh.tarball
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.subst
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 sh.subst
  --- ossp-pkg/shtool/sh.subst	12 Feb 2004 16:06:27 -0000	1.11
  +++ ossp-pkg/shtool/sh.subst	17 Feb 2004 08:54:14 -0000	1.12
  @@ -254,7 +254,7 @@
   
   The B<GNU shtool> B<subst> command was originally written by Ralf S.
   Engelschall E<lt>rse@engelschall.comE<gt> in 2001 for B<GNU shtool>.
  -It was prompted by the need to have a uniform and convinient patching
  +It was prompted by the need to have a uniform and convenient patching
   frontend to sed(1) operations in the B<OpenPKG> package specifications.
   
   =head1 SEE ALSO
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.tarball
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 sh.tarball
  --- ossp-pkg/shtool/sh.tarball	12 Feb 2004 16:06:27 -0000	1.21
  +++ ossp-pkg/shtool/sh.tarball	17 Feb 2004 08:54:14 -0000	1.22
  @@ -160,14 +160,14 @@
               echo "chown -R $opt_u $tmpdir/$tarname >/dev/null 2>&1" 2>&1
           fi
           chown -R $opt_u $tmpdir/$tarname >/dev/null 2>&1 ||\
  -        echo "$msgprefix:Warning: cannot set user name \`$opt_u' (would require root priviledges)"
  +        echo "$msgprefix:Warning: cannot set user name \`$opt_u' (would require root privileges)"
       fi
       if [ ".$opt_g" != . ]; then
           if [ ".$opt_t" = .yes ]; then
               echo "chgrp -R $opt_g $tmpdir/$tarname >/dev/null 2>&1" 2>&1
           fi
           chgrp -R $opt_g $tmpdir/$tarname >/dev/null 2>&1 ||\
  -        echo "$msgprefix:Warning: cannot set group name \`$opt_g' (would require root priviledges)"
  +        echo "$msgprefix:Warning: cannot set group name \`$opt_g' (would require root privileges)"
       fi
       if [ ".$opt_t" = .yes ]; then
           echo "(cd $tmpdir && $prg_find $tarname -type f -depth -print | sort | xargs $prg_tar cf -) | cat $compress >$tmpfile.out" 1>&2
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 17 10:14:55 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E2FF477612; Tue, 17 Feb 2004 10:14:54 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex/ ex.h
Message-Id: <20040217091454.E2FF477612@mail.ossp.org>
Date: Tue, 17 Feb 2004 10:14:54 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   17-Feb-2004 10:14:54
  Branch: HEAD                             Handle: 2004021709145400

  Modified files:
    ossp-pkg/ex             ex.h

  Log:
    correct spelling: privileges, convenient;

  Summary:
    Revision    Changes     Path
    1.22        +1  -1      ossp-pkg/ex/ex.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ex.h
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 ex.h
  --- ossp-pkg/ex/ex.h	30 Jan 2003 11:04:42 -0000	1.21
  +++ ossp-pkg/ex/ex.h	17 Feb 2004 09:14:54 -0000	1.22
  @@ -34,7 +34,7 @@
   /* required ISO-C standard facilities */
   #include <stdio.h>
   
  -/* convinience define */
  +/* convenience define */
   #ifndef NULL
   #define NULL (void *)0
   #endif
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 17 10:16:07 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3088C77612; Tue, 17 Feb 2004 10:16:07 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ index.wml ossp-web/pkg/lib/l2/ index.wml oss...
Message-Id: <20040217091607.3088C77612@mail.ossp.org>
Date: Tue, 17 Feb 2004 10:16:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-web                         Date:   17-Feb-2004 10:16:06
  Branch: HEAD                             Handle: 2004021709160402

  Modified files:
    ossp-web/new            index.wml
    ossp-web/pkg/lib/l2     index.wml
    ossp-web/pkg/lib/pcre   index.wml
    ossp-web/pkg/lib/str    index.wml

  Log:
    correct spelling: privileges, convenient;

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-web/new/index.wml
    1.11        +1  -1      ossp-web/pkg/lib/l2/index.wml
    1.5         +1  -1      ossp-web/pkg/lib/pcre/index.wml
    1.8         +1  -1      ossp-web/pkg/lib/str/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/index.wml
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 index.wml
  --- ossp-web/new/index.wml	24 Sep 2002 12:53:46 -0000	1.2
  +++ ossp-web/new/index.wml	17 Feb 2004 09:16:04 -0000	1.3
  @@ -10,7 +10,7 @@
   On the <a href="news.html"><b>What's New</b></a> page we summarize all
   OSSP project news in reverse chronological order (newest first). Mainly
   these are announcements of new software versions. Visit this page
  -to get a brief summary on the project history. For convinience reasons,
  +to get a brief summary on the project history. For convenience reasons,
   the first (latest) entries of this page are always included in the <a
   href="$(ROOT)"><b>Title</b></a> page.
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/l2/index.wml
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 index.wml
  --- ossp-web/pkg/lib/l2/index.wml	10 Nov 2003 19:04:53 -0000	1.10
  +++ ossp-web/pkg/lib/l2/index.wml	17 Feb 2004 09:16:05 -0000	1.11
  @@ -24,7 +24,7 @@
   <p>
   Channels are implemented by channel handlers which can be even customer
   supplied for creating own channels which seamlessly integrate into the
  -framework. For convinience reasons, OSSP l2 already ships with pre-implemented
  +framework. For convenience reasons, OSSP l2 already ships with pre-implemented
   filtering (noop, filter, prefix, buffer) and output (null, fd, file, pipe,
   socket, syslog, smtp) channels which already cover mostly all use cases of
   logging.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/pcre/index.wml
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 index.wml
  --- ossp-web/pkg/lib/pcre/index.wml	2 Oct 2002 12:44:41 -0000	1.4
  +++ ossp-web/pkg/lib/pcre/index.wml	17 Feb 2004 09:16:05 -0000	1.5
  @@ -10,7 +10,7 @@
   OSSP pcre is a derivative of Philip Hazel's <a
   href="http://www.pcre.org/">PCRE</a> library for matching text via
   Perl-compatible regular expressions. OSSP pcre additionally contains the
  -function pcre_match(3) which provides a very convinience way to apply a
  +function pcre_match(3) which provides a very convenience way to apply a
   regular expression, including caching support.
   
   <p>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/str/index.wml
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 index.wml
  --- ossp-web/pkg/lib/str/index.wml	17 Feb 2003 15:20:44 -0000	1.7
  +++ ossp-web/pkg/lib/str/index.wml	17 Feb 2004 09:16:06 -0000	1.8
  @@ -10,7 +10,7 @@
   OSSP str is a generic string library written in ISO-C which provides
   functions for handling, matching, parsing, searching and formatting of ISO-C
   strings. So it can be considered as a superset of POSIX string(3), but its
  -main intention is to provide a more convinient and compact API plus a more
  +main intention is to provide a more convenient and compact API plus a more
   generalized functionality. 
   
   <h2>Documentation</h2>
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 17 10:18:16 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2493877612; Tue, 17 Feb 2004 10:18:16 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-cui/ as-cui.bashrc as-cui.pod
Message-Id: <20040217091816.2493877612@mail.ossp.org>
Date: Tue, 17 Feb 2004 10:18:16 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   17-Feb-2004 10:18:15
  Branch: HEAD                             Handle: 2004021709181500

  Modified files:
    ossp-pkg/as/as-cui      as-cui.bashrc as-cui.pod

  Log:
    correct spelling: privileges, convenient;

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/as/as-cui/as-cui.bashrc
    1.21        +1  -1      ossp-pkg/as/as-cui/as-cui.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-cui/as-cui.bashrc
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 as-cui.bashrc
  --- ossp-pkg/as/as-cui/as-cui.bashrc	18 Dec 2002 15:58:27 -0000	1.2
  +++ ossp-pkg/as/as-cui/as-cui.bashrc	17 Feb 2004 09:18:15 -0000	1.3
  @@ -21,7 +21,7 @@
   ##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
   ##  USA, or contact The OSSP Project <ossp@ossp.org>.
   ##
  -##  as-cui.bashrc: AS command line convinience wrapper for GNU bash 
  +##  as-cui.bashrc: AS command line convenience wrapper for GNU bash 
   ##
   
   as_complete () {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-cui/as-cui.pod
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 as-cui.pod
  --- ossp-pkg/as/as-cui/as-cui.pod	10 Mar 2003 09:13:19 -0000	1.20
  +++ ossp-pkg/as/as-cui/as-cui.pod	17 Feb 2004 09:18:15 -0000	1.21
  @@ -517,7 +517,7 @@
   
    . $HOME/.as/bashrc
   
  -in your C<$HOME/.bashrc> to get convinient command-line argument
  +in your C<$HOME/.bashrc> to get convenient command-line argument
   completion for the B<as> command. With this feature enabled, pressing
   B<TAB> when entering the I<account-name>, I<time-spec> and I<event-id>
   arguments allows you to quickly complete the argument and convert it
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 17 10:18:43 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9008C77615; Tue, 17 Feb 2004 10:18:43 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-db/bres/ bres-history.sql
Message-Id: <20040217091843.9008C77615@mail.ossp.org>
Date: Tue, 17 Feb 2004 10:18:43 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   17-Feb-2004 10:18:43
  Branch: HEAD                             Handle: 2004021709184200

  Modified files:
    ossp-pkg/as/as-db/bres  bres-history.sql

  Log:
    correct spelling: privileges, convenient;

  Summary:
    Revision    Changes     Path
    1.14        +2  -2      ossp-pkg/as/as-db/bres/bres-history.sql
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-db/bres/bres-history.sql
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 bres-history.sql
  --- ossp-pkg/as/as-db/bres/bres-history.sql	8 Jun 2003 15:09:38 -0000	1.13
  +++ ossp-pkg/as/as-db/bres/bres-history.sql	17 Feb 2004 09:18:42 -0000	1.14
  @@ -289,7 +289,7 @@
   END;
   ';
   
  ---  convinience function overloading
  +--  convenience function overloading
   CREATE OR REPLACE FUNCTION as_hs_make
   (BIGINT, TIMESTAMP (4) WITH TIME ZONE, TIMESTAMP (4) WITH TIME ZONE) 
   RETURNS BIGINT LANGUAGE 'plpgsql' STABLE AS '
  @@ -406,7 +406,7 @@
   END;
   ';
   
  ---  convinience overloading functions
  +--  convenience overloading functions
   CREATE OR REPLACE FUNCTION as_hs
   (TIMESTAMP (4) WITH TIME ZONE, TIMESTAMP (4) WITH TIME ZONE,
    TIMESTAMP (4) WITH TIME ZONE, TIMESTAMP (4) WITH TIME ZONE)
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 17 10:21:08 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9CB3077612; Tue, 17 Feb 2004 10:21:07 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ README l2.pod l2_ut_sa.c ossp-pkg/lmtp2nntp/ ...
Message-Id: <20040217092107.9CB3077612@mail.ossp.org>
Date: Tue, 17 Feb 2004 10:21:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   17-Feb-2004 10:21:07
  Branch: HEAD                             Handle: 2004021709210402

  Modified files:
    ossp-pkg/l2             README l2.pod l2_ut_sa.c
    ossp-pkg/lmtp2nntp      Makefile.in
    ossp-pkg/sa             sa.c
    ossp-pkg/str            README str.pod
    ossp-pkg/var            var.c

  Log:
    correct spelling: privileges, convenient;

  Summary:
    Revision    Changes     Path
    1.15        +1  -1      ossp-pkg/l2/README
    1.16        +1  -1      ossp-pkg/l2/l2.pod
    1.22        +3  -3      ossp-pkg/l2/l2_ut_sa.c
    1.55        +1  -1      ossp-pkg/lmtp2nntp/Makefile.in
    1.76        +3  -3      ossp-pkg/sa/sa.c
    1.22        +1  -1      ossp-pkg/str/README
    1.36        +2  -2      ossp-pkg/str/str.pod
    1.101       +1  -1      ossp-pkg/var/var.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/README
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 README
  --- ossp-pkg/l2/README	10 Nov 2003 15:29:24 -0000	1.14
  +++ ossp-pkg/l2/README	17 Feb 2004 09:21:04 -0000	1.15
  @@ -25,7 +25,7 @@
   
     Channels are implemented by channel handlers which can be even
     customer supplied for creating own channels which seamlessly integrate
  -  into the framework. For convinience reasons, OSSP l2 already ships
  +  into the framework. For convenience reasons, OSSP l2 already ships
     with pre-implemented filtering (noop, filter, prefix, buffer) and
     output (null, fd, file, pipe, socket, syslog, smtp) channels which
     already cover mostly all use cases of logging.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2.pod
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 l2.pod
  --- ossp-pkg/l2/l2.pod	30 Jun 2003 11:13:08 -0000	1.15
  +++ ossp-pkg/l2/l2.pod	17 Feb 2004 09:21:04 -0000	1.16
  @@ -60,7 +60,7 @@
   
   Channels are implemented by channel handlers which can be even
   customer supplied for creating own channels which seamlessly integrate
  -into the framework. For convinience reasons, B<OSSP l2> already ships with
  +into the framework. For convenience reasons, B<OSSP l2> already ships with
   pre-implemented filtering (noop, filter, prefix, buffer) and output
   (null, fd, file, pipe, socket, syslog, smtp) channels which already
   cover mostly all use cases of logging.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_sa.c
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 l2_ut_sa.c
  --- ossp-pkg/l2/l2_ut_sa.c	10 Feb 2003 10:13:23 -0000	1.21
  +++ ossp-pkg/l2/l2_ut_sa.c	17 Feb 2004 09:21:04 -0000	1.22
  @@ -1816,7 +1816,7 @@
       return SA_RC(rv);
   }
   
  -/* read data from socket until [CR]LF (convinience function) */
  +/* read data from socket until [CR]LF (convenience function) */
   sa_rc_t sa_readln(sa_t *sa, char *cpBuf, size_t nBufReq, size_t *nBufRes)
   {
       char c;
  @@ -1981,7 +1981,7 @@
       return (int)n;
   }
   
  -/* write formatted string to socket (convinience function) */
  +/* write formatted string to socket (convenience function) */
   sa_rc_t sa_writef(sa_t *sa, const char *cpFmt, ...)
   {
       va_list ap;
  @@ -2194,7 +2194,7 @@
       return SA_OK;
   }
   
  -/* send formatted string to socket (convinience function) */
  +/* send formatted string to socket (convenience function) */
   sa_rc_t sa_sendf(sa_t *sa, sa_addr_t *raddr, const char *cpFmt, ...)
   {
       va_list ap;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.54 -r1.55 Makefile.in
  --- ossp-pkg/lmtp2nntp/Makefile.in	10 Feb 2003 10:13:10 -0000	1.54
  +++ ossp-pkg/lmtp2nntp/Makefile.in	17 Feb 2004 09:21:04 -0000	1.55
  @@ -57,7 +57,7 @@
   .c.o:
   	$(CC) $(CFLAGS) -c $<
   
  -#   convinience rule for calling _SUBDIRS with various make targets
  +#   convenience rule for calling _SUBDIRS with various make targets
   _SUBDIRS_all _SUBDIRS_check _SUBDIRS_install _SUBDIRS_uninstall _SUBDIRS_clean \
   _SUBDIRS_distclean _SUBDIRS_realclean _SUBDIRS_depend:
   	@$(MAKE) $(MFLAGS) \
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.c
  ============================================================================
  $ cvs diff -u -r1.75 -r1.76 sa.c
  --- ossp-pkg/sa/sa.c	10 Nov 2003 18:52:35 -0000	1.75
  +++ ossp-pkg/sa/sa.c	17 Feb 2004 09:21:05 -0000	1.76
  @@ -1867,7 +1867,7 @@
       return SA_RC(rv);
   }
   
  -/* read data from socket until [CR]LF (convinience function) */
  +/* read data from socket until [CR]LF (convenience function) */
   sa_rc_t sa_readln(sa_t *sa, char *cpBuf, size_t nBufReq, size_t *nBufRes)
   {
       char c;
  @@ -2032,7 +2032,7 @@
       return (int)n;
   }
   
  -/* write formatted string to socket (convinience function) */
  +/* write formatted string to socket (convenience function) */
   sa_rc_t sa_writef(sa_t *sa, const char *cpFmt, ...)
   {
       va_list ap;
  @@ -2249,7 +2249,7 @@
       return SA_OK;
   }
   
  -/* send formatted string to socket (convinience function) */
  +/* send formatted string to socket (convenience function) */
   sa_rc_t sa_sendf(sa_t *sa, sa_addr_t *raddr, const char *cpFmt, ...)
   {
       va_list ap;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/README
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 README
  --- ossp-pkg/str/README	17 Feb 2003 15:16:41 -0000	1.21
  +++ ossp-pkg/str/README	17 Feb 2004 09:21:06 -0000	1.22
  @@ -13,7 +13,7 @@
     provides functions for handling, matching, parsing, searching and
     formatting of ISO-C strings. So it can be considered as a superset
     of POSIX string(3), but its main intention is to provide a more
  -  convinient and compact API plus a more generalized functionality.
  +  convenient and compact API plus a more generalized functionality.
   
     COPYRIGHT AND LICENSE
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str.pod
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 str.pod
  --- ossp-pkg/str/str.pod	6 Jan 2003 19:13:47 -0000	1.35
  +++ ossp-pkg/str/str.pod	17 Feb 2004 09:21:06 -0000	1.36
  @@ -95,7 +95,7 @@
   B<OSSP str> is a generic string library written in ISO-C which
   provides functions for handling, matching, parsing, searching and
   formatting of ISO-C strings. So it can be considered as a superset of POSIX
  -string(3), but its main intention is to provide a more convinient and
  +string(3), but its main intention is to provide a more convenient and
   compact API plus a more generalized functionality.
   
   =head1 FUNCTIONS
  @@ -304,7 +304,7 @@
   and don't has to be repeated here again. For a deeper understanding
   and details you should have a look at the book `I<Mastering Regular
   Expressions>' (see also the perlbook(1) manpage) by I<Jeffrey Friedl>.
  -For convinience reasons we give you only a brief summary of Perl
  +For convenience reasons we give you only a brief summary of Perl
   compatible regular expressions:
   
   The following metacharacters have their standard egrep(1) meanings:
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var.c
  ============================================================================
  $ cvs diff -u -r1.100 -r1.101 var.c
  --- ossp-pkg/var/var.c	31 Jul 2003 07:29:52 -0000	1.100
  +++ ossp-pkg/var/var.c	17 Feb 2004 09:21:06 -0000	1.101
  @@ -2580,7 +2580,7 @@
   
       /* post-processing */
       if (rc >= 0) {
  -        /* always NUL-terminate output for convinience reasons
  +        /* always NUL-terminate output for convenience reasons
              but do not count the NUL-terminator in the length */
           if (!tokenbuf_append(&output, "\0", 1)) {
               tokenbuf_free(&output);
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 17 10:22:01 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4654577612; Tue, 17 Feb 2004 10:22:01 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: WORKOFF: ossp-pkg/l2/ README l2.pod l2_ut_sa.c
Message-Id: <20040217092201.4654577612@mail.ossp.org>
Date: Tue, 17 Feb 2004 10:22:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   17-Feb-2004 10:22:01
  Branch: WORKOFF                          Handle: 2004021709220000

  Modified files:           (Branch: WORKOFF)
    ossp-pkg/l2             README l2.pod l2_ut_sa.c

  Log:
    correct spelling: privileges, convenient;

  Summary:
    Revision    Changes     Path
    1.10.2.1    +1  -1      ossp-pkg/l2/README
    1.14.2.1    +1  -1      ossp-pkg/l2/l2.pod
    1.21.2.1    +3  -3      ossp-pkg/l2/l2_ut_sa.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/README
  ============================================================================
  $ cvs diff -u -r1.10 -r1.10.2.1 README
  --- ossp-pkg/l2/README	6 Jan 2003 11:41:51 -0000	1.10
  +++ ossp-pkg/l2/README	17 Feb 2004 09:22:00 -0000	1.10.2.1
  @@ -25,7 +25,7 @@
   
     Channels are implemented by channel handlers which can be even
     customer supplied for creating own channels which seamlessly integrate
  -  into the framework. For convinience reasons, OSSP l2 already ships
  +  into the framework. For convenience reasons, OSSP l2 already ships
     with pre-implemented filtering (noop, filter, prefix, buffer) and
     output (null, fd, file, pipe, socket, syslog, smtp) channels which
     already cover mostly all use cases of logging.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2.pod
  ============================================================================
  $ cvs diff -u -r1.14 -r1.14.2.1 l2.pod
  --- ossp-pkg/l2/l2.pod	6 Jan 2003 11:41:51 -0000	1.14
  +++ ossp-pkg/l2/l2.pod	17 Feb 2004 09:22:00 -0000	1.14.2.1
  @@ -60,7 +60,7 @@
   
   Channels are implemented by channel handlers which can be even
   customer supplied for creating own channels which seamlessly integrate
  -into the framework. For convinience reasons, B<OSSP l2> already ships with
  +into the framework. For convenience reasons, B<OSSP l2> already ships with
   pre-implemented filtering (noop, filter, prefix, buffer) and output
   (null, fd, file, pipe, socket, syslog, smtp) channels which already
   cover mostly all use cases of logging.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_sa.c
  ============================================================================
  $ cvs diff -u -r1.21 -r1.21.2.1 l2_ut_sa.c
  --- ossp-pkg/l2/l2_ut_sa.c	10 Feb 2003 10:13:23 -0000	1.21
  +++ ossp-pkg/l2/l2_ut_sa.c	17 Feb 2004 09:22:00 -0000	1.21.2.1
  @@ -1816,7 +1816,7 @@
       return SA_RC(rv);
   }
   
  -/* read data from socket until [CR]LF (convinience function) */
  +/* read data from socket until [CR]LF (convenience function) */
   sa_rc_t sa_readln(sa_t *sa, char *cpBuf, size_t nBufReq, size_t *nBufRes)
   {
       char c;
  @@ -1981,7 +1981,7 @@
       return (int)n;
   }
   
  -/* write formatted string to socket (convinience function) */
  +/* write formatted string to socket (convenience function) */
   sa_rc_t sa_writef(sa_t *sa, const char *cpFmt, ...)
   {
       va_list ap;
  @@ -2194,7 +2194,7 @@
       return SA_OK;
   }
   
  -/* send formatted string to socket (convinience function) */
  +/* send formatted string to socket (convenience function) */
   sa_rc_t sa_sendf(sa_t *sa, sa_addr_t *raddr, const char *cpFmt, ...)
   {
       va_list ap;
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 17 10:22:31 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6298F77615; Tue, 17 Feb 2004 10:22:31 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ Makefile.in
Message-Id: <20040217092231.6298F77615@mail.ossp.org>
Date: Tue, 17 Feb 2004 10:22:31 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   17-Feb-2004 10:22:31
  Branch: HEAD                             Handle: 2004021709223000

  Modified files:
    ossp-pkg/fsl            Makefile.in

  Log:
    correct spelling: privileges, convenient;

  Summary:
    Revision    Changes     Path
    1.18        +1  -1      ossp-pkg/fsl/Makefile.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 Makefile.in
  --- ossp-pkg/fsl/Makefile.in	9 Jan 2004 10:48:26 -0000	1.17
  +++ ossp-pkg/fsl/Makefile.in	17 Feb 2004 09:22:30 -0000	1.18
  @@ -79,7 +79,7 @@
   .c.lo:
   	@$(LIBTOOL) --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS) -c $<
   
  -#   convinience rule for calling _SUBDIRS with various make targets
  +#   convenience rule for calling _SUBDIRS with various make targets
   _SUBDIRS_all _SUBDIRS_check _SUBDIRS_install _SUBDIRS_uninstall _SUBDIRS_clean \
   _SUBDIRS_distclean _SUBDIRS_realclean _SUBDIRS_depend:
   	@$(MAKE) $(MFLAGS) \
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 17 10:23:07 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CD3B977612; Tue, 17 Feb 2004 10:23:06 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid.c
Message-Id: <20040217092306.CD3B977612@mail.ossp.org>
Date: Tue, 17 Feb 2004 10:23:06 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   17-Feb-2004 10:23:06
  Branch: HEAD                             Handle: 2004021709230600

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid.c

  Log:
    correct spelling: privileges, convenient;

  Summary:
    Revision    Changes     Path
    1.47        +1  -1      ossp-pkg/uuid/ChangeLog
    1.47        +1  -1      ossp-pkg/uuid/uuid.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.46 -r1.47 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	16 Feb 2004 09:41:51 -0000	1.46
  +++ ossp-pkg/uuid/ChangeLog	17 Feb 2004 09:23:06 -0000	1.47
  @@ -183,7 +183,7 @@
        [Ralf S. Engelschall]
   
      o Implement uuid_dump() and corresponding uuid CLI "-d"
  -     option for dumping a given UUID into clear text. For convinience
  +     option for dumping a given UUID into clear text. For convenience
        reasons add uuid_bm.h (bit mask API) and uuid_str (string
        formatting API) sub-modules.
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.46 -r1.47 uuid.c
  --- ossp-pkg/uuid/uuid.c	16 Feb 2004 09:13:58 -0000	1.46
  +++ ossp-pkg/uuid/uuid.c	17 Feb 2004 09:23:06 -0000	1.47
  @@ -170,7 +170,7 @@
       if (result == NULL)
           return UUID_RC_ARG;
   
  -    /* convinience macro for setting result */
  +    /* convenience macro for setting result */
   #   define RESULT(r) \
       do { \
           *result = (r); \
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 17 18:05:18 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4930877612; Tue, 17 Feb 2004 18:05:17 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog
Message-Id: <20040217170517.4930877612@mail.ossp.org>
Date: Tue, 17 Feb 2004 18:05:17 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-Feb-2004 18:05:17
  Branch: HEAD                             Handle: 2004021717051600

  Modified files:
    ossp-pkg/shtool         ChangeLog

  Log:
    remember what was done

  Summary:
    Revision    Changes     Path
    1.196       +3  -0      ossp-pkg/shtool/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.195 -r1.196 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	12 Feb 2004 16:06:26 -0000	1.195
  +++ ossp-pkg/shtool/ChangeLog	17 Feb 2004 17:05:16 -0000	1.196
  @@ -11,6 +11,9 @@
   
    Changes between 1.6.2 and 2.0.0 (02-Nov-2002 to xx-Feb-2004):
   
  +   *) Fix typos in various files.
  +      [Thomas Lotterer <thomas@lotterer.net>]
  +
      *) Embedded the command documentation from shtool.pod into the
         individual sh.xxxx scripts and this way split the large shtool(1)
         manual page into individual manual pages shtool-xxxx(1).
  @@ .

From ossp-cvs-owner@ossp.org  Wed Feb 18 10:55:03 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E07A777616; Wed, 18 Feb 2004 10:55:02 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog README VERSION shtool.spec
Message-Id: <20040218095502.E07A777616@mail.ossp.org>
Date: Wed, 18 Feb 2004 10:55:02 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Feb-2004 10:55:02
  Branch: HEAD                             Handle: 2004021809550100

  Modified files:
    ossp-pkg/shtool         ChangeLog README VERSION shtool.spec

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.197       +1  -1      ossp-pkg/shtool/ChangeLog
    1.102       +1  -1      ossp-pkg/shtool/README
    1.77        +1  -1      ossp-pkg/shtool/VERSION
    1.20        +1  -1      ossp-pkg/shtool/shtool.spec
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.196 -r1.197 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	17 Feb 2004 17:05:16 -0000	1.196
  +++ ossp-pkg/shtool/ChangeLog	18 Feb 2004 09:55:01 -0000	1.197
  @@ -9,7 +9,7 @@
   
    ChangeLog
   
  - Changes between 1.6.2 and 2.0.0 (02-Nov-2002 to xx-Feb-2004):
  + Changes between 1.6.2 and 2.0b1 (02-Nov-2002 to 18-Feb-2004):
   
      *) Fix typos in various files.
         [Thomas Lotterer <thomas@lotterer.net>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/README
  ============================================================================
  $ cvs diff -u -r1.101 -r1.102 README
  --- ossp-pkg/shtool/README	12 Feb 2004 16:06:26 -0000	1.101
  +++ ossp-pkg/shtool/README	18 Feb 2004 09:55:01 -0000	1.102
  @@ -10,7 +10,7 @@
     http://www.gnu.org/software/shtool/
     ftp://ftp.gnu.org/gnu/shtool/
   
  -  Version 2.0b0 (12-Feb-2004)
  +  Version 2.0b1 (18-Feb-2004)
   
     The GNU shtool program is a compilation of small but very stable and
     portable shell scripts into a single shell tool. All ingredients
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/VERSION
  ============================================================================
  $ cvs diff -u -r1.76 -r1.77 VERSION
  --- ossp-pkg/shtool/VERSION	12 Feb 2004 16:06:26 -0000	1.76
  +++ ossp-pkg/shtool/VERSION	18 Feb 2004 09:55:01 -0000	1.77
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for GNU shtool (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is GNU shtool, Version 2.0b0 (12-Feb-2004)
  +  This is GNU shtool, Version 2.0b1 (18-Feb-2004)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtool.spec
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 shtool.spec
  --- ossp-pkg/shtool/shtool.spec	1 Jan 2004 16:54:20 -0000	1.19
  +++ ossp-pkg/shtool/shtool.spec	18 Feb 2004 09:55:01 -0000	1.20
  @@ -30,7 +30,7 @@
   %define prefix /usr/local
   %endif
   
  -%define ver 2.0b0
  +%define ver 2.0b1
   %define rel 0
   
   Name:       shtool
  @@ .

From ossp-cvs-owner@ossp.org  Wed Feb 18 10:57:20 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 20B3A77616; Wed, 18 Feb 2004 10:57:20 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ devtool.func
Message-Id: <20040218095720.20B3A77616@mail.ossp.org>
Date: Wed, 18 Feb 2004 10:57:20 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Feb-2004 10:57:19
  Branch: HEAD                             Handle: 2004021809571900

  Modified files:
    ossp-pkg/shtool         devtool.func

  Log:
    disable unused stuff

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-pkg/shtool/devtool.func
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/devtool.func
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 devtool.func
  --- ossp-pkg/shtool/devtool.func	1 Jan 2004 16:54:20 -0000	1.4
  +++ ossp-pkg/shtool/devtool.func	18 Feb 2004 09:57:19 -0000	1.5
  @@ -32,7 +32,7 @@
               autoconf_version=`devtool_require autoconf --version 4 "$1" "$2"`
               echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
               autoconf
  -            autoheader 2>&1 | grep -v "is unchanged"
  +            #autoheader 2>&1 | grep -v "is unchanged"
               rm -rf autom4te.cache >/dev/null 2>&1
               ;;
           libtool )
  @@ .

From ossp-cvs-owner@ossp.org  Fri Feb 27 14:59:34 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8E8CE7766A; Fri, 27 Feb 2004 14:59:33 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-doc/ accounts.txt
Message-Id: <20040227135933.8E8CE7766A@mail.ossp.org>
Date: Fri, 27 Feb 2004 14:59:33 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   27-Feb-2004 14:59:33
  Branch: HEAD                             Handle: 2004022713593200

  Modified files:
    ossp-pkg/as/as-doc      accounts.txt

  Log:
    more accounts

  Summary:
    Revision    Changes     Path
    1.43        +7  -0      ossp-pkg/as/as-doc/accounts.txt
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-doc/accounts.txt
  ============================================================================
  $ cvs diff -u -r1.42 -r1.43 accounts.txt
  --- ossp-pkg/as/as-doc/accounts.txt	21 Jan 2004 14:18:06 -0000	1.42
  +++ ossp-pkg/as/as-doc/accounts.txt	27 Feb 2004 13:59:32 -0000	1.43
  @@ -37,6 +37,7 @@
   R /de/is/com/training/prepare             # [I] Training, Preparation (Circular Lesson, Educational Service, etc)  
   R /de/is/com/training/perform             # [I] Training, Performing  (Circular Lesson, Educational Service, etc)  
   R /de/is/com/training/visit               # [I] Training, Visiting    (Circular Lesson, Educational Service, etc)  
  +R /de/is/com/training/homework            # [I] Training, Homework    (Circular Lesson, Educational Service, etc)  
   R /de/is/com/examination/prepare          # [I] Examination, Preparation (Certifications, etc)
   R /de/is/com/examination/perform          # [I] Examination, Performing  (Certifications, etc)
   R /de/is/com/examination/learning         # [I] Examination, Learning    (Certifications, etc)
  @@ -73,6 +74,12 @@
   R /de/is/com/dns/installation             # [I] DNS Servers, Installation
   R /de/is/com/dns/maintenance              # [I] DNS Servers, Maintenance
   R /de/is/com/dns/security                 # [I] DNS Servers, Security
  +
  +#   GNOC Servers
  +R /de/is/com/gnoc                         # [I] GNOC Servers
  +R /de/is/com/gnoc/installation            # [I] GNOC Servers, Installation
  +R /de/is/com/gnoc/maintenance             # [I] GNOC Servers, Maintenance
  +R /de/is/com/gnoc/security                # [I] GNOC Servers, Security
   
   #   PESP Servers
   R /de/is/com/pesp                         # [I] PESP Servers
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar  5 11:52:53 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 192B6776BB; Fri,  5 Mar 2004 11:52:53 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-doc/ accounts.txt
Message-Id: <20040305105253.192B6776BB@mail.ossp.org>
Date: Fri,  5 Mar 2004 11:52:53 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Mar-2004 11:52:52
  Branch: HEAD                             Handle: 2004030510525200

  Modified files:
    ossp-pkg/as/as-doc      accounts.txt

  Log:
    add more customers

  Summary:
    Revision    Changes     Path
    1.44        +34 -7      ossp-pkg/as/as-doc/accounts.txt
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-doc/accounts.txt
  ============================================================================
  $ cvs diff -u -r1.43 -r1.44 accounts.txt
  --- ossp-pkg/as/as-doc/accounts.txt	27 Feb 2004 13:59:32 -0000	1.43
  +++ ossp-pkg/as/as-doc/accounts.txt	5 Mar 2004 10:52:52 -0000	1.44
  @@ -298,13 +298,22 @@
   R /de/is/cus/strato/troubleshooting       # [E] STRATO, Troubleshooting
   
   #   Customer Tanto Xipolis
  -R /de/is/cus/tanto                        # [E] Tanto Xipolis & Parship, General
  -R /de/is/cus/tanto/meeting                # [E] Tanto Xipolis & Parship, Meeting
  -R /de/is/cus/tanto/offerings              # [E] Tanto Xipolis & Parship, Offerings
  -R /de/is/cus/tanto/consulting             # [E] Tanto Xipolis & Parship, Consulting
  -R /de/is/cus/tanto/evaluation             # [E] Tanto Xipolis & Parship, Evaluation
  -R /de/is/cus/tanto/implementation         # [E] Tanto Xipolis & Parship, Implementation
  -R /de/is/cus/tanto/troubleshooting        # [E] Tanto Xipolis & Parship, Troubleshooting
  +R /de/is/cus/tanto                        # [E] Tanto Xipolis, General
  +R /de/is/cus/tanto/meeting                # [E] Tanto Xipolis, Meeting
  +R /de/is/cus/tanto/offerings              # [E] Tanto Xipolis, Offerings
  +R /de/is/cus/tanto/consulting             # [E] Tanto Xipolis, Consulting
  +R /de/is/cus/tanto/evaluation             # [E] Tanto Xipolis, Evaluation
  +R /de/is/cus/tanto/implementation         # [E] Tanto Xipolis, Implementation
  +R /de/is/cus/tanto/troubleshooting        # [E] Tanto Xipolis, Troubleshooting
  +
  +#   Customer Parship
  +R /de/is/cus/parship                      # [E] Parship, General
  +R /de/is/cus/parship/meeting              # [E] Parship, Meeting
  +R /de/is/cus/parship/offerings            # [E] Parship, Offerings
  +R /de/is/cus/parship/consulting           # [E] Parship, Consulting
  +R /de/is/cus/parship/evaluation           # [E] Parship, Evaluation
  +R /de/is/cus/parship/implementation       # [E] Parship, Implementation
  +R /de/is/cus/parship/troubleshooting      # [E] Parship, Troubleshooting
   
   #   Customer Tenovis
   R /de/is/cus/tenovis                      # [E] Tenovis, General
  @@ -314,6 +323,24 @@
   R /de/is/cus/tenovis/evaluation           # [E] Tenovis, Evaluation
   R /de/is/cus/tenovis/implementation       # [E] Tenovis, Implementation
   R /de/is/cus/tenovis/troubleshooting      # [E] Tenovis, Troubleshooting
  +
  +#   Customer Terramap
  +R /de/is/cus/terramap                     # [E] Terramap, General
  +R /de/is/cus/terramap/meeting             # [E] Terramap, Meeting
  +R /de/is/cus/terramap/offerings           # [E] Terramap, Offerings
  +R /de/is/cus/terramap/consulting          # [E] Terramap, Consulting
  +R /de/is/cus/terramap/evaluation          # [E] Terramap, Evaluation
  +R /de/is/cus/terramap/implementation      # [E] Terramap, Implementation
  +R /de/is/cus/terramap/troubleshooting     # [E] Terramap, Troubleshooting
  +
  +#   Customer Amadeus
  +R /de/is/cus/amadeus                      # [E] Amadeus, General
  +R /de/is/cus/amadeus/meeting              # [E] Amadeus, Meeting
  +R /de/is/cus/amadeus/offerings            # [E] Amadeus, Offerings
  +R /de/is/cus/amadeus/consulting           # [E] Amadeus, Consulting
  +R /de/is/cus/amadeus/evaluation           # [E] Amadeus, Evaluation
  +R /de/is/cus/amadeus/implementation       # [E] Amadeus, Implementation
  +R /de/is/cus/amadeus/troubleshooting      # [E] Amadeus, Troubleshooting
   
   ##
   ##  C&W DE Miscellaneous
  @@ .

From ossp-cvs-owner@ossp.org  Tue Mar  9 14:19:34 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AB937776F0; Tue,  9 Mar 2004 14:19:33 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/petidomo/ Makefile.in README
Message-Id: <20040309131933.AB937776F0@mail.ossp.org>
Date: Tue,  9 Mar 2004 14:19:33 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   09-Mar-2004 14:19:33
  Branch: HEAD                             Handle: 2004030913193300

  Modified files:
    ossp-pkg/petidomo       Makefile.in README

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.48        +1  -1      ossp-pkg/petidomo/Makefile.in
    1.8         +2  -2      ossp-pkg/petidomo/README
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/petidomo/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.47 -r1.48 Makefile.in
  --- ossp-pkg/petidomo/Makefile.in	2 Feb 2004 20:28:54 -0000	1.47
  +++ ossp-pkg/petidomo/Makefile.in	9 Mar 2004 13:19:33 -0000	1.48
  @@ -37,7 +37,7 @@
   		  rfcparse.o subscribe.o tool.o unsubscribe.o main.o	   \
   		  queue-command.o queue-posting.o approve.o address-db.o   \
   		  version.o
  -LIBS		= librfc822/librfc822.a libmpools/libmpools.a              \
  +LIBS		= @LIBS@ librfc822/librfc822.a libmpools/libmpools.a              \
   		  liblists/liblists.a libargv/libargv.a                    \
   		  libconfigfile/libconfigfile.a libtext/libtext.a
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/petidomo/README
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 README
  --- ossp-pkg/petidomo/README	2 Feb 2004 20:19:25 -0000	1.7
  +++ ossp-pkg/petidomo/README	9 Mar 2004 13:19:33 -0000	1.8
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|    | .__/ \___|\__|_|\__,_|\___/|_| |_| |_|\___/ 
                                     |_|                                            
     OSSP petidomo - mailing list manager
  -  Version 4.0b3 (02-Feb-2004)
  +  Version 
   
     ABSTRACT
   
  @@ -88,7 +88,7 @@
     PETI's STATEMENT
   
   		    Petidomo Mailing List Manager
  -			  Version 4.0b3 (02-Feb-2004)
  +			  Version 
   
   
   Greetings citizen,
  @@ .

From ossp-cvs-owner@ossp.org  Tue Mar  9 14:23:47 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A2481776F0; Tue,  9 Mar 2004 14:23:47 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/petidomo/ README devtool.conf version.c
Message-Id: <20040309132347.A2481776F0@mail.ossp.org>
Date: Tue,  9 Mar 2004 14:23:47 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   09-Mar-2004 14:23:47
  Branch: HEAD                             Handle: 2004030913234700

  Modified files:
    ossp-pkg/petidomo       README devtool.conf version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.9         +2  -2      ossp-pkg/petidomo/README
    1.2         +1  -0      ossp-pkg/petidomo/devtool.conf
    1.5         +9  -9      ossp-pkg/petidomo/version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/petidomo/README
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 README
  --- ossp-pkg/petidomo/README	9 Mar 2004 13:19:33 -0000	1.8
  +++ ossp-pkg/petidomo/README	9 Mar 2004 13:23:47 -0000	1.9
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|    | .__/ \___|\__|_|\__,_|\___/|_| |_| |_|\___/ 
                                     |_|                                            
     OSSP petidomo - mailing list manager
  -  Version 
  +  Version 4.0b4 (09-Mar-2004)
   
     ABSTRACT
   
  @@ -88,7 +88,7 @@
     PETI's STATEMENT
   
   		    Petidomo Mailing List Manager
  -			  Version 
  +			  Version 4.0b4 (09-Mar-2004)
   
   
   Greetings citizen,
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/petidomo/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.conf
  --- ossp-pkg/petidomo/devtool.conf	2 Feb 2004 20:19:25 -0000	1.1
  +++ ossp-pkg/petidomo/devtool.conf	9 Mar 2004 13:23:47 -0000	1.2
  @@ -20,6 +20,7 @@
           "$@"
   
   %release
  +    ./devtool autogen
       ./devtool version
       ./devtool tag
       ./devtool dist
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/petidomo/version.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 version.c
  --- ossp-pkg/petidomo/version.c	2 Feb 2004 20:19:36 -0000	1.4
  +++ ossp-pkg/petidomo/version.c	9 Mar 2004 13:23:47 -0000	1.5
  @@ -8,7 +8,7 @@
   #ifndef _VERSION_C_
   #define _VERSION_C_
   
  -#define PETIDOMO_VERSION 0x400103
  +#define PETIDOMO_VERSION 0x400104
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _VERSION_C_AS_HEADER_
   
   petidomo_version_t petidomo_version = {
  -    0x400103,
  -    "4.0b3",
  -    "4.0b3 (02-Feb-2004)",
  -    "This is OSSP petidomo, Version 4.0b3 (02-Feb-2004)",
  -    "OSSP petidomo 4.0b3 (02-Feb-2004)",
  -    "OSSP petidomo/4.0b3",
  -    "@(#)OSSP petidomo 4.0b3 (02-Feb-2004)",
  -    "$Id: version.c,v 1.4 2004/02/02 20:19:36 thl Exp $"
  +    0x400104,
  +    "4.0b4",
  +    "4.0b4 (09-Mar-2004)",
  +    "This is OSSP petidomo, Version 4.0b4 (09-Mar-2004)",
  +    "OSSP petidomo 4.0b4 (09-Mar-2004)",
  +    "OSSP petidomo/4.0b4",
  +    "@(#)OSSP petidomo 4.0b4 (09-Mar-2004)",
  +    "$Id: version.c,v 1.5 2004/03/09 13:23:47 thl Exp $"
   };
   
   #endif /* _VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Tue Mar  9 17:00:28 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 35311776FE; Tue,  9 Mar 2004 17:00:28 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/petidomo/ Makefile.in
Message-Id: <20040309160028.35311776FE@mail.ossp.org>
Date: Tue,  9 Mar 2004 17:00:28 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   09-Mar-2004 17:00:28
  Branch: HEAD                             Handle: 2004030916002700

  Modified files:
    ossp-pkg/petidomo       Makefile.in

  Log:
    @LIBS@ should be at the _end_ of the LIBS definition, not at the
    beginning. Because usually the stuff in the sublibs want to use the
    stuff in @LIBS@ theirself. (hint from rse)

  Summary:
    Revision    Changes     Path
    1.49        +2  -2      ossp-pkg/petidomo/Makefile.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/petidomo/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.48 -r1.49 Makefile.in
  --- ossp-pkg/petidomo/Makefile.in	9 Mar 2004 13:19:33 -0000	1.48
  +++ ossp-pkg/petidomo/Makefile.in	9 Mar 2004 16:00:27 -0000	1.49
  @@ -37,9 +37,9 @@
   		  rfcparse.o subscribe.o tool.o unsubscribe.o main.o	   \
   		  queue-command.o queue-posting.o approve.o address-db.o   \
   		  version.o
  -LIBS		= @LIBS@ librfc822/librfc822.a libmpools/libmpools.a              \
  +LIBS		= librfc822/librfc822.a libmpools/libmpools.a              \
   		  liblists/liblists.a libargv/libargv.a                    \
  -		  libconfigfile/libconfigfile.a libtext/libtext.a
  +		  libconfigfile/libconfigfile.a libtext/libtext.a @LIBS@
   
   .SUFFIXES:
   .SUFFIXES:	.c .o
  @@ .

From ossp-cvs-owner@ossp.org  Wed Mar 10 11:55:18 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BE59C776F9; Wed, 10 Mar 2004 11:55:17 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/petidomo/ README version.c
Message-Id: <20040310105517.BE59C776F9@mail.ossp.org>
Date: Wed, 10 Mar 2004 11:55:17 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   10-Mar-2004 11:55:17
  Branch: HEAD                             Handle: 2004031010551700

  Modified files:
    ossp-pkg/petidomo       README version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.10        +2  -2      ossp-pkg/petidomo/README
    1.6         +9  -9      ossp-pkg/petidomo/version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/petidomo/README
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 README
  --- ossp-pkg/petidomo/README	9 Mar 2004 13:23:47 -0000	1.9
  +++ ossp-pkg/petidomo/README	10 Mar 2004 10:55:17 -0000	1.10
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|    | .__/ \___|\__|_|\__,_|\___/|_| |_| |_|\___/ 
                                     |_|                                            
     OSSP petidomo - mailing list manager
  -  Version 4.0b4 (09-Mar-2004)
  +  Version 4.0b5 (10-Mar-2004)
   
     ABSTRACT
   
  @@ -88,7 +88,7 @@
     PETI's STATEMENT
   
   		    Petidomo Mailing List Manager
  -			  Version 4.0b4 (09-Mar-2004)
  +			  Version 4.0b5 (10-Mar-2004)
   
   
   Greetings citizen,
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/petidomo/version.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 version.c
  --- ossp-pkg/petidomo/version.c	9 Mar 2004 13:23:47 -0000	1.5
  +++ ossp-pkg/petidomo/version.c	10 Mar 2004 10:55:17 -0000	1.6
  @@ -8,7 +8,7 @@
   #ifndef _VERSION_C_
   #define _VERSION_C_
   
  -#define PETIDOMO_VERSION 0x400104
  +#define PETIDOMO_VERSION 0x400105
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _VERSION_C_AS_HEADER_
   
   petidomo_version_t petidomo_version = {
  -    0x400104,
  -    "4.0b4",
  -    "4.0b4 (09-Mar-2004)",
  -    "This is OSSP petidomo, Version 4.0b4 (09-Mar-2004)",
  -    "OSSP petidomo 4.0b4 (09-Mar-2004)",
  -    "OSSP petidomo/4.0b4",
  -    "@(#)OSSP petidomo 4.0b4 (09-Mar-2004)",
  -    "$Id: version.c,v 1.5 2004/03/09 13:23:47 thl Exp $"
  +    0x400105,
  +    "4.0b5",
  +    "4.0b5 (10-Mar-2004)",
  +    "This is OSSP petidomo, Version 4.0b5 (10-Mar-2004)",
  +    "OSSP petidomo 4.0b5 (10-Mar-2004)",
  +    "OSSP petidomo/4.0b5",
  +    "@(#)OSSP petidomo 4.0b5 (10-Mar-2004)",
  +    "$Id: version.c,v 1.6 2004/03/10 10:55:17 thl Exp $"
   };
   
   #endif /* _VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar 18 16:50:35 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E500577757; Thu, 18 Mar 2004 16:50:34 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex/ ChangeLog ex.h
Message-Id: <20040318155034.E500577757@mail.ossp.org>
Date: Thu, 18 Mar 2004 16:50:34 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Mar-2004 16:50:34
  Branch: HEAD                             Handle: 2004031815503400

  Modified files:
    ossp-pkg/ex             ChangeLog ex.h

  Log:
    Constifiy the ex_file and ex_func fields of the exception context
    structure because __FUNCTION__ and __FILE__ are usually (especially
    under strict C99 environments) constant values.
    
    Submitted by: <me@davidyu.org>

  Summary:
    Revision    Changes     Path
    1.8         +5  -0      ossp-pkg/ex/ChangeLog
    1.24        +6  -6      ossp-pkg/ex/ex.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 ChangeLog
  --- ossp-pkg/ex/ChangeLog	9 Feb 2003 18:15:33 -0000	1.7
  +++ ossp-pkg/ex/ChangeLog	18 Mar 2004 15:50:34 -0000	1.8
  @@ -13,6 +13,11 @@
   
     Changes between 1.0.2 and 1.0.3 (30-Jan-2003 to xx-Feb-2003)
   
  +   *) Constifiy the ex_file and ex_func fields of the exception
  +      context structure because __FUNCTION__ and __FILE__ are usually
  +      (especially under strict C99 environments) constant values.
  +      [<me@davidyu.org>]
  +
      *) Fixed test suite library (ts.c): the ts_suite_free()
         function performed an illegal iteration for freeing elements (they
         were freed but still references for traversing to next element).
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ex.h
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 ex.h
  --- ossp-pkg/ex/ex.h	17 Feb 2004 09:14:55 -0000	1.23
  +++ ossp-pkg/ex/ex.h	18 Mar 2004 15:50:34 -0000	1.24
  @@ -82,13 +82,13 @@
   /* declare the exception type (public) */
   typedef struct {
       /* throw value */
  -    void *ex_class;
  -    void *ex_object;
  -    void *ex_value;
  +    void       *ex_class;
  +    void       *ex_object;
  +    void       *ex_value;
       /* throw point */
  -    char *ex_file;
  -    int   ex_line;
  -    char *ex_func;
  +    const char *ex_file;
  +    int         ex_line;
  +    const char *ex_func;
   } ex_t;
   
   /* declare the context type (private) */
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar 18 16:51:17 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4DE3977757; Thu, 18 Mar 2004 16:51:17 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex/ ChangeLog devtool.conf
Message-Id: <20040318155117.4DE3977757@mail.ossp.org>
Date: Thu, 18 Mar 2004 16:51:17 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Mar-2004 16:51:17
  Branch: HEAD                             Handle: 2004031815511600

  Modified files:
    ossp-pkg/ex             ChangeLog devtool.conf

  Log:
    Upgrade build environment to GNU autoconf 2.59 and GNU libtool 1.5.2

  Summary:
    Revision    Changes     Path
    1.9         +3  -0      ossp-pkg/ex/ChangeLog
    1.10        +2  -2      ossp-pkg/ex/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 ChangeLog
  --- ossp-pkg/ex/ChangeLog	18 Mar 2004 15:50:34 -0000	1.8
  +++ ossp-pkg/ex/ChangeLog	18 Mar 2004 15:51:16 -0000	1.9
  @@ -13,6 +13,9 @@
   
     Changes between 1.0.2 and 1.0.3 (30-Jan-2003 to xx-Feb-2003)
   
  +   *) Upgrade build environment to GNU autoconf 2.59 and GNU libtool 1.5.2
  +      [Ralf S. Engelschall]
  +
      *) Constifiy the ex_file and ex_func fields of the exception
         context structure because __FUNCTION__ and __FILE__ are usually
         (especially under strict C99 environments) constant values.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 devtool.conf
  --- ossp-pkg/ex/devtool.conf	6 Jan 2003 15:31:24 -0000	1.9
  +++ ossp-pkg/ex/devtool.conf	18 Mar 2004 15:51:16 -0000	1.10
  @@ -4,8 +4,8 @@
   
   %autogen
       @autogen shtool   1.6.2 "1.6.*" all
  -    @autogen libtool  1.4.3 "1.4*"
  -    @autogen autoconf 2.57  "2.5[3-9]*"
  +    @autogen libtool  1.5.2 "1.4*"
  +    @autogen autoconf 2.59  "2.5[3-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 19 15:52:03 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8EA217775E; Fri, 19 Mar 2004 15:52:03 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ configure.ac
Message-Id: <20040319145203.8EA217775E@mail.ossp.org>
Date: Fri, 19 Mar 2004 15:52:03 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   19-Mar-2004 15:52:03
  Branch: HEAD                             Handle: 2004031914520300

  Modified files:
    ossp-pkg/lmtp2nntp      configure.ac

  Log:
    get rid of "AC_CONFIG_SUBDIRS: you should use literals" warning

  Summary:
    Revision    Changes     Path
    1.35        +9  -1      ossp-pkg/lmtp2nntp/configure.ac
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/configure.ac
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 configure.ac
  --- ossp-pkg/lmtp2nntp/configure.ac	12 Feb 2003 16:13:27 -0000	1.34
  +++ ossp-pkg/lmtp2nntp/configure.ac	19 Mar 2004 14:52:03 -0000	1.35
  @@ -161,7 +161,15 @@
   export enable_shared
   enable_headline=no
   export enable_headline
  -AC_CONFIG_SUBDIRS([$SUBDIR_EX $SUBDIR_STR $SUBDIR_L2 $SUBDIR_SA $SUBDIR_VAR $SUBDIR_VAL $SUBDIR_POPT $SUBDIR_PCRE $SUBDIR_TAI])
  +if test ".$SUBDIR_EX"   != .; then AC_CONFIG_SUBDIRS(lib_ex)   fi
  +if test ".$SUBDIR_STR"  != .; then AC_CONFIG_SUBDIRS(lib_str)  fi
  +if test ".$SUBDIR_L2"   != .; then AC_CONFIG_SUBDIRS(lib_l2)   fi
  +if test ".$SUBDIR_SA"   != .; then AC_CONFIG_SUBDIRS(lib_sa)   fi
  +if test ".$SUBDIR_VAR"  != .; then AC_CONFIG_SUBDIRS(lib_var)  fi
  +if test ".$SUBDIR_VAL"  != .; then AC_CONFIG_SUBDIRS(lib_val)  fi
  +if test ".$SUBDIR_POPT" != .; then AC_CONFIG_SUBDIRS(lib_popt) fi
  +if test ".$SUBDIR_PCRE" != .; then AC_CONFIG_SUBDIRS(lib_pcre) fi
  +if test ".$SUBDIR_TAI"  != .; then AC_CONFIG_SUBDIRS(lib_tai)  fi
   
   dnl #   standard output generation
   AC_CONFIG_HEADERS(config.h)
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 19 15:55:53 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EE32E7775E; Fri, 19 Mar 2004 15:55:52 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex/ devtool devtool.conf devtool.func ossp-pkg/l2...
Message-Id: <20040319145552.EE32E7775E@mail.ossp.org>
Date: Fri, 19 Mar 2004 15:55:52 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   19-Mar-2004 15:55:52
  Branch: HEAD                             Handle: 2004031914554606

  Modified files:
    ossp-pkg/ex             devtool devtool.conf devtool.func
    ossp-pkg/l2             devtool.conf
    ossp-pkg/lmtp2nntp      devtool.conf
    ossp-pkg/pcre           devtool devtool.conf devtool.func
    ossp-pkg/popt           devtool devtool.conf devtool.func
    ossp-pkg/sa             devtool devtool.conf devtool.func
    ossp-pkg/str            devtool.conf devtool.func
    ossp-pkg/tai            devtool devtool.conf devtool.func
    ossp-pkg/val            devtool devtool.conf devtool.func
    ossp-pkg/var            devtool devtool.conf devtool.func

  Log:
    Upgrade and unify build environment devtool an devtool.func; change
    devtool.conf to require current versions of shtool, libtool and
    autoconf

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/ex/devtool
    1.11        +2  -2      ossp-pkg/ex/devtool.conf
    1.3         +3  -3      ossp-pkg/ex/devtool.func
    1.14        +2  -2      ossp-pkg/l2/devtool.conf
    1.17        +1  -1      ossp-pkg/lmtp2nntp/devtool.conf
    1.2         +1  -1      ossp-pkg/pcre/devtool
    1.8         +2  -2      ossp-pkg/pcre/devtool.conf
    1.5         +1  -1      ossp-pkg/pcre/devtool.func
    1.3         +1  -1      ossp-pkg/popt/devtool
    1.5         +2  -2      ossp-pkg/popt/devtool.conf
    1.3         +3  -3      ossp-pkg/popt/devtool.func
    1.3         +1  -1      ossp-pkg/sa/devtool
    1.21        +2  -2      ossp-pkg/sa/devtool.conf
    1.4         +3  -3      ossp-pkg/sa/devtool.func
    1.5         +2  -2      ossp-pkg/str/devtool.conf
    1.5         +2  -2      ossp-pkg/str/devtool.func
    1.3         +1  -1      ossp-pkg/tai/devtool
    1.4         +2  -2      ossp-pkg/tai/devtool.conf
    1.2         +3  -3      ossp-pkg/tai/devtool.func
    1.4         +1  -1      ossp-pkg/val/devtool
    1.11        +3  -3      ossp-pkg/val/devtool.conf
    1.4         +3  -3      ossp-pkg/val/devtool.func
    1.4         +1  -1      ossp-pkg/var/devtool
    1.9         +3  -3      ossp-pkg/var/devtool.conf
    1.5         +3  -3      ossp-pkg/var/devtool.func
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/devtool
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 devtool
  --- ossp-pkg/ex/devtool	10 Feb 2003 10:13:20 -0000	1.2
  +++ ossp-pkg/ex/devtool	19 Mar 2004 14:55:46 -0000	1.3
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  devtool -- Development Tool
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   if [ $# -eq 0 ]; then
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 devtool.conf
  --- ossp-pkg/ex/devtool.conf	18 Mar 2004 15:51:16 -0000	1.10
  +++ ossp-pkg/ex/devtool.conf	19 Mar 2004 14:55:46 -0000	1.11
  @@ -4,8 +4,8 @@
   
   %autogen
       @autogen shtool   1.6.2 "1.6.*" all
  -    @autogen libtool  1.5.2 "1.4*"
  -    @autogen autoconf 2.59  "2.5[3-9]*"
  +    @autogen libtool  1.5.2 "1.5*"
  +    @autogen autoconf 2.59  "2.5[4-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/devtool.func
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.func
  --- ossp-pkg/ex/devtool.func	14 Mar 2002 15:12:49 -0000	1.2
  +++ ossp-pkg/ex/devtool.func	19 Mar 2004 14:55:46 -0000	1.3
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   devtool_require () {
  @@ -14,10 +14,10 @@
           $e )
               ;;
           $a )
  -            echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
  +            echo "devtool:WARNING: $t version $v accepted, but expected $e." 1>&2
               ;;
           * )
  -            echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
  +            echo "devtool:ERROR: $t version $v NOT acceptable, requires $e." 1>&2
               exit 1
               ;;
       esac
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 devtool.conf
  --- ossp-pkg/l2/devtool.conf	17 Nov 2003 10:37:04 -0000	1.13
  +++ ossp-pkg/l2/devtool.conf	19 Mar 2004 14:55:47 -0000	1.14
  @@ -30,8 +30,8 @@
   
   %autogen
       @autogen shtool   1.6.2 "1.6.*" echo fixperm install mkdir tarball version
  -    @autogen libtool  1.5   "1.[45]*"
  -    @autogen autoconf 2.58  "2.5[4-9]*"
  +    @autogen libtool  1.5.2 "1.5*"
  +    @autogen autoconf 2.59  "2.5[4-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 devtool.conf
  --- ossp-pkg/lmtp2nntp/devtool.conf	13 Feb 2003 10:00:52 -0000	1.16
  +++ ossp-pkg/lmtp2nntp/devtool.conf	19 Mar 2004 14:55:46 -0000	1.17
  @@ -11,7 +11,7 @@
   
   %autogen
       @autogen shtool   1.6.2 "1.6.*" all
  -    @autogen autoconf 2.57  "2.5[3-9]*"
  +    @autogen autoconf 2.59  "2.5[4-9]*"
   
       for name in ex str l2 sa var val popt pcre tai; do
           echo "===> lib_${name} (devtool autogen)"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pcre/devtool
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 devtool
  --- ossp-pkg/pcre/devtool	7 Jan 2002 14:51:32 -0000	1.1
  +++ ossp-pkg/pcre/devtool	19 Mar 2004 14:55:47 -0000	1.2
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  devtool -- Development Tool
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   if [ $# -eq 0 ]; then
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pcre/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 devtool.conf
  --- ossp-pkg/pcre/devtool.conf	17 Nov 2003 10:37:04 -0000	1.7
  +++ ossp-pkg/pcre/devtool.conf	19 Mar 2004 14:55:47 -0000	1.8
  @@ -4,8 +4,8 @@
   
   %autogen
       @autogen shtool   1.6.2 "1.6.*" echo fixperm install mkdir tarball version
  -    @autogen libtool  1.5   "1.[45]*"
  -    @autogen autoconf 2.58  "2.5[4-9]*"
  +    @autogen libtool  1.5.2 "1.5*"
  +    @autogen autoconf 2.59  "2.5[4-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pcre/devtool.func
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 devtool.func
  --- ossp-pkg/pcre/devtool.func	10 Feb 2003 10:13:25 -0000	1.4
  +++ ossp-pkg/pcre/devtool.func	19 Mar 2004 14:55:47 -0000	1.5
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   devtool_require () {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/popt/devtool
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 devtool
  --- ossp-pkg/popt/devtool	10 Feb 2003 10:13:27 -0000	1.2
  +++ ossp-pkg/popt/devtool	19 Mar 2004 14:55:48 -0000	1.3
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  devtool -- Development Tool
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   if [ $# -eq 0 ]; then
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/popt/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 devtool.conf
  --- ossp-pkg/popt/devtool.conf	30 Jan 2003 19:07:01 -0000	1.4
  +++ ossp-pkg/popt/devtool.conf	19 Mar 2004 14:55:48 -0000	1.5
  @@ -4,8 +4,8 @@
   
   %autogen
       @autogen shtool   1.6.2 "1.6.*" all
  -    @autogen libtool  1.4.3 "1.4*"
  -    @autogen autoconf 2.57  "2.5[3-9]*"
  +    @autogen libtool  1.5.2 "1.5*"
  +    @autogen autoconf 2.59  "2.5[4-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/popt/devtool.func
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.func
  --- ossp-pkg/popt/devtool.func	14 Mar 2002 15:34:44 -0000	1.2
  +++ ossp-pkg/popt/devtool.func	19 Mar 2004 14:55:48 -0000	1.3
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   devtool_require () {
  @@ -14,10 +14,10 @@
           $e )
               ;;
           $a )
  -            echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
  +            echo "devtool:WARNING: $t version $v accepted, but expected $e." 1>&2
               ;;
           * )
  -            echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
  +            echo "devtool:ERROR: $t version $v NOT acceptable, requires $e." 1>&2
               exit 1
               ;;
       esac
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/devtool
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 devtool
  --- ossp-pkg/sa/devtool	24 Oct 2001 13:37:36 -0000	1.2
  +++ ossp-pkg/sa/devtool	19 Mar 2004 14:55:49 -0000	1.3
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  devtool -- Development Tool
  -##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   if [ $# -eq 0 ]; then
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 devtool.conf
  --- ossp-pkg/sa/devtool.conf	10 Nov 2003 18:57:43 -0000	1.20
  +++ ossp-pkg/sa/devtool.conf	19 Mar 2004 14:55:49 -0000	1.21
  @@ -4,8 +4,8 @@
   
   %autogen
       @autogen shtool   1.6.2 "1.6.*" all
  -    @autogen libtool  1.5   "1.5*"
  -    @autogen autoconf 2.58  "2.5[3-9]*"
  +    @autogen libtool  1.5.2 "1.5*"
  +    @autogen autoconf 2.59  "2.5[4-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/devtool.func
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.func
  --- ossp-pkg/sa/devtool.func	14 Mar 2002 15:39:43 -0000	1.3
  +++ ossp-pkg/sa/devtool.func	19 Mar 2004 14:55:49 -0000	1.4
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   devtool_require () {
  @@ -14,10 +14,10 @@
           $e )
               ;;
           $a )
  -            echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
  +            echo "devtool:WARNING: $t version $v accepted, but expected $e." 1>&2
               ;;
           * )
  -            echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
  +            echo "devtool:ERROR: $t version $v NOT acceptable, requires $e." 1>&2
               exit 1
               ;;
       esac
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 devtool.conf
  --- ossp-pkg/str/devtool.conf	6 Jan 2003 19:13:47 -0000	1.4
  +++ ossp-pkg/str/devtool.conf	19 Mar 2004 14:55:50 -0000	1.5
  @@ -4,8 +4,8 @@
   
   %autogen
       @autogen shtool   1.6.2 "1.6.*" echo install mkdir fixperm tarball version
  -    @autogen libtool  1.4.3 "1.4*"
  -    @autogen autoconf 2.57  "2.5[3-9]*"
  +    @autogen libtool  1.5.2 "1.5*"
  +    @autogen autoconf 2.59  "2.5[4-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/devtool.func
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 devtool.func
  --- ossp-pkg/str/devtool.func	6 Jan 2003 19:13:47 -0000	1.4
  +++ ossp-pkg/str/devtool.func	19 Mar 2004 14:55:50 -0000	1.5
  @@ -14,10 +14,10 @@
           $e )
               ;;
           $a )
  -            echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
  +            echo "devtool:WARNING: $t version $v accepted, but expected $e." 1>&2
               ;;
           * )
  -            echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
  +            echo "devtool:ERROR: $t version $v NOT acceptable, requires $e." 1>&2
               exit 1
               ;;
       esac
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/tai/devtool
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 devtool
  --- ossp-pkg/tai/devtool	10 Feb 2003 10:13:33 -0000	1.2
  +++ ossp-pkg/tai/devtool	19 Mar 2004 14:55:51 -0000	1.3
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  devtool -- Development Tool
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   if [ $# -eq 0 ]; then
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/tai/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.conf
  --- ossp-pkg/tai/devtool.conf	30 Jan 2003 19:07:20 -0000	1.3
  +++ ossp-pkg/tai/devtool.conf	19 Mar 2004 14:55:51 -0000	1.4
  @@ -4,8 +4,8 @@
   
   %autogen
       @autogen shtool   1.6.2 "1.6.*" all
  -    @autogen libtool  1.4.3 "1.4*"
  -    @autogen autoconf 2.57  "2.5[3-9]*"
  +    @autogen libtool  1.5.2 "1.5*"
  +    @autogen autoconf 2.59  "2.5[4-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/tai/devtool.func
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 devtool.func
  --- ossp-pkg/tai/devtool.func	18 Apr 2002 09:10:46 -0000	1.1.1.1
  +++ ossp-pkg/tai/devtool.func	19 Mar 2004 14:55:51 -0000	1.2
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   devtool_require () {
  @@ -14,10 +14,10 @@
           $e )
               ;;
           $a )
  -            echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
  +            echo "devtool:WARNING: $t version $v accepted, but expected $e." 1>&2
               ;;
           * )
  -            echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
  +            echo "devtool:ERROR: $t version $v NOT acceptable, requires $e." 1>&2
               exit 1
               ;;
       esac
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/devtool
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 devtool
  --- ossp-pkg/val/devtool	17 Feb 2003 14:35:24 -0000	1.3
  +++ ossp-pkg/val/devtool	19 Mar 2004 14:55:51 -0000	1.4
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  devtool -- Development Tool
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   if [ $# -eq 0 ]; then
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 devtool.conf
  --- ossp-pkg/val/devtool.conf	17 Feb 2003 14:41:59 -0000	1.10
  +++ ossp-pkg/val/devtool.conf	19 Mar 2004 14:55:51 -0000	1.11
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.2 "1.[56].*" all
  -    @autogen libtool  1.4.3 "1.4*"
  -    @autogen autoconf 2.57  "2.5[3-9]*"
  +    @autogen shtool   1.6.2 "1.6.*" all
  +    @autogen libtool  1.5.2 "1.5*"
  +    @autogen autoconf 2.59  "2.5[4-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/devtool.func
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.func
  --- ossp-pkg/val/devtool.func	17 Feb 2003 14:35:25 -0000	1.3
  +++ ossp-pkg/val/devtool.func	19 Mar 2004 14:55:51 -0000	1.4
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   devtool_require () {
  @@ -14,10 +14,10 @@
           $e )
               ;;
           $a )
  -            echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
  +            echo "devtool:WARNING: $t version $v accepted, but expected $e." 1>&2
               ;;
           * )
  -            echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
  +            echo "devtool:ERROR: $t version $v NOT acceptable, requires $e." 1>&2
               exit 1
               ;;
       esac
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/devtool
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 devtool
  --- ossp-pkg/var/devtool	14 Feb 2003 21:17:07 -0000	1.3
  +++ ossp-pkg/var/devtool	19 Mar 2004 14:55:52 -0000	1.4
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  devtool -- Development Tool
  -##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   if [ $# -eq 0 ]; then
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 devtool.conf
  --- ossp-pkg/var/devtool.conf	24 Oct 2003 18:24:35 -0000	1.8
  +++ ossp-pkg/var/devtool.conf	19 Mar 2004 14:55:52 -0000	1.9
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.2 "1.[56].*" all
  -    @autogen libtool  1.5   "1.5*"
  -    @autogen autoconf 2.57  "2.5[3-9]*"
  +    @autogen shtool   1.6.2 "1.6.*" all
  +    @autogen libtool  1.5.2 "1.5*"
  +    @autogen autoconf 2.59  "2.5[4-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/devtool.func
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 devtool.func
  --- ossp-pkg/var/devtool.func	14 Feb 2003 21:17:07 -0000	1.4
  +++ ossp-pkg/var/devtool.func	19 Mar 2004 14:55:52 -0000	1.5
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   devtool_require () {
  @@ -14,10 +14,10 @@
           $e )
               ;;
           $a )
  -            echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
  +            echo "devtool:WARNING: $t version $v accepted, but expected $e." 1>&2
               ;;
           * )
  -            echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
  +            echo "devtool:ERROR: $t version $v NOT acceptable, requires $e." 1>&2
               exit 1
               ;;
       esac
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 19 16:31:20 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1CDD977759; Fri, 19 Mar 2004 16:31:20 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ devtool devtool.conf devtool.func
Message-Id: <20040319153120.1CDD977759@mail.ossp.org>
Date: Fri, 19 Mar 2004 16:31:20 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   19-Mar-2004 16:31:19
  Branch: HEAD                             Handle: 2004031915311900

  Modified files:
    ossp-pkg/fsl            devtool devtool.conf devtool.func

  Log:
    Upgrade and unify build environment devtool an devtool.func; change
    devtool.conf to require current versions of shtool, libtool and
    autoconf

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/fsl/devtool
    1.22        +2  -2      ossp-pkg/fsl/devtool.conf
    1.4         +1  -1      ossp-pkg/fsl/devtool.func
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/devtool
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 devtool
  --- ossp-pkg/fsl/devtool	22 May 2003 14:01:55 -0000	1.2
  +++ ossp-pkg/fsl/devtool	19 Mar 2004 15:31:19 -0000	1.3
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  devtool -- Development Tool
  -##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   if [ $# -eq 0 ]; then
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 devtool.conf
  --- ossp-pkg/fsl/devtool.conf	17 Nov 2003 10:37:03 -0000	1.21
  +++ ossp-pkg/fsl/devtool.conf	19 Mar 2004 15:31:19 -0000	1.22
  @@ -11,8 +11,8 @@
   
   %autogen
       @autogen shtool   1.6.2 "1.6.*" echo fixperm install mkdir tarball version
  -    @autogen libtool  1.5 "1.[45]*"
  -    @autogen autoconf 2.58  "2.5[4-9]*"
  +    @autogen libtool  1.5.2 "1.5*"
  +    @autogen autoconf 2.59  "2.5[4-9]*"
   
       for name in l2 cfg pcre; do
           echo "===> lib_${name} (devtool autogen)"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/devtool.func
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.func
  --- ossp-pkg/fsl/devtool.func	22 May 2003 14:01:55 -0000	1.3
  +++ ossp-pkg/fsl/devtool.func	19 Mar 2004 15:31:19 -0000	1.4
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   devtool_require () {
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 19 16:31:23 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5C8DD77763; Fri, 19 Mar 2004 16:31:23 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/petidomo/ devtool devtool.conf devtool.func
Message-Id: <20040319153123.5C8DD77763@mail.ossp.org>
Date: Fri, 19 Mar 2004 16:31:23 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   19-Mar-2004 16:31:23
  Branch: HEAD                             Handle: 2004031915312200

  Modified files:
    ossp-pkg/petidomo       devtool devtool.conf devtool.func

  Log:
    Upgrade and unify build environment devtool an devtool.func; change
    devtool.conf to require current versions of shtool, libtool and
    autoconf

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/petidomo/devtool
    1.3         +1  -1      ossp-pkg/petidomo/devtool.conf
    1.2         +3  -3      ossp-pkg/petidomo/devtool.func
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/petidomo/devtool
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 devtool
  --- ossp-pkg/petidomo/devtool	2 Feb 2004 20:19:25 -0000	1.1
  +++ ossp-pkg/petidomo/devtool	19 Mar 2004 15:31:22 -0000	1.2
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  devtool -- Development Tool
  -##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   if [ $# -eq 0 ]; then
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/petidomo/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.conf
  --- ossp-pkg/petidomo/devtool.conf	9 Mar 2004 13:23:47 -0000	1.2
  +++ ossp-pkg/petidomo/devtool.conf	19 Mar 2004 15:31:22 -0000	1.3
  @@ -5,7 +5,7 @@
   %autogen
       @autogen shtool   1.6.2 "1.6.*" all
       @autogen libtool  1.5.2 "1.5*"
  -    @autogen autoconf 2.59  "2.5[3-9]*"
  +    @autogen autoconf 2.59  "2.5[4-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/petidomo/devtool.func
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.func
  --- ossp-pkg/petidomo/devtool.func	2 Feb 2004 20:19:25 -0000	1.1
  +++ ossp-pkg/petidomo/devtool.func	19 Mar 2004 15:31:22 -0000	1.2
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   devtool_require () {
  @@ -14,10 +14,10 @@
           $e )
               ;;
           $a )
  -            echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
  +            echo "devtool:WARNING: $t version $v accepted, but expected $e." 1>&2
               ;;
           * )
  -            echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
  +            echo "devtool:ERROR: $t version $v NOT acceptable, requires $e." 1>&2
               exit 1
               ;;
       esac
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 19 16:32:53 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0779877759; Fri, 19 Mar 2004 16:32:52 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/petidomo/ .cvsignore configure.in
Message-Id: <20040319153252.0779877759@mail.ossp.org>
Date: Fri, 19 Mar 2004 16:32:52 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   19-Mar-2004 16:32:52
  Branch: HEAD                             Handle: 2004031915325200

  Modified files:
    ossp-pkg/petidomo       .cvsignore configure.in

  Log:
    shut up autoheader

  Summary:
    Revision    Changes     Path
    1.5         +5  -6      ossp-pkg/petidomo/.cvsignore
    1.12        +3  -1      ossp-pkg/petidomo/configure.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/petidomo/.cvsignore
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 .cvsignore
  --- ossp-pkg/petidomo/.cvsignore	2 Feb 2004 20:19:25 -0000	1.4
  +++ ossp-pkg/petidomo/.cvsignore	19 Mar 2004 15:32:52 -0000	1.5
  @@ -1,9 +1,8 @@
  -configure config.log config.cache config.status Makefile
  +config.log config.cache config.status Makefile
  +config.h
  +shtool
  +ltmain.sh libtool.m4 config.guess config.sub
  +configure config.h.in
   acl.c acl-scan.c acl-scan.h
   petidomo
   petidomo.1
  -config.guess
  -config.sub
  -libtool.m4
  -ltmain.sh
  -shtool
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/petidomo/configure.in
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 configure.in
  --- ossp-pkg/petidomo/configure.in	2 Feb 2004 20:19:25 -0000	1.11
  +++ ossp-pkg/petidomo/configure.in	19 Mar 2004 15:32:52 -0000	1.12
  @@ -1,7 +1,7 @@
   dnl
   dnl configure.in -- Process this file with autoconf to produce a configure script.
   dnl
  -dnl $Header: /e/ossp/cvs/ossp-pkg/petidomo/configure.in,v 1.11 2004/02/02 20:19:25 thl Exp $
  +dnl $Header: /e/ossp/cvs/ossp-pkg/petidomo/configure.in,v 1.12 2004/03/19 15:32:52 thl Exp $
   dnl
   
   AC_INIT(petidomo.h)
  @@ -49,3 +49,5 @@
   dnl Write results.
   dnl
   AC_OUTPUT(Makefile)
  +AC_CONFIG_HEADERS(config.h)
  +
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 19 16:36:13 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A8DCB77759; Fri, 19 Mar 2004 16:36:12 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/petidomo/ petidomo.pod
Message-Id: <20040319153612.A8DCB77759@mail.ossp.org>
Date: Fri, 19 Mar 2004 16:36:12 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   19-Mar-2004 16:36:12
  Branch: HEAD                             Handle: 2004031915361200

  Modified files:
    ossp-pkg/petidomo       petidomo.pod

  Log:
    documentation update and rewrite by Torsten Homeyer

  Summary:
    Revision    Changes     Path
    1.2         +1373 -27   ossp-pkg/petidomo/petidomo.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/petidomo/petidomo.pod
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 petidomo.pod
  --- ossp-pkg/petidomo/petidomo.pod	20 Jan 2001 13:34:57 -0000	1.1
  +++ ossp-pkg/petidomo/petidomo.pod	19 Mar 2004 15:36:12 -0000	1.2
  @@ -27,11 +27,13 @@
   
   =head1 SYNOPSIS
   
  -B<petidomo>
  -[B<--mode=>I<MODE>]
  -[B<--listname=>I<NAME>]
  -[B<--masterconf=>I<FILE>]
  -[B<--approved>]
  +B<petidomo> B<--mode=>I<deliver|dump> B<--listname=>I<NAME> [B<--masterconf=>I<FILE>]
  +
  +B<petidomo> B<--mode=>I<listserv> [B<--listname=>I<NAME>] [B<--masterconf=>I<FILE>]
  +
  +B<petidomo> B<--mode=>I<approve> [B<--masterconf=>I<FILE>]
  +
  +B<petidomo> [B<--approved>]
   
   =head1 DESCRIPTION
   
  @@ -41,37 +43,104 @@
   still performed by an MTA like B<Sendmail>.
   
   B<Petidomo> provides only the most important features of B<Majordomo>, but
  -is 
  +should be considered as rather complete. It will handle nearly most of the
  +task you come across in handling several mailing lists.
   
   =head1 COMMAND LINE OPTIONS
   
  -The C<petidomo> program provides the following command line options:
  +The B<Petidomo> program provides the following command line options:
   
   =over 4
   
  -=item B<--masterconf>=I<FILE>
  +=item B<--mode>=I<MODE>
   
  -The path to the global B<Petidomo> configuration file.
  +The mode parameter is the only mandatory parameter and it will
  +determine what mode B<Petidomo> runs in:
  +I<listserv>, I<deliver>, I<approve>, I<dump>.
   
  -=item B<--mode>=I<MODE>
  +=over 4
  +
  +=item I<listserv>
   
  -...
  +In this mode, B<Petidomo> will expect to read an e-mail from standard
  +input, which contains commands like I<subscribe>, I<index> or
  +I<help>. These commands will be carried out and notifications be sent
  +back to the mail's originator if apropriate.
  +
  +=item I<deliver>
  +
  +This mode will cause B<Petidomo> to read the incoming e-mail from
  +standard input and post it to the mailing list, which's name has been
  +provided via the I<listname> option.
  +
  +=item I<approve>
  +
  +When running in this mode, B<Petidomo> will read the incoming mail from
  +standard input and search for any cookies that mail might contain.
  +If it does, it checks the I<ack-queue> for a mail that has been deferred
  +until confirmation that matches that cookie and processes the mail.
  +
  +=item I<dump>
  +
  +In this mode, B<Petidomo> will expect the name of a mailing list on
  +the command line --- the I<listname> option --- and dump the list of
  +subscribed addresses on that list to standart output.
  +
  +=back
   
   =item B<--listname>=I<NAME>
   
  -...
  +The name of the mailing list B<Petidomo> should work on.
  +
  +=item B<--masterconf>=I<FILE>
  +
  +Using this parameter you can tell Petidomo to use a different location
  +for the master config file than the one that has been compiled in.
   
   =item B<--approved>
   
  -...
  +This flag is for internal purposes and should not be specified by the
  +administrator. It will tell Petidomo that, whatever it is supposed to
  +do now, is the result of a received confirmation cookie. This will
  +effectively tell the checks for posting (in B<ListType> I<acknowledged>
  +and I<acknowledged-once> mode) and un-/subscription (in B<SubscriptionType>
  +I<acknowledged> mode) that everything is fine and that the request should
  +be carried out.
   
   =back
   
   =head1 CONFIGURATION
   
  -=head2 Global Configuration
  +=head2 Petidomo Global Configuration
  +
  +The global B<Petidomo> configuration is stored in
  +B<@PREFIX@/etc/petidomo/petidomo.conf>.
  +
  +=head2 Syntax
  +
  +=over 4
  +
  +=over 4
  +
  +B<keyword       parameter>
  +
  +=back
  +
  +=back
  +
  +If the parameter contains any blank characters, it has to be quoted, ie.:
   
  -The global B<Petidomo> configuration provides the following directives:
  +=over 4
  +
  +=over 4
  +
  +B<AdminPassword     "open sesame">
  +
  +=back
  +
  +=back
  +
  +=head2 The following directives are supported:
   
   =over 4
   
  @@ -80,7 +149,9 @@
   This entry specifies the fully qualified domain name, B<Petidomo>
   should use. This will usually be the FQDN of the machine the software
   is running on. This option is mandatory. B<Petidomo> will abort with an
  -error, if it is unset. Example: C<Hostname petidomo.example.org>
  +error, if it is unset.
  +
  +Example: B<Hostname petidomo.example.org>
   
   =item B<AdminPassword> I<string>
   
  @@ -89,31 +160,1306 @@
   Knowledge of the master password will enable you to access ALL mailing
   lists running on this system. Passwords are always case-insensitive.
   This option is mandatory. B<Petidomo> will abort with an error, if it is
  -unset. Example: C<AdminPassword "open sesame">
  +unset.
  +
  +Example: B<AdminPassword    "open sesame">
  +
  +=item B<MTA> I<string>
  +
  +The MTA tag tells Petidomo which mail transport agent should be used
  +to deliver outgoing emails. Normally this option has been set by the
  +install script already, so you don't need to worry about this anymore.
  +
  +Example: B<MTA     @PREFIX@/sendmail">
  +
  +but Petidomo will run fine with other mail transport agents, too. So
  +far, the system has been tested with the Allman sendmail, SMail and
  +qmail without any problems.
  +This option is required. B<Petidomo> will abort with an error,
  +if the master config file doesn't set it.
  +
  +=item B<MTAOptions> I<string>
  +
  +This tag is a bit tricky and in ninety-nine out of hundred cases you
  +should simply leave this option undefined as it is rarely required 
  +anyway.
  +This entry sets the options which will be handed over to the MTA
  +when it is called. You usually won't change this.
  +
  +Example: B<MTAOptions   "-odq -i -f%s">
  +
  +This will yield a call "$<$MTA$>$ -odq -i -f$<$envelope$>$". The `\%s' is
  +replaced with the envelope the mail should be sent under.
  +
  +Adding options to the execution call of the mail transport agent can
  +be useful to enable or disable certain features for mailing lists
  +only, while leaving them on for all other mail. The `-odq' setting is
  +a fine example. This parameter will tell the Allmann sendmail to queue
  +all mail, instead of trying to deliver it immediately.
  +
  +=item B<ListDirectory> I<string>
  +
  +Here you can tell B<Petidomo> the path to the directory where the mailing
  +list config files reside. The compiled-in default is B<@PREFIX@/etc/petidomo>.
  +When B<Petidomo> tries to find the configuration of list, say, "foobar",
  +it will look for any of the following files in this directory:
  +I<foobar.conf, foobar.config, foobar/conf or foobar/config>.
  +
  +=item B<AckQueueDirectory> I<string>
  +
  +This tag will tell B<Petidomo> where to store files that need to be
  +queued for later processing --- for example subscribe requests that
  +need to be acknowledged by the user before they'll be carried out. The
  +default location is B<@PREFIX@/var/petidomo>.
  +Please note that Petidomo will need permission to write to that directory
  +in order for things to work.
  +
  +=item B<HelpFile> I<string>
  +
  +This tag will tell B<Petidomo> where to find the text file that will be
  +sent back to a user sending in a B<help> command. The default
  +location is B<@PREFIX@/etc/petidomo/petidomo.help>.
  +
  +=item B<IndexFile> I<string>
  +
  +Similarly to "HelpFile" this tag will tell B<Petidomo> where to find
  +the text file that will be sent back to a user requesting the server's
  +"index". The default location is B<@PREFIX@/etc/petidomo/petidomo.index>.
  +
  +=item B<ACLFilePre>  I<string>
  +
  +=item B<ACLFilePost> I<string>
  +
  +This tags tell B<Petidomo> the path to the system-wide ACL files for pre-
  +and postprocessing. The default location is
  +B<@PREFIX@/etc/petidomo/petidomo.acl-[pre|post]>.
  +This ACLs will be run against all incoming mails first before the mail is
  +checked against the list specific ACLs.
  +Rules from an ACL-Pre file will be matched against incoming mail before certain
  +processing in lists with ListType I<acknowledged> and I<acknowledged-once>
  +mode set will take place.
  +The rules in an ACL-Post file is matched against the original posting after the
  +approval process.
  +
  +=back
  +
  +=head2 Petidomo List Configuration
  +
  +While the master config file sets options which are relevant for the
  +B<Petidomo> package as a whole, the list config file sets options which
  +are valid only locally for the mailing list.
  +
  +The list specific configuration is stored in
  +B<@PREFIX@/etc/petidomo/$listname.conf>.
  +
  +=head2 Syntax
  +
  +=over 4
  +
  +=over 4
  +
  +B<keyword       parameter>
  +
  +=back
  +
  +=back
  +
  +If the parameter contains any blank characters, it has to be quoted, ie.:
  +
  +=over 4
  +
  +=over 4
  +
  +B<AdminPassword     "open sesame">
  +
  +=back
  +
  +=back
  +
  +=head2 The supported keywords are as follows :
  +
  +=over 4
  +
  +=item B<ListType> I<open | closed | moderated | acknowledged |  acknowledged-once>
  +
  +
  +This option tells B<Petidomo> who is allowed to post to the mailing
  +list.
  +
  +If this option is unset, the default is to run an open list.
  +
  +=over 4
  +
  +=item I<open>
  +
  +On this type mailing list, everybody is allowed to post, whether he's
  +subscribed or not.
  +
  +=item I<closed>
  +
  +In this case only subscribers are allowed to post. That means that
  +only mails coming from an address found on the list's address
  +database will go through.  All other mails will be sent back to the
  +person trying to post with the comment that he should subscribe first.
  +
  +Please note that a closed list may not do exactly what you want,
  +because when a person is subscribed to a list as
  +C<"example@address.net">, but tries to post from a different account
  +than that one, Petidomo will not let him post. It tries to recognize
  +this case as far as possible: For example, it doesn't matter whether
  +you are posting from C<"address@host1.address.net"> or
  +C<"address@host2.address.net">, B<Petidomo> will handle that. But if
  +the article comes from C<"example@private.account">, it will be rejected,
  +even though the sender might be a valid subscriber. It depends on the
  +subscribers of the mailing list, whether this is a problem or not.
  +
  +=item I<acknowledged>
  +
  +=item I<acknowledged-once>
  +
  +These types are better ways off keeping spam off your lists.
  +In this case every time someone tries to post, he will get a short
  +reply back which contains some cryptographic cookies. Furthermore
  +the mail will tell him to please concatenate the cookies and sent it
  +back B<Petidomo>.  Once that is accomplished, B<Petidomo> will let
  +the posting pass.
  +
  +This means that only people will be able to post, that have a valid
  +envelope or from address --- something spammers usually do not. Since
  +the request for confirmation never reaches them, their postings will
  +not go through. Everybody else can acknoledge the posting by sending
  +the cookie back and thus get by that hurdle.
  +
  +The difference between the I<acknowledged> and I<acknowledged-once>
  +mode is, that in the latter mode, people have to send that
  +confirmation back only B<once>, while in the first mode, they have
  +to send it in every time they're trying to post. B<Petidomo> will keep a
  +database of addresses that have been confirmed by that mechanism and
  +these addresses are allowed to post from now on without having to
  +confirm their posting again. Please note that this list of addresses
  +is not related to the list of subscribers!
  +
  +=item I<moderated>
  +
  +Here nobody is allowed to post unless he can provide the correct
  +posting- or administrator password for the list.
  +
  +=back
  +
  +=item B<SubscriptionType>    I<public | admin | acknowledged>
  +
  +This option specifies who may subscribe to a mailing list.
  +
  +If this option is unset, the default will allow public subscription.
  +
  +=over 4
  +
  +=item I<public>
  +
  +In this case anybody may subscribe any address to the list.
  +
  +=item I<admin>
  +
  +Only the person knowing the admin password of the mailing list is allowed
  +to subscribe or unsubscribe addresses. All other requests that aren't properly
  +authenticated will be forwarded to the list owner for approval.
  +
  +=item I<acknowledged>
  +
  +Anybody can issue a subscribe command, but the address will not be added
  +to the list (or removed from the list in case of an B<unsubscribe>) unless
  +the request has been confirmed. B<Petidomo> will send a random cookie to the
  +address in question and ask to send the concatenated cookie back to acknowledge
  +the request. Once the cookie has been send back, the request is carried out.
  +
  +This mode is useful to prevent people from adding random addresses to
  +the list or to prevent them from removing other people from the list
  +without their consensus.
  +
  +=back
  +
  +=item B<AllowMembersCommand>    I<yes | no>
  +
  +B<Petidomo> knows a command B<"members"> or B<"who">, which can be sent
  +to the server, which will reply with the complete list of subscribed
  +addresses of the specified mailing list. This may be useful for list
  +administrators, but it can be abused easily by spammers, to collect
  +addresses where to send their unsolicted commercial e-mail to.
  +
  +Furthermore, with certain mailing lists it may be undesirable that one
  +can see who else is subscribed to that list. That's why this
  +option has been added. If you set it to I<no>, the
  +B<members> command will be diabled for this list. This is also the
  +default if the option is not specified in the config file.
  +
  +=item B<Hostname>  I<string>
  +
  +This options tells  B<Petidomo> to use this hostname for the mailing list,
  +instead of the one configured in the master configuration file. This
  +feature is useful to do virtual hosting.
  +If this entry is unset, the name configured in the master config file
  +will be used as hostname for this mailing list.
  +
  +Example: B<Hostname petidomo.example.org>
  +
  +Virtual hosting is required if several mailing lists run on
  +the same server, but they have to look like they would coming from
  +different machines. For a more detailed explanation look further down in
  +the administration section.
  +
   
  -=item ...
  +=item B<AdminPassword>  I<string>
  +
  +This tag sets the master password, which authenticiates the
  +administrator of this mailing list. The administrator has special
  +priviledes, such as deleting other users, overriding access control
  +restrictions or un-/subscribing users to closed mailing lists.
  +
  +Example: B<AdminPassword    "open sesame">
  +
  +Please note that passwords are always case-insensitive. It is also
  +worth noting that the master password is always valid as administrator
  +password for the list, also.
  +
  +Leave this entry blank, if you don't want to enable remote
  +administration of the mailing list.
  +
  +
  +
  +=item B<PostingPassword>  I<string>
  +
  +This tag sets the posting password. The posting password allows to
  +post an article to a moderated mailing list, but it does not allow any
  +administration of the list itself. On lists that are of a different
  +type than moderated, setting a posting password does usually not make
  +any sense and you can leave this entry unset.
  +
  +Example: B<PostingPassword    "open sesame">
  +
  +
  +=item B<ReplyTo>  I<[none | address]>
  +
  +This tag controls the C<"Reply-To:"> field, which B<Petidomo> adds to
  +posted articles before it is delivered to the recipients. Using this
  +option, you can force Petidomo to insert a C<"Reply-To:"> which points
  +to a certain address. On a moderated list, for example, you can set
  +this as follows:
  +
  +Example:    B<ReplyTo         moderator@petidomo.net>
  +
  +to direct all replies to the posting to the moderator again,
  +regardless of what address is noted in the C<"From:"> line of the mail.
  +
  +If you set C<"none">, B<Petidomo> will not add a C<"Reply-To:"> header at
  +all.
  +
  +If this option is unset, B<Petidomo> will insert a C<"Reply-To:">
  +header that directs replies back to the mailing list, so that
  +subscribers can conveniently post simply by hitting the C<"reply">
  +function in their mail reader.
  +
  +
  +=item B<Archive>  I<string>
  +
  +This option tells B<Petidomo> to archive all articles that have
  +been posted on that mailing list. The parameter for this tag may
  +either be the name and path of a file or of a directory. The path may
  +either be absolute I<"/var/archive/list"> or relative
  +I<"archive">. For relative paths, the directory where the list's
  +config file resides will be used as starting point. If the
  +B<Archive> tag points to a file, B<Petidomo> will append every posted
  +article to that file. If it points to a directory, each posting will be
  +stored as a separate file in that directory.
  +
  +If is unset, posted articles will not be archived at all.
  +
  +=item B<IntroductionFile>  I<string>
  +
  +This tag specifies the path to the introduction file.
  +Every time an address is added to the mailing list, B<Petidomo> will send
  +the contents of this file to the new subscriber. This should be
  +used to inform the new subscriber about the list's topic, habits
  +etc. If the file does not exist, no mail is sent out.
  +
  +If the path specified has no trailing "/", it is interpreted to be
  +relative to the directory where the list's config file has been found.
  +The default path is B<@PREFIX@/etc/petidomo/$listname.intro>.
  +
  +
  +=item B<DescriptionFile>  I<string>
  +
  +This tag specifies the path to the description file.
  +This file is supposed to contain a short description of the mailing
  +list's topic and purpose. It's contents will be sent back if a user
  +requests the command B<"help listname">.
  +
  +If the path specified has no trailing "/", it is interpreted to be 
  +relative to the directory where the list's config file has been found. 
  +The default path is B<@PREFIX@/etc/petidomo/listname.desc>.
  +
  +=item B<SignatureFile>  I<string>
  +
  +The contents of the file this tag points to will be appended to
  +every posting on this list. This may be used to add a
  +list-specific signature.
  +
  +If the path specified has no trailing "/", it is interpreted to be
  +relative to the directory where the list's config file has been found. 
  +The default path is B<@PREFIX@/etc/petidomo/$listname.sig>.
  +
  +=item B<AddressFile>  I<string>
  +
  +This option specifies the path to the file, which B<Petidomo> uses to
  +store the list of subscribed addresses.
  +If the path specified has no trailing "/", it is interpreted to be
  +relative to the directory where the list's config file has been found.
  +The default path is B<@PREFIX@/etc/petidomo/$listname.list>.
  +
  +=item B<AcknowledgementFile>  I<string>
  +
  +This option specifies the path to the file, which B<Petidomo> uses to
  +store the list of addresses that have been verified by the
  +I<acknowledgement-once> mechanism.
  +
  +If the path specified has no trailing "/", it is interpreted to be
  +relative to the directory where the list's config file has been found.
  +The default path is B<@PREFIX@/etc/petidomo/$listname.ack>.
  +
  +
  +=item B<HeaderFile>  I<string>
  +
  +The contents of this file specified in this option will be added to the
  +header of posting on this list. This may be used to add custom headers like:
  +
  +Example:    B<X-List-Archive-is-at: http://list-archive.example.org/>
  +
  +Please note that the contents of this file will be added
  +as is!!! So don't include empty lines in here, as empty
  +lines mark the end of the mail headers! Generally, please use this
  +feature with care; most mailing list administrators tend to
  +overestimate the importance of custom headers on their mailing list.
  +
  +If the path specified has no trailing "/", it is interpreted to be
  +relative to the directory where the list's config file has been found.
  +The default path is B<@PREFIX@/etc/petidomo/$listname.hdr>.
  +
  +=item B<ACLFilePre>  I<string>
  +
  +=item B<ACLFilePost>  I<string>
  +
  +This option specifies the path to the list-specific ACL files for pre-
  +and postprocessing.  This ACLs will be run against all incoming mails after
  +the mail was checked against the global ACLs.
  +Rules from an ACL-Pre file will be matched against incoming mail before certain
  +processing in lists with ListType B<acknowledged> and B<acknowledged-once>
  +mode set will take place.
  +The rules in an ACL-Post file is matched against the original posting after the
  +approval process.
  +
  +If the path specified has no trailing "/", it is interpreted to be
  +relative to the directory where the list's config file has been found.
  +The default path is B<@PREFIX@/etc/petidomo/$listname.acl-[pre|post]>.
  +
  +=item B<PostingFilter>  I<string>
  +
  +Here you can specify the path to a program through which every message deliverd to
  +the list will be passed. For example this comes in useful, if you would like to
  +bring the message in a certain format or would like to manipulate the C<"Subject:">
  +line before realy posting the article to the list. Keep in mind that this filter
  +will be applied after all ACL processing has taken place, thus after an ACL I<filter>
  +action eventually has been applied.
  +
  +The path can be given without quotes, but if you want to pass arguments or want to
  +specify complicated shell expressions, you will have to use double quotes.
  +
  +The filter is given the message on sB<tdin> and B<Petidomo> expects the output
  +on B<stdout> of the filter.
  +
  +Example:
  +
  +=over 4
  +
  +=over 4
  +
  +B<PostingFilter        "@PREFIX@/etc/petidomo/filter.sh listname">
  +
  +=back
  +
  +=back
  +
  +Example:
  +
  +=over 4
  +
  +=over 4
  +
  +B<PostingFilter        "/bin/cat | /bin/cat; echo ; echo Testing"">
  +  
  +=back
  +
  +=back
  +
  +Example for a filter that expects the listname as parameter and inserts the string
  +B<[listname-list]> At the beginning of the if it's not already there:
  +
  +=over 4
  +
  +=over 4
  +
  +=item B<#! /bin/sh>
  +
  +=item B<SUB="[$1-list]">
  +
  +=item B<awk -v "SUB=$SUB" \>
  +
  +=item B<'>
  +
  +=item B<BEGIN { found=0 }>
  +
  +=item B</^Subject:/ {>
  +
  +=item B<    if (index($0,SUB)) print $line;>
  +
  +=item B<    else {>
  +
  +=item B<        if (found==0) {>
  +
  +=item B<            s=sprintf( "Subject: %s", SUB)>
  +
  +=item B<            $1=s>
  +
  +=item B<            print $0>
  +
  +=item B<        }>
  +
  +=item B<    }>
  +
  +=item B<    found=1>
  +
  +=item B<    next>
  +
  +=item B<}>
  +
  +=item B</.*/ { print }>
  +
  +=item B<'>
  +
  +=item B<exit 0>
  +
  +=back
   
   =back
   
  -=head2 List Configuration
  +=back
   
   =head2 Access Control Lists (ACL)
   
  -=head1 EXAMPLE
  +Unfortunately, we live in a world where some people are trying to
  +abuse services like mailing lists for their entertainment or for
  +commercial purposes. It is also not uncommon that among thousands of
  +mailing list subscribers, there is one particular moron who simply
  +can't behave. That is why access control is a useful feature, even
  +though it contradicts the idea of a mailing list: To be a media for
  +communication.
  +
  +Writing and understanding ACL files is, to be honest, not very easy
  +and the novice mailing list administrator should better be careful
  +when using them, because a wrong access control rule might cause more
  +trouble than it is worth, but the experienced administrator will
  +certainly appreciate their power. Understanding how ACL files work
  +will also require you to know a bit about the syntax of an RFC format
  +e-mail. A good place to start is to take a look at RFC822 and its
  +sons.
  +
  +In Petidomo, two places exist to control who is allowed to do what:
  +The global ACL files and the ACL files that are local to the mailing
  +list. While the latter are valid only for the list for which they
  +are configured for, the global ACL files will be parsed for
  +B<all> your mailing lists. ACL files are only relevant for mailing
  +list postings, Petidomo does not use them in I<listserv> mode.
  +
  +The syntax of an ACL file is similar to the C programming
  +language, as you can see in the following example:
   
  -=head2 Sendmail Configuration
  +=over 4
   
  -C<aliases>:
  +B<if (envelope matches "mailer-daemon@") then
  +            forward "petidomo-manager";>
   
  -=head2 Petidomo Global Configuration
  +=back
   
  -C<petidomo.conf>:
  +This expression tells Petidomo to forward all postings to the
  +manager of the mailing list, if the envelope of the mail matches the regular
  +expression ``mailer-daemon@''.  It will make sure that bounces of articles
  +will not be posted to the list again, causing an infinite mail loop.
   
  -C<petidomo.acl>:
  +The syntax of ACL statements is shown here:
   
  -=head2 Petidomo List Configuration
  +=over 4
  +
  +B<IF ( (Condition) [ AND | OR ] (Condition) ............ )
  +    THEN Action ;>
  +
  +=back
  +
  +Or more Detailed:
  +
  +=over 4
  +
  +B<
  +IF ( (Source [NOT] MatchCode "Expression") [ AND | OR ]
  +     (Source [NOT] MatchCode "Expression") [ AND | OR ]
  +     ([NOT] "Filter Expression) .......... )
  +                                           THEN    Action ;>
  +
  +B<
  +IF ([NOT] "Filter Expression") [ AND | OR ]
  +        ([NOT] "Filter Expression") [ AND | OR ]
  +        (Source [NOT] MatchCode "Expression") .......... )
  +                                           THEN    Action ;>
  +
  +=back
  +
  +Where:
  +
  +=item B<Source>
  +
  +=over 4
  +
  +Specifies the source to match against. This can be one of the following:
  +I<envelope> | I<from> | I<subject> | I<header> | I<body>
  +
  +=over 4
  +
  +=item I<envelope>
  +
  +References the envelope line of the message.
  +
  +=item I<from>
  +
  +References the C<"From:"> line of the message.
  +
  +=item I<subject>
  +
  +References the C<"Subject"> line of the message.
  +
  +Example:
  +
  +=over 4
   
  -Petidomo C<foo.conf>:
  +=over 4
  +
  +=item B<IF (subejct == "make money fast") THEN>
  +
  +=item B<    rejectwith "/usr/local/share/petidomo/make-money-fast.txt";>
  +
  +=back
  +
  +=back
  +
  +=item I<header>
  +
  +References a specific line in the message header. The line to match is also expressed
  +in the I<Expression>. Is meant to be used with regular expression matching.
  +
  +Example:
  +
  +=over 4
  +
  +=over 4
  +
  +=item B<IF (header matches "^Received:.*from spam.domain") THEN>
  +
  +=item B<    forward "petidomo-manager";>
  +
  +=back
  +
  +=back
  +
  +=item I<body>
  +
  +References the body of the message. Is meant to be used with
  +regular expression matching.
  +
  +Example:
  +
  +=over 4
  +
  +=over 4
  +
  +=item B<IF (body matches>
  +
  +=item B<".*[Vv][^a-zA-Z]*[iI][^a-zA-Z]*[aA][^a-zA-Z]*[gG][^a-zA-Z]*[rR][^a-zA-Z]*[aA].*") THEN>
  +
  +=item B<rejectwith "/usr/local/share/petidomo/no-viagra.txt";>
  +
  +C<>
  +
  +=back
  +
  +=back
  +
  +=back
  +
  +=back
  +
  +=item B<MatchCode>
  +
  +=over 4
  +
  +Tell the ACL how to match. There are two possibilities here:
  +I<match> / I<matches> | I<=> | I<==>
  +
  +=over 4
  +
  +=item I<match> | I<matches>
  +
  +Does an extended regular expression match using the I<Expression> parameter.
  +
  +=item I<= | ==>
  +
  +Does an exact string match using the string given in the I<Expression> parameter.
  +
  +=back
  +
  +=back
  +
  +=item B<"Expression">
  +
  +=over 4
  +
  +Depending on I<MatchCode> used, can be an extended regular expression or just
  +a plain string.  In both cases the match is case insensitiv and has to be quoted.
  +
  +=back
  +
  +=item B<"Filter Expression">
  +
  +=over 4
  +
  +This a special feature, as you specify an external program to do the matching for
  +you. This can be a very useful tool. Dependant on the return code of the external
  +program the I<Action> part is executed or not. As in the shell an exit code of B<0>
  +means B<true> and of B<1> means B<false>. The path name has to be quoted.
  +
  +
  +Example:    B<("/usr/local/bin/very_important.filter") THEN
  +                 forward "petidomo-manager";>
  +
  +=back
  +
  +=item B<Action>
  +
  +=over 4
  +
  +
  +The I<Action> part specifies what to do after a match occured.
  +
  +=over 4
  +
  +=item I<drop>
  +
  +Just drops the message without firther notice to the sender or list manager.
  +
  +=item I<pass>
  +
  +Posts the message onto the list immediately.
  +
  +=item I<approve>
  +
  +Will flag the message as approved, bypassing all other checks for approval.
  +
  +=item I<reject>
  +
  +Rejects the message from the list, sending a status message to the sender.
  +
  +=item I<rejectwith "file">
  +
  +Rejects the message, sending a status message to the user including the contents of
  +I<"file"> as the message body. The parameter has to be quoted.
  +
  +Example:
  +
  +=over 4
  +
  +B<IF (header matches "^Received:.*from spam.domain") THEN
  +     rejectwith "@PREFIX@/etc/petidomo/spam.txt";>
  +
  +=back
  +
  +=item I<forward "address">
  +
  +Forwards the message to the given I<address>. Originator will be the Mailing
  +List Manager. The original message will be quoted in the mail body.
  +The I<address> has to be quoted.
  +
  +=item I<redirect "address">
  +
  +Just resends the message to the given I<address> without changing any of the headers.
  +The message will still look as if it has been sent by the original poster.
  +The I<address> has to be quoted.
  +
  +=item I<filter "script">
  +
  +This B<Action> is pretty much the same as the posting
  +filter, but it allows you to re-write the posting depending on who
  +posted it or other criteria. Please note that this filter is executed
  +additionally and before a regular posting filter you might have configured.
  +The filter is given the message on sB<tdin> and B<Petidomo> expects the output
  +on B<stdout> of the filter.
  +
  +A nice example for what this feature can be used is the following:
  +
  +Example:
  +
  +=over 4
  +
  +B<if (from == "simons@computer.org") then
  +     filter "/@PREFIX@/etc/petidomo/simons.filter";>
  +
  +=back
  +
  +=back
  +
  +=back
  +
  +C<>
  +
  +=head1 Administration
  +
  +Each mailing list has an alias C<"listname-owner"> (see section
  +B<Sendmail Configuration>), where the mail address of the person who is
  +responsible for this mailing list should be specified. Per default, this is the
  +user who is known as C<"petidomo-manager">. But you are free to direct mail
  +for this accoun to any other person --- or several persons.
  +
  +The list owner will receive administrative e-mail from B<Petidomo> in
  +the following cases:
  +
  +=item B<subscribe | unsubscribe>
  +
  +=over 4
  +
  +When a new user subscribes, or a subscriber removes himself from
  +the list, a carbon copy of the recipt will be sent to the owner. By
  +looking at these mails, the owner can check whether a B<subscribe> or
  +B<unsubscribe> command looks bogus. He or she can also keep track of
  +who is on the list and who is not.
  +
  +=back
  +
  +=item B<members | who>
  +
  +=over 4
  +
  +If a B<members> command is received for a mailing list where
  +this command has been disabled, this will also be forwarded to the
  +owner.
  +
  +=back
  +
  +These mails are merely for information purposes and do not necessarily
  +require an action from the admin. There are cases, where the list
  +owner will receive mails from B<Petidomo>, though, that require some
  +kind of reaction.
  +
  +=head2 Closed an moderated lists
  +
  +If you have configured a mailing list to reject postings under certain
  +circumstances, such as a closed or moderated mailing list, these
  +rejected articles will be forwarded to you for approval. When you
  +receive such a rejected article, you can either silently
  +discard it, contact the author or post it to the mailing list with
  +your approval.
  +
  +You can approve an article with the B<AdminPassword> for B<Petidomo>, the
  +B<AdminPassword> of the mailing list in question or the B<PostingPassword>.
  +
  +
  +=head2 Approving requests
  +
  +To approve requests, you have several ways of specifying the
  +appropriate password. They are all the same for B<Petidomo> and it is
  +only a matter of taste, which scheme you use.
  +
  +When sending a command to Petidomo in B<listserv> mode through the
  +B<listname-request> or B<petidomo> address, just preface your
  +commands with a B<password> command, like in the following example:
  +
  +=over 4
  +
  +=over 4
  +
  +=item B<To: testlist-request@foo.bar>
  +
  +=item B<Subject:>
  +
  +C<>
  +
  +=item B<password open sesame>
  +
  +=item B<subscribe some@one.else>
  +
  +=item B<subscribe someone@even.elser>
  +
  +=back
  +
  +=back
  +
  +One B<password> command sets your password for all the commands to
  +follow. If you want to use one mail to send requests for several
  +mailing lists with different passwords, just give a B<password>
  +command again:
  +
  +=over 4
  +
  +=over 4
  +
  +=item B<To: petidomo@foo.bar>
  +
  +=item B<Subject:>
  +
  +C<>
  +
  +=item B<password open sesame>
  +
  +=item B<subscribe user@inter.net testlist1>
  +
  +=item B<password let me in>
  +
  +=item B<subscribe user@inter.net testlist2>
  +
  +=back
  +
  +=back
  +
  +Instead of B<password>, you can also use the commands B<passwd>, or
  +B<approve>, they are all synonymous.
  +
  +Caution, the command can only be parsed, if they start at the beginning of
  +the line and have no junk appended.
  +
  +
  +=head2 Approving postings
  +
  +If you want to approve a posting for a mailing list, just send the
  +article to the mailing list and specify your password either in the
  +header or in the body of the mail.
  +
  +If you choose to approve the mail in the body, add line with the
  +command B<approve> to the mail as first line of the body. B<Petidomo>
  +will strip that line before actually posting the article . You can
  +also use the synonyms B<approved>, B<password> or B<passwd>
  +instead. Here is an example:
  +
  +=over 4
  +
  +=over 4
  +
  +=item B<From: simons@computer.org (Peter Simons)>
  +
  +=item B<Subject: Cats are the most beautiful animals in the world.>
  +
  +C<>
  +
  +=item B<approve let me post>
  +
  +=item B<It's not that I wouldn't like animals like dogs, birds>
  +
  +=item B<or fishes, but for me, a cat is *the* animal to have.>
  +
  +=item B<[...]>
  +
  +=back
  +
  +=back
  +
  +The line B<approve let me post> will be stripped by B<Petidomo> and
  +the article will then be sent out.
  +
  +If you want to specify the password in the headers, just add an header
  +of the name B<Approved:> or B<Approve:> to the headers of the mail.
  +Unfortunately, many mail readers do not allow you to modify the
  +headers of outgoing mail. That is why the body-approval has been
  +added. Here is the same example as above now using the headers:
  +
  +=over 4
  +
  +=over 4
  +
  +=item B<From: simons@computer.org (Peter Simons)>
  +
  +=item B<Subject: Cats are the most beautiful animals in the world.>
  +
  +=item B<Approve: let me post>
  +
  +C<>
  +
  +=item B<It's not that I wouldn't like animals like dogs, birds>
  +
  +=item B<or fishes, but for me, a cat is *the* animal to have.>
  +
  +=item B<[...]>
  +
  +=back
  +
  +=back
  +
  +Please note that you have to add a colon to the keyword to make a
  +valid RFC mail-header.
  +
  +=head2 Bounces
  +
  +While maintaining mailing list with a larger number of subscribers, it
  +happens regularly that subscribed addresses become invalid or are
  +temporarily not reachable. In this case postings will B<bounce>.
  +You will then receive a mail from a mail server telling you, that the
  +delivery of the mail failed.
  +
  +Often, addresses become unreachable due to a misconfiguration of a
  +machine, so it is not always necessary to remove that address from the
  +list immediately, but when an addresses bounces for several days in a
  +row, it is a good idea to delete that address from the mailing list.
  +You should do that by sending an B<unsubscribe> command for that
  +address to the B<listname-request> address of the mailing list.
  +
  +If you have configured B<Petidomo> to disallow the unsubscription of
  +addresses not equal to the address the mail is sent from, you will
  +have to specify your admin password in the mail, to override the
  +barrier.
  +
  +
  +=head2 Verifying the address list
  +
  +B<Petidomo> tries its best to make sure that only syntactically correct
  +addresses are subscribed to mailing lists, and if you stick to the
  +correct mail interface, there's very little chance, an incorrect
  +address will make it into the B<Listname.list> file.
  +
  +Sometimes, it is necessary to edit these files manually, though, or
  +B<Petidomo>'s address validation algorithm fails. Once you have an
  +incorrect address in your list file, sendmail will abort with an
  +error, without trying to deliver the mail at all. 
  +
  +To clarify, this does not happen when an address is not reachable,
  +this happens only when you subscribe something like
  +I<hey@this@is@wrong....>. Once you suspect that your address list has
  +been corrupted, there's an easy way to find out, which addresses are
  +wrong. Simply use sendmail's address verification mode like this:
  +
  +=over 4
  +
  +=over 4
  +
  +=item B<$ xargs < listname.list sendmail -bv | grep -vi deliverable>
  +
  +=item B<hey@this@is@wrong ... Invalid route address>
  +
  +=back
  +
  +=back
  +
  +This call will find all incorrect address and notify you. The 'sed'
  +call will filter out all correct addresses for your convenience.
  +
  +=head2 Mailing list archives
  +
  +If your are hosting a public mailing list, you might want to offer a
  +mailing list archive, that is accessible through the WWW and has all
  +the postings available for immediate access. We were in the midst of
  +developing a tool that does this for you when we came accross a
  +brilliant tool named B<MHonArc>. We installed it, tested it, and
  +deleted all attempts of writing something like that ourselves
  +immediately.
  +
  +We strongly recommend looking at MHonArc, if you want to offer a WWW
  +archive of your mailing lists. You can find more information about
  +MHonArc at the following location:
  +B<http://www.oac.uci.edu/indiv/ehood/mhonarc.html>
  +
  +The installation of the tool itself is very easy. Once you have
  +MHonArc running, just enable the archiving feature in Petidomo and
  +feed the archives into MHonArc. That's it.
  +
  +=head2 Sendmail configuration
  +
  +Before you can use B<Petidomo>, you have to configure sendmail so that it
  +knows about Petidomo. If you are using an MTA other than sendmail,
  +the configuration might be slightly different.
  +
  +You will have to create apropriate aliases for B<Petidomo> and its lists.
  +You do this by adding the folling lines to your aliases file. For the exact
  +location of this file refer to the documentation on your system.
  +
  +=over 4
  +
  +=over 4
  +
  +=item B<petidomo-manager:   postmaster>
  +
  +=item B<petidomo:           "| @PREFIX@/bin/petidomo --mode=listserv">
  +
  +=item B<petidomo-approve:   "| @PREFIX@/bin/petidomo --mode=approve">
  +
  +=back
  +
  +=back
  +
  +In case you installed the B<Petidomo> binary to some other location, you
  +will have to change the paths here apropriately of course. You may
  +also chose that mail for the B<petidomo-manager> should go to some
  +different address than B<postmaster>, if that suits your needs
  +better. It's important that somebody actually reads what
  +arrives there.
  +
  +For every mailing list you want to install on your system, you will have
  +to add the following lines :
  +
  +=over 4
  +
  +=over 4
  +
  +=item B<testlist:           "| @PREFIX@/bin/petidomo --mode=deliver testlist">
  +
  +=item B<testlist-request:   "| @PREFIX@/bin/petidomo --mode=listserv testlist">
  +
  +=item B<testlist-owner:     petidomo-manager>
  +
  +=item B<owner-testlist:     testlist-owner>
  +
  +=back
  +
  +=back
  +
  +Having done all this, execute the newaliases(1) utility to rebuild
  +sendmail's internal database. Your changes will not have any effect
  +unless you do this.
  +
  +=head2 Virtual Hosting
  +
  +Virtual hosting is required if you want to host several mailing
  +lists that have to run under different domain names.
  +After registering these domains to point to your machine, you will have
  +to configure B<Petidomo> and your MTA to make use of this feature.
  +As an example for MTA configuration, the B<sendmail> system is used here.
  +
  +To configure B<Petidomo>, all you have to do is, set the B<Hostname> parameter in the
  +lists config file B<listname.conf> to the required name (see above).
  +You can do this for every list you want to run. If you do not specify a B<Hostname>
  +in the lists config file, the name configured in the global config file
  +B<petidomo.conf> will be used.
  +
  +But to get this feature really running, you will have to make your local mail
  +agent (MTA) aware of the additional domains it has to recognize as local.
  +
  +For the B<sendmail v8> system, you will have to write these additional domais to
  +the B<w> class in your B<sendmail.cf> file, or the corresponfing M4
  +config. This is done by adding the line:
  +
  +=over 4
  +
  +=over 4
  +
  +B<Cwdomain.name1 domain.name2 ...>
  +
  +=back
  +
  +=back
  +
  +This will tell sendmail that these names are to be accepted and
  +delivered locally rather than to the MX of these entries.
  +
  +Doing this might not lead to the expected behavior, if you are using
  +B<sendmail>'s masquerading functionality, which isused to hide the various
  +hostnames and subdomains in your domain.
  +By default, sendmail not only masquerades the domain names
  +it was configured to with the B<MASQUERADE_DOMAIN()> command, it will also
  +automatically masquerades all domain names configured in the B<w> class.
  +
  +As a result the virtual hosting you configured in B<Petidomo> will
  +be overwritten.
  +To fix for this behavior you will have to add the command
  +B<FEATURE(limited_masquerade)> to your M4 file and sendmail won't
  +touch the names that are stated only in the B<w> class anymore.
  +
  +
  +=head1 USER COMMANDS
  +
  +In this chapter, we will describe the commands, that are understood in
  +B<listserv> mode, eg. B<listname-request@yourhost.dom>. This is the
  +interface for the users of the mailing lists, where they can send their
  +requests to in order to be subscribed or unsubscribed to or from a mailing.
  +The text here is mostly identical with the default help text that is sent to
  +the user whenever he or she issues a command that is syntactically
  +incorrect.
  +
  +User commands always have to be sent to the request address of
  +the mailing list not to the mailing list itself! 
  +
  +Alternatively, commands can always be sent to the address
  +B<petidomo@yourhost.dom>, but the B<listname-request@yourhost.dom> address is
  +preferable, since B<Petidomo> will have a default
  +listname for this address and thus understand a simpler command
  +syntax.
  +
  +
  +=head2 Subscribe
  +
  +The B<subscribe> command will add the address of the user to a
  +mailing list. The behavior of the list software on such a request is dependant
  +on the setting of the list parameter B<SubscriptionType>. Have a look there for
  +a brief explanation.
  +
  +The command B<add> is synonymous to B<subscribe>.
  +
  +When using the B<listname-request> address, only the word
  +B<subscribe> is required for the request to suceed. If the command is
  +sent to the B<petidomo> address, the user will have to specify an
  +additional parameter: The name of the mailing list he or she wants to
  +be added to, like in the following example:
  +
  +=over 4
  +
  +=over 4
  +
  +B<subscribe politics>
  +
  +=back
  +
  +=back
  +
  +If the user wants to add an address that is not equal to the one he
  +is sending from, the e-mail address will have to be specified as well:
  +
  +=over 4
  +
  +=over 4
  +
  +B<subscribe politics joe@foo.bar>
  +
  +=back
  +
  +=back
  +
  +The order in which the e-mail address and the mailing list name are
  +provided does not matter.
  +
  +=head2 Unsubscribe
  +
  +The syntax and usage of the B<unsubscribe> command is the same as the
  +B<subscribe> command. The difference is, that the user's address
  +is removed from the mailing list rather than added to it.
  +
  +B<delete> and B<remove> can be used synonymously to B<unsubscribe>.
  +
  +=head2 Index
  +
  +The B<index> command does not need any parameters. Sending it to the
  +server will return a list of available mailing lists on this server.
  +This is useful in case you want to subscribe to a list but can't
  +remember the exact name anymore.
  +
  +The commands B<lists> and B<longindex> are synonyms to B<index>.
  +
  +
  +=head2 Help
  +
  +If the server receives the command b<help>, it will send the help
  +file back. If b<help> has a parameter, Petidomo will check whether
  +this is a valid name of an existing mailing list, and if it is, it
  +will return the description file for this mailing list, rather than
  +the help file.
  +
  +
  +=head2 Members
  +
  +The B<members> command will return the addresses of all subscribers
  +of the mailing list, if the administrator chose to allow this command.
  +When B<members> is sent to the B<listname-request> address, the default list
  +will be used by Petidomo. Otherwise, the name of the mailing list
  +which's subscribers should be listed, has to be specified as an option
  +like in the following example:
  +
  +=over 4
  +
  +=over 4
  +
  +B<members politics>
  +
  +=back
  +
  +=back
  +
  +The command B<who> can be used as a synomym to B<members>.
  +
  +
  +=head1 FILES
  +
  +=over 4
  +
  +=over 4
  +
  +=item B<@PREFIX@/etc/petidomo/petidomo.conf>
  +
  +=item B<@PREFIX@/etc/petidomo/petidomo.hdr>
  +
  +=item B<@PREFIX@/etc/petidomo/petidomo.help>
  +
  +=item B<@PREFIX@/etc/petidomo/petidomo.index>
  +
  +=item B<@PREFIX@/etc/petidomo/petidomo.acl-pre>
  +
  +=item B<@PREFIX@/etc/petidomo/petidomo.acl-post>
  +
  +=item B<@PREFIX@/etc/petidomo/listname.conf>
  +
  +=item B<@PREFIX@/etc/petidomo/listname.desc>
  +
  +=item B<@PREFIX@/etc/petidomo/listname.intro>
  +
  +=item B<@PREFIX@/etc/petidomo/listname.hdr>
  +
  +=item B<@PREFIX@/etc/petidomo/listname.sig>
  +
  +=item B<@PREFIX@/etc/petidomo/listname.list>
  +
  +=item B<@PREFIX@/etc/petidomo/listname.ack>
  +
  +=item B<@PREFIX@/etc/petidomo/listname.acl-pre>
  +
  +=item B<@PREFIX@/etc/petidomo/listname.acl-post>
  +
  +=back
  +
  +=back
  +
  +=head1 SEE ALSO
  +
  +=head2 Allman Sendmail
  +
  +=over 4
  +
  +=over 4
  +
  +B<sendmail(8)>
  +
  +=back
  +
  +=back
  +
  +=head2 Postfix
  +
  +=over 4
  +
  +=over 4
  +
  +B<bounce(8)>, B<cleanup(8)>, B<defer(8)>, B<error(8)>, B<flush(8)>, B<lmtp(8)>,
  +B<local(8)>, B<master(8)>, B<pickup(8)>, B<pipe(8)>, B<qmgr(8)>, B<showq(8)>, B<smtp(8)>,
  +B<smtpd(8)>, B<spawn(8)>, B<trivial-rewrite(8)>.
  +
  +=back
  +
  +=back
   
   =head1 HISTORY
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 19 16:39:22 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E9B6677759; Fri, 19 Mar 2004 16:39:21 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/petidomo/ subscribe.c unsubscribe.c
Message-Id: <20040319153921.E9B6677759@mail.ossp.org>
Date: Fri, 19 Mar 2004 16:39:21 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   19-Mar-2004 16:39:21
  Branch: HEAD                             Handle: 2004031915392100

  Modified files:
    ossp-pkg/petidomo       subscribe.c unsubscribe.c

  Log:
    split cookies on (un)subscription, too - found and fixed by tho

  Summary:
    Revision    Changes     Path
    1.23        +9  -4      ossp-pkg/petidomo/subscribe.c
    1.21        +10 -5      ossp-pkg/petidomo/unsubscribe.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/petidomo/subscribe.c
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 subscribe.c
  --- ossp-pkg/petidomo/subscribe.c	20 Jan 2001 15:03:11 -0000	1.22
  +++ ossp-pkg/petidomo/subscribe.c	19 Mar 2004 15:39:21 -0000	1.23
  @@ -1,6 +1,6 @@
   /*
      $Source: /e/ossp/cvs/ossp-pkg/petidomo/subscribe.c,v $
  -   $Revision: 1.22 $
  +   $Revision: 1.23 $
   
      Copyright (C) 2000 by CyberSolutions GmbH, Germany.
   
  @@ -215,6 +215,7 @@
   	/* Require approval. */
   
   	char* command;
  +        char  c;
   	char* cookie;
   
   	syslog(LOG_INFO, "%s: Attempt to subscribe \"%s\" to list \"%s\" deferred, because the " \
  @@ -240,16 +241,20 @@
   	    if (strcasecmp(address, originator) == 0)
   		buffer = text_easy_sprintf("You requested that the address \"%s\" should be subscribed to " \
   					   "the mailing list \"%s\". This will not happen unless you approve the " \
  -					   "request by replying to this mail and citing the string",
  +					   "request by replying to this mail and concatenating the following two strings into one",
   					   address, listname);
   	    else
   		buffer = text_easy_sprintf("Per request from \"%s\", the address \"%s\" should be subscribed to " \
   					   "the mailing list \"%s\". This will not happen unless you approve the " \
  -					   "request by replying to this mail and citing the string",
  +					   "request by replying to this mail and concatenating the following two strings into one",
   					   originator, address, listname);
   	    text_wordwrap(buffer, 70);
   	    fprintf(fh, "%s\n", buffer);
  -	    fprintf(fh, "\n    %s\n\n", cookie);
  +	    fprintf(fh, "\n");
  +	    c = cookie[16];
  + 	    cookie[16] = '\0'; fprintf(fh, "    %s\n", &cookie[ 0]);
  + 	    cookie[16] = c;    fprintf(fh, "    %s\n", &cookie[16]);
  +	    fprintf(fh, "\n");
   	    fprintf(fh, "in your reply.\n");
   	    CloseMailer(fh);
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/petidomo/unsubscribe.c
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 unsubscribe.c
  --- ossp-pkg/petidomo/unsubscribe.c	20 Jan 2001 15:03:11 -0000	1.20
  +++ ossp-pkg/petidomo/unsubscribe.c	19 Mar 2004 15:39:21 -0000	1.21
  @@ -1,6 +1,6 @@
   /*
      $Source: /e/ossp/cvs/ossp-pkg/petidomo/unsubscribe.c,v $
  -   $Revision: 1.20 $
  +   $Revision: 1.21 $
   
      Copyright (C) 2000 by CyberSolutions GmbH, Germany.
   
  @@ -218,6 +218,7 @@
   	    /* Require approval. */
   
   	    char* command;
  +        char  c;
   	    char* cookie;
   
   	    syslog(LOG_INFO, "%s: Attempt to unsubscribe \"%s\" from list \"%s\" deferred, because the " \
  @@ -243,16 +244,20 @@
   		if (strcasecmp(address, originator) == 0)
   		    buffer = text_easy_sprintf("You requested that the address \"%s\" should be unsubscribed from " \
   					       "the mailing list \"%s\". This will not happen unless you approve the " \
  -					       "request by replying to this mail and citing the string",
  +					   "request by replying to this mail and concatenating the following two strings into one",
   					       originator, address, listname);
   		else
   		    buffer = text_easy_sprintf("Per request from \"%s\", the address \"%s\" should be unsubscribed from " \
   					       "the mailing list \"%s\". This will not happen unless you approve the " \
  -					       "request by replying to this mail and citing the string",
  +					   "request by replying to this mail and concatenating the following two strings into one",
   					       originator, address, listname);
   		text_wordwrap(buffer, 70);
  -		fprintf(fh, "%s\n", buffer);
  -		fprintf(fh, "\n    %s\n\n", cookie);
  +	    fprintf(fh, "%s\n", buffer);
  +	    fprintf(fh, "\n");
  +	    c = cookie[16];
  + 	    cookie[16] = '\0'; fprintf(fh, "    %s\n", &cookie[ 0]);
  + 	    cookie[16] = c;    fprintf(fh, "    %s\n", &cookie[16]);
  +	    fprintf(fh, "\n");
   		fprintf(fh, "in your reply.\n");
   		CloseMailer(fh);
   		}
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 19 16:43:32 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A2F9877759; Fri, 19 Mar 2004 16:43:32 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ devtool devtool.conf devtool.func
Message-Id: <20040319154332.A2F9877759@mail.ossp.org>
Date: Fri, 19 Mar 2004 16:43:32 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   19-Mar-2004 16:43:32
  Branch: HEAD                             Handle: 2004031915433200

  Modified files:
    ossp-pkg/cfg            devtool devtool.conf devtool.func

  Log:
    Upgrade and unify build environment devtool an devtool.func; change
    devtool.conf to require current versions of shtool, libtool and
    autoconf

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/cfg/devtool
    1.14        +2  -2      ossp-pkg/cfg/devtool.conf
    1.4         +1  -1      ossp-pkg/cfg/devtool.func
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/devtool
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 devtool
  --- ossp-pkg/cfg/devtool	9 Jul 2002 08:29:19 -0000	1.1
  +++ ossp-pkg/cfg/devtool	19 Mar 2004 15:43:32 -0000	1.2
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  devtool -- Development Tool
  -##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   if [ $# -eq 0 ]; then
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 devtool.conf
  --- ossp-pkg/cfg/devtool.conf	17 Nov 2003 10:37:03 -0000	1.13
  +++ ossp-pkg/cfg/devtool.conf	19 Mar 2004 15:43:32 -0000	1.14
  @@ -30,8 +30,8 @@
   
   %autogen
       @autogen shtool   1.6.2 "1.6.*" echo fixperm install mkdir tarball version
  -    @autogen libtool  1.5   "1.[45]*"
  -    @autogen autoconf 2.58  "2.5[4-9]*"
  +    @autogen libtool  1.5.2 "1.5*"
  +    @autogen autoconf 2.59  "2.5[4-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/devtool.func
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.func
  --- ossp-pkg/cfg/devtool.func	27 Jan 2003 16:29:32 -0000	1.3
  +++ ossp-pkg/cfg/devtool.func	19 Mar 2004 15:43:32 -0000	1.4
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   devtool_require () {
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 19 16:43:50 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 34B4677763; Fri, 19 Mar 2004 16:43:50 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ configure.ac
Message-Id: <20040319154350.34B4677763@mail.ossp.org>
Date: Fri, 19 Mar 2004 16:43:50 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   19-Mar-2004 16:43:50
  Branch: HEAD                             Handle: 2004031915434900

  Modified files:
    ossp-pkg/fsl            configure.ac

  Log:
    get rid of "AC_CONFIG_SUBDIRS: you should use literals" warning

  Summary:
    Revision    Changes     Path
    1.17        +3  -1      ossp-pkg/fsl/configure.ac
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/configure.ac
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 configure.ac
  --- ossp-pkg/fsl/configure.ac	9 Jan 2004 10:48:26 -0000	1.16
  +++ ossp-pkg/fsl/configure.ac	19 Mar 2004 15:43:49 -0000	1.17
  @@ -93,7 +93,9 @@
   
   dnl #   post-processing for subdirs
   AC_SUBST(LIB_DEPS)
  -AC_CONFIG_SUBDIRS([$SUBDIR_L2 $SUBDIR_CFG $SUBDIR_PCRE])
  +if test ".$SUBDIR_L2"   != .; then AC_CONFIG_SUBDIRS(lib_l2)   fi
  +if test ".$SUBDIR_CFG"  != .; then AC_CONFIG_SUBDIRS(lib_cfg)  fi
  +if test ".$SUBDIR_PCRE" != .; then AC_CONFIG_SUBDIRS(lib_pcre) fi
   
   dnl #   output generation
   AC_CONFIG_HEADERS(config.h)
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 19 16:45:40 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 680D77775E; Fri, 19 Mar 2004 16:45:40 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/petidomo/ README version.c
Message-Id: <20040319154540.680D77775E@mail.ossp.org>
Date: Fri, 19 Mar 2004 16:45:40 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   19-Mar-2004 16:45:40
  Branch: HEAD                             Handle: 2004031915454000

  Modified files:
    ossp-pkg/petidomo       README version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.11        +2  -2      ossp-pkg/petidomo/README
    1.7         +9  -9      ossp-pkg/petidomo/version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/petidomo/README
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 README
  --- ossp-pkg/petidomo/README	10 Mar 2004 10:55:17 -0000	1.10
  +++ ossp-pkg/petidomo/README	19 Mar 2004 15:45:40 -0000	1.11
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|    | .__/ \___|\__|_|\__,_|\___/|_| |_| |_|\___/ 
                                     |_|                                            
     OSSP petidomo - mailing list manager
  -  Version 4.0b5 (10-Mar-2004)
  +  Version 4.0b6 (19-Mar-2004)
   
     ABSTRACT
   
  @@ -88,7 +88,7 @@
     PETI's STATEMENT
   
   		    Petidomo Mailing List Manager
  -			  Version 4.0b5 (10-Mar-2004)
  +			  Version 4.0b6 (19-Mar-2004)
   
   
   Greetings citizen,
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/petidomo/version.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 version.c
  --- ossp-pkg/petidomo/version.c	10 Mar 2004 10:55:17 -0000	1.6
  +++ ossp-pkg/petidomo/version.c	19 Mar 2004 15:45:40 -0000	1.7
  @@ -8,7 +8,7 @@
   #ifndef _VERSION_C_
   #define _VERSION_C_
   
  -#define PETIDOMO_VERSION 0x400105
  +#define PETIDOMO_VERSION 0x400106
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _VERSION_C_AS_HEADER_
   
   petidomo_version_t petidomo_version = {
  -    0x400105,
  -    "4.0b5",
  -    "4.0b5 (10-Mar-2004)",
  -    "This is OSSP petidomo, Version 4.0b5 (10-Mar-2004)",
  -    "OSSP petidomo 4.0b5 (10-Mar-2004)",
  -    "OSSP petidomo/4.0b5",
  -    "@(#)OSSP petidomo 4.0b5 (10-Mar-2004)",
  -    "$Id: version.c,v 1.6 2004/03/10 10:55:17 thl Exp $"
  +    0x400106,
  +    "4.0b6",
  +    "4.0b6 (19-Mar-2004)",
  +    "This is OSSP petidomo, Version 4.0b6 (19-Mar-2004)",
  +    "OSSP petidomo 4.0b6 (19-Mar-2004)",
  +    "OSSP petidomo/4.0b6",
  +    "@(#)OSSP petidomo 4.0b6 (19-Mar-2004)",
  +    "$Id: version.c,v 1.7 2004/03/19 15:45:40 thl Exp $"
   };
   
   #endif /* _VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 19 23:36:08 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7E5067752D; Fri, 19 Mar 2004 23:36:08 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ ChangeLog configure.ac
Message-Id: <20040319223608.7E5067752D@mail.ossp.org>
Date: Fri, 19 Mar 2004 23:36:08 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   19-Mar-2004 23:36:08
  Branch: HEAD                             Handle: 2004031922360701

  Modified files:
    ossp-pkg/fsl            ChangeLog configure.ac

  Log:
    Fix PR#39: configure --with-l2 does not work

  Summary:
    Revision    Changes     Path
    1.28        +12 -0      ossp-pkg/fsl/ChangeLog
    1.18        +1  -1      ossp-pkg/fsl/configure.ac
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 ChangeLog
  --- ossp-pkg/fsl/ChangeLog	12 Jan 2004 09:08:36 -0000	1.27
  +++ ossp-pkg/fsl/ChangeLog	19 Mar 2004 22:36:07 -0000	1.28
  @@ -8,6 +8,18 @@
   
     CHANGELOG
   
  +  Changes between 1.4.0 and 1.5a1 (dd-mmm-2004)
  +
  +    *) Fix PR#39: configure --with-l2 does not work because it checks
  +       for a function that no longer exists. Reported by Kimura Fuyuki.
  +       [Thomas Lotterer <thomas@lotterer.net>]
  +
  +    *) Upgrade and unify build environment devtool an devtool.func;
  +       change devtool.conf to require current versions of shtool,
  +       libtool and autoconf; get rid of "AC_CONFIG_SUBDIRS: you should
  +       use literals" warning.
  +       [Thomas Lotterer <thomas@lotterer.net>]
  +
     Changes between 1.4b1 and 1.4 (12-Jan-2004)
   
       *) None. OpenPKG build farm succeeded on
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/configure.ac
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 configure.ac
  --- ossp-pkg/fsl/configure.ac	19 Mar 2004 15:43:49 -0000	1.17
  +++ ossp-pkg/fsl/configure.ac	19 Mar 2004 22:36:08 -0000	1.18
  @@ -63,7 +63,7 @@
   
   dnl #   check for OSSP l2 library
   AC_CHECK_EXTLIB([OSSP l2],
  -                l2, l2_stream_log, l2.h,
  +                l2, l2_channel_log, l2.h,
                   [SUBDIR_L2=""],
                   [SUBDIR_L2="lib_l2"
                    CPPFLAGS="$CPPFLAGS -Ilib_l2"
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar 25 20:01:52 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 14F52777AD; Thu, 25 Mar 2004 20:01:52 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex/ Makefile.in README aclocal.m4 configure.ac ex...
Message-Id: <20040325190152.14F52777AD@mail.ossp.org>
Date: Thu, 25 Mar 2004 20:01:52 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Mar-2004 20:01:51
  Branch: HEAD                             Handle: 2004032519014203

  Modified files:
    ossp-pkg/ex             Makefile.in README aclocal.m4 configure.ac
                            ex-config.in ex.c ex.h ex.pod ex_test.c ts.c ts.h

  Log:
    bump and adjust copyright

  Summary:
    Revision    Changes     Path
    1.9         +3  -3      ossp-pkg/ex/Makefile.in
    1.12        +3  -3      ossp-pkg/ex/README
    1.5         +3  -3      ossp-pkg/ex/aclocal.m4
    1.8         +3  -3      ossp-pkg/ex/configure.ac
    1.6         +3  -3      ossp-pkg/ex/ex-config.in
    1.10        +3  -3      ossp-pkg/ex/ex.c
    1.25        +3  -3      ossp-pkg/ex/ex.h
    1.29        +3  -3      ossp-pkg/ex/ex.pod
    1.13        +3  -3      ossp-pkg/ex/ex_test.c
    1.6         +3  -3      ossp-pkg/ex/ts.c
    1.4         +3  -3      ossp-pkg/ex/ts.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 Makefile.in
  --- ossp-pkg/ex/Makefile.in	30 Jan 2003 11:04:42 -0000	1.8
  +++ ossp-pkg/ex/Makefile.in	25 Mar 2004 19:01:42 -0000	1.9
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP ex - Exception Handling
  -##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP ex, an exception handling library
   ##  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/README
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 README
  --- ossp-pkg/ex/README	30 Jan 2003 11:04:42 -0000	1.11
  +++ ossp-pkg/ex/README	25 Mar 2004 19:01:42 -0000	1.12
  @@ -31,9 +31,9 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
   
     This file is part of OSSP ex, an exception handling library which
     can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 aclocal.m4
  --- ossp-pkg/ex/aclocal.m4	30 Jan 2003 11:04:42 -0000	1.4
  +++ ossp-pkg/ex/aclocal.m4	25 Mar 2004 19:01:42 -0000	1.5
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP ex - Exception Handling
  -dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
   dnl ##
   dnl ##  This file is part of OSSP ex, an exception handling library
   dnl ##  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/configure.ac
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 configure.ac
  --- ossp-pkg/ex/configure.ac	30 Jan 2003 11:04:42 -0000	1.7
  +++ ossp-pkg/ex/configure.ac	25 Mar 2004 19:01:42 -0000	1.8
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP ex - Exception Handling
  -dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
   dnl ##
   dnl ##  This file is part of OSSP ex, an exception handling library
   dnl ##  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ex-config.in
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ex-config.in
  --- ossp-pkg/ex/ex-config.in	30 Jan 2003 11:04:42 -0000	1.5
  +++ ossp-pkg/ex/ex-config.in	25 Mar 2004 19:01:42 -0000	1.6
  @@ -1,9 +1,9 @@
   #!/bin/sh
   ##
   ##  OSSP ex - Exception Handling
  -##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP ex, an exception handling library
   ##  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ex.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 ex.c
  --- ossp-pkg/ex/ex.c	30 Jan 2003 11:04:42 -0000	1.9
  +++ ossp-pkg/ex/ex.c	25 Mar 2004 19:01:42 -0000	1.10
  @@ -1,8 +1,8 @@
   /*
   **  OSSP ex - Exception Handling
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP ex, an exception handling library
   **  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ex.h
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 ex.h
  --- ossp-pkg/ex/ex.h	18 Mar 2004 15:50:34 -0000	1.24
  +++ ossp-pkg/ex/ex.h	25 Mar 2004 19:01:42 -0000	1.25
  @@ -1,8 +1,8 @@
   /*
   **  OSSP ex - Exception Handling
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP ex, an exception handling library
   **  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ex.pod
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 ex.pod
  --- ossp-pkg/ex/ex.pod	30 Jan 2003 11:04:42 -0000	1.28
  +++ ossp-pkg/ex/ex.pod	25 Mar 2004 19:01:42 -0000	1.29
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP ex - Exception Handling
  -##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP ex, an exception library
   ##  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ex_test.c
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 ex_test.c
  --- ossp-pkg/ex/ex_test.c	30 Jan 2003 11:04:42 -0000	1.12
  +++ ossp-pkg/ex/ex_test.c	25 Mar 2004 19:01:44 -0000	1.13
  @@ -1,8 +1,8 @@
   /*
   **  OSSP ex - Exception Handling
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP ex, an exception handling library
   **  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ts.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ts.c
  --- ossp-pkg/ex/ts.c	10 Feb 2003 10:13:20 -0000	1.5
  +++ ossp-pkg/ex/ts.c	25 Mar 2004 19:01:45 -0000	1.6
  @@ -1,8 +1,8 @@
   /*
   **  TS - OSSP Test Suite Library
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP TS, a small test suite library which
   **  can be found at http://www.ossp.org/pkg/ts/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ts.h
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ts.h
  --- ossp-pkg/ex/ts.h	10 Feb 2003 10:13:21 -0000	1.3
  +++ ossp-pkg/ex/ts.h	25 Mar 2004 19:01:45 -0000	1.4
  @@ -1,8 +1,8 @@
   /*
   **  TS - OSSP Test Suite Library
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP TS, a small test suite library which
   **  can be found at http://www.ossp.org/pkg/ts/.
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 26 17:06:00 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 02B6A777AF; Fri, 26 Mar 2004 17:05:59 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ ChangeLog sa.ac sa.c
Message-Id: <20040326160559.02B6A777AF@mail.ossp.org>
Date: Fri, 26 Mar 2004 17:05:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   26-Mar-2004 17:05:59
  Branch: HEAD                             Handle: 2004032616055900

  Modified files:
    ossp-pkg/sa             ChangeLog sa.ac sa.c

  Log:
    Add autoconf check to detect unimplemented setsockopt features.
    Reported by Amos Gouaux.

  Summary:
    Revision    Changes     Path
    1.29        +13 -0      ossp-pkg/sa/ChangeLog
    1.15        +44 -0      ossp-pkg/sa/sa.ac
    1.77        +7  -7      ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 ChangeLog
  --- ossp-pkg/sa/ChangeLog	10 Nov 2003 18:50:28 -0000	1.28
  +++ ossp-pkg/sa/ChangeLog	26 Mar 2004 16:05:59 -0000	1.29
  @@ -11,6 +11,19 @@
     This is a list of all changes to OSSP sa.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 1.1.0 and FIXME (10-Nov-2003 to FIXME)
  +
  +   o Add SA_CHECK_SOCKOPT autoconf check to detect setsockopt failing
  +     under run-time on Solaris 2.6,8,9,10 and Debian 2.2 because
  +     SO_RCVTIMEO|SO_SNDTIMEO are defined but not implemented.
  +     Issue was found and reported by Amos Gouaux.
  +     [Thomas Lotterer <thl@dev.de.cw.net>]
  +
  +   o Upgrade and unify build environment devtool and devtool.func.
  +     Change devtool.conf to require current versions of
  +     shtool, libtool and autoconf; correct spelling
  +     [Thomas Lotterer <thl@dev.de.cw.net>]
  +
     Changes between 1.0.5 and 1.1.0 (31-Jan-2003 to 10-Nov-2003)
      
      o Upgrade build environment to GNU autoconf 2.58.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.ac
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 sa.ac
  --- ossp-pkg/sa/sa.ac	7 Feb 2003 20:47:51 -0000	1.14
  +++ ossp-pkg/sa/sa.ac	26 Mar 2004 16:05:59 -0000	1.15
  @@ -53,6 +53,48 @@
       fi
   ])
   
  +dnl #  Check whether to use SO_RCVTIMEO|SO_SNDTIMEO with setsockopt(2)
  +dnl #   configure.ac:
  +dnl #     SA_CHECK_SOCKOPT(SO_RCVTIMEO)
  +dnl #     SA_CHECK_SOCKOPT(SO_SNDTIMEO)
  +dnl #   config.h:
  +dnl #     #undef USE_SO_RCVTIMEO or #define USE_SO_RCVTIMEO 1
  +dnl #     #undef USE_SO_SNDTIMEO or #define USE_SO_SNDTIMEO 1
  +
  +AC_DEFUN(SA_CHECK_SOCKOPT, [
  +AC_MSG_CHECKING(whether to use $1 with setsockopt(2))
  +AC_TRY_RUN([
  +#include <sys/types.h>
  +#include <sys/socket.h>
  +#include <sys/time.h>
  +
  +int main(void)
  +{
  +    int s;
  +    struct timeval timeo;
  +    timeo.tv_sec  = 3;
  +    timeo.tv_usec = 3;
  +
  +#ifndef $1
  +    exit(3);
  +#else
  +    if ((s = socket(PF_INET, SOCK_STREAM, 0)) == -1)
  +        exit(2);
  +
  +    /* fails on Solaris 2.6,8,9,10 and Debian 2.2 because
  +       SO_RCVTIMEO|SO_SNDTIMEO are defined but not implemented */
  +    if (setsockopt(s, SOL_SOCKET, $1, (void *)&timeo, sizeof(timeo)) == -1)
  +        exit(1);
  +
  +    exit(0);
  +#endif
  +}
  +]
  +, [ AC_MSG_RESULT([yes]) AC_DEFINE(USE_$1, 1, [Define to use $1 with setsockopt(2)]) ]
  +, [ AC_MSG_RESULT([no]) ]
  +)
  +])dnl
  +
   dnl #   Check for anything OSSP SA wants to know
   dnl #   configure.in:
   dnl #     SA_CHECK_ALL
  @@ -77,5 +119,7 @@
       dnl # check for network/socket size type
       SA_CHECK_TYPEDEF(socklen_t, sys/socket.h)
       SA_CHECK_TYPEDEF(ssize_t, sys/types.h)
  +    SA_CHECK_SOCKOPT(SO_RCVTIMEO)
  +    SA_CHECK_SOCKOPT(SO_SNDTIMEO)
   ])
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.c
  ============================================================================
  $ cvs diff -u -r1.76 -r1.77 sa.c
  --- ossp-pkg/sa/sa.c	17 Feb 2004 09:21:05 -0000	1.76
  +++ ossp-pkg/sa/sa.c	26 Mar 2004 16:05:59 -0000	1.77
  @@ -939,7 +939,7 @@
       if (sa->fdSocket == -1)
           return SA_OK;
   
  -#if defined(SO_RCVTIMEO) && defined(SO_SNDTIMEO)
  +#if defined(SO_RCVTIMEO) && defined(USE_SO_RCVTIMEO) && defined(SO_SNDTIMEO) && defined(USE_SO_SNDTIMEO)
       if (SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_READ])) {
           if (setsockopt(sa->fdSocket, SOL_SOCKET, SO_RCVTIMEO,
                          (const void *)(&sa->tvTimeout[SA_TIMEOUT_READ]),
  @@ -1737,13 +1737,13 @@
   static int sa_read_raw(sa_t *sa, char *cpBuf, int nBufLen)
   {
       int rv;
  -#if !(defined(SO_RCVTIMEO) && defined(SO_SNDTIMEO))
  +#if !(defined(SO_RCVTIMEO) && defined(USE_SO_RCVTIMEO) && defined(SO_SNDTIMEO) && defined(USE_SO_SNDTIMEO))
       fd_set fds;
   #endif
   
       /* if timeout is enabled, perform explicit/smart blocking instead
          of implicitly/hard blocking in the read(2) system call */
  -#if !(defined(SO_RCVTIMEO) && defined(SO_SNDTIMEO))
  +#if !(defined(SO_RCVTIMEO) && defined(USE_SO_RCVTIMEO) && defined(SO_SNDTIMEO) && defined(USE_SO_SNDTIMEO))
       if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_READ])) {
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
  @@ -1763,7 +1763,7 @@
           rv = (int)SA_SC_CALL_3(sa, read, sa->fdSocket, cpBuf, (size_t)nBufLen);
       } while (rv == -1 && errno == EINTR);
   
  -#if defined(SO_RCVTIMEO) && defined(SO_SNDTIMEO)
  +#if defined(SO_RCVTIMEO) && defined(USE_SO_RCVTIMEO) && defined(SO_SNDTIMEO) && defined(USE_SO_SNDTIMEO)
       if (rv == -1 && errno == EWOULDBLOCK)
           errno = ETIMEDOUT;
   #endif
  @@ -1916,13 +1916,13 @@
   static int sa_write_raw(sa_t *sa, const char *cpBuf, int nBufLen)
   {
       int rv;
  -#if !(defined(SO_RCVTIMEO) && defined(SO_SNDTIMEO))
  +#if !(defined(SO_RCVTIMEO) && defined(USE_SO_RCVTIMEO) && defined(SO_SNDTIMEO) && defined(USE_SO_SNDTIMEO))
       fd_set fds;
   #endif
   
       /* if timeout is enabled, perform explicit/smart blocking instead
          of implicitly/hard blocking in the write(2) system call */
  -#if !(defined(SO_RCVTIMEO) && defined(SO_SNDTIMEO))
  +#if !(defined(SO_RCVTIMEO) && defined(USE_SO_RCVTIMEO) && defined(SO_SNDTIMEO) && defined(USE_SO_SNDTIMEO))
       if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_WRITE])) {
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
  @@ -1942,7 +1942,7 @@
           rv = (int)SA_SC_CALL_3(sa, write, sa->fdSocket, cpBuf, (size_t)nBufLen);
       } while (rv == -1 && errno == EINTR);
   
  -#if defined(SO_RCVTIMEO) && defined(SO_SNDTIMEO)
  +#if defined(SO_RCVTIMEO) && defined(USE_SO_RCVTIMEO) && defined(SO_SNDTIMEO) && defined(USE_SO_SNDTIMEO)
       if (rv == -1 && errno == EWOULDBLOCK)
           errno = ETIMEDOUT;
   #endif
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 26 17:49:41 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3E0B2777AA; Fri, 26 Mar 2004 17:49:41 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ ChangeLog THANKS
Message-Id: <20040326164941.3E0B2777AA@mail.ossp.org>
Date: Fri, 26 Mar 2004 17:49:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Mar-2004 17:49:41
  Branch: HEAD                             Handle: 2004032616494000

  Modified files:
    ossp-pkg/sa             ChangeLog THANKS

  Log:
    give credit, too

  Summary:
    Revision    Changes     Path
    1.30        +1  -1      ossp-pkg/sa/ChangeLog
    1.4         +1  -0      ossp-pkg/sa/THANKS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 ChangeLog
  --- ossp-pkg/sa/ChangeLog	26 Mar 2004 16:05:59 -0000	1.29
  +++ ossp-pkg/sa/ChangeLog	26 Mar 2004 16:49:40 -0000	1.30
  @@ -17,7 +17,7 @@
        under run-time on Solaris 2.6,8,9,10 and Debian 2.2 because
        SO_RCVTIMEO|SO_SNDTIMEO are defined but not implemented.
        Issue was found and reported by Amos Gouaux.
  -     [Thomas Lotterer <thl@dev.de.cw.net>]
  +     [Thomas Lotterer <thl@dev.de.cw.net>, Amos Gouaux <amos@utdallas.edu>]
   
      o Upgrade and unify build environment devtool and devtool.func.
        Change devtool.conf to require current versions of
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/THANKS
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 THANKS
  --- ossp-pkg/sa/THANKS	31 Jan 2003 18:34:06 -0000	1.3
  +++ ossp-pkg/sa/THANKS	26 Mar 2004 16:49:40 -0000	1.4
  @@ -20,6 +20,7 @@
       o  Ulrich Dessauer             <udessauer@agnitas.de>
       o  Brian T. Egleston           <brian@egleston.com>
       o  Michael van Elst            <mlelstv@serpens.de>
  +    o  Amos Gouaux                 <amos@utdallas.edu>
       o  Thomas Lotterer             <thomas@lotterer.net>
       o  Alvaro Lopez Ortega         <alvaro@alobbs.com>
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 26 17:55:15 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DB835777AA; Fri, 26 Mar 2004 17:55:14 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ aclocal.m4
Message-Id: <20040326165514.DB835777AA@mail.ossp.org>
Date: Fri, 26 Mar 2004 17:55:14 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   26-Mar-2004 17:55:14
  Branch: HEAD                             Handle: 2004032616551400

  Modified files:
    ossp-pkg/sa             aclocal.m4

  Log:
    reorganize compiler warning options for easier comparison with other
    packages

  Summary:
    Revision    Changes     Path
    1.7         +8  -2      ossp-pkg/sa/aclocal.m4
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 aclocal.m4
  --- ossp-pkg/sa/aclocal.m4	6 Jan 2003 13:11:23 -0000	1.6
  +++ ossp-pkg/sa/aclocal.m4	26 Mar 2004 16:55:14 -0000	1.7
  @@ -79,8 +79,14 @@
       AC_COMPILER_OPTION(defdbg, -DDEBUG, -DDEBUG, CFLAGS="$CFLAGS -DDEBUG")
       CFLAGS="$CFLAGS -pedantic"
       CFLAGS="$CFLAGS -Wall"
  -    WMORE="-Wshadow -Wpointer-arith -Wcast-align -Winline"
  -    WMORE="$WMORE -Wmissing-prototypes -Wmissing-declarations -Wnested-externs"
  +    WMORE=""
  +    WMORE="$WMORE -Wcast-align"
  +    WMORE="$WMORE -Winline"
  +    WMORE="$WMORE -Wmissing-declarations"
  +    WMORE="$WMORE -Wmissing-prototypes"
  +    WMORE="$WMORE -Wnested-externs"
  +    WMORE="$WMORE -Wpointer-arith"
  +    WMORE="$WMORE -Wshadow"
       AC_COMPILER_OPTION(wmore, -W<xxx>, $WMORE, CFLAGS="$CFLAGS $WMORE")
       AC_COMPILER_OPTION(wnolonglong, -Wno-long-long, -Wno-long-long, CFLAGS="$CFLAGS -Wno-long-long")
   else
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 26 17:57:15 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5E5D1777AA; Fri, 26 Mar 2004 17:57:15 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ aclocal.m4 sa.c sa.h
Message-Id: <20040326165715.5E5D1777AA@mail.ossp.org>
Date: Fri, 26 Mar 2004 17:57:15 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   26-Mar-2004 17:57:15
  Branch: HEAD                             Handle: 2004032616571400

  Modified files:
    ossp-pkg/sa             aclocal.m4 sa.c sa.h

  Log:
    add more compiler warning options and fix prototype declarations found
    by -Wstrict-prototypes

  Summary:
    Revision    Changes     Path
    1.8         +5  -0      ossp-pkg/sa/aclocal.m4
    1.78        +10 -10     ossp-pkg/sa/sa.c
    1.38        +1  -1      ossp-pkg/sa/sa.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 aclocal.m4
  --- ossp-pkg/sa/aclocal.m4	26 Mar 2004 16:55:14 -0000	1.7
  +++ ossp-pkg/sa/aclocal.m4	26 Mar 2004 16:57:14 -0000	1.8
  @@ -80,13 +80,18 @@
       CFLAGS="$CFLAGS -pedantic"
       CFLAGS="$CFLAGS -Wall"
       WMORE=""
  +    WMORE="$WMORE -Wbad-function-cast"
       WMORE="$WMORE -Wcast-align"
       WMORE="$WMORE -Winline"
       WMORE="$WMORE -Wmissing-declarations"
       WMORE="$WMORE -Wmissing-prototypes"
  +    WMORE="$WMORE -Wmultichar"
       WMORE="$WMORE -Wnested-externs"
  +    WMORE="$WMORE -Wno-system-headers"
       WMORE="$WMORE -Wpointer-arith"
  +    WMORE="$WMORE -Wredundant-decls"
       WMORE="$WMORE -Wshadow"
  +    WMORE="$WMORE -Wstrict-prototypes"
       AC_COMPILER_OPTION(wmore, -W<xxx>, $WMORE, CFLAGS="$CFLAGS $WMORE")
       AC_COMPILER_OPTION(wnolonglong, -Wno-long-long, -Wno-long-long, CFLAGS="$CFLAGS -Wno-long-long")
   else
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.c
  ============================================================================
  $ cvs diff -u -r1.77 -r1.78 sa.c
  --- ossp-pkg/sa/sa.c	26 Mar 2004 16:05:59 -0000	1.77
  +++ ossp-pkg/sa/sa.c	26 Mar 2004 16:57:14 -0000	1.78
  @@ -116,49 +116,49 @@
   /* system call structure declaration macros */
   #define SA_SC_DECLARE_0(rc_t, fn) \
       struct { \
  -        union { void (*any)(); \
  +        union { void (*any)(void); \
                   rc_t (*std)(void); \
                   rc_t (*ctx)(void *); } fptr; \
           void *fctx; \
       } sc_##fn;
   #define SA_SC_DECLARE_1(rc_t, fn, a1_t) \
       struct { \
  -        union { void (*any)(); \
  +        union { void (*any)(void); \
                   rc_t (*std)(a1_t); \
                   rc_t (*ctx)(void *, a1_t); } fptr; \
           void *fctx; \
       } sc_##fn;
   #define SA_SC_DECLARE_2(rc_t, fn, a1_t, a2_t) \
       struct { \
  -        union { void (*any)(); \
  +        union { void (*any)(void); \
                   rc_t (*std)(a1_t, a2_t); \
                   rc_t (*ctx)(void *, a1_t, a2_t); } fptr; \
           void *fctx; \
       } sc_##fn;
   #define SA_SC_DECLARE_3(rc_t, fn, a1_t, a2_t, a3_t) \
       struct { \
  -        union { void (*any)(); \
  +        union { void (*any)(void); \
                   rc_t (*std)(a1_t, a2_t, a3_t); \
                   rc_t (*ctx)(void *, a1_t, a2_t, a3_t); } fptr; \
           void *fctx; \
       } sc_##fn;
   #define SA_SC_DECLARE_4(rc_t, fn, a1_t, a2_t, a3_t, a4_t) \
       struct { \
  -        union { void (*any)(); \
  +        union { void (*any)(void); \
                   rc_t (*std)(a1_t, a2_t, a3_t, a4_t); \
                   rc_t (*ctx)(void *, a1_t, a2_t, a3_t, a4_t); } fptr; \
           void *fctx; \
       } sc_##fn;
   #define SA_SC_DECLARE_5(rc_t, fn, a1_t, a2_t, a3_t, a4_t, a5_t) \
       struct { \
  -        union { void (*any)(); \
  +        union { void (*any)(void); \
                   rc_t (*std)(a1_t, a2_t, a3_t, a4_t, a5_t); \
                   rc_t (*ctx)(void *, a1_t, a2_t, a3_t, a4_t, a5_t); } fptr; \
           void *fctx; \
       } sc_##fn;
   #define SA_SC_DECLARE_6(rc_t, fn, a1_t, a2_t, a3_t, a4_t, a5_t, a6_t) \
       struct { \
  -        union { void (*any)(); \
  +        union { void (*any)(void); \
                   rc_t (*std)(a1_t, a2_t, a3_t, a4_t, a5_t, a6_t); \
                   rc_t (*ctx)(void *, a1_t, a2_t, a3_t, a4_t, a5_t, a6_t); } fptr; \
           void *fctx; \
  @@ -167,7 +167,7 @@
   /* system call structure assignment macro */
   #define SA_SC_ASSIGN(sa, fn, ptr, ctx) \
       do { \
  -        (sa)->scSysCall.sc_##fn.fptr.any = (void (*)())(ptr); \
  +        (sa)->scSysCall.sc_##fn.fptr.any = (void (*)(void))(ptr); \
           (sa)->scSysCall.sc_##fn.fctx = (ctx); \
       } while (0)
   
  @@ -182,7 +182,7 @@
   #define SA_SC_CALL_0(sa, fn) \
       (   (sa)->scSysCall.sc_##fn.fctx != NULL \
        ? ((sa)->scSysCall.sc_##fn.fptr.ctx)((sa)->scSysCall.sc_##fn.fctx) \
  -     : ((sa)->scSysCall.sc_##fn.fptr.std)() )
  +     : ((sa)->scSysCall.sc_##fn.fptr.std)(void) )
   #define SA_SC_CALL_1(sa, fn, a1) \
       (   (sa)->scSysCall.sc_##fn.fctx != NULL \
        ? ((sa)->scSysCall.sc_##fn.fptr.ctx)((sa)->scSysCall.sc_##fn.fctx, a1) \
  @@ -1393,7 +1393,7 @@
   }
   
   /* override system call */
  -sa_rc_t sa_syscall(sa_t *sa, sa_syscall_t id, void (*fptr)(), void *fctx)
  +sa_rc_t sa_syscall(sa_t *sa, sa_syscall_t id, void (*fptr)(void), void *fctx)
   {
       sa_rc_t rv;
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.h
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 sa.h
  --- ossp-pkg/sa/sa.h	23 Jan 2003 16:21:06 -0000	1.37
  +++ ossp-pkg/sa/sa.h	26 Mar 2004 16:57:14 -0000	1.38
  @@ -182,7 +182,7 @@
   extern sa_rc_t sa_timeout      (sa_t  *__sa, sa_timeout_t __id, long __sec, long __usec);
   extern sa_rc_t sa_buffer       (sa_t  *__sa, sa_buffer_t  __id, size_t __size);
   extern sa_rc_t sa_option       (sa_t  *__sa, sa_option_t  __id, ...);
  -extern sa_rc_t sa_syscall      (sa_t  *__sa, sa_syscall_t __id, void (*__fptr)(), void *__fctx);
  +extern sa_rc_t sa_syscall      (sa_t  *__sa, sa_syscall_t __id, void (*__fptr)(void), void *__fctx);
   
   /* socket connection operations */
   extern sa_rc_t sa_bind         (sa_t  *__sa, sa_addr_t  *__laddr);
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 26 18:14:19 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5195D777AF; Fri, 26 Mar 2004 18:14:19 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ devtool.conf
Message-Id: <20040326171419.5195D777AF@mail.ossp.org>
Date: Fri, 26 Mar 2004 18:14:19 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   26-Mar-2004 18:14:19
  Branch: HEAD                             Handle: 2004032617141800

  Modified files:
    ossp-pkg/l2             devtool.conf

  Log:
    automate large parts of lib_sa import

  Summary:
    Revision    Changes     Path
    1.15        +13 -0      ossp-pkg/l2/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 devtool.conf
  --- ossp-pkg/l2/devtool.conf	19 Mar 2004 14:55:47 -0000	1.14
  +++ ossp-pkg/l2/devtool.conf	26 Mar 2004 17:14:18 -0000	1.15
  @@ -28,6 +28,19 @@
   ##  devtool.conf -- Development Tool Configuration
   ##
   
  +%import
  +    #../lib_sa has to be prepared manually
  +    for i in sa.ac sa.c sa.h; do
  +        cp ../lib_sa/$i l2_ut_$i
  +    done
  +    awk <l2_ut_sa.h '
  +            BEGIN { p=1 }
  +            /^#ifdef HAVE_CONFIG_H/ { print "#define SA_PREFIX l2_util_\n#include \"l2_config.h\"\n"; p=0 }
  +            // { if (p==1) print $0 }
  +            /^#endif/ { p=1 }
  +            ' >l2_ut_sa.h.n && mv l2_ut_sa.h.n l2_ut_sa.h
  +    shtool subst -e 's;#include "sa.h";#include "l2_ut_sa.h";' l2_ut_sa.c
  +
   %autogen
       @autogen shtool   1.6.2 "1.6.*" echo fixperm install mkdir tarball version
       @autogen libtool  1.5.2 "1.5*"
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 26 18:14:49 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 589CB777B9; Fri, 26 Mar 2004 18:14:49 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ l2_ut_sa.ac l2_ut_sa.c l2_ut_sa.h
Message-Id: <20040326171449.589CB777B9@mail.ossp.org>
Date: Fri, 26 Mar 2004 18:14:49 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   26-Mar-2004 18:14:49
  Branch: HEAD                             Handle: 2004032617144800

  Modified files:
    ossp-pkg/l2             l2_ut_sa.ac l2_ut_sa.c l2_ut_sa.h

  Log:
    import most recent lib_sa

  Summary:
    Revision    Changes     Path
    1.8         +48 -4      ossp-pkg/l2/l2_ut_sa.ac
    1.23        +184 -123   ossp-pkg/l2/l2_ut_sa.c
    1.20        +5  -3      ossp-pkg/l2/l2_ut_sa.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_sa.ac
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 l2_ut_sa.ac
  --- ossp-pkg/l2/l2_ut_sa.ac	9 Nov 2002 14:44:31 -0000	1.7
  +++ ossp-pkg/l2/l2_ut_sa.ac	26 Mar 2004 17:14:48 -0000	1.8
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP sa - Socket Abstraction
  -dnl ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
   dnl ##
   dnl ##  This file is part of OSSP sa, a socket abstraction library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/sa/.
  @@ -53,6 +53,48 @@
       fi
   ])
   
  +dnl #  Check whether to use SO_RCVTIMEO|SO_SNDTIMEO with setsockopt(2)
  +dnl #   configure.ac:
  +dnl #     SA_CHECK_SOCKOPT(SO_RCVTIMEO)
  +dnl #     SA_CHECK_SOCKOPT(SO_SNDTIMEO)
  +dnl #   config.h:
  +dnl #     #undef USE_SO_RCVTIMEO or #define USE_SO_RCVTIMEO 1
  +dnl #     #undef USE_SO_SNDTIMEO or #define USE_SO_SNDTIMEO 1
  +
  +AC_DEFUN(SA_CHECK_SOCKOPT, [
  +AC_MSG_CHECKING(whether to use $1 with setsockopt(2))
  +AC_TRY_RUN([
  +#include <sys/types.h>
  +#include <sys/socket.h>
  +#include <sys/time.h>
  +
  +int main(void)
  +{
  +    int s;
  +    struct timeval timeo;
  +    timeo.tv_sec  = 3;
  +    timeo.tv_usec = 3;
  +
  +#ifndef $1
  +    exit(3);
  +#else
  +    if ((s = socket(PF_INET, SOCK_STREAM, 0)) == -1)
  +        exit(2);
  +
  +    /* fails on Solaris 2.6,8,9,10 and Debian 2.2 because
  +       SO_RCVTIMEO|SO_SNDTIMEO are defined but not implemented */
  +    if (setsockopt(s, SOL_SOCKET, $1, (void *)&timeo, sizeof(timeo)) == -1)
  +        exit(1);
  +
  +    exit(0);
  +#endif
  +}
  +]
  +, [ AC_MSG_RESULT([yes]) AC_DEFINE(USE_$1, 1, [Define to use $1 with setsockopt(2)]) ]
  +, [ AC_MSG_RESULT([no]) ]
  +)
  +])dnl
  +
   dnl #   Check for anything OSSP SA wants to know
   dnl #   configure.in:
   dnl #     SA_CHECK_ALL
  @@ -72,10 +114,12 @@
       AC_CHECK_HEADERS(string.h sys/types.h sys/socket.h netdb.h netinet/in.h)
   
       #   check for system functions
  -    AC_CHECK_FUNCS(inet_addr inet_aton inet_pton inet_ntoa inet_ntop snprintf)
  +    AC_CHECK_FUNCS(inet_addr inet_aton inet_pton inet_ntoa inet_ntop snprintf getaddrinfo)
   
       dnl # check for network/socket size type
       SA_CHECK_TYPEDEF(socklen_t, sys/socket.h)
       SA_CHECK_TYPEDEF(ssize_t, sys/types.h)
  +    SA_CHECK_SOCKOPT(SO_RCVTIMEO)
  +    SA_CHECK_SOCKOPT(SO_SNDTIMEO)
   ])
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_sa.c
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 l2_ut_sa.c
  --- ossp-pkg/l2/l2_ut_sa.c	17 Feb 2004 09:21:04 -0000	1.22
  +++ ossp-pkg/l2/l2_ut_sa.c	26 Mar 2004 17:14:48 -0000	1.23
  @@ -29,7 +29,9 @@
   */
   
   /* include optional Autoconf header */
  -#include "l2_config.h"
  +#ifdef HAVE_CONFIG_H
  +#include "config.h"
  +#endif
   
   /* include system API headers */
   #include <stdio.h>       /* for "s[n]printf()" */
  @@ -37,7 +39,7 @@
   #include <stdarg.h>      /* for "va_XXX()" and "va_list" */
   #include <string.h>      /* for "strXXX()" and "size_t" */
   #include <sys/types.h>   /* for general prerequisites */
  -#include <ctype.h>       /* for isXXX() */
  +#include <ctype.h>       /* for "isXXX()" */
   #include <errno.h>       /* for "EXXX" */
   #include <fcntl.h>       /* for "F_XXX" and "O_XXX" */
   #include <unistd.h>      /* for standard Unix stuff */
  @@ -102,7 +104,7 @@
   #endif
   
   /* backward compatibility for ssize_t */
  -#if !defined(HAVE_SSIZE_T)
  +#if defined(HAVE_CONFIG_H) && !defined(HAVE_SSIZE_T)
   #define ssize_t long
   #endif
   
  @@ -114,49 +116,49 @@
   /* system call structure declaration macros */
   #define SA_SC_DECLARE_0(rc_t, fn) \
       struct { \
  -        union { void (*any)(); \
  +        union { void (*any)(void); \
                   rc_t (*std)(void); \
                   rc_t (*ctx)(void *); } fptr; \
           void *fctx; \
       } sc_##fn;
   #define SA_SC_DECLARE_1(rc_t, fn, a1_t) \
       struct { \
  -        union { void (*any)(); \
  +        union { void (*any)(void); \
                   rc_t (*std)(a1_t); \
                   rc_t (*ctx)(void *, a1_t); } fptr; \
           void *fctx; \
       } sc_##fn;
   #define SA_SC_DECLARE_2(rc_t, fn, a1_t, a2_t) \
       struct { \
  -        union { void (*any)(); \
  +        union { void (*any)(void); \
                   rc_t (*std)(a1_t, a2_t); \
                   rc_t (*ctx)(void *, a1_t, a2_t); } fptr; \
           void *fctx; \
       } sc_##fn;
   #define SA_SC_DECLARE_3(rc_t, fn, a1_t, a2_t, a3_t) \
       struct { \
  -        union { void (*any)(); \
  +        union { void (*any)(void); \
                   rc_t (*std)(a1_t, a2_t, a3_t); \
                   rc_t (*ctx)(void *, a1_t, a2_t, a3_t); } fptr; \
           void *fctx; \
       } sc_##fn;
   #define SA_SC_DECLARE_4(rc_t, fn, a1_t, a2_t, a3_t, a4_t) \
       struct { \
  -        union { void (*any)(); \
  +        union { void (*any)(void); \
                   rc_t (*std)(a1_t, a2_t, a3_t, a4_t); \
                   rc_t (*ctx)(void *, a1_t, a2_t, a3_t, a4_t); } fptr; \
           void *fctx; \
       } sc_##fn;
   #define SA_SC_DECLARE_5(rc_t, fn, a1_t, a2_t, a3_t, a4_t, a5_t) \
       struct { \
  -        union { void (*any)(); \
  +        union { void (*any)(void); \
                   rc_t (*std)(a1_t, a2_t, a3_t, a4_t, a5_t); \
                   rc_t (*ctx)(void *, a1_t, a2_t, a3_t, a4_t, a5_t); } fptr; \
           void *fctx; \
       } sc_##fn;
   #define SA_SC_DECLARE_6(rc_t, fn, a1_t, a2_t, a3_t, a4_t, a5_t, a6_t) \
       struct { \
  -        union { void (*any)(); \
  +        union { void (*any)(void); \
                   rc_t (*std)(a1_t, a2_t, a3_t, a4_t, a5_t, a6_t); \
                   rc_t (*ctx)(void *, a1_t, a2_t, a3_t, a4_t, a5_t, a6_t); } fptr; \
           void *fctx; \
  @@ -165,7 +167,7 @@
   /* system call structure assignment macro */
   #define SA_SC_ASSIGN(sa, fn, ptr, ctx) \
       do { \
  -        (sa)->scSysCall.sc_##fn.fptr.any = (void (*)())(ptr); \
  +        (sa)->scSysCall.sc_##fn.fptr.any = (void (*)(void))(ptr); \
           (sa)->scSysCall.sc_##fn.fctx = (ctx); \
       } while (0)
   
  @@ -180,7 +182,7 @@
   #define SA_SC_CALL_0(sa, fn) \
       (   (sa)->scSysCall.sc_##fn.fctx != NULL \
        ? ((sa)->scSysCall.sc_##fn.fptr.ctx)((sa)->scSysCall.sc_##fn.fctx) \
  -     : ((sa)->scSysCall.sc_##fn.fptr.std)() )
  +     : ((sa)->scSysCall.sc_##fn.fptr.std)(void) )
   #define SA_SC_CALL_1(sa, fn, a1) \
       (   (sa)->scSysCall.sc_##fn.fctx != NULL \
        ? ((sa)->scSysCall.sc_##fn.fptr.ctx)((sa)->scSysCall.sc_##fn.fctx, a1) \
  @@ -250,6 +252,7 @@
       ((tv).tv_sec == 0 && (tv).tv_usec == 0)
   
   /* convert Internet address from presentation to network format */
  +#ifndef HAVE_GETADDRINFO
   static int sa_inet_pton(int family, const char *strptr, void *addrptr)
   {
   #ifdef HAVE_INET_PTON
  @@ -276,6 +279,7 @@
       return 0;
   #endif
   }
  +#endif /* !HAVE_GETADDRINFO */
   
   /* convert Internet address from network to presentation format */
   static const char *sa_inet_ntop(int family, const void *src, char *dst, size_t size)
  @@ -283,8 +287,10 @@
   #ifdef HAVE_INET_NTOP
       return inet_ntop(family, src, dst, size);
   #else
  +#ifdef HAVE_INET_NTOA
       char *cp;
       int n;
  +#endif
   
       if (family == AF_INET) {
   #ifdef HAVE_INET_NTOA
  @@ -325,19 +331,19 @@
               if (c == '%') {
                   /* expand "%%" */
                   cp = &c;
  -                n = sizeof(char);
  +                n = (int)sizeof(char);
               }
               else if (c == 'c') {
                   /* expand "%c" */
                   c = (char)va_arg(ap, int);
                   cp = &c;
  -                n = sizeof(char);
  +                n = (int)sizeof(char);
               }
               else if (c == 's') {
                   /* expand "%s" */
                   if ((cp = (char *)va_arg(ap, char *)) == NULL)
                       cp = "(null)";
  -                n = strlen(cp);
  +                n = (int)strlen(cp);
               }
               else if (c == 'd') {
                   /* expand "%d" */
  @@ -348,7 +354,7 @@
                   sprintf(ibuf, "%d", d);                /* implicitly secure */
   #endif
                   cp = ibuf;
  -                n = strlen(cp);
  +                n = (int)strlen(cp);
               }
               else {
                   /* any other "%X" */
  @@ -362,11 +368,11 @@
               cp = (char *)format;
               if ((format = strchr(cp, '%')) == NULL)
                   format = strchr(cp, '\0');
  -            n = format - cp;
  +            n = (int)(format - cp);
           }
           /* perform output operation */
           if (output != NULL)
  -            if ((n = output(ctx, cp, n)) == -1)
  +            if ((n = output(ctx, cp, (size_t)n)) == -1)
                   break;
           bytes += n;
       }
  @@ -389,7 +395,7 @@
       memcpy(ctx->bufptr, buffer, bufsize);
       ctx->bufptr += bufsize;
       ctx->buflen -= bufsize;
  -    return bufsize;
  +    return (int)bufsize;
   }
   
   /* minimal vsnprintf(3) variant which supports %{c,s,d} only */
  @@ -477,13 +483,19 @@
       socklen_t sl;
       struct sockaddr *sa;
       struct sockaddr_un un;
  +#ifdef HAVE_GETADDRINFO
  +    struct addrinfo ai_hints;
  +    struct addrinfo *ai = NULL;
  +    int err;
  +#else
       struct sockaddr_in sa4;
   #ifdef AF_INET6
       struct sockaddr_in6 sa6;
   #endif
  -    int bIPv6;
       struct hostent *he;
  +#endif
       struct servent *se;
  +    int bIPv6;
       int bNumeric;
       char *cpHost;
       char *cpPort;
  @@ -493,7 +505,8 @@
       char uribuf[1024];
       char *cp;
       int i;
  -    int n;
  +    size_t n;
  +    int k;
   
       /* argument sanity check(s) */
       if (saa == NULL || uri == NULL)
  @@ -501,8 +514,10 @@
   
       /* on-the-fly create or just take over URI */
       va_start(ap, uri);
  -    sa_mvsnprintf(uribuf, sizeof(uribuf), uri, ap);
  +    k = sa_mvsnprintf(uribuf, sizeof(uribuf), uri, ap);
       va_end(ap);
  +    if (k == -1)
  +        return SA_RC(SA_ERR_MEM);
   
       /* initialize result variables */
       sa = NULL;
  @@ -539,7 +554,7 @@
   
           /* provide results */
           sa = (struct sockaddr *)&un;
  -        sl = sizeof(un);
  +        sl = (socklen_t)sizeof(un);
           sf = AF_LOCAL;
       }
       else if (strncmp(uri, "inet://", 7) == 0) {
  @@ -591,6 +606,28 @@
               nPort = ntohs(se->s_port);
           }
   
  +#ifdef HAVE_GETADDRINFO
  +        memset(&ai_hints, 0, sizeof(ai_hints));
  +        ai_hints.ai_family = PF_UNSPEC;
  +        if ((err = getaddrinfo(cpHost, NULL, &ai_hints, &ai)) != 0) {
  +            if (err == EAI_MEMORY)
  +                return SA_RC(SA_ERR_MEM);
  +            else if (err == EAI_SYSTEM)
  +                return SA_RC(SA_ERR_SYS);
  +            else
  +                return SA_RC(SA_ERR_ARG);
  +        }
  +        sa = ai->ai_addr;
  +        sl = ai->ai_addrlen;
  +        sf = ai->ai_family;
  +        if (sf == AF_INET)
  +            ((struct sockaddr_in *)sa)->sin_port = htons(nPort);
  +        else if (sf == AF_INET6)
  +            ((struct sockaddr_in6 *)sa)->sin6_port = htons(nPort);
  +        else
  +            return SA_RC(SA_ERR_ARG);
  +#else /* !HAVE_GETADDRINFO */
  +
           /* mandatory(!) socket address structure initialization */
           memset(&sa4, 0, sizeof(sa4));
   #ifdef AF_INET6
  @@ -603,7 +640,7 @@
               sa4.sin_family = AF_INET;
               sa4.sin_port = htons(nPort);
               sa = (struct sockaddr *)&sa4;
  -            sl = sizeof(sa4);
  +            sl = (socklen_t)sizeof(sa4);
               sf = AF_INET;
           }
   #ifdef AF_INET6
  @@ -611,7 +648,7 @@
               sa6.sin6_family = AF_INET6;
               sa6.sin6_port = htons(nPort);
               sa = (struct sockaddr *)&sa6;
  -            sl = sizeof(sa6);
  +            sl = (socklen_t)sizeof(sa6);
               sf = AF_INET6;
           }
   #endif
  @@ -622,7 +659,7 @@
                   memcpy(&sa4.sin_addr.s_addr, he->h_addr_list[0],
                          sizeof(sa4.sin_addr.s_addr));
                   sa = (struct sockaddr *)&sa4;
  -                sl = sizeof(sa4);
  +                sl = (socklen_t)sizeof(sa4);
                   sf = AF_INET;
               }
   #ifdef AF_INET6
  @@ -632,7 +669,7 @@
                   memcpy(&sa6.sin6_addr.s6_addr, he->h_addr_list[0],
                          sizeof(sa6.sin6_addr.s6_addr));
                   sa = (struct sockaddr *)&sa6;
  -                sl = sizeof(sa6);
  +                sl = (socklen_t)sizeof(sa6);
                   sf = AF_INET6;
               }
   #endif
  @@ -641,6 +678,7 @@
           }
           else
               return SA_RC(SA_ERR_ARG);
  +#endif /* !HAVE_GETADDRINFO */
       }
       else
           return SA_RC(SA_ERR_ARG);
  @@ -648,11 +686,16 @@
       /* fill-in result address structure */
       if (saa->saBuf != NULL)
           free(saa->saBuf);
  -    if ((saa->saBuf = (struct sockaddr *)malloc(sl)) == NULL)
  +    if ((saa->saBuf = (struct sockaddr *)malloc((size_t)sl)) == NULL)
           return SA_RC(SA_ERR_MEM);
  -    memcpy(saa->saBuf, sa, sl);
  +    memcpy(saa->saBuf, sa, (size_t)sl);
       saa->slBuf = sl;
  -    saa->nFamily = sf;
  +    saa->nFamily = (int)sf;
  +
  +#ifdef HAVE_GETADDRINFO
  +    if (ai != NULL)
  +        freeaddrinfo(ai);
  +#endif
   
       return SA_OK;
   }
  @@ -676,13 +719,13 @@
       /* create result address structure */
       if (saa->saBuf != NULL)
           free(saa->saBuf);
  -    if ((saa->saBuf = (struct sockaddr *)malloc(salen)) == NULL)
  +    if ((saa->saBuf = (struct sockaddr *)malloc((size_t)salen)) == NULL)
           return SA_RC(SA_ERR_MEM);
  -    memcpy(saa->saBuf, sabuf, salen);
  +    memcpy(saa->saBuf, sabuf, (size_t)salen);
       saa->slBuf = salen;
   
       /* remember family */
  -    saa->nFamily = sabuf->sa_family;
  +    saa->nFamily = (int)(sabuf->sa_family);
   
       return SA_OK;
   }
  @@ -708,27 +751,35 @@
           un = (struct sockaddr_un *)((void *)saa->saBuf);
           if (   (   saa->slBuf >= (socklen_t)(&(((struct sockaddr_un *)0)->sun_path[0]))
                   && un->sun_path[0] == '\0')
  -            || saa->slBuf < sizeof(struct sockaddr_un))
  +            || (size_t)(saa->slBuf) < sizeof(struct sockaddr_un)) {
               /* in case the remote side of a Unix Domain socket was not
                  bound, a "struct sockaddr_un" can occur with a length less
                  than the expected one. Then there is actually no path at all.
                  This has been verified under FreeBSD, Linux and Solaris. */
  -            sa_msnprintf(uribuf, sizeof(uribuf), "unix:/NOT-BOUND");
  -        else
  -            sa_msnprintf(uribuf, sizeof(uribuf), "unix:%s", un->sun_path);
  +            if (sa_msnprintf(uribuf, sizeof(uribuf), "unix:/NOT-BOUND") == -1)
  +                return SA_RC(SA_ERR_FMT);
  +        }
  +        else {
  +            if (sa_msnprintf(uribuf, sizeof(uribuf), "unix:%s", un->sun_path) == -1)
  +                return SA_RC(SA_ERR_FMT);
  +        }
       }
       else if (saa->nFamily == AF_INET) {
           sa4 = (struct sockaddr_in *)((void *)saa->saBuf);
  -        sa_inet_ntop(AF_INET, &sa4->sin_addr.s_addr, caHost, sizeof(caHost));
  +        if (sa_inet_ntop(AF_INET, &sa4->sin_addr.s_addr, caHost, sizeof(caHost)) == NULL)
  +            return SA_RC(SA_ERR_NET);
           nPort = ntohs(sa4->sin_port);
  -        sa_msnprintf(uribuf, sizeof(uribuf), "inet://%s:%d", caHost, nPort);
  +        if (sa_msnprintf(uribuf, sizeof(uribuf), "inet://%s:%d", caHost, nPort) == -1)
  +            return SA_RC(SA_ERR_FMT);
       }
   #ifdef AF_INET6
       else if (saa->nFamily == AF_INET6) {
           sa6 = (struct sockaddr_in6 *)((void *)saa->saBuf);
  -        sa_inet_ntop(AF_INET6, &sa6->sin6_addr.s6_addr, caHost, sizeof(caHost));
  +        if (sa_inet_ntop(AF_INET6, &sa6->sin6_addr.s6_addr, caHost, sizeof(caHost)) == NULL)
  +            return SA_RC(SA_ERR_NET);
           nPort = ntohs(sa6->sin6_port);
  -        sa_msnprintf(uribuf, sizeof(uribuf), "inet://[%s]:%d", caHost, nPort);
  +        if (sa_msnprintf(uribuf, sizeof(uribuf), "inet://[%s]:%d", caHost, nPort) == -1)
  +            return SA_RC(SA_ERR_FMT);
       }
   #endif
       else
  @@ -748,9 +799,9 @@
           return SA_RC(SA_ERR_ARG);
   
       /* export underlying address structure */
  -    if ((*sabuf = (struct sockaddr *)malloc(saa->slBuf)) == NULL)
  +    if ((*sabuf = (struct sockaddr *)malloc((size_t)saa->slBuf)) == NULL)
           return SA_RC(SA_ERR_MEM);
  -    memmove(*sabuf, saa->saBuf, saa->slBuf);
  +    memmove(*sabuf, saa->saBuf, (size_t)saa->slBuf);
       *salen = saa->slBuf;
   
       return SA_OK;
  @@ -789,10 +840,10 @@
           if (prefixlen < 0) {
               if (l1 != l2)
                   return SA_RC(SA_ERR_MTC);
  -            nBits = l1;
  +            nBits = (int)l1;
           }
           else {
  -            if (l1 < prefixlen || l2 < prefixlen)
  +            if ((int)l1 < prefixlen || (int)l2 < prefixlen)
                   return SA_RC(SA_ERR_MTC);
               nBits = prefixlen;
           }
  @@ -819,9 +870,9 @@
               ucp2 += 12;
           }
           for (i = 0; i < 10; i++)
  -            if (ucp0[i] != 0x00)
  +            if ((int)ucp0[i] != 0x00)
                   return SA_RC(SA_ERR_MTC);
  -        if (!(ucp0[10] == 0xFF && ucp0[11] == 0xFF))
  +        if (!((int)ucp0[10] == 0xFF && (int)ucp0[11] == 0xFF))
               return SA_RC(SA_ERR_MTC);
           nBits = 32;
       }
  @@ -862,13 +913,13 @@
       nBytes = (prefixlen / 8);
       nBits  = (prefixlen % 8);
       if (nBytes > 0) {
  -        if (memcmp(ucp1, ucp2, nBytes) != 0)
  +        if (memcmp(ucp1, ucp2, (size_t)nBytes) != 0)
               return SA_RC(SA_ERR_MTC);
       }
       if (nBits > 0) {
  -        uc1 = ucp1[nBytes];
  -        uc2 = ucp2[nBytes];
  -        mask = (0xFF << (8-nBits)) & 0xFF;
  +        uc1 = (unsigned int)ucp1[nBytes];
  +        uc2 = (unsigned int)ucp2[nBytes];
  +        mask = ((unsigned int)0xFF << (8-nBits)) & (unsigned int)0xFF;
           if ((uc1 & mask) != (uc2 & mask))
               return SA_RC(SA_ERR_MTC);
       }
  @@ -888,7 +939,7 @@
       if (sa->fdSocket == -1)
           return SA_OK;
   
  -#if defined(SO_RCVTIMEO) && defined(SO_SNDTIMEO)
  +#if defined(SO_RCVTIMEO) && defined(USE_SO_RCVTIMEO) && defined(SO_SNDTIMEO) && defined(USE_SO_SNDTIMEO)
       if (SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_READ])) {
           if (setsockopt(sa->fdSocket, SOL_SOCKET, SO_RCVTIMEO,
                          (const void *)(&sa->tvTimeout[SA_TIMEOUT_READ]),
  @@ -917,7 +968,7 @@
   
       /* check for pending options */
       rv = SA_OK;
  -    for (i = 0; i < (sizeof(sa->optInfo)/sizeof(sa->optInfo[0])); i++) {
  +    for (i = 0; i < (int)(sizeof(sa->optInfo)/sizeof(sa->optInfo[0])); i++) {
           if (sa->optInfo[i].todo) {
               switch (i) {
                   /* enable/disable Nagle's Algorithm (see RFC898) */
  @@ -1081,7 +1132,7 @@
           return SA_RC(SA_ERR_USE);
   
       /* close socket */
  -    close(sa->fdSocket);
  +    (void)close(sa->fdSocket);
       sa->fdSocket = -1;
   
       return SA_OK;
  @@ -1112,13 +1163,13 @@
       sa->cpWriteBuf     = NULL;
   
       /* init timeval object attributes */
  -    for (i = 0; i < (sizeof(sa->tvTimeout)/sizeof(sa->tvTimeout[0])); i++) {
  +    for (i = 0; i < (int)(sizeof(sa->tvTimeout)/sizeof(sa->tvTimeout[0])); i++) {
           sa->tvTimeout[i].tv_sec  = 0;
           sa->tvTimeout[i].tv_usec = 0;
       }
   
       /* init options object attributes */
  -    for (i = 0; i < (sizeof(sa->optInfo)/sizeof(sa->optInfo[0])); i++) {
  +    for (i = 0; i < (int)(sizeof(sa->optInfo)/sizeof(sa->optInfo[0])); i++) {
           sa->optInfo[i].todo  = FALSE;
           sa->optInfo[i].value = 0;
       }
  @@ -1146,7 +1197,7 @@
           return SA_RC(SA_ERR_ARG);
   
       /* kill underlying socket */
  -    sa_socket_kill(sa);
  +    (void)sa_socket_kill(sa);
   
       /* free object and sub-objects */
       if (sa->cpReadBuf != NULL)
  @@ -1188,7 +1239,7 @@
           return SA_RC(SA_ERR_ARG);
   
       if (id == SA_TIMEOUT_ALL) {
  -        for (i = 0; i < (sizeof(sa->tvTimeout)/sizeof(sa->tvTimeout[0])); i++) {
  +        for (i = 0; i < (int)(sizeof(sa->tvTimeout)/sizeof(sa->tvTimeout[0])); i++) {
               sa->tvTimeout[i].tv_sec  = sec;
               sa->tvTimeout[i].tv_usec = usec;
           }
  @@ -1216,7 +1267,7 @@
   
       if (id == SA_BUFFER_READ) {
           /* configure read/incoming buffer */
  -        if (sa->nReadLen > size)
  +        if (sa->nReadLen > (int)size)
               return SA_RC(SA_ERR_USE);
           if (size > 0) {
               if (sa->cpReadBuf == NULL)
  @@ -1226,7 +1277,7 @@
               if (cp == NULL)
                   return SA_RC(SA_ERR_MEM);
               sa->cpReadBuf = cp;
  -            sa->nReadSize = size;
  +            sa->nReadSize = (int)size;
           }
           else {
               if (sa->cpReadBuf != NULL)
  @@ -1237,7 +1288,7 @@
       }
       else if (id == SA_BUFFER_WRITE) {
           /* configure write/outgoing buffer */
  -        if (sa->nWriteLen > size)
  +        if (sa->nWriteLen > (int)size)
               return SA_RC(SA_ERR_USE);
           if (size > 0) {
               if (sa->cpWriteBuf == NULL)
  @@ -1247,7 +1298,7 @@
               if (cp == NULL)
                   return SA_RC(SA_ERR_MEM);
               sa->cpWriteBuf = cp;
  -            sa->nWriteSize = size;
  +            sa->nWriteSize = (int)size;
           }
           else {
               if (sa->cpWriteBuf != NULL)
  @@ -1342,7 +1393,7 @@
   }
   
   /* override system call */
  -sa_rc_t sa_syscall(sa_t *sa, sa_syscall_t id, void (*fptr)(), void *fctx)
  +sa_rc_t sa_syscall(sa_t *sa, sa_syscall_t id, void (*fptr)(void), void *fctx)
   {
       sa_rc_t rv;
   
  @@ -1384,7 +1435,7 @@
       /* remove a possibly existing old Unix Domain socket on filesystem */
       if (laddr->nFamily == AF_LOCAL) {
           un = (struct sockaddr_un *)((void *)laddr->saBuf);
  -        unlink(un->sun_path);
  +        (void)unlink(un->sun_path);
       }
   
       /* perform bind operation on underlying socket */
  @@ -1427,7 +1478,7 @@
   
           /* temporarily switch underlying socket to non-blocking mode */
           flags = fcntl(sa->fdSocket, F_GETFL, 0);
  -        fcntl(sa->fdSocket, F_SETFL, flags|O_NONBLOCK);
  +        (void)fcntl(sa->fdSocket, F_SETFL, flags|O_NONBLOCK);
   
           /* perform the connect operation */
           if ((n = SA_SC_CALL_3(sa, connect, sa->fdSocket, raddr->saBuf, raddr->slBuf)) < 0) {
  @@ -1457,25 +1508,25 @@
               goto done;
           }
           else if (n == 0) {
  -            close(sa->fdSocket); /* stop TCP three-way handshake */
  +            (void)close(sa->fdSocket); /* stop TCP three-way handshake */
               sa->fdSocket = -1;
               rv = SA_ERR_TMT;
               goto done;
           }
   
           /* fetch pending error */
  -        len = sizeof(error);
  +        len = (socklen_t)sizeof(error);
           if (getsockopt(sa->fdSocket, SOL_SOCKET, SO_ERROR, (void *)&error, &len) < 0)
               error = errno;
   
           done:
   
           /* reset socket flags */
  -        fcntl(sa->fdSocket, F_SETFL, flags);
  +        (void)fcntl(sa->fdSocket, F_SETFL, flags);
   
           /* optionally set errno */
           if (error != 0) {
  -            close(sa->fdSocket); /* just in case */
  +            (void)close(sa->fdSocket); /* just in case */
               sa->fdSocket = -1;
               errno = error;
               rv = SA_ERR_SYS;
  @@ -1550,7 +1601,7 @@
       }
   
       /* perform accept operation on underlying socket */
  -    sa_size = sizeof(sa_buf);
  +    sa_size = (socklen_t)sizeof(sa_buf);
       if ((s = SA_SC_CALL_3(sa, accept, sa->fdSocket, (struct sockaddr *)&sa_buf, &sa_size)) == -1)
           return SA_RC(SA_ERR_SYS);
   
  @@ -1558,13 +1609,13 @@
       if ((rv = sa_addr_create(caddr)) != SA_OK)
           return SA_RC(rv);
       if ((rv = sa_addr_s2a(*caddr, (struct sockaddr *)&sa_buf, sa_size)) != SA_OK) {
  -        sa_addr_destroy(*caddr);
  +        (void)sa_addr_destroy(*caddr);
           return SA_RC(rv);
       }
   
       /* create result socket object */
       if ((rv = sa_create(csa)) != SA_OK) {
  -        sa_addr_destroy(*caddr);
  +        (void)sa_addr_destroy(*caddr);
           return SA_RC(rv);
       }
   
  @@ -1581,7 +1632,7 @@
       SA_SC_COPY((*csa), sa, sendto);
   
       /* copy-over original timeout values */
  -    for (i = 0; i < (sizeof(sa->tvTimeout)/sizeof(sa->tvTimeout[0])); i++) {
  +    for (i = 0; i < (int)(sizeof(sa->tvTimeout)/sizeof(sa->tvTimeout[0])); i++) {
           (*csa)->tvTimeout[i].tv_sec  = sa->tvTimeout[i].tv_sec;
           (*csa)->tvTimeout[i].tv_usec = sa->tvTimeout[i].tv_usec;
       }
  @@ -1614,7 +1665,7 @@
           return SA_RC(SA_ERR_USE);
   
       /* determine remote address of underlying socket */
  -    sa_size = sizeof(sa_buf);
  +    sa_size = (socklen_t)sizeof(sa_buf);
       if (getpeername(sa->fdSocket, (struct sockaddr *)&sa_buf, &sa_size) < 0)
           return SA_RC(SA_ERR_SYS);
   
  @@ -1622,7 +1673,7 @@
       if ((rv = sa_addr_create(raddr)) != SA_OK)
           return SA_RC(rv);
       if ((rv = sa_addr_s2a(*raddr, (struct sockaddr *)&sa_buf, sa_size)) != SA_OK) {
  -        sa_addr_destroy(*raddr);
  +        (void)sa_addr_destroy(*raddr);
           return SA_RC(rv);
       }
   
  @@ -1650,7 +1701,7 @@
           return SA_RC(SA_ERR_USE);
   
       /* determine local address of underlying socket */
  -    sa_size = sizeof(sa_buf);
  +    sa_size = (socklen_t)sizeof(sa_buf);
       if (getsockname(sa->fdSocket, (struct sockaddr *)&sa_buf, &sa_size) < 0)
           return SA_RC(SA_ERR_SYS);
   
  @@ -1658,7 +1709,7 @@
       if ((rv = sa_addr_create(laddr)) != SA_OK)
           return SA_RC(rv);
       if ((rv = sa_addr_s2a(*laddr, (struct sockaddr *)&sa_buf, sa_size)) != SA_OK) {
  -        sa_addr_destroy(*laddr);
  +        (void)sa_addr_destroy(*laddr);
           return SA_RC(rv);
       }
   
  @@ -1686,13 +1737,13 @@
   static int sa_read_raw(sa_t *sa, char *cpBuf, int nBufLen)
   {
       int rv;
  -#if !(defined(SO_RCVTIMEO) && defined(SO_SNDTIMEO))
  +#if !(defined(SO_RCVTIMEO) && defined(USE_SO_RCVTIMEO) && defined(SO_SNDTIMEO) && defined(USE_SO_SNDTIMEO))
       fd_set fds;
   #endif
   
       /* if timeout is enabled, perform explicit/smart blocking instead
          of implicitly/hard blocking in the read(2) system call */
  -#if !(defined(SO_RCVTIMEO) && defined(SO_SNDTIMEO))
  +#if !(defined(SO_RCVTIMEO) && defined(USE_SO_RCVTIMEO) && defined(SO_SNDTIMEO) && defined(USE_SO_SNDTIMEO))
       if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_READ])) {
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
  @@ -1709,10 +1760,10 @@
   
       /* perform read operation on underlying socket */
       do {
  -        rv = SA_SC_CALL_3(sa, read, sa->fdSocket, cpBuf, nBufLen);
  +        rv = (int)SA_SC_CALL_3(sa, read, sa->fdSocket, cpBuf, (size_t)nBufLen);
       } while (rv == -1 && errno == EINTR);
   
  -#if defined(SO_RCVTIMEO) && defined(SO_SNDTIMEO)
  +#if defined(SO_RCVTIMEO) && defined(USE_SO_RCVTIMEO) && defined(SO_SNDTIMEO) && defined(USE_SO_SNDTIMEO)
       if (rv == -1 && errno == EWOULDBLOCK)
           errno = ETIMEDOUT;
   #endif
  @@ -1744,8 +1795,8 @@
       if (sa->nReadSize == 0) {
           /* user-space unbuffered I/O */
           if (sa->nWriteLen > 0)
  -            sa_flush(sa);
  -        res = sa_read_raw(sa, cpBuf, nBufReq);
  +            (void)sa_flush(sa);
  +        res = sa_read_raw(sa, cpBuf, (int)nBufReq);
           if (res == 0)
               rv = SA_ERR_EOF;
           else if (res < 0 && errno == ETIMEDOUT)
  @@ -1757,7 +1808,7 @@
           /* user-space buffered I/O */
           res = 0;
           for (;;) {
  -            if (nBufReq <= sa->nReadLen) {
  +            if ((int)nBufReq <= sa->nReadLen) {
                   /* buffer holds enough data, so just use this */
                   memmove(cpBuf, sa->cpReadBuf, nBufReq);
                   memmove(sa->cpReadBuf, sa->cpReadBuf+nBufReq, sa->nReadLen-nBufReq);
  @@ -1767,17 +1818,17 @@
               else {
                   if (sa->nReadLen > 0) {
                       /* fetch already existing buffer contents as a start */
  -                    memmove(cpBuf, sa->cpReadBuf, sa->nReadLen);
  +                    memmove(cpBuf, sa->cpReadBuf, (size_t)sa->nReadLen);
                       nBufReq -= sa->nReadLen;
                       cpBuf   += sa->nReadLen;
                       res     += sa->nReadLen;
                       sa->nReadLen = 0;
                   }
                   if (sa->nWriteLen > 0)
  -                    sa_flush(sa);
  -                if (nBufReq >= sa->nReadSize) {
  +                    (void)sa_flush(sa);
  +                if ((int)nBufReq >= sa->nReadSize) {
                       /* buffer is too small at all, so read directly */
  -                    n = sa_read_raw(sa, cpBuf, nBufReq);
  +                    n = sa_read_raw(sa, cpBuf, (int)nBufReq);
                       if (n > 0)
                           res += n;
                       else if (n == 0)
  @@ -1846,7 +1897,7 @@
           rv = sa_read(sa, &c, 1, &n);
           if (rv != SA_OK)
               break;
  -        if (n <= 0)
  +        if (n == 0)
               break;
           cpBuf[res++] = c;
           if (c == '\n')
  @@ -1865,13 +1916,13 @@
   static int sa_write_raw(sa_t *sa, const char *cpBuf, int nBufLen)
   {
       int rv;
  -#if !(defined(SO_RCVTIMEO) && defined(SO_SNDTIMEO))
  +#if !(defined(SO_RCVTIMEO) && defined(USE_SO_RCVTIMEO) && defined(SO_SNDTIMEO) && defined(USE_SO_SNDTIMEO))
       fd_set fds;
   #endif
   
       /* if timeout is enabled, perform explicit/smart blocking instead
          of implicitly/hard blocking in the write(2) system call */
  -#if !(defined(SO_RCVTIMEO) && defined(SO_SNDTIMEO))
  +#if !(defined(SO_RCVTIMEO) && defined(USE_SO_RCVTIMEO) && defined(SO_SNDTIMEO) && defined(USE_SO_SNDTIMEO))
       if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_WRITE])) {
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
  @@ -1888,10 +1939,10 @@
   
       /* perform write operation on underlying socket */
       do {
  -        rv = SA_SC_CALL_3(sa, write, sa->fdSocket, cpBuf, nBufLen);
  +        rv = (int)SA_SC_CALL_3(sa, write, sa->fdSocket, cpBuf, (size_t)nBufLen);
       } while (rv == -1 && errno == EINTR);
   
  -#if defined(SO_RCVTIMEO) && defined(SO_SNDTIMEO)
  +#if defined(SO_RCVTIMEO) && defined(USE_SO_RCVTIMEO) && defined(SO_SNDTIMEO) && defined(USE_SO_SNDTIMEO)
       if (rv == -1 && errno == EWOULDBLOCK)
           errno = ETIMEDOUT;
   #endif
  @@ -1921,7 +1972,7 @@
       rv = SA_OK;
       if (sa->nWriteSize == 0) {
           /* user-space unbuffered I/O */
  -        res = sa_write_raw(sa, cpBuf, nBufReq);
  +        res = sa_write_raw(sa, cpBuf, (int)nBufReq);
           if (res < 0 && errno == ETIMEDOUT)
               rv = SA_ERR_TMT;
           else if (res < 0)
  @@ -1929,15 +1980,15 @@
       }
       else {
           /* user-space buffered I/O */
  -        if (nBufReq > (sa->nWriteSize - sa->nWriteLen)) {
  +        if ((int)nBufReq > (sa->nWriteSize - sa->nWriteLen)) {
               /* not enough space in buffer, so flush buffer first */
  -            sa_flush(sa);
  +            (void)sa_flush(sa);
           }
           res = 0;
  -        if (nBufReq >= sa->nWriteSize) {
  +        if ((int)nBufReq >= sa->nWriteSize) {
               /* buffer too small at all, so write immediately */
               while (nBufReq > 0) {
  -                n = sa_write_raw(sa, cpBuf, nBufReq);
  +                n = sa_write_raw(sa, cpBuf, (int)nBufReq);
                   if (n < 0 && errno == ETIMEDOUT)
                       rv = (res == 0 ? SA_ERR_TMT : SA_OK);
                   else if (n < 0)
  @@ -1953,7 +2004,7 @@
               /* (again) enough sprace in buffer, so store data */
               memmove(sa->cpWriteBuf+sa->nWriteLen, cpBuf, nBufReq);
               sa->nWriteLen += nBufReq;
  -            res = nBufReq;
  +            res = (int)nBufReq;
           }
       }
   
  @@ -1985,7 +2036,7 @@
   sa_rc_t sa_writef(sa_t *sa, const char *cpFmt, ...)
   {
       va_list ap;
  -    size_t n;
  +    int n;
       sa_writef_cb_t ctx;
   
       /* argument sanity check(s) */
  @@ -2005,6 +2056,8 @@
       ctx.sa = sa;
       ctx.rv = SA_OK;
       n = sa_mvxprintf(sa_writef_cb, &ctx, cpFmt, ap);
  +    if (n == -1 && ctx.rv == SA_OK)
  +        ctx.rv = SA_ERR_FMT;
       va_end(ap);
   
       return ctx.rv;
  @@ -2039,7 +2092,7 @@
                   rv = SA_ERR_SYS;
               if (n <= 0)
                   break;
  -            memmove(sa->cpWriteBuf, sa->cpWriteBuf+n, sa->nWriteLen-n);
  +            memmove(sa->cpWriteBuf, sa->cpWriteBuf+n, (size_t)(sa->nWriteLen-n));
               sa->nWriteLen -= n;
           }
           sa->nWriteLen = 0;
  @@ -2077,7 +2130,7 @@
   
       /* flush write buffers */
       if ((how & SHUT_WR) || (how & SHUT_RDWR))
  -        sa_flush(sa);
  +        (void)sa_flush(sa);
   
       /* perform shutdown operation on underlying socket */
       if (shutdown(sa->fdSocket, how) == -1)
  @@ -2097,7 +2150,8 @@
   #endif
       } sa_buf;
       socklen_t sa_size;
  -    size_t n;
  +    ssize_t n;
  +    int k;
       fd_set fds;
   
       /* argument sanity check(s) */
  @@ -2118,17 +2172,17 @@
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
           do {
  -            n = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &fds, NULL, NULL,
  +            k = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &fds, NULL, NULL,
                                &sa->tvTimeout[SA_TIMEOUT_READ]);
  -        } while (n == -1 && errno == EINTR);
  -        if (n == 0)
  +        } while (k == -1 && errno == EINTR);
  +        if (k == 0)
               errno = ETIMEDOUT;
  -        if (n <= 0)
  +        if (k <= 0)
               return SA_RC(SA_ERR_SYS);
       }
   
       /* perform receive operation on underlying socket */
  -    sa_size = sizeof(sa_buf);
  +    sa_size = (socklen_t)sizeof(sa_buf);
       if ((n = SA_SC_CALL_6(sa, recvfrom, sa->fdSocket, buf, buflen, 0,
                             (struct sockaddr *)&sa_buf, &sa_size)) == -1)
           return SA_RC(SA_ERR_SYS);
  @@ -2137,13 +2191,13 @@
       if ((rv = sa_addr_create(raddr)) != SA_OK)
           return rv;
       if ((rv = sa_addr_s2a(*raddr, (struct sockaddr *)&sa_buf, sa_size)) != SA_OK) {
  -        sa_addr_destroy(*raddr);
  +        (void)sa_addr_destroy(*raddr);
           return rv;
       }
   
       /* pass actual number of received bytes to caller */
       if (bufdone != NULL)
  -        *bufdone = n;
  +        *bufdone = (size_t)n;
   
       return SA_OK;
   }
  @@ -2151,7 +2205,8 @@
   /* send data via socket */
   sa_rc_t sa_send(sa_t *sa, sa_addr_t *raddr, const char *buf, size_t buflen, size_t *bufdone)
   {
  -    size_t n;
  +    ssize_t n;
  +    int k;
       fd_set fds;
       sa_rc_t rv;
   
  @@ -2174,12 +2229,12 @@
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
           do {
  -            n = SA_SC_CALL_5(sa, select, sa->fdSocket+1, NULL, &fds, NULL,
  +            k = SA_SC_CALL_5(sa, select, sa->fdSocket+1, NULL, &fds, NULL,
                                &sa->tvTimeout[SA_TIMEOUT_WRITE]);
  -        } while (n == -1 && errno == EINTR);
  -        if (n == 0)
  +        } while (k == -1 && errno == EINTR);
  +        if (k == 0)
               errno = ETIMEDOUT;
  -        if (n <= 0)
  +        if (k <= 0)
               return SA_RC(SA_ERR_SYS);
       }
   
  @@ -2189,7 +2244,7 @@
   
       /* pass actual number of sent bytes to caller */
       if (bufdone != NULL)
  -        *bufdone = n;
  +        *bufdone = (size_t)n;
   
       return SA_OK;
   }
  @@ -2198,7 +2253,7 @@
   sa_rc_t sa_sendf(sa_t *sa, sa_addr_t *raddr, const char *cpFmt, ...)
   {
       va_list ap;
  -    size_t nBuf;
  +    int nBuf;
       char *cpBuf;
       sa_rc_t rv;
       char caBuf[1024];
  @@ -2209,11 +2264,12 @@
   
       /* format string into temporary buffer */
       va_start(ap, cpFmt);
  -    nBuf = sa_mvsnprintf(NULL, 0, cpFmt, ap);
  +    if ((nBuf = sa_mvsnprintf(NULL, 0, cpFmt, ap)) == -1)
  +        return SA_RC(SA_ERR_FMT);
       va_end(ap);
  -    if ((nBuf+1) > sizeof(caBuf)) {
  +    if ((nBuf+1) > (int)sizeof(caBuf)) {
           /* requires a larger buffer, so allocate dynamically */
  -        if ((cpBuf = (char *)malloc(nBuf+1)) == NULL)
  +        if ((cpBuf = (char *)malloc((size_t)(nBuf+1))) == NULL)
               return SA_RC(SA_ERR_MEM);
       }
       else {
  @@ -2221,14 +2277,17 @@
           cpBuf = caBuf;
       }
       va_start(ap, cpFmt);
  -    sa_mvsnprintf(cpBuf, nBuf+1, cpFmt, ap);
  +    rv = SA_OK;
  +    if (sa_mvsnprintf(cpBuf, (size_t)(nBuf+1), cpFmt, ap) == -1)
  +        rv = SA_ERR_FMT;
       va_end(ap);
   
       /* pass-through to sa_send() */
  -    rv = sa_send(sa, raddr, cpBuf, nBuf, NULL);
  +    if (rv == SA_OK)
  +        rv = sa_send(sa, raddr, cpBuf, (size_t)nBuf, NULL);
   
       /* cleanup dynamically allocated buffer */
  -    if ((nBuf+1) > sizeof(caBuf))
  +    if ((nBuf+1) > (int)sizeof(caBuf))
           free(cpBuf);
   
       return rv;
  @@ -2248,6 +2307,8 @@
       else if (rv == SA_ERR_EOF) sz = "End Of Communication";
       else if (rv == SA_ERR_TMT) sz = "Communication Timeout";
       else if (rv == SA_ERR_SYS) sz = "Operating System Error";
  +    else if (rv == SA_ERR_NET) sz = "Networking Error";
  +    else if (rv == SA_ERR_FMT) sz = "Formatting Error";
       else if (rv == SA_ERR_IMP) sz = "Implementation Not Available";
       else if (rv == SA_ERR_INT) sz = "Internal Error";
       else                       sz = "Invalid Result Code";
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_sa.h
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 l2_ut_sa.h
  --- ossp-pkg/l2/l2_ut_sa.h	10 Nov 2003 15:14:11 -0000	1.19
  +++ ossp-pkg/l2/l2_ut_sa.h	26 Mar 2004 17:14:48 -0000	1.20
  @@ -31,18 +31,18 @@
   #ifndef __SA_H__
   #define __SA_H__
   
  -#define SA_PREFIX l2_util_
  -
   /* system definitions of "size_t", "socklen_t", "struct sockaddr *" */
   #include <string.h>
   #include <sys/types.h>
   #include <sys/socket.h>
   
   /* include optional Autoconf header */
  +#define SA_PREFIX l2_util_
   #include "l2_config.h"
   
  +
   /* fallback for POSIX socklen_t */
  -#if !defined(HAVE_SOCKLEN_T)
  +#if defined(HAVE_CONFIG_H) && !defined(HAVE_SOCKLEN_T)
   typedef int socklen_t;
   #endif
   
  @@ -118,6 +118,8 @@
       SA_ERR_EOF, /* End Of Communication         */
       SA_ERR_TMT, /* Communication Timeout        */
       SA_ERR_SYS, /* Operating System Error       */
  +    SA_ERR_NET, /* Networking Error             */
  +    SA_ERR_FMT, /* Formatting Error             */
       SA_ERR_IMP, /* Implementation Not Available */
       SA_ERR_INT  /* Internal Error               */
   } sa_rc_t;
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr  2 10:22:47 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DF00F777FD; Fri,  2 Apr 2004 10:22:46 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_config.c
Message-Id: <20040402082246.DF00F777FD@mail.ossp.org>
Date: Fri,  2 Apr 2004 10:22:46 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   02-Apr-2004 10:22:46
  Branch: HEAD                             Handle: 2004040209224600

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c

  Log:
    default Serverbind to tcp port 24; align two related logbook calls

  Summary:
    Revision    Changes     Path
    1.94        +11 -2      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================================
  $ cvs diff -u -r1.93 -r1.94 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	12 Feb 2003 16:16:29 -0000	1.93
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	2 Apr 2004 08:22:46 -0000	1.94
  @@ -361,6 +361,8 @@
   
       /* --bind SINGLE */
       try {
  +        char *cp;
  +
           if (   (val_get(ctx->val, "option.bind", &ov) != VAL_OK)
               || (ov->ndata <  0)
               || (ov->ndata == 1 && ov->data.s == NULL)
  @@ -434,7 +436,13 @@
                   }
               /* otherwise assume INET socket */
                   else {
  -                    if ((sa_rc = sa_addr_u2a(ctx->saaServerbind, "inet://%s", ov->data.s)) != SA_OK) {
  +                    cp = ov->data.s;
  +                    if (strrchr(cp, ':') == NULL)
  +                        cp = str_concat(cp, ":24", NULL); /* http://www.iana.org/assignments/port-numbers (and names) */
  +                    else
  +                        cp = str_concat(cp, NULL); /* prepare for free() */
  +                    logbook(ctx->l2, L2_LEVEL_DEBUG, "data.s = \"%s\", cp = \"%s\"", ov->data.s, cp);
  +                    if ((sa_rc = sa_addr_u2a(ctx->saaServerbind, "inet://%s", cp)) != SA_OK) {
                           logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, parsing alternate IO guessing INET socket (%s) failed with \"%s\"", ov->data.s, sa_error(sa_rc));
                           throw(0,0,0);
                       }
  @@ -442,6 +450,7 @@
                           logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, bind (%s) failed with \"%s\"", ov->data.s, sa_error(sa_rc));
                           throw(0,0,0);
                       }
  +                    free(cp);
                   }
               /* for either sockets */
                   if ((sa_rc = sa_listen(ctx->saServerbind, -1)) != SA_OK) {
  @@ -496,11 +505,11 @@
               if ((ctx->pns = (struct ns *)malloc(ov->ndata * sizeof(struct ns))) == NULL) throw(0,0,0);
               for (i = 0; i < ov->ndata;) {
                   cp = (ov->data.m)[i];
  -                logbook(ctx->l2, L2_LEVEL_DEBUG, "cp = (data.m)[%d] = \"%s\"", i, cp);
                   if (strrchr(cp, ':') == NULL)
                       cp = str_concat(cp, ":nntp", NULL); /* http://www.iana.org/assignments/port-numbers (and names) */
                   else
                       cp = str_concat(cp, NULL); /* prepare for free() */
  +                logbook(ctx->l2, L2_LEVEL_DEBUG, "(data.m)[%d] = \"%s\", cp = \"%s\"", i, (ov->data.m)[i], cp);
                   if ((sa_rc = sa_addr_create(&ctx->pns[i].saa)) != SA_OK) {
                       logbook(ctx->l2, L2_LEVEL_ERROR, "option --destination, create address (internal) failed with \"%s\"", sa_error(sa_rc));
                       throw(0,0,0);
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr  2 12:25:48 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5242B777F9; Fri,  2 Apr 2004 12:25:48 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ THANKS lmtp2nntp_main.c
Message-Id: <20040402102548.5242B777F9@mail.ossp.org>
Date: Fri,  2 Apr 2004 12:25:48 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   02-Apr-2004 12:25:48
  Branch: HEAD                             Handle: 2004040211254700

  Modified files:
    ossp-pkg/lmtp2nntp      THANKS lmtp2nntp_main.c

  Log:
    fix signal handling on systems resetting handler on execution
    (Solaris). Reported by Amos Gouaux.

  Summary:
    Revision    Changes     Path
    1.6         +1  -0      ossp-pkg/lmtp2nntp/THANKS
    1.77        +2  -0      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/THANKS
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 THANKS
  --- ossp-pkg/lmtp2nntp/THANKS	30 Jan 2003 19:42:12 -0000	1.5
  +++ ossp-pkg/lmtp2nntp/THANKS	2 Apr 2004 10:25:47 -0000	1.6
  @@ -18,4 +18,5 @@
     Christos Ricudis      <ricudis@paiko.gr>
     Christoph Schug       <christoph.schug@cw.com>
     Daniel Tschan         <tschan@devzone.ch>
  +  Amos Gouaux           <amos@utdallas.edu>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================================
  $ cvs diff -u -r1.76 -r1.77 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	12 Feb 2003 16:16:29 -0000	1.76
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	2 Apr 2004 10:25:47 -0000	1.77
  @@ -321,10 +321,12 @@
                   pid = wait(NULL);
                   ctx->active_childs--;
                   logbook(ctx->l2, L2_LEVEL_NOTICE, "caught signal %d - child [%ld] terminated", sig, (long)pid);
  +                signal(sig, (void(*)())catchsignal);
                   return;
               case SIGUSR1:
                   logbook(ctx->l2, L2_LEVEL_NOTICE, "caught signal %d - flush logging stream", sig);
                   l2_channel_flush(ctx->l2);
  +                signal(sig, (void(*)())catchsignal);
                   return;
               case SIGHUP:
               case SIGINT:
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr  2 12:35:40 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A8F2277801; Fri,  2 Apr 2004 12:35:40 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_main.c
Message-Id: <20040402103540.A8F2277801@mail.ossp.org>
Date: Fri,  2 Apr 2004 12:35:40 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   02-Apr-2004 12:35:40
  Branch: HEAD                             Handle: 2004040211354000

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_main.c

  Log:
    loop must not be run if zero NNTP servers configured

  Summary:
    Revision    Changes     Path
    1.78        +2  -2      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================================
  $ cvs diff -u -r1.77 -r1.78 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	2 Apr 2004 10:25:47 -0000	1.77
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	2 Apr 2004 10:35:40 -0000	1.78
  @@ -865,7 +865,7 @@
           logbook(ctx->l2, L2_LEVEL_NOTICE, "NNTP running in fake mode, network connections will be executed but result is ignored");
       i = 0;
       is = 0;
  -    do {
  +    while (i < ctx->nns) {
           logbook(ctx->l2, L2_LEVEL_DEBUG, "trying ns[%d]", i);
           bOk = TRUE;
           logbook(ctx->l2, L2_LEVEL_TRACE, "try destination#%d ${option.destination[%d]}", i, i);
  @@ -921,7 +921,7 @@
               lmtp_gfs_ns(&ctx->pns[i]);
           }
           i++;
  -    } while (i < ctx->nns);
  +    }
       logbook(ctx->l2, L2_LEVEL_INFO, "NNTP network connections tried %d, successful %d", i, is);
   
       if (ctx->option_operationmode == OPERATIONMODE_FAKE)
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr  2 12:38:14 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0365577801; Fri,  2 Apr 2004 12:38:13 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_main.c lmtp2nntp_msg.c
Message-Id: <20040402103813.0365577801@mail.ossp.org>
Date: Fri,  2 Apr 2004 12:38:13 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   02-Apr-2004 12:38:13
  Branch: HEAD                             Handle: 2004040211381300

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_main.c lmtp2nntp_msg.c

  Log:
    correctly handle and detect empty newsgroups

  Summary:
    Revision    Changes     Path
    1.79        +4  -4      ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
    1.41        +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================================
  $ cvs diff -u -r1.78 -r1.79 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	2 Apr 2004 10:35:40 -0000	1.78
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	2 Apr 2004 10:38:13 -0000	1.79
  @@ -1466,8 +1466,8 @@
                   return LMTP_ERR_MEM;
               }
           }
  -        ctx->msg->azNewsgroups = memcpy(cp, ctx->msg->azEnvgroups, ctx->msg->asEnvgroups);
  -        ctx->msg->asNewsgroups =                                   ctx->msg->asEnvgroups;
  +        ctx->msg->azNewsgroups = memcpy(cp, ctx->msg->azEnvgroups != NULL ? ctx->msg->azEnvgroups : "", ctx->msg->asEnvgroups);
  +        ctx->msg->asNewsgroups = ctx->msg->asEnvgroups;
       }
       else if (ctx->option_groupmode == GROUPMODE_ARG) {
           if ((cp = malloc(ctx->asGroupargs + 1)) == NULL) {
  @@ -1484,8 +1484,8 @@
                   return LMTP_ERR_MEM;
               }
           }
  -        ctx->msg->azNewsgroups = memcpy(cp, ctx->azGroupargs, ctx->asGroupargs);
  -        ctx->msg->asNewsgroups =                              ctx->asGroupargs;
  +        ctx->msg->azNewsgroups = memcpy(cp, ctx->azGroupargs != NULL ? ctx->azGroupargs : "", ctx->asGroupargs);
  +        ctx->msg->asNewsgroups = ctx->asGroupargs;
       }
       else { /*                      == GROUPMODE_HEADER */
           cp = ctx->msg->azNewsgroups;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================================
  $ cvs diff -u -r1.40 -r1.41 lmtp2nntp_msg.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	12 Feb 2003 15:24:18 -0000	1.40
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	2 Apr 2004 10:38:13 -0000	1.41
  @@ -243,7 +243,7 @@
       size_t       asNewheaders;
   
       logbook(msg->l2, L2_LEVEL_DEBUG, "verify Newsgroups");
  -    if (msg->azNewsgroups == NULL)
  +    if ((msg->azNewsgroups == NULL) || (msg->asNewsgroups == 0))
           return MSG_ERR_JOINGROUPNONE;
       argz_stringify(msg->azNewsgroups, msg->asNewsgroups, ',');
       if (strlen(msg->azNewsgroups) == 0)
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr  2 14:27:00 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E866F777FD; Fri,  2 Apr 2004 14:26:59 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ ChangeLog sa.c
Message-Id: <20040402122659.E866F777FD@mail.ossp.org>
Date: Fri,  2 Apr 2004 14:26:59 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   02-Apr-2004 14:26:59
  Branch: HEAD                             Handle: 2004040213265900

  Modified files:
    ossp-pkg/sa             ChangeLog sa.c

  Log:
    restart accept(2) after interrupted system call

  Summary:
    Revision    Changes     Path
    1.31        +6  -0      ossp-pkg/sa/ChangeLog
    1.79        +4  -1      ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 ChangeLog
  --- ossp-pkg/sa/ChangeLog	26 Mar 2004 16:49:40 -0000	1.30
  +++ ossp-pkg/sa/ChangeLog	2 Apr 2004 12:26:59 -0000	1.31
  @@ -13,6 +13,12 @@
   
     Changes between 1.1.0 and FIXME (10-Nov-2003 to FIXME)
   
  +   o Restart accept(2) after interrupted system call.
  +     OSSP lmtp2nntp daemon failed to accept a connection after a signal
  +     handler was run on Solaris which caused the system call to be
  +     interrupted. Issue was found and reported by Amos Gouaux.
  +     [Thomas Lotterer <thl@dev.de.cw.net>]
  +
      o Add SA_CHECK_SOCKOPT autoconf check to detect setsockopt failing
        under run-time on Solaris 2.6,8,9,10 and Debian 2.2 because
        SO_RCVTIMEO|SO_SNDTIMEO are defined but not implemented.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.c
  ============================================================================
  $ cvs diff -u -r1.78 -r1.79 sa.c
  --- ossp-pkg/sa/sa.c	26 Mar 2004 16:57:14 -0000	1.78
  +++ ossp-pkg/sa/sa.c	2 Apr 2004 12:26:59 -0000	1.79
  @@ -1602,7 +1602,10 @@
   
       /* perform accept operation on underlying socket */
       sa_size = (socklen_t)sizeof(sa_buf);
  -    if ((s = SA_SC_CALL_3(sa, accept, sa->fdSocket, (struct sockaddr *)&sa_buf, &sa_size)) == -1)
  +    do {
  +        s = SA_SC_CALL_3(sa, accept, sa->fdSocket, (struct sockaddr *)&sa_buf, &sa_size);
  +    } while (s == -1 && errno == EINTR);
  +    if (s == -1)
           return SA_RC(SA_ERR_SYS);
   
       /* create result address object */
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr  2 14:27:32 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6F5107780C; Fri,  2 Apr 2004 14:27:32 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ l2_ut_sa.c
Message-Id: <20040402122732.6F5107780C@mail.ossp.org>
Date: Fri,  2 Apr 2004 14:27:32 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   02-Apr-2004 14:27:32
  Branch: HEAD                             Handle: 2004040213273200

  Modified files:
    ossp-pkg/l2             l2_ut_sa.c

  Log:
    restart accept(2) after interrupted system call

  Summary:
    Revision    Changes     Path
    1.24        +4  -1      ossp-pkg/l2/l2_ut_sa.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_sa.c
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 l2_ut_sa.c
  --- ossp-pkg/l2/l2_ut_sa.c	26 Mar 2004 17:14:48 -0000	1.23
  +++ ossp-pkg/l2/l2_ut_sa.c	2 Apr 2004 12:27:32 -0000	1.24
  @@ -1602,7 +1602,10 @@
   
       /* perform accept operation on underlying socket */
       sa_size = (socklen_t)sizeof(sa_buf);
  -    if ((s = SA_SC_CALL_3(sa, accept, sa->fdSocket, (struct sockaddr *)&sa_buf, &sa_size)) == -1)
  +    do {
  +        s = SA_SC_CALL_3(sa, accept, sa->fdSocket, (struct sockaddr *)&sa_buf, &sa_size);
  +    } while (s == -1 && errno == EINTR);
  +    if (s == -1)
           return SA_RC(SA_ERR_SYS);
   
       /* create result address object */
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr  2 15:52:51 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4936577807; Fri,  2 Apr 2004 15:52:51 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_config.c
Message-Id: <20040402135251.4936577807@mail.ossp.org>
Date: Fri,  2 Apr 2004 15:52:51 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   02-Apr-2004 15:52:51
  Branch: HEAD                             Handle: 2004040214525000

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c

  Log:
    print errno and associated message whenever sa returns SA_ERR_SYS

  Summary:
    Revision    Changes     Path
    1.95        +72 -18     ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================================
  $ cvs diff -u -r1.94 -r1.95 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	2 Apr 2004 08:22:46 -0000	1.94
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	2 Apr 2004 13:52:50 -0000	1.95
  @@ -309,11 +309,17 @@
                   ctx->pacl[i].prefixlen = atoi(cp);
                   logbook(ctx->l2, L2_LEVEL_DEBUG, "ctx->pacl[%d].prefixlen = %d", i, ctx->pacl[i].prefixlen);
                   if ((sa_rc = sa_addr_create(&(ctx->pacl[i].saa))) != SA_OK) {
  -                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --acl, create address (internal) failed with \"%s\"", sa_error(sa_rc));
  +                    if (sa_rc == SA_ERR_SYS)
  +                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --acl, create address (internal) failed with \"%s\" (%d) %s", sa_error(sa_rc), errno, strerror(errno));
  +                    else
  +                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --acl, create address (internal) failed with \"%s\"", sa_error(sa_rc));
                       throw(0,0,0);
                       }
                   if ((sa_rc = sa_addr_u2a(ctx->pacl[i].saa, "inet://%s:0", ctx->pacl[i].acl)) != SA_OK) {
  -                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --acl, parsing address (%s) failed with \"%s\"", ctx->pacl[i].acl, sa_error(sa_rc));
  +                    if (sa_rc == SA_ERR_SYS)
  +                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --acl, parsing address (%s) failed with \"%s\" (%d) %", ctx->pacl[i].acl, sa_error(sa_rc), errno, strerror(errno));
  +                    else
  +                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --acl, parsing address (%s) failed with \"%s\"", ctx->pacl[i].acl, sa_error(sa_rc));
                       throw(0,0,0);
                       }
               }
  @@ -327,11 +333,17 @@
               ctx->pacl[i].not = FALSE;
               ctx->pacl[i].prefixlen = 0;
               if ((sa_rc = sa_addr_create(&ctx->pacl[i].saa)) != SA_OK) {
  -                logbook(ctx->l2, L2_LEVEL_ERROR, "option --acl, create IPv4 pass-through address (internal) failed with \"%s\"", sa_error(sa_rc));
  +                if (sa_rc == SA_ERR_SYS)
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --acl, create IPv4 pass-through address (internal) failed with \"%s\" (%d) %s", sa_error(sa_rc), errno, strerror(errno));
  +                else
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --acl, create IPv4 pass-through address (internal) failed with \"%s\"", sa_error(sa_rc));
                   throw(0,0,0);
               }
               if ((sa_rc = sa_addr_u2a(ctx->pacl[i].saa, "inet://%s:0", ctx->pacl[i].acl)) != SA_OK) {
  -                logbook(ctx->l2, L2_LEVEL_ERROR, "option --acl, parsing IPv4 pass-through address (%s) failed with \"%s\"", ctx->pacl[i].acl, sa_error(sa_rc));
  +                if (sa_rc == SA_ERR_SYS)
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --acl, parsing IPv4 pass-through address (%s) failed with \"%s\" (%d) %s", ctx->pacl[i].acl, sa_error(sa_rc), errno, strerror(errno));
  +                else
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --acl, parsing IPv4 pass-through address (%s) failed with \"%s\"", ctx->pacl[i].acl, sa_error(sa_rc));
                   throw(0,0,0);
               }
               i++;
  @@ -345,11 +357,17 @@
               ctx->pacl[i].not = FALSE;
               ctx->pacl[i].prefixlen = 0;
               if ((sa_rc = sa_addr_create(&ctx->pacl[i].saa)) != SA_OK) {
  -                logbook(ctx->l2, L2_LEVEL_ERROR, "option --acl, create IPv6 pass-through address (internal) failed with \"%s\"", sa_error(sa_rc));
  +                if (sa_rc == SA_ERR_SYS)
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --acl, create IPv6 pass-through address (internal) failed with \"%s\" (%d) %s", sa_error(sa_rc), errno, strerror(errno));
  +                else
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --acl, create IPv6 pass-through address (internal) failed with \"%s\"", sa_error(sa_rc));
                   throw(0,0,0);
               }
               if ((sa_rc = sa_addr_u2a(ctx->pacl[i].saa, "inet://%s:0", ctx->pacl[i].acl)) != SA_OK) {
  -                logbook(ctx->l2, L2_LEVEL_ERROR, "option --acl, parsing IPv6 pass-through address (%s) failed with \"%s\"", ctx->pacl[i].acl, sa_error(sa_rc));
  +                if (sa_rc == SA_ERR_SYS)
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --acl, parsing IPv6 pass-through address (%s) failed with \"%s\" (%d) %s", ctx->pacl[i].acl, sa_error(sa_rc), errno, strerror(errno));
  +                else
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --acl, parsing IPv6 pass-through address (%s) failed with \"%s\"", ctx->pacl[i].acl, sa_error(sa_rc));
                   throw(0,0,0);
               }
               i++;
  @@ -374,11 +392,17 @@
               /* dash means stdio */
               if (strcmp(ov->data.s, "-") != 0) {
                   if ((sa_rc = sa_create(&ctx->saServerbind)) != SA_OK) {
  -                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, creating TCP socket (internal) failed with \"%s\"", sa_error(sa_rc));
  +                    if (sa_rc == SA_ERR_SYS)
  +                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, creating TCP socket (internal) failed with \"%s\" (%d) %s", sa_error(sa_rc), errno, strerror(errno));
  +                    else
  +                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, creating TCP socket (internal) failed with \"%s\"", sa_error(sa_rc));
                       throw(0,0,0);
                   }
                   if ((sa_rc = sa_addr_create(&ctx->saaServerbind)) != SA_OK) {
  -                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, create address (internal) failed with \"%s\"", sa_error(sa_rc));
  +                    if (sa_rc == SA_ERR_SYS)
  +                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, create address (internal) failed with \"%s\", (%d) %s", sa_error(sa_rc), errno, strerror(errno));
  +                    else
  +                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, create address (internal) failed with \"%s\"", sa_error(sa_rc));
                       throw(0,0,0);
                   }
               /* slash means UNIX socket */
  @@ -413,11 +437,17 @@
                           }
                       }
                       if ((sa_rc = sa_addr_u2a(ctx->saaServerbind, "unix:%s", cpPath)) != SA_OK) {
  -                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, parsing alternate IO guessing UNIX socket (%s) failed with \"%s\"", cpPath, sa_error(sa_rc));
  +                        if (sa_rc == SA_ERR_SYS)
  +                            logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, parsing alternate IO guessing UNIX socket (%s) failed with \"%s\" (%d) %s", cpPath, sa_error(sa_rc), errno, strerror(errno));
  +                        else
  +                            logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, parsing alternate IO guessing UNIX socket (%s) failed with \"%s\"", cpPath, sa_error(sa_rc));
                           throw(0,0,0);
                       }
                       if ((sa_rc = sa_bind(ctx->saServerbind, ctx->saaServerbind)) != SA_OK) {
  -                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, bind (%s) failed with \"%s\"", cpPath, sa_error(sa_rc));
  +                        if (sa_rc == SA_ERR_SYS)
  +                            logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, bind (%s) failed with \"%s\" (%d) %s", cpPath, sa_error(sa_rc), errno, strerror(errno));
  +                        else
  +                            logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, bind (%s) failed with \"%s\"", cpPath, sa_error(sa_rc));
                           throw(0,0,0);
                       }
                       if (nPerm != -1) {
  @@ -443,19 +473,28 @@
                           cp = str_concat(cp, NULL); /* prepare for free() */
                       logbook(ctx->l2, L2_LEVEL_DEBUG, "data.s = \"%s\", cp = \"%s\"", ov->data.s, cp);
                       if ((sa_rc = sa_addr_u2a(ctx->saaServerbind, "inet://%s", cp)) != SA_OK) {
  -                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, parsing alternate IO guessing INET socket (%s) failed with \"%s\"", ov->data.s, sa_error(sa_rc));
  +                        if (sa_rc == SA_ERR_SYS)
  +                            logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, parsing alternate IO guessing INET socket (%s) failed with \"%s\" (%d) %s", ov->data.s, sa_error(sa_rc), errno, strerror(errno));
  +                        else
  +                            logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, parsing alternate IO guessing INET socket (%s) failed with \"%s\"", ov->data.s, sa_error(sa_rc));
                           throw(0,0,0);
                       }
                       if ((sa_rc = sa_bind(ctx->saServerbind, ctx->saaServerbind)) != SA_OK) {
  -                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, bind (%s) failed with \"%s\"", ov->data.s, sa_error(sa_rc));
  +                        if (sa_rc == SA_ERR_SYS)
  +                            logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, bind (%s) failed with \"%s\" (%d) %s", ov->data.s, sa_error(sa_rc), errno, strerror(errno));
  +                        else
  +                            logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, bind (%s) failed with \"%s\"", ov->data.s, sa_error(sa_rc));
                           throw(0,0,0);
                       }
                       free(cp);
                   }
               /* for either sockets */
                   if ((sa_rc = sa_listen(ctx->saServerbind, -1)) != SA_OK) {
  +                    if (sa_rc == SA_ERR_SYS)
  +                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, listen (%s) failed with \"%s\" (%d) %s", ov->data.s, sa_error(sa_rc), errno, strerror(errno));
  +                    else
                           logbook(ctx->l2, L2_LEVEL_ERROR, "option --bind, listen (%s) failed with \"%s\"", ov->data.s, sa_error(sa_rc));
  -                        throw(0,0,0);
  +                    throw(0,0,0);
                   }
               }
           }
  @@ -474,13 +513,19 @@
   
           if (ov->ndata == 1) {
               if ((sa_rc = sa_addr_create(&ctx->saaClientbind)) != SA_OK) {
  -                logbook(ctx->l2, L2_LEVEL_ERROR, "option --client, create address (internal) failed with \"%s\"", sa_error(sa_rc));
  +                if (sa_rc == SA_ERR_SYS)
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --client, create address (internal) failed with \"%s\" (%d) %s", sa_error(sa_rc), errno, strerror(errno));
  +                else
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --client, create address (internal) failed with \"%s\"", sa_error(sa_rc));
                   throw(0,0,0);
               }
               if ((sa_rc = sa_addr_u2a(ctx->saaClientbind,
                                     (strchr(ov->data.s, ':') == NULL) ?  "inet://%s:0" : "inet://%s",
                                     ov->data.s)) != SA_OK) {
  -                logbook(ctx->l2, L2_LEVEL_ERROR, "option --client, parsing alternate IO guessing INET socket (%s) failed with \"%s\"", ov->data.s, sa_error(sa_rc));
  +                if (sa_rc == SA_ERR_SYS)
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --client, parsing alternate IO guessing INET socket (%s) failed with \"%s\" (%d) %s", ov->data.s, sa_error(sa_rc), errno, strerror(errno));
  +                else
  +                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --client, parsing alternate IO guessing INET socket (%s) failed with \"%s\"", ov->data.s, sa_error(sa_rc));
                   throw(0,0,0);
               }
           }
  @@ -511,15 +556,24 @@
                       cp = str_concat(cp, NULL); /* prepare for free() */
                   logbook(ctx->l2, L2_LEVEL_DEBUG, "(data.m)[%d] = \"%s\", cp = \"%s\"", i, (ov->data.m)[i], cp);
                   if ((sa_rc = sa_addr_create(&ctx->pns[i].saa)) != SA_OK) {
  -                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --destination, create address (internal) failed with \"%s\"", sa_error(sa_rc));
  +                    if (sa_rc == SA_ERR_SYS)
  +                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --destination, create address (internal) failed with \"%s\" (%d) %s", sa_error(sa_rc), errno, strerror(errno));
  +                    else
  +                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --destination, create address (internal) failed with \"%s\"", sa_error(sa_rc));
                       throw(0,0,0);
                   }
                   if ((sa_rc = sa_addr_u2a(ctx->pns[i].saa, "inet://%s", cp)) != SA_OK) {
  -                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --destination, parsing host address (%s) failed with \"%s\"", cp, sa_error(sa_rc));
  +                    if (sa_rc == SA_ERR_SYS)
  +                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --destination, parsing host address (%s) failed with \"%s\", (%d) %s", cp, sa_error(sa_rc), errno, strerror(errno));
  +                    else
  +                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --destination, parsing host address (%s) failed with \"%s\"", cp, sa_error(sa_rc));
                       throw(0,0,0);
                   }
                   if ((sa_rc = sa_create(&ctx->pns[i].sa)) != SA_OK) {
  -                    logbook(ctx->l2, L2_LEVEL_ERROR, "option --destination, creating TCP socket (%s) failed with \"%s\"", cp, sa_error(sa_rc));
  +                    if (sa_rc == SA_ERR_SYS)
  +                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --destination, creating TCP socket (%s) failed with \"%s\" (%d) %s", cp, sa_error(sa_rc), errno, strerror(errno));
  +                    else
  +                        logbook(ctx->l2, L2_LEVEL_ERROR, "option --destination, creating TCP socket (%s) failed with \"%s\"", cp, sa_error(sa_rc));
                       throw(0,0,0);
                   }
                   ctx->pns[i].nntp = NULL;
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr  2 15:55:38 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D1ECA77807; Fri,  2 Apr 2004 15:55:37 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_config.c
Message-Id: <20040402135537.D1ECA77807@mail.ossp.org>
Date: Fri,  2 Apr 2004 15:55:37 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   02-Apr-2004 15:55:37
  Branch: HEAD                             Handle: 2004040214553700

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_config.c

  Log:
    fix problem where ACLs could not be set due to improper assumption of
    C compiler operator precedence. Reported by Amos Gouaux

  Summary:
    Revision    Changes     Path
    1.96        +1  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_config.c
  ============================================================================
  $ cvs diff -u -r1.95 -r1.96 lmtp2nntp_config.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	2 Apr 2004 13:52:50 -0000	1.95
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_config.c	2 Apr 2004 13:55:37 -0000	1.96
  @@ -286,7 +286,7 @@
           }
   
           /* if only blocking ACLs exist, reserve space for two additional pass-through wildcards */
  -        ctx->pacl = (struct acl *)mallocex((ov->ndata + somepass ? 0 : 2 ) * sizeof(struct acl));
  +        ctx->pacl = (struct acl *)mallocex((ov->ndata + (somepass ? 0 : 2 )) * sizeof(struct acl));
   
           if (ov->ndata >= 1) {
               for (i = 0; i < ov->ndata; i++) {
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr  2 19:13:11 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 04C4A7780D; Fri,  2 Apr 2004 19:13:10 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ ChangeLog README VERSION
Message-Id: <20040402171310.04C4A7780D@mail.ossp.org>
Date: Fri,  2 Apr 2004 19:13:10 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Apr-2004 19:13:10
  Branch: HEAD                             Handle: 2004040218131000

  Modified files:
    ossp-pkg/sa             ChangeLog README VERSION

  Log:
    next will be 1.2.0, I think

  Summary:
    Revision    Changes     Path
    1.32        +1  -1      ossp-pkg/sa/ChangeLog
    1.18        +1  -1      ossp-pkg/sa/README
    1.15        +1  -1      ossp-pkg/sa/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 ChangeLog
  --- ossp-pkg/sa/ChangeLog	2 Apr 2004 12:26:59 -0000	1.31
  +++ ossp-pkg/sa/ChangeLog	2 Apr 2004 17:13:10 -0000	1.32
  @@ -11,7 +11,7 @@
     This is a list of all changes to OSSP sa.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 1.1.0 and FIXME (10-Nov-2003 to FIXME)
  +  Changes between 1.1.0 and 1.2.0 (10-Nov-2003 to xx-Apr-2004)
   
      o Restart accept(2) after interrupted system call.
        OSSP lmtp2nntp daemon failed to accept a connection after a signal
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/README
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 README
  --- ossp-pkg/sa/README	10 Nov 2003 18:50:28 -0000	1.17
  +++ ossp-pkg/sa/README	2 Apr 2004 17:13:10 -0000	1.18
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/\__,_|
   
     OSSP sa - Socket Abstraction
  -  Version 1.1.0 (10-Nov-2003)
  +  Version 1.2.0 (02-Apr-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/VERSION
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 VERSION
  --- ossp-pkg/sa/VERSION	10 Nov 2003 18:50:28 -0000	1.14
  +++ ossp-pkg/sa/VERSION	2 Apr 2004 17:13:10 -0000	1.15
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP sa (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP sa, Version 1.1.0 (10-Nov-2003)
  +  This is OSSP sa, Version 1.2.0 (02-Apr-2004)
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr  2 20:21:09 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DD3F77780E; Fri,  2 Apr 2004 20:21:08 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ ChangeLog Makefile.in README THANKS aclocal.m...
Message-Id: <20040402182108.DD3F77780E@mail.ossp.org>
Date: Fri,  2 Apr 2004 20:21:08 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Apr-2004 20:21:08
  Branch: HEAD                             Handle: 2004040219210700

  Modified files:
    ossp-pkg/sa             ChangeLog Makefile.in README THANKS aclocal.m4
                            configure.ac sa-config.in sa.ac sa.c sa.h sa.pod
                            sa_test.c ts.c ts.h

  Log:
    Adjusted all copyright messages for new year 2004.

  Summary:
    Revision    Changes     Path
    1.33        +3  -0      ossp-pkg/sa/ChangeLog
    1.16        +3  -3      ossp-pkg/sa/Makefile.in
    1.19        +3  -3      ossp-pkg/sa/README
    1.5         +2  -2      ossp-pkg/sa/THANKS
    1.9         +5  -5      ossp-pkg/sa/aclocal.m4
    1.14        +3  -3      ossp-pkg/sa/configure.ac
    1.7         +3  -3      ossp-pkg/sa/sa-config.in
    1.16        +3  -3      ossp-pkg/sa/sa.ac
    1.80        +3  -3      ossp-pkg/sa/sa.c
    1.39        +3  -3      ossp-pkg/sa/sa.h
    1.40        +3  -3      ossp-pkg/sa/sa.pod
    1.27        +3  -3      ossp-pkg/sa/sa_test.c
    1.10        +3  -3      ossp-pkg/sa/ts.c
    1.4         +3  -3      ossp-pkg/sa/ts.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 ChangeLog
  --- ossp-pkg/sa/ChangeLog	2 Apr 2004 17:13:10 -0000	1.32
  +++ ossp-pkg/sa/ChangeLog	2 Apr 2004 18:21:07 -0000	1.33
  @@ -13,6 +13,9 @@
   
     Changes between 1.1.0 and 1.2.0 (10-Nov-2003 to xx-Apr-2004)
   
  +   o Adjusted all copyright messages for new year 2004.
  +     [Ralf S. Engelschall]
  +
      o Restart accept(2) after interrupted system call.
        OSSP lmtp2nntp daemon failed to accept a connection after a signal
        handler was run on Solaris which caused the system call to be
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 Makefile.in
  --- ossp-pkg/sa/Makefile.in	6 Jan 2003 13:11:23 -0000	1.15
  +++ ossp-pkg/sa/Makefile.in	2 Apr 2004 18:21:07 -0000	1.16
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP sa - Socket Abstraction
  -##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2001-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP sa, a socket abstraction library which
   ##  can be found at http://www.ossp.org/pkg/lib/sa/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/README
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 README
  --- ossp-pkg/sa/README	2 Apr 2004 17:13:10 -0000	1.18
  +++ ossp-pkg/sa/README	2 Apr 2004 18:21:07 -0000	1.19
  @@ -18,9 +18,9 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  -  Copyright (c) 2001-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   
     This file is part of OSSP sa, a socket abstraction library which
     can be found at http://www.ossp.org/pkg/lib/sa/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/THANKS
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 THANKS
  --- ossp-pkg/sa/THANKS	26 Mar 2004 16:49:40 -0000	1.4
  +++ ossp-pkg/sa/THANKS	2 Apr 2004 18:21:07 -0000	1.5
  @@ -11,8 +11,8 @@
     Credit has to be given to the following sponsors for contributing
     hardware, network and manpower resources (in alphabetical order):
   
  -    o  Cable & Wireless Deutschland GmbH
  -       <http://www.cw.com/de>
  +    o  Cable & Wireless
  +       <http://www.cw.com/>
   
     Credit has to be given to the following people who contributed ideas,
     bugfixes, hints, gave platform feedback, etc. (in alphabetical order):
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 aclocal.m4
  --- ossp-pkg/sa/aclocal.m4	26 Mar 2004 16:57:14 -0000	1.8
  +++ ossp-pkg/sa/aclocal.m4	2 Apr 2004 18:21:07 -0000	1.9
  @@ -1,10 +1,10 @@
   dnl ##
  -dnl ##  SA - OSSP Socket Abstraction Library
  -dnl ##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2001-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  OSSP sa - Socket Abstraction Library
  +dnl ##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   dnl ##
  -dnl ##  This file is part of OSSP SA, a socket abstraction library which
  +dnl ##  This file is part of OSSP sa, a socket abstraction library which
   dnl ##  can be found at http://www.ossp.org/pkg/sa/.
   dnl ##
   dnl ##  Permission to use, copy, modify, and distribute this software for
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/configure.ac
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 configure.ac
  --- ossp-pkg/sa/configure.ac	10 Feb 2003 10:13:29 -0000	1.13
  +++ ossp-pkg/sa/configure.ac	2 Apr 2004 18:21:07 -0000	1.14
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP sa - Socket Abstraction
  -dnl ##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   dnl ##
   dnl ##  This file is part of OSSP sa, a socket abstraction library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/sa/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa-config.in
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 sa-config.in
  --- ossp-pkg/sa/sa-config.in	6 Jan 2003 13:11:23 -0000	1.6
  +++ ossp-pkg/sa/sa-config.in	2 Apr 2004 18:21:07 -0000	1.7
  @@ -1,9 +1,9 @@
   #!/bin/sh
   ##
   ##  OSSP sa - Socket Abstraction
  -##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2001-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP sa, a socket abstraction library which
   ##  can be found at http://www.ossp.org/pkg/lib/sa/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.ac
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 sa.ac
  --- ossp-pkg/sa/sa.ac	26 Mar 2004 16:05:59 -0000	1.15
  +++ ossp-pkg/sa/sa.ac	2 Apr 2004 18:21:07 -0000	1.16
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP sa - Socket Abstraction
  -dnl ##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2001-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   dnl ##
   dnl ##  This file is part of OSSP sa, a socket abstraction library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/sa/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.c
  ============================================================================
  $ cvs diff -u -r1.79 -r1.80 sa.c
  --- ossp-pkg/sa/sa.c	2 Apr 2004 12:26:59 -0000	1.79
  +++ ossp-pkg/sa/sa.c	2 Apr 2004 18:21:07 -0000	1.80
  @@ -1,8 +1,8 @@
   /*
   **  OSSP sa - Socket Abstraction
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP sa, a socket abstraction library which
   **  can be found at http://www.ossp.org/pkg/lib/sa/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.h
  ============================================================================
  $ cvs diff -u -r1.38 -r1.39 sa.h
  --- ossp-pkg/sa/sa.h	26 Mar 2004 16:57:14 -0000	1.38
  +++ ossp-pkg/sa/sa.h	2 Apr 2004 18:21:07 -0000	1.39
  @@ -1,8 +1,8 @@
   /*
   **  OSSP sa - Socket Abstraction
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP sa, a socket abstraction library which
   **  can be found at http://www.ossp.org/pkg/lib/sa/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.pod
  ============================================================================
  $ cvs diff -u -r1.39 -r1.40 sa.pod
  --- ossp-pkg/sa/sa.pod	6 Jan 2003 13:11:23 -0000	1.39
  +++ ossp-pkg/sa/sa.pod	2 Apr 2004 18:21:07 -0000	1.40
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP sa - Socket Abstraction
  -##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2001-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP sa, a socket abstraction library which
   ##  can be found at http://www.ossp.org/pkg/lib/sa/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa_test.c
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 sa_test.c
  --- ossp-pkg/sa/sa_test.c	9 Feb 2003 14:43:28 -0000	1.26
  +++ ossp-pkg/sa/sa_test.c	2 Apr 2004 18:21:07 -0000	1.27
  @@ -1,8 +1,8 @@
   /*
   **  OSSP sa - Socket Abstraction
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP sa, a socket abstraction library which
   **  can be found at http://www.ossp.org/pkg/lib/sa/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ts.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 ts.c
  --- ossp-pkg/sa/ts.c	11 Feb 2003 12:31:14 -0000	1.9
  +++ ossp-pkg/sa/ts.c	2 Apr 2004 18:21:07 -0000	1.10
  @@ -1,8 +1,8 @@
   /*
   **  TS - OSSP Test Suite Library
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP TS, a small test suite library which
   **  can be found at http://www.ossp.org/pkg/ts/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ts.h
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ts.h
  --- ossp-pkg/sa/ts.h	2 Jan 2002 12:43:50 -0000	1.3
  +++ ossp-pkg/sa/ts.h	2 Apr 2004 18:21:07 -0000	1.4
  @@ -1,8 +1,8 @@
   /*
   **  TS - OSSP Test Suite Library
  -**  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP TS, a small test suite library which
   **  can be found at http://www.ossp.org/pkg/ts/.
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr  2 20:22:47 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 362A47780E; Fri,  2 Apr 2004 20:22:47 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ aclocal.m4
Message-Id: <20040402182247.362A47780E@mail.ossp.org>
Date: Fri,  2 Apr 2004 20:22:47 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Apr-2004 20:22:47
  Branch: HEAD                             Handle: 2004040219224600

  Modified files:
    ossp-pkg/sa             aclocal.m4

  Log:
    fix header

  Summary:
    Revision    Changes     Path
    1.10        +2  -2      ossp-pkg/sa/aclocal.m4
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 aclocal.m4
  --- ossp-pkg/sa/aclocal.m4	2 Apr 2004 18:21:07 -0000	1.9
  +++ ossp-pkg/sa/aclocal.m4	2 Apr 2004 18:22:46 -0000	1.10
  @@ -1,11 +1,11 @@
   dnl ##
  -dnl ##  OSSP sa - Socket Abstraction Library
  +dnl ##  OSSP sa - Socket Abstraction
   dnl ##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
   dnl ##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   dnl ##
   dnl ##  This file is part of OSSP sa, a socket abstraction library which
  -dnl ##  can be found at http://www.ossp.org/pkg/sa/.
  +dnl ##  can be found at http://www.ossp.org/pkg/lib/sa/.
   dnl ##
   dnl ##  Permission to use, copy, modify, and distribute this software for
   dnl ##  any purpose with or without fee is hereby granted, provided that
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr  2 20:47:40 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8061277804; Fri,  2 Apr 2004 20:47:40 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ ChangeLog sa.c
Message-Id: <20040402184740.8061277804@mail.ossp.org>
Date: Fri,  2 Apr 2004 20:47:40 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Apr-2004 20:47:40
  Branch: HEAD                             Handle: 2004040219473900

  Modified files:
    ossp-pkg/sa             ChangeLog sa.c

  Log:
    In sa_connect() also select(2) on the socket if EINTR was
    returned similar to what is done already for EINPROGRESS, because
    one is not allowed to re-start connect(2) according to STEVENS
    (Unix Network Programming, volume 1, section 5.9) but instead have
    to perform the same post-processing under EINTR (under both timeout
    and non-timeout situations) what we already did for EINPROGRESS (in
    timeout-aware situation).

  Summary:
    Revision    Changes     Path
    1.34        +9  -0      ossp-pkg/sa/ChangeLog
    1.81        +57 -53     ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 ChangeLog
  --- ossp-pkg/sa/ChangeLog	2 Apr 2004 18:21:07 -0000	1.33
  +++ ossp-pkg/sa/ChangeLog	2 Apr 2004 18:47:39 -0000	1.34
  @@ -13,6 +13,15 @@
   
     Changes between 1.1.0 and 1.2.0 (10-Nov-2003 to xx-Apr-2004)
   
  +   o In sa_connect() also select(2) on the socket if EINTR was
  +     returned similar to what is done already for EINPROGRESS, because
  +     one is not allowed to re-start connect(2) according to STEVENS
  +     (Unix Network Programming, volume 1, section 5.9) but instead have
  +     to perform the same post-processing under EINTR (under both timeout
  +     and non-timeout situations) what we already did for EINPROGRESS (in
  +     timeout-aware situation).
  +     [Ralf S. Engelschall]
  +
      o Adjusted all copyright messages for new year 2004.
        [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.c
  ============================================================================
  $ cvs diff -u -r1.80 -r1.81 sa.c
  --- ossp-pkg/sa/sa.c	2 Apr 2004 18:21:07 -0000	1.80
  +++ ossp-pkg/sa/sa.c	2 Apr 2004 18:47:39 -0000	1.81
  @@ -1452,6 +1452,7 @@
       fd_set rset, wset;
       socklen_t len;
       sa_rc_t rv;
  +    struct timeval *tv;
   
       /* argument sanity check(s) */
       if (sa == NULL || raddr == NULL)
  @@ -1466,72 +1467,75 @@
           if ((rv = sa_socket_init(sa, raddr->nFamily)) != SA_OK)
               return SA_RC(rv);
   
  +    /* prepare return code decision */
       rv = SA_OK;
  -    if (SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_CONNECT])) {
  -        /* standard/non-timeout-aware connect operation */
  -        if (SA_SC_CALL_3(sa, connect, sa->fdSocket, raddr->saBuf, raddr->slBuf) < 0)
  -            rv = SA_ERR_SYS;
  -    }
  -    else {
  -        /* emulated/timeout-aware connect operation */
  -        error = 0;
  +    error = 0;
   
  -        /* temporarily switch underlying socket to non-blocking mode */
  +    /* temporarily switch underlying socket to non-blocking mode
  +       (necessary under timeout-aware operation only) */
  +    flags = 0;
  +    if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_CONNECT])) {
           flags = fcntl(sa->fdSocket, F_GETFL, 0);
           (void)fcntl(sa->fdSocket, F_SETFL, flags|O_NONBLOCK);
  +    }
   
  -        /* perform the connect operation */
  -        if ((n = SA_SC_CALL_3(sa, connect, sa->fdSocket, raddr->saBuf, raddr->slBuf)) < 0) {
  -            if (errno != EINPROGRESS) {
  -                error = errno;
  -                goto done;
  -            }
  -        }
  -
  -        /* ok if connect completed immediately */
  -        if (n == 0)
  -            goto done;
  -
  -        /* wait for read or write possibility */
  -        FD_ZERO(&rset);
  -        FD_ZERO(&wset);
  -        FD_SET(sa->fdSocket, &rset);
  -        FD_SET(sa->fdSocket, &wset);
  -        do {
  -            n = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &rset, &wset, NULL,
  -                             &sa->tvTimeout[SA_TIMEOUT_CONNECT]);
  -        } while (n == -1 && errno == EINTR);
  -
  -        /* decide on return semantic */
  -        if (n < 0) {
  +    /* perform the connect operation */
  +    if ((n = SA_SC_CALL_3(sa, connect, sa->fdSocket, raddr->saBuf, raddr->slBuf)) < 0) {
  +        if (errno != EINTR && errno != EINPROGRESS) {
               error = errno;
               goto done;
           }
  -        else if (n == 0) {
  -            (void)close(sa->fdSocket); /* stop TCP three-way handshake */
  -            sa->fdSocket = -1;
  -            rv = SA_ERR_TMT;
  -            goto done;
  -        }
  -
  -        /* fetch pending error */
  -        len = (socklen_t)sizeof(error);
  -        if (getsockopt(sa->fdSocket, SOL_SOCKET, SO_ERROR, (void *)&error, &len) < 0)
  -            error = errno;
  +    }
   
  -        done:
  +    /* ok if connect completed immediately */
  +    if (n == 0)
  +        goto done;
  +
  +    /* wait for read or write possibility */
  +    FD_ZERO(&rset);
  +    FD_ZERO(&wset);
  +    FD_SET(sa->fdSocket, &rset);
  +    FD_SET(sa->fdSocket, &wset);
  +    if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_CONNECT]))
  +        tv = &sa->tvTimeout[SA_TIMEOUT_CONNECT];
  +    else
  +        tv = NULL;
  +    do {
  +        n = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &rset, &wset, NULL, tv);
  +    } while (n == -1 && errno == EINTR);
  +
  +    /* decide on return semantic */
  +    if (n < 0) {
  +        error = errno;
  +        goto done;
  +    }
  +    else if (n == 0) {
  +        (void)close(sa->fdSocket); /* stop TCP three-way handshake */
  +        sa->fdSocket = -1;
  +        rv = SA_ERR_TMT;
  +        goto done;
  +    }
   
  -        /* reset socket flags */
  +    /* fetch pending error */
  +    len = (socklen_t)sizeof(error);
  +    if (getsockopt(sa->fdSocket, SOL_SOCKET, SO_ERROR, (void *)&error, &len) < 0)
  +        error = errno;
  +
  +    done:
  +
  +    /* reset socket flags
  +       (necessary under timeout-aware operation only) */
  +    if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_CONNECT]))
           (void)fcntl(sa->fdSocket, F_SETFL, flags);
   
  -        /* optionally set errno */
  -        if (error != 0) {
  -            (void)close(sa->fdSocket); /* just in case */
  -            sa->fdSocket = -1;
  -            errno = error;
  -            rv = SA_ERR_SYS;
  -        }
  +    /* optionally set errno */
  +    if (error != 0) {
  +        (void)close(sa->fdSocket); /* just in case */
  +        sa->fdSocket = -1;
  +        errno = error;
  +        rv = SA_ERR_SYS;
       }
  +
       return SA_RC(rv);
   }
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr  2 20:49:43 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 51D4B77814; Fri,  2 Apr 2004 20:49:43 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ sa.c
Message-Id: <20040402184943.51D4B77814@mail.ossp.org>
Date: Fri,  2 Apr 2004 20:49:43 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Apr-2004 20:49:43
  Branch: HEAD                             Handle: 2004040219494200

  Modified files:
    ossp-pkg/sa             sa.c

  Log:
    remember the reason directly in the source, too

  Summary:
    Revision    Changes     Path
    1.82        +13 -0      ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.c
  ============================================================================
  $ cvs diff -u -r1.81 -r1.82 sa.c
  --- ossp-pkg/sa/sa.c	2 Apr 2004 18:47:39 -0000	1.81
  +++ ossp-pkg/sa/sa.c	2 Apr 2004 18:49:42 -0000	1.82
  @@ -1482,6 +1482,19 @@
       /* perform the connect operation */
       if ((n = SA_SC_CALL_3(sa, connect, sa->fdSocket, raddr->saBuf, raddr->slBuf)) < 0) {
           if (errno != EINTR && errno != EINPROGRESS) {
  +            /* we have to perform the following post-processing under
  +               EINPROGRESS anway, but actually also for EINTR according
  +               to Unix Network Programming, volume 1, section 5.9, W.
  +               Richard Stevens: "What we are doing [] is restarting
  +               the interrupted system call ourself. This is fine for
  +               accept, along with the functions such as read, write,
  +               select and open. But there is one function that we cannot
  +               restart ourself: connect. If this function returns EINTR,
  +               we cannot call it again, as doing so will return an
  +               immediate error. When connect is interrupted by a caught
  +               signal and is not automatically restarted, we must call
  +               select to wait for the connection to complete, as we
  +               describe in section 15.3." */
               error = errno;
               goto done;
           }
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr  2 20:50:07 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 185AB77822; Fri,  2 Apr 2004 20:50:07 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ ChangeLog
Message-Id: <20040402185007.185AB77822@mail.ossp.org>
Date: Fri,  2 Apr 2004 20:50:07 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Apr-2004 20:50:07
  Branch: HEAD                             Handle: 2004040219500600

  Modified files:
    ossp-pkg/sa             ChangeLog

  Log:
    adjust date

  Summary:
    Revision    Changes     Path
    1.35        +1  -1      ossp-pkg/sa/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 ChangeLog
  --- ossp-pkg/sa/ChangeLog	2 Apr 2004 18:47:39 -0000	1.34
  +++ ossp-pkg/sa/ChangeLog	2 Apr 2004 18:50:06 -0000	1.35
  @@ -11,7 +11,7 @@
     This is a list of all changes to OSSP sa.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 1.1.0 and 1.2.0 (10-Nov-2003 to xx-Apr-2004)
  +  Changes between 1.1.0 and 1.2.0 (10-Nov-2003 to 02-Apr-2004)
   
      o In sa_connect() also select(2) on the socket if EINTR was
        returned similar to what is done already for EINPROGRESS, because
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr  2 20:56:10 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5194777807; Fri,  2 Apr 2004 20:56:10 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20040402185610.5194777807@mail.ossp.org>
Date: Fri,  2 Apr 2004 20:56:10 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   02-Apr-2004 20:56:10
  Branch: HEAD                             Handle: 2004040219560801

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/sa     index.wml

  Log:
    release OSSP sa 1.2.0

  Summary:
    Revision    Changes     Path
    1.76        +1  -0      ossp-web/new/news.txt
    1.71        +1  -1      ossp-web/pkg/lib/index.wml
    1.15        +2  -2      ossp-web/pkg/lib/sa/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.75 -r1.76 news.txt
  --- ossp-web/new/news.txt	16 Feb 2004 09:52:49 -0000	1.75
  +++ ossp-web/new/news.txt	2 Apr 2004 18:56:08 -0000	1.76
  @@ -1,3 +1,4 @@
  +02-Apr-2004: Released L<OSSP sa> 1.2.0
   16-Feb-2004: Released L<OSSP uuid> 1.0.0
   13-Feb-2004: Released L<OSSP uuid> 0.9.7
   11-Feb-2004: Released L<OSSP uuid> 0.9.6
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.70 -r1.71 index.wml
  --- ossp-web/pkg/lib/index.wml	16 Feb 2004 09:52:50 -0000	1.70
  +++ ossp-web/pkg/lib/index.wml	2 Apr 2004 18:56:09 -0000	1.71
  @@ -24,7 +24,7 @@
   			done=100 stable=1.0.2 unstable=none>
     <pkg_item name="sa" longname="OSSP sa" type="lib"
               desc="Socket Abstraction"
  -			done=100 stable=1.1.0 unstable=none>
  +			done=100 stable=1.2.0 unstable=none>
     <pkg_item name="fsl" longname="OSSP fsl" type="lib"
               desc="Faked/Flexible Syslog"
   			done=100 stable=1.3.0 unstable=none>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/sa/index.wml
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 index.wml
  --- ossp-web/pkg/lib/sa/index.wml	10 Nov 2003 19:04:52 -0000	1.14
  +++ ossp-web/pkg/lib/sa/index.wml	2 Apr 2004 18:56:09 -0000	1.15
  @@ -110,7 +110,7 @@
   
   <pkg_status
       name="sa" assign="rse"
  -    stable="1.1.0"    stable_date="10-Nov-2003"
  +    stable="1.2.0"    stable_date="02-Apr-2004"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -121,7 +121,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/sa/
       directory=$(FTP_ROOT_DIR)/pkg/lib/sa/
       files="sa-*.tar.gz" 
  -	stable="sa-1\.1\.0\.tar\.gz" unstable="sa-SNAP.*\.tar.gz">
  +	stable="sa-1\.2\.0\.tar\.gz" unstable="sa-SNAP.*\.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Apr  3 13:52:48 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1870E77817; Sat,  3 Apr 2004 13:52:48 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex/ ChangeLog README VERSION
Message-Id: <20040403115248.1870E77817@mail.ossp.org>
Date: Sat,  3 Apr 2004 13:52:48 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Apr-2004 13:52:47
  Branch: HEAD                             Handle: 2004040312524700

  Modified files:
    ossp-pkg/ex             ChangeLog README VERSION

  Log:
    prepare for release

  Summary:
    Revision    Changes     Path
    1.10        +3  -2      ossp-pkg/ex/ChangeLog
    1.13        +1  -1      ossp-pkg/ex/README
    1.7         +1  -1      ossp-pkg/ex/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 ChangeLog
  --- ossp-pkg/ex/ChangeLog	18 Mar 2004 15:51:16 -0000	1.9
  +++ ossp-pkg/ex/ChangeLog	3 Apr 2004 11:52:47 -0000	1.10
  @@ -11,9 +11,10 @@
   
     This is the list of all changes to the OSSP ex source tree.
   
  -  Changes between 1.0.2 and 1.0.3 (30-Jan-2003 to xx-Feb-2003)
  +  Changes between 1.0.2 and 1.0.3 (30-Jan-2003 to 03-Apr-2004)
   
  -   *) Upgrade build environment to GNU autoconf 2.59 and GNU libtool 1.5.2
  +   *) Upgrade build environment to GNU autoconf 2.59 and
  +      GNU libtool 1.5.2
         [Ralf S. Engelschall]
   
      *) Constifiy the ex_file and ex_func fields of the exception
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/README
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 README
  --- ossp-pkg/ex/README	25 Mar 2004 19:01:42 -0000	1.12
  +++ ossp-pkg/ex/README	3 Apr 2004 11:52:47 -0000	1.13
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     \___/_/\_\
   
     OSSP ex - Exception Handling
  -  Version 1.0.2 (30-Jan-2003)
  +  Version 1.0.3 (03-Apr-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/VERSION
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 VERSION
  --- ossp-pkg/ex/VERSION	30 Jan 2003 11:03:06 -0000	1.6
  +++ ossp-pkg/ex/VERSION	3 Apr 2004 11:52:47 -0000	1.7
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP ex (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP ex, Version 1.0.2 (30-Jan-2003)
  +  This is OSSP ex, Version 1.0.3 (03-Apr-2004)
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Apr  3 13:58:09 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 692ED77817; Sat,  3 Apr 2004 13:58:09 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ex/ index.wml ossp...
Message-Id: <20040403115809.692ED77817@mail.ossp.org>
Date: Sat,  3 Apr 2004 13:58:09 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   03-Apr-2004 13:58:09
  Branch: HEAD                             Handle: 2004040312580801

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/ex     index.wml

  Log:
    release OSSP ex 1.0.3

  Summary:
    Revision    Changes     Path
    1.77        +1  -0      ossp-web/new/news.txt
    1.11        +2  -2      ossp-web/pkg/lib/ex/index.wml
    1.72        +1  -1      ossp-web/pkg/lib/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.76 -r1.77 news.txt
  --- ossp-web/new/news.txt	2 Apr 2004 18:56:08 -0000	1.76
  +++ ossp-web/new/news.txt	3 Apr 2004 11:58:08 -0000	1.77
  @@ -1,3 +1,4 @@
  +03-Apr-2004: Released L<OSSP ex> 1.0.3
   02-Apr-2004: Released L<OSSP sa> 1.2.0
   16-Feb-2004: Released L<OSSP uuid> 1.0.0
   13-Feb-2004: Released L<OSSP uuid> 0.9.7
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/ex/index.wml
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 index.wml
  --- ossp-web/pkg/lib/ex/index.wml	17 Feb 2003 19:36:03 -0000	1.10
  +++ ossp-web/pkg/lib/ex/index.wml	3 Apr 2004 11:58:09 -0000	1.11
  @@ -42,7 +42,7 @@
   <pkg_status
       name="ex" assign="rse"
   	genesis="Jan-2002"
  -    stable="1.0.2"   stable_date="30-Jan-2003"
  +    stable="1.0.3"   stable_date="03-Apr-2004"
       unstable="none"  unstable_date=""
   	done=100>
   
  @@ -53,7 +53,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/ex/
       directory=$(FTP_ROOT_DIR)/pkg/lib/ex/
       files="ex-*.tar.gz" 
  -	stable="ex-1.0.2.tar.gz" unstable="none">
  +	stable="ex-1.0.3.tar.gz" unstable="none">
   
   <h2>Donation</h2>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.71 -r1.72 index.wml
  --- ossp-web/pkg/lib/index.wml	2 Apr 2004 18:56:09 -0000	1.71
  +++ ossp-web/pkg/lib/index.wml	3 Apr 2004 11:58:08 -0000	1.72
  @@ -21,7 +21,7 @@
   			done=100 stable=1.3.0 unstable=none>
     <pkg_item name="ex" longname="OSSP ex" type="lib"
               desc="Exception Handling"
  -			done=100 stable=1.0.2 unstable=none>
  +			done=100 stable=1.0.3 unstable=none>
     <pkg_item name="sa" longname="OSSP sa" type="lib"
               desc="Socket Abstraction"
   			done=100 stable=1.2.0 unstable=none>
  @@ .

From ossp-cvs-owner@ossp.org  Sun Apr  4 10:04:35 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6410977824; Sun,  4 Apr 2004 10:04:35 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var/ ChangeLog aclocal.m4 configure.ac ts.c var.c
Message-Id: <20040404080435.6410977824@mail.ossp.org>
Date: Sun,  4 Apr 2004 10:04:35 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Apr-2004 10:04:35
  Branch: HEAD                             Handle: 2004040409043400

  Modified files:
    ossp-pkg/var            ChangeLog aclocal.m4 configure.ac ts.c var.c

  Log:
    Provide Autoconf check (AC_CHECK_VA_COPY) for va_copy(d,s) macro
    and fallback implementations and now that we can be sure that
    va_copy() exists for us, use it in var_formatv() and ts.c instead
    of the direct assignments (which are not sufficiently portable).

  Summary:
    Revision    Changes     Path
    1.3         +8  -2      ossp-pkg/var/ChangeLog
    1.9         +104 -0     ossp-pkg/var/aclocal.m4
    1.14        +3  -0      ossp-pkg/var/configure.ac
    1.5         +1  -1      ossp-pkg/var/ts.c
    1.102       +2  -2      ossp-pkg/var/var.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ChangeLog
  --- ossp-pkg/var/ChangeLog	24 Oct 2003 18:24:35 -0000	1.2
  +++ ossp-pkg/var/ChangeLog	4 Apr 2004 08:04:34 -0000	1.3
  @@ -11,9 +11,15 @@
     This is a list of all source changes to OSSP var.
     For less details please have a look at the NEWS file.
   
  -  Changes between 1.0.0 and 1.0.1 (14-Feb-2002 to xx-Oct-2003)
  +  Changes between 1.0.0 and 1.1.0 (14-Feb-2002 to 04-Apr-2004)
   
  -   o Upgraded build environment to GNU libtool 1.5
  +   o Provide Autoconf check (AC_CHECK_VA_COPY) for va_copy(d,s) macro
  +     and fallback implementations and now that we can be sure that
  +     va_copy() exists for us, use it in var_formatv() and ts.c instead
  +     of the direct assignments (which are not sufficiently portable).
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +   o Upgraded build environment to GNU libtool 1.5.4 and GNU autoconf 2.59
        [Ralf S. Engelschall <rse@engelschall.com>]
   
     Changes between 0.9.0 and 1.0.0 (08-Mar-2002 to 14-Feb-2003)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 aclocal.m4
  --- ossp-pkg/var/aclocal.m4	14 Feb 2003 21:17:07 -0000	1.8
  +++ ossp-pkg/var/aclocal.m4	4 Apr 2004 08:04:34 -0000	1.9
  @@ -234,4 +234,108 @@
   AC_MSG_RESULT([$with_$2])
   ])dnl
   
  +dnl ##
  +dnl ##  Check for C99 va_copy() implementation
  +dnl ##  (and provide fallback implementation if neccessary)
  +dnl ##
  +dnl ##  configure.in:
  +dnl ##    AC_CHECK_VA_COPY
  +dnl ##  foo.c:
  +dnl ##    #include "config.h"
  +dnl ##    [...]
  +dnl ##    va_copy(d,s)
  +dnl ##
  +dnl ##  This check is rather complex: first because we really have to
  +dnl ##  try various possible implementations in sequence and second, we
  +dnl ##  cannot define a macro in config.h with parameters directly.
  +dnl ##
  +
  +dnl #   test program for va_copy() implementation
  +changequote(<<,>>)
  +m4_define(__va_copy_test, <<[
  +#include <stdlib.h>
  +#include <stdarg.h>
  +#include <string.h>
  +#define DO_VA_COPY(d, s) $1
  +void test(char *str, ...)
  +{
  +    va_list ap, ap2;
  +    int i;
  +    va_start(ap, str);
  +    DO_VA_COPY(ap2, ap);
  +    for (i = 1; i <= 9; i++) {
  +        int k = (int)va_arg(ap, int);
  +        if (k != i)
  +            abort();
  +    }
  +    DO_VA_COPY(ap, ap2);
  +    for (i = 1; i <= 9; i++) {
  +        int k = (int)va_arg(ap, int);
  +        if (k != i)
  +            abort();
  +    }
  +    va_end(ap);
  +}
  +int main(int argc, char *argv[])
  +{
  +    test("test", 1, 2, 3, 4, 5, 6, 7, 8, 9);
  +    exit(0);
  +}
  +]>>)
  +changequote([,])
  +
  +dnl #   test driver for va_copy() implementation
  +m4_define(__va_copy_check, [
  +    AH_VERBATIM($1,
  +[/* Predefined possible va_copy() implementation (id: $1) */
  +#define __VA_COPY_USE_$1 $2])
  +    if test ".$ac_cv_va_copy" = .; then
  +        AC_TRY_RUN(__va_copy_test($2), [ac_cv_va_copy="$1"])
  +    fi
  +])
  +
  +dnl #   Autoconf check for va_copy() implementation checking
  +AC_DEFUN(AC_CHECK_VA_COPY,[
  +  dnl #   provide Autoconf display check message
  +  AC_MSG_CHECKING(for va_copy() function)
  +  dnl #   check for various implementations in priorized sequence   
  +  AC_CACHE_VAL(ac_cv_va_copy, [
  +    ac_cv_va_copy=""
  +    dnl #   1. check for standardized C99 macro
  +    __va_copy_check(STD, [va_copy((d), (s))])
  +    dnl #   2. check for alternative/deprecated GCC macro
  +    __va_copy_check(MAC, [VA_COPY((d), (s))])
  +    dnl #   3. check for assignment approach (assuming va_list is a struct)
  +    __va_copy_check(AS1, [do { (d) = (s); } while (0)])
  +    dnl #   4. check for assignment approach (assuming va_list is a pointer)
  +    __va_copy_check(AS2, [do { *(d) = *(s); } while (0)])
  +    dnl #   5. check for memory copying approach (assuming va_list is a struct)
  +    __va_copy_check(CP1, [memcpy((void *)&(d), (void *)&(s)), sizeof((s))])
  +    dnl #   6. check for memory copying approach (assuming va_list is a pointer)
  +    __va_copy_check(CP2, [memcpy((void *)(d), (void *)(s)), sizeof(*(s))])
  +    if test ".$ac_cv_va_copy" = .; then
  +        AC_ERROR([no working implementation found])
  +    fi
  +  ])
  +  dnl #   optionally activate the fallback implementation
  +  if test ".$ac_cv_va_copy" = ".STD"; then
  +      AC_DEFINE(HAVE_VA_COPY, 1, [Define if va_copy() macro exists (and no fallback implementation is required)])
  +  fi
  +  dnl #   declare which fallback implementation to actually use
  +  AC_DEFINE_UNQUOTED([__VA_COPY_USE], [__VA_COPY_USE_$ac_cv_va_copy],
  +      [Define to id of used va_copy() implementation])
  +  dnl #   provide activation hook for fallback implementation
  +  AH_VERBATIM([__VA_COPY_ACTIVATION],
  +[/* Optional va_copy() implementation activation */
  +#ifndef HAVE_VA_COPY
  +#define va_copy(d, s) __VA_COPY_USE(d, s)
  +#endif
  +])
  +  dnl #   provide Autoconf display result message
  +  if test ".$ac_cv_va_copy" = ".STD"; then
  +      AC_MSG_RESULT([yes])
  +  else
  +      AC_MSG_RESULT([no (using fallback implementation)])
  +  fi
  +])
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/configure.ac
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 configure.ac
  --- ossp-pkg/var/configure.ac	14 Feb 2003 21:17:07 -0000	1.13
  +++ ossp-pkg/var/configure.ac	4 Apr 2004 08:04:34 -0000	1.14
  @@ -45,6 +45,9 @@
   dnl #   checks for platform environment
   AC_CHECK_FUNCS(snprintf)
   
  +dnl #   check for va_copy()
  +AC_CHECK_VA_COPY
  +
   dnl #   checks for external libraries
   AC_CHECK_EXTLIB([OSSP ex], ex, __ex_ctx, ex.h,
                   [AC_DEFINE(WITH_EX, 1, [Define to 1 if building with OSSP ex])])
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/ts.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ts.c
  --- ossp-pkg/var/ts.c	14 Feb 2003 21:17:07 -0000	1.4
  +++ ossp-pkg/var/ts.c	4 Apr 2004 08:04:34 -0000	1.5
  @@ -206,7 +206,7 @@
   
       if (format == NULL)
           return NULL;
  -    ap2 = ap;
  +    va_copy(ap2, ap);
       if ((n = ts_suite_mvxprintf(NULL, 0, format, ap)) == -1)
           return NULL;
       if ((buffer = (char *)malloc(n+1)) == NULL)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var.c
  ============================================================================
  $ cvs diff -u -r1.101 -r1.102 var.c
  --- ossp-pkg/var/var.c	17 Feb 2004 09:21:06 -0000	1.101
  +++ ossp-pkg/var/var.c	4 Apr 2004 08:04:34 -0000	1.102
  @@ -2621,9 +2621,9 @@
           return VAR_RC(VAR_ERR_INVALID_ARGUMENT);
   
       /* determine formatting buffer length */
  -    apbak = ap;
  +    va_copy(apbak, ap);
       nBuf = var_mvsnprintf(NULL, 0, fmt, ap);
  -    ap = apbak;
  +    va_copy(ap, apbak);
       if (nBuf == -1)
           return VAR_RC(VAR_ERR_FORMATTING_FAILURE);
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Apr  4 10:07:35 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5CBDF77824; Sun,  4 Apr 2004 10:07:35 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var/ Makefile.in README aclocal.m4 configure.ac t...
Message-Id: <20040404080735.5CBDF77824@mail.ossp.org>
Date: Sun,  4 Apr 2004 10:07:35 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Apr-2004 10:07:35
  Branch: HEAD                             Handle: 2004040409073400

  Modified files:
    ossp-pkg/var            Makefile.in README aclocal.m4 configure.ac ts.c
                            ts.h var-config.in var-config.pod var.c var.h
                            var.pod var_play.c var_test.c

  Log:
    adjust copyrights

  Summary:
    Revision    Changes     Path
    1.10        +3  -3      ossp-pkg/var/Makefile.in
    1.5         +3  -3      ossp-pkg/var/README
    1.10        +3  -3      ossp-pkg/var/aclocal.m4
    1.15        +3  -3      ossp-pkg/var/configure.ac
    1.6         +6  -6      ossp-pkg/var/ts.c
    1.3         +6  -6      ossp-pkg/var/ts.h
    1.7         +3  -3      ossp-pkg/var/var-config.in
    1.7         +3  -3      ossp-pkg/var/var-config.pod
    1.103       +3  -3      ossp-pkg/var/var.c
    1.31        +3  -3      ossp-pkg/var/var.h
    1.36        +5  -5      ossp-pkg/var/var.pod
    1.7         +3  -3      ossp-pkg/var/var_play.c
    1.50        +3  -3      ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 Makefile.in
  --- ossp-pkg/var/Makefile.in	14 Feb 2003 21:17:07 -0000	1.9
  +++ ossp-pkg/var/Makefile.in	4 Apr 2004 08:07:34 -0000	1.10
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP var -- Variable Expansion
  -##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2004 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2001-2004 Cable & Wireless (http://www.cw.com/)
   ##
   ##  This file is part of OSSP var, a variable expansion
   ##  library which can be found at http://www.ossp.org/pkg/lib/var/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/README
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 README
  --- ossp-pkg/var/README	14 Feb 2003 21:17:07 -0000	1.4
  +++ ossp-pkg/var/README	4 Apr 2004 08:07:34 -0000	1.5
  @@ -27,9 +27,9 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  -  Copyright (c) 2001-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   
     This file is part of OSSP var, a variable expansion
     library which can be found at http://www.ossp.org/pkg/lib/var/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 aclocal.m4
  --- ossp-pkg/var/aclocal.m4	4 Apr 2004 08:04:34 -0000	1.9
  +++ ossp-pkg/var/aclocal.m4	4 Apr 2004 08:07:34 -0000	1.10
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP var -- Variable Expansion
  -dnl ##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2001-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   dnl ##
   dnl ##  This file is part of OSSP var, a variable expansion
   dnl ##  library which can be found at http://www.ossp.org/pkg/lib/var/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/configure.ac
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 configure.ac
  --- ossp-pkg/var/configure.ac	4 Apr 2004 08:04:34 -0000	1.14
  +++ ossp-pkg/var/configure.ac	4 Apr 2004 08:07:34 -0000	1.15
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP var -- Variable Expansion
  -dnl ##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -dnl ##  Copyright (c) 2001-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +dnl ##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2004 The OSSP Project (http://www.ossp.org/)
  +dnl ##  Copyright (c) 2001-2004 Cable & Wireless (http://www.cw.com/)
   dnl ##
   dnl ##  This file is part of OSSP var, a variable expansion
   dnl ##  library which can be found at http://www.ossp.org/pkg/lib/var/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/ts.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ts.c
  --- ossp-pkg/var/ts.c	4 Apr 2004 08:04:34 -0000	1.5
  +++ ossp-pkg/var/ts.c	4 Apr 2004 08:07:34 -0000	1.6
  @@ -1,11 +1,11 @@
   /*
  -**  TS - OSSP Test Suite Library
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  OSSP ts - Test Suite Library
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   **
  -**  This file is part of OSSP TS, a small test suite library which
  -**  can be found at http://www.ossp.org/pkg/ts/.
  +**  This file is part of OSSP ts, a small test suite library which
  +**  can be found at http://www.ossp.org/pkg/lib/ts/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/ts.h
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ts.h
  --- ossp-pkg/var/ts.h	14 Feb 2003 21:17:07 -0000	1.2
  +++ ossp-pkg/var/ts.h	4 Apr 2004 08:07:34 -0000	1.3
  @@ -1,11 +1,11 @@
   /*
  -**  TS - OSSP Test Suite Library
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  OSSP ts - Test Suite Library
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   **
  -**  This file is part of OSSP TS, a small test suite library which
  -**  can be found at http://www.ossp.org/pkg/ts/.
  +**  This file is part of OSSP ts, a small test suite library which
  +**  can be found at http://www.ossp.org/pkg/lib/ts/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var-config.in
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 var-config.in
  --- ossp-pkg/var/var-config.in	14 Feb 2003 21:17:07 -0000	1.6
  +++ ossp-pkg/var/var-config.in	4 Apr 2004 08:07:34 -0000	1.7
  @@ -1,9 +1,9 @@
   #!/bin/sh
   ##
   ##  OSSP var -- Variable Expansion
  -##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2004 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2001-2004 Cable & Wireless (http://www.cw.com/)
   ##
   ##  This file is part of OSSP var, a variable expansion
   ##  library which can be found at http://www.ossp.org/pkg/lib/var/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var-config.pod
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 var-config.pod
  --- ossp-pkg/var/var-config.pod	14 Feb 2003 21:17:07 -0000	1.6
  +++ ossp-pkg/var/var-config.pod	4 Apr 2004 08:07:34 -0000	1.7
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP var -- Variable Expansion
  -##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2004 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2001-2004 Cable & Wireless (http://www.cw.com/)
   ##
   ##  This file is part of OSSP var, a variable expansion
   ##  library which can be found at http://www.ossp.org/pkg/lib/var/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var.c
  ============================================================================
  $ cvs diff -u -r1.102 -r1.103 var.c
  --- ossp-pkg/var/var.c	4 Apr 2004 08:04:34 -0000	1.102
  +++ ossp-pkg/var/var.c	4 Apr 2004 08:07:34 -0000	1.103
  @@ -1,8 +1,8 @@
   /*
   **  OSSP var - Variable Expansion
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2004 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP var, a variable expansion
   **  library which can be found at http://www.ossp.org/pkg/lib/var/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var.h
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 var.h
  --- ossp-pkg/var/var.h	14 Feb 2003 21:17:07 -0000	1.30
  +++ ossp-pkg/var/var.h	4 Apr 2004 08:07:34 -0000	1.31
  @@ -1,8 +1,8 @@
   /*
   **  OSSP var - Variable Expansion
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2004 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP var, a variable expansion
   **  library which can be found at http://www.ossp.org/pkg/lib/var/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var.pod
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 var.pod
  --- ossp-pkg/var/var.pod	14 Feb 2003 21:17:07 -0000	1.35
  +++ ossp-pkg/var/var.pod	4 Apr 2004 08:07:34 -0000	1.36
  @@ -1,10 +1,10 @@
   ##
   ##  OSSP var -- Variable Expansion
  -##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2004 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2001-2004 Cable & Wireless (http://www.cw.com/)
   ##
  -##  This file is part of OSSP VAR, an extensible data serialization
  +##  This file is part of OSSP var, an extensible data serialization
   ##  library which can be found at http://www.ossp.org/pkg/lib/var/.
   ##
   ##  Permission to use, copy, modify, and distribute this software for
  @@ -847,7 +847,7 @@
   
   B<OSSP var> was initially written by Peter Simons
   E<lt>simons@crypt.toE<gt> in November 2001 under contract with the
  -B<OSSP> sponsor B<Cable & Wireless Germany>. Its API and internal
  +B<OSSP> sponsor B<Cable & Wireless>. Its API and internal
   code structure was revamped in February 2002 by Ralf S. Engelschall
   E<lt>rse@engelschall.comE<gt> to fully conform to the B<OSSP> library
   standards. Before its initial public release, Ralf S. Engelschall in
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var_play.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 var_play.c
  --- ossp-pkg/var/var_play.c	14 Feb 2003 21:17:07 -0000	1.6
  +++ ossp-pkg/var/var_play.c	4 Apr 2004 08:07:34 -0000	1.7
  @@ -1,8 +1,8 @@
   /*
   **  OSSP var -- Variable Expansion
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2004 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP var, a variable expansion
   **  library which can be found at http://www.ossp.org/pkg/lib/var/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var_test.c
  ============================================================================
  $ cvs diff -u -r1.49 -r1.50 var_test.c
  --- ossp-pkg/var/var_test.c	25 Oct 2003 19:56:07 -0000	1.49
  +++ ossp-pkg/var/var_test.c	4 Apr 2004 08:07:34 -0000	1.50
  @@ -1,8 +1,8 @@
   /*
   **  OSSP var -- Variable Expansion
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2004 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP var, a variable expansion
   **  library which can be found at http://www.ossp.org/pkg/lib/var/.
  @@ .

From ossp-cvs-owner@ossp.org  Sun Apr  4 10:08:05 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3426D7782A; Sun,  4 Apr 2004 10:08:05 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var/ ChangeLog
Message-Id: <20040404080805.3426D7782A@mail.ossp.org>
Date: Sun,  4 Apr 2004 10:08:05 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Apr-2004 10:08:05
  Branch: HEAD                             Handle: 2004040409080400

  Modified files:
    ossp-pkg/var            ChangeLog

  Log:
    remember

  Summary:
    Revision    Changes     Path
    1.4         +3  -0      ossp-pkg/var/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ChangeLog
  --- ossp-pkg/var/ChangeLog	4 Apr 2004 08:04:34 -0000	1.3
  +++ ossp-pkg/var/ChangeLog	4 Apr 2004 08:08:04 -0000	1.4
  @@ -12,6 +12,9 @@
     For less details please have a look at the NEWS file.
   
     Changes between 1.0.0 and 1.1.0 (14-Feb-2002 to 04-Apr-2004)
  +   
  +   o Bumped year in copyright messages for new year 2004.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
   
      o Provide Autoconf check (AC_CHECK_VA_COPY) for va_copy(d,s) macro
        and fallback implementations and now that we can be sure that
  @@ .

From ossp-cvs-owner@ossp.org  Sun Apr  4 10:09:07 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D9B2D77824; Sun,  4 Apr 2004 10:09:06 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var/ ChangeLog NEWS
Message-Id: <20040404080906.D9B2D77824@mail.ossp.org>
Date: Sun,  4 Apr 2004 10:09:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Apr-2004 10:09:06
  Branch: HEAD                             Handle: 2004040409090600

  Modified files:
    ossp-pkg/var            ChangeLog NEWS

  Log:
    more details

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-pkg/var/ChangeLog
    1.3         +6  -0      ossp-pkg/var/NEWS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ChangeLog
  --- ossp-pkg/var/ChangeLog	4 Apr 2004 08:08:04 -0000	1.4
  +++ ossp-pkg/var/ChangeLog	4 Apr 2004 08:09:06 -0000	1.5
  @@ -11,7 +11,7 @@
     This is a list of all source changes to OSSP var.
     For less details please have a look at the NEWS file.
   
  -  Changes between 1.0.0 and 1.1.0 (14-Feb-2002 to 04-Apr-2004)
  +  Changes between 1.0.0 and 1.1.0 (14-Feb-2003 to 04-Apr-2004)
      
      o Bumped year in copyright messages for new year 2004.
        [Ralf S. Engelschall <rse@engelschall.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/NEWS
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 NEWS
  --- ossp-pkg/var/NEWS	14 Feb 2003 21:17:07 -0000	1.2
  +++ ossp-pkg/var/NEWS	4 Apr 2004 08:09:06 -0000	1.3
  @@ -11,6 +11,12 @@
     This is a list of user-visible and/or major changes to OSSP var.
     For more details please have a look at the ChangeLog file.
   
  +  Changes between 1.0.0 and 1.1.0 (14-Feb-2003 to 04-Apr-2004)
  +
  +   o upgraded build environment to GNU autoconf 2.59
  +   o upgraded build environment to GNU libtool 1.5.4
  +   o added Autoconf checks for va_copy()
  +
     Changes between 0.9.0 and 1.0.0 (08-Mar-2002 to 14-Feb-2003)
   
      o upgraded build environment to GNU autoconf 2.57
  @@ .

From ossp-cvs-owner@ossp.org  Sun Apr  4 11:57:11 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 044C37781C; Sun,  4 Apr 2004 11:57:10 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var/ ChangeLog README VERSION aclocal.m4 devtool....
Message-Id: <20040404095710.044C37781C@mail.ossp.org>
Date: Sun,  4 Apr 2004 11:57:10 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Apr-2004 11:57:10
  Branch: HEAD                             Handle: 2004040410571000

  Modified files:
    ossp-pkg/var            ChangeLog README VERSION aclocal.m4 devtool.conf
                            var.c

  Log:
    flush more pending changes after some more platform checks

  Summary:
    Revision    Changes     Path
    1.6         +3  -0      ossp-pkg/var/ChangeLog
    1.6         +1  -1      ossp-pkg/var/README
    1.6         +1  -1      ossp-pkg/var/VERSION
    1.11        +15 -11     ossp-pkg/var/aclocal.m4
    1.10        +1  -1      ossp-pkg/var/devtool.conf
    1.104       +2  -2      ossp-pkg/var/var.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ChangeLog
  --- ossp-pkg/var/ChangeLog	4 Apr 2004 08:09:06 -0000	1.5
  +++ ossp-pkg/var/ChangeLog	4 Apr 2004 09:57:10 -0000	1.6
  @@ -12,6 +12,9 @@
     For less details please have a look at the NEWS file.
   
     Changes between 1.0.0 and 1.1.0 (14-Feb-2003 to 04-Apr-2004)
  +
  +   o Remove cast warnings related to function point passing.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
      
      o Bumped year in copyright messages for new year 2004.
        [Ralf S. Engelschall <rse@engelschall.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/README
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 README
  --- ossp-pkg/var/README	4 Apr 2004 08:07:34 -0000	1.5
  +++ ossp-pkg/var/README	4 Apr 2004 09:57:10 -0000	1.6
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|       \_/ \__,_|_|
   
     OSSP var - Variable Expansion
  -  Version 1.0.0 (14-Feb-2003)
  +  Version 1.1.0 (04-Apr-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/VERSION
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 VERSION
  --- ossp-pkg/var/VERSION	14 Feb 2003 21:17:07 -0000	1.5
  +++ ossp-pkg/var/VERSION	4 Apr 2004 09:57:10 -0000	1.6
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP var (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP var, Version 1.0.0 (14-Feb-2003)
  +  This is OSSP var, Version 1.1.0 (04-Apr-2004)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 aclocal.m4
  --- ossp-pkg/var/aclocal.m4	4 Apr 2004 08:07:34 -0000	1.10
  +++ ossp-pkg/var/aclocal.m4	4 Apr 2004 09:57:10 -0000	1.11
  @@ -288,7 +288,7 @@
   m4_define(__va_copy_check, [
       AH_VERBATIM($1,
   [/* Predefined possible va_copy() implementation (id: $1) */
  -#define __VA_COPY_USE_$1 $2])
  +#define __VA_COPY_USE_$1(d, s) $2])
       if test ".$ac_cv_va_copy" = .; then
           AC_TRY_RUN(__va_copy_test($2), [ac_cv_va_copy="$1"])
       fi
  @@ -302,17 +302,21 @@
     AC_CACHE_VAL(ac_cv_va_copy, [
       ac_cv_va_copy=""
       dnl #   1. check for standardized C99 macro
  -    __va_copy_check(STD, [va_copy((d), (s))])
  +    __va_copy_check(C99, [va_copy((d), (s))])
       dnl #   2. check for alternative/deprecated GCC macro
  -    __va_copy_check(MAC, [VA_COPY((d), (s))])
  -    dnl #   3. check for assignment approach (assuming va_list is a struct)
  -    __va_copy_check(AS1, [do { (d) = (s); } while (0)])
  -    dnl #   4. check for assignment approach (assuming va_list is a pointer)
  -    __va_copy_check(AS2, [do { *(d) = *(s); } while (0)])
  -    dnl #   5. check for memory copying approach (assuming va_list is a struct)
  -    __va_copy_check(CP1, [memcpy((void *)&(d), (void *)&(s)), sizeof((s))])
  -    dnl #   6. check for memory copying approach (assuming va_list is a pointer)
  -    __va_copy_check(CP2, [memcpy((void *)(d), (void *)(s)), sizeof(*(s))])
  +    __va_copy_check(GCM, [VA_COPY((d), (s))])
  +    dnl #   3. check for internal GCC macro (high-level define)
  +    __va_copy_check(GCH, [__va_copy((d), (s))])
  +    dnl #   4. check for internal GCC macro (built-in function)
  +    __va_copy_check(GCB, [__builtin_va_copy((d), (s))])
  +    dnl #   5. check for assignment approach (assuming va_list is a struct)
  +    __va_copy_check(ASS, [do { (d) = (s); } while (0)])
  +    dnl #   6. check for assignment approach (assuming va_list is a pointer)
  +    __va_copy_check(ASP, [do { *(d) = *(s); } while (0)])
  +    dnl #   7. check for memory copying approach (assuming va_list is a struct)
  +    __va_copy_check(CPS, [memcpy((void *)&(d), (void *)&(s)), sizeof((s))])
  +    dnl #   8. check for memory copying approach (assuming va_list is a pointer)
  +    __va_copy_check(CPP, [memcpy((void *)(d), (void *)(s)), sizeof(*(s))])
       if test ".$ac_cv_va_copy" = .; then
           AC_ERROR([no working implementation found])
       fi
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 devtool.conf
  --- ossp-pkg/var/devtool.conf	19 Mar 2004 14:55:52 -0000	1.9
  +++ ossp-pkg/var/devtool.conf	4 Apr 2004 09:57:10 -0000	1.10
  @@ -4,7 +4,7 @@
   
   %autogen
       @autogen shtool   1.6.2 "1.6.*" all
  -    @autogen libtool  1.5.2 "1.5*"
  +    @autogen libtool  1.5.4 "1.5*"
       @autogen autoconf 2.59  "2.5[4-9]*"
   
   %autoclean
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var.c
  ============================================================================
  $ cvs diff -u -r1.103 -r1.104 var.c
  --- ossp-pkg/var/var.c	4 Apr 2004 08:07:34 -0000	1.103
  +++ ossp-pkg/var/var.c	4 Apr 2004 09:57:10 -0000	1.104
  @@ -2467,7 +2467,7 @@
           case VAR_CONFIG_CB_VALUE: {
               var_cb_value_t fct;
               void *ctx;
  -            fct = (var_cb_value_t)va_arg(ap, void *);
  +            fct = (var_cb_value_t)va_arg(ap, var_cb_value_t);
               ctx = (void *)va_arg(ap, void *);
               var->cb_value_fct = fct;
               var->cb_value_ctx = ctx;
  @@ -2476,7 +2476,7 @@
           case VAR_CONFIG_CB_OPERATION: {
               var_cb_operation_t fct;
               void *ctx;
  -            fct = (var_cb_operation_t)va_arg(ap, void *);
  +            fct = (var_cb_operation_t)va_arg(ap, var_cb_operation_t);
               ctx = (void *)va_arg(ap, void *);
               var->cb_operation_fct = fct;
               var->cb_operation_ctx = ctx;
  @@ .

From ossp-cvs-owner@ossp.org  Sun Apr  4 11:59:53 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 83F6977815; Sun,  4 Apr 2004 11:59:53 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var/ aclocal.m4
Message-Id: <20040404095953.83F6977815@mail.ossp.org>
Date: Sun,  4 Apr 2004 11:59:53 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Apr-2004 11:59:53
  Branch: HEAD                             Handle: 2004040410595300

  Modified files:
    ossp-pkg/var            aclocal.m4

  Log:
    fix check

  Summary:
    Revision    Changes     Path
    1.12        +1  -1      ossp-pkg/var/aclocal.m4
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 aclocal.m4
  --- ossp-pkg/var/aclocal.m4	4 Apr 2004 09:57:10 -0000	1.11
  +++ ossp-pkg/var/aclocal.m4	4 Apr 2004 09:59:53 -0000	1.12
  @@ -322,7 +322,7 @@
       fi
     ])
     dnl #   optionally activate the fallback implementation
  -  if test ".$ac_cv_va_copy" = ".STD"; then
  +  if test ".$ac_cv_va_copy" = ".C99"; then
         AC_DEFINE(HAVE_VA_COPY, 1, [Define if va_copy() macro exists (and no fallback implementation is required)])
     fi
     dnl #   declare which fallback implementation to actually use
  @@ .

From ossp-cvs-owner@ossp.org  Sun Apr  4 12:00:06 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 259177782C; Sun,  4 Apr 2004 12:00:06 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var/ aclocal.m4
Message-Id: <20040404100006.259177782C@mail.ossp.org>
Date: Sun,  4 Apr 2004 12:00:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Apr-2004 12:00:06
  Branch: HEAD                             Handle: 2004040411000500

  Modified files:
    ossp-pkg/var            aclocal.m4

  Log:
    fix check

  Summary:
    Revision    Changes     Path
    1.13        +1  -1      ossp-pkg/var/aclocal.m4
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 aclocal.m4
  --- ossp-pkg/var/aclocal.m4	4 Apr 2004 09:59:53 -0000	1.12
  +++ ossp-pkg/var/aclocal.m4	4 Apr 2004 10:00:05 -0000	1.13
  @@ -336,7 +336,7 @@
   #endif
   ])
     dnl #   provide Autoconf display result message
  -  if test ".$ac_cv_va_copy" = ".STD"; then
  +  if test ".$ac_cv_va_copy" = ".C99"; then
         AC_MSG_RESULT([yes])
     else
         AC_MSG_RESULT([no (using fallback implementation)])
  @@ .

From ossp-cvs-owner@ossp.org  Sun Apr  4 12:29:24 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 33BFF777F5; Sun,  4 Apr 2004 12:29:24 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20040404102924.33BFF777F5@mail.ossp.org>
Date: Sun,  4 Apr 2004 12:29:24 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   04-Apr-2004 12:29:24
  Branch: HEAD                             Handle: 2004040411292201

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/var    index.wml

  Log:
    release OSSP var 1.1.0

  Summary:
    Revision    Changes     Path
    1.78        +1  -0      ossp-web/new/news.txt
    1.73        +1  -1      ossp-web/pkg/lib/index.wml
    1.9         +2  -2      ossp-web/pkg/lib/var/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.77 -r1.78 news.txt
  --- ossp-web/new/news.txt	3 Apr 2004 11:58:08 -0000	1.77
  +++ ossp-web/new/news.txt	4 Apr 2004 10:29:22 -0000	1.78
  @@ -1,3 +1,4 @@
  +04-Apr-2004: Released L<OSSP var> 1.1.0
   03-Apr-2004: Released L<OSSP ex> 1.0.3
   02-Apr-2004: Released L<OSSP sa> 1.2.0
   16-Feb-2004: Released L<OSSP uuid> 1.0.0
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.72 -r1.73 index.wml
  --- ossp-web/pkg/lib/index.wml	3 Apr 2004 11:58:08 -0000	1.72
  +++ ossp-web/pkg/lib/index.wml	4 Apr 2004 10:29:23 -0000	1.73
  @@ -30,7 +30,7 @@
   			done=100 stable=1.3.0 unstable=none>
     <pkg_item name="var" longname="OSSP var" type="lib"
               desc="Variable Expansion"
  -			done=100 stable=1.0.0 unstable=none>
  +			done=100 stable=1.1.0 unstable=none>
     <pkg_item name="uuid" longname="OSSP uuid" type="lib"
               desc="Universally Unique Identifier"
   			done=100 stable=none unstable=1.0.0>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/var/index.wml
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 index.wml
  --- ossp-web/pkg/lib/var/index.wml	14 Feb 2003 21:23:10 -0000	1.8
  +++ ossp-web/pkg/lib/var/index.wml	4 Apr 2004 10:29:23 -0000	1.9
  @@ -51,7 +51,7 @@
   
   <pkg_status
       name="var" assign="rse"
  -    stable="1.0.0" stable_date="14-Feb-2003"
  +    stable="1.1.0" stable_date="04-Apr-2004"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -62,7 +62,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/var/
       directory=$(FTP_ROOT_DIR)/pkg/lib/var/
       files="var-*.tar.gz" 
  -	stable="var-1.0.0.tar.gz" unstable="none">
  +	stable="var-1.1.0.tar.gz" unstable="none">
   
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Apr  4 12:40:51 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 42D6E777FD; Sun,  4 Apr 2004 12:40:51 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val/ ChangeLog Makefile.in README aclocal.m4 conf...
Message-Id: <20040404104051.42D6E777FD@mail.ossp.org>
Date: Sun,  4 Apr 2004 12:40:51 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Apr-2004 12:40:51
  Branch: HEAD                             Handle: 2004040411405000

  Modified files:
    ossp-pkg/val            ChangeLog Makefile.in README aclocal.m4
                            configure.ac devtool.conf val-config.in
                            val-config.pod val.c val.h val.pod val_test.c

  Log:
    adjust copyrights

  Summary:
    Revision    Changes     Path
    1.2         +12 -0      ossp-pkg/val/ChangeLog
    1.9         +3  -3      ossp-pkg/val/Makefile.in
    1.8         +3  -3      ossp-pkg/val/README
    1.8         +3  -3      ossp-pkg/val/aclocal.m4
    1.8         +3  -3      ossp-pkg/val/configure.ac
    1.12        +1  -1      ossp-pkg/val/devtool.conf
    1.7         +3  -3      ossp-pkg/val/val-config.in
    1.3         +3  -3      ossp-pkg/val/val-config.pod
    1.17        +3  -3      ossp-pkg/val/val.c
    1.9         +3  -3      ossp-pkg/val/val.h
    1.17        +3  -3      ossp-pkg/val/val.pod
    1.10        +3  -3      ossp-pkg/val/val_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ChangeLog
  --- ossp-pkg/val/ChangeLog	17 Feb 2003 14:40:54 -0000	1.1
  +++ ossp-pkg/val/ChangeLog	4 Apr 2004 10:40:50 -0000	1.2
  @@ -11,6 +11,18 @@
     This is a list of all changes to OSSP val.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 0.9.1 and 0.9.2 (17-Feb-2003 to 04-Apr-2004)
  +
  +   o Do not compare va_list variables against NULL because it
  +     is not defined whether va_list variables are really pointers.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +   o Bumped year in copyright messages for new year 2004.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +   o Upgraded build environment to GNU libtool 1.5.4 and GNU autoconf 2.59
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
     Changes between 0.9.0 and 0.9.1 (15-Mar-2002 to 17-Feb-2003)
   
      o Swap keyptr/datptr in included linear hashing library to fix datptr
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 Makefile.in
  --- ossp-pkg/val/Makefile.in	2 Feb 2003 14:22:43 -0000	1.8
  +++ ossp-pkg/val/Makefile.in	4 Apr 2004 10:40:50 -0000	1.9
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP val - Value Access
  -##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP val, a value access library which
   ##  can be found at http://www.ossp.org/pkg/lib/val/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/README
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 README
  --- ossp-pkg/val/README	17 Feb 2003 14:42:19 -0000	1.7
  +++ ossp-pkg/val/README	4 Apr 2004 10:40:50 -0000	1.8
  @@ -22,9 +22,9 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
   
     This file is part of OSSP val, a value access library which
     can be found at http://www.ossp.org/pkg/lib/val/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 aclocal.m4
  --- ossp-pkg/val/aclocal.m4	2 Feb 2003 14:22:43 -0000	1.7
  +++ ossp-pkg/val/aclocal.m4	4 Apr 2004 10:40:50 -0000	1.8
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP val -- Value Access
  -dnl ##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2001-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   dnl ##
   dnl ##  This file is part of OSSP val, a value access library
   dnl ##  which can be found at http://www.ossp.org/pkg/lib/val/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/configure.ac
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 configure.ac
  --- ossp-pkg/val/configure.ac	17 Feb 2003 14:35:24 -0000	1.7
  +++ ossp-pkg/val/configure.ac	4 Apr 2004 10:40:50 -0000	1.8
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP val - Value Access
  -dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
   dnl ##
   dnl ##  This file is part of OSSP val, a value access library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/val/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 devtool.conf
  --- ossp-pkg/val/devtool.conf	19 Mar 2004 14:55:51 -0000	1.11
  +++ ossp-pkg/val/devtool.conf	4 Apr 2004 10:40:50 -0000	1.12
  @@ -4,7 +4,7 @@
   
   %autogen
       @autogen shtool   1.6.2 "1.6.*" all
  -    @autogen libtool  1.5.2 "1.5*"
  +    @autogen libtool  1.5.4 "1.5*"
       @autogen autoconf 2.59  "2.5[4-9]*"
   
   %autoclean
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/val-config.in
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 val-config.in
  --- ossp-pkg/val/val-config.in	17 Feb 2003 14:35:25 -0000	1.6
  +++ ossp-pkg/val/val-config.in	4 Apr 2004 10:40:50 -0000	1.7
  @@ -1,9 +1,9 @@
   #!/bin/sh
   ##
   ##  OSSP val - Value Access
  -##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP val, a value access library which
   ##  can be found at http://www.ossp.org/pkg/lib/val/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/val-config.pod
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 val-config.pod
  --- ossp-pkg/val/val-config.pod	2 Feb 2003 14:22:43 -0000	1.2
  +++ ossp-pkg/val/val-config.pod	4 Apr 2004 10:40:50 -0000	1.3
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP val -- Value Access
  -##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2004 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2001-2004 Cable & Wireless (http://www.cw.com/)
   ##
   ##  This file is part of OSSP val, a value access
   ##  library which can be found at http://www.ossp.org/pkg/lib/val/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/val.c
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 val.c
  --- ossp-pkg/val/val.c	31 Jul 2003 07:29:51 -0000	1.16
  +++ ossp-pkg/val/val.c	4 Apr 2004 10:40:50 -0000	1.17
  @@ -1,8 +1,8 @@
   /*
   **  OSSP val - Value Access
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP val, a value access library which
   **  can be found at http://www.ossp.org/pkg/lib/val/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/val.h
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 val.h
  --- ossp-pkg/val/val.h	2 Feb 2003 14:22:43 -0000	1.8
  +++ ossp-pkg/val/val.h	4 Apr 2004 10:40:50 -0000	1.9
  @@ -1,8 +1,8 @@
   /*
   **  OSSP val - Value Access
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP val, a value access library which
   **  can be found at http://www.ossp.org/pkg/lib/val/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/val.pod
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 val.pod
  --- ossp-pkg/val/val.pod	17 Feb 2003 14:35:25 -0000	1.16
  +++ ossp-pkg/val/val.pod	4 Apr 2004 10:40:50 -0000	1.17
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP val - Value Access
  -##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP val, a value access library which
   ##  can be found at http://www.ossp.org/pkg/lib/val/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/val_test.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 val_test.c
  --- ossp-pkg/val/val_test.c	17 Feb 2003 14:35:25 -0000	1.9
  +++ ossp-pkg/val/val_test.c	4 Apr 2004 10:40:50 -0000	1.10
  @@ -1,8 +1,8 @@
   /*
   **  OSSP val - Value Access
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP val, a value access library which
   **  can be found at http://www.ossp.org/pkg/lib/val/.
  @@ .

From ossp-cvs-owner@ossp.org  Sun Apr  4 12:45:30 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5C73F777FD; Sun,  4 Apr 2004 12:45:30 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val/ ChangeLog val.c
Message-Id: <20040404104530.5C73F777FD@mail.ossp.org>
Date: Sun,  4 Apr 2004 12:45:30 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Apr-2004 12:45:30
  Branch: HEAD                             Handle: 2004040411452900

  Modified files:
    ossp-pkg/val            ChangeLog val.c

  Log:
    Double-cast some variable passing to circumvent GCC warnings.

  Summary:
    Revision    Changes     Path
    1.3         +3  -0      ossp-pkg/val/ChangeLog
    1.18        +11 -11     ossp-pkg/val/val.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ChangeLog
  --- ossp-pkg/val/ChangeLog	4 Apr 2004 10:40:50 -0000	1.2
  +++ ossp-pkg/val/ChangeLog	4 Apr 2004 10:45:29 -0000	1.3
  @@ -13,6 +13,9 @@
   
     Changes between 0.9.1 and 0.9.2 (17-Feb-2003 to 04-Apr-2004)
   
  +   o Double-cast some variable passing to circumvent GCC warnings.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
      o Do not compare va_list variables against NULL because it
        is not defined whether va_list variables are really pointers.
        [Ralf S. Engelschall <rse@engelschall.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/val.c
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 val.c
  --- ossp-pkg/val/val.c	4 Apr 2004 10:40:50 -0000	1.17
  +++ ossp-pkg/val/val.c	4 Apr 2004 10:45:29 -0000	1.18
  @@ -714,7 +714,7 @@
   
       /* recursive step-down on structured name */
       if ((cp = strchr(name, '.')) != NULL) {
  -        if (!lh_lookup(val->lh, name, cp-name, (void **)&obj, NULL))
  +        if (!lh_lookup(val->lh, name, cp-name, (void **)(void *)&obj, NULL))
               return VAL_RC(VAL_ERR_ARG);
           if (!(obj->type & VAL_TYPE_VAL))
               return VAL_RC(VAL_ERR_USE);
  @@ -755,7 +755,7 @@
   
       /* recursive step-down on structured name */
       if ((cp = strchr(name, '.')) != NULL) {
  -        if (!lh_lookup(val->lh, name, cp-name, (void **)&obj, NULL))
  +        if (!lh_lookup(val->lh, name, cp-name, (void **)(void *)&obj, NULL))
               return VAL_RC(VAL_ERR_ARG);
           if (!(obj->type & VAL_TYPE_VAL))
               return VAL_RC(VAL_ERR_USE);
  @@ -764,7 +764,7 @@
       }
   
       /* try to lookup object in hash table */
  -    if (!lh_lookup(val->lh, name, strlen(name), (void **)&obj, NULL))
  +    if (!lh_lookup(val->lh, name, strlen(name), (void **)(void *)&obj, NULL))
           return VAL_RC(VAL_ERR_ARG);
   
       /* destroy value object */
  @@ -792,7 +792,7 @@
   
       /* recursive step-down on structured name */
       if ((cp = strchr(name, '.')) != NULL) {
  -        if (!lh_lookup(val->lh, name, cp-name, (void **)&obj, NULL))
  +        if (!lh_lookup(val->lh, name, cp-name, (void **)(void *)&obj, NULL))
               return VAL_RC(VAL_ERR_ARG);
           if (!(obj->type & VAL_TYPE_VAL))
               return VAL_RC(VAL_ERR_USE);
  @@ -801,7 +801,7 @@
       }
   
       /* try to lookup object in hash table */
  -    if (!lh_lookup(val->lh, name, strlen(name), (void **)&obj, NULL))
  +    if (!lh_lookup(val->lh, name, strlen(name), (void **)(void *)&obj, NULL))
           return VAL_RC(VAL_ERR_ARG);
   
       /* pass queried information to caller */
  @@ -829,7 +829,7 @@
   
       /* recursive step-down on structured name */
       if ((cp = strchr(name, '.')) != NULL) {
  -        if (!lh_lookup(val->lh, name, cp-name, (void **)&obj, NULL))
  +        if (!lh_lookup(val->lh, name, cp-name, (void **)(void *)&obj, NULL))
               return VAL_RC(VAL_ERR_ARG);
           if (!(obj->type & VAL_TYPE_VAL))
               return VAL_RC(VAL_ERR_USE);
  @@ -838,7 +838,7 @@
       }
   
       /* try to lookup object in hash table */
  -    if (!lh_lookup(val->lh, name, strlen(name), (void **)&obj, NULL))
  +    if (!lh_lookup(val->lh, name, strlen(name), (void **)(void *)&obj, NULL))
           return VAL_RC(VAL_ERR_ARG);
   
       /* determine value storage */
  @@ -893,7 +893,7 @@
   
       /* recursive step-down on structured name */
       if ((cp = strchr(name, '.')) != NULL) {
  -        if (!lh_lookup(val->lh, name, cp-name, (void **)&obj, NULL))
  +        if (!lh_lookup(val->lh, name, cp-name, (void **)(void *)&obj, NULL))
               return VAL_RC(VAL_ERR_ARG);
           if (!(obj->type & VAL_TYPE_VAL))
               return VAL_RC(VAL_ERR_USE);
  @@ -902,7 +902,7 @@
       }
   
       /* try to lookup object in hash table */
  -    if (!lh_lookup(val->lh, name, strlen(name), (void **)&obj, NULL))
  +    if (!lh_lookup(val->lh, name, strlen(name), (void **)(void *)&obj, NULL))
           return VAL_RC(VAL_ERR_ARG);
   
       /* determine value storage */
  @@ -1014,7 +1014,7 @@
       else if ((cp = strchr(name+prefixlen, '.')) != NULL) {
           /* CASE 2: still stepping-down for structured name
              prefix="foo.bar.", remainder="quux.baz" */
  -        if (!lh_lookup(val->lh, name+prefixlen, cp-(name+prefixlen), (void **)&obj, NULL))
  +        if (!lh_lookup(val->lh, name+prefixlen, cp-(name+prefixlen), (void **)(void *)&obj, NULL))
               return VAL_RC(VAL_ERR_ARG);
           if (!(obj->type & VAL_TYPE_VAL))
               return VAL_RC(VAL_ERR_USE);
  @@ -1025,7 +1025,7 @@
       } else {
           /* CASE 3: reached last component of structured name
              prefix="foo.bar.quux.", remainder="baz" */
  -        if (!lh_lookup(val->lh, name+prefixlen, strlen(name+prefixlen), (void **)&obj, NULL))
  +        if (!lh_lookup(val->lh, name+prefixlen, strlen(name+prefixlen), (void **)(void *)&obj, NULL))
               return VAL_RC(VAL_ERR_ARG);
           if ((rc = cb(ctx, name, (obj->type & ~VAL_INLINE),
                        obj->desc, val_storage(obj))) != VAL_OK)
  @@ .

From ossp-cvs-owner@ossp.org  Sun Apr  4 12:46:36 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DB0BA777FD; Sun,  4 Apr 2004 12:46:35 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val/ README VERSION
Message-Id: <20040404104635.DB0BA777FD@mail.ossp.org>
Date: Sun,  4 Apr 2004 12:46:35 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Apr-2004 12:46:35
  Branch: HEAD                             Handle: 2004040411463500

  Modified files:
    ossp-pkg/val            README VERSION

  Log:
    bump for release

  Summary:
    Revision    Changes     Path
    1.9         +1  -1      ossp-pkg/val/README
    1.5         +1  -1      ossp-pkg/val/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/README
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 README
  --- ossp-pkg/val/README	4 Apr 2004 10:40:50 -0000	1.8
  +++ ossp-pkg/val/README	4 Apr 2004 10:46:35 -0000	1.9
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|       \_/ \__,_|_|
   
     OSSP val - Value Access
  -  Version 0.9.1 (17-Feb-2003)
  +  Version 0.9.2 (04-Apr-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/VERSION
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 VERSION
  --- ossp-pkg/val/VERSION	17 Feb 2003 14:42:19 -0000	1.4
  +++ ossp-pkg/val/VERSION	4 Apr 2004 10:46:35 -0000	1.5
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP val (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP val, Version 0.9.1 (17-Feb-2003)
  +  This is OSSP val, Version 0.9.2 (04-Apr-2004)
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Apr  4 12:50:57 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BB12277806; Sun,  4 Apr 2004 12:50:57 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20040404105057.BB12277806@mail.ossp.org>
Date: Sun,  4 Apr 2004 12:50:57 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   04-Apr-2004 12:50:57
  Branch: HEAD                             Handle: 2004040411505601

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/val    index.wml

  Log:
    release OSSP val 0.9.2

  Summary:
    Revision    Changes     Path
    1.79        +1  -0      ossp-web/new/news.txt
    1.74        +1  -1      ossp-web/pkg/lib/index.wml
    1.8         +2  -2      ossp-web/pkg/lib/val/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.78 -r1.79 news.txt
  --- ossp-web/new/news.txt	4 Apr 2004 10:29:22 -0000	1.78
  +++ ossp-web/new/news.txt	4 Apr 2004 10:50:56 -0000	1.79
  @@ -1,3 +1,4 @@
  +04-Apr-2004: Released L<OSSP val> 0.9.2
   04-Apr-2004: Released L<OSSP var> 1.1.0
   03-Apr-2004: Released L<OSSP ex> 1.0.3
   02-Apr-2004: Released L<OSSP sa> 1.2.0
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.73 -r1.74 index.wml
  --- ossp-web/pkg/lib/index.wml	4 Apr 2004 10:29:23 -0000	1.73
  +++ ossp-web/pkg/lib/index.wml	4 Apr 2004 10:50:56 -0000	1.74
  @@ -36,7 +36,7 @@
   			done=100 stable=none unstable=1.0.0>
     <pkg_item name="val" longname="OSSP val" type="lib"
               desc="Value Access"
  -			done=95 stable=none unstable=0.9.1>
  +			done=95 stable=none unstable=0.9.2>
     <pkg_item name="xds" longname="OSSP xds" type="lib"
               desc="Extensible Data Serialization"
   			done=95 stable=none unstable=0.9.0>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/val/index.wml
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 index.wml
  --- ossp-web/pkg/lib/val/index.wml	17 Feb 2003 14:45:44 -0000	1.7
  +++ ossp-web/pkg/lib/val/index.wml	4 Apr 2004 10:50:57 -0000	1.8
  @@ -34,7 +34,7 @@
   <pkg_status
       name="val" assign="rse"
       stable="none" stable_date="none"
  -    unstable="0.9.1" unstable_date="17-Feb-2003"
  +    unstable="0.9.2" unstable_date="04-Apr-2004"
   	done=100>
   
   <h2>Source</h2>
  @@ -44,7 +44,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/val/
       directory=$(FTP_ROOT_DIR)/pkg/lib/val/
       files="val-*.tar.gz" 
  -	stable="none" unstable="val-0.9.1.tar.gz">
  +	stable="none" unstable="val-0.9.2.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Apr  5 16:44:22 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8193B7784E; Mon,  5 Apr 2004 16:44:22 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex/ ChangeLog README VERSION aclocal.m4 configure...
Message-Id: <20040405144422.8193B7784E@mail.ossp.org>
Date: Mon,  5 Apr 2004 16:44:22 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Apr-2004 16:44:22
  Branch: HEAD                             Handle: 2004040515442100

  Modified files:
    ossp-pkg/ex             ChangeLog README VERSION aclocal.m4 configure.ac
                            devtool.conf ts.c ts.h

  Log:
    flush all my pending changes for release of 1.0.4

  Summary:
    Revision    Changes     Path
    1.11        +9  -0      ossp-pkg/ex/ChangeLog
    1.14        +1  -1      ossp-pkg/ex/README
    1.8         +1  -1      ossp-pkg/ex/VERSION
    1.6         +109 -0     ossp-pkg/ex/aclocal.m4
    1.9         +1  -0      ossp-pkg/ex/configure.ac
    1.12        +2  -2      ossp-pkg/ex/devtool.conf
    1.7         +4  -4      ossp-pkg/ex/ts.c
    1.5         +3  -3      ossp-pkg/ex/ts.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 ChangeLog
  --- ossp-pkg/ex/ChangeLog	3 Apr 2004 11:52:47 -0000	1.10
  +++ ossp-pkg/ex/ChangeLog	5 Apr 2004 14:44:21 -0000	1.11
  @@ -11,6 +11,15 @@
   
     This is the list of all changes to the OSSP ex source tree.
   
  +  Changes between 1.0.3 and 1.0.4 (03-Apr-2004 to 05-Apr-2004)
  +
  +   *) Added Autoconf check for va_copy() and use this in 
  +      the test suite sub-library in order to fix it.
  +      [Ralf S. Engelschall]
  +
  +   *) Upgrade build environment to GNU libtool 1.5.4
  +      [Ralf S. Engelschall]
  +
     Changes between 1.0.2 and 1.0.3 (30-Jan-2003 to 03-Apr-2004)
   
      *) Upgrade build environment to GNU autoconf 2.59 and
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/README
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 README
  --- ossp-pkg/ex/README	3 Apr 2004 11:52:47 -0000	1.13
  +++ ossp-pkg/ex/README	5 Apr 2004 14:44:21 -0000	1.14
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     \___/_/\_\
   
     OSSP ex - Exception Handling
  -  Version 1.0.3 (03-Apr-2004)
  +  Version 1.0.4 (05-Apr-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/VERSION
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 VERSION
  --- ossp-pkg/ex/VERSION	3 Apr 2004 11:52:47 -0000	1.7
  +++ ossp-pkg/ex/VERSION	5 Apr 2004 14:44:21 -0000	1.8
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP ex (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP ex, Version 1.0.3 (03-Apr-2004)
  +  This is OSSP ex, Version 1.0.4 (05-Apr-2004)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 aclocal.m4
  --- ossp-pkg/ex/aclocal.m4	25 Mar 2004 19:01:42 -0000	1.5
  +++ ossp-pkg/ex/aclocal.m4	5 Apr 2004 14:44:21 -0000	1.6
  @@ -115,3 +115,112 @@
   fi
   ])
   
  +dnl ##
  +dnl ##  Check for C99 va_copy() implementation
  +dnl ##  (and provide fallback implementation if neccessary)
  +dnl ##
  +dnl ##  configure.in:
  +dnl ##    AC_CHECK_VA_COPY
  +dnl ##  foo.c:
  +dnl ##    #include "config.h"
  +dnl ##    [...]
  +dnl ##    va_copy(d,s)
  +dnl ##
  +dnl ##  This check is rather complex: first because we really have to
  +dnl ##  try various possible implementations in sequence and second, we
  +dnl ##  cannot define a macro in config.h with parameters directly.
  +dnl ##
  +
  +dnl #   test program for va_copy() implementation
  +changequote(<<,>>)
  +m4_define(__va_copy_test, <<[
  +#include <stdlib.h>
  +#include <stdarg.h>
  +#include <string.h>
  +#define DO_VA_COPY(d, s) $1
  +void test(char *str, ...)
  +{
  +    va_list ap, ap2;
  +    int i;
  +    va_start(ap, str);
  +    DO_VA_COPY(ap2, ap);
  +    for (i = 1; i <= 9; i++) {
  +        int k = (int)va_arg(ap, int);
  +        if (k != i)
  +            abort();
  +    }
  +    DO_VA_COPY(ap, ap2);
  +    for (i = 1; i <= 9; i++) {
  +        int k = (int)va_arg(ap, int);
  +        if (k != i)
  +            abort();
  +    }
  +    va_end(ap);
  +}
  +int main(int argc, char *argv[])
  +{
  +    test("test", 1, 2, 3, 4, 5, 6, 7, 8, 9);
  +    exit(0);
  +}
  +]>>)
  +changequote([,])
  +
  +dnl #   test driver for va_copy() implementation
  +m4_define(__va_copy_check, [
  +    AH_VERBATIM($1,
  +[/* Predefined possible va_copy() implementation (id: $1) */
  +#define __VA_COPY_USE_$1(d, s) $2])
  +    if test ".$ac_cv_va_copy" = .; then
  +        AC_TRY_RUN(__va_copy_test($2), [ac_cv_va_copy="$1"])
  +    fi
  +])
  +
  +dnl #   Autoconf check for va_copy() implementation checking
  +AC_DEFUN(AC_CHECK_VA_COPY,[
  +  dnl #   provide Autoconf display check message
  +  AC_MSG_CHECKING(for va_copy() function)
  +  dnl #   check for various implementations in priorized sequence   
  +  AC_CACHE_VAL(ac_cv_va_copy, [
  +    ac_cv_va_copy=""
  +    dnl #   1. check for standardized C99 macro
  +    __va_copy_check(C99, [va_copy((d), (s))])
  +    dnl #   2. check for alternative/deprecated GCC macro
  +    __va_copy_check(GCM, [VA_COPY((d), (s))])
  +    dnl #   3. check for internal GCC macro (high-level define)
  +    __va_copy_check(GCH, [__va_copy((d), (s))])
  +    dnl #   4. check for internal GCC macro (built-in function)
  +    __va_copy_check(GCB, [__builtin_va_copy((d), (s))])
  +    dnl #   5. check for assignment approach (assuming va_list is a struct)
  +    __va_copy_check(ASS, [do { (d) = (s); } while (0)])
  +    dnl #   6. check for assignment approach (assuming va_list is a pointer)
  +    __va_copy_check(ASP, [do { *(d) = *(s); } while (0)])
  +    dnl #   7. check for memory copying approach (assuming va_list is a struct)
  +    __va_copy_check(CPS, [memcpy((void *)&(d), (void *)&(s)), sizeof((s))])
  +    dnl #   8. check for memory copying approach (assuming va_list is a pointer)
  +    __va_copy_check(CPP, [memcpy((void *)(d), (void *)(s)), sizeof(*(s))])
  +    if test ".$ac_cv_va_copy" = .; then
  +        AC_ERROR([no working implementation found])
  +    fi
  +  ])
  +  dnl #   optionally activate the fallback implementation
  +  if test ".$ac_cv_va_copy" = ".C99"; then
  +      AC_DEFINE(HAVE_VA_COPY, 1, [Define if va_copy() macro exists (and no fallback implementation is required)])
  +  fi
  +  dnl #   declare which fallback implementation to actually use
  +  AC_DEFINE_UNQUOTED([__VA_COPY_USE], [__VA_COPY_USE_$ac_cv_va_copy],
  +      [Define to id of used va_copy() implementation])
  +  dnl #   provide activation hook for fallback implementation
  +  AH_VERBATIM([__VA_COPY_ACTIVATION],
  +[/* Optional va_copy() implementation activation */
  +#ifndef HAVE_VA_COPY
  +#define va_copy(d, s) __VA_COPY_USE(d, s)
  +#endif
  +])
  +  dnl #   provide Autoconf display result message
  +  if test ".$ac_cv_va_copy" = ".C99"; then
  +      AC_MSG_RESULT([yes])
  +  else
  +      AC_MSG_RESULT([no (using fallback implementation)])
  +  fi
  +])
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/configure.ac
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 configure.ac
  --- ossp-pkg/ex/configure.ac	25 Mar 2004 19:01:42 -0000	1.8
  +++ ossp-pkg/ex/configure.ac	5 Apr 2004 14:44:21 -0000	1.9
  @@ -40,6 +40,7 @@
   AC_CHECK_DEBUGGING
   sinclude(libtool.m4)
   AC_PROG_LIBTOOL
  +AC_CHECK_VA_COPY
   
   AC_CONFIG_HEADERS(config.h)
   AC_CONFIG_FILES([Makefile ex-config])
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 devtool.conf
  --- ossp-pkg/ex/devtool.conf	19 Mar 2004 14:55:46 -0000	1.11
  +++ ossp-pkg/ex/devtool.conf	5 Apr 2004 14:44:21 -0000	1.12
  @@ -4,7 +4,7 @@
   
   %autogen
       @autogen shtool   1.6.2 "1.6.*" all
  -    @autogen libtool  1.5.2 "1.5*"
  +    @autogen libtool  1.5.4 "1.5*"
       @autogen autoconf 2.59  "2.5[4-9]*"
   
   %autoclean
  @@ -40,7 +40,7 @@
       echo "+++ rolling"
       V=`./shtool version -l txt -d short VERSION`
       ./shtool tarball -o ex-${V}.tar.gz -d ex-${V} -u ossp -g ex \
  -                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*,*.tar.gz,00TODO' -c 'gzip --best' .
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*,*.tar.gz,00TODO,*~' -c 'gzip --best' .
       ls -l ex-${V}.tar.gz
       echo "+++ testing"
       gunzip <ex-${V}.tar.gz | tar tvf -
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ts.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ts.c
  --- ossp-pkg/ex/ts.c	25 Mar 2004 19:01:45 -0000	1.6
  +++ ossp-pkg/ex/ts.c	5 Apr 2004 14:44:21 -0000	1.7
  @@ -1,11 +1,11 @@
   /*
  -**  TS - OSSP Test Suite Library
  +**  OSSP ts - Test Suite Library
   **  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   **  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
   **  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   **
  -**  This file is part of OSSP TS, a small test suite library which
  -**  can be found at http://www.ossp.org/pkg/ts/.
  +**  This file is part of OSSP ts, a small test suite library which
  +**  can be found at http://www.ossp.org/pkg/lib/ts/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  @@ -206,7 +206,7 @@
   
       if (format == NULL)
           return NULL;
  -    ap2 = ap;
  +    va_copy(ap2, ap);
       if ((n = ts_suite_mvxprintf(NULL, 0, format, ap)) == -1)
           return NULL;
       if ((buffer = (char *)malloc(n+1)) == NULL)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ts.h
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ts.h
  --- ossp-pkg/ex/ts.h	25 Mar 2004 19:01:45 -0000	1.4
  +++ ossp-pkg/ex/ts.h	5 Apr 2004 14:44:21 -0000	1.5
  @@ -1,11 +1,11 @@
   /*
  -**  TS - OSSP Test Suite Library
  +**  OSSP ts - Test Suite Library
   **  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   **  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
   **  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   **
  -**  This file is part of OSSP TS, a small test suite library which
  -**  can be found at http://www.ossp.org/pkg/ts/.
  +**  This file is part of OSSP ts, a small test suite library which
  +**  can be found at http://www.ossp.org/pkg/lib/ts/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  @@ .

From ossp-cvs-owner@ossp.org  Mon Apr  5 16:46:33 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7CEA37784F; Mon,  5 Apr 2004 16:46:33 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ex/ index.wml ossp...
Message-Id: <20040405144633.7CEA37784F@mail.ossp.org>
Date: Mon,  5 Apr 2004 16:46:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   05-Apr-2004 16:46:33
  Branch: HEAD                             Handle: 2004040515463201

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/ex     index.wml

  Log:
    release OSSP ex 1.0.4

  Summary:
    Revision    Changes     Path
    1.80        +1  -0      ossp-web/new/news.txt
    1.12        +2  -2      ossp-web/pkg/lib/ex/index.wml
    1.75        +1  -1      ossp-web/pkg/lib/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.79 -r1.80 news.txt
  --- ossp-web/new/news.txt	4 Apr 2004 10:50:56 -0000	1.79
  +++ ossp-web/new/news.txt	5 Apr 2004 14:46:32 -0000	1.80
  @@ -1,3 +1,4 @@
  +05-Apr-2004: Released L<OSSP ex> 1.0.4
   04-Apr-2004: Released L<OSSP val> 0.9.2
   04-Apr-2004: Released L<OSSP var> 1.1.0
   03-Apr-2004: Released L<OSSP ex> 1.0.3
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/ex/index.wml
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 index.wml
  --- ossp-web/pkg/lib/ex/index.wml	3 Apr 2004 11:58:09 -0000	1.11
  +++ ossp-web/pkg/lib/ex/index.wml	5 Apr 2004 14:46:33 -0000	1.12
  @@ -42,7 +42,7 @@
   <pkg_status
       name="ex" assign="rse"
   	genesis="Jan-2002"
  -    stable="1.0.3"   stable_date="03-Apr-2004"
  +    stable="1.0.4"   stable_date="05-Apr-2004"
       unstable="none"  unstable_date=""
   	done=100>
   
  @@ -53,7 +53,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/ex/
       directory=$(FTP_ROOT_DIR)/pkg/lib/ex/
       files="ex-*.tar.gz" 
  -	stable="ex-1.0.3.tar.gz" unstable="none">
  +	stable="ex-1.0.4.tar.gz" unstable="none">
   
   <h2>Donation</h2>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.74 -r1.75 index.wml
  --- ossp-web/pkg/lib/index.wml	4 Apr 2004 10:50:56 -0000	1.74
  +++ ossp-web/pkg/lib/index.wml	5 Apr 2004 14:46:32 -0000	1.75
  @@ -21,7 +21,7 @@
   			done=100 stable=1.3.0 unstable=none>
     <pkg_item name="ex" longname="OSSP ex" type="lib"
               desc="Exception Handling"
  -			done=100 stable=1.0.3 unstable=none>
  +			done=100 stable=1.0.4 unstable=none>
     <pkg_item name="sa" longname="OSSP sa" type="lib"
               desc="Socket Abstraction"
   			done=100 stable=1.2.0 unstable=none>
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr  7 09:55:03 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BF32B7782B; Wed,  7 Apr 2004 09:55:02 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog sh.common
Message-Id: <20040407075502.BF32B7782B@mail.ossp.org>
Date: Wed,  7 Apr 2004 09:55:02 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Apr-2004 09:55:02
  Branch: HEAD                             Handle: 2004040708550200

  Modified files:
    ossp-pkg/shtool         ChangeLog sh.common

  Log:
    Replace "tr 'x-' 'x_'" with "sed -e 's/-/_/g'" constructs
    because some tr(1) (at least Solaris' /usr/ucb/tr) go into endless
    loops on (incorrectly assumed) range constructs with no ends.
    
    Submitted by: Armin Wolfermann <aw@osn.de>

  Summary:
    Revision    Changes     Path
    1.198       +6  -1      ossp-pkg/shtool/ChangeLog
    1.23        +3  -3      ossp-pkg/shtool/sh.common
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.197 -r1.198 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	18 Feb 2004 09:55:01 -0000	1.197
  +++ ossp-pkg/shtool/ChangeLog	7 Apr 2004 07:55:02 -0000	1.198
  @@ -9,7 +9,12 @@
   
    ChangeLog
   
  - Changes between 1.6.2 and 2.0b1 (02-Nov-2002 to 18-Feb-2004):
  + Changes between 1.6.2 and 2.0b1 (02-Nov-2002 to 07-Apr-2004):
  +
  +   *) Replace "tr 'x-' 'x_'" with "sed -e 's/-/_/g'" constructs
  +      because some tr(1) (at least Solaris' /usr/ucb/tr) go into endless
  +      loops on (incorrectly assumed) range constructs with no ends.
  +      [Armin Wolfermann <aw@osn.de>]
   
      *) Fix typos in various files.
         [Thomas Lotterer <thomas@lotterer.net>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.common
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 sh.common
  --- ossp-pkg/shtool/sh.common	13 Dec 2003 21:23:55 -0000	1.22
  +++ ossp-pkg/shtool/sh.common	7 Apr 2004 07:55:02 -0000	1.23
  @@ -47,7 +47,7 @@
   
   #   parse option alias string
   eval `echo h:help,$opt_alias |\
  -      tr 'x-' 'x_' | sed -e 's/\([a-zA-Z0-9]\):\([^,]*\),*/opt_ALIAS_\2=\1;/g'`
  +      sed -e 's/-/_/g' -e 's/\([a-zA-Z0-9]\):\([^,]*\),*/opt_ALIAS_\2=\1;/g'`
   
   #   interate over argument line
   opt_PREV=''
  @@ -72,12 +72,12 @@
               --[a-zA-Z0-9]*=*)
                   eval `echo "x$1" |\
                         sed -e 's/^x--\([a-zA-Z0-9-]*\)=\(.*\)$/opt_OPT="\1";opt_ARG="\2"/'`
  -                opt_STR=`echo $opt_OPT | tr 'x-' 'x_'`
  +                opt_STR=`echo $opt_OPT | sed -e 's/-/_/g'`
                   eval "opt_OPT=\${opt_ALIAS_${opt_STR}-${opt_OPT}}"
                   ;;
               --[a-zA-Z0-9]*)
                   opt_OPT=`echo "x$1" | cut -c4-`
  -                opt_STR=`echo $opt_OPT | tr 'x-' 'x_'`
  +                opt_STR=`echo $opt_OPT | sed -e 's/-/_/g'`
                   eval "opt_OPT=\${opt_ALIAS_${opt_STR}-${opt_OPT}}"
                   opt_ARG=''
                   ;;
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr  7 09:55:20 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E1AAE7784F; Wed,  7 Apr 2004 09:55:19 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ README VERSION shtool.spec
Message-Id: <20040407075519.E1AAE7784F@mail.ossp.org>
Date: Wed,  7 Apr 2004 09:55:19 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Apr-2004 09:55:19
  Branch: HEAD                             Handle: 2004040708551900

  Modified files:
    ossp-pkg/shtool         README VERSION shtool.spec

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.103       +1  -1      ossp-pkg/shtool/README
    1.78        +1  -1      ossp-pkg/shtool/VERSION
    1.21        +1  -1      ossp-pkg/shtool/shtool.spec
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/README
  ============================================================================
  $ cvs diff -u -r1.102 -r1.103 README
  --- ossp-pkg/shtool/README	18 Feb 2004 09:55:01 -0000	1.102
  +++ ossp-pkg/shtool/README	7 Apr 2004 07:55:19 -0000	1.103
  @@ -10,7 +10,7 @@
     http://www.gnu.org/software/shtool/
     ftp://ftp.gnu.org/gnu/shtool/
   
  -  Version 2.0b1 (18-Feb-2004)
  +  Version 2.0b2 (07-Apr-2004)
   
     The GNU shtool program is a compilation of small but very stable and
     portable shell scripts into a single shell tool. All ingredients
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/VERSION
  ============================================================================
  $ cvs diff -u -r1.77 -r1.78 VERSION
  --- ossp-pkg/shtool/VERSION	18 Feb 2004 09:55:01 -0000	1.77
  +++ ossp-pkg/shtool/VERSION	7 Apr 2004 07:55:19 -0000	1.78
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for GNU shtool (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is GNU shtool, Version 2.0b1 (18-Feb-2004)
  +  This is GNU shtool, Version 2.0b2 (07-Apr-2004)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtool.spec
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 shtool.spec
  --- ossp-pkg/shtool/shtool.spec	18 Feb 2004 09:55:01 -0000	1.20
  +++ ossp-pkg/shtool/shtool.spec	7 Apr 2004 07:55:19 -0000	1.21
  @@ -30,7 +30,7 @@
   %define prefix /usr/local
   %endif
   
  -%define ver 2.0b1
  +%define ver 2.0b2
   %define rel 0
   
   Name:       shtool
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr  7 09:58:14 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C6CCD7782B; Wed,  7 Apr 2004 09:58:14 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog
Message-Id: <20040407075814.C6CCD7782B@mail.ossp.org>
Date: Wed,  7 Apr 2004 09:58:14 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Apr-2004 09:58:14
  Branch: HEAD                             Handle: 2004040708581400

  Modified files:
    ossp-pkg/shtool         ChangeLog

  Log:
    fix ChangeLog

  Summary:
    Revision    Changes     Path
    1.199       +3  -1      ossp-pkg/shtool/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.198 -r1.199 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	7 Apr 2004 07:55:02 -0000	1.198
  +++ ossp-pkg/shtool/ChangeLog	7 Apr 2004 07:58:14 -0000	1.199
  @@ -9,12 +9,14 @@
   
    ChangeLog
   
  - Changes between 1.6.2 and 2.0b1 (02-Nov-2002 to 07-Apr-2004):
  + Changes between 2.0b1 and 2.0b2 (17-Feb-2004 to 07-Apr-2004):
   
      *) Replace "tr 'x-' 'x_'" with "sed -e 's/-/_/g'" constructs
         because some tr(1) (at least Solaris' /usr/ucb/tr) go into endless
         loops on (incorrectly assumed) range constructs with no ends.
         [Armin Wolfermann <aw@osn.de>]
  +
  + Changes between 1.6.2 and 2.0b1 (02-Nov-2002 to 17-Feb-2004):
   
      *) Fix typos in various files.
         [Thomas Lotterer <thomas@lotterer.net>]
  @@ .

From ossp-cvs-owner@ossp.org  Mon Apr 19 15:27:36 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A4475778CA; Mon, 19 Apr 2004 15:27:36 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-doc/ accounts.txt
Message-Id: <20040419132736.A4475778CA@mail.ossp.org>
Date: Mon, 19 Apr 2004 15:27:36 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-Apr-2004 15:27:36
  Branch: HEAD                             Handle: 2004041914273600

  Modified files:
    ossp-pkg/as/as-doc      accounts.txt

  Log:
    add handover project accounts

  Summary:
    Revision    Changes     Path
    1.45        +10 -1      ossp-pkg/as/as-doc/accounts.txt
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-doc/accounts.txt
  ============================================================================
  $ cvs diff -u -r1.44 -r1.45 accounts.txt
  --- ossp-pkg/as/as-doc/accounts.txt	5 Mar 2004 10:52:52 -0000	1.44
  +++ ossp-pkg/as/as-doc/accounts.txt	19 Apr 2004 13:27:36 -0000	1.45
  @@ -58,7 +58,16 @@
   R /de/is/com/sysadm/extern/maintainance    # [E] System Administration, External, Maintainance
   
   #   Projects
  -R /de/is/prj/issc                          # [I] Project IS Setup Consolidation
  +R /de/is/prj/issc                         # [I] Project IS Setup Consolidation
  +R /de/is/prj/handover                     # [I] Server Handover Project
  +R /de/is/prj/handover/communication       # [I] Server Handover Project: Communication
  +R /de/is/prj/handover/preparation         # [I] Server Handover Project: Preparation
  +R /de/is/prj/handover/evaluation          # [I] Server Handover Project: Evaluation
  +R /de/is/prj/handover/development         # [I] Server Handover Project: Development
  +R /de/is/prj/handover/implementation      # [I] Server Handover Project: Implementation
  +R /de/is/prj/handover/troubleshooting     # [I] Server Handover Project: Troubleshooting
  +R /de/is/prj/handover/documentation       # [I] Server Handover Project: Documentation
  +R /de/is/prj/handover/agreement           # [I] Server Handover Project: Server Agreements
   
   ##
   ##  C&W DE, Combined Group (New Listings)
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr 21 14:02:14 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EC16F778E7; Wed, 21 Apr 2004 14:02:13 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ l2_ut_sa.ac l2_ut_sa.c l2_ut_sa.h
Message-Id: <20040421120213.EC16F778E7@mail.ossp.org>
Date: Wed, 21 Apr 2004 14:02:13 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   21-Apr-2004 14:02:13
  Branch: HEAD                             Handle: 2004042113021200

  Modified files:
    ossp-pkg/l2             l2_ut_sa.ac l2_ut_sa.c l2_ut_sa.h

  Log:
    import latest OSSP sa with changes around restarting interrupted
    system calls

  Summary:
    Revision    Changes     Path
    1.9         +3  -3      ossp-pkg/l2/l2_ut_sa.ac
    1.25        +74 -57     ossp-pkg/l2/l2_ut_sa.c
    1.21        +3  -3      ossp-pkg/l2/l2_ut_sa.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_sa.ac
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 l2_ut_sa.ac
  --- ossp-pkg/l2/l2_ut_sa.ac	26 Mar 2004 17:14:48 -0000	1.8
  +++ ossp-pkg/l2/l2_ut_sa.ac	21 Apr 2004 12:02:12 -0000	1.9
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP sa - Socket Abstraction
  -dnl ##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2001-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   dnl ##
   dnl ##  This file is part of OSSP sa, a socket abstraction library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/sa/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_sa.c
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 l2_ut_sa.c
  --- ossp-pkg/l2/l2_ut_sa.c	2 Apr 2004 12:27:32 -0000	1.24
  +++ ossp-pkg/l2/l2_ut_sa.c	21 Apr 2004 12:02:12 -0000	1.25
  @@ -1,8 +1,8 @@
   /*
   **  OSSP sa - Socket Abstraction
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP sa, a socket abstraction library which
   **  can be found at http://www.ossp.org/pkg/lib/sa/.
  @@ -1452,6 +1452,7 @@
       fd_set rset, wset;
       socklen_t len;
       sa_rc_t rv;
  +    struct timeval *tv;
   
       /* argument sanity check(s) */
       if (sa == NULL || raddr == NULL)
  @@ -1466,72 +1467,88 @@
           if ((rv = sa_socket_init(sa, raddr->nFamily)) != SA_OK)
               return SA_RC(rv);
   
  +    /* prepare return code decision */
       rv = SA_OK;
  -    if (SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_CONNECT])) {
  -        /* standard/non-timeout-aware connect operation */
  -        if (SA_SC_CALL_3(sa, connect, sa->fdSocket, raddr->saBuf, raddr->slBuf) < 0)
  -            rv = SA_ERR_SYS;
  -    }
  -    else {
  -        /* emulated/timeout-aware connect operation */
  -        error = 0;
  +    error = 0;
   
  -        /* temporarily switch underlying socket to non-blocking mode */
  +    /* temporarily switch underlying socket to non-blocking mode
  +       (necessary under timeout-aware operation only) */
  +    flags = 0;
  +    if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_CONNECT])) {
           flags = fcntl(sa->fdSocket, F_GETFL, 0);
           (void)fcntl(sa->fdSocket, F_SETFL, flags|O_NONBLOCK);
  +    }
   
  -        /* perform the connect operation */
  -        if ((n = SA_SC_CALL_3(sa, connect, sa->fdSocket, raddr->saBuf, raddr->slBuf)) < 0) {
  -            if (errno != EINPROGRESS) {
  -                error = errno;
  -                goto done;
  -            }
  -        }
  -
  -        /* ok if connect completed immediately */
  -        if (n == 0)
  -            goto done;
  -
  -        /* wait for read or write possibility */
  -        FD_ZERO(&rset);
  -        FD_ZERO(&wset);
  -        FD_SET(sa->fdSocket, &rset);
  -        FD_SET(sa->fdSocket, &wset);
  -        do {
  -            n = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &rset, &wset, NULL,
  -                             &sa->tvTimeout[SA_TIMEOUT_CONNECT]);
  -        } while (n == -1 && errno == EINTR);
  -
  -        /* decide on return semantic */
  -        if (n < 0) {
  +    /* perform the connect operation */
  +    if ((n = SA_SC_CALL_3(sa, connect, sa->fdSocket, raddr->saBuf, raddr->slBuf)) < 0) {
  +        if (errno != EINTR && errno != EINPROGRESS) {
  +            /* we have to perform the following post-processing under
  +               EINPROGRESS anway, but actually also for EINTR according
  +               to Unix Network Programming, volume 1, section 5.9, W.
  +               Richard Stevens: "What we are doing [] is restarting
  +               the interrupted system call ourself. This is fine for
  +               accept, along with the functions such as read, write,
  +               select and open. But there is one function that we cannot
  +               restart ourself: connect. If this function returns EINTR,
  +               we cannot call it again, as doing so will return an
  +               immediate error. When connect is interrupted by a caught
  +               signal and is not automatically restarted, we must call
  +               select to wait for the connection to complete, as we
  +               describe in section 15.3." */
               error = errno;
               goto done;
           }
  -        else if (n == 0) {
  -            (void)close(sa->fdSocket); /* stop TCP three-way handshake */
  -            sa->fdSocket = -1;
  -            rv = SA_ERR_TMT;
  -            goto done;
  -        }
  -
  -        /* fetch pending error */
  -        len = (socklen_t)sizeof(error);
  -        if (getsockopt(sa->fdSocket, SOL_SOCKET, SO_ERROR, (void *)&error, &len) < 0)
  -            error = errno;
  -
  -        done:
  +    }
   
  -        /* reset socket flags */
  +    /* ok if connect completed immediately */
  +    if (n == 0)
  +        goto done;
  +
  +    /* wait for read or write possibility */
  +    FD_ZERO(&rset);
  +    FD_ZERO(&wset);
  +    FD_SET(sa->fdSocket, &rset);
  +    FD_SET(sa->fdSocket, &wset);
  +    if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_CONNECT]))
  +        tv = &sa->tvTimeout[SA_TIMEOUT_CONNECT];
  +    else
  +        tv = NULL;
  +    do {
  +        n = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &rset, &wset, NULL, tv);
  +    } while (n == -1 && errno == EINTR);
  +
  +    /* decide on return semantic */
  +    if (n < 0) {
  +        error = errno;
  +        goto done;
  +    }
  +    else if (n == 0) {
  +        (void)close(sa->fdSocket); /* stop TCP three-way handshake */
  +        sa->fdSocket = -1;
  +        rv = SA_ERR_TMT;
  +        goto done;
  +    }
  +
  +    /* fetch pending error */
  +    len = (socklen_t)sizeof(error);
  +    if (getsockopt(sa->fdSocket, SOL_SOCKET, SO_ERROR, (void *)&error, &len) < 0)
  +        error = errno;
  +
  +    done:
  +
  +    /* reset socket flags
  +       (necessary under timeout-aware operation only) */
  +    if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_CONNECT]))
           (void)fcntl(sa->fdSocket, F_SETFL, flags);
   
  -        /* optionally set errno */
  -        if (error != 0) {
  -            (void)close(sa->fdSocket); /* just in case */
  -            sa->fdSocket = -1;
  -            errno = error;
  -            rv = SA_ERR_SYS;
  -        }
  +    /* optionally set errno */
  +    if (error != 0) {
  +        (void)close(sa->fdSocket); /* just in case */
  +        sa->fdSocket = -1;
  +        errno = error;
  +        rv = SA_ERR_SYS;
       }
  +
       return SA_RC(rv);
   }
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_sa.h
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 l2_ut_sa.h
  --- ossp-pkg/l2/l2_ut_sa.h	26 Mar 2004 17:14:48 -0000	1.20
  +++ ossp-pkg/l2/l2_ut_sa.h	21 Apr 2004 12:02:12 -0000	1.21
  @@ -1,8 +1,8 @@
   /*
   **  OSSP sa - Socket Abstraction
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP sa, a socket abstraction library which
   **  can be found at http://www.ossp.org/pkg/lib/sa/.
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr 21 14:19:33 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4C971778DF; Wed, 21 Apr 2004 14:19:33 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ ChangeLog README l2_version.c
Message-Id: <20040421121933.4C971778DF@mail.ossp.org>
Date: Wed, 21 Apr 2004 14:19:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   21-Apr-2004 14:19:33
  Branch: HEAD                             Handle: 2004042113193200

  Modified files:
    ossp-pkg/l2             ChangeLog README l2_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.12        +5  -0      ossp-pkg/l2/ChangeLog
    1.16        +1  -1      ossp-pkg/l2/README
    1.14        +9  -9      ossp-pkg/l2/l2_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 ChangeLog
  --- ossp-pkg/l2/ChangeLog	10 Nov 2003 19:21:04 -0000	1.11
  +++ ossp-pkg/l2/ChangeLog	21 Apr 2004 12:19:32 -0000	1.12
  @@ -9,6 +9,11 @@
     ChangeLog
     =========
   
  +  Changes between 0.9.5 and 0.9.6 (10-Nov-2003 to 21-Apr-2004)
  +
  +    *) create devtool.conf %import and import OSSP sa 1.2.0
  +       [Thomas Lotterer <thomas@lotterer.net>]
  +
     Changes between 0.9.4 and 0.9.5 (25-Sep-2003 to 10-Nov-2003)
   
       *) remove log0...4 macros
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/README
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 README
  --- ossp-pkg/l2/README	17 Feb 2004 09:21:04 -0000	1.15
  +++ ossp-pkg/l2/README	21 Apr 2004 12:19:32 -0000	1.16
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_|_____|
   
     OSSP l2 -- Flexible Logging
  -  Version 0.9.5 (10-Nov-2003)
  +  Version 0.9.6 (21-Apr-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_version.c
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 l2_version.c
  --- ossp-pkg/l2/l2_version.c	10 Nov 2003 15:29:24 -0000	1.13
  +++ ossp-pkg/l2/l2_version.c	21 Apr 2004 12:19:32 -0000	1.14
  @@ -8,7 +8,7 @@
   #ifndef _L2_VERSION_C_
   #define _L2_VERSION_C_
   
  -#define L2_VERSION 0x009205
  +#define L2_VERSION 0x009206
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _L2_VERSION_C_AS_HEADER_
   
   l2_version_t l2_version = {
  -    0x009205,
  -    "0.9.5",
  -    "0.9.5 (10-Nov-2003)",
  -    "This is OSSP l2, Version 0.9.5 (10-Nov-2003)",
  -    "OSSP l2 0.9.5 (10-Nov-2003)",
  -    "OSSP l2/0.9.5",
  -    "@(#)OSSP l2 0.9.5 (10-Nov-2003)",
  -    "$Id: l2_version.c,v 1.13 2003/11/10 15:29:24 thl Exp $"
  +    0x009206,
  +    "0.9.6",
  +    "0.9.6 (21-Apr-2004)",
  +    "This is OSSP l2, Version 0.9.6 (21-Apr-2004)",
  +    "OSSP l2 0.9.6 (21-Apr-2004)",
  +    "OSSP l2/0.9.6",
  +    "@(#)OSSP l2 0.9.6 (21-Apr-2004)",
  +    "$Id: l2_version.c,v 1.14 2004/04/21 12:19:32 thl Exp $"
   };
   
   #endif /* _L2_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr 21 15:44:06 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A6715778F3; Wed, 21 Apr 2004 15:44:06 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pcre/ ChangeLog.OSSP Makefile.in
Message-Id: <20040421134406.A6715778F3@mail.ossp.org>
Date: Wed, 21 Apr 2004 15:44:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   21-Apr-2004 15:44:06
  Branch: HEAD                             Handle: 2004042114440600

  Modified files:
    ossp-pkg/pcre           ChangeLog.OSSP Makefile.in

  Log:
    disable provisioning of embedded POSIX regex library functions
    regcomp, regerror, regexec and regfree

  Summary:
    Revision    Changes     Path
    1.20        +13 -0      ossp-pkg/pcre/ChangeLog.OSSP
    1.9         +1  -1      ossp-pkg/pcre/Makefile.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pcre/ChangeLog.OSSP
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 ChangeLog.OSSP
  --- ossp-pkg/pcre/ChangeLog.OSSP	11 Jan 2002 10:19:12 -0000	1.19
  +++ ossp-pkg/pcre/ChangeLog.OSSP	21 Apr 2004 13:44:06 -0000	1.20
  @@ -2,6 +2,19 @@
    OSSP ChangeLog for PCRE
    =======================
   
  +  *) Remove libpcreposix.la target from Makefile.in to disable
  +     provisioning of embedded POSIX regex library functions regcomp,
  +     regerror, regexec and regfree. OSSP petidomo was a victim as it
  +     expects working [:alnum:] and [:space:] constructs which do not
  +     work with the fsl regex but do with OS regex. It turned out that
  +     OpenPKG sendmail package was also broken due to fsl pcre symbol
  +     leakage. Inspired by http://cvs.openpkg.org/chngview?cn=15298
  +     [Thomas Lotterer <thomas@lotterer.net>]
  +
  +  *) Remove useless pcre_test target from Makefile.in
  +     Excerpt from http://cvs.openpkg.org/chngview?cn=13354
  +     [Thomas Lotterer <thomas@lotterer.net>]
  +
     *) Upgraded to PCRE 3.9
     *) Upgraded to PCRE 3.8
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pcre/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 Makefile.in
  --- ossp-pkg/pcre/Makefile.in	7 Sep 2002 19:58:55 -0000	1.8
  +++ ossp-pkg/pcre/Makefile.in	21 Apr 2004 13:44:06 -0000	1.9
  @@ -22,7 +22,7 @@
   includedir  = @includedir@
   mandir      = @mandir@
   
  -all: libpcre.la libpcreposix.la pcre_test
  +all: libpcre.la
   
   .SUFFIXES:
   .SUFFIXES: .c .o .lo
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr 21 17:07:42 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 925B4778F1; Wed, 21 Apr 2004 17:07:42 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog sh.platform
Message-Id: <20040421150742.925B4778F1@mail.ossp.org>
Date: Wed, 21 Apr 2004 17:07:42 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Apr-2004 17:07:42
  Branch: HEAD                             Handle: 2004042116074100

  Modified files:
    ossp-pkg/shtool         ChangeLog sh.platform

  Log:
    Port "sh.platform" to full POSIX 1003.1-2001 (SUSv3) compliance by
    replacing "head -1" with "sed -e 'q'" and "tail -1" with "sed -n -e '$p'".

  Summary:
    Revision    Changes     Path
    1.200       +6  -0      ossp-pkg/shtool/ChangeLog
    1.6         +3  -3      ossp-pkg/shtool/sh.platform
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.199 -r1.200 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	7 Apr 2004 07:58:14 -0000	1.199
  +++ ossp-pkg/shtool/ChangeLog	21 Apr 2004 15:07:41 -0000	1.200
  @@ -9,6 +9,12 @@
   
    ChangeLog
   
  + Changes between 2.0b2 and 2.0b3 (07-Apr-2004 to 21-Apr-2004):
  +
  +   *) Port "sh.platform" to full POSIX 1003.1-2001 (SUSv3) compliance by
  +      replacing "head -1" with "sed -e 'q'" and "tail -1" with "sed -n -e '$p'".
  +      [Ralf S. Engelschall]
  +
    Changes between 2.0b1 and 2.0b2 (17-Feb-2004 to 07-Apr-2004):
   
      *) Replace "tr 'x-' 'x_'" with "sed -e 's/-/_/g'" constructs
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.platform
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 sh.platform
  --- ossp-pkg/shtool/sh.platform	12 Feb 2004 16:06:27 -0000	1.5
  +++ ossp-pkg/shtool/sh.platform	21 Apr 2004 15:07:41 -0000	1.6
  @@ -200,7 +200,7 @@
           v_kern=`echo "${UNAME_RELEASE}" |\
               sed -e 's/^\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/'`
           v_libc=`(strings /lib/libc.so.* | grep '^GLIBC_' | sed -e 's/^GLIBC_//' |\
  -            sort -n | tail -1 | sed -e 's/^\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/') 2>/dev/null`
  +            sort -n | sed -n -e '$p' | sed -e 's/^\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/') 2>/dev/null`
           ST="GNU/<Linux >${v_libc}/<${v_kern}>"
           if [ -f /etc/lsb-release ]; then
               eval `( . /etc/lsb-release
  @@ -220,7 +220,7 @@
                   [ ".${tagfile}" = .x ] && continue
                   [ ! -f "/etc/${tagfile}" ] && continue
                   n=`echo ${tagfile} | sed -e 's/[_-]release$//' -e 's/[_-]version$//'`
  -                v=`(grep VERSION /etc/${tagfile}; cat /etc/${tagfile}) | grep '[0-9]' | head -1 |\
  +                v=`(grep VERSION /etc/${tagfile}; cat /etc/${tagfile}) | grep '[0-9]' | sed -e 'q' |\
                      sed -e 's/^/#/' \
                          -e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' \
                          -e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' \
  @@ -379,7 +379,7 @@
               alpha ) AP="Alpha" ;;
           esac
           alpha_type=`(/usr/sbin/psrinfo -v) 2>/dev/null |\
  -            sed -n -e 's/^.*The alpha \([^ ][^ ]*\).*processor.*$/\1/p' | head -n 1`
  +            sed -n -e 's/^.*The alpha \([^ ][^ ]*\).*processor.*$/\1/p' | sed -e 'q'`
           AT="${AP}${alpha_type}"
           AC="${AP}"
           #   determine system
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr 22 08:56:29 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E1757778FC; Thu, 22 Apr 2004 08:56:28 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvsfusion/ 00BRAINSTORM 00README RCS.pm cvsfusion...
Message-Id: <20040422065628.E1757778FC@mail.ossp.org>
Date: Thu, 22 Apr 2004 08:56:28 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Apr-2004 08:56:28
  Branch: HEAD                             Handle: 2004042207562800

  Added files:
    ossp-pkg/cvsfusion      00BRAINSTORM 00README RCS.pm cvsfusion.pl

  Log:
    start OSSP cvsfusion

  Summary:
    Revision    Changes     Path
    1.1         +49 -0      ossp-pkg/cvsfusion/00BRAINSTORM
    1.1         +2  -0      ossp-pkg/cvsfusion/00README
    1.1         +91 -0      ossp-pkg/cvsfusion/RCS.pm
    1.1         +150 -0     ossp-pkg/cvsfusion/cvsfusion.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cvsfusion/00BRAINSTORM
  ============================================================================
  $ cvs diff -u -r0 -r1.1 00BRAINSTORM
  --- /dev/null	2004-04-22 08:56:28.000000000 +0200
  +++ 00BRAINSTORM	2004-04-22 08:56:28.000000000 +0200
  @@ -0,0 +1,49 @@
  +
  +
  +##
  +##  cvsfusion [-R/path/to/rcs/bin] [-D/path/to/diff/bin] [-t /tmp] -rOPENPKG:1.1.42 -dopenpkg-src -dopenpkg-re /path/to/vendor/cvs /path/to/local/cvs
  +##
  +
  +foreach dir in -d {
  +    foreach file in $vendorcvsroot/$dir {
  +        #   remove old attachment
  +        if (exists $localcvsroot/$file) {
  +            cp $localcvsroot/$file $localcvsroot/$file.new
  +            rcs -obranch:: $localcvsroot/$file.new
  +        }
  +        else {
  +            create $localcvsroot/Attic/$file.new (dead, 1.1, /dev/null)
  +        }
  +
  +        #   load both into internal structure
  +        load $localcvsroot/$file.new
  +        load $vendorcvsroot/$dir/$file
  +
  +        #   turn trunk into regular branch
  +        $prev = -1;
  +        $curr = admin->head();
  +        while (no more $curr) {
  +            getrev($curr, /tmp/curr); # co
  +            $prev = $curr->next();
  +            if (exists $prev) {
  +                getrev($prev, /tmp/prev); # co
  +            }
  +            else {
  +                my $localhead = local->head();
  +                getrev($localhead, /tmp/prev); # co
  +            }
  +            $newdiff = `diff -n /tmp/prev /tmp/curr`;
  +            store($curr, $newdiff);
  +            system("cp /tmp/prev /tmp/curr");
  +            $curr = $prev;
  +        }
  +
  +        #   prefix revisions with branch number
  +
  +        #   merge target into local structures
  +
  +        #   store local structures onto filesystem
  +
  +    }
  +}
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cvsfusion/00README
  ============================================================================
  $ cvs diff -u -r0 -r1.1 00README
  --- /dev/null	2004-04-22 08:56:28.000000000 +0200
  +++ 00README	2004-04-22 08:56:28.000000000 +0200
  @@ -0,0 +1,2 @@
  +
  +  CVSFusion --
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cvsfusion/RCS.pm
  ============================================================================
  $ cvs diff -u -r0 -r1.1 RCS.pm
  --- /dev/null	2004-04-22 08:56:28.000000000 +0200
  +++ RCS.pm	2004-04-22 08:56:28.000000000 +0200
  @@ -0,0 +1,91 @@
  +##
  +##  OSSP cvsfusion - CVS Repository Fusion
  +##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004 Cable & Wireless <http://www.cw.com/>
  +##
  +##  This file is part of OSSP cvsfusion, a CVS repository fusion
  +##  utility which can be found at http://www.ossp.org/pkg/tool/cvsfusion/.
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  RCS.pm: RCS file handling
  +##
  +
  +package RCS;
  +
  +require 5;
  +require Exporter;
  +
  +@ISA       = qw(Exporter);
  +@EXPORT_OK = qw(new destroy DESTROY dump);
  +
  +sub new ($) {
  +    my $proto = shift;
  +    my $class = ref($proto) || $proto;
  +    my $self = {};
  +    bless ($self, $class);
  +
  +    $self->{'prog-rcs'}  = "";
  +    $self->{'prog-diff'} = "";
  +
  +    return $self;
  +}
  +
  +sub destroy ($) {
  +    my $self = shift;
  +    return;
  +}
  +
  +sub DESTROY ($) {
  +    my $self = shift;
  +    $self->destroy;
  +    return;
  +}
  +
  +sub dump ($;$) {
  +    my $self = shift;
  +    my $name = shift || "xxx";
  +    eval {
  +        use Data::Dumper;
  +    };
  +    my $d = new Data::Dumper ([$self], [$name]);
  +    $d->Indent(1);
  +    $d->Purity(1);
  +    $d->Terse(0);
  +    $d->Deepcopy(0);
  +    my $dump = "# " . ref($self) . " object dump:\n";
  +    $dump .= $d->Dump();
  +    return $dump;
  +}
  +
  +__END__
  +
  +=pod
  +
  +=head1 NAME
  +
  +B<RCS> -- Revision Control System (RCS) File Handling
  +
  +=head1 DESCRIPTION
  +
  +...FIXME...
  +
  +=cut
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cvsfusion/cvsfusion.pl
  ============================================================================
  $ cvs diff -u -r0 -r1.1 cvsfusion.pl
  --- /dev/null	2004-04-22 08:56:28.000000000 +0200
  +++ cvsfusion.pl	2004-04-22 08:56:28.000000000 +0200
  @@ -0,0 +1,150 @@
  +#!/bin/sh -- # -*- perl -*- -p
  +eval 'exec perl -wS $0 ${1+"$@"}'
  +    if $running_under_some_shell;
  +##
  +##  OSSP cvsfusion - CVS Repository Fusion
  +##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004 Cable & Wireless <http://www.cw.com/>
  +##
  +##  This file is part of OSSP cvsfusion, a CVS repository fusion
  +##  utility which can be found at http://www.ossp.org/pkg/tool/cvsfusion/.
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  cvsfusion.pl: main program
  +##
  +
  +require 5;
  +use strict;
  +use warnings;
  +use lib ".";
  +use Getopt::Long;
  +use IO::File;
  +use RCS;
  +
  +#   program information
  +my $prog = {
  +    'name' => "cvsfusion",
  +    'vers' => "0.0.1",
  +    'date' => "20-Apr-2004"
  +};
  +
  +#   program parameters (defaults)
  +my $opt = {
  +    'version'        => 0,
  +    'verbose'        => 0,
  +    'help'           => 0,
  +    'tmpdir'         => ($ENV{TMPDIR} || "/tmp") . "/" . $prog->{'name'},
  +    'cvsroot-source' => '',
  +    'cvsroot-target' => '',
  +    'cvs-branch'     => '',
  +    'cvs-module'     => [],
  +    'prog-rcs'       => "rcs",
  +    'prog-diff'      => "diff"
  +};
  +
  +#   exception handling support
  +$SIG{__DIE__} = sub {
  +    my ($err) = @_;
  +    $err =~ s|\s+at\s+.*||s if (not $opt->{'verbose'});
  +    print STDERR $prog->{'name'} . ":ERROR: $err ". ($! ? "($!)" : "") . "\n";
  +    exit(1);
  +};
  +
  +#   command line parsing
  +Getopt::Long::Configure("bundling");
  +my $result = GetOptions(
  +    'V|version'           => \$opt->{'version'},
  +    'v|verbose'           => \$opt->{'verbose'},
  +    'h|help'              => \$opt->{'help'},
  +    't|tmpdir=s'          => \$opt->{'tmpdir'},
  +    'f|cvsroot-source=s'  => \$opt->{'cvsroot-source'},
  +    'l|cvsroot-target=s'  => \$opt->{'cvsroot-target'},
  +    'b|cvs-branch=s'      => \$opt->{'cvs-branch'},
  +    'm|cvs-module=s@'     =>  $opt->{'cvs-module'},
  +    'R|prog-rcs=s'        => \$opt->{'prog-rcs'},
  +    'D|prog-diff=s'       => \$opt->{'prog-diff'},
  +) || die "option parsing failed";
  +if ($opt->{-help}) {
  +    print "Usage: ".$prog->{'name'}." [options]\n" .
  +          "Available options:\n" .
  +          " -V,--version             print program version\n" .
  +          " -v,--verbose             enable verbose run-time mode\n" .
  +          " -h,--help                print out this usage page\n" .
  +          " -t,--tmpdir=DIR          filesystem path to temporary directory\n" .
  +          " -f,--cvsroot-source=DIR  filesystem path to source CVS repository\n" .
  +          " -l,--cvsroot-target=DIR  filesystem path to target CVS repository\n" .
  +          " -b,--cvs-branch=TAG:REV  selects the CVS branch tag and revision to use\n" .
  +          " -m,--cvs-module=SUBDIR   selects the CVS repository module(s)\n" .
  +          " -R,--prog-rcs=FILE       filesystem path to rcs(1) program\n" .
  +          " -D,--prog-diff=FILE      filesystem path to diff(1) program\n";
  +    exit(0);
  +}
  +if ($opt->{-version}) {
  +    print "OSSP ".$prog->{'name'}." ".$prog->{'vers'}." (".$prog->{'date'}.")\n";
  +    exit(0);
  +}
  +
  +#   verbose message printing
  +sub msg_verbose {
  +    my ($msg) = @_;
  +    print STDERR "$msg\n" if ($opt->{'verbose'});
  +}
  +
  +#   warning message printing
  +sub msg_warning {
  +    my ($msg) = @_;
  +    print STDERR $prog->{'name'}.":WARNING: $msg\n";
  +}
  +
  +#   error message printing
  +sub msg_error { 
  +    my ($msg) = @_;
  +    print STDERR $prog->{'name'}.":ERROR: $msg\n";
  +}
  +
  +__END__
  +
  +=pod
  +
  +=head1 NAME
  +
  +B<cvsfusion> - CVS Repository Fusion
  +
  +=head1 SYNOPSIS
  +
  +B<cvsfusion>
  +[B<--verbose>]
  +[B<--tmpdir=>I<dir>]
  +[B<--cvsroot-source=>I<dir>]
  +[B<--cvsroot-target=>I<dir>]
  +[B<--cvs-branch=>I<tag>B<:>I<rev>]
  +[B<--cvs-module=>I<subdir>]
  +[B<--prog-rcs=>I<file>]
  +[B<--prog-diff=>I<file>]
  +
  +B<cvsfusion>
  +[--version]
  +[--help]
  +
  +=head1 DESCRIPTION
  +
  +=cut
  +
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr 22 08:59:26 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5AA7C7790A; Thu, 22 Apr 2004 08:59:26 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT/ modules
Message-Id: <20040422065926.5AA7C7790A@mail.ossp.org>
Date: Thu, 22 Apr 2004 08:59:26 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: CVSROOT                          Date:   22-Apr-2004 08:59:26
  Branch: HEAD                             Handle: 2004042207592500

  Modified files:
    CVSROOT                 modules

  Log:
    add cvsfusion

  Summary:
    Revision    Changes     Path
    1.70        +1  -0      CVSROOT/modules
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: CVSROOT/modules
  ============================================================================
  $ cvs diff -u -r1.69 -r1.70 modules
  --- CVSROOT/modules	14 Jan 2004 12:48:11 -0000	1.69
  +++ CVSROOT/modules	22 Apr 2004 06:59:25 -0000	1.70
  @@ -102,6 +102,7 @@
   mct             ossp-pkg/mct
   xmldb           ossp-pkg/xmldb
   snmpdx          ossp-pkg/snmpdx
  +cvsfusion       ossp-pkg/cvsfusion
   
   #   the OSSP applications (third-party)
   cvs             ossp-pkg/cvs
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr 22 11:32:52 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EDBD27790A; Thu, 22 Apr 2004 11:32:51 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ ChangeLog configure.ac ossp-pkg/pcre/ Change...
Message-Id: <20040422093251.EDBD27790A@mail.ossp.org>
Date: Thu, 22 Apr 2004 11:32:51 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   22-Apr-2004 11:32:51
  Branch: HEAD                             Handle: 2004042210325001

  Modified files:
    ossp-pkg/fsl            ChangeLog configure.ac
    ossp-pkg/pcre           ChangeLog.OSSP Makefile.in pcre.h

  Log:
    fix pcre name space dirt, leakage, collission; pick up that new
    feature in fsl

  Summary:
    Revision    Changes     Path
    1.29        +10 -1      ossp-pkg/fsl/ChangeLog
    1.19        +3  -1      ossp-pkg/fsl/configure.ac
    1.21        +2  -0      ossp-pkg/pcre/ChangeLog.OSSP
    1.10        +4  -3      ossp-pkg/pcre/Makefile.in
    1.10        +25 -0      ossp-pkg/pcre/pcre.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 ChangeLog
  --- ossp-pkg/fsl/ChangeLog	19 Mar 2004 22:36:07 -0000	1.28
  +++ ossp-pkg/fsl/ChangeLog	22 Apr 2004 09:32:50 -0000	1.29
  @@ -8,7 +8,16 @@
   
     CHANGELOG
   
  -  Changes between 1.4.0 and 1.5a1 (dd-mmm-2004)
  +  Changes between 1.4.0 and 1.5a1 (22-Apr-2004)
  +
  +    *) Improve name space cleanness embedding a OSSP pcre which offers
  +       PREFIX logic and modify configure.ac to pass down the prefix.
  +       [Thomas Lotterer <thomas@lotterer.net>]
  +
  +    *) Fix regex name space dirt by embedding a OSSP pcre which no
  +       longer provides POSIX functions regcomp, regerror, regexec and
  +       regfree.
  +       [Thomas Lotterer <thomas@lotterer.net>]
   
       *) Fix PR#39: configure --with-l2 does not work because it checks
          for a function that no longer exists. Reported by Kimura Fuyuki.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/configure.ac
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 configure.ac
  --- ossp-pkg/fsl/configure.ac	19 Mar 2004 22:36:08 -0000	1.18
  +++ ossp-pkg/fsl/configure.ac	22 Apr 2004 09:32:50 -0000	1.19
  @@ -86,7 +86,7 @@
                   pcre, pcre_compile, pcre.h,
                   [SUBDIR_PCRE=""],
                   [SUBDIR_PCRE="lib_pcre"
  -                 CPPFLAGS="$CPPFLAGS -Ilib_pcre"
  +                 CPPFLAGS="$CPPFLAGS -Ilib_pcre -DPCRE_PREFIX=fsl_";
                    CFLAGS="$CFLAGS -Ilib_pcre"
                    LIB_DEPS="$LIB_DEPS lib_pcre/*.lo"])
   AC_SUBST(SUBDIR_PCRE)
  @@ -96,6 +96,8 @@
   if test ".$SUBDIR_L2"   != .; then AC_CONFIG_SUBDIRS(lib_l2)   fi
   if test ".$SUBDIR_CFG"  != .; then AC_CONFIG_SUBDIRS(lib_cfg)  fi
   if test ".$SUBDIR_PCRE" != .; then AC_CONFIG_SUBDIRS(lib_pcre) fi
  +dnl #   export is a hack to pass CPPFLAGS down to subdirs (introduced for PCRE_PREFIX)
  +export CPPFLAGS
   
   dnl #   output generation
   AC_CONFIG_HEADERS(config.h)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pcre/ChangeLog.OSSP
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 ChangeLog.OSSP
  --- ossp-pkg/pcre/ChangeLog.OSSP	21 Apr 2004 13:44:06 -0000	1.20
  +++ ossp-pkg/pcre/ChangeLog.OSSP	22 Apr 2004 09:32:51 -0000	1.21
  @@ -2,6 +2,8 @@
    OSSP ChangeLog for PCRE
    =======================
   
  +  *) Import PREFIX logic from OSSP l2 cvs diff -r1.2 -r1.3 l2_ut_pcre.h
  +
     *) Remove libpcreposix.la target from Makefile.in to disable
        provisioning of embedded POSIX regex library functions regcomp,
        regerror, regexec and regfree. OSSP petidomo was a victim as it
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pcre/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 Makefile.in
  --- ossp-pkg/pcre/Makefile.in	21 Apr 2004 13:44:06 -0000	1.9
  +++ ossp-pkg/pcre/Makefile.in	22 Apr 2004 09:32:51 -0000	1.10
  @@ -9,7 +9,8 @@
   SHELL       = /bin/sh
   
   CC          = @CC@
  -CFLAGS      = @CFLAGS@ -I.
  +CPPFLAGS    = @CPPFLAGS@
  +CFLAGS      = @DEFS@ @CFLAGS@ -I.
   LDFLAGS     = @LDFLAGS@ -L.
   SHTOOL      = ./shtool
   LIBTOOL     = ./libtool
  @@ -28,9 +29,9 @@
   .SUFFIXES: .c .o .lo
   
   .c.o:
  -	$(CC) -c $(CFLAGS) $<
  +	$(CC) $(CPPFLAGS) $(CFLAGS) -c $<
   .c.lo:
  -	$(LIBTOOL) --quiet --mode=compile $(CC) -c $(CFLAGS) $<
  +	$(LIBTOOL) --quiet --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS) -c $<
   
   libpcre.la: pcre.lo pcre_get.lo pcre_maketables.lo pcre_study.lo pcre_match.lo
   	$(LIBTOOL) --quiet --mode=link $(CC) -o libpcre.la \
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pcre/pcre.h
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 pcre.h
  --- ossp-pkg/pcre/pcre.h	11 Jan 2002 10:19:12 -0000	1.9
  +++ ossp-pkg/pcre/pcre.h	22 Apr 2004 09:32:51 -0000	1.10
  @@ -17,6 +17,31 @@
                        __PCRE_XSTRING(PCRE_MINOR) " " \
                        __PCRE_XSTRING(PCRE_DATE);
   
  +#ifdef PCRE_PREFIX
  +#if defined(__STDC__) || defined(__cplusplus)
  +#define __PCRE_CONCAT(x,y) x ## y
  +#define PCRE_CONCAT(x,y) __PCRE_CONCAT(x,y)
  +#else
  +#define __PCRE_CONCAT(x) x
  +#define PCRE_CONCAT(x,y) __PCRE_CONCAT(x)y
  +#endif
  +#define pcre_malloc PCRE_CONCAT(PCRE_PREFIX,pcre_malloc)
  +#define pcre_free PCRE_CONCAT(PCRE_PREFIX,pcre_free)
  +#define pcre_compile PCRE_CONCAT(PCRE_PREFIX,pcre_compile)
  +#define pcre_copy_substring PCRE_CONCAT(PCRE_PREFIX,pcre_copy_substring)
  +#define pcre_exec PCRE_CONCAT(PCRE_PREFIX,pcre_exec)
  +#define pcre_free_substring PCRE_CONCAT(PCRE_PREFIX,pcre_free_substring)
  +#define pcre_free_substring_list PCRE_CONCAT(PCRE_PREFIX,pcre_free_substring_list)
  +#define pcre_get_substring PCRE_CONCAT(PCRE_PREFIX,pcre_get_substring)
  +#define pcre_get_substring_list PCRE_CONCAT(PCRE_PREFIX,pcre_get_substring_list)
  +#define pcre_info PCRE_CONCAT(PCRE_PREFIX,pcre_info)
  +#define pcre_fullinfo PCRE_CONCAT(PCRE_PREFIX,pcre_fullinfo)
  +#define pcre_maketables PCRE_CONCAT(PCRE_PREFIX,pcre_maketables)
  +#define pcre_study PCRE_CONCAT(PCRE_PREFIX,pcre_study)
  +#define pcre_version PCRE_CONCAT(PCRE_PREFIX,pcre_version)
  +#define pcre_match PCRE_CONCAT(PCRE_PREFIX,pcre_match)
  +#endif
  +
   /* Win32 uses DLL by default */
   
   #ifdef _WIN32
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr 22 12:10:58 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 412F87752D; Thu, 22 Apr 2004 12:10:58 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ ChangeLog l2_ut_format.c
Message-Id: <20040422101058.412F87752D@mail.ossp.org>
Date: Thu, 22 Apr 2004 12:10:58 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Apr-2004 12:10:58
  Branch: HEAD                             Handle: 2004042211105700

  Modified files:
    ossp-pkg/l2             ChangeLog l2_ut_format.c

  Log:
    Replace modf(3) calls in l2_util_format.c with a hand-crafted
    inlined l2_util_modf() function to avoid dependency to external libm
    on systems (like Tru64, QNX, etc) where modf(3) is not part of libc.

  Summary:
    Revision    Changes     Path
    1.13        +7  -0      ossp-pkg/l2/ChangeLog
    1.9         +22 -3      ossp-pkg/l2/l2_ut_format.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 ChangeLog
  --- ossp-pkg/l2/ChangeLog	21 Apr 2004 12:19:32 -0000	1.12
  +++ ossp-pkg/l2/ChangeLog	22 Apr 2004 10:10:57 -0000	1.13
  @@ -9,6 +9,13 @@
     ChangeLog
     =========
   
  +  Changes between 0.9.6 and 0.9.7 (21-Apr-2003 to 22-Apr-2004)
  +
  +    *) Replace modf(3) calls in l2_util_format.c with a hand-crafted
  +       inlined l2_util_modf() function to avoid dependency to external libm
  +       on systems (like Tru64, QNX, etc) where modf(3) is not part of libc.
  +       [Ralf S. Engelschall <rse@engelschall.com>]
  +
     Changes between 0.9.5 and 0.9.6 (10-Nov-2003 to 21-Apr-2004)
   
       *) create devtool.conf %import and import OSSP sa 1.2.0
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_format.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 l2_ut_format.c
  --- ossp-pkg/l2/l2_ut_format.c	6 Jan 2003 11:41:52 -0000	1.8
  +++ ossp-pkg/l2/l2_ut_format.c	22 Apr 2004 10:10:57 -0000	1.9
  @@ -162,6 +162,25 @@
   #define l2_util_fcvt(arg,ndigits,decpt,sign,buf) \
           l2_util_cvt((arg), (ndigits), (decpt), (sign), 0, (buf))
   
  +/* inlined modf(3) to avoid dependency to external libm on systems
  +   (like Tru64, QNX, etc) where modf(3) is not part of libc. */
  +static double
  +l2_util_modf(
  +    double arg,
  +    double *iptr)
  +{
  +    double fraction;
  +    double integral;
  +    long trunc;
  +
  +    trunc = (long)arg;
  +    integral = (double)trunc;
  +    fraction = arg - integral;
  +    if (iptr != NULL)
  +        *iptr = integral;
  +    return fraction;
  +}
  +
   static char *
   l2_util_cvt(
       double arg,
  @@ -184,14 +203,14 @@
           *sign = TRUE;
           arg = -arg;
       }
  -    arg = modf(arg, &fi);
  +    arg = l2_util_modf(arg, &fi);
       p1 = &buf[NDIG];
   
       /* Do integer part */
       if (fi != 0) {
           p1 = &buf[NDIG];
           while (fi != 0 && p1 > &buf[0]) {
  -            fj = modf(fi / 10, &fi);
  +            fj = l2_util_modf(fi / 10, &fi);
               *--p1 = (int)((fj + .03) * 10) + '0';
               r2++;
           }
  @@ -214,7 +233,7 @@
       }
       while (p <= p1 && p < &buf[NDIG]) {
           arg *= 10;
  -        arg = modf(arg, &fj);
  +        arg = l2_util_modf(arg, &fj);
           *p++ = (int) fj + '0';
       }
       if (p1 >= &buf[NDIG]) {
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr 22 12:21:38 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6BD7477900; Thu, 22 Apr 2004 12:21:38 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ ChangeLog
Message-Id: <20040422102138.6BD7477900@mail.ossp.org>
Date: Thu, 22 Apr 2004 12:21:38 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   22-Apr-2004 12:21:38
  Branch: HEAD                             Handle: 2004042211213700

  Modified files:
    ossp-pkg/l2             ChangeLog

  Log:
    give credit to Karl Vogel reporting modf(3) math lib issue on Tru64

  Summary:
    Revision    Changes     Path
    1.14        +3  -2      ossp-pkg/l2/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 ChangeLog
  --- ossp-pkg/l2/ChangeLog	22 Apr 2004 10:10:57 -0000	1.13
  +++ ossp-pkg/l2/ChangeLog	22 Apr 2004 10:21:37 -0000	1.14
  @@ -12,8 +12,9 @@
     Changes between 0.9.6 and 0.9.7 (21-Apr-2003 to 22-Apr-2004)
   
       *) Replace modf(3) calls in l2_util_format.c with a hand-crafted
  -       inlined l2_util_modf() function to avoid dependency to external libm
  -       on systems (like Tru64, QNX, etc) where modf(3) is not part of libc.
  +       inlined l2_util_modf() function to avoid dependency to external
  +       libm on systems where modf(3) is not part of libc, i.e. Tru64 and
  +       QNX. Reported by Karl Vogel.
          [Ralf S. Engelschall <rse@engelschall.com>]
   
     Changes between 0.9.5 and 0.9.6 (10-Nov-2003 to 21-Apr-2004)
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr 22 12:30:32 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3917B7790E; Thu, 22 Apr 2004 12:30:32 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ ChangeLog fsl.c
Message-Id: <20040422103032.3917B7790E@mail.ossp.org>
Date: Thu, 22 Apr 2004 12:30:32 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   22-Apr-2004 12:30:31
  Branch: HEAD                             Handle: 2004042211303100

  Modified files:
    ossp-pkg/fsl            ChangeLog fsl.c

  Log:
    relocate vsyslog() function to avoid wrong implicit declaration.
    Reported by Karl Vogel

  Summary:
    Revision    Changes     Path
    1.30        +5  -0      ossp-pkg/fsl/ChangeLog
    1.67        +15 -15     ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 ChangeLog
  --- ossp-pkg/fsl/ChangeLog	22 Apr 2004 09:32:50 -0000	1.29
  +++ ossp-pkg/fsl/ChangeLog	22 Apr 2004 10:30:31 -0000	1.30
  @@ -10,6 +10,11 @@
   
     Changes between 1.4.0 and 1.5a1 (22-Apr-2004)
   
  +    *) Relocate vsyslog() function to avoid wrong implicit declaration
  +       on platforms not providing any vsyslog(3), i.e. Tru64. Reported
  +       by Karl Vogel.
  +       [Thomas Lotterer <thomas@lotterer.net>]
  +
       *) Improve name space cleanness embedding a OSSP pcre which offers
          PREFIX logic and modify configure.ac to pass down the prefix.
          [Thomas Lotterer <thomas@lotterer.net>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl.c
  ============================================================================
  $ cvs diff -u -r1.66 -r1.67 fsl.c
  --- ossp-pkg/fsl/fsl.c	9 Jan 2004 10:48:27 -0000	1.66
  +++ ossp-pkg/fsl/fsl.c	22 Apr 2004 10:30:31 -0000	1.67
  @@ -927,21 +927,6 @@
       return oldmask;
   }
   
  -/* faked POSIX API function syslog(3) */
  -void syslog(int priority, const char *message, ...)
  -{
  -    va_list args;
  -
  -    /* tracing */
  -    fsldebug(L2_LEVEL_TRACE, "fsl in syslog(3); go ahead using vsyslog(3)");
  -
  -    /* wrap around vsyslog(3) */
  -    va_start(args, message);
  -    vsyslog(priority, message, args);
  -    va_end(args);
  -    return;
  -}
  -
   /* faked POSIX API function vsyslog(3) */
   #ifdef HAVE_VSYSLOG_USVALIST
   void vsyslog(int priority, const char *fmt, __va_list args)
  @@ -1001,6 +986,21 @@
           cp = l2_env_strerror(ctx.l2_env, l2rv);
           fsldebug(L2_LEVEL_PANIC, "vsyslog: application logging failed: %s (%d)", cp, l2rv);
       }
  +    return;
  +}
  +
  +/* faked POSIX API function syslog(3) */
  +void syslog(int priority, const char *message, ...)
  +{
  +    va_list args;
  +
  +    /* tracing */
  +    fsldebug(L2_LEVEL_TRACE, "fsl in syslog(3); go ahead using vsyslog(3)");
  +
  +    /* wrap around vsyslog(3) */
  +    va_start(args, message);
  +    vsyslog(priority, message, args);
  +    va_end(args);
       return;
   }
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr 22 12:31:48 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7177677907; Thu, 22 Apr 2004 12:31:48 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ README l2_version.c
Message-Id: <20040422103148.7177677907@mail.ossp.org>
Date: Thu, 22 Apr 2004 12:31:48 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   22-Apr-2004 12:31:48
  Branch: HEAD                             Handle: 2004042211314800

  Modified files:
    ossp-pkg/l2             README l2_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.17        +1  -1      ossp-pkg/l2/README
    1.15        +9  -9      ossp-pkg/l2/l2_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/README
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 README
  --- ossp-pkg/l2/README	21 Apr 2004 12:19:32 -0000	1.16
  +++ ossp-pkg/l2/README	22 Apr 2004 10:31:48 -0000	1.17
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_|_____|
   
     OSSP l2 -- Flexible Logging
  -  Version 0.9.6 (21-Apr-2004)
  +  Version 0.9.7 (22-Apr-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_version.c
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 l2_version.c
  --- ossp-pkg/l2/l2_version.c	21 Apr 2004 12:19:32 -0000	1.14
  +++ ossp-pkg/l2/l2_version.c	22 Apr 2004 10:31:48 -0000	1.15
  @@ -8,7 +8,7 @@
   #ifndef _L2_VERSION_C_
   #define _L2_VERSION_C_
   
  -#define L2_VERSION 0x009206
  +#define L2_VERSION 0x009207
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _L2_VERSION_C_AS_HEADER_
   
   l2_version_t l2_version = {
  -    0x009206,
  -    "0.9.6",
  -    "0.9.6 (21-Apr-2004)",
  -    "This is OSSP l2, Version 0.9.6 (21-Apr-2004)",
  -    "OSSP l2 0.9.6 (21-Apr-2004)",
  -    "OSSP l2/0.9.6",
  -    "@(#)OSSP l2 0.9.6 (21-Apr-2004)",
  -    "$Id: l2_version.c,v 1.14 2004/04/21 12:19:32 thl Exp $"
  +    0x009207,
  +    "0.9.7",
  +    "0.9.7 (22-Apr-2004)",
  +    "This is OSSP l2, Version 0.9.7 (22-Apr-2004)",
  +    "OSSP l2 0.9.7 (22-Apr-2004)",
  +    "OSSP l2/0.9.7",
  +    "@(#)OSSP l2 0.9.7 (22-Apr-2004)",
  +    "$Id: l2_version.c,v 1.15 2004/04/22 10:31:48 thl Exp $"
   };
   
   #endif /* _L2_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr 22 12:41:57 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9577777907; Thu, 22 Apr 2004 12:41:57 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ ChangeLog README fsl_version.c
Message-Id: <20040422104157.9577777907@mail.ossp.org>
Date: Thu, 22 Apr 2004 12:41:57 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   22-Apr-2004 12:41:57
  Branch: HEAD                             Handle: 2004042211415700

  Modified files:
    ossp-pkg/fsl            ChangeLog README fsl_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.31        +3  -1      ossp-pkg/fsl/ChangeLog
    1.42        +1  -1      ossp-pkg/fsl/README
    1.29        +9  -9      ossp-pkg/fsl/fsl_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 ChangeLog
  --- ossp-pkg/fsl/ChangeLog	22 Apr 2004 10:30:31 -0000	1.30
  +++ ossp-pkg/fsl/ChangeLog	22 Apr 2004 10:41:57 -0000	1.31
  @@ -17,11 +17,13 @@
   
       *) Improve name space cleanness embedding a OSSP pcre which offers
          PREFIX logic and modify configure.ac to pass down the prefix.
  +       OpenPKG original quick fix by Michael van Elst.
          [Thomas Lotterer <thomas@lotterer.net>]
   
       *) Fix regex name space dirt by embedding a OSSP pcre which no
          longer provides POSIX functions regcomp, regerror, regexec and
  -       regfree.
  +       regfree. OSSP petidomo problem found by Torsten Homeyer.
  +       OpenPKG sendmail problem reported by Birger Kraegelin.
          [Thomas Lotterer <thomas@lotterer.net>]
   
       *) Fix PR#39: configure --with-l2 does not work because it checks
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/README
  ============================================================================
  $ cvs diff -u -r1.41 -r1.42 README
  --- ossp-pkg/fsl/README	12 Jan 2004 09:08:36 -0000	1.41
  +++ ossp-pkg/fsl/README	22 Apr 2004 10:41:57 -0000	1.42
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_| |___/_|
    
     OSSP fsl - Faking/Flexible Syslog Library
  -  Version 1.4.0 (12-Jan-2004)
  +  Version 1.5a1 (22-Apr-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl_version.c
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 fsl_version.c
  --- ossp-pkg/fsl/fsl_version.c	12 Jan 2004 09:08:36 -0000	1.28
  +++ ossp-pkg/fsl/fsl_version.c	22 Apr 2004 10:41:57 -0000	1.29
  @@ -8,7 +8,7 @@
   #ifndef _FSL_VERSION_C_
   #define _FSL_VERSION_C_
   
  -#define FSL_VERSION 0x104200
  +#define FSL_VERSION 0x105001
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _FSL_VERSION_C_AS_HEADER_
   
   fsl_version_t fsl_version = {
  -    0x104200,
  -    "1.4.0",
  -    "1.4.0 (12-Jan-2004)",
  -    "This is OSSP fsl, Version 1.4.0 (12-Jan-2004)",
  -    "OSSP fsl 1.4.0 (12-Jan-2004)",
  -    "OSSP fsl/1.4.0",
  -    "@(#)OSSP fsl 1.4.0 (12-Jan-2004)",
  -    "$Id: fsl_version.c,v 1.28 2004/01/12 09:08:36 thl Exp $"
  +    0x105001,
  +    "1.5a1",
  +    "1.5a1 (22-Apr-2004)",
  +    "This is OSSP fsl, Version 1.5a1 (22-Apr-2004)",
  +    "OSSP fsl 1.5a1 (22-Apr-2004)",
  +    "OSSP fsl/1.5a1",
  +    "@(#)OSSP fsl 1.5a1 (22-Apr-2004)",
  +    "$Id: fsl_version.c,v 1.29 2004/04/22 10:41:57 thl Exp $"
   };
   
   #endif /* _FSL_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr 22 17:42:48 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C2203774C9; Thu, 22 Apr 2004 17:42:47 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ ChangeLog
Message-Id: <20040422154247.C2203774C9@mail.ossp.org>
Date: Thu, 22 Apr 2004 17:42:47 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   22-Apr-2004 17:42:47
  Branch: HEAD                             Handle: 2004042216424700

  Modified files:
    ossp-pkg/l2             ChangeLog

  Log:
    cosmetics

  Summary:
    Revision    Changes     Path
    1.15        +10 -10     ossp-pkg/l2/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 ChangeLog
  --- ossp-pkg/l2/ChangeLog	22 Apr 2004 10:21:37 -0000	1.14
  +++ ossp-pkg/l2/ChangeLog	22 Apr 2004 15:42:47 -0000	1.15
  @@ -19,15 +19,15 @@
   
     Changes between 0.9.5 and 0.9.6 (10-Nov-2003 to 21-Apr-2004)
   
  -    *) create devtool.conf %import and import OSSP sa 1.2.0
  +    *) Create devtool.conf %import and import OSSP sa 1.2.0
          [Thomas Lotterer <thomas@lotterer.net>]
   
     Changes between 0.9.4 and 0.9.5 (25-Sep-2003 to 10-Nov-2003)
   
  -    *) remove log0...4 macros
  +    *) Remove log0...4 macros
          [Thomas Lotterer <thomas@lotterer.net>]
   
  -    *) minor adjustments porting to OpenDarwin 6.6
  +    *) Minor adjustments porting to OpenDarwin 6.6
          [Thomas Lotterer <thomas@lotterer.net>]
   
       *) Fix Problem where l2 does not terminate a message when it
  @@ -43,30 +43,30 @@
   
     Changes between 0.9.3 and 0.9.4 (15-Sep-2003 to 25-Sep-2003)
   
  -    *) change jitter option in file channel from flag to count.
  +    *) Change jitter option in file channel from flag to count.
          [Thomas Lotterer <thomas@lotterer.net>]
   
  -    *) add monitor option to file channel.
  +    *) Add monitor option to file channel.
          [Thomas Lotterer <thomas@lotterer.net>]
   
     Changes between 0.9.2 and 0.9.3 (30-Jun-2003 to 15-Sep-2003)
   
  -    *) make sure prefix channel does atomar downstream writes
  +    *) Make sure prefix channel does atomar downstream writes
          [Ralf S. Engelschall <rse@engelschall.com>]
   
     Changes between 0.9.1 and 0.9.2 (11-Oct-2002 to 30-Jun-2003)
     
  -    *) introduce "trunc=" option for file channel; keep support for
  +    *) Introduce "trunc=" option for file channel; keep support for
          obsolete "append" option.
          [Thomas Lotterer <thomas@lotterer.net>]
   
  -    *) change default mode for file channel to "append".
  +    *) Change default mode for file channel to "append".
          [Thomas Lotterer <thomas@lotterer.net>]
   
  -    *) fix array too small by one element bug in fd and file channels.
  +    *) Fix array too small by one element bug in fd and file channels.
          [Thomas Lotterer <thomas@lotterer.net>]
   
  -    *) add jitter option to file channel.
  +    *) Add jitter option to file channel.
          [Thomas Lotterer <thomas@lotterer.net>]
   
     Changes between 0.9.0 and 0.9.1 (30-Jul-2002 to 11-Oct-2003)
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr 22 17:46:34 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 901947751B; Thu, 22 Apr 2004 17:46:34 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ ChangeLog devtool.conf l2_ut_sa.h
Message-Id: <20040422154634.901947751B@mail.ossp.org>
Date: Thu, 22 Apr 2004 17:46:34 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   22-Apr-2004 17:46:34
  Branch: HEAD                             Handle: 2004042216463400

  Modified files:
    ossp-pkg/l2             ChangeLog devtool.conf l2_ut_sa.h

  Log:
    change devtool.conf %import of OSSP sa to inject a faked HAVE_CONFIG_H

  Summary:
    Revision    Changes     Path
    1.16        +8  -1      ossp-pkg/l2/ChangeLog
    1.16        +1  -1      ossp-pkg/l2/devtool.conf
    1.22        +1  -0      ossp-pkg/l2/l2_ut_sa.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 ChangeLog
  --- ossp-pkg/l2/ChangeLog	22 Apr 2004 15:42:47 -0000	1.15
  +++ ossp-pkg/l2/ChangeLog	22 Apr 2004 15:46:34 -0000	1.16
  @@ -9,7 +9,14 @@
     ChangeLog
     =========
   
  -  Changes between 0.9.6 and 0.9.7 (21-Apr-2003 to 22-Apr-2004)
  +  Changes between 0.9.7 and 0.9.8 (22-Apr-2004 to 22-Apr-2004)
  +
  +    *) Change devtool.conf %import of OSSP sa to inject a faked
  +       HAVE_CONFIG_H. This unbreaks preprocessor conditions and fixes
  +       building on Solaris 2.6
  +       [Thomas Lotterer <thomas@lotterer.net>]
  +
  +  Changes between 0.9.6 and 0.9.7 (21-Apr-2004 to 22-Apr-2004)
   
       *) Replace modf(3) calls in l2_util_format.c with a hand-crafted
          inlined l2_util_modf() function to avoid dependency to external
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 devtool.conf
  --- ossp-pkg/l2/devtool.conf	26 Mar 2004 17:14:18 -0000	1.15
  +++ ossp-pkg/l2/devtool.conf	22 Apr 2004 15:46:34 -0000	1.16
  @@ -35,7 +35,7 @@
       done
       awk <l2_ut_sa.h '
               BEGIN { p=1 }
  -            /^#ifdef HAVE_CONFIG_H/ { print "#define SA_PREFIX l2_util_\n#include \"l2_config.h\"\n"; p=0 }
  +            /^#ifdef HAVE_CONFIG_H/ { print "#define SA_PREFIX l2_util_\n#define HAVE_CONFIG_H 1\n#include \"l2_config.h\"\n"; p=0 }
               // { if (p==1) print $0 }
               /^#endif/ { p=1 }
               ' >l2_ut_sa.h.n && mv l2_ut_sa.h.n l2_ut_sa.h
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_sa.h
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 l2_ut_sa.h
  --- ossp-pkg/l2/l2_ut_sa.h	21 Apr 2004 12:02:12 -0000	1.21
  +++ ossp-pkg/l2/l2_ut_sa.h	22 Apr 2004 15:46:34 -0000	1.22
  @@ -38,6 +38,7 @@
   
   /* include optional Autoconf header */
   #define SA_PREFIX l2_util_
  +#define HAVE_CONFIG_H 1
   #include "l2_config.h"
   
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr 22 17:48:06 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8157C7751B; Thu, 22 Apr 2004 17:48:06 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ README l2_version.c
Message-Id: <20040422154806.8157C7751B@mail.ossp.org>
Date: Thu, 22 Apr 2004 17:48:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   22-Apr-2004 17:48:06
  Branch: HEAD                             Handle: 2004042216480600

  Modified files:
    ossp-pkg/l2             README l2_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.18        +1  -1      ossp-pkg/l2/README
    1.16        +9  -9      ossp-pkg/l2/l2_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/README
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 README
  --- ossp-pkg/l2/README	22 Apr 2004 10:31:48 -0000	1.17
  +++ ossp-pkg/l2/README	22 Apr 2004 15:48:06 -0000	1.18
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_|_____|
   
     OSSP l2 -- Flexible Logging
  -  Version 0.9.7 (22-Apr-2004)
  +  Version 0.9.8 (22-Apr-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_version.c
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 l2_version.c
  --- ossp-pkg/l2/l2_version.c	22 Apr 2004 10:31:48 -0000	1.15
  +++ ossp-pkg/l2/l2_version.c	22 Apr 2004 15:48:06 -0000	1.16
  @@ -8,7 +8,7 @@
   #ifndef _L2_VERSION_C_
   #define _L2_VERSION_C_
   
  -#define L2_VERSION 0x009207
  +#define L2_VERSION 0x009208
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _L2_VERSION_C_AS_HEADER_
   
   l2_version_t l2_version = {
  -    0x009207,
  -    "0.9.7",
  -    "0.9.7 (22-Apr-2004)",
  -    "This is OSSP l2, Version 0.9.7 (22-Apr-2004)",
  -    "OSSP l2 0.9.7 (22-Apr-2004)",
  -    "OSSP l2/0.9.7",
  -    "@(#)OSSP l2 0.9.7 (22-Apr-2004)",
  -    "$Id: l2_version.c,v 1.15 2004/04/22 10:31:48 thl Exp $"
  +    0x009208,
  +    "0.9.8",
  +    "0.9.8 (22-Apr-2004)",
  +    "This is OSSP l2, Version 0.9.8 (22-Apr-2004)",
  +    "OSSP l2 0.9.8 (22-Apr-2004)",
  +    "OSSP l2/0.9.8",
  +    "@(#)OSSP l2 0.9.8 (22-Apr-2004)",
  +    "$Id: l2_version.c,v 1.16 2004/04/22 15:48:06 thl Exp $"
   };
   
   #endif /* _L2_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr 22 17:50:37 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B8A8A77525; Thu, 22 Apr 2004 17:50:37 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ ChangeLog README fsl_version.c
Message-Id: <20040422155037.B8A8A77525@mail.ossp.org>
Date: Thu, 22 Apr 2004 17:50:37 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   22-Apr-2004 17:50:37
  Branch: HEAD                             Handle: 2004042216503700

  Modified files:
    ossp-pkg/fsl            ChangeLog README fsl_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.32        +5  -0      ossp-pkg/fsl/ChangeLog
    1.43        +1  -1      ossp-pkg/fsl/README
    1.30        +9  -9      ossp-pkg/fsl/fsl_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 ChangeLog
  --- ossp-pkg/fsl/ChangeLog	22 Apr 2004 10:41:57 -0000	1.31
  +++ ossp-pkg/fsl/ChangeLog	22 Apr 2004 15:50:37 -0000	1.32
  @@ -8,6 +8,11 @@
   
     CHANGELOG
   
  +  Changes between 1.5a1 and 1.5a2 (22-Apr-2004)
  +
  +    *) Use updated OSSP lib_l2 0.9.8 to fix building on Solaris 2.6
  +       [Thomas Lotterer <thomas@lotterer.net>]
  +
     Changes between 1.4.0 and 1.5a1 (22-Apr-2004)
   
       *) Relocate vsyslog() function to avoid wrong implicit declaration
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/README
  ============================================================================
  $ cvs diff -u -r1.42 -r1.43 README
  --- ossp-pkg/fsl/README	22 Apr 2004 10:41:57 -0000	1.42
  +++ ossp-pkg/fsl/README	22 Apr 2004 15:50:37 -0000	1.43
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_| |___/_|
    
     OSSP fsl - Faking/Flexible Syslog Library
  -  Version 1.5a1 (22-Apr-2004)
  +  Version 1.5a2 (22-Apr-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl_version.c
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 fsl_version.c
  --- ossp-pkg/fsl/fsl_version.c	22 Apr 2004 10:41:57 -0000	1.29
  +++ ossp-pkg/fsl/fsl_version.c	22 Apr 2004 15:50:37 -0000	1.30
  @@ -8,7 +8,7 @@
   #ifndef _FSL_VERSION_C_
   #define _FSL_VERSION_C_
   
  -#define FSL_VERSION 0x105001
  +#define FSL_VERSION 0x105002
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _FSL_VERSION_C_AS_HEADER_
   
   fsl_version_t fsl_version = {
  -    0x105001,
  -    "1.5a1",
  -    "1.5a1 (22-Apr-2004)",
  -    "This is OSSP fsl, Version 1.5a1 (22-Apr-2004)",
  -    "OSSP fsl 1.5a1 (22-Apr-2004)",
  -    "OSSP fsl/1.5a1",
  -    "@(#)OSSP fsl 1.5a1 (22-Apr-2004)",
  -    "$Id: fsl_version.c,v 1.29 2004/04/22 10:41:57 thl Exp $"
  +    0x105002,
  +    "1.5a2",
  +    "1.5a2 (22-Apr-2004)",
  +    "This is OSSP fsl, Version 1.5a2 (22-Apr-2004)",
  +    "OSSP fsl 1.5a2 (22-Apr-2004)",
  +    "OSSP fsl/1.5a2",
  +    "@(#)OSSP fsl 1.5a2 (22-Apr-2004)",
  +    "$Id: fsl_version.c,v 1.30 2004/04/22 15:50:37 thl Exp $"
   };
   
   #endif /* _FSL_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr 22 21:31:53 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EB24977910; Thu, 22 Apr 2004 21:31:52 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ README lmtp2nntp_version.c
Message-Id: <20040422193152.EB24977910@mail.ossp.org>
Date: Thu, 22 Apr 2004 21:31:52 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   22-Apr-2004 21:31:52
  Branch: HEAD                             Handle: 2004042220315200

  Modified files:
    ossp-pkg/lmtp2nntp      README lmtp2nntp_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.37        +1  -1      ossp-pkg/lmtp2nntp/README
    1.18        +9  -9      ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/README
  ============================================================================
  $ cvs diff -u -r1.36 -r1.37 README
  --- ossp-pkg/lmtp2nntp/README	13 Feb 2003 10:01:25 -0000	1.36
  +++ ossp-pkg/lmtp2nntp/README	22 Apr 2004 19:31:52 -0000	1.37
  @@ -5,7 +5,7 @@
     |_|_|_| \___/|____/____/|_|    |_|_||_||_|\__| .__/____|_||_|_||_|\__| .__/
                                                  |_|                     |_|
     OSSP lmtp2nntp - Mail to News Gateway
  -  Version 1.2.0 (13-Feb-2003)
  +  Version 1.3a1 (22-Apr-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 lmtp2nntp_version.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	13 Feb 2003 10:01:26 -0000	1.17
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	22 Apr 2004 19:31:52 -0000	1.18
  @@ -8,7 +8,7 @@
   #ifndef _LMTP2NNTP_VERSION_C_
   #define _LMTP2NNTP_VERSION_C_
   
  -#define LMTP2NNTP_VERSION 0x102200
  +#define LMTP2NNTP_VERSION 0x103001
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _LMTP2NNTP_VERSION_C_AS_HEADER_
   
   lmtp2nntp_version_t lmtp2nntp_version = {
  -    0x102200,
  -    "1.2.0",
  -    "1.2.0 (13-Feb-2003)",
  -    "This is OSSP lmtp2nntp, Version 1.2.0 (13-Feb-2003)",
  -    "OSSP lmtp2nntp 1.2.0 (13-Feb-2003)",
  -    "OSSP lmtp2nntp/1.2.0",
  -    "@(#)OSSP lmtp2nntp 1.2.0 (13-Feb-2003)",
  -    "$Id: lmtp2nntp_version.c,v 1.17 2003/02/13 10:01:26 thl Exp $"
  +    0x103001,
  +    "1.3a1",
  +    "1.3a1 (22-Apr-2004)",
  +    "This is OSSP lmtp2nntp, Version 1.3a1 (22-Apr-2004)",
  +    "OSSP lmtp2nntp 1.3a1 (22-Apr-2004)",
  +    "OSSP lmtp2nntp/1.3a1",
  +    "@(#)OSSP lmtp2nntp 1.3a1 (22-Apr-2004)",
  +    "$Id: lmtp2nntp_version.c,v 1.18 2004/04/22 19:31:52 thl Exp $"
   };
   
   #endif /* _LMTP2NNTP_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 23 11:23:39 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 44F9D7791E; Fri, 23 Apr 2004 11:23:39 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvsfusion/ RCS.pm cvsfusion.pl
Message-Id: <20040423092339.44F9D7791E@mail.ossp.org>
Date: Fri, 23 Apr 2004 11:23:39 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Apr-2004 11:23:39
  Branch: HEAD                             Handle: 2004042310233800

  Modified files:
    ossp-pkg/cvsfusion      RCS.pm cvsfusion.pl

  Log:
    flush work of yesterday afternoon

  Summary:
    Revision    Changes     Path
    1.2         +240 -2     ossp-pkg/cvsfusion/RCS.pm
    1.2         +11 -3      ossp-pkg/cvsfusion/cvsfusion.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cvsfusion/RCS.pm
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 RCS.pm
  --- ossp-pkg/cvsfusion/RCS.pm	22 Apr 2004 06:56:28 -0000	1.1
  +++ ossp-pkg/cvsfusion/RCS.pm	23 Apr 2004 09:23:38 -0000	1.2
  @@ -32,6 +32,8 @@
   
   require 5;
   require Exporter;
  +use Carp;
  +use IO::File;
   
   @ISA       = qw(Exporter);
   @EXPORT_OK = qw(new destroy DESTROY dump);
  @@ -42,8 +44,12 @@
       my $self = {};
       bless ($self, $class);
   
  -    $self->{'prog-rcs'}  = "";
  -    $self->{'prog-diff'} = "";
  +    $self->{'tool'} = {
  +        'rcs'  => 'rcs',
  +        'co'   => 'co',
  +        'diff' => 'diff',
  +    };
  +    $self->{'rcs'} = {};
   
       return $self;
   }
  @@ -73,6 +79,238 @@
       my $dump = "# " . ref($self) . " object dump:\n";
       $dump .= $d->Dump();
       return $dump;
  +}
  +
  +sub tool ($;$) {
  +    my $self = shift;
  +    my ($tool, $path) = @_;
  +    my $old = $self->{'tool'}->{$tool};
  +    if (not defined($old)) {
  +        croak "tool \"$tool\" not known";
  +    }
  +    if (defined($path)) {
  +        $self->{'tool'}->{$tool} = $path;
  +    }
  +    return $old;
  +}
  +
  +sub load ($$) {
  +    my $self = shift;
  +    my ($file) = @_;
  +
  +    #   read RCS file into buffer
  +    my $io = new IO::File "<$file"
  +        or croak "RCS file \"$file\": cannot open for reading";
  +    my $rcs = '';
  +    $rcs .= $_ while (<$io>);
  +    $io->close;
  +
  +    #   clear RCS structure
  +    $self->{'rcs'} = {
  +        'header'    => { -order => [] },
  +        'delta'     => { -order => [] },
  +    };
  +
  +    #   pre-generate reusable regular expressions
  +    my $re_num     = qr/[\d.]+/;
  +    my $re_rev     = qr/\d+(?:\.\d+)*/;
  +    my $re_special = qr/[$,.:;@]/;
  +    my $re_idchar  = qr/[^$,.:;@]/;
  +    my $re_id      = qr/(?:${re_num})?${re_idchar}+(?:${re_idchar}|${re_num})*/;
  +    my $re_sym     = qr/\d?${re_idchar}+(?:${re_idchar}|\d)*/;
  +    my $re_str     = qr/(?:@@|[^@])*/;
  +    my $re_date    = qr/\d{4}\.\d{2}\.\d{2}\.\d{2}\.\d{2}\.\d{2}/;
  +
  +    #   parse header section
  +    while (1) {
  +        $rcs =~ s|^\s*||s;
  +        if ($rcs =~ s/^head\s+($re_rev)\s*;//s) {
  +            $self->{'rcs'}->{'header'}->{'head'} = $1;
  +            push(@{$self->{'rcs'}->{'header'}->{-order}}, 'head');
  +        }
  +        elsif ($rcs =~ s/^branch\s+($re_rev)\s*;//s) {
  +            $self->{'rcs'}->{'header'}->{'branch'} = $1;
  +            push(@{$self->{'rcs'}->{'header'}->{-order}}, 'branch');
  +        }
  +        elsif ($rcs =~ s/^access((?:\s+$re_id)*)\s*;//s) {
  +            $self->{'rcs'}->{'header'}->{'access'} = [ split(/\s+/, $1) ];
  +            push(@{$self->{'rcs'}->{'header'}->{-order}}, 'access');
  +        }
  +        elsif ($rcs =~ s/^symbols((?:\s+$re_sym:$re_rev)*)\s*;//s) {
  +            my $symbols = {};
  +            map { $symbols->{$1} = $2 if (m/^(.+):(.+)$/s); } split(/\s+/, $1);
  +            $self->{'rcs'}->{'header'}->{'symbols'} = $symbols;
  +            push(@{$self->{'rcs'}->{'header'}->{-order}}, 'symbols');
  +        }
  +        elsif ($rcs =~ s/^locks((?:\s+$re_id:$re_rev)*)\s*;//s) {
  +            my $locks = {};
  +            map { $locks->{$1} = $2 if (m/^(.+):(.+)$/); } split(/\s+/, $1);
  +            $self->{'rcs'}->{'header'}->{'locks'} = $locks;
  +            push(@{$self->{'rcs'}->{'header'}->{-order}}, 'locks');
  +        }
  +        elsif ($rcs =~ s/^strict\s*;//s) {
  +            $self->{'rcs'}->{'header'}->{'strict'} = "";
  +            push(@{$self->{'rcs'}->{'header'}->{-order}}, 'strict');
  +        }
  +        elsif ($rcs =~ s/^comment\s+\@($re_str)\@\s*;//s) {
  +            $self->{'rcs'}->{'header'}->{'comment'} = $1;
  +            push(@{$self->{'rcs'}->{'header'}->{-order}}, 'comment');
  +        }
  +        elsif ($rcs =~ s/^expand\s+\@($re_str)\@\s*;//s) {
  +            $self->{'rcs'}->{'header'}->{'expand'} = $1;
  +            push(@{$self->{'rcs'}->{'header'}->{-order}}, 'expand');
  +        }
  +        elsif ($rcs =~ s/^([a-z]+)(\s*[^;]*);//s) {
  +            $self->{'rcs'}->{'header'}->{$1} = $2;
  +            push(@{$self->{'rcs'}->{'header'}->{-order}}, $1);
  +        }
  +        else {
  +            last;
  +        }
  +    }
  +
  +    #   parse delta section(s)
  +    while (1) {
  +        $rcs =~ s|^\s*||s;
  +        if ($rcs =~ s/^($re_rev)//s) {
  +            my $rev = $1;
  +            $self->{'rcs'}->{'delta'}->{$rev} = {};
  +            push(@{$self->{'rcs'}->{'delta'}->{-order}}, $rev);
  +            while (1) {
  +                $rcs =~ s|^\s*||s;
  +                if ($rcs =~ s/^date\s+($re_date)\s*;//s) {
  +                    $self->{'rcs'}->{'delta'}->{$rev}->{'date'} = $1;
  +                }
  +                elsif ($rcs =~ s/^author\s+($re_id)\s*;//s) {
  +                    $self->{'rcs'}->{'delta'}->{$rev}->{'author'} = $1;
  +                }
  +                elsif ($rcs =~ s/^state(?:\s*($re_id))?\s*;//s) {
  +                    $self->{'rcs'}->{'delta'}->{$rev}->{'state'} = $1;
  +                }
  +                elsif ($rcs =~ s/^branches(?:\s+((?:\s*$re_rev)*))?\s*;//s) {
  +                    $self->{'rcs'}->{'delta'}->{$rev}->{'branches'} = [ split(/\s+/, $1) ];
  +                }
  +                elsif ($rcs =~ s/^next(?:\s*($re_rev))?\s*;//s) {
  +                    $self->{'rcs'}->{'delta'}->{$rev}->{'next'} = $1;
  +                }
  +                elsif ($rcs =~ m/^desc\s+/s) {
  +                    last;
  +                }
  +                elsif ($rcs =~ s/^([a-z]+)(\s*[^;]*);//s) {
  +                    $self->{'rcs'}->{'delta'}->{$rev}->{$1} = $2;
  +                }
  +                else {
  +                    last;
  +                }
  +            }
  +        }
  +        else {
  +            last;
  +        }
  +    }
  +
  +    #   parse description section
  +    $rcs =~ s|^\s*||s;
  +    if ($rcs =~ s/^desc\s+\@($re_str)\@\s*//s) {
  +        $self->{'rcs'}->{'header'}->{'desc'} = $1;
  +        push(@{$self->{'rcs'}->{'header'}->{-order}}, 'desc');
  +    }
  +
  +    #  parse deltatext section(s)
  +    while (1) {
  +        $rcs =~ s|^\s*||s;
  +        if ($rcs =~ s/^($re_rev)//s) {
  +            my $rev = $1;
  +            if (not defined($self->{'rcs'}->{'delta'}->{$rev})) {
  +                croak "deltatext section for unknown revision \"$rev\" found";
  +            }
  +            my $textseen = 0;
  +            while (1) {
  +                $rcs =~ s|^\s*||s;
  +                if ($rcs =~ s/^log\s+\@($re_str)\@\s*//s) {
  +                    $self->{'rcs'}->{'delta'}->{$rev}->{'log'} = $1;
  +                }
  +                elsif ($rcs =~ s/^text\s+\@($re_str)\@\s*//s) {
  +                    $self->{'rcs'}->{'delta'}->{$rev}->{'text'} = $1;
  +                    $textseen = 1;
  +                }
  +                elsif ($textseen == 0 and $rcs =~ s/^([a-z]+)(\s*[^;]*);//s) {
  +                    $self->{'rcs'}->{'delta'}->{$rev}->{$1} = $2;
  +                }
  +                else {
  +                    last;
  +                }
  +            }
  +        }
  +        else {
  +            last;
  +        }
  +    }
  +    return;
  +}
  +
  +sub save ($$) {
  +    my $self = shift;
  +    my ($file) = @_;
  +    my $rcs = '';
  +
  +    #   define known keywords
  +    my @kw_header    = (qw(head branch access symbols locks- strict comment@ expand@));
  +    my @kw_delta     = (qw(date author state branches next));
  +    my @kw_desc      = (qw(desc));
  +    my @kw_deltatext = (qw(log text));
  +
  +    #   generate header section
  +    foreach my $header (@kw_header) {
  +        my $tag = '';
  +        $tag = $1 if ($header =~ s/([@\-])$//s);
  +        my $val = $self->{'rcs'}->{'header'}->{$header};
  +        if (defined($val)) {
  +            $rcs .= $header;
  +            if (ref($val) eq 'ARRAY') {
  +                if (@{$val} > 0) {
  +                    foreach my $v (@{$val}) {
  +                        $rcs .= "\n\t$v";
  +                    }
  +                }
  +            }
  +            elsif (ref($val) eq 'HASH') {
  +                if (keys(%{$val}) > 0) {
  +                    foreach my $v (keys(%{$val})) {
  +                        $rcs .= sprintf("\n\t%s:%s", $v, $val->{$v});
  +                    }
  +                }
  +            }
  +            else {
  +                if ($val ne '') {
  +                    if ($tag eq '@') {
  +                        $val =~ s|\@|\@\@|sg;
  +                        $rcs .= "\t\@$val\@";
  +                    }
  +                    else {
  +                        $rcs .= "\t$val";
  +                    }
  +                }
  +            }
  +            $rcs .= ";";
  +            $rcs .= ($tag eq '-' ? " " : "\n");
  +        }
  +    }
  +    $rcs .= "\n";
  +
  +    #   generate delta section(s)
  +    foreach my $rev (@{$self->{'rcs'}->{'delta'}->{-order}}) {
  +        my $delta = $self->{'rcs'}->{'delta'}->{$rev};
  +        $rcs .= $rev."\n";
  +    }
  +
  +    #   write new RCS file for disk
  +    my $io = new IO::File ">$file"
  +        or croak "RCS file \"$file\": cannot open for writing";
  +    $io->print($rcs);
  +    $io->close;
  +
  +    return;
   }
   
   __END__
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cvsfusion/cvsfusion.pl
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 cvsfusion.pl
  --- ossp-pkg/cvsfusion/cvsfusion.pl	22 Apr 2004 06:56:28 -0000	1.1
  +++ ossp-pkg/cvsfusion/cvsfusion.pl	23 Apr 2004 09:23:38 -0000	1.2
  @@ -1,6 +1,4 @@
  -#!/bin/sh -- # -*- perl -*- -p
  -eval 'exec perl -wS $0 ${1+"$@"}'
  -    if $running_under_some_shell;
  +#!/usr/opkg/bin/perl
   ##
   ##  OSSP cvsfusion - CVS Repository Fusion
   ##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  @@ -119,6 +117,16 @@
       my ($msg) = @_;
       print STDERR $prog->{'name'}.":ERROR: $msg\n";
   }
  +
  +##  TEST
  +
  +my $rcs = new RCS;
  +$rcs->tool("rcs",  "/usr/bin/rcs");
  +$rcs->tool("co",   "/usr/bin/co");
  +$rcs->tool("diff", "/usr/opkg/bin/diff");
  +$rcs->load("bash.spec,v");
  +$rcs->save("bash.spec,v.new");
  +undef $rcs;
   
   __END__
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 23 11:30:37 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A215B7791F; Fri, 23 Apr 2004 11:30:37 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str/ ChangeLog
Message-Id: <20040423093037.A215B7791F@mail.ossp.org>
Date: Fri, 23 Apr 2004 11:30:37 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   23-Apr-2004 11:30:36
  Branch: HEAD                             Handle: 2004042310303600

  Modified files:
    ossp-pkg/str            ChangeLog

  Log:
    add email contact

  Summary:
    Revision    Changes     Path
    1.46        +31 -31     ossp-pkg/str/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.45 -r1.46 ChangeLog
  --- ossp-pkg/str/ChangeLog	17 Feb 2003 15:16:41 -0000	1.45
  +++ ossp-pkg/str/ChangeLog	23 Apr 2004 09:30:36 -0000	1.46
  @@ -13,10 +13,10 @@
    
      *) Added @DEFS@ to $(CFLAGS) in Makefile.in to correctly see things
         like -DHAVE_CONFIG_H stuff during compilation.
  -      [Ralf S. Engelschall]
  +      [Ralf S. Engelschall <rse@engelschall.com>]
   
      *) Fixed memory leaks in test suite.
  -      [Ralf S. Engelschall]
  +      [Ralf S. Engelschall <rse@engelschall.com>]
   
      *) Fixed test suite library (ts.c): the ts_suite_free()
         function performed an illegal iteration for freeing elements (they
  @@ -26,47 +26,47 @@
   
      *) Upgraded to GNU autoconf 2.57, GNU libtool 1.4.3 and
         GNU shtool 1.6.2 build environment.
  -      [Ralf S. Engelschall]
  +      [Ralf S. Engelschall <rse@engelschall.com>]
   
      *) Adjusted copyright messages for new year 2003.
  -      [Ralf S. Engelschall]
  +      [Ralf S. Engelschall <rse@engelschall.com>]
   
    Changes between 0.9.6 and 0.9.7 (28-Dec-2001 to 01-Apr-2002):
   
      *) Use OSSP ts (Test Suite) sub-library for "make check".
  -      [Ralf S. Engelschall]
  +      [Ralf S. Engelschall <rse@engelschall.com>]
   
      *) Switched to full "OSSP str" branding and this way its official
         location from engelschall.com to ossp.org.
  -      [Ralf S. Engelschall]
  +      [Ralf S. Engelschall <rse@engelschall.com>]
   
      *) Upgraded to GNU autoconf 2.53, GNU libtool 1.4.2 and
         GNU shtool 1.6.0 build environment.
  -      [Ralf S. Engelschall]
  +      [Ralf S. Engelschall <rse@engelschall.com>]
   
      *) Fixed str_concat: it included the terminating NUL in copy
         and added a useless NUL.
  -      [Thomas Lotterer]
  +      [Thomas Lotterer <thomas@lotterer.net>]
   
      *) Upgraded to PCRE 3.9
  -      [Ralf S. Engelschall]
  +      [Ralf S. Engelschall <rse@engelschall.com>]
   
    Changes between 0.9.5 and 0.9.6 (16-Aug-2001 to 13-Sep-2001):
   
      *) Switched to devtool stuff
  -      [Ralf S. Engelschall]
  +      [Ralf S. Engelschall <rse@engelschall.com>]
   
      *) Upgraded to PCRE 3.8
  -      [Ralf S. Engelschall]
  +      [Ralf S. Engelschall <rse@engelschall.com>]
   
      *) Fixed "str-config --version"
  -      [Ralf S. Engelschall]
  +      [Ralf S. Engelschall <rse@engelschall.com>]
   
      *) Fixed various memory leaks.
  -      [Ralf S. Engelschall]
  +      [Ralf S. Engelschall <rse@engelschall.com>]
   
      *) Add support for Dmalloc memory debugging library.
  -      [Ralf S. Engelschall]
  +      [Ralf S. Engelschall <rse@engelschall.com>]
   
    Changes between 0.9.4 and 0.9.5 (14-Jul-2000 to 16-Aug-2001):
   
  @@ -80,13 +80,13 @@
         [Peter Simons <simons@cryp.to>]
   
      *) Upgraded to GNU Autoconf 2.52 and GNU Libtool 1.4
  -      [Ralf S. Engelschall]
  +      [Ralf S. Engelschall <rse@engelschall.com>]
   
      *) Upgrade to a stripped down version of PCRE 3.5
  -      [Ralf S. Engelschall]
  +      [Ralf S. Engelschall <rse@engelschall.com>]
   
      *) Upgrade to GNU shtool 1.5.4.
  -      [Ralf S. Engelschall]
  +      [Ralf S. Engelschall <rse@engelschall.com>]
   
      *) Fixed handling of NaN and Inf values in str_format.c
         [Lukas Schroeder <lukas@edeal.de>]
  @@ -95,12 +95,12 @@
         [Joseph Heenan <joseph@picsel.com>]
   
      *) Updated str_version.c to new GNU shtool 1.5.1 format.
  -      [Ralf S. Engelschall]
  +      [Ralf S. Engelschall <rse@engelschall.com>]
   
    Changes between 0.9.3 and 0.9.4 (04-Feb-2000 to 14-Jul-2000):
   
      *) Upgrade to GNU libtool 1.3.5 and GNU shtool 1.5.0.
  -      [Ralf S. Engelschall]
  +      [Ralf S. Engelschall <rse@engelschall.com>]
   
      *) Make sure -lm is used if modf() is not in -lc.
         [Ed Griffiths <edgrif@sanger.ac.uk>, Ralf S. Engelschall]
  @@ -111,18 +111,18 @@
         [Kai Poitschke <kai.poitschke@computer.org>]
   
      *) Fixed return value of str_format() and cleaned up str_format.c
  -      [Ralf S. Engelschall]
  +      [Ralf S. Engelschall <rse@engelschall.com>]
   
    Changes between 0.9.2 and 0.9.3 (04-Feb-2000 to 04-Feb-2000):
   
      *) Added tests to str_test.c for str_span() and str_search().
  -      [Ralf S. Engelschall]
  +      [Ralf S. Engelschall <rse@engelschall.com>]
   
      *) Fixed str_search() by removing bogus optimizations.
  -      [Ralf S. Engelschall]
  +      [Ralf S. Engelschall <rse@engelschall.com>]
   
      *) Fixed str_span().
  -      [Ralf S. Engelschall]
  +      [Ralf S. Engelschall <rse@engelschall.com>]
   
    Changes between 0.9.1 and 0.9.2 (09-Jan-2000 to 04-Feb-2000):
   
  @@ -130,25 +130,25 @@
         str_concat_va and str_format_va. Each str_xxx_va function is the same
         as the str_xxx function except that it can be called with a va_list
         argument instead of the original arguments.
  -      [Ralf S. Engelschall]
  +      [Ralf S. Engelschall <rse@engelschall.com>]
   
      *) Added a new str_base64() function (in str_base64.c) which allows
         one to convert an arbitray a chunk bytes into a NUL-terminated
         Base64 encoded string and vice versa.
  -      [Ralf S. Engelschall]
  +      [Ralf S. Engelschall <rse@engelschall.com>]
   
      *) Added a new str_hash() function (in str_hash.c) which allows one
         to compute hash values of a string. Currently three different
         hashing functions are supported: DJBX33, BJDDJ and MACRC32. This
         is intended for fast use in hashing algorithms and not for use a
         cryptographically strong message digests.
  -      [Ralf S. Engelschall]
  +      [Ralf S. Engelschall <rse@engelschall.com>]
   
      *) Fixed a compile time warning in str_pcre.c
  -      [Ralf S. Engelschall]
  +      [Ralf S. Engelschall <rse@engelschall.com>]
   
      *) Fixed output in str_test.c: consistently use stderr.
  -      [Ralf S. Engelschall]
  +      [Ralf S. Engelschall <rse@engelschall.com>]
   
      *) Fixed substitution string generation in str_parse.c:
         the  string was not explicitly NUL-terminated.
  @@ -164,13 +164,13 @@
         [Alfred Reibenschuh <alfred.reibenschu@chello.at>]
   
      *) Added LICENSE document.
  -      [Ralf S. Engelschall]
  +      [Ralf S. Engelschall <rse@engelschall.com>]
   
      *) Updated the package abstract in README and str.pod
  -      [Ralf S. Engelschall]
  +      [Ralf S. Engelschall <rse@engelschall.com>]
   
    Changes between *GENESIS* and 0.9.0 (16-Nov-1999 to 01-Jan-2000):
   
      *) Created the first Str package version.
  -      [Ralf S. Engelschall]
  +      [Ralf S. Engelschall <rse@engelschall.com>]
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 23 11:59:54 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 59F3177907; Fri, 23 Apr 2004 11:59:54 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str/ devtool.conf
Message-Id: <20040423095954.59F3177907@mail.ossp.org>
Date: Fri, 23 Apr 2004 11:59:54 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   23-Apr-2004 11:59:54
  Branch: HEAD                             Handle: 2004042310595300

  Modified files:
    ossp-pkg/str            devtool.conf

  Log:
    introduce devtool.conf %release

  Summary:
    Revision    Changes     Path
    1.6         +17 -4      ossp-pkg/str/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 devtool.conf
  --- ossp-pkg/str/devtool.conf	19 Mar 2004 14:55:50 -0000	1.5
  +++ ossp-pkg/str/devtool.conf	23 Apr 2004 09:59:53 -0000	1.6
  @@ -19,12 +19,24 @@
           --enable-debug \
           "$@"
   
  +%release
  +    ./devtool version
  +    ./devtool tag
  +    ./devtool dist
  +    ./devtool upload
  +
   %version
       ./shtool version -l c -n "OSSP str" -p "str_" -e str_version.c
       V=`./shtool version -l c -d long str_version.c`
       sed -e "s/Version .*/Version $V/g" <README >README.n
       mv README.n README
   
  +%tag
  +    V=`./shtool version -lc -dshort str_version.c | sed -e 's;\.;_;g'`
  +    echo "+++ tagging CVS sources as STR_${V}"
  +    cvs commit -m 'flush pending changes before tagging'
  +    cvs tag STR_${V}
  +
   %dist
       rm -f str-*.tar.gz
       ./devtool autoclean
  @@ -40,6 +52,11 @@
       gunzip <str-${V}.tar.gz | tar tvf - | head -10; echo "[...]"
       gunzip <str-${V}.tar.gz | tar tvf - | tail -10
   
  +%upload
  +    echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/str/"
  +    V=`./shtool version -lc -dshort str_version.c`
  +    scp str-${V}.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/str/
  +
   %snap
       rm -f str-*.tar.gz
       ./devtool autoclean
  @@ -54,8 +71,4 @@
       ls -l str-SNAP-${D}.tar.gz
       gunzip <str-SNAP-${D}.tar.gz | tar tvf - | head -10; echo "[...]"
       gunzip <str-SNAP-${D}.tar.gz | tar tvf - | tail -10
  -
  -%release
  -    echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/str/"
  -    scp str-*.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/str/
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 23 12:03:10 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B611677921; Fri, 23 Apr 2004 12:03:09 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str/ ChangeLog configure.ac str_format.c str_p.h
Message-Id: <20040423100309.B611677921@mail.ossp.org>
Date: Fri, 23 Apr 2004 12:03:09 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   23-Apr-2004 12:03:09
  Branch: HEAD                             Handle: 2004042311030900

  Modified files:
    ossp-pkg/str            ChangeLog configure.ac str_format.c str_p.h

  Log:
    Replace modf(3) with hand-crafted inlined function to avoid dependency
    to external libm; see Checkin [4512]

  Summary:
    Revision    Changes     Path
    1.47        +9  -0      ossp-pkg/str/ChangeLog
    1.13        +0  -2      ossp-pkg/str/configure.ac
    1.29        +22 -3      ossp-pkg/str/str_format.c
    1.22        +0  -1      ossp-pkg/str/str_p.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.46 -r1.47 ChangeLog
  --- ossp-pkg/str/ChangeLog	23 Apr 2004 09:30:36 -0000	1.46
  +++ ossp-pkg/str/ChangeLog	23 Apr 2004 10:03:09 -0000	1.47
  @@ -9,6 +9,15 @@
   
    ChangeLog
   
  + Changes between 0.9.8 and 0.9.9 (17-Feb-2003 to 23-Apr-2004):
  +
  +   *) Import change introduced in OSSP l2 0.9.7:
  +      Replace modf(3) calls in str_format.c with a hand-crafted
  +      inlined str_modf() function to avoid dependency to external
  +      libm on systems where modf(3) is not part of libc, i.e. Tru64 and
  +      QNX. Reported by Karl Vogel.
  +      [Thomas Lotterer <thomas@lotterer.net>]
  +
    Changes between 0.9.7 and 0.9.8 (01-Apr-2002 to 17-Feb-2003):
    
      *) Added @DEFS@ to $(CFLAGS) in Makefile.in to correctly see things
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/configure.ac
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 configure.ac
  --- ossp-pkg/str/configure.ac	6 Jan 2003 19:13:47 -0000	1.12
  +++ ossp-pkg/str/configure.ac	23 Apr 2004 10:03:09 -0000	1.13
  @@ -29,8 +29,6 @@
   AC_HAVE_FUNCS(memmove memset memcmp memchr)
   AC_HAVE_FUNCS(isnan isinf)
   
  -AC_CHECK_FUNC(modf, , AC_CHECK_LIB(m, modf))
  -
   AC_CHECK_EXTLIB([Dmalloc], dmalloc, dmalloc_debug, dmalloc.h,
                   [AC_DEFINE(WITH_DMALLOC, 1, [Define to 1 if building with Dmalloc])])
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str_format.c
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 str_format.c
  --- ossp-pkg/str/str_format.c	6 Jan 2003 19:13:47 -0000	1.28
  +++ ossp-pkg/str/str_format.c	23 Apr 2004 10:03:09 -0000	1.29
  @@ -134,6 +134,25 @@
   #define str_fcvt(arg,ndigits,decpt,sign,buf) \
           str_cvt((arg), (ndigits), (decpt), (sign), 0, (buf))
   
  +/* inlined modf(3) to avoid dependency to external libm on systems
  +   (like Tru64, QNX, etc) where modf(3) is not part of libc. */
  +static double
  +str_modf(
  +    double arg,
  +    double *iptr)
  +{
  +    double fraction;
  +    double integral;
  +    long trunc;
  +
  +    trunc = (long)arg;
  +    integral = (double)trunc;
  +    fraction = arg - integral;
  +    if (iptr != NULL)
  +        *iptr = integral;
  +    return fraction;
  +}
  +
   static char *
   str_cvt(
       double arg,
  @@ -156,14 +175,14 @@
           *sign = TRUE;
           arg = -arg;
       }
  -    arg = modf(arg, &fi);
  +    arg = str_modf(arg, &fi);
       p1 = &buf[NDIG];
   
       /* Do integer part */
       if (fi != 0) {
           p1 = &buf[NDIG];
           while (fi != 0 && p1 > &buf[0]) {
  -            fj = modf(fi / 10, &fi);
  +            fj = str_modf(fi / 10, &fi);
               *--p1 = (int)((fj + .03) * 10) + '0';
               r2++;
           }
  @@ -186,7 +205,7 @@
       }
       while (p <= p1 && p < &buf[NDIG]) {
           arg *= 10;
  -        arg = modf(arg, &fj);
  +        arg = str_modf(arg, &fj);
           *p++ = (int) fj + '0';
       }
       if (p1 >= &buf[NDIG]) {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str_p.h
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 str_p.h
  --- ossp-pkg/str/str_p.h	6 Jan 2003 19:13:47 -0000	1.21
  +++ ossp-pkg/str/str_p.h	23 Apr 2004 10:03:09 -0000	1.22
  @@ -35,7 +35,6 @@
   #endif
   
   #include <stdlib.h>     /* for malloc, etc. */
  -#include <math.h>       /* for modf(3) */
   #include <string.h>     /* ... */
   
   #include "str.h"
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 23 12:03:38 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 220117792A; Fri, 23 Apr 2004 12:03:38 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str/ README str_version.c
Message-Id: <20040423100338.220117792A@mail.ossp.org>
Date: Fri, 23 Apr 2004 12:03:38 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   23-Apr-2004 12:03:38
  Branch: HEAD                             Handle: 2004042311033700

  Modified files:
    ossp-pkg/str            README str_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.23        +1  -1      ossp-pkg/str/README
    1.17        +9  -9      ossp-pkg/str/str_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/README
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 README
  --- ossp-pkg/str/README	17 Feb 2004 09:21:06 -0000	1.22
  +++ ossp-pkg/str/README	23 Apr 2004 10:03:37 -0000	1.23
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/\__|_|   
   
     OSSP str - String Handling
  -  Version 0.9.8 (17-Feb-2003)
  +  Version 0.9.9 (23-Apr-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str_version.c
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 str_version.c
  --- ossp-pkg/str/str_version.c	17 Feb 2003 15:16:41 -0000	1.16
  +++ ossp-pkg/str/str_version.c	23 Apr 2004 10:03:37 -0000	1.17
  @@ -8,7 +8,7 @@
   #ifndef _STR_VERSION_C_
   #define _STR_VERSION_C_
   
  -#define STR_VERSION 0x009208
  +#define STR_VERSION 0x009209
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _STR_VERSION_C_AS_HEADER_
   
   str_version_t str_version = {
  -    0x009208,
  -    "0.9.8",
  -    "0.9.8 (17-Feb-2003)",
  -    "This is OSSP str, Version 0.9.8 (17-Feb-2003)",
  -    "OSSP str 0.9.8 (17-Feb-2003)",
  -    "OSSP str/0.9.8",
  -    "@(#)OSSP str 0.9.8 (17-Feb-2003)",
  -    "$Id: OSSP str 0.9.8 (17-Feb-2003) $"
  +    0x009209,
  +    "0.9.9",
  +    "0.9.9 (23-Apr-2004)",
  +    "This is OSSP str, Version 0.9.9 (23-Apr-2004)",
  +    "OSSP str 0.9.9 (23-Apr-2004)",
  +    "OSSP str/0.9.9",
  +    "@(#)OSSP str 0.9.9 (23-Apr-2004)",
  +    "$Id: OSSP str 0.9.9 (23-Apr-2004) $"
   };
   
   #endif /* _STR_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 23 12:05:59 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5386377921; Fri, 23 Apr 2004 12:05:59 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ ChangeLog cfg_fmt.c
Message-Id: <20040423100559.5386377921@mail.ossp.org>
Date: Fri, 23 Apr 2004 12:05:59 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   23-Apr-2004 12:05:59
  Branch: HEAD                             Handle: 2004042311055800

  Modified files:
    ossp-pkg/cfg            ChangeLog cfg_fmt.c

  Log:
    Replace modf(3) with hand-crafted inlined function to avoid dependency
    to external libm; see Checkin [4512]

  Summary:
    Revision    Changes     Path
    1.8         +9  -0      ossp-pkg/cfg/ChangeLog
    1.5         +22 -4      ossp-pkg/cfg/cfg_fmt.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	10 Nov 2003 19:15:54 -0000	1.7
  +++ ossp-pkg/cfg/ChangeLog	23 Apr 2004 10:05:58 -0000	1.8
  @@ -8,6 +8,15 @@
   
     CHANGELOG
   
  + Changes between 0.9.2 and 0.9.3 (10-Nov-2003 to 23-Apr-2004):
  +
  +   *) Import change introduced in OSSP l2 0.9.7:
  +      Replace modf(3) calls in cfg_fmt.c with a hand-crafted
  +      inlined cfg_fmt_modf() function to avoid dependency to external
  +      libm on systems where modf(3) is not part of libc, i.e. Tru64 and
  +      QNX. Reported by Karl Vogel.
  +      [Thomas Lotterer <thomas@lotterer.net>]
  +
     Changes between 0.9.1 and 0.9.2 (10-Nov-2003 to 10-Nov-2003)
   
      *) Upgraded build environment to GNU libtool 1.5 and
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_fmt.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 cfg_fmt.c
  --- ossp-pkg/cfg/cfg_fmt.c	6 Jan 2003 11:17:43 -0000	1.4
  +++ ossp-pkg/cfg/cfg_fmt.c	23 Apr 2004 10:05:58 -0000	1.5
  @@ -96,7 +96,6 @@
   #include <stdarg.h>
   #include <string.h>
   #include <ctype.h>
  -#include <math.h>
   
   #include "cfg_fmt.h"
   
  @@ -162,6 +161,25 @@
   #define cfg_fmt_fcvt(arg,ndigits,decpt,sign,buf) \
           cfg_fmt_cvt((arg), (ndigits), (decpt), (sign), 0, (buf))
   
  +/* inlined modf(3) to avoid dependency to external libm on systems
  +   (like Tru64, QNX, etc) where modf(3) is not part of libc. */
  +static double
  +cfg_fmt_modf(
  +    double arg,
  +    double *iptr)
  +{
  +    double fraction;
  +    double integral;
  +    long trunc;
  +
  +    trunc = (long)arg;
  +    integral = (double)trunc;
  +    fraction = arg - integral;
  +    if (iptr != NULL)
  +        *iptr = integral;
  +    return fraction;
  +}
  +
   static char *
   cfg_fmt_cvt(
       double arg,
  @@ -184,14 +202,14 @@
           *sign = TRUE;
           arg = -arg;
       }
  -    arg = modf(arg, &fi);
  +    arg = cfg_fmt_modf(arg, &fi);
       p1 = &buf[NDIG];
   
       /* Do integer part */
       if (fi != 0) {
           p1 = &buf[NDIG];
           while (fi != 0 && p1 > &buf[0]) {
  -            fj = modf(fi / 10, &fi);
  +            fj = cfg_fmt_modf(fi / 10, &fi);
               *--p1 = (int)((fj + .03) * 10) + '0';
               r2++;
           }
  @@ -214,7 +232,7 @@
       }
       while (p <= p1 && p < &buf[NDIG]) {
           arg *= 10;
  -        arg = modf(arg, &fj);
  +        arg = cfg_fmt_modf(arg, &fj);
           *p++ = (int) fj + '0';
       }
       if (p1 >= &buf[NDIG]) {
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 23 12:06:09 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 755827792C; Fri, 23 Apr 2004 12:06:09 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ README cfg_vers.c
Message-Id: <20040423100609.755827792C@mail.ossp.org>
Date: Fri, 23 Apr 2004 12:06:09 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   23-Apr-2004 12:06:09
  Branch: HEAD                             Handle: 2004042311060801

  Modified files:
    ossp-pkg/cfg            README cfg_vers.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.8         +1  -1      ossp-pkg/cfg/README
    1.4         +12 -12     ossp-pkg/cfg/cfg_vers.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/README
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 README
  --- ossp-pkg/cfg/README	10 Nov 2003 19:15:54 -0000	1.7
  +++ ossp-pkg/cfg/README	23 Apr 2004 10:06:08 -0000	1.8
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \___|_|  \__, |
                                                |___/
     OSSP cfg - Configuration Parsing
  -  Version 0.9.2 (10-Nov-2003)
  +  Version 0.9.3 (23-Apr-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_vers.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 cfg_vers.c
  --- ossp-pkg/cfg/cfg_vers.c	10 Nov 2003 19:15:54 -0000	1.3
  +++ ossp-pkg/cfg/cfg_vers.c	23 Apr 2004 10:06:09 -0000	1.4
  @@ -8,7 +8,7 @@
   #ifndef _CFG_VERS_C_
   #define _CFG_VERS_C_
   
  -#define __CFG_VERSION 0x009202
  +#define CFG_VERSION 0x009203
   
   typedef struct {
       const int   v_hex;
  @@ -19,9 +19,9 @@
       const char *v_web;
       const char *v_sccs;
       const char *v_rcs;
  -} __cfg_version_t;
  +} cfg_version_t;
   
  -extern __cfg_version_t __cfg_version;
  +extern cfg_version_t cfg_version;
   
   #endif /* _CFG_VERS_C_ */
   
  @@ -31,15 +31,15 @@
   #include "cfg_vers.c"
   #undef  _CFG_VERS_C_AS_HEADER_
   
  -__cfg_version_t __cfg_version = {
  -    0x009202,
  -    "0.9.2",
  -    "0.9.2 (10-Nov-2003)",
  -    "This is OSSP cfg, Version 0.9.2 (10-Nov-2003)",
  -    "OSSP cfg 0.9.2 (10-Nov-2003)",
  -    "OSSP cfg/0.9.2",
  -    "@(#)OSSP cfg 0.9.2 (10-Nov-2003)",
  -    "$Id: cfg_vers.c,v 1.3 2003/11/10 19:15:54 rse Exp $"
  +cfg_version_t cfg_version = {
  +    0x009203,
  +    "0.9.3",
  +    "0.9.3 (23-Apr-2004)",
  +    "This is OSSP cfg, Version 0.9.3 (23-Apr-2004)",
  +    "OSSP cfg 0.9.3 (23-Apr-2004)",
  +    "OSSP cfg/0.9.3",
  +    "@(#)OSSP cfg 0.9.3 (23-Apr-2004)",
  +    "$Id: cfg_vers.c,v 1.4 2004/04/23 10:06:09 thl Exp $"
   };
   
   #endif /* _CFG_VERS_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 23 12:25:23 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2529B778A7; Fri, 23 Apr 2004 12:25:23 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ cfg-config.in cfg_vers.c devtool.conf
Message-Id: <20040423102523.2529B778A7@mail.ossp.org>
Date: Fri, 23 Apr 2004 12:25:23 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   23-Apr-2004 12:25:22
  Branch: HEAD                             Handle: 2004042311252200

  Modified files:
    ossp-pkg/cfg            cfg-config.in cfg_vers.c devtool.conf

  Log:
    remove sa relict from cfg-config.in; modify devtool.conf %version to
    prefix with additional underscores and run it to create a clean
    cfg_vers.c whose cfg_version does not conflict with cfg_version() in
    cfg_main

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/cfg/cfg-config.in
    1.5         +4  -4      ossp-pkg/cfg/cfg_vers.c
    1.15        +1  -1      ossp-pkg/cfg/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg-config.in
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 cfg-config.in
  --- ossp-pkg/cfg/cfg-config.in	6 Jan 2003 11:17:43 -0000	1.3
  +++ ossp-pkg/cfg/cfg-config.in	23 Apr 2004 10:25:22 -0000	1.4
  @@ -82,7 +82,7 @@
               exit 0
               ;;
           --version|-v)
  -            echo "OSSP sa $cfg_version"
  +            echo "OSSP cfg $cfg_version"
               exit 0
               ;;
           --all)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_vers.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 cfg_vers.c
  --- ossp-pkg/cfg/cfg_vers.c	23 Apr 2004 10:06:09 -0000	1.4
  +++ ossp-pkg/cfg/cfg_vers.c	23 Apr 2004 10:25:22 -0000	1.5
  @@ -8,7 +8,7 @@
   #ifndef _CFG_VERS_C_
   #define _CFG_VERS_C_
   
  -#define CFG_VERSION 0x009203
  +#define __CFG_VERSION 0x009203
   
   typedef struct {
       const int   v_hex;
  @@ -19,9 +19,9 @@
       const char *v_web;
       const char *v_sccs;
       const char *v_rcs;
  -} cfg_version_t;
  +} __cfg_version_t;
   
  -extern cfg_version_t cfg_version;
  +extern __cfg_version_t __cfg_version;
   
   #endif /* _CFG_VERS_C_ */
   
  @@ -31,7 +31,7 @@
   #include "cfg_vers.c"
   #undef  _CFG_VERS_C_AS_HEADER_
   
  -cfg_version_t cfg_version = {
  +__cfg_version_t __cfg_version = {
       0x009203,
       "0.9.3",
       "0.9.3 (23-Apr-2004)",
  @@ -39,7 +39,7 @@
       "OSSP cfg 0.9.3 (23-Apr-2004)",
       "OSSP cfg/0.9.3",
       "@(#)OSSP cfg 0.9.3 (23-Apr-2004)",
  -    "$Id: cfg_vers.c,v 1.4 2004/04/23 10:06:09 thl Exp $"
  +    "$Id: cfg_vers.c,v 1.5 2004/04/23 10:25:22 thl Exp $"
   };
   
   #endif /* _CFG_VERS_C_AS_HEADER_ */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 devtool.conf
  --- ossp-pkg/cfg/devtool.conf	19 Mar 2004 15:43:32 -0000	1.14
  +++ ossp-pkg/cfg/devtool.conf	23 Apr 2004 10:25:22 -0000	1.15
  @@ -53,7 +53,7 @@
       ./devtool upload
   
   %version
  -    ./shtool version -lc -n "OSSP cfg" -p "cfg_" -e cfg_vers.c
  +    ./shtool version -lc -n "OSSP cfg" -p "__cfg_" -e cfg_vers.c
       V=`./shtool version -lc -dlong cfg_vers.c`
       sed -e "s/Version .*(.*)/Version $V/g" <README >README.n && mv README.n README
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 23 12:28:02 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D6FFD77902; Fri, 23 Apr 2004 12:28:01 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ cfg_vers.c
Message-Id: <20040423102801.D6FFD77902@mail.ossp.org>
Date: Fri, 23 Apr 2004 12:28:01 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   23-Apr-2004 12:28:01
  Branch: HEAD                             Handle: 2004042311280100

  Modified files:
    ossp-pkg/cfg            cfg_vers.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.6         +0  -0      ossp-pkg/cfg/cfg_vers.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_vers.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 cfg_vers.c
  --- ossp-pkg/cfg/cfg_vers.c	23 Apr 2004 10:25:22 -0000	1.5
  +++ ossp-pkg/cfg/cfg_vers.c	23 Apr 2004 10:28:01 -0000	1.6
  @@ -39,7 +39,7 @@
       "OSSP cfg 0.9.3 (23-Apr-2004)",
       "OSSP cfg/0.9.3",
       "@(#)OSSP cfg 0.9.3 (23-Apr-2004)",
  -    "$Id: cfg_vers.c,v 1.5 2004/04/23 10:25:22 thl Exp $"
  +    "$Id: cfg_vers.c,v 1.6 2004/04/23 10:28:01 thl Exp $"
   };
   
   #endif /* _CFG_VERS_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 23 12:29:57 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E1B1D77902; Fri, 23 Apr 2004 12:29:56 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ ChangeLog README fsl_version.c
Message-Id: <20040423102956.E1B1D77902@mail.ossp.org>
Date: Fri, 23 Apr 2004 12:29:56 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   23-Apr-2004 12:29:56
  Branch: HEAD                             Handle: 2004042311295600

  Modified files:
    ossp-pkg/fsl            ChangeLog README fsl_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.33        +10 -0      ossp-pkg/fsl/ChangeLog
    1.44        +1  -1      ossp-pkg/fsl/README
    1.31        +9  -9      ossp-pkg/fsl/fsl_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 ChangeLog
  --- ossp-pkg/fsl/ChangeLog	22 Apr 2004 15:50:37 -0000	1.32
  +++ ossp-pkg/fsl/ChangeLog	23 Apr 2004 10:29:56 -0000	1.33
  @@ -8,12 +8,22 @@
   
     CHANGELOG
   
  +  Changes between 1.5a2 and 1.5a3 (23-Apr-2004)
  +
  +    *) Use updated OSSP lib_cfg 0.9.3 to remove dependency to external
  +       libm caused by modf(3).
  +       [Thomas Lotterer <thomas@lotterer.net>]
  +
     Changes between 1.5a1 and 1.5a2 (22-Apr-2004)
   
       *) Use updated OSSP lib_l2 0.9.8 to fix building on Solaris 2.6
          [Thomas Lotterer <thomas@lotterer.net>]
   
     Changes between 1.4.0 and 1.5a1 (22-Apr-2004)
  +
  +    *) Use updated OSSP lib_l2 0.9.7 to remove dependency to external
  +       libm caused by modf(3).
  +       [Thomas Lotterer <thomas@lotterer.net>]
   
       *) Relocate vsyslog() function to avoid wrong implicit declaration
          on platforms not providing any vsyslog(3), i.e. Tru64. Reported
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/README
  ============================================================================
  $ cvs diff -u -r1.43 -r1.44 README
  --- ossp-pkg/fsl/README	22 Apr 2004 15:50:37 -0000	1.43
  +++ ossp-pkg/fsl/README	23 Apr 2004 10:29:56 -0000	1.44
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_| |___/_|
    
     OSSP fsl - Faking/Flexible Syslog Library
  -  Version 1.5a2 (22-Apr-2004)
  +  Version 1.5a3 (23-Apr-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl_version.c
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 fsl_version.c
  --- ossp-pkg/fsl/fsl_version.c	22 Apr 2004 15:50:37 -0000	1.30
  +++ ossp-pkg/fsl/fsl_version.c	23 Apr 2004 10:29:56 -0000	1.31
  @@ -8,7 +8,7 @@
   #ifndef _FSL_VERSION_C_
   #define _FSL_VERSION_C_
   
  -#define FSL_VERSION 0x105002
  +#define FSL_VERSION 0x105003
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _FSL_VERSION_C_AS_HEADER_
   
   fsl_version_t fsl_version = {
  -    0x105002,
  -    "1.5a2",
  -    "1.5a2 (22-Apr-2004)",
  -    "This is OSSP fsl, Version 1.5a2 (22-Apr-2004)",
  -    "OSSP fsl 1.5a2 (22-Apr-2004)",
  -    "OSSP fsl/1.5a2",
  -    "@(#)OSSP fsl 1.5a2 (22-Apr-2004)",
  -    "$Id: fsl_version.c,v 1.30 2004/04/22 15:50:37 thl Exp $"
  +    0x105003,
  +    "1.5a3",
  +    "1.5a3 (23-Apr-2004)",
  +    "This is OSSP fsl, Version 1.5a3 (23-Apr-2004)",
  +    "OSSP fsl 1.5a3 (23-Apr-2004)",
  +    "OSSP fsl/1.5a3",
  +    "@(#)OSSP fsl 1.5a3 (23-Apr-2004)",
  +    "$Id: fsl_version.c,v 1.31 2004/04/23 10:29:56 thl Exp $"
   };
   
   #endif /* _FSL_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 23 12:32:47 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8950F77902; Fri, 23 Apr 2004 12:32:47 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ ChangeLog
Message-Id: <20040423103247.8950F77902@mail.ossp.org>
Date: Fri, 23 Apr 2004 12:32:47 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   23-Apr-2004 12:32:47
  Branch: HEAD                             Handle: 2004042311324700

  Modified files:
    ossp-pkg/l2             ChangeLog

  Log:
    correct wrong filename in log

  Summary:
    Revision    Changes     Path
    1.17        +1  -1      ossp-pkg/l2/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 ChangeLog
  --- ossp-pkg/l2/ChangeLog	22 Apr 2004 15:46:34 -0000	1.16
  +++ ossp-pkg/l2/ChangeLog	23 Apr 2004 10:32:47 -0000	1.17
  @@ -18,7 +18,7 @@
   
     Changes between 0.9.6 and 0.9.7 (21-Apr-2004 to 22-Apr-2004)
   
  -    *) Replace modf(3) calls in l2_util_format.c with a hand-crafted
  +    *) Replace modf(3) calls in l2_ut_format.c with a hand-crafted
          inlined l2_util_modf() function to avoid dependency to external
          libm on systems where modf(3) is not part of libc, i.e. Tru64 and
          QNX. Reported by Karl Vogel.
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 23 12:36:25 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E32F877902; Fri, 23 Apr 2004 12:36:24 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ README lmtp2nntp_version.c
Message-Id: <20040423103624.E32F877902@mail.ossp.org>
Date: Fri, 23 Apr 2004 12:36:24 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   23-Apr-2004 12:36:24
  Branch: HEAD                             Handle: 2004042311362400

  Modified files:
    ossp-pkg/lmtp2nntp      README lmtp2nntp_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.38        +1  -1      ossp-pkg/lmtp2nntp/README
    1.19        +9  -9      ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/README
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 README
  --- ossp-pkg/lmtp2nntp/README	22 Apr 2004 19:31:52 -0000	1.37
  +++ ossp-pkg/lmtp2nntp/README	23 Apr 2004 10:36:24 -0000	1.38
  @@ -5,7 +5,7 @@
     |_|_|_| \___/|____/____/|_|    |_|_||_||_|\__| .__/____|_||_|_||_|\__| .__/
                                                  |_|                     |_|
     OSSP lmtp2nntp - Mail to News Gateway
  -  Version 1.3a1 (22-Apr-2004)
  +  Version 1.3a2 (23-Apr-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 lmtp2nntp_version.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	22 Apr 2004 19:31:52 -0000	1.18
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	23 Apr 2004 10:36:24 -0000	1.19
  @@ -8,7 +8,7 @@
   #ifndef _LMTP2NNTP_VERSION_C_
   #define _LMTP2NNTP_VERSION_C_
   
  -#define LMTP2NNTP_VERSION 0x103001
  +#define LMTP2NNTP_VERSION 0x103002
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _LMTP2NNTP_VERSION_C_AS_HEADER_
   
   lmtp2nntp_version_t lmtp2nntp_version = {
  -    0x103001,
  -    "1.3a1",
  -    "1.3a1 (22-Apr-2004)",
  -    "This is OSSP lmtp2nntp, Version 1.3a1 (22-Apr-2004)",
  -    "OSSP lmtp2nntp 1.3a1 (22-Apr-2004)",
  -    "OSSP lmtp2nntp/1.3a1",
  -    "@(#)OSSP lmtp2nntp 1.3a1 (22-Apr-2004)",
  -    "$Id: lmtp2nntp_version.c,v 1.18 2004/04/22 19:31:52 thl Exp $"
  +    0x103002,
  +    "1.3a2",
  +    "1.3a2 (23-Apr-2004)",
  +    "This is OSSP lmtp2nntp, Version 1.3a2 (23-Apr-2004)",
  +    "OSSP lmtp2nntp 1.3a2 (23-Apr-2004)",
  +    "OSSP lmtp2nntp/1.3a2",
  +    "@(#)OSSP lmtp2nntp 1.3a2 (23-Apr-2004)",
  +    "$Id: lmtp2nntp_version.c,v 1.19 2004/04/23 10:36:24 thl Exp $"
   };
   
   #endif /* _LMTP2NNTP_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 23 14:21:45 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9F22577529; Fri, 23 Apr 2004 14:21:44 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvsfusion/ RCS.pm
Message-Id: <20040423122144.9F22577529@mail.ossp.org>
Date: Fri, 23 Apr 2004 14:21:44 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Apr-2004 14:21:44
  Branch: HEAD                             Handle: 2004042313214400

  Modified files:
    ossp-pkg/cvsfusion      RCS.pm

  Log:
    first cut of mostly complete loading and saving functionality

  Summary:
    Revision    Changes     Path
    1.3         +101 -14    ossp-pkg/cvsfusion/RCS.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cvsfusion/RCS.pm
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 RCS.pm
  --- ossp-pkg/cvsfusion/RCS.pm	23 Apr 2004 09:23:38 -0000	1.2
  +++ ossp-pkg/cvsfusion/RCS.pm	23 Apr 2004 12:21:44 -0000	1.3
  @@ -94,6 +94,20 @@
       return $old;
   }
   
  +#  quote/unquote a RCS string
  +sub _string_quote {
  +    my ($str) = @_;
  +    $str =~ s|\@|\@\@|sg;
  +    $str = '@' . $str . '@';
  +    return $str;
  +}
  +sub _string_unquote {
  +    my ($str) = @_;
  +    $str =~ s|^\@(.*)\@$|$1|s;
  +    $str =~ s|\@\@|\@|sg;
  +    return $str;
  +}
  +
   sub load ($$) {
       my $self = shift;
       my ($file) = @_;
  @@ -137,14 +151,20 @@
               push(@{$self->{'rcs'}->{'header'}->{-order}}, 'access');
           }
           elsif ($rcs =~ s/^symbols((?:\s+$re_sym:$re_rev)*)\s*;//s) {
  -            my $symbols = {};
  -            map { $symbols->{$1} = $2 if (m/^(.+):(.+)$/s); } split(/\s+/, $1);
  +            my $symbols = { -order => [] };
  +            map { if (m/^(.+):(.+)$/s) {
  +                $symbols->{$1} = $2;
  +                push(@{$symbols->{-order}}, $1);
  +            } } split(/\s+/, $1);
               $self->{'rcs'}->{'header'}->{'symbols'} = $symbols;
               push(@{$self->{'rcs'}->{'header'}->{-order}}, 'symbols');
           }
           elsif ($rcs =~ s/^locks((?:\s+$re_id:$re_rev)*)\s*;//s) {
  -            my $locks = {};
  -            map { $locks->{$1} = $2 if (m/^(.+):(.+)$/); } split(/\s+/, $1);
  +            my $locks = { -order => [] };
  +            map { if (m/^(.+):(.+)$/s) {
  +                $locks->{$1} = $2;
  +                push(@{$locks->{-order}}, $1);
  +            } } split(/\s+/, $1);
               $self->{'rcs'}->{'header'}->{'locks'} = $locks;
               push(@{$self->{'rcs'}->{'header'}->{-order}}, 'locks');
           }
  @@ -153,11 +173,11 @@
               push(@{$self->{'rcs'}->{'header'}->{-order}}, 'strict');
           }
           elsif ($rcs =~ s/^comment\s+\@($re_str)\@\s*;//s) {
  -            $self->{'rcs'}->{'header'}->{'comment'} = $1;
  +            $self->{'rcs'}->{'header'}->{'comment'} = &_string_unquote($1);
               push(@{$self->{'rcs'}->{'header'}->{-order}}, 'comment');
           }
           elsif ($rcs =~ s/^expand\s+\@($re_str)\@\s*;//s) {
  -            $self->{'rcs'}->{'header'}->{'expand'} = $1;
  +            $self->{'rcs'}->{'header'}->{'expand'} = &_string_unquote($1);
               push(@{$self->{'rcs'}->{'header'}->{-order}}, 'expand');
           }
           elsif ($rcs =~ s/^([a-z]+)(\s*[^;]*);//s) {
  @@ -228,10 +248,10 @@
               while (1) {
                   $rcs =~ s|^\s*||s;
                   if ($rcs =~ s/^log\s+\@($re_str)\@\s*//s) {
  -                    $self->{'rcs'}->{'delta'}->{$rev}->{'log'} = $1;
  +                    $self->{'rcs'}->{'delta'}->{$rev}->{'log'} = &_string_unquote($1);
                   }
                   elsif ($rcs =~ s/^text\s+\@($re_str)\@\s*//s) {
  -                    $self->{'rcs'}->{'delta'}->{$rev}->{'text'} = $1;
  +                    $self->{'rcs'}->{'delta'}->{$rev}->{'text'} = &_string_unquote($1);
                       $textseen = 1;
                   }
                   elsif ($textseen == 0 and $rcs =~ s/^([a-z]+)(\s*[^;]*);//s) {
  @@ -261,7 +281,11 @@
       my @kw_deltatext = (qw(log text));
   
       #   generate header section
  -    foreach my $header (@kw_header) {
  +    foreach my $header (
  +        @kw_header,
  +        ( grep { not grep(/^\Q$_\E$/, @kw_header) }
  +          @{$self->{'rcs'}->{'header'}->{-order}}  )
  +    ) {
           my $tag = '';
           $tag = $1 if ($header =~ s/([@\-])$//s);
           my $val = $self->{'rcs'}->{'header'}->{$header};
  @@ -276,16 +300,22 @@
               }
               elsif (ref($val) eq 'HASH') {
                   if (keys(%{$val}) > 0) {
  -                    foreach my $v (keys(%{$val})) {
  -                        $rcs .= sprintf("\n\t%s:%s", $v, $val->{$v});
  +                    if (defined($val->{-order})) {
  +                        foreach my $v (@{$val->{-order}}) {
  +                            $rcs .= sprintf("\n\t%s:%s", $v, $val->{$v});
  +                        }
  +                    }
  +                    else {
  +                        foreach my $v (keys(%{$val})) {
  +                            $rcs .= sprintf("\n\t%s:%s", $v, $val->{$v});
  +                        }
                       }
                   }
               }
               else {
                   if ($val ne '') {
                       if ($tag eq '@') {
  -                        $val =~ s|\@|\@\@|sg;
  -                        $rcs .= "\t\@$val\@";
  +                        $rcs .= "\t" . &_string_quote($val);
                       }
                       else {
                           $rcs .= "\t$val";
  @@ -299,9 +329,66 @@
       $rcs .= "\n";
   
       #   generate delta section(s)
  -    foreach my $rev (@{$self->{'rcs'}->{'delta'}->{-order}}) {
  +    sub revlist ($$) {
  +        my ($self, $branchfirst) = @_;
  +        my @revs = ();
  +        &nextrev(\@revs, $self->{'rcs'}->{'header'}->{'head'}, $branchfirst);
  +        sub nextrev ($$$) {
  +            my ($revs, $rev, $branchfirst) = @_;
  +            push(@{$revs}, $rev);
  +            my $next     = $self->{'rcs'}->{'delta'}->{$rev}->{'next'};
  +            my $branches = $self->{'rcs'}->{'delta'}->{$rev}->{'branches'};
  +            if ($branchfirst) {
  +                foreach my $branch (@{$branches}) {
  +                    &nextrev($revs, $branch, $branchfirst);
  +                }
  +                if (defined($next) and $next ne '') {
  +                    &nextrev($revs, $next, $branchfirst);
  +                }
  +            }
  +            else {
  +                if (defined($next) and $next ne '') {
  +                    &nextrev($revs, $next, $branchfirst);
  +                }
  +                foreach my $branch (@{$branches}) {
  +                    &nextrev($revs, $branch, $branchfirst);
  +                }
  +            }
  +            return;
  +        }
  +        return @revs;
  +    }
  +    my @revlist = &revlist($self, 0);
  +    foreach my $rev (@revlist) {
  +        my $delta = $self->{'rcs'}->{'delta'}->{$rev};
  +        $rcs .= "\n";
  +        $rcs .= $rev."\n";
  +        $rcs .= "date\t" . $delta->{'date'} . ";\t";
  +        $rcs .= "author " . $delta->{'author'} . ";\t";
  +        $rcs .= "state " . $delta->{'state'} . ";\n";
  +        $rcs .= "branches";
  +        if (@{$delta->{'branches'}} > 0) {
  +            foreach my $v (@{$delta->{'branches'}}) {
  +                $rcs .= "\n\t$v";
  +            }
  +        }
  +        $rcs .= ";\n";
  +        $rcs .= "next\t" . $delta->{'next'} . ";\n";
  +    }
  +
  +    #   generate description section
  +    my $desc = $self->{'rcs'}->{'header'}->{'desc'};
  +    $rcs .= "\n\ndesc\n" . &_string_quote($desc) . "\n";
  +
  +    #   generate deltatext section(s)
  +    @revlist = &revlist($self, 1);
  +    foreach my $rev (@revlist) {
           my $delta = $self->{'rcs'}->{'delta'}->{$rev};
  +        $rcs .= "\n";
  +        $rcs .= "\n";
           $rcs .= $rev."\n";
  +        $rcs .= "log\n" . &_string_quote($delta->{'log'}) . "\n";
  +        $rcs .= "text\n" . &_string_quote($delta->{'text'}) . "\n";
       }
   
       #   write new RCS file for disk
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 23 15:09:51 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 151F877527; Fri, 23 Apr 2004 15:09:51 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvsfusion/ RCS.pm
Message-Id: <20040423130951.151F877527@mail.ossp.org>
Date: Fri, 23 Apr 2004 15:09:51 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Apr-2004 15:09:50
  Branch: HEAD                             Handle: 2004042314095000

  Modified files:
    ossp-pkg/cvsfusion      RCS.pm

  Log:
    complete code cleanups and documentation

  Summary:
    Revision    Changes     Path
    1.4         +176 -85    ossp-pkg/cvsfusion/RCS.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cvsfusion/RCS.pm
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 RCS.pm
  --- ossp-pkg/cvsfusion/RCS.pm	23 Apr 2004 12:21:44 -0000	1.3
  +++ ossp-pkg/cvsfusion/RCS.pm	23 Apr 2004 13:09:50 -0000	1.4
  @@ -38,12 +38,16 @@
   @ISA       = qw(Exporter);
   @EXPORT_OK = qw(new destroy DESTROY dump);
   
  -sub new ($) {
  -    my $proto = shift;
  +#   create new object
  +sub new ($;$) {
  +    my ($proto, $file) = @_;
  +
  +    #   create new object
       my $class = ref($proto) || $proto;
       my $self = {};
       bless ($self, $class);
   
  +    #   initialize object
       $self->{'tool'} = {
           'rcs'  => 'rcs',
           'co'   => 'co',
  @@ -51,23 +55,30 @@
       };
       $self->{'rcs'} = {};
   
  +    #   optionally load file into object
  +    $rcs->load($file) if (defined($file));
  +
  +    #   return new object
       return $self;
   }
   
  +#   destroy object (explicit destructor)
   sub destroy ($) {
  -    my $self = shift;
  +    my ($self) = @_;
       return;
   }
   
  +#   destroy object (implicit destructor)
   sub DESTROY ($) {
  -    my $self = shift;
  +    my ($self) = @_;
       $self->destroy;
       return;
   }
   
  +#   dump object internals (debugging only)
   sub dump ($;$) {
  -    my $self = shift;
  -    my $name = shift || "xxx";
  +    my ($self, $name) = @_;
  +    $name ||= "rcs";
       eval {
           use Data::Dumper;
       };
  @@ -81,9 +92,9 @@
       return $dump;
   }
   
  +#   get and/or set paths to external tools
   sub tool ($;$) {
  -    my $self = shift;
  -    my ($tool, $path) = @_;
  +    my ($self, $tool, $path) = @_;
       my $old = $self->{'tool'}->{$tool};
       if (not defined($old)) {
           croak "tool \"$tool\" not known";
  @@ -94,13 +105,15 @@
       return $old;
   }
   
  -#  quote/unquote a RCS string
  +#   INTERNAL: quote a RCS string
   sub _string_quote {
       my ($str) = @_;
       $str =~ s|\@|\@\@|sg;
       $str = '@' . $str . '@';
       return $str;
   }
  +
  +#   INTERNAL: unquote a RCS string
   sub _string_unquote {
       my ($str) = @_;
       $str =~ s|^\@(.*)\@$|$1|s;
  @@ -108,9 +121,9 @@
       return $str;
   }
   
  +#   load an RCS file into object
   sub load ($$) {
  -    my $self = shift;
  -    my ($file) = @_;
  +    my ($self, $file) = @_;
   
       #   read RCS file into buffer
       my $io = new IO::File "<$file"
  @@ -119,6 +132,17 @@
       $rcs .= $_ while (<$io>);
       $io->close;
   
  +    #   parse RCS file content into object
  +    $self->parse($rcs);
  +
  +    return;
  +}
  +
  +#   parse a RCS file content into object
  +#   (see rcsfile(5) for reference)
  +sub parse ($$) {
  +    my ($self, $rcs) = @_;
  +
       #   clear RCS structure
       $self->{'rcs'} = {
           'header'    => { -order => [] },
  @@ -266,12 +290,88 @@
               last;
           }
       }
  +
       return;
   }
   
  +#   INTERNAL: return ordered list of revisions
  +#   (either in branch-first or next-first traversal order)
  +sub _revlist ($$) {
  +    my ($self, $branchfirst) = @_;
  +    my @revs = ();
  +    &nextrev(\@revs, $self->{'rcs'}->{'header'}->{'head'}, $branchfirst);
  +    sub nextrev ($$$) {
  +        my ($revs, $rev, $branchfirst) = @_;
  +        push(@{$revs}, $rev);
  +        my $next     = $self->{'rcs'}->{'delta'}->{$rev}->{'next'};
  +        my $branches = $self->{'rcs'}->{'delta'}->{$rev}->{'branches'};
  +        if ($branchfirst) {
  +            foreach my $branch (@{$branches}) {
  +                &nextrev($revs, $branch, $branchfirst); 
  +            }
  +            &nextrev($revs, $next, $branchfirst) if (defined($next) and $next ne '');
  +        }
  +        else {
  +            &nextrev($revs, $next, $branchfirst) if (defined($next) and $next ne '');
  +            foreach my $branch (@{$branches}) {
  +                &nextrev($revs, $branch, $branchfirst); 
  +            }
  +        }
  +        return;
  +    }
  +    return @revs;
  +}
  +
  +#   INTERNAL: generate output of a value in RCS syntax and layout
  +sub _genvalue ($$) {
  +    my ($val, $tag) = @_;
  +    my $rcs = '';
  +    if (ref($val) eq 'ARRAY' and @{$val} > 0) {
  +        foreach my $v (@{$val}) {
  +            $rcs .= "\n\t$v";
  +        }
  +    }
  +    elsif (ref($val) eq 'HASH' and keys(%{$val}) > 0) {
  +        if (defined($val->{-order})) {
  +            foreach my $v (@{$val->{-order}}) {
  +                $rcs .= sprintf("\n\t%s:%s", $v, $val->{$v});
  +            }
  +        }
  +        else {
  +            foreach my $v (keys(%{$val})) {
  +                $rcs .= sprintf("\n\t%s:%s", $v, $val->{$v});
  +            }
  +        }
  +    }
  +    elsif (not ref($val) and $val ne '') {
  +        if ($tag eq '@') {
  +            $rcs .= "\t" . &_string_quote($val);
  +        }
  +        else {
  +            $rcs .= "\t$val";
  +        }
  +    }
  +    return $rcs;
  +}
  +
  +#   save object into RCS file
  +#   (see rcsfile(5) for reference)
   sub save ($$) {
  -    my $self = shift;
  -    my ($file) = @_;
  +    my ($self, $file) = @_;
  +
  +    #   format object as RCS file content
  +    my $rcs = $self->format();
  +
  +    #   write RCS file content to RCS file
  +    my $io = new IO::File ">$file"
  +        or croak "RCS file \"$file\": cannot open for writing";
  +    $io->print($rcs);
  +    $io->close;
  +}
  +
  +#   format object as RCS file content
  +sub format ($) {
  +    my ($self) = @_;
       my $rcs = '';
   
       #   define known keywords
  @@ -290,75 +390,14 @@
           $tag = $1 if ($header =~ s/([@\-])$//s);
           my $val = $self->{'rcs'}->{'header'}->{$header};
           if (defined($val)) {
  -            $rcs .= $header;
  -            if (ref($val) eq 'ARRAY') {
  -                if (@{$val} > 0) {
  -                    foreach my $v (@{$val}) {
  -                        $rcs .= "\n\t$v";
  -                    }
  -                }
  -            }
  -            elsif (ref($val) eq 'HASH') {
  -                if (keys(%{$val}) > 0) {
  -                    if (defined($val->{-order})) {
  -                        foreach my $v (@{$val->{-order}}) {
  -                            $rcs .= sprintf("\n\t%s:%s", $v, $val->{$v});
  -                        }
  -                    }
  -                    else {
  -                        foreach my $v (keys(%{$val})) {
  -                            $rcs .= sprintf("\n\t%s:%s", $v, $val->{$v});
  -                        }
  -                    }
  -                }
  -            }
  -            else {
  -                if ($val ne '') {
  -                    if ($tag eq '@') {
  -                        $rcs .= "\t" . &_string_quote($val);
  -                    }
  -                    else {
  -                        $rcs .= "\t$val";
  -                    }
  -                }
  -            }
  -            $rcs .= ";";
  +            $rcs .= $header . &_genvalue($val, $tag). ";";
               $rcs .= ($tag eq '-' ? " " : "\n");
           }
       }
       $rcs .= "\n";
   
       #   generate delta section(s)
  -    sub revlist ($$) {
  -        my ($self, $branchfirst) = @_;
  -        my @revs = ();
  -        &nextrev(\@revs, $self->{'rcs'}->{'header'}->{'head'}, $branchfirst);
  -        sub nextrev ($$$) {
  -            my ($revs, $rev, $branchfirst) = @_;
  -            push(@{$revs}, $rev);
  -            my $next     = $self->{'rcs'}->{'delta'}->{$rev}->{'next'};
  -            my $branches = $self->{'rcs'}->{'delta'}->{$rev}->{'branches'};
  -            if ($branchfirst) {
  -                foreach my $branch (@{$branches}) {
  -                    &nextrev($revs, $branch, $branchfirst);
  -                }
  -                if (defined($next) and $next ne '') {
  -                    &nextrev($revs, $next, $branchfirst);
  -                }
  -            }
  -            else {
  -                if (defined($next) and $next ne '') {
  -                    &nextrev($revs, $next, $branchfirst);
  -                }
  -                foreach my $branch (@{$branches}) {
  -                    &nextrev($revs, $branch, $branchfirst);
  -                }
  -            }
  -            return;
  -        }
  -        return @revs;
  -    }
  -    my @revlist = &revlist($self, 0);
  +    my @revlist = &_revlist($self, 0);
       foreach my $rev (@revlist) {
           my $delta = $self->{'rcs'}->{'delta'}->{$rev};
           $rcs .= "\n";
  @@ -381,7 +420,7 @@
       $rcs .= "\n\ndesc\n" . &_string_quote($desc) . "\n";
   
       #   generate deltatext section(s)
  -    @revlist = &revlist($self, 1);
  +    @revlist = &_revlist($self, 1);
       foreach my $rev (@revlist) {
           my $delta = $self->{'rcs'}->{'delta'}->{$rev};
           $rcs .= "\n";
  @@ -391,13 +430,7 @@
           $rcs .= "text\n" . &_string_quote($delta->{'text'}) . "\n";
       }
   
  -    #   write new RCS file for disk
  -    my $io = new IO::File ">$file"
  -        or croak "RCS file \"$file\": cannot open for writing";
  -    $io->print($rcs);
  -    $io->close;
  -
  -    return;
  +    return $rcs;
   }
   
   __END__
  @@ -410,7 +443,65 @@
   
   =head1 DESCRIPTION
   
  -...FIXME...
  +This is a Perl API for reading and writing RCS files (I<filename>C<,v>).
  +It understands the syntax as documented in rcsfile(5) of GNU RCS version
  +5.7. It tries hard to save RCS files in a determined internal keyword
  +and revision order.
  +
  +=head1 METHODS
  +
  +=over 4
  +
  +=item C<my $rcs = >B<new>C< RCS>[C< $filename>]C<;>
  +
  +This creates a new RCS object and (for convinience reasons) optionally
  +loads an RCS file via C<$rcs-E<gt>>B<load>C<($filename)> into it.
  +
  +=item C<$rcs-E<gt>>B<destroy>C<;>
  +
  +=item C<undef $rcs;>
  +
  +This destroys the RCS object.
  +
  +=item [C<my $old_path = >]C<$rcs-E<gt>>B<tool>C<(">I<tool>C<", $path);>
  +
  +=item C<my $path = $rcs-E<gt>>B<tool>C<(">I<tool>C<");>
  +
  +This sets and/or gets the path to the external command I<tool>. Used
  +I<tool>s are C<rcs>, C<co> and C<diff> from GNU RCS and GNU DiffUtils.
  +
  +=item C<$rcs-E<gt>>B<parse>C<($filename, $rcstext);>
  +
  +This parses the RCS file content in C<$rcstext> and
  +and stores the result in RCS object C<$rcs>.
  +
  +=item C<my $rcstext = $rcs-E<gt>>B<format>C<($filename);>
  +
  +This formats and returns the RCS file content in C<$rcs>.
  +
  +=item C<$rcs-E<gt>>B<load>C<($filename);>
  +
  +This loads the RCS file under C<$filename> into RCS object C<$rcs>.
  +
  +=item C<$rcs-E<gt>>B<save>C<($filename);>
  +
  +This saves the RCS file content from RCS object C<$rcs> under C<$filename>.
  +
  +=back
  +
  +=head1 SEE ALSO
  +
  +rcsfile(5).
  +
  +=head1 HISTORY
  +
  +The Perl B<RCS> module was implemented in April 2004 for use in B<OSSP
  +cvsfusion> in order to support the fusion of two CVS repositories on the
  +RCS file level.
  +
  +=head1 AUTHOR
  +
  +Ralf S. Engelschall E<lt>rse@engelschall.comE<gt>
   
   =cut
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 23 16:57:10 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D4E707752C; Fri, 23 Apr 2004 16:57:09 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvsfusion/ RCS.pm
Message-Id: <20040423145709.D4E707752C@mail.ossp.org>
Date: Fri, 23 Apr 2004 16:57:09 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Apr-2004 16:57:09
  Branch: HEAD                             Handle: 2004042315570900

  Modified files:
    ossp-pkg/cvsfusion      RCS.pm

  Log:
    bugfix parsing and formatting so it now passed representative ,v files
    from FreeBSD, OSSP, OpenPKG and OpenSSL CVS repositories

  Summary:
    Revision    Changes     Path
    1.5         +44 -17     ossp-pkg/cvsfusion/RCS.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cvsfusion/RCS.pm
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 RCS.pm
  --- ossp-pkg/cvsfusion/RCS.pm	23 Apr 2004 13:09:50 -0000	1.4
  +++ ossp-pkg/cvsfusion/RCS.pm	23 Apr 2004 14:57:09 -0000	1.5
  @@ -156,8 +156,8 @@
       my $re_idchar  = qr/[^$,.:;@]/;
       my $re_id      = qr/(?:${re_num})?${re_idchar}+(?:${re_idchar}|${re_num})*/;
       my $re_sym     = qr/\d?${re_idchar}+(?:${re_idchar}|\d)*/;
  -    my $re_str     = qr/(?:@@|[^@])*/;
  -    my $re_date    = qr/\d{4}\.\d{2}\.\d{2}\.\d{2}\.\d{2}\.\d{2}/;
  +    my $re_str     = qr/(?:\@\@|[^@])*/s;
  +    my $re_date    = qr/(?:\d{2}|\d{4})\.\d{2}\.\d{2}\.\d{2}\.\d{2}\.\d{2}/;
   
       #   parse header section
       while (1) {
  @@ -196,15 +196,23 @@
               $self->{'rcs'}->{'header'}->{'strict'} = "";
               push(@{$self->{'rcs'}->{'header'}->{-order}}, 'strict');
           }
  -        elsif ($rcs =~ s/^comment\s+\@($re_str)\@\s*;//s) {
  -            $self->{'rcs'}->{'header'}->{'comment'} = &_string_unquote($1);
  +        #elsif ($rcs =~ s/^comment\s+\@($re_str)\@\s*;//s) { # would maximally span 32K
  +        elsif ($rcs =~ s/^comment\s+\@//s) {
  +            my $str = '';
  +            1 while ($rcs =~ s/^((?:\@\@|[^@])+)/$str .= $1, ''/se);
  +            $rcs =~ s/\@\s*;//s;
  +            $self->{'rcs'}->{'header'}->{'comment'} = &_string_unquote($str);
               push(@{$self->{'rcs'}->{'header'}->{-order}}, 'comment');
           }
  -        elsif ($rcs =~ s/^expand\s+\@($re_str)\@\s*;//s) {
  -            $self->{'rcs'}->{'header'}->{'expand'} = &_string_unquote($1);
  +        #elsif ($rcs =~ s/^expand\s+\@($re_str)\@\s*;//s) { # would maximally span 32K
  +        elsif ($rcs =~ s/^expand\s+\@//s) {
  +            my $str = '';
  +            1 while ($rcs =~ s/^((?:\@\@|[^@])+)/$str .= $1, ''/se);
  +            $rcs =~ s/\@\s*;//s;
  +            $self->{'rcs'}->{'header'}->{'expand'} = &_string_unquote($str);
               push(@{$self->{'rcs'}->{'header'}->{-order}}, 'expand');
           }
  -        elsif ($rcs =~ s/^([a-z]+)(\s*[^;]*);//s) {
  +        elsif ($rcs =~ s/^([a-z]+)(?:\s*([^;]*));//s) {
               $self->{'rcs'}->{'header'}->{$1} = $2;
               push(@{$self->{'rcs'}->{'header'}->{-order}}, $1);
           }
  @@ -240,7 +248,7 @@
                   elsif ($rcs =~ m/^desc\s+/s) {
                       last;
                   }
  -                elsif ($rcs =~ s/^([a-z]+)(\s*[^;]*);//s) {
  +                elsif ($rcs =~ s/^([a-z]+)(?:\s*([^;]*));//s) {
                       $self->{'rcs'}->{'delta'}->{$rev}->{$1} = $2;
                   }
                   else {
  @@ -255,8 +263,12 @@
   
       #   parse description section
       $rcs =~ s|^\s*||s;
  -    if ($rcs =~ s/^desc\s+\@($re_str)\@\s*//s) {
  -        $self->{'rcs'}->{'header'}->{'desc'} = $1;
  +    #if ($rcs =~ s/^desc\s+\@($re_str)\@\s*//s) { # would maximally span 32K
  +    if ($rcs =~ s/^desc\s+\@//s) {
  +        my $str = '';
  +        1 while ($rcs =~ s/^((?:\@\@|[^@])+)/$str .= $1, ''/se);
  +        $rcs =~ s/\@\s*//s;
  +        $self->{'rcs'}->{'header'}->{'desc'} = &_string_unquote($str);
           push(@{$self->{'rcs'}->{'header'}->{-order}}, 'desc');
       }
   
  @@ -271,15 +283,30 @@
               my $textseen = 0;
               while (1) {
                   $rcs =~ s|^\s*||s;
  -                if ($rcs =~ s/^log\s+\@($re_str)\@\s*//s) {
  -                    $self->{'rcs'}->{'delta'}->{$rev}->{'log'} = &_string_unquote($1);
  -                }
  -                elsif ($rcs =~ s/^text\s+\@($re_str)\@\s*//s) {
  -                    $self->{'rcs'}->{'delta'}->{$rev}->{'text'} = &_string_unquote($1);
  +                #if ($rcs =~ s/^log\s+\@($re_str)\@\s*//s) { # would maximally span 32K
  +                if ($rcs =~ s/^log\s+\@//s) {
  +                    my $str = '';
  +                    1 while ($rcs =~ s/^((?:\@\@|[^@])+)/$str .= $1, ''/se);
  +                    $rcs =~ s/\@\s*//s;
  +                    $self->{'rcs'}->{'delta'}->{$rev}->{'log'} = &_string_unquote($str);
  +                }
  +                #elsif ($rcs =~ s/^text\s+\@($re_str)\@\s*//s) { # would maximally span 32K
  +                elsif ($rcs =~ s/^text\s+\@//s) {
  +                    my $str = '';
  +                    1 while ($rcs =~ s/^((?:\@\@|[^@])+)/$str .= $1, ''/se);
  +                    $rcs =~ s/\@\s*//s;
  +                    $self->{'rcs'}->{'delta'}->{$rev}->{'text'} = &_string_unquote($str);
                       $textseen = 1;
                   }
  -                elsif ($textseen == 0 and $rcs =~ s/^([a-z]+)(\s*[^;]*);//s) {
  -                    $self->{'rcs'}->{'delta'}->{$rev}->{$1} = $2;
  +                #elsif ($textseen == 0 and $rcs =~ s/^([a-z]+)(?:\s+\@($re_str)\@\s*)?//s) { # would maximally span 32K
  +                elsif ($textseen == 0 and $rcs =~ s/^([a-z]+)(?:\s+(\@))?//s) {
  +                    my ($keyword, $with_str) = ($1, $2);
  +                    my $str = '';
  +                    if ($with_str) { 
  +                        1 while ($rcs =~ s/^((?:\@\@|[^@])+)/$str .= $1, ''/se);
  +                        $rcs =~ s/\@\s*//s;
  +                    }
  +                    $self->{'rcs'}->{'delta'}->{$rev}->{$keyword} = $str;
                   }
                   else {
                       last;
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 23 17:03:28 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2A58177681; Fri, 23 Apr 2004 17:03:28 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvsfusion/ RCS.pm
Message-Id: <20040423150328.2A58177681@mail.ossp.org>
Date: Fri, 23 Apr 2004 17:03:28 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Apr-2004 17:03:28
  Branch: HEAD                             Handle: 2004042316032700

  Modified files:
    ossp-pkg/cvsfusion      RCS.pm

  Log:
    fix exporting of API

  Summary:
    Revision    Changes     Path
    1.6         +1  -1      ossp-pkg/cvsfusion/RCS.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cvsfusion/RCS.pm
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 RCS.pm
  --- ossp-pkg/cvsfusion/RCS.pm	23 Apr 2004 14:57:09 -0000	1.5
  +++ ossp-pkg/cvsfusion/RCS.pm	23 Apr 2004 15:03:27 -0000	1.6
  @@ -36,7 +36,7 @@
   use IO::File;
   
   @ISA       = qw(Exporter);
  -@EXPORT_OK = qw(new destroy DESTROY dump);
  +@EXPORT_OK = qw(new destroy DESTROY dump tool load save parse format);
   
   #   create new object
   sub new ($;$) {
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 23 19:58:18 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0822B776BE; Fri, 23 Apr 2004 19:58:17 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvsfusion/ RCS.pm
Message-Id: <20040423175817.0822B776BE@mail.ossp.org>
Date: Fri, 23 Apr 2004 19:58:17 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Apr-2004 19:58:17
  Branch: HEAD                             Handle: 2004042318581700

  Modified files:
    ossp-pkg/cvsfusion      RCS.pm

  Log:
    add an abstraction layer between structured revisions and sequential
    numbers which results in structured revisions to exist only once in
    the whole internal structure and this way allows us to change a
    structured revision throughout the whole RCS file content (including
    all revision references, etc) easily

  Summary:
    Revision    Changes     Path
    1.7         +90 -38     ossp-pkg/cvsfusion/RCS.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cvsfusion/RCS.pm
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 RCS.pm
  --- ossp-pkg/cvsfusion/RCS.pm	23 Apr 2004 15:03:27 -0000	1.6
  +++ ossp-pkg/cvsfusion/RCS.pm	23 Apr 2004 17:58:17 -0000	1.7
  @@ -36,7 +36,7 @@
   use IO::File;
   
   @ISA       = qw(Exporter);
  -@EXPORT_OK = qw(new destroy DESTROY dump tool load save parse format);
  +@EXPORT_OK = qw(new destroy DESTROY dump tool load save parse format revapply trunk2branch);
   
   #   create new object
   sub new ($;$) {
  @@ -138,6 +138,30 @@
       return;
   }
   
  +#   INTERNAL: structured revision to sequential number mapping
  +sub _rev_rev2num ($$) {
  +    my ($self, $rev) = @_;
  +    foreach my $num (keys(%{$self->{'rcs'}->{'rev'}})) {
  +        next if ($num eq '-count');
  +        return $num if ($self->{'rcs'}->{'rev'}->{$num} eq $rev);
  +    }
  +    my $num = sprintf("REV-NUM(%d)", $self->{'rcs'}->{'rev'}->{-count}++);
  +    $self->{'rcs'}->{'rev'}->{$num} = $rev;
  +    return $num;
  +}
  +
  +#   INTERNAL: sequential number to structured revision mapping
  +sub _rev_num2rev ($$) {
  +    my ($self, $num) = @_;
  +    return $self->{'rcs'}->{'rev'}->{$num};
  +}
  +
  +#   INTERNAL: check whether argument is a valid sequential number
  +sub _rev_isnum ($$) {
  +    my ($self, $num) = @_;
  +    return (($num =~ m|^REV-NUM\(\d+\)$| and defined($self->{'rcs'}->{'rev'}->{$num})) ? 1 : 0);
  +}
  +
   #   parse a RCS file content into object
   #   (see rcsfile(5) for reference)
   sub parse ($$) {
  @@ -147,13 +171,14 @@
       $self->{'rcs'} = {
           'header'    => { -order => [] },
           'delta'     => { -order => [] },
  +        'rev'       => { -count => 0  },
       };
   
       #   pre-generate reusable regular expressions
       my $re_num     = qr/[\d.]+/;
       my $re_rev     = qr/\d+(?:\.\d+)*/;
  -    my $re_special = qr/[$,.:;@]/;
  -    my $re_idchar  = qr/[^$,.:;@]/;
  +    my $re_special = qr/[\$,.:;\@]/;
  +    my $re_idchar  = qr/[^\$,.:;\@]/;
       my $re_id      = qr/(?:${re_num})?${re_idchar}+(?:${re_idchar}|${re_num})*/;
       my $re_sym     = qr/\d?${re_idchar}+(?:${re_idchar}|\d)*/;
       my $re_str     = qr/(?:\@\@|[^@])*/s;
  @@ -163,32 +188,37 @@
       while (1) {
           $rcs =~ s|^\s*||s;
           if ($rcs =~ s/^head\s+($re_rev)\s*;//s) {
  -            $self->{'rcs'}->{'header'}->{'head'} = $1;
  +            $self->{'rcs'}->{'header'}->{'head'} = $self->_rev_rev2num($1);
               push(@{$self->{'rcs'}->{'header'}->{-order}}, 'head');
           }
           elsif ($rcs =~ s/^branch\s+($re_rev)\s*;//s) {
  -            $self->{'rcs'}->{'header'}->{'branch'} = $1;
  +            $self->{'rcs'}->{'header'}->{'branch'} = $self->_rev_rev2num($1);
               push(@{$self->{'rcs'}->{'header'}->{-order}}, 'branch');
           }
           elsif ($rcs =~ s/^access((?:\s+$re_id)*)\s*;//s) {
  -            $self->{'rcs'}->{'header'}->{'access'} = [ split(/\s+/, $1) ];
  +            $self->{'rcs'}->{'header'}->{'access'} = 
  +                (defined($1) ? [ split(/\s+/, $1) ] : []);
               push(@{$self->{'rcs'}->{'header'}->{-order}}, 'access');
           }
           elsif ($rcs =~ s/^symbols((?:\s+$re_sym:$re_rev)*)\s*;//s) {
               my $symbols = { -order => [] };
  -            map { if (m/^(.+):(.+)$/s) {
  -                $symbols->{$1} = $2;
  +            if (defined($1)) {
  +                map { if (m/^(.+):(.+)$/s) {
  +                $symbols->{$1} = $self->_rev_rev2num($2);
                   push(@{$symbols->{-order}}, $1);
  -            } } split(/\s+/, $1);
  +                } } split(/\s+/, $1);
  +            } 
               $self->{'rcs'}->{'header'}->{'symbols'} = $symbols;
               push(@{$self->{'rcs'}->{'header'}->{-order}}, 'symbols');
           }
           elsif ($rcs =~ s/^locks((?:\s+$re_id:$re_rev)*)\s*;//s) {
               my $locks = { -order => [] };
  -            map { if (m/^(.+):(.+)$/s) {
  -                $locks->{$1} = $2;
  -                push(@{$locks->{-order}}, $1);
  -            } } split(/\s+/, $1);
  +            if (defined($1)) {
  +                map { if (m/^(.+):(.+)$/s) {
  +                    $locks->{$1} = $self->_rev_rev2num($2);
  +                    push(@{$locks->{-order}}, $1);
  +                } } split(/\s+/, $1);
  +            }
               $self->{'rcs'}->{'header'}->{'locks'} = $locks;
               push(@{$self->{'rcs'}->{'header'}->{-order}}, 'locks');
           }
  @@ -225,7 +255,7 @@
       while (1) {
           $rcs =~ s|^\s*||s;
           if ($rcs =~ s/^($re_rev)//s) {
  -            my $rev = $1;
  +            my $rev = $self->_rev_rev2num($1);
               $self->{'rcs'}->{'delta'}->{$rev} = {};
               push(@{$self->{'rcs'}->{'delta'}->{-order}}, $rev);
               while (1) {
  @@ -240,10 +270,12 @@
                       $self->{'rcs'}->{'delta'}->{$rev}->{'state'} = $1;
                   }
                   elsif ($rcs =~ s/^branches(?:\s+((?:\s*$re_rev)*))?\s*;//s) {
  -                    $self->{'rcs'}->{'delta'}->{$rev}->{'branches'} = [ split(/\s+/, $1) ];
  +                    $self->{'rcs'}->{'delta'}->{$rev}->{'branches'} =
  +                        (defined($1) and $1 ne '' ? [ map { $self->_rev_rev2num($_) } split(/\s+/, $1) ] : []);
                   }
                   elsif ($rcs =~ s/^next(?:\s*($re_rev))?\s*;//s) {
  -                    $self->{'rcs'}->{'delta'}->{$rev}->{'next'} = $1;
  +                    $self->{'rcs'}->{'delta'}->{$rev}->{'next'} =
  +                        (defined($1) and $1 ne '' ? $self->_rev_rev2num($1) : '');
                   }
                   elsif ($rcs =~ m/^desc\s+/s) {
                       last;
  @@ -276,9 +308,9 @@
       while (1) {
           $rcs =~ s|^\s*||s;
           if ($rcs =~ s/^($re_rev)//s) {
  -            my $rev = $1;
  +            my $rev = $self->_rev_rev2num($1);
               if (not defined($self->{'rcs'}->{'delta'}->{$rev})) {
  -                croak "deltatext section for unknown revision \"$rev\" found";
  +                croak "deltatext section for unknown revision \"".$self->_rev_num2rev($rev)."\" found";
               }
               my $textseen = 0;
               while (1) {
  @@ -326,22 +358,22 @@
   sub _revlist ($$) {
       my ($self, $branchfirst) = @_;
       my @revs = ();
  -    &nextrev(\@revs, $self->{'rcs'}->{'header'}->{'head'}, $branchfirst);
  -    sub nextrev ($$$) {
  -        my ($revs, $rev, $branchfirst) = @_;
  +    &nextrev($self, \@revs, $self->{'rcs'}->{'header'}->{'head'}, $branchfirst);
  +    sub nextrev ($$$$) {
  +        my ($self, $revs, $rev, $branchfirst) = @_;
           push(@{$revs}, $rev);
           my $next     = $self->{'rcs'}->{'delta'}->{$rev}->{'next'};
           my $branches = $self->{'rcs'}->{'delta'}->{$rev}->{'branches'};
           if ($branchfirst) {
               foreach my $branch (@{$branches}) {
  -                &nextrev($revs, $branch, $branchfirst); 
  +                &nextrev($self, $revs, $branch, $branchfirst); 
               }
  -            &nextrev($revs, $next, $branchfirst) if (defined($next) and $next ne '');
  +            &nextrev($self, $revs, $next, $branchfirst) if (defined($next) and $next ne '');
           }
           else {
  -            &nextrev($revs, $next, $branchfirst) if (defined($next) and $next ne '');
  +            &nextrev($self, $revs, $next, $branchfirst) if (defined($next) and $next ne '');
               foreach my $branch (@{$branches}) {
  -                &nextrev($revs, $branch, $branchfirst); 
  +                &nextrev($self, $revs, $branch, $branchfirst); 
               }
           }
           return;
  @@ -350,23 +382,30 @@
   }
   
   #   INTERNAL: generate output of a value in RCS syntax and layout
  -sub _genvalue ($$) {
  -    my ($val, $tag) = @_;
  +sub _genvalue ($$$) {
  +    my ($self, $val, $tag) = @_;
       my $rcs = '';
       if (ref($val) eq 'ARRAY' and @{$val} > 0) {
           foreach my $v (@{$val}) {
  +            $v = $self->_rev_num2rev($v) if ($self->_rev_isnum($v));
               $rcs .= "\n\t$v";
           }
       }
       elsif (ref($val) eq 'HASH' and keys(%{$val}) > 0) {
           if (defined($val->{-order})) {
  -            foreach my $v (@{$val->{-order}}) {
  -                $rcs .= sprintf("\n\t%s:%s", $v, $val->{$v});
  +            foreach my $k (@{$val->{-order}}) {
  +                my $v = $val->{$k};
  +                $v = $self->_rev_num2rev($v) if ($self->_rev_isnum($v));
  +                $k = $self->_rev_num2rev($k) if ($self->_rev_isnum($k));
  +                $rcs .= sprintf("\n\t%s:%s", $k, $v);
               }
           }
           else {
  -            foreach my $v (keys(%{$val})) {
  -                $rcs .= sprintf("\n\t%s:%s", $v, $val->{$v});
  +            foreach my $k (keys(%{$val})) {
  +                my $v = $val->{$k};
  +                $v = $self->_rev_num2rev($v) if ($self->_rev_isnum($v));
  +                $k = $self->_rev_num2rev($k) if ($self->_rev_isnum($k));
  +                $rcs .= sprintf("\n\t%s:%s", $k, $v);
               }
           }
       }
  @@ -375,6 +414,7 @@
               $rcs .= "\t" . &_string_quote($val);
           }
           else {
  +            $val = $self->_rev_num2rev($val) if ($self->_rev_isnum($val));
               $rcs .= "\t$val";
           }
       }
  @@ -417,29 +457,29 @@
           $tag = $1 if ($header =~ s/([@\-])$//s);
           my $val = $self->{'rcs'}->{'header'}->{$header};
           if (defined($val)) {
  -            $rcs .= $header . &_genvalue($val, $tag). ";";
  +            $rcs .= $header . $self->_genvalue($val, $tag). ";";
               $rcs .= ($tag eq '-' ? " " : "\n");
           }
       }
       $rcs .= "\n";
   
       #   generate delta section(s)
  -    my @revlist = &_revlist($self, 0);
  +    my @revlist = $self->_revlist(0);
       foreach my $rev (@revlist) {
           my $delta = $self->{'rcs'}->{'delta'}->{$rev};
           $rcs .= "\n";
  -        $rcs .= $rev."\n";
  +        $rcs .= $self->_rev_num2rev($rev)."\n";
           $rcs .= "date\t" . $delta->{'date'} . ";\t";
           $rcs .= "author " . $delta->{'author'} . ";\t";
           $rcs .= "state " . $delta->{'state'} . ";\n";
           $rcs .= "branches";
           if (@{$delta->{'branches'}} > 0) {
               foreach my $v (@{$delta->{'branches'}}) {
  -                $rcs .= "\n\t$v";
  +                $rcs .= "\n\t". $self->_rev_num2rev($v);
               }
           }
           $rcs .= ";\n";
  -        $rcs .= "next\t" . $delta->{'next'} . ";\n";
  +        $rcs .= "next\t" . (defined($delta->{'next'}) ? $self->_rev_num2rev($delta->{'next'}) : "") . ";\n";
       }
   
       #   generate description section
  @@ -447,18 +487,30 @@
       $rcs .= "\n\ndesc\n" . &_string_quote($desc) . "\n";
   
       #   generate deltatext section(s)
  -    @revlist = &_revlist($self, 1);
  +    @revlist = $self->_revlist(1);
       foreach my $rev (@revlist) {
           my $delta = $self->{'rcs'}->{'delta'}->{$rev};
           $rcs .= "\n";
           $rcs .= "\n";
  -        $rcs .= $rev."\n";
  +        $rcs .= $self->_rev_num2rev($rev)."\n";
           $rcs .= "log\n" . &_string_quote($delta->{'log'}) . "\n";
           $rcs .= "text\n" . &_string_quote($delta->{'text'}) . "\n";
       }
   
       return $rcs;
   }
  +
  +#   apply a translation function onto all RCS revisions
  +sub revapply ($$) {
  +    my ($self, $sub) = @_;
  +    foreach my $num (keys(%{$self->{'rcs'}->{'rev'}})) {
  +        $self->{'rcs'}->{'rev'}->{$num} =
  +            &$sub($self->{'rcs'}->{'rev'}->{$num});
  +    }
  +    return;
  +}
  +
  +1;
   
   __END__
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 23 23:38:49 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F25A7776BC; Fri, 23 Apr 2004 23:38:48 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvsfusion/ RCS.pm
Message-Id: <20040423213848.F25A7776BC@mail.ossp.org>
Date: Fri, 23 Apr 2004 23:38:48 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Apr-2004 23:38:48
  Branch: HEAD                             Handle: 2004042322384800

  Modified files:
    ossp-pkg/cvsfusion      RCS.pm

  Log:
    Entirely work-off the RCS module again in order to split the RCS class
    into multiple classes. This especially allows us to provide a more
    reasonable and intuitive API for manipulating the contents of the RCS
    file.

  Summary:
    Revision    Changes     Path
    1.8         +438 -142   ossp-pkg/cvsfusion/RCS.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cvsfusion/RCS.pm
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 RCS.pm
  --- ossp-pkg/cvsfusion/RCS.pm	23 Apr 2004 17:58:17 -0000	1.7
  +++ ossp-pkg/cvsfusion/RCS.pm	23 Apr 2004 21:38:48 -0000	1.8
  @@ -28,36 +28,84 @@
   ##  RCS.pm: RCS file handling
   ##
   
  -package RCS;
  -
   require 5;
  +use strict;
  +use warnings;
  +
  +##  _________________________________________________________________________
  +##
  +##                       Class "RCS::Global" (SHARED)
  +##  _________________________________________________________________________
  +##
  +
  +package RCS::Global;
  +
  +#   check whether an entry name is valid
  +sub valid_entry_name ($$) {
  +    my ($obj, $name) = @_;
  +
  +    my $valid = 0;
  +    if (defined($obj->{$name}) and $name !~ m|^-|) {
  +        $valid = 1;
  +    }
  +    return $valid;
  +}
  +
  +#   check whether an entry value is valid
  +sub valid_entry_value ($$$) {
  +    my ($obj, $name, $value) = @_;
  +
  +    my $type   = $obj->{$name}->{-type};
  +    my $syntax = $obj->{$name}->{-syntax};
  +
  +    my $valid = 0;
  +    if ($type eq '$' and not ref($value) and $value =~ m|${syntax}|s) {
  +        $valid = 1;
  +    }
  +    elsif ($type eq '@' and ref($value) eq 'ARRAY') {
  +        $valid = 1;
  +        foreach my $v (@{$value}) {
  +            if ($v !~ m|${syntax}|s) {
  +                $valid = 0;
  +                last;
  +            }
  +        }
  +    }
  +    elsif ($type eq '%' and ref($value) eq 'HASH') {
  +        $valid = 1;
  +        foreach my $k (keys(%{$value})) {
  +            if ($k."::".$value->{$k} !~ m|${syntax}|s) {
  +                $valid = 0;
  +                last;
  +            }
  +        }
  +    }
  +    return $valid;
  +}
  +
  +##  _________________________________________________________________________
  +##
  +##                        Class "RCS::Object" (ABSTRACT)
  +##  _________________________________________________________________________
  +##
  +
  +package RCS::Object;
  +
   require Exporter;
   use Carp;
  -use IO::File;
   
  -@ISA       = qw(Exporter);
  -@EXPORT_OK = qw(new destroy DESTROY dump tool load save parse format revapply trunk2branch);
  +our @ISA       = qw(Exporter);
  +our @EXPORT_OK = qw(new destroy DESTROY dump);
   
   #   create new object
   sub new ($;$) {
  -    my ($proto, $file) = @_;
  +    my ($proto) = @_;
   
       #   create new object
       my $class = ref($proto) || $proto;
       my $self = {};
       bless ($self, $class);
   
  -    #   initialize object
  -    $self->{'tool'} = {
  -        'rcs'  => 'rcs',
  -        'co'   => 'co',
  -        'diff' => 'diff',
  -    };
  -    $self->{'rcs'} = {};
  -
  -    #   optionally load file into object
  -    $rcs->load($file) if (defined($file));
  -
       #   return new object
       return $self;
   }
  @@ -78,7 +126,7 @@
   #   dump object internals (debugging only)
   sub dump ($;$) {
       my ($self, $name) = @_;
  -    $name ||= "rcs";
  +    $name ||= "obj";
       eval {
           use Data::Dumper;
       };
  @@ -92,17 +140,129 @@
       return $dump;
   }
   
  -#   get and/or set paths to external tools
  -sub tool ($;$) {
  -    my ($self, $tool, $path) = @_;
  -    my $old = $self->{'tool'}->{$tool};
  -    if (not defined($old)) {
  -        croak "tool \"$tool\" not known";
  +##  _________________________________________________________________________
  +##
  +##                            Class "RCS::Revision"
  +##  _________________________________________________________________________
  +##
  +
  +package RCS::Revision;
  +
  +require 5;
  +require Exporter;
  +use Carp;
  +
  +our @ISA       = qw(Exporter RCS::Object);
  +our @EXPORT_OK = qw(new destroy DESTROY dump revision set get);
  +
  +#   create new object
  +sub new ($;$) {
  +    my ($proto, $rev) = @_;
  +
  +    #   create new object
  +    my $self = {
  +        -rev       => undef,
  +        -order     => [],
  +        'date'     => { -type => '$', -syntax => qr/.*/, -value => undef },
  +        'author'   => { -type => '$', -syntax => qr/.*/, -value => undef },
  +        'state'    => { -type => '$', -syntax => qr/.*/, -value => undef },
  +        'branches' => { -type => '@', -syntax => qr/.*/, -value => undef },
  +        'next'     => { -type => '$', -syntax => qr/.*/, -value => undef },
  +        'log'      => { -type => '$', -syntax => qr/.*/, -value => undef },
  +        'text'     => { -type => '$', -syntax => qr/.*/, -value => undef },
  +    };
  +    my $class = ref($proto) || $proto;
  +    bless ($self, $class);
  +
  +    #   optionally set revision
  +    $self->revision($rev) if (defined($rev));
  +
  +    #   return new object
  +    return $self;
  +}
  +
  +#   get and/or set revision number
  +sub revision ($;$) {
  +    my ($self, $rev) = @_;
  +    my $old_rev = $self->{-rev};
  +    if (defined($rev)) {
  +        $self->{-rev} = $rev;
  +    }
  +    return $old_rev;
  +}
  +
  +#   set entry into object
  +sub set ($$$) {
  +    my ($self, $name, $value) = @_;
  +
  +    if (not RCS::Global::valid_entry_name($self, $name)) {
  +        croak "invalid entry \"$name\"";
  +    }
  +    if (defined($value)) {
  +        if (not RCS::Global::valid_entry_value($self, $name, $value)) {
  +            croak "invalid value \"$value\" for entry \"$name\"";
  +        }
  +    }
  +    my $old_value = $self->{$name}->{-value};
  +    $self->{$name}->{-value} = $value;
  +    $self->{-order} = [ grep { $_ ne $name } @{$self->{-order}} ];
  +    push(@{$self->{-order}}, $name);
  +    return $old_value;
  +}
  +
  +#   get entry from object
  +sub get ($;$) {
  +    my ($self, $name) = @_;
  +
  +    if (not defined($name)) {
  +        return @{$self->{-order}};
       }
  -    if (defined($path)) {
  -        $self->{'tool'}->{$tool} = $path;
  +    if (not RCS::Global::valid_entry_name($self, $name)) {
  +        croak "invalid entry \"$name\"";
       }
  -    return $old;
  +    return $self->{$name}->{-value};
  +}
  +
  +##  _________________________________________________________________________
  +##
  +##                                 Class "RCS"
  +##  _________________________________________________________________________
  +##
  +
  +package RCS;
  +
  +require Exporter;
  +use Carp;
  +use IO::File;
  +
  +our @ISA       = qw(Exporter RCS::Object);
  +our @EXPORT_OK = qw(new destroy DESTROY dump load save parse format insert remove lookup set get);
  +
  +#   create new object
  +sub new ($;$) {
  +    my ($proto, $file) = @_;
  +
  +    #   create new object
  +    my $self = {
  +        -order     => [],
  +        'head'     => { -type => '$', -syntax => qr/.*/, -value => undef },
  +        'access'   => { -type => '$', -syntax => qr/.*/, -value => undef },
  +        'symbols'  => { -type => '@', -syntax => qr/.*/, -value => undef },
  +        'locks'    => { -type => '%', -syntax => qr/.*/, -value => undef },
  +        'strict'   => { -type => '%', -syntax => qr/.*/, -value => undef },
  +        'comment'  => { -type => '$', -syntax => qr/.*/, -value => undef },
  +        'expand'   => { -type => '$', -syntax => qr/.*/, -value => undef },
  +        'desc'     => { -type => '$', -syntax => qr/.*/, -value => undef },
  +        -revision  => { -count => 0 },
  +    };
  +    my $class = ref($proto) || $proto;
  +    bless ($self, $class);
  +
  +    #   optionally load file into object
  +    $self->load($file) if (defined($file));
  +
  +    #   return new object
  +    return $self;
   }
   
   #   INTERNAL: quote a RCS string
  @@ -139,27 +299,45 @@
   }
   
   #   INTERNAL: structured revision to sequential number mapping
  -sub _rev_rev2num ($$) {
  +sub rev2num ($$) {
       my ($self, $rev) = @_;
  -    foreach my $num (keys(%{$self->{'rcs'}->{'rev'}})) {
  -        next if ($num eq '-count');
  -        return $num if ($self->{'rcs'}->{'rev'}->{$num} eq $rev);
  +    foreach my $num (keys(%{$self->{'-revision'}})) {
  +        next if ($num =~ m|^-|);
  +        return $num if ($self->{'-revision'}->{$num}->revision() eq $rev);
       }
  -    my $num = sprintf("REV-NUM(%d)", $self->{'rcs'}->{'rev'}->{-count}++);
  -    $self->{'rcs'}->{'rev'}->{$num} = $rev;
  +    my $num = sprintf("REV-NUM(%d)", $self->{'-revision'}->{-count}++);
  +    $self->{'-revision'}->{$num} = new RCS::Revision $rev;
       return $num;
   }
   
   #   INTERNAL: sequential number to structured revision mapping
  -sub _rev_num2rev ($$) {
  +sub num2rev ($$) {
  +    my ($self, $num) = @_;
  +    return $self->{'-revision'}->{$num}->revision();
  +}
  +
  +#   INTERNAL: object to sequential number mapping
  +sub obj2num ($$) {
  +    my ($self, $obj) = @_;
  +    foreach my $num (keys(%{$self->{'-revision'}})) {
  +        next if ($num =~ m|^-|);
  +        return $num if ($self->{'-revision'}->{$num} eq $obj);
  +    }
  +    my $num = sprintf("REV-NUM(%d)", $self->{'-revision'}->{-count}++);
  +    $self->{'-revision'}->{$num} = $obj;
  +    return $num;
  +}
  +
  +#   INTERNAL: sequential number to object mapping
  +sub num2obj ($$) {
       my ($self, $num) = @_;
  -    return $self->{'rcs'}->{'rev'}->{$num};
  +    return $self->{'-revision'}->{$num};
   }
   
   #   INTERNAL: check whether argument is a valid sequential number
  -sub _rev_isnum ($$) {
  +sub isrevnum ($$) {
       my ($self, $num) = @_;
  -    return (($num =~ m|^REV-NUM\(\d+\)$| and defined($self->{'rcs'}->{'rev'}->{$num})) ? 1 : 0);
  +    return (($num =~ m|^REV-NUM\(\d+\)$| and defined($self->{'-revision'}->{$num})) ? 1 : 0);
   }
   
   #   parse a RCS file content into object
  @@ -167,12 +345,11 @@
   sub parse ($$) {
       my ($self, $rcs) = @_;
   
  -    #   clear RCS structure
  -    $self->{'rcs'} = {
  -        'header'    => { -order => [] },
  -        'delta'     => { -order => [] },
  -        'rev'       => { -count => 0  },
  -    };
  +    #   clear entries of object
  +    foreach my $entry (keys(%{$self})) {
  +        next if ($entry =~ m|^-|);
  +        $self->{$entry}->{-value} = undef;
  +    }
   
       #   pre-generate reusable regular expressions
       my $re_num     = qr/[\d.]+/;
  @@ -188,63 +365,61 @@
       while (1) {
           $rcs =~ s|^\s*||s;
           if ($rcs =~ s/^head\s+($re_rev)\s*;//s) {
  -            $self->{'rcs'}->{'header'}->{'head'} = $self->_rev_rev2num($1);
  -            push(@{$self->{'rcs'}->{'header'}->{-order}}, 'head');
  +            $self->{'head'}->{-value} = $self->rev2num($1);
  +            push(@{$self->{-order}}, 'head');
           }
           elsif ($rcs =~ s/^branch\s+($re_rev)\s*;//s) {
  -            $self->{'rcs'}->{'header'}->{'branch'} = $self->_rev_rev2num($1);
  -            push(@{$self->{'rcs'}->{'header'}->{-order}}, 'branch');
  +            $self->{'branch'}->{-value} = $self->rev2num($1);
  +            push(@{$self->{-order}}, 'branch');
           }
           elsif ($rcs =~ s/^access((?:\s+$re_id)*)\s*;//s) {
  -            $self->{'rcs'}->{'header'}->{'access'} = 
  -                (defined($1) ? [ split(/\s+/, $1) ] : []);
  -            push(@{$self->{'rcs'}->{'header'}->{-order}}, 'access');
  +            $self->{'access'}->{-value} = (defined($1) ? [ split(/\s+/, $1) ] : []);
  +            push(@{$self->{-order}}, 'access');
           }
           elsif ($rcs =~ s/^symbols((?:\s+$re_sym:$re_rev)*)\s*;//s) {
               my $symbols = { -order => [] };
               if (defined($1)) {
                   map { if (m/^(.+):(.+)$/s) {
  -                $symbols->{$1} = $self->_rev_rev2num($2);
  +                $symbols->{$1} = $self->rev2num($2);
                   push(@{$symbols->{-order}}, $1);
                   } } split(/\s+/, $1);
               } 
  -            $self->{'rcs'}->{'header'}->{'symbols'} = $symbols;
  -            push(@{$self->{'rcs'}->{'header'}->{-order}}, 'symbols');
  +            $self->{'symbols'}->{-value} = $symbols;
  +            push(@{$self->{-order}}, 'symbols');
           }
           elsif ($rcs =~ s/^locks((?:\s+$re_id:$re_rev)*)\s*;//s) {
               my $locks = { -order => [] };
               if (defined($1)) {
                   map { if (m/^(.+):(.+)$/s) {
  -                    $locks->{$1} = $self->_rev_rev2num($2);
  +                    $locks->{$1} = $self->rev2num($2);
                       push(@{$locks->{-order}}, $1);
                   } } split(/\s+/, $1);
               }
  -            $self->{'rcs'}->{'header'}->{'locks'} = $locks;
  -            push(@{$self->{'rcs'}->{'header'}->{-order}}, 'locks');
  +            $self->{'locks'}->{-value} = $locks;
  +            push(@{$self->{-order}}, 'locks');
           }
           elsif ($rcs =~ s/^strict\s*;//s) {
  -            $self->{'rcs'}->{'header'}->{'strict'} = "";
  -            push(@{$self->{'rcs'}->{'header'}->{-order}}, 'strict');
  +            $self->{'strict'}->{-value} = "";
  +            push(@{$self->{-order}}, 'strict');
           }
           #elsif ($rcs =~ s/^comment\s+\@($re_str)\@\s*;//s) { # would maximally span 32K
           elsif ($rcs =~ s/^comment\s+\@//s) {
               my $str = '';
  -            1 while ($rcs =~ s/^((?:\@\@|[^@])+)/$str .= $1, ''/se);
  +            1 while ($rcs =~ s/^((?:\@\@|[^@]){1,32000})/$str .= $1, ''/se);
               $rcs =~ s/\@\s*;//s;
  -            $self->{'rcs'}->{'header'}->{'comment'} = &_string_unquote($str);
  -            push(@{$self->{'rcs'}->{'header'}->{-order}}, 'comment');
  +            $self->{'comment'}->{-value} = &_string_unquote($str);
  +            push(@{$self->{-order}}, 'comment');
           }
           #elsif ($rcs =~ s/^expand\s+\@($re_str)\@\s*;//s) { # would maximally span 32K
           elsif ($rcs =~ s/^expand\s+\@//s) {
               my $str = '';
  -            1 while ($rcs =~ s/^((?:\@\@|[^@])+)/$str .= $1, ''/se);
  +            1 while ($rcs =~ s/^((?:\@\@|[^@]){1,32000})/$str .= $1, ''/se);
               $rcs =~ s/\@\s*;//s;
  -            $self->{'rcs'}->{'header'}->{'expand'} = &_string_unquote($str);
  -            push(@{$self->{'rcs'}->{'header'}->{-order}}, 'expand');
  +            $self->{'expand'}->{-value} = &_string_unquote($str);
  +            push(@{$self->{-order}}, 'expand');
           }
           elsif ($rcs =~ s/^([a-z]+)(?:\s*([^;]*));//s) {
  -            $self->{'rcs'}->{'header'}->{$1} = $2;
  -            push(@{$self->{'rcs'}->{'header'}->{-order}}, $1);
  +            #   currently intentionally just ignored, because does not occur at all
           }
           else {
               last;
  @@ -255,33 +430,31 @@
       while (1) {
           $rcs =~ s|^\s*||s;
           if ($rcs =~ s/^($re_rev)//s) {
  -            my $rev = $self->_rev_rev2num($1);
  -            $self->{'rcs'}->{'delta'}->{$rev} = {};
  -            push(@{$self->{'rcs'}->{'delta'}->{-order}}, $rev);
  +            my $num = $self->rev2num($1);
  +            my $rev = $self->num2obj($num);
               while (1) {
                   $rcs =~ s|^\s*||s;
                   if ($rcs =~ s/^date\s+($re_date)\s*;//s) {
  -                    $self->{'rcs'}->{'delta'}->{$rev}->{'date'} = $1;
  +                    $rev->set('date', $1);
                   }
                   elsif ($rcs =~ s/^author\s+($re_id)\s*;//s) {
  -                    $self->{'rcs'}->{'delta'}->{$rev}->{'author'} = $1;
  +                    $rev->set('author', $1);
                   }
                   elsif ($rcs =~ s/^state(?:\s*($re_id))?\s*;//s) {
  -                    $self->{'rcs'}->{'delta'}->{$rev}->{'state'} = $1;
  +                    $rev->set('state', $1);
                   }
                   elsif ($rcs =~ s/^branches(?:\s+((?:\s*$re_rev)*))?\s*;//s) {
  -                    $self->{'rcs'}->{'delta'}->{$rev}->{'branches'} =
  -                        (defined($1) and $1 ne '' ? [ map { $self->_rev_rev2num($_) } split(/\s+/, $1) ] : []);
  +                    $rev->set('branches',
  +                        defined($1) ? [ map { $self->rev2num($_) } split(/\s+/, $1) ] : []);
                   }
                   elsif ($rcs =~ s/^next(?:\s*($re_rev))?\s*;//s) {
  -                    $self->{'rcs'}->{'delta'}->{$rev}->{'next'} =
  -                        (defined($1) and $1 ne '' ? $self->_rev_rev2num($1) : '');
  +                    $rev->set('next', (defined($1) and $1 ne '' ? $self->rev2num($1) : ''));
                   }
                   elsif ($rcs =~ m/^desc\s+/s) {
                       last;
                   }
                   elsif ($rcs =~ s/^([a-z]+)(?:\s*([^;]*));//s) {
  -                    $self->{'rcs'}->{'delta'}->{$rev}->{$1} = $2;
  +                    #   currently intentionally just ignored, because does not occur at all
                   }
                   else {
                       last;
  @@ -298,36 +471,34 @@
       #if ($rcs =~ s/^desc\s+\@($re_str)\@\s*//s) { # would maximally span 32K
       if ($rcs =~ s/^desc\s+\@//s) {
           my $str = '';
  -        1 while ($rcs =~ s/^((?:\@\@|[^@])+)/$str .= $1, ''/se);
  +        1 while ($rcs =~ s/^((?:\@\@|[^@]){1,32000})/$str .= $1, ''/se);
           $rcs =~ s/\@\s*//s;
  -        $self->{'rcs'}->{'header'}->{'desc'} = &_string_unquote($str);
  -        push(@{$self->{'rcs'}->{'header'}->{-order}}, 'desc');
  +        $self->{'desc'}->{-value} = &_string_unquote($str);
  +        push(@{$self->{-order}}, 'desc');
       }
   
       #  parse deltatext section(s)
       while (1) {
           $rcs =~ s|^\s*||s;
           if ($rcs =~ s/^($re_rev)//s) {
  -            my $rev = $self->_rev_rev2num($1);
  -            if (not defined($self->{'rcs'}->{'delta'}->{$rev})) {
  -                croak "deltatext section for unknown revision \"".$self->_rev_num2rev($rev)."\" found";
  -            }
  +            my $num = $self->rev2num($1);
  +            my $rev = $self->num2obj($num);
               my $textseen = 0;
               while (1) {
                   $rcs =~ s|^\s*||s;
                   #if ($rcs =~ s/^log\s+\@($re_str)\@\s*//s) { # would maximally span 32K
                   if ($rcs =~ s/^log\s+\@//s) {
                       my $str = '';
  -                    1 while ($rcs =~ s/^((?:\@\@|[^@])+)/$str .= $1, ''/se);
  +                    1 while ($rcs =~ s/^((?:\@\@|[^@]){1,32000})/$str .= $1, ''/se);
                       $rcs =~ s/\@\s*//s;
  -                    $self->{'rcs'}->{'delta'}->{$rev}->{'log'} = &_string_unquote($str);
  +                    $rev->set('log', &_string_unquote($str));
                   }
                   #elsif ($rcs =~ s/^text\s+\@($re_str)\@\s*//s) { # would maximally span 32K
                   elsif ($rcs =~ s/^text\s+\@//s) {
                       my $str = '';
  -                    1 while ($rcs =~ s/^((?:\@\@|[^@])+)/$str .= $1, ''/se);
  +                    1 while ($rcs =~ s/^((?:\@\@|[^@]){1,32000})/$str .= $1, ''/se);
                       $rcs =~ s/\@\s*//s;
  -                    $self->{'rcs'}->{'delta'}->{$rev}->{'text'} = &_string_unquote($str);
  +                    $rev->set('text', &_string_unquote($str));
                       $textseen = 1;
                   }
                   #elsif ($textseen == 0 and $rcs =~ s/^([a-z]+)(?:\s+\@($re_str)\@\s*)?//s) { # would maximally span 32K
  @@ -335,10 +506,10 @@
                       my ($keyword, $with_str) = ($1, $2);
                       my $str = '';
                       if ($with_str) { 
  -                        1 while ($rcs =~ s/^((?:\@\@|[^@])+)/$str .= $1, ''/se);
  +                        1 while ($rcs =~ s/^((?:\@\@|[^@]){1,32000})/$str .= $1, ''/se);
                           $rcs =~ s/\@\s*//s;
                       }
  -                    $self->{'rcs'}->{'delta'}->{$rev}->{$keyword} = $str;
  +                    #   currently intentionally just ignored, because does not occur at all
                   }
                   else {
                       last;
  @@ -358,12 +529,14 @@
   sub _revlist ($$) {
       my ($self, $branchfirst) = @_;
       my @revs = ();
  -    &nextrev($self, \@revs, $self->{'rcs'}->{'header'}->{'head'}, $branchfirst);
  +    if (defined($self->{'head'}->{-value})) {
  +        &nextrev($self, \@revs, $self->{'head'}->{-value}, $branchfirst);
  +    }
       sub nextrev ($$$$) {
           my ($self, $revs, $rev, $branchfirst) = @_;
           push(@{$revs}, $rev);
  -        my $next     = $self->{'rcs'}->{'delta'}->{$rev}->{'next'};
  -        my $branches = $self->{'rcs'}->{'delta'}->{$rev}->{'branches'};
  +        my $next     = $self->num2obj($rev)->get('next');
  +        my $branches = $self->num2obj($rev)->get('branches');
           if ($branchfirst) {
               foreach my $branch (@{$branches}) {
                   &nextrev($self, $revs, $branch, $branchfirst); 
  @@ -387,7 +560,7 @@
       my $rcs = '';
       if (ref($val) eq 'ARRAY' and @{$val} > 0) {
           foreach my $v (@{$val}) {
  -            $v = $self->_rev_num2rev($v) if ($self->_rev_isnum($v));
  +            $v = $self->num2rev($v) if ($self->isrevnum($v));
               $rcs .= "\n\t$v";
           }
       }
  @@ -395,16 +568,16 @@
           if (defined($val->{-order})) {
               foreach my $k (@{$val->{-order}}) {
                   my $v = $val->{$k};
  -                $v = $self->_rev_num2rev($v) if ($self->_rev_isnum($v));
  -                $k = $self->_rev_num2rev($k) if ($self->_rev_isnum($k));
  +                $v = $self->num2rev($v) if ($self->isrevnum($v));
  +                $k = $self->num2rev($k) if ($self->isrevnum($k));
                   $rcs .= sprintf("\n\t%s:%s", $k, $v);
               }
           }
           else {
               foreach my $k (keys(%{$val})) {
                   my $v = $val->{$k};
  -                $v = $self->_rev_num2rev($v) if ($self->_rev_isnum($v));
  -                $k = $self->_rev_num2rev($k) if ($self->_rev_isnum($k));
  +                $v = $self->num2rev($v) if ($self->isrevnum($v));
  +                $k = $self->num2rev($k) if ($self->isrevnum($k));
                   $rcs .= sprintf("\n\t%s:%s", $k, $v);
               }
           }
  @@ -414,7 +587,7 @@
               $rcs .= "\t" . &_string_quote($val);
           }
           else {
  -            $val = $self->_rev_num2rev($val) if ($self->_rev_isnum($val));
  +            $val = $self->num2rev($val) if ($self->isrevnum($val));
               $rcs .= "\t$val";
           }
       }
  @@ -449,13 +622,11 @@
   
       #   generate header section
       foreach my $header (
  -        @kw_header,
  -        ( grep { not grep(/^\Q$_\E$/, @kw_header) }
  -          @{$self->{'rcs'}->{'header'}->{-order}}  )
  +        @kw_header, (grep { not grep(/^\Q$_\E$/, @kw_header) } @{$self->{-order}})
       ) {
           my $tag = '';
           $tag = $1 if ($header =~ s/([@\-])$//s);
  -        my $val = $self->{'rcs'}->{'header'}->{$header};
  +        my $val = $self->{$header}->{-value};
           if (defined($val)) {
               $rcs .= $header . $self->_genvalue($val, $tag). ";";
               $rcs .= ($tag eq '-' ? " " : "\n");
  @@ -466,54 +637,127 @@
       #   generate delta section(s)
       my @revlist = $self->_revlist(0);
       foreach my $rev (@revlist) {
  -        my $delta = $self->{'rcs'}->{'delta'}->{$rev};
  +        my $obj = $self->num2obj($rev);
           $rcs .= "\n";
  -        $rcs .= $self->_rev_num2rev($rev)."\n";
  -        $rcs .= "date\t" . $delta->{'date'} . ";\t";
  -        $rcs .= "author " . $delta->{'author'} . ";\t";
  -        $rcs .= "state " . $delta->{'state'} . ";\n";
  +        $rcs .= $obj->revision()."\n";
  +        $rcs .= "date\t" . $obj->get('date') . ";\t";
  +        $rcs .= "author " . $obj->get('author') . ";\t";
  +        $rcs .= "state " . $obj->get('state') . ";\n";
           $rcs .= "branches";
  -        if (@{$delta->{'branches'}} > 0) {
  -            foreach my $v (@{$delta->{'branches'}}) {
  -                $rcs .= "\n\t". $self->_rev_num2rev($v);
  +        my $branches = $obj->get('branches');
  +        if (@{$branches} > 0) {
  +            foreach my $v (@{$branches}) {
  +                $rcs .= "\n\t". $self->num2rev($v);
               }
           }
           $rcs .= ";\n";
  -        $rcs .= "next\t" . (defined($delta->{'next'}) ? $self->_rev_num2rev($delta->{'next'}) : "") . ";\n";
  +        my $next = $obj->get('next');
  +        $rcs .= "next\t" . (defined($next) and $next ne '' ? $self->num2rev($next) : "") . ";\n";
       }
   
       #   generate description section
  -    my $desc = $self->{'rcs'}->{'header'}->{'desc'};
  +    my $desc = $self->{'desc'}->{-value};
       $rcs .= "\n\ndesc\n" . &_string_quote($desc) . "\n";
   
       #   generate deltatext section(s)
       @revlist = $self->_revlist(1);
       foreach my $rev (@revlist) {
  -        my $delta = $self->{'rcs'}->{'delta'}->{$rev};
  +        my $obj = $self->num2obj($rev);
           $rcs .= "\n";
           $rcs .= "\n";
  -        $rcs .= $self->_rev_num2rev($rev)."\n";
  -        $rcs .= "log\n" . &_string_quote($delta->{'log'}) . "\n";
  -        $rcs .= "text\n" . &_string_quote($delta->{'text'}) . "\n";
  +        $rcs .= $obj->revision()."\n";
  +        my $log  = $obj->get('log')  || '';
  +        my $text = $obj->get('text') || '';
  +        $rcs .= "log\n" . &_string_quote($log) . "\n";
  +        $rcs .= "text\n" . &_string_quote($text) . "\n";
       }
   
       return $rcs;
   }
   
  -#   apply a translation function onto all RCS revisions
  -sub revapply ($$) {
  -    my ($self, $sub) = @_;
  -    foreach my $num (keys(%{$self->{'rcs'}->{'rev'}})) {
  -        $self->{'rcs'}->{'rev'}->{$num} =
  -            &$sub($self->{'rcs'}->{'rev'}->{$num});
  +#   insert a revision object
  +sub insert ($$) {
  +    my ($self, $obj) = @_;
  +    $self->obj2num($obj);
  +}
  +
  +#   remove a revision object
  +sub remove ($$) {
  +    my ($self, $obj) = @_;
  +    my $num = $self->obj2num($obj);
  +    delete $self->{-revision}->{$num};
  +}
  +
  +#   lookup a revision object
  +sub lookup ($;$) {
  +    my ($self, $id) = @_;
  +
  +    if (not defined($id)) {
  +        return values(%{$self->{-revision}});
  +    }
  +    else {
  +        if ($id =~ m|^\d+(\.\d+)*$|) {
  +            #   lookup by revision number
  +            my $num = $self->rev2num($id);
  +            my $obj = $self->num2obj($num);
  +            return $obj;
  +        }
  +        else {
  +            #   lookup by symbolic tag
  +            foreach my $symbol (keys(%{$self->{'symbols'}->{-value}})) {
  +                if ($symbol eq $id) {
  +                    my $num = $self->{'symbols'}->{-value}->{$symbol};
  +                    my $obj = $self->num2obj($num);
  +                    return $obj;
  +                }
  +            }
  +        }
       }
  -    return;
  +    return undef;
  +}
  +
  +#   set entry into object
  +sub set ($$$) {
  +    my ($self, $name, $value) = @_;
  +
  +    if (not RCS::Global::valid_entry_name($self, $name)) {
  +        croak "invalid entry \"$name\"";
  +    }
  +    if (defined($value)) {
  +        if (not RCS::Global::valid_entry_value($self, $name, $value)) {
  +            croak "invalid value \"$value\" for entry \"$name\"";
  +        }
  +    }
  +    my $old_value = $self->{$name}->{-value};
  +    $self->{$name}->{-value} = $value;
  +    $self->{-order} = [ grep { $_ ne $name } @{$self->{-order}} ];
  +    push(@{$self->{-order}}, $name);
  +    return $old_value;
  +}
  +
  +#   get entry from object
  +sub get ($;$) {
  +    my ($self, $name) = @_;
  +
  +    if (not defined($name)) {
  +        return @{$self->{-order}};
  +    }
  +    if (not RCS::Global::valid_entry_name($self, $name)) {
  +        croak "invalid entry \"$name\"";
  +    }
  +    return $self->{$name}->{-value};
   }
   
   1;
   
   __END__
   
  +##  _________________________________________________________________________
  +##
  +##                                Manual Page
  +##  _________________________________________________________________________
  +##
  +
   =pod
   
   =head1 NAME
  @@ -533,38 +777,90 @@
   
   =item C<my $rcs = >B<new>C< RCS>[C< $filename>]C<;>
   
  -This creates a new RCS object and (for convinience reasons) optionally
  -loads an RCS file via C<$rcs-E<gt>>B<load>C<($filename)> into it.
  -
   =item C<$rcs-E<gt>>B<destroy>C<;>
   
  -=item C<undef $rcs;>
  -
  -This destroys the RCS object.
  +Method B<new> creates a new RCS object and (for convinience reasons)
  +optionally loads an RCS file via C<$rcs-E<gt>>B<load>C<($filename)>
  +into it. Method B<destroy> destroys the RCS object and frees all its
  +resources.
   
  -=item [C<my $old_path = >]C<$rcs-E<gt>>B<tool>C<(">I<tool>C<", $path);>
  +=item C<$rcs-E<gt>>B<load>C<($filename);>
   
  -=item C<my $path = $rcs-E<gt>>B<tool>C<(">I<tool>C<");>
  +=item C<$rcs-E<gt>>B<save>C<($filename);>
   
  -This sets and/or gets the path to the external command I<tool>. Used
  -I<tool>s are C<rcs>, C<co> and C<diff> from GNU RCS and GNU DiffUtils.
  +Method B<load> loads the RCS file under C<$filename> into RCS object C<$rcs>.
  +Methid B<save> saves the RCS file content from RCS object C<$rcs> under C<$filename>.
   
   =item C<$rcs-E<gt>>B<parse>C<($filename, $rcstext);>
   
  -This parses the RCS file content in C<$rcstext> and
  -and stores the result in RCS object C<$rcs>.
  -
   =item C<my $rcstext = $rcs-E<gt>>B<format>C<($filename);>
   
  -This formats and returns the RCS file content in C<$rcs>.
  +Method B<parse> parses the RCS file content in C<$rcstext> and and
  +stores the result in RCS object C<$rcs>. Method B<format> formats and
  +returns the RCS file content in C<$rcs>.
   
  -=item C<$rcs-E<gt>>B<load>C<($filename);>
  +=item C<my $value = $rcs-E<gt>>B<get>C<($name);>
   
  -This loads the RCS file under C<$filename> into RCS object C<$rcs>.
  +=item C<$rcs-E<gt>>B<set>C<($name, $value);>
   
  -=item C<$rcs-E<gt>>B<save>C<($filename);>
  +Methods B<get> and B<set> get and/or set the value of the RCS entry
  +identified by C<$name>. Known entries are:
  +
  + Name    Type            Example
  + head    scalar          '1.42'
  + branch  scalar          '1.7'
  + access  array reference [ 'foo', 'bar' ]
  + symbols hash reference  { 'FOO' => '1.1', 'BAR' => '1.2' }
  + locks   hash reference  { 'foo' => '1.3', 'bar' => '1.4' }
  + strict  scalar          1
  + comment scalar          'foo bar'
  + expand  scalar          'b'
  + desc    scalar          'foo bar'
  +
  +=item C<$rcs-E<gt>>B<insert>C<($rev);>
  +
  +=item C<$rcs-E<gt>>B<remove>C<($rev);>
  +
  +=item C<my @revlist = $rcs-E<gt>>B<lookup>C<();>
  +
  +=item C<my $rev = $rcs-E<gt>>B<lookup>C<($num);>
  +
  +=item C<my $rev = $rcs-E<gt>>B<lookup>C<($tag);>
  +
  +Methods B<insert> and B<remove> insert and remove a RCS::Revision object
  +C<$rev> to/from the RCS object C<$rcs>. Method B<lookup> lookups the
  +RCS file content revision(s) and returns either all existing revision
  +objects or a particular revision looked up by revision number or
  +revision tag. The result objects are of type RCS::Revision.
  +
  +=item C<my $rev = >B<new>C< RCS::Revision>[ C<$rev>]C<;>
  +
  +=item C<$rev-E<gt>>B<destroy>C<;>
  +
  +Method B<new> creates a new RCS::Revision object. Method B<destroy>
  +destroys the RCS object and frees all its resources.
  +
  +=item [C<my $rev = >]C<$rev-E<gt>>B<revision>C<(>[C<$rev>]C<);>
  +
  +Method B<revision> gets and/or sets the revision number of the object.
  +
  +=item C<my @names = $rev-E<gt>>B<get>C<();>
  +
  +=item C<my $value = $rev-E<gt>>B<get>C<($name);>
  +
  +=item C<$rev-E<gt>>B<set>C<($name, $value);>
  +
  +Methods B<get> and B<set> get and/or set the value of the RCS::Revision
  +entry identified by C<$name>. Known entries are:
   
  -This saves the RCS file content from RCS object C<$rcs> under C<$filename>.
  + Name     Type            Example
  + date     scalar          2004.04.24.10.20.30
  + author   scalar          foo
  + state    scalar          Exp;
  + branches array reference [ '1.1.1', '1.3.2', '1.4.2' ]
  + next     scalar          '1.2'
  + log      scalar          'foo bar'
  + text     scalar          "a0 1\nfoo bar\n"
   
   =back
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Apr 24 20:11:58 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B397977902; Sat, 24 Apr 2004 20:11:57 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvsfusion/ 00BRAINSTORM cvsfusion.pl
Message-Id: <20040424181157.B397977902@mail.ossp.org>
Date: Sat, 24 Apr 2004 20:11:57 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Apr-2004 20:11:57
  Branch: HEAD                             Handle: 2004042419115700

  Modified files:
    ossp-pkg/cvsfusion      00BRAINSTORM cvsfusion.pl

  Log:
    flush some work on the main program

  Summary:
    Revision    Changes     Path
    1.2         +23 -0      ossp-pkg/cvsfusion/00BRAINSTORM
    1.3         +226 -21    ossp-pkg/cvsfusion/cvsfusion.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cvsfusion/00BRAINSTORM
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 00BRAINSTORM
  --- ossp-pkg/cvsfusion/00BRAINSTORM	22 Apr 2004 06:56:28 -0000	1.1
  +++ ossp-pkg/cvsfusion/00BRAINSTORM	24 Apr 2004 18:11:57 -0000	1.2
  @@ -47,3 +47,26 @@
       }
   }
   
  +#   apply a translation function onto all RCS revisions
  +sub revapply ($$) {
  +    my ($self, $sub) = @_;
  +    foreach my $num (keys(%{$self->{'rcs'}->{'rev'}})) {
  +        $self->{'rcs'}->{'rev'}->{$num} =
  +            &$sub($self->{'rcs'}->{'rev'}->{$num});
  +    }
  +    return;
  +}
  +
  +#   get and/or set paths to external tools
  +sub tool ($;$) {
  +    my ($self, $tool, $path) = @_;
  +    my $old = $self->{'tool'}->{$tool};
  +    if (not defined($old)) {
  +        croak "tool \"$tool\" not known";
  +    }
  +    if (defined($path)) {
  +        $self->{'tool'}->{$tool} = $path;
  +    }
  +    return $old;
  +}
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cvsfusion/cvsfusion.pl
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 cvsfusion.pl
  --- ossp-pkg/cvsfusion/cvsfusion.pl	23 Apr 2004 09:23:38 -0000	1.2
  +++ ossp-pkg/cvsfusion/cvsfusion.pl	24 Apr 2004 18:11:57 -0000	1.3
  @@ -30,12 +30,25 @@
   ##
   
   require 5;
  -use strict;
  -use warnings;
   use lib ".";
   use Getopt::Long;
   use IO::File;
  +use File::Temp qw(tempfile tempdir);
  +use File::Find;
  +use File::Path;
  +use File::Copy;
  +use File::Basename;
  +use Cwd;
   use RCS;
  +use strict;
  +use warnings;
  +no warnings 'File::Find';
  +
  +##  _________________________________________________________________________
  +##
  +##                                   Prolog
  +##  _________________________________________________________________________
  +##
   
   #   program information
   my $prog = {
  @@ -49,12 +62,13 @@
       'version'        => 0,
       'verbose'        => 0,
       'help'           => 0,
  -    'tmpdir'         => ($ENV{TMPDIR} || "/tmp") . "/" . $prog->{'name'},
  +    'tmpdir'         => '',
       'cvsroot-source' => '',
       'cvsroot-target' => '',
  -    'cvs-branch'     => '',
       'cvs-module'     => [],
  +    'cvs-branch'     => '',
       'prog-rcs'       => "rcs",
  +    'prog-co'        => "co",
       'prog-diff'      => "diff"
   };
   
  @@ -75,12 +89,13 @@
       't|tmpdir=s'          => \$opt->{'tmpdir'},
       'f|cvsroot-source=s'  => \$opt->{'cvsroot-source'},
       'l|cvsroot-target=s'  => \$opt->{'cvsroot-target'},
  -    'b|cvs-branch=s'      => \$opt->{'cvs-branch'},
       'm|cvs-module=s@'     =>  $opt->{'cvs-module'},
  +    'b|cvs-branch=s'      => \$opt->{'cvs-branch'},
       'R|prog-rcs=s'        => \$opt->{'prog-rcs'},
  +    'C|prog-co=s'         => \$opt->{'prog-co'},
       'D|prog-diff=s'       => \$opt->{'prog-diff'},
   ) || die "option parsing failed";
  -if ($opt->{-help}) {
  +if ($opt->{'help'}) {
       print "Usage: ".$prog->{'name'}." [options]\n" .
             "Available options:\n" .
             " -V,--version             print program version\n" .
  @@ -89,13 +104,14 @@
             " -t,--tmpdir=DIR          filesystem path to temporary directory\n" .
             " -f,--cvsroot-source=DIR  filesystem path to source CVS repository\n" .
             " -l,--cvsroot-target=DIR  filesystem path to target CVS repository\n" .
  -          " -b,--cvs-branch=TAG:REV  selects the CVS branch tag and revision to use\n" .
             " -m,--cvs-module=SUBDIR   selects the CVS repository module(s)\n" .
  -          " -R,--prog-rcs=FILE       filesystem path to rcs(1) program\n" .
  -          " -D,--prog-diff=FILE      filesystem path to diff(1) program\n";
  +          " -b,--cvs-branch=TAG:REV  selects the CVS branch tag/revision to use\n" .
  +          " -R,--prog-rcs=FILE       filesystem path to GNU RCS' rcs(1) program\n" .
  +          " -C,--prog-co=FILE        filesystem path to GNU RCS' co(1) program\n" .
  +          " -D,--prog-diff=FILE      filesystem path to GNU DiffUtils' diff(1) program\n";
       exit(0);
   }
  -if ($opt->{-version}) {
  +if ($opt->{'version'}) {
       print "OSSP ".$prog->{'name'}." ".$prog->{'vers'}." (".$prog->{'date'}.")\n";
       exit(0);
   }
  @@ -118,23 +134,136 @@
       print STDERR $prog->{'name'}.":ERROR: $msg\n";
   }
   
  +##  _________________________________________________________________________
  +##
  +##                              Main Procedure
  +##  _________________________________________________________________________
  +##
  +
  +#   sanity check parameters
  +my $error = 0;
  +if ($opt->{'cvsroot-source'} eq '') {
  +    &msg_error("no source CVSROOT specified (use option --cvsroot-source=DIR)");
  +    $error++;
  +}
  +elsif (not -d $opt->{'cvsroot-source'}) {
  +    &msg_error("source CVSROOT not a valid directory: ".$opt->{'cvsroot-source'});
  +    $error++;
  +}
  +elsif (not -d $opt->{'cvsroot-source'}."/CVSROOT") {
  +    &msg_error("source CVSROOT not a valid CVS repository: ".$opt->{'cvsroot-source'});
  +    $error++;
  +}
  +if ($opt->{'cvsroot-target'} eq '') {
  +    &msg_error("no target CVSROOT specified (use option --cvsroot-target=DIR)");
  +    $error++;
  +}
  +elsif (not -d $opt->{'cvsroot-target'}) {
  +    &msg_error("target CVSROOT not a valid directory: ".$opt->{'cvsroot-target'});
  +    $error++;
  +}
  +elsif (not -d $opt->{'cvsroot-target'}."/CVSROOT") {
  +    &msg_error("target CVSROOT not a valid CVS repository: ".$opt->{'cvsroot-target'});
  +    $error++;
  +}
  +if (@{$opt->{'cvs-module'}} == 0) {
  +    &msg_error("no source CVS module(s) specified (use option --cvs-module=SUBDIR)");
  +    $error++;
  +}
  +else {
  +    my $modules = [];
  +    foreach my $module (@{$opt->{'cvs-module'}}) {
  +        foreach my $m (split(/,/, $module)) {
  +            push(@{$modules}, $m);
  +        }
  +    }
  +    $opt->{'cvs-module'} = $modules;
  +    foreach my $module (@{$opt->{'cvs-module'}}) {
  +        if (not -d $opt->{'cvsroot-source'}."/".$module) {
  +            &msg_error("invalid source CVS module: $module");
  +            $error++;
  +        }
  +    }
  +}
  +if ($opt->{'cvs-branch'} eq '') {
  +    &msg_error("no target CVS branch tag/revision specified (use option --cvs-branch=TAG:REV)");
  +    $error++;
  +}
  +elsif ($opt->{'cvs-branch'} !~ m/^[A-Z][A-Z0-9_]+:\d+(\.\d+\.\d+)+$/) {
  +    &msg_error("invalid target CVS branch tag/revision: ". $opt->{'cvs-branch'});
  +    $error++;
  +}
  +exit(1) if ($error > 0);
  +
  +#   determine temporary directory
  +if ($opt->{'tmpdir'} eq '') {
  +    $opt->{'tmpdir'} = tempdir($prog->{'name'}.".XXXXXXXXXX", TMPDIR => 1, CLEANUP => 1);
  +}
  +#my ($fh, $filename) = tempfile(DIR => $opt->{'tmpdir'}, SUFFIX => ',v');
  +
  +#   determine information about RCS files in source CVS repository
  +my $cvs = {};
  +$cvs->{'source'} = [];
  +my $cwd = getcwd();
  +chdir($opt->{'cvsroot-source'});
  +sub find_cb {
  +    push(@{$cvs->{'source'}}, $File::Find::name) if (-f $_);
  +}
  +find(\&find_cb, @{$opt->{'cvs-module'}});
  +chdir($cwd);
  +
  +#   iterate over all RCS files in source CVS repository
  +foreach my $source (sort @{$cvs->{'source'}}) {
  +    print "    $source\n";
  +
  +    #   load source file
  +    my $rcs = new RCS;
  +    $rcs->load($opt->{'cvsroot-source'} . "/". $source);
  +    my @rev = $rcs->lookup();
  +    printf("    (%d revisions)\n", scalar(@rev));
  +
  +    #   save target file 
  +    my $dirname  = dirname($opt->{'cvsroot-target'} . "/". $source);
  +    mkpath($dirname) if (not -d $dirname);
  +    $rcs->save($opt->{'cvsroot-target'} . "/". $source);
  +    $rcs->destroy;
  +}
  +
  +##  _________________________________________________________________________
  +##
  +##                             Utility Functions
  +##  _________________________________________________________________________
  +##
  +
   ##  TEST
   
  -my $rcs = new RCS;
  -$rcs->tool("rcs",  "/usr/bin/rcs");
  -$rcs->tool("co",   "/usr/bin/co");
  -$rcs->tool("diff", "/usr/opkg/bin/diff");
  -$rcs->load("bash.spec,v");
  -$rcs->save("bash.spec,v.new");
  -undef $rcs;
  +#my $rcs = new RCS;
  +#my $file = "sample/openpkg-bash.spec,v";
  +#$rcs->load("$file");
  +##$rcs->revapply(sub { my ($rev) = @_; $rev =~ s/^1\./1.42.1./; return $rev; }); 
  +#$rcs->save("$file.new");
  +##exit(0);
  +#foreach my $file (glob("sample/*,v")) {
  +    #print "loading $file\n";
  +    #$rcs->load("$file");
  +    #print "saving  $file\n";
  +    #$rcs->save("$file.new");
  +#}
  +#undef $rcs;
   
   __END__
   
  +##  _________________________________________________________________________
  +##
  +##                               Manual Page
  +##  _________________________________________________________________________
  +##
  +
   =pod
   
   =head1 NAME
   
  -B<cvsfusion> - CVS Repository Fusion
  +B<OSSP cvsfusion> - CVS Repository Fusion
   
   =head1 SYNOPSIS
   
  @@ -143,16 +272,92 @@
   [B<--tmpdir=>I<dir>]
   [B<--cvsroot-source=>I<dir>]
   [B<--cvsroot-target=>I<dir>]
  -[B<--cvs-branch=>I<tag>B<:>I<rev>]
   [B<--cvs-module=>I<subdir>]
  +[B<--cvs-branch=>I<tag>B<:>I<rev>]
   [B<--prog-rcs=>I<file>]
  +[B<--prog-co=>I<file>]
   [B<--prog-diff=>I<file>]
   
   B<cvsfusion>
  -[--version]
  -[--help]
  +[B<--version>]
  +[B<--help>]
   
   =head1 DESCRIPTION
  +
  +B<OSSP cvsfusion> is a tool for merging two Concurrent Versions Systems
  +(CVS) repositories by attaching the trunk (and all its branches) of the
  +source repository as a regular branch onto the target repository. It
  +achieves this by directly operating on the level of the CVS underlying
  +I<Revision Control System> (RCS) files. The intention is to have the
  +(usually foreign vendor) source repository available as a whole in
  +the (usually own local) target repository for convenient comparisons,
  +merges, etc. It is considered a higher-level form of the CVS vendor
  +branch functionality.
  +
  +=head1 OPTIONS
  +
  +=over 4
  +
  +=item B<--verbose>
  +
  +...
  +
  +=item B<--tmpdir=>I<dir>
  +
  +...
  +
  +=item B<--cvsroot-source=>I<dir>
  +
  +...
  +
  +=item B<--cvsroot-target=>I<dir>
  +
  +...
  +
  +=item B<--cvs-module=>I<subdir>
  +
  +...
  +
  +=item B<--cvs-branch=>I<tag>B<:>I<rev>
  +
  +...
  +
  +=item B<--prog-rcs=>I<file>
  +
  +...
  +
  +=item B<--prog-co=>I<file>
  +
  +...
  +
  +=item B<--prog-diff=>I<file>
  +
  +...
  +
  +=item B<--version>
  +
  +...
  +
  +=item B<--help>
  +
  +...
  +
  +=back
  +
  +=head1 SEE ALSO
  +
  +cvs(1).
  +
  +=head1 HISTORY
  +
  +B<OSSP cvsfusion> was implemented in April 2004 for use in B<OpenPKG>
  +project in order to provide a more powerful contributor environment
  +where the B<OpenPKG> CVS repository is regularily merged into the local
  +CVS repository of the contributor.
  +
  +=head1 AUTHOR
  +
  +Ralf S. Engelschall E<lt>rse@engelschall.comE<gt>
   
   =cut
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Apr 24 20:25:20 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 236C7778FA; Sat, 24 Apr 2004 20:25:20 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cvsfusion/ RCS.pm cvsfusion.pl
Message-Id: <20040424182520.236C7778FA@mail.ossp.org>
Date: Sat, 24 Apr 2004 20:25:20 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Apr-2004 20:25:20
  Branch: HEAD                             Handle: 2004042419251900

  Modified files:
    ossp-pkg/cvsfusion      RCS.pm cvsfusion.pl

  Log:
    fix RCS::lookup() function and start filling the missing content of
    the main program

  Summary:
    Revision    Changes     Path
    1.9         +4  -1      ossp-pkg/cvsfusion/RCS.pm
    1.4         +21 -2      ossp-pkg/cvsfusion/cvsfusion.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cvsfusion/RCS.pm
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 RCS.pm
  --- ossp-pkg/cvsfusion/RCS.pm	23 Apr 2004 21:38:48 -0000	1.8
  +++ ossp-pkg/cvsfusion/RCS.pm	24 Apr 2004 18:25:19 -0000	1.9
  @@ -234,6 +234,7 @@
   require Exporter;
   use Carp;
   use IO::File;
  +no warnings;
   
   our @ISA       = qw(Exporter RCS::Object);
   our @EXPORT_OK = qw(new destroy DESTROY dump load save parse format insert remove lookup set get);
  @@ -693,7 +694,9 @@
       my ($self, $id) = @_;
   
       if (not defined($id)) {
  -        return values(%{$self->{-revision}});
  +        return map  { $self->{-revision}->{$_} }
  +               grep { $_ !~ m|^-| }
  +               keys %{$self->{-revision}};
       }
       else {
           if ($id =~ m|^\d+(\.\d+)*$|) {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cvsfusion/cvsfusion.pl
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 cvsfusion.pl
  --- ossp-pkg/cvsfusion/cvsfusion.pl	24 Apr 2004 18:11:57 -0000	1.3
  +++ ossp-pkg/cvsfusion/cvsfusion.pl	24 Apr 2004 18:25:19 -0000	1.4
  @@ -212,6 +212,9 @@
   find(\&find_cb, @{$opt->{'cvs-module'}});
   chdir($cwd);
   
  +#   determine branch tag and revision
  +my ($branch_tag, $branch_rev) = ($opt->{'cvs-branch'} =~ m/^(.+):(.+)$/);
  +
   #   iterate over all RCS files in source CVS repository
   foreach my $source (sort @{$cvs->{'source'}}) {
       print "    $source\n";
  @@ -219,8 +222,24 @@
       #   load source file
       my $rcs = new RCS;
       $rcs->load($opt->{'cvsroot-source'} . "/". $source);
  -    my @rev = $rcs->lookup();
  -    printf("    (%d revisions)\n", scalar(@rev));
  +    my @revs = $rcs->lookup();
  +    printf("    (%d revisions)\n", scalar(@revs));
  +
  +    #   move all source revisions onto target branch
  +    foreach my $rev (@revs) {
  +        my $num = $rev->revision();
  +        $rev->revision($branch_rev.".".$num);
  +    }
  +
  +    #   transform source trunk into regular branch
  +    #   FIXME
  +
  +    #   merge all source revisions into target
  +    #   FIXME
  +
  +    #   attach merged revisions onto source revision 1.1
  +    #   (and create a dead revision 1.1 if none exists)
  +    #   FIXME
   
       #   save target file 
       my $dirname  = dirname($opt->{'cvsroot-target'} . "/". $source);
  @@ .

From ossp-cvs-owner@ossp.org  Mon Apr 26 14:35:44 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 95B84778DE; Mon, 26 Apr 2004 14:35:44 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ ChangeLog README fsl_version.c
Message-Id: <20040426123544.95B84778DE@mail.ossp.org>
Date: Mon, 26 Apr 2004 14:35:44 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   26-Apr-2004 14:35:44
  Branch: HEAD                             Handle: 2004042613354301

  Modified files:
    ossp-pkg/fsl            ChangeLog README fsl_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.34        +11 -0      ossp-pkg/fsl/ChangeLog
    1.45        +1  -1      ossp-pkg/fsl/README
    1.32        +9  -9      ossp-pkg/fsl/fsl_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 ChangeLog
  --- ossp-pkg/fsl/ChangeLog	23 Apr 2004 10:29:56 -0000	1.33
  +++ ossp-pkg/fsl/ChangeLog	26 Apr 2004 12:35:43 -0000	1.34
  @@ -8,6 +8,17 @@
   
     CHANGELOG
   
  +  Changes between 1.5a3 and 1.5 (26-Apr-2004)
  +
  +    *) None. OpenPKG build farm succeeded on FreeBSD 4.9-STABLE, FreeBSD
  +       5.2-CURRENT, Debian GNU/Linux 2.2, Debian GNU/Linux 3.0, Debian
  +       GNU/Linux 3.1-pre, RedHat Linux 9, RedHat Fedora Core 1, RedHat
  +       Enterprise Linux 3 ES, SuSE Linux 8.2, SuSE Linux 9.0, Gentoo
  +       1.4, Sun Solaris 8, Sun Solaris 10/x86 and Sun Solaris 2.6. Also
  +       successful build was reported for Tru64 V5.1. In the past three
  +       days 150 real life deployments of 1.5a3 did not report a single
  +       problem.
  +
     Changes between 1.5a2 and 1.5a3 (23-Apr-2004)
   
       *) Use updated OSSP lib_cfg 0.9.3 to remove dependency to external
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/README
  ============================================================================
  $ cvs diff -u -r1.44 -r1.45 README
  --- ossp-pkg/fsl/README	23 Apr 2004 10:29:56 -0000	1.44
  +++ ossp-pkg/fsl/README	26 Apr 2004 12:35:44 -0000	1.45
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_| |___/_|
    
     OSSP fsl - Faking/Flexible Syslog Library
  -  Version 1.5a3 (23-Apr-2004)
  +  Version 1.5.0 (26-Apr-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl_version.c
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 fsl_version.c
  --- ossp-pkg/fsl/fsl_version.c	23 Apr 2004 10:29:56 -0000	1.31
  +++ ossp-pkg/fsl/fsl_version.c	26 Apr 2004 12:35:44 -0000	1.32
  @@ -8,7 +8,7 @@
   #ifndef _FSL_VERSION_C_
   #define _FSL_VERSION_C_
   
  -#define FSL_VERSION 0x105003
  +#define FSL_VERSION 0x105200
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _FSL_VERSION_C_AS_HEADER_
   
   fsl_version_t fsl_version = {
  -    0x105003,
  -    "1.5a3",
  -    "1.5a3 (23-Apr-2004)",
  -    "This is OSSP fsl, Version 1.5a3 (23-Apr-2004)",
  -    "OSSP fsl 1.5a3 (23-Apr-2004)",
  -    "OSSP fsl/1.5a3",
  -    "@(#)OSSP fsl 1.5a3 (23-Apr-2004)",
  -    "$Id: fsl_version.c,v 1.31 2004/04/23 10:29:56 thl Exp $"
  +    0x105200,
  +    "1.5.0",
  +    "1.5.0 (26-Apr-2004)",
  +    "This is OSSP fsl, Version 1.5.0 (26-Apr-2004)",
  +    "OSSP fsl 1.5.0 (26-Apr-2004)",
  +    "OSSP fsl/1.5.0",
  +    "@(#)OSSP fsl 1.5.0 (26-Apr-2004)",
  +    "$Id: fsl_version.c,v 1.32 2004/04/26 12:35:44 thl Exp $"
   };
   
   #endif /* _FSL_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Apr 26 15:21:20 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BACF6776D9; Mon, 26 Apr 2004 15:21:19 +0200 (CEST)
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/cfg/ index.wml oss...
Message-Id: <20040426132119.BACF6776D9@mail.ossp.org>
Date: Mon, 26 Apr 2004 15:21:19 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   OSSP Project Master
  Root:   /e/ossp/cvs                      Email:  ossp@ossp.org
  Module: ossp-web                         Date:   26-Apr-2004 15:21:19
  Branch: HEAD                             Handle: 2004042614211603

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/cfg    index.wml
    ossp-web/pkg/lib/fsl    index.wml
    ossp-web/pkg/lib/l2     index.wml
    ossp-web/pkg/lib/str    index.wml

  Log:
    bulk update versions

  Summary:
    Revision    Changes     Path
    1.81        +8  -0      ossp-web/new/news.txt
    1.9         +2  -2      ossp-web/pkg/lib/cfg/index.wml
    1.21        +3  -3      ossp-web/pkg/lib/fsl/index.wml
    1.76        +4  -4      ossp-web/pkg/lib/index.wml
    1.12        +2  -2      ossp-web/pkg/lib/l2/index.wml
    1.9         +2  -2      ossp-web/pkg/lib/str/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.80 -r1.81 news.txt
  --- ossp-web/new/news.txt	5 Apr 2004 14:46:32 -0000	1.80
  +++ ossp-web/new/news.txt	26 Apr 2004 13:21:16 -0000	1.81
  @@ -1,3 +1,11 @@
  +26-Apr-2004: Released L<OSSP fsl> 1.5.0
  +26-Apr-2004: Released L<OSSP fsl> 1.5a3
  +23-APr-2004: Released T<OSSP lmtp2nntp> 1.3a2
  +23-Apr-2004: Released L<OSSP str> 0.9.9
  +23-Apr-2004: Released L<OSSP l2> 0.9.8
  +23-Apr-2004: Released L<OSSP cfg> 0.9.3
  +22-Apr-2004: Released L<OSSP l2> 0.9.7
  +21-Apr-2004: Released L<OSSP l2> 0.9.6
   05-Apr-2004: Released L<OSSP ex> 1.0.4
   04-Apr-2004: Released L<OSSP val> 0.9.2
   04-Apr-2004: Released L<OSSP var> 1.1.0
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/cfg/index.wml
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 index.wml
  --- ossp-web/pkg/lib/cfg/index.wml	10 Nov 2003 19:04:53 -0000	1.8
  +++ ossp-web/pkg/lib/cfg/index.wml	26 Apr 2004 13:21:17 -0000	1.9
  @@ -36,7 +36,7 @@
   <pkg_status
       name="cfg" assign="rse"
       stable="none"    stable_date="none"
  -    unstable="0.9.1" unstable_date="10-Nov-2003"
  +    unstable="0.9.3" unstable_date="23-Apr-2004"
   	done=95>
   
   <h2>Source</h2>
  @@ -46,7 +46,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/cfg/
       directory=$(FTP_ROOT_DIR)/pkg/lib/cfg/
       files="cfg-*.tar.gz" 
  -	stable="none" unstable="cfg-0.9.1.tar.gz">
  +	stable="none" unstable="cfg-0.9.3.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/fsl/index.wml
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 index.wml
  --- ossp-web/pkg/lib/fsl/index.wml	30 Jun 2003 14:39:09 -0000	1.20
  +++ ossp-web/pkg/lib/fsl/index.wml	26 Apr 2004 13:21:18 -0000	1.21
  @@ -46,8 +46,8 @@
   <pkg_status
       name="fsl" assign="thl"
       genesis="Jul-2002"
  -    stable="1.2.0" stable_date="30-Jun-2003"
  -    unstable="none"  unstable_date="none"
  +    stable="1.5.0" stable_date="26-Apr-2004"
  +    unstable="none" unstable_date="none"
   	done=100>
   
   <h2>Source</h2>
  @@ -57,7 +57,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/fsl/
       directory=$(FTP_ROOT_DIR)/pkg/lib/fsl/
       files="fsl-*.tar.gz" 
  -	stable="fsl-1.2\\\\\\\.0.tar.gz" unstable="none">
  +	stable="fsl-1.5\\\\\\\.0.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.75 -r1.76 index.wml
  --- ossp-web/pkg/lib/index.wml	5 Apr 2004 14:46:32 -0000	1.75
  +++ ossp-web/pkg/lib/index.wml	26 Apr 2004 13:21:17 -0000	1.76
  @@ -27,7 +27,7 @@
   			done=100 stable=1.2.0 unstable=none>
     <pkg_item name="fsl" longname="OSSP fsl" type="lib"
               desc="Faked/Flexible Syslog"
  -			done=100 stable=1.3.0 unstable=none>
  +			done=100 stable=1.5.0 unstable=none>
     <pkg_item name="var" longname="OSSP var" type="lib"
               desc="Variable Expansion"
   			done=100 stable=1.1.0 unstable=none>
  @@ -42,10 +42,10 @@
   			done=95 stable=none unstable=0.9.0>
     <pkg_item name="str" longname="OSSP str" type="lib"
               desc="String Handling"
  -			done=95 stable=none unstable=0.9.8>
  +			done=95 stable=none unstable=0.9.9>
     <pkg_item name="l2" longname="OSSP l2" type="lib"
               desc="Flexible Logging"
  -			done=95 stable=none unstable=0.9.5>
  +			done=95 stable=none unstable=0.9.8>
     <pkg_item name="al" longname="OSSP al" type="lib"
               desc="Assembly Line"
   			done=95 stable=none unstable=0.9.1>
  @@ -54,7 +54,7 @@
   			done=95 stable=none unstable=0.9.2>
     <pkg_item name="cfg" longname="OSSP cfg" type="lib"
               desc="Configuration Parsing"
  -			done=95 stable=none unstable=0.9.1>
  +			done=95 stable=none unstable=0.9.3>
     <pkg_item name="act" longname="OSSP act" type="lib"
               desc="Abstract Container Types"
   			done=25 stable=none unstable=none>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/l2/index.wml
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 index.wml
  --- ossp-web/pkg/lib/l2/index.wml	17 Feb 2004 09:16:05 -0000	1.11
  +++ ossp-web/pkg/lib/l2/index.wml	26 Apr 2004 13:21:18 -0000	1.12
  @@ -40,7 +40,7 @@
   <pkg_status
       name="l2" assign="rse"
       stable="none"    stable_date="none"
  -    unstable="0.9.5" unstable_date="10-Nov-2003"
  +    unstable="0.9.8" unstable_date="23-Apr-2004"
   	done=95>
   
   <h2>Source</h2>
  @@ -50,7 +50,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/l2/
       directory=$(FTP_ROOT_DIR)/pkg/lib/l2/
       files="l2-*.tar.gz" 
  -	stable="none" unstable="l2-0.9.5.tar.gz">
  +	stable="none" unstable="l2-0.9.8.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/str/index.wml
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 index.wml
  --- ossp-web/pkg/lib/str/index.wml	17 Feb 2004 09:16:06 -0000	1.8
  +++ ossp-web/pkg/lib/str/index.wml	26 Apr 2004 13:21:19 -0000	1.9
  @@ -27,7 +27,7 @@
   <pkg_status
       name="str" assign="rse"
       stable="none"    stable_date="none"
  -    unstable="0.9.8" unstable_date="17-Feb-2003"
  +    unstable="0.9.9" unstable_date="23-Apr-2004"
   	done=95>
   
   <h2>Source</h2>
  @@ -37,7 +37,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/str/
       directory=$(FTP_ROOT_DIR)/pkg/lib/str/
       files="str-*.tar.gz" 
  -	stable="none" unstable="str-0.9.8.tar.gz">
  +	stable="none" unstable="str-0.9.9.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Apr 26 15:21:45 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4B6257791E; Mon, 26 Apr 2004 15:21:45 +0200 (CEST)
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/tool/lmtp2nntp/ index.wml
Message-Id: <20040426132145.4B6257791E@mail.ossp.org>
Date: Mon, 26 Apr 2004 15:21:45 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   OSSP Project Master
  Root:   /e/ossp/cvs                      Email:  ossp@ossp.org
  Module: ossp-web                         Date:   26-Apr-2004 15:21:45
  Branch: HEAD                             Handle: 2004042614214400

  Modified files:
    ossp-web/pkg/tool/lmtp2nntp
                            index.wml

  Log:
    update tool version

  Summary:
    Revision    Changes     Path
    1.13        +3  -3      ossp-web/pkg/tool/lmtp2nntp/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/lmtp2nntp/index.wml
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 index.wml
  --- ossp-web/pkg/tool/lmtp2nntp/index.wml	13 Feb 2003 10:12:36 -0000	1.12
  +++ ossp-web/pkg/tool/lmtp2nntp/index.wml	26 Apr 2004 13:21:44 -0000	1.13
  @@ -28,7 +28,7 @@
   
   <h2>Authors</h2>
   
  -<pkg_author name="Thomas Lotterer" mail="thomas.lotterer@cw.com">
  +<pkg_author name="Thomas Lotterer" mail="thomas@lotterer.net">
   <pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
   
   <h2>Status</h2>
  @@ -36,7 +36,7 @@
   <pkg_status
       name="lmtp2nntp" assign="thl"
       stable="1.2.0"   stable_date="13-Feb-2002"
  -    unstable="none" unstable_date="none"
  +    unstable="1.3a2" unstable_date="23-Apr-2004"
   	done=100>
   
   <h2>Source</h2>
  @@ -45,7 +45,7 @@
       cvs=$(CVS_ROOT_URL)/pkg/tool/lmtp2nntp/
       url=$(FTP_ROOT_URL)/pkg/tool/lmtp2nntp/
       directory=$(FTP_ROOT_DIR)/pkg/tool/lmtp2nntp/
  -    files="lmtp2nntp-*.tar.gz" stable="lmtp2nntp-1.2\\\\\\\.0.tar.gz" unstable="none">
  +    files="lmtp2nntp-*.tar.gz" stable="lmtp2nntp-1.2\\\\\\\.0.tar.gz" unstable="lmtp2nntp-1.3a2.tar.gz">
   
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Apr 26 16:39:58 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3A37977532; Mon, 26 Apr 2004 16:39:58 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/com/ sponsors.wml ossp-web/new/ news.txt
Message-Id: <20040426143958.3A37977532@mail.ossp.org>
Date: Mon, 26 Apr 2004 16:39:58 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   26-Apr-2004 16:39:58
  Branch: HEAD                             Handle: 2004042615395700

  Modified files:
    ossp-web/com            sponsors.wml
    ossp-web/new            news.txt

  Log:
    flush pending changes

  Summary:
    Revision    Changes     Path
    1.10        +11 -6      ossp-web/com/sponsors.wml
    1.82        +1  -1      ossp-web/new/news.txt
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/com/sponsors.wml
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 sponsors.wml
  --- ossp-web/com/sponsors.wml	17 Sep 2003 17:28:01 -0000	1.9
  +++ ossp-web/com/sponsors.wml	26 Apr 2004 14:39:57 -0000	1.10
  @@ -20,21 +20,21 @@
   <h2>Gold Sponsors</h2>
   
   Each of following individuals and companies donated (in total) money and/or
  -resources worth USD $5000 and more.
  +resources worth USD $10,000 and more.
   
   <ul>
     <li><a href="http://www.cw.com/"><img src="$(IMG)/cw.png" alt="Cable & Wireless" align=right border=0></a>
  -      <a href="http://www.cw.com/de/"><b>Cable &amp; Wireless Telecommunication Services GmbH</b></a> (1999-2003)<br>
  +      <a href="http://www.cw.com/de"><b>Cable &amp; Wireless Telecommunication Services GmbH</b></a> (1999-2004)<br>
         (Hosting Rack-Space, Network Connectivity, Hardware, Manpower)
   </ul>
   
   <h2>Silver Sponsors</h2>
   
   Each of following individuals and companies donated (in total) money and/or
  -resources worth USD $500 and more.
  +resources worth USD $1,000 and more.
   
   <ul>
  -  <li><a href="http://www.engelschall.com/"><b>Ralf S. Engelschall</b></a> (1998-2003)<br>
  +  <li><a href="http://www.engelschall.com/"><b>Ralf S. Engelschall</b></a> (1998-2004)<br>
         (Domain Registration, System Administration, Hardware)
     <li><a href="http://www.sdm.de/"><b>sd&m software design & management AG</b></a> (1998)<br>
         (Computing Resources, Network Resources, Manpower) 
  @@ -45,10 +45,15 @@
   <h2>Bronze Sponsors</h2>
   
   Each of following individuals and companies donated (in total) money and/or
  -resources worth USD $50 and more.
  +resources worth USD $100 and more.
   
   <ul>
  -   <li><a href="mailto:alby@thirteen.net"><b>Albert Lash</b></a> (2002)
  +   <li><a href="http://www.bauernhofurlaub-ostallgaeu.de/"><b>Eva Lachenmayer, Bauernhofurlaub im Allgäu</b></a> (2004)
  +   <li><a href="http://www.set-die-agentur.de/"><b>Markus Lenk, Set - Die Agentur</b></a> (2004)
      <li><a href="http://www.abakus-internet-marketing.de/"><b>ABAKUS Internet Marketing</b></a> (2003)
  +   <li><a href="http://www.southmedia.de/"><b>Jan Piotrowski, southmedia</b></a> (2003)
  +   <li><a href="mailto:will@webmaster-toolkit.com"><b>Will Board, Webmaster Toolkit</b></a> (2003)
  +   <li><a href="http://www.trendfish.de/"><b>Trendfish Marketing</b></a> (2003)
  +   <li><a href="mailto:alby@thirteen.net"><b>Albert Lash</b></a> (2002)
   </ul>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.81 -r1.82 news.txt
  --- ossp-web/new/news.txt	26 Apr 2004 13:21:16 -0000	1.81
  +++ ossp-web/new/news.txt	26 Apr 2004 14:39:57 -0000	1.82
  @@ -1,6 +1,6 @@
   26-Apr-2004: Released L<OSSP fsl> 1.5.0
   26-Apr-2004: Released L<OSSP fsl> 1.5a3
  -23-APr-2004: Released T<OSSP lmtp2nntp> 1.3a2
  +23-Apr-2004: Released T<OSSP lmtp2nntp> 1.3a2
   23-Apr-2004: Released L<OSSP str> 0.9.9
   23-Apr-2004: Released L<OSSP l2> 0.9.8
   23-Apr-2004: Released L<OSSP cfg> 0.9.3
  @@ .

From ossp-cvs-owner@ossp.org  Wed May  5 15:07:22 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 67F7F77949; Wed,  5 May 2004 15:07:22 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ ChangeLog shiela.pl
Message-Id: <20040505130722.67F7F77949@mail.ossp.org>
Date: Wed,  5 May 2004 15:07:22 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-May-2004 15:07:22
  Branch: HEAD                             Handle: 2004050514072100

  Modified files:
    ossp-pkg/shiela         ChangeLog shiela.pl

  Log:
    Flush pending changes:
    - Provide "cvs rdiff" support in diff outputs.
    - Support CVS 1.12.x (option -l no longer existing).

  Summary:
    Revision    Changes     Path
    1.38        +7  -1      ossp-pkg/shiela/ChangeLog
    1.51        +21 -11     ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	16 Jan 2004 12:09:03 -0000	1.37
  +++ ossp-pkg/shiela/ChangeLog	5 May 2004 13:07:21 -0000	1.38
  @@ -9,7 +9,13 @@
   
     ChangeLog
   
  -  Changes between 1.0.4 and 1.0.5 (23-Dec-2002 to xx-Oct-2003):
  +  Changes between 1.0.4 and 1.0.5 (23-Dec-2002 to xx-May-2004):
  +
  +   *) Provide "cvs rdiff" support in diff outputs.
  +      [Ralf S. Engelschall]
  +
  +   *) Support CVS 1.12.x (option -l no longer existing).
  +      [Ralf S. Engelschall]
   
      *) Fix a nasty syntax error in shiela-install.sh occurring
         if variables are passes as command line parameters.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================================
  $ cvs diff -u -r1.50 -r1.51 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	23 Dec 2002 14:45:16 -0000	1.50
  +++ ossp-pkg/shiela/shiela.pl	5 May 2004 13:07:21 -0000	1.51
  @@ -580,7 +580,7 @@
       STDERR->flush; # because of fork() behind open2()!
       $cvs->{rfd} = new IO::Handle;
       $cvs->{wfd} = new IO::Handle;
  -    $cvs->{pid} = IPC::Open2::open2($cvs->{rfd}, $cvs->{wfd}, "$program -Q -l -n server")
  +    $cvs->{pid} = IPC::Open2::open2($cvs->{rfd}, $cvs->{wfd}, "$program -f -Q -n server")
           || die "cannot spawn CVS server process `$program server'";
       print STDERR "cvs server: spawned (pid $cvs->{pid})\n" if ($trace);
       bless ($cvs, $class);
  @@ -1248,14 +1248,14 @@
       #   annotate the files with the branch they stay on
       my $cvsstat = '';
       if (not $RT->{useserver}) {
  -        my $io = new IO::File "$RT->{cvs} -f -l -Q -n status ".join(' ', @cvsfiles)."|"
  +        my $io = new IO::File "$RT->{cvs} -f -Q -n status ".join(' ', @cvsfiles)."|"
               || die "unable to open CVS command pipe for reading";
           $cvsstat .= $_ while (<$io>);
           $io->close;
       }
       else {
           my $cvs = new CVS ($RT->{cvs}, $RT->{cvsroot});
  -        $cvs->global_options("-l", "-Q", "-n");
  +        $cvs->global_options("-Q", "-n");
           $cvs->directory($cvsdir);
           foreach my $cvsfile (@cvsfiles) {
               $cvs->entry($cvsfile);
  @@ -1488,7 +1488,7 @@
                       print STDERR "cvs import: Ignoring this operation - don't expect log messages!\n";
                       exit(0);
                   }
  -                my $io = new IO::File "$RT->{cvs} -f -l -Q -n log -r$It '$Is'|"
  +                my $io = new IO::File "$RT->{cvs} -f -Q -n log -r$It '$Is'|"
                       || die "unable to open CVS command pipe for reading";
                   $rcslog = $_ while (<$io>);
                   $io->close;
  @@ -1610,7 +1610,7 @@
           if ($Io eq 'R' and $Iv eq 'NONE') {
               my $rcslog ='';
               if (not $RT->{useserver}) {
  -                my $io = new IO::File "$RT->{cvs} -f -l -Q -n log '$Is'|"
  +                my $io = new IO::File "$RT->{cvs} -f -Q -n log '$Is'|"
                       || die "unable to open CVS command pipe for reading";
                   $rcslog .= $_ while (<$io>);
                   $io->close;
  @@ -1633,7 +1633,7 @@
           my $rcslog = '';
           if ($Io eq 'A' or $Io eq 'M' or $Io eq 'R') {
               if (not $RT->{useserver}) {
  -                my $io = new IO::File "$RT->{cvs} -f -l -Q -n log -r$Iv '$Is'|"
  +                my $io = new IO::File "$RT->{cvs} -f -Q -n log -r$Iv '$Is'|"
                       || die "unable to open CVS command pipe for reading";
                   $rcslog .= $_ while (<$io>);
                   $io->close;
  @@ -1669,7 +1669,7 @@
           }
           else {
               if ($Io eq 'A') {
  -                my $io = new IO::File "<$Is" || die "unable open $Is for reading";
  +                my $io = new IO::File "<$Is" || die "unable to open $Is for reading";
                   my $l = 0;
                   $l++ while (<$io>);
                   $io->close;
  @@ -1706,7 +1706,7 @@
               my $io = new IO::File ">$RT->{tmpfile}.all"
                   || die "unable to open temporary file $RT->{tmpfile}.all for writing";
               if (not $RT->{useserver}) {
  -                my $cvs = new IO::File "$RT->{cvs} -f -l -Q -n update -p -r$Iv '$Is'|"
  +                my $cvs = new IO::File "$RT->{cvs} -f -Q -n update -p -r$Iv '$Is'|"
                       || die "unable to open CVS command pipe for reading";
                   $io->print($_) while (<$cvs>);
                   $cvs->close;
  @@ -1789,7 +1789,7 @@
                       my $io = new IO::File ">$RT->{tmpfile}.old"
                           || die "unable to open temporary file $RT->{tmpfile}.old for writing";
                       if (not $RT->{useserver}) {
  -                        my $cvs = new IO::File "$RT->{cvs} -f -l -Q -n update -p -r$IV '$Is'|"
  +                        my $cvs = new IO::File "$RT->{cvs} -f -Q -n update -p -r$IV '$Is'|"
                               || die "unable to open CVS command pipe for reading";
                           $io->print($_) while (<$cvs>);
                           $cvs->close;
  @@ -1810,7 +1810,7 @@
                       $io = new IO::File ">$RT->{tmpfile}.new"
                           || die "unable to open temporary file $RT->{tmpfile}.new for writing";
                       if (not $RT->{useserver}) {
  -                        my $cvs = new IO::File "$RT->{cvs} -f -l -Q -n update -p -r$Iv '$Is'|"
  +                        my $cvs = new IO::File "$RT->{cvs} -f -Q -n update -p -r$Iv '$Is'|"
                               || die "unable to open CVS command pipe for reading";
                           $io->print($_) while (<$cvs>);
                           $cvs->close;
  @@ -1856,7 +1856,7 @@
                   #   generate textual change patch script
                   my $d = '';
                   if (not $RT->{useserver}) {
  -                    my $io = new IO::File "$RT->{cvs} -f -l -Q -n diff -u -r$IV -r$Iv '$Is'|"
  +                    my $io = new IO::File "$RT->{cvs} -f -Q -n diff -u -r$IV -r$Iv '$Is'|"
                           || die "unable to open CVS command pipe for reading";
                       $d .= $_ while (<$io>);
                       $io->close;
  @@ -2255,6 +2255,16 @@
                           elsif ($1 eq 'v') { $IN->{file}->{$file}->{newrev}; }
                       |gse;
                       $O .= "$prefix$url\n";
  +                }
  +            }
  +            elsif ($style eq 'rdiff') {
  +                $O .= "To re-generate the difference summary of this commit, execute:\n";
  +                foreach $file (sort(keys(%{$IN->{file}}))) {
  +                    $O .= "cvs rdiff -uN " .
  +                          " -r" . $IN->{file}->{$file}->{oldrev} .
  +                          " -r" . $IN->{file}->{$file}->{newrev} .
  +                          " " . $file .
  +                          "\n";
                   }
               }
               elsif ($style eq 'patch:plain') {
  @@ .

From ossp-cvs-owner@ossp.org  Wed May  5 15:08:30 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B4B6B77949; Wed,  5 May 2004 15:08:30 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ ChangeLog devtool.conf
Message-Id: <20040505130830.B4B6B77949@mail.ossp.org>
Date: Wed,  5 May 2004 15:08:30 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-May-2004 15:08:30
  Branch: HEAD                             Handle: 2004050514083000

  Modified files:
    ossp-pkg/shiela         ChangeLog devtool.conf

  Log:
    Upgrade build environment to GNU autoconf 2.59

  Summary:
    Revision    Changes     Path
    1.39        +3  -0      ossp-pkg/shiela/ChangeLog
    1.10        +1  -1      ossp-pkg/shiela/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.38 -r1.39 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	5 May 2004 13:07:21 -0000	1.38
  +++ ossp-pkg/shiela/ChangeLog	5 May 2004 13:08:30 -0000	1.39
  @@ -11,6 +11,9 @@
   
     Changes between 1.0.4 and 1.0.5 (23-Dec-2002 to xx-May-2004):
   
  +   *) Upgrade build environment to GNU autoconf 2.59
  +      [Ralf S. Engelschall]
  +
      *) Provide "cvs rdiff" support in diff outputs.
         [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 devtool.conf
  --- ossp-pkg/shiela/devtool.conf	23 Dec 2002 14:46:49 -0000	1.9
  +++ ossp-pkg/shiela/devtool.conf	5 May 2004 13:08:30 -0000	1.10
  @@ -4,7 +4,7 @@
   
   %autogen
       @autogen shtool   1.6.2 "1.6.*" all
  -    @autogen autoconf 2.57  "2.5[3-9]*"
  +    @autogen autoconf 2.59  "2.5[3-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .

From ossp-cvs-owner@ossp.org  Wed May  5 15:11:44 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6DA3D77949; Wed,  5 May 2004 15:11:44 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ ChangeLog Makefile.in README configure.ac...
Message-Id: <20040505131144.6DA3D77949@mail.ossp.org>
Date: Wed,  5 May 2004 15:11:44 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-May-2004 15:11:44
  Branch: HEAD                             Handle: 2004050514114300

  Modified files:
    ossp-pkg/shiela         ChangeLog Makefile.in README configure.ac
                            shiela-install.pod shiela-install.sh shiela.pl
                            shiela.pod

  Log:
    Bump year in copyright messages for 2003 and 2004

  Summary:
    Revision    Changes     Path
    1.40        +3  -0      ossp-pkg/shiela/ChangeLog
    1.6         +2  -1      ossp-pkg/shiela/Makefile.in
    1.14        +2  -2      ossp-pkg/shiela/README
    1.3         +7  -7      ossp-pkg/shiela/configure.ac
    1.21        +2  -2      ossp-pkg/shiela/shiela-install.pod
    1.23        +2  -2      ossp-pkg/shiela/shiela-install.sh
    1.52        +2  -2      ossp-pkg/shiela/shiela.pl
    1.22        +2  -2      ossp-pkg/shiela/shiela.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.39 -r1.40 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	5 May 2004 13:08:30 -0000	1.39
  +++ ossp-pkg/shiela/ChangeLog	5 May 2004 13:11:43 -0000	1.40
  @@ -11,6 +11,9 @@
   
     Changes between 1.0.4 and 1.0.5 (23-Dec-2002 to xx-May-2004):
   
  +   *) Bump year in copyright messages for 2003 and 2004.
  +      [Ralf S. Engelschall]
  +
      *) Upgrade build environment to GNU autoconf 2.59
         [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 Makefile.in
  --- ossp-pkg/shiela/Makefile.in	21 Dec 2002 11:00:17 -0000	1.5
  +++ ossp-pkg/shiela/Makefile.in	5 May 2004 13:11:43 -0000	1.6
  @@ -1,6 +1,7 @@
   ##
   ##  OSSP shiela - CVS Access Control and Logging Facility
  -##  Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2004 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP shiela, an access control and logging
   ##  facility for Concurrent Versions System (CVS) repositories
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/README
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 README
  --- ossp-pkg/shiela/README	23 Dec 2002 14:46:15 -0000	1.13
  +++ ossp-pkg/shiela/README	5 May 2004 13:11:43 -0000	1.14
  @@ -21,8 +21,8 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2000-2002 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2000-2004 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2000-2004 The OSSP Project <http://www.ossp.org/>
   
     This file is part of OSSP shiela, an access control and logging
     facility for Concurrent Versions System (CVS) repositories
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/configure.ac
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 configure.ac
  --- ossp-pkg/shiela/configure.ac	21 Dec 2002 09:42:57 -0000	1.2
  +++ ossp-pkg/shiela/configure.ac	5 May 2004 13:11:43 -0000	1.3
  @@ -1,15 +1,15 @@
   ##
   ##  OSSP shiela - CVS Access Control and Logging Facility
  -##  Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2000-2002 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2000-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2004 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP shiela, an access control and logging
   ##  facility for Concurrent Versions System (CVS) repositories
   ##  which can be found at http://www.ossp.org/pkg/tool/shiela/.
   ##
   ##  This program is free software; you can redistribute it and/or
  -##  modify it under the terms of the GNU General Public  License 
  -##  as published by the Free Software Foundation; either version 
  +##  modify it under the terms of the GNU General Public  License
  +##  as published by the Free Software Foundation; either version
   ##  2.0 of the License, or (at your option) any later version.
   ##
   ##  This program is distributed in the hope that it will be useful,
  @@ -17,7 +17,7 @@
   ##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
   ##  General Public License for more details.
   ##
  -##  You should have received a copy of the GNU General Public License 
  +##  You should have received a copy of the GNU General Public License
   ##  along with this file; if not, write to the Free Software
   ##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
   ##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  @@ -30,8 +30,8 @@
   
   V=`./shtool version -ltxt -dlong VERSION`
   ./shtool echo -e "Configuring %BOSSP shiela%b, Version %B${V}%b"
  -echo "Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>"
  -echo "Copyright (c) 2000-2002 The OSSP Project <http://www.ossp.org/>"
  +echo "Copyright (c) 2000-2004 Ralf S. Engelschall <rse@engelschall.com>"
  +echo "Copyright (c) 2000-2004 The OSSP Project <http://www.ossp.org/>"
   
   AC_MSG_CHECKING(for Perl program)
   AC_ARG_WITH(perl,dnl
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-install.pod
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 shiela-install.pod
  --- ossp-pkg/shiela/shiela-install.pod	23 Dec 2002 14:46:15 -0000	1.20
  +++ ossp-pkg/shiela/shiela-install.pod	5 May 2004 13:11:43 -0000	1.21
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP shiela - CVS Access Control and Logging Facility
  -##  Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2000-2002 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2000-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2004 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP shiela, an access control and logging
   ##  facility for Concurrent Versions System (CVS) repositories
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-install.sh
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 shiela-install.sh
  --- ossp-pkg/shiela/shiela-install.sh	16 Jan 2004 12:11:07 -0000	1.22
  +++ ossp-pkg/shiela/shiela-install.sh	5 May 2004 13:11:43 -0000	1.23
  @@ -1,8 +1,8 @@
   #!@SH@
   ##
   ##  OSSP shiela - CVS Access Control and Logging Facility
  -##  Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2000-2002 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2000-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2004 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP shiela, an access control and logging
   ##  facility for Concurrent Versions System (CVS) repositories
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================================
  $ cvs diff -u -r1.51 -r1.52 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	5 May 2004 13:07:21 -0000	1.51
  +++ ossp-pkg/shiela/shiela.pl	5 May 2004 13:11:43 -0000	1.52
  @@ -1,8 +1,8 @@
   #!@PERL@ -w
   ##
   ##  OSSP shiela - CVS Access Control and Logging Facility
  -##  Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2000-2002 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2000-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2004 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP shiela, an access control and logging
   ##  facility for Concurrent Versions System (CVS) repositories
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pod
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 shiela.pod
  --- ossp-pkg/shiela/shiela.pod	23 Dec 2002 14:46:15 -0000	1.21
  +++ ossp-pkg/shiela/shiela.pod	5 May 2004 13:11:43 -0000	1.22
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP shiela - CVS Access Control and Logging Facility
  -##  Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2000-2002 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2000-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2004 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP shiela, an access control and logging
   ##  facility for Concurrent Versions System (CVS) repositories
  @@ .

From ossp-cvs-owner@ossp.org  Wed May  5 15:18:48 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5FA007792F; Wed,  5 May 2004 15:18:48 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ AUTHORS ChangeLog INSTALL Makefile.in REA...
Message-Id: <20040505131848.5FA007792F@mail.ossp.org>
Date: Wed,  5 May 2004 15:18:48 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-May-2004 15:18:48
  Branch: HEAD                             Handle: 2004050514184700

  Modified files:
    ossp-pkg/shiela         AUTHORS ChangeLog INSTALL Makefile.in README
                            THANKS TODO shiela-install.pod shiela.pod

  Log:
    remove trailing whitespaces

  Summary:
    Revision    Changes     Path
    1.3         +3  -3      ossp-pkg/shiela/AUTHORS
    1.41        +3  -3      ossp-pkg/shiela/ChangeLog
    1.5         +3  -3      ossp-pkg/shiela/INSTALL
    1.7         +3  -3      ossp-pkg/shiela/Makefile.in
    1.15        +2  -2      ossp-pkg/shiela/README
    1.4         +2  -2      ossp-pkg/shiela/THANKS
    1.9         +4  -4      ossp-pkg/shiela/TODO
    1.22        +1  -1      ossp-pkg/shiela/shiela-install.pod
    1.23        +1  -1      ossp-pkg/shiela/shiela.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/AUTHORS
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 AUTHORS
  --- ossp-pkg/shiela/AUTHORS	21 Dec 2002 09:42:57 -0000	1.2
  +++ ossp-pkg/shiela/AUTHORS	5 May 2004 13:18:47 -0000	1.3
  @@ -1,5 +1,5 @@
      _        ___  ____ ____  ____        _     _      _
  -  |_|_ _   / _ \/ ___/ ___||  _ \   ___| |__ (_) ___| | __ _ 
  +  |_|_ _   / _ \/ ___/ ___||  _ \   ___| |__ (_) ___| | __ _
     _|_||_| | | | \___ \___ \| |_) | / __| '_ \| |/ _ \ |/ _` |
    |_||_|_| | |_| |___) |__) |  __/  \__ \ | | | |  __/ | (_| |
     |_|_|_|  \___/|____/____/|_|     |___/_| |_|_|\___|_|\__,_|
  @@ -9,10 +9,10 @@
   
     AUTHORS
   
  -  This is a list of authors who have written or edited parts of 
  +  This is a list of authors who have written or edited parts of
     the OSSP shiela sources.
   
     o  OSSP shiela (as a whole)
        Written by: Ralf S. Engelschall
        Edited  by: Ralf S. Engelschall
  -  
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.40 -r1.41 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	5 May 2004 13:11:43 -0000	1.40
  +++ ossp-pkg/shiela/ChangeLog	5 May 2004 13:18:47 -0000	1.41
  @@ -1,5 +1,5 @@
      _        ___  ____ ____  ____        _     _      _
  -  |_|_ _   / _ \/ ___/ ___||  _ \   ___| |__ (_) ___| | __ _ 
  +  |_|_ _   / _ \/ ___/ ___||  _ \   ___| |__ (_) ___| | __ _
     _|_||_| | | | \___ \___ \| |_) | / __| '_ \| |/ _ \ |/ _` |
    |_||_|_| | |_| |___) |__) |  __/  \__ \ | | | |  __/ | (_| |
     |_|_|_|  \___/|____/____/|_|     |___/_| |_|_|\___|_|\__,_|
  @@ -99,7 +99,7 @@
         [Ralf S. Engelschall]
   
     Changes between 0.9.2 and 1.0.0 (19-Aug-2002 to 22-Dec-2002):
  -   
  +
      *) Add branch information to the Subject lines of generated Emails.
         Additionally, for better readability, use a trailing slash on
         directory names in the Subject lines of generated Emails.
  @@ -168,7 +168,7 @@
   
      *) Fixed information gathering for stock CVS version.
         [Ralf S. Engelschall]
  -  
  +
      *) Fixed +d/-d output on removed files.
         [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/INSTALL
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 INSTALL
  --- ossp-pkg/shiela/INSTALL	21 Dec 2002 11:00:17 -0000	1.4
  +++ ossp-pkg/shiela/INSTALL	5 May 2004 13:18:47 -0000	1.5
  @@ -1,5 +1,5 @@
      _        ___  ____ ____  ____        _     _      _
  -  |_|_ _   / _ \/ ___/ ___||  _ \   ___| |__ (_) ___| | __ _ 
  +  |_|_ _   / _ \/ ___/ ___||  _ \   ___| |__ (_) ___| | __ _
     _|_||_| | | | \___ \___ \| |_) | / __| '_ \| |/ _ \ |/ _` |
    |_||_|_| | |_| |___) |__) |  __/  \__ \ | | | |  __/ | (_| |
     |_|_|_|  \___/|____/____/|_|     |___/_| |_|_|\___|_|\__,_|
  @@ -8,7 +8,7 @@
     ____________________________________________________________________
   
     INSTALLATION
  -  
  -  Usually you want to use OSSP shiela inside the repository tree. 
  +
  +  Usually you want to use OSSP shiela inside the repository tree.
     Read the shiela-install(1) manual page for details.
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 Makefile.in
  --- ossp-pkg/shiela/Makefile.in	5 May 2004 13:11:43 -0000	1.6
  +++ ossp-pkg/shiela/Makefile.in	5 May 2004 13:18:47 -0000	1.7
  @@ -8,8 +8,8 @@
   ##  which can be found at http://www.ossp.org/pkg/tool/shiela/.
   ##
   ##  This program is free software; you can redistribute it and/or
  -##  modify it under the terms of the GNU General Public  License 
  -##  as published by the Free Software Foundation; either version 
  +##  modify it under the terms of the GNU General Public  License
  +##  as published by the Free Software Foundation; either version
   ##  2.0 of the License, or (at your option) any later version.
   ##
   ##  This program is distributed in the hope that it will be useful,
  @@ -17,7 +17,7 @@
   ##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
   ##  General Public License for more details.
   ##
  -##  You should have received a copy of the GNU General Public License 
  +##  You should have received a copy of the GNU General Public License
   ##  along with this file; if not, write to the Free Software
   ##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
   ##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/README
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 README
  --- ossp-pkg/shiela/README	5 May 2004 13:11:43 -0000	1.14
  +++ ossp-pkg/shiela/README	5 May 2004 13:18:47 -0000	1.15
  @@ -1,11 +1,11 @@
      _        ___  ____ ____  ____        _     _      _
  -  |_|_ _   / _ \/ ___/ ___||  _ \   ___| |__ (_) ___| | __ _ 
  +  |_|_ _   / _ \/ ___/ ___||  _ \   ___| |__ (_) ___| | __ _
     _|_||_| | | | \___ \___ \| |_) | / __| '_ \| |/ _ \ |/ _` |
    |_||_|_| | |_| |___) |__) |  __/  \__ \ | | | |  __/ | (_| |
     |_|_|_|  \___/|____/____/|_|     |___/_| |_|_|\___|_|\__,_|
   
     OSSP shiela - Access Control and Logging Facility for CVS
  -  Version 
  +  Version
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/THANKS
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 THANKS
  --- ossp-pkg/shiela/THANKS	16 Jan 2004 12:09:44 -0000	1.3
  +++ ossp-pkg/shiela/THANKS	5 May 2004 13:18:47 -0000	1.4
  @@ -1,12 +1,12 @@
      _        ___  ____ ____  ____        _     _      _
  -  |_|_ _   / _ \/ ___/ ___||  _ \   ___| |__ (_) ___| | __ _ 
  +  |_|_ _   / _ \/ ___/ ___||  _ \   ___| |__ (_) ___| | __ _
     _|_||_| | | | \___ \___ \| |_) | / __| '_ \| |/ _ \ |/ _` |
    |_||_|_| | |_| |___) |__) |  __/  \__ \ | | | |  __/ | (_| |
     |_|_|_|  \___/|____/____/|_|     |___/_| |_|_|\___|_|\__,_|
   
     OSSP shiela - Access Control and Logging Facility for CVS
     ____________________________________________________________________
  -  
  +
     THANKS
   
     Credit has to be given to the following people who contributed ideas,
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/TODO
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 TODO
  --- ossp-pkg/shiela/TODO	10 Feb 2003 15:46:48 -0000	1.8
  +++ ossp-pkg/shiela/TODO	5 May 2004 13:18:47 -0000	1.9
  @@ -1,5 +1,5 @@
      _        ___  ____ ____  ____        _     _      _
  -  |_|_ _   / _ \/ ___/ ___||  _ \   ___| |__ (_) ___| | __ _ 
  +  |_|_ _   / _ \/ ___/ ___||  _ \   ___| |__ (_) ___| | __ _
     _|_||_| | | | \___ \___ \| |_) | / __| '_ \| |/ _ \ |/ _` |
    |_||_|_| | |_| |___) |__) |  __/  \__ \ | | | |  __/ | (_| |
     |_|_|_|  \___/|____/____/|_|     |___/_| |_|_|\___|_|\__,_|
  @@ -20,7 +20,7 @@
        "Shiela: no-mail" which prevents Shiels from sending out the Mail.
        Obviously those messages should be subject to ACL, too.
   
  -  o  Subject can be compressed by reducing common prefix and 
  +  o  Subject can be compressed by reducing common prefix and
        just repeating the subdirs together with the files:
        << [CVS] OSSP: ossp-pkg/ossp-cvs README.OSSP ossp-pkg/ossp-cvs/src cvsrc.c
        >> [CVS] OSSP: ossp-pkg/ossp-cvs README.OSSP src/cvsrc.c
  @@ -32,7 +32,7 @@
        version 1.1 by adjusting the access control routine.
   
     o  It perhaps should read in shiela.msg in order to know
  -     what to kick out when compressing the message. 
  +     what to kick out when compressing the message.
   
     o  Support for code freeze time (ranges) and automatic pre-time
        messages and MOTDs for reminder under cvs commit, cvs admin and cvs
  @@ -54,7 +54,7 @@
        rse@engelschall when mod_foo.c was modified.  So, actually a "Log"
        command in .shielarc should act identically to a "Log" command in
        shiela.cfg.
  -     
  +
     o  In the loginfo hook, CVS already wrote the entries for the files
        in its CVSROOT/history. The first field without the first character
        (see CVS src/history.c) is just the 32bit time_t when CVS comitted
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-install.pod
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 shiela-install.pod
  --- ossp-pkg/shiela/shiela-install.pod	5 May 2004 13:11:43 -0000	1.21
  +++ ossp-pkg/shiela/shiela-install.pod	5 May 2004 13:18:47 -0000	1.22
  @@ -33,7 +33,7 @@
   
   =head1 VERSION
   
  -B<OSSP shiela> 
  +B<OSSP shiela>
   
   =head1 DESCRIPTION
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pod
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 shiela.pod
  --- ossp-pkg/shiela/shiela.pod	5 May 2004 13:11:43 -0000	1.22
  +++ ossp-pkg/shiela/shiela.pod	5 May 2004 13:18:47 -0000	1.23
  @@ -33,7 +33,7 @@
   
   =head1 VERSION
   
  -B<OSSP shiela> 
  +B<OSSP shiela>
   
   =head1 DESCRIPTION
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed May  5 19:45:09 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 678B177955; Wed,  5 May 2004 19:45:09 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ .configure
Message-Id: <20040505174509.678B177955@mail.ossp.org>
Date: Wed,  5 May 2004 19:45:09 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-May-2004 19:45:09
  Branch: HEAD                             Handle: 2004050518450800

  Removed files:
    ossp-pkg/shiela         .configure

  Log:
    remove old file

  Summary:
    Revision    Changes     Path
    1.3         +0  -6      ossp-pkg/shiela/.configure
  ____________________________________________________________________________

  rm -f ossp-pkg/shiela/.configure <<'@@ .'
  Index: ossp-pkg/shiela/.configure
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .

From ossp-cvs-owner@ossp.org  Thu May  6 21:45:41 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3E3E577931; Thu,  6 May 2004 21:45:40 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ ChangeLog devtool.conf shiela-install.pod...
Message-Id: <20040506194540.3E3E577931@mail.ossp.org>
Date: Thu,  6 May 2004 21:45:40 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-May-2004 21:45:40
  Branch: HEAD                             Handle: 2004050620453900

  Modified files:
    ossp-pkg/shiela         ChangeLog devtool.conf shiela-install.pod
                            shiela-install.sh shiela.pl

  Log:
    flush the whole bunch of my fixes and cleanups

  Summary:
    Revision    Changes     Path
    1.42        +8  -1      ossp-pkg/shiela/ChangeLog
    1.11        +2  -0      ossp-pkg/shiela/devtool.conf
    1.23        +5  -5      ossp-pkg/shiela/shiela-install.pod
    1.24        +18 -10     ossp-pkg/shiela/shiela-install.sh
    1.53        +26 -11     ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.41 -r1.42 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	5 May 2004 13:18:47 -0000	1.41
  +++ ossp-pkg/shiela/ChangeLog	6 May 2004 19:45:39 -0000	1.42
  @@ -11,13 +11,20 @@
   
     Changes between 1.0.4 and 1.0.5 (23-Dec-2002 to xx-May-2004):
   
  +   *) Upgraded to the new CVS 1.12.x info format strings.
  +      OSSP shiela now works with CVS >= 1.12.x only.
  +      [Ralf S. Engelschall]
  +
  +   *) Fixed shiela-install: "diff:mime" -> "patch:plain".
  +      [Ralf S. Engelschall]
  +
      *) Bump year in copyright messages for 2003 and 2004.
         [Ralf S. Engelschall]
   
      *) Upgrade build environment to GNU autoconf 2.59
         [Ralf S. Engelschall]
   
  -   *) Provide "cvs rdiff" support in diff outputs.
  +   *) Provide CVS 1.12.x "cvs rdiff" support in detail outputs.
         [Ralf S. Engelschall]
   
      *) Support CVS 1.12.x (option -l no longer existing).
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 devtool.conf
  --- ossp-pkg/shiela/devtool.conf	5 May 2004 13:08:30 -0000	1.10
  +++ ossp-pkg/shiela/devtool.conf	6 May 2004 19:45:39 -0000	1.11
  @@ -13,6 +13,8 @@
   %configure
       ./configure \
           --prefix=/tmp/shiela \
  +        --with-perl=/usr/opkg/bin/perl \
  +        --with-cvs=/usr/opkg/bin/cvs \
           "$@"
   
   %release
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-install.pod
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 shiela-install.pod
  --- ossp-pkg/shiela/shiela-install.pod	5 May 2004 13:18:47 -0000	1.22
  +++ ossp-pkg/shiela/shiela-install.pod	6 May 2004 19:45:39 -0000	1.23
  @@ -71,7 +71,7 @@
   =item B<4.>
   
   add to C<$CVSROOT/CVSROOT/taginfo> (the hook for checking tag
  -operations): ``C<ALL $CVSROOT/CVSROOT/shiela --hook=taginfo>''.
  +operations): ``C<ALL $CVSROOT/CVSROOT/shiela --hook=taginfo %t %o %p %{sv}>''.
   
   =item B<5.>
   
  @@ -96,17 +96,17 @@
   =item B<7.>
   
   add to C<$CVSROOT/CVSROOT/commitinfo> (the hook for checking commit
  -operations): ``C<ALL $CVSROOT/CVSROOT/shiela --hook=commitinfo>''.
  +operations): ``C<ALL $CVSROOT/CVSROOT/shiela --hook=commitinfo %r/%p %s>''.
   
   =item B<8.>
   
   add to C<$CVSROOT/CVSROOT/verifymsg> (the hook for post-processing log
  -messages): ``C<DEFAULT $CVSROOT/CVSROOT/shiela --hook=verifymsg>''.
  +messages): ``C<DEFAULT $CVSROOT/CVSROOT/shiela --hook=verifymsg %l>''.
   
   =item B<9.>
   
   add to C<$CVSROOT/CVSROOT/loginfo> (the hook for performing logging):
  -``C<ALL $CVSROOT/CVSROOT/shiela --hook=loginfo %{sVvto}>''.
  +``C<ALL $CVSROOT/CVSROOT/shiela --hook=loginfo %p %{sVvto}>''.
   This requires that you use a CVS version with RSE patches
   applied (see below). If you use a stock CVS version, use ``C<ALL
   $CVSROOT/CVSROOT/shiela --hook=loginfo %{sVv}>'' instead and live with
  @@ -205,7 +205,7 @@
   B<OSSP shiela> to apply access control to the "C<cvs tag>" and "C<cvs
   admin>" commands. Hence Ralf S. Engelschall extended CVS with those
   features (and more) and maintains a patch set in the "cvs" package of
  -his B<OpenPKG> project (http://www.ossp.org/). You can find the latest
  +his B<OpenPKG> project (http://www.openpkg.org/). You can find the latest
   patch set under http://cvs.openpkg.org/openpkg-src/cvs/cvs.patches.rse
   
   =head1 SEE ALSO
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-install.sh
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 shiela-install.sh
  --- ossp-pkg/shiela/shiela-install.sh	5 May 2004 13:11:43 -0000	1.23
  +++ ossp-pkg/shiela/shiela-install.sh	6 May 2004 19:45:39 -0000	1.24
  @@ -371,10 +371,10 @@
       CVS_VENDOR=CVSHome.org
   fi
   case $CVS_VERSION in
  -   1.10.[789]* | 1.10.1[0123456789]* | 1.1[1-9].* )
  +   1.1[2-9]* )
          ;;
      * )
  -       echo "ERROR: CVS has to be at least version 1.10.7"
  +       echo "ERROR: CVS has to be at least version 1.12"
          exit 1
          ;;
   esac
  @@ -411,8 +411,8 @@
   cat >$tmpdir/shiela.cfg <<EOT
   ##
   ##  OSSP shiela - Access Control and Logging Facility for CVS
  -##  Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2000-2002 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2000-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2004 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP shiela, an access control and logging
   ##  facility for Concurrent Versions System (CVS) repositories
  @@ -477,8 +477,8 @@
   Logging {
       Reports {
           Report mail {
  -            Content title rule header files log summary details;
  -            Details diff:mime;
  +            Content title rule header files log summary rule details;
  +            Details patch:plain;
           };
       };
   };
  @@ -586,6 +586,14 @@
   run chmod 644 shiela.msg
   cvs_file add shiela.msg
   
  +cvs_file tst config
  +if [ ".`grep -i UseNewInfoFmtStrings config`" != . ]; then
  +    run "cp config config.old && sed -e 's;UseNewInfoFmtStrings=.*;UseNewInfoFmtStrings=yes;' <config.old >config && rm -f config.old"
  +else
  +    run "(echo ''; echo 'UseNewInfoFmtStrings=yes'; echo '') >>config"
  +fi
  +cvs_file add config
  +
   cvs_file tst checkoutlist
   run "echo 'shiela.cfg' >>checkoutlist"
   run "echo 'shiela' >>checkoutlist"
  @@ -597,7 +605,7 @@
   cvs_file add rcsinfo
   
   cvs_file tst taginfo
  -run "(echo ''; echo 'ALL $V_tool_shiela --hook=taginfo'; echo '') >>taginfo"
  +run "(echo ''; echo 'ALL $V_tool_shiela --hook=taginfo %t %o %p %{sv}'; echo '') >>taginfo"
   cvs_file add taginfo
   
   if [ ".$CVS_VENDOR" = .RSE ]; then
  @@ -611,11 +619,11 @@
   fi
   
   cvs_file tst commitinfo
  -run "(echo ''; echo 'ALL $V_tool_shiela --hook=commitinfo'; echo '') >>commitinfo"
  +run "(echo ''; echo 'ALL $V_tool_shiela --hook=commitinfo %r/%p %s'; echo '') >>commitinfo"
   cvs_file add commitinfo
   
   cvs_file tst verifymsg
  -run "(echo ''; echo 'DEFAULT $V_tool_shiela --hook=verifymsg'; echo '') >>verifymsg"
  +run "(echo ''; echo 'DEFAULT $V_tool_shiela --hook=verifymsg %l'; echo '') >>verifymsg"
   cvs_file add verifymsg
   
   if [ ".$CVS_VENDOR" = .RSE ]; then
  @@ -624,7 +632,7 @@
       flags="sVv"
   fi
   cvs_file tst loginfo
  -run "(echo ''; echo 'ALL $V_tool_shiela --hook=loginfo %{${flags}}'; echo '') >>loginfo"
  +run "(echo ''; echo 'ALL $V_tool_shiela --hook=loginfo %p %{${flags}}'; echo '') >>loginfo"
   cvs_file add loginfo
   
   run $V_tool_cvs update
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================================
  $ cvs diff -u -r1.52 -r1.53 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	5 May 2004 13:11:43 -0000	1.52
  +++ ossp-pkg/shiela/shiela.pl	6 May 2004 19:45:39 -0000	1.53
  @@ -212,7 +212,7 @@
       $RT->{cvsvers} = $1 if ($v =~ m|Concurrent\s+Versions\s+System\s+\(CVS\)\s+([\d.p]+)\s+|s);
       $RT->{cvsrse} = 0;
       $RT->{cvsrse} = 1 if ($v =~ m|\[RSE\]|s);
  -    die "$RT->{cvs} is not at least CVS 1.10" if ($RT->{cvsvers} !~ m|^1\.1[0-9]|);
  +    die "$RT->{cvs} is not at least CVS 1.12" if ($RT->{cvsvers} !~ m|^1\.1[2-9]|);
       $RT->{useserver} = 0;
       $RT->{useserver} = 1 if ($v =~ m|server|s);
   
  @@ -1425,7 +1425,12 @@
       my ($PA, $RT, $CF) = @_;
   
       #   take the arguments
  -    my ($cvsdir, @cvsinfo) = split(/\s+/, $PA->{ARG}->[0]);
  +    my $cvsdir = $PA->{ARG}->[0];
  +    my @cvsinfo = ();
  +    my $k = ($RT->{cvsrse} ? 5 : 3);
  +    for (my $i = 1; $i <= $#{$PA->{ARG}}; $i += $k) {
  +        push(@cvsinfo, join(",", @{$PA->{ARG}}[$i..$i+$k-1]));
  +    }
   
       #   suck in the standard log information which CVS provides
       my $cvsmsg = '';
  @@ -1435,7 +1440,7 @@
       $RT->{cvsop} = 'commit-file';
   
       #   handle special invocation under `cvs add <dir>'
  -    if (join(' ', @cvsinfo) eq '- New directory') { # see CVS' src/add.c
  +    if ($PA->{ARG}->[1] eq '- New directory') { # see CVS' src/add.c
           #   Hmmm... we always just deal with files in OSSP shiela, so there
           #   is no obvious and consistent way to deal now with only a
           #   plain directory. And there is also no log message provided
  @@ -1451,7 +1456,7 @@
       #   CVS only calls us inside the loginfo hook and never in the
       #   commitinfo hook before. Additionally CVS doesn't provide us with
       #   the %{sVvto} information :(
  -    if (join(' ', @cvsinfo) eq '- Imported sources') { # see CVS' src/import.c
  +    if ($PA->{ARG}->[1] eq '- Imported sources') { # see CVS' src/import.c
           #   I = ignored
           #   L = link (=error),
           #   N = new file
  @@ -2245,6 +2250,7 @@
           elsif ($content eq 'details') {
               $O .= "\n";
               if ($style =~ m|^url:(.+)|) {
  +                $O .= "Change details:\n";
                   my $urlspec = $1;
                   foreach $file (sort(keys(%{$IN->{file}}))) {
                       next if ($IN->{file}->{$file}->{op} eq 'T');
  @@ -2254,17 +2260,26 @@
                           elsif ($1 eq 'V') { $IN->{file}->{$file}->{oldrev}; }
                           elsif ($1 eq 'v') { $IN->{file}->{$file}->{newrev}; }
                       |gse;
  -                    $O .= "$prefix$url\n";
  +                    $O .= "  $prefix$url\n";
                   }
               }
               elsif ($style eq 'rdiff') {
  -                $O .= "To re-generate the difference summary of this commit, execute:\n";
  +                $O .= "Change details:\n";
                   foreach $file (sort(keys(%{$IN->{file}}))) {
  -                    $O .= "cvs rdiff -uN " .
  -                          " -r" . $IN->{file}->{$file}->{oldrev} .
  -                          " -r" . $IN->{file}->{$file}->{newrev} .
  -                          " " . $file .
  -                          "\n";
  +                    next if ($IN->{file}->{$file}->{op} eq 'T');
  +                    if ($IN->{file}->{$file}->{op} eq 'A') {
  +                        $O .= "  \$ cvs rdiff -u" .
  +                              " -r0 -r" . $IN->{file}->{$file}->{newrev} .
  +                              " " . $file .
  +                              "\n";
  +                    }
  +                    else {
  +                        $O .= "  \$ cvs rdiff -u" .
  +                              " -r" . $IN->{file}->{$file}->{oldrev} .
  +                              " -r" . $IN->{file}->{$file}->{newrev} .
  +                              " " . $file .
  +                              "\n";
  +                    }
                   }
               }
               elsif ($style eq 'patch:plain') {
  @@ .

From ossp-cvs-owner@ossp.org  Fri May  7 08:27:08 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 97ABD77949; Fri,  7 May 2004 08:27:08 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ ChangeLog VERSION shiela-install.sh shiel...
Message-Id: <20040507062708.97ABD77949@mail.ossp.org>
Date: Fri,  7 May 2004 08:27:08 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-May-2004 08:27:08
  Branch: HEAD                             Handle: 2004050707270700

  Modified files:
    ossp-pkg/shiela         ChangeLog VERSION shiela-install.sh shiela.pl

  Log:
    bump version number

  Summary:
    Revision    Changes     Path
    1.43        +1  -1      ossp-pkg/shiela/ChangeLog
    1.12        +1  -1      ossp-pkg/shiela/VERSION
    1.25        +1  -1      ossp-pkg/shiela/shiela-install.sh
    1.54        +1  -1      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.42 -r1.43 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	6 May 2004 19:45:39 -0000	1.42
  +++ ossp-pkg/shiela/ChangeLog	7 May 2004 06:27:07 -0000	1.43
  @@ -9,7 +9,7 @@
   
     ChangeLog
   
  -  Changes between 1.0.4 and 1.0.5 (23-Dec-2002 to xx-May-2004):
  +  Changes between 1.0.4 and 1.1.0 (23-Dec-2002 to 07-May-2004):
   
      *) Upgraded to the new CVS 1.12.x info format strings.
         OSSP shiela now works with CVS >= 1.12.x only.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/VERSION
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 VERSION
  --- ossp-pkg/shiela/VERSION	23 Dec 2002 14:45:16 -0000	1.11
  +++ ossp-pkg/shiela/VERSION	7 May 2004 06:27:07 -0000	1.12
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP shiela (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP shiela, Version 1.0.4 (23-Dec-2002)
  +  This is OSSP shiela, Version 1.1.0 (07-May-2004)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-install.sh
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 shiela-install.sh
  --- ossp-pkg/shiela/shiela-install.sh	6 May 2004 19:45:39 -0000	1.24
  +++ ossp-pkg/shiela/shiela-install.sh	7 May 2004 06:27:07 -0000	1.25
  @@ -26,7 +26,7 @@
   ##  shiela-install.sh: repository install program (syntax: Bourne-Shell)
   ##
   
  -version="1.0.4"
  +version="1.1.0"
   
   prefix="@prefix@"
   bindir="@bindir@"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================================
  $ cvs diff -u -r1.53 -r1.54 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	6 May 2004 19:45:39 -0000	1.53
  +++ ossp-pkg/shiela/shiela.pl	7 May 2004 06:27:07 -0000	1.54
  @@ -26,7 +26,7 @@
   ##  shiela.pl: control program (syntax: Perl)
   ##
   
  -my $version = '1.0.4';
  +my $version = '1.1.0';
   
   require 5.005;
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri May  7 09:33:51 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0943D77959; Fri,  7 May 2004 09:33:50 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ shiela-install.sh
Message-Id: <20040507073350.0943D77959@mail.ossp.org>
Date: Fri,  7 May 2004 09:33:50 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-May-2004 09:33:50
  Branch: HEAD                             Handle: 2004050708335000

  Modified files:
    ossp-pkg/shiela         shiela-install.sh

  Log:
    remove dynamic parts for better optical view

  Summary:
    Revision    Changes     Path
    1.26        +8  -8      ossp-pkg/shiela/shiela-install.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-install.sh
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 shiela-install.sh
  --- ossp-pkg/shiela/shiela-install.sh	7 May 2004 06:27:07 -0000	1.25
  +++ ossp-pkg/shiela/shiela-install.sh	7 May 2004 07:33:50 -0000	1.26
  @@ -535,9 +535,9 @@
   echo "${term_bold}CVSROOT MODIFICATION${term_norm}"
   cat <<EOT
   
  -Ok, we are now prepared to modify ${V_repos_path}/CVSROOT/. We will
  -first checkout CVSROOT and modify it. Then you have a last chance to
  -stop processing before we finally commit the modifications.
  +Ok, we are now prepared to modify your repository. We will first
  +checkout CVSROOT and modify it. Then you have a last chance to stop
  +processing before we finally commit the modifications.
   
   EOT
   
  @@ -661,11 +661,11 @@
   
   cat <<EOT
   
  -Ok, your $V_repos_path/CVSROOT/ area was modified to now use OSSP shiela
  -for access control and logging. You can try it out by checking out
  -CVSROOT yourself and modify some files. You should receive an Email
  -for every modification. Then especially adjust "shiela.cfg" for your
  -particular repository layout.
  +Ok, your CVS repository was modified to now use OSSP shiela for access
  +control and logging. You can try it out by checking out CVSROOT
  +yourself and modify some files. You should receive an Email for every
  +modification. Then especially adjust "shiela.cfg" for your particular
  +repository layout.
   
   EOT
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri May  7 09:34:42 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B0C3F77965; Fri,  7 May 2004 09:34:42 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ .cvsignore ChangeLog Makefile.in shiela-t...
Message-Id: <20040507073442.B0C3F77965@mail.ossp.org>
Date: Fri,  7 May 2004 09:34:42 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-May-2004 09:34:42
  Branch: HEAD                             Handle: 2004050708344200

  Added files:
    ossp-pkg/shiela         shiela-test.sh
  Modified files:
    ossp-pkg/shiela         .cvsignore ChangeLog Makefile.in

  Log:
    Add "shiela-test.sh" program and "make test" driver
    for a minimal local test suite.

  Summary:
    Revision    Changes     Path
    1.5         +2  -0      ossp-pkg/shiela/.cvsignore
    1.44        +4  -0      ossp-pkg/shiela/ChangeLog
    1.8         +5  -0      ossp-pkg/shiela/Makefile.in
    1.1         +218 -0     ossp-pkg/shiela/shiela-test.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/.cvsignore
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 .cvsignore
  --- ossp-pkg/shiela/.cvsignore	21 Dec 2002 09:21:47 -0000	1.4
  +++ ossp-pkg/shiela/.cvsignore	7 May 2004 07:34:42 -0000	1.5
  @@ -7,3 +7,5 @@
   config.h.in
   configure
   shtool
  +shiela-test.d
  +shiela-test.log
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.43 -r1.44 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	7 May 2004 06:27:07 -0000	1.43
  +++ ossp-pkg/shiela/ChangeLog	7 May 2004 07:34:42 -0000	1.44
  @@ -11,6 +11,10 @@
   
     Changes between 1.0.4 and 1.1.0 (23-Dec-2002 to 07-May-2004):
   
  +   *) Add "shiela-test.sh" program and "make test" driver
  +      for a minimal local test suite.
  +      [Ralf S. Engelschall]
  +
      *) Upgraded to the new CVS 1.12.x info format strings.
         OSSP shiela now works with CVS >= 1.12.x only.
         [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 Makefile.in
  --- ossp-pkg/shiela/Makefile.in	5 May 2004 13:18:47 -0000	1.7
  +++ ossp-pkg/shiela/Makefile.in	7 May 2004 07:34:42 -0000	1.8
  @@ -75,6 +75,9 @@
   	$(POD2MAN) --section=1 --center="Access Control and Logging Facility for CVS" \
   	           --release="$$D" --date="OSSP shiela $$V" shiela-install.pod >shiela-install.1
   
  +test: shiela shiela-install
  +	-@$(SHELL) ./shiela-test.sh $(CVS) $(PERL) $(SHTOOL) ./shiela ./shiela-install ./shiela-test.d ./shiela-test.log
  +
   install: all
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libdir)
  @@ -87,6 +90,8 @@
   clean:
   	$(RM) shiela shiela.1
   	$(RM) shiela-install shiela-install.1
  +	$(RM) shiela-test.log
  +	$(RM) -r shiela-test.d
   
   distclean: clean
   	$(RM) config.cache config.status config.log
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-test.sh
  ============================================================================
  $ cvs diff -u -r0 -r1.1 shiela-test.sh
  --- /dev/null	2004-05-07 09:34:42.000000000 +0200
  +++ shiela-test.sh	2004-05-07 09:34:42.000000000 +0200
  @@ -0,0 +1,218 @@
  +#!/bin/sh
  +##
  +##  OSSP shiela - CVS Access Control and Logging Facility
  +##  Copyright (c) 2000-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP shiela, an access control and logging
  +##  facility for Concurrent Versions System (CVS) repositories
  +##  which can be found at http://www.ossp.org/pkg/tool/shiela/.
  +##
  +##  This program is free software; you can redistribute it and/or
  +##  modify it under the terms of the GNU General Public  License
  +##  as published by the Free Software Foundation; either version
  +##  2.0 of the License, or (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this file; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  shiela-test.sh: simple test suite (syntax: Bourne-Shell)
  +##
  +
  +#   determine absolute path
  +abspath () {
  +    cwd=`pwd`
  +    echo "$1" |\
  +    sed -e "s;^\\.\$;$cwd;" \
  +        -e "s;^\\./;$cwd/;" \
  +        -e "s;^\\([^/]\\);$cwd/\\1;"
  +}
  +
  +#   configuration
  +if [ ".$1" != . ]; then
  +    path_cvs=`abspath $1`
  +else
  +    path_cvs=`which cvs`
  +fi
  +if [ ! -f $path_cvs ]; then
  +	echo "shiela-test:ERROR: invalid path to CVS program: $path_cvs"
  +    exit 1
  +fi
  +if [ ".$2" != . ]; then
  +    path_perl=`abspath $2`
  +else
  +    path_perl=`which perl`
  +fi
  +if [ ! -f $path_perl ]; then
  +	echo "shiela-test:ERROR: invalid path to Perl program: $path_perl"
  +    exit 1
  +fi
  +if [ ".$3" != . ]; then
  +    path_shtool=`abspath $3`
  +else
  +    path_shtool=`which shtool`
  +fi
  +if [ ! -f $path_shtool ]; then
  +	echo "shiela-test:ERROR: invalid path to Shtool program: $path_shtool"
  +    exit 1
  +fi
  +if [ ".$4" != . ]; then
  +    path_shiela=`abspath $4`
  +else
  +    path_shiela=`which shiela`
  +fi
  +if [ ! -f $path_shiela ]; then
  +	echo "shiela-test:ERROR: invalid path to Shiela program: $path_shiela"
  +    exit 1
  +fi
  +if [ ".$5" != . ]; then
  +    path_shiela_install=`abspath $5`
  +else
  +    path_shiela_install=`which shiela-install`
  +fi
  +if [ ! -f $path_shiela_install ]; then
  +	echo "shiela-test:ERROR: invalid path to Shiela Install program: $path_shiela_install"
  +    exit 1
  +fi
  +if [ ".$6" != . ]; then
  +	cwd=`pwd`
  +    path_test=`echo "$6" | sed -e "s;^\\.\$;$cwd;" -e "s;^\\./;$cwd/;" -e "s;^\\([^/]\\);$cwd/\\1;"`
  +else
  +    path_test="`pwd`/shiela-test.d"
  +fi
  +if [ ".$path_test" = . ]; then
  +	echo "shiela-test:ERROR: empty path to test tree"
  +    exit 1
  +fi
  +if [ ".$7" != . ]; then
  +	cwd=`pwd`
  +    path_log=`echo "$7" | sed -e "s;^\\.\$;$cwd;" -e "s;^\\./;$cwd/;" -e "s;^\\([^/]\\);$cwd/\\1;"`
  +else
  +    path_log="`pwd`/shiela-test.log"
  +fi
  +if [ ".$path_log" = . ]; then
  +	echo "shiela-test:ERROR: empty path to logfile"
  +    exit 1
  +fi
  +
  +#   print header 
  +header () {
  +	msg="$1"
  +    echo "" 1>&2
  +    echo "#######################################################################" 1>&2
  +	$path_shtool echo -e "##  %B$msg%b" 1>&2
  +    echo "#######################################################################" 1>&2
  +    echo "" 1>&2
  +}
  +
  +#   prepare test directory
  +oldcwd=`pwd`
  +rm -rf $path_test >/dev/null 2>&1 || true
  +mkdir $path_test || exit 1
  +cd $path_test || exit 1
  +
  +#   prepare sendmail emulator for logfile writing
  +cp /dev/null $path_log
  +( echo "#!/bin/sh"
  +  echo "cat >>$path_log"
  +  echo "exit 0"
  +) >sendmail
  +chmod a+x sendmail
  +path_sendmail=`abspath sendmail`
  +
  +#   create new repository 
  +rm -rf cvs
  +mkdir cvs
  +cvs -d $path_test/cvs init
  +
  +#   setup CVSUSER variable
  +export CVSUSER=jdoe
  +
  +#   apply shiela to repository
  +header "Apply Shiela to CVS Repository"
  +$path_shiela_install \
  +    batch=yes \
  +    repos_path=$path_test/cvs \
  +    tool_shiela=$path_shiela \
  +    tool_cvs=$path_cvs \
  +    tool_perl=$path_perl \
  +    tool_sendmail=$path_sendmail \
  +    shiela_local=no \
  +    host_name="cvs" \
  +    domain_name="example.com" \
  +    user_name="jdoe" \
  +    user_realname="John Doe" \
  +    user_email="john.doe@example.com"
  +
  +#   activate forthcoming module in shiela
  +header "Activate Forthcoming Module in Shiela"
  +rm -rf CVSROOT
  +cvs -d :fork:$path_test/cvs co CVSROOT
  +patch -p0 <<EOT
  +--- CVSROOT/shiela.cfg.orig	Wed May  5 20:02:24 2004
  ++++ CVSROOT/shiela.cfg	Wed May  5 20:02:45 2004
  +@@ -60,6 +60,12 @@
  +             Log passwd none;
  +             Log * mail:john.doe@example.com;
  +         };
  ++        Module foo "The Foo Module" {
  ++            Acl *   *:users;
  ++            Acl *:* *:users;
  ++            Log *   mail:john.doe@example.com;
  ++            Log *:* mail:john.doe@example.com;
  ++        };
  +     };
  + };
  +EOT
  +(cd CVSROOT && cvs ci -m "activate foo module" shiela.cfg)
  + 
  +#   add module 'foo' to repository by importing
  +header "Add Module to CVS Repository (cvs import)"
  +rm -rf foo
  +mkdir foo
  +echo "bar" >foo/bar.txt
  +echo "baz" >foo/baz.txt
  +(cd foo && cvs -d :fork:$path_test/cvs import -m "initial content" foo X Y)
  +rm -rf foo
  +
  +#   checking out module 'foo'
  +header "Checking Out Module from CVS Repository"
  +cvs -f -d :fork:$path_test/cvs co foo
  +
  +#   edit module 'foo' by committing
  +header "Edit Module in CVS Repository (cvs commit)"
  +( cd foo || exit 1
  +  ( echo "bar1"
  +    echo "bar"
  +    echo "bar2"
  +  ) >bar.txt
  +  rm baz.txt
  +  cvs rm baz.txt
  +  echo "quux" >quux.txt
  +  cvs add quux.txt
  +  ( echo "many modifications"
  +    echo "PR:"
  +  ) >log
  +  cvs ci -F log
  +  rm -f log
  +)
  +
  +#   tag module files
  +header "Tagging Module Files in CVS Repository (cvs tag)"
  +( cd foo || exit 1
  +  cvs tag BAR_1_0 bar.txt
  +  cvs tag BAR_1_1 bar.txt
  +  cvs tag BAR_1_2 bar.txt
  +)
  +
  +#   cleanup
  +cd $oldpwd
  +rm -rf $path_test >/dev/null 2>&1 || true
  +
  @@ .

From ossp-cvs-owner@ossp.org  Fri May  7 09:45:59 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 89BC377949; Fri,  7 May 2004 09:45:57 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ shiela-install.sh shiela-test.sh
Message-Id: <20040507074557.89BC377949@mail.ossp.org>
Date: Fri,  7 May 2004 09:45:57 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-May-2004 09:45:57
  Branch: HEAD                             Handle: 2004050708455600

  Modified files:
    ossp-pkg/shiela         shiela-install.sh shiela-test.sh

  Log:
    add xdelta to the default config for supporting binary file handling
    and add a test suite for this

  Summary:
    Revision    Changes     Path
    1.27        +1  -0      ossp-pkg/shiela/shiela-install.sh
    1.2         +13 -0      ossp-pkg/shiela/shiela-test.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-install.sh
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 shiela-install.sh
  --- ossp-pkg/shiela/shiela-install.sh	7 May 2004 07:33:50 -0000	1.26
  +++ ossp-pkg/shiela/shiela-install.sh	7 May 2004 07:45:56 -0000	1.27
  @@ -441,6 +441,7 @@
       Program sendmail ${V_tool_sendmail};
       Program cvs      ${V_tool_cvs};
       Program diff     ${V_tool_diff};
  +    Program xdelta   ${V_tool_xdelta};
       Program uuencode ${V_tool_uuencode};
   };
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-test.sh
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 shiela-test.sh
  --- ossp-pkg/shiela/shiela-test.sh	7 May 2004 07:34:42 -0000	1.1
  +++ ossp-pkg/shiela/shiela-test.sh	7 May 2004 07:45:56 -0000	1.2
  @@ -212,6 +212,19 @@
     cvs tag BAR_1_2 bar.txt
   )
   
  +#   binary file handling
  +header "Handling Binary Files in CVS Repository"
  +( cd foo || exit 1
  +  echo "quux" >quux.bin
  +  cvs add -kb quux.bin
  +  cvs ci -m "add binary file"
  +  echo "quux2" >quux.bin
  +  cvs ci -m "change binary file"
  +  rm quux.bin
  +  cvs rm quux.bin
  +  cvs ci -m "remove binary file"
  +)
  +
   #   cleanup
   cd $oldpwd
   rm -rf $path_test >/dev/null 2>&1 || true
  @@ .

From ossp-cvs-owner@ossp.org  Fri May  7 09:48:02 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D5DB277949; Fri,  7 May 2004 09:48:01 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ shiela.pl
Message-Id: <20040507074801.D5DB277949@mail.ossp.org>
Date: Fri,  7 May 2004 09:48:01 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-May-2004 09:48:01
  Branch: HEAD                             Handle: 2004050708480100

  Modified files:
    ossp-pkg/shiela         shiela.pl

  Log:
    avoid unused variables

  Summary:
    Revision    Changes     Path
    1.55        +2  -2      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================================
  $ cvs diff -u -r1.54 -r1.55 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	7 May 2004 06:27:07 -0000	1.54
  +++ ossp-pkg/shiela/shiela.pl	7 May 2004 07:48:01 -0000	1.55
  @@ -641,7 +641,7 @@
   sub recv {
       my $cvs = shift;
       if (wantarray) {
  -         my @lines = $cvs->{rfd}->getlines;
  +         my @lines = ($cvs->{rfd}->getlines || ());
            my @nlines = ();
            foreach my $line (@lines) {
                print STDERR "cvs server: <- $line" if ($cvs->{trace});
  @@ -651,7 +651,7 @@
            return @nlines;
       }
       else {
  -         my $line = $cvs->{rfd}->getline;
  +         my $line = ($cvs->{rfd}->getline || "");
            print STDERR "cvs server: <- $line" if ($cvs->{trace});
            $line =~ s|\n$||;
            return $line;
  @@ .

From ossp-cvs-owner@ossp.org  Fri May  7 09:48:17 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 08ACD7796C; Fri,  7 May 2004 09:48:16 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ shiela-test.sh
Message-Id: <20040507074816.08ACD7796C@mail.ossp.org>
Date: Fri,  7 May 2004 09:48:16 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-May-2004 09:48:16
  Branch: HEAD                             Handle: 2004050708481600

  Modified files:
    ossp-pkg/shiela         shiela-test.sh

  Log:
    apply without offset

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/shiela/shiela-test.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-test.sh
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 shiela-test.sh
  --- ossp-pkg/shiela/shiela-test.sh	7 May 2004 07:45:56 -0000	1.2
  +++ ossp-pkg/shiela/shiela-test.sh	7 May 2004 07:48:16 -0000	1.3
  @@ -158,7 +158,7 @@
   patch -p0 <<EOT
   --- CVSROOT/shiela.cfg.orig	Wed May  5 20:02:24 2004
   +++ CVSROOT/shiela.cfg	Wed May  5 20:02:45 2004
  -@@ -60,6 +60,12 @@
  +@@ -61,6 +61,12 @@
                Log passwd none;
                Log * mail:john.doe@example.com;
            };
  @@ .

From ossp-cvs-owner@ossp.org  Fri May  7 10:20:01 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CC3ED77949; Fri,  7 May 2004 10:20:00 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/tool/ index.wml ossp-w...
Message-Id: <20040507082000.CC3ED77949@mail.ossp.org>
Date: Fri,  7 May 2004 10:20:00 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   07-May-2004 10:20:00
  Branch: HEAD                             Handle: 2004050709195901

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/shiela
                            index.wml

  Log:
    release OSSP shiela 1.1.0

  Summary:
    Revision    Changes     Path
    1.83        +1  -0      ossp-web/new/news.txt
    1.33        +1  -1      ossp-web/pkg/tool/index.wml
    1.11        +2  -2      ossp-web/pkg/tool/shiela/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.82 -r1.83 news.txt
  --- ossp-web/new/news.txt	26 Apr 2004 14:39:57 -0000	1.82
  +++ ossp-web/new/news.txt	7 May 2004 08:19:59 -0000	1.83
  @@ -1,3 +1,4 @@
  +07-May-2004: Released T<OSSP shiela> 1.1.0
   26-Apr-2004: Released L<OSSP fsl> 1.5.0
   26-Apr-2004: Released L<OSSP fsl> 1.5a3
   23-Apr-2004: Released T<OSSP lmtp2nntp> 1.3a2
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 index.wml
  --- ossp-web/pkg/tool/index.wml	21 Oct 2003 18:19:09 -0000	1.32
  +++ ossp-web/pkg/tool/index.wml	7 May 2004 08:19:59 -0000	1.33
  @@ -20,7 +20,7 @@
               done=100 stable="1.2.0" unstable=none>
     <pkg_item name="shiela" longname="OSSP shiela" type="tool"
               desc="CVS Access Control and Logging"
  -	        done=100 stable="1.0.4" unstable="none">
  +	        done=100 stable="1.1.0" unstable="none">
     <pkg_item name="eperl" longname="OSSP eperl" type="tool"
               desc="Embedded Perl Language"
   	        done=100 stable="2.2.14" unstable="none">
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/shiela/index.wml
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 index.wml
  --- ossp-web/pkg/tool/shiela/index.wml	23 Dec 2002 14:49:27 -0000	1.10
  +++ ossp-web/pkg/tool/shiela/index.wml	7 May 2004 08:20:00 -0000	1.11
  @@ -25,7 +25,7 @@
   <h2>Status</h2>
   
   <pkg_status
  -    stable="1.0.4" stable_date="23-Dec-2002"
  +    stable="1.1.0" stable_date="07-May-2004"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -36,7 +36,7 @@
       url=$(FTP_ROOT_URL)/pkg/tool/shiela/
       directory=$(FTP_ROOT_DIR)/pkg/tool/shiela/
       files="shiela-*.tar.gz" 
  -	stable="shiela-1.0.4.tar.gz" unstable="none">
  +	stable="shiela-1.1.0.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri May  7 16:52:04 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C4D7977949; Fri,  7 May 2004 16:52:03 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_main.c
Message-Id: <20040507145203.C4D7977949@mail.ossp.org>
Date: Fri,  7 May 2004 16:52:03 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   07-May-2004 16:52:03
  Branch: HEAD                             Handle: 2004050715520300

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_main.c

  Log:
    fix a bug where hook_lmtp_read incorrectly returns error on
    communication close where it should report "end of communication".
    This toghether with leaving errno untouched caused do/while(rc==-1 &&
    errno=EINTR) to loop forever; now both return code and errno are
    properly set for lmtp and nntp read and write functions

  Summary:
    Revision    Changes     Path
    1.80        +65 -10     ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_main.c
  ============================================================================
  $ cvs diff -u -r1.79 -r1.80 lmtp2nntp_main.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	2 Apr 2004 10:38:13 -0000	1.79
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_main.c	7 May 2004 14:52:03 -0000	1.80
  @@ -221,6 +221,25 @@
   static void lmtp_gfs_rset(lmtp2nntp_t *);
   static void lmtp_gfs_quit(lmtp2nntp_t *);
   
  +static void sa2errno(sa_rc_t rv)
  +{
  +    switch (rv) {
  +        case SA_OK:      errno = 0;      break;
  +        case SA_ERR_EOF: errno = 0;      break;
  +        case SA_ERR_SYS:                 break;
  +        case SA_ERR_ARG: errno = EINVAL; break;
  +        case SA_ERR_USE: errno = EINVAL; break;
  +        case SA_ERR_MTC: errno = ENOENT; break;
  +        case SA_ERR_MEM: errno = ENOMEM; break;
  +        case SA_ERR_IMP: errno = ENOSYS; break;
  +        case SA_ERR_TMT: errno = EIO;    break;
  +        case SA_ERR_NET: errno = EIO;    break;
  +        case SA_ERR_FMT: errno = EIO;    break;
  +        case SA_ERR_INT: errno = EIO;    break;
  +        default:         errno = EIO;
  +    }
  +}
  +
   static ssize_t hook_lmtp_read(void *_ctx, void *buf, size_t nbytes)
   {
       lmtp2nntp_t *ctx = (lmtp2nntp_t *)_ctx;
  @@ -229,13 +248,25 @@
       sa_rc_t rv;
   
       if (ctx->saIO != NULL) {
  -        if ((rv = sa_read(ctx->saIO, buf, nbytes, &n)) != SA_OK)
  -            rc = -1;
  +        if ((rv = sa_read(ctx->saIO, buf, nbytes, &n)) != SA_OK) {
  +            if (rv == SA_ERR_SYS)
  +                logbook(ctx->l2, L2_LEVEL_DEBUG, "hook_lmtp_read() sa_read failed with \"%s\" (%d) %s", sa_error(rv), errno, strerror(errno));
  +            else
  +                logbook(ctx->l2, L2_LEVEL_DEBUG, "hook_lmtp_read() sa_read failed with \"%s\"", sa_error(rv));
  +            if (rv == SA_ERR_EOF)
  +                rc = 0;
  +            else
  +                rc = -1;
  +            sa2errno(rv);
  +        }
           else
               rc = (ssize_t)n;
       }
  -    else
  +    else {
           rc = read(ctx->fdIOi, buf, nbytes);
  +        if (rc == -1)
  +            logbook(ctx->l2, L2_LEVEL_DEBUG, "hook_lmtp_read() read failed with (%d) %s", errno, strerror(errno));
  +    }
       if (rc == -1)
           logbook(ctx->l2, L2_LEVEL_TRACE, "LMTP read error: %m");
       else
  @@ -253,15 +284,24 @@
   
       logbook(ctx->l2, L2_LEVEL_TRACE, "LMTP %5d >> \"%{text}D\"", nbytes, buf, nbytes);
       if (ctx->saIO != NULL) {
  -        if ((rv = sa_write(ctx->saIO, buf, nbytes, &n)) != SA_OK)
  +        if ((rv = sa_write(ctx->saIO, buf, nbytes, &n)) != SA_OK) {
  +            if (rv == SA_ERR_SYS)
  +                logbook(ctx->l2, L2_LEVEL_DEBUG, "hook_lmtp_write() sa_write failed with \"%s\" (%d) %s", sa_error(rv), errno, strerror(errno));
  +            else
  +                logbook(ctx->l2, L2_LEVEL_DEBUG, "hook_lmtp_write() sa_write failed with \"%s\"", sa_error(rv));
               rc = -1;
  +            sa2errno(rv);
  +        }
           else
               rc = (ssize_t)n;
       }
  -    else
  +    else {
           rc = write(ctx->fdIOo, buf, nbytes);
  +        if (rc == -1)
  +            logbook(ctx->l2, L2_LEVEL_DEBUG, "hook_lmtp_write() write failed with (%d) %s", errno, strerror(errno));
  +    }
       if (rc == -1)
  -        logbook(ctx->l2, L2_LEVEL_TRACE, "LMTP write error: %m");
  +        logbook(ctx->l2, L2_LEVEL_TRACE, "LMTP write error");
       return rc;
   }
   
  @@ -272,8 +312,17 @@
       size_t n;
       sa_rc_t rv;
   
  -    if ((rv = sa_read(ctx->sa, buf, nbytes, &n)) != SA_OK)
  -        rc = -1;
  +    if ((rv = sa_read(ctx->sa, buf, nbytes, &n)) != SA_OK) {
  +        if (rv == SA_ERR_SYS)
  +            logbook(ctx->l2, L2_LEVEL_DEBUG, "hook_lmtp_read() sa_read failed with \"%s\" (%d) %s", sa_error(rv), errno, strerror(errno));
  +        else
  +            logbook(ctx->l2, L2_LEVEL_DEBUG, "hook_lmtp_read() sa_read failed with \"%s\"", sa_error(rv));
  +        if (rv == SA_ERR_EOF)
  +            rc = 0;
  +        else
  +            rc = -1;
  +        sa2errno(rv);
  +    }
       else
           rc = (ssize_t)n;
       if (rc == -1)
  @@ -291,12 +340,18 @@
       sa_rc_t rv;
   
       logbook(ctx->l2, L2_LEVEL_TRACE, "NNTP %5d >> \"%{text}D\"", nbytes, buf, nbytes);
  -    if ((rv = sa_write(ctx->sa, buf, nbytes, &n)) != SA_OK)
  +    if ((rv = sa_write(ctx->sa, buf, nbytes, &n)) != SA_OK) {
  +        if (rv == SA_ERR_SYS)
  +            logbook(ctx->l2, L2_LEVEL_DEBUG, "hook_nntp_write() sa_write failed with \"%s\" (%d) %s", sa_error(rv), errno, strerror(errno));
  +        else
  +            logbook(ctx->l2, L2_LEVEL_DEBUG, "hook_nntp_write() sa_write failed with \"%s\"", sa_error(rv));
           rc = -1;
  +        sa2errno(rv);
  +    }
       else
           rc = (ssize_t)n;
       if (rc == -1)
  -        logbook(ctx->l2, L2_LEVEL_TRACE, "NNTP write error: %m");
  +        logbook(ctx->l2, L2_LEVEL_TRACE, "NNTP write error");
       return rc;
   }
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri May  7 16:52:17 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3922E7796C; Fri,  7 May 2004 16:52:17 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ README lmtp2nntp_version.c
Message-Id: <20040507145217.3922E7796C@mail.ossp.org>
Date: Fri,  7 May 2004 16:52:17 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   07-May-2004 16:52:16
  Branch: HEAD                             Handle: 2004050715521600

  Modified files:
    ossp-pkg/lmtp2nntp      README lmtp2nntp_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.39        +1  -1      ossp-pkg/lmtp2nntp/README
    1.20        +9  -9      ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/README
  ============================================================================
  $ cvs diff -u -r1.38 -r1.39 README
  --- ossp-pkg/lmtp2nntp/README	23 Apr 2004 10:36:24 -0000	1.38
  +++ ossp-pkg/lmtp2nntp/README	7 May 2004 14:52:16 -0000	1.39
  @@ -5,7 +5,7 @@
     |_|_|_| \___/|____/____/|_|    |_|_||_||_|\__| .__/____|_||_|_||_|\__| .__/
                                                  |_|                     |_|
     OSSP lmtp2nntp - Mail to News Gateway
  -  Version 1.3a2 (23-Apr-2004)
  +  Version 1.3a3 (07-May-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 lmtp2nntp_version.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	23 Apr 2004 10:36:24 -0000	1.19
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	7 May 2004 14:52:16 -0000	1.20
  @@ -8,7 +8,7 @@
   #ifndef _LMTP2NNTP_VERSION_C_
   #define _LMTP2NNTP_VERSION_C_
   
  -#define LMTP2NNTP_VERSION 0x103002
  +#define LMTP2NNTP_VERSION 0x103003
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _LMTP2NNTP_VERSION_C_AS_HEADER_
   
   lmtp2nntp_version_t lmtp2nntp_version = {
  -    0x103002,
  -    "1.3a2",
  -    "1.3a2 (23-Apr-2004)",
  -    "This is OSSP lmtp2nntp, Version 1.3a2 (23-Apr-2004)",
  -    "OSSP lmtp2nntp 1.3a2 (23-Apr-2004)",
  -    "OSSP lmtp2nntp/1.3a2",
  -    "@(#)OSSP lmtp2nntp 1.3a2 (23-Apr-2004)",
  -    "$Id: lmtp2nntp_version.c,v 1.19 2004/04/23 10:36:24 thl Exp $"
  +    0x103003,
  +    "1.3a3",
  +    "1.3a3 (07-May-2004)",
  +    "This is OSSP lmtp2nntp, Version 1.3a3 (07-May-2004)",
  +    "OSSP lmtp2nntp 1.3a3 (07-May-2004)",
  +    "OSSP lmtp2nntp/1.3a3",
  +    "@(#)OSSP lmtp2nntp 1.3a3 (07-May-2004)",
  +    "$Id: lmtp2nntp_version.c,v 1.20 2004/05/07 14:52:16 thl Exp $"
   };
   
   #endif /* _LMTP2NNTP_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Fri May  7 16:58:17 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4D25677949; Fri,  7 May 2004 16:58:17 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_version.c
Message-Id: <20040507145817.4D25677949@mail.ossp.org>
Date: Fri,  7 May 2004 16:58:17 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   07-May-2004 16:58:17
  Branch: HEAD                             Handle: 2004050715581600

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.21        +0  -0      ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 lmtp2nntp_version.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	7 May 2004 14:52:16 -0000	1.20
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	7 May 2004 14:58:16 -0000	1.21
  @@ -39,7 +39,7 @@
       "OSSP lmtp2nntp 1.3a3 (07-May-2004)",
       "OSSP lmtp2nntp/1.3a3",
       "@(#)OSSP lmtp2nntp 1.3a3 (07-May-2004)",
  -    "$Id: lmtp2nntp_version.c,v 1.20 2004/05/07 14:52:16 thl Exp $"
  +    "$Id: lmtp2nntp_version.c,v 1.21 2004/05/07 14:58:16 thl Exp $"
   };
   
   #endif /* _LMTP2NNTP_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Fri May  7 17:51:55 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 83DC977244; Fri,  7 May 2004 17:51:55 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-doc/ accounts.txt
Message-Id: <20040507155155.83DC977244@mail.ossp.org>
Date: Fri,  7 May 2004 17:51:55 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   07-May-2004 17:51:55
  Branch: HEAD                             Handle: 2004050716515500

  Modified files:
    ossp-pkg/as/as-doc      accounts.txt

  Log:
    add GNOC IP DNS project management, planning, and development at a
    late stage

  Summary:
    Revision    Changes     Path
    1.46        +2  -0      ossp-pkg/as/as-doc/accounts.txt
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-doc/accounts.txt
  ============================================================================
  $ cvs diff -u -r1.45 -r1.46 accounts.txt
  --- ossp-pkg/as/as-doc/accounts.txt	19 Apr 2004 13:27:36 -0000	1.45
  +++ ossp-pkg/as/as-doc/accounts.txt	7 May 2004 15:51:55 -0000	1.46
  @@ -80,6 +80,8 @@
   
   #   DNS Servers
   R /de/is/com/dns                          # [I] DNS Servers
  +R /de/is/com/dns/projmanage               # [I] DNS Servers, Project Management
  +R /de/is/com/dns/development              # [I] DNS Servers, Development
   R /de/is/com/dns/installation             # [I] DNS Servers, Installation
   R /de/is/com/dns/maintenance              # [I] DNS Servers, Maintenance
   R /de/is/com/dns/security                 # [I] DNS Servers, Security
  @@ .

From ossp-cvs-owner@ossp.org  Fri May  7 22:13:51 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 230C777310; Fri,  7 May 2004 22:13:51 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/com/ donations.wml
Message-Id: <20040507201351.230C777310@mail.ossp.org>
Date: Fri,  7 May 2004 22:13:51 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   07-May-2004 22:13:51
  Branch: HEAD                             Handle: 2004050721135000

  Modified files:
    ossp-web/com            donations.wml

  Log:
    sync with sponsor page

  Summary:
    Revision    Changes     Path
    1.5         +3  -3      ossp-web/com/donations.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/com/donations.wml
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 donations.wml
  --- ossp-web/com/donations.wml	19 Aug 2002 11:32:23 -0000	1.4
  +++ ossp-web/com/donations.wml	7 May 2004 20:13:50 -0000	1.5
  @@ -23,9 +23,9 @@
   <tr>
   <td>
       <ul>
  -        <li><b>Gold</b> Sponsor: USD $5000 or more
  -        <li><b>Silver</b> Sponsor: USD $500 or more
  -        <li><b>Bronze</b> Sponsor: USD $50 or more
  +        <li><b>Gold</b> Sponsor: USD $10,000 or more
  +        <li><b>Silver</b> Sponsor: USD $1,000 or more
  +        <li><b>Bronze</b> Sponsor: USD $100 or more
       </ul>
   </td>
   <td>
  @@ .

From ossp-cvs-owner@ossp.org  Sat May  8 21:10:00 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AF60D7796F; Sat,  8 May 2004 21:09:59 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog README VERSION sh.subst shtool....
Message-Id: <20040508190959.AF60D7796F@mail.ossp.org>
Date: Sat,  8 May 2004 21:09:59 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-May-2004 21:09:59
  Branch: HEAD                             Handle: 2004050820095800

  Modified files:
    ossp-pkg/shtool         ChangeLog README VERSION sh.subst shtool.spec

  Log:
    Add option "-q" to "shtool subst" for suppressing a new warning on
    substitution operation resulting in no content change.

  Summary:
    Revision    Changes     Path
    1.201       +4  -0      ossp-pkg/shtool/ChangeLog
    1.104       +1  -1      ossp-pkg/shtool/README
    1.79        +1  -1      ossp-pkg/shtool/VERSION
    1.13        +16 -3      ossp-pkg/shtool/sh.subst
    1.22        +1  -1      ossp-pkg/shtool/shtool.spec
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.200 -r1.201 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	21 Apr 2004 15:07:41 -0000	1.200
  +++ ossp-pkg/shtool/ChangeLog	8 May 2004 19:09:58 -0000	1.201
  @@ -11,6 +11,10 @@
   
    Changes between 2.0b2 and 2.0b3 (07-Apr-2004 to 21-Apr-2004):
   
  +   *) Add option "-q" to "shtool subst" for suppressing a new warning on
  +      substitution operation resulting in no content change.
  +      [Ralf S. Engelschall]
  +
      *) Port "sh.platform" to full POSIX 1003.1-2001 (SUSv3) compliance by
         replacing "head -1" with "sed -e 'q'" and "tail -1" with "sed -n -e '$p'".
         [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/README
  ============================================================================
  $ cvs diff -u -r1.103 -r1.104 README
  --- ossp-pkg/shtool/README	7 Apr 2004 07:55:19 -0000	1.103
  +++ ossp-pkg/shtool/README	8 May 2004 19:09:58 -0000	1.104
  @@ -10,7 +10,7 @@
     http://www.gnu.org/software/shtool/
     ftp://ftp.gnu.org/gnu/shtool/
   
  -  Version 2.0b2 (07-Apr-2004)
  +  Version 2.0b3 (08-May-2004)
   
     The GNU shtool program is a compilation of small but very stable and
     portable shell scripts into a single shell tool. All ingredients
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/VERSION
  ============================================================================
  $ cvs diff -u -r1.78 -r1.79 VERSION
  --- ossp-pkg/shtool/VERSION	7 Apr 2004 07:55:19 -0000	1.78
  +++ ossp-pkg/shtool/VERSION	8 May 2004 19:09:58 -0000	1.79
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for GNU shtool (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is GNU shtool, Version 2.0b2 (07-Apr-2004)
  +  This is GNU shtool, Version 2.0b3 (08-May-2004)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.subst
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 sh.subst
  --- ossp-pkg/shtool/sh.subst	17 Feb 2004 08:54:14 -0000	1.12
  +++ ossp-pkg/shtool/sh.subst	8 May 2004 19:09:58 -0000	1.13
  @@ -19,14 +19,15 @@
   ##
   
   str_tool="subst"
  -str_usage="[-v|--verbose] [-t|--trace] [-n|--nop] [-s|--stealth] [-i|--interactive] [-b|--backup <ext>] [-e|--exec <cmd>] [-f|--file <cmd-file>] [<file>] [...]"
  +str_usage="[-v|--verbose] [-t|--trace] [-n|--nop] [-q|--quiet] [-s|--stealth] [-i|--interactive] [-b|--backup <ext>] [-e|--exec <cmd>] [-f|--file <cmd-file>] [<file>] [...]"
   gen_tmpfile=yes
   arg_spec="0+"
  -opt_spec="v.t.n.s.i.b:e+f:"
  -opt_alias="v:verbose,t:trace,n:nop,s:stealth,i:interactive,b:backup,e:exec,f:file"
  +opt_spec="v.t.n.q.s.i.b:e+f:"
  +opt_alias="v:verbose,t:trace,n:nop,q:quiet,s:stealth,i:interactive,b:backup,e:exec,f:file"
   opt_v=no
   opt_t=no
   opt_n=no
  +opt_q=no
   opt_s=no
   opt_i=no
   opt_b=""
  @@ -142,6 +143,13 @@
               fi
           fi
   
  +        #   optionally check whether any content change actually occurred 
  +        if [ ".$opt_q" = .no ]; then
  +            if cmp $file$orig $file >/dev/null 2>&1; then
  +                echo "$msgprefix:Warning: substitution operation results in no content change" 1>&2
  +            fi
  +        fi
  +
           #   optionally remove preserved original file
           if [ ".$opt_b" = . ]; then
               if [ ".$opt_t" = .yes ]; then
  @@ -183,6 +191,7 @@
   [B<-v>|B<--verbose>]
   [B<-t>|B<--trace>]
   [B<-n>|B<--nop>]
  +[B<-q>|B<--quiet>]
   [B<-s>|B<--stealth>]
   [B<-i>|B<--interactive>]
   [B<-b>|B<--backup> I<ext>]
  @@ -213,6 +222,10 @@
   
   No operation mode. Actual execution of the essential shell commands
   which would be executed is suppressed.
  +
  +=item B<-q>, B<--quiet>
  +
  +Suppress warning on substitution operation resulting in no content change.
   
   =item B<-s>, B<--stealth>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtool.spec
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 shtool.spec
  --- ossp-pkg/shtool/shtool.spec	7 Apr 2004 07:55:19 -0000	1.21
  +++ ossp-pkg/shtool/shtool.spec	8 May 2004 19:09:58 -0000	1.22
  @@ -30,7 +30,7 @@
   %define prefix /usr/local
   %endif
   
  -%define ver 2.0b2
  +%define ver 2.0b3
   %define rel 0
   
   Name:       shtool
  @@ .

From ossp-cvs-owner@ossp.org  Sat May  8 21:10:41 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 96F1E77975; Sat,  8 May 2004 21:10:41 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog
Message-Id: <20040508191041.96F1E77975@mail.ossp.org>
Date: Sat,  8 May 2004 21:10:41 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-May-2004 21:10:41
  Branch: HEAD                             Handle: 2004050820104100

  Modified files:
    ossp-pkg/shtool         ChangeLog

  Log:
    adjust for release

  Summary:
    Revision    Changes     Path
    1.202       +1  -1      ossp-pkg/shtool/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.201 -r1.202 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	8 May 2004 19:09:58 -0000	1.201
  +++ ossp-pkg/shtool/ChangeLog	8 May 2004 19:10:41 -0000	1.202
  @@ -9,7 +9,7 @@
   
    ChangeLog
   
  - Changes between 2.0b2 and 2.0b3 (07-Apr-2004 to 21-Apr-2004):
  + Changes between 2.0b2 and 2.0b3 (07-Apr-2004 to 08-May-2004):
   
      *) Add option "-q" to "shtool subst" for suppressing a new warning on
         substitution operation resulting in no content change.
  @@ .

From ossp-cvs-owner@ossp.org  Mon May 10 15:38:25 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6BB5C77977; Mon, 10 May 2004 15:38:25 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ ChangeLog VERSION shiela-install.sh shiel...
Message-Id: <20040510133825.6BB5C77977@mail.ossp.org>
Date: Mon, 10 May 2004 15:38:25 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-May-2004 15:38:25
  Branch: HEAD                             Handle: 2004051014382400

  Modified files:
    ossp-pkg/shiela         ChangeLog VERSION shiela-install.sh shiela.pl

  Log:
    Workaround a syntax problem on Solaris /bin/sh.
    
    Submitted by: Michael Schloh

  Summary:
    Revision    Changes     Path
    1.45        +5  -0      ossp-pkg/shiela/ChangeLog
    1.13        +1  -1      ossp-pkg/shiela/VERSION
    1.28        +3  -2      ossp-pkg/shiela/shiela-install.sh
    1.56        +1  -1      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.44 -r1.45 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	7 May 2004 07:34:42 -0000	1.44
  +++ ossp-pkg/shiela/ChangeLog	10 May 2004 13:38:24 -0000	1.45
  @@ -9,6 +9,11 @@
   
     ChangeLog
   
  +  Changes between 1.1.0 and 1.1.1 (07-May-2002 to 10-May-2004):
  +
  +   *) Workaround a syntax problem under Solaris /bin/sh.
  +      [Ralf S. Engelschall]
  +
     Changes between 1.0.4 and 1.1.0 (23-Dec-2002 to 07-May-2004):
   
      *) Add "shiela-test.sh" program and "make test" driver
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/VERSION
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 VERSION
  --- ossp-pkg/shiela/VERSION	7 May 2004 06:27:07 -0000	1.12
  +++ ossp-pkg/shiela/VERSION	10 May 2004 13:38:24 -0000	1.13
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP shiela (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP shiela, Version 1.1.0 (07-May-2004)
  +  This is OSSP shiela, Version 1.1.1 (10-May-2004)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-install.sh
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 shiela-install.sh
  --- ossp-pkg/shiela/shiela-install.sh	7 May 2004 07:45:56 -0000	1.27
  +++ ossp-pkg/shiela/shiela-install.sh	10 May 2004 13:38:24 -0000	1.28
  @@ -26,7 +26,7 @@
   ##  shiela-install.sh: repository install program (syntax: Bourne-Shell)
   ##
   
  -version="1.1.0"
  +version="1.1.1"
   
   prefix="@prefix@"
   bindir="@bindir@"
  @@ -103,7 +103,8 @@
   
   EOT
   
  -for arg; do
  +for arg
  +do
       eval `echo "$arg" | sed -e 's/^\([^=]*\)=\(.*\)$/V_\1="\2"/'`
   done
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================================
  $ cvs diff -u -r1.55 -r1.56 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	7 May 2004 07:48:01 -0000	1.55
  +++ ossp-pkg/shiela/shiela.pl	10 May 2004 13:38:24 -0000	1.56
  @@ -26,7 +26,7 @@
   ##  shiela.pl: control program (syntax: Perl)
   ##
   
  -my $version = '1.1.0';
  +my $version = '1.1.1';
   
   require 5.005;
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon May 10 15:41:46 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DF85E77977; Mon, 10 May 2004 15:41:45 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/tool/ index.wml ossp-w...
Message-Id: <20040510134145.DF85E77977@mail.ossp.org>
Date: Mon, 10 May 2004 15:41:45 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   10-May-2004 15:41:45
  Branch: HEAD                             Handle: 2004051014414401

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/shiela
                            index.wml

  Log:
    release OSSP shiela 1.1.1

  Summary:
    Revision    Changes     Path
    1.84        +2  -0      ossp-web/new/news.txt
    1.34        +2  -2      ossp-web/pkg/tool/index.wml
    1.12        +2  -2      ossp-web/pkg/tool/shiela/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.83 -r1.84 news.txt
  --- ossp-web/new/news.txt	7 May 2004 08:19:59 -0000	1.83
  +++ ossp-web/new/news.txt	10 May 2004 13:41:44 -0000	1.84
  @@ -1,3 +1,5 @@
  +10-May-2004: Released T<OSSP shiela> 1.1.1
  +07-May-2004: Released T<OSSP lmtp2nntp> 1.3a3
   07-May-2004: Released T<OSSP shiela> 1.1.0
   26-Apr-2004: Released L<OSSP fsl> 1.5.0
   26-Apr-2004: Released L<OSSP fsl> 1.5a3
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 index.wml
  --- ossp-web/pkg/tool/index.wml	7 May 2004 08:19:59 -0000	1.33
  +++ ossp-web/pkg/tool/index.wml	10 May 2004 13:41:45 -0000	1.34
  @@ -17,10 +17,10 @@
   		    done=100 stable="1.6.2" unstable=none>
     <pkg_item name="lmtp2nntp" longname="OSSP lmtp2nntp" type="tool"
               desc="Real-Time Mail to News Gateway"
  -            done=100 stable="1.2.0" unstable=none>
  +            done=100 stable="1.2.0" unstable=1.3a3>
     <pkg_item name="shiela" longname="OSSP shiela" type="tool"
               desc="CVS Access Control and Logging"
  -	        done=100 stable="1.1.0" unstable="none">
  +	        done=100 stable="1.1.1" unstable="none">
     <pkg_item name="eperl" longname="OSSP eperl" type="tool"
               desc="Embedded Perl Language"
   	        done=100 stable="2.2.14" unstable="none">
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/shiela/index.wml
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 index.wml
  --- ossp-web/pkg/tool/shiela/index.wml	7 May 2004 08:20:00 -0000	1.11
  +++ ossp-web/pkg/tool/shiela/index.wml	10 May 2004 13:41:45 -0000	1.12
  @@ -25,7 +25,7 @@
   <h2>Status</h2>
   
   <pkg_status
  -    stable="1.1.0" stable_date="07-May-2004"
  +    stable="1.1.1" stable_date="10-May-2004"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -36,7 +36,7 @@
       url=$(FTP_ROOT_URL)/pkg/tool/shiela/
       directory=$(FTP_ROOT_DIR)/pkg/tool/shiela/
       files="shiela-*.tar.gz" 
  -	stable="shiela-1.1.0.tar.gz" unstable="none">
  +	stable="shiela-1.1.1.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon May 10 19:54:05 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 93BB377959; Mon, 10 May 2004 19:54:05 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ shiela.pl
Message-Id: <20040510175405.93BB377959@mail.ossp.org>
Date: Mon, 10 May 2004 19:54:05 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   10-May-2004 19:54:05
  Branch: HEAD                             Handle: 2004051018540500

  Modified files:
    ossp-pkg/shiela         shiela.pl

  Log:
    correct spelling of convenience

  Summary:
    Revision    Changes     Path
    1.57        +8  -8      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================================
  $ cvs diff -u -r1.56 -r1.57 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	10 May 2004 13:38:24 -0000	1.56
  +++ ossp-pkg/shiela/shiela.pl	10 May 2004 17:54:05 -0000	1.57
  @@ -368,7 +368,7 @@
   ##  Determine OSSP shiela configuration.
   ##
   ##  We theoretically could directly operate on the syntax tree as
  -##  created by parse_config() above. But for convinience reasons and
  +##  created by parse_config() above. But for convenience reasons and
   ##  to greatly simplify the processing, we use callback functions for
   ##  parse_config() and build an own configuration structure.
   ##  _________________________________________________________________
  @@ -556,7 +556,7 @@
   ##  required by most of the CVS client commands), e.g. when an import
   ##  is done locally (no client/server). So we generally use the CVS
   ##  client/server protocol to communicate with a spawned CVS server
  -##  process and act as we would be a regular CVS client. For convinience
  +##  process and act as we would be a regular CVS client. For convenience
   ##  reasons, the communication is encapsulated in a "CVS" class object.
   ##  _________________________________________________________________
   ##
  @@ -658,7 +658,7 @@
       }
   }
   
  -#   convinience wrapper: receive a response
  +#   convenience wrapper: receive a response
   sub result {
       my $cvs = shift;
       my $line;
  @@ -674,7 +674,7 @@
       }
   }
   
  -#   convinience wrapper: provide a file entry
  +#   convenience wrapper: provide a file entry
   sub entry {
       my $cvs = shift;
       my @files = @_;
  @@ -684,7 +684,7 @@
       }
   }
   
  -#   convinience wrapper: provide one or more global options
  +#   convenience wrapper: provide one or more global options
   sub global_options {
       my $cvs = shift;
       my @opts = @_;
  @@ -693,7 +693,7 @@
       }
   }
   
  -#   convinience wrapper: provide one or more arguments
  +#   convenience wrapper: provide one or more arguments
   sub arguments {
       my $cvs = shift;
       my @args = @_;
  @@ -702,7 +702,7 @@
       }
   }
   
  -#   convinience wrapper: configure a directory
  +#   convenience wrapper: configure a directory
   sub directory {
       my $cvs = shift;
       my ($dir) = @_;
  @@ -811,7 +811,7 @@
   ##
   ##  Common file operations.
   ##
  -##  This is nothing more than a convinience function for
  +##  This is nothing more than a convenience function for
   ##  the common file operations we have do.
   ##  _________________________________________________________________
   ##
  @@ .

From ossp-cvs-owner@ossp.org  Mon May 10 19:57:48 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A4B6277959; Mon, 10 May 2004 19:57:48 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ ChangeLog shiela.pl
Message-Id: <20040510175748.A4B6277959@mail.ossp.org>
Date: Mon, 10 May 2004 19:57:48 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-May-2004 19:57:48
  Branch: HEAD                             Handle: 2004051018574800

  Modified files:
    ossp-pkg/shiela         ChangeLog shiela.pl

  Log:
    Optimize and bugfix the determination of the number of lines in case of
    added files.
    
    This especially fixes the following error:
    
    | Use of uninitialized value in <HANDLE> at /e/openpkg/cvs/CVSROOT/shiela line 1679.
    | readline() on unopened filehandle at /e/openpkg/cvs/CVSROOT/shiela line 1679.
    | cvs:shiela::ERROR: Can't call method "close" on an undefined value (No such file or directory)

  Summary:
    Revision    Changes     Path
    1.46        +6  -0      ossp-pkg/shiela/ChangeLog
    1.58        +13 -7      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.45 -r1.46 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	10 May 2004 13:38:24 -0000	1.45
  +++ ossp-pkg/shiela/ChangeLog	10 May 2004 17:57:48 -0000	1.46
  @@ -9,6 +9,12 @@
   
     ChangeLog
   
  +  Changes between 1.1.1 and 1.1.2 (10-May-2002 to 10-May-2004):
  +
  +   *) Optimize and bugfix the determination of the number of
  +      lines in case of added files.
  +      [Ralf S. Engelschall]
  +
     Changes between 1.1.0 and 1.1.1 (07-May-2002 to 10-May-2004):
   
      *) Workaround a syntax problem under Solaris /bin/sh.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================================
  $ cvs diff -u -r1.57 -r1.58 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	10 May 2004 17:54:05 -0000	1.57
  +++ ossp-pkg/shiela/shiela.pl	10 May 2004 17:57:48 -0000	1.58
  @@ -1674,11 +1674,8 @@
           }
           else {
               if ($Io eq 'A') {
  -                my $io = new IO::File "<$Is" || die "unable to open $Is for reading";
  -                my $l = 0;
  -                $l++ while (<$io>);
  -                $io->close;
  -                $Id = sprintf("+%d/-%d", $l, 0);
  +                #   determined later below when we have to read in the
  +                #   whole content anyway in order to create the difference.
               }
               elsif ($Io eq 'M') {
                   if ($rcslog =~ m|\ndate:.*lines:\s*([\d \t+-]+)|s) {
  @@ -1710,10 +1707,14 @@
               unlink("$RT->{tmpfile}.all");
               my $io = new IO::File ">$RT->{tmpfile}.all"
                   || die "unable to open temporary file $RT->{tmpfile}.all for writing";
  +            my $l = 0;
               if (not $RT->{useserver}) {
                   my $cvs = new IO::File "$RT->{cvs} -f -Q -n update -p -r$Iv '$Is'|"
                       || die "unable to open CVS command pipe for reading";
  -                $io->print($_) while (<$cvs>);
  +                while (<$cvs>) {
  +                    $io->print($_);
  +                    $l++;
  +                }
                   $cvs->close;
               }
               else {
  @@ -1722,9 +1723,14 @@
                   $cvs->entry($Is);
                   $cvs->arguments("-p", "-r$Iv", $Is);
                   $cvs->send("update");
  -                $io->print(scalar $cvs->result);
  +                my $r = scalar $cvs->result;
  +                $io->print($r);
                   $cvs->close;
  +                if ($r ne '') {
  +                    $l++ while ($r =~ m/^/mg);
  +                }
               }
  +            $Id = sprintf("+%d/-%d", $l, 0) if ($Ik eq 'b' or -B $Is);
               $io->close;
   
               if ($Ik eq 'b' or -B $Is) {
  @@ .

From ossp-cvs-owner@ossp.org  Mon May 10 20:01:04 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5EB7077975; Mon, 10 May 2004 20:01:04 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ ChangeLog THANKS shiela.pl
Message-Id: <20040510180104.5EB7077975@mail.ossp.org>
Date: Mon, 10 May 2004 20:01:04 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-May-2004 20:01:04
  Branch: HEAD                             Handle: 2004051019010300

  Modified files:
    ossp-pkg/shiela         ChangeLog THANKS shiela.pl

  Log:
    Fixed two more warnings about undefined variables.
    
    Submitted by: Michael Schloh von Bennewitz

  Summary:
    Revision    Changes     Path
    1.47        +3  -0      ossp-pkg/shiela/ChangeLog
    1.5         +4  -3      ossp-pkg/shiela/THANKS
    1.59        +2  -2      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.46 -r1.47 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	10 May 2004 17:57:48 -0000	1.46
  +++ ossp-pkg/shiela/ChangeLog	10 May 2004 18:01:03 -0000	1.47
  @@ -15,6 +15,9 @@
         lines in case of added files.
         [Ralf S. Engelschall]
   
  +   *) Fixed two more warnings about undefined variables.
  +      [Ralf S. Engelschall, Michael Schloh von Bennewitz]
  +
     Changes between 1.1.0 and 1.1.1 (07-May-2002 to 10-May-2004):
   
      *) Workaround a syntax problem under Solaris /bin/sh.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/THANKS
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 THANKS
  --- ossp-pkg/shiela/THANKS	5 May 2004 13:18:47 -0000	1.4
  +++ ossp-pkg/shiela/THANKS	10 May 2004 18:01:03 -0000	1.5
  @@ -12,9 +12,10 @@
     Credit has to be given to the following people who contributed ideas,
     stuff, bugfixes, hints etc. (in alphabetical order):
   
  -  o Denis Barbier            <barbier@imacs.polytechnique.fr>
  -  o Markus Sander            <msander@de.cw.com>
  -  o Christoph Schug          <chris@schug.net>
  +  o Denis Barbier               <barbier@imacs.polytechnique.fr>
  +  o Markus Sander               <msander@de.cw.com>
  +  o Michael Schloh v. Bennewitz <michael.schloh@cw.com>
  +  o Christoph Schug             <chris@schug.net>
   
     ...and all other OSSP shiela users who gave me feedback but I've forgot.
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================================
  $ cvs diff -u -r1.58 -r1.59 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	10 May 2004 17:57:48 -0000	1.58
  +++ ossp-pkg/shiela/shiela.pl	10 May 2004 18:01:03 -0000	1.59
  @@ -1440,7 +1440,7 @@
       $RT->{cvsop} = 'commit-file';
   
       #   handle special invocation under `cvs add <dir>'
  -    if ($PA->{ARG}->[1] eq '- New directory') { # see CVS' src/add.c
  +    if (defined($PA->{ARG}->[1]) and $PA->{ARG}->[1] eq '- New directory') { # see CVS' src/add.c
           #   Hmmm... we always just deal with files in OSSP shiela, so there
           #   is no obvious and consistent way to deal now with only a
           #   plain directory. And there is also no log message provided
  @@ -1456,7 +1456,7 @@
       #   CVS only calls us inside the loginfo hook and never in the
       #   commitinfo hook before. Additionally CVS doesn't provide us with
       #   the %{sVvto} information :(
  -    if ($PA->{ARG}->[1] eq '- Imported sources') { # see CVS' src/import.c
  +    if (defined($PA->{ARG}->[1]) and $PA->{ARG}->[1] eq '- Imported sources') { # see CVS' src/import.c
           #   I = ignored
           #   L = link (=error),
           #   N = new file
  @@ .

From ossp-cvs-owner@ossp.org  Mon May 10 20:03:38 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 93DAB77975; Mon, 10 May 2004 20:03:38 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ ChangeLog
Message-Id: <20040510180338.93DAB77975@mail.ossp.org>
Date: Mon, 10 May 2004 20:03:38 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-May-2004 20:03:38
  Branch: HEAD                             Handle: 2004051019033800

  Modified files:
    ossp-pkg/shiela         ChangeLog

  Log:
    remember what was done

  Summary:
    Revision    Changes     Path
    1.48        +3  -0      ossp-pkg/shiela/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.47 -r1.48 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	10 May 2004 18:01:03 -0000	1.47
  +++ ossp-pkg/shiela/ChangeLog	10 May 2004 18:03:38 -0000	1.48
  @@ -18,6 +18,9 @@
      *) Fixed two more warnings about undefined variables.
         [Ralf S. Engelschall, Michael Schloh von Bennewitz]
   
  +   *) Fixed typos in source comments.
  +      [Michael Schloh von Bennewitz]
  +
     Changes between 1.1.0 and 1.1.1 (07-May-2002 to 10-May-2004):
   
      *) Workaround a syntax problem under Solaris /bin/sh.
  @@ .

From ossp-cvs-owner@ossp.org  Mon May 10 20:13:02 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1A1E177975; Mon, 10 May 2004 20:13:02 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ shiela.pl
Message-Id: <20040510181302.1A1E177975@mail.ossp.org>
Date: Mon, 10 May 2004 20:13:02 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-May-2004 20:13:01
  Branch: HEAD                             Handle: 2004051019130100

  Modified files:
    ossp-pkg/shiela         shiela.pl

  Log:
    fix previous commit

  Summary:
    Revision    Changes     Path
    1.60        +1  -1      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================================
  $ cvs diff -u -r1.59 -r1.60 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	10 May 2004 18:01:03 -0000	1.59
  +++ ossp-pkg/shiela/shiela.pl	10 May 2004 18:13:01 -0000	1.60
  @@ -1730,7 +1730,7 @@
                       $l++ while ($r =~ m/^/mg);
                   }
               }
  -            $Id = sprintf("+%d/-%d", $l, 0) if ($Ik eq 'b' or -B $Is);
  +            $Id = sprintf("+%d/-%d", $l, 0) if (not ($Ik eq 'b' or -B $Is));
               $io->close;
   
               if ($Ik eq 'b' or -B $Is) {
  @@ .

From ossp-cvs-owner@ossp.org  Mon May 10 20:14:13 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0CA3C77975; Mon, 10 May 2004 20:14:13 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ VERSION shiela-install.sh shiela.pl
Message-Id: <20040510181413.0CA3C77975@mail.ossp.org>
Date: Mon, 10 May 2004 20:14:13 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-May-2004 20:14:12
  Branch: HEAD                             Handle: 2004051019141200

  Modified files:
    ossp-pkg/shiela         VERSION shiela-install.sh shiela.pl

  Log:
    bump to version 1.1.2 for release

  Summary:
    Revision    Changes     Path
    1.14        +1  -1      ossp-pkg/shiela/VERSION
    1.29        +1  -1      ossp-pkg/shiela/shiela-install.sh
    1.61        +1  -1      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/VERSION
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 VERSION
  --- ossp-pkg/shiela/VERSION	10 May 2004 13:38:24 -0000	1.13
  +++ ossp-pkg/shiela/VERSION	10 May 2004 18:14:12 -0000	1.14
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP shiela (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP shiela, Version 1.1.1 (10-May-2004)
  +  This is OSSP shiela, Version 1.1.2 (10-May-2004)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-install.sh
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 shiela-install.sh
  --- ossp-pkg/shiela/shiela-install.sh	10 May 2004 13:38:24 -0000	1.28
  +++ ossp-pkg/shiela/shiela-install.sh	10 May 2004 18:14:12 -0000	1.29
  @@ -26,7 +26,7 @@
   ##  shiela-install.sh: repository install program (syntax: Bourne-Shell)
   ##
   
  -version="1.1.1"
  +version="1.1.2"
   
   prefix="@prefix@"
   bindir="@bindir@"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================================
  $ cvs diff -u -r1.60 -r1.61 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	10 May 2004 18:13:01 -0000	1.60
  +++ ossp-pkg/shiela/shiela.pl	10 May 2004 18:14:12 -0000	1.61
  @@ -26,7 +26,7 @@
   ##  shiela.pl: control program (syntax: Perl)
   ##
   
  -my $version = '1.1.1';
  +my $version = '1.1.2';
   
   require 5.005;
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon May 10 20:30:01 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6E39B77959; Mon, 10 May 2004 20:30:00 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/tool/ index.wml ossp-w...
Message-Id: <20040510183000.6E39B77959@mail.ossp.org>
Date: Mon, 10 May 2004 20:30:00 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   10-May-2004 20:30:00
  Branch: HEAD                             Handle: 2004051019295901

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/shiela
                            index.wml

  Log:
    release OSSP shiela 1.1.2

  Summary:
    Revision    Changes     Path
    1.85        +1  -0      ossp-web/new/news.txt
    1.35        +1  -1      ossp-web/pkg/tool/index.wml
    1.13        +2  -2      ossp-web/pkg/tool/shiela/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.84 -r1.85 news.txt
  --- ossp-web/new/news.txt	10 May 2004 13:41:44 -0000	1.84
  +++ ossp-web/new/news.txt	10 May 2004 18:29:59 -0000	1.85
  @@ -1,3 +1,4 @@
  +10-May-2004: Released T<OSSP shiela> 1.1.2
   10-May-2004: Released T<OSSP shiela> 1.1.1
   07-May-2004: Released T<OSSP lmtp2nntp> 1.3a3
   07-May-2004: Released T<OSSP shiela> 1.1.0
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 index.wml
  --- ossp-web/pkg/tool/index.wml	10 May 2004 13:41:45 -0000	1.34
  +++ ossp-web/pkg/tool/index.wml	10 May 2004 18:29:59 -0000	1.35
  @@ -20,7 +20,7 @@
               done=100 stable="1.2.0" unstable=1.3a3>
     <pkg_item name="shiela" longname="OSSP shiela" type="tool"
               desc="CVS Access Control and Logging"
  -	        done=100 stable="1.1.1" unstable="none">
  +	        done=100 stable="1.1.2" unstable="none">
     <pkg_item name="eperl" longname="OSSP eperl" type="tool"
               desc="Embedded Perl Language"
   	        done=100 stable="2.2.14" unstable="none">
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/shiela/index.wml
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 index.wml
  --- ossp-web/pkg/tool/shiela/index.wml	10 May 2004 13:41:45 -0000	1.12
  +++ ossp-web/pkg/tool/shiela/index.wml	10 May 2004 18:30:00 -0000	1.13
  @@ -25,7 +25,7 @@
   <h2>Status</h2>
   
   <pkg_status
  -    stable="1.1.1" stable_date="10-May-2004"
  +    stable="1.1.2" stable_date="10-May-2004"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -36,7 +36,7 @@
       url=$(FTP_ROOT_URL)/pkg/tool/shiela/
       directory=$(FTP_ROOT_DIR)/pkg/tool/shiela/
       files="shiela-*.tar.gz" 
  -	stable="shiela-1.1.1.tar.gz" unstable="none">
  +	stable="shiela-1.1.2.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 27 11:13:28 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0FB2677AA3; Thu, 27 May 2004 11:13:28 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-doc/ accounts.txt
Message-Id: <20040527091328.0FB2677AA3@mail.ossp.org>
Date: Thu, 27 May 2004 11:13:28 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   27-May-2004 11:13:27
  Branch: HEAD                             Handle: 2004052710132700

  Modified files:
    ossp-pkg/as/as-doc      accounts.txt

  Log:
    add CMVC accounts

  Summary:
    Revision    Changes     Path
    1.47        +11 -0      ossp-pkg/as/as-doc/accounts.txt
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-doc/accounts.txt
  ============================================================================
  $ cvs diff -u -r1.46 -r1.47 accounts.txt
  --- ossp-pkg/as/as-doc/accounts.txt	7 May 2004 15:51:55 -0000	1.46
  +++ ossp-pkg/as/as-doc/accounts.txt	27 May 2004 09:13:27 -0000	1.47
  @@ -69,6 +69,17 @@
   R /de/is/prj/handover/documentation       # [I] Server Handover Project: Documentation
   R /de/is/prj/handover/agreement           # [I] Server Handover Project: Server Agreements
   
  +#  Change Management & Version Control
  +R /de/is/cmvc                             # [I] Change Management & Version Control
  +R /de/is/cmvc/communication               # [I] Change Management & Version Control: Communication
  +R /de/is/cmvc/preparation                 # [I] Change Management & Version Control: Preparation
  +R /de/is/cmvc/evaluation                  # [I] Change Management & Version Control: Evaluation
  +R /de/is/cmvc/development                 # [I] Change Management & Version Control: Development
  +R /de/is/cmvc/implementation              # [I] Change Management & Version Control: Implementation
  +R /de/is/cmvc/troubleshooting             # [I] Change Management & Version Control: Troubleshooting
  +R /de/is/cmvc/documentation               # [I] Change Management & Version Control: Documentation
  +R /de/is/cmvc/policy                      # [I] Change Management & Version Control: Policy Enforcement
  +
   ##
   ##  C&W DE, Combined Group (New Listings)
   ##
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 27 23:33:32 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 03CA077AC4; Thu, 27 May 2004 23:33:31 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-gui/ as_gui.h configure.in
Message-Id: <20040527213331.03CA077AC4@mail.ossp.org>
Date: Thu, 27 May 2004 23:33:31 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   27-May-2004 23:33:31
  Branch: HEAD                             Handle: 2004052722333100

  Modified files:
    ossp-pkg/as/as-gui      as_gui.h configure.in

  Log:
    remove all usage of fundamental type 'long long', because it is
    not specified by the ISO C++ (14882) standard.

  Summary:
    Revision    Changes     Path
    1.79        +0  -4      ossp-pkg/as/as-gui/as_gui.h
    1.25        +0  -1      ossp-pkg/as/as-gui/configure.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_gui.h
  ============================================================================
  $ cvs diff -u -r1.78 -r1.79 as_gui.h
  --- ossp-pkg/as/as-gui/as_gui.h	20 Nov 2003 11:31:20 -0000	1.78
  +++ ossp-pkg/as/as-gui/as_gui.h	27 May 2004 21:33:31 -0000	1.79
  @@ -98,8 +98,6 @@
   typedef unsigned int         U64;
   #elif (SIZEOF_LONG == 8)
   typedef unsigned long        U64;
  -#elif (SIZEOF_LONG_LONG == 8)
  -typedef unsigned long long   U64;
   #else
   ?==Error: Undefined 64 bit type
   #endif // U64
  @@ -110,8 +108,6 @@
   typedef unsigned int         U64;
   #elif (4 == 8)
   typedef unsigned long        U64;
  -#elif (8 == 8)
  -typedef unsigned long long   U64;
   #else
   ?==Error: Undefined 64 bit type
   #endif
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/configure.in
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 configure.in
  --- ossp-pkg/as/as-gui/configure.in	20 Nov 2003 11:31:20 -0000	1.24
  +++ ossp-pkg/as/as-gui/configure.in	27 May 2004 21:33:31 -0000	1.25
  @@ -110,7 +110,6 @@
   AC_CHECK_SIZEOF(short)
   AC_CHECK_SIZEOF(int)
   AC_CHECK_SIZEOF(long)
  -AC_CHECK_SIZEOF(long long)
   
   enable_shared=no
   export enable_shared
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 27 23:42:29 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DA71177AC4; Thu, 27 May 2004 23:42:28 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-gui/ as_amount.cpp as_amount.h as_assist.cp...
Message-Id: <20040527214228.DA71177AC4@mail.ossp.org>
Date: Thu, 27 May 2004 23:42:28 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   27-May-2004 23:42:28
  Branch: HEAD                             Handle: 2004052722422600

  Modified files:
    ossp-pkg/as/as-gui      as_amount.cpp as_amount.h as_assist.cpp as_const.h
                            as_dataop.cpp as_except.cpp as_except.h
                            as_generic.cpp as_gui.cpp as_gui.h as_main.cpp
                            as_slot.cpp as_table.cpp as_table.h as_tableitem.h

  Log:
    Correct file names in source headers.

  Summary:
    Revision    Changes     Path
    1.8         +1  -1      ossp-pkg/as/as-gui/as_amount.cpp
    1.6         +1  -1      ossp-pkg/as/as-gui/as_amount.h
    1.117       +1  -1      ossp-pkg/as/as-gui/as_assist.cpp
    1.63        +1  -1      ossp-pkg/as/as-gui/as_const.h
    1.53        +1  -1      ossp-pkg/as/as-gui/as_dataop.cpp
    1.6         +1  -1      ossp-pkg/as/as-gui/as_except.cpp
    1.5         +1  -1      ossp-pkg/as/as-gui/as_except.h
    1.7         +1  -1      ossp-pkg/as/as-gui/as_generic.cpp
    1.42        +1  -1      ossp-pkg/as/as-gui/as_gui.cpp
    1.80        +1  -1      ossp-pkg/as/as-gui/as_gui.h
    1.16        +1  -1      ossp-pkg/as/as-gui/as_main.cpp
    1.140       +1  -1      ossp-pkg/as/as-gui/as_slot.cpp
    1.25        +1  -1      ossp-pkg/as/as-gui/as_table.cpp
    1.17        +1  -1      ossp-pkg/as/as-gui/as_table.h
    1.7         +1  -1      ossp-pkg/as/as-gui/as_tableitem.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_amount.cpp
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 as_amount.cpp
  --- ossp-pkg/as/as-gui/as_amount.cpp	20 Nov 2003 11:31:20 -0000	1.7
  +++ ossp-pkg/as/as-gui/as_amount.cpp	27 May 2004 21:42:26 -0000	1.8
  @@ -26,7 +26,7 @@
   //  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   //  SUCH DAMAGE.
   //
  -//  titamount.cpp: ISO C++ implementation
  +//  as_amount.cpp: ISO C++ implementation
   //
   
   //#include <qregexp.h>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_amount.h
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 as_amount.h
  --- ossp-pkg/as/as-gui/as_amount.h	20 Nov 2003 11:31:20 -0000	1.5
  +++ ossp-pkg/as/as-gui/as_amount.h	27 May 2004 21:42:26 -0000	1.6
  @@ -26,7 +26,7 @@
   //  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   //  SUCH DAMAGE.
   //
  -//  titamount.h: ISO C++ interface
  +//  as_amount.h: ISO C++ interface
   //
   
   #ifndef AMOUNTBOX_H
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_assist.cpp
  ============================================================================
  $ cvs diff -u -r1.116 -r1.117 as_assist.cpp
  --- ossp-pkg/as/as-gui/as_assist.cpp	20 Nov 2003 11:31:20 -0000	1.116
  +++ ossp-pkg/as/as-gui/as_assist.cpp	27 May 2004 21:42:26 -0000	1.117
  @@ -26,7 +26,7 @@
   //  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   //  SUCH DAMAGE.
   //
  -//  titassist.cpp: ISO C++ implementation
  +//  as_assist.cpp: ISO C++ implementation
   //
   
   // Qt style headers
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_const.h
  ============================================================================
  $ cvs diff -u -r1.62 -r1.63 as_const.h
  --- ossp-pkg/as/as-gui/as_const.h	20 Nov 2003 11:31:20 -0000	1.62
  +++ ossp-pkg/as/as-gui/as_const.h	27 May 2004 21:42:26 -0000	1.63
  @@ -26,7 +26,7 @@
   //  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   //  SUCH DAMAGE.
   //
  -//  titconst.h: ISO C++ interface
  +//  as_const.h: ISO C++ interface
   //
   
   #ifndef TITCONST_H
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_dataop.cpp
  ============================================================================
  $ cvs diff -u -r1.52 -r1.53 as_dataop.cpp
  --- ossp-pkg/as/as-gui/as_dataop.cpp	20 Nov 2003 11:31:20 -0000	1.52
  +++ ossp-pkg/as/as-gui/as_dataop.cpp	27 May 2004 21:42:26 -0000	1.53
  @@ -26,7 +26,7 @@
   //  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   //  SUCH DAMAGE.
   //
  -//  tidatops.cpp: ISO C++ implementation
  +//  as_dataops.cpp: ISO C++ implementation
   //
   
   // System headers
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_except.cpp
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 as_except.cpp
  --- ossp-pkg/as/as-gui/as_except.cpp	20 Nov 2003 11:31:20 -0000	1.5
  +++ ossp-pkg/as/as-gui/as_except.cpp	27 May 2004 21:42:26 -0000	1.6
  @@ -26,7 +26,7 @@
   //  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   //  SUCH DAMAGE.
   //
  -//  titrex.cpp: ISO C++ implementation
  +//  as_except.cpp: ISO C++ implementation
   //
   
   #include "as_except.h"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_except.h
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 as_except.h
  --- ossp-pkg/as/as-gui/as_except.h	20 Nov 2003 11:31:20 -0000	1.4
  +++ ossp-pkg/as/as-gui/as_except.h	27 May 2004 21:42:26 -0000	1.5
  @@ -26,7 +26,7 @@
   //  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   //  SUCH DAMAGE.
   //
  -//  titrex.h: ISO C++ interface
  +//  as_except.h: ISO C++ interface
   //
   
   #ifndef TITRAQEXCEPT_H
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_generic.cpp
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 as_generic.cpp
  --- ossp-pkg/as/as-gui/as_generic.cpp	20 Nov 2003 11:31:20 -0000	1.6
  +++ ossp-pkg/as/as-gui/as_generic.cpp	27 May 2004 21:42:26 -0000	1.7
  @@ -26,7 +26,7 @@
   //  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   //  SUCH DAMAGE.
   //
  -//  generic.cpp: ISO C++ implementation
  +//  as_generic.cpp: ISO C++ implementation
   //
   
   #include <qobject.h>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_gui.cpp
  ============================================================================
  $ cvs diff -u -r1.41 -r1.42 as_gui.cpp
  --- ossp-pkg/as/as-gui/as_gui.cpp	20 Nov 2003 11:31:20 -0000	1.41
  +++ ossp-pkg/as/as-gui/as_gui.cpp	27 May 2004 21:42:26 -0000	1.42
  @@ -26,7 +26,7 @@
   //  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   //  SUCH DAMAGE.
   //
  -//  titraq.cpp: ISO C++ implementation
  +//  as_gui.cpp: ISO C++ implementation
   //
   
   // User interface
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_gui.h
  ============================================================================
  $ cvs diff -u -r1.79 -r1.80 as_gui.h
  --- ossp-pkg/as/as-gui/as_gui.h	27 May 2004 21:33:31 -0000	1.79
  +++ ossp-pkg/as/as-gui/as_gui.h	27 May 2004 21:42:26 -0000	1.80
  @@ -26,7 +26,7 @@
   //  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   //  SUCH DAMAGE.
   //
  -//  titraq.h: ISO C++ interface
  +//  as_gui.h: ISO C++ interface
   //
   
   #ifndef AS_GUI_MWIN_H
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_main.cpp
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 as_main.cpp
  --- ossp-pkg/as/as-gui/as_main.cpp	20 Nov 2003 11:31:20 -0000	1.15
  +++ ossp-pkg/as/as-gui/as_main.cpp	27 May 2004 21:42:26 -0000	1.16
  @@ -26,7 +26,7 @@
   //  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   //  SUCH DAMAGE.
   //
  -//  main.cpp: ISO C++ implementation
  +//  as_main.cpp: ISO C++ implementation
   //
   
   #include <qapplication.h>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_slot.cpp
  ============================================================================
  $ cvs diff -u -r1.139 -r1.140 as_slot.cpp
  --- ossp-pkg/as/as-gui/as_slot.cpp	20 Nov 2003 11:31:20 -0000	1.139
  +++ ossp-pkg/as/as-gui/as_slot.cpp	27 May 2004 21:42:26 -0000	1.140
  @@ -26,7 +26,7 @@
   //  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   //  SUCH DAMAGE.
   //
  -//  titslot.cpp: ISO C++ implementation
  +//  as_slot.cpp: ISO C++ implementation
   //
   
   // system headers
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_table.cpp
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 as_table.cpp
  --- ossp-pkg/as/as-gui/as_table.cpp	20 Nov 2003 11:31:20 -0000	1.24
  +++ ossp-pkg/as/as-gui/as_table.cpp	27 May 2004 21:42:26 -0000	1.25
  @@ -26,7 +26,7 @@
   //  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   //  SUCH DAMAGE.
   //
  -//  titable.cpp: ISO C++ implementation
  +//  as_table.cpp: ISO C++ implementation
   //
   
   #include <qheader.h>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_table.h
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 as_table.h
  --- ossp-pkg/as/as-gui/as_table.h	20 Nov 2003 11:31:20 -0000	1.16
  +++ ossp-pkg/as/as-gui/as_table.h	27 May 2004 21:42:26 -0000	1.17
  @@ -26,7 +26,7 @@
   //  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   //  SUCH DAMAGE.
   //
  -//  titable.h: ISO C++ interface
  +//  as_table.h: ISO C++ interface
   //
   
   #ifndef TITABLE_H
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_tableitem.h
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 as_tableitem.h
  --- ossp-pkg/as/as-gui/as_tableitem.h	20 Nov 2003 11:31:20 -0000	1.6
  +++ ossp-pkg/as/as-gui/as_tableitem.h	27 May 2004 21:42:26 -0000	1.7
  @@ -26,7 +26,7 @@
   //  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   //  SUCH DAMAGE.
   //
  -//  titabitem.h: ISO C++ interface
  +//  as_tableitem.h: ISO C++ interface
   //
   
   #ifndef RTTABLEITEM_H
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 27 23:48:52 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B25C777AEF; Thu, 27 May 2004 23:48:51 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-gui/ Makefile.in README aclocal.m4 as-accou...
Message-Id: <20040527214851.B25C777AEF@mail.ossp.org>
Date: Thu, 27 May 2004 23:48:51 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   27-May-2004 23:48:51
  Branch: HEAD                             Handle: 2004052722484009

  Modified files:
    ossp-pkg/as/as-gui      Makefile.in README aclocal.m4 as-accounts.pod
                            as-events.pod as-gui.conf.pod as-gui.pod
                            as_amount.cpp as_amount.h as_assist.cpp as_const.h
                            as_crc.cpp as_crc.h as_dataop.cpp as_datedit.h
                            as_except.cpp as_except.h as_generic.cpp
                            as_generic.h as_gui.cpp as_gui.h as_gui_test.sh
                            as_helpanel.cpp as_helpanel.h as_main.cpp
                            as_numdial.cpp as_numdial.h as_panel.cpp
                            as_panel.h as_rand.cpp as_rand.h
                            as_reportpanel.cpp as_reportpanel.h as_sfile.cpp
                            as_sfile.h as_slot.cpp as_stub.idl as_table.cpp
                            as_table.h as_tableitem.h as_user.cpp as_user.h
                            as_uuid.cpp as_uuid.h configure.in
    ossp-pkg/as/as-gui/as_gfx
                            cwlogo.xpm osspicon.xpm ossplogo.xpm refresh.xpm
                            refreshd.xpm revcolour.xpm rowadd.xpm rowaddd.xpm
                            rowdel.xpm rowdeld.xpm sync.xpm

  Log:
    Modernize copyright text in source and graphic headers.

  Summary:
    Revision    Changes     Path
    1.52        +4  -4      ossp-pkg/as/as-gui/Makefile.in
    1.47        +4  -4      ossp-pkg/as/as-gui/README
    1.18        +4  -4      ossp-pkg/as/as-gui/aclocal.m4
    1.3         +4  -4      ossp-pkg/as/as-gui/as-accounts.pod
    1.4         +4  -4      ossp-pkg/as/as-gui/as-events.pod
    1.6         +4  -4      ossp-pkg/as/as-gui/as-gui.conf.pod
    1.8         +4  -4      ossp-pkg/as/as-gui/as-gui.pod
    1.9         +4  -4      ossp-pkg/as/as-gui/as_amount.cpp
    1.7         +4  -4      ossp-pkg/as/as-gui/as_amount.h
    1.118       +4  -4      ossp-pkg/as/as-gui/as_assist.cpp
    1.64        +4  -4      ossp-pkg/as/as-gui/as_const.h
    1.3         +4  -4      ossp-pkg/as/as-gui/as_crc.cpp
    1.4         +4  -4      ossp-pkg/as/as-gui/as_crc.h
    1.54        +4  -4      ossp-pkg/as/as-gui/as_dataop.cpp
    1.3         +4  -4      ossp-pkg/as/as-gui/as_datedit.h
    1.7         +4  -4      ossp-pkg/as/as-gui/as_except.cpp
    1.6         +4  -4      ossp-pkg/as/as-gui/as_except.h
    1.8         +4  -4      ossp-pkg/as/as-gui/as_generic.cpp
    1.5         +4  -4      ossp-pkg/as/as-gui/as_generic.h
    1.4         +4  -4      ossp-pkg/as/as-gui/as_gfx/cwlogo.xpm
    1.4         +4  -4      ossp-pkg/as/as-gui/as_gfx/osspicon.xpm
    1.7         +4  -4      ossp-pkg/as/as-gui/as_gfx/ossplogo.xpm
    1.4         +4  -4      ossp-pkg/as/as-gui/as_gfx/refresh.xpm
    1.4         +4  -4      ossp-pkg/as/as-gui/as_gfx/refreshd.xpm
    1.3         +4  -4      ossp-pkg/as/as-gui/as_gfx/revcolour.xpm
    1.4         +4  -4      ossp-pkg/as/as-gui/as_gfx/rowadd.xpm
    1.5         +4  -4      ossp-pkg/as/as-gui/as_gfx/rowaddd.xpm
    1.4         +4  -4      ossp-pkg/as/as-gui/as_gfx/rowdel.xpm
    1.4         +4  -4      ossp-pkg/as/as-gui/as_gfx/rowdeld.xpm
    1.4         +4  -4      ossp-pkg/as/as-gui/as_gfx/sync.xpm
    1.43        +4  -4      ossp-pkg/as/as-gui/as_gui.cpp
    1.81        +4  -4      ossp-pkg/as/as-gui/as_gui.h
    1.7         +4  -4      ossp-pkg/as/as-gui/as_gui_test.sh
    1.4         +4  -4      ossp-pkg/as/as-gui/as_helpanel.cpp
    1.4         +4  -4      ossp-pkg/as/as-gui/as_helpanel.h
    1.17        +4  -4      ossp-pkg/as/as-gui/as_main.cpp
    1.3         +4  -4      ossp-pkg/as/as-gui/as_numdial.cpp
    1.3         +4  -4      ossp-pkg/as/as-gui/as_numdial.h
    1.18        +4  -4      ossp-pkg/as/as-gui/as_panel.cpp
    1.16        +4  -4      ossp-pkg/as/as-gui/as_panel.h
    1.5         +4  -4      ossp-pkg/as/as-gui/as_rand.cpp
    1.3         +4  -4      ossp-pkg/as/as-gui/as_rand.h
    1.18        +4  -4      ossp-pkg/as/as-gui/as_reportpanel.cpp
    1.9         +4  -4      ossp-pkg/as/as-gui/as_reportpanel.h
    1.5         +4  -4      ossp-pkg/as/as-gui/as_sfile.cpp
    1.3         +4  -4      ossp-pkg/as/as-gui/as_sfile.h
    1.141       +4  -4      ossp-pkg/as/as-gui/as_slot.cpp
    1.7         +4  -4      ossp-pkg/as/as-gui/as_stub.idl
    1.26        +4  -4      ossp-pkg/as/as-gui/as_table.cpp
    1.18        +4  -4      ossp-pkg/as/as-gui/as_table.h
    1.8         +4  -4      ossp-pkg/as/as-gui/as_tableitem.h
    1.3         +4  -4      ossp-pkg/as/as-gui/as_user.cpp
    1.3         +4  -4      ossp-pkg/as/as-gui/as_user.h
    1.12        +4  -4      ossp-pkg/as/as-gui/as_uuid.cpp
    1.10        +4  -4      ossp-pkg/as/as-gui/as_uuid.h
    1.26        +4  -4      ossp-pkg/as/as-gui/configure.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.51 -r1.52 Makefile.in
  --- ossp-pkg/as/as-gui/Makefile.in	20 Nov 2003 11:31:19 -0000	1.51
  +++ ossp-pkg/as/as-gui/Makefile.in	27 May 2004 21:48:40 -0000	1.52
  @@ -1,9 +1,9 @@
   ##
   ##  OSSP asgui - Accounting system graphical user interface
  -##  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -##  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +##  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +##  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   ##
   ##  This file is part of OSSP asgui, an accounting system graphical user
   ##  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/README
  ============================================================================
  $ cvs diff -u -r1.46 -r1.47 README
  --- ossp-pkg/as/as-gui/README	20 Nov 2003 11:44:15 -0000	1.46
  +++ ossp-pkg/as/as-gui/README	27 May 2004 21:48:40 -0000	1.47
  @@ -15,10 +15,10 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   
     This file is part of OSSP asgui, an accounting system interface which
     can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 aclocal.m4
  --- ossp-pkg/as/as-gui/aclocal.m4	20 Nov 2003 11:31:20 -0000	1.17
  +++ ossp-pkg/as/as-gui/aclocal.m4	27 May 2004 21:48:40 -0000	1.18
  @@ -1,9 +1,9 @@
   ##
   ##  OSSP asgui - Accounting system graphical user interface
  -##  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -##  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +##  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +##  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   ##
   ##  This file is part of OSSP GUI, a graphical user interface
   ##  for OSSP which can be found at http://www.ossp.org/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as-accounts.pod
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 as-accounts.pod
  --- ossp-pkg/as/as-gui/as-accounts.pod	20 Nov 2003 11:31:20 -0000	1.2
  +++ ossp-pkg/as/as-gui/as-accounts.pod	27 May 2004 21:48:40 -0000	1.3
  @@ -1,9 +1,9 @@
   ##
   ##  OSSP asgui - Accounting system graphical user interface
  -##  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -##  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +##  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +##  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   ##
   ##  This file is part of OSSP asgui, an accounting system graphical user
   ##  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as-events.pod
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 as-events.pod
  --- ossp-pkg/as/as-gui/as-events.pod	20 Nov 2003 11:31:20 -0000	1.3
  +++ ossp-pkg/as/as-gui/as-events.pod	27 May 2004 21:48:40 -0000	1.4
  @@ -1,9 +1,9 @@
   ##
   ##  OSSP asgui - Accounting system graphical user interface
  -##  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -##  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +##  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +##  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   ##
   ##  This file is part of OSSP asgui, an accounting system graphical user
   ##  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as-gui.conf.pod
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 as-gui.conf.pod
  --- ossp-pkg/as/as-gui/as-gui.conf.pod	20 Nov 2003 11:31:20 -0000	1.5
  +++ ossp-pkg/as/as-gui/as-gui.conf.pod	27 May 2004 21:48:40 -0000	1.6
  @@ -1,9 +1,9 @@
   ##
   ##  OSSP asgui - Accounting system graphical user interface
  -##  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -##  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +##  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +##  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   ##
   ##  This file is part of OSSP asgui, an accounting system graphical user
   ##  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as-gui.pod
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 as-gui.pod
  --- ossp-pkg/as/as-gui/as-gui.pod	20 Nov 2003 11:31:20 -0000	1.7
  +++ ossp-pkg/as/as-gui/as-gui.pod	27 May 2004 21:48:40 -0000	1.8
  @@ -1,9 +1,9 @@
   ##
   ##  OSSP asgui - Accounting system graphical user interface
  -##  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -##  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +##  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +##  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   ##
   ##  This file is part of OSSP asgui, an accounting system graphical user
   ##  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_amount.cpp
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 as_amount.cpp
  --- ossp-pkg/as/as-gui/as_amount.cpp	27 May 2004 21:42:26 -0000	1.8
  +++ ossp-pkg/as/as-gui/as_amount.cpp	27 May 2004 21:48:40 -0000	1.9
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
  -//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +//  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_amount.h
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 as_amount.h
  --- ossp-pkg/as/as-gui/as_amount.h	27 May 2004 21:42:26 -0000	1.6
  +++ ossp-pkg/as/as-gui/as_amount.h	27 May 2004 21:48:40 -0000	1.7
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
  -//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +//  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_assist.cpp
  ============================================================================
  $ cvs diff -u -r1.117 -r1.118 as_assist.cpp
  --- ossp-pkg/as/as-gui/as_assist.cpp	27 May 2004 21:42:26 -0000	1.117
  +++ ossp-pkg/as/as-gui/as_assist.cpp	27 May 2004 21:48:40 -0000	1.118
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
  -//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +//  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_const.h
  ============================================================================
  $ cvs diff -u -r1.63 -r1.64 as_const.h
  --- ossp-pkg/as/as-gui/as_const.h	27 May 2004 21:42:26 -0000	1.63
  +++ ossp-pkg/as/as-gui/as_const.h	27 May 2004 21:48:40 -0000	1.64
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
  -//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +//  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_crc.cpp
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 as_crc.cpp
  --- ossp-pkg/as/as-gui/as_crc.cpp	20 Nov 2003 11:31:20 -0000	1.2
  +++ ossp-pkg/as/as-gui/as_crc.cpp	27 May 2004 21:48:40 -0000	1.3
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
  -//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +//  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_crc.h
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 as_crc.h
  --- ossp-pkg/as/as-gui/as_crc.h	20 Nov 2003 11:31:20 -0000	1.3
  +++ ossp-pkg/as/as-gui/as_crc.h	27 May 2004 21:48:40 -0000	1.4
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
  -//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +//  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_dataop.cpp
  ============================================================================
  $ cvs diff -u -r1.53 -r1.54 as_dataop.cpp
  --- ossp-pkg/as/as-gui/as_dataop.cpp	27 May 2004 21:42:26 -0000	1.53
  +++ ossp-pkg/as/as-gui/as_dataop.cpp	27 May 2004 21:48:41 -0000	1.54
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
  -//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +//  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_datedit.h
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 as_datedit.h
  --- ossp-pkg/as/as-gui/as_datedit.h	20 Nov 2003 11:31:20 -0000	1.2
  +++ ossp-pkg/as/as-gui/as_datedit.h	27 May 2004 21:48:41 -0000	1.3
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
  -//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +//  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_except.cpp
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 as_except.cpp
  --- ossp-pkg/as/as-gui/as_except.cpp	27 May 2004 21:42:26 -0000	1.6
  +++ ossp-pkg/as/as-gui/as_except.cpp	27 May 2004 21:48:41 -0000	1.7
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
  -//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +//  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_except.h
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 as_except.h
  --- ossp-pkg/as/as-gui/as_except.h	27 May 2004 21:42:26 -0000	1.5
  +++ ossp-pkg/as/as-gui/as_except.h	27 May 2004 21:48:41 -0000	1.6
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
  -//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +//  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_generic.cpp
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 as_generic.cpp
  --- ossp-pkg/as/as-gui/as_generic.cpp	27 May 2004 21:42:26 -0000	1.7
  +++ ossp-pkg/as/as-gui/as_generic.cpp	27 May 2004 21:48:41 -0000	1.8
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
  -//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +//  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_generic.h
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 as_generic.h
  --- ossp-pkg/as/as-gui/as_generic.h	20 Nov 2003 11:31:20 -0000	1.4
  +++ ossp-pkg/as/as-gui/as_generic.h	27 May 2004 21:48:41 -0000	1.5
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
  -//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +//  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_gfx/cwlogo.xpm
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 cwlogo.xpm
  --- ossp-pkg/as/as-gui/as_gfx/cwlogo.xpm	20 Nov 2003 11:31:48 -0000	1.3
  +++ ossp-pkg/as/as-gui/as_gfx/cwlogo.xpm	27 May 2004 21:48:49 -0000	1.4
  @@ -1,9 +1,9 @@
   /*
   **  OSSP asgui - Accounting system graphical user interface
  -**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -**  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +**  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   **
   **  This file is part of OSSP asgui, an accounting system graphical user
   **  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_gfx/osspicon.xpm
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 osspicon.xpm
  --- ossp-pkg/as/as-gui/as_gfx/osspicon.xpm	20 Nov 2003 11:31:48 -0000	1.3
  +++ ossp-pkg/as/as-gui/as_gfx/osspicon.xpm	27 May 2004 21:48:49 -0000	1.4
  @@ -1,9 +1,9 @@
   /*
   **  OSSP asgui - Accounting system graphical user interface
  -**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -**  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +**  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   **
   **  This file is part of OSSP asgui, an accounting system graphical user
   **  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_gfx/ossplogo.xpm
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ossplogo.xpm
  --- ossp-pkg/as/as-gui/as_gfx/ossplogo.xpm	20 Nov 2003 11:31:48 -0000	1.6
  +++ ossp-pkg/as/as-gui/as_gfx/ossplogo.xpm	27 May 2004 21:48:49 -0000	1.7
  @@ -1,9 +1,9 @@
   /*
   **  OSSP asgui - Accounting system graphical user interface
  -**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -**  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +**  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   **
   **  This file is part of OSSP asgui, an accounting system graphical user
   **  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_gfx/refresh.xpm
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 refresh.xpm
  --- ossp-pkg/as/as-gui/as_gfx/refresh.xpm	20 Nov 2003 11:31:48 -0000	1.3
  +++ ossp-pkg/as/as-gui/as_gfx/refresh.xpm	27 May 2004 21:48:49 -0000	1.4
  @@ -1,9 +1,9 @@
   /*
   **  OSSP asgui - Accounting system graphical user interface
  -**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -**  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +**  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   **
   **  This file is part of OSSP asgui, an accounting system graphical user
   **  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_gfx/refreshd.xpm
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 refreshd.xpm
  --- ossp-pkg/as/as-gui/as_gfx/refreshd.xpm	20 Nov 2003 11:31:48 -0000	1.3
  +++ ossp-pkg/as/as-gui/as_gfx/refreshd.xpm	27 May 2004 21:48:49 -0000	1.4
  @@ -1,9 +1,9 @@
   /*
   **  OSSP asgui - Accounting system graphical user interface
  -**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -**  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +**  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   **
   **  This file is part of OSSP asgui, an accounting system graphical user
   **  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_gfx/revcolour.xpm
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 revcolour.xpm
  --- ossp-pkg/as/as-gui/as_gfx/revcolour.xpm	20 Nov 2003 11:31:48 -0000	1.2
  +++ ossp-pkg/as/as-gui/as_gfx/revcolour.xpm	27 May 2004 21:48:49 -0000	1.3
  @@ -1,9 +1,9 @@
   /*
   **  OSSP asgui - Accounting system graphical user interface
  -**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -**  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +**  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   **
   **  This file is part of OSSP asgui, an accounting system graphical user
   **  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_gfx/rowadd.xpm
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 rowadd.xpm
  --- ossp-pkg/as/as-gui/as_gfx/rowadd.xpm	20 Nov 2003 11:31:48 -0000	1.3
  +++ ossp-pkg/as/as-gui/as_gfx/rowadd.xpm	27 May 2004 21:48:49 -0000	1.4
  @@ -1,9 +1,9 @@
   /*
   **  OSSP asgui - Accounting system graphical user interface
  -**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -**  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +**  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   **
   **  This file is part of OSSP asgui, an accounting system graphical user
   **  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_gfx/rowaddd.xpm
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 rowaddd.xpm
  --- ossp-pkg/as/as-gui/as_gfx/rowaddd.xpm	20 Nov 2003 11:31:48 -0000	1.4
  +++ ossp-pkg/as/as-gui/as_gfx/rowaddd.xpm	27 May 2004 21:48:49 -0000	1.5
  @@ -1,9 +1,9 @@
   /*
   **  OSSP asgui - Accounting system graphical user interface
  -**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -**  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +**  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   **
   **  This file is part of OSSP asgui, an accounting system graphical user
   **  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_gfx/rowdel.xpm
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 rowdel.xpm
  --- ossp-pkg/as/as-gui/as_gfx/rowdel.xpm	20 Nov 2003 11:31:48 -0000	1.3
  +++ ossp-pkg/as/as-gui/as_gfx/rowdel.xpm	27 May 2004 21:48:49 -0000	1.4
  @@ -1,9 +1,9 @@
   /*
   **  OSSP asgui - Accounting system graphical user interface
  -**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -**  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +**  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   **
   **  This file is part of OSSP asgui, an accounting system graphical user
   **  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_gfx/rowdeld.xpm
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 rowdeld.xpm
  --- ossp-pkg/as/as-gui/as_gfx/rowdeld.xpm	20 Nov 2003 11:31:48 -0000	1.3
  +++ ossp-pkg/as/as-gui/as_gfx/rowdeld.xpm	27 May 2004 21:48:49 -0000	1.4
  @@ -1,9 +1,9 @@
   /*
   **  OSSP asgui - Accounting system graphical user interface
  -**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -**  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +**  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   **
   **  This file is part of OSSP asgui, an accounting system graphical user
   **  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_gfx/sync.xpm
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 sync.xpm
  --- ossp-pkg/as/as-gui/as_gfx/sync.xpm	20 Nov 2003 11:31:48 -0000	1.3
  +++ ossp-pkg/as/as-gui/as_gfx/sync.xpm	27 May 2004 21:48:49 -0000	1.4
  @@ -1,9 +1,9 @@
   /*
   **  OSSP asgui - Accounting system graphical user interface
  -**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -**  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +**  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   **
   **  This file is part of OSSP asgui, an accounting system graphical user
   **  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_gui.cpp
  ============================================================================
  $ cvs diff -u -r1.42 -r1.43 as_gui.cpp
  --- ossp-pkg/as/as-gui/as_gui.cpp	27 May 2004 21:42:26 -0000	1.42
  +++ ossp-pkg/as/as-gui/as_gui.cpp	27 May 2004 21:48:41 -0000	1.43
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
  -//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +//  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_gui.h
  ============================================================================
  $ cvs diff -u -r1.80 -r1.81 as_gui.h
  --- ossp-pkg/as/as-gui/as_gui.h	27 May 2004 21:42:26 -0000	1.80
  +++ ossp-pkg/as/as-gui/as_gui.h	27 May 2004 21:48:41 -0000	1.81
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
  -//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +//  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_gui_test.sh
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 as_gui_test.sh
  --- ossp-pkg/as/as-gui/as_gui_test.sh	20 Nov 2003 11:31:20 -0000	1.6
  +++ ossp-pkg/as/as-gui/as_gui_test.sh	27 May 2004 21:48:41 -0000	1.7
  @@ -1,9 +1,9 @@
   ##
   ##  OSSP asgui - Accounting system graphical user interface
  -##  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -##  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +##  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +##  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   ##
   ##  This file is part of OSSP asgui, an accounting system graphical user
   ##  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_helpanel.cpp
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 as_helpanel.cpp
  --- ossp-pkg/as/as-gui/as_helpanel.cpp	20 Nov 2003 11:31:20 -0000	1.3
  +++ ossp-pkg/as/as-gui/as_helpanel.cpp	27 May 2004 21:48:41 -0000	1.4
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
  -//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +//  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_helpanel.h
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 as_helpanel.h
  --- ossp-pkg/as/as-gui/as_helpanel.h	20 Nov 2003 11:31:20 -0000	1.3
  +++ ossp-pkg/as/as-gui/as_helpanel.h	27 May 2004 21:48:41 -0000	1.4
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
  -//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +//  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_main.cpp
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 as_main.cpp
  --- ossp-pkg/as/as-gui/as_main.cpp	27 May 2004 21:42:26 -0000	1.16
  +++ ossp-pkg/as/as-gui/as_main.cpp	27 May 2004 21:48:41 -0000	1.17
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
  -//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +//  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_numdial.cpp
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 as_numdial.cpp
  --- ossp-pkg/as/as-gui/as_numdial.cpp	20 Nov 2003 11:31:20 -0000	1.2
  +++ ossp-pkg/as/as-gui/as_numdial.cpp	27 May 2004 21:48:41 -0000	1.3
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
  -//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +//  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_numdial.h
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 as_numdial.h
  --- ossp-pkg/as/as-gui/as_numdial.h	20 Nov 2003 11:31:20 -0000	1.2
  +++ ossp-pkg/as/as-gui/as_numdial.h	27 May 2004 21:48:41 -0000	1.3
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
  -//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +//  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_panel.cpp
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 as_panel.cpp
  --- ossp-pkg/as/as-gui/as_panel.cpp	20 Nov 2003 11:31:20 -0000	1.17
  +++ ossp-pkg/as/as-gui/as_panel.cpp	27 May 2004 21:48:41 -0000	1.18
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
  -//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +//  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_panel.h
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 as_panel.h
  --- ossp-pkg/as/as-gui/as_panel.h	20 Nov 2003 11:31:20 -0000	1.15
  +++ ossp-pkg/as/as-gui/as_panel.h	27 May 2004 21:48:41 -0000	1.16
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
  -//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +//  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_rand.cpp
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 as_rand.cpp
  --- ossp-pkg/as/as-gui/as_rand.cpp	20 Nov 2003 11:31:20 -0000	1.4
  +++ ossp-pkg/as/as-gui/as_rand.cpp	27 May 2004 21:48:41 -0000	1.5
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
  -//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +//  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_rand.h
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 as_rand.h
  --- ossp-pkg/as/as-gui/as_rand.h	20 Nov 2003 11:31:20 -0000	1.2
  +++ ossp-pkg/as/as-gui/as_rand.h	27 May 2004 21:48:41 -0000	1.3
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
  -//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +//  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_reportpanel.cpp
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 as_reportpanel.cpp
  --- ossp-pkg/as/as-gui/as_reportpanel.cpp	1 Dec 2003 17:43:57 -0000	1.17
  +++ ossp-pkg/as/as-gui/as_reportpanel.cpp	27 May 2004 21:48:41 -0000	1.18
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
  -//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +//  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_reportpanel.h
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 as_reportpanel.h
  --- ossp-pkg/as/as-gui/as_reportpanel.h	20 Nov 2003 11:31:20 -0000	1.8
  +++ ossp-pkg/as/as-gui/as_reportpanel.h	27 May 2004 21:48:41 -0000	1.9
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
  -//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +//  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_sfile.cpp
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 as_sfile.cpp
  --- ossp-pkg/as/as-gui/as_sfile.cpp	20 Nov 2003 11:31:20 -0000	1.4
  +++ ossp-pkg/as/as-gui/as_sfile.cpp	27 May 2004 21:48:41 -0000	1.5
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
  -//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +//  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_sfile.h
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 as_sfile.h
  --- ossp-pkg/as/as-gui/as_sfile.h	20 Nov 2003 11:31:20 -0000	1.2
  +++ ossp-pkg/as/as-gui/as_sfile.h	27 May 2004 21:48:41 -0000	1.3
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
  -//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +//  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_slot.cpp
  ============================================================================
  $ cvs diff -u -r1.140 -r1.141 as_slot.cpp
  --- ossp-pkg/as/as-gui/as_slot.cpp	27 May 2004 21:42:26 -0000	1.140
  +++ ossp-pkg/as/as-gui/as_slot.cpp	27 May 2004 21:48:41 -0000	1.141
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
  -//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +//  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_stub.idl
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 as_stub.idl
  --- ossp-pkg/as/as-gui/as_stub.idl	20 Nov 2003 11:31:20 -0000	1.6
  +++ ossp-pkg/as/as-gui/as_stub.idl	27 May 2004 21:48:41 -0000	1.7
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
  -//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +//  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_table.cpp
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 as_table.cpp
  --- ossp-pkg/as/as-gui/as_table.cpp	27 May 2004 21:42:26 -0000	1.25
  +++ ossp-pkg/as/as-gui/as_table.cpp	27 May 2004 21:48:41 -0000	1.26
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
  -//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +//  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_table.h
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 as_table.h
  --- ossp-pkg/as/as-gui/as_table.h	27 May 2004 21:42:26 -0000	1.17
  +++ ossp-pkg/as/as-gui/as_table.h	27 May 2004 21:48:41 -0000	1.18
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
  -//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +//  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_tableitem.h
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 as_tableitem.h
  --- ossp-pkg/as/as-gui/as_tableitem.h	27 May 2004 21:42:26 -0000	1.7
  +++ ossp-pkg/as/as-gui/as_tableitem.h	27 May 2004 21:48:41 -0000	1.8
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
  -//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +//  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_user.cpp
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 as_user.cpp
  --- ossp-pkg/as/as-gui/as_user.cpp	20 Nov 2003 11:31:20 -0000	1.2
  +++ ossp-pkg/as/as-gui/as_user.cpp	27 May 2004 21:48:41 -0000	1.3
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
  -//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +//  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_user.h
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 as_user.h
  --- ossp-pkg/as/as-gui/as_user.h	20 Nov 2003 11:31:20 -0000	1.2
  +++ ossp-pkg/as/as-gui/as_user.h	27 May 2004 21:48:41 -0000	1.3
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
  -//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +//  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_uuid.cpp
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 as_uuid.cpp
  --- ossp-pkg/as/as-gui/as_uuid.cpp	20 Nov 2003 11:31:20 -0000	1.11
  +++ ossp-pkg/as/as-gui/as_uuid.cpp	27 May 2004 21:48:41 -0000	1.12
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
  -//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +//  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_uuid.h
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 as_uuid.h
  --- ossp-pkg/as/as-gui/as_uuid.h	20 Nov 2003 11:31:20 -0000	1.9
  +++ ossp-pkg/as/as-gui/as_uuid.h	27 May 2004 21:48:41 -0000	1.10
  @@ -1,9 +1,9 @@
   //
   //  OSSP asgui - Accounting system graphical user interface
  -//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -//  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +//  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +//  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +//  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +//  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   //
   //  This file is part of OSSP asgui, an accounting system graphical user
   //  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/configure.in
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 configure.in
  --- ossp-pkg/as/as-gui/configure.in	27 May 2004 21:33:31 -0000	1.25
  +++ ossp-pkg/as/as-gui/configure.in	27 May 2004 21:48:41 -0000	1.26
  @@ -1,9 +1,9 @@
   ##
   ##  OSSP asgui - Accounting system graphical user interface
  -##  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
  -##  Copyright (c) 2002-2003 Cable & Wireless Telecommunications Services GmbH
  +##  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com>
  +##  Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH
   ##
   ##  This file is part of OSSP asgui, an accounting system graphical user
   ##  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
  @@ .

From ossp-cvs-owner@ossp.org  Fri May 28 00:02:30 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DD7FF77AAA; Fri, 28 May 2004 00:02:29 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-gui/ as_gui.h
Message-Id: <20040527220229.DD7FF77AAA@mail.ossp.org>
Date: Fri, 28 May 2004 00:02:29 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   28-May-2004 00:02:29
  Branch: HEAD                             Handle: 2004052723022900

  Modified files:
    ossp-pkg/as/as-gui      as_gui.h

  Log:
    The type representing 64 bit variables on most architectures is 'long long',
    and because this is not specified in ISO C** (14882) remove all references.

  Summary:
    Revision    Changes     Path
    1.82        +6  -23     ossp-pkg/as/as-gui/as_gui.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_gui.h
  ============================================================================
  $ cvs diff -u -r1.81 -r1.82 as_gui.h
  --- ossp-pkg/as/as-gui/as_gui.h	27 May 2004 21:48:41 -0000	1.81
  +++ ossp-pkg/as/as-gui/as_gui.h	27 May 2004 22:02:29 -0000	1.82
  @@ -92,40 +92,23 @@
   ?==Error: Undefined 32 bit type
   #endif // U32
   
  -#if (SIZEOF_SHORT == 8)
  -typedef unsigned short       U64;
  -#elif (SIZEOF_INT == 8)
  -typedef unsigned int         U64;
  -#elif (SIZEOF_LONG == 8)
  -typedef unsigned long        U64;
  -#else
  -?==Error: Undefined 64 bit type
  -#endif // U64
  -
   #else // HAVE_CONFIG_H (not defined)
   typedef unsigned char        U8;
  -#if (4 == 8)
  -typedef unsigned int         U64;
  -#elif (4 == 8)
  -typedef unsigned long        U64;
  -#else
  -?==Error: Undefined 64 bit type
  -#endif
   
  -#if (4 == 2)
  -typedef	unsigned int         U16;
  -#elif (2 == 2)
  +#if (2 == 2)
   typedef	unsigned short       U16;
  +#elif (4 == 2)
  +typedef	unsigned int         U16;
   #else
   ?==Error: Undefined 16 bit type
   #endif
   
  -#if (4 == 4)
  +#if (2 == 4)
  +typedef	unsigned short       U32;
  +#elif (4 == 4)
   typedef	unsigned int         U32;
   #elif (4 == 4)
   typedef	unsigned long        U32;
  -#elif (2 == 4)
  -typedef	unsigned short       U32;
   #else
   ?== Error: Undefined 32 bit type
   #endif
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jun  4 14:54:51 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0876877B00; Fri,  4 Jun 2004 14:54:50 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog sh.platform
Message-Id: <20040604125450.0876877B00@mail.ossp.org>
Date: Fri,  4 Jun 2004 14:54:50 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Jun-2004 14:54:50
  Branch: HEAD                             Handle: 2004060413545000

  Modified files:
    ossp-pkg/shtool         ChangeLog sh.platform

  Log:
    Fix concise platform id generation under HP-UX.

  Summary:
    Revision    Changes     Path
    1.203       +5  -0      ossp-pkg/shtool/ChangeLog
    1.7         +1  -1      ossp-pkg/shtool/sh.platform
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.202 -r1.203 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	8 May 2004 19:10:41 -0000	1.202
  +++ ossp-pkg/shtool/ChangeLog	4 Jun 2004 12:54:50 -0000	1.203
  @@ -9,6 +9,11 @@
   
    ChangeLog
   
  + Changes between 2.0b3 and 2.0b4 (08-May-2004 to xx-May-2004):
  +
  +   *) Fix concise platform id generation under HP-UX.
  +      [Ralf S. Engelschall]
  +
    Changes between 2.0b2 and 2.0b3 (07-Apr-2004 to 08-May-2004):
   
      *) Add option "-q" to "shtool subst" for suppressing a new warning on
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.platform
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 sh.platform
  --- ossp-pkg/shtool/sh.platform	21 Apr 2004 15:07:41 -0000	1.6
  +++ ossp-pkg/shtool/sh.platform	4 Jun 2004 12:54:50 -0000	1.7
  @@ -363,7 +363,7 @@
           AC="${AP}"
           #   determine system
           v=`echo "${UNAME_RELEASE}" | sed -e 's;^[^0-9]*;;'`
  -        ST="[HP ]<HP>-<UX> ${v}"
  +        ST="[HP ]<HP>-<UX ${v}>"
           SP="${ST}"
           case "${v}" in
               10.*   ) SC="SVR4.2" ;;
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jun  4 18:28:40 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3323D77B00; Fri,  4 Jun 2004 18:28:40 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-doc/ accounts.txt
Message-Id: <20040604162840.3323D77B00@mail.ossp.org>
Date: Fri,  4 Jun 2004 18:28:40 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   04-Jun-2004 18:28:40
  Branch: HEAD                             Handle: 2004060417283900

  Modified files:
    ossp-pkg/as/as-doc      accounts.txt

  Log:
    finally safely correct name from dns to ipadm (because I don't think anybody
    else has logged under this account)

  Summary:
    Revision    Changes     Path
    1.48        +8  -7      ossp-pkg/as/as-doc/accounts.txt
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-doc/accounts.txt
  ============================================================================
  $ cvs diff -u -r1.47 -r1.48 accounts.txt
  --- ossp-pkg/as/as-doc/accounts.txt	27 May 2004 09:13:27 -0000	1.47
  +++ ossp-pkg/as/as-doc/accounts.txt	4 Jun 2004 16:28:39 -0000	1.48
  @@ -89,13 +89,14 @@
   R /de/is/com/server/phaseout              # [I] Generic Servers, Service Phaseout
   R /de/is/com/server/migration             # [I] Generic Servers, Service Migration
   
  -#   DNS Servers
  -R /de/is/com/dns                          # [I] DNS Servers
  -R /de/is/com/dns/projmanage               # [I] DNS Servers, Project Management
  -R /de/is/com/dns/development              # [I] DNS Servers, Development
  -R /de/is/com/dns/installation             # [I] DNS Servers, Installation
  -R /de/is/com/dns/maintenance              # [I] DNS Servers, Maintenance
  -R /de/is/com/dns/security                 # [I] DNS Servers, Security
  +#   IPAdmin Servers
  +R /de/is/com/ipadm                          # [I] IPAdmin Servers
  +R /de/is/com/ipadm/projmanage               # [I] IPAdmin Servers, Project Management
  +R /de/is/com/ipadm/documentation            # [I] IPAdmin Servers, Documentation
  +R /de/is/com/ipadm/development              # [I] IPAdmin Servers, Development
  +R /de/is/com/ipadm/installation             # [I] IPAdmin Servers, Installation
  +R /de/is/com/ipadm/maintenance              # [I] IPAdmin Servers, Maintenance
  +R /de/is/com/ipadm/security                 # [I] IPAdmin Servers, Security
   
   #   GNOC Servers
   R /de/is/com/gnoc                         # [I] GNOC Servers
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jun  7 17:13:22 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id ACEBB77B4E; Mon,  7 Jun 2004 17:13:21 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog sh.platform
Message-Id: <20040607151321.ACEBB77B4E@mail.ossp.org>
Date: Mon,  7 Jun 2004 17:13:21 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Jun-2004 17:13:21
  Branch: HEAD                             Handle: 2004060716132001

  Modified files:
    ossp-pkg/shtool         ChangeLog sh.platform

  Log:
    Fix platform id generation under NetBSD.

  Summary:
    Revision    Changes     Path
    1.204       +3  -0      ossp-pkg/shtool/ChangeLog
    1.8         +2  -2      ossp-pkg/shtool/sh.platform
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.203 -r1.204 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	4 Jun 2004 12:54:50 -0000	1.203
  +++ ossp-pkg/shtool/ChangeLog	7 Jun 2004 15:13:20 -0000	1.204
  @@ -11,6 +11,9 @@
   
    Changes between 2.0b3 and 2.0b4 (08-May-2004 to xx-May-2004):
   
  +   *) Fix platform id generation under NetBSD.
  +      [Ralf S. Engelschall]
  +
      *) Fix concise platform id generation under HP-UX.
         [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.platform
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 sh.platform
  --- ossp-pkg/shtool/sh.platform	4 Jun 2004 12:54:50 -0000	1.7
  +++ ossp-pkg/shtool/sh.platform	7 Jun 2004 15:13:21 -0000	1.8
  @@ -156,7 +156,7 @@
           esac
           AC="${AP}"
           #   determine system
  -        r=`echo "${UNAME_RELEASE}" | sed -e 's/\(-.*\)$/[\1]/'`
  +        r=`echo "${UNAME_RELEASE}" | sed -e 's/\([-_].*\)$/[\1]/'`
           ST="NetBSD ${r}"
           SP="${ST}"
           case "${r}" in
  @@ -175,7 +175,7 @@
           esac
           AC="${AP}"
           #   determine system
  -        r=`echo "${UNAME_RELEASE}" | sed -e 's/\(-.*\)$/[\1]/'`
  +        r=`echo "${UNAME_RELEASE}" | sed -e 's/\([-_].*\)$/[\1]/'`
           ST="OpenBSD ${r}"
           SP="${ST}"
           SC="4.4BSD"
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jun  9 21:17:40 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 82D0D76310; Wed,  9 Jun 2004 21:17:40 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid.c
Message-Id: <20040609191740.82D0D76310@mail.ossp.org>
Date: Wed,  9 Jun 2004 21:17:40 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Jun-2004 21:17:40
  Branch: HEAD                             Handle: 2004060920173900

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid.c

  Log:
    Remove some warnings occurring under GCC 3.5

  Summary:
    Revision    Changes     Path
    1.48        +5  -0      ossp-pkg/uuid/ChangeLog
    1.48        +3  -3      ossp-pkg/uuid/uuid.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.47 -r1.48 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	17 Feb 2004 09:23:06 -0000	1.47
  +++ ossp-pkg/uuid/ChangeLog	9 Jun 2004 19:17:39 -0000	1.48
  @@ -11,6 +11,11 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 1.0.0 and 1.0.1 (16-Feb-2004 to xx-Jun-2004)
  +
  +   o Remove some warnings occurring under GCC 3.5
  +     [Ralf S. Engelschall]
  +
     Changes between 0.9.7 and 1.0.0 (13-Feb-2004 to 16-Feb-2004)
   
      o Replace remaining (old) UUID_VERSIONX names with UUID_MAKE_VX
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.47 -r1.48 uuid.c
  --- ossp-pkg/uuid/uuid.c	17 Feb 2004 09:23:06 -0000	1.47
  +++ ossp-pkg/uuid/uuid.c	9 Jun 2004 19:17:39 -0000	1.48
  @@ -472,7 +472,7 @@
       time_t t_sec;
       char t_buf[19+1]; /* YYYY-MM-DD HH:MM:SS */
       struct tm *tm;
  -    unsigned int i;
  +    int i;
   
       /* sanity check argument(s) */
       if (uuid == NULL || data_ptr == NULL)
  @@ -505,7 +505,7 @@
                   break;
               }
           }
  -        for (i = 0; i < sizeof(uuid_dectab_variant)/sizeof(uuid_dectab_variant[0]); i++) {
  +        for (i = 0; i < (int)(sizeof(uuid_dectab_variant)/sizeof(uuid_dectab_variant[0])); i++) {
               if (uuid_dectab_variant[i].num == tmp8) {
                   variant = uuid_dectab_variant[i].desc;
                   break;
  @@ -520,7 +520,7 @@
           version = "n.a.";
       else {
           version = "unknown";
  -        for (i = 0; i < sizeof(uuid_dectab_version)/sizeof(uuid_dectab_version[0]); i++) {
  +        for (i = 0; i < (int)(sizeof(uuid_dectab_version)/sizeof(uuid_dectab_version[0])); i++) {
               if (uuid_dectab_version[i].num == (int)tmp16) {
                   version = uuid_dectab_version[i].desc;
                   break;
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jun  9 21:18:26 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0A4717635C; Wed,  9 Jun 2004 21:18:26 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.pod
Message-Id: <20040609191826.0A4717635C@mail.ossp.org>
Date: Wed,  9 Jun 2004 21:18:26 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Jun-2004 21:18:25
  Branch: HEAD                             Handle: 2004060920182500

  Modified files:
    ossp-pkg/uuid           uuid.pod

  Log:
    upgrade to latest UUID draft

  Summary:
    Revision    Changes     Path
    1.17        +1  -1      ossp-pkg/uuid/uuid.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	16 Feb 2004 09:41:51 -0000	1.16
  +++ ossp-pkg/uuid/uuid.pod	9 Jun 2004 19:18:25 -0000	1.17
  @@ -415,7 +415,7 @@
   P. Leach, M. Mealling, R. Salz,
   IETF Internet Draft draft-mealling-uuid-urn-02,
   January 2004, 31 pages,
  -http://www.ietf.org/internet-drafts/draft-mealling-uuid-urn-02.txt
  +http://www.ietf.org/internet-drafts/draft-mealling-uuid-urn-03.txt
   
   =item
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jun  9 21:19:33 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 96F7776310; Wed,  9 Jun 2004 21:19:33 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog devtool.conf
Message-Id: <20040609191933.96F7776310@mail.ossp.org>
Date: Wed,  9 Jun 2004 21:19:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Jun-2004 21:19:33
  Branch: HEAD                             Handle: 2004060920193300

  Modified files:
    ossp-pkg/uuid           ChangeLog devtool.conf

  Log:
    Upgrade build environment to GNU libtool 1.5.6

  Summary:
    Revision    Changes     Path
    1.49        +3  -0      ossp-pkg/uuid/ChangeLog
    1.7         +1  -1      ossp-pkg/uuid/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.48 -r1.49 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	9 Jun 2004 19:17:39 -0000	1.48
  +++ ossp-pkg/uuid/ChangeLog	9 Jun 2004 19:19:33 -0000	1.49
  @@ -13,6 +13,9 @@
   
     Changes between 1.0.0 and 1.0.1 (16-Feb-2004 to xx-Jun-2004)
   
  +   o Upgrade build environment to GNU libtool 1.5.6
  +     [Ralf S. Engelschall]
  +
      o Remove some warnings occurring under GCC 3.5
        [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 devtool.conf
  --- ossp-pkg/uuid/devtool.conf	11 Feb 2004 14:45:10 -0000	1.6
  +++ ossp-pkg/uuid/devtool.conf	9 Jun 2004 19:19:33 -0000	1.7
  @@ -4,7 +4,7 @@
   
   %autogen
       @autogen shtool   1.6.2 "1.6.*" all
  -    @autogen libtool  1.5.2 "1.5*"
  +    @autogen libtool  1.5.6 "1.5*"
       @autogen autoconf 2.59  "2.5[3-9]*"
   
   %autoclean
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jun 11 12:30:36 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BDD6376491; Fri, 11 Jun 2004 12:30:35 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ ChangeLog sa.c
Message-Id: <20040611103035.BDD6376491@mail.ossp.org>
Date: Fri, 11 Jun 2004 12:30:35 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Jun-2004 12:30:35
  Branch: HEAD                             Handle: -NONE-

  Modified files:
    ossp-pkg/sa             ChangeLog sa.c

  Log:
    Fix timeout implementation related to SO_RCVTIMEO/SO_SNDTIMEO.

  Summary:
    Revision    Changes     Path
    1.36        +0  -0      ossp-pkg/sa/ChangeLog
    1.83        +0  -0      ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 ChangeLog
  --- ossp-pkg/sa/ChangeLog	2 Apr 2004 18:50:06 -0000	1.35
  +++ ossp-pkg/sa/ChangeLog	11 Jun 2004 10:30:34 -0000	1.36
  @@ -11,6 +11,11 @@
     This is a list of all changes to OSSP sa.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 1.2.0 and 1.2.1 (02-Apr-2003 to 11-Jun-2004)
  +
  +   o Fix timeout implementation related to SO_RCVTIMEO/SO_SNDTIMEO.
  +     [Ralf S. Engelschall, Thomas Lotterer]
  +
     Changes between 1.1.0 and 1.2.0 (10-Nov-2003 to 02-Apr-2004)
   
      o In sa_connect() also select(2) on the socket if EINTR was
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.c
  ============================================================================
  $ cvs diff -u -r1.82 -r1.83 sa.c
  --- ossp-pkg/sa/sa.c	2 Apr 2004 18:49:42 -0000	1.82
  +++ ossp-pkg/sa/sa.c	11 Jun 2004 10:30:34 -0000	1.83
  @@ -940,13 +940,13 @@
           return SA_OK;
   
   #if defined(SO_RCVTIMEO) && defined(USE_SO_RCVTIMEO) && defined(SO_SNDTIMEO) && defined(USE_SO_SNDTIMEO)
  -    if (SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_READ])) {
  +    if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_READ])) {
           if (setsockopt(sa->fdSocket, SOL_SOCKET, SO_RCVTIMEO,
                          (const void *)(&sa->tvTimeout[SA_TIMEOUT_READ]),
                          (socklen_t)(sizeof(sa->tvTimeout[SA_TIMEOUT_READ]))) < 0)
               return SA_RC(SA_ERR_SYS);
       }
  -    if (SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_WRITE])) {
  +    if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_WRITE])) {
           if (setsockopt(sa->fdSocket, SOL_SOCKET, SO_SNDTIMEO,
                          (const void *)(&sa->tvTimeout[SA_TIMEOUT_WRITE]),
                          (socklen_t)(sizeof(sa->tvTimeout[SA_TIMEOUT_WRITE]))) < 0)
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jun 11 12:32:55 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 014FE7643E; Fri, 11 Jun 2004 12:32:54 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ ChangeLog README VERSION devtool.conf
Message-Id: <20040611103254.014FE7643E@mail.ossp.org>
Date: Fri, 11 Jun 2004 12:32:54 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Jun-2004 12:32:54
  Branch: HEAD                             Handle: -NONE-

  Modified files:
    ossp-pkg/sa             ChangeLog README VERSION devtool.conf

  Log:
    prepare for release

  Summary:
    Revision    Changes     Path
    1.37        +0  -0      ossp-pkg/sa/ChangeLog
    1.20        +0  -0      ossp-pkg/sa/README
    1.16        +0  -0      ossp-pkg/sa/VERSION
    1.22        +0  -0      ossp-pkg/sa/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.36 -r1.37 ChangeLog
  --- ossp-pkg/sa/ChangeLog	11 Jun 2004 10:30:34 -0000	1.36
  +++ ossp-pkg/sa/ChangeLog	11 Jun 2004 10:32:54 -0000	1.37
  @@ -14,7 +14,11 @@
     Changes between 1.2.0 and 1.2.1 (02-Apr-2003 to 11-Jun-2004)
   
      o Fix timeout implementation related to SO_RCVTIMEO/SO_SNDTIMEO.
  -     [Ralf S. Engelschall, Thomas Lotterer]
  +     [Ralf S. Engelschall <rse@engelschall.com>,
  +      Thomas Lotterer <thomas@lotterer.net>]
  +
  +   o Upgrade build environment to GNU libtool 1.5.6
  +     [Ralf S. Engelschall <rse@engelschall.com>]
   
     Changes between 1.1.0 and 1.2.0 (10-Nov-2003 to 02-Apr-2004)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/README
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 README
  --- ossp-pkg/sa/README	2 Apr 2004 18:21:07 -0000	1.19
  +++ ossp-pkg/sa/README	11 Jun 2004 10:32:54 -0000	1.20
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/\__,_|
   
     OSSP sa - Socket Abstraction
  -  Version 1.2.0 (02-Apr-2004)
  +  Version 1.2.1 (11-Jun-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/VERSION
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 VERSION
  --- ossp-pkg/sa/VERSION	2 Apr 2004 17:13:10 -0000	1.15
  +++ ossp-pkg/sa/VERSION	11 Jun 2004 10:32:54 -0000	1.16
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP sa (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP sa, Version 1.2.0 (02-Apr-2004)
  +  This is OSSP sa, Version 1.2.1 (11-Jun-2004)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 devtool.conf
  --- ossp-pkg/sa/devtool.conf	19 Mar 2004 14:55:49 -0000	1.21
  +++ ossp-pkg/sa/devtool.conf	11 Jun 2004 10:32:54 -0000	1.22
  @@ -4,7 +4,7 @@
   
   %autogen
       @autogen shtool   1.6.2 "1.6.*" all
  -    @autogen libtool  1.5.2 "1.5*"
  +    @autogen libtool  1.5.6 "1.5*"
       @autogen autoconf 2.59  "2.5[4-9]*"
   
   %autoclean
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jun 11 12:46:14 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 294C676400; Fri, 11 Jun 2004 12:46:14 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20040611104614.294C676400@mail.ossp.org>
Date: Fri, 11 Jun 2004 12:46:14 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   11-Jun-2004 12:46:13
  Branch: HEAD                             Handle: -NONE-

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/sa     index.wml

  Log:
    release OSSP sa 1.2.1

  Summary:
    Revision    Changes     Path
    1.86        +0  -0      ossp-web/new/news.txt
    1.77        +0  -0      ossp-web/pkg/lib/index.wml
    1.16        +0  -0      ossp-web/pkg/lib/sa/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.85 -r1.86 news.txt
  --- ossp-web/new/news.txt	10 May 2004 18:29:59 -0000	1.85
  +++ ossp-web/new/news.txt	11 Jun 2004 10:46:11 -0000	1.86
  @@ -1,3 +1,4 @@
  +11-Jun-2004: Released L<OSSP sa> 1.2.1
   10-May-2004: Released T<OSSP shiela> 1.1.2
   10-May-2004: Released T<OSSP shiela> 1.1.1
   07-May-2004: Released T<OSSP lmtp2nntp> 1.3a3
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.76 -r1.77 index.wml
  --- ossp-web/pkg/lib/index.wml	26 Apr 2004 13:21:17 -0000	1.76
  +++ ossp-web/pkg/lib/index.wml	11 Jun 2004 10:46:12 -0000	1.77
  @@ -24,7 +24,7 @@
   			done=100 stable=1.0.4 unstable=none>
     <pkg_item name="sa" longname="OSSP sa" type="lib"
               desc="Socket Abstraction"
  -			done=100 stable=1.2.0 unstable=none>
  +			done=100 stable=1.2.1 unstable=none>
     <pkg_item name="fsl" longname="OSSP fsl" type="lib"
               desc="Faked/Flexible Syslog"
   			done=100 stable=1.5.0 unstable=none>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/sa/index.wml
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 index.wml
  --- ossp-web/pkg/lib/sa/index.wml	2 Apr 2004 18:56:09 -0000	1.15
  +++ ossp-web/pkg/lib/sa/index.wml	11 Jun 2004 10:46:13 -0000	1.16
  @@ -110,7 +110,7 @@
   
   <pkg_status
       name="sa" assign="rse"
  -    stable="1.2.0"    stable_date="02-Apr-2004"
  +    stable="1.2.1"    stable_date="11-Jun-2004"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -121,7 +121,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/sa/
       directory=$(FTP_ROOT_DIR)/pkg/lib/sa/
       files="sa-*.tar.gz" 
  -	stable="sa-1\.2\.0\.tar\.gz" unstable="sa-SNAP.*\.tar.gz">
  +	stable="sa-1\.2\.1\.tar\.gz" unstable="sa-SNAP.*\.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jun 15 14:01:50 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 44DFD76482; Tue, 15 Jun 2004 14:01:50 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ devtool.conf
Message-Id: <20040615120150.44DFD76482@mail.ossp.org>
Date: Tue, 15 Jun 2004 14:01:50 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   15-Jun-2004 14:01:50
  Branch: HEAD                             Handle: -NONE-

  Modified files:
    ossp-pkg/lmtp2nntp      devtool.conf

  Log:
    add update capability to %checkout; support checkout/update to
    specific tag; use tagged releases for OSSP ex, str, l2, sa, var, val;
    use HEAD of OSSP popt, pcre, tai; update to recently corrected
    SA_1_2_1

  Summary:
    Revision    Changes     Path
    1.18        +0  -0      ossp-pkg/lmtp2nntp/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 devtool.conf
  --- ossp-pkg/lmtp2nntp/devtool.conf	19 Mar 2004 14:55:46 -0000	1.17
  +++ ossp-pkg/lmtp2nntp/devtool.conf	15 Jun 2004 12:01:49 -0000	1.18
  @@ -3,9 +3,32 @@
   ##
   
   %checkout
  +    BRANCH_EX="EX_1_0_4"
  +    BRANCH_STR="STR_0_9_9"
  +    BRANCH_L2="L2_0_9_8"
  +    BRANCH_SA="SA_1_2_1"
  +    BRANCH_VAR="VAR_1_1_0"
  +    BRANCH_VAL="VAL_0_9_2"
  +    BRANCH_POPT=""
  +    BRANCH_PCRE=""
  +    BRANCH_TAI=""
       for name in ex str l2 sa var val popt pcre tai; do
           echo "===> lib_${name} (cvs co)"
  -        cvs co -d lib_${name} ${name}
  +        release=BRANCH_`echo ${name} | tr [a-z] [A-Z]`
  +        release=`eval echo \\$${release}`
  +        if [ ".${release}" = . ]; then
  +            if [ -d lib_${name}/CVS ]; then
  +                ( cd lib_${name} && cvs up -A )
  +            else
  +                cvs co -A -d lib_${name} ${name}
  +            fi
  +        else
  +            if [ -d lib_${name}/CVS ]; then
  +                ( cd lib_${name} && cvs up -r${release} )
  +            else
  +                cvs co -r${release} -d lib_${name} ${name}
  +            fi
  +        fi
           echo "<=== lib_${name}"
       done
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jun 15 14:23:50 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8CA4176468; Tue, 15 Jun 2004 14:23:50 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ README lmtp2nntp_version.c
Message-Id: <20040615122350.8CA4176468@mail.ossp.org>
Date: Tue, 15 Jun 2004 14:23:50 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   15-Jun-2004 14:23:50
  Branch: HEAD                             Handle: -NONE-

  Modified files:
    ossp-pkg/lmtp2nntp      README lmtp2nntp_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.40        +0  -0      ossp-pkg/lmtp2nntp/README
    1.22        +0  -0      ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/README
  ============================================================================
  $ cvs diff -u -r1.39 -r1.40 README
  --- ossp-pkg/lmtp2nntp/README	7 May 2004 14:52:16 -0000	1.39
  +++ ossp-pkg/lmtp2nntp/README	15 Jun 2004 12:23:49 -0000	1.40
  @@ -5,7 +5,7 @@
     |_|_|_| \___/|____/____/|_|    |_|_||_||_|\__| .__/____|_||_|_||_|\__| .__/
                                                  |_|                     |_|
     OSSP lmtp2nntp - Mail to News Gateway
  -  Version 1.3a3 (07-May-2004)
  +  Version 1.3b1 (15-Jun-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 lmtp2nntp_version.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	7 May 2004 14:58:16 -0000	1.21
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	15 Jun 2004 12:23:49 -0000	1.22
  @@ -8,7 +8,7 @@
   #ifndef _LMTP2NNTP_VERSION_C_
   #define _LMTP2NNTP_VERSION_C_
   
  -#define LMTP2NNTP_VERSION 0x103003
  +#define LMTP2NNTP_VERSION 0x103101
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _LMTP2NNTP_VERSION_C_AS_HEADER_
   
   lmtp2nntp_version_t lmtp2nntp_version = {
  -    0x103003,
  -    "1.3a3",
  -    "1.3a3 (07-May-2004)",
  -    "This is OSSP lmtp2nntp, Version 1.3a3 (07-May-2004)",
  -    "OSSP lmtp2nntp 1.3a3 (07-May-2004)",
  -    "OSSP lmtp2nntp/1.3a3",
  -    "@(#)OSSP lmtp2nntp 1.3a3 (07-May-2004)",
  -    "$Id: OSSP lmtp2nntp 1.3a3 (07-May-2004) $"
  +    0x103101,
  +    "1.3b1",
  +    "1.3b1 (15-Jun-2004)",
  +    "This is OSSP lmtp2nntp, Version 1.3b1 (15-Jun-2004)",
  +    "OSSP lmtp2nntp 1.3b1 (15-Jun-2004)",
  +    "OSSP lmtp2nntp/1.3b1",
  +    "@(#)OSSP lmtp2nntp 1.3b1 (15-Jun-2004)",
  +    "$Id: OSSP lmtp2nntp 1.3b1 (15-Jun-2004) $"
   };
   
   #endif /* _LMTP2NNTP_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jun 17 17:06:24 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6E40B764A9; Thu, 17 Jun 2004 17:06:24 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-doc/ accounts.txt
Message-Id: <20040617150624.6E40B764A9@mail.ossp.org>
Date: Thu, 17 Jun 2004 17:06:24 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   17-Jun-2004 17:06:24
  Branch: HEAD                             Handle: -NONE-

  Modified files:
    ossp-pkg/as/as-doc      accounts.txt

  Log:
    add consulting target and remove security one, to reflect project
    conditions

  Summary:
    Revision    Changes     Path
    1.49        +0  -0      ossp-pkg/as/as-doc/accounts.txt
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-doc/accounts.txt
  ============================================================================
  $ cvs diff -u -r1.48 -r1.49 accounts.txt
  --- ossp-pkg/as/as-doc/accounts.txt	4 Jun 2004 16:28:39 -0000	1.48
  +++ ossp-pkg/as/as-doc/accounts.txt	17 Jun 2004 15:06:23 -0000	1.49
  @@ -90,13 +90,13 @@
   R /de/is/com/server/migration             # [I] Generic Servers, Service Migration
   
   #   IPAdmin Servers
  -R /de/is/com/ipadm                          # [I] IPAdmin Servers
  -R /de/is/com/ipadm/projmanage               # [I] IPAdmin Servers, Project Management
  -R /de/is/com/ipadm/documentation            # [I] IPAdmin Servers, Documentation
  -R /de/is/com/ipadm/development              # [I] IPAdmin Servers, Development
  -R /de/is/com/ipadm/installation             # [I] IPAdmin Servers, Installation
  -R /de/is/com/ipadm/maintenance              # [I] IPAdmin Servers, Maintenance
  -R /de/is/com/ipadm/security                 # [I] IPAdmin Servers, Security
  +R /de/is/com/ipadm                        # [I] IPAdmin Servers
  +R /de/is/com/ipadm/projmanage             # [I] IPAdmin Servers, Project Management
  +R /de/is/com/ipadm/documentation          # [I] IPAdmin Servers, Documentation
  +R /de/is/com/ipadm/development            # [I] IPAdmin Servers, Development
  +R /de/is/com/ipadm/installation           # [I] IPAdmin Servers, Installation
  +R /de/is/com/ipadm/maintenance            # [I] IPAdmin Servers, Maintenance
  +R /de/is/com/ipadm/consulting             # [I] IPAdmin Servers, Consulting
   
   #   GNOC Servers
   R /de/is/com/gnoc                         # [I] GNOC Servers
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jun 26 13:16:04 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DA92A76313; Sat, 26 Jun 2004 13:16:03 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ ChangeLog THANKS sa.c sa.pod
Message-Id: <20040626111603.DA92A76313@mail.ossp.org>
Date: Sat, 26 Jun 2004 13:16:03 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Jun-2004 13:16:03
  Branch: HEAD                             Handle: -NONE-

  Modified files:
    ossp-pkg/sa             ChangeLog THANKS sa.c sa.pod

  Log:
    Allow negative values for SA_OPTION_LINGER to cover the
    special case of l_onoff=1/l_linger=0 where a TCP RST
    based connection termination is performed on close(2).
    
    Submitted by: Alexandre Balaban <abalaban@free.fr>

  Summary:
    Revision    Changes     Path
    1.38        +0  -0      ossp-pkg/sa/ChangeLog
    1.6         +0  -0      ossp-pkg/sa/THANKS
    1.84        +0  -0      ossp-pkg/sa/sa.c
    1.41        +0  -0      ossp-pkg/sa/sa.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 ChangeLog
  --- ossp-pkg/sa/ChangeLog	11 Jun 2004 10:32:54 -0000	1.37
  +++ ossp-pkg/sa/ChangeLog	26 Jun 2004 11:16:02 -0000	1.38
  @@ -11,6 +11,13 @@
     This is a list of all changes to OSSP sa.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 1.2.1 and 1.2.2 (11-Jun-2004 to 26-Jun-2004)
  +
  +   o Allow negative values for SA_OPTION_LINGER to cover the
  +     special case of l_onoff=1/l_linger=0 where a TCP RST
  +     based connection termination is performed on close(2).
  +     [Alexandre Balaban <abalaban@free.fr>]
  +
     Changes between 1.2.0 and 1.2.1 (02-Apr-2003 to 11-Jun-2004)
   
      o Fix timeout implementation related to SO_RCVTIMEO/SO_SNDTIMEO.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/THANKS
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 THANKS
  --- ossp-pkg/sa/THANKS	2 Apr 2004 18:21:07 -0000	1.5
  +++ ossp-pkg/sa/THANKS	26 Jun 2004 11:16:02 -0000	1.6
  @@ -17,6 +17,7 @@
     Credit has to be given to the following people who contributed ideas,
     bugfixes, hints, gave platform feedback, etc. (in alphabetical order):
   
  +    o  Alexandre Balaban           <abalaban@free.fr>
       o  Ulrich Dessauer             <udessauer@agnitas.de>
       o  Brian T. Egleston           <brian@egleston.com>
       o  Michael van Elst            <mlelstv@serpens.de>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.c
  ============================================================================
  $ cvs diff -u -r1.83 -r1.84 sa.c
  --- ossp-pkg/sa/sa.c	11 Jun 2004 10:30:34 -0000	1.83
  +++ ossp-pkg/sa/sa.c	26 Jun 2004 11:16:02 -0000	1.84
  @@ -989,7 +989,7 @@
   #if defined(SO_LINGER)
                       struct linger linger;
                       linger.l_onoff  = (sa->optInfo[i].value == 0 ? 0 : 1);
  -                    linger.l_linger = sa->optInfo[i].value;
  +                    linger.l_linger = (sa->optInfo[i].value <= 0 ? 0 : sa->optInfo[i].value);
                       if (setsockopt(sa->fdSocket, SOL_SOCKET, SO_LINGER,
                                      (const void *)&linger,
                                      (socklen_t)sizeof(struct linger)) < 0)
  @@ -1339,7 +1339,7 @@
           }
           case SA_OPTION_LINGER: {
   #if defined(SO_LINGER)
  -            int amount = ((int)va_arg(ap, int) ? 1 : 0);
  +            int amount = (int)va_arg(ap, int);
               sa->optInfo[SA_OPTION_LINGER].value = amount;
               sa->optInfo[SA_OPTION_LINGER].todo = TRUE;
   #else
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.pod
  ============================================================================
  $ cvs diff -u -r1.40 -r1.41 sa.pod
  --- ossp-pkg/sa/sa.pod	2 Apr 2004 18:21:07 -0000	1.40
  +++ ossp-pkg/sa/sa.pod	26 Jun 2004 11:16:02 -0000	1.41
  @@ -460,8 +460,11 @@
   disabling (I<yesno> == C<0>) Nagle's Algorithm (see RFC898).
   
   C<SA_OPTION_LINGER> (C<int> I<amount>) for enabling (I<amount> ==
  -I<seconds> E<gt> C<0>) or disabling (I<amount> == C<0>) lingering on
  -close (see C<SO_LINGER> of setsockopt(2)).
  +I<seconds> != C<0>) or disabling (I<amount> == C<0>) lingering on close
  +(see C<SO_LINGER> of setsockopt(2)). Notice: using I<seconds> E<ge> C<0>
  +results in a regular (maximum of I<seconds> lasting) lingering on close
  +while using I<seconds> E<le> C<0> results in the special case of a TCP
  +RST based connection termination on close.
   
   C<SA_OPTION_REUSEADDR> (C<int> I<yesno>) for enabling (I<yesno> ==
   C<1>) or disabling (I<yesno> == C<0>) the reusability of the address on
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jun 26 13:24:47 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 86410764D1; Sat, 26 Jun 2004 13:24:47 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ sa.pod
Message-Id: <20040626112447.86410764D1@mail.ossp.org>
Date: Sat, 26 Jun 2004 13:24:47 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Jun-2004 13:24:47
  Branch: HEAD                             Handle: -NONE-

  Modified files:
    ossp-pkg/sa             sa.pod

  Log:
    fix documentation

  Summary:
    Revision    Changes     Path
    1.42        +0  -0      ossp-pkg/sa/sa.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.pod
  ============================================================================
  $ cvs diff -u -r1.41 -r1.42 sa.pod
  --- ossp-pkg/sa/sa.pod	26 Jun 2004 11:16:02 -0000	1.41
  +++ ossp-pkg/sa/sa.pod	26 Jun 2004 11:24:47 -0000	1.42
  @@ -456,14 +456,15 @@
   Currently the following options are implemented (option arguments in
   parenthesis):
   
  -C<SA_OPTION_NAGLE> (C<int> I<yesno>) for enabling (I<yesno>=C<1>) or
  -disabling (I<yesno> == C<0>) Nagle's Algorithm (see RFC898).
  +C<SA_OPTION_NAGLE> (C<int> I<yesno>) for enabling (I<yesno>=C<1>)
  +or disabling (I<yesno> == C<0>) Nagle's Algorithm (see RFC898 and
  +C<TCP_NODELAY> of setsockopt(2)).
   
   C<SA_OPTION_LINGER> (C<int> I<amount>) for enabling (I<amount> ==
   I<seconds> != C<0>) or disabling (I<amount> == C<0>) lingering on close
  -(see C<SO_LINGER> of setsockopt(2)). Notice: using I<seconds> E<ge> C<0>
  +(see C<SO_LINGER> of setsockopt(2)). Notice: using I<seconds> E<gt> C<0>
   results in a regular (maximum of I<seconds> lasting) lingering on close
  -while using I<seconds> E<le> C<0> results in the special case of a TCP
  +while using I<seconds> E<lt> C<0> results in the special case of a TCP
   RST based connection termination on close.
   
   C<SA_OPTION_REUSEADDR> (C<int> I<yesno>) for enabling (I<yesno> ==
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jun 26 13:25:23 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6E2CC764F5; Sat, 26 Jun 2004 13:25:23 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ README VERSION
Message-Id: <20040626112523.6E2CC764F5@mail.ossp.org>
Date: Sat, 26 Jun 2004 13:25:23 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Jun-2004 13:25:23
  Branch: HEAD                             Handle: -NONE-

  Modified files:
    ossp-pkg/sa             README VERSION

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.21        +0  -0      ossp-pkg/sa/README
    1.17        +0  -0      ossp-pkg/sa/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/README
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 README
  --- ossp-pkg/sa/README	11 Jun 2004 10:32:54 -0000	1.20
  +++ ossp-pkg/sa/README	26 Jun 2004 11:25:22 -0000	1.21
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/\__,_|
   
     OSSP sa - Socket Abstraction
  -  Version 1.2.1 (11-Jun-2004)
  +  Version 1.2.2 (26-Jun-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/VERSION
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 VERSION
  --- ossp-pkg/sa/VERSION	11 Jun 2004 10:32:54 -0000	1.16
  +++ ossp-pkg/sa/VERSION	26 Jun 2004 11:25:22 -0000	1.17
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP sa (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP sa, Version 1.2.1 (11-Jun-2004)
  +  This is OSSP sa, Version 1.2.2 (26-Jun-2004)
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jun 26 13:38:21 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 353CC764B2; Sat, 26 Jun 2004 13:38:21 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ ChangeLog aclocal.m4 configure.ac sa.c sa.h t...
Message-Id: <20040626113821.353CC764B2@mail.ossp.org>
Date: Sat, 26 Jun 2004 13:38:21 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Jun-2004 13:38:21
  Branch: HEAD                             Handle: -NONE-

  Modified files:
    ossp-pkg/sa             ChangeLog aclocal.m4 configure.ac sa.c sa.h ts.c

  Log:
    o Provide Autoconf check (AC_CHECK_VA_COPY) for va_copy(d,s) macro
      and fallback implementations and now that we can be sure that
      va_copy() exists for us, use it in var_formatv() and ts.c instead
      of the direct assignments (which are not sufficiently portable).
    
    o Remove "#undef socklen_t" from sa.h because the socklen_t
      fallback is a "typedef" since a longer time.

  Summary:
    Revision    Changes     Path
    1.39        +0  -0      ossp-pkg/sa/ChangeLog
    1.11        +0  -0      ossp-pkg/sa/aclocal.m4
    1.15        +0  -0      ossp-pkg/sa/configure.ac
    1.85        +0  -0      ossp-pkg/sa/sa.c
    1.40        +0  -0      ossp-pkg/sa/sa.h
    1.11        +0  -0      ossp-pkg/sa/ts.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.38 -r1.39 ChangeLog
  --- ossp-pkg/sa/ChangeLog	26 Jun 2004 11:16:02 -0000	1.38
  +++ ossp-pkg/sa/ChangeLog	26 Jun 2004 11:38:20 -0000	1.39
  @@ -18,6 +18,16 @@
        based connection termination is performed on close(2).
        [Alexandre Balaban <abalaban@free.fr>]
   
  +   o Provide Autoconf check (AC_CHECK_VA_COPY) for va_copy(d,s) macro
  +     and fallback implementations and now that we can be sure that
  +     va_copy() exists for us, use it in var_formatv() and ts.c instead
  +     of the direct assignments (which are not sufficiently portable).
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +   o Remove "#undef socklen_t" from sa.h because the socklen_t
  +     fallback is a "typedef" since a longer time.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
     Changes between 1.2.0 and 1.2.1 (02-Apr-2003 to 11-Jun-2004)
   
      o Fix timeout implementation related to SO_RCVTIMEO/SO_SNDTIMEO.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 aclocal.m4
  --- ossp-pkg/sa/aclocal.m4	2 Apr 2004 18:22:46 -0000	1.10
  +++ ossp-pkg/sa/aclocal.m4	26 Jun 2004 11:38:20 -0000	1.11
  @@ -237,3 +237,112 @@
   AC_MSG_RESULT([$with_$2])
   ])dnl
   
  +dnl ##
  +dnl ##  Check for C99 va_copy() implementation
  +dnl ##  (and provide fallback implementation if neccessary)
  +dnl ##
  +dnl ##  configure.in:
  +dnl ##    AC_CHECK_VA_COPY
  +dnl ##  foo.c:
  +dnl ##    #include "config.h"
  +dnl ##    [...]
  +dnl ##    va_copy(d,s)
  +dnl ##
  +dnl ##  This check is rather complex: first because we really have to
  +dnl ##  try various possible implementations in sequence and second, we
  +dnl ##  cannot define a macro in config.h with parameters directly.
  +dnl ##
  +
  +dnl #   test program for va_copy() implementation
  +changequote(<<,>>)
  +m4_define(__va_copy_test, <<[
  +#include <stdlib.h>
  +#include <stdarg.h>
  +#include <string.h>
  +#define DO_VA_COPY(d, s) $1
  +void test(char *str, ...)
  +{
  +    va_list ap, ap2;
  +    int i;
  +    va_start(ap, str);
  +    DO_VA_COPY(ap2, ap);
  +    for (i = 1; i <= 9; i++) {
  +        int k = (int)va_arg(ap, int);
  +        if (k != i)
  +            abort();
  +    }
  +    DO_VA_COPY(ap, ap2);
  +    for (i = 1; i <= 9; i++) {
  +        int k = (int)va_arg(ap, int);
  +        if (k != i)
  +            abort();
  +    }
  +    va_end(ap);
  +}
  +int main(int argc, char *argv[])
  +{
  +    test("test", 1, 2, 3, 4, 5, 6, 7, 8, 9);
  +    exit(0);
  +}
  +]>>)
  +changequote([,])
  +
  +dnl #   test driver for va_copy() implementation
  +m4_define(__va_copy_check, [
  +    AH_VERBATIM($1,
  +[/* Predefined possible va_copy() implementation (id: $1) */
  +#define __VA_COPY_USE_$1(d, s) $2])
  +    if test ".$ac_cv_va_copy" = .; then
  +        AC_TRY_RUN(__va_copy_test($2), [ac_cv_va_copy="$1"])
  +    fi
  +])
  +
  +dnl #   Autoconf check for va_copy() implementation checking
  +AC_DEFUN(AC_CHECK_VA_COPY,[
  +  dnl #   provide Autoconf display check message
  +  AC_MSG_CHECKING(for va_copy() function)
  +  dnl #   check for various implementations in priorized sequence   
  +  AC_CACHE_VAL(ac_cv_va_copy, [
  +    ac_cv_va_copy=""
  +    dnl #   1. check for standardized C99 macro
  +    __va_copy_check(C99, [va_copy((d), (s))])
  +    dnl #   2. check for alternative/deprecated GCC macro
  +    __va_copy_check(GCM, [VA_COPY((d), (s))])
  +    dnl #   3. check for internal GCC macro (high-level define)
  +    __va_copy_check(GCH, [__va_copy((d), (s))])
  +    dnl #   4. check for internal GCC macro (built-in function)
  +    __va_copy_check(GCB, [__builtin_va_copy((d), (s))])
  +    dnl #   5. check for assignment approach (assuming va_list is a struct)
  +    __va_copy_check(ASS, [do { (d) = (s); } while (0)])
  +    dnl #   6. check for assignment approach (assuming va_list is a pointer)
  +    __va_copy_check(ASP, [do { *(d) = *(s); } while (0)])
  +    dnl #   7. check for memory copying approach (assuming va_list is a struct)
  +    __va_copy_check(CPS, [memcpy((void *)&(d), (void *)&(s)), sizeof((s))])
  +    dnl #   8. check for memory copying approach (assuming va_list is a pointer)
  +    __va_copy_check(CPP, [memcpy((void *)(d), (void *)(s)), sizeof(*(s))])
  +    if test ".$ac_cv_va_copy" = .; then
  +        AC_ERROR([no working implementation found])
  +    fi
  +  ])
  +  dnl #   optionally activate the fallback implementation
  +  if test ".$ac_cv_va_copy" = ".C99"; then
  +      AC_DEFINE(HAVE_VA_COPY, 1, [Define if va_copy() macro exists (and no fallback implementation is required)])
  +  fi
  +  dnl #   declare which fallback implementation to actually use
  +  AC_DEFINE_UNQUOTED([__VA_COPY_USE], [__VA_COPY_USE_$ac_cv_va_copy],
  +      [Define to id of used va_copy() implementation])
  +  dnl #   provide activation hook for fallback implementation
  +  AH_VERBATIM([__VA_COPY_ACTIVATION],
  +[/* Optional va_copy() implementation activation */
  +#ifndef HAVE_VA_COPY
  +#define va_copy(d, s) __VA_COPY_USE(d, s)
  +#endif
  +])
  +  dnl #   provide Autoconf display result message
  +  if test ".$ac_cv_va_copy" = ".C99"; then
  +      AC_MSG_RESULT([yes])
  +  else
  +      AC_MSG_RESULT([no (using fallback implementation)])
  +  fi
  +])
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/configure.ac
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 configure.ac
  --- ossp-pkg/sa/configure.ac	2 Apr 2004 18:21:07 -0000	1.14
  +++ ossp-pkg/sa/configure.ac	26 Jun 2004 11:38:20 -0000	1.15
  @@ -44,6 +44,8 @@
   sinclude(sa.ac)
   SA_CHECK_ALL
   
  +AC_CHECK_VA_COPY
  +
   AC_CHECK_EXTLIB([OSSP ex], ex, __ex_ctx, ex.h,
                   [AC_DEFINE(WITH_EX, 1, [Define to 1 if building with OSSP ex])])
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.c
  ============================================================================
  $ cvs diff -u -r1.84 -r1.85 sa.c
  --- ossp-pkg/sa/sa.c	26 Jun 2004 11:16:02 -0000	1.84
  +++ ossp-pkg/sa/sa.c	26 Jun 2004 11:38:20 -0000	1.85
  @@ -2273,6 +2273,7 @@
   sa_rc_t sa_sendf(sa_t *sa, sa_addr_t *raddr, const char *cpFmt, ...)
   {
       va_list ap;
  +    va_list apbak;
       int nBuf;
       char *cpBuf;
       sa_rc_t rv;
  @@ -2284,9 +2285,10 @@
   
       /* format string into temporary buffer */
       va_start(ap, cpFmt);
  +    va_copy(apbak, ap);
       if ((nBuf = sa_mvsnprintf(NULL, 0, cpFmt, ap)) == -1)
           return SA_RC(SA_ERR_FMT);
  -    va_end(ap);
  +    va_copy(ap, apbak);
       if ((nBuf+1) > (int)sizeof(caBuf)) {
           /* requires a larger buffer, so allocate dynamically */
           if ((cpBuf = (char *)malloc((size_t)(nBuf+1))) == NULL)
  @@ -2296,7 +2298,6 @@
           /* fits into small buffer, so allocate statically */
           cpBuf = caBuf;
       }
  -    va_start(ap, cpFmt);
       rv = SA_OK;
       if (sa_mvsnprintf(cpBuf, (size_t)(nBuf+1), cpFmt, ap) == -1)
           rv = SA_ERR_FMT;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.h
  ============================================================================
  $ cvs diff -u -r1.39 -r1.40 sa.h
  --- ossp-pkg/sa/sa.h	2 Apr 2004 18:21:07 -0000	1.39
  +++ ossp-pkg/sa/sa.h	26 Jun 2004 11:38:20 -0000	1.40
  @@ -209,10 +209,5 @@
   /* error handling operations */
   extern char   *sa_error        (sa_rc_t __rv);
   
  -/* cleanup */
  -#if defined(HAVE_CONFIG_H) && !defined(HAVE_SOCKLEN_T)
  -#undef socklen_t
  -#endif
  -
   #endif /* __SA_H__ */
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ts.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 ts.c
  --- ossp-pkg/sa/ts.c	2 Apr 2004 18:21:07 -0000	1.10
  +++ ossp-pkg/sa/ts.c	26 Jun 2004 11:38:20 -0000	1.11
  @@ -1,11 +1,11 @@
   /*
  -**  TS - OSSP Test Suite Library
  +**  OSSP ts - Test Suite Library
   **  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   **  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
   **  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   **
  -**  This file is part of OSSP TS, a small test suite library which
  -**  can be found at http://www.ossp.org/pkg/ts/.
  +**  This file is part of OSSP ts, a small test suite library which
  +**  can be found at http://www.ossp.org/pkg/lib/ts/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  @@ -127,7 +127,7 @@
       char *cp;
       char c;
       int d;
  -    size_t n;
  +    int n;
       int bytes;
   
       if (format == NULL)
  @@ -206,7 +206,7 @@
   
       if (format == NULL)
           return NULL;
  -    ap2 = ap;
  +    va_copy(ap2, ap);
       if ((n = ts_suite_mvxprintf(NULL, 0, format, ap)) == -1)
           return NULL;
       if ((buffer = (char *)malloc(n+1)) == NULL)
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jun 26 13:59:01 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1C1B7764EE; Sat, 26 Jun 2004 13:59:01 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ aclocal.m4 configure.ac sa.ac
Message-Id: <20040626115901.1C1B7764EE@mail.ossp.org>
Date: Sat, 26 Jun 2004 13:59:01 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Jun-2004 13:59:01
  Branch: HEAD                             Handle: -NONE-

  Modified files:
    ossp-pkg/sa             aclocal.m4 configure.ac sa.ac

  Log:
    move va_copy() stuff to sa.ac so it is available in sa-embedding
    packages

  Summary:
    Revision    Changes     Path
    1.12        +0  -0      ossp-pkg/sa/aclocal.m4
    1.16        +0  -0      ossp-pkg/sa/configure.ac
    1.17        +0  -0      ossp-pkg/sa/sa.ac
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 aclocal.m4
  --- ossp-pkg/sa/aclocal.m4	26 Jun 2004 11:38:20 -0000	1.11
  +++ ossp-pkg/sa/aclocal.m4	26 Jun 2004 11:59:00 -0000	1.12
  @@ -237,112 +237,3 @@
   AC_MSG_RESULT([$with_$2])
   ])dnl
   
  -dnl ##
  -dnl ##  Check for C99 va_copy() implementation
  -dnl ##  (and provide fallback implementation if neccessary)
  -dnl ##
  -dnl ##  configure.in:
  -dnl ##    AC_CHECK_VA_COPY
  -dnl ##  foo.c:
  -dnl ##    #include "config.h"
  -dnl ##    [...]
  -dnl ##    va_copy(d,s)
  -dnl ##
  -dnl ##  This check is rather complex: first because we really have to
  -dnl ##  try various possible implementations in sequence and second, we
  -dnl ##  cannot define a macro in config.h with parameters directly.
  -dnl ##
  -
  -dnl #   test program for va_copy() implementation
  -changequote(<<,>>)
  -m4_define(__va_copy_test, <<[
  -#include <stdlib.h>
  -#include <stdarg.h>
  -#include <string.h>
  -#define DO_VA_COPY(d, s) $1
  -void test(char *str, ...)
  -{
  -    va_list ap, ap2;
  -    int i;
  -    va_start(ap, str);
  -    DO_VA_COPY(ap2, ap);
  -    for (i = 1; i <= 9; i++) {
  -        int k = (int)va_arg(ap, int);
  -        if (k != i)
  -            abort();
  -    }
  -    DO_VA_COPY(ap, ap2);
  -    for (i = 1; i <= 9; i++) {
  -        int k = (int)va_arg(ap, int);
  -        if (k != i)
  -            abort();
  -    }
  -    va_end(ap);
  -}
  -int main(int argc, char *argv[])
  -{
  -    test("test", 1, 2, 3, 4, 5, 6, 7, 8, 9);
  -    exit(0);
  -}
  -]>>)
  -changequote([,])
  -
  -dnl #   test driver for va_copy() implementation
  -m4_define(__va_copy_check, [
  -    AH_VERBATIM($1,
  -[/* Predefined possible va_copy() implementation (id: $1) */
  -#define __VA_COPY_USE_$1(d, s) $2])
  -    if test ".$ac_cv_va_copy" = .; then
  -        AC_TRY_RUN(__va_copy_test($2), [ac_cv_va_copy="$1"])
  -    fi
  -])
  -
  -dnl #   Autoconf check for va_copy() implementation checking
  -AC_DEFUN(AC_CHECK_VA_COPY,[
  -  dnl #   provide Autoconf display check message
  -  AC_MSG_CHECKING(for va_copy() function)
  -  dnl #   check for various implementations in priorized sequence   
  -  AC_CACHE_VAL(ac_cv_va_copy, [
  -    ac_cv_va_copy=""
  -    dnl #   1. check for standardized C99 macro
  -    __va_copy_check(C99, [va_copy((d), (s))])
  -    dnl #   2. check for alternative/deprecated GCC macro
  -    __va_copy_check(GCM, [VA_COPY((d), (s))])
  -    dnl #   3. check for internal GCC macro (high-level define)
  -    __va_copy_check(GCH, [__va_copy((d), (s))])
  -    dnl #   4. check for internal GCC macro (built-in function)
  -    __va_copy_check(GCB, [__builtin_va_copy((d), (s))])
  -    dnl #   5. check for assignment approach (assuming va_list is a struct)
  -    __va_copy_check(ASS, [do { (d) = (s); } while (0)])
  -    dnl #   6. check for assignment approach (assuming va_list is a pointer)
  -    __va_copy_check(ASP, [do { *(d) = *(s); } while (0)])
  -    dnl #   7. check for memory copying approach (assuming va_list is a struct)
  -    __va_copy_check(CPS, [memcpy((void *)&(d), (void *)&(s)), sizeof((s))])
  -    dnl #   8. check for memory copying approach (assuming va_list is a pointer)
  -    __va_copy_check(CPP, [memcpy((void *)(d), (void *)(s)), sizeof(*(s))])
  -    if test ".$ac_cv_va_copy" = .; then
  -        AC_ERROR([no working implementation found])
  -    fi
  -  ])
  -  dnl #   optionally activate the fallback implementation
  -  if test ".$ac_cv_va_copy" = ".C99"; then
  -      AC_DEFINE(HAVE_VA_COPY, 1, [Define if va_copy() macro exists (and no fallback implementation is required)])
  -  fi
  -  dnl #   declare which fallback implementation to actually use
  -  AC_DEFINE_UNQUOTED([__VA_COPY_USE], [__VA_COPY_USE_$ac_cv_va_copy],
  -      [Define to id of used va_copy() implementation])
  -  dnl #   provide activation hook for fallback implementation
  -  AH_VERBATIM([__VA_COPY_ACTIVATION],
  -[/* Optional va_copy() implementation activation */
  -#ifndef HAVE_VA_COPY
  -#define va_copy(d, s) __VA_COPY_USE(d, s)
  -#endif
  -])
  -  dnl #   provide Autoconf display result message
  -  if test ".$ac_cv_va_copy" = ".C99"; then
  -      AC_MSG_RESULT([yes])
  -  else
  -      AC_MSG_RESULT([no (using fallback implementation)])
  -  fi
  -])
  -
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/configure.ac
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 configure.ac
  --- ossp-pkg/sa/configure.ac	26 Jun 2004 11:38:20 -0000	1.15
  +++ ossp-pkg/sa/configure.ac	26 Jun 2004 11:59:00 -0000	1.16
  @@ -44,8 +44,6 @@
   sinclude(sa.ac)
   SA_CHECK_ALL
   
  -AC_CHECK_VA_COPY
  -
   AC_CHECK_EXTLIB([OSSP ex], ex, __ex_ctx, ex.h,
                   [AC_DEFINE(WITH_EX, 1, [Define to 1 if building with OSSP ex])])
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.ac
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 sa.ac
  --- ossp-pkg/sa/sa.ac	2 Apr 2004 18:21:07 -0000	1.16
  +++ ossp-pkg/sa/sa.ac	26 Jun 2004 11:59:00 -0000	1.17
  @@ -95,6 +95,116 @@
   )
   ])dnl
   
  +dnl ##
  +dnl ##  Check for C99 va_copy() implementation
  +dnl ##  (and provide fallback implementation if neccessary)
  +dnl ##
  +dnl ##  configure.in:
  +dnl ##    SA_CHECK_VA_COPY
  +dnl ##  foo.c:
  +dnl ##    #include "config.h"
  +dnl ##    [...]
  +dnl ##    va_copy(d,s)
  +dnl ##
  +dnl ##  This check is rather complex: first because we really have to
  +dnl ##  try various possible implementations in sequence and second, we
  +dnl ##  cannot define a macro in config.h with parameters directly.
  +dnl ##
  +
  +dnl #   test program for va_copy() implementation
  +changequote(<<,>>)
  +m4_define(__va_copy_test, <<[
  +#include <stdlib.h>
  +#include <stdarg.h>
  +#include <string.h>
  +#define DO_VA_COPY(d, s) $1
  +void test(char *str, ...)
  +{
  +    va_list ap, ap2;
  +    int i;
  +    va_start(ap, str);
  +    DO_VA_COPY(ap2, ap);
  +    for (i = 1; i <= 9; i++) {
  +        int k = (int)va_arg(ap, int);
  +        if (k != i)
  +            abort();
  +    }
  +    DO_VA_COPY(ap, ap2);
  +    for (i = 1; i <= 9; i++) {
  +        int k = (int)va_arg(ap, int);
  +        if (k != i)
  +            abort();
  +    }
  +    va_end(ap);
  +}
  +int main(int argc, char *argv[])
  +{
  +    test("test", 1, 2, 3, 4, 5, 6, 7, 8, 9);
  +    exit(0);
  +}
  +]>>)
  +changequote([,])
  +
  +dnl #   test driver for va_copy() implementation
  +m4_define(__va_copy_check, [
  +    AH_VERBATIM($1,
  +[/* Predefined possible va_copy() implementation (id: $1) */
  +#define __VA_COPY_USE_$1(d, s) $2])
  +    if test ".$ac_cv_va_copy" = .; then
  +        AC_TRY_RUN(__va_copy_test($2), [ac_cv_va_copy="$1"])
  +    fi
  +])
  +
  +dnl #   Autoconf check for va_copy() implementation checking
  +AC_DEFUN(SA_CHECK_VA_COPY,[
  +  dnl #   provide Autoconf display check message
  +  AC_MSG_CHECKING(for va_copy() function)
  +  dnl #   check for various implementations in priorized sequence   
  +  AC_CACHE_VAL(ac_cv_va_copy, [
  +    ac_cv_va_copy=""
  +    dnl #   1. check for standardized C99 macro
  +    __va_copy_check(C99, [va_copy((d), (s))])
  +    dnl #   2. check for alternative/deprecated GCC macro
  +    __va_copy_check(GCM, [VA_COPY((d), (s))])
  +    dnl #   3. check for internal GCC macro (high-level define)
  +    __va_copy_check(GCH, [__va_copy((d), (s))])
  +    dnl #   4. check for internal GCC macro (built-in function)
  +    __va_copy_check(GCB, [__builtin_va_copy((d), (s))])
  +    dnl #   5. check for assignment approach (assuming va_list is a struct)
  +    __va_copy_check(ASS, [do { (d) = (s); } while (0)])
  +    dnl #   6. check for assignment approach (assuming va_list is a pointer)
  +    __va_copy_check(ASP, [do { *(d) = *(s); } while (0)])
  +    dnl #   7. check for memory copying approach (assuming va_list is a struct)
  +    __va_copy_check(CPS, [memcpy((void *)&(d), (void *)&(s)), sizeof((s))])
  +    dnl #   8. check for memory copying approach (assuming va_list is a pointer)
  +    __va_copy_check(CPP, [memcpy((void *)(d), (void *)(s)), sizeof(*(s))])
  +    if test ".$ac_cv_va_copy" = .; then
  +        AC_ERROR([no working implementation found])
  +    fi
  +  ])
  +  dnl #   optionally activate the fallback implementation
  +  if test ".$ac_cv_va_copy" = ".C99"; then
  +      AC_DEFINE(HAVE_VA_COPY, 1, [Define if va_copy() macro exists (and no fallback implementation is required)])
  +  fi
  +  dnl #   declare which fallback implementation to actually use
  +  AC_DEFINE_UNQUOTED([__VA_COPY_USE], [__VA_COPY_USE_$ac_cv_va_copy],
  +      [Define to id of used va_copy() implementation])
  +  dnl #   provide activation hook for fallback implementation
  +  AH_VERBATIM([__VA_COPY_ACTIVATION],
  +[/* Optional va_copy() implementation activation */
  +#ifndef HAVE_VA_COPY
  +#define va_copy(d, s) __VA_COPY_USE(d, s)
  +#endif
  +])
  +  dnl #   provide Autoconf display result message
  +  if test ".$ac_cv_va_copy" = ".C99"; then
  +      AC_MSG_RESULT([yes])
  +  else
  +      AC_MSG_RESULT([no (using fallback implementation)])
  +  fi
  +])
  +
  +
   dnl #   Check for anything OSSP SA wants to know
   dnl #   configure.in:
   dnl #     SA_CHECK_ALL
  @@ -121,5 +231,8 @@
       SA_CHECK_TYPEDEF(ssize_t, sys/types.h)
       SA_CHECK_SOCKOPT(SO_RCVTIMEO)
       SA_CHECK_SOCKOPT(SO_SNDTIMEO)
  +
  +    dnl # check for va_copy()
  +    SA_CHECK_VA_COPY
   ])
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jun 26 14:04:08 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6E56A764EE; Sat, 26 Jun 2004 14:04:08 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20040626120408.6E56A764EE@mail.ossp.org>
Date: Sat, 26 Jun 2004 14:04:08 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   26-Jun-2004 14:04:08
  Branch: HEAD                             Handle: -NONE-

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/sa     index.wml

  Log:
    release OSSP sa 1.2.2

  Summary:
    Revision    Changes     Path
    1.87        +0  -0      ossp-web/new/news.txt
    1.78        +0  -0      ossp-web/pkg/lib/index.wml
    1.17        +0  -0      ossp-web/pkg/lib/sa/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.86 -r1.87 news.txt
  --- ossp-web/new/news.txt	11 Jun 2004 10:46:11 -0000	1.86
  +++ ossp-web/new/news.txt	26 Jun 2004 12:04:06 -0000	1.87
  @@ -1,3 +1,5 @@
  +26-Jun-2004: Released L<OSSP sa> 1.2.2
  +15-Jun-2004: Released T<OSSP lmtp2nntp> 1.3b1
   11-Jun-2004: Released L<OSSP sa> 1.2.1
   10-May-2004: Released T<OSSP shiela> 1.1.2
   10-May-2004: Released T<OSSP shiela> 1.1.1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.77 -r1.78 index.wml
  --- ossp-web/pkg/lib/index.wml	11 Jun 2004 10:46:12 -0000	1.77
  +++ ossp-web/pkg/lib/index.wml	26 Jun 2004 12:04:06 -0000	1.78
  @@ -24,7 +24,7 @@
   			done=100 stable=1.0.4 unstable=none>
     <pkg_item name="sa" longname="OSSP sa" type="lib"
               desc="Socket Abstraction"
  -			done=100 stable=1.2.1 unstable=none>
  +			done=100 stable=1.2.2 unstable=none>
     <pkg_item name="fsl" longname="OSSP fsl" type="lib"
               desc="Faked/Flexible Syslog"
   			done=100 stable=1.5.0 unstable=none>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/sa/index.wml
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 index.wml
  --- ossp-web/pkg/lib/sa/index.wml	11 Jun 2004 10:46:13 -0000	1.16
  +++ ossp-web/pkg/lib/sa/index.wml	26 Jun 2004 12:04:07 -0000	1.17
  @@ -110,7 +110,7 @@
   
   <pkg_status
       name="sa" assign="rse"
  -    stable="1.2.1"    stable_date="11-Jun-2004"
  +    stable="1.2.2"    stable_date="26-Jun-2004"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -121,7 +121,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/sa/
       directory=$(FTP_ROOT_DIR)/pkg/lib/sa/
       files="sa-*.tar.gz" 
  -	stable="sa-1\.2\.1\.tar\.gz" unstable="sa-SNAP.*\.tar.gz">
  +	stable="sa-1\.2\.2\.tar\.gz" unstable="sa-SNAP.*\.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jun 26 14:09:56 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A9710764B2; Sat, 26 Jun 2004 14:09:56 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/sa/ index.wml
Message-Id: <20040626120956.A9710764B2@mail.ossp.org>
Date: Sat, 26 Jun 2004 14:09:56 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   26-Jun-2004 14:09:56
  Branch: HEAD                             Handle: -NONE-

  Modified files:
    ossp-web/pkg/lib/sa     index.wml

  Log:
    fix markup

  Summary:
    Revision    Changes     Path
    1.18        +0  -0      ossp-web/pkg/lib/sa/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/sa/index.wml
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 index.wml
  --- ossp-web/pkg/lib/sa/index.wml	26 Jun 2004 12:04:07 -0000	1.17
  +++ ossp-web/pkg/lib/sa/index.wml	26 Jun 2004 12:09:56 -0000	1.18
  @@ -42,8 +42,8 @@
   and opaque address type (<tt>sa_addr_t</tt>) together with utility functions
   which allow one to convert from the traditional <tt>struct sockaddr</tt> or
   URI specification to the <tt>sa_addr_t</tt> and vice versa without having to
  -deal with special cases related to the underlying particular C<struct
  -sockaddr_xx>. <b>OSSP sa</b> support <i>Unix Domain</i> and both IPv4 and IPv6
  +deal with special cases related to the underlying particular <tt>struct
  +sockaddr_xx</tt>. <b>OSSP sa</b> support <i>Unix Domain</i> and both IPv4 and IPv6
   <i>Internet Domain</i> addressing.
   </font>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jun 26 14:13:17 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E1469764B2; Sat, 26 Jun 2004 14:13:16 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/sa/ index.wml
Message-Id: <20040626121316.E1469764B2@mail.ossp.org>
Date: Sat, 26 Jun 2004 14:13:16 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   26-Jun-2004 14:13:16
  Branch: HEAD                             Handle: -NONE-

  Modified files:
    ossp-web/pkg/lib/sa     index.wml

  Log:
    add genesis

  Summary:
    Revision    Changes     Path
    1.19        +0  -0      ossp-web/pkg/lib/sa/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/sa/index.wml
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 index.wml
  --- ossp-web/pkg/lib/sa/index.wml	26 Jun 2004 12:09:56 -0000	1.18
  +++ ossp-web/pkg/lib/sa/index.wml	26 Jun 2004 12:13:16 -0000	1.19
  @@ -109,7 +109,7 @@
   <h2>Status</h2>
   
   <pkg_status
  -    name="sa" assign="rse"
  +    name="sa" assign="rse" genesis="Jan-2001"
       stable="1.2.2"    stable_date="26-Jun-2004"
       unstable="none" unstable_date="none"
   	done=100>
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jun 27 09:44:04 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7F58176438; Sun, 27 Jun 2004 09:44:04 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ ChangeLog THANKS shiela.pl
Message-Id: <20040627074404.7F58176438@mail.ossp.org>
Date: Sun, 27 Jun 2004 09:44:04 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   27-Jun-2004 09:44:04
  Branch: HEAD                             Handle: -NONE-

  Modified files:
    ossp-pkg/shiela         ChangeLog THANKS shiela.pl

  Log:
    Fix determination of the line counts in the "Changes" field
    by no longer announcing to the CVS server that OSSP shiela can
    handle "MT" (message tagged) responses. The problem is CVS 1.12.x
    starts to send some important responses as "MT" responses now and
    OSSP shiela only accepts "M" responses.
    
    Determined by: Geoff Thorpe <geoff@geoffthorpe.net>

  Summary:
    Revision    Changes     Path
    1.49        +9  -0      ossp-pkg/shiela/ChangeLog
    1.6         +1  -0      ossp-pkg/shiela/THANKS
    1.62        +1  -1      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.48 -r1.49 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	10 May 2004 18:03:38 -0000	1.48
  +++ ossp-pkg/shiela/ChangeLog	27 Jun 2004 07:44:03 -0000	1.49
  @@ -9,6 +9,15 @@
   
     ChangeLog
   
  +  Changes between 1.1.2 and 1.1.3 (10-May-2004 to 27-Jun-2004):
  +
  +   *) Fix determination of the line counts in the "Changes" field
  +      by no longer announcing to the CVS server that OSSP shiela can
  +      handle "MT" (message tagged) responses. The problem is CVS 1.12.x
  +      starts to send some important responses as "MT" responses now and
  +      OSSP shiela only accepts "M" responses.
  +      [Ralf S. Engelschall, Geoff Thorpe <geoff@geoffthorpe.net>]
  +
     Changes between 1.1.1 and 1.1.2 (10-May-2002 to 10-May-2004):
   
      *) Optimize and bugfix the determination of the number of
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/THANKS
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 THANKS
  --- ossp-pkg/shiela/THANKS	10 May 2004 18:01:03 -0000	1.5
  +++ ossp-pkg/shiela/THANKS	27 Jun 2004 07:44:03 -0000	1.6
  @@ -16,6 +16,7 @@
     o Markus Sander               <msander@de.cw.com>
     o Michael Schloh v. Bennewitz <michael.schloh@cw.com>
     o Christoph Schug             <chris@schug.net>
  +  o Geoff Thorpe                <geoff@geoffthorpe.net>
   
     ...and all other OSSP shiela users who gave me feedback but I've forgot.
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================================
  $ cvs diff -u -r1.61 -r1.62 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	10 May 2004 18:14:12 -0000	1.61
  +++ ossp-pkg/shiela/shiela.pl	27 Jun 2004 07:44:03 -0000	1.62
  @@ -593,7 +593,7 @@
           "Copy-file Updated Created Update-existing Merged Patched Rcs-diff Mode " .
           "Mod-time Removed Remove-entry Set-static-directory Clear-static-directory " .
           "Set-sticky Clear-sticky Template Set-checkin-prog Set-update-prog Notified " .
  -        "Module-expansion Wrapper-rcsOption M Mbinary E F MT");
  +        "Module-expansion Wrapper-rcsOption M Mbinary E F");
       $cvs->send("UseUnchanged");
       $cvs->send("Root $cvsroot");
       $cvs->send("noop");
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jun 27 09:45:51 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B7B6576488; Sun, 27 Jun 2004 09:45:51 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ VERSION shiela-install.sh shiela.pl
Message-Id: <20040627074551.B7B6576488@mail.ossp.org>
Date: Sun, 27 Jun 2004 09:45:51 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   27-Jun-2004 09:45:51
  Branch: HEAD                             Handle: -NONE-

  Modified files:
    ossp-pkg/shiela         VERSION shiela-install.sh shiela.pl

  Log:
    bump to version 1.1.3 for release

  Summary:
    Revision    Changes     Path
    1.15        +1  -1      ossp-pkg/shiela/VERSION
    1.30        +1  -1      ossp-pkg/shiela/shiela-install.sh
    1.63        +1  -1      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/VERSION
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 VERSION
  --- ossp-pkg/shiela/VERSION	10 May 2004 18:14:12 -0000	1.14
  +++ ossp-pkg/shiela/VERSION	27 Jun 2004 07:45:50 -0000	1.15
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP shiela (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP shiela, Version 1.1.2 (10-May-2004)
  +  This is OSSP shiela, Version 1.1.3 (27-Jun-2004)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-install.sh
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 shiela-install.sh
  --- ossp-pkg/shiela/shiela-install.sh	10 May 2004 18:14:12 -0000	1.29
  +++ ossp-pkg/shiela/shiela-install.sh	27 Jun 2004 07:45:50 -0000	1.30
  @@ -26,7 +26,7 @@
   ##  shiela-install.sh: repository install program (syntax: Bourne-Shell)
   ##
   
  -version="1.1.2"
  +version="1.1.3"
   
   prefix="@prefix@"
   bindir="@bindir@"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================================
  $ cvs diff -u -r1.62 -r1.63 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	27 Jun 2004 07:44:03 -0000	1.62
  +++ ossp-pkg/shiela/shiela.pl	27 Jun 2004 07:45:50 -0000	1.63
  @@ -26,7 +26,7 @@
   ##  shiela.pl: control program (syntax: Perl)
   ##
   
  -my $version = '1.1.2';
  +my $version = '1.1.3';
   
   require 5.005;
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jun 27 09:48:06 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 819E076489; Sun, 27 Jun 2004 09:48:06 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/tool/ index.wml ossp-w...
Message-Id: <20040627074806.819E076489@mail.ossp.org>
Date: Sun, 27 Jun 2004 09:48:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   27-Jun-2004 09:48:06
  Branch: HEAD                             Handle: -NONE-

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/shiela
                            index.wml

  Log:
    release OSSP shiela 1.1.3

  Summary:
    Revision    Changes     Path
    1.88        +1  -0      ossp-web/new/news.txt
    1.36        +2  -2      ossp-web/pkg/tool/index.wml
    1.14        +2  -2      ossp-web/pkg/tool/shiela/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.87 -r1.88 news.txt
  --- ossp-web/new/news.txt	26 Jun 2004 12:04:06 -0000	1.87
  +++ ossp-web/new/news.txt	27 Jun 2004 07:48:04 -0000	1.88
  @@ -1,3 +1,4 @@
  +27-Jun-2004: Released T<OSSP shiela> 1.1.3
   26-Jun-2004: Released L<OSSP sa> 1.2.2
   15-Jun-2004: Released T<OSSP lmtp2nntp> 1.3b1
   11-Jun-2004: Released L<OSSP sa> 1.2.1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 index.wml
  --- ossp-web/pkg/tool/index.wml	10 May 2004 18:29:59 -0000	1.35
  +++ ossp-web/pkg/tool/index.wml	27 Jun 2004 07:48:05 -0000	1.36
  @@ -17,10 +17,10 @@
   		    done=100 stable="1.6.2" unstable=none>
     <pkg_item name="lmtp2nntp" longname="OSSP lmtp2nntp" type="tool"
               desc="Real-Time Mail to News Gateway"
  -            done=100 stable="1.2.0" unstable=1.3a3>
  +            done=100 stable="1.2.0" unstable=1.3b1>
     <pkg_item name="shiela" longname="OSSP shiela" type="tool"
               desc="CVS Access Control and Logging"
  -	        done=100 stable="1.1.2" unstable="none">
  +	        done=100 stable="1.1.3" unstable="none">
     <pkg_item name="eperl" longname="OSSP eperl" type="tool"
               desc="Embedded Perl Language"
   	        done=100 stable="2.2.14" unstable="none">
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/shiela/index.wml
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 index.wml
  --- ossp-web/pkg/tool/shiela/index.wml	10 May 2004 18:30:00 -0000	1.13
  +++ ossp-web/pkg/tool/shiela/index.wml	27 Jun 2004 07:48:06 -0000	1.14
  @@ -25,7 +25,7 @@
   <h2>Status</h2>
   
   <pkg_status
  -    stable="1.1.2" stable_date="10-May-2004"
  +    stable="1.1.3" stable_date="27-Jun-2004"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -36,7 +36,7 @@
       url=$(FTP_ROOT_URL)/pkg/tool/shiela/
       directory=$(FTP_ROOT_DIR)/pkg/tool/shiela/
       files="shiela-*.tar.gz" 
  -	stable="shiela-1.1.2.tar.gz" unstable="none">
  +	stable="shiela-1.1.3.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jun 27 21:20:20 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CB831764F4; Sun, 27 Jun 2004 21:20:19 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ devtool.conf
Message-Id: <20040627192019.CB831764F4@mail.ossp.org>
Date: Sun, 27 Jun 2004 21:20:19 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   27-Jun-2004 21:20:19
  Branch: HEAD                             Handle: -NONE-

  Modified files:
    ossp-pkg/lmtp2nntp      devtool.conf

  Log:
    print more detailed information when %checkout (includes update) goes
    to work

  Summary:
    Revision    Changes     Path
    1.19        +4  -1      ossp-pkg/lmtp2nntp/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 devtool.conf
  --- ossp-pkg/lmtp2nntp/devtool.conf	15 Jun 2004 12:01:49 -0000	1.18
  +++ ossp-pkg/lmtp2nntp/devtool.conf	27 Jun 2004 19:20:19 -0000	1.19
  @@ -13,19 +13,22 @@
       BRANCH_PCRE=""
       BRANCH_TAI=""
       for name in ex str l2 sa var val popt pcre tai; do
  -        echo "===> lib_${name} (cvs co)"
           release=BRANCH_`echo ${name} | tr [a-z] [A-Z]`
           release=`eval echo \\$${release}`
           if [ ".${release}" = . ]; then
               if [ -d lib_${name}/CVS ]; then
  +                echo "===> lib_${name} (cvs up HEAD)"
                   ( cd lib_${name} && cvs up -A )
               else
  +                echo "===> lib_${name} (cvs co HEAD)"
                   cvs co -A -d lib_${name} ${name}
               fi
           else
               if [ -d lib_${name}/CVS ]; then
  +                echo "===> lib_${name} (cvs up ${release})"
                   ( cd lib_${name} && cvs up -r${release} )
               else
  +                echo "===> lib_${name} (cvs co ${release})"
                   cvs co -r${release} -d lib_${name} ${name}
               fi
           fi
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jun 27 21:24:10 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0BA99764F4; Sun, 27 Jun 2004 21:24:09 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ devtool.conf
Message-Id: <20040627192409.0BA99764F4@mail.ossp.org>
Date: Sun, 27 Jun 2004 21:24:09 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   27-Jun-2004 21:24:09
  Branch: HEAD                             Handle: -NONE-

  Modified files:
    ossp-pkg/lmtp2nntp      devtool.conf

  Log:
    upgrade usage of OSSP sa from 1.2.1 to 1.2.2

  Summary:
    Revision    Changes     Path
    1.20        +1  -1      ossp-pkg/lmtp2nntp/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 devtool.conf
  --- ossp-pkg/lmtp2nntp/devtool.conf	27 Jun 2004 19:20:19 -0000	1.19
  +++ ossp-pkg/lmtp2nntp/devtool.conf	27 Jun 2004 19:24:09 -0000	1.20
  @@ -6,7 +6,7 @@
       BRANCH_EX="EX_1_0_4"
       BRANCH_STR="STR_0_9_9"
       BRANCH_L2="L2_0_9_8"
  -    BRANCH_SA="SA_1_2_1"
  +    BRANCH_SA="SA_1_2_2"
       BRANCH_VAR="VAR_1_1_0"
       BRANCH_VAL="VAL_0_9_2"
       BRANCH_POPT=""
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jun 27 21:49:56 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A2C2D76317; Sun, 27 Jun 2004 21:49:55 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ NEWS
Message-Id: <20040627194955.A2C2D76317@mail.ossp.org>
Date: Sun, 27 Jun 2004 21:49:55 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   27-Jun-2004 21:49:55
  Branch: HEAD                             Handle: -NONE-

  Modified files:
    ossp-pkg/lmtp2nntp      NEWS

  Log:
    highlevel description of lmtp2nntp NEWS with pointer to autocreated
    ChangeLog

  Summary:
    Revision    Changes     Path
    1.11        +24 -0      ossp-pkg/lmtp2nntp/NEWS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/NEWS
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 NEWS
  --- ossp-pkg/lmtp2nntp/NEWS	6 Feb 2003 21:02:38 -0000	1.10
  +++ ossp-pkg/lmtp2nntp/NEWS	27 Jun 2004 19:49:55 -0000	1.11
  @@ -8,6 +8,30 @@
   
     NEWS
   
  +  - find fine-grained information in the autocreated ChangeLog
  +
  +  NEWS for 1.3
  +
  +  - this is a fully compatible drop-in replacement for lmtp2nntp-1.2
  +
  +  - fix long standing bug where communication problems on the NNTP side
  +    led to a infinite loop, effectivly halting the gateway process and
  +    exhausting all available CPU resources.
  +
  +  - correct and improve configuration code in the areas of ACL settings,
  +    empty newsgroups, zero NTTP servers, default LMTP TCP port, more
  +    verbose messages on system errors)
  + 
  +  - update development environment and further improve portability. Fix
  +    all known issues related to Solaris environment including signal
  +    handling.
  +
  +  - no longer based on arbitrary snapshots but reproducible released
  +    versions of OSSP ex, str, l2, sa, var and val. This aids
  +    maintainance, troubleshooting and security engineering.
  +
  +  NEWS for 1.2
  +
     Those folks who used previous versions please review the options
     carefully, there were significant changes which are not compatible with
     previous versions.
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jun 27 21:50:21 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 51FD5764E9; Sun, 27 Jun 2004 21:50:21 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ README lmtp2nntp_version.c
Message-Id: <20040627195021.51FD5764E9@mail.ossp.org>
Date: Sun, 27 Jun 2004 21:50:21 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   27-Jun-2004 21:50:21
  Branch: HEAD                             Handle: -NONE-

  Modified files:
    ossp-pkg/lmtp2nntp      README lmtp2nntp_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.41        +1  -1      ossp-pkg/lmtp2nntp/README
    1.23        +9  -9      ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/README
  ============================================================================
  $ cvs diff -u -r1.40 -r1.41 README
  --- ossp-pkg/lmtp2nntp/README	15 Jun 2004 12:23:49 -0000	1.40
  +++ ossp-pkg/lmtp2nntp/README	27 Jun 2004 19:50:20 -0000	1.41
  @@ -5,7 +5,7 @@
     |_|_|_| \___/|____/____/|_|    |_|_||_||_|\__| .__/____|_||_|_||_|\__| .__/
                                                  |_|                     |_|
     OSSP lmtp2nntp - Mail to News Gateway
  -  Version 1.3b1 (15-Jun-2004)
  +  Version 1.3b2 (27-Jun-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 lmtp2nntp_version.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	15 Jun 2004 12:23:49 -0000	1.22
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	27 Jun 2004 19:50:20 -0000	1.23
  @@ -8,7 +8,7 @@
   #ifndef _LMTP2NNTP_VERSION_C_
   #define _LMTP2NNTP_VERSION_C_
   
  -#define LMTP2NNTP_VERSION 0x103101
  +#define LMTP2NNTP_VERSION 0x103102
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _LMTP2NNTP_VERSION_C_AS_HEADER_
   
   lmtp2nntp_version_t lmtp2nntp_version = {
  -    0x103101,
  -    "1.3b1",
  -    "1.3b1 (15-Jun-2004)",
  -    "This is OSSP lmtp2nntp, Version 1.3b1 (15-Jun-2004)",
  -    "OSSP lmtp2nntp 1.3b1 (15-Jun-2004)",
  -    "OSSP lmtp2nntp/1.3b1",
  -    "@(#)OSSP lmtp2nntp 1.3b1 (15-Jun-2004)",
  -    "$Id: OSSP lmtp2nntp 1.3b1 (15-Jun-2004) $"
  +    0x103102,
  +    "1.3b2",
  +    "1.3b2 (27-Jun-2004)",
  +    "This is OSSP lmtp2nntp, Version 1.3b2 (27-Jun-2004)",
  +    "OSSP lmtp2nntp 1.3b2 (27-Jun-2004)",
  +    "OSSP lmtp2nntp/1.3b2",
  +    "@(#)OSSP lmtp2nntp 1.3b2 (27-Jun-2004)",
  +    "$Id: OSSP lmtp2nntp 1.3b2 (27-Jun-2004) $"
   };
   
   #endif /* _LMTP2NNTP_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul  2 14:44:37 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 79C29764A2; Fri,  2 Jul 2004 14:44:37 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ README lmtp2nntp_version.c
Message-Id: <20040702124437.79C29764A2@mail.ossp.org>
Date: Fri,  2 Jul 2004 14:44:37 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   02-Jul-2004 14:44:37
  Branch: HEAD                             Handle: -NONE-

  Modified files:
    ossp-pkg/lmtp2nntp      README lmtp2nntp_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.42        +1  -1      ossp-pkg/lmtp2nntp/README
    1.24        +9  -9      ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/README
  ============================================================================
  $ cvs diff -u -r1.41 -r1.42 README
  --- ossp-pkg/lmtp2nntp/README	27 Jun 2004 19:50:20 -0000	1.41
  +++ ossp-pkg/lmtp2nntp/README	2 Jul 2004 12:44:36 -0000	1.42
  @@ -5,7 +5,7 @@
     |_|_|_| \___/|____/____/|_|    |_|_||_||_|\__| .__/____|_||_|_||_|\__| .__/
                                                  |_|                     |_|
     OSSP lmtp2nntp - Mail to News Gateway
  -  Version 1.3b2 (27-Jun-2004)
  +  Version 1.3.0 (02-Jul-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 lmtp2nntp_version.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	27 Jun 2004 19:50:20 -0000	1.23
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	2 Jul 2004 12:44:36 -0000	1.24
  @@ -8,7 +8,7 @@
   #ifndef _LMTP2NNTP_VERSION_C_
   #define _LMTP2NNTP_VERSION_C_
   
  -#define LMTP2NNTP_VERSION 0x103102
  +#define LMTP2NNTP_VERSION 0x103200
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _LMTP2NNTP_VERSION_C_AS_HEADER_
   
   lmtp2nntp_version_t lmtp2nntp_version = {
  -    0x103102,
  -    "1.3b2",
  -    "1.3b2 (27-Jun-2004)",
  -    "This is OSSP lmtp2nntp, Version 1.3b2 (27-Jun-2004)",
  -    "OSSP lmtp2nntp 1.3b2 (27-Jun-2004)",
  -    "OSSP lmtp2nntp/1.3b2",
  -    "@(#)OSSP lmtp2nntp 1.3b2 (27-Jun-2004)",
  -    "$Id: OSSP lmtp2nntp 1.3b2 (27-Jun-2004) $"
  +    0x103200,
  +    "1.3.0",
  +    "1.3.0 (02-Jul-2004)",
  +    "This is OSSP lmtp2nntp, Version 1.3.0 (02-Jul-2004)",
  +    "OSSP lmtp2nntp 1.3.0 (02-Jul-2004)",
  +    "OSSP lmtp2nntp/1.3.0",
  +    "@(#)OSSP lmtp2nntp 1.3.0 (02-Jul-2004)",
  +    "$Id: OSSP lmtp2nntp 1.3.0 (02-Jul-2004) $"
   };
   
   #endif /* _LMTP2NNTP_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul  2 15:06:37 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 102317643C; Fri,  2 Jul 2004 15:06:36 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog sh.subst
Message-Id: <20040702130636.102317643C@mail.ossp.org>
Date: Fri,  2 Jul 2004 15:06:36 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Jul-2004 15:06:36
  Branch: HEAD                             Handle: -NONE-

  Modified files:
    ossp-pkg/shtool         ChangeLog sh.subst

  Log:
    Add -w/--warning option to "shtool subst" command which
    shows warnings on substitution operation resulting in no content
    change on every file. The new default is now to show a warning on
    substitution operations resulted in no content change on all files
    only.

  Summary:
    Revision    Changes     Path
    1.205       +8  -1      ossp-pkg/shtool/ChangeLog
    1.14        +27 -4      ossp-pkg/shtool/sh.subst
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.204 -r1.205 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	7 Jun 2004 15:13:20 -0000	1.204
  +++ ossp-pkg/shtool/ChangeLog	2 Jul 2004 13:06:36 -0000	1.205
  @@ -9,7 +9,14 @@
   
    ChangeLog
   
  - Changes between 2.0b3 and 2.0b4 (08-May-2004 to xx-May-2004):
  + Changes between 2.0b4 and 2.0.0 (08-May-2004 to 02-Jul-2004):
  +
  +   *) Add -w/--warning option to "shtool subst" command which
  +      shows warnings on substitution operation resulting in no content
  +      change on every file. The new default is now to show a warning on
  +      substitution operations resulted in no content change on all files
  +      only.
  +      [Ralf S. Engelschall, Thomas Lotterer]
   
      *) Fix platform id generation under NetBSD.
         [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.subst
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 sh.subst
  --- ossp-pkg/shtool/sh.subst	8 May 2004 19:09:58 -0000	1.13
  +++ ossp-pkg/shtool/sh.subst	2 Jul 2004 13:06:36 -0000	1.14
  @@ -19,14 +19,15 @@
   ##
   
   str_tool="subst"
  -str_usage="[-v|--verbose] [-t|--trace] [-n|--nop] [-q|--quiet] [-s|--stealth] [-i|--interactive] [-b|--backup <ext>] [-e|--exec <cmd>] [-f|--file <cmd-file>] [<file>] [...]"
  +str_usage="[-v|--verbose] [-t|--trace] [-n|--nop] [-w|--warning] [-q|--quiet] [-s|--stealth] [-i|--interactive] [-b|--backup <ext>] [-e|--exec <cmd>] [-f|--file <cmd-file>] [<file>] [...]"
   gen_tmpfile=yes
   arg_spec="0+"
  -opt_spec="v.t.n.q.s.i.b:e+f:"
  -opt_alias="v:verbose,t:trace,n:nop,q:quiet,s:stealth,i:interactive,b:backup,e:exec,f:file"
  +opt_spec="v.t.n.w.q.s.i.b:e+f:"
  +opt_alias="v:verbose,t:trace,n:nop,w:warning,q:quiet,s:stealth,i:interactive,b:backup,e:exec,f:file"
   opt_v=no
   opt_t=no
   opt_n=no
  +opt_w=no
   opt_q=no
   opt_s=no
   opt_i=no
  @@ -38,6 +39,7 @@
   
   #   remember optional list of file(s)
   files="$*"
  +files_num="$#"
   
   #   parameter consistency check
   if [ $# -eq 0 ] && [ ".$opt_b" != . ]; then
  @@ -77,6 +79,7 @@
   #   apply sed(1) operation(s)
   if [ ".$files" != . ]; then
       #   apply operation(s) to files
  +    substdone=no
       for file in $files; do
           test ".$file" = . && continue
           if [ ! -f $file ]; then
  @@ -146,7 +149,11 @@
           #   optionally check whether any content change actually occurred 
           if [ ".$opt_q" = .no ]; then
               if cmp $file$orig $file >/dev/null 2>&1; then
  -                echo "$msgprefix:Warning: substitution operation results in no content change" 1>&2
  +                if [ ".$opt_w" = .yes ]; then
  +                    echo "$msgprefix:Warning: substitution resulted in no content change on file \"$file\"" 1>&2
  +                fi
  +            else
  +                substdone=yes
               fi
           fi
   
  @@ -160,6 +167,15 @@
               fi
           fi
       done
  +    if [ ".$opt_q" = .no ] && [ ".$opt_w" = .no ]; then
  +        if [ ".$substdone" = .no ]; then
  +            if [ ".$files_num" = .1 ]; then
  +                echo "$msgprefix:Warning: substitution resulted in no content change on file \"$file\"" 1>&2
  +            else
  +                echo "$msgprefix:Warning: substitution resulted in no content change on any file" 1>&2
  +            fi
  +        fi
  +    fi
   else
       #   apply operation(s) to stdin/stdout
       if [ ".$opt_v" = .yes ]; then
  @@ -191,6 +207,7 @@
   [B<-v>|B<--verbose>]
   [B<-t>|B<--trace>]
   [B<-n>|B<--nop>]
  +[B<-w>|B<--warning>]
   [B<-q>|B<--quiet>]
   [B<-s>|B<--stealth>]
   [B<-i>|B<--interactive>]
  @@ -223,6 +240,12 @@
   No operation mode. Actual execution of the essential shell commands
   which would be executed is suppressed.
   
  +=item B<-w>, B<--warning>
  +
  +Show warning on substitution operation resulting in no content change
  +on I<every> file. The default is to show a warning on substitution
  +operations resulted in no content change on I<all> files.
  +
   =item B<-q>, B<--quiet>
   
   Suppress warning on substitution operation resulting in no content change.
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul  2 15:07:38 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6D8AA7643C; Fri,  2 Jul 2004 15:07:38 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ README VERSION shtool.spec
Message-Id: <20040702130738.6D8AA7643C@mail.ossp.org>
Date: Fri,  2 Jul 2004 15:07:38 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Jul-2004 15:07:38
  Branch: HEAD                             Handle: -NONE-

  Modified files:
    ossp-pkg/shtool         README VERSION shtool.spec

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.105       +1  -1      ossp-pkg/shtool/README
    1.80        +1  -1      ossp-pkg/shtool/VERSION
    1.23        +1  -1      ossp-pkg/shtool/shtool.spec
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/README
  ============================================================================
  $ cvs diff -u -r1.104 -r1.105 README
  --- ossp-pkg/shtool/README	8 May 2004 19:09:58 -0000	1.104
  +++ ossp-pkg/shtool/README	2 Jul 2004 13:07:37 -0000	1.105
  @@ -10,7 +10,7 @@
     http://www.gnu.org/software/shtool/
     ftp://ftp.gnu.org/gnu/shtool/
   
  -  Version 2.0b3 (08-May-2004)
  +  Version 2.0.0 (02-Jul-2004)
   
     The GNU shtool program is a compilation of small but very stable and
     portable shell scripts into a single shell tool. All ingredients
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/VERSION
  ============================================================================
  $ cvs diff -u -r1.79 -r1.80 VERSION
  --- ossp-pkg/shtool/VERSION	8 May 2004 19:09:58 -0000	1.79
  +++ ossp-pkg/shtool/VERSION	2 Jul 2004 13:07:37 -0000	1.80
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for GNU shtool (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is GNU shtool, Version 2.0b3 (08-May-2004)
  +  This is GNU shtool, Version 2.0.0 (02-Jul-2004)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtool.spec
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 shtool.spec
  --- ossp-pkg/shtool/shtool.spec	8 May 2004 19:09:58 -0000	1.22
  +++ ossp-pkg/shtool/shtool.spec	2 Jul 2004 13:07:37 -0000	1.23
  @@ -30,7 +30,7 @@
   %define prefix /usr/local
   %endif
   
  -%define ver 2.0b3
  +%define ver 2.0.0
   %define rel 0
   
   Name:       shtool
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul  2 15:13:16 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F013D7643C; Fri,  2 Jul 2004 15:13:15 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ shtool.pod
Message-Id: <20040702131315.F013D7643C@mail.ossp.org>
Date: Fri,  2 Jul 2004 15:13:15 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Jul-2004 15:13:15
  Branch: HEAD                             Handle: -NONE-

  Modified files:
    ossp-pkg/shtool         shtool.pod

  Log:
    more references from top-level manual page

  Summary:
    Revision    Changes     Path
    1.67        +5  -1      ossp-pkg/shtool/shtool.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtool.pod
  ============================================================================
  $ cvs diff -u -r1.66 -r1.67 shtool.pod
  --- ossp-pkg/shtool/shtool.pod	12 Feb 2004 16:06:27 -0000	1.66
  +++ ossp-pkg/shtool/shtool.pod	2 Jul 2004 13:13:15 -0000	1.67
  @@ -172,7 +172,11 @@
   
   =head1 SEE ALSO
   
  -sh(1), cp(1), rm(1), mkdir(1), awk(1), sed(1).
  +shtoolize(1), shtool-arx(1), shtool-echo(1), shtool-fixperm(1),
  +shtool-install(1), shtool-mdate(1), shtool-mkdir(1), shtool-mkln(1),
  +shtool-mkshadow(1), shtool-move(1), shtool-path(1), shtool-platform(1),
  +shtool-prop(1), shtool-rotate(1), shtool-scpp(1), shtool-slo(1),
  +shtool-subst(1), shtool-table(1), shtool-tarball(1), shtool-version(1).
   
   =head1 HISTORY
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul  2 15:16:34 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D433D76478; Fri,  2 Jul 2004 15:16:33 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ NEWS
Message-Id: <20040702131633.D433D76478@mail.ossp.org>
Date: Fri,  2 Jul 2004 15:16:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Jul-2004 15:16:33
  Branch: HEAD                             Handle: -NONE-

  Modified files:
    ossp-pkg/shtool         NEWS

  Log:
    more NEWS

  Summary:
    Revision    Changes     Path
    1.8         +4  -1      ossp-pkg/shtool/NEWS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/NEWS
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 NEWS
  --- ossp-pkg/shtool/NEWS	13 Dec 2003 21:23:55 -0000	1.7
  +++ ossp-pkg/shtool/NEWS	2 Jul 2004 13:16:32 -0000	1.8
  @@ -9,12 +9,15 @@
     This is a list of user-visible and/or major changes to GNU shtool.
     For more details please have a look at the ChangeLog file.
   
  -  Changes between 1.6 and 2.0 (02-Nov-2002 to xx-Dec-2003)
  +  Changes between 1.6 and 2.0 (02-Nov-2002 to 02-Jul-2004)
   
  +   *) Added substitution warnings to `shtool subst'
      *) Replaced old `shtool guessos' with a new `shtool platform' command
      *) Even more POSIX 1003.1-2001 compliancy and portability.
      *) Many workarounds and fixed for permission related problems
      *) Fixed error exit in all commands by introducing an "shtool_exit"
  +   *) Split shtool(1) into multiple manual pages and extended content.
  +   *) Upgraded build environment to GNU Autoconf 2.59
   
     Changes between 1.5 and 1.6 (14-Jun-2001 to 02-Nov-2002)
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul  2 15:27:44 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 799F57647B; Fri,  2 Jul 2004 15:27:44 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/tool/ index.wml ossp-w...
Message-Id: <20040702132744.799F57647B@mail.ossp.org>
Date: Fri,  2 Jul 2004 15:27:44 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   02-Jul-2004 15:27:44
  Branch: HEAD                             Handle: -NONE-

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/shtool
                            index.wml

  Log:
    release GNU shtool 2.0.0

  Summary:
    Revision    Changes     Path
    1.89        +3  -0      ossp-web/new/news.txt
    1.37        +2  -2      ossp-web/pkg/tool/index.wml
    1.10        +2  -2      ossp-web/pkg/tool/shtool/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.88 -r1.89 news.txt
  --- ossp-web/new/news.txt	27 Jun 2004 07:48:04 -0000	1.88
  +++ ossp-web/new/news.txt	2 Jul 2004 13:27:42 -0000	1.89
  @@ -1,3 +1,6 @@
  +02-Jul-2004: Released T<OSSP shtool> 2.0.0
  +02-Jul-2004: Released T<OSSP lmtp2nntp> 1.3.0
  +27-Jun-2004: Released T<OSSP lmtp2nntp> 1.3b2
   27-Jun-2004: Released T<OSSP shiela> 1.1.3
   26-Jun-2004: Released L<OSSP sa> 1.2.2
   15-Jun-2004: Released T<OSSP lmtp2nntp> 1.3b1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.36 -r1.37 index.wml
  --- ossp-web/pkg/tool/index.wml	27 Jun 2004 07:48:05 -0000	1.36
  +++ ossp-web/pkg/tool/index.wml	2 Jul 2004 13:27:43 -0000	1.37
  @@ -14,10 +14,10 @@
   <pkg_list>
     <pkg_item name="shtool" longname="GNU shtool" type="tool"
               desc="Portable Shell Tool"
  -		    done=100 stable="1.6.2" unstable=none>
  +		    done=100 stable="2.0.0" unstable=none>
     <pkg_item name="lmtp2nntp" longname="OSSP lmtp2nntp" type="tool"
               desc="Real-Time Mail to News Gateway"
  -            done=100 stable="1.2.0" unstable=1.3b1>
  +            done=100 stable="1.3.0" unstable=none>
     <pkg_item name="shiela" longname="OSSP shiela" type="tool"
               desc="CVS Access Control and Logging"
   	        done=100 stable="1.1.3" unstable="none">
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/shtool/index.wml
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 index.wml
  --- ossp-web/pkg/tool/shtool/index.wml	2 Nov 2002 13:03:24 -0000	1.9
  +++ ossp-web/pkg/tool/shtool/index.wml	2 Jul 2004 13:27:44 -0000	1.10
  @@ -40,7 +40,7 @@
   
   <pkg_status
       name="shtool" assign="rse"
  -    stable="1.6.2"   stable_date="02-Nov-2002"
  +    stable="2.0.0"   stable_date="02-Jul-2004"
       unstable="none"  unstable_date="none"
   	done=100>
   
  @@ -51,7 +51,7 @@
       url=$(FTP_ROOT_URL)/pkg/tool/shtool/
       directory=$(FTP_ROOT_DIR)/pkg/tool/shtool/
       files="shtool-*.tar.gz" 
  -	stable="shtool-1.6.2.tar.gz" unstable="none">
  +	stable="shtool-2.0.0.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul  2 15:28:11 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DEF49764B0; Fri,  2 Jul 2004 15:28:10 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/tool/lmtp2nntp/ index.wml
Message-Id: <20040702132810.DEF49764B0@mail.ossp.org>
Date: Fri,  2 Jul 2004 15:28:10 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   02-Jul-2004 15:28:10
  Branch: HEAD                             Handle: -NONE-

  Modified files:
    ossp-web/pkg/tool/lmtp2nntp
                            index.wml

  Log:
    release OSSP lmtp2nntp 1.3.0

  Summary:
    Revision    Changes     Path
    1.14        +3  -3      ossp-web/pkg/tool/lmtp2nntp/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/lmtp2nntp/index.wml
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 index.wml
  --- ossp-web/pkg/tool/lmtp2nntp/index.wml	26 Apr 2004 13:21:44 -0000	1.13
  +++ ossp-web/pkg/tool/lmtp2nntp/index.wml	2 Jul 2004 13:28:10 -0000	1.14
  @@ -35,8 +35,8 @@
   
   <pkg_status
       name="lmtp2nntp" assign="thl"
  -    stable="1.2.0"   stable_date="13-Feb-2002"
  -    unstable="1.3a2" unstable_date="23-Apr-2004"
  +    stable="1.3.0"   stable_date="02-Jul-2004"
  +    unstable=none    unstable_date=none
   	done=100>
   
   <h2>Source</h2>
  @@ -45,7 +45,7 @@
       cvs=$(CVS_ROOT_URL)/pkg/tool/lmtp2nntp/
       url=$(FTP_ROOT_URL)/pkg/tool/lmtp2nntp/
       directory=$(FTP_ROOT_DIR)/pkg/tool/lmtp2nntp/
  -    files="lmtp2nntp-*.tar.gz" stable="lmtp2nntp-1.2\\\\\\\.0.tar.gz" unstable="lmtp2nntp-1.3a2.tar.gz">
  +    files="lmtp2nntp-*.tar.gz" stable="lmtp2nntp-1.3\\\\\\\.0.tar.gz" unstable=none>
   
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul  2 19:22:19 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2361D7642C; Fri,  2 Jul 2004 19:22:19 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ ChangeLog shiela.pl
Message-Id: <20040702172219.2361D7642C@mail.ossp.org>
Date: Fri,  2 Jul 2004 19:22:19 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Jul-2004 19:22:19
  Branch: HEAD                             Handle: -NONE-

  Modified files:
    ossp-pkg/shiela         ChangeLog shiela.pl

  Log:
    Fix determination of the "handle" field under new CVS 1.12.x
    where ISO format dates are used in the output of "cvs log".

  Summary:
    Revision    Changes     Path
    1.50        +6  -0      ossp-pkg/shiela/ChangeLog
    1.64        +1  -1      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.49 -r1.50 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	27 Jun 2004 07:44:03 -0000	1.49
  +++ ossp-pkg/shiela/ChangeLog	2 Jul 2004 17:22:18 -0000	1.50
  @@ -9,6 +9,12 @@
   
     ChangeLog
   
  +  Changes between 1.1.3 and 1.1.4 (27-Jun-2004 to 02-Jul-2004):
  +
  +   *) Fix determination of the "handle" field under new CVS 1.12.x
  +      where ISO format dates are used in the output of "cvs log".
  +      [Ralf S. Engelschall]
  +
     Changes between 1.1.2 and 1.1.3 (10-May-2004 to 27-Jun-2004):
   
      *) Fix determination of the line counts in the "Changes" field
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================================
  $ cvs diff -u -r1.63 -r1.64 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	27 Jun 2004 07:45:50 -0000	1.63
  +++ ossp-pkg/shiela/shiela.pl	2 Jul 2004 17:22:18 -0000	1.64
  @@ -1662,7 +1662,7 @@
   
           #   determine commit date
           my $ID = 0;
  -        if ($rcslog =~ m|\ndate:\s+(\d\d\d\d)/(\d\d)/(\d\d)\s+(\d\d):(\d\d):(\d\d);|s) {
  +        if ($rcslog =~ m|\ndate:\s+(\d\d\d\d)[/-](\d\d)[/-](\d\d)\s+(\d\d):(\d\d):(\d\d)(?:\s+[+-]?\d+)?;|s) {
               my ($Y,$M,$D,$h,$m,$s) = ($1,$2,$3,$4,$5,$6);
               $ID = POSIX::mktime($s, $m, $h, $D, $M-1, $Y-1900);
           }
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul  2 21:19:34 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2A7A476438; Fri,  2 Jul 2004 21:19:34 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ ChangeLog shiela-install.pod shiela-insta...
Message-Id: <20040702191934.2A7A476438@mail.ossp.org>
Date: Fri,  2 Jul 2004 21:19:34 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Jul-2004 21:19:34
  Branch: HEAD                             Handle: -NONE-

  Modified files:
    ossp-pkg/shiela         ChangeLog shiela-install.pod shiela-install.sh

  Log:
    Document in install-shiela.pod and install-shiela.sh that
    CVS version 1.12.6 or higher is required.

  Summary:
    Revision    Changes     Path
    1.51        +4  -0      ossp-pkg/shiela/ChangeLog
    1.24        +22 -10     ossp-pkg/shiela/shiela-install.pod
    1.31        +2  -2      ossp-pkg/shiela/shiela-install.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.50 -r1.51 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	2 Jul 2004 17:22:18 -0000	1.50
  +++ ossp-pkg/shiela/ChangeLog	2 Jul 2004 19:19:33 -0000	1.51
  @@ -15,6 +15,10 @@
         where ISO format dates are used in the output of "cvs log".
         [Ralf S. Engelschall]
   
  +   *) Document in install-shiela.pod and install-shiela.sh that
  +      CVS version 1.12.6 or higher is required.
  +      [Ralf S. Engelschall]
  +
     Changes between 1.1.2 and 1.1.3 (10-May-2004 to 27-Jun-2004):
   
      *) Fix determination of the line counts in the "Changes" field
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-install.pod
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 shiela-install.pod
  --- ossp-pkg/shiela/shiela-install.pod	6 May 2004 19:45:39 -0000	1.23
  +++ ossp-pkg/shiela/shiela-install.pod	2 Jul 2004 19:19:33 -0000	1.24
  @@ -53,27 +53,39 @@
   
   =item B<1.>
   
  -checkout a working copy of the C<CVSROOT> module from your repository.
  +make sure that you are using CVS version 1.12.6 or higher. Older
  +versions are no longer supported due to the new I<xxxx>C<info> hooking
  +(C<UseNewInfoFmtStrings=yes>) which is a mandatory configuration for
  +B<OSSP shiela>.
   
   =item B<2.>
   
  +checkout a working copy of the C<CVSROOT> module from your repository.
  +
  +=item B<3.>
  +
  +make sure the file C<$CVSROOT/CVSROOT/config>
  +contains the directive ``C<UseNewInfoFmtStrings=yes>''.
  +
  +=item B<4.>
  +
   create the files C<$CVSROOT/CVSROOT/shiela>,
   C<$CVSROOT/CVSROOT/shiela.cfg> and C<$CVSROOT/CVSROOT/shiela.msg>
   in this directory and list these three files in
   C<$CVSROOT/CVSROOT/checkoutlist> (so CVS automatically checks them
   out).
   
  -=item B<3.>
  +=item B<5.>
   
   add to C<$CVSROOT/CVSROOT/rcsinfo> (the hook for providing log
   messages): ``C<ALL $CVSROOT/CVSROOT/shiela.msg>''.
   
  -=item B<4.>
  +=item B<6.>
   
   add to C<$CVSROOT/CVSROOT/taginfo> (the hook for checking tag
   operations): ``C<ALL $CVSROOT/CVSROOT/shiela --hook=taginfo %t %o %p %{sv}>''.
   
  -=item B<5.>
  +=item B<7.>
   
   add to C<$CVSROOT/CVSROOT/importinfo> (the hook for checking import
   operations): ``C<ALL $CVSROOT/CVSROOT/shiela --hook=importinfo>''. This
  @@ -83,7 +95,7 @@
   controlled by B<OSSP shiela> (because then this hook does not exists at
   all).
   
  -=item B<6.>
  +=item B<8.>
   
   add to C<$CVSROOT/CVSROOT/admininfo> (the hook for checking admin
   operations): ``C<ALL $CVSROOT/CVSROOT/shiela --hook=admininfo>''. This
  @@ -93,17 +105,17 @@
   controlled by B<OSSP shiela> (because then this hook does not exists at
   all).
   
  -=item B<7.>
  +=item B<9.>
   
   add to C<$CVSROOT/CVSROOT/commitinfo> (the hook for checking commit
   operations): ``C<ALL $CVSROOT/CVSROOT/shiela --hook=commitinfo %r/%p %s>''.
   
  -=item B<8.>
  +=item B<10.>
   
   add to C<$CVSROOT/CVSROOT/verifymsg> (the hook for post-processing log
   messages): ``C<DEFAULT $CVSROOT/CVSROOT/shiela --hook=verifymsg %l>''.
   
  -=item B<9.>
  +=item B<11.>
   
   add to C<$CVSROOT/CVSROOT/loginfo> (the hook for performing logging):
   ``C<ALL $CVSROOT/CVSROOT/shiela --hook=loginfo %p %{sVvto}>''.
  @@ -114,13 +126,13 @@
   and branch recognition might be less correct (because B<OSSP shiela> has
   to determine details the hard way which CVS already would know easily).
   
  -=item B<10.>
  +=item B<12.>
   
   edit C<$CVSROOT/CVSROOT/shiela.cfg> to fit your repository and
   project situation. For details, see the description under
   B<CONFIGURATION> in shiela(1).
   
  -=item B<11.>
  +=item B<13.>
   
   finally commit all modifications at once.
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-install.sh
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 shiela-install.sh
  --- ossp-pkg/shiela/shiela-install.sh	27 Jun 2004 07:45:50 -0000	1.30
  +++ ossp-pkg/shiela/shiela-install.sh	2 Jul 2004 19:19:33 -0000	1.31
  @@ -372,10 +372,10 @@
       CVS_VENDOR=CVSHome.org
   fi
   case $CVS_VERSION in
  -   1.1[2-9]* )
  +   1.12.[6-9] | 1.12.[1-9][0-9] | 1.1[3-9].* )
          ;;
      * )
  -       echo "ERROR: CVS has to be at least version 1.12"
  +       echo "ERROR: CVS has to be version 1.12.6 or higher"
          exit 1
          ;;
   esac
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul  2 21:24:54 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D867C76438; Fri,  2 Jul 2004 21:24:53 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ VERSION shiela-install.sh shiela.pl
Message-Id: <20040702192453.D867C76438@mail.ossp.org>
Date: Fri,  2 Jul 2004 21:24:53 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Jul-2004 21:24:53
  Branch: HEAD                             Handle: -NONE-

  Modified files:
    ossp-pkg/shiela         VERSION shiela-install.sh shiela.pl

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.16        +1  -1      ossp-pkg/shiela/VERSION
    1.32        +1  -1      ossp-pkg/shiela/shiela-install.sh
    1.65        +1  -1      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/VERSION
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 VERSION
  --- ossp-pkg/shiela/VERSION	27 Jun 2004 07:45:50 -0000	1.15
  +++ ossp-pkg/shiela/VERSION	2 Jul 2004 19:24:52 -0000	1.16
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP shiela (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP shiela, Version 1.1.3 (27-Jun-2004)
  +  This is OSSP shiela, Version 1.1.4 (02-Jul-2004)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-install.sh
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 shiela-install.sh
  --- ossp-pkg/shiela/shiela-install.sh	2 Jul 2004 19:19:33 -0000	1.31
  +++ ossp-pkg/shiela/shiela-install.sh	2 Jul 2004 19:24:52 -0000	1.32
  @@ -26,7 +26,7 @@
   ##  shiela-install.sh: repository install program (syntax: Bourne-Shell)
   ##
   
  -version="1.1.3"
  +version="1.1.4"
   
   prefix="@prefix@"
   bindir="@bindir@"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================================
  $ cvs diff -u -r1.64 -r1.65 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	2 Jul 2004 17:22:18 -0000	1.64
  +++ ossp-pkg/shiela/shiela.pl	2 Jul 2004 19:24:52 -0000	1.65
  @@ -26,7 +26,7 @@
   ##  shiela.pl: control program (syntax: Perl)
   ##
   
  -my $version = '1.1.3';
  +my $version = '1.1.4';
   
   require 5.005;
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul  2 21:58:57 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 168D17643C; Fri,  2 Jul 2004 21:58:57 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/tool/ index.wml ossp-w...
Message-Id: <20040702195857.168D17643C@mail.ossp.org>
Date: Fri,  2 Jul 2004 21:58:57 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   02-Jul-2004 21:58:56
  Branch: HEAD                             Handle: 2004070220585501

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/shiela
                            index.wml

  Log:
    release OSSP shiela 1.1.4

  Summary:
    Revision    Changes     Path
    1.90        +1  -0      ossp-web/new/news.txt
    1.38        +1  -1      ossp-web/pkg/tool/index.wml
    1.15        +2  -2      ossp-web/pkg/tool/shiela/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.89 -r1.90 news.txt
  --- ossp-web/new/news.txt	2 Jul 2004 13:27:42 -0000	1.89
  +++ ossp-web/new/news.txt	2 Jul 2004 19:58:55 -0000	1.90
  @@ -1,3 +1,4 @@
  +02-Jul-2004: Released T<OSSP shiela> 1.1.4
   02-Jul-2004: Released T<OSSP shtool> 2.0.0
   02-Jul-2004: Released T<OSSP lmtp2nntp> 1.3.0
   27-Jun-2004: Released T<OSSP lmtp2nntp> 1.3b2
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 index.wml
  --- ossp-web/pkg/tool/index.wml	2 Jul 2004 13:27:43 -0000	1.37
  +++ ossp-web/pkg/tool/index.wml	2 Jul 2004 19:58:55 -0000	1.38
  @@ -20,7 +20,7 @@
               done=100 stable="1.3.0" unstable=none>
     <pkg_item name="shiela" longname="OSSP shiela" type="tool"
               desc="CVS Access Control and Logging"
  -	        done=100 stable="1.1.3" unstable="none">
  +	        done=100 stable="1.1.4" unstable="none">
     <pkg_item name="eperl" longname="OSSP eperl" type="tool"
               desc="Embedded Perl Language"
   	        done=100 stable="2.2.14" unstable="none">
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/shiela/index.wml
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 index.wml
  --- ossp-web/pkg/tool/shiela/index.wml	27 Jun 2004 07:48:06 -0000	1.14
  +++ ossp-web/pkg/tool/shiela/index.wml	2 Jul 2004 19:58:56 -0000	1.15
  @@ -25,7 +25,7 @@
   <h2>Status</h2>
   
   <pkg_status
  -    stable="1.1.3" stable_date="27-Jun-2004"
  +    stable="1.1.4" stable_date="02-Jul-2004"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -36,7 +36,7 @@
       url=$(FTP_ROOT_URL)/pkg/tool/shiela/
       directory=$(FTP_ROOT_DIR)/pkg/tool/shiela/
       files="shiela-*.tar.gz" 
  -	stable="shiela-1.1.3.tar.gz" unstable="none">
  +	stable="shiela-1.1.4.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jul 10 10:17:18 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 69A5E763B8; Sat, 10 Jul 2004 10:17:17 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/due/ .bash.local.rse .bash_history .bash_login .b...
Message-Id: <20040710081717.69A5E763B8@mail.ossp.org>
Date: Sat, 10 Jul 2004 10:17:17 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Jul-2004 10:17:17
  Branch: HEAD                             Handle: 2004071009171203

  Added files:
    ossp-pkg/due            .bash.local.rse .bash_history .bash_login .bashrc
                            .cshrc .duerc .inputrc .profile .screenrc .viminfo
                            .vimrc README
    ossp-pkg/due/.due       due.cd.sh due.editor.sh due.ff.sh due.local.sh
                            due.ls.sh due.platform.sh due.recue.sh due.root.sh
                            due.term.sh due.util.sh

  Log:
    import the initial version of the new-born OSSP due (Dynamic User
    Environment

  Summary:
    Revision    Changes     Path
    1.1         +12 -0      ossp-pkg/due/.bash.local.rse
    1.1         +205 -0     ossp-pkg/due/.bash_history
    1.1         +40 -0      ossp-pkg/due/.bash_login
    1.1         +34 -0      ossp-pkg/due/.bashrc
    1.1         +38 -0      ossp-pkg/due/.cshrc
    1.1         +89 -0      ossp-pkg/due/.due/due.cd.sh
    1.1         +63 -0      ossp-pkg/due/.due/due.editor.sh
    1.1         +40 -0      ossp-pkg/due/.due/due.ff.sh
    1.1         +41 -0      ossp-pkg/due/.due/due.local.sh
    1.1         +61 -0      ossp-pkg/due/.due/due.ls.sh
    1.1         +66 -0      ossp-pkg/due/.due/due.platform.sh
    1.1         +84 -0      ossp-pkg/due/.due/due.recue.sh
    1.1         +150 -0     ossp-pkg/due/.due/due.root.sh
    1.1         +75 -0      ossp-pkg/due/.due/due.term.sh
    1.1         +158 -0     ossp-pkg/due/.due/due.util.sh
    1.1         +159 -0     ossp-pkg/due/.duerc
    1.1         +38 -0      ossp-pkg/due/.inputrc
    1.1         +34 -0      ossp-pkg/due/.profile
    1.1         +39 -0      ossp-pkg/due/.screenrc
    1.1         +35 -0      ossp-pkg/due/.viminfo
    1.1         +169 -0     ossp-pkg/due/.vimrc
    1.1         +48 -0      ossp-pkg/due/README
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.bash.local.rse
  ============================================================================
  $ cvs diff -u -r0 -r1.1 .bash.local.rse
  --- /dev/null	2004-07-10 10:17:12.000000000 +0200
  +++ .bash.local.rse	2004-07-10 10:17:13.000000000 +0200
  @@ -0,0 +1,12 @@
  +
  +case "${HOSTNAME:-`hostname`}" in
  +    *.dev.de.cw.net | *.engelschall.com                   ) activate_openpkg /usr/opkg ;;
  +    *.eu.cw.net | *.eu.cw.com | *.de.cw.net | *.de.cw.com ) activate_openpkg /cw       ;;
  +esac
  +
  +#   the popular "practice gag" RSE likes since years ;-)
  +#   (understanding requires at least basic German language knowledge)
  +if [ "$USER" = .rse ]; then
  +    alias doch='root -l'
  +fi
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.bash_history
  ============================================================================
  $ cvs diff -u -r0 -r1.1 .bash_history
  --- /dev/null	2004-07-10 10:17:12.000000000 +0200
  +++ .bash_history	2004-07-10 10:17:13.000000000 +0200
  @@ -0,0 +1,205 @@
  +ll
  +lx
  +sync
  +vi .bashrc 
  +ll
  +lx
  +rm .ICEauthority .Xauthority .abook.*
  +ll
  +lx
  +rm .[a-z]*
  +lx
  +rm -rf .gimp-1.2 .icewm .mozilla .qt
  +lx
  +rm -rf .kde
  +ll
  +lx
  +cd .ssh/
  +ll
  +cd ..
  +ll
  +sync
  +cp ~rse/ROOTSHELL.d/.[a-z]* .
  +ls -l
  +lx
  +vi .bash_login 
  +vi .bashrc 
  +lx
  +ll .bash.d/
  +sync
  +#[] login by user unknown
  +vi .bash.d/util.bashrc 
  +vi .bashrc 
  +#[] login by user unknown
  +set
  +cd .bash.d/
  +ll
  +ls -l
  +type ls
  +ll
  +lx
  +#[] login by user unknown
  +ls -l
  +vi
  +vi .bashrc 
  +#[2004-06-29/22:08] login by user unknown
  +ls -l
  +vi .bashrc 
  +#[2004-06-29/22:08] login by user unknown
  +set
  +. .bash.d/util.bashrc 
  +set
  +vi .bashre
  +vi .bashrc 
  +ll .bash.d/util.bashrc 
  +vi .bashrc 
  +#[2004-06-29/22:09] login by user unknown
  +set
  +exec bash
  +set
  +#[2004-06-29/22:09] login by user unknown
  +vi .bashrc 
  +#[2004-06-29/22:10] login by user unknown
  + set +x
  +. /u/test/.bash.d/util.bashrc
  +set
  +vi .bashrc 
  +ls -la
  +#[2004-06-29/22:10] login by user unknown
  +vi .bashrc 
  +#[2004-06-29/22:11] login by user unknown
  +id
  +set
  +vi .bashrc 
  +#[] login by user unknown
  +vi .bash.d/util.bashrc 
  +vi .bash.d/platform.bashrc 
  +ll
  +#[] login by user unknown
  +cd .bash.d/
  +ls -l
  +cd
  +echo $TERM
  +type cd
  +cd
  +cd /tmp/
  +cd -
  +vi ~/.bashrc 
  +vi /u/rse/.bashrc 
  +ls -l
  +-
  ++
  +cd /tmp/
  +-
  ++
  +..
  ++
  +-
  ++
  +.
  +..
  +ll
  +ls -l
  +type ll
  +type ls
  +vi .bashrc 
  +ls -l
  +ls -l
  +lx
  +ll
  +ls
  +type ls
  +type llx
  +type lx
  +type lo
  +type ll
  +type ls
  +type cmd_ls
  +vi ~/.bash.d/ls.bashrc 
  +ll
  +ls -l
  +ls
  +ls -l
  +lx
  +ls -l
  +ls -l ~/
  +ls -l /tmp/
  +ls /tmp/
  +lx /tmp/
  +ll /usr/bin/
  +lx /tmp/
  +echo $TERM_COLOR
  +vi .bash.d/term.bashrc 
  +vi .bash.d/platform.bashrc 
  +echo $OSNAME
  +ls -l
  +ls -l /usr/bin/
  +echo $OSNAME
  +echo $OSTYPE
  +vi /u/rse/.bashrc 
  +ls -l
  +ls -la
  +lx
  +lx 
  +lx  .bash.d/
  +ll
  +sync
  +ll
  +cat bash.d/*.bashrc >x
  +ls -l
  +cat .bash.d/*.bashrc >x
  +ll x
  +ls -l
  +vi x
  +ls -l
  +sync
  +rm x
  +ls -l
  +lx
  +vi .bash.d/ls.bashrc 
  +type ls
  +type cmd_ls
  +ls -l >x
  +vi x
  +ls -l
  +echo $OSNAME
  +ls -l
  +rm x
  +vi .bash.d/ls.bashrc 
  +ls -l
  +vi .bash.d/ls.bashrc 
  +uue list
  +uue load
  +uue load 
  +uue load ls
  +uue -v load ls
  +uue list
  +uue load
  +uue load all
  +uue -v load all
  +ls -l
  +ls -l
  +echo ~/.due
  +ls -l
  +ls -l .due
  +ls -l .due
  +pwd
  +cd ..
  +vi .due/*
  +vi .duerc 
  +env
  +env |grep DUE
  +set
  +set |grep DUE
  +lx
  +find .
  +sync
  +ll
  +lx
  +vi .vimrc 
  +vi
  +ls -l
  +type vi
  +vi
  +type vi
  +echo $EDITOR
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.bash_login
  ============================================================================
  $ cvs diff -u -r0 -r1.1 .bash_login
  --- /dev/null	2004-07-10 10:17:12.000000000 +0200
  +++ .bash_login	2004-07-10 10:17:13.000000000 +0200
  @@ -0,0 +1,40 @@
  +##
  +##  OSSP uue - Unified User Environment
  +##  Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1994-2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP uue, a set of user configuration
  +##  files which can found at http://www.ossp.org/pkg/tool/uue/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  ~/.bash_login: GNU Bash login-shell configuration
  +##
  +
  +#   path to bash environment init script
  +BASH_ENV=$HOME/.bashrc
  +
  +#   source the standard environment script
  +. $BASH_ENV
  +
  +#   welcome and goodbye
  +echo "$HOSTNAME: user $USER (${SSHUSER:-unknown}), login at `date`"
  +echo "#[`date '+%Y-%m-%d/%H:%M'`] login by user ${SSHUSER:-unknown}" >>$HISTFILE
  +trap 'echo "$HOSTNAME: user $USER (${SSHUSER:-unknown}), logout at `date`"' 0
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.bashrc
  ============================================================================
  $ cvs diff -u -r0 -r1.1 .bashrc
  --- /dev/null	2004-07-10 10:17:12.000000000 +0200
  +++ .bashrc	2004-07-10 10:17:13.000000000 +0200
  @@ -0,0 +1,34 @@
  +##
  +##  OSSP due - Dynamic User Environment
  +##  Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1994-2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP due, a dynamic user environment
  +##  which can found at http://www.ossp.org/pkg/tool/due/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  ~/.bashrc: GNU Bash sub-shell configuration
  +##
  +
  +source ~/.duerc
  +due -v load all -local
  +
  +umask 022
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.cshrc
  ============================================================================
  $ cvs diff -u -r0 -r1.1 .cshrc
  --- /dev/null	2004-07-10 10:17:12.000000000 +0200
  +++ .cshrc	2004-07-10 10:17:13.000000000 +0200
  @@ -0,0 +1,38 @@
  +##
  +##  OSSP uue - Unified User Environment
  +##  Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1994-2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP uue, a set of user configuration
  +##  files which can found at http://www.ossp.org/pkg/tool/uue/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  ~/.cshrc -- C-Shell minimum GNU Bash wrapper
  +##
  +
  +#   system C-shell to GNU Bash upgrade
  +#   in case of interactive C-shell only to make sure that
  +#   C-shell based scripts are not executed with GNU Bash
  +if ( $?prompt == 1 ) then
  +    if ( $prompt != "" && -f /usr/opkg/bin/bash ) then
  +        /usr/opkg/bin/bash -c : && exec /usr/opkg/bin/bash $argv[*]
  +    endif
  +endif
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.due/due.cd.sh
  ============================================================================
  $ cvs diff -u -r0 -r1.1 due.cd.sh
  --- /dev/null	2004-07-10 10:17:15.000000000 +0200
  +++ due.cd.sh	2004-07-10 10:17:15.000000000 +0200
  @@ -0,0 +1,89 @@
  +##
  +##  OSSP due - Dynamic User Environment
  +##  Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1994-2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP due, a dynamic user environment
  +##  which can found at http://www.ossp.org/pkg/tool/due/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  cd: DUE module for enhanced change directory command
  +##
  +
  +#   hook into cd command to adjust environment
  +function cd () {
  +    #   change current working directory
  +    if [ ".$1" = .- ]; then
  +        #   go to previous working directory on forward directory stack
  +        #   and move this directory onto the reverse directory stack
  +        if [ ${#DIRSTACK[*]} -gt 1 ]; then
  +            DIRSTACKREV[${#DIRSTACKREV[*]}]="${DIRSTACK[0]}"
  +            builtin popd >/dev/null
  +        else
  +            echo "cd: no more previous working directories on forward directory stack" 1>&2
  +            return 1
  +        fi
  +    elif [ ".$1" = .+ ]; then
  +        #   go to previous working directory on reverse directory stack
  +        #   and move this directory onto the forward directory stack
  +        if [ ${#DIRSTACKREV[*]} -gt 0 ]; then
  +            local i=$((${#DIRSTACKREV[*]} - 1))
  +            eval "builtin pushd ${DIRSTACKREV[$i]} >/dev/null"
  +            unset DIRSTACKREV[$i]
  +        else
  +            echo "cd: no more previous working directories on reverse directory stack" 1>&2
  +            return 1
  +        fi
  +    else
  +        #   go to next working directory
  +        #   and move this directory onto the forward directory stack
  +        if [ $# -eq 0 ]; then
  +            set -- $HOME
  +        fi
  +        pushd ${1+"$@"} >/dev/null
  +        if [ "${#DIRSTACK[*]}" -ge 2 -a "${DIRSTACK[0]}" = "${DIRSTACK[1]}" ]; then
  +            builtin popd >/dev/null
  +        fi
  +        DIRSTACKREV=()
  +    fi
  +
  +    #   adjust the command-line prompt with new $PWD (always)
  +    PS1="\\u@\\h:$PWD\n\\\$ "
  +
  +    #   adjust the X11 terminal window title with new $PWD (optional)
  +    case "$TERM" in
  +        xterm | xterm-* )
  +            echo -n $'\e]0;'"$USER@$HOSTNAME:$PWD"$'\cg'
  +            ;;
  +    esac
  +}
  +
  +#   initially adjust the environment
  +cd $PWD
  +PS2="> "
  +
  +#   provide convenience shortcuts
  +alias -- +='cd +'
  +alias -- -='cd -'
  +alias -- ..='cd ..'
  +
  +#   auto-correct small errors in given directory names
  +shopt -s cdspell
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.due/due.editor.sh
  ============================================================================
  $ cvs diff -u -r0 -r1.1 due.editor.sh
  --- /dev/null	2004-07-10 10:17:15.000000000 +0200
  +++ due.editor.sh	2004-07-10 10:17:15.000000000 +0200
  @@ -0,0 +1,63 @@
  +##
  +##  OSSP due - Dynamic User Environment
  +##  Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1994-2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP due, a dynamic user environment
  +##  which can found at http://www.ossp.org/pkg/tool/due/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  editor: DUE module for smart editor/pager handling
  +##
  +
  +#   requires "util" module
  +due load util
  +
  +#   determine best editor
  +export EDITOR
  +set -x
  +EDITOR=`find_tool vim vi`
  +if [ ".$EDITOR" = .vim ]; then
  +    alias vi=vim
  +    alias pi='vim "+set patchmode=.orig"'
  +fi
  +if [ ".$TERM" != ".$TERM_COLOR" ]; then
  +    case "$EDITOR" in
  +        /* ) ;;
  +        * ) eval "function $EDITOR () { TERM=\$TERM_COLOR command $EDITOR \${1+\"\$@\" }" ;;
  +    esac
  +fi
  +set +x
  +
  +#   determine best pager
  +export PAGER
  +PAGER=`find_tool less more`
  +if [ ".$PAGER" = .less ]; then
  +    PAGER="$PAGER -E -r"
  +    alias more="$PAGER"
  +    export LESSOPEN
  +    LESSOPEN=`find_tool lesspipe`
  +    if [ -n "$LESSOPEN" ]; then
  +        LESSOPEN="|$LESSOPEN %s"
  +    else
  +        unset LESSOPEN
  +    fi
  +fi
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.due/due.ff.sh
  ============================================================================
  $ cvs diff -u -r0 -r1.1 due.ff.sh
  --- /dev/null	2004-07-10 10:17:15.000000000 +0200
  +++ due.ff.sh	2004-07-10 10:17:15.000000000 +0200
  @@ -0,0 +1,40 @@
  +##
  +##  OSSP due - Dynamic User Environment
  +##  Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1994-2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP due, a dynamic user environment
  +##  which can found at http://www.ossp.org/pkg/tool/due/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  ff: DUE module for finding files
  +##
  +
  +function ff () {
  +    if [ $? -eq 0 ]; then
  +        echo "Usage: ff <file-glob> <directory>" 1>&2
  +        return 1
  +    fi
  +    local file=$1; shift
  +    local dir=$2;  shift
  +    find "$dir" -name "*${file}*" -type f -print
  +    return 0
  +}
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.due/due.local.sh
  ============================================================================
  $ cvs diff -u -r0 -r1.1 due.local.sh
  --- /dev/null	2004-07-10 10:17:15.000000000 +0200
  +++ due.local.sh	2004-07-10 10:17:16.000000000 +0200
  @@ -0,0 +1,41 @@
  +##
  +##  OSSP due - Dynamic User Environment
  +##  Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1994-2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP due, a dynamic user environment
  +##  which can found at http://www.ossp.org/pkg/tool/due/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  local: DUE module for loading local override configurations
  +##
  +
  +#   optionally allow shared local modifications
  +if [ -f ~/.bashrc.local.$USER ]; then
  +    . ~/.bashrc.local.$USER
  +elif [ -f ~/.bashrc.local ]; then
  +    . ~/.bashrc.local
  +fi
  +
  +#   optionally allow user-specific local modifications
  +if [ -n "$SSHUSER" -a -f ~/.bashrc.local.$SSHUSER ]; then
  +    . ~/.bashrc.local.$SSHUSER
  +fi
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.due/due.ls.sh
  ============================================================================
  $ cvs diff -u -r0 -r1.1 due.ls.sh
  --- /dev/null	2004-07-10 10:17:15.000000000 +0200
  +++ due.ls.sh	2004-07-10 10:17:16.000000000 +0200
  @@ -0,0 +1,61 @@
  +##
  +##  OSSP due - Dynamic User Environment
  +##  Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1994-2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP due, a dynamic user environment
  +##  which can found at http://www.ossp.org/pkg/tool/due/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  ls: DUE module for enhanced list directory command
  +##
  +
  +#   ls command which enables color sequences and automatic paging
  +#   if the output is connected to the interactive terminal.
  +function ls () { 
  +    local prolog=""
  +    local cmd="command ls"
  +    local opt=""
  +    local arg="\${1+\"\$@\"}"
  +    local epilog=""
  +    if [ -t /dev/stdout ]; then
  +        if [ ".$TERM" != ".$TERM_COLOR" ]; then
  +            prolog="TERM=\$TERM_COLOR $prolog"
  +        fi
  +        if [ ".$OSNAME" = .FreeBSD ]; then
  +            prolog="$prolog CLICOLOR=1 CLICOLOR_FORCE=1"
  +            opt="-C"
  +            epilog="| /usr/bin/less -E -r"
  +        elif [ ".$OSNAME" = .Linux ]; then
  +            opt="--color=always"
  +            epilog="| /usr/bin/less -X -E -r -s | grep -v '^.\\[m'"
  +        elif [ ".$OSNAME" = .SunOS -a -f /bin/less ]; then
  +            epilog="| /bin/less -E -r"
  +        elif [ ".$PAGER" = .less ]; then
  +            epilog="| less -E -r"
  +        fi
  +    fi
  +    eval "$prolog $cmd $opt $arg $epilog"
  +}
  +
  +#   some convenience commands
  +alias ll="ls -l"
  +alias lx="ls -l -a -o"
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.due/due.platform.sh
  ============================================================================
  $ cvs diff -u -r0 -r1.1 due.platform.sh
  --- /dev/null	2004-07-10 10:17:15.000000000 +0200
  +++ due.platform.sh	2004-07-10 10:17:16.000000000 +0200
  @@ -0,0 +1,66 @@
  +##
  +##  OSSP due - Dynamic User Environment
  +##  Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1994-2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP due, a dynamic user environment
  +##  which can found at http://www.ossp.org/pkg/tool/due/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  platform: DUE module for platform specifics
  +##
  +
  +#   requires "util" module
  +due load util
  +
  +#   determine name of operating system
  +OSNAME=`echo "$OSTYPE" | sed -e 's;^\([a-zA-Z][a-zA-Z]*\).*$;\1;'`
  +OSVEND=unknown
  +
  +#   adjust platform specific base run-time environment
  +case $OSTYPE in
  +    FreeBSD* )
  +        PATH="/bin:/usr/bin:/sbin:/usr/sbin"
  +        LD_LIBRARY_PATH="/usr/lib:/usr/lib/compat"
  +        MANPATH="/usr/share/man"
  +        ;;
  +    Linux* )
  +        PATH="/bin:/usr/bin:/sbin:/usr/sbin"
  +        LD_LIBRARY_PATH="/lib:/usr/lib"
  +        MANPATH="/usr/man:/usr/share/man"
  +        if   [ -f /etc/fedora-release ]; then OSVEND=Fedora
  +        elif [ -f /etc/redhat-release ]; then OSVEND=RedHat
  +        elif [ -f /etc/debian_version ]; then OSVEND=Debian
  +        elif [ -f /etc/SuSE-release   ]; then OSVEND=SuSE
  +        fi
  +        ;;
  +    SunOS* ) 
  +        PATH="/usr/bin:/usr/ccs/bin:/usr/sbin:/sbin"
  +        LD_LIBRARY_PATH="/usr/lib:/usr/ccs/lib"
  +        MANPATH="/usr/share/man"
  +        ;;
  +    * )
  +        PATH=`find_path : /bin /usr/bin /sbin /usr/sbin /usr/ccs/bin`
  +        LD_LIBRARY_PATH=`find_path : /lib /usr/lib /usr/ccs/lib`
  +        MANPATH=`find_path : /usr/man /usr/share/man`
  +        ;;
  +esac
  +activate_generic /usr/X11R6 /usr/X11 /usr/openwin
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.due/due.recue.sh
  ============================================================================
  $ cvs diff -u -r0 -r1.1 due.recue.sh
  --- /dev/null	2004-07-10 10:17:15.000000000 +0200
  +++ due.recue.sh	2004-07-10 10:17:16.000000000 +0200
  @@ -0,0 +1,84 @@
  +##
  +##  OSSP due - Dynamic User Environment
  +##  Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1994-2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP due, a dynamic user environment
  +##  which can found at http://www.ossp.org/pkg/tool/due/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  editor: DUE module for rescue command
  +##
  +
  +#   system rescue facility
  +function rescue () {
  +    local cmd="$1"
  +    shift
  +    case "$cmd" in
  +        on )
  +            rescue_time="${1:-10}"
  +            echo "++ scheduling rescue through system reboot in ${rescue_time} minutes"
  +            case $OSTYPE in
  +                FreeBSD* )
  +                    echo "/sbin/shutdown -r now" | at -q r +${rescue_time} minutes >/dev/null
  +                    ;;
  +                Linux* )
  +                    echo "/sbin/shutdown -r now" | at -q r +${rescue_time} minutes >/dev/null
  +                    ;;
  +                SunOS* )
  +                    echo "/usr/sbin/shutdown -i6 -g0 -y" | at -q r now "+ ${rescue_time}minutes" >/dev/null
  +                    ;;
  +            esac
  +            ;;
  +        off )
  +            echo "++ cancelling rescue through system reboot"
  +            case $OSTYPE in
  +                FreeBSD* )
  +                    for id in `at -q r -l | grep -v "^Date" | awk '{ print $5; }'`; do
  +                        at -q r -d $id >/dev/null
  +                    done
  +                    ;;
  +                Linux* )
  +                    for id in `at -q r -l | awk '{ print $1; }'`; do
  +                        at -q r -d $id >/dev/null
  +                    done
  +                    ;;
  +                SunOS* )
  +                    for id in `at -q r -l | awk '{ print $1; }'`; do
  +                        at -r $id >/dev/null
  +                    done
  +                    ;;
  +            esac
  +            unset rescue_time
  +            ;;
  +        renew|new )
  +            echo "++ rescheduling rescue through system reboot in ${rescue_time} minutes"
  +            x=${rescue_time}
  +            rescue off >/dev/null || true
  +            rescue on ${x} >/dev/null
  +            ;;
  +        * )
  +            echo "Usage: rescue on [<minutes>]" 2>&1
  +            echo "Usage: rescue [re]new" 2>&1
  +            echo "Usage: rescue off" 2>&1
  +            ;;
  +    esac
  +}
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.due/due.root.sh
  ============================================================================
  $ cvs diff -u -r0 -r1.1 due.root.sh
  --- /dev/null	2004-07-10 10:17:15.000000000 +0200
  +++ due.root.sh	2004-07-10 10:17:16.000000000 +0200
  @@ -0,0 +1,150 @@
  +##
  +##  OSSP due - Dynamic User Environment
  +##  Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1994-2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP due, a dynamic user environment
  +##  which can found at http://www.ossp.org/pkg/tool/due/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  root: DUE module for root command execution
  +##
  +
  +#   generate shell script for re-evaluation of command arguments
  +#   input:  foo 'bar  baz' quux       (3 args)
  +#   output: "foo \"bar  baz\" quux"   (1 arg)
  +function _arg2sh () {
  +    local opt_e=no
  +    local opt_t=no
  +    local opt
  +    OPTIND=1
  +    while getopts et opt; do
  +        case ${opt} in
  +            e ) opt_e=yes ;;
  +            t ) opt_t=yes ;;
  +        esac
  +    done
  +    shift $(($OPTIND - 1))
  +    local cmd=""
  +    local arg
  +    for arg in "$@"; do
  +        #   NOTICE: there are three(!) escaping layers here:
  +        #   - escape layer 1: backticks (`..xx..`)
  +        #   - escape layer 2: quotes    ('..xx..')
  +        #   - escape layer 3: sed regex (s;..xx..;..xx..;)
  +        local orig=$arg
  +        if [ ${opt_e} = yes ]; then
  +            arg=`echo "@${arg}" | sed -e 's;^@;;' -e 's;\\\\;\\\\\\\\;g' -e 's;\\(["]\\);\\\\\\1;g'`
  +        elif [ ${opt_t} = yes ]; then
  +            arg=`echo "@${arg}" | sed -e 's;^@;;' -e 's;\\\\;\\\\\\\\;g' -e 's;\\(["!\$\`]\\);\\\\\\1;g'`
  +        fi
  +        local quote=no
  +        if [ "${arg}" != "${orig}" ]; then
  +            quote=yes
  +        else
  +            quote=`echo "@${arg}" | sed -e 's;^@.*[ 	].*\$;yes;' -e 's;^@.*;no;'`
  +        fi
  +        if [ ${quote} = yes ]; then
  +            arg=`echo "@${arg}" |\
  +                 sed -e 's;^@\([A-Z][A-Z0-9_]*\)=\(.*\)$;\1="\2";' \
  +                     -e 's;^@\(.*\)$;"\1";'`
  +        fi
  +        cmd="${cmd}${cmd:+ }${arg}"
  +    done
  +    printf "%s" "${cmd}" # intentionally not echo(1)
  +}
  +
  +#   generate shell script for re-evaluation of environment variables
  +#   input:  PATH HOME                     (2 args)
  +#   output: "PATH=\"...\"; HOME=\"...\""  (1 arg)
  +function _env2sh () {
  +    local cmd=""
  +    local arg
  +    for arg in "$@"; do
  +        local val
  +        eval "val=\"\$${arg}\""
  +        #   NOTICE: there are three(!) escaping layers here, too.
  +        val=`echo "@${val}" | sed -e 's;^@;;' -e 's;\\\\;\\\\\\\\;g' -e 's;\\(["!\$\`]\\);\\\\\\1;g'`
  +        cmd="${cmd}${cmd:+; }${arg}=\"${val}\""
  +    done
  +    printf "%s" "${cmd}" # intentionally not echo(1)
  +}
  +
  +#   smart dealing with temporary root privileges
  +function root () {
  +    #   default operation
  +    if [ $# -eq 0 ]; then
  +        set -- -i
  +    fi
  +       
  +    #   parse command line options
  +    local opt_i=no # interactive shell
  +    local opt_l=no # last command-line
  +    local opt_e=no # remote expansion mode
  +    local opt
  +    OPTIND=1
  +    while getopts ileh opt; do
  +        case ${opt} in
  +            i ) opt_i=yes ;;
  +            l ) opt_l=yes ;;
  +            e ) opt_e=yes ;;
  +            h ) echo "root:Usage: root [-h] [-l] [-e] command"; return 0 ;;
  +            ? ) echo "root:Error: invalid command line";        return 1 ;;
  +        esac
  +    done
  +    shift $(($OPTIND - 1))
  +
  +    #   determine action(s)
  +    local prolog=":"
  +    local epilog=":"
  +    local command
  +    if [ ${opt_i} = yes ]; then
  +        #   enter interactive session with root privileges
  +        local xtermcontrol=`find_tool xtermcontrol xtermcolors`
  +        if [ -n "${xtermcontrol}" ]; then
  +            prolog="${xtermcontrol} --cursor='#cc3333'"
  +            epilog="${xtermcontrol} --cursor='#000000'"
  +            command="PS1=\"\\[\\e[31;1m\\]\\u\\[\\e[0m\\]@\\h:\\w\\n\\\\\\$ \"; export PS1"
  +        fi
  +        command="${command}${command:+; }exec ${SHELL} --norc --noprofile"
  +    elif [ ${opt_l} = yes -a ${opt_e} = yes ]; then
  +        eval "set -- $(builtin history 2 | sed -n -e '1p' | cut -c8-)"
  +        command=$(_arg2sh -e -- "$@")
  +    elif [ ${opt_l} = yes ]; then
  +        #   execute last command-line with root privileges
  +        command=$(builtin history 2 | sed -n -e '1p' | cut -c8-)
  +    elif [ ${opt_e} = yes ]; then
  +        #   execute given command-line with root privileges (expansion mode)
  +        command=$(_arg2sh -e -- "$@")
  +    else
  +        #   execute given command-line with root privileges (transparent mode)
  +        command=$(_arg2sh -t -- "$@")
  +    fi
  +
  +    #   generate action command
  +    local cmd=$(_env2sh ${ROOT_ENV:-PATH MANPATH INFOPATH LD_LIBRARY_PATH TERM HOME EDITOR PAGER LOGNAME USER})
  +    cmd="${cmd}; cd ${PWD} && ${command}"
  +    cmd=$(_arg2sh -t -- "${cmd}")
  +    eval ${prolog}; ssh -t -q -x root@${HOSTNAME} ${SHELL} -c "${cmd}"; rv=$?; eval ${epilog}
  +
  +    #   exit with return value of remote command 
  +    return $rv
  +}
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.due/due.term.sh
  ============================================================================
  $ cvs diff -u -r0 -r1.1 due.term.sh
  --- /dev/null	2004-07-10 10:17:15.000000000 +0200
  +++ due.term.sh	2004-07-10 10:17:16.000000000 +0200
  @@ -0,0 +1,75 @@
  +##
  +##  OSSP due - Dynamic User Environment
  +##  Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1994-2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP due, a dynamic user environment
  +##  which can found at http://www.ossp.org/pkg/tool/due/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  term: DUE module for terminal configuration
  +##
  +
  +#   require DUE "platform" module
  +due load platform
  +
  +#   determine terminal type
  +if [ -z TERM ]; then
  +    TERM=vt100
  +fi
  +TERM_COLOR=$TERM
  +if [ ".$TERM" = .xterm ]; then
  +    if [ ".$OSNAME" = .FreeBSD -o ".$OSNAME" = .Linux ]; then
  +        TERM_COLOR=xterm-color
  +    fi
  +fi
  +
  +#   adjust terminal settings
  +if expr $- : ".*i.*" >/dev/null; then
  +    mesg y
  +fi
  +if [ ".$TERM" = .xterm ]; then
  +    stty -istrip cs8
  +fi
  +shopt -s checkwinsize
  +
  +#   provide command for terminal reset
  +alias sane='(xset r rate 400 40; stty sane; eval `resize`) >/dev/null 2>&1 || true'
  +
  +#   adjust shell history settings
  +shopt -s histappend
  +shopt -s cmdhist
  +HISTSIZE=9000
  +HISTFILESIZE=9000
  +HISTIGNORE="&"
  +
  +#   provide command for rotating a little propeller for
  +#   keeping a remote connection busy and this way alive
  +function zz () {
  +    echo -n "Sleeping... "
  +    while [ 1 ]; do
  +        for i in "|" "/" "-" "\\"; do
  +            echo -n "$i"
  +            sleep 1
  +            echo -ne "\b"
  +        done
  +    done
  +}
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.due/due.util.sh
  ============================================================================
  $ cvs diff -u -r0 -r1.1 due.util.sh
  --- /dev/null	2004-07-10 10:17:15.000000000 +0200
  +++ due.util.sh	2004-07-10 10:17:17.000000000 +0200
  @@ -0,0 +1,158 @@
  +##
  +##  OSSP due - Dynamic User Environment
  +##  Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1994-2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP due, a dynamic user environment
  +##  which can found at http://www.ossp.org/pkg/tool/due/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  util: DUE module for shared utility functions
  +##
  +
  +function lookup () {
  +    #   options defaults
  +    local opt_d=no      # search for directory only
  +    local opt_f=no      # search for file only
  +    local opt_a=no      # return all occurrences instead of just first one
  +    local opt_b=no      # return basename of files only
  +    local opt_s=" "     # separator string when returning all occurrences
  +    local opt_p=${PATH} # directory path to search
  +    local opt_r=no      # recursive search inside paths
  +
  +    #   parse command-line options
  +    local opt
  +    OPTIND=1
  +    while getopts dfas:p:r opt; do
  +        case ${opt} in
  +            d ) opt_d=yes     ;;
  +            f ) opt_f=yes     ;;
  +            a ) opt_a=yes     ;;
  +            s ) opt_s=$OPTARG ;;
  +            p ) opt_p=$OPTARG ;;
  +            r ) opt_r=yes     ;;
  +        esac
  +    done
  +    shift $(($OPTIND - 1))
  +
  +    #   for all filenames...
  +    local result=""
  +    local file
  +    for file in "$@"; do
  +        #   ...iterate over all directories in the path...
  +        local topdir
  +        for topdir in ${opt_p//:/ }; do
  +            if [ ! -d ${topdir} ]; then
  +                continue
  +            fi
  +            if [ ${opt_r} = yes ]; then
  +                topdir=`find $topdir -type d -print`
  +            fi
  +            #   ...and optionally all its sub-directories...
  +            local dir
  +            local ifso="${IFS}"; IFS="\n"
  +            for dir in ${topdir}; do
  +                IFS="${ifso}"
  +                local flag="-e"
  +                if   [ ${opt_d} = yes ]; then
  +                    flag="-d"
  +                elif [ ${opt_f} = yes ]; then
  +                    flag="-f"
  +                fi
  +                if [ ${flag} ${dir}/${file} ]; then
  +                    if [ ${opt_b} = yes ]; then
  +                        result="${result}${result:+${opt_s}}${file}"
  +                    else
  +                        result="${result}${result:+${opt_s}}${dir}/${file}"
  +                    fi
  +                    if [ ${opt_a} = no ]; then
  +                        break
  +                    fi
  +                fi
  +            done
  +            IFS="${ifso}"
  +            if [ -n ${result} ]; then
  +                break
  +            fi
  +        done
  +        if [ -n ${result} ]; then
  +            break
  +        fi
  +    done
  +    return $result
  +}
  +
  +#   assemble existing directories
  +function find_path () {
  +    local sep="$1"
  +    shift
  +    local path=""
  +    local dir
  +    for dir in "$@"; do
  +        if [ -d $dir ]; then
  +            path="${path}${path:+$sep}${dir}"
  +        fi
  +    done
  +    echo "$path"
  +}
  +
  +#   lookup preferred tool in $PATH
  +function find_tool () {
  +    local tool=""
  +    local name
  +    for name in "$@"; do
  +        tool=`type -p $name`
  +        if [ -n $tool ]; then
  +            break
  +        fi
  +    done
  +    echo "$tool"
  +}
  +
  +#   locate and activate OpenPKG software instances
  +function activate_openpkg () {
  +    local prefix
  +    for prefix in "$@"; do
  +        if [ -d $prefix/etc/openpkg ]; then
  +            PATH="$PATH:$prefix/bin:$prefix/local/bin:$prefix/sbin:$prefix/local/sbin"
  +            LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$prefix/lib"
  +            MANPATH="$MANPATH:$prefix/man:$prefix/local/man"
  +        fi
  +    done
  +}
  +
  +#   locate and activate generic software instance
  +function activate_generic () {
  +    local prefix
  +    for prefix in "$@"; do
  +        if [ -d $prefix ]; then
  +            if [ -d $prefix/bin ]; then
  +                PATH="$PATH:$prefix/bin"
  +            fi
  +            if [ -d $prefix/lib ]; then
  +                LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$prefix/lib"
  +            fi
  +            if [ -d $prefix/man ]; then
  +                MANPATH="$MANPATH:$prefix/man"
  +            fi
  +        fi
  +    done
  +}
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.duerc
  ============================================================================
  $ cvs diff -u -r0 -r1.1 .duerc
  --- /dev/null	2004-07-10 10:17:12.000000000 +0200
  +++ .duerc	2004-07-10 10:17:13.000000000 +0200
  @@ -0,0 +1,159 @@
  +##
  +##  OSSP due - Dynamic User Environment
  +##  Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1994-2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP due, a dynamic user environment
  +##  which can found at http://www.ossp.org/pkg/tool/due/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  ~/.duerc: OSSP due run-command script
  +##
  +
  +#   global DUE variables holding names of available
  +#   and actually loaded modules
  +DUE_AVAILABLE=""
  +DUE_LOADED=""
  +
  +#   the DUE frontend command
  +function due () {
  +    #   parse command line
  +    local opt_h=no
  +    local opt_v=${DUE_VERBOSE:-no}
  +    local opt_p=""
  +    local opt
  +    OPTIND=1
  +    while getopts hvp: opt; do
  +        case ${opt} in
  +            h ) opt_h=yes     ;;
  +            v ) opt_v=yes     ;;
  +            p ) opt_p=$OPTARG ;;
  +        esac
  +    done
  +    shift $((${OPTIND} - 1))
  +    if [ ".${opt_h}" = .h ]; then
  +        echo "Usage: due [-h] [-v] [-p <module-path>] load [+|-]<module> ..."
  +        return 0
  +    fi
  +
  +    #   determine path to DUE modules
  +    local mod_path_system=""
  +    local mod_path="${DUE_PATH:-"$HOME/.due:@"}"
  +    if [ ".${opt_p}" != . ]; then
  +        mod_path="${opt_p}"
  +    fi
  +    mod_path=`echo "${mod_path}" |\
  +              sed -e "s;@;${mod_path_system};" |\
  +              sed -e 's/::/:/g' -e 's/^://' -e 's/:$//'`
  +
  +    #   determine available modules
  +    if [ -z ${DUE_AVAILABLE} ]; then
  +        local mod_dir
  +        for mod_dir in ${mod_path//:/ }; do
  +            [ ".${mod_dir}" = . ] && continue
  +            [ -d ${mod_dir} ] || continue
  +            local mod_name
  +            for mod_name in . `cd ${mod_dir} && echo due.*.sh`; do
  +                [ ".${mod_name}" = ".." -o ".${mod_name}" = ".*" ] && continue
  +                eval "DUE_AVAILABLE=\"${DUE_AVAILABLE}${DUE_AVAILABLE:+,}${mod_name}\""
  +            done
  +        done
  +    fi
  +
  +    #   dispatch into commands    
  +    cmd="$1"
  +    shift
  +    case "${cmd}" in
  +        load )
  +            #   by default all modules are disabled
  +            local mod_name
  +            for mod_name in ${DUE_AVAILABLE//,/ }; do
  +                eval "local mod_enable_${mod_name}=no"
  +            done
  +
  +            #   determine whether to enable or disable requested module(s)
  +            for mod_name in "$@"; do
  +                local val=yes
  +                case "${mod_name}" in
  +                    +* ) val=yes; mod_name=${mod_name:1} ;;
  +                    -* ) val=no;  mod_name=${mod_name:1} ;;
  +                esac
  +                if [ ".${mod_name}" = .all ]; then
  +                    for mod_name in ${DUE_AVAILABLE//,/ }; do
  +                        eval "mod_enable_${mod_name}=${val}"
  +                    done
  +                else
  +                    local exists
  +                    eval "exists=\${mod_enable_${mod_name}}"
  +                    if [ ".${exists}" = . ]; then
  +                        echo "due:ERROR: invalid module \"${mod_name}\"" 1>&2
  +                        return 1
  +                    fi
  +                    eval "mod_enable_${mod_name}=${val}"
  +                fi
  +            done
  +
  +            #   load enabled (and still not loaded) modules
  +            for mod_name in ${DUE_AVAILABLE//,/ }; do
  +                eval "val=\${mod_enable_${mod_name}}"
  +                if [ ".${val}" = .yes ]; then
  +                    local loadit=yes
  +                    for loaded in ${DUE_LOADED//,/ }; do
  +                        if [ ".${loaded}" = ".${mod_name}" ]; then
  +                            #   module already loaded
  +                            loadit=no
  +                            break
  +                        fi
  +                    done
  +                    if [ ".${loadit}" = .yes ]; then
  +                        local mod_file=""
  +                        local mod_dir
  +                        for mod_dir in ${mod_path//:/ }; do
  +                            [ ".${mod_dir}" = . ] && continue
  +                            if [ -f "${mod_dir}/${mod_name}" ]; then
  +                                mod_file="${mod_dir}/${mod_name}"
  +                                break
  +                            fi
  +                        done
  +                        if [ ".${mod_file}" = . ]; then
  +                            #   should not happen here again
  +                            echo "due:ERROR: invalid module \"${mod_name}\"" 1>&2
  +                            return 1
  +                        fi
  +                        local verbose=${DUE_VERBOSE}
  +                        DUE_VERBOSE=${opt_v}
  +                        source ${mod_file}
  +                        DUE_VERBOSE=${verbose}
  +                        DUE_LOADED="${DUE_LOADED}${DUE_LOADED:+,}${mod_name}"
  +                        if [ ".${opt_v}" = .yes ]; then
  +                            echo "due: loaded shell module \"${mod_name}\"" 1>&2
  +                        fi
  +                    fi
  +                fi
  +            done
  +            ;;
  +        * )
  +            echo "due:ERROR: invalid command \"${cmd}\"" 1>&2
  +            return 1
  +            ;;
  +    esac
  +    return 0
  +}
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.inputrc
  ============================================================================
  $ cvs diff -u -r0 -r1.1 .inputrc
  --- /dev/null	2004-07-10 10:17:12.000000000 +0200
  +++ .inputrc	2004-07-10 10:17:14.000000000 +0200
  @@ -0,0 +1,38 @@
  +##
  +##  OSSP uue - Unified User Environment
  +##  Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1994-2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP uue, a set of user configuration
  +##  files which can found at http://www.ossp.org/pkg/tool/uue/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  ~/.inputrc: GNU Readline configuration (used by GNU Bash)
  +##
  +
  +#   enable ISO-Latin-1 "umlaut" characters
  +set meta-flag             on
  +set convert-meta          off
  +set output-meta           on
  +
  +#   enable immediate TAB expansion
  +set show-all-if-ambiguous on
  +set overwrite-mode        on
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.profile
  ============================================================================
  $ cvs diff -u -r0 -r1.1 .profile
  --- /dev/null	2004-07-10 10:17:12.000000000 +0200
  +++ .profile	2004-07-10 10:17:14.000000000 +0200
  @@ -0,0 +1,34 @@
  +##
  +##  OSSP uue - Unified User Environment
  +##  Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1994-2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP uue, a set of user configuration
  +##  files which can found at http://www.ossp.org/pkg/tool/uue/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  ~/.profile -- Bourne-Shell minimum GNU Bash wrapper
  +##
  +
  +#   system Bourne-shell to GNU Bash upgrade
  +if [ -f /cw/bin/bash -a ".$BASH" = . ]; then
  +    /cw/bin/bash -c : && exec /cw/bin/bash ${1+"$@"}
  +fi
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.screenrc
  ============================================================================
  $ cvs diff -u -r0 -r1.1 .screenrc
  --- /dev/null	2004-07-10 10:17:12.000000000 +0200
  +++ .screenrc	2004-07-10 10:17:14.000000000 +0200
  @@ -0,0 +1,39 @@
  +##
  +##  OSSP uue - Unified User Environment
  +##  Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1994-2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP uue, a set of user configuration
  +##  files which can found at http://www.ossp.org/pkg/tool/uue/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  ~/.screenrc: GNU Screen configuration
  +##
  +
  +#   use the default escape sequence
  +escape ^Aa
  +
  +#   do not show any startup messages
  +startup_message off
  +
  +#   use an audio bell to avoid flickering screens
  +#   on repeated errors in Vim or Mutt
  +vbell off
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.viminfo
  ============================================================================
  $ cvs diff -u -r0 -r1.1 .viminfo
  --- /dev/null	2004-07-10 10:17:12.000000000 +0200
  +++ .viminfo	2004-07-10 10:17:14.000000000 +0200
  @@ -0,0 +1,35 @@
  +# This viminfo file was generated by Vim 6.3.
  +# You may edit it if you're careful!
  +
  +
  +# hlsearch on (H) or off (h):
  +~H
  +# Command Line History (newest to oldest):
  +:q!
  +:q
  +:help
  +:x
  +
  +# Search String History (newest to oldest):
  +
  +# Expression History (newest to oldest):
  +
  +# Input Line History (newest to oldest):
  +
  +# Input Line History (newest to oldest):
  +
  +# Registers:
  +""-	CHAR	0
  +	d
  +
  +# File marks:
  +
  +# Jumplist (newest first):
  +
  +# History of marks within files (newest to oldest):
  +
  +> /usr/opkg/share/vim/doc/help.txt
  +	"	35	2
  +
  +> /usr/opkg/share/vim/doc/quickref.txt
  +	"	8	9
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.vimrc
  ============================================================================
  $ cvs diff -u -r0 -r1.1 .vimrc
  --- /dev/null	2004-07-10 10:17:12.000000000 +0200
  +++ .vimrc	2004-07-10 10:17:14.000000000 +0200
  @@ -0,0 +1,169 @@
  +"##
  +"##  OSSP uue - Unified User Environment
  +"##  Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
  +"##  Copyright (c) 1994-2004 The OSSP Project <http://www.ossp.org/>
  +"##
  +"##  This file is part of OSSP uue, a set of user configuration
  +"##  files which can found at http://www.ossp.org/pkg/tool/uue/
  +"##
  +"##  Permission to use, copy, modify, and distribute this software for
  +"##  any purpose with or without fee is hereby granted, provided that
  +"##  the above copyright notice and this permission notice appear in all
  +"##  copies.
  +"##
  +"##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +"##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +"##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +"##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +"##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +"##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +"##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +"##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +"##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +"##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +"##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +"##  SUCH DAMAGE.
  +"##
  +"##  ~/.vimrc: Vi-IMproved (VIM) configuration
  +"##  vi: set tabstop=4 shiftwidth=4:
  +"##
  +
  +version 6.0
  +
  +"   Remove ALL autocommands.
  +:autocmd! 
  +
  +"   Always insert tabs as spaces (only exception are Makefiles) 
  +"   but preserve already existing tabs in order to not destroy existing content.
  +set expandtab
  +autocmd BufRead Makefile,Makefile.* set noexpandtab
  +
  +"   Display 8-bit characters
  +set graphic
  +
  +"   Avoid "Thanks for Flying Vim" titles in xterm and
  +"   set the X11 icon to the name of Vim instead of xterm.
  +set notitle
  +set icon
  +
  +"   Check first 6 lines for Vi set commands (e.g. 'vi:set tabstop=4 shiftwidth=4').
  +set modeline
  +set modelines=6
  +
  +"   No automatic write of files, i.e. I KNOW WHAT I DO! At least most of the time ;-)
  +set noautowrite
  +
  +"   Always use my login shell (GNU Bash) for sub-shells.
  +set shell=$SHELL
  +
  +"   Create .bak files only while saving. If current dir is not
  +"   allowed to create the file, save it under the backup dir.
  +set nobackup
  +set writebackup
  +set backupdir=$HOME/tmp
  +
  +"   Write swap files (*.swp) to this dir if not allowed at the current one.
  +set directory=$HOME/tmp
  +
  +"   Don't beep for every silly command and write shorter messages.
  +set noerrorbells
  +set terse
  +
  +"   Read/write a .viminfo file, but don't store more than 50 lines of registers.
  +set viminfo='20,\"50
  +
  +"   Show command and modes.
  +set showcmd
  +set showmode
  +
  +"   Display a status line plus a single-line command line
  +"   and always tell me where I'm inside the file.
  +set laststatus=2
  +set cmdheight=1
  +set ruler
  +
  +"   Do incremental search with smart case sensitivity behavior.
  +set incsearch
  +set smartcase
  +
  +"   Allow virtual editing in Visual block mode.
  +set virtualedit=block
  +
  +"   Always expand windows to the maximum height, but expand only to the
  +"   minimum width of 80 characters per line. Also, create new windows
  +"   below current one.
  +set winheight=9999
  +set winwidth=80
  +set splitbelow
  +
  +"   Do not wrap lines (neither implicitly on display nor explicitly
  +"   during editing), except for real text files. Also, shift a minimum
  +"   of 4 chars left/right if we go over the right/left border.
  +set textwidth=9999
  +autocmd BufRead *.txt,*.tex,*.xml set textwidth=78
  +set nowrap
  +set shiftwidth=4
  +
  +"   Always indent new lines the same as the last one.
  +"   Also, use a C-programmer-style smart tab editing.
  +set autoindent
  +set smartindent
  +set tabstop=4
  +
  +"	Make Y analogous to C and D for orthogonality
  +map Y y$
  +
  +"   Allow us to backspace back over lines in insert mode and also
  +"   to go back over the starting point.
  +set backspace=2
  +
  +"   Command line uses more Bash style editing
  +cnoremap <C-A>      <Home>
  +cnoremap <C-F>      <Right>
  +cnoremap <C-B>      <Left>
  +cnoremap <ESC>b     <S-Left>
  +cnoremap <ESC>f     <S-Right>
  +cnoremap <ESC><C-H> <C-W>
  +
  +"   Vim and other tools inside an xterm think Delete key is <backspace> 
  +"   and Backspace key is <delete> but we cannot just swap them. In
  +"   Vim this swapping doesn't work and via xmodmap other X11 applications
  +"   would be affected, too. So we the following: We map Delete to CTRL-D
  +"   for the XTerms via xrdb and then remap the keys here in Vim.
  +imap  <Esc>lxi
  +imap  <Esc>OD
  +
  +"   Make qualified cursor keys the same as non-qualfied cursor keys
  +"   in order to avoid typing problems in case I'm lazy releasing the
  +"   qualifying keys (shift, control, alt).
  +map  <Esc>[1;2A <Esc>OA 
  +map  <Esc>[1;2B <Esc>OB 
  +map  <Esc>[1;2C <Esc>OC 
  +map  <Esc>[1;2D <Esc>OD 
  +map  <Esc>[1;3A <Esc>OA 
  +map  <Esc>[1;3B <Esc>OB 
  +map  <Esc>[1;3C <Esc>OC 
  +map  <Esc>[1;3D <Esc>OD 
  +map  <Esc>[1;5A <Esc>OA 
  +map  <Esc>[1;5B <Esc>OB 
  +map  <Esc>[1;5C <Esc>OC 
  +map  <Esc>[1;5D <Esc>OD 
  +imap <Esc>[1;2A <Esc>OA
  +imap <Esc>[1;2B <Esc>OB
  +imap <Esc>[1;2C <Esc>OC
  +imap <Esc>[1;2D <Esc>OD
  +imap <Esc>[1;3A <Esc>OA
  +imap <Esc>[1;3B <Esc>OB
  +imap <Esc>[1;3C <Esc>OC
  +imap <Esc>[1;3D <Esc>OD
  +imap <Esc>[1;5A <Esc>OA
  +imap <Esc>[1;5B <Esc>OB
  +imap <Esc>[1;5C <Esc>OC
  +imap <Esc>[1;5D <Esc>OD
  +
  +"   Provide CTRL-G as an alias for CTRL-] (the jump forward key) because
  +"   on a german keyboard CTRL-] is horrible to type, it is a free
  +"   keystroke, it is located closer to CTRL-T (the jump back key) and
  +"   "G" can be more easily remembered by thinking "go to".
  +map <C-G> <C-]>
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/README
  ============================================================================
  $ cvs diff -u -r0 -r1.1 README
  --- /dev/null	2004-07-10 10:17:12.000000000 +0200
  +++ README	2004-07-10 10:17:14.000000000 +0200
  @@ -0,0 +1,48 @@
  +
  +   _        ___  ____ ____  ____                _     _
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _   _ _   _(_) __| |
  +  _|_||_| | | | \___ \___ \| |_) | | | | | | | | |/ _` |
  + |_||_|_| | |_| |___) |__) |  __/  | |_| | |_| | | (_| |
  +  |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
  +
  +  OSSP uue - Unified User Environment
  +  Version 0.9.0 (06-Jul-2004)
  +
  +  ABSTRACT
  +
  +  OSSP uue is ...
  +
  +  COPYRIGHT AND LICENSE
  +
  +  Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 1994-2004 The OSSP Project <http://www.ossp.org/>
  +
  +  This file is part of OSSP uue, a set of user configuration
  +  files which can found at http://www.ossp.org/pkg/tool/uue/
  +
  +  Permission to use, copy, modify, and distribute this software for
  +  any purpose with or without fee is hereby granted, provided that
  +  the above copyright notice and this permission notice appear in all
  +  copies.
  +
  +  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +  SUCH DAMAGE.
  +
  +  HOME AND DOCUMENTATION
  +
  +  The documentation and latest release can be found on
  +
  +  o http://www.ossp.org/pkg/tool/uue/
  +  o  ftp://ftp.ossp.org/pkg/tool/uue/
  +
  +
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jul 10 10:23:59 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 16D7E76358; Sat, 10 Jul 2004 10:23:59 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/due/ README TODO VERSION
Message-Id: <20040710082359.16D7E76358@mail.ossp.org>
Date: Sat, 10 Jul 2004 10:23:59 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Jul-2004 10:23:58
  Branch: HEAD                             Handle: 2004071009235800

  Added files:
    ossp-pkg/due            TODO VERSION
  Modified files:
    ossp-pkg/due            README

  Log:
    more files

  Summary:
    Revision    Changes     Path
    1.2         +14 -14     ossp-pkg/due/README
    1.1         +1  -0      ossp-pkg/due/TODO
    1.1         +6  -0      ossp-pkg/due/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/README
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 README
  --- ossp-pkg/due/README	10 Jul 2004 08:17:12 -0000	1.1
  +++ ossp-pkg/due/README	10 Jul 2004 08:23:58 -0000	1.2
  @@ -1,24 +1,25 @@
  +   _        ___  ____ ____  ____        _ 
  +  |_|_ _   / _ \/ ___/ ___||  _ \    __| |_   _  ___
  +  _|_||_| | | | \___ \___ \| |_) |  / _` | | | |/ _ \
  + |_||_|_| | |_| |___) |__) |  __/  | (_| | |_| |  __/
  +  |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|\___|
   
  -   _        ___  ____ ____  ____                _     _
  -  |_|_ _   / _ \/ ___/ ___||  _ \   _   _ _   _(_) __| |
  -  _|_||_| | | | \___ \___ \| |_) | | | | | | | | |/ _` |
  - |_||_|_| | |_| |___) |__) |  __/  | |_| | |_| | | (_| |
  -  |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
  -
  -  OSSP uue - Unified User Environment
  -  Version 0.9.0 (06-Jul-2004)
  +  OSSP due - Dynamic User Environment
  +  Version 0.8.0 (10-Jul-2004)
   
     ABSTRACT
   
  -  OSSP uue is ...
  +  OSSP due is a unified and dynamic GNU Bash shell and Vim editor user
  +  environment providing reusable functionalities which proofed to be
  +  useful in practice.
   
     COPYRIGHT AND LICENSE
   
     Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
     Copyright (c) 1994-2004 The OSSP Project <http://www.ossp.org/>
   
  -  This file is part of OSSP uue, a set of user configuration
  -  files which can found at http://www.ossp.org/pkg/tool/uue/
  +  This file is part of OSSP due, a dynamic user environment
  +  which can found at http://www.ossp.org/pkg/tool/due/
   
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
  @@ -42,7 +43,6 @@
   
     The documentation and latest release can be found on
   
  -  o http://www.ossp.org/pkg/tool/uue/
  -  o  ftp://ftp.ossp.org/pkg/tool/uue/
  -
  +  o http://www.ossp.org/pkg/tool/due/
  +  o  ftp://ftp.ossp.org/pkg/tool/due/
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/TODO
  ============================================================================
  $ cvs diff -u -r0 -r1.1 TODO
  --- /dev/null	2004-07-10 10:23:58.000000000 +0200
  +++ TODO	2004-07-10 10:23:58.000000000 +0200
  @@ -0,0 +1 @@
  +- colorizing diff, cvs, ls
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/VERSION
  ============================================================================
  $ cvs diff -u -r0 -r1.1 VERSION
  --- /dev/null	2004-07-10 10:23:58.000000000 +0200
  +++ VERSION	2004-07-10 10:23:58.000000000 +0200
  @@ -0,0 +1,6 @@
  +
  +  VERSION -- Version Information for unknown (syntax: Text)
  +  [automatically generated and maintained by GNU shtool]
  +
  +  This is unknown, Version 0.8.0 (10-Jul-2004)
  +
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jul 10 10:27:04 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CC85E76358; Sat, 10 Jul 2004 10:27:03 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/due/ VERSION devtool devtool.conf devtool.func
Message-Id: <20040710082703.CC85E76358@mail.ossp.org>
Date: Sat, 10 Jul 2004 10:27:03 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Jul-2004 10:27:03
  Branch: HEAD                             Handle: 2004071009270200

  Added files:
    ossp-pkg/due            devtool devtool.conf devtool.func
  Modified files:
    ossp-pkg/due            VERSION

  Log:
    add devtool stuff and fix VERSION

  Summary:
    Revision    Changes     Path
    1.2         +2  -2      ossp-pkg/due/VERSION
    1.1         +47 -0      ossp-pkg/due/devtool
    1.1         +39 -0      ossp-pkg/due/devtool.conf
    1.1         +73 -0      ossp-pkg/due/devtool.func
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/VERSION
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 VERSION
  --- ossp-pkg/due/VERSION	10 Jul 2004 08:23:58 -0000	1.1
  +++ ossp-pkg/due/VERSION	10 Jul 2004 08:27:02 -0000	1.2
  @@ -1,6 +1,6 @@
   
  -  VERSION -- Version Information for unknown (syntax: Text)
  +  VERSION -- Version Information for OSSP due (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is unknown, Version 0.8.0 (10-Jul-2004)
  +  This is OSSP due, Version 0.8.0 (10-Jul-2004)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/devtool
  ============================================================================
  $ cvs diff -u -r0 -r1.1 devtool
  --- /dev/null	2004-07-10 10:27:03.000000000 +0200
  +++ devtool	2004-07-10 10:27:03.000000000 +0200
  @@ -0,0 +1,47 @@
  +#!/bin/sh
  +##
  +##  devtool -- Development Tool
  +##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  +##
  +
  +if [ $# -eq 0 ]; then
  +    echo "devtool:USAGE: devtool <command> [<arg> ...]" 1>&2
  +    exit 1
  +fi
  +
  +cmd="$1"
  +shift
  +
  +devtoolfunc="./devtool.func"
  +
  +if [ ! -f devtool.conf ]; then
  +    echo "devtool:ERROR: no devtool.conf in current directory" 1>&2
  +    exit 1
  +fi
  +
  +cmdline=`grep "^%$cmd" devtool.conf`
  +if [ ".$cmdline" = . ]; then
  +    echo "devtool:ERROR: command $cmd not found in devtool.conf" 1>&2
  +    exit 1
  +fi
  +
  +if [ ".$TMPDIR" != . ]; then
  +    tmpdir="$TMPDIR"
  +elif [ ".$TEMPDIR" != . ]; then
  +    tmpdir="$TEMPDIR"
  +else
  +    tmpdir="/tmp"
  +fi
  +tmpfile="$tmpdir/rc.$$.tmp"
  +
  +rm -f $tmpfile
  +touch $tmpfile
  +echo ". $devtoolfunc" >>$tmpfile
  +( sed <devtool.conf -e "1,/^%common/d" -e '/^%.*/,$d'
  +  sed <devtool.conf -e "1,/^%$cmd/d" -e '/^%.*/,$d' ) |\
  +sed -e 's;\([ 	]\)@\([a-zA-Z_][a-zA-Z0-9_]*\);\1devtool_\2;' >>$tmpfile
  +
  +sh $tmpfile "$@"
  +
  +rm -f $tmpfile >/dev/null 2>&1 || true
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/devtool.conf
  ============================================================================
  $ cvs diff -u -r0 -r1.1 devtool.conf
  --- /dev/null	2004-07-10 10:27:03.000000000 +0200
  +++ devtool.conf	2004-07-10 10:27:03.000000000 +0200
  @@ -0,0 +1,39 @@
  +##
  +##  devtool.conf -- Development Tool Configuration
  +##
  +
  +%autogen
  +    @autogen autoconf 2.59 "2.5*"
  +
  +%autoclean
  +    @autoclean autoconf
  +
  +%configure
  +    ./configure --prefix=/tmp/due "$@"
  +
  +%version
  +    ./shtool version -l txt -n "OSSP due" -e VERSION
  +    V=`./shtool version -l txt -d long VERSION`
  +    sed -e "s/Version .*(.*)/Version $V/g" <README >README.n 
  +    mv README.n README
  +
  +%dist
  +    echo "+++ generating"
  +    ./devtool autoclean
  +    ./devtool autogen
  +    echo "+++ configuring"
  +    ./configure
  +    echo "+++ building"
  +    make clean all
  +    echo "+++ cleaning"
  +    make distclean
  +    echo "+++ fixing"
  +    ./shtool fixperm -v .
  +    echo "+++ rolling"
  +    V=`./shtool version -l txt -d short VERSION`
  +    ./shtool tarball -o due-${V}.tar.gz -d due-${V} -u ossp -g due \
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*,*.tar.gz' -c 'gzip --best' .
  +    ls -l due-${V}.tar.gz
  +    echo "+++ testing"
  +    gunzip <due-${V}.tar.gz | tar tvf -
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/devtool.func
  ============================================================================
  $ cvs diff -u -r0 -r1.1 devtool.func
  --- /dev/null	2004-07-10 10:27:03.000000000 +0200
  +++ devtool.func	2004-07-10 10:27:03.000000000 +0200
  @@ -0,0 +1,73 @@
  +##
  +##  devtool.func -- Development Tool Functions
  +##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com> 
  +##
  +
  +devtool_require () {
  +    t="$1"; o="$2"; p="$3"; e="$4"; a="$5"
  +    v=`($t $o | head -1 | awk "{ print \\\$$p; }") 2>/dev/null`
  +    if [ ".$v" = . ]; then
  +        echo "devtool:ERROR: unable to determine version of $t" 1>&2
  +        exit 1
  +    fi
  +    case "$v" in
  +        $e )
  +            ;;
  +        $a )
  +            echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
  +            ;;
  +        * )
  +            echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
  +            exit 1
  +            ;;
  +    esac
  +    echo "$v"
  +}
  +
  +devtool_autogen () {
  +    tool=$1
  +    shift
  +    case $tool in
  +        autoconf )
  +            autoconf_version=`devtool_require autoconf --version 4 "$1" "$2"`
  +            echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
  +            autoconf
  +            #autoheader 2>&1 | grep -v "is unchanged"
  +            rm -rf autom4te.cache >/dev/null 2>&1
  +            ;;
  +        libtool )
  +            libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
  +            echo "generating (GNU Libtool $libtoolize_version): ltmain.sh, libtool.m4, config.guess, config.sub"
  +            libtoolize --force --copy >/dev/null 2>&1
  +            cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
  +                sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` libtool.m4
  +            ;;
  +        shtool )
  +            shtoolize_version=`devtool_require shtoolize -v 3 "$1" "$2"`
  +            echo "generating (GNU Shtool $shtoolize_version): shtool"
  +            shift
  +            shift
  +            shtoolize -q "$@"
  +            ;;
  +    esac
  +}
  +
  +devtool_autoclean () {
  +    tool=$1
  +    shift
  +    case $tool in
  +        autoconf )
  +            echo "removing: configure config.h.in"
  +            rm -f configure config.h.in
  +            ;;
  +        libtool )
  +            echo "removing: ltmain.sh libtool.m4 config.guess config.sub"
  +            rm -f ltmain.sh libtool.m4 config.guess config.sub
  +            ;;
  +        shtool )
  +            echo "removing: shtool"
  +            rm -f shtool
  +            ;;
  +    esac
  +}
  +
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jul 10 12:19:15 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6EED776358; Sat, 10 Jul 2004 12:19:15 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/due/ AUTHORS ChangeLog THANKS
Message-Id: <20040710101915.6EED776358@mail.ossp.org>
Date: Sat, 10 Jul 2004 12:19:15 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Jul-2004 12:19:15
  Branch: HEAD                             Handle: 2004071011191400

  Added files:
    ossp-pkg/due            AUTHORS ChangeLog THANKS

  Log:
    more files

  Summary:
    Revision    Changes     Path
    1.1         +15 -0      ossp-pkg/due/AUTHORS
    1.1         +16 -0      ossp-pkg/due/ChangeLog
    1.1         +16 -0      ossp-pkg/due/THANKS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/AUTHORS
  ============================================================================
  $ cvs diff -u -r0 -r1.1 AUTHORS
  --- /dev/null	2004-07-10 12:19:14.000000000 +0200
  +++ AUTHORS	2004-07-10 12:19:14.000000000 +0200
  @@ -0,0 +1,15 @@
  +   _        ___  ____ ____  ____        _ 
  +  |_|_ _   / _ \/ ___/ ___||  _ \    __| |_   _  ___
  +  _|_||_| | | | \___ \___ \| |_) |  / _` | | | |/ _ \
  + |_||_|_| | |_| |___) |__) |  __/  | (_| | |_| |  __/
  +  |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|\___|
  +
  +  OSSP due - Dynamic User Environment
  +
  +  This is a list of authors who have written
  +  or edited parts of the OSSP due sources.
  +
  +  o  OSSP due (as a whole)
  +     Written by: Ralf S. Engelschall
  +     Edited  by: Ralf S. Engelschall
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/ChangeLog
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ChangeLog
  --- /dev/null	2004-07-10 12:19:14.000000000 +0200
  +++ ChangeLog	2004-07-10 12:19:15.000000000 +0200
  @@ -0,0 +1,16 @@
  +  _        ___  ____ ____  ____        _ 
  + |_|_ _   / _ \/ ___/ ___||  _ \    __| |_   _  ___
  + _|_||_| | | | \___ \___ \| |_) |  / _` | | | |/ _ \
  +|_||_|_| | |_| |___) |__) |  __/  | (_| | |_| |  __/
  + |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|\___|
  +
  + OSSP due - Dynamic User Environment
  +
  + ChangeLog
  +
  + Changes between *GENESIS* and 0.8.0 (xx-Jun-2004 to 10-Jul-2004):
  +
  +   *) Created the initial version of OSSP due by collecting together
  +      all scripts and configurations I've written over the time.
  +      [Ralf S. Engelschall]
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/THANKS
  ============================================================================
  $ cvs diff -u -r0 -r1.1 THANKS
  --- /dev/null	2004-07-10 12:19:14.000000000 +0200
  +++ THANKS	2004-07-10 12:19:15.000000000 +0200
  @@ -0,0 +1,16 @@
  +   _        ___  ____ ____  ____        _ 
  +  |_|_ _   / _ \/ ___/ ___||  _ \    __| |_   _  ___
  +  _|_||_| | | | \___ \___ \| |_) |  / _` | | | |/ _ \
  + |_||_|_| | |_| |___) |__) |  __/  | (_| | |_| |  __/
  +  |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|\___|
  +
  +  THANKS
  +
  +  Credit has to be given to the following people who contributed ideas,
  +  stuff, bugfixes, hints etc. (in alphabetical order):
  +
  +  o Thomas Lotterer          <thomas@lotterer.net>
  +  o Christoph Schug          <chris@schug.net>
  +
  +  ...and all other shtool users who gave me feedback but I've forgot.
  +
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jul 10 12:19:47 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8551E76358; Sat, 10 Jul 2004 12:19:47 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/due/ .cvsignore
Message-Id: <20040710101947.8551E76358@mail.ossp.org>
Date: Sat, 10 Jul 2004 12:19:47 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Jul-2004 12:19:47
  Branch: HEAD                             Handle: 2004071011194700

  Added files:
    ossp-pkg/due            .cvsignore

  Log:
    ignore generated files

  Summary:
    Revision    Changes     Path
    1.1         +2  -0      ossp-pkg/due/.cvsignore
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.cvsignore
  ============================================================================
  $ cvs diff -u -r0 -r1.1 .cvsignore
  --- /dev/null	2004-07-10 12:19:47.000000000 +0200
  +++ .cvsignore	2004-07-10 12:19:47.000000000 +0200
  @@ -0,0 +1,2 @@
  +configure
  +shtool
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jul 10 12:20:15 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0A50276358; Sat, 10 Jul 2004 12:20:15 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/due/ configure.ac devtool.conf
Message-Id: <20040710102015.0A50276358@mail.ossp.org>
Date: Sat, 10 Jul 2004 12:20:15 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Jul-2004 12:20:14
  Branch: HEAD                             Handle: 2004071011201400

  Added files:
    ossp-pkg/due            configure.ac
  Modified files:
    ossp-pkg/due            devtool.conf

  Log:
    initial autoconf build environment

  Summary:
    Revision    Changes     Path
    1.1         +44 -0      ossp-pkg/due/configure.ac
    1.2         +2  -0      ossp-pkg/due/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/configure.ac
  ============================================================================
  $ cvs diff -u -r0 -r1.1 configure.ac
  --- /dev/null	2004-07-10 12:20:14.000000000 +0200
  +++ configure.ac	2004-07-10 12:20:14.000000000 +0200
  @@ -0,0 +1,44 @@
  +dnl ##
  +dnl ##  OSSP due - Dynamic User Environment
  +dnl ##  Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 1994-2004 The OSSP Project <http://www.ossp.org/>
  +dnl ##
  +dnl ##  This file is part of OSSP due, a dynamic user environment
  +dnl ##  which can found at http://www.ossp.org/pkg/tool/due/
  +dnl ##
  +dnl ##  Permission to use, copy, modify, and distribute this software for
  +dnl ##  any purpose with or without fee is hereby granted, provided that
  +dnl ##  the above copyright notice and this permission notice appear in all
  +dnl ##  copies.
  +dnl ##
  +dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +dnl ##  SUCH DAMAGE.
  +dnl ##
  +dnl ##  configure.ac: GNU autoconf specification
  +dnl ##
  +
  +AC_PREREQ(2.53)
  +AC_REVISION($1.0$)
  +AC_INIT(README)
  +
  +DUE_VERSION_STR="`./shtool version -l txt -d long VERSION`"
  +./shtool echo -e "Configuring %BOSSP due%b (Dynamic User Environment), version %B${DUE_VERSION_STR}%b"
  +echo "Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>"
  +AC_SUBST(DUE_VERSION_STR)
  +
  +AC_PREFIX_DEFAULT(/usr/local)
  +AC_SET_MAKE
  +
  +AC_CONFIG_FILES(Makefile)
  +AC_OUTPUT
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.conf
  --- ossp-pkg/due/devtool.conf	10 Jul 2004 08:27:02 -0000	1.1
  +++ ossp-pkg/due/devtool.conf	10 Jul 2004 10:20:14 -0000	1.2
  @@ -4,9 +4,11 @@
   
   %autogen
       @autogen autoconf 2.59 "2.5*"
  +    @autogen shtool 2.0.0 "2.0.*" all
   
   %autoclean
       @autoclean autoconf
  +    @autoclean shtool
   
   %configure
       ./configure --prefix=/tmp/due "$@"
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jul 13 12:47:23 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EDBD776400; Tue, 13 Jul 2004 12:47:22 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog devtool.conf
Message-Id: <20040713104722.EDBD776400@mail.ossp.org>
Date: Tue, 13 Jul 2004 12:47:22 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Jul-2004 12:47:22
  Branch: HEAD                             Handle: 2004071311472200

  Modified files:
    ossp-pkg/pth            ChangeLog devtool.conf

  Log:
    Upgraded build environment to GNU autoconf 2.59, GNU libtool 1.5.6
    and GNU shtool 2.0.0.

  Summary:
    Revision    Changes     Path
    1.609       +2  -1      ossp-pkg/pth/ChangeLog
    1.16        +3  -3      ossp-pkg/pth/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.608 -r1.609 ChangeLog
  --- ossp-pkg/pth/ChangeLog	17 Oct 2003 17:39:29 -0000	1.608
  +++ ossp-pkg/pth/ChangeLog	13 Jul 2004 10:47:22 -0000	1.609
  @@ -27,7 +27,8 @@
         are not acceptable in "strict aliasing" for GCC.
         [Ralf S. Engelschall]
   
  -   *) Upgraded to GNU libtool 1.5.
  +   *) Upgraded build environment to GNU autoconf 2.59, GNU libtool 1.5.6
  +      and GNU shtool 2.0.0.
         [Ralf S. Engelschall]
   
      *) Fixed implementation so that --enable-pthread now correctly
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 devtool.conf
  --- ossp-pkg/pth/devtool.conf	17 Oct 2003 17:39:29 -0000	1.15
  +++ ossp-pkg/pth/devtool.conf	13 Jul 2004 10:47:22 -0000	1.16
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.2 "1.6.*" echo version scpp mkdir install fixperm tarball
  -    @autogen libtool  1.5   "1.5*"
  -    @autogen autoconf 2.57  "2.5*"
  +    @autogen shtool   2.0.0 "1.6.*" echo version scpp mkdir install fixperm tarball
  +    @autogen libtool  1.5.6 "1.5*"
  +    @autogen autoconf 2.59  "2.5*"
   
   %autoclean
       @autoclean shtool
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jul 13 12:51:00 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DEFC77642B; Tue, 13 Jul 2004 12:50:59 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog Makefile.in README aclocal.m4 conf...
Message-Id: <20040713105059.DEFC77642B@mail.ossp.org>
Date: Tue, 13 Jul 2004 12:50:59 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Jul-2004 12:50:59
  Branch: HEAD                             Handle: 2004071311504801

  Modified files:
    ossp-pkg/pth            ChangeLog Makefile.in README aclocal.m4
                            config.param configure.ac devtool.func
                            pth-config.in pth-config.pod pth.h.in pth.m4
                            pth.pod pth.spec pth_acmac.h.in pth_attr.c
                            pth_cancel.c pth_clean.c pth_compat.c pth_data.c
                            pth_debug.c pth_errno.c pth_event.c pth_ext.c
                            pth_fork.c pth_high.c pth_lib.c pth_mctx.c
                            pth_msg.c pth_p.h.in pth_pqueue.c pth_ring.c
                            pth_sched.c pth_string.c pth_sync.c pth_syscall.c
                            pth_tcb.c pth_time.c pth_uctx.c pth_util.c
                            pthread-config.in pthread-config.pod pthread.c
                            pthread.h.in pthread.pod striptease.mk
                            striptease.pl test_common.c test_common.h
                            test_httpd.c test_misc.c test_mp.c test_philo.c
                            test_pthread.c test_select.c test_sfio.c
                            test_sig.c test_std.c test_uctx.c

  Log:
    Adjusted all copyright messages for new year 2004.

  Summary:
    Revision    Changes     Path
    1.610       +3  -0      ossp-pkg/pth/ChangeLog
    1.151       +1  -1      ossp-pkg/pth/Makefile.in
    1.203       +1  -1      ossp-pkg/pth/README
    1.103       +1  -1      ossp-pkg/pth/aclocal.m4
    1.22        +1  -1      ossp-pkg/pth/config.param
    1.13        +2  -2      ossp-pkg/pth/configure.ac
    1.5         +1  -1      ossp-pkg/pth/devtool.func
    1.26        +1  -1      ossp-pkg/pth/pth-config.in
    1.22        +1  -1      ossp-pkg/pth/pth-config.pod
    1.141       +1  -1      ossp-pkg/pth/pth.h.in
    1.13        +1  -1      ossp-pkg/pth/pth.m4
    1.163       +1  -1      ossp-pkg/pth/pth.pod
    1.12        +1  -1      ossp-pkg/pth/pth.spec
    1.10        +1  -1      ossp-pkg/pth/pth_acmac.h.in
    1.20        +1  -1      ossp-pkg/pth/pth_attr.c
    1.28        +1  -1      ossp-pkg/pth/pth_cancel.c
    1.19        +1  -1      ossp-pkg/pth/pth_clean.c
    1.11        +1  -1      ossp-pkg/pth/pth_compat.c
    1.31        +1  -1      ossp-pkg/pth/pth_data.c
    1.30        +1  -1      ossp-pkg/pth/pth_debug.c
    1.26        +1  -1      ossp-pkg/pth/pth_errno.c
    1.62        +1  -1      ossp-pkg/pth/pth_event.c
    1.13        +1  -1      ossp-pkg/pth/pth_ext.c
    1.16        +1  -1      ossp-pkg/pth/pth_fork.c
    1.106       +1  -1      ossp-pkg/pth/pth_high.c
    1.57        +1  -1      ossp-pkg/pth/pth_lib.c
    1.59        +1  -1      ossp-pkg/pth/pth_mctx.c
    1.27        +1  -1      ossp-pkg/pth/pth_msg.c
    1.37        +1  -1      ossp-pkg/pth/pth_p.h.in
    1.32        +1  -1      ossp-pkg/pth/pth_pqueue.c
    1.25        +1  -1      ossp-pkg/pth/pth_ring.c
    1.91        +1  -1      ossp-pkg/pth/pth_sched.c
    1.11        +1  -1      ossp-pkg/pth/pth_string.c
    1.40        +1  -1      ossp-pkg/pth/pth_sync.c
    1.30        +1  -1      ossp-pkg/pth/pth_syscall.c
    1.42        +1  -1      ossp-pkg/pth/pth_tcb.c
    1.29        +1  -1      ossp-pkg/pth/pth_time.c
    1.3         +1  -1      ossp-pkg/pth/pth_uctx.c
    1.24        +1  -1      ossp-pkg/pth/pth_util.c
    1.22        +1  -1      ossp-pkg/pth/pthread-config.in
    1.18        +1  -1      ossp-pkg/pth/pthread-config.pod
    1.65        +1  -1      ossp-pkg/pth/pthread.c
    1.68        +1  -1      ossp-pkg/pth/pthread.h.in
    1.25        +1  -1      ossp-pkg/pth/pthread.pod
    1.9         +1  -1      ossp-pkg/pth/striptease.mk
    1.16        +1  -1      ossp-pkg/pth/striptease.pl
    1.16        +1  -1      ossp-pkg/pth/test_common.c
    1.9         +1  -1      ossp-pkg/pth/test_common.h
    1.54        +1  -1      ossp-pkg/pth/test_httpd.c
    1.35        +1  -1      ossp-pkg/pth/test_misc.c
    1.44        +1  -1      ossp-pkg/pth/test_mp.c
    1.21        +1  -1      ossp-pkg/pth/test_philo.c
    1.16        +1  -1      ossp-pkg/pth/test_pthread.c
    1.17        +1  -1      ossp-pkg/pth/test_select.c
    1.13        +1  -1      ossp-pkg/pth/test_sfio.c
    1.21        +1  -1      ossp-pkg/pth/test_sig.c
    1.19        +1  -1      ossp-pkg/pth/test_std.c
    1.3         +1  -1      ossp-pkg/pth/test_uctx.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.609 -r1.610 ChangeLog
  --- ossp-pkg/pth/ChangeLog	13 Jul 2004 10:47:22 -0000	1.609
  +++ ossp-pkg/pth/ChangeLog	13 Jul 2004 10:50:48 -0000	1.610
  @@ -38,6 +38,9 @@
      *) Replace some 0 by more politically correct NULL in pth_string.c
         [Ralf S. Engelschall]
   
  +   *) Adjusted all copyright messages for new year 2004.
  +      [Ralf S. Engelschall]
  +
     Changes between 2.0b2 and 2.0.0 (04-Dec-2002 to 17-Feb-2003)
   
      *) Final source tree polishing before release.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.150 -r1.151 Makefile.in
  --- ossp-pkg/pth/Makefile.in	1 Jan 2003 15:49:11 -0000	1.150
  +++ ossp-pkg/pth/Makefile.in	13 Jul 2004 10:50:49 -0000	1.151
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/README
  ============================================================================
  $ cvs diff -u -r1.202 -r1.203 README
  --- ossp-pkg/pth/README	17 Feb 2003 10:49:03 -0000	1.202
  +++ ossp-pkg/pth/README	13 Jul 2004 10:50:49 -0000	1.203
  @@ -54,7 +54,7 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   
     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.102 -r1.103 aclocal.m4
  --- ossp-pkg/pth/aclocal.m4	17 Oct 2003 17:39:29 -0000	1.102
  +++ ossp-pkg/pth/aclocal.m4	13 Jul 2004 10:50:49 -0000	1.103
  @@ -1,6 +1,6 @@
   dnl ##
   dnl ##  GNU Pth - The GNU Portable Threads
  -dnl ##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##
   dnl ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   dnl ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/config.param
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 config.param
  --- ossp-pkg/pth/config.param	11 Feb 2003 13:17:39 -0000	1.21
  +++ ossp-pkg/pth/config.param	13 Jul 2004 10:50:49 -0000	1.22
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/configure.ac
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 configure.ac
  --- ossp-pkg/pth/configure.ac	15 Apr 2003 07:45:35 -0000	1.12
  +++ ossp-pkg/pth/configure.ac	13 Jul 2004 10:50:49 -0000	1.13
  @@ -1,6 +1,6 @@
   dnl ##
   dnl ##  GNU Pth - The GNU Portable Threads
  -dnl ##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##
   dnl ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   dnl ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ -42,7 +42,7 @@
   AC_HEADLINE(dnl
   GNU Pth, Portable Threads, dnl
   PTH_VERSION, pth_vers.c, dnl
  -[Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>])
  +[Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>])
   AC_CONFIG_PARAM(config.param)
   AC_CONFIG_HEADER(pth_acdef.h)dnl
   AC_PREFIX_DEFAULT(/usr/local)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/devtool.func
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 devtool.func
  --- ossp-pkg/pth/devtool.func	1 Jan 2003 15:49:11 -0000	1.4
  +++ ossp-pkg/pth/devtool.func	13 Jul 2004 10:50:49 -0000	1.5
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   devtool_require () {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth-config.in
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 pth-config.in
  --- ossp-pkg/pth/pth-config.in	1 Jan 2003 15:49:11 -0000	1.25
  +++ ossp-pkg/pth/pth-config.in	13 Jul 2004 10:50:49 -0000	1.26
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth-config.pod
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 pth-config.pod
  --- ossp-pkg/pth/pth-config.pod	1 Jan 2003 15:49:11 -0000	1.21
  +++ ossp-pkg/pth/pth-config.pod	13 Jul 2004 10:50:49 -0000	1.22
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth.h.in
  ============================================================================
  $ cvs diff -u -r1.140 -r1.141 pth.h.in
  --- ossp-pkg/pth/pth.h.in	1 Jan 2003 15:49:11 -0000	1.140
  +++ ossp-pkg/pth/pth.h.in	13 Jul 2004 10:50:49 -0000	1.141
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth.m4
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 pth.m4
  --- ossp-pkg/pth/pth.m4	1 Jan 2003 15:49:11 -0000	1.12
  +++ ossp-pkg/pth/pth.m4	13 Jul 2004 10:50:49 -0000	1.13
  @@ -1,6 +1,6 @@
   dnl ##
   dnl ##  GNU Pth - The GNU Portable Threads
  -dnl ##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##
   dnl ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   dnl ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth.pod
  ============================================================================
  $ cvs diff -u -r1.162 -r1.163 pth.pod
  --- ossp-pkg/pth/pth.pod	1 Jan 2003 15:49:11 -0000	1.162
  +++ ossp-pkg/pth/pth.pod	13 Jul 2004 10:50:49 -0000	1.163
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth.spec
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 pth.spec
  --- ossp-pkg/pth/pth.spec	1 Jan 2003 15:49:11 -0000	1.11
  +++ ossp-pkg/pth/pth.spec	13 Jul 2004 10:50:49 -0000	1.12
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 2000-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_acmac.h.in
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 pth_acmac.h.in
  --- ossp-pkg/pth/pth_acmac.h.in	1 Jan 2003 15:49:11 -0000	1.9
  +++ ossp-pkg/pth/pth_acmac.h.in	13 Jul 2004 10:50:49 -0000	1.10
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_attr.c
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 pth_attr.c
  --- ossp-pkg/pth/pth_attr.c	1 Jan 2003 15:49:11 -0000	1.19
  +++ ossp-pkg/pth/pth_attr.c	13 Jul 2004 10:50:49 -0000	1.20
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_cancel.c
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 pth_cancel.c
  --- ossp-pkg/pth/pth_cancel.c	1 Jan 2003 15:49:11 -0000	1.27
  +++ ossp-pkg/pth/pth_cancel.c	13 Jul 2004 10:50:49 -0000	1.28
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_clean.c
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 pth_clean.c
  --- ossp-pkg/pth/pth_clean.c	1 Jan 2003 15:49:11 -0000	1.18
  +++ ossp-pkg/pth/pth_clean.c	13 Jul 2004 10:50:49 -0000	1.19
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_compat.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 pth_compat.c
  --- ossp-pkg/pth/pth_compat.c	1 Jan 2003 15:49:11 -0000	1.10
  +++ ossp-pkg/pth/pth_compat.c	13 Jul 2004 10:50:49 -0000	1.11
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_data.c
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 pth_data.c
  --- ossp-pkg/pth/pth_data.c	1 Jan 2003 15:49:11 -0000	1.30
  +++ ossp-pkg/pth/pth_data.c	13 Jul 2004 10:50:49 -0000	1.31
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_debug.c
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 pth_debug.c
  --- ossp-pkg/pth/pth_debug.c	1 Jan 2003 15:49:11 -0000	1.29
  +++ ossp-pkg/pth/pth_debug.c	13 Jul 2004 10:50:49 -0000	1.30
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_errno.c
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 pth_errno.c
  --- ossp-pkg/pth/pth_errno.c	1 Jan 2003 15:49:11 -0000	1.25
  +++ ossp-pkg/pth/pth_errno.c	13 Jul 2004 10:50:49 -0000	1.26
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_event.c
  ============================================================================
  $ cvs diff -u -r1.61 -r1.62 pth_event.c
  --- ossp-pkg/pth/pth_event.c	1 Jan 2003 15:49:11 -0000	1.61
  +++ ossp-pkg/pth/pth_event.c	13 Jul 2004 10:50:49 -0000	1.62
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_ext.c
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 pth_ext.c
  --- ossp-pkg/pth/pth_ext.c	1 Jan 2003 15:49:11 -0000	1.12
  +++ ossp-pkg/pth/pth_ext.c	13 Jul 2004 10:50:49 -0000	1.13
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_fork.c
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 pth_fork.c
  --- ossp-pkg/pth/pth_fork.c	1 Jan 2003 15:49:11 -0000	1.15
  +++ ossp-pkg/pth/pth_fork.c	13 Jul 2004 10:50:49 -0000	1.16
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_high.c
  ============================================================================
  $ cvs diff -u -r1.105 -r1.106 pth_high.c
  --- ossp-pkg/pth/pth_high.c	1 Jan 2003 15:49:11 -0000	1.105
  +++ ossp-pkg/pth/pth_high.c	13 Jul 2004 10:50:49 -0000	1.106
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_lib.c
  ============================================================================
  $ cvs diff -u -r1.56 -r1.57 pth_lib.c
  --- ossp-pkg/pth/pth_lib.c	1 Jan 2003 15:49:12 -0000	1.56
  +++ ossp-pkg/pth/pth_lib.c	13 Jul 2004 10:50:49 -0000	1.57
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_mctx.c
  ============================================================================
  $ cvs diff -u -r1.58 -r1.59 pth_mctx.c
  --- ossp-pkg/pth/pth_mctx.c	1 Jan 2003 15:49:12 -0000	1.58
  +++ ossp-pkg/pth/pth_mctx.c	13 Jul 2004 10:50:49 -0000	1.59
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_msg.c
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 pth_msg.c
  --- ossp-pkg/pth/pth_msg.c	1 Jan 2003 15:49:12 -0000	1.26
  +++ ossp-pkg/pth/pth_msg.c	13 Jul 2004 10:50:49 -0000	1.27
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_p.h.in
  ============================================================================
  $ cvs diff -u -r1.36 -r1.37 pth_p.h.in
  --- ossp-pkg/pth/pth_p.h.in	1 Jan 2003 15:49:12 -0000	1.36
  +++ ossp-pkg/pth/pth_p.h.in	13 Jul 2004 10:50:49 -0000	1.37
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_pqueue.c
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 pth_pqueue.c
  --- ossp-pkg/pth/pth_pqueue.c	1 Jan 2003 15:49:12 -0000	1.31
  +++ ossp-pkg/pth/pth_pqueue.c	13 Jul 2004 10:50:49 -0000	1.32
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_ring.c
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 pth_ring.c
  --- ossp-pkg/pth/pth_ring.c	1 Jan 2003 15:49:12 -0000	1.24
  +++ ossp-pkg/pth/pth_ring.c	13 Jul 2004 10:50:49 -0000	1.25
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_sched.c
  ============================================================================
  $ cvs diff -u -r1.90 -r1.91 pth_sched.c
  --- ossp-pkg/pth/pth_sched.c	22 Mar 2003 20:31:49 -0000	1.90
  +++ ossp-pkg/pth/pth_sched.c	13 Jul 2004 10:50:49 -0000	1.91
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_string.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 pth_string.c
  --- ossp-pkg/pth/pth_string.c	17 Oct 2003 17:39:29 -0000	1.10
  +++ ossp-pkg/pth/pth_string.c	13 Jul 2004 10:50:49 -0000	1.11
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_sync.c
  ============================================================================
  $ cvs diff -u -r1.39 -r1.40 pth_sync.c
  --- ossp-pkg/pth/pth_sync.c	1 Jan 2003 15:49:12 -0000	1.39
  +++ ossp-pkg/pth/pth_sync.c	13 Jul 2004 10:50:49 -0000	1.40
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_syscall.c
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 pth_syscall.c
  --- ossp-pkg/pth/pth_syscall.c	1 Jan 2003 15:49:12 -0000	1.29
  +++ ossp-pkg/pth/pth_syscall.c	13 Jul 2004 10:50:49 -0000	1.30
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_tcb.c
  ============================================================================
  $ cvs diff -u -r1.41 -r1.42 pth_tcb.c
  --- ossp-pkg/pth/pth_tcb.c	1 Jan 2003 15:49:12 -0000	1.41
  +++ ossp-pkg/pth/pth_tcb.c	13 Jul 2004 10:50:49 -0000	1.42
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_time.c
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 pth_time.c
  --- ossp-pkg/pth/pth_time.c	1 Jan 2003 15:49:12 -0000	1.28
  +++ ossp-pkg/pth/pth_time.c	13 Jul 2004 10:50:49 -0000	1.29
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_uctx.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 pth_uctx.c
  --- ossp-pkg/pth/pth_uctx.c	1 Jan 2003 15:49:12 -0000	1.2
  +++ ossp-pkg/pth/pth_uctx.c	13 Jul 2004 10:50:49 -0000	1.3
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_util.c
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 pth_util.c
  --- ossp-pkg/pth/pth_util.c	1 Jan 2003 15:49:12 -0000	1.23
  +++ ossp-pkg/pth/pth_util.c	13 Jul 2004 10:50:49 -0000	1.24
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pthread-config.in
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 pthread-config.in
  --- ossp-pkg/pth/pthread-config.in	1 Jan 2003 15:49:12 -0000	1.21
  +++ ossp-pkg/pth/pthread-config.in	13 Jul 2004 10:50:49 -0000	1.22
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pthread-config.pod
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 pthread-config.pod
  --- ossp-pkg/pth/pthread-config.pod	1 Jan 2003 15:49:12 -0000	1.17
  +++ ossp-pkg/pth/pthread-config.pod	13 Jul 2004 10:50:49 -0000	1.18
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pthread.c
  ============================================================================
  $ cvs diff -u -r1.64 -r1.65 pthread.c
  --- ossp-pkg/pth/pthread.c	1 Jan 2003 15:49:12 -0000	1.64
  +++ ossp-pkg/pth/pthread.c	13 Jul 2004 10:50:49 -0000	1.65
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pthread.h.in
  ============================================================================
  $ cvs diff -u -r1.67 -r1.68 pthread.h.in
  --- ossp-pkg/pth/pthread.h.in	1 Jan 2003 15:49:12 -0000	1.67
  +++ ossp-pkg/pth/pthread.h.in	13 Jul 2004 10:50:49 -0000	1.68
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pthread.pod
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 pthread.pod
  --- ossp-pkg/pth/pthread.pod	1 Jan 2003 15:49:12 -0000	1.24
  +++ ossp-pkg/pth/pthread.pod	13 Jul 2004 10:50:49 -0000	1.25
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/striptease.mk
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 striptease.mk
  --- ossp-pkg/pth/striptease.mk	1 Jan 2003 15:49:12 -0000	1.8
  +++ ossp-pkg/pth/striptease.mk	13 Jul 2004 10:50:49 -0000	1.9
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/striptease.pl
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 striptease.pl
  --- ossp-pkg/pth/striptease.pl	1 Jan 2003 15:49:12 -0000	1.15
  +++ ossp-pkg/pth/striptease.pl	13 Jul 2004 10:50:49 -0000	1.16
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_common.c
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 test_common.c
  --- ossp-pkg/pth/test_common.c	1 Jan 2003 15:49:12 -0000	1.15
  +++ ossp-pkg/pth/test_common.c	13 Jul 2004 10:50:49 -0000	1.16
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_common.h
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 test_common.h
  --- ossp-pkg/pth/test_common.h	1 Jan 2003 15:49:12 -0000	1.8
  +++ ossp-pkg/pth/test_common.h	13 Jul 2004 10:50:49 -0000	1.9
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_httpd.c
  ============================================================================
  $ cvs diff -u -r1.53 -r1.54 test_httpd.c
  --- ossp-pkg/pth/test_httpd.c	1 Jan 2003 15:49:12 -0000	1.53
  +++ ossp-pkg/pth/test_httpd.c	13 Jul 2004 10:50:49 -0000	1.54
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_misc.c
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 test_misc.c
  --- ossp-pkg/pth/test_misc.c	1 Jan 2003 15:49:12 -0000	1.34
  +++ ossp-pkg/pth/test_misc.c	13 Jul 2004 10:50:49 -0000	1.35
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_mp.c
  ============================================================================
  $ cvs diff -u -r1.43 -r1.44 test_mp.c
  --- ossp-pkg/pth/test_mp.c	1 Jan 2003 15:49:12 -0000	1.43
  +++ ossp-pkg/pth/test_mp.c	13 Jul 2004 10:50:49 -0000	1.44
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_philo.c
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 test_philo.c
  --- ossp-pkg/pth/test_philo.c	1 Jan 2003 15:49:12 -0000	1.20
  +++ ossp-pkg/pth/test_philo.c	13 Jul 2004 10:50:49 -0000	1.21
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_pthread.c
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 test_pthread.c
  --- ossp-pkg/pth/test_pthread.c	1 Jan 2003 15:49:12 -0000	1.15
  +++ ossp-pkg/pth/test_pthread.c	13 Jul 2004 10:50:49 -0000	1.16
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_select.c
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 test_select.c
  --- ossp-pkg/pth/test_select.c	1 Jan 2003 15:49:12 -0000	1.16
  +++ ossp-pkg/pth/test_select.c	13 Jul 2004 10:50:49 -0000	1.17
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_sfio.c
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 test_sfio.c
  --- ossp-pkg/pth/test_sfio.c	1 Jan 2003 15:49:12 -0000	1.12
  +++ ossp-pkg/pth/test_sfio.c	13 Jul 2004 10:50:49 -0000	1.13
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_sig.c
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 test_sig.c
  --- ossp-pkg/pth/test_sig.c	1 Jan 2003 15:49:12 -0000	1.20
  +++ ossp-pkg/pth/test_sig.c	13 Jul 2004 10:50:49 -0000	1.21
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_std.c
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 test_std.c
  --- ossp-pkg/pth/test_std.c	1 Jan 2003 15:49:12 -0000	1.18
  +++ ossp-pkg/pth/test_std.c	13 Jul 2004 10:50:49 -0000	1.19
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_uctx.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 test_uctx.c
  --- ossp-pkg/pth/test_uctx.c	1 Jan 2003 15:49:12 -0000	1.2
  +++ ossp-pkg/pth/test_uctx.c	13 Jul 2004 10:50:49 -0000	1.3
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jul 13 12:53:54 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6B3CA7642B; Tue, 13 Jul 2004 12:53:54 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog pth_string.c
Message-Id: <20040713105354.6B3CA7642B@mail.ossp.org>
Date: Tue, 13 Jul 2004 12:53:54 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Jul-2004 12:53:54
  Branch: HEAD                             Handle: 2004071311535300

  Modified files:
    ossp-pkg/pth            ChangeLog pth_string.c

  Log:
    Resolve symbol conflict in pth_string.c between pow10/round
    and GCC builtins.

  Summary:
    Revision    Changes     Path
    1.611       +4  -0      ossp-pkg/pth/ChangeLog
    1.12        +7  -7      ossp-pkg/pth/pth_string.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.610 -r1.611 ChangeLog
  --- ossp-pkg/pth/ChangeLog	13 Jul 2004 10:50:48 -0000	1.610
  +++ ossp-pkg/pth/ChangeLog	13 Jul 2004 10:53:53 -0000	1.611
  @@ -21,6 +21,10 @@
                     
     Changes between 2.0.0 and 2.0.1 (17-Feb-2003 to xx-XXX-2003)
   
  +   *) Resolve symbol conflict in pth_string.c between pow10/round
  +      and GCC builtins.
  +      [Ralf S. Engelschall]
  +
      *) Use GCC 3.3 option "-fno-strict-aliasing" (if available) under
         Autoconf option "--enable-debug" because mainly pth_mctx.c
         contains important and correct pointer casting constructs which
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_string.c
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 pth_string.c
  --- ossp-pkg/pth/pth_string.c	13 Jul 2004 10:50:49 -0000	1.11
  +++ ossp-pkg/pth/pth_string.c	13 Jul 2004 10:53:53 -0000	1.12
  @@ -476,7 +476,7 @@
   }
   
   static LDOUBLE
  -abs_val(LDOUBLE value)
  +math_abs(LDOUBLE value)
   {
       LDOUBLE result = value;
       if (value < 0)
  @@ -485,7 +485,7 @@
   }
   
   static LDOUBLE
  -pow10(int exponent)
  +math_pow10(int exponent)
   {
       LDOUBLE result = 1;
       while (exponent > 0) {
  @@ -496,7 +496,7 @@
   }
   
   static long
  -round(LDOUBLE value)
  +math_round(LDOUBLE value)
   {
       long intpart;
       intpart = (long) value;
  @@ -530,7 +530,7 @@
   
       if (max < 0)
           max = 6;
  -    ufvalue = abs_val(fvalue);
  +    ufvalue = math_abs(fvalue);
       if (fvalue < 0)
           signvalue = '-';
       else if (flags & DP_F_PLUS)
  @@ -547,11 +547,11 @@
   
       /* we "cheat" by converting the fractional part to integer by
          multiplying by a factor of 10 */
  -    fracpart = round((pow10(max)) * (ufvalue - intpart));
  +    fracpart = math_round((math_pow10(max)) * (ufvalue - intpart));
   
  -    if (fracpart >= pow10(max)) {
  +    if (fracpart >= math_pow10(max)) {
           intpart++;
  -        fracpart -= pow10(max);
  +        fracpart -= math_pow10(max);
       }
   
       /* convert integer part */
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jul 13 13:00:45 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D8A417642B; Tue, 13 Jul 2004 13:00:44 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog pth_event.c
Message-Id: <20040713110044.D8A417642B@mail.ossp.org>
Date: Tue, 13 Jul 2004 13:00:44 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Jul-2004 13:00:44
  Branch: HEAD                             Handle: 2004071312004300

  Modified files:
    ossp-pkg/pth            ChangeLog pth_event.c

  Log:
    Fix handling/casting of "int (*)(void *)" callback functions

  Summary:
    Revision    Changes     Path
    1.612       +3  -0      ossp-pkg/pth/ChangeLog
    1.63        +5  -5      ossp-pkg/pth/pth_event.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.611 -r1.612 ChangeLog
  --- ossp-pkg/pth/ChangeLog	13 Jul 2004 10:53:53 -0000	1.611
  +++ ossp-pkg/pth/ChangeLog	13 Jul 2004 11:00:43 -0000	1.612
  @@ -21,6 +21,9 @@
                     
     Changes between 2.0.0 and 2.0.1 (17-Feb-2003 to xx-XXX-2003)
   
  +   *) Fix handling/casting of "int (*)(void *)" callback functions.
  +      [Ralf S. Engelschall]
  +
      *) Resolve symbol conflict in pth_string.c between pow10/round
         and GCC builtins.
         [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_event.c
  ============================================================================
  $ cvs diff -u -r1.62 -r1.63 pth_event.c
  --- ossp-pkg/pth/pth_event.c	13 Jul 2004 10:50:49 -0000	1.62
  +++ ossp-pkg/pth/pth_event.c	13 Jul 2004 11:00:43 -0000	1.63
  @@ -196,7 +196,7 @@
           /* custom function event */
           ev->ev_type = PTH_EVENT_FUNC;
           ev->ev_goal = (int)(spec & (PTH_UNTIL_OCCURRED));
  -        ev->ev_args.FUNC.func  = (int (*)(void *))va_arg(ap, void *);
  +        ev->ev_args.FUNC.func  = va_arg(ap, int (*)(void *));
           ev->ev_args.FUNC.arg   = va_arg(ap, void *);
           ev->ev_args.FUNC.tv    = va_arg(ap, pth_time_t);
       }
  @@ -266,10 +266,10 @@
       }
       else if (ev->ev_type & PTH_EVENT_FUNC) {
           /* custom function event */
  -        void **func    = va_arg(ap, void **);
  -        void **arg     = va_arg(ap, void **);
  -        pth_time_t *tv = va_arg(ap, pth_time_t *);
  -        *func = (int (**)(void *))ev->ev_args.FUNC.func;
  +        int (**func)(void *) = va_arg(ap, int (**)(void *));
  +        void **arg           = va_arg(ap, void **);
  +        pth_time_t *tv       = va_arg(ap, pth_time_t *);
  +        *func = ev->ev_args.FUNC.func;
           *arg  = ev->ev_args.FUNC.arg;
           *tv   = ev->ev_args.FUNC.tv;
       }
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jul 13 13:03:41 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7AA5276411; Tue, 13 Jul 2004 13:03:41 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog README pth_vers.c
Message-Id: <20040713110341.7AA5276411@mail.ossp.org>
Date: Tue, 13 Jul 2004 13:03:41 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Jul-2004 13:03:41
  Branch: HEAD                             Handle: 2004071312034000

  Modified files:
    ossp-pkg/pth            ChangeLog README pth_vers.c

  Log:
    bump version

  Summary:
    Revision    Changes     Path
    1.613       +1  -1      ossp-pkg/pth/ChangeLog
    1.204       +1  -1      ossp-pkg/pth/README
    1.148       +9  -9      ossp-pkg/pth/pth_vers.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.612 -r1.613 ChangeLog
  --- ossp-pkg/pth/ChangeLog	13 Jul 2004 11:00:43 -0000	1.612
  +++ ossp-pkg/pth/ChangeLog	13 Jul 2004 11:03:40 -0000	1.613
  @@ -19,7 +19,7 @@
        / __/ | |_| |
     __|_____(_)___/_________________________________________________________
                     
  -  Changes between 2.0.0 and 2.0.1 (17-Feb-2003 to xx-XXX-2003)
  +  Changes between 2.0.0 and 2.0.1 (17-Feb-2003 to 13-Jul-2004)
   
      *) Fix handling/casting of "int (*)(void *)" callback functions.
         [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/README
  ============================================================================
  $ cvs diff -u -r1.203 -r1.204 README
  --- ossp-pkg/pth/README	13 Jul 2004 10:50:49 -0000	1.203
  +++ ossp-pkg/pth/README	13 Jul 2004 11:03:40 -0000	1.204
  @@ -5,7 +5,7 @@
     |_|    \__|_| |_|                     the impossible.''
   
     GNU Pth - The GNU Portable Threads
  -  Version 2.0.0 (17-Feb-2003)
  +  Version 2.0.1 (13-Jul-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_vers.c
  ============================================================================
  $ cvs diff -u -r1.147 -r1.148 pth_vers.c
  --- ossp-pkg/pth/pth_vers.c	17 Feb 2003 10:49:03 -0000	1.147
  +++ ossp-pkg/pth/pth_vers.c	13 Jul 2004 11:03:40 -0000	1.148
  @@ -8,7 +8,7 @@
   #ifndef _PTH_VERS_C_
   #define _PTH_VERS_C_
   
  -#define PTH_INTERNAL_VERSION 0x200200
  +#define PTH_INTERNAL_VERSION 0x200201
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _PTH_VERS_C_AS_HEADER_
   
   pth_internal_version_t pth_internal_version = {
  -    0x200200,
  -    "2.0.0",
  -    "2.0.0 (17-Feb-2003)",
  -    "This is GNU Pth, Version 2.0.0 (17-Feb-2003)",
  -    "GNU Pth 2.0.0 (17-Feb-2003)",
  -    "GNU Pth/2.0.0",
  -    "@(#)GNU Pth 2.0.0 (17-Feb-2003)",
  -    "$Id: GNU Pth 2.0.0 (17-Feb-2003) $"
  +    0x200201,
  +    "2.0.1",
  +    "2.0.1 (13-Jul-2004)",
  +    "This is GNU Pth, Version 2.0.1 (13-Jul-2004)",
  +    "GNU Pth 2.0.1 (13-Jul-2004)",
  +    "GNU Pth/2.0.1",
  +    "@(#)GNU Pth 2.0.1 (13-Jul-2004)",
  +    "$Id: GNU Pth 2.0.1 (13-Jul-2004) $"
   };
   
   #endif /* _PTH_VERS_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jul 13 13:10:09 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E5FF87642B; Tue, 13 Jul 2004 13:10:08 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20040713111008.E5FF87642B@mail.ossp.org>
Date: Tue, 13 Jul 2004 13:10:08 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   13-Jul-2004 13:10:08
  Branch: HEAD                             Handle: 2004071312100304

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/pth    index.wml

  Log:
    release GNU pth 2.0.1

  Summary:
    Revision    Changes     Path
    1.91        +1  -0      ossp-web/new/news.txt
    1.79        +1  -1      ossp-web/pkg/lib/index.wml
    1.12        +2  -2      ossp-web/pkg/lib/pth/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.90 -r1.91 news.txt
  --- ossp-web/new/news.txt	2 Jul 2004 19:58:55 -0000	1.90
  +++ ossp-web/new/news.txt	13 Jul 2004 11:10:03 -0000	1.91
  @@ -1,3 +1,4 @@
  +13-Jul-2004: Released L<GNU pth> 2.0.1
   02-Jul-2004: Released T<OSSP shiela> 1.1.4
   02-Jul-2004: Released T<OSSP shtool> 2.0.0
   02-Jul-2004: Released T<OSSP lmtp2nntp> 1.3.0
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.78 -r1.79 index.wml
  --- ossp-web/pkg/lib/index.wml	26 Jun 2004 12:04:06 -0000	1.78
  +++ ossp-web/pkg/lib/index.wml	13 Jul 2004 11:10:05 -0000	1.79
  @@ -15,7 +15,7 @@
   <pkg_list>
     <pkg_item name="pth" longname="GNU pth" type="lib"
               desc="Portable Threads"
  -			done=100 stable=2.0.0 unstable=none>
  +			done=100 stable=2.0.1 unstable=none>
     <pkg_item name="mm" longname="OSSP mm" type="lib"
               desc="Shared Memory Allocation"
   			done=100 stable=1.3.0 unstable=none>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/pth/index.wml
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 index.wml
  --- ossp-web/pkg/lib/pth/index.wml	17 Feb 2003 10:59:28 -0000	1.11
  +++ ossp-web/pkg/lib/pth/index.wml	13 Jul 2004 11:10:07 -0000	1.12
  @@ -61,7 +61,7 @@
   
   <pkg_status
       name="pth" assign="rse"
  -    stable="2.0.0" stable_date="17-Feb-2002"
  +    stable="2.0.1" stable_date="13-Jul-2004"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -72,7 +72,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/pth/
       directory=$(FTP_ROOT_DIR)/pkg/lib/pth/
       files="pth-*.tar.gz" 
  -	stable="pth-2\\\\\\\.0\\\\\\\.0\\\\\\\.tar\.gz" unstable="none">
  +	stable="pth-2\\\\\\\.0\\\\\\\.1\\\\\\\.tar\.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul 16 23:04:35 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 08768764ED; Fri, 16 Jul 2004 23:04:31 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid.pod
Message-Id: <20040716210431.08768764ED@mail.ossp.org>
Date: Fri, 16 Jul 2004 23:04:31 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Jul-2004 23:04:31
  Branch: HEAD                             Handle: 2004071622043000

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid.pod

  Log:
    Made documentation of uuid_export() more clear.

  Summary:
    Revision    Changes     Path
    1.50        +4  -1      ossp-pkg/uuid/ChangeLog
    1.18        +12 -8      ossp-pkg/uuid/uuid.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.49 -r1.50 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	9 Jun 2004 19:19:33 -0000	1.49
  +++ ossp-pkg/uuid/ChangeLog	16 Jul 2004 21:04:30 -0000	1.50
  @@ -11,7 +11,10 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 1.0.0 and 1.0.1 (16-Feb-2004 to xx-Jun-2004)
  +  Changes between 1.0.0 and 1.0.1 (16-Feb-2004 to 16-Jul-2004)
  +
  +   o Made documentation of uuid_export() more clear.
  +     [Ralf S. Engelschall]
   
      o Upgrade build environment to GNU libtool 1.5.6
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	9 Jun 2004 19:18:25 -0000	1.17
  +++ ossp-pkg/uuid/uuid.pod	16 Jul 2004 21:04:30 -0000	1.18
  @@ -263,11 +263,13 @@
   =item uuid_rc_t B<uuid_export>(uuid_t *I<uuid>, uuid_fmt_t I<fmt>, void **I<data_ptr>, size_t *I<data_len>);
   
   Exports a UUID I<uuid> into an external representation of format I<fmt>.
  -The data is written to the buffer at C<*>I<data_ptr> which has room
  -for at least C<*>I<data_len> bytes. If C<*>I<data_ptr> is C<NULL>,
  -a new buffer is allocated (and I<data_len> ignored as input). If
  -I<data_len> is not C<NULL>, the number of written bytes are stored into
  -C<*>I<data_len>.
  +The data is written to the buffer at C<*>I<data_ptr> which has to
  +be room for at least C<*>I<data_len> bytes. If C<*>I<data_ptr> is
  +C<NULL>, I<data_len> is ignored as input and a new buffer is allocated
  +and returned in C<*>I<data_ptr> (the caller has to free(3) it later
  +on). If I<data_len> is not C<NULL>, the number of available bytes at
  +C<*>I<data_ptr> has to be provided in C<*>I<data_len> and the number of
  +actually written bytes are returned in C<*>I<data_len> again.
   
   The format of the external representation is specified by I<fmt> and the
   minimum required length in C<*>I<data_len> depends on it. Valid values
  @@ -344,10 +346,11 @@
    char *uuid_v1(void)
    {
        uuid_t *uuid;
  -     char *str = NULL;
  +     char *str;
   
        uuid_create(&uuid);
        uuid_make(uuid, UUID_MAKE_V1);
  +     str = NULL;
        uuid_export(uuid, UUID_FMT_STR, (void **)&str, NULL);
        uuid_destroy(uuid);
        return str;
  @@ -358,12 +361,13 @@
    {
        uuid_t *uuid;
        uuid_t *uuid_ns;
  -     char *str = NULL;
  +     char *str;
   
        uuid_create(&uuid);
        uuid_create(&uuid_ns);
        uuid_load(uuid_ns, "ns:URL");
        uuid_make(uuid, UUID_MAKE_V3, uuid_ns, url);
  +     str = NULL;
        uuid_export(uuid, UUID_FMT_STR, (void **)&str, NULL);
        uuid_destroy(uuid_ns);
        uuid_destroy(uuid);
  @@ -372,7 +376,7 @@
   
   =head1 SEE ALSO
   
  -See the following are references to more B<UUID> documentation and specifications:
  +The following are references to B<UUID> documentation and specifications:
   
   =over 4
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul 16 23:05:34 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7046D764ED; Fri, 16 Jul 2004 23:05:34 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog devtool.conf
Message-Id: <20040716210534.7046D764ED@mail.ossp.org>
Date: Fri, 16 Jul 2004 23:05:34 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Jul-2004 23:05:34
  Branch: HEAD                             Handle: 2004071622053300

  Modified files:
    ossp-pkg/uuid           ChangeLog devtool.conf

  Log:
    switch to GNU shtool 2.0.0

  Summary:
    Revision    Changes     Path
    1.51        +1  -1      ossp-pkg/uuid/ChangeLog
    1.8         +1  -1      ossp-pkg/uuid/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.50 -r1.51 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	16 Jul 2004 21:04:30 -0000	1.50
  +++ ossp-pkg/uuid/ChangeLog	16 Jul 2004 21:05:33 -0000	1.51
  @@ -16,7 +16,7 @@
      o Made documentation of uuid_export() more clear.
        [Ralf S. Engelschall]
   
  -   o Upgrade build environment to GNU libtool 1.5.6
  +   o Upgrade build environment to GNU libtool 1.5.6 and GNU shtool 2.0.0
        [Ralf S. Engelschall]
   
      o Remove some warnings occurring under GCC 3.5
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 devtool.conf
  --- ossp-pkg/uuid/devtool.conf	9 Jun 2004 19:19:33 -0000	1.7
  +++ ossp-pkg/uuid/devtool.conf	16 Jul 2004 21:05:33 -0000	1.8
  @@ -3,7 +3,7 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.2 "1.6.*" all
  +    @autogen shtool   2.0.0 "2.0.*" all
       @autogen libtool  1.5.6 "1.5*"
       @autogen autoconf 2.59  "2.5[3-9]*"
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul 16 23:14:02 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 56E71764ED; Fri, 16 Jul 2004 23:14:02 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ README uuid_vers.h
Message-Id: <20040716211402.56E71764ED@mail.ossp.org>
Date: Fri, 16 Jul 2004 23:14:02 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Jul-2004 23:14:02
  Branch: HEAD                             Handle: 2004071622140100

  Modified files:
    ossp-pkg/uuid           README uuid_vers.h

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.16        +1  -1      ossp-pkg/uuid/README
    1.7         +9  -9      ossp-pkg/uuid/uuid_vers.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 README
  --- ossp-pkg/uuid/README	16 Feb 2004 09:44:27 -0000	1.15
  +++ ossp-pkg/uuid/README	16 Jul 2004 21:14:01 -0000	1.16
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
   
     OSSP uuid - Universally Unique Identifier
  -  Version 1.0.0 (16-Feb-2004)
  +  Version 1.0.1 (16-Jul-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_vers.h
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 uuid_vers.h
  --- ossp-pkg/uuid/uuid_vers.h	16 Feb 2004 09:44:27 -0000	1.6
  +++ ossp-pkg/uuid/uuid_vers.h	16 Jul 2004 21:14:01 -0000	1.7
  @@ -8,7 +8,7 @@
   #ifndef _UUID_VERS_H_
   #define _UUID_VERS_H_
   
  -#define _UUID_VERSION 0x100200
  +#define _UUID_VERSION 0x100201
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _UUID_VERS_H_AS_HEADER_
   
   _uuid_version_t _uuid_version = {
  -    0x100200,
  -    "1.0.0",
  -    "1.0.0 (16-Feb-2004)",
  -    "This is OSSP uuid, Version 1.0.0 (16-Feb-2004)",
  -    "OSSP uuid 1.0.0 (16-Feb-2004)",
  -    "OSSP uuid/1.0.0",
  -    "@(#)OSSP uuid 1.0.0 (16-Feb-2004)",
  -    "$Id: OSSP uuid 1.0.0 (16-Feb-2004) $"
  +    0x100201,
  +    "1.0.1",
  +    "1.0.1 (16-Jul-2004)",
  +    "This is OSSP uuid, Version 1.0.1 (16-Jul-2004)",
  +    "OSSP uuid 1.0.1 (16-Jul-2004)",
  +    "OSSP uuid/1.0.1",
  +    "@(#)OSSP uuid 1.0.1 (16-Jul-2004)",
  +    "$Id: OSSP uuid 1.0.1 (16-Jul-2004) $"
   };
   
   #endif /* _UUID_VERS_H_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul 16 23:18:34 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CA94D76488; Fri, 16 Jul 2004 23:18:33 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20040716211833.CA94D76488@mail.ossp.org>
Date: Fri, 16 Jul 2004 23:18:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   16-Jul-2004 23:18:33
  Branch: HEAD                             Handle: 2004071622183102

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/uuid   index.wml

  Log:
    release OSSP uuid 1.0.1

  Summary:
    Revision    Changes     Path
    1.92        +1  -0      ossp-web/new/news.txt
    1.80        +1  -1      ossp-web/pkg/lib/index.wml
    1.14        +2  -2      ossp-web/pkg/lib/uuid/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.91 -r1.92 news.txt
  --- ossp-web/new/news.txt	13 Jul 2004 11:10:03 -0000	1.91
  +++ ossp-web/new/news.txt	16 Jul 2004 21:18:31 -0000	1.92
  @@ -1,3 +1,4 @@
  +16-Jul-2004: Released L<OSSP uuid> 1.0.1
   13-Jul-2004: Released L<GNU pth> 2.0.1
   02-Jul-2004: Released T<OSSP shiela> 1.1.4
   02-Jul-2004: Released T<OSSP shtool> 2.0.0
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.79 -r1.80 index.wml
  --- ossp-web/pkg/lib/index.wml	13 Jul 2004 11:10:05 -0000	1.79
  +++ ossp-web/pkg/lib/index.wml	16 Jul 2004 21:18:32 -0000	1.80
  @@ -33,7 +33,7 @@
   			done=100 stable=1.1.0 unstable=none>
     <pkg_item name="uuid" longname="OSSP uuid" type="lib"
               desc="Universally Unique Identifier"
  -			done=100 stable=none unstable=1.0.0>
  +			done=100 stable=1.0.1 unstable=none>
     <pkg_item name="val" longname="OSSP val" type="lib"
               desc="Value Access"
   			done=95 stable=none unstable=0.9.2>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/uuid/index.wml
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 index.wml
  --- ossp-web/pkg/lib/uuid/index.wml	16 Feb 2004 09:52:50 -0000	1.13
  +++ ossp-web/pkg/lib/uuid/index.wml	16 Jul 2004 21:18:33 -0000	1.14
  @@ -43,7 +43,7 @@
   
   <pkg_status
       name="uuid" assign="rse"
  -    stable="1.0.0"    stable_date="16-Feb-2004"
  +    stable="1.0.1"    stable_date="16-Jul-2004"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -54,7 +54,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/uuid/
       directory=$(FTP_ROOT_DIR)/pkg/lib/uuid/
       files="uuid-[0-9.]*.tar.gz" 
  -	stable="uuid-1\.0\.0\.tar\.gz" unstable="none">
  +	stable="uuid-1\.0\.1\.tar\.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jul 17 09:34:45 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CFDD57640B; Sat, 17 Jul 2004 09:34:44 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ ChangeLog devtool.conf
Message-Id: <20040717073444.CFDD57640B@mail.ossp.org>
Date: Sat, 17 Jul 2004 09:34:44 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-Jul-2004 09:34:44
  Branch: HEAD                             Handle: 2004071708344400

  Modified files:
    ossp-pkg/cfg            ChangeLog devtool.conf

  Log:
    Upgraded build environment to GNU libtool 1.5.6 and GNU shtool 2.0.0

  Summary:
    Revision    Changes     Path
    1.9         +5  -0      ossp-pkg/cfg/ChangeLog
    1.16        +2  -2      ossp-pkg/cfg/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	23 Apr 2004 10:05:58 -0000	1.8
  +++ ossp-pkg/cfg/ChangeLog	17 Jul 2004 07:34:44 -0000	1.9
  @@ -8,6 +8,11 @@
   
     CHANGELOG
   
  + Changes between 0.9.3 and 0.9.4 (23-Apr-2003 to xx-Jul-2004):
  +
  +   *) Upgraded build environment to GNU libtool 1.5.6 and GNU shtool 2.0.0
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
    Changes between 0.9.2 and 0.9.3 (10-Nov-2003 to 23-Apr-2004):
   
      *) Import change introduced in OSSP l2 0.9.7:
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 devtool.conf
  --- ossp-pkg/cfg/devtool.conf	23 Apr 2004 10:25:22 -0000	1.15
  +++ ossp-pkg/cfg/devtool.conf	17 Jul 2004 07:34:44 -0000	1.16
  @@ -29,8 +29,8 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.2 "1.6.*" echo fixperm install mkdir tarball version
  -    @autogen libtool  1.5.2 "1.5*"
  +    @autogen shtool   2.0.0 "2.0.*" echo fixperm install mkdir tarball version
  +    @autogen libtool  1.5.6 "1.5*"
       @autogen autoconf 2.59  "2.5[4-9]*"
   
   %autoclean
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jul 17 09:37:59 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 53E607640B; Sat, 17 Jul 2004 09:37:59 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ ChangeLog Makefile.in README THANKS aclocal....
Message-Id: <20040717073759.53E607640B@mail.ossp.org>
Date: Sat, 17 Jul 2004 09:37:59 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-Jul-2004 09:37:59
  Branch: HEAD                             Handle: 2004071708375500

  Modified files:
    ossp-pkg/cfg            ChangeLog Makefile.in README THANKS aclocal.m4
                            cfg-config.in cfg.ac cfg.h cfg.pod cfg_buf.c
                            cfg_buf.h cfg_data.c cfg_data.h cfg_fmt.c
                            cfg_fmt.h cfg_global.h cfg_grid.c cfg_grid.h
                            cfg_main.c cfg_main.h cfg_node.c cfg_node.h
                            cfg_syn.c cfg_syn.h cfg_syn_parse.y cfg_syn_scan.l
                            cfg_test.c cfg_test.cfg cfg_util.c cfg_util.h
                            configure.ac devtool devtool.conf devtool.func

  Log:
    Adjust copyright messages for new year 2004.

  Summary:
    Revision    Changes     Path
    1.10        +3  -0      ossp-pkg/cfg/ChangeLog
    1.6         +3  -3      ossp-pkg/cfg/Makefile.in
    1.9         +3  -3      ossp-pkg/cfg/README
    1.4         +2  -2      ossp-pkg/cfg/THANKS
    1.5         +3  -3      ossp-pkg/cfg/aclocal.m4
    1.5         +3  -3      ossp-pkg/cfg/cfg-config.in
    1.3         +3  -3      ossp-pkg/cfg/cfg.ac
    1.14        +3  -3      ossp-pkg/cfg/cfg.h
    1.12        +3  -3      ossp-pkg/cfg/cfg.pod
    1.10        +3  -3      ossp-pkg/cfg/cfg_buf.c
    1.7         +3  -3      ossp-pkg/cfg/cfg_buf.h
    1.9         +3  -3      ossp-pkg/cfg/cfg_data.c
    1.6         +3  -3      ossp-pkg/cfg/cfg_data.h
    1.6         +1  -1      ossp-pkg/cfg/cfg_fmt.c
    1.5         +3  -3      ossp-pkg/cfg/cfg_fmt.h
    1.4         +3  -3      ossp-pkg/cfg/cfg_global.h
    1.6         +3  -3      ossp-pkg/cfg/cfg_grid.c
    1.4         +3  -3      ossp-pkg/cfg/cfg_grid.h
    1.11        +3  -3      ossp-pkg/cfg/cfg_main.c
    1.5         +3  -3      ossp-pkg/cfg/cfg_main.h
    1.19        +3  -3      ossp-pkg/cfg/cfg_node.c
    1.10        +3  -3      ossp-pkg/cfg/cfg_node.h
    1.17        +3  -3      ossp-pkg/cfg/cfg_syn.c
    1.6         +3  -3      ossp-pkg/cfg/cfg_syn.h
    1.8         +3  -3      ossp-pkg/cfg/cfg_syn_parse.y
    1.18        +3  -3      ossp-pkg/cfg/cfg_syn_scan.l
    1.14        +3  -3      ossp-pkg/cfg/cfg_test.c
    1.4         +3  -3      ossp-pkg/cfg/cfg_test.cfg
    1.4         +3  -3      ossp-pkg/cfg/cfg_util.c
    1.4         +3  -3      ossp-pkg/cfg/cfg_util.h
    1.10        +3  -3      ossp-pkg/cfg/configure.ac
    1.3         +1  -1      ossp-pkg/cfg/devtool
    1.17        +3  -3      ossp-pkg/cfg/devtool.conf
    1.5         +1  -1      ossp-pkg/cfg/devtool.func
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	17 Jul 2004 07:34:44 -0000	1.9
  +++ ossp-pkg/cfg/ChangeLog	17 Jul 2004 07:37:55 -0000	1.10
  @@ -10,6 +10,9 @@
   
    Changes between 0.9.3 and 0.9.4 (23-Apr-2003 to xx-Jul-2004):
   
  +   *) Adjust copyright messages for new year 2004.
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
      *) Upgraded build environment to GNU libtool 1.5.6 and GNU shtool 2.0.0
         [Ralf S. Engelschall <rse@engelschall.com>]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 Makefile.in
  --- ossp-pkg/cfg/Makefile.in	6 Jan 2003 11:17:42 -0000	1.5
  +++ ossp-pkg/cfg/Makefile.in	17 Jul 2004 07:37:55 -0000	1.6
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP cfg - Configuration Parsing
  -##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP cfg, a configuration parsing library which
   ##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/README
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 README
  --- ossp-pkg/cfg/README	23 Apr 2004 10:06:08 -0000	1.8
  +++ ossp-pkg/cfg/README	17 Jul 2004 07:37:55 -0000	1.9
  @@ -25,9 +25,9 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
   
     This file is part of OSSP cfg, a configuration parsing library which
     can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/THANKS
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 THANKS
  --- ossp-pkg/cfg/THANKS	10 Nov 2002 12:12:23 -0000	1.3
  +++ ossp-pkg/cfg/THANKS	17 Jul 2004 07:37:55 -0000	1.4
  @@ -12,8 +12,8 @@
     Credit has to be given to the following sponsors for contributing
     hardware, network and manpower resources (in alphabetical order):
   
  -    o  Cable & Wireless Deutschland GmbH
  -       <http://www.cw.com/de>
  +    o  Cable & Wireless
  +       <http://www.cw.com/>
   
     Credit has to be given to the following people who contributed ideas,
     bugfixes, hints, gave platform feedback, etc. (in alphabetical order):
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 aclocal.m4
  --- ossp-pkg/cfg/aclocal.m4	6 Nov 2003 15:26:16 -0000	1.4
  +++ ossp-pkg/cfg/aclocal.m4	17 Jul 2004 07:37:55 -0000	1.5
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP cfg - Configuration Parsing
  -dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
   dnl ##
   dnl ##  This file is part of OSSP cfg, a configuration parsing library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg-config.in
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 cfg-config.in
  --- ossp-pkg/cfg/cfg-config.in	23 Apr 2004 10:25:22 -0000	1.4
  +++ ossp-pkg/cfg/cfg-config.in	17 Jul 2004 07:37:55 -0000	1.5
  @@ -1,9 +1,9 @@
   #!/bin/sh
   ##
   ##  OSSP cfg - Configuration Parsing
  -##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP cfg, a configuration parsing library which
   ##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg.ac
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 cfg.ac
  --- ossp-pkg/cfg/cfg.ac	6 Jan 2003 11:17:43 -0000	1.2
  +++ ossp-pkg/cfg/cfg.ac	17 Jul 2004 07:37:55 -0000	1.3
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP cfg - Configuration Parsing
  -dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
   dnl ##
   dnl ##  This file is part of OSSP cfg, a configuration parsing library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg.h
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 cfg.h
  --- ossp-pkg/cfg/cfg.h	6 Jan 2003 11:17:43 -0000	1.13
  +++ ossp-pkg/cfg/cfg.h	17 Jul 2004 07:37:55 -0000	1.14
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2004 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg.pod
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 cfg.pod
  --- ossp-pkg/cfg/cfg.pod	6 Jan 2003 11:17:43 -0000	1.11
  +++ ossp-pkg/cfg/cfg.pod	17 Jul 2004 07:37:55 -0000	1.12
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP cfg - Configuration Parsing
  -##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2002-2004 Cable & Wireless (http://www.cw.com/)
   ##
   ##  This file is part of OSSP cfg, a configuration parsing
   ##  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_buf.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 cfg_buf.c
  --- ossp-pkg/cfg/cfg_buf.c	6 Jan 2003 11:17:43 -0000	1.9
  +++ ossp-pkg/cfg/cfg_buf.c	17 Jul 2004 07:37:55 -0000	1.10
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2004 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_buf.h
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 cfg_buf.h
  --- ossp-pkg/cfg/cfg_buf.h	6 Jan 2003 11:17:43 -0000	1.6
  +++ ossp-pkg/cfg/cfg_buf.h	17 Jul 2004 07:37:55 -0000	1.7
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2004 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_data.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 cfg_data.c
  --- ossp-pkg/cfg/cfg_data.c	6 Jan 2003 11:17:43 -0000	1.8
  +++ ossp-pkg/cfg/cfg_data.c	17 Jul 2004 07:37:55 -0000	1.9
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2004 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_data.h
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 cfg_data.h
  --- ossp-pkg/cfg/cfg_data.h	6 Jan 2003 11:17:43 -0000	1.5
  +++ ossp-pkg/cfg/cfg_data.h	17 Jul 2004 07:37:55 -0000	1.6
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2004 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_fmt.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 cfg_fmt.c
  --- ossp-pkg/cfg/cfg_fmt.c	23 Apr 2004 10:05:58 -0000	1.5
  +++ ossp-pkg/cfg/cfg_fmt.c	17 Jul 2004 07:37:55 -0000	1.6
  @@ -2,7 +2,7 @@
   **  OSSP cfg - Configuration Parsing
   **  Copyright (c) 2002-2002 Ralf S. Engelschall <rse@engelschall.com>
   **  Copyright (c) 2002-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2002 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_fmt.h
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 cfg_fmt.h
  --- ossp-pkg/cfg/cfg_fmt.h	6 Jan 2003 11:17:43 -0000	1.4
  +++ ossp-pkg/cfg/cfg_fmt.h	17 Jul 2004 07:37:55 -0000	1.5
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2004 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_global.h
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 cfg_global.h
  --- ossp-pkg/cfg/cfg_global.h	6 Jan 2003 11:17:43 -0000	1.3
  +++ ossp-pkg/cfg/cfg_global.h	17 Jul 2004 07:37:55 -0000	1.4
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2004 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_grid.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 cfg_grid.c
  --- ossp-pkg/cfg/cfg_grid.c	6 Jan 2003 11:17:43 -0000	1.5
  +++ ossp-pkg/cfg/cfg_grid.c	17 Jul 2004 07:37:55 -0000	1.6
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2004 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_grid.h
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 cfg_grid.h
  --- ossp-pkg/cfg/cfg_grid.h	6 Jan 2003 11:17:43 -0000	1.3
  +++ ossp-pkg/cfg/cfg_grid.h	17 Jul 2004 07:37:55 -0000	1.4
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2004 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_main.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 cfg_main.c
  --- ossp-pkg/cfg/cfg_main.c	6 Jan 2003 11:17:43 -0000	1.10
  +++ ossp-pkg/cfg/cfg_main.c	17 Jul 2004 07:37:55 -0000	1.11
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2004 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_main.h
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 cfg_main.h
  --- ossp-pkg/cfg/cfg_main.h	6 Jan 2003 11:17:43 -0000	1.4
  +++ ossp-pkg/cfg/cfg_main.h	17 Jul 2004 07:37:55 -0000	1.5
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2004 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_node.c
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 cfg_node.c
  --- ossp-pkg/cfg/cfg_node.c	6 Jan 2003 11:17:43 -0000	1.18
  +++ ossp-pkg/cfg/cfg_node.c	17 Jul 2004 07:37:55 -0000	1.19
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2004 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_node.h
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 cfg_node.h
  --- ossp-pkg/cfg/cfg_node.h	6 Jan 2003 11:17:43 -0000	1.9
  +++ ossp-pkg/cfg/cfg_node.h	17 Jul 2004 07:37:55 -0000	1.10
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2004 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_syn.c
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 cfg_syn.c
  --- ossp-pkg/cfg/cfg_syn.c	6 Jan 2003 11:17:43 -0000	1.16
  +++ ossp-pkg/cfg/cfg_syn.c	17 Jul 2004 07:37:55 -0000	1.17
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2004 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_syn.h
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 cfg_syn.h
  --- ossp-pkg/cfg/cfg_syn.h	6 Jan 2003 11:17:43 -0000	1.5
  +++ ossp-pkg/cfg/cfg_syn.h	17 Jul 2004 07:37:55 -0000	1.6
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2004 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_syn_parse.y
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 cfg_syn_parse.y
  --- ossp-pkg/cfg/cfg_syn_parse.y	6 Jan 2003 11:17:43 -0000	1.7
  +++ ossp-pkg/cfg/cfg_syn_parse.y	17 Jul 2004 07:37:55 -0000	1.8
  @@ -1,9 +1,9 @@
   %{
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2004 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_syn_scan.l
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 cfg_syn_scan.l
  --- ossp-pkg/cfg/cfg_syn_scan.l	6 Nov 2003 15:25:10 -0000	1.17
  +++ ossp-pkg/cfg/cfg_syn_scan.l	17 Jul 2004 07:37:55 -0000	1.18
  @@ -1,9 +1,9 @@
   %{
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2004 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_test.c
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 cfg_test.c
  --- ossp-pkg/cfg/cfg_test.c	6 Jan 2003 11:17:43 -0000	1.13
  +++ ossp-pkg/cfg/cfg_test.c	17 Jul 2004 07:37:55 -0000	1.14
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2004 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_test.cfg
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 cfg_test.cfg
  --- ossp-pkg/cfg/cfg_test.cfg	6 Jan 2003 11:17:43 -0000	1.3
  +++ ossp-pkg/cfg/cfg_test.cfg	17 Jul 2004 07:37:55 -0000	1.4
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP cfg - Configuration Parsing
  -##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP cfg, a configuration parsing library which
   ##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_util.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 cfg_util.c
  --- ossp-pkg/cfg/cfg_util.c	6 Jan 2003 11:17:43 -0000	1.3
  +++ ossp-pkg/cfg/cfg_util.c	17 Jul 2004 07:37:55 -0000	1.4
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2004 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_util.h
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 cfg_util.h
  --- ossp-pkg/cfg/cfg_util.h	6 Jan 2003 11:17:43 -0000	1.3
  +++ ossp-pkg/cfg/cfg_util.h	17 Jul 2004 07:37:55 -0000	1.4
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2003-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2003-2004 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/configure.ac
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 configure.ac
  --- ossp-pkg/cfg/configure.ac	6 Jan 2003 11:17:43 -0000	1.9
  +++ ossp-pkg/cfg/configure.ac	17 Jul 2004 07:37:55 -0000	1.10
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP cfg - Configuration Parsing
  -dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
   dnl ##
   dnl ##  This file is part of OSSP cfg, a configuration parsing library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/devtool
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 devtool
  --- ossp-pkg/cfg/devtool	19 Mar 2004 15:43:32 -0000	1.2
  +++ ossp-pkg/cfg/devtool	17 Jul 2004 07:37:55 -0000	1.3
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  devtool -- Development Tool
  -##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   if [ $# -eq 0 ]; then
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 devtool.conf
  --- ossp-pkg/cfg/devtool.conf	17 Jul 2004 07:34:44 -0000	1.16
  +++ ossp-pkg/cfg/devtool.conf	17 Jul 2004 07:37:55 -0000	1.17
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP cfg - Configuration Parsing
  -##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP cfg, a configuration parsing library which
   ##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/devtool.func
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 devtool.func
  --- ossp-pkg/cfg/devtool.func	19 Mar 2004 15:43:32 -0000	1.4
  +++ ossp-pkg/cfg/devtool.func	17 Jul 2004 07:37:55 -0000	1.5
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   devtool_require () {
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jul 17 16:34:06 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 98F9C76556; Sat, 17 Jul 2004 16:34:06 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ ChangeLog cfg_node.c
Message-Id: <20040717143406.98F9C76556@mail.ossp.org>
Date: Sat, 17 Jul 2004 16:34:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-Jul-2004 16:34:06
  Branch: HEAD                             Handle: 2004071715340501

  Modified files:
    ossp-pkg/cfg            ChangeLog cfg_node.c

  Log:
    Fixed warnings under GCC 3.4/3.5.

  Summary:
    Revision    Changes     Path
    1.11        +3  -0      ossp-pkg/cfg/ChangeLog
    1.20        +2  -2      ossp-pkg/cfg/cfg_node.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	17 Jul 2004 07:37:55 -0000	1.10
  +++ ossp-pkg/cfg/ChangeLog	17 Jul 2004 14:34:05 -0000	1.11
  @@ -10,6 +10,9 @@
   
    Changes between 0.9.3 and 0.9.4 (23-Apr-2003 to xx-Jul-2004):
   
  +   *) Fixed warnings under GCC 3.4/3.5.
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
      *) Adjust copyright messages for new year 2004.
         [Ralf S. Engelschall <rse@engelschall.com>]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_node.c
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 cfg_node.c
  --- ossp-pkg/cfg/cfg_node.c	17 Jul 2004 07:37:55 -0000	1.19
  +++ ossp-pkg/cfg/cfg_node.c	17 Jul 2004 14:34:06 -0000	1.20
  @@ -53,7 +53,7 @@
           return CFG_ERR_ARG;
   
       /* allocate memory */
  -    if ((rc = cfg_grid_alloc(cfg->grid_nodes, (void **)&n)) != CFG_OK)
  +    if ((rc = cfg_grid_alloc(cfg->grid_nodes, (void **)(void *)&n)) != CFG_OK)
           return rc;
   
       /* initialize node attributes */
  @@ -105,7 +105,7 @@
           return CFG_ERR_ARG;
   
       /* allocate memory for new node */
  -    if ((rc = cfg_grid_alloc(cfg->grid_nodes, (void **)&n)) != CFG_OK)
  +    if ((rc = cfg_grid_alloc(cfg->grid_nodes, (void **)(void *)&n)) != CFG_OK)
           return rc;
   
       /* clone node attributes */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jul 19 09:41:35 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4EADF76400; Mon, 19 Jul 2004 09:41:35 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog THANKS sh.version shtool.m4
Message-Id: <20040719074135.4EADF76400@mail.ossp.org>
Date: Mon, 19 Jul 2004 09:41:35 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-Jul-2004 09:41:35
  Branch: HEAD                             Handle: 2004071908413400

  Modified files:
    ossp-pkg/shtool         ChangeLog THANKS sh.version shtool.m4

  Log:
    - Added M4 language output to "shtool version".
    - Fixed AC_PROG_SHTOOL definition in shtool.m4.
    
    Submitted by: James Rowe <Jay@jnrowe.ukfsn.org>

  Summary:
    Revision    Changes     Path
    1.206       +8  -0      ossp-pkg/shtool/ChangeLog
    1.33        +1  -0      ossp-pkg/shtool/THANKS
    1.37        +18 -2      ossp-pkg/shtool/sh.version
    1.7         +1  -1      ossp-pkg/shtool/shtool.m4
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.205 -r1.206 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	2 Jul 2004 13:06:36 -0000	1.205
  +++ ossp-pkg/shtool/ChangeLog	19 Jul 2004 07:41:34 -0000	1.206
  @@ -9,6 +9,14 @@
   
    ChangeLog
   
  + Changes between 2.0.0 and 2.0.1 (02-Jul-2004 to xx-XXX-2004):
  +
  +   *) Added M4 language output to "shtool version".
  +      [James Rowe <Jay@jnrowe.ukfsn.org>]
  +
  +   *) Fixed AC_PROG_SHTOOL definition in shtool.m4.
  +      [James Rowe <Jay@jnrowe.ukfsn.org>]
  +
    Changes between 2.0b4 and 2.0.0 (08-May-2004 to 02-Jul-2004):
   
      *) Add -w/--warning option to "shtool subst" command which
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/THANKS
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 THANKS
  --- ossp-pkg/shtool/THANKS	12 Feb 2004 16:06:26 -0000	1.32
  +++ ossp-pkg/shtool/THANKS	19 Jul 2004 07:41:34 -0000	1.33
  @@ -30,6 +30,7 @@
     o Liones                   <liones@myrealbox.com>
     o Thomas Lotterer          <thomas@lotterer.net>
     o Markus F.X.J. Oberhumer  <markus.oberhumer@jk.uni-linz.ac.at>
  +  o James Rowe               <Jay@jnrowe.ukfsn.org>
     o Benjamin Saller          <case@appliedtheory.com>
     o Michael Schloh           <michael@schloh.com>
     o Christoph Schug          <chris@schug.net>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.version
  ============================================================================
  $ cvs diff -u -r1.36 -r1.37 sh.version
  --- ossp-pkg/shtool/sh.version	12 Feb 2004 16:06:27 -0000	1.36
  +++ ossp-pkg/shtool/sh.version	19 Jul 2004 07:41:34 -0000	1.37
  @@ -260,6 +260,22 @@
               echo >>$file "#endif /* _${filestr}_AS_HEADER_ */"
               echo >>$file ""
               ;;
  +        m4 )
  +            echo >>$file "##"
  +            echo >>$file "##  ${file} -- Version Information for ${name} (syntax: M4)"
  +            echo >>$file "##  [automatically generated and maintained by GNU shtool]"
  +            echo >>$file "##"
  +            echo >>$file ""
  +            echo >>$file "m4_define([v_hex],   [${vHex}])"
  +            echo >>$file "m4_define([v_short], [${vShort}])"
  +            echo >>$file "m4_define([v_long],  [${vLong}])"
  +            echo >>$file "m4_define([v_tex],   [${vTeX}])"
  +            echo >>$file "m4_define([v_gnu],   [${vGNU}])"
  +            echo >>$file "m4_define([v_web],   [${vWeb}])"
  +            echo >>$file "m4_define([v_sccs],  [${vSCCS}])"
  +            echo >>$file "m4_define([v_rcs],   [${vRCS}])"
  +            echo >>$file ""
  +            ;;
           perl )
               echo >>$file "##"
               echo >>$file "##  ${file} -- Version Information for ${name} (syntax: Perl)"
  @@ -355,8 +371,8 @@
   =item B<-l>, B<--language> I<lang>
   
   Choose format of version file I<file>. I<lang>="C<txt>", ANSI C
  -(I<lang>="c"), Perl (I<lang>="perl") or Python (I<lang>="python").
  -Default is C<txt>.
  +(I<lang>="c"), M4 (I<lang>="m4"), Perl (I<lang>="perl") or Python 
  +(I<lang>="python"). Default is C<txt>.
   
   =item B<-n>, B<--name> I<name>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtool.m4
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 shtool.m4
  --- ossp-pkg/shtool/shtool.m4	1 Jan 2004 16:54:20 -0000	1.6
  +++ ossp-pkg/shtool/shtool.m4	19 Jul 2004 07:41:34 -0000	1.7
  @@ -22,7 +22,7 @@
   ##  the standard macro for finding GNU shtool:
   ##  AC_PROG_SHTOOL
   ##
  -AC_DEFUN(AC_PROG_SHTOOL,[dnl
  +AC_DEFUN([AC_PROG_SHTOOL],[dnl
   AC_PREREQ(2.13)dnl
   AC_MSG_CHECKING([for GNU shtool])
   AC_CACHE_VAL(ac_cv_shtool,[dnl
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jul 28 14:57:00 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AEE8376319; Wed, 28 Jul 2004 14:57:00 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ snmpdx.pl
Message-Id: <20040728125700.AEE8376319@mail.ossp.org>
Date: Wed, 28 Jul 2004 14:57:00 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   28-Jul-2004 14:57:00
  Branch: HEAD                             Handle: 2004072813570000

  Modified files:
    ossp-pkg/snmpdx         snmpdx.pl

  Log:
    scope and initialization of variables were wrong causing a infinite
    loop with perl >= 5.8.4, which optimizes away unnecessary assignments
    like "my $foo = undef"

  Summary:
    Revision    Changes     Path
    1.11        +8  -4      ossp-pkg/snmpdx/snmpdx.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.pl
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 snmpdx.pl
  --- ossp-pkg/snmpdx/snmpdx.pl	21 Oct 2003 18:13:16 -0000	1.10
  +++ ossp-pkg/snmpdx/snmpdx.pl	28 Jul 2004 12:57:00 -0000	1.11
  @@ -724,13 +724,17 @@
   
           #  re-entry point for OID processing
           my $oid_search = $oid_request;
  +        my $oid_action;
  +        my $oid_handled;
  +        my $oid_handler;
  +        my $oid_next;
           RETRY:
   
           #   determine acted/handled OID
  -        my $oid_action  = undef;
  -        my $oid_handled = undef;
  -        my $oid_handler = undef;
  -        my $oid_next    = undef;
  +        $oid_action  = undef;
  +        $oid_handled = undef;
  +        $oid_handler = undef;
  +        $oid_next    = undef;
           if ($cmd =~ m/^GET$/i) {
               #   search for explicitly handled OID
               for (my $i = 0; defined($oidtable->[$i]); $i++) {
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jul 28 15:01:02 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C7FED7631C; Wed, 28 Jul 2004 15:01:01 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/snmpdx.d/ hwCpu.pm hwDisk.pm hwFan.pm hwPs...
Message-Id: <20040728130101.C7FED7631C@mail.ossp.org>
Date: Wed, 28 Jul 2004 15:01:01 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   28-Jul-2004 15:01:01
  Branch: HEAD                             Handle: 2004072814005801

  Modified files:
    ossp-pkg/snmpdx         snmpdx.pl
    ossp-pkg/snmpdx/snmpdx.d
                            hwCpu.pm hwDisk.pm hwFan.pm hwPs.pm hwRam.pm
                            sysFs.pm sysVM.pm

  Log:
    remove irrelevant assignments which perl >= 5.8.4 optimizes away
    anyway

  Summary:
    Revision    Changes     Path
    1.9         +6  -6      ossp-pkg/snmpdx/snmpdx.d/hwCpu.pm
    1.6         +3  -3      ossp-pkg/snmpdx/snmpdx.d/hwDisk.pm
    1.5         +3  -3      ossp-pkg/snmpdx/snmpdx.d/hwFan.pm
    1.5         +3  -3      ossp-pkg/snmpdx/snmpdx.d/hwPs.pm
    1.4         +6  -6      ossp-pkg/snmpdx/snmpdx.d/hwRam.pm
    1.6         +3  -3      ossp-pkg/snmpdx/snmpdx.d/sysFs.pm
    1.10        +23 -23     ossp-pkg/snmpdx/snmpdx.d/sysVM.pm
    1.12        +1  -1      ossp-pkg/snmpdx/snmpdx.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/hwCpu.pm
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 hwCpu.pm
  --- ossp-pkg/snmpdx/snmpdx.d/hwCpu.pm	10 Sep 2003 15:01:46 -0000	1.8
  +++ ossp-pkg/snmpdx/snmpdx.d/hwCpu.pm	28 Jul 2004 13:00:59 -0000	1.9
  @@ -37,8 +37,8 @@
       my ($self, $obj) = @_;
   
       if ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i) {
  -        my $hwCpuNum   = undef;
  -        my @hwCpuENTRY = undef; #N/A
  +        my $hwCpuNum;
  +        my @hwCpuENTRY; #N/A
   
           #   local workspace
           my $out; my $raw;
  @@ -53,8 +53,8 @@
           $obj->{-value} = $hwCpuNum if ($obj->{-name} =~ m/\.hwCpuNum$/);
       }
       elsif ($self->{-ctx}->{-platform}->id() =~ m/Linux/i) {
  -        my $hwCpuNum   = undef;
  -        my @hwCpuENTRY = undef; #N/A
  +        my $hwCpuNum;
  +        my @hwCpuENTRY; #N/A
   
           #   local workspace
           my $out; my $raw;
  @@ -71,8 +71,8 @@
           $obj->{-value} = $hwCpuNum if ($obj->{-name} =~ m/\.hwCpuNum$/);
       }
       elsif($self->{-ctx}->{-platform}->id() =~ m/SunOS/i) {
  -        my $hwCpuNum   = undef;
  -        my @hwCpuENTRY = undef;
  +        my $hwCpuNum;
  +        my @hwCpuENTRY;
   
           #   local workspace
           my $out; my $raw; my $arch;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/hwDisk.pm
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 hwDisk.pm
  --- ossp-pkg/snmpdx/snmpdx.d/hwDisk.pm	10 Sep 2003 15:01:46 -0000	1.5
  +++ ossp-pkg/snmpdx/snmpdx.d/hwDisk.pm	28 Jul 2004 13:00:59 -0000	1.6
  @@ -37,13 +37,13 @@
       my ($self, $obj) = @_;
   
       if ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i) {
  -        my @hwDiskENTRY = undef; #N/A
  +        my @hwDiskENTRY; #N/A
       }
       elsif ($self->{-ctx}->{-platform}->id() =~ m/Linux/i) {
  -        my @hwDiskENTRY = undef; #N/A
  +        my @hwDiskENTRY; #N/A
       }
       elsif($self->{-ctx}->{-platform}->id() =~ m/SunOS/i) {
  -        my @hwDiskENTRY = undef;
  +        my @hwDiskENTRY;
           my $n = 0;
   
           #   local workspace
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/hwFan.pm
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 hwFan.pm
  --- ossp-pkg/snmpdx/snmpdx.d/hwFan.pm	10 Sep 2003 15:01:46 -0000	1.4
  +++ ossp-pkg/snmpdx/snmpdx.d/hwFan.pm	28 Jul 2004 13:00:59 -0000	1.5
  @@ -37,13 +37,13 @@
       my ($self, $obj) = @_;
   
       if ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i) {
  -        my @hwFanENTRY = undef; #N/A
  +        my @hwFanENTRY; #N/A
       }
       elsif ($self->{-ctx}->{-platform}->id() =~ m/Linux/i) {
  -        my @hwFanENTRY = undef; #N/A
  +        my @hwFanENTRY; #N/A
       }
       elsif($self->{-ctx}->{-platform}->id() =~ m/SunOS/i) {
  -        my @hwFanENTRY = undef;
  +        my @hwFanENTRY;
           my $n = 0;
   
           #   local workspace
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/hwPs.pm
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 hwPs.pm
  --- ossp-pkg/snmpdx/snmpdx.d/hwPs.pm	10 Sep 2003 15:01:46 -0000	1.4
  +++ ossp-pkg/snmpdx/snmpdx.d/hwPs.pm	28 Jul 2004 13:00:59 -0000	1.5
  @@ -37,13 +37,13 @@
       my ($self, $obj) = @_;
   
       if ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i) {
  -        my @hwPsENTRY = undef; #N/A
  +        my @hwPsENTRY; #N/A
       }
       elsif ($self->{-ctx}->{-platform}->id() =~ m/Linux/i) {
  -        my @hwPsENTRY = undef; #N/A
  +        my @hwPsENTRY; #N/A
       }
       elsif($self->{-ctx}->{-platform}->id() =~ m/SunOS/i) {
  -        my @hwPsENTRY = undef;
  +        my @hwPsENTRY;
           my $n = 0;
   
           #   local workspace
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/hwRam.pm
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 hwRam.pm
  --- ossp-pkg/snmpdx/snmpdx.d/hwRam.pm	10 Sep 2003 15:01:46 -0000	1.3
  +++ ossp-pkg/snmpdx/snmpdx.d/hwRam.pm	28 Jul 2004 13:00:59 -0000	1.4
  @@ -42,8 +42,8 @@
           # hwRamStatus N.A.
           #
           if ($obj->{-name} =~ m/\.hwRamMax$/) {
  -            my $hwRamMax    = undef;
  -            my $hwRamStatus = undef;
  +            my $hwRamMax;
  +            my $hwRamStatus;
   
               #   local workspace
               my $out; my $raw;
  @@ -62,8 +62,8 @@
           # hwRamStatus N.A.
           #
           if ($obj->{-name} =~ m/\.hwRamMax$/) {
  -            my $hwRamMax    = undef;
  -            my $hwRamStatus = undef;
  +            my $hwRamMax;
  +            my $hwRamStatus;
   
               #   local workspace
               my $out; my $raw;
  @@ -84,8 +84,8 @@
           #FIXME set prtdiag cache expiry to "forever" when cache supports multiple caching times
           #
           if ($obj->{-name} =~ m/\.hwRam(Max|Status)$/) {
  -            my $hwRamMax    = undef;
  -            my $hwRamStatus = undef;
  +            my $hwRamMax;
  +            my $hwRamStatus;
   
               #   local workspace
               my $out; my $raw; my $n2i; my @dat; my $arch;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/sysFs.pm
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 sysFs.pm
  --- ossp-pkg/snmpdx/snmpdx.d/sysFs.pm	10 Sep 2003 15:01:46 -0000	1.5
  +++ ossp-pkg/snmpdx/snmpdx.d/sysFs.pm	28 Jul 2004 13:00:59 -0000	1.6
  @@ -37,7 +37,7 @@
       my ($self, $obj) = @_;
   
       if ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i) {
  -    	my @sysFsENTRY  = undef;
  +    	my @sysFsENTRY;
           my $n = 0;
           
           #   local workspace
  @@ -82,7 +82,7 @@
           }
       }
       elsif ($self->{-ctx}->{-platform}->id() =~ m/Linux/i) {
  -    	my @sysFsENTRY  = undef;
  +    	my @sysFsENTRY;
           my $n = 0;
           
           #   local workspace
  @@ -127,7 +127,7 @@
           }
       }
       elsif($self->{-ctx}->{-platform}->id() =~ m/SunOS/i) {
  -    	my @sysFsENTRY  = undef;
  +    	my @sysFsENTRY;
           my $n = 0;
           
           #   local workspace
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/sysVM.pm
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 sysVM.pm
  --- ossp-pkg/snmpdx/snmpdx.d/sysVM.pm	20 Sep 2003 10:33:17 -0000	1.9
  +++ ossp-pkg/snmpdx/snmpdx.d/sysVM.pm	28 Jul 2004 13:00:59 -0000	1.10
  @@ -49,9 +49,9 @@
           ##  sysVMActivity "/usr/bin/vmstat", add pi and po column
           ##
           if ($obj->{-name} =~ m/\.sysVMRam(Max|Used|Free)$/) {
  -            my $sysVMRamMax  = undef;
  -            my $sysVMRamUsed = undef;
  -            my $sysVMRamFree = undef;
  +            my $sysVMRamMax;
  +            my $sysVMRamUsed;
  +            my $sysVMRamFree;
   
               #   query system for sysctl(8) variables
               my $out = $self->{-ctx}->{-sys}->run("/sbin/sysctl -a", "1m");
  @@ -81,9 +81,9 @@
               $obj->{-value} = $sysVMRamFree if ($obj->{-name} =~ m/\.sysVMRamFree$/);
           }
           elsif ($obj->{-name} =~ m/\.sysVMSwap(Max|Used|Free)$/) {
  -            my $sysVMSwapMax  = undef;
  -            my $sysVMSwapUsed = undef;
  -            my $sysVMSwapFree = undef;
  +            my $sysVMSwapMax;
  +            my $sysVMSwapUsed;
  +            my $sysVMSwapFree;
   
               #   determine sysVMSwapMax and sysVMSwapUsed
               my $out = $self->{-ctx}->{-sys}->run("/usr/sbin/swapinfo -k", "1m");
  @@ -111,7 +111,7 @@
               $obj->{-value} = $sysVMSwapFree if ($obj->{-name} =~ m/\.sysVMSwapFree$/);
           }
           elsif ($obj->{-name} =~ m/\.sysVMActivity$/) {
  -            my $sysVMActivity = undef;
  +            my $sysVMActivity;
   
               my $out = $self->{-ctx}->{-sys}->run("/usr/bin/vmstat", "1m");
               my $raw = $out->{-stdout};
  @@ -144,9 +144,9 @@
           ##  replaced by native Perl code to improve performance...
           ##
           if ($obj->{-name} =~ m/\.sysVMRam(Max|Used|Free)$/) {
  -            my $sysVMRamMax  = undef;
  -            my $sysVMRamUsed = undef;
  -            my $sysVMRamFree = undef;
  +            my $sysVMRamMax;
  +            my $sysVMRamUsed;
  +            my $sysVMRamFree;
   
               #   determine sysVMRamMax and sysVMRamUsed
               my $out = $self->{-ctx}->{-sys}->run("/bin/cat /proc/meminfo", "1m");
  @@ -180,9 +180,9 @@
               $obj->{-value} = $sysVMRamFree if ($obj->{-name} =~ m/\.sysVMRamFree$/);
           }
           elsif ($obj->{-name} =~ m/\.sysVMSwap(Max|Used|Free)$/) {
  -            my $sysVMSwapMax  = undef;
  -            my $sysVMSwapUsed = undef;
  -            my $sysVMSwapFree = undef;
  +            my $sysVMSwapMax;
  +            my $sysVMSwapUsed;
  +            my $sysVMSwapFree;
   
               #   determine sysVMSwapMax and sysVMSwapFree
               my $out = $self->{-ctx}->{-sys}->run("/bin/cat /proc/meminfo", "1m");
  @@ -205,7 +205,7 @@
               $obj->{-value} = $sysVMSwapFree if ($obj->{-name} =~ m/\.sysVMSwapFree$/);
           }
           elsif ($obj->{-name} =~ m/\.sysVMActivity$/) {
  -            my $sysVMActivity = undef;
  +            my $sysVMActivity;
   
               my $out = $self->{-ctx}->{-sys}->run("/usr/bin/vmstat", "1m");
               my $raw = $out->{-stdout};
  @@ -233,9 +233,9 @@
           ##  sysVMActivity "/bin/vmstat", sr column
           ##
           if ($obj->{-name} =~ m/\.sysVMRam(Max|Used|Free)$/) {
  -            my $sysVMRamMax  = undef;
  -            my $sysVMRamUsed = undef;
  -            my $sysVMRamFree = undef;
  +            my $sysVMRamMax;
  +            my $sysVMRamUsed;
  +            my $sysVMRamFree;
   
               #   determine architecture
               my $arch = $self->{-ctx}->{-platform}->arch();
  @@ -279,9 +279,9 @@
               $obj->{-value} = $sysVMRamFree if ($obj->{-name} =~ m/\.sysVMRamFree$/);
           }
           elsif ($obj->{-name} =~ m/\.sysVMSwap(Max|Used|Free)$/) {
  -            my $sysVMSwapMax  = undef;
  -            my $sysVMSwapUsed = undef;
  -            my $sysVMSwapFree = undef;
  +            my $sysVMSwapMax;
  +            my $sysVMSwapUsed;
  +            my $sysVMSwapFree;
   
               #   determine sysVMSwapMax, sysVMSwapFree
               my $out = $self->{-ctx}->{-sys}->run("/usr/sbin/swap -l", "1m");
  @@ -290,8 +290,8 @@
               if ($raw =~ m/^\s*([^\n]*\bblocks[^\n]*\bfree[^\n]*)\n(.*)$/s) {
                   $n2i = &mkn2i(split(/\s+/, $1)) if (scalar(keys(%{$n2i})) == 0);
               }
  -            my $tmpMax  = undef;
  -            my $tmpFree = undef;
  +            my $tmpMax;
  +            my $tmpFree;
               foreach my $r (split(/\n/, $2)) {
                   if ($r =~ m/^\//) {
                       my @dat = split(/\s+/, $r);
  @@ -319,7 +319,7 @@
               $obj->{-value} = $sysVMSwapFree if ($obj->{-name} =~ m/\.sysVMSwapFree$/);
           }
           elsif ($obj->{-name} =~ m/\.sysVMActivity$/) {
  -            my $sysVMActivity = undef;
  +            my $sysVMActivity;
   
               my $out = $self->{-ctx}->{-sys}->run("/bin/vmstat", "1m");
               my $raw = $out->{-stdout};
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.pl
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 snmpdx.pl
  --- ossp-pkg/snmpdx/snmpdx.pl	28 Jul 2004 12:57:00 -0000	1.11
  +++ ossp-pkg/snmpdx/snmpdx.pl	28 Jul 2004 13:00:58 -0000	1.12
  @@ -150,7 +150,7 @@
   sub fetch ($$) {
       my ($self, $id) = @_;
   
  -    my $value = undef;
  +    my $value;
       if (defined($self->{-cache}->{$id})) {
           if ($self->{-cache}->{$id}->{-expires} > time()) {
               $value = $self->{-cache}->{$id}->{-value};
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jul 28 15:37:49 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5DC8076319; Wed, 28 Jul 2004 15:37:49 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/snmpdx.d/ swOp.pm
Message-Id: <20040728133749.5DC8076319@mail.ossp.org>
Date: Wed, 28 Jul 2004 15:37:49 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   28-Jul-2004 15:37:49
  Branch: HEAD                             Handle: 2004072814374800

  Modified files:
    ossp-pkg/snmpdx/snmpdx.d
                            swOp.pm

  Log:
    quick hack to support OpenPKG 2.x (breaking OpenPKG 1.x)

  Summary:
    Revision    Changes     Path
    1.8         +1  -1      ossp-pkg/snmpdx/snmpdx.d/swOp.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/swOp.pm
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 swOp.pm
  --- ossp-pkg/snmpdx/snmpdx.d/swOp.pm	21 Oct 2003 18:13:17 -0000	1.7
  +++ ossp-pkg/snmpdx/snmpdx.d/swOp.pm	28 Jul 2004 13:37:48 -0000	1.8
  @@ -38,7 +38,7 @@
   
       #   query details via rpm(1)
       my $out = $self->{-ctx}->{-sys}->run(
  -        "rpm -qa --qf '[%{NAME} %{VERSION} %{RELEASE} %{BUILDTIME} %{INSTALLTIME}\\n]'", "10m");
  +        "openpkg rpm -qa --qf '[%{NAME} %{VERSION} %{RELEASE} %{BUILDTIME} %{INSTALLTIME}\\n]'", "10m");
       return if ($out->{-stdout} eq '');
   
       #   parse details into internal structure
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jul 28 15:41:08 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 518FF76319; Wed, 28 Jul 2004 15:41:08 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ README
Message-Id: <20040728134108.518FF76319@mail.ossp.org>
Date: Wed, 28 Jul 2004 15:41:08 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   28-Jul-2004 15:41:08
  Branch: HEAD                             Handle: 2004072814410700

  Modified files:
    ossp-pkg/snmpdx         README

  Log:
    add concise QUICKSTART info into README

  Summary:
    Revision    Changes     Path
    1.13        +16 -0      ossp-pkg/snmpdx/README
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/README
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 README
  --- ossp-pkg/snmpdx/README	21 Oct 2003 18:14:28 -0000	1.12
  +++ ossp-pkg/snmpdx/README	28 Jul 2004 13:41:07 -0000	1.13
  @@ -45,3 +45,19 @@
     o http://www.ossp.org/pkg/tool/snmpdx/
     o  ftp://ftp.ossp.org/pkg/tool/snmpdx/
   
  +  QUICKSTART
  +
  +    $ ./devtool autogen #optional
  +    $ PREFIX=/openpkg-dev; ./configure \
  +        --prefix=$PREFIX \
  +        --with-snmp=$PREFIX \
  +        --with-perl=$PREFIX/bin/perl
  +    $ make
  +
  +    Standalone, try
  +    $ ( echo "getnext"; echo ".1" ) | ./snmpdx --probedir=./snmpdx.d --mibdir=.
  +    
  +    If integrated into snmp, try
  +    # make install
  +    $ snmpwalk -Os -c public -v 2c 127.0.0.1 .1.3.6.1.4.1.4007.42.1.1.2.2.1.1
  +
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jul 28 15:42:01 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C5EF976319; Wed, 28 Jul 2004 15:42:01 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ ChangeLog README VERSION
Message-Id: <20040728134201.C5EF976319@mail.ossp.org>
Date: Wed, 28 Jul 2004 15:42:01 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   28-Jul-2004 15:42:01
  Branch: HEAD                             Handle: 2004072814420100

  Modified files:
    ossp-pkg/snmpdx         ChangeLog README VERSION

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.15        +11 -0      ossp-pkg/snmpdx/ChangeLog
    1.14        +1  -1      ossp-pkg/snmpdx/README
    1.11        +1  -1      ossp-pkg/snmpdx/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 ChangeLog
  --- ossp-pkg/snmpdx/ChangeLog	21 Oct 2003 18:13:16 -0000	1.14
  +++ ossp-pkg/snmpdx/ChangeLog	28 Jul 2004 13:42:01 -0000	1.15
  @@ -9,6 +9,17 @@
     ChangeLog
     =========
   
  +  Changes between 0.2.8 and 0.2.9 (21-Oct-2003 to 28-Jul-2004):
  +
  +   *) add concise QUICKSTART info into README
  +   *) Scope and initialization of variables were wrong causing a
  +      infinite loop with perl >= 5.8.4, which optimizes away unnecessary
  +      assignments like "my $foo = undef"
  +   *) Remove irrelevant assignments which perl >= 5.8.4 optimizes away
  +      anyway
  +   *) Quick hack to support OpenPKG 2.x (breaking OpenPKG 1.x support)
  +      [Thomas Lotterer]
  +
     Changes between 0.2.7 and 0.2.8 (20-Sep-2003 to 21-Oct-2003):
   
      *) Get rid of "use IO;" deprecation warnings under Perl 5.8.1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/README
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 README
  --- ossp-pkg/snmpdx/README	28 Jul 2004 13:41:07 -0000	1.13
  +++ ossp-pkg/snmpdx/README	28 Jul 2004 13:42:01 -0000	1.14
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/_| |_|_| |_| |_| .__/ \__,_/_/\_\
                                                          |_|
     OSSP snmpdx - SNMP Daemon Extension
  -  Version 0.2.8 (21-Oct-2003)
  +  Version 0.2.9 (28-Jul-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/VERSION
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 VERSION
  --- ossp-pkg/snmpdx/VERSION	21 Oct 2003 18:14:28 -0000	1.10
  +++ ossp-pkg/snmpdx/VERSION	28 Jul 2004 13:42:01 -0000	1.11
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP snmpdx (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP snmpdx, Version 0.2.8 (21-Oct-2003)
  +  This is OSSP snmpdx, Version 0.2.9 (28-Jul-2004)
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jul 29 11:48:26 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5927376321; Thu, 29 Jul 2004 11:48:26 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/snmpdx.d/ sysVM.pm
Message-Id: <20040729094826.5927376321@mail.ossp.org>
Date: Thu, 29 Jul 2004 11:48:26 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   29-Jul-2004 11:48:26
  Branch: HEAD                             Handle: 2004072910482500

  Modified files:
    ossp-pkg/snmpdx/snmpdx.d
                            sysVM.pm

  Log:
    remove superfluous "my"

  Summary:
    Revision    Changes     Path
    1.11        +1  -1      ossp-pkg/snmpdx/snmpdx.d/sysVM.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/sysVM.pm
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 sysVM.pm
  --- ossp-pkg/snmpdx/snmpdx.d/sysVM.pm	28 Jul 2004 13:00:59 -0000	1.10
  +++ ossp-pkg/snmpdx/snmpdx.d/sysVM.pm	29 Jul 2004 09:48:25 -0000	1.11
  @@ -64,7 +64,7 @@
               $sysVMRamMax = int(&mem_rounded($sysctl->{"hw.physmem"}) / (1024*1024));
   
               #   determine sysVMRamFree
  -            my $sysVMRamFree =
  +            $sysVMRamFree =
                   int((  $sysctl->{"hw.pagesize"}
                        * (  $sysctl->{"vm.stats.vm.v_inactive_count"} 
                           + $sysctl->{"vm.stats.vm.v_cache_count"}
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul 30 11:20:11 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B3ADC7631A; Fri, 30 Jul 2004 11:20:10 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ devtool.conf
Message-Id: <20040730092010.B3ADC7631A@mail.ossp.org>
Date: Fri, 30 Jul 2004 11:20:10 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   30-Jul-2004 11:20:10
  Branch: HEAD                             Handle: 2004073010201000

  Modified files:
    ossp-pkg/snmpdx         devtool.conf

  Log:
    use latest autogeneration tools (shtool 2.0.0, autoconf 2.59)

  Summary:
    Revision    Changes     Path
    1.6         +2  -2      ossp-pkg/snmpdx/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 devtool.conf
  --- ossp-pkg/snmpdx/devtool.conf	10 Sep 2003 14:36:17 -0000	1.5
  +++ ossp-pkg/snmpdx/devtool.conf	30 Jul 2004 09:20:10 -0000	1.6
  @@ -3,8 +3,8 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.2 "1.6.*" all
  -    @autogen autoconf 2.57  "2.5[4-9]*"
  +    @autogen shtool   2.0.0 "2.0.*" all
  +    @autogen autoconf 2.59  "2.5[4-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul 30 11:25:11 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8ACE67631A; Fri, 30 Jul 2004 11:25:11 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ snmpdx.pl
Message-Id: <20040730092511.8ACE67631A@mail.ossp.org>
Date: Fri, 30 Jul 2004 11:25:11 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   30-Jul-2004 11:25:11
  Branch: HEAD                             Handle: 2004073010251100

  Modified files:
    ossp-pkg/snmpdx         snmpdx.pl

  Log:
    get rid of perl warnings when $cmd contains a %

  Summary:
    Revision    Changes     Path
    1.13        +3  -3      ossp-pkg/snmpdx/snmpdx.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.pl
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 snmpdx.pl
  --- ossp-pkg/snmpdx/snmpdx.pl	28 Jul 2004 13:00:58 -0000	1.12
  +++ ossp-pkg/snmpdx/snmpdx.pl	30 Jul 2004 09:25:11 -0000	1.13
  @@ -203,11 +203,11 @@
       $expires = "1m" if (not defined($expires));
       my $result = $self->{-cache}->fetch($cmd);
       if (defined($result)) {
  -        $self->{-log}->printf(4, "system: run: \"$cmd\" ($expires) [CACHE HIT]");
  +        $self->{-log}->printf(4, "system: run: \"%s\" ($expires) [CACHE HIT]", $cmd);
       }
       else {
  -        $self->{-log}->printf(3, "system: run: \"$cmd\" ($expires) [CACHE MISS]");
  -        $self->{-log}->printf(5, "system: executing command: \"$cmd\"");
  +        $self->{-log}->printf(3, "system: run: \"%s\" ($expires) [CACHE MISS]", $cmd);
  +        $self->{-log}->printf(5, "system: executing command: \"%s\"", $cmd);
           $result = { -stdout => '', -rv => 0 };
           $result->{-stdout} = `$cmd 2>/dev/null`;
           $result->{-rv} = ($? >> 8);
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul 30 11:27:22 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 59B3F7631A; Fri, 30 Jul 2004 11:27:22 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ snmpdx.pl
Message-Id: <20040730092722.59B3F7631A@mail.ossp.org>
Date: Fri, 30 Jul 2004 11:27:22 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   30-Jul-2004 11:27:22
  Branch: HEAD                             Handle: 2004073010272100

  Modified files:
    ossp-pkg/snmpdx         snmpdx.pl

  Log:
    allow very primitive quotation for values in config file using single
    or double quotes

  Summary:
    Revision    Changes     Path
    1.14        +4  -0      ossp-pkg/snmpdx/snmpdx.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.pl
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 snmpdx.pl
  --- ossp-pkg/snmpdx/snmpdx.pl	30 Jul 2004 09:25:11 -0000	1.13
  +++ ossp-pkg/snmpdx/snmpdx.pl	30 Jul 2004 09:27:21 -0000	1.14
  @@ -550,6 +550,10 @@
           $line =~ s|\r?\n$||s;
           next if ($line =~ m/^\s*(#.*)?$/s);
           my ($option, $value) = ($line =~ m|^\s*(\S+)\s+(.+?)\s*$|s);
  +        if ($value =~ m|^".*"$| or $value =~ m|^'.*'$|) {
  +            $value =~ s|^.||;
  +            $value =~ s|.$||;
  +        }
           die "invalid configuration line \"$line\""
               if (not defined($option) or not defined($value));
           my ($var) = map  { $options{$_} }
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul 30 11:30:09 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6EDB77631C; Fri, 30 Jul 2004 11:30:09 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ Makefile.in README configure.ac devtool.c...
Message-Id: <20040730093009.6EDB77631C@mail.ossp.org>
Date: Fri, 30 Jul 2004 11:30:09 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   30-Jul-2004 11:30:09
  Branch: HEAD                             Handle: 2004073010300400

  Modified files:
    ossp-pkg/snmpdx         Makefile.in README configure.ac devtool.conf
                            snmpdx.cfg.in snmpdx.pl

  Log:
    support a configurable OpenPKG instance

  Summary:
    Revision    Changes     Path
    1.13        +3  -0      ossp-pkg/snmpdx/Makefile.in
    1.15        +1  -0      ossp-pkg/snmpdx/README
    1.6         +35 -3      ossp-pkg/snmpdx/configure.ac
    1.7         +3  -2      ossp-pkg/snmpdx/devtool.conf
    1.5         +4  -3      ossp-pkg/snmpdx/snmpdx.cfg.in
    1.15        +4  -1      ossp-pkg/snmpdx/snmpdx.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 Makefile.in
  --- ossp-pkg/snmpdx/Makefile.in	19 Sep 2003 10:33:14 -0000	1.12
  +++ ossp-pkg/snmpdx/Makefile.in	30 Jul 2004 09:30:04 -0000	1.13
  @@ -46,6 +46,7 @@
   datadir       = @datadir@
   localstatedir = @localstatedir@
   snmpmibdir    = @snmpmibdir@
  +openpkg       = @openpkg@
   
   DESTDIR       =
   
  @@ -65,6 +66,7 @@
   		-e "s;\@datadir\@;$(datadir);" \
   		-e "s;\@localstatedir\@;$(localstatedir);" \
   		-e "s;\@snmpmibdir\@;$(snmpmibdir);" \
  +		-e "s;\@openpkg\@;$(openpkg);" \
   		<snmpdx.pl >snmpdx && \
   		chmod a+x snmpdx
   
  @@ -75,6 +77,7 @@
   		-e 's;\@datadir\@;$(datadir);g' \
   		-e 's;\@localstatedir\@;$(localstatedir);g' \
   		-e "s;\@snmpmibdir\@;$(snmpmibdir);" \
  +		-e "s;\@openpkg\@;$(openpkg);" \
   		<snmpdx.cfg.in >snmpdx.cfg
   
   snmpdx.8: snmpdx.pod
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/README
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 README
  --- ossp-pkg/snmpdx/README	28 Jul 2004 13:42:01 -0000	1.14
  +++ ossp-pkg/snmpdx/README	30 Jul 2004 09:30:04 -0000	1.15
  @@ -50,6 +50,7 @@
       $ ./devtool autogen #optional
       $ PREFIX=/openpkg-dev; ./configure \
           --prefix=$PREFIX \
  +        --with-openpkg=$PREFIX \
           --with-snmp=$PREFIX \
           --with-perl=$PREFIX/bin/perl
       $ make
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/configure.ac
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 configure.ac
  --- ossp-pkg/snmpdx/configure.ac	10 Sep 2003 14:17:05 -0000	1.5
  +++ ossp-pkg/snmpdx/configure.ac	30 Jul 2004 09:30:04 -0000	1.6
  @@ -32,9 +32,41 @@
   dnl # standard OSSP style header
   V=`./shtool version -ltxt -dlong VERSION`
   ./shtool echo -e "Configuring %BOSSP snmpdx%b, Version %B${V}%b"
  -echo "Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>"
  -echo "Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>"
  -echo "Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>"
  +echo "Copyright (c) 2003-2004 Ralf S. Engelschall <rse@engelschall.com>"
  +echo "Copyright (c) 2003-2004 The OSSP Project <http://www.ossp.org/>"
  +echo "Copyright (c) 2003-2004 Cable & Wireless <http://www.cw.com/>"
  +
  +dnl # check for OpenPKG
  +AC_MSG_CHECKING(for openpkg instance)
  +AC_ARG_WITH(openpkg,dnl
  +[  --with-openpkg=PATH     force the use of a particular OpenPKG instance],
  +with_openpkg="$withval",
  +dnl # find any OpenPKG 2.x
  +if test ".$with_openpkg" = .; then
  +    for i in `cat </etc/openpkg` /openpkg; do
  +        if test -x $i/bin/openpkg -a -x $i/libexec/openpkg/rpm; then
  +            with_openpkg="$i"
  +            break;
  +        fi
  +    done
  +fi
  +dnl # find any OpenPKG 1.x
  +if test ".$with_openpkg" = .; then
  +    for i in `cat </etc/openpkg` /cw; do
  +        if test -x $i/bin/rpm -a ! -x $i/libexec/openpkg/rpm; then
  +            with_openpkg="$i"
  +            break;
  +        fi
  +    done
  +fi
  +dnl # take first configured
  +if test ".$with_openpkg" = .; then
  +    with_openpkg="`sed </etc/openpkg -n -e 1p`"
  +fi
  +)dnl
  +openpkg="$with_openpkg"
  +AC_SUBST(openpkg)
  +AC_MSG_RESULT($openpkg)
   
   dnl # check for Perl
   AC_MSG_CHECKING(for perl program)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 devtool.conf
  --- ossp-pkg/snmpdx/devtool.conf	30 Jul 2004 09:20:10 -0000	1.6
  +++ ossp-pkg/snmpdx/devtool.conf	30 Jul 2004 09:30:04 -0000	1.7
  @@ -13,8 +13,9 @@
   %configure
       ./configure \
           --prefix=/tmp/snmpdx \
  -        --with-perl=/cw/bin/perl \
  -        --with-snmp=/cw \
  +        --with-openpkg=/openpkg \
  +        --with-snmp=/openpkg \
  +        --with-perl=/openpkg/bin/perl \
           "$@"
   
   %release
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.cfg.in
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 snmpdx.cfg.in
  --- ossp-pkg/snmpdx/snmpdx.cfg.in	10 Sep 2003 14:17:05 -0000	1.4
  +++ ossp-pkg/snmpdx/snmpdx.cfg.in	30 Jul 2004 09:30:04 -0000	1.5
  @@ -2,7 +2,8 @@
   ##  snmpdx.cfg -- configuration file for SNMP Daemon Extension
   ##
   
  -mibdir    @datadir@/snmpdx:@snmpmibdir@
  -probedir  @libexecdir@/snmpdx
  -logfile   @localstatedir@/snmpdx/snmpdx.log
  +mibdir    "@datadir@/snmpdx:@snmpmibdir@"
  +probedir  "@libexecdir@/snmpdx"
  +logfile   "@localstatedir@/snmpdx/snmpdx.log"
  +openpkg   "@openpkg@"
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.pl
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 snmpdx.pl
  --- ossp-pkg/snmpdx/snmpdx.pl	30 Jul 2004 09:27:21 -0000	1.14
  +++ ossp-pkg/snmpdx/snmpdx.pl	30 Jul 2004 09:30:04 -0000	1.15
  @@ -495,6 +495,7 @@
       'logfile'   => "@localstatedir@/snmpdx.log",
       'loglevel'  => 9,
       'strict'    => 0,
  +    'openpkg'   => "@openpkg@",
   };
   
   #   command line parsing
  @@ -514,6 +515,7 @@
       'l|logfile=s'   => \$opt->{'logfile'},
       'L|loglevel=i'  => \$opt->{'loglevel'},
       'S|strict'      => \$opt->{'strict'},
  +    'O|openpkg'     => \$opt->{'openpkg'},
   );
   Getopt::Long::Configure("bundling");
   my $result = GetOptions(%options) || die "option parsing failed";
  @@ -534,7 +536,8 @@
             " -m,--mibname=MIB    the name of the MIB to act under\n" .
             " -l,--logfile=PATH   path to daemon logfile\n" .
             " -L,--loglevel=NUM   logging level (0...9)\n" .
  -          " -S,--strict         strict processing of unknown values\n";
  +          " -S,--strict         strict processing of unknown values\n" .
  +          " -O,--openpkg        OpenPKG instance to use for swOp, swBind\n";
       exit(0);
   }
   if ($opt->{'version'}) {
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul 30 11:31:25 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A2A9B76317; Fri, 30 Jul 2004 11:31:24 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/snmpdx.d/ swOp.pm
Message-Id: <20040730093124.A2A9B76317@mail.ossp.org>
Date: Fri, 30 Jul 2004 11:31:24 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   30-Jul-2004 11:31:23
  Branch: HEAD                             Handle: 2004073010312300

  Modified files:
    ossp-pkg/snmpdx/snmpdx.d
                            swOp.pm

  Log:
    support a configurable OpenPKG instance and detect and handle OpenPKG
    1.x and 2.x

  Summary:
    Revision    Changes     Path
    1.9         +11 -1      ossp-pkg/snmpdx/snmpdx.d/swOp.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/swOp.pm
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 swOp.pm
  --- ossp-pkg/snmpdx/snmpdx.d/swOp.pm	28 Jul 2004 13:37:48 -0000	1.8
  +++ ossp-pkg/snmpdx/snmpdx.d/swOp.pm	30 Jul 2004 09:31:23 -0000	1.9
  @@ -35,10 +35,20 @@
   
   sub probe ($$) {
       my ($self, $obj) = @_;
  +    my $openpkg = $self->{-ctx}->{-opt}->{openpkg};
  +
  +    my $rpm;
  +    if    ( -x "$openpkg/bin/openpkg" and -x "$openpkg/libexec/openpkg/rpm" ) { #OpenPKG 2.x
  +        $rpm="$openpkg/bin/openpkg rpm"
  +    }
  +    elsif ( -x "$openpkg/bin/rpm" and not -x "$openpkg/libexec/openpkg/rpm" ) { #OpenPKG 1.x
  +        $rpm="$openpkg/bin/rpm"
  +    }
  +    else { return; } #no (known) OpenPKG
   
       #   query details via rpm(1)
       my $out = $self->{-ctx}->{-sys}->run(
  -        "openpkg rpm -qa --qf '[%{NAME} %{VERSION} %{RELEASE} %{BUILDTIME} %{INSTALLTIME}\\n]'", "10m");
  +        "$rpm -qa --qf '[%{NAME} %{VERSION} %{RELEASE} %{BUILDTIME} %{INSTALLTIME}\\n]'", "10m");
       return if ($out->{-stdout} eq '');
   
       #   parse details into internal structure
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul 30 11:35:44 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A6ADF76317; Fri, 30 Jul 2004 11:35:44 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/snmpdx.mib/ snmpdx.mib
Message-Id: <20040730093544.A6ADF76317@mail.ossp.org>
Date: Fri, 30 Jul 2004 11:35:44 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   30-Jul-2004 11:35:44
  Branch: HEAD                             Handle: 2004073010354400

  Modified files:
    ossp-pkg/snmpdx/snmpdx.mib
                            snmpdx.mib

  Log:
    replace TAB artefacts with spaces

  Summary:
    Revision    Changes     Path
    1.13        +83 -84     ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 snmpdx.mib
  --- ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib	10 Sep 2003 15:01:47 -0000	1.12
  +++ ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib	30 Jul 2004 09:35:44 -0000	1.13
  @@ -224,18 +224,18 @@
       ::= { system 7 }
   
   sysFsTABLE OBJECT-TYPE
  -    SYNTAX	    SEQUENCE OF SysFsENTRY
  +    SYNTAX            SEQUENCE OF SysFsENTRY
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION "sysFsTABLE"
       ::= { sysFs 1 }
   
   sysFsENTRY OBJECT-TYPE
  -    SYNTAX	    SysFsENTRY
  -    MAX-ACCESS	not-accessible
  -    STATUS	    current
  +    SYNTAX            SysFsENTRY
  +    MAX-ACCESS        not-accessible
  +    STATUS            current
       DESCRIPTION "sysFsENTRY"
  -    INDEX	    { sysFsIndex }
  +    INDEX            { sysFsIndex }
       ::= { sysFsTABLE 1 }
   
   SysFsENTRY ::= SEQUENCE {
  @@ -248,23 +248,23 @@
   }
   
   sysFsIndex OBJECT-TYPE
  -    SYNTAX	    Integer32
  -    MAX-ACCESS	read-only
  -    STATUS	    current
  +    SYNTAX            Integer32
  +    MAX-ACCESS        read-only
  +    STATUS            current
       DESCRIPTION "reference index/row number for each filesystem"
       ::= { sysFsENTRY 1 }
   
   sysFsDevice OBJECT-TYPE
       SYNTAX      DisplayString
  -    MAX-ACCESS	read-only
  -    STATUS	    current
  +    MAX-ACCESS        read-only
  +    STATUS            current
       DESCRIPTION "filesystem device"
       ::= { sysFsENTRY 2 }
   
   sysFsMountpoint OBJECT-TYPE
       SYNTAX      DisplayString
  -    MAX-ACCESS	read-only
  -    STATUS	    current
  +    MAX-ACCESS        read-only
  +    STATUS            current
       DESCRIPTION "filesystem mount point"
       ::= { sysFsENTRY 3 }
   
  @@ -325,18 +325,18 @@
       ::= { hwCpu 1 }
   
   hwCpuTABLE OBJECT-TYPE
  -    SYNTAX	    SEQUENCE OF HwCpuENTRY
  +    SYNTAX            SEQUENCE OF HwCpuENTRY
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION "hwCpuTABLE"
       ::= { hwCpu 2 }
   
   hwCpuENTRY OBJECT-TYPE
  -    SYNTAX	    HwCpuENTRY
  -    MAX-ACCESS	not-accessible
  -    STATUS	    current
  +    SYNTAX            HwCpuENTRY
  +    MAX-ACCESS        not-accessible
  +    STATUS            current
       DESCRIPTION "hwCpuENTRY"
  -    INDEX	    { hwCpuIndex }
  +    INDEX            { hwCpuIndex }
       ::= { hwCpuTABLE 1 }
   
   HwCpuENTRY ::= SEQUENCE {
  @@ -347,24 +347,24 @@
   }
   
   hwCpuIndex OBJECT-TYPE
  -    SYNTAX	    Integer32
  -    MAX-ACCESS	read-only
  -    STATUS	    current
  +    SYNTAX            Integer32
  +    MAX-ACCESS        read-only
  +    STATUS            current
       DESCRIPTION "reference index/row number for each CPU"
       ::= { hwCpuENTRY 1 }
   
   hwCpuId OBJECT-TYPE
       SYNTAX      DisplayString
  -    MAX-ACCESS	read-only
  -    STATUS	    current
  +    MAX-ACCESS        read-only
  +    STATUS            current
       DESCRIPTION "CPU identification"
       ::= { hwCpuENTRY 2 }
   
   
   hwCpuSpeed OBJECT-TYPE
  -    SYNTAX	    Integer32
  -    MAX-ACCESS	read-only
  -    STATUS	    current
  +    SYNTAX            Integer32
  +    MAX-ACCESS        read-only
  +    STATUS            current
       DESCRIPTION "CPU speed [MHz]"
       ::= { hwCpuENTRY 3 }
   
  @@ -404,18 +404,18 @@
       ::= { hardware 4 }
   
   hwDiskTABLE OBJECT-TYPE
  -    SYNTAX	    SEQUENCE OF HwDiskENTRY
  +    SYNTAX            SEQUENCE OF HwDiskENTRY
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION "hwDiskTABLE"
       ::= { hwDisk 1 }
   
   hwDiskENTRY OBJECT-TYPE
  -    SYNTAX	    HwDiskENTRY
  -    MAX-ACCESS	not-accessible
  -    STATUS	    current
  +    SYNTAX            HwDiskENTRY
  +    MAX-ACCESS        not-accessible
  +    STATUS            current
       DESCRIPTION "hwDiskENTRY"
  -    INDEX	    { hwDiskIndex }
  +    INDEX            { hwDiskIndex }
       ::= { hwDiskTABLE 1 }
   
   HwDiskENTRY ::= SEQUENCE {
  @@ -425,23 +425,23 @@
   }
   
   hwDiskIndex OBJECT-TYPE
  -    SYNTAX	    Integer32
  -    MAX-ACCESS	read-only
  -    STATUS	    current
  +    SYNTAX            Integer32
  +    MAX-ACCESS        read-only
  +    STATUS            current
       DESCRIPTION "reference index/row number for each Disk"
       ::= { hwDiskENTRY 1 }
   
   hwDiskId OBJECT-TYPE
       SYNTAX      DisplayString
  -    MAX-ACCESS	read-only
  -    STATUS	    current
  +    MAX-ACCESS        read-only
  +    STATUS            current
       DESCRIPTION "Disk identification"
       ::= { hwDiskENTRY 2 }
   
   hwDiskStatus OBJECT-TYPE
       SYNTAX      Integer32
  -    MAX-ACCESS	read-only
  -    STATUS	    current
  +    MAX-ACCESS        read-only
  +    STATUS            current
       DESCRIPTION "Disk status"
       ::= { hwDiskENTRY 3 }
   
  @@ -453,18 +453,18 @@
       ::= { hardware 5 }
   
   hwFanTABLE OBJECT-TYPE
  -    SYNTAX	    SEQUENCE OF HwFanENTRY
  +    SYNTAX            SEQUENCE OF HwFanENTRY
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION "hwFanTABLE"
       ::= { hwFan 1 }
   
   hwFanENTRY OBJECT-TYPE
  -    SYNTAX	    HwFanENTRY
  -    MAX-ACCESS	not-accessible
  -    STATUS	    current
  +    SYNTAX            HwFanENTRY
  +    MAX-ACCESS        not-accessible
  +    STATUS            current
       DESCRIPTION "hwFanENTRY"
  -    INDEX	    { hwFanIndex }
  +    INDEX            { hwFanIndex }
       ::= { hwFanTABLE 1 }
   
   HwFanENTRY ::= SEQUENCE {
  @@ -475,30 +475,30 @@
   }
   
   hwFanIndex OBJECT-TYPE
  -    SYNTAX	    Integer32
  -    MAX-ACCESS	read-only
  -    STATUS	    current
  +    SYNTAX            Integer32
  +    MAX-ACCESS        read-only
  +    STATUS            current
       DESCRIPTION "reference index/row number for each Fan"
       ::= { hwFanENTRY 1 }
   
   hwFanId OBJECT-TYPE
       SYNTAX      DisplayString
  -    MAX-ACCESS	read-only
  -    STATUS	    current
  +    MAX-ACCESS        read-only
  +    STATUS            current
       DESCRIPTION "Fan identification"
       ::= { hwFanENTRY 2 }
   
   hwFanSpeed OBJECT-TYPE
       SYNTAX      Integer32
  -    MAX-ACCESS	read-only
  -    STATUS	    current
  +    MAX-ACCESS        read-only
  +    STATUS            current
       DESCRIPTION "Fan speed"
       ::= { hwFanENTRY 3 }
   
   hwFanStatus OBJECT-TYPE
       SYNTAX      Integer32
  -    MAX-ACCESS	read-only
  -    STATUS	    current
  +    MAX-ACCESS        read-only
  +    STATUS            current
       DESCRIPTION "Fan status"
       ::= { hwFanENTRY 4 }
   
  @@ -510,18 +510,18 @@
       ::= { hardware 6 }
   
   hwPsTABLE OBJECT-TYPE
  -    SYNTAX	    SEQUENCE OF HwPsENTRY
  +    SYNTAX            SEQUENCE OF HwPsENTRY
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION "hwPsTABLE"
       ::= { hwPs 1 }
   
   hwPsENTRY OBJECT-TYPE
  -    SYNTAX	    HwPsENTRY
  -    MAX-ACCESS	not-accessible
  -    STATUS	    current
  +    SYNTAX            HwPsENTRY
  +    MAX-ACCESS        not-accessible
  +    STATUS            current
       DESCRIPTION "hwPsENTRY"
  -    INDEX	    { hwPsIndex }
  +    INDEX            { hwPsIndex }
       ::= { hwPsTABLE 1 }
   
   HwPsENTRY ::= SEQUENCE {
  @@ -531,23 +531,23 @@
   }
   
   hwPsIndex OBJECT-TYPE
  -    SYNTAX	    Integer32
  -    MAX-ACCESS	read-only
  -    STATUS	    current
  +    SYNTAX            Integer32
  +    MAX-ACCESS        read-only
  +    STATUS            current
       DESCRIPTION "reference index/row number for each Powersupply"
       ::= { hwPsENTRY 1 }
   
   hwPsId OBJECT-TYPE
       SYNTAX      DisplayString
  -    MAX-ACCESS	read-only
  -    STATUS	    current
  +    MAX-ACCESS        read-only
  +    STATUS            current
       DESCRIPTION "Powersupply identification"
       ::= { hwPsENTRY 2 }
   
   hwPsStatus OBJECT-TYPE
       SYNTAX      Integer32
  -    MAX-ACCESS	read-only
  -    STATUS	    current
  +    MAX-ACCESS        read-only
  +    STATUS            current
       DESCRIPTION "Powersupply status"
       ::= { hwPsENTRY 3 }
   
  @@ -608,18 +608,18 @@
       ::= { swOp 1 }
   
   swOpPkgTABLE OBJECT-TYPE
  -    SYNTAX	    SEQUENCE OF SwOpPkgENTRY
  +    SYNTAX            SEQUENCE OF SwOpPkgENTRY
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION "OpenPKG package table"
       ::= { swOp 2 }
   
   swOpPkgENTRY OBJECT-TYPE
  -    SYNTAX	    SwOpPkgENTRY
  -    MAX-ACCESS	not-accessible
  -    STATUS	    current
  +    SYNTAX            SwOpPkgENTRY
  +    MAX-ACCESS        not-accessible
  +    STATUS            current
       DESCRIPTION "An entry containing a load average and its values."
  -    INDEX	    { swOpPkgIndex }
  +    INDEX            { swOpPkgIndex }
       ::= { swOpPkgTABLE 1 }
   
   SwOpPkgENTRY ::= SEQUENCE {
  @@ -632,9 +632,9 @@
   }
   
   swOpPkgIndex OBJECT-TYPE
  -    SYNTAX	    Integer32
  -    MAX-ACCESS	read-only
  -    STATUS	    current
  +    SYNTAX            Integer32
  +    MAX-ACCESS        read-only
  +    STATUS            current
       DESCRIPTION "reference index/row number for each package"
       ::= { swOpPkgENTRY 1 }
   
  @@ -646,32 +646,31 @@
       ::= { swOpPkgENTRY 2 }
   
   swOpPkgVersion OBJECT-TYPE
  -    SYNTAX	    DisplayString
  -    MAX-ACCESS	read-only
  -    STATUS	    current
  +    SYNTAX            DisplayString
  +    MAX-ACCESS        read-only
  +    STATUS            current
       DESCRIPTION "vendor version of package"
       ::= { swOpPkgENTRY 3 }
   
   swOpPkgRelease OBJECT-TYPE
  -    SYNTAX	    DisplayString
  -    MAX-ACCESS	read-only
  -    STATUS	    current
  +    SYNTAX            DisplayString
  +    MAX-ACCESS        read-only
  +    STATUS            current
       DESCRIPTION "OpenPKG release of package"
       ::= { swOpPkgENTRY 4 }
   
   swOpPkgBuilt OBJECT-TYPE
  -    SYNTAX	    DateAndTime
  -    MAX-ACCESS	read-only
  -    STATUS	    current
  +    SYNTAX            DateAndTime
  +    MAX-ACCESS        read-only
  +    STATUS            current
       DESCRIPTION "time package was built"
       ::= { swOpPkgENTRY 5 }
   
   swOpPkgInstalled OBJECT-TYPE
  -    SYNTAX	    DateAndTime
  -    MAX-ACCESS	read-only
  -    STATUS	    current
  +    SYNTAX            DateAndTime
  +    MAX-ACCESS        read-only
  +    STATUS            current
       DESCRIPTION "time package was installed"
       ::= { swOpPkgENTRY 6 }
   
   END
  -
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul 30 11:37:05 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A668A76317; Fri, 30 Jul 2004 11:37:05 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/snmpdx.d/ swBind.pm ossp-pkg/snmpdx/snmpdx...
Message-Id: <20040730093705.A668A76317@mail.ossp.org>
Date: Fri, 30 Jul 2004 11:37:05 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   30-Jul-2004 11:37:05
  Branch: HEAD                             Handle: 2004073010370401

  Added files:
    ossp-pkg/snmpdx/snmpdx.d
                            swBind.pm
  Modified files:
    ossp-pkg/snmpdx/snmpdx.mib
                            snmpdx.mib

  Log:
    add swBind probe and MIB for named(8)

  Summary:
    Revision    Changes     Path
    1.1         +93 -0      ossp-pkg/snmpdx/snmpdx.d/swBind.pm
    1.14        +104 -0     ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/swBind.pm
  ============================================================================
  $ cvs diff -u -r0 -r1.1 swBind.pm
  --- /dev/null	2004-07-30 11:37:04 +0200
  +++ swBind.pm	2004-07-30 11:37:04 +0200
  @@ -0,0 +1,93 @@
  +##
  +##  OSSP snmpdx - SNMP Daemon Extension
  +##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
  +##
  +##  This file is part of OSSP snmpdx, a SNMP daemon extension which
  +##  can be found at http://www.ossp.org/pkg/tool/snmpdx/.
  +##
  +##  This program is free software; you can redistribute it and/or
  +##  modify it under the terms of the GNU General Public  License
  +##  as published by the Free Software Foundation; either version
  +##  2.0 of the License, or (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this file; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  swBind.pm: probe for Software, Bind (aka named)
  +##
  +
  +package My::Probe::swBind;
  +our @ISA = qw(My::Probe);
  +
  +sub oids ($) {
  +    my ($self) = @_;
  +    return $self->{-ctx}->{-mib}->oids("*.snmpdx.host.software.swBind.*");
  +}
  +
  +sub probe ($$) {
  +    my ($self, $obj) = @_;
  +    my $openpkg = $self->{-ctx}->{-opt}->{openpkg};
  +
  +    #   local workspace
  +    my $out; my $raw;
  +    my $rndc = "$openpkg/sbin/rndc";
  +    my $file = "$openpkg/var/bind/named.stats"; #"statistics-file" setting in "option" section in named.conf
  +
  +    ###   query status via rndc(8)
  +    $out = $self->{-ctx}->{-sys}->run("$rndc status 2>/dev/null", "1m");
  +    $raw = $out->{-stdout};
  +    my $swBindStatusNumberOfZones = $1 if ($raw =~ m/number of zones: (\d+)/s        );
  +    my $swBindStatusDebugLevel    = $1 if ($raw =~ m/debug level: (\d+)/s            );
  +    my $swBindStatusXfersRunning  = $1 if ($raw =~ m/xfers running: (\d+)/s          );
  +    my $swBindStatusXfersDeferred = $1 if ($raw =~ m/xfers deferred: (\d+)/s         );
  +    my $swBindStatusSoaQueries    = $1 if ($raw =~ m/soa queries in progress: (\d+)/s);
  +    my $swBindStatusQueryLogging  = $1 if ($raw =~ m/query logging is (^\n)+/s       );
  +
  +    ##   query stats via rndc(8)
  +    $self->{-ctx}->{-sys}->run("$rndc stats 2>/dev/null", "1m");
  +    $raw = "";
  +    open(STATS, "<$file");
  +    if (defined STATS) {
  +        while (<STATS>) {
  +            if (m/^\+\+\+/) {
  +                $raw = ""
  +            } else {
  +                $raw .= $_
  +            }
  +        }
  +        close(STATS);
  +    };
  +    my $swBindStatsSuccess   = $1 if ($raw =~ m/success (\d+)/s  );
  +    my $swBindStatsReferral  = $1 if ($raw =~ m/referral (\d+)/s );
  +    my $swBindStatsNxrrset   = $1 if ($raw =~ m/nxrrset (\d+)/s  );
  +    my $swBindStatsNxdomain  = $1 if ($raw =~ m/nxdomain (\d+)/s );
  +    my $swBindStatsRecursion = $1 if ($raw =~ m/recursion (\d+)/s);
  +    my $swBindStatsFailure   = $1 if ($raw =~ m/failure (\d+)/s  );
  +
  +    #   provide results
  +    if    ($obj->{-name} =~ m|\.swBindStatusNumberOfZones$|) { $obj->{-value} = $swBindStatusNumberOfZones ; }
  +    elsif ($obj->{-name} =~ m|\.swBindStatusDebugLevel$|   ) { $obj->{-value} = $swBindStatusDebugLevel    ; }
  +    elsif ($obj->{-name} =~ m|\.swBindStatusXfersRunning$| ) { $obj->{-value} = $swBindStatusXfersRunning  ; }
  +    elsif ($obj->{-name} =~ m|\.swBindStatusXfersDeferred$|) { $obj->{-value} = $swBindStatusXfersDeferred ; }
  +    elsif ($obj->{-name} =~ m|\.swBindStatusSoaQueries$|   ) { $obj->{-value} = $swBindStatusSoaQueries    ; }
  +    elsif ($obj->{-name} =~ m|\.swBindStatusQueryLogging$| ) { $obj->{-value} = $swBindStatusQueryLogging  ; }
  +    elsif ($obj->{-name} =~ m|\.swBindStatsSuccess$|       ) { $obj->{-value} = $swBindStatsSuccess        ; }
  +    elsif ($obj->{-name} =~ m|\.swBindStatsReferral$|      ) { $obj->{-value} = $swBindStatsReferral       ; }
  +    elsif ($obj->{-name} =~ m|\.swBindStatsNxrrset$|       ) { $obj->{-value} = $swBindStatsNxrrset        ; }
  +    elsif ($obj->{-name} =~ m|\.swBindStatsNxdomain$|      ) { $obj->{-value} = $swBindStatsNxdomain       ; }
  +    elsif ($obj->{-name} =~ m|\.swBindStatsRecursion$|     ) { $obj->{-value} = $swBindStatsRecursion      ; }
  +    elsif ($obj->{-name} =~ m|\.swBindStatsFailure$|       ) { $obj->{-value} = $swBindStatsFailure        ; }
  +    return;
  +}
  +
  +1;
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 snmpdx.mib
  --- ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib	30 Jul 2004 09:35:44 -0000	1.13
  +++ ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib	30 Jul 2004 09:37:05 -0000	1.14
  @@ -673,4 +673,108 @@
       DESCRIPTION "time package was installed"
       ::= { swOpPkgENTRY 6 }
   
  +--
  +--  BIND
  +--
  +
  +swBind OBJECT IDENTIFIER
  +    ::= { software 3 }
  +
  +--
  +--  BIND status ("rndc status")
  +--
  +
  +swBindStatus OBJECT IDENTIFIER
  +    ::= { swBind 1 }
  +
  +swBindStatusNumberOfZones OBJECT-TYPE
  +    SYNTAX      Integer32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "number of zones"
  +    ::= { swBindStatus 1 }
  +
  +swBindStatusDebugLevel OBJECT-TYPE
  +    SYNTAX      Integer32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "debug level"
  +    ::= { swBindStatus 2 }
  +
  +swBindStatusXfersRunning OBJECT-TYPE
  +    SYNTAX      Integer32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "xfers running"
  +    ::= { swBindStatus 3 }
  +
  +swBindStatusXfersDeferred OBJECT-TYPE
  +    SYNTAX      Integer32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "xfers deferred"
  +    ::= { swBindStatus 4 }
  +
  +swBindStatusSoaQueries OBJECT-TYPE
  +    SYNTAX      Integer32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "SOA queries in progress"
  +    ::= { swBindStatus 5 }
  +
  +swBindStatusSoaQueries OBJECT-TYPE
  +    SYNTAX      DisplayString
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "SOA queries in progress"
  +    ::= { swBindStatus 6 }
  +
  +--
  +--  BIND statistics ("rndc stats")
  +--
  +swBindStats OBJECT IDENTIFIER
  +    ::= { swBind 2 }
  +
  +swBindStatsSuccess OBJECT-TYPE
  +    SYNTAX      Integer32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "Successful Queries"
  +    ::= { swBindStats 1 }
  +
  +swBindStatsReferral OBJECT-TYPE
  +    SYNTAX      Integer32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "Referrals"
  +    ::= { swBindStats 2 }
  +
  +swBindStatsNxrrset OBJECT-TYPE
  +    SYNTAX      Integer32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "Nx RR Set"
  +    ::= { swBindStats 3 }
  +
  +swBindStatsNxdomain OBJECT-TYPE
  +    SYNTAX      Integer32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "Nx Domain"
  +    ::= { swBindStats 4 }
  +
  +swBindStatsRecursion OBJECT-TYPE
  +    SYNTAX      Integer32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "Recursion"
  +    ::= { swBindStats 5 }
  +
  +swBindStatsFailure OBJECT-TYPE
  +    SYNTAX      Integer32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "Failed Queries"
  +    ::= { swBindStats 6 }
  +
   END
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul 30 11:43:31 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CCAD076317; Fri, 30 Jul 2004 11:43:30 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ README
Message-Id: <20040730094330.CCAD076317@mail.ossp.org>
Date: Fri, 30 Jul 2004 11:43:30 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   30-Jul-2004 11:43:30
  Branch: HEAD                             Handle: 2004073010433000

  Modified files:
    ossp-pkg/snmpdx         README

  Log:
    add/update hints to get started

  Summary:
    Revision    Changes     Path
    1.16        +5  -2      ossp-pkg/snmpdx/README
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/README
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 README
  --- ossp-pkg/snmpdx/README	30 Jul 2004 09:30:04 -0000	1.15
  +++ ossp-pkg/snmpdx/README	30 Jul 2004 09:43:30 -0000	1.16
  @@ -55,10 +55,13 @@
           --with-perl=$PREFIX/bin/perl
       $ make
   
  -    Standalone, try
  +    Standalone, emulate snmp/snmpdx communication
       $ ( echo "getnext"; echo ".1" ) | ./snmpdx --probedir=./snmpdx.d --mibdir=.
  +
  +    Standalone, command line
  +    $ ./snmpdx -g .1.3.6.1.4.1.4007.42.1.1.2.1 #enterprises.cw.snmpdx.host.hardware.hwCpu.hwCpuNum
       
       If integrated into snmp, try
       # make install
  -    $ snmpwalk -Os -c public -v 2c 127.0.0.1 .1.3.6.1.4.1.4007.42.1.1.2.2.1.1
  +    $ snmpwalk -Os -c public -v 2c 127.0.0.1 .1.3.6.1.4.1.4007.42
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul 30 11:43:49 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CE8BB7643B; Fri, 30 Jul 2004 11:43:49 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ README VERSION
Message-Id: <20040730094349.CE8BB7643B@mail.ossp.org>
Date: Fri, 30 Jul 2004 11:43:49 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   30-Jul-2004 11:43:49
  Branch: HEAD                             Handle: 2004073010434900

  Modified files:
    ossp-pkg/snmpdx         README VERSION

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.17        +1  -1      ossp-pkg/snmpdx/README
    1.12        +1  -1      ossp-pkg/snmpdx/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/README
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 README
  --- ossp-pkg/snmpdx/README	30 Jul 2004 09:43:30 -0000	1.16
  +++ ossp-pkg/snmpdx/README	30 Jul 2004 09:43:49 -0000	1.17
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/_| |_|_| |_| |_| .__/ \__,_/_/\_\
                                                          |_|
     OSSP snmpdx - SNMP Daemon Extension
  -  Version 0.2.9 (28-Jul-2004)
  +  Version 0.2.10 (30-Jul-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/VERSION
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 VERSION
  --- ossp-pkg/snmpdx/VERSION	28 Jul 2004 13:42:01 -0000	1.11
  +++ ossp-pkg/snmpdx/VERSION	30 Jul 2004 09:43:49 -0000	1.12
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP snmpdx (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP snmpdx, Version 0.2.9 (28-Jul-2004)
  +  This is OSSP snmpdx, Version 0.2.10 (30-Jul-2004)
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul 30 12:13:58 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D30917631A; Fri, 30 Jul 2004 12:13:57 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/snmpdx.mib/ snmpdx.mib
Message-Id: <20040730101357.D30917631A@mail.ossp.org>
Date: Fri, 30 Jul 2004 12:13:57 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   30-Jul-2004 12:13:57
  Branch: HEAD                             Handle: 2004073011135700

  Modified files:
    ossp-pkg/snmpdx/snmpdx.mib
                            snmpdx.mib

  Log:
    fix copy'n'paste bug in MIB swBind section

  Summary:
    Revision    Changes     Path
    1.15        +2  -2      ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 snmpdx.mib
  --- ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib	30 Jul 2004 09:37:05 -0000	1.14
  +++ ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib	30 Jul 2004 10:13:57 -0000	1.15
  @@ -722,11 +722,11 @@
       DESCRIPTION "SOA queries in progress"
       ::= { swBindStatus 5 }
   
  -swBindStatusSoaQueries OBJECT-TYPE
  +swBindStatusQueryLogging OBJECT-TYPE
       SYNTAX      DisplayString
       MAX-ACCESS  read-only
       STATUS      current
  -    DESCRIPTION "SOA queries in progress"
  +    DESCRIPTION "SOA query logging state"
       ::= { swBindStatus 6 }
   
   --
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul 30 12:21:06 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B2A0C76354; Fri, 30 Jul 2004 12:21:06 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ ChangeLog
Message-Id: <20040730102106.B2A0C76354@mail.ossp.org>
Date: Fri, 30 Jul 2004 12:21:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   30-Jul-2004 12:21:06
  Branch: HEAD                             Handle: 2004073011210600

  Modified files:
    ossp-pkg/snmpdx         ChangeLog

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.16        +11 -0      ossp-pkg/snmpdx/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 ChangeLog
  --- ossp-pkg/snmpdx/ChangeLog	28 Jul 2004 13:42:01 -0000	1.15
  +++ ossp-pkg/snmpdx/ChangeLog	30 Jul 2004 10:21:06 -0000	1.16
  @@ -1,3 +1,4 @@
  +
      _        ___  ____ ____  ____                                  _
     |_|_ _   / _ \/ ___/ ___||  _ \   ___ _ __  _ __ ___  _ __   __| |_  __
     _|_||_| | | | \___ \___ \| |_) | / __| '_ \| '_ ` _ \| '_ \ / _` \ \/ /
  @@ -9,6 +10,16 @@
     ChangeLog
     =========
   
  +  Changes between 0.2.9 and 0.2.10 (28-Jul-2003 to 30-Jul-2004):
  +   *) add swBind probe and MIB for named(8)
  +   *) support a configurable OpenPKG instance
  +   *) swProbe detects and handles OpenPKG 1.x and 2.x
  +   *) allow very primitive quotation for values in config file
  +   *) get rid of perl warnings when $cmd contains a %
  +   *) use latest autogeneration tools (shtool 2.0.0, autoconf 2.59)
  +   *) cosmetics, quickstart update, remove superfluous "my" from sysVM probe
  +      [Thomas Lotterer]
  +
     Changes between 0.2.8 and 0.2.9 (21-Oct-2003 to 28-Jul-2004):
   
      *) add concise QUICKSTART info into README
  @@ .

From ossp-cvs-owner@ossp.org  Wed Aug 11 18:50:40 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A2FB676318; Wed, 11 Aug 2004 18:50:40 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ ChangeLog shiela.pl
Message-Id: <20040811165040.A2FB676318@mail.ossp.org>
Date: Wed, 11 Aug 2004 18:50:40 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Aug-2004 18:50:40
  Branch: HEAD                             Handle: 2004081117503900

  Modified files:
    ossp-pkg/shiela         ChangeLog shiela.pl

  Log:
    Workaround a buggy feature in Perl versions 5.8.4 and higher
    which totally optimized away "my $var = undef;" constructs
    instead of optimizing them to just "my $var;".

  Summary:
    Revision    Changes     Path
    1.52        +7  -0      ossp-pkg/shiela/ChangeLog
    1.66        +2  -2      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.51 -r1.52 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	2 Jul 2004 19:19:33 -0000	1.51
  +++ ossp-pkg/shiela/ChangeLog	11 Aug 2004 16:50:39 -0000	1.52
  @@ -9,6 +9,13 @@
   
     ChangeLog
   
  +  Changes between 1.1.4 and 1.1.5 (02-Jul-2004 to 11-Aug-2004):
  +
  +   *) Workaround a buggy feature in Perl versions 5.8.4 and higher
  +      which totally optimized away "my $var = undef;" constructs
  +      instead of optimizing them to just "my $var;".
  +      [Ralf S. Engelschall, Thomas Lotterer]
  +
     Changes between 1.1.3 and 1.1.4 (27-Jun-2004 to 02-Jul-2004):
   
      *) Fix determination of the "handle" field under new CVS 1.12.x
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================================
  $ cvs diff -u -r1.65 -r1.66 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	2 Jul 2004 19:24:52 -0000	1.65
  +++ ossp-pkg/shiela/shiela.pl	11 Aug 2004 16:50:39 -0000	1.66
  @@ -1959,8 +1959,8 @@
           'log' => $cvslog
       };
       $cvsdiff = "\n$cvsdiff\n"; # for easier parsing
  -    my $handle_min = undef;
  -    my $handle_max = undef;
  +    my $handle_min; $handle_min = undef;
  +    my $handle_max; $handle_max = undef;
       foreach my $cvsinfo (@cvsinfo) {
           $cvsinfo =~ m|^([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+)$|
                || die "invalid loginfo argument `$cvsinfo' while accumulating information";
  @@ .

From ossp-cvs-owner@ossp.org  Wed Aug 11 21:14:46 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F17A676319; Wed, 11 Aug 2004 21:14:45 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog README VERSION shtool.spec
Message-Id: <20040811191445.F17A676319@mail.ossp.org>
Date: Wed, 11 Aug 2004 21:14:45 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Aug-2004 21:14:45
  Branch: HEAD                             Handle: 2004081120144400

  Modified files:
    ossp-pkg/shtool         ChangeLog README VERSION shtool.spec

  Log:
    prepare for release

  Summary:
    Revision    Changes     Path
    1.207       +1  -1      ossp-pkg/shtool/ChangeLog
    1.106       +1  -1      ossp-pkg/shtool/README
    1.81        +1  -1      ossp-pkg/shtool/VERSION
    1.24        +1  -1      ossp-pkg/shtool/shtool.spec
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.206 -r1.207 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	19 Jul 2004 07:41:34 -0000	1.206
  +++ ossp-pkg/shtool/ChangeLog	11 Aug 2004 19:14:44 -0000	1.207
  @@ -9,7 +9,7 @@
   
    ChangeLog
   
  - Changes between 2.0.0 and 2.0.1 (02-Jul-2004 to xx-XXX-2004):
  + Changes between 2.0.0 and 2.0.1 (02-Jul-2004 to 11-Aug-2004):
   
      *) Added M4 language output to "shtool version".
         [James Rowe <Jay@jnrowe.ukfsn.org>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/README
  ============================================================================
  $ cvs diff -u -r1.105 -r1.106 README
  --- ossp-pkg/shtool/README	2 Jul 2004 13:07:37 -0000	1.105
  +++ ossp-pkg/shtool/README	11 Aug 2004 19:14:44 -0000	1.106
  @@ -10,7 +10,7 @@
     http://www.gnu.org/software/shtool/
     ftp://ftp.gnu.org/gnu/shtool/
   
  -  Version 2.0.0 (02-Jul-2004)
  +  Version 2.0.1 (11-Aug-2004)
   
     The GNU shtool program is a compilation of small but very stable and
     portable shell scripts into a single shell tool. All ingredients
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/VERSION
  ============================================================================
  $ cvs diff -u -r1.80 -r1.81 VERSION
  --- ossp-pkg/shtool/VERSION	2 Jul 2004 13:07:37 -0000	1.80
  +++ ossp-pkg/shtool/VERSION	11 Aug 2004 19:14:44 -0000	1.81
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for GNU shtool (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is GNU shtool, Version 2.0.0 (02-Jul-2004)
  +  This is GNU shtool, Version 2.0.1 (11-Aug-2004)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtool.spec
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 shtool.spec
  --- ossp-pkg/shtool/shtool.spec	2 Jul 2004 13:07:37 -0000	1.23
  +++ ossp-pkg/shtool/shtool.spec	11 Aug 2004 19:14:44 -0000	1.24
  @@ -30,7 +30,7 @@
   %define prefix /usr/local
   %endif
   
  -%define ver 2.0.0
  +%define ver 2.0.1
   %define rel 0
   
   Name:       shtool
  @@ .

From ossp-cvs-owner@ossp.org  Wed Aug 11 21:20:39 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 55FC376318; Wed, 11 Aug 2004 21:20:39 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/tool/ index.wml ossp-w...
Message-Id: <20040811192039.55FC376318@mail.ossp.org>
Date: Wed, 11 Aug 2004 21:20:39 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   11-Aug-2004 21:20:39
  Branch: HEAD                             Handle: 2004081120203701

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/shtool
                            index.wml

  Log:
    release GNU shtool 2.0.1

  Summary:
    Revision    Changes     Path
    1.93        +2  -1      ossp-web/new/news.txt
    1.39        +1  -1      ossp-web/pkg/tool/index.wml
    1.11        +2  -2      ossp-web/pkg/tool/shtool/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.92 -r1.93 news.txt
  --- ossp-web/new/news.txt	16 Jul 2004 21:18:31 -0000	1.92
  +++ ossp-web/new/news.txt	11 Aug 2004 19:20:37 -0000	1.93
  @@ -1,7 +1,8 @@
  +11-Aug-2004: Released T<GNU shtool> 2.0.1
   16-Jul-2004: Released L<OSSP uuid> 1.0.1
   13-Jul-2004: Released L<GNU pth> 2.0.1
   02-Jul-2004: Released T<OSSP shiela> 1.1.4
  -02-Jul-2004: Released T<OSSP shtool> 2.0.0
  +02-Jul-2004: Released T<GNU shtool> 2.0.0
   02-Jul-2004: Released T<OSSP lmtp2nntp> 1.3.0
   27-Jun-2004: Released T<OSSP lmtp2nntp> 1.3b2
   27-Jun-2004: Released T<OSSP shiela> 1.1.3
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.38 -r1.39 index.wml
  --- ossp-web/pkg/tool/index.wml	2 Jul 2004 19:58:55 -0000	1.38
  +++ ossp-web/pkg/tool/index.wml	11 Aug 2004 19:20:38 -0000	1.39
  @@ -14,7 +14,7 @@
   <pkg_list>
     <pkg_item name="shtool" longname="GNU shtool" type="tool"
               desc="Portable Shell Tool"
  -		    done=100 stable="2.0.0" unstable=none>
  +		    done=100 stable="2.0.1" unstable=none>
     <pkg_item name="lmtp2nntp" longname="OSSP lmtp2nntp" type="tool"
               desc="Real-Time Mail to News Gateway"
               done=100 stable="1.3.0" unstable=none>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/shtool/index.wml
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 index.wml
  --- ossp-web/pkg/tool/shtool/index.wml	2 Jul 2004 13:27:44 -0000	1.10
  +++ ossp-web/pkg/tool/shtool/index.wml	11 Aug 2004 19:20:38 -0000	1.11
  @@ -40,7 +40,7 @@
   
   <pkg_status
       name="shtool" assign="rse"
  -    stable="2.0.0"   stable_date="02-Jul-2004"
  +    stable="2.0.1"   stable_date="11-Aug-2004"
       unstable="none"  unstable_date="none"
   	done=100>
   
  @@ -51,7 +51,7 @@
       url=$(FTP_ROOT_URL)/pkg/tool/shtool/
       directory=$(FTP_ROOT_DIR)/pkg/tool/shtool/
       files="shtool-*.tar.gz" 
  -	stable="shtool-2.0.0.tar.gz" unstable="none">
  +	stable="shtool-2.0.1.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Aug 11 21:32:36 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8621676365; Wed, 11 Aug 2004 21:32:36 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog PORTING devtool.conf
Message-Id: <20040811193236.8621676365@mail.ossp.org>
Date: Wed, 11 Aug 2004 21:32:36 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Aug-2004 21:32:36
  Branch: HEAD                             Handle: 2004081120323500

  Modified files:
    ossp-pkg/pth            ChangeLog PORTING devtool.conf

  Log:
    upgraded to GNU libtool 1.5.8 and GNU shtool 2.0.1

  Summary:
    Revision    Changes     Path
    1.614       +5  -5      ossp-pkg/pth/ChangeLog
    1.189       +1  -0      ossp-pkg/pth/PORTING
    1.17        +2  -2      ossp-pkg/pth/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.613 -r1.614 ChangeLog
  --- ossp-pkg/pth/ChangeLog	13 Jul 2004 11:03:40 -0000	1.613
  +++ ossp-pkg/pth/ChangeLog	11 Aug 2004 19:32:35 -0000	1.614
  @@ -19,7 +19,11 @@
        / __/ | |_| |
     __|_____(_)___/_________________________________________________________
                     
  -  Changes between 2.0.0 and 2.0.1 (17-Feb-2003 to 13-Jul-2004)
  +  Changes between 2.0.0 and 2.0.1 (17-Feb-2003 to 11-Aug-2004)
  +
  +   *) Upgraded build environment to GNU autoconf 2.59, GNU libtool 1.5.8
  +      and GNU shtool 2.0.1.
  +      [Ralf S. Engelschall]
   
      *) Fix handling/casting of "int (*)(void *)" callback functions.
         [Ralf S. Engelschall]
  @@ -34,10 +38,6 @@
         are not acceptable in "strict aliasing" for GCC.
         [Ralf S. Engelschall]
   
  -   *) Upgraded build environment to GNU autoconf 2.59, GNU libtool 1.5.6
  -      and GNU shtool 2.0.0.
  -      [Ralf S. Engelschall]
  -
      *) Fixed implementation so that --enable-pthread now correctly
         implies --enable-syscall-soft.
         [Steve Alstrin <Steve.Alstrin@NetIQ.com>, Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/PORTING
  ============================================================================
  $ cvs diff -u -r1.188 -r1.189 PORTING
  --- ossp-pkg/pth/PORTING	8 Nov 2002 11:28:09 -0000	1.188
  +++ ossp-pkg/pth/PORTING	11 Aug 2004 19:32:35 -0000	1.189
  @@ -15,6 +15,7 @@
     (and should automatically adjust to other platforms, of course):
   
     __PLATFORM_ID_________________________ __MACHINE_CONTEXT__ _STACK_ _VERSION_
  +  i386-unknown-freebsd4.10              | sjlj/ssjlj/sas    | down  | 2.0.1
     i386-unknown-freebsd4.7               | sjlj/ssjlj/sas    | down  | 2.0b0
     i386-pc-solaris2.8                    | mcsc/sc/mc        | down  | 1.4.1
     i686-gnu-linux-gnu2.2glibc2.2         | sjlj/ssjlj/sas    | down  | 1.4.1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 devtool.conf
  --- ossp-pkg/pth/devtool.conf	13 Jul 2004 10:47:22 -0000	1.16
  +++ ossp-pkg/pth/devtool.conf	11 Aug 2004 19:32:35 -0000	1.17
  @@ -3,8 +3,8 @@
   ##
   
   %autogen
  -    @autogen shtool   2.0.0 "1.6.*" echo version scpp mkdir install fixperm tarball
  -    @autogen libtool  1.5.6 "1.5*"
  +    @autogen shtool   2.0.1 "2.0.*" echo version scpp mkdir install fixperm tarball
  +    @autogen libtool  1.5.8 "1.5*"
       @autogen autoconf 2.59  "2.5*"
   
   %autoclean
  @@ .

From ossp-cvs-owner@ossp.org  Wed Aug 11 21:36:33 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8D9F676365; Wed, 11 Aug 2004 21:36:33 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog
Message-Id: <20040811193633.8D9F676365@mail.ossp.org>
Date: Wed, 11 Aug 2004 21:36:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Aug-2004 21:36:33
  Branch: HEAD                             Handle: 2004081120363200

  Modified files:
    ossp-pkg/pth            ChangeLog

  Log:
    ops, next is GNU pth 2.0.2...

  Summary:
    Revision    Changes     Path
    1.615       +8  -2      ossp-pkg/pth/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.614 -r1.615 ChangeLog
  --- ossp-pkg/pth/ChangeLog	11 Aug 2004 19:32:35 -0000	1.614
  +++ ossp-pkg/pth/ChangeLog	11 Aug 2004 19:36:32 -0000	1.615
  @@ -19,12 +19,14 @@
        / __/ | |_| |
     __|_____(_)___/_________________________________________________________
                     
  -  Changes between 2.0.0 and 2.0.1 (17-Feb-2003 to 11-Aug-2004)
  +  Changes between 2.0.1 and 2.0.2 (13-Jul-2003 to xx-XXX-2004)
   
  -   *) Upgraded build environment to GNU autoconf 2.59, GNU libtool 1.5.8
  +   *) Upgraded build environment to GNU libtool 1.5.8
         and GNU shtool 2.0.1.
         [Ralf S. Engelschall]
   
  +  Changes between 2.0.0 and 2.0.1 (17-Feb-2003 to 13-Jul-2004)
  +
      *) Fix handling/casting of "int (*)(void *)" callback functions.
         [Ralf S. Engelschall]
   
  @@ -38,6 +40,10 @@
         are not acceptable in "strict aliasing" for GCC.
         [Ralf S. Engelschall]
   
  +   *) Upgraded build environment to GNU autoconf 2.59, GNU libtool 1.5.6
  +      and GNU shtool 2.0.0.
  +      [Ralf S. Engelschall]
  +
      *) Fixed implementation so that --enable-pthread now correctly
         implies --enable-syscall-soft.
         [Steve Alstrin <Steve.Alstrin@NetIQ.com>, Ralf S. Engelschall]
  @@ .

From ossp-cvs-owner@ossp.org  Thu Aug 12 18:23:28 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DF36376358; Thu, 12 Aug 2004 18:23:27 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-gui/ ChangeLog as_slot.cpp
Message-Id: <20040812162327.DF36376358@mail.ossp.org>
Date: Thu, 12 Aug 2004 18:23:27 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   12-Aug-2004 18:23:27
  Branch: HEAD                             Handle: 2004081217232600

  Modified files:
    ossp-pkg/as/as-gui      ChangeLog as_slot.cpp

  Log:
    work around a Trolltech bug causing erroneous row selections in member
    m_pMaintable of class Titraqform

  Summary:
    Revision    Changes     Path
    1.52        +6  -0      ossp-pkg/as/as-gui/ChangeLog
    1.142       +12 -0      ossp-pkg/as/as-gui/as_slot.cpp
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.51 -r1.52 ChangeLog
  --- ossp-pkg/as/as-gui/ChangeLog	20 Nov 2003 11:44:15 -0000	1.51
  +++ ossp-pkg/as/as-gui/ChangeLog	12 Aug 2004 16:23:26 -0000	1.52
  @@ -1,5 +1,11 @@
   Geschichte des OSSP titraq in Vorwaerts Cronordnung
   
  +040812 Work around a bug (in Qt? since 3.2.?) causing erroneous row
  +       selections when inserting (adding or copying) rows.
  +
  +040528 More closely adhere to C++ standard (currently ISO 14882) by
  +       removing all fundemental type variables of 'long long'.
  +
   031120 Handle the time consuming bureaucracy of changing a company name.
   
   031118 More reliably detect X11 features like Xft and Xrender, and
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_slot.cpp
  ============================================================================
  $ cvs diff -u -r1.141 -r1.142 as_slot.cpp
  --- ossp-pkg/as/as-gui/as_slot.cpp	27 May 2004 21:48:41 -0000	1.141
  +++ ossp-pkg/as/as-gui/as_slot.cpp	12 Aug 2004 16:23:26 -0000	1.142
  @@ -168,6 +168,12 @@
           m_pMaintable->setDirty();   // Set data to dirty state
           m_pMaintable->setCurrentCell(Select.topRow(), m_pMaintable->currentColumn());
   
  +        // According to Trolltech, insertRows() ''clears the selection(s)´´.
  +        // They are pretty wrong about that, so unfortunately we'll have to
  +        // take care of the dirty work ourselves with a clearSelection().
  +        m_pMaintable->clearSelection(false);
  +        m_pMaintable->selectRow(m_pMaintable->currentRow());
  +
           // Update relevant data fields for all new rows
           for (int nIter = 0; nIter < nTotal; nIter++) {
               m_pMaintable->setText(Select.topRow() + nIter, TITRAQ_IDXSTATUS, QString(QChar('W')));
  @@ -192,6 +198,12 @@
           m_pMaintable->setDirty();   // Set data to dirty state
           m_pMaintable->setCurrentCell(Select.bottomRow() + 1, m_pMaintable->currentColumn());
   
  +        // According to Trolltech, insertRows() ''clears the selection(s)´´.
  +        // They are pretty wrong about that, so unfortunately we'll have to
  +        // take care of the dirty work ourselves with a clearSelection().
  +        m_pMaintable->clearSelection(false);
  +        m_pMaintable->selectRow(m_pMaintable->currentRow());
  +
           // Update relevant data fields for all new rows
           for (int nIter = 1; nIter <= nTotal; nIter++) {
               m_pMaintable->setText(Select.bottomRow() + nIter, TITRAQ_IDXSTATUS, QString(QChar('W')));
  @@ .

From ossp-cvs-owner@ossp.org  Thu Aug 12 18:28:15 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A447876358; Thu, 12 Aug 2004 18:28:15 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-gui/ devtool.conf
Message-Id: <20040812162815.A447876358@mail.ossp.org>
Date: Thu, 12 Aug 2004 18:28:15 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   12-Aug-2004 18:28:15
  Branch: HEAD                             Handle: 2004081217281500

  Modified files:
    ossp-pkg/as/as-gui      devtool.conf

  Log:
    update shtool and autoconf expected and limit versions

  Summary:
    Revision    Changes     Path
    1.17        +2  -2      ossp-pkg/as/as-gui/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 devtool.conf
  --- ossp-pkg/as/as-gui/devtool.conf	7 Jul 2003 12:23:46 -0000	1.16
  +++ ossp-pkg/as/as-gui/devtool.conf	12 Aug 2004 16:28:15 -0000	1.17
  @@ -3,8 +3,8 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.2 "1.[56].*" all
  -    @autogen autoconf 2.57  "2.5[3-9]*"
  +    @autogen shtool   2.0.0 "2.0.*" echo fixperm install mkdir tarball version
  +    @autogen autoconf 2.59  "2.5[3-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .

From ossp-cvs-owner@ossp.org  Thu Aug 12 18:31:41 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C576476310; Thu, 12 Aug 2004 18:31:40 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-gui/ ChangeLog
Message-Id: <20040812163140.C576476310@mail.ossp.org>
Date: Thu, 12 Aug 2004 18:31:40 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   12-Aug-2004 18:31:40
  Branch: HEAD                             Handle: 2004081217314000

  Modified files:
    ossp-pkg/as/as-gui      ChangeLog

  Log:
    improve and update change text

  Summary:
    Revision    Changes     Path
    1.53        +2  -2      ossp-pkg/as/as-gui/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.52 -r1.53 ChangeLog
  --- ossp-pkg/as/as-gui/ChangeLog	12 Aug 2004 16:23:26 -0000	1.52
  +++ ossp-pkg/as/as-gui/ChangeLog	12 Aug 2004 16:31:40 -0000	1.53
  @@ -1,7 +1,7 @@
   Geschichte des OSSP titraq in Vorwaerts Cronordnung
   
  -040812 Work around a bug (in Qt? since 3.2.?) causing erroneous row
  -       selections when inserting (adding or copying) rows.
  +040812 Work around a selection bug (bad row highlights) in Qt? since 3.2.?
  +       Upgraded build environment to GNU shtool 2.0.0 and GNU autoconf 2.59
   
   040528 More closely adhere to C++ standard (currently ISO 14882) by
          removing all fundemental type variables of 'long long'.
  @@ .

From ossp-cvs-owner@ossp.org  Thu Aug 12 18:46:45 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A5AE676358; Thu, 12 Aug 2004 18:46:45 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-gui/ README as_version.cpp
Message-Id: <20040812164645.A5AE676358@mail.ossp.org>
Date: Thu, 12 Aug 2004 18:46:45 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   12-Aug-2004 18:46:45
  Branch: HEAD                             Handle: 2004081217464400

  Modified files:
    ossp-pkg/as/as-gui      README as_version.cpp

  Log:
    bump version for release

  Summary:
    Revision    Changes     Path
    1.48        +1  -1      ossp-pkg/as/as-gui/README
    1.44        +9  -9      ossp-pkg/as/as-gui/as_version.cpp
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/README
  ============================================================================
  $ cvs diff -u -r1.47 -r1.48 README
  --- ossp-pkg/as/as-gui/README	27 May 2004 21:48:40 -0000	1.47
  +++ ossp-pkg/as/as-gui/README	12 Aug 2004 16:46:44 -0000	1.48
  @@ -5,7 +5,7 @@
                  |_|                 |___/
   
     OSSP asgui -- Accounting system graphical user interface
  -  Version 0.7.5 (20-Nov-2003)
  +  Version 0.7.6 (12-Aug-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_version.cpp
  ============================================================================
  $ cvs diff -u -r1.43 -r1.44 as_version.cpp
  --- ossp-pkg/as/as-gui/as_version.cpp	20 Nov 2003 11:44:15 -0000	1.43
  +++ ossp-pkg/as/as-gui/as_version.cpp	12 Aug 2004 16:46:44 -0000	1.44
  @@ -8,7 +8,7 @@
   #ifndef _AS_VERSION_CPP_
   #define _AS_VERSION_CPP_
   
  -#define ASGUI_VERSION 0x007205
  +#define ASGUI_VERSION 0x007206
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _AS_VERSION_CPP_AS_HEADER_
   
   asgui_version_t asgui_version = {
  -    0x007205,
  -    "0.7.5",
  -    "0.7.5 (20-Nov-2003)",
  -    "This is OSSP as-gui, Version 0.7.5 (20-Nov-2003)",
  -    "OSSP as-gui 0.7.5 (20-Nov-2003)",
  -    "OSSP as-gui/0.7.5",
  -    "@(#)OSSP as-gui 0.7.5 (20-Nov-2003)",
  -    "$Id: as_version.cpp,v 1.43 2003/11/20 11:44:15 ms Exp $"
  +    0x007206,
  +    "0.7.6",
  +    "0.7.6 (12-Aug-2004)",
  +    "This is OSSP as-gui, Version 0.7.6 (12-Aug-2004)",
  +    "OSSP as-gui 0.7.6 (12-Aug-2004)",
  +    "OSSP as-gui/0.7.6",
  +    "@(#)OSSP as-gui 0.7.6 (12-Aug-2004)",
  +    "$Id: as_version.cpp,v 1.44 2004/08/12 16:46:44 ms Exp $"
   };
   
   #endif /* _AS_VERSION_CPP_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Thu Aug 12 19:12:35 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C8436763B8; Thu, 12 Aug 2004 19:12:34 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-gui/ ChangeLog devtool.conf
Message-Id: <20040812171234.C8436763B8@mail.ossp.org>
Date: Thu, 12 Aug 2004 19:12:34 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   12-Aug-2004 19:12:34
  Branch: HEAD                             Handle: 2004081218123300

  Modified files:
    ossp-pkg/as/as-gui      ChangeLog devtool.conf

  Log:
    more preparation for release 0.7.6

  Summary:
    Revision    Changes     Path
    1.54        +1  -0      ossp-pkg/as/as-gui/ChangeLog
    1.18        +1  -1      ossp-pkg/as/as-gui/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.53 -r1.54 ChangeLog
  --- ossp-pkg/as/as-gui/ChangeLog	12 Aug 2004 16:31:40 -0000	1.53
  +++ ossp-pkg/as/as-gui/ChangeLog	12 Aug 2004 17:12:33 -0000	1.54
  @@ -2,6 +2,7 @@
   
   040812 Work around a selection bug (bad row highlights) in Qt? since 3.2.?
          Upgraded build environment to GNU shtool 2.0.0 and GNU autoconf 2.59
  +       Changed URL for deployment and storage of release tarballs
   
   040528 More closely adhere to C++ standard (currently ISO 14882) by
          removing all fundemental type variables of 'long long'.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 devtool.conf
  --- ossp-pkg/as/as-gui/devtool.conf	12 Aug 2004 16:28:15 -0000	1.17
  +++ ossp-pkg/as/as-gui/devtool.conf	12 Aug 2004 17:12:33 -0000	1.18
  @@ -62,4 +62,4 @@
   %upload
       echo "+++ copying to http://as.is.eu.cw.com/source/"
       V=`./shtool version -l c -d short as_version.cpp`
  -    scp as-gui-${V}.tar.gz root@as.de.cw.net:/as/web/source/
  +    scp as-gui-${V}.tar.gz root@as.de.cw.net:/v/as/web/source/
  @@ .

From ossp-cvs-owner@ossp.org  Fri Aug 13 14:35:42 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E6A4676319; Fri, 13 Aug 2004 14:35:41 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-gui/ aclocal.m4
Message-Id: <20040813123541.E6A4676319@mail.ossp.org>
Date: Fri, 13 Aug 2004 14:35:41 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   13-Aug-2004 14:35:41
  Branch: HEAD                             Handle: 2004081313354100

  Modified files:
    ossp-pkg/as/as-gui      aclocal.m4

  Log:
    use correct with-mico expression everywhere as indicated by configure
    --help

  Summary:
    Revision    Changes     Path
    1.19        +2  -2      ossp-pkg/as/as-gui/aclocal.m4
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 aclocal.m4
  --- ossp-pkg/as/as-gui/aclocal.m4	27 May 2004 21:48:40 -0000	1.18
  +++ ossp-pkg/as/as-gui/aclocal.m4	13 Aug 2004 12:35:41 -0000	1.19
  @@ -235,7 +235,7 @@
       AC_MSG_RESULT(${CORBABASE})
   else
       AC_MSG_RESULT(not found)
  -    AC_MSG_ERROR([Neither \$MICODIR nor --with-micodir=[DIR] paths exist])
  +    AC_MSG_ERROR([Neither \$MICODIR nor --with-mico=[DIR] paths exist])
   fi
   
   dnl ## Append paths of libs and headers
  @@ -273,7 +273,7 @@
       AC_MSG_RESULT(${SOAPBASE})
   else
       AC_MSG_RESULT(not found)
  -    AC_MSG_ERROR([Neither \$ESOAPDIR nor --with-easysoapdir=[DIR] paths exist])
  +    AC_MSG_ERROR([Neither \$ESOAPDIR nor --with-easysoap=[DIR] paths exist])
   fi
   
   dnl ## Append paths of libs and headers
  @@ .

From ossp-cvs-owner@ossp.org  Fri Aug 13 14:36:04 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 81E687639E; Fri, 13 Aug 2004 14:36:04 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-gui/ as_slot.cpp
Message-Id: <20040813123604.81E687639E@mail.ossp.org>
Date: Fri, 13 Aug 2004 14:36:04 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   13-Aug-2004 14:36:04
  Branch: HEAD                             Handle: 2004081313360300

  Modified files:
    ossp-pkg/as/as-gui      as_slot.cpp

  Log:
    use standard english punctuation

  Summary:
    Revision    Changes     Path
    1.143       +2  -2      ossp-pkg/as/as-gui/as_slot.cpp
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_slot.cpp
  ============================================================================
  $ cvs diff -u -r1.142 -r1.143 as_slot.cpp
  --- ossp-pkg/as/as-gui/as_slot.cpp	12 Aug 2004 16:23:26 -0000	1.142
  +++ ossp-pkg/as/as-gui/as_slot.cpp	13 Aug 2004 12:36:03 -0000	1.143
  @@ -168,7 +168,7 @@
           m_pMaintable->setDirty();   // Set data to dirty state
           m_pMaintable->setCurrentCell(Select.topRow(), m_pMaintable->currentColumn());
   
  -        // According to Trolltech, insertRows() ''clears the selection(s)´´.
  +        // According to Trolltech, insertRows() "clears the selection(s)".
           // They are pretty wrong about that, so unfortunately we'll have to
           // take care of the dirty work ourselves with a clearSelection().
           m_pMaintable->clearSelection(false);
  @@ -198,7 +198,7 @@
           m_pMaintable->setDirty();   // Set data to dirty state
           m_pMaintable->setCurrentCell(Select.bottomRow() + 1, m_pMaintable->currentColumn());
   
  -        // According to Trolltech, insertRows() ''clears the selection(s)´´.
  +        // According to Trolltech, insertRows() "clears the selection(s)".
           // They are pretty wrong about that, so unfortunately we'll have to
           // take care of the dirty work ourselves with a clearSelection().
           m_pMaintable->clearSelection(false);
  @@ .

From ossp-cvs-owner@ossp.org  Fri Aug 20 19:41:25 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2CA3776368; Fri, 20 Aug 2004 19:41:25 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-gui/ TODO
Message-Id: <20040820174125.2CA3776368@mail.ossp.org>
Date: Fri, 20 Aug 2004 19:41:25 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   20-Aug-2004 19:41:25
  Branch: HEAD                             Handle: 2004082018412400

  Modified files:
    ossp-pkg/as/as-gui      TODO

  Log:
    Document highlight problem and poor data file validation.

  Summary:
    Revision    Changes     Path
    1.102       +2  -0      ossp-pkg/as/as-gui/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/TODO
  ============================================================================
  $ cvs diff -u -r1.101 -r1.102 TODO
  --- ossp-pkg/as/as-gui/TODO	29 Jul 2003 18:20:31 -0000	1.101
  +++ ossp-pkg/as/as-gui/TODO	20 Aug 2004 17:41:24 -0000	1.102
  @@ -62,6 +62,7 @@
   Memory leak in vector<QRadioButton> as_panel
   Opendoc, schau amount unten Knopf (ist dimmed)
   Reporting only works if event data is sorted by date
  +Press Return then Tab many times to see invalid selections
   
   Nice to have
   ------------
  @@ -87,6 +88,7 @@
   App should start even if no accounts file is found
   Fully vimize all input widgets by subclassing them (w - back word)
   Reload accountlist on startup, but reload during 'Open Doc' as well
  +Better file validation, instead of just single line validateData op
   
   Screwey user notes ;-)
   ----------------------
  @@ .

From ossp-cvs-owner@ossp.org  Fri Aug 20 19:47:08 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6EF6F76311; Fri, 20 Aug 2004 19:47:08 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-gui/ as_assist.cpp as_const.h as_dataop.cpp...
Message-Id: <20040820174708.6EF6F76311@mail.ossp.org>
Date: Fri, 20 Aug 2004 19:47:08 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   20-Aug-2004 19:47:08
  Branch: HEAD                             Handle: 2004082018470700

  Modified files:
    ossp-pkg/as/as-gui      as_assist.cpp as_const.h as_dataop.cpp as_gui.h
                            as_slot.cpp

  Log:
    Unload validation of personal data file from load logic, move new
    validation block to validateData, change all cases of preexisting
    validateData to new name validateRow, test for valid data from now on
    before calling loadData, and place read data file error strings in
    constants header

  Summary:
    Revision    Changes     Path
    1.119       +7  -7      ossp-pkg/as/as-gui/as_assist.cpp
    1.65        +2  -0      ossp-pkg/as/as-gui/as_const.h
    1.55        +75 -29     ossp-pkg/as/as-gui/as_dataop.cpp
    1.83        +4  -2      ossp-pkg/as/as-gui/as_gui.h
    1.144       +18 -16     ossp-pkg/as/as-gui/as_slot.cpp
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_assist.cpp
  ============================================================================
  $ cvs diff -u -r1.118 -r1.119 as_assist.cpp
  --- ossp-pkg/as/as-gui/as_assist.cpp	27 May 2004 21:48:40 -0000	1.118
  +++ ossp-pkg/as/as-gui/as_assist.cpp	20 Aug 2004 17:47:07 -0000	1.119
  @@ -932,12 +932,12 @@
       this->updSizes(TITRAQ_IDXALLCTRLS, -1, -1);
   
       // Validate data just as it is being entered
  -    connect(m_pDateedit, SIGNAL(valueChanged(const QDate &)), SLOT(validateData(void)));
  -    connect(m_pStarttime, SIGNAL(valueChanged(const QTime &)), SLOT(validateData(void)));
  -    connect(m_pEndtime, SIGNAL(valueChanged(const QTime &)), SLOT(validateData(void)));
  -    connect(m_pAmount, SIGNAL(valueChanged(const QTime &)), SLOT(validateData(void)));
  -    connect(m_pTasks, SIGNAL(textChanged(const QString &)), SLOT(validateData(void)));
  -    connect(m_pRemark, SIGNAL(textChanged(const QString &)), SLOT(validateData(void)));
  +    connect(m_pDateedit, SIGNAL(valueChanged(const QDate &)), SLOT(validateRow(void)));
  +    connect(m_pStarttime, SIGNAL(valueChanged(const QTime &)), SLOT(validateRow(void)));
  +    connect(m_pEndtime, SIGNAL(valueChanged(const QTime &)), SLOT(validateRow(void)));
  +    connect(m_pAmount, SIGNAL(valueChanged(const QTime &)), SLOT(validateRow(void)));
  +    connect(m_pTasks, SIGNAL(textChanged(const QString &)), SLOT(validateRow(void)));
  +    connect(m_pRemark, SIGNAL(textChanged(const QString &)), SLOT(validateRow(void)));
   
       // Signals sent between table cells and corresponding edit control widgets
       connect(m_pLineedit, SIGNAL(textChanged(const QString &)), SLOT(updateLine(const QString &)));
  @@ -1083,7 +1083,7 @@
                   try {
                       this->setFilename(qApp->argv()[nIter]); // Store inital filename
                       Initial.setName(*this->getFilename());  // Initial file to load
  -                    if (Initial.exists(*getFilename())) {
  +                    if (Initial.exists(*getFilename()) && validateData(Initial)) {
                           this->loadData(Initial);            // Pass to helper method
                           enableIface(true);                  // Turn on the lights
                           m_pStatbar->message(trUtf8("Loaded document ") + *this->getFilename());
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_const.h
  ============================================================================
  $ cvs diff -u -r1.64 -r1.65 as_const.h
  --- ossp-pkg/as/as-gui/as_const.h	27 May 2004 21:48:40 -0000	1.64
  +++ ossp-pkg/as/as-gui/as_const.h	20 Aug 2004 17:47:07 -0000	1.65
  @@ -216,6 +216,8 @@
   #define TITRAQ_INCOMPATDATA     "Error: incompatible data format."
   #define TITRAQ_INVALIDDATA      "Error: invalid data format."
   #define TITRAQ_SAVECANCELLED    "Warning: save operation failed, because the user cancelled."
  +#define TITRAQ_READPFILFAIL     "Could not open personal data file for reading."
  +#define TITRAQ_READAFILFAIL     "Could not open account file at %1 for reading."
   
   // Indexes of table columns
   #define TITRAQ_IDXALLCTRLS     -1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_dataop.cpp
  ============================================================================
  $ cvs diff -u -r1.54 -r1.55 as_dataop.cpp
  --- ossp-pkg/as/as-gui/as_dataop.cpp	27 May 2004 21:48:41 -0000	1.54
  +++ ossp-pkg/as/as-gui/as_dataop.cpp	20 Aug 2004 17:47:07 -0000	1.55
  @@ -65,8 +65,11 @@
           this->loadAccounts(Account);    // Pass off to do the real work
       }
       else {
  -        if (!Fileobj.open(IO_ReadOnly)) // Try to open file
  -            throw Genexcept("Could not open account file for reading.");
  +        if (!Fileobj.open(IO_ReadOnly)) {   // Try to open file
  +            QString Readerrstr;
  +            Readerrstr = trUtf8(TITRAQ_READAFILFAIL).arg(Fileobj.name());
  +            throw Genexcept(Readerrstr.ascii());
  +        }
           else
               Fileobj.flush();                // Begin processing file cleanly
               QTextStream Account(&Fileobj);  // Convert data to stream
  @@ -155,7 +158,7 @@
       }
       else {
           if (!Fileobj.open(IO_ReadOnly)) // Try to open file
  -            throw Genexcept("Could not open personal data file for reading.");
  +            throw Genexcept(trUtf8(TITRAQ_READPFILFAIL));
           else
               Fileobj.flush();                // Begin processing file cleanly
               QTextStream Asentry(&Fileobj);  // Convert data to stream
  @@ -186,31 +189,6 @@
               Line = QString("");
       }
   
  -    // Ensure that the right data version pattern precedes the data
  -    QString Datapattern = QString(TITRAQ_DATAPATTERN);
  -    if (!Line.startsWith(Datapattern)) { // Incompatible data format
  -        QMessageBox Problema(QString(TITRAQ_APPTITLE) + ' ' + asgui_version.v_short,
  -            TITRAQ_NOPATTERNFOUND + QString(TITRAQ_DATAPATTERN) + TITRAQ_WASNOTFOUNDIN,
  -            QMessageBox::Critical, QMessageBox::Ok | QMessageBox::Escape,
  -            QMessageBox::NoButton, QMessageBox::NoButton);
  -        Problema.exec(); // Give the user the bad news
  -        throw Genexcept(TITRAQ_INVALIDDATA);
  -    }
  -    else if (Line.section(Datapattern, 1).section('.', 0, 0).toInt() != TITRAQ_DATAVERSIONMAJ) {
  -        QMessageBox Problema(QString(TITRAQ_APPTITLE) + ' ' + asgui_version.v_short,
  -            TITRAQ_BADVERSIONMAJ, QMessageBox::Warning, QMessageBox::Ok | QMessageBox::Escape,
  -            QMessageBox::NoButton, QMessageBox::NoButton);
  -        Problema.exec(); // Give the user the bad news
  -        throw Genexcept(TITRAQ_INCOMPATDATA);
  -    }
  -    else if (Line.section(Datapattern, 1).section('.', 1, 1).toInt() > TITRAQ_DATAVERSIONMIN) {
  -        QMessageBox Problema(QString(TITRAQ_APPTITLE) + ' ' + asgui_version.v_short,
  -            TITRAQ_BADVERSIONMIN, QMessageBox::Warning, QMessageBox::Ok | QMessageBox::Escape,
  -            QMessageBox::NoButton, QMessageBox::NoButton);
  -        Problema.exec(); // Give the user the bad news
  -        throw Genexcept(TITRAQ_INCOMPATDATA);
  -    }
  -
       // Strip out extra line feeds after reading the data symbol
       Line = QString("");                 // Reset our line
       while (Line.isEmpty() && !Tstream.atEnd()) {
  @@ -391,7 +369,7 @@
       }
       else {
           if (!Fileobj.open(IO_WriteOnly)) // Try to open file
  -            throw Genexcept("Could not open personal data file for writing.");
  +            throw Genexcept(trUtf8(TITRAQ_READPFILFAIL));
           QTextStream Asentry(&Fileobj);  // Convert data to stream
           this->saveData(Asentry);        // Pass off to do the real work
           Fileobj.close();                // Finish fileop by closing
  @@ -468,6 +446,74 @@
   }
   
   //
  +// Convenience method to validate AS data in a file
  +//
  +const bool Titraqform::validateData(QFile &Filin) const
  +{
  +    QString Firstline;      // Will contain the first line of text
  +    bool bRet = false;      // Set the initial return value
  +
  +    if (Filin.isOpen()) {   // Check open state of file
  +        Filin.flush();      // Not sure if this is needed
  +        Filin.reset();      // Set the file index position to 0
  +        Filin.readLine(Firstline, QString(TITRAQ_DATAPATTERN).length() + 2L);
  +    }
  +    else {
  +        if (!Filin.open(IO_ReadOnly))   // Try to open file
  +            throw Genexcept(trUtf8(TITRAQ_READPFILFAIL));
  +        else {                          // File is now open
  +            Filin.readLine(Firstline, QString(TITRAQ_DATAPATTERN).length() + 2L);
  +            Filin.close();              // Remember to close
  +        }
  +    }
  +
  +    try {   // Pass off to worker method
  +        bRet = this->validateData(Firstline);
  +    }
  +    catch (Genexcept &) {
  +        throw;  // Rethrow onwards
  +    }
  +    return bRet;
  +}
  +
  +//
  +// Validate the AS data pattern in a line
  +//
  +const bool Titraqform::validateData(QString &Linin) const
  +{
  +    bool bRet = false;  // Initial return value
  +
  +    // Ensure that the right data version pattern precedes the data
  +    QString Datapattern = QString(TITRAQ_DATAPATTERN);
  +    if (!Linin.startsWith(Datapattern)) { // Incompatible data format
  +        QMessageBox Problema(QString(TITRAQ_APPTITLE) + ' ' + asgui_version.v_short,
  +            TITRAQ_NOPATTERNFOUND + QString(TITRAQ_DATAPATTERN) + TITRAQ_WASNOTFOUNDIN,
  +            QMessageBox::Critical, QMessageBox::Ok | QMessageBox::Escape,
  +            QMessageBox::NoButton, QMessageBox::NoButton);
  +        Problema.exec(); // Give the user the bad news
  +        throw Genexcept(TITRAQ_INVALIDDATA);
  +    }
  +    else if (Linin.section(Datapattern, 1).section('.', 0, 0).toInt() != TITRAQ_DATAVERSIONMAJ) {
  +        QMessageBox Problema(QString(TITRAQ_APPTITLE) + ' ' + asgui_version.v_short,
  +            TITRAQ_BADVERSIONMAJ, QMessageBox::Warning, QMessageBox::Ok | QMessageBox::Escape,
  +            QMessageBox::NoButton, QMessageBox::NoButton);
  +        Problema.exec(); // Give the user the bad news
  +        throw Genexcept(TITRAQ_INCOMPATDATA);
  +    }
  +    else if (Linin.section(Datapattern, 1).section('.', 1, 1).toInt() > TITRAQ_DATAVERSIONMIN) {
  +        QMessageBox Problema(QString(TITRAQ_APPTITLE) + ' ' + asgui_version.v_short,
  +            TITRAQ_BADVERSIONMIN, QMessageBox::Warning, QMessageBox::Ok | QMessageBox::Escape,
  +            QMessageBox::NoButton, QMessageBox::NoButton);
  +        Problema.exec(); // Give the user the bad news
  +        throw Genexcept(TITRAQ_INCOMPATDATA);
  +    }
  +    else
  +        bRet = true;
  +
  +    return bRet;    // Not reached in case of failure
  +}
  +
  +//
   // Get a whole row of data
   //
   const QString Titraqform::getRowdata(void) const
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_gui.h
  ============================================================================
  $ cvs diff -u -r1.82 -r1.83 as_gui.h
  --- ossp-pkg/as/as-gui/as_gui.h	27 May 2004 22:02:29 -0000	1.82
  +++ ossp-pkg/as/as-gui/as_gui.h	20 Aug 2004 17:47:07 -0000	1.83
  @@ -228,8 +228,8 @@
       void onClick(int, int, int, const QPoint &); // Table was clicked
       void inplaceEdit(int, int, int, const QPoint &); // Enter in place edit mode
       void updEdit(int, int nCol = 0);    // Update edit controls
  -    void validateData(void);            // Validate current row of matrix data
  -    void validateData(int, int);        // Validate specified row of matrix data
  +    void validateRow(void);             // Validate current row of matrix
  +    void validateRow(int, int);         // Validate specified row of matrix
       void updSizes(int, int, int);       // Update edit sizes
       void calcCrc(void);                 // Calculate CRC of current row
       void calcCrc(int, int);             // Calculate CRC of specified row
  @@ -318,6 +318,8 @@
       void loadData(QTextStream &);       // Load personal data from stream
       void saveData(QFile &);             // Save accounting data to file
       void saveData(QTextStream &);       // Save accounting data to stream
  +    const bool validateData(QFile &) const;   // Validate personal data in file
  +    const bool validateData(QString &) const; // Validate personal data from string
   };
   
   #endif // AS_GUI_MWIN_H
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_slot.cpp
  ============================================================================
  $ cvs diff -u -r1.143 -r1.144 as_slot.cpp
  --- ossp-pkg/as/as-gui/as_slot.cpp	13 Aug 2004 12:36:03 -0000	1.143
  +++ ossp-pkg/as/as-gui/as_slot.cpp	20 Aug 2004 17:47:07 -0000	1.144
  @@ -133,7 +133,7 @@
   
           // Do basic data validation to warn against missing fields
           for (int nIter = 0; nIter < nRows; nIter++)
  -            this->validateData(m_pMaintable->currentRow() + nIter, 0);
  +            this->validateRow(m_pMaintable->currentRow() + nIter, 0);
   
           m_pStatbar->message(QString::number(nRows) + trUtf8(" rows pasted"), 4000);
           updEdit(m_pMaintable->currentRow()); // Reflect in the update controls
  @@ -332,7 +332,7 @@
       // Sweep through matrix validating linewise
       // data and updating line numbers for all rows
       while (nIter < nRows) {
  -        this->validateData(nIter, 0);
  +        this->validateRow(nIter, 0);
           m_pMaintable->setText(nIter, TITRAQ_IDXLINE, QString::number(nIter).rightJustify(4, QChar('0')));
           nIter++;
       }
  @@ -430,19 +430,21 @@
   
           // We might have a filename to work on, so do something with it
           if (!Filestring.isEmpty()) {
  -            setFilename(Filestring);            // Set the new file name
  -            m_pMaintable->setNumRows(0);        // Clear out old data
  -            m_pMaintable->setDirty(false);      // Reset dirty flag
  -            QFile Filetemp(Filestring);         // File to load
  +            QFile Filetemp(Filestring);             // File to load
               try {
  -                loadData(Filetemp);             // Pass to helper method
  -                this->setCaption(Filestring);   // Caption in the titlebar
  -                m_pStatbar->message(trUtf8("Loaded document ") + Filestring, 4000);
  -                this->enableIface(true);        // Turn on the lights
  +                if (Filetemp.exists() && validateData(Filetemp)) { // Be extra sure
  +                    setFilename(Filestring);        // Set the new file name
  +                    m_pMaintable->setNumRows(0);    // Clear out old data
  +                    m_pMaintable->setDirty(false);  // Reset dirty flag
  +                    loadData(Filetemp);             // Pass to helper method
  +                    this->setCaption(Filestring);   // Caption in the titlebar
  +                    m_pStatbar->message(trUtf8("Loaded document ") + Filestring, 4000);
  +                    this->enableIface(true);        // Turn on the lights
  +                    this->setOpen(true);            // Indicate doc is open
  +                }
               }
               catch (Genexcept& Genex) { // Crap, we failed
                   m_pStatbar->message(trUtf8("Loading failed"), 4000);
  -                this->setOpen(false);
                   Genex.reportErr();
                   return;
               }
  @@ -947,17 +949,17 @@
   }
   
   //
  -// Validate current row of matrix data
  +// Validate current row of the matrix
   //
  -void Titraqform::validateData(void)
  +void Titraqform::validateRow(void)
   {
  -    this->validateData(-1, -1);
  +    this->validateRow(-1, -1);
   }
   
   //
  -// Validate specified row of matrix data
  +// Validate specified row of the matrix
   //
  -void Titraqform::validateData(int nRow, int nCol)
  +void Titraqform::validateRow(int nRow, int nCol)
   {
       int nRealrow = -1;
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Aug 20 19:50:44 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7AF9376311; Fri, 20 Aug 2004 19:50:44 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-gui/ as_except.h
Message-Id: <20040820175044.7AF9376311@mail.ossp.org>
Date: Fri, 20 Aug 2004 19:50:44 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   20-Aug-2004 19:50:44
  Branch: HEAD                             Handle: 2004082018504400

  Modified files:
    ossp-pkg/as/as-gui      as_except.h

  Log:
    Incoming string constants should be identified so.

  Summary:
    Revision    Changes     Path
    1.7         +1  -1      ossp-pkg/as/as-gui/as_except.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_except.h
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 as_except.h
  --- ossp-pkg/as/as-gui/as_except.h	27 May 2004 21:48:41 -0000	1.6
  +++ ossp-pkg/as/as-gui/as_except.h	20 Aug 2004 17:50:44 -0000	1.7
  @@ -44,7 +44,7 @@
       char *szMessage;
   
   public:
  -    Genexcept(char *szInmess) {szMessage = szInmess;};
  +    Genexcept(const char *szInmess) {szMessage = (char *)szInmess;};
       void reportErr(void);
       ~Genexcept(void);
   };
  @@ .

From ossp-cvs-owner@ossp.org  Tue Aug 24 23:34:53 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 947A57631B; Tue, 24 Aug 2004 23:34:53 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-gui/ TODO
Message-Id: <20040824213453.947A57631B@mail.ossp.org>
Date: Tue, 24 Aug 2004 23:34:53 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   24-Aug-2004 23:34:53
  Branch: HEAD                             Handle: 2004082422345200

  Modified files:
    ossp-pkg/as/as-gui      TODO

  Log:
    Document check accountlist, freetext field, swaprows, update edit,
    unviewable redraw, save before quitting, no enter edit mode, missing
    auto save message.

  Summary:
    Revision    Changes     Path
    1.103       +16 -0      ossp-pkg/as/as-gui/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/TODO
  ============================================================================
  $ cvs diff -u -r1.102 -r1.103 TODO
  --- ossp-pkg/as/as-gui/TODO	20 Aug 2004 17:41:24 -0000	1.102
  +++ ossp-pkg/as/as-gui/TODO	24 Aug 2004 21:34:52 -0000	1.103
  @@ -43,6 +43,9 @@
   Yank out all #include from headers, replace with class ...; protos
   Check for empty amount field in getWeektotals before Hashtasks[Convstring] +=
   Accountlistbox is sorted both in assist and dataops with maps
  +Verify that unviewable rows are not redrawn cerr << "Rownum" << nRow << endl;
  +Also, use bool QTable::isRowHidden (int nRow) const
  +Don't raise the question 'Save before quitting' when no contents were changed
   
   Bugs (? = unverified)
   ---------------------
  @@ -63,6 +66,10 @@
   Opendoc, schau amount unten Knopf (ist dimmed)
   Reporting only works if event data is sorted by date
   Press Return then Tab many times to see invalid selections
  +Does not enter edit mode for a cell when double click
  +Some versions (as.de.cw.net:/v/as-old/sw), double click to
  +  edit a cell, add two characters, click X to close without
  +  leaving the cell. It should ask to save doc, but doesn't.
   
   Nice to have
   ------------
  @@ -89,6 +96,15 @@
   Fully vimize all input widgets by subclassing them (w - back word)
   Reload accountlist on startup, but reload during 'Open Doc' as well
   Better file validation, instead of just single line validateData op
  +Freetext field, for copyright or some announcement (this data isn't
  +  accurate enough for billing purposes). Field can be optionally
  +  shown above main table, but always dimmed to avoid accidental edit.
  +Check for account list updates (checkbox), to allow a local user to
  +  query a CORBA or SOAP server for a new account list via accessors:
  +    U32 Account::getCrc(void)
  +    Acctlist Account::getData(void)
  +Reimplement void QTable::swapRows, so that rows can be moved easily
  +Update edit controls only after return from TiTable::createEditor()
   
   Screwey user notes ;-)
   ----------------------
  @@ .

From ossp-cvs-owner@ossp.org  Tue Aug 24 23:37:30 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DA9287631B; Tue, 24 Aug 2004 23:37:29 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-gui/ aclocal.m4
Message-Id: <20040824213729.DA9287631B@mail.ossp.org>
Date: Tue, 24 Aug 2004 23:37:29 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   24-Aug-2004 23:37:29
  Branch: HEAD                             Handle: 2004082422372800

  Modified files:
    ossp-pkg/as/as-gui      aclocal.m4

  Log:
    Use correct with-qt expression as indicated by configure --help.

  Summary:
    Revision    Changes     Path
    1.20        +3  -3      ossp-pkg/as/as-gui/aclocal.m4
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 aclocal.m4
  --- ossp-pkg/as/as-gui/aclocal.m4	13 Aug 2004 12:35:41 -0000	1.19
  +++ ossp-pkg/as/as-gui/aclocal.m4	24 Aug 2004 21:37:28 -0000	1.20
  @@ -295,8 +295,8 @@
   dnl ##
   
   AC_DEFUN(AC_CHECK_QT,[dnl
  -AC_ARG_WITH(qtdir,dnl
  -[  --with-qtdir=[DIR]    prefix where Qt is installed], qtdir=$withval,)
  +AC_ARG_WITH(qt,dnl
  +[  --with-qt=[DIR]    prefix where Qt is installed], qtdir=$withval,)
   AC_MSG_CHECKING(the Qt installation path)
   
   dnl ## Ensure that we have a basic path to start searching
  @@ -310,7 +310,7 @@
       AC_MSG_RESULT(${QTBASE})
   else
       AC_MSG_RESULT(not found)
  -    AC_MSG_ERROR([Neither \$QTDIR nor --with-qtdir=[DIR] paths exist])
  +    AC_MSG_ERROR([Neither \$QTDIR nor --with-qt=[DIR] paths exist])
   fi
   
   dnl ## Now search for libs and headers
  @@ .

From ossp-cvs-owner@ossp.org  Tue Aug 24 23:39:28 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4DE9E7631B; Tue, 24 Aug 2004 23:39:28 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-gui/ as_assist.cpp
Message-Id: <20040824213928.4DE9E7631B@mail.ossp.org>
Date: Tue, 24 Aug 2004 23:39:28 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   24-Aug-2004 23:39:28
  Branch: HEAD                             Handle: 2004082422392700

  Modified files:
    ossp-pkg/as/as-gui      as_assist.cpp

  Log:
    Connect valueChanged() signal to capture dirty data messages
    correctly.

  Summary:
    Revision    Changes     Path
    1.120       +1  -0      ossp-pkg/as/as-gui/as_assist.cpp
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_assist.cpp
  ============================================================================
  $ cvs diff -u -r1.119 -r1.120 as_assist.cpp
  --- ossp-pkg/as/as-gui/as_assist.cpp	20 Aug 2004 17:47:07 -0000	1.119
  +++ ossp-pkg/as/as-gui/as_assist.cpp	24 Aug 2004 21:39:27 -0000	1.120
  @@ -674,6 +674,7 @@
       connect(m_pMaintable, SIGNAL(doubleClicked(int, int, int, const QPoint&)), SLOT(inplaceEdit(int, int, int, const QPoint&)));
       connect(m_pTablehead, SIGNAL(sizeChange(int, int, int)), SLOT(updSizes(int, int, int)));
       connect(m_pMaintable, SIGNAL(textEdited(int, int)), SLOT(dataChanged(int, int)));
  +    connect(m_pMaintable, SIGNAL(valueChanged(int, int)), SLOT(dataChanged(int, int)));
   }
   
   //
  @@ .

From ossp-cvs-owner@ossp.org  Tue Aug 24 23:42:17 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9B26D7631B; Tue, 24 Aug 2004 23:42:17 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-gui/ as_slot.cpp
Message-Id: <20040824214217.9B26D7631B@mail.ossp.org>
Date: Tue, 24 Aug 2004 23:42:17 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   24-Aug-2004 23:42:17
  Branch: HEAD                             Handle: 2004082422421600

  Modified files:
    ossp-pkg/as/as-gui      as_slot.cpp

  Log:
    Replace read only attribute reset to endEdit() to fix in place edition
    bug (causing in place edition to totally fail).

  Summary:
    Revision    Changes     Path
    1.145       +6  -1      ossp-pkg/as/as-gui/as_slot.cpp
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_slot.cpp
  ============================================================================
  $ cvs diff -u -r1.144 -r1.145 as_slot.cpp
  --- ossp-pkg/as/as-gui/as_slot.cpp	20 Aug 2004 17:47:07 -0000	1.144
  +++ ossp-pkg/as/as-gui/as_slot.cpp	24 Aug 2004 21:42:16 -0000	1.145
  @@ -682,10 +682,15 @@
   //
   void Titraqform::inplaceEdit(int nRow, int nCol, int nButton, const QPoint &Mousepos)
   {
  +    // Table read only attribute must be reset here, so that editing can take
  +    // place. Otherwise calls to editCell are ignored (for obvious reasons).
       m_pMaintable->setReadOnly(false);
  +
  +    // After editCell() is called, beginEdit() and endEdit() execute. The read
  +    // only attribute is reset in endEdit() to return everything to normal.
       m_pMaintable->editCell(nRow, nCol);
  +
       m_pMaintable->setEdition(nCol);
  -    m_pMaintable->setReadOnly(true);
   }
   
   //
  @@ .

From ossp-cvs-owner@ossp.org  Tue Aug 24 23:47:31 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 801217631A; Tue, 24 Aug 2004 23:47:31 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-gui/ as_table.cpp
Message-Id: <20040824214731.801217631A@mail.ossp.org>
Date: Tue, 24 Aug 2004 23:47:31 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   24-Aug-2004 23:47:31
  Branch: HEAD                             Handle: 2004082422473000

  Modified files:
    ossp-pkg/as/as-gui      as_table.cpp

  Log:
    Repair selection bug when using the tab and shift tab keys with in place
    edition, and implement in place edition logic for use with the return and
    enter keys. Also override the QTable::endEdit method to properly deactivate
    in place edition when finished.

  Summary:
    Revision    Changes     Path
    1.27        +42 -6      ossp-pkg/as/as-gui/as_table.cpp
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_table.cpp
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 as_table.cpp
  --- ossp-pkg/as/as-gui/as_table.cpp	27 May 2004 21:48:41 -0000	1.26
  +++ ossp-pkg/as/as-gui/as_table.cpp	24 Aug 2004 21:47:30 -0000	1.27
  @@ -54,14 +54,16 @@
   
                   // Advance the column or both row and column possibly
                   int nColadvance = ((currentColumn() + nIter) % TITRAQ_IDXTAIL);
  -                if ((currentColumn() + nIter) >= TITRAQ_IDXTAIL)
  +                if ((currentColumn() + nIter) >= TITRAQ_IDXTAIL) {
  +                    this->clearSelection(true);
                       this->setCurrentCell(currentRow() + 1, nColadvance);
  +//                    this->repaint(false);   // Really necessary?
  +                }
                   else
                       this->setCurrentCell(currentRow(), nColadvance);
                   this->setReadOnly(false);
                   this->editCell(currentRow(), currentColumn());
                   this->setEdition(currentColumn());
  -                this->setReadOnly(true);
               }
               return true; // Handle the tab key event and cancel its progress
           }
  @@ -74,23 +76,47 @@
   
                   // Advance the column or both row and column possibly
                   int nColadvance = (currentColumn() - nIter + TITRAQ_IDXTAIL) % TITRAQ_IDXTAIL;
  -                if ((currentColumn() - nIter) < 0)
  +                if ((currentColumn() - nIter) < 0) {
  +                    this->clearSelection(true);
                       this->setCurrentCell(currentRow() - 1, nColadvance);
  +//                    this->repaint(false);   // Really necessary?
  +                }
                   else
                       this->setCurrentCell(currentRow(), nColadvance);
                   this->setReadOnly(false);
                   this->editCell(currentRow(), currentColumn());
                   this->setEdition(currentColumn());
  -                this->setReadOnly(true);
               }
               return true; // Handle the shift tab key event and cancel its progress
           }
  +        else if (((QKeyEvent *)pEvent)->key() == Qt::Key_Return && this->getEdition() >= 0) { // Return key
  +            this->endEdit(currEditRow(), currEditCol(), true, false);
  +            this->setEdition();                             // Reset edition
  +            return true;                                    // Cancel progress
  +        }
  +        else if (((QKeyEvent *)pEvent)->key() == Qt::Key_Enter && this->getEdition() >= 0) { // Enter key
  +            this->endEdit(currEditRow(), currEditCol(), true, false);
  +            this->setEdition();                             // Reset edition
  +            return true;                                    // Cancel progress
  +        }
  +        else if (((QKeyEvent *)pEvent)->key() == Qt::Key_Return) { // Return key without edition
  +            this->setReadOnly(false);                       // Allow edition
  +            this->editCell(currentRow(), currentColumn());  // Begin edition
  +            this->setEdition(currentColumn());              // Store edition state
  +            return true;                                    // Cancel further progress
  +        }
  +        else if (((QKeyEvent *)pEvent)->key() == Qt::Key_Enter) { // Enter key without edition
  +            this->setReadOnly(false);                       // Allow edition
  +            this->editCell(currentRow(), currentColumn());  // Begin edition
  +            this->setEdition(currentColumn());              // Store edition state
  +            return true;                                    // Cancel further progress
  +        }
  +        else if (((QKeyEvent *)pEvent)->key() == Qt::Key_Escape)    // Handle escape key
  +            this->setEdition();
           else if (((QKeyEvent *)pEvent)->key() == Qt::Key_Up && this->getEdition() >= 0) // Handle up key
               return true;                                            // Capture
           else if (((QKeyEvent *)pEvent)->key() == Qt::Key_Down && this->getEdition() >= 0) // Handle down key
               return true;                                            // Capture
  -        else if (((QKeyEvent *)pEvent)->key() == Qt::Key_Escape)    // Handle escape key
  -            this->setEdition();
   
           // Forward incompletely handled key events
           return QTable::eventFilter(pObject, pEvent);
  @@ -211,5 +237,15 @@
       this->setReadOnly(false);
       this->editCell(currentRow(), currentColumn());
       this->setEdition(currentColumn());
  +}
  +
  +// Overriden member to properly handle read only attribute after edition
  +void TiTable::endEdit(int nRow, int nCol, bool bAccept, bool bReplace)
  +{
  +    QTable::endEdit(nRow, nCol, bAccept, bReplace);
  +
  +    // Table read only attribute must be set to return to the normal
  +    // row highlight and selection behaviour of AS. The reason it was
  +    // reset in inplaceEdit() was to allow editing in the first place.
       this->setReadOnly(true);
   }
  @@ .

From ossp-cvs-owner@ossp.org  Tue Aug 24 23:48:30 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1366D7631A; Tue, 24 Aug 2004 23:48:30 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-gui/ as_table.h
Message-Id: <20040824214830.1366D7631A@mail.ossp.org>
Date: Tue, 24 Aug 2004 23:48:30 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   24-Aug-2004 23:48:29
  Branch: HEAD                             Handle: 2004082422482900

  Modified files:
    ossp-pkg/as/as-gui      as_table.h

  Log:
    Add new overriden QTable::endEdit() method to properly deactivate in place
    edition when finished.

  Summary:
    Revision    Changes     Path
    1.19        +4  -1      ossp-pkg/as/as-gui/as_table.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_table.h
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 as_table.h
  --- ossp-pkg/as/as-gui/as_table.h	27 May 2004 21:48:41 -0000	1.18
  +++ ossp-pkg/as/as-gui/as_table.h	24 Aug 2004 21:48:29 -0000	1.19
  @@ -77,7 +77,7 @@
       // Overridden accessors
       void setText(int, int, const QString &);
       void sortColumn(int nCol, bool bAscend = true, bool bWhole = true);
  -//    virtual QTableItem *item(int nRow, int nCol) const {QTable::item(nRow, nCol);};
  +//    virtual QTableItem *item(int nRow, int nCol) const {return QTable::item(nRow, nCol);};
   
       // Deny a cell special handling of the focus rectangle
       // by overriding class QTable's paintFocus method
  @@ -86,6 +86,9 @@
       // Override for special linewise shading according to sort key
       virtual void paintCell(QPainter *, int, int, const QRect &, bool, const QColorGroup &);
   
  +    // Override to properly handle read only attribute during edition
  +    virtual void endEdit(int, int, bool, bool);
  +
       // For special focus handling on return key in edit mode
       virtual void activateNextCell(void);
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Aug 24 23:48:59 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7D4DD76358; Tue, 24 Aug 2004 23:48:59 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-gui/ ChangeLog
Message-Id: <20040824214859.7D4DD76358@mail.ossp.org>
Date: Tue, 24 Aug 2004 23:48:59 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   24-Aug-2004 23:48:59
  Branch: HEAD                             Handle: 2004082422485900

  Modified files:
    ossp-pkg/as/as-gui      ChangeLog

  Log:
    Document work done to date.

  Summary:
    Revision    Changes     Path
    1.55        +14 -0      ossp-pkg/as/as-gui/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.54 -r1.55 ChangeLog
  --- ossp-pkg/as/as-gui/ChangeLog	12 Aug 2004 17:12:33 -0000	1.54
  +++ ossp-pkg/as/as-gui/ChangeLog	24 Aug 2004 21:48:59 -0000	1.55
  @@ -1,5 +1,19 @@
   Geschichte des OSSP titraq in Vorwaerts Cronordnung
   
  +040824 Corrected with-qt expression as already indicated by configure --help
  +       Avoid forgotten save data loss by connecting QTable's valueChanged signal
  +       Corrected in place edition logic to work with newer Qt library editCell()
  +       Corrected overlapping highlights on row edge tab and return keypresses
  +       Implemented return and enter keypress logic in class TiTable
  +
  +040820 Renamed validateData() to validateRow(), and reimplement validateData()
  +       Replaced account and event file open error strings into constants file
  +       Repaired flawed new and open file logic when the operation is cancelled
  +       Improved data checking to avoid opening wrong account and event files
  +
  +040813 Corrected with-mico expression as already indicated by configure --help
  +       Corrected with-esoap expression as already indicated by configure --help
  +
   040812 Work around a selection bug (bad row highlights) in Qt? since 3.2.?
          Upgraded build environment to GNU shtool 2.0.0 and GNU autoconf 2.59
          Changed URL for deployment and storage of release tarballs
  @@ .

From ossp-cvs-owner@ossp.org  Wed Aug 25 00:00:36 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EA77276321; Wed, 25 Aug 2004 00:00:35 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-gui/ README as_version.cpp
Message-Id: <20040824220035.EA77276321@mail.ossp.org>
Date: Wed, 25 Aug 2004 00:00:35 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   25-Aug-2004 00:00:34
  Branch: HEAD                             Handle: 2004082423003000

  Modified files:
    ossp-pkg/as/as-gui      README as_version.cpp

  Log:
    Bump version for release.

  Summary:
    Revision    Changes     Path
    1.49        +1  -1      ossp-pkg/as/as-gui/README
    1.45        +9  -9      ossp-pkg/as/as-gui/as_version.cpp
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/README
  ============================================================================
  $ cvs diff -u -r1.48 -r1.49 README
  --- ossp-pkg/as/as-gui/README	12 Aug 2004 16:46:44 -0000	1.48
  +++ ossp-pkg/as/as-gui/README	24 Aug 2004 22:00:30 -0000	1.49
  @@ -5,7 +5,7 @@
                  |_|                 |___/
   
     OSSP asgui -- Accounting system graphical user interface
  -  Version 0.7.6 (12-Aug-2004)
  +  Version 0.7.7 (24-Aug-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_version.cpp
  ============================================================================
  $ cvs diff -u -r1.44 -r1.45 as_version.cpp
  --- ossp-pkg/as/as-gui/as_version.cpp	12 Aug 2004 16:46:44 -0000	1.44
  +++ ossp-pkg/as/as-gui/as_version.cpp	24 Aug 2004 22:00:30 -0000	1.45
  @@ -8,7 +8,7 @@
   #ifndef _AS_VERSION_CPP_
   #define _AS_VERSION_CPP_
   
  -#define ASGUI_VERSION 0x007206
  +#define ASGUI_VERSION 0x007207
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _AS_VERSION_CPP_AS_HEADER_
   
   asgui_version_t asgui_version = {
  -    0x007206,
  -    "0.7.6",
  -    "0.7.6 (12-Aug-2004)",
  -    "This is OSSP as-gui, Version 0.7.6 (12-Aug-2004)",
  -    "OSSP as-gui 0.7.6 (12-Aug-2004)",
  -    "OSSP as-gui/0.7.6",
  -    "@(#)OSSP as-gui 0.7.6 (12-Aug-2004)",
  -    "$Id: as_version.cpp,v 1.44 2004/08/12 16:46:44 ms Exp $"
  +    0x007207,
  +    "0.7.7",
  +    "0.7.7 (24-Aug-2004)",
  +    "This is OSSP as-gui, Version 0.7.7 (24-Aug-2004)",
  +    "OSSP as-gui 0.7.7 (24-Aug-2004)",
  +    "OSSP as-gui/0.7.7",
  +    "@(#)OSSP as-gui 0.7.7 (24-Aug-2004)",
  +    "$Id: as_version.cpp,v 1.45 2004/08/24 22:00:30 ms Exp $"
   };
   
   #endif /* _AS_VERSION_CPP_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Thu Aug 26 21:12:49 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 48F757634F; Thu, 26 Aug 2004 21:12:49 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-gui/ ChangeLog as_dataop.cpp
Message-Id: <20040826191249.48F757634F@mail.ossp.org>
Date: Thu, 26 Aug 2004 21:12:49 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   26-Aug-2004 21:12:49
  Branch: HEAD                             Handle: 2004082620124800

  Modified files:
    ossp-pkg/as/as-gui      ChangeLog as_dataop.cpp

  Log:
    Draw a smoother loadData() display, eliminating unappealing flashes.

  Summary:
    Revision    Changes     Path
    1.56        +2  -0      ossp-pkg/as/as-gui/ChangeLog
    1.56        +1  -1      ossp-pkg/as/as-gui/as_dataop.cpp
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.55 -r1.56 ChangeLog
  --- ossp-pkg/as/as-gui/ChangeLog	24 Aug 2004 21:48:59 -0000	1.55
  +++ ossp-pkg/as/as-gui/ChangeLog	26 Aug 2004 19:12:48 -0000	1.56
  @@ -1,5 +1,7 @@
   Geschichte des OSSP titraq in Vorwaerts Cronordnung
   
  +040825 Implemented smoother loadData() display, eliminating unappealing flashes
  +
   040824 Corrected with-qt expression as already indicated by configure --help
          Avoid forgotten save data loss by connecting QTable's valueChanged signal
          Corrected in place edition logic to work with newer Qt library editCell()
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_dataop.cpp
  ============================================================================
  $ cvs diff -u -r1.55 -r1.56 as_dataop.cpp
  --- ossp-pkg/as/as-gui/as_dataop.cpp	20 Aug 2004 17:47:07 -0000	1.55
  +++ ossp-pkg/as/as-gui/as_dataop.cpp	26 Aug 2004 19:12:48 -0000	1.56
  @@ -348,9 +348,9 @@
       for (int nIter = m_pMaintable->numRows() - 1; nIter >= 0; nIter--)
           m_pMaintable->setText(nIter, TITRAQ_IDXLINE, QString::number(nIter).rightJustify(4, QChar('0')));
   
  -    m_pMaintable->setUpdatesEnabled(true);      // Update and repaint
       m_pMaintable->setNumRows(nIter);            // No excess rows
       m_pMaintable->setCurrentCell(nIter - 1, 0); // Move focus to last row
  +    m_pMaintable->setUpdatesEnabled(true);      // Update
       m_pMaintable->ensureCellVisible(nIter - 1, 0); // Scroll please
   
       if (!bValid)
  @@ .

From ossp-cvs-owner@ossp.org  Thu Aug 26 21:14:08 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 69FC47634F; Thu, 26 Aug 2004 21:14:08 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-gui/ as_panel.cpp
Message-Id: <20040826191408.69FC47634F@mail.ossp.org>
Date: Thu, 26 Aug 2004 21:14:08 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   26-Aug-2004 21:14:08
  Branch: HEAD                             Handle: 2004082620140700

  Modified files:
    ossp-pkg/as/as-gui      as_panel.cpp

  Log:
    CORBA is a framework so be more accurate when describing a service
    (such as our IIOP and SOAP protocol servers).

  Summary:
    Revision    Changes     Path
    1.19        +1  -1      ossp-pkg/as/as-gui/as_panel.cpp
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/as_panel.cpp
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 as_panel.cpp
  --- ossp-pkg/as/as-gui/as_panel.cpp	27 May 2004 21:48:41 -0000	1.18
  +++ ossp-pkg/as/as-gui/as_panel.cpp	26 Aug 2004 19:14:07 -0000	1.19
  @@ -399,7 +399,7 @@
   
       m_pCorbacheck->setText(trUtf8("Enable IIOP transmission", "Comment for Corbacheck"));
       QToolTip::add(m_pCorbacheck, trUtf8("Will enable transmission over IIOP", "Comment for toolTip Corbacheck"));
  -    QWhatsThis::add(m_pCorbacheck, trUtf8("Check this box to enable transmission to a CORBA host", "Comment whatsThis for Corbacheck"));
  +    QWhatsThis::add(m_pCorbacheck, trUtf8("Check this box to enable transmission to a IIOP host", "Comment whatsThis for Corbacheck"));
   
       m_pSoapcheck->setText(trUtf8("Enable SOAP transmission", "Comment for Soapcheck"));
       QToolTip::add(m_pSoapcheck, trUtf8("Will enable transmission over SOAP", "Comment for toolTip Soapcheck"));
  @@ .

From ossp-cvs-owner@ossp.org  Thu Aug 26 21:15:07 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F188476354; Thu, 26 Aug 2004 21:15:06 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-gui/ TODO
Message-Id: <20040826191506.F188476354@mail.ossp.org>
Date: Thu, 26 Aug 2004 21:15:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   26-Aug-2004 21:15:04
  Branch: HEAD                             Handle: 2004082620150000

  Modified files:
    ossp-pkg/as/as-gui      TODO

  Log:
    Document work done to solve display errors, improve in place edition, and
    remember a new bug and idea.

  Summary:
    Revision    Changes     Path
    1.104       +2  -5      ossp-pkg/as/as-gui/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-gui/TODO
  ============================================================================
  $ cvs diff -u -r1.103 -r1.104 TODO
  --- ossp-pkg/as/as-gui/TODO	24 Aug 2004 21:34:52 -0000	1.103
  +++ ossp-pkg/as/as-gui/TODO	26 Aug 2004 19:15:00 -0000	1.104
  @@ -65,11 +65,7 @@
   Memory leak in vector<QRadioButton> as_panel
   Opendoc, schau amount unten Knopf (ist dimmed)
   Reporting only works if event data is sorted by date
  -Press Return then Tab many times to see invalid selections
  -Does not enter edit mode for a cell when double click
  -Some versions (as.de.cw.net:/v/as-old/sw), double click to
  -  edit a cell, add two characters, click X to close without
  -  leaving the cell. It should ask to save doc, but doesn't.
  +After Ctrl-O and closing window, Ctrl Keys ignored
   
   Nice to have
   ------------
  @@ -105,6 +101,7 @@
       Acctlist Account::getData(void)
   Reimplement void QTable::swapRows, so that rows can be moved easily
   Update edit controls only after return from TiTable::createEditor()
  +Unconditioanlly show splash screen while loadData() runs
   
   Screwey user notes ;-)
   ----------------------
  @@ .

From ossp-cvs-owner@ossp.org  Fri Sep  3 19:16:31 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0ACB3767E4; Fri,  3 Sep 2004 19:16:30 +0200 (CEST)
From: "Michael Schloh" <ms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-doc/ accounts.txt
Message-Id: <20040903171630.0ACB3767E4@mail.ossp.org>
Date: Fri,  3 Sep 2004 19:16:30 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Michael Schloh
  Root:   /e/ossp/cvs                      Email:  ms@ossp.org
  Module: ossp-pkg                         Date:   03-Sep-2004 19:16:30
  Branch: HEAD                             Handle: 2004090318163000

  Modified files:
    ossp-pkg/as/as-doc      accounts.txt

  Log:
    add Merck Finck, especially after Christian + Michael with PHP and PNG
    packaging work

  Summary:
    Revision    Changes     Path
    1.50        +10 -1      ossp-pkg/as/as-doc/accounts.txt
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-doc/accounts.txt
  ============================================================================
  $ cvs diff -u -r1.49 -r1.50 accounts.txt
  --- ossp-pkg/as/as-doc/accounts.txt	17 Jun 2004 15:06:23 -0000	1.49
  +++ ossp-pkg/as/as-doc/accounts.txt	3 Sep 2004 17:16:30 -0000	1.50
  @@ -151,7 +151,7 @@
   R /de/is/hst/troubleshooting/isod         # [E] Hosting ISOD Tasks
   R /de/is/hst/troubleshooting/isow         # [E] Hosting ISOW Tasks
   
  -R /de/is/cus/erdinger                     # [E] STRATO, General
  +R /de/is/cus/erdinger                     # [E] Erdinger, General
   
   ##
   ##  C&W DE, IS, Database Team
  @@ -279,6 +279,15 @@
   R /de/is/cus/fraport/implementation       # [E] Fraport, Implementation
   R /de/is/cus/fraport/troubleshooting      # [E] Fraport, Troubleshooting
   
  +#   Customer Merck Finck
  +R /de/is/cus/merckfinck                   # [E] Merck Finck, General
  +R /de/is/cus/merckfinck/meeting           # [E] Merck Finck, Meeting
  +R /de/is/cus/merckfinck/offerings         # [E] Merck Finck, Offerings
  +R /de/is/cus/merckfinck/consulting        # [E] Merck Finck, Consulting
  +R /de/is/cus/merckfinck/evaluation        # [E] Merck Finck, Evaluation
  +R /de/is/cus/merckfinck/implementation    # [E] Merck Finck, Implementation
  +R /de/is/cus/merckfinck/troubleshooting   # [E] Merck Finck, Troubleshooting
  +
   #   Customer AL-KO
   R /de/is/cus/al-ko                        # [E] AL-KO, General
   R /de/is/cus/al-ko/meeting                # [E] AL-KO, Meeting
  @@ .

From ossp-cvs-owner@ossp.org  Sat Sep 11 17:19:01 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C3E09764AC; Sat, 11 Sep 2004 17:18:58 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/iselect/ .configure ChangeLog Makefile.in README ...
Message-Id: <20040911151858.C3E09764AC@mail.ossp.org>
Date: Sat, 11 Sep 2004 17:18:58 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Sep-2004 17:18:58
  Branch: HEAD                             Handle: 2004091116184808

  Modified files:
    ossp-pkg/iselect        .configure ChangeLog Makefile.in README VERSIONS
                            aclocal.m4 config_ac.h.in configure configure.in
                            iselect.1 iselect.pod iselect_browse.c
                            iselect_browse.h iselect_getopt.c iselect_getopt.h
                            iselect_global.h iselect_keys.c iselect_keys.h
                            iselect_main.c iselect_readme.c iselect_readme.txt
                            iselect_version.c
    ossp-pkg/iselect/etc    asc2c shtool
  Removed files:
    ossp-pkg/iselect        acconfig.h

  Log:
    modernize source tree

  Summary:
    Revision    Changes     Path
    1.2         +6  -7      ossp-pkg/iselect/.configure
    1.3         +9  -1      ossp-pkg/iselect/ChangeLog
    1.3         +34 -62     ossp-pkg/iselect/Makefile.in
    1.2         +16 -15     ossp-pkg/iselect/README
    1.2         +3  -0      ossp-pkg/iselect/VERSIONS
    1.2         +0  -16     ossp-pkg/iselect/acconfig.h
    1.2         +1  -35     ossp-pkg/iselect/aclocal.m4
    1.2         +52 -19     ossp-pkg/iselect/config_ac.h.in
    1.3         +4214 -1066 ossp-pkg/iselect/configure
    1.3         +12 -13     ossp-pkg/iselect/configure.in
    1.2         +1  -1      ossp-pkg/iselect/etc/asc2c
    1.2         +3687 -1151 ossp-pkg/iselect/etc/shtool
    1.3         +174 -272   ossp-pkg/iselect/iselect.1
    1.3         +1  -1      ossp-pkg/iselect/iselect.pod
    1.2         +338 -102   ossp-pkg/iselect/iselect_browse.c
    1.2         +21 -14     ossp-pkg/iselect/iselect_browse.h
    1.2         +18 -14     ossp-pkg/iselect/iselect_getopt.c
    1.2         +10 -11     ossp-pkg/iselect/iselect_getopt.h
    1.2         +10 -11     ossp-pkg/iselect/iselect_global.h
    1.3         +2  -2      ossp-pkg/iselect/iselect_keys.c
    1.2         +10 -11     ossp-pkg/iselect/iselect_keys.h
    1.2         +131 -61    ossp-pkg/iselect/iselect_main.c
    1.2         +16 -15     ossp-pkg/iselect/iselect_readme.c
    1.2         +16 -15     ossp-pkg/iselect/iselect_readme.txt
    1.4         +41 -26     ossp-pkg/iselect/iselect_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/.configure
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 .configure
  --- ossp-pkg/iselect/.configure	25 Jul 2000 11:45:12 -0000	1.1
  +++ ossp-pkg/iselect/.configure	11 Sep 2004 15:18:48 -0000	1.2
  @@ -1,8 +1,7 @@
   #!/bin/sh
  -CC=cc
  -export CC
  -exec ./configure \
  ---prefix=/sw/pkg/iselect \
  ---with-incdir=/sw/pkg/ncurses/include \
  ---with-libdir=/sw/pkg/ncurses/lib \
  -"$@"
  +CC=cc \
  +sh ./configure \
  +    --prefix=/tmp/iselect \
  +    --with-incdir=/usr/opkg/include \
  +    --with-libdir=/usr/opkg/lib \
  +    "$@"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ChangeLog
  --- ossp-pkg/iselect/ChangeLog	25 Jul 2000 11:44:00 -0000	1.2
  +++ ossp-pkg/iselect/ChangeLog	11 Sep 2004 15:18:48 -0000	1.3
  @@ -2,8 +2,16 @@
     C h a n g e L o g   o f   i S e l e c t
     ___________________________________________________________________________
   
  -  Changes between 1.2.0 and 1.2.1
  +  Changes between 1.2.0 and 1.3.0
     -------------------------------
  +  040911 o upgraded GNU shtool from 1.6.2 to 2.0.1
  +         o upgraded build environment to GNU autoconf 2.59
  +  200404 o upgraded GNU shtool from 1.6.0 to 1.6.2
  +         o fixed years in copyright
  +  2002xx o upgraded GNU shtool from 1.5.0 to 1.6.0
  +         o fixed years in copyright
  +  2000xx o upgraded GNU shtool from 1.3.0 to 1.5.0
  +         o fixed years in copyright
     990530 o fixed iselect.pod: %s[ -> %[
     990622 o fixed type conversion [Mark A. Hershberger <mah@everybody.org>]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 Makefile.in
  --- ossp-pkg/iselect/Makefile.in	25 Jul 2000 11:53:24 -0000	1.2
  +++ ossp-pkg/iselect/Makefile.in	11 Sep 2004 15:18:49 -0000	1.3
  @@ -16,10 +16,6 @@
   
   #   installation tools
   SHTOOL  = @SHTOOL@
  -NEWVERS = $(SHTOOL) version
  -INSTALL = $(SHTOOL) install
  -MKDIR   = $(SHTOOL) mkdir
  -FIXPERM = $(SHTOOL) fixperm
   
   #   installation paths
   prefix          = @prefix@
  @@ -39,12 +35,12 @@
   
   config: configure config_ac.h.in
   
  -configure: configure.in aclocal.m4 acconfig.h
  +configure: configure.in aclocal.m4
   	rm -f configure
   	autoconf configure.in >configure
   	chmod 770 configure
   
  -config_ac.h.in: configure.in acconfig.h
  +config_ac.h.in: configure.in
   	rm -f config_ac.h.in
   	autoheader configure.in >config_ac.h.in
   
  @@ -52,64 +48,40 @@
   #   THE RELEASE STUFF
   # ------------------------------------------------
   
  -_GETDISTINFO = \
  -    _version=`$(NEWVERS) -lc -dshort iselect_version.c`; \
  -    _date=`date '+%y%m%d_%H%M'`
  -
  -_BUILDDIST = \
  -    echo "Creating tarball..."; \
  -    tar cvf - * |\
  -    tardy --user_number=1000  --user_name=rse \
  -          --group_number=1000 --group_name=en \
  -          --prefix=$${_distname} - |\
  -    gzip >$${_tarball}; \
  -    echo "Done"; \
  -    ls -l $${_tarball}
  -
  -_NEWVERS = \
  -	$(NEWVERS) -lc -piSelect $$OPT iselect_version.c; \
  -	V=`$(NEWVERS) -lc -dlong iselect_version.c`;\
  -	sed -e "s/Version .*(.*)/Version $$V/g" <README >README.n && mv README.n README; \
  -	sed -e "s/Version .*(.*)/Version $$V/g" <iselect_readme.txt >iselect_readme.txt.n && mv iselect_readme.txt.n iselect_readme.txt;
  +_VERSION_FILE = \
  +	iselect_version.c
   
  -_UPDATEVERS = \
  -	V=`$(NEWVERS) -lc -dshort iselect_version.c`;\
  -	$(NEWVERS) -lc -piSelect -s $$V iselect_version.c; \
  -	V=`$(NEWVERS) -lc -dlong iselect_version.c`;\
  +_VERSION = \
  +	echo "updating package version"; \
  +	$(SHTOOL) version -lc -n 'iSelect' -p iselect_ $$OPT $(_VERSION_FILE); \
  +	V=`$(SHTOOL) version -lc -dlong $(_VERSION_FILE)`; \
   	sed -e "s/Version .*(.*)/Version $$V/g" <README >README.n && mv README.n README; \
  -	sed -e "s/Version .*(.*)/Version $$V/g" <iselect_readme.txt >iselect_readme.txt.n && mv iselect_readme.txt.n iselect_readme.txt;
  -
  -release: distclean fixperm
  -	@$(_GETDISTINFO) \
  -    _distname="iselect-$${_version}"; \
  -    _tarball="/tmp/$${_distname}.tar.gz"; \
  -    echo "Release Distribution: iSelect Version $$_version"; \
  -    $(_BUILDDIST); \
  -    mv /tmp/$${_distname}.tar.gz $${_distname}.tar.gz; \
  +	sed -e "s/Version .*(.*)/Version $$V/g" <iselect_readme.txt >iselect_readme.txt.n && mv iselect_readme.txt.n iselect_readme.txt
   
  +_TARBALL = \
  +	$(SHTOOL) tarball -o $${NAME}.tar.gz -d $${NAME} -u rse -g en \
  +	                  -e 'CVS,\.cvsignore,\.configure,\.\#.*,\.[ao]$$' -c 'gzip --best' .
  +
  +dist: distclean fixperm
  +	@V=`$(SHTOOL) version -l c -d short $(_VERSION_FILE)`; NAME="iselect-$$V"; \
  +	$(ECHO) "Rolling RELEASE tarball $$NAME.tar.gz"; $(_TARBALL)
   snap: distclean fixperm
  -	@$(_GETDISTINFO) \
  -    _distname="iselect-$${_version}-SNAP-$$_date"; \
  -    _tarball="/tmp/$${_distname}.tar.gz"; \
  -    echo "Snap of whole source tree: iSelect Version $$_version as of $$_date"; \
  -    $(_BUILDDIST); \
  -    mv /tmp/$${_distname}.tar.gz $${_distname}.tar.gz 
  +	@V=`$(SHTOOL) version -l c -d short $(_VERSION_FILE)`; NAME="iselect-$$V-SNAP"; \
  +	$(ECHO) "Rolling SNAPSHOT tarball $$NAME.tar.gz"; $(_TARBALL)
   
   new-version:
  -	OPT="-iv"; $(_NEWVERS)
  -new-revision:
  -	OPT="-ir"; $(_NEWVERS)
  -new-betalevel:
  -	OPT="-ib"; $(_NEWVERS)
  -new-patchlevel:
  -	OPT="-iP"; $(_NEWVERS)
  -new-release:
  -	OPT="-s$(R)"; $(_NEWVERS)
  +	@V="$(VERSION)"; \
  +	if [ ".$$V" != . ]; then \
  +		OPT="-s$$V"; \
  +	else \
  +		OPT="-e"; \
  +	fi; \
  +	$(_VERSION)
   update-version:
  -	$(_UPDATEVERS)
  +	@OPT="-s`$(SHTOOL) version -lc -dshort $(_VERSION_FILE)`" && $(_VERSION)
   
   fixperm:
  -	$(FIXPERM) *
  +	$(SHTOOL) fixperm *
   
   # ------------------------------------------------
   #   THE PROGRAM
  @@ -137,14 +109,14 @@
   	$(CC) $(CFLAGS) -o iselect_help.o -c iselect_help.c
   
   iselect_help.c: iselect_help.txt iselect_version.c
  -	V=`$(NEWVERS) -l c -d long iselect_version.c`; \
  +	V=`$(SHTOOL) version -l c -d long iselect_version.c`; \
   	./etc/asc2c iselect_help.txt iselect_help iSelect_Help "$$V"
   
   iselect_readme.o: iselect_readme.c
   	$(CC) $(CFLAGS) -o iselect_readme.o -c iselect_readme.c
   
   iselect_readme.c: iselect_readme.txt iselect_version.c
  -	V=`$(NEWVERS) -l c -d long iselect_version.c`; \
  +	V=`$(SHTOOL) version -l c -d long iselect_version.c`; \
   	./etc/asc2c iselect_readme.txt iselect_readme iSelect_README "$$V"
   
   # ------------------------------------------------
  @@ -152,7 +124,7 @@
   # ------------------------------------------------
   
   iselect.1: iselect.pod iselect_version.c
  -	V=`$(NEWVERS) -l c -d long iselect_version.c`; \
  +	V=`$(SHTOOL) version -l c -d long iselect_version.c`; \
   	sed -e "s|\@V\@|$$V|g" \
   		<iselect.pod >/tmp/iselect.pod; \
   	pod2man --section=1 \
  @@ -166,10 +138,10 @@
   # ------------------------------------------------
   
   install: all
  -	$(MKDIR) $(bindir)
  -	$(MKDIR) $(mandir)/man1
  -	$(INSTALL) -c -m 755 -s iselect $(bindir)/iselect
  -	$(INSTALL) -c -m 644 iselect.1 $(mandir)/man1/iselect.1
  +	$(SHTOOL) mkdir -f -p -m 755 $(bindir)
  +	$(SHTOOL) mkdir -f -p -m 755 $(mandir)/man1
  +	$(SHTOOL) install -c -m 755 -s iselect $(bindir)/iselect
  +	$(SHTOOL) install -c -m 644 iselect.1 $(mandir)/man1/iselect.1
   
   # ------------------------------------------------
   #   CLEANUP
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/README
  ============================================================================
  $ cvs diff -u -r1.1.1.4 -r1.2 README
  --- ossp-pkg/iselect/README	31 Mar 1999 06:50:35 -0000	1.1.1.4
  +++ ossp-pkg/iselect/README	11 Sep 2004 15:18:49 -0000	1.2
  @@ -12,12 +12,12 @@
     as its control script or in batch mode as a pipeline filter (usually
     between grep and the final executing command).   
   
  -  Version 1.2.0 (31-Mar-1999)
  +  Version 1.3.0 (11-Sep-2004)
   
     The latest release can be found on
     http://www.engelschall.com/sw/iselect/
   
  -  Copyright (c) 1996-1999 Ralf S. Engelschall.
  +  Copyright (c) 1997-2004 Ralf S. Engelschall <rse@engelschall.com>
   
     This program is free software; it may be redistributed and/or modified only
     under the terms of the GNU General Public License, which may be found in the
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/VERSIONS
  ============================================================================
  $ cvs diff -u -r1.1.1.3 -r1.2 VERSIONS
  --- ossp-pkg/iselect/VERSIONS	31 Mar 1999 06:46:56 -0000	1.1.1.3
  +++ ossp-pkg/iselect/VERSIONS	11 Sep 2004 15:18:49 -0000	1.2
  @@ -9,4 +9,5 @@
     1.0.4  19980103
     1.1.0  19980419
     1.2.0  19990331
  +  1.3.0  20040406
   
  @@ .
  rm -f ossp-pkg/iselect/acconfig.h <<'@@ .'
  Index: ossp-pkg/iselect/acconfig.h
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.1.1.2 -r1.2 aclocal.m4
  --- ossp-pkg/iselect/aclocal.m4	31 Mar 1999 06:23:11 -0000	1.1.1.2
  +++ ossp-pkg/iselect/aclocal.m4	11 Sep 2004 15:18:49 -0000	1.2
  @@ -172,40 +172,6 @@
   ])dnl
   dnl
   dnl
  -dnl
  -dnl ##########################################################
  -dnl ##
  -dnl ##  check for ANSI compiler
  -dnl ##
  -dnl ##  Copyright (C) 1992, 1994 Free Software Foundation, Inc.
  -dnl ##  Francois Pinard <pinard@iro.umontreal.ca>, 1992.
  -dnl ##  Check for function prototypes.  Including a few ideas from
  -dnl ##  Brook G. Milligan <brook@trillium.botany.utexas.edu>.
  -dnl ##
  -dnl ##  taken from shar-4.0's aclocal.m4
  -dnl ##
  -dnl ##########################################################
  -dnl
  -AC_DEFUN(AC_C_PROTOTYPES,
  -[AC_MSG_CHECKING([for function prototypes])
  -AC_CACHE_VAL(ac_cv_c_prototypes,
  -[AC_TRY_LINK([#ifndef __STDC__
  -Syntax Error
  -#endif], [extern int test (int i, double x);
  -struct s1 {int (*f) (int a);};
  -struct s2 {int (*f) (double a);};],
  -  ac_cv_c_prototypes=yes, ac_cv_c_prototypes=no)])dnl
  -AC_MSG_RESULT([$ac_cv_c_prototypes])
  -if test $ac_cv_c_prototypes = yes; then
  -  AC_DEFINE(HAVE_PROTOTYPES)
  -  ANSI_CC=yes
  -else
  -  ANSI_CC=no
  -fi
  -AC_SUBST(ANSI_CC)
  -])dnl
  -dnl
  -dnl
   dnl ##########################################################
   dnl ##
   dnl ##  check for supported system type
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/config_ac.h.in
  ============================================================================
  $ cvs diff -u -r1.1.1.2 -r1.2 config_ac.h.in
  --- ossp-pkg/iselect/config_ac.h.in	24 Nov 1997 09:14:28 -0000	1.1.1.2
  +++ ossp-pkg/iselect/config_ac.h.in	11 Sep 2004 15:18:49 -0000	1.2
  @@ -1,35 +1,64 @@
  -/* config_ac.h.in.  Generated automatically from configure.in by autoheader.  */
  -#ifndef CONFIG_AC_H
  -#define CONFIG_AC_H
  -/*
  -**  config_ac.h -- AUTO configuration header file
  -**  Copyright (c) Ralf S. Engelschall, <rse@engelschall.com>
  -*/
  +/* config_ac.h.in.  Generated from configure.in by autoheader.  */
   
  +/* Define to 1 if you have the <inttypes.h> header file. */
  +#undef HAVE_INTTYPES_H
   
  -/* Define to empty if the keyword does not work.  */
  -#undef const
  -
  -/* Define if you have the ANSI C header files.  */
  -#undef STDC_HEADERS
  +/* Define to 1 if you have the <memory.h> header file. */
  +#undef HAVE_MEMORY_H
   
  -#undef USE_NCURSES 
  -#undef USE_SLCURSES 
  -#undef USE_CURSES   
  -
  -/* Define if you have the <stddef.h> header file.  */
  +/* Define to 1 if you have the <stddef.h> header file. */
   #undef HAVE_STDDEF_H
   
  -/* Define if you have the <stdio.h> header file.  */
  +/* Define to 1 if you have the <stdint.h> header file. */
  +#undef HAVE_STDINT_H
  +
  +/* Define to 1 if you have the <stdio.h> header file. */
   #undef HAVE_STDIO_H
   
  -/* Define if you have the <stdlib.h> header file.  */
  +/* Define to 1 if you have the <stdlib.h> header file. */
   #undef HAVE_STDLIB_H
   
  -/* Define if you have the <string.h> header file.  */
  +/* Define to 1 if you have the <strings.h> header file. */
  +#undef HAVE_STRINGS_H
  +
  +/* Define to 1 if you have the <string.h> header file. */
   #undef HAVE_STRING_H
   
  -/* Define if you have the <strings.h> header file.  */
  -#undef HAVE_STRINGS_H
  +/* Define to 1 if you have the <sys/stat.h> header file. */
  +#undef HAVE_SYS_STAT_H
  +
  +/* Define to 1 if you have the <sys/types.h> header file. */
  +#undef HAVE_SYS_TYPES_H
  +
  +/* Define to 1 if you have the <unistd.h> header file. */
  +#undef HAVE_UNISTD_H
  +
  +/* Define to the address where bug reports for this package should be sent. */
  +#undef PACKAGE_BUGREPORT
   
  -#endif /* CONFIG_AC_H */
  +/* Define to the full name of this package. */
  +#undef PACKAGE_NAME
  +
  +/* Define to the full name and version of this package. */
  +#undef PACKAGE_STRING
  +
  +/* Define to the one symbol short name of this package. */
  +#undef PACKAGE_TARNAME
  +
  +/* Define to the version of this package. */
  +#undef PACKAGE_VERSION
  +
  +/* Define to 1 if you have the ANSI C header files. */
  +#undef STDC_HEADERS
  +
  +/* use plain Curses */
  +#undef USE_CURSES
  +
  +/* use NCurses */
  +#undef USE_NCURSES
  +
  +/* use SLcurses */
  +#undef USE_SLCURSES
  +
  +/* Define to empty if `const' does not conform to ANSI C. */
  +#undef const
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/configure
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 configure
  --- ossp-pkg/iselect/configure	25 Jul 2000 11:53:24 -0000	1.2
  +++ ossp-pkg/iselect/configure	11 Sep 2004 15:18:49 -0000	1.3
  @@ -1,43 +1,327 @@
   #! /bin/sh
  +# From configure.in 1.0.
  +# Guess values for system-dependent variables and create Makefiles.
  +# Generated by GNU Autoconf 2.59 (OpenPKG-CURRENT).
  +#
  +# Copyright (C) 2003 Free Software Foundation, Inc.
  +# This configure script is free software; the Free Software Foundation
  +# gives unlimited permission to copy, distribute and modify it.
  +## --------------------- ##
  +## M4sh Initialization.  ##
  +## --------------------- ##
  +
  +# Be Bourne compatible
  +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
  +  emulate sh
  +  NULLCMD=:
  +  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
  +  # is contrary to our usage.  Disable this feature.
  +  alias -g '${1+"$@"}'='"$@"'
  +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
  +  set -o posix
  +fi
  +DUALCASE=1; export DUALCASE # for MKS sh
  +
  +# Support unset when possible.
  +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
  +  as_unset=unset
  +else
  +  as_unset=false
  +fi
   
  -# From configure.in Revision: 1.12
  -SHTOOL="./etc/shtool"
  -T_MD=`$SHTOOL echo -e %B 2>/dev/null`
  -T_ME=`$SHTOOL echo -e %b 2>/dev/null`
  -echo "${T_MD}Configuring for iSelect `./etc/shtool version -lc -dlong iselect_version.c`${T_ME}"
  -echo "Copyright (c) 1996-1999 Ralf S. Engelschall, All Rights Reserved."
   
  +# Work around bugs in pre-3.0 UWIN ksh.
  +$as_unset ENV MAIL MAILPATH
  +PS1='$ '
  +PS2='> '
  +PS4='+ '
   
  +# NLS nuisances.
  +for as_var in \
  +  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
  +  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
  +  LC_TELEPHONE LC_TIME
  +do
  +  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
  +    eval $as_var=C; export $as_var
  +  else
  +    $as_unset $as_var
  +  fi
  +done
   
  +# Required to use basename.
  +if expr a : '\(a\)' >/dev/null 2>&1; then
  +  as_expr=expr
  +else
  +  as_expr=false
  +fi
  +
  +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
  +  as_basename=basename
  +else
  +  as_basename=false
  +fi
   
  -# Guess values for system-dependent variables and create Makefiles.
  -# Generated automatically using autoconf version 2.14 
  -# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
  -#
  -# This configure script is free software; the Free Software Foundation
  -# gives unlimited permission to copy, distribute and modify it.
   
  -# Defaults:
  -ac_help=
  +# Name of the executable.
  +as_me=`$as_basename "$0" ||
  +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
  +	 X"$0" : 'X\(//\)$' \| \
  +	 X"$0" : 'X\(/\)$' \| \
  +	 .     : '\(.\)' 2>/dev/null ||
  +echo X/"$0" |
  +    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
  +  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
  +  	  /^X\/\(\/\).*/{ s//\1/; q; }
  +  	  s/.*/./; q'`
  +
  +
  +# PATH needs CR, and LINENO needs CR and PATH.
  +# Avoid depending upon Character Ranges.
  +as_cr_letters='abcdefghijklmnopqrstuvwxyz'
  +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  +as_cr_Letters=$as_cr_letters$as_cr_LETTERS
  +as_cr_digits='0123456789'
  +as_cr_alnum=$as_cr_Letters$as_cr_digits
  +
  +# The user is always right.
  +if test "${PATH_SEPARATOR+set}" != set; then
  +  echo "#! /bin/sh" >conf$$.sh
  +  echo  "exit 0"   >>conf$$.sh
  +  chmod +x conf$$.sh
  +  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
  +    PATH_SEPARATOR=';'
  +  else
  +    PATH_SEPARATOR=:
  +  fi
  +  rm -f conf$$.sh
  +fi
  +
  +
  +  as_lineno_1=$LINENO
  +  as_lineno_2=$LINENO
  +  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
  +  test "x$as_lineno_1" != "x$as_lineno_2" &&
  +  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
  +  # Find who we are.  Look in the path if we contain no path at all
  +  # relative or not.
  +  case $0 in
  +    *[\\/]* ) as_myself=$0 ;;
  +    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  +for as_dir in $PATH
  +do
  +  IFS=$as_save_IFS
  +  test -z "$as_dir" && as_dir=.
  +  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
  +done
  +
  +       ;;
  +  esac
  +  # We did not find ourselves, most probably we were run as `sh COMMAND'
  +  # in which case we are not to be found in the path.
  +  if test "x$as_myself" = x; then
  +    as_myself=$0
  +  fi
  +  if test ! -f "$as_myself"; then
  +    { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
  +   { (exit 1); exit 1; }; }
  +  fi
  +  case $CONFIG_SHELL in
  +  '')
  +    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
  +do
  +  IFS=$as_save_IFS
  +  test -z "$as_dir" && as_dir=.
  +  for as_base in sh bash ksh sh5; do
  +	 case $as_dir in
  +	 /*)
  +	   if ("$as_dir/$as_base" -c '
  +  as_lineno_1=$LINENO
  +  as_lineno_2=$LINENO
  +  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
  +  test "x$as_lineno_1" != "x$as_lineno_2" &&
  +  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
  +	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
  +	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
  +	     CONFIG_SHELL=$as_dir/$as_base
  +	     export CONFIG_SHELL
  +	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
  +	   fi;;
  +	 esac
  +       done
  +done
  +;;
  +  esac
  +
  +  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
  +  # uniformly replaced by the line number.  The first 'sed' inserts a
  +  # line-number line before each line; the second 'sed' does the real
  +  # work.  The second script uses 'N' to pair each line-number line
  +  # with the numbered line, and appends trailing '-' during
  +  # substitution so that $LINENO is not a special case at line end.
  +  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
  +  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
  +  sed '=' <$as_myself |
  +    sed '
  +      N
  +      s,$,-,
  +      : loop
  +      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
  +      t loop
  +      s,-$,,
  +      s,^['$as_cr_digits']*\n,,
  +    ' >$as_me.lineno &&
  +  chmod +x $as_me.lineno ||
  +    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
  +   { (exit 1); exit 1; }; }
  +
  +  # Don't try to exec as it changes $[0], causing all sort of problems
  +  # (the dirname of $[0] is not the place where we might find the
  +  # original and so on.  Autoconf is especially sensible to this).
  +  . ./$as_me.lineno
  +  # Exit status is that of the last command.
  +  exit
  +}
  +
  +
  +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
  +  *c*,-n*) ECHO_N= ECHO_C='
  +' ECHO_T='	' ;;
  +  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
  +  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
  +esac
  +
  +if expr a : '\(a\)' >/dev/null 2>&1; then
  +  as_expr=expr
  +else
  +  as_expr=false
  +fi
  +
  +rm -f conf$$ conf$$.exe conf$$.file
  +echo >conf$$.file
  +if ln -s conf$$.file conf$$ 2>/dev/null; then
  +  # We could just check for DJGPP; but this test a) works b) is more generic
  +  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
  +  if test -f conf$$.exe; then
  +    # Don't use ln at all; we don't have any links
  +    as_ln_s='cp -p'
  +  else
  +    as_ln_s='ln -s'
  +  fi
  +elif ln conf$$.file conf$$ 2>/dev/null; then
  +  as_ln_s=ln
  +else
  +  as_ln_s='cp -p'
  +fi
  +rm -f conf$$ conf$$.exe conf$$.file
  +
  +if mkdir -p . 2>/dev/null; then
  +  as_mkdir_p=:
  +else
  +  test -d ./-p && rmdir ./-p
  +  as_mkdir_p=false
  +fi
  +
  +as_executable_p="test -f"
  +
  +# Sed expression to map a string onto a valid CPP name.
  +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
  +
  +# Sed expression to map a string onto a valid variable name.
  +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
  +
  +
  +# IFS
  +# We need space, tab and new line, in precisely that order.
  +as_nl='
  +'
  +IFS=" 	$as_nl"
  +
  +# CDPATH.
  +$as_unset CDPATH
  +
  +
  +# Name of the host.
  +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
  +# so uname gets run too.
  +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
  +
  +exec 6>&1
  +
  +#
  +# Initializations.
  +#
   ac_default_prefix=/usr/local
  -# Any additions from configure.in:
  +ac_config_libobj_dir=.
  +cross_compiling=no
  +subdirs=
  +MFLAGS=
  +MAKEFLAGS=
  +SHELL=${CONFIG_SHELL-/bin/sh}
  +
  +# Maximum number of lines to put in a shell here document.
  +# This variable seems obsolete.  It should probably be removed, and
  +# only ac_max_sed_lines should be used.
  +: ${ac_max_here_lines=38}
  +
  +# Identity of this package.
  +PACKAGE_NAME=
  +PACKAGE_TARNAME=
  +PACKAGE_VERSION=
  +PACKAGE_STRING=
  +PACKAGE_BUGREPORT=
  +
  +ac_unique_file="README"
   ac_default_prefix=/usr/local
  -ac_help="$ac_help
  -  --enable-debug          to enable the debugging options for compilation"
  -ac_help="$ac_help
  -  --with-incdir=DIR       add DIR to the include path"
  -ac_help="$ac_help
  -  --with-libdir=DIR       add DIR to the library path"
  +# Factoring default headers for most tests.
  +ac_includes_default="\
  +#include <stdio.h>
  +#if HAVE_SYS_TYPES_H
  +# include <sys/types.h>
  +#endif
  +#if HAVE_SYS_STAT_H
  +# include <sys/stat.h>
  +#endif
  +#if STDC_HEADERS
  +# include <stdlib.h>
  +# include <stddef.h>
  +#else
  +# if HAVE_STDLIB_H
  +#  include <stdlib.h>
  +# endif
  +#endif
  +#if HAVE_STRING_H
  +# if !STDC_HEADERS && HAVE_MEMORY_H
  +#  include <memory.h>
  +# endif
  +# include <string.h>
  +#endif
  +#if HAVE_STRINGS_H
  +# include <strings.h>
  +#endif
  +#if HAVE_INTTYPES_H
  +# include <inttypes.h>
  +#else
  +# if HAVE_STDINT_H
  +#  include <stdint.h>
  +# endif
  +#endif
  +#if HAVE_UNISTD_H
  +# include <unistd.h>
  +#endif"
  +
  +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP debug SET_MAKE SHTOOL EGREP LIBOBJS LTLIBOBJS'
  +ac_subst_files=''
   
   # Initialize some variables set by options.
  +ac_init_help=
  +ac_init_version=false
   # The variables have the same names as the options, with
   # dashes changed to underlines.
  -build=NONE
  -cache_file=./config.cache
  +cache_file=/dev/null
   exec_prefix=NONE
  -host=NONE
   no_create=
  -nonopt=NONE
   no_recursion=
   prefix=NONE
   program_prefix=NONE
  @@ -46,10 +330,15 @@
   silent=
   site=
   srcdir=
  -target=NONE
   verbose=
   x_includes=NONE
   x_libraries=NONE
  +
  +# Installation directory options.
  +# These are left unexpanded so users can "make install exec_prefix=/foo"
  +# and all the variables that are supposed to be based on exec_prefix
  +# by default will actually change.
  +# Use braces instead of parens because sh, perl, etc. also accept them.
   bindir='${exec_prefix}/bin'
   sbindir='${exec_prefix}/sbin'
   libexecdir='${exec_prefix}/libexec'
  @@ -63,17 +352,9 @@
   infodir='${prefix}/info'
   mandir='${prefix}/man'
   
  -# Initialize some other variables.
  -subdirs=
  -MFLAGS= MAKEFLAGS=
  -SHELL=${CONFIG_SHELL-/bin/sh}
  -# Maximum number of lines to put in a shell here document.
  -ac_max_here_lines=12
  -
   ac_prev=
   for ac_option
   do
  -
     # If the previous option needs an argument, assign it.
     if test -n "$ac_prev"; then
       eval "$ac_prev=\$ac_option"
  @@ -81,59 +362,59 @@
       continue
     fi
   
  -  case "$ac_option" in
  -  -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
  -  *) ac_optarg= ;;
  -  esac
  +  ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
   
     # Accept the important Cygnus configure options, so we can diagnose typos.
   
  -  case "$ac_option" in
  +  case $ac_option in
   
     -bindir | --bindir | --bindi | --bind | --bin | --bi)
       ac_prev=bindir ;;
     -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
  -    bindir="$ac_optarg" ;;
  +    bindir=$ac_optarg ;;
   
     -build | --build | --buil | --bui | --bu)
  -    ac_prev=build ;;
  +    ac_prev=build_alias ;;
     -build=* | --build=* | --buil=* | --bui=* | --bu=*)
  -    build="$ac_optarg" ;;
  +    build_alias=$ac_optarg ;;
   
     -cache-file | --cache-file | --cache-fil | --cache-fi \
     | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
       ac_prev=cache_file ;;
     -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
     | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
  -    cache_file="$ac_optarg" ;;
  +    cache_file=$ac_optarg ;;
  +
  +  --config-cache | -C)
  +    cache_file=config.cache ;;
   
     -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
       ac_prev=datadir ;;
     -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
     | --da=*)
  -    datadir="$ac_optarg" ;;
  +    datadir=$ac_optarg ;;
   
     -disable-* | --disable-*)
  -    ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
  +    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
       # Reject names that are not valid shell variable names.
  -    if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
  -      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
  -    fi
  -    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
  -    eval "enable_${ac_feature}=no" ;;
  +    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
  +      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
  +   { (exit 1); exit 1; }; }
  +    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
  +    eval "enable_$ac_feature=no" ;;
   
     -enable-* | --enable-*)
  -    ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
  +    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
       # Reject names that are not valid shell variable names.
  -    if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
  -      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
  -    fi
  -    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
  -    case "$ac_option" in
  -      *=*) ;;
  +    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
  +      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
  +   { (exit 1); exit 1; }; }
  +    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
  +    case $ac_option in
  +      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
         *) ac_optarg=yes ;;
       esac
  -    eval "enable_${ac_feature}='$ac_optarg'" ;;
  +    eval "enable_$ac_feature='$ac_optarg'" ;;
   
     -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
     | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
  @@ -142,95 +423,47 @@
     -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
     | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
     | --exec=* | --exe=* | --ex=*)
  -    exec_prefix="$ac_optarg" ;;
  +    exec_prefix=$ac_optarg ;;
   
     -gas | --gas | --ga | --g)
       # Obsolete; use --with-gas.
       with_gas=yes ;;
   
  -  -help | --help | --hel | --he)
  -    # Omit some internal or obsolete options to make the list less imposing.
  -    # This message is too long to be a string in the A/UX 3.1 sh.
  -    cat << EOF
  -Usage: configure [options] [host]
  -Options: [defaults in brackets after descriptions]
  -Configuration:
  -  --cache-file=FILE       cache test results in FILE
  -  --help                  print this message
  -  --no-create             do not create output files
  -  --quiet, --silent       do not print \`checking...' messages
  -  --version               print the version of autoconf that created configure
  -Directory and file names:
  -  --prefix=PREFIX         install architecture-independent files in PREFIX
  -                          [$ac_default_prefix]
  -  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
  -                          [same as prefix]
  -  --bindir=DIR            user executables in DIR [EPREFIX/bin]
  -  --sbindir=DIR           system admin executables in DIR [EPREFIX/sbin]
  -  --libexecdir=DIR        program executables in DIR [EPREFIX/libexec]
  -  --datadir=DIR           read-only architecture-independent data in DIR
  -                          [PREFIX/share]
  -  --sysconfdir=DIR        read-only single-machine data in DIR [PREFIX/etc]
  -  --sharedstatedir=DIR    modifiable architecture-independent data in DIR
  -                          [PREFIX/com]
  -  --localstatedir=DIR     modifiable single-machine data in DIR [PREFIX/var]
  -  --libdir=DIR            object code libraries in DIR [EPREFIX/lib]
  -  --includedir=DIR        C header files in DIR [PREFIX/include]
  -  --oldincludedir=DIR     C header files for non-gcc in DIR [/usr/include]
  -  --infodir=DIR           info documentation in DIR [PREFIX/info]
  -  --mandir=DIR            man documentation in DIR [PREFIX/man]
  -  --srcdir=DIR            find the sources in DIR [configure dir or ..]
  -  --program-prefix=PREFIX prepend PREFIX to installed program names
  -  --program-suffix=SUFFIX append SUFFIX to installed program names
  -  --program-transform-name=PROGRAM
  -                          run sed PROGRAM on installed program names
  -EOF
  -    cat << EOF
  -Host type:
  -  --build=BUILD           configure for building on BUILD [BUILD=HOST]
  -  --host=HOST             configure for HOST [guessed]
  -  --target=TARGET         configure for TARGET [TARGET=HOST]
  -Features and packages:
  -  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
  -  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
  -  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
  -  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
  -  --x-includes=DIR        X include files are in DIR
  -  --x-libraries=DIR       X library files are in DIR
  -EOF
  -    if test -n "$ac_help"; then
  -      echo "--enable and --with options recognized:$ac_help"
  -    fi
  -    exit 0 ;;
  +  -help | --help | --hel | --he | -h)
  +    ac_init_help=long ;;
  +  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
  +    ac_init_help=recursive ;;
  +  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
  +    ac_init_help=short ;;
   
     -host | --host | --hos | --ho)
  -    ac_prev=host ;;
  +    ac_prev=host_alias ;;
     -host=* | --host=* | --hos=* | --ho=*)
  -    host="$ac_optarg" ;;
  +    host_alias=$ac_optarg ;;
   
     -includedir | --includedir | --includedi | --included | --include \
     | --includ | --inclu | --incl | --inc)
       ac_prev=includedir ;;
     -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
     | --includ=* | --inclu=* | --incl=* | --inc=*)
  -    includedir="$ac_optarg" ;;
  +    includedir=$ac_optarg ;;
   
     -infodir | --infodir | --infodi | --infod | --info | --inf)
       ac_prev=infodir ;;
     -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
  -    infodir="$ac_optarg" ;;
  +    infodir=$ac_optarg ;;
   
     -libdir | --libdir | --libdi | --libd)
       ac_prev=libdir ;;
     -libdir=* | --libdir=* | --libdi=* | --libd=*)
  -    libdir="$ac_optarg" ;;
  +    libdir=$ac_optarg ;;
   
     -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
     | --libexe | --libex | --libe)
       ac_prev=libexecdir ;;
     -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
     | --libexe=* | --libex=* | --libe=*)
  -    libexecdir="$ac_optarg" ;;
  +    libexecdir=$ac_optarg ;;
   
     -localstatedir | --localstatedir | --localstatedi | --localstated \
     | --localstate | --localstat | --localsta | --localst \
  @@ -239,19 +472,19 @@
     -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
     | --localstate=* | --localstat=* | --localsta=* | --localst=* \
     | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
  -    localstatedir="$ac_optarg" ;;
  +    localstatedir=$ac_optarg ;;
   
     -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
       ac_prev=mandir ;;
     -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
  -    mandir="$ac_optarg" ;;
  +    mandir=$ac_optarg ;;
   
     -nfp | --nfp | --nf)
       # Obsolete; use --without-fp.
       with_fp=no ;;
   
     -no-create | --no-create | --no-creat | --no-crea | --no-cre \
  -  | --no-cr | --no-c)
  +  | --no-cr | --no-c | -n)
       no_create=yes ;;
   
     -no-recursion | --no-recursion | --no-recursio | --no-recursi \
  @@ -265,26 +498,26 @@
     -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
     | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
     | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
  -    oldincludedir="$ac_optarg" ;;
  +    oldincludedir=$ac_optarg ;;
   
     -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
       ac_prev=prefix ;;
     -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
  -    prefix="$ac_optarg" ;;
  +    prefix=$ac_optarg ;;
   
     -program-prefix | --program-prefix | --program-prefi | --program-pref \
     | --program-pre | --program-pr | --program-p)
       ac_prev=program_prefix ;;
     -program-prefix=* | --program-prefix=* | --program-prefi=* \
     | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
  -    program_prefix="$ac_optarg" ;;
  +    program_prefix=$ac_optarg ;;
   
     -program-suffix | --program-suffix | --program-suffi | --program-suff \
     | --program-suf | --program-su | --program-s)
       ac_prev=program_suffix ;;
     -program-suffix=* | --program-suffix=* | --program-suffi=* \
     | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
  -    program_suffix="$ac_optarg" ;;
  +    program_suffix=$ac_optarg ;;
   
     -program-transform-name | --program-transform-name \
     | --program-transform-nam | --program-transform-na \
  @@ -301,7 +534,7 @@
     | --program-transfo=* | --program-transf=* \
     | --program-trans=* | --program-tran=* \
     | --progr-tra=* | --program-tr=* | --program-t=*)
  -    program_transform_name="$ac_optarg" ;;
  +    program_transform_name=$ac_optarg ;;
   
     -q | -quiet | --quiet | --quie | --qui | --qu | --q \
     | -silent | --silent | --silen | --sile | --sil)
  @@ -311,7 +544,7 @@
       ac_prev=sbindir ;;
     -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
     | --sbi=* | --sb=*)
  -    sbindir="$ac_optarg" ;;
  +    sbindir=$ac_optarg ;;
   
     -sharedstatedir | --sharedstatedir | --sharedstatedi \
     | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
  @@ -322,58 +555,57 @@
     | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
     | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
     | --sha=* | --sh=*)
  -    sharedstatedir="$ac_optarg" ;;
  +    sharedstatedir=$ac_optarg ;;
   
     -site | --site | --sit)
       ac_prev=site ;;
     -site=* | --site=* | --sit=*)
  -    site="$ac_optarg" ;;
  +    site=$ac_optarg ;;
   
     -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
       ac_prev=srcdir ;;
     -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
  -    srcdir="$ac_optarg" ;;
  +    srcdir=$ac_optarg ;;
   
     -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
     | --syscon | --sysco | --sysc | --sys | --sy)
       ac_prev=sysconfdir ;;
     -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
     | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
  -    sysconfdir="$ac_optarg" ;;
  +    sysconfdir=$ac_optarg ;;
   
     -target | --target | --targe | --targ | --tar | --ta | --t)
  -    ac_prev=target ;;
  +    ac_prev=target_alias ;;
     -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
  -    target="$ac_optarg" ;;
  +    target_alias=$ac_optarg ;;
   
     -v | -verbose | --verbose | --verbos | --verbo | --verb)
       verbose=yes ;;
   
  -  -version | --version | --versio | --versi | --vers)
  -    echo "configure generated by autoconf version 2.14"
  -    exit 0 ;;
  +  -version | --version | --versio | --versi | --vers | -V)
  +    ac_init_version=: ;;
   
     -with-* | --with-*)
  -    ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
  +    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
       # Reject names that are not valid shell variable names.
  -    if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
  -      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
  -    fi
  +    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
  +      { echo "$as_me: error: invalid package name: $ac_package" >&2
  +   { (exit 1); exit 1; }; }
       ac_package=`echo $ac_package| sed 's/-/_/g'`
  -    case "$ac_option" in
  -      *=*) ;;
  +    case $ac_option in
  +      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
         *) ac_optarg=yes ;;
       esac
  -    eval "with_${ac_package}='$ac_optarg'" ;;
  +    eval "with_$ac_package='$ac_optarg'" ;;
   
     -without-* | --without-*)
  -    ac_package=`echo $ac_option|sed -e 's/-*without-//'`
  +    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
       # Reject names that are not valid shell variable names.
  -    if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
  -      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
  -    fi
  -    ac_package=`echo $ac_package| sed 's/-/_/g'`
  -    eval "with_${ac_package}=no" ;;
  +    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
  +      { echo "$as_me: error: invalid package name: $ac_package" >&2
  +   { (exit 1); exit 1; }; }
  +    ac_package=`echo $ac_package | sed 's/-/_/g'`
  +    eval "with_$ac_package=no" ;;
   
     --x)
       # Obsolete; use --with-x.
  @@ -384,99 +616,110 @@
       ac_prev=x_includes ;;
     -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
     | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
  -    x_includes="$ac_optarg" ;;
  +    x_includes=$ac_optarg ;;
   
     -x-libraries | --x-libraries | --x-librarie | --x-librari \
     | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
       ac_prev=x_libraries ;;
     -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
     | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
  -    x_libraries="$ac_optarg" ;;
  +    x_libraries=$ac_optarg ;;
   
  -  -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
  +  -*) { echo "$as_me: error: unrecognized option: $ac_option
  +Try \`$0 --help' for more information." >&2
  +   { (exit 1); exit 1; }; }
       ;;
   
  +  *=*)
  +    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
  +    # Reject names that are not valid shell variable names.
  +    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
  +      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
  +   { (exit 1); exit 1; }; }
  +    ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
  +    eval "$ac_envvar='$ac_optarg'"
  +    export $ac_envvar ;;
  +
     *)
  -    if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
  -      echo "configure: warning: $ac_option: invalid host type" 1>&2
  -    fi
  -    if test "x$nonopt" != xNONE; then
  -      { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
  -    fi
  -    nonopt="$ac_option"
  +    # FIXME: should be removed in autoconf 3.0.
  +    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
  +    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
  +      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
  +    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
       ;;
   
     esac
   done
   
   if test -n "$ac_prev"; then
  -  { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
  -fi
  -
  -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
  -
  -# File descriptor usage:
  -# 0 standard input
  -# 1 file creation
  -# 2 errors and warnings
  -# 3 some systems may open it to /dev/tty
  -# 4 used on the Kubota Titan
  -# 6 checking for... messages and results
  -# 5 compiler messages saved in config.log
  -if test "$silent" = yes; then
  -  exec 6>/dev/null
  -else
  -  exec 6>&1
  +  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
  +  { echo "$as_me: error: missing argument to $ac_option" >&2
  +   { (exit 1); exit 1; }; }
   fi
  -exec 5>./config.log
   
  -echo "\
  -This file contains any messages produced by compilers while
  -running configure, to aid debugging if configure makes a mistake.
  -" 1>&5
  +# Be sure to have absolute paths.
  +for ac_var in exec_prefix prefix
  +do
  +  eval ac_val=$`echo $ac_var`
  +  case $ac_val in
  +    [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
  +    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
  +   { (exit 1); exit 1; }; };;
  +  esac
  +done
   
  -# Strip out --no-create and --no-recursion so they do not pile up.
  -# Also quote any args containing shell metacharacters.
  -ac_configure_args=
  -for ac_arg
  +# Be sure to have absolute paths.
  +for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
  +	      localstatedir libdir includedir oldincludedir infodir mandir
   do
  -  case "$ac_arg" in
  -  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
  -  | --no-cr | --no-c) ;;
  -  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
  -  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
  -  *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
  -  ac_configure_args="$ac_configure_args '$ac_arg'" ;;
  -  *) ac_configure_args="$ac_configure_args $ac_arg" ;;
  +  eval ac_val=$`echo $ac_var`
  +  case $ac_val in
  +    [\\/$]* | ?:[\\/]* ) ;;
  +    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
  +   { (exit 1); exit 1; }; };;
     esac
   done
   
  -# NLS nuisances.
  -# Only set these to C if already set.  These must not be set unconditionally
  -# because not all systems understand e.g. LANG=C (notably SCO).
  -# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
  -# Non-C LC_CTYPE values break the ctype check.
  -if test "${LANG+set}"   = set; then LANG=C;   export LANG;   fi
  -if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
  -if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
  -if test "${LC_CTYPE+set}"    = set; then LC_CTYPE=C;    export LC_CTYPE;    fi
  +# There might be people who depend on the old broken behavior: `$host'
  +# used to hold the argument of --host etc.
  +# FIXME: To remove some day.
  +build=$build_alias
  +host=$host_alias
  +target=$target_alias
  +
  +# FIXME: To remove some day.
  +if test "x$host_alias" != x; then
  +  if test "x$build_alias" = x; then
  +    cross_compiling=maybe
  +    echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
  +    If a cross compiler is detected then cross compile mode will be used." >&2
  +  elif test "x$build_alias" != "x$host_alias"; then
  +    cross_compiling=yes
  +  fi
  +fi
   
  -# confdefs.h avoids OS command line length limits that DEFS can exceed.
  -rm -rf conftest* confdefs.h
  -# AIX cpp loses on an empty file, so make sure it contains at least a newline.
  -echo > confdefs.h
  +ac_tool_prefix=
  +test -n "$host_alias" && ac_tool_prefix=$host_alias-
  +
  +test "$silent" = yes && exec 6>/dev/null
   
  -# A filename unique to this package, relative to the directory that
  -# configure is in, which we can look for to find out if srcdir is correct.
  -ac_unique_file=README
   
   # Find the source files, if location was not specified.
   if test -z "$srcdir"; then
     ac_srcdir_defaulted=yes
     # Try the directory containing this script, then its parent.
  -  ac_prog=$0
  -  ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
  -  test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
  +  ac_confdir=`(dirname "$0") 2>/dev/null ||
  +$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
  +	 X"$0" : 'X\(//\)[^/]' \| \
  +	 X"$0" : 'X\(//\)$' \| \
  +	 X"$0" : 'X\(/\)' \| \
  +	 .     : '\(.\)' 2>/dev/null ||
  +echo X"$0" |
  +    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
  +  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
  +  	  /^X\(\/\/\)$/{ s//\1/; q; }
  +  	  /^X\(\/\).*/{ s//\1/; q; }
  +  	  s/.*/./; q'`
     srcdir=$ac_confdir
     if test ! -r $srcdir/$ac_unique_file; then
       srcdir=..
  @@ -486,13 +729,465 @@
   fi
   if test ! -r $srcdir/$ac_unique_file; then
     if test "$ac_srcdir_defaulted" = yes; then
  -    { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
  +    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
  +   { (exit 1); exit 1; }; }
     else
  -    { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
  +    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
  +   { (exit 1); exit 1; }; }
     fi
   fi
  -srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
  +(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
  +  { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
  +   { (exit 1); exit 1; }; }
  +srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
  +ac_env_build_alias_set=${build_alias+set}
  +ac_env_build_alias_value=$build_alias
  +ac_cv_env_build_alias_set=${build_alias+set}
  +ac_cv_env_build_alias_value=$build_alias
  +ac_env_host_alias_set=${host_alias+set}
  +ac_env_host_alias_value=$host_alias
  +ac_cv_env_host_alias_set=${host_alias+set}
  +ac_cv_env_host_alias_value=$host_alias
  +ac_env_target_alias_set=${target_alias+set}
  +ac_env_target_alias_value=$target_alias
  +ac_cv_env_target_alias_set=${target_alias+set}
  +ac_cv_env_target_alias_value=$target_alias
  +ac_env_CC_set=${CC+set}
  +ac_env_CC_value=$CC
  +ac_cv_env_CC_set=${CC+set}
  +ac_cv_env_CC_value=$CC
  +ac_env_CFLAGS_set=${CFLAGS+set}
  +ac_env_CFLAGS_value=$CFLAGS
  +ac_cv_env_CFLAGS_set=${CFLAGS+set}
  +ac_cv_env_CFLAGS_value=$CFLAGS
  +ac_env_LDFLAGS_set=${LDFLAGS+set}
  +ac_env_LDFLAGS_value=$LDFLAGS
  +ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
  +ac_cv_env_LDFLAGS_value=$LDFLAGS
  +ac_env_CPPFLAGS_set=${CPPFLAGS+set}
  +ac_env_CPPFLAGS_value=$CPPFLAGS
  +ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
  +ac_cv_env_CPPFLAGS_value=$CPPFLAGS
  +ac_env_CPP_set=${CPP+set}
  +ac_env_CPP_value=$CPP
  +ac_cv_env_CPP_set=${CPP+set}
  +ac_cv_env_CPP_value=$CPP
  +
  +#
  +# Report the --help message.
  +#
  +if test "$ac_init_help" = "long"; then
  +  # Omit some internal or obsolete options to make the list less imposing.
  +  # This message is too long to be a string in the A/UX 3.1 sh.
  +  cat <<_ACEOF
  +\`configure' configures this package to adapt to many kinds of systems.
  +
  +Usage: $0 [OPTION]... [VAR=VALUE]...
  +
  +To assign environment variables (e.g., CC, CFLAGS...), specify them as
  +VAR=VALUE.  See below for descriptions of some of the useful variables.
  +
  +Defaults for the options are specified in brackets.
  +
  +Configuration:
  +  -h, --help              display this help and exit
  +      --help=short        display options specific to this package
  +      --help=recursive    display the short help of all the included packages
  +  -V, --version           display version information and exit
  +  -q, --quiet, --silent   do not print \`checking...' messages
  +      --cache-file=FILE   cache test results in FILE [disabled]
  +  -C, --config-cache      alias for \`--cache-file=config.cache'
  +  -n, --no-create         do not create output files
  +      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
  +
  +_ACEOF
  +
  +  cat <<_ACEOF
  +Installation directories:
  +  --prefix=PREFIX         install architecture-independent files in PREFIX
  +			  [$ac_default_prefix]
  +  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
  +			  [PREFIX]
  +
  +By default, \`make install' will install all the files in
  +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
  +an installation prefix other than \`$ac_default_prefix' using \`--prefix',
  +for instance \`--prefix=\$HOME'.
  +
  +For better control, use the options below.
  +
  +Fine tuning of the installation directories:
  +  --bindir=DIR           user executables [EPREFIX/bin]
  +  --sbindir=DIR          system admin executables [EPREFIX/sbin]
  +  --libexecdir=DIR       program executables [EPREFIX/libexec]
  +  --datadir=DIR          read-only architecture-independent data [PREFIX/share]
  +  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
  +  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
  +  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
  +  --libdir=DIR           object code libraries [EPREFIX/lib]
  +  --includedir=DIR       C header files [PREFIX/include]
  +  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
  +  --infodir=DIR          info documentation [PREFIX/info]
  +  --mandir=DIR           man documentation [PREFIX/man]
  +_ACEOF
  +
  +  cat <<\_ACEOF
  +_ACEOF
  +fi
   
  +if test -n "$ac_init_help"; then
  +
  +  cat <<\_ACEOF
  +
  +Optional Features:
  +  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
  +  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
  +  --enable-debug          to enable the debugging options for compilation
  +
  +Optional Packages:
  +  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
  +  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
  +  --with-incdir=DIR       add DIR to the include path
  +  --with-libdir=DIR       add DIR to the library path
  +
  +Some influential environment variables:
  +  CC          C compiler command
  +  CFLAGS      C compiler flags
  +  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
  +              nonstandard directory <lib dir>
  +  CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
  +              headers in a nonstandard directory <include dir>
  +  CPP         C preprocessor
  +
  +Use these variables to override the choices made by `configure' or to help
  +it to find libraries and programs with nonstandard names/locations.
  +
  +_ACEOF
  +fi
  +
  +if test "$ac_init_help" = "recursive"; then
  +  # If there are subdirs, report their specific --help.
  +  ac_popdir=`pwd`
  +  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
  +    test -d $ac_dir || continue
  +    ac_builddir=.
  +
  +if test "$ac_dir" != .; then
  +  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
  +  # A "../" for each directory in $ac_dir_suffix.
  +  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
  +else
  +  ac_dir_suffix= ac_top_builddir=
  +fi
  +
  +case $srcdir in
  +  .)  # No --srcdir option.  We are building in place.
  +    ac_srcdir=.
  +    if test -z "$ac_top_builddir"; then
  +       ac_top_srcdir=.
  +    else
  +       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
  +    fi ;;
  +  [\\/]* | ?:[\\/]* )  # Absolute path.
  +    ac_srcdir=$srcdir$ac_dir_suffix;
  +    ac_top_srcdir=$srcdir ;;
  +  *) # Relative path.
  +    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
  +    ac_top_srcdir=$ac_top_builddir$srcdir ;;
  +esac
  +
  +# Do not use `cd foo && pwd` to compute absolute paths, because
  +# the directories may not exist.
  +case `pwd` in
  +.) ac_abs_builddir="$ac_dir";;
  +*)
  +  case "$ac_dir" in
  +  .) ac_abs_builddir=`pwd`;;
  +  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
  +  *) ac_abs_builddir=`pwd`/"$ac_dir";;
  +  esac;;
  +esac
  +case $ac_abs_builddir in
  +.) ac_abs_top_builddir=${ac_top_builddir}.;;
  +*)
  +  case ${ac_top_builddir}. in
  +  .) ac_abs_top_builddir=$ac_abs_builddir;;
  +  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
  +  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
  +  esac;;
  +esac
  +case $ac_abs_builddir in
  +.) ac_abs_srcdir=$ac_srcdir;;
  +*)
  +  case $ac_srcdir in
  +  .) ac_abs_srcdir=$ac_abs_builddir;;
  +  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
  +  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
  +  esac;;
  +esac
  +case $ac_abs_builddir in
  +.) ac_abs_top_srcdir=$ac_top_srcdir;;
  +*)
  +  case $ac_top_srcdir in
  +  .) ac_abs_top_srcdir=$ac_abs_builddir;;
  +  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
  +  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
  +  esac;;
  +esac
  +
  +    cd $ac_dir
  +    # Check for guested configure; otherwise get Cygnus style configure.
  +    if test -f $ac_srcdir/configure.gnu; then
  +      echo
  +      $SHELL $ac_srcdir/configure.gnu  --help=recursive
  +    elif test -f $ac_srcdir/configure; then
  +      echo
  +      $SHELL $ac_srcdir/configure  --help=recursive
  +    elif test -f $ac_srcdir/configure.ac ||
  +	   test -f $ac_srcdir/configure.in; then
  +      echo
  +      $ac_configure --help
  +    else
  +      echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
  +    fi
  +    cd $ac_popdir
  +  done
  +fi
  +
  +test -n "$ac_init_help" && exit 0
  +if $ac_init_version; then
  +  cat <<\_ACEOF
  +
  +Copyright (C) 2003 Free Software Foundation, Inc.
  +This configure script is free software; the Free Software Foundation
  +gives unlimited permission to copy, distribute and modify it.
  +_ACEOF
  +  exit 0
  +fi
  +exec 5>config.log
  +cat >&5 <<_ACEOF
  +This file contains any messages produced by compilers while
  +running configure, to aid debugging if configure makes a mistake.
  +
  +It was created by $as_me, which was
  +generated by GNU Autoconf 2.59 (OpenPKG-CURRENT).  Invocation command line was
  +
  +  $ $0 $@
  +
  +_ACEOF
  +{
  +cat <<_ASUNAME
  +## --------- ##
  +## Platform. ##
  +## --------- ##
  +
  +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
  +uname -m = `(uname -m) 2>/dev/null || echo unknown`
  +uname -r = `(uname -r) 2>/dev/null || echo unknown`
  +uname -s = `(uname -s) 2>/dev/null || echo unknown`
  +uname -v = `(uname -v) 2>/dev/null || echo unknown`
  +
  +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
  +/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
  +
  +/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
  +/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
  +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
  +hostinfo               = `(hostinfo) 2>/dev/null               || echo unknown`
  +/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
  +/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
  +/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
  +
  +_ASUNAME
  +
  +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  +for as_dir in $PATH
  +do
  +  IFS=$as_save_IFS
  +  test -z "$as_dir" && as_dir=.
  +  echo "PATH: $as_dir"
  +done
  +
  +} >&5
  +
  +cat >&5 <<_ACEOF
  +
  +
  +## ----------- ##
  +## Core tests. ##
  +## ----------- ##
  +
  +_ACEOF
  +
  +
  +# Keep a trace of the command line.
  +# Strip out --no-create and --no-recursion so they do not pile up.
  +# Strip out --silent because we don't want to record it for future runs.
  +# Also quote any args containing shell meta-characters.
  +# Make two passes to allow for proper duplicate-argument suppression.
  +ac_configure_args=
  +ac_configure_args0=
  +ac_configure_args1=
  +ac_sep=
  +ac_must_keep_next=false
  +for ac_pass in 1 2
  +do
  +  for ac_arg
  +  do
  +    case $ac_arg in
  +    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
  +    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
  +    | -silent | --silent | --silen | --sile | --sil)
  +      continue ;;
  +    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
  +      ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
  +    esac
  +    case $ac_pass in
  +    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
  +    2)
  +      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
  +      if test $ac_must_keep_next = true; then
  +	ac_must_keep_next=false # Got value, back to normal.
  +      else
  +	case $ac_arg in
  +	  *=* | --config-cache | -C | -disable-* | --disable-* \
  +	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
  +	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
  +	  | -with-* | --with-* | -without-* | --without-* | --x)
  +	    case "$ac_configure_args0 " in
  +	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
  +	    esac
  +	    ;;
  +	  -* ) ac_must_keep_next=true ;;
  +	esac
  +      fi
  +      ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
  +      # Get rid of the leading space.
  +      ac_sep=" "
  +      ;;
  +    esac
  +  done
  +done
  +$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
  +$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
  +
  +# When interrupted or exit'd, cleanup temporary files, and complete
  +# config.log.  We remove comments because anyway the quotes in there
  +# would cause problems or look ugly.
  +# WARNING: Be sure not to use single quotes in there, as some shells,
  +# such as our DU 5.0 friend, will then `close' the trap.
  +trap 'exit_status=$?
  +  # Save into config.log some information that might help in debugging.
  +  {
  +    echo
  +
  +    cat <<\_ASBOX
  +## ---------------- ##
  +## Cache variables. ##
  +## ---------------- ##
  +_ASBOX
  +    echo
  +    # The following way of writing the cache mishandles newlines in values,
  +{
  +  (set) 2>&1 |
  +    case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
  +    *ac_space=\ *)
  +      sed -n \
  +	"s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
  +	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
  +      ;;
  +    *)
  +      sed -n \
  +	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
  +      ;;
  +    esac;
  +}
  +    echo
  +
  +    cat <<\_ASBOX
  +## ----------------- ##
  +## Output variables. ##
  +## ----------------- ##
  +_ASBOX
  +    echo
  +    for ac_var in $ac_subst_vars
  +    do
  +      eval ac_val=$`echo $ac_var`
  +      echo "$ac_var='"'"'$ac_val'"'"'"
  +    done | sort
  +    echo
  +
  +    if test -n "$ac_subst_files"; then
  +      cat <<\_ASBOX
  +## ------------- ##
  +## Output files. ##
  +## ------------- ##
  +_ASBOX
  +      echo
  +      for ac_var in $ac_subst_files
  +      do
  +	eval ac_val=$`echo $ac_var`
  +	echo "$ac_var='"'"'$ac_val'"'"'"
  +      done | sort
  +      echo
  +    fi
  +
  +    if test -s confdefs.h; then
  +      cat <<\_ASBOX
  +## ----------- ##
  +## confdefs.h. ##
  +## ----------- ##
  +_ASBOX
  +      echo
  +      sed "/^$/d" confdefs.h | sort
  +      echo
  +    fi
  +    test "$ac_signal" != 0 &&
  +      echo "$as_me: caught signal $ac_signal"
  +    echo "$as_me: exit $exit_status"
  +  } >&5
  +  rm -f core *.core &&
  +  rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
  +    exit $exit_status
  +     ' 0
  +for ac_signal in 1 2 13 15; do
  +  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
  +done
  +ac_signal=0
  +
  +# confdefs.h avoids OS command line length limits that DEFS can exceed.
  +rm -rf conftest* confdefs.h
  +# AIX cpp loses on an empty file, so make sure it contains at least a newline.
  +echo >confdefs.h
  +
  +# Predefined preprocessor variables.
  +
  +cat >>confdefs.h <<_ACEOF
  +#define PACKAGE_NAME "$PACKAGE_NAME"
  +_ACEOF
  +
  +
  +cat >>confdefs.h <<_ACEOF
  +#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
  +_ACEOF
  +
  +
  +cat >>confdefs.h <<_ACEOF
  +#define PACKAGE_VERSION "$PACKAGE_VERSION"
  +_ACEOF
  +
  +
  +cat >>confdefs.h <<_ACEOF
  +#define PACKAGE_STRING "$PACKAGE_STRING"
  +_ACEOF
  +
  +
  +cat >>confdefs.h <<_ACEOF
  +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
  +_ACEOF
  +
  +
  +# Let the site file select an alternate cache file if it wants to.
   # Prefer explicitly selected file to automatically selected ones.
   if test -z "$CONFIG_SITE"; then
     if test "x$prefix" != xNONE; then
  @@ -503,255 +1198,773 @@
   fi
   for ac_site_file in $CONFIG_SITE; do
     if test -r "$ac_site_file"; then
  -    echo "loading site script $ac_site_file"
  +    { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
  +echo "$as_me: loading site script $ac_site_file" >&6;}
  +    sed 's/^/| /' "$ac_site_file" >&5
       . "$ac_site_file"
     fi
   done
   
   if test -r "$cache_file"; then
  -  echo "loading cache $cache_file"
  -  . $cache_file
  +  # Some versions of bash will fail to source /dev/null (special
  +  # files actually), so we avoid doing that.
  +  if test -f "$cache_file"; then
  +    { echo "$as_me:$LINENO: loading cache $cache_file" >&5
  +echo "$as_me: loading cache $cache_file" >&6;}
  +    case $cache_file in
  +      [\\/]* | ?:[\\/]* ) . $cache_file;;
  +      *)                      . ./$cache_file;;
  +    esac
  +  fi
   else
  -  echo "creating cache $cache_file"
  -  > $cache_file
  +  { echo "$as_me:$LINENO: creating cache $cache_file" >&5
  +echo "$as_me: creating cache $cache_file" >&6;}
  +  >$cache_file
  +fi
  +
  +# Check that the precious variables saved in the cache have kept the same
  +# value.
  +ac_cache_corrupted=false
  +for ac_var in `(set) 2>&1 |
  +	       sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
  +  eval ac_old_set=\$ac_cv_env_${ac_var}_set
  +  eval ac_new_set=\$ac_env_${ac_var}_set
  +  eval ac_old_val="\$ac_cv_env_${ac_var}_value"
  +  eval ac_new_val="\$ac_env_${ac_var}_value"
  +  case $ac_old_set,$ac_new_set in
  +    set,)
  +      { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
  +echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
  +      ac_cache_corrupted=: ;;
  +    ,set)
  +      { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
  +echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
  +      ac_cache_corrupted=: ;;
  +    ,);;
  +    *)
  +      if test "x$ac_old_val" != "x$ac_new_val"; then
  +	{ echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
  +echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
  +	{ echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
  +echo "$as_me:   former value:  $ac_old_val" >&2;}
  +	{ echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
  +echo "$as_me:   current value: $ac_new_val" >&2;}
  +	ac_cache_corrupted=:
  +      fi;;
  +  esac
  +  # Pass precious variables to config.status.
  +  if test "$ac_new_set" = set; then
  +    case $ac_new_val in
  +    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
  +      ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
  +    *) ac_arg=$ac_var=$ac_new_val ;;
  +    esac
  +    case " $ac_configure_args " in
  +      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
  +      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
  +    esac
  +  fi
  +done
  +if $ac_cache_corrupted; then
  +  { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
  +echo "$as_me: error: changes in the environment can compromise the build" >&2;}
  +  { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
  +echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
  +   { (exit 1); exit 1; }; }
   fi
   
   ac_ext=c
  -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
   ac_cpp='$CPP $CPPFLAGS'
  -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
  -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
  -cross_compiling=$ac_cv_prog_cc_cross
  +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  +ac_compiler_gnu=$ac_cv_c_compiler_gnu
   
  -ac_exeext=
  -ac_objext=o
  -if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
  -  # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
  -  if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
  -    ac_n= ac_c='
  -' ac_t='	'
  -  else
  -    ac_n=-n ac_c= ac_t=
  -  fi
  -else
  -  ac_n= ac_c='\c' ac_t=
  -fi
   
   
   
   
  -echo "$ac_t""" 1>&6
  -echo "$ac_t""${T_MD}CHECK: Build Environment${T_ME}" 1>&6
   
   
  -# Extract the first word of "gcc", so it can be a program name with args.
  -set dummy gcc; ac_word=$2
  -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
  -echo "configure:551: checking for $ac_word" >&5
  -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +
  +
  +
  +
  +
  +
  +
  +
  +
  +
  +
  +
  +SHTOOL="./etc/shtool"
  +T_MD=`$SHTOOL echo -e %B 2>/dev/null`
  +T_ME=`$SHTOOL echo -e %b 2>/dev/null`
  +echo "${T_MD}Configuring for iSelect `./etc/shtool version -lc -dlong iselect_version.c`${T_ME}"
  +echo "Copyright (c) 1997-2004 Ralf S. Engelschall <rse@engelschall.com>"
  +
  +          ac_config_headers="$ac_config_headers config_ac.h"
  +
  +
  +echo "$as_me:$LINENO: result: " >&5
  +echo "${ECHO_T}" >&6
  +echo "$as_me:$LINENO: result: ${T_MD}CHECK: Build Environment${T_ME}" >&5
  +echo "${ECHO_T}${T_MD}CHECK: Build Environment${T_ME}" >&6
  +
  +
  +ac_ext=c
  +ac_cpp='$CPP $CPPFLAGS'
  +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  +ac_compiler_gnu=$ac_cv_c_compiler_gnu
  +if test -n "$ac_tool_prefix"; then
  +  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
  +set dummy ${ac_tool_prefix}gcc; ac_word=$2
  +echo "$as_me:$LINENO: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_CC+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
     if test -n "$CC"; then
     ac_cv_prog_CC="$CC" # Let the user override the test.
   else
  -  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
  -  ac_dummy="$PATH"
  -  for ac_dir in $ac_dummy; do
  -    test -z "$ac_dir" && ac_dir=.
  -    if test -f $ac_dir/$ac_word; then
  -      ac_cv_prog_CC="gcc"
  -      break
  -    fi
  -  done
  -  IFS="$ac_save_ifs"
  +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  +for as_dir in $PATH
  +do
  +  IFS=$as_save_IFS
  +  test -z "$as_dir" && as_dir=.
  +  for ac_exec_ext in '' $ac_executable_extensions; do
  +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
  +    ac_cv_prog_CC="${ac_tool_prefix}gcc"
  +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
  +    break 2
  +  fi
  +done
  +done
  +
   fi
   fi
  -CC="$ac_cv_prog_CC"
  +CC=$ac_cv_prog_CC
   if test -n "$CC"; then
  -  echo "$ac_t""$CC" 1>&6
  +  echo "$as_me:$LINENO: result: $CC" >&5
  +echo "${ECHO_T}$CC" >&6
  +else
  +  echo "$as_me:$LINENO: result: no" >&5
  +echo "${ECHO_T}no" >&6
  +fi
  +
  +fi
  +if test -z "$ac_cv_prog_CC"; then
  +  ac_ct_CC=$CC
  +  # Extract the first word of "gcc", so it can be a program name with args.
  +set dummy gcc; ac_word=$2
  +echo "$as_me:$LINENO: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test -n "$ac_ct_CC"; then
  +  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
  +else
  +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  +for as_dir in $PATH
  +do
  +  IFS=$as_save_IFS
  +  test -z "$as_dir" && as_dir=.
  +  for ac_exec_ext in '' $ac_executable_extensions; do
  +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
  +    ac_cv_prog_ac_ct_CC="gcc"
  +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
  +    break 2
  +  fi
  +done
  +done
  +
  +fi
  +fi
  +ac_ct_CC=$ac_cv_prog_ac_ct_CC
  +if test -n "$ac_ct_CC"; then
  +  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
  +echo "${ECHO_T}$ac_ct_CC" >&6
  +else
  +  echo "$as_me:$LINENO: result: no" >&5
  +echo "${ECHO_T}no" >&6
  +fi
  +
  +  CC=$ac_ct_CC
   else
  -  echo "$ac_t""no" 1>&6
  +  CC="$ac_cv_prog_CC"
   fi
   
   if test -z "$CC"; then
  -  # Extract the first word of "cc", so it can be a program name with args.
  -set dummy cc; ac_word=$2
  -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
  -echo "configure:581: checking for $ac_word" >&5
  -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +  if test -n "$ac_tool_prefix"; then
  +  # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
  +set dummy ${ac_tool_prefix}cc; ac_word=$2
  +echo "$as_me:$LINENO: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_CC+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
     if test -n "$CC"; then
     ac_cv_prog_CC="$CC" # Let the user override the test.
   else
  -  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
  -  ac_prog_rejected=no
  -  ac_dummy="$PATH"
  -  for ac_dir in $ac_dummy; do
  -    test -z "$ac_dir" && ac_dir=.
  -    if test -f $ac_dir/$ac_word; then
  -      if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
  -        ac_prog_rejected=yes
  -	continue
  -      fi
  -      ac_cv_prog_CC="cc"
  -      break
  -    fi
  -  done
  -  IFS="$ac_save_ifs"
  +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  +for as_dir in $PATH
  +do
  +  IFS=$as_save_IFS
  +  test -z "$as_dir" && as_dir=.
  +  for ac_exec_ext in '' $ac_executable_extensions; do
  +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
  +    ac_cv_prog_CC="${ac_tool_prefix}cc"
  +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
  +    break 2
  +  fi
  +done
  +done
  +
  +fi
  +fi
  +CC=$ac_cv_prog_CC
  +if test -n "$CC"; then
  +  echo "$as_me:$LINENO: result: $CC" >&5
  +echo "${ECHO_T}$CC" >&6
  +else
  +  echo "$as_me:$LINENO: result: no" >&5
  +echo "${ECHO_T}no" >&6
  +fi
  +
  +fi
  +if test -z "$ac_cv_prog_CC"; then
  +  ac_ct_CC=$CC
  +  # Extract the first word of "cc", so it can be a program name with args.
  +set dummy cc; ac_word=$2
  +echo "$as_me:$LINENO: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test -n "$ac_ct_CC"; then
  +  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
  +else
  +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  +for as_dir in $PATH
  +do
  +  IFS=$as_save_IFS
  +  test -z "$as_dir" && as_dir=.
  +  for ac_exec_ext in '' $ac_executable_extensions; do
  +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
  +    ac_cv_prog_ac_ct_CC="cc"
  +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
  +    break 2
  +  fi
  +done
  +done
  +
  +fi
  +fi
  +ac_ct_CC=$ac_cv_prog_ac_ct_CC
  +if test -n "$ac_ct_CC"; then
  +  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
  +echo "${ECHO_T}$ac_ct_CC" >&6
  +else
  +  echo "$as_me:$LINENO: result: no" >&5
  +echo "${ECHO_T}no" >&6
  +fi
  +
  +  CC=$ac_ct_CC
  +else
  +  CC="$ac_cv_prog_CC"
  +fi
  +
  +fi
  +if test -z "$CC"; then
  +  # Extract the first word of "cc", so it can be a program name with args.
  +set dummy cc; ac_word=$2
  +echo "$as_me:$LINENO: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_CC+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test -n "$CC"; then
  +  ac_cv_prog_CC="$CC" # Let the user override the test.
  +else
  +  ac_prog_rejected=no
  +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  +for as_dir in $PATH
  +do
  +  IFS=$as_save_IFS
  +  test -z "$as_dir" && as_dir=.
  +  for ac_exec_ext in '' $ac_executable_extensions; do
  +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
  +    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
  +       ac_prog_rejected=yes
  +       continue
  +     fi
  +    ac_cv_prog_CC="cc"
  +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
  +    break 2
  +  fi
  +done
  +done
  +
   if test $ac_prog_rejected = yes; then
     # We found a bogon in the path, so make sure we never use it.
     set dummy $ac_cv_prog_CC
     shift
  -  if test $# -gt 0; then
  +  if test $# != 0; then
       # We chose a different compiler from the bogus one.
       # However, it has the same basename, so the bogon will be chosen
       # first if we set CC to just the basename; use the full file name.
       shift
  -    set dummy "$ac_dir/$ac_word" "$@"
  -    shift
  -    ac_cv_prog_CC="$@"
  +    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
     fi
   fi
   fi
   fi
  -CC="$ac_cv_prog_CC"
  +CC=$ac_cv_prog_CC
   if test -n "$CC"; then
  -  echo "$ac_t""$CC" 1>&6
  +  echo "$as_me:$LINENO: result: $CC" >&5
  +echo "${ECHO_T}$CC" >&6
   else
  -  echo "$ac_t""no" 1>&6
  +  echo "$as_me:$LINENO: result: no" >&5
  +echo "${ECHO_T}no" >&6
   fi
   
  -  if test -z "$CC"; then
  -    case "`uname -s`" in
  -    *win32* | *WIN32*)
  -      # Extract the first word of "cl", so it can be a program name with args.
  -set dummy cl; ac_word=$2
  -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
  -echo "configure:632: checking for $ac_word" >&5
  -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +fi
  +if test -z "$CC"; then
  +  if test -n "$ac_tool_prefix"; then
  +  for ac_prog in cl
  +  do
  +    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
  +set dummy $ac_tool_prefix$ac_prog; ac_word=$2
  +echo "$as_me:$LINENO: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_CC+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
     if test -n "$CC"; then
     ac_cv_prog_CC="$CC" # Let the user override the test.
   else
  -  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
  -  ac_dummy="$PATH"
  -  for ac_dir in $ac_dummy; do
  -    test -z "$ac_dir" && ac_dir=.
  -    if test -f $ac_dir/$ac_word; then
  -      ac_cv_prog_CC="cl"
  -      break
  -    fi
  -  done
  -  IFS="$ac_save_ifs"
  +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  +for as_dir in $PATH
  +do
  +  IFS=$as_save_IFS
  +  test -z "$as_dir" && as_dir=.
  +  for ac_exec_ext in '' $ac_executable_extensions; do
  +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
  +    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
  +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
  +    break 2
  +  fi
  +done
  +done
  +
   fi
   fi
  -CC="$ac_cv_prog_CC"
  +CC=$ac_cv_prog_CC
   if test -n "$CC"; then
  -  echo "$ac_t""$CC" 1>&6
  +  echo "$as_me:$LINENO: result: $CC" >&5
  +echo "${ECHO_T}$CC" >&6
   else
  -  echo "$ac_t""no" 1>&6
  +  echo "$as_me:$LINENO: result: no" >&5
  +echo "${ECHO_T}no" >&6
   fi
  - ;;
  -    esac
  +
  +    test -n "$CC" && break
  +  done
  +fi
  +if test -z "$CC"; then
  +  ac_ct_CC=$CC
  +  for ac_prog in cl
  +do
  +  # Extract the first word of "$ac_prog", so it can be a program name with args.
  +set dummy $ac_prog; ac_word=$2
  +echo "$as_me:$LINENO: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if test -n "$ac_ct_CC"; then
  +  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
  +else
  +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  +for as_dir in $PATH
  +do
  +  IFS=$as_save_IFS
  +  test -z "$as_dir" && as_dir=.
  +  for ac_exec_ext in '' $ac_executable_extensions; do
  +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
  +    ac_cv_prog_ac_ct_CC="$ac_prog"
  +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
  +    break 2
     fi
  -  test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
  +done
  +done
  +
  +fi
  +fi
  +ac_ct_CC=$ac_cv_prog_ac_ct_CC
  +if test -n "$ac_ct_CC"; then
  +  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
  +echo "${ECHO_T}$ac_ct_CC" >&6
  +else
  +  echo "$as_me:$LINENO: result: no" >&5
  +echo "${ECHO_T}no" >&6
   fi
   
  -echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
  -echo "configure:664: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
  +  test -n "$ac_ct_CC" && break
  +done
  +
  +  CC=$ac_ct_CC
  +fi
  +
  +fi
   
  -ac_ext=c
  -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
  -ac_cpp='$CPP $CPPFLAGS'
  -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
  -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
  -cross_compiling=$ac_cv_prog_cc_cross
   
  -cat > conftest.$ac_ext << EOF
  +test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
  +See \`config.log' for more details." >&5
  +echo "$as_me: error: no acceptable C compiler found in \$PATH
  +See \`config.log' for more details." >&2;}
  +   { (exit 1); exit 1; }; }
  +
  +# Provide some information about the compiler.
  +echo "$as_me:$LINENO:" \
  +     "checking for C compiler version" >&5
  +ac_compiler=`set X $ac_compile; echo $2`
  +{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
  +  (eval $ac_compiler --version </dev/null >&5) 2>&5
  +  ac_status=$?
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); }
  +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
  +  (eval $ac_compiler -v </dev/null >&5) 2>&5
  +  ac_status=$?
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); }
  +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
  +  (eval $ac_compiler -V </dev/null >&5) 2>&5
  +  ac_status=$?
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); }
  +
  +cat >conftest.$ac_ext <<_ACEOF
  +/* confdefs.h.  */
  +_ACEOF
  +cat confdefs.h >>conftest.$ac_ext
  +cat >>conftest.$ac_ext <<_ACEOF
  +/* end confdefs.h.  */
  +
  +int
  +main ()
  +{
   
  -#line 675 "configure"
  -#include "confdefs.h"
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +ac_clean_files_save=$ac_clean_files
  +ac_clean_files="$ac_clean_files a.out a.exe b.out"
  +# Try to create an executable without -o first, disregard a.out.
  +# It will help us diagnose broken compilers, and finding out an intuition
  +# of exeext.
  +echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
  +echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6
  +ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
  +if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
  +  (eval $ac_link_default) 2>&5
  +  ac_status=$?
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); }; then
  +  # Find the output, starting from the most likely.  This scheme is
  +# not robust to junk in `.', hence go to wildcards (a.*) only as a last
  +# resort.
  +
  +# Be careful to initialize this variable, since it used to be cached.
  +# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
  +ac_cv_exeext=
  +# b.out is created by i960 compilers.
  +for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
  +do
  +  test -f "$ac_file" || continue
  +  case $ac_file in
  +    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
  +	;;
  +    conftest.$ac_ext )
  +	# This is the source file.
  +	;;
  +    [ab].out )
  +	# We found the default executable, but exeext='' is most
  +	# certainly right.
  +	break;;
  +    *.* )
  +	ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
  +	# FIXME: I believe we export ac_cv_exeext for Libtool,
  +	# but it would be cool to find out if it's true.  Does anybody
  +	# maintain Libtool? --akim.
  +	export ac_cv_exeext
  +	break;;
  +    * )
  +	break;;
  +  esac
  +done
  +else
  +  echo "$as_me: failed program was:" >&5
  +sed 's/^/| /' conftest.$ac_ext >&5
   
  -main(){return(0);}
  -EOF
  -if { (eval echo configure:680: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  -  ac_cv_prog_cc_works=yes
  -  # If we can't run a trivial program, we are probably using a cross compiler.
  -  if (./conftest; exit) 2>/dev/null; then
  -    ac_cv_prog_cc_cross=no
  +{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
  +See \`config.log' for more details." >&5
  +echo "$as_me: error: C compiler cannot create executables
  +See \`config.log' for more details." >&2;}
  +   { (exit 77); exit 77; }; }
  +fi
  +
  +ac_exeext=$ac_cv_exeext
  +echo "$as_me:$LINENO: result: $ac_file" >&5
  +echo "${ECHO_T}$ac_file" >&6
  +
  +# Check the compiler produces executables we can run.  If not, either
  +# the compiler is broken, or we cross compile.
  +echo "$as_me:$LINENO: checking whether the C compiler works" >&5
  +echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
  +# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
  +# If not cross compiling, check that we can run a simple program.
  +if test "$cross_compiling" != yes; then
  +  if { ac_try='./$ac_file'
  +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +    cross_compiling=no
     else
  -    ac_cv_prog_cc_cross=yes
  +    if test "$cross_compiling" = maybe; then
  +	cross_compiling=yes
  +    else
  +	{ { echo "$as_me:$LINENO: error: cannot run C compiled programs.
  +If you meant to cross compile, use \`--host'.
  +See \`config.log' for more details." >&5
  +echo "$as_me: error: cannot run C compiled programs.
  +If you meant to cross compile, use \`--host'.
  +See \`config.log' for more details." >&2;}
  +   { (exit 1); exit 1; }; }
  +    fi
     fi
  -else
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  ac_cv_prog_cc_works=no
  -fi
  -rm -fr conftest*
  -ac_ext=c
  -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
  -ac_cpp='$CPP $CPPFLAGS'
  -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
  -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
  -cross_compiling=$ac_cv_prog_cc_cross
  -
  -echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
  -if test $ac_cv_prog_cc_works = no; then
  -  { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
  -fi
  -echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
  -echo "configure:706: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
  -echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
  -cross_compiling=$ac_cv_prog_cc_cross
  -
  -echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
  -echo "configure:711: checking whether we are using GNU C" >&5
  -if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  -else
  -  cat > conftest.c <<EOF
  -#ifdef __GNUC__
  -  yes;
  -#endif
  -EOF
  -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:720: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
  -  ac_cv_prog_gcc=yes
  -else
  -  ac_cv_prog_gcc=no
   fi
  -fi
  -
  -echo "$ac_t""$ac_cv_prog_gcc" 1>&6
  +echo "$as_me:$LINENO: result: yes" >&5
  +echo "${ECHO_T}yes" >&6
   
  -if test $ac_cv_prog_gcc = yes; then
  -  GCC=yes
  +rm -f a.out a.exe conftest$ac_cv_exeext b.out
  +ac_clean_files=$ac_clean_files_save
  +# Check the compiler produces executables we can run.  If not, either
  +# the compiler is broken, or we cross compile.
  +echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
  +echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
  +echo "$as_me:$LINENO: result: $cross_compiling" >&5
  +echo "${ECHO_T}$cross_compiling" >&6
  +
  +echo "$as_me:$LINENO: checking for suffix of executables" >&5
  +echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
  +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); }; then
  +  # If both `conftest.exe' and `conftest' are `present' (well, observable)
  +# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
  +# work properly (i.e., refer to `conftest.exe'), while it won't with
  +# `rm'.
  +for ac_file in conftest.exe conftest conftest.*; do
  +  test -f "$ac_file" || continue
  +  case $ac_file in
  +    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
  +    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
  +	  export ac_cv_exeext
  +	  break;;
  +    * ) break;;
  +  esac
  +done
   else
  -  GCC=
  -fi
  +  { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
  +See \`config.log' for more details." >&5
  +echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
  +See \`config.log' for more details." >&2;}
  +   { (exit 1); exit 1; }; }
  +fi
  +
  +rm -f conftest$ac_cv_exeext
  +echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
  +echo "${ECHO_T}$ac_cv_exeext" >&6
  +
  +rm -f conftest.$ac_ext
  +EXEEXT=$ac_cv_exeext
  +ac_exeext=$EXEEXT
  +echo "$as_me:$LINENO: checking for suffix of object files" >&5
  +echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
  +if test "${ac_cv_objext+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  cat >conftest.$ac_ext <<_ACEOF
  +/* confdefs.h.  */
  +_ACEOF
  +cat confdefs.h >>conftest.$ac_ext
  +cat >>conftest.$ac_ext <<_ACEOF
  +/* end confdefs.h.  */
  +
  +int
  +main ()
  +{
   
  -ac_test_CFLAGS="${CFLAGS+set}"
  -ac_save_CFLAGS="$CFLAGS"
  -CFLAGS=
  -echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
  -echo "configure:739: checking whether ${CC-cc} accepts -g" >&5
  -if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.o conftest.obj
  +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>&5
  +  ac_status=$?
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); }; then
  +  for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
  +  case $ac_file in
  +    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
  +    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
  +       break;;
  +  esac
  +done
   else
  -  echo 'void f(){}' > conftest.c
  -if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
  +  echo "$as_me: failed program was:" >&5
  +sed 's/^/| /' conftest.$ac_ext >&5
  +
  +{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
  +See \`config.log' for more details." >&5
  +echo "$as_me: error: cannot compute suffix of object files: cannot compile
  +See \`config.log' for more details." >&2;}
  +   { (exit 1); exit 1; }; }
  +fi
  +
  +rm -f conftest.$ac_cv_objext conftest.$ac_ext
  +fi
  +echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
  +echo "${ECHO_T}$ac_cv_objext" >&6
  +OBJEXT=$ac_cv_objext
  +ac_objext=$OBJEXT
  +echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
  +echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
  +if test "${ac_cv_c_compiler_gnu+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  cat >conftest.$ac_ext <<_ACEOF
  +/* confdefs.h.  */
  +_ACEOF
  +cat confdefs.h >>conftest.$ac_ext
  +cat >>conftest.$ac_ext <<_ACEOF
  +/* end confdefs.h.  */
  +
  +int
  +main ()
  +{
  +#ifndef __GNUC__
  +       choke me
  +#endif
  +
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>conftest.er1
  +  ac_status=$?
  +  grep -v '^ *+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +	 { ac_try='test -z "$ac_c_werror_flag"
  +			 || test ! -s conftest.err'
  +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); }; } &&
  +	 { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_compiler_gnu=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +sed 's/^/| /' conftest.$ac_ext >&5
  +
  +ac_compiler_gnu=no
  +fi
  +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  +ac_cv_c_compiler_gnu=$ac_compiler_gnu
  +
  +fi
  +echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
  +echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
  +GCC=`test $ac_compiler_gnu = yes && echo yes`
  +ac_test_CFLAGS=${CFLAGS+set}
  +ac_save_CFLAGS=$CFLAGS
  +CFLAGS="-g"
  +echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
  +echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
  +if test "${ac_cv_prog_cc_g+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  cat >conftest.$ac_ext <<_ACEOF
  +/* confdefs.h.  */
  +_ACEOF
  +cat confdefs.h >>conftest.$ac_ext
  +cat >>conftest.$ac_ext <<_ACEOF
  +/* end confdefs.h.  */
  +
  +int
  +main ()
  +{
  +
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>conftest.er1
  +  ac_status=$?
  +  grep -v '^ *+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +	 { ac_try='test -z "$ac_c_werror_flag"
  +			 || test ! -s conftest.err'
  +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); }; } &&
  +	 { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
     ac_cv_prog_cc_g=yes
   else
  -  ac_cv_prog_cc_g=no
  -fi
  -rm -f conftest*
  +  echo "$as_me: failed program was:" >&5
  +sed 's/^/| /' conftest.$ac_ext >&5
   
  +ac_cv_prog_cc_g=no
   fi
  -
  -echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
  +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  +fi
  +echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
  +echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
   if test "$ac_test_CFLAGS" = set; then
  -  CFLAGS="$ac_save_CFLAGS"
  +  CFLAGS=$ac_save_CFLAGS
   elif test $ac_cv_prog_cc_g = yes; then
     if test "$GCC" = yes; then
       CFLAGS="-g -O2"
  @@ -765,96 +1978,513 @@
       CFLAGS=
     fi
   fi
  +echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
  +echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
  +if test "${ac_cv_prog_cc_stdc+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  ac_cv_prog_cc_stdc=no
  +ac_save_CC=$CC
  +cat >conftest.$ac_ext <<_ACEOF
  +/* confdefs.h.  */
  +_ACEOF
  +cat confdefs.h >>conftest.$ac_ext
  +cat >>conftest.$ac_ext <<_ACEOF
  +/* end confdefs.h.  */
  +#include <stdarg.h>
  +#include <stdio.h>
  +#include <sys/types.h>
  +#include <sys/stat.h>
  +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
  +struct buf { int x; };
  +FILE * (*rcsopen) (struct buf *, struct stat *, int);
  +static char *e (p, i)
  +     char **p;
  +     int i;
  +{
  +  return p[i];
  +}
  +static char *f (char * (*g) (char **, int), char **p, ...)
  +{
  +  char *s;
  +  va_list v;
  +  va_start (v,p);
  +  s = g (p, va_arg (v,int));
  +  va_end (v);
  +  return s;
  +}
  +
  +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
  +   function prototypes and stuff, but not '\xHH' hex character constants.
  +   These don't provoke an error unfortunately, instead are silently treated
  +   as 'x'.  The following induces an error, until -std1 is added to get
  +   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
  +   array size at least.  It's necessary to write '\x00'==0 to get something
  +   that's true only with -std1.  */
  +int osf4_cc_array ['\x00' == 0 ? 1 : -1];
  +
  +int test (int i, double x);
  +struct s1 {int (*f) (int a);};
  +struct s2 {int (*f) (double a);};
  +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
  +int argc;
  +char **argv;
  +int
  +main ()
  +{
  +return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +# Don't try gcc -ansi; that turns off useful extensions and
  +# breaks some systems' header files.
  +# AIX			-qlanglvl=ansi
  +# Ultrix and OSF/1	-std1
  +# HP-UX 10.20 and later	-Ae
  +# HP-UX older versions	-Aa -D_HPUX_SOURCE
  +# SVR4			-Xc -D__EXTENSIONS__
  +for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
  +do
  +  CC="$ac_save_CC $ac_arg"
  +  rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>conftest.er1
  +  ac_status=$?
  +  grep -v '^ *+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +	 { ac_try='test -z "$ac_c_werror_flag"
  +			 || test ! -s conftest.err'
  +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); }; } &&
  +	 { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_cv_prog_cc_stdc=$ac_arg
  +break
  +else
  +  echo "$as_me: failed program was:" >&5
  +sed 's/^/| /' conftest.$ac_ext >&5
  +
  +fi
  +rm -f conftest.err conftest.$ac_objext
  +done
  +rm -f conftest.$ac_ext conftest.$ac_objext
  +CC=$ac_save_CC
  +
  +fi
  +
  +case "x$ac_cv_prog_cc_stdc" in
  +  x|xno)
  +    echo "$as_me:$LINENO: result: none needed" >&5
  +echo "${ECHO_T}none needed" >&6 ;;
  +  *)
  +    echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
  +echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
  +    CC="$CC $ac_cv_prog_cc_stdc" ;;
  +esac
  +
  +# Some people use a C++ compiler to compile C.  Since we use `exit',
  +# in C++ we need to declare it.  In case someone uses the same compiler
  +# for both compiling C and C++ we need to have the C++ compiler decide
  +# the declaration of exit, since it's the most demanding environment.
  +cat >conftest.$ac_ext <<_ACEOF
  +#ifndef __cplusplus
  +  choke me
  +#endif
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>conftest.er1
  +  ac_status=$?
  +  grep -v '^ *+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +	 { ac_try='test -z "$ac_c_werror_flag"
  +			 || test ! -s conftest.err'
  +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); }; } &&
  +	 { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  for ac_declaration in \
  +   '' \
  +   'extern "C" void std::exit (int) throw (); using std::exit;' \
  +   'extern "C" void std::exit (int); using std::exit;' \
  +   'extern "C" void exit (int) throw ();' \
  +   'extern "C" void exit (int);' \
  +   'void exit (int);'
  +do
  +  cat >conftest.$ac_ext <<_ACEOF
  +/* confdefs.h.  */
  +_ACEOF
  +cat confdefs.h >>conftest.$ac_ext
  +cat >>conftest.$ac_ext <<_ACEOF
  +/* end confdefs.h.  */
  +$ac_declaration
  +#include <stdlib.h>
  +int
  +main ()
  +{
  +exit (42);
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>conftest.er1
  +  ac_status=$?
  +  grep -v '^ *+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +	 { ac_try='test -z "$ac_c_werror_flag"
  +			 || test ! -s conftest.err'
  +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); }; } &&
  +	 { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  :
  +else
  +  echo "$as_me: failed program was:" >&5
  +sed 's/^/| /' conftest.$ac_ext >&5
  +
  +continue
  +fi
  +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  +  cat >conftest.$ac_ext <<_ACEOF
  +/* confdefs.h.  */
  +_ACEOF
  +cat confdefs.h >>conftest.$ac_ext
  +cat >>conftest.$ac_ext <<_ACEOF
  +/* end confdefs.h.  */
  +$ac_declaration
  +int
  +main ()
  +{
  +exit (42);
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>conftest.er1
  +  ac_status=$?
  +  grep -v '^ *+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +	 { ac_try='test -z "$ac_c_werror_flag"
  +			 || test ! -s conftest.err'
  +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); }; } &&
  +	 { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  break
  +else
  +  echo "$as_me: failed program was:" >&5
  +sed 's/^/| /' conftest.$ac_ext >&5
  +
  +fi
  +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  +done
  +rm -f conftest*
  +if test -n "$ac_declaration"; then
  +  echo '#ifdef __cplusplus' >>confdefs.h
  +  echo $ac_declaration      >>confdefs.h
  +  echo '#endif'             >>confdefs.h
  +fi
  +
  +else
  +  echo "$as_me: failed program was:" >&5
  +sed 's/^/| /' conftest.$ac_ext >&5
  +
  +fi
  +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  +ac_ext=c
  +ac_cpp='$CPP $CPPFLAGS'
  +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  +ac_compiler_gnu=$ac_cv_c_compiler_gnu
   
  -echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
  -echo "configure:771: checking how to run the C preprocessor" >&5
  +ac_ext=c
  +ac_cpp='$CPP $CPPFLAGS'
  +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  +ac_compiler_gnu=$ac_cv_c_compiler_gnu
  +echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
  +echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
   # On Suns, sometimes $CPP names a directory.
   if test -n "$CPP" && test -d "$CPP"; then
     CPP=
   fi
   if test -z "$CPP"; then
  -if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +  if test "${ac_cv_prog_CPP+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -    # This must be in double quotes, not single quotes, because CPP may get
  -  # substituted into the Makefile and "${CC-cc}" will confuse make.
  -  CPP="${CC-cc} -E"
  +      # Double quotes because CPP needs to be expanded
  +    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
  +    do
  +      ac_preproc_ok=false
  +for ac_c_preproc_warn_flag in '' yes
  +do
  +  # Use a header file that comes with gcc, so configuring glibc
  +  # with a fresh cross-compiler works.
  +  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
  +  # <limits.h> exists even on freestanding compilers.
     # On the NeXT, cc -E runs the code through the compiler's parser,
  -  # not just through cpp.
  -  cat > conftest.$ac_ext <<EOF
  -#line 786 "configure"
  -#include "confdefs.h"
  -#include <assert.h>
  -Syntax Error
  -EOF
  -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  -{ (eval echo configure:792: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  -if test -z "$ac_err"; then
  -  :
  +  # not just through cpp. "Syntax error" is here to catch this case.
  +  cat >conftest.$ac_ext <<_ACEOF
  +/* confdefs.h.  */
  +_ACEOF
  +cat confdefs.h >>conftest.$ac_ext
  +cat >>conftest.$ac_ext <<_ACEOF
  +/* end confdefs.h.  */
  +#ifdef __STDC__
  +# include <limits.h>
  +#else
  +# include <assert.h>
  +#endif
  +		     Syntax error
  +_ACEOF
  +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
  +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  +  ac_status=$?
  +  grep -v '^ *+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); } >/dev/null; then
  +  if test -s conftest.err; then
  +    ac_cpp_err=$ac_c_preproc_warn_flag
  +    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
  +  else
  +    ac_cpp_err=
  +  fi
   else
  -  echo "$ac_err" >&5
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  CPP="${CC-cc} -E -traditional-cpp"
  -  cat > conftest.$ac_ext <<EOF
  -#line 803 "configure"
  -#include "confdefs.h"
  -#include <assert.h>
  -Syntax Error
  -EOF
  -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  -{ (eval echo configure:809: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  -if test -z "$ac_err"; then
  +  ac_cpp_err=yes
  +fi
  +if test -z "$ac_cpp_err"; then
     :
   else
  -  echo "$ac_err" >&5
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  CPP="${CC-cc} -nologo -E"
  -  cat > conftest.$ac_ext <<EOF
  -#line 820 "configure"
  -#include "confdefs.h"
  -#include <assert.h>
  -Syntax Error
  -EOF
  -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  -{ (eval echo configure:826: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  -if test -z "$ac_err"; then
  -  :
  +  echo "$as_me: failed program was:" >&5
  +sed 's/^/| /' conftest.$ac_ext >&5
  +
  +  # Broken: fails on valid input.
  +continue
  +fi
  +rm -f conftest.err conftest.$ac_ext
  +
  +  # OK, works on sane cases.  Now check whether non-existent headers
  +  # can be detected and how.
  +  cat >conftest.$ac_ext <<_ACEOF
  +/* confdefs.h.  */
  +_ACEOF
  +cat confdefs.h >>conftest.$ac_ext
  +cat >>conftest.$ac_ext <<_ACEOF
  +/* end confdefs.h.  */
  +#include <ac_nonexistent.h>
  +_ACEOF
  +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
  +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  +  ac_status=$?
  +  grep -v '^ *+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); } >/dev/null; then
  +  if test -s conftest.err; then
  +    ac_cpp_err=$ac_c_preproc_warn_flag
  +    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
  +  else
  +    ac_cpp_err=
  +  fi
   else
  -  echo "$ac_err" >&5
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  CPP=/lib/cpp
  +  ac_cpp_err=yes
   fi
  -rm -f conftest*
  +if test -z "$ac_cpp_err"; then
  +  # Broken: success on invalid input.
  +continue
  +else
  +  echo "$as_me: failed program was:" >&5
  +sed 's/^/| /' conftest.$ac_ext >&5
  +
  +  # Passes both tests.
  +ac_preproc_ok=:
  +break
   fi
  -rm -f conftest*
  +rm -f conftest.err conftest.$ac_ext
  +
  +done
  +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
  +rm -f conftest.err conftest.$ac_ext
  +if $ac_preproc_ok; then
  +  break
   fi
  -rm -f conftest*
  -  ac_cv_prog_CPP="$CPP"
  +
  +    done
  +    ac_cv_prog_CPP=$CPP
  +
  +fi
  +  CPP=$ac_cv_prog_CPP
  +else
  +  ac_cv_prog_CPP=$CPP
  +fi
  +echo "$as_me:$LINENO: result: $CPP" >&5
  +echo "${ECHO_T}$CPP" >&6
  +ac_preproc_ok=false
  +for ac_c_preproc_warn_flag in '' yes
  +do
  +  # Use a header file that comes with gcc, so configuring glibc
  +  # with a fresh cross-compiler works.
  +  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
  +  # <limits.h> exists even on freestanding compilers.
  +  # On the NeXT, cc -E runs the code through the compiler's parser,
  +  # not just through cpp. "Syntax error" is here to catch this case.
  +  cat >conftest.$ac_ext <<_ACEOF
  +/* confdefs.h.  */
  +_ACEOF
  +cat confdefs.h >>conftest.$ac_ext
  +cat >>conftest.$ac_ext <<_ACEOF
  +/* end confdefs.h.  */
  +#ifdef __STDC__
  +# include <limits.h>
  +#else
  +# include <assert.h>
  +#endif
  +		     Syntax error
  +_ACEOF
  +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
  +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  +  ac_status=$?
  +  grep -v '^ *+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); } >/dev/null; then
  +  if test -s conftest.err; then
  +    ac_cpp_err=$ac_c_preproc_warn_flag
  +    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
  +  else
  +    ac_cpp_err=
  +  fi
  +else
  +  ac_cpp_err=yes
  +fi
  +if test -z "$ac_cpp_err"; then
  +  :
  +else
  +  echo "$as_me: failed program was:" >&5
  +sed 's/^/| /' conftest.$ac_ext >&5
  +
  +  # Broken: fails on valid input.
  +continue
  +fi
  +rm -f conftest.err conftest.$ac_ext
  +
  +  # OK, works on sane cases.  Now check whether non-existent headers
  +  # can be detected and how.
  +  cat >conftest.$ac_ext <<_ACEOF
  +/* confdefs.h.  */
  +_ACEOF
  +cat confdefs.h >>conftest.$ac_ext
  +cat >>conftest.$ac_ext <<_ACEOF
  +/* end confdefs.h.  */
  +#include <ac_nonexistent.h>
  +_ACEOF
  +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
  +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  +  ac_status=$?
  +  grep -v '^ *+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); } >/dev/null; then
  +  if test -s conftest.err; then
  +    ac_cpp_err=$ac_c_preproc_warn_flag
  +    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
  +  else
  +    ac_cpp_err=
  +  fi
  +else
  +  ac_cpp_err=yes
  +fi
  +if test -z "$ac_cpp_err"; then
  +  # Broken: success on invalid input.
  +continue
  +else
  +  echo "$as_me: failed program was:" >&5
  +sed 's/^/| /' conftest.$ac_ext >&5
  +
  +  # Passes both tests.
  +ac_preproc_ok=:
  +break
   fi
  -  CPP="$ac_cv_prog_CPP"
  +rm -f conftest.err conftest.$ac_ext
  +
  +done
  +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
  +rm -f conftest.err conftest.$ac_ext
  +if $ac_preproc_ok; then
  +  :
   else
  -  ac_cv_prog_CPP="$CPP"
  +  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
  +See \`config.log' for more details." >&5
  +echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
  +See \`config.log' for more details." >&2;}
  +   { (exit 1); exit 1; }; }
   fi
  -echo "$ac_t""$CPP" 1>&6
  +
  +ac_ext=c
  +ac_cpp='$CPP $CPPFLAGS'
  +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  +ac_compiler_gnu=$ac_cv_c_compiler_gnu
   
   
  -echo $ac_n "checking for compilation debug mode""... $ac_c" 1>&6
  -echo "configure:852: checking for compilation debug mode" >&5
  +echo "$as_me:$LINENO: checking for compilation debug mode" >&5
  +echo $ECHO_N "checking for compilation debug mode... $ECHO_C" >&6
   # Check whether --enable-debug or --disable-debug was given.
   if test "${enable_debug+set}" = set; then
     enableval="$enable_debug"
     x="enabled"
  -CFLAGS="-Wall -g -ggdb3"
  -LDFLAGS="-g -ggdb3"
  +CFLAGS="-Wall -g"
  +LDFLAGS="-g"
   debug=on
   
   else
  @@ -863,45 +2493,50 @@
   LDFLAGS=""
   debug=off
   
  -fi
  -
  -echo "$ac_t""$x" 1>&6
  -
  -echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
  -echo "configure:872: checking whether ${MAKE-make} sets \${MAKE}" >&5
  -set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
  -if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +fi;
  +echo "$as_me:$LINENO: result: $x" >&5
  +echo "${ECHO_T}$x" >&6
  +
  +echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
  +echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
  +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
  +if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  cat > conftestmake <<\EOF
  +  cat >conftest.make <<\_ACEOF
   all:
  -	@echo 'ac_maketemp="${MAKE}"'
  -EOF
  +	@echo 'ac_maketemp="$(MAKE)"'
  +_ACEOF
   # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
  -eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=`
  +eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
   if test -n "$ac_maketemp"; then
     eval ac_cv_prog_make_${ac_make}_set=yes
   else
     eval ac_cv_prog_make_${ac_make}_set=no
   fi
  -rm -f conftestmake
  +rm -f conftest.make
   fi
   if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
  -  echo "$ac_t""yes" 1>&6
  +  echo "$as_me:$LINENO: result: yes" >&5
  +echo "${ECHO_T}yes" >&6
     SET_MAKE=
   else
  -  echo "$ac_t""no" 1>&6
  +  echo "$as_me:$LINENO: result: no" >&5
  +echo "${ECHO_T}no" >&6
     SET_MAKE="MAKE=${MAKE-make}"
   fi
   
   
   
  -echo "$ac_t""" 1>&6
  -echo "$ac_t""${T_MD}CHECK: Curses Environment${T_ME}" 1>&6
  +echo "$as_me:$LINENO: result: " >&5
  +echo "${ECHO_T}" >&6
  +echo "$as_me:$LINENO: result: ${T_MD}CHECK: Curses Environment${T_ME}" >&5
  +echo "${ECHO_T}${T_MD}CHECK: Curses Environment${T_ME}" >&6
  +
   
  +echo "$as_me:$LINENO: checking for additional include dir" >&5
  +echo $ECHO_N "checking for additional include dir... $ECHO_C" >&6
   
  -echo $ac_n "checking for additional include dir""... $ac_c" 1>&6
  -echo "configure:905: checking for additional include dir" >&5
   # Check whether --with-incdir or --without-incdir was given.
   if test "${with_incdir+set}" = set; then
     withval="$with_incdir"
  @@ -912,327 +2547,931 @@
   else
     x="none particular"
   
  +fi; echo "$as_me:$LINENO: result: $x" >&5
  +echo "${ECHO_T}$x" >&6
  +echo "$as_me:$LINENO: checking for additional library dir" >&5
  +echo $ECHO_N "checking for additional library dir... $ECHO_C" >&6
  +
  +# Check whether --with-libdir or --without-libdir was given.
  +if test "${with_libdir+set}" = set; then
  +  withval="$with_libdir"
  +  LDFLAGS="$LDFLAGS -L$with_libdir"
  +x="$with_libdir"
  +
  +else
  +  x="none particular"
  +
  +fi; echo "$as_me:$LINENO: result: $x" >&5
  +echo "${ECHO_T}$x" >&6
  +
  +
  +
  +echo "$as_me:$LINENO: checking for egrep" >&5
  +echo $ECHO_N "checking for egrep... $ECHO_C" >&6
  +if test "${ac_cv_prog_egrep+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if echo a | (grep -E '(a|b)') >/dev/null 2>&1
  +    then ac_cv_prog_egrep='grep -E'
  +    else ac_cv_prog_egrep='egrep'
  +    fi
  +fi
  +echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
  +echo "${ECHO_T}$ac_cv_prog_egrep" >&6
  + EGREP=$ac_cv_prog_egrep
  +
  +
  +echo "$as_me:$LINENO: checking for ANSI C header files" >&5
  +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
  +if test "${ac_cv_header_stdc+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  cat >conftest.$ac_ext <<_ACEOF
  +/* confdefs.h.  */
  +_ACEOF
  +cat confdefs.h >>conftest.$ac_ext
  +cat >>conftest.$ac_ext <<_ACEOF
  +/* end confdefs.h.  */
  +#include <stdlib.h>
  +#include <stdarg.h>
  +#include <string.h>
  +#include <float.h>
  +
  +int
  +main ()
  +{
  +
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>conftest.er1
  +  ac_status=$?
  +  grep -v '^ *+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +	 { ac_try='test -z "$ac_c_werror_flag"
  +			 || test ! -s conftest.err'
  +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); }; } &&
  +	 { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_cv_header_stdc=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +sed 's/^/| /' conftest.$ac_ext >&5
  +
  +ac_cv_header_stdc=no
  +fi
  +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  +
  +if test $ac_cv_header_stdc = yes; then
  +  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
  +  cat >conftest.$ac_ext <<_ACEOF
  +/* confdefs.h.  */
  +_ACEOF
  +cat confdefs.h >>conftest.$ac_ext
  +cat >>conftest.$ac_ext <<_ACEOF
  +/* end confdefs.h.  */
  +#include <string.h>
  +
  +_ACEOF
  +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
  +  $EGREP "memchr" >/dev/null 2>&1; then
  +  :
  +else
  +  ac_cv_header_stdc=no
  +fi
  +rm -f conftest*
  +
  +fi
  +
  +if test $ac_cv_header_stdc = yes; then
  +  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
  +  cat >conftest.$ac_ext <<_ACEOF
  +/* confdefs.h.  */
  +_ACEOF
  +cat confdefs.h >>conftest.$ac_ext
  +cat >>conftest.$ac_ext <<_ACEOF
  +/* end confdefs.h.  */
  +#include <stdlib.h>
  +
  +_ACEOF
  +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
  +  $EGREP "free" >/dev/null 2>&1; then
  +  :
  +else
  +  ac_cv_header_stdc=no
  +fi
  +rm -f conftest*
  +
  +fi
  +
  +if test $ac_cv_header_stdc = yes; then
  +  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
  +  if test "$cross_compiling" = yes; then
  +  :
  +else
  +  cat >conftest.$ac_ext <<_ACEOF
  +/* confdefs.h.  */
  +_ACEOF
  +cat confdefs.h >>conftest.$ac_ext
  +cat >>conftest.$ac_ext <<_ACEOF
  +/* end confdefs.h.  */
  +#include <ctype.h>
  +#if ((' ' & 0x0FF) == 0x020)
  +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
  +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
  +#else
  +# define ISLOWER(c) \
  +		   (('a' <= (c) && (c) <= 'i') \
  +		     || ('j' <= (c) && (c) <= 'r') \
  +		     || ('s' <= (c) && (c) <= 'z'))
  +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
  +#endif
  +
  +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
  +int
  +main ()
  +{
  +  int i;
  +  for (i = 0; i < 256; i++)
  +    if (XOR (islower (i), ISLOWER (i))
  +	|| toupper (i) != TOUPPER (i))
  +      exit(2);
  +  exit (0);
  +}
  +_ACEOF
  +rm -f conftest$ac_exeext
  +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
  +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  :
  +else
  +  echo "$as_me: program exited with status $ac_status" >&5
  +echo "$as_me: failed program was:" >&5
  +sed 's/^/| /' conftest.$ac_ext >&5
  +
  +( exit $ac_status )
  +ac_cv_header_stdc=no
  +fi
  +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
  +fi
  +fi
  +fi
  +echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
  +echo "${ECHO_T}$ac_cv_header_stdc" >&6
  +if test $ac_cv_header_stdc = yes; then
  +
  +cat >>confdefs.h <<\_ACEOF
  +#define STDC_HEADERS 1
  +_ACEOF
  +
  +fi
  +
  +# On IRIX 5.3, sys/types and inttypes.h are conflicting.
  +
  +
  +
  +
  +
  +
  +
  +
  +
  +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
  +		  inttypes.h stdint.h unistd.h
  +do
  +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
  +echo "$as_me:$LINENO: checking for $ac_header" >&5
  +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
  +if eval "test \"\${$as_ac_Header+set}\" = set"; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  cat >conftest.$ac_ext <<_ACEOF
  +/* confdefs.h.  */
  +_ACEOF
  +cat confdefs.h >>conftest.$ac_ext
  +cat >>conftest.$ac_ext <<_ACEOF
  +/* end confdefs.h.  */
  +$ac_includes_default
  +
  +#include <$ac_header>
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>conftest.er1
  +  ac_status=$?
  +  grep -v '^ *+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +	 { ac_try='test -z "$ac_c_werror_flag"
  +			 || test ! -s conftest.err'
  +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); }; } &&
  +	 { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  eval "$as_ac_Header=yes"
  +else
  +  echo "$as_me: failed program was:" >&5
  +sed 's/^/| /' conftest.$ac_ext >&5
  +
  +eval "$as_ac_Header=no"
  +fi
  +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  +fi
  +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
  +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
  +if test `eval echo '${'$as_ac_Header'}'` = yes; then
  +  cat >>confdefs.h <<_ACEOF
  +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
  +_ACEOF
  +
   fi
  -echo "$ac_t""$x" 1>&6
  -echo $ac_n "checking for additional library dir""... $ac_c" 1>&6
  -echo "configure:919: checking for additional library dir" >&5
  -# Check whether --with-libdir or --without-libdir was given.
  -if test "${with_libdir+set}" = set; then
  -  withval="$with_libdir"
  -  LDFLAGS="$LDFLAGS -L$with_libdir"
  -x="$with_libdir"
   
  -else
  -  x="none particular"
  +done
   
  +
  +if test "${ac_cv_header_ncurses_ncurses_h+set}" = set; then
  +  echo "$as_me:$LINENO: checking for ncurses/ncurses.h" >&5
  +echo $ECHO_N "checking for ncurses/ncurses.h... $ECHO_C" >&6
  +if test "${ac_cv_header_ncurses_ncurses_h+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +fi
  +echo "$as_me:$LINENO: result: $ac_cv_header_ncurses_ncurses_h" >&5
  +echo "${ECHO_T}$ac_cv_header_ncurses_ncurses_h" >&6
  +else
  +  # Is the header compilable?
  +echo "$as_me:$LINENO: checking ncurses/ncurses.h usability" >&5
  +echo $ECHO_N "checking ncurses/ncurses.h usability... $ECHO_C" >&6
  +cat >conftest.$ac_ext <<_ACEOF
  +/* confdefs.h.  */
  +_ACEOF
  +cat confdefs.h >>conftest.$ac_ext
  +cat >>conftest.$ac_ext <<_ACEOF
  +/* end confdefs.h.  */
  +$ac_includes_default
  +#include <ncurses/ncurses.h>
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>conftest.er1
  +  ac_status=$?
  +  grep -v '^ *+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +	 { ac_try='test -z "$ac_c_werror_flag"
  +			 || test ! -s conftest.err'
  +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); }; } &&
  +	 { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_header_compiler=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +sed 's/^/| /' conftest.$ac_ext >&5
  +
  +ac_header_compiler=no
  +fi
  +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
  +echo "${ECHO_T}$ac_header_compiler" >&6
  +
  +# Is the header present?
  +echo "$as_me:$LINENO: checking ncurses/ncurses.h presence" >&5
  +echo $ECHO_N "checking ncurses/ncurses.h presence... $ECHO_C" >&6
  +cat >conftest.$ac_ext <<_ACEOF
  +/* confdefs.h.  */
  +_ACEOF
  +cat confdefs.h >>conftest.$ac_ext
  +cat >>conftest.$ac_ext <<_ACEOF
  +/* end confdefs.h.  */
  +#include <ncurses/ncurses.h>
  +_ACEOF
  +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
  +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  +  ac_status=$?
  +  grep -v '^ *+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); } >/dev/null; then
  +  if test -s conftest.err; then
  +    ac_cpp_err=$ac_c_preproc_warn_flag
  +    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
  +  else
  +    ac_cpp_err=
  +  fi
  +else
  +  ac_cpp_err=yes
   fi
  -echo "$ac_t""$x" 1>&6
  +if test -z "$ac_cpp_err"; then
  +  ac_header_preproc=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +sed 's/^/| /' conftest.$ac_ext >&5
   
  -ac_safe=`echo "ncurses.h" | sed 'y%./+-%__p_%'`
  -echo $ac_n "checking for ncurses.h""... $ac_c" 1>&6
  -echo "configure:934: checking for ncurses.h" >&5
  -if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  -else
  -  cat > conftest.$ac_ext <<EOF
  -#line 939 "configure"
  -#include "confdefs.h"
  -#include <ncurses.h>
  -EOF
  -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  -{ (eval echo configure:944: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  -if test -z "$ac_err"; then
  -  rm -rf conftest*
  -  eval "ac_cv_header_$ac_safe=yes"
  -else
  -  echo "$ac_err" >&5
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  eval "ac_cv_header_$ac_safe=no"
  +  ac_header_preproc=no
  +fi
  +rm -f conftest.err conftest.$ac_ext
  +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
  +echo "${ECHO_T}$ac_header_preproc" >&6
  +
  +# So?  What about this header?
  +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
  +  yes:no: )
  +    { echo "$as_me:$LINENO: WARNING: ncurses/ncurses.h: accepted by the compiler, rejected by the preprocessor!" >&5
  +echo "$as_me: WARNING: ncurses/ncurses.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
  +    { echo "$as_me:$LINENO: WARNING: ncurses/ncurses.h: proceeding with the compiler's result" >&5
  +echo "$as_me: WARNING: ncurses/ncurses.h: proceeding with the compiler's result" >&2;}
  +    ac_header_preproc=yes
  +    ;;
  +  no:yes:* )
  +    { echo "$as_me:$LINENO: WARNING: ncurses/ncurses.h: present but cannot be compiled" >&5
  +echo "$as_me: WARNING: ncurses/ncurses.h: present but cannot be compiled" >&2;}
  +    { echo "$as_me:$LINENO: WARNING: ncurses/ncurses.h:     check for missing prerequisite headers?" >&5
  +echo "$as_me: WARNING: ncurses/ncurses.h:     check for missing prerequisite headers?" >&2;}
  +    { echo "$as_me:$LINENO: WARNING: ncurses/ncurses.h: see the Autoconf documentation" >&5
  +echo "$as_me: WARNING: ncurses/ncurses.h: see the Autoconf documentation" >&2;}
  +    { echo "$as_me:$LINENO: WARNING: ncurses/ncurses.h:     section \"Present But Cannot Be Compiled\"" >&5
  +echo "$as_me: WARNING: ncurses/ncurses.h:     section \"Present But Cannot Be Compiled\"" >&2;}
  +    { echo "$as_me:$LINENO: WARNING: ncurses/ncurses.h: proceeding with the preprocessor's result" >&5
  +echo "$as_me: WARNING: ncurses/ncurses.h: proceeding with the preprocessor's result" >&2;}
  +    { echo "$as_me:$LINENO: WARNING: ncurses/ncurses.h: in the future, the compiler will take precedence" >&5
  +echo "$as_me: WARNING: ncurses/ncurses.h: in the future, the compiler will take precedence" >&2;}
  +    (
  +      cat <<\_ASBOX
  +## ------------------------------------------ ##
  +## Report this to the AC_PACKAGE_NAME lists.  ##
  +## ------------------------------------------ ##
  +_ASBOX
  +    ) |
  +      sed "s/^/$as_me: WARNING:     /" >&2
  +    ;;
  +esac
  +echo "$as_me:$LINENO: checking for ncurses/ncurses.h" >&5
  +echo $ECHO_N "checking for ncurses/ncurses.h... $ECHO_C" >&6
  +if test "${ac_cv_header_ncurses_ncurses_h+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  ac_cv_header_ncurses_ncurses_h=$ac_header_preproc
   fi
  -rm -f conftest*
  +echo "$as_me:$LINENO: result: $ac_cv_header_ncurses_ncurses_h" >&5
  +echo "${ECHO_T}$ac_cv_header_ncurses_ncurses_h" >&6
  +
   fi
  -if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
  -  echo "$ac_t""yes" 1>&6
  +if test $ac_cv_header_ncurses_ncurses_h = yes; then
     HAVE_NCURSES_HEADER=YES
   else
  -  echo "$ac_t""no" 1>&6
  -HAVE_NCURSES_HEADER=NO
  +  HAVE_NCURSES_HEADER=NO
   fi
   
  -echo $ac_n "checking for initscr in -lncurses""... $ac_c" 1>&6
  -echo "configure:967: checking for initscr in -lncurses" >&5
  -ac_lib_var=`echo ncurses'_'initscr | sed 'y%./+-%__p_%'`
  -if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +
  +echo "$as_me:$LINENO: checking for initscr in -lncurses" >&5
  +echo $ECHO_N "checking for initscr in -lncurses... $ECHO_C" >&6
  +if test "${ac_cv_lib_ncurses_initscr+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  ac_save_LIBS="$LIBS"
  +  ac_check_lib_save_LIBS=$LIBS
   LIBS="-lncurses  $LIBS"
  -cat > conftest.$ac_ext <<EOF
  -#line 975 "configure"
  -#include "confdefs.h"
  +cat >conftest.$ac_ext <<_ACEOF
  +/* confdefs.h.  */
  +_ACEOF
  +cat confdefs.h >>conftest.$ac_ext
  +cat >>conftest.$ac_ext <<_ACEOF
  +/* end confdefs.h.  */
  +
   /* Override any gcc2 internal prototype to avoid an error.  */
  +#ifdef __cplusplus
  +extern "C"
  +#endif
   /* We use char because int might match the return type of a gcc2
  -    builtin and then its argument prototype would still apply.  */
  -char initscr();
  -
  -int main() {
  -initscr()
  -; return 0; }
  -EOF
  -if { (eval echo configure:986: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  -  rm -rf conftest*
  -  eval "ac_cv_lib_$ac_lib_var=yes"
  -else
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  eval "ac_cv_lib_$ac_lib_var=no"
  -fi
  -rm -f conftest*
  -LIBS="$ac_save_LIBS"
  -
  -fi
  -if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
  -  echo "$ac_t""yes" 1>&6
  +   builtin and then its argument prototype would still apply.  */
  +char initscr ();
  +int
  +main ()
  +{
  +initscr ();
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext conftest$ac_exeext
  +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>conftest.er1
  +  ac_status=$?
  +  grep -v '^ *+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +	 { ac_try='test -z "$ac_c_werror_flag"
  +			 || test ! -s conftest.err'
  +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); }; } &&
  +	 { ac_try='test -s conftest$ac_exeext'
  +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_cv_lib_ncurses_initscr=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +sed 's/^/| /' conftest.$ac_ext >&5
  +
  +ac_cv_lib_ncurses_initscr=no
  +fi
  +rm -f conftest.err conftest.$ac_objext \
  +      conftest$ac_exeext conftest.$ac_ext
  +LIBS=$ac_check_lib_save_LIBS
  +fi
  +echo "$as_me:$LINENO: result: $ac_cv_lib_ncurses_initscr" >&5
  +echo "${ECHO_T}$ac_cv_lib_ncurses_initscr" >&6
  +if test $ac_cv_lib_ncurses_initscr = yes; then
     HAVE_NCURSES_LIB=YES
   else
  -  echo "$ac_t""no" 1>&6
  -HAVE_NCURSES_LIB=NO
  +  HAVE_NCURSES_LIB=NO
   fi
   
  -ac_safe=`echo "slcurses.h" | sed 'y%./+-%__p_%'`
  -echo $ac_n "checking for slcurses.h""... $ac_c" 1>&6
  -echo "configure:1009: checking for slcurses.h" >&5
  -if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  -else
  -  cat > conftest.$ac_ext <<EOF
  -#line 1014 "configure"
  -#include "confdefs.h"
  +if test "${ac_cv_header_slcurses_h+set}" = set; then
  +  echo "$as_me:$LINENO: checking for slcurses.h" >&5
  +echo $ECHO_N "checking for slcurses.h... $ECHO_C" >&6
  +if test "${ac_cv_header_slcurses_h+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +fi
  +echo "$as_me:$LINENO: result: $ac_cv_header_slcurses_h" >&5
  +echo "${ECHO_T}$ac_cv_header_slcurses_h" >&6
  +else
  +  # Is the header compilable?
  +echo "$as_me:$LINENO: checking slcurses.h usability" >&5
  +echo $ECHO_N "checking slcurses.h usability... $ECHO_C" >&6
  +cat >conftest.$ac_ext <<_ACEOF
  +/* confdefs.h.  */
  +_ACEOF
  +cat confdefs.h >>conftest.$ac_ext
  +cat >>conftest.$ac_ext <<_ACEOF
  +/* end confdefs.h.  */
  +$ac_includes_default
  +#include <slcurses.h>
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>conftest.er1
  +  ac_status=$?
  +  grep -v '^ *+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +	 { ac_try='test -z "$ac_c_werror_flag"
  +			 || test ! -s conftest.err'
  +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); }; } &&
  +	 { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_header_compiler=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +sed 's/^/| /' conftest.$ac_ext >&5
  +
  +ac_header_compiler=no
  +fi
  +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
  +echo "${ECHO_T}$ac_header_compiler" >&6
  +
  +# Is the header present?
  +echo "$as_me:$LINENO: checking slcurses.h presence" >&5
  +echo $ECHO_N "checking slcurses.h presence... $ECHO_C" >&6
  +cat >conftest.$ac_ext <<_ACEOF
  +/* confdefs.h.  */
  +_ACEOF
  +cat confdefs.h >>conftest.$ac_ext
  +cat >>conftest.$ac_ext <<_ACEOF
  +/* end confdefs.h.  */
   #include <slcurses.h>
  -EOF
  -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  -{ (eval echo configure:1019: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  -if test -z "$ac_err"; then
  -  rm -rf conftest*
  -  eval "ac_cv_header_$ac_safe=yes"
  -else
  -  echo "$ac_err" >&5
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  eval "ac_cv_header_$ac_safe=no"
  +_ACEOF
  +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
  +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  +  ac_status=$?
  +  grep -v '^ *+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); } >/dev/null; then
  +  if test -s conftest.err; then
  +    ac_cpp_err=$ac_c_preproc_warn_flag
  +    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
  +  else
  +    ac_cpp_err=
  +  fi
  +else
  +  ac_cpp_err=yes
   fi
  -rm -f conftest*
  +if test -z "$ac_cpp_err"; then
  +  ac_header_preproc=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +sed 's/^/| /' conftest.$ac_ext >&5
  +
  +  ac_header_preproc=no
  +fi
  +rm -f conftest.err conftest.$ac_ext
  +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
  +echo "${ECHO_T}$ac_header_preproc" >&6
  +
  +# So?  What about this header?
  +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
  +  yes:no: )
  +    { echo "$as_me:$LINENO: WARNING: slcurses.h: accepted by the compiler, rejected by the preprocessor!" >&5
  +echo "$as_me: WARNING: slcurses.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
  +    { echo "$as_me:$LINENO: WARNING: slcurses.h: proceeding with the compiler's result" >&5
  +echo "$as_me: WARNING: slcurses.h: proceeding with the compiler's result" >&2;}
  +    ac_header_preproc=yes
  +    ;;
  +  no:yes:* )
  +    { echo "$as_me:$LINENO: WARNING: slcurses.h: present but cannot be compiled" >&5
  +echo "$as_me: WARNING: slcurses.h: present but cannot be compiled" >&2;}
  +    { echo "$as_me:$LINENO: WARNING: slcurses.h:     check for missing prerequisite headers?" >&5
  +echo "$as_me: WARNING: slcurses.h:     check for missing prerequisite headers?" >&2;}
  +    { echo "$as_me:$LINENO: WARNING: slcurses.h: see the Autoconf documentation" >&5
  +echo "$as_me: WARNING: slcurses.h: see the Autoconf documentation" >&2;}
  +    { echo "$as_me:$LINENO: WARNING: slcurses.h:     section \"Present But Cannot Be Compiled\"" >&5
  +echo "$as_me: WARNING: slcurses.h:     section \"Present But Cannot Be Compiled\"" >&2;}
  +    { echo "$as_me:$LINENO: WARNING: slcurses.h: proceeding with the preprocessor's result" >&5
  +echo "$as_me: WARNING: slcurses.h: proceeding with the preprocessor's result" >&2;}
  +    { echo "$as_me:$LINENO: WARNING: slcurses.h: in the future, the compiler will take precedence" >&5
  +echo "$as_me: WARNING: slcurses.h: in the future, the compiler will take precedence" >&2;}
  +    (
  +      cat <<\_ASBOX
  +## ------------------------------------------ ##
  +## Report this to the AC_PACKAGE_NAME lists.  ##
  +## ------------------------------------------ ##
  +_ASBOX
  +    ) |
  +      sed "s/^/$as_me: WARNING:     /" >&2
  +    ;;
  +esac
  +echo "$as_me:$LINENO: checking for slcurses.h" >&5
  +echo $ECHO_N "checking for slcurses.h... $ECHO_C" >&6
  +if test "${ac_cv_header_slcurses_h+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  ac_cv_header_slcurses_h=$ac_header_preproc
  +fi
  +echo "$as_me:$LINENO: result: $ac_cv_header_slcurses_h" >&5
  +echo "${ECHO_T}$ac_cv_header_slcurses_h" >&6
  +
   fi
  -if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
  -  echo "$ac_t""yes" 1>&6
  +if test $ac_cv_header_slcurses_h = yes; then
     HAVE_SLCURSES_HEADER=YES
   else
  -  echo "$ac_t""no" 1>&6
  -HAVE_SLCURSES_HEADER=NO
  +  HAVE_SLCURSES_HEADER=NO
   fi
   
  +
   OLIBS=$LIBS
   LIBS="$LIBS -ltermcap"
  -echo $ac_n "checking for SLcurses_initscr in -lslang""... $ac_c" 1>&6
  -echo "configure:1044: checking for SLcurses_initscr in -lslang" >&5
  -ac_lib_var=`echo slang'_'SLcurses_initscr | sed 'y%./+-%__p_%'`
  -if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  +echo "$as_me:$LINENO: checking for SLcurses_initscr in -lslang" >&5
  +echo $ECHO_N "checking for SLcurses_initscr in -lslang... $ECHO_C" >&6
  +if test "${ac_cv_lib_slang_SLcurses_initscr+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  ac_save_LIBS="$LIBS"
  +  ac_check_lib_save_LIBS=$LIBS
   LIBS="-lslang  $LIBS"
  -cat > conftest.$ac_ext <<EOF
  -#line 1052 "configure"
  -#include "confdefs.h"
  +cat >conftest.$ac_ext <<_ACEOF
  +/* confdefs.h.  */
  +_ACEOF
  +cat confdefs.h >>conftest.$ac_ext
  +cat >>conftest.$ac_ext <<_ACEOF
  +/* end confdefs.h.  */
  +
   /* Override any gcc2 internal prototype to avoid an error.  */
  +#ifdef __cplusplus
  +extern "C"
  +#endif
   /* We use char because int might match the return type of a gcc2
  -    builtin and then its argument prototype would still apply.  */
  -char SLcurses_initscr();
  -
  -int main() {
  -SLcurses_initscr()
  -; return 0; }
  -EOF
  -if { (eval echo configure:1063: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  -  rm -rf conftest*
  -  eval "ac_cv_lib_$ac_lib_var=yes"
  -else
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  eval "ac_cv_lib_$ac_lib_var=no"
  -fi
  -rm -f conftest*
  -LIBS="$ac_save_LIBS"
  -
  -fi
  -if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
  -  echo "$ac_t""yes" 1>&6
  +   builtin and then its argument prototype would still apply.  */
  +char SLcurses_initscr ();
  +int
  +main ()
  +{
  +SLcurses_initscr ();
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext conftest$ac_exeext
  +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>conftest.er1
  +  ac_status=$?
  +  grep -v '^ *+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +	 { ac_try='test -z "$ac_c_werror_flag"
  +			 || test ! -s conftest.err'
  +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); }; } &&
  +	 { ac_try='test -s conftest$ac_exeext'
  +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_cv_lib_slang_SLcurses_initscr=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +sed 's/^/| /' conftest.$ac_ext >&5
  +
  +ac_cv_lib_slang_SLcurses_initscr=no
  +fi
  +rm -f conftest.err conftest.$ac_objext \
  +      conftest$ac_exeext conftest.$ac_ext
  +LIBS=$ac_check_lib_save_LIBS
  +fi
  +echo "$as_me:$LINENO: result: $ac_cv_lib_slang_SLcurses_initscr" >&5
  +echo "${ECHO_T}$ac_cv_lib_slang_SLcurses_initscr" >&6
  +if test $ac_cv_lib_slang_SLcurses_initscr = yes; then
     HAVE_SLCURSES_LIB=YES
   else
  -  echo "$ac_t""no" 1>&6
  -HAVE_SLCURSES_LIB=NO
  +  HAVE_SLCURSES_LIB=NO
   fi
   
   LIBS=$OLIBS
   if test ".$HAVE_NCURSES_HEADER.$HAVE_NCURSES_LIB." = .YES.YES.; then
       USE_NCURSES=YES
  -    cat >> confdefs.h <<\EOF
  +
  +cat >>confdefs.h <<\_ACEOF
   #define USE_NCURSES 1
  -EOF
  +_ACEOF
   
       LIBS="$LIBS -lncurses"
  -    echo $ac_n "checking which Curses to use""... $ac_c" 1>&6
  -echo "configure:1093: checking which Curses to use" >&5
  -    echo "$ac_t""GNU NCurses" 1>&6
  +    echo "$as_me:$LINENO: checking which Curses to use" >&5
  +echo $ECHO_N "checking which Curses to use... $ECHO_C" >&6
  +    echo "$as_me:$LINENO: result: GNU NCurses" >&5
  +echo "${ECHO_T}GNU NCurses" >&6
   else
       if test ".$HAVE_SLCURSES_HEADER.$HAVE_SLCURSES_LIB." = .YES.YES.; then
           USE_SLCURSES=YES
  -        cat >> confdefs.h <<\EOF
  +
  +cat >>confdefs.h <<\_ACEOF
   #define USE_SLCURSES 1
  -EOF
  +_ACEOF
   
           LIBS="$LIBS -lslang -ltermcap"
  -        echo $ac_n "checking which Curses to use""... $ac_c" 1>&6
  -echo "configure:1104: checking which Curses to use" >&5
  -        echo "$ac_t""S-Lang Curses" 1>&6
  +        echo "$as_me:$LINENO: checking which Curses to use" >&5
  +echo $ECHO_N "checking which Curses to use... $ECHO_C" >&6
  +        echo "$as_me:$LINENO: result: S-Lang Curses" >&5
  +echo "${ECHO_T}S-Lang Curses" >&6
       else
           USE_CURSES=YES
  -        cat >> confdefs.h <<\EOF
  +
  +cat >>confdefs.h <<\_ACEOF
   #define USE_CURSES 1
  -EOF
  +_ACEOF
   
           LIBS="$LIBS -lcurses"
  -        echo $ac_n "checking which Curses to use""... $ac_c" 1>&6
  -echo "configure:1114: checking which Curses to use" >&5
  -        echo "$ac_t""Vendor Curses" 1>&6
  +        echo "$as_me:$LINENO: checking which Curses to use" >&5
  +echo $ECHO_N "checking which Curses to use... $ECHO_C" >&6
  +        echo "$as_me:$LINENO: result: Vendor Curses" >&5
  +echo "${ECHO_T}Vendor Curses" >&6
       fi
   fi
   
  -echo "$ac_t""" 1>&6
  -echo "$ac_t""${T_MD}CHECK: System Ingredients${T_ME}" 1>&6
  +echo "$as_me:$LINENO: result: " >&5
  +echo "${ECHO_T}" >&6
  +echo "$as_me:$LINENO: result: ${T_MD}CHECK: System Ingredients${T_ME}" >&5
  +echo "${ECHO_T}${T_MD}CHECK: System Ingredients${T_ME}" >&6
  +
  +echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5
  +echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6
  +if test "${ac_cv_c_const+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  cat >conftest.$ac_ext <<_ACEOF
  +/* confdefs.h.  */
  +_ACEOF
  +cat confdefs.h >>conftest.$ac_ext
  +cat >>conftest.$ac_ext <<_ACEOF
  +/* end confdefs.h.  */
  +
  +int
  +main ()
  +{
  +/* FIXME: Include the comments suggested by Paul. */
  +#ifndef __cplusplus
  +  /* Ultrix mips cc rejects this.  */
  +  typedef int charset[2];
  +  const charset x;
  +  /* SunOS 4.1.1 cc rejects this.  */
  +  char const *const *ccp;
  +  char **p;
  +  /* NEC SVR4.0.2 mips cc rejects this.  */
  +  struct point {int x, y;};
  +  static struct point const zero = {0,0};
  +  /* AIX XL C 1.02.0.0 rejects this.
  +     It does not let you subtract one const X* pointer from another in
  +     an arm of an if-expression whose if-part is not a constant
  +     expression */
  +  const char *g = "string";
  +  ccp = &g + (g ? g-g : 0);
  +  /* HPUX 7.0 cc rejects these. */
  +  ++ccp;
  +  p = (char**) ccp;
  +  ccp = (char const *const *) p;
  +  { /* SCO 3.2v4 cc rejects this.  */
  +    char *t;
  +    char const *s = 0 ? (char *) 0 : (char const *) 0;
  +
  +    *t++ = 0;
  +  }
  +  { /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
  +    int x[] = {25, 17};
  +    const int *foo = &x[0];
  +    ++foo;
  +  }
  +  { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
  +    typedef const int *iptr;
  +    iptr p = 0;
  +    ++p;
  +  }
  +  { /* AIX XL C 1.02.0.0 rejects this saying
  +       "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
  +    struct s { int j; const int *ap[3]; };
  +    struct s *b; b->j = 5;
  +  }
  +  { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
  +    const int foo = 10;
  +  }
  +#endif
   
  -echo $ac_n "checking for working const""... $ac_c" 1>&6
  -echo "configure:1123: checking for working const" >&5
  -if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  -else
  -  cat > conftest.$ac_ext <<EOF
  -#line 1128 "configure"
  -#include "confdefs.h"
  -
  -int main() {
  -
  -/* Ultrix mips cc rejects this.  */
  -typedef int charset[2]; const charset x;
  -/* SunOS 4.1.1 cc rejects this.  */
  -char const *const *ccp;
  -char **p;
  -/* NEC SVR4.0.2 mips cc rejects this.  */
  -struct point {int x, y;};
  -static struct point const zero = {0,0};
  -/* AIX XL C 1.02.0.0 rejects this.
  -   It does not let you subtract one const X* pointer from another in an arm
  -   of an if-expression whose if-part is not a constant expression */
  -const char *g = "string";
  -ccp = &g + (g ? g-g : 0);
  -/* HPUX 7.0 cc rejects these. */
  -++ccp;
  -p = (char**) ccp;
  -ccp = (char const *const *) p;
  -{ /* SCO 3.2v4 cc rejects this.  */
  -  char *t;
  -  char const *s = 0 ? (char *) 0 : (char const *) 0;
  -
  -  *t++ = 0;
  -}
  -{ /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
  -  int x[] = {25, 17};
  -  const int *foo = &x[0];
  -  ++foo;
  -}
  -{ /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
  -  typedef const int *iptr;
  -  iptr p = 0;
  -  ++p;
  -}
  -{ /* AIX XL C 1.02.0.0 rejects this saying
  -     "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
  -  struct s { int j; const int *ap[3]; };
  -  struct s *b; b->j = 5;
  -}
  -{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
  -  const int foo = 10;
  -}
  -
  -; return 0; }
  -EOF
  -if { (eval echo configure:1177: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
  -  rm -rf conftest*
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>conftest.er1
  +  ac_status=$?
  +  grep -v '^ *+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +	 { ac_try='test -z "$ac_c_werror_flag"
  +			 || test ! -s conftest.err'
  +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); }; } &&
  +	 { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
     ac_cv_c_const=yes
   else
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  ac_cv_c_const=no
  +  echo "$as_me: failed program was:" >&5
  +sed 's/^/| /' conftest.$ac_ext >&5
  +
  +ac_cv_c_const=no
   fi
  -rm -f conftest*
  +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
   fi
  -
  -echo "$ac_t""$ac_cv_c_const" 1>&6
  +echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5
  +echo "${ECHO_T}$ac_cv_c_const" >&6
   if test $ac_cv_c_const = no; then
  -  cat >> confdefs.h <<\EOF
  -#define const 
  -EOF
  +
  +cat >>confdefs.h <<\_ACEOF
  +#define const
  +_ACEOF
   
   fi
   
  -echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
  -echo "configure:1198: checking for ANSI C header files" >&5
  -if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  -else
  -  cat > conftest.$ac_ext <<EOF
  -#line 1203 "configure"
  -#include "confdefs.h"
  +echo "$as_me:$LINENO: checking for ANSI C header files" >&5
  +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
  +if test "${ac_cv_header_stdc+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  cat >conftest.$ac_ext <<_ACEOF
  +/* confdefs.h.  */
  +_ACEOF
  +cat confdefs.h >>conftest.$ac_ext
  +cat >>conftest.$ac_ext <<_ACEOF
  +/* end confdefs.h.  */
   #include <stdlib.h>
   #include <stdarg.h>
   #include <string.h>
   #include <float.h>
  -EOF
  -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  -{ (eval echo configure:1211: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  -if test -z "$ac_err"; then
  -  rm -rf conftest*
  +
  +int
  +main ()
  +{
  +
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>conftest.er1
  +  ac_status=$?
  +  grep -v '^ *+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +	 { ac_try='test -z "$ac_c_werror_flag"
  +			 || test ! -s conftest.err'
  +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); }; } &&
  +	 { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
     ac_cv_header_stdc=yes
   else
  -  echo "$ac_err" >&5
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  ac_cv_header_stdc=no
  +  echo "$as_me: failed program was:" >&5
  +sed 's/^/| /' conftest.$ac_ext >&5
  +
  +ac_cv_header_stdc=no
   fi
  -rm -f conftest*
  +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
   
   if test $ac_cv_header_stdc = yes; then
     # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
  -cat > conftest.$ac_ext <<EOF
  -#line 1228 "configure"
  -#include "confdefs.h"
  +  cat >conftest.$ac_ext <<_ACEOF
  +/* confdefs.h.  */
  +_ACEOF
  +cat confdefs.h >>conftest.$ac_ext
  +cat >>conftest.$ac_ext <<_ACEOF
  +/* end confdefs.h.  */
   #include <string.h>
  -EOF
  +
  +_ACEOF
   if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
  -  egrep "memchr" >/dev/null 2>&1; then
  +  $EGREP "memchr" >/dev/null 2>&1; then
     :
   else
  -  rm -rf conftest*
     ac_cv_header_stdc=no
   fi
   rm -f conftest*
  @@ -1241,16 +3480,19 @@
   
   if test $ac_cv_header_stdc = yes; then
     # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
  -cat > conftest.$ac_ext <<EOF
  -#line 1246 "configure"
  -#include "confdefs.h"
  +  cat >conftest.$ac_ext <<_ACEOF
  +/* confdefs.h.  */
  +_ACEOF
  +cat confdefs.h >>conftest.$ac_ext
  +cat >>conftest.$ac_ext <<_ACEOF
  +/* end confdefs.h.  */
   #include <stdlib.h>
  -EOF
  +
  +_ACEOF
   if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
  -  egrep "free" >/dev/null 2>&1; then
  +  $EGREP "free" >/dev/null 2>&1; then
     :
   else
  -  rm -rf conftest*
     ac_cv_header_stdc=no
   fi
   rm -f conftest*
  @@ -1259,438 +3501,1344 @@
   
   if test $ac_cv_header_stdc = yes; then
     # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
  -if test "$cross_compiling" = yes; then
  +  if test "$cross_compiling" = yes; then
     :
   else
  -  cat > conftest.$ac_ext <<EOF
  -#line 1267 "configure"
  -#include "confdefs.h"
  +  cat >conftest.$ac_ext <<_ACEOF
  +/* confdefs.h.  */
  +_ACEOF
  +cat confdefs.h >>conftest.$ac_ext
  +cat >>conftest.$ac_ext <<_ACEOF
  +/* end confdefs.h.  */
   #include <ctype.h>
  -#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
  -#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
  +#if ((' ' & 0x0FF) == 0x020)
  +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
  +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
  +#else
  +# define ISLOWER(c) \
  +		   (('a' <= (c) && (c) <= 'i') \
  +		     || ('j' <= (c) && (c) <= 'r') \
  +		     || ('s' <= (c) && (c) <= 'z'))
  +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
  +#endif
  +
   #define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
  -int main () { int i; for (i = 0; i < 256; i++)
  -if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
  -exit (0); }
  -
  -EOF
  -if { (eval echo configure:1278: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
  -then
  +int
  +main ()
  +{
  +  int i;
  +  for (i = 0; i < 256; i++)
  +    if (XOR (islower (i), ISLOWER (i))
  +	|| toupper (i) != TOUPPER (i))
  +      exit(2);
  +  exit (0);
  +}
  +_ACEOF
  +rm -f conftest$ac_exeext
  +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
  +  (eval $ac_link) 2>&5
  +  ac_status=$?
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
  +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
     :
   else
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  rm -fr conftest*
  -  ac_cv_header_stdc=no
  +  echo "$as_me: program exited with status $ac_status" >&5
  +echo "$as_me: failed program was:" >&5
  +sed 's/^/| /' conftest.$ac_ext >&5
  +
  +( exit $ac_status )
  +ac_cv_header_stdc=no
   fi
  -rm -fr conftest*
  +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
   fi
  -
   fi
   fi
  -
  -echo "$ac_t""$ac_cv_header_stdc" 1>&6
  +echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
  +echo "${ECHO_T}$ac_cv_header_stdc" >&6
   if test $ac_cv_header_stdc = yes; then
  -  cat >> confdefs.h <<\EOF
  +
  +cat >>confdefs.h <<\_ACEOF
   #define STDC_HEADERS 1
  -EOF
  +_ACEOF
   
   fi
   
  -for ac_hdr in stdio.h stddef.h string.h strings.h stdlib.h
  +
  +
  +
  +
  +
  +for ac_header in stdio.h stddef.h string.h strings.h stdlib.h
   do
  -ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
  -echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
  -echo "configure:1305: checking for $ac_hdr" >&5
  -if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
  -  echo $ac_n "(cached) $ac_c" 1>&6
  -else
  -  cat > conftest.$ac_ext <<EOF
  -#line 1310 "configure"
  -#include "confdefs.h"
  -#include <$ac_hdr>
  -EOF
  -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  -{ (eval echo configure:1315: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  -if test -z "$ac_err"; then
  -  rm -rf conftest*
  -  eval "ac_cv_header_$ac_safe=yes"
  -else
  -  echo "$ac_err" >&5
  -  echo "configure: failed program was:" >&5
  -  cat conftest.$ac_ext >&5
  -  rm -rf conftest*
  -  eval "ac_cv_header_$ac_safe=no"
  -fi
  -rm -f conftest*
  +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
  +if eval "test \"\${$as_ac_Header+set}\" = set"; then
  +  echo "$as_me:$LINENO: checking for $ac_header" >&5
  +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
  +if eval "test \"\${$as_ac_Header+set}\" = set"; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +fi
  +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
  +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
  +else
  +  # Is the header compilable?
  +echo "$as_me:$LINENO: checking $ac_header usability" >&5
  +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
  +cat >conftest.$ac_ext <<_ACEOF
  +/* confdefs.h.  */
  +_ACEOF
  +cat confdefs.h >>conftest.$ac_ext
  +cat >>conftest.$ac_ext <<_ACEOF
  +/* end confdefs.h.  */
  +$ac_includes_default
  +#include <$ac_header>
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  +  (eval $ac_compile) 2>conftest.er1
  +  ac_status=$?
  +  grep -v '^ *+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); } &&
  +	 { ac_try='test -z "$ac_c_werror_flag"
  +			 || test ! -s conftest.err'
  +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); }; } &&
  +	 { ac_try='test -s conftest.$ac_objext'
  +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  +  (eval $ac_try) 2>&5
  +  ac_status=$?
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); }; }; then
  +  ac_header_compiler=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +sed 's/^/| /' conftest.$ac_ext >&5
  +
  +ac_header_compiler=no
  +fi
  +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
  +echo "${ECHO_T}$ac_header_compiler" >&6
  +
  +# Is the header present?
  +echo "$as_me:$LINENO: checking $ac_header presence" >&5
  +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
  +cat >conftest.$ac_ext <<_ACEOF
  +/* confdefs.h.  */
  +_ACEOF
  +cat confdefs.h >>conftest.$ac_ext
  +cat >>conftest.$ac_ext <<_ACEOF
  +/* end confdefs.h.  */
  +#include <$ac_header>
  +_ACEOF
  +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
  +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  +  ac_status=$?
  +  grep -v '^ *+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
  +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  +  (exit $ac_status); } >/dev/null; then
  +  if test -s conftest.err; then
  +    ac_cpp_err=$ac_c_preproc_warn_flag
  +    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
  +  else
  +    ac_cpp_err=
  +  fi
  +else
  +  ac_cpp_err=yes
   fi
  -if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
  -  echo "$ac_t""yes" 1>&6
  -    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
  -  cat >> confdefs.h <<EOF
  -#define $ac_tr_hdr 1
  -EOF
  - 
  +if test -z "$ac_cpp_err"; then
  +  ac_header_preproc=yes
   else
  -  echo "$ac_t""no" 1>&6
  +  echo "$as_me: failed program was:" >&5
  +sed 's/^/| /' conftest.$ac_ext >&5
  +
  +  ac_header_preproc=no
  +fi
  +rm -f conftest.err conftest.$ac_ext
  +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
  +echo "${ECHO_T}$ac_header_preproc" >&6
  +
  +# So?  What about this header?
  +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
  +  yes:no: )
  +    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
  +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
  +    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
  +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
  +    ac_header_preproc=yes
  +    ;;
  +  no:yes:* )
  +    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
  +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
  +    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
  +echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
  +    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
  +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
  +    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
  +echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
  +    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
  +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
  +    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
  +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
  +    (
  +      cat <<\_ASBOX
  +## ------------------------------------------ ##
  +## Report this to the AC_PACKAGE_NAME lists.  ##
  +## ------------------------------------------ ##
  +_ASBOX
  +    ) |
  +      sed "s/^/$as_me: WARNING:     /" >&2
  +    ;;
  +esac
  +echo "$as_me:$LINENO: checking for $ac_header" >&5
  +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
  +if eval "test \"\${$as_ac_Header+set}\" = set"; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  eval "$as_ac_Header=\$ac_header_preproc"
  +fi
  +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
  +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
  +
  +fi
  +if test `eval echo '${'$as_ac_Header'}'` = yes; then
  +  cat >>confdefs.h <<_ACEOF
  +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
  +_ACEOF
  +
   fi
  +
   done
   
   
  -echo "$ac_t""" 1>&6
  -echo "$ac_t""${T_MD}RESULT: Sourcefile Substitution${T_ME}" 1>&6
  +echo "$as_me:$LINENO: result: " >&5
  +echo "${ECHO_T}" >&6
  +echo "$as_me:$LINENO: result: ${T_MD}RESULT: Sourcefile Substitution${T_ME}" >&5
  +echo "${ECHO_T}${T_MD}RESULT: Sourcefile Substitution${T_ME}" >&6
   
  -trap '' 1 2 15
  -cat > confcache <<\EOF
  +                    ac_config_files="$ac_config_files Makefile config_sc.h"
  +cat >confcache <<\_ACEOF
   # This file is a shell script that caches the results of configure
   # tests run on this system so they can be shared between configure
  -# scripts and configure runs.  It is not useful on other systems.
  -# If it contains results you don't want to keep, you may remove or edit it.
  +# scripts and configure runs, see configure's option --config-cache.
  +# It is not useful on other systems.  If it contains results you don't
  +# want to keep, you may remove or edit it.
   #
  -# By default, configure uses ./config.cache as the cache file,
  -# creating it if it does not exist already.  You can give configure
  -# the --cache-file=FILE option to use a different cache file; that is
  -# what configure does when it calls configure scripts in
  -# subdirectories, so they share the cache.
  -# Giving --cache-file=/dev/null disables caching, for debugging configure.
  -# config.status only pays attention to the cache file if you give it the
  -# --recheck option to rerun configure.
  +# config.status only pays attention to the cache file if you give it
  +# the --recheck option to rerun configure.
   #
  -EOF
  +# `ac_cv_env_foo' variables (set or unset) will be overridden when
  +# loading this file, other *unset* `ac_cv_foo' will be assigned the
  +# following values.
  +
  +_ACEOF
  +
   # The following way of writing the cache mishandles newlines in values,
   # but we know of no workaround that is simple, portable, and efficient.
   # So, don't put newlines in cache variables' values.
   # Ultrix sh set writes to stderr and can't be redirected directly,
   # and sets the high bit in the cache file unless we assign to the vars.
  -(set) 2>&1 |
  -  case `(ac_space=' '; set | grep ac_space) 2>&1` in
  -  *ac_space=\ *)
  -    # `set' does not quote correctly, so add quotes (double-quote substitution
  -    # turns \\\\ into \\, and sed turns \\ into \).
  -    sed -n \
  -      -e "s/'/'\\\\''/g" \
  -      -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
  -    ;;
  -  *)
  -    # `set' quotes correctly as required by POSIX, so do not add quotes.
  -    sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
  -    ;;
  -  esac >> confcache
  -if cmp -s $cache_file confcache; then
  -  :
  -else
  +{
  +  (set) 2>&1 |
  +    case `(ac_space=' '; set | grep ac_space) 2>&1` in
  +    *ac_space=\ *)
  +      # `set' does not quote correctly, so add quotes (double-quote
  +      # substitution turns \\\\ into \\, and sed turns \\ into \).
  +      sed -n \
  +	"s/'/'\\\\''/g;
  +	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
  +      ;;
  +    *)
  +      # `set' quotes correctly as required by POSIX, so do not add quotes.
  +      sed -n \
  +	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
  +      ;;
  +    esac;
  +} |
  +  sed '
  +     t clear
  +     : clear
  +     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
  +     t end
  +     /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
  +     : end' >>confcache
  +if diff $cache_file confcache >/dev/null 2>&1; then :; else
     if test -w $cache_file; then
  -    echo "updating cache $cache_file"
  -    cat confcache > $cache_file
  +    test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
  +    cat confcache >$cache_file
     else
       echo "not updating unwritable cache $cache_file"
     fi
   fi
   rm -f confcache
   
  -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
  -
   test "x$prefix" = xNONE && prefix=$ac_default_prefix
   # Let make expand exec_prefix.
   test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
   
  -# Any assignment to VPATH causes Sun make to only execute
  -# the first set of double-colon rules, so remove it if not needed.
  -# If there is a colon in the path, we need to keep it.
  +# VPATH may cause trouble with some makes, so we remove $(srcdir),
  +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
  +# trailing colons and then remove the whole line if VPATH becomes empty
  +# (actually we leave an empty line to preserve line numbers).
   if test "x$srcdir" = x.; then
  -  ac_vpsub='/^[ 	]*VPATH[ 	]*=[^:]*$/d'
  +  ac_vpsub='/^[	 ]*VPATH[	 ]*=/{
  +s/:*\$(srcdir):*/:/;
  +s/:*\${srcdir}:*/:/;
  +s/:*@srcdir@:*/:/;
  +s/^\([^=]*=[	 ]*\):*/\1/;
  +s/:*$//;
  +s/^[^=]*=[	 ]*$//;
  +}'
   fi
   
  -trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
  -
   DEFS=-DHAVE_CONFIG_H
   
  -# Without the "./", some shells look in PATH for config.status.
  -: ${CONFIG_STATUS=./config.status}
  +ac_libobjs=
  +ac_ltlibobjs=
  +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
  +  # 1. Remove the extension, and $U if already installed.
  +  ac_i=`echo "$ac_i" |
  +	 sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
  +  # 2. Add them.
  +  ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
  +  ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
  +done
  +LIBOBJS=$ac_libobjs
  +
  +LTLIBOBJS=$ac_ltlibobjs
  +
   
  -echo creating $CONFIG_STATUS
  -rm -f $CONFIG_STATUS
  -cat > $CONFIG_STATUS <<EOF
  -#! /bin/sh
  -# Generated automatically by configure.
  +
  +: ${CONFIG_STATUS=./config.status}
  +ac_clean_files_save=$ac_clean_files
  +ac_clean_files="$ac_clean_files $CONFIG_STATUS"
  +{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
  +echo "$as_me: creating $CONFIG_STATUS" >&6;}
  +cat >$CONFIG_STATUS <<_ACEOF
  +#! $SHELL
  +# Generated by $as_me.
   # Run this file to recreate the current configuration.
  -# This directory was configured as follows,
  -# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
  -#
  -# $0 $ac_configure_args
  -#
   # Compiler output produced by configure, useful for debugging
  -# configure, is in ./config.log if it exists.
  +# configure, is in config.log if it exists.
   
  -ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
  -for ac_option
  +debug=false
  +ac_cs_recheck=false
  +ac_cs_silent=false
  +SHELL=\${CONFIG_SHELL-$SHELL}
  +_ACEOF
  +
  +cat >>$CONFIG_STATUS <<\_ACEOF
  +## --------------------- ##
  +## M4sh Initialization.  ##
  +## --------------------- ##
  +
  +# Be Bourne compatible
  +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
  +  emulate sh
  +  NULLCMD=:
  +  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
  +  # is contrary to our usage.  Disable this feature.
  +  alias -g '${1+"$@"}'='"$@"'
  +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
  +  set -o posix
  +fi
  +DUALCASE=1; export DUALCASE # for MKS sh
  +
  +# Support unset when possible.
  +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
  +  as_unset=unset
  +else
  +  as_unset=false
  +fi
  +
  +
  +# Work around bugs in pre-3.0 UWIN ksh.
  +$as_unset ENV MAIL MAILPATH
  +PS1='$ '
  +PS2='> '
  +PS4='+ '
  +
  +# NLS nuisances.
  +for as_var in \
  +  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
  +  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
  +  LC_TELEPHONE LC_TIME
  +do
  +  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
  +    eval $as_var=C; export $as_var
  +  else
  +    $as_unset $as_var
  +  fi
  +done
  +
  +# Required to use basename.
  +if expr a : '\(a\)' >/dev/null 2>&1; then
  +  as_expr=expr
  +else
  +  as_expr=false
  +fi
  +
  +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
  +  as_basename=basename
  +else
  +  as_basename=false
  +fi
  +
  +
  +# Name of the executable.
  +as_me=`$as_basename "$0" ||
  +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
  +	 X"$0" : 'X\(//\)$' \| \
  +	 X"$0" : 'X\(/\)$' \| \
  +	 .     : '\(.\)' 2>/dev/null ||
  +echo X/"$0" |
  +    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
  +  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
  +  	  /^X\/\(\/\).*/{ s//\1/; q; }
  +  	  s/.*/./; q'`
  +
  +
  +# PATH needs CR, and LINENO needs CR and PATH.
  +# Avoid depending upon Character Ranges.
  +as_cr_letters='abcdefghijklmnopqrstuvwxyz'
  +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  +as_cr_Letters=$as_cr_letters$as_cr_LETTERS
  +as_cr_digits='0123456789'
  +as_cr_alnum=$as_cr_Letters$as_cr_digits
  +
  +# The user is always right.
  +if test "${PATH_SEPARATOR+set}" != set; then
  +  echo "#! /bin/sh" >conf$$.sh
  +  echo  "exit 0"   >>conf$$.sh
  +  chmod +x conf$$.sh
  +  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
  +    PATH_SEPARATOR=';'
  +  else
  +    PATH_SEPARATOR=:
  +  fi
  +  rm -f conf$$.sh
  +fi
  +
  +
  +  as_lineno_1=$LINENO
  +  as_lineno_2=$LINENO
  +  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
  +  test "x$as_lineno_1" != "x$as_lineno_2" &&
  +  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
  +  # Find who we are.  Look in the path if we contain no path at all
  +  # relative or not.
  +  case $0 in
  +    *[\\/]* ) as_myself=$0 ;;
  +    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  +for as_dir in $PATH
  +do
  +  IFS=$as_save_IFS
  +  test -z "$as_dir" && as_dir=.
  +  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
  +done
  +
  +       ;;
  +  esac
  +  # We did not find ourselves, most probably we were run as `sh COMMAND'
  +  # in which case we are not to be found in the path.
  +  if test "x$as_myself" = x; then
  +    as_myself=$0
  +  fi
  +  if test ! -f "$as_myself"; then
  +    { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
  +echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
  +   { (exit 1); exit 1; }; }
  +  fi
  +  case $CONFIG_SHELL in
  +  '')
  +    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
  +do
  +  IFS=$as_save_IFS
  +  test -z "$as_dir" && as_dir=.
  +  for as_base in sh bash ksh sh5; do
  +	 case $as_dir in
  +	 /*)
  +	   if ("$as_dir/$as_base" -c '
  +  as_lineno_1=$LINENO
  +  as_lineno_2=$LINENO
  +  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
  +  test "x$as_lineno_1" != "x$as_lineno_2" &&
  +  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
  +	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
  +	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
  +	     CONFIG_SHELL=$as_dir/$as_base
  +	     export CONFIG_SHELL
  +	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
  +	   fi;;
  +	 esac
  +       done
  +done
  +;;
  +  esac
  +
  +  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
  +  # uniformly replaced by the line number.  The first 'sed' inserts a
  +  # line-number line before each line; the second 'sed' does the real
  +  # work.  The second script uses 'N' to pair each line-number line
  +  # with the numbered line, and appends trailing '-' during
  +  # substitution so that $LINENO is not a special case at line end.
  +  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
  +  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
  +  sed '=' <$as_myself |
  +    sed '
  +      N
  +      s,$,-,
  +      : loop
  +      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
  +      t loop
  +      s,-$,,
  +      s,^['$as_cr_digits']*\n,,
  +    ' >$as_me.lineno &&
  +  chmod +x $as_me.lineno ||
  +    { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
  +echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
  +   { (exit 1); exit 1; }; }
  +
  +  # Don't try to exec as it changes $[0], causing all sort of problems
  +  # (the dirname of $[0] is not the place where we might find the
  +  # original and so on.  Autoconf is especially sensible to this).
  +  . ./$as_me.lineno
  +  # Exit status is that of the last command.
  +  exit
  +}
  +
  +
  +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
  +  *c*,-n*) ECHO_N= ECHO_C='
  +' ECHO_T='	' ;;
  +  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
  +  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
  +esac
  +
  +if expr a : '\(a\)' >/dev/null 2>&1; then
  +  as_expr=expr
  +else
  +  as_expr=false
  +fi
  +
  +rm -f conf$$ conf$$.exe conf$$.file
  +echo >conf$$.file
  +if ln -s conf$$.file conf$$ 2>/dev/null; then
  +  # We could just check for DJGPP; but this test a) works b) is more generic
  +  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
  +  if test -f conf$$.exe; then
  +    # Don't use ln at all; we don't have any links
  +    as_ln_s='cp -p'
  +  else
  +    as_ln_s='ln -s'
  +  fi
  +elif ln conf$$.file conf$$ 2>/dev/null; then
  +  as_ln_s=ln
  +else
  +  as_ln_s='cp -p'
  +fi
  +rm -f conf$$ conf$$.exe conf$$.file
  +
  +if mkdir -p . 2>/dev/null; then
  +  as_mkdir_p=:
  +else
  +  test -d ./-p && rmdir ./-p
  +  as_mkdir_p=false
  +fi
  +
  +as_executable_p="test -f"
  +
  +# Sed expression to map a string onto a valid CPP name.
  +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
  +
  +# Sed expression to map a string onto a valid variable name.
  +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
  +
  +
  +# IFS
  +# We need space, tab and new line, in precisely that order.
  +as_nl='
  +'
  +IFS=" 	$as_nl"
  +
  +# CDPATH.
  +$as_unset CDPATH
  +
  +exec 6>&1
  +
  +# Open the log real soon, to keep \$[0] and so on meaningful, and to
  +# report actual input values of CONFIG_FILES etc. instead of their
  +# values after options handling.  Logging --version etc. is OK.
  +exec 5>>config.log
  +{
  +  echo
  +  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
  +## Running $as_me. ##
  +_ASBOX
  +} >&5
  +cat >&5 <<_CSEOF
  +
  +This file was extended by $as_me, which was
  +generated by GNU Autoconf 2.59 (OpenPKG-CURRENT).  Invocation command line was
  +
  +  CONFIG_FILES    = $CONFIG_FILES
  +  CONFIG_HEADERS  = $CONFIG_HEADERS
  +  CONFIG_LINKS    = $CONFIG_LINKS
  +  CONFIG_COMMANDS = $CONFIG_COMMANDS
  +  $ $0 $@
  +
  +_CSEOF
  +echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
  +echo >&5
  +_ACEOF
  +
  +# Files that config.status was made for.
  +if test -n "$ac_config_files"; then
  +  echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
  +fi
  +
  +if test -n "$ac_config_headers"; then
  +  echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
  +fi
  +
  +if test -n "$ac_config_links"; then
  +  echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
  +fi
  +
  +if test -n "$ac_config_commands"; then
  +  echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
  +fi
  +
  +cat >>$CONFIG_STATUS <<\_ACEOF
  +
  +ac_cs_usage="\
  +\`$as_me' instantiates files from templates according to the
  +current configuration.
  +
  +Usage: $0 [OPTIONS] [FILE]...
  +
  +  -h, --help       print this help, then exit
  +  -V, --version    print version number, then exit
  +  -q, --quiet      do not print progress messages
  +  -d, --debug      don't remove temporary files
  +      --recheck    update $as_me by reconfiguring in the same conditions
  +  --file=FILE[:TEMPLATE]
  +		   instantiate the configuration file FILE
  +  --header=FILE[:TEMPLATE]
  +		   instantiate the configuration header FILE
  +
  +Configuration files:
  +$config_files
  +
  +Configuration headers:
  +$config_headers
  +
  +Report bugs to <bug-autoconf@gnu.org>."
  +_ACEOF
  +
  +cat >>$CONFIG_STATUS <<_ACEOF
  +ac_cs_version="\\
  +config.status
  +configured by $0, generated by GNU Autoconf 2.59 (OpenPKG-CURRENT),
  +  with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
  +
  +Copyright (C) 2003 Free Software Foundation, Inc.
  +This config.status script is free software; the Free Software Foundation
  +gives unlimited permission to copy, distribute and modify it."
  +srcdir=$srcdir
  +_ACEOF
  +
  +cat >>$CONFIG_STATUS <<\_ACEOF
  +# If no file are specified by the user, then we need to provide default
  +# value.  By we need to know if files were specified by the user.
  +ac_need_defaults=:
  +while test $# != 0
   do
  -  case "\$ac_option" in
  +  case $1 in
  +  --*=*)
  +    ac_option=`expr "x$1" : 'x\([^=]*\)='`
  +    ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
  +    ac_shift=:
  +    ;;
  +  -*)
  +    ac_option=$1
  +    ac_optarg=$2
  +    ac_shift=shift
  +    ;;
  +  *) # This is not an option, so the user has probably given explicit
  +     # arguments.
  +     ac_option=$1
  +     ac_need_defaults=false;;
  +  esac
  +
  +  case $ac_option in
  +  # Handling of the options.
  +_ACEOF
  +cat >>$CONFIG_STATUS <<\_ACEOF
     -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
  -    echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
  -    exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
  -  -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
  -    echo "$CONFIG_STATUS generated by autoconf version 2.14"
  -    exit 0 ;;
  -  -help | --help | --hel | --he | --h)
  -    echo "\$ac_cs_usage"; exit 0 ;;
  -  *) echo "\$ac_cs_usage"; exit 1 ;;
  +    ac_cs_recheck=: ;;
  +  --version | --vers* | -V )
  +    echo "$ac_cs_version"; exit 0 ;;
  +  --he | --h)
  +    # Conflict between --help and --header
  +    { { echo "$as_me:$LINENO: error: ambiguous option: $1
  +Try \`$0 --help' for more information." >&5
  +echo "$as_me: error: ambiguous option: $1
  +Try \`$0 --help' for more information." >&2;}
  +   { (exit 1); exit 1; }; };;
  +  --help | --hel | -h )
  +    echo "$ac_cs_usage"; exit 0 ;;
  +  --debug | --d* | -d )
  +    debug=: ;;
  +  --file | --fil | --fi | --f )
  +    $ac_shift
  +    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
  +    ac_need_defaults=false;;
  +  --header | --heade | --head | --hea )
  +    $ac_shift
  +    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
  +    ac_need_defaults=false;;
  +  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
  +  | -silent | --silent | --silen | --sile | --sil | --si | --s)
  +    ac_cs_silent=: ;;
  +
  +  # This is an error.
  +  -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
  +Try \`$0 --help' for more information." >&5
  +echo "$as_me: error: unrecognized option: $1
  +Try \`$0 --help' for more information." >&2;}
  +   { (exit 1); exit 1; }; } ;;
  +
  +  *) ac_config_targets="$ac_config_targets $1" ;;
  +
     esac
  +  shift
   done
   
  -ac_given_srcdir=$srcdir
  +ac_configure_extra_args=
  +
  +if $ac_cs_silent; then
  +  exec 6>/dev/null
  +  ac_configure_extra_args="$ac_configure_extra_args --silent"
  +fi
  +
  +_ACEOF
  +cat >>$CONFIG_STATUS <<_ACEOF
  +if \$ac_cs_recheck; then
  +  echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
  +  exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
  +fi
  +
  +_ACEOF
   
  -trap 'rm -fr `echo "Makefile config_sc.h  config_ac.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
  -EOF
  -cat >> $CONFIG_STATUS <<EOF
  -
  -# Protect against being on the right side of a sed subst in config.status.
  -sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
  - s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
  -$ac_vpsub
  -$extrasub
  -s%@SHELL@%$SHELL%g
  -s%@CFLAGS@%$CFLAGS%g
  -s%@CPPFLAGS@%$CPPFLAGS%g
  -s%@CXXFLAGS@%$CXXFLAGS%g
  -s%@FFLAGS@%$FFLAGS%g
  -s%@DEFS@%$DEFS%g
  -s%@LDFLAGS@%$LDFLAGS%g
  -s%@LIBS@%$LIBS%g
  -s%@exec_prefix@%$exec_prefix%g
  -s%@prefix@%$prefix%g
  -s%@program_transform_name@%$program_transform_name%g
  -s%@bindir@%$bindir%g
  -s%@sbindir@%$sbindir%g
  -s%@libexecdir@%$libexecdir%g
  -s%@datadir@%$datadir%g
  -s%@sysconfdir@%$sysconfdir%g
  -s%@sharedstatedir@%$sharedstatedir%g
  -s%@localstatedir@%$localstatedir%g
  -s%@libdir@%$libdir%g
  -s%@includedir@%$includedir%g
  -s%@oldincludedir@%$oldincludedir%g
  -s%@infodir@%$infodir%g
  -s%@mandir@%$mandir%g
  -s%@CC@%$CC%g
  -s%@CPP@%$CPP%g
  -s%@debug@%$debug%g
  -s%@SET_MAKE@%$SET_MAKE%g
  -s%@SHTOOL@%$SHTOOL%g
   
  +
  +
  +
  +cat >>$CONFIG_STATUS <<\_ACEOF
  +for ac_config_target in $ac_config_targets
  +do
  +  case "$ac_config_target" in
  +  # Handling of arguments.
  +  "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
  +  "config_sc.h" ) CONFIG_FILES="$CONFIG_FILES config_sc.h" ;;
  +  "config_ac.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config_ac.h" ;;
  +  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
  +echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
  +   { (exit 1); exit 1; }; };;
  +  esac
  +done
  +
  +# If the user did not use the arguments to specify the items to instantiate,
  +# then the envvar interface is used.  Set only those that are not.
  +# We use the long form for the default assignment because of an extremely
  +# bizarre bug on SunOS 4.1.3.
  +if $ac_need_defaults; then
  +  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
  +  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
  +fi
  +
  +# Have a temporary directory for convenience.  Make it in the build tree
  +# simply because there is no reason to put it here, and in addition,
  +# creating and moving files from /tmp can sometimes cause problems.
  +# Create a temporary directory, and hook for its removal unless debugging.
  +$debug ||
  +{
  +  trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
  +  trap '{ (exit 1); exit 1; }' 1 2 13 15
  +}
  +
  +# Create a (secure) tmp directory for tmp files.
  +
  +{
  +  tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
  +  test -n "$tmp" && test -d "$tmp"
  +}  ||
  +{
  +  tmp=./confstat$$-$RANDOM
  +  (umask 077 && mkdir $tmp)
  +} ||
  +{
  +   echo "$me: cannot create a temporary directory in ." >&2
  +   { (exit 1); exit 1; }
  +}
  +
  +_ACEOF
  +
  +cat >>$CONFIG_STATUS <<_ACEOF
  +
  +#
  +# CONFIG_FILES section.
  +#
  +
  +# No need to generate the scripts if there are no CONFIG_FILES.
  +# This happens for instance when ./config.status config.h
  +if test -n "\$CONFIG_FILES"; then
  +  # Protect against being on the right side of a sed subst in config.status.
  +  sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
  +   s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
  +s,@SHELL@,$SHELL,;t t
  +s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
  +s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
  +s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
  +s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
  +s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
  +s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
  +s,@exec_prefix@,$exec_prefix,;t t
  +s,@prefix@,$prefix,;t t
  +s,@program_transform_name@,$program_transform_name,;t t
  +s,@bindir@,$bindir,;t t
  +s,@sbindir@,$sbindir,;t t
  +s,@libexecdir@,$libexecdir,;t t
  +s,@datadir@,$datadir,;t t
  +s,@sysconfdir@,$sysconfdir,;t t
  +s,@sharedstatedir@,$sharedstatedir,;t t
  +s,@localstatedir@,$localstatedir,;t t
  +s,@libdir@,$libdir,;t t
  +s,@includedir@,$includedir,;t t
  +s,@oldincludedir@,$oldincludedir,;t t
  +s,@infodir@,$infodir,;t t
  +s,@mandir@,$mandir,;t t
  +s,@build_alias@,$build_alias,;t t
  +s,@host_alias@,$host_alias,;t t
  +s,@target_alias@,$target_alias,;t t
  +s,@DEFS@,$DEFS,;t t
  +s,@ECHO_C@,$ECHO_C,;t t
  +s,@ECHO_N@,$ECHO_N,;t t
  +s,@ECHO_T@,$ECHO_T,;t t
  +s,@LIBS@,$LIBS,;t t
  +s,@CC@,$CC,;t t
  +s,@CFLAGS@,$CFLAGS,;t t
  +s,@LDFLAGS@,$LDFLAGS,;t t
  +s,@CPPFLAGS@,$CPPFLAGS,;t t
  +s,@ac_ct_CC@,$ac_ct_CC,;t t
  +s,@EXEEXT@,$EXEEXT,;t t
  +s,@OBJEXT@,$OBJEXT,;t t
  +s,@CPP@,$CPP,;t t
  +s,@debug@,$debug,;t t
  +s,@SET_MAKE@,$SET_MAKE,;t t
  +s,@SHTOOL@,$SHTOOL,;t t
  +s,@EGREP@,$EGREP,;t t
  +s,@LIBOBJS@,$LIBOBJS,;t t
  +s,@LTLIBOBJS@,$LTLIBOBJS,;t t
   CEOF
  -EOF
   
  -cat >> $CONFIG_STATUS <<\EOF
  +_ACEOF
   
  -# Split the substitutions into bite-sized pieces for seds with
  -# small command number limits, like on Digital OSF/1 and HP-UX.
  -ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
  -ac_file=1 # Number of current file.
  -ac_beg=1 # First line for current file.
  -ac_end=$ac_max_sed_cmds # Line after last line for current file.
  -ac_more_lines=:
  -ac_sed_cmds=""
  -while $ac_more_lines; do
  -  if test $ac_beg -gt 1; then
  -    sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
  -  else
  -    sed "${ac_end}q" conftest.subs > conftest.s$ac_file
  -  fi
  -  if test ! -s conftest.s$ac_file; then
  -    ac_more_lines=false
  -    rm -f conftest.s$ac_file
  -  else
  -    if test -z "$ac_sed_cmds"; then
  -      ac_sed_cmds="sed -f conftest.s$ac_file"
  +  cat >>$CONFIG_STATUS <<\_ACEOF
  +  # Split the substitutions into bite-sized pieces for seds with
  +  # small command number limits, like on Digital OSF/1 and HP-UX.
  +  ac_max_sed_lines=48
  +  ac_sed_frag=1 # Number of current file.
  +  ac_beg=1 # First line for current file.
  +  ac_end=$ac_max_sed_lines # Line after last line for current file.
  +  ac_more_lines=:
  +  ac_sed_cmds=
  +  while $ac_more_lines; do
  +    if test $ac_beg -gt 1; then
  +      sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
  +    else
  +      sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
  +    fi
  +    if test ! -s $tmp/subs.frag; then
  +      ac_more_lines=false
       else
  -      ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
  +      # The purpose of the label and of the branching condition is to
  +      # speed up the sed processing (if there are no `@' at all, there
  +      # is no need to browse any of the substitutions).
  +      # These are the two extra sed commands mentioned above.
  +      (echo ':t
  +  /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
  +      if test -z "$ac_sed_cmds"; then
  +	ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
  +      else
  +	ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
  +      fi
  +      ac_sed_frag=`expr $ac_sed_frag + 1`
  +      ac_beg=$ac_end
  +      ac_end=`expr $ac_end + $ac_max_sed_lines`
       fi
  -    ac_file=`expr $ac_file + 1`
  -    ac_beg=$ac_end
  -    ac_end=`expr $ac_end + $ac_max_sed_cmds`
  +  done
  +  if test -z "$ac_sed_cmds"; then
  +    ac_sed_cmds=cat
     fi
  -done
  -if test -z "$ac_sed_cmds"; then
  -  ac_sed_cmds=cat
  -fi
  -EOF
  +fi # test -n "$CONFIG_FILES"
   
  -cat >> $CONFIG_STATUS <<EOF
  -
  -CONFIG_FILES=\${CONFIG_FILES-"Makefile config_sc.h "}
  -EOF
  -cat >> $CONFIG_STATUS <<\EOF
  -for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
  +_ACEOF
  +cat >>$CONFIG_STATUS <<\_ACEOF
  +for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
     # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
  -  case "$ac_file" in
  -  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
  -       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
  -  *) ac_file_in="${ac_file}.in" ;;
  +  case $ac_file in
  +  - | *:- | *:-:* ) # input from stdin
  +	cat >$tmp/stdin
  +	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
  +	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
  +  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
  +	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
  +  * )   ac_file_in=$ac_file.in ;;
     esac
   
  -  # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
  -
  -  # Remove last slash and all that follows it.  Not all systems have dirname.
  -  ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
  -  if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
  -    # The file is in a subdirectory.
  -    test ! -d "$ac_dir" && mkdir "$ac_dir"
  -    ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
  -    # A "../" for each directory in $ac_dir_suffix.
  -    ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
  -  else
  -    ac_dir_suffix= ac_dots=
  -  fi
  -
  -  case "$ac_given_srcdir" in
  -  .)  srcdir=.
  -      if test -z "$ac_dots"; then top_srcdir=.
  -      else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
  -  /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
  +  # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
  +  ac_dir=`(dirname "$ac_file") 2>/dev/null ||
  +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
  +	 X"$ac_file" : 'X\(//\)[^/]' \| \
  +	 X"$ac_file" : 'X\(//\)$' \| \
  +	 X"$ac_file" : 'X\(/\)' \| \
  +	 .     : '\(.\)' 2>/dev/null ||
  +echo X"$ac_file" |
  +    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
  +  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
  +  	  /^X\(\/\/\)$/{ s//\1/; q; }
  +  	  /^X\(\/\).*/{ s//\1/; q; }
  +  	  s/.*/./; q'`
  +  { if $as_mkdir_p; then
  +    mkdir -p "$ac_dir"
  +  else
  +    as_dir="$ac_dir"
  +    as_dirs=
  +    while test ! -d "$as_dir"; do
  +      as_dirs="$as_dir $as_dirs"
  +      as_dir=`(dirname "$as_dir") 2>/dev/null ||
  +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
  +	 X"$as_dir" : 'X\(//\)[^/]' \| \
  +	 X"$as_dir" : 'X\(//\)$' \| \
  +	 X"$as_dir" : 'X\(/\)' \| \
  +	 .     : '\(.\)' 2>/dev/null ||
  +echo X"$as_dir" |
  +    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
  +  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
  +  	  /^X\(\/\/\)$/{ s//\1/; q; }
  +  	  /^X\(\/\).*/{ s//\1/; q; }
  +  	  s/.*/./; q'`
  +    done
  +    test ! -n "$as_dirs" || mkdir $as_dirs
  +  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
  +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
  +   { (exit 1); exit 1; }; }; }
  +
  +  ac_builddir=.
  +
  +if test "$ac_dir" != .; then
  +  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
  +  # A "../" for each directory in $ac_dir_suffix.
  +  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
  +else
  +  ac_dir_suffix= ac_top_builddir=
  +fi
  +
  +case $srcdir in
  +  .)  # No --srcdir option.  We are building in place.
  +    ac_srcdir=.
  +    if test -z "$ac_top_builddir"; then
  +       ac_top_srcdir=.
  +    else
  +       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
  +    fi ;;
  +  [\\/]* | ?:[\\/]* )  # Absolute path.
  +    ac_srcdir=$srcdir$ac_dir_suffix;
  +    ac_top_srcdir=$srcdir ;;
     *) # Relative path.
  -    srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
  -    top_srcdir="$ac_dots$ac_given_srcdir" ;;
  -  esac
  +    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
  +    ac_top_srcdir=$ac_top_builddir$srcdir ;;
  +esac
  +
  +# Do not use `cd foo && pwd` to compute absolute paths, because
  +# the directories may not exist.
  +case `pwd` in
  +.) ac_abs_builddir="$ac_dir";;
  +*)
  +  case "$ac_dir" in
  +  .) ac_abs_builddir=`pwd`;;
  +  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
  +  *) ac_abs_builddir=`pwd`/"$ac_dir";;
  +  esac;;
  +esac
  +case $ac_abs_builddir in
  +.) ac_abs_top_builddir=${ac_top_builddir}.;;
  +*)
  +  case ${ac_top_builddir}. in
  +  .) ac_abs_top_builddir=$ac_abs_builddir;;
  +  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
  +  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
  +  esac;;
  +esac
  +case $ac_abs_builddir in
  +.) ac_abs_srcdir=$ac_srcdir;;
  +*)
  +  case $ac_srcdir in
  +  .) ac_abs_srcdir=$ac_abs_builddir;;
  +  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
  +  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
  +  esac;;
  +esac
  +case $ac_abs_builddir in
  +.) ac_abs_top_srcdir=$ac_top_srcdir;;
  +*)
  +  case $ac_top_srcdir in
  +  .) ac_abs_top_srcdir=$ac_abs_builddir;;
  +  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
  +  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
  +  esac;;
  +esac
   
   
  -  echo creating "$ac_file"
  -  rm -f "$ac_file"
  -  configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
  -  case "$ac_file" in
  -  *Makefile*) ac_comsub="1i\\
  -# $configure_input" ;;
  -  *) ac_comsub= ;;
  -  esac
   
  -  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
  -  sed -e "$ac_comsub
  -s%@configure_input@%$configure_input%g
  -s%@srcdir@%$srcdir%g
  -s%@top_srcdir@%$top_srcdir%g
  -" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
  -fi; done
  -rm -f conftest.s*
  +  if test x"$ac_file" != x-; then
  +    { echo "$as_me:$LINENO: creating $ac_file" >&5
  +echo "$as_me: creating $ac_file" >&6;}
  +    rm -f "$ac_file"
  +  fi
  +  # Let's still pretend it is `configure' which instantiates (i.e., don't
  +  # use $as_me), people would be surprised to read:
  +  #    /* config.h.  Generated by config.status.  */
  +  if test x"$ac_file" = x-; then
  +    configure_input=
  +  else
  +    configure_input="$ac_file.  "
  +  fi
  +  configure_input=$configure_input"Generated from `echo $ac_file_in |
  +				     sed 's,.*/,,'` by configure."
  +
  +  # First look for the input files in the build tree, otherwise in the
  +  # src tree.
  +  ac_file_inputs=`IFS=:
  +    for f in $ac_file_in; do
  +      case $f in
  +      -) echo $tmp/stdin ;;
  +      [\\/$]*)
  +	 # Absolute (can't be DOS-style, as IFS=:)
  +	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
  +echo "$as_me: error: cannot find input file: $f" >&2;}
  +   { (exit 1); exit 1; }; }
  +	 echo "$f";;
  +      *) # Relative
  +	 if test -f "$f"; then
  +	   # Build tree
  +	   echo "$f"
  +	 elif test -f "$srcdir/$f"; then
  +	   # Source tree
  +	   echo "$srcdir/$f"
  +	 else
  +	   # /dev/null tree
  +	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
  +echo "$as_me: error: cannot find input file: $f" >&2;}
  +   { (exit 1); exit 1; }; }
  +	 fi;;
  +      esac
  +    done` || { (exit 1); exit 1; }
  +_ACEOF
  +cat >>$CONFIG_STATUS <<_ACEOF
  +  sed "$ac_vpsub
  +$extrasub
  +_ACEOF
  +cat >>$CONFIG_STATUS <<\_ACEOF
  +:t
  +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
  +s,@configure_input@,$configure_input,;t t
  +s,@srcdir@,$ac_srcdir,;t t
  +s,@abs_srcdir@,$ac_abs_srcdir,;t t
  +s,@top_srcdir@,$ac_top_srcdir,;t t
  +s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
  +s,@builddir@,$ac_builddir,;t t
  +s,@abs_builddir@,$ac_abs_builddir,;t t
  +s,@top_builddir@,$ac_top_builddir,;t t
  +s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
  +" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
  +  rm -f $tmp/stdin
  +  if test x"$ac_file" != x-; then
  +    mv $tmp/out $ac_file
  +  else
  +    cat $tmp/out
  +    rm -f $tmp/out
  +  fi
  +
  +done
  +_ACEOF
  +cat >>$CONFIG_STATUS <<\_ACEOF
  +
  +#
  +# CONFIG_HEADER section.
  +#
   
   # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
   # NAME is the cpp macro being defined and VALUE is the value it is being given.
   #
   # ac_d sets the value in "#define NAME VALUE" lines.
  -ac_dA='s%^\([ 	]*\)#\([ 	]*define[ 	][ 	]*\)'
  -ac_dB='\([ 	][ 	]*\)[^ 	]*%\1#\2'
  -ac_dC='\3'
  -ac_dD='%g'
  -# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
  -ac_uA='s%^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
  -ac_uB='\([ 	]\)%\1#\2define\3'
  +ac_dA='s,^\([	 ]*\)#\([	 ]*define[	 ][	 ]*\)'
  +ac_dB='[	 ].*$,\1#\2'
  +ac_dC=' '
  +ac_dD=',;t'
  +# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
  +ac_uA='s,^\([	 ]*\)#\([	 ]*\)undef\([	 ][	 ]*\)'
  +ac_uB='$,\1#\2define\3'
   ac_uC=' '
  -ac_uD='\4%g'
  -# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
  -ac_eA='s%^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
  -ac_eB='$%\1#\2define\3'
  -ac_eC=' '
  -ac_eD='%g'
  -
  -if test "${CONFIG_HEADERS+set}" != set; then
  -EOF
  -cat >> $CONFIG_STATUS <<EOF
  -  CONFIG_HEADERS="config_ac.h"
  -EOF
  -cat >> $CONFIG_STATUS <<\EOF
  -fi
  -for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
  +ac_uD=',;t'
  +
  +for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
     # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
  -  case "$ac_file" in
  -  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
  -       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
  -  *) ac_file_in="${ac_file}.in" ;;
  +  case $ac_file in
  +  - | *:- | *:-:* ) # input from stdin
  +	cat >$tmp/stdin
  +	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
  +	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
  +  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
  +	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
  +  * )   ac_file_in=$ac_file.in ;;
     esac
   
  -  echo creating $ac_file
  +  test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
  +echo "$as_me: creating $ac_file" >&6;}
   
  -  rm -f conftest.frag conftest.in conftest.out
  -  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
  -  cat $ac_file_inputs > conftest.in
  -
  -EOF
  -
  -# Transform confdefs.h into a sed script conftest.vals that substitutes
  -# the proper values into config.h.in to produce config.h.  And first:
  -# Protect against being on the right side of a sed subst in config.status.
  -# Protect against being in an unquoted here document in config.status.
  -rm -f conftest.vals
  -cat > conftest.hdr <<\EOF
  -s/[\\&%]/\\&/g
  -s%[\\$`]%\\&%g
  -s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
  -s%ac_d%ac_u%gp
  -s%ac_u%ac_e%gp
  -EOF
  -sed -n -f conftest.hdr confdefs.h > conftest.vals
  -rm -f conftest.hdr
  +  # First look for the input files in the build tree, otherwise in the
  +  # src tree.
  +  ac_file_inputs=`IFS=:
  +    for f in $ac_file_in; do
  +      case $f in
  +      -) echo $tmp/stdin ;;
  +      [\\/$]*)
  +	 # Absolute (can't be DOS-style, as IFS=:)
  +	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
  +echo "$as_me: error: cannot find input file: $f" >&2;}
  +   { (exit 1); exit 1; }; }
  +	 # Do quote $f, to prevent DOS paths from being IFS'd.
  +	 echo "$f";;
  +      *) # Relative
  +	 if test -f "$f"; then
  +	   # Build tree
  +	   echo "$f"
  +	 elif test -f "$srcdir/$f"; then
  +	   # Source tree
  +	   echo "$srcdir/$f"
  +	 else
  +	   # /dev/null tree
  +	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
  +echo "$as_me: error: cannot find input file: $f" >&2;}
  +   { (exit 1); exit 1; }; }
  +	 fi;;
  +      esac
  +    done` || { (exit 1); exit 1; }
  +  # Remove the trailing spaces.
  +  sed 's/[	 ]*$//' $ac_file_inputs >$tmp/in
  +
  +_ACEOF
  +
  +# Transform confdefs.h into two sed scripts, `conftest.defines' and
  +# `conftest.undefs', that substitutes the proper values into
  +# config.h.in to produce config.h.  The first handles `#define'
  +# templates, and the second `#undef' templates.
  +# And first: Protect against being on the right side of a sed subst in
  +# config.status.  Protect against being in an unquoted here document
  +# in config.status.
  +rm -f conftest.defines conftest.undefs
  +# Using a here document instead of a string reduces the quoting nightmare.
  +# Putting comments in sed scripts is not portable.
  +#
  +# `end' is used to avoid that the second main sed command (meant for
  +# 0-ary CPP macros) applies to n-ary macro definitions.
  +# See the Autoconf documentation for `clear'.
  +cat >confdef2sed.sed <<\_ACEOF
  +s/[\\&,]/\\&/g
  +s,[\\$`],\\&,g
  +t clear
  +: clear
  +s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 (][^	 (]*\)\(([^)]*)\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
  +t end
  +s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 ][^	 ]*\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
  +: end
  +_ACEOF
  +# If some macros were called several times there might be several times
  +# the same #defines, which is useless.  Nevertheless, we may not want to
  +# sort them, since we want the *last* AC-DEFINE to be honored.
  +uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
  +sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
  +rm -f confdef2sed.sed
   
   # This sed command replaces #undef with comments.  This is necessary, for
   # example, in the case of _POSIX_SOURCE, which is predefined and required
   # on some systems where configure will not decide to define it.
  -cat >> conftest.vals <<\EOF
  -s%^[ 	]*#[ 	]*undef[ 	][ 	]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
  -EOF
  -
  -# Break up conftest.vals because some shells have a limit on
  -# the size of here documents, and old seds have small limits too.
  -
  +cat >>conftest.undefs <<\_ACEOF
  +s,^[	 ]*#[	 ]*undef[	 ][	 ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
  +_ACEOF
  +
  +# Break up conftest.defines because some shells have a limit on the size
  +# of here documents, and old seds have small limits too (100 cmds).
  +echo '  # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
  +echo '  if grep "^[	 ]*#[	 ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
  +echo '  # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
  +echo '  :' >>$CONFIG_STATUS
   rm -f conftest.tail
  -while :
  +while grep . conftest.defines >/dev/null
   do
  -  ac_lines=`grep -c . conftest.vals`
  -  # grep -c gives empty output for an empty file on some AIX systems.
  -  if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
  -  # Write a limited-size here document to conftest.frag.
  -  echo '  cat > conftest.frag <<CEOF' >> $CONFIG_STATUS
  -  sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
  +  # Write a limited-size here document to $tmp/defines.sed.
  +  echo '  cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
  +  # Speed up: don't consider the non `#define' lines.
  +  echo '/^[	 ]*#[	 ]*define/!b' >>$CONFIG_STATUS
  +  # Work around the forget-to-reset-the-flag bug.
  +  echo 't clr' >>$CONFIG_STATUS
  +  echo ': clr' >>$CONFIG_STATUS
  +  sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
     echo 'CEOF
  -  sed -f conftest.frag conftest.in > conftest.out
  -  rm -f conftest.in
  -  mv conftest.out conftest.in
  -' >> $CONFIG_STATUS
  -  sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
  -  rm -f conftest.vals
  -  mv conftest.tail conftest.vals
  -done
  -rm -f conftest.vals
  -
  -cat >> $CONFIG_STATUS <<\EOF
  -  rm -f conftest.frag conftest.h
  -  echo "/* $ac_file.  Generated automatically by configure.  */" > conftest.h
  -  cat conftest.in >> conftest.h
  -  rm -f conftest.in
  -  if cmp -s $ac_file conftest.h 2>/dev/null; then
  -    echo "$ac_file is unchanged"
  -    rm -f conftest.h
  -  else
  -    # Remove last slash and all that follows it.  Not all systems have dirname.
  -      ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
  -      if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
  -      # The file is in a subdirectory.
  -      test ! -d "$ac_dir" && mkdir "$ac_dir"
  -    fi
  -    rm -f $ac_file
  -    mv conftest.h $ac_file
  +  sed -f $tmp/defines.sed $tmp/in >$tmp/out
  +  rm -f $tmp/in
  +  mv $tmp/out $tmp/in
  +' >>$CONFIG_STATUS
  +  sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
  +  rm -f conftest.defines
  +  mv conftest.tail conftest.defines
  +done
  +rm -f conftest.defines
  +echo '  fi # grep' >>$CONFIG_STATUS
  +echo >>$CONFIG_STATUS
  +
  +# Break up conftest.undefs because some shells have a limit on the size
  +# of here documents, and old seds have small limits too (100 cmds).
  +echo '  # Handle all the #undef templates' >>$CONFIG_STATUS
  +rm -f conftest.tail
  +while grep . conftest.undefs >/dev/null
  +do
  +  # Write a limited-size here document to $tmp/undefs.sed.
  +  echo '  cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
  +  # Speed up: don't consider the non `#undef'
  +  echo '/^[	 ]*#[	 ]*undef/!b' >>$CONFIG_STATUS
  +  # Work around the forget-to-reset-the-flag bug.
  +  echo 't clr' >>$CONFIG_STATUS
  +  echo ': clr' >>$CONFIG_STATUS
  +  sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
  +  echo 'CEOF
  +  sed -f $tmp/undefs.sed $tmp/in >$tmp/out
  +  rm -f $tmp/in
  +  mv $tmp/out $tmp/in
  +' >>$CONFIG_STATUS
  +  sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
  +  rm -f conftest.undefs
  +  mv conftest.tail conftest.undefs
  +done
  +rm -f conftest.undefs
  +
  +cat >>$CONFIG_STATUS <<\_ACEOF
  +  # Let's still pretend it is `configure' which instantiates (i.e., don't
  +  # use $as_me), people would be surprised to read:
  +  #    /* config.h.  Generated by config.status.  */
  +  if test x"$ac_file" = x-; then
  +    echo "/* Generated by configure.  */" >$tmp/config.h
  +  else
  +    echo "/* $ac_file.  Generated by configure.  */" >$tmp/config.h
     fi
  -fi; done
  +  cat $tmp/in >>$tmp/config.h
  +  rm -f $tmp/in
  +  if test x"$ac_file" != x-; then
  +    if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
  +      { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
  +echo "$as_me: $ac_file is unchanged" >&6;}
  +    else
  +      ac_dir=`(dirname "$ac_file") 2>/dev/null ||
  +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
  +	 X"$ac_file" : 'X\(//\)[^/]' \| \
  +	 X"$ac_file" : 'X\(//\)$' \| \
  +	 X"$ac_file" : 'X\(/\)' \| \
  +	 .     : '\(.\)' 2>/dev/null ||
  +echo X"$ac_file" |
  +    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
  +  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
  +  	  /^X\(\/\/\)$/{ s//\1/; q; }
  +  	  /^X\(\/\).*/{ s//\1/; q; }
  +  	  s/.*/./; q'`
  +      { if $as_mkdir_p; then
  +    mkdir -p "$ac_dir"
  +  else
  +    as_dir="$ac_dir"
  +    as_dirs=
  +    while test ! -d "$as_dir"; do
  +      as_dirs="$as_dir $as_dirs"
  +      as_dir=`(dirname "$as_dir") 2>/dev/null ||
  +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
  +	 X"$as_dir" : 'X\(//\)[^/]' \| \
  +	 X"$as_dir" : 'X\(//\)$' \| \
  +	 X"$as_dir" : 'X\(/\)' \| \
  +	 .     : '\(.\)' 2>/dev/null ||
  +echo X"$as_dir" |
  +    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
  +  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
  +  	  /^X\(\/\/\)$/{ s//\1/; q; }
  +  	  /^X\(\/\).*/{ s//\1/; q; }
  +  	  s/.*/./; q'`
  +    done
  +    test ! -n "$as_dirs" || mkdir $as_dirs
  +  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
  +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
  +   { (exit 1); exit 1; }; }; }
   
  -EOF
  -cat >> $CONFIG_STATUS <<EOF
  +      rm -f $ac_file
  +      mv $tmp/config.h $ac_file
  +    fi
  +  else
  +    cat $tmp/config.h
  +    rm -f $tmp/config.h
  +  fi
  +done
  +_ACEOF
   
  -EOF
  -cat >> $CONFIG_STATUS <<\EOF
  +cat >>$CONFIG_STATUS <<\_ACEOF
   
  -exit 0
  -EOF
  +{ (exit 0); exit 0; }
  +_ACEOF
   chmod +x $CONFIG_STATUS
  -rm -fr confdefs* $ac_clean_files
  -test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
  +ac_clean_files=$ac_clean_files_save
  +
  +
  +# configure is writing to config.log, and then calls config.status.
  +# config.status does its own redirection, appending to config.log.
  +# Unfortunately, on DOS this fails, as config.log is still kept open
  +# by configure, so config.status won't be able to write to it; its
  +# output is simply discarded.  So we exec the FD to /dev/null,
  +# effectively closing config.log, so it can be properly (re)opened and
  +# appended to by config.status.  When coming back to configure, we
  +# need to make the FD available again.
  +if test "$no_create" != yes; then
  +  ac_cs_success=:
  +  ac_config_status_args=
  +  test "$silent" = yes &&
  +    ac_config_status_args="$ac_config_status_args --quiet"
  +  exec 5>/dev/null
  +  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
  +  exec 5>>config.log
  +  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
  +  # would make configure fail if this is the last instruction.
  +  $ac_cs_success || { (exit 1); exit 1; }
  +fi
   
   echo ""
   echo "Now please type 'make' to compile. Good luck."
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/configure.in
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 configure.in
  --- ossp-pkg/iselect/configure.in	25 Jul 2000 11:53:24 -0000	1.2
  +++ ossp-pkg/iselect/configure.in	11 Sep 2004 15:18:49 -0000	1.3
  @@ -1,17 +1,17 @@
  -nl ##
  +dnl ##
   dnl ##  configure.in -- GNU autoconf configuration spec
  -dnl ##  Copyright (c) Ralf S. Engelschall, <rse@engelschall.com>
  +dnl ##  Copyright (c) Ralf S. Engelschall <rse@engelschall.com>
   dnl ##
   
  -AC_PREREQ(2.10)dnl
  -AC_REVISION($Revision: 1.2 $)
  +AC_PREREQ(2.50)dnl
  +AC_REVISION(1.0)dnl
  +AC_INIT(README)
   SHTOOL="./etc/shtool"
   T_MD=`$SHTOOL echo -e %B 2>/dev/null`
   T_ME=`$SHTOOL echo -e %b 2>/dev/null`
   echo "${T_MD}Configuring for iSelect `./etc/shtool version -lc -dlong iselect_version.c`${T_ME}"
  -echo "Copyright (c) 1996-1999 Ralf S. Engelschall, All Rights Reserved."
  +echo "Copyright (c) 1997-2004 Ralf S. Engelschall <rse@engelschall.com>"
   
  -AC_INIT(README)
   AC_CONFIG_HEADER(config_ac.h)dnl
   AC_PREFIX_DEFAULT(/usr/local)
   
  @@ -24,8 +24,8 @@
   AC_ARG_ENABLE(debug,dnl
   [  --enable-debug          to enable the debugging options for compilation],
   x="enabled"
  -CFLAGS="-Wall -g -ggdb3"
  -LDFLAGS="-g -ggdb3"
  +CFLAGS="-Wall -g"
  +LDFLAGS="-g"
   debug=on
   ,
   x=disabled
  @@ -61,7 +61,7 @@
   )dnl
   AC_MSG_RESULT([$x])
   
  -AC_CHECK_HEADER(ncurses.h, HAVE_NCURSES_HEADER=YES, HAVE_NCURSES_HEADER=NO)
  +AC_CHECK_HEADER(ncurses/ncurses.h, HAVE_NCURSES_HEADER=YES, HAVE_NCURSES_HEADER=NO)
   AC_CHECK_LIB(ncurses, initscr, HAVE_NCURSES_LIB=YES, HAVE_NCURSES_LIB=NO)
   AC_CHECK_HEADER(slcurses.h, HAVE_SLCURSES_HEADER=YES, HAVE_SLCURSES_HEADER=NO)
   OLIBS=$LIBS
  @@ -70,20 +70,20 @@
   LIBS=$OLIBS
   if test ".$HAVE_NCURSES_HEADER.$HAVE_NCURSES_LIB." = .YES.YES.; then
       USE_NCURSES=YES
  -    AC_DEFINE(USE_NCURSES)
  +    AC_DEFINE(USE_NCURSES, 1, [use NCurses])
       LIBS="$LIBS -lncurses"
       AC_MSG_CHECKING([which Curses to use])
       AC_MSG_RESULT([GNU NCurses])
   else
       if test ".$HAVE_SLCURSES_HEADER.$HAVE_SLCURSES_LIB." = .YES.YES.; then
           USE_SLCURSES=YES
  -        AC_DEFINE(USE_SLCURSES)
  +        AC_DEFINE(USE_SLCURSES, 1, [use SLcurses])
           LIBS="$LIBS -lslang -ltermcap"
           AC_MSG_CHECKING([which Curses to use])
           AC_MSG_RESULT([S-Lang Curses])
       else
           USE_CURSES=YES
  -        AC_DEFINE(USE_CURSES)
  +        AC_DEFINE(USE_CURSES, 1, [use plain Curses])
           LIBS="$LIBS -lcurses"
           AC_MSG_CHECKING([which Curses to use])
           AC_MSG_RESULT([Vendor Curses])
  @@ -106,4 +106,3 @@
   echo "Now please type 'make' to compile. Good luck."
   echo ""
   
  -dnl ##EOF##
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/etc/asc2c
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 asc2c
  --- ossp-pkg/iselect/etc/asc2c	16 Sep 1997 14:59:11 -0000	1.1.1.1
  +++ ossp-pkg/iselect/etc/asc2c	11 Sep 2004 15:18:56 -0000	1.2
  @@ -1,4 +1,4 @@
  -#!/sw/bin/perl
  +#!/usr/bin/env perl
   ##
   ##  asc2c -- convert an ASCII file into a statically initialised
   ##           C array of characters
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/etc/shtool
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 shtool
  --- ossp-pkg/iselect/etc/shtool	31 Mar 1999 06:29:31 -0000	1.1.1.1
  +++ ossp-pkg/iselect/etc/shtool	11 Sep 2004 15:18:56 -0000	1.2
  @@ -1,827 +1,1659 @@
   #!/bin/sh
   ##
  -##  shtool -- Shell Tool Collection
  -##  Copyright (c) 1994-1999 Ralf S. Engelschall, All Rights Reserved.
  +##  GNU shtool -- The GNU Portable Shell Tool
  +##  Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
  -##  Usage: shtool <command> <command_arguments>
  +##  See http://www.gnu.org/software/shtool/ for more information.
  +##  See ftp://ftp.gnu.org/gnu/shtool/ for latest version.
  +##
  +##  Version:  2.0.1 (11-Aug-2004)
  +##  Contents: all available modules
  +##
  +
  +##
  +##  This program is free software; you can redistribute it and/or modify
  +##  it under the terms of the GNU General Public License as published by
  +##  the Free Software Foundation; either version 2 of the License, or
  +##  (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this program; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  NOTICE: Given that you include this file verbatim into your own
  +##  source tree, you are justified in saying that it remains separate
  +##  from your package, and that this way you are simply just using GNU
  +##  shtool. So, in this situation, there is no requirement that your
  +##  package itself is licensed under the GNU General Public License in
  +##  order to take advantage of GNU shtool.
  +##
  +
  +##
  +##  Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]
   ##
   ##  Available commands:
  -##  becho        echo command using terminal bold mode
  -##  buildinfo    Determine Build Information
  -##  checkheader  Check whether a C header file exists
  -##  findcpp      Find out how to _directly_ run the C Pre-Processor (CPP)
  -##  findperl     Find a reasonable Perl interpreter
  -##  findprg      find one or more programs somwhere in PATH
  -##  fixperm      Fix file permission inside a source tree
  -##  fp2rp        Convert a Unix forward file path to a reverse dotted path
  -##  guessos      Simple OS/Platform guesser
  -##  install      Install a program, script or datafile
  -##  mkdir        Make a directory plus it's hierarchy
  -##  mkshadow     Create a shadow tree
  -##  newvers      Generate and maintain a version information file
  -##  ppl          Pretty print a colon-sperarated list by avoiding tr and fmt
  -##  slo          Separate Linker Options by library class
  +##    echo       Print string with optional construct expansion
  +##    mdate      Pretty-print modification time of a file or dir
  +##    table      Pretty-print a field-separated list as a table
  +##    prop       Display progress with a running propeller
  +##    move       Move files with simultaneous substitution
  +##    install    Install a program, script or datafile
  +##    mkdir      Make one or more directories
  +##    mkln       Make link with calculation of relative paths
  +##    mkshadow   Make a shadow tree through symbolic links
  +##    fixperm    Fix file permissions inside a source tree
  +##    rotate     Logfile rotation
  +##    tarball    Roll distribution tarballs
  +##    subst      Apply sed(1) substitution operations
  +##    platform   Platform Identification Utility
  +##    arx        Extended archive command
  +##    slo        Separate linker options by library class
  +##    scpp       Sharing C Pre-Processor
  +##    version    Maintain a version information file
  +##    path       Deal with program paths
   ##
   
   if [ $# -eq 0 ]; then
  -    echo 'shtool becho [-n] [-b] [-e] <text> [...]'
  -    echo 'shtool buildinfo [-n] <format-string>'
  -    echo 'shtool checkheader '
  -    echo 'shtool findcpp '
  -    echo 'shtool findperl '
  -    echo 'shtool findprg [-s] [-pPATH] <program> [<program>]'
  -    echo 'shtool fixperm <file-or-dir> [<file-or-dir>]'
  -    echo 'shtool fp2rp <path>'
  -    echo 'shtool guessos '
  -    echo 'shtool install [-c] [-m <mode>] [-o <owner>] [-g <group>] [-s] [-S <stripflags>] <file> <dir>'
  -    echo 'shtool mkdir <dir>'
  -    echo 'shtool mkshadow <srcdir> <dstdir>'
  -    echo 'shtool newvers [-l <lang>] [-n <name>] [-p <prefix>] [-r <v>.<r>[.pb]<p>] [-i v|r|P|p|b|a|s] [-d short|long|libtool|hex] <file>'
  -    echo 'shtool ppl '
  -    echo 'shtool slo ... -Lxx -lxx ...'
  +    echo "$0:Error: invalid command line" 1>&2
  +    echo "$0:Hint:  run \`$0 -h' for usage" 1>&2
       exit 1
   fi
  -util=$1
  -shift
  -case $util in
  -
  -becho )
  -    begin=no
  -    end=no
  -    nl="\n"
  -    text=''
  -    while [ ".$1" != . ]; do
  -        case $1 in
  -            -b) begin=yes; shift; continue ;;
  -            -e) end=yes;   shift; continue ;;
  -            -n) nl="";     shift; continue ;;
  -             *) break;
  +if [ ".$1" = ".-h" ] || [ ".$1" = ".--help" ]; then
  +    echo "This is GNU shtool, version 2.0.1 (11-Aug-2004)"
  +    echo "Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>"
  +    echo "Report bugs to <bug-shtool@gnu.org>"
  +    echo ''
  +    echo "Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]"
  +    echo ''
  +    echo 'Available global <options>:'
  +    echo '  -v, --version   display shtool version information'
  +    echo '  -h, --help      display shtool usage help page (this one)'
  +    echo '  -d, --debug     display shell trace information'
  +    echo '  -r, --recreate  recreate this shtool script via shtoolize'
  +    echo ''
  +    echo 'Available <cmd-name> [<cmd-options>] [<cmd-args>]:'
  +    echo '  echo     [-n|--newline] [-e|--expand] [<string> ...]'
  +    echo '  mdate    [-n|--newline] [-z|--zero] [-s|--shorten] [-d|--digits]'
  +    echo '           [-f|--field-sep <str>] [-o|--order <spec>] <path>'
  +    echo '  table    [-F|--field-sep <sep>] [-w|--width <width>] [-c|--columns'
  +    echo '           <cols>] [-s|--strip <strip>] <str><sep><str>...'
  +    echo '  prop     [-p|--prefix <str>]'
  +    echo '  move     [-v|--verbose] [-t|--trace] [-e|--expand] [-p|--preserve]'
  +    echo '           <src-file> <dst-file>'
  +    echo '  install  [-v|--verbose] [-t|--trace] [-d|--mkdir] [-c|--copy]'
  +    echo '           [-C|--compare-copy] [-s|--strip] [-m|--mode <mode>]'
  +    echo '           [-o|--owner <owner>] [-g|--group <group>] [-e|--exec'
  +    echo '           <sed-cmd>] <file> [<file> ...] <path>'
  +    echo '  mkdir    [-t|--trace] [-f|--force] [-p|--parents] [-m|--mode'
  +    echo '           <mode>] [-o|--owner <owner>] [-g|--group <group>] <dir>'
  +    echo '           [<dir> ...]'
  +    echo '  mkln     [-t|--trace] [-f|--force] [-s|--symbolic] <src-path>'
  +    echo '           [<src-path> ...] <dst-path>'
  +    echo '  mkshadow [-v|--verbose] [-t|--trace] [-a|--all] <src-dir> <dst-dir>'
  +    echo '  fixperm  [-v|--verbose] [-t|--trace] <path> [<path> ...]'
  +    echo '  rotate   [-v|--verbose] [-t|--trace] [-f|--force] [-n|--num-files'
  +    echo '           <count>] [-s|--size <size>] [-c|--copy] [-r|--remove]'
  +    echo '           [-a|--archive-dir <dir>] [-z|--compress [<tool>:]<level>]'
  +    echo '           [-b|--background] [-d|--delay] [-p|--pad <len>] [-m|--mode'
  +    echo '           <mode>] [-o|--owner <owner>] [-g|--group <group>] [-M|--migrate'
  +    echo '           <cmd>] [-P|--prolog <cmd>] [-E|--epilog <cmd>] <file> [...]'
  +    echo '  tarball  [-t|--trace] [-v|--verbose] [-o|--output <tarball>]'
  +    echo '           [-c|--compress <prog>] [-d|--directory <dir>] [-u|--user'
  +    echo '           <user>] [-g|--group <group>] [-e|--exclude <pattern>]'
  +    echo '           <path> [<path> ...]'
  +    echo '  subst    [-v|--verbose] [-t|--trace] [-n|--nop] [-w|--warning]'
  +    echo '           [-q|--quiet] [-s|--stealth] [-i|--interactive] [-b|--backup'
  +    echo '           <ext>] [-e|--exec <cmd>] [-f|--file <cmd-file>] [<file>]'
  +    echo '           [...]'
  +    echo '  platform [-F|--format <format>] [-S|--sep <string>] [-C|--conc'
  +    echo '           <string>] [-L|--lower] [-U|--upper] [-v|--verbose]'
  +    echo '           [-c|--concise] [-n|--no-newline] [-t|--type <type>]'
  +    echo '           [-V|--version] [-h|--help]'
  +    echo '  arx      [-t|--trace] [-C|--command <cmd>] <op> <archive> [<file>'
  +    echo '           ...]'
  +    echo '  slo      [-p|--prefix <str>] -- -L<dir> -l<lib> [-L<dir> -l<lib>'
  +    echo '           ...]'
  +    echo '  scpp     [-v|--verbose] [-p|--preserve] [-f|--filter <filter>]'
  +    echo '           [-o|--output <ofile>] [-t|--template <tfile>] [-M|--mark'
  +    echo '           <mark>] [-D|--define <dname>] [-C|--class <cname>]'
  +    echo '           <file> [<file> ...]'
  +    echo '  version  [-l|--language <lang>] [-n|--name <name>] [-p|--prefix'
  +    echo '           <prefix>] [-s|--set <version>] [-e|--edit] [-i|--increase'
  +    echo '           <knob>] [-d|--display <type>] <file>'
  +    echo '  path     [-s|--suppress] [-r|--reverse] [-d|--dirname] [-b|--basename]'
  +    echo '           [-m|--magic] [-p|--path <path>] <str> [<str> ...]'
  +    echo ''
  +    exit 0
  +fi
  +if [ ".$1" = ".-v" ] || [ ".$1" = ".--version" ]; then
  +    echo "GNU shtool 2.0.1 (11-Aug-2004)"
  +    exit 0
  +fi
  +if [ ".$1" = ".-r" ] || [ ".$1" = ".--recreate" ]; then
  +    shtoolize -oshtool all
  +    exit 0
  +fi
  +if [ ".$1" = ".-d" ] || [ ".$1" = ".--debug" ]; then
  +    shift
  +    set -x
  +fi
  +name=`echo "$0" | sed -e 's;.*/\([^/]*\)$;\1;' -e 's;-sh$;;' -e 's;\.sh$;;'`
  +case "$name" in
  +    echo|mdate|table|prop|move|install|mkdir|mkln|mkshadow|fixperm|rotate|tarball|subst|platform|arx|slo|scpp|version|path )
  +        #   implicit tool command selection
  +        tool="$name"
  +        ;;
  +    * )
  +        #   explicit tool command selection
  +        tool="$1"
  +        shift
  +        ;;
  +esac
  +arg_spec=""
  +opt_spec=""
  +gen_tmpfile=no
  +
  +##
  +##  DISPATCH INTO SCRIPT PROLOG
  +##
  +
  +case $tool in
  +    echo )
  +        str_tool="echo"
  +        str_usage="[-n|--newline] [-e|--expand] [<string> ...]"
  +        arg_spec="0+"
  +        opt_spec="n.e."
  +        opt_alias="n:newline,e:expand"
  +        opt_n=no
  +        opt_e=no
  +        ;;
  +    mdate )
  +        str_tool="mdate"
  +        str_usage="[-n|--newline] [-z|--zero] [-s|--shorten] [-d|--digits] [-f|--field-sep <str>] [-o|--order <spec>] <path>"
  +        arg_spec="1="
  +        opt_spec="n.z.s.d.f:o:"
  +        opt_alias="n:newline,z:zero,s:shorten,d:digits,f:field-sep,o:order"
  +        opt_n=no
  +        opt_z=no
  +        opt_s=no
  +        opt_d=no
  +        opt_f=" "
  +        opt_o="dmy"
  +        ;;
  +    table )
  +        str_tool="table"
  +        str_usage="[-F|--field-sep <sep>] [-w|--width <width>] [-c|--columns <cols>] [-s|--strip <strip>] <str><sep><str>..."
  +        arg_spec="1+"
  +        opt_spec="F:w:c:s:"
  +        opt_alias="F:field-sep,w:width,c:columns,s:strip"
  +        opt_F=":"
  +        opt_w=15
  +        opt_c=3
  +        opt_s=79
  +        ;;
  +    prop )
  +        str_tool="prop"
  +        str_usage="[-p|--prefix <str>]"
  +        arg_spec="0="
  +        opt_spec="p:"
  +        opt_alias="p:prefix"
  +        opt_p=""
  +        ;;
  +    move )
  +        str_tool="move"
  +        str_usage="[-v|--verbose] [-t|--trace] [-e|--expand] [-p|--preserve] <src-file> <dst-file>"
  +        arg_spec="2="
  +        opt_spec="v.t.e.p."
  +        opt_alias="v:verbose,t:trace,e:expand,p:preserve"
  +        opt_v=no
  +        opt_t=no
  +        opt_e=no
  +        opt_p=no
  +        ;;
  +    install )
  +        str_tool="install"
  +        str_usage="[-v|--verbose] [-t|--trace] [-d|--mkdir] [-c|--copy] [-C|--compare-copy] [-s|--strip] [-m|--mode <mode>] [-o|--owner <owner>] [-g|--group <group>] [-e|--exec <sed-cmd>] <file> [<file> ...] <path>"
  +        arg_spec="1+"
  +        opt_spec="v.t.d.c.C.s.m:o:g:e+"
  +        opt_alias="v:verbose,t:trace,d:mkdir,c:copy,C:compare-copy,s:strip,m:mode,o:owner,g:group,e:exec"
  +        opt_v=no
  +        opt_t=no
  +        opt_d=no
  +        opt_c=no
  +        opt_C=no
  +        opt_s=no
  +        opt_m="0755"
  +        opt_o=""
  +        opt_g=""
  +        opt_e=""
  +        ;;
  +    mkdir )
  +        str_tool="mkdir"
  +        str_usage="[-t|--trace] [-f|--force] [-p|--parents] [-m|--mode <mode>] [-o|--owner <owner>] [-g|--group <group>] <dir> [<dir> ...]"
  +        arg_spec="1+"
  +        opt_spec="t.f.p.m:o:g:"
  +        opt_alias="t:trace,f:force,p:parents,m:mode,o:owner,g:group"
  +        opt_t=no
  +        opt_f=no
  +        opt_p=no
  +        opt_m=""
  +        opt_o=""
  +        opt_g=""
  +        ;;
  +    mkln )
  +        str_tool="mkln"
  +        str_usage="[-t|--trace] [-f|--force] [-s|--symbolic] <src-path> [<src-path> ...] <dst-path>"
  +        arg_spec="2+"
  +        opt_spec="t.f.s."
  +        opt_alias="t:trace,f:force,s:symbolic"
  +        opt_t=no
  +        opt_f=no
  +        opt_s=no
  +        ;;
  +    mkshadow )
  +        str_tool="mkshadow"
  +        str_usage="[-v|--verbose] [-t|--trace] [-a|--all] <src-dir> <dst-dir>"
  +        arg_spec="2="
  +        opt_spec="v.t.a."
  +        opt_alias="v:verbose,t:trace,a:all"
  +        opt_v=no
  +        opt_t=no
  +        opt_a=no
  +        ;;
  +    fixperm )
  +        str_tool="fixperm"
  +        str_usage="[-v|--verbose] [-t|--trace] <path> [<path> ...]"
  +        arg_spec="1+"
  +        opt_spec="v.t."
  +        opt_alias="v:verbose,t:trace"
  +        opt_v=no
  +        opt_t=no
  +        ;;
  +    rotate )
  +        str_tool="rotate"
  +        str_usage="[-v|--verbose] [-t|--trace] [-f|--force] [-n|--num-files <count>] [-s|--size <size>] [-c|--copy] [-r|--remove] [-a|--archive-dir <dir>] [-z|--compress [<tool>:]<level>] [-b|--background] [-d|--delay] [-p|--pad <len>] [-m|--mode <mode>] [-o|--owner <owner>] [-g|--group <group>] [-M|--migrate <cmd>] [-P|--prolog <cmd>] [-E|--epilog <cmd>] <file> [...]"
  +        arg_spec="1+"
  +        opt_spec="v.t.f.n:s:c.r.a:z:b.d.p:o:g:m:M:P:E:"
  +        opt_alias="v:verbose,t:trace,f:force,n:num-files,s:size,c:copy,r:remove,a:archive-dir,z:compress,b:background,d:delay,p:pad,o:owner,g:group,m:mode,M:migrate,P:prolog,E:epilog"
  +        opt_v=no
  +        opt_t=no
  +        opt_f=no
  +        opt_n=10
  +        opt_s=""
  +        opt_c=no
  +        opt_r=no
  +        opt_a=""
  +        opt_z=""
  +        opt_b=no
  +        opt_d=no
  +        opt_p=1
  +        opt_o=""
  +        opt_g=""
  +        opt_m=""
  +        opt_M=""
  +        opt_P=""
  +        opt_E=""
  +        ;;
  +    tarball )
  +        str_tool="tarball"
  +        str_usage="[-t|--trace] [-v|--verbose] [-o|--output <tarball>] [-c|--compress <prog>] [-d|--directory <dir>] [-u|--user <user>] [-g|--group <group>] [-e|--exclude <pattern>] <path> [<path> ...]"
  +        gen_tmpfile=yes
  +        arg_spec="1+"
  +        opt_spec="t.v.o:c:d:u:g:e:"
  +        opt_alias="t:trace,v:verbose,o:output,c:compress,d:directory,u:user,g:group,e:exclude"
  +        opt_t=no
  +        opt_v=no
  +        opt_o=""
  +        opt_c=""
  +        opt_d=""
  +        opt_u=""
  +        opt_g=""
  +        opt_e="CVS,\\.cvsignore,\\.[oa]\$"
  +        ;;
  +    subst )
  +        str_tool="subst"
  +        str_usage="[-v|--verbose] [-t|--trace] [-n|--nop] [-w|--warning] [-q|--quiet] [-s|--stealth] [-i|--interactive] [-b|--backup <ext>] [-e|--exec <cmd>] [-f|--file <cmd-file>] [<file>] [...]"
  +        gen_tmpfile=yes
  +        arg_spec="0+"
  +        opt_spec="v.t.n.w.q.s.i.b:e+f:"
  +        opt_alias="v:verbose,t:trace,n:nop,w:warning,q:quiet,s:stealth,i:interactive,b:backup,e:exec,f:file"
  +        opt_v=no
  +        opt_t=no
  +        opt_n=no
  +        opt_w=no
  +        opt_q=no
  +        opt_s=no
  +        opt_i=no
  +        opt_b=""
  +        opt_e=""
  +        opt_f=""
  +        ;;
  +    platform )
  +        str_tool="platform"
  +        str_usage="[-F|--format <format>] [-S|--sep <string>] [-C|--conc <string>] [-L|--lower] [-U|--upper] [-v|--verbose] [-c|--concise] [-n|--no-newline] [-t|--type <type>] [-V|--version] [-h|--help]"
  +        arg_spec="0="
  +        opt_spec="F:S:C:L.U.v.c.n.t:d.V.h."
  +        opt_alias="F:format,S:sep,C:conc,L:lower,U:upper,v:verbose,c:consise,t:type,n:no-newline,V:version,h:help"
  +        opt_F="%{sp} (%{ap})"
  +        opt_S=" "
  +        opt_C="/"
  +        opt_L=no
  +        opt_U=no
  +        opt_t=""
  +        opt_v=no
  +        opt_c=no
  +        opt_n=no
  +        opt_V=no
  +        opt_h=no
  +        ;;
  +    arx )
  +        str_tool="arx"
  +        str_usage="[-t|--trace] [-C|--command <cmd>] <op> <archive> [<file> ...]"
  +        arg_spec="2+"
  +        opt_spec="t.C:"
  +        opt_alias="t:trace,C:command"
  +        opt_t=no
  +        opt_C="ar"
  +        ;;
  +    slo )
  +        str_tool="slo"
  +        str_usage="[-p|--prefix <str>] -- -L<dir> -l<lib> [-L<dir> -l<lib> ...]"
  +        arg_spec="1+"
  +        opt_spec="p:"
  +        opt_alias="p:prefix"
  +        opt_p="SLO_"
  +        ;;
  +    scpp )
  +        str_tool="scpp"
  +        str_usage="[-v|--verbose] [-p|--preserve] [-f|--filter <filter>] [-o|--output <ofile>] [-t|--template <tfile>] [-M|--mark <mark>] [-D|--define <dname>] [-C|--class <cname>] <file> [<file> ...]"
  +        gen_tmpfile=yes
  +        arg_spec="1+"
  +        opt_spec="v.p.f+o:t:M:D:C:"
  +        opt_alias="v:verbose,p:preserve,f:filter,o:output,t:template,M:mark,D:define,C:class"
  +        opt_v=no
  +        opt_p=no
  +        opt_f=""
  +        opt_o="lib.h"
  +        opt_t="lib.h.in"
  +        opt_M="%%MARK%%"
  +        opt_D="cpp"
  +        opt_C="intern"
  +        ;;
  +    version )
  +        str_tool="version"
  +        str_usage="[-l|--language <lang>] [-n|--name <name>] [-p|--prefix <prefix>] [-s|--set <version>] [-e|--edit] [-i|--increase <knob>] [-d|--display <type>] <file>"
  +        arg_spec="1="
  +        opt_spec="l:n:p:s:i:e.d:"
  +        opt_alias="l:language,n:name,p:prefix,s:set,e:edit,i:increase,d:display"
  +        opt_l="txt"
  +        opt_n="unknown"
  +        opt_p=""
  +        opt_s=""
  +        opt_e="no"
  +        opt_i=""
  +        opt_d="short"
  +        ;;
  +    path )
  +        str_tool="path"
  +        str_usage="[-s|--suppress] [-r|--reverse] [-d|--dirname] [-b|--basename] [-m|--magic] [-p|--path <path>] <str> [<str> ...]"
  +        gen_tmpfile=yes
  +        arg_spec="1+"
  +        opt_spec="s.r.d.b.m.p:"
  +        opt_alias="s:suppress,r:reverse,d:dirname,b:basename,m:magic,p:path"
  +        opt_s=no
  +        opt_r=no
  +        opt_d=no
  +        opt_b=no
  +        opt_m=no
  +        opt_p="$PATH"
  +        ;;
  +    -* )
  +        echo "$0:Error: unknown option \`$tool'" 2>&1
  +        echo "$0:Hint:  run \`$0 -h' for usage" 2>&1
  +        exit 1
  +        ;;
  +    * )
  +        echo "$0:Error: unknown command \`$tool'" 2>&1
  +        echo "$0:Hint:  run \`$0 -h' for usage" 2>&1
  +        exit 1
  +        ;;
  +esac
  +
  +##
  +##  COMMON UTILITY CODE
  +##
  +
  +#   commonly used ASCII values
  +ASC_TAB="	"
  +ASC_NL="
  +"
  +
  +#   determine name of tool
  +if [ ".$tool" != . ]; then
  +    #   used inside shtool script
  +    toolcmd="$0 $tool"
  +    toolcmdhelp="shtool $tool"
  +    msgprefix="shtool:$tool"
  +else
  +    #   used as standalone script
  +    toolcmd="$0"
  +    toolcmdhelp="sh $0"
  +    msgprefix="$str_tool"
  +fi
  +
  +#   parse argument specification string
  +eval `echo $arg_spec |\
  +      sed -e 's/^\([0-9]*\)\([+=]\)/arg_NUMS=\1; arg_MODE=\2/'`
  +
  +#   parse option specification string
  +eval `echo h.$opt_spec |\
  +      sed -e 's/\([a-zA-Z0-9]\)\([.:+]\)/opt_MODE_\1=\2;/g'`
  +
  +#   parse option alias string
  +eval `echo h:help,$opt_alias |\
  +      sed -e 's/-/_/g' -e 's/\([a-zA-Z0-9]\):\([^,]*\),*/opt_ALIAS_\2=\1;/g'`
  +
  +#   interate over argument line
  +opt_PREV=''
  +while [ $# -gt 0 ]; do
  +    #   special option stops processing
  +    if [ ".$1" = ".--" ]; then
  +        shift
  +        break
  +    fi
  +
  +    #   determine option and argument
  +    opt_ARG_OK=no
  +    if [ ".$opt_PREV" != . ]; then
  +        #   merge previous seen option with argument
  +        opt_OPT="$opt_PREV"
  +        opt_ARG="$1"
  +        opt_ARG_OK=yes
  +        opt_PREV=''
  +    else
  +        #   split argument into option and argument
  +        case "$1" in
  +            --[a-zA-Z0-9]*=*)
  +                eval `echo "x$1" |\
  +                      sed -e 's/^x--\([a-zA-Z0-9-]*\)=\(.*\)$/opt_OPT="\1";opt_ARG="\2"/'`
  +                opt_STR=`echo $opt_OPT | sed -e 's/-/_/g'`
  +                eval "opt_OPT=\${opt_ALIAS_${opt_STR}-${opt_OPT}}"
  +                ;;
  +            --[a-zA-Z0-9]*)
  +                opt_OPT=`echo "x$1" | cut -c4-`
  +                opt_STR=`echo $opt_OPT | sed -e 's/-/_/g'`
  +                eval "opt_OPT=\${opt_ALIAS_${opt_STR}-${opt_OPT}}"
  +                opt_ARG=''
  +                ;;
  +            -[a-zA-Z0-9]*)
  +                eval `echo "x$1" |\
  +                      sed -e 's/^x-\([a-zA-Z0-9]\)/opt_OPT="\1";/' \
  +                          -e 's/";\(.*\)$/"; opt_ARG="\1"/'`
  +                ;;
  +            -[a-zA-Z0-9])
  +                opt_OPT=`echo "x$1" | cut -c3-`
  +                opt_ARG=''
  +                ;;
  +            *)
  +                break
  +                ;;
           esac
  -    done
  -    text="$*"
  -    
  -    #   start with nothing
  -    T_MD='' 
  -    T_ME=''
  -    
  -    #   some hard-coded terminal sequences
  -    case $TERM in
  -        xterm|xterm*|vt220|vt220*)
  -            T_MD=`echo dummy | awk '{ printf("%c%c%c%c", 27, 91, 49, 109); }'`
  -            T_ME=`echo dummy | awk '{ printf("%c%c%c", 27, 91, 109); }'`
  -            ;;
  -        vt100|vt100*)
  -            T_MD=`echo dummy | awk '{ printf("%c%c%c%c%c%c", 27, 91, 49, 109, 0, 0); }'`
  -            T_ME=`echo dummy | awk '{ printf("%c%c%c%c%c", 27, 91, 109, 0, 0); }'`
  +    fi
  +
  +    #   eat up option
  +    shift
  +
  +    #   determine whether option needs an argument
  +    eval "opt_MODE=\$opt_MODE_${opt_OPT}"
  +    if [ ".$opt_ARG" = . ] && [ ".$opt_ARG_OK" != .yes ]; then
  +        if [ ".$opt_MODE" = ".:" ] || [ ".$opt_MODE" = ".+" ]; then
  +            opt_PREV="$opt_OPT"
  +            continue
  +        fi
  +    fi
  +
  +    #   process option
  +    case $opt_MODE in
  +        '.' )
  +            #   boolean option
  +            eval "opt_${opt_OPT}=yes"
  +            ;;
  +        ':' )
  +            #   option with argument (multiple occurances override)
  +            eval "opt_${opt_OPT}=\"\$opt_ARG\""
  +            ;;
  +        '+' )
  +            #   option with argument (multiple occurances append)
  +            eval "opt_${opt_OPT}=\"\$opt_${opt_OPT}\${ASC_NL}\$opt_ARG\""
  +            ;;
  +        * )
  +            echo "$msgprefix:Error: unknown option: \`$opt_OPT'" 1>&2
  +            echo "$msgprefix:Hint:  run \`$toolcmdhelp -h' or \`man shtool' for details" 1>&2
  +            exit 1
               ;;
       esac
  -    
  -    #   additionally try a vendor's tput program
  -    if [ ".$T_MD" = . -o ".$T_ME" = . ]; then
  -        MD="`tput md 2>/dev/null`"
  -        ME="`tput me 2>/dev/null`"
  -        if [ ".$MD" != . -a ".$ME" != . ]; then
  -            T_MD="$MD" 
  -            T_ME="$ME"
  +done
  +if [ ".$opt_PREV" != . ]; then
  +    echo "$msgprefix:Error: missing argument to option \`$opt_PREV'" 1>&2
  +    echo "$msgprefix:Hint:  run \`$toolcmdhelp -h' or \`man shtool' for details" 1>&2
  +    exit 1
  +fi
  +
  +#   process help option
  +if [ ".$opt_h" = .yes ]; then
  +    echo "Usage: $toolcmdhelp $str_usage"
  +    exit 0
  +fi
  +
  +#   complain about incorrect number of arguments
  +case $arg_MODE in
  +    '=' )
  +        if [ $# -ne $arg_NUMS ]; then
  +            echo "$msgprefix:Error: invalid number of arguments (exactly $arg_NUMS expected)" 1>&2
  +            echo "$msgprefix:Hint:  run \`$toolcmd -h' or \`man shtool' for details" 1>&2
  +            exit 1
           fi
  -    fi
  -    
  -    #   result
  -    if [ ".$T_MD" = . -o ".$T_ME" = . ]; then
  -        echo "bold:Error: unable to determine terminal sequence for bold mode" 1>&2
  -        exit 1
  +        ;;
  +    '+' )
  +        if [ $# -lt $arg_NUMS ]; then
  +            echo "$msgprefix:Error: invalid number of arguments (at least $arg_NUMS expected)" 1>&2
  +            echo "$msgprefix:Hint:  run \`$toolcmd -h' or \`man shtool' for details" 1>&2
  +            exit 1
  +        fi
  +        ;;
  +esac
  +
  +#   establish a temporary file on request
  +if [ ".$gen_tmpfile" = .yes ]; then
  +    if [ ".$TMPDIR" != . ]; then
  +        tmpdir="$TMPDIR"
  +    elif [ ".$TEMPDIR" != . ]; then
  +        tmpdir="$TEMPDIR"
       else
  -        if [ ".$begin" = .yes ]; then
  -            echo dummy |\
  -            awk '{ printf("%s", T_MD); }' \
  -            T_MD="$T_MD"
  -        fi
  -        if [ ".$end" = .yes ]; then
  -            echo dummy |\
  -            awk '{ printf("%s", T_ME); }' \
  -            T_ME="$T_ME"
  -        fi
  -        if [ ".$text" != . ]; then
  -            echo dummy |\
  -            awk '{ printf("%s%s%s%s", T_MD, TEXT, T_ME, NL); }' \
  -            T_MD="$T_MD" TEXT="$text" T_ME="$T_ME" NL="$nl"
  -        fi
  -    fi
  -;;
  -
  -buildinfo )
  -    #
  -    #   argument line handling
  -    #
  -    error=no
  -    if [ $# -ne 1 -a $# -ne 2 ]; then
  -        error=yes
  -    fi
  -    if [ $# -eq 2 -a ".$1" != ".-n" ]; then
  -        error=yes
  -    fi
  -    if [ $error = yes ]; then
  -        echo "$0:Error: invalid argument line"
  -        echo "$0:Usage: $0 [-n] <format-string>"
  -        echo "Where <format-string> can contain:"
  -        echo "   %u ...... substituted by determined username    (foo)"
  -        echo "   %h ...... substituted by determined hostname    (bar)"
  -        echo "   %d ...... substituted by determined domainname  (.com)"
  -        echo "   %D ...... substituted by determined day         (DD)"
  -        echo "   %M ...... substituted by determined month       (MM)"
  -        echo "   %Y ...... substituted by determined year        (YYYYY)"
  -        echo "   %m ...... substituted by determined monthname   (Jan)"
  -        exit 1
  +        tmpdir="/tmp"
       fi
  -    if [ $# -eq 2 ]; then
  -        newline=no
  -        format_string="$2"
  -    else
  -        newline=yes
  -        format_string="$1"
  +    tmpfile="$tmpdir/.shtool.$$"
  +    rm -f $tmpfile >/dev/null 2>&1
  +    touch $tmpfile
  +    chmod 600 $tmpfile
  +fi
  +
  +#   utility function: map string to lower case
  +util_lower () {
  +    echo "$1" | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'
  +}
  +
  +#   utility function: map string to upper case
  +util_upper () {
  +    echo "$1" | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  +}
  +
  +#   cleanup procedure
  +shtool_exit () {
  +    rc="$1"
  +    if [ ".$gen_tmpfile" = .yes ]; then
  +        rm -f $tmpfile >/dev/null 2>&1 || true
  +    fi
  +    exit $rc
  +}
  +
  +##
  +##  DISPATCH INTO SCRIPT BODY
  +##
  +
  +case $tool in
  +
  +echo )
  +    ##
  +    ##  echo -- Print string with optional construct expansion
  +    ##  Copyright (c) 1998-2004 Ralf S. Engelschall <rse@engelschall.com>
  +    ##
  +
  +    text="$*"
  +
  +    #   check for broken escape sequence expansion
  +    seo=''
  +    bytes=`echo '\1' | wc -c | awk '{ printf("%s", $1); }'`
  +    if [ ".$bytes" != .3 ]; then
  +        bytes=`echo -E '\1' | wc -c | awk '{ printf("%s", $1); }'`
  +        if [ ".$bytes" = .3 ]; then
  +            seo='-E'
  +        fi
  +    fi
  +
  +    #   check for existing -n option (to suppress newline)
  +    minusn=''
  +    bytes=`echo -n 123 2>/dev/null | wc -c | awk '{ printf("%s", $1); }'`
  +    if [ ".$bytes" = .3 ]; then
  +        minusn='-n'
  +    fi
  +
  +    #   determine terminal bold sequence
  +    term_bold=''
  +    term_norm=''
  +    if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%[Bb]'`" != . ]; then
  +        case $TERM in
  +            #   for the most important terminal types we directly know the sequences
  +            xterm|xterm*|vt220|vt220*)
  +                term_bold=`awk 'BEGIN { printf("%c%c%c%c", 27, 91, 49, 109); }' </dev/null 2>/dev/null`
  +                term_norm=`awk 'BEGIN { printf("%c%c%c", 27, 91, 109); }' </dev/null 2>/dev/null`
  +                ;;
  +            vt100|vt100*|cygwin)
  +                term_bold=`awk 'BEGIN { printf("%c%c%c%c%c%c", 27, 91, 49, 109, 0, 0); }' </dev/null 2>/dev/null`
  +                term_norm=`awk 'BEGIN { printf("%c%c%c%c%c", 27, 91, 109, 0, 0); }' </dev/null 2>/dev/null`
  +                ;;
  +            #   for all others, we try to use a possibly existing `tput' or `tcout' utility
  +            * )
  +                paths=`echo $PATH | sed -e 's/:/ /g'`
  +                for tool in tput tcout; do
  +                    for dir in $paths; do
  +                        if [ -r "$dir/$tool" ]; then
  +                            for seq in bold md smso; do # 'smso' is last
  +                                bold="`$dir/$tool $seq 2>/dev/null`"
  +                                if [ ".$bold" != . ]; then
  +                                    term_bold="$bold"
  +                                    break
  +                                fi
  +                            done
  +                            if [ ".$term_bold" != . ]; then
  +                                for seq in sgr0 me rmso init reset; do # 'reset' is last
  +                                    norm="`$dir/$tool $seq 2>/dev/null`"
  +                                    if [ ".$norm" != . ]; then
  +                                        term_norm="$norm"
  +                                        break
  +                                    fi
  +                                done
  +                            fi
  +                            break
  +                        fi
  +                    done
  +                    if [ ".$term_bold" != . ] && [ ".$term_norm" != . ]; then
  +                        break;
  +                    fi
  +                done
  +                ;;
  +        esac
  +        if [ ".$term_bold" = . ] || [ ".$term_norm" = . ]; then
  +            echo "$msgprefix:Warning: unable to determine terminal sequence for bold mode" 1>&2
  +            term_bold=''
  +            term_norm=''
  +        fi
       fi
  -    
  -    #
  -    #   initialization
  -    #
  +
  +    #   determine user name
       username=''
  -    hostname=''
  -    domainname=''
  -    time_day=''
  -    time_month=''
  -    time_year=''
  -    time_monthname=''
  -    
  -    #
  -    #   determine username
  -    #
  -    username="$LOGNAME"
  -    if [ ".$username" = . ]; then
  -        username="$USER"
  +    if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%[uUgG]'`" != . ]; then
  +        username="`(id -un) 2>/dev/null`"
           if [ ".$username" = . ]; then
  -            username="`whoami 2>/dev/null |\
  -                       awk '{ printf("%s", $1); }'`"
  +            str="`(id) 2>/dev/null`"
  +            if [ ".`echo $str | grep '^uid[ 	]*=[ 	]*[0-9]*('`" != . ]; then
  +                username=`echo $str | sed -e 's/^uid[ 	]*=[ 	]*[0-9]*(//' -e 's/).*$//'`
  +            fi
               if [ ".$username" = . ]; then
  -                username="`who am i 2>/dev/null |\
  -                           awk '{ printf("%s", $1); }'`"
  +                username="$LOGNAME"
                   if [ ".$username" = . ]; then
  -                    username='unknown'
  +                    username="$USER"
  +                    if [ ".$username" = . ]; then
  +                        username="`(whoami) 2>/dev/null |\
  +                                   awk '{ printf("%s", $1); }'`"
  +                        if [ ".$username" = . ]; then
  +                            username="`(who am i) 2>/dev/null |\
  +                                       awk '{ printf("%s", $1); }'`"
  +                            if [ ".$username" = . ]; then
  +                                username='unknown'
  +                            fi
  +                        fi
  +                    fi
  +                fi
  +            fi
  +        fi
  +    fi
  +
  +    #   determine user id
  +    userid=''
  +    if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%U'`" != . ]; then
  +        userid="`(id -u) 2>/dev/null`"
  +        if [ ".$userid" = . ]; then
  +            userid="`(id -u ${username}) 2>/dev/null`"
  +            if [ ".$userid" = . ]; then
  +                str="`(id) 2>/dev/null`"
  +                if [ ".`echo $str | grep '^uid[ 	]*=[ 	]*[0-9]*('`" != . ]; then
  +                    userid=`echo $str | sed -e 's/^uid[ 	]*=[ 	]*//' -e 's/(.*$//'`
  +                fi
  +                if [ ".$userid" = . ]; then
  +                    userid=`(getent passwd ${username}) 2>/dev/null | \
  +                            sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'`
  +                    if [ ".$userid" = . ]; then
  +                        userid=`grep "^${username}:" /etc/passwd 2>/dev/null | \
  +                                sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'`
  +                        if [ ".$userid" = . ]; then
  +                            userid=`(ypcat passwd) 2>/dev/null |
  +                                    grep "^${username}:" | \
  +                                    sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'`
  +                            if [ ".$userid" = . ]; then
  +                                userid='?'
  +                            fi
  +                        fi
  +                    fi
  +                fi
  +            fi
  +        fi
  +    fi
  +
  +    #   determine (primary) group id
  +    groupid=''
  +    if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%[gG]'`" != . ]; then
  +        groupid="`(id -g ${username}) 2>/dev/null`"
  +        if [ ".$groupid" = . ]; then
  +            str="`(id) 2>/dev/null`"
  +            if [ ".`echo $str | grep 'gid[ 	]*=[ 	]*[0-9]*('`" != . ]; then
  +                groupid=`echo $str | sed -e 's/^.*gid[ 	]*=[ 	]*//' -e 's/(.*$//'`
  +            fi
  +            if [ ".$groupid" = . ]; then
  +                groupid=`(getent passwd ${username}) 2>/dev/null | \
  +                         sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
  +                if [ ".$groupid" = . ]; then
  +                    groupid=`grep "^${username}:" /etc/passwd 2>/dev/null | \
  +                             sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
  +                    if [ ".$groupid" = . ]; then
  +                        groupid=`(ypcat passwd) 2>/dev/null | grep "^${username}:" | \
  +                                 sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
  +                        if [ ".$groupid" = . ]; then
  +                            groupid='?'
  +                        fi
  +                    fi
  +                fi
  +            fi
  +        fi
  +    fi
  +
  +    #   determine (primary) group name
  +    groupname=''
  +    if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%g'`" != . ]; then
  +        groupname="`(id -gn ${username}) 2>/dev/null`"
  +        if [ ".$groupname" = . ]; then
  +            str="`(id) 2>/dev/null`"
  +            if [ ".`echo $str | grep 'gid[ 	]*=[ 	]*[0-9]*('`" != . ]; then
  +                groupname=`echo $str | sed -e 's/^.*gid[ 	]*=[ 	]*[0-9]*(//' -e 's/).*$//'`
  +            fi
  +            if [ ".$groupname" = . ]; then
  +                groupname=`(getent group) 2>/dev/null | \
  +                           grep "^[^:]*:[^:]*:${groupid}:" | \
  +                           sed -e 's/:.*$//'`
  +                if [ ".$groupname" = . ]; then
  +                    groupname=`grep "^[^:]*:[^:]*:${groupid}:" /etc/group 2>/dev/null | \
  +                               sed -e 's/:.*$//'`
  +                    if [ ".$groupname" = . ]; then
  +                        groupname=`(ypcat group) 2>/dev/null | \
  +                                   grep "^[^:]*:[^:]*:${groupid}:" | \
  +                                   sed -e 's/:.*$//'`
  +                        if [ ".$groupname" = . ]; then
  +                            groupname='?'
  +                        fi
  +                    fi
                   fi
               fi
           fi
       fi
  -    
  -    #
  -    #   determine hostname and domainname
  -    #
  -    hostname="`uname -n 2>/dev/null |\
  -               awk '{ printf("%s", $1); }'`"
  -    if [ ".$hostname" = . ]; then
  -        hostname="`hostname 2>/dev/null |\
  +
  +    #   determine host and domain name
  +    hostname=''
  +    domainname=''
  +    if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%h'`" != . ]; then
  +        hostname="`(uname -n) 2>/dev/null |\
                      awk '{ printf("%s", $1); }'`"
           if [ ".$hostname" = . ]; then
  -            hostname='unknown'
  +            hostname="`(hostname) 2>/dev/null |\
  +                       awk '{ printf("%s", $1); }'`"
  +            if [ ".$hostname" = . ]; then
  +                hostname='unknown'
  +            fi
           fi
  +        case $hostname in
  +            *.* )
  +                domainname=".`echo $hostname | cut -d. -f2-`"
  +                hostname="`echo $hostname | cut -d. -f1`"
  +                ;;
  +        esac
       fi
  -    case $hostname in
  -        *.* )
  -            domainname=".`echo $hostname | cut -d. -f2-`"
  -            hostname="`echo $hostname | cut -d. -f1`"
  -            ;;
  -    esac
  -    if [ ".$domainname" = . ]; then
  -        if [ -f /etc/resolv.conf ]; then
  -            domainname="`egrep '^[ 	]*domain' /etc/resolv.conf | head -1 |\
  -                         sed -e 's/.*domain//' \
  -                             -e 's/^[ 	]*//' -e 's/^ *//' -e 's/^	*//' \
  -                             -e 's/^\.//' -e 's/^/./' |\
  -                         awk '{ printf("%s", $1); }'`"
  -            if [ ".$domainname" = . ]; then
  -                domainname="`egrep '^[ 	]*search' /etc/resolv.conf | head -1 |\
  -                             sed -e 's/.*search//' \
  +    if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%d'`" != . ]; then
  +        if [ ".$domainname" = . ]; then
  +            if [ -f /etc/resolv.conf ]; then
  +                domainname="`grep '^[ 	]*domain' /etc/resolv.conf | sed -e 'q' |\
  +                             sed -e 's/.*domain//' \
                                    -e 's/^[ 	]*//' -e 's/^ *//' -e 's/^	*//' \
  -                                 -e 's/ .*//' -e 's/	.*//' \
                                    -e 's/^\.//' -e 's/^/./' |\
                                awk '{ printf("%s", $1); }'`"
  +                if [ ".$domainname" = . ]; then
  +                    domainname="`grep '^[ 	]*search' /etc/resolv.conf | sed -e 'q' |\
  +                                 sed -e 's/.*search//' \
  +                                     -e 's/^[ 	]*//' -e 's/^ *//' -e 's/^	*//' \
  +                                     -e 's/ .*//' -e 's/	.*//' \
  +                                     -e 's/^\.//' -e 's/^/./' |\
  +                                 awk '{ printf("%s", $1); }'`"
  +                fi
               fi
           fi
       fi
  -    
  -    #
  +
       #   determine current time
  -    #
  -    time_day="`date '+%d' | awk '{ printf("%s", $1); }'`"
  -    time_month="`date '+%m' | awk '{ printf("%s", $1); }'`"
  -    time_year="`date '+%Y' 2>/dev/null | awk '{ printf("%s", $1); }'`"
  -    if test ".$time_year" = .; then
  -        time_year="`date '+%y' | awk '{ printf("%s", $1); }'`"
  -        case $time_year in
  -            9[0-9]*) time_year="19$time_year" ;;
  -                  *) time_year="20$time_year" ;;
  -        esac
  -    fi
  -    case $time_month in
  -        1|01) time_monthname='Jan' ;;
  -        2|02) time_monthname='Feb' ;;
  -        3|03) time_monthname='Mar' ;;
  -        4|04) time_monthname='Apr' ;;
  -        5|05) time_monthname='May' ;;
  -        6|06) time_monthname='Jun' ;;
  -        7|07) time_monthname='Jul' ;;
  -        8|08) time_monthname='Aug' ;;
  -        9|09) time_monthname='Sep' ;;
  -          10) time_monthname='Oct' ;;
  -          11) time_monthname='Nov' ;;
  -          12) time_monthname='Dec' ;;
  -    esac
  -    
  -    #
  -    #   create result string
  -    #
  -    if [ ".$newline" = .yes ]; then
  -        echo $format_string |\
  -        sed -e "s;%u;$username;g" \
  -            -e "s;%h;$hostname;g" \
  -            -e "s;%d;$domainname;g" \
  -            -e "s;%D;$time_day;g" \
  -            -e "s;%M;$time_month;g" \
  -            -e "s;%Y;$time_year;g" \
  -            -e "s;%m;$time_monthname;g"
  -    else
  -        echo "${format_string}&" |\
  -        sed -e "s;%u;$username;g" \
  -            -e "s;%h;$hostname;g" \
  -            -e "s;%d;$domainname;g" \
  -            -e "s;%D;$time_day;g" \
  -            -e "s;%M;$time_month;g" \
  -            -e "s;%Y;$time_year;g" \
  -            -e "s;%m;$time_monthname;g" |\
  -        awk '-F&' '{ printf("%s", $1); }'
  -    fi
  -;;
  -
  -checkheader )
  -    header=$1
  -    rc=1
  -    if [ ".$CPP" = . ]; then
  -        CPP='NOT-AVAILABLE'
  -    fi
  -    if [ ".$CPP" != .NOT-AVAILABLE ]; then
  -        #   create a test C source
  -        cat >conftest.c <<EOT
  -#include <$header>
  -Syntax Error
  -EOT
  -        (eval "$CPP conftest.c >/dev/null") 2>conftest.out
  -        my_error=`grep -v '^ *+' conftest.out`
  -        if [ ".$my_error" = . ]; then
  -            rc=0
  -        fi
  -    else
  -        if [ -f "/usr/include/$header" ]; then
  -            rc=0
  +    time_day=''
  +    time_month=''
  +    time_year=''
  +    time_monthname=''
  +    if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%[DMYm]'`" != . ]; then
  +        time_day=`date '+%d'`
  +        time_month=`date '+%m'`
  +        time_year=`date '+%Y' 2>/dev/null`
  +        if [ ".$time_year" = . ]; then
  +            time_year=`date '+%y'`
  +            case $time_year in
  +                [5-9][0-9]) time_year="19$time_year" ;;
  +                [0-4][0-9]) time_year="20$time_year" ;;
  +            esac
           fi
  +        case $time_month in
  +            1|01) time_monthname='Jan' ;;
  +            2|02) time_monthname='Feb' ;;
  +            3|03) time_monthname='Mar' ;;
  +            4|04) time_monthname='Apr' ;;
  +            5|05) time_monthname='May' ;;
  +            6|06) time_monthname='Jun' ;;
  +            7|07) time_monthname='Jul' ;;
  +            8|08) time_monthname='Aug' ;;
  +            9|09) time_monthname='Sep' ;;
  +              10) time_monthname='Oct' ;;
  +              11) time_monthname='Nov' ;;
  +              12) time_monthname='Dec' ;;
  +        esac
       fi
  -    rm -f conftest.*
  -    exit $rc
  -;;
   
  -findcpp )
  -    #   create a test C source:
  -    #   - has to use extension ".c" because some CPP only accept this one
  -    #   - uses assert.h because this is a standard header and harmless to include
  -    #   - contains a Syntax Error to make sure it passes only the preprocessor
  -    #     but not the real compiler pass
  -    cat >conftest.c <<EOT
  -#include <assert.h>
  -Syntax Error
  -EOT
  -    
  -    #   some braindead systems have a CPP define for a directory :-(
  -    if [ ".$CPP" != . ]; then
  -        if [ -d "$CPP" ]; then
  -            CPP=''
  -        fi
  -    fi
  -    if [ ".$CPP" != . ]; then
  -        #   case 1: user provided a default CPP variable (we only check)
  -        (eval "$CPP conftest.c >/dev/null") 2>conftest.out
  -        my_error=`grep -v '^ *+' conftest.out`
  -        if [ ".$my_error" != . ]; then
  -            CPP=''
  -        fi
  +    #   expand special ``%x'' constructs
  +    if [ ".$opt_e" = .yes ]; then
  +        text=`echo $seo "$text" |\
  +              sed -e "s/%B/${term_bold}/g" \
  +                  -e "s/%b/${term_norm}/g" \
  +                  -e "s/%u/${username}/g" \
  +                  -e "s/%U/${userid}/g" \
  +                  -e "s/%g/${groupname}/g" \
  +                  -e "s/%G/${groupid}/g" \
  +                  -e "s/%h/${hostname}/g" \
  +                  -e "s/%d/${domainname}/g" \
  +                  -e "s/%D/${time_day}/g" \
  +                  -e "s/%M/${time_month}/g" \
  +                  -e "s/%Y/${time_year}/g" \
  +                  -e "s/%m/${time_monthname}/g" 2>/dev/null`
  +    fi
  +
  +    #   create output
  +    if [ .$opt_n = .no ]; then
  +        echo $seo "$text"
       else
  -        #   case 2: no default CPP variable (we have to find one)
  -        #   1. try the standard -E option
  -        CPP="${CC-cc} -E"
  -        (eval "$CPP conftest.c >/dev/null") 2>conftest.out
  -        my_error=`grep -v '^ *+' conftest.out`
  -        if [ ".$my_error" != . ]; then
  -            #   2. try the -E option and GCC's -traditional-ccp option
  -            CPP="${CC-cc} -E -traditional-cpp"
  -            (eval "$CPP conftest.c >/dev/null") 2>conftest.out
  -            my_error=`grep -v '^ *+' conftest.out`
  -            if [ ".$my_error" != . ]; then
  -                #   3. try a standalone cpp command in $PATH and lib dirs
  -                CPP="`./helpers/PrintPath cpp`"
  -                if [ ".$CPP" = . ]; then
  -                    CPP="`./helpers/PrintPath -p/lib:/usr/lib:/usr/local/lib cpp`"
  -                fi
  -                if [ ".$CPP" != . ]; then
  -                    (eval "$CPP conftest.c >/dev/null") 2>conftest.out
  -                    my_error=`grep -v '^ *+' conftest.out`
  -                    if [ ".$my_error" != . ]; then
  -                        #   ok, we gave up...
  -                        CPP=''
  -                    fi
  -                fi
  -            fi
  +        #   the harder part: echo -n is best, because
  +        #   awk may complain about some \xx sequences.
  +        if [ ".$minusn" != . ]; then
  +            echo $seo $minusn "$text"
  +        else
  +            echo dummy | awk '{ printf("%s", TEXT); }' TEXT="$text"
           fi
       fi
  -    
  -    #   cleanup after work
  -    rm -f conftest.*
  -    
  -    #   Ok, empty CPP variable now means it's not available
  -    if [ ".$CPP" = . ]; then
  -        CPP='NOT-AVAILABLE'
  -    fi
  -    
  -    echo $CPP
  -;;
  -
  -findperl )
  -    TMPFILE=/tmp/BnP.sh.$$.tmp
  -    rm -f $TMPFILE
  -    touch $TMPFILE
  -    c=0
  -    for dir in `echo $PATH | sed -e 's/:/ /g'`; do
  -        for perl in perl5 perl miniperl; do
  -             if test -f "$dir/$perl"; then
  -                 perl="$dir/$perl"
  -                 version=`$perl -v | grep version |\
  -                          sed -e 's/.* version //' -e 's/ built.*//' -e 's/ with.*//'`
  -                 versionnum="`echo $version | sed -e 's/\.//g' -e 's/_//g'`"
  -                 versionnum=`expr $versionnum - $c`
  -                 echo "$versionnum $version $perl" >>$TMPFILE
  -             fi
  -        done
  -        c=`expr $c + 1`
  -    done
  -    perlvers="`cat $TMPFILE | sort -u | tail -1 | cut '-d ' -f2`"
  -    perlprog="`cat $TMPFILE | sort -u | tail -1 | cut '-d ' -f3`"
  -    rm -f $TMPFILE
  -    case $perlprog:$perlvers in
  -        *:5* ) 
  +
  +    shtool_exit 0
  +    ;;
  +
  +mdate )
  +    ##
  +    ##  mdate -- Pretty-print modification time of a file or dir
  +    ##  Copyright (c) 1995-1997 Free Software Foundation, Inc.
  +    ##  Copyright (c) 1998-2004 Ralf S. Engelschall <rse@engelschall.com>
  +    ##
  +
  +    fod="$1"
  +    case "$opt_o" in
  +        [dmy][dmy][dmy] )
               ;;
  -        *:* )
  -            echo "Ops, BnP needs an installed Perl 5.00x somewhere in $PATH" 1>&2
  -            exit 1
  +        * ) echo "$msgprefix:Error: invalid argument to option \`-o': $opt_o" 1>&2
  +            shtool_exit 1
               ;;
       esac
  -    
  -    #   switch to perl interpreter
  -    echo "$perlprog"
  -;;
  -
  -findprg )
  -    #   parameters
  -    silent=no
  -    pathlist=$PATH
  -    namelist=''
  -    
  -    #   parse argument line
  -    for opt
  -    do
  -        case $opt in
  -            -s  ) silent=yes ;;
  -            -p* ) pathlist="`echo $opt | cut -c3-`" ;;
  -            *   ) namelist="$namelist $opt" ;;
  -        esac
  -    done
  -    
  -    #   check whether the test command supports the -x option
  -    testfile="findprg.t.$$"
  -    cat >$testfile <<EOT
  -if [ -x / ] || [ -x /bin ] || [ -x /bin/ls ]; then
  -    exit 0
  -fi
  -exit 1
  -EOT
  -    if /bin/sh $testfile 2>/dev/null; then
  -        minusx="-x"
  +    if [ ! -r "$fod" ]; then
  +        echo "$msgprefix:Error: file or directory not found: $fod" 1>&2
  +        shtool_exit 1
  +    fi
  +
  +    #   prevent "date" giving response in another language
  +    LANG=C;    export LANG
  +    LC_ALL=C;  export LC_ALL
  +    LC_TIME=C; export LC_TIME
  +
  +    #   get the extended ls output of the file or directory.
  +    if /bin/ls -L /dev/null >/dev/null 2>&1; then
  +        set - x`/bin/ls -L -l -d $fod`
       else
  -        minusx="-r"
  +        set - x`/bin/ls -l -d $fod`
       fi
  -    rm -f $testfile
  -    
  -    paths="`echo $pathlist |\
  -            sed -e 's/^:/.:/' \
  -                -e 's/::/:.:/g' \
  -                -e 's/:$/:./' \
  -                -e 's/:/ /g'`"
  -    #   iterate over names
  -    for name in $namelist; do
  -        #   iterate over paths
  -        for path in $paths; do
  -            if [ $minusx "$path/$name" ] && [ ! -d "$path/$name" ]; then
  -                if [ "$silent" != "yes" ]; then
  -                    echo "$path/$name"
  -                fi
  -                #   found!
  -                exit 0
  -            fi
  -        done
  +
  +    #   The month is at least the fourth argument
  +    #   (3 shifts here, the next inside the loop).
  +    shift; shift; shift
  +
  +    #   Find the month. Next argument is day, followed by the year or time.
  +    month=""
  +    while [ ".$month" = . ]; do
  +        shift
  +        case $1 in
  +            Jan) month=January;   nummonth=1  ;;
  +            Feb) month=February;  nummonth=2  ;;
  +            Mar) month=March;     nummonth=3  ;;
  +            Apr) month=April;     nummonth=4  ;;
  +            May) month=May;       nummonth=5  ;;
  +            Jun) month=June;      nummonth=6  ;;
  +            Jul) month=July;      nummonth=7  ;;
  +            Aug) month=August;    nummonth=8  ;;
  +            Sep) month=September; nummonth=9  ;;
  +            Oct) month=October;   nummonth=10 ;;
  +            Nov) month=November;  nummonth=11 ;;
  +            Dec) month=December;  nummonth=12 ;;
  +        esac
       done
  -    
  -    #   not found!
  -    exit 1
  -;;
  +    day="$2"
  +    year="$3"
   
  -fixperm )
  -    for p in $*; do
  -        for file in `find $p -depth -print`; do
  -            if [ -f $file ]; then
  -                if [ -x $file ]; then
  -                    echo "    $file (FILE/EXEC)"
  -                    chmod 775 $file
  -                else
  -                    echo "    $file (FILE/REGULAR)"
  -                    chmod 664 $file
  -                fi
  -                continue
  +    #   We finally have to deal with the problem that the "ls" output
  +    #   gives either the time of the day or the year.
  +    case $year in
  +        *:*)
  +            this_year=`date '+%Y' 2>/dev/null`
  +            if [ ".$this_year" = . ]; then
  +                this_year=`date '+%y'`
  +                case $this_year in
  +                    [5-9][0-9]) this_year="19$this_year" ;;
  +                    [0-4][0-9]) this_year="20$this_year" ;;
  +                esac
               fi
  -            if [ -d $file ]; then
  -                echo "    $file (DIR)"
  -                chmod 775 $file
  -                continue
  +            #   for the following months of the last year the time notation
  +            #   is usually also used for files modified in the last year.
  +            this_month=`date '+%m'`
  +            if (expr $nummonth \> $this_month) >/dev/null; then
  +                this_year=`expr $this_year - 1`
               fi
  -            echo "    $file (UNKNOWN)"
  -        done
  +            year="$this_year"
  +            ;;
  +    esac
  +
  +    #   Optionally fill day and month with leeding zeros
  +    if [ ".$opt_z" = .yes ]; then
  +        case $day in
  +            [0-9][0-9] ) ;;
  +                 [0-9] ) day="0$day" ;;
  +        esac
  +        case $nummonth in
  +            [0-9][0-9] ) ;;
  +                 [0-9] ) nummonth="0$nummonth" ;;
  +        esac
  +    fi
  +
  +    #   Optionally use digits for month
  +    if [ ".$opt_d" = .yes ]; then
  +        month="$nummonth"
  +    fi
  +
  +    #   Optionally shorten the month name to three characters
  +    if [ ".$opt_s" = .yes ]; then
  +        month=`echo $month | cut -c1-3`
  +    fi
  +
  +    #   Output the resulting date string
  +    echo dummy | awk '{
  +        for (i = 0; i < 3; i++) {
  +            now = substr(order, 1, 1);
  +            order = substr(order, 2);
  +            if (now == "d")
  +                out = day;
  +            else if (now == "m")
  +                out = month;
  +            else if (now == "y")
  +                out = year;
  +            if (i < 2)
  +                printf("%s%s", out, field);
  +            else
  +                printf("%s", out);
  +        }
  +        if (newline != "yes")
  +            printf("\n");
  +    }' "day=$day" "month=$month" "year=$year" \
  +       "field=$opt_f" "order=$opt_o" "newline=$opt_n"
  +
  +    shtool_exit 0
  +    ;;
  +
  +table )
  +    ##
  +    ##  table -- Pretty-print a field-separated list as a table
  +    ##  Copyright (c) 1998-2004 Ralf S. Engelschall <rse@engelschall.com>
  +    ##
  +
  +    if [ $opt_c -gt 4 ]; then
  +        echo "$msgprefix:Error: Invalid number of colums (1..4 allowed only)" 1>&2
  +        shtool_exit 1
  +    fi
  +    case "x$opt_F" in
  +        x? ) ;;
  +        *  ) echo "$msgprefix:Error: Invalid separator (one char allowed only)" 1>&2; shtool_exit 1 ;;
  +    esac
  +
  +    #   split the list into a table
  +    list=`
  +        IFS="$opt_F"
  +        for entry in $*; do
  +            if [ ".$entry" != . ]; then
  +                echo "$entry"
  +            fi
  +        done |\
  +        awk "
  +            BEGIN { list = \"\"; n = 0; }
  +            {
  +                list = list \\$1;
  +                n = n + 1;
  +                if (n < $opt_c) {
  +                    list = list \":\";
  +                }
  +                if (n == $opt_c) {
  +                    list = list \"\\n\";
  +                    n = 0;
  +                }
  +            }
  +            END { print list; }
  +         "
  +    `
  +
  +    #   format table cells and make sure table
  +    #   doesn't exceed maximum width
  +    OIFS="$IFS"
  +    IFS='
  +'
  +    for entry in $list; do
  +        case $opt_c in
  +            1 ) eval "echo \"\${entry}\" | awk -F: '{ printf(\"%-${opt_w}s\\n\", \$1); }'" ;;
  +            2 ) eval "echo \"\${entry}\" | awk -F: '{ printf(\"%-${opt_w}s %-${opt_w}s\\n\", \$1, \$2); }'" ;;
  +            3 ) eval "echo \"\${entry}\" | awk -F: '{ printf(\"%-${opt_w}s %-${opt_w}s %-${opt_w}s\\n\", \$1, \$2, \$3); }'" ;;
  +            4 ) eval "echo \"\${entry}\" | awk -F: '{ printf(\"%-${opt_w}s %-${opt_w}s %-${opt_w}s %-${opt_w}s\\n\", \$1, \$2, \$3, \$4); }'" ;;
  +        esac
  +    done |\
  +    awk "{
  +        if (length(\$0) > $opt_s) {
  +            printf(\"%s\\n\", substr(\$0, 0, $opt_s-1));
  +        } else {
  +            print \$0;
  +        }
  +    }"
  +    IFS="$OIFS"
  +
  +    shtool_exit 0
  +    ;;
  +
  +prop )
  +    ##
  +    ##  prop -- Display progress with a running propeller
  +    ##  Copyright (c) 1998-2004 Ralf S. Engelschall <rse@engelschall.com>
  +    ##
  +
  +    perl=''
  +    for dir in `echo $PATH | sed -e 's/:/ /g'` .; do
  +        if [ -f "$dir/perl" ]; then
  +            perl="$dir/perl"
  +            break
  +        fi
       done
  -;;
  +    if [ ".$perl" != . ]; then
  +        #   Perl is preferred because writing to STDERR in
  +        #   Perl really writes immediately as one would expect
  +        $perl -e '
  +            @p = ("|","/","-","\\");
  +            $i = 0;
  +            while (<STDIN>) {
  +                printf(STDERR "\r%s...%s\b", $ARGV[0], $p[$i++]);
  +                $i = 0 if ($i > 3);
  +            }
  +            printf(STDERR "\r%s    \n", $ARGV[0]);
  +        ' "$opt_p"
  +    else
  +        #   But if Perl doesn't exists we use Awk even
  +        #   some Awk's buffer even the /dev/stderr writing :-(
  +        awk '
  +            BEGIN {
  +                split("|#/#-#\\", p, "#");
  +                i = 1;
  +            }
  +            {
  +                printf("\r%s%c\b", prefix, p[i++]) > "/dev/stderr";
  +                if (i > 4) { i = 1; }
  +            }
  +            END {
  +                printf("\r%s    \n", prefix) > "/dev/stderr";
  +            }
  +        ' "prefix=$opt_p"
  +    fi
  +
  +    shtool_exit 0
  +    ;;
   
  -fp2rp )
  -    if [ "x$1" = "x." ]; then
  -        rp='.'
  +move )
  +    ##
  +    ##  move -- Move files with simultaneous substitution
  +    ##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +    ##
  +
  +    src="$1"
  +    dst="$2"
  +
  +    #   consistency checks
  +    if [ ".$src" = . ] || [ ".$dst" = . ]; then
  +        echo "$msgprefix:Error: Invalid arguments" 1>&2
  +        shtool_exit 1
  +    fi
  +    if [ ".$src" = ".$dst" ]; then
  +        echo "$msgprefix:Error: Source and destination files are the same" 1>&2
  +        shtool_exit 1
  +    fi
  +    expsrc="$src"
  +    if [ ".$opt_e" = .yes ]; then
  +        expsrc="`echo $expsrc`"
  +    fi
  +    if [ ".$opt_e" = .yes ]; then
  +        if [ ".`echo "$src" | sed -e 's;^.*\\*.*$;;'`" = ".$src" ]; then
  +            echo "$msgprefix:Error: Source doesn't contain wildcard ('*'): $dst" 1>&2
  +            shtool_exit 1
  +        fi
  +        if [ ".`echo "$dst" | sed -e 's;^.*%[1-9].*$;;'`" = ".$dst" ]; then
  +            echo "$msgprefix:Error: Destination doesn't contain substitution ('%N'): $dst" 1>&2
  +            shtool_exit 1
  +        fi
  +        if [ ".$expsrc" = ".$src" ]; then
  +            echo "$msgprefix:Error: Sources not found or no asterisk : $src" 1>&2
  +            shtool_exit 1
  +        fi
       else
  -        rp=''
  -        for pe in `IFS="$IFS/"; echo $1`; do
  -            rp="../$rp"
  -        done
  +        if [ ! -r "$src" ]; then
  +            echo "$msgprefix:Error: Source not found: $src" 1>&2
  +            shtool_exit 1
  +        fi
       fi
  -    echo $rp | sed -e 's:/$::'
  -;;
   
  -guessos )
  -    MACHINE=`(uname -m) 2>/dev/null` || MACHINE="unknown"
  -    RELEASE=`(uname -r) 2>/dev/null` || RELEASE="unknown"
  -    SYSTEM=`(uname -s) 2>/dev/null`  || SYSTEM="unknown"
  -    VERSION=`(uname -v) 2>/dev/null` || VERSION="unknown"
  -    
  -    XREL=`uname -X 2>/dev/null | grep "^Release" | awk '{print $3}'`
  -    if [ "x$XREL" != "x" ]; then
  -        if [ -f /etc/kconfig ]; then
  -            case "$XREL" in
  -                4.0|4.1) echo "${MACHINE}-whatever-isc4"; exit 0 ;;
  -            esac
  +    #   determine substitution patterns
  +    if [ ".$opt_e" = .yes ]; then
  +        srcpat=`echo "$src" | sed -e 's/\\./\\\\./g' -e 's/;/\\;/g' -e 's;\\*;\\\\(.*\\\\);g'`
  +        dstpat=`echo "$dst" | sed -e 's;%\([1-9]\);\\\\\1;g'`
  +    fi
  +
  +    #   iterate over source(s)
  +    for onesrc in $expsrc; do
  +        if [ .$opt_e = .yes ]; then
  +            onedst=`echo $onesrc | sed -e "s;$srcpat;$dstpat;"`
           else
  -        case "$XREL" in
  -            3.2v4.2) 
  -                echo "whatever-whatever-sco3"; exit 0 
  -                ;;
  -            3.2v5.0*) 
  -                echo "whatever-whatever-sco5"; exit 0 
  -                ;;
  -            4.2MP)
  -                if [ "x$VERSION" = "x2.1.1" ]; then
  -                    echo "${MACHINE}-whatever-unixware211"; exit 0
  -                elif [ "x$VERSION" = "x2.1.2" ]; then
  -                    echo "${MACHINE}-whatever-unixware212"; exit 0
  +            onedst="$dst"
  +        fi
  +        errorstatus=0
  +        if [ ".$opt_v" = .yes ]; then
  +            echo "$onesrc -> $onedst"
  +        fi
  +        if [ ".$opt_p" = .yes ]; then
  +            if [ -r $onedst ]; then
  +                if cmp -s $onesrc $onedst; then
  +                    if [ ".$opt_t" = .yes ]; then
  +                        echo "rm -f $onesrc" 1>&2
  +                    fi
  +                    rm -f $onesrc || errorstatus=$?
                   else
  -                    echo "${MACHINE}-whatever-unixware2"; exit 0
  +                    if [ ".$opt_t" = .yes ]; then
  +                        echo "mv -f $onesrc $onedst" 1>&2
  +                    fi
  +                    mv -f $onesrc $onedst || errorstatus=$?
                   fi
  -                ;;
  -            4.2) 
  -                echo "whatever-whatever-unixware1"; exit 0 
  -                ;;
  -            5)
  -                case "$VERSION" in
  -                    7*) echo "${MACHINE}-whatever-unixware7"; exit 0 ;;
  -                esac
  -                ;;
  -        esac
  +            else
  +                if [ ".$opt_t" = .yes ]; then
  +                    echo "mv -f $onesrc $onedst" 1>&2
  +                fi
  +                mv -f $onesrc $onedst || errorstatus=$?
  +            fi
  +        else
  +            if [ ".$opt_t" = .yes ]; then
  +                echo "mv -f $onesrc $onedst" 1>&2
  +            fi
  +            mv -f $onesrc $onedst || errorstatus=$?
           fi
  -    fi
  -    case "${SYSTEM}:${RELEASE}:${VERSION}:${MACHINE}" in
  -        MiNT:*)
  -            echo "m68k-atari-mint"; exit 0
  -            ;;
  -        A/UX:*)
  -            echo "m68k-apple-aux3"; exit 0
  -            ;;
  -        AIX:*)
  -            echo "${MACHINE}-ibm-aix${VERSION}.${RELEASE}"; exit 0
  -            ;;
  -        dgux:*)
  -            echo "${MACHINE}-dg-dgux"; exit 0
  -            ;;
  -        HI-UX:*)
  -            echo "${MACHINE}-hi-hiux"; exit 0
  -            ;;
  -        HP-UX:*)
  -            HPUXVER=`echo ${RELEASE}|sed -e 's/[^.]*.[0B]*//'`
  -            echo "${MACHINE}-hp-hpux${HPUXVER}"; exit 0
  -            ;;
  -        IRIX:*)
  -            if [ -f /usr/lib32/mips4/libm.so ]; then
  -                echo "${MACHINE}-sgi-irix32"; exit 0
  -            else
  -                echo "${MACHINE}-sgi-irix"; exit 0
  +        if [ $errorstatus -ne 0 ]; then
  +            break;
  +        fi
  +    done
  +
  +    shtool_exit $errorstatus
  +    ;;
  +
  +install )
  +    ##
  +    ##  install -- Install a program, script or datafile
  +    ##  Copyright (c) 1997-2004 Ralf S. Engelschall <rse@engelschall.com>
  +    ##
  +
  +    #   special case: "shtool install -d <dir> [...]" internally
  +    #   maps to "shtool mkdir -f -p -m 755 <dir> [...]"
  +    if [ "$opt_d" = yes ]; then
  +        cmd="$0 mkdir -f -p -m 755"
  +        if [ ".$opt_o" != . ]; then
  +            cmd="$cmd -o '$opt_o'"
  +        fi
  +        if [ ".$opt_g" != . ]; then
  +            cmd="$cmd -g '$opt_g'"
  +        fi
  +        if [ ".$opt_v" = .yes ]; then
  +            cmd="$cmd -v"
  +        fi
  +        if [ ".$opt_t" = .yes ]; then
  +            cmd="$cmd -t"
  +        fi
  +        for dir in "$@"; do
  +            eval "$cmd $dir" || shtool_exit $?
  +        done
  +        shtool_exit 0
  +    fi
  +
  +    #   determine source(s) and destination
  +    argc=$#
  +    srcs=""
  +    while [ $# -gt 1 ]; do
  +        srcs="$srcs $1"
  +        shift
  +    done
  +    dstpath="$1"
  +
  +    #   type check for destination
  +    dstisdir=0
  +    if [ -d $dstpath ]; then
  +        dstpath=`echo "$dstpath" | sed -e 's:/$::'`
  +        dstisdir=1
  +    fi
  +
  +    #   consistency check for destination
  +    if [ $argc -gt 2 ] && [ $dstisdir = 0 ]; then
  +        echo "$msgprefix:Error: multiple sources require destination to be directory" 1>&2
  +        shtool_exit 1
  +    fi
  +
  +    #   iterate over all source(s)
  +    for src in $srcs; do
  +        dst=$dstpath
  +
  +        #   if destination is a directory, append the input filename
  +        if [ $dstisdir = 1 ]; then
  +            dstfile=`echo "$src" | sed -e 's;.*/\([^/]*\)$;\1;'`
  +            dst="$dst/$dstfile"
  +        fi
  +
  +        #   check for correct arguments
  +        if [ ".$src" = ".$dst" ]; then
  +            echo "$msgprefix:Warning: source and destination are the same - skipped" 1>&2
  +            continue
  +        fi
  +        if [ -d "$src" ]; then
  +            echo "$msgprefix:Warning: source \`$src' is a directory - skipped" 1>&2
  +            continue
  +        fi
  +
  +        #   make a temp file name in the destination directory
  +        dsttmp=`echo $dst |\
  +                sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;' -e 's;^$;.;' \
  +                    -e "s;\$;/#INST@$$#;"`
  +
  +        #   verbosity
  +        if [ ".$opt_v" = .yes ]; then
  +            echo "$src -> $dst" 1>&2
  +        fi
  +
  +        #   copy or move the file name to the temp name
  +        #   (because we might be not allowed to change the source)
  +        if [ ".$opt_C" = .yes ]; then
  +            opt_c=yes
  +        fi
  +        if [ ".$opt_c" = .yes ]; then
  +            if [ ".$opt_t" = .yes ]; then
  +                echo "cp $src $dsttmp" 1>&2
               fi
  -            ;;
  -        IRIX64:*)
  -            echo "${MACHINE}-sgi-irix64"; exit 0
  -            ;;
  -        Linux:[2-9].*)
  -            echo "${MACHINE}-whatever-linux2"; exit 0
  -            ;;
  -        Linux:1.*)
  -            echo "${MACHINE}-whatever-linux1"; exit 0
  -            ;;
  -        LynxOS:*)
  -            echo "${MACHINE}-lynx-lynxos"; exit 0
  -            ;;
  -        BSD/386:*:*:*486*|BSD/OS:*:*:*:*486*)
  -            echo "i486-whatever-bsdi"; exit 0
  -            ;;
  -        BSD/386:*|BSD/OS:*)
  -            echo "${MACHINE}-whatever-bsdi"; exit 0
  -            ;;
  -        FreeBSD:*:*:*486*)
  -            FREEBSDVERS=`echo ${RELEASE}|sed -e 's/[-(].*//'`
  -            echo "i486-pc-freebsd${FREEBSDVERS}"; exit 0
  -            ;;
  -        FreeBSD:*)
  -            FREEBSDVERS=`echo ${RELEASE}|sed -e 's/[-(].*//'`
  -            echo "${MACHINE}-pc-freebsd${FREEBSDVERS}"; exit 0
  -            ;;
  -        NetBSD:*:*:*486*)
  -            echo "i486-whatever-netbsd"; exit 0
  -            ;;
  -        NetBSD:*)
  -            echo "${MACHINE}-whatever-netbsd"; exit 0
  -            ;;
  -        OpenBSD:*)
  -            echo "${MACHINE}-whatever-openbsd"; exit 0
  -            ;;
  -        OSF1:*:*:*alpha*)
  -            echo "${MACHINE}-dec-osf"; exit 0
  -            ;;
  -        QNX:*)
  -            if [ "$VERSION" -gt 422 ]; then
  -                echo "${MACHINE}-qssl-qnx32"
  -            else
  -                echo "${MACHINE}-qssl-qnx"
  +            cp $src $dsttmp || shtool_exit $?
  +        else
  +            if [ ".$opt_t" = .yes ]; then
  +                echo "mv $src $dsttmp" 1>&2
               fi
  -            exit 0
  -            ;;
  -        Paragon*:*:*:*)
  -            echo "i860-intel-osf1"; exit 0
  -            ;;
  -        SunOS:5.*)
  -            SOLVER=`echo ${RELEASE}|awk -F. '{
  -            if (NF < 3)
  -                printf "2%s0\n",$2
  -            else
  -                printf "2%s%s\n",$2,$3
  -            }'`
  -            echo "${MACHINE}-sun-solaris2.${SOLVER}"; exit 0
  -            ;;
  -        SunOS:*)
  -            echo "${MACHINE}-sun-sunos4"; exit 0
  -            ;;
  -        UNIX_System_V:4.*:*)
  -            echo "${MACHINE}-whatever-sysv4"; exit 0
  -            ;;
  -        unix:3.0.9*:*:88k)
  -            echo "${MACHINE}-encore-sysv4"; exit 0
  -            ;;
  -        *:4*:R4*:m88k)
  -            echo "${MACHINE}-whatever-sysv4"; exit 0
  -            ;;
  -        UnixWare:5:99*:*)
  -            # Gemini, beta release of next rev of unixware
  -            echo "${MACHINE}-whatever-unixware212"; exit 0
  -            ;;
  -        DYNIX/ptx:4*:*)
  -            echo "${MACHINE}-whatever-sysv4"; exit 0
  -            ;;
  -        *:4.0:3.0:[345][0-9]?? | *:4.0:3.0:3[34]??[/,]* | library:*)
  -            echo "x86-ncr-sysv4"; exit 0
  -            ;;
  -        ULTRIX:*)
  -            echo "${MACHINE}-unknown-ultrix"; exit 0
  -            ;;
  -        SINIX-?:* | ReliantUNIX-?:*)
  -            echo "${MACHINE}-siemens-sysv4"; exit 0
  -            ;;
  -        POSIX*BS2000)
  -            echo "${MACHINE}-siemens-sysv4"; exit 0
  -            ;;
  -        machten:*)
  -           echo "${MACHINE}-tenon-${SYSTEM}"; exit 0;
  -           ;;
  -        ConvexOS:*:11.*:*)
  -           echo "${MACHINE}-v11-${SYSTEM}"; exit 0;
  -           ;;
  -        UNIX_SV:*:*:maxion)
  -           echo "${MACHINE}-ccur-sysv4"; exit 0;
  -           ;;
  -        PowerMAX_OS:*:*:Night_Hawk)
  -           MACHINE=`uname -p`
  -           echo "${MACHINE}-concurrent-powermax"; exit 0;
  -           ;;
  -        UNIX_SV:*)
  -           if [ -d /usr/nec ];then
  -               echo "mips-nec-sysv4"; exit 0;
  -           fi
  -           ;;
  -        NonStop-UX:4.[02]*:[BC]*:*)
  -           echo "${MACHINE}-tandem-sysv4"; exit 0;
  -           ;;
  -        Rhapsody:*:*:*)
  -           case "${MACHINE}" in
  -               Power*) MACHINE=powerpc ;;
  -           esac
  -           echo "${MACHINE}-apple-rhapsody${RELEASE}"; exit 0
  -           ;;
  -        "RISC iX":*)
  -           echo "arm-whatever-riscix"; exit 0;
  -           ;;
  -        *:4.0:2:*)
  -           echo "whatever-unisys-sysv4"; exit 0;
  -           ;;
  -        *:*:dcosx:NILE*)
  -           echo "pyramid-pyramid-svr4"; exit 0;
  -           ;;
  -        *:*:*:"DRS 6000")
  -           echo "drs6000-whatever-whatever"; exit 0;
  -           ;;
  -    esac
  -    # existance of the /usr/apollo directory is proof enough for Apollo
  -    if [ -d /usr/apollo ]; then
  -        echo "whatever-apollo-whatever"
  -        exit 0
  -    fi
  -    # Now NeXT
  -    ISNEXT=`hostinfo 2>/dev/null`
  -    case "$ISNEXT" in
  -        *NeXT*)
  -             # Swiped from a friendly uname clone for NEXT/OPEN Step.
  -             NEXTOSVER="`hostinfo | sed -n 's/.*NeXT Mach \([0-9\.]*\).*/\1/p'`"
  -             if [ "$NEXTOSVER" -gt 3.3 ]; then
  -                 NEXTOS="openstep"
  -             else
  -                 NEXTOS="nextstep"
  -             fi
  -             NEXTREL="`hostinfo | sed -n 's/.*NeXT Mach \([0-9\.]*\).*/\1/p'`" 
  -             NEXTARCH=`arch`
  -             echo "${NEXTARCH}-next-${NEXTOS}${NEXTREL}" ; exit 0
  -             ;;
  -    esac
  -    
  -    echo "${MACHINE}-whatever-${SYSTEM}|${RELEASE}|${VERSION}"
  -;;
  +            mv $src $dsttmp || shtool_exit $?
  +        fi
   
  -install )
  -    #
  -    #   put in absolute paths if you don't have them in your path; 
  -    #   or use env. vars.
  -    #
  -    mvprog="${MVPROG-mv}"
  -    cpprog="${CPPROG-cp}"
  -    chmodprog="${CHMODPROG-chmod}"
  -    chownprog="${CHOWNPROG-chown}"
  -    chgrpprog="${CHGRPPROG-chgrp}"
  -    stripprog="${STRIPPROG-strip}"
  -    rmprog="${RMPROG-rm}"
  -    
  -    #
  -    #   parse argument line
  -    #
  -    instcmd="$mvprog"
  -    chmodcmd=""
  -    chowncmd=""
  -    chgrpcmd=""
  -    stripcmd=""
  -    rmcmd="$rmprog -f"
  -    mvcmd="$mvprog"
  -    src=""
  -    dst=""
  -    while [ ".$1" != . ]; do
  -        case $1 in
  -            -c) instcmd="$cpprog"
  -                shift; continue
  -                ;;
  -            -m) chmodcmd="$chmodprog $2"
  -                shift; shift; continue
  -                ;;
  -            -o) chowncmd="$chownprog $2"
  -                shift; shift; continue
  -                ;;
  -            -g) chgrpcmd="$chgrpprog $2"
  -                shift; shift; continue
  -                ;;
  -            -s) stripcmd="$stripprog"
  -                shift; continue;;
  -            -S) stripcmd="$stripprog $2"
  -                shift; shift; continue ;;
  -            *)  if [ ".$src" = . ]; then
  -                    src=$1
  -                else
  -                    dst=$1
  +        #   adjust the target file
  +        if [ ".$opt_e" != . ]; then
  +            sed='sed'
  +            OIFS="$IFS"; IFS="$ASC_NL"; set -- $opt_e; IFS="$OIFS"
  +            for e
  +            do
  +                sed="$sed -e '$e'"
  +            done
  +            cp $dsttmp $dsttmp.old
  +            chmod u+w $dsttmp
  +            eval "$sed <$dsttmp.old >$dsttmp" || shtool_exit $?
  +            rm -f $dsttmp.old
  +        fi
  +        if [ ".$opt_s" = .yes ]; then
  +            if [ ".$opt_t" = .yes ]; then
  +                echo "strip $dsttmp" 1>&2
  +            fi
  +            strip $dsttmp || shtool_exit $?
  +        fi
  +        if [ ".$opt_o" != . ]; then
  +            if [ ".$opt_t" = .yes ]; then
  +                echo "chown $opt_o $dsttmp" 1>&2
  +            fi
  +            chown $opt_o $dsttmp || shtool_exit $?
  +        fi
  +        if [ ".$opt_g" != . ]; then
  +            if [ ".$opt_t" = .yes ]; then
  +                echo "chgrp $opt_g $dsttmp" 1>&2
  +            fi
  +            chgrp $opt_g $dsttmp || shtool_exit $?
  +        fi
  +        if [ ".$opt_m" != ".-" ]; then
  +            if [ ".$opt_t" = .yes ]; then
  +                echo "chmod $opt_m $dsttmp" 1>&2
  +            fi
  +            chmod $opt_m $dsttmp || shtool_exit $?
  +        fi
  +
  +        #   determine whether to do a quick install
  +        #   (has to be done _after_ the strip was already done)
  +        quick=no
  +        if [ ".$opt_C" = .yes ]; then
  +            if [ -r $dst ]; then
  +                if cmp -s $src $dst; then
  +                    quick=yes
                   fi
  -                shift; continue
  -                ;;
  -        esac
  +            fi
  +        fi
  +
  +        #   finally, install the file to the real destination
  +        if [ $quick = yes ]; then
  +            if [ ".$opt_t" = .yes ]; then
  +                echo "rm -f $dsttmp" 1>&2
  +            fi
  +            rm -f $dsttmp
  +        else
  +            if [ ".$opt_t" = .yes ]; then
  +                echo "rm -f $dst && mv $dsttmp $dst" 1>&2
  +            fi
  +            rm -f $dst && mv $dsttmp $dst
  +        fi
       done
  -    if [ ".$src" = . ]; then
  -         echo "install.sh: no input file specified"
  -         exit 1
  -    fi
  -    if [ ".$dst" = . ]; then
  -         echo "install.sh: no destination specified"
  -         exit 1
  -    fi
  -    
  -    #
  -    #  If destination is a directory, append the input filename; if
  -    #  your system does not like double slashes in filenames, you may
  -    #  need to add some logic
  -    #
  -    if [ -d $dst ]; then
  -        dst="$dst/`basename $src`"
  -    fi
  -    
  -    #  Make a temp file name in the proper directory.
  -    dstdir=`dirname $dst`
  -    dsttmp=$dstdir/#inst.$$#
  -    
  -    #  Move or copy the file name to the temp name
  -    $instcmd $src $dsttmp
  -    
  -    #  And set any options; do chmod last to preserve setuid bits
  -    if [ ".$chowncmd" != . ]; then $chowncmd $dsttmp; fi
  -    if [ ".$chgrpcmd" != . ]; then $chgrpcmd $dsttmp; fi
  -    if [ ".$stripcmd" != . ]; then $stripcmd $dsttmp; fi
  -    if [ ".$chmodcmd" != . ]; then $chmodcmd $dsttmp; fi
  -    
  -    #  Now rename the file to the real destination.
  -    $rmcmd $dst
  -    $mvcmd $dsttmp $dst
  -    
  -    exit 0
  -;;
  +
  +    shtool_exit 0
  +    ;;
   
   mkdir )
  -    umask 022
  +    ##
  +    ##  mkdir -- Make one or more directories
  +    ##  Copyright (c) 1996-2004 Ralf S. Engelschall <rse@engelschall.com>
  +    ##
  +
       errstatus=0
  -    for file in ${1+"$@"} ; do 
  -        set fnord `echo ":$file" |\
  -                   sed -e 's/^:\//%/' -e 's/^://' -e 's/\// /g' -e 's/^%/\//'`
  +    for p in ${1+"$@"}; do
  +        #   if the directory already exists...
  +        if [ -d "$p" ]; then
  +            if [ ".$opt_f" = .no ] && [ ".$opt_p" = .no ]; then
  +                echo "$msgprefix:Error: directory already exists: $p" 1>&2
  +                errstatus=1
  +                break
  +            else
  +                continue
  +            fi
  +        fi
  +        #   if the directory has to be created...
  +        if [ ".$opt_p" = .no ]; then
  +            if [ ".$opt_t" = .yes ]; then
  +                echo "mkdir $p" 1>&2
  +            fi
  +            mkdir $p || errstatus=$?
  +            if [ ".$opt_o" != . ]; then
  +                if [ ".$opt_t" = .yes ]; then
  +                    echo "chown $opt_o $p" 1>&2
  +                fi
  +                chown $opt_o $p || errstatus=$?
  +            fi
  +            if [ ".$opt_g" != . ]; then
  +                if [ ".$opt_t" = .yes ]; then
  +                    echo "chgrp $opt_g $p" 1>&2
  +                fi
  +                chgrp $opt_g $p || errstatus=$?
  +            fi
  +            if [ ".$opt_m" != . ]; then
  +                if [ ".$opt_t" = .yes ]; then
  +                    echo "chmod $opt_m $p" 1>&2
  +                fi
  +                chmod $opt_m $p || errstatus=$?
  +            fi
  +        else
  +            #   the smart situation
  +            set fnord `echo ":$p" |\
  +                       sed -e 's/^:\//%/' \
  +                           -e 's/^://' \
  +                           -e 's/\// /g' \
  +                           -e 's/^%/\//'`
  +            shift
  +            pathcomp=''
  +            for d in ${1+"$@"}; do
  +                pathcomp="$pathcomp$d"
  +                case "$pathcomp" in
  +                    -* ) pathcomp="./$pathcomp" ;;
  +                esac
  +                if [ ! -d "$pathcomp" ]; then
  +                    if [ ".$opt_t" = .yes ]; then
  +                        echo "mkdir $pathcomp" 1>&2
  +                    fi
  +                    mkdir $pathcomp || errstatus=$?
  +                    if [ ".$opt_o" != . ]; then
  +                        if [ ".$opt_t" = .yes ]; then
  +                            echo "chown $opt_o $pathcomp" 1>&2
  +                        fi
  +                        chown $opt_o $pathcomp || errstatus=$?
  +                    fi
  +                    if [ ".$opt_g" != . ]; then
  +                        if [ ".$opt_t" = .yes ]; then
  +                            echo "chgrp $opt_g $pathcomp" 1>&2
  +                        fi
  +                        chgrp $opt_g $pathcomp || errstatus=$?
  +                    fi
  +                    if [ ".$opt_m" != . ]; then
  +                        if [ ".$opt_t" = .yes ]; then
  +                            echo "chmod $opt_m $pathcomp" 1>&2
  +                        fi
  +                        chmod $opt_m $pathcomp || errstatus=$?
  +                    fi
  +                fi
  +                pathcomp="$pathcomp/"
  +            done
  +        fi
  +    done
  +
  +    shtool_exit $errstatus
  +    ;;
  +
  +mkln )
  +    ##
  +    ##  mkln -- Make link with calculation of relative paths
  +    ##  Copyright (c) 1998-2004 Ralf S. Engelschall <rse@engelschall.com>
  +    ##
  +
  +    #   determine source(s) and destination
  +    args=$?
  +    srcs=""
  +    while [ $# -gt 1 ]; do
  +        srcs="$srcs $1"
           shift
  -        pathcomp=
  -        for d in ${1+"$@"}; do
  -            pathcomp="$pathcomp$d"
  -            case "$pathcomp" in
  -                -* ) pathcomp=./$pathcomp ;;
  -            esac
  -            if test ! -d "$pathcomp"; then
  -                echo "mkdir $pathcomp" 1>&2
  -                mkdir "$pathcomp" || errstatus=$?
  +    done
  +    dst="$1"
  +    if [ ! -d $dst ]; then
  +        if [ $args -gt 2 ]; then
  +            echo "$msgprefix:Error: multiple sources not allowed when target isn't a directory" 1>&2
  +            shtool_exit 1
  +        fi
  +    fi
  +
  +    #   determine link options
  +    lnopt=""
  +    if [ ".$opt_f" = .yes ]; then
  +        lnopt="$lnopt -f"
  +    fi
  +    if [ ".$opt_s" = .yes ]; then
  +        lnopt="$lnopt -s"
  +    fi
  +
  +    #   iterate over sources
  +    for src in $srcs; do
  +        #   determine if one of the paths is an absolute path,
  +        #   because then we _have_ to use an absolute symlink
  +        oneisabs=0
  +        srcisabs=0
  +        dstisabs=0
  +        case $src in
  +            /* ) oneisabs=1; srcisabs=1 ;;
  +        esac
  +        case $dst in
  +            /* ) oneisabs=1; dstisabs=1 ;;
  +        esac
  +
  +        #   split source and destination into dir and base name
  +        if [ -d $src ]; then
  +            srcdir=`echo $src | sed -e 's;/*$;;'`
  +            srcbase=""
  +        else
  +            srcdir=`echo  $src | sed -e 's;^[^/]*$;;' -e 's;^\(.*/\)[^/]*$;\1;' -e 's;\(.\)/$;\1;'`
  +            srcbase=`echo $src | sed -e 's;.*/\([^/]*\)$;\1;'`
  +        fi
  +        if [ -d $dst ]; then
  +            dstdir=`echo $dst | sed -e 's;/*$;;'`
  +            dstbase=""
  +        else
  +            dstdir=`echo  $dst | sed -e 's;^[^/]*$;;' -e 's;^\(.*/\)[^/]*$;\1;' -e 's;\(.\)/$;\1;'`
  +            dstbase=`echo $dst | sed -e 's;.*/\([^/]*\)$;\1;'`
  +        fi
  +
  +        #   consistency check
  +        if [ ".$dstdir" != . ]; then
  +            if [ ! -d $dstdir ]; then
  +                echo "$msgprefix:Error: destination directory not found: $dstdir" 1>&2
  +                shtool_exit 1
               fi
  -            pathcomp="$pathcomp/"
  -        done
  +        fi
  +
  +        #   make sure the source is reachable from the destination
  +        if [ $dstisabs = 1 ]; then
  +            if [ $srcisabs = 0 ]; then
  +                if [ ".$srcdir" = . ]; then
  +                    srcdir="`pwd | sed -e 's;/*$;;'`"
  +                    srcisabs=1
  +                    oneisabs=1
  +                elif [ -d $srcdir ]; then
  +                    srcdir="`cd $srcdir; pwd | sed -e 's;/*$;;'`"
  +                    srcisabs=1
  +                    oneisabs=1
  +                fi
  +            fi
  +        fi
  +
  +        #   split away a common prefix
  +        prefix=""
  +        if [ ".$srcdir" = ".$dstdir" ] && [ ".$srcdir" != . ]; then
  +            prefix="$srcdir/"
  +            srcdir=""
  +            dstdir=""
  +        else
  +            while [ ".$srcdir" != . ] && [ ".$dstdir" != . ]; do
  +                presrc=`echo $srcdir | sed -e 's;^\([^/]*\)/.*;\1;'`
  +                predst=`echo $dstdir | sed -e 's;^\([^/]*\)/.*;\1;'`
  +                if [ ".$presrc" != ".$predst" ]; then
  +                    break
  +                fi
  +                prefix="$prefix$presrc/"
  +                srcdir=`echo $srcdir | sed -e 's;^[^/]*/*;;'`
  +                dstdir=`echo $dstdir | sed -e 's;^[^/]*/*;;'`
  +            done
  +        fi
  +
  +        #   destination prefix is just the common prefix
  +        dstpre="$prefix"
  +
  +        #   determine source prefix which is the reverse directory
  +        #   step-up corresponding to the destination directory
  +        srcpre=""
  +
  +        isroot=0
  +        if [ ".$prefix" = . ] || [ ".$prefix" = ./ ]; then
  +            isroot=1
  +        fi
  +        if [ $oneisabs = 0 ] || [ $isroot = 0 ]; then
  +            pl="$dstdir/"
  +            OIFS="$IFS"; IFS='/'
  +            for pe in $pl; do
  +                [ ".$pe" = .  ] && continue
  +                [ ".$pe" = .. ] && continue
  +                srcpre="../$srcpre"
  +            done
  +            IFS="$OIFS"
  +        else
  +            if [ $srcisabs = 1 ]; then
  +                srcpre="$prefix"
  +            fi
  +        fi
  +
  +        #   determine destination symlink name
  +        if [ ".$dstbase" = . ]; then
  +            if [ ".$srcbase" != . ]; then
  +                dstbase="$srcbase"
  +            else
  +                dstbase=`echo "$prefix$srcdir" | sed -e 's;/*$;;' -e 's;.*/\([^/]*\)$;\1;'`
  +            fi
  +        fi
  +
  +        #   now finalize source and destination directory paths
  +        srcdir=`echo $srcdir | sed -e 's;\([^/]\)$;\1/;'`
  +        dstdir=`echo $dstdir | sed -e 's;\([^/]\)$;\1/;'`
  +
  +        #   run the final link command
  +        if [ ".$opt_t" = .yes ]; then
  +            echo "ln$lnopt $srcpre$srcdir$srcbase $dstpre$dstdir$dstbase"
  +        fi
  +        eval ln$lnopt $srcpre$srcdir$srcbase $dstpre$dstdir$dstbase
       done
  -    exit $errstatus
  -;;
  +
  +    shtool_exit 0
  +    ;;
   
   mkshadow )
  -    #   default IFS
  -    DIFS=' 	
  -    '
  -    
  +    ##
  +    ##  mkshadow -- Make a shadow tree through symbolic links
  +    ##  Copyright (c) 1998-2004 Ralf S. Engelschall <rse@engelschall.com>
  +    ##
  +
       #   source and destination directory
  -    src=`echo $1 | sed -e 's:/$::'`
  -    dst=`echo $2 | sed -e 's:/$::'`
  -    
  +    src=`echo "$1" | sed -e 's:/$::' -e 's:^\./\(.\):\1:'`
  +    dst=`echo "$2" | sed -e 's:/$::' -e 's:^\./\(.\):\1:'`
  +
       #   check whether source exists
       if [ ! -d $src ]; then
  -        echo "mkshadow.sh:Error: source directory not found" 1>&2
  -        exit 1
  +        echo "$msgprefix:Error: source directory not found: \`$src'" 1>&2
  +        shtool_exit 1
       fi
  -    
  +
       #   determine if one of the paths is an absolute path,
       #   because then we have to use an absolute symlink
       oneisabs=0
  @@ -831,418 +1663,1480 @@
       case $dst in
           /* ) oneisabs=1 ;;
       esac
  -    
  +
       #   determine reverse directory for destination directory
       dstrevdir=''
  -    if [ ".$oneisabs" = . ]; then
  -        #   (inlined fp2rp)
  -        OIFS2="$IFS"; IFS='/'
  +    if [ $oneisabs = 0 ]; then
  +        #   derive reverse path from forward path
  +        pwd=`pwd`
  +        OIFS="$IFS"; IFS='/'
           for pe in $dst; do
  -            dstrevdir="../$dstrevdir"
  +            if [ "x$pe" = "x.." ]; then
  +                OIFS2="$IFS"; IFS="$DIFS"
  +                eval `echo "$pwd" |\
  +                      sed -e 's:\([^/]*\)$:; dir="\1":' \
  +                          -e 's:^\(.*\)/[^/]*;:pwd="\1";:'\
  +                          -e 's:^;:pwd="";:'`
  +                dstrevdir="$dir/$dstrevdir"
  +                IFS="$OIFS2"
  +            else
  +                dstrevdir="../$dstrevdir"
  +            fi
           done
  -        IFS="$OIFS2"
  +        IFS="$OIFS"
       else
           src="`cd $src; pwd`";
       fi
  -    
  +
       #   create directory tree at destination
       if [ ! -d $dst ]; then
  +        if [ ".$opt_t" = .yes ]; then
  +            echo "mkdir $dst" 1>&2
  +        fi
           mkdir $dst
       fi
  -    DIRS="`cd $src
  -           find . -type d -print |\
  -           sed -e '/\/CVS/d' \
  -               -e '/^\.$/d' \
  -               -e 's:^\./::'`"
  -    OIFS="$IFS" IFS="$DIFS"
  +    if [ ".$opt_a" = .yes ]; then
  +        DIRS=`cd $src; find . -type d -print |\
  +              sed -e '/^\.$/d' -e 's:^\./::'`
  +    else
  +        DIRS=`cd $src; find . -type d -print |\
  +              sed -e '/\/CVS/d' -e '/^\.$/d' -e 's:^\./::'`
  +    fi
       for dir in $DIRS; do
  +        if [ ".$opt_t" = .yes ]; then
  +            echo "mkdir $dst/$dir" 1>&2
  +        fi
           mkdir $dst/$dir
       done
  -    IFS="$OIFS"
  -    
  +
       #   fill directory tree with symlinks to files
  -    FILES="`cd $src
  -            find . -depth -print |\
  -            sed -e '/\.o$/d' \
  -                -e '/\.a$/d' \
  -                -e '/\.so$/d' \
  -                -e '/\.so-o$/d' \
  -                -e '/\.cvsignore$/d' \
  -                -e '/\/CVS/d' \
  -                -e '/\.indent\.pro$/d' \
  -                -e '/\.apaci.*/d' \
  -                -e '/Makefile$/d' \
  -                -e '/\/\.#/d' \
  -                -e '/\.orig$/d' \
  -                -e 's/^\.\///'`"
  -    OIFS="$IFS" IFS="$DIFS"
  +    if [ ".$opt_a" = .yes ]; then
  +        FILES="`cd $src; find . -depth -print |\
  +                sed -e 's/^\.\///'`"
  +    else
  +        FILES="`cd $src; find . -depth -print |\
  +                sed -e '/\.o$/d' -e '/\.a$/d' -e '/\.so$/d' \
  +                    -e '/\.cvsignore$/d' -e '/\/CVS/d' \
  +                    -e '/\/\.#/d' -e '/\.orig$/d' \
  +                    -e 's/^\.\///'`"
  +    fi
       for file in $FILES; do
            #  don't use `-type f' above for find because of symlinks
  -         if [ -d $file ]; then
  +         if [ -d "$src/$file" ]; then
                continue
            fi
            basename=`echo $file | sed -e 's:^.*/::'`
            dir=`echo $file | sed -e 's:[^/]*$::' -e 's:/$::' -e 's:$:/:' -e 's:^/$::'`
  -         from="$src/$file"
  +         from=`echo "$src/$file" | sed -e 's/^\.\///'`
            to="$dst/$dir$basename"
  -         if [ ".$oneisabs" = .0 ]; then
  +         if [ $oneisabs = 0 ]; then
                if [ ".$dir" != . ]; then
                    subdir=`echo $dir | sed -e 's:/$::'`
  -                 #   (inlined fp2rp)
  +                 #   derive reverse path from forward path
                    revdir=''
  -                 OIFS2="$IFS"; IFS='/'
  +                 OIFS="$IFS"; IFS='/'
                    for pe in $subdir; do
                        revdir="../$revdir"
                    done
  -                 IFS="$OIFS2"
  +                 IFS="$OIFS"
                    #   finalize from
                    from="$revdir$from"
                fi
                from="$dstrevdir$from"
            fi
  -         echo "    $to"
  +         if [ ".$opt_v" = .yes ]; then
  +             echo "    $to" 1>&2
  +         fi
  +         if [ ".$opt_t" = .yes ]; then
  +             echo "ln -s $from $to" 1>&2
  +         fi
            ln -s $from $to
       done
  -    IFS="$OIFS"
  -;;
   
  -newvers )
  -    #!/bin/sh -
  -    
  -    LANGUAGE=txt
  -    NAME=unknown
  -    PREFIX=unknown
  -    FULLVERSION=unknown
  -    REPORT=NO
  -    INCREASE=P
  -    USAGE=NO
  -    FILE=""
  -    while [ ".$1" != . ]; do
  -        case $1 in
  -            -l) LANGUAGE=$2; shift; shift; continue ;;
  -            -n) NAME=$2; shift; shift; continue ;;
  -            -p) PREFIX=$2; shift; shift; continue ;;
  -            -r) FULLVERSION=$2; shift; shift; continue ;;
  -            -i) INCREASE=$2; shift; shift; continue ;;
  -            -d) REPORT=$2; shift; shift; continue ;;
  -            -h) USAGE=YES; shift; continue ;;
  -             *) break;
  +    shtool_exit 0
  +    ;;
  +
  +fixperm )
  +    ##
  +    ##  fixperm -- Fix file permissions inside a source tree
  +    ##  Copyright (c) 1996-2004 Ralf S. Engelschall <rse@engelschall.com>
  +    ##
  +
  +    paths="$*"
  +
  +    #   check whether the test command supports the -x option
  +    if [ -x /bin/sh ] 2>/dev/null; then
  +        minusx="-x"
  +    else
  +        minusx="-r"
  +    fi
  +
  +    #   iterate over paths
  +    for p in $paths; do
  +        for file in `find $p -depth -print`; do
  +            if [ -f $file ]; then
  +                if [ $minusx $file ]; then
  +                    if [ ".$opt_v" = .yes ]; then
  +                        echo "-rwxr-xr-x $file" 2>&1
  +                    fi
  +                    if [ ".$opt_t" = .yes ]; then
  +                        echo "chmod 755 $file" 2>&1
  +                    fi
  +                    chmod 755 $file
  +                else
  +                    if [ ".$opt_v" = .yes ]; then
  +                        echo "-rw-r--r-- $file" 2>&1
  +                    fi
  +                    if [ ".$opt_t" = .yes ]; then
  +                        echo "chmod 644 $file" 2>&1
  +                    fi
  +                    chmod 644 $file
  +                fi
  +                continue
  +            fi
  +            if [ -d $file ]; then
  +                if [ ".$opt_v" = .yes ]; then
  +                    echo "drwxr-xr-x $file" 2>&1
  +                fi
  +                if [ ".$opt_t" = .yes ]; then
  +                    echo "chmod 755 $file" 2>&1
  +                fi
  +                chmod 755 $file
  +                continue
  +            fi
  +            if [ ".$opt_v" = .yes ]; then
  +                echo "?????????? $file" 2>&1
  +            fi
  +        done
  +    done
  +
  +    shtool_exit 0
  +    ;;
  +
  +rotate )
  +    ##
  +    ##  rotate -- Logfile rotation
  +    ##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +    ##
  +
  +    #   make sure we have at least one file to rotate
  +    if [ ".$opt_n" = .0 ]; then
  +        echo "$msgprefix:Error: invalid argument \`$opt_n' to option -n." 1>&2
  +        shtool_exit 1
  +    fi
  +
  +    #   canonicalize -s option argument
  +    if [ ".$opt_s" != . ]; then
  +        if [ ".`expr $opt_s : '[0-9]*$'`" != .0 ]; then
  +            :
  +        elif [ ".`expr $opt_s : '[0-9]*[Kk]$'`" != .0 ]; then
  +            opt_s=`expr $opt_s : '\([0-9]*\)[Kk]$'`
  +            opt_s=`expr $opt_s \* 1024`
  +        elif [ ".`expr $opt_s : '[0-9]*[Mm]$'`" != .0 ]; then
  +            opt_s=`expr $opt_s : '\([0-9]*\)[Mm]$'`
  +            opt_s=`expr $opt_s \* 1048576` # 1024*1024
  +        elif [ ".`expr $opt_s : '[0-9]*[Gg]$'`" != .0 ]; then
  +            opt_s=`expr $opt_s : '\([0-9]*\)[Gg]$'`
  +            opt_s=`expr $opt_s \* 1073741824` # 1024*1024*1024
  +        else
  +            echo "$msgprefix:Error: invalid argument \`$opt_s' to option -s." 1>&2
  +            shtool_exit 1
  +        fi
  +    fi
  +
  +    #   option -d/-z consistency
  +    if [ ".$opt_d" = .yes ] && [ ".$opt_z" = . ]; then
  +        echo "$msgprefix:Error: option -d requires option -z." 1>&2
  +        shtool_exit 1
  +    fi
  +
  +    #   make sure target directory exists
  +    if [ ".$opt_a" != . ]; then
  +        if [ ! -d $opt_a ]; then
  +            if [ ".$opt_f" = .no ]; then
  +                echo "$msgprefix:Error: archive directory \`$opt_a' does not exist." 1>&2
  +                shtool_exit 1
  +            fi
  +            mkdir $opt_a || shtool_exit $?
  +            chmod 755 $opt_a
  +        fi
  +        if [ ! -w $opt_a ]; then
  +            echo "$msgprefix:Error: archive directory \`$opt_a' not writable." 1>&2
  +            shtool_exit 1
  +        fi
  +    fi
  +
  +    #   determine compression approach
  +    if [ ".$opt_z" != . ]; then
  +        comp_lvl="$opt_z"
  +        comp_prg=""
  +        case $comp_lvl in
  +            *:* ) eval `echo $comp_lvl |\
  +                        sed -e 's%^\(.*\):\(.*\)$%comp_prg="\1"; comp_lvl="\2"%'` ;;
  +        esac
  +
  +        #   compression level consistency
  +        case $comp_lvl in
  +            [0-9] )
  +                ;;
  +            * ) echo "$msgprefix:Error: invalid compression level \`$comp_lvl'" 1>&2
  +                shtool_exit 1
  +                ;;
  +        esac
  +
  +        #   determine a suitable compression tool
  +        if [ ".$comp_prg" = . ]; then
  +            #   check whether the test command supports the -x option
  +            if [ -x /bin/sh ] 2>/dev/null; then
  +                minusx="-x"
  +            else
  +                minusx="-r"
  +            fi
  +            #   search for tools in $PATH
  +            paths="`echo $PATH |\
  +                    sed -e 's%/*:%:%g' -e 's%/*$%%' \
  +                        -e 's/^:/.:/' -e 's/::/:.:/g' -e 's/:$/:./' \
  +                        -e 's/:/ /g'`"
  +            for prg in bzip2 gzip compress; do
  +                for path in $paths; do
  +                    if [ $minusx "$path/$prg" ] && [ ! -d "$path/$prg" ]; then
  +                        comp_prg="$prg"
  +                        break
  +                    fi
  +                done
  +                if [ ".$comp_prg" != . ]; then
  +                    break
  +                fi
  +            done
  +            if [ ".$comp_prg" = . ]; then
  +                echo "$msgprefix:Error: no suitable compression tool found in \$PATH" 1>&2
  +                shtool_exit 1
  +            fi
  +        fi
  +
  +        #   determine standard compression extension
  +        #   and make sure it is a known tool
  +        case $comp_prg in
  +            */bzip2    | bzip2    ) comp_ext="bz2" comp_lvl="-$comp_lvl" ;;
  +            */gzip     | gzip     ) comp_ext="gz"  comp_lvl="-$comp_lvl" ;;
  +            */compress | compress ) comp_ext="Z";  comp_lvl=""           ;;
  +            * ) echo "$msgprefix:Error: tool \`$comp_prg' is not a known compression tool" 1>&2
  +                shtool_exit 1
  +                ;;
  +        esac
  +        comp_suf=".$comp_ext"
  +    fi
  +
  +    #   iterate over all given logfile arguments
  +    for file in $*; do
  +        #   make sure the logfile exists
  +        if [ ! -f $file ]; then
  +            if [ ".$opt_f" = .yes ]; then
  +                continue
  +            fi
  +            echo "$msgprefix:Error: logfile \`$file' not found" 1>&2
  +            shtool_exit 1
  +        fi
  +
  +        #   determine log directory (where original logfile is placed)
  +        ldir="."
  +        case $file in
  +            */* ) eval `echo $file | sed -e 's%^\(.*\)/\([^/]*\)$%ldir="\1"; file="\2";%'` ;;
  +        esac
  +
  +        #   determine archive directory (where rotated logfiles are placed)
  +        adir="$ldir"
  +        if [ ".$opt_a" != . ]; then
  +            case "$opt_a" in
  +                /* | ./* ) adir="$opt_a" ;;
  +                * ) adir="$ldir/$opt_a"  ;;
  +            esac
  +        fi
  +
  +        #   optionally take logfile size into account
  +        if [ ".$opt_s" != . ]; then
  +            #   determine size of logfile
  +            set -- `env -i /bin/ls -l "$ldir/$file" | sed -e "s;$ldir/$file;;" |\
  +                    sed -e 's; -> .*$;;' -e 's;[ 	][ 	]*; ;g'`
  +            n=`expr $# - 3`
  +            eval "size=\`echo \${$n}\`"
  +
  +            #   skip logfile if size is still too small
  +            if [ $size -lt $opt_s ]; then
  +                if [ ".$opt_v" = .yes ]; then
  +                    echo "$ldir/$file: still too small in size -- skipping"
  +                fi
  +                continue
  +            fi
  +        fi
  +
  +        #   verbosity
  +        if [ ".$opt_v" = .yes ]; then
  +            echo "rotating $ldir/$file"
  +        fi
  +
  +        #   execute prolog
  +        if [ ".$opt_P" != . ]; then
  +            if [ ".$opt_t" = .yes ]; then
  +                echo "$opt_P"
  +            fi
  +            eval $opt_P
  +            [ $? -ne 0 ] && shtool_exit $?
  +        fi
  +
  +        #   kick away out-rotated logfile
  +        n=`expr $opt_n - 1`
  +        n=`echo dummy | awk "{ printf(\"%0${opt_p}d\", n); }" n=$n`
  +        if [ -f "${adir}/${file}.${n}${comp_suf}" ]; then
  +            #   optionally migrate away the out-rotated logfile
  +            if [ ".$opt_M" != . ]; then
  +                if [ ".$opt_t" = .yes ]; then
  +                    echo "$opt_M ${adir}/${file}.${n}${comp_suf}"
  +                fi
  +                eval "$opt_M ${adir}/${file}.${n}${comp_suf}"
  +                [ $? -ne 0 ] && shtool_exit $?
  +            fi
  +            #   finally get rid of the out-rotated logfile
  +            if [ ".$opt_t" = .yes ]; then
  +                echo "rm -f ${adir}/${file}.${n}${comp_suf}"
  +            fi
  +            rm -f ${adir}/${file}.${n}${comp_suf} || shtool_exit $?
  +        fi
  +
  +        #   rotate already archived logfiles
  +        while [ $n -gt 0 ]; do
  +            m=$n
  +            n=`expr $n - 1`
  +            n=`echo dummy | awk "{ printf(\"%0${opt_p}d\", n); }" n=$n`
  +            if [ $n -eq 0 ] && [ ".$opt_d" = .yes ]; then
  +                #   special case: first rotation file under delayed compression situation
  +                if [ ! -f "${adir}/${file}.${n}" ]; then
  +                    continue
  +                fi
  +
  +                #   compress file (delayed)
  +                if [ ".$opt_b" = .yes ]; then
  +                    if [ ".$opt_t" = .yes ]; then
  +                        echo "mv ${adir}/${file}.${n} ${adir}/${file}.${m}"
  +                    fi
  +                    mv ${adir}/${file}.${n} ${adir}/${file}.${m} || shtool_exit $?
  +                    if [ ".$opt_t" = .yes ]; then
  +                        echo "(${comp_prg} ${comp_lvl} <${adir}/${file}.${m} >${adir}/${file}.${m}${comp_suf}; rm -f ${adir}/${file}.${m}) &"
  +                    fi
  +                    ( ${comp_prg} ${comp_lvl} \
  +                          <${adir}/${file}.${m} \
  +                          >${adir}/${file}.${m}${comp_suf} || shtool_exit $?
  +                      rm -f ${adir}/${file}.${m} || shtool_exit $?
  +                    ) </dev/null >/dev/null 2>&1 &
  +                else
  +                    if [ ".$opt_t" = .yes ]; then
  +                        echo "${comp_prg} ${comp_lvl} <${adir}/${file}.${n} >${adir}/${file}.${m}${comp_suf}"
  +                    fi
  +                    ${comp_prg} ${comp_lvl} \
  +                        <${adir}/${file}.${n} \
  +                        >${adir}/${file}.${m}${comp_suf} || shtool_exit $?
  +                    if [ ".$opt_t" = .yes ]; then
  +                        echo "rm -f ${adir}/${file}.${n}"
  +                    fi
  +                    rm -f ${adir}/${file}.${n} || shtool_exit $?
  +                fi
  +
  +                #   fix file attributes
  +                if [ ".$opt_o" != . ]; then
  +                    if [ ".$opt_t" = .yes ]; then
  +                        echo "chown $opt_o ${adir}/${file}.${m}${comp_suf}"
  +                    fi
  +                    chown $opt_o ${adir}/${file}.${m}${comp_suf} || shtool_exit $?
  +                fi
  +                if [ ".$opt_g" != . ]; then
  +                    if [ ".$opt_t" = .yes ]; then
  +                        echo "chgrp $opt_g ${adir}/${file}.${m}${comp_suf}"
  +                    fi
  +                    chgrp $opt_g ${adir}/${file}.${m}${comp_suf} || shtool_exit $?
  +                fi
  +                if [ ".$opt_m" != . ]; then
  +                    if [ ".$opt_t" = .yes ]; then
  +                        echo "chmod $opt_m ${adir}/${file}.${m}${comp_suf}"
  +                    fi
  +                    chmod $opt_m ${adir}/${file}.${m}${comp_suf} || shtool_exit $?
  +                fi
  +            else
  +                #   standard case: second and following rotation file
  +                if [ ! -f "${adir}/${file}.${n}${comp_suf}" ]; then
  +                    continue
  +                fi
  +                if [ ".$opt_t" = .yes ]; then
  +                    echo "mv ${adir}/${file}.${n}${comp_suf} ${adir}/${file}.${m}${comp_suf}"
  +                fi
  +                mv ${adir}/${file}.${n}${comp_suf} ${adir}/${file}.${m}${comp_suf} || shtool_exit $?
  +            fi
  +        done
  +
  +        #   move away current logfile
  +        if [ ".$opt_c" = .yes ]; then
  +            #   approach: copy[+truncate]
  +            if [ ".$opt_t" = .yes ]; then
  +                echo "cp -p ${ldir}/${file} ${adir}/${file}.${n}"
  +            fi
  +            cp -p ${ldir}/${file} ${adir}/${file}.${n} || shtool_exit $?
  +            if [ ".$opt_r" = .no ]; then
  +                if [ ".$opt_t" = .yes ]; then
  +                    echo "cp /dev/null ${ldir}/${file}"
  +                fi
  +                cp /dev/null ${ldir}/${file} || shtool_exit $?
  +            fi
  +        else
  +            #   approach: move[+touch]
  +            if [ ".$opt_t" = .yes ]; then
  +                echo "mv ${ldir}/${file} ${adir}/${file}.${n}"
  +            fi
  +            mv ${ldir}/${file} ${adir}/${file}.${n} || shtool_exit $?
  +            if [ ".$opt_r" = .no ]; then
  +                if [ ".$opt_t" = .yes ]; then
  +                    echo "touch ${ldir}/${file}"
  +                fi
  +                touch ${ldir}/${file} || shtool_exit $?
  +                #   fix file attributes
  +                if [ ".$opt_o" != . ]; then
  +                    if [ ".$opt_t" = .yes ]; then
  +                        echo "chown $opt_o ${ldir}/${file}"
  +                    fi
  +                    chown $opt_o ${ldir}/${file} || shtool_exit $?
  +                fi
  +                if [ ".$opt_g" != . ]; then
  +                    if [ ".$opt_t" = .yes ]; then
  +                        echo "chgrp $opt_g ${ldir}/${file}"
  +                    fi
  +                    chgrp $opt_g ${ldir}/${file} || shtool_exit $?
  +                fi
  +                if [ ".$opt_m" != . ]; then
  +                    if [ ".$opt_t" = .yes ]; then
  +                        echo "chmod $opt_m ${ldir}/${file}"
  +                    fi
  +                    chmod $opt_m ${ldir}/${file} || shtool_exit $?
  +                fi
  +            fi
  +        fi
  +
  +        #   regular compression step
  +        if [ ".$opt_z" != . ] && [ ".$opt_d" = .no ]; then
  +            #   compress file
  +            if [ ".$opt_b" = .yes ]; then
  +                if [ ".$opt_t" = .yes ]; then
  +                    echo "(${comp_prg} ${comp_lvl} <${adir}/${file}.${n} >${adir}/${file}.${n}${comp_suf}; rm -f ${adir}/${file}.${n}) &"
  +                fi
  +                ( ${comp_prg} ${comp_lvl} \
  +                      <${adir}/${file}.${n} \
  +                      >${adir}/${file}.${n}${comp_suf} || shtool_exit $?
  +                  rm -f ${adir}/${file}.${n} || shtool_exit $?
  +                ) </dev/null >/dev/null 2>&1 &
  +            else
  +                if [ ".$opt_t" = .yes ]; then
  +                    echo "${comp_prg} ${comp_lvl} <${adir}/${file}.${n} >${adir}/${file}.${n}${comp_suf}"
  +                fi
  +                ${comp_prg} ${comp_lvl} \
  +                    <${adir}/${file}.${n} \
  +                    >${adir}/${file}.${n}${comp_suf} || shtool_exit $?
  +                if [ ".$opt_t" = .yes ]; then
  +                    echo "rm -f ${opt_a}${file}.${n}"
  +                fi
  +                rm -f ${adir}/${file}.${n} || shtool_exit $?
  +            fi
  +
  +            #   fix file attributes
  +            if [ ".$opt_o" != . ]; then
  +                if [ ".$opt_t" = .yes ]; then
  +                    echo "chown $opt_o ${adir}/${file}.${n}${comp_suf}"
  +                fi
  +                chown $opt_o ${adir}/${file}.${n}${comp_suf} || shtool_exit $?
  +            fi
  +            if [ ".$opt_g" != . ]; then
  +                if [ ".$opt_t" = .yes ]; then
  +                    echo "chgrp $opt_g ${adir}/${file}.${n}${comp_suf}"
  +                fi
  +                chgrp $opt_g ${adir}/${file}.${n}${comp_suf} || shtool_exit $?
  +            fi
  +            if [ ".$opt_m" != . ]; then
  +                if [ ".$opt_t" = .yes ]; then
  +                    echo "chmod $opt_m ${adir}/${file}.${n}${comp_suf}"
  +                fi
  +                chmod $opt_m ${adir}/${file}.${n}${comp_suf} || shtool_exit $?
  +            fi
  +        fi
  +
  +        #   execute epilog
  +        if [ ".$opt_E" != . ]; then
  +            if [ ".$opt_t" = .yes ]; then
  +                echo "$opt_E"
  +            fi
  +            eval $opt_E
  +            [ $? -ne 0 ] && shtool_exit $?
  +        fi
  +    done
  +
  +    shtool_exit 0
  +    ;;
  +
  +tarball )
  +    ##
  +    ##  tarball -- Roll distribution tarballs
  +    ##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +    ##
  +
  +    srcs="$*"
  +
  +    #   check whether the test command supports the -x option
  +    if [ -x /bin/sh ] 2>/dev/null; then
  +        minusx="-x"
  +    else
  +        minusx="-r"
  +    fi
  +
  +    #   find the tools
  +    paths="`echo $PATH |\
  +            sed -e 's%/*:%:%g' -e 's%/*$%%' \
  +                -e 's/^:/.:/' -e 's/::/:.:/g' -e 's/:$/:./' \
  +                -e 's/:/ /g'`"
  +    for spec in find:gfind,find tar:gtar,tar tardy:tardy,tarcust; do
  +        prg=`echo $spec | sed -e 's/:.*$//'`
  +        tools=`echo $spec | sed -e 's/^.*://'`
  +        eval "prg_${prg}=''"
  +        #   iterate over tools
  +        for tool in `echo $tools | sed -e 's/,/ /g'`; do
  +            #   iterate over paths
  +            for path in $paths; do
  +                if [ $minusx "$path/$tool" ] && [ ! -d "$path/$tool" ]; then
  +                    eval "prg_${prg}=\"$path/$tool\""
  +                    break
  +                fi
  +            done
  +            eval "val=\$prg_${prg}"
  +            if [ ".$val" != . ]; then
  +                break
  +            fi
  +        done
  +    done
  +
  +    #   expand source paths
  +    exclude=''
  +    for pat in `echo $opt_e | sed 's/,/ /g'`; do
  +        exclude="$exclude | grep -v '$pat'"
  +    done
  +    if [ ".$opt_t" = .yes ]; then
  +        echo "cp /dev/null $tmpfile.lst" 1>&2
  +    fi
  +    cp /dev/null $tmpfile.lst
  +    for src in $srcs; do
  +        if [ -d $src ]; then
  +            if [ ".$opt_t" = .yes ]; then
  +                echo "(cd $src && $prg_find . -type f -depth -print) | sed -e 's:^\\.\$::' -e 's:^\\./::' | cat $exclude >>$tmpfile.lst" 1>&2
  +            fi
  +            (cd $src && $prg_find . -type f -depth -print) |\
  +            sed -e 's:^\.$::' -e 's:^\./::' | eval cat $exclude >>$tmpfile.lst
  +        else
  +            if [ ".$opt_t" = .yes ]; then
  +                echo "echo $src >>$tmpfile.lst" 1>&2
  +            fi
  +            echo $src >>$tmpfile.lst
  +        fi
  +    done
  +    sort <$tmpfile.lst >$tmpfile.lst.n
  +    mv $tmpfile.lst.n $tmpfile.lst
  +    if [ ".$opt_v" = .yes ]; then
  +        cat $tmpfile.lst | sed -e 's/^/  /' 1>&2
  +    fi
  +
  +    #   determine tarball file and directory name
  +    if [ ".$opt_o" != . ]; then
  +        tarfile="$opt_o"
  +        if [ ".$opt_d" != . ]; then
  +            tarname="$opt_d"
  +        else
  +            tarname=`echo $tarfile | sed -e 's/\.tar.*$//' -e 's;.*/\([^/]*\)$;\1;'`
  +        fi
  +    else
  +        if [ ".$opt_d" != . ]; then
  +            tarname="$opt_d"
  +        elif [ -d "$from" ]; then
  +            tarname=`echo $from | sed -e 's;.*/\([^/]*\)$;\1;'`
  +        else
  +            tarname="out"
  +        fi
  +        tarfile="$tarname.tar"
  +    fi
  +
  +    #   roll the tarball
  +    compress=''
  +    if [ ".$opt_c" != . ]; then
  +        compress="| $opt_c"
  +    fi
  +    if [ ".$prg_tardy" != . ]; then
  +        #   the elegant hackers way
  +        tardy_opt="--prefix=$tarname"
  +        tardy_opt="$tardy_opt --user_number=0 --group_number=0" # security!
  +        if [ ".$opt_u" != . ]; then
  +            tardy_opt="$tardy_opt --user_name=$opt_u"
  +        fi
  +        if [ ".$opt_g" != . ]; then
  +            tardy_opt="$tardy_opt --group_name=$opt_g"
  +        fi
  +        if [ ".$opt_t" = .yes ]; then
  +            echo "cat $tmpfile.lst | xargs $prg_tar cf - | $prg_tardy $tardy_opt | cat $compress >$tmpfile.out" 1>&2
  +        fi
  +        cat $tmpfile.lst |\
  +        xargs $prg_tar cf - |\
  +        $prg_tardy $tardy_opt |\
  +        eval cat $compress >$tmpfile.out
  +        if [ ".$opt_t" = .yes ]; then
  +            echo "cp $tmpfile.out $tarfile" 1>&2
  +        fi
  +        cp $tmpfile.out $tarfile
  +    else
  +        #  the portable standard way
  +        if [ ".$opt_t" = .yes ]; then
  +            echo "mkdir $tmpdir/$tarname" 1>&2
  +        fi
  +        mkdir $tmpdir/$tarname || shtool_exit 1
  +        if [ ".$opt_t" = .yes ]; then
  +            echo "cat $tmpfile.lst | xargs $prg_tar cf - | (cd $tmpdir/$tarname && $prg_tar xf -)" 1>&2
  +        fi
  +        cat $tmpfile.lst |\
  +        xargs $prg_tar cf - |\
  +        (cd $tmpdir/$tarname && $prg_tar xf -)
  +        if [ ".$opt_u" != . ]; then
  +            if [ ".$opt_t" = .yes ]; then
  +                echo "chown -R $opt_u $tmpdir/$tarname >/dev/null 2>&1" 2>&1
  +            fi
  +            chown -R $opt_u $tmpdir/$tarname >/dev/null 2>&1 ||\
  +            echo "$msgprefix:Warning: cannot set user name \`$opt_u' (would require root privileges)"
  +        fi
  +        if [ ".$opt_g" != . ]; then
  +            if [ ".$opt_t" = .yes ]; then
  +                echo "chgrp -R $opt_g $tmpdir/$tarname >/dev/null 2>&1" 2>&1
  +            fi
  +            chgrp -R $opt_g $tmpdir/$tarname >/dev/null 2>&1 ||\
  +            echo "$msgprefix:Warning: cannot set group name \`$opt_g' (would require root privileges)"
  +        fi
  +        if [ ".$opt_t" = .yes ]; then
  +            echo "(cd $tmpdir && $prg_find $tarname -type f -depth -print | sort | xargs $prg_tar cf -) | cat $compress >$tmpfile.out" 1>&2
  +        fi
  +        (cd $tmpdir && $prg_find $tarname -type f -depth -print | sort | xargs $prg_tar cf -) |\
  +        eval cat $compress >$tmpfile.out
  +        if [ ".$opt_t" = .yes ]; then
  +            echo "cp $tmpfile.out $tarfile" 1>&2
  +        fi
  +        cp $tmpfile.out $tarfile
  +        if [ ".$opt_t" = .yes ]; then
  +            echo "rm -rf $tmpdir/$tarname" 1>&2
  +        fi
  +        rm -rf $tmpdir/$tarname
  +    fi
  +
  +    #   cleanup
  +    if [ ".$opt_t" = .yes ]; then
  +        echo "rm -f $tmpfile.lst $tmpfile.out" 1>&2
  +    fi
  +    rm -f $tmpfile.lst $tmpfile.out
  +
  +    shtool_exit 0
  +    ;;
  +
  +subst )
  +    ##
  +    ##  subst -- Apply sed(1) substitution operations
  +    ##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +    ##
  +
  +    #   remember optional list of file(s)
  +    files="$*"
  +    files_num="$#"
  +
  +    #   parameter consistency check
  +    if [ $# -eq 0 ] && [ ".$opt_b" != . ]; then
  +        echo "$msgprefix:Error: option -b cannot be applied to stdin" 1>&2
  +        shtool_exit 1
  +    fi
  +    if [ $# -eq 0 ] && [ ".$opt_s" = .yes ]; then
  +        echo "$msgprefix:Error: option -s cannot be applied to stdin" 1>&2
  +        shtool_exit 1
  +    fi
  +
  +    #   build underlying sed(1) command
  +    sedcmd='sed'
  +    if [ ".$opt_e" != . ]; then
  +        OIFS="$IFS"; IFS="$ASC_NL"; set -- $opt_e; IFS="$OIFS"
  +        for e
  +        do
  +            sedcmd="$sedcmd -e '$e'"
  +        done
  +    elif [ ".$opt_f" != . ]; then
  +        if [ ! -f $opt_f ]; then
  +            echo "$msgprefix:Error: command file \`$opt_f' not found or not a regular file" 1>&2
  +            shtool_exit 1
  +        fi
  +        sedcmd="$sedcmd -f '$opt_f'"
  +    else
  +        echo "$msgprefix:Error: either -e option(s) or -f option required" 1>&2
  +        shtool_exit 1
  +    fi
  +
  +    #   determine extension for original file
  +    orig=".orig"
  +    if [ ".$opt_b" != . ]; then
  +        orig="$opt_b"
  +    fi
  +
  +    #   apply sed(1) operation(s)
  +    if [ ".$files" != . ]; then
  +        #   apply operation(s) to files
  +        substdone=no
  +        for file in $files; do
  +            test ".$file" = . && continue
  +            if [ ! -f $file ]; then
  +                echo "$msgprefix:Warning: file \`$file' not found or not a regular file" 1>&2
  +                continue
  +            fi
  +
  +            #   handle interactive mode
  +            if [ ".$opt_i" = .yes ]; then
  +                eval "$sedcmd <$file >$file.new"
  +                skip=no
  +                if cmp $file $file.new >/dev/null 2>&1; then
  +                    rm -f $file.new
  +                    skip=yes
  +                else
  +                    (diff -U1 $file $file.new >$tmpfile) 2>/dev/null
  +                    if [ ".`cat $tmpfile`" = . ]; then
  +                        (diff -C1 $file $file.new >$tmpfile) 2>/dev/null
  +                        if [ ".`cat $tmpfile`" = . ]; then
  +                            echo "$msgprefix:Warning: unable to show difference for file \`$file'" 1>&2
  +                            cp /dev/null $tmpfile
  +                        fi
  +                    fi
  +                    rm -f $file.new
  +                    cat $tmpfile
  +                    echo dummy | awk '{ printf("%s", TEXT); }' TEXT=">>> Apply [Y/n]: "
  +                    read input
  +                    if [ ".$input" != .Y ] &&\
  +                       [ ".$input" != .y ] &&\
  +                       [ ".$input" != . ]; then
  +                       skip=yes
  +                    fi
  +                fi
  +                if [ ".$skip" = .yes ]; then
  +                    if [ ".$opt_v" = .yes ]; then
  +                        echo "file \`$file' -- skipped" 1>&2
  +                    fi
  +                    continue
  +                fi
  +            fi
  +
  +            #   apply sed(1) operation(s)
  +            if [ ".$opt_v" = .yes ]; then
  +                echo "patching \`$file'" 1>&2
  +            fi
  +            if [ ".$opt_t" = .yes ]; then
  +                echo "\$ cp -p $file $file$orig"
  +                echo "\$ chmod u+w $file"
  +                echo "\$ $sedcmd <$file$orig >$file"
  +            fi
  +            if [ ".$opt_n" = .no ]; then
  +                cp -p $file $file$orig
  +                chmod u+w $file >/dev/null 2>&1 || true
  +                eval "$sedcmd <$file$orig >$file"
  +            fi
  +
  +            #   optionally fix timestamp
  +            if [ ".$opt_s" = .yes ]; then
  +                if [ ".$opt_t" = .yes ]; then
  +                    echo "\$ touch -r $file$orig $file"
  +                fi
  +                if [ ".$opt_n" = .no ]; then
  +                    touch -r $file$orig $file
  +                fi
  +            fi
  +
  +            #   optionally check whether any content change actually occurred 
  +            if [ ".$opt_q" = .no ]; then
  +                if cmp $file$orig $file >/dev/null 2>&1; then
  +                    if [ ".$opt_w" = .yes ]; then
  +                        echo "$msgprefix:Warning: substitution resulted in no content change on file \"$file\"" 1>&2
  +                    fi
  +                else
  +                    substdone=yes
  +                fi
  +            fi
  +
  +            #   optionally remove preserved original file
  +            if [ ".$opt_b" = . ]; then
  +                if [ ".$opt_t" = .yes ]; then
  +                    echo "\$ rm -f $file$orig"
  +                fi
  +                if [ ".$opt_n" = .no ]; then
  +                    rm -f $file$orig
  +                fi
  +            fi
  +        done
  +        if [ ".$opt_q" = .no ] && [ ".$opt_w" = .no ]; then
  +            if [ ".$substdone" = .no ]; then
  +                if [ ".$files_num" = .1 ]; then
  +                    echo "$msgprefix:Warning: substitution resulted in no content change on file \"$file\"" 1>&2
  +                else
  +                    echo "$msgprefix:Warning: substitution resulted in no content change on any file" 1>&2
  +                fi
  +            fi
  +        fi
  +    else
  +        #   apply operation(s) to stdin/stdout
  +        if [ ".$opt_v" = .yes ]; then
  +            echo "patching <stdin>" 1>&2
  +        fi
  +        if [ ".$opt_t" = .yes ]; then
  +            echo "\$ $sedcmd"
  +        fi
  +        if [ ".$opt_n" = .no ]; then
  +            eval "$sedcmd"
  +        fi
  +    fi
  +
  +    shtool_exit 0
  +    ;;
  +
  +platform )
  +    ##
  +    ##  platform -- Platform Identification Utility
  +    ##  Copyright (c) 2003-2004 Ralf S. Engelschall <rse@engelschall.com>
  +    ##
  +
  +    #   option post-processing
  +    if [ ".$opt_t" != . ]; then
  +        case "$opt_t" in
  +            binary )
  +                #   binary package id (OpenPKG RPM)
  +                opt_F="%<ap>-%<sp>"
  +                opt_L=yes
  +                opt_S=""
  +                opt_C="+"
  +                ;;
  +            build )
  +                #   build time checking (OpenPKG RPM)
  +                opt_F="%<at>-%<st>"
  +                opt_L=yes
  +                opt_S=""
  +                opt_C="+"
  +                ;;
  +            gnu )
  +                #   GNU config.guess style <arch>-<vendor>-<os><osversion>
  +                opt_F="%<at>-unknown-%<st>"
  +                opt_L=yes
  +                opt_S=""
  +                opt_C="+"
  +                ;;
  +            web )
  +                #   non-whitespace HTTP Server-header id
  +                opt_F="%<sp>-%<ap>"
  +                opt_S="/"
  +                opt_C="+"
  +                ;;
  +            summary)
  +                #   human readable verbose summary information
  +                opt_F="Class:      %[sc] (%[ac])\\nProduct:    %[sp] (%[ap])\\nTechnology: %[st] (%[at])"
  +                opt_S=" "
  +                opt_C="/"
  +                ;;
  +            all-in-one )
  +                #   full-table all-in-one information
  +                opt_F=""
  +                opt_F="${opt_F}concise architecture class:      %<ac>\\n"
  +                opt_F="${opt_F}regular architecture class:      %{ac}\\n"
  +                opt_F="${opt_F}verbose architecture class:      %[ac]\\n"
  +                opt_F="${opt_F}concise architecture product:    %<ap>\\n"
  +                opt_F="${opt_F}regular architecture product:    %{ap}\\n"
  +                opt_F="${opt_F}verbose architecture product:    %[ap]\\n"
  +                opt_F="${opt_F}concise architecture technology: %<at>\\n"
  +                opt_F="${opt_F}regular architecture technology: %{at}\\n"
  +                opt_F="${opt_F}verbose architecture technology: %[at]\\n"
  +                opt_F="${opt_F}concise system class:            %<sc>\\n"
  +                opt_F="${opt_F}regular system class:            %{sc}\\n"
  +                opt_F="${opt_F}verbose system class:            %[sc]\\n"
  +                opt_F="${opt_F}concise system product:          %<sp>\\n"
  +                opt_F="${opt_F}regular system product:          %{sp}\\n"
  +                opt_F="${opt_F}verbose system product:          %[sp]\\n"
  +                opt_F="${opt_F}concise system technology:       %<st>\\n"
  +                opt_F="${opt_F}regular system technology:       %{st}\\n"
  +                opt_F="${opt_F}verbose system technology:       %[st]"
  +                ;;
  +            * )
  +                echo "$msgprefix:Error: invalid type \`$opt_t'" 1>&2
  +                exit 1
  +                ;;
           esac
  -    done
  -    if [ $# -ne 1 ]; then
  -        USAGE=YES
  -    else
  -        FILE=$1
       fi
  -    
  -    if [ ".$USAGE" = .YES ]; then
  -        echo "$0:Usage: newvers [options] file"
  -        echo "Options are:"
  -        echo "-l <lang>                 set language to one of 'txt', 'c' or 'perl'" 
  -        echo "-n <name>                 set program name"
  -        echo "-p <prefix>               set symbol prefix"
  -        echo "-r <v>.<r>[.pb]<p>        set release version string"
  -        echo "-i v|r|P|p|b|a|s          increase version, revision or {alpha,batch,patch,snap} level"
  -        echo "-d short|long|libtool|hex display current version only"
  -        echo "-h                        print this page"
  -        exit 0
  -    fi
  -    
  -    #   determine language
  -    if [ ".$LANGUAGE" = .unknown ]; then
  -        case $FILE in
  -            *.txt )       LANGUAGE=txt  ;;
  -            *.c )         LANGUAGE=c    ;;
  -            *.pl | *.pm ) LANGUAGE=perl ;;
  -            * )           echo "$0:Error: Unknown language type" 1>&2; exit 1 ;;
  -        esac
  -    fi
  -    
  -    #   determine prefix from name and vice versa
  -    if [ ".$PREFIX" = . -o ".$PREFIX" = .unknown ]; then
  -        if [ ".$NAME" != . -a ".$NAME" != .unknown ]; then
  -            PREFIX="$NAME"
  -        fi
  -    fi
  -    if [ ".$NAME" = . -o ".$NAME" = .unknown ]; then
  -        if [ ".$PREFIX" != . -a ".$PREFIX" != .unknown ]; then
  -            NAME="$PREFIX"
  -        fi
  -    fi
  -    
  -    #   determine version
  -    date=unknown
  -    if [ ".$FULLVERSION" = .unknown ]; then
  -        if [ -r "$FILE" ]; then
  -            #   grep out current information
  -            id=`grep 'Version [0-9]*.[0-9]*[.abps][0-9]* ([0-9]*-[a-zA-Z]*-[0-9]*)' $FILE | \
  -                head -1 | \
  -                sed -e 's%.*Version \([0-9]*\)\.\([0-9]*\)\([.abps]\)\([0-9]*\) (\([0-9]*-[a-zA-Z]*-[0-9]*\)).*%\1:\2:\3:\4:\5%'`
  -            version=`echo $id | awk -F: '{ print $1 }'`
  -            revision=`echo $id | awk -F: '{ print $2 }'`
  -            bptype=`echo $id | awk -F: '{ print $3 }'`
  -            bplevel=`echo $id | awk -F: '{ print $4 }'`
  -            date=`echo $id | awk -F: '{ print $5 }'`
  -            if [ .$REPORT = .NO ]; then
  -                case $INCREASE in
  -                    b ) bplevel=`expr $bplevel + 1`
  -                        bptype=b
  -                        ;;
  -                    a ) bplevel=`expr $bplevel + 1`
  -                        bptype=a
  -                        ;;
  -                    s ) bplevel=`expr $bplevel + 1`
  -                        bptype=s
  -                        ;;
  -                    P ) bplevel=`expr $bplevel + 1`
  -                        bptype=.
  -                        ;;
  -                    p ) bplevel=`expr $bplevel + 1`
  -                        bptype=p
  -                        ;;
  -                    r ) revision=`expr $revision + 1`
  -                        bplevel=0
  -                        ;;
  -                    v ) version=`expr $version + 1`
  -                        revision=0
  -                        bplevel=0
  -                        ;;
  -                esac
  -                date=calc
  +
  +    #   assemble initial platform information
  +    UNAME_MACHINE=`(uname -m) 2>/dev/null` ||\
  +    UNAME_MACHINE=`(uname -p) 2>/dev/null` ||\
  +    UNAME_MACHINE='unknown'
  +    UNAME_SYSTEM=`(uname -s) 2>/dev/null`  ||\
  +    UNAME_SYSTEM='unknown'
  +    UNAME_RELEASE=`(uname -r) 2>/dev/null` ||\
  +    UNAME_RELEASE=`(uname -v) 2>/dev/null` ||\
  +    UNAME_RELEASE='unknown'
  +
  +    UNAME="${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}"
  +
  +    AC=""; AP=""; AT=""
  +    SC=""; SP=""; ST=""
  +
  +    #    dispatch into platform specific sections
  +    case "${UNAME}" in
  +
  +        #   FreeBSD
  +        *:FreeBSD:* )
  +            #   determine architecture
  +            AC="${UNAME_MACHINE}"
  +            case "${AC}" in
  +                i386 ) AC="iX86" ;;
  +            esac
  +            AP="${AC}"
  +            AT=`(/sbin/sysctl -n hw.model) 2>&1`
  +            case "${AT}" in
  +                *"Xeon"* | *"Pentium Pro"* | *"Cyrix 6x86MX"* | *"Pentium II"* | *"Pentium III"* | *"Pentium 4"* | *"Celeron"* ) AT="i686" ;;
  +                *"Pentium"* ) AT="i586" ;; *"i486[SD]X"* | *"Cyrix 486"* | *"Cyrix [56]x86"* | *"Blue Lightning" | *"Cyrix 486S/DX" ) AT="i486" ;;
  +                *"i386[SD]X"* | *"NexGen 586"* ) AT="i386" ;;
  +                * ) AT="${AP}" ;;
  +            esac
  +            #   determine system
  +            r=`echo "${UNAME_RELEASE}" |\
  +               sed -e 's;[()];;' -e 's/\(-.*\)$/[\1]/'`
  +            ST="FreeBSD ${r}"
  +            SP="${ST}"
  +            case "${r}" in
  +                1.* ) SC="4.3BSD" ;;
  +                *   ) SC="4.4BSD" ;;
  +            esac
  +            ;;
  +
  +        #   NetBSD
  +        *:NetBSD:* )
  +            #   determine architecture
  +            AT="${UNAME_MACHINE}"
  +            AP="${AT}"
  +            case "${AP}" in
  +                i[3-6]86 ) AP="iX86" ;;
  +            esac
  +            AC="${AP}"
  +            #   determine system
  +            r=`echo "${UNAME_RELEASE}" | sed -e 's/\([-_].*\)$/[\1]/'`
  +            ST="NetBSD ${r}"
  +            SP="${ST}"
  +            case "${r}" in
  +                0.* ) SC="4.3BSD" ;;
  +                *   ) SC="4.4BSD" ;;
  +            esac
  +            ;;
  +
  +        #   OpenBSD
  +        *:OpenBSD:* )
  +            #   determine architecture
  +            AT="${UNAME_MACHINE}"
  +            AP="${AT}"
  +            case "${AP}" in
  +                i[3-6]86 ) AP="iX86" ;;
  +            esac
  +            AC="${AP}"
  +            #   determine system
  +            r=`echo "${UNAME_RELEASE}" | sed -e 's/\([-_].*\)$/[\1]/'`
  +            ST="OpenBSD ${r}"
  +            SP="${ST}"
  +            SC="4.4BSD"
  +            ;;
  +
  +        #   GNU/Linux
  +        *:Linux:* )
  +            #   determine architecture
  +            AT="${UNAME_MACHINE}"
  +            case "${AT}" in
  +               ia64     ) AT="IA64"   ;;
  +               x86_64   ) AT='AMD64'  ;;
  +               parisc   ) AT="HPPA32" ;;
  +               parisc64 ) AT="HPPA64" ;;
  +            esac
  +            AP="${AT}"
  +            case "${AP}" in
  +               i[3-6]86 ) AP='iX86' ;;
  +            esac
  +            AC="${AP}"
  +            #   determine system
  +            v_kern=`echo "${UNAME_RELEASE}" |\
  +                sed -e 's/^\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/'`
  +            v_libc=`(strings /lib/libc.so.* | grep '^GLIBC_' | sed -e 's/^GLIBC_//' |\
  +                sort -n | sed -n -e '$p' | sed -e 's/^\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/') 2>/dev/null`
  +            ST="GNU/<Linux >${v_libc}/<${v_kern}>"
  +            if [ -f /etc/lsb-release ]; then
  +                eval `( . /etc/lsb-release
  +                    echo "SC=\"LSB${LSB_VERSION}\""
  +                    if [ ".${DISTRIB_ID}" != . -a ".${DISTRIB_RELEASE}" != . ]; then
  +                        echo "SP=\"${DISTRIB_ID} ${DISTRIB_RELEASE}\""
  +                    fi
  +                ) 2>/dev/null`
               fi
  -            FULLVERSION="$version.$revision$bptype$bplevel"
  -        else
  -            #   intialise to first version
  -            version=0
  -            revision=5
  -            bptype=b
  -            bplevel=0
  -            date=calc
  -        fi
  -    else
  -        #   take given version
  -        V=`echo $FULLVERSION | sed -e 's%\([0-9]*\)\.\([0-9]*\)\([.abps]\)\([0-9]*\).*%\1:\2:\3:\4%'`
  -        version=`echo $V | awk -F: '{ print $1 }'`
  -        revision=`echo $V | awk -F: '{ print $2 }'`
  -        bptype=`echo $V | awk -F: '{ print $3 }'`
  -        bplevel=`echo $V | awk -F: '{ print $4 }'`
  -        date=calc
  -    fi
  -    
  -    #   determine hex value of version
  -    case $FULLVERSION in
  -        *.*a* )
  -            HEX=`echo "$FULLVERSION" | sed -e 's/a.*//' | awk -F. '{ printf("%d%02d", $1, $2); }' &&
  -                 echo "$FULLVERSION" | sed -e 's/.*a//' | awk '{ printf("0%02d", $1); }'`
  -            ;;
  -        *.*b* )
  -            HEX=`echo "$FULLVERSION" | sed -e 's/b.*//' | awk -F. '{ printf("%d%02d", $1, $2); }' &&
  -                 echo "$FULLVERSION" | sed -e 's/.*b//' | awk '{ printf("1%02d", $1); }'`
  +            if [ ".$SP" = . ]; then
  +                for tagfile in x \
  +                    `cd /etc && \
  +                    /bin/ls *[_-]release *[_-]version 2>/dev/null | \
  +                    sed -e '/^redhat-release$/d' -e '/^lsb-release$/d'; \
  +                    echo redhat-release lsb-release`
  +                do
  +                    [ ".${tagfile}" = .x ] && continue
  +                    [ ! -f "/etc/${tagfile}" ] && continue
  +                    n=`echo ${tagfile} | sed -e 's/[_-]release$//' -e 's/[_-]version$//'`
  +                    v=`(grep VERSION /etc/${tagfile}; cat /etc/${tagfile}) | grep '[0-9]' | sed -e 'q' |\
  +                       sed -e 's/^/#/' \
  +                           -e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' \
  +                           -e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' \
  +                           -e 's/^#[^0-9]*\([0-9][0-9]*\).*$/\1/' \
  +                           -e 's/^#.*$//'`
  +                    case "`util_lower ${n}`" in
  +                        redhat )
  +                            if [ ".`grep 'Red Hat Enterprise Linux' /etc/${tagfile}`" != . ]; then
  +                                n="<R>ed <H>at <E>nterprise <L>inux"
  +                            else
  +                                n="<R>ed <H>at <L>inux"
  +                            fi
  +                            ;;
  +                        debian      ) n="Debian[ GNU/Linux]"        ;;
  +                        fedora      ) n="<Fedora> Core[ GNU/Linux]" ;;
  +                        suse        ) n="SuSE[ Linux]"              ;;
  +                        mandrake    ) n="Mandrake[ Linux]"          ;;
  +                        gentoo      ) n="Gentoo[ GNU/Linux]"        ;;
  +                        slackware   ) n="Slackware[ Linux]"         ;;
  +                        turbolinux  ) n="TurboLinux"                ;;
  +                        unitedlinux ) n="UnitedLinux"               ;;
  +                        *           ) n="${n}[ GNU/Linux]"          ;;
  +                    esac
  +                    case "$n" in
  +                        *"<"*">"* ) SP="$n <$v>" ;;
  +                        *         ) SP="$n $v"   ;;
  +                    esac
  +                    break
  +                done
  +            fi
  +            [ ".$SP" = . ] && SP="${ST}"
  +            [ ".$SC" = . ] && SC="LSB"
  +            ;;
  +
  +        #   Sun Solaris
  +        *:SunOS:* )
  +            #   determine architecture
  +            AT="${UNAME_MACHINE}"
  +            case "${AT}" in
  +                i86pc ) AT="iX86" ;;
  +            esac
  +            AP="${AT}"
  +            case "${AP}" in
  +                sun4[cdm] ) AP="SPARC32" ;;
  +                sun4u     ) AP="SPARC64" ;;
  +                sun4*     ) AP="SPARC"   ;;
  +            esac
  +            AC="${AP}"
  +            case "${AC}" in
  +                SPARC* ) AC="SPARC" ;;
  +            esac
  +            #   determine system
  +            ST="[Sun ]SunOS ${UNAME_RELEASE}"
  +            v=`echo "${UNAME_RELEASE}" |\
  +               sed -e 's;^4\.;1.;' \
  +                   -e 's;^5\.\([0-6]\)[^0-9]*$;2.\1;' \
  +                   -e 's;^5\.\([0-9][0-9]*\).*;\1;'`
  +            SP="[Sun ]Solaris $v"
  +            case "${UNAME_RELEASE}" in
  +                4.* ) SC="4.3BSD" ;;
  +                5.* ) SC="SVR4"   ;;
  +            esac
               ;;
  -        *.*.* )
  -            HEX=`echo "$FULLVERSION" | awk -F. '{ printf("%d%02d2%02d", $1, $2, $3); }'`
  +
  +        #   SCO UnixWare
  +        *:UnixWare:* )
  +            #   determine architecture
  +            AT="${UNAME_MACHINE}"
  +            case "${AT}" in
  +                i[3-6]86 | ix86at ) AT="iX86" ;;
  +            esac
  +            AP="${AT}"
  +            #   determine system
  +            v=`/sbin/uname -v`
  +            ST="[SCO ]UnixWare ${v}"
  +            SP="${ST}"
  +            SC="SVR${UNAME_RELEASE}"
               ;;
  -    esac
  -    
  -    #   determine libtool version
  -    case $FULLVERSION in
  -        *.*a* )
  -            LTV=`echo "$FULLVERSION" | sed -e 's/a.*//' | awk -F. '{ printf("%d:0", $1*10+$2); }'`
  +
  +        #   QNX
  +        *:QNX:* )
  +            #   determine architecture
  +            AT="${UNAME_MACHINE}"
  +            case "${AT}" in
  +                x86pc ) AT="iX86" ;;
  +            esac
  +            AP="${AT}"
  +            #   determine system
  +            v="${UNAME_RELEASE}"
  +            ST="QNX[ Neutrino RTOS] ${v}"
  +            v=`echo "${v}" | sed -e 's;^\([0-9][0-9]*\.[0-9][0-9]*\).*$;\1;'`
  +            SP="QNX[ Neutrino RTOS] ${v}"
  +            SC="QNX"
  +            ;;
  +
  +        #   SGI IRIX
  +        *:IRIX*:* )
  +            #   determine architecture
  +            AT="${UNAME_MACHINE}"
  +            AP="${AT}"
  +            case "${AP}:${UNAME_SYSTEM}" in
  +                IP*:IRIX64 ) AP="MIPS64" ;;
  +                IP*:*      ) AP="MIPS"   ;;
  +            esac
  +            AC="${AP}"
  +            #   determine system
  +            v=`(/bin/uname -R || /bin/uname -r) 2>/dev/null | sed -e 's;[0-9.]* ;;'`
  +            ST="[SGI ]IRIX ${v}"
  +            v="${UNAME_RELEASE}"
  +            SP="[SGI ]IRIX ${v}"
  +            SC="4.2BSD/SVR3"
  +            ;;
  +
  +        #   HP HP-UX
  +        *:HP-UX:* )
  +            #   determine architecture
  +            AT="${UNAME_MACHINE}"
  +            case "${AT}" in
  +                ia64 ) AT="IA64" ;;
  +                9000/[34]?? ) AT=M68K ;;
  +                9000/[678][0-9][0-9])
  +                    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
  +                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
  +                    case "${sc_cpu_version}" in
  +                        523 ) AT="HPPA1.0" ;;
  +                        528 ) AT="HPPA1.1" ;;
  +                        532 ) AT="HPPA2.0"
  +                            case "${sc_kernel_bits}" in
  +                                32 ) AT="${AT}n" ;;
  +                                64 ) AT="${AT}w" ;;
  +                            esac
  +                            ;;
  +                    esac
  +                    ;;
  +            esac
  +            AP="${AT}"
  +            case "${AP}" in
  +                HPPA* ) AP="HPPA" ;;
  +            esac
  +            AC="${AP}"
  +            #   determine system
  +            v=`echo "${UNAME_RELEASE}" | sed -e 's;^[^0-9]*;;'`
  +            ST="[HP ]<HP>-<UX ${v}>"
  +            SP="${ST}"
  +            case "${v}" in
  +                10.*   ) SC="SVR4.2" ;;
  +                [7-9]* ) SC="SVR4"   ;;
  +            esac
               ;;
  -        *.*b* )
  -            LTV=`echo "$FULLVERSION" | sed -e 's/b.*//' | awk -F. '{ printf("%d:0", $1*10+$2); }'`
  +
  +        #   HP Tru64 (OSF1)
  +        *:OSF1:* )
  +            #   determine architecture
  +            AP="${UNAME_MACHINE}"
  +            case "${AP}" in
  +                alpha ) AP="Alpha" ;;
  +            esac
  +            alpha_type=`(/usr/sbin/psrinfo -v) 2>/dev/null |\
  +                sed -n -e 's/^.*The alpha \([^ ][^ ]*\).*processor.*$/\1/p' | sed -e 'q'`
  +            AT="${AP}${alpha_type}"
  +            AC="${AP}"
  +            #   determine system
  +            v=`echo "${UNAME_RELEASE}" | sed -e 's;^[VTX];;'`
  +            ST="[HP ]Tru64 ${v}"
  +            SP="${ST}"
  +            SC="OSF1"
  +            ;;
  +
  +        #   IBM AIX
  +        *:AIX:* )
  +            cpu_arch=rs6000
  +            if [ -x /usr/sbin/lsdev -a -x /usr/sbin/lsattr ]; then
  +                cpu_id=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
  +                if [ ".`/usr/sbin/lsattr -El ${cpu_id} | grep -i powerpc`" != . ]; then
  +                    cpu_arch=powerpc
  +                fi
  +            fi
  +            if [ -x /usr/bin/oslevel ]; then
  +                os_level=`/usr/bin/oslevel`
  +            else
  +                os_level="`uname -r`.`uname -v`"
  +            fi
  +            os_level=`echo "${os_level}" |\
  +                      sed -e 's;^\([0-9][0-9]*\.[0-9][0-9]*\)\(\.[0-9][0-9]*\)\(.*\)$;<\1>\2[\3];' \
  +                          -e 's;^\([0-9][0-9]*\.[0-9][0-9]*\)\(.*\)$;<\1>\2;'`
  +            AT="${cpu_arch}"
  +            AP="${AT}"
  +            AC="${AP}"
  +            ST="[IBM ]AIX ${os_level}"
  +            SP="${ST}"
  +            case "${os_level}" in
  +                [12]* ) SC="SVR2" ;;
  +                *     ) SC="SVR4" ;;
  +            esac
               ;;
  -        *.*.* )
  -            LTV=`echo "$FULLVERSION" | awk -F. '{ printf("%d:%d", $1*10+$2, $3); }'`
  +
  +        #   Apple MacOS X Darwin
  +        *:Darwin:* )
  +            AT=`uname -p`
  +            case "${AT}" in
  +                powerpc ) AT="PPC" ;;
  +            esac
  +            AP="${AT}"
  +            AC="${AP}"
  +            case "${AC}" in
  +                i?86 ) AC="iX86" ;;
  +            esac
  +            ST="[Apple ]${UNAME_SYSTEM} ${UNAME_RELEASE}"
  +            SP="${ST}"
  +            SC="4.4BSD/Mach3"
  +            ;;
  +
  +        #   TODO ...ADD YOUR NEW PLATFORM CHECK HERE... TODO
  +        # *:XXX:* )
  +        #   ...
  +        #   ;;
  +
  +        #   ...A STILL UNKNOWN PLATFORM...
  +        * )
  +            AT=`echo "${UNAME_MACHINE}" | sed -e "s; ;${opt_C};g"`
  +            AP="${AT}"
  +            AC="${AP}"
  +            v=`echo "${UNAME_RELEASE}" |\
  +               sed -e 's/^/#/' \
  +                   -e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' \
  +                   -e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' \
  +                   -e 's/^#[^0-9]*\([0-9][0-9]*\).*$/\1/' \
  +                   -e 's/^#.*$/?/'`
  +            ST="${UNAME_SYSTEM} ${v}"
  +            SP="${ST}"
  +            SC="${SP}"
               ;;
  +
       esac
  -    
  -    #   determine string out of filename
  -    FILESTR=`echo "$FILE" | tr '[a-z./%+\-]' '[A-Z______]'`
  -    
  -    #   determine date
  -    if [ ".$date" = .calc ]; then
  -        day="`date '+%d' | awk '{ printf("%s", $1); }'`"
  -        month="`date '+%m' | awk '{ printf("%s", $1); }'`"
  -        year="`date '+%Y' 2>/dev/null | awk '{ printf("%s", $1); }'`"
  -        if test ".$time_year" = .; then
  -            year="`date '+%y' | awk '{ printf("%s", $1); }'`"
  -            case $year in
  -                9[0-9]*) year="19$year" ;;
  -                      *) year="20$year" ;;
  +
  +    #   provide fallback values
  +    [ ".$AT" = . ] && AT="${AP:-${AC}}"
  +    [ ".$AP" = . ] && AP="${AT:-${AC}}"
  +    [ ".$AC" = . ] && AC="${AP:-${AT}}"
  +    [ ".$ST" = . ] && ST="${SP:-${SC}}"
  +    [ ".$SP" = . ] && SP="${ST:-${SC}}"
  +    [ ".$SC" = . ] && SC="${SP:-${ST}}"
  +
  +    #   support explicit enforced verbose/concise output
  +    if [ ".$opt_v" = .yes ]; then
  +        opt_F=`echo ":$opt_F" | sed -e 's/^://' -e 's/%\([as][cpt]\)/%[\1]/g'`
  +    elif [ ".$opt_c" = .yes ]; then
  +        opt_F=`echo ":$opt_F" | sed -e 's/^://' -e 's/%\([as][cpt]\)/%<\1>/g'`
  +    fi
  +
  +    #   provide verbose and concise variants
  +    AC_V=""; AC_N=""; AC_C=""
  +    AP_V=""; AP_N=""; AP_C=""
  +    AT_V=""; AT_N=""; AT_C=""
  +    SC_V=""; SC_N=""; SC_C=""
  +    SP_V=""; SP_N=""; SP_C=""
  +    ST_V=""; ST_N=""; ST_C=""
  +    for var_lc in at ap ac st sp sc; do
  +        case "$opt_F" in
  +            *"%[${val_lc}]"* | *"%{${val_lc}}"* | *"%${val_lc}"* | *"%<${val_lc}>"* )
  +            var_uc=`util_upper "$var_lc"`
  +            eval "val=\"\$${var_uc}\""
  +            val_V=""; val_N=""; val_C=""
  +            case "$opt_F" in
  +                *"%[${var_lc}]"* )
  +                    val_V=`echo ":$val" | \
  +                           sed -e 's/^://' \
  +                               -e 's;\[\([^]]*\)\];\1;g' \
  +                               -e 's;<\([^>]*\)>;\1;g' \
  +                               -e "s; ;§§;g" \
  +                               -e "s;/;%%;g" \
  +                               -e "s;§§;${opt_S};g" \
  +                               -e "s;%%;${opt_C};g"`
  +                    eval "${var_uc}_V=\"\${val_V}\""
  +                    ;;
               esac
  -        fi
  -        case $month in
  -            1|01) month='Jan' ;;
  -            2|02) month='Feb' ;;
  -            3|03) month='Mar' ;;
  -            4|04) month='Apr' ;;
  -            5|05) month='May' ;;
  -            6|06) month='Jun' ;;
  -            7|07) month='Jul' ;;
  -            8|08) month='Aug' ;;
  -            9|09) month='Sep' ;;
  -              10) month='Oct' ;;
  -              11) month='Nov' ;;
  -              12) month='Dec' ;;
  +            case "$opt_F" in
  +                *"%{${var_lc}}"* | *"%${var_lc}"* )
  +                    val_N=`echo ":$val" | \
  +                           sed -e 's/^://' \
  +                               -e 's;\[\([^]]*\)\];;g' \
  +                               -e 's;<\([^>]*\)>;\1;g' \
  +                               -e "s; ;§§;g" \
  +                               -e "s;/;%%;g" \
  +                               -e "s;§§;${opt_S};g" \
  +                               -e "s;%%;${opt_C};g"`
  +                    eval "${var_uc}_N=\"\${val_N}\""
  +                    ;;
  +            esac
  +            case "$opt_F" in
  +                *"%<${var_lc}>"* )
  +                    val_C=`echo ":$val" | \
  +                           sed -e 's/^://' \
  +                               -e 's;\[\([^]]*\)\];;g' \
  +                               -e 's;[^<]*<\([^>]*\)>[^<]*;\1;g' \
  +                               -e "s; ;§§;g" \
  +                               -e "s;/;%%;g" \
  +                               -e "s;§§;${opt_S};g" \
  +                               -e "s;%%;${opt_C};g"`
  +                    eval "${var_uc}_C=\"\${val_C}\""
  +                    ;;
  +            esac
  +            ;;
           esac
  -        date="${day}-${month}-${year}"
  +    done
  +
  +    #   create output string
  +    output=`echo ":$opt_F" |\
  +            sed -e "s/^://" \
  +                -e "s;%\\[ac\\];${AC_V};g" \
  +                -e "s;%{ac};${AC_N};g" \
  +                -e "s;%ac;${AC_N};g" \
  +                -e "s;%<ac>;${AC_C};g" \
  +                -e "s;%\\[ap\\];${AP_V};g" \
  +                -e "s;%{ap};${AP_N};g" \
  +                -e "s;%ap;${AP_N};g" \
  +                -e "s;%<ap>;${AP_C};g" \
  +                -e "s;%\\[at\\];${AT_V};g" \
  +                -e "s;%{at};${AT_N};g" \
  +                -e "s;%at;${AT_N};g" \
  +                -e "s;%<at>;${AT_C};g" \
  +                -e "s;%\\[sc\\];${SC_V};g" \
  +                -e "s;%{sc};${SC_N};g" \
  +                -e "s;%sc;${SC_N};g" \
  +                -e "s;%<sc>;${SC_C};g" \
  +                -e "s;%\\[sp\\];${SP_V};g" \
  +                -e "s;%{sp};${SP_N};g" \
  +                -e "s;%sp;${SP_N};g" \
  +                -e "s;%<sp>;${SP_C};g" \
  +                -e "s;%\\[st\\];${ST_V};g" \
  +                -e "s;%{st};${ST_N};g" \
  +                -e "s;%st;${ST_N};g" \
  +                -e "s;%<st>;${ST_C};g" \
  +                -e 's/\\\\n/^/g' |\
  +             tr '^' '\012'`
  +
  +    #   support lower/upper-case mapping
  +    if [ ".$opt_L" = .yes ]; then
  +        output=`util_lower "$output"`
  +    elif [ ".$opt_U" = .yes ]; then
  +        output=`util_upper "$output"`
  +    fi
  +
  +    #   display output string
  +    if [ ".$opt_n" = .yes ]; then
  +        echo . | awk '{ printf("%s", output); }' output="$output"
  +    else
  +        echo "$output"
       fi
  -    
  -    if [ .$REPORT != .NO ]; then
  -        case $REPORT in
  -            long )
  -                echo "$version.$revision$bptype$bplevel ($date)"
  -                ;;
  -            short )
  -                echo "$version.$revision$bptype$bplevel"
  -                ;;
  -            libtool )
  -                echo "$LTV"
  -                ;;
  -            hex )
  -                echo "0x$HEX"
  -                ;;
  -        esac
  -        exit 0
  +
  +    shtool_exit 0
  +    ;;
  +
  +arx )
  +    ##
  +    ##  arx -- Extended archive command
  +    ##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +    ##
  +
  +    ar_prg="$opt_C"
  +    ar_cmd="$1"; shift
  +    archive="$1"; shift
  +    files="$*"
  +
  +    #   walk through the file list and expand archives members
  +    tmpdir=`echo $archive | sed -e 's;[^/]*$;.arx;'`
  +    nfiles=''
  +    if [ ".$files" != . ]; then
  +        for file in $files; do
  +            if [ ! -f $file ]; then
  +                echo "$msgprefix:Error: input file not found: $file" 1>&2
  +                shtool_exit 1
  +            fi
  +            case $file in
  +                *.a )
  +                    if [ ! -d $tmpdir ]; then
  +                        if [ ".$opt_t" = .yes ]; then
  +                            echo "mkdir $tmpdir" 1>&2
  +                        fi
  +                        mkdir $tmpdir
  +                    fi
  +                    case $tmpdir in
  +                         .arx )
  +                             from="../$file"
  +                             ;;
  +                         * )
  +                             dir=`echo $file | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;' -e 's;^$;.;'`
  +                             base=`echo $file | sed -e 's;.*/\([^/]*\)$;\1;'`
  +                             from="`cd $dir; pwd`/$base"
  +                             ;;
  +                    esac
  +                    if [ ".$opt_t" = .yes ]; then
  +                        echo "(cd $tmpdir && $ar_prg x $from)" 1>&2
  +                    fi
  +                    (cd $tmpdir && eval $ar_prg x $from)
  +                    if [ $? -ne 0 ]; then
  +                        echo "$msgprefix:Error: member extraction failed for archive: $file" 1>&2
  +                        shtool_exit 1
  +                    fi
  +                    for member in - `eval $ar_prg t $file | sed -e '/_\.SYMDEF/d'`; do
  +                        [ ".$member" = .- ] && continue
  +                        nfiles="$nfiles $tmpdir/$member"
  +                    done
  +                    ;;
  +                * )
  +                    nfiles="$nfiles $file"
  +                    ;;
  +            esac
  +        done
       fi
  -    
  -    #   create the version file according the the selected language  
  -    echo "new version: $version.$revision$bptype$bplevel ($date)"
  -    tmpfile="/tmp/newvers.tmp.$$"
  -    rm -f $tmpfile >/dev/null 2>&1
  -    case $LANGUAGE in
  -        txt )
  -            cat >$tmpfile <<'EOT'
  -    
  -  This is @NAME@ Version @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ (@DAY@-@MONTH@-@YEAR@)
  -EOT
  -            ;;
  -        c )
  -            cat >$tmpfile <<'EOT'
  -/*
  -**  @FILE@ -- Version File (automatically generated and maintained by NEWVERS)
  -*/
  -
  -#ifdef AS_HEADER
  -
  -#ifndef @FILESTR@
  -#define @FILESTR@
  -#define @PREFIX@_VERSION 0x@HEX@
  -extern const int  @PREFIX@_Version;
  -extern const char @PREFIX@_VersionStr[];
  -extern const char @PREFIX@_Hello[];
  -extern const char @PREFIX@_GNUVersion[];
  -extern const char @PREFIX@_WhatID[];
  -extern const char @PREFIX@_RCSIdentID[];
  -extern const char @PREFIX@_WebID[];
  -extern const char @PREFIX@_PlainID[];
  -#endif
  -
  -#else
  -
  -const int  @PREFIX@_Version      = 0x@HEX@;
  -const char @PREFIX@_VersionStr[] = "@VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ (@DAY@-@MONTH@-@YEAR@)";
  -const char @PREFIX@_Hello[]      = "This is @NAME@ Version @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ (@DAY@-@MONTH@-@YEAR@)";
  -const char @PREFIX@_GNUVersion[] = "@NAME@ Version @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@";
  -const char @PREFIX@_WhatID[]     = "@(#)@NAME@ Version @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ (@DAY@-@MONTH@-@YEAR@)";
  -const char @PREFIX@_RCSIdentID[] = "$Id: shtool,v 1.1.1.1 1999/03/31 06:29:31 rse Exp $";
  -const char @PREFIX@_WebID[]      = "@NAME@/@VERSION@.@REVISION@@BPTYPE@@BPLEVEL@";
  -const char @PREFIX@_PlainID[]    = "@VERSION@.@REVISION@@BPTYPE@@BPLEVEL@";
  -
  -#endif
  -EOT
  -            ;;
  -        perl )
  -            cat >$tmpfile <<'EOT'
  -    
  -$@PREFIX@_Version    = 0x@HEX@;
  -$@PREFIX@_VersionStr = "@VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ (@DAY@-@MONTH@-@YEAR@)";
  -$@PREFIX@_Hello      = "This is @NAME@ Version @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ (@DAY@-@MONTH@-@YEAR@)";
  -$@PREFIX@_GNUVersion = "@NAME@ Version @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@";
  -$@PREFIX@_WhatID     = "@(#)@NAME@ Version @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ (@DAY@-@MONTH@-@YEAR@)";
  -$@PREFIX@_RCSIdentID = "\$Id: shtool,v 1.1.1.1 1999/03/31 06:29:31 rse Exp $";
  -$@PREFIX@_WebID      = "@NAME@/@VERSION@.@REVISION@@BPTYPE@@BPLEVEL@";
  -$@PREFIX@_PlainID    = "@VERSION@.@REVISION@@BPTYPE@@BPLEVEL@";
   
  -1;
  -EOT
  -            ;;
  -    esac
  -    
  -    #   now create the version file
  -    rm -f $FILE >/dev/null 2>&1
  -    sed \
  -        -e "s|@FILE@|$FILE|g" \
  -        -e "s|@FILESTR@|$FILESTR|g" \
  -        -e "s|@PREFIX@|$PREFIX|g" \
  -        -e "s|@NAME@|$NAME|g" \
  -        -e "s|@HEX@|$HEX|g" \
  -        -e "s|@VERSION@|$version|g" \
  -        -e "s|@REVISION@|$revision|g" \
  -        -e "s|@BPTYPE@|$bptype|g" \
  -        -e "s|@BPLEVEL@|$bplevel|g" \
  -        -e "s|@YEAR@|$year|g" \
  -        -e "s|@MONTH@|$month|g" \
  -        -e "s|@DAY@|$day|g" <$tmpfile >$FILE
  -    rm -f $tmpfile >/dev/null 2>&1
  -    exit 0
  -;;
  +    #   run the final archive command
  +    if [ ".$opt_t" = .yes ]; then
  +        echo "$ar_prg $ar_cmd $archive $nfiles" 1>&2
  +    fi
  +    eval $ar_prg $ar_cmd $archive $nfiles
  +    if [ $? -ne 0 ]; then
  +        echo "$msgprefix:Error: archive command failed" 1>&2
  +        shtool_exit $?
  +    fi
   
  -ppl )
  -    list=`
  -    IFS=:
  -    for entry in $*; do
  -        if [ "x$entry" != "x" ]; then
  -            echo $entry
  +    #   cleanup and die gracefully
  +    if [ -d $tmpdir ]; then
  +        if [ ".$opt_t" = .yes ]; then
  +            echo "rm -rf $tmpdir" 1>&2
           fi
  -    done |\
  -    sort |\
  -    awk '
  -        BEGIN { list = ""; n = 0; }
  -        { 
  -            list = list $1;
  -            n = n + 1;
  -            if (n == 1 || n == 2) {
  -                list = list ":";
  -            }
  -            if (n == 3) {
  -                list = list "\n";
  -                n = 0;
  -            }
  -        }
  -        END { print list; }
  -    '`
  -    IFS='
  -    '
  -    for entry in $list; do
  -        echo $entry |\
  -        awk -F: '
  -            { printf("%-15s %-15s %-15s\n", $1, $2, $3); }
  -        '
  -    done |\
  -    awk '{ 
  -        if (length($0) > 48) { 
  -            printf("%s\n", substr($0, 0, 47));
  -        } else { 
  -            print $0; 
  -        }
  -    }' |\
  -    sed -e 's/^/                        [/' -e 's/$/]/'
  -;;
  +        rm -rf $tmpdir
  +    fi
  +
  +    shtool_exit 0
  +    ;;
   
   slo )
  -    DIFS=' 	
  -    '
  -    
  -    #   
  +    ##
  +    ##  slo -- Separate linker options by library class
  +    ##  Copyright (c) 1998-2004 Ralf S. Engelschall <rse@engelschall.com>
  +    ##
  +
  +    DIFS="$IFS"
  +
       #   parse out -L and -l options from command line
  -    #
       DIRS=''
       LIBS=''
       ARGV=''
  -    optprev=""
  -    OIFS="$IFS" IFS="$DIFS"
  +    optprev=''
       for opt
       do
           #   concatenate with previous option if exists
  @@ -1250,8 +3144,8 @@
               opt="${optprev}${opt}";
               optprev=''
           fi
  -        #   remember options for arg when used stand-alone
  -        if [ ".$opt" = ".-L" -o ".$opt" = ".-l" ]; then
  +        #   remember options for arg if used stand-alone
  +        if [ ".$opt" = ".-L" ] || [ ".$opt" = ".-l" ]; then
               optprev="$opt"
               continue;
           fi
  @@ -1265,61 +3159,56 @@
                *) ARGV="$ARGV $opt" ;;
           esac
       done
  -    IFS="$OIFS"
  -    
  -    #
  +
       #   set linker default directories
  -    #
       DIRS_DEFAULT='/lib:/usr/lib'
       if [ ".$LD_LIBRARY_PATH" != . ]; then
           DIRS_DEFAULT="$DIRS_DEFAULT:$LD_LIBRARY_PATH"
       fi
  -    
  -    #
  +
       #   sort options by class
  -    #
       DIRS_OBJ=''
       LIBS_OBJ=''
       DIRS_PIC=''
       LIBS_PIC=''
       DIRS_DSO=''
       LIBS_DSO=''
  -    
  +
       #    for each library...
  -    OIFS="$IFS" IFS=':'
  +    OIFS="$IFS"; IFS=':'
       for lib in $LIBS; do
           [ ".$lib" = . ] && continue
  -    
  +
           found='no'
           found_indefdir='no'
           found_type=''
           found_dir=''
  -    
  +
           #    for each directory...
  -        OIFS2="$IFS" IFS=":$DIFS"
  +        OIFS2="$IFS"; IFS=":$DIFS"
           for dir in ${DIRS} switch-to-defdirs ${DIRS_DEFAULT}; do
               [ ".$dir" = . ] && continue
               [ ".$dir" = .switch-to-defdirs ] && found_indefdir=yes
               [ ! -d $dir ] && continue
  -    
  +
               #    search the file
  -            OIFS3="$IFS" IFS="$DIFS"
  -            for file in '' `cd $dir && ls lib${lib}.* 2>/dev/null`; do
  +            OIFS3="$IFS"; IFS="$DIFS"
  +            for file in '' `cd $dir && env -i /bin/ls lib${lib}.* 2>/dev/null`; do
                    [ ".$file" = . ] && continue
                    case $file in
                        *.so|*.so.[0-9]*|*.sl|*.sl.[0-9]* )
                             found=yes;
  -                          found_type=DSO; 
  -                          break 
  +                          found_type=DSO;
  +                          break
                             ;;
                        *.lo|*.la )
                             found=yes;
  -                          found_type=PIC 
  +                          found_type=PIC
                             ;;
                        *.a )
                             if [ ".$found_type" = . ]; then
                                 found=yes
  -                              found_type=OBJ 
  +                              found_type=OBJ
                             fi
                             ;;
                    esac
  @@ -1331,13 +3220,14 @@
               fi
           done
           IFS="$OIFS2"
  -    
  +
           if [ ".$found" = .yes ]; then
               if [ ".$found_indefdir" != .yes ]; then
                   eval "dirlist=\"\${DIRS_${found_type}}:\""
  -                if [ ".`echo \"$dirlist\" | fgrep :$found_dir:`" = . ]; then
  -                    eval "DIRS_${found_type}=\"\$DIRS_${found_type}:${found_dir}\""
  -                fi
  +                case "$dirlist" in
  +                    *:$found_dir:* ) ;;
  +                    * ) eval "DIRS_${found_type}=\"\$DIRS_${found_type}:${found_dir}\"" ;;
  +                esac
                   eval "LIBS_${found_type}=\"\$LIBS_${found_type}:$lib\""
               else
                   eval "LIBS_${found_type}=\"\$LIBS_${found_type}:$lib\""
  @@ -1350,25 +3240,21 @@
           fi
       done
       IFS="$OIFS"
  -    
  -    #
  +
       #   also pass-through unused dirs even if it's useless
  -    #
  -    OIFS="$IFS" IFS=':'
  +    OIFS="$IFS"; IFS=':'
       for dir in $DIRS; do
           dirlist="${DIRS_OBJ}:${DIRS_PIC}:${DIRS_DSO}:"
  -        if [ ".`echo \"$dirlist\" | fgrep :$dir:`" = . ]; then
  -            DIRS_OBJ="$DIRS_OBJ:$dir"
  -        fi
  +        case "$dirlist" in
  +            *:$dir:* ) ;;
  +            * ) DIRS_OBJ="$DIRS_OBJ:$dir" ;;
  +        esac
       done
       IFS="$OIFS"
  -    
  -    #
  -    #   reassemble the options but seperated by type
  -    #
  -    OIFS="$IFS" IFS="$DIFS"
  +
  +    #   reassemble the options but separated by type
       for type in OBJ PIC DSO; do
  -        OIFS2="$IFS" IFS=':'
  +        OIFS="$IFS"; IFS=':'
           eval "libs=\"\$LIBS_${type}\""
           opts=''
           for lib in $libs; do
  @@ -1376,7 +3262,7 @@
               opts="$opts -l$lib"
           done
           eval "LIBS_${type}=\"$opts\""
  -    
  +
           eval "dirs=\"\$DIRS_${type}\""
           opts=''
           for dir in $dirs; do
  @@ -1384,26 +3270,676 @@
               opts="$opts -L$dir"
           done
           eval "DIRS_${type}=\"$opts\""
  -        IFS="$OIFS2"
  +        IFS="$OIFS"
       done
  -    IFS="$OIFS"
  -    
  -    #
  +
       #   give back results
  -    #
  -    OIFS="$IFS" IFS="$DIFS"
       for var in ARGV DIRS_OBJ LIBS_OBJ DIRS_PIC LIBS_PIC DIRS_DSO LIBS_DSO; do
           eval "val=\"\$${var}\""
           val="`echo $val | sed -e 's/^ *//'`"
  -        echo "SLO_${var}=\"${val}\""
  +        echo "${opt_p}${var}=\"${val}\""
       done
  -    IFS="$OIFS"
  -;;
   
  -* )
  -    echo "shtool:Error: Unknown command"
  -    exit 1
  +    shtool_exit 0
  +    ;;
  +
  +scpp )
  +    ##
  +    ##  scpp -- Sharing C Pre-Processor
  +    ##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +    ##
  +
  +    srcs="$*"
  +    output="${opt_o}.n"
  +
  +    #   find a reasonable Awk
  +    awk=''
  +    paths=`echo $PATH |\
  +           sed -e 's%/*:%:%g' -e 's%/$%%' \
  +               -e 's/^:/.:/' -e 's/::/:.:/g' -e 's/:$/:./' \
  +               -e 's/:/ /g'`
  +    for name in gawk nawk awk; do
  +        for path in $paths; do
  +            if [ -r "$path/$name" ]; then
  +                awk="$path/$name"
  +                break
  +            fi
  +        done
  +        if [ ".$awk" != . ]; then
  +            break
  +        fi
  +    done
  +    if [ ".$awk" = . ]; then
  +        echo "$msgprefix:Error: cannot find a reasonable Awk" 1>&2
  +        shtool_exit 1
  +    fi
  +
  +    #   parse source file(s)
  +    if [ ".$opt_v" = .yes ]; then
  +        echo "Parsing:" | $awk '{ printf("%s", $0); }' 1>&2
  +    fi
  +    for src in $srcs; do
  +        if [ ".$opt_v" = .yes ]; then
  +            echo $src | $awk '{ printf(" %s", $0); }' 1>&2
  +        fi
  +        if [ ".$opt_f" != . ]; then
  +            inputcmd="sed"
  +            OIFS="$IFS"; IFS="$ASC_NL"; set -- $opt_f; IFS="$OIFS"
  +            for e
  +            do
  +                inputcmd="$inputcmd -e '$e'"
  +            done
  +            inputcmd="$inputcmd '$src'"
  +        else
  +            inputcmd="cat '$src'"
  +        fi
  +        eval $inputcmd |\
  +        $awk '
  +           BEGIN {
  +               ln    = 0;
  +               fln   = 0;
  +               level = 0;
  +               mode  = "";
  +               store = "";
  +           }
  +           {
  +               ln++;
  +           }
  +           /^#if.*/ {
  +               level++;
  +           }
  +           /^#if [a-zA-Z_][a-zA-Z0-9_]* *$/ {
  +               if ($2 == define) {
  +                   mode = "D";
  +                   printf("D:#line %d \"%s\"\n", ln, src);
  +                   next;
  +               }
  +           }
  +           /^#endif.*/ {
  +               level--;
  +               if (mode == "D" && level == 0) {
  +                   mode = "";
  +                   next;
  +               }
  +           }
  +           /^[a-zA-Z_][a-zA-Z0-9_].*;.*/ {
  +               if ($1 == class) {
  +                   printf("V:#line %d \"%s\"\n", ln, src);
  +                   printf("V:%s\n", $0);
  +                   printf("J:%s\n", $0);
  +                   next;
  +               }
  +           }
  +           /^[a-zA-Z_][a-zA-Z0-9_].*=.*/ {
  +               if ($1 == class) {
  +                   printf("V:#line %d \"%s\"\n", ln, src);
  +                   printf("V:%s\n", $0);
  +                   printf("J:%s\n", $0);
  +                   next;
  +               }
  +           }
  +           /^[a-zA-Z_][a-zA-Z0-9_]*/ {
  +               if ($1 == class) {
  +                   fln = ln;
  +                   store = $0;
  +                   mode = "F";
  +                   next;
  +               }
  +           }
  +           /^\{ *$/ {
  +               if (mode == "F") {
  +                   printf("F:#line %d \"%s\"\n", fln, src);
  +                   printf("F:%s;\n", store);
  +                   printf("I:%s;\n", store);
  +                   store = "";
  +                   mode = "";
  +                   next;
  +               }
  +           }
  +           {
  +               if (mode == "D")
  +                   printf("D:%s\n", $0);
  +               else if (mode == "F")
  +                   store = store " " $0;
  +           }
  +        ' "src=$src" "define=$opt_D" "class=$opt_C" >>$tmpfile
  +    done
  +    if [ ".$opt_v" = .yes ]; then
  +        echo "" 1>&2
  +    fi
  +
  +    #   start generating output header
  +    echo "/* $opt_o -- autogenerated from $opt_t, DO NOT EDIT! */" >$output
  +    echo "#line 1 \"$opt_t\"" >>$output
  +    sed <$opt_t -e "1,/^${opt_M} *\$/p" -e 'd' |\
  +    sed -e "/^${opt_M} *\$/d" >>$output
  +
  +    #   merge in the define blocks
  +    grep '^D:' $tmpfile | sed -e 's/^D://' >>$output
  +
  +    #   generate standard prolog
  +    echo "#line 1 \"_ON_THE_FLY_\"" >>$output
  +    echo "" >>$output
  +    echo "/* make sure the scpp source extensions are skipped */" >>$output
  +    echo "#define $opt_D 0" >>$output
  +    echo "#define $opt_C /**/" >>$output
  +
  +    #   generate namespace hiding for variables
  +    echo "" >>$output
  +    echo "/* move intern variables to hidden namespace */" >>$output
  +    grep '^J:' $tmpfile | sed >>$output \
  +        -e 's/^J://' \
  +        -e 's/  */ /g' \
  +        -e 's/^[^=;]*[ *]\([a-zA-Z0-9_]*\)\[\];.*$/#define \1 __\1/' \
  +        -e 's/^[^=;]*[ *]\([a-zA-Z0-9_]*\)\[\] =.*$/#define \1 __\1/' \
  +        -e 's/^[^=;]*[ *]\([a-zA-Z0-9_]*\);.*$/#define \1 __\1/' \
  +        -e 's/^[^=;]*[ *]\([a-zA-Z0-9_]*\) =.*$/#define \1 __\1/'
  +
  +    #   generate namespace hiding for functions
  +    echo "" >>$output
  +    echo "/* move intern functions to hidden namespace */" >>$output
  +    grep '^I:' $tmpfile | sed >>$output \
  +        -e 's/^I://' \
  +        -e 's/\([ (]\) */\1/g' \
  +        -e 's/ *\([),]\)/\1/g' \
  +        -e 's/^[^(]*[ *]\([a-zA-Z0-9_]*\)(.*$/#define \1 __\1/'
  +
  +    #   generate prototypes for variables
  +    echo "" >>$output
  +    echo "/* prototypes for intern variables */" >>$output
  +    grep '^V:' $tmpfile | sed >>$output \
  +        -e 's/^V://' \
  +        -e 's/  */ /g' \
  +        -e 's/^\([^=;]*[ *][a-zA-Z0-9_]*\[\]\);.*$/\1;/' \
  +        -e 's/^\([^=;]*[ *][a-zA-Z0-9_]*\[\]\) =.*$/\1;/' \
  +        -e 's/^\([^=;]*[ *][a-zA-Z0-9_]*\);.*$/\1;/' \
  +        -e 's/^\([^=;]*[ *][a-zA-Z0-9_]*\) =.*$/\1;/' \
  +        -e 's/ ;/;/g' \
  +        -e "s/^$opt_C /extern /"
  +
  +    #   generate prototypes for functions
  +    echo "" >>$output
  +    echo "/* prototypes for intern functions */" >>$output
  +    grep '^F:' $tmpfile | sed >>$output \
  +        -e 's/^F://' \
  +        -e 's/\([ (]\) */\1/g' \
  +        -e 's/ *\([),]\)/\1/g' \
  +        -e 's/\([* ]\)[a-zA-Z0-9_]*,/\1,/g' \
  +        -e 's/\([* ]\)[a-zA-Z0-9_]*);/\1);/g' \
  +        -e 's/(\*[a-zA-Z0-9_]*)(/(*)(/g' \
  +        -e 's/\([ (]\) */\1/g' \
  +        -e 's/ *\([),]\)/\1/g' \
  +        -e "s/^$opt_C /extern /"
  +
  +    #   finish generating output header
  +    n=`(echo ''; sed <$opt_t -e "1,/^${opt_M} *\$/p" -e 'd') |\
  +       wc -l | sed -e 's;^ *\([0-9]*\) *$;\1;'`
  +    echo "#line $n \"$opt_t\"" >>$output
  +    sed <$opt_t -e "/^${opt_M} *\$/,\$p" -e 'd' |\
  +    sed -e "/^${opt_M} *\$/d" >>$output
  +
  +    #   create final output file
  +    if [ -f $opt_o ]; then
  +        if [ ".$opt_p" = .yes ]; then
  +            grep -v '^#line' $opt_o  >$tmpfile.o
  +            grep -v '^#line' $output >$tmpfile.n
  +            out_old="$tmpfile.o"
  +            out_new="$tmpfile.n"
  +        else
  +            out_old="$opt_o"
  +            out_new="$output"
  +        fi
  +        if cmp -s $out_old $out_new; then
  +            :
  +        else
  +            cp $output $opt_o
  +        fi
  +    else
  +        cp $output $opt_o
  +    fi
  +    rm -f $output
  +    rm -f $tmpfile $tmpfile.* >/dev/null 2>&1
  +
  +    shtool_exit 0
  +    ;;
  +
  +version )
  +    ##
  +    ##  version -- Maintain a version information file
  +    ##  Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
  +    ##
  +
  +    file="$1"
  +
  +    #   determine prefix and name
  +    name="$opt_n"
  +    prefix="$opt_p"
  +
  +    #   determine current version
  +    triple="$opt_s"
  +    if [ ".$triple" != . ]; then
  +        #   use given triple
  +        if [ ".`echo $triple | grep '[0-9]*.[0-9]*[sabp.][0-9]*'`" = . ]; then
  +            echo "$msgprefix:Error: invalid argument to option \`-s': \`$opt_s'" 1>&2
  +            shtool_exit 1
  +        fi
  +        eval `echo $triple |\
  +              sed -e 's%\([0-9]*\)\.\([0-9]*\)\([sabp.]\)\([0-9]*\).*%\
  +              ver="\1";rev="\2";typ="\3";lev="\4"%'`
  +        tim=calc
  +    elif [ -r $file ]; then
  +        #   determine triple from given file
  +        eval `grep 'Version [0-9]*.[0-9]*[sabp.][0-9]* ([0-9]*-[a-zA-Z]*-[0-9]*)' $file |\
  +              sed -e 's%.*Version \([0-9]*\)\.\([0-9]*\)\([sabp.]\)\([0-9]*\) (\([0-9]*-[a-zA-Z]*-[0-9]*\)).*%\
  +              ver="\1";rev="\2";typ="\3";lev="\4";tim="\5"%' -e 'q'`
  +    else
  +        #   intialise to first version
  +        ver=0
  +        rev=1
  +        typ=.
  +        lev=0
  +        tim=calc
  +    fi
  +
  +    #   determine new version in batch
  +    if [ ".$opt_i" != . ]; then
  +        case $opt_i in
  +            v ) ver=`expr $ver + 1`
  +                rev=0
  +                lev=0
  +                ;;
  +            r ) rev=`expr $rev + 1`
  +                lev=0
  +                ;;
  +            l ) lev=`expr $lev + 1`
  +                ;;
  +            * ) echo "$msgprefix:Error: invalid argument to option \`-i': \`$opt_i'" 1>&2
  +                shtool_exit 1
  +                ;;
  +        esac
  +        tim=calc
  +    fi
  +
  +    #   determine new version interactively
  +    if [ ".$opt_e" = .yes ]; then
  +        echo "old version: ${ver}.${rev}${typ}${lev}"
  +        while [ 1 ]; do
  +            echo dummy | awk '{ printf("new version: "); }'
  +            read triple
  +            case $triple in
  +                [0-9]*.[0-9]*[sabp.][0-9]* )
  +                    ;;
  +                * ) echo "$msgprefix:Error: invalid version string entered: \`$triple'" 1>&2
  +                    continue
  +                    ;;
  +            esac
  +            break
  +        done
  +        eval `echo $triple |\
  +              sed -e 's%^\([0-9]*\)\.\([0-9]*\)\([sabp.]\)\([0-9]*\)$%\
  +              ver="\1";rev="\2";typ="\3";lev="\4"%'`
  +        tim=calc
  +    fi
  +
  +    #   determine hexadecimal and libtool value of version
  +    case $typ in
  +        a     ) typnum=0;  levnum=$lev ;;
  +        b     ) typnum=1;  levnum=$lev ;;
  +        p | . ) typnum=2;  levnum=$lev ;;
  +        s     ) typnum=15; levnum=255  ;; # snapshots are special
  +    esac
  +    hex=`echo "$ver:$rev:$typnum:$levnum" |\
  +         awk -F: '{ printf("0x%x%02x%1x%02x", $1, $2, $3, $4); }' |\
  +         tr 'abcdef' 'ABCDEF'`
  +    ltv=`echo "$ver:$rev:$typnum:$levnum" |\
  +         awk -F: '{ printf("%d:%d", $1*10 + $2, $3*10 + $4); }'`
  +
  +    #   determine date
  +    if [ ".$tim" = .calc ]; then
  +        day=`date '+%d'`
  +        month=`date '+%m'`
  +        year=`date '+%Y' 2>/dev/null`
  +        if [ ".$time_year" = . ]; then
  +            year=`date '+%y'`
  +            case $year in
  +                [5-9][0-9]) year="19$year" ;;
  +                [0-4][0-9]) year="20$year" ;;
  +            esac
  +        fi
  +        case $month in
  +            1|01) month='Jan' ;;
  +            2|02) month='Feb' ;;
  +            3|03) month='Mar' ;;
  +            4|04) month='Apr' ;;
  +            5|05) month='May' ;;
  +            6|06) month='Jun' ;;
  +            7|07) month='Jul' ;;
  +            8|08) month='Aug' ;;
  +            9|09) month='Sep' ;;
  +              10) month='Oct' ;;
  +              11) month='Nov' ;;
  +              12) month='Dec' ;;
  +        esac
  +        tim="${day}-${month}-${year}"
  +    fi
  +
  +    #   perform result actions
  +    mode=show
  +    if [ ".$opt_i" != . ]; then
  +        mode=edit
  +    elif [ ".$opt_e" = .yes ]; then
  +        mode=edit
  +    elif [ ".$opt_s" != . ]; then
  +        mode=edit
  +    fi
  +    if [ ".$mode" = .show ]; then
  +        #   just display the current version
  +        case $opt_d in
  +            short )
  +                echo "${ver}.${rev}${typ}${lev}"
  +                ;;
  +            long )
  +                echo "${ver}.${rev}${typ}${lev} ($tim)"
  +                ;;
  +            libtool )
  +                echo "${ltv}"
  +                ;;
  +            hex )
  +                echo "${hex}"
  +                ;;
  +            * ) echo "$msgprefix:Error: invalid argument to option \`-d': \`$opt_d'" 1>&2
  +                shtool_exit 1
  +                ;;
  +        esac
  +    else
  +        #   update the version file
  +
  +        #   pre-generate various strings
  +        triple="${ver}.${rev}${typ}${lev}"
  +        vHex="$hex"
  +        vShort="${triple}"
  +        vLong="${triple} (${tim})"
  +        vTeX="This is ${name}, Version ${triple} (${tim})"
  +        vGNU="${name} ${triple} (${tim})"
  +        vWeb="${name}/${triple}"
  +        vSCCS="@(#)${name} ${triple} (${tim})"
  +        vRCS="\$Id: shtool,v 1.2 2004/09/11 15:18:56 rse Exp ${name} ${triple} (${tim}) \$"
  +
  +        #   determine string out of filename
  +        #   (do NOT try to optimize this in any way because of portability)
  +        filestr=`echo $file |\
  +                 tr 'abcdefghijklmnopqrstuvwxyz./%+' \
  +                    'ABCDEFGHIJKLMNOPQRSTUVWXYZ____' | sed -e 's/-/_/g'`
  +
  +        #   generate uppercase prefix
  +        prefixupper=`echo $prefix |\
  +                     tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
  +
  +        #   create the version file according the the selected language
  +        echo "new version: ${vLong}"
  +
  +        cp /dev/null $file
  +        case $opt_l in
  +            txt )
  +                echo >>$file ""
  +                echo >>$file "  ${file} -- Version Information for ${name} (syntax: Text)"
  +                echo >>$file "  [automatically generated and maintained by GNU shtool]"
  +                echo >>$file ""
  +                echo >>$file "  $vTeX"
  +                echo >>$file ""
  +                ;;
  +            c )
  +                echo >>$file "/*"
  +                echo >>$file "**  ${file} -- Version Information for ${name} (syntax: C/C++)"
  +                echo >>$file "**  [automatically generated and maintained by GNU shtool]"
  +                echo >>$file "*/"
  +                echo >>$file ""
  +                echo >>$file "#ifdef _${filestr}_AS_HEADER_"
  +                echo >>$file ""
  +                echo >>$file "#ifndef _${filestr}_"
  +                echo >>$file "#define _${filestr}_"
  +                echo >>$file ""
  +                echo >>$file "#define ${prefixupper}VERSION ${vHex}"
  +                echo >>$file ""
  +                echo >>$file "typedef struct {"
  +                echo >>$file "    const int   v_hex;"
  +                echo >>$file "    const char *v_short;"
  +                echo >>$file "    const char *v_long;"
  +                echo >>$file "    const char *v_tex;"
  +                echo >>$file "    const char *v_gnu;"
  +                echo >>$file "    const char *v_web;"
  +                echo >>$file "    const char *v_sccs;"
  +                echo >>$file "    const char *v_rcs;"
  +                echo >>$file "} ${prefix}version_t;"
  +                echo >>$file ""
  +                echo >>$file "extern ${prefix}version_t ${prefix}version;"
  +                echo >>$file ""
  +                echo >>$file "#endif /* _${filestr}_ */"
  +                echo >>$file ""
  +                echo >>$file "#else /* _${filestr}_AS_HEADER_ */"
  +                echo >>$file ""
  +                echo >>$file "#define _${filestr}_AS_HEADER_"
  +                echo >>$file "#include \"${file}\""
  +                echo >>$file "#undef  _${filestr}_AS_HEADER_"
  +                echo >>$file ""
  +                echo >>$file "${prefix}version_t ${prefix}version = {"
  +                echo >>$file "    ${vHex},"
  +                echo >>$file "    \"${vShort}\","
  +                echo >>$file "    \"${vLong}\","
  +                echo >>$file "    \"${vTeX}\","
  +                echo >>$file "    \"${vGNU}\","
  +                echo >>$file "    \"${vWeb}\","
  +                echo >>$file "    \"${vSCCS}\","
  +                echo >>$file "    \"${vRCS}\""
  +                echo >>$file "};"
  +                echo >>$file ""
  +                echo >>$file "#endif /* _${filestr}_AS_HEADER_ */"
  +                echo >>$file ""
  +                ;;
  +            m4 )
  +                echo >>$file "##"
  +                echo >>$file "##  ${file} -- Version Information for ${name} (syntax: M4)"
  +                echo >>$file "##  [automatically generated and maintained by GNU shtool]"
  +                echo >>$file "##"
  +                echo >>$file ""
  +                echo >>$file "m4_define([v_hex],   [${vHex}])"
  +                echo >>$file "m4_define([v_short], [${vShort}])"
  +                echo >>$file "m4_define([v_long],  [${vLong}])"
  +                echo >>$file "m4_define([v_tex],   [${vTeX}])"
  +                echo >>$file "m4_define([v_gnu],   [${vGNU}])"
  +                echo >>$file "m4_define([v_web],   [${vWeb}])"
  +                echo >>$file "m4_define([v_sccs],  [${vSCCS}])"
  +                echo >>$file "m4_define([v_rcs],   [${vRCS}])"
  +                echo >>$file ""
  +                ;;
  +            perl )
  +                echo >>$file "##"
  +                echo >>$file "##  ${file} -- Version Information for ${name} (syntax: Perl)"
  +                echo >>$file "##  [automatically generated and maintained by GNU shtool]"
  +                echo >>$file "##"
  +                echo >>$file ""
  +                echo >>$file "my \$${prefix}version = {"
  +                echo >>$file "    'v_hex'   => ${vHex},"
  +                echo >>$file "    'v_short' => \"${vShort}\","
  +                echo >>$file "    'v_long'  => \"${vLong}\","
  +                echo >>$file "    'v_tex'   => \"${vTeX}\","
  +                echo >>$file "    'v_gnu'   => \"${vGNU}\","
  +                echo >>$file "    'v_web'   => \"${vWeb}\","
  +                echo >>$file "    'v_sccs'  => \"${vSCCS}\","
  +                echo >>$file "    'v_rcs'   => \"\\${vRCS}/\""
  +                echo >>$file "};"
  +                echo >>$file ""
  +                echo >>$file "1;"
  +                echo >>$file ""
  +                ;;
  +            python )
  +                echo >>$file "##"
  +                echo >>$file "##  ${file} -- Version Information for ${name} (syntax: Python)"
  +                echo >>$file "##  [automatically generated and maintained by GNU shtool]"
  +                echo >>$file "##"
  +                echo >>$file ""
  +                echo >>$file "class ${prefix}version:"
  +                echo >>$file "    v_hex       = ${vHex}"
  +                echo >>$file "    v_short     = \"${vShort}\""
  +                echo >>$file "    v_long      = \"${vLong}\""
  +                echo >>$file "    v_tex       = \"${vTeX}\""
  +                echo >>$file "    v_gnu       = \"${vGNU}\""
  +                echo >>$file "    v_web       = \"${vWeb}\""
  +                echo >>$file "    v_sccs      = \"${vSCCS}\""
  +                echo >>$file "    v_rcs       = \"${vRCS}\""
  +                echo >>$file ""
  +                ;;
  +            * ) echo "$msgprefix:Error: invalid argument to option \`-l': \`$opt_l'" 1>&2
  +                shtool_exit 1
  +                ;;
  +        esac
  +    fi
  +
  +    shtool_exit 0
  +    ;;
  +
  +path )
  +    ##
  +    ##  path -- Deal with program paths
  +    ##  Copyright (c) 1998-2004 Ralf S. Engelschall <rse@engelschall.com>
  +    ##
  +
  +    namelist="$*"
  +
  +    #   check whether the test command supports the -x option
  +    if [ -x /bin/sh ] 2>/dev/null; then
  +        minusx="-x"
  +    else
  +        minusx="-r"
  +    fi
  +
  +    #   split path string
  +    paths="`echo $opt_p |\
  +            sed -e 's/^:/.:/' \
  +                -e 's/::/:.:/g' \
  +                -e 's/:$/:./' \
  +                -e 's/:/ /g'`"
  +
  +    #   SPECIAL REQUEST
  +    #   translate forward to reverse path
  +    if [ ".$opt_r" = .yes ]; then
  +        if [ "x$namelist" = "x." ]; then
  +            rp='.'
  +        else
  +            rp=''
  +            for pe in `IFS="$IFS/"; echo $namelist`; do
  +                rp="../$rp"
  +            done
  +        fi
  +        echo $rp | sed -e 's:/$::'
  +        shtool_exit 0
  +    fi
  +
  +    #   SPECIAL REQUEST
  +    #   strip out directory or base name
  +    if [ ".$opt_d" = .yes ]; then
  +        echo "$namelist" |\
  +        sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;'
  +        shtool_exit 0
  +    fi
  +    if [ ".$opt_b" = .yes ]; then
  +        echo "$namelist" |\
  +        sed -e 's;.*/\([^/]*\)$;\1;'
  +        shtool_exit 0
  +    fi
  +
  +    #   MAGIC SITUATION
  +    #   Perl Interpreter (perl)
  +    if [ ".$opt_m" = .yes ] && [ ".$namelist" = .perl ]; then
  +        rm -f $tmpfile >/dev/null 2>&1
  +        touch $tmpfile
  +        found=0
  +        pc=99
  +        for dir in $paths; do
  +            dir=`echo $dir | sed -e 's;/*$;;'`
  +            nc=99
  +            for name in perl perl5 miniperl; do
  +                 if [ $minusx "$dir/$name" ] && [ ! -d "$dir/$name" ]; then
  +                     perl="$dir/$name"
  +                     pv=`$perl -e 'printf("%.3f", $]);'`
  +                     echo "$pv:$pc:$nc:$perl" >>$tmpfile
  +                     found=1
  +                 fi
  +                 nc=`expr $nc - 1`
  +            done
  +            pc=`expr $pc - 1`
  +        done
  +        if [ $found = 1 ]; then
  +            perl="`cat $tmpfile | sort -r -u | sed -e 'q' | cut -d: -f4`"
  +            rm -f $tmpfile >/dev/null 2>&1
  +            echo "$perl"
  +            shtool_exit 0
  +        fi
  +        rm -f $tmpfile >/dev/null 2>&1
  +        shtool_exit 1
  +    fi
  +
  +    #   MAGIC SITUATION
  +    #   C pre-processor (cpp)
  +    if [ ".$opt_m" = .yes ] && [ ".$namelist" = .cpp ]; then
  +        echo >$tmpfile.c "#include <assert.h>"
  +        echo >>$tmpfile.c "Syntax Error"
  +        #   1. try the standard cc -E approach
  +        cpp="${CC-cc} -E"
  +        (eval "$cpp $tmpfile.c >/dev/null") 2>$tmpfile.out
  +        my_error=`grep -v '^ *+' $tmpfile.out`
  +        if [ ".$my_error" != . ]; then
  +            #   2. try the cc -E approach and GCC's -traditional-ccp option
  +            cpp="${CC-cc} -E -traditional-cpp"
  +            (eval "$cpp $tmpfile.c >/dev/null") 2>$tmpfile.out
  +            my_error=`grep -v '^ *+' $tmpfile.out`
  +            if [ ".$my_error" != . ]; then
  +                #   3. try a standalone cpp command in path and lib dirs
  +                for path in $paths /lib /usr/lib /usr/local/lib; do
  +                    path=`echo $path | sed -e 's;/*$;;'`
  +                    if [ $minusx "$path/cpp" ] && [ ! -d "$path/cpp" ]; then
  +                        cpp="$path/cpp"
  +                        break
  +                    fi
  +                done
  +                if [ ".$cpp" != . ]; then
  +                    (eval "$cpp $tmpfile.c >/dev/null") 2>$tmpfile.out
  +                    my_error=`grep -v '^ *+' $tmpfile.out`
  +                    if [ ".$my_error" != . ]; then
  +                        #   ok, we gave up...
  +                        cpp=''
  +                    fi
  +                fi
  +            fi
  +        fi
  +        rm -f $tmpfile >/dev/null 2>&1
  +        rm -f $tmpfile.c $tmpfile.out >/dev/null 2>&1
  +        if [ ".$cpp" != . ]; then
  +            echo "$cpp"
  +            shtool_exit 0
  +        fi
  +        shtool_exit 1
  +    fi
  +
  +    #   STANDARD SITUATION
  +    #   iterate over names
  +    for name in $namelist; do
  +        #   iterate over paths
  +        for path in $paths; do
  +            path=`echo $path | sed -e 's;/*$;;'`
  +            if [ $minusx "$path/$name" ] && [ ! -d "$path/$name" ]; then
  +                if [ ".$opt_s" != .yes ]; then
  +                    echo "$path/$name"
  +                fi
  +                shtool_exit 0
  +            fi
  +        done
  +    done
  +
  +    shtool_exit 1
       ;;
  +
   esac
   
  -##EOF##
  +shtool_exit 0
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect.1
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 iselect.1
  --- ossp-pkg/iselect/iselect.1	25 Jul 2000 11:53:24 -0000	1.2
  +++ ossp-pkg/iselect/iselect.1	11 Sep 2004 15:18:49 -0000	1.3
  @@ -1,12 +1,8 @@
  -.rn '' }`
  -''' $RCSfile: iselect.1,v $$Revision: 1.2 $$Date: 2000/07/25 11:53:24 $
  -'''
  -''' $Log: iselect.1,v $
  -''' Revision 1.2  2000/07/25 11:53:24  rse
  -''' Merge in pending changes
  -'''
  -'''
  -.de Sh
  +.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
  +.\"
  +.\" Standard preamble:
  +.\" ========================================================================
  +.de Sh \" Subsection heading
   .br
   .if t .Sp
   .ne 5
  @@ -14,150 +10,98 @@
   \fB\\$1\fR
   .PP
   ..
  -.de Sp
  +.de Sp \" Vertical space (when we can't use .PP)
   .if t .sp .5v
   .if n .sp
   ..
  -.de Ip
  -.br
  -.ie \\n(.$>=3 .ne \\$3
  -.el .ne 3
  -.IP "\\$1" \\$2
  -..
  -.de Vb
  +.de Vb \" Begin verbatim text
   .ft CW
   .nf
   .ne \\$1
   ..
  -.de Ve
  +.de Ve \" End verbatim text
   .ft R
  -
   .fi
   ..
  -'''
  -'''
  -'''     Set up \*(-- to give an unbreakable dash;
  -'''     string Tr holds user defined translation string.
  -'''     Bell System Logo is used as a dummy character.
  -'''
  +.\" Set up some character translations and predefined strings.  \*(-- will
  +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
  +.\" double quote, and \*(R" will give a right double quote.  | will give a
  +.\" real vertical bar.  \*(C+ will give a nicer C++.  Capital omega is used to
  +.\" do unbreakable dashes and therefore won't be available.  \*(C` and \*(C'
  +.\" expand to `' in nroff, nothing in troff, for use with C<>.
   .tr \(*W-|\(bv\*(Tr
  +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
   .ie n \{\
  -.ds -- \(*W-
  -.ds PI pi
  -.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
  -.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
  -.ds L" ""
  -.ds R" ""
  -'''   \*(M", \*(S", \*(N" and \*(T" are the equivalent of
  -'''   \*(L" and \*(R", except that they are used on ".xx" lines,
  -'''   such as .IP and .SH, which do another additional levels of
  -'''   double-quote interpretation
  -.ds M" """
  -.ds S" """
  -.ds N" """""
  -.ds T" """""
  -.ds L' '
  -.ds R' '
  -.ds M' '
  -.ds S' '
  -.ds N' '
  -.ds T' '
  +.    ds -- \(*W-
  +.    ds PI pi
  +.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
  +.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
  +.    ds L" ""
  +.    ds R" ""
  +.    ds C` ""
  +.    ds C' ""
   'br\}
   .el\{\
  -.ds -- \(em\|
  -.tr \*(Tr
  -.ds L" ``
  -.ds R" ''
  -.ds M" ``
  -.ds S" ''
  -.ds N" ``
  -.ds T" ''
  -.ds L' `
  -.ds R' '
  -.ds M' `
  -.ds S' '
  -.ds N' `
  -.ds T' '
  -.ds PI \(*p
  +.    ds -- \|\(em\|
  +.    ds PI \(*p
  +.    ds L" ``
  +.    ds R" ''
   'br\}
  -.\"	If the F register is turned on, we'll generate
  -.\"	index entries out stderr for the following things:
  -.\"		TH	Title 
  -.\"		SH	Header
  -.\"		Sh	Subsection 
  -.\"		Ip	Item
  -.\"		X<>	Xref  (embedded
  -.\"	Of course, you have to process the output yourself
  -.\"	in some meaninful fashion.
  -.if \nF \{
  -.de IX
  -.tm Index:\\$1\t\\n%\t"\\$2"
  +.\"
  +.\" If the F register is turned on, we'll generate index entries on stderr for
  +.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
  +.\" entries marked with X<> in POD.  Of course, you'll have to process the
  +.\" output yourself in some meaningful fashion.
  +.if \nF \{\
  +.    de IX
  +.    tm Index:\\$1\t\\n%\t"\\$2"
   ..
  -.nr % 0
  -.rr F
  +.    nr % 0
  +.    rr F
   .\}
  -.TH ISELECT 1 "EN" "22/Jun/1999" "Ralf S. Engelschall"
  -.UC
  -.if n .hy 0
  +.\"
  +.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  +.\" way too many mistakes in technical documents.
  +.hy 0
   .if n .na
  -.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
  -.de CQ          \" put $1 in typewriter font
  -.ft CW
  -'if n "\c
  -'if t \\&\\$1\c
  -'if n \\&\\$1\c
  -'if n \&"
  -\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
  -'.ft R
  -..
  -.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
  -.	\" AM - accent mark definitions
  -.bd B 3
  -.	\" fudge factors for nroff and troff
  +.\"
  +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
  +.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
  +.    \" fudge factors for nroff and troff
   .if n \{\
  -.	ds #H 0
  -.	ds #V .8m
  -.	ds #F .3m
  -.	ds #[ \f1
  -.	ds #] \fP
  +.    ds #H 0
  +.    ds #V .8m
  +.    ds #F .3m
  +.    ds #[ \f1
  +.    ds #] \fP
   .\}
   .if t \{\
  -.	ds #H ((1u-(\\\\n(.fu%2u))*.13m)
  -.	ds #V .6m
  -.	ds #F 0
  -.	ds #[ \&
  -.	ds #] \&
  +.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
  +.    ds #V .6m
  +.    ds #F 0
  +.    ds #[ \&
  +.    ds #] \&
   .\}
  -.	\" simple accents for nroff and troff
  +.    \" simple accents for nroff and troff
   .if n \{\
  -.	ds ' \&
  -.	ds ` \&
  -.	ds ^ \&
  -.	ds , \&
  -.	ds ~ ~
  -.	ds ? ?
  -.	ds ! !
  -.	ds /
  -.	ds q
  +.    ds ' \&
  +.    ds ` \&
  +.    ds ^ \&
  +.    ds , \&
  +.    ds ~ ~
  +.    ds /
   .\}
   .if t \{\
  -.	ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
  -.	ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
  -.	ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
  -.	ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
  -.	ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
  -.	ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
  -.	ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
  -.	ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
  -.	ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
  +.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
  +.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
  +.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
  +.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
  +.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
  +.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
   .\}
  -.	\" troff and (daisy-wheel) nroff accents
  +.    \" troff and (daisy-wheel) nroff accents
   .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
   .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
  -.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
  -.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
  -.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
  -.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
   .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
   .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
   .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
  @@ -165,64 +109,65 @@
   .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
   .ds ae a\h'-(\w'a'u*4/10)'e
   .ds Ae A\h'-(\w'A'u*4/10)'E
  -.ds oe o\h'-(\w'o'u*4/10)'e
  -.ds Oe O\h'-(\w'O'u*4/10)'E
  -.	\" corrections for vroff
  +.    \" corrections for vroff
   .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
   .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
  -.	\" for low resolution devices (crt and lpr)
  +.    \" for low resolution devices (crt and lpr)
   .if \n(.H>23 .if \n(.V>19 \
   \{\
  -.	ds : e
  -.	ds 8 ss
  -.	ds v \h'-1'\o'\(aa\(ga'
  -.	ds _ \h'-1'^
  -.	ds . \h'-1'.
  -.	ds 3 3
  -.	ds o a
  -.	ds d- d\h'-1'\(ga
  -.	ds D- D\h'-1'\(hy
  -.	ds th \o'bp'
  -.	ds Th \o'LP'
  -.	ds ae ae
  -.	ds Ae AE
  -.	ds oe oe
  -.	ds Oe OE
  +.    ds : e
  +.    ds 8 ss
  +.    ds o a
  +.    ds d- d\h'-1'\(ga
  +.    ds D- D\h'-1'\(hy
  +.    ds th \o'bp'
  +.    ds Th \o'LP'
  +.    ds ae ae
  +.    ds Ae AE
   .\}
   .rm #[ #] #H #V #F C
  +.\" ========================================================================
  +.\"
  +.IX Title "ISELECT 1"
  +.TH ISELECT 1 "2004-09-11" "EN" "Ralf S. Engelschall"
   .SH "NAME"
  -iSelect -- Interactive Selection Tool
  +iSelect \-\- Interactive Selection Tool
   .SH "SYNOPSIS"
  -\fBiselect\fR
  -[\fB\-d\fR \fISTR\fR,\fISTR\fR]
  +.IX Header "SYNOPSIS"
  +\&\fBiselect\fR
  +[\fB\-d\fR \fI\s-1STR\s0\fR,\fI\s-1STR\s0\fR]
   [\fB\-c\fR]
   [\fB\-f\fR]
   [\fB\-a\fR]
   [\fB\-e\fR]
  -[\fB\-p\fR \fINUM\fR]
  -[\fB\-k\fR \fIKEY\fR[:\fIOKEY\fR]]
  +[\fB\-p\fR \fI\s-1NUM\s0\fR]
  +[\fB\-k\fR \fI\s-1KEY\s0\fR[:\fI\s-1OKEY\s0\fR]]
   [\fB\-m\fR]
  -[\fB\-n\fR \fISTR\fR]
  -[\fB\-t\fR \fISTR\fR]
  +[\fB\-n\fR \fI\s-1STR\s0\fR]
  +[\fB\-t\fR \fI\s-1STR\s0\fR]
   [\fB\-S\fR]
   [\fB\-K\fR]
   [\fB\-P\fR]
  -[\fB\-Q\fR \fISTR\fR]
  +[\fB\-Q\fR \fI\s-1STR\s0\fR]
   [\fIline1\fR \fIline2\fR ...]
   .PP
  -\fBiselect\fR
  +\&\fBiselect\fR
   [\fB\-V\fR]
   .SH "VERSION"
  -1.2.0 (31-Mar-1999)
  +.IX Header "VERSION"
  +1.2.1 (25\-Jul\-2000)
   .SH "DESCRIPTION"
  +.IX Header "DESCRIPTION"
   .Sh "Intend"
  +.IX Subsection "Intend"
   iSelect is an interactive line selection tool for \s-1ASCII\s0 files, operating via a
   full-screen Curses-based terminal session. It can be used either as an user
  -interface frontend controlled by a Bourne-Shell, Perl or other type of script
  +interface frontend controlled by a Bourne\-Shell, Perl or other type of script
   backend as its wrapper or in batch as a pipe filter (usually between \fIgrep\fR
   and the final executing command). In other words: iSelect was designed to be
   used for any types of interactice line-based selections.
   .Sh "Input Data"
  +.IX Subsection "Input Data"
   Input is read either from the command line (\fIline1\fR \fIline2\fR ...) where each
   argument corresponds to one buffer line or from \fIstdin\fR (when no arguments
   are given) where the buffer lines are determined according to the newline
  @@ -230,87 +175,111 @@
   .PP
   You can additionally let substrings displayed in Bold mode for non-selectable
   lines (because the selectable lines are always displayed bold) by using the
  -construct ``\f(CW<b>\fR...\f(CW</b>\fR'\*(R' as in \s-1HTML\s0.
  +construct ``\f(CW\*(C`<b>\*(C'\fR...\f(CW\*(C`</b>\*(C'\fR'' as in \s-1HTML\s0.
   .Sh "Selections"
  +.IX Subsection "Selections"
   The selection is either just a single line (default) or multiple lines (option
  -\fB\-m\fR). Per default no lines are selectable. If a line contains the string
  -``\f(CW<s>\fR'\*(R' (or a string with different delimiters configured via
  +\&\fB\-m\fR). Per default no lines are selectable. If a line contains the string
  +``\f(CW\*(C`<s>\*(C'\fR'' (or a string with different delimiters configured via
   option \fB\-d\fR) at any position this string is stripped and the line is
   selectable. Its result (printed to \fIstdout\fR) is the line contents itself (but
  -without the ``\f(CW<s>\fR'\*(R' string of course). If option \fB\-a\fR is used all
  +without the ``\f(CW\*(C`<s>\*(C'\fR'' string of course). If option \fB\-a\fR is used all
   lines are selectable and their result is again the line itself, i.e. using
  -option \fB\-a\fR is the same as adding ``\f(CW<s>\fR'\*(R' to every line of the
  +option \fB\-a\fR is the same as adding ``\f(CW\*(C`<s>\*(C'\fR'' to every line of the
   input data.  When you want a specific result (i.e. not just the line contents
  -itself), you have to use the special variant ``\f(CW<s:result text>\fR'\*(R'
  -which results in the output ``\f(CWresult text\fR'\*(R' when the corresponding line is
  +itself), you have to use the special variant ``\f(CW\*(C`<s:result text>\*(C'\fR''
  +which results in the output ``\f(CW\*(C`result text\*(C'\fR'' when the corresponding line is
   selected.
   .PP
  -When you use a specific result via ``\f(CW<s:result text>\fR'\*(R' the \fIresult
  -text\fR can contain ``\f(CW%[query text]s\fR'\*(R' and ``\f(CW%[query text]S\fR'\*(R'
  +When you use a specific result via ``\f(CW\*(C`<s:result text>\*(C'\fR'' the \fIresult
  +text\fR can contain ``\f(CW\*(C`%[query text]s\*(C'\fR'' and ``\f(CW\*(C`%[query text]S\*(C'\fR''
   constructs. For every such construct an interactive query is done and the
  -result replaces the construct.  The ``\f(CW%[query text]S\fR'\*(R' construct is like
  -``\f(CW%[query text]s\fR'\*(R' except that the empty string as the query result is not
  +result replaces the construct.  The ``\f(CW\*(C`%[query text]S\*(C'\fR'' construct is like
  +``\f(CW\*(C`%[query text]s\*(C'\fR'' except that the empty string as the query result is not
   accepted on input.
   .PP
   The Curses-based full-screen selection is always done via \fI/dev/tty\fR, because
   the \fIstdin\fR and \fIstdout\fR filehandles are usually tied to the input and
   output data streams.
   .Sh "Output Data"
  -The output is the line itself or the string given with ``\f(CW<s:result
  -text>\fR'\*(R'.  When multiple line selection mode (option \fB\-m\fR) is used the
  +.IX Subsection "Output Data"
  +The output is the line itself or the string given with ``\f(CW\*(C`<s:result
  +text>\*(C'\fR''.  When multiple line selection mode (option \fB\-m\fR) is used the
   output is all selected lines theirself or their configured result strings.
   Output always is written to \fIstdout\fR.
   .SH "OPTIONS"
  +.IX Header "OPTIONS"
   .Sh "Input Options"
  +.IX Subsection "Input Options"
   These options control how \fIiSelect\fR parses its input.
  -.Ip "\fB\-d\fR \fI\s-1STR\s0\fR, \fB--delimiter=\fR\fI\s-1STR\s0\fR" 4
  -Sets the delimiters for the selection tags. The default is `\f(CW<,>\fR\*(R',
  -i.e. the selection tags have to read ``\f(CW<s>\fR'\*(R' and ``\f(CW<s:result
  -text>\fR'\*(R'
  -.Ip "\fB\-c\fR, \fB--strip-comments\fR" 4
  +.IP "\fB\-d\fR \fI\s-1STR\s0\fR, \fB\-\-delimiter=\fR\fI\s-1STR\s0\fR" 4
  +.IX Item "-d STR, --delimiter=STR"
  +Sets the delimiters for the selection tags. The default is `\f(CW\*(C`<,>\*(C'\fR',
  +i.e. the selection tags have to read ``\f(CW\*(C`<s>\*(C'\fR'' and ``\f(CW\*(C`<s:result
  +text>\*(C'\fR''
  +.IP "\fB\-c\fR, \fB\-\-strip\-comments\fR" 4
  +.IX Item "-c, --strip-comments"
   Strips all sharp comment lines from the input buffer before parsing.
  -.Ip "\fB\-f\fR, \fB--force-browse\fR" 4
  +.IP "\fB\-f\fR, \fB\-\-force\-browse\fR" 4
  +.IX Item "-f, --force-browse"
   Browse always, i.e. even when the input buffer contains no or only one line.
  -.Ip "\fB\-a\fR, \fB--all-select\fR" 4
  +.IP "\fB\-a\fR, \fB\-\-all\-select\fR" 4
  +.IX Item "-a, --all-select"
   Force all lines to be selectable.
  -.Ip "\fB\-e\fR, \fB--exit-no-select\fR" 4
  +.IP "\fB\-e\fR, \fB\-\-exit\-no\-select\fR" 4
  +.IX Item "-e, --exit-no-select"
   Exit immediately if no lines are selectable. In this case not even the Curses
   screen is initialized.
   .Sh "Display Options"
  -.Ip "\fB\-p\fR \fI\s-1NUM\s0\fR, \fB--position=\fR\fI\s-1NUM\s0\fR" 4
  +.IX Subsection "Display Options"
  +.IP "\fB\-p\fR \fI\s-1NUM\s0\fR, \fB\-\-position=\fR\fI\s-1NUM\s0\fR" 4
  +.IX Item "-p NUM, --position=NUM"
   Sets the cursor position to line \fI\s-1NUM\s0\fR.
  -.Ip "\fB\-k\fR \fI\s-1KEY\s0\fR[:\fI\s-1OKEY\s0\fR], \fB--key=\fR\fI\s-1KEY\s0[:\fI\s-1OKEY\s0\fR]\fR" 4
  -Defines an additional input key. Per default \fI\s-1OKEY\s0\fR is \f(CWRETURN\fR, i.e.  for
  -instance \fB\-kf\fR defines another selection key `\f(CWf\fR\*(R'.
  -.Ip "\fB\-m\fR, \fB--multi-line\fR" 4
  +.IP "\fB\-k\fR \fI\s-1KEY\s0\fR[:\fI\s-1OKEY\s0\fR], \fB\-\-key=\fR\fIKEY[:\fI\s-1OKEY\s0\fI]\fR" 4
  +.IX Item "-k KEY[:OKEY], --key=KEY[:OKEY]"
  +Defines an additional input key. Per default \fI\s-1OKEY\s0\fR is \f(CW\*(C`RETURN\*(C'\fR, i.e.  for
  +instance \fB\-kf\fR defines another selection key `\f(CW\*(C`f\*(C'\fR'.
  +.IP "\fB\-m\fR, \fB\-\-multi\-line\fR" 4
  +.IX Item "-m, --multi-line"
   Enable multi-line selection where you can select more then one line via \s-1SPACE\s0
   key.
  -.Ip "\fB\-n\fR \fI\s-1STR\s0\fR, \fB--name=\fR\fI\s-1STR\s0\fR" 4
  +.IP "\fB\-n\fR \fI\s-1STR\s0\fR, \fB\-\-name=\fR\fI\s-1STR\s0\fR" 4
  +.IX Item "-n STR, --name=STR"
   Sets the name string, displayed flush left at the bottom of the
   browser window.
  -.Ip "\fB\-t\fR \fI\s-1STR\s0\fR, \fB--title=\fR\fI\s-1STR\s0\fR" 4
  +.IP "\fB\-t\fR \fI\s-1STR\s0\fR, \fB\-\-title=\fR\fI\s-1STR\s0\fR" 4
  +.IX Item "-t STR, --title=STR"
   Sets the title bar string, displayed centered at the bottom of the
   browser window.
   .Sh "Output Options"
  -.Ip "\fB\-S\fR, \fB--strip-result\fR" 4
  +.IX Subsection "Output Options"
  +.IP "\fB\-S\fR, \fB\-\-strip\-result\fR" 4
  +.IX Item "-S, --strip-result"
   Strip all leading and trailing whitespaces from the result string.
  -.Ip "\fB\-K\fR, \fB--key-result\fR" 4
  +.IP "\fB\-K\fR, \fB\-\-key\-result\fR" 4
  +.IX Item "-K, --key-result"
   Prefix the result string (given on \fIstdout\fR) with the corresponding selection
  -key which was used. This usually is \f(CWRETURN\fR or \f(CWKEY_RIGHT\fR but can be any
  +key which was used. This usually is \f(CW\*(C`RETURN\*(C'\fR or \f(CW\*(C`KEY_RIGHT\*(C'\fR but can be any
   of the additional keys defined by option \fB\-k\fR.  When you use \fB\-kf\fR and
  -select a line \f(CWFoo Bar\fR with key `\f(CWf\fR\*(R' the result string is ``\f(CWf:Foo
  -Bar\fR'\*(R'.
  -.Ip "\fB\-P\fR, \fB--position-result\fR" 4
  +select a line \f(CW\*(C`Foo Bar\*(C'\fR with key `\f(CW\*(C`f\*(C'\fR' the result string is ``\f(CW\*(C`f:Foo
  +Bar\*(C'\fR''.
  +.IP "\fB\-P\fR, \fB\-\-position\-result\fR" 4
  +.IX Item "-P, --position-result"
   Prefix the result string (given on \fIstdout\fR) with the corresponding cursor
   position followed by a colon. When you selected line \fIN\fR and this line has
  -the result \f(CWFoo Bar\fR configured the result string is ``\f(CWN:Foo Bar\fR'\*(R'.
  -.Ip "\fB\-Q\fR \fI\s-1STR\s0\fR, \fB--quit-result=\fR\fI\s-1STR\s0\fR" 4
  +the result \f(CW\*(C`Foo Bar\*(C'\fR configured the result string is ``\f(CW\*(C`N:Foo Bar\*(C'\fR''.
  +.IP "\fB\-Q\fR \fI\s-1STR\s0\fR, \fB\-\-quit\-result=\fR\fI\s-1STR\s0\fR" 4
  +.IX Item "-Q STR, --quit-result=STR"
   Sets the result string on quit. Default is the empty string.
   .Sh "Giving Feedback"
  -.Ip "\fB\-V\fR, \fB--version\fR" 4
  +.IX Subsection "Giving Feedback"
  +.IP "\fB\-V\fR, \fB\-\-version\fR" 4
  +.IX Item "-V, --version"
   Displays version identification string.
   .SH "KEYSTROKES"
  +.IX Header "KEYSTROKES"
   .Sh "Cursor Movement"
  +.IX Subsection "Cursor Movement"
   Use these to browse through the selection list.
   .PP
   .Vb 6
  @@ -322,6 +291,7 @@
   \&  G ............. Goto last line
   .Ve
   .Sh "Line Selection"
  +.IX Subsection "Line Selection"
   Use these to select one line and exit in standard mode or one or more lines in
   multi-line mode.
   .PP
  @@ -331,6 +301,7 @@
   \&  SPACE ......... Select line and stay (multi-line mode only)
   .Ve
   .Sh "Others"
  +.IX Subsection "Others"
   Use these to quit iSelect or to show its help and
   version page.
   .PP
  @@ -341,9 +312,10 @@
   \&  v ............. Version Page
   .Ve
   .SH "EXAMPLE"
  +.IX Header "EXAMPLE"
   As an example we present a real-life situation where iSelect can enhance an
   existing functionality. We define two Bash functions (for your
  -\fI$HOME/.bashrc\fR file) which enhance the built-in `\fIcd\fR\*(R' command of the
  +\&\fI$HOME/.bashrc\fR file) which enhance the built-in `\fIcd\fR' command of the
   shell.
   .PP
   .Vb 7
  @@ -355,6 +327,7 @@
   \&      sort -u >$HOME/.cdpaths ) &
   \& }
   .Ve
  +.PP
   .Vb 11
   \& #   definition of the enhanced cd command
   \& cd () {
  @@ -368,104 +341,30 @@
   \&     PS1="\eu@\eh:$PWD\en:> "
   \& }
   .Ve
  -This new `\fIcd\fR\*(R' command is compatible with Bashs built-in variant for the case
  +.PP
  +This new `\fIcd\fR' command is compatible with Bashs built-in variant for the case
   where the specified directory actually exists. When it doesn't, the original
  -`\fIcd\fR\*(R' would immediately give an error (assuming we have no \fICDPATH\fR
  +`\fIcd\fR' would immediately give an error (assuming we have no \fI\s-1CDPATH\s0\fR
   variable defined).  Here this enhanced version tries harder. First it searches
   for such a directory in a previously built (via \fIcds\fR) \fI$HOME/.cdpaths\fR
   files. When no line was found, iSelect just returns the given directory as the
  -default result and `\fIcd\fR\*(R' then fails as usual with an error message. When
  +default result and `\fIcd\fR' then fails as usual with an error message. When
   only one directory was found, iSelect directly results this particular line to
  -`\fIcd\fR\*(R'. And only when more then one directory was found, iSelect opens its
  +`\fIcd\fR'. And only when more then one directory was found, iSelect opens its
   Curses-based selection screen and lets the user choose interactively between
  -those directories. The chosen directory is then finally given to `\fIcd\fR\*(R'.
  +those directories. The chosen directory is then finally given to `\fIcd\fR'.
   .PP
   For more useful examples on how to use iSelect, see the \fIcontrib/\fR directory
   of the iSelect distribution tarball.
   .SH "AUTHOR"
  -.PP
  +.IX Header "AUTHOR"
   .Vb 3
   \&  Ralf S. Engelschall
   \&  rse@engelschall.com
   \&  www.engelschall.com
   .Ve
   .SH "SEE ALSO"
  -.PP
  +.IX Header "SEE ALSO"
   .Vb 1
   \&  iSelect Home: http://www.engelschall.com/sw/iselect/
   .Ve
  -
  -.rn }` ''
  -.IX Title "ISELECT 1"
  -.IX Name "iSelect - Interactive Selection Tool"
  -
  -.IX Header "NAME"
  -
  -.IX Header "SYNOPSIS"
  -
  -.IX Header "VERSION"
  -
  -.IX Header "DESCRIPTION"
  -
  -.IX Subsection "Intend"
  -
  -.IX Subsection "Input Data"
  -
  -.IX Subsection "Selections"
  -
  -.IX Subsection "Output Data"
  -
  -.IX Header "OPTIONS"
  -
  -.IX Subsection "Input Options"
  -
  -.IX Item "\fB\-d\fR \fI\s-1STR\s0\fR, \fB--delimiter=\fR\fI\s-1STR\s0\fR"
  -
  -.IX Item "\fB\-c\fR, \fB--strip-comments\fR"
  -
  -.IX Item "\fB\-f\fR, \fB--force-browse\fR"
  -
  -.IX Item "\fB\-a\fR, \fB--all-select\fR"
  -
  -.IX Item "\fB\-e\fR, \fB--exit-no-select\fR"
  -
  -.IX Subsection "Display Options"
  -
  -.IX Item "\fB\-p\fR \fI\s-1NUM\s0\fR, \fB--position=\fR\fI\s-1NUM\s0\fR"
  -
  -.IX Item "\fB\-k\fR \fI\s-1KEY\s0\fR[:\fI\s-1OKEY\s0\fR], \fB--key=\fR\fI\s-1KEY\s0[:\fI\s-1OKEY\s0\fR]\fR"
  -
  -.IX Item "\fB\-m\fR, \fB--multi-line\fR"
  -
  -.IX Item "\fB\-n\fR \fI\s-1STR\s0\fR, \fB--name=\fR\fI\s-1STR\s0\fR"
  -
  -.IX Item "\fB\-t\fR \fI\s-1STR\s0\fR, \fB--title=\fR\fI\s-1STR\s0\fR"
  -
  -.IX Subsection "Output Options"
  -
  -.IX Item "\fB\-S\fR, \fB--strip-result\fR"
  -
  -.IX Item "\fB\-K\fR, \fB--key-result\fR"
  -
  -.IX Item "\fB\-P\fR, \fB--position-result\fR"
  -
  -.IX Item "\fB\-Q\fR \fI\s-1STR\s0\fR, \fB--quit-result=\fR\fI\s-1STR\s0\fR"
  -
  -.IX Subsection "Giving Feedback"
  -
  -.IX Item "\fB\-V\fR, \fB--version\fR"
  -
  -.IX Header "KEYSTROKES"
  -
  -.IX Subsection "Cursor Movement"
  -
  -.IX Subsection "Line Selection"
  -
  -.IX Subsection "Others"
  -
  -.IX Header "EXAMPLE"
  -
  -.IX Header "AUTHOR"
  -
  -.IX Header "SEE ALSO"
  -
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect.pod
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 iselect.pod
  --- ossp-pkg/iselect/iselect.pod	25 Jul 2000 11:44:00 -0000	1.2
  +++ ossp-pkg/iselect/iselect.pod	11 Sep 2004 15:18:49 -0000	1.3
  @@ -11,7 +11,7 @@
   ##  
   ##  ======================================================================
   ##
  -##  Copyright (c) 1996-1999 Ralf S. Engelschall.
  +##  Copyright (c) 1997-2004 Ralf S. Engelschall.
   ##
   ##  This program is free software; it may be redistributed and/or
   ##  modified only under the terms of the GNU General Public License, 
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect_browse.c
  ============================================================================
  $ cvs diff -u -r1.1.1.4 -r1.2 iselect_browse.c
  --- ossp-pkg/iselect/iselect_browse.c	31 Mar 1999 06:42:49 -0000	1.1.1.4
  +++ ossp-pkg/iselect/iselect_browse.c	11 Sep 2004 15:18:49 -0000	1.2
  @@ -11,7 +11,7 @@
   **  
   **  ======================================================================
   **
  -**  Copyright (c) 1996-1999 Ralf S. Engelschall.
  +**  Copyright (c) 1997-2004 Ralf S. Engelschall.
   **
   **  This program is free software; it may be redistributed and/or
   **  modified only under the terms of the GNU General Public License, 
  @@ -36,7 +36,7 @@
   #include <signal.h>
   #include <string.h>
   #ifdef USE_NCURSES
  -#include <ncurses.h>
  +#include <ncurses/ncurses.h>
   #endif
   #ifdef USE_SLCURSES
   #include <slcurses.h>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect_browse.h
  ============================================================================
  $ cvs diff -u -r1.1.1.4 -r1.2 iselect_browse.h
  --- ossp-pkg/iselect/iselect_browse.h	31 Mar 1999 06:44:53 -0000	1.1.1.4
  +++ ossp-pkg/iselect/iselect_browse.h	11 Sep 2004 15:18:49 -0000	1.2
  @@ -11,7 +11,7 @@
   **  
   **  ======================================================================
   **
  -**  Copyright (c) 1996-1999 Ralf S. Engelschall.
  +**  Copyright (c) 1997-2004 Ralf S. Engelschall.
   **
   **  This program is free software; it may be redistributed and/or
   **  modified only under the terms of the GNU General Public License, 
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect_getopt.c
  ============================================================================
  $ cvs diff -u -r1.1.1.4 -r1.2 iselect_getopt.c
  --- ossp-pkg/iselect/iselect_getopt.c	31 Mar 1999 06:43:21 -0000	1.1.1.4
  +++ ossp-pkg/iselect/iselect_getopt.c	11 Sep 2004 15:18:49 -0000	1.2
  @@ -11,7 +11,7 @@
   **  
   **  ======================================================================
   **
  -**  Copyright (c) 1996-1999 Ralf S. Engelschall.
  +**  Copyright (c) 1997-2004 Ralf S. Engelschall.
   **
   **  This program is free software; it may be redistributed and/or
   **  modified only under the terms of the GNU General Public License, 
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect_getopt.h
  ============================================================================
  $ cvs diff -u -r1.1.1.2 -r1.2 iselect_getopt.h
  --- ossp-pkg/iselect/iselect_getopt.h	31 Mar 1999 06:45:02 -0000	1.1.1.2
  +++ ossp-pkg/iselect/iselect_getopt.h	11 Sep 2004 15:18:49 -0000	1.2
  @@ -11,7 +11,7 @@
   **  
   **  ======================================================================
   **
  -**  Copyright (c) 1996-1999 Ralf S. Engelschall.
  +**  Copyright (c) 1997-2004 Ralf S. Engelschall.
   **
   **  This program is free software; it may be redistributed and/or
   **  modified only under the terms of the GNU General Public License, 
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect_global.h
  ============================================================================
  $ cvs diff -u -r1.1.1.3 -r1.2 iselect_global.h
  --- ossp-pkg/iselect/iselect_global.h	31 Mar 1999 06:45:08 -0000	1.1.1.3
  +++ ossp-pkg/iselect/iselect_global.h	11 Sep 2004 15:18:49 -0000	1.2
  @@ -11,7 +11,7 @@
   **  
   **  ======================================================================
   **
  -**  Copyright (c) 1996-1999 Ralf S. Engelschall.
  +**  Copyright (c) 1997-2004 Ralf S. Engelschall.
   **
   **  This program is free software; it may be redistributed and/or
   **  modified only under the terms of the GNU General Public License, 
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect_keys.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 iselect_keys.c
  --- ossp-pkg/iselect/iselect_keys.c	25 Jul 2000 11:44:00 -0000	1.2
  +++ ossp-pkg/iselect/iselect_keys.c	11 Sep 2004 15:18:49 -0000	1.3
  @@ -11,7 +11,7 @@
   **  
   **  ======================================================================
   **
  -**  Copyright (c) 1996-1999 Ralf S. Engelschall.
  +**  Copyright (c) 1997-2004 Ralf S. Engelschall.
   **
   **  This program is free software; it may be redistributed and/or
   **  modified only under the terms of the GNU General Public License, 
  @@ -36,7 +36,7 @@
   #include <signal.h>
   #include <string.h>
   #ifdef USE_NCURSES
  -#include <ncurses.h>
  +#include <ncurses/ncurses.h>
   #endif
   #ifdef USE_SLCURSES
   #include <slcurses.h>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect_keys.h
  ============================================================================
  $ cvs diff -u -r1.1.1.2 -r1.2 iselect_keys.h
  --- ossp-pkg/iselect/iselect_keys.h	31 Mar 1999 06:45:15 -0000	1.1.1.2
  +++ ossp-pkg/iselect/iselect_keys.h	11 Sep 2004 15:18:49 -0000	1.2
  @@ -11,7 +11,7 @@
   **  
   **  ======================================================================
   **
  -**  Copyright (c) 1996-1999 Ralf S. Engelschall.
  +**  Copyright (c) 1997-2004 Ralf S. Engelschall.
   **
   **  This program is free software; it may be redistributed and/or
   **  modified only under the terms of the GNU General Public License, 
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect_main.c
  ============================================================================
  $ cvs diff -u -r1.1.1.4 -r1.2 iselect_main.c
  --- ossp-pkg/iselect/iselect_main.c	31 Mar 1999 06:42:16 -0000	1.1.1.4
  +++ ossp-pkg/iselect/iselect_main.c	11 Sep 2004 15:18:49 -0000	1.2
  @@ -11,7 +11,7 @@
   **  
   **  ======================================================================
   **
  -**  Copyright (c) 1996-1999 Ralf S. Engelschall.
  +**  Copyright (c) 1997-2004 Ralf S. Engelschall.
   **
   **  This program is free software; it may be redistributed and/or
   **  modified only under the terms of the GNU General Public License, 
  @@ -39,17 +39,18 @@
   #include "iselect_getopt.h"
   #include "iselect_browse.h"
   #include "iselect_keys.h"
  -#define AS_HEADER
  +
  +#define _ISELECT_VERSION_C_AS_HEADER_
   #include "iselect_version.c"
  +#undef  _ISELECT_VERSION_C_AS_HEADER_
   
   void give_version(char *name);
   void give_usage(char *name);
   
   void give_version(char *name)
   {
  -    fprintf(stderr, "%s\n", iSelect_Hello);
  -    fprintf(stdout, "\n");
  -    fprintf(stdout, "Copyright (c) 1996,1997,1998 Ralf S. Engelschall.\n");
  +    fprintf(stderr, "%s\n", iselect_version.v_tex);
  +    fprintf(stdout, "Copyright (c) 1997-2000 Ralf S. Engelschall <rse@engelschall.com>\n");
       fprintf(stdout, "\n");
       fprintf(stdout, "This program is distributed in the hope that it will be useful,\n");
       fprintf(stdout, "but WITHOUT ANY WARRANTY; without even the implied warranty of\n");
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect_readme.c
  ============================================================================
  $ cvs diff -u -r1.1.1.4 -r1.2 iselect_readme.c
  --- ossp-pkg/iselect/iselect_readme.c	31 Mar 1999 06:50:37 -0000	1.1.1.4
  +++ ossp-pkg/iselect/iselect_readme.c	11 Sep 2004 15:18:49 -0000	1.2
  @@ -17,12 +17,12 @@
   "  as its control script or in batch mode as a pipeline filter (usually",
   "  between grep and the final executing command).   ",
   "  ",
  -"  Version 1.2.0 (31-Mar-1999)",
  +"  Version 1.2.1 (25-Jul-2000)",
   "",
   "  The latest release can be found on",
  -"  http://www.engelschall.com/sw/iselect/",
  +"  http://www.ossp.org/pkg/tool/iselect/",
   "",
  -"  Copyright (c) 1997-1999 Ralf S. Engelschall.",
  +"  Copyright (c) 1997-2004 Ralf S. Engelschall <rse@engelschall.com>",
   "",
   "  This program is free software; it may be redistributed and/or modified ",
   "  only under the terms of the GNU General Public License, which may be found ",
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect_readme.txt
  ============================================================================
  $ cvs diff -u -r1.1.1.4 -r1.2 iselect_readme.txt
  --- ossp-pkg/iselect/iselect_readme.txt	31 Mar 1999 06:50:35 -0000	1.1.1.4
  +++ ossp-pkg/iselect/iselect_readme.txt	11 Sep 2004 15:18:49 -0000	1.2
  @@ -12,12 +12,12 @@
     as its control script or in batch mode as a pipeline filter (usually
     between grep and the final executing command).   
     
  -  Version 1.2.0 (31-Mar-1999)
  +  Version 1.3.0 (11-Sep-2004)
   
     The latest release can be found on
  -  http://www.engelschall.com/sw/iselect/
  +  http://www.ossp.org/pkg/tool/iselect/
   
  -  Copyright (c) 1997-1999 Ralf S. Engelschall.
  +  Copyright (c) 1997-2004 Ralf S. Engelschall <rse@engelschall.com>
   
     This program is free software; it may be redistributed and/or modified 
     only under the terms of the GNU General Public License, which may be found 
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect_version.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 iselect_version.c
  --- ossp-pkg/iselect/iselect_version.c	25 Jul 2000 11:53:25 -0000	1.3
  +++ ossp-pkg/iselect/iselect_version.c	11 Sep 2004 15:18:49 -0000	1.4
  @@ -1,31 +1,46 @@
   /*
  -**  iselect_version.c -- Version File (automatically generated and maintained by NEWVERS)
  +**  iselect_version.c -- Version Information for iSelect (syntax: C/C++)
  +**  [automatically generated and maintained by GNU shtool]
   */
   
  -#ifdef AS_HEADER
  +#ifdef _ISELECT_VERSION_C_AS_HEADER_
   
  -#ifndef ISELECT_VERSION_C
  -#define ISELECT_VERSION_C
  -#define iSelect_VERSION 0x102200
  -extern const int  iSelect_Version;
  -extern const char iSelect_VersionStr[];
  -extern const char iSelect_Hello[];
  -extern const char iSelect_GNUVersion[];
  -extern const char iSelect_WhatID[];
  -extern const char iSelect_RCSIdentID[];
  -extern const char iSelect_WebID[];
  -extern const char iSelect_PlainID[];
  -#endif
  -
  -#else
  -
  -const int  iSelect_Version      = 0x102200;
  -const char iSelect_VersionStr[] = "1.2.0 (31-Mar-1999)";
  -const char iSelect_Hello[]      = "This is iSelect Version 1.2.0 (31-Mar-1999)";
  -const char iSelect_GNUVersion[] = "iSelect Version 1.2.0";
  -const char iSelect_WhatID[]     = "@(#)iSelect Version 1.2.0 (31-Mar-1999)";
  -const char iSelect_RCSIdentID[] = "$Id: iselect_version.c,v 1.3 2000/07/25 11:53:25 rse Exp $";
  -const char iSelect_WebID[]      = "iSelect/1.2.0";
  -const char iSelect_PlainID[]    = "1.2.0";
  +#ifndef _ISELECT_VERSION_C_
  +#define _ISELECT_VERSION_C_
  +
  +#define ISELECT_VERSION 0x103200
  +
  +typedef struct {
  +    const int   v_hex;
  +    const char *v_short;
  +    const char *v_long;
  +    const char *v_tex;
  +    const char *v_gnu;
  +    const char *v_web;
  +    const char *v_sccs;
  +    const char *v_rcs;
  +} iselect_version_t;
  +
  +extern iselect_version_t iselect_version;
  +
  +#endif /* _ISELECT_VERSION_C_ */
  +
  +#else /* _ISELECT_VERSION_C_AS_HEADER_ */
  +
  +#define _ISELECT_VERSION_C_AS_HEADER_
  +#include "iselect_version.c"
  +#undef  _ISELECT_VERSION_C_AS_HEADER_
  +
  +iselect_version_t iselect_version = {
  +    0x103200,
  +    "1.3.0",
  +    "1.3.0 (11-Sep-2004)",
  +    "This is iSelect, Version 1.3.0 (11-Sep-2004)",
  +    "iSelect 1.3.0 (11-Sep-2004)",
  +    "iSelect/1.3.0",
  +    "@(#)iSelect 1.3.0 (11-Sep-2004)",
  +    "$Id: iselect_version.c,v 1.4 2004/09/11 15:18:49 rse Exp $"
  +};
  +
  +#endif /* _ISELECT_VERSION_C_AS_HEADER_ */
   
  -#endif
  @@ .

From ossp-cvs-owner@ossp.org  Sat Sep 11 17:19:59 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B228476436; Sat, 11 Sep 2004 17:19:59 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/iselect/ iselect.1 iselect_readme.c
Message-Id: <20040911151959.B228476436@mail.ossp.org>
Date: Sat, 11 Sep 2004 17:19:59 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Sep-2004 17:19:59
  Branch: HEAD                             Handle: 2004091116195900

  Modified files:
    ossp-pkg/iselect        iselect.1 iselect_readme.c

  Log:
    regenerated

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/iselect/iselect.1
    1.3         +1  -1      ossp-pkg/iselect/iselect_readme.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect.1
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 iselect.1
  --- ossp-pkg/iselect/iselect.1	11 Sep 2004 15:18:49 -0000	1.3
  +++ ossp-pkg/iselect/iselect.1	11 Sep 2004 15:19:59 -0000	1.4
  @@ -155,7 +155,7 @@
   [\fB\-V\fR]
   .SH "VERSION"
   .IX Header "VERSION"
  -1.2.1 (25\-Jul\-2000)
  +1.3.0 (11\-Sep\-2004)
   .SH "DESCRIPTION"
   .IX Header "DESCRIPTION"
   .Sh "Intend"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect_readme.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 iselect_readme.c
  --- ossp-pkg/iselect/iselect_readme.c	11 Sep 2004 15:18:49 -0000	1.2
  +++ ossp-pkg/iselect/iselect_readme.c	11 Sep 2004 15:19:59 -0000	1.3
  @@ -17,7 +17,7 @@
   "  as its control script or in batch mode as a pipeline filter (usually",
   "  between grep and the final executing command).   ",
   "  ",
  -"  Version 1.2.1 (25-Jul-2000)",
  +"  Version 1.3.0 (11-Sep-2004)",
   "",
   "  The latest release can be found on",
   "  http://www.ossp.org/pkg/tool/iselect/",
  @@ .

From ossp-cvs-owner@ossp.org  Sat Sep 11 17:22:33 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8C3E476436; Sat, 11 Sep 2004 17:22:33 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/iselect/ README iselect.pod
Message-Id: <20040911152233.8C3E476436@mail.ossp.org>
Date: Sat, 11 Sep 2004 17:22:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Sep-2004 17:22:33
  Branch: HEAD                             Handle: 2004091116223200

  Modified files:
    ossp-pkg/iselect        README iselect.pod

  Log:
    update URLs

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/iselect/README
    1.4         +1  -1      ossp-pkg/iselect/iselect.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/README
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 README
  --- ossp-pkg/iselect/README	11 Sep 2004 15:18:49 -0000	1.2
  +++ ossp-pkg/iselect/README	11 Sep 2004 15:22:32 -0000	1.3
  @@ -15,7 +15,7 @@
     Version 1.3.0 (11-Sep-2004)
   
     The latest release can be found on
  -  http://www.engelschall.com/sw/iselect/
  +  http://www.ossp.org/pkg/tool/iselect/
   
     Copyright (c) 1997-2004 Ralf S. Engelschall <rse@engelschall.com>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect.pod
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 iselect.pod
  --- ossp-pkg/iselect/iselect.pod	11 Sep 2004 15:18:49 -0000	1.3
  +++ ossp-pkg/iselect/iselect.pod	11 Sep 2004 15:22:32 -0000	1.4
  @@ -296,7 +296,7 @@
   
   =head1 SEE ALSO
   
  -  iSelect Home: http://www.engelschall.com/sw/iselect/
  +  iSelect Home: http://www.ossp.org/pkg/tool/iselect/
   
   =cut
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Sep 11 17:24:06 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4B8E976436; Sat, 11 Sep 2004 17:24:06 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/iselect/ Makefile.in configure.in iselect.1
Message-Id: <20040911152406.4B8E976436@mail.ossp.org>
Date: Sat, 11 Sep 2004 17:24:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Sep-2004 17:24:06
  Branch: HEAD                             Handle: 2004091116240500

  Modified files:
    ossp-pkg/iselect        Makefile.in configure.in iselect.1

  Log:
    more cosmetics

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/iselect/Makefile.in
    1.4         +0  -4      ossp-pkg/iselect/configure.in
    1.5         +1  -1      ossp-pkg/iselect/iselect.1
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 Makefile.in
  --- ossp-pkg/iselect/Makefile.in	11 Sep 2004 15:18:49 -0000	1.3
  +++ ossp-pkg/iselect/Makefile.in	11 Sep 2004 15:24:05 -0000	1.4
  @@ -59,7 +59,7 @@
   	sed -e "s/Version .*(.*)/Version $$V/g" <iselect_readme.txt >iselect_readme.txt.n && mv iselect_readme.txt.n iselect_readme.txt
   
   _TARBALL = \
  -	$(SHTOOL) tarball -o $${NAME}.tar.gz -d $${NAME} -u rse -g en \
  +	$(SHTOOL) tarball -o $${NAME}.tar.gz -d $${NAME} -u ossp -g iselect \
   	                  -e 'CVS,\.cvsignore,\.configure,\.\#.*,\.[ao]$$' -c 'gzip --best' .
   
   dist: distclean fixperm
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/configure.in
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 configure.in
  --- ossp-pkg/iselect/configure.in	11 Sep 2004 15:18:49 -0000	1.3
  +++ ossp-pkg/iselect/configure.in	11 Sep 2004 15:24:05 -0000	1.4
  @@ -102,7 +102,3 @@
   ,dnl
   )dnl
   
  -echo ""
  -echo "Now please type 'make' to compile. Good luck."
  -echo ""
  -
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect.1
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 iselect.1
  --- ossp-pkg/iselect/iselect.1	11 Sep 2004 15:19:59 -0000	1.4
  +++ ossp-pkg/iselect/iselect.1	11 Sep 2004 15:24:05 -0000	1.5
  @@ -366,5 +366,5 @@
   .SH "SEE ALSO"
   .IX Header "SEE ALSO"
   .Vb 1
  -\&  iSelect Home: http://www.engelschall.com/sw/iselect/
  +\&  iSelect Home: http://www.ossp.org/pkg/tool/iselect/
   .Ve
  @@ .

From ossp-cvs-owner@ossp.org  Sat Sep 11 17:26:22 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F399076436; Sat, 11 Sep 2004 17:26:21 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/iselect/ configure
Message-Id: <20040911152621.F399076436@mail.ossp.org>
Date: Sat, 11 Sep 2004 17:26:21 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Sep-2004 17:26:21
  Branch: HEAD                             Handle: 2004091116262100

  Modified files:
    ossp-pkg/iselect        configure

  Log:
    more cosmetics

  Summary:
    Revision    Changes     Path
    1.4         +0  -4      ossp-pkg/iselect/configure
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/configure
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 configure
  --- ossp-pkg/iselect/configure	11 Sep 2004 15:18:49 -0000	1.3
  +++ ossp-pkg/iselect/configure	11 Sep 2004 15:26:21 -0000	1.4
  @@ -4840,7 +4840,3 @@
     $ac_cs_success || { (exit 1); exit 1; }
   fi
   
  -echo ""
  -echo "Now please type 'make' to compile. Good luck."
  -echo ""
  -
  @@ .

From ossp-cvs-owner@ossp.org  Sat Sep 11 17:31:11 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4F49876436; Sat, 11 Sep 2004 17:31:10 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/tool/ index.wml ossp-w...
Message-Id: <20040911153110.4F49876436@mail.ossp.org>
Date: Sat, 11 Sep 2004 17:31:10 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   11-Sep-2004 17:31:09
  Branch: HEAD                             Handle: 2004091116310602

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/iselect
                            index.wml

  Log:
    release OSSP iselect 1.3.0

  Summary:
    Revision    Changes     Path
    1.94        +1  -0      ossp-web/new/news.txt
    1.40        +1  -1      ossp-web/pkg/tool/index.wml
    1.4         +2  -2      ossp-web/pkg/tool/iselect/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.93 -r1.94 news.txt
  --- ossp-web/new/news.txt	11 Aug 2004 19:20:37 -0000	1.93
  +++ ossp-web/new/news.txt	11 Sep 2004 15:31:06 -0000	1.94
  @@ -1,3 +1,4 @@
  +09-Sep-2004: Released T<OSSP iselect> 1.3.0
   11-Aug-2004: Released T<GNU shtool> 2.0.1
   16-Jul-2004: Released L<OSSP uuid> 1.0.1
   13-Jul-2004: Released L<GNU pth> 2.0.1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.39 -r1.40 index.wml
  --- ossp-web/pkg/tool/index.wml	11 Aug 2004 19:20:38 -0000	1.39
  +++ ossp-web/pkg/tool/index.wml	11 Sep 2004 15:31:07 -0000	1.40
  @@ -50,7 +50,7 @@
   	        done=20 stable="none" unstable="none">
     <pkg_item name="iselect" longname="OSSP iselect" type="tool"
               desc="Interactive Terminal Selection"
  -	        done=100 stable="1.2.0" unstable="none">
  +	        done=100 stable="1.3.0" unstable="none">
     <pkg_item name="mct" longname="OSSP mct" type="tool"
               desc="Multiple Choice Test Engine"
   	        done=90 stable="none" unstable="none">
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/iselect/index.wml
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 index.wml
  --- ossp-web/pkg/tool/iselect/index.wml	11 Aug 2002 13:49:16 -0000	1.3
  +++ ossp-web/pkg/tool/iselect/index.wml	11 Sep 2004 15:31:08 -0000	1.4
  @@ -20,7 +20,7 @@
   <h2>Status</h2>
   
   <pkg_status
  -    stable="1.2.0"   stable_date="31-Mar-1999"
  +    stable="1.3.0"   stable_date="11-Sep-2004"
       unstable="none"  unstable_date="none"
   	done=100>
   
  @@ -31,7 +31,7 @@
       url=$(FTP_ROOT_URL)/pkg/tool/iselect/
       directory=$(FTP_ROOT_DIR)/pkg/tool/iselect/
       files="iselect-*.tar.gz" 
  -	stable="iselect-1.2.0.tar.gz" unstable="none">
  +	stable="iselect-1.3.0.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Sep 12 11:28:06 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 60BD376468; Sun, 12 Sep 2004 11:28:06 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog THANKS pthread.c pthread.h.in
Message-Id: <20040912092806.60BD376468@mail.ossp.org>
Date: Sun, 12 Sep 2004 11:28:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Sep-2004 11:28:06
  Branch: HEAD                             Handle: 2004091210280401

  Modified files:
    ossp-pkg/pth            ChangeLog THANKS pthread.c pthread.h.in

  Log:
    Fixed prototype for pthread_attr_setschedparam(3) from
    to use a "const struct sched_param *" argument to comply
    with SUSv2/v3.
    
    Submitted by: Rafael Ávila de Espíndola <rafael.espindola@ic.unicamp.br>

  Summary:
    Revision    Changes     Path
    1.616       +4  -0      ossp-pkg/pth/ChangeLog
    1.93        +1  -0      ossp-pkg/pth/THANKS
    1.66        +1  -1      ossp-pkg/pth/pthread.c
    1.69        +1  -1      ossp-pkg/pth/pthread.h.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.615 -r1.616 ChangeLog
  --- ossp-pkg/pth/ChangeLog	11 Aug 2004 19:36:32 -0000	1.615
  +++ ossp-pkg/pth/ChangeLog	12 Sep 2004 09:28:04 -0000	1.616
  @@ -21,6 +21,10 @@
                     
     Changes between 2.0.1 and 2.0.2 (13-Jul-2003 to xx-XXX-2004)
   
  +   *) Fixed prototype for pthread_attr_setschedparam(3) from
  +      to use a "const struct sched_param *" argument.
  +      [Rafael Ávila de Espíndola <rafael.espindola@ic.unicamp.br>]
  +
      *) Upgraded build environment to GNU libtool 1.5.8
         and GNU shtool 2.0.1.
         [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/THANKS
  ============================================================================
  $ cvs diff -u -r1.92 -r1.93 THANKS
  --- ossp-pkg/pth/THANKS	3 Apr 2003 18:09:05 -0000	1.92
  +++ ossp-pkg/pth/THANKS	12 Sep 2004 09:28:05 -0000	1.93
  @@ -29,6 +29,7 @@
       o  Philippe Defert             <Philippe.Defert@cern.ch>
       o  David Dureau                <david.dureau@cea.fr>
       o  Lars Eilebrecht             <lars@hyperreal.org>
  +    o  Rafael Ávila de Espíndola   <rafael.espindola@ic.unicamp.br>
       o  Jason Evans                 <jasone@canonware.com>
       o  Alex Fiori                  <alex@linuxbr.com>
       o  Flux                        <flux@iae.nl>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pthread.c
  ============================================================================
  $ cvs diff -u -r1.65 -r1.66 pthread.c
  --- ossp-pkg/pth/pthread.c	13 Jul 2004 10:50:49 -0000	1.65
  +++ ossp-pkg/pth/pthread.c	12 Sep 2004 09:28:04 -0000	1.66
  @@ -115,7 +115,7 @@
       return pth_error(ENOSYS, ENOSYS);
   }
   
  -int pthread_attr_setschedparam(pthread_attr_t *attr, struct sched_param *schedparam)
  +int pthread_attr_setschedparam(pthread_attr_t *attr, const struct sched_param *schedparam)
   {
       if (attr == NULL)
           return pth_error(EINVAL, EINVAL);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pthread.h.in
  ============================================================================
  $ cvs diff -u -r1.68 -r1.69 pthread.h.in
  --- ossp-pkg/pth/pthread.h.in	13 Jul 2004 10:50:49 -0000	1.68
  +++ ossp-pkg/pth/pthread.h.in	12 Sep 2004 09:28:05 -0000	1.69
  @@ -324,7 +324,7 @@
   extern int       pthread_attr_destroy(pthread_attr_t *);
   extern int       pthread_attr_setinheritsched(pthread_attr_t *, int);
   extern int       pthread_attr_getinheritsched(const pthread_attr_t *, int *);
  -extern int       pthread_attr_setschedparam(pthread_attr_t *, struct sched_param *);
  +extern int       pthread_attr_setschedparam(pthread_attr_t *, const struct sched_param *);
   extern int       pthread_attr_getschedparam(const pthread_attr_t *, struct sched_param *);
   extern int       pthread_attr_setschedpolicy(pthread_attr_t *, int);
   extern int       pthread_attr_getschedpolicy(const pthread_attr_t *, int *);
  @@ .

From ossp-cvs-owner@ossp.org  Sun Sep 12 13:27:33 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 01C5E76546; Sun, 12 Sep 2004 13:27:32 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog pth_event.c
Message-Id: <20040912112732.01C5E76546@mail.ossp.org>
Date: Sun, 12 Sep 2004 13:27:32 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Sep-2004 13:27:32
  Branch: HEAD                             Handle: 2004091212273200

  Modified files:
    ossp-pkg/pth            ChangeLog pth_event.c

  Log:
    Workaround GCC 2.x and 3.5 (3.4 worked fine) macro parsing
    behaviour by using a pre-declared function pointer type "typedef
    int (*pth_event_func_t)(void *);" instead of using an inlined
    "int (*)(void *)".
    
    Triggered by a report from: Robert Anderson <RWA@sbcglobal.net>

  Summary:
    Revision    Changes     Path
    1.617       +6  -0      ossp-pkg/pth/ChangeLog
    1.64        +17 -13     ossp-pkg/pth/pth_event.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.616 -r1.617 ChangeLog
  --- ossp-pkg/pth/ChangeLog	12 Sep 2004 09:28:04 -0000	1.616
  +++ ossp-pkg/pth/ChangeLog	12 Sep 2004 11:27:32 -0000	1.617
  @@ -21,6 +21,12 @@
                     
     Changes between 2.0.1 and 2.0.2 (13-Jul-2003 to xx-XXX-2004)
   
  +   *) Workaround GCC 2.x and 3.5 (3.4 worked fine) macro parsing
  +      behaviour by using a pre-declared function pointer type "typedef
  +      int (*pth_event_func_t)(void *);" instead of using an inlined 
  +      "int (*)(void *)".
  +      [Ralf S. Engelschall, Robert Anderson <RWA@sbcglobal.net>]
  +
      *) Fixed prototype for pthread_attr_setschedparam(3) from
         to use a "const struct sched_param *" argument.
         [Rafael Ávila de Espíndola <rafael.espindola@ic.unicamp.br>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_event.c
  ============================================================================
  $ cvs diff -u -r1.63 -r1.64 pth_event.c
  --- ossp-pkg/pth/pth_event.c	13 Jul 2004 11:00:43 -0000	1.63
  +++ ossp-pkg/pth/pth_event.c	12 Sep 2004 11:27:32 -0000	1.64
  @@ -30,6 +30,10 @@
   
   #if cpp
   
  +/* pre-declare type of function event callback
  +   (mainly to workaround va_arg(3) problems below) */
  +typedef int (*pth_event_func_t)(void *);
  +
   /* event structure */
   struct pth_event_st {
       struct pth_event_st *ev_next;
  @@ -38,15 +42,15 @@
       int ev_type;
       int ev_goal;
       union {
  -        struct { int fd; }                                        FD;
  -        struct { int *n; int nfd; fd_set *rfds, *wfds, *efds; }   SELECT;
  -        struct { sigset_t *sigs; int *sig; }                      SIGS;
  -        struct { pth_time_t tv; }                                 TIME;
  -        struct { pth_msgport_t mp; }                              MSG;
  -        struct { pth_mutex_t *mutex; }                            MUTEX;
  -        struct { pth_cond_t *cond; }                              COND;
  -        struct { pth_t tid; }                                     TID;
  -        struct { int (*func)(void *); void *arg; pth_time_t tv; } FUNC;
  +        struct { int fd; }                                          FD;
  +        struct { int *n; int nfd; fd_set *rfds, *wfds, *efds; }     SELECT;
  +        struct { sigset_t *sigs; int *sig; }                        SIGS;
  +        struct { pth_time_t tv; }                                   TIME;
  +        struct { pth_msgport_t mp; }                                MSG;
  +        struct { pth_mutex_t *mutex; }                              MUTEX;
  +        struct { pth_cond_t *cond; }                                COND;
  +        struct { pth_t tid; }                                       TID;
  +        struct { pth_event_func_t func; void *arg; pth_time_t tv; } FUNC;
       } ev_args;
   };
   
  @@ -196,7 +200,7 @@
           /* custom function event */
           ev->ev_type = PTH_EVENT_FUNC;
           ev->ev_goal = (int)(spec & (PTH_UNTIL_OCCURRED));
  -        ev->ev_args.FUNC.func  = va_arg(ap, int (*)(void *));
  +        ev->ev_args.FUNC.func  = va_arg(ap, pth_event_func_t);
           ev->ev_args.FUNC.arg   = va_arg(ap, void *);
           ev->ev_args.FUNC.tv    = va_arg(ap, pth_time_t);
       }
  @@ -266,9 +270,9 @@
       }
       else if (ev->ev_type & PTH_EVENT_FUNC) {
           /* custom function event */
  -        int (**func)(void *) = va_arg(ap, int (**)(void *));
  -        void **arg           = va_arg(ap, void **);
  -        pth_time_t *tv       = va_arg(ap, pth_time_t *);
  +        pth_event_func_t *func = va_arg(ap, pth_event_func_t *);
  +        void **arg             = va_arg(ap, void **);
  +        pth_time_t *tv         = va_arg(ap, pth_time_t *);
           *func = ev->ev_args.FUNC.func;
           *arg  = ev->ev_args.FUNC.arg;
           *tv   = ev->ev_args.FUNC.tv;
  @@ .

From ossp-cvs-owner@ossp.org  Sun Sep 12 13:28:03 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8B03676546; Sun, 12 Sep 2004 13:28:03 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ THANKS
Message-Id: <20040912112803.8B03676546@mail.ossp.org>
Date: Sun, 12 Sep 2004 13:28:03 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Sep-2004 13:28:03
  Branch: HEAD                             Handle: 2004091212280300

  Modified files:
    ossp-pkg/pth            THANKS

  Log:
    give credit

  Summary:
    Revision    Changes     Path
    1.94        +1  -0      ossp-pkg/pth/THANKS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/THANKS
  ============================================================================
  $ cvs diff -u -r1.93 -r1.94 THANKS
  --- ossp-pkg/pth/THANKS	12 Sep 2004 09:28:05 -0000	1.93
  +++ ossp-pkg/pth/THANKS	12 Sep 2004 11:28:03 -0000	1.94
  @@ -14,6 +14,7 @@
   
       o  Steve Alstrin               <Steve.Alstrin@NetIQ.com>
       o  Jens Andersen               <Jens@trw.nl>
  +    o  Robert Anderson             <RWA@sbcglobal.net>
       o  J.David Anglin              <dave.anglin@nrc.ca>
       o  Dmitry A. Antipov           <boss@wraith.rosnet.ru>
       o  Bill Apt                    <babt@us.ibm.com>
  @@ .

From ossp-cvs-owner@ossp.org  Sun Sep 12 13:36:14 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 702AF76521; Sun, 12 Sep 2004 13:36:14 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog THANKS pth.h.in
Message-Id: <20040912113614.702AF76521@mail.ossp.org>
Date: Sun, 12 Sep 2004 13:36:14 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Sep-2004 13:36:14
  Branch: HEAD                             Handle: 2004091212361300

  Modified files:
    ossp-pkg/pth            ChangeLog THANKS pth.h.in

  Log:
    Avoid side-effects by defining _XOPEN_SOURCE only temporarily
    for inclusion of <poll.h> instead of permanently.
    
    Submitted by: Graham Nash <gnash@ncube.com>

  Summary:
    Revision    Changes     Path
    1.618       +4  -0      ossp-pkg/pth/ChangeLog
    1.95        +1  -0      ossp-pkg/pth/THANKS
    1.142       +7  -0      ossp-pkg/pth/pth.h.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.617 -r1.618 ChangeLog
  --- ossp-pkg/pth/ChangeLog	12 Sep 2004 11:27:32 -0000	1.617
  +++ ossp-pkg/pth/ChangeLog	12 Sep 2004 11:36:13 -0000	1.618
  @@ -21,6 +21,10 @@
                     
     Changes between 2.0.1 and 2.0.2 (13-Jul-2003 to xx-XXX-2004)
   
  +   *) Avoid side-effects by defining _XOPEN_SOURCE only temporarily
  +      for inclusion of <poll.h> instead of permanently.
  +      [Graham Nash <gnash@ncube.com>]
  +
      *) Workaround GCC 2.x and 3.5 (3.4 worked fine) macro parsing
         behaviour by using a pre-declared function pointer type "typedef
         int (*pth_event_func_t)(void *);" instead of using an inlined 
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/THANKS
  ============================================================================
  $ cvs diff -u -r1.94 -r1.95 THANKS
  --- ossp-pkg/pth/THANKS	12 Sep 2004 11:28:03 -0000	1.94
  +++ ossp-pkg/pth/THANKS	12 Sep 2004 11:36:13 -0000	1.95
  @@ -75,6 +75,7 @@
       o  Aaron Metzger               <ametzger@varcom.com>
       o  Igor A. Minyukoff           <iam@inser.loniis.spb.su>
       o  Matthew Mondor              <mmondor@gobot.ca>
  +    o  Graham Nash                 <gnash@ncube.com>
       o  Eric Newton                 <ecn@smart.net>
       o  Sami Niemi                  <saminiemi@usa.net>
       o  Joseph Wayne Norton         <norton@alum.mit.edu>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth.h.in
  ============================================================================
  $ cvs diff -u -r1.141 -r1.142 pth.h.in
  --- ossp-pkg/pth/pth.h.in	13 Jul 2004 10:50:49 -0000	1.141
  +++ ossp-pkg/pth/pth.h.in	12 Sep 2004 11:36:13 -0000	1.142
  @@ -338,8 +338,15 @@
   #define PTH_FAKE_POLL @PTH_FAKE_POLL@
   #if !(PTH_FAKE_POLL)
   /* use vendor poll(2) environment */
  +#ifndef _XOPEN_SOURCE
   #define _XOPEN_SOURCE
  +#define _XOPEN_SOURCE_set
  +#endif
   #include <poll.h>
  +#ifdef _XOPEN_SOURCE_set
  +#undef _XOPEN_SOURCE_set
  +#undef _XOPEN_SOURCE
  +#endif
   #ifndef POLLRDNORM
   #define POLLRDNORM POLLIN
   #endif
  @@ .

From ossp-cvs-owner@ossp.org  Sun Sep 12 13:44:26 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 341747639C; Sun, 12 Sep 2004 13:44:26 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog pth.m4
Message-Id: <20040912114426.341747639C@mail.ossp.org>
Date: Sun, 12 Sep 2004 13:44:26 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Sep-2004 13:44:26
  Branch: HEAD                             Handle: 2004091212442500

  Modified files:
    ossp-pkg/pth            ChangeLog pth.m4

  Log:
    Workaround Autoconf/m4 problems in pth.m4 by using "m4_define"
    instead of just "define" and no using m4_undefine at all.
    
    Hints by: Dr. Andreas Mueller <afm@othello.ch>

  Summary:
    Revision    Changes     Path
    1.619       +4  -0      ossp-pkg/pth/ChangeLog
    1.14        +3  -4      ossp-pkg/pth/pth.m4
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.618 -r1.619 ChangeLog
  --- ossp-pkg/pth/ChangeLog	12 Sep 2004 11:36:13 -0000	1.618
  +++ ossp-pkg/pth/ChangeLog	12 Sep 2004 11:44:25 -0000	1.619
  @@ -21,6 +21,10 @@
                     
     Changes between 2.0.1 and 2.0.2 (13-Jul-2003 to xx-XXX-2004)
   
  +   *) Workaround Autoconf/m4 problems in pth.m4 by using "m4_define"
  +      instead of just "define" and no using m4_undefine at all.
  +      [Dr. Andreas Mueller <afm@othello.ch>]
  +
      *) Avoid side-effects by defining _XOPEN_SOURCE only temporarily
         for inclusion of <poll.h> instead of permanently.
         [Graham Nash <gnash@ncube.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth.m4
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 pth.m4
  --- ossp-pkg/pth/pth.m4	13 Jul 2004 10:50:49 -0000	1.13
  +++ ossp-pkg/pth/pth.m4	12 Sep 2004 11:44:25 -0000	1.14
  @@ -42,14 +42,13 @@
   dnl #   auxilliary macros
   AC_DEFUN(_AC_PTH_ERROR, [dnl
   AC_MSG_RESULT([*FAILED*])
  -define(_ac_pth_line,dnl
  +m4_define(_ac_pth_line,dnl
   "+------------------------------------------------------------------------+")
   echo " _ac_pth_line" 1>&2
   cat <<EOT | sed -e 's/^[[ 	]]*/ | /' -e 's/>>/  /' 1>&2
   $1
   EOT
   echo " _ac_pth_line" 1>&2
  -undefine(_ac_pth_line)
   exit 1
   ])
   AC_DEFUN(_AC_PTH_VERBOSE, [dnl
  @@ -278,11 +277,11 @@
           _AC_PTH_VERBOSE([    o LDFLAGS=\"$LDFLAGS\"])
           _AC_PTH_VERBOSE([    o LIBS=\"$LIBS\"])
           cross_compile=no
  -        define(_code1, [dnl
  +        m4_define(_code1, [dnl
           #include <stdio.h>
           #include <pth.h>
           ])
  -        define(_code2, [dnl
  +        m4_define(_code2, [dnl
           int main(int argc, char *argv[])
           {
               FILE *fp;
  @@ .

From ossp-cvs-owner@ossp.org  Sun Sep 12 13:45:10 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E8C727639C; Sun, 12 Sep 2004 13:45:09 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ THANKS
Message-Id: <20040912114509.E8C727639C@mail.ossp.org>
Date: Sun, 12 Sep 2004 13:45:09 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Sep-2004 13:45:09
  Branch: HEAD                             Handle: 2004091212450900

  Modified files:
    ossp-pkg/pth            THANKS

  Log:
    give credit

  Summary:
    Revision    Changes     Path
    1.96        +1  -0      ossp-pkg/pth/THANKS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/THANKS
  ============================================================================
  $ cvs diff -u -r1.95 -r1.96 THANKS
  --- ossp-pkg/pth/THANKS	12 Sep 2004 11:36:13 -0000	1.95
  +++ ossp-pkg/pth/THANKS	12 Sep 2004 11:45:09 -0000	1.96
  @@ -75,6 +75,7 @@
       o  Aaron Metzger               <ametzger@varcom.com>
       o  Igor A. Minyukoff           <iam@inser.loniis.spb.su>
       o  Matthew Mondor              <mmondor@gobot.ca>
  +    o  Dr. Andreas Mueller         <afm@othello.ch>
       o  Graham Nash                 <gnash@ncube.com>
       o  Eric Newton                 <ecn@smart.net>
       o  Sami Niemi                  <saminiemi@usa.net>
  @@ .

From ossp-cvs-owner@ossp.org  Sun Sep 12 13:52:34 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 387BF76557; Sun, 12 Sep 2004 13:52:34 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog pth_high.c
Message-Id: <20040912115234.387BF76557@mail.ossp.org>
Date: Sun, 12 Sep 2004 13:52:34 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Sep-2004 13:52:34
  Branch: HEAD                             Handle: 2004091212523300

  Modified files:
    ossp-pkg/pth            ChangeLog pth_high.c

  Log:
    Use "(char *)NULL" instead of plain "NULL" in last argument to
    execl(2) to avoid GCC 3.5's "warning: missing sentinel in function call".

  Summary:
    Revision    Changes     Path
    1.620       +4  -0      ossp-pkg/pth/ChangeLog
    1.107       +1  -1      ossp-pkg/pth/pth_high.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.619 -r1.620 ChangeLog
  --- ossp-pkg/pth/ChangeLog	12 Sep 2004 11:44:25 -0000	1.619
  +++ ossp-pkg/pth/ChangeLog	12 Sep 2004 11:52:33 -0000	1.620
  @@ -21,6 +21,10 @@
                     
     Changes between 2.0.1 and 2.0.2 (13-Jul-2003 to xx-XXX-2004)
   
  +   *) Use "(char *)NULL" instead of plain "NULL" in last argument to
  +      execl(2) to avoid GCC 3.5's "warning: missing sentinel in function call".
  +      [Ralf S. Engelschall]
  +
      *) Workaround Autoconf/m4 problems in pth.m4 by using "m4_define"
         instead of just "define" and no using m4_undefine at all.
         [Dr. Andreas Mueller <afm@othello.ch>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_high.c
  ============================================================================
  $ cvs diff -u -r1.106 -r1.107 pth_high.c
  --- ossp-pkg/pth/pth_high.c	13 Jul 2004 10:50:49 -0000	1.106
  +++ ossp-pkg/pth/pth_high.c	12 Sep 2004 11:52:33 -0000	1.107
  @@ -252,7 +252,7 @@
               pth_scheduler_kill();
   
               /* execute the command through Bourne Shell */
  -            execl(PTH_PATH_BINSH, "sh", "-c", cmd, NULL);
  +            execl(PTH_PATH_BINSH, "sh", "-c", cmd, (char *)NULL);
   
               /* POSIX compliant return in case execution failed */
               exit(127);
  @@ .

From ossp-cvs-owner@ossp.org  Sun Sep 12 13:59:09 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A371D764A8; Sun, 12 Sep 2004 13:59:09 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog README pth_vers.c
Message-Id: <20040912115909.A371D764A8@mail.ossp.org>
Date: Sun, 12 Sep 2004 13:59:09 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Sep-2004 13:59:09
  Branch: HEAD                             Handle: 2004091212590800

  Modified files:
    ossp-pkg/pth            ChangeLog README pth_vers.c

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.621       +1  -1      ossp-pkg/pth/ChangeLog
    1.205       +1  -1      ossp-pkg/pth/README
    1.149       +9  -9      ossp-pkg/pth/pth_vers.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.620 -r1.621 ChangeLog
  --- ossp-pkg/pth/ChangeLog	12 Sep 2004 11:52:33 -0000	1.620
  +++ ossp-pkg/pth/ChangeLog	12 Sep 2004 11:59:08 -0000	1.621
  @@ -19,7 +19,7 @@
        / __/ | |_| |
     __|_____(_)___/_________________________________________________________
                     
  -  Changes between 2.0.1 and 2.0.2 (13-Jul-2003 to xx-XXX-2004)
  +  Changes between 2.0.1 and 2.0.2 (13-Jul-2003 to 12-Sep-2004)
   
      *) Use "(char *)NULL" instead of plain "NULL" in last argument to
         execl(2) to avoid GCC 3.5's "warning: missing sentinel in function call".
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/README
  ============================================================================
  $ cvs diff -u -r1.204 -r1.205 README
  --- ossp-pkg/pth/README	13 Jul 2004 11:03:40 -0000	1.204
  +++ ossp-pkg/pth/README	12 Sep 2004 11:59:08 -0000	1.205
  @@ -5,7 +5,7 @@
     |_|    \__|_| |_|                     the impossible.''
   
     GNU Pth - The GNU Portable Threads
  -  Version 2.0.1 (13-Jul-2004)
  +  Version 2.0.2 (12-Sep-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_vers.c
  ============================================================================
  $ cvs diff -u -r1.148 -r1.149 pth_vers.c
  --- ossp-pkg/pth/pth_vers.c	13 Jul 2004 11:03:40 -0000	1.148
  +++ ossp-pkg/pth/pth_vers.c	12 Sep 2004 11:59:08 -0000	1.149
  @@ -8,7 +8,7 @@
   #ifndef _PTH_VERS_C_
   #define _PTH_VERS_C_
   
  -#define PTH_INTERNAL_VERSION 0x200201
  +#define PTH_INTERNAL_VERSION 0x200202
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _PTH_VERS_C_AS_HEADER_
   
   pth_internal_version_t pth_internal_version = {
  -    0x200201,
  -    "2.0.1",
  -    "2.0.1 (13-Jul-2004)",
  -    "This is GNU Pth, Version 2.0.1 (13-Jul-2004)",
  -    "GNU Pth 2.0.1 (13-Jul-2004)",
  -    "GNU Pth/2.0.1",
  -    "@(#)GNU Pth 2.0.1 (13-Jul-2004)",
  -    "$Id: GNU Pth 2.0.1 (13-Jul-2004) $"
  +    0x200202,
  +    "2.0.2",
  +    "2.0.2 (12-Sep-2004)",
  +    "This is GNU Pth, Version 2.0.2 (12-Sep-2004)",
  +    "GNU Pth 2.0.2 (12-Sep-2004)",
  +    "GNU Pth/2.0.2",
  +    "@(#)GNU Pth 2.0.2 (12-Sep-2004)",
  +    "$Id: GNU Pth 2.0.2 (12-Sep-2004) $"
   };
   
   #endif /* _PTH_VERS_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Sun Sep 12 14:02:51 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4177E764A8; Sun, 12 Sep 2004 14:02:51 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog pth_syscall.c
Message-Id: <20040912120251.4177E764A8@mail.ossp.org>
Date: Sun, 12 Sep 2004 14:02:51 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Sep-2004 14:02:51
  Branch: HEAD                             Handle: 2004091213025000

  Modified files:
    ossp-pkg/pth            ChangeLog pth_syscall.c

  Log:
    Fix syscall wrapper for sendto(2).
    
    Obtained from: NetBSD pkgsrc patches

  Summary:
    Revision    Changes     Path
    1.622       +3  -0      ossp-pkg/pth/ChangeLog
    1.31        +1  -1      ossp-pkg/pth/pth_syscall.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.621 -r1.622 ChangeLog
  --- ossp-pkg/pth/ChangeLog	12 Sep 2004 11:59:08 -0000	1.621
  +++ ossp-pkg/pth/ChangeLog	12 Sep 2004 12:02:50 -0000	1.622
  @@ -21,6 +21,9 @@
                     
     Changes between 2.0.1 and 2.0.2 (13-Jul-2003 to 12-Sep-2004)
   
  +   *) Fix syscall wrapper for sendto(2).
  +      [NetBSD pkgsrc patches]
  +
      *) Use "(char *)NULL" instead of plain "NULL" in last argument to
         execl(2) to avoid GCC 3.5's "warning: missing sentinel in function call".
         [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_syscall.c
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 pth_syscall.c
  --- ossp-pkg/pth/pth_syscall.c	13 Jul 2004 10:50:49 -0000	1.30
  +++ ossp-pkg/pth/pth_syscall.c	12 Sep 2004 12:02:50 -0000	1.31
  @@ -664,7 +664,7 @@
       /* internal exit point for Pth */
       if (pth_syscall_fct_tab[PTH_SCF_sendto].addr != NULL)
           return ((ssize_t (*)(int, const void *, size_t, int, const struct sockaddr *, socklen_t))
  -               pth_syscall_fct_tab[PTH_SCF_recvfrom].addr)
  +               pth_syscall_fct_tab[PTH_SCF_sendto].addr)
                  (fd, buf, nbytes, flags, to, tolen);
   #if defined(HAVE_SYSCALL) && defined(SYS_sendto)
       else return (ssize_t)syscall(SYS_sendto, fd, buf, nbytes, flags, to, tolen);
  @@ .

From ossp-cvs-owner@ossp.org  Sun Sep 12 14:18:23 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9CA45764A8; Sun, 12 Sep 2004 14:18:23 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog pth_high.c
Message-Id: <20040912121823.9CA45764A8@mail.ossp.org>
Date: Sun, 12 Sep 2004 14:18:23 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Sep-2004 14:18:23
  Branch: HEAD                             Handle: 2004091213182201

  Modified files:
    ossp-pkg/pth            ChangeLog pth_high.c

  Log:
    Internally handle errors returned from pth_event() in order
    to pass them upstream to the caller in pth_high.c functions.

  Summary:
    Revision    Changes     Path
    1.623       +4  -0      ossp-pkg/pth/ChangeLog
    1.108       +12 -6      ossp-pkg/pth/pth_high.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.622 -r1.623 ChangeLog
  --- ossp-pkg/pth/ChangeLog	12 Sep 2004 12:02:50 -0000	1.622
  +++ ossp-pkg/pth/ChangeLog	12 Sep 2004 12:18:22 -0000	1.623
  @@ -21,6 +21,10 @@
                     
     Changes between 2.0.1 and 2.0.2 (13-Jul-2003 to 12-Sep-2004)
   
  +   *) Internally handle errors returned from pth_event() in order
  +      to pass them upstream to the caller in pth_high.c functions.
  +      [Ralf S. Engelschall, NetBSD pkgsrc patches]
  +
      *) Fix syscall wrapper for sendto(2).
         [NetBSD pkgsrc patches]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_high.c
  ============================================================================
  $ cvs diff -u -r1.107 -r1.108 pth_high.c
  --- ossp-pkg/pth/pth_high.c	12 Sep 2004 11:52:33 -0000	1.107
  +++ ossp-pkg/pth/pth_high.c	12 Sep 2004 12:18:23 -0000	1.108
  @@ -60,7 +60,8 @@
       pth_time_add(&until, &offset);
   
       /* and let thread sleep until this time is elapsed */
  -    ev = pth_event(PTH_EVENT_TIME|PTH_MODE_STATIC, &ev_key, until);
  +    if ((ev = pth_event(PTH_EVENT_TIME|PTH_MODE_STATIC, &ev_key, until)) == NULL)
  +        return pth_error(-1, errno);
       pth_wait(ev);
   
       /* optionally provide amount of slept time */
  @@ -92,7 +93,8 @@
       pth_time_add(&until, &offset);
   
       /* and let thread sleep until this time is elapsed */
  -    ev = pth_event(PTH_EVENT_TIME|PTH_MODE_STATIC, &ev_key, until);
  +    if ((ev = pth_event(PTH_EVENT_TIME|PTH_MODE_STATIC, &ev_key, until)) == NULL)
  +        return pth_error(-1, errno);
       pth_wait(ev);
   
       return 0;
  @@ -116,7 +118,8 @@
       pth_time_add(&until, &offset);
   
       /* and let thread sleep until this time is elapsed */
  -    ev = pth_event(PTH_EVENT_TIME|PTH_MODE_STATIC, &ev_key, until);
  +    if ((ev = pth_event(PTH_EVENT_TIME|PTH_MODE_STATIC, &ev_key, until)) == NULL)
  +        return sec;
       pth_wait(ev);
   
       return 0;
  @@ -166,7 +169,8 @@
       }
   
       /* create event and wait on it */
  -    ev = pth_event(PTH_EVENT_SIGS|PTH_MODE_STATIC, &ev_key, set, sigp);
  +    if ((ev = pth_event(PTH_EVENT_SIGS|PTH_MODE_STATIC, &ev_key, set, sigp)) == NULL)
  +        return pth_error(errno, errno);
       if (ev_extra != NULL)
           pth_event_concat(ev, ev_extra, NULL);
       pth_wait(ev);
  @@ -619,7 +623,8 @@
   
       /* if it is still on progress wait until socket is really writeable */
       if (rv == -1 && errno == EINPROGRESS && fdmode != PTH_FDMODE_NONBLOCK) {
  -        ev = pth_event(PTH_EVENT_FD|PTH_UNTIL_FD_WRITEABLE|PTH_MODE_STATIC, &ev_key, s);
  +        if ((ev = pth_event(PTH_EVENT_FD|PTH_UNTIL_FD_WRITEABLE|PTH_MODE_STATIC, &ev_key, s)) == NULL)
  +            return pth_error(-1, errno);
           if (ev_extra != NULL)
               pth_event_concat(ev, ev_extra, NULL);
           pth_wait(ev);
  @@ -672,7 +677,8 @@
              && fdmode != PTH_FDMODE_NONBLOCK) {
           /* do lazy event allocation */
           if (ev == NULL) {
  -            ev = pth_event(PTH_EVENT_FD|PTH_UNTIL_FD_READABLE|PTH_MODE_STATIC, &ev_key, s);
  +            if ((ev = pth_event(PTH_EVENT_FD|PTH_UNTIL_FD_READABLE|PTH_MODE_STATIC, &ev_key, s)) == NULL)
  +                return pth_error(-1, errno);
               if (ev_extra != NULL)
                   pth_event_concat(ev, ev_extra, NULL);
           }
  @@ .

From ossp-cvs-owner@ossp.org  Sun Sep 12 14:33:04 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BBFF3764A8; Sun, 12 Sep 2004 14:33:03 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog pth_syscall.c
Message-Id: <20040912123303.BBFF3764A8@mail.ossp.org>
Date: Sun, 12 Sep 2004 14:33:03 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Sep-2004 14:33:03
  Branch: HEAD                             Handle: 2004091213330300

  Modified files:
    ossp-pkg/pth            ChangeLog pth_syscall.c

  Log:
    Added hard syscall wrappers for send(2) and recv(2).
    
    Obtained from: NetBSD pkgsrc patches

  Summary:
    Revision    Changes     Path
    1.624       +3  -0      ossp-pkg/pth/ChangeLog
    1.32        +48 -0      ossp-pkg/pth/pth_syscall.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.623 -r1.624 ChangeLog
  --- ossp-pkg/pth/ChangeLog	12 Sep 2004 12:18:22 -0000	1.623
  +++ ossp-pkg/pth/ChangeLog	12 Sep 2004 12:33:03 -0000	1.624
  @@ -21,6 +21,9 @@
                     
     Changes between 2.0.1 and 2.0.2 (13-Jul-2003 to 12-Sep-2004)
   
  +   *) Added hard syscall wrappers for send(2) and recv(2).
  +      [NetBSD pkgsrc patches]
  +
      *) Internally handle errors returned from pth_event() in order
         to pass them upstream to the caller in pth_high.c functions.
         [Ralf S. Engelschall, NetBSD pkgsrc patches]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_syscall.c
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 pth_syscall.c
  --- ossp-pkg/pth/pth_syscall.c	12 Sep 2004 12:02:50 -0000	1.31
  +++ ossp-pkg/pth/pth_syscall.c	12 Sep 2004 12:33:03 -0000	1.32
  @@ -629,6 +629,54 @@
   /* NOTICE: internally fully emulated, so still no
      internal exit point pth_sc_pwrite necessary! */
   
  +/* ==== Pth hard syscall wrapper for recv(2) ==== */
  +ssize_t recv(int, void *, size_t, int);
  +ssize_t recv(int fd, void *buf, size_t nbytes, int flags)
  +{
  +    /* external entry point for application */
  +    pth_implicit_init();
  +    return pth_recv(fd, buf, nbytes, flags);
  +}
  +intern ssize_t pth_sc_recv(int fd, void *buf, size_t nbytes, int flags)
  +{
  +    /* internal exit point for Pth */
  +    if (pth_syscall_fct_tab[PTH_SCF_recv].addr != NULL)
  +        return ((ssize_t (*)(int, void *, size_t, int))
  +               pth_syscall_fct_tab[PTH_SCF_recv].addr)
  +               (fd, buf, nbytes, flags);
  +#if defined(HAVE_SYSCALL) && defined(SYS_recv)
  +    else return (ssize_t)syscall(SYS_recv, fd, buf, nbytes, flags);
  +#elif defined(HAVE_SYSCALL) && defined(SYS_recvfrom)
  +    else return (ssize_t)syscall(SYS_recvfrom, fd, buf, nbytes, flags, (struct sockaddr *)NULL, (socklen_t *)NULL);
  +#else
  +    else PTH_SYSCALL_ERROR(-1, ENOSYS, "recv");
  +#endif
  +}
  +
  +/* ==== Pth hard syscall wrapper for send(2) ==== */
  +ssize_t send(int, void *, size_t, int);
  +ssize_t send(int fd, void *buf, size_t nbytes, int flags)
  +{
  +    /* external entry point for application */
  +    pth_implicit_init();
  +    return pth_send(fd, buf, nbytes, flags);
  +}
  +intern ssize_t pth_sc_send(int fd, void *buf, size_t nbytes, int flags)
  +{
  +    /* internal exit point for Pth */
  +    if (pth_syscall_fct_tab[PTH_SCF_send].addr != NULL)
  +        return ((ssize_t (*)(int, void *, size_t, int))
  +               pth_syscall_fct_tab[PTH_SCF_send].addr)
  +               (fd, buf, nbytes, flags);
  +#if defined(HAVE_SYSCALL) && defined(SYS_send)
  +    else return (ssize_t)syscall(SYS_send, fd, buf, nbytes, flags);
  +#elif defined(HAVE_SYSCALL) && defined(SYS_sendto)
  +    else return (ssize_t)syscall(SYS_sendto, fd, buf, nbytes, flags, (struct sockaddr *)NULL, 0);
  +#else
  +    else PTH_SYSCALL_ERROR(-1, ENOSYS, "send");
  +#endif
  +}
  +
   /* ==== Pth hard syscall wrapper for recvfrom(2) ==== */
   ssize_t recvfrom(int, void *, size_t, int, struct sockaddr *, socklen_t *);
   ssize_t recvfrom(int fd, void *buf, size_t nbytes, int flags, struct sockaddr *from, socklen_t *fromlen)
  @@ .

From ossp-cvs-owner@ossp.org  Sun Sep 12 14:55:20 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 07F0C76476; Sun, 12 Sep 2004 14:55:19 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20040912125519.07F0C76476@mail.ossp.org>
Date: Sun, 12 Sep 2004 14:55:19 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   12-Sep-2004 14:55:19
  Branch: HEAD                             Handle: 2004091213551801

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/pth    index.wml

  Log:
    release GNU pth 2.0.2

  Summary:
    Revision    Changes     Path
    1.95        +1  -0      ossp-web/new/news.txt
    1.81        +1  -1      ossp-web/pkg/lib/index.wml
    1.13        +2  -2      ossp-web/pkg/lib/pth/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.94 -r1.95 news.txt
  --- ossp-web/new/news.txt	11 Sep 2004 15:31:06 -0000	1.94
  +++ ossp-web/new/news.txt	12 Sep 2004 12:55:18 -0000	1.95
  @@ -1,3 +1,4 @@
  +12-Sep-2004: Released L<GNU pth> 2.0.2
   09-Sep-2004: Released T<OSSP iselect> 1.3.0
   11-Aug-2004: Released T<GNU shtool> 2.0.1
   16-Jul-2004: Released L<OSSP uuid> 1.0.1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.80 -r1.81 index.wml
  --- ossp-web/pkg/lib/index.wml	16 Jul 2004 21:18:32 -0000	1.80
  +++ ossp-web/pkg/lib/index.wml	12 Sep 2004 12:55:18 -0000	1.81
  @@ -15,7 +15,7 @@
   <pkg_list>
     <pkg_item name="pth" longname="GNU pth" type="lib"
               desc="Portable Threads"
  -			done=100 stable=2.0.1 unstable=none>
  +			done=100 stable=2.0.2 unstable=none>
     <pkg_item name="mm" longname="OSSP mm" type="lib"
               desc="Shared Memory Allocation"
   			done=100 stable=1.3.0 unstable=none>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/pth/index.wml
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 index.wml
  --- ossp-web/pkg/lib/pth/index.wml	13 Jul 2004 11:10:07 -0000	1.12
  +++ ossp-web/pkg/lib/pth/index.wml	12 Sep 2004 12:55:19 -0000	1.13
  @@ -61,7 +61,7 @@
   
   <pkg_status
       name="pth" assign="rse"
  -    stable="2.0.1" stable_date="13-Jul-2004"
  +    stable="2.0.2" stable_date="12-Sep-2004"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -72,7 +72,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/pth/
       directory=$(FTP_ROOT_DIR)/pkg/lib/pth/
       files="pth-*.tar.gz" 
  -	stable="pth-2\\\\\\\.0\\\\\\\.1\\\\\\\.tar\.gz" unstable="none">
  +	stable="pth-2\\\\\\\.0\\\\\\\.2\\\\\\\.tar\.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Sep 12 16:21:02 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A61647650E; Sun, 12 Sep 2004 16:21:01 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog devtool.conf uuid.pod
Message-Id: <20040912142101.A61647650E@mail.ossp.org>
Date: Sun, 12 Sep 2004 16:21:01 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Sep-2004 16:21:01
  Branch: HEAD                             Handle: 2004091215210001

  Modified files:
    ossp-pkg/uuid           ChangeLog devtool.conf uuid.pod

  Log:
    Upgrade build environment to GNU libtool 1.5.8 and GNU shtool 2.0.1;
    use FreeBSD 6-CURRENT URL in manpage

  Summary:
    Revision    Changes     Path
    1.52        +5  -0      ossp-pkg/uuid/ChangeLog
    1.9         +2  -2      ossp-pkg/uuid/devtool.conf
    1.19        +1  -1      ossp-pkg/uuid/uuid.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.51 -r1.52 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	16 Jul 2004 21:05:33 -0000	1.51
  +++ ossp-pkg/uuid/ChangeLog	12 Sep 2004 14:21:00 -0000	1.52
  @@ -11,6 +11,11 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 1.0.1 and 1.0.2 (16-Jul-2004 to 12-Sep-2004)
  +
  +   o Upgrade build environment to GNU libtool 1.5.8 and GNU shtool 2.0.1
  +     [Ralf S. Engelschall]
  +
     Changes between 1.0.0 and 1.0.1 (16-Feb-2004 to 16-Jul-2004)
   
      o Made documentation of uuid_export() more clear.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 devtool.conf
  --- ossp-pkg/uuid/devtool.conf	16 Jul 2004 21:05:33 -0000	1.8
  +++ ossp-pkg/uuid/devtool.conf	12 Sep 2004 14:21:01 -0000	1.9
  @@ -3,8 +3,8 @@
   ##
   
   %autogen
  -    @autogen shtool   2.0.0 "2.0.*" all
  -    @autogen libtool  1.5.6 "1.5*"
  +    @autogen shtool   2.0.1 "2.0.*" all
  +    @autogen libtool  1.5.8 "1.5*"
       @autogen autoconf 2.59  "2.5[3-9]*"
   
   %autoclean
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	16 Jul 2004 21:04:30 -0000	1.18
  +++ ossp-pkg/uuid/uuid.pod	12 Sep 2004 14:21:01 -0000	1.19
  @@ -425,7 +425,7 @@
   
   B<DCE 1.1 compliant UUID functions>,
   FreeBSD manual pages uuid(3) and uuidgen(2),
  -http://www.freebsd.org/cgi/man.cgi?query=uuid&manpath=FreeBSD+5.2-RELEASE
  +http://www.freebsd.org/cgi/man.cgi?query=uuid&manpath=FreeBSD+6.0-current
   
   =back
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Sep 12 17:23:36 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D50B476585; Sun, 12 Sep 2004 17:23:35 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ README uuid_vers.h
Message-Id: <20040912152335.D50B476585@mail.ossp.org>
Date: Sun, 12 Sep 2004 17:23:35 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Sep-2004 17:23:35
  Branch: HEAD                             Handle: 2004091216233500

  Modified files:
    ossp-pkg/uuid           README uuid_vers.h

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.17        +1  -1      ossp-pkg/uuid/README
    1.8         +9  -9      ossp-pkg/uuid/uuid_vers.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 README
  --- ossp-pkg/uuid/README	16 Jul 2004 21:14:01 -0000	1.16
  +++ ossp-pkg/uuid/README	12 Sep 2004 15:23:35 -0000	1.17
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
   
     OSSP uuid - Universally Unique Identifier
  -  Version 1.0.1 (16-Jul-2004)
  +  Version 1.0.2 (12-Sep-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_vers.h
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 uuid_vers.h
  --- ossp-pkg/uuid/uuid_vers.h	16 Jul 2004 21:14:01 -0000	1.7
  +++ ossp-pkg/uuid/uuid_vers.h	12 Sep 2004 15:23:35 -0000	1.8
  @@ -8,7 +8,7 @@
   #ifndef _UUID_VERS_H_
   #define _UUID_VERS_H_
   
  -#define _UUID_VERSION 0x100201
  +#define _UUID_VERSION 0x100202
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _UUID_VERS_H_AS_HEADER_
   
   _uuid_version_t _uuid_version = {
  -    0x100201,
  -    "1.0.1",
  -    "1.0.1 (16-Jul-2004)",
  -    "This is OSSP uuid, Version 1.0.1 (16-Jul-2004)",
  -    "OSSP uuid 1.0.1 (16-Jul-2004)",
  -    "OSSP uuid/1.0.1",
  -    "@(#)OSSP uuid 1.0.1 (16-Jul-2004)",
  -    "$Id: OSSP uuid 1.0.1 (16-Jul-2004) $"
  +    0x100202,
  +    "1.0.2",
  +    "1.0.2 (12-Sep-2004)",
  +    "This is OSSP uuid, Version 1.0.2 (12-Sep-2004)",
  +    "OSSP uuid 1.0.2 (12-Sep-2004)",
  +    "OSSP uuid/1.0.2",
  +    "@(#)OSSP uuid 1.0.2 (12-Sep-2004)",
  +    "$Id: OSSP uuid 1.0.2 (12-Sep-2004) $"
   };
   
   #endif /* _UUID_VERS_H_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Sun Sep 12 17:28:06 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A237276586; Sun, 12 Sep 2004 17:28:06 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20040912152806.A237276586@mail.ossp.org>
Date: Sun, 12 Sep 2004 17:28:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   12-Sep-2004 17:28:06
  Branch: HEAD                             Handle: 2004091216280401

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/uuid   index.wml

  Log:
    release OSSP uuid 1.0.2

  Summary:
    Revision    Changes     Path
    1.96        +1  -0      ossp-web/new/news.txt
    1.82        +1  -1      ossp-web/pkg/lib/index.wml
    1.15        +2  -2      ossp-web/pkg/lib/uuid/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.95 -r1.96 news.txt
  --- ossp-web/new/news.txt	12 Sep 2004 12:55:18 -0000	1.95
  +++ ossp-web/new/news.txt	12 Sep 2004 15:28:04 -0000	1.96
  @@ -1,3 +1,4 @@
  +12-Sep-2004: Released L<OSSP uuid> 1.0.2
   12-Sep-2004: Released L<GNU pth> 2.0.2
   09-Sep-2004: Released T<OSSP iselect> 1.3.0
   11-Aug-2004: Released T<GNU shtool> 2.0.1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.81 -r1.82 index.wml
  --- ossp-web/pkg/lib/index.wml	12 Sep 2004 12:55:18 -0000	1.81
  +++ ossp-web/pkg/lib/index.wml	12 Sep 2004 15:28:05 -0000	1.82
  @@ -33,7 +33,7 @@
   			done=100 stable=1.1.0 unstable=none>
     <pkg_item name="uuid" longname="OSSP uuid" type="lib"
               desc="Universally Unique Identifier"
  -			done=100 stable=1.0.1 unstable=none>
  +			done=100 stable=1.0.2 unstable=none>
     <pkg_item name="val" longname="OSSP val" type="lib"
               desc="Value Access"
   			done=95 stable=none unstable=0.9.2>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/uuid/index.wml
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 index.wml
  --- ossp-web/pkg/lib/uuid/index.wml	16 Jul 2004 21:18:33 -0000	1.14
  +++ ossp-web/pkg/lib/uuid/index.wml	12 Sep 2004 15:28:05 -0000	1.15
  @@ -43,7 +43,7 @@
   
   <pkg_status
       name="uuid" assign="rse"
  -    stable="1.0.1"    stable_date="16-Jul-2004"
  +    stable="1.0.2"    stable_date="12-Sep-2004"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -54,7 +54,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/uuid/
       directory=$(FTP_ROOT_DIR)/pkg/lib/uuid/
       files="uuid-[0-9.]*.tar.gz" 
  -	stable="uuid-1\.0\.1\.tar\.gz" unstable="none">
  +	stable="uuid-1\.0\.2\.tar\.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Sep 12 18:08:45 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CFCBF76436; Sun, 12 Sep 2004 18:08:44 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ USERS
Message-Id: <20040912160844.CFCBF76436@mail.ossp.org>
Date: Sun, 12 Sep 2004 18:08:44 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Sep-2004 18:08:44
  Branch: HEAD                             Handle: 2004091217084400

  Added files:
    ossp-pkg/uuid           USERS

  Log:
    remember the first users of OSSP uuid

  Summary:
    Revision    Changes     Path
    1.1         +25 -0      ossp-pkg/uuid/USERS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/USERS
  ============================================================================
  $ cvs diff -u -r0 -r1.1 USERS
  --- /dev/null	2004-09-12 18:08:44 +0200
  +++ USERS	2004-09-12 18:08:44 +0200
  @@ -0,0 +1,25 @@
  +   _        ___  ____ ____  ____                _     _
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _   _ _   _(_) __| |
  +  _|_||_| | | | \___ \___ \| |_) | | | | | | | | |/ _` |
  + |_||_|_| | |_| |___) |__) |  __/  | |_| | |_| | | (_| |
  +  |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
  +
  +  OSSP uuid - Universally Unique Identifier
  +
  +  USERS
  +
  +  OSSP uuid is known to be used by at least the following
  +  Open Source software packages:
  +
  +  o Aegis
  +    Software Configuration Management (SCM) System
  +    http://aegis.sourceforge.net/
  +
  +  o Heartbeat
  +    Core component of the High-Availability Linux (Linux-HA) project
  +    http://linux-ha.org/heartbeat/
  +
  +  o GAT
  +    Grid Application Toolkit (GAT) 
  +    https://www.gridlab.org/WorkPackages/wp-1/ 
  +
  @@ .

From ossp-cvs-owner@ossp.org  Sun Sep 12 19:07:23 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2100676587; Sun, 12 Sep 2004 19:07:23 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/xds/ ChangeLog devtool.conf
Message-Id: <20040912170723.2100676587@mail.ossp.org>
Date: Sun, 12 Sep 2004 19:07:23 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Sep-2004 19:07:22
  Branch: HEAD                             Handle: 2004091218072200

  Modified files:
    ossp-pkg/xds            ChangeLog devtool.conf

  Log:
    Upgraded build environment to GNU shtool 2.0.1,
    GNU libtool 1.5.8 and GNU autoconf 2.59

  Summary:
    Revision    Changes     Path
    1.3         +6  -0      ossp-pkg/xds/ChangeLog
    1.6         +3  -3      ossp-pkg/xds/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ChangeLog
  --- ossp-pkg/xds/ChangeLog	17 Feb 2003 12:22:43 -0000	1.2
  +++ ossp-pkg/xds/ChangeLog	12 Sep 2004 17:07:22 -0000	1.3
  @@ -11,6 +11,12 @@
     This is a list of all source changes to OSSP xds.
     For less details please have a look at the NEWS file.
   
  +  Changes between 0.9.0 and 0.9.1 (17-Feb-2003 to 12-Sep-2004)
  +
  +   o Upgraded build environment to GNU shtool 2.0.1,
  +     GNU libtool 1.5.8 and GNU autoconf 2.59
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
     Changes between GENSIS and 0.9.0 (xx-Mar-2001 to 17-Feb-2003)
   
      o Upgraded devtool stuff.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 devtool.conf
  --- ossp-pkg/xds/devtool.conf	17 Feb 2003 12:36:02 -0000	1.5
  +++ ossp-pkg/xds/devtool.conf	12 Sep 2004 17:07:22 -0000	1.6
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.2 "1.6.*" all
  -    @autogen libtool  1.4.3 "1.4*"
  -    @autogen autoconf 2.57  "2.5[3-9]*"
  +    @autogen shtool   2.0.1 "2.0.*" all
  +    @autogen libtool  1.5.8 "1.5*"
  +    @autogen autoconf 2.59  "2.5[3-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .

From ossp-cvs-owner@ossp.org  Sun Sep 12 19:20:37 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6CCEC7658A; Sun, 12 Sep 2004 19:20:37 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/xds/ ChangeLog devtool.conf xds_engine_xdr.c xds_...
Message-Id: <20040912172037.6CCEC7658A@mail.ossp.org>
Date: Sun, 12 Sep 2004 19:20:37 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Sep-2004 19:20:37
  Branch: HEAD                             Handle: 2004091218203600

  Modified files:
    ossp-pkg/xds            ChangeLog devtool.conf xds_engine_xdr.c
                            xds_engine_xml.c

  Log:
    Fixed a few size_t/int conflicts and uninitialized value warnings.

  Summary:
    Revision    Changes     Path
    1.4         +3  -0      ossp-pkg/xds/ChangeLog
    1.7         +1  -1      ossp-pkg/xds/devtool.conf
    1.14        +2  -2      ossp-pkg/xds/xds_engine_xdr.c
    1.12        +11 -5      ossp-pkg/xds/xds_engine_xml.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ChangeLog
  --- ossp-pkg/xds/ChangeLog	12 Sep 2004 17:07:22 -0000	1.3
  +++ ossp-pkg/xds/ChangeLog	12 Sep 2004 17:20:36 -0000	1.4
  @@ -13,6 +13,9 @@
   
     Changes between 0.9.0 and 0.9.1 (17-Feb-2003 to 12-Sep-2004)
   
  +   o Fixed a few size_t/int conflicts and uninitialized value warnings.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
      o Upgraded build environment to GNU shtool 2.0.1,
        GNU libtool 1.5.8 and GNU autoconf 2.59
        [Ralf S. Engelschall <rse@engelschall.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 devtool.conf
  --- ossp-pkg/xds/devtool.conf	12 Sep 2004 17:07:22 -0000	1.6
  +++ ossp-pkg/xds/devtool.conf	12 Sep 2004 17:20:36 -0000	1.7
  @@ -13,7 +13,7 @@
       @autoclean autoconf
   
   %configure
  -    ./configure \
  +    CC=gcc35 ./configure \
           --prefix=/tmp/xds \
           --disable-shared \
           --enable-maintainer \
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds_engine_xdr.c
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 xds_engine_xdr.c
  --- ossp-pkg/xds/xds_engine_xdr.c	17 Feb 2003 12:36:02 -0000	1.13
  +++ ossp-pkg/xds/xds_engine_xdr.c	12 Sep 2004 17:20:36 -0000	1.14
  @@ -377,7 +377,7 @@
   		     void *buffer, size_t buffer_size,
   		     size_t *used_buffer_size, va_list *args)
   {
  -    myfloat_t   value;
  +    myfloat_t   value = { 0, 0, 0 };
       xds_uint8_t tmp;
   
       xds_init_encoding_engine(4);
  @@ -536,7 +536,7 @@
   		     void *buffer, size_t buffer_size,
   		     size_t *used_buffer_size, va_list *args)
   {
  -    mydouble_t   value;
  +    mydouble_t   value = { 0, 0, 0 };
       xds_uint16_t tmp;
   
       xds_init_encoding_engine(8);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds_engine_xml.c
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 xds_engine_xml.c
  --- ossp-pkg/xds/xds_engine_xml.c	17 Feb 2003 12:36:02 -0000	1.11
  +++ ossp-pkg/xds/xds_engine_xml.c	12 Sep 2004 17:20:36 -0000	1.12
  @@ -434,14 +434,17 @@
   int xml_decode_float(xds_t *xds, void *engine_context,
                         void *buffer, size_t buffer_size,
                         size_t *used_buffer_size, va_list *args)
  -    {
  +{
  +    int size;
       xds_init_decoding_engine(7 + 8 + 1);
       if (sscanf(buffer, "<float>%f</float>%n",
  -	       va_arg(*args, float*), used_buffer_size) != 1)
  +	       va_arg(*args, float*), &size) != 1)
   	return XDS_ERR_TYPE_MISMATCH;
  -    else
  +    else {
  +        *used_buffer_size = size;
   	return XDS_OK;
       }
  +}
   
   /*
    * Encode/decode double-precision floating point values.
  @@ -464,12 +467,15 @@
                         void *buffer, size_t buffer_size,
                         size_t *used_buffer_size, va_list *args)
   {
  +    int size;
       xds_init_decoding_engine(8 + 9 + 1);
       if (sscanf(buffer, "<double>%lf</double>%n",
  -	       va_arg(*args, double*), used_buffer_size) != 1)
  +	       va_arg(*args, double*), &size) != 1)
   	return XDS_ERR_TYPE_MISMATCH;
  -    else
  +    else {
  +        *used_buffer_size = size;
   	return XDS_OK;
  +    }
   }
   
   /*
  @@ .

From ossp-cvs-owner@ossp.org  Sun Sep 12 19:32:17 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2304C76476; Sun, 12 Sep 2004 19:32:17 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/xds/ ChangeLog LICENSE Makefile.in README aclocal...
Message-Id: <20040912173217.2304C76476@mail.ossp.org>
Date: Sun, 12 Sep 2004 19:32:17 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Sep-2004 19:32:17
  Branch: HEAD                             Handle: 2004091218321400

  Modified files:
    ossp-pkg/xds            ChangeLog LICENSE Makefile.in README aclocal.m4
                            configure.ac xds-config.in xds-config.pod
                            xds-xml.dtd xds.c xds.h.in xds.m4 xds.pod
                            xds_engine_xdr.c xds_engine_xml.c xds_p.h
                            xds_test.sh xds_test_lib.c xds_test_xdr.c
                            xds_test_xml.c

  Log:
    Bumped year in copyright messages for year 2004.

  Summary:
    Revision    Changes     Path
    1.5         +3  -0      ossp-pkg/xds/ChangeLog
    1.7         +3  -3      ossp-pkg/xds/LICENSE
    1.40        +3  -3      ossp-pkg/xds/Makefile.in
    1.10        +3  -3      ossp-pkg/xds/README
    1.8         +3  -3      ossp-pkg/xds/aclocal.m4
    1.27        +6  -6      ossp-pkg/xds/configure.ac
    1.7         +3  -3      ossp-pkg/xds/xds-config.in
    1.7         +3  -3      ossp-pkg/xds/xds-config.pod
    1.7         +3  -3      ossp-pkg/xds/xds-xml.dtd
    1.12        +3  -3      ossp-pkg/xds/xds.c
    1.23        +3  -3      ossp-pkg/xds/xds.h.in
    1.7         +3  -3      ossp-pkg/xds/xds.m4
    1.19        +3  -3      ossp-pkg/xds/xds.pod
    1.15        +3  -3      ossp-pkg/xds/xds_engine_xdr.c
    1.13        +3  -3      ossp-pkg/xds/xds_engine_xml.c
    1.11        +3  -3      ossp-pkg/xds/xds_p.h
    1.9         +3  -3      ossp-pkg/xds/xds_test.sh
    1.12        +3  -3      ossp-pkg/xds/xds_test_lib.c
    1.13        +3  -3      ossp-pkg/xds/xds_test_xdr.c
    1.11        +3  -3      ossp-pkg/xds/xds_test_xml.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ChangeLog
  --- ossp-pkg/xds/ChangeLog	12 Sep 2004 17:20:36 -0000	1.4
  +++ ossp-pkg/xds/ChangeLog	12 Sep 2004 17:32:14 -0000	1.5
  @@ -16,6 +16,9 @@
      o Fixed a few size_t/int conflicts and uninitialized value warnings.
        [Ralf S. Engelschall <rse@engelschall.com>]
   
  +   o Bumped year in copyright messages for year 2004.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
      o Upgraded build environment to GNU shtool 2.0.1,
        GNU libtool 1.5.8 and GNU autoconf 2.59
        [Ralf S. Engelschall <rse@engelschall.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/LICENSE
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 LICENSE
  --- ossp-pkg/xds/LICENSE	17 Feb 2003 12:36:02 -0000	1.6
  +++ ossp-pkg/xds/LICENSE	12 Sep 2004 17:32:14 -0000	1.7
  @@ -1,9 +1,9 @@
   
   OSSP xds - Extensible Data Serialization
   
  -Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  -Copyright (c) 2001-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +Copyright (c) 2001-2004 Cable & Wireless Deutschland <http://www.cw.com/de/>
   
   This file is part of OSSP xds, an extensible data serialization
   library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.39 -r1.40 Makefile.in
  --- ossp-pkg/xds/Makefile.in	17 Feb 2003 12:36:02 -0000	1.39
  +++ ossp-pkg/xds/Makefile.in	12 Sep 2004 17:32:14 -0000	1.40
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP xds - Extensible Data Serialization
  -##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP xds, an extensible data serialization
   ##  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/README
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 README
  --- ossp-pkg/xds/README	17 Feb 2003 12:51:58 -0000	1.9
  +++ ossp-pkg/xds/README	12 Sep 2004 17:32:14 -0000	1.10
  @@ -20,9 +20,9 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  -  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   
     This file is part of OSSP xds, an extensible data serialization
     library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 aclocal.m4
  --- ossp-pkg/xds/aclocal.m4	17 Feb 2003 12:36:02 -0000	1.7
  +++ ossp-pkg/xds/aclocal.m4	12 Sep 2004 17:32:14 -0000	1.8
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP xds - Extensible Data Serialization
  -dnl ##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   dnl ##
   dnl ##  This file is part of OSSP xds, an extensible data serialization
   dnl ##  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/configure.ac
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 configure.ac
  --- ossp-pkg/xds/configure.ac	17 Feb 2003 12:36:02 -0000	1.26
  +++ ossp-pkg/xds/configure.ac	12 Sep 2004 17:32:14 -0000	1.27
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP xds - Extensible Data Serialization
  -dnl ##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   dnl ##
   dnl ##  This file is part of OSSP xds, an extensible data serialization
   dnl ##  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ -34,9 +34,9 @@
   AC_HEADLINE(dnl
   OSSP xds, eXtensible Data Serialization, dnl
   XDS_VERSION, xds_version.c, dnl
  -[Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  -Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>])
  +[Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>])
   AC_PLATFORM(PLATFORM)
   
   AC_MSG_PART(Build Tools)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds-config.in
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 xds-config.in
  --- ossp-pkg/xds/xds-config.in	17 Feb 2003 12:36:02 -0000	1.6
  +++ ossp-pkg/xds/xds-config.in	12 Sep 2004 17:32:14 -0000	1.7
  @@ -1,9 +1,9 @@
   #!/bin/sh
   ##
   ##  OSSP xds - Extensible Data Serialization
  -##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP xds, an extensible data serialization
   ##  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds-config.pod
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 xds-config.pod
  --- ossp-pkg/xds/xds-config.pod	17 Feb 2003 12:36:02 -0000	1.6
  +++ ossp-pkg/xds/xds-config.pod	12 Sep 2004 17:32:14 -0000	1.7
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP xds - Extensible Data Serialization
  -##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP xds, an extensible data serialization
   ##  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds-xml.dtd
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 xds-xml.dtd
  --- ossp-pkg/xds/xds-xml.dtd	17 Feb 2003 12:36:02 -0000	1.6
  +++ ossp-pkg/xds/xds-xml.dtd	12 Sep 2004 17:32:14 -0000	1.7
  @@ -1,8 +1,8 @@
   <!-- ===========================================================
        OSSP xds - Extensible Data Serialization
  -     Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -     Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  -     Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +     Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +     Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +     Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   
        This file is part of OSSP xds, an extensible data serialization
        library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds.c
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 xds.c
  --- ossp-pkg/xds/xds.c	17 Feb 2003 12:36:02 -0000	1.11
  +++ ossp-pkg/xds/xds.c	12 Sep 2004 17:32:14 -0000	1.12
  @@ -1,8 +1,8 @@
   /*
   **  OSSP xds - Extensible Data Serialization
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP xds, an extensible data serialization
   **  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds.h.in
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 xds.h.in
  --- ossp-pkg/xds/xds.h.in	17 Feb 2003 12:36:02 -0000	1.22
  +++ ossp-pkg/xds/xds.h.in	12 Sep 2004 17:32:14 -0000	1.23
  @@ -1,8 +1,8 @@
   /*
   **  OSSP xds - Extensible Data Serialization
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP xds, an extensible data serialization
   **  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds.m4
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 xds.m4
  --- ossp-pkg/xds/xds.m4	17 Feb 2003 12:36:02 -0000	1.6
  +++ ossp-pkg/xds/xds.m4	12 Sep 2004 17:32:14 -0000	1.7
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP xds - Extensible Data Serialization
  -dnl ##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   dnl ##
   dnl ##  This file is part of OSSP xds, an extensible data serialization
   dnl ##  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds.pod
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 xds.pod
  --- ossp-pkg/xds/xds.pod	17 Feb 2003 12:51:58 -0000	1.18
  +++ ossp-pkg/xds/xds.pod	12 Sep 2004 17:32:14 -0000	1.19
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP xds - Extensible Data Serialization
  -##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP xds, an extensible data serialization
   ##  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds_engine_xdr.c
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 xds_engine_xdr.c
  --- ossp-pkg/xds/xds_engine_xdr.c	12 Sep 2004 17:20:36 -0000	1.14
  +++ ossp-pkg/xds/xds_engine_xdr.c	12 Sep 2004 17:32:14 -0000	1.15
  @@ -1,8 +1,8 @@
   /*
   **  OSSP xds - Extensible Data Serialization
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP xds, an extensible data serialization
   **  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds_engine_xml.c
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 xds_engine_xml.c
  --- ossp-pkg/xds/xds_engine_xml.c	12 Sep 2004 17:20:36 -0000	1.12
  +++ ossp-pkg/xds/xds_engine_xml.c	12 Sep 2004 17:32:14 -0000	1.13
  @@ -1,8 +1,8 @@
   /*
   **  OSSP xds - Extensible Data Serialization
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP xds, an extensible data serialization
   **  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds_p.h
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 xds_p.h
  --- ossp-pkg/xds/xds_p.h	17 Feb 2003 12:36:02 -0000	1.10
  +++ ossp-pkg/xds/xds_p.h	12 Sep 2004 17:32:14 -0000	1.11
  @@ -1,8 +1,8 @@
   /*
   **  OSSP xds - Extensible Data Serialization
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP xds, an extensible data serialization
   **  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds_test.sh
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 xds_test.sh
  --- ossp-pkg/xds/xds_test.sh	17 Feb 2003 12:36:02 -0000	1.8
  +++ ossp-pkg/xds/xds_test.sh	12 Sep 2004 17:32:14 -0000	1.9
  @@ -1,9 +1,9 @@
   #!/bin/sh
   ##
   ##  OSSP xds - Extensible Data Serialization
  -##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP xds, an extensible data serialization
   ##  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds_test_lib.c
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 xds_test_lib.c
  --- ossp-pkg/xds/xds_test_lib.c	17 Feb 2003 12:36:02 -0000	1.11
  +++ ossp-pkg/xds/xds_test_lib.c	12 Sep 2004 17:32:14 -0000	1.12
  @@ -1,8 +1,8 @@
   /*
   **  OSSP xds - Extensible Data Serialization
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP xds, an extensible data serialization
   **  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds_test_xdr.c
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 xds_test_xdr.c
  --- ossp-pkg/xds/xds_test_xdr.c	17 Feb 2003 12:36:02 -0000	1.12
  +++ ossp-pkg/xds/xds_test_xdr.c	12 Sep 2004 17:32:14 -0000	1.13
  @@ -1,8 +1,8 @@
   /*
   **  OSSP xds - Extensible Data Serialization
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP xds, an extensible data serialization
   **  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds_test_xml.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 xds_test_xml.c
  --- ossp-pkg/xds/xds_test_xml.c	17 Feb 2003 12:36:02 -0000	1.10
  +++ ossp-pkg/xds/xds_test_xml.c	12 Sep 2004 17:32:14 -0000	1.11
  @@ -1,8 +1,8 @@
   /*
   **  OSSP xds - Extensible Data Serialization
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2003 Cable & Wireless Germany <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP xds, an extensible data serialization
   **  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .

From ossp-cvs-owner@ossp.org  Sun Sep 12 19:32:52 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E8AD27659C; Sun, 12 Sep 2004 19:32:51 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/xds/ README xds_version.c
Message-Id: <20040912173251.E8AD27659C@mail.ossp.org>
Date: Sun, 12 Sep 2004 19:32:51 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Sep-2004 19:32:51
  Branch: HEAD                             Handle: 2004091218325100

  Modified files:
    ossp-pkg/xds            README xds_version.c

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.11        +1  -1      ossp-pkg/xds/README
    1.4         +9  -9      ossp-pkg/xds/xds_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/README
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 README
  --- ossp-pkg/xds/README	12 Sep 2004 17:32:14 -0000	1.10
  +++ ossp-pkg/xds/README	12 Sep 2004 17:32:51 -0000	1.11
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     /_/\_\__,_|___/
   
     OSSP xds - eXtensible Data Serialization
  -  Version 0.9.0 (17-Feb-2003)
  +  Version 0.9.1 (12-Sep-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds_version.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 xds_version.c
  --- ossp-pkg/xds/xds_version.c	17 Feb 2003 12:22:43 -0000	1.3
  +++ ossp-pkg/xds/xds_version.c	12 Sep 2004 17:32:51 -0000	1.4
  @@ -8,7 +8,7 @@
   #ifndef _XDS_VERSION_C_
   #define _XDS_VERSION_C_
   
  -#define XDS_VERSION 0x009200
  +#define XDS_VERSION 0x009201
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _XDS_VERSION_C_AS_HEADER_
   
   xds_version_t xds_version = {
  -    0x009200,
  -    "0.9.0",
  -    "0.9.0 (17-Feb-2003)",
  -    "This is OSSP xds, Version 0.9.0 (17-Feb-2003)",
  -    "OSSP xds 0.9.0 (17-Feb-2003)",
  -    "OSSP xds/0.9.0",
  -    "@(#)OSSP xds 0.9.0 (17-Feb-2003)",
  -    "$Id: OSSP xds 0.9.0 (17-Feb-2003) $"
  +    0x009201,
  +    "0.9.1",
  +    "0.9.1 (12-Sep-2004)",
  +    "This is OSSP xds, Version 0.9.1 (12-Sep-2004)",
  +    "OSSP xds 0.9.1 (12-Sep-2004)",
  +    "OSSP xds/0.9.1",
  +    "@(#)OSSP xds 0.9.1 (12-Sep-2004)",
  +    "$Id: OSSP xds 0.9.1 (12-Sep-2004) $"
   };
   
   #endif /* _XDS_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Sun Sep 12 19:34:06 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2092876476; Sun, 12 Sep 2004 19:34:06 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/xds/ xds.pod
Message-Id: <20040912173406.2092876476@mail.ossp.org>
Date: Sun, 12 Sep 2004 19:34:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Sep-2004 19:34:05
  Branch: HEAD                             Handle: 2004091218340500

  Modified files:
    ossp-pkg/xds            xds.pod

  Log:
    Germany is no longer correct

  Summary:
    Revision    Changes     Path
    1.20        +1  -1      ossp-pkg/xds/xds.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds.pod
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 xds.pod
  --- ossp-pkg/xds/xds.pod	12 Sep 2004 17:32:14 -0000	1.19
  +++ ossp-pkg/xds/xds.pod	12 Sep 2004 17:34:05 -0000	1.20
  @@ -614,7 +614,7 @@
   
   B<OSSP var> was initially written by Peter Simons
   E<lt>simons@crypt.toE<gt> in August 2001 under contract with the B<OSSP>
  -sponsor B<Cable & Wireless Germany>.
  +sponsor B<Cable & Wireless>.
   
   =cut
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Sep 12 19:39:29 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8911876476; Sun, 12 Sep 2004 19:39:29 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20040912173929.8911876476@mail.ossp.org>
Date: Sun, 12 Sep 2004 19:39:29 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   12-Sep-2004 19:39:29
  Branch: HEAD                             Handle: 2004091218392701

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/xds    index.wml

  Log:
    release OSSP xds 0.9.1

  Summary:
    Revision    Changes     Path
    1.97        +1  -0      ossp-web/new/news.txt
    1.83        +1  -1      ossp-web/pkg/lib/index.wml
    1.8         +2  -2      ossp-web/pkg/lib/xds/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.96 -r1.97 news.txt
  --- ossp-web/new/news.txt	12 Sep 2004 15:28:04 -0000	1.96
  +++ ossp-web/new/news.txt	12 Sep 2004 17:39:27 -0000	1.97
  @@ -1,3 +1,4 @@
  +12-Sep-2004: Released L<OSSP xds> 0.9.1
   12-Sep-2004: Released L<OSSP uuid> 1.0.2
   12-Sep-2004: Released L<GNU pth> 2.0.2
   09-Sep-2004: Released T<OSSP iselect> 1.3.0
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.82 -r1.83 index.wml
  --- ossp-web/pkg/lib/index.wml	12 Sep 2004 15:28:05 -0000	1.82
  +++ ossp-web/pkg/lib/index.wml	12 Sep 2004 17:39:27 -0000	1.83
  @@ -39,7 +39,7 @@
   			done=95 stable=none unstable=0.9.2>
     <pkg_item name="xds" longname="OSSP xds" type="lib"
               desc="Extensible Data Serialization"
  -			done=95 stable=none unstable=0.9.0>
  +			done=95 stable=none unstable=0.9.1>
     <pkg_item name="str" longname="OSSP str" type="lib"
               desc="String Handling"
   			done=95 stable=none unstable=0.9.9>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/xds/index.wml
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 index.wml
  --- ossp-web/pkg/lib/xds/index.wml	22 Mar 2003 17:46:25 -0000	1.7
  +++ ossp-web/pkg/lib/xds/index.wml	12 Sep 2004 17:39:28 -0000	1.8
  @@ -30,7 +30,7 @@
   <pkg_status
       name="xds" assign="rse"
       stable="none" stable_date="none"
  -    unstable="0.9.0" unstable_date="17-Feb-2003"
  +    unstable="0.9.1" unstable_date="12-Sep-2004"
   	done=100>
   
   <h2>See Also</h2>
  @@ -48,7 +48,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/xds/
       directory=$(FTP_ROOT_DIR)/pkg/lib/xds/
       files="xds-*.tar.gz" 
  -	stable="none" unstable="xds-0.9.0.tar.gz">
  +	stable="none" unstable="xds-0.9.1.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Sep 12 20:13:45 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DEBFB76521; Sun, 12 Sep 2004 20:13:44 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var/ ChangeLog devtool.conf
Message-Id: <20040912181344.DEBFB76521@mail.ossp.org>
Date: Sun, 12 Sep 2004 20:13:44 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Sep-2004 20:13:44
  Branch: HEAD                             Handle: 2004091219134300

  Modified files:
    ossp-pkg/var            ChangeLog devtool.conf

  Log:
    Upgraded build environment to GNU libtool 1.5.8 and GNU shtool 2.0.1

  Summary:
    Revision    Changes     Path
    1.7         +5  -0      ossp-pkg/var/ChangeLog
    1.11        +2  -2      ossp-pkg/var/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ChangeLog
  --- ossp-pkg/var/ChangeLog	4 Apr 2004 09:57:10 -0000	1.6
  +++ ossp-pkg/var/ChangeLog	12 Sep 2004 18:13:43 -0000	1.7
  @@ -11,6 +11,11 @@
     This is a list of all source changes to OSSP var.
     For less details please have a look at the NEWS file.
   
  +  Changes between 1.1.0 and 1.1.1 (04-Apr-2004 to 12-Sep-2004)
  +
  +   o Upgraded build environment to GNU libtool 1.5.8 and GNU shtool 2.0.1
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
     Changes between 1.0.0 and 1.1.0 (14-Feb-2003 to 04-Apr-2004)
   
      o Remove cast warnings related to function point passing.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 devtool.conf
  --- ossp-pkg/var/devtool.conf	4 Apr 2004 09:57:10 -0000	1.10
  +++ ossp-pkg/var/devtool.conf	12 Sep 2004 18:13:43 -0000	1.11
  @@ -3,8 +3,8 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.2 "1.6.*" all
  -    @autogen libtool  1.5.4 "1.5*"
  +    @autogen shtool   2.0.1 "2.0.*" all
  +    @autogen libtool  1.5.8 "1.5*"
       @autogen autoconf 2.59  "2.5[4-9]*"
   
   %autoclean
  @@ .

From ossp-cvs-owner@ossp.org  Sun Sep 12 20:15:04 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7590376521; Sun, 12 Sep 2004 20:15:04 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var/ README VERSION
Message-Id: <20040912181504.7590376521@mail.ossp.org>
Date: Sun, 12 Sep 2004 20:15:04 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Sep-2004 20:15:04
  Branch: HEAD                             Handle: 2004091219150100

  Modified files:
    ossp-pkg/var            README VERSION

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.7         +1  -1      ossp-pkg/var/README
    1.7         +1  -1      ossp-pkg/var/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/README
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 README
  --- ossp-pkg/var/README	4 Apr 2004 09:57:10 -0000	1.6
  +++ ossp-pkg/var/README	12 Sep 2004 18:15:01 -0000	1.7
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|       \_/ \__,_|_|
   
     OSSP var - Variable Expansion
  -  Version 1.1.0 (04-Apr-2004)
  +  Version 1.1.1 (12-Sep-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/VERSION
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 VERSION
  --- ossp-pkg/var/VERSION	4 Apr 2004 09:57:10 -0000	1.6
  +++ ossp-pkg/var/VERSION	12 Sep 2004 18:15:01 -0000	1.7
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP var (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP var, Version 1.1.0 (04-Apr-2004)
  +  This is OSSP var, Version 1.1.1 (12-Sep-2004)
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Sep 12 20:18:49 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4125476546; Sun, 12 Sep 2004 20:18:49 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20040912181849.4125476546@mail.ossp.org>
Date: Sun, 12 Sep 2004 20:18:49 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   12-Sep-2004 20:18:49
  Branch: HEAD                             Handle: 2004091219184503

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/var    index.wml

  Log:
    release OSSP var 1.1.1

  Summary:
    Revision    Changes     Path
    1.98        +1  -0      ossp-web/new/news.txt
    1.84        +1  -1      ossp-web/pkg/lib/index.wml
    1.10        +1  -1      ossp-web/pkg/lib/var/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.97 -r1.98 news.txt
  --- ossp-web/new/news.txt	12 Sep 2004 17:39:27 -0000	1.97
  +++ ossp-web/new/news.txt	12 Sep 2004 18:18:45 -0000	1.98
  @@ -1,3 +1,4 @@
  +12-Sep-2004: Released L<OSSP var> 1.1.1
   12-Sep-2004: Released L<OSSP xds> 0.9.1
   12-Sep-2004: Released L<OSSP uuid> 1.0.2
   12-Sep-2004: Released L<GNU pth> 2.0.2
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.83 -r1.84 index.wml
  --- ossp-web/pkg/lib/index.wml	12 Sep 2004 17:39:27 -0000	1.83
  +++ ossp-web/pkg/lib/index.wml	12 Sep 2004 18:18:46 -0000	1.84
  @@ -30,7 +30,7 @@
   			done=100 stable=1.5.0 unstable=none>
     <pkg_item name="var" longname="OSSP var" type="lib"
               desc="Variable Expansion"
  -			done=100 stable=1.1.0 unstable=none>
  +			done=100 stable=1.1.1 unstable=none>
     <pkg_item name="uuid" longname="OSSP uuid" type="lib"
               desc="Universally Unique Identifier"
   			done=100 stable=1.0.2 unstable=none>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/var/index.wml
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 index.wml
  --- ossp-web/pkg/lib/var/index.wml	4 Apr 2004 10:29:23 -0000	1.9
  +++ ossp-web/pkg/lib/var/index.wml	12 Sep 2004 18:18:48 -0000	1.10
  @@ -51,7 +51,7 @@
   
   <pkg_status
       name="var" assign="rse"
  -    stable="1.1.0" stable_date="04-Apr-2004"
  +    stable="1.1.1" stable_date="12-Sep-2004"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Sep 12 20:20:43 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9072476546; Sun, 12 Sep 2004 20:20:43 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val/ ChangeLog devtool.conf
Message-Id: <20040912182043.9072476546@mail.ossp.org>
Date: Sun, 12 Sep 2004 20:20:43 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Sep-2004 20:20:43
  Branch: HEAD                             Handle: 2004091219204200

  Modified files:
    ossp-pkg/val            ChangeLog devtool.conf

  Log:
    Upgraded build environment to GNU libtool 1.5.8 and GNU shtool 2.0.1

  Summary:
    Revision    Changes     Path
    1.4         +5  -0      ossp-pkg/val/ChangeLog
    1.13        +2  -2      ossp-pkg/val/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ChangeLog
  --- ossp-pkg/val/ChangeLog	4 Apr 2004 10:45:29 -0000	1.3
  +++ ossp-pkg/val/ChangeLog	12 Sep 2004 18:20:42 -0000	1.4
  @@ -11,6 +11,11 @@
     This is a list of all changes to OSSP val.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 0.9.2 and 0.9.3 (04-Apr-2003 to 12-Sep-2004)
  +
  +   o Upgraded build environment to GNU libtool 1.5.8 and GNU shtool 2.0.1
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
     Changes between 0.9.1 and 0.9.2 (17-Feb-2003 to 04-Apr-2004)
   
      o Double-cast some variable passing to circumvent GCC warnings.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 devtool.conf
  --- ossp-pkg/val/devtool.conf	4 Apr 2004 10:40:50 -0000	1.12
  +++ ossp-pkg/val/devtool.conf	12 Sep 2004 18:20:42 -0000	1.13
  @@ -3,8 +3,8 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.2 "1.6.*" all
  -    @autogen libtool  1.5.4 "1.5*"
  +    @autogen shtool   2.0.1 "2.0.*" all
  +    @autogen libtool  1.5.8 "1.5*"
       @autogen autoconf 2.59  "2.5[4-9]*"
   
   %autoclean
  @@ .

From ossp-cvs-owner@ossp.org  Sun Sep 12 20:22:21 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 52E9C76546; Sun, 12 Sep 2004 20:22:21 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val/ README VERSION
Message-Id: <20040912182221.52E9C76546@mail.ossp.org>
Date: Sun, 12 Sep 2004 20:22:21 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Sep-2004 20:22:21
  Branch: HEAD                             Handle: 2004091219222000

  Modified files:
    ossp-pkg/val            README VERSION

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.10        +1  -1      ossp-pkg/val/README
    1.6         +1  -1      ossp-pkg/val/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/README
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 README
  --- ossp-pkg/val/README	4 Apr 2004 10:46:35 -0000	1.9
  +++ ossp-pkg/val/README	12 Sep 2004 18:22:20 -0000	1.10
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|       \_/ \__,_|_|
   
     OSSP val - Value Access
  -  Version 0.9.2 (04-Apr-2004)
  +  Version 0.9.3 (12-Sep-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/VERSION
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 VERSION
  --- ossp-pkg/val/VERSION	4 Apr 2004 10:46:35 -0000	1.5
  +++ ossp-pkg/val/VERSION	12 Sep 2004 18:22:20 -0000	1.6
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP val (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP val, Version 0.9.2 (04-Apr-2004)
  +  This is OSSP val, Version 0.9.3 (12-Sep-2004)
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Sep 12 20:25:29 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F01EB76546; Sun, 12 Sep 2004 20:25:28 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20040912182528.F01EB76546@mail.ossp.org>
Date: Sun, 12 Sep 2004 20:25:28 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   12-Sep-2004 20:25:28
  Branch: HEAD                             Handle: 2004091219252701

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/val    index.wml

  Log:
    release OSSP val 0.9.3

  Summary:
    Revision    Changes     Path
    1.99        +1  -0      ossp-web/new/news.txt
    1.85        +1  -1      ossp-web/pkg/lib/index.wml
    1.9         +2  -2      ossp-web/pkg/lib/val/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.98 -r1.99 news.txt
  --- ossp-web/new/news.txt	12 Sep 2004 18:18:45 -0000	1.98
  +++ ossp-web/new/news.txt	12 Sep 2004 18:25:27 -0000	1.99
  @@ -1,3 +1,4 @@
  +12-Sep-2004: Released L<OSSP val> 0.9.3
   12-Sep-2004: Released L<OSSP var> 1.1.1
   12-Sep-2004: Released L<OSSP xds> 0.9.1
   12-Sep-2004: Released L<OSSP uuid> 1.0.2
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.84 -r1.85 index.wml
  --- ossp-web/pkg/lib/index.wml	12 Sep 2004 18:18:46 -0000	1.84
  +++ ossp-web/pkg/lib/index.wml	12 Sep 2004 18:25:27 -0000	1.85
  @@ -36,7 +36,7 @@
   			done=100 stable=1.0.2 unstable=none>
     <pkg_item name="val" longname="OSSP val" type="lib"
               desc="Value Access"
  -			done=95 stable=none unstable=0.9.2>
  +			done=95 stable=none unstable=0.9.3>
     <pkg_item name="xds" longname="OSSP xds" type="lib"
               desc="Extensible Data Serialization"
   			done=95 stable=none unstable=0.9.1>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/val/index.wml
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 index.wml
  --- ossp-web/pkg/lib/val/index.wml	4 Apr 2004 10:50:57 -0000	1.8
  +++ ossp-web/pkg/lib/val/index.wml	12 Sep 2004 18:25:28 -0000	1.9
  @@ -34,7 +34,7 @@
   <pkg_status
       name="val" assign="rse"
       stable="none" stable_date="none"
  -    unstable="0.9.2" unstable_date="04-Apr-2004"
  +    unstable="0.9.3" unstable_date="12-Sep-2004"
   	done=100>
   
   <h2>Source</h2>
  @@ -44,7 +44,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/val/
       directory=$(FTP_ROOT_DIR)/pkg/lib/val/
       files="val-*.tar.gz" 
  -	stable="none" unstable="val-0.9.2.tar.gz">
  +	stable="none" unstable="val-0.9.3.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Sep 12 20:30:42 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 47DA676546; Sun, 12 Sep 2004 20:30:42 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm/ ChangeLog devtool.conf
Message-Id: <20040912183042.47DA676546@mail.ossp.org>
Date: Sun, 12 Sep 2004 20:30:42 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Sep-2004 20:30:42
  Branch: HEAD                             Handle: 2004091219304100

  Modified files:
    ossp-pkg/mm             ChangeLog devtool.conf

  Log:
    Upgraded build environment to GNU Shtool 2.0.1,
    GNU Libtool 1.5.8 and Autoconf 2.59.

  Summary:
    Revision    Changes     Path
    1.46        +6  -0      ossp-pkg/mm/ChangeLog
    1.5         +3  -3      ossp-pkg/mm/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.45 -r1.46 ChangeLog
  --- ossp-pkg/mm/ChangeLog	7 Mar 2003 16:01:59 -0000	1.45
  +++ ossp-pkg/mm/ChangeLog	12 Sep 2004 18:30:41 -0000	1.46
  @@ -9,6 +9,12 @@
    ChangeLog
    =========
   
  + Changes between 1.3.0 and 1.3.1 (07-Mar-2003 to 12-Sep-2004)
  +
  +  *) Upgraded build environment to GNU Shtool 2.0.1,
  +     GNU Libtool 1.5.8 and Autoconf 2.59.
  +     [Ralf S. Engelschall]
  +
    Changes between 1.2.2 and 1.3.0 (23-Dec-2002 to 07-Mar-2003)
   
     *) Correctly cleanup under MM_SHMT_MMZERO in case of a shared
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 devtool.conf
  --- ossp-pkg/mm/devtool.conf	19 Dec 2002 09:14:58 -0000	1.4
  +++ ossp-pkg/mm/devtool.conf	12 Sep 2004 18:30:41 -0000	1.5
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.2 "1.6.*" all
  -    @autogen libtool  1.4.3 "1.4*"
  -    @autogen autoconf 2.57  "2.5[3-9]*"
  +    @autogen shtool   2.0.1 "2.0.*" all
  +    @autogen libtool  1.5.8 "1.5*"
  +    @autogen autoconf 2.59  "2.5[3-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .

From ossp-cvs-owner@ossp.org  Sun Sep 12 20:34:00 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 813A376546; Sun, 12 Sep 2004 20:34:00 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm/ README mm_vers.c
Message-Id: <20040912183400.813A376546@mail.ossp.org>
Date: Sun, 12 Sep 2004 20:34:00 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Sep-2004 20:34:00
  Branch: HEAD                             Handle: 2004091219340000

  Modified files:
    ossp-pkg/mm             README mm_vers.c

  Log:
    bump release

  Summary:
    Revision    Changes     Path
    1.79        +1  -1      ossp-pkg/mm/README
    1.43        +9  -9      ossp-pkg/mm/mm_vers.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/README
  ============================================================================
  $ cvs diff -u -r1.78 -r1.79 README
  --- ossp-pkg/mm/README	7 Mar 2003 15:46:17 -0000	1.78
  +++ ossp-pkg/mm/README	12 Sep 2004 18:34:00 -0000	1.79
  @@ -7,7 +7,7 @@
     OSSP mm - Shared Memory Allocation
     Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
     Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
  -  Version 1.3.0 (07-Mar-2003)
  +  Version 1.3.1 (12-Sep-2004)
   
     OSSP mm is a 2-layer abstraction library which simplifies the usage of
     shared memory between forked (and this way strongly related) processes
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm_vers.c
  ============================================================================
  $ cvs diff -u -r1.42 -r1.43 mm_vers.c
  --- ossp-pkg/mm/mm_vers.c	7 Mar 2003 15:00:56 -0000	1.42
  +++ ossp-pkg/mm/mm_vers.c	12 Sep 2004 18:34:00 -0000	1.43
  @@ -8,7 +8,7 @@
   #ifndef _MM_VERS_C_
   #define _MM_VERS_C_
   
  -#define MM_VERSION 0x103200
  +#define MM_VERSION 0x103201
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _MM_VERS_C_AS_HEADER_
   
   mm_version_t mm_version = {
  -    0x103200,
  -    "1.3.0",
  -    "1.3.0 (07-Mar-2003)",
  -    "This is OSSP mm, Version 1.3.0 (07-Mar-2003)",
  -    "OSSP mm 1.3.0 (07-Mar-2003)",
  -    "OSSP mm/1.3.0",
  -    "@(#)OSSP mm 1.3.0 (07-Mar-2003)",
  -    "$Id: OSSP mm 1.3.0 (07-Mar-2003) $"
  +    0x103201,
  +    "1.3.1",
  +    "1.3.1 (12-Sep-2004)",
  +    "This is OSSP mm, Version 1.3.1 (12-Sep-2004)",
  +    "OSSP mm 1.3.1 (12-Sep-2004)",
  +    "OSSP mm/1.3.1",
  +    "@(#)OSSP mm 1.3.1 (12-Sep-2004)",
  +    "$Id: OSSP mm 1.3.1 (12-Sep-2004) $"
   };
   
   #endif /* _MM_VERS_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Sun Sep 12 20:35:03 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C533D76546; Sun, 12 Sep 2004 20:35:02 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm/ LICENSE Makefile.in README aclocal.m4 configu...
Message-Id: <20040912183502.C533D76546@mail.ossp.org>
Date: Sun, 12 Sep 2004 20:35:02 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Sep-2004 20:35:02
  Branch: HEAD                             Handle: 2004091219350100

  Modified files:
    ossp-pkg/mm             LICENSE Makefile.in README aclocal.m4 configure.ac
                            mm-config.in mm-config.pod mm.h mm.pod mm_alloc.c
                            mm_core.c mm_global.c mm_lib.c mm_test.c

  Log:
    adjust year in copyright messages

  Summary:
    Revision    Changes     Path
    1.7         +2  -2      ossp-pkg/mm/LICENSE
    1.33        +2  -2      ossp-pkg/mm/Makefile.in
    1.80        +2  -2      ossp-pkg/mm/README
    1.29        +2  -2      ossp-pkg/mm/aclocal.m4
    1.6         +4  -4      ossp-pkg/mm/configure.ac
    1.11        +2  -2      ossp-pkg/mm/mm-config.in
    1.9         +2  -2      ossp-pkg/mm/mm-config.pod
    1.29        +2  -2      ossp-pkg/mm/mm.h
    1.23        +2  -2      ossp-pkg/mm/mm.pod
    1.19        +2  -2      ossp-pkg/mm/mm_alloc.c
    1.22        +2  -2      ossp-pkg/mm/mm_core.c
    1.13        +2  -2      ossp-pkg/mm/mm_global.c
    1.9         +2  -2      ossp-pkg/mm/mm_lib.c
    1.12        +2  -2      ossp-pkg/mm/mm_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/LICENSE
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 LICENSE
  --- ossp-pkg/mm/LICENSE	19 Dec 2002 09:25:23 -0000	1.6
  +++ ossp-pkg/mm/LICENSE	12 Sep 2004 18:35:01 -0000	1.7
  @@ -1,7 +1,7 @@
   
     ====================================================================
  -  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 1999-2004 The OSSP Project <http://www.ossp.org/>
   
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 Makefile.in
  --- ossp-pkg/mm/Makefile.in	19 Dec 2002 09:25:23 -0000	1.32
  +++ ossp-pkg/mm/Makefile.in	12 Sep 2004 18:35:01 -0000	1.33
  @@ -1,6 +1,6 @@
   ## ====================================================================
  -## Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  -## Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
  +## Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +## Copyright (c) 1999-2004 The OSSP Project <http://www.ossp.org/>
   ##
   ## Redistribution and use in source and binary forms, with or without
   ## modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/README
  ============================================================================
  $ cvs diff -u -r1.79 -r1.80 README
  --- ossp-pkg/mm/README	12 Sep 2004 18:34:00 -0000	1.79
  +++ ossp-pkg/mm/README	12 Sep 2004 18:35:01 -0000	1.80
  @@ -5,8 +5,8 @@
     |_|_|_|  \___/|____/____/|_|     |_| |_| |_|_| |_| |_|
   
     OSSP mm - Shared Memory Allocation
  -  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 1999-2004 The OSSP Project <http://www.ossp.org/>
     Version 1.3.1 (12-Sep-2004)
   
     OSSP mm is a 2-layer abstraction library which simplifies the usage of
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 aclocal.m4
  --- ossp-pkg/mm/aclocal.m4	19 Dec 2002 09:25:23 -0000	1.28
  +++ ossp-pkg/mm/aclocal.m4	12 Sep 2004 18:35:01 -0000	1.29
  @@ -1,6 +1,6 @@
   ## ====================================================================
  -## Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  -## Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
  +## Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +## Copyright (c) 1999-2004 The OSSP Project <http://www.ossp.org/>
   ##
   ## Redistribution and use in source and binary forms, with or without
   ## modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/configure.ac
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 configure.ac
  --- ossp-pkg/mm/configure.ac	19 Dec 2002 09:25:23 -0000	1.5
  +++ ossp-pkg/mm/configure.ac	12 Sep 2004 18:35:01 -0000	1.6
  @@ -1,6 +1,6 @@
   ## ====================================================================
  -## Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  -## Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
  +## Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +## Copyright (c) 1999-2004 The OSSP Project <http://www.ossp.org/>
   ##
   ## Redistribution and use in source and binary forms, with or without
   ## modification, are permitted provided that the following conditions
  @@ -64,8 +64,8 @@
   
   dnl #   friendly header ;-)
   echo "Configuring ${T_MD}OSSP mm${T_ME} (Shared Memory Allocation), Version ${T_MD}${MM_VERSION_STR}${T_ME}"
  -echo "Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>"
  -echo "Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>"
  +echo "Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>"
  +echo "Copyright (c) 1999-2004 The OSSP Project <http://www.ossp.org/>"
   echo "Platform: ${T_MD}${PLATFORM}${T_ME}"
   
   dnl #
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm-config.in
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 mm-config.in
  --- ossp-pkg/mm/mm-config.in	19 Dec 2002 09:25:23 -0000	1.10
  +++ ossp-pkg/mm/mm-config.in	12 Sep 2004 18:35:01 -0000	1.11
  @@ -3,8 +3,8 @@
   ## mm-config -- MM library build configuration utility
   ##
   ## ====================================================================
  -## Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  -## Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
  +## Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +## Copyright (c) 1999-2004 The OSSP Project <http://www.ossp.org/>
   ##
   ## Redistribution and use in source and binary forms, with or without
   ## modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm-config.pod
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 mm-config.pod
  --- ossp-pkg/mm/mm-config.pod	19 Dec 2002 09:25:23 -0000	1.8
  +++ ossp-pkg/mm/mm-config.pod	12 Sep 2004 18:35:01 -0000	1.9
  @@ -1,6 +1,6 @@
   ## ====================================================================
  -## Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  -## Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
  +## Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +## Copyright (c) 1999-2004 The OSSP Project <http://www.ossp.org/>
   ##
   ## Redistribution and use in source and binary forms, with or without
   ## modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm.h
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 mm.h
  --- ossp-pkg/mm/mm.h	7 Mar 2003 14:59:15 -0000	1.28
  +++ ossp-pkg/mm/mm.h	12 Sep 2004 18:35:01 -0000	1.29
  @@ -1,6 +1,6 @@
   /* ====================================================================
  - * Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  - * Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
  + * Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  + * Copyright (c) 1999-2004 The OSSP Project <http://www.ossp.org/>
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm.pod
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 mm.pod
  --- ossp-pkg/mm/mm.pod	24 Mar 2003 11:03:43 -0000	1.22
  +++ ossp-pkg/mm/mm.pod	12 Sep 2004 18:35:01 -0000	1.23
  @@ -1,6 +1,6 @@
   ## ====================================================================
  -## Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  -## Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
  +## Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +## Copyright (c) 1999-2004 The OSSP Project <http://www.ossp.org/>
   ##
   ## Redistribution and use in source and binary forms, with or without
   ## modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm_alloc.c
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 mm_alloc.c
  --- ossp-pkg/mm/mm_alloc.c	19 Dec 2002 09:25:24 -0000	1.18
  +++ ossp-pkg/mm/mm_alloc.c	12 Sep 2004 18:35:01 -0000	1.19
  @@ -1,6 +1,6 @@
   /* ====================================================================
  - * Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  - * Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
  + * Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  + * Copyright (c) 1999-2004 The OSSP Project <http://www.ossp.org/>
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm_core.c
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 mm_core.c
  --- ossp-pkg/mm/mm_core.c	7 Mar 2003 15:04:50 -0000	1.21
  +++ ossp-pkg/mm/mm_core.c	12 Sep 2004 18:35:01 -0000	1.22
  @@ -1,6 +1,6 @@
   /* ====================================================================
  - * Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  - * Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
  + * Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  + * Copyright (c) 1999-2004 The OSSP Project <http://www.ossp.org/>
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm_global.c
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 mm_global.c
  --- ossp-pkg/mm/mm_global.c	19 Dec 2002 09:25:24 -0000	1.12
  +++ ossp-pkg/mm/mm_global.c	12 Sep 2004 18:35:01 -0000	1.13
  @@ -1,6 +1,6 @@
   /* ====================================================================
  - * Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  - * Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
  + * Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  + * Copyright (c) 1999-2004 The OSSP Project <http://www.ossp.org/>
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm_lib.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 mm_lib.c
  --- ossp-pkg/mm/mm_lib.c	19 Dec 2002 09:25:24 -0000	1.8
  +++ ossp-pkg/mm/mm_lib.c	12 Sep 2004 18:35:01 -0000	1.9
  @@ -1,6 +1,6 @@
   /* ====================================================================
  - * Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  - * Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
  + * Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  + * Copyright (c) 1999-2004 The OSSP Project <http://www.ossp.org/>
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm_test.c
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 mm_test.c
  --- ossp-pkg/mm/mm_test.c	19 Dec 2002 09:25:24 -0000	1.11
  +++ ossp-pkg/mm/mm_test.c	12 Sep 2004 18:35:01 -0000	1.12
  @@ -1,6 +1,6 @@
   /* ====================================================================
  - * Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  - * Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
  + * Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  + * Copyright (c) 1999-2004 The OSSP Project <http://www.ossp.org/>
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
  @@ .

From ossp-cvs-owner@ossp.org  Sun Sep 12 20:57:00 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 82E4D76586; Sun, 12 Sep 2004 20:57:00 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20040912185700.82E4D76586@mail.ossp.org>
Date: Sun, 12 Sep 2004 20:57:00 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   12-Sep-2004 20:57:00
  Branch: HEAD                             Handle: 2004091219565801

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/mm     index.wml

  Log:
    release OSSP mm 1.3.1

  Summary:
    Revision    Changes     Path
    1.100       +1  -0      ossp-web/new/news.txt
    1.86        +1  -1      ossp-web/pkg/lib/index.wml
    1.12        +2  -2      ossp-web/pkg/lib/mm/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.99 -r1.100 news.txt
  --- ossp-web/new/news.txt	12 Sep 2004 18:25:27 -0000	1.99
  +++ ossp-web/new/news.txt	12 Sep 2004 18:56:58 -0000	1.100
  @@ -1,3 +1,4 @@
  +12-Sep-2004: Released L<OSSP mm> 1.3.1
   12-Sep-2004: Released L<OSSP val> 0.9.3
   12-Sep-2004: Released L<OSSP var> 1.1.1
   12-Sep-2004: Released L<OSSP xds> 0.9.1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.85 -r1.86 index.wml
  --- ossp-web/pkg/lib/index.wml	12 Sep 2004 18:25:27 -0000	1.85
  +++ ossp-web/pkg/lib/index.wml	12 Sep 2004 18:56:59 -0000	1.86
  @@ -18,7 +18,7 @@
   			done=100 stable=2.0.2 unstable=none>
     <pkg_item name="mm" longname="OSSP mm" type="lib"
               desc="Shared Memory Allocation"
  -			done=100 stable=1.3.0 unstable=none>
  +			done=100 stable=1.3.1 unstable=none>
     <pkg_item name="ex" longname="OSSP ex" type="lib"
               desc="Exception Handling"
   			done=100 stable=1.0.4 unstable=none>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/mm/index.wml
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 index.wml
  --- ossp-web/pkg/lib/mm/index.wml	7 Mar 2003 16:03:02 -0000	1.11
  +++ ossp-web/pkg/lib/mm/index.wml	12 Sep 2004 18:56:59 -0000	1.12
  @@ -30,7 +30,7 @@
   <pkg_status
       name="mm" assign="rse"
   	genesis="Mar-1999"
  -    stable="1.3.0"   stable_date="07-Mar-2003"
  +    stable="1.3.1"   stable_date="12-Sep-2004"
       unstable="none"  unstable_date="none"
   	done=100>
   
  @@ -41,7 +41,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/mm/
       directory=$(FTP_ROOT_DIR)/pkg/lib/mm/
       files="mm-*.tar.gz" 
  -	stable="mm-1.3.0.tar.gz" unstable="none">
  +	stable="mm-1.3.1.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Sep 13 09:59:31 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7C0B87659D; Mon, 13 Sep 2004 09:59:31 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/var/ index.wml
Message-Id: <20040913075931.7C0B87659D@mail.ossp.org>
Date: Mon, 13 Sep 2004 09:59:31 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   13-Sep-2004 09:59:31
  Branch: HEAD                             Handle: 2004091308593000

  Modified files:
    ossp-web/pkg/lib/var    index.wml

  Log:
    fix file list

  Summary:
    Revision    Changes     Path
    1.11        +1  -1      ossp-web/pkg/lib/var/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/var/index.wml
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 index.wml
  --- ossp-web/pkg/lib/var/index.wml	12 Sep 2004 18:18:48 -0000	1.10
  +++ ossp-web/pkg/lib/var/index.wml	13 Sep 2004 07:59:30 -0000	1.11
  @@ -62,7 +62,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/var/
       directory=$(FTP_ROOT_DIR)/pkg/lib/var/
       files="var-*.tar.gz" 
  -	stable="var-1.1.0.tar.gz" unstable="none">
  +	stable="var-1.1.1.tar.gz" unstable="none">
   
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Sep 20 17:25:59 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D142476560; Mon, 20 Sep 2004 17:25:58 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/SHARE/ ossp_newsflash.wml
Message-Id: <20040920152558.D142476560@mail.ossp.org>
Date: Mon, 20 Sep 2004 17:25:58 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   20-Sep-2004 17:25:58
  Branch: HEAD                             Handle: 2004092016255800

  Modified files:
    ossp-web/SHARE          ossp_newsflash.wml

  Log:
    fix URLs

  Summary:
    Revision    Changes     Path
    1.7         +2  -2      ossp-web/SHARE/ossp_newsflash.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/SHARE/ossp_newsflash.wml
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ossp_newsflash.wml
  --- ossp-web/SHARE/ossp_newsflash.wml	5 Apr 2002 10:54:31 -0000	1.6
  +++ ossp-web/SHARE/ossp_newsflash.wml	20 Sep 2004 15:25:58 -0000	1.7
  @@ -22,8 +22,8 @@
       $ncol = 1;
       $n = 0;
       while (<FP>) {
  -        s/T<(((?:OSSP|GNU)\s+)?([^>]+))>/<a href="pkg\/tool\/$3\/">$1<\/a>/g;
  -        s/L<(((?:OSSP|GNU)\s+)?([^>]+))>/<a href="pkg\/lib\/$3\/">$1<\/a>/g;
  +        s/T<(((?:OSSP|GNU)\s+)?([^>]+))>/<a href="\/pkg\/tool\/$3\/">$1<\/a>/g;
  +        s/L<(((?:OSSP|GNU)\s+)?([^>]+))>/<a href="\/pkg\/lib\/$3\/">$1<\/a>/g;
           s/P<([^>]+)>/<a href="ftp:\/\/ftp.openpkg.org\/current\/SRC\/$1.src.rpm">$1<\/a>/g;
           s/N<([^>]+)>/<b>$1<\/b>/g;
           s/B<([^>]+)>/<b>$1<\/b>/g;
  @@ .

From ossp-cvs-owner@ossp.org  Sat Sep 25 23:14:45 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1EB047655B; Sat, 25 Sep 2004 23:14:45 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog devtool.conf
Message-Id: <20040925211445.1EB047655B@mail.ossp.org>
Date: Sat, 25 Sep 2004 23:14:45 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Sep-2004 23:14:45
  Branch: HEAD                             Handle: 2004092522144400

  Modified files:
    ossp-pkg/pth            ChangeLog devtool.conf

  Log:
    Upgraded build environment to GNU libtool 1.5.10

  Summary:
    Revision    Changes     Path
    1.625       +6  -1      ossp-pkg/pth/ChangeLog
    1.18        +3  -3      ossp-pkg/pth/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.624 -r1.625 ChangeLog
  --- ossp-pkg/pth/ChangeLog	12 Sep 2004 12:33:03 -0000	1.624
  +++ ossp-pkg/pth/ChangeLog	25 Sep 2004 21:14:44 -0000	1.625
  @@ -19,7 +19,12 @@
        / __/ | |_| |
     __|_____(_)___/_________________________________________________________
                     
  -  Changes between 2.0.1 and 2.0.2 (13-Jul-2003 to 12-Sep-2004)
  +  Changes between 2.0.2 and 2.0.3 (12-Sep-2004 to xx-xxx-2004)
  +
  +   *) Upgraded build environment to GNU libtool 1.5.10
  +      [Ralf S. Engelschall]
  +
  +  Changes between 2.0.1 and 2.0.2 (13-Jul-2004 to 12-Sep-2004)
   
      *) Added hard syscall wrappers for send(2) and recv(2).
         [NetBSD pkgsrc patches]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 devtool.conf
  --- ossp-pkg/pth/devtool.conf	11 Aug 2004 19:32:35 -0000	1.17
  +++ ossp-pkg/pth/devtool.conf	25 Sep 2004 21:14:44 -0000	1.18
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   2.0.1 "2.0.*" echo version scpp mkdir install fixperm tarball
  -    @autogen libtool  1.5.8 "1.5*"
  -    @autogen autoconf 2.59  "2.5*"
  +    @autogen shtool   2.0.1  "2.0.*" echo version scpp mkdir install fixperm tarball
  +    @autogen libtool  1.5.10 "1.5*"
  +    @autogen autoconf 2.59   "2.5*"
   
   %autoclean
       @autoclean shtool
  @@ .

From ossp-cvs-owner@ossp.org  Sat Sep 25 23:24:30 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7F0077655B; Sat, 25 Sep 2004 23:24:30 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ ChangeLog devtool.conf
Message-Id: <20040925212430.7F0077655B@mail.ossp.org>
Date: Sat, 25 Sep 2004 23:24:30 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Sep-2004 23:24:30
  Branch: HEAD                             Handle: 2004092522243000

  Modified files:
    ossp-pkg/sa             ChangeLog devtool.conf

  Log:
    Upgrade build environment to GNU libtool 1.5.10 and GNU shtool 2.0.1

  Summary:
    Revision    Changes     Path
    1.40        +6  -0      ossp-pkg/sa/ChangeLog
    1.23        +3  -3      ossp-pkg/sa/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.39 -r1.40 ChangeLog
  --- ossp-pkg/sa/ChangeLog	26 Jun 2004 11:38:20 -0000	1.39
  +++ ossp-pkg/sa/ChangeLog	25 Sep 2004 21:24:30 -0000	1.40
  @@ -11,6 +11,12 @@
     This is a list of all changes to OSSP sa.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 1.2.2 and 1.2.3 (26-Jun-2004 to xx-xxx-2004)
  +
  +   o Upgrade build environment to GNU libtool 1.5.10
  +     and GNU shtool 2.0.1
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
     Changes between 1.2.1 and 1.2.2 (11-Jun-2004 to 26-Jun-2004)
   
      o Allow negative values for SA_OPTION_LINGER to cover the
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 devtool.conf
  --- ossp-pkg/sa/devtool.conf	11 Jun 2004 10:32:54 -0000	1.22
  +++ ossp-pkg/sa/devtool.conf	25 Sep 2004 21:24:30 -0000	1.23
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.2 "1.6.*" all
  -    @autogen libtool  1.5.6 "1.5*"
  -    @autogen autoconf 2.59  "2.5[4-9]*"
  +    @autogen shtool   2.0.1  "1.6.*" all
  +    @autogen libtool  1.5.10 "1.5*"
  +    @autogen autoconf 2.59   "2.5[4-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .

From ossp-cvs-owner@ossp.org  Sun Oct  3 16:00:24 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9EF487655A; Sun,  3 Oct 2004 16:00:24 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ ChangeLog sa.c sa.h
Message-Id: <20041003140024.9EF487655A@mail.ossp.org>
Date: Sun,  3 Oct 2004 16:00:24 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2004 16:00:24
  Branch: HEAD                             Handle: 2004100315002300

  Modified files:
    ossp-pkg/sa             ChangeLog sa.c sa.h

  Log:
    Added SA_SYSCALL_GETHOSTBYNAME for supporting the overloading
    of gethostbyname(2) system calls.

  Summary:
    Revision    Changes     Path
    1.41        +4  -0      ossp-pkg/sa/ChangeLog
    1.86        +29 -25     ossp-pkg/sa/sa.c
    1.41        +2  -1      ossp-pkg/sa/sa.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.40 -r1.41 ChangeLog
  --- ossp-pkg/sa/ChangeLog	25 Sep 2004 21:24:30 -0000	1.40
  +++ ossp-pkg/sa/ChangeLog	3 Oct 2004 14:00:23 -0000	1.41
  @@ -13,6 +13,10 @@
   
     Changes between 1.2.2 and 1.2.3 (26-Jun-2004 to xx-xxx-2004)
   
  +   o Added SA_SYSCALL_GETHOSTBYNAME for supporting the overloading
  +     of gethostbyname(2) system calls.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
      o Upgrade build environment to GNU libtool 1.5.10
        and GNU shtool 2.0.1
        [Ralf S. Engelschall <rse@engelschall.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.c
  ============================================================================
  $ cvs diff -u -r1.85 -r1.86 sa.c
  --- ossp-pkg/sa/sa.c	26 Jun 2004 11:38:20 -0000	1.85
  +++ ossp-pkg/sa/sa.c	3 Oct 2004 14:00:23 -0000	1.86
  @@ -210,13 +210,14 @@
   
   /* system call table */
   typedef struct {
  -    SA_SC_DECLARE_3(int,     connect,  int, const struct sockaddr *, socklen_t)
  -    SA_SC_DECLARE_3(int,     accept,   int, struct sockaddr *, socklen_t *)
  -    SA_SC_DECLARE_5(int,     select,   int, fd_set *, fd_set *, fd_set *, struct timeval *)
  -    SA_SC_DECLARE_3(ssize_t, read,     int, void *, size_t)
  -    SA_SC_DECLARE_3(ssize_t, write,    int, const void *, size_t)
  -    SA_SC_DECLARE_6(ssize_t, recvfrom, int, void *, size_t, int, struct sockaddr *, socklen_t *)
  -    SA_SC_DECLARE_6(ssize_t, sendto,   int, const void *, size_t, int, const struct sockaddr *, socklen_t)
  +    SA_SC_DECLARE_3(int,              connect,       int, const struct sockaddr *, socklen_t)
  +    SA_SC_DECLARE_3(int,              accept,        int, struct sockaddr *, socklen_t *)
  +    SA_SC_DECLARE_5(int,              select,        int, fd_set *, fd_set *, fd_set *, struct timeval *)
  +    SA_SC_DECLARE_3(ssize_t,          read,          int, void *, size_t)
  +    SA_SC_DECLARE_3(ssize_t,          write,         int, const void *, size_t)
  +    SA_SC_DECLARE_6(ssize_t,          recvfrom,      int, void *, size_t, int, struct sockaddr *, socklen_t *)
  +    SA_SC_DECLARE_6(ssize_t,          sendto,        int, const void *, size_t, int, const struct sockaddr *, socklen_t)
  +    SA_SC_DECLARE_1(struct hostent *, gethostbyname, const char *name)
   } sa_syscall_tab_t;
   
   /* socket option information */
  @@ -497,8 +498,8 @@
       struct servent *se;
       int bIPv6;
       int bNumeric;
  -    char *cpHost;
  -    char *cpPort;
  +    const char *cpHost;
  +    const char *cpPort;
       char *cpProto;
       unsigned int nPort;
       const char *cpPath;
  @@ -559,7 +560,7 @@
       }
       else if (strncmp(uri, "inet://", 7) == 0) {
           /* parse URI into host, port and protocol parts */
  -        cpHost = (char *)(uri+7);
  +        cpHost = uri+7;
           bIPv6 = FALSE;
           if (cpHost[0] == '[') {
               /* IPv6 address (see RFC2732) */
  @@ -652,7 +653,7 @@
               sf = AF_INET6;
           }
   #endif
  -        else if ((he = gethostbyname(cpHost)) != NULL) {
  +        else if ((he = SA_SC_CALL_1(sa, gethostbyname, cpHost)) != NULL) {
               if (he->h_addrtype == AF_INET) {
                   sa4.sin_family = AF_INET;
                   sa4.sin_port = htons(nPort);
  @@ -1175,13 +1176,14 @@
       }
   
       /* init syscall object attributes */
  -    SA_SC_ASSIGN(sa, connect,  connect,  NULL);
  -    SA_SC_ASSIGN(sa, accept,   accept,   NULL);
  -    SA_SC_ASSIGN(sa, select,   select,   NULL);
  -    SA_SC_ASSIGN(sa, read,     read,     NULL);
  -    SA_SC_ASSIGN(sa, write,    write,    NULL);
  -    SA_SC_ASSIGN(sa, recvfrom, recvfrom, NULL);
  -    SA_SC_ASSIGN(sa, sendto,   sendto,   NULL);
  +    SA_SC_ASSIGN(sa, connect,       connect,       NULL);
  +    SA_SC_ASSIGN(sa, accept,        accept,        NULL);
  +    SA_SC_ASSIGN(sa, select,        select,        NULL);
  +    SA_SC_ASSIGN(sa, read,          read,          NULL);
  +    SA_SC_ASSIGN(sa, write,         write,         NULL);
  +    SA_SC_ASSIGN(sa, recvfrom,      recvfrom,      NULL);
  +    SA_SC_ASSIGN(sa, sendto,        sendto,        NULL);
  +    SA_SC_ASSIGN(sa, gethostbyname, gethostbyname, NULL);
   
       /* pass object to caller */
       *sap = sa;
  @@ -1404,13 +1406,14 @@
       /* assign system call */
       rv = SA_OK;
       switch (id) {
  -        case SA_SYSCALL_CONNECT:  SA_SC_ASSIGN(sa, connect,  fptr, fctx); break;
  -        case SA_SYSCALL_ACCEPT:   SA_SC_ASSIGN(sa, accept,   fptr, fctx); break;
  -        case SA_SYSCALL_SELECT:   SA_SC_ASSIGN(sa, select,   fptr, fctx); break;
  -        case SA_SYSCALL_READ:     SA_SC_ASSIGN(sa, read,     fptr, fctx); break;
  -        case SA_SYSCALL_WRITE:    SA_SC_ASSIGN(sa, write,    fptr, fctx); break;
  -        case SA_SYSCALL_RECVFROM: SA_SC_ASSIGN(sa, recvfrom, fptr, fctx); break;
  -        case SA_SYSCALL_SENDTO:   SA_SC_ASSIGN(sa, sendto,   fptr, fctx); break;
  +        case SA_SYSCALL_CONNECT:       SA_SC_ASSIGN(sa, connect,       fptr, fctx); break;
  +        case SA_SYSCALL_ACCEPT:        SA_SC_ASSIGN(sa, accept,        fptr, fctx); break;
  +        case SA_SYSCALL_SELECT:        SA_SC_ASSIGN(sa, select,        fptr, fctx); break;
  +        case SA_SYSCALL_READ:          SA_SC_ASSIGN(sa, read,          fptr, fctx); break;
  +        case SA_SYSCALL_WRITE:         SA_SC_ASSIGN(sa, write,         fptr, fctx); break;
  +        case SA_SYSCALL_RECVFROM:      SA_SC_ASSIGN(sa, recvfrom,      fptr, fctx); break;
  +        case SA_SYSCALL_SENDTO:        SA_SC_ASSIGN(sa, sendto,        fptr, fctx); break;
  +        case SA_SYSCALL_GETHOSTBYNAME: SA_SC_ASSIGN(sa, gethostbyname, fptr, fctx); break;
           default: rv = SA_ERR_ARG;
       }
   
  @@ -1650,6 +1653,7 @@
       SA_SC_COPY((*csa), sa, write);
       SA_SC_COPY((*csa), sa, recvfrom);
       SA_SC_COPY((*csa), sa, sendto);
  +    SA_SC_COPY((*csa), sa, gethostbyname);
   
       /* copy-over original timeout values */
       for (i = 0; i < (int)(sizeof(sa->tvTimeout)/sizeof(sa->tvTimeout[0])); i++) {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.h
  ============================================================================
  $ cvs diff -u -r1.40 -r1.41 sa.h
  --- ossp-pkg/sa/sa.h	26 Jun 2004 11:38:20 -0000	1.40
  +++ ossp-pkg/sa/sa.h	3 Oct 2004 14:00:23 -0000	1.41
  @@ -156,7 +156,8 @@
       SA_SYSCALL_READ,
       SA_SYSCALL_WRITE,
       SA_SYSCALL_RECVFROM,
  -    SA_SYSCALL_SENDTO
  +    SA_SYSCALL_SENDTO,
  +    SA_SYSCALL_GETHOSTBYNAME
   } sa_syscall_t;
   
   /* unique library identifier */
  @@ .

From ossp-cvs-owner@ossp.org  Sun Oct  3 16:12:11 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5B8BF76569; Sun,  3 Oct 2004 16:12:11 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ sa.pod
Message-Id: <20041003141211.5B8BF76569@mail.ossp.org>
Date: Sun,  3 Oct 2004 16:12:11 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2004 16:12:11
  Branch: HEAD                             Handle: 2004100315121000

  Modified files:
    ossp-pkg/sa             sa.pod

  Log:
    update the documentation

  Summary:
    Revision    Changes     Path
    1.43        +18 -14     ossp-pkg/sa/sa.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.pod
  ============================================================================
  $ cvs diff -u -r1.42 -r1.43 sa.pod
  --- ossp-pkg/sa/sa.pod	26 Jun 2004 11:24:47 -0000	1.42
  +++ ossp-pkg/sa/sa.pod	3 Oct 2004 14:12:10 -0000	1.43
  @@ -503,31 +503,32 @@
   Possible values for I<id> are (expected prototypes behind I<fptr> are
   given in parenthesis):
   
  -C<SA_SYSCALL_CONNECT>: "C<int (*)([void *,] int, const struct sockaddr
  +B<SA_SYSCALL_CONNECT>: "C<int (*)([void *,] int, const struct sockaddr
   *, socklen_t)>", see connect(2).
   
  -C<SA_SYSCALL_ACCEPT>: "C<int (*)([void *,] int, struct sockaddr *,
  +B<SA_SYSCALL_ACCEPT>: "C<int (*)([void *,] int, struct sockaddr *,
   socklen_t *)>", see accept(2).
   
  -C<SA_SYSCALL_SELECT>: "C<int (*)([void *,] int, fd_set *, fd_set *,
  +B<SA_SYSCALL_SELECT>: "C<int (*)([void *,] int, fd_set *, fd_set *,
   fd_set *, struct timeval *)>", see select(2).
   
  -C<SA_SYSCALL_READ>: "C<ssize_t (*)([void *,] int, void *, size_t)>", see
  +B<SA_SYSCALL_READ>: "C<ssize_t (*)([void *,] int, void *, size_t)>", see
   read(2).
   
  -C<SA_SYSCALL_WRITE>: "C<ssize_t (*)([void *,] int, const void *,
  +B<SA_SYSCALL_WRITE>: "C<ssize_t (*)([void *,] int, const void *,
   size_t)>", see write(2).
   
  -C<SA_SYSCALL_RECVFROM>: "C<ssize_t (*)([void *,] int, void *, size_t,
  +B<SA_SYSCALL_RECVFROM>: "C<ssize_t (*)([void *,] int, void *, size_t,
   int, struct sockaddr *, socklen_t *)>", see recvfrom(2).
   
  -C<SA_SYSCALL_SENDTO>: "C<ssize_t (*)([void *,] int, const void *,
  +B<SA_SYSCALL_SENDTO>: "C<ssize_t (*)([void *,] int, const void *,
   size_t, int, const struct sockaddr *, socklen_t)>", see sendto(2).
  +    
  +B<SA_SYSCALL_GETHOSTBYNAME>: "C<struct hostent * (*)([void *,] const
  +char *)>", see gethostbyname(2).
   
   Example:
   
  - FILE *trace_fp = ...;
  -
    ssize_t
    trace_read(void *ctx, int fd, void *buf, size_t len)
    {
  @@ -543,7 +544,10 @@
        return rv;
    }
   
  + ...
  + FILE *trace_fp = ...;
    sa_syscall(sa, SA_SC_READ, trace_read, trace_fp);
  + ...
   
   =back
   
  @@ -879,11 +883,11 @@
   
   B<OSSP sa> was invented in August 2001 by Ralf S. Engelschall
   E<lt>rse@engelschall.comE<gt> under contract with Cable & Wireless
  -Germany E<lt>http://www.cw.com/deE<gt> for use inside the OSSP project.
  -Its creation was prompted by the requirement to implement an SMTP
  -logging channel for B<OSSP l2> (logging library). Its initial code was
  -derived from a predecessor sub-library originally written for socket
  -address abstraction inside B<OSSP lmtp2nntp>.
  +E<lt>http://www.cw.com/E<gt> for use inside the OSSP project. Its
  +creation was prompted by the requirement to implement an SMTP logging
  +channel for the B<OSSP l2> library. Its initial code was derived
  +from a predecessor sub-library originally written for socket address
  +abstraction inside the B<OSSP lmtp2nntp> tool.
   
   =head1 AUTHOR
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Oct  3 16:49:38 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 077CB764A8; Sun,  3 Oct 2004 16:49:37 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ ChangeLog sa.c
Message-Id: <20041003144937.077CB764A8@mail.ossp.org>
Date: Sun,  3 Oct 2004 16:49:37 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2004 16:49:37
  Branch: HEAD                             Handle: 2004100315493700

  Modified files:
    ossp-pkg/sa             ChangeLog sa.c

  Log:
    Do not pass NULL directly to variadic functions because NULL
    is not guarrantied to be a pointer.

  Summary:
    Revision    Changes     Path
    1.42        +4  -0      ossp-pkg/sa/ChangeLog
    1.87        +6  -6      ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.41 -r1.42 ChangeLog
  --- ossp-pkg/sa/ChangeLog	3 Oct 2004 14:00:23 -0000	1.41
  +++ ossp-pkg/sa/ChangeLog	3 Oct 2004 14:49:37 -0000	1.42
  @@ -13,6 +13,10 @@
   
     Changes between 1.2.2 and 1.2.3 (26-Jun-2004 to xx-xxx-2004)
   
  +   o Do not pass NULL directly to variadic functions because NULL
  +     is not guarrantied to be a pointer.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
      o Added SA_SYSCALL_GETHOSTBYNAME for supporting the overloading
        of gethostbyname(2) system calls.
        [Ralf S. Engelschall <rse@engelschall.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.c
  ============================================================================
  $ cvs diff -u -r1.86 -r1.87 sa.c
  --- ossp-pkg/sa/sa.c	3 Oct 2004 14:00:23 -0000	1.86
  +++ ossp-pkg/sa/sa.c	3 Oct 2004 14:49:37 -0000	1.87
  @@ -1517,7 +1517,7 @@
       else
           tv = NULL;
       do {
  -        n = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &rset, &wset, NULL, tv);
  +        n = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &rset, &wset, (fd_set *)NULL, tv);
       } while (n == -1 && errno == EINTR);
   
       /* decide on return semantic */
  @@ -1611,7 +1611,7 @@
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
           do {
  -            n = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &fds, NULL, NULL,
  +            n = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &fds, (fd_set *)NULL, (fd_set *)NULL,
                                &sa->tvTimeout[SA_TIMEOUT_ACCEPT]);
           } while (n == -1 && errno == EINTR);
           if (n == 0)
  @@ -1772,7 +1772,7 @@
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
           do {
  -            rv = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &fds, NULL, NULL,
  +            rv = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &fds, (fd_set *)NULL, (fd_set *)NULL,
                                 &sa->tvTimeout[SA_TIMEOUT_READ]);
           } while (rv == -1 && errno == EINTR);
           if (rv == 0) {
  @@ -1951,7 +1951,7 @@
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
           do {
  -            rv = SA_SC_CALL_5(sa, select, sa->fdSocket+1, NULL, &fds, NULL,
  +            rv = SA_SC_CALL_5(sa, select, sa->fdSocket+1, (fd_set *)NULL, &fds, (fd_set *)NULL,
                                 &sa->tvTimeout[SA_TIMEOUT_WRITE]);
           } while (rv == -1 && errno == EINTR);
           if (rv == 0) {
  @@ -2196,7 +2196,7 @@
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
           do {
  -            k = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &fds, NULL, NULL,
  +            k = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &fds, (fd_set *)NULL, (fd_set *)NULL,
                                &sa->tvTimeout[SA_TIMEOUT_READ]);
           } while (k == -1 && errno == EINTR);
           if (k == 0)
  @@ -2253,7 +2253,7 @@
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
           do {
  -            k = SA_SC_CALL_5(sa, select, sa->fdSocket+1, NULL, &fds, NULL,
  +            k = SA_SC_CALL_5(sa, select, sa->fdSocket+1, (fd_set *)NULL, &fds, (fd_set *)NULL,
                                &sa->tvTimeout[SA_TIMEOUT_WRITE]);
           } while (k == -1 && errno == EINTR);
           if (k == 0)
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  4 17:34:51 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0DD6D76509; Mon,  4 Oct 2004 17:34:51 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/due/ .bash_login ossp-pkg/due/.due/ due.term.sh d...
Message-Id: <20041004153451.0DD6D76509@mail.ossp.org>
Date: Mon,  4 Oct 2004 17:34:51 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Oct-2004 17:34:50
  Branch: HEAD                             Handle: 2004100416345000

  Added files:
    ossp-pkg/due/.due       due.tmpdir.sh
  Modified files:
    ossp-pkg/due            .bash_login
    ossp-pkg/due/.due       due.term.sh

  Log:
    flush pending changes

  Summary:
    Revision    Changes     Path
    1.2         +5  -3      ossp-pkg/due/.bash_login
    1.2         +8  -2      ossp-pkg/due/.due/due.term.sh
    1.1         +52 -0      ossp-pkg/due/.due/due.tmpdir.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.bash_login
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 .bash_login
  --- ossp-pkg/due/.bash_login	10 Jul 2004 08:17:12 -0000	1.1
  +++ ossp-pkg/due/.bash_login	4 Oct 2004 15:34:50 -0000	1.2
  @@ -34,7 +34,9 @@
   . $BASH_ENV
   
   #   welcome and goodbye
  -echo "$HOSTNAME: user $USER (${SSHUSER:-unknown}), login at `date`"
  -echo "#[`date '+%Y-%m-%d/%H:%M'`] login by user ${SSHUSER:-unknown}" >>$HISTFILE
  -trap 'echo "$HOSTNAME: user $USER (${SSHUSER:-unknown}), logout at `date`"' 0
  +if expr $- : ".*i.*" >/dev/null; then
  +    echo "$HOSTNAME: user $USER (${SSHUSER:-unknown}), login at `date`"
  +    echo "#[`date '+%Y-%m-%d/%H:%M'`] login by user ${SSHUSER:-unknown}" >>$HISTFILE
  +    trap 'echo "$HOSTNAME: user $USER (${SSHUSER:-unknown}), logout at `date`"' 0
  +fi
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.due/due.term.sh
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 due.term.sh
  --- ossp-pkg/due/.due/due.term.sh	10 Jul 2004 08:17:15 -0000	1.1
  +++ ossp-pkg/due/.due/due.term.sh	4 Oct 2004 15:34:50 -0000	1.2
  @@ -43,9 +43,14 @@
   
   #   adjust terminal settings
   if expr $- : ".*i.*" >/dev/null; then
  -    mesg y
  +    BASH_INTERACTIVE=yes
  +else
  +    BASH_INTERACTIVE=no
   fi
  -if [ ".$TERM" = .xterm ]; then
  +if [ ".$BASH_INTERACTIVE" = .yes ]; then
  +    mesg y
  +fi  
  +if [ ".$TERM" = .xterm -a ".$BASH_INTERACTIVE" = .yes ]; then
       stty -istrip cs8
   fi
   shopt -s checkwinsize
  @@ -59,6 +64,7 @@
   HISTSIZE=9000
   HISTFILESIZE=9000
   HISTIGNORE="&"
  +HISTTIMEFORMAT='%Y-%m-%d %H:%M:%S  '
   
   #   provide command for rotating a little propeller for
   #   keeping a remote connection busy and this way alive
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.due/due.tmpdir.sh
  ============================================================================
  $ cvs diff -u -r0 -r1.1 due.tmpdir.sh
  --- /dev/null	2004-10-04 17:34:50 +0200
  +++ due.tmpdir.sh	2004-10-04 17:34:50 +0200
  @@ -0,0 +1,52 @@
  +##
  +##  OSSP due - Dynamic User Environment
  +##  Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1994-2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP due, a dynamic user environment
  +##  which can found at http://www.ossp.org/pkg/tool/due/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  tmdir: DUE module for TMPDIR handling 
  +##
  +
  +if [ -z $TMPDIR ]; then
  +    if [ -d $HOME/tmp ]; then
  +        #   reuse own temporary directory
  +        TMPDIR=$HOME/tmp
  +        export TMPDIR
  +    elif [ -d /tmp ]; then
  +        if [ ! -d /tmp/$LOGNAME ]; then
  +            #   just try to create it without checking results
  +            (umask 066; mkdir /tmp/$LOGNAME) >/dev/null 2>&1 || true
  +        fi
  +        if [ -d /tmp/$LOGNAME ]; then
  +            #   check whether the existing directory is really owned by
  +            #   us and at the same time fix possible wrong permissions
  +            #   (from an previously existing directory)
  +            chmod 711 /tmp/$LOGNAME >/dev/null 2>&1
  +            if [ $? -eq 0 ]; then
  +                TMPDIR=/tmp/$LOGNAME
  +                export TMPDIR
  +            fi
  +        fi
  +    fi    
  +fi
  +
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct  8 18:17:04 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C0980765C3; Fri,  8 Oct 2004 18:17:03 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog THANKS pth.h.in pth.pod pth_lib.c ...
Message-Id: <20041008161703.C0980765C3@mail.ossp.org>
Date: Fri,  8 Oct 2004 18:17:03 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Oct-2004 18:17:03
  Branch: HEAD                             Handle: 2004100817170200

  Modified files:
    ossp-pkg/pth            ChangeLog THANKS pth.h.in pth.pod pth_lib.c
                            pth_sched.c

  Log:
    Added PTH_CTRL_FAVOURNEW control which allows the user
    to disable the favouring of new threads on scheduling
    to get more strict priority based scheduling behavior.
    
    Triggered by: Vinu V <Vinu_V@mindtree.com>

  Summary:
    Revision    Changes     Path
    1.626       +5  -0      ossp-pkg/pth/ChangeLog
    1.97        +1  -0      ossp-pkg/pth/THANKS
    1.143       +1  -0      ossp-pkg/pth/pth.h.in
    1.164       +9  -0      ossp-pkg/pth/pth.pod
    1.58        +4  -0      ossp-pkg/pth/pth_lib.c
    1.92        +10 -3      ossp-pkg/pth/pth_sched.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.625 -r1.626 ChangeLog
  --- ossp-pkg/pth/ChangeLog	25 Sep 2004 21:14:44 -0000	1.625
  +++ ossp-pkg/pth/ChangeLog	8 Oct 2004 16:17:02 -0000	1.626
  @@ -21,6 +21,11 @@
                     
     Changes between 2.0.2 and 2.0.3 (12-Sep-2004 to xx-xxx-2004)
   
  +   *) Added PTH_CTRL_FAVOURNEW control which allows the user
  +      to disable the favouring of new threads on scheduling
  +      to get more strict priority based scheduling behavior.
  +      [Ralf S. Engelschall, Vinu V <Vinu_V@mindtree.com>]
  +
      *) Upgraded build environment to GNU libtool 1.5.10
         [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/THANKS
  ============================================================================
  $ cvs diff -u -r1.96 -r1.97 THANKS
  --- ossp-pkg/pth/THANKS	12 Sep 2004 11:45:09 -0000	1.96
  +++ ossp-pkg/pth/THANKS	8 Oct 2004 16:17:02 -0000	1.97
  @@ -107,6 +107,7 @@
       o  David Scott Urban           <urban@ast.lmco.com>
       o  Laurent Vaucher             <laurent.vaucher@ficsgrp.com>
       o  Martin Vernard              <vernard@cc.gatech.edu>
  +    o  Vinu V                      <Vinu_V@mindtree.com>
       o  Olaf Wasmuth                <olaf.wasmuth@europe.eds.com>
       o  Chia-Hsing Yu               <davidyu@oio.cx>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth.h.in
  ============================================================================
  $ cvs diff -u -r1.142 -r1.143 pth.h.in
  --- ossp-pkg/pth/pth.h.in	12 Sep 2004 11:36:13 -0000	1.142
  +++ ossp-pkg/pth/pth.h.in	8 Oct 2004 16:17:02 -0000	1.143
  @@ -124,6 +124,7 @@
                                          PTH_CTRL_GETTHREADS_SUSPENDED|\
                                          PTH_CTRL_GETTHREADS_DEAD)
   #define PTH_CTRL_DUMPSTATE            _BIT(10)
  +#define PTH_CTRL_FAVOURNEW            _BIT(11)
   
       /* the time value structure */
   typedef struct timeval pth_time_t;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth.pod
  ============================================================================
  $ cvs diff -u -r1.163 -r1.164 pth.pod
  --- ossp-pkg/pth/pth.pod	13 Jul 2004 10:50:49 -0000	1.163
  +++ ossp-pkg/pth/pth.pod	8 Oct 2004 16:17:02 -0000	1.164
  @@ -679,6 +679,15 @@
   of the internal B<Pth> library state is written to. The main information
   which is currently written out is the current state of the thread pool.
   
  +=item C<PTH_CTRL_FAVOURNEW>
  +
  +This requires a second argument of type `C<int>' which specified whether
  +the B<GNU Pth> scheduler favours new threads on startup, i.e., whether
  +they are moved from the new queue to the top (argument is C<TRUE>) or
  +middle (argument is C<FALSE>) of the ready queue. The default is to
  +favour new threads to make sure they do not starve already at startup,
  +although this slightly violates the strict priority based scheduling.
  +
   =back
   
   The function returns C<-1> on error.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_lib.c
  ============================================================================
  $ cvs diff -u -r1.57 -r1.58 pth_lib.c
  --- ossp-pkg/pth/pth_lib.c	13 Jul 2004 10:50:49 -0000	1.57
  +++ ossp-pkg/pth/pth_lib.c	8 Oct 2004 16:17:02 -0000	1.58
  @@ -193,6 +193,10 @@
           FILE *fp = va_arg(ap, FILE *);
           pth_dumpstate(fp);
       }
  +    else if (query & PTH_CTRL_FAVOURNEW) {
  +        int favournew = va_arg(ap, int);
  +        pth_favournew = (favournew ? 1 : 0);
  +    }
       else
           rc = -1;
       va_end(ap);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_sched.c
  ============================================================================
  $ cvs diff -u -r1.91 -r1.92 pth_sched.c
  --- ossp-pkg/pth/pth_sched.c	13 Jul 2004 10:50:49 -0000	1.91
  +++ ossp-pkg/pth/pth_sched.c	8 Oct 2004 16:17:02 -0000	1.92
  @@ -35,6 +35,7 @@
   intern pth_pqueue_t pth_WQ;         /* queue of threads waiting for an event */
   intern pth_pqueue_t pth_SQ;         /* queue of suspended threads            */
   intern pth_pqueue_t pth_DQ;         /* queue of terminated threads           */
  +intern int          pth_favournew;  /* favour new threads on startup         */
   intern float        pth_loadval;    /* average scheduler load value          */
   
   static int          pth_sigpipe[2]; /* internal signal occurrence pipe       */
  @@ -68,6 +69,9 @@
       pth_pqueue_init(&pth_SQ);
       pth_pqueue_init(&pth_DQ);
   
  +    /* initialize scheduling hints */
  +    pth_favournew = 1; /* the default is the original behaviour */
  +
       /* initialize load support */
       pth_loadval = 1.0;
       pth_time_set(&pth_loadticknext, PTH_TIME_NOW);
  @@ -179,13 +183,16 @@
        */
       for (;;) {
           /*
  -         * Move threads from new queue to ready queue and give
  -         * them maximum priority so they start immediately
  +         * Move threads from new queue to ready queue and optionally
  +         * give them maximum priority so they start immediately.
            */
           while ((t = pth_pqueue_tail(&pth_NQ)) != NULL) {
               pth_pqueue_delete(&pth_NQ, t);
               t->state = PTH_STATE_READY;
  -            pth_pqueue_insert(&pth_RQ, pth_pqueue_favorite_prio(&pth_RQ), t);
  +            if (pth_favournew)
  +                pth_pqueue_insert(&pth_RQ, pth_pqueue_favorite_prio(&pth_RQ), t);
  +            else
  +                pth_pqueue_insert(&pth_RQ, PTH_PRIO_STD, t);
               pth_debug2("pth_scheduler: new thread \"%s\" moved to top of ready queue", t->name);
           }
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct  8 20:31:15 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 192AF7658A; Fri,  8 Oct 2004 20:31:15 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ Makefile.in
Message-Id: <20041008183115.192AF7658A@mail.ossp.org>
Date: Fri,  8 Oct 2004 20:31:15 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Oct-2004 20:31:14
  Branch: HEAD                             Handle: 2004100819311400

  Modified files:
    ossp-pkg/pth            Makefile.in

  Log:
    stylistic cleanup: add pthread.c to list of C files

  Summary:
    Revision    Changes     Path
    1.152       +1  -1      ossp-pkg/pth/Makefile.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.151 -r1.152 Makefile.in
  --- ossp-pkg/pth/Makefile.in	13 Jul 2004 10:50:49 -0000	1.151
  +++ ossp-pkg/pth/Makefile.in	8 Oct 2004 18:31:14 -0000	1.152
  @@ -102,7 +102,7 @@
   HSRCS = $(S)pth_compat.c $(S)pth_debug.c $(S)pth_syscall.c $(S)pth_errno.c $(S)pth_ring.c $(S)pth_mctx.c \
           $(S)pth_uctx.c $(S)pth_clean.c $(S)pth_time.c $(S)pth_tcb.c $(S)pth_util.c $(S)pth_pqueue.c $(S)pth_event.c \
           $(S)pth_sched.c $(S)pth_data.c $(S)pth_msg.c $(S)pth_cancel.c $(S)pth_sync.c $(S)pth_attr.c $(S)pth_lib.c \
  -        $(S)pth_fork.c $(S)pth_high.c $(S)pth_ext.c $(S)pth_string.c
  +        $(S)pth_fork.c $(S)pth_high.c $(S)pth_ext.c $(S)pth_string.c $(S)pthread.c
   
   ##
   ##  ____ UTILITY DEFINITIONS _________________________________________
  @@ .

From ossp-cvs-owner@ossp.org  Thu Oct 14 16:42:35 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D8D8B76577; Thu, 14 Oct 2004 16:42:34 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog pth_data.c
Message-Id: <20041014144234.D8D8B76577@mail.ossp.org>
Date: Thu, 14 Oct 2004 16:42:34 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   14-Oct-2004 16:42:34
  Branch: HEAD                             Handle: 2004101415423400

  Modified files:
    ossp-pkg/pth            ChangeLog pth_data.c

  Log:
    Better error checking in pth_key_xxx() functions.

  Summary:
    Revision    Changes     Path
    1.627       +3  -0      ossp-pkg/pth/ChangeLog
    1.32        +8  -6      ossp-pkg/pth/pth_data.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.626 -r1.627 ChangeLog
  --- ossp-pkg/pth/ChangeLog	8 Oct 2004 16:17:02 -0000	1.626
  +++ ossp-pkg/pth/ChangeLog	14 Oct 2004 14:42:34 -0000	1.627
  @@ -21,6 +21,9 @@
                     
     Changes between 2.0.2 and 2.0.3 (12-Sep-2004 to xx-xxx-2004)
   
  +   *) Better error checking in pth_key_xxx() functions.
  +      [Ralf S. Engelschall]
  +
      *) Added PTH_CTRL_FAVOURNEW control which allows the user
         to disable the favouring of new threads on scheduling
         to get more strict priority based scheduling behavior.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_data.c
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 pth_data.c
  --- ossp-pkg/pth/pth_data.c	13 Jul 2004 10:50:49 -0000	1.31
  +++ ossp-pkg/pth/pth_data.c	14 Oct 2004 14:42:34 -0000	1.32
  @@ -36,6 +36,8 @@
   
   int pth_key_create(pth_key_t *key, void (*func)(void *))
   {
  +    if (key == NULL)
  +        return pth_error(FALSE, EINVAL);
       for ((*key) = 0; (*key) < PTH_KEY_MAX; (*key)++) {
           if (pth_keytab[(*key)].used == FALSE) {
               pth_keytab[(*key)].used = TRUE;
  @@ -48,20 +50,20 @@
   
   int pth_key_delete(pth_key_t key)
   {
  -    if (key >= PTH_KEY_MAX)
  +    if (key < 0 || key >= PTH_KEY_MAX)
           return pth_error(FALSE, EINVAL);
       if (!pth_keytab[key].used)
  -        return pth_error(FALSE, EINVAL);
  +        return pth_error(FALSE, ENOENT);
       pth_keytab[key].used = FALSE;
       return TRUE;
   }
   
   int pth_key_setdata(pth_key_t key, const void *value)
   {
  -    if (key >= PTH_KEY_MAX)
  +    if (key < 0 || key >= PTH_KEY_MAX)
           return pth_error(FALSE, EINVAL);
       if (!pth_keytab[key].used)
  -        return pth_error(FALSE, EINVAL);
  +        return pth_error(FALSE, ENOENT);
       if (pth_current->data_value == NULL) {
           pth_current->data_value = (const void **)calloc(1, sizeof(void *)*PTH_KEY_MAX);
           if (pth_current->data_value == NULL)
  @@ -81,10 +83,10 @@
   
   void *pth_key_getdata(pth_key_t key)
   {
  -    if (key >= PTH_KEY_MAX)
  +    if (key < 0 || key >= PTH_KEY_MAX)
           return pth_error((void *)NULL, EINVAL);
       if (!pth_keytab[key].used)
  -        return pth_error((void *)NULL, EINVAL);
  +        return pth_error((void *)NULL, ENOENT);
       if (pth_current->data_value == NULL)
           return (void *)NULL;
       return (void *)pth_current->data_value[key];
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 15 20:16:53 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6D13B76568; Fri, 15 Oct 2004 20:16:53 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog devtool.conf
Message-Id: <20041015181653.6D13B76568@mail.ossp.org>
Date: Fri, 15 Oct 2004 20:16:53 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Oct-2004 20:16:53
  Branch: HEAD                             Handle: 2004101519165200

  Modified files:
    ossp-pkg/uuid           ChangeLog devtool.conf

  Log:
    Upgrade build environment to GNU libtool 1.5.10

  Summary:
    Revision    Changes     Path
    1.53        +5  -0      ossp-pkg/uuid/ChangeLog
    1.10        +3  -3      ossp-pkg/uuid/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.52 -r1.53 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	12 Sep 2004 14:21:00 -0000	1.52
  +++ ossp-pkg/uuid/ChangeLog	15 Oct 2004 18:16:52 -0000	1.53
  @@ -11,6 +11,11 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 1.0.2 and 1.0.3 (12-Sep-2004 to xx-xxx-2004)
  +
  +   o Upgrade build environment to GNU libtool 1.5.10.
  +     [Ralf S. Engelschall]
  +
     Changes between 1.0.1 and 1.0.2 (16-Jul-2004 to 12-Sep-2004)
   
      o Upgrade build environment to GNU libtool 1.5.8 and GNU shtool 2.0.1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 devtool.conf
  --- ossp-pkg/uuid/devtool.conf	12 Sep 2004 14:21:01 -0000	1.9
  +++ ossp-pkg/uuid/devtool.conf	15 Oct 2004 18:16:52 -0000	1.10
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   2.0.1 "2.0.*" all
  -    @autogen libtool  1.5.8 "1.5*"
  -    @autogen autoconf 2.59  "2.5[3-9]*"
  +    @autogen shtool   2.0.1  "2.0.*" all
  +    @autogen libtool  1.5.10 "1.5*"
  +    @autogen autoconf 2.59   "2.5[3-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 15 20:17:45 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 78C2D76568; Fri, 15 Oct 2004 20:17:45 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ configure.ac
Message-Id: <20041015181745.78C2D76568@mail.ossp.org>
Date: Fri, 15 Oct 2004 20:17:45 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Oct-2004 20:17:45
  Branch: HEAD                             Handle: 2004101519174500

  Modified files:
    ossp-pkg/uuid           configure.ac

  Log:
    fix configure under libtool 1.5.10

  Summary:
    Revision    Changes     Path
    1.7         +0  -3      ossp-pkg/uuid/configure.ac
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/configure.ac
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 configure.ac
  --- ossp-pkg/uuid/configure.ac	19 Jan 2004 13:46:03 -0000	1.6
  +++ ossp-pkg/uuid/configure.ac	15 Oct 2004 18:17:45 -0000	1.7
  @@ -39,9 +39,6 @@
   AC_PROG_CC
   AC_CHECK_DEBUGGING
   
  -m4_defun([AC_PROG_CXX])
  -m4_defun([AC_PROG_CXXCPP])
  -m4_defun([AC_PROG_F77])
   with_tags=""
   sinclude(libtool.m4)
   AC_PROG_LIBTOOL
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 15 20:22:32 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AFCC376568; Fri, 15 Oct 2004 20:22:31 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog Makefile.in configure.ac
Message-Id: <20041015182231.AFCC376568@mail.ossp.org>
Date: Fri, 15 Oct 2004 20:22:31 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Oct-2004 20:22:31
  Branch: HEAD                             Handle: 2004101519223100

  Modified files:
    ossp-pkg/uuid           ChangeLog Makefile.in configure.ac

  Log:
    Support configuring/building/installing from an arbitrary
    directory via srcdir/top_srcdir/VPATH.
    
    Submitted by: David Lee <t.d.lee@durham.ac.uk>

  Summary:
    Revision    Changes     Path
    1.54        +4  -0      ossp-pkg/uuid/ChangeLog
    1.20        +25 -21     ossp-pkg/uuid/Makefile.in
    1.8         +4  -3      ossp-pkg/uuid/configure.ac
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.53 -r1.54 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	15 Oct 2004 18:16:52 -0000	1.53
  +++ ossp-pkg/uuid/ChangeLog	15 Oct 2004 18:22:31 -0000	1.54
  @@ -13,6 +13,10 @@
   
     Changes between 1.0.2 and 1.0.3 (12-Sep-2004 to xx-xxx-2004)
   
  +   o Support configuring/building/installing from an arbitrary
  +     directory via srcdir/top_srcdir/VPATH.
  +     [David Lee <t.d.lee@durham.ac.uk>, Ralf S. Engelschall]
  +
      o Upgrade build environment to GNU libtool 1.5.10.
        [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	13 Feb 2004 21:10:35 -0000	1.19
  +++ ossp-pkg/uuid/Makefile.in	15 Oct 2004 18:22:31 -0000	1.20
  @@ -29,6 +29,10 @@
   
   @SET_MAKE@
   
  +srcdir      = @srcdir@
  +top_srcdir  = @top_srcdir@
  +VPATH       = @srcdir@
  +
   DESTDIR     =
   prefix      = @prefix@
   exec_prefix = @exec_prefix@
  @@ -38,14 +42,14 @@
   mandir      = @mandir@
   
   CC          = @CC@
  -CPPFLAGS    = @CPPFLAGS@
  +CPPFLAGS    = -I. -I$(srcdir) @CPPFLAGS@
   CFLAGS      = @DEFS@ @CFLAGS@
   LDFLAGS     = @LDFLAGS@
   LIBS        = @LIBS@
   RM          = rm -f
   CP          = cp
   RMDIR       = rmdir
  -SHTOOL      = ./shtool
  +SHTOOL      = $(top_srcdir)/shtool
   LIBTOOL     = ./libtool
   TRUE        = true
   POD2MAN     = pod2man
  @@ -98,26 +102,26 @@
   
   man: uuid.3 uuid-config.1 uuid.1
   uuid.3: uuid.pod
  -	V1=`$(SHTOOL) version -l txt -d short VERSION`; \
  -	V2=`$(SHTOOL) version -l txt -d long VERSION`; \
  -	D=`$(SHTOOL) version -l txt -d long VERSION | sed -e 's;.*(;;' -e 's;).*;;'`; \
  +	V1=`$(SHTOOL) version -l txt -d short $(top_srcdir)/VERSION`; \
  +	V2=`$(SHTOOL) version -l txt -d long $(top_srcdir)/VERSION`; \
  +	D=`$(SHTOOL) version -l txt -d long $(top_srcdir)/VERSION | sed -e 's;.*(;;' -e 's;).*;;'`; \
   	$(POD2MAN) --quotes=none \
   	           --section=3 --center="Universally Unique Identifier" \
  -	           --release="$$D" --date="OSSP uuid $$V1" uuid.pod | \
  +	           --release="$$D" --date="OSSP uuid $$V1" $(srcdir)/uuid.pod | \
   	sed -e "s;UUID_VERSION_STR;$$V2;" >uuid.3
   uuid-config.1: uuid-config.pod
  -	V1=`$(SHTOOL) version -l txt -d short VERSION`; \
  -	V2=`$(SHTOOL) version -l txt -d long VERSION`; \
  -	D=`$(SHTOOL) version -l txt -d long VERSION | sed -e 's;.*(;;' -e 's;).*;;'`; \
  +	V1=`$(SHTOOL) version -l txt -d short $(top_srcdir)/VERSION`; \
  +	V2=`$(SHTOOL) version -l txt -d long $(top_srcdir)/VERSION`; \
  +	D=`$(SHTOOL) version -l txt -d long $(top_srcdir)/VERSION | sed -e 's;.*(;;' -e 's;).*;;'`; \
   	$(POD2MAN) --quotes=none \
   	           --section=3 --center="Universally Unique Identifier" \
  -	           --release="$$D" --date="OSSP uuid $$V1" uuid-config.pod | \
  +	           --release="$$D" --date="OSSP uuid $$V1" $(srcdir)/uuid-config.pod | \
   	sed -e "s;UUID_VERSION_STR;$$V2;" >uuid-config.1
   uuid.1: uuid_cli.pod
  -	V1=`$(SHTOOL) version -l txt -d short VERSION`; \
  -	V2=`$(SHTOOL) version -l txt -d long VERSION`; \
  -	D=`$(SHTOOL) version -l txt -d long VERSION | sed -e 's;.*(;;' -e 's;).*;;'`; \
  -	$(CP) uuid_cli.pod /tmp/uuid.pod; \
  +	V1=`$(SHTOOL) version -l txt -d short $(top_srcdir)/VERSION`; \
  +	V2=`$(SHTOOL) version -l txt -d long $(top_srcdir)/VERSION`; \
  +	D=`$(SHTOOL) version -l txt -d long $(top_srcdir)/VERSION | sed -e 's;.*(;;' -e 's;).*;;'`; \
  +	$(CP) $(srcdir)/uuid_cli.pod /tmp/uuid.pod; \
   	$(POD2MAN) --quotes=none \
   	           --section=1 --center="Universally Unique Identifier" \
   	           --release="$$D" --date="OSSP uuid $$V1" /tmp/uuid.pod | \
  @@ -150,20 +154,20 @@
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libdir)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man3
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man1
  -	$(SHTOOL) install -c -m 755 uuid-config $(DESTDIR)$(bindir)/
  -	$(SHTOOL) install -c -m 644 uuid-config.1 $(DESTDIR)$(mandir)/man1/
  -	$(SHTOOL) install -c -m 644 uuid.h $(DESTDIR)$(includedir)/
  +	$(SHTOOL) install -c -m 755 ./uuid-config $(DESTDIR)$(bindir)/
  +	$(SHTOOL) install -c -m 644 $(srcdir)/uuid-config.1 $(DESTDIR)$(mandir)/man1/
  +	$(SHTOOL) install -c -m 644 ./uuid.h $(DESTDIR)$(includedir)/
   	-@if [ ".$(WITH_DCE)" = .yes ]; then \
  -	    echo "$(SHTOOL) install -c -m 644 uuid_dce.h $(DESTDIR)$(includedir)/"; \
  -	    $(SHTOOL) install -c -m 644 uuid_dce.h $(DESTDIR)$(includedir)/; \
  +	    echo "$(SHTOOL) install -c -m 644 $(srcdir)/uuid_dce.h $(DESTDIR)$(includedir)/"; \
  +	    $(SHTOOL) install -c -m 644 $(srcdir)/uuid_dce.h $(DESTDIR)$(includedir)/; \
   	fi
  -	$(SHTOOL) install -c -m 644 uuid.3 $(DESTDIR)$(mandir)/man3/
  +	$(SHTOOL) install -c -m 644 $(srcdir)/uuid.3 $(DESTDIR)$(mandir)/man3/
   	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libuuid.la $(DESTDIR)$(libdir)/
   	-@if [ ".$(WITH_DCE)" = .yes ]; then \
   	    $(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libuuid_dce.la $(DESTDIR)$(libdir)/; \
   	fi
   	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -s -m 755 uuid $(DESTDIR)$(bindir)/
  -	$(SHTOOL) install -c -m 644 uuid.1 $(DESTDIR)$(mandir)/man1/
  +	$(SHTOOL) install -c -m 644 $(srcdir)/uuid.1 $(DESTDIR)$(mandir)/man1/
   
   uninstall:
   	-$(RM) $(DESTDIR)$(mandir)/man1/uuid.1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/configure.ac
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 configure.ac
  --- ossp-pkg/uuid/configure.ac	15 Oct 2004 18:17:45 -0000	1.7
  +++ ossp-pkg/uuid/configure.ac	15 Oct 2004 18:22:31 -0000	1.8
  @@ -29,9 +29,10 @@
   
   AC_PREREQ(2.53)
   AC_INIT
  -UUID_VERSION_STR=`./shtool version -l c -d long uuid_vers.h`
  -UUID_VERSION_HEX=`./shtool version -l c -d hex  uuid_vers.h`
  -./shtool echo -e "Configuring %BOSSP uuid%b (Universally Unique Identifier), version %B${UUID_VERSION_STR}%b"
  +UUID_VERSION_STR=`$ac_confdir/shtool version -l c -d long uuid_vers.h`
  +UUID_VERSION_HEX=`$ac_confdir/shtool version -l c -d hex  uuid_vers.h`
  +$ac_confdir/shtool echo -e \
  +    "Configuring %BOSSP uuid%b (Universally Unique Identifier), version %B${UUID_VERSION_STR}%b"
   AC_SUBST(UUID_VERSION_STR)
   AC_SUBST(UUID_VERSION_HEX)
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 15 20:27:33 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EE40D76568; Fri, 15 Oct 2004 20:27:32 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ README uuid_vers.h
Message-Id: <20041015182732.EE40D76568@mail.ossp.org>
Date: Fri, 15 Oct 2004 20:27:32 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Oct-2004 20:27:32
  Branch: HEAD                             Handle: 2004101519273200

  Modified files:
    ossp-pkg/uuid           README uuid_vers.h

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.18        +1  -1      ossp-pkg/uuid/README
    1.9         +9  -9      ossp-pkg/uuid/uuid_vers.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 README
  --- ossp-pkg/uuid/README	12 Sep 2004 15:23:35 -0000	1.17
  +++ ossp-pkg/uuid/README	15 Oct 2004 18:27:32 -0000	1.18
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
   
     OSSP uuid - Universally Unique Identifier
  -  Version 1.0.2 (12-Sep-2004)
  +  Version 1.0.3 (15-Oct-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_vers.h
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 uuid_vers.h
  --- ossp-pkg/uuid/uuid_vers.h	12 Sep 2004 15:23:35 -0000	1.8
  +++ ossp-pkg/uuid/uuid_vers.h	15 Oct 2004 18:27:32 -0000	1.9
  @@ -8,7 +8,7 @@
   #ifndef _UUID_VERS_H_
   #define _UUID_VERS_H_
   
  -#define _UUID_VERSION 0x100202
  +#define _UUID_VERSION 0x100203
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _UUID_VERS_H_AS_HEADER_
   
   _uuid_version_t _uuid_version = {
  -    0x100202,
  -    "1.0.2",
  -    "1.0.2 (12-Sep-2004)",
  -    "This is OSSP uuid, Version 1.0.2 (12-Sep-2004)",
  -    "OSSP uuid 1.0.2 (12-Sep-2004)",
  -    "OSSP uuid/1.0.2",
  -    "@(#)OSSP uuid 1.0.2 (12-Sep-2004)",
  -    "$Id: OSSP uuid 1.0.2 (12-Sep-2004) $"
  +    0x100203,
  +    "1.0.3",
  +    "1.0.3 (15-Oct-2004)",
  +    "This is OSSP uuid, Version 1.0.3 (15-Oct-2004)",
  +    "OSSP uuid 1.0.3 (15-Oct-2004)",
  +    "OSSP uuid/1.0.3",
  +    "@(#)OSSP uuid 1.0.3 (15-Oct-2004)",
  +    "$Id: OSSP uuid 1.0.3 (15-Oct-2004) $"
   };
   
   #endif /* _UUID_VERS_H_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 15 20:27:49 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D36B67657A; Fri, 15 Oct 2004 20:27:48 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog
Message-Id: <20041015182748.D36B67657A@mail.ossp.org>
Date: Fri, 15 Oct 2004 20:27:48 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Oct-2004 20:27:48
  Branch: HEAD                             Handle: 2004101519274800

  Modified files:
    ossp-pkg/uuid           ChangeLog

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.55        +1  -1      ossp-pkg/uuid/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.54 -r1.55 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	15 Oct 2004 18:22:31 -0000	1.54
  +++ ossp-pkg/uuid/ChangeLog	15 Oct 2004 18:27:48 -0000	1.55
  @@ -11,7 +11,7 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 1.0.2 and 1.0.3 (12-Sep-2004 to xx-xxx-2004)
  +  Changes between 1.0.2 and 1.0.3 (12-Sep-2004 to 15-Oct-2004)
   
      o Support configuring/building/installing from an arbitrary
        directory via srcdir/top_srcdir/VPATH.
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 15 20:57:29 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 178AD76568; Fri, 15 Oct 2004 20:57:29 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20041015185729.178AD76568@mail.ossp.org>
Date: Fri, 15 Oct 2004 20:57:29 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   15-Oct-2004 20:57:28
  Branch: HEAD                             Handle: 2004101519572701

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/uuid   index.wml

  Log:
    release OSSP uuid 1.0.3

  Summary:
    Revision    Changes     Path
    1.101       +1  -0      ossp-web/new/news.txt
    1.87        +1  -1      ossp-web/pkg/lib/index.wml
    1.16        +2  -2      ossp-web/pkg/lib/uuid/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.100 -r1.101 news.txt
  --- ossp-web/new/news.txt	12 Sep 2004 18:56:58 -0000	1.100
  +++ ossp-web/new/news.txt	15 Oct 2004 18:57:27 -0000	1.101
  @@ -1,3 +1,4 @@
  +15-Oct-2004: Released L<OSSP uuid> 1.0.3
   12-Sep-2004: Released L<OSSP mm> 1.3.1
   12-Sep-2004: Released L<OSSP val> 0.9.3
   12-Sep-2004: Released L<OSSP var> 1.1.1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.86 -r1.87 index.wml
  --- ossp-web/pkg/lib/index.wml	12 Sep 2004 18:56:59 -0000	1.86
  +++ ossp-web/pkg/lib/index.wml	15 Oct 2004 18:57:28 -0000	1.87
  @@ -33,7 +33,7 @@
   			done=100 stable=1.1.1 unstable=none>
     <pkg_item name="uuid" longname="OSSP uuid" type="lib"
               desc="Universally Unique Identifier"
  -			done=100 stable=1.0.2 unstable=none>
  +			done=100 stable=1.0.3 unstable=none>
     <pkg_item name="val" longname="OSSP val" type="lib"
               desc="Value Access"
   			done=95 stable=none unstable=0.9.3>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/uuid/index.wml
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 index.wml
  --- ossp-web/pkg/lib/uuid/index.wml	12 Sep 2004 15:28:05 -0000	1.15
  +++ ossp-web/pkg/lib/uuid/index.wml	15 Oct 2004 18:57:28 -0000	1.16
  @@ -43,7 +43,7 @@
   
   <pkg_status
       name="uuid" assign="rse"
  -    stable="1.0.2"    stable_date="12-Sep-2004"
  +    stable="1.0.3"    stable_date="15-Oct-2004"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -54,7 +54,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/uuid/
       directory=$(FTP_ROOT_DIR)/pkg/lib/uuid/
       files="uuid-[0-9.]*.tar.gz" 
  -	stable="uuid-1\.0\.2\.tar\.gz" unstable="none">
  +	stable="uuid-1\.0\.3\.tar\.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Oct 16 20:20:19 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4119A763AA; Sat, 16 Oct 2004 20:20:19 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog Makefile.in
Message-Id: <20041016182019.4119A763AA@mail.ossp.org>
Date: Sat, 16 Oct 2004 20:20:19 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Oct-2004 20:20:19
  Branch: HEAD                             Handle: 2004101619201800

  Modified files:
    ossp-pkg/uuid           ChangeLog Makefile.in

  Log:
    Fix version detection from uuid_vers.h

  Summary:
    Revision    Changes     Path
    1.56        +5  -0      ossp-pkg/uuid/ChangeLog
    1.21        +11 -11     ossp-pkg/uuid/Makefile.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.55 -r1.56 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	15 Oct 2004 18:27:48 -0000	1.55
  +++ ossp-pkg/uuid/ChangeLog	16 Oct 2004 18:20:18 -0000	1.56
  @@ -11,6 +11,11 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 1.0.4 and 1.0.4 (15-Oct-2004 to 16-Oct-2004)
  +
  +   o Fix version detection from uuid_vers.h
  +     [Ralf S. Engelschall]
  +
     Changes between 1.0.2 and 1.0.3 (12-Sep-2004 to 15-Oct-2004)
   
      o Support configuring/building/installing from an arbitrary
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	15 Oct 2004 18:22:31 -0000	1.20
  +++ ossp-pkg/uuid/Makefile.in	16 Oct 2004 18:20:18 -0000	1.21
  @@ -82,11 +82,11 @@
   
   $(LIB_NAME): $(LIB_OBJS)
   	@$(LIBTOOL) --mode=link $(CC) -o $(LIB_NAME) $(LIB_OBJS) -rpath $(libdir) \
  -	    -version-info `$(SHTOOL) version -l txt -d libtool VERSION`
  +	    -version-info `$(SHTOOL) version -l c -d libtool $(top_srcdir)/uuid_vers.h`
   
   $(DCE_NAME): $(DCE_OBJS)
   	@$(LIBTOOL) --mode=link $(CC) -o $(DCE_NAME) $(DCE_OBJS) -rpath $(libdir) \
  -	    -version-info `$(SHTOOL) version -l txt -d libtool VERSION`
  +	    -version-info `$(SHTOOL) version -l c -d libtool $(top_srcdir)/uuid_vers.h`
   
   $(PRG_NAME): $(PRG_OBJS) $(LIB_NAME)
   	@$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $(PRG_NAME) $(PRG_OBJS) $(LIB_NAME) $(LIBS)
  @@ -102,25 +102,25 @@
   
   man: uuid.3 uuid-config.1 uuid.1
   uuid.3: uuid.pod
  -	V1=`$(SHTOOL) version -l txt -d short $(top_srcdir)/VERSION`; \
  -	V2=`$(SHTOOL) version -l txt -d long $(top_srcdir)/VERSION`; \
  -	D=`$(SHTOOL) version -l txt -d long $(top_srcdir)/VERSION | sed -e 's;.*(;;' -e 's;).*;;'`; \
  +	V1=`$(SHTOOL) version -l c -d short $(top_srcdir)/uuid_vers.h`; \
  +	V2=`$(SHTOOL) version -l c -d long $(top_srcdir)/uuid_vers.h`; \
  +	D=`$(SHTOOL) version -l c -d long $(top_srcdir)/uuid_vers.h | sed -e 's;.*(;;' -e 's;).*;;'`; \
   	$(POD2MAN) --quotes=none \
   	           --section=3 --center="Universally Unique Identifier" \
   	           --release="$$D" --date="OSSP uuid $$V1" $(srcdir)/uuid.pod | \
   	sed -e "s;UUID_VERSION_STR;$$V2;" >uuid.3
   uuid-config.1: uuid-config.pod
  -	V1=`$(SHTOOL) version -l txt -d short $(top_srcdir)/VERSION`; \
  -	V2=`$(SHTOOL) version -l txt -d long $(top_srcdir)/VERSION`; \
  -	D=`$(SHTOOL) version -l txt -d long $(top_srcdir)/VERSION | sed -e 's;.*(;;' -e 's;).*;;'`; \
  +	V1=`$(SHTOOL) version -l c -d short $(top_srcdir)/uuid_vers.h`; \
  +	V2=`$(SHTOOL) version -l c -d long $(top_srcdir)/uuid_vers.h`; \
  +	D=`$(SHTOOL) version -l c -d long $(top_srcdir)/uuid_vers.h | sed -e 's;.*(;;' -e 's;).*;;'`; \
   	$(POD2MAN) --quotes=none \
   	           --section=3 --center="Universally Unique Identifier" \
   	           --release="$$D" --date="OSSP uuid $$V1" $(srcdir)/uuid-config.pod | \
   	sed -e "s;UUID_VERSION_STR;$$V2;" >uuid-config.1
   uuid.1: uuid_cli.pod
  -	V1=`$(SHTOOL) version -l txt -d short $(top_srcdir)/VERSION`; \
  -	V2=`$(SHTOOL) version -l txt -d long $(top_srcdir)/VERSION`; \
  -	D=`$(SHTOOL) version -l txt -d long $(top_srcdir)/VERSION | sed -e 's;.*(;;' -e 's;).*;;'`; \
  +	V1=`$(SHTOOL) version -l c -d short $(top_srcdir)/uuid_vers.h`; \
  +	V2=`$(SHTOOL) version -l c -d long $(top_srcdir)/uuid_vers.h`; \
  +	D=`$(SHTOOL) version -l c -d long $(top_srcdir)/uuid_vers.h | sed -e 's;.*(;;' -e 's;).*;;'`; \
   	$(CP) $(srcdir)/uuid_cli.pod /tmp/uuid.pod; \
   	$(POD2MAN) --quotes=none \
   	           --section=1 --center="Universally Unique Identifier" \
  @@ .

From ossp-cvs-owner@ossp.org  Sat Oct 16 20:23:19 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 377C376493; Sat, 16 Oct 2004 20:23:19 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ README uuid_vers.h
Message-Id: <20041016182319.377C376493@mail.ossp.org>
Date: Sat, 16 Oct 2004 20:23:19 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Oct-2004 20:23:19
  Branch: HEAD                             Handle: 2004101619231800

  Modified files:
    ossp-pkg/uuid           README uuid_vers.h

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.19        +1  -1      ossp-pkg/uuid/README
    1.10        +9  -9      ossp-pkg/uuid/uuid_vers.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 README
  --- ossp-pkg/uuid/README	15 Oct 2004 18:27:32 -0000	1.18
  +++ ossp-pkg/uuid/README	16 Oct 2004 18:23:18 -0000	1.19
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
   
     OSSP uuid - Universally Unique Identifier
  -  Version 1.0.3 (15-Oct-2004)
  +  Version 1.0.4 (16-Oct-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_vers.h
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 uuid_vers.h
  --- ossp-pkg/uuid/uuid_vers.h	15 Oct 2004 18:27:32 -0000	1.9
  +++ ossp-pkg/uuid/uuid_vers.h	16 Oct 2004 18:23:18 -0000	1.10
  @@ -8,7 +8,7 @@
   #ifndef _UUID_VERS_H_
   #define _UUID_VERS_H_
   
  -#define _UUID_VERSION 0x100203
  +#define _UUID_VERSION 0x100204
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _UUID_VERS_H_AS_HEADER_
   
   _uuid_version_t _uuid_version = {
  -    0x100203,
  -    "1.0.3",
  -    "1.0.3 (15-Oct-2004)",
  -    "This is OSSP uuid, Version 1.0.3 (15-Oct-2004)",
  -    "OSSP uuid 1.0.3 (15-Oct-2004)",
  -    "OSSP uuid/1.0.3",
  -    "@(#)OSSP uuid 1.0.3 (15-Oct-2004)",
  -    "$Id: OSSP uuid 1.0.3 (15-Oct-2004) $"
  +    0x100204,
  +    "1.0.4",
  +    "1.0.4 (16-Oct-2004)",
  +    "This is OSSP uuid, Version 1.0.4 (16-Oct-2004)",
  +    "OSSP uuid 1.0.4 (16-Oct-2004)",
  +    "OSSP uuid/1.0.4",
  +    "@(#)OSSP uuid 1.0.4 (16-Oct-2004)",
  +    "$Id: OSSP uuid 1.0.4 (16-Oct-2004) $"
   };
   
   #endif /* _UUID_VERS_H_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Sat Oct 16 20:32:09 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9C34176493; Sat, 16 Oct 2004 20:32:09 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20041016183209.9C34176493@mail.ossp.org>
Date: Sat, 16 Oct 2004 20:32:09 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   16-Oct-2004 20:32:09
  Branch: HEAD                             Handle: 2004101619320801

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/uuid   index.wml

  Log:
    releae OSSP uuid 1.0.4

  Summary:
    Revision    Changes     Path
    1.102       +1  -0      ossp-web/new/news.txt
    1.88        +1  -1      ossp-web/pkg/lib/index.wml
    1.17        +2  -2      ossp-web/pkg/lib/uuid/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.101 -r1.102 news.txt
  --- ossp-web/new/news.txt	15 Oct 2004 18:57:27 -0000	1.101
  +++ ossp-web/new/news.txt	16 Oct 2004 18:32:08 -0000	1.102
  @@ -1,3 +1,4 @@
  +16-Oct-2004: Released L<OSSP uuid> 1.0.4
   15-Oct-2004: Released L<OSSP uuid> 1.0.3
   12-Sep-2004: Released L<OSSP mm> 1.3.1
   12-Sep-2004: Released L<OSSP val> 0.9.3
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.87 -r1.88 index.wml
  --- ossp-web/pkg/lib/index.wml	15 Oct 2004 18:57:28 -0000	1.87
  +++ ossp-web/pkg/lib/index.wml	16 Oct 2004 18:32:08 -0000	1.88
  @@ -33,7 +33,7 @@
   			done=100 stable=1.1.1 unstable=none>
     <pkg_item name="uuid" longname="OSSP uuid" type="lib"
               desc="Universally Unique Identifier"
  -			done=100 stable=1.0.3 unstable=none>
  +			done=100 stable=1.0.4 unstable=none>
     <pkg_item name="val" longname="OSSP val" type="lib"
               desc="Value Access"
   			done=95 stable=none unstable=0.9.3>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/uuid/index.wml
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 index.wml
  --- ossp-web/pkg/lib/uuid/index.wml	15 Oct 2004 18:57:28 -0000	1.16
  +++ ossp-web/pkg/lib/uuid/index.wml	16 Oct 2004 18:32:09 -0000	1.17
  @@ -43,7 +43,7 @@
   
   <pkg_status
       name="uuid" assign="rse"
  -    stable="1.0.3"    stable_date="15-Oct-2004"
  +    stable="1.0.4"    stable_date="16-Oct-2004"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -54,7 +54,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/uuid/
       directory=$(FTP_ROOT_DIR)/pkg/lib/uuid/
       files="uuid-[0-9.]*.tar.gz" 
  -	stable="uuid-1\.0\.3\.tar\.gz" unstable="none">
  +	stable="uuid-1\.0\.4\.tar\.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct 18 21:35:47 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E20377651F; Mon, 18 Oct 2004 21:35:46 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog pth_msg.c
Message-Id: <20041018193546.E20377651F@mail.ossp.org>
Date: Mon, 18 Oct 2004 21:35:46 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Oct-2004 21:35:46
  Branch: HEAD                             Handle: 2004101820354500

  Modified files:
    ossp-pkg/pth            ChangeLog pth_msg.c

  Log:
    Do not break in pth_msgport_find() if a message port
    was created with a NULL name.

  Summary:
    Revision    Changes     Path
    1.628       +4  -0      ossp-pkg/pth/ChangeLog
    1.28        +4  -3      ossp-pkg/pth/pth_msg.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.627 -r1.628 ChangeLog
  --- ossp-pkg/pth/ChangeLog	14 Oct 2004 14:42:34 -0000	1.627
  +++ ossp-pkg/pth/ChangeLog	18 Oct 2004 19:35:45 -0000	1.628
  @@ -21,6 +21,10 @@
                     
     Changes between 2.0.2 and 2.0.3 (12-Sep-2004 to xx-xxx-2004)
   
  +   *) Do not break in pth_msgport_find() if a message port
  +      was created with a NULL name.
  +      [Ralf S. Engelschall]
  +
      *) Better error checking in pth_key_xxx() functions.
         [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_msg.c
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 pth_msg.c
  --- ossp-pkg/pth/pth_msg.c	13 Jul 2004 10:50:49 -0000	1.27
  +++ ossp-pkg/pth/pth_msg.c	18 Oct 2004 19:35:45 -0000	1.28
  @@ -97,8 +97,9 @@
       /* iterate over message ports */
       mp = mpf = (pth_msgport_t)pth_ring_first(&pth_msgport);
       while (mp != NULL) {
  -        if (strcmp(mp->mp_name, name) == 0)
  -            break;
  +        if (mp->mp_name != NULL)
  +            if (strcmp(mp->mp_name, name) == 0)
  +                break;
           mp = (pth_msgport_t)pth_ring_next(&pth_msgport, (pth_ringnode_t *)mp);
           if (mp == mpf) {
               mp = NULL;
  @@ -108,7 +109,7 @@
       return mp;
   }
   
  -/* number of message on a port */
  +/* number of messages on a port */
   int pth_msgport_pending(pth_msgport_t mp)
   {
       if (mp == NULL)
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 22 21:16:54 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 66DD476579; Fri, 22 Oct 2004 21:16:54 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/due/.due/ due.cd.sh
Message-Id: <20041022191654.66DD476579@mail.ossp.org>
Date: Fri, 22 Oct 2004 21:16:54 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Oct-2004 21:16:53
  Branch: HEAD                             Handle: 2004102220165300

  Modified files:
    ossp-pkg/due/.due       due.cd.sh

  Log:
    do not output escape sequences in batch mode

  Summary:
    Revision    Changes     Path
    1.2         +7  -5      ossp-pkg/due/.due/due.cd.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.due/due.cd.sh
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 due.cd.sh
  --- ossp-pkg/due/.due/due.cd.sh	10 Jul 2004 08:17:15 -0000	1.1
  +++ ossp-pkg/due/.due/due.cd.sh	22 Oct 2004 19:16:53 -0000	1.2
  @@ -68,11 +68,13 @@
       PS1="\\u@\\h:$PWD\n\\\$ "
   
       #   adjust the X11 terminal window title with new $PWD (optional)
  -    case "$TERM" in
  -        xterm | xterm-* )
  -            echo -n $'\e]0;'"$USER@$HOSTNAME:$PWD"$'\cg'
  -            ;;
  -    esac
  +    if [ ".$BASH_INTERACTIVE" = .yes ]; then
  +        case "$TERM" in
  +            xterm | xterm-* )
  +                echo -n $'\e]0;'"$USER@$HOSTNAME:$PWD"$'\cg'
  +                ;;
  +        esac
  +    fi
   }
   
   #   initially adjust the environment
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 22 21:17:14 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8D242765CB; Fri, 22 Oct 2004 21:17:14 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/due/ devtool.conf
Message-Id: <20041022191714.8D242765CB@mail.ossp.org>
Date: Fri, 22 Oct 2004 21:17:14 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Oct-2004 21:17:14
  Branch: HEAD                             Handle: 2004102220171400

  Modified files:
    ossp-pkg/due            devtool.conf

  Log:
    upgrade to GNU shtool 2.0.1

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/due/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.conf
  --- ossp-pkg/due/devtool.conf	10 Jul 2004 10:20:14 -0000	1.2
  +++ ossp-pkg/due/devtool.conf	22 Oct 2004 19:17:14 -0000	1.3
  @@ -4,7 +4,7 @@
   
   %autogen
       @autogen autoconf 2.59 "2.5*"
  -    @autogen shtool 2.0.0 "2.0.*" all
  +    @autogen shtool 2.0.1  "2.0.*" all
   
   %autoclean
       @autoclean autoconf
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 22 21:17:23 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AA2AE7661F; Fri, 22 Oct 2004 21:17:23 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/due/ ChangeLog THANKS
Message-Id: <20041022191723.AA2AE7661F@mail.ossp.org>
Date: Fri, 22 Oct 2004 21:17:23 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Oct-2004 21:17:23
  Branch: HEAD                             Handle: 2004102220172300

  Modified files:
    ossp-pkg/due            ChangeLog THANKS

  Log:
    cleanup texts

  Summary:
    Revision    Changes     Path
    1.2         +6  -6      ossp-pkg/due/ChangeLog
    1.2         +1  -1      ossp-pkg/due/THANKS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ChangeLog
  --- ossp-pkg/due/ChangeLog	10 Jul 2004 10:19:14 -0000	1.1
  +++ ossp-pkg/due/ChangeLog	22 Oct 2004 19:17:23 -0000	1.2
  @@ -1,9 +1,9 @@
  -  _        ___  ____ ____  ____        _ 
  - |_|_ _   / _ \/ ___/ ___||  _ \    __| |_   _  ___
  - _|_||_| | | | \___ \___ \| |_) |  / _` | | | |/ _ \
  -|_||_|_| | |_| |___) |__) |  __/  | (_| | |_| |  __/
  - |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|\___|
  -
  +   _        ___  ____ ____  ____        _ 
  +  |_|_ _   / _ \/ ___/ ___||  _ \    __| |_   _  ___
  +  _|_||_| | | | \___ \___ \| |_) |  / _` | | | |/ _ \
  + |_||_|_| | |_| |___) |__) |  __/  | (_| | |_| |  __/
  +  |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|\___|
  + 
    OSSP due - Dynamic User Environment
   
    ChangeLog
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/THANKS
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 THANKS
  --- ossp-pkg/due/THANKS	10 Jul 2004 10:19:14 -0000	1.1
  +++ ossp-pkg/due/THANKS	22 Oct 2004 19:17:23 -0000	1.2
  @@ -12,5 +12,5 @@
     o Thomas Lotterer          <thomas@lotterer.net>
     o Christoph Schug          <chris@schug.net>
   
  -  ...and all other shtool users who gave me feedback but I've forgot.
  +  ...and all other OSSP due users who gave me feedback but I've forgot.
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 22 21:32:53 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 459E9765A9; Fri, 22 Oct 2004 21:32:53 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/due/ .bash.local.rse .bashrc ossp-pkg/due/.due/ d...
Message-Id: <20041022193253.459E9765A9@mail.ossp.org>
Date: Fri, 22 Oct 2004 21:32:53 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Oct-2004 21:32:53
  Branch: HEAD                             Handle: 2004102220325101

  Added files:
    ossp-pkg/due/.due       due.fs.sh
  Modified files:
    ossp-pkg/due            .bash.local.rse .bashrc
    ossp-pkg/due/.due       due.cd.sh due.editor.sh due.local.sh due.ls.sh
                            due.platform.sh due.recue.sh due.root.sh
                            due.term.sh due.tmpdir.sh due.util.sh
  Removed files:
    ossp-pkg/due/.due       due.ff.sh

  Log:
    umask and ff into a new due.fs.sh module and cleanup comments

  Summary:
    Revision    Changes     Path
    1.2         +29 -0      ossp-pkg/due/.bash.local.rse
    1.2         +0  -2      ossp-pkg/due/.bashrc
    1.3         +1  -1      ossp-pkg/due/.due/due.cd.sh
    1.2         +1  -1      ossp-pkg/due/.due/due.editor.sh
    1.2         +0  -40     ossp-pkg/due/.due/due.ff.sh
    1.1         +44 -0      ossp-pkg/due/.due/due.fs.sh
    1.2         +1  -1      ossp-pkg/due/.due/due.local.sh
    1.2         +1  -1      ossp-pkg/due/.due/due.ls.sh
    1.2         +1  -1      ossp-pkg/due/.due/due.platform.sh
    1.2         +1  -1      ossp-pkg/due/.due/due.recue.sh
    1.2         +1  -1      ossp-pkg/due/.due/due.root.sh
    1.3         +1  -1      ossp-pkg/due/.due/due.term.sh
    1.2         +1  -1      ossp-pkg/due/.due/due.tmpdir.sh
    1.2         +1  -1      ossp-pkg/due/.due/due.util.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.bash.local.rse
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 .bash.local.rse
  --- ossp-pkg/due/.bash.local.rse	10 Jul 2004 08:17:12 -0000	1.1
  +++ ossp-pkg/due/.bash.local.rse	22 Oct 2004 19:32:51 -0000	1.2
  @@ -1,4 +1,33 @@
  +##
  +##  OSSP due - Dynamic User Environment
  +##  Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1994-2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP due, a dynamic user environment
  +##  which can found at http://www.ossp.org/pkg/tool/due/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  ~/.bash.local.rse: Ralf S. Engelschall's personal addon
  +##
   
  +#   activate OpenPKG instances
   case "${HOSTNAME:-`hostname`}" in
       *.dev.de.cw.net | *.engelschall.com                   ) activate_openpkg /usr/opkg ;;
       *.eu.cw.net | *.eu.cw.com | *.de.cw.net | *.de.cw.com ) activate_openpkg /cw       ;;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.bashrc
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 .bashrc
  --- ossp-pkg/due/.bashrc	10 Jul 2004 08:17:12 -0000	1.1
  +++ ossp-pkg/due/.bashrc	22 Oct 2004 19:32:51 -0000	1.2
  @@ -30,5 +30,3 @@
   source ~/.duerc
   due -v load all -local
   
  -umask 022
  -
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.due/due.cd.sh
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 due.cd.sh
  --- ossp-pkg/due/.due/due.cd.sh	22 Oct 2004 19:16:53 -0000	1.2
  +++ ossp-pkg/due/.due/due.cd.sh	22 Oct 2004 19:32:52 -0000	1.3
  @@ -24,7 +24,7 @@
   ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   ##  SUCH DAMAGE.
   ##
  -##  cd: DUE module for enhanced change directory command
  +##  due.cd.sh: DUE module for enhanced change directory command
   ##
   
   #   hook into cd command to adjust environment
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.due/due.editor.sh
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 due.editor.sh
  --- ossp-pkg/due/.due/due.editor.sh	10 Jul 2004 08:17:15 -0000	1.1
  +++ ossp-pkg/due/.due/due.editor.sh	22 Oct 2004 19:32:52 -0000	1.2
  @@ -24,7 +24,7 @@
   ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   ##  SUCH DAMAGE.
   ##
  -##  editor: DUE module for smart editor/pager handling
  +##  due.editor.sh: DUE module for smart editor/pager handling
   ##
   
   #   requires "util" module
  @@ .
  rm -f ossp-pkg/due/.due/due.ff.sh <<'@@ .'
  Index: ossp-pkg/due/.due/due.ff.sh
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.due/due.fs.sh
  ============================================================================
  $ cvs diff -u -r0 -r1.1 due.fs.sh
  --- /dev/null	2004-10-22 21:32:52 +0200
  +++ due.fs.sh	2004-10-22 21:32:52 +0200
  @@ -0,0 +1,44 @@
  +##
  +##  OSSP due - Dynamic User Environment
  +##  Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1994-2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP due, a dynamic user environment
  +##  which can found at http://www.ossp.org/pkg/tool/due/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  due.fs.sh: DUE module for filesystem settings
  +##
  +
  +#   set umask(2) for creating files not group/other writable
  +umask 022
  +
  +#   shell command for quickly finding files
  +function ff () {
  +    if [ $? -eq 0 ]; then
  +        echo "Usage: ff <file-glob> <directory>" 1>&2
  +        return 1
  +    fi
  +    local file=$1; shift
  +    local dir=$2;  shift
  +    find "$dir" -name "*${file}*" -type f -print
  +    return 0
  +}
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.due/due.local.sh
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 due.local.sh
  --- ossp-pkg/due/.due/due.local.sh	10 Jul 2004 08:17:15 -0000	1.1
  +++ ossp-pkg/due/.due/due.local.sh	22 Oct 2004 19:32:52 -0000	1.2
  @@ -24,7 +24,7 @@
   ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   ##  SUCH DAMAGE.
   ##
  -##  local: DUE module for loading local override configurations
  +##  due.local.sh: DUE module for loading local override configurations
   ##
   
   #   optionally allow shared local modifications
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.due/due.ls.sh
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 due.ls.sh
  --- ossp-pkg/due/.due/due.ls.sh	10 Jul 2004 08:17:15 -0000	1.1
  +++ ossp-pkg/due/.due/due.ls.sh	22 Oct 2004 19:32:52 -0000	1.2
  @@ -24,7 +24,7 @@
   ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   ##  SUCH DAMAGE.
   ##
  -##  ls: DUE module for enhanced list directory command
  +##  due.ls.sh: DUE module for enhanced list directory command
   ##
   
   #   ls command which enables color sequences and automatic paging
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.due/due.platform.sh
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 due.platform.sh
  --- ossp-pkg/due/.due/due.platform.sh	10 Jul 2004 08:17:15 -0000	1.1
  +++ ossp-pkg/due/.due/due.platform.sh	22 Oct 2004 19:32:52 -0000	1.2
  @@ -24,7 +24,7 @@
   ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   ##  SUCH DAMAGE.
   ##
  -##  platform: DUE module for platform specifics
  +##  due.platform.sh: DUE module for platform specifics
   ##
   
   #   requires "util" module
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.due/due.recue.sh
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 due.recue.sh
  --- ossp-pkg/due/.due/due.recue.sh	10 Jul 2004 08:17:15 -0000	1.1
  +++ ossp-pkg/due/.due/due.recue.sh	22 Oct 2004 19:32:52 -0000	1.2
  @@ -24,7 +24,7 @@
   ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   ##  SUCH DAMAGE.
   ##
  -##  editor: DUE module for rescue command
  +##  due.rescue.sh: DUE module for rescue command
   ##
   
   #   system rescue facility
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.due/due.root.sh
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 due.root.sh
  --- ossp-pkg/due/.due/due.root.sh	10 Jul 2004 08:17:15 -0000	1.1
  +++ ossp-pkg/due/.due/due.root.sh	22 Oct 2004 19:32:52 -0000	1.2
  @@ -24,7 +24,7 @@
   ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   ##  SUCH DAMAGE.
   ##
  -##  root: DUE module for root command execution
  +##  due.root.sh: DUE module for root command execution
   ##
   
   #   generate shell script for re-evaluation of command arguments
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.due/due.term.sh
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 due.term.sh
  --- ossp-pkg/due/.due/due.term.sh	4 Oct 2004 15:34:50 -0000	1.2
  +++ ossp-pkg/due/.due/due.term.sh	22 Oct 2004 19:32:52 -0000	1.3
  @@ -24,7 +24,7 @@
   ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   ##  SUCH DAMAGE.
   ##
  -##  term: DUE module for terminal configuration
  +##  due.term.sh: DUE module for terminal configuration
   ##
   
   #   require DUE "platform" module
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.due/due.tmpdir.sh
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 due.tmpdir.sh
  --- ossp-pkg/due/.due/due.tmpdir.sh	4 Oct 2004 15:34:50 -0000	1.1
  +++ ossp-pkg/due/.due/due.tmpdir.sh	22 Oct 2004 19:32:52 -0000	1.2
  @@ -24,7 +24,7 @@
   ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   ##  SUCH DAMAGE.
   ##
  -##  tmdir: DUE module for TMPDIR handling 
  +##  due.tmpdir.sh: DUE module for TMPDIR handling 
   ##
   
   if [ -z $TMPDIR ]; then
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.due/due.util.sh
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 due.util.sh
  --- ossp-pkg/due/.due/due.util.sh	10 Jul 2004 08:17:15 -0000	1.1
  +++ ossp-pkg/due/.due/due.util.sh	22 Oct 2004 19:32:52 -0000	1.2
  @@ -24,7 +24,7 @@
   ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   ##  SUCH DAMAGE.
   ##
  -##  util: DUE module for shared utility functions
  +##  due.util.sh: DUE module for shared utility functions
   ##
   
   function lookup () {
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 22 21:53:04 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B8C4076589; Fri, 22 Oct 2004 21:53:03 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/due/ .bash_login .bashrc ossp-pkg/due/.due/ due.t...
Message-Id: <20041022195303.B8C4076589@mail.ossp.org>
Date: Fri, 22 Oct 2004 21:53:03 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Oct-2004 21:53:03
  Branch: HEAD                             Handle: 2004102220530201

  Modified files:
    ossp-pkg/due            .bash_login .bashrc
    ossp-pkg/due/.due       due.term.sh

  Log:
    do not use BASH_ENV because it makes trouble in Bash based
    applications and move the login/logout tracing to due.term.sh module

  Summary:
    Revision    Changes     Path
    1.3         +3  -12     ossp-pkg/due/.bash_login
    1.3         +1  -0      ossp-pkg/due/.bashrc
    1.4         +10 -0      ossp-pkg/due/.due/due.term.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.bash_login
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 .bash_login
  --- ossp-pkg/due/.bash_login	4 Oct 2004 15:34:50 -0000	1.2
  +++ ossp-pkg/due/.bash_login	22 Oct 2004 19:53:02 -0000	1.3
  @@ -27,16 +27,7 @@
   ##  ~/.bash_login: GNU Bash login-shell configuration
   ##
   
  -#   path to bash environment init script
  -BASH_ENV=$HOME/.bashrc
  -
  -#   source the standard environment script
  -. $BASH_ENV
  -
  -#   welcome and goodbye
  -if expr $- : ".*i.*" >/dev/null; then
  -    echo "$HOSTNAME: user $USER (${SSHUSER:-unknown}), login at `date`"
  -    echo "#[`date '+%Y-%m-%d/%H:%M'`] login by user ${SSHUSER:-unknown}" >>$HISTFILE
  -    trap 'echo "$HOSTNAME: user $USER (${SSHUSER:-unknown}), logout at `date`"' 0
  -fi
  +#   activate OSSP due
  +source ~/.duerc
  +due -v load all -local
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.bashrc
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 .bashrc
  --- ossp-pkg/due/.bashrc	22 Oct 2004 19:32:51 -0000	1.2
  +++ ossp-pkg/due/.bashrc	22 Oct 2004 19:53:02 -0000	1.3
  @@ -27,6 +27,7 @@
   ##  ~/.bashrc: GNU Bash sub-shell configuration
   ##
   
  +#   activate OSSP due
   source ~/.duerc
   due -v load all -local
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.due/due.term.sh
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 due.term.sh
  --- ossp-pkg/due/.due/due.term.sh	22 Oct 2004 19:32:52 -0000	1.3
  +++ ossp-pkg/due/.due/due.term.sh	22 Oct 2004 19:53:03 -0000	1.4
  @@ -79,3 +79,13 @@
       done
   }
   
  +#   login/logout tracing
  +if [ $SHLVL -eq 0 -a ".$BASH_INTERACTIVE" = .yes ]; then
  +    #   shell history annotation
  +    echo "#[`date '+%Y-%m-%d/%H:%M'`] login by user ${SSHUSER:-unknown}" >>$HISTFILE
  +
  +    #   interactive messages
  +    echo "$HOSTNAME: user $USER ${SSHUSER:+(${SSHUSER:-unknown})}, login at `date`"
  +    trap 'echo "$HOSTNAME: user $USER${SSHUSER:+ (${SSHUSER:-unknown})}, logout at `date`"' 0
  +fi
  +
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 22 21:56:29 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 51276765AF; Fri, 22 Oct 2004 21:56:29 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/due/ .bash_history .bash_login .cshrc .inputrc .p...
Message-Id: <20041022195629.51276765AF@mail.ossp.org>
Date: Fri, 22 Oct 2004 21:56:29 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Oct-2004 21:56:29
  Branch: HEAD                             Handle: 2004102220562800

  Modified files:
    ossp-pkg/due            .bash_history .bash_login .cshrc .inputrc .profile
                            .screenrc .vimrc

  Log:
    cleanup more texts and remove history from CVS

  Summary:
    Revision    Changes     Path
    1.2         BLOB        ossp-pkg/due/.bash_history
    1.4         +3  -3      ossp-pkg/due/.bash_login
    1.2         +4  -4      ossp-pkg/due/.cshrc
    1.2         +3  -3      ossp-pkg/due/.inputrc
    1.2         +4  -4      ossp-pkg/due/.profile
    1.2         +3  -3      ossp-pkg/due/.screenrc
    1.2         +3  -3      ossp-pkg/due/.vimrc
  ____________________________________________________________________________

  (cd ossp-pkg/due && \
   uudecode <<'@@ .' && \
   mv .bash_history .bash_history.orig && \
   xdelta patch .bash_history.xdelta .bash_history.orig .bash_history && \
   rm -f .bash_history.orig .bash_history.xdelta)
  Index: ossp-pkg/due/.bash_history
  ============================================================================
  begin 664 .bash_history.xdelta
  M)5A$6C`P-"4````(`!``$`````````````````````!S:&EE;&$N-S`V.3@N
  M;VQD<VAI96QA+C<P-CDX+FYE=Q^+"`````````,#````````````'XL(````
  M`````V-@:&!F8&`PN"+;<[.?81/+RP;.&6]^.-4!Q1@`/>#\OQP```````!4
  ()5A$6C`P-"4`
  `
  end
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.bash_login
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 .bash_login
  --- ossp-pkg/due/.bash_login	22 Oct 2004 19:53:02 -0000	1.3
  +++ ossp-pkg/due/.bash_login	22 Oct 2004 19:56:28 -0000	1.4
  @@ -1,10 +1,10 @@
   ##
  -##  OSSP uue - Unified User Environment
  +##  OSSP due - Unified User Environment
   ##  Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 1994-2004 The OSSP Project <http://www.ossp.org/>
   ##
  -##  This file is part of OSSP uue, a set of user configuration
  -##  files which can found at http://www.ossp.org/pkg/tool/uue/
  +##  This file is part of OSSP due, a dynamic user environment
  +##  which can found at http://www.ossp.org/pkg/tool/due/
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.cshrc
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 .cshrc
  --- ossp-pkg/due/.cshrc	10 Jul 2004 08:17:12 -0000	1.1
  +++ ossp-pkg/due/.cshrc	22 Oct 2004 19:56:28 -0000	1.2
  @@ -1,10 +1,10 @@
   ##
  -##  OSSP uue - Unified User Environment
  +##  OSSP due - Dynamic User Environment
   ##  Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 1994-2004 The OSSP Project <http://www.ossp.org/>
   ##
  -##  This file is part of OSSP uue, a set of user configuration
  -##  files which can found at http://www.ossp.org/pkg/tool/uue/
  +##  This file is part of OSSP due, a dynamic user environment
  +##  which can found at http://www.ossp.org/pkg/tool/due/
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  @@ -24,7 +24,7 @@
   ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   ##  SUCH DAMAGE.
   ##
  -##  ~/.cshrc -- C-Shell minimum GNU Bash wrapper
  +##  ~/.cshrc: C-Shell minimum GNU Bash wrapper
   ##
   
   #   system C-shell to GNU Bash upgrade
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.inputrc
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 .inputrc
  --- ossp-pkg/due/.inputrc	10 Jul 2004 08:17:12 -0000	1.1
  +++ ossp-pkg/due/.inputrc	22 Oct 2004 19:56:28 -0000	1.2
  @@ -1,10 +1,10 @@
   ##
  -##  OSSP uue - Unified User Environment
  +##  OSSP due - Dynamic User Environment
   ##  Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 1994-2004 The OSSP Project <http://www.ossp.org/>
   ##
  -##  This file is part of OSSP uue, a set of user configuration
  -##  files which can found at http://www.ossp.org/pkg/tool/uue/
  +##  This file is part of OSSP due, a dynamic user environment
  +##  which can found at http://www.ossp.org/pkg/tool/due/
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.profile
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 .profile
  --- ossp-pkg/due/.profile	10 Jul 2004 08:17:12 -0000	1.1
  +++ ossp-pkg/due/.profile	22 Oct 2004 19:56:28 -0000	1.2
  @@ -1,10 +1,10 @@
   ##
  -##  OSSP uue - Unified User Environment
  +##  OSSP due - Dynamic User Environment
   ##  Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 1994-2004 The OSSP Project <http://www.ossp.org/>
   ##
  -##  This file is part of OSSP uue, a set of user configuration
  -##  files which can found at http://www.ossp.org/pkg/tool/uue/
  +##  This file is part of OSSP due, a dynamic user environment
  +##  which can found at http://www.ossp.org/pkg/tool/due/
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  @@ -24,7 +24,7 @@
   ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   ##  SUCH DAMAGE.
   ##
  -##  ~/.profile -- Bourne-Shell minimum GNU Bash wrapper
  +##  ~/.profile: Bourne-Shell minimum GNU Bash wrapper
   ##
   
   #   system Bourne-shell to GNU Bash upgrade
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.screenrc
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 .screenrc
  --- ossp-pkg/due/.screenrc	10 Jul 2004 08:17:12 -0000	1.1
  +++ ossp-pkg/due/.screenrc	22 Oct 2004 19:56:28 -0000	1.2
  @@ -1,10 +1,10 @@
   ##
  -##  OSSP uue - Unified User Environment
  +##  OSSP due - Dynamic User Environment
   ##  Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 1994-2004 The OSSP Project <http://www.ossp.org/>
   ##
  -##  This file is part of OSSP uue, a set of user configuration
  -##  files which can found at http://www.ossp.org/pkg/tool/uue/
  +##  This file is part of OSSP due, a dynamic user environment
  +##  which can found at http://www.ossp.org/pkg/tool/due/
   ##
   ##  Permission to use, copy, modify, and distribute this software for
   ##  any purpose with or without fee is hereby granted, provided that
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.vimrc
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 .vimrc
  --- ossp-pkg/due/.vimrc	10 Jul 2004 08:17:12 -0000	1.1
  +++ ossp-pkg/due/.vimrc	22 Oct 2004 19:56:28 -0000	1.2
  @@ -1,10 +1,10 @@
   "##
  -"##  OSSP uue - Unified User Environment
  +"##  OSSP due - Dynamic User Environment
   "##  Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
   "##  Copyright (c) 1994-2004 The OSSP Project <http://www.ossp.org/>
   "##
  -"##  This file is part of OSSP uue, a set of user configuration
  -"##  files which can found at http://www.ossp.org/pkg/tool/uue/
  +"##  This file is part of OSSP due, a dynamic user environment
  +"##  which can found at http://www.ossp.org/pkg/tool/due/
   "##
   "##  Permission to use, copy, modify, and distribute this software for
   "##  any purpose with or without fee is hereby granted, provided that
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 22 21:57:27 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EA5BF76589; Fri, 22 Oct 2004 21:57:26 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/due/ .bash_history .viminfo
Message-Id: <20041022195726.EA5BF76589@mail.ossp.org>
Date: Fri, 22 Oct 2004 21:57:26 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Oct-2004 21:57:26
  Branch: HEAD                             Handle: 2004102220572600

  Removed files:
    ossp-pkg/due            .bash_history .viminfo

  Log:
    remove run-time written files

  Summary:
    Revision    Changes     Path
    1.3         +0  -0      ossp-pkg/due/.bash_history
    1.2         +0  -35     ossp-pkg/due/.viminfo
  ____________________________________________________________________________

  rm -f ossp-pkg/due/.bash_history <<'@@ .'
  Index: ossp-pkg/due/.bash_history
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/due/.viminfo <<'@@ .'
  Index: ossp-pkg/due/.viminfo
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 22 22:00:07 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BBDD176589; Fri, 22 Oct 2004 22:00:07 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/due/ .cvsignore
Message-Id: <20041022200007.BBDD176589@mail.ossp.org>
Date: Fri, 22 Oct 2004 22:00:07 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Oct-2004 22:00:07
  Branch: HEAD                             Handle: 2004102221000700

  Modified files:
    ossp-pkg/due            .cvsignore

  Log:
    ignore files written during run-time testing

  Summary:
    Revision    Changes     Path
    1.2         +2  -0      ossp-pkg/due/.cvsignore
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.cvsignore
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 .cvsignore
  --- ossp-pkg/due/.cvsignore	10 Jul 2004 10:19:47 -0000	1.1
  +++ ossp-pkg/due/.cvsignore	22 Oct 2004 20:00:07 -0000	1.2
  @@ -1,2 +1,4 @@
   configure
   shtool
  +.bash_history
  +.viminfo
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 22 23:17:45 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5759576587; Fri, 22 Oct 2004 23:17:45 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/due/.due/ due.editor.sh due.util.sh
Message-Id: <20041022211745.5759576587@mail.ossp.org>
Date: Fri, 22 Oct 2004 23:17:45 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Oct-2004 23:17:45
  Branch: HEAD                             Handle: 2004102222174400

  Modified files:
    ossp-pkg/due/.due       due.editor.sh due.util.sh

  Log:
    fix editor handling

  Summary:
    Revision    Changes     Path
    1.3         +1  -6      ossp-pkg/due/.due/due.editor.sh
    1.3         +2  -2      ossp-pkg/due/.due/due.util.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.due/due.editor.sh
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 due.editor.sh
  --- ossp-pkg/due/.due/due.editor.sh	22 Oct 2004 19:32:52 -0000	1.2
  +++ ossp-pkg/due/.due/due.editor.sh	22 Oct 2004 21:17:44 -0000	1.3
  @@ -32,19 +32,14 @@
   
   #   determine best editor
   export EDITOR
  -set -x
   EDITOR=`find_tool vim vi`
   if [ ".$EDITOR" = .vim ]; then
       alias vi=vim
       alias pi='vim "+set patchmode=.orig"'
   fi
   if [ ".$TERM" != ".$TERM_COLOR" ]; then
  -    case "$EDITOR" in
  -        /* ) ;;
  -        * ) eval "function $EDITOR () { TERM=\$TERM_COLOR command $EDITOR \${1+\"\$@\" }" ;;
  -    esac
  +    eval "function $EDITOR () { TERM=\$TERM_COLOR command $EDITOR \${1+\"\$@\"}; }"
   fi
  -set +x
   
   #   determine best pager
   export PAGER
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.due/due.util.sh
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 due.util.sh
  --- ossp-pkg/due/.due/due.util.sh	22 Oct 2004 19:32:52 -0000	1.2
  +++ ossp-pkg/due/.due/due.util.sh	22 Oct 2004 21:17:44 -0000	1.3
  @@ -118,8 +118,8 @@
       local tool=""
       local name
       for name in "$@"; do
  -        tool=`type -p $name`
  -        if [ -n $tool ]; then
  +        if [ ".`type -p $name`" != . ]; then
  +            tool="$name"
               break
           fi
       done
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 22 23:17:58 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6D20176616; Fri, 22 Oct 2004 23:17:58 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/due/ .duerc
Message-Id: <20041022211758.6D20176616@mail.ossp.org>
Date: Fri, 22 Oct 2004 23:17:58 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Oct-2004 23:17:58
  Branch: HEAD                             Handle: 2004102222175800

  Modified files:
    ossp-pkg/due            .duerc

  Log:
    fix module loading

  Summary:
    Revision    Changes     Path
    1.2         +4  -2      ossp-pkg/due/.duerc
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.duerc
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 .duerc
  --- ossp-pkg/due/.duerc	10 Jul 2004 08:17:12 -0000	1.1
  +++ ossp-pkg/due/.duerc	22 Oct 2004 21:17:58 -0000	1.2
  @@ -72,6 +72,8 @@
               local mod_name
               for mod_name in . `cd ${mod_dir} && echo due.*.sh`; do
                   [ ".${mod_name}" = ".." -o ".${mod_name}" = ".*" ] && continue
  +                mod_name=${mod_name/#due./}
  +                mod_name=${mod_name/%.sh/}
                   eval "DUE_AVAILABLE=\"${DUE_AVAILABLE}${DUE_AVAILABLE:+,}${mod_name}\""
               done
           done
  @@ -127,8 +129,8 @@
                           local mod_dir
                           for mod_dir in ${mod_path//:/ }; do
                               [ ".${mod_dir}" = . ] && continue
  -                            if [ -f "${mod_dir}/${mod_name}" ]; then
  -                                mod_file="${mod_dir}/${mod_name}"
  +                            if [ -f "${mod_dir}/due.${mod_name}.sh" ]; then
  +                                mod_file="${mod_dir}/due.${mod_name}.sh"
                                   break
                               fi
                           done
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 22 23:18:54 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 266F276587; Fri, 22 Oct 2004 23:18:54 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/due/.due/ due.term.sh
Message-Id: <20041022211854.266F276587@mail.ossp.org>
Date: Fri, 22 Oct 2004 23:18:54 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Oct-2004 23:18:54
  Branch: HEAD                             Handle: 2004102222185300

  Modified files:
    ossp-pkg/due/.due       due.term.sh

  Log:
    fix whitespace output

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-pkg/due/.due/due.term.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.due/due.term.sh
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 due.term.sh
  --- ossp-pkg/due/.due/due.term.sh	22 Oct 2004 19:53:03 -0000	1.4
  +++ ossp-pkg/due/.due/due.term.sh	22 Oct 2004 21:18:53 -0000	1.5
  @@ -85,7 +85,7 @@
       echo "#[`date '+%Y-%m-%d/%H:%M'`] login by user ${SSHUSER:-unknown}" >>$HISTFILE
   
       #   interactive messages
  -    echo "$HOSTNAME: user $USER ${SSHUSER:+(${SSHUSER:-unknown})}, login at `date`"
  +    echo "$HOSTNAME: user $USER${SSHUSER:+ (${SSHUSER:-unknown})}, login at `date`"
       trap 'echo "$HOSTNAME: user $USER${SSHUSER:+ (${SSHUSER:-unknown})}, logout at `date`"' 0
   fi
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 22 23:47:28 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8AE9076616; Fri, 22 Oct 2004 23:47:28 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/due/.due/ due.complete.sh
Message-Id: <20041022214728.8AE9076616@mail.ossp.org>
Date: Fri, 22 Oct 2004 23:47:28 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Oct-2004 23:47:28
  Branch: HEAD                             Handle: 2004102222472800

  Added files:
    ossp-pkg/due/.due       due.complete.sh

  Log:
    add completion stuff

  Summary:
    Revision    Changes     Path
    1.1         +71 -0      ossp-pkg/due/.due/due.complete.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.due/due.complete.sh
  ============================================================================
  $ cvs diff -u -r0 -r1.1 due.complete.sh
  --- /dev/null	2004-10-22 23:47:28 +0200
  +++ due.complete.sh	2004-10-22 23:47:28 +0200
  @@ -0,0 +1,71 @@
  +##
  +##  OSSP due - Dynamic User Environment
  +##  Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1994-2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP due, a dynamic user environment
  +##  which can found at http://www.ossp.org/pkg/tool/due/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  due.complete.sh: DUE module for command completion
  +##
  +
  +#   turn on extended globbing
  +shopt -s extglob no_empty_cmd_completion
  +
  +#   make directory commands see only directories
  +complete -d cd mkdir rmdir pushd
  +
  +#   make file commands see only (their) files
  +complete -f cat less more ln strip
  +complete -f -X '*.bz2' bzip2 
  +complete -f -X '!*.bz2' bunzip2
  +complete -f -X '!*.zip' unzip
  +complete -f -X '*.gz' gzip
  +complete -f -X '*.Z' compress
  +complete -f -X '!*.+(Z|gz|tgz|Gz)' gunzip zcat zmore
  +complete -f -X '!*.Z' uncompress zmore zcat
  +complete -f -X '!*.+(gif|jpg|jpeg|GIF|JPG|bmp)' xv display
  +complete -f -X '!*.+(ps|PS|ps.gz)' gv gs mgv
  +complete -f -X '!*.+(dvi|DVI)' dvips xdvi
  +complete -f -X '!*.+(pdf|PDF)' acroread xpdf
  +complete -f -X '!*.texi*' makeinfo texi2dvi texi2html
  +complete -f -X '!*.+(tex|TEX)' tex latex
  +complete -f -X '!*.+(c|cc|C|h|hh|H)' cc gcc
  +
  +#   make signal and job commands see only signals/jobs
  +complete -A signal kill -P '%'
  +complete -A stopped -P '%' bg
  +complete -j -P '%' fg jobs 
  +
  +#   make user/group commands see only users/groups
  +complete -u passwd su finger
  +
  +#   make network commands see only hostnames
  +complete -A hostname ssh rsh telnet rlogin ftp ping host traceroute nslookup dig
  +
  +#   make internal commands see only their possibilities
  +complete -v export local readonly unset
  +complete -A setopt set
  +complete -A shopt shopt
  +complete -A helptopic help
  +complete -a unalias
  +complete -A binding bind
  +
  @@ .

From ossp-cvs-owner@ossp.org  Sat Oct 23 08:52:27 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0F29D764F6; Sat, 23 Oct 2004 08:52:26 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/due/ devtool.conf
Message-Id: <20041023065226.0F29D764F6@mail.ossp.org>
Date: Sat, 23 Oct 2004 08:52:26 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Oct-2004 08:52:26
  Branch: HEAD                             Handle: 2004102307522600

  Modified files:
    ossp-pkg/due            devtool.conf

  Log:
    allow easy testing

  Summary:
    Revision    Changes     Path
    1.4         +3  -0      ossp-pkg/due/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.conf
  --- ossp-pkg/due/devtool.conf	22 Oct 2004 19:17:14 -0000	1.3
  +++ ossp-pkg/due/devtool.conf	23 Oct 2004 06:52:26 -0000	1.4
  @@ -39,3 +39,6 @@
       echo "+++ testing"
       gunzip <due-${V}.tar.gz | tar tvf -
   
  +%test
  +    env -i USER=$USER HOME=`pwd` `which bash` "$@"
  +
  @@ .

From ossp-cvs-owner@ossp.org  Sat Oct 23 08:53:16 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6268D764F6; Sat, 23 Oct 2004 08:53:16 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/due/ TODO
Message-Id: <20041023065316.6268D764F6@mail.ossp.org>
Date: Sat, 23 Oct 2004 08:53:16 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Oct-2004 08:53:16
  Branch: HEAD                             Handle: 2004102307531600

  Modified files:
    ossp-pkg/due            TODO

  Log:
    remember more

  Summary:
    Revision    Changes     Path
    1.2         +1  -0      ossp-pkg/due/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/TODO
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 TODO
  --- ossp-pkg/due/TODO	10 Jul 2004 08:23:58 -0000	1.1
  +++ ossp-pkg/due/TODO	23 Oct 2004 06:53:16 -0000	1.2
  @@ -1 +1,2 @@
   - colorizing diff, cvs, ls
  +- platform specifics: BLOCKSIZE, df -kh, ps -ef
  @@ .

From ossp-cvs-owner@ossp.org  Sun Oct 24 20:59:46 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 26B8276567; Sun, 24 Oct 2004 20:59:46 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/due/.due/ due.util.sh
Message-Id: <20041024185946.26B8276567@mail.ossp.org>
Date: Sun, 24 Oct 2004 20:59:46 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Oct-2004 20:59:45
  Branch: HEAD                             Handle: 2004102419594500

  Modified files:
    ossp-pkg/due/.due       due.util.sh

  Log:
    add useful repeat command

  Summary:
    Revision    Changes     Path
    1.4         +21 -0      ossp-pkg/due/.due/due.util.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.due/due.util.sh
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 due.util.sh
  --- ossp-pkg/due/.due/due.util.sh	22 Oct 2004 21:17:44 -0000	1.3
  +++ ossp-pkg/due/.due/due.util.sh	24 Oct 2004 18:59:45 -0000	1.4
  @@ -156,3 +156,24 @@
       done
   }
   
  +#   repeat a command
  +function repeat () {
  +    if [ $# -eq 0 ]; then
  +        echo "Usage: repeat <number>|oo <command> [...]" 1>&2
  +        return 1
  +    fi
  +    count="$1"
  +    shift
  +    if [ ".$count" = .oo ]; then
  +        while true; do
  +            eval "$@" || exit $?
  +        done
  +    else
  +        local i=0
  +        while [ $i -lt $count ]; do
  +            eval "$@" || exit $?
  +            i=$(($i + 1))
  +        done
  +    fi
  +}
  +
  @@ .

From ossp-cvs-owner@ossp.org  Sun Oct 24 21:10:39 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 394D976567; Sun, 24 Oct 2004 21:10:39 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/due/.due/ due.fs.sh due.platform.sh
Message-Id: <20041024191039.394D976567@mail.ossp.org>
Date: Sun, 24 Oct 2004 21:10:39 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Oct-2004 21:10:39
  Branch: HEAD                             Handle: 2004102420103800

  Modified files:
    ossp-pkg/due/.due       due.fs.sh due.platform.sh

  Log:
    add df wrapper; fix platform inits; add ps wrapper

  Summary:
    Revision    Changes     Path
    1.2         +3  -0      ossp-pkg/due/.due/due.fs.sh
    1.3         +18 -4      ossp-pkg/due/.due/due.platform.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.due/due.fs.sh
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 due.fs.sh
  --- ossp-pkg/due/.due/due.fs.sh	22 Oct 2004 19:32:52 -0000	1.1
  +++ ossp-pkg/due/.due/due.fs.sh	24 Oct 2004 19:10:38 -0000	1.2
  @@ -42,3 +42,6 @@
       return 0
   }
   
  +#   canonicalization of df(1) output
  +alias df='command df -k'
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.due/due.platform.sh
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 due.platform.sh
  --- ossp-pkg/due/.due/due.platform.sh	22 Oct 2004 19:32:52 -0000	1.2
  +++ ossp-pkg/due/.due/due.platform.sh	24 Oct 2004 19:10:38 -0000	1.3
  @@ -35,13 +35,13 @@
   OSVEND=unknown
   
   #   adjust platform specific base run-time environment
  -case $OSTYPE in
  -    FreeBSD* )
  +case $OSNAME in
  +    freebsd )
           PATH="/bin:/usr/bin:/sbin:/usr/sbin"
           LD_LIBRARY_PATH="/usr/lib:/usr/lib/compat"
           MANPATH="/usr/share/man"
           ;;
  -    Linux* )
  +    linux )
           PATH="/bin:/usr/bin:/sbin:/usr/sbin"
           LD_LIBRARY_PATH="/lib:/usr/lib"
           MANPATH="/usr/man:/usr/share/man"
  @@ -51,7 +51,7 @@
           elif [ -f /etc/SuSE-release   ]; then OSVEND=SuSE
           fi
           ;;
  -    SunOS* ) 
  +    solaris ) 
           PATH="/usr/bin:/usr/ccs/bin:/usr/sbin:/sbin"
           LD_LIBRARY_PATH="/usr/lib:/usr/ccs/lib"
           MANPATH="/usr/share/man"
  @@ -64,3 +64,17 @@
   esac
   activate_generic /usr/X11R6 /usr/X11 /usr/openwin
   
  +#   platform specific convenience command line argument mapping
  +case $OSNAME in
  +    solaris | hpux )
  +        function ps () { 
  +            if [ ".$1" = ".-ax" -o ".$1" = ".-aux" ]; then
  +                shift
  +                command ps -ef "$@"
  +            else
  +                command ps "$@"
  +            fi
  +        }
  +        ;;
  +esac    
  +
  @@ .

From ossp-cvs-owner@ossp.org  Sun Oct 24 21:11:07 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 57CE576567; Sun, 24 Oct 2004 21:11:07 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/due/ TODO
Message-Id: <20041024191107.57CE576567@mail.ossp.org>
Date: Sun, 24 Oct 2004 21:11:07 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Oct-2004 21:11:07
  Branch: HEAD                             Handle: 2004102420110600

  Modified files:
    ossp-pkg/due            TODO

  Log:
    ps/df done; more things useful

  Summary:
    Revision    Changes     Path
    1.3         +2  -1      ossp-pkg/due/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/TODO
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 TODO
  --- ossp-pkg/due/TODO	23 Oct 2004 06:53:16 -0000	1.2
  +++ ossp-pkg/due/TODO	24 Oct 2004 19:11:06 -0000	1.3
  @@ -1,2 +1,3 @@
   - colorizing diff, cvs, ls
  -- platform specifics: BLOCKSIZE, df -kh, ps -ef
  +- zap command?
  +- svs command?
  @@ .

From ossp-cvs-owner@ossp.org  Sun Oct 24 21:30:25 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 521FE76567; Sun, 24 Oct 2004 21:30:25 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/due/.due/ due.ls.sh due.term.sh
Message-Id: <20041024193025.521FE76567@mail.ossp.org>
Date: Sun, 24 Oct 2004 21:30:25 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Oct-2004 21:30:25
  Branch: HEAD                             Handle: 2004102420302400

  Modified files:
    ossp-pkg/due/.due       due.ls.sh due.term.sh

  Log:
    more OSNAME fixes and SLang defaults

  Summary:
    Revision    Changes     Path
    1.3         +3  -3      ossp-pkg/due/.due/due.ls.sh
    1.6         +4  -1      ossp-pkg/due/.due/due.term.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.due/due.ls.sh
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 due.ls.sh
  --- ossp-pkg/due/.due/due.ls.sh	22 Oct 2004 19:32:52 -0000	1.2
  +++ ossp-pkg/due/.due/due.ls.sh	24 Oct 2004 19:30:24 -0000	1.3
  @@ -39,14 +39,14 @@
           if [ ".$TERM" != ".$TERM_COLOR" ]; then
               prolog="TERM=\$TERM_COLOR $prolog"
           fi
  -        if [ ".$OSNAME" = .FreeBSD ]; then
  +        if [ ".$OSNAME" = .freebsd ]; then
               prolog="$prolog CLICOLOR=1 CLICOLOR_FORCE=1"
               opt="-C"
               epilog="| /usr/bin/less -E -r"
  -        elif [ ".$OSNAME" = .Linux ]; then
  +        elif [ ".$OSNAME" = .linux ]; then
               opt="--color=always"
               epilog="| /usr/bin/less -X -E -r -s | grep -v '^.\\[m'"
  -        elif [ ".$OSNAME" = .SunOS -a -f /bin/less ]; then
  +        elif [ ".$OSNAME" = .solaris -a -f /bin/less ]; then
               epilog="| /bin/less -E -r"
           elif [ ".$PAGER" = .less ]; then
               epilog="| less -E -r"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.due/due.term.sh
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 due.term.sh
  --- ossp-pkg/due/.due/due.term.sh	22 Oct 2004 21:18:53 -0000	1.5
  +++ ossp-pkg/due/.due/due.term.sh	24 Oct 2004 19:30:24 -0000	1.6
  @@ -36,11 +36,14 @@
   fi
   TERM_COLOR=$TERM
   if [ ".$TERM" = .xterm ]; then
  -    if [ ".$OSNAME" = .FreeBSD -o ".$OSNAME" = .Linux ]; then
  +    if [ ".$OSNAME" = .freebsd -o ".$OSNAME" = .linux ]; then
           TERM_COLOR=xterm-color
       fi
   fi
   
  +#   SLang default color settings
  +export COLORFGBG="default;default"
  +
   #   adjust terminal settings
   if expr $- : ".*i.*" >/dev/null; then
       BASH_INTERACTIVE=yes
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct 25 15:16:43 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7FF847657D; Mon, 25 Oct 2004 15:16:42 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-doc/ accounts.txt
Message-Id: <20041025131642.7FF847657D@mail.ossp.org>
Date: Mon, 25 Oct 2004 15:16:42 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Oct-2004 15:16:42
  Branch: HEAD                             Handle: 2004102514164100

  Modified files:
    ossp-pkg/as/as-doc      accounts.txt

  Log:
    add OSSP quos

  Summary:
    Revision    Changes     Path
    1.51        +1  -0      ossp-pkg/as/as-doc/accounts.txt
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-doc/accounts.txt
  ============================================================================
  $ cvs diff -u -r1.50 -r1.51 accounts.txt
  --- ossp-pkg/as/as-doc/accounts.txt	3 Sep 2004 17:16:30 -0000	1.50
  +++ ossp-pkg/as/as-doc/accounts.txt	25 Oct 2004 13:16:41 -0000	1.51
  @@ -243,6 +243,7 @@
   R /de/is/dev/prj/ossp/titraq              # [I] Project OSSP titraq
   R /de/is/dev/prj/ossp/snmpdx              # [I] Project OSSP snmpdx
   R /de/is/dev/prj/ossp/uuid                # [I] Project OSSP snmpdx
  +R /de/is/dev/prj/ossp/quos                # [I] Project OSSP quos
   
   #   AS
   R /de/is/dev/prj/as                       # [I] Project Accounting System (AS) (general)
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct 25 15:59:22 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BE4867659C; Mon, 25 Oct 2004 15:59:21 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: CVSROOT/ modules
Message-Id: <20041025135921.BE4867659C@mail.ossp.org>
Date: Mon, 25 Oct 2004 15:59:21 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: CVSROOT                          Date:   25-Oct-2004 15:59:21
  Branch: HEAD                             Handle: 2004102514592000

  Modified files:
    CVSROOT                 modules

  Log:
    add new OSSP quos module

  Summary:
    Revision    Changes     Path
    1.71        +1  -0      CVSROOT/modules
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: CVSROOT/modules
  ============================================================================
  $ cvs diff -u -r1.70 -r1.71 modules
  --- CVSROOT/modules	22 Apr 2004 06:59:25 -0000	1.70
  +++ CVSROOT/modules	25 Oct 2004 13:59:20 -0000	1.71
  @@ -103,6 +103,7 @@
   xmldb           ossp-pkg/xmldb
   snmpdx          ossp-pkg/snmpdx
   cvsfusion       ossp-pkg/cvsfusion
  +quos            ossp-pkg/quos
   
   #   the OSSP applications (third-party)
   cvs             ossp-pkg/cvs
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct 25 16:35:13 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 306B776578; Mon, 25 Oct 2004 16:35:13 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/quos/ .cvsignore Makefile README TODO openpkg-rdf...
Message-Id: <20041025143513.306B776578@mail.ossp.org>
Date: Mon, 25 Oct 2004 16:35:13 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Oct-2004 16:35:12
  Branch: HEAD                             Handle: 2004102515351100

  Added files:
    ossp-pkg/quos           .cvsignore Makefile README TODO openpkg-rdf2sql.pl
                            openpkg.rdf openpkg.sh openpkg.sql quos.cfg
                            quos.cgi quos.css quos.html

  Log:
    commit initial work on OSSP quos

  Summary:
    Revision    Changes     Path
    1.1         +1  -0      ossp-pkg/quos/.cvsignore
    1.1         +36 -0      ossp-pkg/quos/Makefile
    1.1         +44 -0      ossp-pkg/quos/README
    1.1         +4  -0      ossp-pkg/quos/TODO
    1.1         +54 -0      ossp-pkg/quos/openpkg-rdf2sql.pl
    1.1         +97 -0      ossp-pkg/quos/openpkg.rdf
    1.1         +34 -0      ossp-pkg/quos/openpkg.sh
    1.1         +99 -0      ossp-pkg/quos/openpkg.sql
    1.1         +96 -0      ossp-pkg/quos/quos.cfg
    1.1         +73 -0      ossp-pkg/quos/quos.cgi
    1.1         +35 -0      ossp-pkg/quos/quos.css
    1.1         +10 -0      ossp-pkg/quos/quos.html
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/.cvsignore
  ============================================================================
  $ cvs diff -u -r0 -r1.1 .cvsignore
  --- /dev/null	2004-10-25 16:35:11 +0200
  +++ .cvsignore	2004-10-25 16:35:11 +0200
  @@ -0,0 +1 @@
  +openpkg.db
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/Makefile
  ============================================================================
  $ cvs diff -u -r0 -r1.1 Makefile
  --- /dev/null	2004-10-25 16:35:11 +0200
  +++ Makefile	2004-10-25 16:35:11 +0200
  @@ -0,0 +1,36 @@
  +##
  +##  OSSP quos - Query On Steroids
  +##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP quos, a Web user interface for querying
  +##  a database which can be found at http://www.ossp.org/pkg/tool/quos/.
  +##
  +##  This program is free software; you can redistribute it and/or modify
  +##  it under the terms of the GNU General Public License as published by
  +##  the Free Software Foundation; either version 2 of the License, or
  +##  (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this program; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  Makefile: build procedure
  +##
  +
  +SHELL = /bin/sh
  +
  +all:
  +
  +init:
  +	$(SHELL) ./openpkg.sh
  +
  +clean:
  +	rm -f openpkg.db
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/README
  ============================================================================
  $ cvs diff -u -r0 -r1.1 README
  --- /dev/null	2004-10-25 16:35:11 +0200
  +++ README	2004-10-25 16:35:12 +0200
  @@ -0,0 +1,44 @@
  +   _        ___  ____ ____  ____   
  +  |_|_ _   / _ \/ ___/ ___||  _ \   __ _ _   _  ___  ___  
  +  _|_||_| | | | \___ \___ \| |_) | / _` | | | |/ _ \/ __| 
  + |_||_|_| | |_| |___) |__) |  __/ | (_| | |_| | (_) \__ \ 
  +  |_|_|_|  \___/|____/____/|_|     \__, |\__,_|\___/|___/ 
  +                                      |_|                 
  +
  +  OSSP quos - Query On Steroids
  +  Version 0.0.0 (XX-Oct-2004)
  +
  +  ABSTRACT
  +
  +  OSSP quos is a Web user interface for querying an SQL-based RDBMS.
  +  ...FIXME...
  +
  +  COPYRIGHT AND LICENSE
  +
  +  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +
  +  This file is part of OSSP quos, a Web user interface for querying
  +  a database which can be found at http://www.ossp.org/pkg/tool/quos/.
  +
  +  This program is free software; you can redistribute it and/or modify
  +  it under the terms of the GNU General Public License as published by
  +  the Free Software Foundation; either version 2 of the License, or
  +  (at your option) any later version.
  +
  +  This program is distributed in the hope that it will be useful,
  +  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +  General Public License for more details.
  +
  +  You should have received a copy of the GNU General Public License
  +  along with this program; if not, write to the Free Software
  +  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +
  +  SEE ALSO
  +
  +  o Homepage ....... http://www.ossp.org/pkg/tool/quos/
  +  o Sources ........ http://cvs.ossp.org/pkg/tool/quos/
  +  o Distribution .... ftp://ftp.ossp.org/pkg/tool/quos/
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/TODO
  ============================================================================
  $ cvs diff -u -r0 -r1.1 TODO
  --- /dev/null	2004-10-25 16:35:11 +0200
  +++ TODO	2004-10-25 16:35:12 +0200
  @@ -0,0 +1,4 @@
  +
  +- how to implement dynamically adjusting views based
  +  on total number of result records??
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/openpkg-rdf2sql.pl
  ============================================================================
  $ cvs diff -u -r0 -r1.1 openpkg-rdf2sql.pl
  --- /dev/null	2004-10-25 16:35:11 +0200
  +++ openpkg-rdf2sql.pl	2004-10-25 16:35:12 +0200
  @@ -0,0 +1,54 @@
  +#!/usr/opkg/bin/perl
  +##
  +##  OSSP quos - Query On Steroids
  +##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP quos, a Web user interface for querying
  +##  a database which can be found at http://www.ossp.org/pkg/tool/quos/.
  +##
  +##  This program is free software; you can redistribute it and/or modify
  +##  it under the terms of the GNU General Public License as published by
  +##  the Free Software Foundation; either version 2 of the License, or
  +##  (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this program; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  openpkg-rdf2sql.cfg: OpenPKG XML/RDF to SQL importing tool
  +##
  +
  +require 5.008;
  +use Getopt::Long;
  +use XML::Parser;
  +use DBI;
  +use DBD::SQLite;
  +
  +#   ...FIXME...
  +
  +__END__
  +
  +=pod
  +
  +=head1 NAME
  +
  +B<openpkg-rdf2sql> - OpenPKG XML/RDF to SQL importing tool
  +
  +=head1 SYNOPSIS
  +
  +B<openpkg-rdf2sql>
  +[B<-v>|B<--verbose>]
  +...FIXME...
  +I<url>
  +
  +=head1 DESCRIPTION
  +
  +=cut
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/openpkg.rdf
  ============================================================================
  $ cvs diff -u -r0 -r1.1 openpkg.rdf
  --- /dev/null	2004-10-25 16:35:11 +0200
  +++ openpkg.rdf	2004-10-25 16:35:12 +0200
  @@ -0,0 +1,97 @@
  +<?xml version="1.0" encoding="iso-8859-1"?>
  +<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  +         xmlns="http://www.openpkg.org/xml-rdf-index/0.9">
  +  <Repository rdf:resource="OpenPKG-2.2/Source/">
  +    <rdf:Description about="a2ps-4.13b-2.2.0" href="a2ps-4.13b-2.2.0.src.rpm">
  +      <Name>a2ps</Name>
  +      <Version>4.13b</Version>
  +      <Release>2.2.0</Release>
  +      <Distribution>OpenPKG</Distribution>
  +      <Group>Converter</Group>
  +      <License>GPL</License>
  +      <Packager>The OpenPKG Project</Packager>
  +      <Summary>Any to Postscript Conversion Tool</Summary>
  +      <URL>http://www.inf.enst.fr/~demaille/a2ps/</URL>
  +      <Vendor>Akim Demaille</Vendor>
  +      <BuildPreReq>
  +        <rdf:bag>
  +          <resource>OpenPKG</resource>
  +          <resource geq="2.2.0">openpkg</resource>
  +          <resource>psutils</resource>
  +          <resource>flex</resource>
  +          <resource>bison</resource>
  +        </rdf:bag>
  +      </BuildPreReq>
  +      <PreReq>
  +        <rdf:bag>
  +          <resource>OpenPKG</resource>
  +          <resource geq="2.2.0">openpkg</resource>
  +          <resource>psutils</resource>
  +        </rdf:bag>
  +      </PreReq>
  +      <Source>
  +        <rdf:bag>
  +          <rdf:li>ftp://ftp.enst.fr/pub/unix/a2ps/a2ps-4.13b.tar.gz</rdf:li>
  +        </rdf:bag>
  +      </Source>
  +      <Description>
  +a2ps is an Any to PostScript filter. It started as a Text to
  +PostScript converter, with pretty printing features and all the
  +expected features from this kind of programs. But today, it is also
  +able to deal with other file types (PostScript, Texinfo, compressed,
  +whatever...) provided you have the necessary tools.
  +      </Description>
  +    </rdf:Description>
  +    <rdf:Description about="aegis-4.19-2.2.0" href="aegis-4.19-2.2.0.src.rpm">
  +      <Name>aegis</Name>
  +      <Version>4.19</Version>
  +      <Release>2.2.0</Release>
  +      <Distribution>OpenPKG</Distribution>
  +      <Group>Text</Group>
  +      <License>GPL</License>
  +      <Packager>The OpenPKG Project</Packager>
  +      <Summary>Software Configuration Management System</Summary>
  +      <URL>http://aegis.sourceforge.net/</URL>
  +      <Vendor>Peter Miller</Vendor>
  +      <BuildPreReq>
  +        <rdf:bag>
  +          <resource>OpenPKG</resource>
  +          <resource geq="2.2.0">openpkg</resource>
  +          <resource>perl</resource>
  +          <resource>bison</resource>
  +          <resource>groff</resource>
  +          <resource>gcc</resource>
  +          <resource>zlib</resource>
  +          <resource>gettext</resource>
  +          <resource>libiconv</resource>
  +          <resource>uuid</resource>
  +          <resource>curl</resource>
  +        </rdf:bag>
  +      </BuildPreReq>
  +      <PreReq>
  +        <rdf:bag>
  +          <resource>OpenPKG</resource>
  +          <resource geq="2.2.0">openpkg</resource>
  +          <resource>perl</resource>
  +          <resource>zlib</resource>
  +          <resource>gettext</resource>
  +          <resource>libiconv</resource>
  +          <resource>uuid</resource>
  +          <resource>curl</resource>
  +        </rdf:bag>
  +      </PreReq>
  +      <Source>
  +        <rdf:bag>
  +          <rdf:li>http://aegis.sourceforge.net/aegis-4.19.tar.gz</rdf:li>
  +        </rdf:bag>
  +      </Source>
  +      <Description>
  +Aegis is a transaction-based software configuration management system.  It
  +provides a framework within which a team of developers may work on many
  +changes to a program independently, and Aegis coordinates integrating
  +these changes back into the master source of the program, with as little
  +disruption as possible.
  +      </Description>
  +    </rdf:Description>
  +  </Repository>
  +</rdf:RDF>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/openpkg.sh
  ============================================================================
  $ cvs diff -u -r0 -r1.1 openpkg.sh
  --- /dev/null	2004-10-25 16:35:11 +0200
  +++ openpkg.sh	2004-10-25 16:35:12 +0200
  @@ -0,0 +1,34 @@
  +#!/bin/sh
  +##
  +##  OSSP quos - Query On Steroids
  +##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP quos, a Web user interface for querying
  +##  a database which can be found at http://www.ossp.org/pkg/tool/quos/.
  +##
  +##  This program is free software; you can redistribute it and/or modify
  +##  it under the terms of the GNU General Public License as published by
  +##  the Free Software Foundation; either version 2 of the License, or
  +##  (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this program; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  quos.cfg: configuration
  +##
  +
  +#   one-time database creation task
  +rm -f openpkg.db
  +sqlite openpkg.db <openpkg.sql
  +
  +#   recurring database update task
  +./openpkg-rdf2sql.pl openpkg.rdf openpkg.db
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/openpkg.sql
  ============================================================================
  $ cvs diff -u -r0 -r1.1 openpkg.sql
  --- /dev/null	2004-10-25 16:35:11 +0200
  +++ openpkg.sql	2004-10-25 16:35:12 +0200
  @@ -0,0 +1,99 @@
  +--
  +--  OSSP quos - Query On Steroids
  +--  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +--  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +--
  +--  This file is part of OSSP quos, a Web user interface for querying
  +--  a database which can be found at http://www.ossp.org/pkg/tool/quos/.
  +--
  +--  This program is free software; you can redistribute it and/or modify
  +--  it under the terms of the GNU General Public License as published by
  +--  the Free Software Foundation; either version 2 of the License, or
  +--  (at your option) any later version.
  +--
  +--  This program is distributed in the hope that it will be useful,
  +--  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +--  General Public License for more details.
  +--
  +--  You should have received a copy of the GNU General Public License
  +--  along with this program; if not, write to the Free Software
  +--  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +--  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +--
  +--  quos-openpkg.sql: OSSP quos database schema for OpenPKG XML/RDF
  +--
  +
  +CREATE TABLE quos_rdf (
  +    rd_id           BIGSERIAL UNIQUE NOT NULL PRIMARY KEY,
  +    rd_url          TEXT
  +);
  +
  +CREATE TABLE quos_package (
  +    pk_id           BIGSERIAL UNIQUE NOT NULL PRIMARY KEY,
  +    pk_name         TEXT,
  +    pk_version      TEXT,
  +    pk_release      TEXT,
  +    pk_distribution TEXT,
  +    pk_group        TEXT,
  +    pk_license      TEXT,
  +    pk_packager     TEXT,
  +    pk_summary      TEXT,
  +    pk_url          TEXT,
  +    pk_vendor       TEXT,
  +    pk_description  TEXT,
  +    pk_rdf          BIGINT UNIQUE NOT NULL
  +                    REFERENCES quos_rdf (rd_id)
  +                    MATCH FULL DEFERRABLE
  +);
  +
  +CREATE TABLE quos_buildprereq (
  +    bp_id           BIGINT UNIQUE NOT NULL
  +                    REFERENCES quos_package (pk_id)
  +                    MATCH FULL DEFERRABLE
  +                    PRIMARY KEY,
  +    bp_key          TEXT,         
  +    bp_op           TEXT,
  +    bp_val          TEXT,
  +    bp_rdf          BIGINT UNIQUE NOT NULL
  +                    REFERENCES quos_rdf (rd_id)
  +                    MATCH FULL DEFERRABLE
  +);
  +
  +CREATE TABLE quos_prereq (
  +    rp_id           BIGINT UNIQUE NOT NULL
  +                    REFERENCES quos_package (pk_id)
  +                    MATCH FULL DEFERRABLE
  +                    PRIMARY KEY,
  +    rp_key          TEXT,         
  +    rp_op           TEXT,
  +    rp_val          TEXT
  +    rp_rdf          BIGINT UNIQUE NOT NULL
  +                    REFERENCES quos_rdf (rd_id)
  +                    MATCH FULL DEFERRABLE
  +);
  +
  +CREATE TABLE quos_provide (
  +    pr_id           BIGINT UNIQUE NOT NULL
  +                    REFERENCES quos_package (pk_id)
  +                    MATCH FULL DEFERRABLE
  +                    PRIMARY KEY,
  +    pr_key          TEXT,         
  +    pr_op           TEXT,
  +    pr_val          TEXT
  +    pr_rdf          BIGINT UNIQUE NOT NULL
  +                    REFERENCES quos_rdf (rd_id)
  +                    MATCH FULL DEFERRABLE
  +);
  +
  +CREATE TABLE quos_source (
  +    sr_id           BIGINT UNIQUE NOT NULL
  +                    REFERENCES quos_package (p_id)
  +                    MATCH FULL DEFERRABLE
  +                    PRIMARY KEY,
  +    sr_url          TEXT
  +    sr_rdf          BIGINT UNIQUE NOT NULL
  +                    REFERENCES quos_rdf (rd_id)
  +                    MATCH FULL DEFERRABLE
  +);
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/quos.cfg
  ============================================================================
  $ cvs diff -u -r0 -r1.1 quos.cfg
  --- /dev/null	2004-10-25 16:35:11 +0200
  +++ quos.cfg	2004-10-25 16:35:12 +0200
  @@ -0,0 +1,96 @@
  +##
  +##  OSSP quos - Query On Steroids
  +##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP quos, a Web user interface for querying
  +##  a database which can be found at http://www.ossp.org/pkg/tool/quos/.
  +##
  +##  This program is free software; you can redistribute it and/or modify
  +##  it under the terms of the GNU General Public License as published by
  +##  the Free Software Foundation; either version 2 of the License, or
  +##  (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this program; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  quos.cfg: configuration
  +##
  +
  +options {
  +    webpage "quos.html" "%BODY%";
  +    database "dbi:SQLite:dbname=openpkg.db" {
  +        fields {
  +            field Name              quos.package.pk_name;
  +            field Version           quos.package.pk_version;
  +            field Release           quos.package.pk_release;
  +            field Distribution      quos.package.pk_distribution;
  +            field Group             quos.package.pk_group;
  +            field License           quos.package.pk_license;
  +            field Packager          quos.package.pk_packager;
  +            field Summary           quos.package.pk_summary;
  +            field URL               quos.package.pk_url;
  +            field Vendor            quos.package.pk_vendor;
  +            field Description       quos.package.pk_description;
  +            field BuildPreReq.Key   quos_buildprereq.bp_key;
  +            field BuildPreReq.Op    quos_buildprereq.bp_op;
  +            field BuildPreReq.Val   quos_buildprereq.bp_val;
  +            field PreReq.Key        quos_prereq.rp_key;
  +            field PreReq.Op         quos_prereq.rp_op;
  +            field PreReq.Val        quos_prereq.rp_val;
  +            field Provide.Key       quos_provide.pr_key;
  +            field Provide.Op        quos_provide.pr_op;
  +            field Provide.Val       quos_provide.pr_val;
  +            field Source            quos_source.sr_url;
  +        };
  +        relations {
  +            key quos_package.pk_id {
  +                quos_buildprereq.bp_id
  +                quos_prereq.rp_id
  +                quos_provide.pr_id
  +                quos_source.sr_id
  +            };
  +        };
  +    };
  +};
  +
  +queries {
  +    group "by Group" {
  +        query "Mail"            { GROUP EQ "Mail" };
  +        query "News"            { GROUP EQ "News" };
  +    };
  +    group "by Release" {
  +        query "OpenPKG-2.2"     { RELEASE RE "2\.2\.\d+$" };
  +        query "OpenPKG-CURRENT" { RELEASE RE "2\d{7}" };
  +    };
  +};
  +
  +views {
  +    view "TXT: rpm -qa" q{
  +        [%{NAME}-%{VERSION}-%{RELEASE}\n]
  +    };
  +    view "TXT: rpm -qi" q{
  +        Name:     %-25{NAME} Source RPM:   %{SOURCERPM}\n\
  +        Version:  %-25{VERSION} Signature:    %|DSAHEADER?{dsa:%{DSAHEADER:pgpsig}}:{%|RSAHEADER?{rsa:%{RSAHEADER:pgpsig}}:{%|SI
  +        Release:  %-25{RELEASE} Build Host:   %{BUILDHOST}\n\
  +        Group:    %-25{GROUP} Build System: %{ARCH}-%{OS}\n\
  +        Class:    %-25{CLASS} Build Time:   %{BUILDTIME:date}\n\
  +        Distrib:  %-25{DISTRIBUTION} Install Time: %|INSTALLTIME?{%{INSTALLTIME:date}}:{(not installed)}|\n\
  +        License:  %-25{LICENSE} Install Size: %{SIZE} bytes\n\
  +        Packager: %-25{PACKAGER} Relocations:  %|PREFIXES?{[%{PREFIXES} ]}:{(not relocateable)}|\n\
  +        Vendor:   %{VENDOR}\n\
  +        Summary:  %{SUMMARY}\n\
  +        URL:      %{URL}\n\
  +        Description:\n%{DESCRIPTION}\n\
  +        %|PROVIDENAME?{Provides:\n\
  +        [    %{PROVIDENAME} %|PROVIDEFLAGS?{%{PROVIDEFLAGS:depflags} %{PROVIDEVERSION}}:{}|\n]}:{}|
  +    };
  +};
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/quos.cgi
  ============================================================================
  $ cvs diff -u -r0 -r1.1 quos.cgi
  --- /dev/null	2004-10-25 16:35:11 +0200
  +++ quos.cgi	2004-10-25 16:35:12 +0200
  @@ -0,0 +1,73 @@
  +#!/usr/opkg/bin/perl
  +##
  +##  OSSP quos - Query On Steroids
  +##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP quos, a Web user interface for querying
  +##  a database which can be found at http://www.ossp.org/pkg/tool/quos/.
  +##
  +##  This program is free software; you can redistribute it and/or modify
  +##  it under the terms of the GNU General Public License as published by
  +##  the Free Software Foundation; either version 2 of the License, or
  +##  (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this program; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  quos.cgi: web user interface
  +##
  +
  +require 5.008;
  +use CGI;
  +use String::Divert;
  +
  +#  ...FIXME...
  +
  +my $html = '';
  +$html .= "<div class=\"quos\">";
  +$html .= "...";
  +$html .= "<span class=titlebrowse>Browse</span>";
  +$html .= "...";
  +$html .= "</div>";
  +print STDOUT $html;
  +
  +__END__
  +
  +=pod
  +
  +=head1 NAME
  +
  +B<OSSP quos> - Query On Steroids
  +
  +=head1 DESCRIPTION
  +
  +...FIXME...
  +
  +=head1 LOGICAL LAYOUT
  +
  +1. Browse
  +   - Groups
  +     . Hyperlinks
  +2. Query
  +   - Groups
  +     . Field (database schema)
  +     . Operator (compare)
  +     . Value (depends on compare)
  +3. View
  +   - Selection predefined output format
  +   - OSSP var based formatting string
  +   - ordering
  +   - save custom view
  +4. Result
  +   - based on View
  +
  +=cut
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/quos.css
  ============================================================================
  $ cvs diff -u -r0 -r1.1 quos.css
  --- /dev/null	2004-10-25 16:35:11 +0200
  +++ quos.css	2004-10-25 16:35:12 +0200
  @@ -0,0 +1,35 @@
  +/*
  +**  OSSP quos - Query On Steroids
  +**  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +**
  +**  This file is part of OSSP quos, a Web user interface for querying
  +**  a database which can be found at http://www.ossp.org/pkg/tool/quos/.
  +**
  +**  This program is free software; you can redistribute it and/or modify
  +**  it under the terms of the GNU General Public License as published by
  +**  the Free Software Foundation; either version 2 of the License, or
  +**  (at your option) any later version.
  +**
  +**  This program is distributed in the hope that it will be useful,
  +**  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +**  General Public License for more details.
  +**
  +**  You should have received a copy of the GNU General Public License
  +**  along with this program; if not, write to the Free Software
  +**  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +**  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +**
  +**  quos.css: Cascading Style-Sheet (CSS)
  +*/
  +
  +DIV.quos {
  +    background: #f0f0f0;
  +}
  +
  +.quos SPAN.titlebrowse {
  +    color:      #ffffff;
  +    background: #000000;
  +}
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/quos.html
  ============================================================================
  $ cvs diff -u -r0 -r1.1 quos.html
  --- /dev/null	2004-10-25 16:35:11 +0200
  +++ quos.html	2004-10-25 16:35:12 +0200
  @@ -0,0 +1,10 @@
  +<html>
  +  <head>
  +    <link rel="stylesheet" type="text/css" href="quos.css">
  +  </head>
  +  <body>
  +    <h1>Quos Sample</h1>
  +    <p>
  +    %BODY%
  +  </body>
  +</html>
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct 25 17:03:30 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B166876583; Mon, 25 Oct 2004 17:03:29 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/quos/ ChangeLog
Message-Id: <20041025150329.B166876583@mail.ossp.org>
Date: Mon, 25 Oct 2004 17:03:29 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Oct-2004 17:03:29
  Branch: HEAD                             Handle: 2004102516032900

  Added files:
    ossp-pkg/quos           ChangeLog

  Log:
    add ChangeLog file

  Summary:
    Revision    Changes     Path
    1.1         +11 -0      ossp-pkg/quos/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/ChangeLog
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ChangeLog
  --- /dev/null	2004-10-25 17:03:29 +0200
  +++ ChangeLog	2004-10-25 17:03:29 +0200
  @@ -0,0 +1,11 @@
  +   _        ___  ____ ____  ____   
  +  |_|_ _   / _ \/ ___/ ___||  _ \   __ _ _   _  ___  ___  
  +  _|_||_| | | | \___ \___ \| |_) | / _` | | | |/ _ \/ __| 
  + |_||_|_| | |_| |___) |__) |  __/ | (_| | |_| | (_) \__ \ 
  +  |_|_|_|  \___/|____/____/|_|     \__, |\__,_|\___/|___/ 
  +                                      |_|                 
  +
  +  OSSP quos - Query On Steroids
  +
  +  ChangeLog
  +
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct 25 17:05:09 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2048B76583; Mon, 25 Oct 2004 17:05:09 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/tool/ index.wml ossp-web/pkg/tool/quos/ index...
Message-Id: <20041025150509.2048B76583@mail.ossp.org>
Date: Mon, 25 Oct 2004 17:05:09 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   25-Oct-2004 17:05:09
  Branch: HEAD                             Handle: 2004102516050701

  Added files:
    ossp-web/pkg/tool/quos  index.wml
  Modified files:
    ossp-web/pkg/tool       index.wml

  Log:
    add OSSP quos

  Summary:
    Revision    Changes     Path
    1.41        +3  -0      ossp-web/pkg/tool/index.wml
    1.1         +36 -0      ossp-web/pkg/tool/quos/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.40 -r1.41 index.wml
  --- ossp-web/pkg/tool/index.wml	11 Sep 2004 15:31:07 -0000	1.40
  +++ ossp-web/pkg/tool/index.wml	25 Oct 2004 15:05:07 -0000	1.41
  @@ -57,5 +57,8 @@
     <pkg_item name="snmpdx" longname="OSSP snmpdx" type="tool"
               desc="SNMP Daemon Extension"
   	        done=80 stable="none" unstable="0.2.8">
  +  <pkg_item name="quos" longname="OSSP quos" type="tool"
  +            desc="Query On Steroids"
  +	        done=80 stable="none" unstable="0.2.0">
   </pkg_list>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/quos/index.wml
  ============================================================================
  $ cvs diff -u -r0 -r1.1 index.wml
  --- /dev/null	2004-10-25 17:05:08 +0200
  +++ index.wml	2004-10-25 17:05:08 +0200
  @@ -0,0 +1,36 @@
  +
  +#use wml::ossp area=pkg:tool subarea=snmpdx
  +
  +<title>OSSP quos</title>
  +
  +<h1>Query On Steroids</h1>
  +
  +<h2>Abstract</h2>
  +
  +OSSP quos is a Web user interface for querying a RDBMS.
  +...FIXME...
  +
  +<h2>Authors</h2>
  +
  +<pkg_author name="Herbert Schmid" mail="hms@dev.de.cw.net">
  +
  +<h2>Status</h2>
  +
  +<pkg_status
  +    stable="none" stable_date="none"
  +    unstable="0.2.0" unstable_date="xx-Oct-2004"
  +	genesis="October 2004" done=10>
  +
  +<h2>Source</h2>
  +
  +<pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/tool/quos/
  +    url=$(FTP_ROOT_URL)/pkg/tool/quos/
  +    directory=$(FTP_ROOT_DIR)/pkg/tool/quos/
  +    files="" 
  +	stable="none" unstable="">
  +	
  +<h2>Donation</h2>
  +
  +<pkg_donation name="quos" return="$(BASE_URL)/pkg/tool/quos/">
  +
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct 25 17:19:21 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 647FE76583; Mon, 25 Oct 2004 17:19:21 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/quos/ TODO
Message-Id: <20041025151921.647FE76583@mail.ossp.org>
Date: Mon, 25 Oct 2004 17:19:21 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Oct-2004 17:19:21
  Branch: HEAD                             Handle: 2004102516192000

  Modified files:
    ossp-pkg/quos           TODO

  Log:
    remember required software

  Summary:
    Revision    Changes     Path
    1.2         +8  -0      ossp-pkg/quos/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/TODO
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 TODO
  --- ossp-pkg/quos/TODO	25 Oct 2004 14:35:11 -0000	1.1
  +++ ossp-pkg/quos/TODO	25 Oct 2004 15:19:20 -0000	1.2
  @@ -2,3 +2,11 @@
   - how to implement dynamically adjusting views based
     on total number of result records??
   
  +- sqlite    with_v3=yes
  +  perl
  +  perl-dbi  with_dbd_sqlite=yes
  +  perl-www
  +  perl-xml
  +  perl-util
  +  apache
  +
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct 25 17:42:44 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 80C8A76583; Mon, 25 Oct 2004 17:42:44 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/quos/ TODO quos.cgi quos.css
Message-Id: <20041025154244.80C8A76583@mail.ossp.org>
Date: Mon, 25 Oct 2004 17:42:44 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Oct-2004 17:42:44
  Branch: HEAD                             Handle: 2004102516424300

  Modified files:
    ossp-pkg/quos           TODO quos.cgi quos.css

  Log:
    initial cut for CGI

  Summary:
    Revision    Changes     Path
    1.3         +6  -0      ossp-pkg/quos/TODO
    1.2         +66 -9      ossp-pkg/quos/quos.cgi
    1.2         +21 -3      ossp-pkg/quos/quos.css
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/TODO
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 TODO
  --- ossp-pkg/quos/TODO	25 Oct 2004 15:19:20 -0000	1.2
  +++ ossp-pkg/quos/TODO	25 Oct 2004 15:42:43 -0000	1.3
  @@ -10,3 +10,9 @@
     perl-util
     apache
   
  +- apache.conf:
  +  Alias /quos/ /u/rse/wrk/ossp/quos/
  +  <Directory /u/hms/wrk/ossp/quos/>
  +     Options +ExecCGI
  +  </Directory>
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/quos.cgi
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 quos.cgi
  --- ossp-pkg/quos/quos.cgi	25 Oct 2004 14:35:11 -0000	1.1
  +++ ossp-pkg/quos/quos.cgi	25 Oct 2004 15:42:43 -0000	1.2
  @@ -28,16 +28,73 @@
   require 5.008;
   use CGI;
   use String::Divert;
  +use IO::File;
   
  -#  ...FIXME...
  -
  -my $html = '';
  -$html .= "<div class=\"quos\">";
  -$html .= "...";
  -$html .= "<span class=titlebrowse>Browse</span>";
  -$html .= "...";
  -$html .= "</div>";
  -print STDOUT $html;
  +#   create objects
  +my $cgi  = new CGI;
  +my $html = new String::Divert;
  +$html->overload(1);
  +
  +#   generate outer canvas
  +$html .= "<div class=\"quos\">\n";
  +$html->fold("quos");
  +$html .= "</div>\n";
  +$html >> "quos";
  +
  +#   generate browse part   
  +$html .= "<p>";
  +$html .= "<span class=\"browse\">";
  +$html .= "<span class=\"title\">Browse</span>\n";
  +$html->fold("browse");
  +$html .= "</span>\n";
  +$html .= "</span>\n";
  +
  +#   generate query part   
  +$html .= "<p>";
  +$html .= "<span class=\"query\">";
  +$html .= "<span class=\"title\">Query</span>\n";
  +$html->fold("query");
  +$html .= "</span>\n";
  +$html .= "</span>\n";
  +
  +#   generate view part   
  +$html .= "<p>";
  +$html .= "<span class=\"view\">";
  +$html .= "<span class=\"title\">View</span>\n";
  +$html->fold("view");
  +$html .= "</span>\n";
  +$html .= "</span>\n";
  +
  +#   generate result part   
  +$html .= "<p>";
  +$html .= "<span class=\"result\">";
  +$html .= "<span class=\"title\">Result</span>\n";
  +$html->fold("result");
  +$html .= "</span>\n";
  +$html .= "</span>\n";
  +
  +#   sample
  +$html >> "query";
  +$html .= "this is the query part";
  +$html << 1;
  +
  +#   read HTML skeleton
  +my $io = new IO::File "<quos.html"
  +    or die "unable to read HTML skeleton file \"quos.html\"";
  +my $skel = '';
  +$skel .= $_ while (<$io>);
  +$io->close();
  +$html->undivert(0);
  +$skel =~ s|\%BODY\%|$html|s;
  +$html = $skel;
  +
  +#   create HTTP response
  +my $http = $cgi->header(
  +    -type    => 'text/html',
  +    -expires => '+10s'
  +);
  +$http .= $html;
  +print STDOUT $http;
   
   __END__
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/quos.css
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 quos.css
  --- ossp-pkg/quos/quos.css	25 Oct 2004 14:35:11 -0000	1.1
  +++ ossp-pkg/quos/quos.css	25 Oct 2004 15:42:43 -0000	1.2
  @@ -28,8 +28,26 @@
       background: #f0f0f0;
   }
   
  -.quos SPAN.titlebrowse {
  -    color:      #ffffff;
  -    background: #000000;
  +.quos SPAN.browse {
  +    background: #cccccc;
  +}
  +.quos SPAN.browse SPAN.title {
  +    font-weight: bold;
  +    font-size: 200%;
  +    color: #ffffff;
  +}
  +.quos SPAN.query {
  +    background: #cc3333;
  +}
  +.quos SPAN.query SPAN.title {
  +    font-weight: bold;
  +    font-size: 400%;
  +    color: #cccc33;
  +}
  +.quos SPAN.view {
  +    background: #33cc33;
  +}
  +.quos SPAN.result {
  +    background: #3333cc;
   }
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct 25 17:46:39 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 13CD776583; Mon, 25 Oct 2004 17:46:38 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/quos/ TODO
Message-Id: <20041025154638.13CD776583@mail.ossp.org>
Date: Mon, 25 Oct 2004 17:46:38 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Oct-2004 17:46:38
  Branch: HEAD                             Handle: 2004102516463800

  Modified files:
    ossp-pkg/quos           TODO

  Log:
    todo items

  Summary:
    Revision    Changes     Path
    1.4         +11 -0      ossp-pkg/quos/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/TODO
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 TODO
  --- ossp-pkg/quos/TODO	25 Oct 2004 15:42:43 -0000	1.3
  +++ ossp-pkg/quos/TODO	25 Oct 2004 15:46:38 -0000	1.4
  @@ -16,3 +16,14 @@
        Options +ExecCGI
     </Directory>
   
  +- prepare: 
  +  - purpose of all files
  +  - OpenPKG RDF as example
  +  - perldoc IO::File
  +  - perldoc CGI
  +  - perldoc String::Divert
  +  - perldoc DBI
  +
  +  - design for HTML form for boolean expression based query!
  +    (RT, perldoc DBIx::SearchBuilder)
  +
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct 25 21:47:19 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 302D37642F; Mon, 25 Oct 2004 21:47:19 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/quos/ TODO
Message-Id: <20041025194719.302D37642F@mail.ossp.org>
Date: Mon, 25 Oct 2004 21:47:19 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Oct-2004 21:47:18
  Branch: HEAD                             Handle: 2004102520471800

  Modified files:
    ossp-pkg/quos           TODO

  Log:
    add my suggestion after thinking about this stuff again in more detail

  Summary:
    Revision    Changes     Path
    1.5         +27 -0      ossp-pkg/quos/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/TODO
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 TODO
  --- ossp-pkg/quos/TODO	25 Oct 2004 15:46:38 -0000	1.4
  +++ ossp-pkg/quos/TODO	25 Oct 2004 19:47:18 -0000	1.5
  @@ -27,3 +27,30 @@
     - design for HTML form for boolean expression based query!
       (RT, perldoc DBIx::SearchBuilder)
   
  +- UI Query Part (boolean expression to HTML form):
  +
  +  Boolean Expression:
  +  expr ::= field op value
  +         | "!" expr
  +         | expr "||" expr
  +         | expr "&&" expr
  +         | "(" expr ")"
  +  field ::= /^[A-Z]+$/
  +  op    ::= "==" | "!=" | "<" | "<=" | ">" | ">=" | "=~" | "!~"
  +  value ::= /^.*$/
  +
  +  HTML Form:
  +  ------------------------------
  +        ( field op value
  +        & field op value )
  +  & ( |   field op value
  +        & field op value 
  +    |   ! field op value       
  +      & ! field op value )     
  +  ------------------------------
  +  <:NN V:NN UPDATE CLEAR SUBMIT    
  +  ------------------------------
  +       NAME LOAD DELETE    
  +       NAME SAVE HYPERLINK 
  +  ------------------------------
  +
  @@ .

From ossp-cvs-owner@ossp.org  Tue Oct 26 14:07:06 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4A66576562; Tue, 26 Oct 2004 14:07:06 +0200 (CEST)
From: "Herbert Schmid" <hms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/quos/ TODO
Message-Id: <20041026120706.4A66576562@mail.ossp.org>
Date: Tue, 26 Oct 2004 14:07:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Herbert Schmid
  Root:   /e/ossp/cvs                      Email:  hms@ossp.org
  Module: ossp-pkg                         Date:   26-Oct-2004 14:07:05
  Branch: HEAD                             Handle: 2004102613070500

  Modified files:
    ossp-pkg/quos           TODO

  Log:
    *** empty log message ***

  Summary:
    Revision    Changes     Path
    1.6         +1  -0      ossp-pkg/quos/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/TODO
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 TODO
  --- ossp-pkg/quos/TODO	25 Oct 2004 19:47:18 -0000	1.5
  +++ ossp-pkg/quos/TODO	26 Oct 2004 12:07:05 -0000	1.6
  @@ -54,3 +54,4 @@
          NAME SAVE HYPERLINK 
     ------------------------------
   
  +-
  @@ .

From ossp-cvs-owner@ossp.org  Tue Oct 26 14:07:43 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AD1D176562; Tue, 26 Oct 2004 14:07:42 +0200 (CEST)
From: "Herbert Schmid" <hms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/quos/ TODO
Message-Id: <20041026120742.AD1D176562@mail.ossp.org>
Date: Tue, 26 Oct 2004 14:07:42 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Herbert Schmid
  Root:   /e/ossp/cvs                      Email:  hms@ossp.org
  Module: ossp-pkg                         Date:   26-Oct-2004 14:07:42
  Branch: HEAD                             Handle: 2004102613074200

  Modified files:
    ossp-pkg/quos           TODO

  Log:
    *** empty log message ***

  Summary:
    Revision    Changes     Path
    1.7         +0  -1      ossp-pkg/quos/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/TODO
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 TODO
  --- ossp-pkg/quos/TODO	26 Oct 2004 12:07:05 -0000	1.6
  +++ ossp-pkg/quos/TODO	26 Oct 2004 12:07:42 -0000	1.7
  @@ -54,4 +54,3 @@
          NAME SAVE HYPERLINK 
     ------------------------------
   
  --
  @@ .

From ossp-cvs-owner@ossp.org  Tue Oct 26 18:39:05 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2A38876584; Tue, 26 Oct 2004 18:39:05 +0200 (CEST)
From: "Herbert Schmid" <hms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/quos/ quos.cgi
Message-Id: <20041026163905.2A38876584@mail.ossp.org>
Date: Tue, 26 Oct 2004 18:39:05 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Herbert Schmid
  Root:   /e/ossp/cvs                      Email:  hms@ossp.org
  Module: ossp-pkg                         Date:   26-Oct-2004 18:39:04
  Branch: HEAD                             Handle: 2004102617390400

  Modified files:
    ossp-pkg/quos           quos.cgi

  Log:
    *** empty log message ***

  Summary:
    Revision    Changes     Path
    1.3         +66 -2      ossp-pkg/quos/quos.cgi
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/quos.cgi
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 quos.cgi
  --- ossp-pkg/quos/quos.cgi	25 Oct 2004 15:42:43 -0000	1.2
  +++ ossp-pkg/quos/quos.cgi	26 Oct 2004 16:39:04 -0000	1.3
  @@ -52,7 +52,7 @@
   #   generate query part   
   $html .= "<p>";
   $html .= "<span class=\"query\">";
  -$html .= "<span class=\"title\">Query</span>\n";
  +$html .= "<span class=\"title\">Query</span>\n<br>";
   $html->fold("query");
   $html .= "</span>\n";
   $html .= "</span>\n";
  @@ -75,7 +75,71 @@
   
   #   sample
   $html >> "query";
  -$html .= "this is the query part";
  +$html .= "this is the query part<br>";
  +$html .= $cgi->popup_menu(-name=>'opr1c1',
  +    -values=>['(',')','!','&','|'],
  +    -default=>'&');
  +$html .= $cgi->popup_menu(-name=>'opr1c2',
  +    -values=>['(',')','!','&','|'],
  +    -default=>'&');
  +$html .= $cgi->popup_menu(-name=>'opr1c3',
  +    -values=>['(',')','!','&','|'],
  +    -default=>'&');
  +$html .= $cgi->popup_menu(-name=>'fieldr1',
  +    -values=>['name','description','foo'],
  +    -default=>'name');
  +$html .= $cgi->popup_menu(-name=>'opr1c4',
  +    -values=>['=','begins with','ends with'],
  +    -default=>'=');
  +$html .= $cgi->textfield(-name=>'valuer1');
  +$html .= '<br>';
  +$html .= $cgi->popup_menu(-name=>'opr1c1',
  +    -values=>['(',')','!','&','|'],
  +    -default=>'&');
  +$html .= $cgi->popup_menu(-name=>'opr1c2',
  +    -values=>['(',')','!','&','|'],
  +    -default=>'&');
  +$html .= $cgi->popup_menu(-name=>'opr1c3',
  +    -values=>['(',')','!','&','|'],
  +    -default=>'&');
  +$html .= $cgi->popup_menu(-name=>'fieldr1',
  +    -values=>['name','description','foo'],
  +    -default=>'name');
  +$html .= $cgi->popup_menu(-name=>'opr1c4',
  +    -values=>['=','begins with','ends with'],
  +    -default=>'=');
  +$html .= $cgi->textfield(-name=>'valuer1');
  +$html .= '<br>';
  +$html .= $cgi->popup_menu(-name=>'opr1c1',
  +    -values=>['(',')','!','&','|'],
  +    -default=>'&');
  +$html .= $cgi->popup_menu(-name=>'opr1c2',
  +    -values=>['(',')','!','&','|'],
  +    -default=>'&');
  +$html .= $cgi->popup_menu(-name=>'opr1c3',
  +    -values=>['(',')','!','&','|'],
  +    -default=>'&');
  +$html .= $cgi->popup_menu(-name=>'fieldr1',
  +    -values=>['name','description','foo'],
  +    -default=>'name');
  +$html .= $cgi->popup_menu(-name=>'opr1c4',
  +    -values=>['=','begins with','ends with'],
  +    -default=>'=');
  +$html .= $cgi->textfield(-name=>'valuer1');
  +$html .= '<br>';
  +$html .= $cgi->submit('Action','submit');
  +
  +sub printparams {
  +    my($cgi) = @_;
  +    my(@values,$key);
  +
  +    foreach $key ($cgi->param) {
  +        print "<strong>$key</strong> -> ";
  +        @values = $query->param($key);
  +        print join(", ",@values),"<br>\n";
  +    }
  +}
  +
   $html << 1;
   
   #   read HTML skeleton
  @@ .

From ossp-cvs-owner@ossp.org  Tue Oct 26 18:56:29 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 51E2676586; Tue, 26 Oct 2004 18:56:29 +0200 (CEST)
From: "Herbert Schmid" <hms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/quos/ quos.cgi
Message-Id: <20041026165629.51E2676586@mail.ossp.org>
Date: Tue, 26 Oct 2004 18:56:29 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Herbert Schmid
  Root:   /e/ossp/cvs                      Email:  hms@ossp.org
  Module: ossp-pkg                         Date:   26-Oct-2004 18:56:29
  Branch: HEAD                             Handle: 2004102617562800

  Modified files:
    ossp-pkg/quos           quos.cgi

  Log:
    *** empty log message ***

  Summary:
    Revision    Changes     Path
    1.4         +1  -0      ossp-pkg/quos/quos.cgi
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/quos.cgi
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 quos.cgi
  --- ossp-pkg/quos/quos.cgi	26 Oct 2004 16:39:04 -0000	1.3
  +++ ossp-pkg/quos/quos.cgi	26 Oct 2004 16:56:28 -0000	1.4
  @@ -159,6 +159,7 @@
   );
   $http .= $html;
   print STDOUT $http;
  +&printparams($cgi);
   
   __END__
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Oct 26 18:57:20 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id ACBDC76586; Tue, 26 Oct 2004 18:57:19 +0200 (CEST)
From: "Herbert Schmid" <hms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/quos/ .cvsignore
Message-Id: <20041026165719.ACBDC76586@mail.ossp.org>
Date: Tue, 26 Oct 2004 18:57:19 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Herbert Schmid
  Root:   /e/ossp/cvs                      Email:  hms@ossp.org
  Module: ossp-pkg                         Date:   26-Oct-2004 18:57:19
  Branch: HEAD                             Handle: 2004102617571900

  Modified files:
    ossp-pkg/quos           .cvsignore

  Log:
    *** empty log message ***

  Summary:
    Revision    Changes     Path
    1.2         +2  -0      ossp-pkg/quos/.cvsignore
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/.cvsignore
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 .cvsignore
  --- ossp-pkg/quos/.cvsignore	25 Oct 2004 14:35:11 -0000	1.1
  +++ ossp-pkg/quos/.cvsignore	26 Oct 2004 16:57:19 -0000	1.2
  @@ -1 +1,3 @@
   openpkg.db
  +zarch
  +zdoc
  @@ .

From ossp-cvs-owner@ossp.org  Wed Oct 27 11:20:55 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B95BB7654E; Wed, 27 Oct 2004 11:20:54 +0200 (CEST)
From: "Herbert Schmid" <hms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/quos/ TODO
Message-Id: <20041027092054.B95BB7654E@mail.ossp.org>
Date: Wed, 27 Oct 2004 11:20:54 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Herbert Schmid
  Root:   /e/ossp/cvs                      Email:  hms@ossp.org
  Module: ossp-pkg                         Date:   27-Oct-2004 11:20:54
  Branch: HEAD                             Handle: 2004102710205300

  Modified files:
    ossp-pkg/quos           TODO

  Log:
    *** empty log message ***

  Summary:
    Revision    Changes     Path
    1.8         +78 -0      ossp-pkg/quos/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/TODO
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 TODO
  --- ossp-pkg/quos/TODO	26 Oct 2004 12:07:42 -0000	1.7
  +++ ossp-pkg/quos/TODO	27 Oct 2004 09:20:53 -0000	1.8
  @@ -54,3 +54,81 @@
          NAME SAVE HYPERLINK 
     ------------------------------
   
  +- modules:
  +
  +    * transformation module:
  +        - format 1: 2d form elements (input after submit of web form)
  +            lo2   lo1   lo0      fn        fo       fv
  +           +---+ +---+ +---+  +---------+ +---+ +---------+
  +      0 ...|   | |   | |   |  |  grp    | |== | | Mail    |
  +           +---+ +---+ +---+  +---------+ +---+ +---------+
  +           +---+ +---+ +---+  +---------+ +---+ +---------+
  +      1 ...|   | |   | ||| |  | desc    | |=~ | | \bMTA\b |
  +           +---+ +---+ +---+  +---------+ +---+ +---------+
  +           +---+ +---+ +---+  +---------+ +---+ +---------+
  +      2 ...|   | |&& | |   |  | class   | |== | | CORE    |
  +           +---+ +---+ +---+  +---------+ +---+ +---------+
  +           +---+ +---+ +---+  +---------+ +---+ +---------+
  +      3 ...|   | |   | ||| |  | class   | |== | | BASE    |
  +           +---+ +---+ +---+  +---------+ +---+ +---------+
  +             :    :    :         :          :        :
  +           
  +          fn-0="grp"&fo-0="=="&fv-0="Mail"&lo0-1="||"&fn-1="desc"&fo-1="=~"&fv-1="\bMTA\b"
  +          lo1-2="&&"&fn-2="class"&fo-2="=="&fv-2="CORE"&lo0-3="||"&fn-3="class"&fo-3="=="&fv-3="BASE"
  +
  +        - format 2a: astract syntax tree for query expression (internal representation)
  +         
  +          function-style:
  +          AND( OR( EQ(grp,"Mail"),
  +                   RE(desc,"\bMTA\b") ),
  +               OR( EQ(class,"CORE"),
  +                   EQ(class,"BASE")   ) )
  +
  +          in-core-style:
  +          my $expr = 
  +              [ "AND", [ "OR", [ "EQ", "grp",   "Mail"   ],
  +                               [ "RE", "desc",  "\bMTA\b"]  ],
  +                       [ "OR", [ "EQ", "class", "CORE"   ],
  +                               [ "EQ", "class", "BASE"   ]  ] ];
  +
  +          "print $expr->[2]->[1]->[2];" -> "CORE"
  +
  +          my $format2b = &transform_tree($expr, \&transform_style_perl);
  +          my $format2c = &transform_tree($expr, \&transform_style_sql);
  +          sub transform_tree {
  +              my ($expr, $style) = @_;
  +              my $str = '';
  +              my ($op, $a1, $a2) = @{$expr};
  +              $op = &style($op);
  +              $a1 = ref($a1) ? &style(&transform_tree($a1, $style)) : &style($a1);
  +              $a2 = ref($a2) ? &style(&transform_tree($a2, $style)) : &style($a2);
  +              $str = "$a1 $op $a2";
  +              return $str;
  +          }
  +          sub transform_style_perl {
  +              my ($token) = @_;
  +              $token =~ s/^AND$/&&/;
  +              $token =~ s/^OR$/||/;
  +              $token =~ s/^EQ$/==/;
  +              $token =~ s/^RE$/=~/;
  +              return $token;
  +          }
  +          sub transform_style_sql {
  +              my ($token) = @_;
  +              $token =~ s/^EQ$/=/;
  +              $token =~ s/^RE$/MATCH/;
  +              return $token;
  +          }
  +
  +        - format 2b: C-style query expression (input after hyperlink in web page)
  +
  +          (grp == "Mail" || desc =~ "\bMTA\b") && 
  +          (class == "CORE || class == "BASE")
  +
  +        - format 2c: SQL-style query expression (output for database query)
  +
  +          (quos.q_grp = 'Mail' OR quos.q_desc MATCH? '\bMTA\b') AND 
  +          (quos.q_class = 'CORE' OR quos.q_class = 'BASE')
  +
  +    * creation of web formular (render query)
  +        sub_render_form (cgi-Object | expression, row, column
  @@ .

From ossp-cvs-owner@ossp.org  Wed Oct 27 18:23:48 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 808427661C; Wed, 27 Oct 2004 18:23:47 +0200 (CEST)
From: "Herbert Schmid" <hms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/quos/ quos.cgi
Message-Id: <20041027162347.808427661C@mail.ossp.org>
Date: Wed, 27 Oct 2004 18:23:47 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Herbert Schmid
  Root:   /e/ossp/cvs                      Email:  hms@ossp.org
  Module: ossp-pkg                         Date:   27-Oct-2004 18:23:47
  Branch: HEAD                             Handle: 2004102717234600

  Modified files:
    ossp-pkg/quos           quos.cgi

  Log:
    query layout

  Summary:
    Revision    Changes     Path
    1.5         +93 -58     ossp-pkg/quos/quos.cgi
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/quos.cgi
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 quos.cgi
  --- ossp-pkg/quos/quos.cgi	26 Oct 2004 16:56:28 -0000	1.4
  +++ ossp-pkg/quos/quos.cgi	27 Oct 2004 16:23:46 -0000	1.5
  @@ -1,4 +1,4 @@
  -#!/usr/opkg/bin/perl
  +#!/usr/opkg/bin/perl 
   ##
   ##  OSSP quos - Query On Steroids
   ##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  @@ -33,7 +33,10 @@
   #   create objects
   my $cgi  = new CGI;
   my $html = new String::Divert;
  +my $nr_lops = 4;
  +my $nr_rows = 7;
   $html->overload(1);
  +#&printparams($cgi);
   
   #   generate outer canvas
   $html .= "<div class=\"quos\">\n";
  @@ -75,71 +78,104 @@
   
   #   sample
   $html >> "query";
  -$html .= "this is the query part<br>";
  -$html .= $cgi->popup_menu(-name=>'opr1c1',
  -    -values=>['(',')','!','&','|'],
  -    -default=>'&');
  -$html .= $cgi->popup_menu(-name=>'opr1c2',
  -    -values=>['(',')','!','&','|'],
  -    -default=>'&');
  -$html .= $cgi->popup_menu(-name=>'opr1c3',
  -    -values=>['(',')','!','&','|'],
  -    -default=>'&');
  -$html .= $cgi->popup_menu(-name=>'fieldr1',
  -    -values=>['name','description','foo'],
  -    -default=>'name');
  -$html .= $cgi->popup_menu(-name=>'opr1c4',
  -    -values=>['=','begins with','ends with'],
  -    -default=>'=');
  -$html .= $cgi->textfield(-name=>'valuer1');
  -$html .= '<br>';
  -$html .= $cgi->popup_menu(-name=>'opr1c1',
  -    -values=>['(',')','!','&','|'],
  -    -default=>'&');
  -$html .= $cgi->popup_menu(-name=>'opr1c2',
  -    -values=>['(',')','!','&','|'],
  -    -default=>'&');
  -$html .= $cgi->popup_menu(-name=>'opr1c3',
  -    -values=>['(',')','!','&','|'],
  -    -default=>'&');
  -$html .= $cgi->popup_menu(-name=>'fieldr1',
  -    -values=>['name','description','foo'],
  -    -default=>'name');
  -$html .= $cgi->popup_menu(-name=>'opr1c4',
  -    -values=>['=','begins with','ends with'],
  -    -default=>'=');
  -$html .= $cgi->textfield(-name=>'valuer1');
  -$html .= '<br>';
  -$html .= $cgi->popup_menu(-name=>'opr1c1',
  -    -values=>['(',')','!','&','|'],
  -    -default=>'&');
  -$html .= $cgi->popup_menu(-name=>'opr1c2',
  -    -values=>['(',')','!','&','|'],
  -    -default=>'&');
  -$html .= $cgi->popup_menu(-name=>'opr1c3',
  -    -values=>['(',')','!','&','|'],
  -    -default=>'&');
  -$html .= $cgi->popup_menu(-name=>'fieldr1',
  -    -values=>['name','description','foo'],
  -    -default=>'name');
  -$html .= $cgi->popup_menu(-name=>'opr1c4',
  -    -values=>['=','begins with','ends with'],
  -    -default=>'=');
  -$html .= $cgi->textfield(-name=>'valuer1');
  -$html .= '<br>';
  -$html .= $cgi->submit('Action','submit');
  +$html .= "parametrize your query<br>";
  +$html .= $cgi->start_html("query on steroids");
  +$html .= $cgi->start_form;
  +$html .= "<table>";
  +$html .= '<table>';
  +for ($i = 0; $i < $cgi->param('nr_rows'); $i++) {
  +    $html .= "<tr>";
  +        for ($j = $cgi->param('nr_lops') -1; $j >= 0; $j--) {
  +            $html .= "<td>";
  +                $html .= $cgi->popup_menu(-name=>"logop$j-$i",
  +                    -values=>[' ','(',')','!','&','|'],
  +                    -default=>' ');
  +            $html .= "</td>";
  +        }
  +        $html .= "<td>";
  +            $html .= $cgi->popup_menu(-name=>"f_name-$i",
  +                -values=>['name','description','foo'],
  +                -default=>'name');
  +        $html .= '</td>';
  +        $html .= '<td>';
  +            $html .= $cgi->popup_menu(-name=>"f_operator-$i",
  +                -values=>['=','begins with','ends with'],
  +                -default=>'=');
  +        $html .= '</td>';
  +        $html .= '<td>';
  +            $html .= $cgi->textfield(-name=>"f_value-$i");
  +        $html .= '</td>';
  +        $html .= '<br>';
  +        $html .= '</tr>';
  +}
  +$html .= "</table>";
  +$html .= '<table>';
  +    $html .= '<tr>';
  +        $html .= '<td>';
  +            $html .= $cgi->popup_menu(-name=>"nr_lops",
  +                    -values=>[1..9],
  +                    -default=>'3');
  +        $html .= '</td>';
  +        $html .= '<td>';
  +            $html .= $cgi->popup_menu(-name=>'nr_rows',
  +                    -values=>[1..9],
  +                    -default=>'4');
  +        $html .= '</td>';
  +        $html .= '<td>';
  +            $html .= $cgi->submit('act_matrix_upd','update');
  +        $html .= '</td>';
  +        $html .= '<td>';
  +            $html .= $cgi->submit('act_matrix_clear','clear');
  +        $html .= '</td>';
  +        $html .= '<td>';
  +            $html .= $cgi->submit('act_matrix_submit','submit');
  +        $html .= '</td>';
  +    $html .= '</tr>';
  +$html .= '</table>';
  +
  +$html .= '<table>';
  +    $html .= '<tr>';
  +        $html .= '<td>';
  +            $html .= 'name of query';
  +        $html .= '</td>';
  +        $html .= '<td>';
  +            $html .= $cgi->submit('act_matrix_clear','load');
  +        $html .= '</td>';
  +        $html .= '<td>';
  +            $html .= $cgi->submit('act_matrix_submit','delete');
  +        $html .= '</td>';
  +    $html .= '</tr>';
  +    $html .= '<tr>';
  +        $html .= '<td>';
  +            $html .= $cgi->textfield(-name=>'name_persquery');
  +        $html .= '</td>';
  +        $html .= '<td>';
  +            $html .= $cgi->submit('act_matrix_clear','save');
  +        $html .= '</td>';
  +        $html .= '<td>';
  +            $html .= 'hyperlink'; 
  +        $html .= '</td>';
  +    $html .= '</tr>';
  +$html .= '</table>';
  +
  +$html .= '</table>';
  +$html .= $cgi->end_form;
   
   sub printparams {
       my($cgi) = @_;
       my(@values,$key);
   
       foreach $key ($cgi->param) {
  -        print "<strong>$key</strong> -> ";
  -        @values = $query->param($key);
  -        print join(", ",@values),"<br>\n";
  +        $html .= "<strong>$key</strong> -> ";
  +        @values = $cgi->param($key);
  +        $html .= join(", ",@values)."<br>\n";
       }
   }
   
  +#    my($cgi) = @=;
  +    
  +
  +
   $html << 1;
   
   #   read HTML skeleton
  @@ -159,7 +195,6 @@
   );
   $http .= $html;
   print STDOUT $http;
  -&printparams($cgi);
   
   __END__
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Oct 28 14:00:29 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 49168765C8; Thu, 28 Oct 2004 14:00:29 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/quos/ quos.cgi
Message-Id: <20041028120029.49168765C8@mail.ossp.org>
Date: Thu, 28 Oct 2004 14:00:29 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Oct-2004 14:00:28
  Branch: HEAD                             Handle: 2004102813002600

  Modified files:
    ossp-pkg/quos           quos.cgi

  Log:
    add AmigaOS-style GURU MEDITATION fatal error handler

  Summary:
    Revision    Changes     Path
    1.6         +92 -0      ossp-pkg/quos/quos.cgi
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/quos.cgi
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 quos.cgi
  --- ossp-pkg/quos/quos.cgi	27 Oct 2004 16:23:46 -0000	1.5
  +++ ossp-pkg/quos/quos.cgi	28 Oct 2004 12:00:26 -0000	1.6
  @@ -30,6 +30,98 @@
   use String::Divert;
   use IO::File;
   
  +#   internal handling of fatal errors
  +BEGIN {
  +    $SIG{__DIE__} = sub {
  +        my ($msg) = @_;
  +        my $hint = '';
  +        if ($msg =~ m|line\s+(\d+)|) {
  +            my $line = $1;
  +            my $io = new IO::File "<$0";
  +            my @code = $io->getlines();
  +            $io->close();
  +            my $i = -1;
  +            $hint = join("", map { s/^/sprintf("%d: ", $line+$i++)/se; $_; } @code[$line-2..$line]);
  +        }
  +        print STDOUT 
  +            "Content-Type: text/html; charset=ISO-8859-1\n" .
  +            "\n" .
  +            "<html>\n" .
  +            "  <head>\n" .
  +            "    <title>OSSP quos: GURU MEDITATION</title>\n" .
  +            "    <style type=\"text/css\">\n" .
  +            "      HTML {\n" .
  +            "          width:  100%;\n" .
  +            "          height: auto;\n" .
  +            "      }\n" .
  +            "      BODY {\n" .
  +            "          background: #cccccc;\n" .
  +            "          margin:     0 0 0 0;\n" .
  +            "          padding:    0 0 0 0;\n" .
  +            "      }\n" .
  +            "      DIV.canvas {\n" .
  +            "          background: #000000;\n" .
  +            "          border: 20px solid #000000;\n" .
  +            "      }\n" .
  +            "      DIV.error1 {\n" .
  +            "          border-top:          4px solid #cc3333;\n" .
  +            "          border-left:         4px solid #cc3333;\n" .
  +            "          border-right:        4px solid #cc3333;\n" .
  +            "          border-bottom:       4px solid #cc3333;\n" .
  +            "          padding:             10px 10px 10px 10px;\n" .
  +            "          font-family:         sans-serif, helvetica, arial;\n" .
  +            "          background:          #000000;\n" .
  +            "          color:               #cc3333;\n" .
  +            "      }\n" .
  +            "      DIV.error2 {\n" .
  +            "          border-top:          4px solid #000000;\n" .
  +            "          border-left:         4px solid #000000;\n" .
  +            "          border-right:        4px solid #000000;\n" .
  +            "          border-bottom:       4px solid #000000;\n" .
  +            "          padding:             10px 10px 10px 10px;\n" .
  +            "          font-family:         sans-serif, helvetica, arial;\n" .
  +            "          background:          #000000;\n" .
  +            "          color:               #cc3333;\n" .
  +            "      }\n" .
  +            "      SPAN.title {\n" .
  +            "          font-size:           200%;\n" .
  +            "          font-weight:         bold;\n" .
  +            "      }\n" .
  +            "      TT.text {\n" .
  +            "          font-weight:         bold;\n" .
  +            "      }\n" .
  +            "    </style>\n" .
  +            "    <script language=\"JavaScript\">\n" .
  +            "    var count = 0;\n" .
  +            "    function blinker() {\n" .
  +            "        var obj = document.getElementById('error');\n" .
  +            "        if (count++ % 2 == 0) {\n" .
  +            "            obj.className = 'error1';\n" .
  +            "        }\n" .
  +            "        else {\n" .
  +            "            obj.className = 'error2';\n" .
  +            "        }\n" .
  +            "        setTimeout('blinker()', 1000);\n" .
  +            "    }\n" .
  +            "    </script>\n" .
  +            "  </head>\n" .
  +            "  <body onLoad=\"setTimeout('blinker()', 1);\">\n" .
  +            "    <div class=\"canvas\">\n" .
  +            "      <div id=\"error\" class=\"error1\">\n" .
  +            "        <span class=\"title\">OSSP quos: GURU MEDITATION</span>\n" .
  +            "        <p>\n" .
  +            "        <tt class=\"text\">\n" .
  +            "          $msg<br>\n" .
  +            "        </tt>\n" .
  +            "        <pre>\n$hint</pre>\n" .
  +            "      </div>\n" .
  +            "    </div>\n" .
  +            "  </body>\n" .
  +            "</html>\n";
  +        exit(0);
  +    };
  +}
  +
   #   create objects
   my $cgi  = new CGI;
   my $html = new String::Divert;
  @@ .

From ossp-cvs-owner@ossp.org  Thu Oct 28 16:35:04 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 83F5D76623; Thu, 28 Oct 2004 16:35:03 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/quos/ quos.cgi quos.css quos.html
Message-Id: <20041028143503.83F5D76623@mail.ossp.org>
Date: Thu, 28 Oct 2004 16:35:03 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Oct-2004 16:35:03
  Branch: HEAD                             Handle: 2004102815350200

  Modified files:
    ossp-pkg/quos           quos.cgi quos.css quos.html

  Log:
    work-off current functionality by cleaning up the source code and
    adding some harmless CSS+JS features

  Summary:
    Revision    Changes     Path
    1.7         +240 -122   ossp-pkg/quos/quos.cgi
    1.3         +71 -20     ossp-pkg/quos/quos.css
    1.2         +11 -2      ossp-pkg/quos/quos.html
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/quos.cgi
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 quos.cgi
  --- ossp-pkg/quos/quos.cgi	28 Oct 2004 12:00:26 -0000	1.6
  +++ ossp-pkg/quos/quos.cgi	28 Oct 2004 14:35:02 -0000	1.7
  @@ -1,4 +1,4 @@
  -#!/usr/opkg/bin/perl 
  +#!/usr/opkg/bin/perl -w
   ##
   ##  OSSP quos - Query On Steroids
   ##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  @@ -26,6 +26,7 @@
   ##
   
   require 5.008;
  +use strict;
   use CGI;
   use String::Divert;
   use IO::File;
  @@ -125,157 +126,271 @@
   #   create objects
   my $cgi  = new CGI;
   my $html = new String::Divert;
  -my $nr_lops = 4;
  -my $nr_rows = 7;
   $html->overload(1);
  -#&printparams($cgi);
  +
  +##
  +##  Read Config File
  +##
  +
  +my $cfg = {
  +    -cols => 4,
  +    -rows => 7,
  +};
  +#   FIXME
  +
  +##
  +##  Generate Canvas
  +##
  +
  +#   generate Javascript utility functions
  +$html .= "<script language=\"JavaScript\">\n" .
  +         "<!--\n" .
  +         "function colorize(obj, def) {\n" .
  +         "    if (obj.value == def) { obj.className = 'default'; }\n" .
  +         "    else                  { obj.className = 'changed'; }\n" .
  +         "    return true;\n" .
  +         "}\n" .
  +         "//-->\n" .
  +         "</script>\n";
   
   #   generate outer canvas
  -$html .= "<div class=\"quos\">\n";
  -$html->fold("quos");
  -$html .= "</div>\n";
  +$html .= "<table class=\"quos\">\n";
  +$html .= "  "; $html->fold("quos");
  +$html .= "</table>\n";
   $html >> "quos";
   
   #   generate browse part   
  -$html .= "<p>";
  -$html .= "<span class=\"browse\">";
  -$html .= "<span class=\"title\">Browse</span>\n";
  -$html->fold("browse");
  -$html .= "</span>\n";
  -$html .= "</span>\n";
  +$html .= "<tr>\n";
  +$html .= "  <td class=\"browse\">\n";
  +$html .= "    <span class=\"title\">Browse</span><br>\n";
  +$html .= "    "; $html->fold("browse");
  +$html .= "  </td>\n";
  +$html .= "</tr>\n";
   
   #   generate query part   
  -$html .= "<p>";
  -$html .= "<span class=\"query\">";
  -$html .= "<span class=\"title\">Query</span>\n<br>";
  -$html->fold("query");
  -$html .= "</span>\n";
  -$html .= "</span>\n";
  +$html .= "<tr>\n";
  +$html .= "  <td class=\"query\">\n";
  +$html .= "    <span class=\"title\">Query</span><br>\n";
  +$html .= "    "; $html->fold("query");
  +$html .= "  </td>\n";
  +$html .= "</tr>\n";
   
   #   generate view part   
  -$html .= "<p>";
  -$html .= "<span class=\"view\">";
  -$html .= "<span class=\"title\">View</span>\n";
  -$html->fold("view");
  -$html .= "</span>\n";
  -$html .= "</span>\n";
  +$html .= "<tr>\n";
  +$html .= "  <td class=\"view\">\n";
  +$html .= "    <span class=\"title\">View</span><br>\n";
  +$html .= "    "; $html->fold("view");
  +$html .= "  </td>\n";
  +$html .= "</tr>\n";
   
   #   generate result part   
  -$html .= "<p>";
  -$html .= "<span class=\"result\">";
  -$html .= "<span class=\"title\">Result</span>\n";
  -$html->fold("result");
  -$html .= "</span>\n";
  -$html .= "</span>\n";
  +$html .= "<tr>\n";
  +$html .= "  <td class=\"result\">\n";
  +$html .= "    <span class=\"title\">Result</span><br>\n";
  +$html .= "    "; $html->fold("result");
  +$html .= "  </td>\n";
  +$html .= "</tr>\n";
  +
  +##
  +##  Generate Browser Part
  +##
  +
  +$html >> "browse";
  +$html .= "FIXME";
  +$html << 1;
  +
  +##
  +##  Generate Query Part
  +##
   
  -#   sample
   $html >> "query";
  -$html .= "parametrize your query<br>";
  -$html .= $cgi->start_html("query on steroids");
  -$html .= $cgi->start_form;
  -$html .= "<table>";
  -$html .= '<table>';
  -for ($i = 0; $i < $cgi->param('nr_rows'); $i++) {
  -    $html .= "<tr>";
  -        for ($j = $cgi->param('nr_lops') -1; $j >= 0; $j--) {
  -            $html .= "<td>";
  -                $html .= $cgi->popup_menu(-name=>"logop$j-$i",
  -                    -values=>[' ','(',')','!','&','|'],
  -                    -default=>' ');
  -            $html .= "</td>";
  -        }
  -        $html .= "<td>";
  -            $html .= $cgi->popup_menu(-name=>"f_name-$i",
  -                -values=>['name','description','foo'],
  -                -default=>'name');
  -        $html .= '</td>';
  -        $html .= '<td>';
  -            $html .= $cgi->popup_menu(-name=>"f_operator-$i",
  -                -values=>['=','begins with','ends with'],
  -                -default=>'=');
  -        $html .= '</td>';
  -        $html .= '<td>';
  -            $html .= $cgi->textfield(-name=>"f_value-$i");
  -        $html .= '</td>';
  -        $html .= '<br>';
  -        $html .= '</tr>';
  -}
  -$html .= "</table>";
  -$html .= '<table>';
  -    $html .= '<tr>';
  -        $html .= '<td>';
  -            $html .= $cgi->popup_menu(-name=>"nr_lops",
  -                    -values=>[1..9],
  -                    -default=>'3');
  -        $html .= '</td>';
  -        $html .= '<td>';
  -            $html .= $cgi->popup_menu(-name=>'nr_rows',
  -                    -values=>[1..9],
  -                    -default=>'4');
  -        $html .= '</td>';
  -        $html .= '<td>';
  -            $html .= $cgi->submit('act_matrix_upd','update');
  -        $html .= '</td>';
  -        $html .= '<td>';
  -            $html .= $cgi->submit('act_matrix_clear','clear');
  -        $html .= '</td>';
  -        $html .= '<td>';
  -            $html .= $cgi->submit('act_matrix_submit','submit');
  -        $html .= '</td>';
  -    $html .= '</tr>';
  -$html .= '</table>';
  -
  -$html .= '<table>';
  -    $html .= '<tr>';
  -        $html .= '<td>';
  -            $html .= 'name of query';
  -        $html .= '</td>';
  -        $html .= '<td>';
  -            $html .= $cgi->submit('act_matrix_clear','load');
  -        $html .= '</td>';
  -        $html .= '<td>';
  -            $html .= $cgi->submit('act_matrix_submit','delete');
  -        $html .= '</td>';
  -    $html .= '</tr>';
  -    $html .= '<tr>';
  -        $html .= '<td>';
  -            $html .= $cgi->textfield(-name=>'name_persquery');
  -        $html .= '</td>';
  -        $html .= '<td>';
  -            $html .= $cgi->submit('act_matrix_clear','save');
  -        $html .= '</td>';
  -        $html .= '<td>';
  -            $html .= 'hyperlink'; 
  -        $html .= '</td>';
  -    $html .= '</tr>';
  -$html .= '</table>';
   
  -$html .= '</table>';
  +my $nr_cols = ($cgi->param('nr_cols') || $cfg->{-cols});
  +my $nr_rows = ($cgi->param('nr_rows') || $cfg->{-rows});
  +
  +#   render outer form canvas
  +$html .= $cgi->start_form;
  +$html .= "<table>\n";
  +$html .= "  <tr>\n";
  +$html .= "    <td class=\"expr\">\n";
  +$html .= "      "; $html->fold("query-form-expr");
  +$html .= "    </td>\n";
  +$html .= "  </tr>\n";
  +$html .= "  <tr>\n";
  +$html .= "    <td class=\"button\">\n";
  +$html .= "      "; $html->fold("query-form-button");
  +$html .= "    </td>\n";
  +$html .= "  </tr>\n";
  +$html .= "  <tr>\n";
  +$html .= "    <td class=\"define\">\n";
  +$html .= "      "; $html->fold("query-form-define");
  +$html .= "    </td>\n";
  +$html .= "  </tr>\n";
  +$html .= "</table>\n";
   $html .= $cgi->end_form;
   
  -sub printparams {
  -    my($cgi) = @_;
  -    my(@values,$key);
  -
  -    foreach $key ($cgi->param) {
  -        $html .= "<strong>$key</strong> -> ";
  -        @values = $cgi->param($key);
  -        $html .= join(", ",@values)."<br>\n";
  +#   render expression part
  +$html >> "query-form-expr";
  +$html .= "<table>\n";
  +for (my $i = 0; $i < $nr_cols; $i++) {
  +    $html .= "<tr>\n";
  +    for (my $j = $nr_cols - 1; $j >= 0; $j--) {
  +        $html .= "  <td>\n";
  +        my $id = sprintf("lo%02d%02d", $j, $i);
  +        $html .= "    " . $cgi->popup_menu(
  +            -id       => $id,
  +            -name     => $id,
  +            -values   => [' ', '(', ')', '!', '&', '|'],
  +            -default  => ' ',
  +            -class    => 'default',
  +            -onChange => "return colorize(this.form.$id, ' ');",
  +            -onBlur   => "return colorize(this.form.$id, ' ');",
  +        ) . "\n";
  +        $html .= "  </td>\n";
       }
  +    $html .= "  <td>\n";
  +    my $id = sprintf("fn%02d", $i);
  +    $html .= "    " . $cgi->popup_menu(
  +        -id       => $id,
  +        -name     => $id,
  +        -values   => ['', 'name', 'description', 'foo'], # FIXME
  +        -default  => '', # FIXME
  +        -class    => 'default',
  +        -onChange => "return colorize(this.form.$id, '');",
  +        -onBlur   => "return colorize(this.form.$id, '');",
  +    ) . "\n";
  +    $html .= "  </td>\n";
  +    $html .= "  <td>\n";
  +    $id = sprintf("fo%02d", $i);
  +    $html .= "    " . $cgi->popup_menu(
  +        -id       => $id,
  +        -name     => $id,
  +        -values   => ['', '==', '!=', '<', '<=', '>', '>=', '=~', '!~'],
  +        -default  => '',
  +        -class    => 'default',
  +        -onChange => "return colorize(this.form.$id, '');",
  +        -onBlur   => "return colorize(this.form.$id, '');",
  +    ). "\n";
  +    $html .= "  </td>\n";
  +    $html .= "  <td>\n";
  +    $id = sprintf("fv%02d", $i);
  +    $html .= "    " . $cgi->textfield(
  +        -id         => $id,
  +        -name       => $id,
  +        -default    => '',
  +        -class      => 'default',
  +        -onChange   => "return colorize(this.form.$id, '');",
  +        -onBlur     => "return colorize(this.form.$id, '');",
  +        -onMouseOut => "return colorize(this.form.$id, '');",
  +    );
  +    $html .= "  </td>\n";
  +    $html .= "</tr>\n";
   }
  +$html .= "</table>\n";
  +$html << 1;
  +
  +#   render button part
  +$html >> "query-form-button";
  +$html .= "<table>\n";
  +$html .= "  <tr>\n";
  +$html .= "    <td>";
  +$html .= "      " . $cgi->popup_menu(
  +    -name    => $nr_cols,
  +    -values  => [ 0..9 ],
  +    -default => $nr_cols,
  +) . "\n";
  +$html .= "    </td>\n";
  +$html .= "    <td>\n";
  +$html .= "      " . $cgi->popup_menu(
  +    -name    => $nr_rows,
  +    -values  => [1..9],
  +    -default => $nr_rows,
  +) . "\n";
  +$html .= "    </td>\n";
  +$html .= "    <td>\n";
  +$html .= "      " . $cgi->submit('act_matrix_upd', 'update') . "\n";
  +$html .= "    </td>\n";
  +$html .= "    <td>\n";
  +$html .= "      " . $cgi->submit('act_matrix_clear', 'clear') . "\n";
  +$html .= "    </td>\n";
  +$html .= "    <td>\n";
  +$html .= "      " . $cgi->submit('act_matrix_submit', 'submit') . "\n";
  +$html .= "    </td>\n";
  +$html .= "  </tr>\n";
  +$html .= "</table>\n";
  +$html << 1;
  +
  +#   render define part
  +$html >> "query-form-define";
  +$html .= "<table>\n";
  +$html .= "  <tr>\n";
  +$html .= "    <td>\n";
  +$html .= "    " . $cgi->popup_menu(
  +    -id       => "namexx",
  +    -name     => "namexx",
  +    -values   => ['HTML: by-group', 'HTML: by-xxx', 'TXT: by-group'], # FIXME
  +    -default  => 'HTML: by-group', # FIXME
  +    -class    => 'default',
  +) . "\n";
  +$html .= "    </td>\n";
  +$html .= "    <td>\n";
  +$html .= "      " . $cgi->submit('act_matrix_clear', 'load') . "\n";
  +$html .= "    </td>\n";
  +$html .= "    <td>\n";
  +$html .= "      " . $cgi->submit('act_matrix_submit', 'delete') . "\n";
  +$html .= "    </td>\n";
  +$html .= "  </tr>\n";
  +$html .= "  <tr>\n";
  +$html .= "    <td>\n";
  +$html .= "      " . $cgi->textfield(
  +    -name =>'name_persquery'
  +) . "\n";
  +$html .= "    </td>\n";
  +$html .= "    <td>\n";
  +$html .= "      " . $cgi->submit('act_matrix_clear', 'save') . "\n";
  +$html .= "    </td>\n";
  +$html .= "    <td>\n";
  +$html .= "      " . $cgi->submit('act_matrix_hyperlink', 'hyperlink') . "\n";
  +$html .= "    </td>\n";
  +$html .= "  </tr>\n";
  +$html .= "</table>\n";
  +$html << 1;
  +
  +$html << 1;
  +
  +##
  +##  Generate View Part
  +##
   
  -#    my($cgi) = @=;
  -    
  +$html >> "view";
  +$html .= "FIXME";
  +$html << 1;
   
  +##
  +##  Generate Result Part
  +##
   
  +$html >> "result";
  +$html .= "FIXME<br>";
  +foreach my $key ($cgi->param) {
  +    $html .= "<strong>$key</strong> -&gt; ";
  +    my @values = $cgi->param($key);
  +    $html .= join(", ", @values) . "<br>\n";
  +}
   $html << 1;
   
  +##
  +##  Generate HTTP Reponse
  +##
  +
   #   read HTML skeleton
   my $io = new IO::File "<quos.html"
       or die "unable to read HTML skeleton file \"quos.html\"";
   my $skel = '';
   $skel .= $_ while (<$io>);
   $io->close();
  +
  +#   undivert HTML output and wrap with skeleton
   $html->undivert(0);
   $skel =~ s|\%BODY\%|$html|s;
   $html = $skel;
  @@ -288,6 +403,9 @@
   $http .= $html;
   print STDOUT $http;
   
  +#   die gracefully ;-)
  +exit(0);
  +
   __END__
   
   =pod
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/quos.css
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 quos.css
  --- ossp-pkg/quos/quos.css	25 Oct 2004 15:42:43 -0000	1.2
  +++ ossp-pkg/quos/quos.css	28 Oct 2004 14:35:02 -0000	1.3
  @@ -24,30 +24,81 @@
   **  quos.css: Cascading Style-Sheet (CSS)
   */
   
  -DIV.quos {
  -    background: #f0f0f0;
  +/*
  +**  Style Canvas
  +*/
  +
  +TABLE.quos {
  +    width:           100%;
  +    background:      #f0f0f0;
  +    font-family:     sans-serif, helvetica, arial;
   }
   
  -.quos SPAN.browse {
  -    background: #cccccc;
  +.quos TD.browse {
  +    width:           100%;
  +    background:      #d0d0d0;
  +}
  +.quos TD.browse SPAN.title {
  +    font-weight:     bold;
  +    font-size:       200%;
  +    color:           #000000;
  +}
  +.quos TD.query {
  +    width:           100%;
  +    background:      #d0d0d0;
  +}
  +.quos TD.query SPAN.title {
  +    font-weight:     bold;
  +    font-size:       200%;
  +    color:           #000000;
  +}
  +.quos TD.view {
  +    width:           100%;
  +    background:      #d0d0d0;
  +}
  +.quos TD.view SPAN.title {
  +    font-weight:     bold;
  +    font-size:       200%;
  +    color:           #000000;
  +}
  +.quos TD.result {
  +    width:           100%;
  +    background:      #d0d0d0;
  +}
  +.quos TD.result SPAN.title {
  +    font-weight:     bold;
  +    font-size:       200%;
  +    color:           #000000;
   }
  -.quos SPAN.browse SPAN.title {
  -    font-weight: bold;
  -    font-size: 200%;
  -    color: #ffffff;
  -}
  -.quos SPAN.query {
  -    background: #cc3333;
  -}
  -.quos SPAN.query SPAN.title {
  -    font-weight: bold;
  -    font-size: 400%;
  -    color: #cccc33;
  +
  +/*
  +**  Style Query Part
  +*/
  +
  +.quos .query .expr INPUT {
  +    background:          inherit;
  +    border-top:          1px solid #c0c0c0;
  +    border-left:         1px solid #c0c0c0;
  +    border-right:        1px solid #999999;
  +    border-bottom:       1px solid #999999;
  +}
  +.quos .query .expr INPUT.default {
  +    background:          inherit;
  +}
  +.quos .query .expr INPUT.changed {
  +    background:          #ffffff;
  +}
  +.quos .query .expr SELECT {
  +    background:          inherit;
  +    border-top:          1px solid #c0c0c0;
  +    border-left:         1px solid #c0c0c0;
  +    border-right:        1px solid #999999;
  +    border-bottom:       1px solid #999999;
   }
  -.quos SPAN.view {
  -    background: #33cc33;
  +.quos .query .expr SELECT.default {
  +    background:          inherit;
   }
  -.quos SPAN.result {
  -    background: #3333cc;
  +.quos .query .expr SELECT.changed {
  +    background:          #ffffff;
   }
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/quos.html
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 quos.html
  --- ossp-pkg/quos/quos.html	25 Oct 2004 14:35:11 -0000	1.1
  +++ ossp-pkg/quos/quos.html	28 Oct 2004 14:35:02 -0000	1.2
  @@ -1,10 +1,19 @@
   <html>
     <head>
       <link rel="stylesheet" type="text/css" href="quos.css">
  +    <style type="text/css">
  +      html {
  +        background: #cccccc;
  +      }
  +      h1 {
  +        font-family: sans-serif, helvetica, arial;
  +        font-weight: bold;
  +        font-size:   300%;
  +      }
  +    </style>
     </head>
     <body>
  -    <h1>Quos Sample</h1>
  -    <p>
  +    <h1>OSSP quos</h1>
       %BODY%
     </body>
   </html>
  @@ .

From ossp-cvs-owner@ossp.org  Thu Oct 28 17:37:44 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 35700764F3; Thu, 28 Oct 2004 17:37:44 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/quos/ quos.cgi quos.css
Message-Id: <20041028153744.35700764F3@mail.ossp.org>
Date: Thu, 28 Oct 2004 17:37:44 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Oct-2004 17:37:43
  Branch: HEAD                             Handle: 2004102816374300

  Modified files:
    ossp-pkg/quos           quos.cgi quos.css

  Log:
    optically align all Query part elements in a rectangular way

  Summary:
    Revision    Changes     Path
    1.8         +43 -15     ossp-pkg/quos/quos.cgi
    1.4         +48 -0      ossp-pkg/quos/quos.css
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/quos.cgi
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 quos.cgi
  --- ossp-pkg/quos/quos.cgi	28 Oct 2004 14:35:02 -0000	1.7
  +++ ossp-pkg/quos/quos.cgi	28 Oct 2004 15:37:43 -0000	1.8
  @@ -294,27 +294,37 @@
   $html .= "<table>\n";
   $html .= "  <tr>\n";
   $html .= "    <td>";
  -$html .= "      " . $cgi->popup_menu(
  -    -name    => $nr_cols,
  +$html .= "      " . "&larr; " . $cgi->popup_menu(
  +    -name    => "nr_cols",
       -values  => [ 0..9 ],
       -default => $nr_cols,
   ) . "\n";
  -$html .= "    </td>\n";
  -$html .= "    <td>\n";
  -$html .= "      " . $cgi->popup_menu(
  -    -name    => $nr_rows,
  +$html .= "      " . "&darr; " . $cgi->popup_menu(
  +    -name    => "nr_rows",
       -values  => [1..9],
       -default => $nr_rows,
   ) . "\n";
   $html .= "    </td>\n";
   $html .= "    <td>\n";
  -$html .= "      " . $cgi->submit('act_matrix_upd', 'update') . "\n";
  +$html .= "      " . $cgi->submit(
  +    -name  => 'act_matrix_upd',
  +    -value => 'update',
  +    -class => 'update'
  +) . "\n";
   $html .= "    </td>\n";
   $html .= "    <td>\n";
  -$html .= "      " . $cgi->submit('act_matrix_clear', 'clear') . "\n";
  +$html .= "      " . $cgi->submit(
  +    -name  => 'act_matrix_clear',
  +    -value => 'clear',
  +    -class => 'clear'
  +) . "\n";
   $html .= "    </td>\n";
   $html .= "    <td>\n";
  -$html .= "      " . $cgi->submit('act_matrix_submit', 'submit') . "\n";
  +$html .= "      " . $cgi->submit(
  +    -name  => 'act_matrix_submit',
  +    -value => 'submit',
  +    -class => 'submit'
  +) . "\n";
   $html .= "    </td>\n";
   $html .= "  </tr>\n";
   $html .= "</table>\n";
  @@ -330,27 +340,45 @@
       -name     => "namexx",
       -values   => ['HTML: by-group', 'HTML: by-xxx', 'TXT: by-group'], # FIXME
       -default  => 'HTML: by-group', # FIXME
  -    -class    => 'default',
  +    -class    => 'nameget',
   ) . "\n";
   $html .= "    </td>\n";
   $html .= "    <td>\n";
  -$html .= "      " . $cgi->submit('act_matrix_clear', 'load') . "\n";
  +$html .= "      " . $cgi->submit(
  +    -name  => 'act_matrix_clear',
  +    -value => 'load',
  +    -class => 'load'
  +) . "\n";
   $html .= "    </td>\n";
   $html .= "    <td>\n";
  -$html .= "      " . $cgi->submit('act_matrix_submit', 'delete') . "\n";
  +$html .= "      " . $cgi->submit(
  +    -name  => 'act_matrix_submit',
  +    -value => 'delete',
  +    -class => 'delete'
  +) . "\n";
   $html .= "    </td>\n";
   $html .= "  </tr>\n";
   $html .= "  <tr>\n";
   $html .= "    <td>\n";
   $html .= "      " . $cgi->textfield(
  -    -name =>'name_persquery'
  +    -name  => 'name_persquery',
  +    -value => '',
  +    -class => 'nameset'
   ) . "\n";
   $html .= "    </td>\n";
   $html .= "    <td>\n";
  -$html .= "      " . $cgi->submit('act_matrix_clear', 'save') . "\n";
  +$html .= "      " . $cgi->submit(
  +    -name  => 'act_matrix_clear',
  +    -value => 'save',
  +    -class => 'save'
  +) . "\n";
   $html .= "    </td>\n";
   $html .= "    <td>\n";
  -$html .= "      " . $cgi->submit('act_matrix_hyperlink', 'hyperlink') . "\n";
  +$html .= "      " . $cgi->submit(
  +    -name  => 'act_matrix_hyperlink',
  +    -value => 'hyperlink',
  +    -class => 'hyperlink'
  +) . "\n";
   $html .= "    </td>\n";
   $html .= "  </tr>\n";
   $html .= "</table>\n";
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/quos.css
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 quos.css
  --- ossp-pkg/quos/quos.css	28 Oct 2004 14:35:02 -0000	1.3
  +++ ossp-pkg/quos/quos.css	28 Oct 2004 15:37:43 -0000	1.4
  @@ -101,4 +101,52 @@
   .quos .query .expr SELECT.changed {
       background:          #ffffff;
   }
  +.quos .query .expr TABLE {
  +    border-collapse: collapse;
  +    border-spacing: 0px;
  +}
   
  +.quos .query .button TABLE {
  +    width: 100%;
  +    border-collapse: collapse;
  +    border-spacing: 0px;
  +}
  +.quos .query .button INPUT {
  +    width: 100%;
  +}
  +.quos .query .button INPUT.update {
  +    background: #f0f0ff;
  +}
  +.quos .query .button INPUT.clear {
  +    background: #f0f0ff;
  +}
  +.quos .query .button INPUT.submit {
  +    background: #ffffff;
  +}
  +
  +.quos .query .define TABLE {
  +    width: 100%;
  +    border-collapse: collapse;
  +    border-spacing: 0px;
  +}
  +.quos .query .define INPUT {
  +    width: 100%;
  +}
  +.quos .query .define INPUT.hyperlink {
  +    background: #f0f0ff;
  +}
  +.quos .query .define INPUT.load {
  +    background: #f0f0ff;
  +}
  +.quos .query .define INPUT.delete {
  +    background: #ffffff;
  +}
  +.quos .query .define INPUT.save {
  +    background: #ffffff;
  +}
  +.quos .query .define SELECT.nameget {
  +    width: 100%;
  +}
  +.quos .query .define INPUT.nameset {
  +    width: 100%;
  +}
  @@ .

From ossp-cvs-owner@ossp.org  Thu Oct 28 17:40:20 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 53281764F3; Thu, 28 Oct 2004 17:40:20 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/quos/ quos.css
Message-Id: <20041028154020.53281764F3@mail.ossp.org>
Date: Thu, 28 Oct 2004 17:40:20 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Oct-2004 17:40:20
  Branch: HEAD                             Handle: 2004102816401900

  Modified files:
    ossp-pkg/quos           quos.css

  Log:
    be a little bit more fancy

  Summary:
    Revision    Changes     Path
    1.5         +7  -5      ossp-pkg/quos/quos.css
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/quos.css
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 quos.css
  --- ossp-pkg/quos/quos.css	28 Oct 2004 15:37:43 -0000	1.4
  +++ ossp-pkg/quos/quos.css	28 Oct 2004 15:40:19 -0000	1.5
  @@ -118,10 +118,12 @@
       background: #f0f0ff;
   }
   .quos .query .button INPUT.clear {
  -    background: #f0f0ff;
  +    background: #fff0f0;
   }
   .quos .query .button INPUT.submit {
  -    background: #ffffff;
  +    background: #000000;
  +    color: #ffffff;
  +    font-weight: bold;
   }
   
   .quos .query .define TABLE {
  @@ -136,13 +138,13 @@
       background: #f0f0ff;
   }
   .quos .query .define INPUT.load {
  -    background: #f0f0ff;
  +    background: #f0fff0;
   }
   .quos .query .define INPUT.delete {
  -    background: #ffffff;
  +    background: #fff0f0;
   }
   .quos .query .define INPUT.save {
  -    background: #ffffff;
  +    background: #fff0f0;
   }
   .quos .query .define SELECT.nameget {
       width: 100%;
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 29 21:27:36 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BB30676630; Fri, 29 Oct 2004 21:27:35 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var/ ChangeLog devtool.conf
Message-Id: <20041029192735.BB30676630@mail.ossp.org>
Date: Fri, 29 Oct 2004 21:27:35 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Oct-2004 21:27:35
  Branch: HEAD                             Handle: 2004102920273400

  Modified files:
    ossp-pkg/var            ChangeLog devtool.conf

  Log:
    Upgraded build environment to GNU libtool 1.5.10

  Summary:
    Revision    Changes     Path
    1.8         +5  -0      ossp-pkg/var/ChangeLog
    1.12        +3  -3      ossp-pkg/var/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 ChangeLog
  --- ossp-pkg/var/ChangeLog	12 Sep 2004 18:13:43 -0000	1.7
  +++ ossp-pkg/var/ChangeLog	29 Oct 2004 19:27:34 -0000	1.8
  @@ -11,6 +11,11 @@
     This is a list of all source changes to OSSP var.
     For less details please have a look at the NEWS file.
   
  +  Changes between 1.1.1 and 1.1.2 (12-Sep-2004 to xx-Oct-2004)
  +
  +   o Upgraded build environment to GNU libtool 1.5.10.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
     Changes between 1.1.0 and 1.1.1 (04-Apr-2004 to 12-Sep-2004)
   
      o Upgraded build environment to GNU libtool 1.5.8 and GNU shtool 2.0.1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 devtool.conf
  --- ossp-pkg/var/devtool.conf	12 Sep 2004 18:13:43 -0000	1.11
  +++ ossp-pkg/var/devtool.conf	29 Oct 2004 19:27:34 -0000	1.12
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   2.0.1 "2.0.*" all
  -    @autogen libtool  1.5.8 "1.5*"
  -    @autogen autoconf 2.59  "2.5[4-9]*"
  +    @autogen shtool   2.0.1  "2.0.*" all
  +    @autogen libtool  1.5.10 "1.5*"
  +    @autogen autoconf 2.59   "2.5[4-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 29 21:29:13 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D98B976630; Fri, 29 Oct 2004 21:29:12 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var/ ChangeLog var-config.in
Message-Id: <20041029192912.D98B976630@mail.ossp.org>
Date: Fri, 29 Oct 2004 21:29:12 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Oct-2004 21:29:12
  Branch: HEAD                             Handle: 2004102920291200

  Modified files:
    ossp-pkg/var            ChangeLog var-config.in

  Log:
    Fixed "var-config --libs" output

  Summary:
    Revision    Changes     Path
    1.9         +3  -0      ossp-pkg/var/ChangeLog
    1.8         +1  -1      ossp-pkg/var/var-config.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 ChangeLog
  --- ossp-pkg/var/ChangeLog	29 Oct 2004 19:27:34 -0000	1.8
  +++ ossp-pkg/var/ChangeLog	29 Oct 2004 19:29:12 -0000	1.9
  @@ -13,6 +13,9 @@
   
     Changes between 1.1.1 and 1.1.2 (12-Sep-2004 to xx-Oct-2004)
   
  +   o Fixed "var-config --libs" output.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
      o Upgraded build environment to GNU libtool 1.5.10.
        [Ralf S. Engelschall <rse@engelschall.com>]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var-config.in
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 var-config.in
  --- ossp-pkg/var/var-config.in	4 Apr 2004 08:07:34 -0000	1.7
  +++ ossp-pkg/var/var-config.in	29 Oct 2004 19:29:12 -0000	1.8
  @@ -124,7 +124,7 @@
               output_extra="$output_extra $ldflags"
               ;;
           --libs)
  -            output="$output -lxds"
  +            output="$output -lvar"
               output_extra="$output_extra $libs"
               ;;
           * )
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 29 21:42:22 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4CDDB76633; Fri, 29 Oct 2004 21:42:22 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var/ ChangeLog devtool.conf var.c var.h var_test....
Message-Id: <20041029194222.4CDDB76633@mail.ossp.org>
Date: Fri, 29 Oct 2004 21:42:22 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Oct-2004 21:42:21
  Branch: HEAD                             Handle: 2004102920422000

  Modified files:
    ossp-pkg/var            ChangeLog devtool.conf var.c var.h var_test.c

  Log:
    o Various code comment cleanups.
    o Fixed dmalloc support.

  Summary:
    Revision    Changes     Path
    1.10        +6  -0      ossp-pkg/var/ChangeLog
    1.13        +1  -0      ossp-pkg/var/devtool.conf
    1.105       +6  -3      ossp-pkg/var/var.c
    1.32        +26 -5      ossp-pkg/var/var.h
    1.51        +2  -1      ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 ChangeLog
  --- ossp-pkg/var/ChangeLog	29 Oct 2004 19:29:12 -0000	1.9
  +++ ossp-pkg/var/ChangeLog	29 Oct 2004 19:42:20 -0000	1.10
  @@ -13,6 +13,12 @@
   
     Changes between 1.1.1 and 1.1.2 (12-Sep-2004 to xx-Oct-2004)
   
  +   o Various code comment cleanups.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +   o Fixed dmalloc support.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
      o Fixed "var-config --libs" output.
        [Ralf S. Engelschall <rse@engelschall.com>]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 devtool.conf
  --- ossp-pkg/var/devtool.conf	29 Oct 2004 19:27:34 -0000	1.12
  +++ ossp-pkg/var/devtool.conf	29 Oct 2004 19:42:20 -0000	1.13
  @@ -16,6 +16,7 @@
       ./configure \
           --prefix=/tmp/var \
           --disable-shared \
  +        --with-dmalloc=/usr/opkg \
           --enable-maintainer \
           --enable-debug \
           "$@"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var.c
  ============================================================================
  $ cvs diff -u -r1.104 -r1.105 var.c
  --- ossp-pkg/var/var.c	4 Apr 2004 09:57:10 -0000	1.104
  +++ ossp-pkg/var/var.c	29 Oct 2004 19:42:20 -0000	1.105
  @@ -32,6 +32,7 @@
   #include "config.h"
   #endif
   
  +/* required system headers */
   #include <stdlib.h>
   #include <stdarg.h>
   #include <ctype.h>
  @@ -44,11 +45,13 @@
   #else
   #  include <regex.h>
   #endif
  -#include "var.h"
   #if defined(HAVE_DMALLOC_H) && defined(WITH_DMALLOC)
  -#include "dmalloc.h"
  +#include <dmalloc.h>
   #endif
   
  +/* required internal headers */
  +#include "var.h"
  +
   /* unique library identifier */
   const char var_id[] = "OSSP var";
   
  @@ -2719,7 +2722,7 @@
       "formatting failure"                                       /* VAR_ERR_FORMATTING_FAILURE */
   };
   
  -/* transslate a return code into its corresponding descriptive text */
  +/* translate a return code into its corresponding descriptive text */
   var_rc_t var_strerror(var_t *var, var_rc_t rc, char **str)
   {
       if (str == NULL)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var.h
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 var.h
  --- ossp-pkg/var/var.h	4 Apr 2004 08:07:34 -0000	1.31
  +++ ossp-pkg/var/var.h	29 Oct 2004 19:42:20 -0000	1.32
  @@ -31,10 +31,22 @@
   #ifndef __VAR_H__
   #define __VAR_H__
   
  +/* required system headers */
   #include <stdlib.h>
   #include <stdarg.h>
   
  -/* Error codes */
  +/* minimum C++ support */
  +#ifdef __cplusplus
  +#define DECLARATION_BEGIN extern "C" {
  +#define DECLARATION_END   }
  +#else
  +#define DECLARATION_BEGIN
  +#define DECLARATION_END
  +#endif
  +
  +DECLARATION_BEGIN
  +
  +/* error codes */
   typedef enum {
       VAR_ERR_CALLBACK                        = -64,
       VAR_ERR_FORMATTING_FAILURE              = -45,
  @@ -85,15 +97,18 @@
       VAR_OK                                  =   0
   } var_rc_t;
   
  +/* opaque data type */
   struct var_st;
   typedef struct var_st var_t;
   
  +/* var_config() modes */
   typedef enum {
       VAR_CONFIG_SYNTAX,
       VAR_CONFIG_CB_VALUE,
       VAR_CONFIG_CB_OPERATION
   } var_config_t;
   
  +/* VAR_CONFIG_SYNTAX type */
   typedef struct {
       char  escape;       /* default: '\' */
       char  delim_init;   /* default: '$' */
  @@ -105,22 +120,26 @@
       char *name_chars;   /* default: "a-zA-Z0-9_" */
   } var_syntax_t;
   
  +/* VAR_CONFIG_CB_VALUE type */
   typedef var_rc_t (*var_cb_value_t)(
       var_t *var, void *ctx,
  -    const char  *var_ptr, size_t  var_len, int var_idx,
  +    const char  *var_ptr, size_t  var_len, int     var_idx,
       const char **val_ptr, size_t *val_len, size_t *val_size
   );
   
  +/* VAR_CONFIG_CB_OPERATION type */
   typedef var_rc_t (*var_cb_operation_t)(
       var_t *var, void *ctx,
  -    const char  *op_ptr, size_t op_len,
  -    const char  *arg_ptr, size_t arg_len,
  -    const char  *val_ptr, size_t val_len,
  +    const char  *op_ptr,  size_t   op_len,
  +    const char  *arg_ptr, size_t  arg_len,
  +    const char  *val_ptr, size_t  val_len,
       const char **out_ptr, size_t *out_len, size_t *out_size
   );
   
  +/* library API identification */
   extern const char var_id[];
   
  +/* library API functions */
   var_rc_t  var_create    (var_t **var);
   var_rc_t  var_destroy   (var_t  *var);
   var_rc_t  var_config    (var_t  *var, var_config_t mode, ...);
  @@ -130,5 +149,7 @@
   var_rc_t  var_format    (var_t  *var, char **dst_ptr, int force_expand, const char *fmt, ...);
   var_rc_t  var_strerror  (var_t  *var, var_rc_t rc, char **str);
   
  +DECLARATION_END
  +
   #endif /* __VAR_H__ */
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var_test.c
  ============================================================================
  $ cvs diff -u -r1.50 -r1.51 var_test.c
  --- ossp-pkg/var/var_test.c	4 Apr 2004 08:07:34 -0000	1.50
  +++ ossp-pkg/var/var_test.c	29 Oct 2004 19:42:20 -0000	1.51
  @@ -29,13 +29,14 @@
   */
   
   #include <stdio.h>
  +#include <stdlib.h>
   #include <string.h>
   #include <errno.h>
   #include <ctype.h>
   
   #include "config.h"
   #if defined(HAVE_DMALLOC_H) && defined(WITH_DMALLOC)
  -#include "dmalloc.h"
  +#include <dmalloc.h>
   #endif
   
   #include "var.h"
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 29 21:44:41 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8528476633; Fri, 29 Oct 2004 21:44:41 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var/ ChangeLog
Message-Id: <20041029194441.8528476633@mail.ossp.org>
Date: Fri, 29 Oct 2004 21:44:41 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Oct-2004 21:44:41
  Branch: HEAD                             Handle: 2004102920444000

  Modified files:
    ossp-pkg/var            ChangeLog

  Log:
    Remember what was done, too.

  Summary:
    Revision    Changes     Path
    1.11        +4  -0      ossp-pkg/var/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 ChangeLog
  --- ossp-pkg/var/ChangeLog	29 Oct 2004 19:42:20 -0000	1.10
  +++ ossp-pkg/var/ChangeLog	29 Oct 2004 19:44:40 -0000	1.11
  @@ -13,6 +13,10 @@
   
     Changes between 1.1.1 and 1.1.2 (12-Sep-2004 to xx-Oct-2004)
   
  +   o Added minimum C++ support by enclosing API declaration
  +     into 'extern "C"' scope.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
      o Various code comment cleanups.
        [Ralf S. Engelschall <rse@engelschall.com>]
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 29 22:40:20 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9C0C07661F; Fri, 29 Oct 2004 22:40:19 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var/ ChangeLog var.pod
Message-Id: <20041029204019.9C0C07661F@mail.ossp.org>
Date: Fri, 29 Oct 2004 22:40:19 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Oct-2004 22:40:19
  Branch: HEAD                             Handle: 2004102921401800

  Modified files:
    ossp-pkg/var            ChangeLog var.pod

  Log:
    Cleanup and extend the Unix manual page var(3)

  Summary:
    Revision    Changes     Path
    1.12        +3  -0      ossp-pkg/var/ChangeLog
    1.37        +56 -39     ossp-pkg/var/var.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 ChangeLog
  --- ossp-pkg/var/ChangeLog	29 Oct 2004 19:44:40 -0000	1.11
  +++ ossp-pkg/var/ChangeLog	29 Oct 2004 20:40:18 -0000	1.12
  @@ -13,6 +13,9 @@
   
     Changes between 1.1.1 and 1.1.2 (12-Sep-2004 to xx-Oct-2004)
   
  +   o Cleanup and extend the Unix manual page var(3).
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
      o Added minimum C++ support by enclosing API declaration
        into 'extern "C"' scope.
        [Ralf S. Engelschall <rse@engelschall.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var.pod
  ============================================================================
  $ cvs diff -u -r1.36 -r1.37 var.pod
  --- ossp-pkg/var/var.pod	4 Apr 2004 08:07:34 -0000	1.36
  +++ ossp-pkg/var/var.pod	29 Oct 2004 20:40:18 -0000	1.37
  @@ -107,7 +107,7 @@
   
   =item C<\t>, C<\r>, C<\n>
   
  -Tabulator, Carriage Return and Newline character.
  +Tabulator (TAB), Carriage Return (CR) and Newline (NL) character.
   
   =item C<\\>, C<\>I<x>
   
  @@ -133,17 +133,17 @@
   =item C<${>I<name>C<:->I<word>C<}>
   
   If C<$>I<name> is not empty string and not undefined, then C<$>I<name>,
  -else I<word> (default value).
  +else I<word> (Default Value).
   
   =item C<${>I<name>C<:+>I<word>C<}>
   
   If C<$>I<name> is empty string, then empty string, else I<word>
  -(positive alternative).
  +(Positive Alternative).
   
   =item C<${>I<name>C<:*>I<word>C<}>
   
   If C<$>I<name> is not empty string, then empty string, else I<word>
  -(negative alternative).
  +(Negative Alternative).
   
   =item C<${>I<name>C<:o>I<start>C<,>[I<length>]C<}>
   
  @@ -159,10 +159,10 @@
   
   C<$>I<name> after replacing characters matching I<pattern> with
   I<string>. By default, case-sensitive regular expression matching is
  -performed and only the first occurance of I<pattern> is replaced. Flag
  +performed and only the first occurrence of I<pattern> is replaced. Flag
   "C<i>" switches to case insensitive matching; flag "C<t>" switches
   to plain text pattern; flag "C<g>" switches to replacements of all
  -occurances; flag "C<m>" switches to multi-line matching (That is, change
  +occurrences; flag "C<m>" switches to multi-line matching (That is, change
   "C<^>" and "C<$>" from matching the start or end of the string to
   matching the start or end of any line).
   
  @@ -189,14 +189,15 @@
   Repeat expansion of I<body> as long as at least one array variable
   does not expand to the empty string (first variant) or exactly
   (I<end>-I<start>)/I<step> times (second variant). In both cases the
  -character "C<#>" is expanded in C<body> as the current loop index
  +character "C<#>" is expanded in I<body> as the current loop index
   (C<0>,... for first variant and I<start>,...,I<end> with stepping
  -I<step> for second variant). I<index> of array variable lookups. For
  -I<start>, I<step> and I<end>, full arithmetic expressions are allowed.
  -This loop construct can be nested, too. In this case an inner loop is
  -fully repeated for each iteration of the outer loop. Additionally,
  -arithmetic expressions are supported in both I<start>, I<step>, I<end>
  -and I<index> parts of variable constructs in I<body>.
  +I<step> for second variant). The "C<#>" is usually used in the I<index>
  +of array variable lookups. For I<start>, I<step> and I<end>, full
  +arithmetic expressions are allowed. This loop construct can be nested,
  +too. In this case an inner loop is fully repeated for each iteration of
  +the outer loop. Additionally, arithmetic expressions are supported in
  +both I<start>, I<step>, I<end> and I<index> parts of variable constructs
  +in I<body>.
   
   =back
   
  @@ -287,10 +288,10 @@
   =item B<var_rc_t>
   
   This is an exported enumerated integer type describing the return
  -code of all API functions. On success, every API functions returns
  -C<VAR_OK>. On error, they return C<VAR_ERR_XXX>. For a list of all
  +code of all API functions. On success, every API function returns
  +C<VAR_OK>. On error, it returns C<VAR_ERR_XXX>. For a list of all
   possible return codes see F<var.h>. Their corresponding describing text
  -can be determined with B<var_strerror>.
  +can be determined with function B<var_strerror>.
   
   =item B<var_t>
   
  @@ -300,10 +301,11 @@
   =item B<var_config_t>
   
   This is an exported enumerated integer type describing configuration
  -parameters for B<var_config>. Currently C<VAR_CONFIG_SYNTAX> (for
  -configuring the syntax via B<var_syntax_t>) and C<VAR_CONFIG_CB_VALUE>
  -(for configuring the callback for value lookups via B<var_cb_value_t>)
  -are defined.
  +parameters for function B<var_config>. Currently C<VAR_CONFIG_SYNTAX>
  +for configuring the syntax via B<var_syntax_t>, C<VAR_CONFIG_CB_VALUE>
  +for configuring the callback for value lookups via B<var_cb_value_t>,
  +and C<VAR_CONFIG_CB_OPERATION> for configuring the callback for custom
  +value operation functions via B<var_cb_operation_t> are defined.
   
   =item B<var_syntax_t>
   
  @@ -557,11 +559,16 @@
   
   =item C<VAR_CONFIG_CB_VALUE>, var_cb_value_t I<cb>, void *I<ctx>
   
  -This overrides the syntax configuration in I<var> with the one provided
  -The default is C<NULL> for I<cb> and I<ctx>. At least C<NULL> for I<cb>
  -is not valid for proper operation of B<var_expand>, so the caller has to
  -configure the callback before variable expansions can be successfully
  -performed.
  +This overrides the value expansion in I<var>. The default is C<NULL> for
  +I<cb> and I<ctx>. At least C<NULL> for I<cb> is not valid for proper
  +operation of B<var_expand>, so the caller has to configure the callback
  +before variable expansions can be successfully performed.
  +
  +=item C<VAR_CONFIG_CB_OPERATION>, var_cb_operation_t I<cb>, void *I<ctx>
  +
  +This provides a custom value operation function for I<var>. The default
  +is C<NULL> for I<cb> and I<ctx> which means no custom operation is
  +available.
   
   =back
   
  @@ -574,9 +581,9 @@
   characters. The reason is that B<var_unescape> always adds a terminating
   C<NUL> ('C<\0>') character at the end of the output buffer, so that
   you can use the result comfortably with other C library routines. The
  -supplied I<dst_ptr> either has to be point to a pre-allocated buffer or
  +supplied I<dst_ptr> either has to point to a pre-allocated buffer or
   is allowed to point to I<src_ptr> (because the unescaping operation is
  -guarrantied to either keep the size or reduce the size of the input).
  +guaranteed to either keep the size or reduce the size of the input).
   
   The parameter I<all> is a boolean flag that modifies the behavior
   of B<var_unescape>. If is set to true (any value except zero),
  @@ -659,10 +666,18 @@
   
   =head2 VARIABLES
   
  +The B<OSSP var> API consists of the following B<ISO-C> exported variables:
  +
   =over 4
   
   =item B<var_id>
   
  +This is just a pointer to the constant string "C<OSSP var>". It is used
  +as the first argument in B<ex_trow> calls if B<OSSP var> is built with
  +B<OSSP ex> support. It then allows the application to determine whether
  +a caught exception was thrown by B<OSSP var>. See B<EXCEPTION HANDLING>
  +below for more details.
  +
   =back
   
   =head1 COMBINING UNESCAPING AND EXPANSION
  @@ -680,7 +695,7 @@
   "C<\1>", which might have a special meaning (regular expression
   back-references) in the B<var_expand> pass to follow.
   
  -Once, all known escape sequences are expanded, expand the variables
  +Once all known escape sequences are expanded, expand the variables
   with B<var_expand>. After that, you will want to have a second pass
   with B<var_unescape> and the flag I<all> set to true, to make sure all
   remaining escape sequences are expanded. Also, the B<var_expand> pass
  @@ -696,12 +711,12 @@
   returning C<VAR_ERR_XXX> return codes. 
   
   The thrown exceptions can be identified as B<OSSP var> exceptions by
  -checking the exception attribute C<ex_class>. It is the B<OSSP var>
  -API symbol C<var_id> for all B<OSSP var> exceptions. The C<ex_object>
  -attribute is always C<NULL>. The C<ex_value> attribute is the
  -C<var_rc_t> which forced the throwing of the exception. 
  +checking the exception attribute B<ex_class>. It is the B<OSSP var>
  +API symbol B<var_id> for all B<OSSP var> exceptions. The B<ex_object>
  +attribute is always C<NULL>. The B<ex_value> attribute is the
  +B<var_rc_t> which forced the throwing of the exception. 
   
  -Exception throwing can be suppressed with C<ex_shield> only.
  +Exception throwing can be suppressed with B<ex_shield> only.
   
   =head1 EXAMPLE (DEVELOPER)
   
  @@ -801,11 +816,13 @@
        return 0;
    }
   
  -Copy & paste the source code it into F<var_play.c> (or use the version
  -already shipped with the B<OSSP var> source distribution), compile it
  -with
  -
  - $ cc `var-config --cflags` -o var_play var_play.c `var-config --ldflags --libs`
  +Copy & paste the source code into a file F<var_play.c> (or use the
  +version already shipped with the B<OSSP var> source distribution),
  +compile it with
  +
  + $ cc `var-config --cflags` \
  +   -o var_play var_play.c \
  +   `var-config --ldflags --libs`
   
   and use it to play with the various B<OSSP var> variable expansion
   possibilities.
  @@ -841,7 +858,7 @@
   
   =head1 SEE ALSO
   
  -pcre(3), regex(7), B<OSSP val> (Value Access).
  +pcre(3), regex(7), B<OSSP val> (Value Access), B<OSSP ex> (Exception Handling).
   
   =head1 HISTORY
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 29 22:41:19 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 64F6E7661F; Fri, 29 Oct 2004 22:41:19 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var/ README var.pod
Message-Id: <20041029204119.64F6E7661F@mail.ossp.org>
Date: Fri, 29 Oct 2004 22:41:19 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Oct-2004 22:41:19
  Branch: HEAD                             Handle: 2004102921411800

  Modified files:
    ossp-pkg/var            README var.pod

  Log:
    more fixes

  Summary:
    Revision    Changes     Path
    1.8         +1  -1      ossp-pkg/var/README
    1.38        +6  -6      ossp-pkg/var/var.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/README
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 README
  --- ossp-pkg/var/README	12 Sep 2004 18:15:01 -0000	1.7
  +++ ossp-pkg/var/README	29 Oct 2004 20:41:18 -0000	1.8
  @@ -17,7 +17,7 @@
     more post-operations on the expanded value (${name:op:op...}).
   
     The supported post-operations are length determination, case
  -  conversion, defaults, postive and negative alternatives, sub-strings,
  +  conversion, defaults, positive and negative alternatives, sub-strings,
     regular expression based substitutions, character translations, and
     padding. Additionally, a meta-construct plus arithmetic expressions
     for index and range calculations allow (even nested) iterations
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var.pod
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 var.pod
  --- ossp-pkg/var/var.pod	29 Oct 2004 20:40:18 -0000	1.37
  +++ ossp-pkg/var/var.pod	29 Oct 2004 20:41:18 -0000	1.38
  @@ -76,12 +76,12 @@
   expansion, plus optionally one or more post-operations on the expanded
   value (C<${>I<name>C<:>I<op>[C<:>I<op>...]]C<}>).
   
  -The supported post-operations are length determination, case
  -conversion, defaults, positive and negative alternatives, sub-strings,
  -regular expression based substitutions, character translations, and
  -padding. Additionally, a meta-construct plus arithmetic expressions for
  -index and range calculations allow (even nested) iterations over array
  -variable expansions (..C<[>..C<${>I<name>C<[#+1]}>..C<]>..).
  +The supported post-operations are length determination, case conversion,
  +defaults, positive and negative alternatives, sub-strings, regular
  +expression based substitutions, character translations, and padding.
  +Additionally, a meta-construct plus arithmetic expressions for index and
  +range calculations allow (even nested) iterations over array variable
  +expansions (..C<[>..C<${>I<name>C<[#+1]}>..C<]>..).
   
   The actual variable value lookup is performed through a callback
   function, so B<OSSP var> can expand arbitrary values.
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 29 22:57:24 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 144A47662F; Fri, 29 Oct 2004 22:57:24 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var/ ChangeLog var-config.pod
Message-Id: <20041029205724.144A47662F@mail.ossp.org>
Date: Fri, 29 Oct 2004 22:57:24 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Oct-2004 22:57:23
  Branch: HEAD                             Handle: 2004102921572300

  Modified files:
    ossp-pkg/var            ChangeLog var-config.pod

  Log:
    cleanup var-config(1) manual page, too

  Summary:
    Revision    Changes     Path
    1.13        +1  -1      ossp-pkg/var/ChangeLog
    1.8         +13 -22     ossp-pkg/var/var-config.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 ChangeLog
  --- ossp-pkg/var/ChangeLog	29 Oct 2004 20:40:18 -0000	1.12
  +++ ossp-pkg/var/ChangeLog	29 Oct 2004 20:57:23 -0000	1.13
  @@ -13,7 +13,7 @@
   
     Changes between 1.1.1 and 1.1.2 (12-Sep-2004 to xx-Oct-2004)
   
  -   o Cleanup and extend the Unix manual page var(3).
  +   o Cleanup and extend the Unix manual pages var(3) and var-config(1).
        [Ralf S. Engelschall <rse@engelschall.com>]
   
      o Added minimum C++ support by enclosing API declaration
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var-config.pod
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 var-config.pod
  --- ossp-pkg/var/var-config.pod	4 Apr 2004 08:07:34 -0000	1.7
  +++ ossp-pkg/var/var-config.pod	29 Oct 2004 20:57:23 -0000	1.8
  @@ -32,11 +32,11 @@
   
   =head1 NAME
   
  -B<var-config> - VAR library build utility
  +B<var-config> - B<OSSP var> library build utility
   
   =head1 VERSION
   
  -OSSP VAR VAR_VERSION_STR
  +OSSP var VAR_VERSION_STR
   
   =head1 SYNOPSIS
   
  @@ -59,10 +59,11 @@
   
   =head1 DESCRIPTION
   
  -The B<var-config> program is a little helper utility for easy configuring and
  -building applications based on the var(3) library.  It can be used to query the
  -C compiler and linker flags which are required to correctly compile and link
  -the application against the var(3) library.
  +The B<var-config> program is a little helper utility for easy
  +configuring and building applications based on the B<OSSP var> library.
  +It can be used to query the C compiler and linker flags which are
  +required to correctly compile and link the application against the
  +B<OSSP var> library.
   
   =head1 OPTIONS
   
  @@ -76,12 +77,12 @@
   
   =item B<--version>
   
  -Prints the version number and date of the installed var(3) library.
  +Prints the version number and date of the installed B<OSSP var> library.
   
   =item B<--all>
   
   Forces the output of all flags, that is, including extra flags which are not
  -B<VAR> specific.
  +B<OSSP var> specific.
   
   =item B<--prefix>
   
  @@ -111,33 +112,23 @@
   
   Prints the installation directory of shared data.
   
  -=item B<--acdir>
  -
  -Prints the installation directory of B<autoconf> data.
  -
   =item B<--cflags>
   
  -Prints the C compiler flags which are needed to compile the var(3)-based
  +Prints the C compiler flags which are needed to compile the B<OSSP var> based
   application. The output is usually added to the C<CFLAGS> variable of the
   applications C<Makefile>.
   
   =item B<--ldflags>
   
   Prints the linker flags (C<-L>) which are needed to link the application with
  -the var(3) library. The output is usually added to the C<LDFLAGS> variable of
  +the B<OSSP var> library. The output is usually added to the C<LDFLAGS> variable of
   the applications C<Makefile>.
   
   =item B<--libs>
   
  -Prints the library flags (C<-l>) which are needed to link the application with
  -the C var(3) library. The output is usually added to the C<LIBS> variable of the
  -applications C<Makefile>.
  -
  -=item B<--libs++>
  -
   Prints the library flags (C<-l>) which are needed to link the
  -application with the C++ var(3) library. The output is usually added to
  -the C<LIBS> variable of the applications C<Makefile>.
  +application with the C B<OSSP var> library. The output is usually added
  +to the C<LIBS> variable of the applications C<Makefile>.
   
   =back
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Oct 31 12:58:48 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2562E764D8; Sun, 31 Oct 2004 12:58:48 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog
Message-Id: <20041031115848.2562E764D8@mail.ossp.org>
Date: Sun, 31 Oct 2004 12:58:48 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Oct-2004 12:58:47
  Branch: HEAD                             Handle: 2004103111584700

  Modified files:
    ossp-pkg/uuid           ChangeLog

  Log:
    fix ChangeLog header

  Summary:
    Revision    Changes     Path
    1.57        +5  -1      ossp-pkg/uuid/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.56 -r1.57 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	16 Oct 2004 18:20:18 -0000	1.56
  +++ ossp-pkg/uuid/ChangeLog	31 Oct 2004 11:58:47 -0000	1.57
  @@ -11,7 +11,11 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 1.0.4 and 1.0.4 (15-Oct-2004 to 16-Oct-2004)
  +  Changes between 1.0.4 and 1.0.5 (16-Oct-2004 to 31-Oct-2004)
  +
  +   o ...
  +
  +  Changes between 1.0.3 and 1.0.4 (15-Oct-2004 to 16-Oct-2004)
   
      o Fix version detection from uuid_vers.h
        [Ralf S. Engelschall]
  @@ .

From ossp-cvs-owner@ossp.org  Sun Oct 31 12:59:04 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 404F076630; Sun, 31 Oct 2004 12:59:04 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ USERS
Message-Id: <20041031115904.404F076630@mail.ossp.org>
Date: Sun, 31 Oct 2004 12:59:04 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Oct-2004 12:59:04
  Branch: HEAD                             Handle: 2004103111590300

  Modified files:
    ossp-pkg/uuid           USERS

  Log:
    one more user of OSSP uuid

  Summary:
    Revision    Changes     Path
    1.2         +5  -0      ossp-pkg/uuid/USERS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/USERS
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 USERS
  --- ossp-pkg/uuid/USERS	12 Sep 2004 16:08:44 -0000	1.1
  +++ ossp-pkg/uuid/USERS	31 Oct 2004 11:59:03 -0000	1.2
  @@ -23,3 +23,8 @@
       Grid Application Toolkit (GAT) 
       https://www.gridlab.org/WorkPackages/wp-1/ 
   
  +  o Menes
  +    High-Level C++ Library for mutexes, networking, etc.
  +    http://www.saurik.com/
  +    http://svn.saurik.com/repos/menes/trunk/
  +
  @@ .

From ossp-cvs-owner@ossp.org  Sun Oct 31 12:59:58 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 29913764D8; Sun, 31 Oct 2004 12:59:58 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var/ ChangeLog README VERSION
Message-Id: <20041031115958.29913764D8@mail.ossp.org>
Date: Sun, 31 Oct 2004 12:59:58 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Oct-2004 12:59:57
  Branch: HEAD                             Handle: 2004103111595601

  Modified files:
    ossp-pkg/var            ChangeLog README VERSION

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.14        +1  -1      ossp-pkg/var/ChangeLog
    1.9         +1  -1      ossp-pkg/var/README
    1.8         +1  -1      ossp-pkg/var/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 ChangeLog
  --- ossp-pkg/var/ChangeLog	29 Oct 2004 20:57:23 -0000	1.13
  +++ ossp-pkg/var/ChangeLog	31 Oct 2004 11:59:56 -0000	1.14
  @@ -11,7 +11,7 @@
     This is a list of all source changes to OSSP var.
     For less details please have a look at the NEWS file.
   
  -  Changes between 1.1.1 and 1.1.2 (12-Sep-2004 to xx-Oct-2004)
  +  Changes between 1.1.1 and 1.1.2 (12-Sep-2004 to 31-Oct-2004)
   
      o Cleanup and extend the Unix manual pages var(3) and var-config(1).
        [Ralf S. Engelschall <rse@engelschall.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/README
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 README
  --- ossp-pkg/var/README	29 Oct 2004 20:41:18 -0000	1.8
  +++ ossp-pkg/var/README	31 Oct 2004 11:59:56 -0000	1.9
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|       \_/ \__,_|_|
   
     OSSP var - Variable Expansion
  -  Version 1.1.1 (12-Sep-2004)
  +  Version 1.1.2 (31-Oct-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/VERSION
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 VERSION
  --- ossp-pkg/var/VERSION	12 Sep 2004 18:15:01 -0000	1.7
  +++ ossp-pkg/var/VERSION	31 Oct 2004 11:59:57 -0000	1.8
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP var (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP var, Version 1.1.1 (12-Sep-2004)
  +  This is OSSP var, Version 1.1.2 (31-Oct-2004)
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Oct 31 13:05:04 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E80CB764D8; Sun, 31 Oct 2004 13:05:03 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20041031120503.E80CB764D8@mail.ossp.org>
Date: Sun, 31 Oct 2004 13:05:03 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   31-Oct-2004 13:05:03
  Branch: HEAD                             Handle: 2004103112050003

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/var    index.wml

  Log:
    release OSSP var 1.1.2

  Summary:
    Revision    Changes     Path
    1.103       +1  -0      ossp-web/new/news.txt
    1.89        +1  -1      ossp-web/pkg/lib/index.wml
    1.12        +3  -2      ossp-web/pkg/lib/var/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.102 -r1.103 news.txt
  --- ossp-web/new/news.txt	16 Oct 2004 18:32:08 -0000	1.102
  +++ ossp-web/new/news.txt	31 Oct 2004 12:05:00 -0000	1.103
  @@ -1,3 +1,4 @@
  +31-Oct-2004: Released L<OSSP var> 1.1.2
   16-Oct-2004: Released L<OSSP uuid> 1.0.4
   15-Oct-2004: Released L<OSSP uuid> 1.0.3
   12-Sep-2004: Released L<OSSP mm> 1.3.1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.88 -r1.89 index.wml
  --- ossp-web/pkg/lib/index.wml	16 Oct 2004 18:32:08 -0000	1.88
  +++ ossp-web/pkg/lib/index.wml	31 Oct 2004 12:05:02 -0000	1.89
  @@ -30,7 +30,7 @@
   			done=100 stable=1.5.0 unstable=none>
     <pkg_item name="var" longname="OSSP var" type="lib"
               desc="Variable Expansion"
  -			done=100 stable=1.1.1 unstable=none>
  +			done=100 stable=1.1.2 unstable=none>
     <pkg_item name="uuid" longname="OSSP uuid" type="lib"
               desc="Universally Unique Identifier"
   			done=100 stable=1.0.4 unstable=none>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/var/index.wml
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 index.wml
  --- ossp-web/pkg/lib/var/index.wml	13 Sep 2004 07:59:30 -0000	1.11
  +++ ossp-web/pkg/lib/var/index.wml	31 Oct 2004 12:05:03 -0000	1.12
  @@ -51,8 +51,9 @@
   
   <pkg_status
       name="var" assign="rse"
  -    stable="1.1.1" stable_date="12-Sep-2004"
  +    stable="1.1.2" stable_date="31-Oct-2004"
       unstable="none" unstable_date="none"
  +	genesis="08-Mar-2002" 
   	done=100>
   
   <h2>Source</h2>
  @@ -62,7 +63,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/var/
       directory=$(FTP_ROOT_DIR)/pkg/lib/var/
       files="var-*.tar.gz" 
  -	stable="var-1.1.1.tar.gz" unstable="none">
  +	stable="var-1.1.2.tar.gz" unstable="none">
   
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Oct 31 20:12:52 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 217DB76589; Sun, 31 Oct 2004 20:12:52 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ ChangeLog devtool.conf
Message-Id: <20041031191252.217DB76589@mail.ossp.org>
Date: Sun, 31 Oct 2004 20:12:52 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Oct-2004 20:12:51
  Branch: HEAD                             Handle: 2004103119125000

  Modified files:
    ossp-pkg/cfg            ChangeLog devtool.conf

  Log:
    upgrade to libtool 1.5.10 and shtool 2.0.1

  Summary:
    Revision    Changes     Path
    1.12        +3  -2      ossp-pkg/cfg/ChangeLog
    1.18        +3  -3      ossp-pkg/cfg/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	17 Jul 2004 14:34:05 -0000	1.11
  +++ ossp-pkg/cfg/ChangeLog	31 Oct 2004 19:12:50 -0000	1.12
  @@ -8,7 +8,7 @@
   
     CHANGELOG
   
  - Changes between 0.9.3 and 0.9.4 (23-Apr-2003 to xx-Jul-2004):
  + Changes between 0.9.3 and 0.9.4 (23-Apr-2003 to xx-Nov-2004):
   
      *) Fixed warnings under GCC 3.4/3.5.
         [Ralf S. Engelschall <rse@engelschall.com>]
  @@ -16,7 +16,8 @@
      *) Adjust copyright messages for new year 2004.
         [Ralf S. Engelschall <rse@engelschall.com>]
   
  -   *) Upgraded build environment to GNU libtool 1.5.6 and GNU shtool 2.0.0
  +   *) Upgraded build environment to GNU libtool 1.5.10
  +      and GNU shtool 2.0.1
         [Ralf S. Engelschall <rse@engelschall.com>]
   
    Changes between 0.9.2 and 0.9.3 (10-Nov-2003 to 23-Apr-2004):
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 devtool.conf
  --- ossp-pkg/cfg/devtool.conf	17 Jul 2004 07:37:55 -0000	1.17
  +++ ossp-pkg/cfg/devtool.conf	31 Oct 2004 19:12:50 -0000	1.18
  @@ -29,9 +29,9 @@
   ##
   
   %autogen
  -    @autogen shtool   2.0.0 "2.0.*" echo fixperm install mkdir tarball version
  -    @autogen libtool  1.5.6 "1.5*"
  -    @autogen autoconf 2.59  "2.5[4-9]*"
  +    @autogen shtool   2.0.1  "2.0.*" echo fixperm install mkdir tarball version
  +    @autogen libtool  1.5.10 "1.5*"
  +    @autogen autoconf 2.59   "2.5[4-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .

From ossp-cvs-owner@ossp.org  Sun Oct 31 20:35:33 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4B65876589; Sun, 31 Oct 2004 20:35:33 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ ChangeLog configure.ac
Message-Id: <20041031193533.4B65876589@mail.ossp.org>
Date: Sun, 31 Oct 2004 20:35:33 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Oct-2004 20:35:32
  Branch: HEAD                             Handle: 2004103119353100

  Modified files:
    ossp-pkg/cfg            ChangeLog configure.ac

  Log:
    Upgrade to GNU bison 1.875d and GNU flex 2.5.31

  Summary:
    Revision    Changes     Path
    1.13        +3  -0      ossp-pkg/cfg/ChangeLog
    1.11        +2  -2      ossp-pkg/cfg/configure.ac
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	31 Oct 2004 19:12:50 -0000	1.12
  +++ ossp-pkg/cfg/ChangeLog	31 Oct 2004 19:35:31 -0000	1.13
  @@ -10,6 +10,9 @@
   
    Changes between 0.9.3 and 0.9.4 (23-Apr-2003 to xx-Nov-2004):
   
  +   *) Upgrade to GNU bison 1.875d and GNU flex 2.5.31
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
      *) Fixed warnings under GCC 3.4/3.5.
         [Ralf S. Engelschall <rse@engelschall.com>]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/configure.ac
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 configure.ac
  --- ossp-pkg/cfg/configure.ac	17 Jul 2004 07:37:55 -0000	1.10
  +++ ossp-pkg/cfg/configure.ac	31 Oct 2004 19:35:31 -0000	1.11
  @@ -41,8 +41,8 @@
   sinclude(libtool.m4)
   AC_PROG_LIBTOOL
   
  -AC_CHECK_BISON(BISON, 1.875, [1.[[8-9]][[0-9]]|1.[[8-9]][[0-9]][[0-9]]])
  -AC_CHECK_FLEX(FLEX, 2.5.10, [2.5.1[[0-9]]|2.5.[[2-9]][[0-9]]|2.[[6-9]].*])
  +AC_CHECK_BISON(BISON, 1.875d, [1.[[8-9]][[0-9]]|1.[[8-9]][[0-9]][[0-9]]])
  +AC_CHECK_FLEX(FLEX, 2.5.31, [2.5.1[[0-9]]|2.5.[[2-9]][[0-9]]|2.[[6-9]].*])
   
   sinclude(cfg.ac)
   CFG_CHECK_ALL
  @@ .

From ossp-cvs-owner@ossp.org  Sun Oct 31 20:37:37 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C5EF576589; Sun, 31 Oct 2004 20:37:36 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ README cfg_vers.c
Message-Id: <20041031193736.C5EF576589@mail.ossp.org>
Date: Sun, 31 Oct 2004 20:37:36 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Oct-2004 20:37:36
  Branch: HEAD                             Handle: 2004103119373600

  Modified files:
    ossp-pkg/cfg            README cfg_vers.c

  Log:
    bump version number

  Summary:
    Revision    Changes     Path
    1.10        +1  -1      ossp-pkg/cfg/README
    1.7         +9  -9      ossp-pkg/cfg/cfg_vers.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/README
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 README
  --- ossp-pkg/cfg/README	17 Jul 2004 07:37:55 -0000	1.9
  +++ ossp-pkg/cfg/README	31 Oct 2004 19:37:36 -0000	1.10
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \___|_|  \__, |
                                                |___/
     OSSP cfg - Configuration Parsing
  -  Version 0.9.3 (23-Apr-2004)
  +  Version 0.9.4 (31-Oct-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_vers.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 cfg_vers.c
  --- ossp-pkg/cfg/cfg_vers.c	23 Apr 2004 10:28:01 -0000	1.6
  +++ ossp-pkg/cfg/cfg_vers.c	31 Oct 2004 19:37:36 -0000	1.7
  @@ -8,7 +8,7 @@
   #ifndef _CFG_VERS_C_
   #define _CFG_VERS_C_
   
  -#define __CFG_VERSION 0x009203
  +#define __CFG_VERSION 0x009204
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _CFG_VERS_C_AS_HEADER_
   
   __cfg_version_t __cfg_version = {
  -    0x009203,
  -    "0.9.3",
  -    "0.9.3 (23-Apr-2004)",
  -    "This is OSSP cfg, Version 0.9.3 (23-Apr-2004)",
  -    "OSSP cfg 0.9.3 (23-Apr-2004)",
  -    "OSSP cfg/0.9.3",
  -    "@(#)OSSP cfg 0.9.3 (23-Apr-2004)",
  -    "$Id: cfg_vers.c,v 1.6 2004/04/23 10:28:01 thl Exp $"
  +    0x009204,
  +    "0.9.4",
  +    "0.9.4 (31-Oct-2004)",
  +    "This is OSSP cfg, Version 0.9.4 (31-Oct-2004)",
  +    "OSSP cfg 0.9.4 (31-Oct-2004)",
  +    "OSSP cfg/0.9.4",
  +    "@(#)OSSP cfg 0.9.4 (31-Oct-2004)",
  +    "$Id: cfg_vers.c,v 1.7 2004/10/31 19:37:36 rse Exp $"
   };
   
   #endif /* _CFG_VERS_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Sun Oct 31 20:38:04 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 92A087663B; Sun, 31 Oct 2004 20:38:04 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ cfg_vers.c
Message-Id: <20041031193804.92A087663B@mail.ossp.org>
Date: Sun, 31 Oct 2004 20:38:04 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Oct-2004 20:38:04
  Branch: HEAD                             Handle: 2004103119380300

  Modified files:
    ossp-pkg/cfg            cfg_vers.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.8         +0  -0      ossp-pkg/cfg/cfg_vers.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_vers.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 cfg_vers.c
  --- ossp-pkg/cfg/cfg_vers.c	31 Oct 2004 19:37:36 -0000	1.7
  +++ ossp-pkg/cfg/cfg_vers.c	31 Oct 2004 19:38:03 -0000	1.8
  @@ -39,7 +39,7 @@
       "OSSP cfg 0.9.4 (31-Oct-2004)",
       "OSSP cfg/0.9.4",
       "@(#)OSSP cfg 0.9.4 (31-Oct-2004)",
  -    "$Id: cfg_vers.c,v 1.7 2004/10/31 19:37:36 rse Exp $"
  +    "$Id: cfg_vers.c,v 1.8 2004/10/31 19:38:03 rse Exp $"
   };
   
   #endif /* _CFG_VERS_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Sun Oct 31 20:41:08 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2767376623; Sun, 31 Oct 2004 20:41:08 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/cfg/ index.wml oss...
Message-Id: <20041031194108.2767376623@mail.ossp.org>
Date: Sun, 31 Oct 2004 20:41:08 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   31-Oct-2004 20:41:07
  Branch: HEAD                             Handle: 2004103119410502

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/cfg    index.wml

  Log:
    release OSSP cfg 0.9.4

  Summary:
    Revision    Changes     Path
    1.104       +1  -0      ossp-web/new/news.txt
    1.10        +2  -2      ossp-web/pkg/lib/cfg/index.wml
    1.90        +1  -1      ossp-web/pkg/lib/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.103 -r1.104 news.txt
  --- ossp-web/new/news.txt	31 Oct 2004 12:05:00 -0000	1.103
  +++ ossp-web/new/news.txt	31 Oct 2004 19:41:05 -0000	1.104
  @@ -1,3 +1,4 @@
  +31-Oct-2004: Released L<OSSP cfg> 0.9.4
   31-Oct-2004: Released L<OSSP var> 1.1.2
   16-Oct-2004: Released L<OSSP uuid> 1.0.4
   15-Oct-2004: Released L<OSSP uuid> 1.0.3
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/cfg/index.wml
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 index.wml
  --- ossp-web/pkg/lib/cfg/index.wml	26 Apr 2004 13:21:17 -0000	1.9
  +++ ossp-web/pkg/lib/cfg/index.wml	31 Oct 2004 19:41:07 -0000	1.10
  @@ -36,7 +36,7 @@
   <pkg_status
       name="cfg" assign="rse"
       stable="none"    stable_date="none"
  -    unstable="0.9.3" unstable_date="23-Apr-2004"
  +    unstable="0.9.4" unstable_date="31-Oct-2004"
   	done=95>
   
   <h2>Source</h2>
  @@ -46,7 +46,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/cfg/
       directory=$(FTP_ROOT_DIR)/pkg/lib/cfg/
       files="cfg-*.tar.gz" 
  -	stable="none" unstable="cfg-0.9.3.tar.gz">
  +	stable="none" unstable="cfg-0.9.4.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.89 -r1.90 index.wml
  --- ossp-web/pkg/lib/index.wml	31 Oct 2004 12:05:02 -0000	1.89
  +++ ossp-web/pkg/lib/index.wml	31 Oct 2004 19:41:06 -0000	1.90
  @@ -54,7 +54,7 @@
   			done=95 stable=none unstable=0.9.2>
     <pkg_item name="cfg" longname="OSSP cfg" type="lib"
               desc="Configuration Parsing"
  -			done=95 stable=none unstable=0.9.3>
  +			done=95 stable=none unstable=0.9.4>
     <pkg_item name="act" longname="OSSP act" type="lib"
               desc="Abstract Container Types"
   			done=25 stable=none unstable=none>
  @@ .

From ossp-cvs-owner@ossp.org  Tue Nov  2 13:19:46 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D7A007657C; Tue,  2 Nov 2004 13:19:45 +0100 (CET)
From: "Herbert Schmid" <hms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/quos/ .cvsignore
Message-Id: <20041102121945.D7A007657C@mail.ossp.org>
Date: Tue,  2 Nov 2004 13:19:45 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Herbert Schmid
  Root:   /e/ossp/cvs                      Email:  hms@ossp.org
  Module: ossp-pkg                         Date:   02-Nov-2004 13:19:45
  Branch: HEAD                             Handle: 2004110212194500

  Modified files:
    ossp-pkg/quos           .cvsignore

  Log:
    *** empty log message ***

  Summary:
    Revision    Changes     Path
    1.3         +1  -0      ossp-pkg/quos/.cvsignore
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/.cvsignore
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 .cvsignore
  --- ossp-pkg/quos/.cvsignore	26 Oct 2004 16:57:19 -0000	1.2
  +++ ossp-pkg/quos/.cvsignore	2 Nov 2004 12:19:45 -0000	1.3
  @@ -1,3 +1,4 @@
   openpkg.db
   zarch
   zdoc
  +zquos.cgi
  @@ .

From ossp-cvs-owner@ossp.org  Tue Nov  2 13:20:17 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E0D83765B8; Tue,  2 Nov 2004 13:20:16 +0100 (CET)
From: "Herbert Schmid" <hms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/quos/ .cvsignore
Message-Id: <20041102122016.E0D83765B8@mail.ossp.org>
Date: Tue,  2 Nov 2004 13:20:16 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Herbert Schmid
  Root:   /e/ossp/cvs                      Email:  hms@ossp.org
  Module: ossp-pkg                         Date:   02-Nov-2004 13:20:16
  Branch: HEAD                             Handle: 2004110212201600

  Modified files:
    ossp-pkg/quos           .cvsignore

  Log:
    *** empty log message ***

  Summary:
    Revision    Changes     Path
    1.4         +0  -1      ossp-pkg/quos/.cvsignore
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/.cvsignore
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 .cvsignore
  --- ossp-pkg/quos/.cvsignore	2 Nov 2004 12:19:45 -0000	1.3
  +++ ossp-pkg/quos/.cvsignore	2 Nov 2004 12:20:16 -0000	1.4
  @@ -1,4 +1,3 @@
   openpkg.db
   zarch
   zdoc
  -zquos.cgi
  @@ .

From ossp-cvs-owner@ossp.org  Tue Nov  2 16:30:58 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B4EB37657C; Tue,  2 Nov 2004 16:30:57 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/quos/ quos.cgi quos.css
Message-Id: <20041102153057.B4EB37657C@mail.ossp.org>
Date: Tue,  2 Nov 2004 16:30:57 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Nov-2004 16:30:57
  Branch: HEAD                             Handle: 2004110215305500

  Modified files:
    ossp-pkg/quos           quos.cgi quos.css

  Log:
    add form to AST parsing functionality; add AST to C-Style formatting
    functionality; add form error feedback and status message rendering

  Summary:
    Revision    Changes     Path
    1.9         +145 -16    ossp-pkg/quos/quos.cgi
    1.6         +21 -0      ossp-pkg/quos/quos.css
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/quos.cgi
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 quos.cgi
  --- ossp-pkg/quos/quos.cgi	28 Oct 2004 15:37:43 -0000	1.8
  +++ ossp-pkg/quos/quos.cgi	2 Nov 2004 15:30:55 -0000	1.9
  @@ -30,6 +30,7 @@
   use CGI;
   use String::Divert;
   use IO::File;
  +use Data::Dumper;
   
   #   internal handling of fatal errors
   BEGIN {
  @@ -139,6 +140,122 @@
   #   FIXME
   
   ##
  +##  Query Processing
  +##
  +
  +my $nr_cols = ($cgi->param('nr_cols') || $cfg->{-cols});
  +my $nr_rows = ($cgi->param('nr_rows') || $cfg->{-rows});
  +
  +my $err = {
  +    -msg  => '',
  +    -form => {},
  +};
  +
  +&validate_form($cgi, $err, $nr_cols, $nr_rows);
  +my $expr = &parse_form($cgi, $err, undef, $nr_cols-1, 0, 0, $nr_rows-1, 0);
  +
  +sub validate_form {
  +    my ($cgi, $err, $nr_cols, $nr_rows) = @_;
  +    for (my $y = 1; $y <= $nr_rows-1; $y++) {
  +        my $n = 0;
  +        my $fn = $cgi->param(sprintf("fn%02d", $y));
  +        my $fo = $cgi->param(sprintf("fo%02d", $y));
  +        if (defined($fn) and defined($fo)) {
  +            if (($fn ne '' and $fo eq '') or ($fn eq '' and $fo ne '')) {
  +                $err->{-msg} .= "form line ".($y+1).": both field name and operator required\n";
  +                $err->{-form}->{sprintf("fn%02d", $y)}++;
  +                $err->{-form}->{sprintf("fo%02d", $y)}++;
  +                $err->{-form}->{sprintf("fv%02d", $y)}++;
  +            }
  +            if ($fn ne '' or $fo ne '') {
  +                for (my $x = $nr_cols-1; $x >= 0; $x--) {
  +                    my $op = $cgi->param(sprintf("lo%02d%02d", $x, $y));
  +                    if (defined($op) and $op ne ' ') {
  +                        $n++;
  +                        last;
  +                    }
  +                }
  +                if ($n == 0) {
  +                    $err->{-msg} .= "form line ".($y+1).": no operator for sub-expression found\n";
  +                    $err->{-form}->{sprintf("fn%02d", $y)}++;
  +                    $err->{-form}->{sprintf("fo%02d", $y)}++;
  +                    $err->{-form}->{sprintf("fv%02d", $y)}++;
  +                }
  +            }
  +        }
  +    }
  +}
  +
  +sub parse_form {
  +    my ($cgi, $err, $erase, $tlx, $tly, $brx, $bry, $depth) = @_;
  +    $erase = {} if (not defined($erase));
  +    my $expr = undef;
  +    if ($tlx < 0) {
  +        #   field operator area
  +        my $fn = $cgi->param(sprintf("fn%02d", $tly));
  +        my $fo = $cgi->param(sprintf("fo%02d", $tly));
  +        my $fv = $cgi->param(sprintf("fv%02d", $tly));
  +        if (defined($fn) and defined($fo) and $fn ne '' and $fo ne '') {
  +            $expr = [ $fo, $fn, $fv ];
  +        }
  +    }
  +    else {
  +        #   logical operator area
  +        LOOP: for (my $x = $tlx; $x >= $brx; $x--) {
  +            for (my $y = $tly; $y <= $bry; $y++) {
  +                my $op = $cgi->param(sprintf("lo%02d%02d", $x, $y));
  +                if (defined($op) and $op ne ' ' and not $erase->{$x."/".$y}) {
  +                    $erase->{$x."/".$y} = 1;
  +                    if ($op eq '!') {
  +                        my $expr1 = &parse_form($cgi, $erase, $x, $y, $brx, $bry, $depth+1);
  +                        $expr = [ $op, $expr1 ];
  +                    }
  +                    else {
  +                        if ($tly > $y-1) {
  +                            $err->{-msg} .= "form line ".($y+1).", column ".($nr_cols-$x).": unexpected binary operator\n";
  +                            $err->{-form}->{sprintf("lo%02d%02d", $x, $y)}++;
  +                        }
  +                        my $expr1 = &parse_form($cgi, $err, $erase, $x-1, $tly, $brx, $y-1, $depth+1);
  +                        my $expr2 = &parse_form($cgi, $err, $erase, $x, $y, $brx, $bry, $depth+1);
  +                        if (not defined($expr1)) {
  +                            $err->{-msg} .= "form line ".($y+1).", column ".($nr_cols-$x).": no expressions LHS found\n";
  +                            $err->{-form}->{sprintf("lo%02d%02d", $x, $y)}++;
  +                        }
  +                        if (not defined($expr2)) {
  +                            $err->{-msg} .= "form line ".($y+1).", column ".($nr_cols-$x).": no expressions RHS found\n";
  +                            $err->{-form}->{sprintf("lo%02d%02d", $x, $y)}++;
  +                        }
  +                        $expr = [ $op, $expr1, $expr2 ];
  +                    }
  +                    last LOOP;
  +                }
  +            }
  +        }
  +        if (not defined($expr)) {
  +            $expr = &parse_form($cgi, $err, $erase, $brx-1, $tly, $brx-1, $tly, $depth+1);
  +        }
  +    }
  +    return $expr;
  +}
  +
  +my $cstyle = &expr2cstyle($expr);
  +sub expr2cstyle {
  +    my ($expr) = @_;
  +    my $op    = $expr->[0];
  +    my $cstyle;
  +    if ($op eq '!') {
  +        my $expr1 = ref($expr->[1]) ? &expr2cstyle($expr->[1]) : $expr->[1];
  +        $cstyle = sprintf("(%s %s)", $op, $expr1);
  +    }
  +    else {
  +        my $expr1 = ref($expr->[1]) ? &expr2cstyle($expr->[1]) : $expr->[1];
  +        my $expr2 = ref($expr->[2]) ? &expr2cstyle($expr->[2]) : $expr->[2];
  +        $cstyle = sprintf("(%s %s %s)", $expr1, $op, $expr2);
  +    }
  +    return $cstyle;
  +}
  +
  +##
   ##  Generate Canvas
   ##
   
  @@ -205,9 +322,6 @@
   
   $html >> "query";
   
  -my $nr_cols = ($cgi->param('nr_cols') || $cfg->{-cols});
  -my $nr_rows = ($cgi->param('nr_rows') || $cfg->{-rows});
  -
   #   render outer form canvas
   $html .= $cgi->start_form;
   $html .= "<table>\n";
  @@ -226,13 +340,18 @@
   $html .= "      "; $html->fold("query-form-define");
   $html .= "    </td>\n";
   $html .= "  </tr>\n";
  +$html .= "  <tr>\n";
  +$html .= "    <td class=\"status\">\n";
  +$html .= "      "; $html->fold("query-form-status");
  +$html .= "    </td>\n";
  +$html .= "  </tr>\n";
   $html .= "</table>\n";
   $html .= $cgi->end_form;
   
   #   render expression part
   $html >> "query-form-expr";
   $html .= "<table>\n";
  -for (my $i = 0; $i < $nr_cols; $i++) {
  +for (my $i = 0; $i < $nr_rows; $i++) {
       $html .= "<tr>\n";
       for (my $j = $nr_cols - 1; $j >= 0; $j--) {
           $html .= "  <td>\n";
  @@ -240,9 +359,9 @@
           $html .= "    " . $cgi->popup_menu(
               -id       => $id,
               -name     => $id,
  -            -values   => [' ', '(', ')', '!', '&', '|'],
  +            -values   => [' ', '!', '&', '|'],
               -default  => ' ',
  -            -class    => 'default',
  +            -class    => ($err->{-form}->{$id} ? 'error' : 'default'),
               -onChange => "return colorize(this.form.$id, ' ');",
               -onBlur   => "return colorize(this.form.$id, ' ');",
           ) . "\n";
  @@ -255,7 +374,7 @@
           -name     => $id,
           -values   => ['', 'name', 'description', 'foo'], # FIXME
           -default  => '', # FIXME
  -        -class    => 'default',
  +        -class    => ($err->{-form}->{$id} ? 'error' : 'default'),
           -onChange => "return colorize(this.form.$id, '');",
           -onBlur   => "return colorize(this.form.$id, '');",
       ) . "\n";
  @@ -267,7 +386,7 @@
           -name     => $id,
           -values   => ['', '==', '!=', '<', '<=', '>', '>=', '=~', '!~'],
           -default  => '',
  -        -class    => 'default',
  +        -class    => ($err->{-form}->{$id} ? 'error' : 'default'),
           -onChange => "return colorize(this.form.$id, '');",
           -onBlur   => "return colorize(this.form.$id, '');",
       ). "\n";
  @@ -278,7 +397,7 @@
           -id         => $id,
           -name       => $id,
           -default    => '',
  -        -class      => 'default',
  +        -class    => ($err->{-form}->{$id} ? 'error' : 'default'),
           -onChange   => "return colorize(this.form.$id, '');",
           -onBlur     => "return colorize(this.form.$id, '');",
           -onMouseOut => "return colorize(this.form.$id, '');",
  @@ -384,6 +503,15 @@
   $html .= "</table>\n";
   $html << 1;
   
  +#   render status part
  +if ($err->{-msg} ne '') {
  +    $html >> "query-form-status";
  +    my $msg = $err->{-msg};
  +    $msg =~ s/\n/<br>/sg;
  +    $html .= "<span class=\"msg\">$msg</span>\n";
  +    $html << 1;
  +}
  +
   $html << 1;
   
   ##
  @@ -399,13 +527,14 @@
   ##
   
   $html >> "result";
  -$html .= "FIXME<br>";
  -foreach my $key ($cgi->param) {
  -    $html .= "<strong>$key</strong> -&gt; ";
  -    my @values = $cgi->param($key);
  -    $html .= join(", ", @values) . "<br>\n";
  -}
  -$html << 1;
  +#foreach my $key ($cgi->param) {
  +#    $html .= "<strong>$key</strong> -&gt; ";
  +#    my @values = $cgi->param($key);
  +#    $html .= join(", ", @values) . "<br>\n";
  +#}
  +#$html << 1;
  +$html .= "\$expr:\n" . Data::Dumper->Dump([$expr]). "<p>";
  +$html .= "\$cstyle:\n". $cstyle . "<br>";
   
   ##
   ##  Generate HTTP Reponse
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/quos.css
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 quos.css
  --- ossp-pkg/quos/quos.css	28 Oct 2004 15:40:19 -0000	1.5
  +++ ossp-pkg/quos/quos.css	2 Nov 2004 15:30:55 -0000	1.6
  @@ -88,6 +88,11 @@
   .quos .query .expr INPUT.changed {
       background:          #ffffff;
   }
  +.quos .query .expr INPUT.error {
  +    border:              2px solid #cc3333;
  +    background:          #cc3333;
  +    color:               #ffffff;
  +}
   .quos .query .expr SELECT {
       background:          inherit;
       border-top:          1px solid #c0c0c0;
  @@ -101,6 +106,11 @@
   .quos .query .expr SELECT.changed {
       background:          #ffffff;
   }
  +.quos .query .expr SELECT.error {
  +    border:              2px solid #cc3333;
  +    background:          #cc3333;
  +    color:               #ffffff;
  +}
   .quos .query .expr TABLE {
       border-collapse: collapse;
       border-spacing: 0px;
  @@ -152,3 +162,14 @@
   .quos .query .define INPUT.nameset {
       width: 100%;
   }
  +
  +.quos .query .status TABLE {
  +    width: 100%;
  +    border-collapse: collapse;
  +    border-spacing: 0px;
  +}
  +.quos .query .status .msg {
  +    color: #cc3333;
  +    font-weight: bold;
  +}
  +
  @@ .

From ossp-cvs-owner@ossp.org  Tue Nov  2 16:48:26 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 502157657C; Tue,  2 Nov 2004 16:48:26 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/quos/ TODO
Message-Id: <20041102154826.502157657C@mail.ossp.org>
Date: Tue,  2 Nov 2004 16:48:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Nov-2004 16:48:25
  Branch: HEAD                             Handle: 2004110215482400

  Modified files:
    ossp-pkg/quos           TODO

  Log:
    remember what we have to do on config parsing

  Summary:
    Revision    Changes     Path
    1.9         +36 -0      ossp-pkg/quos/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/TODO
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 TODO
  --- ossp-pkg/quos/TODO	27 Oct 2004 09:20:53 -0000	1.8
  +++ ossp-pkg/quos/TODO	2 Nov 2004 15:48:24 -0000	1.9
  @@ -132,3 +132,39 @@
   
       * creation of web formular (render query)
           sub_render_form (cgi-Object | expression, row, column
  +
  +- Parsing:
  +
  +  OSSP shiela (with tricks)
  +  OSSP ac (uses Parse::RecDescent)
  +  Parse::RecDescent (full featured recursive-descend parsing)
  +
  +  GENERAL:
  +  config             ::= directive(s)
  +  directive          ::= word arg ";"
  +  arg                ::= "{" config "}"
  +                       | word
  +  word               ::= m/"[^"]*"/
  +                       | m/'[^']*'/
  +                       | m/[^\s+;]+/
  +
  +  SPECIAL:
  +  config             ::= directive(s)
  +  directive          ::= options
  +                       | queries
  +                       | views
  +  options            ::= "option" "{" options-directive(s) "}" ";"
  +  options-directive  ::= webpage 
  +                       | database
  +  webpage            ::= "webpage" word word ";"
  +  database           ::= "database" "{" database-directive(s) "}" ";"
  +  database-directive ::= ...
  +  ...
  +  queries            ::= group(s)
  +  ...
  +  views              ::= view(s)
  +  ...
  +  word               ::= m/"[^"]*"/
  +                       | m/'[^']*'/
  +                       | m/[^\s+;]+/
  +
  @@ .

From ossp-cvs-owner@ossp.org  Tue Nov  2 17:05:34 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 476D7765CB; Tue,  2 Nov 2004 17:05:34 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/quos/ TODO
Message-Id: <20041102160534.476D7765CB@mail.ossp.org>
Date: Tue,  2 Nov 2004 17:05:34 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Nov-2004 17:05:34
  Branch: HEAD                             Handle: 2004110216053300

  Modified files:
    ossp-pkg/quos           TODO

  Log:
    remember how to parse the RDF (the non-flexible but sufficient way)

  Summary:
    Revision    Changes     Path
    1.10        +27 -1      ossp-pkg/quos/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/TODO
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 TODO
  --- ossp-pkg/quos/TODO	2 Nov 2004 15:48:24 -0000	1.9
  +++ ossp-pkg/quos/TODO	2 Nov 2004 16:05:33 -0000	1.10
  @@ -133,7 +133,7 @@
       * creation of web formular (render query)
           sub_render_form (cgi-Object | expression, row, column
   
  -- Parsing:
  +- Parsing CFG:
   
     OSSP shiela (with tricks)
     OSSP ac (uses Parse::RecDescent)
  @@ -168,3 +168,29 @@
                          | m/'[^']*'/
                          | m/[^\s+;]+/
   
  +- Parsing RDF:
  +
  +  my $str = ...; # string representation
  +  my $rdf = {};  # AST    representation
  +
  +  $str =~ s/<Repository([^>]+)>(.+?)<\/Repository>/&do_repository($rdf, $1, $2)/sge;
  +  sub do_repository {
  +      my ($rdf, $attr, $str) = @_;
  +      my ($name) = ($attr =~ m/rdf:resource="([^"]+)"/s);
  +      $rdf->{$name} = {};
  +      $str =~ s/<rdf:Description([^>]+)>(.+?)<\/rdf:Description>/&do_destription($rdf->{$name}, $1, $2)/sge;
  +      sub do_description {
  +          my ($rdf, $attr, $str) = @_;
  +          $rdf->{...} = ...;
  +      }
  +  }
  +
  +  1. geht nur, wenn die Sprache keine rekursiven Elemente enthält, d.h. ein
  +     Element kann nicht in sich selber (in beliebiger Tiefe) vorkommen
  +     (Hinweis: Für Compilerbauer uninteressant)
  +
  +  2. Blockstruktur der Sprache wird direkt Substitution+Funktionsaufruf umgesetzt
  +
  +  3. Auf jeder Ebene wird die bereits erkannte Information in einer internen
  +     Datenstruktur aufgesammelt ($rdf)
  +
  @@ .

From ossp-cvs-owner@ossp.org  Tue Nov  2 17:10:02 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F0369765CA; Tue,  2 Nov 2004 17:10:01 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/quos/ TODO
Message-Id: <20041102161001.F0369765CA@mail.ossp.org>
Date: Tue,  2 Nov 2004 17:10:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Nov-2004 17:10:01
  Branch: HEAD                             Handle: 2004110216100100

  Modified files:
    ossp-pkg/quos           TODO

  Log:
    remember next steps

  Summary:
    Revision    Changes     Path
    1.11        +11 -0      ossp-pkg/quos/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/TODO
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 TODO
  --- ossp-pkg/quos/TODO	2 Nov 2004 16:05:33 -0000	1.10
  +++ ossp-pkg/quos/TODO	2 Nov 2004 16:10:01 -0000	1.11
  @@ -194,3 +194,14 @@
     3. Auf jeder Ebene wird die bereits erkannte Information in einer internen
        Datenstruktur aufgesammelt ($rdf)
   
  +- Next Steps:
  +
  +  - openpkg-rdf2sql.pl:
  +    . rdf to AST parsing (subst+func)  (1)
  +    . AST to SQL mapping (INSERT...)   (2)
  +
  +  - quos.cgi:
  +    . AST to SQL mapping (WHERE....)   (3)
  +    . view part
  +    . result part
  +
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov  3 09:06:46 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 56392764F9; Wed,  3 Nov 2004 09:06:46 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/string-divert/ ChangeLog Divert.pm
Message-Id: <20041103080646.56392764F9@mail.ossp.org>
Date: Wed,  3 Nov 2004 09:06:46 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Nov-2004 09:06:45
  Branch: HEAD                             Handle: 2004110308064500

  Modified files:
    ossp-pkg/string-divert  ChangeLog Divert.pm

  Log:
    use empty EXPORT_OK because we have an OO style API only

  Summary:
    Revision    Changes     Path
    1.5         +2  -0      ossp-pkg/string-divert/ChangeLog
    1.7         +2  -7      ossp-pkg/string-divert/Divert.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ChangeLog
  --- ossp-pkg/string-divert/ChangeLog	22 Sep 2003 12:58:25 -0000	1.4
  +++ ossp-pkg/string-divert/ChangeLog	3 Nov 2004 08:06:45 -0000	1.5
  @@ -2,6 +2,8 @@
     ChangeLog
     =========
   
  +  0.94 (03-Nov-2004)
  +      o use empty EXPORT_OK because we have an OO style API only
     0.93 (22-Sep-2003)
         o fix obj->folder(format, pattern) implementation
     0.92 (29-Apr-2003)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/Divert.pm
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 Divert.pm
  --- ossp-pkg/string-divert/Divert.pm	22 Sep 2003 12:58:25 -0000	1.6
  +++ ossp-pkg/string-divert/Divert.pm	3 Nov 2004 08:06:45 -0000	1.7
  @@ -36,15 +36,10 @@
   
   require Exporter;
   
  -our $VERSION   = '0.93';
  +our $VERSION   = '0.94';
   
   our @ISA       = qw(Exporter);
  -our @EXPORT_OK = qw(new destroy DESTROY
  -                    name overwrite storage
  -                    assign append string bool
  -                    fold unfold folding folder
  -                    divert undivert diversion
  -                    overload);
  +our @EXPORT_OK = qw();
   
   #   object construction
   sub new ($;$) {
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov  3 09:10:01 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4498C764F9; Wed,  3 Nov 2004 09:10:01 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/string-divert/ ChangeLog Divert.pm
Message-Id: <20041103081001.4498C764F9@mail.ossp.org>
Date: Wed,  3 Nov 2004 09:10:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Nov-2004 09:10:01
  Branch: HEAD                             Handle: 2004110308100000

  Modified files:
    ossp-pkg/string-divert  ChangeLog Divert.pm

  Log:
    add default empty EXPORT array

  Summary:
    Revision    Changes     Path
    1.6         +1  -0      ossp-pkg/string-divert/ChangeLog
    1.8         +2  -0      ossp-pkg/string-divert/Divert.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ChangeLog
  --- ossp-pkg/string-divert/ChangeLog	3 Nov 2004 08:06:45 -0000	1.5
  +++ ossp-pkg/string-divert/ChangeLog	3 Nov 2004 08:10:00 -0000	1.6
  @@ -4,6 +4,7 @@
   
     0.94 (03-Nov-2004)
         o use empty EXPORT_OK because we have an OO style API only
  +      o add default empty EXPORT array
     0.93 (22-Sep-2003)
         o fix obj->folder(format, pattern) implementation
     0.92 (29-Apr-2003)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/Divert.pm
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 Divert.pm
  --- ossp-pkg/string-divert/Divert.pm	3 Nov 2004 08:06:45 -0000	1.7
  +++ ossp-pkg/string-divert/Divert.pm	3 Nov 2004 08:10:00 -0000	1.8
  @@ -39,6 +39,7 @@
   our $VERSION   = '0.94';
   
   our @ISA       = qw(Exporter);
  +our @EXPORT    = qw();
   our @EXPORT_OK = qw();
   
   #   object construction
  @@ -436,6 +437,7 @@
   package String::Divert::__OVERLOAD__;
   
   our @ISA       = qw(Exporter String::Divert);
  +our @EXPORT    = qw();
   our @EXPORT_OK = qw();
   
   #   define operator overloading
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov  3 09:11:19 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DFB75764F9; Wed,  3 Nov 2004 09:11:18 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/string-divert/ Divert.pm Divert.pod Makefile.PL t...
Message-Id: <20041103081118.DFB75764F9@mail.ossp.org>
Date: Wed,  3 Nov 2004 09:11:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Nov-2004 09:11:18
  Branch: HEAD                             Handle: 2004110308111800

  Modified files:
    ossp-pkg/string-divert  Divert.pm Divert.pod Makefile.PL test.pl

  Log:
    include year 2004 in Copyright

  Summary:
    Revision    Changes     Path
    1.9         +1  -1      ossp-pkg/string-divert/Divert.pm
    1.4         +1  -1      ossp-pkg/string-divert/Divert.pod
    1.3         +1  -1      ossp-pkg/string-divert/Makefile.PL
    1.4         +1  -1      ossp-pkg/string-divert/test.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/Divert.pm
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 Divert.pm
  --- ossp-pkg/string-divert/Divert.pm	3 Nov 2004 08:10:00 -0000	1.8
  +++ ossp-pkg/string-divert/Divert.pm	3 Nov 2004 08:11:18 -0000	1.9
  @@ -1,6 +1,6 @@
   ##
   ##  String::Divert - String Object supporting Folding and Diversion
  -##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of String::Divert, a Perl module providing
   ##  a string object supporting folding and diversion.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/Divert.pod
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 Divert.pod
  --- ossp-pkg/string-divert/Divert.pod	29 May 2003 18:43:50 -0000	1.3
  +++ ossp-pkg/string-divert/Divert.pod	3 Nov 2004 08:11:18 -0000	1.4
  @@ -1,6 +1,6 @@
   ##
   ##  String::Divert - String Object supporting Folding and Diversion
  -##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of String::Divert, a Perl module providing
   ##  a string object supporting folding and diversion.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/Makefile.PL
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 Makefile.PL
  --- ossp-pkg/string-divert/Makefile.PL	23 May 2003 11:09:57 -0000	1.2
  +++ ossp-pkg/string-divert/Makefile.PL	3 Nov 2004 08:11:18 -0000	1.3
  @@ -1,6 +1,6 @@
   ##
   ##  String::Divert - String Object supporting Folding and Diversion
  -##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of String::Divert, a Perl module providing
   ##  a string object supporting folding and diversion.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/test.pl
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 test.pl
  --- ossp-pkg/string-divert/test.pl	22 Sep 2003 12:58:25 -0000	1.3
  +++ ossp-pkg/string-divert/test.pl	3 Nov 2004 08:11:18 -0000	1.4
  @@ -1,6 +1,6 @@
   ##
   ##  String::Divert - String Object supporting Folding and Diversion
  -##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of String::Divert, a Perl module providing
   ##  a string object supporting folding and diversion.
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov  3 15:52:11 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 481B676638; Wed,  3 Nov 2004 15:52:11 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog ossp-pkg/uuid/perl/ MANIFEST Make...
Message-Id: <20041103145211.481B676638@mail.ossp.org>
Date: Wed,  3 Nov 2004 15:52:11 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Nov-2004 15:52:10
  Branch: HEAD                             Handle: 2004110314520802

  Added files:
    ossp-pkg/uuid/perl      MANIFEST Makefile.PL uuid.pm uuid.pod uuid.tm
                            uuid.ts uuid.xs
  Modified files:
    ossp-pkg/uuid           ChangeLog

  Log:
    Add Perl language binding providing both a C-style and OO-style API.

  Summary:
    Revision    Changes     Path
    1.58        +3  -2      ossp-pkg/uuid/ChangeLog
    1.1         +8  -0      ossp-pkg/uuid/perl/MANIFEST
    1.1         +53 -0      ossp-pkg/uuid/perl/Makefile.PL
    1.1         +246 -0     ossp-pkg/uuid/perl/uuid.pm
    1.1         +174 -0     ossp-pkg/uuid/perl/uuid.pod
    1.1         +39 -0      ossp-pkg/uuid/perl/uuid.tm
    1.1         +144 -0     ossp-pkg/uuid/perl/uuid.ts
    1.1         +231 -0     ossp-pkg/uuid/perl/uuid.xs
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.57 -r1.58 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	31 Oct 2004 11:58:47 -0000	1.57
  +++ ossp-pkg/uuid/ChangeLog	3 Nov 2004 14:52:08 -0000	1.58
  @@ -11,9 +11,10 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 1.0.4 and 1.0.5 (16-Oct-2004 to 31-Oct-2004)
  +  Changes between 1.0.4 and 1.1.0 (16-Oct-2004 to xx-Nov-2004)
   
  -   o ...
  +   o Add Perl language binding providing both a C-style and OO-style API.
  +     [Ralf S. Engelschall]
   
     Changes between 1.0.3 and 1.0.4 (15-Oct-2004 to 16-Oct-2004)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/MANIFEST
  ============================================================================
  $ cvs diff -u -r0 -r1.1 MANIFEST
  --- /dev/null	2004-11-03 15:52:10 +0100
  +++ MANIFEST	2004-11-03 15:52:10 +0100
  @@ -0,0 +1,8 @@
  +MANIFEST
  +Makefile.PL
  +uuid.xs
  +uuid.tm
  +uuid.pm
  +uuid.pod
  +uuid.ts
  +META.yml                                 Module meta-data (added by MakeMaker)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/Makefile.PL
  ============================================================================
  $ cvs diff -u -r0 -r1.1 Makefile.PL
  --- /dev/null	2004-11-03 15:52:10 +0100
  +++ Makefile.PL	2004-11-03 15:52:10 +0100
  @@ -0,0 +1,53 @@
  +##
  +##  OSSP uuid - Universally Unique Identifier
  +##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP uuid, a library for the generation
  +##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  Makefile.PL: Perl MakeMaker build source procedure
  +##
  +
  +use 5.008;
  +use Config;
  +use ExtUtils::MakeMaker;
  +
  +WriteMakefile(
  +    NAME              => 'OSSP::uuid',
  +    VERSION_FROM      => 'uuid.pm',
  +    ABSTRACT_FROM     => 'uuid.pod',
  +    AUTHOR            => 'Ralf S. Engelschall <rse@engelschall.com>',
  +    PREREQ_PM         => {},
  +    LIBS              => [ '-L../.libs -luuid' ],
  +    DEFINE            => '',
  +    INC               => '-I. -I..',
  +    PM                => { 'uuid.pm'  => '$(INST_LIBDIR)/uuid.pm',
  +                           'uuid.pod' => '$(INST_LIBDIR)/uuid.pod' },
  +	TYPEMAPS          => [ 'uuid.tm' ],
  +    test              => { TESTS => 'uuid.ts' },
  +    #    cruel hack to workaround the conflict between OSSP uuid's
  +    #    uuid_create() function and one from FreeBSD's libc
  +    ((   "$Config{'osname'}$Config{'osvers'}" =~ m/^freebsd5\./
  +      and $Config{'ld'} =~ m/cc$/ and -f "/usr/include/uuid.h") ?
  +      ( LDDLFLAGS => $Config{'lddlflags'} . ' -Wl,-Bsymbolic') : ())
  +);
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.pm
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid.pm
  --- /dev/null	2004-11-03 15:52:10 +0100
  +++ uuid.pm	2004-11-03 15:52:10 +0100
  @@ -0,0 +1,246 @@
  +##
  +##  OSSP uuid - Universally Unique Identifier
  +##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP uuid, a library for the generation
  +##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  uuid.pm: Perl Binding (Perl part)
  +##
  +
  +package OSSP::uuid;
  +
  +use 5.008;
  +use strict;
  +use warnings;
  +use Carp;
  +use XSLoader;
  +use Exporter;
  +
  +##
  +##  API Definition
  +##
  +
  +#   API version
  +our $VERSION = do { my @v = ('1.0.4' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
  +
  +#   API inheritance
  +our @ISA = qw(Exporter);
  +
  +#   API symbols
  +my $symbols = {
  +    'const' => [qw(
  +        UUID_VERSION
  +        UUID_LEN_BIN
  +        UUID_LEN_STR
  +        UUID_RC_OK
  +        UUID_RC_ARG
  +        UUID_RC_MEM
  +        UUID_RC_SYS
  +        UUID_RC_INT
  +        UUID_RC_IMP
  +        UUID_MAKE_V1
  +        UUID_MAKE_V3
  +        UUID_MAKE_V4
  +        UUID_MAKE_MC
  +        UUID_FMT_BIN
  +        UUID_FMT_STR
  +        UUID_FMT_TXT
  +    )],
  +    'func' => [qw(
  +        uuid_create
  +        uuid_destroy
  +        uuid_load
  +        uuid_make
  +        uuid_isnil
  +        uuid_compare
  +        uuid_import
  +        uuid_export
  +        uuid_error
  +        uuid_version
  +    )]
  +};
  +
  +#   API symbol exportation
  +our %EXPORT_TAGS = (
  +    'all'   => [ @{$symbols->{'const'}}, @{$symbols->{'func'}} ],
  +    'const' => [ @{$symbols->{'const'}} ],
  +    'func'  => [ @{$symbols->{'func'}}  ]
  +);
  +our @EXPORT_OK = @{$EXPORT_TAGS{'all'}};
  +our @EXPORT    = ();
  +
  +##
  +##  High-Level Perl Module OO-style API
  +##  (just an OO wrapper around the C-style API)
  +##
  +
  +#   constructor
  +sub new {
  +    my $proto = shift;
  +    my $class = ref($proto) || $proto;
  +    my $self = {};
  +    bless ($self, $class);
  +    $self->{-uuid} = undef;
  +    $self->{-rc}   = $self->UUID_RC_OK;
  +    my $rc = uuid_create($self->{-uuid});
  +    if ($rc != $self->UUID_RC_OK) {
  +        croak(sprintf("OSSP::uuid::new: uuid_create: %s (%d)", uuid_error($rc), $rc));
  +        return undef;
  +    }
  +    return $self;
  +}
  +
  +#   destructor
  +sub DESTROY ($) {
  +    my ($self) = @_;
  +    $self->{-rc} = uuid_destroy($self->{-uuid}) if (defined($self->{-uuid}));
  +    if ($self->{-rc} != $self->UUID_RC_OK) {
  +        carp(sprintf("OSSP::uuid::DESTROY: uuid_destroy: %s (%d)", uuid_error($self->{-rc}), $self->{-rc}));
  +        return;
  +    }
  +    $self->{-uuid} = undef;
  +    $self->{-rc}   = undef;
  +    return;
  +}
  +
  +sub load ($$) {
  +    my ($self, $name) = @_;
  +    $self->{-rc} = uuid_load($self->{-uuid}, $name);
  +    return ($self->{-rc} == $self->UUID_RC_OK);
  +}
  +
  +sub make ($$;@) {
  +    my ($self, $mode, @valist) = @_;
  +    my $mode_code = 0;
  +    foreach my $spec (split(/,/, $mode)) {
  +        if    ($spec eq 'v1') { $mode_code |= $self->UUID_MAKE_V1; }
  +        elsif ($spec eq 'v3') { $mode_code |= $self->UUID_MAKE_V3; }
  +        elsif ($spec eq 'v4') { $mode_code |= $self->UUID_MAKE_V4; }
  +        elsif ($spec eq 'mc') { $mode_code |= $self->UUID_MAKE_MC; }
  +        else  { croak("invalid mode specification \"$spec\""); }
  +    }
  +    if ($mode_code & $self->UUID_MAKE_V3) {
  +        if (not (ref($valist[0]) and $valist[0]->isa("OSSP::uuid"))) {
  +            croak("UUID_MAKE_V3 requires namespace argument to be OSSP::uuid object");
  +        }
  +        my $ns   = $valist[0]->{-uuid};
  +        my $name = $valist[1];
  +        $self->{-rc} = uuid_make($self->{-uuid}, $mode_code, $ns, $name);
  +    }
  +    else {
  +        $self->{-rc} = uuid_make($self->{-uuid}, $mode_code);
  +    }
  +    return ($self->{-rc} == $self->UUID_RC_OK);
  +}
  +
  +sub isnil ($) {
  +    my ($self) = @_;
  +    my $result;
  +    $self->{-rc} = uuid_isnil($self->{-uuid}, $result);
  +    return ($self->{-rc} == $self->UUID_RC_OK ? $result : undef);
  +}
  +
  +sub compare ($$) {
  +    my ($self, $other) = @_;
  +    my $result = 0;
  +    if (not (ref($other) and $other->isa("OSSP::uuid"))) {
  +        croak("argument has to an OSSP::uuid object");
  +    }
  +    $self->{-rc} = uuid_compare($self->{-uuid}, $other->{-uuid}, $result);
  +    return ($self->{-rc} == $self->UUID_RC_OK ? $result : undef);
  +}
  +
  +sub import {
  +    if (defined($_[0]) and ref($_[0]) =~ m/^OSSP::uuid/) {
  +        #   the regular OSSP::uuid "import" method
  +        croak("import method expects 3 or 4 arguments") if (@_ < 3 or @_ > 4);
  +        my ($self, $fmt, $data_ptr, $data_len) = @_;
  +        if    ($fmt eq 'bin') { $fmt = $self->UUID_FMT_BIN; }
  +        elsif ($fmt eq 'str') { $fmt = $self->UUID_FMT_STR; }
  +        elsif ($fmt eq 'txt') { $fmt = $self->UUID_FMT_TXT; }
  +        else  { croak("invalid format \"$fmt\""); }
  +        $data_len ||= length($data_ptr); # functional redudant, but Perl dislikes undef value here
  +        $self->{-rc} = uuid_import($self->{-uuid}, $fmt, $data_ptr, $data_len);
  +        return ($self->{-rc} == $self->UUID_RC_OK);
  +    }
  +    else {
  +        #   the special Perl "import" method
  +        #   (usually inherited from the Exporter)
  +        no strict "refs";
  +        return OSSP::uuid->export_to_level(1, @_);
  +    }
  +}
  +
  +sub export {
  +    if (defined($_[0]) and ref($_[0]) =~ m/^OSSP::uuid/) {
  +        #   the regular OSSP::uuid "export" method
  +        croak("export method expects 2 arguments") if (@_ != 2);
  +        my ($self, $fmt) = @_;
  +        my $data_ptr;
  +        if    ($fmt eq 'bin') { $fmt = $self->UUID_FMT_BIN; }
  +        elsif ($fmt eq 'str') { $fmt = $self->UUID_FMT_STR; }
  +        elsif ($fmt eq 'txt') { $fmt = $self->UUID_FMT_TXT; }
  +        else  { croak("invalid format \"$fmt\""); }
  +        $self->{-rc} = uuid_export($self->{-uuid}, $fmt, $data_ptr, undef);
  +        return ($self->{-rc} == $self->UUID_RC_OK ? $data_ptr : undef);
  +    }
  +    else {
  +        #   the special Perl "export" method
  +        #   (usually inherited from the Exporter)
  +        return Exporter::export(@_);
  +    }
  +}
  +
  +sub error ($;$) {
  +    my ($self, $rc) = @_;
  +    $rc = $self->{-rc} if (not defined($rc));
  +    return wantarray ? (uuid_error($rc), $rc) : uuid_error($rc);
  +}
  +
  +sub version (;$) {
  +    my ($self) = @_;
  +    return uuid_version();
  +}
  +
  +##
  +##  Low-Level Perl XS C-style API
  +##  (actually just the activation of the XS part)
  +##
  +
  +#   auto-loading constants
  +sub AUTOLOAD {
  +    my $constname;
  +    our $AUTOLOAD;
  +    ($constname = $AUTOLOAD) =~ s/.*:://;
  +    croak "&OSSP::uuid::constant not defined" if ($constname eq 'constant');
  +    my ($error, $val) = constant($constname);
  +    croak $error if ($error);
  +    { no strict 'refs'; *$AUTOLOAD = sub { $val }; }
  +    goto &$AUTOLOAD;
  +}
  +
  +#   static-loading functions
  +XSLoader::load('OSSP::uuid', $VERSION);
  +
  +1;
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.pod
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid.pod
  --- /dev/null	2004-11-03 15:52:10 +0100
  +++ uuid.pod	2004-11-03 15:52:10 +0100
  @@ -0,0 +1,174 @@
  +##
  +##  OSSP uuid - Universally Unique Identifier
  +##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP uuid, a library for the generation
  +##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  uuid.pm: Perl Binding (Perl/POD part) 
  +##
  +
  +=pod
  +
  +=head1 NAME
  +
  +OSSP::uuid - B<OSSP uuid> Perl Binding
  +
  +=head1 DESCRIPTION
  +
  +B<OSSP::uuid> is the Perl binding to the B<OSSP uuid> API.
  +
  +B<OSSP uuid> is an ISO-C application programming interface (API) and
  +corresponding command line interface (CLI) for the generation of DCE
  +1.1 and ISO/IEC 11578:1996 compliant I<Universally Unique Identifier>
  +(UUID). It supports DCE 1.1 variant UUIDs of version 1 (time and node
  +based), version 3 (name based) and version 4 (random number based).
  +
  +B<OSSP::uuid> provides two Perl APIs:
  +
  +=head2 OO-STYLE API
  +
  +The OO-style API is a wrapper around the C-style API and intended for
  +high-level and regular programming.
  +
  +=over 4
  +
  +=item C<use OSSP::uuid;>
  +
  +=item C<my $uuid = >B<new>C< OSSP::uuid;>
  +
  +=item C<$uuid-E<gt>>B<load>C<($name);>
  +
  +=item C<$uuid-E<gt>>B<make>C<($mode, ...);>
  +
  +=item C<$result = $uuid-E<gt>>B<isnil>C<();>
  +
  +=item C<$result = $uuid-E<gt>>B<compare>C<($uuid2);>
  +
  +=item C<$uuid-E<gt>>B<import>C<($fmt, $data_ptr);>
  +
  +=item C<$data_ptr = $uuid-E<gt>>B<export>C<($fmt);>
  +
  +=item C<[(]$str[, $rc)] = $uuid-E<gt>>B<error>C<();>
  +
  +=item C<$ver = $uuid-E<gt>>B<version>C<();>
  +
  +=item C<undef $uuid;>
  +
  +=back
  +
  +Additionally, the strings C<"v1">, C<"v2">, C<"v3"> and C<"mc"> can be
  +used in C<$mode> and the strings C<"bin">, C<"str">, and C<"txt"> can be
  +used for C<$fmt>.
  +
  +=head2 C-STYLE API
  +
  +The C-style API is a direct mapping
  +of the B<OSSP uuid> ISO-C API to Perl and is intended for low-level
  +programming. See uuid(3) for a description of the functions and
  +their expected arguments.
  +
  +=over 4
  + 
  +=item C<use OSSP::uuid qw(:all);>
  +
  +=item C<my $uuid; $rc = >B<uuid_create>C<($uuid);>
  +
  +=item C<$rc = >B<uuid_load>C<($uuid, $name);>
  +
  +=item C<$rc = >B<uuid_make>C<($uuid, $mode, ...);>
  +
  +=item C<$rc = >B<uuid_isnil>C<($uuid, $result);>
  +
  +=item C<$rc = >B<uuid_compare>C<($uuid, $uuid2, $result);>
  +
  +=item C<$rc = >B<uuid_import>C<($uuid, $fmt, $data_ptr, $data_len);>
  +
  +=item C<$rc = >B<uuid_export>C<($uuid, $fmt, $data_ptr, $data_len);>
  +
  +=item C<$str = >B<uuid_error>C<($rc);>
  +
  +=item C<$ver = >B<uuid_version>C<();>
  +
  +=item C<$rc = >B<uuid_destroy>C<($uuid);>
  +
  +=back
  +
  +Additionally, the following constants are exported for use in C<$rc>, C<$mode>, C<$fmt> and C<$ver>:
  +
  +C<UUID_VERSION>,
  +C<UUID_LEN_BIN>,
  +C<UUID_LEN_STR>,
  +C<UUID_RC_OK>,
  +C<UUID_RC_ARG>,
  +C<UUID_RC_MEM>,
  +C<UUID_RC_SYS>,
  +C<UUID_RC_INT>,
  +C<UUID_RC_IMP>,
  +C<UUID_MAKE_V1>,
  +C<UUID_MAKE_V3>,
  +C<UUID_MAKE_V4>,
  +C<UUID_MAKE_MC>,
  +C<UUID_FMT_BIN>,
  +C<UUID_FMT_STR>,
  +C<UUID_FMT_TXT>.
  +
  +=head1 EXAMPLES
  +
  +The following two examples create the version 3 UUID
  +C<02d9e6d5-9467-382e-8f9b-9300a64ac3cd>, both via the OO-style and the
  +C-style API. Error handling is omitted here for easier reading, but has
  +to be added for production-quality code.
  +
  +  #   OO-style API (high-level)
  +  use OSSP::uuid;
  +  my $uuid    = new OSSP::uuid;
  +  my $uuid_ns = new OSSP::uuid;
  +  $uuid_ns->load("ns:URL");
  +  $uuid->make("v3", $uuid_ns, "http://www.ossp.org/");
  +  undef $uuid_ns;
  +  my $str = $uuid->export("str");
  +  undef $uuid;
  +  print "$str\n";
  +
  +  #   C-style API (low-level)
  +  use OSSP::uuid qw(:all);
  +  my $uuid;    uuid_create($uuid);
  +  my $uuid_ns; uuid_create($uuid_ns);
  +  uuid_load($uuid_ns, "ns:URL");
  +  uuid_make($uuid, UUID_MAKE_V3, $uuid_ns, "http://www.ossp.org/");
  +  uuid_destroy($uuid_ns);
  +  my $str; uuid_export($uuid, UUID_FMT_STR, $str, undef);
  +  uuid_destroy($uuid);
  +  print "$str\n";
  +
  +=head1 SEE ALSO
  +
  +uuid(3),
  +http://www.ossp.org/pkg/lib/uuid/
  +
  +=head1 AUTHOR
  +
  +Ralf S. Engelschall, E<lt>rse@engelschall.comE<gt>
  +
  +=cut
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.tm
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid.tm
  --- /dev/null	2004-11-03 15:52:10 +0100
  +++ uuid.tm	2004-11-03 15:52:10 +0100
  @@ -0,0 +1,39 @@
  +##
  +##  OSSP uuid - Universally Unique Identifier
  +##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP uuid, a library for the generation
  +##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  uuid.tm: Perl XS typemap for xsubpp(1) 
  +##
  +
  +TYPEMAP
  +uuid_t *        T_PTRREF  
  +uuid_t **       T_PTRREF  
  +uuid_rc_t       T_IV  
  +uuid_fmt_t      T_IV  
  +int *           T_PV
  +size_t *        T_PV
  +const void *    T_PV
  +void **         T_PV
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.ts
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid.ts
  --- /dev/null	2004-11-03 15:52:10 +0100
  +++ uuid.ts	2004-11-03 15:52:10 +0100
  @@ -0,0 +1,144 @@
  +##
  +##  OSSP uuid - Universally Unique Identifier
  +##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP uuid, a library for the generation
  +##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  uuid.ts: Perl Binding (Perl test suite part)
  +##
  +
  +use Test::More tests => 31;
  +
  +##
  +##  Module Loading
  +##
  +
  +BEGIN {
  +    use_ok('OSSP::uuid')
  +};
  +BEGIN {
  +    use OSSP::uuid qw(:all);
  +    ok(defined(UUID_VERSION), "UUID_VERSION");
  +    ok(UUID_RC_OK == 0, "UUID_RC_OK");
  +};
  +
  +##
  +##  C-Style API
  +##
  +
  +my ($rc, $result, $uuid, $uuid_ns, $str, $ptr, $len);
  +
  +$rc = uuid_create($uuid);
  +ok($rc == UUID_RC_OK, "uuid_create (1)");
  +$rc = uuid_create($uuid_ns);
  +ok($rc == UUID_RC_OK, "uuid_create (2)");
  +
  +$rc = uuid_isnil($uuid, $result);
  +ok(($rc == UUID_RC_OK and $result == 1), "uuid_isnil (1)");
  +$rc = uuid_isnil($uuid_ns, $result);
  +ok(($rc == UUID_RC_OK and $result == 1), "uuid_isnil (2)");
  +$rc = uuid_compare($uuid, $uuid_ns, $result);
  +ok(($rc == UUID_RC_OK and $result == 0), "uuid_compare (1)");
  +$rc = uuid_export($uuid, UUID_FMT_STR, $ptr, $len);
  +ok((    $rc == UUID_RC_OK
  +    and $ptr eq "00000000-0000-0000-0000-000000000000"
  +    and $len == UUID_LEN_STR), "uuid_export (1)");
  +
  +$rc = uuid_load($uuid_ns, "ns:URL");
  +ok($rc == UUID_RC_OK, "uuid_load (1)");
  +$rc = uuid_export($uuid_ns, UUID_FMT_STR, $ptr, $len);
  +ok((    $rc == UUID_RC_OK
  +    and $ptr eq "6ba7b811-9dad-11d1-80b4-00c04fd430c8"
  +    and $len == UUID_LEN_STR), "uuid_export (2)");
  +
  +$rc = uuid_make($uuid, UUID_MAKE_V3, $uuid_ns, "http://www.ossp.org/");
  +ok($rc == UUID_RC_OK, "uuid_make (1)");
  +$rc = uuid_export($uuid, UUID_FMT_STR, $ptr, $len);
  +ok((    $rc == UUID_RC_OK
  +    and $ptr eq "02d9e6d5-9467-382e-8f9b-9300a64ac3cd"
  +    and $len == UUID_LEN_STR), "uuid_export (3)");
  +
  +$rc = uuid_export($uuid, UUID_FMT_BIN, $ptr, $len);
  +ok((    $rc == UUID_RC_OK
  +    and $len == UUID_LEN_BIN), "uuid_export (4)");
  +$rc = uuid_import($uuid_ns, UUID_FMT_BIN, $ptr, $len);
  +ok($rc == UUID_RC_OK, "uuid_import (1)");
  +$rc = uuid_export($uuid_ns, UUID_FMT_STR, $ptr, $len);
  +ok((    $rc == UUID_RC_OK
  +    and $ptr eq "02d9e6d5-9467-382e-8f9b-9300a64ac3cd"
  +    and $len == UUID_LEN_STR), "uuid_export (5)");
  +
  +$rc = uuid_destroy($uuid_ns);
  +ok($rc == UUID_RC_OK, "uuid_destroy (1)");
  +$rc = uuid_destroy($uuid);
  +ok($rc == UUID_RC_OK, "uuid_destroy (2)");
  +
  +##
  +##  OO-style API
  +##
  +
  +$uuid = new OSSP::uuid;
  +ok(defined($uuid), "new OSSP::uuid (1)");
  +$uuid_ns = new OSSP::uuid;
  +ok(defined($uuid_ns), "new OSSP::uuid (2)");
  +
  +$rc = $uuid->isnil();
  +ok((defined($rc) and $rc == 1), "isnil (1)");
  +$rc = $uuid_ns->isnil();
  +ok((defined($rc) and $rc == 1), "isnil (2)");
  +
  +$rc = $uuid->compare($uuid_ns);
  +ok((defined($rc) and $rc == 0), "compare (1)");
  +
  +$ptr = $uuid->export("str");
  +ok((    defined($ptr)
  +    and $ptr eq "00000000-0000-0000-0000-000000000000"
  +    and length($ptr) == UUID_LEN_STR), "export (1)");
  +
  +$rc = $uuid_ns->load("ns:URL");
  +ok(defined($rc), "uuid_load (1)");
  +$ptr = $uuid_ns->export("str");
  +ok((    defined($ptr)
  +    and $ptr eq "6ba7b811-9dad-11d1-80b4-00c04fd430c8"
  +    and length($ptr) == UUID_LEN_STR), "export (2)");
  +
  +$rc = $uuid->make("v3", $uuid_ns, "http://www.ossp.org/");
  +ok(defined($rc), "make (1)");
  +$ptr = $uuid->export("str");
  +ok((    defined($ptr)
  +    and $ptr eq "02d9e6d5-9467-382e-8f9b-9300a64ac3cd"
  +    and length($ptr) == UUID_LEN_STR), "export (3)");
  +
  +$ptr = $uuid->export("bin");
  +ok((    defined($ptr)
  +    and length($ptr) == UUID_LEN_BIN), "export (4)");
  +$rc = $uuid_ns->import("bin", $ptr);
  +ok(defined($rc), "import (1)");
  +$ptr = $uuid_ns->export("str");
  +ok((    defined($ptr)
  +    and $ptr eq "02d9e6d5-9467-382e-8f9b-9300a64ac3cd"
  +    and length($ptr) == UUID_LEN_STR), "export (5)");
  +
  +undef $uuid;
  +undef $uuid_ns;
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.xs
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid.xs
  --- /dev/null	2004-11-03 15:52:10 +0100
  +++ uuid.xs	2004-11-03 15:52:10 +0100
  @@ -0,0 +1,231 @@
  +/*
  +**  OSSP uuid - Universally Unique Identifier
  +**  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +**
  +**  This file is part of OSSP uuid, a library for the generation
  +**  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  uuid.xs: Perl Binding (Perl/XS part)
  +*/
  +
  +#include "EXTERN.h"
  +#include "perl.h"
  +#include "XSUB.h"
  +
  +#include "uuid.h"
  +
  +MODULE = OSSP::uuid PACKAGE = OSSP::uuid
  +
  +void
  +constant(sv)
  +    PREINIT:
  +        dXSTARG;
  +        STRLEN          len;
  +        int             i;
  +        static struct {
  +            const char *name;
  +            int         value;
  +        } constant_table[] = {
  +            { "UUID_VERSION", UUID_VERSION },
  +            { "UUID_LEN_BIN", UUID_LEN_BIN },
  +            { "UUID_LEN_STR", UUID_LEN_STR },
  +            { "UUID_RC_OK",   UUID_RC_OK   },
  +            { "UUID_RC_ARG",  UUID_RC_ARG  },
  +            { "UUID_RC_MEM",  UUID_RC_MEM  },
  +            { "UUID_RC_SYS",  UUID_RC_SYS  },
  +            { "UUID_RC_INT",  UUID_RC_INT  },
  +            { "UUID_RC_IMP",  UUID_RC_IMP  },
  +            { "UUID_MAKE_V1", UUID_MAKE_V1 },
  +            { "UUID_MAKE_V3", UUID_MAKE_V3 },
  +            { "UUID_MAKE_V4", UUID_MAKE_V4 },
  +            { "UUID_MAKE_MC", UUID_MAKE_MC },
  +            { "UUID_FMT_BIN", UUID_FMT_BIN },
  +            { "UUID_FMT_STR", UUID_FMT_STR },
  +            { "UUID_FMT_TXT", UUID_FMT_TXT }
  +        };
  +    INPUT:
  +        SV             *sv;
  +        const char     *s = SvPV(sv, len);
  +    PPCODE:
  +        for (i = 0; i < sizeof(constant_table)/sizeof(constant_table[0]); i++) {
  +            if (strcmp(s, constant_table[i].name) == 0) {
  +                EXTEND(SP, 1);
  +                PUSHs(&PL_sv_undef);
  +                PUSHi(constant_table[i].value);
  +                break;
  +            }
  +        }
  +        if (i == sizeof(constant_table)/sizeof(constant_table[0])) {
  +            sv = sv_2mortal(newSVpvf("unknown contant OSSP::uuid::%s", s));
  +            PUSHs(sv);
  +        }
  +
  +
  +uuid_rc_t
  +uuid_create(uuid)
  +    PROTOTYPE:
  +        $
  +    INPUT:
  +        uuid_t *&uuid = NO_INIT
  +    CODE:
  +        RETVAL = uuid_create(&uuid);
  +    OUTPUT:
  +        uuid
  +        RETVAL
  +
  +uuid_rc_t
  +uuid_destroy(uuid)
  +    PROTOTYPE:
  +        $
  +    INPUT:
  +        uuid_t *uuid
  +    CODE:
  +        RETVAL = uuid_destroy(uuid);
  +    OUTPUT:
  +        RETVAL
  +
  +uuid_rc_t
  +uuid_load(uuid,name)
  +    PROTOTYPE:
  +        $$
  +    INPUT:
  +        uuid_t *uuid
  +        const char *name
  +    CODE:
  +        RETVAL = uuid_load(uuid, name);
  +    OUTPUT:
  +        RETVAL
  +
  +uuid_rc_t
  +uuid_make(uuid,mode,...)
  +    PROTOTYPE:
  +        $$;$$
  +    INPUT:
  +        uuid_t *uuid
  +        unsigned int mode
  +    PREINIT:
  +        uuid_t *ns;
  +        const char *name;
  +    CODE:
  +        if (mode & UUID_MAKE_V3) {
  +            if (items != 4)
  +                croak("mode UUID_MAKE_V3 requires two additional arguments to uuid_make()");
  +	        if (!SvROK(ST(2)))
  +                croak("mode UUID_MAKE_V3 requires a UUID object as namespace"); 
  +            ns   = INT2PTR(uuid_t *, SvIV((SV*)SvRV(ST(2))));
  +            name = (const char *)SvPV_nolen(ST(3));
  +            RETVAL = uuid_make(uuid, mode, ns, name);
  +        }
  +        else {
  +            if (items != 2)
  +                croak("invalid number of arguments to uuid_make()");
  +            RETVAL = uuid_make(uuid, mode);
  +        }
  +    OUTPUT:
  +        RETVAL
  +
  +uuid_rc_t
  +uuid_isnil(uuid,result)
  +    PROTOTYPE:
  +        $$
  +    INPUT:
  +        uuid_t *uuid
  +        int &result = NO_INIT
  +    CODE:
  +        RETVAL = uuid_isnil(uuid, &result);
  +    OUTPUT:
  +        result
  +        RETVAL
  +
  +uuid_rc_t
  +uuid_compare(uuid,uuid2,result)
  +    PROTOTYPE:
  +        $$$
  +    INPUT:
  +        uuid_t *uuid
  +        uuid_t *uuid2
  +        int &result = NO_INIT
  +    CODE:
  +        RETVAL = uuid_compare(uuid, uuid2, &result);
  +    OUTPUT:
  +        result
  +        RETVAL
  +
  +uuid_rc_t
  +uuid_import(uuid,fmt,data_ptr,data_len)
  +    PROTOTYPE:
  +        $$$$
  +    INPUT:
  +        uuid_t *uuid
  +        uuid_fmt_t fmt
  +        const void *data_ptr
  +        size_t data_len
  +    CODE:
  +        if (ST(3) == &PL_sv_undef)
  +            data_len = sv_len(ST(2));
  +        RETVAL = uuid_import(uuid, fmt, data_ptr, data_len);
  +    OUTPUT:
  +        RETVAL
  +
  +uuid_rc_t
  +uuid_export(uuid,fmt,data_ptr,data_len)
  +    PROTOTYPE:
  +        $$$$
  +    INPUT:
  +        uuid_t *uuid
  +        uuid_fmt_t fmt
  +        void *&data_ptr = NO_INIT
  +        size_t &data_len = NO_INIT
  +    PPCODE:
  +        data_ptr = NULL;
  +        data_len = 0;
  +        RETVAL = uuid_export(uuid, fmt, &data_ptr, &data_len);
  +        if (RETVAL == UUID_RC_OK) {
  +            if (fmt == UUID_FMT_STR)
  +                data_len--; /* Perl doesn't wish NUL-termination on strings */
  +            sv_setpvn(ST(2), data_ptr, data_len);
  +            free(data_ptr);
  +            if (ST(3) != &PL_sv_undef)
  +                sv_setuv(ST(3), (UV)data_len);
  +        }
  +        PUSHi((IV)RETVAL);
  +
  +char *
  +uuid_error(rc)
  +    PROTOTYPE:
  +        $
  +    INPUT:
  +        uuid_rc_t rc
  +    CODE:
  +        RETVAL = uuid_error(rc);
  +    OUTPUT:
  +        RETVAL
  +
  +unsigned long
  +uuid_version()
  +    PROTOTYPE:
  +    INPUT:
  +    CODE:
  +        RETVAL = uuid_version();
  +    OUTPUT:
  +        RETVAL
  +
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov  3 18:04:56 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7080076638; Wed,  3 Nov 2004 18:04:55 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/perl/ .cvsignore
Message-Id: <20041103170455.7080076638@mail.ossp.org>
Date: Wed,  3 Nov 2004 18:04:55 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Nov-2004 18:04:55
  Branch: HEAD                             Handle: 2004110317045200

  Added files:
    ossp-pkg/uuid/perl      .cvsignore

  Log:
    ignore generated files

  Summary:
    Revision    Changes     Path
    1.1         +5  -0      ossp-pkg/uuid/perl/.cvsignore
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/.cvsignore
  ============================================================================
  $ cvs diff -u -r0 -r1.1 .cvsignore
  --- /dev/null	2004-11-03 18:04:54 +0100
  +++ .cvsignore	2004-11-03 18:04:54 +0100
  @@ -0,0 +1,5 @@
  +Makefile
  +blib
  +pm_to_blib
  +uuid.bs
  +uuid.c
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov  3 18:08:01 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5FE9D7663F; Wed,  3 Nov 2004 18:08:01 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog Makefile.in uuid.ac
Message-Id: <20041103170801.5FE9D7663F@mail.ossp.org>
Date: Wed,  3 Nov 2004 18:08:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Nov-2004 18:08:01
  Branch: HEAD                             Handle: 2004110317075700

  Modified files:
    ossp-pkg/uuid           ChangeLog Makefile.in uuid.ac

  Log:
    Add --with-perl configure option for optionally enabling
    the Perl language bindings.

  Summary:
    Revision    Changes     Path
    1.59        +5  -1      ossp-pkg/uuid/ChangeLog
    1.22        +22 -1      ossp-pkg/uuid/Makefile.in
    1.12        +23 -2      ossp-pkg/uuid/uuid.ac
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.58 -r1.59 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	3 Nov 2004 14:52:08 -0000	1.58
  +++ ossp-pkg/uuid/ChangeLog	3 Nov 2004 17:07:57 -0000	1.59
  @@ -13,7 +13,11 @@
   
     Changes between 1.0.4 and 1.1.0 (16-Oct-2004 to xx-Nov-2004)
   
  -   o Add Perl language binding providing both a C-style and OO-style API.
  +   o Add --with-perl configure option for optionally enabling
  +     the Perl language bindings.
  +     [Ralf S. Engelschall]
  +
  +   o Add Perl language bindings providing both a C-style and OO-style API.
        [Ralf S. Engelschall]
   
     Changes between 1.0.3 and 1.0.4 (15-Oct-2004 to 16-Oct-2004)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	16 Oct 2004 18:20:18 -0000	1.21
  +++ ossp-pkg/uuid/Makefile.in	3 Nov 2004 17:07:57 -0000	1.22
  @@ -53,6 +53,7 @@
   LIBTOOL     = ./libtool
   TRUE        = true
   POD2MAN     = pod2man
  +PERL        = @PERL@
   
   LIB_NAME    = libuuid.la
   LIB_OBJS    = uuid.lo uuid_md5.lo uuid_prng.lo uuid_mac.lo uuid_ui64.lo uuid_str.lo
  @@ -65,9 +66,13 @@
   
   MAN_NAME    = uuid.3 uuid.1
   
  -TARGETS     = $(LIB_NAME) @DCE_NAME@ $(PRG_NAME)
  +PERL_NAME   = perl/blib/lib/OSSP/uuid.pm
  +PERL_OBJS   = perl/uuid.pm
  +
  +TARGETS     = $(LIB_NAME) @DCE_NAME@ $(PRG_NAME) @PERL_NAME@
   
   WITH_DCE    = @WITH_DCE@
  +WITH_PERL   = @WITH_PERL@
   
   .SUFFIXES:
   .SUFFIXES: .c .o .lo
  @@ -91,6 +96,9 @@
   $(PRG_NAME): $(PRG_OBJS) $(LIB_NAME)
   	@$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $(PRG_NAME) $(PRG_OBJS) $(LIB_NAME) $(LIBS)
   
  +$(PERL_NAME): $(PERL_OBJS) $(LIB_NAME)
  +	@cd perl && $(PERL) Makefile.PL PREFIX=$(prefix) && $(MAKE) $(MFLAGS) all
  +
   uuid.lo: uuid.c config.h uuid.h uuid_md5.h uuid_prng.h uuid_mac.h uuid_ui64.h uuid_str.h uuid_bm.h uuid_ac.h
   uuid_mac.lo: uuid_mac.c config.h uuid_mac.h
   uuid_md5.lo: uuid_md5.c uuid_md5.h
  @@ -146,6 +154,10 @@
   	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -d `$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v3 ns:URL http://www.ossp.org/`
   	@echo "==== UUID version 3 generation and decoding"; \
   	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -d `$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v4`
  +	-@if [ ".$(WITH_PERL)" = .yes ]; then \
  +	    echo "==== Perl bindings to C API"; \
  +	    (cd perl && $(MAKE) $(MFLAGS) test); \
  +	fi
   
   install:
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
  @@ -168,6 +180,9 @@
   	fi
   	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -s -m 755 uuid $(DESTDIR)$(bindir)/
   	$(SHTOOL) install -c -m 644 $(srcdir)/uuid.1 $(DESTDIR)$(mandir)/man1/
  +	-@if [ ".$(WITH_PERL)" = .yes ]; then \
  +	    (cd perl && $(MAKE) $(MFLAGS) install); \
  +	fi
   
   uninstall:
   	-$(RM) $(DESTDIR)$(mandir)/man1/uuid.1
  @@ -201,11 +216,17 @@
   	-$(RM) $(PRG_NAME) $(PRG_OBJS)
   	-$(RM) -r .libs >/dev/null 2>&1 || $(TRUE)
   	-$(RM) *.o *.lo
  +	-@if [ ".$(WITH_PERL)" = .yes ]; then \
  +	    (cd perl && $(MAKE) $(MFLAGS) clean || true); \
  +	fi
   
   distclean: clean
   	-$(RM) config.log config.status config.cache
   	-$(RM) Makefile config.h uuid-config uuid.h
   	-$(RM) libtool
  +	-@if [ ".$(WITH_PERL)" = .yes ]; then \
  +	    (cd perl && $(MAKE) $(MFLAGS) distclean || true); \
  +	fi
   
   realclean: distclean
   	-$(RM) uuid.3 uuid.1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.ac
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 uuid.ac
  --- ossp-pkg/uuid/uuid.ac	13 Feb 2004 21:01:41 -0000	1.11
  +++ ossp-pkg/uuid/uuid.ac	3 Nov 2004 17:07:57 -0000	1.12
  @@ -70,10 +70,11 @@
       AC_CHECK_SIZEOF(long long, 8)
       AC_CHECK_SIZEOF(unsigned long long, 8)
   
  -    dnl #   options
  -    AC_ARG_WITH(dce,
  +    dnl #   configure option --with-dce
  +    AC_ARG_WITH([dce],
           AC_HELP_STRING([--with-dce], [build DCE 1.1 backward compatibility API]),
           [ac_cv_with_dce=$withval], [ac_cv_with_dce=no])
  +    AC_CACHE_CHECK([whether to build DCE 1.1 backward compatibility API], [ac_cv_with_dce], [ac_cv_with_dce=no])
       if test ".$ac_cv_with_dce" = ".yes"; then
           AC_DEFINE(WITH_DCE, 1, [whether to build DCE 1.1 backward compatibility API])
           WITH_DCE='yes'
  @@ -84,5 +85,25 @@
       fi
       AC_SUBST(WITH_DCE)
       AC_SUBST(DCE_NAME)
  +
  +    dnl #   configure option --with-perl
  +    AC_ARG_WITH([perl],
  +        AS_HELP_STRING([--with-perl], [build Perl bindings to C API]),
  +        [ac_cv_with_perl=$withval], [ac_cv_with_perl=no])
  +    AC_CACHE_CHECK([whether to build Perl bindings to C API], [ac_cv_with_perl], [ac_cv_with_perl=no])
  +    if test ".$ac_cv_with_perl" = ".yes"; then
  +        AC_DEFINE(WITH_PERL, 1, [whether to build Perl bindings to C API])
  +        WITH_PERL='yes'
  +        PERL_NAME='$(PERL_NAME)'
  +    else
  +        WITH_PERL='no'
  +        PERL_NAME=''
  +    fi
  +    AC_SUBST(WITH_PERL)
  +    AC_SUBST(PERL_NAME)
  +    AC_PATH_PROG(PERL, perl, NA)
  +    if test ".$PERL" = .NA; then
  +        AC_ERROR([required Perl interpreter not found in \$PATH])
  +    fi
   ])
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov  3 18:08:23 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 37A777663F; Wed,  3 Nov 2004 18:08:23 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ TODO
Message-Id: <20041103170823.37A777663F@mail.ossp.org>
Date: Wed,  3 Nov 2004 18:08:23 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Nov-2004 18:08:23
  Branch: HEAD                             Handle: 2004110317082100

  Modified files:
    ossp-pkg/uuid           TODO

  Log:
    done

  Summary:
    Revision    Changes     Path
    1.23        +0  -1      ossp-pkg/uuid/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/TODO
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 TODO
  --- ossp-pkg/uuid/TODO	16 Feb 2004 09:43:57 -0000	1.22
  +++ ossp-pkg/uuid/TODO	3 Nov 2004 17:08:21 -0000	1.23
  @@ -14,7 +14,6 @@
     CANDO
     =====
   
  -  - additional Perl API for covering Perl language
     - getopt_long support for CLI?
     - a more sophisticated test suite?!
     - more platform support in uuid_mac.c?!
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov  3 18:51:21 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C10E77663F; Wed,  3 Nov 2004 18:51:20 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ devtool.conf
Message-Id: <20041103175120.C10E77663F@mail.ossp.org>
Date: Wed,  3 Nov 2004 18:51:20 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Nov-2004 18:51:20
  Branch: HEAD                             Handle: 2004110317511900

  Modified files:
    ossp-pkg/uuid           devtool.conf

  Log:
    enable Perl by default for the developer

  Summary:
    Revision    Changes     Path
    1.11        +1  -0      ossp-pkg/uuid/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 devtool.conf
  --- ossp-pkg/uuid/devtool.conf	15 Oct 2004 18:16:52 -0000	1.10
  +++ ossp-pkg/uuid/devtool.conf	3 Nov 2004 17:51:19 -0000	1.11
  @@ -17,6 +17,7 @@
           --prefix=/tmp/uuid \
           --disable-shared \
           --enable-debug \
  +        --with-perl \
           "$@"
   
   %version
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov  3 19:01:54 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C2E8A7663F; Wed,  3 Nov 2004 19:01:53 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/perl/ MANIFEST Makefile.PL
Message-Id: <20041103180153.C2E8A7663F@mail.ossp.org>
Date: Wed,  3 Nov 2004 19:01:53 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Nov-2004 19:01:53
  Branch: HEAD                             Handle: 2004110318015000

  Modified files:
    ossp-pkg/uuid/perl      MANIFEST Makefile.PL

  Log:
    do not generate and insist on the META.yml stuff

  Summary:
    Revision    Changes     Path
    1.2         +0  -1      ossp-pkg/uuid/perl/MANIFEST
    1.2         +2  -1      ossp-pkg/uuid/perl/Makefile.PL
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/MANIFEST
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 MANIFEST
  --- ossp-pkg/uuid/perl/MANIFEST	3 Nov 2004 14:52:09 -0000	1.1
  +++ ossp-pkg/uuid/perl/MANIFEST	3 Nov 2004 18:01:50 -0000	1.2
  @@ -5,4 +5,3 @@
   uuid.pm
   uuid.pod
   uuid.ts
  -META.yml                                 Module meta-data (added by MakeMaker)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/Makefile.PL
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 Makefile.PL
  --- ossp-pkg/uuid/perl/Makefile.PL	3 Nov 2004 14:52:09 -0000	1.1
  +++ ossp-pkg/uuid/perl/Makefile.PL	3 Nov 2004 18:01:50 -0000	1.2
  @@ -42,8 +42,9 @@
       INC               => '-I. -I..',
       PM                => { 'uuid.pm'  => '$(INST_LIBDIR)/uuid.pm',
                              'uuid.pod' => '$(INST_LIBDIR)/uuid.pod' },
  -	TYPEMAPS          => [ 'uuid.tm' ],
  +    TYPEMAPS          => [ 'uuid.tm' ],
       test              => { TESTS => 'uuid.ts' },
  +    NO_META           => 1,
       #    cruel hack to workaround the conflict between OSSP uuid's
       #    uuid_create() function and one from FreeBSD's libc
       ((   "$Config{'osname'}$Config{'osvers'}" =~ m/^freebsd5\./
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov  3 19:08:27 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2982C7663F; Wed,  3 Nov 2004 19:08:26 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ Makefile.in
Message-Id: <20041103180826.2982C7663F@mail.ossp.org>
Date: Wed,  3 Nov 2004 19:08:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Nov-2004 19:08:26
  Branch: HEAD                             Handle: 2004110318082400

  Modified files:
    ossp-pkg/uuid           Makefile.in

  Log:
    remove Makefile.old artefact from MakeMaker on cleaning and depend on
    Perl stuff for check

  Summary:
    Revision    Changes     Path
    1.23        +2  -2      ossp-pkg/uuid/Makefile.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	3 Nov 2004 17:07:57 -0000	1.22
  +++ ossp-pkg/uuid/Makefile.in	3 Nov 2004 18:08:24 -0000	1.23
  @@ -136,7 +136,7 @@
   	sed -e "s;UUID_VERSION_STR;$$V2;" >uuid.1; \
   	$(RM) /tmp/uuid.pod
   
  -check: $(PRG_NAME)
  +check: all
   	@echo "==== UUID version 1 (time and node based): 4 single iterations"; \
   	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v1 -n 4 -1
   	@echo "==== UUID version 1 (time and node based): 4 subsequent iterations"; \
  @@ -225,7 +225,7 @@
   	-$(RM) Makefile config.h uuid-config uuid.h
   	-$(RM) libtool
   	-@if [ ".$(WITH_PERL)" = .yes ]; then \
  -	    (cd perl && $(MAKE) $(MFLAGS) distclean || true); \
  +	    (cd perl && $(MAKE) $(MFLAGS) distclean || true; rm -f Makefile.old); \
   	fi
   
   realclean: distclean
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov  3 19:23:37 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0F9487663F; Wed,  3 Nov 2004 19:23:36 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ README uuid.pod uuid_cli.pod
Message-Id: <20041103182336.0F9487663F@mail.ossp.org>
Date: Wed,  3 Nov 2004 19:23:36 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Nov-2004 19:23:36
  Branch: HEAD                             Handle: 2004110318233500

  Modified files:
    ossp-pkg/uuid           README uuid.pod uuid_cli.pod

  Log:
    tell about Perl API now, too

  Summary:
    Revision    Changes     Path
    1.20        +3  -3      ossp-pkg/uuid/README
    1.20        +2  -2      ossp-pkg/uuid/uuid.pod
    1.16        +2  -2      ossp-pkg/uuid/uuid_cli.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 README
  --- ossp-pkg/uuid/README	16 Oct 2004 18:23:18 -0000	1.19
  +++ ossp-pkg/uuid/README	3 Nov 2004 18:23:35 -0000	1.20
  @@ -9,9 +9,9 @@
   
     ABSTRACT
   
  -  OSSP uuid is a ISO-C application programming interface (API) and
  -  corresponding command line interface (CLI) for the generation of DCE
  -  1.1 and ISO/IEC 11578:1996 compliant Universally Unique Identifier
  +  OSSP uuid is a ISO-C and Perl application programming interface (API)
  +  and corresponding command line interface (CLI) for the generation of
  +  DCE 1.1 and ISO/IEC 11578:1996 compliant Universally Unique Identifier
     (UUID). It supports DCE 1.1 variant UUIDs of version 1 (time and node
     based), version 3 (name based) and version 4 (random number based).
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	12 Sep 2004 14:21:01 -0000	1.19
  +++ ossp-pkg/uuid/uuid.pod	3 Nov 2004 18:23:35 -0000	1.20
  @@ -39,8 +39,8 @@
   
   =head1 DESCRIPTION
   
  -B<OSSP uuid> is a ISO-C application programming interface (API) and
  -corresponding command line interface (CLI) for the generation of DCE
  +B<OSSP uuid> is a ISO-C and Perl application programming interface (API)
  +and corresponding command line interface (CLI) for the generation of DCE
   1.1 and ISO/IEC 11578:1996 compliant I<Universally Unique Identifier>
   (UUID). It supports DCE 1.1 variant UUIDs of version 1 (time and node
   based), version 3 (name based) and version 4 (random number based).
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.pod
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 uuid_cli.pod
  --- ossp-pkg/uuid/uuid_cli.pod	13 Feb 2004 16:17:07 -0000	1.15
  +++ ossp-pkg/uuid/uuid_cli.pod	3 Nov 2004 18:23:35 -0000	1.16
  @@ -56,8 +56,8 @@
   
   =head1 DESCRIPTION
   
  -B<OSSP uuid> is a ISO-C application programming interface (API) and
  -corresponding command line interface (CLI) for the generation of DCE
  +B<OSSP uuid> is a ISO-C and Perl application programming interface (API)
  +and corresponding command line interface (CLI) for the generation of DCE
   1.1 and ISO/IEC 11578:1996 compliant I<Universally Unique Identifier>
   (UUID). It supports DCE 1.1 variant UUIDs of version 1 (time and node
   based), version 3 (name based) and version 4 (random number based).
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov  3 19:26:34 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 209937663F; Wed,  3 Nov 2004 19:26:34 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ INSTALL
Message-Id: <20041103182634.209937663F@mail.ossp.org>
Date: Wed,  3 Nov 2004 19:26:34 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Nov-2004 19:26:33
  Branch: HEAD                             Handle: 2004110318263300

  Modified files:
    ossp-pkg/uuid           INSTALL

  Log:
    tell people about --with-dce and --with-perl

  Summary:
    Revision    Changes     Path
    1.3         +4  -1      ossp-pkg/uuid/INSTALL
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/INSTALL
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 INSTALL
  --- ossp-pkg/uuid/INSTALL	11 Jan 2004 08:54:17 -0000	1.2
  +++ ossp-pkg/uuid/INSTALL	3 Nov 2004 18:26:33 -0000	1.3
  @@ -11,7 +11,10 @@
     To install OSSP uuid into /path/to/uuid/ perform
     the following steps in your shell:
   
  -    $ ./configure --prefix=/path/to/uuid
  +    $ ./configure \
  +         --prefix=/path/to/uuid \
  +         [--with-dce] \
  +         [--with-perl[=/path/to/[bin[/perl]]]
       $ make
       $ make check
       $ make install [DESTDIR=/path/to/temp/root]
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov  3 19:28:57 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D870E76640; Wed,  3 Nov 2004 19:28:56 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/perl/ uuid.pod ossp-pkg/uuid/ uuid-config.po...
Message-Id: <20041103182856.D870E76640@mail.ossp.org>
Date: Wed,  3 Nov 2004 19:28:56 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Nov-2004 19:28:56
  Branch: HEAD                             Handle: 2004110318285103

  Modified files:
    ossp-pkg/uuid           uuid-config.pod uuid.pod uuid_cli.pod
    ossp-pkg/uuid/perl      uuid.pod

  Log:
    link manpaged together

  Summary:
    Revision    Changes     Path
    1.2         +1  -2      ossp-pkg/uuid/perl/uuid.pod
    1.2         +1  -1      ossp-pkg/uuid/uuid-config.pod
    1.21        +1  -1      ossp-pkg/uuid/uuid.pod
    1.17        +1  -1      ossp-pkg/uuid/uuid_cli.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid.pod
  --- ossp-pkg/uuid/perl/uuid.pod	3 Nov 2004 14:52:09 -0000	1.1
  +++ ossp-pkg/uuid/perl/uuid.pod	3 Nov 2004 18:28:54 -0000	1.2
  @@ -163,8 +163,7 @@
   
   =head1 SEE ALSO
   
  -uuid(3),
  -http://www.ossp.org/pkg/lib/uuid/
  +uuid(1), uuid-config(1), uuid(3).
   
   =head1 AUTHOR
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid-config.pod
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid-config.pod
  --- ossp-pkg/uuid/uuid-config.pod	15 Jan 2004 12:55:53 -0000	1.1
  +++ ossp-pkg/uuid/uuid-config.pod	3 Nov 2004 18:28:51 -0000	1.2
  @@ -149,7 +149,7 @@
   
   =head1 SEE ALSO
   
  -uuid(3), uuid(1).
  +uuid(3), uuid(1), OSSP::uuid(3).
   
   =cut
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	3 Nov 2004 18:23:35 -0000	1.20
  +++ ossp-pkg/uuid/uuid.pod	3 Nov 2004 18:28:51 -0000	1.21
  @@ -439,7 +439,7 @@
   
   =head1 SEE ALSO
   
  -uuid(1), uuid-config(1).
  +uuid(1), uuid-config(1), OSSP::uuid(3).
   
   =cut
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.pod
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 uuid_cli.pod
  --- ossp-pkg/uuid/uuid_cli.pod	3 Nov 2004 18:23:35 -0000	1.16
  +++ ossp-pkg/uuid/uuid_cli.pod	3 Nov 2004 18:28:51 -0000	1.17
  @@ -168,7 +168,7 @@
   
   =head1 SEE ALSO
   
  -uuid(3).
  +uuid(3), OSSP::uuid(3).
   
   =cut
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov  3 19:30:50 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2250D7663F; Wed,  3 Nov 2004 19:30:50 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/perl/ Makefile.PL
Message-Id: <20041103183050.2250D7663F@mail.ossp.org>
Date: Wed,  3 Nov 2004 19:30:50 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Nov-2004 19:30:50
  Branch: HEAD                             Handle: 2004110318304900

  Modified files:
    ossp-pkg/uuid/perl      Makefile.PL

  Log:
    I see no reason why MakeMaker has to know this here

  Summary:
    Revision    Changes     Path
    1.3         +0  -1      ossp-pkg/uuid/perl/Makefile.PL
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/Makefile.PL
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 Makefile.PL
  --- ossp-pkg/uuid/perl/Makefile.PL	3 Nov 2004 18:01:50 -0000	1.2
  +++ ossp-pkg/uuid/perl/Makefile.PL	3 Nov 2004 18:30:49 -0000	1.3
  @@ -35,7 +35,6 @@
       NAME              => 'OSSP::uuid',
       VERSION_FROM      => 'uuid.pm',
       ABSTRACT_FROM     => 'uuid.pod',
  -    AUTHOR            => 'Ralf S. Engelschall <rse@engelschall.com>',
       PREREQ_PM         => {},
       LIBS              => [ '-L../.libs -luuid' ],
       DEFINE            => '',
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov  3 19:35:27 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 843117663F; Wed,  3 Nov 2004 19:35:27 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ README devtool.conf ossp-pkg/uuid/perl/ uui...
Message-Id: <20041103183527.843117663F@mail.ossp.org>
Date: Wed,  3 Nov 2004 19:35:27 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Nov-2004 19:35:27
  Branch: HEAD                             Handle: 2004110318352402

  Modified files:
    ossp-pkg/uuid           README devtool.conf uuid_vers.h
    ossp-pkg/uuid/perl      uuid.pm

  Log:
    adjust version in Perl module, too; bump for next release number

  Summary:
    Revision    Changes     Path
    1.21        +1  -1      ossp-pkg/uuid/README
    1.12        +3  -0      ossp-pkg/uuid/devtool.conf
    1.2         +1  -1      ossp-pkg/uuid/perl/uuid.pm
    1.11        +9  -9      ossp-pkg/uuid/uuid_vers.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 README
  --- ossp-pkg/uuid/README	3 Nov 2004 18:23:35 -0000	1.20
  +++ ossp-pkg/uuid/README	3 Nov 2004 18:35:24 -0000	1.21
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
   
     OSSP uuid - Universally Unique Identifier
  -  Version 1.0.4 (16-Oct-2004)
  +  Version 1.1.0 (03-Nov-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 devtool.conf
  --- ossp-pkg/uuid/devtool.conf	3 Nov 2004 17:51:19 -0000	1.11
  +++ ossp-pkg/uuid/devtool.conf	3 Nov 2004 18:35:24 -0000	1.12
  @@ -25,6 +25,9 @@
       V=`./shtool version -l c -d long uuid_vers.h`
       sed -e "s/Version .*/Version $V/g" <README >README.n
       mv README.n README
  +    V=`./shtool version -l c -d short uuid_vers.h`
  +    sed -e "s/\(v = ('\)[^']*\('\)/\1$V\2/g" <perl/uuid.pm >perl/uuid.pm.n
  +    mv perl/uuid.pm.n perl/uuid.pm
   
   %dist
       echo "+++ removing old tarballs"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.pm
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid.pm
  --- ossp-pkg/uuid/perl/uuid.pm	3 Nov 2004 14:52:09 -0000	1.1
  +++ ossp-pkg/uuid/perl/uuid.pm	3 Nov 2004 18:35:26 -0000	1.2
  @@ -41,7 +41,7 @@
   ##
   
   #   API version
  -our $VERSION = do { my @v = ('1.0.4' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
  +our $VERSION = do { my @v = ('1.1.0' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
   
   #   API inheritance
   our @ISA = qw(Exporter);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_vers.h
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 uuid_vers.h
  --- ossp-pkg/uuid/uuid_vers.h	16 Oct 2004 18:23:18 -0000	1.10
  +++ ossp-pkg/uuid/uuid_vers.h	3 Nov 2004 18:35:24 -0000	1.11
  @@ -8,7 +8,7 @@
   #ifndef _UUID_VERS_H_
   #define _UUID_VERS_H_
   
  -#define _UUID_VERSION 0x100204
  +#define _UUID_VERSION 0x101200
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _UUID_VERS_H_AS_HEADER_
   
   _uuid_version_t _uuid_version = {
  -    0x100204,
  -    "1.0.4",
  -    "1.0.4 (16-Oct-2004)",
  -    "This is OSSP uuid, Version 1.0.4 (16-Oct-2004)",
  -    "OSSP uuid 1.0.4 (16-Oct-2004)",
  -    "OSSP uuid/1.0.4",
  -    "@(#)OSSP uuid 1.0.4 (16-Oct-2004)",
  -    "$Id: OSSP uuid 1.0.4 (16-Oct-2004) $"
  +    0x101200,
  +    "1.1.0",
  +    "1.1.0 (03-Nov-2004)",
  +    "This is OSSP uuid, Version 1.1.0 (03-Nov-2004)",
  +    "OSSP uuid 1.1.0 (03-Nov-2004)",
  +    "OSSP uuid/1.1.0",
  +    "@(#)OSSP uuid 1.1.0 (03-Nov-2004)",
  +    "$Id: OSSP uuid 1.1.0 (03-Nov-2004) $"
   };
   
   #endif /* _UUID_VERS_H_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov  3 19:44:42 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6DBD87663F; Wed,  3 Nov 2004 19:44:42 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/perl/ uuid.pm uuid.pod
Message-Id: <20041103184442.6DBD87663F@mail.ossp.org>
Date: Wed,  3 Nov 2004 19:44:42 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Nov-2004 19:44:42
  Branch: HEAD                             Handle: 2004110318444000

  Modified files:
    ossp-pkg/uuid/perl      uuid.pm uuid.pod

  Log:
    polish comments

  Summary:
    Revision    Changes     Path
    1.3         +12 -2      ossp-pkg/uuid/perl/uuid.pm
    1.3         +9  -7      ossp-pkg/uuid/perl/uuid.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.pm
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid.pm
  --- ossp-pkg/uuid/perl/uuid.pm	3 Nov 2004 18:35:26 -0000	1.2
  +++ ossp-pkg/uuid/perl/uuid.pm	3 Nov 2004 18:44:40 -0000	1.3
  @@ -171,9 +171,14 @@
   }
   
   sub import {
  +    #   ATTENTION: The OSSP uuid API function "import" conflicts with
  +    #   the standardized "import" method the Perl world expects from
  +    #   their modules. In order to keep the Perl binding consist
  +    #   with the C API, we solve the conflict under run-time by
  +    #   distinguishing between the two types of "import" calls.
       if (defined($_[0]) and ref($_[0]) =~ m/^OSSP::uuid/) {
           #   the regular OSSP::uuid "import" method
  -        croak("import method expects 3 or 4 arguments") if (@_ < 3 or @_ > 4);
  +        croak("import method expects 3 or 4 arguments") if (@_ < 3 or @_ > 4); # emulate prototype
           my ($self, $fmt, $data_ptr, $data_len) = @_;
           if    ($fmt eq 'bin') { $fmt = $self->UUID_FMT_BIN; }
           elsif ($fmt eq 'str') { $fmt = $self->UUID_FMT_STR; }
  @@ -192,9 +197,14 @@
   }
   
   sub export {
  +    #   ATTENTION: The OSSP uuid API function "export" conflicts with
  +    #   the standardized "export" method the Perl world expects from
  +    #   their modules. In order to keep the Perl binding consist
  +    #   with the C API, we solve the conflict under run-time by
  +    #   distinguishing between the two types of "export" calls.
       if (defined($_[0]) and ref($_[0]) =~ m/^OSSP::uuid/) {
           #   the regular OSSP::uuid "export" method
  -        croak("export method expects 2 arguments") if (@_ != 2);
  +        croak("export method expects 2 arguments") if (@_ != 2); # emulate prototype
           my ($self, $fmt) = @_;
           my $data_ptr;
           if    ($fmt eq 'bin') { $fmt = $self->UUID_FMT_BIN; }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid.pod
  --- ossp-pkg/uuid/perl/uuid.pod	3 Nov 2004 18:28:54 -0000	1.2
  +++ ossp-pkg/uuid/perl/uuid.pod	3 Nov 2004 18:44:40 -0000	1.3
  @@ -37,11 +37,12 @@
   
   B<OSSP::uuid> is the Perl binding to the B<OSSP uuid> API.
   
  -B<OSSP uuid> is an ISO-C application programming interface (API) and
  -corresponding command line interface (CLI) for the generation of DCE
  -1.1 and ISO/IEC 11578:1996 compliant I<Universally Unique Identifier>
  -(UUID). It supports DCE 1.1 variant UUIDs of version 1 (time and node
  -based), version 3 (name based) and version 4 (random number based).
  +B<OSSP uuid> is an ISO-C and Perl application programming interface
  +(API) and corresponding command line interface (CLI) for the generation
  +of DCE 1.1 and ISO/IEC 11578:1996 compliant I<Universally Unique
  +Identifier> (UUID). It supports DCE 1.1 variant UUIDs of version 1 (time
  +and node based), version 3 (name based) and version 4 (random number
  +based).
   
   B<OSSP::uuid> provides two Perl APIs:
   
  @@ -165,9 +166,10 @@
   
   uuid(1), uuid-config(1), uuid(3).
   
  -=head1 AUTHOR
  +=head1 HISTORY
   
  -Ralf S. Engelschall, E<lt>rse@engelschall.comE<gt>
  +The Perl binding B<OSSP::uuid> to B<OSSP uuid> was implemented in
  +November 2004 by Ralf S. Engelschall E<lt>rse@engelschall.comE<gt>.
   
   =cut
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov  3 19:48:23 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3898D7663F; Wed,  3 Nov 2004 19:48:23 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog
Message-Id: <20041103184823.3898D7663F@mail.ossp.org>
Date: Wed,  3 Nov 2004 19:48:23 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Nov-2004 19:48:23
  Branch: HEAD                             Handle: 2004110318482200

  Modified files:
    ossp-pkg/uuid           ChangeLog

  Log:
    fix before release

  Summary:
    Revision    Changes     Path
    1.60        +1  -1      ossp-pkg/uuid/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.59 -r1.60 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	3 Nov 2004 17:07:57 -0000	1.59
  +++ ossp-pkg/uuid/ChangeLog	3 Nov 2004 18:48:22 -0000	1.60
  @@ -11,7 +11,7 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 1.0.4 and 1.1.0 (16-Oct-2004 to xx-Nov-2004)
  +  Changes between 1.0.4 and 1.1.0 (16-Oct-2004 to 03-Nov-2004)
   
      o Add --with-perl configure option for optionally enabling
        the Perl language bindings.
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov  3 20:00:53 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E57407663F; Wed,  3 Nov 2004 20:00:52 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/perl/ uuid.pod uuid.tm uuid.xs
Message-Id: <20041103190052.E57407663F@mail.ossp.org>
Date: Wed,  3 Nov 2004 20:00:52 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Nov-2004 20:00:52
  Branch: HEAD                             Handle: 2004110319005000

  Modified files:
    ossp-pkg/uuid/perl      uuid.pod uuid.tm uuid.xs

  Log:
    strip trailing whitespaces

  Summary:
    Revision    Changes     Path
    1.4         +2  -2      ossp-pkg/uuid/perl/uuid.pod
    1.2         +5  -5      ossp-pkg/uuid/perl/uuid.tm
    1.2         +1  -1      ossp-pkg/uuid/perl/uuid.xs
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 uuid.pod
  --- ossp-pkg/uuid/perl/uuid.pod	3 Nov 2004 18:44:40 -0000	1.3
  +++ ossp-pkg/uuid/perl/uuid.pod	3 Nov 2004 19:00:50 -0000	1.4
  @@ -24,7 +24,7 @@
   ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   ##  SUCH DAMAGE.
   ##
  -##  uuid.pm: Perl Binding (Perl/POD part) 
  +##  uuid.pm: Perl Binding (Perl/POD part)
   ##
   
   =pod
  @@ -89,7 +89,7 @@
   their expected arguments.
   
   =over 4
  - 
  +
   =item C<use OSSP::uuid qw(:all);>
   
   =item C<my $uuid; $rc = >B<uuid_create>C<($uuid);>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.tm
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid.tm
  --- ossp-pkg/uuid/perl/uuid.tm	3 Nov 2004 14:52:10 -0000	1.1
  +++ ossp-pkg/uuid/perl/uuid.tm	3 Nov 2004 19:00:50 -0000	1.2
  @@ -24,14 +24,14 @@
   ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   ##  SUCH DAMAGE.
   ##
  -##  uuid.tm: Perl XS typemap for xsubpp(1) 
  +##  uuid.tm: Perl XS typemap for xsubpp(1)
   ##
   
   TYPEMAP
  -uuid_t *        T_PTRREF  
  -uuid_t **       T_PTRREF  
  -uuid_rc_t       T_IV  
  -uuid_fmt_t      T_IV  
  +uuid_t *        T_PTRREF
  +uuid_t **       T_PTRREF
  +uuid_rc_t       T_IV
  +uuid_fmt_t      T_IV
   int *           T_PV
   size_t *        T_PV
   const void *    T_PV
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.xs
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid.xs
  --- ossp-pkg/uuid/perl/uuid.xs	3 Nov 2004 14:52:10 -0000	1.1
  +++ ossp-pkg/uuid/perl/uuid.xs	3 Nov 2004 19:00:50 -0000	1.2
  @@ -130,7 +130,7 @@
               if (items != 4)
                   croak("mode UUID_MAKE_V3 requires two additional arguments to uuid_make()");
   	        if (!SvROK(ST(2)))
  -                croak("mode UUID_MAKE_V3 requires a UUID object as namespace"); 
  +                croak("mode UUID_MAKE_V3 requires a UUID object as namespace");
               ns   = INT2PTR(uuid_t *, SvIV((SV*)SvRV(ST(2))));
               name = (const char *)SvPV_nolen(ST(3));
               RETVAL = uuid_make(uuid, mode, ns, name);
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov  3 20:03:10 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 59E73765CF; Wed,  3 Nov 2004 20:03:10 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20041103190310.59E73765CF@mail.ossp.org>
Date: Wed,  3 Nov 2004 20:03:10 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   03-Nov-2004 20:03:10
  Branch: HEAD                             Handle: 2004110319030305

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/uuid   index.wml

  Log:
    release OSSP uuid 1.1.0

  Summary:
    Revision    Changes     Path
    1.105       +1  -0      ossp-web/new/news.txt
    1.91        +1  -1      ossp-web/pkg/lib/index.wml
    1.18        +7  -6      ossp-web/pkg/lib/uuid/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.104 -r1.105 news.txt
  --- ossp-web/new/news.txt	31 Oct 2004 19:41:05 -0000	1.104
  +++ ossp-web/new/news.txt	3 Nov 2004 19:03:03 -0000	1.105
  @@ -1,3 +1,4 @@
  +03-Nov-2004: Released L<OSSP uuid> 1.1.0
   31-Oct-2004: Released L<OSSP cfg> 0.9.4
   31-Oct-2004: Released L<OSSP var> 1.1.2
   16-Oct-2004: Released L<OSSP uuid> 1.0.4
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.90 -r1.91 index.wml
  --- ossp-web/pkg/lib/index.wml	31 Oct 2004 19:41:06 -0000	1.90
  +++ ossp-web/pkg/lib/index.wml	3 Nov 2004 19:03:06 -0000	1.91
  @@ -33,7 +33,7 @@
   			done=100 stable=1.1.2 unstable=none>
     <pkg_item name="uuid" longname="OSSP uuid" type="lib"
               desc="Universally Unique Identifier"
  -			done=100 stable=1.0.4 unstable=none>
  +			done=100 stable=1.1.0 unstable=none>
     <pkg_item name="val" longname="OSSP val" type="lib"
               desc="Value Access"
   			done=95 stable=none unstable=0.9.3>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/uuid/index.wml
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 index.wml
  --- ossp-web/pkg/lib/uuid/index.wml	16 Oct 2004 18:32:09 -0000	1.17
  +++ ossp-web/pkg/lib/uuid/index.wml	3 Nov 2004 19:03:08 -0000	1.18
  @@ -14,9 +14,9 @@
   
   <h2>Abstract</h2>
   
  -OSSP uuid is a ISO-C application programming interface (API) and
  -corresponding command line interface (CLI) for the generation of DCE
  -1.1 and ISO/IEC 11578:1996 compliant Universally Unique Identifiers
  +OSSP uuid is a ISO-C and Perl application programming interface (API)
  +and corresponding command line interface (CLI) for the generation of
  +DCE 1.1 and ISO/IEC 11578:1996 compliant Universally Unique Identifiers
   (UUID). It supports DCE 1.1 variant UUIDs of version 1 (time and node
   based), version 3 (name based) and version 4 (random number based).
   
  @@ -33,7 +33,8 @@
   
   <pkg_manpage name="uuid" sect=3 path="/pkg/lib/uuid/uuid.pod">,
   <pkg_manpage name="uuid" sect=1 path="/pkg/lib/uuid/uuid_cli.pod">,
  -<pkg_manpage name="uuid-config" sect=1 path="/pkg/lib/sa/uuid-config.pod">.
  +<pkg_manpage name="uuid-config" sect=1 path="/pkg/lib/sa/uuid-config.pod">,
  +<pkg_manpage name="OSSP::uuid" sect=3 path="/pkg/lib/uuid/perl/uuid.pod">.
   
   <h2>Authors</h2>
   
  @@ -43,7 +44,7 @@
   
   <pkg_status
       name="uuid" assign="rse"
  -    stable="1.0.4"    stable_date="16-Oct-2004"
  +    stable="1.1.0"    stable_date="03-Nov-2004"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -54,7 +55,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/uuid/
       directory=$(FTP_ROOT_DIR)/pkg/lib/uuid/
       files="uuid-[0-9.]*.tar.gz" 
  -	stable="uuid-1\.0\.4\.tar\.gz" unstable="none">
  +	stable="uuid-1\.1\.0\.tar\.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Nov  6 12:43:53 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2E910764EC; Sat,  6 Nov 2004 12:43:53 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ac/ TODO ac
Message-Id: <20041106114353.2E910764EC@mail.ossp.org>
Date: Sat,  6 Nov 2004 12:43:53 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Nov-2004 12:43:52
  Branch: HEAD                             Handle: 2004110611435200

  Modified files:
    ossp-pkg/ac             TODO ac

  Log:
    commit pending changes

  Summary:
    Revision    Changes     Path
    1.2         +34 -0      ossp-pkg/ac/TODO
    1.3         +6  -6      ossp-pkg/ac/ac
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ac/TODO
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 TODO
  --- ossp-pkg/ac/TODO	29 May 2003 09:26:21 -0000	1.1
  +++ ossp-pkg/ac/TODO	6 Nov 2004 11:43:52 -0000	1.2
  @@ -37,3 +37,37 @@
   - better consistrency checks
   - better error checking, especially line/col info on parse errors
   
  +Manuel Hendel:
  +- SSH:
  +    - Abschalten von Agentforwarding auf die Maschine nach
  +      login.eu.cw.net
  +    - Konfigurationsmöglichkeit ob Privat Keys vom Agent oder vom
  +      login.eu.cw.net genutzt werden, Konfigurationsmöglichkeit pro
  +      Host in ssh-config (wird aus login Server config erzeugt)
  +- Screen in der Shell auf login.eu.cw.net
  +- zusätzlich, zu den vorhandenen Feldern in der Auflistung der Server
  +  den User mit dem man sich einloggt anzeigen
  +- List der Server nicht nur von oben nach unten durchlaufen können
  +  sondern auch von unten nach oben
  +  (Wrapping!)
  +- einloggen pro Server mit mehreren Benutzern in der Konfiguration ermöglichen
  +  z.b. oracle@pho-db-1 vs. root@pho-db-1
  + 
  +Christoph Schug:
  +- feature: allow different visible hostname instead of used one (e.g.
  +  Management-LAN und nur IPs bekannt)
  +- feature: allow better parameterization of login methods
  +- feature: allow to configure arbitrary shell commands, e.g. additional
  +  command "ping" (similar to "connect") for checking connectivity first
  +- bugfix: on failed logins or terminated connections, the OSSP ac shell terminates
  +  pho-ftp-1:~#  shutdown -r now
  +  Connection to 172.16.1.161 closed by remote host.
  +  Connection to 172.16.1.161 closed.
  +  login:ERROR: failed to spawn sychronous command: "ssh -2 -A -X root@172.16.1.161": No such file or directory (No such file or directory)
  +  login-ui@m.de.cw.net: shutdown session
  +- bugfix: "info" does no access control, everyone sees everything
  +- bugfix: (similar to dt1->en1->mutt) in NVi keystroke problems (bash geht)
  +- command line expansion bei trick mit "oracle@pho-db-1"  funktioniert nicht gescheit
  +- "connect foo" und "foo" existiert nicht, macht shutdown der Session
  +
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ac/ac
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ac
  --- ossp-pkg/ac/ac	15 Dec 2003 17:59:49 -0000	1.2
  +++ ossp-pkg/ac/ac	6 Nov 2004 11:43:52 -0000	1.3
  @@ -38,11 +38,11 @@
   use Getopt::Long;         # from OpenPKG "perl"
   use Data::Dumper;         # from OpenPKG "perl"
   use Parse::RecDescent;    # from OpenPKG "perl-parse"
  -#use Term::ReadLine;      # from OpenPKG "perl-term"   (loaded deferred)
  -#use Term::ReadLine::Gnu; # from OpenPKG "perl-term"   (loaded deferred)
  -#use Curses;              # from OpenPKG "perl-curses" (loaded deferred)
  -#use Curses::UI;          # from OpenPKG "perl-curses" (loaded deferred)
  -#use Expect;              # from OpenPKG "perl-sys"    (loaded deferred)
  +#use Term::ReadLine;      # from OpenPKG "perl-term"   (deferred loaded!)
  +#use Term::ReadLine::Gnu; # from OpenPKG "perl-term"   (deferred loaded!)
  +#use Curses;              # from OpenPKG "perl-curses" (deferred loaded!)
  +#use Curses::UI;          # from OpenPKG "perl-curses" (deferred loaded!)
  +#use Expect;              # from OpenPKG "perl-sys"    (deferred loaded!)
   
   #   configure optional debugging
   $Data::Dumper::Purity = 1;
  @@ -1302,7 +1302,7 @@
               my $shcmd = &expand_arg($ctx, $cmd->[1]);
               my $rc = system($shcmd);
               if ($rc != 0) {
  -                die "failed to spawn sychronous command: \"$shcmd\": $!";
  +                die "failed to spawn synchronous command: \"$shcmd\": $!";
               }
           }
           elsif ($cmd->[0] eq 'spawn') {
  @@ .

From ossp-cvs-owner@ossp.org  Sat Nov  6 12:46:36 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 802CF764E9; Sat,  6 Nov 2004 12:46:36 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ac/ ac ac.bash ac.pod
Message-Id: <20041106114636.802CF764E9@mail.ossp.org>
Date: Sat,  6 Nov 2004 12:46:36 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Nov-2004 12:46:36
  Branch: HEAD                             Handle: 2004110611463500

  Modified files:
    ossp-pkg/ac             ac ac.bash ac.pod

  Log:
    adjust copyright

  Summary:
    Revision    Changes     Path
    1.4         +3  -3      ossp-pkg/ac/ac
    1.2         +3  -3      ossp-pkg/ac/ac.bash
    1.2         +3  -3      ossp-pkg/ac/ac.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ac/ac
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ac
  --- ossp-pkg/ac/ac	6 Nov 2004 11:43:52 -0000	1.3
  +++ ossp-pkg/ac/ac	6 Nov 2004 11:46:35 -0000	1.4
  @@ -1,9 +1,9 @@
   #!/usr/opkg/bin/perl -w
   ##
   ##  OSSP ac -- Auto Connection
  -##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2003 Cable & Wireless Germany <http://www.cw.com/de>
  -##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2004 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2003-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of OSSP ac, a tool for automated login
   ##  sessions which can be found at http://www.ossp.org/pkg/tool/ac/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ac/ac.bash
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ac.bash
  --- ossp-pkg/ac/ac.bash	29 May 2003 09:26:21 -0000	1.1
  +++ ossp-pkg/ac/ac.bash	6 Nov 2004 11:46:35 -0000	1.2
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP ac -- Auto Connection
  -##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/> 
  -##  Copyright (c) 2003 Cable & Wireless Germany <http://www.cw.com/de> 
  -##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2003-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2004 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2003-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of OSSP ac, a tool for automated login
   ##  sessions which can be found at http://www.ossp.org/pkg/tool/ac/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ac/ac.pod
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ac.pod
  --- ossp-pkg/ac/ac.pod	29 May 2003 09:26:21 -0000	1.1
  +++ ossp-pkg/ac/ac.pod	6 Nov 2004 11:46:35 -0000	1.2
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP ac -- Auto Connection
  -##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/> 
  -##  Copyright (c) 2003 Cable & Wireless Germany <http://www.cw.com/de> 
  -##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2003-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2004 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2003-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of OSSP ac, a tool for automated login
   ##  sessions which can be found at http://www.ossp.org/pkg/tool/ac/.
  @@ .

From ossp-cvs-owner@ossp.org  Sat Nov  6 12:48:10 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F2F6B764E9; Sat,  6 Nov 2004 12:48:09 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ac/ ac
Message-Id: <20041106114809.F2F6B764E9@mail.ossp.org>
Date: Sat,  6 Nov 2004 12:48:09 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Nov-2004 12:48:09
  Branch: HEAD                             Handle: 2004110611480900

  Modified files:
    ossp-pkg/ac             ac

  Log:
    no longer true because Curses::UI vendor took over my RSE patch set
    some time ago

  Summary:
    Revision    Changes     Path
    1.5         +0  -2      ossp-pkg/ac/ac
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ac/ac
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ac
  --- ossp-pkg/ac/ac	6 Nov 2004 11:46:35 -0000	1.4
  +++ ossp-pkg/ac/ac	6 Nov 2004 11:48:09 -0000	1.5
  @@ -31,8 +31,6 @@
   $|++;
   
   #   load a plethora of Perl modules
  -#   (this really requires OpenPKG because of
  -#   patches in perl-curses for Curses::UI!)
   use IO::File;             # from OpenPKG "perl"
   use POSIX;                # from OpenPKG "perl"
   use Getopt::Long;         # from OpenPKG "perl"
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov  8 16:25:53 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 527F7764D1; Mon,  8 Nov 2004 16:25:52 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/quos/ openpkg.sql
Message-Id: <20041108152552.527F7764D1@mail.ossp.org>
Date: Mon,  8 Nov 2004 16:25:52 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Nov-2004 16:25:51
  Branch: HEAD                             Handle: 2004110815255000

  Modified files:
    ossp-pkg/quos           openpkg.sql

  Log:
    fine-tune and fix SQL schema

  Summary:
    Revision    Changes     Path
    1.2         +12 -28     ossp-pkg/quos/openpkg.sql
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/openpkg.sql
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 openpkg.sql
  --- ossp-pkg/quos/openpkg.sql	25 Oct 2004 14:35:11 -0000	1.1
  +++ ossp-pkg/quos/openpkg.sql	8 Nov 2004 15:25:50 -0000	1.2
  @@ -25,12 +25,12 @@
   --
   
   CREATE TABLE quos_rdf (
  -    rd_id           BIGSERIAL UNIQUE NOT NULL PRIMARY KEY,
  +    rd_id           INTEGER UNIQUE NOT NULL PRIMARY KEY,
       rd_url          TEXT
   );
   
   CREATE TABLE quos_package (
  -    pk_id           BIGSERIAL UNIQUE NOT NULL PRIMARY KEY,
  +    pk_id           INTEGER UNIQUE NOT NULL PRIMARY KEY,
       pk_name         TEXT,
       pk_version      TEXT,
       pk_release      TEXT,
  @@ -42,58 +42,42 @@
       pk_url          TEXT,
       pk_vendor       TEXT,
       pk_description  TEXT,
  -    pk_rdf          BIGINT UNIQUE NOT NULL
  +    pk_rdf          INTEGER NOT NULL
                       REFERENCES quos_rdf (rd_id)
                       MATCH FULL DEFERRABLE
   );
   
   CREATE TABLE quos_buildprereq (
  -    bp_id           BIGINT UNIQUE NOT NULL
  +    bp_id           INTEGER NOT NULL
                       REFERENCES quos_package (pk_id)
  -                    MATCH FULL DEFERRABLE
  -                    PRIMARY KEY,
  +                    MATCH FULL DEFERRABLE,
       bp_key          TEXT,         
       bp_op           TEXT,
  -    bp_val          TEXT,
  -    bp_rdf          BIGINT UNIQUE NOT NULL
  -                    REFERENCES quos_rdf (rd_id)
  -                    MATCH FULL DEFERRABLE
  +    bp_val          TEXT
   );
   
   CREATE TABLE quos_prereq (
  -    rp_id           BIGINT UNIQUE NOT NULL
  +    rp_id           INTEGER NOT NULL
                       REFERENCES quos_package (pk_id)
  -                    MATCH FULL DEFERRABLE
  -                    PRIMARY KEY,
  +                    MATCH FULL DEFERRABLE,
       rp_key          TEXT,         
       rp_op           TEXT,
       rp_val          TEXT
  -    rp_rdf          BIGINT UNIQUE NOT NULL
  -                    REFERENCES quos_rdf (rd_id)
  -                    MATCH FULL DEFERRABLE
   );
   
   CREATE TABLE quos_provide (
  -    pr_id           BIGINT UNIQUE NOT NULL
  +    pr_id           INTEGER NOT NULL
                       REFERENCES quos_package (pk_id)
  -                    MATCH FULL DEFERRABLE
  -                    PRIMARY KEY,
  +                    MATCH FULL DEFERRABLE,
       pr_key          TEXT,         
       pr_op           TEXT,
       pr_val          TEXT
  -    pr_rdf          BIGINT UNIQUE NOT NULL
  -                    REFERENCES quos_rdf (rd_id)
  -                    MATCH FULL DEFERRABLE
   );
   
   CREATE TABLE quos_source (
  -    sr_id           BIGINT UNIQUE NOT NULL
  +    sr_id           INTEGER NOT NULL
                       REFERENCES quos_package (p_id)
  -                    MATCH FULL DEFERRABLE
  -                    PRIMARY KEY,
  +                    MATCH FULL DEFERRABLE,
       sr_url          TEXT
  -    sr_rdf          BIGINT UNIQUE NOT NULL
  -                    REFERENCES quos_rdf (rd_id)
  -                    MATCH FULL DEFERRABLE
   );
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov  8 16:26:02 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4156A76504; Mon,  8 Nov 2004 16:26:02 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/quos/ openpkg-rdf2sql.pl
Message-Id: <20041108152602.4156A76504@mail.ossp.org>
Date: Mon,  8 Nov 2004 16:26:02 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Nov-2004 16:26:02
  Branch: HEAD                             Handle: 2004110815260100

  Modified files:
    ossp-pkg/quos           openpkg-rdf2sql.pl

  Log:
    first cut for RDF to SQL translator

  Summary:
    Revision    Changes     Path
    1.2         +101 -1     ossp-pkg/quos/openpkg-rdf2sql.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/openpkg-rdf2sql.pl
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 openpkg-rdf2sql.pl
  --- ossp-pkg/quos/openpkg-rdf2sql.pl	25 Oct 2004 14:35:11 -0000	1.1
  +++ ossp-pkg/quos/openpkg-rdf2sql.pl	8 Nov 2004 15:26:01 -0000	1.2
  @@ -30,8 +30,108 @@
   use XML::Parser;
   use DBI;
   use DBD::SQLite;
  +use Data::Dumper;
  +use XML::Simple;
   
  -#   ...FIXME...
  +#   configure optional debugging
  +$Data::Dumper::Purity = 1;
  +$Data::Dumper::Indent = 1;
  +$Data::Dumper::Terse  = 1;
  +
  +my $rdf = XML::Simple::XMLin(
  +    "openpkg.rdf",
  +    KeepRoot     => 1,
  +    ForceContent => 0,
  +    ForceArray   => 1,
  +);
  +#print Dumper($xml);
  +#exit(0);
  +
  +#   connect to database
  +my $db = DBI->connect("dbi:SQLite:dbname=openpkg.db", "", "",
  +                      { RaiseError => 1, AutoCommit => 1 });
  +
  +#   prepare SQL commands
  +my $sql = {};
  +$sql->{-rdf} = $db->prepare(
  +    "INSERT INTO quos_rdf (rd_url) VALUES (?);"
  +);
  +$sql->{-package} = $db->prepare(
  +    "INSERT INTO quos_package" .
  +    " (pk_name, pk_version, pk_release, pk_distribution, pk_group," .
  +    "  pk_license, pk_packager, pk_summary, pk_url, pk_vendor, pk_description, pk_rdf)" .
  +    " VALUES (?,?,?,?,?,?,?,?,?,?,?,(SELECT MAX(rd_id) FROM quos_rdf));\n"
  +);
  +$sql->{-buildprereq} = $db->prepare(
  +    "INSERT INTO quos_buildprereq" .
  +    " (bp_id, bp_key, bp_op, bp_val)" .
  +    " VALUES ((SELECT MAX(pk_id) FROM quos_package),?,?,?);" 
  +);
  +$sql->{-prereq} = $db->prepare(
  +    "INSERT INTO quos_prereq" .
  +    " (rp_id, rp_key, rp_op, rp_val)" .
  +    " VALUES ((SELECT MAX(pk_id) FROM quos_package),?,?,?);" 
  +);
  +$sql->{-provide} = $db->prepare(
  +    "INSERT INTO quos_provide" .
  +    " (pr_id, pr_key, pr_op, pr_val)" .
  +    " VALUES ((SELECT MAX(pk_id) FROM quos_package),?,?,?);" 
  +);
  +$sql->{-source} = $db->prepare(
  +    "INSERT INTO quos_source" .
  +    " (sr_id, sr_url)" .
  +    " VALUES ((SELECT MAX(pk_id) FROM quos_package),?);" 
  +);
  +
  +#   iterate over XML/RDF data structure
  +foreach my $repo (@{$rdf->{'rdf:RDF'}->[0]->{'Repository'}}) {
  +    my $rd_url = $repo->{'rdf:resource'};
  +
  +    #   store repository information
  +    $db->begin_work();
  +    $sql->{-rdf}->execute($rd_url);
  +
  +    #   interate over all packages in a repository
  +    foreach my $desc (@{$repo->{'rdf:Description'}}) {
  +        #   store simple (single-value) properties of a package
  +        my $prop = {};
  +        foreach my $attr (qw(
  +            Name Version Release Distribution Group License
  +            Packager Summary URL Vendor Description
  +        )) {
  +            $prop->{$attr} = $desc->{$attr}->[0];
  +        }
  +        $sql->{-package}->execute(
  +            $prop->{'Name'}, $prop->{'Version'}, $prop->{'Release'}, $prop->{'Distribution'}, $prop->{'Group'},
  +            $prop->{'License'}, $prop->{'Packager'}, $prop->{'Summary'}, $prop->{'URL'}, $prop->{'Vendor'},
  +            $prop->{'Description'}
  +        );
  +
  +        #   store complex (multi-value) properties of a package
  +        foreach my $attr (qw(
  +            BuildPreReq
  +            PreReq
  +            Provide
  +        )) {
  +            foreach my $el (@{$desc->{$attr}->[0]->{'rdf:bag'}->[0]->{'resource'}}) {
  +                my ($key, $op, $val) = ($el, '=', '*');
  +                if (ref($key) eq 'HASH') {
  +                    $key = $el->{'content'};
  +                    $op  = (grep { $_ ne 'content' } keys(%{$el}))[0];
  +                    $val = $el->{$op};
  +                }
  +                $sql->{"-".lc($attr)}->execute($key, $op, $val);
  +            }
  +        }
  +        foreach my $url (@{$desc->{'Source'}->[0]->{'rdf:bag'}->[0]->{'rdf:li'}}) {
  +            $sql->{-source}->execute($url);
  +        }
  +    }
  +    $db->commit();
  +}
  +
  +#   disconnect from database
  +$db->disconnect();
   
   __END__
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov  8 16:33:00 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 194CA764AC; Mon,  8 Nov 2004 16:33:00 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/quos/ openpkg-rdf2sql.pl
Message-Id: <20041108153300.194CA764AC@mail.ossp.org>
Date: Mon,  8 Nov 2004 16:33:00 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Nov-2004 16:32:59
  Branch: HEAD                             Handle: 2004110815325900

  Modified files:
    ossp-pkg/quos           openpkg-rdf2sql.pl

  Log:
    use strict-OO style

  Summary:
    Revision    Changes     Path
    1.3         +3  -1      ossp-pkg/quos/openpkg-rdf2sql.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/openpkg-rdf2sql.pl
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 openpkg-rdf2sql.pl
  --- ossp-pkg/quos/openpkg-rdf2sql.pl	8 Nov 2004 15:26:01 -0000	1.2
  +++ ossp-pkg/quos/openpkg-rdf2sql.pl	8 Nov 2004 15:32:59 -0000	1.3
  @@ -38,12 +38,14 @@
   $Data::Dumper::Indent = 1;
   $Data::Dumper::Terse  = 1;
   
  -my $rdf = XML::Simple::XMLin(
  +my $xml = new XML::Simple;
  +my $rdf = $xml->XMLin(
       "openpkg.rdf",
       KeepRoot     => 1,
       ForceContent => 0,
       ForceArray   => 1,
   );
  +undef $xml;
   #print Dumper($xml);
   #exit(0);
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Nov  9 11:21:04 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C5DB9764AC; Tue,  9 Nov 2004 11:21:03 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/as/as-doc/ accounts.txt
Message-Id: <20041109102103.C5DB9764AC@mail.ossp.org>
Date: Tue,  9 Nov 2004 11:21:03 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Nov-2004 11:21:03
  Branch: HEAD                             Handle: 2004110910210200

  Modified files:
    ossp-pkg/as/as-doc      accounts.txt

  Log:
    add OpenPKG 2.2 account

  Summary:
    Revision    Changes     Path
    1.52        +1  -0      ossp-pkg/as/as-doc/accounts.txt
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/as/as-doc/accounts.txt
  ============================================================================
  $ cvs diff -u -r1.51 -r1.52 accounts.txt
  --- ossp-pkg/as/as-doc/accounts.txt	25 Oct 2004 13:16:41 -0000	1.51
  +++ ossp-pkg/as/as-doc/accounts.txt	9 Nov 2004 10:21:02 -0000	1.52
  @@ -79,6 +79,7 @@
   R /de/is/cmvc/troubleshooting             # [I] Change Management & Version Control: Troubleshooting
   R /de/is/cmvc/documentation               # [I] Change Management & Version Control: Documentation
   R /de/is/cmvc/policy                      # [I] Change Management & Version Control: Policy Enforcement
  +R /de/is/cmvc/prj/o22                     # [I] Change Management & Version Control: Projects: OpenPKG 2.2
   
   ##
   ##  C&W DE, Combined Group (New Listings)
  @@ .

From ossp-cvs-owner@ossp.org  Sun Nov 14 19:38:56 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 01ED576504; Sun, 14 Nov 2004 19:38:55 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/perl/ .cvsignore MANIFEST Makefile.PL cfg.pm ...
Message-Id: <20041114183855.01ED576504@mail.ossp.org>
Date: Sun, 14 Nov 2004 19:38:55 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   14-Nov-2004 19:38:55
  Branch: HEAD                             Handle: 2004111418385300

  Added files:
    ossp-pkg/cfg/perl       .cvsignore MANIFEST Makefile.PL cfg.pm cfg.pod
                            cfg.tm cfg.ts cfg.xs

  Log:
    Initial cut for Perl bindings to OSSP cfg. Still partly broken, of
    course ;-)

  Summary:
    Revision    Changes     Path
    1.1         +5  -0      ossp-pkg/cfg/perl/.cvsignore
    1.1         +7  -0      ossp-pkg/cfg/perl/MANIFEST
    1.1         +49 -0      ossp-pkg/cfg/perl/Makefile.PL
    1.1         +197 -0     ossp-pkg/cfg/perl/cfg.pm
    1.1         +107 -0     ossp-pkg/cfg/perl/cfg.pod
    1.1         +47 -0      ossp-pkg/cfg/perl/cfg.tm
    1.1         +75 -0      ossp-pkg/cfg/perl/cfg.ts
    1.1         +607 -0     ossp-pkg/cfg/perl/cfg.xs
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/.cvsignore
  ============================================================================
  $ cvs diff -u -r0 -r1.1 .cvsignore
  --- /dev/null	2004-11-14 19:38:53 +0100
  +++ .cvsignore	2004-11-14 19:38:54 +0100
  @@ -0,0 +1,5 @@
  +Makefile
  +blib
  +pm_to_blib
  +cfg.bs
  +cfg.c
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/MANIFEST
  ============================================================================
  $ cvs diff -u -r0 -r1.1 MANIFEST
  --- /dev/null	2004-11-14 19:38:53 +0100
  +++ MANIFEST	2004-11-14 19:38:54 +0100
  @@ -0,0 +1,7 @@
  +MANIFEST
  +Makefile.PL
  +cfg.xs
  +cfg.tm
  +cfg.pm
  +cfg.pod
  +cfg.ts
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/Makefile.PL
  ============================================================================
  $ cvs diff -u -r0 -r1.1 Makefile.PL
  --- /dev/null	2004-11-14 19:38:53 +0100
  +++ Makefile.PL	2004-11-14 19:38:54 +0100
  @@ -0,0 +1,49 @@
  +##
  +##  OSSP cfg - Configuration Parsing
  +##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
  +##
  +##  This file is part of OSSP cfg, a configuration parsing library which
  +##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  Makefile.PL: Perl MakeMaker build source procedure
  +##
  +
  +use 5.008;
  +use Config;
  +use ExtUtils::MakeMaker;
  +
  +WriteMakefile(
  +    NAME              => 'OSSP::cfg',
  +    VERSION_FROM      => 'cfg.pm',
  +    ABSTRACT_FROM     => 'cfg.pod',
  +    PREREQ_PM         => {},
  +    LIBS              => [ '-L../.libs -lcfg' ],
  +    DEFINE            => '',
  +    INC               => '-I. -I..',
  +    PM                => { 'cfg.pm'  => '$(INST_LIBDIR)/cfg.pm',
  +                           'cfg.pod' => '$(INST_LIBDIR)/cfg.pod' },
  +    TYPEMAPS          => [ 'cfg.tm' ],
  +    test              => { TESTS => 'cfg.ts' },
  +    NO_META           => 1,
  +);
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/cfg.pm
  ============================================================================
  $ cvs diff -u -r0 -r1.1 cfg.pm
  --- /dev/null	2004-11-14 19:38:53 +0100
  +++ cfg.pm	2004-11-14 19:38:54 +0100
  @@ -0,0 +1,197 @@
  +##
  +##  OSSP cfg - Configuration Parsing
  +##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
  +##
  +##  This file is part of OSSP cfg, a configuration parsing library which
  +##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  cfg.pm: Perl Binding (Perl part)
  +##
  +
  +package OSSP::cfg;
  +
  +use 5.008;
  +use strict;
  +use warnings;
  +use Carp;
  +use XSLoader;
  +use Exporter;
  +
  +##
  +##  API Definition
  +##
  +
  +#   API version
  +our $VERSION = do { my @v = ('1.1.0' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
  +
  +#   API inheritance
  +our @ISA = qw(Exporter);
  +
  +#   API symbols
  +my $symbols = {
  +    'const' => [qw(
  +        CFG_OK
  +        CFG_ERR_ARG
  +        CFG_ERR_USE
  +        CFG_ERR_MEM
  +        CFG_ERR_SYS
  +        CFG_ERR_FMT
  +        CFG_ERR_INT
  +        CFG_ERR_SYN
  +        CFG_ERR_NDE
  +        CFG_FMT_CFG
  +        CFG_FMT_XML
  +        CFG_NODE_TYPE_SEQ
  +        CFG_NODE_TYPE_DIR
  +        CFG_NODE_TYPE_OPT
  +        CFG_NODE_TYPE_ARG
  +        CFG_NODE_ATTR_PARENT
  +        CFG_NODE_ATTR_LBROTH
  +        CFG_NODE_ATTR_RBROTH
  +        CFG_NODE_ATTR_CHILD1
  +        CFG_NODE_ATTR_CHILDL
  +        CFG_NODE_ATTR_CHILDS
  +        CFG_NODE_ATTR_NODES
  +        CFG_NODE_ATTR_DEPTH
  +        CFG_NODE_ATTR_SRCNAME
  +        CFG_NODE_ATTR_SRCPOS
  +        CFG_NODE_ATTR_TYPE
  +        CFG_NODE_ATTR_TOKEN
  +        CFG_NODE_ATTR_DATA
  +        CFG_DATA_TYPE_PTR
  +        CFG_DATA_TYPE_STR
  +        CFG_DATA_TYPE_INT
  +        CFG_DATA_TYPE_FLT
  +        CFG_DATA_CTRL_CLONE
  +        CFG_DATA_CTRL_DESTROY
  +        CFG_DATA_ATTR_TYPE
  +        CFG_DATA_ATTR_VALUE
  +        CFG_DATA_ATTR_CTRL
  +    )],
  +    'func' => [qw(
  +        cfg_create
  +        cfg_destroy
  +        cfg_error
  +        cfg_version
  +        cfg_import
  +        cfg_export
  +        cfg_node_create
  +        cfg_node_destroy
  +        cfg_node_clone
  +        cfg_node_set
  +        cfg_node_get
  +        cfg_node_root
  +        cfg_node_select
  +        cfg_node_find
  +        cfg_node_apply
  +        cfg_node_cmp
  +        cfg_node_link
  +        cfg_node_unlink
  +        cfg_data_set
  +        cfg_data_get
  +        cfg_data_ctrl
  +    )]
  +};
  +
  +#   API symbol exportation
  +our %EXPORT_TAGS = (
  +    'all'   => [ @{$symbols->{'const'}}, @{$symbols->{'func'}} ],
  +    'const' => [ @{$symbols->{'const'}} ],
  +    'func'  => [ @{$symbols->{'func'}}  ]
  +);
  +our @EXPORT_OK = @{$EXPORT_TAGS{'all'}};
  +our @EXPORT    = ();
  +
  +##
  +##  High-Level Perl Module OO-style API
  +##  (just an OO wrapper around the C-style API)
  +##
  +
  +#   constructor
  +sub new {
  +    my $proto = shift;
  +    my $class = ref($proto) || $proto;
  +    my $self = {};
  +    bless ($self, $class);
  +    $self->{-cfg} = undef;
  +    $self->{-rc}   = $self->CFG_OK;
  +    my $rc = cfg_create($self->{-cfg});
  +    if ($rc != $self->CFG_OK) {
  +        croak(sprintf("OSSP::cfg::new: cfg_create: %s (%d)", cfg_error($rc), $rc));
  +        return undef;
  +    }
  +    return $self;
  +}
  +
  +#   destructor
  +sub DESTROY ($) {
  +    my ($self) = @_;
  +    $self->{-rc} = cfg_destroy($self->{-cfg}) if (defined($self->{-cfg}));
  +    if ($self->{-rc} != $self->CFG_OK) {
  +        carp(sprintf("OSSP::cfg::DESTROY: cfg_destroy: %s (%d)", cfg_error($self->{-rc}), $self->{-rc}));
  +        return;
  +    }
  +    $self->{-cfg} = undef;
  +    $self->{-rc}   = undef;
  +    return;
  +}
  +
  +sub FIXME ($$) {
  +    my ($self, $name) = @_;
  +    $self->{-rc} = cfg_load($self->{-cfg}, $name);
  +    return ($self->{-rc} == $self->CFG_OK);
  +}
  +
  +sub error ($;$) {
  +    my ($self, $rc) = @_;
  +    $rc = $self->{-rc} if (not defined($rc));
  +    return wantarray ? (cfg_error($rc), $rc) : cfg_error($rc);
  +}
  +
  +sub version (;$) {
  +    my ($self) = @_;
  +    return cfg_version();
  +}
  +
  +##
  +##  Low-Level Perl XS C-style API
  +##  (actually just the activation of the XS part)
  +##
  +
  +#   auto-loading constants
  +sub AUTOLOAD {
  +    my $constname;
  +    our $AUTOLOAD;
  +    ($constname = $AUTOLOAD) =~ s/.*:://;
  +    croak "&OSSP::cfg::constant not defined" if ($constname eq 'constant');
  +    my ($error, $val) = constant($constname);
  +    croak $error if ($error);
  +    { no strict 'refs'; *$AUTOLOAD = sub { $val }; }
  +    goto &$AUTOLOAD;
  +}
  +
  +#   static-loading functions
  +XSLoader::load('OSSP::cfg', $VERSION);
  +
  +1;
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/cfg.pod
  ============================================================================
  $ cvs diff -u -r0 -r1.1 cfg.pod
  --- /dev/null	2004-11-14 19:38:53 +0100
  +++ cfg.pod	2004-11-14 19:38:54 +0100
  @@ -0,0 +1,107 @@
  +##
  +##  OSSP cfg - Configuration Parsing
  +##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
  +##
  +##  This file is part of OSSP cfg, a configuration parsing library which
  +##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  cfg.pm: Perl Binding (Perl/POD part)
  +##
  +
  +=pod
  +
  +=head1 NAME
  +
  +OSSP::cfg - B<OSSP cfg> Perl Binding
  +
  +=head1 DESCRIPTION
  +
  +B<OSSP::cfg> is the Perl binding to the B<OSSP cfg> API.
  +
  +B<OSSP cfg> is ...
  +
  +B<OSSP::cfg> provides two Perl APIs:
  +
  +=head2 OO-STYLE API
  +
  +The OO-style API is a wrapper around the C-style API and intended for
  +high-level and regular programming.
  +
  +=over 4
  +
  +=item C<use OSSP::cfg;>
  +
  +=item C<my $cfg = >B<new>C< OSSP::cfg;>
  +
  +=item C<$cfg-E<gt>>B<FIXME>C<($name);>
  +
  +=item C<undef $cfg;>
  +
  +=back
  +
  +=head2 C-STYLE API
  +
  +The C-style API is a direct mapping of the B<OSSP cfg> ISO-C API to Perl
  +and is intended for low-level programming. See cfg(3) for a description
  +of the functions and their expected arguments.
  +
  +=over 4
  +
  +=item C<use OSSP::cfg qw(:all);>
  +
  +=item C<my $cfg; $rc = >B<cfg_create>C<($cfg);>
  +
  +=item C<$str = >B<cfg_FIXME>C<($rc);>
  +
  +=item C<$str = >B<cfg_error>C<($rc);>
  +
  +=item C<$ver = >B<cfg_version>C<();>
  +
  +=item C<$rc = >B<cfg_destroy>C<($cfg);>
  +
  +=back
  +
  +Additionally, the following constants are exported for use in C<$rc>, C<$mode>, C<$fmt> and C<$ver>:
  +
  +C<CFG_RC_OK>,
  +C<CFG_RC_ARG>,
  +C<CFG_RC_MEM>,
  +C<CFG_RC_SYS>,
  +C<CFG_RC_INT>,
  +C<CFG_RC_IMP>.
  +
  +=head1 EXAMPLES
  +
  +FIXME
  +
  +=head1 SEE ALSO
  +
  +cfg(3), cfg-config(1).
  +
  +=head1 HISTORY
  +
  +The Perl binding B<OSSP::cfg> to B<OSSP cfg> was implemented in
  +November 2004 by Ralf S. Engelschall E<lt>rse@engelschall.comE<gt>.
  +
  +=cut
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/cfg.tm
  ============================================================================
  $ cvs diff -u -r0 -r1.1 cfg.tm
  --- /dev/null	2004-11-14 19:38:53 +0100
  +++ cfg.tm	2004-11-14 19:38:55 +0100
  @@ -0,0 +1,47 @@
  +##
  +##  OSSP cfg - Configuration Parsing
  +##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
  +##
  +##  This file is part of OSSP cfg, a configuration parsing library which
  +##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  cfg.tm: Perl XS typemap for xsubpp(1)
  +##
  +
  +TYPEMAP
  +cfg_rc_t        T_IV
  +cfg_fmt_t       T_IV
  +cfg_node_type_t T_IV
  +cfg_node_attr_t T_IV
  +cfg_data_type_t T_IV
  +cfg_data_ctrl_t T_IV
  +cfg_data_attr_t T_IV
  +cfg_t *         T_PTRREF
  +cfg_t **        T_PTRREF
  +cfg_node_t *    T_PTRREF
  +cfg_node_t **   T_PTRREF
  +cfg_node_t ***  T_PTRREF
  +cfg_data_t *    T_PTRREF
  +cfg_data_cb_t   T_PTRREF
  +char **         T_PTRREF
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/cfg.ts
  ============================================================================
  $ cvs diff -u -r0 -r1.1 cfg.ts
  --- /dev/null	2004-11-14 19:38:53 +0100
  +++ cfg.ts	2004-11-14 19:38:55 +0100
  @@ -0,0 +1,75 @@
  +##
  +##  OSSP cfg - Configuration Parsing
  +##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
  +##
  +##  This file is part of OSSP cfg, a configuration parsing library which
  +##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  cfg.ts: Perl Binding (Perl test suite part)
  +##
  +
  +use Test::More tests => 7;
  +
  +##
  +##  Module Loading
  +##
  +
  +use IO::File;
  +
  +BEGIN {
  +    use_ok('OSSP::cfg')
  +};
  +BEGIN {
  +    use OSSP::cfg qw(:all);
  +    ok(defined(CFG_VERSION), "CFG_VERSION");
  +    ok(CFG_OK == 0, "CFG_OK");
  +};
  +
  +##
  +##  C-Style API
  +##
  +
  +my ($rc, $cfg);
  +
  +$rc = cfg_create($cfg);
  +ok($rc == CFG_OK, "cfg_create");
  +
  +my ($node, $in_ptr, $in_len);
  +my $io = new IO::File "../cfg_test.cfg" or die;
  +my $str; { local $/; $str = <$io>; }
  +$io->close();
  +$rc = cfg_import($cfg, $node, CFG_FMT_CFG, $str, undef);
  +ok($rc == CFG_OK, "cfg_import");
  +
  +$rc = cfg_destroy($cfg);
  +ok($rc == CFG_OK, "cfg_destroy");
  +
  +##
  +##  OO-style API
  +##
  +
  +$cfg = new OSSP::cfg;
  +ok(defined($cfg), "new OSSP::cfg");
  +
  +undef $cfg;
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/cfg.xs
  ============================================================================
  $ cvs diff -u -r0 -r1.1 cfg.xs
  --- /dev/null	2004-11-14 19:38:53 +0100
  +++ cfg.xs	2004-11-14 19:38:55 +0100
  @@ -0,0 +1,607 @@
  +/*
  +**  OSSP cfg - Configuration Parsing
  +**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
  +**
  +**  This file is part of OSSP cfg, a configuration parsing library which
  +**  can be found at http://www.ossp.org/pkg/lib/cfg/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  cfg.xs: Perl Binding (Perl/XS part)
  +*/
  +
  +#include "EXTERN.h"
  +#include "perl.h"
  +#include "XSUB.h"
  +
  +#include "cfg.h"
  +
  +/* find/apply callback context */
  +typedef struct {
  +    SV *fct;
  +    SV *ctx;
  +} cb_ctx_t;
  +
  +/* find/apply callback wrapper */
  +static cfg_rc_t cb_fct(cfg_t *cfg, cfg_node_t *node, void *_ctx)
  +{
  +    cb_ctx_t *ctx = (cb_ctx_t *)ctx;
  +    cfg_rc_t rc;
  +    dSP;
  +
  +    ENTER; SAVETMPS;
  +    PUSHMARK(SP); 
  +    XPUSHs(sv_2mortal(newSViv(PTR2IV(cfg))));
  +    XPUSHs(sv_2mortal(newSViv(PTR2IV(node))));
  +    XPUSHs(ctx->ctx);
  +    PUTBACK;
  +    if (call_sv(ctx->fct, G_SCALAR) != 1)
  +        croak("cfg_node_find: expected single scalar as return value from callback");
  +    SPAGAIN;
  +    rc = (cfg_rc_t)SvIV(POPs);
  +    FREETMPS; LEAVE;
  +    return rc;
  +}
  +
  +MODULE = OSSP::cfg PACKAGE = OSSP::cfg
  +
  +void
  +constant(sv)
  +    PREINIT:
  +        dXSTARG;
  +        STRLEN          len;
  +        int             i;
  +        static struct {
  +            const char *name;
  +            int         value;
  +        } constant_table[] = {
  +            { "CFG_OK",                CFG_OK                },
  +            { "CFG_ERR_ARG",           CFG_ERR_ARG           },
  +            { "CFG_ERR_USE",           CFG_ERR_USE           },
  +            { "CFG_ERR_MEM",           CFG_ERR_MEM           },
  +            { "CFG_ERR_SYS",           CFG_ERR_SYS           },
  +            { "CFG_ERR_FMT",           CFG_ERR_FMT           },
  +            { "CFG_ERR_INT",           CFG_ERR_INT           },
  +            { "CFG_ERR_SYN",           CFG_ERR_SYN           },
  +            { "CFG_ERR_NDE",           CFG_ERR_NDE           },
  +            { "CFG_FMT_CFG",           CFG_FMT_CFG           },
  +            { "CFG_FMT_XML",           CFG_FMT_XML           },
  +            { "CFG_NODE_TYPE_SEQ",     CFG_NODE_TYPE_SEQ     },
  +            { "CFG_NODE_TYPE_DIR",     CFG_NODE_TYPE_DIR     },
  +            { "CFG_NODE_TYPE_OPT",     CFG_NODE_TYPE_OPT     },
  +            { "CFG_NODE_TYPE_ARG",     CFG_NODE_TYPE_ARG     },
  +            { "CFG_NODE_ATTR_PARENT",  CFG_NODE_ATTR_PARENT  },
  +            { "CFG_NODE_ATTR_LBROTH",  CFG_NODE_ATTR_LBROTH  },
  +            { "CFG_NODE_ATTR_RBROTH",  CFG_NODE_ATTR_RBROTH  },
  +            { "CFG_NODE_ATTR_CHILD1",  CFG_NODE_ATTR_CHILD1  },
  +            { "CFG_NODE_ATTR_CHILDL",  CFG_NODE_ATTR_CHILDL  },
  +            { "CFG_NODE_ATTR_CHILDS",  CFG_NODE_ATTR_CHILDS  },
  +            { "CFG_NODE_ATTR_NODES",   CFG_NODE_ATTR_NODES   },
  +            { "CFG_NODE_ATTR_DEPTH",   CFG_NODE_ATTR_DEPTH   },
  +            { "CFG_NODE_ATTR_SRCNAME", CFG_NODE_ATTR_SRCNAME },
  +            { "CFG_NODE_ATTR_SRCPOS",  CFG_NODE_ATTR_SRCPOS  },
  +            { "CFG_NODE_ATTR_TYPE",    CFG_NODE_ATTR_TYPE    },
  +            { "CFG_NODE_ATTR_TOKEN",   CFG_NODE_ATTR_TOKEN   },
  +            { "CFG_NODE_ATTR_DATA",    CFG_NODE_ATTR_DATA    },
  +            { "CFG_DATA_TYPE_PTR",     CFG_DATA_TYPE_PTR     },
  +            { "CFG_DATA_TYPE_STR",     CFG_DATA_TYPE_STR     },
  +            { "CFG_DATA_TYPE_INT",     CFG_DATA_TYPE_INT     },
  +            { "CFG_DATA_TYPE_FLT",     CFG_DATA_TYPE_FLT     },
  +            { "CFG_DATA_CTRL_CLONE",   CFG_DATA_CTRL_CLONE   },
  +            { "CFG_DATA_CTRL_DESTROY", CFG_DATA_CTRL_DESTROY },
  +            { "CFG_DATA_ATTR_TYPE",    CFG_DATA_ATTR_TYPE    },
  +            { "CFG_DATA_ATTR_VALUE",   CFG_DATA_ATTR_VALUE   },
  +            { "CFG_DATA_ATTR_CTRL",    CFG_DATA_ATTR_CTRL    }
  +        };
  +    INPUT:
  +        SV         *sv;
  +        const char *s = SvPV(sv, len);
  +    PPCODE:
  +        for (i = 0; i < sizeof(constant_table)/sizeof(constant_table[0]); i++) {
  +            if (strcmp(s, constant_table[i].name) == 0) {
  +                EXTEND(SP, 1);
  +                PUSHs(&PL_sv_undef);
  +                PUSHi(constant_table[i].value);
  +                break;
  +            }
  +        }
  +        if (i == sizeof(constant_table)/sizeof(constant_table[0])) {
  +            sv = sv_2mortal(newSVpvf("unknown contant OSSP::cfg::%s", s));
  +            PUSHs(sv);
  +        }
  +
  +cfg_rc_t
  +cfg_create(cfg)
  +    PROTOTYPE:
  +        $
  +    INPUT:
  +        cfg_t *&cfg = NO_INIT
  +    CODE:
  +        RETVAL = cfg_create(&cfg);
  +    OUTPUT:
  +        cfg
  +        RETVAL
  +
  +cfg_rc_t
  +cfg_destroy(cfg)
  +    PROTOTYPE:
  +        $
  +    INPUT:
  +        cfg_t *cfg
  +    CODE:
  +        RETVAL = cfg_destroy(cfg);
  +    OUTPUT:
  +        RETVAL
  +
  +cfg_rc_t
  +cfg_error(cfg,rc,error)
  +    PROTOTYPE:
  +        $$$
  +    INPUT:
  +        cfg_t *cfg
  +        cfg_rc_t rc
  +        char *&error = NO_INIT
  +    CODE:
  +        RETVAL = cfg_error(cfg, rc, &error);
  +    OUTPUT:
  +        error
  +        RETVAL
  +
  +long
  +cfg_version()
  +    PROTOTYPE:
  +    INPUT:
  +    CODE:
  +        RETVAL = cfg_version();
  +    OUTPUT:
  +        RETVAL
  +
  +cfg_rc_t
  +cfg_import(cfg,node,fmt,in_ptr,in_len)
  +    PROTOTYPE:
  +        $$$$$
  +    INPUT:
  +        cfg_t *cfg
  +        cfg_node_t *node
  +        cfg_fmt_t fmt
  +        const char *in_ptr
  +        size_t in_len
  +    CODE:
  +        if (ST(4) == &PL_sv_undef)
  +            in_len = sv_len(ST(3));
  +        RETVAL = cfg_import(cfg, node, fmt, in_ptr, in_len);
  +    OUTPUT:
  +        RETVAL
  +
  +cfg_rc_t
  +cfg_export(cfg,node,fmt,ex_ptr,ex_len)
  +    PROTOTYPE:
  +        $$$$$
  +    INPUT:
  +        cfg_t *cfg
  +        cfg_node_t *node
  +        cfg_fmt_t fmt
  +        char *&ex_ptr = NO_INIT
  +        size_t ex_len
  +    CODE:
  +        RETVAL = cfg_export(cfg, node, fmt, &ex_ptr, ex_len);
  +    OUTPUT:
  +        ex_ptr
  +        RETVAL
  +
  +cfg_rc_t
  +cfg_node_create(cfg,node)
  +    PROTOTYPE:
  +        $$
  +    INPUT:
  +        cfg_t *cfg
  +        cfg_node_t *&node = NO_INIT
  +    CODE:
  +        RETVAL = cfg_node_create(cfg, &node);
  +    OUTPUT:
  +        node
  +        RETVAL
  +
  +cfg_rc_t
  +cfg_node_destroy(cfg,node)
  +    PROTOTYPE:
  +        $$
  +    INPUT:
  +        cfg_t *cfg
  +        cfg_node_t *node
  +    CODE:
  +        RETVAL = cfg_node_destroy(cfg, node);
  +    OUTPUT:
  +        RETVAL
  +
  +cfg_rc_t
  +cfg_node_clone(cfg,node,node2)
  +    PROTOTYPE:
  +        $$$
  +    INPUT:
  +        cfg_t *cfg
  +        cfg_node_t *node
  +        cfg_node_t *&node2 = NO_INIT
  +    CODE:
  +        RETVAL = cfg_node_clone(cfg, node, &node2);
  +    OUTPUT:
  +        node2
  +        RETVAL
  +
  +cfg_rc_t
  +cfg_node_set(cfg,node,attr,va_arg1)
  +    CASE: (   (cfg_node_attr_t)SvIV(ST(2)) == CFG_NODE_ATTR_PARENT \
  +           || (cfg_node_attr_t)SvIV(ST(2)) == CFG_NODE_ATTR_LBROTH \
  +           || (cfg_node_attr_t)SvIV(ST(2)) == CFG_NODE_ATTR_RBROTH \
  +           || (cfg_node_attr_t)SvIV(ST(2)) == CFG_NODE_ATTR_CHILD1 \
  +           || (cfg_node_attr_t)SvIV(ST(2)) == CFG_NODE_ATTR_CHILDL  )
  +        INPUT:
  +            cfg_t *cfg
  +            cfg_node_t *node
  +            cfg_node_attr_t attr
  +            cfg_node_t *va_arg1
  +        CODE:
  +            RETVAL = cfg_node_set(cfg, node, attr, va_arg1);
  +        OUTPUT:
  +            RETVAL
  +    CASE: (   (cfg_node_attr_t)SvIV(ST(2)) == CFG_NODE_ATTR_CHILDS \
  +           || (cfg_node_attr_t)SvIV(ST(2)) == CFG_NODE_ATTR_NODES  \
  +           || (cfg_node_attr_t)SvIV(ST(2)) == CFG_NODE_ATTR_DEPTH  \
  +           || (cfg_node_attr_t)SvIV(ST(2)) == CFG_NODE_ATTR_SRCPOS  )
  +        INPUT:
  +            cfg_t *cfg
  +            cfg_node_t *node
  +            cfg_node_attr_t attr
  +            int va_arg1
  +        CODE:
  +            RETVAL = cfg_node_set(cfg, node, attr, va_arg1);
  +        OUTPUT:
  +            RETVAL
  +    CASE: (   (cfg_node_attr_t)SvIV(ST(2)) == CFG_NODE_ATTR_SRCNAME \
  +           || (cfg_node_attr_t)SvIV(ST(2)) == CFG_NODE_ATTR_TOKEN    )
  +        INPUT:
  +            cfg_t *cfg
  +            cfg_node_t *node
  +            cfg_node_attr_t attr
  +            char *va_arg1
  +        CODE:
  +            RETVAL = cfg_node_set(cfg, node, attr, va_arg1);
  +        OUTPUT:
  +            RETVAL
  +    CASE: ((cfg_node_attr_t)SvIV(ST(2)) == CFG_NODE_ATTR_TYPE)
  +        INPUT:
  +            cfg_t *cfg
  +            cfg_node_t *node
  +            cfg_node_attr_t attr
  +            cfg_node_type_t va_arg1
  +        CODE:
  +            RETVAL = cfg_node_set(cfg, node, attr, va_arg1);
  +        OUTPUT:
  +            RETVAL
  +    CASE: ((cfg_node_attr_t)SvIV(ST(2)) == CFG_NODE_ATTR_DATA)
  +        INPUT:
  +            cfg_t *cfg
  +            cfg_node_t *node
  +            cfg_node_attr_t attr
  +            cfg_data_t *va_arg1
  +        CODE:
  +            RETVAL = cfg_node_set(cfg, node, attr, va_arg1);
  +        OUTPUT:
  +            RETVAL
  +    CASE: 
  +        PROTOTYPE:
  +            $$$;$
  +        INPUT:
  +            cfg_t *cfg
  +            cfg_node_t *node
  +            cfg_node_attr_t attr
  +        CODE:
  +            RETVAL = cfg_node_set(cfg, node, attr);
  +        OUTPUT:
  +            RETVAL
  +
  +cfg_rc_t
  +cfg_node_get(cfg,node,attr,va_arg1)
  +    CASE: (   (cfg_node_attr_t)SvIV(ST(2)) == CFG_NODE_ATTR_PARENT \
  +           || (cfg_node_attr_t)SvIV(ST(2)) == CFG_NODE_ATTR_LBROTH \
  +           || (cfg_node_attr_t)SvIV(ST(2)) == CFG_NODE_ATTR_RBROTH \
  +           || (cfg_node_attr_t)SvIV(ST(2)) == CFG_NODE_ATTR_CHILD1 \
  +           || (cfg_node_attr_t)SvIV(ST(2)) == CFG_NODE_ATTR_CHILDL  )
  +        INPUT:
  +            cfg_t *cfg
  +            cfg_node_t *node
  +            cfg_node_attr_t attr
  +            cfg_node_t *&va_arg1 = NO_INIT
  +        CODE:
  +            RETVAL = cfg_node_set(cfg, node, attr, &va_arg1);
  +        OUTPUT:
  +            va_arg1
  +            RETVAL
  +    CASE: (   (cfg_node_attr_t)SvIV(ST(2)) == CFG_NODE_ATTR_CHILDS \
  +           || (cfg_node_attr_t)SvIV(ST(2)) == CFG_NODE_ATTR_NODES  \
  +           || (cfg_node_attr_t)SvIV(ST(2)) == CFG_NODE_ATTR_DEPTH  \
  +           || (cfg_node_attr_t)SvIV(ST(2)) == CFG_NODE_ATTR_SRCPOS  )
  +        INPUT:
  +            cfg_t *cfg
  +            cfg_node_t *node
  +            cfg_node_attr_t attr
  +            int &va_arg1 = NO_INIT
  +        CODE:
  +            RETVAL = cfg_node_set(cfg, node, attr, &va_arg1);
  +        OUTPUT:
  +            va_arg1
  +            RETVAL
  +    CASE: (   (cfg_node_attr_t)SvIV(ST(2)) == CFG_NODE_ATTR_SRCNAME \
  +           || (cfg_node_attr_t)SvIV(ST(2)) == CFG_NODE_ATTR_TOKEN    )
  +        INPUT:
  +            cfg_t *cfg
  +            cfg_node_t *node
  +            cfg_node_attr_t attr
  +            char *&va_arg1 = NO_INIT
  +        CODE:
  +            RETVAL = cfg_node_set(cfg, node, attr, &va_arg1);
  +        OUTPUT:
  +            va_arg1
  +            RETVAL
  +    CASE: ((cfg_node_attr_t)SvIV(ST(2)) == CFG_NODE_ATTR_TYPE)
  +        INPUT:
  +            cfg_t *cfg
  +            cfg_node_t *node
  +            cfg_node_attr_t attr
  +            cfg_node_type_t &va_arg1 = NO_INIT
  +        CODE:
  +            RETVAL = cfg_node_set(cfg, node, attr, &va_arg1);
  +        OUTPUT:
  +            va_arg1
  +            RETVAL
  +    CASE: ((cfg_node_attr_t)SvIV(ST(2)) == CFG_NODE_ATTR_DATA)
  +        INPUT:
  +            cfg_t *cfg
  +            cfg_node_t *node
  +            cfg_node_attr_t attr
  +            cfg_data_t *&va_arg1 = NO_INIT
  +        CODE:
  +            RETVAL = cfg_node_set(cfg, node, attr, &va_arg1);
  +        OUTPUT:
  +            va_arg1
  +            RETVAL
  +    CASE: 
  +        PROTOTYPE:
  +            $$$;$
  +        INPUT:
  +            cfg_t *cfg
  +            cfg_node_t *node
  +            cfg_node_attr_t attr
  +        CODE:
  +            RETVAL = cfg_node_set(cfg, node, attr);
  +        OUTPUT:
  +            RETVAL
  +
  +cfg_rc_t
  +cfg_node_root(cfg,node)
  +    PROTOTYPE:
  +        $$
  +    INPUT:
  +        cfg_t *cfg
  +        cfg_node_t *&node = NO_INIT
  +    CODE:
  +        RETVAL = cfg_node_root(cfg, &node);
  +    OUTPUT:
  +        node
  +        RETVAL
  +
  +cfg_rc_t
  +cfg_node_select(cfg,node,result,spec)
  +    PROTOTYPE:
  +        $$$$
  +    INPUT:
  +        cfg_t *cfg
  +        cfg_node_t *node
  +        SV *&result = NO_INIT
  +        const char *spec
  +    PREINIT:
  +        cfg_node_t **r;
  +    CODE:
  +        RETVAL = cfg_node_select(cfg, node, &r, "%s", spec);
  +        if (RETVAL == CFG_OK) {
  +            /* translate C array into Perl array */
  +            int i;
  +            AV *av = newAV();
  +            for (i = 0; r[i] != NULL; i++)
  +                av_push(av, newSV(PTR2IV(r[i])));
  +            free(r);
  +            result = newRV_noinc((SV *)av);
  +        }
  +        else
  +            result = &PL_sv_undef;
  +    OUTPUT:
  +        result
  +        RETVAL
  +
  +cfg_rc_t
  +cfg_node_find(cfg,node,cb_fct_cmp,cb_ctx_cmp,cont)
  +    PROTOTYPE:
  +        $$$$$
  +    INPUT:
  +        cfg_t *cfg
  +        cfg_node_t *node
  +        SV *cb_fct_cmp
  +        SV *cb_ctx_cmp
  +        cfg_node_t *&cont = NO_INIT
  +    PREINIT:
  +        cb_ctx_t ctx_cmp;
  +    CODE:
  +        ctx_cmp.fct = cb_fct_cmp;
  +        ctx_cmp.ctx = cb_ctx_cmp;
  +        RETVAL = cfg_node_find(cfg, node, cb_fct, &ctx_cmp, &cont);
  +    OUTPUT:
  +        cont
  +        RETVAL
  +
  +cfg_rc_t
  +cfg_node_apply(cfg,node,cb_fct_cmp,cb_ctx_cmp,cb_fct_cb,cb_ctx_cb)
  +    PROTOTYPE:
  +        $$$$$$
  +    INPUT:
  +        cfg_t *cfg
  +        cfg_node_t *node
  +        SV *cb_fct_cmp
  +        SV *cb_ctx_cmp
  +        SV *cb_fct_cb
  +        SV *cb_ctx_cb
  +    PREINIT:
  +        cb_ctx_t ctx_cmp;
  +        cb_ctx_t ctx_cb;
  +    CODE:
  +        ctx_cmp.fct = cb_fct_cmp;
  +        ctx_cmp.ctx = cb_ctx_cmp;
  +        ctx_cb.fct  = cb_fct_cb;
  +        ctx_cb.ctx  = cb_ctx_cb;
  +        RETVAL = cfg_node_apply(cfg, node, cb_fct, &ctx_cmp, cb_fct, &ctx_cb);
  +    OUTPUT:
  +        RETVAL
  +
  +cfg_rc_t
  +cfg_node_cmp(cfg,node,token)
  +    PROTOTYPE:
  +        $$$
  +    INPUT:
  +        cfg_t *cfg
  +        cfg_node_t *node
  +        char *token
  +    CODE:
  +        RETVAL = cfg_node_cmp(cfg, node, (void *)token);
  +    OUTPUT:
  +        RETVAL
  +
  +cfg_rc_t
  +cfg_node_link(cfg,node,id,node2)
  +    PROTOTYPE:
  +        $$$$
  +    INPUT:
  +        cfg_t *cfg
  +        cfg_node_t *node
  +        cfg_node_attr_t id
  +        cfg_node_t *node2
  +    CODE:
  +        RETVAL = cfg_node_link(cfg, node, id, node2);
  +    OUTPUT:
  +        RETVAL
  +
  +cfg_rc_t
  +cfg_node_unlink(cfg,node)
  +    PROTOTYPE:
  +        $$
  +    INPUT:
  +        cfg_t *cfg
  +        cfg_node_t *node
  +    CODE:
  +        RETVAL = cfg_node_unlink(cfg, node);
  +    OUTPUT:
  +        RETVAL
  +
  +cfg_rc_t
  +cfg_data_set(data,attr,va_arg1)
  +    CASE: (cfg_data_attr_t)SvIV(ST(1)) == CFG_DATA_ATTR_TYPE
  +        PROTOTYPE:
  +            $$$
  +        INPUT:
  +            cfg_data_t *data
  +            cfg_data_attr_t attr
  +            cfg_data_type_t va_arg1
  +        CODE:
  +            RETVAL = cfg_data_set(data, attr, va_arg1);
  +        OUTPUT:
  +            RETVAL
  +    CASE: (cfg_data_attr_t)SvIV(ST(1)) == CFG_DATA_ATTR_VALUE
  +        INPUT:
  +            cfg_data_t *data
  +            cfg_data_attr_t attr
  +        PREINIT:
  +            cfg_data_type_t type;
  +        CODE:
  +            if ((RETVAL = cfg_data_get(data, CFG_DATA_ATTR_TYPE, &type)) == CFG_OK) {
  +                switch (type) {
  +                    case CFG_DATA_TYPE_PTR: {
  +                        void *va_arg1 = INT2PTR(cfg_node_t *, SvIV((SV*)SvRV(ST(2))));
  +                        RETVAL = cfg_data_set(data, attr, va_arg1);
  +                        break;
  +                    }
  +                    case CFG_DATA_TYPE_STR: {
  +                        char *va_arg1 = SvPV_nolen(ST(2));
  +                        RETVAL = cfg_data_set(data, attr, va_arg1);
  +                        break;
  +                    }
  +                    case CFG_DATA_TYPE_INT: {
  +                        int va_arg1 = SvIV(ST(2));
  +                        RETVAL = cfg_data_set(data, attr, va_arg1);
  +                        break;
  +                    }
  +                    case CFG_DATA_TYPE_FLT: {
  +                        double va_arg1 = SvNV(ST(2));
  +                        RETVAL = cfg_data_set(data, attr, va_arg1);
  +                        break;
  +                    }
  +                }
  +            }
  +        OUTPUT:
  +            RETVAL
  +    CASE: (cfg_data_attr_t)SvIV(ST(1)) == CFG_DATA_ATTR_CTRL
  +        INPUT:
  +            cfg_data_t *data
  +            cfg_data_attr_t attr
  +            cfg_data_cb_t va_arg1
  +        CODE:
  +            RETVAL = cfg_data_set(data, attr, va_arg1);
  +        OUTPUT:
  +            RETVAL
  +
  +cfg_rc_t
  +cfg_data_ctrl(data,ctrl,va_arg1)
  +    CASE: (cfg_data_ctrl_t)SvIV(ST(1)) == CFG_DATA_CTRL_CLONE
  +        PROTOTYPE:
  +            $$;$
  +        INPUT:
  +            cfg_data_t *data
  +            cfg_data_ctrl_t ctrl
  +            cfg_data_t *&va_arg1 = NO_INIT
  +        CODE:
  +            RETVAL = cfg_data_ctrl(data, ctrl, &va_arg1);
  +        OUTPUT:
  +            va_arg1
  +            RETVAL
  +    CASE: (cfg_data_attr_t)SvIV(ST(1)) == CFG_DATA_CTRL_DESTROY
  +        INPUT:
  +            cfg_data_t *data
  +            cfg_data_ctrl_t ctrl
  +        CODE:
  +            RETVAL = cfg_data_ctrl(data, ctrl);
  +        OUTPUT:
  +            RETVAL
  +    CASE:
  +        INPUT:
  +            cfg_data_t *data
  +            cfg_data_ctrl_t ctrl
  +        CODE:
  +            RETVAL = cfg_data_set(data, ctrl);
  +        OUTPUT:
  +            RETVAL
  +
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 15 16:14:41 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E35F676504; Mon, 15 Nov 2004 16:14:40 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm/ ChangeLog devtool.conf
Message-Id: <20041115151440.E35F676504@mail.ossp.org>
Date: Mon, 15 Nov 2004 16:14:40 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Nov-2004 16:14:40
  Branch: HEAD                             Handle: 2004111515143900

  Modified files:
    ossp-pkg/mm             ChangeLog devtool.conf

  Log:
    Upgraded build environment to GNU Libtool 1.5.10

  Summary:
    Revision    Changes     Path
    1.47        +5  -0      ossp-pkg/mm/ChangeLog
    1.6         +3  -3      ossp-pkg/mm/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.46 -r1.47 ChangeLog
  --- ossp-pkg/mm/ChangeLog	12 Sep 2004 18:30:41 -0000	1.46
  +++ ossp-pkg/mm/ChangeLog	15 Nov 2004 15:14:39 -0000	1.47
  @@ -9,6 +9,11 @@
    ChangeLog
    =========
   
  + Changes between 1.3.1 and 1.3.2 (12-Sep-2003 to xx-Nov-2004)
  +
  +  *) Upgraded build environment to GNU Libtool 1.5.10
  +     [Ralf S. Engelschall]
  +
    Changes between 1.3.0 and 1.3.1 (07-Mar-2003 to 12-Sep-2004)
   
     *) Upgraded build environment to GNU Shtool 2.0.1,
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 devtool.conf
  --- ossp-pkg/mm/devtool.conf	12 Sep 2004 18:30:41 -0000	1.5
  +++ ossp-pkg/mm/devtool.conf	15 Nov 2004 15:14:39 -0000	1.6
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   2.0.1 "2.0.*" all
  -    @autogen libtool  1.5.8 "1.5*"
  -    @autogen autoconf 2.59  "2.5[3-9]*"
  +    @autogen shtool   2.0.1  "2.0.*" all
  +    @autogen libtool  1.5.10 "1.5*"
  +    @autogen autoconf 2.59   "2.5[3-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 15 17:48:08 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7B5967654E; Mon, 15 Nov 2004 17:48:07 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm/ ChangeLog mm_alloc.c
Message-Id: <20041115164807.7B5967654E@mail.ossp.org>
Date: Mon, 15 Nov 2004 17:48:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Nov-2004 17:48:07
  Branch: HEAD                             Handle: 2004111516480600

  Modified files:
    ossp-pkg/mm             ChangeLog mm_alloc.c

  Log:
    Fix mm_realloc() function: If the memory chunk passed to mm_realloc()
    can't be extended and a new chunk must be allocated, the old memory
    is copied into the new chunk with a call to memcpy(3). However, the
    used size is the length of the new data and will cause memcpy(3) to
    access memory beyond the old data chunk's boundaries.
    
    Submitted by: Kirk Petersen <kirk.petersen@watchguard.com>

  Summary:
    Revision    Changes     Path
    1.48        +7  -0      ossp-pkg/mm/ChangeLog
    1.20        +1  -1      ossp-pkg/mm/mm_alloc.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.47 -r1.48 ChangeLog
  --- ossp-pkg/mm/ChangeLog	15 Nov 2004 15:14:39 -0000	1.47
  +++ ossp-pkg/mm/ChangeLog	15 Nov 2004 16:48:06 -0000	1.48
  @@ -11,6 +11,13 @@
   
    Changes between 1.3.1 and 1.3.2 (12-Sep-2003 to xx-Nov-2004)
   
  +  *) Fix mm_realloc() function: If the memory chunk passed to mm_realloc()
  +     can't be extended and a new chunk must be allocated, the old memory
  +     is copied into the new chunk with a call to memcpy(3). However, the
  +     used size is the length of the new data and will cause memcpy(3) to
  +     access memory beyond the old data chunk's boundaries.
  +     [Kirk Petersen <kirk.petersen@watchguard.com>]
  +
     *) Upgraded build environment to GNU Libtool 1.5.10
        [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm_alloc.c
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 mm_alloc.c
  --- ossp-pkg/mm/mm_alloc.c	12 Sep 2004 18:35:01 -0000	1.19
  +++ ossp-pkg/mm/mm_alloc.c	15 Nov 2004 16:48:06 -0000	1.20
  @@ -350,7 +350,7 @@
       }
       if ((vp = mm_malloc(mm, usize)) == NULL)
           return NULL;
  -    memcpy(vp, ptr, usize);
  +    memcpy(vp, ptr, mc->mc_usize);
       mm_free(mm, ptr);
       return vp;
   }
  @@ .

From ossp-cvs-owner@ossp.org  Tue Nov 16 15:05:34 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4712576510; Tue, 16 Nov 2004 15:05:33 +0100 (CET)
From: "Herbert Schmid" <hms@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/quos/ openpkg-rdf2sql.pl
Message-Id: <20041116140533.4712576510@mail.ossp.org>
Date: Tue, 16 Nov 2004 15:05:33 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Herbert Schmid
  Root:   /e/ossp/cvs                      Email:  hms@ossp.org
  Module: ossp-pkg                         Date:   16-Nov-2004 15:05:32
  Branch: HEAD                             Handle: 2004111614053200

  Modified files:
    ossp-pkg/quos           openpkg-rdf2sql.pl

  Log:
    appended recursive search for rdfs to rdf2sql tool

  Summary:
    Revision    Changes     Path
    1.4         +111 -51    ossp-pkg/quos/openpkg-rdf2sql.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/openpkg-rdf2sql.pl
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 openpkg-rdf2sql.pl
  --- ossp-pkg/quos/openpkg-rdf2sql.pl	8 Nov 2004 15:32:59 -0000	1.3
  +++ ossp-pkg/quos/openpkg-rdf2sql.pl	16 Nov 2004 14:05:32 -0000	1.4
  @@ -1,4 +1,4 @@
  -#!/usr/opkg/bin/perl
  +#!/usr/lpkg/bin/perl
   ##
   ##  OSSP quos - Query On Steroids
   ##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  @@ -26,28 +26,23 @@
   ##
   
   require 5.008;
  +use strict;
   use Getopt::Long;
   use XML::Parser;
   use DBI;
   use DBD::SQLite;
   use Data::Dumper;
   use XML::Simple;
  +use LWP::UserAgent;
  +use IPC::Filter qw();
   
   #   configure optional debugging
   $Data::Dumper::Purity = 1;
   $Data::Dumper::Indent = 1;
   $Data::Dumper::Terse  = 1;
   
  -my $xml = new XML::Simple;
  -my $rdf = $xml->XMLin(
  -    "openpkg.rdf",
  -    KeepRoot     => 1,
  -    ForceContent => 0,
  -    ForceArray   => 1,
  -);
  -undef $xml;
  -#print Dumper($xml);
  -#exit(0);
  +my $ftpserv = 'ftp://anonymous:herb@ftp.openpkg.org/';
  +my $starturl = '00INDEX.rdf';
   
   #   connect to database
   my $db = DBI->connect("dbi:SQLite:dbname=openpkg.db", "", "",
  @@ -85,56 +80,121 @@
       " VALUES ((SELECT MAX(pk_id) FROM quos_package),?);" 
   );
   
  -#   iterate over XML/RDF data structure
  -foreach my $repo (@{$rdf->{'rdf:RDF'}->[0]->{'Repository'}}) {
  -    my $rd_url = $repo->{'rdf:resource'};
  +$db->begin_work();
   
  -    #   store repository information
  -    $db->begin_work();
  -    $sql->{-rdf}->execute($rd_url);
  -
  -    #   interate over all packages in a repository
  -    foreach my $desc (@{$repo->{'rdf:Description'}}) {
  -        #   store simple (single-value) properties of a package
  -        my $prop = {};
  -        foreach my $attr (qw(
  -            Name Version Release Distribution Group License
  -            Packager Summary URL Vendor Description
  -        )) {
  -            $prop->{$attr} = $desc->{$attr}->[0];
  +&fetchrdfsrecursendump2db($starturl);
  +
  +sub fetchrdfsrecursendump2db {
  +    
  +    my ($url) = @_;
  +    my $ua = new LWP::UserAgent;
  +    $ua->agent("rdfcrawl/1.0 ");
  +    my $req = new HTTP::Request(GET => $ftpserv . $url);
  +    my $rescont = '';
  +
  +    my $res = $ua->request($req);
  +    if ($res->is_success) {
  +        $_ = $url;
  +        if (m|.*bz2$|) {
  +            $rescont = IPC::Filter::filter($res->content, "bzip2 -d");
  +        }
  +        else {
  +            $rescont = $res->content;
           }
  -        $sql->{-package}->execute(
  -            $prop->{'Name'}, $prop->{'Version'}, $prop->{'Release'}, $prop->{'Distribution'}, $prop->{'Group'},
  -            $prop->{'License'}, $prop->{'Packager'}, $prop->{'Summary'}, $prop->{'URL'}, $prop->{'Vendor'},
  -            $prop->{'Description'}
  -        );
  -
  -        #   store complex (multi-value) properties of a package
  -        foreach my $attr (qw(
  -            BuildPreReq
  -            PreReq
  -            Provide
  -        )) {
  -            foreach my $el (@{$desc->{$attr}->[0]->{'rdf:bag'}->[0]->{'resource'}}) {
  -                my ($key, $op, $val) = ($el, '=', '*');
  -                if (ref($key) eq 'HASH') {
  -                    $key = $el->{'content'};
  -                    $op  = (grep { $_ ne 'content' } keys(%{$el}))[0];
  -                    $val = $el->{$op};
  +    }
  +    else {
  +        print $res->status_line, "\n";
  +    }
  +    
  +    my $xml = new XML::Simple;
  +    my $rdf = $xml->XMLin(
  +        $rescont,
  +        KeepRoot     => 1,
  +        ForceContent => 0,
  +        ForceArray   => 1,
  +    );          
  +    undef $xml;
  +
  +#   iterate over XML/RDF data structure
  +    foreach my $repo (@{$rdf->{'rdf:RDF'}->[0]->{'Repository'}}) {
  +        my $rd_url = $repo->{'rdf:resource'};
  +    
  +        #   store repository information
  +#        $db->begin_work();
  +        $sql->{-rdf}->execute($rd_url);
  +    
  +        #   interate over all packages in a repository
  +        if (defined($repo->{'rdf:Description'})) {
  +            # from now on package descriptions
  +            foreach my $desc (@{$repo->{'rdf:Description'}}) {
  +                #   store simple (single-value) properties of a package
  +                my $prop = {};
  +                foreach my $attr (qw(
  +                    Name Version Release Distribution Group License
  +                    Packager Summary URL Vendor Description
  +                )) {
  +                    $prop->{$attr} = $desc->{$attr}->[0];
  +                }
  +                $sql->{-package}->execute(
  +                    $prop->{'Name'}, $prop->{'Version'}, $prop->{'Release'}, $prop->{'Distribution'}, $prop->{'Group'},
  +                    $prop->{'License'}, $prop->{'Packager'}, $prop->{'Summary'}, $prop->{'URL'}, $prop->{'Vendor'},
  +                    $prop->{'Description'}
  +                );
  +    
  +                #   store complex (multi-value) properties of a package
  +                foreach my $attr (qw(
  +                    BuildPreReq
  +                    PreReq
  +                    Provide
  +                )) {
  +                    foreach my $el (@{$desc->{$attr}->[0]->{'rdf:bag'}->[0]->{'resource'}}) {
  +                        my ($key, $op, $val) = ($el, '=', '*');
  +                        if (ref($key) eq 'HASH') {
  +                            $key = $el->{'content'};
  +                            $op  = (grep { $_ ne 'content' } keys(%{$el}))[0];
  +                            $val = $el->{$op};
  +                        }
  +                        $sql->{"-".lc($attr)}->execute($key, $op, $val);
  +                    }
  +                }
  +                foreach my $url (@{$desc->{'Source'}->[0]->{'rdf:bag'}->[0]->{'rdf:li'}}) {
  +                    $sql->{-source}->execute($url);
                   }
  -                $sql->{"-".lc($attr)}->execute($key, $op, $val);
               }
           }
  -        foreach my $url (@{$desc->{'Source'}->[0]->{'rdf:bag'}->[0]->{'rdf:li'}}) {
  -            $sql->{-source}->execute($url);
  +        else {
  +            # from now on rdf references
  +            foreach my $repcont (@{$repo->{'Repository'}}) {
  +                    $url =~ m|^(.*/)|;
  +                    my $actpath = $1;
  +                    &fetchrdfsrecursendump2db($actpath . $repcont->{'href'}); 
  +                    sleep(1);
  +            }
           }
  +#            $db->commit();
       }
  -    $db->commit();
   }
  -
  -#   disconnect from database
  +# commit and disconnect from database
  +$db->commit();
   $db->disconnect();
   
  +sub showactxml {
  +# temporary function for showing actual xml
  +
  +    my ($xmlinput) = @_;
  +    
  +    my $xml = new XML::Simple;
  +
  +    my $rdf = $xml->XMLin(
  +        $xmlinput,
  +        KeepRoot     => 1,
  +        ForceContent => 0,
  +        ForceArray   => 1,
  +    );          
  +undef $xml;
  +print Dumper($rdf);
  +}
  +
   __END__
   
   =pod
  @@ .

From ossp-cvs-owner@ossp.org  Tue Nov 16 17:20:28 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3671F76510; Tue, 16 Nov 2004 17:20:28 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/quos/ openpkg-rdf2sql.pl
Message-Id: <20041116162028.3671F76510@mail.ossp.org>
Date: Tue, 16 Nov 2004 17:20:28 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Nov-2004 17:20:27
  Branch: HEAD                             Handle: 2004111616202700

  Modified files:
    ossp-pkg/quos           openpkg-rdf2sql.pl

  Log:
    cleanup style

  Summary:
    Revision    Changes     Path
    1.5         +22 -23     ossp-pkg/quos/openpkg-rdf2sql.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/openpkg-rdf2sql.pl
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 openpkg-rdf2sql.pl
  --- ossp-pkg/quos/openpkg-rdf2sql.pl	16 Nov 2004 14:05:32 -0000	1.4
  +++ ossp-pkg/quos/openpkg-rdf2sql.pl	16 Nov 2004 16:20:27 -0000	1.5
  @@ -41,7 +41,7 @@
   $Data::Dumper::Indent = 1;
   $Data::Dumper::Terse  = 1;
   
  -my $ftpserv = 'ftp://anonymous:herb@ftp.openpkg.org/';
  +my $ftpserv  = 'ftp://anonymous@ftp.openpkg.org/';
   my $starturl = '00INDEX.rdf';
   
   #   connect to database
  @@ -85,17 +85,16 @@
   &fetchrdfsrecursendump2db($starturl);
   
   sub fetchrdfsrecursendump2db {
  -    
       my ($url) = @_;
  +
  +    #   fetch XML/RDF index file
       my $ua = new LWP::UserAgent;
  -    $ua->agent("rdfcrawl/1.0 ");
  +    $ua->agent("openpkg-rdf2sql/1.0");
       my $req = new HTTP::Request(GET => $ftpserv . $url);
       my $rescont = '';
  -
       my $res = $ua->request($req);
       if ($res->is_success) {
  -        $_ = $url;
  -        if (m|.*bz2$|) {
  +        if ($url =~ m|.*bz2$|) {
               $rescont = IPC::Filter::filter($res->content, "bzip2 -d");
           }
           else {
  @@ -103,9 +102,10 @@
           }
       }
       else {
  -        print $res->status_line, "\n";
  +        print $res->status_line . "\n";
       }
       
  +    #   parse XML/RDF index file
       my $xml = new XML::Simple;
       my $rdf = $xml->XMLin(
           $rescont,
  @@ -115,17 +115,17 @@
       );          
       undef $xml;
   
  -#   iterate over XML/RDF data structure
  +    #   iterate over XML/RDF data structure
       foreach my $repo (@{$rdf->{'rdf:RDF'}->[0]->{'Repository'}}) {
           my $rd_url = $repo->{'rdf:resource'};
       
           #   store repository information
  -#        $db->begin_work();
  +        #$db->begin_work();
           $sql->{-rdf}->execute($rd_url);
       
  -        #   interate over all packages in a repository
  +        #   iterate over all packages in a repository
           if (defined($repo->{'rdf:Description'})) {
  -            # from now on package descriptions
  +            #   from now on package descriptions
               foreach my $desc (@{$repo->{'rdf:Description'}}) {
                   #   store simple (single-value) properties of a package
                   my $prop = {};
  @@ -163,36 +163,35 @@
               }
           }
           else {
  -            # from now on rdf references
  +            #   from now on RDF references
               foreach my $repcont (@{$repo->{'Repository'}}) {
  -                    $url =~ m|^(.*/)|;
  -                    my $actpath = $1;
  -                    &fetchrdfsrecursendump2db($actpath . $repcont->{'href'}); 
  -                    sleep(1);
  +                $url =~ m|^(.*/)|;
  +                my $actpath = $1;
  +                &fetchrdfsrecursendump2db($actpath . $repcont->{'href'}); 
  +                sleep(1);
               }
           }
  -#            $db->commit();
  +        #$db->commit();
       }
   }
  -# commit and disconnect from database
  +
  +#   commit and disconnect from database
   $db->commit();
   $db->disconnect();
   
  +#   temporary function for showing actual XML
   sub showactxml {
  -# temporary function for showing actual xml
  -
       my ($xmlinput) = @_;
       
       my $xml = new XML::Simple;
  -
       my $rdf = $xml->XMLin(
           $xmlinput,
           KeepRoot     => 1,
           ForceContent => 0,
           ForceArray   => 1,
       );          
  -undef $xml;
  -print Dumper($rdf);
  +    undef $xml;
  +    print Dumper($rdf);
   }
   
   __END__
  @@ .

From ossp-cvs-owner@ossp.org  Tue Nov 16 17:23:29 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 22F1876510; Tue, 16 Nov 2004 17:23:29 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/quos/ openpkg-rdf2sql.pl
Message-Id: <20041116162329.22F1876510@mail.ossp.org>
Date: Tue, 16 Nov 2004 17:23:29 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Nov-2004 17:23:28
  Branch: HEAD                             Handle: 2004111616232800

  Modified files:
    ossp-pkg/quos           openpkg-rdf2sql.pl

  Log:
    I'm not 100% sure but for 99% of certainty I think we should use
    smaller transactions: 1. it is unnecessary to be able to roll back
    such much, 2. the foreign key determination could be wrong?, 3. the
    whole crawling takes long and a transaction should not

  Summary:
    Revision    Changes     Path
    1.6         +2  -5      ossp-pkg/quos/openpkg-rdf2sql.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/openpkg-rdf2sql.pl
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 openpkg-rdf2sql.pl
  --- ossp-pkg/quos/openpkg-rdf2sql.pl	16 Nov 2004 16:20:27 -0000	1.5
  +++ ossp-pkg/quos/openpkg-rdf2sql.pl	16 Nov 2004 16:23:28 -0000	1.6
  @@ -80,8 +80,6 @@
       " VALUES ((SELECT MAX(pk_id) FROM quos_package),?);" 
   );
   
  -$db->begin_work();
  -
   &fetchrdfsrecursendump2db($starturl);
   
   sub fetchrdfsrecursendump2db {
  @@ -120,7 +118,7 @@
           my $rd_url = $repo->{'rdf:resource'};
       
           #   store repository information
  -        #$db->begin_work();
  +        $db->begin_work();
           $sql->{-rdf}->execute($rd_url);
       
           #   iterate over all packages in a repository
  @@ -171,12 +169,11 @@
                   sleep(1);
               }
           }
  -        #$db->commit();
  +        $db->commit();
       }
   }
   
   #   commit and disconnect from database
  -$db->commit();
   $db->disconnect();
   
   #   temporary function for showing actual XML
  @@ .

From ossp-cvs-owner@ossp.org  Tue Nov 16 20:08:25 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4917876548; Tue, 16 Nov 2004 20:08:25 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/perl/ cfg.ts
Message-Id: <20041116190825.4917876548@mail.ossp.org>
Date: Tue, 16 Nov 2004 20:08:25 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Nov-2004 20:08:25
  Branch: HEAD                             Handle: 2004111619082400

  Modified files:
    ossp-pkg/cfg/perl       cfg.ts

  Log:
    fix test suite

  Summary:
    Revision    Changes     Path
    1.2         +8  -4      ossp-pkg/cfg/perl/cfg.ts
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/cfg.ts
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 cfg.ts
  --- ossp-pkg/cfg/perl/cfg.ts	14 Nov 2004 18:38:53 -0000	1.1
  +++ ossp-pkg/cfg/perl/cfg.ts	16 Nov 2004 19:08:24 -0000	1.2
  @@ -28,7 +28,7 @@
   ##  cfg.ts: Perl Binding (Perl test suite part)
   ##
   
  -use Test::More tests => 7;
  +use Test::More tests => 8;
   
   ##
   ##  Module Loading
  @@ -37,7 +37,7 @@
   use IO::File;
   
   BEGIN {
  -    use_ok('OSSP::cfg')
  +    use_ok('OSSP::cfg');
   };
   BEGIN {
       use OSSP::cfg qw(:all);
  @@ -54,13 +54,17 @@
   $rc = cfg_create($cfg);
   ok($rc == CFG_OK, "cfg_create");
   
  -my ($node, $in_ptr, $in_len);
  +my ($in_ptr, $in_len);
   my $io = new IO::File "../cfg_test.cfg" or die;
   my $str; { local $/; $str = <$io>; }
   $io->close();
  -$rc = cfg_import($cfg, $node, CFG_FMT_CFG, $str, undef);
  +$rc = cfg_import($cfg, \0, CFG_FMT_CFG, $str, length($str));
   ok($rc == CFG_OK, "cfg_import");
   
  +my $out;
  +$rc = cfg_export($cfg, \0, CFG_FMT_CFG, $out, 0);
  +ok($rc == CFG_OK, "cfg_export");
  +
   $rc = cfg_destroy($cfg);
   ok($rc == CFG_OK, "cfg_destroy");
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Nov 16 20:31:36 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B671A76560; Tue, 16 Nov 2004 20:31:35 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/perl/ cfg.pm
Message-Id: <20041116193135.B671A76560@mail.ossp.org>
Date: Tue, 16 Nov 2004 20:31:35 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Nov-2004 20:31:35
  Branch: HEAD                             Handle: 2004111619313500

  Modified files:
    ossp-pkg/cfg/perl       cfg.pm

  Log:
    initial Perl API

  Summary:
    Revision    Changes     Path
    1.2         +48 -11     ossp-pkg/cfg/perl/cfg.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/cfg.pm
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 cfg.pm
  --- ossp-pkg/cfg/perl/cfg.pm	14 Nov 2004 18:38:53 -0000	1.1
  +++ ossp-pkg/cfg/perl/cfg.pm	16 Nov 2004 19:31:35 -0000	1.2
  @@ -134,11 +134,10 @@
       my $self = {};
       bless ($self, $class);
       $self->{-cfg} = undef;
  -    $self->{-rc}   = $self->CFG_OK;
  +    $self->{-rc}  = $self->CFG_OK;
       my $rc = cfg_create($self->{-cfg});
       if ($rc != $self->CFG_OK) {
  -        croak(sprintf("OSSP::cfg::new: cfg_create: %s (%d)", cfg_error($rc), $rc));
  -        return undef;
  +        croak(sprintf("OSSP::cfg::new: cfg_create: %s (%d)", $self->error($rc), $rc));
       }
       return $self;
   }
  @@ -148,27 +147,65 @@
       my ($self) = @_;
       $self->{-rc} = cfg_destroy($self->{-cfg}) if (defined($self->{-cfg}));
       if ($self->{-rc} != $self->CFG_OK) {
  -        carp(sprintf("OSSP::cfg::DESTROY: cfg_destroy: %s (%d)", cfg_error($self->{-rc}), $self->{-rc}));
  +        carp(sprintf("OSSP::cfg::DESTROY: cfg_destroy: %s (%d)", $self->error($self->{-rc}), $self->{-rc}));
           return;
       }
       $self->{-cfg} = undef;
  -    $self->{-rc}   = undef;
  +    $self->{-rc}  = undef;
       return;
   }
   
  -sub FIXME ($$) {
  -    my ($self, $name) = @_;
  -    $self->{-rc} = cfg_load($self->{-cfg}, $name);
  -    return ($self->{-rc} == $self->CFG_OK);
  +sub import {
  +    #   ATTENTION: The OSSP cfg API function "import" conflicts with
  +    #   the standardized "import" method the Perl world expects from
  +    #   their modules. In order to keep the Perl binding consist
  +    #   with the C API, we solve the conflict under run-time by
  +    #   distinguishing between the two types of "import" calls.
  +    if (defined($_[0]) and ref($_[0]) =~ m/^OSSP::uuid/) {
  +        #   the regular OSSP::cfg "import" method
  +        my ($self, $node, $fmt, $in) = @_;
  +        $self->{-rc} = cfg_import($self->{-cfg}, $node, $fmt, $in, length($in));
  +        return ($self->{-rc} == $self->CFG_OK);
  +    }
  +    else {
  +        #   the special Perl "import" method
  +        #   (usually inherited from the Exporter)
  +        no strict "refs";
  +        return OSSP::cfg->export_to_level(1, @_);
  +    }
  +}
  +
  +sub export {
  +    #   ATTENTION: The OSSP cfg API function "export" conflicts with
  +    #   the standardized "export" method the Perl world expects from
  +    #   their modules. In order to keep the Perl binding consist
  +    #   with the C API, we solve the conflict under run-time by
  +    #   distinguishing between the two types of "export" calls.
  +    if (defined($_[0]) and ref($_[0]) =~ m/^OSSP::uuid/) {
  +        #   the regular OSSP::cfg "export" method
  +        my ($self, $node, $fmt) = @_;
  +        my $out;
  +        $self->{-rc} = cfg_import($self->{-cfg}, $node, $fmt, $out, 0);
  +        return ($self->{-rc} == $self->CFG_OK ? $out : undef);
  +    }
  +    else {
  +        #   the special Perl "export" method
  +        #   (usually inherited from the Exporter)
  +        return Exporter::export(@_);
  +    }
   }
   
   sub error ($;$) {
       my ($self, $rc) = @_;
       $rc = $self->{-rc} if (not defined($rc));
  -    return wantarray ? (cfg_error($rc), $rc) : cfg_error($rc);
  +    my $error;
  +    if (cfg_error($self->{-cfg}, $rc, $error) != $self->CFG_OK) {
  +        croak("OSSP::cfg::error: cfg_error: INTERNAL ERROR");
  +    }
  +    return wantarray ? ($error, $rc) : $error;
   }
   
  -sub version (;$) {
  +sub version () {
       my ($self) = @_;
       return cfg_version();
   }
  @@ .

From ossp-cvs-owner@ossp.org  Tue Nov 16 20:32:41 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4EC9F76560; Tue, 16 Nov 2004 20:32:41 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/perl/ cfg.pm
Message-Id: <20041116193241.4EC9F76560@mail.ossp.org>
Date: Tue, 16 Nov 2004 20:32:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Nov-2004 20:32:41
  Branch: HEAD                             Handle: 2004111619324000

  Modified files:
    ossp-pkg/cfg/perl       cfg.pm

  Log:
    Ops, too much cut & paste from OSSP uuid ;-)

  Summary:
    Revision    Changes     Path
    1.3         +2  -2      ossp-pkg/cfg/perl/cfg.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/cfg.pm
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 cfg.pm
  --- ossp-pkg/cfg/perl/cfg.pm	16 Nov 2004 19:31:35 -0000	1.2
  +++ ossp-pkg/cfg/perl/cfg.pm	16 Nov 2004 19:32:40 -0000	1.3
  @@ -161,7 +161,7 @@
       #   their modules. In order to keep the Perl binding consist
       #   with the C API, we solve the conflict under run-time by
       #   distinguishing between the two types of "import" calls.
  -    if (defined($_[0]) and ref($_[0]) =~ m/^OSSP::uuid/) {
  +    if (defined($_[0]) and ref($_[0]) =~ m/^OSSP::cfg/) {
           #   the regular OSSP::cfg "import" method
           my ($self, $node, $fmt, $in) = @_;
           $self->{-rc} = cfg_import($self->{-cfg}, $node, $fmt, $in, length($in));
  @@ -181,7 +181,7 @@
       #   their modules. In order to keep the Perl binding consist
       #   with the C API, we solve the conflict under run-time by
       #   distinguishing between the two types of "export" calls.
  -    if (defined($_[0]) and ref($_[0]) =~ m/^OSSP::uuid/) {
  +    if (defined($_[0]) and ref($_[0]) =~ m/^OSSP::cfg/) {
           #   the regular OSSP::cfg "export" method
           my ($self, $node, $fmt) = @_;
           my $out;
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov 17 09:53:22 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9235376513; Wed, 17 Nov 2004 09:53:22 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/quos/ openpkg-rdf2sql.pl
Message-Id: <20041117085322.9235376513@mail.ossp.org>
Date: Wed, 17 Nov 2004 09:53:22 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-Nov-2004 09:53:22
  Branch: HEAD                             Handle: 2004111708532100

  Modified files:
    ossp-pkg/quos           openpkg-rdf2sql.pl

  Log:
    fix logic for SRC/00INDEX.rdf.bz2 files where both rdf:Description and
    Repository containers are inside a top-level Repository container

  Summary:
    Revision    Changes     Path
    1.7         +8  -4      ossp-pkg/quos/openpkg-rdf2sql.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/openpkg-rdf2sql.pl
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 openpkg-rdf2sql.pl
  --- ossp-pkg/quos/openpkg-rdf2sql.pl	16 Nov 2004 16:23:28 -0000	1.6
  +++ ossp-pkg/quos/openpkg-rdf2sql.pl	17 Nov 2004 08:53:21 -0000	1.7
  @@ -116,14 +116,15 @@
       #   iterate over XML/RDF data structure
       foreach my $repo (@{$rdf->{'rdf:RDF'}->[0]->{'Repository'}}) {
           my $rd_url = $repo->{'rdf:resource'};
  +
  +        #   start SQL transaction
  +        $db->begin_work();
       
           #   store repository information
  -        $db->begin_work();
           $sql->{-rdf}->execute($rd_url);
       
           #   iterate over all packages in a repository
           if (defined($repo->{'rdf:Description'})) {
  -            #   from now on package descriptions
               foreach my $desc (@{$repo->{'rdf:Description'}}) {
                   #   store simple (single-value) properties of a package
                   my $prop = {};
  @@ -160,8 +161,9 @@
                   }
               }
           }
  -        else {
  -            #   from now on RDF references
  +
  +        #   iterate over all sub-repositities in repository
  +        if (defined($repo->{'Repository'})) {
               foreach my $repcont (@{$repo->{'Repository'}}) {
                   $url =~ m|^(.*/)|;
                   my $actpath = $1;
  @@ -169,6 +171,8 @@
                   sleep(1);
               }
           }
  +
  +        #   end SQL transaction
           $db->commit();
       }
   }
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov 17 10:05:48 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0175476513; Wed, 17 Nov 2004 10:05:47 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/perl/ cfg.pm
Message-Id: <20041117090547.0175476513@mail.ossp.org>
Date: Wed, 17 Nov 2004 10:05:47 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-Nov-2004 10:05:47
  Branch: HEAD                             Handle: 2004111709054700

  Modified files:
    ossp-pkg/cfg/perl       cfg.pm

  Log:
    add commented prototypes and fix export function

  Summary:
    Revision    Changes     Path
    1.4         +3  -3      ossp-pkg/cfg/perl/cfg.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/cfg.pm
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 cfg.pm
  --- ossp-pkg/cfg/perl/cfg.pm	16 Nov 2004 19:32:40 -0000	1.3
  +++ ossp-pkg/cfg/perl/cfg.pm	17 Nov 2004 09:05:47 -0000	1.4
  @@ -155,7 +155,7 @@
       return;
   }
   
  -sub import {
  +sub import { # ($$$$)
       #   ATTENTION: The OSSP cfg API function "import" conflicts with
       #   the standardized "import" method the Perl world expects from
       #   their modules. In order to keep the Perl binding consist
  @@ -175,7 +175,7 @@
       }
   }
   
  -sub export {
  +sub export { # ($$$)
       #   ATTENTION: The OSSP cfg API function "export" conflicts with
       #   the standardized "export" method the Perl world expects from
       #   their modules. In order to keep the Perl binding consist
  @@ -185,7 +185,7 @@
           #   the regular OSSP::cfg "export" method
           my ($self, $node, $fmt) = @_;
           my $out;
  -        $self->{-rc} = cfg_import($self->{-cfg}, $node, $fmt, $out, 0);
  +        $self->{-rc} = cfg_export($self->{-cfg}, $node, $fmt, $out, 0);
           return ($self->{-rc} == $self->CFG_OK ? $out : undef);
       }
       else {
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov 17 14:14:35 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 577AB76586; Wed, 17 Nov 2004 14:14:35 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/perl/ cfg.xs
Message-Id: <20041117131435.577AB76586@mail.ossp.org>
Date: Wed, 17 Nov 2004 14:14:35 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-Nov-2004 14:14:35
  Branch: HEAD                             Handle: 2004111713143400

  Modified files:
    ossp-pkg/cfg/perl       cfg.xs

  Log:
    ops, add still missing cfg_data_get XS function

  Summary:
    Revision    Changes     Path
    1.2         +64 -0      ossp-pkg/cfg/perl/cfg.xs
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/cfg.xs
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 cfg.xs
  --- ossp-pkg/cfg/perl/cfg.xs	14 Nov 2004 18:38:53 -0000	1.1
  +++ ossp-pkg/cfg/perl/cfg.xs	17 Nov 2004 13:14:34 -0000	1.2
  @@ -575,6 +575,70 @@
               RETVAL
   
   cfg_rc_t
  +cfg_data_get(data,attr,va_arg1)
  +    CASE: (cfg_data_attr_t)SvIV(ST(1)) == CFG_DATA_ATTR_TYPE
  +        PROTOTYPE:
  +            $$$
  +        INPUT:
  +            cfg_data_t *data
  +            cfg_data_attr_t attr
  +            cfg_data_type_t &va_arg1 = NO_INIT
  +        CODE:
  +            RETVAL = cfg_data_get(data, attr, &va_arg1);
  +        OUTPUT:
  +            va_arg1
  +            RETVAL
  +    CASE: (cfg_data_attr_t)SvIV(ST(1)) == CFG_DATA_ATTR_VALUE
  +        INPUT:
  +            cfg_data_t *data
  +            cfg_data_attr_t attr
  +            SV *va_arg1
  +        PREINIT:
  +            cfg_data_type_t type;
  +        CODE:
  +            if ((RETVAL = cfg_data_get(data, CFG_DATA_ATTR_TYPE, &type)) == CFG_OK) {
  +                switch (type) {
  +                    case CFG_DATA_TYPE_PTR: {
  +                        void *arg;
  +                        RETVAL = cfg_data_get(data, attr, &arg);
  +                        sv_setiv(va_arg1, PTR2INT(arg));
  +                        break;
  +                    }
  +                    case CFG_DATA_TYPE_STR: {
  +                        char *arg;
  +                        RETVAL = cfg_data_set(data, attr, &arg);
  +                        sv_setpv(va_arg1, arg);
  +                        break;
  +                    }
  +                    case CFG_DATA_TYPE_INT: {
  +                        int arg;
  +                        RETVAL = cfg_data_set(data, attr, &arg);
  +                        sv_setiv(va_arg1, arg);
  +                        break;
  +                    }
  +                    case CFG_DATA_TYPE_FLT: {
  +                        double arg;
  +                        RETVAL = cfg_data_set(data, attr, &arg);
  +                        sv_setnv(va_arg1, arg);
  +                        break;
  +                    }
  +                }
  +            }
  +        OUTPUT:
  +            va_arg1
  +            RETVAL
  +    CASE: (cfg_data_attr_t)SvIV(ST(1)) == CFG_DATA_ATTR_CTRL
  +        INPUT:
  +            cfg_data_t *data
  +            cfg_data_attr_t attr
  +            cfg_data_cb_t &va_arg1 = NO_INIT
  +        CODE:
  +            RETVAL = cfg_data_set(data, attr, &va_arg1);
  +        OUTPUT:
  +            va_arg1
  +            RETVAL
  +
  +cfg_rc_t
   cfg_data_ctrl(data,ctrl,va_arg1)
       CASE: (cfg_data_ctrl_t)SvIV(ST(1)) == CFG_DATA_CTRL_CLONE
           PROTOTYPE:
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov 17 14:15:16 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A9E0576586; Wed, 17 Nov 2004 14:15:16 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/perl/ cfg.pm
Message-Id: <20041117131516.A9E0576586@mail.ossp.org>
Date: Wed, 17 Nov 2004 14:15:16 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-Nov-2004 14:15:16
  Branch: HEAD                             Handle: 2004111713151500

  Modified files:
    ossp-pkg/cfg/perl       cfg.pm

  Log:
    implement the Perl API

  Summary:
    Revision    Changes     Path
    1.5         +97 -2      ossp-pkg/cfg/perl/cfg.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/cfg.pm
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 cfg.pm
  --- ossp-pkg/cfg/perl/cfg.pm	17 Nov 2004 09:05:47 -0000	1.4
  +++ ossp-pkg/cfg/perl/cfg.pm	17 Nov 2004 13:15:15 -0000	1.5
  @@ -127,7 +127,6 @@
   ##  (just an OO wrapper around the C-style API)
   ##
   
  -#   constructor
   sub new {
       my $proto = shift;
       my $class = ref($proto) || $proto;
  @@ -142,7 +141,6 @@
       return $self;
   }
   
  -#   destructor
   sub DESTROY ($) {
       my ($self) = @_;
       $self->{-rc} = cfg_destroy($self->{-cfg}) if (defined($self->{-cfg}));
  @@ -210,6 +208,103 @@
       return cfg_version();
   }
   
  +sub node_create ($) {
  +    my ($self) = @_;
  +    my $node;
  +    $self->{-rc} = cfg_node_create($self->{-cfg}, $node);
  +    return ($self->{-rc} == $self->CFG_OK ? $node : undef);
  +}
  +
  +sub node_destroy ($$) {
  +    my ($self, $node) = @_;
  +    $self->{-rc} = cfg_node_destroy($self->{-cfg}, $node);
  +    return ($self->{-rc} == $self->CFG_OK);
  +}
  +
  +sub node_clone ($$) {
  +    my ($self, $node) = @_;
  +    my $node2;
  +    $self->{-rc} = cfg_node_clone($self->{-cfg}, $node, $node2);
  +    return ($self->{-rc} == $self->CFG_OK ? $node2 : undef);
  +}
  +
  +sub node_set ($$$$) {
  +    my ($self, $node, $attr, $arg) = @_;
  +    $self->{-rc} = cfg_node_set($self->{-cfg}, $node, $attr, $arg);
  +    return ($self->{-rc} == $self->CFG_OK);
  +}
  +
  +sub node_get ($$$) {
  +    my ($self, $node, $attr) = @_;
  +    my $arg;
  +    $self->{-rc} = cfg_node_get($self->{-cfg}, $node, $attr, $arg);
  +    return ($self->{-rc} == $self->CFG_OK ? $arg : undef);
  +}
  +
  +sub node_root ($) {
  +    my ($self) = @_;
  +    my $node;
  +    $self->{-rc} = cfg_node_root($self->{-cfg}, $node);
  +    return ($self->{-rc} == $self->CFG_OK ? $node : undef);
  +}
  +
  +sub node_select ($$$) {
  +    my ($self, $node, $spec) = @_;
  +    my $result;
  +    $self->{-rc} = cfg_node_select($self->{-cfg}, $node, $result, $spec);
  +    return ($self->{-rc} == $self->CFG_OK ? $result : undef);
  +}
  +
  +sub node_find ($$$$) {
  +    my ($self, $node, $cb_fct_cmp, $cb_ctx_cmp) = @_;
  +    my $cont;
  +    $self->{-rc} = cfg_node_find($self->{-cfg}, $node, $cb_fct_cmp, $cb_ctx_cmp, $cont);
  +    return ($self->{-rc} == $self->CFG_OK ? $cont : undef);
  +}
  +
  +sub node_apply ($$$$) {
  +    my ($self, $node, $cb_fct_cmp, $cb_ctx_cmp, $cb_fct_cb, $cb_ctx_cb) = @_;
  +    $self->{-rc} = cfg_node_apply($self->{-cfg}, $node, $cb_fct_cmp, $cb_ctx_cmp, $cb_fct_cb, $cb_ctx_cb);
  +    return ($self->{-rc} == $self->CFG_OK);
  +}
  +
  +sub node_cmp ($$$) {
  +    my ($self, $node, $token) = @_;
  +    $self->{-rc} = cfg_node_cmp($self->{-cfg}, $node, $token);
  +    return ($self->{-rc} == $self->CFG_OK);
  +}
  +
  +sub node_link ($$$$) {
  +    my ($self, $node, $id, $node2) = @_;
  +    $self->{-rc} = cfg_node_link($self->{-cfg}, $node, $id, $node2);
  +    return ($self->{-rc} == $self->CFG_OK);
  +}
  +
  +sub node_unlink ($$) {
  +    my ($self, $node) = @_;
  +    $self->{-rc} = cfg_node_unlink($self->{-cfg}, $node);
  +    return ($self->{-rc} == $self->CFG_OK);
  +}
  +
  +sub data_set ($$$$) {
  +    my ($self, $data, $attr, $value) = @_;
  +    $self->{-rc} = cfg_data_set($data, $attr, $value);
  +    return ($self->{-rc} == $self->CFG_OK);
  +}
  +
  +sub data_get ($$$) {
  +    my ($self, $data, $attr) = @_;
  +    my $value;
  +    $self->{-rc} = cfg_data_get($data, $attr, $value);
  +    return ($self->{-rc} == $self->CFG_OK ? $value : undef);
  +}
  +
  +sub data_ctrl ($$$;$) {
  +    my ($self, $data, $ctrl, $value) = @_;
  +    $self->{-rc} = cfg_data_ctrl($data, $ctrl, $value);
  +    return ($self->{-rc} == $self->CFG_OK);
  +}
  +
   ##
   ##  Low-Level Perl XS C-style API
   ##  (actually just the activation of the XS part)
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov 17 14:15:36 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E9866765B7; Wed, 17 Nov 2004 14:15:35 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/perl/ cfg.pod
Message-Id: <20041117131535.E9866765B7@mail.ossp.org>
Date: Wed, 17 Nov 2004 14:15:35 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-Nov-2004 14:15:35
  Branch: HEAD                             Handle: 2004111713153500

  Modified files:
    ossp-pkg/cfg/perl       cfg.pod

  Log:
    document both the C and Perl APIs

  Summary:
    Revision    Changes     Path
    1.2         +112 -12    ossp-pkg/cfg/perl/cfg.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/cfg.pod
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 cfg.pod
  --- ossp-pkg/cfg/perl/cfg.pod	14 Nov 2004 18:38:53 -0000	1.1
  +++ ossp-pkg/cfg/perl/cfg.pod	17 Nov 2004 13:15:35 -0000	1.2
  @@ -53,10 +53,46 @@
   
   =item C<my $cfg = >B<new>C< OSSP::cfg;>
   
  -=item C<$cfg-E<gt>>B<FIXME>C<($name);>
  -
   =item C<undef $cfg;>
   
  +=item [C<(>]C<$error>[C<, $rc)>]C< = $cfg-E<gt>>B<error>C<($cfg>[C<, $rc>]C<);>
  +
  +=item C<$ver = $cfg-E<gt>>B<version>C<();>
  +
  +=item C<$cfg-E<gt>>B<import>C<($name, $fmt, $str);>
  +
  +=item C<$str = $cfg-E<gt>>B<export>C<($name, $fmt);>
  +
  +=item C<$node = $cfg-E<gt>>B<node_create>C<();>
  +
  +=item C<$cfg-E<gt>>B<node_destroy>C<($node);>
  +
  +=item C<$node2 = $cfg-E<gt>>B<node_clone>C<($node);>
  +
  +=item C<$cfg-E<gt>>B<node_set>C<($node, $attr, $value);>
  +
  +=item C<$value = $cfg-E<gt>>B<node_get>C<($node, $attr);>
  +
  +=item C<$node = $cfg-E<gt>>B<node_root>C<();>
  +
  +=item C<$result = $cfg-E<gt>>B<node_select>C<($node, $spec);>
  +
  +=item C<$cont = $cfg-E<gt>>B<node_find>C<($node, \&cb_fct_cmp, $cb_ctx_cmp);>
  +
  +=item C<$cfg-E<gt>>B<node_apply>C<($node, \&cb_fct_cmp, $cb_ctx_cmp, \&cb_fct_cb, $cb_ctx_cb);>
  +
  +=item C<$cfg-E<gt>>B<node_cmp>C<($node, $token);>
  +
  +=item C<$cfg-E<gt>>B<node_link>C<($node, $id, $node2);>
  +
  +=item C<$cfg-E<gt>>B<node_unlink>C<($node);>
  +
  +=item C<$cfg-E<gt>>B<data_set>C<($data, $attr, $value);>
  +
  +=item C<$value = $cfg-E<gt>>B<data_get>C<($data, $attr);>
  +
  +=item C<$cfg-E<gt>>B<data_ctrl>C<($data, $ctrl>[C<, $value>]C<);>
  +
   =back
   
   =head2 C-STYLE API
  @@ -71,24 +107,88 @@
   
   =item C<my $cfg; $rc = >B<cfg_create>C<($cfg);>
   
  -=item C<$str = >B<cfg_FIXME>C<($rc);>
  +=item C<$rc = >B<cfg_destroy>C<($cfg);>
   
  -=item C<$str = >B<cfg_error>C<($rc);>
  +=item C<$rc = >B<cfg_error>C<($cfg, $rc, $error);>
   
   =item C<$ver = >B<cfg_version>C<();>
   
  -=item C<$rc = >B<cfg_destroy>C<($cfg);>
  +=item C<$rc = >B<cfg_import>C<($cfg, $node, $fmt, $in_ptr, $in_len);>
  +
  +=item C<$rc = >B<cfg_export>C<($cfg, $node, $fmt, $ex_ptr, $ex_len);>
  +
  +=item C<$rc = >B<cfg_node_create>C<($cfg, $node);>
  +
  +=item C<$rc = >B<cfg_node_destroy>C<($cfg, $node);>
  +
  +=item C<$rc = >B<cfg_node_clone>C<($cfg, $node, $node2);>
  +
  +=item C<$rc = >B<cfg_node_set>C<($cfg, $node, $attr, ...);>
  +
  +=item C<$rc = >B<cfg_node_get>C<($cfg, $node, $attr, ...);>
  +
  +=item C<$rc = >B<cfg_node_root>C<($cfg, $node);>
  +
  +=item C<$rc = >B<cfg_node_select>C<($cfg, $node, $result, $spec);>
  +
  +=item C<$rc = >B<cfg_node_find>C<($cfg, $node, $cb_fct_cmp, $cb_ctx_cmp, $cont);>
  +
  +=item C<$rc = >B<cfg_node_apply>C<($cfg, $node, $cb_fct_cmp, $cb_ctx_cmp, $cb_fct_cb, $cb_ctx_cb);>
  +
  +=item C<$rc = >B<cfg_node_cmp>C<($cfg, $node, $token);>
  +
  +=item C<$rc = >B<cfg_node_link>C<($cfg, $node, $id, $node2);>
  +
  +=item C<$rc = >B<cfg_node_unlink>C<($cfg, $node);>
  +
  +=item C<$rc = >B<cfg_data_set>C<($data, $attr, ...);>
  +
  +=item C<$rc = >B<cfg_data_get>C<($data, $attr, ...);>
  +
  +=item C<$rc = >B<cfg_data_ctrl>C<($data, $ctrl, ...);>
   
   =back
   
  -Additionally, the following constants are exported for use in C<$rc>, C<$mode>, C<$fmt> and C<$ver>:
  +Additionally, the following constants are exported for use in C<$rc>, C<$attr>, C<$ctrl> and variable
  +arguments:
   
  -C<CFG_RC_OK>,
  -C<CFG_RC_ARG>,
  -C<CFG_RC_MEM>,
  -C<CFG_RC_SYS>,
  -C<CFG_RC_INT>,
  -C<CFG_RC_IMP>.
  +C<CFG_OK>,
  +C<CFG_ERR_ARG>,
  +C<CFG_ERR_USE>,
  +C<CFG_ERR_MEM>,
  +C<CFG_ERR_SYS>,
  +C<CFG_ERR_FMT>,
  +C<CFG_ERR_INT>,
  +C<CFG_ERR_SYN>,
  +C<CFG_ERR_NDE>,
  +C<CFG_FMT_CFG>,
  +C<CFG_FMT_XML>,
  +C<CFG_NODE_TYPE_SEQ>,
  +C<CFG_NODE_TYPE_DIR>,
  +C<CFG_NODE_TYPE_OPT>,
  +C<CFG_NODE_TYPE_ARG>,
  +C<CFG_NODE_ATTR_PARENT>,
  +C<CFG_NODE_ATTR_LBROTH>,
  +C<CFG_NODE_ATTR_RBROTH>,
  +C<CFG_NODE_ATTR_CHILD1>,
  +C<CFG_NODE_ATTR_CHILDL>,
  +C<CFG_NODE_ATTR_CHILDS>,
  +C<CFG_NODE_ATTR_NODES>,
  +C<CFG_NODE_ATTR_DEPTH>,
  +C<CFG_NODE_ATTR_SRCNAME>,
  +C<CFG_NODE_ATTR_SRCPOS>,
  +C<CFG_NODE_ATTR_TYPE>,
  +C<CFG_NODE_ATTR_TOKEN>,
  +C<CFG_NODE_ATTR_DATA>,
  +C<CFG_DATA_TYPE_PTR>,
  +C<CFG_DATA_TYPE_STR>,
  +C<CFG_DATA_TYPE_INT>,
  +C<CFG_DATA_TYPE_FLT>,
  +C<CFG_DATA_CTRL_CLONE>,
  +C<CFG_DATA_CTRL_DESTROY>,
  +C<CFG_DATA_ATTR_TYPE>,
  +C<CFG_DATA_ATTR_VALUE>,
  +C<CFG_DATA_ATTR_CTRL>.
   
   =head1 EXAMPLES
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov 17 14:19:10 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 720A576586; Wed, 17 Nov 2004 14:19:10 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/perl/ cfg.xs
Message-Id: <20041117131910.720A576586@mail.ossp.org>
Date: Wed, 17 Nov 2004 14:19:10 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-Nov-2004 14:19:10
  Branch: HEAD                             Handle: 2004111713190900

  Modified files:
    ossp-pkg/cfg/perl       cfg.xs

  Log:
    remember that sv_vsetpvfn() might be an opportunity in the future

  Summary:
    Revision    Changes     Path
    1.3         +1  -0      ossp-pkg/cfg/perl/cfg.xs
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/cfg.xs
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 cfg.xs
  --- ossp-pkg/cfg/perl/cfg.xs	17 Nov 2004 13:14:34 -0000	1.2
  +++ ossp-pkg/cfg/perl/cfg.xs	17 Nov 2004 13:19:09 -0000	1.3
  @@ -420,6 +420,7 @@
       PREINIT:
           cfg_node_t **r;
       CODE:
  +        /* FIXME: perhaps use sv_vsetpvfn() to fully emulate C API? */
           RETVAL = cfg_node_select(cfg, node, &r, "%s", spec);
           if (RETVAL == CFG_OK) {
               /* translate C array into Perl array */
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov 17 14:20:29 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B4DB976586; Wed, 17 Nov 2004 14:20:29 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/perl/ cfg.xs
Message-Id: <20041117132029.B4DB976586@mail.ossp.org>
Date: Wed, 17 Nov 2004 14:20:29 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-Nov-2004 14:20:29
  Branch: HEAD                             Handle: 2004111713202900

  Modified files:
    ossp-pkg/cfg/perl       cfg.xs

  Log:
    ops, fix typo in macro name

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/cfg/perl/cfg.xs
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/cfg.xs
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 cfg.xs
  --- ossp-pkg/cfg/perl/cfg.xs	17 Nov 2004 13:19:09 -0000	1.3
  +++ ossp-pkg/cfg/perl/cfg.xs	17 Nov 2004 13:20:29 -0000	1.4
  @@ -602,7 +602,7 @@
                       case CFG_DATA_TYPE_PTR: {
                           void *arg;
                           RETVAL = cfg_data_get(data, attr, &arg);
  -                        sv_setiv(va_arg1, PTR2INT(arg));
  +                        sv_setiv(va_arg1, PTR2IV(arg));
                           break;
                       }
                       case CFG_DATA_TYPE_STR: {
  @@ .

From ossp-cvs-owner@ossp.org  Thu Nov 18 16:57:01 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4AFCC76576; Thu, 18 Nov 2004 16:57:01 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid.ac
Message-Id: <20041118155701.4AFCC76576@mail.ossp.org>
Date: Thu, 18 Nov 2004 16:57:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Nov-2004 16:57:01
  Branch: HEAD                             Handle: 2004111815570000

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid.ac

  Log:
    Fix --with-perl configure option processing: Perl is
    only required if --with-perl is used although we search for Perl
    always in order to provide the PERL variable substitution.

  Summary:
    Revision    Changes     Path
    1.61        +7  -0      ossp-pkg/uuid/ChangeLog
    1.13        +1  -1      ossp-pkg/uuid/uuid.ac
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.60 -r1.61 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	3 Nov 2004 18:48:22 -0000	1.60
  +++ ossp-pkg/uuid/ChangeLog	18 Nov 2004 15:57:00 -0000	1.61
  @@ -11,6 +11,13 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 1.1.0 and 1.1.1 (03-Nov-2004 to 18-Nov-2004)
  +
  +   o Fix --with-perl configure option processing: Perl is
  +     only required if --with-perl is used although we search for Perl
  +     always in order to provide the PERL variable substitution.
  +     [Ralf S. Engelschall]
  +
     Changes between 1.0.4 and 1.1.0 (16-Oct-2004 to 03-Nov-2004)
   
      o Add --with-perl configure option for optionally enabling
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.ac
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 uuid.ac
  --- ossp-pkg/uuid/uuid.ac	3 Nov 2004 17:07:57 -0000	1.12
  +++ ossp-pkg/uuid/uuid.ac	18 Nov 2004 15:57:00 -0000	1.13
  @@ -102,7 +102,7 @@
       AC_SUBST(WITH_PERL)
       AC_SUBST(PERL_NAME)
       AC_PATH_PROG(PERL, perl, NA)
  -    if test ".$PERL" = .NA; then
  +    if test ".$ac_cv_with_perl" = ".yes" -a ".$PERL" = ".NA"; then
           AC_ERROR([required Perl interpreter not found in \$PATH])
       fi
   ])
  @@ .

From ossp-cvs-owner@ossp.org  Thu Nov 18 16:58:55 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E236A76576; Thu, 18 Nov 2004 16:58:54 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog ossp-pkg/uuid/perl/ Makefile.PL
Message-Id: <20041118155854.E236A76576@mail.ossp.org>
Date: Thu, 18 Nov 2004 16:58:54 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Nov-2004 16:58:54
  Branch: HEAD                             Handle: 2004111815585301

  Modified files:
    ossp-pkg/uuid           ChangeLog
    ossp-pkg/uuid/perl      Makefile.PL

  Log:
    Apply the FreeBSD libc uuid_create() related workaround
    in the Perl bindings also under FreeBSD 6.0-CURRENT.

  Summary:
    Revision    Changes     Path
    1.62        +4  -0      ossp-pkg/uuid/ChangeLog
    1.4         +1  -1      ossp-pkg/uuid/perl/Makefile.PL
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.61 -r1.62 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	18 Nov 2004 15:57:00 -0000	1.61
  +++ ossp-pkg/uuid/ChangeLog	18 Nov 2004 15:58:53 -0000	1.62
  @@ -13,6 +13,10 @@
   
     Changes between 1.1.0 and 1.1.1 (03-Nov-2004 to 18-Nov-2004)
   
  +   o Apply the FreeBSD libc uuid_create() related workaround
  +     in the Perl bindings also under FreeBSD 6.0-CURRENT. 
  +     [Ralf S. Engelschall]
  +
      o Fix --with-perl configure option processing: Perl is
        only required if --with-perl is used although we search for Perl
        always in order to provide the PERL variable substitution.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/Makefile.PL
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 Makefile.PL
  --- ossp-pkg/uuid/perl/Makefile.PL	3 Nov 2004 18:30:49 -0000	1.3
  +++ ossp-pkg/uuid/perl/Makefile.PL	18 Nov 2004 15:58:54 -0000	1.4
  @@ -46,7 +46,7 @@
       NO_META           => 1,
       #    cruel hack to workaround the conflict between OSSP uuid's
       #    uuid_create() function and one from FreeBSD's libc
  -    ((   "$Config{'osname'}$Config{'osvers'}" =~ m/^freebsd5\./
  +    ((   "$Config{'osname'}$Config{'osvers'}" =~ m/^freebsd[56]\./
         and $Config{'ld'} =~ m/cc$/ and -f "/usr/include/uuid.h") ?
         ( LDDLFLAGS => $Config{'lddlflags'} . ' -Wl,-Bsymbolic') : ())
   );
  @@ .

From ossp-cvs-owner@ossp.org  Thu Nov 18 16:59:53 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 52A6276576; Thu, 18 Nov 2004 16:59:53 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ README ossp-pkg/uuid/perl/ uuid.pm ossp-pkg...
Message-Id: <20041118155953.52A6276576@mail.ossp.org>
Date: Thu, 18 Nov 2004 16:59:53 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Nov-2004 16:59:53
  Branch: HEAD                             Handle: 2004111815595200

  Modified files:
    ossp-pkg/uuid           README uuid_vers.h
    ossp-pkg/uuid/perl      uuid.pm

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.22        +1  -1      ossp-pkg/uuid/README
    1.4         +1  -1      ossp-pkg/uuid/perl/uuid.pm
    1.12        +9  -9      ossp-pkg/uuid/uuid_vers.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 README
  --- ossp-pkg/uuid/README	3 Nov 2004 18:35:24 -0000	1.21
  +++ ossp-pkg/uuid/README	18 Nov 2004 15:59:52 -0000	1.22
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
   
     OSSP uuid - Universally Unique Identifier
  -  Version 1.1.0 (03-Nov-2004)
  +  Version 1.1.1 (18-Nov-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.pm
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 uuid.pm
  --- ossp-pkg/uuid/perl/uuid.pm	3 Nov 2004 18:44:40 -0000	1.3
  +++ ossp-pkg/uuid/perl/uuid.pm	18 Nov 2004 15:59:52 -0000	1.4
  @@ -41,7 +41,7 @@
   ##
   
   #   API version
  -our $VERSION = do { my @v = ('1.1.0' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
  +our $VERSION = do { my @v = ('1.1.1' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
   
   #   API inheritance
   our @ISA = qw(Exporter);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_vers.h
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 uuid_vers.h
  --- ossp-pkg/uuid/uuid_vers.h	3 Nov 2004 18:35:24 -0000	1.11
  +++ ossp-pkg/uuid/uuid_vers.h	18 Nov 2004 15:59:52 -0000	1.12
  @@ -8,7 +8,7 @@
   #ifndef _UUID_VERS_H_
   #define _UUID_VERS_H_
   
  -#define _UUID_VERSION 0x101200
  +#define _UUID_VERSION 0x101201
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _UUID_VERS_H_AS_HEADER_
   
   _uuid_version_t _uuid_version = {
  -    0x101200,
  -    "1.1.0",
  -    "1.1.0 (03-Nov-2004)",
  -    "This is OSSP uuid, Version 1.1.0 (03-Nov-2004)",
  -    "OSSP uuid 1.1.0 (03-Nov-2004)",
  -    "OSSP uuid/1.1.0",
  -    "@(#)OSSP uuid 1.1.0 (03-Nov-2004)",
  -    "$Id: OSSP uuid 1.1.0 (03-Nov-2004) $"
  +    0x101201,
  +    "1.1.1",
  +    "1.1.1 (18-Nov-2004)",
  +    "This is OSSP uuid, Version 1.1.1 (18-Nov-2004)",
  +    "OSSP uuid 1.1.1 (18-Nov-2004)",
  +    "OSSP uuid/1.1.1",
  +    "@(#)OSSP uuid 1.1.1 (18-Nov-2004)",
  +    "$Id: OSSP uuid 1.1.1 (18-Nov-2004) $"
   };
   
   #endif /* _UUID_VERS_H_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Thu Nov 18 17:06:12 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5845176576; Thu, 18 Nov 2004 17:06:12 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20041118160612.5845176576@mail.ossp.org>
Date: Thu, 18 Nov 2004 17:06:12 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   18-Nov-2004 17:06:12
  Branch: HEAD                             Handle: 2004111816061001

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/uuid   index.wml

  Log:
    release OSSP uuid 1.1.1

  Summary:
    Revision    Changes     Path
    1.106       +1  -0      ossp-web/new/news.txt
    1.92        +1  -1      ossp-web/pkg/lib/index.wml
    1.19        +2  -2      ossp-web/pkg/lib/uuid/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.105 -r1.106 news.txt
  --- ossp-web/new/news.txt	3 Nov 2004 19:03:03 -0000	1.105
  +++ ossp-web/new/news.txt	18 Nov 2004 16:06:10 -0000	1.106
  @@ -1,3 +1,4 @@
  +18-Nov-2004: Released L<OSSP uuid> 1.1.1
   03-Nov-2004: Released L<OSSP uuid> 1.1.0
   31-Oct-2004: Released L<OSSP cfg> 0.9.4
   31-Oct-2004: Released L<OSSP var> 1.1.2
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.91 -r1.92 index.wml
  --- ossp-web/pkg/lib/index.wml	3 Nov 2004 19:03:06 -0000	1.91
  +++ ossp-web/pkg/lib/index.wml	18 Nov 2004 16:06:11 -0000	1.92
  @@ -33,7 +33,7 @@
   			done=100 stable=1.1.2 unstable=none>
     <pkg_item name="uuid" longname="OSSP uuid" type="lib"
               desc="Universally Unique Identifier"
  -			done=100 stable=1.1.0 unstable=none>
  +			done=100 stable=1.1.1 unstable=none>
     <pkg_item name="val" longname="OSSP val" type="lib"
               desc="Value Access"
   			done=95 stable=none unstable=0.9.3>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/uuid/index.wml
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 index.wml
  --- ossp-web/pkg/lib/uuid/index.wml	3 Nov 2004 19:03:08 -0000	1.18
  +++ ossp-web/pkg/lib/uuid/index.wml	18 Nov 2004 16:06:11 -0000	1.19
  @@ -44,7 +44,7 @@
   
   <pkg_status
       name="uuid" assign="rse"
  -    stable="1.1.0"    stable_date="03-Nov-2004"
  +    stable="1.1.1"    stable_date="18-Nov-2004"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -55,7 +55,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/uuid/
       directory=$(FTP_ROOT_DIR)/pkg/lib/uuid/
       files="uuid-[0-9.]*.tar.gz" 
  -	stable="uuid-1\.1\.0\.tar\.gz" unstable="none">
  +	stable="uuid-1\.1\.1\.tar\.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Nov 19 22:37:08 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AAC737655B; Fri, 19 Nov 2004 22:37:07 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/perl/ cfg.xs
Message-Id: <20041119213707.AAC737655B@mail.ossp.org>
Date: Fri, 19 Nov 2004 22:37:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-Nov-2004 22:37:07
  Branch: HEAD                             Handle: 2004111921370600

  Modified files:
    ossp-pkg/cfg/perl       cfg.xs

  Log:
    fix cfg_node_get XS function

  Summary:
    Revision    Changes     Path
    1.5         +6  -6      ossp-pkg/cfg/perl/cfg.xs
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/cfg.xs
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 cfg.xs
  --- ossp-pkg/cfg/perl/cfg.xs	17 Nov 2004 13:20:29 -0000	1.4
  +++ ossp-pkg/cfg/perl/cfg.xs	19 Nov 2004 21:37:06 -0000	1.5
  @@ -331,7 +331,7 @@
               cfg_node_attr_t attr
               cfg_node_t *&va_arg1 = NO_INIT
           CODE:
  -            RETVAL = cfg_node_set(cfg, node, attr, &va_arg1);
  +            RETVAL = cfg_node_get(cfg, node, attr, &va_arg1);
           OUTPUT:
               va_arg1
               RETVAL
  @@ -345,7 +345,7 @@
               cfg_node_attr_t attr
               int &va_arg1 = NO_INIT
           CODE:
  -            RETVAL = cfg_node_set(cfg, node, attr, &va_arg1);
  +            RETVAL = cfg_node_get(cfg, node, attr, &va_arg1);
           OUTPUT:
               va_arg1
               RETVAL
  @@ -357,7 +357,7 @@
               cfg_node_attr_t attr
               char *&va_arg1 = NO_INIT
           CODE:
  -            RETVAL = cfg_node_set(cfg, node, attr, &va_arg1);
  +            RETVAL = cfg_node_get(cfg, node, attr, &va_arg1);
           OUTPUT:
               va_arg1
               RETVAL
  @@ -368,7 +368,7 @@
               cfg_node_attr_t attr
               cfg_node_type_t &va_arg1 = NO_INIT
           CODE:
  -            RETVAL = cfg_node_set(cfg, node, attr, &va_arg1);
  +            RETVAL = cfg_node_get(cfg, node, attr, &va_arg1);
           OUTPUT:
               va_arg1
               RETVAL
  @@ -379,7 +379,7 @@
               cfg_node_attr_t attr
               cfg_data_t *&va_arg1 = NO_INIT
           CODE:
  -            RETVAL = cfg_node_set(cfg, node, attr, &va_arg1);
  +            RETVAL = cfg_node_get(cfg, node, attr, &va_arg1);
           OUTPUT:
               va_arg1
               RETVAL
  @@ -391,7 +391,7 @@
               cfg_node_t *node
               cfg_node_attr_t attr
           CODE:
  -            RETVAL = cfg_node_set(cfg, node, attr);
  +            RETVAL = cfg_node_get(cfg, node, attr);
           OUTPUT:
               RETVAL
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Nov 20 12:33:07 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E2713764CE; Sat, 20 Nov 2004 12:33:06 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ ChangeLog
Message-Id: <20041120113306.E2713764CE@mail.ossp.org>
Date: Sat, 20 Nov 2004 12:33:06 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Nov-2004 12:33:06
  Branch: HEAD                             Handle: 2004112011330600

  Modified files:
    ossp-pkg/cfg            ChangeLog

  Log:
    remember what was done

  Summary:
    Revision    Changes     Path
    1.14        +3  -0      ossp-pkg/cfg/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	31 Oct 2004 19:35:31 -0000	1.13
  +++ ossp-pkg/cfg/ChangeLog	20 Nov 2004 11:33:06 -0000	1.14
  @@ -10,6 +10,9 @@
   
    Changes between 0.9.3 and 0.9.4 (23-Apr-2003 to xx-Nov-2004):
   
  +   *) Added initial cut for Perl bindings.
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
      *) Upgrade to GNU bison 1.875d and GNU flex 2.5.31
         [Ralf S. Engelschall <rse@engelschall.com>]
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Nov 20 12:34:52 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C1C36764CE; Sat, 20 Nov 2004 12:34:52 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ ChangeLog cfg_buf.c
Message-Id: <20041120113452.C1C36764CE@mail.ossp.org>
Date: Sat, 20 Nov 2004 12:34:52 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Nov-2004 12:34:52
  Branch: HEAD                             Handle: 2004112011345200

  Modified files:
    ossp-pkg/cfg            ChangeLog cfg_buf.c

  Log:
    Return an empty string instead of NULL from internal
    cfg_buf_content() function to not make visible to the caller the
    implementation special case of an initial buffer.

  Summary:
    Revision    Changes     Path
    1.15        +5  -0      ossp-pkg/cfg/ChangeLog
    1.11        +4  -1      ossp-pkg/cfg/cfg_buf.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	20 Nov 2004 11:33:06 -0000	1.14
  +++ ossp-pkg/cfg/ChangeLog	20 Nov 2004 11:34:52 -0000	1.15
  @@ -10,6 +10,11 @@
   
    Changes between 0.9.3 and 0.9.4 (23-Apr-2003 to xx-Nov-2004):
   
  +   *) Return an empty string instead of NULL from internal
  +      cfg_buf_content() function to not make visible to the caller the
  +      implementation special case of an initial buffer.
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
      *) Added initial cut for Perl bindings.
         [Ralf S. Engelschall <rse@engelschall.com>]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_buf.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 cfg_buf.c
  --- ossp-pkg/cfg/cfg_buf.c	17 Jul 2004 07:37:55 -0000	1.10
  +++ ossp-pkg/cfg/cfg_buf.c	20 Nov 2004 11:34:52 -0000	1.11
  @@ -126,7 +126,10 @@
       if (buf == NULL)
           return CFG_ERR_ARG;
       if (ptr != NULL) {
  -        *ptr  = buf->buf_ptr;
  +        if (buf->buf_ptr == NULL)
  +            *ptr = strdup("");
  +        else
  +            *ptr = buf->buf_ptr;
           buf->buf_ptr = NULL;
       }
       if (len != NULL)
  @@ .

From ossp-cvs-owner@ossp.org  Sat Nov 20 12:42:22 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 06373764CE; Sat, 20 Nov 2004 12:42:21 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ ChangeLog cfg_syn_scan.l
Message-Id: <20041120114221.06373764CE@mail.ossp.org>
Date: Sat, 20 Nov 2004 12:42:21 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Nov-2004 12:42:21
  Branch: HEAD                             Handle: 2004112011422100

  Modified files:
    ossp-pkg/cfg            ChangeLog cfg_syn_scan.l

  Log:
    Do not let Flex generate the unused yyunput() and yy_top_state()
    functions in order to shut up compilation warnings.

  Summary:
    Revision    Changes     Path
    1.16        +4  -0      ossp-pkg/cfg/ChangeLog
    1.19        +2  -1      ossp-pkg/cfg/cfg_syn_scan.l
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	20 Nov 2004 11:34:52 -0000	1.15
  +++ ossp-pkg/cfg/ChangeLog	20 Nov 2004 11:42:21 -0000	1.16
  @@ -10,6 +10,10 @@
   
    Changes between 0.9.3 and 0.9.4 (23-Apr-2003 to xx-Nov-2004):
   
  +   *) Do not let Flex generate the unused yyunput() and yy_top_state()
  +      functions in order to shut up compilation warnings.
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
      *) Return an empty string instead of NULL from internal
         cfg_buf_content() function to not make visible to the caller the
         implementation special case of an initial buffer.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_syn_scan.l
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 cfg_syn_scan.l
  --- ossp-pkg/cfg/cfg_syn_scan.l	17 Jul 2004 07:37:55 -0000	1.18
  +++ ossp-pkg/cfg/cfg_syn_scan.l	20 Nov 2004 11:42:21 -0000	1.19
  @@ -44,7 +44,6 @@
   #define CTX ((cfg_syn_ctx_t *)yyget_extra(yyscanner))
   
   /* provide own input handling */
  -#define YY_NO_UNPUT 1
   #undef  YY_INPUT
   #define YY_INPUT(buf,result,max_size) (result = yyinput(CTX, buf, max_size))
   static int yyinput(cfg_syn_ctx_t *ctx, char *buf, int max_size);
  @@ -72,6 +71,8 @@
   %option bison-locations
   %option never-interactive
   %option noyywrap
  +%option nounput
  +%option noyy_top_state
   
   /* scanner states */
   %x SS_DQ
  @@ .

From ossp-cvs-owner@ossp.org  Sat Nov 20 12:48:39 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 938DC764CE; Sat, 20 Nov 2004 12:48:39 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ cfg_test.c
Message-Id: <20041120114839.938DC764CE@mail.ossp.org>
Date: Sat, 20 Nov 2004 12:48:39 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Nov-2004 12:48:39
  Branch: HEAD                             Handle: 2004112011483900

  Modified files:
    ossp-pkg/cfg            cfg_test.c

  Log:
    some code annotations

  Summary:
    Revision    Changes     Path
    1.15        +15 -0      ossp-pkg/cfg/cfg_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_test.c
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 cfg_test.c
  --- ossp-pkg/cfg/cfg_test.c	17 Jul 2004 07:37:55 -0000	1.14
  +++ ossp-pkg/cfg/cfg_test.c	20 Nov 2004 11:48:39 -0000	1.15
  @@ -28,14 +28,17 @@
   **  cfg_test.c: test suite
   */
   
  +/* standard system headers */
   #include <stdio.h>
   #include <stdlib.h>
   #include <string.h>
   
  +/* OSSP cfg headers */
   #include "cfg.h"
   #include "cfg_global.h"
   #include "cfg_util.h"
   
  +/* main test program procedure */
   int main(int argc, char *argv[])
   {
       cfg_rc_t rc;
  @@ -47,16 +50,19 @@
       cfg_node_t **vec;
       int i;
   
  +    /* command line processing */
       if (argc < 2 || argc > 3) {
           fprintf(stderr, "USAGE: %s <file> [<select>]\n", argv[0]);
           exit(1);
       }
   
  +    /* read configuration file into memory */
       if ((rc = cfg_util_readfile(argv[1], &im_ptr, &im_size)) != CFG_OK) {
           fprintf(stderr, "ERROR: reading file \"%s\"\n", argv[1]);
           exit(1);
       }
   
  +    /* create configuration object */
       if ((rc = cfg_create(&cfg)) != CFG_OK) {
           cfg_error(cfg, rc, &error);
           fprintf(stderr, "ERROR: cfg_create: %s\n", error);
  @@ -64,6 +70,7 @@
           exit(1);
       }
   
  +    /* parse configuration */
       if ((rc = cfg_import(cfg, NULL, CFG_FMT_CFG, im_ptr, im_size)) != CFG_OK) {
           cfg_error(cfg, rc, &error);
           fprintf(stderr, "ERROR: cfg_import: %s\n", error);
  @@ -71,8 +78,11 @@
           cfg_destroy(cfg);
           exit(1);
       }
  +
  +    /* free configuration file in memory */
       free(im_ptr);
   
  +    /* export configuration again into memory */
       if ((rc = cfg_export(cfg, NULL, CFG_FMT_CFG, &ex_ptr, 0)) != CFG_OK) {
           cfg_error(cfg, rc, &error);
           fprintf(stderr, "ERROR: cfg_export: %s\n", error);
  @@ -80,10 +90,14 @@
           exit(1);
       }
   
  +    /* print results */
       fprintf(stdout, "%s", ex_ptr);
       fflush(stdout);
  +
  +    /* free configuration file in memory */
       free(ex_ptr);
   
  +    /* optional node selection */
       if (argc == 3) {
           fprintf(stdout, "==== selection process ====\n");
           if ((rc = cfg_node_select(cfg, NULL, &vec, "%s", argv[2])) != CFG_OK) {
  @@ -108,6 +122,7 @@
           fprintf(stdout, "==== selection end ====\n");
       }
   
  +    /* destroy configuration object */
       cfg_destroy(cfg);
   
       return 0;
  @@ .

From ossp-cvs-owner@ossp.org  Sat Nov 20 12:52:42 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 30AF7764CE; Sat, 20 Nov 2004 12:52:42 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ ChangeLog README cfg_vers.c
Message-Id: <20041120115242.30AF7764CE@mail.ossp.org>
Date: Sat, 20 Nov 2004 12:52:42 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Nov-2004 12:52:42
  Branch: HEAD                             Handle: 2004112011524100

  Modified files:
    ossp-pkg/cfg            ChangeLog README cfg_vers.c

  Log:
    Ops, we are already developing towards 0.9.5, of course

  Summary:
    Revision    Changes     Path
    1.17        +3  -1      ossp-pkg/cfg/ChangeLog
    1.11        +1  -1      ossp-pkg/cfg/README
    1.9         +9  -9      ossp-pkg/cfg/cfg_vers.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	20 Nov 2004 11:42:21 -0000	1.16
  +++ ossp-pkg/cfg/ChangeLog	20 Nov 2004 11:52:41 -0000	1.17
  @@ -8,7 +8,7 @@
   
     CHANGELOG
   
  - Changes between 0.9.3 and 0.9.4 (23-Apr-2003 to xx-Nov-2004):
  + Changes between 0.9.3 and 0.9.4 (31-Oct-2004 to xx-Nov-2004):
   
      *) Do not let Flex generate the unused yyunput() and yy_top_state()
         functions in order to shut up compilation warnings.
  @@ -22,6 +22,8 @@
      *) Added initial cut for Perl bindings.
         [Ralf S. Engelschall <rse@engelschall.com>]
   
  + Changes between 0.9.4 and 0.9.5 (23-Apr-2003 to 31-Oct-2004):
  +
      *) Upgrade to GNU bison 1.875d and GNU flex 2.5.31
         [Ralf S. Engelschall <rse@engelschall.com>]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/README
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 README
  --- ossp-pkg/cfg/README	31 Oct 2004 19:37:36 -0000	1.10
  +++ ossp-pkg/cfg/README	20 Nov 2004 11:52:41 -0000	1.11
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \___|_|  \__, |
                                                |___/
     OSSP cfg - Configuration Parsing
  -  Version 0.9.4 (31-Oct-2004)
  +  Version 0.9.5 (20-Nov-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_vers.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 cfg_vers.c
  --- ossp-pkg/cfg/cfg_vers.c	31 Oct 2004 19:38:03 -0000	1.8
  +++ ossp-pkg/cfg/cfg_vers.c	20 Nov 2004 11:52:41 -0000	1.9
  @@ -8,7 +8,7 @@
   #ifndef _CFG_VERS_C_
   #define _CFG_VERS_C_
   
  -#define __CFG_VERSION 0x009204
  +#define __CFG_VERSION 0x009205
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _CFG_VERS_C_AS_HEADER_
   
   __cfg_version_t __cfg_version = {
  -    0x009204,
  -    "0.9.4",
  -    "0.9.4 (31-Oct-2004)",
  -    "This is OSSP cfg, Version 0.9.4 (31-Oct-2004)",
  -    "OSSP cfg 0.9.4 (31-Oct-2004)",
  -    "OSSP cfg/0.9.4",
  -    "@(#)OSSP cfg 0.9.4 (31-Oct-2004)",
  -    "$Id: cfg_vers.c,v 1.8 2004/10/31 19:38:03 rse Exp $"
  +    0x009205,
  +    "0.9.5",
  +    "0.9.5 (20-Nov-2004)",
  +    "This is OSSP cfg, Version 0.9.5 (20-Nov-2004)",
  +    "OSSP cfg 0.9.5 (20-Nov-2004)",
  +    "OSSP cfg/0.9.5",
  +    "@(#)OSSP cfg 0.9.5 (20-Nov-2004)",
  +    "$Id: cfg_vers.c,v 1.9 2004/11/20 11:52:41 rse Exp $"
   };
   
   #endif /* _CFG_VERS_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Sat Nov 20 12:53:11 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7E6EB764F4; Sat, 20 Nov 2004 12:53:11 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ ChangeLog
Message-Id: <20041120115311.7E6EB764F4@mail.ossp.org>
Date: Sat, 20 Nov 2004 12:53:11 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Nov-2004 12:53:11
  Branch: HEAD                             Handle: 2004112011531100

  Modified files:
    ossp-pkg/cfg            ChangeLog

  Log:
    wrong versions again

  Summary:
    Revision    Changes     Path
    1.18        +2  -2      ossp-pkg/cfg/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	20 Nov 2004 11:52:41 -0000	1.17
  +++ ossp-pkg/cfg/ChangeLog	20 Nov 2004 11:53:11 -0000	1.18
  @@ -8,7 +8,7 @@
   
     CHANGELOG
   
  - Changes between 0.9.3 and 0.9.4 (31-Oct-2004 to xx-Nov-2004):
  + Changes between 0.9.4 and 0.9.5 (31-Oct-2004 to xx-Nov-2004):
   
      *) Do not let Flex generate the unused yyunput() and yy_top_state()
         functions in order to shut up compilation warnings.
  @@ -22,7 +22,7 @@
      *) Added initial cut for Perl bindings.
         [Ralf S. Engelschall <rse@engelschall.com>]
   
  - Changes between 0.9.4 and 0.9.5 (23-Apr-2003 to 31-Oct-2004):
  + Changes between 0.9.3 and 0.9.4 (23-Apr-2003 to 31-Oct-2004):
   
      *) Upgrade to GNU bison 1.875d and GNU flex 2.5.31
         [Ralf S. Engelschall <rse@engelschall.com>]
  @@ .

From ossp-cvs-owner@ossp.org  Sat Nov 20 13:02:32 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7CFA676502; Sat, 20 Nov 2004 13:02:32 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ cfg_syn.c cfg_syn.h
Message-Id: <20041120120232.7CFA676502@mail.ossp.org>
Date: Sat, 20 Nov 2004 13:02:32 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Nov-2004 13:02:32
  Branch: HEAD                             Handle: 2004112012023200

  Modified files:
    ossp-pkg/cfg            cfg_syn.c cfg_syn.h

  Log:
    annotate code with more comments

  Summary:
    Revision    Changes     Path
    1.18        +16 -5      ossp-pkg/cfg/cfg_syn.c
    1.7         +1  -1      ossp-pkg/cfg/cfg_syn.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_syn.c
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 cfg_syn.c
  --- ossp-pkg/cfg/cfg_syn.c	17 Jul 2004 07:37:55 -0000	1.17
  +++ ossp-pkg/cfg/cfg_syn.c	20 Nov 2004 12:02:32 -0000	1.18
  @@ -25,7 +25,7 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  cfg_syn.c: syntax parsing
  +**  cfg_syn.c: syntax parsing and formatting
   */
   
   #include <stdio.h>
  @@ -170,12 +170,14 @@
       return;
   }
   
  +/* internal cfg_syn_export structure */
   typedef struct {
       cfg_t *cfg;
       cfg_buf_t *buf;
       int indent;
   } export_t;
   
  +/* internal cfg_syn_export helper function: sprintf(3) style output formatting */
   static void export_format(export_t *ctx, char *fmt, ...)
   {
       int i;
  @@ -201,6 +203,7 @@
       return;
   }
   
  +/* internal cfg_syn_export helper function: indentation handling */
   static void export_indent(export_t *ctx, signed int n)
   {
       if (n > 0) {
  @@ -219,6 +222,7 @@
       }
   }
   
  +/* internal cfg_syn_export helper function: token output formatting */
   static void export_token(export_t *ctx, const char *token)
   {
       const char *cp;
  @@ -264,6 +268,7 @@
       return;
   }
   
  +/* internal cfg_syn_export helper function: recursive node processing */
   static void export_node(export_t *ctx, cfg_node_t *node)
   {
       cfg_node_type_t type;
  @@ -274,20 +279,22 @@
       if ((rc = cfg_node_get(ctx->cfg, node, CFG_NODE_ATTR_TYPE, &type)) != CFG_OK)
           return;
       if (type == CFG_NODE_TYPE_SEQ) {
  +        /* node is a sequence */
           export_format(ctx, "{\n");
           export_indent(ctx, 1);
           cfg_node_get(ctx->cfg, node, CFG_NODE_ATTR_CHILD1, &node2);
           while (node2 != NULL) {
  -            export_node(ctx, node2);
  +            export_node(ctx, node2); /* recursion */
               cfg_node_get(ctx->cfg, node2, CFG_NODE_ATTR_RBROTH, &node2);
           }
           export_indent(ctx, -1);
           export_format(ctx, "}");
       }
       else if (type == CFG_NODE_TYPE_DIR) {
  +        /* node is a directive */
           cfg_node_get(ctx->cfg, node, CFG_NODE_ATTR_CHILD1, &node2);
           while (node2 != NULL) {
  -            export_node(ctx, node2);
  +            export_node(ctx, node2); /* recursion */
               cfg_node_get(ctx->cfg, node2, CFG_NODE_ATTR_RBROTH, &node2);
               if (node2 != NULL)
                   export_format(ctx, " ");
  @@ -298,6 +305,7 @@
           export_format(ctx, "\n");
       }
       else if (type == CFG_NODE_TYPE_ARG) {
  +        /* node is a token */
           cfg_node_get(ctx->cfg, node, CFG_NODE_ATTR_TOKEN, &token);
           if (token != NULL)
               export_token(ctx, token);
  @@ -307,6 +315,7 @@
       return;
   }
   
  +/* export configuration node tree into textual OSSP cfg syntax */
   cfg_rc_t cfg_syn_export(
       cfg_t *cfg,
       cfg_node_t *node,
  @@ -348,18 +357,20 @@
       return CFG_OK;
   }
   
  +/* internal cfg_syn_destroy helper function: recursive node destruction */
   static cfg_rc_t cfg_syn_destroy_node(cfg_t *cfg, cfg_node_t *node)
   {
       if (node == NULL)
           return CFG_ERR_ARG;
       if (node->child1 != NULL)
  -        cfg_syn_destroy_node(cfg, node->child1);
  +        cfg_syn_destroy_node(cfg, node->child1); /* recursion */
       if (node->rbroth != NULL)
  -        cfg_syn_destroy_node(cfg, node->rbroth);
  +        cfg_syn_destroy_node(cfg, node->rbroth); /* recursion */
       cfg_node_destroy(cfg, node);
       return CFG_OK;
   }
   
  +/* destroy syntax node tree */
   cfg_rc_t cfg_syn_destroy(cfg_t *cfg, cfg_node_t *node)
   {
       if (node == NULL)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_syn.h
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 cfg_syn.h
  --- ossp-pkg/cfg/cfg_syn.h	17 Jul 2004 07:37:55 -0000	1.6
  +++ ossp-pkg/cfg/cfg_syn.h	20 Nov 2004 12:02:32 -0000	1.7
  @@ -25,7 +25,7 @@
   **  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   **  SUCH DAMAGE.
   **
  -**  cfg_syn.h: syntax parsing header
  +**  cfg_syn.h: syntax parsing and formatting header
   */
   
   #ifndef __CFG_SYN_H__
  @@ .

From ossp-cvs-owner@ossp.org  Sat Nov 20 13:54:10 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id ABD8F76507; Sat, 20 Nov 2004 13:54:09 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ ChangeLog cfg_main.c cfg_syn.c cfg_syn_parse...
Message-Id: <20041120125409.ABD8F76507@mail.ossp.org>
Date: Sat, 20 Nov 2004 13:54:09 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Nov-2004 13:54:09
  Branch: HEAD                             Handle: 2004112012540700

  Modified files:
    ossp-pkg/cfg            ChangeLog cfg_main.c cfg_syn.c cfg_syn_parse.y
                            cfg_syn_scan.l cfg_test.c cfg_util.c cfg_util.h

  Log:
    - Fixed cfg_test program by correctly passing the used number of
      bytes in the buffer instead of the size of the buffer.
    - Accept zero-length strings for parsing.
    - Correctly handle end-of-file during plain text token scanning.

  Summary:
    Revision    Changes     Path
    1.19        +8  -0      ossp-pkg/cfg/ChangeLog
    1.12        +1  -1      ossp-pkg/cfg/cfg_main.c
    1.19        +1  -1      ossp-pkg/cfg/cfg_syn.c
    1.9         +2  -1      ossp-pkg/cfg/cfg_syn_parse.y
    1.20        +13 -1      ossp-pkg/cfg/cfg_syn_scan.l
    1.16        +3  -2      ossp-pkg/cfg/cfg_test.c
    1.5         +13 -10     ossp-pkg/cfg/cfg_util.c
    1.5         +1  -1      ossp-pkg/cfg/cfg_util.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	20 Nov 2004 11:53:11 -0000	1.18
  +++ ossp-pkg/cfg/ChangeLog	20 Nov 2004 12:54:07 -0000	1.19
  @@ -10,6 +10,14 @@
   
    Changes between 0.9.4 and 0.9.5 (31-Oct-2004 to xx-Nov-2004):
   
  +   *) Fixed cfg_test program by correctly passing the used number of
  +      bytes in the buffer instead of the size of the buffer.
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +   *) Accept zero-length strings for parsing. Correctly handle
  +      end-of-file during plain text token scanning.
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
      *) Do not let Flex generate the unused yyunput() and yy_top_state()
         functions in order to shut up compilation warnings.
         [Ralf S. Engelschall <rse@engelschall.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_main.c
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 cfg_main.c
  --- ossp-pkg/cfg/cfg_main.c	17 Jul 2004 07:37:55 -0000	1.11
  +++ ossp-pkg/cfg/cfg_main.c	20 Nov 2004 12:54:07 -0000	1.12
  @@ -157,7 +157,7 @@
       char error[1024];
       cfg_node_t *root;
   
  -    if (cfg == NULL || in_ptr == NULL || in_len == 0)
  +    if (cfg == NULL || in_ptr == NULL)
           return CFG_ERR_ARG;
       if (node == NULL)
           node = cfg->root;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_syn.c
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 cfg_syn.c
  --- ossp-pkg/cfg/cfg_syn.c	20 Nov 2004 12:02:32 -0000	1.18
  +++ ossp-pkg/cfg/cfg_syn.c	20 Nov 2004 12:54:07 -0000	1.19
  @@ -60,7 +60,7 @@
       void *yyscan;
   
       /* argument sanity checking */
  -    if (node == NULL || in_ptr == NULL || in_len == 0)
  +    if (node == NULL || in_ptr == NULL)
           return CFG_ERR_ARG;
   
       /* initialize scanner */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_syn_parse.y
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 cfg_syn_parse.y
  --- ossp-pkg/cfg/cfg_syn_parse.y	17 Jul 2004 07:37:55 -0000	1.8
  +++ ossp-pkg/cfg/cfg_syn_parse.y	20 Nov 2004 12:54:07 -0000	1.9
  @@ -57,7 +57,8 @@
   
   /* scanner state transition */
   extern void cfg_syn_scan_push(cfg_syn_ctx_t *, const char *state);
  -extern void cfg_syn_scan_pop(cfg_syn_ctx_t *);
  +extern void cfg_syn_scan_pop (cfg_syn_ctx_t *);
  +
   %}
   
   /* parser options */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_syn_scan.l
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 cfg_syn_scan.l
  --- ossp-pkg/cfg/cfg_syn_scan.l	20 Nov 2004 11:42:21 -0000	1.19
  +++ ossp-pkg/cfg/cfg_syn_scan.l	20 Nov 2004 12:54:07 -0000	1.20
  @@ -56,11 +56,12 @@
       yylloc->first = yylloc->last; \
       yylloc->last += yyleng;
   #define YY_USER_ACTION_ROLLBACK \
  -    yylloc->last = yylloc->first
  +    yylloc->last  = yylloc->first
   
   static char closing_brace(char open);
   static int hex_nibble(const char hex);
   static int hex_sequence(char *out_ptr, size_t out_len, const char *in_ptr, size_t in_len);
  +
   %}
   
   /* scanner options */
  @@ -294,6 +295,17 @@
       BEGIN(INITIAL);
       return T_STRING;
   }
  +<SS_PT><<EOF>> {
  +    *cpStr = '\0';
  +    yylval->cpString = strdup(caStr);
  +    BEGIN(INITIAL);
  +    return T_STRING;
  +}
  +
  +<INITIAL><<EOF>> {
  +    /* end of scanning */
  +    yyterminate();
  +}
   
   %%
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_test.c
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 cfg_test.c
  --- ossp-pkg/cfg/cfg_test.c	20 Nov 2004 11:48:39 -0000	1.15
  +++ ossp-pkg/cfg/cfg_test.c	20 Nov 2004 12:54:07 -0000	1.16
  @@ -44,6 +44,7 @@
       cfg_rc_t rc;
       char *im_ptr;
       size_t im_size;
  +    size_t im_used;
       char *ex_ptr;
       char *error;
       cfg_t *cfg;
  @@ -57,7 +58,7 @@
       }
   
       /* read configuration file into memory */
  -    if ((rc = cfg_util_readfile(argv[1], &im_ptr, &im_size)) != CFG_OK) {
  +    if ((rc = cfg_util_readfile(argv[1], &im_ptr, &im_size, &im_used)) != CFG_OK) {
           fprintf(stderr, "ERROR: reading file \"%s\"\n", argv[1]);
           exit(1);
       }
  @@ -71,7 +72,7 @@
       }
   
       /* parse configuration */
  -    if ((rc = cfg_import(cfg, NULL, CFG_FMT_CFG, im_ptr, im_size)) != CFG_OK) {
  +    if ((rc = cfg_import(cfg, NULL, CFG_FMT_CFG, im_ptr, im_used)) != CFG_OK) {
           cfg_error(cfg, rc, &error);
           fprintf(stderr, "ERROR: cfg_import: %s\n", error);
           free(im_ptr);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_util.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 cfg_util.c
  --- ossp-pkg/cfg/cfg_util.c	17 Jul 2004 07:37:55 -0000	1.4
  +++ ossp-pkg/cfg/cfg_util.c	20 Nov 2004 12:54:07 -0000	1.5
  @@ -37,7 +37,7 @@
   #include "cfg_global.h"
   #include "cfg_util.h"
   
  -cfg_rc_t cfg_util_readfile(const char *filename, char **buf_ptr, size_t *buf_len)
  +cfg_rc_t cfg_util_readfile(const char *filename, char **buf_ptr, size_t *buf_size, size_t *buf_used)
   {
       FILE *fp = NULL;
       size_t n;
  @@ -45,16 +45,16 @@
   
       if (strcmp(filename, "-") == 0) {
           /* file is given on stdin */
  -        (*buf_len) = 32;
  -        if ((*buf_ptr = (char *)malloc(*buf_len)) == NULL)
  +        (*buf_size) = 32;
  +        if ((*buf_ptr = (char *)malloc(*buf_size)) == NULL)
               return CFG_ERR_SYS;
           cp = *buf_ptr;
  -        while ((n = fread(cp, 1, (*buf_len)-(cp-(*buf_ptr)), stdin)) > 0) {
  +        while ((n = fread(cp, 1, (*buf_size)-(cp-(*buf_ptr)), stdin)) > 0) {
               cp += n;
  -            if (((*buf_ptr)+(*buf_len))-cp < (*buf_len)/8) {
  -                (*buf_len) *= 2;
  +            if (((*buf_ptr)+(*buf_size))-cp < (*buf_size)/8) {
  +                (*buf_size) *= 2;
                   n = cp-(*buf_ptr);
  -                if ((cp = (char *)realloc(*buf_ptr, *buf_len)) == NULL) {
  +                if ((cp = (char *)realloc(*buf_ptr, *buf_size)) == NULL) {
                       free(*buf_ptr);
                       return CFG_ERR_SYS;
                   }
  @@ -63,6 +63,7 @@
               }
           }
           *cp = '\0';
  +        *buf_used = (cp - *buf_ptr);
       }
       else {
           /* file is given on filesystem */
  @@ -81,11 +82,13 @@
                   return CFG_ERR_SYS;
               }
               (*buf_ptr)[n] = '\0';
  -            (*buf_len) = n+1;
  +            (*buf_size)   = n+1;
  +            (*buf_used)   = n;
           }
           else {
  -            (*buf_ptr) = strdup("");
  -            (*buf_len) = 1;
  +            (*buf_ptr)  = strdup("");
  +            (*buf_size) = 1;
  +            (*buf_used) = 0;
           }
           fclose(fp);
       }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_util.h
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 cfg_util.h
  --- ossp-pkg/cfg/cfg_util.h	17 Jul 2004 07:37:55 -0000	1.4
  +++ ossp-pkg/cfg/cfg_util.h	20 Nov 2004 12:54:07 -0000	1.5
  @@ -33,7 +33,7 @@
   
   #include "cfg.h"
   
  -cfg_rc_t cfg_util_readfile(const char *filename, char **buf_ptr, size_t *buf_len);
  +cfg_rc_t cfg_util_readfile(const char *filename, char **buf_ptr, size_t *buf_size, size_t *buf_used);
   
   #endif /* __CFG_UTIL_H__ */
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Nov 20 15:52:58 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 122FC764D1; Sat, 20 Nov 2004 15:52:58 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ ChangeLog cfg.h cfg_node.c cfg_syn.c ossp-pk...
Message-Id: <20041120145258.122FC764D1@mail.ossp.org>
Date: Sat, 20 Nov 2004 15:52:58 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Nov-2004 15:52:57
  Branch: HEAD                             Handle: 2004112014525601

  Modified files:
    ossp-pkg/cfg            ChangeLog cfg.h cfg_node.c cfg_syn.c
    ossp-pkg/cfg/perl       cfg.xs

  Log:
    Change cfg_node_root() API function to be able to both
    set and/or get the root node.

  Summary:
    Revision    Changes     Path
    1.20        +4  -0      ossp-pkg/cfg/ChangeLog
    1.15        +1  -1      ossp-pkg/cfg/cfg.h
    1.21        +11 -5      ossp-pkg/cfg/cfg_node.c
    1.20        +1  -1      ossp-pkg/cfg/cfg_syn.c
    1.6         +5  -4      ossp-pkg/cfg/perl/cfg.xs
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	20 Nov 2004 12:54:07 -0000	1.19
  +++ ossp-pkg/cfg/ChangeLog	20 Nov 2004 14:52:56 -0000	1.20
  @@ -10,6 +10,10 @@
   
    Changes between 0.9.4 and 0.9.5 (31-Oct-2004 to xx-Nov-2004):
   
  +   *) Change cfg_node_root() API function to be able to both
  +      set and/or get the root node.
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
      *) Fixed cfg_test program by correctly passing the used number of
         bytes in the buffer instead of the size of the buffer.
         [Ralf S. Engelschall <rse@engelschall.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg.h
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 cfg.h
  --- ossp-pkg/cfg/cfg.h	17 Jul 2004 07:37:55 -0000	1.14
  +++ ossp-pkg/cfg/cfg.h	20 Nov 2004 14:52:56 -0000	1.15
  @@ -135,7 +135,7 @@
   cfg_rc_t   cfg_node_get    (cfg_t  *cfg, cfg_node_t  *node, cfg_node_attr_t attr, ...);
   
   /* node traversing/locating */
  -cfg_rc_t   cfg_node_root   (cfg_t  *cfg, cfg_node_t **node);
  +cfg_rc_t   cfg_node_root   (cfg_t  *cfg, cfg_node_t  *node, cfg_node_t **node_old);
   cfg_rc_t   cfg_node_select (cfg_t  *cfg, cfg_node_t  *node, cfg_node_t ***result, const char *spec, ...);
   cfg_rc_t   cfg_node_find   (cfg_t  *cfg, cfg_node_t  *node, cfg_rc_t (*cb_fct_cmp)(cfg_t *, cfg_node_t *, void *), void *cb_ctx_cmp, cfg_node_t **cont);
   cfg_rc_t   cfg_node_apply  (cfg_t  *cfg, cfg_node_t  *node, cfg_rc_t (*cb_fct_cmp)(cfg_t *, cfg_node_t *, void *), void *cb_ctx_cmp, cfg_rc_t (*cb_fct_cb)(cfg_t *, cfg_node_t *, void *), void *cb_ctx_cb);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_node.c
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 cfg_node.c
  --- ossp-pkg/cfg/cfg_node.c	17 Jul 2004 14:34:06 -0000	1.20
  +++ ossp-pkg/cfg/cfg_node.c	20 Nov 2004 14:52:56 -0000	1.21
  @@ -358,18 +358,24 @@
       return CFG_OK;
   }
   
  -/* return root node */
  +/* get and/or set root node */
   cfg_rc_t
   cfg_node_root(
       cfg_t *cfg,
  -    cfg_node_t **node)
  +    cfg_node_t  *node,
  +    cfg_node_t **node_old)
   {
       /* argument sanity checking */
  -    if (cfg == NULL || node == NULL)
  +    if (cfg == NULL || (node == NULL && node_old == NULL))
           return CFG_ERR_ARG;
   
  -    /* just return the root pointer */
  -    *node = cfg->root;
  +    /* optionally get old root node pointer */
  +    if (node_old != NULL)
  +        *node_old = cfg->root;
  +
  +    /* optionally set new root node pointer */
  +    if (node != NULL)
  +        cfg->root = node;
   
       return CFG_OK;
   }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_syn.c
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 cfg_syn.c
  --- ossp-pkg/cfg/cfg_syn.c	20 Nov 2004 12:54:07 -0000	1.19
  +++ ossp-pkg/cfg/cfg_syn.c	20 Nov 2004 14:52:56 -0000	1.20
  @@ -335,7 +335,7 @@
       ctx.buf    = buf;
       ctx.indent = 0;
   
  -    if ((rc = cfg_node_root(cfg, &root)) != CFG_OK)
  +    if ((rc = cfg_node_root(cfg, NULL, &root)) != CFG_OK)
           return rc;
       if (node == root) {
           /* if we dump the whole configuration, treat the first SEQ node special
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/cfg.xs
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 cfg.xs
  --- ossp-pkg/cfg/perl/cfg.xs	19 Nov 2004 21:37:06 -0000	1.5
  +++ ossp-pkg/cfg/perl/cfg.xs	20 Nov 2004 14:52:57 -0000	1.6
  @@ -396,16 +396,17 @@
               RETVAL
   
   cfg_rc_t
  -cfg_node_root(cfg,node)
  +cfg_node_root(cfg,node,node_old)
       PROTOTYPE:
           $$
       INPUT:
           cfg_t *cfg
  -        cfg_node_t *&node = NO_INIT
  +        cfg_node_t *node
  +        cfg_node_t *&node_old = NO_INIT
       CODE:
  -        RETVAL = cfg_node_root(cfg, &node);
  +        RETVAL = cfg_node_root(cfg, node, &node_old);
       OUTPUT:
  -        node
  +        node_old
           RETVAL
   
   cfg_rc_t
  @@ .

From ossp-cvs-owner@ossp.org  Sat Nov 20 17:51:53 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3F07676500; Sat, 20 Nov 2004 17:51:53 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/perl/ cfg.pm
Message-Id: <20041120165153.3F07676500@mail.ossp.org>
Date: Sat, 20 Nov 2004 17:51:53 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Nov-2004 17:51:53
  Branch: HEAD                             Handle: 2004112016515200

  Modified files:
    ossp-pkg/cfg/perl       cfg.pm

  Log:
    synchronize perl wrapper for changed cfg_node_root function

  Summary:
    Revision    Changes     Path
    1.6         +6  -5      ossp-pkg/cfg/perl/cfg.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/cfg.pm
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 cfg.pm
  --- ossp-pkg/cfg/perl/cfg.pm	17 Nov 2004 13:15:15 -0000	1.5
  +++ ossp-pkg/cfg/perl/cfg.pm	20 Nov 2004 16:51:52 -0000	1.6
  @@ -241,11 +241,12 @@
       return ($self->{-rc} == $self->CFG_OK ? $arg : undef);
   }
   
  -sub node_root ($) {
  -    my ($self) = @_;
  -    my $node;
  -    $self->{-rc} = cfg_node_root($self->{-cfg}, $node);
  -    return ($self->{-rc} == $self->CFG_OK ? $node : undef);
  +sub node_root ($;$) {
  +    my ($self, $node_new) = @_;
  +    $node_new ||= \0;
  +    my $node_old;
  +    $self->{-rc} = cfg_node_root($self->{-cfg}, $node_new, $node_old);
  +    return ($self->{-rc} == $self->CFG_OK ? $node_old : undef);
   }
   
   sub node_select ($$$) {
  @@ .

From ossp-cvs-owner@ossp.org  Sat Nov 20 18:09:36 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C3F4376500; Sat, 20 Nov 2004 18:09:35 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ ChangeLog ossp-pkg/cfg/perl/ cfg.pm cfg.pod
Message-Id: <20041120170935.C3F4376500@mail.ossp.org>
Date: Sat, 20 Nov 2004 18:09:35 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Nov-2004 18:09:35
  Branch: HEAD                             Handle: 2004112017093401

  Modified files:
    ossp-pkg/cfg            ChangeLog
    ossp-pkg/cfg/perl       cfg.pm cfg.pod

  Log:
    Add OSSP:::cfg::simple Perl convenience API which is an
    ultra high-level API allowing especially the bi-directional
    conversion between the C API node tree representation and a
    simplified Perl data structure representation.

  Summary:
    Revision    Changes     Path
    1.21        +6  -0      ossp-pkg/cfg/ChangeLog
    1.7         +182 -0     ossp-pkg/cfg/perl/cfg.pm
    1.3         +26 -3      ossp-pkg/cfg/perl/cfg.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	20 Nov 2004 14:52:56 -0000	1.20
  +++ ossp-pkg/cfg/ChangeLog	20 Nov 2004 17:09:34 -0000	1.21
  @@ -10,6 +10,12 @@
   
    Changes between 0.9.4 and 0.9.5 (31-Oct-2004 to xx-Nov-2004):
   
  +   *) Add OSSP:::cfg::simple Perl convenience API which is an
  +      ultra high-level API allowing especially the bi-directional
  +      conversion between the C API node tree representation and a
  +      simplified Perl data structure representation.
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
      *) Change cfg_node_root() API function to be able to both
         set and/or get the root node.
         [Ralf S. Engelschall <rse@engelschall.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/cfg.pm
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 cfg.pm
  --- ossp-pkg/cfg/perl/cfg.pm	20 Nov 2004 16:51:52 -0000	1.6
  +++ ossp-pkg/cfg/perl/cfg.pm	20 Nov 2004 17:09:35 -0000	1.7
  @@ -326,5 +326,187 @@
   #   static-loading functions
   XSLoader::load('OSSP::cfg', $VERSION);
   
  +##
  +##  Highest-Level Perl Convenience API
  +##  (based on OSSP::cfg Perl API above)
  +##
  +
  +package OSSP::cfg::simple;
  +
  +use 5.008;
  +use strict;
  +use warnings;
  +use Carp;
  +use IO::File;
  +
  +#   object constructor
  +sub new ($;$) {
  +    my ($proto, $input) = @_;
  +    my $class = ref($proto) || $proto;
  +    my $self = {};
  +    bless ($self, $class);
  +    $self->{-cfg} = new OSSP::cfg
  +        or croak "failed to create OSSP::cfg object";
  +    $self->parse($input) if (defined($input));
  +    return $self;
  +}
  +
  +#   object destructor
  +sub DESTROY ($) {
  +    my ($self) = @_;
  +    undef $self->{-cfg};
  +    return;
  +}
  +
  +#   parse textual syntax into node tree
  +sub parse ($$) {
  +    my ($self, $input) = @_;
  +    my $cfg = $self->{-cfg};
  +    if (length($input) < 1024 and $input !~ m|[{}&\n\s]|s) {
  +        if (-f $input) {
  +            my $io = new IO::File "<" . $input
  +               or croak "unable to read from configuration file \"".$input."\"";
  +            { local $/; $input = <$io>; }
  +            $io->close();
  +        }
  +    }
  +    $cfg->import(\0, $cfg->CFG_FMT_CFG, $input)
  +        or die "failed to parse configuration: " . $cfg->error();
  +    return $self;
  +}
  +
  +#   format textual syntax from node tree
  +sub format ($$) {
  +    my ($self) = @_;
  +    my $cfg = $self->{-cfg};
  +    my $root = $cfg->node_root();
  +    my $str = $cfg->export($root, $cfg->CFG_FMT_CFG)
  +        or die "failed to format configuration: " . $cfg->error();
  +    return $str;
  +}
  +
  +#   pack Perl complex data structure into node tree
  +sub pack ($$) {
  +    my ($self, $tree) = @_;
  +
  +    #   destroy old and create new OSSP::cfg object
  +    undef $self->{-cfg};
  +    my $cfg = new OSSP::cfg
  +        or croak "failed to create OSSP::cfg object";
  +    $self->{-cfg} = $cfg;
  +
  +    #   start parsing with a sequence
  +    my $node = &parse_seq($cfg, $tree);
  +
  +    #   parse a sequence (reference) scalar
  +    sub parse_seq {
  +        my ($cfg, $seq) = @_;
  +        my $node = undef;
  +        if (ref($seq) eq 'ARRAY') {
  +            $node = $cfg->node_create();
  +            $cfg->node_set($node, $cfg->CFG_NODE_ATTR_TYPE, $cfg->CFG_NODE_TYPE_SEQ);
  +            if (@{$seq} > 0) {
  +                my $child = &parse_dir($cfg, $seq->[0]);
  +                $cfg->node_set($node, $cfg->CFG_NODE_ATTR_CHILD1, $child);
  +                my $sibling = $child;
  +                foreach my $dir (@{$seq}[1..$#{$seq}]) {
  +                    $child = &parse_dir($cfg, $dir);
  +                    $cfg->node_set($sibling, $cfg->CFG_NODE_ATTR_RBROTH, $child);
  +                    $sibling = $child;
  +                }
  +            }
  +        }
  +        return $node;
  +    }
  +
  +    #   parse a directive (reference) scalar
  +    sub parse_dir {
  +        my ($cfg, $dir) = @_;
  +        my $node = undef;
  +        if (ref($dir) eq 'ARRAY') {
  +            $node = $cfg->node_create();
  +            $cfg->node_set($node, $cfg->CFG_NODE_ATTR_TYPE, $cfg->CFG_NODE_TYPE_DIR);
  +            if (@{$dir} > 0) {
  +                my $child = &parse_tok($cfg, $dir->[0]);
  +                $cfg->node_set($node, $cfg->CFG_NODE_ATTR_CHILD1, $child);
  +                my $sibling = $child;
  +                foreach my $tok (@{$dir}[1..$#{$dir}]) {
  +                    $child = &parse_tok($cfg, $tok);
  +                    $cfg->node_set($sibling, $cfg->CFG_NODE_ATTR_RBROTH, $child);
  +                    $sibling = $child;
  +                }
  +            }
  +        }
  +        return $node;
  +    }
  +
  +    #   parse a token scalar
  +    sub parse_tok {
  +        my ($cfg, $tok) = @_;
  +        my $node;
  +        if (ref($tok) eq 'ARRAY') {
  +            #   token is actually a sub-sequence
  +            $node = &parse_seq($cfg, $tok); # recursion
  +        }
  +        else {
  +            #   token is a plain one
  +            $node = $cfg->node_create();
  +            $cfg->node_set($node, $cfg->CFG_NODE_ATTR_TYPE, $cfg->CFG_NODE_TYPE_ARG);
  +            $cfg->node_set($node, $cfg->CFG_NODE_ATTR_TOKEN, $tok);
  +        }
  +        return $node;
  +    }
  +
  +    #   set generated node tree into OSSP::cfg object
  +    $cfg->node_root($node);
  +
  +    return $self;
  +}
  +
  +#   unpack Perl complex data structure from node tree
  +sub unpack ($) {
  +    my ($self) = @_;
  +    my $cfg = $self->{-cfg};
  +
  +    #   start traversing the node tree from the root node
  +    my $root = $cfg->node_root();
  +    my $tree = &traverse($cfg, $root);
  +
  +    #   node processing function
  +    sub traverse {
  +        my ($cfg, $node) = @_;
  +        return if (not(ref($node) and $$node != 0));
  +        my $type = $cfg->node_get($node, $cfg->CFG_NODE_ATTR_TYPE);
  +        if ($type == $cfg->CFG_NODE_TYPE_SEQ) {
  +            #   node is a sequence
  +            my $seq = [];
  +            $node = $cfg->node_get($node, $cfg->CFG_NODE_ATTR_CHILD1);
  +            while (ref($node) and $$node != 0) {
  +                my $tree = &traverse($cfg, $node); # recursion
  +                push(@{$seq}, $tree) if (defined($tree));
  +                $node = $cfg->node_get($node, $cfg->CFG_NODE_ATTR_RBROTH);
  +            }
  +            return $seq;
  +        }
  +        elsif ($type == $cfg->CFG_NODE_TYPE_DIR) {
  +            #   node is a directive
  +            my $dir = [];
  +            $node = $cfg->node_get($node, $cfg->CFG_NODE_ATTR_CHILD1);
  +            while (ref($node) and $$node != 0) {
  +                my $tree = &traverse($cfg, $node); # recursion
  +                push(@{$dir}, $tree) if (defined($tree));
  +                $node = $cfg->node_get($node, $cfg->CFG_NODE_ATTR_RBROTH);
  +            }
  +            return $dir;
  +        }
  +        else {
  +            #   node is a token
  +            my $token = $cfg->node_get($node, $cfg->CFG_NODE_ATTR_TOKEN);
  +            return $token;
  +        }
  +    }
  +    return $tree;
  +}
  +
   1;
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/cfg.pod
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 cfg.pod
  --- ossp-pkg/cfg/perl/cfg.pod	17 Nov 2004 13:15:35 -0000	1.2
  +++ ossp-pkg/cfg/perl/cfg.pod	20 Nov 2004 17:09:35 -0000	1.3
  @@ -40,18 +40,41 @@
   
   B<OSSP cfg> is ...
   
  -B<OSSP::cfg> provides two Perl APIs:
  +B<OSSP::cfg> provides three Perl APIs:
  +
  +=head2 SIMPLE API
  +
  +The simple API is a wrapper around the OO-style API and intended
  +for working with configurations the really simple but less flexible way:
  +
  +=over 4
  +
  +=item C<use OSSP::cfg;>
  +
  +=item C<$cfg = >B<new>C< OSSP::cfg::simple;>
  +
  +=item C<$cfg-E<gt>>B<parse>C<($txt);>
  +
  +=item C<$cfg-E<gt>>B<pack>C<($tree);>
  +
  +=item C<$txt  = $cfg-E<gt>>B<format>C<();>
  +
  +=item C<$tree = $cfg-E<gt>>B<unpack>C<();>
  +
  +=item C<undef $cfg;>
  +
  +=back
   
   =head2 OO-STYLE API
   
   The OO-style API is a wrapper around the C-style API and intended for
  -high-level and regular programming.
  +high-level and flexible programming.
   
   =over 4
   
   =item C<use OSSP::cfg;>
   
  -=item C<my $cfg = >B<new>C< OSSP::cfg;>
  +=item C<$cfg = >B<new>C< OSSP::cfg;>
   
   =item C<undef $cfg;>
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov 24 17:29:50 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 105C976589; Wed, 24 Nov 2004 17:29:50 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/due/.due/ due.cd.sh
Message-Id: <20041124162950.105C976589@mail.ossp.org>
Date: Wed, 24 Nov 2004 17:29:50 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Nov-2004 17:29:49
  Branch: HEAD                             Handle: 2004112416294900

  Modified files:
    ossp-pkg/due/.due       due.cd.sh

  Log:
    PS1 should be not adjusted in batch-mode

  Summary:
    Revision    Changes     Path
    1.4         +4  -4      ossp-pkg/due/.due/due.cd.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.due/due.cd.sh
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 due.cd.sh
  --- ossp-pkg/due/.due/due.cd.sh	22 Oct 2004 19:32:52 -0000	1.3
  +++ ossp-pkg/due/.due/due.cd.sh	24 Nov 2004 16:29:49 -0000	1.4
  @@ -64,11 +64,11 @@
           DIRSTACKREV=()
       fi
   
  -    #   adjust the command-line prompt with new $PWD (always)
  -    PS1="\\u@\\h:$PWD\n\\\$ "
  -
  -    #   adjust the X11 terminal window title with new $PWD (optional)
       if [ ".$BASH_INTERACTIVE" = .yes ]; then
  +        #   adjust the command-line prompt with new $PWD (always)
  +        PS1="\\u@\\h:$PWD\n\\\$ "
  +
  +        #   adjust the X11 terminal window title with new $PWD (optional)
           case "$TERM" in
               xterm | xterm-* )
                   echo -n $'\e]0;'"$USER@$HOSTNAME:$PWD"$'\cg'
  @@ .

From ossp-cvs-owner@ossp.org  Sat Nov 27 20:40:34 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6095F7658D; Sat, 27 Nov 2004 20:40:34 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/perl/ cfg.pm cfg.pod
Message-Id: <20041127194034.6095F7658D@mail.ossp.org>
Date: Sat, 27 Nov 2004 20:40:34 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   27-Nov-2004 20:40:34
  Branch: HEAD                             Handle: 2004112719403300

  Modified files:
    ossp-pkg/cfg/perl       cfg.pm cfg.pod

  Log:
    Ok, let's rock: add four optional post-processing functions which allow
    one to adjust an unpacked data structure in a way it can be used more
    conveniently and intuitive.

  Summary:
    Revision    Changes     Path
    1.8         +129 -6     ossp-pkg/cfg/perl/cfg.pm
    1.4         +52 -1      ossp-pkg/cfg/perl/cfg.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/cfg.pm
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 cfg.pm
  --- ossp-pkg/cfg/perl/cfg.pm	20 Nov 2004 17:09:35 -0000	1.7
  +++ ossp-pkg/cfg/perl/cfg.pm	27 Nov 2004 19:40:33 -0000	1.8
  @@ -464,17 +464,17 @@
   }
   
   #   unpack Perl complex data structure from node tree
  -sub unpack ($) {
  -    my ($self) = @_;
  +sub unpack ($;%) {
  +    my ($self, %arg) = @_;
       my $cfg = $self->{-cfg};
   
       #   start traversing the node tree from the root node
       my $root = $cfg->node_root();
  -    my $tree = &traverse($cfg, $root);
  +    my $tree = &traverse($cfg, \%arg, $root);
   
       #   node processing function
       sub traverse {
  -        my ($cfg, $node) = @_;
  +        my ($cfg, $arg, $node) = @_;
           return if (not(ref($node) and $$node != 0));
           my $type = $cfg->node_get($node, $cfg->CFG_NODE_ATTR_TYPE);
           if ($type == $cfg->CFG_NODE_TYPE_SEQ) {
  @@ -482,10 +482,15 @@
               my $seq = [];
               $node = $cfg->node_get($node, $cfg->CFG_NODE_ATTR_CHILD1);
               while (ref($node) and $$node != 0) {
  -                my $tree = &traverse($cfg, $node); # recursion
  +                my $tree = &traverse($cfg, $arg, $node); # recursion
                   push(@{$seq}, $tree) if (defined($tree));
                   $node = $cfg->node_get($node, $cfg->CFG_NODE_ATTR_RBROTH);
               }
  +            #   optional post-processing of data structure
  +            $seq = &unpack_postproc_merge   ($seq, $arg->{-merge})   if (defined($arg->{-merge}));
  +            $seq = &unpack_postproc_index   ($seq, $arg->{-index})   if (defined($arg->{-index}));
  +            $seq = &unpack_postproc_strip   ($seq, $arg->{-strip})   if (defined($arg->{-strip}));
  +            $seq = &unpack_postproc_flatten ($seq, $arg->{-flatten}) if (defined($arg->{-flatten}));
               return $seq;
           }
           elsif ($type == $cfg->CFG_NODE_TYPE_DIR) {
  @@ -493,7 +498,7 @@
               my $dir = [];
               $node = $cfg->node_get($node, $cfg->CFG_NODE_ATTR_CHILD1);
               while (ref($node) and $$node != 0) {
  -                my $tree = &traverse($cfg, $node); # recursion
  +                my $tree = &traverse($cfg, $arg, $node); # recursion
                   push(@{$dir}, $tree) if (defined($tree));
                   $node = $cfg->node_get($node, $cfg->CFG_NODE_ATTR_RBROTH);
               }
  @@ -508,5 +513,123 @@
       return $tree;
   }
   
  +#   unpack helper function:
  +#   optionally merge arguments of DIRectives starting with same TOKen.
  +#   complexity: O(n) (actually 3*n)
  +sub unpack_postproc_merge {
  +    my ($seq, $re) = @_;
  +    
  +    #   pass 1: determine directive names and their 
  +    #   occurences in sequence. complexity: O(n)
  +    my $dir = {};
  +    for (my $i = 0; $i < @{$seq}; $i++) {
  +        if (    ref($seq->[$i]) eq 'ARRAY' 
  +            and not ref($seq->[$i]->[0])
  +            and $seq->[$i]->[0] =~ m/^$re$/s) {
  +            my $name = $seq->[$i]->[0];
  +            $dir->{$name} = [] if (not defined($dir->{$name}));
  +            push(@{$dir->{$name}}, $i);
  +        }
  +    }
  +
  +    #   pass 2: append arguments of second and following sequences
  +    #   to arguments of first directive. complexity: O(n)
  +    foreach my $name (keys(%{$dir})) {
  +        if (@{$dir->{$name}} > 1) {
  +            my $f = $dir->{$name}->[0];
  +            foreach my $n (@{$dir->{$name}}[1..$#{$dir->{$name}}]) {
  +                foreach my $tok (@{$seq->[$n]}[1..$#{$seq->[$n]}]) {
  +                    push(@{$seq->[$f]}, $tok);
  +                }
  +                $seq->[$n] = undef;
  +            }
  +        }
  +    }
  +
  +    #   pass 3: shrink sequence by eliminating removing entries
  +    #   complexity: O(n)
  +    for (my $i = 0; $i < @{$seq}; $i++) {
  +        if (not defined($seq->[$i])) {
  +            splice(@{$seq}, $i, 1);
  +            $i--; # compensate for splice operation
  +        }
  +    }
  +
  +    return $seq;
  +}
  +
  +#   unpack helper function:
  +#   optionally annotate SEQuence nodes with a DIRective name indexing hash
  +#   complexity: O(n)
  +sub unpack_postproc_index {
  +    my ($seq, $re) = @_;
  +
  +    #   create an index hash
  +    my $idx = {};
  +    for (my $i = 0; $i < @{$seq}; $i++) {
  +        if (ref($seq->[$i]) eq 'ARRAY') {
  +            #   determine name of directive, i.e.,
  +            #   first non-sub-sequence element
  +            my $name = {};
  +            for (my $j = 0; $j < @{$seq->[$j]}; $j++) {
  +                $name = $seq->[$i]->[$j];
  +                last if (not ref($name));
  +            }
  +            if (    not ref($name)
  +                and $name =~ m/^$re$/s 
  +                and not defined($idx->{$name})) {
  +                #    remember position of directive's
  +                #    first occurrence in sequence
  +                $idx->{$name} = ($i + 1);
  +            }
  +        }
  +    }
  +
  +    #   insert index at first position of sequence array following
  +    #   perlref(1)'s "Pseudo-hashes: Using an array as a hash" approach.
  +    unshift(@{$seq}, $idx);
  +
  +    return $seq;
  +}
  +
  +#   unpack helper function:
  +#   strip directive command/start token
  +#   complexity: O(n)
  +sub unpack_postproc_strip {
  +    my ($seq, $re) = @_;
  +
  +    foreach my $dir (@{$seq}) {
  +        if (    ref($dir) eq 'ARRAY'
  +            and $dir->[0] =~ m/^$re$/s) {
  +            #   remove first token of directive array
  +            shift(@{$dir});
  +        }
  +    }
  +
  +    return $seq;
  +}
  +
  +#   unpack helper function:
  +#   flatten empty and single token directives
  +sub unpack_postproc_flatten {
  +    my ($seq, $empty) = @_;
  +
  +    for (my $i = 0; $i < @{$seq}; $i++) {
  +        if (ref($seq->[$i]) eq 'ARRAY') {
  +            if (@{$seq->[$i]} == 0) {
  +                #   replace empty directive array
  +                #   (can exist after "dirstrip" processing!)
  +                $seq->[$i] = $empty;
  +            }
  +            elsif (@{$seq->[$i]} == 1) {
  +                #   simplify single token directive array
  +                $seq->[$i] = $seq->[$i]->[0];
  +            }
  +        }
  +    }
  +
  +    return $seq;
  +}
  +
   1;
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/cfg.pod
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 cfg.pod
  --- ossp-pkg/cfg/perl/cfg.pod	20 Nov 2004 17:09:35 -0000	1.3
  +++ ossp-pkg/cfg/perl/cfg.pod	27 Nov 2004 19:40:33 -0000	1.4
  @@ -59,12 +59,63 @@
   
   =item C<$txt  = $cfg-E<gt>>B<format>C<();>
   
  -=item C<$tree = $cfg-E<gt>>B<unpack>C<();>
  +=item C<$tree = $cfg-E<gt>>B<unpack>C<(>[I<options]C<);>
   
   =item C<undef $cfg;>
   
   =back
   
  +The B<unpack()> I<options> are:
  +
  +=over 4
  +
  +=item C<-merge =E<gt> >I<dir-regex>
  +
  +Merge all directives with a start token matching against I<dir-regex> by
  +appending the argument tokens of second and following directives to the
  +first directive. The resulting data structure is changed as following:
  + 
  +  before: [['foo','foo1'],['bar'],['foo','foo2']]
  +  after:  [['foo','foo1','foo2'],['bar']]
  +
  +=item C<-index =E<gt> >I<dir-regex>
  +
  +Add all directives start tokens matching against I<dir-regex> to a
  +pseudo-directive element pointing to the first occurrence of the
  +directive.
  +
  +  before: [['foo','foo1'],['bar','bar1'],['quux','quux1']]
  +  after:  [{'foo'=>1,'bar'=>2,'quux'=>3},
  +           ['foo','foo1'],['bar','bar1'],['quux','quux1']]
  +
  +This leverages perlref(1)'s "Pseudo-hashes: Using an array as a hash"
  +approach to allow one to directly access directives by name. The
  +following are then equivalent:
  +
  +  ...->{'bar'}
  +  ...->[2]
  +
  +=item C<-strip =E<gt> >I<dir-regex>
  +
  +Strip start token of all directives where it matches the I<dir-regex>.
  +This is useful in combination with B<-index> only.
  +
  +  before: [['foo','foo1'],['bar','bar1'],['quux','quux1']]
  +  after:  [['foo1'],['bar1'],['quux1']]
  +
  +=item C<-flatten =E<gt> >I<boolean-value>
  +
  +Flatten the tokens of all directives with a start token matching
  +against I<dir-regex> by replacing empty arrays with I<boolean-value>,
  +arrays containing a single token with just the token and leaving arrays
  +containing more than one token as is. This is useful in combination with
  +B<-index> and B<-strip>.
  +
  +  before: [['foo','foo1'],['bar'],['']]
  +  after:  [['foo','foo1'],'bar',1]
  +
  +=back
  +
   =head2 OO-STYLE API
   
   The OO-style API is a wrapper around the C-style API and intended for
  @@ .

From ossp-cvs-owner@ossp.org  Sat Nov 27 20:41:19 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 730CE7658D; Sat, 27 Nov 2004 20:41:19 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/perl/ cfg.pod
Message-Id: <20041127194119.730CE7658D@mail.ossp.org>
Date: Sat, 27 Nov 2004 20:41:19 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   27-Nov-2004 20:41:19
  Branch: HEAD                             Handle: 2004112719411800

  Modified files:
    ossp-pkg/cfg/perl       cfg.pod

  Log:
    fix POD syntax

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-pkg/cfg/perl/cfg.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/cfg.pod
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 cfg.pod
  --- ossp-pkg/cfg/perl/cfg.pod	27 Nov 2004 19:40:33 -0000	1.4
  +++ ossp-pkg/cfg/perl/cfg.pod	27 Nov 2004 19:41:18 -0000	1.5
  @@ -59,7 +59,7 @@
   
   =item C<$txt  = $cfg-E<gt>>B<format>C<();>
   
  -=item C<$tree = $cfg-E<gt>>B<unpack>C<(>[I<options]C<);>
  +=item C<$tree = $cfg-E<gt>>B<unpack>C<(>[I<options>]C<);>
   
   =item C<undef $cfg;>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Nov 27 20:44:04 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6D5EC7658D; Sat, 27 Nov 2004 20:44:04 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ TODO
Message-Id: <20041127194404.6D5EC7658D@mail.ossp.org>
Date: Sat, 27 Nov 2004 20:44:04 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   27-Nov-2004 20:44:04
  Branch: HEAD                             Handle: 2004112719440300

  Modified files:
    ossp-pkg/cfg            TODO

  Log:
    remember some old points, too

  Summary:
    Revision    Changes     Path
    1.5         +2  -0      ossp-pkg/cfg/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/TODO
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 TODO
  --- ossp-pkg/cfg/TODO	10 Nov 2002 12:12:23 -0000	1.4
  +++ ossp-pkg/cfg/TODO	27 Nov 2004 19:44:03 -0000	1.5
  @@ -21,6 +21,8 @@
       symbol/token sub-library to allow first tokens of mostly arbitrary
       size and then to store the tokens redundancy-free.
     o named parameters [--]name=value (options)
  +- token vs. argument nomenclature
  +- arguments/options vs. just token
   
     ==================================================================================
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Nov 27 20:56:25 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A86FC765A4; Sat, 27 Nov 2004 20:56:25 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ Makefile.in README cfg.ac cfg_vers.c devtool...
Message-Id: <20041127195625.A86FC765A4@mail.ossp.org>
Date: Sat, 27 Nov 2004 20:56:25 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   27-Nov-2004 20:56:25
  Branch: HEAD                             Handle: 2004112719562401

  Modified files:
    ossp-pkg/cfg            Makefile.in README cfg.ac cfg_vers.c devtool.conf
    ossp-pkg/cfg/perl       cfg.pm

  Log:
    add Autoconf support for new Perl API

  Summary:
    Revision    Changes     Path
    1.7         +23 -1      ossp-pkg/cfg/Makefile.in
    1.12        +1  -1      ossp-pkg/cfg/README
    1.4         +20 -2      ossp-pkg/cfg/cfg.ac
    1.10        +5  -5      ossp-pkg/cfg/cfg_vers.c
    1.19        +4  -0      ossp-pkg/cfg/devtool.conf
    1.9         +1  -1      ossp-pkg/cfg/perl/cfg.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 Makefile.in
  --- ossp-pkg/cfg/Makefile.in	17 Jul 2004 07:37:55 -0000	1.6
  +++ ossp-pkg/cfg/Makefile.in	27 Nov 2004 19:56:24 -0000	1.7
  @@ -53,6 +53,7 @@
   POD2MAN     = pod2man
   FLEX        = @FLEX@
   BISON       = @BISON@
  +PERL        = @PERL@
   
   #   build objects
   LIB_NAME    = libcfg.la
  @@ -61,12 +62,17 @@
   TST_NAME    = cfg_test
   TST_OBJS    = cfg_test.o
   
  +PERL_NAME   = perl/blib/lib/OSSP/cfg.pm
  +PERL_OBJS   = perl/cfg.pm
  +
  +WITH_PERL   = @WITH_PERL@
  +
   #   recognized suffixes for implicit rules
   .SUFFIXES:
   .SUFFIXES: .c .o .lo
   
   #   default target
  -all: $(LIB_NAME) $(TST_NAME)
  +all: $(LIB_NAME) $(TST_NAME) @PERL_NAME@
   
   #   implicit rules for compilation
   .c.o:
  @@ -83,6 +89,10 @@
   $(TST_NAME): $(TST_OBJS) $(LIB_NAME)
   	$(LIBTOOL) --quiet --mode=link $(CC) $(LDFLAGS) -o $(TST_NAME) $(TST_OBJS) $(LIB_NAME) $(LIBS)
   
  +#   explicit rule for Perl API
  +$(PERL_NAME): $(PERL_OBJS) $(LIB_NAME)
  +	@cd perl && $(PERL) Makefile.PL PREFIX=$(prefix) && $(MAKE) $(MFLAGS) all
  +
   #   explicit rules for compiler construction tools
   cfg_syn.c: cfg_syn.h cfg_syn_parse.h
   cfg_syn_scan.o: cfg_syn_scan.c cfg_syn_parse.h
  @@ -112,6 +122,9 @@
   		$(SHTOOL) echo -e "%BATTENTION: Parsing Difference (cfg_test.cfg vs. cfg_test.out):%b"; \
   	    diff -u3 cfg_test.out cfg_test.try; \
   	fi
  +	-@if [ ".$(WITH_PERL)" = .yes ]; then \
  +		(cd perl && $(MAKE) $(MFLAGS) test); \
  +	fi
   check-setup:
   	@./$(TST_NAME) cfg_test.cfg >cfg_test.out
   
  @@ -126,6 +139,9 @@
   	$(SHTOOL) install -c -m 644 cfg.h $(DESTDIR)$(includedir)/
   	$(SHTOOL) install -c -m 644 cfg.3 $(DESTDIR)$(mandir)/man3/
   	$(LIBTOOL) --quiet --mode=install $(SHTOOL) install -c -m 644 libcfg.la $(DESTDIR)$(libdir)/
  +	-@if [ ".$(WITH_PERL)" = .yes ]; then \
  +		(cd perl && $(MAKE) $(MFLAGS) install); \
  +	fi
   
   #   perform uninstallation procedure
   uninstall:
  @@ -147,12 +163,18 @@
   	-$(RM) cfg_test.try
   	-$(RM) -r .libs >/dev/null 2>&1 || $(TRUE)
   	-$(RM) *.o *.lo
  +	-@if [ ".$(WITH_PERL)" = .yes ]; then \
  +		(cd perl && $(MAKE) $(MFLAGS) clean); \
  +	fi
   
   #   perform distribution clean up procedure
   distclean: clean
   	-$(RM) config.log config.status config.cache
   	-$(RM) Makefile config.h cfg-config
   	-$(RM) libtool
  +	-@if [ ".$(WITH_PERL)" = .yes ]; then \
  +		(cd perl && $(MAKE) $(MFLAGS) distclean || true; rm -f Makefile.old); \
  +	fi
   
   #   perform developer clean up procedure
   realclean: distclean
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/README
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 README
  --- ossp-pkg/cfg/README	20 Nov 2004 11:52:41 -0000	1.11
  +++ ossp-pkg/cfg/README	27 Nov 2004 19:56:24 -0000	1.12
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \___|_|  \__, |
                                                |___/
     OSSP cfg - Configuration Parsing
  -  Version 0.9.5 (20-Nov-2004)
  +  Version 0.9.5 (27-Nov-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg.ac
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 cfg.ac
  --- ossp-pkg/cfg/cfg.ac	17 Jul 2004 07:37:55 -0000	1.3
  +++ ossp-pkg/cfg/cfg.ac	27 Nov 2004 19:56:24 -0000	1.4
  @@ -29,11 +29,29 @@
   dnl ##
   
   
  -dnl #   Check for anything OSSP SA wants to know
  +dnl #   Check for anything OSSP cfg wants to know
   dnl #   configure.in:
   dnl #     CFG_CHECK_ALL
   
   AC_DEFUN(CFG_CHECK_ALL,[
  -    :
  +    dnl #   configure option --with-perl
  +    AC_ARG_WITH([perl],
  +        AS_HELP_STRING([--with-perl], [build Perl bindings to C API]),
  +        [ac_cv_with_perl=$withval], [ac_cv_with_perl=no])
  +    AC_CACHE_CHECK([whether to build Perl bindings to C API], [ac_cv_with_perl], [ac_cv_with_perl=no])
  +    if test ".$ac_cv_with_perl" = ".yes"; then
  +        AC_DEFINE(WITH_PERL, 1, [whether to build Perl bindings to C API])
  +        WITH_PERL='yes'
  +        PERL_NAME='$(PERL_NAME)'
  +    else
  +        WITH_PERL='no'
  +        PERL_NAME=''
  +    fi
  +    AC_SUBST(WITH_PERL)
  +    AC_SUBST(PERL_NAME)
  +    AC_PATH_PROG(PERL, perl, NA)
  +    if test ".$ac_cv_with_perl" = ".yes" -a ".$PERL" = ".NA"; then
  +        AC_ERROR([required Perl interpreter not found in \$PATH])
  +    fi
   ])
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_vers.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 cfg_vers.c
  --- ossp-pkg/cfg/cfg_vers.c	20 Nov 2004 11:52:41 -0000	1.9
  +++ ossp-pkg/cfg/cfg_vers.c	27 Nov 2004 19:56:24 -0000	1.10
  @@ -34,12 +34,12 @@
   __cfg_version_t __cfg_version = {
       0x009205,
       "0.9.5",
  -    "0.9.5 (20-Nov-2004)",
  -    "This is OSSP cfg, Version 0.9.5 (20-Nov-2004)",
  -    "OSSP cfg 0.9.5 (20-Nov-2004)",
  +    "0.9.5 (27-Nov-2004)",
  +    "This is OSSP cfg, Version 0.9.5 (27-Nov-2004)",
  +    "OSSP cfg 0.9.5 (27-Nov-2004)",
       "OSSP cfg/0.9.5",
  -    "@(#)OSSP cfg 0.9.5 (20-Nov-2004)",
  -    "$Id: cfg_vers.c,v 1.9 2004/11/20 11:52:41 rse Exp $"
  +    "@(#)OSSP cfg 0.9.5 (27-Nov-2004)",
  +    "$Id: cfg_vers.c,v 1.10 2004/11/27 19:56:24 rse Exp $"
   };
   
   #endif /* _CFG_VERS_C_AS_HEADER_ */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 devtool.conf
  --- ossp-pkg/cfg/devtool.conf	31 Oct 2004 19:12:50 -0000	1.18
  +++ ossp-pkg/cfg/devtool.conf	27 Nov 2004 19:56:24 -0000	1.19
  @@ -44,6 +44,7 @@
           --disable-shared \
           --enable-maintainer \
           --enable-debug \
  +        --with-perl
           "$@"
   
   %release
  @@ -56,6 +57,9 @@
       ./shtool version -lc -n "OSSP cfg" -p "__cfg_" -e cfg_vers.c
       V=`./shtool version -lc -dlong cfg_vers.c`
       sed -e "s/Version .*(.*)/Version $V/g" <README >README.n && mv README.n README
  +    V=`./shtool version -l c -d short cfg_vers.c`
  +    sed -e "s/\(v = ('\)[^']*\('\)/\1$V\2/g" <perl/cfg.pm >perl/cfg.pm.n
  +    mv perl/cfg.pm.n perl/cfg.pm
   
   %tag
       V=`./shtool version -lc -dshort cfg_vers.c | sed -e 's;\.;_;g'`
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/cfg.pm
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 cfg.pm
  --- ossp-pkg/cfg/perl/cfg.pm	27 Nov 2004 19:40:33 -0000	1.8
  +++ ossp-pkg/cfg/perl/cfg.pm	27 Nov 2004 19:56:25 -0000	1.9
  @@ -42,7 +42,7 @@
   ##
   
   #   API version
  -our $VERSION = do { my @v = ('1.1.0' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
  +our $VERSION = do { my @v = ('0.9.5' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
   
   #   API inheritance
   our @ISA = qw(Exporter);
  @@ .

From ossp-cvs-owner@ossp.org  Sat Nov 27 20:57:59 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A1FB7765A4; Sat, 27 Nov 2004 20:57:59 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ ChangeLog
Message-Id: <20041127195759.A1FB7765A4@mail.ossp.org>
Date: Sat, 27 Nov 2004 20:57:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   27-Nov-2004 20:57:59
  Branch: HEAD                             Handle: 2004112719575900

  Modified files:
    ossp-pkg/cfg            ChangeLog

  Log:
    fixate before release

  Summary:
    Revision    Changes     Path
    1.22        +1  -1      ossp-pkg/cfg/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	20 Nov 2004 17:09:34 -0000	1.21
  +++ ossp-pkg/cfg/ChangeLog	27 Nov 2004 19:57:59 -0000	1.22
  @@ -8,7 +8,7 @@
   
     CHANGELOG
   
  - Changes between 0.9.4 and 0.9.5 (31-Oct-2004 to xx-Nov-2004):
  + Changes between 0.9.4 and 0.9.5 (31-Oct-2004 to 27-Nov-2004):
   
      *) Add OSSP:::cfg::simple Perl convenience API which is an
         ultra high-level API allowing especially the bi-directional
  @@ .

From ossp-cvs-owner@ossp.org  Sat Nov 27 21:02:40 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 69EA7766E4; Sat, 27 Nov 2004 21:02:40 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/cfg/ index.wml oss...
Message-Id: <20041127200240.69EA7766E4@mail.ossp.org>
Date: Sat, 27 Nov 2004 21:02:40 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   27-Nov-2004 21:02:40
  Branch: HEAD                             Handle: 2004112720023801

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/cfg    index.wml

  Log:
    release OSSP cfg 0.9.5

  Summary:
    Revision    Changes     Path
    1.107       +1  -0      ossp-web/new/news.txt
    1.11        +2  -2      ossp-web/pkg/lib/cfg/index.wml
    1.93        +1  -1      ossp-web/pkg/lib/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.106 -r1.107 news.txt
  --- ossp-web/new/news.txt	18 Nov 2004 16:06:10 -0000	1.106
  +++ ossp-web/new/news.txt	27 Nov 2004 20:02:38 -0000	1.107
  @@ -1,3 +1,4 @@
  +27-Nov-2004: Released L<OSSP cfg> 0.9.5
   18-Nov-2004: Released L<OSSP uuid> 1.1.1
   03-Nov-2004: Released L<OSSP uuid> 1.1.0
   31-Oct-2004: Released L<OSSP cfg> 0.9.4
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/cfg/index.wml
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 index.wml
  --- ossp-web/pkg/lib/cfg/index.wml	31 Oct 2004 19:41:07 -0000	1.10
  +++ ossp-web/pkg/lib/cfg/index.wml	27 Nov 2004 20:02:39 -0000	1.11
  @@ -36,7 +36,7 @@
   <pkg_status
       name="cfg" assign="rse"
       stable="none"    stable_date="none"
  -    unstable="0.9.4" unstable_date="31-Oct-2004"
  +    unstable="0.9.5" unstable_date="27-Nov-2004"
   	done=95>
   
   <h2>Source</h2>
  @@ -46,7 +46,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/cfg/
       directory=$(FTP_ROOT_DIR)/pkg/lib/cfg/
       files="cfg-*.tar.gz" 
  -	stable="none" unstable="cfg-0.9.4.tar.gz">
  +	stable="none" unstable="cfg-0.9.5.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.92 -r1.93 index.wml
  --- ossp-web/pkg/lib/index.wml	18 Nov 2004 16:06:11 -0000	1.92
  +++ ossp-web/pkg/lib/index.wml	27 Nov 2004 20:02:39 -0000	1.93
  @@ -54,7 +54,7 @@
   			done=95 stable=none unstable=0.9.2>
     <pkg_item name="cfg" longname="OSSP cfg" type="lib"
               desc="Configuration Parsing"
  -			done=95 stable=none unstable=0.9.4>
  +			done=95 stable=none unstable=0.9.5>
     <pkg_item name="act" longname="OSSP act" type="lib"
               desc="Abstract Container Types"
   			done=25 stable=none unstable=none>
  @@ .

From ossp-cvs-owner@ossp.org  Sun Nov 28 13:58:27 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 52A9676434; Sun, 28 Nov 2004 13:58:27 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ ChangeLog cfg_buf.c cfg_buf.h
Message-Id: <20041128125827.52A9676434@mail.ossp.org>
Date: Sun, 28 Nov 2004 13:58:27 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Nov-2004 13:58:27
  Branch: HEAD                             Handle: 2004112812582500

  Modified files:
    ossp-pkg/cfg            ChangeLog cfg_buf.c cfg_buf.h

  Log:
    Cleanup and extend buffer handling sub-library (cfg_buf.[ch])

  Summary:
    Revision    Changes     Path
    1.23        +5  -0      ossp-pkg/cfg/ChangeLog
    1.12        +43 -5      ossp-pkg/cfg/cfg_buf.c
    1.8         +2  -0      ossp-pkg/cfg/cfg_buf.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	27 Nov 2004 19:57:59 -0000	1.22
  +++ ossp-pkg/cfg/ChangeLog	28 Nov 2004 12:58:25 -0000	1.23
  @@ -8,6 +8,11 @@
   
     CHANGELOG
   
  + Changes between 0.9.5 and 0.9.6 (27-Nov-2004 to xx-Dec-2004):
  +
  +   *) Cleanup and extend buffer handling sub-library (cfg_buf.[ch])
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
    Changes between 0.9.4 and 0.9.5 (31-Oct-2004 to 27-Nov-2004):
   
      *) Add OSSP:::cfg::simple Perl convenience API which is an
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_buf.c
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 cfg_buf.c
  --- ossp-pkg/cfg/cfg_buf.c	20 Nov 2004 11:34:52 -0000	1.11
  +++ ossp-pkg/cfg/cfg_buf.c	28 Nov 2004 12:58:25 -0000	1.12
  @@ -37,12 +37,15 @@
   #include "cfg_buf.h"
   #include "cfg_fmt.h"
   
  +/* opaque buffer data structure */
   struct cfg_buf_st {
  -    char   *buf_ptr;
  -    size_t  buf_size;
  -    size_t  buf_len;
  +    char   *buf_ptr;      /* pointer to buffer start              */
  +    size_t  buf_size;     /* total size of buffer in bytes        */
  +    size_t  buf_len;      /* character length of string in buffer */
  +                          /* (not counting NUL-termination)       */
   };
   
  +/* create a new buffer object */
   cfg_rc_t cfg_buf_create(cfg_buf_t **buf)
   {
       if (buf == NULL)
  @@ -55,6 +58,7 @@
       return CFG_OK;
   }
   
  +/* resize (destroy, expand or shrink) the buffer */
   cfg_rc_t cfg_buf_resize(cfg_buf_t *buf, signed int n)
   {
       char *cp;
  @@ -62,7 +66,7 @@
       if (buf == NULL)
           return CFG_ERR_ARG;
       if (n == 0) {
  -        /* destroy buffer */
  +        /* special case: destroy buffer */
           if (buf->buf_ptr != NULL)
               free(buf->buf_ptr);
           buf->buf_ptr  = NULL;
  @@ -76,6 +80,7 @@
                   return CFG_ERR_SYS;
               buf->buf_size = n+1;
               buf->buf_len  = 0;
  +            *buf->buf_ptr = '\0';
           }
           else {
               if ((cp = realloc(buf->buf_ptr, buf->buf_size+n)) == NULL)
  @@ -91,6 +96,36 @@
       return CFG_OK;
   }
   
  +/* append a string to the buffer */
  +cfg_rc_t cfg_buf_append(cfg_buf_t *buf, const char *str, size_t len)
  +{
  +    cfg_rc_t rc;
  +
  +    if (buf == NULL || str == NULL || len == 0)
  +        return CFG_ERR_ARG;
  +    if ((rc = cfg_buf_resize(buf, len)) != CFG_OK)
  +        return rc;
  +    memcpy(buf->buf_ptr + buf->buf_len, str, len);
  +    buf->buf_len += len;
  +    *(buf->buf_ptr + buf->buf_len) = '\0';
  +    return CFG_OK;
  +}
  +
  +/* remove a trailing string from the buffer */
  +cfg_rc_t cfg_buf_remove(cfg_buf_t *buf, const char *str, size_t len)
  +{
  +    if (buf == NULL || len == 0)
  +        return CFG_ERR_ARG;
  +    if (len > buf->buf_len)
  +        return CFG_ERR_USE;
  +    if (str != NULL)
  +        memcpy((void *)str, buf->buf_ptr + buf->buf_len - len, len + 1);
  +    buf->buf_len -= len;
  +    *(buf->buf_ptr + buf->buf_len) = '\0';
  +    return CFG_OK;
  +}
  +
  +/* append a formatted string to the buffer */
   cfg_rc_t cfg_buf_format(cfg_buf_t *buf, const char *fmt, ...)
   {
       va_list ap;
  @@ -102,6 +137,7 @@
       return rc;
   }
   
  +/* append a formatted string to the buffer (va_list based) */
   cfg_rc_t cfg_buf_vformat(cfg_buf_t *buf, const char *fmt, va_list ap)
   {
       cfg_rc_t rc;
  @@ -113,7 +149,7 @@
           return CFG_ERR_FMT;
       if ((rc = cfg_buf_resize(buf, n)) != CFG_OK)
           return rc;
  -    if ((n = cfg_fmt_vsprintf(buf->buf_ptr + buf->buf_len,
  +    if ((n = cfg_fmt_vsprintf(buf->buf_ptr  + buf->buf_len,
                                 buf->buf_size - buf->buf_len,
                                 fmt, ap)) == -1)
           return CFG_ERR_FMT;
  @@ -121,6 +157,7 @@
       return CFG_OK;
   }
   
  +/* return the buffer string */
   cfg_rc_t cfg_buf_content(cfg_buf_t *buf, char **ptr, size_t *len, size_t *size)
   {
       if (buf == NULL)
  @@ -139,6 +176,7 @@
       return CFG_OK;
   }
   
  +/* destroy buffer object */
   cfg_rc_t cfg_buf_destroy(cfg_buf_t *buf)
   {
       if (buf == NULL)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_buf.h
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 cfg_buf.h
  --- ossp-pkg/cfg/cfg_buf.h	17 Jul 2004 07:37:55 -0000	1.7
  +++ ossp-pkg/cfg/cfg_buf.h	28 Nov 2004 12:58:25 -0000	1.8
  @@ -38,6 +38,8 @@
   
   extern cfg_rc_t cfg_buf_create  (cfg_buf_t **buf);
   extern cfg_rc_t cfg_buf_resize  (cfg_buf_t  *buf, signed int n);
  +extern cfg_rc_t cfg_buf_append  (cfg_buf_t  *buf, const char *str, size_t len);
  +extern cfg_rc_t cfg_buf_remove  (cfg_buf_t  *buf, const char *str, size_t len);
   extern cfg_rc_t cfg_buf_format  (cfg_buf_t  *buf, const char *fmt, ...);
   extern cfg_rc_t cfg_buf_vformat (cfg_buf_t  *buf, const char *fmt, va_list ap);
   extern cfg_rc_t cfg_buf_content (cfg_buf_t  *buf, char **ptr, size_t *len, size_t *size);
  @@ .

From ossp-cvs-owner@ossp.org  Sun Nov 28 14:49:12 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3E1CE763C6; Sun, 28 Nov 2004 14:49:12 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ ChangeLog cfg_syn.c
Message-Id: <20041128134912.3E1CE763C6@mail.ossp.org>
Date: Sun, 28 Nov 2004 14:49:12 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Nov-2004 14:49:12
  Branch: HEAD                             Handle: 2004112813491100

  Modified files:
    ossp-pkg/cfg            ChangeLog cfg_syn.c

  Log:
    Escape non-printable characters of input extracts in error messages.

  Summary:
    Revision    Changes     Path
    1.24        +3  -0      ossp-pkg/cfg/ChangeLog
    1.21        +35 -7      ossp-pkg/cfg/cfg_syn.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	28 Nov 2004 12:58:25 -0000	1.23
  +++ ossp-pkg/cfg/ChangeLog	28 Nov 2004 13:49:11 -0000	1.24
  @@ -10,6 +10,9 @@
   
    Changes between 0.9.5 and 0.9.6 (27-Nov-2004 to xx-Dec-2004):
   
  +   *) Escape non-printable characters of input extracts in error messages.
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
      *) Cleanup and extend buffer handling sub-library (cfg_buf.[ch])
         [Ralf S. Engelschall <rse@engelschall.com>]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_syn.c
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 cfg_syn.c
  --- ossp-pkg/cfg/cfg_syn.c	20 Nov 2004 14:52:56 -0000	1.20
  +++ ossp-pkg/cfg/cfg_syn.c	28 Nov 2004 13:49:11 -0000	1.21
  @@ -92,6 +92,37 @@
       return ctx.rv;
   }
   
  +/* helper function for copying out input with escaping of characters */
  +static size_t cfg_syn_error_cpyout(char *out_ptr, const char *in_ptr, size_t in_len)
  +{
  +    size_t out_len;
  +    char c;
  +
  +    out_len = 0;
  +    while (in_len-- > 0) {
  +        c = *in_ptr++;
  +        switch (c) {
  +            case '\n': *out_ptr++ = '\\'; *out_ptr++ = 'n'; out_len += 2; break;
  +            case '\r': *out_ptr++ = '\\'; *out_ptr++ = 'r'; out_len += 2; break;
  +            case '\t': *out_ptr++ = '\\'; *out_ptr++ = 't'; out_len += 2; break;
  +            case '\b': *out_ptr++ = '\\'; *out_ptr++ = 'b'; out_len += 2; break;
  +            case '\f': *out_ptr++ = '\\'; *out_ptr++ = 'f'; out_len += 2; break;
  +            default: {
  +                if (!isprint((int)c)) {
  +                    *out_ptr++ = '\\';
  +                    *out_ptr++ = '?';
  +                    out_len += 2;
  +                }
  +                else {
  +                    *out_ptr++ = c;
  +                    out_len++;
  +                }
  +            }
  +        }
  +    }
  +    return out_len;
  +}
  +
   /* remember a parsing error (used internally) */
   void cfg_syn_error(cfg_syn_ctx_t *ctx, cfg_rc_t rv, YYLTYPE *loc, const char *fmt, ...)
   {
  @@ -142,17 +173,14 @@
       }
   
       /* extract token context with mark token borders */
  -    if ((cpBuf = malloc((size_t)((cpE-cpP)+2+1))) == NULL)
  +    if ((cpBuf = malloc((size_t)(((cpE-cpP)*2)+2+1))) == NULL)
           return;
       cp = cpBuf;
  -    n = cpF-cpP;
  -    memcpy(cp, cpP, n); cp += n;
  +    cp += cfg_syn_error_cpyout(cp, cpP, cpF-cpP);
       *cp++ = '<';
  -    n = cpL-cpF;
  -    memcpy(cp, cpF, n); cp += n;
  +    cp += cfg_syn_error_cpyout(cp, cpF, cpL-cpF);
       *cp++ = '>';
  -    n = cpE-cpL;
  -    memcpy(cp, cpL, n); cp += n;
  +    cp += cfg_syn_error_cpyout(cp, cpL, cpE-cpL);
       *cp++ = '\0';
   
       /* remember parsing error: part I (context part) */
  @@ .

From ossp-cvs-owner@ossp.org  Sun Nov 28 14:54:14 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E263D76414; Sun, 28 Nov 2004 14:54:13 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ TODO
Message-Id: <20041128135413.E263D76414@mail.ossp.org>
Date: Sun, 28 Nov 2004 14:54:13 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Nov-2004 14:54:13
  Branch: HEAD                             Handle: 2004112813541300

  Modified files:
    ossp-pkg/cfg            TODO

  Log:
    cleanup TODO file

  Summary:
    Revision    Changes     Path
    1.6         +12 -212    ossp-pkg/cfg/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/TODO
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 TODO
  --- ossp-pkg/cfg/TODO	27 Nov 2004 19:44:03 -0000	1.5
  +++ ossp-pkg/cfg/TODO	28 Nov 2004 13:54:13 -0000	1.6
  @@ -10,224 +10,24 @@
   
     o finish/fix implementation of cfg_node_select()
     o implement cfg_node_find()
  -  o fix internal linkage with "left sibling" pointer
     o support for prefixes of all non-static symbols to better support embedding
     o finish cfg.pod manual page (function description!)
     o add ts-based test suite
  +  o cleanup: token vs. option/argument nomenclature
  +
  +  CANDO
  +
  +  o Problem: \x00 oder \x{00} results in NUL-terminator, so better use ptr+len instead?
  +  o optimize internal linkage with an additional "left sibling" pointer?
     o add line tracking support
     o add pre-processor with at least includes
  -  o add config tree verification!
  +  o add config tree syntax verification!
     o cfg.tok: in scanner: use an combination of dynamic buffer and atomic
       symbol/token sub-library to allow first tokens of mostly arbitrary
       size and then to store the tokens redundancy-free.
  -  o named parameters [--]name=value (options)
  -- token vs. argument nomenclature
  -- arguments/options vs. just token
  -
  -  ==================================================================================
  -
  -- Problem: \x00 oder \x{00} wird zu NUL-terminator -> use ptr+len instead
  -- caStr/cpStr durch yyless/yymore??
  -- syntax verification
  -- command line query tool
  -- error checking in scanner?
  -- OSSP ex support
  -- wieso geht sample.cfg nicht als Arg bei "make check"?
  -
  -- newline in error message
  -$ ./cfg_test sample2.cfg
  -ERROR: <line 7, column 1: `1b;
  -<}> quu'>
  -
  -- cfg_t
  -
  -rewrite-uri <regex> <subst> { <rewrite-cond> }
  -rewrite-uri ^/(.*) /path/$1 --redirect=permanent q{
  -    %{SOURCE} != "x"
  -};
  -
  -
  -Directory [--foo=A]
  -
  -Argument:
  -  - type:
  -    - keyword ("foo") via name
  -    - option ("--foo=BAR") via name & regex
  -    - argument ("foo") via regex
  -  - amount:
  -    - 1
  -    - 0/1  ?
  -    - 0..n *
  -    - 1..n +
  -  - location:
  -    - by position
  -    - by name
  -  - lookup via:
  -    - name
  -    - position
  -    - regex match
  -
  -foo   * bar
  -foo   = bar|quux|...
  -foo   (bar baz quux)
  -
  -foo  ::= bar*         ;   kleene closure
  -foo  ::= bar|baz|quux ;   union
  -foo  ::= bar baz quux ;   concatenation
  -
  -foo  ::= {foo;...}    ;   sequence of ...
  -foo  ::= (...)        ;   grouping
  -foo  ::= "bar"        ;   fixed terminal
  -foo  ::= /bar/        ;   regex terminal
  -foo  ::= <A>          ;   arbitrary argument
  -foo  ::= <O>          ;   arbitrary option
  -
  -SEQ ::= "{" DIR DIR* "}"
  -DIR ::= TOK (" " TOK)* ";"
  -TOK ::= ...
  -
  -SEQ ::= DIR*     SEQ(dir,dir,...)
  -DIR ::= TOK+     DIR(tok,tok,...)
  -TOK ::= string   "..."
  -
  -config        ::= SEQ(directory|user|rewrite|access)
  -directory     ::= DIR("directory",<O>*,<A>)
  -dir_options   ::=
  -user          ::= DIR("user",/^[a-z]$/)
  -rewrite       ::=
  -access        ::= "access" ("allow"|"deny"):action SEQ(access_list):acl
  -access_list   ::= m/^!?%{ID}$/
  -
  -acl           ::= "acl" TOK:name acl_list
  -acl_list      ::= SEQ(acl_entry)
  -acl_entry     ::= acl_action "from" net-addr:src "to" net-addr:dst
  -acl_action    ::= "allow"|"deny"
  -net_addr      ::= net_hostname | net_ipv4addr | net_ipv6addr
  -
  -sequence all {
  -    directive --class 1;
  -};
  -directive --class 1 "foo" {
  -    option "bar" --occur=1
  -};
  -
  ----------------------------------------------------------------------------
  -
  -foo on;
  -bar /bla {
  -    foo off;
  -    baz --fuck {
  -        b1; b2 --nase=baer; b3; b4; b5;
  -    } --fuck2;
  -};
  -quux a1 a2 a3 a4;
  -quux;
  -
  ----------------------------------------------------------------------------
  -
  -sequence ROOT {
  -    directive foo;
  -    directive bar;
  -    directive quux --count=1:oo;
  -};
  -sequence bar-seq {
  -    directive foo --count=0:1;
  -    directive baz --count=1:oo;
  -};
  -directive foo {
  -    token - on|off|yes|no;
  -};
  -directive bar {
  -    token path /.*;
  -    sequence bar-seq;
  -};
  -directive baz {
  -    option fuck;
  -    option fuck2;
  -    sequence {
  -        directive foo {
  -            option nase (baer|hugo);
  -            option foo [0-9];
  -            token ip-address;
  -        };
  -    };
  -};
  -directive quux {
  -    token --count=0:oo a.*;
  -};
  -token ip-address b1|b2|b3|b4|b5;
  -
  --------------------------------------------------------------------------------
  -
  -<config>     ::= "sequence" <count>? <name>;
  -               | "sequence" <count>? <name>? "{" <directive>* "}";
  -<directive>  ::= "directive" <token-count>? <name>;
  -               | "directive" <token-count>? <name>? "{" <option>* <token>+ };
  -<option>     ::= "option" <name> <regex>?;
  -<token>      ::= "token" <name>? <regex>;
  -<count>      ::= /^(\+|\*|\?|[0-9]+,[0-9]*|[0-9]*,[0-9]+|[0-9]+)$/
  -<name>       ::= /^[a-zA-Z][a-zA-Z0-9_.-]*$/
  -<regex>      ::= ...
  -
  --------------------------------------------------------------------------------
  -
  -sequence ROOT {
  -    directive * "directive" {
  -
  -    directive * token-1 {
  -        token token "token";
  -        token name  /^[a-zA-Z][a-zA-Z0-9_.-]*$/;
  -        token regex /^.+$/;
  -    }
  -};
  -
  --------------------------------------------------------------------------------
  -
  -directive token {
  -    opt1      { /.../ opt2=/.../ } {
  -    directive { /^token$/ };
  -    name      { m/.../; m/^[a-zA-Z][a-zA-Z0-9_.-]*$/ } ?;
  -    name      { m/(...|[a-zA-Z][a-zA-Z0-9_.-]*$)/ } ?;
  -    regex     { m/^.+$/ };
  -};
  -directive acl   { directive=/^acl$/ addr=/^...|...$/+ };
  -
  --------------------------------------------------------------------------------
  -
  -a?b((c|d)+e)?f
  -
  -A m/a/ ?
  -B m/b/
  -{
  -    {
  -        C m/c/ ;
  -        D m/d/
  -    } +
  -    E m/e/
  -} ?
  -F f
  -
  -<directive-match> ::= <token-match>+
  -<token-match> ::= <name>? <regex> <quant>?
  -
  --------------------------------------------------------------------------------
  -
  -<config>     ::= "sequence" <count>? <name>;
  -               | "sequence" <count>? <name>? "{" <directive>* "}";
  -<directive>  ::= "directive" <name>;
  -               | "directive" <name>? "{" <options> "}" "{" <tokens> "}";
  -
  -<options>     ::= <tok-match>+
  -<tokens>      ::= <dir-match>+
  -
  -<dir-match>   ::= <tok-match>+
  -<tok-match>   ::= <name>? <node-match> <quant>?
  -<node-match>  ::= "{" <dir-match> "}" | <regex>
  -
  -<option>     ::= "option" <name> <regex>?;
  -<token>      ::= "token" <name>? <regex>;
  -
  -<count>      ::= /^(\+|\*|\?|[0-9]+,[0-9]*|[0-9]*,[0-9]+|[0-9]+)$/
  -<name>       ::= /^[a-zA-Z][a-zA-Z0-9_.-]*$/
  -<regex>      ::= ...
  +    alternative: replace caStr/cpStr durch yyless/yymore usage??
  +  o named parameters [--]name=value (options)??
  +  o command line query tool (based on cfg_test.c)
  +  o optional OSSP ex support
  +  o more error checking in scanner?
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Nov 28 15:17:54 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0B06E764CE; Sun, 28 Nov 2004 15:17:53 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ ChangeLog cfg_syn.c cfg_syn_parse.y
Message-Id: <20041128141753.0B06E764CE@mail.ossp.org>
Date: Sun, 28 Nov 2004 15:17:53 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Nov-2004 15:17:53
  Branch: HEAD                             Handle: 2004112814175200

  Modified files:
    ossp-pkg/cfg            ChangeLog cfg_syn.c cfg_syn_parse.y

  Log:
    Fix annotational error reporting in scanner/parser.

  Summary:
    Revision    Changes     Path
    1.25        +3  -0      ossp-pkg/cfg/ChangeLog
    1.22        +2  -2      ossp-pkg/cfg/cfg_syn.c
    1.10        +1  -1      ossp-pkg/cfg/cfg_syn_parse.y
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	28 Nov 2004 13:49:11 -0000	1.24
  +++ ossp-pkg/cfg/ChangeLog	28 Nov 2004 14:17:52 -0000	1.25
  @@ -10,6 +10,9 @@
   
    Changes between 0.9.5 and 0.9.6 (27-Nov-2004 to xx-Dec-2004):
   
  +   *) Fix annotational error reporting in scanner/parser.
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
      *) Escape non-printable characters of input extracts in error messages.
         [Ralf S. Engelschall <rse@engelschall.com>]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_syn.c
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 cfg_syn.c
  --- ossp-pkg/cfg/cfg_syn.c	28 Nov 2004 13:49:11 -0000	1.21
  +++ ossp-pkg/cfg/cfg_syn.c	28 Nov 2004 14:17:52 -0000	1.22
  @@ -185,14 +185,14 @@
   
       /* remember parsing error: part I (context part) */
       cfg_fmt_sprintf(ctx->err_buf, ctx->err_len,
  -                    "line %d, column %d: `%s'",
  +                    "line %d, column %d: `%s': ",
                       line, column, cpBuf);
       free(cpBuf);
   
       /* remember parsing error: part II (parsing part) */
       n = strlen(ctx->err_buf);
       va_start(ap, fmt);
  -    cfg_fmt_vsprintf(ctx->err_buf+n, sizeof(ctx->err_len)-n, fmt, ap);
  +    cfg_fmt_vsprintf(ctx->err_buf+n, ctx->err_len-n, fmt, ap);
       va_end(ap);
   
       return;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_syn_parse.y
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 cfg_syn_parse.y
  --- ossp-pkg/cfg/cfg_syn_parse.y	20 Nov 2004 12:54:07 -0000	1.9
  +++ ossp-pkg/cfg/cfg_syn_parse.y	28 Nov 2004 14:17:52 -0000	1.10
  @@ -53,7 +53,7 @@
   /* generate verbose error messages and remember them inside the context */
   #undef  yyerror
   #define yyerror(msg) \
  -    cfg_syn_error(CTX, CFG_ERR_SYN, &yylloc, msg)
  +    cfg_syn_error(CTX, CFG_ERR_SYN, &yylloc, "%s", msg)
   
   /* scanner state transition */
   extern void cfg_syn_scan_push(cfg_syn_ctx_t *, const char *state);
  @@ .

From ossp-cvs-owner@ossp.org  Sun Nov 28 18:05:46 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id ADCDD763C9; Sun, 28 Nov 2004 18:05:45 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ cfg_buf.c cfg_buf.h
Message-Id: <20041128170545.ADCDD763C9@mail.ossp.org>
Date: Sun, 28 Nov 2004 18:05:45 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Nov-2004 18:05:45
  Branch: HEAD                             Handle: 2004112817054400

  Modified files:
    ossp-pkg/cfg            cfg_buf.c cfg_buf.h

  Log:
    make cfg_buf_append more convenient by allowing to append a single
    character and reset buffer after a successful call to cfg_buf_content

  Summary:
    Revision    Changes     Path
    1.13        +26 -13     ossp-pkg/cfg/cfg_buf.c
    1.9         +1  -1      ossp-pkg/cfg/cfg_buf.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_buf.c
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 cfg_buf.c
  --- ossp-pkg/cfg/cfg_buf.c	28 Nov 2004 12:58:25 -0000	1.12
  +++ ossp-pkg/cfg/cfg_buf.c	28 Nov 2004 17:05:44 -0000	1.13
  @@ -96,17 +96,27 @@
       return CFG_OK;
   }
   
  -/* append a string to the buffer */
  -cfg_rc_t cfg_buf_append(cfg_buf_t *buf, const char *str, size_t len)
  +/* append a string and/or single character to the buffer */
  +cfg_rc_t cfg_buf_append(cfg_buf_t *buf, const char *str, size_t len, char c)
   {
       cfg_rc_t rc;
   
  -    if (buf == NULL || str == NULL || len == 0)
  +    if (buf == NULL)
           return CFG_ERR_ARG;
  -    if ((rc = cfg_buf_resize(buf, len)) != CFG_OK)
  -        return rc;
  -    memcpy(buf->buf_ptr + buf->buf_len, str, len);
  -    buf->buf_len += len;
  +    if (str != NULL) {
  +        if (len == 0)
  +            len = strlen(str);
  +        if ((rc = cfg_buf_resize(buf, len)) != CFG_OK)
  +            return rc;
  +        memcpy(buf->buf_ptr + buf->buf_len, str, len);
  +        buf->buf_len += len;
  +    }
  +    if (c != '\0') {
  +        if ((rc = cfg_buf_resize(buf, 1)) != CFG_OK)
  +            return rc;
  +        *(buf->buf_ptr + buf->buf_len) = c;
  +        buf->buf_len++;
  +    }
       *(buf->buf_ptr + buf->buf_len) = '\0';
       return CFG_OK;
   }
  @@ -162,17 +172,20 @@
   {
       if (buf == NULL)
           return CFG_ERR_ARG;
  +    if (len != NULL)
  +        *len  = buf->buf_len;
  +    if (size != NULL)
  +        *size = buf->buf_size;
       if (ptr != NULL) {
           if (buf->buf_ptr == NULL)
               *ptr = strdup("");
  -        else
  +        else {
               *ptr = buf->buf_ptr;
  -        buf->buf_ptr = NULL;
  +            buf->buf_ptr  = NULL;
  +            buf->buf_size = 0;
  +            buf->buf_len  = 0;
  +        }
       }
  -    if (len != NULL)
  -        *len  = buf->buf_len;
  -    if (size != NULL)
  -        *size = buf->buf_size;
       return CFG_OK;
   }
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_buf.h
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 cfg_buf.h
  --- ossp-pkg/cfg/cfg_buf.h	28 Nov 2004 12:58:25 -0000	1.8
  +++ ossp-pkg/cfg/cfg_buf.h	28 Nov 2004 17:05:44 -0000	1.9
  @@ -38,7 +38,7 @@
   
   extern cfg_rc_t cfg_buf_create  (cfg_buf_t **buf);
   extern cfg_rc_t cfg_buf_resize  (cfg_buf_t  *buf, signed int n);
  -extern cfg_rc_t cfg_buf_append  (cfg_buf_t  *buf, const char *str, size_t len);
  +extern cfg_rc_t cfg_buf_append  (cfg_buf_t  *buf, const char *str, size_t len, char c);
   extern cfg_rc_t cfg_buf_remove  (cfg_buf_t  *buf, const char *str, size_t len);
   extern cfg_rc_t cfg_buf_format  (cfg_buf_t  *buf, const char *fmt, ...);
   extern cfg_rc_t cfg_buf_vformat (cfg_buf_t  *buf, const char *fmt, va_list ap);
  @@ .

From ossp-cvs-owner@ossp.org  Sun Nov 28 18:23:47 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2ECEA764A8; Sun, 28 Nov 2004 18:23:47 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ ChangeLog TODO cfg_syn.c cfg_syn.h cfg_syn_s...
Message-Id: <20041128172347.2ECEA764A8@mail.ossp.org>
Date: Sun, 28 Nov 2004 18:23:47 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Nov-2004 18:23:47
  Branch: HEAD                             Handle: 2004112817234500

  Modified files:
    ossp-pkg/cfg            ChangeLog TODO cfg_syn.c cfg_syn.h cfg_syn_scan.l

  Log:
    Replace fixed-size token buffer in scanner by a dynamic
    buffer (cfg_buf_t). This eliminates the old 1024 size limit
    on tokens and makes the scanner more robust.

  Summary:
    Revision    Changes     Path
    1.26        +5  -0      ossp-pkg/cfg/ChangeLog
    1.7         +3  -4      ossp-pkg/cfg/TODO
    1.23        +10 -0      ossp-pkg/cfg/cfg_syn.c
    1.8         +2  -0      ossp-pkg/cfg/cfg_syn.h
    1.21        +46 -63     ossp-pkg/cfg/cfg_syn_scan.l
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	28 Nov 2004 14:17:52 -0000	1.25
  +++ ossp-pkg/cfg/ChangeLog	28 Nov 2004 17:23:45 -0000	1.26
  @@ -10,6 +10,11 @@
   
    Changes between 0.9.5 and 0.9.6 (27-Nov-2004 to xx-Dec-2004):
   
  +   *) Replace fixed-size token buffer in scanner by a dynamic
  +      buffer (cfg_buf_t). This eliminates the old 1024 size limit
  +      on tokens and makes the scanner more robust.
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
      *) Fix annotational error reporting in scanner/parser.
         [Ralf S. Engelschall <rse@engelschall.com>]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/TODO
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 TODO
  --- ossp-pkg/cfg/TODO	28 Nov 2004 13:54:13 -0000	1.6
  +++ ossp-pkg/cfg/TODO	28 Nov 2004 17:23:45 -0000	1.7
  @@ -22,10 +22,9 @@
     o add line tracking support
     o add pre-processor with at least includes
     o add config tree syntax verification!
  -  o cfg.tok: in scanner: use an combination of dynamic buffer and atomic
  -    symbol/token sub-library to allow first tokens of mostly arbitrary
  -    size and then to store the tokens redundancy-free.
  -    alternative: replace caStr/cpStr durch yyless/yymore usage??
  +  o cfg.tok: in scanner: use atomic symbol/token sub-library to allow
  +    first tokens of mostly arbitrary size and then to store the tokens
  +    redundancy-free. alternative: replace caStr/cpStr durch yyless/yymore usage??
     o named parameters [--]name=value (options)??
     o command line query tool (based on cfg_test.c)
     o optional OSSP ex support
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_syn.c
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 cfg_syn.c
  --- ossp-pkg/cfg/cfg_syn.c	28 Nov 2004 14:17:52 -0000	1.22
  +++ ossp-pkg/cfg/cfg_syn.c	28 Nov 2004 17:23:45 -0000	1.23
  @@ -57,6 +57,8 @@
       size_t err_len)
   {
       cfg_syn_ctx_t ctx;
  +    cfg_buf_t *buf;
  +    cfg_rc_t rc;
       void *yyscan;
   
       /* argument sanity checking */
  @@ -67,6 +69,10 @@
       cfg_syn_lex_init(&yyscan);
       cfg_syn_set_extra(&ctx, yyscan);
   
  +    /* initialize temporary buffer context */
  +    if ((rc = cfg_buf_create(&buf)) != CFG_OK)
  +        return rc;
  +
       /* establish our own context which is passed
          through the parser and scanner */
       ctx.inputptr = in_ptr;
  @@ -75,6 +81,7 @@
       ctx.cfg      = cfg;
       ctx.node     = NULL;
       ctx.rv       = CFG_OK;
  +    ctx.buf      = buf;
       ctx.err_buf  = err_buf;
       ctx.err_len  = err_len;
       ctx.yyscan   = yyscan;
  @@ -83,6 +90,9 @@
       if (cfg_syn_parse(&ctx))
           ctx.rv = (ctx.rv == CFG_OK ? CFG_ERR_INT : ctx.rv);
   
  +    /* destroy temporary buffer */
  +    cfg_buf_destroy(buf);
  +
       /* destroy scanner */
       cfg_syn_lex_destroy(yyscan);
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_syn.h
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 cfg_syn.h
  --- ossp-pkg/cfg/cfg_syn.h	20 Nov 2004 12:02:32 -0000	1.7
  +++ ossp-pkg/cfg/cfg_syn.h	28 Nov 2004 17:23:45 -0000	1.8
  @@ -37,6 +37,7 @@
   #include "cfg.h"
   #include "cfg_grid.h"
   #include "cfg_node.h"
  +#include "cfg_buf.h"
   
   /* internal specification scanner/parser context */
   typedef struct {
  @@ -46,6 +47,7 @@
       cfg_t        *cfg;        /* the configuration object */
       cfg_node_t   *node;       /* top-level/root/result channel */
       cfg_rc_t      rv;         /* return value */
  +    cfg_buf_t    *buf;        /* temporary buffer */
       char         *err_buf;    /* error buffer pointer */
       size_t        err_len;    /* error buffer length */
       void         *yyscan;     /* Flex scanner context */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_syn_scan.l
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 cfg_syn_scan.l
  --- ossp-pkg/cfg/cfg_syn_scan.l	20 Nov 2004 12:54:07 -0000	1.20
  +++ ossp-pkg/cfg/cfg_syn_scan.l	28 Nov 2004 17:23:45 -0000	1.21
  @@ -37,6 +37,7 @@
   
   #include "cfg.h"
   #include "cfg_global.h"
  +#include "cfg_buf.h"
   #include "cfg_syn.h"
   #include "cfg_syn_parse.h"
   
  @@ -60,7 +61,7 @@
   
   static char closing_brace(char open);
   static int hex_nibble(const char hex);
  -static int hex_sequence(char *out_ptr, size_t out_len, const char *in_ptr, size_t in_len);
  +static int hex_sequence(cfg_syn_ctx_t *ctx, const char *in_ptr, size_t in_len);
   
   %}
   
  @@ -91,8 +92,6 @@
   %%
   
       /* local variables */
  -    char  caStr[1024];
  -    char *cpStr = NULL;
       int   nCommentOpen = 0;
       int   nQuoteOpen = 0;
       char  cQuoteOpen = '\0';
  @@ -136,12 +135,11 @@
   
       /* double-quoted word ("...") */
   \" {
  -    cpStr = caStr;
  +    cfg_buf_resize(CTX->buf, 0);
       BEGIN(SS_DQ);
   }
   <SS_DQ>\" {
  -    *cpStr = '\0';
  -    yylval->cpString = strdup(caStr);
  +    cfg_buf_content(CTX->buf, &yylval->cpString, NULL, NULL);
       BEGIN(INITIAL);
       return T_STRING;
   }
  @@ -155,31 +153,31 @@
           cfg_syn_error(CTX, CFG_ERR_SYN, yylloc, "escape sequence out of bound");
           return 0;
       }
  -    *cpStr++ = result;
  +    cfg_buf_append(CTX->buf, NULL, 0, (char)result);
   }
   <SS_DQ>\\x\{[0-9a-fA-F]+\} {
  -    cpStr += hex_sequence(cpStr, sizeof(caStr)-(cpStr-caStr), yytext+3, yyleng-3-1);
  +    if (!hex_sequence(CTX, yytext+3, yyleng-3-1))
  +        return 0;
   }
   <SS_DQ>\\x[0-9a-fA-F]{2} {
  -    cpStr += hex_sequence(cpStr, sizeof(caStr)-(cpStr-caStr), yytext+2, 2);
  +    if (!hex_sequence(CTX, yytext+2, 2))
  +        return 0;
   }
  -<SS_DQ>\\n { *cpStr++ = '\n'; }
  -<SS_DQ>\\r { *cpStr++ = '\r'; }
  -<SS_DQ>\\t { *cpStr++ = '\t'; }
  -<SS_DQ>\\b { *cpStr++ = '\b'; }
  -<SS_DQ>\\f { *cpStr++ = '\f'; }
  -<SS_DQ>\\a { *cpStr++ = '\007'; }
  -<SS_DQ>\\e { *cpStr++ = '\033'; }
  +<SS_DQ>\\n { cfg_buf_append(CTX->buf, NULL, 0, '\n');   }
  +<SS_DQ>\\r { cfg_buf_append(CTX->buf, NULL, 0, '\r');   }
  +<SS_DQ>\\t { cfg_buf_append(CTX->buf, NULL, 0, '\t');   }
  +<SS_DQ>\\b { cfg_buf_append(CTX->buf, NULL, 0, '\b');   }
  +<SS_DQ>\\f { cfg_buf_append(CTX->buf, NULL, 0, '\f');   }
  +<SS_DQ>\\a { cfg_buf_append(CTX->buf, NULL, 0, '\007'); }
  +<SS_DQ>\\e { cfg_buf_append(CTX->buf, NULL, 0, '\033'); }
   <SS_DQ>\\(.|\n) {
  -    *cpStr++ = yytext[1];
  +    cfg_buf_append(CTX->buf, NULL, 0, yytext[1]);
   }
   <SS_DQ>[^\\\"]+ {
  -    char *cp = yytext;
  -    while (*cp != '\0')
  -        *cpStr++ = *cp++;
  +    cfg_buf_append(CTX->buf, yytext, 0, 0);
   }
   <SS_DQ>(.|\n) {
  -    *cpStr++ = yytext[1];
  +    cfg_buf_append(CTX->buf, NULL, 0, yytext[1]);
   }
   <SS_DQ><<EOF>> {
       cfg_syn_error(CTX, CFG_ERR_SYN, yylloc, "unterminated double-quoted string");
  @@ -188,12 +186,11 @@
   
       /* single-quoted word ('...') */
   \' {
  -    cpStr = caStr;
  +    cfg_buf_resize(CTX->buf, 0);
       BEGIN(SS_SQ);
   }
   <SS_SQ>\' {
  -    *cpStr = '\0';
  -    yylval->cpString = strdup(caStr);
  +    cfg_buf_content(CTX->buf, &yylval->cpString, NULL, NULL);
       BEGIN(INITIAL);
       return T_STRING;
   }
  @@ -201,19 +198,16 @@
       /* no-op */
   }
   <SS_SQ>\\[\\\'] {
  -    *cpStr++ = yytext[1];
  +    cfg_buf_append(CTX->buf, NULL, 0, yytext[1]);
   }
   <SS_SQ>\\[^\\\'] {
  -    *cpStr++ = yytext[0];
  -    *cpStr++ = yytext[1];
  +    cfg_buf_append(CTX->buf, yytext, 2, 0);
   }
   <SS_SQ>[^\\\']+ {
  -    char *cp = yytext;
  -    while (*cp != '\0')
  -        *cpStr++ = *cp++;
  +    cfg_buf_append(CTX->buf, yytext, 0, 0);
   }
   <SS_SQ>(.|\n) {
  -    *cpStr++ = yytext[1];
  +    cfg_buf_append(CTX->buf, NULL, 0, yytext[1]);
   }
   <SS_SQ><<EOF>> {
       cfg_syn_error(CTX, CFG_ERR_SYN, yylloc, "unterminated single-quoted string");
  @@ -222,28 +216,23 @@
   
       /* flexible-quoted word (q(.)[^\1]\1) */
   "q"{FQDEL} {
  -    cpStr = caStr;
  +    cfg_buf_resize(CTX->buf, 0);
       nQuoteOpen = 1;
       cQuoteOpen = yytext[1];
       cQuoteClose = closing_brace(yytext[1]);
       BEGIN(SS_FQ);
   }
   <SS_FQ>\\{FQDEL} {
  -    if (yytext[1] == cQuoteOpen || yytext[1] == cQuoteClose) {
  -        *cpStr++ = yytext[1];
  -    }
  -    else {
  -        *cpStr++ = yytext[0];
  -        *cpStr++ = yytext[1];
  -    }
  +    if (yytext[1] == cQuoteOpen || yytext[1] == cQuoteClose)
  +        cfg_buf_append(CTX->buf, NULL, 0, yytext[1]);
  +    else
  +        cfg_buf_append(CTX->buf, yytext, 2, 0);
   }
   <SS_FQ>\\\n[ \t]* {
       /* no-op */
   }
   <SS_FQ>{FQDELN} {
  -    char *cp = yytext;
  -    while (*cp != '\0')
  -        *cpStr++ = *cp++;
  +    cfg_buf_append(CTX->buf, yytext, 0, 0);
   }
   <SS_FQ>(.|\n) {
       if (yytext[0] == cQuoteOpen || yytext[0] == cQuoteClose) {
  @@ -253,13 +242,12 @@
               nQuoteOpen = ((nQuoteOpen + 1) % 2);
       }
       if (yytext[0] == cQuoteClose && nQuoteOpen == 0) {
  -        *cpStr = '\0';
  -        yylval->cpString = strdup(caStr);
  +        cfg_buf_content(CTX->buf, &yylval->cpString, NULL, NULL);
           BEGIN(INITIAL);
           return T_STRING;
       }
       else
  -        *cpStr++ = yytext[0];
  +        cfg_buf_append(CTX->buf, NULL, 0, yytext[0]);
   }
   <SS_FQ><<EOF>> {
       cfg_syn_error(CTX, CFG_ERR_SYN, yylloc, "unterminated flexible-quoted string");
  @@ -276,28 +264,24 @@
       /* no-op */
   }
   (.|\n) {
  -    cpStr = caStr;
  -    *cpStr++ = yytext[0];
  +    cfg_buf_resize(CTX->buf, 0);
  +    cfg_buf_append(CTX->buf, NULL, 0, yytext[0]);
       BEGIN(SS_PT);
   }
   <SS_PT>\\\n[ \t]* {
       /* no-op */
   }
   <SS_PT>[^ \t\n;{}\\"']+ {
  -    char *cp = yytext;
  -    while (*cp != '\0')
  -        *cpStr++ = *cp++;
  +    cfg_buf_append(CTX->buf, yytext, 0, 0);
   }
   <SS_PT>(.|\n) {
  -    *cpStr = '\0';
  -    yylval->cpString = strdup(caStr);
  +    cfg_buf_content(CTX->buf, &yylval->cpString, NULL, NULL);
       yyless(0);
       BEGIN(INITIAL);
       return T_STRING;
   }
   <SS_PT><<EOF>> {
  -    *cpStr = '\0';
  -    yylval->cpString = strdup(caStr);
  +    cfg_buf_content(CTX->buf, &yylval->cpString, NULL, NULL);
       BEGIN(INITIAL);
       return T_STRING;
   }
  @@ -375,24 +359,23 @@
   }
   
   /* convert a hex digit sequence into an octet stream */
  -static int hex_sequence(char *out_ptr, size_t out_len, const char *in_ptr, size_t in_len)
  +static int hex_sequence(cfg_syn_ctx_t *ctx, const char *in_ptr, size_t in_len)
   {
       int i;
  -    size_t out_max;
  +    int c;
   
  -    out_max = out_len;
       if (in_len % 2 != 0) {
  -        *out_ptr++ = hex_nibble(in_ptr[0]);
  -        out_len--;
  +        c = hex_nibble(in_ptr[0]);
  +        cfg_buf_append(ctx->buf, NULL, 0, (char)c);
           in_ptr++;
           in_len--;
       }
  -    for (i = 0; in_len > 0 && out_len > 0; i++) {
  -        *out_ptr++ = ((hex_nibble(in_ptr[0]) << 4) | (hex_nibble(in_ptr[1])));
  -        out_len--;
  +    for (i = 0; in_len > 0; i++) {
  +        c = ((hex_nibble(in_ptr[0]) << 4) | (hex_nibble(in_ptr[1])));
  +        cfg_buf_append(ctx->buf, NULL, 0, (char)c);
           in_ptr += 2;
           in_len -= 2;
       }
  -    return (out_max - out_len);
  +    return 1;
   }
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Nov 28 18:28:27 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AE749764A8; Sun, 28 Nov 2004 18:28:27 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ cfg_syn_scan.l
Message-Id: <20041128172827.AE749764A8@mail.ossp.org>
Date: Sun, 28 Nov 2004 18:28:27 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Nov-2004 18:28:27
  Branch: HEAD                             Handle: 2004112817282700

  Modified files:
    ossp-pkg/cfg            cfg_syn_scan.l

  Log:
    improve performance by using yyleng instead of calculating the string
    length on-the-fly

  Summary:
    Revision    Changes     Path
    1.22        +6  -6      ossp-pkg/cfg/cfg_syn_scan.l
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_syn_scan.l
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 cfg_syn_scan.l
  --- ossp-pkg/cfg/cfg_syn_scan.l	28 Nov 2004 17:23:45 -0000	1.21
  +++ ossp-pkg/cfg/cfg_syn_scan.l	28 Nov 2004 17:28:27 -0000	1.22
  @@ -174,7 +174,7 @@
       cfg_buf_append(CTX->buf, NULL, 0, yytext[1]);
   }
   <SS_DQ>[^\\\"]+ {
  -    cfg_buf_append(CTX->buf, yytext, 0, 0);
  +    cfg_buf_append(CTX->buf, yytext, yyleng, 0);
   }
   <SS_DQ>(.|\n) {
       cfg_buf_append(CTX->buf, NULL, 0, yytext[1]);
  @@ -201,10 +201,10 @@
       cfg_buf_append(CTX->buf, NULL, 0, yytext[1]);
   }
   <SS_SQ>\\[^\\\'] {
  -    cfg_buf_append(CTX->buf, yytext, 2, 0);
  +    cfg_buf_append(CTX->buf, yytext, yyleng, 0);
   }
   <SS_SQ>[^\\\']+ {
  -    cfg_buf_append(CTX->buf, yytext, 0, 0);
  +    cfg_buf_append(CTX->buf, yytext, yyleng, 0);
   }
   <SS_SQ>(.|\n) {
       cfg_buf_append(CTX->buf, NULL, 0, yytext[1]);
  @@ -226,13 +226,13 @@
       if (yytext[1] == cQuoteOpen || yytext[1] == cQuoteClose)
           cfg_buf_append(CTX->buf, NULL, 0, yytext[1]);
       else
  -        cfg_buf_append(CTX->buf, yytext, 2, 0);
  +        cfg_buf_append(CTX->buf, yytext, yyleng, 0);
   }
   <SS_FQ>\\\n[ \t]* {
       /* no-op */
   }
   <SS_FQ>{FQDELN} {
  -    cfg_buf_append(CTX->buf, yytext, 0, 0);
  +    cfg_buf_append(CTX->buf, yytext, yyleng, 0);
   }
   <SS_FQ>(.|\n) {
       if (yytext[0] == cQuoteOpen || yytext[0] == cQuoteClose) {
  @@ -272,7 +272,7 @@
       /* no-op */
   }
   <SS_PT>[^ \t\n;{}\\"']+ {
  -    cfg_buf_append(CTX->buf, yytext, 0, 0);
  +    cfg_buf_append(CTX->buf, yytext, yyleng, 0);
   }
   <SS_PT>(.|\n) {
       cfg_buf_content(CTX->buf, &yylval->cpString, NULL, NULL);
  @@ .

From ossp-cvs-owner@ossp.org  Sun Nov 28 19:59:46 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1930476434; Sun, 28 Nov 2004 19:59:46 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ TODO
Message-Id: <20041128185946.1930476434@mail.ossp.org>
Date: Sun, 28 Nov 2004 19:59:46 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Nov-2004 19:59:45
  Branch: HEAD                             Handle: 2004112818594500

  Modified files:
    ossp-pkg/cfg            TODO

  Log:
    we have to check for memory leaks

  Summary:
    Revision    Changes     Path
    1.8         +1  -0      ossp-pkg/cfg/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/TODO
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 TODO
  --- ossp-pkg/cfg/TODO	28 Nov 2004 17:23:45 -0000	1.7
  +++ ossp-pkg/cfg/TODO	28 Nov 2004 18:59:45 -0000	1.8
  @@ -8,6 +8,7 @@
   
     TODO
   
  +  o memory leaks due to cfg_buf and cfg_node token allocation?
     o finish/fix implementation of cfg_node_select()
     o implement cfg_node_find()
     o support for prefixes of all non-static symbols to better support embedding
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 29 08:09:37 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 649CF76361; Mon, 29 Nov 2004 08:09:37 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ ChangeLog cfg_buf.c cfg_data.c cfg_main.c cf...
Message-Id: <20041129070937.649CF76361@mail.ossp.org>
Date: Mon, 29 Nov 2004 08:09:37 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Nov-2004 08:09:37
  Branch: HEAD                             Handle: 2004112907093300

  Modified files:
    ossp-pkg/cfg            ChangeLog cfg_buf.c cfg_data.c cfg_main.c
                            cfg_node.c cfg_syn.c cfg_syn_scan.l cfg_test.c
                            cfg_util.c configure.ac devtool.conf

  Log:
    Fix optional DMalloc build support.

  Summary:
    Revision    Changes     Path
    1.27        +3  -0      ossp-pkg/cfg/ChangeLog
    1.14        +1  -1      ossp-pkg/cfg/cfg_buf.c
    1.10        +1  -1      ossp-pkg/cfg/cfg_data.c
    1.13        +1  -1      ossp-pkg/cfg/cfg_main.c
    1.22        +1  -1      ossp-pkg/cfg/cfg_node.c
    1.24        +1  -1      ossp-pkg/cfg/cfg_syn.c
    1.23        +1  -0      ossp-pkg/cfg/cfg_syn_scan.l
    1.17        +1  -1      ossp-pkg/cfg/cfg_test.c
    1.6         +1  -1      ossp-pkg/cfg/cfg_util.c
    1.12        +3  -0      ossp-pkg/cfg/configure.ac
    1.20        +2  -1      ossp-pkg/cfg/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	28 Nov 2004 17:23:45 -0000	1.26
  +++ ossp-pkg/cfg/ChangeLog	29 Nov 2004 07:09:33 -0000	1.27
  @@ -10,6 +10,9 @@
   
    Changes between 0.9.5 and 0.9.6 (27-Nov-2004 to xx-Dec-2004):
   
  +   *) Fix optional DMalloc build support.
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
      *) Replace fixed-size token buffer in scanner by a dynamic
         buffer (cfg_buf_t). This eliminates the old 1024 size limit
         on tokens and makes the scanner more robust.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_buf.c
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 cfg_buf.c
  --- ossp-pkg/cfg/cfg_buf.c	28 Nov 2004 17:05:44 -0000	1.13
  +++ ossp-pkg/cfg/cfg_buf.c	29 Nov 2004 07:09:33 -0000	1.14
  @@ -33,9 +33,9 @@
   #include <string.h>
   
   #include "cfg.h"
  -#include "cfg_global.h"
   #include "cfg_buf.h"
   #include "cfg_fmt.h"
  +#include "cfg_global.h"
   
   /* opaque buffer data structure */
   struct cfg_buf_st {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_data.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 cfg_data.c
  --- ossp-pkg/cfg/cfg_data.c	17 Jul 2004 07:37:55 -0000	1.9
  +++ ossp-pkg/cfg/cfg_data.c	29 Nov 2004 07:09:33 -0000	1.10
  @@ -33,8 +33,8 @@
   #include <string.h>
   
   #include "cfg.h"
  -#include "cfg_global.h"
   #include "cfg_data.h"
  +#include "cfg_global.h"
   
   cfg_rc_t cfg_data_create(cfg_data_t **data)
   {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_main.c
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 cfg_main.c
  --- ossp-pkg/cfg/cfg_main.c	20 Nov 2004 12:54:07 -0000	1.12
  +++ ossp-pkg/cfg/cfg_main.c	29 Nov 2004 07:09:33 -0000	1.13
  @@ -34,12 +34,12 @@
   #include <errno.h>
   
   #include "cfg.h"
  -#include "cfg_global.h"
   #include "cfg_fmt.h"
   #include "cfg_main.h"
   #include "cfg_data.h"
   #include "cfg_node.h"
   #include "cfg_syn.h"
  +#include "cfg_global.h"
   #define _CFG_VERS_C_AS_HEADER_
   #include "cfg_vers.c"
   #undef  _CFG_VERS_C_AS_HEADER_
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_node.c
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 cfg_node.c
  --- ossp-pkg/cfg/cfg_node.c	20 Nov 2004 14:52:56 -0000	1.21
  +++ ossp-pkg/cfg/cfg_node.c	29 Nov 2004 07:09:33 -0000	1.22
  @@ -34,10 +34,10 @@
   #include <unistd.h>
   #include <limits.h>
   
  -#include "cfg_global.h"
   #include "cfg_main.h"
   #include "cfg_node.h"
   #include "cfg_fmt.h"
  +#include "cfg_global.h"
   
   /* create a configuration node */
   cfg_rc_t
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_syn.c
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 cfg_syn.c
  --- ossp-pkg/cfg/cfg_syn.c	28 Nov 2004 17:23:45 -0000	1.23
  +++ ossp-pkg/cfg/cfg_syn.c	29 Nov 2004 07:09:33 -0000	1.24
  @@ -32,12 +32,12 @@
   #include <ctype.h>
   
   #include "cfg.h"
  -#include "cfg_global.h"
   #include "cfg_grid.h"
   #include "cfg_node.h"
   #include "cfg_fmt.h"
   #include "cfg_syn.h"
   #include "cfg_buf.h"
  +#include "cfg_global.h"
   
   /* prototypes for Flex-generated scanner */
   extern int  cfg_syn_lex_init(void *);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_syn_scan.l
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 cfg_syn_scan.l
  --- ossp-pkg/cfg/cfg_syn_scan.l	28 Nov 2004 17:28:27 -0000	1.22
  +++ ossp-pkg/cfg/cfg_syn_scan.l	29 Nov 2004 07:09:33 -0000	1.23
  @@ -75,6 +75,7 @@
   %option noyywrap
   %option nounput
   %option noyy_top_state
  +%option nounistd
   
   /* scanner states */
   %x SS_DQ
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_test.c
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 cfg_test.c
  --- ossp-pkg/cfg/cfg_test.c	20 Nov 2004 12:54:07 -0000	1.16
  +++ ossp-pkg/cfg/cfg_test.c	29 Nov 2004 07:09:33 -0000	1.17
  @@ -35,8 +35,8 @@
   
   /* OSSP cfg headers */
   #include "cfg.h"
  -#include "cfg_global.h"
   #include "cfg_util.h"
  +#include "cfg_global.h"
   
   /* main test program procedure */
   int main(int argc, char *argv[])
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_util.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 cfg_util.c
  --- ossp-pkg/cfg/cfg_util.c	20 Nov 2004 12:54:07 -0000	1.5
  +++ ossp-pkg/cfg/cfg_util.c	29 Nov 2004 07:09:33 -0000	1.6
  @@ -34,8 +34,8 @@
   #include <unistd.h>
   
   #include "cfg.h"
  -#include "cfg_global.h"
   #include "cfg_util.h"
  +#include "cfg_global.h"
   
   cfg_rc_t cfg_util_readfile(const char *filename, char **buf_ptr, size_t *buf_size, size_t *buf_used)
   {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/configure.ac
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 configure.ac
  --- ossp-pkg/cfg/configure.ac	31 Oct 2004 19:35:31 -0000	1.11
  +++ ossp-pkg/cfg/configure.ac	29 Nov 2004 07:09:33 -0000	1.12
  @@ -52,6 +52,9 @@
   
   AC_CHECK_EXTLIB(Dmalloc, dmalloc, dmalloc_debug, dmalloc.h,
                   AC_DEFINE(WITH_DMALLOC, 1, [define if building with Dmalloc]))
  +if test ".$with_dmalloc" = .yes; then
  +    CFLAGS=`echo "X$CFLAGS" | sed -e 's;^X;;' -e 's; -Wredundant-decls;;'`
  +fi
   
   AC_CONFIG_HEADERS(config.h)
   AC_CONFIG_FILES([Makefile cfg-config])
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 devtool.conf
  --- ossp-pkg/cfg/devtool.conf	27 Nov 2004 19:56:24 -0000	1.19
  +++ ossp-pkg/cfg/devtool.conf	29 Nov 2004 07:09:33 -0000	1.20
  @@ -44,7 +44,8 @@
           --disable-shared \
           --enable-maintainer \
           --enable-debug \
  -        --with-perl
  +        --with-perl \
  +        --with-dmalloc=/usr/opkg \
           "$@"
   
   %release
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 29 08:16:11 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C85DF76390; Mon, 29 Nov 2004 08:16:10 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ TODO
Message-Id: <20041129071610.C85DF76390@mail.ossp.org>
Date: Mon, 29 Nov 2004 08:16:10 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Nov-2004 08:16:10
  Branch: HEAD                             Handle: 2004112907161000

  Modified files:
    ossp-pkg/cfg            TODO

  Log:
    remember that we are still not using the SRCNAME/SRCPOS attributes of
    nodes

  Summary:
    Revision    Changes     Path
    1.9         +1  -0      ossp-pkg/cfg/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/TODO
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 TODO
  --- ossp-pkg/cfg/TODO	28 Nov 2004 18:59:45 -0000	1.8
  +++ ossp-pkg/cfg/TODO	29 Nov 2004 07:16:10 -0000	1.9
  @@ -8,6 +8,7 @@
   
     TODO
   
  +  o set node token SRCNAME/SRCPOS for later processing
     o memory leaks due to cfg_buf and cfg_node token allocation?
     o finish/fix implementation of cfg_node_select()
     o implement cfg_node_find()
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 29 08:35:53 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 25FFD7643B; Mon, 29 Nov 2004 08:35:53 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ Makefile.in
Message-Id: <20041129073553.25FFD7643B@mail.ossp.org>
Date: Mon, 29 Nov 2004 08:35:53 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Nov-2004 08:35:52
  Branch: HEAD                             Handle: 2004112907355200

  Modified files:
    ossp-pkg/cfg            Makefile.in

  Log:
    do not rebuild the Perl API every time if no changes were actually
    made

  Summary:
    Revision    Changes     Path
    1.8         +1  -0      ossp-pkg/cfg/Makefile.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 Makefile.in
  --- ossp-pkg/cfg/Makefile.in	27 Nov 2004 19:56:24 -0000	1.7
  +++ ossp-pkg/cfg/Makefile.in	29 Nov 2004 07:35:52 -0000	1.8
  @@ -92,6 +92,7 @@
   #   explicit rule for Perl API
   $(PERL_NAME): $(PERL_OBJS) $(LIB_NAME)
   	@cd perl && $(PERL) Makefile.PL PREFIX=$(prefix) && $(MAKE) $(MFLAGS) all
  +	@touch $(PERL_NAME)
   
   #   explicit rules for compiler construction tools
   cfg_syn.c: cfg_syn.h cfg_syn_parse.h
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 29 08:37:21 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CCC857643B; Mon, 29 Nov 2004 08:37:20 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog Makefile.in
Message-Id: <20041129073720.CCC857643B@mail.ossp.org>
Date: Mon, 29 Nov 2004 08:37:20 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Nov-2004 08:37:20
  Branch: HEAD                             Handle: 2004112907372000

  Modified files:
    ossp-pkg/uuid           ChangeLog Makefile.in

  Log:
    Do not rebuild the Perl API if there were no actual changes.

  Summary:
    Revision    Changes     Path
    1.63        +5  -0      ossp-pkg/uuid/ChangeLog
    1.24        +1  -0      ossp-pkg/uuid/Makefile.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.62 -r1.63 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	18 Nov 2004 15:58:53 -0000	1.62
  +++ ossp-pkg/uuid/ChangeLog	29 Nov 2004 07:37:20 -0000	1.63
  @@ -11,6 +11,11 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 1.1.1 and 1.1.2 (18-Nov-2004 to xx-Dec-2004)
  +
  +   o Do not rebuild the Perl API if there were no actual changes.
  +     [Ralf S. Engelschall]
  +
     Changes between 1.1.0 and 1.1.1 (03-Nov-2004 to 18-Nov-2004)
   
      o Apply the FreeBSD libc uuid_create() related workaround
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	3 Nov 2004 18:08:24 -0000	1.23
  +++ ossp-pkg/uuid/Makefile.in	29 Nov 2004 07:37:20 -0000	1.24
  @@ -98,6 +98,7 @@
   
   $(PERL_NAME): $(PERL_OBJS) $(LIB_NAME)
   	@cd perl && $(PERL) Makefile.PL PREFIX=$(prefix) && $(MAKE) $(MFLAGS) all
  +	@touch $(PERL_NAME)
   
   uuid.lo: uuid.c config.h uuid.h uuid_md5.h uuid_prng.h uuid_mac.h uuid_ui64.h uuid_str.h uuid_bm.h uuid_ac.h
   uuid_mac.lo: uuid_mac.c config.h uuid_mac.h
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 29 13:20:54 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BB66E763C9; Mon, 29 Nov 2004 13:20:53 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/quos/ quos.cfg
Message-Id: <20041129122053.BB66E763C9@mail.ossp.org>
Date: Mon, 29 Nov 2004 13:20:53 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Nov-2004 13:20:53
  Branch: HEAD                             Handle: 2004112912205300

  Modified files:
    ossp-pkg/quos           quos.cfg

  Log:
    fix sample

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/quos/quos.cfg
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/quos/quos.cfg
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 quos.cfg
  --- ossp-pkg/quos/quos.cfg	25 Oct 2004 14:35:11 -0000	1.1
  +++ ossp-pkg/quos/quos.cfg	29 Nov 2004 12:20:53 -0000	1.2
  @@ -78,7 +78,7 @@
       };
       view "TXT: rpm -qi" q{
           Name:     %-25{NAME} Source RPM:   %{SOURCERPM}\n\
  -        Version:  %-25{VERSION} Signature:    %|DSAHEADER?{dsa:%{DSAHEADER:pgpsig}}:{%|RSAHEADER?{rsa:%{RSAHEADER:pgpsig}}:{%|SI
  +        Version:  %-25{VERSION} Signature:    %|DSAHEADER?{dsa:%{DSAHEADER:pgpsig}}:{%|RSAHEADER?{rsa:%{RSAHEADER:pgpsig}}:{%|SIG?{gpg:%{SIGGPG:pgpsig}}:{%|SIGPGP?{pgp:%{SIGPGP:pgpsig}}:{%|SIGMD5?{md5:%{SIGMD5}}:{(none)}|}|}|}|}|\n\
           Release:  %-25{RELEASE} Build Host:   %{BUILDHOST}\n\
           Group:    %-25{GROUP} Build System: %{ARCH}-%{OS}\n\
           Class:    %-25{CLASS} Build Time:   %{BUILDTIME:date}\n\
  @@ .

From ossp-cvs-owner@ossp.org  Fri Dec  3 17:17:55 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4946B76537; Fri,  3 Dec 2004 17:17:55 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog pth_mctx.c
Message-Id: <20041203161755.4946B76537@mail.ossp.org>
Date: Fri,  3 Dec 2004 17:17:55 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Dec-2004 17:17:55
  Branch: HEAD                             Handle: 2004120316175400

  Modified files:
    ossp-pkg/pth            ChangeLog pth_mctx.c

  Log:
    Enhance internal pth_mctx_save() if getcontext(3) is used for the
    machine context saving by better emulating the setjmp(3) style
    semantics.

  Summary:
    Revision    Changes     Path
    1.629       +5  -0      ossp-pkg/pth/ChangeLog
    1.60        +5  -1      ossp-pkg/pth/pth_mctx.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.628 -r1.629 ChangeLog
  --- ossp-pkg/pth/ChangeLog	18 Oct 2004 19:35:45 -0000	1.628
  +++ ossp-pkg/pth/ChangeLog	3 Dec 2004 16:17:54 -0000	1.629
  @@ -21,6 +21,11 @@
                     
     Changes between 2.0.2 and 2.0.3 (12-Sep-2004 to xx-xxx-2004)
   
  +   *) Enhance internal pth_mctx_save() if getcontext(3) is used for the
  +      machine context saving by better emulating the setjmp(3) style
  +      return code semantics.
  +      [Ralf S. Engelschall]
  +
      *) Do not break in pth_msgport_find() if a message port
         was created with a NULL name.
         [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_mctx.c
  ============================================================================
  $ cvs diff -u -r1.59 -r1.60 pth_mctx.c
  --- ossp-pkg/pth/pth_mctx.c	13 Jul 2004 10:50:49 -0000	1.59
  +++ ossp-pkg/pth/pth_mctx.c	3 Dec 2004 16:17:54 -0000	1.60
  @@ -47,6 +47,7 @@
   struct pth_mctx_st {
   #if PTH_MCTX_MTH(mcsc)
       ucontext_t uc;
  +    int restored;
   #elif PTH_MCTX_MTH(sjlj)
       pth_sigjmpbuf jb;
   #else
  @@ -69,7 +70,9 @@
   #if PTH_MCTX_MTH(mcsc)
   #define pth_mctx_save(mctx) \
           ( (mctx)->error = errno, \
  -          getcontext(&(mctx)->uc) )
  +          (mctx)->restored = 0, \
  +          getcontext(&(mctx)->uc), \
  +          (mctx)->restored )
   #elif PTH_MCTX_MTH(sjlj) && PTH_MCTX_DSP(sjlje)
   #define pth_mctx_save(mctx) \
           ( (mctx)->error = errno, \
  @@ -90,6 +93,7 @@
   #if PTH_MCTX_MTH(mcsc)
   #define pth_mctx_restore(mctx) \
           ( errno = (mctx)->error, \
  +          (mctx)->restored = 1, \
             (void)setcontext(&(mctx)->uc) )
   #elif PTH_MCTX_MTH(sjlj)
   #define pth_mctx_restore(mctx) \
  @@ .

From ossp-cvs-owner@ossp.org  Fri Dec  3 17:21:10 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 01FEF76537; Fri,  3 Dec 2004 17:21:09 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog THANKS pth.h.in pth.pod pth_uctx.c
Message-Id: <20041203162109.01FEF76537@mail.ossp.org>
Date: Fri,  3 Dec 2004 17:21:09 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Dec-2004 17:21:09
  Branch: HEAD                             Handle: 2004120316210800

  Modified files:
    ossp-pkg/pth            ChangeLog THANKS pth.h.in pth.pod pth_uctx.c

  Log:
    The pth_uctx_save() and pth_uctx_restore() API functions
    unfortunately were broken by design because they are C
    _functions_. This leads to one more deadly nesting on the
    run-time stack which effectively caused the pth_mctx_restore()
    in pth_uctx_restore() to return to the end of pth_uctx_save()
    but then the control flow unfortunately returns to the
    pth_uctx_restore() caller instead of the pth_uctx_save() caller
    because the call to pth_uctx_restore() had already overwritten the
    run-time stack position where the original return address for the
    pth_uctx_save() call was stored.
    
    The only workaround would be to #define pth_uctx_save() and
    pth_uctx_restore() as C _macros_, but this then would require that
    lots of the GNU Pth internals from pth_mctx.c would have to be
    exported in the GNU Pth API (which in turn is not acceptable). So,
    the only consequence is to remove the two functions again from the
    GNU Pth API.
    
    Prompted by hints from: Stefan Brantschen <sbr@acm.org>

  Summary:
    Revision    Changes     Path
    1.630       +19 -0      ossp-pkg/pth/ChangeLog
    1.98        +1  -0      ossp-pkg/pth/THANKS
    1.144       +0  -2      ossp-pkg/pth/pth.h.in
    1.165       +12 -31     ossp-pkg/pth/pth.pod
    1.4         +3  -36     ossp-pkg/pth/pth_uctx.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.629 -r1.630 ChangeLog
  --- ossp-pkg/pth/ChangeLog	3 Dec 2004 16:17:54 -0000	1.629
  +++ ossp-pkg/pth/ChangeLog	3 Dec 2004 16:21:08 -0000	1.630
  @@ -21,6 +21,25 @@
                     
     Changes between 2.0.2 and 2.0.3 (12-Sep-2004 to xx-xxx-2004)
   
  +   *) The pth_uctx_save() and pth_uctx_restore() API functions
  +      unfortunately were broken by design because they are C
  +      _functions_. This leads to one more deadly nesting on the
  +      run-time stack which effectively caused the pth_mctx_restore()
  +      in pth_uctx_restore() to return to the end of pth_uctx_save()
  +      but then the control flow unfortunately returns to the
  +      pth_uctx_restore() caller instead of the pth_uctx_save() caller
  +      because the call to pth_uctx_restore() had already overwritten the
  +      run-time stack position where the original return address for the
  +      pth_uctx_save() call was stored.
  +      
  +      The only workaround would be to #define pth_uctx_save() and
  +      pth_uctx_restore() as C _macros_, but this then would require that
  +      lots of the GNU Pth internals from pth_mctx.c would have to be
  +      exported in the GNU Pth API (which in turn is not acceptable). So,
  +      the only consequence is to remove the two functions again from the
  +      GNU Pth API.
  +      [Ralf S. Engelschall, Stefan Brantschen <sbr@acm.org>]
  +
      *) Enhance internal pth_mctx_save() if getcontext(3) is used for the
         machine context saving by better emulating the setjmp(3) style
         return code semantics.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/THANKS
  ============================================================================
  $ cvs diff -u -r1.97 -r1.98 THANKS
  --- ossp-pkg/pth/THANKS	8 Oct 2004 16:17:02 -0000	1.97
  +++ ossp-pkg/pth/THANKS	3 Dec 2004 16:21:08 -0000	1.98
  @@ -22,6 +22,7 @@
       o  Felix Berger                <bflat1@gmx.net>
       o  Paolo Bonzini               <bonzini@pc-amo3.elet.polimi.it>
       o  Raphael Bossek              <raphael.bossek@solutions4linux.de>
  +    o  Stefan Brantschen           <sbr@acm.org>
       o  Edwin Brown                 <Edwin.Brown@sdrc.com>
       o  Dan Buckler                 <buckler@sco.com>
       o  Mark Burton                 <markb@ordern.com>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth.h.in
  ============================================================================
  $ cvs diff -u -r1.143 -r1.144 pth.h.in
  --- ossp-pkg/pth/pth.h.in	8 Oct 2004 16:17:02 -0000	1.143
  +++ ossp-pkg/pth/pth.h.in	3 Dec 2004 16:21:08 -0000	1.144
  @@ -505,8 +505,6 @@
       /* user-space context functions */
   extern int            pth_uctx_create(pth_uctx_t *);
   extern int            pth_uctx_make(pth_uctx_t, char *, size_t, const sigset_t *, void (*)(void *), void *, pth_uctx_t);
  -extern int            pth_uctx_save(pth_uctx_t);
  -extern int            pth_uctx_restore(pth_uctx_t);
   extern int            pth_uctx_switch(pth_uctx_t, pth_uctx_t);
   extern int            pth_uctx_destroy(pth_uctx_t);
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth.pod
  ============================================================================
  $ cvs diff -u -r1.164 -r1.165 pth.pod
  --- ossp-pkg/pth/pth.pod	8 Oct 2004 16:17:02 -0000	1.164
  +++ ossp-pkg/pth/pth.pod	3 Dec 2004 16:21:08 -0000	1.165
  @@ -142,8 +142,6 @@
   
   pth_uctx_create,
   pth_uctx_make,
  -pth_uctx_save,
  -pth_uctx_restore,
   pth_uctx_switch,
   pth_uctx_destroy.
   
  @@ -1520,8 +1518,8 @@
   
   This function creates a user-space context and stores it into I<uctx>.
   There is still no underlying user-space context configured. You still
  -have to do this with pth_uctx_make(3) or pth_uctx_set(3). On success,
  -this function returns C<TRUE>, else C<FALSE>.
  +have to do this with pth_uctx_make(3). On success, this function returns
  +C<TRUE>, else C<FALSE>.
   
   =item int B<pth_uctx_make>(pth_uctx_t I<uctx>, char *I<sk_addr>, size_t I<sk_size>, const sigset_t *I<sigmask>, void (*I<start_func>)(void *), void *I<start_arg>, pth_uctx_t I<uctx_after>);
   
  @@ -1538,41 +1536,24 @@
   after POSIX makecontext(3). On success, this function returns C<TRUE>,
   else C<FALSE>.
   
  -=item int B<pth_uctx_save>(pth_uctx_t I<uctx>);
  -
  -This function saves the current user-space context in I<uctx> for later
  -restoring by either pth_uctx_restore(3) or pth_uctx_switch(3). This
  -function is somewhat modeled after POSIX getcontext(3). If I<uctx> is
  -C<NULL>, C<FALSE> is returned instead of C<TRUE>. This is the only error
  -possible.
  -
  -=item int B<pth_uctx_restore>(pth_uctx_t I<uctx>);
  -
  -This function restores the current user-space context from I<uctx>,
  -which previously had to be set with either pth_uctx_make(3) or
  -pth_uctx_save(3). This function is somewhat modeled after POSIX
  -setcontext(3). If I<uctx> is C<NULL> or I<uctx> contains no valid
  -user-space context, C<FALSE> is returned instead of C<TRUE>. These are
  -the only errors possible.
  -
   =item int B<pth_uctx_switch>(pth_uctx_t I<uctx_from>, pth_uctx_t I<uctx_to>);
   
   This function saves the current user-space context in I<uctx_from> for
  -later restoring by either pth_uctx_restore(3) or pth_uctx_switch(3) and
  -restores the new user-space context from I<uctx>, which previously
  -had to be set with either pth_uctx_make(3) or pth_uctx_save(3). This
  -function is somewhat modeled after POSIX swapcontext(3). If I<uctx_from>
  -or I<uctx_to> are C<NULL> or if I<uctx_to> contains no valid user-space
  -context, C<FALSE> is returned instead of C<TRUE>. These are the only
  -errors possible.
  +later restoring by another call to pth_uctx_switch(3) and restores
  +the new user-space context from I<uctx_to>, which previously had to
  +be set with either a previous call to pth_uctx_switch(3) or initially
  +by pth_uctx_make(3). This function is somewhat modeled after POSIX
  +swapcontext(3). If I<uctx_from> or I<uctx_to> are C<NULL> or if
  +I<uctx_to> contains no valid user-space context, C<FALSE> is returned
  +instead of C<TRUE>. These are the only errors possible.
   
   =item int B<pth_uctx_destroy>(pth_uctx_t I<uctx>);
   
   This function destroys the user-space context in I<uctx>. The run-time
   stack associated with the user-space context is deallocated only if it
  -was given by the application (see I<sk_addr> of pth_uctx_create(3)).
  -If I<uctx> is C<NULL>, C<FALSE> is returned instead of C<TRUE>. This
  -is the only error possible.
  +was not given by the application (see I<sk_addr> of pth_uctx_create(3)).
  +If I<uctx> is C<NULL>, C<FALSE> is returned instead of C<TRUE>. This is
  +the only error possible.
   
   =back
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_uctx.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 pth_uctx.c
  --- ossp-pkg/pth/pth_uctx.c	13 Jul 2004 10:50:49 -0000	1.3
  +++ ossp-pkg/pth/pth_uctx.c	3 Dec 2004 16:21:08 -0000	1.4
  @@ -97,7 +97,7 @@
   
       /* switch to successor user-space context */
       if (ctx.uctx_after != NULL)
  -        pth_uctx_restore(ctx.uctx_after);
  +        pth_mctx_restore(&(ctx.uctx_after->uc_mctx));
   
       /* terminate process (the only reasonable thing to do here) */
       exit(0);
  @@ -150,7 +150,7 @@
           sigprocmask(SIG_SETMASK, sigmask, &ss);
   
       /* perform the trampoline step */
  -    pth_mctx_switch(&mctx_parent, &uctx->uc_mctx);
  +    pth_mctx_switch(&mctx_parent, &(uctx->uc_mctx));
   
       /* optionally restore original signal mask */
       if (sigmask != NULL)
  @@ -162,39 +162,6 @@
       return TRUE;
   }
   
  -/* save current user-space context */
  -int
  -pth_uctx_save(
  -    pth_uctx_t uctx)
  -{
  -    /* argument sanity checking */
  -    if (uctx == NULL)
  -        return pth_error(FALSE, EINVAL);
  -
  -    /* save underlying machine context */
  -    pth_mctx_save(&uctx->uc_mctx);
  -    uctx->uc_mctx_set = TRUE;
  -
  -    return TRUE;
  -}
  -
  -/* restore current user-space context */
  -int
  -pth_uctx_restore(
  -    pth_uctx_t uctx)
  -{
  -    /* argument sanity checking */
  -    if (uctx == NULL)
  -        return pth_error(FALSE, EINVAL);
  -    if (!(uctx->uc_mctx_set))
  -        return pth_error(FALSE, EPERM);
  -
  -    /* restore underlying machine context */
  -    pth_mctx_restore(&uctx->uc_mctx);
  -
  -    return TRUE;
  -}
  -
   /* switch from current to other user-space context */
   int
   pth_uctx_switch(
  @@ -209,7 +176,7 @@
   
       /* switch underlying machine context */
       uctx_from->uc_mctx_set = TRUE;
  -    pth_mctx_switch(&uctx_from->uc_mctx, &uctx_to->uc_mctx);
  +    pth_mctx_switch(&(uctx_from->uc_mctx), &(uctx_to->uc_mctx));
   
       return TRUE;
   }
  @@ .

From ossp-cvs-owner@ossp.org  Fri Dec  3 17:23:39 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 35CA176537; Fri,  3 Dec 2004 17:23:39 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog README pth_vers.c
Message-Id: <20041203162339.35CA176537@mail.ossp.org>
Date: Fri,  3 Dec 2004 17:23:39 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Dec-2004 17:23:39
  Branch: HEAD                             Handle: 2004120316233800

  Modified files:
    ossp-pkg/pth            ChangeLog README pth_vers.c

  Log:
    bump version before release

  Summary:
    Revision    Changes     Path
    1.631       +1  -1      ossp-pkg/pth/ChangeLog
    1.206       +1  -1      ossp-pkg/pth/README
    1.150       +9  -9      ossp-pkg/pth/pth_vers.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.630 -r1.631 ChangeLog
  --- ossp-pkg/pth/ChangeLog	3 Dec 2004 16:21:08 -0000	1.630
  +++ ossp-pkg/pth/ChangeLog	3 Dec 2004 16:23:38 -0000	1.631
  @@ -19,7 +19,7 @@
        / __/ | |_| |
     __|_____(_)___/_________________________________________________________
                     
  -  Changes between 2.0.2 and 2.0.3 (12-Sep-2004 to xx-xxx-2004)
  +  Changes between 2.0.2 and 2.0.3 (12-Sep-2004 to 03-Dec-2004)
   
      *) The pth_uctx_save() and pth_uctx_restore() API functions
         unfortunately were broken by design because they are C
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/README
  ============================================================================
  $ cvs diff -u -r1.205 -r1.206 README
  --- ossp-pkg/pth/README	12 Sep 2004 11:59:08 -0000	1.205
  +++ ossp-pkg/pth/README	3 Dec 2004 16:23:38 -0000	1.206
  @@ -5,7 +5,7 @@
     |_|    \__|_| |_|                     the impossible.''
   
     GNU Pth - The GNU Portable Threads
  -  Version 2.0.2 (12-Sep-2004)
  +  Version 2.0.3 (03-Dec-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_vers.c
  ============================================================================
  $ cvs diff -u -r1.149 -r1.150 pth_vers.c
  --- ossp-pkg/pth/pth_vers.c	12 Sep 2004 11:59:08 -0000	1.149
  +++ ossp-pkg/pth/pth_vers.c	3 Dec 2004 16:23:38 -0000	1.150
  @@ -8,7 +8,7 @@
   #ifndef _PTH_VERS_C_
   #define _PTH_VERS_C_
   
  -#define PTH_INTERNAL_VERSION 0x200202
  +#define PTH_INTERNAL_VERSION 0x200203
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _PTH_VERS_C_AS_HEADER_
   
   pth_internal_version_t pth_internal_version = {
  -    0x200202,
  -    "2.0.2",
  -    "2.0.2 (12-Sep-2004)",
  -    "This is GNU Pth, Version 2.0.2 (12-Sep-2004)",
  -    "GNU Pth 2.0.2 (12-Sep-2004)",
  -    "GNU Pth/2.0.2",
  -    "@(#)GNU Pth 2.0.2 (12-Sep-2004)",
  -    "$Id: GNU Pth 2.0.2 (12-Sep-2004) $"
  +    0x200203,
  +    "2.0.3",
  +    "2.0.3 (03-Dec-2004)",
  +    "This is GNU Pth, Version 2.0.3 (03-Dec-2004)",
  +    "GNU Pth 2.0.3 (03-Dec-2004)",
  +    "GNU Pth/2.0.3",
  +    "@(#)GNU Pth 2.0.3 (03-Dec-2004)",
  +    "$Id: GNU Pth 2.0.3 (03-Dec-2004) $"
   };
   
   #endif /* _PTH_VERS_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Fri Dec  3 18:03:32 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 37B2476537; Fri,  3 Dec 2004 18:03:32 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog Makefile.in configure.ac stripteas...
Message-Id: <20041203170332.37B2476537@mail.ossp.org>
Date: Fri,  3 Dec 2004 18:03:32 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Dec-2004 18:03:32
  Branch: HEAD                             Handle: 2004120317033000

  Modified files:
    ossp-pkg/pth            ChangeLog Makefile.in configure.ac striptease.pl

  Log:
    Resurrect the old "make striptease" command by fixing the
    configure run-time in the stripped down source tree and fixing the
    list of source files.

  Summary:
    Revision    Changes     Path
    1.632       +5  -0      ossp-pkg/pth/ChangeLog
    1.153       +8  -1      ossp-pkg/pth/Makefile.in
    1.14        +1  -0      ossp-pkg/pth/configure.ac
    1.17        +2  -2      ossp-pkg/pth/striptease.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.631 -r1.632 ChangeLog
  --- ossp-pkg/pth/ChangeLog	3 Dec 2004 16:23:38 -0000	1.631
  +++ ossp-pkg/pth/ChangeLog	3 Dec 2004 17:03:30 -0000	1.632
  @@ -21,6 +21,11 @@
                     
     Changes between 2.0.2 and 2.0.3 (12-Sep-2004 to 03-Dec-2004)
   
  +   *) Resurrect the old "make striptease" command by fixing the
  +      configure run-time in the stripped down source tree and fixing the
  +      list of source files.
  +      [Ralf S. Engelschall]
  +
      *) The pth_uctx_save() and pth_uctx_restore() API functions
         unfortunately were broken by design because they are C
         _functions_. This leads to one more deadly nesting on the
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.152 -r1.153 Makefile.in
  --- ossp-pkg/pth/Makefile.in	8 Oct 2004 18:31:14 -0000	1.152
  +++ ossp-pkg/pth/Makefile.in	3 Dec 2004 17:03:30 -0000	1.153
  @@ -272,6 +272,14 @@
   	-$(RMDIR) $(DESTDIR)$(bindir) >/dev/null 2>&1 || $(TRUE)
   	-$(RMDIR) $(DESTDIR)$(prefix) >/dev/null 2>&1 || $(TRUE)
   
  +#   strip down the source tree to its minimum
  +striptease:
  +	@PERL=`which perl`; if [ ".$$PERL" = . ]; then \
  +	    echo "make:ERROR: command \"$(MAKE) striptease\" requires \"perl\"" 1>&2; \
  +		exit 1; \
  +	fi; \
  +	$$PERL striptease.pl
  +
   #   clean the source tree for re-building
   clean:
   	$(RM) $(TARGET_PREQ)
  @@ -289,7 +297,6 @@
   	$(RM) pth-config pth_acdef.h pth_acmac.h pth.h
   	$(RM) pthread-config pthread.h
   	$(RM) config.log config.cache config.status
  -	$(RM) -r striptease.dir
   	$(RM) libtool
   
   #   clean the source tree by removing really all generate stuff
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/configure.ac
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 configure.ac
  --- ossp-pkg/pth/configure.ac	13 Jul 2004 10:50:49 -0000	1.13
  +++ ossp-pkg/pth/configure.ac	3 Dec 2004 17:03:30 -0000	1.14
  @@ -56,6 +56,7 @@
   
   AC_PROG_CC
   AC_PROG_CPP
  +AC_PROG_EGREP
   AC_SET_MAKE
   AC_CHECK_DEBUGGING
   AC_CHECK_PROFILING
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/striptease.pl
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 striptease.pl
  --- ossp-pkg/pth/striptease.pl	13 Jul 2004 10:50:49 -0000	1.16
  +++ ossp-pkg/pth/striptease.pl	3 Dec 2004 17:03:30 -0000	1.17
  @@ -77,7 +77,7 @@
   
   @source = (qw(
       pth_compat.c pth_debug.c pth_syscall.c pth_errno.c pth_ring.c pth_mctx.c
  -    pth_clean.c pth_time.c pth_tcb.c pth_util.c pth_pqueue.c pth_event.c
  +    pth_uctx.c pth_clean.c pth_time.c pth_tcb.c pth_util.c pth_pqueue.c pth_event.c
       pth_sched.c pth_data.c pth_msg.c pth_cancel.c pth_sync.c pth_attr.c pth_lib.c
       pth_fork.c pth_high.c pth_ext.c pth_string.c
   ));
  @@ -89,7 +89,7 @@
   $pth_c = <<'EOT';
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2001 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .

From ossp-cvs-owner@ossp.org  Fri Dec  3 18:16:06 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 30EE176548; Fri,  3 Dec 2004 18:16:06 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20041203171606.30EE176548@mail.ossp.org>
Date: Fri,  3 Dec 2004 18:16:06 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   03-Dec-2004 18:16:05
  Branch: HEAD                             Handle: 2004120317160203

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/pth    index.wml

  Log:
    release GNU Pth 2.0.3

  Summary:
    Revision    Changes     Path
    1.108       +1  -0      ossp-web/new/news.txt
    1.94        +1  -1      ossp-web/pkg/lib/index.wml
    1.14        +2  -2      ossp-web/pkg/lib/pth/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.107 -r1.108 news.txt
  --- ossp-web/new/news.txt	27 Nov 2004 20:02:38 -0000	1.107
  +++ ossp-web/new/news.txt	3 Dec 2004 17:16:02 -0000	1.108
  @@ -1,3 +1,4 @@
  +03-Dec-2004: Released L<GNU pth> 2.0.3
   27-Nov-2004: Released L<OSSP cfg> 0.9.5
   18-Nov-2004: Released L<OSSP uuid> 1.1.1
   03-Nov-2004: Released L<OSSP uuid> 1.1.0
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.93 -r1.94 index.wml
  --- ossp-web/pkg/lib/index.wml	27 Nov 2004 20:02:39 -0000	1.93
  +++ ossp-web/pkg/lib/index.wml	3 Dec 2004 17:16:03 -0000	1.94
  @@ -15,7 +15,7 @@
   <pkg_list>
     <pkg_item name="pth" longname="GNU pth" type="lib"
               desc="Portable Threads"
  -			done=100 stable=2.0.2 unstable=none>
  +			done=100 stable=2.0.3 unstable=none>
     <pkg_item name="mm" longname="OSSP mm" type="lib"
               desc="Shared Memory Allocation"
   			done=100 stable=1.3.1 unstable=none>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/pth/index.wml
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 index.wml
  --- ossp-web/pkg/lib/pth/index.wml	12 Sep 2004 12:55:19 -0000	1.13
  +++ ossp-web/pkg/lib/pth/index.wml	3 Dec 2004 17:16:05 -0000	1.14
  @@ -61,7 +61,7 @@
   
   <pkg_status
       name="pth" assign="rse"
  -    stable="2.0.2" stable_date="12-Sep-2004"
  +    stable="2.0.3" stable_date="03-Dec-2004"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -72,7 +72,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/pth/
       directory=$(FTP_ROOT_DIR)/pkg/lib/pth/
       files="pth-*.tar.gz" 
  -	stable="pth-2\\\\\\\.0\\\\\\\.2\\\\\\\.tar\.gz" unstable="none">
  +	stable="pth-2\\\\\\\.0\\\\\\\.3\\\\\\\.tar\.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Dec  4 13:48:42 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8DB3B76540; Sat,  4 Dec 2004 13:48:42 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ ChangeLog cfg.h cfg_main.c cfg_node.c cfg_no...
Message-Id: <20041204124842.8DB3B76540@mail.ossp.org>
Date: Sat,  4 Dec 2004 13:48:42 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Dec-2004 13:48:42
  Branch: HEAD                             Handle: 2004120412484002

  Modified files:
    ossp-pkg/cfg            ChangeLog cfg.h cfg_main.c cfg_node.c cfg_node.h
                            cfg_syn_parse.y
    ossp-pkg/cfg/perl       cfg.xs

  Log:
    Plug remaining memory leaks by introducing the usual
    LOAN/GIFT/COPY argument passing semantics to cfg_node_{set,get}
    and using this to directly pass the allocated tokens from the
    scanner through the parser into the node tree.

  Summary:
    Revision    Changes     Path
    1.28        +6  -0      ossp-pkg/cfg/ChangeLog
    1.16        +21 -15     ossp-pkg/cfg/cfg.h
    1.14        +8  -1      ossp-pkg/cfg/cfg_main.c
    1.23        +75 -30     ossp-pkg/cfg/cfg_node.c
    1.11        +3  -0      ossp-pkg/cfg/cfg_node.h
    1.11        +1  -1      ossp-pkg/cfg/cfg_syn_parse.y
    1.7         +2  -2      ossp-pkg/cfg/perl/cfg.xs
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	29 Nov 2004 07:09:33 -0000	1.27
  +++ ossp-pkg/cfg/ChangeLog	4 Dec 2004 12:48:40 -0000	1.28
  @@ -10,6 +10,12 @@
   
    Changes between 0.9.5 and 0.9.6 (27-Nov-2004 to xx-Dec-2004):
   
  +   *) Plug remaining memory leaks by introducing the usual
  +      LOAN/GIFT/COPY argument passing semantics to cfg_node_{set,get}
  +      and using this to directly pass the allocated tokens from the
  +      scanner through the parser into the node tree.
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
      *) Fix optional DMalloc build support.
         [Ralf S. Engelschall <rse@engelschall.com>]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg.h
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 cfg.h
  --- ossp-pkg/cfg/cfg.h	20 Nov 2004 14:52:56 -0000	1.15
  +++ ossp-pkg/cfg/cfg.h	4 Dec 2004 12:48:40 -0000	1.16
  @@ -63,21 +63,27 @@
   } cfg_node_type_t;
   
   /* list of node attributes */
  -typedef enum {
  -    CFG_NODE_ATTR_PARENT,     /* RW: (cfg_node_t *)    pointer to parent node */
  -    CFG_NODE_ATTR_LBROTH,     /* RW: (cfg_node_t *)    pointer to left brother node */
  -    CFG_NODE_ATTR_RBROTH,     /* RW: (cfg_node_t *)    pointer to right brother node */
  -    CFG_NODE_ATTR_CHILD1,     /* RW: (cfg_node_t *)    pointer to first child node */
  -    CFG_NODE_ATTR_CHILDL,     /* RO: (cfg_node_t *)    pointer to last child */
  -    CFG_NODE_ATTR_CHILDS,     /* RO: (int)             number of child nodes */
  -    CFG_NODE_ATTR_NODES,      /* RO: (int)             number of total nodes (recursive) */
  -    CFG_NODE_ATTR_DEPTH,      /* RO: (int)             number of nodes back to root node */
  -    CFG_NODE_ATTR_SRCNAME,    /* RW: (char *)          pointer to the source name */
  -    CFG_NODE_ATTR_SRCPOS,     /* RW: (int)             position offset into source */
  -    CFG_NODE_ATTR_TYPE,       /* RW: (cfg_node_type_t) type of node */
  -    CFG_NODE_ATTR_TOKEN,      /* RW: (char *)          pointer to the node token string */
  -    CFG_NODE_ATTR_DATA        /* RW: (cfg_data_t *)    pointer to the node annotation data */
  -} cfg_node_attr_t;
  +typedef int cfg_node_attr_t;
  +enum {
  +    /* attribute selection */
  +    CFG_NODE_ATTR_PARENT  = (1 <<  0), /* RW: (cfg_node_t *)    pointer to parent node */
  +    CFG_NODE_ATTR_LBROTH  = (1 <<  1), /* RW: (cfg_node_t *)    pointer to left brother node */
  +    CFG_NODE_ATTR_RBROTH  = (1 <<  2), /* RW: (cfg_node_t *)    pointer to right brother node */
  +    CFG_NODE_ATTR_CHILD1  = (1 <<  3), /* RW: (cfg_node_t *)    pointer to first child node */
  +    CFG_NODE_ATTR_CHILDL  = (1 <<  4), /* RO: (cfg_node_t *)    pointer to last child */
  +    CFG_NODE_ATTR_CHILDS  = (1 <<  5), /* RO: (int)             number of child nodes */
  +    CFG_NODE_ATTR_NODES   = (1 <<  6), /* RO: (int)             number of total nodes (recursive) */
  +    CFG_NODE_ATTR_DEPTH   = (1 <<  7), /* RO: (int)             number of nodes back to root node */
  +    CFG_NODE_ATTR_SRCNAME = (1 <<  8), /* RW: (char *)          pointer to the source name */
  +    CFG_NODE_ATTR_SRCPOS  = (1 <<  9), /* RW: (int)             position offset into source */
  +    CFG_NODE_ATTR_TYPE    = (1 << 10), /* RW: (cfg_node_type_t) type of node */
  +    CFG_NODE_ATTR_TOKEN   = (1 << 11), /* RW: (char *)          pointer to the node token string */
  +    CFG_NODE_ATTR_DATA    = (1 << 12), /* RW: (cfg_data_t *)    pointer to the node annotation data */
  +    /* attribute passing semantics */
  +    CFG_ATTR_LOAN         = (1 << 13), /* loan attribute on set/get: source still owns orginal data */
  +    CFG_ATTR_GIFT         = (1 << 14), /* gift attribute on set/get: target then  owns orginal data */
  +    CFG_ATTR_COPY         = (1 << 15)  /* copy attribute on set/get: target then  owns copied  data */
  +};
   
   /* list of data types */
   typedef enum {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_main.c
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 cfg_main.c
  --- ossp-pkg/cfg/cfg_main.c	29 Nov 2004 07:09:33 -0000	1.13
  +++ ossp-pkg/cfg/cfg_main.c	4 Dec 2004 12:48:40 -0000	1.14
  @@ -73,11 +73,18 @@
       return CFG_OK;
   }
   
  +static cfg_rc_t cfg_destroy_node(cfg_t *cfg, cfg_node_t *node, void *ctx)
  +{
  +    cfg_node_destroy(cfg, node);
  +    return CFG_OK;
  +}
  +
   cfg_rc_t cfg_destroy(cfg_t *cfg)
   {
       if (cfg == NULL)
           return CFG_ERR_ARG;
  -    /* FIXME: on each node, free token string first */
  +    if (cfg->root != NULL)
  +        cfg_node_apply(cfg, cfg->root, NULL, NULL, cfg_destroy_node, NULL);
       cfg_grid_destroy(cfg->grid_nodes);
       cfg_grid_destroy(cfg->grid_tokens);
       free(cfg);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_node.c
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 cfg_node.c
  --- ossp-pkg/cfg/cfg_node.c	29 Nov 2004 07:09:33 -0000	1.22
  +++ ossp-pkg/cfg/cfg_node.c	4 Dec 2004 12:48:40 -0000	1.23
  @@ -57,6 +57,7 @@
           return rc;
   
       /* initialize node attributes */
  +    n->owner    = 0;
       n->parent   = NULL;
       n->rbroth   = NULL;
       n->child1   = NULL;
  @@ -81,10 +82,11 @@
           return CFG_ERR_ARG;
   
       /* destroy memory */
  -    if (node->token != NULL)
  +    if ((node->owner & CFG_NODE_ATTR_TOKEN) && node->token != NULL)
           free(node->token);
  -    if (node->srcname != NULL)
  +    if ((node->owner & CFG_NODE_ATTR_SRCNAME) && node->srcname != NULL)
           free(node->srcname);
  +    cfg_data_kill(&node->data);
       cfg_grid_free(cfg->grid_nodes, node);
   
       return CFG_OK;
  @@ -109,14 +111,23 @@
           return rc;
   
       /* clone node attributes */
  +    n->owner    = node->owner;
       n->parent   = node->parent;
       n->rbroth   = node->rbroth;
       n->child1   = node->child1;
       n->type     = node->type;
  -    n->token    = (node->token != NULL ? strdup(node->token) : NULL);
  -    cfg_data_copy(&node->data, &n->data);
  -    n->srcname  = (node->srcname != NULL ? strdup(node->srcname) : NULL);
       n->srcpos   = node->srcpos;
  +    if (node->owner & CFG_NODE_ATTR_TOKEN)
  +        n->token = (node->token != NULL ? strdup(node->token) : NULL);
  +    else
  +        n->token = node->token;
  +    if (node->owner & CFG_NODE_ATTR_SRCNAME)
  +        n->srcname = (node->srcname != NULL ? strdup(node->srcname) : NULL);
  +    else
  +        n->srcname = node->srcname;
  +    cfg_data_copy(&node->data, &n->data);
  +
  +    /* store result */
       *node2 = n;
   
       return CFG_OK;
  @@ -138,7 +149,7 @@
   
       /* dispatch into individual attribute handling */
       va_start(ap, attr);
  -    switch (attr) {
  +    switch (attr & ~(CFG_ATTR_LOAN|CFG_ATTR_GIFT|CFG_ATTR_COPY)) {
           case CFG_NODE_ATTR_PARENT: {
               node->parent = (cfg_node_t *)va_arg(ap, cfg_node_t *);
               break;
  @@ -171,22 +182,28 @@
               break;
           }
           case CFG_NODE_ATTR_TOKEN: {
  -            if (node->token != NULL)
  +            char *value = (char *)va_arg(ap, char *);
  +            if (attr & CFG_ATTR_COPY)
  +                value = strdup(value);
  +            if (node->owner & CFG_NODE_ATTR_TOKEN && node->token != NULL)
                   free(node->token);
  -            node->token = (char *)va_arg(ap, char *);
  -            if (node->token != NULL)
  -                node->token = strdup(node->token);
  +            node->token = value;
  +            if (attr & (CFG_ATTR_COPY|CFG_ATTR_GIFT))
  +                node->owner |= CFG_NODE_ATTR_TOKEN;
               break;
           }
           case CFG_NODE_ATTR_DATA: {
               return CFG_ERR_USE;
           }
           case CFG_NODE_ATTR_SRCNAME: {
  -            if (node->srcname != NULL)
  +            char *value = (char *)va_arg(ap, char *);
  +            if (attr & CFG_ATTR_COPY)
  +                value = strdup(value);
  +            if (node->owner & CFG_NODE_ATTR_SRCNAME && node->srcname != NULL)
                   free(node->srcname);
  -            node->srcname = (char *)va_arg(ap, char *);
  -            if (node->srcname != NULL)
  -                node->srcname = strdup(node->srcname);
  +            node->srcname = value;
  +            if (attr & (CFG_ATTR_COPY|CFG_ATTR_GIFT))
  +                node->owner |= CFG_NODE_ATTR_SRCNAME;
               break;
           }
           case CFG_NODE_ATTR_SRCPOS: {
  @@ -220,6 +237,7 @@
       return n;
   }
   
  +/* get a node attribute */
   cfg_rc_t
   cfg_node_get(
       cfg_t *cfg,
  @@ -327,6 +345,10 @@
               if (token == NULL)
                   return CFG_ERR_ARG;
               *token = node->token;
  +            if (attr & CFG_ATTR_COPY)
  +                *token = strdup(*token);
  +            if (attr & CFG_ATTR_GIFT)
  +                node->token = NULL;
               break;
           }
           case CFG_NODE_ATTR_DATA: {
  @@ -341,6 +363,10 @@
               if (name == NULL)
                   return CFG_ERR_ARG;
               *name = node->srcname;
  +            if (attr & CFG_ATTR_COPY)
  +                *name = strdup(*name);
  +            if (attr & CFG_ATTR_GIFT)
  +                node->srcname = NULL;
               break;
           }
           case CFG_NODE_ATTR_SRCPOS: {
  @@ -721,26 +747,45 @@
       void *cb_ctx_cb)
   {
       cfg_rc_t rc;
  +    cfg_node_t *child1;
  +    cfg_node_t *rbroth;
   
       /* argument sanity checking */
       if (cfg == NULL)
           return CFG_ERR_ARG;
  -    if (node != NULL) {
  -        if ((rc = cb_fct_cmp(cfg, node, cb_ctx_cmp)) == CFG_OK)
  -            cb_fct_cb(cfg, node, cb_ctx_cb);
  -        if (rc != CFG_ERR_NDE)
  +
  +    /* short-circuit processing */
  +    if (node == NULL)
  +        return CFG_OK;
  +
  +    /* remember traversing informations from child and brother
  +       (important in case the callbacks destroy it) */
  +    child1 = node->child1;
  +    rbroth = node->rbroth;
  +
  +    /* check whether the node matches */
  +    if (cb_fct_cmp != NULL)
  +        rc = cb_fct_cmp(cfg, node, cb_ctx_cmp);
  +    else
  +        rc = CFG_OK;
  +
  +    /* if node matched, apply optional callback on node */
  +    if (rc == CFG_OK && cb_fct_cb != NULL)
  +        if ((rc = cb_fct_cb(cfg, node, cb_ctx_cb)) != CFG_OK)
               return rc;
  -        if (node->child1 != NULL)
  -            if ((rc = cfg_node_apply(cfg, node->child1,
  -                                     cb_fct_cmp, cb_ctx_cmp,
  -                                     cb_fct_cb, cb_ctx_cb)) != CFG_OK)
  -                return rc;
  -        if (node->rbroth != NULL)
  -            if ((rc = cfg_node_apply(cfg, node->rbroth,
  -                                     cb_fct_cmp, cb_ctx_cmp,
  -                                     cb_fct_cb, cb_ctx_cb)) != CFG_OK)
  -                return rc;
  -    }
  +
  +    /* recursively apply on child and brother nodes */
  +    if (child1 != NULL)
  +        if ((rc = cfg_node_apply(cfg, child1,
  +                                 cb_fct_cmp, cb_ctx_cmp,
  +                                 cb_fct_cb,  cb_ctx_cb)) != CFG_OK)
  +            return rc;
  +    if (rbroth != NULL)
  +        if ((rc = cfg_node_apply(cfg, rbroth,
  +                                 cb_fct_cmp, cb_ctx_cmp,
  +                                 cb_fct_cb,  cb_ctx_cb)) != CFG_OK)
  +            return rc;
  +
       return CFG_OK;
   }
   
  @@ -804,7 +849,7 @@
       return CFG_OK;
   }
   
  -/* unlink a nodes from others */
  +/* unlink a node from others */
   cfg_rc_t
   cfg_node_unlink(
       cfg_t *cfg,
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_node.h
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 cfg_node.h
  --- ossp-pkg/cfg/cfg_node.h	17 Jul 2004 07:37:55 -0000	1.10
  +++ ossp-pkg/cfg/cfg_node.h	4 Dec 2004 12:48:40 -0000	1.11
  @@ -35,6 +35,9 @@
   #include "cfg_data.h"
   
   struct cfg_node_st {
  +    /* attribute ownership */
  +    unsigned long   owner;   /* attribute ownership bit field */
  +
       /* node linkage */
       cfg_node_t     *parent;  /* pointer to parent node */
       cfg_node_t     *rbroth;  /* pointer to right brother node */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_syn_parse.y
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 cfg_syn_parse.y
  --- ossp-pkg/cfg/cfg_syn_parse.y	28 Nov 2004 14:17:52 -0000	1.10
  +++ ossp-pkg/cfg/cfg_syn_parse.y	4 Dec 2004 12:48:40 -0000	1.11
  @@ -161,7 +161,7 @@
           cfg_node_t *n;
           cfg_node_create(CTX->cfg, &n);
           cfg_node_set(CTX->cfg, n, CFG_NODE_ATTR_TYPE, CFG_NODE_TYPE_ARG);
  -        cfg_node_set(CTX->cfg, n, CFG_NODE_ATTR_TOKEN, $1);
  +        cfg_node_set(CTX->cfg, n, CFG_NODE_ATTR_TOKEN|CFG_ATTR_GIFT, $1);
           $$ = n;
         }
       ;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/cfg.xs
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 cfg.xs
  --- ossp-pkg/cfg/perl/cfg.xs	20 Nov 2004 14:52:57 -0000	1.6
  +++ ossp-pkg/cfg/perl/cfg.xs	4 Dec 2004 12:48:42 -0000	1.7
  @@ -283,7 +283,7 @@
               cfg_node_attr_t attr
               char *va_arg1
           CODE:
  -            RETVAL = cfg_node_set(cfg, node, attr, va_arg1);
  +            RETVAL = cfg_node_set(cfg, node, attr|CFG_ATTR_COPY, va_arg1);
           OUTPUT:
               RETVAL
       CASE: ((cfg_node_attr_t)SvIV(ST(2)) == CFG_NODE_ATTR_TYPE)
  @@ -357,7 +357,7 @@
               cfg_node_attr_t attr
               char *&va_arg1 = NO_INIT
           CODE:
  -            RETVAL = cfg_node_get(cfg, node, attr, &va_arg1);
  +            RETVAL = cfg_node_get(cfg, node, attr|CFG_ATTR_COPY, &va_arg1);
           OUTPUT:
               va_arg1
               RETVAL
  @@ .

From ossp-cvs-owner@ossp.org  Sat Dec  4 13:51:13 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7E66376540; Sat,  4 Dec 2004 13:51:13 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ devtool.conf
Message-Id: <20041204125113.7E66376540@mail.ossp.org>
Date: Sat,  4 Dec 2004 13:51:13 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Dec-2004 13:51:13
  Branch: HEAD                             Handle: 2004120412511300

  Modified files:
    ossp-pkg/cfg            devtool.conf

  Log:
    do not hard-code my debugging options

  Summary:
    Revision    Changes     Path
    1.21        +0  -1      ossp-pkg/cfg/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 devtool.conf
  --- ossp-pkg/cfg/devtool.conf	29 Nov 2004 07:09:33 -0000	1.20
  +++ ossp-pkg/cfg/devtool.conf	4 Dec 2004 12:51:13 -0000	1.21
  @@ -45,7 +45,6 @@
           --enable-maintainer \
           --enable-debug \
           --with-perl \
  -        --with-dmalloc=/usr/opkg \
           "$@"
   
   %release
  @@ .

From ossp-cvs-owner@ossp.org  Sat Dec  4 13:53:27 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DA2A876540; Sat,  4 Dec 2004 13:53:26 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ TODO
Message-Id: <20041204125326.DA2A876540@mail.ossp.org>
Date: Sat,  4 Dec 2004 13:53:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Dec-2004 13:53:26
  Branch: HEAD                             Handle: 2004120412532600

  Modified files:
    ossp-pkg/cfg            TODO

  Log:
    done

  Summary:
    Revision    Changes     Path
    1.10        +0  -1      ossp-pkg/cfg/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/TODO
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 TODO
  --- ossp-pkg/cfg/TODO	29 Nov 2004 07:16:10 -0000	1.9
  +++ ossp-pkg/cfg/TODO	4 Dec 2004 12:53:26 -0000	1.10
  @@ -9,7 +9,6 @@
     TODO
   
     o set node token SRCNAME/SRCPOS for later processing
  -  o memory leaks due to cfg_buf and cfg_node token allocation?
     o finish/fix implementation of cfg_node_select()
     o implement cfg_node_find()
     o support for prefixes of all non-static symbols to better support embedding
  @@ .

From ossp-cvs-owner@ossp.org  Sat Dec  4 13:54:43 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B915E76540; Sat,  4 Dec 2004 13:54:43 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ README cfg_vers.c ossp-pkg/cfg/perl/ cfg.pm
Message-Id: <20041204125443.B915E76540@mail.ossp.org>
Date: Sat,  4 Dec 2004 13:54:43 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Dec-2004 13:54:43
  Branch: HEAD                             Handle: 2004120412544101

  Modified files:
    ossp-pkg/cfg            README cfg_vers.c
    ossp-pkg/cfg/perl       cfg.pm

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.13        +1  -1      ossp-pkg/cfg/README
    1.11        +9  -9      ossp-pkg/cfg/cfg_vers.c
    1.10        +1  -1      ossp-pkg/cfg/perl/cfg.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/README
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 README
  --- ossp-pkg/cfg/README	27 Nov 2004 19:56:24 -0000	1.12
  +++ ossp-pkg/cfg/README	4 Dec 2004 12:54:41 -0000	1.13
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \___|_|  \__, |
                                                |___/
     OSSP cfg - Configuration Parsing
  -  Version 0.9.5 (27-Nov-2004)
  +  Version 0.9.6 (04-Dec-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_vers.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 cfg_vers.c
  --- ossp-pkg/cfg/cfg_vers.c	27 Nov 2004 19:56:24 -0000	1.10
  +++ ossp-pkg/cfg/cfg_vers.c	4 Dec 2004 12:54:41 -0000	1.11
  @@ -8,7 +8,7 @@
   #ifndef _CFG_VERS_C_
   #define _CFG_VERS_C_
   
  -#define __CFG_VERSION 0x009205
  +#define __CFG_VERSION 0x009206
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _CFG_VERS_C_AS_HEADER_
   
   __cfg_version_t __cfg_version = {
  -    0x009205,
  -    "0.9.5",
  -    "0.9.5 (27-Nov-2004)",
  -    "This is OSSP cfg, Version 0.9.5 (27-Nov-2004)",
  -    "OSSP cfg 0.9.5 (27-Nov-2004)",
  -    "OSSP cfg/0.9.5",
  -    "@(#)OSSP cfg 0.9.5 (27-Nov-2004)",
  -    "$Id: cfg_vers.c,v 1.10 2004/11/27 19:56:24 rse Exp $"
  +    0x009206,
  +    "0.9.6",
  +    "0.9.6 (04-Dec-2004)",
  +    "This is OSSP cfg, Version 0.9.6 (04-Dec-2004)",
  +    "OSSP cfg 0.9.6 (04-Dec-2004)",
  +    "OSSP cfg/0.9.6",
  +    "@(#)OSSP cfg 0.9.6 (04-Dec-2004)",
  +    "$Id: cfg_vers.c,v 1.11 2004/12/04 12:54:41 rse Exp $"
   };
   
   #endif /* _CFG_VERS_C_AS_HEADER_ */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/cfg.pm
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 cfg.pm
  --- ossp-pkg/cfg/perl/cfg.pm	27 Nov 2004 19:56:25 -0000	1.9
  +++ ossp-pkg/cfg/perl/cfg.pm	4 Dec 2004 12:54:42 -0000	1.10
  @@ -42,7 +42,7 @@
   ##
   
   #   API version
  -our $VERSION = do { my @v = ('0.9.5' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
  +our $VERSION = do { my @v = ('0.9.6' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
   
   #   API inheritance
   our @ISA = qw(Exporter);
  @@ .

From ossp-cvs-owner@ossp.org  Sat Dec  4 13:58:03 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AACA576468; Sat,  4 Dec 2004 13:58:03 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/cfg/ index.wml oss...
Message-Id: <20041204125803.AACA576468@mail.ossp.org>
Date: Sat,  4 Dec 2004 13:58:03 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   04-Dec-2004 13:58:03
  Branch: HEAD                             Handle: 2004120412580201

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/cfg    index.wml

  Log:
    release OSSP cfg 0.9.6

  Summary:
    Revision    Changes     Path
    1.109       +1  -0      ossp-web/new/news.txt
    1.12        +2  -2      ossp-web/pkg/lib/cfg/index.wml
    1.95        +1  -1      ossp-web/pkg/lib/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.108 -r1.109 news.txt
  --- ossp-web/new/news.txt	3 Dec 2004 17:16:02 -0000	1.108
  +++ ossp-web/new/news.txt	4 Dec 2004 12:58:02 -0000	1.109
  @@ -1,3 +1,4 @@
  +04-Dec-2004: Released L<OSSP cfg> 0.9.6
   03-Dec-2004: Released L<GNU pth> 2.0.3
   27-Nov-2004: Released L<OSSP cfg> 0.9.5
   18-Nov-2004: Released L<OSSP uuid> 1.1.1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/cfg/index.wml
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 index.wml
  --- ossp-web/pkg/lib/cfg/index.wml	27 Nov 2004 20:02:39 -0000	1.11
  +++ ossp-web/pkg/lib/cfg/index.wml	4 Dec 2004 12:58:03 -0000	1.12
  @@ -36,7 +36,7 @@
   <pkg_status
       name="cfg" assign="rse"
       stable="none"    stable_date="none"
  -    unstable="0.9.5" unstable_date="27-Nov-2004"
  +    unstable="0.9.6" unstable_date="04-Dec-2004"
   	done=95>
   
   <h2>Source</h2>
  @@ -46,7 +46,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/cfg/
       directory=$(FTP_ROOT_DIR)/pkg/lib/cfg/
       files="cfg-*.tar.gz" 
  -	stable="none" unstable="cfg-0.9.5.tar.gz">
  +	stable="none" unstable="cfg-0.9.6.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.94 -r1.95 index.wml
  --- ossp-web/pkg/lib/index.wml	3 Dec 2004 17:16:03 -0000	1.94
  +++ ossp-web/pkg/lib/index.wml	4 Dec 2004 12:58:02 -0000	1.95
  @@ -54,7 +54,7 @@
   			done=95 stable=none unstable=0.9.2>
     <pkg_item name="cfg" longname="OSSP cfg" type="lib"
               desc="Configuration Parsing"
  -			done=95 stable=none unstable=0.9.5>
  +			done=95 stable=none unstable=0.9.6>
     <pkg_item name="act" longname="OSSP act" type="lib"
               desc="Abstract Container Types"
   			done=25 stable=none unstable=none>
  @@ .

From ossp-cvs-owner@ossp.org  Mon Dec  6 20:47:39 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9B40F76576; Mon,  6 Dec 2004 20:47:39 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog Makefile.in THANKS
Message-Id: <20041206194739.9B40F76576@mail.ossp.org>
Date: Mon,  6 Dec 2004 20:47:39 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Dec-2004 20:47:39
  Branch: HEAD                             Handle: 2004120619473800

  Modified files:
    ossp-pkg/pth            ChangeLog Makefile.in THANKS

  Log:
    Do not insist on writing to the source directory on "make install"
    in order to more closely follow GNU standards.
    
    Remove "*.bak" and "*~" files under "make distclean"
    instead of "make clean".
    
    Submitted by: Bruno Haible <bruno@clisp.org>

  Summary:
    Revision    Changes     Path
    1.633       +10 -0      ossp-pkg/pth/ChangeLog
    1.154       +7  -6      ossp-pkg/pth/Makefile.in
    1.99        +1  -0      ossp-pkg/pth/THANKS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.632 -r1.633 ChangeLog
  --- ossp-pkg/pth/ChangeLog	3 Dec 2004 17:03:30 -0000	1.632
  +++ ossp-pkg/pth/ChangeLog	6 Dec 2004 19:47:38 -0000	1.633
  @@ -19,6 +19,16 @@
        / __/ | |_| |
     __|_____(_)___/_________________________________________________________
                     
  +  Changes between 2.0.3 and 2.0.4 (03-Dec-2004 to xx-Dec-2004)
  +
  +   *) Do not insist on writing to the source directory on "make install"
  +      in order to more closely follow GNU standards.
  +      [Bruno Haible <bruno@clisp.org>]
  +
  +   *) Remove "*.bak" and "*~" files under "make distclean"
  +      instead of "make clean".
  +      [Bruno Haible <bruno@clisp.org>]
  +
     Changes between 2.0.2 and 2.0.3 (12-Sep-2004 to 03-Dec-2004)
   
      *) Resurrect the old "make striptease" command by fixing the
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.153 -r1.154 Makefile.in
  --- ossp-pkg/pth/Makefile.in	3 Dec 2004 17:03:30 -0000	1.153
  +++ ossp-pkg/pth/Makefile.in	6 Dec 2004 19:47:38 -0000	1.154
  @@ -157,10 +157,10 @@
   #   the default target
   all: all-normal
   all-normal: $(TARGET_ALL)
  -	@touch .done-all
  +	@touch .done-all >/dev/null 2>&1 || $(TRUE)
   	@$(MAKE) $(MKFLAGS) what-next
   all-for-install: $(TARGET_ALL)
  -	@touch .done-all
  +	@touch .done-all >/dev/null 2>&1 || $(TRUE)
   
   #   build the private shared header file
   pth_p.h: $(S)pth_p.h.in
  @@ -217,7 +217,7 @@
   #   install the package
   install: all-for-install
   	@$(MAKE) $(MKFLAGS) install-dirs install-pth @INSTALL_PTHREAD@
  -	@touch .done-install
  +	@touch .done-install >/dev/null 2>&1 || $(TRUE)
   	@$(MAKE) $(MKFLAGS) what-next
   install-dirs:
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
  @@ -246,7 +246,7 @@
   #   uninstall the package
   uninstall:
   	@$(MAKE) $(MKFLAGS) @UNINSTALL_PTHREAD@ uninstall-pth uninstall-dirs
  -	@touch .done-uninstall
  +	@touch .done-uninstall >/dev/null 2>&1 || $(TRUE)
   	@$(MAKE) $(MKFLAGS) what-next
   uninstall-pthread:
   	$(RM) $(DESTDIR)$(bindir)/pthread-config
  @@ -285,10 +285,10 @@
   	$(RM) $(TARGET_PREQ)
   	$(RM) $(TARGET_TEST)
   	$(RM) $(TARGET_LIBS)
  -	$(RM) core *.core *.bak *~
   	$(RM) *.o *.lo
   	$(RM) .libs/*
   	-$(RMDIR) .libs >/dev/null 2>&1 || $(TRUE)
  +	$(RM) core *.core
   	$(RM) .done-*
   
   #   clean the source tree for re-configuring and re-building
  @@ -298,6 +298,7 @@
   	$(RM) pthread-config pthread.h
   	$(RM) config.log config.cache config.status
   	$(RM) libtool
  +	$(RM) *.bak *~
   
   #   clean the source tree by removing really all generate stuff
   realclean: distclean
  @@ -341,7 +342,7 @@
   test-std: test_std
   	-@./test_std; \
   	if [ $$? -eq 0 ]; then \
  -	    touch .done-test; \
  +	    touch .done-test >/dev/null 2>&1 || $(TRUE); \
   	    if [ ".`grep $(PLATFORM) $(S)PORTING`" = . ]; then \
   	        VERSION=`$(SHTOOL) version -lc -dshort $(_VERSION_FILE)`; \
   	        echo "Please send the following summary line via Email to the author"; \
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/THANKS
  ============================================================================
  $ cvs diff -u -r1.98 -r1.99 THANKS
  --- ossp-pkg/pth/THANKS	3 Dec 2004 16:21:08 -0000	1.98
  +++ ossp-pkg/pth/THANKS	6 Dec 2004 19:47:38 -0000	1.99
  @@ -42,6 +42,7 @@
       o  Artem Gr                    <artem@bizlink.ru>
       o  Ed Grether                  <egrether@pobox.com>
       o  Georg C. F. Greve           <greve@gnu.org>
  +    o  Bruno Haible                <bruno@clisp.org>
       o  Eric Hanchrow               <offby1@blarg.net>
       o  Ben Harris                  <bjh21@cam.ac.uk>
       o  Tim Harris                  <tim_harris@snellwilcox.com>
  @@ .

From ossp-cvs-owner@ossp.org  Tue Dec 14 20:18:42 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B2BB07643C; Tue, 14 Dec 2004 20:18:41 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/svs/ .cvsignore AUTHORS ChangeLog Makefile.in REA...
Message-Id: <20041214191841.B2BB07643C@mail.ossp.org>
Date: Tue, 14 Dec 2004 20:18:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   14-Dec-2004 20:18:41
  Branch: HEAD                             Handle: 2004121419183700

  Added files:
    ossp-pkg/svs            .cvsignore AUTHORS ChangeLog Makefile.in README
                            THANKS VERSION configure.ac devtool devtool.conf
                            devtool.func svs.pod svs.sh

  Log:
    initial cut for OSSP svs

  Summary:
    Revision    Changes     Path
    1.1         +5  -0      ossp-pkg/svs/.cvsignore
    1.1         +15 -0      ossp-pkg/svs/AUTHORS
    1.1         +15 -0      ossp-pkg/svs/ChangeLog
    1.1         +87 -0      ossp-pkg/svs/Makefile.in
    1.1         +50 -0      ossp-pkg/svs/README
    1.1         +17 -0      ossp-pkg/svs/THANKS
    1.1         +6  -0      ossp-pkg/svs/VERSION
    1.1         +46 -0      ossp-pkg/svs/configure.ac
    1.1         +47 -0      ossp-pkg/svs/devtool
    1.1         +41 -0      ossp-pkg/svs/devtool.conf
    1.1         +73 -0      ossp-pkg/svs/devtool.func
    1.1         +131 -0     ossp-pkg/svs/svs.pod
    1.1         +181 -0     ossp-pkg/svs/svs.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/.cvsignore
  ============================================================================
  $ cvs diff -u -r0 -r1.1 .cvsignore
  --- /dev/null	2004-12-14 20:18:37 +0100
  +++ .cvsignore	2004-12-14 20:18:37 +0100
  @@ -0,0 +1,5 @@
  +configure
  +shtool
  +Makefile
  +svs
  +svs.1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/AUTHORS
  ============================================================================
  $ cvs diff -u -r0 -r1.1 AUTHORS
  --- /dev/null	2004-12-14 20:18:37 +0100
  +++ AUTHORS	2004-12-14 20:18:37 +0100
  @@ -0,0 +1,15 @@
  +   _        ___  ____ ____  ____  
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _____   _____ 
  +  _|_||_| | | | \___ \___ \| |_) | / __\ \ / / __|
  + |_||_|_| | |_| |___) |__) |  __/  \__ \\ V /\__ \
  +  |_|_|_|  \___/|____/____/|_|     |___/ \_/ |___/
  +
  +  OSSP svs - Stupid/Silly/Simple Versioning System
  +
  +  This is a list of authors who have written
  +  or edited parts of the OSSP svs sources.
  +
  +  o  OSSP svs (as a whole)
  +     Written by: Ralf S. Engelschall
  +     Edited  by: Ralf S. Engelschall
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/ChangeLog
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ChangeLog
  --- /dev/null	2004-12-14 20:18:37 +0100
  +++ ChangeLog	2004-12-14 20:18:38 +0100
  @@ -0,0 +1,15 @@
  +   _        ___  ____ ____  ____  
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _____   _____ 
  +  _|_||_| | | | \___ \___ \| |_) | / __\ \ / / __|
  + |_||_|_| | |_| |___) |__) |  __/  \__ \\ V /\__ \
  +  |_|_|_|  \___/|____/____/|_|     |___/ \_/ |___/
  +
  +  OSSP svs - Stupid/Silly/Simple Versioning System
  +
  +  ChangeLog
  +
  +  Changes between *GENESIS* and 1.0.0 (xx-Jun-2003 to 14-Dec-2004):
  +
  +    *) Created the initial version of OSSP svs.
  +       [Ralf S. Engelschall]
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/Makefile.in
  ============================================================================
  $ cvs diff -u -r0 -r1.1 Makefile.in
  --- /dev/null	2004-12-14 20:18:37 +0100
  +++ Makefile.in	2004-12-14 20:18:38 +0100
  @@ -0,0 +1,87 @@
  +##
  +##  OSSP svs -- Stupid/Silly/Simple Versioning System
  +##  Copyright (c) 2003-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP svs, a stupid/silly/simple versioning
  +##  system which can found at http://www.ossp.org/pkg/tool/svs/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  Makefile.in: make(1) build procedure
  +##
  +
  +@SET_MAKE@
  +
  +#   installation paths
  +DESTDIR     =
  +prefix      = @prefix@
  +exec_prefix = @exec_prefix@
  +bindir      = @bindir@
  +libdir      = @libdir@
  +includedir  = @includedir@
  +mandir      = @mandir@
  +
  +#   build tools
  +RM          = rm -f
  +RMDIR       = rmdir
  +SHTOOL      = ./shtool
  +TRUE        = true
  +POD2MAN     = pod2man
  +
  +#   default target
  +all: svs.1
  +
  +svs.1: svs.pod
  +	V1=`$(SHTOOL) version -l txt -d short VERSION`; \
  +	V2=`$(SHTOOL) version -l txt -d long VERSION`; \
  +	D=`$(SHTOOL) version -l txt -d long VERSION | sed -e 's;.*(;;' -e 's;).*;;'`; \
  +	$(POD2MAN) --quotes=none \
  +	           --section=1 --center="Stupid/Silly/Simple Versioning System" \
  +	           --release="$$D" --date="OSSP svs $$V1" svs.pod | \
  +	sed -e "s;SVS_VERSION_STR;$$V2;" >svs.1
  +
  +#   perform installation procedure
  +install:
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man1
  +	$(SHTOOL) install -c -m 755 svs.sh $(DESTDIR)$(bindir)/svs
  +	$(SHTOOL) install -c -m 644 svs.1 $(DESTDIR)$(mandir)/man1/svs.1
  +
  +#   perform uninstallation procedure
  +uninstall:
  +	-$(RM) $(DESTDIR)$(mandir)/bin/svs
  +	-$(RM) $(DESTDIR)$(mandir)/man1/svs.1
  +	-$(RMDIR) $(DESTDIR)$(mandir)/man1 >/dev/null 2>&1 || $(TRUE)
  +	-$(RMDIR) $(DESTDIR)$(bindir) >/dev/null 2>&1 || $(TRUE)
  +	-$(RMDIR) $(DESTDIR)$(prefix) >/dev/null 2>&1 || $(TRUE)
  +
  +#   perform build clean up procedure
  +clean:
  +
  +#   perform distribution clean up procedure
  +distclean: clean
  +	-$(RM) config.log config.status config.cache
  +	-$(RM) Makefile
  +
  +#   perform developer clean up procedure
  +realclean: distclean
  +	-$(RM) svs.1
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/README
  ============================================================================
  $ cvs diff -u -r0 -r1.1 README
  --- /dev/null	2004-12-14 20:18:37 +0100
  +++ README	2004-12-14 20:18:38 +0100
  @@ -0,0 +1,50 @@
  +   _        ___  ____ ____  ____  
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _____   _____ 
  +  _|_||_| | | | \___ \___ \| |_) | / __\ \ / / __|
  + |_||_|_| | |_| |___) |__) |  __/  \__ \\ V /\__ \
  +  |_|_|_|  \___/|____/____/|_|     |___/ \_/ |___/
  +
  +  OSSP svs - Stupid/Silly/Simple Versioning System
  +  Version 1.0.0
  +
  +  ABSTRACT
  +
  +  OSSP svs is a simple frontend to diff(1) and patch(1). It provides a
  +  convenient way for working with changes on textual files if no history
  +  tracking and version control is necessary. This is especially the
  +  case when having to patch pristine vendor sources for portability or
  +  bugfixing reasons.
  +
  +  COPYRIGHT AND LICENSE
  +
  +  Copyright (c) 2003-2004 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2003-2004 The OSSP Project <http://www.ossp.org/>
  +
  +  This file is part of OSSP svs, a stupid/silly/simple versioning
  +  system which can found at http://www.ossp.org/pkg/tool/svs/
  +
  +  Permission to use, copy, modify, and distribute this software for
  +  any purpose with or without fee is hereby granted, provided that
  +  the above copyright notice and this permission notice appear in all
  +  copies.
  +
  +  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +  SUCH DAMAGE.
  +
  +  HOME AND DOCUMENTATION
  +
  +  The documentation and latest release can be found on
  +
  +  o http://www.ossp.org/pkg/tool/svs/
  +  o  ftp://ftp.ossp.org/pkg/tool/svs/
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/THANKS
  ============================================================================
  $ cvs diff -u -r0 -r1.1 THANKS
  --- /dev/null	2004-12-14 20:18:37 +0100
  +++ THANKS	2004-12-14 20:18:38 +0100
  @@ -0,0 +1,17 @@
  +   _        ___  ____ ____  ____  
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _____   _____ 
  +  _|_||_| | | | \___ \___ \| |_) | / __\ \ / / __|
  + |_||_|_| | |_| |___) |__) |  __/  \__ \\ V /\__ \
  +  |_|_|_|  \___/|____/____/|_|     |___/ \_/ |___/
  +
  +  OSSP svs - Stupid/Silly/Simple Versioning System
  +
  +  THANKS
  +
  +  Credit has to be given to the following people who contributed ideas,
  +  stuff, bugfixes, hints etc. (in alphabetical order):
  +
  +  o Thomas Lotterer          <thomas@lotterer.net>
  +
  +  ...and all other OSSP svs users who gave me feedback but I've forgot.
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/VERSION
  ============================================================================
  $ cvs diff -u -r0 -r1.1 VERSION
  --- /dev/null	2004-12-14 20:18:37 +0100
  +++ VERSION	2004-12-14 20:18:38 +0100
  @@ -0,0 +1,6 @@
  +
  +  VERSION -- Version Information for OSSP svs (syntax: Text)
  +  [automatically generated and maintained by GNU shtool]
  +
  +  This is OSSP svs, Version 1.0.0 (14-Dec-2004)
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/configure.ac
  ============================================================================
  $ cvs diff -u -r0 -r1.1 configure.ac
  --- /dev/null	2004-12-14 20:18:37 +0100
  +++ configure.ac	2004-12-14 20:18:38 +0100
  @@ -0,0 +1,46 @@
  +dnl ##
  +dnl ##  OSSP svs -- Stupid/Silly/Simple Versioning System
  +dnl ##  Copyright (c) 2003-2004 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2003-2004 The OSSP Project <http://www.ossp.org/>
  +dnl ##
  +dnl ##  This file is part of OSSP svs, a stupid/silly/simple versioning
  +dnl ##  system which can found at http://www.ossp.org/pkg/tool/svs/
  +dnl ##
  +dnl ##  Permission to use, copy, modify, and distribute this software for
  +dnl ##  any purpose with or without fee is hereby granted, provided that
  +dnl ##  the above copyright notice and this permission notice appear in all
  +dnl ##  copies.
  +dnl ##
  +dnl ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +dnl ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +dnl ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +dnl ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +dnl ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +dnl ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +dnl ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +dnl ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +dnl ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +dnl ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +dnl ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +dnl ##  SUCH DAMAGE.
  +dnl ##
  +dnl ##
  +dnl ##  configure.ac: GNU autoconf specification
  +dnl ##
  +
  +AC_PREREQ(2.53)
  +AC_REVISION($1.0$)
  +AC_INIT(README)
  +
  +SVS_VERSION_STR="`./shtool version -l txt -d long VERSION`"
  +./shtool echo -e "Configuring %BOSSP svs%b (Stupid/Silly/Simple Versioning System), version %B${SVS_VERSION_STR}%b"
  +echo "Copyright (c) 2003-2004 Ralf S. Engelschall <rse@engelschall.com>"
  +echo "Copyright (c) 2003-2004 The OSSP Project <http://www.ossp.org/>"
  +AC_SUBST(SVS_VERSION_STR)
  +
  +AC_PREFIX_DEFAULT(/usr/local)
  +AC_SET_MAKE
  +
  +AC_CONFIG_FILES(Makefile)
  +AC_OUTPUT
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/devtool
  ============================================================================
  $ cvs diff -u -r0 -r1.1 devtool
  --- /dev/null	2004-12-14 20:18:37 +0100
  +++ devtool	2004-12-14 20:18:39 +0100
  @@ -0,0 +1,47 @@
  +#!/bin/sh
  +##
  +##  devtool -- Development Tool
  +##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  +##
  +
  +if [ $# -eq 0 ]; then
  +    echo "devtool:USAGE: devtool <command> [<arg> ...]" 1>&2
  +    exit 1
  +fi
  +
  +cmd="$1"
  +shift
  +
  +devtoolfunc="./devtool.func"
  +
  +if [ ! -f devtool.conf ]; then
  +    echo "devtool:ERROR: no devtool.conf in current directory" 1>&2
  +    exit 1
  +fi
  +
  +cmdline=`grep "^%$cmd" devtool.conf`
  +if [ ".$cmdline" = . ]; then
  +    echo "devtool:ERROR: command $cmd not found in devtool.conf" 1>&2
  +    exit 1
  +fi
  +
  +if [ ".$TMPDIR" != . ]; then
  +    tmpdir="$TMPDIR"
  +elif [ ".$TEMPDIR" != . ]; then
  +    tmpdir="$TEMPDIR"
  +else
  +    tmpdir="/tmp"
  +fi
  +tmpfile="$tmpdir/rc.$$.tmp"
  +
  +rm -f $tmpfile
  +touch $tmpfile
  +echo ". $devtoolfunc" >>$tmpfile
  +( sed <devtool.conf -e "1,/^%common/d" -e '/^%.*/,$d'
  +  sed <devtool.conf -e "1,/^%$cmd/d" -e '/^%.*/,$d' ) |\
  +sed -e 's;\([ 	]\)@\([a-zA-Z_][a-zA-Z0-9_]*\);\1devtool_\2;' >>$tmpfile
  +
  +sh $tmpfile "$@"
  +
  +rm -f $tmpfile >/dev/null 2>&1 || true
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/devtool.conf
  ============================================================================
  $ cvs diff -u -r0 -r1.1 devtool.conf
  --- /dev/null	2004-12-14 20:18:40 +0100
  +++ devtool.conf	2004-12-14 20:18:40 +0100
  @@ -0,0 +1,41 @@
  +##
  +##  devtool.conf -- Development Tool Configuration
  +##
  +
  +%autogen
  +    @autogen autoconf 2.59 "2.5*"
  +    @autogen shtool 2.0.1  "2.0.*" all
  +
  +%autoclean
  +    @autoclean autoconf
  +    @autoclean shtool
  +
  +%configure
  +    ./configure --prefix=/tmp/svs "$@"
  +
  +%version
  +    ./shtool version -l txt -n "OSSP svs" -e VERSION
  +    V=`./shtool version -l txt -d long VERSION`
  +    sed -e "s/Version .*(.*)/Version $V/g" <README >README.n 
  +    mv README.n README
  +
  +%dist
  +    echo "+++ generating"
  +    ./devtool autoclean
  +    ./devtool autogen
  +    echo "+++ configuring"
  +    ./configure
  +    echo "+++ building"
  +    make clean all
  +    echo "+++ cleaning"
  +    make distclean
  +    echo "+++ fixing"
  +    ./shtool fixperm -v .
  +    echo "+++ rolling"
  +    V=`./shtool version -l txt -d short VERSION`
  +    ./shtool tarball -o svs-${V}.tar.gz -d svs-${V} -u ossp -g svs \
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*,*.tar.gz' -c 'gzip --best' .
  +    ls -l svs-${V}.tar.gz
  +    echo "+++ testing"
  +    gunzip <svs-${V}.tar.gz | tar tvf -
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/devtool.func
  ============================================================================
  $ cvs diff -u -r0 -r1.1 devtool.func
  --- /dev/null	2004-12-14 20:18:40 +0100
  +++ devtool.func	2004-12-14 20:18:40 +0100
  @@ -0,0 +1,73 @@
  +##
  +##  devtool.func -- Development Tool Functions
  +##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com> 
  +##
  +
  +devtool_require () {
  +    t="$1"; o="$2"; p="$3"; e="$4"; a="$5"
  +    v=`($t $o | head -1 | awk "{ print \\\$$p; }") 2>/dev/null`
  +    if [ ".$v" = . ]; then
  +        echo "devtool:ERROR: unable to determine version of $t" 1>&2
  +        exit 1
  +    fi
  +    case "$v" in
  +        $e )
  +            ;;
  +        $a )
  +            echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
  +            ;;
  +        * )
  +            echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
  +            exit 1
  +            ;;
  +    esac
  +    echo "$v"
  +}
  +
  +devtool_autogen () {
  +    tool=$1
  +    shift
  +    case $tool in
  +        autoconf )
  +            autoconf_version=`devtool_require autoconf --version 4 "$1" "$2"`
  +            echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
  +            autoconf
  +            #autoheader 2>&1 | grep -v "is unchanged"
  +            rm -rf autom4te.cache >/dev/null 2>&1
  +            ;;
  +        libtool )
  +            libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
  +            echo "generating (GNU Libtool $libtoolize_version): ltmain.sh, libtool.m4, config.guess, config.sub"
  +            libtoolize --force --copy >/dev/null 2>&1
  +            cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
  +                sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` libtool.m4
  +            ;;
  +        shtool )
  +            shtoolize_version=`devtool_require shtoolize -v 3 "$1" "$2"`
  +            echo "generating (GNU Shtool $shtoolize_version): shtool"
  +            shift
  +            shift
  +            shtoolize -q "$@"
  +            ;;
  +    esac
  +}
  +
  +devtool_autoclean () {
  +    tool=$1
  +    shift
  +    case $tool in
  +        autoconf )
  +            echo "removing: configure config.h.in"
  +            rm -f configure config.h.in
  +            ;;
  +        libtool )
  +            echo "removing: ltmain.sh libtool.m4 config.guess config.sub"
  +            rm -f ltmain.sh libtool.m4 config.guess config.sub
  +            ;;
  +        shtool )
  +            echo "removing: shtool"
  +            rm -f shtool
  +            ;;
  +    esac
  +}
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/svs.pod
  ============================================================================
  $ cvs diff -u -r0 -r1.1 svs.pod
  --- /dev/null	2004-12-14 20:18:40 +0100
  +++ svs.pod	2004-12-14 20:18:40 +0100
  @@ -0,0 +1,131 @@
  +##
  +##  OSSP svs -- Stupid/Silly/Simple Versioning System
  +##  Copyright (c) 2003-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP svs, a stupid/silly/simple versioning
  +##  system which can found at http://www.ossp.org/pkg/tool/svs/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  svs.pod: manual page (language: POD)
  +##
  +
  +=pod
  +
  +=head1 NAME
  +
  +B<svs> - B<Stupid/Silly/Simple Versioning System>
  +
  +=head1 VERSION
  +
  +B<OSSP svs> SVS_VERSION_STR
  +
  +=head1 SYNOPSIS
  +
  +=over 0
  +
  +=item B<svs> vi I<file> [...]
  +
  +=item B<svs> diff I<file>|I<dir> [...]
  +
  +=item B<svs> backout I<file>|I<dir> [...]
  +
  +=back
  +
  +=head1 DESCRIPTION
  +
  +B<OSSP svs> is a simple frontend to diff(1) and patch(1). It provides a
  +convenient way for working with changes on textual files if no history
  +tracking and version control is necessary. This is especially the
  +case when having to patch pristine vendor sources for portability or
  +bugfixing reasons.
  +
  +B<svs> solves the following primary issues:
  +
  +=over 4
  +
  +=item Writable and preserved files
  +
  +It is often the case that one enters the editor for editing a file, just
  +to have to recognized that it is not writable ("C<chmod u+w >I<file>)
  +or the original content was not (or not correctly) preserved before
  +("C<cp> I<file> I<file>C<.orig>"). Simply running "C<svs vi>" instead
  +of "C<vi>" and not having to remember those subtle problems is both
  +convenient and leads to consistent results.
  +
  +=item Re-editing of files
  +
  +Usually the patching of vendor sources is an iterative process where one
  +has to both re-edit files and even perform the whole edit/diff/patch
  +cycle multiple times. Here it is important that no already applied
  +changes are lost (overwritten C<*.orig> files, etc) and that the changes
  +can be correctly backed out again.
  +
  +=item Index style
  +
  +For portability and consistency reasons it is good if all patches use
  +the same style. This means that all hunks should be preceeded by an
  +C<Index> header and that the change is represented with the concise
  +I<unified diff> format with at least 3 lines of context.
  +
  +=item New or removed files
  +
  +While patch files for changed vendor files are harmless, added or
  +removed vendor files are special cases both for the patch application
  +and removal. B<svs diff> and C<svs backout> correctly handle those
  +special cases.
  +
  +=back
  +
  +=head2 COMMANDS
  +
  +The following commands are provided:
  +
  +=over 4
  +
  +=item B<svs> vi I<file> [...]
  +
  +This potentially edits I<file> by preserving the original contents in
  +I<file>C<.orig> (if still not existing) and running the C<$EDITOR> (or
  +"C<vi>") on I<file>. On leaving the editor, the original and current
  +contents is compared. If there is no difference the I<file>C<.orig> is
  +removed again, else it is kept.
  +
  +=item B<svs> diff [I<file>|I<dir> [...]]
  +
  +This generates a "patch file" summarizing all changes made to files
  +where an I<file>C<.orig> exists.
  +
  +=item B<svs> backout [I<file>|I<dir> [...]]
  +
  +This backouts all changes made to files where an I<file>C<.orig> exists.
  +The I<file>C<.orig> files are removed, too.
  +
  +=back
  +
  +=head1 HISTORY
  +
  +The B<svs> tool was implemented in 2003 by Ralf S. Engelschall
  +E<lt>rse@engelschall.comE<gt>. It was prompted by the need for a
  +frontend to diff(1) and patch(1) to generate patches in the B<OpenPKG>
  +E<lt>http://www.openpkg.org/E<gt> project.
  +
  +=cut
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/svs.sh
  ============================================================================
  $ cvs diff -u -r0 -r1.1 svs.sh
  --- /dev/null	2004-12-14 20:18:40 +0100
  +++ svs.sh	2004-12-14 20:18:41 +0100
  @@ -0,0 +1,181 @@
  +#!/bin/sh
  +##
  +##  OSSP svs -- Stupid/Silly/Simple Versioning System
  +##  Copyright (c) 2003-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP svs, a stupid/silly/simple versioning
  +##  system which can found at http://www.ossp.org/pkg/tool/svs/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  svs.sh: program (language: Bourne Shell)
  +##
  +
  +#   check command line
  +if [ $# -eq 0 ]; then
  +    echo "Usage: svs vi <file> [...]"
  +    echo "Usage: svs diff [<file>|<dir> [...]]"
  +    echo "Usage: svs backout [<file>|<dir> [...]]"
  +    exit 1
  +fi
  +
  +#   dispatch into commands
  +cmd="$1"
  +shift
  +case "$cmd" in
  +    v|vi|vim | e|em|ema|emac|emacs )
  +        ##
  +        ##  EDIT ONE OR MORE FILES
  +        ##
  +
  +        #   iterate over all files
  +        for file in "$@"; do
  +            #   preserve original file
  +            if [ ! -f $file.orig ]; then
  +                cp -p $file $file.orig
  +                orig=new
  +            else
  +                orig=old
  +            fi
  +
  +            #   edit file
  +            chmod u+w $file
  +            ${EDITOR-vi} $file
  +
  +            #   check for editing results
  +            if cmp $file.orig $file >/dev/null 2>&1; then
  +                if [ ".$orig" = .new ]; then
  +                    echo "svs: no changes made (keeping original)"
  +                else
  +                    echo "svs: changes reversed (restoring original)"
  +                fi
  +                cp -p $file.orig $file
  +                rm -f $file.orig
  +            else
  +                echo "svs: changes made (preserving original)"
  +            fi
  +        done
  +        ;;
  +
  +    d|di|dif|diff )
  +        ##
  +        ##  GENERATE PATCHING DIFFERENCE
  +        ##
  +
  +        #   determine file list
  +        if [ $# -eq 0 ]; then
  +            set -- .
  +        fi
  +        files=""
  +        for file in "$@"; do
  +            if [ -d $file ]; then
  +                for f in `find $file -type f -name "*.orig" -print`; do
  +                    files="$files $f"
  +                done
  +            elif [ -f $file ]; then
  +                files="$files $file"
  +            else
  +                echo "svs:ERROR: \"$file\" neither regular file nor directory" 1>&2
  +                exit 1
  +            fi
  +        done
  +
  +        #   generate patch
  +        for file in $files; do
  +            file=`echo "$file" | sed -e 's;^\./;;' -e 's;/\./;/;g' -e 's;\([^/][^/]*\)/\.\.;;g' -e 's;//*;/;g'`
  +            orig=`echo "$file" | sed -e 's;\.orig$;;' -e 's;$;.orig;'`
  +            edit=`echo "$file" | sed -e 's;\.orig$;;'`
  +            if [ ! -f $orig ]; then
  +                echo "svs:WARNING: original file \"$orig\" not found" 1>&2
  +                continue
  +            fi
  +            if [ ! -f $edit ]; then
  +                #   special case: removed file
  +                echo "Index: $edit"
  +                diff -u3 $orig /dev/null | sed -e "1s/^--- $orig/--- $edit/"
  +            elif [ ! -r $orig ] && [ ! -s $orig ]; then
  +                #   special case: new file
  +                echo "Index: $edit"
  +                diff -u3 /dev/null $edit
  +            else
  +                #   regular case: edited file
  +                if ! cmp $orig $edit >/dev/null 2>&1; then
  +                    echo "Index: $edit"
  +                    diff -u3 $orig $edit
  +                fi
  +            fi
  +        done
  +        ;;
  +
  +    b|ba|bac|back|backo|backou|backout )
  +        ##
  +        ##  BACKOUT EDITING CHANGES
  +        ##
  +
  +        #   determine file list
  +        if [ $# -eq 0 ]; then
  +            set -- .
  +        fi
  +        files=""
  +        for file in "$@"; do
  +            if [ -d $file ]; then
  +                for f in `find $file -type f -name "*.orig" -print`; do
  +                    files="$files $f"
  +                done
  +            elif [ -f $file ]; then
  +                files="$files $file"
  +            else
  +                echo "svs:ERROR: \"$file\" neither regular file nor directory" 1>&2
  +                exit 1
  +            fi
  +        done
  +
  +        #   backout changes
  +        for file in $files; do
  +            file=`echo "$file" | sed -e 's;^\./;;' -e 's;/\./;/;g' -e 's;\([^/][^/]*\)/\.\.;;g' -e 's;//*;/;g'`
  +            orig=`echo "$file" | sed -e 's;\.orig$;;' -e 's;$;.orig;'`
  +            edit=`echo "$file" | sed -e 's;\.orig$;;'`
  +            if [ ! -f $orig ]; then
  +                echo "svs:WARNING: original file \"$orig\" not found" 1>&2
  +                continue
  +            fi
  +            echo "svs: backing out changes to \"$edit\""
  +            if [ ! -f $edit ]; then
  +                #   special case: removed file
  +                cp -p $orig $edit
  +                rm -f $orig
  +            elif [ ! -r $orig ] && [ ! -s $orig ]; then
  +                #   special case: new file
  +                chmod u+w $orig
  +                rm -f $orig
  +                rm -f $edit
  +            else
  +                #   regular case: edited file
  +                cp -p $orig $edit
  +                rm -f $orig
  +            fi
  +        done
  +        ;;
  +    * )
  +        echo "svs:ERROR: invalid command \"$cmd\"" 1>&2
  +        exit 1
  +        ;;
  +esac
  +
  @@ .

From ossp-cvs-owner@ossp.org  Tue Dec 14 20:20:59 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4DEA07643C; Tue, 14 Dec 2004 20:20:59 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/svs/ devtool.conf
Message-Id: <20041214192059.4DEA07643C@mail.ossp.org>
Date: Tue, 14 Dec 2004 20:20:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   14-Dec-2004 20:20:59
  Branch: HEAD                             Handle: 2004121419205800

  Modified files:
    ossp-pkg/svs            devtool.conf

  Log:
    add upload command

  Summary:
    Revision    Changes     Path
    1.2         +5  -0      ossp-pkg/svs/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.conf
  --- ossp-pkg/svs/devtool.conf	14 Dec 2004 19:18:37 -0000	1.1
  +++ ossp-pkg/svs/devtool.conf	14 Dec 2004 19:20:58 -0000	1.2
  @@ -39,3 +39,8 @@
       echo "+++ testing"
       gunzip <svs-${V}.tar.gz | tar tvf -
   
  +%upload
  +    echo "+++ copying to ftp://ftp.ossp.org/pkg/tool/svs/"
  +    V=`./shtool version -ltxt -dshort VERSION`
  +    scp svs-${V}.tar.gz master.ossp.org:/e/ossp/ftp/pkg/tool/svs/
  +
  @@ .

From ossp-cvs-owner@ossp.org  Tue Dec 14 20:26:37 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E88947643C; Tue, 14 Dec 2004 20:26:36 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/SHARE/ ossp_navbar.wml
Message-Id: <20041214192636.E88947643C@mail.ossp.org>
Date: Tue, 14 Dec 2004 20:26:36 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   14-Dec-2004 20:26:36
  Branch: HEAD                             Handle: 2004121419263600

  Modified files:
    ossp-web/SHARE          ossp_navbar.wml

  Log:
    add svs

  Summary:
    Revision    Changes     Path
    1.12        +6  -2      ossp-web/SHARE/ossp_navbar.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/SHARE/ossp_navbar.wml
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 ossp_navbar.wml
  --- ossp-web/SHARE/ossp_navbar.wml	1 Nov 2002 08:59:13 -0000	1.11
  +++ ossp-web/SHARE/ossp_navbar.wml	14 Dec 2004 19:26:36 -0000	1.12
  @@ -231,9 +231,11 @@
     #   Packages, Tools
     <navbar:button txt="GNU shtool"       url=pkg/tool/shtool/         id=pkg:tool:shtool>
     <navbar:button txt="OSSP lmtp2nntp"   url=pkg/tool/lmtp2nntp/      id=pkg:tool:lmtp2nntp>
  +  <navbar:button txt="OSSP shiela"      url=pkg/tool/shiela/         id=pkg:tool:shiela>
  +  <navbar:button txt="OSSP snmpdx"      url=pkg/tool/snmpdx/         id=pkg:tool:snmpdx>
  +  <navbar:button txt="OSSP svs"         url=pkg/tool/svs/            id=pkg:tool:svs>
     <navbar:button txt="OSSP eperl"       url=pkg/tool/eperl/          id=pkg:tool:eperl>
     <navbar:button txt="OSSP petidomo"    url=pkg/tool/petidomo/       id=pkg:tool:petidomo>
  -  <navbar:button txt="OSSP shiela"      url=pkg/tool/shiela/         id=pkg:tool:shiela>
     <navbar:button txt="OSSP xenia"       url=pkg/tool/xenia/          id=pkg:tool:xenia>
     <navbar:button txt="OSSP rc"          url=pkg/tool/rc/             id=pkg:tool:rc>
     <navbar:button txt="OSSP dsotool"     url=pkg/tool/dsotool/        id=pkg:tool:dsotool>
  @@ -255,14 +257,16 @@
     <navbar:button txt="OSSP val"         url=pkg/lib/val/             id=pkg:lib:val>
     <navbar:button txt="OSSP xds"         url=pkg/lib/xds/             id=pkg:lib:xds>
     <navbar:button txt="OSSP str"         url=pkg/lib/str/             id=pkg:lib:str>
  +  <navbar:button txt="OSSP uuid"        url=pkg/lib/uuid/            id=pkg:lib:uuid>
     <navbar:button txt="OSSP l2"          url=pkg/lib/l2/              id=pkg:lib:l2>
  +  <navbar:button txt="OSSP al"          url=pkg/lib/al/              id=pkg:lib:al>
  +  <navbar:button txt="OSSP sio"         url=pkg/lib/sio/             id=pkg:lib:sio>
     <navbar:button txt="OSSP cfg"         url=pkg/lib/cfg/             id=pkg:lib:cfg>
     <navbar:button txt="OSSP act"         url=pkg/lib/act/             id=pkg:lib:act>
     <navbar:button txt="OSSP cache"       url=pkg/lib/cache/           id=pkg:lib:cache>
     <navbar:button txt="OSSP path"        url=pkg/lib/path/            id=pkg:lib:path>
     <navbar:button txt="OSSP proc"        url=pkg/lib/proc/            id=pkg:lib:proc>
     <navbar:button txt="OSSP pcbe"        url=pkg/lib/pcbe/            id=pkg:lib:pcbe>
  -  <navbar:button txt="OSSP sio"         url=pkg/lib/sio/             id=pkg:lib:sio>
     <navbar:button txt="OSSP res"         url=pkg/lib/res/             id=pkg:lib:res>
     <navbar:button txt="OSSP hook"        url=pkg/lib/hook/            id=pkg:lib:hook>
     <navbar:button txt="OSSP mux"         url=pkg/lib/mux/             id=pkg:lib:mux>
  @@ .

From ossp-cvs-owner@ossp.org  Tue Dec 14 20:34:19 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E80747643C; Tue, 14 Dec 2004 20:34:18 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/tool/ index.wml ossp-w...
Message-Id: <20041214193418.E80747643C@mail.ossp.org>
Date: Tue, 14 Dec 2004 20:34:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   14-Dec-2004 20:34:18
  Branch: HEAD                             Handle: 2004121419341701

  Added files:
    ossp-web/pkg/tool/svs   .cvsignore index.wml
  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml

  Log:
    release OSSP svs 1.0.0

  Summary:
    Revision    Changes     Path
    1.110       +1  -0      ossp-web/new/news.txt
    1.42        +4  -1      ossp-web/pkg/tool/index.wml
    1.1         +1  -0      ossp-web/pkg/tool/svs/.cvsignore
    1.1         +39 -0      ossp-web/pkg/tool/svs/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.109 -r1.110 news.txt
  --- ossp-web/new/news.txt	4 Dec 2004 12:58:02 -0000	1.109
  +++ ossp-web/new/news.txt	14 Dec 2004 19:34:17 -0000	1.110
  @@ -1,3 +1,4 @@
  +14-Dec-2004: Released T<OSSP svs> 1.0.0
   04-Dec-2004: Released L<OSSP cfg> 0.9.6
   03-Dec-2004: Released L<GNU pth> 2.0.3
   27-Nov-2004: Released L<OSSP cfg> 0.9.5
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.41 -r1.42 index.wml
  --- ossp-web/pkg/tool/index.wml	25 Oct 2004 15:05:07 -0000	1.41
  +++ ossp-web/pkg/tool/index.wml	14 Dec 2004 19:34:17 -0000	1.42
  @@ -21,6 +21,9 @@
     <pkg_item name="shiela" longname="OSSP shiela" type="tool"
               desc="CVS Access Control and Logging"
   	        done=100 stable="1.1.4" unstable="none">
  +  <pkg_item name="svs" longname="OSSP svs" type="tool"
  +            desc="Stupid/Silly/Simple Versioning System"
  +	        done=100 stable="1.0.0" unstable="none">
     <pkg_item name="eperl" longname="OSSP eperl" type="tool"
               desc="Embedded Perl Language"
   	        done=100 stable="2.2.14" unstable="none">
  @@ -56,7 +59,7 @@
   	        done=90 stable="none" unstable="none">
     <pkg_item name="snmpdx" longname="OSSP snmpdx" type="tool"
               desc="SNMP Daemon Extension"
  -	        done=80 stable="none" unstable="0.2.8">
  +	        done=80 stable="none" unstable="0.2.10">
     <pkg_item name="quos" longname="OSSP quos" type="tool"
               desc="Query On Steroids"
   	        done=80 stable="none" unstable="0.2.0">
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/svs/.cvsignore
  ============================================================================
  $ cvs diff -u -r0 -r1.1 .cvsignore
  --- /dev/null	2004-12-14 20:34:18 +0100
  +++ .cvsignore	2004-12-14 20:34:18 +0100
  @@ -0,0 +1 @@
  +index.html
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/svs/index.wml
  ============================================================================
  $ cvs diff -u -r0 -r1.1 index.wml
  --- /dev/null	2004-12-14 20:34:18 +0100
  +++ index.wml	2004-12-14 20:34:18 +0100
  @@ -0,0 +1,39 @@
  +
  +#use wml::ossp area=pkg:tool subarea=svs
  +
  +<title>OSSP svs</title>
  +
  +<h1>Stupid/Silly/Simple Versioning System</h1>
  +
  +<h2>Abstract</h2>
  +
  +OSSP svs is a simple frontend to diff(1) and patch(1). It provides a
  +convenient way for working with changes on textual files if no history
  +tracking and version control is necessary. This is especially the
  +case when having to patch pristine vendor sources for portability or
  +bugfixing reasons.
  +
  +<h2>Authors</h2>
  +
  +<pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  +
  +<h2>Status</h2>
  +
  +<pkg_status
  +    stable="1.0.0" stable_date="14-Dec-2004"
  +    unstable="none" unstable_date="none"
  +	done=100>
  +
  +<h2>Source</h2>
  +
  +<pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/tool/svs/
  +    url=$(FTP_ROOT_URL)/pkg/tool/svs/
  +    directory=$(FTP_ROOT_DIR)/pkg/tool/svs/
  +    files="svs-*.tar.gz" 
  +	stable="svs-1.0.0.tar.gz" unstable="none">
  +	
  +<h2>Donation</h2>
  +
  +<pkg_donation name="svs" return="$(BASE_URL)/pkg/tool/svs/">
  +
  @@ .

From ossp-cvs-owner@ossp.org  Thu Dec 16 17:39:38 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8095676446; Thu, 16 Dec 2004 17:39:38 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/svs/ ChangeLog svs.sh
Message-Id: <20041216163938.8095676446@mail.ossp.org>
Date: Thu, 16 Dec 2004 17:39:38 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Dec-2004 17:39:38
  Branch: HEAD                             Handle: 2004121616393700

  Modified files:
    ossp-pkg/svs            ChangeLog svs.sh

  Log:
    When searching for *.orig files, sort the resulting filename
    list to make sure we deterministically produce patches.

  Summary:
    Revision    Changes     Path
    1.2         +6  -0      ossp-pkg/svs/ChangeLog
    1.2         +2  -2      ossp-pkg/svs/svs.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ChangeLog
  --- ossp-pkg/svs/ChangeLog	14 Dec 2004 19:18:37 -0000	1.1
  +++ ossp-pkg/svs/ChangeLog	16 Dec 2004 16:39:37 -0000	1.2
  @@ -8,6 +8,12 @@
   
     ChangeLog
   
  +  Changes between 1.0.0 and 1.0.1 (14-Dec-2004 to 16-Dec-2004):
  +
  +    *) When searching for *.orig files, sort the resulting filename
  +       list to make sure we deterministically produce patches.
  +       [Ralf S. Engelschall]
  +
     Changes between *GENESIS* and 1.0.0 (xx-Jun-2003 to 14-Dec-2004):
   
       *) Created the initial version of OSSP svs.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/svs.sh
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 svs.sh
  --- ossp-pkg/svs/svs.sh	14 Dec 2004 19:18:37 -0000	1.1
  +++ ossp-pkg/svs/svs.sh	16 Dec 2004 16:39:37 -0000	1.2
  @@ -86,7 +86,7 @@
           files=""
           for file in "$@"; do
               if [ -d $file ]; then
  -                for f in `find $file -type f -name "*.orig" -print`; do
  +                for f in `find $file -type f -name "*.orig" -print | sort`; do
                       files="$files $f"
                   done
               elif [ -f $file ]; then
  @@ -136,7 +136,7 @@
           files=""
           for file in "$@"; do
               if [ -d $file ]; then
  -                for f in `find $file -type f -name "*.orig" -print`; do
  +                for f in `find $file -type f -name "*.orig" -print | sort`; do
                       files="$files $f"
                   done
               elif [ -f $file ]; then
  @@ .

From ossp-cvs-owner@ossp.org  Fri Dec 17 10:52:09 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 55B0D7645D; Fri, 17 Dec 2004 10:52:09 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/svs/ ChangeLog svs.sh
Message-Id: <20041217095209.55B0D7645D@mail.ossp.org>
Date: Fri, 17 Dec 2004 10:52:09 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-Dec-2004 10:52:09
  Branch: HEAD                             Handle: 2004121709520800

  Modified files:
    ossp-pkg/svs            ChangeLog svs.sh

  Log:
    be even more convinient and open .rej file automatically if there is
    one

  Summary:
    Revision    Changes     Path
    1.3         +4  -0      ossp-pkg/svs/ChangeLog
    1.3         +5  -1      ossp-pkg/svs/svs.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ChangeLog
  --- ossp-pkg/svs/ChangeLog	16 Dec 2004 16:39:37 -0000	1.2
  +++ ossp-pkg/svs/ChangeLog	17 Dec 2004 09:52:08 -0000	1.3
  @@ -10,6 +10,10 @@
   
     Changes between 1.0.0 and 1.0.1 (14-Dec-2004 to 16-Dec-2004):
   
  +    *) When editing a file look for corresponding .rej file
  +       and if found and the editor is Vim, open both files. 
  +       [Ralf S. Engelschall]
  +
       *) When searching for *.orig files, sort the resulting filename
          list to make sure we deterministically produce patches.
          [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/svs.sh
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 svs.sh
  --- ossp-pkg/svs/svs.sh	16 Dec 2004 16:39:37 -0000	1.2
  +++ ossp-pkg/svs/svs.sh	17 Dec 2004 09:52:08 -0000	1.3
  @@ -57,7 +57,11 @@
   
               #   edit file
               chmod u+w $file
  -            ${EDITOR-vi} $file
  +            if [ ".${EDITOR-vi}" = .vim -a -f $file.rej ]; then
  +                ${EDITOR-vi} -o2 $file $file.rej
  +            else
  +                ${EDITOR-vi} $file
  +            fi
   
               #   check for editing results
               if cmp $file.orig $file >/dev/null 2>&1; then
  @@ .

From ossp-cvs-owner@ossp.org  Sun Dec 19 20:36:28 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DCE1976460; Sun, 19 Dec 2004 20:36:27 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ ChangeLog README cfg_node.c cfg_vers.c ossp-...
Message-Id: <20041219193627.DCE1976460@mail.ossp.org>
Date: Sun, 19 Dec 2004 20:36:27 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-Dec-2004 20:36:27
  Branch: HEAD                             Handle: 2004121919362502

  Modified files:
    ossp-pkg/cfg            ChangeLog README cfg_node.c cfg_vers.c
    ossp-pkg/cfg/perl       cfg.pm

  Log:
    Fixed cfg_node_get() function after recent introduction
    of LOAN/GIFT/COPY  argument passing semantics. This
    inbreaks the Perl API's unpack() function.

  Summary:
    Revision    Changes     Path
    1.29        +8  -1      ossp-pkg/cfg/ChangeLog
    1.14        +1  -1      ossp-pkg/cfg/README
    1.24        +1  -1      ossp-pkg/cfg/cfg_node.c
    1.12        +9  -9      ossp-pkg/cfg/cfg_vers.c
    1.11        +1  -1      ossp-pkg/cfg/perl/cfg.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	4 Dec 2004 12:48:40 -0000	1.28
  +++ ossp-pkg/cfg/ChangeLog	19 Dec 2004 19:36:25 -0000	1.29
  @@ -8,7 +8,14 @@
   
     CHANGELOG
   
  - Changes between 0.9.5 and 0.9.6 (27-Nov-2004 to xx-Dec-2004):
  + Changes between 0.9.6 and 0.9.7 (04-Dec-2004 to 19-Dec-2004):
  +
  +   *) Fixed cfg_node_get() function after recent introduction
  +      of LOAN/GIFT/COPY  argument passing semantics. This
  +      inbreaks the Perl API's unpack() function.
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
  + Changes between 0.9.5 and 0.9.6 (27-Nov-2004 to 04-Dec-2004):
   
      *) Plug remaining memory leaks by introducing the usual
         LOAN/GIFT/COPY argument passing semantics to cfg_node_{set,get}
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/README
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 README
  --- ossp-pkg/cfg/README	4 Dec 2004 12:54:41 -0000	1.13
  +++ ossp-pkg/cfg/README	19 Dec 2004 19:36:25 -0000	1.14
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \___|_|  \__, |
                                                |___/
     OSSP cfg - Configuration Parsing
  -  Version 0.9.6 (04-Dec-2004)
  +  Version 0.9.7 (19-Dec-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_node.c
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 cfg_node.c
  --- ossp-pkg/cfg/cfg_node.c	4 Dec 2004 12:48:40 -0000	1.23
  +++ ossp-pkg/cfg/cfg_node.c	19 Dec 2004 19:36:25 -0000	1.24
  @@ -253,7 +253,7 @@
   
       /* dispatch into individual attribute handling */
       va_start(ap, attr);
  -    switch (attr) {
  +    switch (attr & ~(CFG_ATTR_LOAN|CFG_ATTR_GIFT|CFG_ATTR_COPY)) {
           case CFG_NODE_ATTR_PARENT: {
               cfg_node_t **n = (cfg_node_t **)va_arg(ap, void *);
               if (n == NULL)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_vers.c
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 cfg_vers.c
  --- ossp-pkg/cfg/cfg_vers.c	4 Dec 2004 12:54:41 -0000	1.11
  +++ ossp-pkg/cfg/cfg_vers.c	19 Dec 2004 19:36:25 -0000	1.12
  @@ -8,7 +8,7 @@
   #ifndef _CFG_VERS_C_
   #define _CFG_VERS_C_
   
  -#define __CFG_VERSION 0x009206
  +#define __CFG_VERSION 0x009207
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _CFG_VERS_C_AS_HEADER_
   
   __cfg_version_t __cfg_version = {
  -    0x009206,
  -    "0.9.6",
  -    "0.9.6 (04-Dec-2004)",
  -    "This is OSSP cfg, Version 0.9.6 (04-Dec-2004)",
  -    "OSSP cfg 0.9.6 (04-Dec-2004)",
  -    "OSSP cfg/0.9.6",
  -    "@(#)OSSP cfg 0.9.6 (04-Dec-2004)",
  -    "$Id: cfg_vers.c,v 1.11 2004/12/04 12:54:41 rse Exp $"
  +    0x009207,
  +    "0.9.7",
  +    "0.9.7 (19-Dec-2004)",
  +    "This is OSSP cfg, Version 0.9.7 (19-Dec-2004)",
  +    "OSSP cfg 0.9.7 (19-Dec-2004)",
  +    "OSSP cfg/0.9.7",
  +    "@(#)OSSP cfg 0.9.7 (19-Dec-2004)",
  +    "$Id: cfg_vers.c,v 1.12 2004/12/19 19:36:25 rse Exp $"
   };
   
   #endif /* _CFG_VERS_C_AS_HEADER_ */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/cfg.pm
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 cfg.pm
  --- ossp-pkg/cfg/perl/cfg.pm	4 Dec 2004 12:54:42 -0000	1.10
  +++ ossp-pkg/cfg/perl/cfg.pm	19 Dec 2004 19:36:27 -0000	1.11
  @@ -42,7 +42,7 @@
   ##
   
   #   API version
  -our $VERSION = do { my @v = ('0.9.6' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
  +our $VERSION = do { my @v = ('0.9.7' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
   
   #   API inheritance
   our @ISA = qw(Exporter);
  @@ .

From ossp-cvs-owner@ossp.org  Sun Dec 19 20:36:46 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B2BFF76475; Sun, 19 Dec 2004 20:36:46 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ cfg_vers.c
Message-Id: <20041219193646.B2BFF76475@mail.ossp.org>
Date: Sun, 19 Dec 2004 20:36:46 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-Dec-2004 20:36:46
  Branch: HEAD                             Handle: 2004121919364600

  Modified files:
    ossp-pkg/cfg            cfg_vers.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.13        +0  -0      ossp-pkg/cfg/cfg_vers.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_vers.c
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 cfg_vers.c
  --- ossp-pkg/cfg/cfg_vers.c	19 Dec 2004 19:36:25 -0000	1.12
  +++ ossp-pkg/cfg/cfg_vers.c	19 Dec 2004 19:36:46 -0000	1.13
  @@ -39,7 +39,7 @@
       "OSSP cfg 0.9.7 (19-Dec-2004)",
       "OSSP cfg/0.9.7",
       "@(#)OSSP cfg 0.9.7 (19-Dec-2004)",
  -    "$Id: cfg_vers.c,v 1.12 2004/12/19 19:36:25 rse Exp $"
  +    "$Id: cfg_vers.c,v 1.13 2004/12/19 19:36:46 rse Exp $"
   };
   
   #endif /* _CFG_VERS_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Sun Dec 19 20:38:27 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 074BD76460; Sun, 19 Dec 2004 20:38:26 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/cfg/ index.wml oss...
Message-Id: <20041219193826.074BD76460@mail.ossp.org>
Date: Sun, 19 Dec 2004 20:38:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   19-Dec-2004 20:38:26
  Branch: HEAD                             Handle: 2004121919382501

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/cfg    index.wml

  Log:
    release OSSP cfg 0.9.7

  Summary:
    Revision    Changes     Path
    1.111       +1  -0      ossp-web/new/news.txt
    1.13        +2  -2      ossp-web/pkg/lib/cfg/index.wml
    1.96        +1  -1      ossp-web/pkg/lib/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.110 -r1.111 news.txt
  --- ossp-web/new/news.txt	14 Dec 2004 19:34:17 -0000	1.110
  +++ ossp-web/new/news.txt	19 Dec 2004 19:38:25 -0000	1.111
  @@ -1,3 +1,4 @@
  +19-Dec-2004: Released L<OSSP cfg> 0.9.7
   14-Dec-2004: Released T<OSSP svs> 1.0.0
   04-Dec-2004: Released L<OSSP cfg> 0.9.6
   03-Dec-2004: Released L<GNU pth> 2.0.3
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/cfg/index.wml
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 index.wml
  --- ossp-web/pkg/lib/cfg/index.wml	4 Dec 2004 12:58:03 -0000	1.12
  +++ ossp-web/pkg/lib/cfg/index.wml	19 Dec 2004 19:38:26 -0000	1.13
  @@ -36,7 +36,7 @@
   <pkg_status
       name="cfg" assign="rse"
       stable="none"    stable_date="none"
  -    unstable="0.9.6" unstable_date="04-Dec-2004"
  +    unstable="0.9.7" unstable_date="19-Dec-2004"
   	done=95>
   
   <h2>Source</h2>
  @@ -46,7 +46,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/cfg/
       directory=$(FTP_ROOT_DIR)/pkg/lib/cfg/
       files="cfg-*.tar.gz" 
  -	stable="none" unstable="cfg-0.9.6.tar.gz">
  +	stable="none" unstable="cfg-0.9.7.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.95 -r1.96 index.wml
  --- ossp-web/pkg/lib/index.wml	4 Dec 2004 12:58:02 -0000	1.95
  +++ ossp-web/pkg/lib/index.wml	19 Dec 2004 19:38:26 -0000	1.96
  @@ -54,7 +54,7 @@
   			done=95 stable=none unstable=0.9.2>
     <pkg_item name="cfg" longname="OSSP cfg" type="lib"
               desc="Configuration Parsing"
  -			done=95 stable=none unstable=0.9.6>
  +			done=95 stable=none unstable=0.9.7>
     <pkg_item name="act" longname="OSSP act" type="lib"
               desc="Abstract Container Types"
   			done=25 stable=none unstable=none>
  @@ .

From ossp-cvs-owner@ossp.org  Thu Dec 23 11:24:03 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 53EEC7645D; Thu, 23 Dec 2004 11:24:03 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/flow2rrd/ flow2rrd.cfg flow2rrd.pl
Message-Id: <20041223102403.53EEC7645D@mail.ossp.org>
Date: Thu, 23 Dec 2004 11:24:03 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Dec-2004 11:24:03
  Branch: HEAD                             Handle: 2004122310240200

  Added files:
    ossp-pkg/flow2rrd       flow2rrd.cfg flow2rrd.pl

  Log:
    add current state of OSSP flow2rrd to CVS (still not finished)

  Summary:
    Revision    Changes     Path
    1.1         +80 -0      ossp-pkg/flow2rrd/flow2rrd.cfg
    1.1         +754 -0     ossp-pkg/flow2rrd/flow2rrd.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/flow2rrd.cfg
  ============================================================================
  $ cvs diff -u -r0 -r1.1 flow2rrd.cfg
  --- /dev/null	2004-12-23 11:24:02 +0100
  +++ flow2rrd.cfg	2004-12-23 11:24:02 +0100
  @@ -0,0 +1,80 @@
  +##
  +##  flow2rrd.cfg -- flow2rrd(1) configuration
  +##
  +
  +#   Round-Robin Database
  +Database /tmp/flow2rrd.rrd;
  +
  +#   Protocol Definitions
  +Protocol icmp     1;
  +Protocol tcp      6;
  +Protocol udp      17;
  +Protocol vrrp     112;
  +
  +#   Service Definitions
  +Service  icmp     icmp:*;
  +Service  vrrp     vrrp:*;
  +Service  ftp      tcp:20 tcp:21;
  +Service  ssh      tcp:22;
  +Service  telnet   tcp:23;
  +Service  smtp     tcp:25;
  +Service  dns      udp:53 tcp:53;
  +Service  tftp     udp:69;
  +Service  http     tcp:80;
  +Service  pop3     tcp:110;
  +Service  sunrpc   udp:111 tcp:111;
  +Service  ident    tcp:113;
  +Service  nntp     tcp:119;
  +Service  ntp      udp:123 tcp:123;
  +Service  imap     tcp:142 tcp:143;
  +Service  snmp     udp:161 udp:162;
  +Service  ldap     tcp:389;
  +Service  https    tcp:443;
  +Service  syslog   udp:514;
  +Service  uucp     tcp:540;
  +Service  nntps    tcp:563;
  +Service  ldaps    tcp:636;
  +Service  rsync    tcp:873;
  +Service  ftps     tcp:989 tcp:990;
  +Service  imaps    tcp:993;
  +Service  pop3s    tcp:995;
  +Service  radius   udp:1645 udp:1646 udp:1812 udp:1813;
  +Service  irc      tcp:194 tcp:6665 tcp:6666 tcp:6667 tcp:6668 tcp:6669;
  +
  +#   Host Definitions
  +Host en2.engelschall.com {
  +    Target en2.engelschall.com {
  +        Network 195.30.6.130/32;
  +        Service icmp vrrp dns ntp ssh smtp;
  +    };
  +    Target visp1.engelschall.com {
  +        Network 195.30.6.140/32 195.30.6.144/32;
  +        Service dns smtp uucp;
  +    };
  +    Target lotmjd1.lotterer.net {
  +        Network 195.30.6.148/32;
  +        Service dns smtp;
  +    };
  +};
  +Host en3.engelschall.com {
  +    Target en3.engelschall.com {
  +        Network 195.30.6.132/32;
  +        Service icmp vrrp dns ntp ssh smtp;
  +    };
  +    Target visp2.engelschall.com {
  +        Network 195.30.6.141/32 195.30.6.145/32;
  +        Service dns smtp uucp;
  +    };
  +    Target lotmjd2.lotterer.net {
  +        Network 195.30.6.149/32;
  +        Service dns smtp;
  +    };
  +};
  +
  +#   Color Themes
  +Colors   colorful 666699 9999cc cc3333;
  +Colors   grey     f0f0f0 -101010(15);
  +Colors   red      cc3333 -101010(3) 000000;
  +Colors   green    ccffcc -333333(3) 000000;
  +Colors   blue     ccccff -333333(3) 000000;
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/flow2rrd.pl
  ============================================================================
  $ cvs diff -u -r0 -r1.1 flow2rrd.pl
  --- /dev/null	2004-12-23 11:24:02 +0100
  +++ flow2rrd.pl	2004-12-23 11:24:03 +0100
  @@ -0,0 +1,754 @@
  +#!/usr/lpkg/bin/perl
  +##
  +##  flow2rrd -- store NetFlow data in Round-Robin Database (RRD)
  +##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com> 
  +##
  +
  +require 5.008;
  +use strict;
  +$|++;
  +
  +#   external requirements
  +use POSIX;             # from OpenPKG "perl"
  +use IO::File;          # from OpenPKG "perl"
  +use Getopt::Long;      # from OpenPKG "perl"
  +use File::Temp;        # from OpenPKG "perl"
  +use Data::Dumper;      # from OpenPKG "perl"
  +use Date::Parse;       # from OpenPKG "perl-time"
  +use Net::Patricia;     # from OpenPKG "perl-net"
  +use String::Divert;    # from OpenPKG "perl-text"
  +use OSSP::cfg;         # from OpenPKG "cfg"       [with_perl=yes]
  +use Cflow qw();        # from OpenPKG "flowtools" [with_perl=yes]
  +use RRDs;              # from OpenPKG "rrdtools"
  +use CGI;               # from OpenPKG "perl-www"
  +
  +#   Data::Dumper configuration
  +$Data::Dumper::Purity = 1;
  +$Data::Dumper::Indent = 1;
  +$Data::Dumper::Terse  = 1;
  +
  +#   fixed program information
  +my $my = {
  +    -progname => 'flow2rrd',
  +    -progvers => '0.1.0',
  +    -progdate => '20-Dec-2004',
  +};
  +
  +#   run-time options
  +my $opt = {
  +    -help     => 0,
  +    -version  => 0,
  +    -verbose  => 0,
  +    -config   => 'flow2rrd.cfg',
  +    -store    => 0,
  +    -graph    => 0,
  +    -cgi      => 0,
  +};
  +
  +#   parse command line options
  +Getopt::Long::Configure("bundling");
  +my %getopt_spec = (
  +    'h|help'     => \$opt->{-help},
  +    'V|version'  => \$opt->{-version},
  +    'v|verbose'  => \$opt->{-verbose},
  +    'c|config=s' => \$opt->{-config},
  +    's|store'    => \$opt->{-store},
  +    'g|graph'    => \$opt->{-graph},
  +    'c|cgi'      => \$opt->{-cgi},
  +);
  +my $result = GetOptions(%getopt_spec)
  +    or die "command line option parsing failed";
  +if ($opt->{help}) {
  +    print "usage: $my->{-progname} [<options>] <hostname>\n" .
  +          "available options are:\n" .
  +          "  -h,--help              print out this usage page\n" .
  +          "  -v,--verbose           enable verbose run-time mode\n" .
  +          "  -V,--version           print program version\n" .
  +          "  -c,--config FILE       read this configuration file only\n" .
  +          "  -s,--store             store NetFlow values into RRD\n" .
  +          "  -g,--graph             produce RRD graphs\n" .
  +          "  -c,--cgi               produce Web user interface\n";
  +    exit(0);
  +}
  +if ($opt->{-version}) {
  +    print "$my->{-progname} $my->{-progvers} ($my->{-progdate})\n";
  +    exit(0);
  +}
  +if (not $opt->{-store} and not $opt->{-graph} and not $opt->{-cgi}) {
  +    die "either --store, --graph or --cgi option has to be given";
  +}
  +if (($opt->{-store} or $opt->{-graph}) and $opt->{-cgi}) {
  +    die "option --cgi cannot be combined with --store or --graph";
  +}
  +
  +#   read configuration file
  +my $io = new IO::File "<$opt->{-config}"
  +    or die "unable to read configuration file \"$opt->{-config}\"";
  +my $txt; { local $/; $txt = <$io>; }
  +$io->close();
  +
  +#   parse configuration files
  +my $cs = new OSSP::cfg::simple;
  +$cs->parse($txt);
  +my $tree = $cs->unpack();
  +undef $cs;
  +
  +#   extract configuration elements
  +my $cfg = {
  +    'Database' => undef,
  +    'Host'     => [],
  +    'Protocol' => {},
  +    'Service'  => {},
  +    'Colors'   => {},
  +};
  +foreach my $dir (@{$tree}) {
  +    if ($dir->[0] eq 'Database') {
  +        die "Database already defined" if (defined($cfg->{'Database'}));
  +        $cfg->{'Database'} = $dir->[1];
  +    }
  +    elsif ($dir->[0] eq 'Protocol') {
  +        die "Protocol \"$dir->[1]\" already defined" if (defined($cfg->{'Protocol'}->{$dir->[1]}));
  +        die "invalid protocol number \"$dir->[2]\"" if ($dir->[2] !~ m|^\d+$|);
  +        $cfg->{'Protocol'}->{$dir->[1]} = $dir->[2];
  +    }
  +    elsif ($dir->[0] eq 'Service') {
  +        die "Service \"$dir->[1]\" already defined" if (defined($cfg->{'Service'}->{$dir->[1]}));
  +        my $s = [];
  +        foreach my $spec (@{$dir}[2..$#{$dir}]) {
  +            if (my ($proto, $port) = ($spec =~ m/^(\S+):(\d+|\*)$/)) {
  +                die "invalid protocol number \"$proto\""
  +                    if (not ($proto =~ m|^\d+$| or defined($cfg->{'Protocol'}->{$proto})));
  +                push(@{$s}, { -proto => $proto, -port => $port});
  +            }
  +            else {
  +                die "invalid service specification \"$spec\"";
  +            }
  +        }
  +        $cfg->{'Service'}->{$dir->[1]} = $s;
  +    }
  +    elsif ($dir->[0] eq 'Host') {
  +        my $h = {
  +            -name   => $dir->[1],
  +            -target => { -order => [] },
  +        };
  +        my $seq = $dir->[2];
  +        foreach my $dir2 (@{$seq}) {
  +            if ($dir2->[0] eq 'Target') {
  +                my $t = { -network => [], -service => [] };
  +                my $seq2 = $dir2->[2];
  +                foreach my $dir3 (@{$seq2}) {
  +                    if ($dir3->[0] eq 'Network') {
  +                        $t->{-network} = [ @{$dir3}[1..$#{$dir3}] ];
  +                    }
  +                    elsif ($dir3->[0] eq 'Service') {
  +                        $t->{-service} = [ @{$dir3}[1..$#{$dir3}] ];
  +                    }
  +                    else {
  +                        die "invalid configuration directive \"$dir3->[0]\"";
  +                    }
  +                }
  +                $h->{-target}->{$dir2->[1]} = $t;
  +                push(@{$h->{-target}->{-order}}, $dir2->[1]);
  +            }
  +            else {
  +                die "invalid configuration directive \"$dir2->[0]\"";
  +            }
  +        }
  +        push(@{$cfg->{'Host'}}, $h);
  +    }
  +    elsif ($dir->[0] eq 'Colors') {
  +        die "Colors \"$dir->[1]\" already defined" if (defined($cfg->{'Colors'}->{$dir->[1]}));
  +        my $c = [];
  +        my $last = 0x000000;
  +        foreach my $spec (@{$dir}[2..$#{$dir}]) {
  +            my $this;
  +            if ($spec =~ m|^[\da-fA-F]{6}$|) {
  +                push(@{$c}, $spec);
  +                $last = $spec;
  +            }
  +            elsif ($spec =~ m|^([-+])([\da-fA-F]{6})(?:\((\d+)\))?$|) {
  +                my ($op, $color, $repeat) = ($1, $2, $3);
  +                $repeat = 1 if (not defined($repeat));
  +                for (my $i = 0; $i < $repeat; $i++) {
  +                    my $this; eval "\$this = sprintf(\"%06x\", (0x$last $op 0x$color) % 0xffffff)";
  +                    push(@{$c}, $this);
  +                    $last = $this;
  +                }
  +            }
  +            else {
  +                die "invalid color specification \"$spec\"";
  +            }
  +        }
  +        $cfg->{'Colors'}->{$dir->[1]} = $c;
  +    }
  +    else {
  +        die "invalid configuration directive \"$dir->[0]\"";
  +    }
  +}
  +#print Data::Dumper->Dump([$cfg]);
  +
  +#   hostname/target/service to 15 chars RRD DS name mapping
  +sub make_rrd_ds_name {
  +    my ($host, $target, $service) = @_;
  +    $host    =~ s|[^a-zA-Z0-9_-]||sg;
  +    $host    = substr($host . ("_"x5), 0, 5); 
  +    $target  =~ s|[^a-zA-Z0-9_-]||sg;
  +    $target  = substr($target . ("_"x5), 0, 5); 
  +    $service =~ s|[^a-zA-Z0-9_-]||sg;
  +    $service = substr($service . ("_"x5), 0, 5); 
  +    my $ds_name = sprintf("%s_%s_%s", $host, $target, $service);
  +    return $ds_name;
  +}
  +
  +##
  +##  ==== OPERATION MODE 1: STORE DATA ====
  +##
  +
  +if ($opt->{-store}) {
  +    my $step = 5*60; # 5 min
  +
  +    #   initialize data
  +    my $ctx = &data_init($cfg);
  +
  +    #   scan flow-tools stream on STDIN for NetFlow records
  +    Cflow::verbose(1);
  +    Cflow::find(sub { &foreach_record($cfg, $ctx) }, "-");
  +    sub foreach_record {
  +        my ($cfg, $ctx) = @_;
  +
  +        #   determine time slot
  +        my $t = $Cflow::endtime;
  +        if (not defined($ctx->{-endtime})) {
  +            #   initial setup, so initialize time slot tracking
  +            $ctx->{-starttime} = int($t / $step) * $step;
  +            $ctx->{-endtime}   = $ctx->{-starttime} + $step;
  +
  +            #   load data
  +            &rrd_load($cfg, $ctx);
  +        }
  +
  +        #   at end of time slot, store accumulated data
  +        if ($t >= $ctx->{-endtime}) {
  +            #   store data
  +            &rrd_store($cfg, $ctx);
  +
  +            #   step one time slot forward
  +            $ctx->{-starttime}  = $ctx->{-endtime};
  +            $ctx->{-endtime}   += $step;
  +        }
  +
  +        #   accumulate data
  +        &data_accumulate($cfg, $ctx);
  +    }
  +    &rrd_store($cfg, $ctx);
  +
  +    #   initialize data tracking context
  +    sub data_init {
  +        my ($cfg) = @_;
  +
  +        #   create tracking context
  +        my $ctx = {
  +            -starttime => 0,
  +            -endtime   => undef,
  +            -track     => {},
  +            -network   => {},
  +        };
  +        foreach my $host (@{$cfg->{'Host'}}) {
  +            foreach my $target (grep { $_ !~ m/^-/ } keys(%{$host->{-target}})) {
  +                my $np = new Net::Patricia;
  +                foreach my $network (@{$host->{-target}->{$target}->{-network}}) {
  +                    $np->add_string($network, 1);
  +                }
  +                $ctx->{-network}->{$host->{-name}.":".$target} = $np; 
  +                foreach my $service (@{$host->{-target}->{$target}->{-service}}) {
  +                    my $ds_name = &make_rrd_ds_name($host->{-name}, $target, $service);
  +                    $ctx->{-track}->{"${ds_name}_i"} = 0;
  +                    $ctx->{-track}->{"${ds_name}_o"} = 0;
  +                }
  +            }
  +        }
  +        return $ctx;
  +    }
  +
  +    #   create RRD file (if still not existing)
  +    sub rrd_create {
  +        my ($cfg, $time) = @_;
  +        return if (-f $cfg->{'Database'});
  +
  +        #   determine RRD data sources (DS)
  +        my @ds = ();
  +        foreach my $host (@{$cfg->{'Host'}}) {
  +            foreach my $target (grep { $_ !~ m/^-/ } keys(%{$host->{-target}})) {
  +                foreach my $service (@{$host->{-target}->{$target}->{-service}}) {
  +                    my $ds_name = &make_rrd_ds_name($host->{-name}, $target, $service);
  +                    push(@ds, "DS:${ds_name}_i:ABSOLUTE:600:0:U");
  +                    push(@ds, "DS:${ds_name}_o:ABSOLUTE:600:0:U");
  +                }
  +            }
  +        }
  +        push(@ds, "DS:UNKNOWN:ABSOLUTE:600:0:U");
  +
  +        #   determine RRD archive (RRA)
  +        my @rra = ();
  +        sub mkrra {
  +            my ($step, $res, $duration) = @_;
  +            my $steps = int($res / $step);
  +            my $rows  = int($duration / $res);
  +            my $rra = sprintf('RRA:LAST:0:%d:%d', $steps, $rows);
  +            push(@rra, $rra);
  +        }
  +        &mkrra($step,     5*60,     7*24*60*60); #  5 min  res. for 1 week
  +        &mkrra($step,    10*60,    14*24*60*60); # 10 min  res. for 2 weeks
  +        &mkrra($step,    30*60,    30*24*60*60); # 30 min  res. for 1 month
  +        &mkrra($step,    60*60,  3*30*24*60*60); #  1 hour res. for 3 months
  +        &mkrra($step,  3*60*60,  6*30*24*60*60); #  3 hour res. for 6 months
  +        &mkrra($step,  6*60*60,   365*24*60*60); #  6 hour res. for 1 year
  +        &mkrra($step, 24*60*60, 4*365*24*60*60); #  1 days res. for 4 year
  +
  +        #   create RRD database
  +        RRDs::create($cfg->{'Database'}, '--start', $time, '--step', $step, @ds, @rra);
  +        my $err = RRDs::error();
  +        die "failed to create RRD file: $err" if (defined($err));
  +    }
  +
  +    #   load already stored accumulated data of current time slot back from RRD
  +    sub rrd_load {
  +        my ($cfg, $ctx) = @_;
  +
  +        #   make sure the RRD is available
  +        &rrd_create($cfg, $Cflow::endtime);
  +
  +        #   load data from RRD
  +        my ($rrd_start, $rrd_step, $rrd_names, $rrd_data) = RRDs::fetch(
  +            $cfg->{'Database'},
  +            'LAST',
  +            '--resolution', $step,
  +            '--start',      $ctx->{-endtime},
  +            '--end',        $ctx->{-endtime}
  +        );
  +        my $err = RRDs::error();
  +        if (not defined($err) and defined($rrd_names) and defined($rrd_data)) {
  +            for (my $i = 0; $i <= $#{$rrd_names}; $i++) {
  +                my $ds_name  = $rrd_names->[$i];
  +                my $ds_value = $rrd_data->[0]->[$i] || 0;
  +                $ctx->{-track}->{$ds_name} = $ds_value;
  +            }
  +        }
  +    }
  +
  +    #   accumulate data
  +    sub data_accumulate {
  +        my ($cfg, $ctx) = @_;
  +
  +        #my $st = POSIX::ctime($Cflow::startime); $st =~ s/\r?\n$//s;
  +        #my $et = POSIX::ctime($Cflow::endtime);  $et =~ s/\r?\n$//s;
  +        #printf(STDERR "%s %15.15s.%-5hu %15.15s.%-5hu %2hu %3u %u\n",
  +        #       $et,
  +        #       $Cflow::srcip, $Cflow::srcport,
  +        #       $Cflow::dstip, $Cflow::dstport,
  +        #       $Cflow::protocol, $Cflow::bytes);
  +
  +        #   iterate over all target and services to see whether
  +        #   the flow matches them...
  +        my $matched_total = 0;
  +        LOOP: foreach my $host (@{$cfg->{'Host'}}) {
  +            foreach my $target (grep { $_ !~ m/^-/ } keys(%{$host->{-target}})) {
  +                my $matched = 0;
  +                my $inbound; $inbound = undef;
  +                my $np = $ctx->{-network}->{$host->{-name}.":".$target};
  +                if ($np->match_string($Cflow::srcip)) { $inbound = 0; }
  +                if ($np->match_string($Cflow::dstip)) { $inbound = 1; }
  +                if (defined($inbound)) {
  +                    foreach my $service (@{$host->{-target}->{$target}->{-service}}) {
  +                        my $services = $cfg->{'Service'}->{$service};
  +                        foreach my $s (@{$services}) {
  +                            my $proto = $cfg->{'Protocol'}->{$s->{-proto}};
  +                            my $port  = $s->{-port};
  +                            if ($Cflow::protocol == $proto) {
  +                                if (   (    $inbound and $Cflow::dstport == $port)
  +                                    or (not $inbound and $Cflow::srcport == $port)) {
  +                                    $matched = 1;
  +                                }
  +                            }
  +                            if ($matched) {
  +                                #   flow matched target/service, so accumulate data
  +                                my $ds_name = &make_rrd_ds_name($host->{-name}, $target, $service);
  +                                if ($inbound) { $ctx->{-track}->{"${ds_name}_i"} += $Cflow::bytes; }
  +                                else          { $ctx->{-track}->{"${ds_name}_o"} += $Cflow::bytes; }
  +                                $matched_total++;
  +                                last LOOP;
  +                            }
  +                        }
  +                    }
  +                }
  +            }
  +        }
  +        if ($matched_total == 0) {
  +            $ctx->{-track}->{"UNKNOWN"} += $Cflow::bytes;
  +        }
  +    }
  +
  +    #   store accumulated data into RRD
  +    sub rrd_store {
  +        my ($cfg, $ctx) = @_;
  +
  +        #   make sure the RRD is available
  +        &rrd_create($cfg, $Cflow::endtime);
  +
  +        #   store data to RRD
  +        my $ds_list = '';
  +        my $dv_list = '';
  +        my $i = 0;
  +        foreach my $ds_name (sort(keys(%{$ctx->{-track}}))) {
  +            #   generate update argument
  +            $ds_list .= ($ds_list ne '' ? ":" : "") . $ds_name;
  +            $dv_list .= ($dv_list ne '' ? ":" : "") . $ctx->{-track}->{$ds_name};
  +            #   reset value
  +            $ctx->{-track}->{$ds_name} = 0;
  +        }
  +        RRDs::update(
  +            $cfg->{'Database'},
  +            '--template', $ds_list,
  +            sprintf("%d", $ctx->{-endtime}).":".$dv_list
  +        );
  +        my $err = RRDs::error();
  +        warn "failed to store data to RRD file: $err" if (defined($err));
  +    }
  +}
  +
  +##
  +##  ==== OPERATION MODE 2: GENERATE GRAPHS ====
  +##
  +
  +if ($opt->{-graph}) {
  +    if (@ARGV == 0) {
  +        die "missing graph specifications";
  +    }
  +    foreach my $spec (@ARGV) {
  +        #   determine graph parameters
  +        $spec =~ m/^(.+)\@(\S+):(\d+):(\d+):([^:]+):([^:]+):([^:]+):([^:]+)$/
  +            or die "invalid graph specification \"$spec\" (expect <content>:<file>:<width>:<height>:<start>:<end>:<ulimit>:<llimit>)";
  +        my ($content, $img_file, $img_width, $img_height)           = ($1, $2, $3, $4);
  +        my ($graph_start, $graph_end, $graph_ulimit, $graph_llimit) = ($5, $6, $7, $8);
  +
  +        #   post-process parameters
  +        my $img_format = ($img_file =~ m|\.png$| ? "PNG" : "GIF");
  +        sub cv_time {
  +            my ($t) = @_;
  +            if ($t =~ m|^now(.*)$|) {
  +                $t = time() + &cv_time($1);
  +            }
  +            elsif ($t =~ m|^([-+])(.+)$|) {
  +                $t = &cv_time($2);
  +                eval "\$t = $1 \$t";
  +            }
  +            elsif ($t =~ m|(\d{2})-([A-Za-z]{3})-(\d{4})|) {
  +                $t = str2time($t);
  +            }
  +            elsif ($t =~ m|^(\d+)([smhdwMY])$|) {
  +                $t = $1;
  +                if    ($2 eq 's') { $t *=            1; }
  +                elsif ($2 eq 'm') { $t *=           60; }
  +                elsif ($2 eq 'h') { $t *=        60*60; }
  +                elsif ($2 eq 'd') { $t *=     24*60*60; }
  +                elsif ($2 eq 'w') { $t *=   7*24*60*60; }
  +                elsif ($2 eq 'M') { $t *=  30*24*60*60; }
  +                elsif ($2 eq 'Y') { $t *= 365*24*60*60; }
  +            }
  +            else {
  +                $t = 0;
  +            }
  +            return $t;
  +        }
  +        if ($graph_start =~ m/^\-(.+)/) {
  +            $graph_end   = &cv_time($graph_end);
  +            $graph_start = $graph_end - &cv_time($1);
  +        }
  +        elsif ($graph_end =~ m/^\+(.+)/) {
  +            $graph_start = &cv_time($graph_start);
  +            $graph_end   = $graph_start + &cv_time($1);
  +        }
  +        else {
  +            $graph_start = &cv_time($graph_start);
  +            $graph_end   = &cv_time($graph_end);
  +        }
  +        sub cv_limit {
  +            my ($l) = @_;
  +            if ($l eq '') {
  +                $l = 0;
  +            }
  +            elsif ($l =~ m|^([-+])(.*)$|) {
  +                $l = &cv_limit($2);
  +                eval "\$l = $1 \$l";
  +            }
  +            elsif ($l =~ m|^(\d+)([KMGT])$|) {
  +                $l = $1;
  +                if ($2 eq 'K') { $l *=                1024; }
  +                if ($2 eq 'M') { $l *=           1024*1024; }
  +                if ($2 eq 'G') { $l *=      1024*1024*1024; }
  +                if ($2 eq 'T') { $l *= 1024*1024*1024*1024; }
  +            }
  +            return $l;
  +        }
  +        $graph_ulimit = &cv_limit($graph_ulimit);
  +        $graph_llimit = &cv_limit($graph_llimit);
  +
  +        my $graph = {
  +            -img_file     => $img_file,
  +            -img_format   => $img_format,
  +            -img_width    => $img_width,
  +            -img_height   => $img_height,
  +            -graph_start  => $graph_start,
  +            -graph_end    => $graph_end,
  +            -graph_ulimit => $graph_ulimit,
  +            -graph_llimit => $graph_llimit,
  +        };
  +
  +        if ($content =~ m|^(\S+):(\S+)$|) {
  +            &make_graph_target($graph, $1, $2);
  +        }
  +        else {
  +            &make_graph_host($graph, $content);
  +        }
  +
  +        #   generate graph for a host
  +        sub make_graph_host {
  +            my ($graph, $hostname) = @_;
  +
  +            #   find host configuration record
  +            my $host; $host = undef;
  +            foreach my $h (@{$cfg->{'Host'}}) {
  +                if ($h->{-name} eq $hostname) {
  +                    $host = $h;
  +                    last;
  +                }
  +            }
  +            if (not defined($host)) {
  +                die "host \"$hostname\" not found";
  +            }
  +
  +            my $colors = $cfg->{'Colors'}->{'colorful'}; # FIXME
  +            my @def  = ();
  +            my @cdef = ();
  +            my @draw_o = ();
  +            my @draw_i = ();
  +            my $i = 0;
  +            #   FIXME: UNKNOWN data?
  +            foreach my $target (@{$host->{-target}->{-order}}) {
  +                my $cdef_i = '';
  +                my $cdef_o = '';
  +                foreach my $service (@{$host->{-target}->{$target}->{-service}}) {
  +                    my $ds_name = &make_rrd_ds_name($host->{-name}, $target, $service);
  +                    push(@def, sprintf("DEF:%s_o=%s:%s_o:LAST", $ds_name, $cfg->{'Database'}, $ds_name));
  +                    push(@def, sprintf("DEF:%s_i=%s:%s_i:LAST", $ds_name, $cfg->{'Database'}, $ds_name));
  +                    $cdef_o = ($cdef_o eq '' ? "${ds_name}_o" : "${ds_name}_o,$cdef_o,+");
  +                    $cdef_i = ($cdef_i eq '' ? "${ds_name}_i" : "${ds_name}_i,$cdef_i,+");
  +                }
  +                $cdef_o .= ",8,*";
  +                $cdef_i .= ",8,*";
  +                $cdef_i .= ",-1,*";
  +                push(@cdef, sprintf("CDEF:data%d_o=%s", $i, $cdef_o));
  +                push(@cdef, sprintf("CDEF:data%d_i=%s", $i, $cdef_i));
  +                my $color_o; eval "\$color_o = 0x".$colors->[$i];
  +                my $color_i; eval "\$color_i = \$color_o - 0x404040";
  +                push(@draw_o, sprintf("%s:data%d_o#%06x:%s out", ($i == 0 ? "AREA" : "STACK"), $i, $color_o, $target));
  +                push(@draw_i, sprintf("%s:data%d_i#%06x:%s in",  ($i == 0 ? "AREA" : "STACK"), $i, $color_i, $target));
  +                $i++;
  +            }
  +            my @draw = (@draw_o, "COMMENT:\n", @draw_i, "HRULE:0#000000");
  +            my @args = ();
  +            push(@args, $graph->{-img_file});
  +            push(@args, '--imgformat',      $graph->{-img_format});
  +            push(@args, '--width',          $graph->{-img_width});
  +            push(@args, '--height',         $graph->{-img_height});
  +            push(@args, '--start',          $graph->{-graph_start});
  +            push(@args, '--end',            $graph->{-graph_end});
  +            push(@args, '--upper-limit',    $graph->{-graph_ulimit}) if ($graph->{-graph_ulimit} != 0);
  +            push(@args, '--lower-limit',    $graph->{-graph_llimit}) if ($graph->{-graph_llimit} != 0);
  +            push(@args, '--rigid');
  +            push(@args, '--alt-autoscale',);
  +            push(@args, '--base',           1024);
  +            push(@args, '--x-grid',         "HOUR:1:DAY:1:DAY:1:0:%d-%b-%Y");
  +            push(@args, '--vertical-label', 'Bit/s');
  +            push(@args, '--color',          'CANVAS#ffffff');
  +            push(@args, '--color',          'BACK#e0e0e0');
  +            push(@args, '--color',          'SHADEA#f8f8f8');
  +            push(@args, '--color',          'SHADEB#999999');
  +            push(@args, '--color',          'GRID#cccccc');
  +            push(@args, '--color',          'MGRID#000000');
  +            push(@args, '--color',          'FONT#000000');
  +            push(@args, '--color',          'FRAME#000000');
  +            push(@args, '--color',          'ARROW#000000');
  +            push(@args, '--title',          sprintf("Host %s (+out/-in)", $host->{-name}));
  +            push(@args, @def);
  +            push(@args, @cdef);
  +            push(@args, @draw);
  +            print STDERR join(" ", @args)."\n";
  +            my ($rrd_averages, $rrd_xsize, $rrd_ysize) = RRDs::graph(@args);
  +            my $err = RRDs::error();
  +            die "failed to generate graph from RRD file: $err" if (defined($err));
  +        }
  +
  +        #   generate graph for a target
  +        sub make_graph_target {
  +            my ($graph, $hostname, $targetname) = @_;
  +
  +            #   find host configuration record
  +            my $host; $host = undef;
  +            foreach my $h (@{$cfg->{'Host'}}) {
  +                if ($h->{-name} eq $hostname) {
  +                    $host = $h;
  +                    last;
  +                }
  +            }
  +            if (not defined($host)) {
  +                die "host \"$hostname\" not found";
  +            }
  +
  +            #   find target configuration record
  +            my $target; $target = undef;
  +            foreach my $t (@{$host->{-target}->{-order}}) {
  +                if ($t eq $targetname) {
  +                    $target = $t;
  +                    last;
  +                }
  +            }
  +            if (not defined($target)) {
  +                die "target \"$targetname\" not found";
  +            }
  +
  +            my $colors = $cfg->{'Colors'}->{'colorful'}; # FIXME
  +            my @def  = ();
  +            my @cdef = ();
  +            my @draw_o = ();
  +            my @draw_i = ();
  +            my $i = 0;
  +            foreach my $service (@{$host->{-target}->{$target}->{-service}}) {
  +                my $ds_name = &make_rrd_ds_name($host->{-name}, $target, $service);
  +                push(@def,    sprintf("DEF:%s_o=%s:%s_o:LAST", $ds_name, $cfg->{'Database'}, $ds_name));
  +                push(@def,    sprintf("DEF:%s_i=%s:%s_i:LAST", $ds_name, $cfg->{'Database'}, $ds_name));
  +                push(@cdef,   sprintf("CDEF:data%d_o=%s_o,8,*,+1,*", $i, $ds_name));
  +                push(@cdef,   sprintf("CDEF:data%d_i=%s_i,8,*,-1,*", $i, $ds_name));
  +                my $color_o; eval "\$color_o = 0x".$colors->[$i];
  +                my $color_i; eval "\$color_i = \$color_o - 0x404040";
  +                push(@draw_o, sprintf("%s:data%d_o#%06x:%s out", ($i == 0 ? "AREA" : "STACK"), $i, $color_o, $service));
  +                push(@draw_i, sprintf("%s:data%d_i#%06x:%s in",  ($i == 0 ? "AREA" : "STACK"), $i, $color_i, $service));
  +                $i++;
  +            }
  +            my @draw = (@draw_o, "COMMENT:\n", @draw_i, "HRULE:0#000000");
  +            my @args = ();
  +            push(@args, $graph->{-img_file});
  +            push(@args, '--imgformat',      $graph->{-img_format});
  +            push(@args, '--width',          $graph->{-img_width});
  +            push(@args, '--height',         $graph->{-img_height});
  +            push(@args, '--start',          $graph->{-graph_start});
  +            push(@args, '--end',            $graph->{-graph_end});
  +            push(@args, '--upper-limit',    $graph->{-graph_ulimit}) if ($graph->{-graph_ulimit} != 0);
  +            push(@args, '--lower-limit',    $graph->{-graph_llimit}) if ($graph->{-graph_llimit} != 0);
  +            push(@args, '--rigid');
  +            push(@args, '--alt-autoscale',);
  +            push(@args, '--base',           1024);
  +            push(@args, '--x-grid',         "HOUR:1:DAY:1:DAY:1:0:%d-%b-%Y");
  +            push(@args, '--vertical-label', 'Bit/s');
  +            push(@args, '--color',          'CANVAS#ffffff');
  +            push(@args, '--color',          'BACK#e0e0e0');
  +            push(@args, '--color',          'SHADEA#f8f8f8');
  +            push(@args, '--color',          'SHADEB#999999');
  +            push(@args, '--color',          'GRID#cccccc');
  +            push(@args, '--color',          'MGRID#000000');
  +            push(@args, '--color',          'FONT#000000');
  +            push(@args, '--color',          'FRAME#000000');
  +            push(@args, '--color',          'ARROW#000000');
  +            push(@args, '--title',          sprintf("Target %s on Host %s (+out/-in)", $target, $host->{-name}));
  +            push(@args, @def);
  +            push(@args, @cdef);
  +            push(@args, @draw);
  +            print STDERR join(" ", @args)."\n";
  +            my ($rrd_averages, $rrd_xsize, $rrd_ysize) = RRDs::graph(@args);
  +            my $err = RRDs::error();
  +            die "failed to generate graph from RRD file: $err" if (defined($err));
  +        }
  +    }
  +}
  +
  +##
  +##  ==== OPERATION MODE 3: GENERATE WEB USER INTERFACE ====
  +##
  +
  +if ($opt->{-cgi}) {
  +    my $cgi = new CGI;
  +
  +    if (defined(my $graph = $cgi->param("graph"))) {
  +        #
  +        #   output graph image
  +        #
  +
  +        #   prepare graph generation
  +        my (undef, $tmpfile) = mkstemp(($ENV{'TMPDIR'} || '/tmp') . "/flow2rrd.tmp");
  +        $graph =~ s|\@|\@$tmpfile|s;
  +
  +        #   generate graph image
  +        my $rc = system("$0 --graph $graph");
  +        if ($rc != 0 or not -s $tmpfile) {
  +            die "failed to generate graph image";
  +        }
  +
  +        #   read graph image
  +        my $io = new IO::File "<$tmpfile" or die "cannot read graph";
  +        my $data; { local $/; $data = <$io>; }
  +        $io->close();
  +
  +        #   send out graph image
  +        print STDOUT $cgi->header(
  +            -type => 'image/png',
  +            -content_length => length($data),
  +            -expires => '+5m'
  +        ) . $data;
  +
  +        #   cleanup
  +        unlink($tmpfile)
  +    }
  +    else {
  +        #
  +        #   output HTML page
  +        #
  +
  +        #   generate HTML page
  +        my $html = new String::Divert;
  +        $html->overload(1);
  +        $html .= "<html>\n" .
  +                "  <head>\n" .
  +                "    " . $html->folder("head") .
  +                "  </head>\n" .
  +                "  <body>\n" .
  +                "    " . $html->folder("body") .
  +                "  </body>\n" .
  +                "</html>\n";
  +        $html >> "body";
  +        $html .= "foo\n";
  +        $html << 1;
  +        $html->undivert(0);
  +
  +        #   FIXME
  +
  +        #   send out page
  +        print STDOUT $cgi->header(
  +            -type => 'text/html',
  +            -content_length => length($html),
  +            -expires => '+5m'
  +        ) . $html;
  +
  +        #   cleanup
  +        undef $html;
  +    }
  +
  +    # width
  +    # height
  +    # start-time
  +    # end-time
  +    # upper-limit
  +    # lower-limit
  +}
  +
  +exit(0);
  +
  @@ .

From ossp-cvs-owner@ossp.org  Thu Dec 23 20:17:27 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id ADFD17655D; Thu, 23 Dec 2004 20:17:26 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/flow2rrd/ flow2rrd.cgi
Message-Id: <20041223191726.ADFD17655D@mail.ossp.org>
Date: Thu, 23 Dec 2004 20:17:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Dec-2004 20:17:26
  Branch: HEAD                             Handle: 2004122319172600

  Added files:
    ossp-pkg/flow2rrd       flow2rrd.cgi

  Log:
    add the CGI wrapper script

  Summary:
    Revision    Changes     Path
    1.1         +2  -0      ossp-pkg/flow2rrd/flow2rrd.cgi
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/flow2rrd.cgi
  ============================================================================
  $ cvs diff -u -r0 -r1.1 flow2rrd.cgi
  --- /dev/null	2004-12-23 20:17:26 +0100
  +++ flow2rrd.cgi	2004-12-23 20:17:26 +0100
  @@ -0,0 +1,2 @@
  +#!/bin/sh
  +exec ./flow2rrd.pl --cgi
  @@ .

From ossp-cvs-owner@ossp.org  Thu Dec 23 22:08:33 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BCAC576562; Thu, 23 Dec 2004 22:08:32 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/flow2rrd/ flow2rrd.cfg flow2rrd.pl
Message-Id: <20041223210832.BCAC576562@mail.ossp.org>
Date: Thu, 23 Dec 2004 22:08:32 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Dec-2004 22:08:32
  Branch: HEAD                             Handle: 2004122321083200

  Modified files:
    ossp-pkg/flow2rrd       flow2rrd.cfg flow2rrd.pl

  Log:
    flush my work of this evening: mainly the Web user interface is now
    functional

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/flow2rrd/flow2rrd.cfg
    1.2         +339 -30    ossp-pkg/flow2rrd/flow2rrd.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/flow2rrd.cfg
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 flow2rrd.cfg
  --- ossp-pkg/flow2rrd/flow2rrd.cfg	23 Dec 2004 10:24:02 -0000	1.1
  +++ ossp-pkg/flow2rrd/flow2rrd.cfg	23 Dec 2004 21:08:32 -0000	1.2
  @@ -3,7 +3,7 @@
   ##
   
   #   Round-Robin Database
  -Database /tmp/flow2rrd.rrd;
  +Database /var/tmp/flow2rrd.rrd;
   
   #   Protocol Definitions
   Protocol icmp     1;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/flow2rrd.pl
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 flow2rrd.pl
  --- ossp-pkg/flow2rrd/flow2rrd.pl	23 Dec 2004 10:24:02 -0000	1.1
  +++ ossp-pkg/flow2rrd/flow2rrd.pl	23 Dec 2004 21:08:32 -0000	1.2
  @@ -1,4 +1,4 @@
  -#!/usr/lpkg/bin/perl
  +#!/usr/opkg/bin/perl
   ##
   ##  flow2rrd -- store NetFlow data in Round-Robin Database (RRD)
   ##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com> 
  @@ -29,7 +29,8 @@
   
   #   fixed program information
   my $my = {
  -    -progname => 'flow2rrd',
  +    -progname => 'OSSP flow2rrd',
  +    -proghome => 'http://www.ossp.org/pkg/tool/flow2rrd/',
       -progvers => '0.1.0',
       -progdate => '20-Dec-2004',
   };
  @@ -570,10 +571,10 @@
               push(@args, '--base',           1024);
               push(@args, '--x-grid',         "HOUR:1:DAY:1:DAY:1:0:%d-%b-%Y");
               push(@args, '--vertical-label', 'Bit/s');
  -            push(@args, '--color',          'CANVAS#ffffff');
  -            push(@args, '--color',          'BACK#e0e0e0');
  -            push(@args, '--color',          'SHADEA#f8f8f8');
  -            push(@args, '--color',          'SHADEB#999999');
  +            push(@args, '--color',          'CANVAS#f0f0ff');
  +            push(@args, '--color',          'BACK#e0e0f0');
  +            push(@args, '--color',          'SHADEA#e5e5f5');
  +            push(@args, '--color',          'SHADEB#d0d0e0');
               push(@args, '--color',          'GRID#cccccc');
               push(@args, '--color',          'MGRID#000000');
               push(@args, '--color',          'FONT#000000');
  @@ -583,7 +584,6 @@
               push(@args, @def);
               push(@args, @cdef);
               push(@args, @draw);
  -            print STDERR join(" ", @args)."\n";
               my ($rrd_averages, $rrd_xsize, $rrd_ysize) = RRDs::graph(@args);
               my $err = RRDs::error();
               die "failed to generate graph from RRD file: $err" if (defined($err));
  @@ -650,10 +650,10 @@
               push(@args, '--base',           1024);
               push(@args, '--x-grid',         "HOUR:1:DAY:1:DAY:1:0:%d-%b-%Y");
               push(@args, '--vertical-label', 'Bit/s');
  -            push(@args, '--color',          'CANVAS#ffffff');
  -            push(@args, '--color',          'BACK#e0e0e0');
  -            push(@args, '--color',          'SHADEA#f8f8f8');
  -            push(@args, '--color',          'SHADEB#999999');
  +            push(@args, '--color',          'CANVAS#f0f0ff');
  +            push(@args, '--color',          'BACK#e0e0f0');
  +            push(@args, '--color',          'SHADEA#e5e5f5');
  +            push(@args, '--color',          'SHADEB#d0d0e0');
               push(@args, '--color',          'GRID#cccccc');
               push(@args, '--color',          'MGRID#000000');
               push(@args, '--color',          'FONT#000000');
  @@ -663,7 +663,6 @@
               push(@args, @def);
               push(@args, @cdef);
               push(@args, @draw);
  -            print STDERR join(" ", @args)."\n";
               my ($rrd_averages, $rrd_xsize, $rrd_ysize) = RRDs::graph(@args);
               my $err = RRDs::error();
               die "failed to generate graph from RRD file: $err" if (defined($err));
  @@ -678,19 +677,117 @@
   if ($opt->{-cgi}) {
       my $cgi = new CGI;
   
  -    if (defined(my $graph = $cgi->param("graph"))) {
  +    #   error handler
  +    $SIG{__DIE__} = sub {
  +        my ($msg) = @_;
  +        my $hint = '';
  +        if ($msg =~ m|line\s+(\d+)|) {
  +            my $line = $1;
  +            my $io = new IO::File "<$0";
  +            my @code = $io->getlines();
  +            $io->close(); 
  +            my $i = -1;
  +            $hint = join("", map { s/^/sprintf("%d: ", $line+$i++)/se; $_; } @code[$line-2..$line]);
  +        }
  +        print STDOUT 
  +            "Content-Type: text/html; charset=ISO-8859-1\n" .
  +            "\n" .
  +            "<html>\n" .
  +            "  <head>\n" .
  +            "    <title>OSSP flow2rrd: ERROR</title>\n" .
  +            "  </head>\n" .
  +            "  <body>\n" .
  +            "    <h1>OSSP flow2rrd: ERROR</h1>\n" .
  +            "    <p>\n" .
  +            "    <tt>\n" .
  +            "      $msg<br>\n" .
  +            "    </tt>\n" .
  +            "    <pre>\n$hint</pre>\n" .
  +            "  </body>\n" .
  +            "</html>\n";
  +        exit(0);
  +    };
  +
  +    if (defined($cgi->param("css"))) {
  +        #
  +        #   output Cascading Style Sheet (CSS)
  +        #
  +
  +        my $css = q{
  +            body {
  +                background:      #c0c0c0;
  +                color:           #ffffff;
  +                font-family:     helvetica,arial,tahoma,verdana,sans-serif;
  +            }
  +            TABLE.flow2rrd {
  +                background:      #000000;
  +                border:          2px solid #000000;
  +            }
  +            TABLE.flow2rrd TD.header {
  +                color:           #ffffff;
  +                font-family:     tahoma,helvetica,arial,tahoma,verdana,sans-serif;
  +                font-weight:     bold;
  +                font-size:       200%;
  +                padding:         4px;
  +                text-align:      center;
  +            }
  +            TABLE.flow2rrd TD.header A {
  +                text-decoration: none;
  +                color:           #ffffff;
  +            }
  +            TABLE.flow2rrd TD.footer {
  +                color:           #ffffff;
  +                font-family:     tahoma,helvetica,arial,tahoma,verdana,sans-serif;
  +                padding:         4px;
  +                text-align:      center;
  +            }
  +            TABLE.flow2rrd TD.footer A {
  +                text-decoration: none;
  +                font-weight:     bold;
  +                color:           #ffffff;
  +            }
  +            TABLE.flow2rrd TABLE.explore TD.toolbar {
  +                background:      #333333;
  +                padding:         10px;
  +            }
  +            TABLE.flow2rrd TABLE.explore TD.toolbar INPUT.textfield {
  +                background:      #333333;
  +                color:           #ffffff;
  +                border:          0px;
  +                border-bottom:   1px solid #999999;
  +            }
  +            TABLE.flow2rrd TABLE.explore TD.toolbar INPUT.submit {
  +                background:      #666666;
  +                color:           #ffffff;
  +                margin-top:      10px;
  +                border:          1px solid #999999;
  +                font-weight:     bold;
  +                width:           100%;
  +            }
  +        };
  +
  +        #   send out page
  +        $css =~ s|^            ||mg;
  +        print STDOUT $cgi->header(
  +            -type => 'text/css',
  +            -content_length => length($css),
  +            -expires => '+5m'
  +        ) . $css;
  +    }
  +    elsif (defined(my $graph = $cgi->param("graph"))) {
           #
           #   output graph image
           #
   
           #   prepare graph generation
  -        my (undef, $tmpfile) = mkstemp(($ENV{'TMPDIR'} || '/tmp') . "/flow2rrd.tmp");
  -        $graph =~ s|\@|\@$tmpfile|s;
  +        my (undef, $tmpfile) = mkstemp(($ENV{'TMPDIR'} || '/tmp') . "/flow2rrd.XXXXXX");
  +        $graph =~ s|\@|\@$tmpfile:|s;
   
           #   generate graph image
  +        #die "$0 --graph $graph";
           my $rc = system("$0 --graph $graph");
  -        if ($rc != 0 or not -s $tmpfile) {
  -            die "failed to generate graph image";
  +        if ($rc != 0) { # or not -s $tmpfile) {
  +            die "failed to generate graph image: $!";
           }
   
           #   read graph image
  @@ -708,30 +805,242 @@
           #   cleanup
           unlink($tmpfile)
       }
  -    else {
  +    elsif (defined(my $explore = $cgi->param("explore"))) {
           #
  -        #   output HTML page
  +        #   output HTML page: EXPLORE A GRAPH
           #
   
  -        #   generate HTML page
  +        #   generate HTML page diversion
           my $html = new String::Divert;
           $html->overload(1);
  -        $html .= "<html>\n" .
  -                "  <head>\n" .
  -                "    " . $html->folder("head") .
  -                "  </head>\n" .
  -                "  <body>\n" .
  -                "    " . $html->folder("body") .
  -                "  </body>\n" .
  -                "</html>\n";
  +
  +        $html .=
  +            "<html>\n" .
  +            "  <head>\n" .
  +            "    " . $html->folder("head") .
  +            "  </head>\n" .
  +            "  <body>\n" .
  +            "    " . $html->folder("body") .
  +            "  </body>\n" .
  +            "</html>\n";
  +
  +        $html >> "head";
  +        $html .= "<link rel=\"stylesheet\" type=\"text/css\" href=\"".$cgi->url(-relative => 1)."?css=1\">\n";
  +        $html << 1;
  +
           $html >> "body";
  -        $html .= "foo\n";
  +        $html .= "<table class=\"flow2rrd\" border=0 cellpadding=0 cellspacing=0>\n";
  +        $html .= "  <tr>\n";
  +        $html .= "    <td class=\"header\">\n";
  +        $html .= "      " . $html->folder("header");
  +        $html .= "    </td>\n";
  +        $html .= "  <tr>\n";
  +        $html .= "  </tr>\n";
  +        $html .= "    <td class=\"canvas\">\n";
  +        $html .= "      " . $html->folder("canvas");
  +        $html .= "    </td>\n";
  +        $html .= "  <tr>\n";
  +        $html .= "  </tr>\n";
  +        $html .= "    <td class=\"footer\">\n";
  +        $html .= "      " . $html->folder("footer");
  +        $html .= "    </td>\n";
  +        $html .= "  </tr>\n";
  +        $html .= "</table>\n";
           $html << 1;
  +
  +        $html >> "header";
  +        $html .= "<a href=\"".$cgi->url(-relative => 1)."\">Real-Time Network Statistics</a>";
  +        $html << 1;
  +        $html >> "footer";
  +        $html .= "<a href=\"$my->{-proghome}\">$my->{-progname}</a> $my->{-progvers} ($my->{-progdate})";
  +        $html << 1;
  +
  +        my $width  = ($cgi->param("width")  || "800");
  +        my $height = ($cgi->param("height") || "200");
  +        my $start  = ($cgi->param("start")  || "-48h");
  +        my $end    = ($cgi->param("end")    || "now");
  +        my $ulimit = ($cgi->param("ulimit") || "0");
  +        my $llimit = ($cgi->param("llimit") || "0");
  +
  +        $html >> "canvas";
  +        $html .= $cgi->start_form(
  +            -method  => "POST",
  +            -action  => $cgi->url(-relative => 1) . "?explore=$explore",
  +            -enctype => "application/x-www-form-urlencoded"
  +        );
  +        $html .= $cgi->hidden(-name => "explore", -default => $cgi->url(-relative => 1) . "?explore=$explore")."\n";
  +        $html .= "<table class=\"explore\" border=0 cellspacing=0 cellpadding=0>\n";
  +        $html .= "  <tr>\n";
  +        $html .= "    <td class=\"view\">\n";
  +        $html .= "      " . $html->folder("view");
  +        $html .= "    </td>\n";
  +        $html .= "  </tr>\n";
  +        $html .= "  <tr>\n";
  +        $html .= "    <td class=\"toolbar\">\n";
  +        $html .= "      " . $html->folder("toolbar");
  +        $html .= "    </td>\n";
  +        $html .= "  </tr>\n";
  +        $html .= "</table>\n";
  +        $html .= $cgi->end_form();
  +        $html << 1;
  +
  +        my $img = $cgi->url(-relative => 1) . "?graph=$explore\@$width:$height:$start:$end:$ulimit:$llimit";
  +        $html >> "view";
  +        $html .= "<img src=\"$img\">\n";
  +        $html << 1;
  +
  +        $html >> "toolbar";
  +        $html .= "<table>\n";
  +
  +        $html .= "<tr><td>Graph Size:</td><td>" . $cgi->textfield(
  +            -name      => 'width',
  +            -default   => $width,
  +            -size      => 15,
  +            -maxlength => 4,
  +            -class     => 'textfield',
  +        ) . "</td><td>x</td><td>" . $cgi->textfield(
  +            -name      => 'height',
  +            -default   => $height,
  +            -size      => 15,
  +            -maxlength => 4,
  +            -class     => 'textfield',
  +        ) . "</td><td>(pixels)</td><td>Examples: '400 x 100', '800 x 200', ...</td></tr>"; 
  +
  +        $html .= "<tr><td>Data X-Range:</td><td>" . $cgi->textfield(
  +            -name      => 'start',
  +            -default   => $start,
  +            -size      => 15,
  +            -maxlength => 20,
  +            -class     => 'textfield',
  +        ) . "</td><td>-</td><td>" . $cgi->textfield(
  +            -name      => 'end',
  +            -default   => $end,
  +            -size      => 15,
  +            -maxlength => 20,
  +            -class     => 'textfield',
  +        ) . "</td><td>(time)</td><td>Examples: '-2d - now', '24-Dec-2004 - +48h', ...</td></tr>"; 
  +
  +        $html .= "<tr><td>Data Y-Range:</td><td>" . $cgi->textfield(
  +            -name      => 'ulimit',
  +            -default   => $ulimit,
  +            -size      => 15,
  +            -maxlength => 10,
  +            -class     => 'textfield',
  +        ) . "</td><td>-</td><td>" . $cgi->textfield(
  +            -name      => 'llimit',
  +            -default   => $llimit,
  +            -size      => 15,
  +            -maxlength => 10,
  +            -class     => 'textfield',
  +        ) . "</td><td>(Bit/s)</td><td>Examples: '2K - -1K', '4M - 2M', ...</td></tr>"; 
  +
  +        $html .= "  <tr>\n";
  +        $html .= "    <td colspan=4>". $cgi->submit(-name => "Update Graph", -class => "submit") . "</td>\n";
  +        $html .= "  </tr>\n";
  +
  +        $html .= "</table>\n";
  +        $html << 1;
  +
  +
  +        #   send out page
           $html->undivert(0);
  +        print STDOUT $cgi->header(
  +            -type => 'text/html',
  +            -content_length => length($html),
  +            -expires => '+5m'
  +        ) . $html;
  +
  +        #   cleanup
  +        undef $html;
  +    }
  +    else {
  +        #
  +        #   output HTML page: TOP-LEVEL SUMMARY
  +        #
   
  -        #   FIXME
  +        #   generate HTML page diversion
  +        my $html = new String::Divert;
  +        $html->overload(1);
  +
  +        $html .=
  +            "<html>\n" .
  +            "  <head>\n" .
  +            "    " . $html->folder("head") .
  +            "  </head>\n" .
  +            "  <body>\n" .
  +            "    " . $html->folder("body") .
  +            "  </body>\n" .
  +            "</html>\n";
  +
  +        $html >> "head";
  +        $html .= "<link rel=\"stylesheet\" type=\"text/css\" href=\"".$cgi->url(-relative => 1)."?css=1\">\n";
  +        $html << 1;
  +
  +        $html >> "body";
  +        $html .= "<table class=\"flow2rrd\" border=0 cellpadding=0 cellspacing=0>\n";
  +        $html .= "  <tr>\n";
  +        $html .= "    <td class=\"header\">\n";
  +        $html .= "      " . $html->folder("header");
  +        $html .= "    </td>\n";
  +        $html .= "  <tr>\n";
  +        $html .= "  </tr>\n";
  +        $html .= "    <td class=\"canvas\">\n";
  +        $html .= "      " . $html->folder("canvas");
  +        $html .= "    </td>\n";
  +        $html .= "  <tr>\n";
  +        $html .= "  </tr>\n";
  +        $html .= "    <td class=\"footer\">\n";
  +        $html .= "      " . $html->folder("footer");
  +        $html .= "    </td>\n";
  +        $html .= "  </tr>\n";
  +        $html .= "</table>\n";
  +        $html << 1;
  +
  +        $html >> "header";
  +        $html .= "<a href=\"".$cgi->url(-relative => 1)."\">Real-Time Network Statistics</a>";
  +        $html << 1;
  +        $html >> "footer";
  +        $html .= "<a href=\"$my->{-proghome}\">$my->{-progname}</a> $my->{-progvers} ($my->{-progdate})";
  +        $html << 1;
  +
  +        $html >> "canvas";
  +        $html .= "<table border=0 cellpadding=0 cellspacing=0>\n";
  +        $html .= "  <tr>\n";
  +        for (my $i = 0; $i < @{$cfg->{'Host'}}; $i++) {
  +            $html .= "    <td>\n";
  +            $html .= "      " . $html->folder("col$i");
  +            $html .= "    </td>\n";
  +        }
  +        $html .= "  <tr>\n";
  +        $html .= "</table>\n";
  +        $html << 1;
  +
  +        for (my $i = 0; $i < @{$cfg->{'Host'}}; $i++) {
  +            my $host = $cfg->{'Host'}->[$i];
  +            $html >> "col$i";
  +            $html .= "<table border=0 cellpadding=0 cellspacing=0>\n";
  +            $html .= "  <tr>\n";
  +            $html .= "    <td>\n";
  +            my $url = $cgi->url(-relative => 1) . "?explore=$host->{-name}";
  +            my $img = $cgi->url(-relative => 1) . "?graph=$host->{-name}\@400:100:-48h:now:0:0";
  +            $html .= "      <a href=\"$url\"><img src=\"$img\" border=0></a>\n";
  +            $html .= "    </td>\n";
  +            $html .= "  </tr>\n";
  +            foreach my $target (@{$host->{-target}->{-order}}) {
  +                $html .= "  <tr>\n";
  +                $html .= "    <td>\n";
  +                my $url = $cgi->url(-relative => 1) . "?explore=$host->{-name}:$target";
  +                my $img = $cgi->url(-relative => 1) . "?graph=$host->{-name}:$target\@400:100:-48h:now:0:0";
  +                $html .= "      <a href=\"$url\"><img src=\"$img\" border=0></a>\n";
  +                $html .= "    </td>\n";
  +                $html .= "  </tr>\n";
  +            }
  +            $html .= "</table>\n";
  +            $html << 1;
  +        }
   
           #   send out page
  +        $html->undivert(0);
           print STDOUT $cgi->header(
               -type => 'text/html',
               -content_length => length($html),
  @@ .

From ossp-cvs-owner@ossp.org  Thu Dec 23 22:26:07 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CE89876498; Thu, 23 Dec 2004 22:26:06 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/flow2rrd/ flow2rrd.pl
Message-Id: <20041223212606.CE89876498@mail.ossp.org>
Date: Thu, 23 Dec 2004 22:26:06 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Dec-2004 22:26:06
  Branch: HEAD                             Handle: 2004122321260600

  Modified files:
    ossp-pkg/flow2rrd       flow2rrd.pl

  Log:
    remove obsolete crap

  Summary:
    Revision    Changes     Path
    1.3         +1  -7      ossp-pkg/flow2rrd/flow2rrd.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/flow2rrd.pl
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 flow2rrd.pl
  --- ossp-pkg/flow2rrd/flow2rrd.pl	23 Dec 2004 21:08:32 -0000	1.2
  +++ ossp-pkg/flow2rrd/flow2rrd.pl	23 Dec 2004 21:26:06 -0000	1.3
  @@ -1050,14 +1050,8 @@
           #   cleanup
           undef $html;
       }
  -
  -    # width
  -    # height
  -    # start-time
  -    # end-time
  -    # upper-limit
  -    # lower-limit
   }
   
  +#   die gracefully
   exit(0);
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Dec 23 22:37:20 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 56AA876498; Thu, 23 Dec 2004 22:37:20 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/flow2rrd/ flow2rrd.pl flow2rrd.pod
Message-Id: <20041223213720.56AA876498@mail.ossp.org>
Date: Thu, 23 Dec 2004 22:37:20 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Dec-2004 22:37:20
  Branch: HEAD                             Handle: 2004122321371900

  Added files:
    ossp-pkg/flow2rrd       flow2rrd.pod
  Modified files:
    ossp-pkg/flow2rrd       flow2rrd.pl

  Log:
    add license and initial manpage skeleton

  Summary:
    Revision    Changes     Path
    1.4         +23 -2      ossp-pkg/flow2rrd/flow2rrd.pl
    1.1         +49 -0      ossp-pkg/flow2rrd/flow2rrd.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/flow2rrd.pl
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 flow2rrd.pl
  --- ossp-pkg/flow2rrd/flow2rrd.pl	23 Dec 2004 21:26:06 -0000	1.3
  +++ ossp-pkg/flow2rrd/flow2rrd.pl	23 Dec 2004 21:37:19 -0000	1.4
  @@ -1,7 +1,28 @@
   #!/usr/opkg/bin/perl
   ##
  -##  flow2rrd -- store NetFlow data in Round-Robin Database (RRD)
  -##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com> 
  +##  OSSP flow2rrd -- Store NetFlow Data in Round-Robin Database (RRD)
  +##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP flow2rrd, a tool for storing NetFlow as
  +##  RRD data which can be found at http://www.ossp.org/pkg/tool/flow2rrd/.
  +##
  +##  This program is free software; you can redistribute it and/or modify
  +##  it under the terms of the GNU General Public License as published by
  +##  the Free Software Foundation; either version 2 of the License, or
  +##  (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this program; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  flow2rrd.pl: program (language: Perl)
   ##
   
   require 5.008;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/flow2rrd.pod
  ============================================================================
  $ cvs diff -u -r0 -r1.1 flow2rrd.pod
  --- /dev/null	2004-12-23 22:37:20 +0100
  +++ flow2rrd.pod	2004-12-23 22:37:20 +0100
  @@ -0,0 +1,49 @@
  +##
  +##  OSSP flow2rrd -- Store NetFlow Data in Round-Robin Database (RRD)
  +##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP flow2rrd, a tool for storing NetFlow as
  +##  RRD data which can be found at http://www.ossp.org/pkg/tool/flow2rrd/.
  +##
  +##  This program is free software; you can redistribute it and/or modify
  +##  it under the terms of the GNU General Public License as published by
  +##  the Free Software Foundation; either version 2 of the License, or
  +##  (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this program; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  flow2rrd.pod: manual page (language: POD)
  +##
  +
  +=pod
  +
  +=head1 NAME
  +
  +B<OSSP flow2rrd> - Store NetFlow Data in Round-Robin Database (RRD)
  +
  +=head1 SYNOPSIS
  +
  +=head1 DESCRIPTION
  +
  +=head1 SEE ALSO
  +
  +flow-capture(1), rrdtool(1).
  +
  +=head1 HISTORY
  +
  +The B<OSSP flow2rrd> tool was designed and implemented in December 2004
  +by I<Ralf S. Engelschall> E<lt>rse@engelschall.comE<gt> for the B<OSSP>
  +project. It was prompted by the need for having accurate and flexible
  +host network traffic statistics.
  +
  +=cut
  +
  @@ .

From ossp-cvs-owner@ossp.org  Sun Dec 26 13:32:39 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0EB19764F9; Sun, 26 Dec 2004 13:32:39 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/flow2rrd/ flow2rrd.pl flow2rrd.pod
Message-Id: <20041226123239.0EB19764F9@mail.ossp.org>
Date: Sun, 26 Dec 2004 13:32:39 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Dec-2004 13:32:38
  Branch: HEAD                             Handle: 2004122612323800

  Modified files:
    ossp-pkg/flow2rrd       flow2rrd.pl flow2rrd.pod

  Log:
    The next step in providing some documentation

  Summary:
    Revision    Changes     Path
    1.5         +4  -7      ossp-pkg/flow2rrd/flow2rrd.pl
    1.2         +185 -3     ossp-pkg/flow2rrd/flow2rrd.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/flow2rrd.pl
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 flow2rrd.pl
  --- ossp-pkg/flow2rrd/flow2rrd.pl	23 Dec 2004 21:37:19 -0000	1.4
  +++ ossp-pkg/flow2rrd/flow2rrd.pl	26 Dec 2004 12:32:38 -0000	1.5
  @@ -1,6 +1,6 @@
   #!/usr/opkg/bin/perl
   ##
  -##  OSSP flow2rrd -- Store NetFlow Data in Round-Robin Database (RRD)
  +##  OSSP flow2rrd -- NetFlow to Round-Robin Database (RRD)
   ##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
   ##
  @@ -60,7 +60,6 @@
   my $opt = {
       -help     => 0,
       -version  => 0,
  -    -verbose  => 0,
       -config   => 'flow2rrd.cfg',
       -store    => 0,
       -graph    => 0,
  @@ -71,8 +70,7 @@
   Getopt::Long::Configure("bundling");
   my %getopt_spec = (
       'h|help'     => \$opt->{-help},
  -    'V|version'  => \$opt->{-version},
  -    'v|verbose'  => \$opt->{-verbose},
  +    'v|version'  => \$opt->{-version},
       'c|config=s' => \$opt->{-config},
       's|store'    => \$opt->{-store},
       'g|graph'    => \$opt->{-graph},
  @@ -84,8 +82,7 @@
       print "usage: $my->{-progname} [<options>] <hostname>\n" .
             "available options are:\n" .
             "  -h,--help              print out this usage page\n" .
  -          "  -v,--verbose           enable verbose run-time mode\n" .
  -          "  -V,--version           print program version\n" .
  +          "  -v,--version           print program version\n" .
             "  -c,--config FILE       read this configuration file only\n" .
             "  -s,--store             store NetFlow values into RRD\n" .
             "  -g,--graph             produce RRD graphs\n" .
  @@ -233,7 +230,7 @@
       my $ctx = &data_init($cfg);
   
       #   scan flow-tools stream on STDIN for NetFlow records
  -    Cflow::verbose(1);
  +    Cflow::verbose(0);
       Cflow::find(sub { &foreach_record($cfg, $ctx) }, "-");
       sub foreach_record {
           my ($cfg, $ctx) = @_;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/flow2rrd.pod
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 flow2rrd.pod
  --- ossp-pkg/flow2rrd/flow2rrd.pod	23 Dec 2004 21:37:19 -0000	1.1
  +++ ossp-pkg/flow2rrd/flow2rrd.pod	26 Dec 2004 12:32:38 -0000	1.2
  @@ -1,5 +1,5 @@
   ##
  -##  OSSP flow2rrd -- Store NetFlow Data in Round-Robin Database (RRD)
  +##  OSSP flow2rrd -- NetFlow to Round-Robin Database (RRD)
   ##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
   ##
  @@ -28,15 +28,197 @@
   
   =head1 NAME
   
  -B<OSSP flow2rrd> - Store NetFlow Data in Round-Robin Database (RRD)
  +B<OSSP flow2rrd> - NetFlow to Round-Robin Database (RRD)
   
   =head1 SYNOPSIS
   
  +B<flow2rrd> 
  +[B<--config=>I<file>]
  +B<--store>
  +
  +B<flow2rrd>
  +[B<--config=>I<file>]
  +B<--graph>
  +I<host>[C<:>I<target>]C<@>I<file>C<:>I<width>C<:>I<height>C<:>I<start>C<:>I<end>C<:>I<ulimit>C<:>I<llimit> ...
  +
  +B<flow2rrd> 
  +[B<--config=>I<file>]
  +B<--cgi>
  +
  +B<flow2rrd> 
  +B<--version>
  +
  +B<flow2rrd> 
  +B<--help>
  +
   =head1 DESCRIPTION
   
  +B<OSSP flow2rrd> is a companion tool to the B<Flow-Tools> toolkit for
  +storing I<NetFlow> network traffic data in an accumulating fixed-size
  +B<RRDTool> I<Round-Robin-Database> (RRD) for visualization purposes.
  +
  +The B<Flow-Tools>' B<flow-capture> command is a I<NetFlow> data
  +collector which stores received network I<flow> data. B<OSSP flow2rrd>
  +reads these I<flow> data and stores it into a backend RRD according to
  +pre-configured hosts, targets and services.
  +
  +B<OSSP flow2rrd> can then generate host/target and target/service graphs
  +from the accumulated network traffic data. To support easy on-demand
  +graph generation and displaying, B<OSSP flow2rrd> can be also called
  +from a Web server through CGI to render a small two-layer Web user
  +interface showing graphs of all stored data and allowing a single
  +graph to be displayed with arbitrary size, time-range and data-range
  +adjustments.
  +
  +=head1 OPTIONS
  +
  +=over 4
  +
  +=item B<-c>|B<--config> I<file>
  +
  +Specifies the path to the F<flow2rrd.cfg> configuration file.
  +See B<CONFIGURATION> section below for details on the
  +content of the configuration file.
  +
  +=item B<-s>|B<--store>
  +
  +Enable the I<data storage operation>. The B<Flow-Tools>' I<flow> data is
  +expected on F<stdin> with time-ordered records and with the time of the
  +first record to be higher than the time of the last record from last
  +B<--store> operation was. This is a constraint from the backend RRD.
  +
  +=item B<-g>|B<--graph>
  +
  +Enable the I<graph generation operation>. On the
  +command line one or more arguments of the form
  +I<host>[C<:>I<target>]C<@>I<file>C<:>I<width>C<:>I<height>C<:>I<start>C<
  +:>I<end>C<:>I<ulimit>C<:>I<llimit> are expected, each specifying the
  +content and output format for a particular graph. Actually, this
  +operation is intended to be used implicitly under the I<CGI operation>
  +(see below), but for debugging and manual post-processing reasons (for
  +instance to generate graphs for importing into B<Cacti> or similar RRD
  +based tools) is can be used from the command line, too.
  +
  +The I<host> and I<target> syntax parts have to be strings directly
  +corresponding to the B<Host> and B<Target> directives in the
  +configuration file. Specifying just I<host> renders a host/target graph,
  +specifying I<host> and I<target> renders a target/service graph.
  +
  +The I<file> syntax part is just the filename where the graph image
  +is written to. If it ends with the extension "C<.png>", the image is
  +generated in PNG format. Else, a GIF format image is generated.
  +
  +The I<width> and I<height> syntax parts are the X and Y sizes of the
  +graph canvas in the generated image. It is I<not> the size of the image
  +as a whole because of surrounding titles, annotations, etc. Reasonable
  +specifications are "C<400:100>" or "C<800:200>".
  +
  +The I<start> and I<end> syntax parts are the start and end times
  +(X axis) of the graph. The values effectively are in seconds
  +since Unix epoch (01-01-1970), but can be also specified as
  +abbreviated [-+]I<number>[C<smhdwMy>] (e.g. "C<48h>") or as absolute
  +I<dd>-I<Mmm>-I<yyyy> (e.g. "C<24-Dec-2004>") times. Additionally, the
  +time can be relative to each others and to the current time. Finally,
  +"C<now>" specifies the current time. Reasonable specification is
  +"C<-48h:now>".
  +
  +The I<ulimit> and I<llimit> syntax parts are the upper and lower (Y
  +axis) limits of the graph. The values effectively are in Bit/s, but can
  +be also specified as abbreviated [-+]I<number>[C<KMGT>]. Keep in mind
  +that usually the upper limit has to be positive and the lower limit
  +negative. Specifying a limit as "C<0>" means auto-scaling. Reasonable
  +specifications are "C<0:0>" and "C<2M:-500K>".
  +
  +=item B<-c>|B<--cgi>
  +
  +Enable the I<CGI operation>. This usually has to be used by a CGI
  +wrapper script placed somewhere in the Web server F<cgi-bin> directory:
  +
  + #!/bin/sh
  + # I'm /path/to/cgi/flow2rrd.cgi
  + /path/to/bin/flow2rrd --cgi
  +
  +=item B<-v>|B<--version>
  +
  +Print the B<OSSP flow2rrd> program version.
  +
  +=item B<-h>|B<--help>
  +
  +Print a short command line usage.
  +
  +=back
  +
  +=head1 CONFIGURATION
  +
  +B<OSSP flow2rrd> is configured with a configuration file
  +F<flow2rrd.cfg> (see also option B<--config> above)
  +with a syntax generated by the following grammar:
  +
  + <config>          ::= <seq-global>
  + <seq-global>      ::= ( <dir-database> |
  +                         <dir-protocol> |
  +                         <dir-service>  |
  +                         <dir-host>     |
  +                         <dir-colors>   )+
  + <dir-database>    ::= "Database" <path> ";"
  + <dir-protocol>    ::= "Protocol" <name> <number> ";"
  + <dir-service>     ::= "Service" <name> (<name>.":".(<number>|"*"))+ ";"
  + <dir-host>        ::= "Host" <hostname> "{" "}" <seq-host> ";"
  + <dir-colors>      ::= "Colors" <name> <color>+ ";"
  + <seq-host>        ::= <dir-target>+ 
  + <dir-target>      ::= "Target" <name> "{" <seq-target> "}" ";"
  + <seq-target>      ::= (<dir-network> | <dir-service>)+
  + <dir-network>     ::= "Network" <network>+ ";"
  + <dir-service>     ::= "Service" <name>+ ";"
  + <path>            ::= /(/?[^/]+|/[^/]*)+/
  + <name>            ::= /[a-zA-Z][a-zA-Z0-9_]*/
  + <number>          ::= /[0-9]+/
  + <hostname>        ::= /[^.]+(\.[^.]+)*/
  + <network>         ::= /^\d+\.\d+\.\d+\.\d+(/\d+)?$/
  +
  +An example configuration can be seen below under section B<EXAMPLE>:
  +
  +=head1 EXAMPLE
  +
  + #   Round-Robin Database
  + Database /var/tmp/flow2rrd.rrd;
  + 
  + #   Protocol Definitions
  + Protocol icmp     1;
  + Protocol tcp      6;
  + Protocol udp      17;
  + Protocol vrrp     112;
  + 
  + #   Service Definitions
  + Service  icmp     icmp:*;
  + Service  vrrp     vrrp:*;
  + Service  ftp      tcp:20 tcp:21;
  + Service  ssh      tcp:22;
  + Service  smtp     tcp:25;
  + Service  dns      udp:53 tcp:53;
  + Service  ntp      udp:123 tcp:123;
  + Service  radius   udp:1645 udp:1646 udp:1812 udp:1813;
  + 
  + #   Host Definitions
  + Host host.example.com {
  +     Target host.example.com {
  +         Network 192.168.0.1/32;
  +         Service icmp vrrp dns ntp ssh smtp;
  +     };
  +     Target service1.engelschall.com {
  +         Network 192.168.0.2/32 192.168.0.3/32;
  +         Service dns smtp;
  +     };
  +     Target service1.engelschall.com {
  +         Network 192.168.0.2/32 192.168.0.3/32;
  +         Service ftp radius;
  +     };
  + };
  + 
   =head1 SEE ALSO
   
  -flow-capture(1), rrdtool(1).
  +B<Flow-Toolkit> E<lt>http://www.splintered.net/sw/flow-tools/E<gt>,
  +flow-capture(1), B<RRDTool> E<lt>http://www.rrdtool.org/E<gt>, rrdtool(1).
   
   =head1 HISTORY
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Dec 26 14:10:42 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D737B76498; Sun, 26 Dec 2004 14:10:41 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/flow2rrd/ AUTHORS ChangeLog INSTALL Makefile.in R...
Message-Id: <20041226131041.D737B76498@mail.ossp.org>
Date: Sun, 26 Dec 2004 14:10:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Dec-2004 14:10:41
  Branch: HEAD                             Handle: 2004122613103900

  Added files:
    ossp-pkg/flow2rrd       AUTHORS ChangeLog INSTALL Makefile.in README
                            THANKS TODO VERSION devtool devtool.conf
                            devtool.func
  Modified files:
    ossp-pkg/flow2rrd       flow2rrd.pl flow2rrd.pod
  Removed files:
    ossp-pkg/flow2rrd       flow2rrd.cgi

  Log:
    add the usual amount of distribution files

  Summary:
    Revision    Changes     Path
    1.1         +15 -0      ossp-pkg/flow2rrd/AUTHORS
    1.1         +15 -0      ossp-pkg/flow2rrd/ChangeLog
    1.1         +30 -0      ossp-pkg/flow2rrd/INSTALL
    1.1         +91 -0      ossp-pkg/flow2rrd/Makefile.in
    1.1         +44 -0      ossp-pkg/flow2rrd/README
    1.1         +17 -0      ossp-pkg/flow2rrd/THANKS
    1.1         +16 -0      ossp-pkg/flow2rrd/TODO
    1.1         +6  -0      ossp-pkg/flow2rrd/VERSION
    1.1         +47 -0      ossp-pkg/flow2rrd/devtool
    1.1         +46 -0      ossp-pkg/flow2rrd/devtool.conf
    1.1         +73 -0      ossp-pkg/flow2rrd/devtool.func
    1.2         +0  -2      ossp-pkg/flow2rrd/flow2rrd.cgi
    1.6         +9  -11     ossp-pkg/flow2rrd/flow2rrd.pl
    1.3         +9  -8      ossp-pkg/flow2rrd/flow2rrd.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/AUTHORS
  ============================================================================
  $ cvs diff -u -r0 -r1.1 AUTHORS
  --- /dev/null	2004-12-26 14:10:39 +0100
  +++ AUTHORS	2004-12-26 14:10:39 +0100
  @@ -0,0 +1,15 @@
  +   _        ___  ____ ____  ____    __ _               ____               _ 
  +  |_|_ _   / _ \/ ___/ ___||  _ \  / _| | _____      _|___ \ _ __ _ __ __| |
  +  _|_||_| | | | \___ \___ \| |_) || |_| |/ _ \ \ /\ / / __) | '__| '__/ _` |
  + |_||_|_| | |_| |___) |__) |  __/ |  _| | (_) \ V  V / / __/| |  | | | (_| |
  +  |_|_|_|  \___/|____/____/|_|    |_| |_|\___/ \_/\_/ |_____|_|  |_|  \__,_|
  +
  +  OSSP flow2rrd - NetFlow to Round-Robin Database (RRD)
  +
  +  This is a list of authors who have written
  +  or edited parts of the OSSP flow2rrd sources.
  +
  +  o  OSSP flow2rrd (as a whole)
  +     Written by: Ralf S. Engelschall
  +     Edited  by: Ralf S. Engelschall
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/ChangeLog
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ChangeLog
  --- /dev/null	2004-12-26 14:10:39 +0100
  +++ ChangeLog	2004-12-26 14:10:39 +0100
  @@ -0,0 +1,15 @@
  +   _        ___  ____ ____  ____    __ _               ____               _ 
  +  |_|_ _   / _ \/ ___/ ___||  _ \  / _| | _____      _|___ \ _ __ _ __ __| |
  +  _|_||_| | | | \___ \___ \| |_) || |_| |/ _ \ \ /\ / / __) | '__| '__/ _` |
  + |_||_|_| | |_| |___) |__) |  __/ |  _| | (_) \ V  V / / __/| |  | | | (_| |
  +  |_|_|_|  \___/|____/____/|_|    |_| |_|\___/ \_/\_/ |_____|_|  |_|  \__,_|
  +
  +  OSSP flow2rrd - NetFlow to Round-Robin Database (RRD)
  +
  +  ChangeLog
  +
  +  Changes between *GENESIS* and 0.9.0 (18-Dec-2003 to 24-Dec-2004):
  +
  +    *) Created the initial version of OSSP flow2rrd.
  +       [Ralf S. Engelschall]
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/INSTALL
  ============================================================================
  $ cvs diff -u -r0 -r1.1 INSTALL
  --- /dev/null	2004-12-26 14:10:39 +0100
  +++ INSTALL	2004-12-26 14:10:40 +0100
  @@ -0,0 +1,30 @@
  +   _        ___  ____ ____  ____    __ _               ____               _ 
  +  |_|_ _   / _ \/ ___/ ___||  _ \  / _| | _____      _|___ \ _ __ _ __ __| |
  +  _|_||_| | | | \___ \___ \| |_) || |_| |/ _ \ \ /\ / / __) | '__| '__/ _` |
  + |_||_|_| | |_| |___) |__) |  __/ |  _| | (_) \ V  V / / __/| |  | | | (_| |
  +  |_|_|_|  \___/|____/____/|_|    |_| |_|\___/ \_/\_/ |_____|_|  |_|  \__,_|
  +
  +  OSSP flow2rrd - NetFlow to Round-Robin Database (RRD)
  +
  +  INSTALL
  +
  +  The Convenient Way (with OpenPKG)
  +  =================================
  +
  +  Just install the OpenPKG "flow2rrd" packages
  +  and its dependencies and you are done.
  +
  +  $ <prefix>/bin/openpkg build flow2rrd | sh
  +  $ vi <prefix>/etc/flow2rrd/flow2rrd.cfg
  +  $ vi <prefix>/etc/rc.conf
  +  ...
  +  flowtools_capture="yes"
  +  flowtools_capture_flags="-V5 -N-1 -n95 -e665 -z4 -S5 -R <prefix>/bin/flow2rrd-store"
  +  ...
  +  $ <prefix>/etc/rc flowtools start
  +
  +  The Cruel Way (Manually)
  +  ========================
  +
  +  ...FIXME...
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/Makefile.in
  ============================================================================
  $ cvs diff -u -r0 -r1.1 Makefile.in
  --- /dev/null	2004-12-26 14:10:40 +0100
  +++ Makefile.in	2004-12-26 14:10:40 +0100
  @@ -0,0 +1,91 @@
  +##
  +##  OSSP flow2rrd -- NetFlow to Round-Robin Database (RRD)
  +##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP flow2rrd, a tool for storing NetFlow data
  +##  into an RRD which can be found at http://www.ossp.org/pkg/tool/flow2rrd/.
  +##
  +##  This program is free software; you can redistribute it and/or modify
  +##  it under the terms of the GNU General Public License as published by
  +##  the Free Software Foundation; either version 2 of the License, or
  +##  (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this program; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  Makefile.in: make(1) build procedure
  +##
  +
  +@SET_MAKE@
  +
  +#   installation paths
  +DESTDIR     =
  +prefix      = @prefix@
  +exec_prefix = @exec_prefix@
  +bindir      = @bindir@
  +libdir      = @libdir@
  +includedir  = @includedir@
  +mandir      = @mandir@
  +
  +#   build tools
  +RM          = rm -f
  +RMDIR       = rmdir
  +SHTOOL      = ./shtool
  +TRUE        = true
  +PERL        = @PERL@
  +POD2MAN     = @POD2MAN@
  +
  +#   default target
  +all: flow2rrd flow2rrd.1
  +
  +flow2rrd.1: flow2rrd.pod
  +	V1=`$(SHTOOL) version -l txt -d short VERSION`; \
  +	V2=`$(SHTOOL) version -l txt -d long VERSION`; \
  +	D=`$(SHTOOL) version -l txt -d long VERSION | sed -e 's;.*(;;' -e 's;).*;;'`; \
  +	$(POD2MAN) --quotes=none \
  +	           --section=1 --center="NetFlow to Round-Robin Database (RRD)" \
  +	           --release="$$D" --date="OSSP flow2rrd $$V1" flow2rrd.pod | \
  +	sed -e "s;FLOW2RRD_VERSION_STR;$$V2;" >flow2rrd.1
  +
  +flow2rrd: flow2rrd.pl
  +	sed -e 's;@PERL@;$(PERL);g' \
  +	    -e 's;@POD2MAN@;$(POD2MAN);g' \
  +	    <flow2rrd.pl >flow2rrd
  +
  +#   perform installation procedure
  +install:
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man1
  +	$(SHTOOL) install -c -m 755 flow2rrd $(DESTDIR)$(bindir)/flow2rrd
  +	$(SHTOOL) install -c -m 644 flow2rrd.1 $(DESTDIR)$(mandir)/man1/flow2rrd.1
  +
  +#   perform uninstallation procedure
  +uninstall:
  +	-$(RM) $(DESTDIR)$(mandir)/bin/flow2rrd
  +	-$(RM) $(DESTDIR)$(mandir)/man1/flow2rrd.1
  +	-$(RMDIR) $(DESTDIR)$(mandir)/man1 >/dev/null 2>&1 || $(TRUE)
  +	-$(RMDIR) $(DESTDIR)$(bindir) >/dev/null 2>&1 || $(TRUE)
  +	-$(RMDIR) $(DESTDIR)$(prefix) >/dev/null 2>&1 || $(TRUE)
  +
  +#   perform build clean up procedure
  +clean:
  +	-$(RM) flow2rrd
  +	-$(RM) flow2rrd.1
  +
  +#   perform distribution clean up procedure
  +distclean: clean
  +	-$(RM) config.log config.status config.cache
  +	-$(RM) Makefile
  +
  +#   perform developer clean up procedure
  +realclean: distclean
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/README
  ============================================================================
  $ cvs diff -u -r0 -r1.1 README
  --- /dev/null	2004-12-26 14:10:40 +0100
  +++ README	2004-12-26 14:10:40 +0100
  @@ -0,0 +1,44 @@
  +   _        ___  ____ ____  ____    __ _               ____               _ 
  +  |_|_ _   / _ \/ ___/ ___||  _ \  / _| | _____      _|___ \ _ __ _ __ __| |
  +  _|_||_| | | | \___ \___ \| |_) || |_| |/ _ \ \ /\ / / __) | '__| '__/ _` |
  + |_||_|_| | |_| |___) |__) |  __/ |  _| | (_) \ V  V / / __/| |  | | | (_| |
  +  |_|_|_|  \___/|____/____/|_|    |_| |_|\___/ \_/\_/ |_____|_|  |_|  \__,_|
  +
  +  OSSP flow2rrd - NetFlow to Round-Robin Database (RRD)
  +  Version 0.1.0 (XX-Oct-2004)
  +
  +  ABSTRACT
  +
  +  OSSP flow2rrd is a companion tool to the Flow-Tools toolkit for
  +  storing NetFlow network traffic data in an accumulating fixed-size
  +  RRDTool Round-Robin-Database (RRD) for visualization purposes.
  +
  +  COPYRIGHT AND LICENSE
  +
  +  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +
  +  This file is part of OSSP flow2rrd, a tool for storing NetFlow data
  +  into an RRD which can be found at http://www.ossp.org/pkg/tool/flow2rrd/.
  +
  +  This program is free software; you can redistribute it and/or modify
  +  it under the terms of the GNU General Public License as published by
  +  the Free Software Foundation; either version 2 of the License, or
  +  (at your option) any later version.
  +
  +  This program is distributed in the hope that it will be useful,
  +  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +  General Public License for more details.
  +
  +  You should have received a copy of the GNU General Public License
  +  along with this program; if not, write to the Free Software
  +  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +
  +  SEE ALSO
  +
  +  o Homepage ....... http://www.ossp.org/pkg/tool/flow2rrd/
  +  o Sources ........ http://cvs.ossp.org/pkg/tool/flow2rrd/
  +  o Distribution .... ftp://ftp.ossp.org/pkg/tool/flow2rrd/
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/THANKS
  ============================================================================
  $ cvs diff -u -r0 -r1.1 THANKS
  --- /dev/null	2004-12-26 14:10:40 +0100
  +++ THANKS	2004-12-26 14:10:40 +0100
  @@ -0,0 +1,17 @@
  +   _        ___  ____ ____  ____    __ _               ____               _ 
  +  |_|_ _   / _ \/ ___/ ___||  _ \  / _| | _____      _|___ \ _ __ _ __ __| |
  +  _|_||_| | | | \___ \___ \| |_) || |_| |/ _ \ \ /\ / / __) | '__| '__/ _` |
  + |_||_|_| | |_| |___) |__) |  __/ |  _| | (_) \ V  V / / __/| |  | | | (_| |
  +  |_|_|_|  \___/|____/____/|_|    |_| |_|\___/ \_/\_/ |_____|_|  |_|  \__,_|
  +
  +  OSSP flow2rrd - NetFlow to Round-Robin Database (RRD)
  +
  +  THANKS
  +
  +  Credit has to be given to the following people who contributed ideas,
  +  stuff, bugfixes, hints etc. (in alphabetical order):
  +
  +  o Thomas Lotterer          <thomas@lotterer.net>
  +
  +  ...and all other OSSP flow2rrd users who gave me feedback but I've forgot.
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/TODO
  ============================================================================
  $ cvs diff -u -r0 -r1.1 TODO
  --- /dev/null	2004-12-26 14:10:40 +0100
  +++ TODO	2004-12-26 14:10:40 +0100
  @@ -0,0 +1,16 @@
  +   _        ___  ____ ____  ____    __ _               ____               _ 
  +  |_|_ _   / _ \/ ___/ ___||  _ \  / _| | _____      _|___ \ _ __ _ __ __| |
  +  _|_||_| | | | \___ \___ \| |_) || |_| |/ _ \ \ /\ / / __) | '__| '__/ _` |
  + |_||_|_| | |_| |___) |__) |  __/ |  _| | (_) \ V  V / / __/| |  | | | (_| |
  +  |_|_|_|  \___/|____/____/|_|    |_| |_|\___/ \_/\_/ |_____|_|  |_|  \__,_|
  +
  +  OSSP flow2rrd - NetFlow to Round-Robin Database (RRD)
  +
  +  - color themes still hardcoded!?
  +  - implement "*" number
  +  - unknown data handling!
  +  - finish/extend manual page flow2rrd.pod
  +  - larger/smaller buttons on explore website
  +  - back button on explore website
  +  - OSSP website
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/VERSION
  ============================================================================
  $ cvs diff -u -r0 -r1.1 VERSION
  --- /dev/null	2004-12-26 14:10:40 +0100
  +++ VERSION	2004-12-26 14:10:40 +0100
  @@ -0,0 +1,6 @@
  +
  +  VERSION -- Version Information for OSSP svs (syntax: Text)
  +  [automatically generated and maintained by GNU shtool]
  +
  +  This is OSSP svs, Version 1.0.0 (14-Dec-2004)
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/devtool
  ============================================================================
  $ cvs diff -u -r0 -r1.1 devtool
  --- /dev/null	2004-12-26 14:10:40 +0100
  +++ devtool	2004-12-26 14:10:41 +0100
  @@ -0,0 +1,47 @@
  +#!/bin/sh
  +##
  +##  devtool -- Development Tool
  +##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  +##
  +
  +if [ $# -eq 0 ]; then
  +    echo "devtool:USAGE: devtool <command> [<arg> ...]" 1>&2
  +    exit 1
  +fi
  +
  +cmd="$1"
  +shift
  +
  +devtoolfunc="./devtool.func"
  +
  +if [ ! -f devtool.conf ]; then
  +    echo "devtool:ERROR: no devtool.conf in current directory" 1>&2
  +    exit 1
  +fi
  +
  +cmdline=`grep "^%$cmd" devtool.conf`
  +if [ ".$cmdline" = . ]; then
  +    echo "devtool:ERROR: command $cmd not found in devtool.conf" 1>&2
  +    exit 1
  +fi
  +
  +if [ ".$TMPDIR" != . ]; then
  +    tmpdir="$TMPDIR"
  +elif [ ".$TEMPDIR" != . ]; then
  +    tmpdir="$TEMPDIR"
  +else
  +    tmpdir="/tmp"
  +fi
  +tmpfile="$tmpdir/rc.$$.tmp"
  +
  +rm -f $tmpfile
  +touch $tmpfile
  +echo ". $devtoolfunc" >>$tmpfile
  +( sed <devtool.conf -e "1,/^%common/d" -e '/^%.*/,$d'
  +  sed <devtool.conf -e "1,/^%$cmd/d" -e '/^%.*/,$d' ) |\
  +sed -e 's;\([ 	]\)@\([a-zA-Z_][a-zA-Z0-9_]*\);\1devtool_\2;' >>$tmpfile
  +
  +sh $tmpfile "$@"
  +
  +rm -f $tmpfile >/dev/null 2>&1 || true
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/devtool.conf
  ============================================================================
  $ cvs diff -u -r0 -r1.1 devtool.conf
  --- /dev/null	2004-12-26 14:10:40 +0100
  +++ devtool.conf	2004-12-26 14:10:41 +0100
  @@ -0,0 +1,46 @@
  +##
  +##  devtool.conf -- Development Tool Configuration
  +##
  +
  +%autogen
  +    @autogen autoconf 2.59 "2.5*"
  +    @autogen shtool 2.0.1  "2.0.*" all
  +
  +%autoclean
  +    @autoclean autoconf
  +    @autoclean shtool
  +
  +%configure
  +    ./configure --prefix=/tmp/flow2rrd "$@"
  +
  +%version
  +    ./shtool version -l txt -n "OSSP flow2rrd" -e VERSION
  +    V=`./shtool version -l txt -d long VERSION`
  +    sed -e "s/Version .*(.*)/Version $V/g" <README >README.n 
  +    mv README.n README
  +
  +%dist
  +    echo "+++ generating"
  +    ./devtool autoclean
  +    ./devtool autogen
  +    echo "+++ configuring"
  +    ./configure
  +    echo "+++ building"
  +    make clean all
  +    echo "+++ cleaning"
  +    make distclean
  +    echo "+++ fixing"
  +    ./shtool fixperm -v .
  +    echo "+++ rolling"
  +    V=`./shtool version -l txt -d short VERSION`
  +    ./shtool tarball -o flow2rrd-${V}.tar.gz -d flow2rrd-${V} -u ossp -g flow2rrd \
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*,*.tar.gz' -c 'gzip --best' .
  +    ls -l flow2rrd-${V}.tar.gz
  +    echo "+++ testing"
  +    gunzip <flow2rrd-${V}.tar.gz | tar tvf -
  +
  +%upload
  +    echo "+++ copying to ftp://ftp.ossp.org/pkg/tool/flow2rrd/"
  +    V=`./shtool version -ltxt -dshort VERSION`
  +    scp flow2rrd-${V}.tar.gz master.ossp.org:/e/ossp/ftp/pkg/tool/flow2rrd/
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/devtool.func
  ============================================================================
  $ cvs diff -u -r0 -r1.1 devtool.func
  --- /dev/null	2004-12-26 14:10:40 +0100
  +++ devtool.func	2004-12-26 14:10:41 +0100
  @@ -0,0 +1,73 @@
  +##
  +##  devtool.func -- Development Tool Functions
  +##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com> 
  +##
  +
  +devtool_require () {
  +    t="$1"; o="$2"; p="$3"; e="$4"; a="$5"
  +    v=`($t $o | head -1 | awk "{ print \\\$$p; }") 2>/dev/null`
  +    if [ ".$v" = . ]; then
  +        echo "devtool:ERROR: unable to determine version of $t" 1>&2
  +        exit 1
  +    fi
  +    case "$v" in
  +        $e )
  +            ;;
  +        $a )
  +            echo "devtool:WARNING: $t version $v still accepted, although expected $e." 1>&2
  +            ;;
  +        * )
  +            echo "devtool:ERROR: $t version $e expected, but found $v." 1>&2
  +            exit 1
  +            ;;
  +    esac
  +    echo "$v"
  +}
  +
  +devtool_autogen () {
  +    tool=$1
  +    shift
  +    case $tool in
  +        autoconf )
  +            autoconf_version=`devtool_require autoconf --version 4 "$1" "$2"`
  +            echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
  +            autoconf
  +            #autoheader 2>&1 | grep -v "is unchanged"
  +            rm -rf autom4te.cache >/dev/null 2>&1
  +            ;;
  +        libtool )
  +            libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
  +            echo "generating (GNU Libtool $libtoolize_version): ltmain.sh, libtool.m4, config.guess, config.sub"
  +            libtoolize --force --copy >/dev/null 2>&1
  +            cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
  +                sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` libtool.m4
  +            ;;
  +        shtool )
  +            shtoolize_version=`devtool_require shtoolize -v 3 "$1" "$2"`
  +            echo "generating (GNU Shtool $shtoolize_version): shtool"
  +            shift
  +            shift
  +            shtoolize -q "$@"
  +            ;;
  +    esac
  +}
  +
  +devtool_autoclean () {
  +    tool=$1
  +    shift
  +    case $tool in
  +        autoconf )
  +            echo "removing: configure config.h.in"
  +            rm -f configure config.h.in
  +            ;;
  +        libtool )
  +            echo "removing: ltmain.sh libtool.m4 config.guess config.sub"
  +            rm -f ltmain.sh libtool.m4 config.guess config.sub
  +            ;;
  +        shtool )
  +            echo "removing: shtool"
  +            rm -f shtool
  +            ;;
  +    esac
  +}
  +
  @@ .
  rm -f ossp-pkg/flow2rrd/flow2rrd.cgi <<'@@ .'
  Index: ossp-pkg/flow2rrd/flow2rrd.cgi
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/flow2rrd.pl
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 flow2rrd.pl
  --- ossp-pkg/flow2rrd/flow2rrd.pl	26 Dec 2004 12:32:38 -0000	1.5
  +++ ossp-pkg/flow2rrd/flow2rrd.pl	26 Dec 2004 13:10:39 -0000	1.6
  @@ -1,11 +1,11 @@
  -#!/usr/opkg/bin/perl
  +#!@PERL@
   ##
   ##  OSSP flow2rrd -- NetFlow to Round-Robin Database (RRD)
   ##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
   ##
  -##  This file is part of OSSP flow2rrd, a tool for storing NetFlow as
  -##  RRD data which can be found at http://www.ossp.org/pkg/tool/flow2rrd/.
  +##  This file is part of OSSP flow2rrd, a tool for storing NetFlow data
  +##  into an RRD which can be found at http://www.ossp.org/pkg/tool/flow2rrd/.
   ##
   ##  This program is free software; you can redistribute it and/or modify
   ##  it under the terms of the GNU General Public License as published by
  @@ -52,8 +52,7 @@
   my $my = {
       -progname => 'OSSP flow2rrd',
       -proghome => 'http://www.ossp.org/pkg/tool/flow2rrd/',
  -    -progvers => '0.1.0',
  -    -progdate => '20-Dec-2004',
  +    -progvers => '@VERSION@',
   };
   
   #   run-time options
  @@ -63,7 +62,7 @@
       -config   => 'flow2rrd.cfg',
       -store    => 0,
       -graph    => 0,
  -    -cgi      => 0,
  +    -cgi      => (($ENV{'GATEWAY_INTERFACE'} || "") eq 'CGI/1.1' ? 1 : 0)
   };
   
   #   parse command line options
  @@ -90,7 +89,7 @@
       exit(0);
   }
   if ($opt->{-version}) {
  -    print "$my->{-progname} $my->{-progvers} ($my->{-progdate})\n";
  +    print "$my->{-progname} $my->{-progvers}\n";
       exit(0);
   }
   if (not $opt->{-store} and not $opt->{-graph} and not $opt->{-cgi}) {
  @@ -802,8 +801,7 @@
           $graph =~ s|\@|\@$tmpfile:|s;
   
           #   generate graph image
  -        #die "$0 --graph $graph";
  -        my $rc = system("$0 --graph $graph");
  +        my $rc = system("GATEWAY_INTERFACE=none $0 --graph $graph");
           if ($rc != 0) { # or not -s $tmpfile) {
               die "failed to generate graph image: $!";
           }
  @@ -870,7 +868,7 @@
           $html .= "<a href=\"".$cgi->url(-relative => 1)."\">Real-Time Network Statistics</a>";
           $html << 1;
           $html >> "footer";
  -        $html .= "<a href=\"$my->{-proghome}\">$my->{-progname}</a> $my->{-progvers} ($my->{-progdate})";
  +        $html .= "<a href=\"$my->{-proghome}\">$my->{-progname}</a> $my->{-progvers}";
           $html << 1;
   
           my $width  = ($cgi->param("width")  || "800");
  @@ -1018,7 +1016,7 @@
           $html .= "<a href=\"".$cgi->url(-relative => 1)."\">Real-Time Network Statistics</a>";
           $html << 1;
           $html >> "footer";
  -        $html .= "<a href=\"$my->{-proghome}\">$my->{-progname}</a> $my->{-progvers} ($my->{-progdate})";
  +        $html .= "<a href=\"$my->{-proghome}\">$my->{-progname}</a> $my->{-progvers}";
           $html << 1;
   
           $html >> "canvas";
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/flow2rrd.pod
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 flow2rrd.pod
  --- ossp-pkg/flow2rrd/flow2rrd.pod	26 Dec 2004 12:32:38 -0000	1.2
  +++ ossp-pkg/flow2rrd/flow2rrd.pod	26 Dec 2004 13:10:39 -0000	1.3
  @@ -3,8 +3,8 @@
   ##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
   ##
  -##  This file is part of OSSP flow2rrd, a tool for storing NetFlow as
  -##  RRD data which can be found at http://www.ossp.org/pkg/tool/flow2rrd/.
  +##  This file is part of OSSP flow2rrd, a tool for storing NetFlow data
  +##  into an RRD which can be found at http://www.ossp.org/pkg/tool/flow2rrd/.
   ##
   ##  This program is free software; you can redistribute it and/or modify
   ##  it under the terms of the GNU General Public License as published by
  @@ -30,6 +30,10 @@
   
   B<OSSP flow2rrd> - NetFlow to Round-Robin Database (RRD)
   
  +=head1 VERSION
  +
  +B<OSSP flow2rrd> FLOW2RRD_VERSION_STR
  +
   =head1 SYNOPSIS
   
   B<flow2rrd> 
  @@ -131,12 +135,9 @@
   
   =item B<-c>|B<--cgi>
   
  -Enable the I<CGI operation>. This usually has to be used by a CGI
  -wrapper script placed somewhere in the Web server F<cgi-bin> directory:
  -
  - #!/bin/sh
  - # I'm /path/to/cgi/flow2rrd.cgi
  - /path/to/bin/flow2rrd --cgi
  +Enable the I<CGI operation>. This option is automatically enabled if
  +the environment variable C<GATEWAY_INTERFACE> is set to the value
  +"C<CGI/1.1>".
   
   =item B<-v>|B<--version>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Dec 26 14:11:00 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DBF96764FE; Sun, 26 Dec 2004 14:10:59 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/flow2rrd/ .cvsignore
Message-Id: <20041226131059.DBF96764FE@mail.ossp.org>
Date: Sun, 26 Dec 2004 14:10:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Dec-2004 14:10:59
  Branch: HEAD                             Handle: 2004122613105900

  Added files:
    ossp-pkg/flow2rrd       .cvsignore

  Log:
    ignore generated files

  Summary:
    Revision    Changes     Path
    1.1         +3  -0      ossp-pkg/flow2rrd/.cvsignore
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/.cvsignore
  ============================================================================
  $ cvs diff -u -r0 -r1.1 .cvsignore
  --- /dev/null	2004-12-26 14:10:59 +0100
  +++ .cvsignore	2004-12-26 14:10:59 +0100
  @@ -0,0 +1,3 @@
  +Makefile
  +flow2rrd
  +flow2rrd.1
  @@ .

From ossp-cvs-owner@ossp.org  Sun Dec 26 14:12:42 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AAEBC76498; Sun, 26 Dec 2004 14:12:42 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/flow2rrd/ .cvsignore configure.ac
Message-Id: <20041226131242.AAEBC76498@mail.ossp.org>
Date: Sun, 26 Dec 2004 14:12:42 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Dec-2004 14:12:42
  Branch: HEAD                             Handle: 2004122613124200

  Added files:
    ossp-pkg/flow2rrd       configure.ac
  Modified files:
    ossp-pkg/flow2rrd       .cvsignore

  Log:
    one more required file

  Summary:
    Revision    Changes     Path
    1.2         +1  -0      ossp-pkg/flow2rrd/.cvsignore
    1.1         +42 -0      ossp-pkg/flow2rrd/configure.ac
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/.cvsignore
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 .cvsignore
  --- ossp-pkg/flow2rrd/.cvsignore	26 Dec 2004 13:10:59 -0000	1.1
  +++ ossp-pkg/flow2rrd/.cvsignore	26 Dec 2004 13:12:42 -0000	1.2
  @@ -1,3 +1,4 @@
   Makefile
   flow2rrd
   flow2rrd.1
  +shtool
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/configure.ac
  ============================================================================
  $ cvs diff -u -r0 -r1.1 configure.ac
  --- /dev/null	2004-12-26 14:12:42 +0100
  +++ configure.ac	2004-12-26 14:12:42 +0100
  @@ -0,0 +1,42 @@
  +dnl ##
  +dnl ##  OSSP flow2rrd -- NetFlow to Round-Robin Database (RRD)
  +dnl ##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +dnl ##
  +dnl ##  This file is part of OSSP flow2rrd, a tool for storing NetFlow data
  +dnl ##  into an RRD which can be found at http://www.ossp.org/pkg/tool/flow2rrd/.
  +dnl ##
  +dnl ##  This program is free software; you can redistribute it and/or modify
  +dnl ##  it under the terms of the GNU General Public License as published by
  +dnl ##  the Free Software Foundation; either version 2 of the License, or
  +dnl ##  (at your option) any later version.
  +dnl ##
  +dnl ##  This program is distributed in the hope that it will be useful,
  +dnl ##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +dnl ##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +dnl ##  General Public License for more details.
  +dnl ##
  +dnl ##  You should have received a copy of the GNU General Public License
  +dnl ##  along with this program; if not, write to the Free Software
  +dnl ##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +dnl ##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +dnl ##
  +dnl ##  configure.ac: GNU autoconf specification
  +dnl ##
  +
  +AC_PREREQ(2.53)
  +AC_REVISION($1.0$)
  +AC_INIT(README)
  +
  +FLOW2RRD_VERSION_STR="`./shtool version -l txt -d long VERSION`"
  +./shtool echo -e "Configuring %BOSSP flow2rrd%b (NetFlow to Round-Robin Database), version %B${FLOW2RRD_VERSION_STR}%b"
  +echo "Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>"
  +echo "Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>"
  +AC_SUBST(FLOW2RRD_VERSION_STR)
  +
  +AC_PREFIX_DEFAULT(/usr/local)
  +AC_SET_MAKE
  +
  +AC_CONFIG_FILES(Makefile)
  +AC_OUTPUT
  +
  @@ .

From ossp-cvs-owner@ossp.org  Sun Dec 26 16:20:03 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D1A32764F9; Sun, 26 Dec 2004 16:20:02 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/flow2rrd/ .cvsignore AUTHORS ChangeLog INSTALL Ma...
Message-Id: <20041226152002.D1A32764F9@mail.ossp.org>
Date: Sun, 26 Dec 2004 16:20:02 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Dec-2004 16:20:02
  Branch: HEAD                             Handle: 2004122615200000

  Modified files:
    ossp-pkg/flow2rrd       .cvsignore AUTHORS ChangeLog INSTALL Makefile.in
                            README THANKS TODO configure.ac devtool.conf
                            flow2rrd.pl flow2rrd.pod

  Log:
    more source tree cleanups and enhancements

  Summary:
    Revision    Changes     Path
    1.3         +1  -0      ossp-pkg/flow2rrd/.cvsignore
    1.2         +1  -1      ossp-pkg/flow2rrd/AUTHORS
    1.2         +1  -1      ossp-pkg/flow2rrd/ChangeLog
    1.2         +3  -3      ossp-pkg/flow2rrd/INSTALL
    1.2         +23 -11     ossp-pkg/flow2rrd/Makefile.in
    1.2         +1  -1      ossp-pkg/flow2rrd/README
    1.2         +1  -1      ossp-pkg/flow2rrd/THANKS
    1.2         +1  -1      ossp-pkg/flow2rrd/TODO
    1.2         +24 -1      ossp-pkg/flow2rrd/configure.ac
    1.2         +5  -1      ossp-pkg/flow2rrd/devtool.conf
    1.7         +1  -1      ossp-pkg/flow2rrd/flow2rrd.pl
    1.4         +2  -2      ossp-pkg/flow2rrd/flow2rrd.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/.cvsignore
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 .cvsignore
  --- ossp-pkg/flow2rrd/.cvsignore	26 Dec 2004 13:12:42 -0000	1.2
  +++ ossp-pkg/flow2rrd/.cvsignore	26 Dec 2004 15:20:00 -0000	1.3
  @@ -1,4 +1,5 @@
   Makefile
  +configure
   flow2rrd
   flow2rrd.1
   shtool
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/AUTHORS
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 AUTHORS
  --- ossp-pkg/flow2rrd/AUTHORS	26 Dec 2004 13:10:39 -0000	1.1
  +++ ossp-pkg/flow2rrd/AUTHORS	26 Dec 2004 15:20:00 -0000	1.2
  @@ -4,7 +4,7 @@
    |_||_|_| | |_| |___) |__) |  __/ |  _| | (_) \ V  V / / __/| |  | | | (_| |
     |_|_|_|  \___/|____/____/|_|    |_| |_|\___/ \_/\_/ |_____|_|  |_|  \__,_|
   
  -  OSSP flow2rrd - NetFlow to Round-Robin Database (RRD)
  +  OSSP flow2rrd - NetFlow to Round-Robin Database
   
     This is a list of authors who have written
     or edited parts of the OSSP flow2rrd sources.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ChangeLog
  --- ossp-pkg/flow2rrd/ChangeLog	26 Dec 2004 13:10:39 -0000	1.1
  +++ ossp-pkg/flow2rrd/ChangeLog	26 Dec 2004 15:20:00 -0000	1.2
  @@ -4,7 +4,7 @@
    |_||_|_| | |_| |___) |__) |  __/ |  _| | (_) \ V  V / / __/| |  | | | (_| |
     |_|_|_|  \___/|____/____/|_|    |_| |_|\___/ \_/\_/ |_____|_|  |_|  \__,_|
   
  -  OSSP flow2rrd - NetFlow to Round-Robin Database (RRD)
  +  OSSP flow2rrd - NetFlow to Round-Robin Database
   
     ChangeLog
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/INSTALL
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 INSTALL
  --- ossp-pkg/flow2rrd/INSTALL	26 Dec 2004 13:10:39 -0000	1.1
  +++ ossp-pkg/flow2rrd/INSTALL	26 Dec 2004 15:20:00 -0000	1.2
  @@ -4,12 +4,12 @@
    |_||_|_| | |_| |___) |__) |  __/ |  _| | (_) \ V  V / / __/| |  | | | (_| |
     |_|_|_|  \___/|____/____/|_|    |_| |_|\___/ \_/\_/ |_____|_|  |_|  \__,_|
   
  -  OSSP flow2rrd - NetFlow to Round-Robin Database (RRD)
  +  OSSP flow2rrd - NetFlow to Round-Robin Database
   
     INSTALL
   
     The Convenient Way (with OpenPKG)
  -  =================================
  +  ---------------------------------
   
     Just install the OpenPKG "flow2rrd" packages
     and its dependencies and you are done.
  @@ -24,7 +24,7 @@
     $ <prefix>/etc/rc flowtools start
   
     The Cruel Way (Manually)
  -  ========================
  +  ------------------------
   
     ...FIXME...
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 Makefile.in
  --- ossp-pkg/flow2rrd/Makefile.in	26 Dec 2004 13:10:39 -0000	1.1
  +++ ossp-pkg/flow2rrd/Makefile.in	26 Dec 2004 15:20:00 -0000	1.2
  @@ -1,5 +1,5 @@
   ##
  -##  OSSP flow2rrd -- NetFlow to Round-Robin Database (RRD)
  +##  OSSP flow2rrd -- NetFlow to Round-Robin Database
   ##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
   ##
  @@ -31,6 +31,7 @@
   prefix      = @prefix@
   exec_prefix = @exec_prefix@
   bindir      = @bindir@
  +sysconfdir  = @sysconfdir@
   libdir      = @libdir@
   includedir  = @includedir@
   mandir      = @mandir@
  @@ -43,10 +44,21 @@
   PERL        = @PERL@
   POD2MAN     = @POD2MAN@
   
  -#   default target
  +#   default targets
   all: flow2rrd flow2rrd.1
   
  +#   generate program
  +flow2rrd: flow2rrd.pl
  +	@echo "generating: flow2rrd <-- flow2rrd.pl"; \
  +	V=`$(SHTOOL) version -l txt -d long VERSION`; \
  +	sed -e "s;@PERL\@;$(PERL);g" \
  +	    -e "s;@POD2MAN\@;$(POD2MAN);g" \
  +	    -e "s;@VERSION\@;$$V;g" \
  +	    <flow2rrd.pl >flow2rrd && chmod a+x flow2rrd
  +
  +#   generate manual page
   flow2rrd.1: flow2rrd.pod
  +	@echo "generating: flow2rrd.1 <-- flow2rrd.pod"; \
   	V1=`$(SHTOOL) version -l txt -d short VERSION`; \
   	V2=`$(SHTOOL) version -l txt -d long VERSION`; \
   	D=`$(SHTOOL) version -l txt -d long VERSION | sed -e 's;.*(;;' -e 's;).*;;'`; \
  @@ -55,25 +67,25 @@
   	           --release="$$D" --date="OSSP flow2rrd $$V1" flow2rrd.pod | \
   	sed -e "s;FLOW2RRD_VERSION_STR;$$V2;" >flow2rrd.1
   
  -flow2rrd: flow2rrd.pl
  -	sed -e 's;@PERL@;$(PERL);g' \
  -	    -e 's;@POD2MAN@;$(POD2MAN);g' \
  -	    <flow2rrd.pl >flow2rrd
  -
   #   perform installation procedure
   install:
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man1
  -	$(SHTOOL) install -c -m 755 flow2rrd $(DESTDIR)$(bindir)/flow2rrd
  -	$(SHTOOL) install -c -m 644 flow2rrd.1 $(DESTDIR)$(mandir)/man1/flow2rrd.1
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(sysconfdir)
  +	$(SHTOOL) install -c -m 755 flow2rrd $(DESTDIR)$(bindir)/
  +	$(SHTOOL) install -c -m 644 flow2rrd.1 $(DESTDIR)$(mandir)/man1/
  +	$(SHTOOL) install -c -m 644 flow2rrd.cfg $(DESTDIR)$(sysconfdir)/
   
   #   perform uninstallation procedure
   uninstall:
  -	-$(RM) $(DESTDIR)$(mandir)/bin/flow2rrd
  +	-$(RM) $(DESTDIR)$(bindir)/flow2rrd
   	-$(RM) $(DESTDIR)$(mandir)/man1/flow2rrd.1
  -	-$(RMDIR) $(DESTDIR)$(mandir)/man1 >/dev/null 2>&1 || $(TRUE)
  +	-$(RM) $(DESTDIR)$(sysconfdir)/flow2rrd.cfg
   	-$(RMDIR) $(DESTDIR)$(bindir) >/dev/null 2>&1 || $(TRUE)
  +	-$(RMDIR) $(DESTDIR)$(mandir)/man1 >/dev/null 2>&1 || $(TRUE)
  +	-$(RMDIR) $(DESTDIR)$(mandir) >/dev/null 2>&1 || $(TRUE)
  +	-$(RMDIR) $(DESTDIR)$(sysconfdir) >/dev/null 2>&1 || $(TRUE)
   	-$(RMDIR) $(DESTDIR)$(prefix) >/dev/null 2>&1 || $(TRUE)
   
   #   perform build clean up procedure
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/README
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 README
  --- ossp-pkg/flow2rrd/README	26 Dec 2004 13:10:39 -0000	1.1
  +++ ossp-pkg/flow2rrd/README	26 Dec 2004 15:20:00 -0000	1.2
  @@ -4,7 +4,7 @@
    |_||_|_| | |_| |___) |__) |  __/ |  _| | (_) \ V  V / / __/| |  | | | (_| |
     |_|_|_|  \___/|____/____/|_|    |_| |_|\___/ \_/\_/ |_____|_|  |_|  \__,_|
   
  -  OSSP flow2rrd - NetFlow to Round-Robin Database (RRD)
  +  OSSP flow2rrd - NetFlow to Round-Robin Database
     Version 0.1.0 (XX-Oct-2004)
   
     ABSTRACT
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/THANKS
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 THANKS
  --- ossp-pkg/flow2rrd/THANKS	26 Dec 2004 13:10:39 -0000	1.1
  +++ ossp-pkg/flow2rrd/THANKS	26 Dec 2004 15:20:00 -0000	1.2
  @@ -4,7 +4,7 @@
    |_||_|_| | |_| |___) |__) |  __/ |  _| | (_) \ V  V / / __/| |  | | | (_| |
     |_|_|_|  \___/|____/____/|_|    |_| |_|\___/ \_/\_/ |_____|_|  |_|  \__,_|
   
  -  OSSP flow2rrd - NetFlow to Round-Robin Database (RRD)
  +  OSSP flow2rrd - NetFlow to Round-Robin Database
   
     THANKS
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/TODO
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 TODO
  --- ossp-pkg/flow2rrd/TODO	26 Dec 2004 13:10:39 -0000	1.1
  +++ ossp-pkg/flow2rrd/TODO	26 Dec 2004 15:20:00 -0000	1.2
  @@ -4,7 +4,7 @@
    |_||_|_| | |_| |___) |__) |  __/ |  _| | (_) \ V  V / / __/| |  | | | (_| |
     |_|_|_|  \___/|____/____/|_|    |_| |_|\___/ \_/\_/ |_____|_|  |_|  \__,_|
   
  -  OSSP flow2rrd - NetFlow to Round-Robin Database (RRD)
  +  OSSP flow2rrd - NetFlow to Round-Robin Database
   
     - color themes still hardcoded!?
     - implement "*" number
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/configure.ac
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 configure.ac
  --- ossp-pkg/flow2rrd/configure.ac	26 Dec 2004 13:12:42 -0000	1.1
  +++ ossp-pkg/flow2rrd/configure.ac	26 Dec 2004 15:20:00 -0000	1.2
  @@ -1,5 +1,5 @@
   dnl ##
  -dnl ##  OSSP flow2rrd -- NetFlow to Round-Robin Database (RRD)
  +dnl ##  OSSP flow2rrd -- NetFlow to Round-Robin Database
   dnl ##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
   dnl ##
  @@ -37,6 +37,29 @@
   AC_PREFIX_DEFAULT(/usr/local)
   AC_SET_MAKE
   
  +AC_PATH_PROGS(PERL, perl5 perl, NA) 
  +AC_PATH_PROGS(POD2MAN, pod2man, NA) 
  +
  +AC_MSG_CHECKING(for perl program to use)
  +AC_ARG_WITH([perl],
  +    AC_HELP_STRING([--with-perl=PATH], [force the use of a particular perl program]),
  +    PERL="$withval")
  +if test ".$PERL" = .NA; then
  +    AC_MSG_ERROR([program 'perl' not found])
  +fi
  +AC_MSG_RESULT($PERL)
  +AC_SUBST(PERL)
  +
  +AC_MSG_CHECKING(for pod2man program to use)
  +AC_ARG_WITH([pod2man],
  +    AC_HELP_STRING([--with-pod2man=PATH], [force the use of a particular pod2man program]),
  +    POD2MAN="$withval")
  +if test ".$POD2MAN" = .NA; then
  +    POD2MAN=`echo $PERL | sed -e 's;/perl5*$;/pod2man;'`
  +fi
  +AC_MSG_RESULT($POD2MAN)
  +AC_SUBST(POD2MAN)
  +
   AC_CONFIG_FILES(Makefile)
   AC_OUTPUT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.conf
  --- ossp-pkg/flow2rrd/devtool.conf	26 Dec 2004 13:10:39 -0000	1.1
  +++ ossp-pkg/flow2rrd/devtool.conf	26 Dec 2004 15:20:00 -0000	1.2
  @@ -11,7 +11,11 @@
       @autoclean shtool
   
   %configure
  -    ./configure --prefix=/tmp/flow2rrd "$@"
  +    ./configure \
  +        --prefix=/tmp/flow2rrd \
  +        --with-perl=/usr/opkg/bin/perl \
  +        --with-pod2man=/usr/opkg/bin/pod2man \
  +        "$@"
   
   %version
       ./shtool version -l txt -n "OSSP flow2rrd" -e VERSION
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/flow2rrd.pl
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 flow2rrd.pl
  --- ossp-pkg/flow2rrd/flow2rrd.pl	26 Dec 2004 13:10:39 -0000	1.6
  +++ ossp-pkg/flow2rrd/flow2rrd.pl	26 Dec 2004 15:20:00 -0000	1.7
  @@ -1,6 +1,6 @@
   #!@PERL@
   ##
  -##  OSSP flow2rrd -- NetFlow to Round-Robin Database (RRD)
  +##  OSSP flow2rrd -- NetFlow to Round-Robin Database
   ##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
   ##
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/flow2rrd.pod
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 flow2rrd.pod
  --- ossp-pkg/flow2rrd/flow2rrd.pod	26 Dec 2004 13:10:39 -0000	1.3
  +++ ossp-pkg/flow2rrd/flow2rrd.pod	26 Dec 2004 15:20:00 -0000	1.4
  @@ -1,5 +1,5 @@
   ##
  -##  OSSP flow2rrd -- NetFlow to Round-Robin Database (RRD)
  +##  OSSP flow2rrd -- NetFlow to Round-Robin Database
   ##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
   ##
  @@ -28,7 +28,7 @@
   
   =head1 NAME
   
  -B<OSSP flow2rrd> - NetFlow to Round-Robin Database (RRD)
  +B<OSSP flow2rrd> - NetFlow to Round-Robin Database
   
   =head1 VERSION
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Dec 26 16:20:35 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 17BD0764FF; Sun, 26 Dec 2004 16:20:35 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/flow2rrd/ README VERSION
Message-Id: <20041226152035.17BD0764FF@mail.ossp.org>
Date: Sun, 26 Dec 2004 16:20:35 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Dec-2004 16:20:35
  Branch: HEAD                             Handle: 2004122615203400

  Modified files:
    ossp-pkg/flow2rrd       README VERSION

  Log:
    fix version

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/flow2rrd/README
    1.2         +2  -2      ossp-pkg/flow2rrd/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/README
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 README
  --- ossp-pkg/flow2rrd/README	26 Dec 2004 15:20:00 -0000	1.2
  +++ ossp-pkg/flow2rrd/README	26 Dec 2004 15:20:34 -0000	1.3
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|    |_| |_|\___/ \_/\_/ |_____|_|  |_|  \__,_|
   
     OSSP flow2rrd - NetFlow to Round-Robin Database
  -  Version 0.1.0 (XX-Oct-2004)
  +  Version 0.9.0 (26-Dec-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/VERSION
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 VERSION
  --- ossp-pkg/flow2rrd/VERSION	26 Dec 2004 13:10:39 -0000	1.1
  +++ ossp-pkg/flow2rrd/VERSION	26 Dec 2004 15:20:34 -0000	1.2
  @@ -1,6 +1,6 @@
   
  -  VERSION -- Version Information for OSSP svs (syntax: Text)
  +  VERSION -- Version Information for OSSP flow2rrd (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP svs, Version 1.0.0 (14-Dec-2004)
  +  This is OSSP flow2rrd, Version 0.9.0 (26-Dec-2004)
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Dec 26 16:24:58 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4D1C2764F9; Sun, 26 Dec 2004 16:24:58 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/flow2rrd/ flow2rrd.cfg
Message-Id: <20041226152458.4D1C2764F9@mail.ossp.org>
Date: Sun, 26 Dec 2004 16:24:58 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Dec-2004 16:24:58
  Branch: HEAD                             Handle: 2004122615245700

  Modified files:
    ossp-pkg/flow2rrd       flow2rrd.cfg

  Log:
    make sample configuration more generic

  Summary:
    Revision    Changes     Path
    1.3         +14 -14     ossp-pkg/flow2rrd/flow2rrd.cfg
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/flow2rrd.cfg
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 flow2rrd.cfg
  --- ossp-pkg/flow2rrd/flow2rrd.cfg	23 Dec 2004 21:08:32 -0000	1.2
  +++ ossp-pkg/flow2rrd/flow2rrd.cfg	26 Dec 2004 15:24:57 -0000	1.3
  @@ -42,31 +42,31 @@
   Service  irc      tcp:194 tcp:6665 tcp:6666 tcp:6667 tcp:6668 tcp:6669;
   
   #   Host Definitions
  -Host en2.engelschall.com {
  -    Target en2.engelschall.com {
  -        Network 195.30.6.130/32;
  +Host host1.example.com {
  +    Target host1.example.com {
  +        Network 192.168.0.1/32;
           Service icmp vrrp dns ntp ssh smtp;
       };
  -    Target visp1.engelschall.com {
  -        Network 195.30.6.140/32 195.30.6.144/32;
  +    Target service1.example.com {
  +        Network 10.0.0.1/32 10.0.0.2/32;
           Service dns smtp uucp;
       };
  -    Target lotmjd1.lotterer.net {
  -        Network 195.30.6.148/32;
  +    Target service2.example.com {
  +        Network 10.0.0.3/32
           Service dns smtp;
       };
   };
  -Host en3.engelschall.com {
  -    Target en3.engelschall.com {
  -        Network 195.30.6.132/32;
  +Host host2.example.com {
  +    Target host2.example.com {
  +        Network 192.168.0.2/32;
           Service icmp vrrp dns ntp ssh smtp;
       };
  -    Target visp2.engelschall.com {
  -        Network 195.30.6.141/32 195.30.6.145/32;
  +    Target service3.example.com {
  +        Network 10.0.0.4/32 10.0.0.5/32;
           Service dns smtp uucp;
       };
  -    Target lotmjd2.lotterer.net {
  -        Network 195.30.6.149/32;
  +    Target service4.example.com {
  +        Network 10.0.0.6/32;
           Service dns smtp;
       };
   };
  @@ .

From ossp-cvs-owner@ossp.org  Sun Dec 26 18:09:14 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9D9F7764FD; Sun, 26 Dec 2004 18:09:14 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/flow2rrd/ flow2rrd.pl flow2rrd.pod
Message-Id: <20041226170914.9D9F7764FD@mail.ossp.org>
Date: Sun, 26 Dec 2004 18:09:14 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Dec-2004 18:09:14
  Branch: HEAD                             Handle: 2004122617091300

  Modified files:
    ossp-pkg/flow2rrd       flow2rrd.pl flow2rrd.pod

  Log:
    fix --config processing

  Summary:
    Revision    Changes     Path
    1.8         +3  -3      ossp-pkg/flow2rrd/flow2rrd.pl
    1.5         +1  -1      ossp-pkg/flow2rrd/flow2rrd.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/flow2rrd.pl
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 flow2rrd.pl
  --- ossp-pkg/flow2rrd/flow2rrd.pl	26 Dec 2004 15:20:00 -0000	1.7
  +++ ossp-pkg/flow2rrd/flow2rrd.pl	26 Dec 2004 17:09:13 -0000	1.8
  @@ -70,7 +70,7 @@
   my %getopt_spec = (
       'h|help'     => \$opt->{-help},
       'v|version'  => \$opt->{-version},
  -    'c|config=s' => \$opt->{-config},
  +    'f|config=s' => \$opt->{-config},
       's|store'    => \$opt->{-store},
       'g|graph'    => \$opt->{-graph},
       'c|cgi'      => \$opt->{-cgi},
  @@ -82,7 +82,7 @@
             "available options are:\n" .
             "  -h,--help              print out this usage page\n" .
             "  -v,--version           print program version\n" .
  -          "  -c,--config FILE       read this configuration file only\n" .
  +          "  -f,--config FILE       read this configuration file only\n" .
             "  -s,--store             store NetFlow values into RRD\n" .
             "  -g,--graph             produce RRD graphs\n" .
             "  -c,--cgi               produce Web user interface\n";
  @@ -801,7 +801,7 @@
           $graph =~ s|\@|\@$tmpfile:|s;
   
           #   generate graph image
  -        my $rc = system("GATEWAY_INTERFACE=none $0 --graph $graph");
  +        my $rc = system("GATEWAY_INTERFACE=none $0 --config=\"$opt->{-config}\" --graph $graph");
           if ($rc != 0) { # or not -s $tmpfile) {
               die "failed to generate graph image: $!";
           }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/flow2rrd.pod
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 flow2rrd.pod
  --- ossp-pkg/flow2rrd/flow2rrd.pod	26 Dec 2004 15:20:00 -0000	1.4
  +++ ossp-pkg/flow2rrd/flow2rrd.pod	26 Dec 2004 17:09:13 -0000	1.5
  @@ -78,7 +78,7 @@
   
   =over 4
   
  -=item B<-c>|B<--config> I<file>
  +=item B<-f>|B<--config> I<file>
   
   Specifies the path to the F<flow2rrd.cfg> configuration file.
   See B<CONFIGURATION> section below for details on the
  @@ .

From ossp-cvs-owner@ossp.org  Sun Dec 26 18:10:23 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9FAA7764FD; Sun, 26 Dec 2004 18:10:23 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/flow2rrd/ TODO
Message-Id: <20041226171023.9FAA7764FD@mail.ossp.org>
Date: Sun, 26 Dec 2004 18:10:23 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Dec-2004 18:10:23
  Branch: HEAD                             Handle: 2004122617102300

  Modified files:
    ossp-pkg/flow2rrd       TODO

  Log:
    sort out what is really essential and what is just nice

  Summary:
    Revision    Changes     Path
    1.3         +9  -2      ossp-pkg/flow2rrd/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/TODO
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 TODO
  --- ossp-pkg/flow2rrd/TODO	26 Dec 2004 15:20:00 -0000	1.2
  +++ ossp-pkg/flow2rrd/TODO	26 Dec 2004 17:10:23 -0000	1.3
  @@ -6,11 +6,18 @@
   
     OSSP flow2rrd - NetFlow to Round-Robin Database
   
  +  TODO
  +  ----
  +
     - color themes still hardcoded!?
     - implement "*" number
     - unknown data handling!
  -  - finish/extend manual page flow2rrd.pod
  +  - OSSP website
  +
  +  CANDO
  +  -----
  +
     - larger/smaller buttons on explore website
     - back button on explore website
  -  - OSSP website
  +  - extend manual page flow2rrd.pod?
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Dec 26 18:18:07 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 24B4B764FE; Sun, 26 Dec 2004 18:18:07 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/SHARE/ ossp_navbar.wml ossp-web/new/ news.txt oss...
Message-Id: <20041226171807.24B4B764FE@mail.ossp.org>
Date: Sun, 26 Dec 2004 18:18:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   26-Dec-2004 18:18:07
  Branch: HEAD                             Handle: 2004122617180501

  Added files:
    ossp-web/pkg/tool/flow2rrd
                            index.wml
  Modified files:
    ossp-web/SHARE          ossp_navbar.wml
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml

  Log:
    release OSSP flow2rrd 0.9.0

  Summary:
    Revision    Changes     Path
    1.13        +1  -0      ossp-web/SHARE/ossp_navbar.wml
    1.112       +1  -0      ossp-web/new/news.txt
    1.1         +37 -0      ossp-web/pkg/tool/flow2rrd/index.wml
    1.43        +3  -0      ossp-web/pkg/tool/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/SHARE/ossp_navbar.wml
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 ossp_navbar.wml
  --- ossp-web/SHARE/ossp_navbar.wml	14 Dec 2004 19:26:36 -0000	1.12
  +++ ossp-web/SHARE/ossp_navbar.wml	26 Dec 2004 17:18:05 -0000	1.13
  @@ -236,6 +236,7 @@
     <navbar:button txt="OSSP svs"         url=pkg/tool/svs/            id=pkg:tool:svs>
     <navbar:button txt="OSSP eperl"       url=pkg/tool/eperl/          id=pkg:tool:eperl>
     <navbar:button txt="OSSP petidomo"    url=pkg/tool/petidomo/       id=pkg:tool:petidomo>
  +  <navbar:button txt="OSSP flow2rrd"    url=pkg/tool/flow2rrd/       id=pkg:tool:flow2rrd>
     <navbar:button txt="OSSP xenia"       url=pkg/tool/xenia/          id=pkg:tool:xenia>
     <navbar:button txt="OSSP rc"          url=pkg/tool/rc/             id=pkg:tool:rc>
     <navbar:button txt="OSSP dsotool"     url=pkg/tool/dsotool/        id=pkg:tool:dsotool>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.111 -r1.112 news.txt
  --- ossp-web/new/news.txt	19 Dec 2004 19:38:25 -0000	1.111
  +++ ossp-web/new/news.txt	26 Dec 2004 17:18:05 -0000	1.112
  @@ -1,3 +1,4 @@
  +26-Dec-2004: Released T<OSSP flow2rrd> 0.9.0
   19-Dec-2004: Released L<OSSP cfg> 0.9.7
   14-Dec-2004: Released T<OSSP svs> 1.0.0
   04-Dec-2004: Released L<OSSP cfg> 0.9.6
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/flow2rrd/index.wml
  ============================================================================
  $ cvs diff -u -r0 -r1.1 index.wml
  --- /dev/null	2004-12-26 18:18:06 +0100
  +++ index.wml	2004-12-26 18:18:07 +0100
  @@ -0,0 +1,37 @@
  +
  +#use wml::ossp area=pkg:tool subarea=flow2rrd
  +
  +<title>OSSP flow2rrd</title>
  +
  +<h1>NetFlow to Round-Robin Database</h1>
  +
  +<h2>Abstract</h2>
  +
  +OSSP flow2rrd is a companion tool to the Flow-Tools toolkit for
  +storing NetFlow network traffic data in an accumulating fixed-size
  +RRDTool Round-Robin-Database (RRD) for visualization purposes.
  +
  +<h2>Authors</h2>
  +
  +<pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  +
  +<h2>Status</h2>
  +
  +<pkg_status
  +    stable="none" stable_date="none"
  +    unstable="0.9.0" unstable_date="26-Dec-2004"
  +	done=90>
  +
  +<h2>Source</h2>
  +
  +<pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/tool/flow2rrd/
  +    url=$(FTP_ROOT_URL)/pkg/tool/flow2rrd/
  +    directory=$(FTP_ROOT_DIR)/pkg/tool/flow2rrd/
  +    files="flow2rrd-*.tar.gz" 
  +	stable="none" unstable="flow2rrd-0.9.0.tar.gz">
  +	
  +<h2>Donation</h2>
  +
  +<pkg_donation name="flow2rrd" return="$(BASE_URL)/pkg/tool/flow2rrd/">
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.42 -r1.43 index.wml
  --- ossp-web/pkg/tool/index.wml	14 Dec 2004 19:34:17 -0000	1.42
  +++ ossp-web/pkg/tool/index.wml	26 Dec 2004 17:18:06 -0000	1.43
  @@ -30,6 +30,9 @@
     <pkg_item name="petidomo" longname="OSSP petidomo" type="tool" derived=yes
               desc="Mailing List Manager"
   	        done=95 stable="none" unstable="4.0b1">
  +  <pkg_item name="flow2rrd" longname="OSSP flow2rrd" type="tool"
  +            desc="NetFlow to Round-Robin Database"
  +	        done=90 stable="none" unstable="0.9.0">
     <pkg_item name="xenia" longname="OSSP xenia" type="tool"
               desc="CVS Browsing Server"
   	        done=20 stable="none" unstable="none">
  @@ .

From ossp-cvs-owner@ossp.org  Sun Dec 26 19:40:40 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8D2F8764FF; Sun, 26 Dec 2004 19:40:40 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/flow2rrd/ ChangeLog flow2rrd.cfg
Message-Id: <20041226184040.8D2F8764FF@mail.ossp.org>
Date: Sun, 26 Dec 2004 19:40:40 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Dec-2004 19:40:40
  Branch: HEAD                             Handle: 2004122618403900

  Modified files:
    ossp-pkg/flow2rrd       ChangeLog flow2rrd.cfg

  Log:
    Fix syntax of default configuration

  Summary:
    Revision    Changes     Path
    1.3         +6  -1      ossp-pkg/flow2rrd/ChangeLog
    1.4         +1  -1      ossp-pkg/flow2rrd/flow2rrd.cfg
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ChangeLog
  --- ossp-pkg/flow2rrd/ChangeLog	26 Dec 2004 15:20:00 -0000	1.2
  +++ ossp-pkg/flow2rrd/ChangeLog	26 Dec 2004 18:40:39 -0000	1.3
  @@ -8,7 +8,12 @@
   
     ChangeLog
   
  -  Changes between *GENESIS* and 0.9.0 (18-Dec-2003 to 24-Dec-2004):
  +  Changes between 0.9.0 and 0.9.1 (24-Dec-2004 to xx-Dec-2004):
  +
  +    *) Fix syntax of default configuration.
  +       [Ralf S. Engelschall]
  +
  +  Changes between *GENESIS* and 0.9.0 (18-Dec-2004 to 24-Dec-2004):
   
       *) Created the initial version of OSSP flow2rrd.
          [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/flow2rrd.cfg
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 flow2rrd.cfg
  --- ossp-pkg/flow2rrd/flow2rrd.cfg	26 Dec 2004 15:24:57 -0000	1.3
  +++ ossp-pkg/flow2rrd/flow2rrd.cfg	26 Dec 2004 18:40:39 -0000	1.4
  @@ -52,7 +52,7 @@
           Service dns smtp uucp;
       };
       Target service2.example.com {
  -        Network 10.0.0.3/32
  +        Network 10.0.0.3/32;
           Service dns smtp;
       };
   };
  @@ .

From ossp-cvs-owner@ossp.org  Sun Dec 26 19:52:46 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 21661764FF; Sun, 26 Dec 2004 19:52:46 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/flow2rrd/ ChangeLog Makefile.in flow2rrd.cfg flow...
Message-Id: <20041226185246.21661764FF@mail.ossp.org>
Date: Sun, 26 Dec 2004 19:52:46 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Dec-2004 19:52:46
  Branch: HEAD                             Handle: 2004122618524500

  Modified files:
    ossp-pkg/flow2rrd       ChangeLog Makefile.in flow2rrd.cfg flow2rrd.pl

  Log:
    1. Adjust default configuration path.
    2. Create "localstatedir" under "make install" and
       place default RRD into this directory.

  Summary:
    Revision    Changes     Path
    1.4         +7  -0      ossp-pkg/flow2rrd/ChangeLog
    1.3         +20 -16     ossp-pkg/flow2rrd/Makefile.in
    1.5         +1  -1      ossp-pkg/flow2rrd/flow2rrd.cfg
    1.9         +1  -1      ossp-pkg/flow2rrd/flow2rrd.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ChangeLog
  --- ossp-pkg/flow2rrd/ChangeLog	26 Dec 2004 18:40:39 -0000	1.3
  +++ ossp-pkg/flow2rrd/ChangeLog	26 Dec 2004 18:52:45 -0000	1.4
  @@ -10,6 +10,13 @@
   
     Changes between 0.9.0 and 0.9.1 (24-Dec-2004 to xx-Dec-2004):
   
  +    *) Adjust default configuration path.
  +       [Ralf S. Engelschall]
  +
  +    *) Create "localstatedir" under "make install" and
  +       place default RRD into this directory.
  +       [Ralf S. Engelschall]
  +
       *) Fix syntax of default configuration.
          [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 Makefile.in
  --- ossp-pkg/flow2rrd/Makefile.in	26 Dec 2004 15:20:00 -0000	1.2
  +++ ossp-pkg/flow2rrd/Makefile.in	26 Dec 2004 18:52:45 -0000	1.3
  @@ -27,22 +27,23 @@
   @SET_MAKE@
   
   #   installation paths
  -DESTDIR     =
  -prefix      = @prefix@
  -exec_prefix = @exec_prefix@
  -bindir      = @bindir@
  -sysconfdir  = @sysconfdir@
  -libdir      = @libdir@
  -includedir  = @includedir@
  -mandir      = @mandir@
  +DESTDIR       =
  +prefix        = @prefix@
  +exec_prefix   = @exec_prefix@
  +bindir        = @bindir@
  +sysconfdir    = @sysconfdir@
  +libdir        = @libdir@
  +includedir    = @includedir@
  +mandir        = @mandir@
  +localstatedir = @localstatedir@
   
   #   build tools
  -RM          = rm -f
  -RMDIR       = rmdir
  -SHTOOL      = ./shtool
  -TRUE        = true
  -PERL        = @PERL@
  -POD2MAN     = @POD2MAN@
  +RM            = rm -f
  +RMDIR         = rmdir
  +SHTOOL        = ./shtool
  +TRUE          = true
  +PERL          = @PERL@
  +POD2MAN       = @POD2MAN@
   
   #   default targets
   all: flow2rrd flow2rrd.1
  @@ -53,6 +54,7 @@
   	V=`$(SHTOOL) version -l txt -d long VERSION`; \
   	sed -e "s;@PERL\@;$(PERL);g" \
   	    -e "s;@POD2MAN\@;$(POD2MAN);g" \
  +	    -e "s;@SYSCONFDIR\@;$(sysconfdir);g" \
   	    -e "s;@VERSION\@;$$V;g" \
   	    <flow2rrd.pl >flow2rrd && chmod a+x flow2rrd
   
  @@ -68,14 +70,15 @@
   	sed -e "s;FLOW2RRD_VERSION_STR;$$V2;" >flow2rrd.1
   
   #   perform installation procedure
  -install:
  +install: all
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man1
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(sysconfdir)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(localstatedir)
   	$(SHTOOL) install -c -m 755 flow2rrd $(DESTDIR)$(bindir)/
   	$(SHTOOL) install -c -m 644 flow2rrd.1 $(DESTDIR)$(mandir)/man1/
  -	$(SHTOOL) install -c -m 644 flow2rrd.cfg $(DESTDIR)$(sysconfdir)/
  +	$(SHTOOL) install -c -m 644 -e 's;@LOCALSTATEDIR\@;$(localstatedir);g' flow2rrd.cfg $(DESTDIR)$(sysconfdir)/
   
   #   perform uninstallation procedure
   uninstall:
  @@ -86,6 +89,7 @@
   	-$(RMDIR) $(DESTDIR)$(mandir)/man1 >/dev/null 2>&1 || $(TRUE)
   	-$(RMDIR) $(DESTDIR)$(mandir) >/dev/null 2>&1 || $(TRUE)
   	-$(RMDIR) $(DESTDIR)$(sysconfdir) >/dev/null 2>&1 || $(TRUE)
  +	-$(RMDIR) $(DESTDIR)$(localstatedir) >/dev/null 2>&1 || $(TRUE)
   	-$(RMDIR) $(DESTDIR)$(prefix) >/dev/null 2>&1 || $(TRUE)
   
   #   perform build clean up procedure
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/flow2rrd.cfg
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 flow2rrd.cfg
  --- ossp-pkg/flow2rrd/flow2rrd.cfg	26 Dec 2004 18:40:39 -0000	1.4
  +++ ossp-pkg/flow2rrd/flow2rrd.cfg	26 Dec 2004 18:52:45 -0000	1.5
  @@ -3,7 +3,7 @@
   ##
   
   #   Round-Robin Database
  -Database /var/tmp/flow2rrd.rrd;
  +Database @LOCALSTATEDIR@/flow2rrd.rrd;
   
   #   Protocol Definitions
   Protocol icmp     1;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/flow2rrd.pl
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 flow2rrd.pl
  --- ossp-pkg/flow2rrd/flow2rrd.pl	26 Dec 2004 17:09:13 -0000	1.8
  +++ ossp-pkg/flow2rrd/flow2rrd.pl	26 Dec 2004 18:52:45 -0000	1.9
  @@ -59,7 +59,7 @@
   my $opt = {
       -help     => 0,
       -version  => 0,
  -    -config   => 'flow2rrd.cfg',
  +    -config   => '@SYSCONFDIR@/flow2rrd.cfg',
       -store    => 0,
       -graph    => 0,
       -cgi      => (($ENV{'GATEWAY_INTERFACE'} || "") eq 'CGI/1.1' ? 1 : 0)
  @@ .

From ossp-cvs-owner@ossp.org  Sun Dec 26 19:53:20 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 383C4764FF; Sun, 26 Dec 2004 19:53:20 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/flow2rrd/ ChangeLog README VERSION
Message-Id: <20041226185320.383C4764FF@mail.ossp.org>
Date: Sun, 26 Dec 2004 19:53:20 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Dec-2004 19:53:20
  Branch: HEAD                             Handle: 2004122618531900

  Modified files:
    ossp-pkg/flow2rrd       ChangeLog README VERSION

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.5         +2  -2      ossp-pkg/flow2rrd/ChangeLog
    1.4         +1  -1      ossp-pkg/flow2rrd/README
    1.3         +1  -1      ossp-pkg/flow2rrd/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ChangeLog
  --- ossp-pkg/flow2rrd/ChangeLog	26 Dec 2004 18:52:45 -0000	1.4
  +++ ossp-pkg/flow2rrd/ChangeLog	26 Dec 2004 18:53:19 -0000	1.5
  @@ -8,7 +8,7 @@
   
     ChangeLog
   
  -  Changes between 0.9.0 and 0.9.1 (24-Dec-2004 to xx-Dec-2004):
  +  Changes between 0.9.0 and 0.9.1 (26-Dec-2004 to 26-Dec-2004):
   
       *) Adjust default configuration path.
          [Ralf S. Engelschall]
  @@ -20,7 +20,7 @@
       *) Fix syntax of default configuration.
          [Ralf S. Engelschall]
   
  -  Changes between *GENESIS* and 0.9.0 (18-Dec-2004 to 24-Dec-2004):
  +  Changes between *GENESIS* and 0.9.0 (18-Dec-2004 to 26-Dec-2004):
   
       *) Created the initial version of OSSP flow2rrd.
          [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/README
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 README
  --- ossp-pkg/flow2rrd/README	26 Dec 2004 15:20:34 -0000	1.3
  +++ ossp-pkg/flow2rrd/README	26 Dec 2004 18:53:19 -0000	1.4
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|    |_| |_|\___/ \_/\_/ |_____|_|  |_|  \__,_|
   
     OSSP flow2rrd - NetFlow to Round-Robin Database
  -  Version 0.9.0 (26-Dec-2004)
  +  Version 0.9.1 (26-Dec-2004)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/VERSION
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 VERSION
  --- ossp-pkg/flow2rrd/VERSION	26 Dec 2004 15:20:34 -0000	1.2
  +++ ossp-pkg/flow2rrd/VERSION	26 Dec 2004 18:53:19 -0000	1.3
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP flow2rrd (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP flow2rrd, Version 0.9.0 (26-Dec-2004)
  +  This is OSSP flow2rrd, Version 0.9.1 (26-Dec-2004)
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Dec 26 19:55:45 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B182C764FF; Sun, 26 Dec 2004 19:55:45 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/tool/flow2rrd/ index.w...
Message-Id: <20041226185545.B182C764FF@mail.ossp.org>
Date: Sun, 26 Dec 2004 19:55:45 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   26-Dec-2004 19:55:45
  Branch: HEAD                             Handle: 2004122618554401

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool/flow2rrd
                            index.wml

  Log:
    release OSSP flow2rrd 0.9.1

  Summary:
    Revision    Changes     Path
    1.113       +1  -0      ossp-web/new/news.txt
    1.2         +2  -2      ossp-web/pkg/tool/flow2rrd/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.112 -r1.113 news.txt
  --- ossp-web/new/news.txt	26 Dec 2004 17:18:05 -0000	1.112
  +++ ossp-web/new/news.txt	26 Dec 2004 18:55:44 -0000	1.113
  @@ -1,3 +1,4 @@
  +26-Dec-2004: Released T<OSSP flow2rrd> 0.9.1
   26-Dec-2004: Released T<OSSP flow2rrd> 0.9.0
   19-Dec-2004: Released L<OSSP cfg> 0.9.7
   14-Dec-2004: Released T<OSSP svs> 1.0.0
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/flow2rrd/index.wml
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/tool/flow2rrd/index.wml	26 Dec 2004 17:18:06 -0000	1.1
  +++ ossp-web/pkg/tool/flow2rrd/index.wml	26 Dec 2004 18:55:45 -0000	1.2
  @@ -19,7 +19,7 @@
   
   <pkg_status
       stable="none" stable_date="none"
  -    unstable="0.9.0" unstable_date="26-Dec-2004"
  +    unstable="0.9.1" unstable_date="26-Dec-2004"
   	done=90>
   
   <h2>Source</h2>
  @@ -29,7 +29,7 @@
       url=$(FTP_ROOT_URL)/pkg/tool/flow2rrd/
       directory=$(FTP_ROOT_DIR)/pkg/tool/flow2rrd/
       files="flow2rrd-*.tar.gz" 
  -	stable="none" unstable="flow2rrd-0.9.0.tar.gz">
  +	stable="none" unstable="flow2rrd-0.9.1.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Dec 26 20:43:40 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4B250764FF; Sun, 26 Dec 2004 20:43:40 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/flow2rrd/ ChangeLog flow2rrd.pl
Message-Id: <20041226194340.4B250764FF@mail.ossp.org>
Date: Sun, 26 Dec 2004 20:43:40 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Dec-2004 20:43:40
  Branch: HEAD                             Handle: 2004122619433900

  Modified files:
    ossp-pkg/flow2rrd       ChangeLog flow2rrd.pl

  Log:
    Implement the wildcard port handling

  Summary:
    Revision    Changes     Path
    1.6         +5  -0      ossp-pkg/flow2rrd/ChangeLog
    1.10        +3  -2      ossp-pkg/flow2rrd/flow2rrd.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ChangeLog
  --- ossp-pkg/flow2rrd/ChangeLog	26 Dec 2004 18:53:19 -0000	1.5
  +++ ossp-pkg/flow2rrd/ChangeLog	26 Dec 2004 19:43:39 -0000	1.6
  @@ -8,6 +8,11 @@
   
     ChangeLog
   
  +  Changes between 0.9.1 and 0.9.2 (26-Dec-2004 to 27-Dec-2004):
  +
  +    *) Implement the wildcard port handling.
  +       [Ralf S. Engelschall]
  +
     Changes between 0.9.0 and 0.9.1 (26-Dec-2004 to 26-Dec-2004):
   
       *) Adjust default configuration path.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/flow2rrd.pl
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 flow2rrd.pl
  --- ossp-pkg/flow2rrd/flow2rrd.pl	26 Dec 2004 18:52:45 -0000	1.9
  +++ ossp-pkg/flow2rrd/flow2rrd.pl	26 Dec 2004 19:43:39 -0000	1.10
  @@ -383,8 +383,9 @@
                               my $proto = $cfg->{'Protocol'}->{$s->{-proto}};
                               my $port  = $s->{-port};
                               if ($Cflow::protocol == $proto) {
  -                                if (   (    $inbound and $Cflow::dstport == $port)
  -                                    or (not $inbound and $Cflow::srcport == $port)) {
  +                                if (   $port eq '*'
  +                                    or ((        $inbound and $port == $Cflow::dstport)
  +                                         or (not $inbound and $port == $Cflow::srcport))) {
                                       $matched = 1;
                                   }
                               }
  @@ .

From ossp-cvs-owner@ossp.org  Sun Dec 26 20:44:06 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7F79E76528; Sun, 26 Dec 2004 20:44:06 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/flow2rrd/ TODO
Message-Id: <20041226194406.7F79E76528@mail.ossp.org>
Date: Sun, 26 Dec 2004 20:44:06 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Dec-2004 20:44:06
  Branch: HEAD                             Handle: 2004122619440600

  Modified files:
    ossp-pkg/flow2rrd       TODO

  Log:
    done

  Summary:
    Revision    Changes     Path
    1.4         +0  -1      ossp-pkg/flow2rrd/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/TODO
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 TODO
  --- ossp-pkg/flow2rrd/TODO	26 Dec 2004 17:10:23 -0000	1.3
  +++ ossp-pkg/flow2rrd/TODO	26 Dec 2004 19:44:06 -0000	1.4
  @@ -10,7 +10,6 @@
     ----
   
     - color themes still hardcoded!?
  -  - implement "*" number
     - unknown data handling!
     - OSSP website
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Dec 26 20:44:37 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 03F7976504; Sun, 26 Dec 2004 20:44:36 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/flow2rrd/ TODO
Message-Id: <20041226194436.03F7976504@mail.ossp.org>
Date: Sun, 26 Dec 2004 20:44:36 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Dec-2004 20:44:36
  Branch: HEAD                             Handle: 2004122619443600

  Modified files:
    ossp-pkg/flow2rrd       TODO

  Log:
    done, too

  Summary:
    Revision    Changes     Path
    1.5         +0  -1      ossp-pkg/flow2rrd/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/TODO
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 TODO
  --- ossp-pkg/flow2rrd/TODO	26 Dec 2004 19:44:06 -0000	1.4
  +++ ossp-pkg/flow2rrd/TODO	26 Dec 2004 19:44:36 -0000	1.5
  @@ -11,7 +11,6 @@
   
     - color themes still hardcoded!?
     - unknown data handling!
  -  - OSSP website
   
     CANDO
     -----
  @@ .

From ossp-cvs-owner@ossp.org  Sun Dec 26 21:03:38 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F0840764FE; Sun, 26 Dec 2004 21:03:37 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/flow2rrd/ AUTHORS ChangeLog INSTALL README THANKS...
Message-Id: <20041226200337.F0840764FE@mail.ossp.org>
Date: Sun, 26 Dec 2004 21:03:37 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Dec-2004 21:03:37
  Branch: HEAD                             Handle: 2004122620033500

  Modified files:
    ossp-pkg/flow2rrd       AUTHORS ChangeLog INSTALL README THANKS TODO
                            configure.ac devtool devtool.conf devtool.func
                            flow2rrd.pl flow2rrd.pod

  Log:
    small source tree cleanups

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/flow2rrd/AUTHORS
    1.7         +4  -1      ossp-pkg/flow2rrd/ChangeLog
    1.3         +1  -1      ossp-pkg/flow2rrd/INSTALL
    1.5         +1  -1      ossp-pkg/flow2rrd/README
    1.3         +1  -1      ossp-pkg/flow2rrd/THANKS
    1.6         +2  -2      ossp-pkg/flow2rrd/TODO
    1.3         +2  -2      ossp-pkg/flow2rrd/configure.ac
    1.2         +1  -1      ossp-pkg/flow2rrd/devtool
    1.3         +1  -1      ossp-pkg/flow2rrd/devtool.conf
    1.2         +1  -1      ossp-pkg/flow2rrd/devtool.func
    1.11        +9  -9      ossp-pkg/flow2rrd/flow2rrd.pl
    1.6         +10 -10     ossp-pkg/flow2rrd/flow2rrd.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/AUTHORS
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 AUTHORS
  --- ossp-pkg/flow2rrd/AUTHORS	26 Dec 2004 15:20:00 -0000	1.2
  +++ ossp-pkg/flow2rrd/AUTHORS	26 Dec 2004 20:03:35 -0000	1.3
  @@ -1,4 +1,4 @@
  -   _        ___  ____ ____  ____    __ _               ____               _ 
  +   _        ___  ____ ____  ____    __ _               ____               _
     |_|_ _   / _ \/ ___/ ___||  _ \  / _| | _____      _|___ \ _ __ _ __ __| |
     _|_||_| | | | \___ \___ \| |_) || |_| |/ _ \ \ /\ / / __) | '__| '__/ _` |
    |_||_|_| | |_| |___) |__) |  __/ |  _| | (_) \ V  V / / __/| |  | | | (_| |
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ChangeLog
  --- ossp-pkg/flow2rrd/ChangeLog	26 Dec 2004 19:43:39 -0000	1.6
  +++ ossp-pkg/flow2rrd/ChangeLog	26 Dec 2004 20:03:35 -0000	1.7
  @@ -1,4 +1,4 @@
  -   _        ___  ____ ____  ____    __ _               ____               _ 
  +   _        ___  ____ ____  ____    __ _               ____               _
     |_|_ _   / _ \/ ___/ ___||  _ \  / _| | _____      _|___ \ _ __ _ __ __| |
     _|_||_| | | | \___ \___ \| |_) || |_| |/ _ \ \ /\ / / __) | '__| '__/ _` |
    |_||_|_| | |_| |___) |__) |  __/ |  _| | (_) \ V  V / / __/| |  | | | (_| |
  @@ -10,6 +10,9 @@
   
     Changes between 0.9.1 and 0.9.2 (26-Dec-2004 to 27-Dec-2004):
   
  +    *) Small source tree cleanups.
  +       [Ralf S. Engelschall]
  +
       *) Implement the wildcard port handling.
          [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/INSTALL
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 INSTALL
  --- ossp-pkg/flow2rrd/INSTALL	26 Dec 2004 15:20:00 -0000	1.2
  +++ ossp-pkg/flow2rrd/INSTALL	26 Dec 2004 20:03:35 -0000	1.3
  @@ -1,4 +1,4 @@
  -   _        ___  ____ ____  ____    __ _               ____               _ 
  +   _        ___  ____ ____  ____    __ _               ____               _
     |_|_ _   / _ \/ ___/ ___||  _ \  / _| | _____      _|___ \ _ __ _ __ __| |
     _|_||_| | | | \___ \___ \| |_) || |_| |/ _ \ \ /\ / / __) | '__| '__/ _` |
    |_||_|_| | |_| |___) |__) |  __/ |  _| | (_) \ V  V / / __/| |  | | | (_| |
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/README
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 README
  --- ossp-pkg/flow2rrd/README	26 Dec 2004 18:53:19 -0000	1.4
  +++ ossp-pkg/flow2rrd/README	26 Dec 2004 20:03:35 -0000	1.5
  @@ -1,4 +1,4 @@
  -   _        ___  ____ ____  ____    __ _               ____               _ 
  +   _        ___  ____ ____  ____    __ _               ____               _
     |_|_ _   / _ \/ ___/ ___||  _ \  / _| | _____      _|___ \ _ __ _ __ __| |
     _|_||_| | | | \___ \___ \| |_) || |_| |/ _ \ \ /\ / / __) | '__| '__/ _` |
    |_||_|_| | |_| |___) |__) |  __/ |  _| | (_) \ V  V / / __/| |  | | | (_| |
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/THANKS
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 THANKS
  --- ossp-pkg/flow2rrd/THANKS	26 Dec 2004 15:20:00 -0000	1.2
  +++ ossp-pkg/flow2rrd/THANKS	26 Dec 2004 20:03:35 -0000	1.3
  @@ -1,4 +1,4 @@
  -   _        ___  ____ ____  ____    __ _               ____               _ 
  +   _        ___  ____ ____  ____    __ _               ____               _
     |_|_ _   / _ \/ ___/ ___||  _ \  / _| | _____      _|___ \ _ __ _ __ __| |
     _|_||_| | | | \___ \___ \| |_) || |_| |/ _ \ \ /\ / / __) | '__| '__/ _` |
    |_||_|_| | |_| |___) |__) |  __/ |  _| | (_) \ V  V / / __/| |  | | | (_| |
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/TODO
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 TODO
  --- ossp-pkg/flow2rrd/TODO	26 Dec 2004 19:44:36 -0000	1.5
  +++ ossp-pkg/flow2rrd/TODO	26 Dec 2004 20:03:35 -0000	1.6
  @@ -1,4 +1,4 @@
  -   _        ___  ____ ____  ____    __ _               ____               _ 
  +   _        ___  ____ ____  ____    __ _               ____               _
     |_|_ _   / _ \/ ___/ ___||  _ \  / _| | _____      _|___ \ _ __ _ __ __| |
     _|_||_| | | | \___ \___ \| |_) || |_| |/ _ \ \ /\ / / __) | '__| '__/ _` |
    |_||_|_| | |_| |___) |__) |  __/ |  _| | (_) \ V  V / / __/| |  | | | (_| |
  @@ -10,11 +10,11 @@
     ----
   
     - color themes still hardcoded!?
  -  - unknown data handling!
   
     CANDO
     -----
   
  +  - improve handling of the UNKNOWN data?!
     - larger/smaller buttons on explore website
     - back button on explore website
     - extend manual page flow2rrd.pod?
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/configure.ac
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 configure.ac
  --- ossp-pkg/flow2rrd/configure.ac	26 Dec 2004 15:20:00 -0000	1.2
  +++ ossp-pkg/flow2rrd/configure.ac	26 Dec 2004 20:03:35 -0000	1.3
  @@ -37,8 +37,8 @@
   AC_PREFIX_DEFAULT(/usr/local)
   AC_SET_MAKE
   
  -AC_PATH_PROGS(PERL, perl5 perl, NA) 
  -AC_PATH_PROGS(POD2MAN, pod2man, NA) 
  +AC_PATH_PROGS(PERL, perl5 perl, NA)
  +AC_PATH_PROGS(POD2MAN, pod2man, NA)
   
   AC_MSG_CHECKING(for perl program to use)
   AC_ARG_WITH([perl],
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/devtool
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 devtool
  --- ossp-pkg/flow2rrd/devtool	26 Dec 2004 13:10:39 -0000	1.1
  +++ ossp-pkg/flow2rrd/devtool	26 Dec 2004 20:03:35 -0000	1.2
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  devtool -- Development Tool
  -##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   if [ $# -eq 0 ]; then
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.conf
  --- ossp-pkg/flow2rrd/devtool.conf	26 Dec 2004 15:20:00 -0000	1.2
  +++ ossp-pkg/flow2rrd/devtool.conf	26 Dec 2004 20:03:35 -0000	1.3
  @@ -20,7 +20,7 @@
   %version
       ./shtool version -l txt -n "OSSP flow2rrd" -e VERSION
       V=`./shtool version -l txt -d long VERSION`
  -    sed -e "s/Version .*(.*)/Version $V/g" <README >README.n 
  +    sed -e "s/Version .*(.*)/Version $V/g" <README >README.n
       mv README.n README
   
   %dist
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/devtool.func
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.func
  --- ossp-pkg/flow2rrd/devtool.func	26 Dec 2004 13:10:39 -0000	1.1
  +++ ossp-pkg/flow2rrd/devtool.func	26 Dec 2004 20:03:35 -0000	1.2
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   devtool_require () {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/flow2rrd.pl
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 flow2rrd.pl
  --- ossp-pkg/flow2rrd/flow2rrd.pl	26 Dec 2004 19:43:39 -0000	1.10
  +++ ossp-pkg/flow2rrd/flow2rrd.pl	26 Dec 2004 20:03:35 -0000	1.11
  @@ -209,11 +209,11 @@
   sub make_rrd_ds_name {
       my ($host, $target, $service) = @_;
       $host    =~ s|[^a-zA-Z0-9_-]||sg;
  -    $host    = substr($host . ("_"x5), 0, 5); 
  +    $host    = substr($host . ("_"x5), 0, 5);
       $target  =~ s|[^a-zA-Z0-9_-]||sg;
  -    $target  = substr($target . ("_"x5), 0, 5); 
  +    $target  = substr($target . ("_"x5), 0, 5);
       $service =~ s|[^a-zA-Z0-9_-]||sg;
  -    $service = substr($service . ("_"x5), 0, 5); 
  +    $service = substr($service . ("_"x5), 0, 5);
       my $ds_name = sprintf("%s_%s_%s", $host, $target, $service);
       return $ds_name;
   }
  @@ -277,7 +277,7 @@
                   foreach my $network (@{$host->{-target}->{$target}->{-network}}) {
                       $np->add_string($network, 1);
                   }
  -                $ctx->{-network}->{$host->{-name}.":".$target} = $np; 
  +                $ctx->{-network}->{$host->{-name}.":".$target} = $np;
                   foreach my $service (@{$host->{-target}->{$target}->{-service}}) {
                       my $ds_name = &make_rrd_ds_name($host->{-name}, $target, $service);
                       $ctx->{-track}->{"${ds_name}_i"} = 0;
  @@ -703,11 +703,11 @@
               my $line = $1;
               my $io = new IO::File "<$0";
               my @code = $io->getlines();
  -            $io->close(); 
  +            $io->close();
               my $i = -1;
               $hint = join("", map { s/^/sprintf("%d: ", $line+$i++)/se; $_; } @code[$line-2..$line]);
           }
  -        print STDOUT 
  +        print STDOUT
               "Content-Type: text/html; charset=ISO-8859-1\n" .
               "\n" .
               "<html>\n" .
  @@ -921,7 +921,7 @@
               -size      => 15,
               -maxlength => 4,
               -class     => 'textfield',
  -        ) . "</td><td>(pixels)</td><td>Examples: '400 x 100', '800 x 200', ...</td></tr>"; 
  +        ) . "</td><td>(pixels)</td><td>Examples: '400 x 100', '800 x 200', ...</td></tr>";
   
           $html .= "<tr><td>Data X-Range:</td><td>" . $cgi->textfield(
               -name      => 'start',
  @@ -935,7 +935,7 @@
               -size      => 15,
               -maxlength => 20,
               -class     => 'textfield',
  -        ) . "</td><td>(time)</td><td>Examples: '-2d - now', '24-Dec-2004 - +48h', ...</td></tr>"; 
  +        ) . "</td><td>(time)</td><td>Examples: '-2d - now', '24-Dec-2004 - +48h', ...</td></tr>";
   
           $html .= "<tr><td>Data Y-Range:</td><td>" . $cgi->textfield(
               -name      => 'ulimit',
  @@ -949,7 +949,7 @@
               -size      => 15,
               -maxlength => 10,
               -class     => 'textfield',
  -        ) . "</td><td>(Bit/s)</td><td>Examples: '2K - -1K', '4M - 2M', ...</td></tr>"; 
  +        ) . "</td><td>(Bit/s)</td><td>Examples: '2K - -1K', '4M - 2M', ...</td></tr>";
   
           $html .= "  <tr>\n";
           $html .= "    <td colspan=4>". $cgi->submit(-name => "Update Graph", -class => "submit") . "</td>\n";
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/flow2rrd.pod
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 flow2rrd.pod
  --- ossp-pkg/flow2rrd/flow2rrd.pod	26 Dec 2004 17:09:13 -0000	1.5
  +++ ossp-pkg/flow2rrd/flow2rrd.pod	26 Dec 2004 20:03:35 -0000	1.6
  @@ -36,7 +36,7 @@
   
   =head1 SYNOPSIS
   
  -B<flow2rrd> 
  +B<flow2rrd>
   [B<--config=>I<file>]
   B<--store>
   
  @@ -45,14 +45,14 @@
   B<--graph>
   I<host>[C<:>I<target>]C<@>I<file>C<:>I<width>C<:>I<height>C<:>I<start>C<:>I<end>C<:>I<ulimit>C<:>I<llimit> ...
   
  -B<flow2rrd> 
  +B<flow2rrd>
   [B<--config=>I<file>]
   B<--cgi>
   
  -B<flow2rrd> 
  +B<flow2rrd>
   B<--version>
   
  -B<flow2rrd> 
  +B<flow2rrd>
   B<--help>
   
   =head1 DESCRIPTION
  @@ -166,7 +166,7 @@
    <dir-service>     ::= "Service" <name> (<name>.":".(<number>|"*"))+ ";"
    <dir-host>        ::= "Host" <hostname> "{" "}" <seq-host> ";"
    <dir-colors>      ::= "Colors" <name> <color>+ ";"
  - <seq-host>        ::= <dir-target>+ 
  + <seq-host>        ::= <dir-target>+
    <dir-target>      ::= "Target" <name> "{" <seq-target> "}" ";"
    <seq-target>      ::= (<dir-network> | <dir-service>)+
    <dir-network>     ::= "Network" <network>+ ";"
  @@ -177,19 +177,19 @@
    <hostname>        ::= /[^.]+(\.[^.]+)*/
    <network>         ::= /^\d+\.\d+\.\d+\.\d+(/\d+)?$/
   
  -An example configuration can be seen below under section B<EXAMPLE>:
  +An example configuration can be seen below in section B<EXAMPLE>.
   
   =head1 EXAMPLE
   
    #   Round-Robin Database
    Database /var/tmp/flow2rrd.rrd;
  - 
  +
    #   Protocol Definitions
    Protocol icmp     1;
    Protocol tcp      6;
    Protocol udp      17;
    Protocol vrrp     112;
  - 
  +
    #   Service Definitions
    Service  icmp     icmp:*;
    Service  vrrp     vrrp:*;
  @@ -199,7 +199,7 @@
    Service  dns      udp:53 tcp:53;
    Service  ntp      udp:123 tcp:123;
    Service  radius   udp:1645 udp:1646 udp:1812 udp:1813;
  - 
  +
    #   Host Definitions
    Host host.example.com {
        Target host.example.com {
  @@ -215,7 +215,7 @@
            Service ftp radius;
        };
    };
  - 
  +
   =head1 SEE ALSO
   
   B<Flow-Toolkit> E<lt>http://www.splintered.net/sw/flow-tools/E<gt>,
  @@ .

From ossp-cvs-owner@ossp.org  Mon Dec 27 14:06:21 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2BA637649B; Mon, 27 Dec 2004 14:06:21 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/flow2rrd/ ChangeLog THANKS flow2rrd.pl
Message-Id: <20041227130621.2BA637649B@mail.ossp.org>
Date: Mon, 27 Dec 2004 14:06:21 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   27-Dec-2004 14:06:21
  Branch: HEAD                             Handle: 2004122713061900

  Modified files:
    ossp-pkg/flow2rrd       ChangeLog THANKS flow2rrd.pl

  Log:
    Match flows against targets in the same order the targets
    occur in the configuration file to allow overlapping
    networks (where the first matching one is taken).

  Summary:
    Revision    Changes     Path
    1.8         +5  -0      ossp-pkg/flow2rrd/ChangeLog
    1.4         +1  -0      ossp-pkg/flow2rrd/THANKS
    1.12        +1  -1      ossp-pkg/flow2rrd/flow2rrd.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 ChangeLog
  --- ossp-pkg/flow2rrd/ChangeLog	26 Dec 2004 20:03:35 -0000	1.7
  +++ ossp-pkg/flow2rrd/ChangeLog	27 Dec 2004 13:06:19 -0000	1.8
  @@ -10,6 +10,11 @@
   
     Changes between 0.9.1 and 0.9.2 (26-Dec-2004 to 27-Dec-2004):
   
  +    *) Match flows against targets in the same order the targets
  +       occur in the configuration file to allow overlapping
  +       networks (where the first matching one is taken).
  +       [Ralf S. Engelschall, Christoph Schug]
  +
       *) Small source tree cleanups.
          [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/THANKS
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 THANKS
  --- ossp-pkg/flow2rrd/THANKS	26 Dec 2004 20:03:35 -0000	1.3
  +++ ossp-pkg/flow2rrd/THANKS	27 Dec 2004 13:06:19 -0000	1.4
  @@ -11,6 +11,7 @@
     Credit has to be given to the following people who contributed ideas,
     stuff, bugfixes, hints etc. (in alphabetical order):
   
  +  o Christoph Schug          <chris@schug.net>
     o Thomas Lotterer          <thomas@lotterer.net>
   
     ...and all other OSSP flow2rrd users who gave me feedback but I've forgot.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/flow2rrd.pl
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 flow2rrd.pl
  --- ossp-pkg/flow2rrd/flow2rrd.pl	26 Dec 2004 20:03:35 -0000	1.11
  +++ ossp-pkg/flow2rrd/flow2rrd.pl	27 Dec 2004 13:06:19 -0000	1.12
  @@ -370,7 +370,7 @@
           #   the flow matches them...
           my $matched_total = 0;
           LOOP: foreach my $host (@{$cfg->{'Host'}}) {
  -            foreach my $target (grep { $_ !~ m/^-/ } keys(%{$host->{-target}})) {
  +            foreach my $target (@{$host->{-target}->{-order}}) {
                   my $matched = 0;
                   my $inbound; $inbound = undef;
                   my $np = $ctx->{-network}->{$host->{-name}.":".$target};
  @@ .

From ossp-cvs-owner@ossp.org  Mon Dec 27 16:58:25 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9AEBC764A8; Mon, 27 Dec 2004 16:58:24 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/flow2rrd/ ChangeLog flow2rrd.pl
Message-Id: <20041227155824.9AEBC764A8@mail.ossp.org>
Date: Mon, 27 Dec 2004 16:58:24 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   27-Dec-2004 16:58:24
  Branch: HEAD                             Handle: 2004122715582300

  Modified files:
    ossp-pkg/flow2rrd       ChangeLog flow2rrd.pl

  Log:
    1. Reduce color-reduction for incoming traffic to not underflow too
    fast and render the incoming/outgoing legend more as a table. Also, the
    MGRIDs are now drawn less black and the day borders are drawn fully
    black.
    
    2. Remove out-commented code.

  Summary:
    Revision    Changes     Path
    1.9         +9  -0      ossp-pkg/flow2rrd/ChangeLog
    1.13        +26 -20     ossp-pkg/flow2rrd/flow2rrd.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 ChangeLog
  --- ossp-pkg/flow2rrd/ChangeLog	27 Dec 2004 13:06:19 -0000	1.8
  +++ ossp-pkg/flow2rrd/ChangeLog	27 Dec 2004 15:58:23 -0000	1.9
  @@ -10,6 +10,15 @@
   
     Changes between 0.9.1 and 0.9.2 (26-Dec-2004 to 27-Dec-2004):
   
  +    *) Reduce color-reduction for incoming traffic to not underflow too
  +       fast and render the incoming/outgoing legend more as a table.
  +       Also, the MGRIDs are now drawn less black and the day borders are
  +       drawn fully black.
  +       [Ralf S. Engelschall]
  +
  +    *) Remove out-commented code.
  +       [Ralf S. Engelschall]
  +
       *) Match flows against targets in the same order the targets
          occur in the configuration file to allow overlapping
          networks (where the first matching one is taken).
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/flow2rrd.pl
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 flow2rrd.pl
  --- ossp-pkg/flow2rrd/flow2rrd.pl	27 Dec 2004 13:06:19 -0000	1.12
  +++ ossp-pkg/flow2rrd/flow2rrd.pl	27 Dec 2004 15:58:23 -0000	1.13
  @@ -358,14 +358,6 @@
       sub data_accumulate {
           my ($cfg, $ctx) = @_;
   
  -        #my $st = POSIX::ctime($Cflow::startime); $st =~ s/\r?\n$//s;
  -        #my $et = POSIX::ctime($Cflow::endtime);  $et =~ s/\r?\n$//s;
  -        #printf(STDERR "%s %15.15s.%-5hu %15.15s.%-5hu %2hu %3u %u\n",
  -        #       $et,
  -        #       $Cflow::srcip, $Cflow::srcport,
  -        #       $Cflow::dstip, $Cflow::dstport,
  -        #       $Cflow::protocol, $Cflow::bytes);
  -
           #   iterate over all target and services to see whether
           #   the flow matches them...
           my $matched_total = 0;
  @@ -569,12 +561,19 @@
                   push(@cdef, sprintf("CDEF:data%d_o=%s", $i, $cdef_o));
                   push(@cdef, sprintf("CDEF:data%d_i=%s", $i, $cdef_i));
                   my $color_o; eval "\$color_o = 0x".$colors->[$i];
  -                my $color_i; eval "\$color_i = \$color_o - 0x404040";
  -                push(@draw_o, sprintf("%s:data%d_o#%06x:%s out", ($i == 0 ? "AREA" : "STACK"), $i, $color_o, $target));
  -                push(@draw_i, sprintf("%s:data%d_i#%06x:%s in",  ($i == 0 ? "AREA" : "STACK"), $i, $color_i, $target));
  +                my $color_i; eval "\$color_i = \$color_o - 0x101010";
  +                push(@draw_o, sprintf("%s:data%d_o#%06x:out %s", ($i == 0 ? "AREA" : "STACK"), $i, $color_o, $target));
  +                push(@draw_i, sprintf("%s:data%d_i#%06x:in  %s", ($i == 0 ? "AREA" : "STACK"), $i, $color_i, $target));
                   $i++;
               }
  -            my @draw = (@draw_o, "COMMENT:\n", @draw_i, "HRULE:0#000000");
  +            my @draw = (@draw_o, 'COMMENT:\n', @draw_i);
  +            push(@draw, "HRULE:0#000000");
  +            my $ts = int(($graph->{-graph_start} / (24*60*60)) + 0) * (24*60*60);
  +            my $te = int(($graph->{-graph_end}   / (24*60*60)) + 1) * (24*60*60);
  +            for (my $t = $ts; $t < $te; $t += (12*60*60)) {
  +                if (($t % (24*60*60)) == 0) { push(@draw, "VRULE:$t#000000"); }
  +                else                        { push(@draw, "VRULE:$t#999999"); }
  +            }
               my @args = ();
               push(@args, $graph->{-img_file});
               push(@args, '--imgformat',      $graph->{-img_format});
  @@ -585,7 +584,7 @@
               push(@args, '--upper-limit',    $graph->{-graph_ulimit}) if ($graph->{-graph_ulimit} != 0);
               push(@args, '--lower-limit',    $graph->{-graph_llimit}) if ($graph->{-graph_llimit} != 0);
               push(@args, '--rigid');
  -            push(@args, '--alt-autoscale',);
  +            push(@args, '--alt-autoscale');
               push(@args, '--base',           1024);
               push(@args, '--x-grid',         "HOUR:1:DAY:1:DAY:1:0:%d-%b-%Y");
               push(@args, '--vertical-label', 'Bit/s');
  @@ -594,7 +593,7 @@
               push(@args, '--color',          'SHADEA#e5e5f5');
               push(@args, '--color',          'SHADEB#d0d0e0');
               push(@args, '--color',          'GRID#cccccc');
  -            push(@args, '--color',          'MGRID#000000');
  +            push(@args, '--color',          'MGRID#999999');
               push(@args, '--color',          'FONT#000000');
               push(@args, '--color',          'FRAME#000000');
               push(@args, '--color',          'ARROW#000000');
  @@ -648,12 +647,19 @@
                   push(@cdef,   sprintf("CDEF:data%d_o=%s_o,8,*,+1,*", $i, $ds_name));
                   push(@cdef,   sprintf("CDEF:data%d_i=%s_i,8,*,-1,*", $i, $ds_name));
                   my $color_o; eval "\$color_o = 0x".$colors->[$i];
  -                my $color_i; eval "\$color_i = \$color_o - 0x404040";
  -                push(@draw_o, sprintf("%s:data%d_o#%06x:%s out", ($i == 0 ? "AREA" : "STACK"), $i, $color_o, $service));
  -                push(@draw_i, sprintf("%s:data%d_i#%06x:%s in",  ($i == 0 ? "AREA" : "STACK"), $i, $color_i, $service));
  +                my $color_i; eval "\$color_i = \$color_o - 0x101010";
  +                push(@draw_o, sprintf("%s:data%d_o#%06x:out %s", ($i == 0 ? "AREA" : "STACK"), $i, $color_o, $service));
  +                push(@draw_i, sprintf("%s:data%d_i#%06x:in  %s", ($i == 0 ? "AREA" : "STACK"), $i, $color_i, $service));
                   $i++;
               }
  -            my @draw = (@draw_o, "COMMENT:\n", @draw_i, "HRULE:0#000000");
  +            my @draw = (@draw_o, 'COMMENT:\n', @draw_i);
  +            push(@draw, "HRULE:0#000000");
  +            my $ts = int(($graph->{-graph_start} / (24*60*60)) + 0) * (24*60*60);
  +            my $te = int(($graph->{-graph_end}   / (24*60*60)) + 1) * (24*60*60);
  +            for (my $t = $ts; $t < $te; $t += (12*60*60)) {
  +                if (($t % (24*60*60)) == 0) { push(@draw, "VRULE:$t#000000"); }
  +                else                        { push(@draw, "VRULE:$t#999999"); }
  +            }
               my @args = ();
               push(@args, $graph->{-img_file});
               push(@args, '--imgformat',      $graph->{-img_format});
  @@ -664,7 +670,7 @@
               push(@args, '--upper-limit',    $graph->{-graph_ulimit}) if ($graph->{-graph_ulimit} != 0);
               push(@args, '--lower-limit',    $graph->{-graph_llimit}) if ($graph->{-graph_llimit} != 0);
               push(@args, '--rigid');
  -            push(@args, '--alt-autoscale',);
  +            push(@args, '--alt-autoscale');
               push(@args, '--base',           1024);
               push(@args, '--x-grid',         "HOUR:1:DAY:1:DAY:1:0:%d-%b-%Y");
               push(@args, '--vertical-label', 'Bit/s');
  @@ -673,7 +679,7 @@
               push(@args, '--color',          'SHADEA#e5e5f5');
               push(@args, '--color',          'SHADEB#d0d0e0');
               push(@args, '--color',          'GRID#cccccc');
  -            push(@args, '--color',          'MGRID#000000');
  +            push(@args, '--color',          'MGRID#999999');
               push(@args, '--color',          'FONT#000000');
               push(@args, '--color',          'FRAME#000000');
               push(@args, '--color',          'ARROW#000000');
  @@ .

From ossp-cvs-owner@ossp.org  Mon Dec 27 17:11:48 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D6FDD764A8; Mon, 27 Dec 2004 17:11:47 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/flow2rrd/ flow2rrd.pl
Message-Id: <20041227161147.D6FDD764A8@mail.ossp.org>
Date: Mon, 27 Dec 2004 17:11:47 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   27-Dec-2004 17:11:47
  Branch: HEAD                             Handle: 2004122716114700

  Modified files:
    ossp-pkg/flow2rrd       flow2rrd.pl

  Log:
    print day lines at localtime, please

  Summary:
    Revision    Changes     Path
    1.14        +9  -4      ossp-pkg/flow2rrd/flow2rrd.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/flow2rrd.pl
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 flow2rrd.pl
  --- ossp-pkg/flow2rrd/flow2rrd.pl	27 Dec 2004 15:58:23 -0000	1.13
  +++ ossp-pkg/flow2rrd/flow2rrd.pl	27 Dec 2004 16:11:47 -0000	1.14
  @@ -33,6 +33,7 @@
   use POSIX;             # from OpenPKG "perl"
   use IO::File;          # from OpenPKG "perl"
   use Getopt::Long;      # from OpenPKG "perl"
  +use Time::Local;       # from OpenPKG "perl"
   use File::Temp;        # from OpenPKG "perl"
   use Data::Dumper;      # from OpenPKG "perl"
   use Date::Parse;       # from OpenPKG "perl-time"
  @@ -568,11 +569,13 @@
               }
               my @draw = (@draw_o, 'COMMENT:\n', @draw_i);
               push(@draw, "HRULE:0#000000");
  +            my $now = time();
  +            my $tzoffset = $now - timelocal(gmtime($now));
               my $ts = int(($graph->{-graph_start} / (24*60*60)) + 0) * (24*60*60);
               my $te = int(($graph->{-graph_end}   / (24*60*60)) + 1) * (24*60*60);
               for (my $t = $ts; $t < $te; $t += (12*60*60)) {
  -                if (($t % (24*60*60)) == 0) { push(@draw, "VRULE:$t#000000"); }
  -                else                        { push(@draw, "VRULE:$t#999999"); }
  +                if (($t % (24*60*60)) == 0) { push(@draw, sprintf("VRULE:%d#000000", $t - $tzoffset)); }
  +                else                        { push(@draw, sprintf("VRULE:%d#999999", $t - $tzoffset)); }
               }
               my @args = ();
               push(@args, $graph->{-img_file});
  @@ -654,11 +657,13 @@
               }
               my @draw = (@draw_o, 'COMMENT:\n', @draw_i);
               push(@draw, "HRULE:0#000000");
  +            my $now = time();
  +            my $tzoffset = $now - timelocal(gmtime($now));
               my $ts = int(($graph->{-graph_start} / (24*60*60)) + 0) * (24*60*60);
               my $te = int(($graph->{-graph_end}   / (24*60*60)) + 1) * (24*60*60);
               for (my $t = $ts; $t < $te; $t += (12*60*60)) {
  -                if (($t % (24*60*60)) == 0) { push(@draw, "VRULE:$t#000000"); }
  -                else                        { push(@draw, "VRULE:$t#999999"); }
  +                if (($t % (24*60*60)) == 0) { push(@draw, sprintf("VRULE:%d#000000", $t - $tzoffset)); }
  +                else                        { push(@draw, sprintf("VRULE:%d#999999", $t - $tzoffset)); }
               }
               my @args = ();
               push(@args, $graph->{-img_file});
  @@ .

From ossp-cvs-owner@ossp.org  Wed Dec 29 13:03:14 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 75B7A763B1; Wed, 29 Dec 2004 13:03:14 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/flow2rrd/ ChangeLog flow2rrd.pl
Message-Id: <20041229120314.75B7A763B1@mail.ossp.org>
Date: Wed, 29 Dec 2004 13:03:14 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Dec-2004 13:03:14
  Branch: HEAD                             Handle: 2004122912031300

  Modified files:
    ossp-pkg/flow2rrd       ChangeLog flow2rrd.pl

  Log:
    - Reduce flow accumulation window from 5 min to 1 min in order
      to get more detailed graphs.
    - Speed up processing of flows under "flow2rrd --stable" a little bit.
    - Allow floating point numbers for the time ranges in the Web UI.

  Summary:
    Revision    Changes     Path
    1.10        +10 -0      ossp-pkg/flow2rrd/ChangeLog
    1.15        +29 -19     ossp-pkg/flow2rrd/flow2rrd.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 ChangeLog
  --- ossp-pkg/flow2rrd/ChangeLog	27 Dec 2004 15:58:23 -0000	1.9
  +++ ossp-pkg/flow2rrd/ChangeLog	29 Dec 2004 12:03:13 -0000	1.10
  @@ -9,6 +9,16 @@
     ChangeLog
   
     Changes between 0.9.1 and 0.9.2 (26-Dec-2004 to 27-Dec-2004):
  +    
  +    *) Reduce flow accumulation window from 5 min to 1 min in order
  +       to get more detailed graphs.
  +       [Ralf S. Engelschall]
  +
  +    *) Speed up processing of flows under "flow2rrd --stable" a little bit.
  +       [Ralf S. Engelschall]
  +
  +    *) Allow floating point numbers for the time ranges in the Web UI.
  +       [Ralf S. Engelschall]
   
       *) Reduce color-reduction for incoming traffic to not underflow too
          fast and render the incoming/outgoing legend more as a table.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/flow2rrd.pl
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 flow2rrd.pl
  --- ossp-pkg/flow2rrd/flow2rrd.pl	27 Dec 2004 16:11:47 -0000	1.14
  +++ ossp-pkg/flow2rrd/flow2rrd.pl	29 Dec 2004 12:03:13 -0000	1.15
  @@ -207,15 +207,20 @@
   #print Data::Dumper->Dump([$cfg]);
   
   #   hostname/target/service to 15 chars RRD DS name mapping
  +my $rrd_ds_name_cache = {};
   sub make_rrd_ds_name {
       my ($host, $target, $service) = @_;
  -    $host    =~ s|[^a-zA-Z0-9_-]||sg;
  -    $host    = substr($host . ("_"x5), 0, 5);
  -    $target  =~ s|[^a-zA-Z0-9_-]||sg;
  -    $target  = substr($target . ("_"x5), 0, 5);
  -    $service =~ s|[^a-zA-Z0-9_-]||sg;
  -    $service = substr($service . ("_"x5), 0, 5);
  -    my $ds_name = sprintf("%s_%s_%s", $host, $target, $service);
  +    my $ds_name = $rrd_ds_name_cache->{$host.$target.$service};
  +    if (not defined($ds_name)) {
  +        $host    =~ s|[^a-zA-Z0-9_-]||sg;
  +        $host    = substr($host . ("_"x5), 0, 5);
  +        $target  =~ s|[^a-zA-Z0-9_-]||sg;
  +        $target  = substr($target . ("_"x5), 0, 5);
  +        $service =~ s|[^a-zA-Z0-9_-]||sg;
  +        $service = substr($service . ("_"x5), 0, 5);
  +        $ds_name = sprintf("%s_%s_%s", $host, $target, $service);
  +        $rrd_ds_name_cache->{$host.$target.$service} = $ds_name;
  +    }
       return $ds_name;
   }
   
  @@ -224,7 +229,7 @@
   ##
   
   if ($opt->{-store}) {
  -    my $step = 5*60; # 5 min
  +    my $step = 1*60; # 1 min
   
       #   initialize data
       my $ctx = &data_init($cfg);
  @@ -316,13 +321,14 @@
               my $rra = sprintf('RRA:LAST:0:%d:%d', $steps, $rows);
               push(@rra, $rra);
           }
  -        &mkrra($step,     5*60,     7*24*60*60); #  5 min  res. for 1 week
  -        &mkrra($step,    10*60,    14*24*60*60); # 10 min  res. for 2 weeks
  -        &mkrra($step,    30*60,    30*24*60*60); # 30 min  res. for 1 month
  -        &mkrra($step,    60*60,  3*30*24*60*60); #  1 hour res. for 3 months
  -        &mkrra($step,  3*60*60,  6*30*24*60*60); #  3 hour res. for 6 months
  -        &mkrra($step,  6*60*60,   365*24*60*60); #  6 hour res. for 1 year
  -        &mkrra($step, 24*60*60, 4*365*24*60*60); #  1 days res. for 4 year
  +        &mkrra($step,     1*60,     7*24*60*60); #  1 min  res. for 1 week
  +        &mkrra($step,     2*60,    14*24*60*60); #  2 min  res. for 2 weeks
  +        &mkrra($step,     5*60,    30*24*60*60); #  5 min  res. for 1 month
  +        &mkrra($step,    15*60,  3*30*24*60*60); # 15 min  res. for 3 months
  +        &mkrra($step,  1*60*60,  6*30*24*60*60); #  1 hour res. for 6 months
  +        &mkrra($step,  2*60*60,   365*24*60*60); #  2 hour res. for 1 year
  +        &mkrra($step,  6*60*60, 2*365*24*60*60); #  6 hour res. for 2 years
  +        &mkrra($step, 12*60*60, 4*365*24*60*60); # 12 hour res. for 4 years
   
           #   create RRD database
           RRDs::create($cfg->{'Database'}, '--start', $time, '--step', $step, @ds, @rra);
  @@ -362,13 +368,14 @@
           #   iterate over all target and services to see whether
           #   the flow matches them...
           my $matched_total = 0;
  -        LOOP: foreach my $host (@{$cfg->{'Host'}}) {
  +        LOOP:
  +        foreach my $host (@{$cfg->{'Host'}}) {
               foreach my $target (@{$host->{-target}->{-order}}) {
                   my $matched = 0;
                   my $inbound; $inbound = undef;
                   my $np = $ctx->{-network}->{$host->{-name}.":".$target};
  -                if ($np->match_string($Cflow::srcip)) { $inbound = 0; }
  -                if ($np->match_string($Cflow::dstip)) { $inbound = 1; }
  +                if    ($np->match_string($Cflow::srcip)) { $inbound = 0; }
  +                elsif ($np->match_string($Cflow::dstip)) { $inbound = 1; }
                   if (defined($inbound)) {
                       foreach my $service (@{$host->{-target}->{$target}->{-service}}) {
                           my $services = $cfg->{'Service'}->{$service};
  @@ -457,7 +464,7 @@
               elsif ($t =~ m|(\d{2})-([A-Za-z]{3})-(\d{4})|) {
                   $t = str2time($t);
               }
  -            elsif ($t =~ m|^(\d+)([smhdwMY])$|) {
  +            elsif ($t =~ m|^([\d.]+)([smhdwMY])$|) {
                   $t = $1;
                   if    ($2 eq 's') { $t *=            1; }
                   elsif ($2 eq 'm') { $t *=           60; }
  @@ -467,6 +474,9 @@
                   elsif ($2 eq 'M') { $t *=  30*24*60*60; }
                   elsif ($2 eq 'Y') { $t *= 365*24*60*60; }
               }
  +            elsif ($t =~ m|^([\d.]+)$|) {
  +                $t = $1;
  +            }
               else {
                   $t = 0;
               }
  @@ .

From ossp-cvs-owner@ossp.org  Wed Dec 29 13:03:42 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4766F7643D; Wed, 29 Dec 2004 13:03:42 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/flow2rrd/ TODO
Message-Id: <20041229120342.4766F7643D@mail.ossp.org>
Date: Wed, 29 Dec 2004 13:03:42 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Dec-2004 13:03:42
  Branch: HEAD                             Handle: 2004122912034100

  Modified files:
    ossp-pkg/flow2rrd       TODO

  Log:
    remember what can be done

  Summary:
    Revision    Changes     Path
    1.7         +3  -0      ossp-pkg/flow2rrd/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/TODO
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 TODO
  --- ossp-pkg/flow2rrd/TODO	26 Dec 2004 20:03:35 -0000	1.6
  +++ ossp-pkg/flow2rrd/TODO	29 Dec 2004 12:03:41 -0000	1.7
  @@ -18,4 +18,7 @@
     - larger/smaller buttons on explore website
     - back button on explore website
     - extend manual page flow2rrd.pod?
  +  - auto y scaling according to y values: 20%
  +  - add to legend the sums (integrals)
  +  - perhaps render also an average LINE into the graphs?
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Dec 29 15:10:39 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F01C076438; Wed, 29 Dec 2004 15:10:38 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/flow2rrd/ ChangeLog flow2rrd.cfg flow2rrd.pl flow...
Message-Id: <20041229141038.F01C076438@mail.ossp.org>
Date: Wed, 29 Dec 2004 15:10:38 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Dec-2004 15:10:38
  Branch: HEAD                             Handle: 2004122914103701

  Modified files:
    ossp-pkg/flow2rrd       ChangeLog flow2rrd.cfg flow2rrd.pl flow2rrd.pod

  Log:
    1. Add --verbose option and use it to show a flow/sec indication
       under option --store.
    2. Make RRD internal setup configurable in flow2rrd.cfg with two
       sub-directives (Stepping and Storage) of the Database directive.

  Summary:
    Revision    Changes     Path
    1.11        +8  -0      ossp-pkg/flow2rrd/ChangeLog
    1.6         +4  -1      ossp-pkg/flow2rrd/flow2rrd.cfg
    1.16        +124 -88    ossp-pkg/flow2rrd/flow2rrd.pl
    1.7         +4  -1      ossp-pkg/flow2rrd/flow2rrd.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 ChangeLog
  --- ossp-pkg/flow2rrd/ChangeLog	29 Dec 2004 12:03:13 -0000	1.10
  +++ ossp-pkg/flow2rrd/ChangeLog	29 Dec 2004 14:10:37 -0000	1.11
  @@ -9,6 +9,14 @@
     ChangeLog
   
     Changes between 0.9.1 and 0.9.2 (26-Dec-2004 to 27-Dec-2004):
  +
  +    *) Add --verbose option and use it to show a flow/sec indication
  +       under option --store.
  +       [Ralf S. Engelschall]
  +
  +    *) Make RRD internal setup configurable in flow2rrd.cfg with two
  +       sub-directives (Stepping and Storage) of the Database directive.
  +       [Ralf S. Engelschall]
       
       *) Reduce flow accumulation window from 5 min to 1 min in order
          to get more detailed graphs.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/flow2rrd.cfg
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 flow2rrd.cfg
  --- ossp-pkg/flow2rrd/flow2rrd.cfg	26 Dec 2004 18:52:45 -0000	1.5
  +++ ossp-pkg/flow2rrd/flow2rrd.cfg	29 Dec 2004 14:10:38 -0000	1.6
  @@ -3,7 +3,10 @@
   ##
   
   #   Round-Robin Database
  -Database @LOCALSTATEDIR@/flow2rrd.rrd;
  +Database @LOCALSTATEDIR@/flow2rrd.rrd {
  +    Stepping 1m;
  +    Storage  1m:1W 2m:2W 5m:1M 15m:3M 1h:6M 2h:1Y 6h:2Y 12h:4Y;
  +};
   
   #   Protocol Definitions
   Protocol icmp     1;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/flow2rrd.pl
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 flow2rrd.pl
  --- ossp-pkg/flow2rrd/flow2rrd.pl	29 Dec 2004 12:03:13 -0000	1.15
  +++ ossp-pkg/flow2rrd/flow2rrd.pl	29 Dec 2004 14:10:38 -0000	1.16
  @@ -71,6 +71,7 @@
   my %getopt_spec = (
       'h|help'     => \$opt->{-help},
       'v|version'  => \$opt->{-version},
  +    'V|verbose'  => \$opt->{-verbose},
       'f|config=s' => \$opt->{-config},
       's|store'    => \$opt->{-store},
       'g|graph'    => \$opt->{-graph},
  @@ -83,6 +84,7 @@
             "available options are:\n" .
             "  -h,--help              print out this usage page\n" .
             "  -v,--version           print program version\n" .
  +          "  -V,--verbose           print verbose messages\n" .
             "  -f,--config FILE       read this configuration file only\n" .
             "  -s,--store             store NetFlow values into RRD\n" .
             "  -g,--graph             produce RRD graphs\n" .
  @@ -111,10 +113,11 @@
   $cs->parse($txt);
   my $tree = $cs->unpack();
   undef $cs;
  +#print Data::Dumper->Dump([$tree]);
   
   #   extract configuration elements
   my $cfg = {
  -    'Database' => undef,
  +    'Database' => {},
       'Host'     => [],
       'Protocol' => {},
       'Service'  => {},
  @@ -122,8 +125,26 @@
   };
   foreach my $dir (@{$tree}) {
       if ($dir->[0] eq 'Database') {
  -        die "Database already defined" if (defined($cfg->{'Database'}));
  -        $cfg->{'Database'} = $dir->[1];
  +        die "Database already defined" if (defined($cfg->{'Database'}->{-file}));
  +        $cfg->{'Database'}->{-file} = $dir->[1];
  +        my $seq = $dir->[2];
  +        foreach my $dir2 (@{$seq}) {
  +            if ($dir2->[0] eq 'Stepping') {
  +                $cfg->{'Database'}->{-step} = $dir2->[1];
  +            }
  +            elsif ($dir2->[0] eq 'Storage') {
  +                my $s = [];
  +                foreach my $spec (@{$dir2}[1..$#{$dir2}]) {
  +                    if (my ($res, $dur) = ($spec =~ m/^(\S+):(\S+)$/)) {
  +                        push(@{$s}, { -res => $res, -dur => $dur});
  +                    }
  +                    else {
  +                        die "invalid storage specification \"$spec\"";
  +                    }
  +                }
  +                $cfg->{'Database'}->{-storage} = $s;
  +            }
  +        }
       }
       elsif ($dir->[0] eq 'Protocol') {
           die "Protocol \"$dir->[1]\" already defined" if (defined($cfg->{'Protocol'}->{$dir->[1]}));
  @@ -224,27 +245,83 @@
       return $ds_name;
   }
   
  +#   conversion/canonicalization of time specifications
  +sub cv_time {
  +    my ($t) = @_;
  +    if ($t =~ m|^now(.*)$|) {
  +        $t = time() + &cv_time($1);
  +    }
  +    elsif ($t =~ m|^([-+])(.+)$|) {
  +        $t = &cv_time($2);
  +        eval "\$t = $1 \$t";
  +    }
  +    elsif ($t =~ m|(\d{2})-([A-Za-z]{3})-(\d{4})|) {
  +        $t = str2time($t);
  +    }
  +    elsif ($t =~ m|^([\d.]+)([smhDWMY])$|) {
  +        $t = $1;
  +        if    ($2 eq 's') { $t *=            1; }
  +        elsif ($2 eq 'm') { $t *=           60; }
  +        elsif ($2 eq 'h') { $t *=        60*60; }
  +        elsif ($2 eq 'D') { $t *=     24*60*60; }
  +        elsif ($2 eq 'W') { $t *=   7*24*60*60; }
  +        elsif ($2 eq 'M') { $t *=  30*24*60*60; }
  +        elsif ($2 eq 'Y') { $t *= 365*24*60*60; }
  +    }
  +    elsif ($t =~ m|^([\d.]+)$|) {
  +        $t = $1;
  +    }
  +    else {
  +        $t = 0;
  +    }
  +    return $t;
  +}
  +
  +#   conversion/canonicalization of limit specifications
  +sub cv_limit {
  +    my ($l) = @_;
  +    if ($l eq '') {
  +        $l = 0;
  +    }
  +    elsif ($l =~ m|^([-+])(.*)$|) {
  +        $l = &cv_limit($2);
  +        eval "\$l = $1 \$l";
  +    }
  +    elsif ($l =~ m|^(\d+)([KMGT])$|) {
  +        $l = $1;
  +        if ($2 eq 'K') { $l *=                1024; }
  +        if ($2 eq 'M') { $l *=           1024*1024; }
  +        if ($2 eq 'G') { $l *=      1024*1024*1024; }
  +        if ($2 eq 'T') { $l *= 1024*1024*1024*1024; }
  +    }
  +    return $l;
  +}
  +
   ##
   ##  ==== OPERATION MODE 1: STORE DATA ====
   ##
   
   if ($opt->{-store}) {
  -    my $step = 1*60; # 1 min
  +    my $step = &cv_time($cfg->{'Database'}->{-step});
   
       #   initialize data
       my $ctx = &data_init($cfg);
   
       #   scan flow-tools stream on STDIN for NetFlow records
  +    my $flows = 0;
  +    my $tick = 0;
  +    my $ticktick = 0;
  +    my $done = 0;
  +    my @done = ();
       Cflow::verbose(0);
       Cflow::find(sub { &foreach_record($cfg, $ctx) }, "-");
       sub foreach_record {
           my ($cfg, $ctx) = @_;
   
  -        #   determine time slot
  -        my $t = $Cflow::endtime;
  +        #   at start of time slot, load accumulated data
           if (not defined($ctx->{-endtime})) {
               #   initial setup, so initialize time slot tracking
  -            $ctx->{-starttime} = int($t / $step) * $step;
  +            $ctx->{-starttime} = int($Cflow::endtime / $step) * $step;
               $ctx->{-endtime}   = $ctx->{-starttime} + $step;
   
               #   load data
  @@ -252,7 +329,7 @@
           }
   
           #   at end of time slot, store accumulated data
  -        if ($t >= $ctx->{-endtime}) {
  +        if ($Cflow::endtime >= $ctx->{-endtime}) {
               #   store data
               &rrd_store($cfg, $ctx);
   
  @@ -263,6 +340,22 @@
   
           #   accumulate data
           &data_accumulate($cfg, $ctx);
  +
  +        #   statistics
  +        if ($opt->{-verbose}) {
  +            $flows++;
  +            $done++;
  +            $ticktick++;
  +            my $tick_new = ($ticktick > 1000 ? time() : 0);
  +            if ($tick < $tick_new) {
  +                push(@done, $done);
  +                shift(@done) if (@done > 20);
  +                my $sum = 0; map { $sum += $_ } @done; $sum /= scalar(@done);
  +                printf(STDERR "Storing: %10d flows, %6.1f flows/sec (average: %6.1f flows/sec)\r", $flows, $done, $sum);
  +                $tick = $tick_new;
  +                $done = 0;
  +            }
  +        }
       }
       &rrd_store($cfg, $ctx);
   
  @@ -297,7 +390,7 @@
       #   create RRD file (if still not existing)
       sub rrd_create {
           my ($cfg, $time) = @_;
  -        return if (-f $cfg->{'Database'});
  +        return if (-f $cfg->{'Database'}->{-file});
   
           #   determine RRD data sources (DS)
           my @ds = ();
  @@ -321,17 +414,14 @@
               my $rra = sprintf('RRA:LAST:0:%d:%d', $steps, $rows);
               push(@rra, $rra);
           }
  -        &mkrra($step,     1*60,     7*24*60*60); #  1 min  res. for 1 week
  -        &mkrra($step,     2*60,    14*24*60*60); #  2 min  res. for 2 weeks
  -        &mkrra($step,     5*60,    30*24*60*60); #  5 min  res. for 1 month
  -        &mkrra($step,    15*60,  3*30*24*60*60); # 15 min  res. for 3 months
  -        &mkrra($step,  1*60*60,  6*30*24*60*60); #  1 hour res. for 6 months
  -        &mkrra($step,  2*60*60,   365*24*60*60); #  2 hour res. for 1 year
  -        &mkrra($step,  6*60*60, 2*365*24*60*60); #  6 hour res. for 2 years
  -        &mkrra($step, 12*60*60, 4*365*24*60*60); # 12 hour res. for 4 years
  +        foreach my $s (@{$cfg->{'Database'}->{-storage}}) {
  +            my $res = &cv_time($s->{-res});
  +            my $dur = &cv_time($s->{-dur});
  +            &mkrra($step, $res, $dur);
  +        }
   
           #   create RRD database
  -        RRDs::create($cfg->{'Database'}, '--start', $time, '--step', $step, @ds, @rra);
  +        RRDs::create($cfg->{'Database'}->{-file}, '--start', $time, '--step', $step, @ds, @rra);
           my $err = RRDs::error();
           die "failed to create RRD file: $err" if (defined($err));
       }
  @@ -345,7 +435,7 @@
   
           #   load data from RRD
           my ($rrd_start, $rrd_step, $rrd_names, $rrd_data) = RRDs::fetch(
  -            $cfg->{'Database'},
  +            $cfg->{'Database'}->{-file},
               'LAST',
               '--resolution', $step,
               '--start',      $ctx->{-endtime},
  @@ -371,32 +461,26 @@
           LOOP:
           foreach my $host (@{$cfg->{'Host'}}) {
               foreach my $target (@{$host->{-target}->{-order}}) {
  -                my $matched = 0;
  -                my $inbound; $inbound = undef;
  +                my $inbound;
                   my $np = $ctx->{-network}->{$host->{-name}.":".$target};
                   if    ($np->match_string($Cflow::srcip)) { $inbound = 0; }
                   elsif ($np->match_string($Cflow::dstip)) { $inbound = 1; }
                   if (defined($inbound)) {
                       foreach my $service (@{$host->{-target}->{$target}->{-service}}) {
  -                        my $services = $cfg->{'Service'}->{$service};
  -                        foreach my $s (@{$services}) {
  -                            my $proto = $cfg->{'Protocol'}->{$s->{-proto}};
  -                            my $port  = $s->{-port};
  -                            if ($Cflow::protocol == $proto) {
  +                        foreach my $s (@{$cfg->{'Service'}->{$service}}) {
  +                            if ($Cflow::protocol == $cfg->{'Protocol'}->{$s->{-proto}}) {
  +                                my $port = $s->{-port};
                                   if (   $port eq '*'
                                       or ((        $inbound and $port == $Cflow::dstport)
                                            or (not $inbound and $port == $Cflow::srcport))) {
  -                                    $matched = 1;
  +                                    #   flow matched target/service, so accumulate data
  +                                    my $ds_name = &make_rrd_ds_name($host->{-name}, $target, $service);
  +                                    if ($inbound) { $ctx->{-track}->{"${ds_name}_i"} += $Cflow::bytes; }
  +                                    else          { $ctx->{-track}->{"${ds_name}_o"} += $Cflow::bytes; }
  +                                    $matched_total++;
  +                                    last LOOP;
                                   }
                               }
  -                            if ($matched) {
  -                                #   flow matched target/service, so accumulate data
  -                                my $ds_name = &make_rrd_ds_name($host->{-name}, $target, $service);
  -                                if ($inbound) { $ctx->{-track}->{"${ds_name}_i"} += $Cflow::bytes; }
  -                                else          { $ctx->{-track}->{"${ds_name}_o"} += $Cflow::bytes; }
  -                                $matched_total++;
  -                                last LOOP;
  -                            }
                           }
                       }
                   }
  @@ -426,7 +510,7 @@
               $ctx->{-track}->{$ds_name} = 0;
           }
           RRDs::update(
  -            $cfg->{'Database'},
  +            $cfg->{'Database'}->{-file},
               '--template', $ds_list,
               sprintf("%d", $ctx->{-endtime}).":".$dv_list
           );
  @@ -452,36 +536,6 @@
   
           #   post-process parameters
           my $img_format = ($img_file =~ m|\.png$| ? "PNG" : "GIF");
  -        sub cv_time {
  -            my ($t) = @_;
  -            if ($t =~ m|^now(.*)$|) {
  -                $t = time() + &cv_time($1);
  -            }
  -            elsif ($t =~ m|^([-+])(.+)$|) {
  -                $t = &cv_time($2);
  -                eval "\$t = $1 \$t";
  -            }
  -            elsif ($t =~ m|(\d{2})-([A-Za-z]{3})-(\d{4})|) {
  -                $t = str2time($t);
  -            }
  -            elsif ($t =~ m|^([\d.]+)([smhdwMY])$|) {
  -                $t = $1;
  -                if    ($2 eq 's') { $t *=            1; }
  -                elsif ($2 eq 'm') { $t *=           60; }
  -                elsif ($2 eq 'h') { $t *=        60*60; }
  -                elsif ($2 eq 'd') { $t *=     24*60*60; }
  -                elsif ($2 eq 'w') { $t *=   7*24*60*60; }
  -                elsif ($2 eq 'M') { $t *=  30*24*60*60; }
  -                elsif ($2 eq 'Y') { $t *= 365*24*60*60; }
  -            }
  -            elsif ($t =~ m|^([\d.]+)$|) {
  -                $t = $1;
  -            }
  -            else {
  -                $t = 0;
  -            }
  -            return $t;
  -        }
           if ($graph_start =~ m/^\-(.+)/) {
               $graph_end   = &cv_time($graph_end);
               $graph_start = $graph_end - &cv_time($1);
  @@ -494,24 +548,6 @@
               $graph_start = &cv_time($graph_start);
               $graph_end   = &cv_time($graph_end);
           }
  -        sub cv_limit {
  -            my ($l) = @_;
  -            if ($l eq '') {
  -                $l = 0;
  -            }
  -            elsif ($l =~ m|^([-+])(.*)$|) {
  -                $l = &cv_limit($2);
  -                eval "\$l = $1 \$l";
  -            }
  -            elsif ($l =~ m|^(\d+)([KMGT])$|) {
  -                $l = $1;
  -                if ($2 eq 'K') { $l *=                1024; }
  -                if ($2 eq 'M') { $l *=           1024*1024; }
  -                if ($2 eq 'G') { $l *=      1024*1024*1024; }
  -                if ($2 eq 'T') { $l *= 1024*1024*1024*1024; }
  -            }
  -            return $l;
  -        }
           $graph_ulimit = &cv_limit($graph_ulimit);
           $graph_llimit = &cv_limit($graph_llimit);
   
  @@ -561,8 +597,8 @@
                   my $cdef_o = '';
                   foreach my $service (@{$host->{-target}->{$target}->{-service}}) {
                       my $ds_name = &make_rrd_ds_name($host->{-name}, $target, $service);
  -                    push(@def, sprintf("DEF:%s_o=%s:%s_o:LAST", $ds_name, $cfg->{'Database'}, $ds_name));
  -                    push(@def, sprintf("DEF:%s_i=%s:%s_i:LAST", $ds_name, $cfg->{'Database'}, $ds_name));
  +                    push(@def, sprintf("DEF:%s_o=%s:%s_o:LAST", $ds_name, $cfg->{'Database'}->{-file}, $ds_name));
  +                    push(@def, sprintf("DEF:%s_i=%s:%s_i:LAST", $ds_name, $cfg->{'Database'}->{-file}, $ds_name));
                       $cdef_o = ($cdef_o eq '' ? "${ds_name}_o" : "${ds_name}_o,$cdef_o,+");
                       $cdef_i = ($cdef_i eq '' ? "${ds_name}_i" : "${ds_name}_i,$cdef_i,+");
                   }
  @@ -655,8 +691,8 @@
               my $i = 0;
               foreach my $service (@{$host->{-target}->{$target}->{-service}}) {
                   my $ds_name = &make_rrd_ds_name($host->{-name}, $target, $service);
  -                push(@def,    sprintf("DEF:%s_o=%s:%s_o:LAST", $ds_name, $cfg->{'Database'}, $ds_name));
  -                push(@def,    sprintf("DEF:%s_i=%s:%s_i:LAST", $ds_name, $cfg->{'Database'}, $ds_name));
  +                push(@def,    sprintf("DEF:%s_o=%s:%s_o:LAST", $ds_name, $cfg->{'Database'}->{-file}, $ds_name));
  +                push(@def,    sprintf("DEF:%s_i=%s:%s_i:LAST", $ds_name, $cfg->{'Database'}->{-file}, $ds_name));
                   push(@cdef,   sprintf("CDEF:data%d_o=%s_o,8,*,+1,*", $i, $ds_name));
                   push(@cdef,   sprintf("CDEF:data%d_i=%s_i,8,*,-1,*", $i, $ds_name));
                   my $color_o; eval "\$color_o = 0x".$colors->[$i];
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/flow2rrd.pod
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 flow2rrd.pod
  --- ossp-pkg/flow2rrd/flow2rrd.pod	26 Dec 2004 20:03:35 -0000	1.6
  +++ ossp-pkg/flow2rrd/flow2rrd.pod	29 Dec 2004 14:10:38 -0000	1.7
  @@ -161,11 +161,14 @@
                            <dir-service>  |
                            <dir-host>     |
                            <dir-colors>   )+
  - <dir-database>    ::= "Database" <path> ";"
  + <dir-database>    ::= "Database" <path> "{" <seq-database> "}" ";"
    <dir-protocol>    ::= "Protocol" <name> <number> ";"
    <dir-service>     ::= "Service" <name> (<name>.":".(<number>|"*"))+ ";"
    <dir-host>        ::= "Host" <hostname> "{" "}" <seq-host> ";"
    <dir-colors>      ::= "Colors" <name> <color>+ ";"
  + <seq-database>    ::= <dir-stepping> | <dir-storage>
  + <dir-stepping>    ::= "Stepping" <time> ";"
  + <dir-storage>     ::= "Storage" (<time>:<time>)+ ";"
    <seq-host>        ::= <dir-target>+
    <dir-target>      ::= "Target" <name> "{" <seq-target> "}" ";"
    <seq-target>      ::= (<dir-network> | <dir-service>)+
  @@ .

From ossp-cvs-owner@ossp.org  Wed Dec 29 16:21:20 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CF898763C9; Wed, 29 Dec 2004 16:21:19 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/flow2rrd/ ChangeLog flow2rrd.pl
Message-Id: <20041229152119.CF898763C9@mail.ossp.org>
Date: Wed, 29 Dec 2004 16:21:19 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Dec-2004 16:21:19
  Branch: HEAD                             Handle: 2004122915211900

  Modified files:
    ossp-pkg/flow2rrd       ChangeLog flow2rrd.pl

  Log:
    Better formatting of legend by manually aligning elements
    in width-dependent number of columns.

  Summary:
    Revision    Changes     Path
    1.12        +4  -0      ossp-pkg/flow2rrd/ChangeLog
    1.17        +22 -4      ossp-pkg/flow2rrd/flow2rrd.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 ChangeLog
  --- ossp-pkg/flow2rrd/ChangeLog	29 Dec 2004 14:10:37 -0000	1.11
  +++ ossp-pkg/flow2rrd/ChangeLog	29 Dec 2004 15:21:19 -0000	1.12
  @@ -10,6 +10,10 @@
   
     Changes between 0.9.1 and 0.9.2 (26-Dec-2004 to 27-Dec-2004):
   
  +    *) Better formatting of legend by manually aligning elements
  +       in width-dependent number of columns.
  +       [Ralf S. Engelschall]
  +
       *) Add --verbose option and use it to show a flow/sec indication
          under option --store.
          [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/flow2rrd.pl
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 flow2rrd.pl
  --- ossp-pkg/flow2rrd/flow2rrd.pl	29 Dec 2004 14:10:38 -0000	1.16
  +++ ossp-pkg/flow2rrd/flow2rrd.pl	29 Dec 2004 15:21:19 -0000	1.17
  @@ -591,6 +591,11 @@
               my @draw_o = ();
               my @draw_i = ();
               my $i = 0;
  +            my $cols = 1;
  +            $cols = 2 if ($graph->{-img_width} >= 200);
  +            $cols = 3 if ($graph->{-img_width} >= 400);
  +            $cols = 4 if ($graph->{-img_width} >= 600);
  +            $cols = 5 if ($graph->{-img_width} >= 800);
               #   FIXME: UNKNOWN data?
               foreach my $target (@{$host->{-target}->{-order}}) {
                   my $cdef_i = '';
  @@ -609,8 +614,12 @@
                   push(@cdef, sprintf("CDEF:data%d_i=%s", $i, $cdef_i));
                   my $color_o; eval "\$color_o = 0x".$colors->[$i];
                   my $color_i; eval "\$color_i = \$color_o - 0x101010";
  -                push(@draw_o, sprintf("%s:data%d_o#%06x:out %s", ($i == 0 ? "AREA" : "STACK"), $i, $color_o, $target));
  -                push(@draw_i, sprintf("%s:data%d_i#%06x:in  %s", ($i == 0 ? "AREA" : "STACK"), $i, $color_i, $target));
  +                push(@draw_o, sprintf("GPRINT:data%d_o:AVERAGE:%%4.0lf%%S", $i));
  +                push(@draw_o, sprintf("%s:data%d_o#%06x:out %s", ($i == 0 ? "AREA" : "STACK"), $i, $color_o, sprintf("%-8s", substr($target, 0, 8))));
  +                push(@draw_o, 'COMMENT:\n') if ($i % $cols == ($cols-1));
  +                push(@draw_i, sprintf("GPRINT:data%d_o:AVERAGE:%%4.0lf%%S", $i));
  +                push(@draw_i, sprintf("%s:data%d_i#%06x:in  %s", ($i == 0 ? "AREA" : "STACK"), $i, $color_i, sprintf("%-8s", substr($target, 0, 8))));
  +                push(@draw_i, 'COMMENT:\n') if ($i % $cols == ($cols-1));
                   $i++;
               }
               my @draw = (@draw_o, 'COMMENT:\n', @draw_i);
  @@ -689,6 +698,11 @@
               my @draw_o = ();
               my @draw_i = ();
               my $i = 0;
  +            my $cols = 1;
  +            $cols = 2 if ($graph->{-img_width} >= 200);
  +            $cols = 3 if ($graph->{-img_width} >= 400);
  +            $cols = 4 if ($graph->{-img_width} >= 600);
  +            $cols = 5 if ($graph->{-img_width} >= 800);
               foreach my $service (@{$host->{-target}->{$target}->{-service}}) {
                   my $ds_name = &make_rrd_ds_name($host->{-name}, $target, $service);
                   push(@def,    sprintf("DEF:%s_o=%s:%s_o:LAST", $ds_name, $cfg->{'Database'}->{-file}, $ds_name));
  @@ -697,8 +711,12 @@
                   push(@cdef,   sprintf("CDEF:data%d_i=%s_i,8,*,-1,*", $i, $ds_name));
                   my $color_o; eval "\$color_o = 0x".$colors->[$i];
                   my $color_i; eval "\$color_i = \$color_o - 0x101010";
  -                push(@draw_o, sprintf("%s:data%d_o#%06x:out %s", ($i == 0 ? "AREA" : "STACK"), $i, $color_o, $service));
  -                push(@draw_i, sprintf("%s:data%d_i#%06x:in  %s", ($i == 0 ? "AREA" : "STACK"), $i, $color_i, $service));
  +                push(@draw_o, sprintf("GPRINT:data%d_o:AVERAGE:%%4.0lf%%S", $i));
  +                push(@draw_o, sprintf("%s:data%d_o#%06x:out %s", ($i == 0 ? "AREA" : "STACK"), $i, $color_o, sprintf("%-8s", substr($service, 0, 8))));
  +                push(@draw_o, 'COMMENT:\n') if ($i % $cols == ($cols-1));
  +                push(@draw_i, sprintf("GPRINT:data%d_o:AVERAGE:%%4.0lf%%S", $i));
  +                push(@draw_i, sprintf("%s:data%d_i#%06x:in  %s", ($i == 0 ? "AREA" : "STACK"), $i, $color_i, sprintf("%-8s", substr($service, 0, 8))));
  +                push(@draw_i, 'COMMENT:\n') if ($i % $cols == ($cols-1));
                   $i++;
               }
               my @draw = (@draw_o, 'COMMENT:\n', @draw_i);
  @@ .

From ossp-cvs-owner@ossp.org  Wed Dec 29 16:22:00 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6D78D763C9; Wed, 29 Dec 2004 16:22:00 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/flow2rrd/ ChangeLog
Message-Id: <20041229152200.6D78D763C9@mail.ossp.org>
Date: Wed, 29 Dec 2004 16:22:00 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Dec-2004 16:22:00
  Branch: HEAD                             Handle: 2004122915220000

  Modified files:
    ossp-pkg/flow2rrd       ChangeLog

  Log:
    remember what is now available, too.

  Summary:
    Revision    Changes     Path
    1.13        +2  -1      ossp-pkg/flow2rrd/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 ChangeLog
  --- ossp-pkg/flow2rrd/ChangeLog	29 Dec 2004 15:21:19 -0000	1.12
  +++ ossp-pkg/flow2rrd/ChangeLog	29 Dec 2004 15:22:00 -0000	1.13
  @@ -11,7 +11,8 @@
     Changes between 0.9.1 and 0.9.2 (26-Dec-2004 to 27-Dec-2004):
   
       *) Better formatting of legend by manually aligning elements
  -       in width-dependent number of columns.
  +       in width-dependent number of columns and by prefixing elements
  +       with calculated average traffic.
          [Ralf S. Engelschall]
   
       *) Add --verbose option and use it to show a flow/sec indication
  @@ .

From ossp-cvs-owner@ossp.org  Wed Dec 29 16:45:56 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B61D07643B; Wed, 29 Dec 2004 16:45:56 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/flow2rrd/ flow2rrd.pl
Message-Id: <20041229154556.B61D07643B@mail.ossp.org>
Date: Wed, 29 Dec 2004 16:45:56 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Dec-2004 16:45:56
  Branch: HEAD                             Handle: 2004122915455600

  Modified files:
    ossp-pkg/flow2rrd       flow2rrd.pl

  Log:
    further improve legend by adding total average traffic

  Summary:
    Revision    Changes     Path
    1.18        +29 -3      ossp-pkg/flow2rrd/flow2rrd.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/flow2rrd.pl
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 flow2rrd.pl
  --- ossp-pkg/flow2rrd/flow2rrd.pl	29 Dec 2004 15:21:19 -0000	1.17
  +++ ossp-pkg/flow2rrd/flow2rrd.pl	29 Dec 2004 15:45:56 -0000	1.18
  @@ -597,6 +597,8 @@
               $cols = 4 if ($graph->{-img_width} >= 600);
               $cols = 5 if ($graph->{-img_width} >= 800);
               #   FIXME: UNKNOWN data?
  +            my $data_i = '';
  +            my $data_o = '';
               foreach my $target (@{$host->{-target}->{-order}}) {
                   my $cdef_i = '';
                   my $cdef_o = '';
  @@ -617,12 +619,23 @@
                   push(@draw_o, sprintf("GPRINT:data%d_o:AVERAGE:%%4.0lf%%S", $i));
                   push(@draw_o, sprintf("%s:data%d_o#%06x:out %s", ($i == 0 ? "AREA" : "STACK"), $i, $color_o, sprintf("%-8s", substr($target, 0, 8))));
                   push(@draw_o, 'COMMENT:\n') if ($i % $cols == ($cols-1));
  -                push(@draw_i, sprintf("GPRINT:data%d_o:AVERAGE:%%4.0lf%%S", $i));
  +                push(@draw_i, sprintf("GPRINT:data%d_i:AVERAGE:%%4.0lf%%S", $i));
                   push(@draw_i, sprintf("%s:data%d_i#%06x:in  %s", ($i == 0 ? "AREA" : "STACK"), $i, $color_i, sprintf("%-8s", substr($target, 0, 8))));
                   push(@draw_i, 'COMMENT:\n') if ($i % $cols == ($cols-1));
  +                $data_o = ($data_o eq '' ? sprintf("data%d_o", $i) : sprintf("data%d_o,%s,+", $i, $data_o));
  +                $data_i = ($data_i eq '' ? sprintf("data%d_i", $i) : sprintf("data%d_i,%s,+", $i, $data_i));
                   $i++;
               }
  +            push(@cdef, sprintf("CDEF:data_o=%s", $data_o));
  +            push(@cdef, sprintf("CDEF:data_i=%s", $data_i));
  +
               my @draw = (@draw_o, 'COMMENT:\n', @draw_i);
  +
  +            push(@draw, 'COMMENT:\n');
  +            push(@draw, 'COMMENT:\n');
  +            push(@draw, sprintf("GPRINT:data_o:AVERAGE:Total Average Traffic\\:  %%.0lf%%S out /"));
  +            push(@draw, sprintf("GPRINT:data_i:AVERAGE:%%.0lf%%S in"));
  +
               push(@draw, "HRULE:0#000000");
               my $now = time();
               my $tzoffset = $now - timelocal(gmtime($now));
  @@ -703,6 +716,8 @@
               $cols = 3 if ($graph->{-img_width} >= 400);
               $cols = 4 if ($graph->{-img_width} >= 600);
               $cols = 5 if ($graph->{-img_width} >= 800);
  +            my $data_i = '';
  +            my $data_o = '';
               foreach my $service (@{$host->{-target}->{$target}->{-service}}) {
                   my $ds_name = &make_rrd_ds_name($host->{-name}, $target, $service);
                   push(@def,    sprintf("DEF:%s_o=%s:%s_o:LAST", $ds_name, $cfg->{'Database'}->{-file}, $ds_name));
  @@ -711,15 +726,26 @@
                   push(@cdef,   sprintf("CDEF:data%d_i=%s_i,8,*,-1,*", $i, $ds_name));
                   my $color_o; eval "\$color_o = 0x".$colors->[$i];
                   my $color_i; eval "\$color_i = \$color_o - 0x101010";
  -                push(@draw_o, sprintf("GPRINT:data%d_o:AVERAGE:%%4.0lf%%S", $i));
  +                push(@draw_o, sprintf("GPRINT:data%d_o:AVERAGE:%%4.0lf%%s", $i));
                   push(@draw_o, sprintf("%s:data%d_o#%06x:out %s", ($i == 0 ? "AREA" : "STACK"), $i, $color_o, sprintf("%-8s", substr($service, 0, 8))));
                   push(@draw_o, 'COMMENT:\n') if ($i % $cols == ($cols-1));
  -                push(@draw_i, sprintf("GPRINT:data%d_o:AVERAGE:%%4.0lf%%S", $i));
  +                push(@draw_i, sprintf("GPRINT:data%d_i:AVERAGE:%%4.0lf%%s", $i));
                   push(@draw_i, sprintf("%s:data%d_i#%06x:in  %s", ($i == 0 ? "AREA" : "STACK"), $i, $color_i, sprintf("%-8s", substr($service, 0, 8))));
                   push(@draw_i, 'COMMENT:\n') if ($i % $cols == ($cols-1));
  +                $data_o = ($data_o eq '' ? sprintf("data%d_o", $i) : sprintf("data%d_o,%s,+", $i, $data_o));
  +                $data_i = ($data_i eq '' ? sprintf("data%d_i", $i) : sprintf("data%d_i,%s,+", $i, $data_i));
                   $i++;
               }
  +            push(@cdef, sprintf("CDEF:data_o=%s", $data_o));
  +            push(@cdef, sprintf("CDEF:data_i=%s", $data_i));
  +
               my @draw = (@draw_o, 'COMMENT:\n', @draw_i);
  +
  +            push(@draw, 'COMMENT:\n');
  +            push(@draw, 'COMMENT:\n');
  +            push(@draw, sprintf("GPRINT:data_o:AVERAGE:Total Average Traffic\\:  %%.0lf%%S out /"));
  +            push(@draw, sprintf("GPRINT:data_i:AVERAGE:%%.0lf%%S in"));
  +
               push(@draw, "HRULE:0#000000");
               my $now = time();
               my $tzoffset = $now - timelocal(gmtime($now));
  @@ .

From ossp-cvs-owner@ossp.org  Thu Dec 30 16:56:01 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A7CCA763C6; Thu, 30 Dec 2004 16:56:01 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/flow2rrd/ ChangeLog flow2rrd.pl
Message-Id: <20041230155601.A7CCA763C6@mail.ossp.org>
Date: Thu, 30 Dec 2004 16:56:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Dec-2004 16:56:01
  Branch: HEAD                             Handle: 2004123015560000

  Modified files:
    ossp-pkg/flow2rrd       ChangeLog flow2rrd.pl

  Log:
    Calculate a more reasonable Y axis auto-scaling based
    on average numbers instead of maximum numbers.

  Summary:
    Revision    Changes     Path
    1.14        +4  -0      ossp-pkg/flow2rrd/ChangeLog
    1.19        +41 -2      ossp-pkg/flow2rrd/flow2rrd.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 ChangeLog
  --- ossp-pkg/flow2rrd/ChangeLog	29 Dec 2004 15:22:00 -0000	1.13
  +++ ossp-pkg/flow2rrd/ChangeLog	30 Dec 2004 15:56:00 -0000	1.14
  @@ -10,6 +10,10 @@
   
     Changes between 0.9.1 and 0.9.2 (26-Dec-2004 to 27-Dec-2004):
   
  +    *) Calculate a more reasonable Y axis auto-scaling based
  +       on average numbers instead of maximum numbers.
  +       [Ralf S. Engelschall]
  +
       *) Better formatting of legend by manually aligning elements
          in width-dependent number of columns and by prefixing elements
          with calculated average traffic.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/flow2rrd.pl
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 flow2rrd.pl
  --- ossp-pkg/flow2rrd/flow2rrd.pl	29 Dec 2004 15:45:56 -0000	1.18
  +++ ossp-pkg/flow2rrd/flow2rrd.pl	30 Dec 2004 15:56:00 -0000	1.19
  @@ -672,7 +672,7 @@
               push(@args, @def);
               push(@args, @cdef);
               push(@args, @draw);
  -            my ($rrd_averages, $rrd_xsize, $rrd_ysize) = RRDs::graph(@args);
  +            my ($rrd_averages, $rrd_xsize, $rrd_ysize) = &rrd_graph(@args);
               my $err = RRDs::error();
               die "failed to generate graph from RRD file: $err" if (defined($err));
           }
  @@ -782,10 +782,49 @@
               push(@args, @def);
               push(@args, @cdef);
               push(@args, @draw);
  -            my ($rrd_averages, $rrd_xsize, $rrd_ysize) = RRDs::graph(@args);
  +            my ($rrd_averages, $rrd_xsize, $rrd_ysize) = &rrd_graph(@args);
               my $err = RRDs::error();
               die "failed to generate graph from RRD file: $err" if (defined($err));
           }
  +
  +        #   render an RRD graph (frontend to RRDs::graph() function)
  +        sub rrd_graph {
  +            my (@args) = @_;
  +            my ($rrd_results, $rrd_xsize, $rrd_ysize);
  +
  +            #   if no Y axis limits are specified, try to determine
  +            #   reasonable ones based on the calculated average values
  +            #   (instead of the maximum values RRDTool uses by default)
  +            if (not grep { $_ =~ m/^--(?:upper|lower)-limit$/ } @args) {
  +                my @a = @args;
  +                @a = map  { s/^GPRINT/PRINT/s; $_ }
  +                     grep { $_ !~ m/^(AREA|STACK|LINE|HRULE|VRULE):/ }
  +                     @a;
  +                ($rrd_results, $rrd_xsize, $rrd_ysize) = RRDs::graph(@a);
  +                my $err = RRDs::error();
  +                if (not defined($err)) {
  +                    my $print = join(" ", @{$rrd_results});
  +                    if ($print =~ m/Total Average Traffic:\s+(\S+)\s+out\s+\/\s+(\S+)\s+in/s) {
  +                        my ($ulimit, $llimit) = (&canon($1), &canon($2));
  +                        sub canon {
  +                            my ($limit) = @_;
  +                            if    ($limit =~ m|^([+-]?\d+)k$|) { $limit = $1 * 1000;           }
  +                            elsif ($limit =~ m|^([+-]?\d+)M$|) { $limit = $1 * 1000*1000;      }
  +                            elsif ($limit =~ m|^([+-]?\d+)G$|) { $limit = $1 * 1000*1000*1000; }
  +                            return $limit;
  +                        }
  +                        $ulimit = int($ulimit * 1.5);
  +                        $llimit = int($llimit * 1.5);
  +                        push(@args, '--upper-limit', $ulimit);
  +                        push(@args, '--lower-limit', $llimit);
  +                    }
  +                }
  +            }
  +
  +            #   pass through the arguments to the RRDs::graph() function
  +            ($rrd_results, $rrd_xsize, $rrd_ysize) = RRDs::graph(@args);
  +            return ($rrd_results, $rrd_xsize, $rrd_ysize);
  +        }
       }
   }
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Dec 30 16:56:37 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B8585763C6; Thu, 30 Dec 2004 16:56:37 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/flow2rrd/ TODO
Message-Id: <20041230155637.B8585763C6@mail.ossp.org>
Date: Thu, 30 Dec 2004 16:56:37 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Dec-2004 16:56:37
  Branch: HEAD                             Handle: 2004123015563700

  Modified files:
    ossp-pkg/flow2rrd       TODO

  Log:
    done

  Summary:
    Revision    Changes     Path
    1.8         +0  -1      ossp-pkg/flow2rrd/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/TODO
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 TODO
  --- ossp-pkg/flow2rrd/TODO	29 Dec 2004 12:03:41 -0000	1.7
  +++ ossp-pkg/flow2rrd/TODO	30 Dec 2004 15:56:37 -0000	1.8
  @@ -18,7 +18,6 @@
     - larger/smaller buttons on explore website
     - back button on explore website
     - extend manual page flow2rrd.pod?
  -  - auto y scaling according to y values: 20%
     - add to legend the sums (integrals)
     - perhaps render also an average LINE into the graphs?
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Dec 30 17:17:25 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8AF99763C8; Thu, 30 Dec 2004 17:17:25 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/flow2rrd/ flow2rrd.pl
Message-Id: <20041230161725.8AF99763C8@mail.ossp.org>
Date: Thu, 30 Dec 2004 17:17:25 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Dec-2004 17:17:25
  Branch: HEAD                             Handle: 2004123016172500

  Modified files:
    ossp-pkg/flow2rrd       flow2rrd.pl

  Log:
    add comments and cleanup some code

  Summary:
    Revision    Changes     Path
    1.20        +21 -10     ossp-pkg/flow2rrd/flow2rrd.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/flow2rrd.pl
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 flow2rrd.pl
  --- ossp-pkg/flow2rrd/flow2rrd.pl	30 Dec 2004 15:56:00 -0000	1.19
  +++ ossp-pkg/flow2rrd/flow2rrd.pl	30 Dec 2004 16:17:25 -0000	1.20
  @@ -835,7 +835,7 @@
   if ($opt->{-cgi}) {
       my $cgi = new CGI;
   
  -    #   error handler
  +    #   CGI error handler
       $SIG{__DIE__} = sub {
           my ($msg) = @_;
           my $hint = '';
  @@ -871,8 +871,9 @@
           #   output Cascading Style Sheet (CSS)
           #
   
  +        #   define CSS content
           my $css = q{
  -            body {
  +            BODY {
                   background:      #c0c0c0;
                   color:           #ffffff;
                   font-family:     helvetica,arial,tahoma,verdana,sans-serif;
  @@ -924,7 +925,7 @@
               }
           };
   
  -        #   send out page
  +        #   send out CSS data
           $css =~ s|^            ||mg;
           print STDOUT $cgi->header(
               -type => 'text/css',
  @@ -943,7 +944,7 @@
   
           #   generate graph image
           my $rc = system("GATEWAY_INTERFACE=none $0 --config=\"$opt->{-config}\" --graph $graph");
  -        if ($rc != 0) { # or not -s $tmpfile) {
  +        if ($rc != 0 or not -s $tmpfile) {
               die "failed to generate graph image: $!";
           }
   
  @@ -971,6 +972,7 @@
           my $html = new String::Divert;
           $html->overload(1);
   
  +        #   generate HTML page skeleton
           $html .=
               "<html>\n" .
               "  <head>\n" .
  @@ -981,10 +983,13 @@
               "  </body>\n" .
               "</html>\n";
   
  +        #   generate HTML header
           $html >> "head";
  +        $html .= "<title>OSSP flow2rrd: Real-Time Network Statistics</title>\n";
           $html .= "<link rel=\"stylesheet\" type=\"text/css\" href=\"".$cgi->url(-relative => 1)."?css=1\">\n";
           $html << 1;
   
  +        #   generate HTML body page skeleton
           $html >> "body";
           $html .= "<table class=\"flow2rrd\" border=0 cellpadding=0 cellspacing=0>\n";
           $html .= "  <tr>\n";
  @@ -1005,6 +1010,7 @@
           $html .= "</table>\n";
           $html << 1;
   
  +        #   generate page header & footer
           $html >> "header";
           $html .= "<a href=\"".$cgi->url(-relative => 1)."\">Real-Time Network Statistics</a>";
           $html << 1;
  @@ -1012,6 +1018,7 @@
           $html .= "<a href=\"$my->{-proghome}\">$my->{-progname}</a> $my->{-progvers}";
           $html << 1;
   
  +        #   determine input parameters (and their defaults)
           my $width  = ($cgi->param("width")  || "800");
           my $height = ($cgi->param("height") || "200");
           my $start  = ($cgi->param("start")  || "-48h");
  @@ -1019,6 +1026,7 @@
           my $ulimit = ($cgi->param("ulimit") || "0");
           my $llimit = ($cgi->param("llimit") || "0");
   
  +        #   generate page canvas skeleton
           $html >> "canvas";
           $html .= $cgi->start_form(
               -method  => "POST",
  @@ -1041,14 +1049,15 @@
           $html .= $cgi->end_form();
           $html << 1;
   
  +        #   generate page view part
           my $img = $cgi->url(-relative => 1) . "?graph=$explore\@$width:$height:$start:$end:$ulimit:$llimit";
           $html >> "view";
           $html .= "<img src=\"$img\">\n";
           $html << 1;
   
  +        #   generate page toolbar part
           $html >> "toolbar";
           $html .= "<table>\n";
  -
           $html .= "<tr><td>Graph Size:</td><td>" . $cgi->textfield(
               -name      => 'width',
               -default   => $width,
  @@ -1062,7 +1071,6 @@
               -maxlength => 4,
               -class     => 'textfield',
           ) . "</td><td>(pixels)</td><td>Examples: '400 x 100', '800 x 200', ...</td></tr>";
  -
           $html .= "<tr><td>Data X-Range:</td><td>" . $cgi->textfield(
               -name      => 'start',
               -default   => $start,
  @@ -1076,7 +1084,6 @@
               -maxlength => 20,
               -class     => 'textfield',
           ) . "</td><td>(time)</td><td>Examples: '-2d - now', '24-Dec-2004 - +48h', ...</td></tr>";
  -
           $html .= "<tr><td>Data Y-Range:</td><td>" . $cgi->textfield(
               -name      => 'ulimit',
               -default   => $ulimit,
  @@ -1090,15 +1097,12 @@
               -maxlength => 10,
               -class     => 'textfield',
           ) . "</td><td>(Bit/s)</td><td>Examples: '2K - -1K', '4M - 2M', ...</td></tr>";
  -
           $html .= "  <tr>\n";
           $html .= "    <td colspan=4>". $cgi->submit(-name => "Update Graph", -class => "submit") . "</td>\n";
           $html .= "  </tr>\n";
  -
           $html .= "</table>\n";
           $html << 1;
   
  -
           #   send out page
           $html->undivert(0);
           print STDOUT $cgi->header(
  @@ -1119,6 +1123,7 @@
           my $html = new String::Divert;
           $html->overload(1);
   
  +        #   generate HTML page skeleton
           $html .=
               "<html>\n" .
               "  <head>\n" .
  @@ -1129,10 +1134,13 @@
               "  </body>\n" .
               "</html>\n";
   
  +        #   generate HTML header
           $html >> "head";
  +        $html .= "<title>OSSP flow2rrd: Real-Time Network Statistics</title>\n";
           $html .= "<link rel=\"stylesheet\" type=\"text/css\" href=\"".$cgi->url(-relative => 1)."?css=1\">\n";
           $html << 1;
   
  +        #   generate HTML body page skeleton
           $html >> "body";
           $html .= "<table class=\"flow2rrd\" border=0 cellpadding=0 cellspacing=0>\n";
           $html .= "  <tr>\n";
  @@ -1153,6 +1161,7 @@
           $html .= "</table>\n";
           $html << 1;
   
  +        #   generate page header & footer
           $html >> "header";
           $html .= "<a href=\"".$cgi->url(-relative => 1)."\">Real-Time Network Statistics</a>";
           $html << 1;
  @@ -1160,6 +1169,7 @@
           $html .= "<a href=\"$my->{-proghome}\">$my->{-progname}</a> $my->{-progvers}";
           $html << 1;
   
  +        #   generate page canvas structure
           $html >> "canvas";
           $html .= "<table border=0 cellpadding=0 cellspacing=0>\n";
           $html .= "  <tr>\n";
  @@ -1172,6 +1182,7 @@
           $html .= "</table>\n";
           $html << 1;
   
  +        #   generate page canvas cells
           for (my $i = 0; $i < @{$cfg->{'Host'}}; $i++) {
               my $host = $cfg->{'Host'}->[$i];
               $html >> "col$i";
  @@ .

From ossp-cvs-owner@ossp.org  Thu Dec 30 17:22:03 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AEA72763C6; Thu, 30 Dec 2004 17:22:03 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/flow2rrd/ flow2rrd.cfg
Message-Id: <20041230162203.AEA72763C6@mail.ossp.org>
Date: Thu, 30 Dec 2004 17:22:03 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Dec-2004 17:22:03
  Branch: HEAD                             Handle: 2004123016220300

  Modified files:
    ossp-pkg/flow2rrd       flow2rrd.cfg

  Log:
    add license also to config file

  Summary:
    Revision    Changes     Path
    1.7         +23 -1      ossp-pkg/flow2rrd/flow2rrd.cfg
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/flow2rrd/flow2rrd.cfg
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 flow2rrd.cfg
  --- ossp-pkg/flow2rrd/flow2rrd.cfg	29 Dec 2004 14:10:38 -0000	1.6
  +++ ossp-pkg/flow2rrd/flow2rrd.cfg	30 Dec 2004 16:22:03 -0000	1.7
  @@ -1,5 +1,27 @@
   ##
  -##  flow2rrd.cfg -- flow2rrd(1) configuration
  +##  OSSP flow2rrd -- NetFlow to Round-Robin Database
  +##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP flow2rrd, a tool for storing NetFlow data
  +##  into an RRD which can be found at http://www.ossp.org/pkg/tool/flow2rrd/.
  +##
  +##  This program is free software; you can redistribute it and/or modify
  +##  it under the terms of the GNU General Public License as published by
  +##  the Free Software Foundation; either version 2 of the License, or
  +##  (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this program; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  flow2rrd.cfg: run-time configuration
   ##
   
   #   Round-Robin Database
  @@ .

From ossp-cvs-owner@ossp.org  Thu Dec 30 18:30:43 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0760A763AA; Thu, 30 Dec 2004 18:30:42 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt
Message-Id: <20041230173042.0760A763AA@mail.ossp.org>
Date: Thu, 30 Dec 2004 18:30:42 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   30-Dec-2004 18:30:42
  Branch: HEAD                             Handle: 2004123017304200

  Modified files:
    ossp-web/new            news.txt

  Log:
    fix broken links

  Summary:
    Revision    Changes     Path
    1.114       +6  -6      ossp-web/new/news.txt
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.113 -r1.114 news.txt
  --- ossp-web/new/news.txt	26 Dec 2004 18:55:44 -0000	1.113
  +++ ossp-web/new/news.txt	30 Dec 2004 17:30:42 -0000	1.114
  @@ -157,14 +157,14 @@
   27-Feb-2001: Released T<GNU shtool> 1.5.2
   29-Jul-2000: Released T<GNU shtool> 1.5.1
   01-Jul-2000: Released T<GNU shtool> 1.5.0
  -01-Jul-2000: Released T<OSSP mm> 1.1.3
  -21-May-2000: Released T<OSSP mm> 1.1.2
  -30-Apr-2000: Released T<OSSP mm> 1.1.1
  -30-Apr-2000: Released T<OSSP mm> 1.1.0
  +01-Jul-2000: Released L<OSSP mm> 1.1.3
  +21-May-2000: Released L<OSSP mm> 1.1.2
  +30-Apr-2000: Released L<OSSP mm> 1.1.1
  +30-Apr-2000: Released L<OSSP mm> 1.1.0
   19-Feb-2000: Released T<GNU pth> 1.3.0
   31-Oct-1999: Released T<GNU pth> 1.2.0
   29-Oct-1999: Registered the ossp.org domain
  -28-Sep-1999: Released T<OSSP mm> 1.0.12
  +28-Sep-1999: Released L<OSSP mm> 1.0.12
   19-Aug-1999: Released T<GNU pth> 1.1.0
   16-Jul-1999: Released T<GNU pth> 1.0.0
   02-Jul-1999: Released T<GNU shtool> 1.4.0
  @@ -172,5 +172,5 @@
   29-Apr-1999: Released T<GNU shtool> 1.2.0
   26-Apr-1999: Released T<GNU shtool> 1.1.0
   22-Apr-1999: Released T<GNU shtool> 1.0.0
  -28-Mar-1999: Released T<OSSP mm> 1.0.0
  +28-Mar-1999: Released L<OSSP mm> 1.0.0
   17-Nov-1998: Genesis of the OSSP project
  @@ .

From ossp-cvs-owner@ossp.org  Fri Dec 31 20:16:35 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 230C3763BC; Fri, 31 Dec 2004 20:16:35 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ ChangeLog Makefile.in README aclocal.m4 cfg-...
Message-Id: <20041231191635.230C3763BC@mail.ossp.org>
Date: Fri, 31 Dec 2004 20:16:35 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Dec-2004 20:16:34
  Branch: HEAD                             Handle: 2004123119162410

  Modified files:
    ossp-pkg/cfg            ChangeLog Makefile.in README aclocal.m4
                            cfg-config.in cfg.ac cfg.h cfg.pod cfg_buf.c
                            cfg_buf.h cfg_data.c cfg_data.h cfg_fmt.c
                            cfg_fmt.h cfg_global.h cfg_grid.c cfg_grid.h
                            cfg_main.c cfg_main.h cfg_node.c cfg_node.h
                            cfg_syn.c cfg_syn.h cfg_syn_parse.y cfg_syn_scan.l
                            cfg_test.c cfg_test.cfg cfg_util.c cfg_util.h
                            configure.ac devtool devtool.conf devtool.func
    ossp-pkg/cfg/perl       Makefile.PL cfg.pm cfg.pod cfg.tm cfg.ts cfg.xs

  Log:
    Adjust copyright messages for new year 2005.

  Summary:
    Revision    Changes     Path
    1.30        +5  -0      ossp-pkg/cfg/ChangeLog
    1.9         +3  -3      ossp-pkg/cfg/Makefile.in
    1.15        +3  -3      ossp-pkg/cfg/README
    1.6         +3  -3      ossp-pkg/cfg/aclocal.m4
    1.6         +3  -3      ossp-pkg/cfg/cfg-config.in
    1.5         +3  -3      ossp-pkg/cfg/cfg.ac
    1.17        +3  -3      ossp-pkg/cfg/cfg.h
    1.13        +3  -3      ossp-pkg/cfg/cfg.pod
    1.15        +3  -3      ossp-pkg/cfg/cfg_buf.c
    1.10        +3  -3      ossp-pkg/cfg/cfg_buf.h
    1.11        +3  -3      ossp-pkg/cfg/cfg_data.c
    1.7         +3  -3      ossp-pkg/cfg/cfg_data.h
    1.7         +3  -3      ossp-pkg/cfg/cfg_fmt.c
    1.6         +3  -3      ossp-pkg/cfg/cfg_fmt.h
    1.5         +3  -3      ossp-pkg/cfg/cfg_global.h
    1.7         +3  -3      ossp-pkg/cfg/cfg_grid.c
    1.5         +3  -3      ossp-pkg/cfg/cfg_grid.h
    1.15        +3  -3      ossp-pkg/cfg/cfg_main.c
    1.6         +3  -3      ossp-pkg/cfg/cfg_main.h
    1.25        +3  -3      ossp-pkg/cfg/cfg_node.c
    1.12        +3  -3      ossp-pkg/cfg/cfg_node.h
    1.25        +3  -3      ossp-pkg/cfg/cfg_syn.c
    1.9         +3  -3      ossp-pkg/cfg/cfg_syn.h
    1.12        +3  -3      ossp-pkg/cfg/cfg_syn_parse.y
    1.24        +3  -3      ossp-pkg/cfg/cfg_syn_scan.l
    1.18        +3  -3      ossp-pkg/cfg/cfg_test.c
    1.5         +3  -3      ossp-pkg/cfg/cfg_test.cfg
    1.7         +3  -3      ossp-pkg/cfg/cfg_util.c
    1.6         +3  -3      ossp-pkg/cfg/cfg_util.h
    1.13        +3  -3      ossp-pkg/cfg/configure.ac
    1.4         +1  -1      ossp-pkg/cfg/devtool
    1.22        +3  -3      ossp-pkg/cfg/devtool.conf
    1.6         +1  -1      ossp-pkg/cfg/devtool.func
    1.2         +3  -3      ossp-pkg/cfg/perl/Makefile.PL
    1.12        +3  -3      ossp-pkg/cfg/perl/cfg.pm
    1.6         +3  -3      ossp-pkg/cfg/perl/cfg.pod
    1.2         +3  -3      ossp-pkg/cfg/perl/cfg.tm
    1.3         +3  -3      ossp-pkg/cfg/perl/cfg.ts
    1.8         +3  -3      ossp-pkg/cfg/perl/cfg.xs
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	19 Dec 2004 19:36:25 -0000	1.29
  +++ ossp-pkg/cfg/ChangeLog	31 Dec 2004 19:16:24 -0000	1.30
  @@ -8,6 +8,11 @@
   
     CHANGELOG
   
  + Changes between 0.9.7 and 0.9.8 (19-Dec-2004 to xx-Jan-2005):
  +
  +   *) Adjust copyright messages for new year 2005.
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
    Changes between 0.9.6 and 0.9.7 (04-Dec-2004 to 19-Dec-2004):
   
      *) Fixed cfg_node_get() function after recent introduction
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 Makefile.in
  --- ossp-pkg/cfg/Makefile.in	29 Nov 2004 07:35:52 -0000	1.8
  +++ ossp-pkg/cfg/Makefile.in	31 Dec 2004 19:16:24 -0000	1.9
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP cfg - Configuration Parsing
  -##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP cfg, a configuration parsing library which
   ##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/README
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 README
  --- ossp-pkg/cfg/README	19 Dec 2004 19:36:25 -0000	1.14
  +++ ossp-pkg/cfg/README	31 Dec 2004 19:16:25 -0000	1.15
  @@ -25,9 +25,9 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
  +  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
   
     This file is part of OSSP cfg, a configuration parsing library which
     can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 aclocal.m4
  --- ossp-pkg/cfg/aclocal.m4	17 Jul 2004 07:37:55 -0000	1.5
  +++ ossp-pkg/cfg/aclocal.m4	31 Dec 2004 19:16:25 -0000	1.6
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP cfg - Configuration Parsing
  -dnl ##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
  +dnl ##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
   dnl ##
   dnl ##  This file is part of OSSP cfg, a configuration parsing library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg-config.in
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 cfg-config.in
  --- ossp-pkg/cfg/cfg-config.in	17 Jul 2004 07:37:55 -0000	1.5
  +++ ossp-pkg/cfg/cfg-config.in	31 Dec 2004 19:16:25 -0000	1.6
  @@ -1,9 +1,9 @@
   #!/bin/sh
   ##
   ##  OSSP cfg - Configuration Parsing
  -##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP cfg, a configuration parsing library which
   ##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg.ac
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 cfg.ac
  --- ossp-pkg/cfg/cfg.ac	27 Nov 2004 19:56:24 -0000	1.4
  +++ ossp-pkg/cfg/cfg.ac	31 Dec 2004 19:16:25 -0000	1.5
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP cfg - Configuration Parsing
  -dnl ##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
  +dnl ##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
   dnl ##
   dnl ##  This file is part of OSSP cfg, a configuration parsing library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg.h
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 cfg.h
  --- ossp-pkg/cfg/cfg.h	4 Dec 2004 12:48:40 -0000	1.16
  +++ ossp-pkg/cfg/cfg.h	31 Dec 2004 19:16:25 -0000	1.17
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2004 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2005 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg.pod
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 cfg.pod
  --- ossp-pkg/cfg/cfg.pod	17 Jul 2004 07:37:55 -0000	1.12
  +++ ossp-pkg/cfg/cfg.pod	31 Dec 2004 19:16:25 -0000	1.13
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP cfg - Configuration Parsing
  -##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2002-2004 Cable & Wireless (http://www.cw.com/)
  +##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2005 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2002-2005 Cable & Wireless (http://www.cw.com/)
   ##
   ##  This file is part of OSSP cfg, a configuration parsing
   ##  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_buf.c
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 cfg_buf.c
  --- ossp-pkg/cfg/cfg_buf.c	29 Nov 2004 07:09:33 -0000	1.14
  +++ ossp-pkg/cfg/cfg_buf.c	31 Dec 2004 19:16:25 -0000	1.15
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2004 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2005 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_buf.h
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 cfg_buf.h
  --- ossp-pkg/cfg/cfg_buf.h	28 Nov 2004 17:05:44 -0000	1.9
  +++ ossp-pkg/cfg/cfg_buf.h	31 Dec 2004 19:16:25 -0000	1.10
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2004 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2005 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_data.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 cfg_data.c
  --- ossp-pkg/cfg/cfg_data.c	29 Nov 2004 07:09:33 -0000	1.10
  +++ ossp-pkg/cfg/cfg_data.c	31 Dec 2004 19:16:25 -0000	1.11
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2004 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2005 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_data.h
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 cfg_data.h
  --- ossp-pkg/cfg/cfg_data.h	17 Jul 2004 07:37:55 -0000	1.6
  +++ ossp-pkg/cfg/cfg_data.h	31 Dec 2004 19:16:25 -0000	1.7
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2004 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2005 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_fmt.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 cfg_fmt.c
  --- ossp-pkg/cfg/cfg_fmt.c	17 Jul 2004 07:37:55 -0000	1.6
  +++ ossp-pkg/cfg/cfg_fmt.c	31 Dec 2004 19:16:25 -0000	1.7
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2002 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2002 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2003 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_fmt.h
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 cfg_fmt.h
  --- ossp-pkg/cfg/cfg_fmt.h	17 Jul 2004 07:37:55 -0000	1.5
  +++ ossp-pkg/cfg/cfg_fmt.h	31 Dec 2004 19:16:25 -0000	1.6
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2004 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2005 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_global.h
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 cfg_global.h
  --- ossp-pkg/cfg/cfg_global.h	17 Jul 2004 07:37:55 -0000	1.4
  +++ ossp-pkg/cfg/cfg_global.h	31 Dec 2004 19:16:25 -0000	1.5
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2004 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2005 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_grid.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 cfg_grid.c
  --- ossp-pkg/cfg/cfg_grid.c	17 Jul 2004 07:37:55 -0000	1.6
  +++ ossp-pkg/cfg/cfg_grid.c	31 Dec 2004 19:16:25 -0000	1.7
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2004 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2005 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_grid.h
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 cfg_grid.h
  --- ossp-pkg/cfg/cfg_grid.h	17 Jul 2004 07:37:55 -0000	1.4
  +++ ossp-pkg/cfg/cfg_grid.h	31 Dec 2004 19:16:25 -0000	1.5
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2004 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2005 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_main.c
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 cfg_main.c
  --- ossp-pkg/cfg/cfg_main.c	4 Dec 2004 12:48:40 -0000	1.14
  +++ ossp-pkg/cfg/cfg_main.c	31 Dec 2004 19:16:25 -0000	1.15
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2004 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2005 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_main.h
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 cfg_main.h
  --- ossp-pkg/cfg/cfg_main.h	17 Jul 2004 07:37:55 -0000	1.5
  +++ ossp-pkg/cfg/cfg_main.h	31 Dec 2004 19:16:25 -0000	1.6
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2004 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2005 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_node.c
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 cfg_node.c
  --- ossp-pkg/cfg/cfg_node.c	19 Dec 2004 19:36:25 -0000	1.24
  +++ ossp-pkg/cfg/cfg_node.c	31 Dec 2004 19:16:25 -0000	1.25
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2004 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2005 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_node.h
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 cfg_node.h
  --- ossp-pkg/cfg/cfg_node.h	4 Dec 2004 12:48:40 -0000	1.11
  +++ ossp-pkg/cfg/cfg_node.h	31 Dec 2004 19:16:25 -0000	1.12
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2004 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2005 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_syn.c
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 cfg_syn.c
  --- ossp-pkg/cfg/cfg_syn.c	29 Nov 2004 07:09:33 -0000	1.24
  +++ ossp-pkg/cfg/cfg_syn.c	31 Dec 2004 19:16:25 -0000	1.25
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2004 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2005 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_syn.h
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 cfg_syn.h
  --- ossp-pkg/cfg/cfg_syn.h	28 Nov 2004 17:23:45 -0000	1.8
  +++ ossp-pkg/cfg/cfg_syn.h	31 Dec 2004 19:16:25 -0000	1.9
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2004 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2005 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_syn_parse.y
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 cfg_syn_parse.y
  --- ossp-pkg/cfg/cfg_syn_parse.y	4 Dec 2004 12:48:40 -0000	1.11
  +++ ossp-pkg/cfg/cfg_syn_parse.y	31 Dec 2004 19:16:25 -0000	1.12
  @@ -1,9 +1,9 @@
   %{
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2004 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2005 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_syn_scan.l
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 cfg_syn_scan.l
  --- ossp-pkg/cfg/cfg_syn_scan.l	29 Nov 2004 07:09:33 -0000	1.23
  +++ ossp-pkg/cfg/cfg_syn_scan.l	31 Dec 2004 19:16:25 -0000	1.24
  @@ -1,9 +1,9 @@
   %{
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2004 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2005 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_test.c
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 cfg_test.c
  --- ossp-pkg/cfg/cfg_test.c	29 Nov 2004 07:09:33 -0000	1.17
  +++ ossp-pkg/cfg/cfg_test.c	31 Dec 2004 19:16:25 -0000	1.18
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2004 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2005 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_test.cfg
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 cfg_test.cfg
  --- ossp-pkg/cfg/cfg_test.cfg	17 Jul 2004 07:37:55 -0000	1.4
  +++ ossp-pkg/cfg/cfg_test.cfg	31 Dec 2004 19:16:25 -0000	1.5
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP cfg - Configuration Parsing
  -##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP cfg, a configuration parsing library which
   ##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_util.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 cfg_util.c
  --- ossp-pkg/cfg/cfg_util.c	29 Nov 2004 07:09:33 -0000	1.6
  +++ ossp-pkg/cfg/cfg_util.c	31 Dec 2004 19:16:25 -0000	1.7
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2004 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2002-2005 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_util.h
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 cfg_util.h
  --- ossp-pkg/cfg/cfg_util.h	20 Nov 2004 12:54:07 -0000	1.5
  +++ ossp-pkg/cfg/cfg_util.h	31 Dec 2004 19:16:25 -0000	1.6
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2003-2004 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2003-2005 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/configure.ac
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 configure.ac
  --- ossp-pkg/cfg/configure.ac	29 Nov 2004 07:09:33 -0000	1.12
  +++ ossp-pkg/cfg/configure.ac	31 Dec 2004 19:16:25 -0000	1.13
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP cfg - Configuration Parsing
  -dnl ##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
  +dnl ##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
   dnl ##
   dnl ##  This file is part of OSSP cfg, a configuration parsing library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/devtool
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 devtool
  --- ossp-pkg/cfg/devtool	17 Jul 2004 07:37:55 -0000	1.3
  +++ ossp-pkg/cfg/devtool	31 Dec 2004 19:16:25 -0000	1.4
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  devtool -- Development Tool
  -##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   if [ $# -eq 0 ]; then
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 devtool.conf
  --- ossp-pkg/cfg/devtool.conf	4 Dec 2004 12:51:13 -0000	1.21
  +++ ossp-pkg/cfg/devtool.conf	31 Dec 2004 19:16:25 -0000	1.22
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP cfg - Configuration Parsing
  -##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP cfg, a configuration parsing library which
   ##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/devtool.func
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 devtool.func
  --- ossp-pkg/cfg/devtool.func	17 Jul 2004 07:37:55 -0000	1.5
  +++ ossp-pkg/cfg/devtool.func	31 Dec 2004 19:16:25 -0000	1.6
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   devtool_require () {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/Makefile.PL
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 Makefile.PL
  --- ossp-pkg/cfg/perl/Makefile.PL	14 Nov 2004 18:38:53 -0000	1.1
  +++ ossp-pkg/cfg/perl/Makefile.PL	31 Dec 2004 19:16:34 -0000	1.2
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP cfg - Configuration Parsing
  -##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP cfg, a configuration parsing library which
   ##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/cfg.pm
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 cfg.pm
  --- ossp-pkg/cfg/perl/cfg.pm	19 Dec 2004 19:36:27 -0000	1.11
  +++ ossp-pkg/cfg/perl/cfg.pm	31 Dec 2004 19:16:34 -0000	1.12
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP cfg - Configuration Parsing
  -##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP cfg, a configuration parsing library which
   ##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/cfg.pod
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 cfg.pod
  --- ossp-pkg/cfg/perl/cfg.pod	27 Nov 2004 19:41:18 -0000	1.5
  +++ ossp-pkg/cfg/perl/cfg.pod	31 Dec 2004 19:16:34 -0000	1.6
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP cfg - Configuration Parsing
  -##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP cfg, a configuration parsing library which
   ##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/cfg.tm
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 cfg.tm
  --- ossp-pkg/cfg/perl/cfg.tm	14 Nov 2004 18:38:53 -0000	1.1
  +++ ossp-pkg/cfg/perl/cfg.tm	31 Dec 2004 19:16:34 -0000	1.2
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP cfg - Configuration Parsing
  -##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP cfg, a configuration parsing library which
   ##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/cfg.ts
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 cfg.ts
  --- ossp-pkg/cfg/perl/cfg.ts	16 Nov 2004 19:08:24 -0000	1.2
  +++ ossp-pkg/cfg/perl/cfg.ts	31 Dec 2004 19:16:34 -0000	1.3
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP cfg - Configuration Parsing
  -##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP cfg, a configuration parsing library which
   ##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/cfg.xs
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 cfg.xs
  --- ossp-pkg/cfg/perl/cfg.xs	4 Dec 2004 12:48:42 -0000	1.7
  +++ ossp-pkg/cfg/perl/cfg.xs	31 Dec 2004 19:16:34 -0000	1.8
  @@ -1,8 +1,8 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP cfg, a configuration parsing library which
   **  can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .

From ossp-cvs-owner@ossp.org  Fri Dec 31 20:20:40 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 415CE763BC; Fri, 31 Dec 2004 20:20:40 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog Makefile.in README configure.ac o...
Message-Id: <20041231192040.415CE763BC@mail.ossp.org>
Date: Fri, 31 Dec 2004 20:20:40 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Dec-2004 20:20:40
  Branch: HEAD                             Handle: 2004123119203405

  Modified files:
    ossp-pkg/uuid           ChangeLog Makefile.in README configure.ac
                            uuid-config.in uuid-config.pod uuid.ac uuid.c
                            uuid.h.in uuid.pod uuid_ac.h uuid_bm.h uuid_cli.c
                            uuid_cli.pod uuid_dce.c uuid_dce.h uuid_mac.c
                            uuid_mac.h uuid_md5.c uuid_md5.h uuid_prng.c
                            uuid_prng.h uuid_str.c uuid_str.h uuid_ui64.c
                            uuid_ui64.h
    ossp-pkg/uuid/perl      Makefile.PL uuid.pm uuid.pod uuid.tm uuid.ts
                            uuid.xs

  Log:
    Adjust copyright messages for new year 2005.

  Summary:
    Revision    Changes     Path
    1.64        +4  -1      ossp-pkg/uuid/ChangeLog
    1.25        +2  -2      ossp-pkg/uuid/Makefile.in
    1.23        +2  -2      ossp-pkg/uuid/README
    1.9         +2  -2      ossp-pkg/uuid/configure.ac
    1.5         +2  -2      ossp-pkg/uuid/perl/Makefile.PL
    1.5         +2  -2      ossp-pkg/uuid/perl/uuid.pm
    1.5         +2  -2      ossp-pkg/uuid/perl/uuid.pod
    1.3         +2  -2      ossp-pkg/uuid/perl/uuid.tm
    1.2         +2  -2      ossp-pkg/uuid/perl/uuid.ts
    1.3         +2  -2      ossp-pkg/uuid/perl/uuid.xs
    1.4         +2  -2      ossp-pkg/uuid/uuid-config.in
    1.3         +2  -2      ossp-pkg/uuid/uuid-config.pod
    1.14        +2  -2      ossp-pkg/uuid/uuid.ac
    1.49        +2  -2      ossp-pkg/uuid/uuid.c
    1.5         +2  -2      ossp-pkg/uuid/uuid.h.in
    1.22        +2  -2      ossp-pkg/uuid/uuid.pod
    1.3         +2  -2      ossp-pkg/uuid/uuid_ac.h
    1.4         +2  -2      ossp-pkg/uuid/uuid_bm.h
    1.17        +2  -2      ossp-pkg/uuid/uuid_cli.c
    1.18        +2  -2      ossp-pkg/uuid/uuid_cli.pod
    1.2         +2  -2      ossp-pkg/uuid/uuid_dce.c
    1.2         +2  -2      ossp-pkg/uuid/uuid_dce.h
    1.5         +2  -2      ossp-pkg/uuid/uuid_mac.c
    1.3         +2  -2      ossp-pkg/uuid/uuid_mac.h
    1.7         +2  -2      ossp-pkg/uuid/uuid_md5.c
    1.4         +2  -2      ossp-pkg/uuid/uuid_md5.h
    1.4         +2  -2      ossp-pkg/uuid/uuid_prng.c
    1.2         +2  -2      ossp-pkg/uuid/uuid_prng.h
    1.4         +2  -2      ossp-pkg/uuid/uuid_str.c
    1.2         +2  -2      ossp-pkg/uuid/uuid_str.h
    1.3         +2  -2      ossp-pkg/uuid/uuid_ui64.c
    1.2         +2  -2      ossp-pkg/uuid/uuid_ui64.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.63 -r1.64 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	29 Nov 2004 07:37:20 -0000	1.63
  +++ ossp-pkg/uuid/ChangeLog	31 Dec 2004 19:20:34 -0000	1.64
  @@ -11,7 +11,10 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 1.1.1 and 1.1.2 (18-Nov-2004 to xx-Dec-2004)
  +  Changes between 1.1.1 and 1.1.2 (18-Nov-2004 to xx-Jan-2005)
  +
  +   o Adjust copyright messages for new year 2005.
  +     [Ralf S. Engelschall]
   
      o Do not rebuild the Perl API if there were no actual changes.
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	29 Nov 2004 07:37:20 -0000	1.24
  +++ ossp-pkg/uuid/Makefile.in	31 Dec 2004 19:20:34 -0000	1.25
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 README
  --- ossp-pkg/uuid/README	18 Nov 2004 15:59:52 -0000	1.22
  +++ ossp-pkg/uuid/README	31 Dec 2004 19:20:34 -0000	1.23
  @@ -25,8 +25,8 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
   
     This file is part of OSSP uuid, a library for the generation
     of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/configure.ac
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 configure.ac
  --- ossp-pkg/uuid/configure.ac	15 Oct 2004 18:22:31 -0000	1.8
  +++ ossp-pkg/uuid/configure.ac	31 Dec 2004 19:20:34 -0000	1.9
  @@ -1,7 +1,7 @@
   dnl ##
   dnl ##  OSSP uuid - Universally Unique Identifier
  -dnl ##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
   dnl ##
   dnl ##  This file is part of OSSP uuid, a library for the generation
   dnl ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/Makefile.PL
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 Makefile.PL
  --- ossp-pkg/uuid/perl/Makefile.PL	18 Nov 2004 15:58:54 -0000	1.4
  +++ ossp-pkg/uuid/perl/Makefile.PL	31 Dec 2004 19:20:39 -0000	1.5
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.pm
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 uuid.pm
  --- ossp-pkg/uuid/perl/uuid.pm	18 Nov 2004 15:59:52 -0000	1.4
  +++ ossp-pkg/uuid/perl/uuid.pm	31 Dec 2004 19:20:39 -0000	1.5
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 uuid.pod
  --- ossp-pkg/uuid/perl/uuid.pod	3 Nov 2004 19:00:50 -0000	1.4
  +++ ossp-pkg/uuid/perl/uuid.pod	31 Dec 2004 19:20:39 -0000	1.5
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.tm
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid.tm
  --- ossp-pkg/uuid/perl/uuid.tm	3 Nov 2004 19:00:50 -0000	1.2
  +++ ossp-pkg/uuid/perl/uuid.tm	31 Dec 2004 19:20:39 -0000	1.3
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.ts
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid.ts
  --- ossp-pkg/uuid/perl/uuid.ts	3 Nov 2004 14:52:10 -0000	1.1
  +++ ossp-pkg/uuid/perl/uuid.ts	31 Dec 2004 19:20:39 -0000	1.2
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.xs
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid.xs
  --- ossp-pkg/uuid/perl/uuid.xs	3 Nov 2004 19:00:50 -0000	1.2
  +++ ossp-pkg/uuid/perl/uuid.xs	31 Dec 2004 19:20:39 -0000	1.3
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid-config.in
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 uuid-config.in
  --- ossp-pkg/uuid/uuid-config.in	15 Jan 2004 20:26:18 -0000	1.3
  +++ ossp-pkg/uuid/uuid-config.in	31 Dec 2004 19:20:34 -0000	1.4
  @@ -1,8 +1,8 @@
   #!/bin/sh
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid-config.pod
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid-config.pod
  --- ossp-pkg/uuid/uuid-config.pod	3 Nov 2004 18:28:51 -0000	1.2
  +++ ossp-pkg/uuid/uuid-config.pod	31 Dec 2004 19:20:34 -0000	1.3
  @@ -1,8 +1,8 @@
   #!/bin/sh
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.ac
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 uuid.ac
  --- ossp-pkg/uuid/uuid.ac	18 Nov 2004 15:57:00 -0000	1.13
  +++ ossp-pkg/uuid/uuid.ac	31 Dec 2004 19:20:34 -0000	1.14
  @@ -1,7 +1,7 @@
   dnl ##
   dnl ##  OSSP uuid - Universally Unique Identifier
  -dnl ##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
   dnl ##
   dnl ##  This file is part of OSSP uuid, a library for the generation
   dnl ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.48 -r1.49 uuid.c
  --- ossp-pkg/uuid/uuid.c	9 Jun 2004 19:17:39 -0000	1.48
  +++ ossp-pkg/uuid/uuid.c	31 Dec 2004 19:20:34 -0000	1.49
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.h.in
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 uuid.h.in
  --- ossp-pkg/uuid/uuid.h.in	19 Jan 2004 14:11:50 -0000	1.4
  +++ ossp-pkg/uuid/uuid.h.in	31 Dec 2004 19:20:34 -0000	1.5
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	3 Nov 2004 18:28:51 -0000	1.21
  +++ ossp-pkg/uuid/uuid.pod	31 Dec 2004 19:20:34 -0000	1.22
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_ac.h
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid_ac.h
  --- ossp-pkg/uuid/uuid_ac.h	15 Jan 2004 13:02:21 -0000	1.2
  +++ ossp-pkg/uuid/uuid_ac.h	31 Dec 2004 19:20:34 -0000	1.3
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_bm.h
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 uuid_bm.h
  --- ossp-pkg/uuid/uuid_bm.h	15 Jan 2004 15:36:51 -0000	1.3
  +++ ossp-pkg/uuid/uuid_bm.h	31 Dec 2004 19:20:34 -0000	1.4
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.c
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 uuid_cli.c
  --- ossp-pkg/uuid/uuid_cli.c	13 Feb 2004 16:17:07 -0000	1.16
  +++ ossp-pkg/uuid/uuid_cli.c	31 Dec 2004 19:20:34 -0000	1.17
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.pod
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 uuid_cli.pod
  --- ossp-pkg/uuid/uuid_cli.pod	3 Nov 2004 18:28:51 -0000	1.17
  +++ ossp-pkg/uuid/uuid_cli.pod	31 Dec 2004 19:20:34 -0000	1.18
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_dce.c
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid_dce.c
  --- ossp-pkg/uuid/uuid_dce.c	11 Feb 2004 14:38:40 -0000	1.1
  +++ ossp-pkg/uuid/uuid_dce.c	31 Dec 2004 19:20:34 -0000	1.2
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_dce.h
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid_dce.h
  --- ossp-pkg/uuid/uuid_dce.h	11 Feb 2004 14:38:40 -0000	1.1
  +++ ossp-pkg/uuid/uuid_dce.h	31 Dec 2004 19:20:34 -0000	1.2
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_mac.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 uuid_mac.c
  --- ossp-pkg/uuid/uuid_mac.c	11 Jan 2004 08:27:18 -0000	1.4
  +++ ossp-pkg/uuid/uuid_mac.c	31 Dec 2004 19:20:34 -0000	1.5
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_mac.h
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid_mac.h
  --- ossp-pkg/uuid/uuid_mac.h	13 Jan 2004 19:48:01 -0000	1.2
  +++ ossp-pkg/uuid/uuid_mac.h	31 Dec 2004 19:20:34 -0000	1.3
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_md5.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 uuid_md5.c
  --- ossp-pkg/uuid/uuid_md5.c	18 Jan 2004 19:39:11 -0000	1.6
  +++ ossp-pkg/uuid/uuid_md5.c	31 Dec 2004 19:20:34 -0000	1.7
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_md5.h
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 uuid_md5.h
  --- ossp-pkg/uuid/uuid_md5.h	13 Jan 2004 19:48:01 -0000	1.3
  +++ ossp-pkg/uuid/uuid_md5.h	31 Dec 2004 19:20:34 -0000	1.4
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_prng.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 uuid_prng.c
  --- ossp-pkg/uuid/uuid_prng.c	4 Feb 2004 06:24:28 -0000	1.3
  +++ ossp-pkg/uuid/uuid_prng.c	31 Dec 2004 19:20:34 -0000	1.4
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_prng.h
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid_prng.h
  --- ossp-pkg/uuid/uuid_prng.h	10 Jan 2004 12:16:03 -0000	1.1
  +++ ossp-pkg/uuid/uuid_prng.h	31 Dec 2004 19:20:34 -0000	1.2
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_str.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 uuid_str.c
  --- ossp-pkg/uuid/uuid_str.c	16 Feb 2004 09:13:58 -0000	1.3
  +++ ossp-pkg/uuid/uuid_str.c	31 Dec 2004 19:20:34 -0000	1.4
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_str.h
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid_str.h
  --- ossp-pkg/uuid/uuid_str.h	13 Jan 2004 19:43:15 -0000	1.1
  +++ ossp-pkg/uuid/uuid_str.h	31 Dec 2004 19:20:34 -0000	1.2
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_ui64.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid_ui64.c
  --- ossp-pkg/uuid/uuid_ui64.c	18 Jan 2004 19:22:55 -0000	1.2
  +++ ossp-pkg/uuid/uuid_ui64.c	31 Dec 2004 19:20:34 -0000	1.3
  @@ -1,7 +1,7 @@
   /*
   **  OSSP ui64 - 64-Bit Arithmetic
  -**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP ui64, a 64-bit arithmetic library
   **  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_ui64.h
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid_ui64.h
  --- ossp-pkg/uuid/uuid_ui64.h	9 Jan 2004 11:32:06 -0000	1.1
  +++ ossp-pkg/uuid/uuid_ui64.h	31 Dec 2004 19:20:34 -0000	1.2
  @@ -1,7 +1,7 @@
   /*
   **  OSSP ui64 - 64-Bit Arithmetic
  -**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP ui64, a 64-bit arithmetic library
   **  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  @@ .

From ossp-cvs-owner@ossp.org  Fri Dec 31 20:34:58 2004
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 24F1F763BC; Fri, 31 Dec 2004 20:34:58 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog Makefile.in README aclocal.m4 conf...
Message-Id: <20041231193458.24F1F763BC@mail.ossp.org>
Date: Fri, 31 Dec 2004 20:34:58 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Dec-2004 20:34:57
  Branch: HEAD                             Handle: 2004123119344401

  Modified files:
    ossp-pkg/pth            ChangeLog Makefile.in README aclocal.m4
                            config.param configure.ac devtool.func
                            pth-config.in pth-config.pod pth.h.in pth.m4
                            pth.pod pth.spec pth_acmac.h.in pth_attr.c
                            pth_cancel.c pth_clean.c pth_compat.c pth_data.c
                            pth_debug.c pth_errno.c pth_event.c pth_ext.c
                            pth_fork.c pth_high.c pth_lib.c pth_mctx.c
                            pth_msg.c pth_p.h.in pth_pqueue.c pth_ring.c
                            pth_sched.c pth_string.c pth_sync.c pth_syscall.c
                            pth_tcb.c pth_time.c pth_uctx.c pth_util.c
                            pthread-config.in pthread-config.pod pthread.c
                            pthread.h.in pthread.pod striptease.mk
                            striptease.pl test_common.c test_common.h
                            test_httpd.c test_misc.c test_mp.c test_philo.c
                            test_pthread.c test_select.c test_sfio.c
                            test_sig.c test_std.c test_uctx.c

  Log:
    Adjusted all copyright messages for new year 2005.

  Summary:
    Revision    Changes     Path
    1.634       +4  -1      ossp-pkg/pth/ChangeLog
    1.155       +1  -1      ossp-pkg/pth/Makefile.in
    1.207       +1  -1      ossp-pkg/pth/README
    1.104       +1  -1      ossp-pkg/pth/aclocal.m4
    1.23        +1  -1      ossp-pkg/pth/config.param
    1.15        +2  -2      ossp-pkg/pth/configure.ac
    1.6         +1  -1      ossp-pkg/pth/devtool.func
    1.27        +1  -1      ossp-pkg/pth/pth-config.in
    1.23        +1  -1      ossp-pkg/pth/pth-config.pod
    1.145       +1  -1      ossp-pkg/pth/pth.h.in
    1.15        +1  -1      ossp-pkg/pth/pth.m4
    1.166       +1  -1      ossp-pkg/pth/pth.pod
    1.13        +1  -1      ossp-pkg/pth/pth.spec
    1.11        +1  -1      ossp-pkg/pth/pth_acmac.h.in
    1.21        +1  -1      ossp-pkg/pth/pth_attr.c
    1.29        +1  -1      ossp-pkg/pth/pth_cancel.c
    1.20        +1  -1      ossp-pkg/pth/pth_clean.c
    1.12        +1  -1      ossp-pkg/pth/pth_compat.c
    1.33        +1  -1      ossp-pkg/pth/pth_data.c
    1.31        +1  -1      ossp-pkg/pth/pth_debug.c
    1.27        +1  -1      ossp-pkg/pth/pth_errno.c
    1.65        +1  -1      ossp-pkg/pth/pth_event.c
    1.14        +1  -1      ossp-pkg/pth/pth_ext.c
    1.17        +1  -1      ossp-pkg/pth/pth_fork.c
    1.109       +1  -1      ossp-pkg/pth/pth_high.c
    1.59        +1  -1      ossp-pkg/pth/pth_lib.c
    1.61        +1  -1      ossp-pkg/pth/pth_mctx.c
    1.29        +1  -1      ossp-pkg/pth/pth_msg.c
    1.38        +1  -1      ossp-pkg/pth/pth_p.h.in
    1.33        +1  -1      ossp-pkg/pth/pth_pqueue.c
    1.26        +1  -1      ossp-pkg/pth/pth_ring.c
    1.93        +1  -1      ossp-pkg/pth/pth_sched.c
    1.13        +1  -1      ossp-pkg/pth/pth_string.c
    1.41        +1  -1      ossp-pkg/pth/pth_sync.c
    1.33        +1  -1      ossp-pkg/pth/pth_syscall.c
    1.43        +1  -1      ossp-pkg/pth/pth_tcb.c
    1.30        +1  -1      ossp-pkg/pth/pth_time.c
    1.5         +1  -1      ossp-pkg/pth/pth_uctx.c
    1.25        +1  -1      ossp-pkg/pth/pth_util.c
    1.23        +1  -1      ossp-pkg/pth/pthread-config.in
    1.19        +1  -1      ossp-pkg/pth/pthread-config.pod
    1.67        +1  -1      ossp-pkg/pth/pthread.c
    1.70        +1  -1      ossp-pkg/pth/pthread.h.in
    1.26        +1  -1      ossp-pkg/pth/pthread.pod
    1.10        +1  -1      ossp-pkg/pth/striptease.mk
    1.18        +2  -2      ossp-pkg/pth/striptease.pl
    1.17        +1  -1      ossp-pkg/pth/test_common.c
    1.10        +1  -1      ossp-pkg/pth/test_common.h
    1.55        +1  -1      ossp-pkg/pth/test_httpd.c
    1.36        +1  -1      ossp-pkg/pth/test_misc.c
    1.45        +1  -1      ossp-pkg/pth/test_mp.c
    1.22        +1  -1      ossp-pkg/pth/test_philo.c
    1.17        +1  -1      ossp-pkg/pth/test_pthread.c
    1.18        +1  -1      ossp-pkg/pth/test_select.c
    1.14        +1  -1      ossp-pkg/pth/test_sfio.c
    1.22        +1  -1      ossp-pkg/pth/test_sig.c
    1.20        +1  -1      ossp-pkg/pth/test_std.c
    1.4         +1  -1      ossp-pkg/pth/test_uctx.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.633 -r1.634 ChangeLog
  --- ossp-pkg/pth/ChangeLog	6 Dec 2004 19:47:38 -0000	1.633
  +++ ossp-pkg/pth/ChangeLog	31 Dec 2004 19:34:44 -0000	1.634
  @@ -19,7 +19,10 @@
        / __/ | |_| |
     __|_____(_)___/_________________________________________________________
                     
  -  Changes between 2.0.3 and 2.0.4 (03-Dec-2004 to xx-Dec-2004)
  +  Changes between 2.0.3 and 2.0.4 (03-Dec-2004 to xx-Jan-2005)
  +
  +   *) Adjusted all copyright messages for new year 2005.
  +      [Ralf S. Engelschall]
   
      *) Do not insist on writing to the source directory on "make install"
         in order to more closely follow GNU standards.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.154 -r1.155 Makefile.in
  --- ossp-pkg/pth/Makefile.in	6 Dec 2004 19:47:38 -0000	1.154
  +++ ossp-pkg/pth/Makefile.in	31 Dec 2004 19:34:44 -0000	1.155
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/README
  ============================================================================
  $ cvs diff -u -r1.206 -r1.207 README
  --- ossp-pkg/pth/README	3 Dec 2004 16:23:38 -0000	1.206
  +++ ossp-pkg/pth/README	31 Dec 2004 19:34:44 -0000	1.207
  @@ -54,7 +54,7 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   
     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.103 -r1.104 aclocal.m4
  --- ossp-pkg/pth/aclocal.m4	13 Jul 2004 10:50:49 -0000	1.103
  +++ ossp-pkg/pth/aclocal.m4	31 Dec 2004 19:34:44 -0000	1.104
  @@ -1,6 +1,6 @@
   dnl ##
   dnl ##  GNU Pth - The GNU Portable Threads
  -dnl ##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##
   dnl ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   dnl ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/config.param
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 config.param
  --- ossp-pkg/pth/config.param	13 Jul 2004 10:50:49 -0000	1.22
  +++ ossp-pkg/pth/config.param	31 Dec 2004 19:34:44 -0000	1.23
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/configure.ac
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 configure.ac
  --- ossp-pkg/pth/configure.ac	3 Dec 2004 17:03:30 -0000	1.14
  +++ ossp-pkg/pth/configure.ac	31 Dec 2004 19:34:44 -0000	1.15
  @@ -1,6 +1,6 @@
   dnl ##
   dnl ##  GNU Pth - The GNU Portable Threads
  -dnl ##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##
   dnl ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   dnl ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ -42,7 +42,7 @@
   AC_HEADLINE(dnl
   GNU Pth, Portable Threads, dnl
   PTH_VERSION, pth_vers.c, dnl
  -[Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>])
  +[Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>])
   AC_CONFIG_PARAM(config.param)
   AC_CONFIG_HEADER(pth_acdef.h)dnl
   AC_PREFIX_DEFAULT(/usr/local)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/devtool.func
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 devtool.func
  --- ossp-pkg/pth/devtool.func	13 Jul 2004 10:50:49 -0000	1.5
  +++ ossp-pkg/pth/devtool.func	31 Dec 2004 19:34:44 -0000	1.6
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   devtool_require () {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth-config.in
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 pth-config.in
  --- ossp-pkg/pth/pth-config.in	13 Jul 2004 10:50:49 -0000	1.26
  +++ ossp-pkg/pth/pth-config.in	31 Dec 2004 19:34:44 -0000	1.27
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth-config.pod
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 pth-config.pod
  --- ossp-pkg/pth/pth-config.pod	13 Jul 2004 10:50:49 -0000	1.22
  +++ ossp-pkg/pth/pth-config.pod	31 Dec 2004 19:34:44 -0000	1.23
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth.h.in
  ============================================================================
  $ cvs diff -u -r1.144 -r1.145 pth.h.in
  --- ossp-pkg/pth/pth.h.in	3 Dec 2004 16:21:08 -0000	1.144
  +++ ossp-pkg/pth/pth.h.in	31 Dec 2004 19:34:44 -0000	1.145
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth.m4
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 pth.m4
  --- ossp-pkg/pth/pth.m4	12 Sep 2004 11:44:25 -0000	1.14
  +++ ossp-pkg/pth/pth.m4	31 Dec 2004 19:34:44 -0000	1.15
  @@ -1,6 +1,6 @@
   dnl ##
   dnl ##  GNU Pth - The GNU Portable Threads
  -dnl ##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##
   dnl ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   dnl ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth.pod
  ============================================================================
  $ cvs diff -u -r1.165 -r1.166 pth.pod
  --- ossp-pkg/pth/pth.pod	3 Dec 2004 16:21:08 -0000	1.165
  +++ ossp-pkg/pth/pth.pod	31 Dec 2004 19:34:44 -0000	1.166
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth.spec
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 pth.spec
  --- ossp-pkg/pth/pth.spec	13 Jul 2004 10:50:49 -0000	1.12
  +++ ossp-pkg/pth/pth.spec	31 Dec 2004 19:34:45 -0000	1.13
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 2000-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_acmac.h.in
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 pth_acmac.h.in
  --- ossp-pkg/pth/pth_acmac.h.in	13 Jul 2004 10:50:49 -0000	1.10
  +++ ossp-pkg/pth/pth_acmac.h.in	31 Dec 2004 19:34:45 -0000	1.11
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_attr.c
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 pth_attr.c
  --- ossp-pkg/pth/pth_attr.c	13 Jul 2004 10:50:49 -0000	1.20
  +++ ossp-pkg/pth/pth_attr.c	31 Dec 2004 19:34:45 -0000	1.21
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_cancel.c
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 pth_cancel.c
  --- ossp-pkg/pth/pth_cancel.c	13 Jul 2004 10:50:49 -0000	1.28
  +++ ossp-pkg/pth/pth_cancel.c	31 Dec 2004 19:34:45 -0000	1.29
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_clean.c
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 pth_clean.c
  --- ossp-pkg/pth/pth_clean.c	13 Jul 2004 10:50:49 -0000	1.19
  +++ ossp-pkg/pth/pth_clean.c	31 Dec 2004 19:34:45 -0000	1.20
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_compat.c
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 pth_compat.c
  --- ossp-pkg/pth/pth_compat.c	13 Jul 2004 10:50:49 -0000	1.11
  +++ ossp-pkg/pth/pth_compat.c	31 Dec 2004 19:34:45 -0000	1.12
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_data.c
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 pth_data.c
  --- ossp-pkg/pth/pth_data.c	14 Oct 2004 14:42:34 -0000	1.32
  +++ ossp-pkg/pth/pth_data.c	31 Dec 2004 19:34:45 -0000	1.33
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_debug.c
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 pth_debug.c
  --- ossp-pkg/pth/pth_debug.c	13 Jul 2004 10:50:49 -0000	1.30
  +++ ossp-pkg/pth/pth_debug.c	31 Dec 2004 19:34:45 -0000	1.31
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_errno.c
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 pth_errno.c
  --- ossp-pkg/pth/pth_errno.c	13 Jul 2004 10:50:49 -0000	1.26
  +++ ossp-pkg/pth/pth_errno.c	31 Dec 2004 19:34:45 -0000	1.27
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_event.c
  ============================================================================
  $ cvs diff -u -r1.64 -r1.65 pth_event.c
  --- ossp-pkg/pth/pth_event.c	12 Sep 2004 11:27:32 -0000	1.64
  +++ ossp-pkg/pth/pth_event.c	31 Dec 2004 19:34:45 -0000	1.65
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_ext.c
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 pth_ext.c
  --- ossp-pkg/pth/pth_ext.c	13 Jul 2004 10:50:49 -0000	1.13
  +++ ossp-pkg/pth/pth_ext.c	31 Dec 2004 19:34:45 -0000	1.14
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_fork.c
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 pth_fork.c
  --- ossp-pkg/pth/pth_fork.c	13 Jul 2004 10:50:49 -0000	1.16
  +++ ossp-pkg/pth/pth_fork.c	31 Dec 2004 19:34:45 -0000	1.17
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_high.c
  ============================================================================
  $ cvs diff -u -r1.108 -r1.109 pth_high.c
  --- ossp-pkg/pth/pth_high.c	12 Sep 2004 12:18:23 -0000	1.108
  +++ ossp-pkg/pth/pth_high.c	31 Dec 2004 19:34:45 -0000	1.109
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_lib.c
  ============================================================================
  $ cvs diff -u -r1.58 -r1.59 pth_lib.c
  --- ossp-pkg/pth/pth_lib.c	8 Oct 2004 16:17:02 -0000	1.58
  +++ ossp-pkg/pth/pth_lib.c	31 Dec 2004 19:34:45 -0000	1.59
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_mctx.c
  ============================================================================
  $ cvs diff -u -r1.60 -r1.61 pth_mctx.c
  --- ossp-pkg/pth/pth_mctx.c	3 Dec 2004 16:17:54 -0000	1.60
  +++ ossp-pkg/pth/pth_mctx.c	31 Dec 2004 19:34:45 -0000	1.61
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_msg.c
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 pth_msg.c
  --- ossp-pkg/pth/pth_msg.c	18 Oct 2004 19:35:45 -0000	1.28
  +++ ossp-pkg/pth/pth_msg.c	31 Dec 2004 19:34:45 -0000	1.29
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_p.h.in
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 pth_p.h.in
  --- ossp-pkg/pth/pth_p.h.in	13 Jul 2004 10:50:49 -0000	1.37
  +++ ossp-pkg/pth/pth_p.h.in	31 Dec 2004 19:34:45 -0000	1.38
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_pqueue.c
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 pth_pqueue.c
  --- ossp-pkg/pth/pth_pqueue.c	13 Jul 2004 10:50:49 -0000	1.32
  +++ ossp-pkg/pth/pth_pqueue.c	31 Dec 2004 19:34:45 -0000	1.33
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_ring.c
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 pth_ring.c
  --- ossp-pkg/pth/pth_ring.c	13 Jul 2004 10:50:49 -0000	1.25
  +++ ossp-pkg/pth/pth_ring.c	31 Dec 2004 19:34:45 -0000	1.26
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_sched.c
  ============================================================================
  $ cvs diff -u -r1.92 -r1.93 pth_sched.c
  --- ossp-pkg/pth/pth_sched.c	8 Oct 2004 16:17:02 -0000	1.92
  +++ ossp-pkg/pth/pth_sched.c	31 Dec 2004 19:34:45 -0000	1.93
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_string.c
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 pth_string.c
  --- ossp-pkg/pth/pth_string.c	13 Jul 2004 10:53:53 -0000	1.12
  +++ ossp-pkg/pth/pth_string.c	31 Dec 2004 19:34:45 -0000	1.13
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_sync.c
  ============================================================================
  $ cvs diff -u -r1.40 -r1.41 pth_sync.c
  --- ossp-pkg/pth/pth_sync.c	13 Jul 2004 10:50:49 -0000	1.40
  +++ ossp-pkg/pth/pth_sync.c	31 Dec 2004 19:34:45 -0000	1.41
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_syscall.c
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 pth_syscall.c
  --- ossp-pkg/pth/pth_syscall.c	12 Sep 2004 12:33:03 -0000	1.32
  +++ ossp-pkg/pth/pth_syscall.c	31 Dec 2004 19:34:45 -0000	1.33
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_tcb.c
  ============================================================================
  $ cvs diff -u -r1.42 -r1.43 pth_tcb.c
  --- ossp-pkg/pth/pth_tcb.c	13 Jul 2004 10:50:49 -0000	1.42
  +++ ossp-pkg/pth/pth_tcb.c	31 Dec 2004 19:34:45 -0000	1.43
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_time.c
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 pth_time.c
  --- ossp-pkg/pth/pth_time.c	13 Jul 2004 10:50:49 -0000	1.29
  +++ ossp-pkg/pth/pth_time.c	31 Dec 2004 19:34:45 -0000	1.30
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_uctx.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 pth_uctx.c
  --- ossp-pkg/pth/pth_uctx.c	3 Dec 2004 16:21:08 -0000	1.4
  +++ ossp-pkg/pth/pth_uctx.c	31 Dec 2004 19:34:45 -0000	1.5
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_util.c
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 pth_util.c
  --- ossp-pkg/pth/pth_util.c	13 Jul 2004 10:50:49 -0000	1.24
  +++ ossp-pkg/pth/pth_util.c	31 Dec 2004 19:34:45 -0000	1.25
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pthread-config.in
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 pthread-config.in
  --- ossp-pkg/pth/pthread-config.in	13 Jul 2004 10:50:49 -0000	1.22
  +++ ossp-pkg/pth/pthread-config.in	31 Dec 2004 19:34:45 -0000	1.23
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pthread-config.pod
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 pthread-config.pod
  --- ossp-pkg/pth/pthread-config.pod	13 Jul 2004 10:50:49 -0000	1.18
  +++ ossp-pkg/pth/pthread-config.pod	31 Dec 2004 19:34:45 -0000	1.19
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pthread.c
  ============================================================================
  $ cvs diff -u -r1.66 -r1.67 pthread.c
  --- ossp-pkg/pth/pthread.c	12 Sep 2004 09:28:04 -0000	1.66
  +++ ossp-pkg/pth/pthread.c	31 Dec 2004 19:34:45 -0000	1.67
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pthread.h.in
  ============================================================================
  $ cvs diff -u -r1.69 -r1.70 pthread.h.in
  --- ossp-pkg/pth/pthread.h.in	12 Sep 2004 09:28:05 -0000	1.69
  +++ ossp-pkg/pth/pthread.h.in	31 Dec 2004 19:34:45 -0000	1.70
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pthread.pod
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 pthread.pod
  --- ossp-pkg/pth/pthread.pod	13 Jul 2004 10:50:49 -0000	1.25
  +++ ossp-pkg/pth/pthread.pod	31 Dec 2004 19:34:45 -0000	1.26
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/striptease.mk
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 striptease.mk
  --- ossp-pkg/pth/striptease.mk	13 Jul 2004 10:50:49 -0000	1.9
  +++ ossp-pkg/pth/striptease.mk	31 Dec 2004 19:34:45 -0000	1.10
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/striptease.pl
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 striptease.pl
  --- ossp-pkg/pth/striptease.pl	3 Dec 2004 17:03:30 -0000	1.17
  +++ ossp-pkg/pth/striptease.pl	31 Dec 2004 19:34:45 -0000	1.18
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ -89,7 +89,7 @@
   $pth_c = <<'EOT';
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_common.c
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 test_common.c
  --- ossp-pkg/pth/test_common.c	13 Jul 2004 10:50:49 -0000	1.16
  +++ ossp-pkg/pth/test_common.c	31 Dec 2004 19:34:45 -0000	1.17
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_common.h
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 test_common.h
  --- ossp-pkg/pth/test_common.h	13 Jul 2004 10:50:49 -0000	1.9
  +++ ossp-pkg/pth/test_common.h	31 Dec 2004 19:34:45 -0000	1.10
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_httpd.c
  ============================================================================
  $ cvs diff -u -r1.54 -r1.55 test_httpd.c
  --- ossp-pkg/pth/test_httpd.c	13 Jul 2004 10:50:49 -0000	1.54
  +++ ossp-pkg/pth/test_httpd.c	31 Dec 2004 19:34:45 -0000	1.55
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_misc.c
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 test_misc.c
  --- ossp-pkg/pth/test_misc.c	13 Jul 2004 10:50:49 -0000	1.35
  +++ ossp-pkg/pth/test_misc.c	31 Dec 2004 19:34:45 -0000	1.36
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_mp.c
  ============================================================================
  $ cvs diff -u -r1.44 -r1.45 test_mp.c
  --- ossp-pkg/pth/test_mp.c	13 Jul 2004 10:50:49 -0000	1.44
  +++ ossp-pkg/pth/test_mp.c	31 Dec 2004 19:34:45 -0000	1.45
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_philo.c
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 test_philo.c
  --- ossp-pkg/pth/test_philo.c	13 Jul 2004 10:50:49 -0000	1.21
  +++ ossp-pkg/pth/test_philo.c	31 Dec 2004 19:34:45 -0000	1.22
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_pthread.c
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 test_pthread.c
  --- ossp-pkg/pth/test_pthread.c	13 Jul 2004 10:50:49 -0000	1.16
  +++ ossp-pkg/pth/test_pthread.c	31 Dec 2004 19:34:45 -0000	1.17
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_select.c
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 test_select.c
  --- ossp-pkg/pth/test_select.c	13 Jul 2004 10:50:49 -0000	1.17
  +++ ossp-pkg/pth/test_select.c	31 Dec 2004 19:34:45 -0000	1.18
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_sfio.c
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 test_sfio.c
  --- ossp-pkg/pth/test_sfio.c	13 Jul 2004 10:50:49 -0000	1.13
  +++ ossp-pkg/pth/test_sfio.c	31 Dec 2004 19:34:45 -0000	1.14
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_sig.c
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 test_sig.c
  --- ossp-pkg/pth/test_sig.c	13 Jul 2004 10:50:49 -0000	1.21
  +++ ossp-pkg/pth/test_sig.c	31 Dec 2004 19:34:45 -0000	1.22
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_std.c
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 test_std.c
  --- ossp-pkg/pth/test_std.c	13 Jul 2004 10:50:49 -0000	1.19
  +++ ossp-pkg/pth/test_std.c	31 Dec 2004 19:34:45 -0000	1.20
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_uctx.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 test_uctx.c
  --- ossp-pkg/pth/test_uctx.c	13 Jul 2004 10:50:49 -0000	1.3
  +++ ossp-pkg/pth/test_uctx.c	31 Dec 2004 19:34:45 -0000	1.4
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jan 12 21:42:48 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D6BE076400; Wed, 12 Jan 2005 21:42:47 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ ChangeLog shiela-install.pod shiela.pl
Message-Id: <20050112204247.D6BE076400@mail.ossp.org>
Date: Wed, 12 Jan 2005 21:42:47 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Jan-2005 21:42:47
  Branch: HEAD                             Handle: 2005011220424600

  Modified files:
    ossp-pkg/shiela         ChangeLog shiela-install.pod shiela.pl

  Log:
    1. Fix internal error handling by replacing "|| die" with "or die"
    constructs because the different binding priority of "||" and "or"
    leaded to wrong results.
    
    2. Fix shiela-install.pod's description of --loginfo hook for the
    non-RSE-patches situation: the %p construct has to be used there, too.

  Summary:
    Revision    Changes     Path
    1.53        +11 -1      ossp-pkg/shiela/ChangeLog
    1.25        +1  -1      ossp-pkg/shiela/shiela-install.pod
    1.67        +32 -32     ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.52 -r1.53 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	11 Aug 2004 16:50:39 -0000	1.52
  +++ ossp-pkg/shiela/ChangeLog	12 Jan 2005 20:42:46 -0000	1.53
  @@ -9,7 +9,17 @@
   
     ChangeLog
   
  -  Changes between 1.1.4 and 1.1.5 (02-Jul-2004 to 11-Aug-2004):
  +  Changes between 1.1.4 and 1.1.5 (02-Jul-2004 to 12-Jan-2005):
  +
  +   *) Fix internal error handling by replacing "|| die" with "or die"
  +      constructs because the different binding priority of "||" and "or"
  +      leaded to wrong results.
  +      [Ralf S. Engelschall, Geoff Thorpe <geoff@geoffthorpe.net>]
  +
  +   *) Fix shiela-install.pod's description of --loginfo hook for the
  +      non-RSE-patches situation: the %p construct has to be used
  +      there, too.
  +      [Geoff Thorpe <geoff@geoffthorpe.net>]
   
      *) Workaround a buggy feature in Perl versions 5.8.4 and higher
         which totally optimized away "my $var = undef;" constructs
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-install.pod
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 shiela-install.pod
  --- ossp-pkg/shiela/shiela-install.pod	2 Jul 2004 19:19:33 -0000	1.24
  +++ ossp-pkg/shiela/shiela-install.pod	12 Jan 2005 20:42:46 -0000	1.25
  @@ -121,7 +121,7 @@
   ``C<ALL $CVSROOT/CVSROOT/shiela --hook=loginfo %p %{sVvto}>''.
   This requires that you use a CVS version with RSE patches
   applied (see below). If you use a stock CVS version, use ``C<ALL
  -$CVSROOT/CVSROOT/shiela --hook=loginfo %{sVv}>'' instead and live with
  +$CVSROOT/CVSROOT/shiela --hook=loginfo %p %{sVv}>'' instead and live with
   the fact that B<OSSP shiela>'s run-time efficiency is slightly decreased
   and branch recognition might be less correct (because B<OSSP shiela> has
   to determine details the hard way which CVS already would know easily).
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================================
  $ cvs diff -u -r1.66 -r1.67 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	11 Aug 2004 16:50:39 -0000	1.66
  +++ ossp-pkg/shiela/shiela.pl	12 Jan 2005 20:42:46 -0000	1.67
  @@ -127,8 +127,8 @@
       $RT->{pgrp} = getpgrp();
   
       #   supplied arguments
  -    $RT->{cvsroot} = $ENV{CVSROOT} || die 'unknown CVS root (set $CVSROOT variable)';
  -    $RT->{userid}  = $ENV{CVSUSER} || $ENV{LOGNAME} || $ENV{LOGUSER} || $ENV{USER} || die 'unknown CVS user';
  +    $RT->{cvsroot} = $ENV{CVSROOT} or die 'unknown CVS root (set $CVSROOT variable)';
  +    $RT->{userid}  = ($ENV{CVSUSER} || $ENV{LOGNAME} || $ENV{LOGUSER} || $ENV{USER}) or die 'unknown CVS user';
   
       #   various directory paths
       $RT->{tmpdir}    = $ENV{TMPDIR} || $ENV{TEMPDIR} || '/tmp';
  @@ -379,7 +379,7 @@
   
       #   read configuration file
       my $io = new IO::File "<$file"
  -        || die "unable to open configuration file `$file'";
  +        or die "unable to open configuration file `$file'";
       my $t = '';
       $t .= $_ while (<$io>);
       $io->close;
  @@ -567,8 +567,8 @@
   sub new {
       my $proto = shift;
       my $class = ref($proto) || $proto;
  -    my $program = shift || "cvs";
  -    my $cvsroot = shift || $ENV{CVSROOT} || die "unknown CVSROOT";
  +    my $program = (shift || "cvs");
  +    my $cvsroot = (shift || $ENV{CVSROOT}) or die "unknown CVSROOT";
       my $trace = shift || 0;
   
       #   spawn a CVS server process and establish a
  @@ -581,7 +581,7 @@
       $cvs->{rfd} = new IO::Handle;
       $cvs->{wfd} = new IO::Handle;
       $cvs->{pid} = IPC::Open2::open2($cvs->{rfd}, $cvs->{wfd}, "$program -f -Q -n server")
  -        || die "cannot spawn CVS server process `$program server'";
  +        or die "cannot spawn CVS server process `$program server'";
       print STDERR "cvs server: spawned (pid $cvs->{pid})\n" if ($trace);
       bless ($cvs, $class);
   
  @@ -822,7 +822,7 @@
       #   append to or override a file with lines from an array
       if ($op eq 'append' or $op eq 'write') {
           my $io = new IO::File ($op eq 'append' ? ">>$file" : ">$file")
  -            || die "unable to open `$file' for operation `$op'";
  +            or die "unable to open `$file' for operation `$op'";
           foreach my $line (@lines) {
               $line =~ s|\n+$||s;
               $io->print($prefix . $line . "\n");
  @@ -833,7 +833,7 @@
       elsif ($op eq 'read') {
           my @text = ();
           my $io = new IO::File "<$file"
  -            || die "unable to open `$file' for $op";
  +            or die "unable to open `$file' for $op";
           while (<$io>) {
               s|\n$||s;
               push(@text, $prefix . $_);
  @@ -871,7 +871,7 @@
           $O .= "\n";
       }
       my $io = new IO::File ">>".$RT->{historydb}
  -         || die "cannot store information to history db `$RT->{historydb}'";
  +         or die "cannot store information to history db `$RT->{historydb}'";
       $io->print($O);
       $io->close;
       return;
  @@ -903,7 +903,7 @@
       my $file;
       foreach $file (@files) {
           $file =~ m|^([^/]+)/(.*):([^:]+)$|
  -            || die "invalid file specification `$file' for access control";
  +            or die "invalid file specification `$file' for access control";
           my ($d, $f, $t) = ($1, $2, $3);
           my $allow = 0;
           foreach my $module (keys(%{$CF->{Repository}->{Module}})) {
  @@ -1249,7 +1249,7 @@
       my $cvsstat = '';
       if (not $RT->{useserver}) {
           my $io = new IO::File "$RT->{cvs} -f -Q -n status ".join(' ', @cvsfiles)."|"
  -            || die "unable to open CVS command pipe for reading";
  +            or die "unable to open CVS command pipe for reading";
           $cvsstat .= $_ while (<$io>);
           $io->close;
       }
  @@ -1340,7 +1340,7 @@
       #   suck in the log message
       my $logfile = $PA->{ARG}->[0];
       my $io = new IO::File "<$logfile"
  -        || die "cannot open message file `$logfile' for reading";
  +        or die "cannot open message file `$logfile' for reading";
       my $data = '';
       $data .= $_ while (<$io>);
       $io->close;
  @@ -1351,7 +1351,7 @@
       #  update the log message
       #  (CVS with RSE patches reads in this again, stock CVS ignores it)
       $io = new IO::File ">$logfile"
  -        || die "cannot open message file `$logfile' for writing";
  +        or die "cannot open message file `$logfile' for writing";
       $io->print($data);
       $io->close;
   
  @@ -1494,7 +1494,7 @@
                       exit(0);
                   }
                   my $io = new IO::File "$RT->{cvs} -f -Q -n log -r$It '$Is'|"
  -                    || die "unable to open CVS command pipe for reading";
  +                    or die "unable to open CVS command pipe for reading";
                   $rcslog = $_ while (<$io>);
                   $io->close;
               }
  @@ -1583,7 +1583,7 @@
           my @newinfo = ();
           foreach my $info (@cvsinfo) {
               $info =~ m|^([^,]+),([^,]+),([^,]+)|
  -                || die "invalid loginfo argument `$info' while extending stock CVS information";
  +                or die "invalid loginfo argument `$info' while extending stock CVS information";
               my ($Is, $IV, $Iv) = ($1, $2, $3);
   
               my $It = '';
  @@ -1603,7 +1603,7 @@
       my @newinfo = ();
       foreach my $info (@cvsinfo) {
           $info =~ m|^([^,]+),([^,]+),([^,]+),([^,]*),([^,]*)$|
  -            || die "invalid loginfo argument `$info' while extending summary information";
  +            or die "invalid loginfo argument `$info' while extending summary information";
           my ($Is, $IV, $Iv, $It, $Io) = ($1, $2, $3, $4, $5);
   
           #   fix branch/tag and accumulate information
  @@ -1616,7 +1616,7 @@
               my $rcslog ='';
               if (not $RT->{useserver}) {
                   my $io = new IO::File "$RT->{cvs} -f -Q -n log '$Is'|"
  -                    || die "unable to open CVS command pipe for reading";
  +                    or die "unable to open CVS command pipe for reading";
                   $rcslog .= $_ while (<$io>);
                   $io->close;
               }
  @@ -1639,7 +1639,7 @@
           if ($Io eq 'A' or $Io eq 'M' or $Io eq 'R') {
               if (not $RT->{useserver}) {
                   my $io = new IO::File "$RT->{cvs} -f -Q -n log -r$Iv '$Is'|"
  -                    || die "unable to open CVS command pipe for reading";
  +                    or die "unable to open CVS command pipe for reading";
                   $rcslog .= $_ while (<$io>);
                   $io->close;
               }
  @@ -1706,11 +1706,11 @@
               #   retrieve whole file contents
               unlink("$RT->{tmpfile}.all");
               my $io = new IO::File ">$RT->{tmpfile}.all"
  -                || die "unable to open temporary file $RT->{tmpfile}.all for writing";
  +                or die "unable to open temporary file $RT->{tmpfile}.all for writing";
               my $l = 0;
               if (not $RT->{useserver}) {
                   my $cvs = new IO::File "$RT->{cvs} -f -Q -n update -p -r$Iv '$Is'|"
  -                    || die "unable to open CVS command pipe for reading";
  +                    or die "unable to open CVS command pipe for reading";
                   while (<$cvs>) {
                       $io->print($_);
                       $l++;
  @@ -1747,12 +1747,12 @@
                       unlink("$RT->{tmpfile}.null");
                       unlink("$RT->{tmpfile}.xdelta");
                       my $io = new IO::File ">$RT->{tmpfile}.null"
  -                        || die "unable to open temporary file $RT->{tmpfile}.null for writing";
  +                        or die "unable to open temporary file $RT->{tmpfile}.null for writing";
                       $io->close;
                       system("$RT->{xdelta} delta $RT->{tmpfile}.null " .
                              "$RT->{tmpfile}.all $RT->{tmpfile}.xdelta >/dev/null 2>&1");
                       $io = new IO::File "$RT->{uuencode} $RT->{tmpfile}.xdelta $Is.xdelta |"
  -                        || die "unable to open uuencode command pipe for reading";
  +                        or die "unable to open uuencode command pipe for reading";
                       $cvsdiff .= $_ while (<$io>);
                       $io->close;
                       $cvsdiff .= "@@ .\n";
  @@ -1772,7 +1772,7 @@
                           "\$ cvs diff -u -r0 -r$Iv $Is\n";
                       my $diff = '';
                       my $io = new IO::File "$RT->{diff} -u /dev/null $RT->{tmpfile}.all|"
  -                        || die "unable to open CVS command pipe for reading";
  +                        or die "unable to open CVS command pipe for reading";
                       $diff .= $_ while (<$io>);
                       $io->close;
                       my $Is_quoted = quotemeta("$RT->{tmpfile}.all");
  @@ -1798,10 +1798,10 @@
                       #   retrieve whole file contents (old revision)
                       unlink("$RT->{tmpfile}.old");
                       my $io = new IO::File ">$RT->{tmpfile}.old"
  -                        || die "unable to open temporary file $RT->{tmpfile}.old for writing";
  +                        or die "unable to open temporary file $RT->{tmpfile}.old for writing";
                       if (not $RT->{useserver}) {
                           my $cvs = new IO::File "$RT->{cvs} -f -Q -n update -p -r$IV '$Is'|"
  -                            || die "unable to open CVS command pipe for reading";
  +                            or die "unable to open CVS command pipe for reading";
                           $io->print($_) while (<$cvs>);
                           $cvs->close;
                       }
  @@ -1819,10 +1819,10 @@
                       #   retrieve whole file contents (new revision)
                       unlink("$RT->{tmpfile}.new");
                       $io = new IO::File ">$RT->{tmpfile}.new"
  -                        || die "unable to open temporary file $RT->{tmpfile}.new for writing";
  +                        or die "unable to open temporary file $RT->{tmpfile}.new for writing";
                       if (not $RT->{useserver}) {
                           my $cvs = new IO::File "$RT->{cvs} -f -Q -n update -p -r$Iv '$Is'|"
  -                            || die "unable to open CVS command pipe for reading";
  +                            or die "unable to open CVS command pipe for reading";
                           $io->print($_) while (<$cvs>);
                           $cvs->close;
                       }
  @@ -1851,7 +1851,7 @@
                       system("$RT->{xdelta} delta $RT->{tmpfile}.old " .
                              "$RT->{tmpfile}.new $RT->{tmpfile}.xdelta >/dev/null 2>&1");
                       $io = new IO::File "$RT->{uuencode} $RT->{tmpfile}.xdelta $Is.xdelta |"
  -                        || die "unable to open uuencode command pipe for reading";
  +                        or die "unable to open uuencode command pipe for reading";
                       $cvsdiff .= $_ while (<$io>);
                       $io->close;
                       $cvsdiff .= "@@ .\n";
  @@ -1868,7 +1868,7 @@
                   my $d = '';
                   if (not $RT->{useserver}) {
                       my $io = new IO::File "$RT->{cvs} -f -Q -n diff -u -r$IV -r$Iv '$Is'|"
  -                        || die "unable to open CVS command pipe for reading";
  +                        or die "unable to open CVS command pipe for reading";
                       $d .= $_ while (<$io>);
                       $io->close;
                   }
  @@ -1963,7 +1963,7 @@
       my $handle_max; $handle_max = undef;
       foreach my $cvsinfo (@cvsinfo) {
           $cvsinfo =~ m|^([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+)$|
  -             || die "invalid loginfo argument `$cvsinfo' while accumulating information";
  +             or die "invalid loginfo argument `$cvsinfo' while accumulating information";
           my ($Is, $IV, $Iv, $It, $Io, $Ik, $ID, $Id) = ($1, $2, $3, $4, $5, $6, $7, $8, $9);
           my $e = {};
           $e->{oldrev} = $IV;
  @@ -2068,7 +2068,7 @@
                   my $logmsg = &produce_log_message($PA, $RT, $CF, $IN, $logtype, @files);
                   $logurl = $RT->{cvsroot}."/".$logurl if ($logurl !~ m|^/|);
                   print "cvs commit: Writing commit message to $logurl\n";
  -                my $io = new IO::File ">>$logurl" || die "cannot append log message to `$logurl'";
  +                my $io = new IO::File ">>$logurl" or die "cannot append log message to `$logurl'";
                   $io->print($logmsg);
                   $io->close;
               }
  @@ -2117,7 +2117,7 @@
       #   Finally generate the logging message.
       #
   
  -    my $RP = $CF->{Logging}->{Report}->{$type} || die "No report of type `$type' defined";
  +    my $RP = $CF->{Logging}->{Report}->{$type} or die "No report of type `$type' defined";
       my $prefix = $RP->{Prefix} || '';
       my $style = $RP->{Details} || 'patch:plain';
       my $O = '';
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jan 12 21:44:28 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2DA9876400; Wed, 12 Jan 2005 21:44:28 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ VERSION shiela-install.sh shiela.pl
Message-Id: <20050112204428.2DA9876400@mail.ossp.org>
Date: Wed, 12 Jan 2005 21:44:28 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Jan-2005 21:44:28
  Branch: HEAD                             Handle: 2005011220442700

  Modified files:
    ossp-pkg/shiela         VERSION shiela-install.sh shiela.pl

  Log:
    bump version number

  Summary:
    Revision    Changes     Path
    1.17        +1  -1      ossp-pkg/shiela/VERSION
    1.33        +1  -1      ossp-pkg/shiela/shiela-install.sh
    1.68        +1  -1      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/VERSION
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 VERSION
  --- ossp-pkg/shiela/VERSION	2 Jul 2004 19:24:52 -0000	1.16
  +++ ossp-pkg/shiela/VERSION	12 Jan 2005 20:44:27 -0000	1.17
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP shiela (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP shiela, Version 1.1.4 (02-Jul-2004)
  +  This is OSSP shiela, Version 1.1.5 (12-Jan-2005)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-install.sh
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 shiela-install.sh
  --- ossp-pkg/shiela/shiela-install.sh	2 Jul 2004 19:24:52 -0000	1.32
  +++ ossp-pkg/shiela/shiela-install.sh	12 Jan 2005 20:44:27 -0000	1.33
  @@ -26,7 +26,7 @@
   ##  shiela-install.sh: repository install program (syntax: Bourne-Shell)
   ##
   
  -version="1.1.4"
  +version="1.1.5"
   
   prefix="@prefix@"
   bindir="@bindir@"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================================
  $ cvs diff -u -r1.67 -r1.68 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	12 Jan 2005 20:42:46 -0000	1.67
  +++ ossp-pkg/shiela/shiela.pl	12 Jan 2005 20:44:27 -0000	1.68
  @@ -26,7 +26,7 @@
   ##  shiela.pl: control program (syntax: Perl)
   ##
   
  -my $version = '1.1.4';
  +my $version = '1.1.5';
   
   require 5.005;
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jan 12 21:46:16 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 64B0976400; Wed, 12 Jan 2005 21:46:16 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ ChangeLog Makefile.in README configure.ac...
Message-Id: <20050112204616.64B0976400@mail.ossp.org>
Date: Wed, 12 Jan 2005 21:46:16 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Jan-2005 21:46:16
  Branch: HEAD                             Handle: 2005011220461202

  Modified files:
    ossp-pkg/shiela         ChangeLog Makefile.in README configure.ac
                            shiela-install.pod shiela-install.sh
                            shiela-test.sh shiela.pl shiela.pod

  Log:
    Adjust copyright messages for new year 2005.

  Summary:
    Revision    Changes     Path
    1.54        +3  -0      ossp-pkg/shiela/ChangeLog
    1.9         +2  -2      ossp-pkg/shiela/Makefile.in
    1.16        +2  -2      ossp-pkg/shiela/README
    1.4         +4  -4      ossp-pkg/shiela/configure.ac
    1.26        +2  -2      ossp-pkg/shiela/shiela-install.pod
    1.34        +4  -4      ossp-pkg/shiela/shiela-install.sh
    1.4         +2  -2      ossp-pkg/shiela/shiela-test.sh
    1.69        +2  -2      ossp-pkg/shiela/shiela.pl
    1.24        +2  -2      ossp-pkg/shiela/shiela.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.53 -r1.54 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	12 Jan 2005 20:42:46 -0000	1.53
  +++ ossp-pkg/shiela/ChangeLog	12 Jan 2005 20:46:12 -0000	1.54
  @@ -21,6 +21,9 @@
         there, too.
         [Geoff Thorpe <geoff@geoffthorpe.net>]
   
  +   *) Adjust copyright messages for new year 2005.
  +      [Ralf S. Engelschall]
  +
      *) Workaround a buggy feature in Perl versions 5.8.4 and higher
         which totally optimized away "my $var = undef;" constructs
         instead of optimizing them to just "my $var;".
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 Makefile.in
  --- ossp-pkg/shiela/Makefile.in	7 May 2004 07:34:42 -0000	1.8
  +++ ossp-pkg/shiela/Makefile.in	12 Jan 2005 20:46:12 -0000	1.9
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP shiela - CVS Access Control and Logging Facility
  -##  Copyright (c) 2000-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2000-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2000-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2005 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP shiela, an access control and logging
   ##  facility for Concurrent Versions System (CVS) repositories
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/README
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 README
  --- ossp-pkg/shiela/README	5 May 2004 13:18:47 -0000	1.15
  +++ ossp-pkg/shiela/README	12 Jan 2005 20:46:13 -0000	1.16
  @@ -21,8 +21,8 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2000-2004 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2000-2004 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2000-2005 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2000-2005 The OSSP Project <http://www.ossp.org/>
   
     This file is part of OSSP shiela, an access control and logging
     facility for Concurrent Versions System (CVS) repositories
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/configure.ac
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 configure.ac
  --- ossp-pkg/shiela/configure.ac	5 May 2004 13:11:43 -0000	1.3
  +++ ossp-pkg/shiela/configure.ac	12 Jan 2005 20:46:13 -0000	1.4
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP shiela - CVS Access Control and Logging Facility
  -##  Copyright (c) 2000-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2000-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2000-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2005 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP shiela, an access control and logging
   ##  facility for Concurrent Versions System (CVS) repositories
  @@ -30,8 +30,8 @@
   
   V=`./shtool version -ltxt -dlong VERSION`
   ./shtool echo -e "Configuring %BOSSP shiela%b, Version %B${V}%b"
  -echo "Copyright (c) 2000-2004 Ralf S. Engelschall <rse@engelschall.com>"
  -echo "Copyright (c) 2000-2004 The OSSP Project <http://www.ossp.org/>"
  +echo "Copyright (c) 2000-2005 Ralf S. Engelschall <rse@engelschall.com>"
  +echo "Copyright (c) 2000-2005 The OSSP Project <http://www.ossp.org/>"
   
   AC_MSG_CHECKING(for Perl program)
   AC_ARG_WITH(perl,dnl
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-install.pod
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 shiela-install.pod
  --- ossp-pkg/shiela/shiela-install.pod	12 Jan 2005 20:42:46 -0000	1.25
  +++ ossp-pkg/shiela/shiela-install.pod	12 Jan 2005 20:46:13 -0000	1.26
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP shiela - CVS Access Control and Logging Facility
  -##  Copyright (c) 2000-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2000-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2000-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2005 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP shiela, an access control and logging
   ##  facility for Concurrent Versions System (CVS) repositories
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-install.sh
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 shiela-install.sh
  --- ossp-pkg/shiela/shiela-install.sh	12 Jan 2005 20:44:27 -0000	1.33
  +++ ossp-pkg/shiela/shiela-install.sh	12 Jan 2005 20:46:13 -0000	1.34
  @@ -1,8 +1,8 @@
   #!@SH@
   ##
   ##  OSSP shiela - CVS Access Control and Logging Facility
  -##  Copyright (c) 2000-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2000-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2000-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2005 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP shiela, an access control and logging
   ##  facility for Concurrent Versions System (CVS) repositories
  @@ -412,8 +412,8 @@
   cat >$tmpdir/shiela.cfg <<EOT
   ##
   ##  OSSP shiela - Access Control and Logging Facility for CVS
  -##  Copyright (c) 2000-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2000-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2000-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2005 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP shiela, an access control and logging
   ##  facility for Concurrent Versions System (CVS) repositories
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-test.sh
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 shiela-test.sh
  --- ossp-pkg/shiela/shiela-test.sh	7 May 2004 07:48:16 -0000	1.3
  +++ ossp-pkg/shiela/shiela-test.sh	12 Jan 2005 20:46:13 -0000	1.4
  @@ -1,8 +1,8 @@
   #!/bin/sh
   ##
   ##  OSSP shiela - CVS Access Control and Logging Facility
  -##  Copyright (c) 2000-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2000-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2000-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2005 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP shiela, an access control and logging
   ##  facility for Concurrent Versions System (CVS) repositories
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================================
  $ cvs diff -u -r1.68 -r1.69 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	12 Jan 2005 20:44:27 -0000	1.68
  +++ ossp-pkg/shiela/shiela.pl	12 Jan 2005 20:46:13 -0000	1.69
  @@ -1,8 +1,8 @@
   #!@PERL@ -w
   ##
   ##  OSSP shiela - CVS Access Control and Logging Facility
  -##  Copyright (c) 2000-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2000-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2000-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2005 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP shiela, an access control and logging
   ##  facility for Concurrent Versions System (CVS) repositories
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pod
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 shiela.pod
  --- ossp-pkg/shiela/shiela.pod	5 May 2004 13:18:47 -0000	1.23
  +++ ossp-pkg/shiela/shiela.pod	12 Jan 2005 20:46:14 -0000	1.24
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP shiela - CVS Access Control and Logging Facility
  -##  Copyright (c) 2000-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2000-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2000-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2005 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP shiela, an access control and logging
   ##  facility for Concurrent Versions System (CVS) repositories
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jan 12 21:47:26 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4DB6776400; Wed, 12 Jan 2005 21:47:26 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ ChangeLog devtool.conf
Message-Id: <20050112204726.4DB6776400@mail.ossp.org>
Date: Wed, 12 Jan 2005 21:47:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Jan-2005 21:47:26
  Branch: HEAD                             Handle: 2005011220472500

  Modified files:
    ossp-pkg/shiela         ChangeLog devtool.conf

  Log:
    Upgraded build environment to GNU shtool 2.0.1

  Summary:
    Revision    Changes     Path
    1.55        +3  -0      ossp-pkg/shiela/ChangeLog
    1.12        +1  -1      ossp-pkg/shiela/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.54 -r1.55 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	12 Jan 2005 20:46:12 -0000	1.54
  +++ ossp-pkg/shiela/ChangeLog	12 Jan 2005 20:47:25 -0000	1.55
  @@ -11,6 +11,9 @@
   
     Changes between 1.1.4 and 1.1.5 (02-Jul-2004 to 12-Jan-2005):
   
  +   *) Upgraded build environment to GNU shtool 2.0.1
  +      [Ralf S. Engelschall]
  +
      *) Fix internal error handling by replacing "|| die" with "or die"
         constructs because the different binding priority of "||" and "or"
         leaded to wrong results.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 devtool.conf
  --- ossp-pkg/shiela/devtool.conf	6 May 2004 19:45:39 -0000	1.11
  +++ ossp-pkg/shiela/devtool.conf	12 Jan 2005 20:47:25 -0000	1.12
  @@ -3,7 +3,7 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.2 "1.6.*" all
  +    @autogen shtool   2.0.1 "2.0.*" all
       @autogen autoconf 2.59  "2.5[3-9]*"
   
   %autoclean
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jan 12 21:52:29 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5B4897643E; Wed, 12 Jan 2005 21:52:29 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/tool/ index.wml ossp-w...
Message-Id: <20050112205229.5B4897643E@mail.ossp.org>
Date: Wed, 12 Jan 2005 21:52:29 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   12-Jan-2005 21:52:29
  Branch: HEAD                             Handle: 2005011220522701

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/shiela
                            index.wml

  Log:
    release OSSP shiela 1.1.5

  Summary:
    Revision    Changes     Path
    1.115       +1  -0      ossp-web/new/news.txt
    1.44        +1  -1      ossp-web/pkg/tool/index.wml
    1.16        +2  -2      ossp-web/pkg/tool/shiela/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.114 -r1.115 news.txt
  --- ossp-web/new/news.txt	30 Dec 2004 17:30:42 -0000	1.114
  +++ ossp-web/new/news.txt	12 Jan 2005 20:52:27 -0000	1.115
  @@ -1,3 +1,4 @@
  +12-Jan-2005: Released T<OSSP shiela> 1.1.5
   26-Dec-2004: Released T<OSSP flow2rrd> 0.9.1
   26-Dec-2004: Released T<OSSP flow2rrd> 0.9.0
   19-Dec-2004: Released L<OSSP cfg> 0.9.7
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.43 -r1.44 index.wml
  --- ossp-web/pkg/tool/index.wml	26 Dec 2004 17:18:06 -0000	1.43
  +++ ossp-web/pkg/tool/index.wml	12 Jan 2005 20:52:28 -0000	1.44
  @@ -20,7 +20,7 @@
               done=100 stable="1.3.0" unstable=none>
     <pkg_item name="shiela" longname="OSSP shiela" type="tool"
               desc="CVS Access Control and Logging"
  -	        done=100 stable="1.1.4" unstable="none">
  +	        done=100 stable="1.1.5" unstable="none">
     <pkg_item name="svs" longname="OSSP svs" type="tool"
               desc="Stupid/Silly/Simple Versioning System"
   	        done=100 stable="1.0.0" unstable="none">
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/shiela/index.wml
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 index.wml
  --- ossp-web/pkg/tool/shiela/index.wml	2 Jul 2004 19:58:56 -0000	1.15
  +++ ossp-web/pkg/tool/shiela/index.wml	12 Jan 2005 20:52:28 -0000	1.16
  @@ -25,7 +25,7 @@
   <h2>Status</h2>
   
   <pkg_status
  -    stable="1.1.4" stable_date="02-Jul-2004"
  +    stable="1.1.5" stable_date="12-Jan-2005"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -36,7 +36,7 @@
       url=$(FTP_ROOT_URL)/pkg/tool/shiela/
       directory=$(FTP_ROOT_DIR)/pkg/tool/shiela/
       files="shiela-*.tar.gz" 
  -	stable="shiela-1.1.4.tar.gz" unstable="none">
  +	stable="shiela-1.1.5.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 13 09:36:28 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CDFA7764CE; Thu, 13 Jan 2005 09:36:27 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ui64/ ui64.c ui64_test.c
Message-Id: <20050113083627.CDFA7764CE@mail.ossp.org>
Date: Thu, 13 Jan 2005 09:36:27 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Jan-2005 09:36:27
  Branch: HEAD                             Handle: 2005011308362700

  Modified files:
    ossp-pkg/ui64           ui64.c ui64_test.c

  Log:
    make gcc 4.0 happy

  Summary:
    Revision    Changes     Path
    1.7         +1  -1      ossp-pkg/ui64/ui64.c
    1.6         +2  -2      ossp-pkg/ui64/ui64_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/ui64.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ui64.c
  --- ossp-pkg/ui64/ui64.c	9 Jan 2004 11:28:22 -0000	1.6
  +++ ossp-pkg/ui64/ui64.c	13 Jan 2005 08:36:27 -0000	1.7
  @@ -149,7 +149,7 @@
   		str[i++] = map[r];
   		while (n > 1 && x.x[n-1] == 0)
   			n--;
  -	} while (i < (len-1) && (n > 1 || x.x[0] != 0));
  +	} while (i < ((int)len-1) && (n > 1 || x.x[0] != 0));
   	str[i] = '\0';
       for (j = 0; j < --i; j++) {
           c = str[j];
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/ui64_test.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ui64_test.c
  --- ossp-pkg/ui64/ui64_test.c	9 Jan 2004 11:28:23 -0000	1.5
  +++ ossp-pkg/ui64/ui64_test.c	13 Jan 2005 08:36:27 -0000	1.6
  @@ -191,7 +191,7 @@
               case '-': re = ui64_sub(a1, a2, &ov); break;
               case '*': re = ui64_mul(a1, a2, &ov); break;
               case '/': re = ui64_div(a1, a2, &ov); break;
  -            default: break;
  +            default:  re = ui64_zero();           break;
           }
           re_s = ui64_i2s(re, re_a, sizeof(re_a), 10);
           ov_s = ui64_i2s(ov, ov_a, sizeof(ov_a), 10);
  @@ -244,7 +244,7 @@
           switch (table[i].op[0]) {
               case '<': re = ui64_rol(a1, a2, &ov); break;
               case '>': re = ui64_ror(a1, a2, &ov); break;
  -            default: break;
  +            default:  re = ui64_zero();           break;
           }
           re_s = ui64_i2s(re, re_a, sizeof(re_a), 10);
           ov_s = ui64_i2s(ov, ov_a, sizeof(ov_a), 10);
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 13 09:39:08 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6D2D5764CE; Thu, 13 Jan 2005 09:39:08 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ui64/ devtool.conf
Message-Id: <20050113083908.6D2D5764CE@mail.ossp.org>
Date: Thu, 13 Jan 2005 09:39:08 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Jan-2005 09:39:08
  Branch: HEAD                             Handle: 2005011308390800

  Modified files:
    ossp-pkg/ui64           devtool.conf

  Log:
    switch to newer versions for build environment tools

  Summary:
    Revision    Changes     Path
    1.5         +3  -3      ossp-pkg/ui64/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 devtool.conf
  --- ossp-pkg/ui64/devtool.conf	9 Jan 2004 11:24:21 -0000	1.4
  +++ ossp-pkg/ui64/devtool.conf	13 Jan 2005 08:39:08 -0000	1.5
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.1 "1.6.*" all
  -    @autogen libtool  1.4.2 "1.4*"
  -    @autogen autoconf 2.53  "2.5[3-9]*"
  +    @autogen shtool   2.0.1  "2.0.*" all
  +    @autogen libtool  1.5.10 "1.5*"
  +    @autogen autoconf 2.59   "2.[3-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 13 09:42:36 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2766B764CE; Thu, 13 Jan 2005 09:42:36 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ui64/ Makefile.in README aclocal.m4 configure.ac ...
Message-Id: <20050113084236.2766B764CE@mail.ossp.org>
Date: Thu, 13 Jan 2005 09:42:36 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Jan-2005 09:42:36
  Branch: HEAD                             Handle: 2005011308423400

  Modified files:
    ossp-pkg/ui64           Makefile.in README aclocal.m4 configure.ac
                            ui64-config.in ui64.c ui64.h ui64.pod ui64_test.c

  Log:
    happy new year 2005

  Summary:
    Revision    Changes     Path
    1.5         +2  -2      ossp-pkg/ui64/Makefile.in
    1.7         +2  -2      ossp-pkg/ui64/README
    1.5         +2  -2      ossp-pkg/ui64/aclocal.m4
    1.5         +2  -2      ossp-pkg/ui64/configure.ac
    1.5         +2  -2      ossp-pkg/ui64/ui64-config.in
    1.8         +2  -2      ossp-pkg/ui64/ui64.c
    1.9         +2  -2      ossp-pkg/ui64/ui64.h
    1.10        +2  -2      ossp-pkg/ui64/ui64.pod
    1.7         +2  -2      ossp-pkg/ui64/ui64_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 Makefile.in
  --- ossp-pkg/ui64/Makefile.in	9 Jan 2004 11:28:22 -0000	1.4
  +++ ossp-pkg/ui64/Makefile.in	13 Jan 2005 08:42:34 -0000	1.5
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP ui64 - 64-Bit Arithmetic
  -##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP ui64, a 64-bit arithmetic library
   ##  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/README
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 README
  --- ossp-pkg/ui64/README	9 Jan 2004 11:28:22 -0000	1.6
  +++ ossp-pkg/ui64/README	13 Jan 2005 08:42:34 -0000	1.7
  @@ -15,8 +15,8 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
   
     This file is part of OSSP ui64, a 64-bit arithmetic library
     which can be found at http://www.ossp.org/pkg/lib/ui64/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 aclocal.m4
  --- ossp-pkg/ui64/aclocal.m4	9 Jan 2004 11:28:22 -0000	1.4
  +++ ossp-pkg/ui64/aclocal.m4	13 Jan 2005 08:42:34 -0000	1.5
  @@ -1,7 +1,7 @@
   dnl ##
   dnl ##  OSSP ui64 - 64-Bit Arithmetic
  -dnl ##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
   dnl ##
   dnl ##  This file is part of OSSP ui64, a 64-bit arithmetic library
   dnl ##  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/configure.ac
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 configure.ac
  --- ossp-pkg/ui64/configure.ac	9 Jan 2004 11:28:22 -0000	1.4
  +++ ossp-pkg/ui64/configure.ac	13 Jan 2005 08:42:34 -0000	1.5
  @@ -1,7 +1,7 @@
   dnl ##
   dnl ##  OSSP ui64 - 64-Bit Arithmetic
  -dnl ##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
   dnl ##
   dnl ##  This file is part of OSSP ui64, a 64-bit arithmetic library
   dnl ##  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/ui64-config.in
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ui64-config.in
  --- ossp-pkg/ui64/ui64-config.in	9 Jan 2004 11:28:22 -0000	1.4
  +++ ossp-pkg/ui64/ui64-config.in	13 Jan 2005 08:42:34 -0000	1.5
  @@ -1,8 +1,8 @@
   #!/bin/sh
   ##
   ##  OSSP ui64 - 64-Bit Arithmetic
  -##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP ui64, a 64-bit arithmetic library
   ##  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/ui64.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 ui64.c
  --- ossp-pkg/ui64/ui64.c	13 Jan 2005 08:36:27 -0000	1.7
  +++ ossp-pkg/ui64/ui64.c	13 Jan 2005 08:42:34 -0000	1.8
  @@ -1,7 +1,7 @@
   /*
   **  OSSP ui64 - 64-Bit Arithmetic
  -**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP ui64, a 64-bit arithmetic library
   **  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/ui64.h
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 ui64.h
  --- ossp-pkg/ui64/ui64.h	9 Jan 2004 11:28:22 -0000	1.8
  +++ ossp-pkg/ui64/ui64.h	13 Jan 2005 08:42:34 -0000	1.9
  @@ -1,7 +1,7 @@
   /*
   **  OSSP ui64 - 64-Bit Arithmetic
  -**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP ui64, a 64-bit arithmetic library
   **  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/ui64.pod
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 ui64.pod
  --- ossp-pkg/ui64/ui64.pod	9 Jan 2004 11:28:23 -0000	1.9
  +++ ossp-pkg/ui64/ui64.pod	13 Jan 2005 08:42:34 -0000	1.10
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP ui64 - 64-Bit Arithmetic
  -##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP ui64, a 64-bit arithmetic library
   ##  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/ui64_test.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ui64_test.c
  --- ossp-pkg/ui64/ui64_test.c	13 Jan 2005 08:36:27 -0000	1.6
  +++ ossp-pkg/ui64/ui64_test.c	13 Jan 2005 08:42:34 -0000	1.7
  @@ -1,7 +1,7 @@
   /*
   **  OSSP ui64 - 64-Bit Arithmetic
  -**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP ui64, a 64-bit arithmetic library
   **  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 13 09:50:12 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 58486764CE; Thu, 13 Jan 2005 09:50:12 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid_mac.c
Message-Id: <20050113085012.58486764CE@mail.ossp.org>
Date: Thu, 13 Jan 2005 09:50:12 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Jan-2005 09:50:12
  Branch: HEAD                             Handle: 2005011308501100

  Modified files:
    ossp-pkg/uuid           uuid_mac.c

  Log:
    use a double-cast to get rid of GCC warnings on 64-bit platforms about
    'cast increases alignment restrictions' because although true it
    cannot be done differently here because of the way the old Unix socket
    API is designed

  Summary:
    Revision    Changes     Path
    1.6         +1  -1      ossp-pkg/uuid/uuid_mac.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_mac.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 uuid_mac.c
  --- ossp-pkg/uuid/uuid_mac.c	31 Dec 2004 19:20:34 -0000	1.5
  +++ ossp-pkg/uuid/uuid_mac.c	13 Jan 2005 08:50:11 -0000	1.6
  @@ -105,7 +105,7 @@
               return FALSE;
           for (ifap = ifap_head; ifap != NULL; ifap = ifap->ifa_next) {
               if (ifap->ifa_addr != NULL && ifap->ifa_addr->sa_family == AF_LINK) {
  -                sdl = (const struct sockaddr_dl *)ifap->ifa_addr;
  +                sdl = (const struct sockaddr_dl *)(void *)ifap->ifa_addr;
                   ucp = (unsigned char *)(sdl->sdl_data + sdl->sdl_nlen);
                   if (ucp != NULL && sdl->sdl_alen > 0) {
                       for (i = 0; i < MAC_LEN && i < sdl->sdl_alen; i++, ucp++)
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 13 10:58:15 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 18FC9764D1; Thu, 13 Jan 2005 10:58:15 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid_md5.c
Message-Id: <20050113095815.18FC9764D1@mail.ossp.org>
Date: Thu, 13 Jan 2005 10:58:15 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Jan-2005 10:58:15
  Branch: HEAD                             Handle: 2005011309581400

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid_md5.c

  Log:
    Optimize internal md5_store() function by directly finalizing MD5
    calculation on buffer copy instead of finalizing original buffer
    and having to restore it from the buffer copy.

  Summary:
    Revision    Changes     Path
    1.65        +5  -0      ossp-pkg/uuid/ChangeLog
    1.8         +1  -2      ossp-pkg/uuid/uuid_md5.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.64 -r1.65 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	31 Dec 2004 19:20:34 -0000	1.64
  +++ ossp-pkg/uuid/ChangeLog	13 Jan 2005 09:58:14 -0000	1.65
  @@ -13,6 +13,11 @@
   
     Changes between 1.1.1 and 1.1.2 (18-Nov-2004 to xx-Jan-2005)
   
  +   o Optimize internal md5_store() function by directly finalizing MD5
  +     calculation on buffer copy instead of finalizing original buffer
  +     and having to restore it from the buffer copy.
  +     [Ralf S. Engelschall]
  +
      o Adjust copyright messages for new year 2005.
        [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_md5.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 uuid_md5.c
  --- ossp-pkg/uuid/uuid_md5.c	31 Dec 2004 19:20:34 -0000	1.7
  +++ ossp-pkg/uuid/uuid_md5.c	13 Jan 2005 09:58:14 -0000	1.8
  @@ -403,8 +403,7 @@
           }
       }
       memcpy((void *)(&ctx), (void *)(&(md5->ctx)), sizeof(MD5_CTX));
  -    MD5Final((unsigned char *)(*data_ptr), &(md5->ctx));
  -    memcpy((void *)(&(md5->ctx)), (void *)(&ctx), sizeof(MD5_CTX));
  +    MD5Final((unsigned char *)(*data_ptr), &(ctx));
       return MD5_RC_OK;
   }
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 13 11:30:43 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 780DF764CE; Thu, 13 Jan 2005 11:30:43 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog THANKS uuid_md5.c
Message-Id: <20050113103043.780DF764CE@mail.ossp.org>
Date: Thu, 13 Jan 2005 11:30:43 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Jan-2005 11:30:43
  Branch: HEAD                             Handle: 2005011310304001

  Modified files:
    ossp-pkg/uuid           ChangeLog THANKS uuid_md5.c

  Log:
    Fix generation of v3 UUIDs by adding support for 64-bit platforms
    to the underlying uuid_md5.c code (which internally is based on
    the RFC reference code which in turn assumes a 32-bit environment).
    
    64-bit platform problem discovered by maintainer of OSSP uuid Debian
    package: Piotr Roszatycki <Piotr_Roszatycki@netia.net.pl>

  Summary:
    Revision    Changes     Path
    1.66        +5  -0      ossp-pkg/uuid/ChangeLog
    1.6         +1  -0      ossp-pkg/uuid/THANKS
    1.9         +19 -0      ossp-pkg/uuid/uuid_md5.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.65 -r1.66 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	13 Jan 2005 09:58:14 -0000	1.65
  +++ ossp-pkg/uuid/ChangeLog	13 Jan 2005 10:30:40 -0000	1.66
  @@ -13,6 +13,11 @@
   
     Changes between 1.1.1 and 1.1.2 (18-Nov-2004 to xx-Jan-2005)
   
  +   o Fix generation of v3 UUIDs by adding support for 64-bit platforms
  +     to the underlying uuid_md5.c code (which internally is based on
  +     the RFC reference code which in turn assumes a 32-bit environment).
  +     [Ralf S. Engelschall, Piotr Roszatycki <Piotr_Roszatycki@netia.net.pl>]
  +
      o Optimize internal md5_store() function by directly finalizing MD5
        calculation on buffer copy instead of finalizing original buffer
        and having to restore it from the buffer copy.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/THANKS
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 THANKS
  --- ossp-pkg/uuid/THANKS	16 Feb 2004 09:13:58 -0000	1.5
  +++ ossp-pkg/uuid/THANKS	13 Jan 2005 10:30:41 -0000	1.6
  @@ -15,6 +15,7 @@
       o  M. Daniel                   <mdaniel@scdi.com>
       o  Fuyuki                      <fuyuki@nigredo.org>
       o  Thomas Lotterer             <thomas@lotterer.net>
  +    o  Piotr Roszatycki            <Piotr_Roszatycki@netia.net.pl>
       o  Michael Schloh              <michael@schloh.com>
       o  Guerry Semones              <guerry@tsunamiresearch.com>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_md5.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 uuid_md5.c
  --- ossp-pkg/uuid/uuid_md5.c	13 Jan 2005 09:58:14 -0000	1.8
  +++ ossp-pkg/uuid/uuid_md5.c	13 Jan 2005 10:30:41 -0000	1.9
  @@ -30,6 +30,7 @@
   #include <stdlib.h>
   #include <string.h>
   
  +#include "config.h"
   #include "uuid_md5.h"
   
   /*
  @@ -77,10 +78,28 @@
   typedef unsigned char *POINTER;
   
   /* UINT2 defines a two byte word */
  +#if SIZEOF_UNSIGNED_SHORT == 2
   typedef unsigned short int UINT2;
  +#elif SIZEOF_UNSIGNED_INT == 2
  +typedef unsigned int UINT2;
  +#elif SIZEOF_UNSIGNED_LONG == 2
  +typedef unsigned long int UINT2;
  +#else
  +#error ERROR: unable to determine UINT2 type (two byte word)
  +#endif
   
   /* UINT4 defines a four byte word */
  +#if SIZEOF_UNSIGNED_SHORT == 4
  +typedef unsigned short int UINT4;
  +#elif SIZEOF_UNSIGNED_INT == 4
  +typedef unsigned int UINT4;
  +#elif SIZEOF_UNSIGNED_LONG == 4
   typedef unsigned long int UINT4;
  +#elif SIZEOF_UNSIGNED_LONG_LONG == 4
  +typedef unsigned long long int UINT4;
  +#else
  +#error ERROR: unable to determine UINT4 type (four byte word)
  +#endif
   
   /* MD5 context. */
   typedef struct {
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 13 11:36:06 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6DC8F764CE; Thu, 13 Jan 2005 11:36:06 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid_md5.c
Message-Id: <20050113103606.6DC8F764CE@mail.ossp.org>
Date: Thu, 13 Jan 2005 11:36:06 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Jan-2005 11:36:06
  Branch: HEAD                             Handle: 2005011310360600

  Modified files:
    ossp-pkg/uuid           uuid_md5.c

  Log:
    style cleanup

  Summary:
    Revision    Changes     Path
    1.10        +15 -14     ossp-pkg/uuid/uuid_md5.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_md5.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 uuid_md5.c
  --- ossp-pkg/uuid/uuid_md5.c	13 Jan 2005 10:30:41 -0000	1.9
  +++ ossp-pkg/uuid/uuid_md5.c	13 Jan 2005 10:36:06 -0000	1.10
  @@ -78,23 +78,23 @@
   typedef unsigned char *POINTER;
   
   /* UINT2 defines a two byte word */
  -#if SIZEOF_UNSIGNED_SHORT == 2
  +#if SIZEOF_UNSIGNED_SHORT   == 2
   typedef unsigned short int UINT2;
  -#elif SIZEOF_UNSIGNED_INT == 2
  -typedef unsigned int UINT2;
  -#elif SIZEOF_UNSIGNED_LONG == 2
  -typedef unsigned long int UINT2;
  +#elif SIZEOF_UNSIGNED_INT   == 2
  +typedef unsigned int       UINT2;
  +#elif SIZEOF_UNSIGNED_LONG  == 2
  +typedef unsigned long int  UINT2;
   #else
   #error ERROR: unable to determine UINT2 type (two byte word)
   #endif
   
   /* UINT4 defines a four byte word */
  -#if SIZEOF_UNSIGNED_SHORT == 4
  -typedef unsigned short int UINT4;
  -#elif SIZEOF_UNSIGNED_INT == 4
  -typedef unsigned int UINT4;
  -#elif SIZEOF_UNSIGNED_LONG == 4
  -typedef unsigned long int UINT4;
  +#if SIZEOF_UNSIGNED_SHORT       == 4
  +typedef unsigned short int     UINT4;
  +#elif SIZEOF_UNSIGNED_INT       == 4
  +typedef unsigned int           UINT4;
  +#elif SIZEOF_UNSIGNED_LONG      == 4
  +typedef unsigned long int      UINT4;
   #elif SIZEOF_UNSIGNED_LONG_LONG == 4
   typedef unsigned long long int UINT4;
   #else
  @@ -108,14 +108,15 @@
     unsigned char buffer[64];                         /* input buffer */
   } MD5_CTX;
   
  +/* prototypes for internal functions */
   static void MD5Init      (MD5_CTX *_ctx);
   static void MD5Update    (MD5_CTX *_ctx, unsigned char *, unsigned int);
   static void MD5Final     (unsigned char [16], MD5_CTX *);
  -
   static void MD5Transform (UINT4 [4], unsigned char [64]);
   static void Encode       (unsigned char *, UINT4 *, unsigned int);
   static void Decode       (UINT4 *, unsigned char *, unsigned int);
   
  +/* finalization padding */
   static unsigned char PADDING[64] = {
     0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  @@ -226,7 +227,7 @@
       Encode(digest, context->state, 16);
   
       /* Zeroize sensitive information. */
  -    memset((POINTER)context, 0, sizeof (*context));
  +    memset((POINTER)context, '\0', sizeof (*context));
   }
   
   /* MD5 basic transformation. Transforms state based on block. */
  @@ -332,7 +333,7 @@
       state[3] += d;
   
       /* Zeroize sensitive information. */
  -    memset((POINTER)x, 0, sizeof (x));
  +    memset((POINTER)x, '\0', sizeof (x));
   }
   
   /* Encodes input (UINT4) into output (unsigned char).
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 13 11:37:37 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AA1B9764CE; Thu, 13 Jan 2005 11:37:37 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog README ossp-pkg/uuid/perl/ uuid.p...
Message-Id: <20050113103737.AA1B9764CE@mail.ossp.org>
Date: Thu, 13 Jan 2005 11:37:37 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Jan-2005 11:37:37
  Branch: HEAD                             Handle: 2005011310373601

  Modified files:
    ossp-pkg/uuid           ChangeLog README uuid_vers.h
    ossp-pkg/uuid/perl      uuid.pm

  Log:
    bump version and date before release

  Summary:
    Revision    Changes     Path
    1.67        +1  -1      ossp-pkg/uuid/ChangeLog
    1.24        +1  -1      ossp-pkg/uuid/README
    1.6         +1  -1      ossp-pkg/uuid/perl/uuid.pm
    1.13        +9  -9      ossp-pkg/uuid/uuid_vers.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.66 -r1.67 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	13 Jan 2005 10:30:40 -0000	1.66
  +++ ossp-pkg/uuid/ChangeLog	13 Jan 2005 10:37:36 -0000	1.67
  @@ -11,7 +11,7 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 1.1.1 and 1.1.2 (18-Nov-2004 to xx-Jan-2005)
  +  Changes between 1.1.1 and 1.1.2 (18-Nov-2004 to 13-Jan-2005)
   
      o Fix generation of v3 UUIDs by adding support for 64-bit platforms
        to the underlying uuid_md5.c code (which internally is based on
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 README
  --- ossp-pkg/uuid/README	31 Dec 2004 19:20:34 -0000	1.23
  +++ ossp-pkg/uuid/README	13 Jan 2005 10:37:36 -0000	1.24
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
   
     OSSP uuid - Universally Unique Identifier
  -  Version 1.1.1 (18-Nov-2004)
  +  Version 1.1.2 (13-Jan-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.pm
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 uuid.pm
  --- ossp-pkg/uuid/perl/uuid.pm	31 Dec 2004 19:20:39 -0000	1.5
  +++ ossp-pkg/uuid/perl/uuid.pm	13 Jan 2005 10:37:37 -0000	1.6
  @@ -41,7 +41,7 @@
   ##
   
   #   API version
  -our $VERSION = do { my @v = ('1.1.1' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
  +our $VERSION = do { my @v = ('1.1.2' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
   
   #   API inheritance
   our @ISA = qw(Exporter);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_vers.h
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 uuid_vers.h
  --- ossp-pkg/uuid/uuid_vers.h	18 Nov 2004 15:59:52 -0000	1.12
  +++ ossp-pkg/uuid/uuid_vers.h	13 Jan 2005 10:37:36 -0000	1.13
  @@ -8,7 +8,7 @@
   #ifndef _UUID_VERS_H_
   #define _UUID_VERS_H_
   
  -#define _UUID_VERSION 0x101201
  +#define _UUID_VERSION 0x101202
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _UUID_VERS_H_AS_HEADER_
   
   _uuid_version_t _uuid_version = {
  -    0x101201,
  -    "1.1.1",
  -    "1.1.1 (18-Nov-2004)",
  -    "This is OSSP uuid, Version 1.1.1 (18-Nov-2004)",
  -    "OSSP uuid 1.1.1 (18-Nov-2004)",
  -    "OSSP uuid/1.1.1",
  -    "@(#)OSSP uuid 1.1.1 (18-Nov-2004)",
  -    "$Id: OSSP uuid 1.1.1 (18-Nov-2004) $"
  +    0x101202,
  +    "1.1.2",
  +    "1.1.2 (13-Jan-2005)",
  +    "This is OSSP uuid, Version 1.1.2 (13-Jan-2005)",
  +    "OSSP uuid 1.1.2 (13-Jan-2005)",
  +    "OSSP uuid/1.1.2",
  +    "@(#)OSSP uuid 1.1.2 (13-Jan-2005)",
  +    "$Id: OSSP uuid 1.1.2 (13-Jan-2005) $"
   };
   
   #endif /* _UUID_VERS_H_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 13 11:43:33 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id CCE0F764CE; Thu, 13 Jan 2005 11:43:32 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/ index.wml ossp-web/pkg/lib/uuid/ index.w...
Message-Id: <20050113104332.CCE0F764CE@mail.ossp.org>
Date: Thu, 13 Jan 2005 11:43:32 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   13-Jan-2005 11:43:32
  Branch: HEAD                             Handle: 2005011310433101

  Modified files:
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/uuid   index.wml

  Log:
    release OSSP uuid 1.1.2

  Summary:
    Revision    Changes     Path
    1.97        +1  -1      ossp-web/pkg/lib/index.wml
    1.20        +2  -2      ossp-web/pkg/lib/uuid/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.96 -r1.97 index.wml
  --- ossp-web/pkg/lib/index.wml	19 Dec 2004 19:38:26 -0000	1.96
  +++ ossp-web/pkg/lib/index.wml	13 Jan 2005 10:43:31 -0000	1.97
  @@ -33,7 +33,7 @@
   			done=100 stable=1.1.2 unstable=none>
     <pkg_item name="uuid" longname="OSSP uuid" type="lib"
               desc="Universally Unique Identifier"
  -			done=100 stable=1.1.1 unstable=none>
  +			done=100 stable=1.1.2 unstable=none>
     <pkg_item name="val" longname="OSSP val" type="lib"
               desc="Value Access"
   			done=95 stable=none unstable=0.9.3>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/uuid/index.wml
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 index.wml
  --- ossp-web/pkg/lib/uuid/index.wml	18 Nov 2004 16:06:11 -0000	1.19
  +++ ossp-web/pkg/lib/uuid/index.wml	13 Jan 2005 10:43:32 -0000	1.20
  @@ -44,7 +44,7 @@
   
   <pkg_status
       name="uuid" assign="rse"
  -    stable="1.1.1"    stable_date="18-Nov-2004"
  +    stable="1.1.2"    stable_date="13-Jan-2005"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -55,7 +55,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/uuid/
       directory=$(FTP_ROOT_DIR)/pkg/lib/uuid/
       files="uuid-[0-9.]*.tar.gz" 
  -	stable="uuid-1\.1\.1\.tar\.gz" unstable="none">
  +	stable="uuid-1\.1\.2\.tar\.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 13 12:13:00 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E3613764CE; Thu, 13 Jan 2005 12:12:59 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/svs/ ChangeLog Makefile.in svs.pod svs.sh
Message-Id: <20050113111259.E3613764CE@mail.ossp.org>
Date: Thu, 13 Jan 2005 12:12:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Jan-2005 12:12:59
  Branch: HEAD                             Handle: 2005011311125800

  Modified files:
    ossp-pkg/svs            ChangeLog Makefile.in svs.pod svs.sh

  Log:
    1. Add a convenient "svs status" command which output a "cvs update"
    style list of files and their status (modification or conflict).
    
    2. Remove *.rej files on "svs vi" if a modification was done.
    
    3. Fix "make uninstall" procedure.

  Summary:
    Revision    Changes     Path
    1.4         +10 -0      ossp-pkg/svs/ChangeLog
    1.2         +2  -1      ossp-pkg/svs/Makefile.in
    1.2         +10 -2      ossp-pkg/svs/svs.pod
    1.4         +40 -0      ossp-pkg/svs/svs.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ChangeLog
  --- ossp-pkg/svs/ChangeLog	17 Dec 2004 09:52:08 -0000	1.3
  +++ ossp-pkg/svs/ChangeLog	13 Jan 2005 11:12:58 -0000	1.4
  @@ -10,6 +10,16 @@
   
     Changes between 1.0.0 and 1.0.1 (14-Dec-2004 to 16-Dec-2004):
   
  +    *) Add a convenient "svs status" command which output a "cvs update"
  +       style list of files and their status (modification or conflict).
  +       [Ralf S. Engelschall]
  +
  +    *) Remove *.rej files on "svs vi" if a modification was done.
  +       [Ralf S. Engelschall]
  +
  +    *) Fix "make uninstall" procedure.
  +       [Ralf S. Engelschall]
  +
       *) When editing a file look for corresponding .rej file
          and if found and the editor is Vim, open both files. 
          [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 Makefile.in
  --- ossp-pkg/svs/Makefile.in	14 Dec 2004 19:18:37 -0000	1.1
  +++ ossp-pkg/svs/Makefile.in	13 Jan 2005 11:12:58 -0000	1.2
  @@ -67,9 +67,10 @@
   
   #   perform uninstallation procedure
   uninstall:
  -	-$(RM) $(DESTDIR)$(mandir)/bin/svs
  +	-$(RM) $(DESTDIR)$(bindir)/svs
   	-$(RM) $(DESTDIR)$(mandir)/man1/svs.1
   	-$(RMDIR) $(DESTDIR)$(mandir)/man1 >/dev/null 2>&1 || $(TRUE)
  +	-$(RMDIR) $(DESTDIR)$(mandir) >/dev/null 2>&1 || $(TRUE)
   	-$(RMDIR) $(DESTDIR)$(bindir) >/dev/null 2>&1 || $(TRUE)
   	-$(RMDIR) $(DESTDIR)$(prefix) >/dev/null 2>&1 || $(TRUE)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/svs.pod
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 svs.pod
  --- ossp-pkg/svs/svs.pod	14 Dec 2004 19:18:37 -0000	1.1
  +++ ossp-pkg/svs/svs.pod	13 Jan 2005 11:12:58 -0000	1.2
  @@ -43,9 +43,11 @@
   
   =item B<svs> vi I<file> [...]
   
  -=item B<svs> diff I<file>|I<dir> [...]
  +=item B<svs> diff [I<file>|I<dir> [...]]
  +
  +=item B<svs> backout [I<file>|I<dir> [...]]
   
  -=item B<svs> backout I<file>|I<dir> [...]
  +=item B<svs> status [I<file>|I<dir> [...]]
   
   =back
   
  @@ -118,6 +120,12 @@
   This backouts all changes made to files where an I<file>C<.orig> exists.
   The I<file>C<.orig> files are removed, too.
   
  +=item B<svs> status [I<file>|I<dir> [...]]
  +
  +This shows a short status of files I<file> where an I<file>C<.orig> or I<file>C<.rej> file exists.
  +A prefix of "C<M>" indicates a modification (a I<file>C<.orig> exists).
  +A prefix of "C<C>" indicates a conflict (a I<file>C<.rej> exists).
  +
   =back
   
   =head1 HISTORY
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/svs.sh
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 svs.sh
  --- ossp-pkg/svs/svs.sh	17 Dec 2004 09:52:08 -0000	1.3
  +++ ossp-pkg/svs/svs.sh	13 Jan 2005 11:12:58 -0000	1.4
  @@ -33,6 +33,7 @@
       echo "Usage: svs vi <file> [...]"
       echo "Usage: svs diff [<file>|<dir> [...]]"
       echo "Usage: svs backout [<file>|<dir> [...]]"
  +    echo "Usage: svs status [<file>|<dir> [...]]"
       exit 1
   fi
   
  @@ -74,6 +75,9 @@
                   rm -f $file.orig
               else
                   echo "svs: changes made (preserving original)"
  +                if [ -f $file.rej ]; then
  +                    rm -f $file.rej
  +                fi
               fi
           done
           ;;
  @@ -177,6 +181,42 @@
               fi
           done
           ;;
  +
  +    s|st|sta|stat|statu|status )
  +        ##
  +        ##  CHANGE STATUS
  +        ##
  +
  +        #   determine file list
  +        if [ $# -eq 0 ]; then
  +            set -- .
  +        fi
  +        files=""
  +        for file in "$@"; do
  +            if [ -d $file ]; then
  +                for f in `find $file -type f \( -name "*.orig" -or -name "*.rej" \) -print | sort`; do
  +                    files="$files $f"
  +                done
  +            elif [ -f $file ]; then
  +                files="$files $file"
  +            else
  +                echo "svs:ERROR: \"$file\" neither regular file nor directory" 1>&2
  +                exit 1
  +            fi
  +        done
  +
  +        #   show status on files
  +        for file in $files; do
  +            file=`echo "$file" | sed -e 's;^\./;;' -e 's;/\./;/;g' -e 's;\([^/][^/]*\)/\.\.;;g' -e 's;//*;/;g'`
  +            prefix="?"
  +            case "$file" in
  +                *.orig ) prefix="M" ;;
  +                *.rej  ) prefix="C" ;;
  +            esac
  +            echo "$prefix $file"
  +        done
  +        ;;
  +
       * )
           echo "svs:ERROR: invalid command \"$cmd\"" 1>&2
           exit 1
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 13 12:14:02 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A810B764CE; Thu, 13 Jan 2005 12:14:02 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/svs/ ChangeLog Makefile.in README configure.ac de...
Message-Id: <20050113111402.A810B764CE@mail.ossp.org>
Date: Thu, 13 Jan 2005 12:14:02 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Jan-2005 12:14:02
  Branch: HEAD                             Handle: 2005011311140100

  Modified files:
    ossp-pkg/svs            ChangeLog Makefile.in README configure.ac
                            devtool.func svs.pod svs.sh

  Log:
    Adjust copyright messages for new year 2005

  Summary:
    Revision    Changes     Path
    1.5         +4  -1      ossp-pkg/svs/ChangeLog
    1.3         +2  -2      ossp-pkg/svs/Makefile.in
    1.2         +2  -2      ossp-pkg/svs/README
    1.2         +4  -4      ossp-pkg/svs/configure.ac
    1.2         +1  -1      ossp-pkg/svs/devtool.func
    1.3         +2  -2      ossp-pkg/svs/svs.pod
    1.5         +2  -2      ossp-pkg/svs/svs.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ChangeLog
  --- ossp-pkg/svs/ChangeLog	13 Jan 2005 11:12:58 -0000	1.4
  +++ ossp-pkg/svs/ChangeLog	13 Jan 2005 11:14:01 -0000	1.5
  @@ -8,7 +8,10 @@
   
     ChangeLog
   
  -  Changes between 1.0.0 and 1.0.1 (14-Dec-2004 to 16-Dec-2004):
  +  Changes between 1.0.0 and 1.0.1 (14-Dec-2004 to 13-Jan-2005):
  +
  +    *) Adjust copyright messages for new year 2005.
  +       [Ralf S. Engelschall]
   
       *) Add a convenient "svs status" command which output a "cvs update"
          style list of files and their status (modification or conflict).
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 Makefile.in
  --- ossp-pkg/svs/Makefile.in	13 Jan 2005 11:12:58 -0000	1.2
  +++ ossp-pkg/svs/Makefile.in	13 Jan 2005 11:14:01 -0000	1.3
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP svs -- Stupid/Silly/Simple Versioning System
  -##  Copyright (c) 2003-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2003-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP svs, a stupid/silly/simple versioning
   ##  system which can found at http://www.ossp.org/pkg/tool/svs/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/README
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 README
  --- ossp-pkg/svs/README	14 Dec 2004 19:18:37 -0000	1.1
  +++ ossp-pkg/svs/README	13 Jan 2005 11:14:01 -0000	1.2
  @@ -17,8 +17,8 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2003-2004 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2003-2004 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
   
     This file is part of OSSP svs, a stupid/silly/simple versioning
     system which can found at http://www.ossp.org/pkg/tool/svs/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/configure.ac
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 configure.ac
  --- ossp-pkg/svs/configure.ac	14 Dec 2004 19:18:37 -0000	1.1
  +++ ossp-pkg/svs/configure.ac	13 Jan 2005 11:14:01 -0000	1.2
  @@ -1,7 +1,7 @@
   dnl ##
   dnl ##  OSSP svs -- Stupid/Silly/Simple Versioning System
  -dnl ##  Copyright (c) 2003-2004 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2003-2004 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
   dnl ##
   dnl ##  This file is part of OSSP svs, a stupid/silly/simple versioning
   dnl ##  system which can found at http://www.ossp.org/pkg/tool/svs/
  @@ -34,8 +34,8 @@
   
   SVS_VERSION_STR="`./shtool version -l txt -d long VERSION`"
   ./shtool echo -e "Configuring %BOSSP svs%b (Stupid/Silly/Simple Versioning System), version %B${SVS_VERSION_STR}%b"
  -echo "Copyright (c) 2003-2004 Ralf S. Engelschall <rse@engelschall.com>"
  -echo "Copyright (c) 2003-2004 The OSSP Project <http://www.ossp.org/>"
  +echo "Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>"
  +echo "Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>"
   AC_SUBST(SVS_VERSION_STR)
   
   AC_PREFIX_DEFAULT(/usr/local)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/devtool.func
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.func
  --- ossp-pkg/svs/devtool.func	14 Dec 2004 19:18:37 -0000	1.1
  +++ ossp-pkg/svs/devtool.func	13 Jan 2005 11:14:01 -0000	1.2
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com> 
   ##
   
   devtool_require () {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/svs.pod
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 svs.pod
  --- ossp-pkg/svs/svs.pod	13 Jan 2005 11:12:58 -0000	1.2
  +++ ossp-pkg/svs/svs.pod	13 Jan 2005 11:14:01 -0000	1.3
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP svs -- Stupid/Silly/Simple Versioning System
  -##  Copyright (c) 2003-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2003-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP svs, a stupid/silly/simple versioning
   ##  system which can found at http://www.ossp.org/pkg/tool/svs/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/svs.sh
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 svs.sh
  --- ossp-pkg/svs/svs.sh	13 Jan 2005 11:12:58 -0000	1.4
  +++ ossp-pkg/svs/svs.sh	13 Jan 2005 11:14:01 -0000	1.5
  @@ -1,8 +1,8 @@
   #!/bin/sh
   ##
   ##  OSSP svs -- Stupid/Silly/Simple Versioning System
  -##  Copyright (c) 2003-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2003-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP svs, a stupid/silly/simple versioning
   ##  system which can found at http://www.ossp.org/pkg/tool/svs/
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 13 12:15:03 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 99B40764CE; Thu, 13 Jan 2005 12:15:03 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/svs/ svs.sh
Message-Id: <20050113111503.99B40764CE@mail.ossp.org>
Date: Thu, 13 Jan 2005 12:15:03 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Jan-2005 12:15:03
  Branch: HEAD                             Handle: 2005011311150300

  Modified files:
    ossp-pkg/svs            svs.sh

  Log:
    ops, output base filename only

  Summary:
    Revision    Changes     Path
    1.6         +2  -1      ossp-pkg/svs/svs.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/svs.sh
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 svs.sh
  --- ossp-pkg/svs/svs.sh	13 Jan 2005 11:14:01 -0000	1.5
  +++ ossp-pkg/svs/svs.sh	13 Jan 2005 11:15:03 -0000	1.6
  @@ -208,12 +208,13 @@
           #   show status on files
           for file in $files; do
               file=`echo "$file" | sed -e 's;^\./;;' -e 's;/\./;/;g' -e 's;\([^/][^/]*\)/\.\.;;g' -e 's;//*;/;g'`
  +            base=`echo "$file" | sed -e 's;\.orig$;;' -e 's;\.rej$;;'`
               prefix="?"
               case "$file" in
                   *.orig ) prefix="M" ;;
                   *.rej  ) prefix="C" ;;
               esac
  -            echo "$prefix $file"
  +            echo "$prefix $base"
           done
           ;;
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 13 12:16:07 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B20A3764CE; Thu, 13 Jan 2005 12:16:07 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/svs/ README VERSION
Message-Id: <20050113111607.B20A3764CE@mail.ossp.org>
Date: Thu, 13 Jan 2005 12:16:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Jan-2005 12:16:07
  Branch: HEAD                             Handle: 2005011311160700

  Modified files:
    ossp-pkg/svs            README VERSION

  Log:
    bump version before release

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/svs/README
    1.2         +1  -1      ossp-pkg/svs/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/README
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 README
  --- ossp-pkg/svs/README	13 Jan 2005 11:14:01 -0000	1.2
  +++ ossp-pkg/svs/README	13 Jan 2005 11:16:07 -0000	1.3
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/ \_/ |___/
   
     OSSP svs - Stupid/Silly/Simple Versioning System
  -  Version 1.0.0
  +  Version 1.0.1 (13-Jan-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/VERSION
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 VERSION
  --- ossp-pkg/svs/VERSION	14 Dec 2004 19:18:37 -0000	1.1
  +++ ossp-pkg/svs/VERSION	13 Jan 2005 11:16:07 -0000	1.2
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP svs (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP svs, Version 1.0.0 (14-Dec-2004)
  +  This is OSSP svs, Version 1.0.1 (13-Jan-2005)
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 13 12:18:37 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 432D2764CE; Thu, 13 Jan 2005 12:18:37 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/tool/ index.wml ossp-w...
Message-Id: <20050113111837.432D2764CE@mail.ossp.org>
Date: Thu, 13 Jan 2005 12:18:37 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   13-Jan-2005 12:18:37
  Branch: HEAD                             Handle: 2005011311183501

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/svs   index.wml

  Log:
    release OSSP svs 1.0.1

  Summary:
    Revision    Changes     Path
    1.116       +2  -0      ossp-web/new/news.txt
    1.45        +1  -1      ossp-web/pkg/tool/index.wml
    1.2         +2  -2      ossp-web/pkg/tool/svs/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.115 -r1.116 news.txt
  --- ossp-web/new/news.txt	12 Jan 2005 20:52:27 -0000	1.115
  +++ ossp-web/new/news.txt	13 Jan 2005 11:18:35 -0000	1.116
  @@ -1,3 +1,5 @@
  +13-Jan-2005: Released T<OSSP svs> 1.0.1
  +13-Jan-2005: Released L<OSSP uuid> 1.1.2
   12-Jan-2005: Released T<OSSP shiela> 1.1.5
   26-Dec-2004: Released T<OSSP flow2rrd> 0.9.1
   26-Dec-2004: Released T<OSSP flow2rrd> 0.9.0
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.44 -r1.45 index.wml
  --- ossp-web/pkg/tool/index.wml	12 Jan 2005 20:52:28 -0000	1.44
  +++ ossp-web/pkg/tool/index.wml	13 Jan 2005 11:18:36 -0000	1.45
  @@ -23,7 +23,7 @@
   	        done=100 stable="1.1.5" unstable="none">
     <pkg_item name="svs" longname="OSSP svs" type="tool"
               desc="Stupid/Silly/Simple Versioning System"
  -	        done=100 stable="1.0.0" unstable="none">
  +	        done=100 stable="1.0.1" unstable="none">
     <pkg_item name="eperl" longname="OSSP eperl" type="tool"
               desc="Embedded Perl Language"
   	        done=100 stable="2.2.14" unstable="none">
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/svs/index.wml
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/tool/svs/index.wml	14 Dec 2004 19:34:18 -0000	1.1
  +++ ossp-web/pkg/tool/svs/index.wml	13 Jan 2005 11:18:36 -0000	1.2
  @@ -20,7 +20,7 @@
   <h2>Status</h2>
   
   <pkg_status
  -    stable="1.0.0" stable_date="14-Dec-2004"
  +    stable="1.0.1" stable_date="13-Jan-2005"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -31,7 +31,7 @@
       url=$(FTP_ROOT_URL)/pkg/tool/svs/
       directory=$(FTP_ROOT_DIR)/pkg/tool/svs/
       files="svs-*.tar.gz" 
  -	stable="svs-1.0.0.tar.gz" unstable="none">
  +	stable="svs-1.0.1.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 20 21:29:09 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D54D076520; Thu, 20 Jan 2005 21:29:08 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var/ ChangeLog Makefile.in README aclocal.m4 conf...
Message-Id: <20050120202908.D54D076520@mail.ossp.org>
Date: Thu, 20 Jan 2005 21:29:08 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Jan-2005 21:29:08
  Branch: HEAD                             Handle: 2005012020290600

  Modified files:
    ossp-pkg/var            ChangeLog Makefile.in README aclocal.m4
                            configure.ac ts.c ts.h var-config.in
                            var-config.pod var.c var.h var.pod var_play.c
                            var_test.c

  Log:
    Bumped year in copyright messages for new year 2005

  Summary:
    Revision    Changes     Path
    1.15        +5  -0      ossp-pkg/var/ChangeLog
    1.11        +3  -3      ossp-pkg/var/Makefile.in
    1.10        +3  -3      ossp-pkg/var/README
    1.14        +3  -3      ossp-pkg/var/aclocal.m4
    1.16        +3  -3      ossp-pkg/var/configure.ac
    1.7         +3  -3      ossp-pkg/var/ts.c
    1.4         +3  -3      ossp-pkg/var/ts.h
    1.9         +3  -3      ossp-pkg/var/var-config.in
    1.9         +3  -3      ossp-pkg/var/var-config.pod
    1.106       +3  -3      ossp-pkg/var/var.c
    1.33        +3  -3      ossp-pkg/var/var.h
    1.39        +3  -3      ossp-pkg/var/var.pod
    1.8         +3  -3      ossp-pkg/var/var_play.c
    1.52        +3  -3      ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 ChangeLog
  --- ossp-pkg/var/ChangeLog	31 Oct 2004 11:59:56 -0000	1.14
  +++ ossp-pkg/var/ChangeLog	20 Jan 2005 20:29:06 -0000	1.15
  @@ -11,6 +11,11 @@
     This is a list of all source changes to OSSP var.
     For less details please have a look at the NEWS file.
   
  +  Changes between 1.1.2 and 1.1.3 (31-Oct-2004 to xx-Jan-2005)
  +
  +   o Bumped year in copyright messages for new year 2005.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
     Changes between 1.1.1 and 1.1.2 (12-Sep-2004 to 31-Oct-2004)
   
      o Cleanup and extend the Unix manual pages var(3) and var-config(1).
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 Makefile.in
  --- ossp-pkg/var/Makefile.in	4 Apr 2004 08:07:34 -0000	1.10
  +++ ossp-pkg/var/Makefile.in	20 Jan 2005 20:29:06 -0000	1.11
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP var -- Variable Expansion
  -##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2001-2004 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001-2004 Cable & Wireless (http://www.cw.com/)
  +##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2005 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2001-2005 Cable & Wireless (http://www.cw.com/)
   ##
   ##  This file is part of OSSP var, a variable expansion
   ##  library which can be found at http://www.ossp.org/pkg/lib/var/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/README
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 README
  --- ossp-pkg/var/README	31 Oct 2004 11:59:56 -0000	1.9
  +++ ossp-pkg/var/README	20 Jan 2005 20:29:06 -0000	1.10
  @@ -27,9 +27,9 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   
     This file is part of OSSP var, a variable expansion
     library which can be found at http://www.ossp.org/pkg/lib/var/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 aclocal.m4
  --- ossp-pkg/var/aclocal.m4	4 Apr 2004 10:00:05 -0000	1.13
  +++ ossp-pkg/var/aclocal.m4	20 Jan 2005 20:29:06 -0000	1.14
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP var -- Variable Expansion
  -dnl ##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +dnl ##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   dnl ##
   dnl ##  This file is part of OSSP var, a variable expansion
   dnl ##  library which can be found at http://www.ossp.org/pkg/lib/var/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/configure.ac
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 configure.ac
  --- ossp-pkg/var/configure.ac	4 Apr 2004 08:07:34 -0000	1.15
  +++ ossp-pkg/var/configure.ac	20 Jan 2005 20:29:06 -0000	1.16
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP var -- Variable Expansion
  -dnl ##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2001-2004 The OSSP Project (http://www.ossp.org/)
  -dnl ##  Copyright (c) 2001-2004 Cable & Wireless (http://www.cw.com/)
  +dnl ##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2005 The OSSP Project (http://www.ossp.org/)
  +dnl ##  Copyright (c) 2001-2005 Cable & Wireless (http://www.cw.com/)
   dnl ##
   dnl ##  This file is part of OSSP var, a variable expansion
   dnl ##  library which can be found at http://www.ossp.org/pkg/lib/var/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/ts.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ts.c
  --- ossp-pkg/var/ts.c	4 Apr 2004 08:07:34 -0000	1.6
  +++ ossp-pkg/var/ts.c	20 Jan 2005 20:29:06 -0000	1.7
  @@ -1,8 +1,8 @@
   /*
   **  OSSP ts - Test Suite Library
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP ts, a small test suite library which
   **  can be found at http://www.ossp.org/pkg/lib/ts/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/ts.h
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ts.h
  --- ossp-pkg/var/ts.h	4 Apr 2004 08:07:34 -0000	1.3
  +++ ossp-pkg/var/ts.h	20 Jan 2005 20:29:06 -0000	1.4
  @@ -1,8 +1,8 @@
   /*
   **  OSSP ts - Test Suite Library
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP ts, a small test suite library which
   **  can be found at http://www.ossp.org/pkg/lib/ts/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var-config.in
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 var-config.in
  --- ossp-pkg/var/var-config.in	29 Oct 2004 19:29:12 -0000	1.8
  +++ ossp-pkg/var/var-config.in	20 Jan 2005 20:29:06 -0000	1.9
  @@ -1,9 +1,9 @@
   #!/bin/sh
   ##
   ##  OSSP var -- Variable Expansion
  -##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2001-2004 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001-2004 Cable & Wireless (http://www.cw.com/)
  +##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2005 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2001-2005 Cable & Wireless (http://www.cw.com/)
   ##
   ##  This file is part of OSSP var, a variable expansion
   ##  library which can be found at http://www.ossp.org/pkg/lib/var/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var-config.pod
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 var-config.pod
  --- ossp-pkg/var/var-config.pod	29 Oct 2004 20:57:23 -0000	1.8
  +++ ossp-pkg/var/var-config.pod	20 Jan 2005 20:29:06 -0000	1.9
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP var -- Variable Expansion
  -##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2001-2004 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001-2004 Cable & Wireless (http://www.cw.com/)
  +##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2005 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2001-2005 Cable & Wireless (http://www.cw.com/)
   ##
   ##  This file is part of OSSP var, a variable expansion
   ##  library which can be found at http://www.ossp.org/pkg/lib/var/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var.c
  ============================================================================
  $ cvs diff -u -r1.105 -r1.106 var.c
  --- ossp-pkg/var/var.c	29 Oct 2004 19:42:20 -0000	1.105
  +++ ossp-pkg/var/var.c	20 Jan 2005 20:29:06 -0000	1.106
  @@ -1,8 +1,8 @@
   /*
   **  OSSP var - Variable Expansion
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2004 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2004 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2005 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP var, a variable expansion
   **  library which can be found at http://www.ossp.org/pkg/lib/var/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var.h
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 var.h
  --- ossp-pkg/var/var.h	29 Oct 2004 19:42:20 -0000	1.32
  +++ ossp-pkg/var/var.h	20 Jan 2005 20:29:06 -0000	1.33
  @@ -1,8 +1,8 @@
   /*
   **  OSSP var - Variable Expansion
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2004 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2004 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2005 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP var, a variable expansion
   **  library which can be found at http://www.ossp.org/pkg/lib/var/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var.pod
  ============================================================================
  $ cvs diff -u -r1.38 -r1.39 var.pod
  --- ossp-pkg/var/var.pod	29 Oct 2004 20:41:18 -0000	1.38
  +++ ossp-pkg/var/var.pod	20 Jan 2005 20:29:06 -0000	1.39
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP var -- Variable Expansion
  -##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2001-2004 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001-2004 Cable & Wireless (http://www.cw.com/)
  +##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2005 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2001-2005 Cable & Wireless (http://www.cw.com/)
   ##
   ##  This file is part of OSSP var, an extensible data serialization
   ##  library which can be found at http://www.ossp.org/pkg/lib/var/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var_play.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 var_play.c
  --- ossp-pkg/var/var_play.c	4 Apr 2004 08:07:34 -0000	1.7
  +++ ossp-pkg/var/var_play.c	20 Jan 2005 20:29:06 -0000	1.8
  @@ -1,8 +1,8 @@
   /*
   **  OSSP var -- Variable Expansion
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2004 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2004 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2005 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP var, a variable expansion
   **  library which can be found at http://www.ossp.org/pkg/lib/var/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var_test.c
  ============================================================================
  $ cvs diff -u -r1.51 -r1.52 var_test.c
  --- ossp-pkg/var/var_test.c	29 Oct 2004 19:42:20 -0000	1.51
  +++ ossp-pkg/var/var_test.c	20 Jan 2005 20:29:06 -0000	1.52
  @@ -1,8 +1,8 @@
   /*
   **  OSSP var -- Variable Expansion
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2004 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2004 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 The OSSP Project (http://www.ossp.org/)
  +**  Copyright (c) 2001-2005 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP var, a variable expansion
   **  library which can be found at http://www.ossp.org/pkg/lib/var/.
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jan 22 19:06:27 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A52AB76402; Sat, 22 Jan 2005 19:06:27 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.pod
Message-Id: <20050122180627.A52AB76402@mail.ossp.org>
Date: Sat, 22 Jan 2005 19:06:27 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Jan-2005 19:06:27
  Branch: HEAD                             Handle: 2005012218062700

  Modified files:
    ossp-pkg/uuid           uuid.pod

  Log:
    reference the latest available UUID draft

  Summary:
    Revision    Changes     Path
    1.23        +3  -3      ossp-pkg/uuid/uuid.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	31 Dec 2004 19:20:34 -0000	1.22
  +++ ossp-pkg/uuid/uuid.pod	22 Jan 2005 18:06:27 -0000	1.23
  @@ -417,9 +417,9 @@
   
   B<A UUID URN Namespace>,
   P. Leach, M. Mealling, R. Salz,
  -IETF Internet Draft draft-mealling-uuid-urn-02,
  -January 2004, 31 pages,
  -http://www.ietf.org/internet-drafts/draft-mealling-uuid-urn-03.txt
  +IETF Internet Draft draft-mealling-uuid-urn-05,
  +December 2004, 31 pages,
  +http://www.ietf.org/internet-drafts/draft-mealling-uuid-urn-05.txt
   
   =item
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jan 22 19:55:57 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A8D3A76434; Sat, 22 Jan 2005 19:55:57 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.pod
Message-Id: <20050122185557.A8D3A76434@mail.ossp.org>
Date: Sat, 22 Jan 2005 19:55:57 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Jan-2005 19:55:57
  Branch: HEAD                             Handle: 2005012218555700

  Modified files:
    ossp-pkg/uuid           uuid.pod

  Log:
    reference new ISO/IEC 9834-8:2004 / ITU-T Rec. X.667, 2004 standard

  Summary:
    Revision    Changes     Path
    1.24        +11 -1      ossp-pkg/uuid/uuid.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	22 Jan 2005 18:06:27 -0000	1.23
  +++ ossp-pkg/uuid/uuid.pod	22 Jan 2005 18:55:57 -0000	1.24
  @@ -400,11 +400,21 @@
   
   =item
   
  -B<Information technology -- Open Systems Interconnection (OSI) -- Remote Procedure Call (RPC)>,
  +Information technology -- Open Systems Interconnection (OSI),
  +B<Remote Procedure Call (RPC)>,
   ISO/IEC 11578:1996,
   August 2001, 570 pages, (CHF 340,00),
   http://www.iso.ch/cate/d2229.html
   
  +=item 
  +
  +Information technology -- Open Systems Interconnection (OSI),
  +B<Procedures for the operation of OSI Registration Authorities:
  +Generation and Registration of Universally Unique Identifiers (UUIDs)
  +and their Use as ASN.1 Object Identifier Components>,
  +ISO/IEC 9834-8:2004 / ITU-T Rec. X.667, 2004,
  +December 2004, 25 pages.
  +
   =item
   
   B<HTTP Extensions for Distributed Authoring (WebDAV)>,
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jan 23 12:26:36 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D8558764A9; Sun, 23 Jan 2005 12:26:35 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ TODO
Message-Id: <20050123112635.D8558764A9@mail.ossp.org>
Date: Sun, 23 Jan 2005 12:26:35 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Jan-2005 12:26:35
  Branch: HEAD                             Handle: 2005012311263500

  Modified files:
    ossp-pkg/uuid           TODO

  Log:
    remember two issues

  Summary:
    Revision    Changes     Path
    1.24        +2  -1      ossp-pkg/uuid/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/TODO
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 TODO
  --- ossp-pkg/uuid/TODO	3 Nov 2004 17:08:21 -0000	1.23
  +++ ossp-pkg/uuid/TODO	23 Jan 2005 11:26:35 -0000	1.24
  @@ -14,8 +14,9 @@
     CANDO
     =====
   
  +  - use MD5/SHA1 for further post-processing data in PRNG?
     - getopt_long support for CLI?
  -  - a more sophisticated test suite?!
  +  - a more sophisticated test suite with UUID references?!
     - more platform support in uuid_mac.c?!
     - global memory locking according to standard??
     - persistent/non-volatile state writing according to standard??
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jan 23 12:27:12 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D19D1764A9; Sun, 23 Jan 2005 12:27:12 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ TODO
Message-Id: <20050123112712.D19D1764A9@mail.ossp.org>
Date: Sun, 23 Jan 2005 12:27:12 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Jan-2005 12:27:12
  Branch: HEAD                             Handle: 2005012311271200

  Modified files:
    ossp-pkg/uuid           TODO

  Log:
    remember THL's request

  Summary:
    Revision    Changes     Path
    1.25        +1  -0      ossp-pkg/uuid/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/TODO
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 TODO
  --- ossp-pkg/uuid/TODO	23 Jan 2005 11:26:35 -0000	1.24
  +++ ossp-pkg/uuid/TODO	23 Jan 2005 11:27:12 -0000	1.25
  @@ -14,6 +14,7 @@
     CANDO
     =====
   
  +  - allow to re-create version 1 UUIDs by specifying time, etc.
     - use MD5/SHA1 for further post-processing data in PRNG?
     - getopt_long support for CLI?
     - a more sophisticated test suite with UUID references?!
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jan 23 12:28:54 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7D964764A9; Sun, 23 Jan 2005 12:28:54 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog Makefile.in NEWS README ossp-pkg/...
Message-Id: <20050123112854.7D964764A9@mail.ossp.org>
Date: Sun, 23 Jan 2005 12:28:54 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Jan-2005 12:28:54
  Branch: HEAD                             Handle: 2005012311285103

  Added files:
    ossp-pkg/uuid           uuid_sha1.c uuid_sha1.h
  Modified files:
    ossp-pkg/uuid           ChangeLog Makefile.in NEWS README uuid.c uuid.h.in
                            uuid.pod uuid_cli.c uuid_cli.pod uuid_vers.h
    ossp-pkg/uuid/perl      uuid.pm

  Log:
    Added support for new version 5 UUIDs (name-based, SHA-1)
    according to latest draft-mealling-uuid-urn-05.txt.

  Summary:
    Revision    Changes     Path
    1.68        +6  -0      ossp-pkg/uuid/ChangeLog
    1.26        +8  -3      ossp-pkg/uuid/Makefile.in
    1.3         +6  -1      ossp-pkg/uuid/NEWS
    1.25        +3  -2      ossp-pkg/uuid/README
    1.7         +1  -1      ossp-pkg/uuid/perl/uuid.pm
    1.50        +68 -8      ossp-pkg/uuid/uuid.c
    1.6         +2  -1      ossp-pkg/uuid/uuid.h.in
    1.25        +23 -14     ossp-pkg/uuid/uuid.pod
    1.18        +5  -3      ossp-pkg/uuid/uuid_cli.c
    1.19        +10 -9      ossp-pkg/uuid/uuid_cli.pod
    1.1         +443 -0     ossp-pkg/uuid/uuid_sha1.c
    1.1         +76 -0      ossp-pkg/uuid/uuid_sha1.h
    1.14        +9  -9      ossp-pkg/uuid/uuid_vers.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.67 -r1.68 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	13 Jan 2005 10:37:36 -0000	1.67
  +++ ossp-pkg/uuid/ChangeLog	23 Jan 2005 11:28:51 -0000	1.68
  @@ -11,6 +11,12 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 1.1.2 and 1.2.0 (13-Jan-2005 to xx-Jan-2005)
  +
  +   o Added support for new version 5 UUIDs (name-based, SHA-1)
  +     according to latest draft-mealling-uuid-urn-05.txt.
  +     [Ralf S. Engelschall]
  +
     Changes between 1.1.1 and 1.1.2 (18-Nov-2004 to 13-Jan-2005)
   
      o Fix generation of v3 UUIDs by adding support for 64-bit platforms
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	31 Dec 2004 19:20:34 -0000	1.25
  +++ ossp-pkg/uuid/Makefile.in	23 Jan 2005 11:28:51 -0000	1.26
  @@ -56,7 +56,7 @@
   PERL        = @PERL@
   
   LIB_NAME    = libuuid.la
  -LIB_OBJS    = uuid.lo uuid_md5.lo uuid_prng.lo uuid_mac.lo uuid_ui64.lo uuid_str.lo
  +LIB_OBJS    = uuid.lo uuid_md5.lo uuid_sha1.lo uuid_prng.lo uuid_mac.lo uuid_ui64.lo uuid_str.lo
   
   DCE_NAME    = libuuid_dce.la
   DCE_OBJS    = $(LIB_OBJS) uuid_dce.lo
  @@ -100,9 +100,10 @@
   	@cd perl && $(PERL) Makefile.PL PREFIX=$(prefix) && $(MAKE) $(MFLAGS) all
   	@touch $(PERL_NAME)
   
  -uuid.lo: uuid.c config.h uuid.h uuid_md5.h uuid_prng.h uuid_mac.h uuid_ui64.h uuid_str.h uuid_bm.h uuid_ac.h
  +uuid.lo: uuid.c config.h uuid.h uuid_md5.h uuid_sha1.h uuid_prng.h uuid_mac.h uuid_ui64.h uuid_str.h uuid_bm.h uuid_ac.h
   uuid_mac.lo: uuid_mac.c config.h uuid_mac.h
   uuid_md5.lo: uuid_md5.c uuid_md5.h
  +uuid_sha1.lo: uuid_sha1.c uuid_sha1.h
   uuid_prng.lo: uuid_prng.c uuid_prng.h
   uuid_str.lo: uuid_str.c config.h uuid_str.h
   uuid_ui64.lo: uuid_ui64.c uuid_ui64.h
  @@ -142,8 +143,10 @@
   	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v1 -n 4 -1
   	@echo "==== UUID version 1 (time and node based): 4 subsequent iterations"; \
   	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v1 -n 4
  -	@echo "==== UUID version 3 (name based): 2 times repeated"; \
  +	@echo "==== UUID version 3 (name based, MD5): 2 times repeated"; \
   	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v3 -n 2 ns:URL http://www.ossp.org/
  +	@echo "==== UUID version 5 (name based, SHA-1): 2 times repeated"; \
  +	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v5 -n 2 ns:URL http://www.ossp.org/
   	@echo "==== UUID version 4 (random data based): 4 single iterations"; \
   	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v4 -n 4 -1
   	@echo "==== UUID version 4 (random data based): 4 subsequent iterations"; \
  @@ -153,6 +156,8 @@
   	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -d `$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v1 -m`
   	@echo "==== UUID version 3 generation and decoding"; \
   	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -d `$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v3 ns:URL http://www.ossp.org/`
  +	@echo "==== UUID version 5 generation and decoding"; \
  +	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -d `$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v5 ns:URL http://www.ossp.org/`
   	@echo "==== UUID version 3 generation and decoding"; \
   	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -d `$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v4`
   	-@if [ ".$(WITH_PERL)" = .yes ]; then \
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/NEWS
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 NEWS
  --- ossp-pkg/uuid/NEWS	11 Jan 2004 08:54:18 -0000	1.2
  +++ ossp-pkg/uuid/NEWS	23 Jan 2005 11:28:51 -0000	1.3
  @@ -11,5 +11,10 @@
     This is a list of major changes to OSSP uuid. For more detailed
     change descriptions, please have a look at the ChangeLog file.
   
  -  -NONE-
  +  Changes between 1.1 and 1.2
  +    o Added support for version 5 UUIDs (name-based, SHA-1)
  +  Changes between 1.0 and 1.1
  +    o Added Perl API
  +  Changes between 0.9 and 1.0
  +    o Initial functionality
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 README
  --- ossp-pkg/uuid/README	13 Jan 2005 10:37:36 -0000	1.24
  +++ ossp-pkg/uuid/README	23 Jan 2005 11:28:51 -0000	1.25
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
   
     OSSP uuid - Universally Unique Identifier
  -  Version 1.1.2 (13-Jan-2005)
  +  Version 1.2.0 (23-Jan-2005)
   
     ABSTRACT
   
  @@ -13,7 +13,8 @@
     and corresponding command line interface (CLI) for the generation of
     DCE 1.1 and ISO/IEC 11578:1996 compliant Universally Unique Identifier
     (UUID). It supports DCE 1.1 variant UUIDs of version 1 (time and node
  -  based), version 3 (name based) and version 4 (random number based).
  +  based), version 3 (name based, MD5), version 4 (random number based)
  +  and version 5 (name based, SHA-1).
   
     UUIDs are 128 bit numbers which are intended to have a high likelihood
     of uniqueness over space and time and are computationally difficult
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.pm
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 uuid.pm
  --- ossp-pkg/uuid/perl/uuid.pm	13 Jan 2005 10:37:37 -0000	1.6
  +++ ossp-pkg/uuid/perl/uuid.pm	23 Jan 2005 11:28:54 -0000	1.7
  @@ -41,7 +41,7 @@
   ##
   
   #   API version
  -our $VERSION = do { my @v = ('1.1.2' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
  +our $VERSION = do { my @v = ('1.2.0' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
   
   #   API inheritance
   our @ISA = qw(Exporter);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.49 -r1.50 uuid.c
  --- ossp-pkg/uuid/uuid.c	31 Dec 2004 19:20:34 -0000	1.49
  +++ ossp-pkg/uuid/uuid.c	23 Jan 2005 11:28:51 -0000	1.50
  @@ -45,6 +45,7 @@
   #include "uuid.h"
   #include "uuid_vers.h"
   #include "uuid_md5.h"
  +#include "uuid_sha1.h"
   #include "uuid_prng.h"
   #include "uuid_mac.h"
   #include "uuid_ui64.h"
  @@ -83,6 +84,7 @@
       uuid_obj_t     obj;                       /* inlined UUID object */
       prng_t        *prng;                      /* RPNG sub-object */
       md5_t         *md5;                       /* MD5 sub-object */
  +    sha1_t        *sha1;                      /* SHA-1 sub-object */
       uuid_uint8_t   mac[IEEE_MAC_OCTETS];      /* pre-determined MAC address */
       struct timeval time_last;                 /* last retrieved timestamp */
       unsigned long  time_seq;                  /* last timestamp sequence counter */
  @@ -107,6 +109,8 @@
           return UUID_RC_INT;
       if (md5_create(&(*uuid)->md5) != MD5_RC_OK)
           return UUID_RC_INT;
  +    if (sha1_create(&(*uuid)->sha1) != SHA1_RC_OK)
  +        return UUID_RC_INT;
   
       /* resolve MAC address for insertion into node field of UUIDs */
       if (!mac_address((unsigned char *)((*uuid)->mac), sizeof((*uuid)->mac))) {
  @@ -129,9 +133,10 @@
       if (uuid == NULL)
           return UUID_RC_ARG;
   
  -    /* destroy PRNG and MD5 sub-objects */
  +    /* destroy PRNG, MD5 and SHA-1 sub-objects */
       prng_destroy(uuid->prng);
       md5_destroy(uuid->md5);
  +    sha1_destroy(uuid->sha1);
   
       /* free UUID object */
       free(uuid);
  @@ -443,8 +448,9 @@
       const char *desc;
   } uuid_dectab_version[] = {
       { 1, "time and node based" },
  -    { 3, "name based" },
  -    { 4, "random data based" }
  +    { 3, "name based, MD5" },
  +    { 4, "random data based" },
  +    { 5, "name based, SHA-1" }
   };
   
   /* INTERNAL: dump UUID object as descriptive text */
  @@ -569,13 +575,15 @@
           /* decode anything else as hexadecimal byte-string only */
   
           /* determine annotational hint */
  -        content = "not decipherable, because unknown UUID version";
  +        content = "not decipherable: unknown UUID version";
           if (isnil)
  -            content = "special case of DCE 1.1 Nil UUID";
  +            content = "special case: DCE 1.1 Nil UUID";
           else if (tmp16 == 3)
  -            content = "not decipherable, because message digest only";
  +            content = "not decipherable: MD5 message digest only";
           else if (tmp16 == 4)
  -            content = "no semantics, because random data only";
  +            content = "no semantics: random data only";
  +        else if (tmp16 == 5)
  +            content = "not decipherable: truncated SHA-1 message digest only";
   
           /* pack UUID into binary representation */
           tmp_ptr = (void *)&tmp_bin;
  @@ -852,7 +860,7 @@
       return UUID_RC_OK;
   }
   
  -/* INTERNAL: generate UUID version 3: name based */
  +/* INTERNAL: generate UUID version 3: name based with MD5 */
   static uuid_rc_t uuid_make_v3(uuid_t *uuid, unsigned int mode, va_list ap)
   {
       char *str;
  @@ -909,6 +917,56 @@
       return UUID_RC_OK;
   }
   
  +/* INTERNAL: generate UUID version 5: name based with SHA-1 */
  +static uuid_rc_t uuid_make_v5(uuid_t *uuid, unsigned int mode, va_list ap)
  +{
  +    char *str;
  +    uuid_t *uuid_ns;
  +    uuid_uint8_t uuid_buf[UUID_LEN_BIN];
  +    void *uuid_ptr;
  +    size_t uuid_len;
  +    uuid_uint8_t sha1_buf[SHA1_LEN_BIN];
  +    void *sha1_ptr;
  +
  +    /* determine namespace UUID and name string arguments */
  +    if ((uuid_ns = (uuid_t *)va_arg(ap, void *)) == NULL)
  +        return UUID_RC_ARG;
  +    if ((str = (char *)va_arg(ap, char *)) == NULL)
  +        return UUID_RC_ARG;
  +
  +    /* initialize SHA-1 context */
  +    if (sha1_init(uuid->sha1) != MD5_RC_OK)
  +        return UUID_RC_MEM;
  +
  +    /* load the namespace UUID into SHA-1 context */
  +    uuid_ptr = (void *)&uuid_buf;
  +    uuid_len = sizeof(uuid_buf);
  +    uuid_export(uuid_ns, UUID_FMT_BIN, &uuid_ptr, &uuid_len);
  +    sha1_update(uuid->sha1, uuid_buf, uuid_len);
  +
  +    /* load the argument name string into SHA-1 context */
  +    sha1_update(uuid->sha1, str, strlen(str));
  +
  +    /* store SHA-1 result into UUID
  +       (requires SHA1_LEN_BIN space, but UUID_LEN_BIN space is available
  +       only, so use a temporary buffer to store SHA-1 results and then
  +       use lower part only according to standard */
  +    sha1_ptr = (void *)sha1_buf;
  +    sha1_store(uuid->sha1, &sha1_ptr, NULL);
  +    uuid_ptr = (void *)&(uuid->obj);
  +    memcpy(uuid_ptr, sha1_ptr, UUID_LEN_BIN);
  +
  +    /* fulfill requirement of standard and convert UUID data into
  +       local/host byte order (this uses fact that uuid_import_bin() is
  +       able to operate in-place!) */
  +    uuid_import(uuid, UUID_FMT_BIN, (void *)&(uuid->obj), UUID_LEN_BIN);
  +
  +    /* brand UUID with version and variant */
  +    uuid_brand(uuid, 5);
  +
  +    return UUID_RC_OK;
  +}
  +
   /* generate UUID */
   uuid_rc_t uuid_make(uuid_t *uuid, unsigned int mode, ...)
   {
  @@ -927,6 +985,8 @@
           rc = uuid_make_v3(uuid, mode, ap);
       else if (mode & UUID_MAKE_V4)
           rc = uuid_make_v4(uuid, mode, ap);
  +    else if (mode & UUID_MAKE_V5)
  +        rc = uuid_make_v5(uuid, mode, ap);
       else
           rc = UUID_RC_ARG;
       va_end(ap);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.h.in
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 uuid.h.in
  --- ossp-pkg/uuid/uuid.h.in	31 Dec 2004 19:20:34 -0000	1.5
  +++ ossp-pkg/uuid/uuid.h.in	23 Jan 2005 11:28:51 -0000	1.6
  @@ -66,7 +66,8 @@
       UUID_MAKE_V1 = (1 << 0), /* DCE 1.1 v1 UUID */
       UUID_MAKE_V3 = (1 << 1), /* DCE 1.1 v3 UUID */
       UUID_MAKE_V4 = (1 << 2), /* DCE 1.1 v4 UUID */
  -    UUID_MAKE_MC = (1 << 3)  /* enforce multi-cast MAC address */
  +    UUID_MAKE_V5 = (1 << 3), /* DCE 1.1 v5 UUID */
  +    UUID_MAKE_MC = (1 << 4)  /* enforce multi-cast MAC address */
   };
   
   /* UUID import/export formats */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	22 Jan 2005 18:55:57 -0000	1.24
  +++ ossp-pkg/uuid/uuid.pod	23 Jan 2005 11:28:51 -0000	1.25
  @@ -43,7 +43,8 @@
   and corresponding command line interface (CLI) for the generation of DCE
   1.1 and ISO/IEC 11578:1996 compliant I<Universally Unique Identifier>
   (UUID). It supports DCE 1.1 variant UUIDs of version 1 (time and node
  -based), version 3 (name based) and version 4 (random number based).
  +based), version 3 (name based, MD5), version 4 (random number based) and
  +version 5 (name based, SHA-1).
   
   UUIDs are 128 bit numbers which are intended to have a high likelihood
   of uniqueness over space and time and are computationally difficult
  @@ -125,7 +126,7 @@
   (NIC) or a random multi-cast MAC address. Version 1 UUIDs are usually
   used as one-time global unique identifiers.
   
  -=item B<Version 3> (name based)
  +=item B<Version 3> (name based, MD5)
   
   These are UUIDs which are based on the 128-bit MD5 message digest of the
   concatenation of a 128-bit namespace UUID and a name string of arbitrary
  @@ -137,6 +138,13 @@
   These are UUIDs which are based on just 128-bit of random data. Version
   4 UUIDs are usually used as one-time local unique identifiers.
   
  +=item B<Version 5> (name based, SHA-1)
  +
  +These are UUIDs which are based on the 160-bit SHA-1 message digest of the
  +concatenation of a 128-bit namespace UUID and a name string of arbitrary
  +length. Version 5 UUIDs are usually used for non-unique but repeatable
  +message digest identifiers.
  +
   =back
   
   =head2 UUID Uniqueness
  @@ -154,8 +162,9 @@
   backward), there is a random clock sequence component placed into the
   UUID as a "catch-all" for uniqueness.
   
  -Version 3 UUIDs are guaranteed to be inherently globally unique if the
  -combination of namespace and name used to generate them is unique.
  +Version 3 and version 5 UUIDs are guaranteed to be inherently globally
  +unique if the combination of namespace and name used to generate them is
  +unique.
   
   Version 4 UUIDs are not guaranteed to be globally unique, because they
   are generated out of locally gathered pseudo-random numbers only.
  @@ -197,7 +206,7 @@
   Notice that the lengths of the string representation does I<not> include
   the necessary C<NUL> termination character.
   
  -=item B<UUID_MAKE_V1>, B<UUID_MAKE_V3>, B<UUID_MAKE_V4>, B<UUID_MAKE_MC>
  +=item B<UUID_MAKE_V1>, B<UUID_MAKE_V3>, B<UUID_MAKE_V4>, B<UUID_MAKE_V5>, B<UUID_MAKE_MC>
   
   The I<mode> bits for use with B<uuid_make>(). The B<UUID_MAKE_V>I<N>
   specify which UUID version to generate. The B<UUID_MAKE_MC> forces the
  @@ -297,7 +306,7 @@
   =back
   
   The "C<ns:>I<XXX>" are names of pre-defined name-space UUIDs for use in
  -the generation of DCE 1.1 version 3 UUIDs.
  +the generation of DCE 1.1 version 3 and version 5 UUIDs.
   
   =item uuid_rc_t B<uuid_make>(uuid_t *I<uuid>, unsigned int I<mode>, ...);
   
  @@ -310,14 +319,14 @@
   MAC address (the default). The UUID is generated out of the 60-bit current
   system time, a 12-bit clock sequence and the 48-bit MAC address.
   
  -If I<mode> contains the C<UUID_MAKE_V3> bit, a DCE 1.1 variant UUID
  -of version 3 is generated and two additional C<NUL>-terminated string
  -arguments of type "C<const char *>" are expected: first a namespace,
  -given as an internally pre-defined id (currently known are ids "C<DNS>",
  -"C<URL>", "C<OID>", and "C<X500>") or a UUID in string representation.
  -Second, a name string of arbitrary length. The UUID is generated out of
  -the 128-bit MD5 from the concatenated octet stream of namespace UUID and name
  -string.
  +If I<mode> contains the C<UUID_MAKE_V3> or C<UUID_MAKE_V5> bit, a DCE
  +1.1 variant UUID of version 3 or 5 is generated and two additional
  +C<NUL>-terminated string arguments of type "C<const char *>" are
  +expected: first a namespace, given as an internally pre-defined id
  +(currently known are ids "C<DNS>", "C<URL>", "C<OID>", and "C<X500>")
  +or a UUID in string representation. Second, a name string of arbitrary
  +length. The UUID is generated out of the 128-bit MD5 or 160-bit SHA-1
  +from the concatenated octet stream of namespace UUID and name string.
   
   If I<mode> contains the C<UUID_MAKE_V4> bit, a DCE 1.1 variant UUID
   of version 4 is generated. The UUID is generated out of 128-bit random
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.c
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 uuid_cli.c
  --- ossp-pkg/uuid/uuid_cli.c	31 Dec 2004 19:20:34 -0000	1.17
  +++ ossp-pkg/uuid/uuid_cli.c	23 Jan 2005 11:28:51 -0000	1.18
  @@ -62,7 +62,7 @@
           vfprintf(stderr, str, ap);
           fprintf(stderr, "\n");
       }
  -    fprintf(stderr, "usage: uuid [-v version] [-m] [-n count] [-1] [-r] [-o filename] [namespace-name]\n");
  +    fprintf(stderr, "usage: uuid [-v version] [-m] [-n count] [-1] [-r] [-o filename] [namespace name]\n");
       fprintf(stderr, "usage: uuid -d [-r] [-o filename] [uuid]\n");
       va_end(ap);
       exit(1);
  @@ -130,6 +130,7 @@
                       case 1: version = UUID_MAKE_V1; break;;
                       case 3: version = UUID_MAKE_V3; break;;
                       case 4: version = UUID_MAKE_V4; break;;
  +                    case 5: version = UUID_MAKE_V5; break;;
                       default:
                           usage("invalid version on option 'v'");
                           break;
  @@ -188,7 +189,8 @@
           /* encoding */
           if (   (version == UUID_MAKE_V1 && argc != 0)
               || (version == UUID_MAKE_V3 && argc != 2)
  -            || (version == UUID_MAKE_V4 && argc != 0))
  +            || (version == UUID_MAKE_V4 && argc != 0)
  +            || (version == UUID_MAKE_V5 && argc != 2))
               usage("invalid number of arguments");
           if ((rc = uuid_create(&uuid)) != UUID_RC_OK)
               error(1, "uuid_create: %s", uuid_error(rc));
  @@ -204,7 +206,7 @@
                   if ((rc = uuid_load(uuid, "nil")) != UUID_RC_OK)
                       error(1, "uuid_load: %s", uuid_error(rc));
               }
  -            if (version == UUID_MAKE_V3) {
  +            if (version == UUID_MAKE_V3 || version == UUID_MAKE_V5) {
                   if ((rc = uuid_create(&uuid_ns)) != UUID_RC_OK)
                       error(1, "uuid_create: %s", uuid_error(rc));
                   if ((rc = uuid_load(uuid_ns, argv[0])) != UUID_RC_OK) {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.pod
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 uuid_cli.pod
  --- ossp-pkg/uuid/uuid_cli.pod	31 Dec 2004 19:20:34 -0000	1.18
  +++ ossp-pkg/uuid/uuid_cli.pod	23 Jan 2005 11:28:51 -0000	1.19
  @@ -60,7 +60,8 @@
   and corresponding command line interface (CLI) for the generation of DCE
   1.1 and ISO/IEC 11578:1996 compliant I<Universally Unique Identifier>
   (UUID). It supports DCE 1.1 variant UUIDs of version 1 (time and node
  -based), version 3 (name based) and version 4 (random number based).
  +based), version 3 (name based, MD5), version 4 (random number based) and
  +version 5 (name based, SHA-1).
   
   UUIDs are 128 bit numbers which are intended to have a high likelihood
   of uniqueness over space and time and are computationally difficult
  @@ -81,14 +82,14 @@
   =item B<-v> I<version>
   
   Sets the version of the generated DCE 1.1 variant UUID. Supported
  -are I<version> "C<1>", "C<3>" and "C<4>". The default is "C<1>".
  +are I<version> "C<1>", "C<3>", "C<4>" and "C<5>". The default is "C<1>".
   
  -For version 3 UUIDs the additional command line arguments I<namespace>
  -and I<name> have to be given. The I<namespace> is either a UUID in
  -string representation or an identifier for internally pre-defined
  -namespace UUIDs (currently known are "C<ns:DNS>", "C<ns:URL>",
  -"C<ns:OID>", and "C<ns:X500>"). The I<name> is a string of arbitrary
  -length.
  +For version 3 and version 5 UUIDs the additional command line arguments
  +I<namespace> and I<name> have to be given. The I<namespace> is either
  +a UUID in string representation or an identifier for internally
  +pre-defined namespace UUIDs (currently known are "C<ns:DNS>",
  +"C<ns:URL>", "C<ns:OID>", and "C<ns:X500>"). The I<name> is a string of
  +arbitrary length.
   
   =item B<-m>
   
  @@ -104,7 +105,7 @@
   
   If option B<-n> is used with a I<count> greater than C<1>, then this
   option can enforce the reset the UUID context for each generated UUID.
  -This makes no difference for I<version> C<3> and C<4> UUIDs. But
  +This makes no difference for I<version> C<3>, C<4> and C<5> UUIDs. But
   version C<1> UUIDs are based on the previously generated UUID which is
   remembered in the UUID context of the API. Option B<-1> deletes the
   remembered UUID on each iteration.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_sha1.c
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid_sha1.c
  --- /dev/null	2005-01-23 12:28:52 +0100
  +++ uuid_sha1.c	2005-01-23 12:28:53 +0100
  @@ -0,0 +1,443 @@
  +/*
  +**  OSSP uuid - Universally Unique Identifier
  +**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +**
  +**  This file is part of OSSP uuid, a library for the generation
  +**  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  uuid_sha1.c: SHA-1 API implementation
  +*/
  +
  +#include <stdlib.h>
  +#include <string.h>
  +
  +#include "config.h"
  +#include "uuid_sha1.h"
  +
  +/*
  + *  This is a RFC 3174 compliant Secure Hash Function (SHA-1) algorithm
  + *  implementation. It is directly derived from the SHA-1 reference
  + *  code published in RFC 3174 with just the following functionality
  + *  preserving changes:
  + *  - reformatted C style to conform with OSSP C style
  + *  - added own OSSP style frontend API
  + *  - added Autoconf based determination of sha1_uintX_t types
  + */
  +
  +/*
  +** ==== BEGIN RFC 3174 CODE ====
  +*/
  +
  +/*
  + *  This implements the Secure Hashing Algorithm 1 as defined in
  + *  FIPS PUB 180-1 published April 17, 1995.
  + *
  + *  The SHA-1, produces a 160-bit message digest for a given data
  + *  stream. It should take about 2**n steps to find a message with the
  + *  same digest as a given message and 2**(n/2) to find any two messages
  + *  with the same digest, when n is the digest size in bits. Therefore,
  + *  this algorithm can serve as a means of providing a "fingerprint" for
  + *  a message.
  + *
  + *  Caveats: SHA-1 is designed to work with messages less than 2^64 bits
  + *  long. Although SHA-1 allows a message digest to be generated for
  + *  messages of any number of bits less than 2^64, this implementation
  + *  only works with messages with a length that is a multiple of the
  + *  size of an 8-bit character.
  + */
  +
  +typedef unsigned char sha1_uint8_t;
  +
  +#if SIZEOF_SHORT  > 2
  +typedef short int sha1_int16plus_t;
  +#elif SIZEOF_INT  > 2
  +typedef int       sha1_int16plus_t;
  +#elif SIZEOF_LONG > 2
  +typedef long int  sha1_int16plus_t;
  +#else
  +#error ERROR: unable to determine sha1_int16plus_t type (at least two byte word)
  +#endif
  +
  +#if SIZEOF_UNSIGNED_SHORT       == 4
  +typedef unsigned short int     sha1_uint32_t;
  +#elif SIZEOF_UNSIGNED_INT       == 4
  +typedef unsigned int           sha1_uint32_t;
  +#elif SIZEOF_UNSIGNED_LONG      == 4
  +typedef unsigned long int      sha1_uint32_t;
  +#elif SIZEOF_UNSIGNED_LONG_LONG == 4
  +typedef unsigned long long int sha1_uint32_t;
  +#else
  +#error ERROR: unable to determine sha1_uint32_t type (four byte word)
  +#endif
  +
  +enum {
  +    shaSuccess = 0,
  +    shaNull,            /* null pointer parameter */
  +    shaInputTooLong,    /* input data too long */
  +    shaStateError       /* called Input after Result */
  +};
  +
  +#define SHA1HashSize 20
  +
  +/* This structure will hold context information for the SHA-1 hashing operation */
  +typedef struct SHA1Context {
  +    sha1_uint32_t Intermediate_Hash[SHA1HashSize/4]; /* Message Digest */
  +    sha1_uint32_t Length_Low;                        /* Message length in bits */
  +    sha1_uint32_t Length_High;                       /* Message length in bits */
  +    sha1_int16plus_t Message_Block_Index;            /* Index into message block array */
  +    sha1_uint8_t Message_Block[64];                  /* 512-bit message blocks */
  +    int Computed;                                    /* Is the digest computed? */
  +    int Corrupted;                                   /* Is the message digest corrupted? */
  +} SHA1Context;
  +
  +/* Function Prototypes */
  +static int SHA1Reset  (SHA1Context *);
  +static int SHA1Input  (SHA1Context *, const sha1_uint8_t *, unsigned int);
  +static int SHA1Result (SHA1Context *, sha1_uint8_t Message_Digest[SHA1HashSize]);
  +
  +/* Local Function Prototyptes */
  +static void SHA1PadMessage         (SHA1Context *);
  +static void SHA1ProcessMessageBlock(SHA1Context *);
  +
  +/* Define the SHA1 circular left shift macro */
  +#define SHA1CircularShift(bits,word) \
  +    (((word) << (bits)) | ((word) >> (32-(bits))))
  +
  +/*
  + *  This function will initialize the SHA1Context in preparation for
  + *  computing a new SHA1 message digest.
  + */
  +static int SHA1Reset(SHA1Context *context)
  +{
  +    if (context == NULL)
  +        return shaNull;
  +
  +    context->Length_Low             = 0;
  +    context->Length_High            = 0;
  +    context->Message_Block_Index    = 0;
  +
  +    context->Intermediate_Hash[0]   = 0x67452301;
  +    context->Intermediate_Hash[1]   = 0xEFCDAB89;
  +    context->Intermediate_Hash[2]   = 0x98BADCFE;
  +    context->Intermediate_Hash[3]   = 0x10325476;
  +    context->Intermediate_Hash[4]   = 0xC3D2E1F0;
  +
  +    context->Computed   = 0;
  +    context->Corrupted  = 0;
  +
  +    return shaSuccess;
  +}
  +
  +/*
  + *  This function will return the 160-bit message digest into the
  + *  Message_Digest array provided by the caller. NOTE: The first octet
  + *  of hash is stored in the 0th element, the last octet of hash in the
  + *  19th element.
  + */
  +static int SHA1Result(SHA1Context *context, sha1_uint8_t Message_Digest[SHA1HashSize])
  +{
  +    int i;
  +
  +    if (context == NULL || Message_Digest == NULL)
  +        return shaNull;
  +    if (context->Corrupted)
  +        return context->Corrupted;
  +
  +    if (!context->Computed) {
  +        SHA1PadMessage(context);
  +        for (i = 0; i < 64; i++) {
  +            /* message may be sensitive, clear it out */
  +            context->Message_Block[i] = 0;
  +        }
  +        context->Length_Low  = 0; /* and clear length */
  +        context->Length_High = 0;
  +        context->Computed    = 1;
  +    }
  +    for (i = 0; i < SHA1HashSize; i++)
  +        Message_Digest[i] = context->Intermediate_Hash[i>>2] >> 8 * (3 - (i & 0x03));
  +
  +    return shaSuccess;
  +}
  +
  +/*
  + *  This function accepts an array of octets as the next portion of the
  + *  message.
  + */
  +static int SHA1Input(SHA1Context *context, const sha1_uint8_t *message_array, unsigned int length)
  +{
  +    if (length == 0)
  +        return shaSuccess;
  +    if (context == NULL || message_array == NULL)
  +        return shaNull;
  +
  +    if (context->Computed) {
  +        context->Corrupted = shaStateError;
  +        return shaStateError;
  +    }
  +    if (context->Corrupted)
  +        return context->Corrupted;
  +    while (length-- && !context->Corrupted) {
  +        context->Message_Block[context->Message_Block_Index++] = (*message_array & 0xFF);
  +        context->Length_Low += 8;
  +        if (context->Length_Low == 0) {
  +            context->Length_High++;
  +            if (context->Length_High == 0)
  +                context->Corrupted = 1; /* Message is too long */
  +        }
  +        if (context->Message_Block_Index == 64)
  +            SHA1ProcessMessageBlock(context);
  +        message_array++;
  +    }
  +
  +    return shaSuccess;
  +}
  +
  +/*
  + *  This function will process the next 512 bits of the message stored
  + *  in the Message_Block array. NOTICE: Many of the variable names in
  + *  this code, especially the single character names, were used because
  + *  those were the names used in the publication.
  + */
  +static void SHA1ProcessMessageBlock(SHA1Context *context)
  +{
  +    const sha1_uint32_t K[] = {   /* Constants defined in SHA-1   */
  +        0x5A827999,
  +        0x6ED9EBA1,
  +        0x8F1BBCDC,
  +        0xCA62C1D6
  +    };
  +    int            t;             /* Loop counter                */
  +    sha1_uint32_t  temp;          /* Temporary word value        */
  +    sha1_uint32_t  W[80];         /* Word sequence               */
  +    sha1_uint32_t  A, B, C, D, E; /* Word buffers                */
  +
  +    /* Initialize the first 16 words in the array W */
  +    for (t = 0; t < 16; t++) {
  +        W[t]  = context->Message_Block[t * 4    ] << 24;
  +        W[t] |= context->Message_Block[t * 4 + 1] << 16;
  +        W[t] |= context->Message_Block[t * 4 + 2] << 8;
  +        W[t] |= context->Message_Block[t * 4 + 3];
  +    }
  +
  +    for (t = 16; t < 80; t++)
  +       W[t] = SHA1CircularShift(1, W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16]);
  +
  +    A = context->Intermediate_Hash[0];
  +    B = context->Intermediate_Hash[1];
  +    C = context->Intermediate_Hash[2];
  +    D = context->Intermediate_Hash[3];
  +    E = context->Intermediate_Hash[4];
  +
  +    for (t = 0; t < 20; t++) {
  +        temp =  SHA1CircularShift(5, A) + ((B & C) | ((~B) & D)) + E + W[t] + K[0];
  +        E = D;
  +        D = C;
  +        C = SHA1CircularShift(30, B);
  +        B = A;
  +        A = temp;
  +    }
  +
  +    for (t = 20; t < 40; t++) {
  +        temp = SHA1CircularShift(5, A) + (B ^ C ^ D) + E + W[t] + K[1];
  +        E = D;
  +        D = C;
  +        C = SHA1CircularShift(30, B);
  +        B = A;
  +        A = temp;
  +    }
  +
  +    for (t = 40; t < 60; t++) {
  +        temp = SHA1CircularShift(5, A) + ((B & C) | (B & D) | (C & D)) + E + W[t] + K[2];
  +        E = D;
  +        D = C;
  +        C = SHA1CircularShift(30, B);
  +        B = A;
  +        A = temp;
  +    }
  +
  +    for (t = 60; t < 80; t++) {
  +        temp = SHA1CircularShift(5, A) + (B ^ C ^ D) + E + W[t] + K[3];
  +        E = D;
  +        D = C;
  +        C = SHA1CircularShift(30, B);
  +        B = A;
  +        A = temp;
  +    }
  +
  +    context->Intermediate_Hash[0] += A;
  +    context->Intermediate_Hash[1] += B;
  +    context->Intermediate_Hash[2] += C;
  +    context->Intermediate_Hash[3] += D;
  +    context->Intermediate_Hash[4] += E;
  +
  +    context->Message_Block_Index = 0;
  +
  +    return;
  +}
  +
  +/*
  + *  According to the standard, the message must be padded to an even
  + *  512 bits. The first padding bit must be a '1'. The last 64 bits
  + *  represent the length of the original message. All bits in between
  + *  should be 0. This function will pad the message according to those
  + *  rules by filling the Message_Block array accordingly. It will also
  + *  call the ProcessMessageBlock function provided appropriately. When
  + *  it returns, it can be assumed that the message digest has been
  + *  computed.
  + */
  +static void SHA1PadMessage(SHA1Context *context)
  +{
  +    /* Check to see if the current message block is too small to hold
  +       the initial padding bits and length. If so, we will pad the block,
  +       process it, and then continue padding into a second block. */
  +    if (context->Message_Block_Index > 55) {
  +        context->Message_Block[context->Message_Block_Index++] = 0x80;
  +        while (context->Message_Block_Index < 64)
  +            context->Message_Block[context->Message_Block_Index++] = 0;
  +        SHA1ProcessMessageBlock(context);
  +        while(context->Message_Block_Index < 56)
  +            context->Message_Block[context->Message_Block_Index++] = 0;
  +    }
  +    else {
  +        context->Message_Block[context->Message_Block_Index++] = 0x80;
  +        while(context->Message_Block_Index < 56)
  +            context->Message_Block[context->Message_Block_Index++] = 0;
  +    }
  +
  +    /* Store the message length as the last 8 octets */
  +    context->Message_Block[56] = context->Length_High >> 24;
  +    context->Message_Block[57] = context->Length_High >> 16;
  +    context->Message_Block[58] = context->Length_High >> 8;
  +    context->Message_Block[59] = context->Length_High;
  +    context->Message_Block[60] = context->Length_Low  >> 24;
  +    context->Message_Block[61] = context->Length_Low  >> 16;
  +    context->Message_Block[62] = context->Length_Low  >> 8;
  +    context->Message_Block[63] = context->Length_Low;
  +
  +    SHA1ProcessMessageBlock(context);
  +    return;
  +}
  +
  +/*
  +** ==== END RFC 3174 CODE ====
  +*/
  +
  +struct sha1_st {
  +    SHA1Context ctx;
  +};
  +
  +sha1_rc_t sha1_create(sha1_t **sha1)
  +{
  +    if (sha1 == NULL)
  +        return SHA1_RC_ARG;
  +    if ((*sha1 = (sha1_t *)malloc(sizeof(sha1_t))) == NULL)
  +        return SHA1_RC_MEM;
  +    SHA1Reset(&((*sha1)->ctx));
  +    return SHA1_RC_OK;
  +}
  +
  +sha1_rc_t sha1_init(sha1_t *sha1)
  +{
  +    if (sha1 == NULL)
  +        return SHA1_RC_ARG;
  +    SHA1Reset(&(sha1->ctx));
  +    return SHA1_RC_OK;
  +}
  +
  +sha1_rc_t sha1_update(sha1_t *sha1, const void *data_ptr, size_t data_len)
  +{
  +    if (sha1 == NULL)
  +        return SHA1_RC_ARG;
  +    SHA1Input(&(sha1->ctx), (unsigned char *)data_ptr, (unsigned int)data_len);
  +    return SHA1_RC_OK;
  +}
  +
  +sha1_rc_t sha1_store(sha1_t *sha1, void **data_ptr, size_t *data_len)
  +{
  +    SHA1Context ctx;
  +
  +    if (sha1 == NULL || data_ptr == NULL)
  +        return SHA1_RC_ARG;
  +    if (*data_ptr == NULL) {
  +        if ((*data_ptr = malloc(SHA1_LEN_BIN)) == NULL)
  +            return SHA1_RC_MEM;
  +        if (data_len != NULL)
  +            *data_len = SHA1_LEN_BIN;
  +    }
  +    else {
  +        if (data_len != NULL) {
  +            if (*data_len < SHA1_LEN_BIN)
  +                return SHA1_RC_MEM;
  +            *data_len = SHA1_LEN_BIN;
  +        }
  +    }
  +    memcpy((void *)(&ctx), (void *)(&(sha1->ctx)), sizeof(SHA1Context));
  +    SHA1Result(&(ctx), (unsigned char *)(*data_ptr));
  +    return SHA1_RC_OK;
  +}
  +
  +sha1_rc_t sha1_format(sha1_t *sha1, char **data_ptr, size_t *data_len)
  +{
  +    static const char hex[] = "0123456789abcdef";
  +    unsigned char buf[SHA1_LEN_BIN];
  +    unsigned char *bufptr;
  +    size_t buflen;
  +    sha1_rc_t rc;
  +    int i;
  +
  +    if (sha1 == NULL || data_ptr == NULL)
  +        return SHA1_RC_ARG;
  +    if (*data_ptr == NULL) {
  +        if ((*data_ptr = (char *)malloc(SHA1_LEN_STR+1)) == NULL)
  +            return SHA1_RC_MEM;
  +        if (data_len != NULL)
  +            *data_len = SHA1_LEN_STR+1;
  +    }
  +    else {
  +        if (data_len != NULL) {
  +            if (*data_len < SHA1_LEN_STR+1)
  +                return SHA1_RC_MEM;
  +            *data_len = SHA1_LEN_STR+1;
  +        }
  +    }
  +
  +    bufptr = buf;
  +    buflen = sizeof(buf);
  +    if ((rc = sha1_store(sha1, (void **)((void *)&bufptr), &buflen)) != SHA1_RC_OK)
  +        return rc;
  +
  +    for (i = 0; i < (int)buflen; i++) {
  +	    (*data_ptr)[(i*2)+0] = hex[(int)(bufptr[i] >> 4)];
  +	    (*data_ptr)[(i*2)+1] = hex[(int)(bufptr[i] & 0x0f)];
  +    }
  +    (*data_ptr)[(i*2)] = '\0';
  +    return SHA1_RC_OK;
  +}
  +
  +sha1_rc_t sha1_destroy(sha1_t *sha1)
  +{
  +    if (sha1 == NULL)
  +        return SHA1_RC_ARG;
  +    free(sha1);
  +    return SHA1_RC_OK;
  +}
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_sha1.h
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid_sha1.h
  --- /dev/null	2005-01-23 12:28:52 +0100
  +++ uuid_sha1.h	2005-01-23 12:28:53 +0100
  @@ -0,0 +1,76 @@
  +/*
  +**  OSSP uuid - Universally Unique Identifier
  +**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +**
  +**  This file is part of OSSP uuid, a library for the generation
  +**  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  uuid_sha1.h: SHA-1 API definition
  +*/
  +
  +#ifndef __SHA1_H___
  +#define __SHA1_H___
  +
  +#include <string.h> /* size_t */
  +
  +#define SHA1_PREFIX uuid_
  +
  +/* embedding support */
  +#ifdef SHA1_PREFIX
  +#if defined(__STDC__) || defined(__cplusplus)
  +#define __SHA1_CONCAT(x,y) x ## y
  +#define SHA1_CONCAT(x,y) __SHA1_CONCAT(x,y)
  +#else
  +#define __SHA1_CONCAT(x) x
  +#define SHA1_CONCAT(x,y) __SHA1_CONCAT(x)y
  +#endif
  +#define sha1_st      SHA1_CONCAT(SHA1_PREFIX,sha1_st)
  +#define sha1_t       SHA1_CONCAT(SHA1_PREFIX,sha1_t)
  +#define sha1_create  SHA1_CONCAT(SHA1_PREFIX,sha1_create)
  +#define sha1_init    SHA1_CONCAT(SHA1_PREFIX,sha1_init)
  +#define sha1_update  SHA1_CONCAT(SHA1_PREFIX,sha1_update)
  +#define sha1_store   SHA1_CONCAT(SHA1_PREFIX,sha1_store)
  +#define sha1_format  SHA1_CONCAT(SHA1_PREFIX,sha1_format)
  +#define sha1_destroy SHA1_CONCAT(SHA1_PREFIX,sha1_destroy)
  +#endif
  +
  +struct sha1_st;
  +typedef struct sha1_st sha1_t;
  +
  +#define SHA1_LEN_BIN 20
  +#define SHA1_LEN_STR 40
  +
  +typedef enum {
  +    SHA1_RC_OK  = 0,
  +    SHA1_RC_ARG = 1,
  +    SHA1_RC_MEM = 2
  +} sha1_rc_t;
  +
  +extern sha1_rc_t sha1_create  (sha1_t **sha1);
  +extern sha1_rc_t sha1_init    (sha1_t  *sha1);
  +extern sha1_rc_t sha1_update  (sha1_t  *sha1, const void  *data_ptr, size_t  data_len);
  +extern sha1_rc_t sha1_store   (sha1_t  *sha1,       void **data_ptr, size_t *data_len);
  +extern sha1_rc_t sha1_format  (sha1_t  *sha1,       char **data_ptr, size_t *data_len);
  +extern sha1_rc_t sha1_destroy (sha1_t  *sha1);
  +
  +#endif /* __SHA1_H___ */
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_vers.h
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 uuid_vers.h
  --- ossp-pkg/uuid/uuid_vers.h	13 Jan 2005 10:37:36 -0000	1.13
  +++ ossp-pkg/uuid/uuid_vers.h	23 Jan 2005 11:28:51 -0000	1.14
  @@ -8,7 +8,7 @@
   #ifndef _UUID_VERS_H_
   #define _UUID_VERS_H_
   
  -#define _UUID_VERSION 0x101202
  +#define _UUID_VERSION 0x102200
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _UUID_VERS_H_AS_HEADER_
   
   _uuid_version_t _uuid_version = {
  -    0x101202,
  -    "1.1.2",
  -    "1.1.2 (13-Jan-2005)",
  -    "This is OSSP uuid, Version 1.1.2 (13-Jan-2005)",
  -    "OSSP uuid 1.1.2 (13-Jan-2005)",
  -    "OSSP uuid/1.1.2",
  -    "@(#)OSSP uuid 1.1.2 (13-Jan-2005)",
  -    "$Id: OSSP uuid 1.1.2 (13-Jan-2005) $"
  +    0x102200,
  +    "1.2.0",
  +    "1.2.0 (23-Jan-2005)",
  +    "This is OSSP uuid, Version 1.2.0 (23-Jan-2005)",
  +    "OSSP uuid 1.2.0 (23-Jan-2005)",
  +    "OSSP uuid/1.2.0",
  +    "@(#)OSSP uuid 1.2.0 (23-Jan-2005)",
  +    "$Id: OSSP uuid 1.2.0 (23-Jan-2005) $"
   };
   
   #endif /* _UUID_VERS_H_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jan 23 13:19:25 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1387E7631C; Sun, 23 Jan 2005 13:19:25 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog
Message-Id: <20050123121925.1387E7631C@mail.ossp.org>
Date: Sun, 23 Jan 2005 13:19:25 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Jan-2005 13:19:24
  Branch: HEAD                             Handle: 2005012312192400

  Modified files:
    ossp-pkg/uuid           ChangeLog

  Log:
    Remember what was done, too.

  Summary:
    Revision    Changes     Path
    1.69        +4  -0      ossp-pkg/uuid/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.68 -r1.69 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	23 Jan 2005 11:28:51 -0000	1.68
  +++ ossp-pkg/uuid/ChangeLog	23 Jan 2005 12:19:24 -0000	1.69
  @@ -17,6 +17,10 @@
        according to latest draft-mealling-uuid-urn-05.txt.
        [Ralf S. Engelschall]
   
  +   o Reference new ISO/IEC 9834-8:2004 / ITU-T Rec. X.667 2004 standard
  +     and latest IETF draft-mealling-uuid-urn-05.txt.
  +     [Ralf S. Engelschall]
  +
     Changes between 1.1.1 and 1.1.2 (18-Nov-2004 to 13-Jan-2005)
   
      o Fix generation of v3 UUIDs by adding support for 64-bit platforms
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jan 23 13:38:11 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2F8BE764E3; Sun, 23 Jan 2005 13:38:11 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/perl/ uuid.pm uuid.pod uuid.xs
Message-Id: <20050123123811.2F8BE764E3@mail.ossp.org>
Date: Sun, 23 Jan 2005 13:38:11 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Jan-2005 13:38:11
  Branch: HEAD                             Handle: 2005012312381000

  Modified files:
    ossp-pkg/uuid/perl      uuid.pm uuid.pod uuid.xs

  Log:
    add support for version 5 UUIDs also to Perl API

  Summary:
    Revision    Changes     Path
    1.8         +4  -2      ossp-pkg/uuid/perl/uuid.pm
    1.6         +6  -5      ossp-pkg/uuid/perl/uuid.pod
    1.4         +4  -3      ossp-pkg/uuid/perl/uuid.xs
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.pm
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 uuid.pm
  --- ossp-pkg/uuid/perl/uuid.pm	23 Jan 2005 11:28:54 -0000	1.7
  +++ ossp-pkg/uuid/perl/uuid.pm	23 Jan 2005 12:38:10 -0000	1.8
  @@ -61,6 +61,7 @@
           UUID_MAKE_V1
           UUID_MAKE_V3
           UUID_MAKE_V4
  +        UUID_MAKE_V5
           UUID_MAKE_MC
           UUID_FMT_BIN
           UUID_FMT_STR
  @@ -136,12 +137,13 @@
           if    ($spec eq 'v1') { $mode_code |= $self->UUID_MAKE_V1; }
           elsif ($spec eq 'v3') { $mode_code |= $self->UUID_MAKE_V3; }
           elsif ($spec eq 'v4') { $mode_code |= $self->UUID_MAKE_V4; }
  +        elsif ($spec eq 'v5') { $mode_code |= $self->UUID_MAKE_V5; }
           elsif ($spec eq 'mc') { $mode_code |= $self->UUID_MAKE_MC; }
           else  { croak("invalid mode specification \"$spec\""); }
       }
  -    if ($mode_code & $self->UUID_MAKE_V3) {
  +    if (($mode_code & $self->UUID_MAKE_V3) or ($mode_code & $self->UUID_MAKE_V5)) {
           if (not (ref($valist[0]) and $valist[0]->isa("OSSP::uuid"))) {
  -            croak("UUID_MAKE_V3 requires namespace argument to be OSSP::uuid object");
  +            croak("UUID_MAKE_V3/UUID_MAKE_V5 requires namespace argument to be OSSP::uuid object");
           }
           my $ns   = $valist[0]->{-uuid};
           my $name = $valist[1];
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 uuid.pod
  --- ossp-pkg/uuid/perl/uuid.pod	31 Dec 2004 19:20:39 -0000	1.5
  +++ ossp-pkg/uuid/perl/uuid.pod	23 Jan 2005 12:38:10 -0000	1.6
  @@ -41,8 +41,8 @@
   (API) and corresponding command line interface (CLI) for the generation
   of DCE 1.1 and ISO/IEC 11578:1996 compliant I<Universally Unique
   Identifier> (UUID). It supports DCE 1.1 variant UUIDs of version 1 (time
  -and node based), version 3 (name based) and version 4 (random number
  -based).
  +and node based), version 3 (name based, MD5), version 4 (random number
  +based) and version 5 (name based, SHA-1).
   
   B<OSSP::uuid> provides two Perl APIs:
   
  @@ -77,9 +77,9 @@
   
   =back
   
  -Additionally, the strings C<"v1">, C<"v2">, C<"v3"> and C<"mc"> can be
  -used in C<$mode> and the strings C<"bin">, C<"str">, and C<"txt"> can be
  -used for C<$fmt>.
  +Additionally, the strings C<"v1">, C<"v3">, C<"v4">, C<"v5"> and C<"mc">
  +can be used in C<$mode> and the strings C<"bin">, C<"str">, and C<"txt">
  +can be used for C<$fmt>.
   
   =head2 C-STYLE API
   
  @@ -128,6 +128,7 @@
   C<UUID_MAKE_V1>,
   C<UUID_MAKE_V3>,
   C<UUID_MAKE_V4>,
  +C<UUID_MAKE_V5>,
   C<UUID_MAKE_MC>,
   C<UUID_FMT_BIN>,
   C<UUID_FMT_STR>,
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.xs
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 uuid.xs
  --- ossp-pkg/uuid/perl/uuid.xs	31 Dec 2004 19:20:39 -0000	1.3
  +++ ossp-pkg/uuid/perl/uuid.xs	23 Jan 2005 12:38:10 -0000	1.4
  @@ -57,6 +57,7 @@
               { "UUID_MAKE_V1", UUID_MAKE_V1 },
               { "UUID_MAKE_V3", UUID_MAKE_V3 },
               { "UUID_MAKE_V4", UUID_MAKE_V4 },
  +            { "UUID_MAKE_V5", UUID_MAKE_V5 },
               { "UUID_MAKE_MC", UUID_MAKE_MC },
               { "UUID_FMT_BIN", UUID_FMT_BIN },
               { "UUID_FMT_STR", UUID_FMT_STR },
  @@ -126,11 +127,11 @@
           uuid_t *ns;
           const char *name;
       CODE:
  -        if (mode & UUID_MAKE_V3) {
  +        if ((mode & UUID_MAKE_V3) || (mode & UUID_MAKE_V5)) {
               if (items != 4)
  -                croak("mode UUID_MAKE_V3 requires two additional arguments to uuid_make()");
  +                croak("mode UUID_MAKE_V3/UUID_MAKE_V5 requires two additional arguments to uuid_make()");
   	        if (!SvROK(ST(2)))
  -                croak("mode UUID_MAKE_V3 requires a UUID object as namespace");
  +                croak("mode UUID_MAKE_V3/UUID_MAKE_V5 requires a UUID object as namespace");
               ns   = INT2PTR(uuid_t *, SvIV((SV*)SvRV(ST(2))));
               name = (const char *)SvPV_nolen(ST(3));
               RETVAL = uuid_make(uuid, mode, ns, name);
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jan 23 14:13:27 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9213C764ED; Sun, 23 Jan 2005 14:13:27 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog
Message-Id: <20050123131327.9213C764ED@mail.ossp.org>
Date: Sun, 23 Jan 2005 14:13:27 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Jan-2005 14:13:27
  Branch: HEAD                             Handle: 2005012313132700

  Modified files:
    ossp-pkg/uuid           ChangeLog

  Log:
    prepare for release

  Summary:
    Revision    Changes     Path
    1.70        +1  -1      ossp-pkg/uuid/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.69 -r1.70 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	23 Jan 2005 12:19:24 -0000	1.69
  +++ ossp-pkg/uuid/ChangeLog	23 Jan 2005 13:13:27 -0000	1.70
  @@ -11,7 +11,7 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 1.1.2 and 1.2.0 (13-Jan-2005 to xx-Jan-2005)
  +  Changes between 1.1.2 and 1.2.0 (13-Jan-2005 to 23-Jan-2005)
   
      o Added support for new version 5 UUIDs (name-based, SHA-1)
        according to latest draft-mealling-uuid-urn-05.txt.
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jan 23 14:24:56 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 699D276526; Sun, 23 Jan 2005 14:24:56 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20050123132456.699D276526@mail.ossp.org>
Date: Sun, 23 Jan 2005 14:24:56 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   23-Jan-2005 14:24:56
  Branch: HEAD                             Handle: 2005012313245501

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/uuid   index.wml

  Log:
    release OSSP uuid 1.2.0

  Summary:
    Revision    Changes     Path
    1.117       +1  -0      ossp-web/new/news.txt
    1.98        +1  -1      ossp-web/pkg/lib/index.wml
    1.21        +4  -3      ossp-web/pkg/lib/uuid/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.116 -r1.117 news.txt
  --- ossp-web/new/news.txt	13 Jan 2005 11:18:35 -0000	1.116
  +++ ossp-web/new/news.txt	23 Jan 2005 13:24:55 -0000	1.117
  @@ -1,3 +1,4 @@
  +23-Jan-2005: Released L<OSSP uuid> 1.2.0
   13-Jan-2005: Released T<OSSP svs> 1.0.1
   13-Jan-2005: Released L<OSSP uuid> 1.1.2
   12-Jan-2005: Released T<OSSP shiela> 1.1.5
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.97 -r1.98 index.wml
  --- ossp-web/pkg/lib/index.wml	13 Jan 2005 10:43:31 -0000	1.97
  +++ ossp-web/pkg/lib/index.wml	23 Jan 2005 13:24:55 -0000	1.98
  @@ -33,7 +33,7 @@
   			done=100 stable=1.1.2 unstable=none>
     <pkg_item name="uuid" longname="OSSP uuid" type="lib"
               desc="Universally Unique Identifier"
  -			done=100 stable=1.1.2 unstable=none>
  +			done=100 stable=1.2.0 unstable=none>
     <pkg_item name="val" longname="OSSP val" type="lib"
               desc="Value Access"
   			done=95 stable=none unstable=0.9.3>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/uuid/index.wml
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 index.wml
  --- ossp-web/pkg/lib/uuid/index.wml	13 Jan 2005 10:43:32 -0000	1.20
  +++ ossp-web/pkg/lib/uuid/index.wml	23 Jan 2005 13:24:56 -0000	1.21
  @@ -18,7 +18,8 @@
   and corresponding command line interface (CLI) for the generation of
   DCE 1.1 and ISO/IEC 11578:1996 compliant Universally Unique Identifiers
   (UUID). It supports DCE 1.1 variant UUIDs of version 1 (time and node
  -based), version 3 (name based) and version 4 (random number based).
  +based), version 3 (name based, MD5), version 4 (random number based) and
  +version 5 (name based, SHA-1).
   
   <p>
   UUIDs are 128 bit numbers which are intended to have a high likelihood
  @@ -44,7 +45,7 @@
   
   <pkg_status
       name="uuid" assign="rse"
  -    stable="1.1.2"    stable_date="13-Jan-2005"
  +    stable="1.2.0"    stable_date="23-Jan-2005"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -55,7 +56,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/uuid/
       directory=$(FTP_ROOT_DIR)/pkg/lib/uuid/
       files="uuid-[0-9.]*.tar.gz" 
  -	stable="uuid-1\.1\.2\.tar\.gz" unstable="none">
  +	stable="uuid-1\.2\.0\.tar\.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 24 11:52:53 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8D9ED764D1; Mon, 24 Jan 2005 11:52:53 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tai/ tai_ui64.c tai_ui64.h
Message-Id: <20050124105253.8D9ED764D1@mail.ossp.org>
Date: Mon, 24 Jan 2005 11:52:53 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Jan-2005 11:52:53
  Branch: HEAD                             Handle: 2005012410525200

  Modified files:
    ossp-pkg/tai            tai_ui64.c tai_ui64.h

  Log:
    upgrade to latest OSSP ui64

  Summary:
    Revision    Changes     Path
    1.3         +8  -9      ossp-pkg/tai/tai_ui64.c
    1.4         +18 -19     ossp-pkg/tai/tai_ui64.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/tai/tai_ui64.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 tai_ui64.c
  --- ossp-pkg/tai/tai_ui64.c	23 Mar 2003 18:00:29 -0000	1.2
  +++ ossp-pkg/tai/tai_ui64.c	24 Jan 2005 10:52:52 -0000	1.3
  @@ -1,8 +1,7 @@
   /*
   **  OSSP ui64 - 64-Bit Arithmetic
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP ui64, a 64-bit arithmetic library
   **  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  @@ -109,15 +108,15 @@
           10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, /* a...m */
           23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35  /* m...z */
       };
  -    
  +
       ui64_fill(z, 0);
       if (str == NULL || (base < 2 || base > 36))
           return z;
       cp = str;
       while (*cp != '\0' && isspace((int)(*cp)))
           cp++;
  -    while (   *cp != '\0' 
  -           && isalnum((int)(*cp)) 
  +    while (   *cp != '\0'
  +           && isalnum((int)(*cp))
              && map[(int)(*cp)-'0'] < base) {
           z = ui64_muln(z, base, &carry);
           if (carry)
  @@ -150,7 +149,7 @@
   		str[i++] = map[r];
   		while (n > 1 && x.x[n-1] == 0)
   			n--;
  -	} while (i < (len-1) && (n > 1 || x.x[0] != 0));
  +	} while (i < ((int)len-1) && (n > 1 || x.x[0] != 0));
   	str[i] = '\0';
       for (j = 0; j < --i; j++) {
           c = str[j];
  @@ -318,7 +317,7 @@
       int i;
       int n, m;
       int ovn;
  -    
  +
       /* determine actual number of involved digits */
       n = ui64_len(x);
       m = ui64_len(y);
  @@ -364,7 +363,7 @@
                  qk := rx[k+m-2...k+m]/y[m-2...m-1] */
               km = k + m;
               y2 = (y.x[m-1]*UI64_BASE) + y.x[m-2];
  -            r3 = (rx.x[km]*(UI64_BASE*UI64_BASE)) + 
  +            r3 = (rx.x[km]*(UI64_BASE*UI64_BASE)) +
                    (rx.x[km-1]*UI64_BASE) + rx.x[km-2];
               qk = r3 / y2;
               if (qk >= UI64_BASE)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/tai/tai_ui64.h
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 tai_ui64.h
  --- ossp-pkg/tai/tai_ui64.h	23 Mar 2003 18:00:29 -0000	1.3
  +++ ossp-pkg/tai/tai_ui64.h	24 Jan 2005 10:52:52 -0000	1.4
  @@ -1,8 +1,7 @@
   /*
   **  OSSP ui64 - 64-Bit Arithmetic
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP ui64, a 64-bit arithmetic library
   **  which can be found at http://www.ossp.org/pkg/lib/ui64/.
  @@ -46,26 +45,26 @@
   #endif
   #define ui64_t     UI64_CONCAT(UI64_PREFIX,ui64_t)
   #define ui64_zero  UI64_CONCAT(UI64_PREFIX,ui64_zero)
  -#define ui64_max   UI64_CONCAT(UI64_PREFIX,ui64_max) 
  -#define ui64_n2i   UI64_CONCAT(UI64_PREFIX,ui64_n2i) 
  -#define ui64_i2n   UI64_CONCAT(UI64_PREFIX,ui64_i2n) 
  -#define ui64_s2i   UI64_CONCAT(UI64_PREFIX,ui64_s2i) 
  -#define ui64_i2s   UI64_CONCAT(UI64_PREFIX,ui64_i2s) 
  -#define ui64_add   UI64_CONCAT(UI64_PREFIX,ui64_add) 
  +#define ui64_max   UI64_CONCAT(UI64_PREFIX,ui64_max)
  +#define ui64_n2i   UI64_CONCAT(UI64_PREFIX,ui64_n2i)
  +#define ui64_i2n   UI64_CONCAT(UI64_PREFIX,ui64_i2n)
  +#define ui64_s2i   UI64_CONCAT(UI64_PREFIX,ui64_s2i)
  +#define ui64_i2s   UI64_CONCAT(UI64_PREFIX,ui64_i2s)
  +#define ui64_add   UI64_CONCAT(UI64_PREFIX,ui64_add)
   #define ui64_addn  UI64_CONCAT(UI64_PREFIX,ui64_addn)
  -#define ui64_sub   UI64_CONCAT(UI64_PREFIX,ui64_sub) 
  +#define ui64_sub   UI64_CONCAT(UI64_PREFIX,ui64_sub)
   #define ui64_subn  UI64_CONCAT(UI64_PREFIX,ui64_subn)
  -#define ui64_mul   UI64_CONCAT(UI64_PREFIX,ui64_mul) 
  +#define ui64_mul   UI64_CONCAT(UI64_PREFIX,ui64_mul)
   #define ui64_muln  UI64_CONCAT(UI64_PREFIX,ui64_muln)
  -#define ui64_div   UI64_CONCAT(UI64_PREFIX,ui64_div) 
  +#define ui64_div   UI64_CONCAT(UI64_PREFIX,ui64_div)
   #define ui64_divn  UI64_CONCAT(UI64_PREFIX,ui64_divn)
  -#define ui64_and   UI64_CONCAT(UI64_PREFIX,ui64_and) 
  -#define ui64_or    UI64_CONCAT(UI64_PREFIX,ui64_or)  
  -#define ui64_xor   UI64_CONCAT(UI64_PREFIX,ui64_xor) 
  -#define ui64_not   UI64_CONCAT(UI64_PREFIX,ui64_not) 
  -#define ui64_rol   UI64_CONCAT(UI64_PREFIX,ui64_rol) 
  -#define ui64_ror   UI64_CONCAT(UI64_PREFIX,ui64_ror)  
  -#define ui64_len   UI64_CONCAT(UI64_PREFIX,ui64_len)  
  +#define ui64_and   UI64_CONCAT(UI64_PREFIX,ui64_and)
  +#define ui64_or    UI64_CONCAT(UI64_PREFIX,ui64_or)
  +#define ui64_xor   UI64_CONCAT(UI64_PREFIX,ui64_xor)
  +#define ui64_not   UI64_CONCAT(UI64_PREFIX,ui64_not)
  +#define ui64_rol   UI64_CONCAT(UI64_PREFIX,ui64_rol)
  +#define ui64_ror   UI64_CONCAT(UI64_PREFIX,ui64_ror)
  +#define ui64_len   UI64_CONCAT(UI64_PREFIX,ui64_len)
   #define ui64_cmp   UI64_CONCAT(UI64_PREFIX,ui64_cmp)
   #endif
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 24 12:04:09 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A0B43764D8; Mon, 24 Jan 2005 12:04:08 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tai/ tai.pod tai_cal.c tai_data.c tai_lib.c tai_p...
Message-Id: <20050124110408.A0B43764D8@mail.ossp.org>
Date: Mon, 24 Jan 2005 12:04:08 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Jan-2005 12:04:08
  Branch: HEAD                             Handle: 2005012411040700

  Modified files:
    ossp-pkg/tai            tai.pod tai_cal.c tai_data.c tai_lib.c tai_p.h

  Log:
    flush pending changes related to TAI to calendar transformations

  Summary:
    Revision    Changes     Path
    1.2         +8  -0      ossp-pkg/tai/tai.pod
    1.3         +151 -82    ossp-pkg/tai/tai_cal.c
    1.3         +6  -0      ossp-pkg/tai/tai_data.c
    1.9         +2  -2      ossp-pkg/tai/tai_lib.c
    1.5         +6  -4      ossp-pkg/tai/tai_p.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/tai/tai.pod
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 tai.pod
  --- ossp-pkg/tai/tai.pod	18 Apr 2002 09:10:45 -0000	1.1.1.1
  +++ ossp-pkg/tai/tai.pod	24 Jan 2005 11:04:07 -0000	1.2
  @@ -12,6 +12,14 @@
   =head1 DESCRIPTION
   
   ...
  +deci  10^(-1)
  +centi 10^(-2)
  +milli 10^(-3)
  +micro 10^(-6)
  +nano  10^(-9)
  +pico  10^(-12)
  +femto 10^(-15)
  +atto  10^(-18) (1000000000000000000)
   
   =head1 SEE ALSO
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/tai/tai_cal.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 tai_cal.c
  --- ossp-pkg/tai/tai_cal.c	23 Mar 2003 18:00:29 -0000	1.2
  +++ ossp-pkg/tai/tai_cal.c	24 Jan 2005 11:04:07 -0000	1.3
  @@ -30,60 +30,7 @@
   
   #include "tai.h"
   #include "tai_p.h"
  -
  -#if 0
  -struct leap {
  -    tai_ui64_t leapsec;
  -} tai_tab_leapsec[] = {
  -    { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 1972 Jun 30 23:59:60 + */
  -    { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 1972 Dec 31 23:59:60 + */
  -    { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 1973 Dec 31 23:59:60 + */
  -    { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 1974 Dec 31 23:59:60 + */
  -    { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 1975 Dec 31 23:59:60 + */
  -    { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 1976 Dec 31 23:59:60 + */
  -    { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 1977 Dec 31 23:59:60 + */
  -    { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 1978 Dec 31 23:59:60 + */
  -    { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 1979 Dec 31 23:59:60 + */
  -    { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 1981 Jun 30 23:59:60 + */
  -    { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 1982 Jun 30 23:59:60 + */
  -    { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 1983 Jun 30 23:59:60 + */
  -    { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 1985 Jun 30 23:59:60 + */
  -    { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 1987 Dec 31 23:59:60 + */
  -    { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 1989 Dec 31 23:59:60 + */
  -    { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 1990 Dec 31 23:59:60 + */
  -    { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 1992 Jun 30 23:59:60 + */
  -    { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 1993 Jun 30 23:59:60 + */
  -    { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 1994 Jun 30 23:59:60 + */
  -    { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 1995 Dec 31 23:59:60 + */
  -    { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 1997 Jun 30 23:59:60 + */
  -    { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }  /* 1998 Dec 31 23:59:60 + */
  -};
  -#endif
  -
  -#define TAI_CAL_SUNDAY       0
  -#define TAI_CAL_MONDAY       1
  -#define TAI_CAL_TUESDAY      2
  -#define TAI_CAL_WEDNESDAY    3
  -#define TAI_CAL_THURSDAY     4
  -#define TAI_CAL_FRIDAY       5
  -#define TAI_CAL_SATURDAY     6
  -
  -#define TAI_CAL_JANUARY      0
  -#define TAI_CAL_FEBRUARY     1
  -#define TAI_CAL_MARCH        2
  -#define TAI_CAL_APRIL        3
  -#define TAI_CAL_MAY          4
  -#define TAI_CAL_JUNE         5
  -#define TAI_CAL_JULY         6
  -#define TAI_CAL_AUGUST       7
  -#define TAI_CAL_SEPTEMBER    8
  -#define TAI_CAL_OCTOBER      9
  -#define TAI_CAL_NOVEMBER     10
  -#define TAI_CAL_DECEMBER     11
  -
  -#define TAI_EPOCH "9223372036854775808" /* 2^62 / 2 (=2^63) meaning 1972-01-01 00:00:00 UTC was 1972-01-01 00:00:10 TAI */
  -#define TAI_EPOCH_YEAR      1970
  -#define TAI_EPOCH_WDAY      TAI_CAL_THURSDAY
  +#include "tai_cal.h"
   
   /* the Gregorian calendar */
   #define TAI_CAL_SECS_PER_MIN      60
  @@ -96,59 +43,181 @@
   #define TAI_CAL_SECS_PER_DAY      (TAI_CAL_SECS_PER_HOUR * TAI_CAL_HOURS_PER_DAY)
   #define TAI_CAL_MONS_PER_YEAR     12
   
  -#define isleap(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0))
  +/* 2^64/2 (=2^63) meaning Thu 1972-01-01 00:00:00 UTC was Thu 1972-01-01 00:00:10 TAI */
  +#define TAI_EPOCH_BASE            "8000000000000000"
  +#define TAI_EPOCH_YEAR            1970
  +#define TAI_EPOCH_WDAY            TAI_CAL_THURSDAY
  +
  +/* A year that has 366 days instead of 365 days, is a leap year,
  +   February has 29 days instead of 28 in a leap year. Leap years fall on
  +   any year that either can be evenly divisible by 4 and is not evenly
  +   divisible by 100, or is evenly divisible by 400. For example, the
  +   year 2000 is a leap year, but 1900 is not. */
  +#define tai_cal_is_leap_year(y) \
  +    (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0))
  +#define tai_leapdays_between_years(y1,y2) \
  +    (  ((y1) / 4 - (y1) / 100 + (y1) / 400) \
  +     - ((y2) / 4 - (y2) / 100 + (y2) / 400))
  +
  +static const int tai_cal_mon_len[2][TAI_CAL_MONS_PER_YEAR] = {
  +    { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
  +    { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
  +};
   
  -tai_rc_t tai_tai2cal(tai_t *tai, int offset)
  +static const int tai_cal_year_len[2] = {
  +    TAI_CAL_DAYS_PER_NYEAR,
  +    TAI_CAL_DAYS_PER_LYEAR
  +};
  +
  +struct tai_leapsec_st {
  +    ui64_t trans;
  +    int corr;
  +} tai_tab_leapsec[] = {
  +    { ui64_cons(00,00,00,00,00,00,00,00), 1 }, /* 1972 Jun 30 23:59:60 */
  +    { ui64_cons(00,00,00,00,00,00,00,00), 1 }, /* 1972 Dec 31 23:59:60 */
  +    { ui64_cons(00,00,00,00,00,00,00,00), 1 }, /* 1973 Dec 31 23:59:60 */
  +    { ui64_cons(00,00,00,00,00,00,00,00), 1 }, /* 1974 Dec 31 23:59:60 */
  +    { ui64_cons(00,00,00,00,00,00,00,00), 1 }, /* 1975 Dec 31 23:59:60 */
  +    { ui64_cons(00,00,00,00,00,00,00,00), 1 }, /* 1976 Dec 31 23:59:60 */
  +    { ui64_cons(00,00,00,00,00,00,00,00), 1 }, /* 1977 Dec 31 23:59:60 */
  +    { ui64_cons(00,00,00,00,00,00,00,00), 1 }, /* 1978 Dec 31 23:59:60 */
  +    { ui64_cons(00,00,00,00,00,00,00,00), 1 }, /* 1979 Dec 31 23:59:60 */
  +    { ui64_cons(00,00,00,00,00,00,00,00), 1 }, /* 1981 Jun 30 23:59:60 */
  +    { ui64_cons(00,00,00,00,00,00,00,00), 1 }, /* 1982 Jun 30 23:59:60 */
  +    { ui64_cons(00,00,00,00,00,00,00,00), 1 }, /* 1983 Jun 30 23:59:60 */
  +    { ui64_cons(00,00,00,00,00,00,00,00), 1 }, /* 1985 Jun 30 23:59:60 */
  +    { ui64_cons(00,00,00,00,00,00,00,00), 1 }, /* 1987 Dec 31 23:59:60 */
  +    { ui64_cons(00,00,00,00,00,00,00,00), 1 }, /* 1989 Dec 31 23:59:60 */
  +    { ui64_cons(00,00,00,00,00,00,00,00), 1 }, /* 1990 Dec 31 23:59:60 */
  +    { ui64_cons(00,00,00,00,00,00,00,00), 1 }, /* 1992 Jun 30 23:59:60 */
  +    { ui64_cons(00,00,00,00,00,00,00,00), 1 }, /* 1993 Jun 30 23:59:60 */
  +    { ui64_cons(00,00,00,00,00,00,00,00), 1 }, /* 1994 Jun 30 23:59:60 */
  +    { ui64_cons(00,00,00,00,00,00,00,00), 1 }, /* 1995 Dec 31 23:59:60 */
  +    { ui64_cons(00,00,00,00,00,00,00,00), 1 }, /* 1997 Jun 30 23:59:60 */
  +    { ui64_cons(00,00,00,00,00,00,00,00), 1 }  /* 1998 Dec 31 23:59:60 */
  +};
  +
  +tai_rc_t tai_tai2cal(const tai_t *tai, tai_cal_t *cal, long offset, int isdst)
   {
  -    tai_ui64_t secs;
  -    tai_ui64_t days;
  -    tai_ui64_t rem;
  -    tai_ui64_t tmp;
  -    tai_ui64_t tmp2;
  -    int lshit;
  +    ui64_t secs;
  +    ui64_t days;
  +    ui64_t rem;
  +    ui64_t tmp;
  +    ui64_t tmp2;
  +    int ls_corr;
  +    int ls_hit;
  +    int cmp;
  +    int yleap;
  +    int year;
  +    int dyear;
  +    int ddays;
  +    int i;
   
  +    /* calculate (rounded) number of total seconds */
       secs = tai->sec;
  +    if (ui64_cmp(tai->asec, tai_half_sec_in_asec) > 0)
  +        ui64_addn(secs, 1, NULL);
   
  -    /* perform leap second correction */
  -    lshit = 0; /* FIXME */
  +    /* calculate involved leap seconds */
  +    ls_corr = 0;
  +    ls_hit  = 0;
  +    for (i = 0; i < (sizeof(tai_tab_leapsec)/sizeof(tai_tab_leapsec[0])); i++) {
  +        cmp = ui64_cmp(secs, tai_tab_leapsec[i].trans);
  +        if (cmp > 0)
  +            break;
  +        if (cmp == 0)
  +            ls_hit = tai_tab_leapsec[i].corr;
  +        ls_corr += tai_tab_leapsec[i].corr;
  +    }
  +    if (ls_corr > 0)
  +        secs = ui64_addn(secs, ls_corr, NULL);
  +    else
  +        secs = ui64_subn(secs, -ls_corr, NULL);
   
       /* perform timezone offset correction */
  -    secs = tai_ui64_addn(secs, offset, NULL);
  +    if (offset > 0)
  +        secs = ui64_addn(secs, offset, NULL);
  +    else
  +        secs = ui64_subn(secs, -offset, NULL);
  +    cal->offs = offset;
  +
  +    /* perform Daylight Saving Time (DST) offset correction */
  +    if (isdst)
  +        secs = ui64_addn(secs, 1, NULL); /* FIXME */
  +    cal->isdst = isdst;
   
       /* days = secs / TAI_CAL_SECS_PER_DAY
          rem  = secs % TAI_CAL_SECS_PER_DAY */
  -    tmp  = tai_ui64_n2i(TAI_CAL_SECS_PER_DAY);
  -    days = tai_ui64_div(secs, tmp, &rem);
  +    tmp  = ui64_n2i(TAI_CAL_SECS_PER_DAY);
  +    days = ui64_div(secs, tmp, &rem);
   
       /* hour = rem / TAI_CAL_SECS_PER_HOUR
          rem  = rem % TAI_CAL_SECS_PER_HOUR */
  -    tmp  = tai_ui64_n2i(TAI_CAL_SECS_PER_HOUR);
  -    tmp = tai_ui64_div(rem, tmp, &rem);
  -    tai->tai_hour = (int)tai_ui64_i2n(tmp);
  +    tmp = ui64_n2i(TAI_CAL_SECS_PER_HOUR);
  +    tmp = ui64_div(rem, tmp, &rem);
  +    cal->hour = (int)ui64_i2n(tmp);
   
       /* min = rem / TAI_CAL_SECS_PER_MIN
          rem = rem % TAI_CAL_SECS_PER_MIN */
  -    tmp  = tai_ui64_n2i(TAI_CAL_SECS_PER_MIN);
  -    tmp = tai_ui64_div(rem, tmp, &rem);
  -    tai->tai_min = (int)tai_ui64_i2n(tmp);
  +    tmp = ui64_n2i(TAI_CAL_SECS_PER_MIN);
  +    tmp = ui64_div(rem, tmp, &rem);
  +    cal->min = (int)ui64_i2n(tmp);
   
  -    /* sec = rem + lshit */
  -    tai->tai_sec = (int)tai_ui64_i2n(rem) + lshit;
  +    /* sec = rem + ls_hit */
  +    cal->sec = (int)ui64_i2n(rem) + ls_hit;
   
       /* wday = (TAI_EPOCH_WDAY + days) % TAI_CAL_DAYS_PER_WEEK */
       /* FIXME: TAI is not 0 on EPOCH */
  -    tmp = tai_ui64_addn(days, TAI_EPOCH_WDAY, NULL);
  -    tmp2 = tai_ui64_n2i(TAI_CAL_DAYS_PER_WEEK);
  -    tai_ui64_div(tmp, tmp2, &tmp);
  -    tai->tai_wday = (int)tai_ui64_i2n(tmp);
  +    tmp  = ui64_addn(days, TAI_EPOCH_WDAY, NULL);
  +    tmp2 = ui64_n2i(TAI_CAL_DAYS_PER_WEEK);
  +    ui64_div(tmp, tmp2, &tmp);
  +    cal->wday = (int)ui64_i2n(tmp);
  +
  +    /* What about the -10 offset in 1972 (epoch)? */
  +
  +    /* calculate year */
  +    epoch = ui64_s2i(TAI_EPOCH_BASE, NULL, 16);
  +    epoch = ui64_divn(epoch, TAI_CAL_SECS_PER_DAY, NULL);
  +    year = TAI_EPOCH_YEAR;
  +    if (ui64_cmp(days, epoch) > 0) {
  +        /* date after the epoch */
  +        ui64_sub(days, epoch, &days);
  +        dyear = ui64_i2n(ui64_div(days, ui64_n2i(TAI_CAL_DAYS_PER_NYEAR), NULL));
  +        ddays = ui64_muln(ui64_n2i(dyear), TAI_CAL_DAYS_PER_NYEAR);
  +        ddays = ui64_addn(ddays, tai_leapdays_between_years(year+dyear-1, year-1));
  +        days = ui64_sub(days, ddays, NULL);
  +        years += dyear;
  +    }
  +    else {
  +        /* date before the epoch */
  +        ui64_sub(epoch, days, &days);
  +        dyear = ui64_i2n(ui64_div(days, ui64_n2i(TAI_CAL_DAYS_PER_NYEAR), NULL));
  +        ddays = ui64_muln(ui64_n2i(dyear), TAI_CAL_DAYS_PER_NYEAR);
  +        ddays = ui64_addn(ddays, tai_leapdays_between_years(year+dyear-1, year-1));
  +        days = ui64_sub(days, ddays, NULL);
  +        years -= dyear;
  +    }
  +    cal->year = year;
  +
  +    /* calculate day of the year */
  +    cal->yday = ui64_i2n(days);
  +
  +    /* calculate month of the year */
  +    cal->mon = 0;
  +    while (days >= tai_cal_mon_len[yleap][cal->mon]) {
  +        days = ui64_subn(days, tai_cal_mon_len[yleap][cal->mon], NULL);
  +        cal->mon++;
  +    }
  +
  +    /* calculate day of the month */
  +    cal->mday = ui64_i2n(days) + 1;
   
  -    tai->tai_gmtoff = (long)offset;
  -    
       return TAI_OK;
   }
   
  -tai_rc_t tai_cal2tai(tai_t *tai)
  +tai_rc_t tai_cal2tai(tai_t *tai, const tai_cal_t *cal, long *offset, int *isdst)
   {
  +    /* FIXME: binary search with tai_tai2cal!! See mktime implementations!! */
       return TAI_OK;
   }
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/tai/tai_data.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 tai_data.c
  --- ossp-pkg/tai/tai_data.c	14 Aug 2002 14:28:27 -0000	1.2
  +++ ossp-pkg/tai/tai_data.c	24 Jan 2005 11:04:07 -0000	1.3
  @@ -36,6 +36,12 @@
   
   #include "tai_p.h"
   
  +/* ui64 representation of a full second in atto seconds, i.e. 10^(-18) atto-seconds */
  +ui64_t tai_full_sec_in_asec = ui64_cons(0D,E0,B6,B3,A7,64,00,00); 
  +
  +/* ui64 representation of a half second in atto seconds, i.e. (10^(-18)/2) atto-seconds */
  +ui64_t tai_half_sec_in_asec = ui64_cons(06,F0,5B,59,D3,B2,00,00);
  +
   #define LCTIME_SIZE (sizeof(tai_locale_t) / sizeof(char *))
   
   const tai_locale_t tai_locale = {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/tai/tai_lib.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 tai_lib.c
  --- ossp-pkg/tai/tai_lib.c	23 Mar 2003 18:00:29 -0000	1.8
  +++ ossp-pkg/tai/tai_lib.c	24 Jan 2005 11:04:07 -0000	1.9
  @@ -158,8 +158,8 @@
       else if (type == TAI_TYPE_UNIX) {
           /* import from time(3) FIXME */
           time_t t = time(NULL);
  -        tai->sec  = tai_ui64_n2i((unsigned long)t);
  -        tai->asec = tai_ui64_n2i((unsigned long)0);
  +        tai->sec  = ui64_n2i((unsigned long)t);
  +        tai->asec = ui64_n2i((unsigned long)0);
           tai_tai2cal(tai, 7200);
       }
       else
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/tai/tai_p.h
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 tai_p.h
  --- ossp-pkg/tai/tai_p.h	14 Aug 2002 14:28:27 -0000	1.4
  +++ ossp-pkg/tai/tai_p.h	24 Jan 2005 11:04:07 -0000	1.5
  @@ -34,6 +34,7 @@
   #include "config.h"
   #include "tai.h"
   #include "tai_ui64.h"
  +#include "tai_cal.h"
   
   struct tai_st {
       tai_ui64_t sec;    /* seconds (integral part) */
  @@ -73,12 +74,13 @@
   
   extern const tai_locale_t tai_locale;
   
  -#define TM_YEAR_BASE	1900
  -
   size_t  tai_format_int(char *const s, const size_t maxsize, const char *const format, const struct tm *const t);
   char   *tai_parse_int (const char *buf, const char *fmt, struct tm *tm);
   
  -tai_rc_t tai_tai2cal(tai_t *tai, int offset);
  -tai_rc_t tai_cal2tai(tai_t *tai);
  +tai_rc_t tai_tai2cal(const tai_t *tai,       tai_cal_t *cal, long  offset, int  isdst);
  +tai_rc_t tai_cal2tai(      tai_t *tai, const tai_cal_t *cal, long *offset, int *isdst);
  +
  +extern ui64_t tai_full_sec_in_asec;
  +extern ui64_t tai_half_sec_in_asec;
   
   #endif /* !_TIMELOCAL_H_ */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 24 12:04:35 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D0BB3764EF; Mon, 24 Jan 2005 12:04:34 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tai/ tai_cal.h
Message-Id: <20050124110434.D0BB3764EF@mail.ossp.org>
Date: Mon, 24 Jan 2005 12:04:34 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Jan-2005 12:04:34
  Branch: HEAD                             Handle: 2005012411043400

  Added files:
    ossp-pkg/tai            tai_cal.h

  Log:
    flush pending changes related to TAI to calendar transformations

  Summary:
    Revision    Changes     Path
    1.1         +71 -0      ossp-pkg/tai/tai_cal.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/tai/tai_cal.h
  ============================================================================
  $ cvs diff -u -r0 -r1.1 tai_cal.h
  --- /dev/null	2005-01-24 12:04:34 +0100
  +++ tai_cal.h	2005-01-24 12:04:34 +0100
  @@ -0,0 +1,71 @@
  +/*
  +**  OSSP tai - Time Handling
  +**  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**
  +**  This file is part of OSSP tai, a time handling library
  +**  which can be found at http://www.ossp.org/pkg/lib/tai/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  tai_cal.h: calendar calculations (header)
  +*/
  +
  +#ifndef __TAI_CAL_H__
  +#define __TAI_CAL_H__
  +
  +#define TAI_CAL_SUNDAY            0
  +#define TAI_CAL_MONDAY            1
  +#define TAI_CAL_TUESDAY           2
  +#define TAI_CAL_WEDNESDAY         3
  +#define TAI_CAL_THURSDAY          4
  +#define TAI_CAL_FRIDAY            5
  +#define TAI_CAL_SATURDAY          6
  +
  +#define TAI_CAL_JANUARY           0
  +#define TAI_CAL_FEBRUARY          1
  +#define TAI_CAL_MARCH             2
  +#define TAI_CAL_APRIL             3
  +#define TAI_CAL_MAY               4
  +#define TAI_CAL_JUNE              5
  +#define TAI_CAL_JULY              6
  +#define TAI_CAL_AUGUST            7
  +#define TAI_CAL_SEPTEMBER         8
  +#define TAI_CAL_OCTOBER           9
  +#define TAI_CAL_NOVEMBER          10
  +#define TAI_CAL_DECEMBER          11
  +
  +#define TAI_CAL_YEAR_BASE         1900
  +
  +typedef struct {
  +    int    sec;    /* seconds after the minute [0-61] */
  +    int    min;    /* minutes after the hour [0-59] */
  +    int    hour;   /* hours since midnight [0-23] */
  +    int    mday;   /* day of the month [1-31] */
  +    int    mon;    /* months since January [0-11] */
  +    int    year;   /* years since 1900 */
  +    int    wday;   /* days since Sunday [0-6] */
  +    int    yday;   /* days since January 1 [0-365] */
  +    long   offs;   /* offset from UTC+0 in seconds */
  +    int    isdst;  /* Daylight Savings Time flag */
  +} tai_cal_t;
  +
  +#endif /* __TAI_CAL_H__ */
  +
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 24 15:18:50 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6AFCC76491; Mon, 24 Jan 2005 15:18:50 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ ChangeLog aclocal.m4 cfg.ac cfg_fmt.c cfg_fm...
Message-Id: <20050124141850.6AFCC76491@mail.ossp.org>
Date: Mon, 24 Jan 2005 15:18:50 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Jan-2005 15:18:50
  Branch: HEAD                             Handle: 2005012414184800

  Modified files:
    ossp-pkg/cfg            ChangeLog aclocal.m4 cfg.ac cfg_fmt.c cfg_fmt.h
                            configure.ac

  Log:
    1. Fix va_list variable passing in cfg_fmt functions.
    2. Add Autoconf support for va_copy() detection.
    3. Accept new GNU Bison 2.0 as parser generator.

  Summary:
    Revision    Changes     Path
    1.31        +10 -1      ossp-pkg/cfg/ChangeLog
    1.7         +109 -0     ossp-pkg/cfg/aclocal.m4
    1.6         +3  -0      ossp-pkg/cfg/cfg.ac
    1.8         +4  -3      ossp-pkg/cfg/cfg_fmt.c
    1.7         +1  -1      ossp-pkg/cfg/cfg_fmt.h
    1.14        +1  -1      ossp-pkg/cfg/configure.ac
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	31 Dec 2004 19:16:24 -0000	1.30
  +++ ossp-pkg/cfg/ChangeLog	24 Jan 2005 14:18:48 -0000	1.31
  @@ -8,7 +8,16 @@
   
     CHANGELOG
   
  - Changes between 0.9.7 and 0.9.8 (19-Dec-2004 to xx-Jan-2005):
  + Changes between 0.9.7 and 0.9.8 (19-Dec-2004 to 24-Jan-2005):
  +
  +   *) Fix va_list variable passing in cfg_fmt functions.
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +   *) Add Autoconf support for va_copy() detection.
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +   *) Accept new GNU Bison 2.0 as parser generator.
  +      [Ralf S. Engelschall <rse@engelschall.com>]
   
      *) Adjust copyright messages for new year 2005.
         [Ralf S. Engelschall <rse@engelschall.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 aclocal.m4
  --- ossp-pkg/cfg/aclocal.m4	31 Dec 2004 19:16:25 -0000	1.6
  +++ ossp-pkg/cfg/aclocal.m4	24 Jan 2005 14:18:48 -0000	1.7
  @@ -305,3 +305,112 @@
   fi
   ])
   
  +dnl ##
  +dnl ##  Check for C99 va_copy() implementation
  +dnl ##  (and provide fallback implementation if neccessary)
  +dnl ##
  +dnl ##  configure.in:
  +dnl ##    AC_CHECK_VA_COPY
  +dnl ##  foo.c:
  +dnl ##    #include "config.h"
  +dnl ##    [...]
  +dnl ##    va_copy(d,s)
  +dnl ##
  +dnl ##  This check is rather complex: first because we really have to
  +dnl ##  try various possible implementations in sequence and second, we
  +dnl ##  cannot define a macro in config.h with parameters directly.
  +dnl ##
  +
  +dnl #   test program for va_copy() implementation
  +changequote(<<,>>)
  +m4_define(__va_copy_test, <<[
  +#include <stdlib.h>
  +#include <stdarg.h>
  +#include <string.h>
  +#define DO_VA_COPY(d, s) $1
  +void test(char *str, ...)
  +{
  +    va_list ap, ap2;
  +    int i;
  +    va_start(ap, str);
  +    DO_VA_COPY(ap2, ap);
  +    for (i = 1; i <= 9; i++) {
  +        int k = (int)va_arg(ap, int);
  +        if (k != i)
  +            abort();
  +    }
  +    DO_VA_COPY(ap, ap2);
  +    for (i = 1; i <= 9; i++) {
  +        int k = (int)va_arg(ap, int);
  +        if (k != i)
  +            abort();
  +    }
  +    va_end(ap);
  +}
  +int main(int argc, char *argv[])
  +{
  +    test("test", 1, 2, 3, 4, 5, 6, 7, 8, 9);
  +    exit(0);
  +}
  +]>>)
  +changequote([,])
  +
  +dnl #   test driver for va_copy() implementation
  +m4_define(__va_copy_check, [
  +    AH_VERBATIM($1,
  +[/* Predefined possible va_copy() implementation (id: $1) */
  +#define __VA_COPY_USE_$1(d, s) $2])
  +    if test ".$ac_cv_va_copy" = .; then
  +        AC_TRY_RUN(__va_copy_test($2), [ac_cv_va_copy="$1"])
  +    fi
  +])
  +
  +dnl #   Autoconf check for va_copy() implementation checking
  +AC_DEFUN(AC_CHECK_VA_COPY,[
  +  dnl #   provide Autoconf display check message
  +  AC_MSG_CHECKING(for va_copy() function)
  +  dnl #   check for various implementations in priorized sequence   
  +  AC_CACHE_VAL(ac_cv_va_copy, [
  +    ac_cv_va_copy=""
  +    dnl #   1. check for standardized C99 macro
  +    __va_copy_check(C99, [va_copy((d), (s))])
  +    dnl #   2. check for alternative/deprecated GCC macro
  +    __va_copy_check(GCM, [VA_COPY((d), (s))])
  +    dnl #   3. check for internal GCC macro (high-level define)
  +    __va_copy_check(GCH, [__va_copy((d), (s))])
  +    dnl #   4. check for internal GCC macro (built-in function)
  +    __va_copy_check(GCB, [__builtin_va_copy((d), (s))])
  +    dnl #   5. check for assignment approach (assuming va_list is a struct)
  +    __va_copy_check(ASS, [do { (d) = (s); } while (0)])
  +    dnl #   6. check for assignment approach (assuming va_list is a pointer)
  +    __va_copy_check(ASP, [do { *(d) = *(s); } while (0)])
  +    dnl #   7. check for memory copying approach (assuming va_list is a struct)
  +    __va_copy_check(CPS, [memcpy((void *)&(d), (void *)&(s)), sizeof((s))])
  +    dnl #   8. check for memory copying approach (assuming va_list is a pointer)
  +    __va_copy_check(CPP, [memcpy((void *)(d), (void *)(s)), sizeof(*(s))])
  +    if test ".$ac_cv_va_copy" = .; then
  +        AC_ERROR([no working implementation found])
  +    fi
  +  ])
  +  dnl #   optionally activate the fallback implementation
  +  if test ".$ac_cv_va_copy" = ".C99"; then
  +      AC_DEFINE(HAVE_VA_COPY, 1, [Define if va_copy() macro exists (and no fallback implementation is required)])
  +  fi
  +  dnl #   declare which fallback implementation to actually use
  +  AC_DEFINE_UNQUOTED([__VA_COPY_USE], [__VA_COPY_USE_$ac_cv_va_copy],
  +      [Define to id of used va_copy() implementation])
  +  dnl #   provide activation hook for fallback implementation
  +  AH_VERBATIM([__VA_COPY_ACTIVATION],
  +[/* Optional va_copy() implementation activation */
  +#ifndef HAVE_VA_COPY
  +#define va_copy(d, s) __VA_COPY_USE(d, s)
  +#endif
  +])
  +  dnl #   provide Autoconf display result message
  +  if test ".$ac_cv_va_copy" = ".C99"; then
  +      AC_MSG_RESULT([yes])
  +  else
  +      AC_MSG_RESULT([no (using fallback implementation)])
  +  fi
  +])
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg.ac
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 cfg.ac
  --- ossp-pkg/cfg/cfg.ac	31 Dec 2004 19:16:25 -0000	1.5
  +++ ossp-pkg/cfg/cfg.ac	24 Jan 2005 14:18:48 -0000	1.6
  @@ -53,5 +53,8 @@
       if test ".$ac_cv_with_perl" = ".yes" -a ".$PERL" = ".NA"; then
           AC_ERROR([required Perl interpreter not found in \$PATH])
       fi
  +
  +    dnl #   additional checks
  +    AC_CHECK_VA_COPY
   ])
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_fmt.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 cfg_fmt.c
  --- ossp-pkg/cfg/cfg_fmt.c	31 Dec 2004 19:16:25 -0000	1.7
  +++ ossp-pkg/cfg/cfg_fmt.c	24 Jan 2005 14:18:48 -0000	1.8
  @@ -97,6 +97,7 @@
   #include <string.h>
   #include <ctype.h>
   
  +#include "config.h"
   #include "cfg_fmt.h"
   
   /* types which are locally use */
  @@ -1040,7 +1041,7 @@
                       if (vbuff->format != NULL) {
                           vbuff->format(vbuff,
                                         &prefix_char, &pad_char, &s, &s_len,
  -                                      num_buf, NUM_BUF_SIZE, extinfo, *fmt, &ap);
  +                                      num_buf, NUM_BUF_SIZE, extinfo, *fmt, ap);
                           if (s == NULL)
                               return -1;
                       }
  @@ -1150,12 +1151,12 @@
       char *s;
       int rv;
   
  -    apbak = ap;
  +    va_copy(apbak, ap);
       if ((rv = cfg_fmt_vsprintf(NULL, -1, fmt, ap)) == -1)
           return NULL;
       if ((s = malloc(rv+1)) == NULL)
           return NULL;
  -    ap = apbak;
  +    va_copy(ap, apbak);
       if ((rv = cfg_fmt_vsprintf(s, rv+1, fmt, ap)) == -1)
           return NULL;
       return s;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_fmt.h
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 cfg_fmt.h
  --- ossp-pkg/cfg/cfg_fmt.h	31 Dec 2004 19:16:25 -0000	1.6
  +++ ossp-pkg/cfg/cfg_fmt.h	24 Jan 2005 14:18:48 -0000	1.7
  @@ -52,7 +52,7 @@
           int num_buf_size,                /* input  arg: temporary buffer len */
           char *extinfo,                   /* input  arg: extension information */
           char fmt_char,                   /* input  arg: current formatting character */
  -        va_list *ap                      /* in/out arg: variable argument pointer */
  +        va_list ap                       /* in/out arg: variable argument pointer */
       );
   
       /* arbitrary passed-through application data */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/configure.ac
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 configure.ac
  --- ossp-pkg/cfg/configure.ac	31 Dec 2004 19:16:25 -0000	1.13
  +++ ossp-pkg/cfg/configure.ac	24 Jan 2005 14:18:48 -0000	1.14
  @@ -41,7 +41,7 @@
   sinclude(libtool.m4)
   AC_PROG_LIBTOOL
   
  -AC_CHECK_BISON(BISON, 1.875d, [1.[[8-9]][[0-9]]|1.[[8-9]][[0-9]][[0-9]]])
  +AC_CHECK_BISON(BISON, 1.875d, [1.[[8-9]][[0-9]]|1.[[8-9]][[0-9]][[0-9]]]|[2.[[0-9]]])
   AC_CHECK_FLEX(FLEX, 2.5.31, [2.5.1[[0-9]]|2.5.[[2-9]][[0-9]]|2.[[6-9]].*])
   
   sinclude(cfg.ac)
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 24 15:25:22 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 75CE376491; Mon, 24 Jan 2005 15:25:22 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ ChangeLog cfg_node.c
Message-Id: <20050124142522.75CE376491@mail.ossp.org>
Date: Mon, 24 Jan 2005 15:25:22 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Jan-2005 15:25:22
  Branch: HEAD                             Handle: 2005012414252100

  Modified files:
    ossp-pkg/cfg            ChangeLog cfg_node.c

  Log:
    Remove debugging fprintf's from (still broken) cfg_node_select()
    function.

  Summary:
    Revision    Changes     Path
    1.32        +3  -0      ossp-pkg/cfg/ChangeLog
    1.26        +44 -0      ossp-pkg/cfg/cfg_node.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	24 Jan 2005 14:18:48 -0000	1.31
  +++ ossp-pkg/cfg/ChangeLog	24 Jan 2005 14:25:21 -0000	1.32
  @@ -10,6 +10,9 @@
   
    Changes between 0.9.7 and 0.9.8 (19-Dec-2004 to 24-Jan-2005):
   
  +   *) Remove debugging fprintf's from (still broken) cfg_node_select() function.
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
      *) Fix va_list variable passing in cfg_fmt functions.
         [Ralf S. Engelschall <rse@engelschall.com>]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_node.c
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 cfg_node.c
  --- ossp-pkg/cfg/cfg_node.c	31 Dec 2004 19:16:25 -0000	1.25
  +++ ossp-pkg/cfg/cfg_node.c	24 Jan 2005 14:25:21 -0000	1.26
  @@ -427,17 +427,21 @@
   {
       cfg_rc_t rc;
   
  +#if 0
       fprintf(stderr, "      step3: (1) cpSel=\"%s\", nSel=%d, spec=\"%s\", nFilMin=%ld, nFilMax=%ld, nFound=%ld\n",
               cpSel, nSel, spec, nFilMin, nFilMax, *nFound);
  +#endif
   
       if (spec[0] == '\0') {
           /* end of selection, node found */
           (*nFound)++;
  +#if 0
           fprintf(stderr, "      step3: (2) found node!!\n");
           fprintf(stderr, "      step3:     current node=0x%lx type=%s token=\"%s\"\n",
                   (unsigned long)node,
                   (node != NULL ? (node->type == CFG_NODE_TYPE_SEQ ? "SEQ" : (node->type == CFG_NODE_TYPE_DIR ? "DIR" : "ARG")) : "<NULL>/.."),
                   (node != NULL ? (node->token != NULL ? node->token : "<NULL>") : "<NULL>/.."));
  +#endif
           if (nFilMin <= *nFound && *nFound <= nFilMax) {
               if (result_len != NULL) {
                   (*result_len)++;
  @@ -474,61 +478,79 @@
       cfg_node_t *node2;
       cfg_node_type_t type;
   
  +#if 0
       fprintf(stderr, "    step2: (1) cpSel=\"%.*s\", nSel=%d, spec=\"%s\", nFilMin=%ld, nFilMax=%ld, nFound=%ld\n",
               nSel, cpSel, nSel, spec, nFilMin, nFilMax, *nFound);
       fprintf(stderr, "    step2:     current node=0x%lx type=%s token=\"%s\"\n",
               (unsigned long)node,
               (node != NULL ? (node->type == CFG_NODE_TYPE_SEQ ? "SEQ" : (node->type == CFG_NODE_TYPE_DIR ? "DIR" : "ARG")) : "<NULL>/.."),
               (node != NULL ? (node->token != NULL ? node->token : "<NULL>") : "<NULL>/.."));
  +#endif
   
       rc = CFG_OK;
       if (nSel == 1 && strncmp(cpSel, ".", nSel) == 0) {
           /* current node (no-op) */
  +#if 0
           fprintf(stderr, "    step2: search current node, starting at node 0x%lx\n", (unsigned long)node);
  +#endif
           rc = cfg_node_select_step3(cfg, node, result_vec, result_len, spec, cpSel, nSel, nFilMin, nFilMax, nFound);
       }
       else if (nSel == 2 && strncmp(cpSel, "..", nSel) == 0) {
           /* parent node */
  +#if 0
           fprintf(stderr, "    step2: search parent node, starting at node 0x%lx\n", (unsigned long)node);
  +#endif
           if (cfg_node_get(cfg, node, CFG_NODE_ATTR_PARENT, &node) == CFG_OK && node != NULL)
               rc = cfg_node_select_step3(cfg, node, result_vec, result_len, spec, cpSel, nSel, nFilMin, nFilMax, nFound);
       }
       else if (nSel == 4 && strncmp(cpSel, "....", nSel) == 0) {
           /* anchestor nodes */
  +#if 0
           fprintf(stderr, "    step2: search ancestor nodes, starting at node 0x%lx\n", (unsigned long)node);
  +#endif
           while (cfg_node_get(cfg, node, CFG_NODE_ATTR_PARENT, &node) == CFG_OK && node != NULL)
               if ((rc = cfg_node_select_step3(cfg, node, result_vec, result_len, spec, cpSel, nSel, nFilMin, nFilMax, nFound)) != CFG_OK)
                   break;
       }
       else if (nSel == 1 && strncmp(cpSel, "-", nSel) == 0) {
           /* previous sibling node */
  +#if 0
           fprintf(stderr, "    step2: search previous sibling node, starting at node 0x%lx\n", (unsigned long)node);
  +#endif
           if ((rc = cfg_node_get(cfg, node, CFG_NODE_ATTR_LBROTH, &node)) == CFG_OK && node != NULL)
               rc = cfg_node_select_step3(cfg, node, result_vec, result_len, spec, cpSel, nSel, nFilMin, nFilMax, nFound);
       }
       else if (nSel == 2 && strncmp(cpSel, "--", nSel) == 0) {
           /* preceeding sibling nodes */
  +#if 0
           fprintf(stderr, "    step2: search preceeding sibling nodes, starting at node 0x%lx\n", (unsigned long)node);
  +#endif
           while (cfg_node_get(cfg, node, CFG_NODE_ATTR_LBROTH, &node) == CFG_OK && node != NULL)
               if ((rc = cfg_node_select_step3(cfg, node, result_vec, result_len, spec, cpSel, nSel, nFilMin, nFilMax, nFound)) != CFG_OK)
                   break;
       }
       else if (nSel == 1 && strncmp(cpSel, "+", nSel) == 0) {
           /* next sibling node */
  +#if 0
           fprintf(stderr, "    step2: search next sibling node, starting at node 0x%lx\n", (unsigned long)node);
  +#endif
           if ((rc = cfg_node_get(cfg, node, CFG_NODE_ATTR_RBROTH, &node)) == CFG_OK && node != NULL)
               rc = cfg_node_select_step3(cfg, node, result_vec, result_len, spec, cpSel, nSel, nFilMin, nFilMax, nFound);
       }
       else if (nSel == 2 && strncmp(cpSel, "++", nSel) == 0) {
           /* following sibling nodes */
  +#if 0
           fprintf(stderr, "    step2: search following sibling nodes, starting at node 0x%lx\n", (unsigned long)node);
  +#endif
           while (cfg_node_get(cfg, node, CFG_NODE_ATTR_RBROTH, &node) == CFG_OK && node != NULL)
               if ((rc = cfg_node_select_step3(cfg, node, result_vec, result_len, spec, cpSel, nSel, nFilMin, nFilMax, nFound)) != CFG_OK)
                   break;
       }
       else if (nSel == 0 /* "//" */) {
           /* descendant nodes */
  +#if 0
           fprintf(stderr, "    step2: search descendant nodes, starting at node 0x%lx\n", (unsigned long)node);
  +#endif
   #if 0 /* FIXME */
           if ((rc = cfg_node_apply(cfg, node, NULL, NULL, cfg_node_select_step2_descendant, &descendant_ctx)
               cfg_rc_t cfg_node_select_step2_descendant(cfg_t *cfg, cfg_node_t *node, void *_ctx));
  @@ -545,7 +567,9 @@
       }
       else {
           /* child node */
  +#if 0
           fprintf(stderr, "    step2: search child nodes, starting at node 0x%lx\n", (unsigned long)node);
  +#endif
           if ((rc = cfg_node_get(cfg, node, CFG_NODE_ATTR_CHILD1, &node)) == CFG_OK && node != NULL) {
               do {
                   if ((rc = cfg_node_get(cfg, node, CFG_NODE_ATTR_TOKEN, &token)) != CFG_OK)
  @@ -558,7 +582,9 @@
                   }
                   if (token != NULL) {
                       size_t l = strlen(token);
  +#if 0
                       fprintf(stderr, "    step2: compare child node: token \"%s\"\n", token);
  +#endif
                       if (   (l == 1 && nSel == 1 && token[0] == '*')
                           || (l == nSel && strncmp(token, cpSel, nSel) == 0)) {
                           if ((rc = cfg_node_select_step3(cfg, node, result_vec, result_len, spec, cpSel, nSel, nFilMin, nFilMax, nFound)) != CFG_OK)
  @@ -588,7 +614,9 @@
       cfg_rc_t rc;
       long nFound;
   
  +#if 0
       fprintf(stderr, "  step1: (0) spec=\"%s\"\n", spec);
  +#endif
   
       /* stop processing if spec is empty */
       if (spec[0] == '\0')
  @@ -625,18 +653,24 @@
           cp++;
       spec = cp;
   
  +#if 0
       fprintf(stderr, "  step1: (1) cpSel=\"%s\", nSel=%d, spec=\"%s\", nFilMin=%ld, nFilMax=%ld\n",
               cpSel, nSel, spec, nFilMin, nFilMax);
  +#endif
   
       /* perform pre-selection if filter range is relative to last element */
       if (nFilMin < 0 || nFilMax < 0) {
           nFound = 0;
  +#if 0
           fprintf(stderr, "  step1: pre-selection start\n");
  +#endif
           if ((rc = cfg_node_select_step2(cfg, node, NULL, NULL, spec, cpSel, nSel, 1, LONG_MAX, &nFound)) != CFG_OK)
               return rc;
  +#if 0
           fprintf(stderr, "  step1: (1b) cpSel=\"%s\", nSel=%d, spec=\"%s\", nFilMin=%ld, nFilMax=%ld nFound=%ld\n", 
                   cpSel, nSel, spec, nFilMin, nFilMax, nFound);
           fprintf(stderr, "  step1: pre-selection end\n");
  +#endif
           if (nFound == 0)
               return CFG_OK;
           if (nFilMin < 0) {
  @@ -651,16 +685,20 @@
           }
       }
   
  +#if 0
       fprintf(stderr, "  step1: (2) cpSel=\"%s\", nSel=%d, spec=\"%s\", nFilMin=%ld, nFilMax=%ld\n",
               cpSel, nSel, spec, nFilMin, nFilMax);
  +#endif
   
       /* perform real selection */
       nFound = 0;
       if ((rc = cfg_node_select_step2(cfg, node, result_vec, result_len, spec, cpSel, nSel, nFilMin, nFilMax, &nFound)) != CFG_OK)
           return rc;
   
  +#if 0
       fprintf(stderr, "  step1: (3) cpSel=\"%s\", nSel=%d, spec=\"%s\", nFilMin=%ld, nFilMax=%ld nFound=%ld\n",
               cpSel, nSel, spec, nFilMin, nFilMax, nFound);
  +#endif
   
       return CFG_OK;
   }
  @@ -690,7 +728,9 @@
       va_end(ap);
       if (spec == NULL)
           return CFG_ERR_FMT;
  +#if 0
       fprintf(stderr, "select: (1) spec=\"%s\"\n", spec);
  +#endif
   
       /* special cases for absolute (start from root-node) selection */
       cp = spec;
  @@ -705,7 +745,9 @@
           /* <NULL, "..."> is same as <root, "..."> */
           node = cfg->root;
       }
  +#if 0
       fprintf(stderr, "select: (2) spec=\"%s\"\n", cp);
  +#endif
   
       /* initialize result node array */
       result_len = 0;
  @@ -718,7 +760,9 @@
           free(*result_vec);
           return rc;
       }
  +#if 0
       fprintf(stderr, "select: (3) result_len=%ld\n", result_len);
  +#endif
   
       return CFG_OK;
   }
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 24 15:33:13 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 46B1B76431; Mon, 24 Jan 2005 15:33:13 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ cfg_grid.c
Message-Id: <20050124143313.46B1B76431@mail.ossp.org>
Date: Mon, 24 Jan 2005 15:33:13 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Jan-2005 15:33:13
  Branch: HEAD                             Handle: 2005012414331200

  Modified files:
    ossp-pkg/cfg            cfg_grid.c

  Log:
    double-casting to get rid of 'cast increases required alignment of
    target type' warnings from GCC which are fine but not true in this
    case because the stuff is properly aligned

  Summary:
    Revision    Changes     Path
    1.8         +3  -3      ossp-pkg/cfg/cfg_grid.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_grid.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 cfg_grid.c
  --- ossp-pkg/cfg/cfg_grid.c	31 Dec 2004 19:16:25 -0000	1.7
  +++ ossp-pkg/cfg/cfg_grid.c	24 Jan 2005 14:33:12 -0000	1.8
  @@ -110,7 +110,7 @@
   #define CFG_RING_ELEM(type) \
       struct { type *next; type *prev; }
   #define CFG_RING_SENTINEL(hp, type, field) \
  -    (type *)((char *)(hp) - ((size_t)(&((type *)0)->field)))
  +    (type *)(void *)((char *)(hp) - ((size_t)(&((type *)0)->field)))
   #define CFG_RING_INIT(hp, type, field) \
       do { CFG_RING_FIRST((hp)) = CFG_RING_SENTINEL((hp), type, field); \
            CFG_RING_LAST((hp))  = CFG_RING_SENTINEL((hp), type, field); } while (0)
  @@ -238,7 +238,7 @@
   
       /* initialize first segment */
       CFG_RING_ELEM_INIT(seg, gs_link);
  -    seg->gs_tile_base = (cfg_grid_tile_t *)((char *)seg + seg_top_size);
  +    seg->gs_tile_base = (cfg_grid_tile_t *)(void *)((char *)seg + seg_top_size);
       seg->gs_tile_num = tile_num;
       CFG_LIST_ELEM_INIT(seg->gs_tile_base, gt_link);
       CFG_LIST_INIT(&seg->gs_tile_free_list);
  @@ -248,7 +248,7 @@
       /* initialize free tile list in first segment */
       tile = CFG_LIST_FIRST(&seg->gs_tile_free_list);
       for (i = 0; i < seg->gs_tile_free_num-1; i++) {
  -        CFG_LIST_NEXT(tile, gt_link) = (cfg_grid_tile_t *)((char *)tile+tile_size);
  +        CFG_LIST_NEXT(tile, gt_link) = (cfg_grid_tile_t *)(void *)((char *)tile+tile_size);
           tile = CFG_LIST_NEXT(tile, gt_link);
       }
       CFG_LIST_NEXT(tile, gt_link) = NULL;
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 24 15:35:56 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F3DBF7648B; Mon, 24 Jan 2005 15:35:55 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ README cfg_vers.c ossp-pkg/cfg/perl/ cfg.pm
Message-Id: <20050124143555.F3DBF7648B@mail.ossp.org>
Date: Mon, 24 Jan 2005 15:35:55 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Jan-2005 15:35:55
  Branch: HEAD                             Handle: 2005012414355401

  Modified files:
    ossp-pkg/cfg            README cfg_vers.c
    ossp-pkg/cfg/perl       cfg.pm

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.16        +1  -1      ossp-pkg/cfg/README
    1.14        +9  -9      ossp-pkg/cfg/cfg_vers.c
    1.13        +1  -1      ossp-pkg/cfg/perl/cfg.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/README
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 README
  --- ossp-pkg/cfg/README	31 Dec 2004 19:16:25 -0000	1.15
  +++ ossp-pkg/cfg/README	24 Jan 2005 14:35:54 -0000	1.16
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \___|_|  \__, |
                                                |___/
     OSSP cfg - Configuration Parsing
  -  Version 0.9.7 (19-Dec-2004)
  +  Version 0.9.8 (24-Jan-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_vers.c
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 cfg_vers.c
  --- ossp-pkg/cfg/cfg_vers.c	19 Dec 2004 19:36:46 -0000	1.13
  +++ ossp-pkg/cfg/cfg_vers.c	24 Jan 2005 14:35:54 -0000	1.14
  @@ -8,7 +8,7 @@
   #ifndef _CFG_VERS_C_
   #define _CFG_VERS_C_
   
  -#define __CFG_VERSION 0x009207
  +#define __CFG_VERSION 0x009208
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _CFG_VERS_C_AS_HEADER_
   
   __cfg_version_t __cfg_version = {
  -    0x009207,
  -    "0.9.7",
  -    "0.9.7 (19-Dec-2004)",
  -    "This is OSSP cfg, Version 0.9.7 (19-Dec-2004)",
  -    "OSSP cfg 0.9.7 (19-Dec-2004)",
  -    "OSSP cfg/0.9.7",
  -    "@(#)OSSP cfg 0.9.7 (19-Dec-2004)",
  -    "$Id: cfg_vers.c,v 1.13 2004/12/19 19:36:46 rse Exp $"
  +    0x009208,
  +    "0.9.8",
  +    "0.9.8 (24-Jan-2005)",
  +    "This is OSSP cfg, Version 0.9.8 (24-Jan-2005)",
  +    "OSSP cfg 0.9.8 (24-Jan-2005)",
  +    "OSSP cfg/0.9.8",
  +    "@(#)OSSP cfg 0.9.8 (24-Jan-2005)",
  +    "$Id: cfg_vers.c,v 1.14 2005/01/24 14:35:54 rse Exp $"
   };
   
   #endif /* _CFG_VERS_C_AS_HEADER_ */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/cfg.pm
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 cfg.pm
  --- ossp-pkg/cfg/perl/cfg.pm	31 Dec 2004 19:16:34 -0000	1.12
  +++ ossp-pkg/cfg/perl/cfg.pm	24 Jan 2005 14:35:55 -0000	1.13
  @@ -42,7 +42,7 @@
   ##
   
   #   API version
  -our $VERSION = do { my @v = ('0.9.7' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
  +our $VERSION = do { my @v = ('0.9.8' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
   
   #   API inheritance
   our @ISA = qw(Exporter);
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 24 15:55:11 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E02C87648B; Mon, 24 Jan 2005 15:55:10 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/cfg/ index.wml oss...
Message-Id: <20050124145510.E02C87648B@mail.ossp.org>
Date: Mon, 24 Jan 2005 15:55:10 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   24-Jan-2005 15:55:10
  Branch: HEAD                             Handle: 2005012414550901

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/cfg    index.wml

  Log:
    release OSSP cfg 0.9.8

  Summary:
    Revision    Changes     Path
    1.118       +1  -0      ossp-web/new/news.txt
    1.14        +2  -2      ossp-web/pkg/lib/cfg/index.wml
    1.99        +1  -1      ossp-web/pkg/lib/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.117 -r1.118 news.txt
  --- ossp-web/new/news.txt	23 Jan 2005 13:24:55 -0000	1.117
  +++ ossp-web/new/news.txt	24 Jan 2005 14:55:09 -0000	1.118
  @@ -1,3 +1,4 @@
  +24-Jan-2005: Released L<OSSP cfg> 0.9.8
   23-Jan-2005: Released L<OSSP uuid> 1.2.0
   13-Jan-2005: Released T<OSSP svs> 1.0.1
   13-Jan-2005: Released L<OSSP uuid> 1.1.2
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/cfg/index.wml
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 index.wml
  --- ossp-web/pkg/lib/cfg/index.wml	19 Dec 2004 19:38:26 -0000	1.13
  +++ ossp-web/pkg/lib/cfg/index.wml	24 Jan 2005 14:55:10 -0000	1.14
  @@ -36,7 +36,7 @@
   <pkg_status
       name="cfg" assign="rse"
       stable="none"    stable_date="none"
  -    unstable="0.9.7" unstable_date="19-Dec-2004"
  +    unstable="0.9.8" unstable_date="24-Jan-2005"
   	done=95>
   
   <h2>Source</h2>
  @@ -46,7 +46,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/cfg/
       directory=$(FTP_ROOT_DIR)/pkg/lib/cfg/
       files="cfg-*.tar.gz" 
  -	stable="none" unstable="cfg-0.9.7.tar.gz">
  +	stable="none" unstable="cfg-0.9.8.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.98 -r1.99 index.wml
  --- ossp-web/pkg/lib/index.wml	23 Jan 2005 13:24:55 -0000	1.98
  +++ ossp-web/pkg/lib/index.wml	24 Jan 2005 14:55:09 -0000	1.99
  @@ -54,7 +54,7 @@
   			done=95 stable=none unstable=0.9.2>
     <pkg_item name="cfg" longname="OSSP cfg" type="lib"
               desc="Configuration Parsing"
  -			done=95 stable=none unstable=0.9.7>
  +			done=95 stable=none unstable=0.9.8>
     <pkg_item name="act" longname="OSSP act" type="lib"
               desc="Abstract Container Types"
   			done=25 stable=none unstable=none>
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 24 16:03:27 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2E4427642D; Mon, 24 Jan 2005 16:03:27 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ ChangeLog LICENSE Makefile.in README aclocal....
Message-Id: <20050124150327.2E4427642D@mail.ossp.org>
Date: Mon, 24 Jan 2005 16:03:27 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Jan-2005 16:03:27
  Branch: HEAD                             Handle: 2005012415031701

  Modified files:
    ossp-pkg/l2             ChangeLog LICENSE Makefile.in README aclocal.m4
                            configure.ac devtool.conf devtool.func
                            l2-config.in l2-config.pod l2.h.in l2.m4 l2.pod
                            l2_ch_buffer.c l2_ch_fd.c l2_ch_file.c
                            l2_ch_filter.c l2_ch_irc.c l2_ch_noop.c
                            l2_ch_null.c l2_ch_pipe.c l2_ch_prefix.c
                            l2_ch_smtp.c l2_ch_socket.c l2_ch_syslog.c
                            l2_channel.c l2_env.c l2_p.h l2_spec.c l2_spec.h
                            l2_spec_parse.y l2_spec_scan.l l2_test.c
                            l2_ut_fmtcb.c l2_ut_format.c l2_ut_format.h
                            l2_ut_level.c l2_ut_param.c l2_ut_sa.ac l2_ut_sa.c
                            l2_ut_sa.h l2tool.c l2tool.pod

  Log:
    Adjust copyright messages for new year 2005.

  Summary:
    Revision    Changes     Path
    1.18        +5  -0      ossp-pkg/l2/ChangeLog
    1.6         +3  -3      ossp-pkg/l2/LICENSE
    1.48        +3  -3      ossp-pkg/l2/Makefile.in
    1.19        +3  -3      ossp-pkg/l2/README
    1.16        +3  -3      ossp-pkg/l2/aclocal.m4
    1.28        +6  -6      ossp-pkg/l2/configure.ac
    1.17        +3  -3      ossp-pkg/l2/devtool.conf
    1.6         +1  -1      ossp-pkg/l2/devtool.func
    1.8         +3  -3      ossp-pkg/l2/l2-config.in
    1.8         +3  -3      ossp-pkg/l2/l2-config.pod
    1.33        +3  -3      ossp-pkg/l2/l2.h.in
    1.7         +3  -3      ossp-pkg/l2/l2.m4
    1.17        +3  -3      ossp-pkg/l2/l2.pod
    1.39        +3  -3      ossp-pkg/l2/l2_ch_buffer.c
    1.18        +3  -3      ossp-pkg/l2/l2_ch_fd.c
    1.32        +3  -3      ossp-pkg/l2/l2_ch_file.c
    1.20        +3  -3      ossp-pkg/l2/l2_ch_filter.c
    1.9         +3  -3      ossp-pkg/l2/l2_ch_irc.c
    1.6         +3  -3      ossp-pkg/l2/l2_ch_noop.c
    1.14        +3  -3      ossp-pkg/l2/l2_ch_null.c
    1.32        +3  -3      ossp-pkg/l2/l2_ch_pipe.c
    1.26        +3  -3      ossp-pkg/l2/l2_ch_prefix.c
    1.12        +3  -3      ossp-pkg/l2/l2_ch_smtp.c
    1.39        +3  -3      ossp-pkg/l2/l2_ch_socket.c
    1.34        +3  -3      ossp-pkg/l2/l2_ch_syslog.c
    1.34        +3  -3      ossp-pkg/l2/l2_channel.c
    1.11        +3  -3      ossp-pkg/l2/l2_env.c
    1.36        +3  -3      ossp-pkg/l2/l2_p.h
    1.11        +3  -3      ossp-pkg/l2/l2_spec.c
    1.5         +3  -3      ossp-pkg/l2/l2_spec.h
    1.12        +3  -3      ossp-pkg/l2/l2_spec_parse.y
    1.14        +3  -3      ossp-pkg/l2/l2_spec_scan.l
    1.55        +3  -3      ossp-pkg/l2/l2_test.c
    1.8         +3  -3      ossp-pkg/l2/l2_ut_fmtcb.c
    1.10        +3  -3      ossp-pkg/l2/l2_ut_format.c
    1.5         +3  -3      ossp-pkg/l2/l2_ut_format.h
    1.10        +3  -3      ossp-pkg/l2/l2_ut_level.c
    1.12        +3  -3      ossp-pkg/l2/l2_ut_param.c
    1.10        +3  -3      ossp-pkg/l2/l2_ut_sa.ac
    1.26        +3  -3      ossp-pkg/l2/l2_ut_sa.c
    1.23        +3  -3      ossp-pkg/l2/l2_ut_sa.h
    1.6         +3  -3      ossp-pkg/l2/l2tool.c
    1.5         +3  -3      ossp-pkg/l2/l2tool.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 ChangeLog
  --- ossp-pkg/l2/ChangeLog	23 Apr 2004 10:32:47 -0000	1.17
  +++ ossp-pkg/l2/ChangeLog	24 Jan 2005 15:03:17 -0000	1.18
  @@ -9,6 +9,11 @@
     ChangeLog
     =========
   
  +  Changes between 0.9.8 and 0.9.9 (22-Apr-2004 to 24-Jan-2005)
  +
  +    *) Adjust copyright messages for new year 2005.
  +       [Ralf S. Engelschall <rse@engelschall.com>]
  +
     Changes between 0.9.7 and 0.9.8 (22-Apr-2004 to 22-Apr-2004)
   
       *) Change devtool.conf %import of OSSP sa to inject a faked
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/LICENSE
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 LICENSE
  --- ossp-pkg/l2/LICENSE	6 Jan 2003 11:41:51 -0000	1.5
  +++ ossp-pkg/l2/LICENSE	24 Jan 2005 15:03:17 -0000	1.6
  @@ -1,9 +1,9 @@
   
     OSSP l2 - Flexible Logging
   
  -  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  -  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   
     This file is part of OSSP l2, a flexible logging library which
     can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.47 -r1.48 Makefile.in
  --- ossp-pkg/l2/Makefile.in	6 Jan 2003 11:41:51 -0000	1.47
  +++ ossp-pkg/l2/Makefile.in	24 Jan 2005 15:03:17 -0000	1.48
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP l2 - Flexible Logging
  -##  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  -##  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of OSSP l2, a flexible logging library which
   ##  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/README
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 README
  --- ossp-pkg/l2/README	22 Apr 2004 15:48:06 -0000	1.18
  +++ ossp-pkg/l2/README	24 Jan 2005 15:03:17 -0000	1.19
  @@ -32,9 +32,9 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  -  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   
     This file is part of OSSP l2, a flexible logging library which
     can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 aclocal.m4
  --- ossp-pkg/l2/aclocal.m4	6 Nov 2003 15:26:38 -0000	1.15
  +++ ossp-pkg/l2/aclocal.m4	24 Jan 2005 15:03:17 -0000	1.16
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP l2 - Flexible Logging
  -dnl ##  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  -dnl ##  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -dnl ##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +dnl ##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##
   dnl ##  This file is part of OSSP l2, a flexible logging library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/configure.ac
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 configure.ac
  --- ossp-pkg/l2/configure.ac	6 Jan 2003 11:41:51 -0000	1.27
  +++ ossp-pkg/l2/configure.ac	24 Jan 2005 15:03:17 -0000	1.28
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP l2 - Flexible Logging
  -dnl ##  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  -dnl ##  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -dnl ##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +dnl ##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##
   dnl ##  This file is part of OSSP l2, a flexible logging library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ -33,9 +33,9 @@
   AC_HEADLINE(dnl
   OSSP l2, Flexible Logging, dnl
   L2_VERSION, l2_version.c, dnl
  -[Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -Copyright (c) 2001-2003 Ralf S. Engelschall (rse@engelschall.com)
  -Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH])
  +[Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +Copyright (c) 2001-2004 Ralf S. Engelschall (rse@engelschall.com)
  +Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>])
   AC_PREFIX_DEFAULT(/usr/local)
   AC_PLATFORM(PLATFORM)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 devtool.conf
  --- ossp-pkg/l2/devtool.conf	22 Apr 2004 15:46:34 -0000	1.16
  +++ ossp-pkg/l2/devtool.conf	24 Jan 2005 15:03:17 -0000	1.17
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP l2 - Flexible Logging
  -##  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  -##  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of OSSP l2, a flexible logging library which
   ##  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/devtool.func
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 devtool.func
  --- ossp-pkg/l2/devtool.func	27 Jan 2003 16:29:31 -0000	1.5
  +++ ossp-pkg/l2/devtool.func	24 Jan 2005 15:03:17 -0000	1.6
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   devtool_require () {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2-config.in
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 l2-config.in
  --- ossp-pkg/l2/l2-config.in	6 Jan 2003 11:41:51 -0000	1.7
  +++ ossp-pkg/l2/l2-config.in	24 Jan 2005 15:03:17 -0000	1.8
  @@ -1,9 +1,9 @@
   #!/bin/sh
   ##
   ##  OSSP l2 - Flexible Logging
  -##  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  -##  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of OSSP l2, a flexible logging library which
   ##  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2-config.pod
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 l2-config.pod
  --- ossp-pkg/l2/l2-config.pod	6 Jan 2003 11:41:51 -0000	1.7
  +++ ossp-pkg/l2/l2-config.pod	24 Jan 2005 15:03:17 -0000	1.8
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP l2 - Flexible Logging
  -##  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  -##  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of OSSP l2, a flexible logging library which
   ##  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2.h.in
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 l2.h.in
  --- ossp-pkg/l2/l2.h.in	10 Nov 2003 15:12:48 -0000	1.32
  +++ ossp-pkg/l2/l2.h.in	24 Jan 2005 15:03:17 -0000	1.33
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  -**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2.m4
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 l2.m4
  --- ossp-pkg/l2/l2.m4	6 Jan 2003 11:41:51 -0000	1.6
  +++ ossp-pkg/l2/l2.m4	24 Jan 2005 15:03:17 -0000	1.7
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP l2 - Flexible Logging
  -dnl ##  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  -dnl ##  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -dnl ##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +dnl ##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##
   dnl ##  This file is part of OSSP l2, a flexible logging library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2.pod
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 l2.pod
  --- ossp-pkg/l2/l2.pod	17 Feb 2004 09:21:04 -0000	1.16
  +++ ossp-pkg/l2/l2.pod	24 Jan 2005 15:03:17 -0000	1.17
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP l2 - Flexible Logging
  -##  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  -##  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of OSSP l2, a flexible logging library which
   ##  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_buffer.c
  ============================================================================
  $ cvs diff -u -r1.38 -r1.39 l2_ch_buffer.c
  --- ossp-pkg/l2/l2_ch_buffer.c	6 Jan 2003 11:41:51 -0000	1.38
  +++ ossp-pkg/l2/l2_ch_buffer.c	24 Jan 2005 15:03:17 -0000	1.39
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  -**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_fd.c
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 l2_ch_fd.c
  --- ossp-pkg/l2/l2_ch_fd.c	30 Jun 2003 12:38:17 -0000	1.17
  +++ ossp-pkg/l2/l2_ch_fd.c	24 Jan 2005 15:03:17 -0000	1.18
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  -**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_file.c
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 l2_ch_file.c
  --- ossp-pkg/l2/l2_ch_file.c	25 Sep 2003 13:22:32 -0000	1.31
  +++ ossp-pkg/l2/l2_ch_file.c	24 Jan 2005 15:03:17 -0000	1.32
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  -**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_filter.c
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 l2_ch_filter.c
  --- ossp-pkg/l2/l2_ch_filter.c	6 Jan 2003 11:41:51 -0000	1.19
  +++ ossp-pkg/l2/l2_ch_filter.c	24 Jan 2005 15:03:17 -0000	1.20
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  -**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_irc.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 l2_ch_irc.c
  --- ossp-pkg/l2/l2_ch_irc.c	6 Jan 2003 11:41:51 -0000	1.8
  +++ ossp-pkg/l2/l2_ch_irc.c	24 Jan 2005 15:03:17 -0000	1.9
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  -**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_noop.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 l2_ch_noop.c
  --- ossp-pkg/l2/l2_ch_noop.c	6 Jan 2003 11:41:51 -0000	1.5
  +++ ossp-pkg/l2/l2_ch_noop.c	24 Jan 2005 15:03:17 -0000	1.6
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  -**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_null.c
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 l2_ch_null.c
  --- ossp-pkg/l2/l2_ch_null.c	6 Jan 2003 11:41:51 -0000	1.13
  +++ ossp-pkg/l2/l2_ch_null.c	24 Jan 2005 15:03:17 -0000	1.14
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  -**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_pipe.c
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 l2_ch_pipe.c
  --- ossp-pkg/l2/l2_ch_pipe.c	6 Jan 2003 11:41:51 -0000	1.31
  +++ ossp-pkg/l2/l2_ch_pipe.c	24 Jan 2005 15:03:17 -0000	1.32
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  -**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_prefix.c
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 l2_ch_prefix.c
  --- ossp-pkg/l2/l2_ch_prefix.c	15 Sep 2003 08:12:28 -0000	1.25
  +++ ossp-pkg/l2/l2_ch_prefix.c	24 Jan 2005 15:03:17 -0000	1.26
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  -**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_smtp.c
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 l2_ch_smtp.c
  --- ossp-pkg/l2/l2_ch_smtp.c	6 Jan 2003 11:41:51 -0000	1.11
  +++ ossp-pkg/l2/l2_ch_smtp.c	24 Jan 2005 15:03:17 -0000	1.12
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  -**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_socket.c
  ============================================================================
  $ cvs diff -u -r1.38 -r1.39 l2_ch_socket.c
  --- ossp-pkg/l2/l2_ch_socket.c	6 Jan 2003 11:41:51 -0000	1.38
  +++ ossp-pkg/l2/l2_ch_socket.c	24 Jan 2005 15:03:17 -0000	1.39
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  -**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_syslog.c
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 l2_ch_syslog.c
  --- ossp-pkg/l2/l2_ch_syslog.c	6 Jan 2003 11:41:51 -0000	1.33
  +++ ossp-pkg/l2/l2_ch_syslog.c	24 Jan 2005 15:03:17 -0000	1.34
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  -**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_channel.c
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 l2_channel.c
  --- ossp-pkg/l2/l2_channel.c	6 Nov 2003 15:31:47 -0000	1.33
  +++ ossp-pkg/l2/l2_channel.c	24 Jan 2005 15:03:17 -0000	1.34
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  -**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_env.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 l2_env.c
  --- ossp-pkg/l2/l2_env.c	6 Jan 2003 11:41:51 -0000	1.10
  +++ ossp-pkg/l2/l2_env.c	24 Jan 2005 15:03:17 -0000	1.11
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  -**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_p.h
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 l2_p.h
  --- ossp-pkg/l2/l2_p.h	6 Nov 2003 15:31:47 -0000	1.35
  +++ ossp-pkg/l2/l2_p.h	24 Jan 2005 15:03:17 -0000	1.36
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  -**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_spec.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 l2_spec.c
  --- ossp-pkg/l2/l2_spec.c	6 Jan 2003 11:41:52 -0000	1.10
  +++ ossp-pkg/l2/l2_spec.c	24 Jan 2005 15:03:17 -0000	1.11
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  -**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_spec.h
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 l2_spec.h
  --- ossp-pkg/l2/l2_spec.h	6 Jan 2003 11:41:52 -0000	1.4
  +++ ossp-pkg/l2/l2_spec.h	24 Jan 2005 15:03:18 -0000	1.5
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  -**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_spec_parse.y
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 l2_spec_parse.y
  --- ossp-pkg/l2/l2_spec_parse.y	11 Feb 2003 07:51:27 -0000	1.11
  +++ ossp-pkg/l2/l2_spec_parse.y	24 Jan 2005 15:03:18 -0000	1.12
  @@ -1,9 +1,9 @@
   %{
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  -**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_spec_scan.l
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 l2_spec_scan.l
  --- ossp-pkg/l2/l2_spec_scan.l	6 Nov 2003 11:50:58 -0000	1.13
  +++ ossp-pkg/l2/l2_spec_scan.l	24 Jan 2005 15:03:18 -0000	1.14
  @@ -1,9 +1,9 @@
   %{
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  -**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_test.c
  ============================================================================
  $ cvs diff -u -r1.54 -r1.55 l2_test.c
  --- ossp-pkg/l2/l2_test.c	30 Jun 2003 11:13:09 -0000	1.54
  +++ ossp-pkg/l2/l2_test.c	24 Jan 2005 15:03:18 -0000	1.55
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  -**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_fmtcb.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 l2_ut_fmtcb.c
  --- ossp-pkg/l2/l2_ut_fmtcb.c	6 Jan 2003 11:41:52 -0000	1.7
  +++ ossp-pkg/l2/l2_ut_fmtcb.c	24 Jan 2005 15:03:18 -0000	1.8
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  -**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_format.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 l2_ut_format.c
  --- ossp-pkg/l2/l2_ut_format.c	22 Apr 2004 10:10:57 -0000	1.9
  +++ ossp-pkg/l2/l2_ut_format.c	24 Jan 2005 15:03:18 -0000	1.10
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  -**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_format.h
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 l2_ut_format.h
  --- ossp-pkg/l2/l2_ut_format.h	6 Jan 2003 11:41:52 -0000	1.4
  +++ ossp-pkg/l2/l2_ut_format.h	24 Jan 2005 15:03:18 -0000	1.5
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  -**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_level.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 l2_ut_level.c
  --- ossp-pkg/l2/l2_ut_level.c	6 Jan 2003 11:41:52 -0000	1.9
  +++ ossp-pkg/l2/l2_ut_level.c	24 Jan 2005 15:03:18 -0000	1.10
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  -**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_param.c
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 l2_ut_param.c
  --- ossp-pkg/l2/l2_ut_param.c	13 Feb 2003 15:37:28 -0000	1.11
  +++ ossp-pkg/l2/l2_ut_param.c	24 Jan 2005 15:03:18 -0000	1.12
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  -**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_sa.ac
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 l2_ut_sa.ac
  --- ossp-pkg/l2/l2_ut_sa.ac	21 Apr 2004 12:02:12 -0000	1.9
  +++ ossp-pkg/l2/l2_ut_sa.ac	24 Jan 2005 15:03:18 -0000	1.10
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP sa - Socket Abstraction
  -dnl ##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +dnl ##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   dnl ##
   dnl ##  This file is part of OSSP sa, a socket abstraction library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/sa/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_sa.c
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 l2_ut_sa.c
  --- ossp-pkg/l2/l2_ut_sa.c	21 Apr 2004 12:02:12 -0000	1.25
  +++ ossp-pkg/l2/l2_ut_sa.c	24 Jan 2005 15:03:18 -0000	1.26
  @@ -1,8 +1,8 @@
   /*
   **  OSSP sa - Socket Abstraction
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP sa, a socket abstraction library which
   **  can be found at http://www.ossp.org/pkg/lib/sa/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_sa.h
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 l2_ut_sa.h
  --- ossp-pkg/l2/l2_ut_sa.h	22 Apr 2004 15:46:34 -0000	1.22
  +++ ossp-pkg/l2/l2_ut_sa.h	24 Jan 2005 15:03:18 -0000	1.23
  @@ -1,8 +1,8 @@
   /*
   **  OSSP sa - Socket Abstraction
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP sa, a socket abstraction library which
   **  can be found at http://www.ossp.org/pkg/lib/sa/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2tool.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 l2tool.c
  --- ossp-pkg/l2/l2tool.c	25 Sep 2003 13:12:06 -0000	1.5
  +++ ossp-pkg/l2/l2tool.c	24 Jan 2005 15:03:18 -0000	1.6
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  -**  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2tool.pod
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 l2tool.pod
  --- ossp-pkg/l2/l2tool.pod	6 Jan 2003 11:41:52 -0000	1.4
  +++ ossp-pkg/l2/l2tool.pod	24 Jan 2005 15:03:18 -0000	1.5
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP l2 - Flexible Logging
  -##  Copyright (c) 2001-2003 Cable & Wireless Deutschland GmbH
  -##  Copyright (c) 2001-2003 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of OSSP l2, a flexible logging library which
   ##  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 24 16:05:36 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BA5827642F; Mon, 24 Jan 2005 16:05:36 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ ChangeLog devtool.conf
Message-Id: <20050124150536.BA5827642F@mail.ossp.org>
Date: Mon, 24 Jan 2005 16:05:36 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Jan-2005 16:05:36
  Branch: HEAD                             Handle: 2005012415053600

  Modified files:
    ossp-pkg/l2             ChangeLog devtool.conf

  Log:
    Upgraded build environment to GNU shtool 2.0.1 and GNU libtool 1.5.10.

  Summary:
    Revision    Changes     Path
    1.19        +4  -0      ossp-pkg/l2/ChangeLog
    1.18        +3  -3      ossp-pkg/l2/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 ChangeLog
  --- ossp-pkg/l2/ChangeLog	24 Jan 2005 15:03:17 -0000	1.18
  +++ ossp-pkg/l2/ChangeLog	24 Jan 2005 15:05:36 -0000	1.19
  @@ -10,6 +10,10 @@
     =========
   
     Changes between 0.9.8 and 0.9.9 (22-Apr-2004 to 24-Jan-2005)
  +  
  +    *) Upgraded build environment to GNU shtool 2.0.1 and
  +       GNU libtool 1.5.10.
  +       [Ralf S. Engelschall <rse@engelschall.com>]
   
       *) Adjust copyright messages for new year 2005.
          [Ralf S. Engelschall <rse@engelschall.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 devtool.conf
  --- ossp-pkg/l2/devtool.conf	24 Jan 2005 15:03:17 -0000	1.17
  +++ ossp-pkg/l2/devtool.conf	24 Jan 2005 15:05:36 -0000	1.18
  @@ -42,9 +42,9 @@
       shtool subst -e 's;#include "sa.h";#include "l2_ut_sa.h";' l2_ut_sa.c
   
   %autogen
  -    @autogen shtool   1.6.2 "1.6.*" echo fixperm install mkdir tarball version
  -    @autogen libtool  1.5.2 "1.5*"
  -    @autogen autoconf 2.59  "2.5[4-9]*"
  +    @autogen shtool   2.0.1  "2.0.*" echo fixperm install mkdir tarball version
  +    @autogen libtool  1.5.10 "1.5*"
  +    @autogen autoconf 2.59   "2.5[4-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 24 16:10:12 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E7B9C7642D; Mon, 24 Jan 2005 16:10:11 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ ChangeLog Makefile.in README aclocal.m4 confi...
Message-Id: <20050124151011.E7B9C7642D@mail.ossp.org>
Date: Mon, 24 Jan 2005 16:10:11 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Jan-2005 16:10:11
  Branch: HEAD                             Handle: 2005012415100900

  Modified files:
    ossp-pkg/sa             ChangeLog Makefile.in README aclocal.m4
                            configure.ac devtool devtool.func sa-config.in
                            sa.ac sa.c sa.h sa.pod sa_test.c ts.c ts.h

  Log:
    welcome 2005 in OSSP sa, too

  Summary:
    Revision    Changes     Path
    1.43        +4  -1      ossp-pkg/sa/ChangeLog
    1.17        +3  -3      ossp-pkg/sa/Makefile.in
    1.22        +3  -3      ossp-pkg/sa/README
    1.13        +3  -3      ossp-pkg/sa/aclocal.m4
    1.17        +3  -3      ossp-pkg/sa/configure.ac
    1.4         +1  -1      ossp-pkg/sa/devtool
    1.5         +1  -1      ossp-pkg/sa/devtool.func
    1.8         +3  -3      ossp-pkg/sa/sa-config.in
    1.18        +3  -3      ossp-pkg/sa/sa.ac
    1.88        +3  -3      ossp-pkg/sa/sa.c
    1.42        +3  -3      ossp-pkg/sa/sa.h
    1.44        +3  -3      ossp-pkg/sa/sa.pod
    1.28        +3  -3      ossp-pkg/sa/sa_test.c
    1.12        +3  -3      ossp-pkg/sa/ts.c
    1.5         +3  -3      ossp-pkg/sa/ts.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.42 -r1.43 ChangeLog
  --- ossp-pkg/sa/ChangeLog	3 Oct 2004 14:49:37 -0000	1.42
  +++ ossp-pkg/sa/ChangeLog	24 Jan 2005 15:10:09 -0000	1.43
  @@ -11,7 +11,10 @@
     This is a list of all changes to OSSP sa.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 1.2.2 and 1.2.3 (26-Jun-2004 to xx-xxx-2004)
  +  Changes between 1.2.2 and 1.2.3 (26-Jun-2004 to 24-Jan-2005)
  +
  +   o Adjusted all copyright messages for new year 2005.
  +     [Ralf S. Engelschall]
   
      o Do not pass NULL directly to variadic functions because NULL
        is not guarrantied to be a pointer.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 Makefile.in
  --- ossp-pkg/sa/Makefile.in	2 Apr 2004 18:21:07 -0000	1.16
  +++ ossp-pkg/sa/Makefile.in	24 Jan 2005 15:10:09 -0000	1.17
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP sa - Socket Abstraction
  -##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP sa, a socket abstraction library which
   ##  can be found at http://www.ossp.org/pkg/lib/sa/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/README
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 README
  --- ossp-pkg/sa/README	26 Jun 2004 11:25:22 -0000	1.21
  +++ ossp-pkg/sa/README	24 Jan 2005 15:10:09 -0000	1.22
  @@ -18,9 +18,9 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   
     This file is part of OSSP sa, a socket abstraction library which
     can be found at http://www.ossp.org/pkg/lib/sa/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 aclocal.m4
  --- ossp-pkg/sa/aclocal.m4	26 Jun 2004 11:59:00 -0000	1.12
  +++ ossp-pkg/sa/aclocal.m4	24 Jan 2005 15:10:09 -0000	1.13
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP sa - Socket Abstraction
  -dnl ##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +dnl ##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   dnl ##
   dnl ##  This file is part of OSSP sa, a socket abstraction library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/sa/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/configure.ac
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 configure.ac
  --- ossp-pkg/sa/configure.ac	26 Jun 2004 11:59:00 -0000	1.16
  +++ ossp-pkg/sa/configure.ac	24 Jan 2005 15:10:09 -0000	1.17
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP sa - Socket Abstraction
  -dnl ##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +dnl ##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   dnl ##
   dnl ##  This file is part of OSSP sa, a socket abstraction library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/sa/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/devtool
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 devtool
  --- ossp-pkg/sa/devtool	19 Mar 2004 14:55:49 -0000	1.3
  +++ ossp-pkg/sa/devtool	24 Jan 2005 15:10:09 -0000	1.4
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  devtool -- Development Tool
  -##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   if [ $# -eq 0 ]; then
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/devtool.func
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 devtool.func
  --- ossp-pkg/sa/devtool.func	19 Mar 2004 14:55:49 -0000	1.4
  +++ ossp-pkg/sa/devtool.func	24 Jan 2005 15:10:09 -0000	1.5
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   devtool_require () {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa-config.in
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 sa-config.in
  --- ossp-pkg/sa/sa-config.in	2 Apr 2004 18:21:07 -0000	1.7
  +++ ossp-pkg/sa/sa-config.in	24 Jan 2005 15:10:09 -0000	1.8
  @@ -1,9 +1,9 @@
   #!/bin/sh
   ##
   ##  OSSP sa - Socket Abstraction
  -##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP sa, a socket abstraction library which
   ##  can be found at http://www.ossp.org/pkg/lib/sa/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.ac
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 sa.ac
  --- ossp-pkg/sa/sa.ac	26 Jun 2004 11:59:00 -0000	1.17
  +++ ossp-pkg/sa/sa.ac	24 Jan 2005 15:10:09 -0000	1.18
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP sa - Socket Abstraction
  -dnl ##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +dnl ##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   dnl ##
   dnl ##  This file is part of OSSP sa, a socket abstraction library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/sa/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.c
  ============================================================================
  $ cvs diff -u -r1.87 -r1.88 sa.c
  --- ossp-pkg/sa/sa.c	3 Oct 2004 14:49:37 -0000	1.87
  +++ ossp-pkg/sa/sa.c	24 Jan 2005 15:10:09 -0000	1.88
  @@ -1,8 +1,8 @@
   /*
   **  OSSP sa - Socket Abstraction
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP sa, a socket abstraction library which
   **  can be found at http://www.ossp.org/pkg/lib/sa/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.h
  ============================================================================
  $ cvs diff -u -r1.41 -r1.42 sa.h
  --- ossp-pkg/sa/sa.h	3 Oct 2004 14:00:23 -0000	1.41
  +++ ossp-pkg/sa/sa.h	24 Jan 2005 15:10:09 -0000	1.42
  @@ -1,8 +1,8 @@
   /*
   **  OSSP sa - Socket Abstraction
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP sa, a socket abstraction library which
   **  can be found at http://www.ossp.org/pkg/lib/sa/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.pod
  ============================================================================
  $ cvs diff -u -r1.43 -r1.44 sa.pod
  --- ossp-pkg/sa/sa.pod	3 Oct 2004 14:12:10 -0000	1.43
  +++ ossp-pkg/sa/sa.pod	24 Jan 2005 15:10:09 -0000	1.44
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP sa - Socket Abstraction
  -##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP sa, a socket abstraction library which
   ##  can be found at http://www.ossp.org/pkg/lib/sa/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa_test.c
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 sa_test.c
  --- ossp-pkg/sa/sa_test.c	2 Apr 2004 18:21:07 -0000	1.27
  +++ ossp-pkg/sa/sa_test.c	24 Jan 2005 15:10:09 -0000	1.28
  @@ -1,8 +1,8 @@
   /*
   **  OSSP sa - Socket Abstraction
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP sa, a socket abstraction library which
   **  can be found at http://www.ossp.org/pkg/lib/sa/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ts.c
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 ts.c
  --- ossp-pkg/sa/ts.c	26 Jun 2004 11:38:20 -0000	1.11
  +++ ossp-pkg/sa/ts.c	24 Jan 2005 15:10:09 -0000	1.12
  @@ -1,8 +1,8 @@
   /*
   **  OSSP ts - Test Suite Library
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP ts, a small test suite library which
   **  can be found at http://www.ossp.org/pkg/lib/ts/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ts.h
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ts.h
  --- ossp-pkg/sa/ts.h	2 Apr 2004 18:21:07 -0000	1.4
  +++ ossp-pkg/sa/ts.h	24 Jan 2005 15:10:09 -0000	1.5
  @@ -1,8 +1,8 @@
   /*
   **  TS - OSSP Test Suite Library
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP TS, a small test suite library which
   **  can be found at http://www.ossp.org/pkg/ts/.
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 24 16:22:22 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 935BC7642F; Mon, 24 Jan 2005 16:22:22 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str/ ChangeLog LICENSE Makefile.in README configu...
Message-Id: <20050124152222.935BC7642F@mail.ossp.org>
Date: Mon, 24 Jan 2005 16:22:22 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Jan-2005 16:22:22
  Branch: HEAD                             Handle: 2005012415221801

  Modified files:
    ossp-pkg/str            ChangeLog LICENSE Makefile.in README configure.ac
                            devtool devtool.func str-config.in str-config.pod
                            str.h.in str.pod str_base64.c str_basic.c
                            str_format.c str_hash.c str_memory.c str_p.h
                            str_parse.c str_search.c str_test.c str_token.c

  Log:
    Adjusted copyright messages for new year 2004/2005.

  Summary:
    Revision    Changes     Path
    1.48        +5  -0      ossp-pkg/str/ChangeLog
    1.6         +2  -2      ossp-pkg/str/LICENSE
    1.48        +2  -2      ossp-pkg/str/Makefile.in
    1.24        +2  -2      ossp-pkg/str/README
    1.14        +2  -2      ossp-pkg/str/configure.ac
    1.4         +1  -1      ossp-pkg/str/devtool
    1.6         +1  -1      ossp-pkg/str/devtool.func
    1.9         +2  -2      ossp-pkg/str/str-config.in
    1.7         +2  -2      ossp-pkg/str/str-config.pod
    1.6         +2  -2      ossp-pkg/str/str.h.in
    1.37        +2  -2      ossp-pkg/str/str.pod
    1.8         +2  -2      ossp-pkg/str/str_base64.c
    1.13        +2  -2      ossp-pkg/str/str_basic.c
    1.30        +2  -2      ossp-pkg/str/str_format.c
    1.8         +2  -2      ossp-pkg/str/str_hash.c
    1.9         +2  -2      ossp-pkg/str/str_memory.c
    1.23        +2  -2      ossp-pkg/str/str_p.h
    1.21        +2  -2      ossp-pkg/str/str_parse.c
    1.20        +2  -2      ossp-pkg/str/str_search.c
    1.28        +2  -2      ossp-pkg/str/str_test.c
    1.10        +2  -2      ossp-pkg/str/str_token.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.47 -r1.48 ChangeLog
  --- ossp-pkg/str/ChangeLog	23 Apr 2004 10:03:09 -0000	1.47
  +++ ossp-pkg/str/ChangeLog	24 Jan 2005 15:22:18 -0000	1.48
  @@ -9,6 +9,11 @@
   
    ChangeLog
   
  + Changes between 0.9.9 and 0.9.10 (23-Apr-2004 to 24-Jan-2004):
  +
  +   *) Adjusted copyright messages for new year 2004/2005.
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
    Changes between 0.9.8 and 0.9.9 (17-Feb-2003 to 23-Apr-2004):
   
      *) Import change introduced in OSSP l2 0.9.7:
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/LICENSE
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 LICENSE
  --- ossp-pkg/str/LICENSE	6 Jan 2003 19:13:47 -0000	1.5
  +++ ossp-pkg/str/LICENSE	24 Jan 2005 15:22:19 -0000	1.6
  @@ -1,8 +1,8 @@
   
     OSSP str - String Handling
   
  -  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
   
     Permission to use, copy, modify, and distribute this software for
     any purpose with or without fee is hereby granted, provided that
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.47 -r1.48 Makefile.in
  --- ossp-pkg/str/Makefile.in	11 Feb 2003 08:46:17 -0000	1.47
  +++ ossp-pkg/str/Makefile.in	24 Jan 2005 15:22:19 -0000	1.48
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP str - String Handling
  -##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP str, a string handling and manipulation
   ##  library which can be found at http://www.ossp.org/pkg/lib/str/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/README
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 README
  --- ossp-pkg/str/README	23 Apr 2004 10:03:37 -0000	1.23
  +++ ossp-pkg/str/README	24 Jan 2005 15:22:19 -0000	1.24
  @@ -17,8 +17,8 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
   
     This product includes software developed by the University of
     California, Berkeley and its contributors. This product includes
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/configure.ac
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 configure.ac
  --- ossp-pkg/str/configure.ac	23 Apr 2004 10:03:09 -0000	1.13
  +++ ossp-pkg/str/configure.ac	24 Jan 2005 15:22:19 -0000	1.14
  @@ -7,8 +7,8 @@
   AC_HEADLINE(dnl
   OSSP str, String Handling, dnl
   STR_VERSION, str_version.c, dnl
  -[Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  -Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org>])
  +[Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org>])
   AC_PLATFORM(PLATFORM)
   
   AC_PROG_MAKE_SET
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/devtool
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 devtool
  --- ossp-pkg/str/devtool	6 Jan 2003 19:13:47 -0000	1.3
  +++ ossp-pkg/str/devtool	24 Jan 2005 15:22:19 -0000	1.4
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  devtool -- Development Tool
  -##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   if [ $# -eq 0 ]; then
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/devtool.func
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 devtool.func
  --- ossp-pkg/str/devtool.func	19 Mar 2004 14:55:50 -0000	1.5
  +++ ossp-pkg/str/devtool.func	24 Jan 2005 15:22:19 -0000	1.6
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   devtool_require () {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str-config.in
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 str-config.in
  --- ossp-pkg/str/str-config.in	6 Jan 2003 19:13:47 -0000	1.8
  +++ ossp-pkg/str/str-config.in	24 Jan 2005 15:22:19 -0000	1.9
  @@ -1,8 +1,8 @@
   #!/bin/sh
   ##
   ##  OSSP str - String Handling
  -##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP str, a string handling and manipulation
   ##  library which can be found at http://www.ossp.org/pkg/lib/str/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str-config.pod
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 str-config.pod
  --- ossp-pkg/str/str-config.pod	6 Jan 2003 19:13:47 -0000	1.6
  +++ ossp-pkg/str/str-config.pod	24 Jan 2005 15:22:19 -0000	1.7
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP str - String Handling
  -##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP str, a string handling and manipulation
   ##  library which can be found at http://www.ossp.org/pkg/lib/str/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str.h.in
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 str.h.in
  --- ossp-pkg/str/str.h.in	6 Jan 2003 19:13:47 -0000	1.5
  +++ ossp-pkg/str/str.h.in	24 Jan 2005 15:22:19 -0000	1.6
  @@ -1,7 +1,7 @@
   /*
   **  OSSP str - String Handling
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP str, a string handling and manipulation
   **  library which can be found at http://www.ossp.org/pkg/lib/str/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str.pod
  ============================================================================
  $ cvs diff -u -r1.36 -r1.37 str.pod
  --- ossp-pkg/str/str.pod	17 Feb 2004 09:21:06 -0000	1.36
  +++ ossp-pkg/str/str.pod	24 Jan 2005 15:22:19 -0000	1.37
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP str - String Handling
  -##  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP str, a string handling and manipulation
   ##  library which can be found at http://www.ossp.org/pkg/lib/str/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str_base64.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 str_base64.c
  --- ossp-pkg/str/str_base64.c	6 Jan 2003 19:13:47 -0000	1.7
  +++ ossp-pkg/str/str_base64.c	24 Jan 2005 15:22:19 -0000	1.8
  @@ -1,7 +1,7 @@
   /*
   **  OSSP str - String Handling
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP str, a string handling and manipulation
   **  library which can be found at http://www.ossp.org/pkg/lib/str/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str_basic.c
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 str_basic.c
  --- ossp-pkg/str/str_basic.c	6 Jan 2003 19:13:47 -0000	1.12
  +++ ossp-pkg/str/str_basic.c	24 Jan 2005 15:22:19 -0000	1.13
  @@ -1,7 +1,7 @@
   /*
   **  OSSP str - String Handling
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP str, a string handling and manipulation
   **  library which can be found at http://www.ossp.org/pkg/lib/str/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str_format.c
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 str_format.c
  --- ossp-pkg/str/str_format.c	23 Apr 2004 10:03:09 -0000	1.29
  +++ ossp-pkg/str/str_format.c	24 Jan 2005 15:22:19 -0000	1.30
  @@ -1,7 +1,7 @@
   /*
   **  OSSP str - String Handling
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP str, a string handling and manipulation
   **  library which can be found at http://www.ossp.org/pkg/lib/str/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str_hash.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 str_hash.c
  --- ossp-pkg/str/str_hash.c	6 Jan 2003 19:13:47 -0000	1.7
  +++ ossp-pkg/str/str_hash.c	24 Jan 2005 15:22:19 -0000	1.8
  @@ -1,7 +1,7 @@
   /*
   **  OSSP str - String Handling
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP str, a string handling and manipulation
   **  library which can be found at http://www.ossp.org/pkg/lib/str/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str_memory.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 str_memory.c
  --- ossp-pkg/str/str_memory.c	6 Jan 2003 19:13:47 -0000	1.8
  +++ ossp-pkg/str/str_memory.c	24 Jan 2005 15:22:19 -0000	1.9
  @@ -1,7 +1,7 @@
   /*
   **  OSSP str - String Handling
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP str, a string handling and manipulation
   **  library which can be found at http://www.ossp.org/pkg/lib/str/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str_p.h
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 str_p.h
  --- ossp-pkg/str/str_p.h	23 Apr 2004 10:03:09 -0000	1.22
  +++ ossp-pkg/str/str_p.h	24 Jan 2005 15:22:19 -0000	1.23
  @@ -1,7 +1,7 @@
   /*
   **  OSSP str - String Handling
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP str, a string handling and manipulation
   **  library which can be found at http://www.ossp.org/pkg/lib/str/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str_parse.c
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 str_parse.c
  --- ossp-pkg/str/str_parse.c	6 Jan 2003 19:13:47 -0000	1.20
  +++ ossp-pkg/str/str_parse.c	24 Jan 2005 15:22:19 -0000	1.21
  @@ -1,7 +1,7 @@
   /*
   **  OSSP str - String Handling
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP str, a string handling and manipulation
   **  library which can be found at http://www.ossp.org/pkg/lib/str/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str_search.c
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 str_search.c
  --- ossp-pkg/str/str_search.c	6 Jan 2003 19:13:48 -0000	1.19
  +++ ossp-pkg/str/str_search.c	24 Jan 2005 15:22:19 -0000	1.20
  @@ -1,7 +1,7 @@
   /*
   **  OSSP str - String Handling
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP str, a string handling and manipulation
   **  library which can be found at http://www.ossp.org/pkg/lib/str/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str_test.c
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 str_test.c
  --- ossp-pkg/str/str_test.c	11 Feb 2003 08:45:27 -0000	1.27
  +++ ossp-pkg/str/str_test.c	24 Jan 2005 15:22:19 -0000	1.28
  @@ -1,7 +1,7 @@
   /*
   **  OSSP str - String Handling
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP str, a string handling and manipulation
   **  library which can be found at http://www.ossp.org/pkg/lib/str/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str_token.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 str_token.c
  --- ossp-pkg/str/str_token.c	6 Jan 2003 19:13:48 -0000	1.9
  +++ ossp-pkg/str/str_token.c	24 Jan 2005 15:22:19 -0000	1.10
  @@ -1,7 +1,7 @@
   /*
   **  OSSP str - String Handling
  -**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP str, a string handling and manipulation
   **  library which can be found at http://www.ossp.org/pkg/lib/str/.
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 24 16:30:07 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1A8287642F; Mon, 24 Jan 2005 16:30:07 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str/ ChangeLog aclocal.m4 configure.ac str_basic....
Message-Id: <20050124153007.1A8287642F@mail.ossp.org>
Date: Mon, 24 Jan 2005 16:30:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Jan-2005 16:30:07
  Branch: HEAD                             Handle: 2005012415300400

  Modified files:
    ossp-pkg/str            ChangeLog aclocal.m4 configure.ac str_basic.c ts.c

  Log:
    Add Autoconf detection for va_copy() existence and fallbacks.

  Summary:
    Revision    Changes     Path
    1.49        +3  -0      ossp-pkg/str/ChangeLog
    1.8         +110 -0     ossp-pkg/str/aclocal.m4
    1.15        +2  -0      ossp-pkg/str/configure.ac
    1.14        +2  -2      ossp-pkg/str/str_basic.c
    1.3         +1  -1      ossp-pkg/str/ts.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.48 -r1.49 ChangeLog
  --- ossp-pkg/str/ChangeLog	24 Jan 2005 15:22:18 -0000	1.48
  +++ ossp-pkg/str/ChangeLog	24 Jan 2005 15:30:04 -0000	1.49
  @@ -11,6 +11,9 @@
   
    Changes between 0.9.9 and 0.9.10 (23-Apr-2004 to 24-Jan-2004):
   
  +   *) Add Autoconf detection for va_copy() existence and fallbacks.
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
      *) Adjusted copyright messages for new year 2004/2005.
         [Ralf S. Engelschall <rse@engelschall.com>]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 aclocal.m4
  --- ossp-pkg/str/aclocal.m4	6 Jan 2003 19:13:47 -0000	1.7
  +++ ossp-pkg/str/aclocal.m4	24 Jan 2005 15:30:04 -0000	1.8
  @@ -297,3 +297,113 @@
   fi
   AC_MSG_RESULT([$with_$2])
   ])dnl
  +
  +dnl ##
  +dnl ##  Check for C99 va_copy() implementation
  +dnl ##  (and provide fallback implementation if neccessary)
  +dnl ##
  +dnl ##  configure.in:
  +dnl ##    AC_CHECK_VA_COPY
  +dnl ##  foo.c:
  +dnl ##    #include "config.h"
  +dnl ##    [...]
  +dnl ##    va_copy(d,s)
  +dnl ##
  +dnl ##  This check is rather complex: first because we really have to
  +dnl ##  try various possible implementations in sequence and second, we
  +dnl ##  cannot define a macro in config.h with parameters directly.
  +dnl ##
  +
  +dnl #   test program for va_copy() implementation
  +changequote(<<,>>)
  +m4_define(__va_copy_test, <<[
  +#include <stdlib.h>
  +#include <stdarg.h>
  +#include <string.h>
  +#define DO_VA_COPY(d, s) $1
  +void test(char *str, ...)
  +{
  +    va_list ap, ap2;
  +    int i;
  +    va_start(ap, str);
  +    DO_VA_COPY(ap2, ap);
  +    for (i = 1; i <= 9; i++) {
  +        int k = (int)va_arg(ap, int);
  +        if (k != i)
  +            abort();
  +    }
  +    DO_VA_COPY(ap, ap2);
  +    for (i = 1; i <= 9; i++) {
  +        int k = (int)va_arg(ap, int);
  +        if (k != i)
  +            abort();
  +    }
  +    va_end(ap);
  +}
  +int main(int argc, char *argv[])
  +{
  +    test("test", 1, 2, 3, 4, 5, 6, 7, 8, 9);
  +    exit(0);
  +}
  +]>>)
  +changequote([,])
  +
  +dnl #   test driver for va_copy() implementation
  +m4_define(__va_copy_check, [
  +    AH_VERBATIM($1,
  +[/* Predefined possible va_copy() implementation (id: $1) */
  +#define __VA_COPY_USE_$1(d, s) $2])
  +    if test ".$ac_cv_va_copy" = .; then
  +        AC_TRY_RUN(__va_copy_test($2), [ac_cv_va_copy="$1"])
  +    fi
  +])
  +
  +dnl #   Autoconf check for va_copy() implementation checking
  +AC_DEFUN(AC_CHECK_VA_COPY,[
  +  dnl #   provide Autoconf display check message
  +  AC_MSG_CHECKING(for va_copy() function)
  +  dnl #   check for various implementations in priorized sequence   
  +  AC_CACHE_VAL(ac_cv_va_copy, [
  +    ac_cv_va_copy=""
  +    dnl #   1. check for standardized C99 macro
  +    __va_copy_check(C99, [va_copy((d), (s))])
  +    dnl #   2. check for alternative/deprecated GCC macro
  +    __va_copy_check(GCM, [VA_COPY((d), (s))])
  +    dnl #   3. check for internal GCC macro (high-level define)
  +    __va_copy_check(GCH, [__va_copy((d), (s))])
  +    dnl #   4. check for internal GCC macro (built-in function)
  +    __va_copy_check(GCB, [__builtin_va_copy((d), (s))])
  +    dnl #   5. check for assignment approach (assuming va_list is a struct)
  +    __va_copy_check(ASS, [do { (d) = (s); } while (0)])
  +    dnl #   6. check for assignment approach (assuming va_list is a pointer)
  +    __va_copy_check(ASP, [do { *(d) = *(s); } while (0)])
  +    dnl #   7. check for memory copying approach (assuming va_list is a struct)
  +    __va_copy_check(CPS, [memcpy((void *)&(d), (void *)&(s)), sizeof((s))])
  +    dnl #   8. check for memory copying approach (assuming va_list is a pointer)
  +    __va_copy_check(CPP, [memcpy((void *)(d), (void *)(s)), sizeof(*(s))])
  +    if test ".$ac_cv_va_copy" = .; then
  +        AC_ERROR([no working implementation found])
  +    fi
  +  ])
  +  dnl #   optionally activate the fallback implementation
  +  if test ".$ac_cv_va_copy" = ".C99"; then
  +      AC_DEFINE(HAVE_VA_COPY, 1, [Define if va_copy() macro exists (and no fallback implementation is required)])
  +  fi
  +  dnl #   declare which fallback implementation to actually use
  +  AC_DEFINE_UNQUOTED([__VA_COPY_USE], [__VA_COPY_USE_$ac_cv_va_copy],
  +      [Define to id of used va_copy() implementation])
  +  dnl #   provide activation hook for fallback implementation
  +  AH_VERBATIM([__VA_COPY_ACTIVATION],
  +[/* Optional va_copy() implementation activation */
  +#ifndef HAVE_VA_COPY
  +#define va_copy(d, s) __VA_COPY_USE(d, s)
  +#endif
  +])
  +  dnl #   provide Autoconf display result message
  +  if test ".$ac_cv_va_copy" = ".C99"; then
  +      AC_MSG_RESULT([yes])
  +  else
  +      AC_MSG_RESULT([no (using fallback implementation)])
  +  fi
  +])
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/configure.ac
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 configure.ac
  --- ossp-pkg/str/configure.ac	24 Jan 2005 15:22:19 -0000	1.14
  +++ ossp-pkg/str/configure.ac	24 Jan 2005 15:30:04 -0000	1.15
  @@ -26,6 +26,8 @@
   AC_CHECK_SIZEOF(long long, 8)
   AC_CHECK_SIZEOF(void *, 4)
   
  +AC_CHECK_VA_COPY
  +
   AC_HAVE_FUNCS(memmove memset memcmp memchr)
   AC_HAVE_FUNCS(isnan isinf)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str_basic.c
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 str_basic.c
  --- ossp-pkg/str/str_basic.c	24 Jan 2005 15:22:19 -0000	1.13
  +++ ossp-pkg/str/str_basic.c	24 Jan 2005 15:30:04 -0000	1.14
  @@ -133,11 +133,11 @@
           return NULL;
   
       /* determine required target string length */
  -    ap_safe = ap;
  +    va_copy(ap_safe, ap);
       n = str_len(s);
       while ((cp = va_arg(ap, char *)) != NULL)
           n += str_len(cp);
  -    ap = ap_safe;
  +    va_copy(ap, ap_safe);
   
       /* allocate target string */
       if ((rv = str_mem_alloc(n+1)) == NULL)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/ts.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ts.c
  --- ossp-pkg/str/ts.c	11 Feb 2003 08:39:47 -0000	1.2
  +++ ossp-pkg/str/ts.c	24 Jan 2005 15:30:04 -0000	1.3
  @@ -206,7 +206,7 @@
   
       if (format == NULL)
           return NULL;
  -    ap2 = ap;
  +    va_copy(ap2, ap);
       if ((n = ts_suite_mvxprintf(NULL, 0, format, ap)) == -1)
           return NULL;
       if ((buffer = (char *)malloc(n+1)) == NULL)
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 24 16:32:39 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 49AAD7642F; Mon, 24 Jan 2005 16:32:39 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str/ ChangeLog devtool.conf
Message-Id: <20050124153239.49AAD7642F@mail.ossp.org>
Date: Mon, 24 Jan 2005 16:32:39 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Jan-2005 16:32:39
  Branch: HEAD                             Handle: 2005012415323800

  Modified files:
    ossp-pkg/str            ChangeLog devtool.conf

  Log:
    Upgraded build environment to GNU autoconf 2.59, GNU
    libtool 1.5.10 and GNU shtool 2.0.1.

  Summary:
    Revision    Changes     Path
    1.50        +4  -0      ossp-pkg/str/ChangeLog
    1.7         +3  -3      ossp-pkg/str/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.49 -r1.50 ChangeLog
  --- ossp-pkg/str/ChangeLog	24 Jan 2005 15:30:04 -0000	1.49
  +++ ossp-pkg/str/ChangeLog	24 Jan 2005 15:32:38 -0000	1.50
  @@ -11,6 +11,10 @@
   
    Changes between 0.9.9 and 0.9.10 (23-Apr-2004 to 24-Jan-2004):
   
  +   *) Upgraded build environment to GNU autoconf 2.59, GNU
  +      libtool 1.5.10 and GNU shtool 2.0.1.
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
      *) Add Autoconf detection for va_copy() existence and fallbacks.
         [Ralf S. Engelschall <rse@engelschall.com>]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 devtool.conf
  --- ossp-pkg/str/devtool.conf	23 Apr 2004 09:59:53 -0000	1.6
  +++ ossp-pkg/str/devtool.conf	24 Jan 2005 15:32:38 -0000	1.7
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.2 "1.6.*" echo install mkdir fixperm tarball version
  -    @autogen libtool  1.5.2 "1.5*"
  -    @autogen autoconf 2.59  "2.5[4-9]*"
  +    @autogen shtool   2.0.1  "2.0.*" echo install mkdir fixperm tarball version
  +    @autogen libtool  1.5.10 "1.5*"
  +    @autogen autoconf 2.59   "2.5[4-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 24 17:16:30 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2A0657642F; Mon, 24 Jan 2005 17:16:30 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20050124161630.2A0657642F@mail.ossp.org>
Date: Mon, 24 Jan 2005 17:16:30 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   24-Jan-2005 17:16:30
  Branch: HEAD                             Handle: 2005012416162801

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/sa     index.wml

  Log:
    release OSSP sa 1.2.3

  Summary:
    Revision    Changes     Path
    1.119       +1  -0      ossp-web/new/news.txt
    1.100       +1  -1      ossp-web/pkg/lib/index.wml
    1.20        +1  -1      ossp-web/pkg/lib/sa/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.118 -r1.119 news.txt
  --- ossp-web/new/news.txt	24 Jan 2005 14:55:09 -0000	1.118
  +++ ossp-web/new/news.txt	24 Jan 2005 16:16:28 -0000	1.119
  @@ -1,3 +1,4 @@
  +24-Jan-2005: Released L<OSSP sa> 1.2.3
   24-Jan-2005: Released L<OSSP cfg> 0.9.8
   23-Jan-2005: Released L<OSSP uuid> 1.2.0
   13-Jan-2005: Released T<OSSP svs> 1.0.1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.99 -r1.100 index.wml
  --- ossp-web/pkg/lib/index.wml	24 Jan 2005 14:55:09 -0000	1.99
  +++ ossp-web/pkg/lib/index.wml	24 Jan 2005 16:16:29 -0000	1.100
  @@ -24,7 +24,7 @@
   			done=100 stable=1.0.4 unstable=none>
     <pkg_item name="sa" longname="OSSP sa" type="lib"
               desc="Socket Abstraction"
  -			done=100 stable=1.2.2 unstable=none>
  +			done=100 stable=1.2.3 unstable=none>
     <pkg_item name="fsl" longname="OSSP fsl" type="lib"
               desc="Faked/Flexible Syslog"
   			done=100 stable=1.5.0 unstable=none>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/sa/index.wml
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 index.wml
  --- ossp-web/pkg/lib/sa/index.wml	26 Jun 2004 12:13:16 -0000	1.19
  +++ ossp-web/pkg/lib/sa/index.wml	24 Jan 2005 16:16:29 -0000	1.20
  @@ -110,7 +110,7 @@
   
   <pkg_status
       name="sa" assign="rse" genesis="Jan-2001"
  -    stable="1.2.2"    stable_date="26-Jun-2004"
  +    stable="1.2.3"    stable_date="24-Jan-2005"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 24 18:00:38 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 61C3E76446; Mon, 24 Jan 2005 18:00:38 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/sa/ index.wml
Message-Id: <20050124170038.61C3E76446@mail.ossp.org>
Date: Mon, 24 Jan 2005 18:00:38 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   24-Jan-2005 18:00:38
  Branch: HEAD                             Handle: 2005012417003700

  Modified files:
    ossp-web/pkg/lib/sa     index.wml

  Log:
    fix version

  Summary:
    Revision    Changes     Path
    1.21        +1  -1      ossp-web/pkg/lib/sa/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/sa/index.wml
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 index.wml
  --- ossp-web/pkg/lib/sa/index.wml	24 Jan 2005 16:16:29 -0000	1.20
  +++ ossp-web/pkg/lib/sa/index.wml	24 Jan 2005 17:00:37 -0000	1.21
  @@ -121,7 +121,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/sa/
       directory=$(FTP_ROOT_DIR)/pkg/lib/sa/
       files="sa-*.tar.gz" 
  -	stable="sa-1\.2\.2\.tar\.gz" unstable="sa-SNAP.*\.tar.gz">
  +	stable="sa-1\.2\.3\.tar\.gz" unstable="sa-SNAP.*\.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan 24 19:04:14 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A4C8E7645B; Mon, 24 Jan 2005 19:04:13 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/ index.wml ossp-web/pkg/lib/str/ index.wm...
Message-Id: <20050124180413.A4C8E7645B@mail.ossp.org>
Date: Mon, 24 Jan 2005 19:04:13 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   24-Jan-2005 19:04:13
  Branch: HEAD                             Handle: 2005012418041201

  Modified files:
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/str    index.wml

  Log:
    release OSSP str 0.9.10

  Summary:
    Revision    Changes     Path
    1.101       +1  -1      ossp-web/pkg/lib/index.wml
    1.10        +2  -2      ossp-web/pkg/lib/str/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.100 -r1.101 index.wml
  --- ossp-web/pkg/lib/index.wml	24 Jan 2005 16:16:29 -0000	1.100
  +++ ossp-web/pkg/lib/index.wml	24 Jan 2005 18:04:12 -0000	1.101
  @@ -42,7 +42,7 @@
   			done=95 stable=none unstable=0.9.1>
     <pkg_item name="str" longname="OSSP str" type="lib"
               desc="String Handling"
  -			done=95 stable=none unstable=0.9.9>
  +			done=95 stable=none unstable=0.9.10>
     <pkg_item name="l2" longname="OSSP l2" type="lib"
               desc="Flexible Logging"
   			done=95 stable=none unstable=0.9.8>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/str/index.wml
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 index.wml
  --- ossp-web/pkg/lib/str/index.wml	26 Apr 2004 13:21:19 -0000	1.9
  +++ ossp-web/pkg/lib/str/index.wml	24 Jan 2005 18:04:13 -0000	1.10
  @@ -27,7 +27,7 @@
   <pkg_status
       name="str" assign="rse"
       stable="none"    stable_date="none"
  -    unstable="0.9.9" unstable_date="23-Apr-2004"
  +    unstable="0.9.10" unstable_date="24-Jan-2005"
   	done=95>
   
   <h2>Source</h2>
  @@ -37,7 +37,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/str/
       directory=$(FTP_ROOT_DIR)/pkg/lib/str/
       files="str-*.tar.gz" 
  -	stable="none" unstable="str-0.9.9.tar.gz">
  +	stable="none" unstable="str-0.9.10.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 27 14:19:46 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 688267652F; Thu, 27 Jan 2005 14:19:46 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ snmpdx.pl
Message-Id: <20050127131946.688267652F@mail.ossp.org>
Date: Thu, 27 Jan 2005 14:19:46 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   27-Jan-2005 14:19:46
  Branch: HEAD                             Handle: 2005012713194500

  Modified files:
    ossp-pkg/snmpdx         snmpdx.pl

  Log:
    minor usage text correction

  Summary:
    Revision    Changes     Path
    1.16        +1  -1      ossp-pkg/snmpdx/snmpdx.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.pl
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 snmpdx.pl
  --- ossp-pkg/snmpdx/snmpdx.pl	30 Jul 2004 09:30:04 -0000	1.15
  +++ ossp-pkg/snmpdx/snmpdx.pl	27 Jan 2005 13:19:45 -0000	1.16
  @@ -520,7 +520,7 @@
   Getopt::Long::Configure("bundling");
   my $result = GetOptions(%options) || die "option parsing failed";
   if ($opt->{'help'}) {
  -    print "Usage: $prg->{'name'} [options] [SPECFILE ...]\n" .
  +    print "Usage: $prg->{'name'} [options] [MIB OID ...]\n" .
             "Available options:\n" .
             " -c,--config=PATH    read command line options from configuration fil\n" .
             " -V,--version        print program version\n" .
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jan 29 08:58:45 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7E10D764CA; Sat, 29 Jan 2005 08:58:45 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ README VERSION
Message-Id: <20050129075845.7E10D764CA@mail.ossp.org>
Date: Sat, 29 Jan 2005 08:58:45 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Jan-2005 08:58:45
  Branch: HEAD                             Handle: 2005012907584400

  Modified files:
    ossp-pkg/sa             README VERSION

  Log:
    flush pending changes

  Summary:
    Revision    Changes     Path
    1.23        +1  -1      ossp-pkg/sa/README
    1.18        +1  -1      ossp-pkg/sa/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/README
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 README
  --- ossp-pkg/sa/README	24 Jan 2005 15:10:09 -0000	1.22
  +++ ossp-pkg/sa/README	29 Jan 2005 07:58:44 -0000	1.23
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/\__,_|
   
     OSSP sa - Socket Abstraction
  -  Version 1.2.2 (26-Jun-2004)
  +  Version 1.2.3 (24-Jan-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/VERSION
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 VERSION
  --- ossp-pkg/sa/VERSION	26 Jun 2004 11:25:22 -0000	1.17
  +++ ossp-pkg/sa/VERSION	29 Jan 2005 07:58:44 -0000	1.18
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP sa (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP sa, Version 1.2.2 (26-Jun-2004)
  +  This is OSSP sa, Version 1.2.3 (24-Jan-2005)
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jan 29 09:17:33 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 37302764E9; Sat, 29 Jan 2005 09:17:33 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ ChangeLog THANKS sa.c
Message-Id: <20050129081733.37302764E9@mail.ossp.org>
Date: Sat, 29 Jan 2005 09:17:33 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Jan-2005 09:17:33
  Branch: HEAD                             Handle: 2005012908173200

  Modified files:
    ossp-pkg/sa             ChangeLog THANKS sa.c

  Log:
    Fix timeout handling in various functions by fixing the internal
    select(2) usage: the timeout structure is (standard compliantly)
    modified in place on some platforms (like Linux), so its values
    have to be preserved before calls to select(2)).
    
    Problem found by: Robert Wood <Robert.Wood@smdc.army.mil>

  Summary:
    Revision    Changes     Path
    1.44        +8  -0      ossp-pkg/sa/ChangeLog
    1.7         +1  -0      ossp-pkg/sa/THANKS
    1.89        +20 -12     ossp-pkg/sa/sa.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.43 -r1.44 ChangeLog
  --- ossp-pkg/sa/ChangeLog	24 Jan 2005 15:10:09 -0000	1.43
  +++ ossp-pkg/sa/ChangeLog	29 Jan 2005 08:17:32 -0000	1.44
  @@ -11,6 +11,14 @@
     This is a list of all changes to OSSP sa.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 1.2.3 and 1.2.4 (24-Jan-2005 to 29-Jan-2005)
  +
  +   o Fix timeout handling in various functions by fixing the internal
  +     select(2) usage: the timeout structure is (standard compliantly)
  +     modified in place on some platforms (like Linux), so its values
  +     have to be preserved before calls to select(2)).
  +     [Robert Wood <Robert.Wood@smdc.army.mil>]
  +
     Changes between 1.2.2 and 1.2.3 (26-Jun-2004 to 24-Jan-2005)
   
      o Adjusted all copyright messages for new year 2005.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/THANKS
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 THANKS
  --- ossp-pkg/sa/THANKS	26 Jun 2004 11:16:02 -0000	1.6
  +++ ossp-pkg/sa/THANKS	29 Jan 2005 08:17:32 -0000	1.7
  @@ -24,4 +24,5 @@
       o  Amos Gouaux                 <amos@utdallas.edu>
       o  Thomas Lotterer             <thomas@lotterer.net>
       o  Alvaro Lopez Ortega         <alvaro@alobbs.com>
  +    o  Robert Wood                 <Robert.Wood@smdc.army.mil>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.c
  ============================================================================
  $ cvs diff -u -r1.88 -r1.89 sa.c
  --- ossp-pkg/sa/sa.c	24 Jan 2005 15:10:09 -0000	1.88
  +++ ossp-pkg/sa/sa.c	29 Jan 2005 08:17:32 -0000	1.89
  @@ -1456,6 +1456,7 @@
       socklen_t len;
       sa_rc_t rv;
       struct timeval *tv;
  +    struct timeval tv_buf;
   
       /* argument sanity check(s) */
       if (sa == NULL || raddr == NULL)
  @@ -1512,8 +1513,10 @@
       FD_ZERO(&wset);
       FD_SET(sa->fdSocket, &rset);
       FD_SET(sa->fdSocket, &wset);
  -    if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_CONNECT]))
  -        tv = &sa->tvTimeout[SA_TIMEOUT_CONNECT];
  +    if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_CONNECT])) {
  +        memcpy(&tv_buf, &sa->tvTimeout[SA_TIMEOUT_CONNECT], sizeof(struct timeval));
  +        tv = &tv_buf;
  +    }
       else
           tv = NULL;
       do {
  @@ -1591,6 +1594,7 @@
   #endif
       } sa_buf;
       socklen_t sa_size;
  +    struct timeval tv;
       int s;
       int i;
   
  @@ -1610,9 +1614,9 @@
       if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_ACCEPT])) {
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
  +        memcpy(&tv, &sa->tvTimeout[SA_TIMEOUT_ACCEPT], sizeof(struct timeval));
           do {
  -            n = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &fds, (fd_set *)NULL, (fd_set *)NULL,
  -                             &sa->tvTimeout[SA_TIMEOUT_ACCEPT]);
  +            n = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &fds, (fd_set *)NULL, (fd_set *)NULL, &tv);
           } while (n == -1 && errno == EINTR);
           if (n == 0)
               return SA_RC(SA_ERR_TMT);
  @@ -1763,6 +1767,7 @@
       int rv;
   #if !(defined(SO_RCVTIMEO) && defined(USE_SO_RCVTIMEO) && defined(SO_SNDTIMEO) && defined(USE_SO_SNDTIMEO))
       fd_set fds;
  +    struct timeval tv;
   #endif
   
       /* if timeout is enabled, perform explicit/smart blocking instead
  @@ -1771,9 +1776,9 @@
       if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_READ])) {
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
  +        memcpy(&tv, &sa->tvTimeout[SA_TIMEOUT_READ], sizeof(struct timeval));
           do {
  -            rv = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &fds, (fd_set *)NULL, (fd_set *)NULL,
  -                              &sa->tvTimeout[SA_TIMEOUT_READ]);
  +            rv = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &fds, (fd_set *)NULL, (fd_set *)NULL, &tv);
           } while (rv == -1 && errno == EINTR);
           if (rv == 0) {
               errno = ETIMEDOUT;
  @@ -1942,6 +1947,7 @@
       int rv;
   #if !(defined(SO_RCVTIMEO) && defined(USE_SO_RCVTIMEO) && defined(SO_SNDTIMEO) && defined(USE_SO_SNDTIMEO))
       fd_set fds;
  +    struct timeval tv;
   #endif
   
       /* if timeout is enabled, perform explicit/smart blocking instead
  @@ -1950,9 +1956,9 @@
       if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_WRITE])) {
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
  +        memcpy(&tv, &sa->tvTimeout[SA_TIMEOUT_WRITE], sizeof(struct timeval));
           do {
  -            rv = SA_SC_CALL_5(sa, select, sa->fdSocket+1, (fd_set *)NULL, &fds, (fd_set *)NULL,
  -                              &sa->tvTimeout[SA_TIMEOUT_WRITE]);
  +            rv = SA_SC_CALL_5(sa, select, sa->fdSocket+1, (fd_set *)NULL, &fds, (fd_set *)NULL, &tv);
           } while (rv == -1 && errno == EINTR);
           if (rv == 0) {
               errno = ETIMEDOUT;
  @@ -2177,6 +2183,7 @@
       ssize_t n;
       int k;
       fd_set fds;
  +    struct timeval tv;
   
       /* argument sanity check(s) */
       if (sa == NULL || buf == NULL || buflen == 0 || raddr == NULL)
  @@ -2195,9 +2202,9 @@
       if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_READ])) {
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
  +        memcpy(&tv, &sa->tvTimeout[SA_TIMEOUT_READ], sizeof(struct timeval));
           do {
  -            k = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &fds, (fd_set *)NULL, (fd_set *)NULL,
  -                             &sa->tvTimeout[SA_TIMEOUT_READ]);
  +            k = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &fds, (fd_set *)NULL, (fd_set *)NULL, &tv);
           } while (k == -1 && errno == EINTR);
           if (k == 0)
               errno = ETIMEDOUT;
  @@ -2233,6 +2240,7 @@
       int k;
       fd_set fds;
       sa_rc_t rv;
  +    struct timeval tv;
   
       /* argument sanity check(s) */
       if (sa == NULL || buf == NULL || buflen == 0 || raddr == NULL)
  @@ -2252,9 +2260,9 @@
       if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_WRITE])) {
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
  +        memcpy(&tv, &sa->tvTimeout[SA_TIMEOUT_WRITE], sizeof(struct timeval));
           do {
  -            k = SA_SC_CALL_5(sa, select, sa->fdSocket+1, (fd_set *)NULL, &fds, (fd_set *)NULL,
  -                             &sa->tvTimeout[SA_TIMEOUT_WRITE]);
  +            k = SA_SC_CALL_5(sa, select, sa->fdSocket+1, (fd_set *)NULL, &fds, (fd_set *)NULL, &tv);
           } while (k == -1 && errno == EINTR);
           if (k == 0)
               errno = ETIMEDOUT;
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jan 29 09:18:22 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AB203764F3; Sat, 29 Jan 2005 09:18:22 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ README VERSION
Message-Id: <20050129081822.AB203764F3@mail.ossp.org>
Date: Sat, 29 Jan 2005 09:18:22 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Jan-2005 09:18:22
  Branch: HEAD                             Handle: 2005012908182200

  Modified files:
    ossp-pkg/sa             README VERSION

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.24        +1  -1      ossp-pkg/sa/README
    1.19        +1  -1      ossp-pkg/sa/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/README
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 README
  --- ossp-pkg/sa/README	29 Jan 2005 07:58:44 -0000	1.23
  +++ ossp-pkg/sa/README	29 Jan 2005 08:18:22 -0000	1.24
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/\__,_|
   
     OSSP sa - Socket Abstraction
  -  Version 1.2.3 (24-Jan-2005)
  +  Version 1.2.4 (29-Jan-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/VERSION
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 VERSION
  --- ossp-pkg/sa/VERSION	29 Jan 2005 07:58:44 -0000	1.18
  +++ ossp-pkg/sa/VERSION	29 Jan 2005 08:18:22 -0000	1.19
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP sa (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP sa, Version 1.2.3 (24-Jan-2005)
  +  This is OSSP sa, Version 1.2.4 (29-Jan-2005)
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jan 29 09:21:08 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E7758764CA; Sat, 29 Jan 2005 09:21:07 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20050129082107.E7758764CA@mail.ossp.org>
Date: Sat, 29 Jan 2005 09:21:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   29-Jan-2005 09:21:07
  Branch: HEAD                             Handle: 2005012908210601

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/sa     index.wml

  Log:
    release OSSP sa 1.2.4

  Summary:
    Revision    Changes     Path
    1.120       +2  -0      ossp-web/new/news.txt
    1.102       +1  -1      ossp-web/pkg/lib/index.wml
    1.22        +2  -2      ossp-web/pkg/lib/sa/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.119 -r1.120 news.txt
  --- ossp-web/new/news.txt	24 Jan 2005 16:16:28 -0000	1.119
  +++ ossp-web/new/news.txt	29 Jan 2005 08:21:06 -0000	1.120
  @@ -1,3 +1,5 @@
  +29-Jan-2005: Released L<OSSP sa> 1.2.4
  +24-Jan-2005: Released L<OSSP str> 0.9.10
   24-Jan-2005: Released L<OSSP sa> 1.2.3
   24-Jan-2005: Released L<OSSP cfg> 0.9.8
   23-Jan-2005: Released L<OSSP uuid> 1.2.0
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.101 -r1.102 index.wml
  --- ossp-web/pkg/lib/index.wml	24 Jan 2005 18:04:12 -0000	1.101
  +++ ossp-web/pkg/lib/index.wml	29 Jan 2005 08:21:07 -0000	1.102
  @@ -24,7 +24,7 @@
   			done=100 stable=1.0.4 unstable=none>
     <pkg_item name="sa" longname="OSSP sa" type="lib"
               desc="Socket Abstraction"
  -			done=100 stable=1.2.3 unstable=none>
  +			done=100 stable=1.2.4 unstable=none>
     <pkg_item name="fsl" longname="OSSP fsl" type="lib"
               desc="Faked/Flexible Syslog"
   			done=100 stable=1.5.0 unstable=none>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/sa/index.wml
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 index.wml
  --- ossp-web/pkg/lib/sa/index.wml	24 Jan 2005 17:00:37 -0000	1.21
  +++ ossp-web/pkg/lib/sa/index.wml	29 Jan 2005 08:21:07 -0000	1.22
  @@ -110,7 +110,7 @@
   
   <pkg_status
       name="sa" assign="rse" genesis="Jan-2001"
  -    stable="1.2.3"    stable_date="24-Jan-2005"
  +    stable="1.2.4"    stable_date="29-Jan-2005"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -121,7 +121,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/sa/
       directory=$(FTP_ROOT_DIR)/pkg/lib/sa/
       files="sa-*.tar.gz" 
  -	stable="sa-1\.2\.3\.tar\.gz" unstable="sa-SNAP.*\.tar.gz">
  +	stable="sa-1\.2\.4\.tar\.gz" unstable="sa-SNAP.*\.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jan 30 14:39:09 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 746F57644A; Sun, 30 Jan 2005 14:39:09 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex/ ChangeLog Makefile.in README aclocal.m4 confi...
Message-Id: <20050130133909.746F57644A@mail.ossp.org>
Date: Sun, 30 Jan 2005 14:39:09 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Jan-2005 14:39:09
  Branch: HEAD                             Handle: 2005013013390700

  Modified files:
    ossp-pkg/ex             ChangeLog Makefile.in README aclocal.m4
                            configure.ac devtool devtool.func ex-config.in
                            ex.c ex.h ex.pod ex_test.c ts.c ts.h

  Log:
    Adjusted copyright messages to include new year 2005.

  Summary:
    Revision    Changes     Path
    1.12        +5  -0      ossp-pkg/ex/ChangeLog
    1.10        +3  -3      ossp-pkg/ex/Makefile.in
    1.15        +3  -3      ossp-pkg/ex/README
    1.7         +3  -3      ossp-pkg/ex/aclocal.m4
    1.10        +3  -3      ossp-pkg/ex/configure.ac
    1.4         +1  -1      ossp-pkg/ex/devtool
    1.4         +1  -1      ossp-pkg/ex/devtool.func
    1.7         +3  -3      ossp-pkg/ex/ex-config.in
    1.11        +3  -3      ossp-pkg/ex/ex.c
    1.26        +3  -3      ossp-pkg/ex/ex.h
    1.30        +3  -3      ossp-pkg/ex/ex.pod
    1.14        +3  -3      ossp-pkg/ex/ex_test.c
    1.8         +3  -3      ossp-pkg/ex/ts.c
    1.6         +3  -3      ossp-pkg/ex/ts.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 ChangeLog
  --- ossp-pkg/ex/ChangeLog	5 Apr 2004 14:44:21 -0000	1.11
  +++ ossp-pkg/ex/ChangeLog	30 Jan 2005 13:39:07 -0000	1.12
  @@ -11,6 +11,11 @@
   
     This is the list of all changes to the OSSP ex source tree.
   
  +  Changes between 1.0.4 and 1.0.5 (05-Apr-2004 to xx-Feb-2005)
  +
  +   *) Adjusted copyright messages to include new year 2005.
  +      [Ralf S. Engelschall]
  +
     Changes between 1.0.3 and 1.0.4 (03-Apr-2004 to 05-Apr-2004)
   
      *) Added Autoconf check for va_copy() and use this in 
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 Makefile.in
  --- ossp-pkg/ex/Makefile.in	25 Mar 2004 19:01:42 -0000	1.9
  +++ ossp-pkg/ex/Makefile.in	30 Jan 2005 13:39:07 -0000	1.10
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP ex - Exception Handling
  -##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP ex, an exception handling library
   ##  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/README
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 README
  --- ossp-pkg/ex/README	5 Apr 2004 14:44:21 -0000	1.14
  +++ ossp-pkg/ex/README	30 Jan 2005 13:39:07 -0000	1.15
  @@ -31,9 +31,9 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
  +  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
   
     This file is part of OSSP ex, an exception handling library which
     can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 aclocal.m4
  --- ossp-pkg/ex/aclocal.m4	5 Apr 2004 14:44:21 -0000	1.6
  +++ ossp-pkg/ex/aclocal.m4	30 Jan 2005 13:39:07 -0000	1.7
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP ex - Exception Handling
  -dnl ##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
  +dnl ##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
   dnl ##
   dnl ##  This file is part of OSSP ex, an exception handling library
   dnl ##  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/configure.ac
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 configure.ac
  --- ossp-pkg/ex/configure.ac	5 Apr 2004 14:44:21 -0000	1.9
  +++ ossp-pkg/ex/configure.ac	30 Jan 2005 13:39:07 -0000	1.10
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP ex - Exception Handling
  -dnl ##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
  +dnl ##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
   dnl ##
   dnl ##  This file is part of OSSP ex, an exception handling library
   dnl ##  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/devtool
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 devtool
  --- ossp-pkg/ex/devtool	19 Mar 2004 14:55:46 -0000	1.3
  +++ ossp-pkg/ex/devtool	30 Jan 2005 13:39:07 -0000	1.4
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  devtool -- Development Tool
  -##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   if [ $# -eq 0 ]; then
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/devtool.func
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.func
  --- ossp-pkg/ex/devtool.func	19 Mar 2004 14:55:46 -0000	1.3
  +++ ossp-pkg/ex/devtool.func	30 Jan 2005 13:39:07 -0000	1.4
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   devtool_require () {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ex-config.in
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ex-config.in
  --- ossp-pkg/ex/ex-config.in	25 Mar 2004 19:01:42 -0000	1.6
  +++ ossp-pkg/ex/ex-config.in	30 Jan 2005 13:39:07 -0000	1.7
  @@ -1,9 +1,9 @@
   #!/bin/sh
   ##
   ##  OSSP ex - Exception Handling
  -##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP ex, an exception handling library
   ##  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ex.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 ex.c
  --- ossp-pkg/ex/ex.c	25 Mar 2004 19:01:42 -0000	1.10
  +++ ossp-pkg/ex/ex.c	30 Jan 2005 13:39:07 -0000	1.11
  @@ -1,8 +1,8 @@
   /*
   **  OSSP ex - Exception Handling
  -**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP ex, an exception handling library
   **  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ex.h
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 ex.h
  --- ossp-pkg/ex/ex.h	25 Mar 2004 19:01:42 -0000	1.25
  +++ ossp-pkg/ex/ex.h	30 Jan 2005 13:39:07 -0000	1.26
  @@ -1,8 +1,8 @@
   /*
   **  OSSP ex - Exception Handling
  -**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP ex, an exception handling library
   **  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ex.pod
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 ex.pod
  --- ossp-pkg/ex/ex.pod	25 Mar 2004 19:01:42 -0000	1.29
  +++ ossp-pkg/ex/ex.pod	30 Jan 2005 13:39:07 -0000	1.30
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP ex - Exception Handling
  -##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP ex, an exception library
   ##  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ex_test.c
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 ex_test.c
  --- ossp-pkg/ex/ex_test.c	25 Mar 2004 19:01:44 -0000	1.13
  +++ ossp-pkg/ex/ex_test.c	30 Jan 2005 13:39:07 -0000	1.14
  @@ -1,8 +1,8 @@
   /*
   **  OSSP ex - Exception Handling
  -**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP ex, an exception handling library
   **  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ts.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 ts.c
  --- ossp-pkg/ex/ts.c	5 Apr 2004 14:44:21 -0000	1.7
  +++ ossp-pkg/ex/ts.c	30 Jan 2005 13:39:07 -0000	1.8
  @@ -1,8 +1,8 @@
   /*
   **  OSSP ts - Test Suite Library
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP ts, a small test suite library which
   **  can be found at http://www.ossp.org/pkg/lib/ts/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ts.h
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ts.h
  --- ossp-pkg/ex/ts.h	5 Apr 2004 14:44:21 -0000	1.5
  +++ ossp-pkg/ex/ts.h	30 Jan 2005 13:39:07 -0000	1.6
  @@ -1,8 +1,8 @@
   /*
   **  OSSP ts - Test Suite Library
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP ts, a small test suite library which
   **  can be found at http://www.ossp.org/pkg/lib/ts/.
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jan 30 14:40:06 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DB0B17644A; Sun, 30 Jan 2005 14:40:05 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex/ ChangeLog devtool.conf
Message-Id: <20050130134005.DB0B17644A@mail.ossp.org>
Date: Sun, 30 Jan 2005 14:40:05 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Jan-2005 14:40:05
  Branch: HEAD                             Handle: 2005013013400500

  Modified files:
    ossp-pkg/ex             ChangeLog devtool.conf

  Log:
    Upgrade build environment to GNU libtool 1.5.10 and GNU shtool 2.0.1

  Summary:
    Revision    Changes     Path
    1.13        +4  -0      ossp-pkg/ex/ChangeLog
    1.13        +3  -3      ossp-pkg/ex/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 ChangeLog
  --- ossp-pkg/ex/ChangeLog	30 Jan 2005 13:39:07 -0000	1.12
  +++ ossp-pkg/ex/ChangeLog	30 Jan 2005 13:40:05 -0000	1.13
  @@ -13,6 +13,10 @@
   
     Changes between 1.0.4 and 1.0.5 (05-Apr-2004 to xx-Feb-2005)
   
  +   *) Upgrade build environment to GNU libtool 1.5.10 and
  +      GNU shtool 2.0.1
  +      [Ralf S. Engelschall]
  +
      *) Adjusted copyright messages to include new year 2005.
         [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 devtool.conf
  --- ossp-pkg/ex/devtool.conf	5 Apr 2004 14:44:21 -0000	1.12
  +++ ossp-pkg/ex/devtool.conf	30 Jan 2005 13:40:05 -0000	1.13
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.2 "1.6.*" all
  -    @autogen libtool  1.5.4 "1.5*"
  -    @autogen autoconf 2.59  "2.5[4-9]*"
  +    @autogen shtool   2.0.1  "2.0.*" all
  +    @autogen libtool  1.5.10 "1.5*"
  +    @autogen autoconf 2.59   "2.5[4-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jan 30 14:41:12 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id F1F1B7644A; Sun, 30 Jan 2005 14:41:11 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex/ ChangeLog aclocal.m4 ts.c
Message-Id: <20050130134111.F1F1B7644A@mail.ossp.org>
Date: Sun, 30 Jan 2005 14:41:11 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Jan-2005 14:41:11
  Branch: HEAD                             Handle: 2005013013411100

  Modified files:
    ossp-pkg/ex             ChangeLog aclocal.m4 ts.c

  Log:
    remove trailing whitespaces

  Summary:
    Revision    Changes     Path
    1.14        +1  -1      ossp-pkg/ex/ChangeLog
    1.8         +1  -1      ossp-pkg/ex/aclocal.m4
    1.9         +4  -4      ossp-pkg/ex/ts.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 ChangeLog
  --- ossp-pkg/ex/ChangeLog	30 Jan 2005 13:40:05 -0000	1.13
  +++ ossp-pkg/ex/ChangeLog	30 Jan 2005 13:41:11 -0000	1.14
  @@ -22,7 +22,7 @@
   
     Changes between 1.0.3 and 1.0.4 (03-Apr-2004 to 05-Apr-2004)
   
  -   *) Added Autoconf check for va_copy() and use this in 
  +   *) Added Autoconf check for va_copy() and use this in
         the test suite sub-library in order to fix it.
         [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 aclocal.m4
  --- ossp-pkg/ex/aclocal.m4	30 Jan 2005 13:39:07 -0000	1.7
  +++ ossp-pkg/ex/aclocal.m4	30 Jan 2005 13:41:11 -0000	1.8
  @@ -179,7 +179,7 @@
   AC_DEFUN(AC_CHECK_VA_COPY,[
     dnl #   provide Autoconf display check message
     AC_MSG_CHECKING(for va_copy() function)
  -  dnl #   check for various implementations in priorized sequence   
  +  dnl #   check for various implementations in priorized sequence
     AC_CACHE_VAL(ac_cv_va_copy, [
       ac_cv_va_copy=""
       dnl #   1. check for standardized C99 macro
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ts.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 ts.c
  --- ossp-pkg/ex/ts.c	30 Jan 2005 13:39:07 -0000	1.8
  +++ ossp-pkg/ex/ts.c	30 Jan 2005 13:41:11 -0000	1.9
  @@ -123,7 +123,7 @@
   static int ts_suite_mvxprintf(char *buffer, size_t bufsize, const char *format, va_list ap)
   {
       /* sufficient integer buffer: <available-bits> x log_10(2) + safety */
  -    char ibuf[((sizeof(int)*8)/3)+10]; 
  +    char ibuf[((sizeof(int)*8)/3)+10];
       char *cp;
       char c;
       int d;
  @@ -355,9 +355,9 @@
       /* print test suite summary */
       fprintf(stdout, " __________________________________________________________________\n");
       fprintf(stdout, "\n");
  -    fprintf(stdout, " Test Summary: %d tests (%d ok, %d failed), %d checks (%d ok, %d failed)\n", 
  -            total_tests, (total_tests - total_tests_suite_failed), total_tests_suite_failed, 
  -            total_checks, (total_checks - total_checks_failed), total_checks_failed); 
  +    fprintf(stdout, " Test Summary: %d tests (%d ok, %d failed), %d checks (%d ok, %d failed)\n",
  +            total_tests, (total_tests - total_tests_suite_failed), total_tests_suite_failed,
  +            total_checks, (total_checks - total_checks_failed), total_checks_failed);
       if (total_tests_suite_failed > 0)
           fprintf(stdout, " Test Suite: FAILED\n");
       else
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jan 30 14:58:18 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6130F7644A; Sun, 30 Jan 2005 14:58:18 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex/ ex.pod
Message-Id: <20050130135818.6130F7644A@mail.ossp.org>
Date: Sun, 30 Jan 2005 14:58:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Jan-2005 14:58:18
  Branch: HEAD                             Handle: 2005013013581800

  Modified files:
    ossp-pkg/ex             ex.pod

  Log:
    some cleanups to the manual page

  Summary:
    Revision    Changes     Path
    1.31        +4  -4      ossp-pkg/ex/ex.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ex.pod
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 ex.pod
  --- ossp-pkg/ex/ex.pod	30 Jan 2005 13:39:07 -0000	1.30
  +++ ossp-pkg/ex/ex.pod	30 Jan 2005 13:58:18 -0000	1.31
  @@ -79,9 +79,9 @@
   class of the exception thrower, I<object> identifies the particular
   class instance of the exception thrower, and I<value> is the exceptional
   return code value the thrower wants to communicate. All three parts are
  -of type "C<void *>" internally, but every value is useable which can be
  -lossless "casted" to this type. Exceptions are created on-the-fly by the
  -B<ex_throw> command.
  +of type "C<void *>" internally, but every value which can be lossless
  +"casted" to this type is usable. Exceptions are created on-the-fly by
  +the B<ex_throw> command.
   
   =head2 APPLICATION PROGRAMMER INTERFACE (API)
   
  @@ -102,7 +102,7 @@
   
   This is the I<class> argument of the B<ex_throw> call which created
   the exception. This can globally and uniquely identify the class to
  -which I<ex_value> belongs to . Usually this is a pointer to a static
  +which I<ex_value> belongs to. Usually this is a pointer to a static
   object (variable, structure or function) which identifies the class of
   the thrower and allows the catcher to correctly handle I<ex_value>. It
   is usually just an additional (optional) information to I<ex_value>.
  @@ .

From ossp-cvs-owner@ossp.org  Wed Feb  2 13:25:45 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 12532764A2; Wed,  2 Feb 2005 13:25:45 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pcre/ ChangeLog.OSSP devtool.conf
Message-Id: <20050202122545.12532764A2@mail.ossp.org>
Date: Wed,  2 Feb 2005 13:25:45 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   02-Feb-2005 13:25:44
  Branch: HEAD                             Handle: 2005020212254400

  Modified files:
    ossp-pkg/pcre           ChangeLog.OSSP devtool.conf

  Log:
    upgrade GNU shtool to 2.0.1 and GNU libtool to 1.5.10

  Summary:
    Revision    Changes     Path
    1.22        +5  -0      ossp-pkg/pcre/ChangeLog.OSSP
    1.9         +3  -3      ossp-pkg/pcre/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pcre/ChangeLog.OSSP
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 ChangeLog.OSSP
  --- ossp-pkg/pcre/ChangeLog.OSSP	22 Apr 2004 09:32:51 -0000	1.21
  +++ ossp-pkg/pcre/ChangeLog.OSSP	2 Feb 2005 12:25:44 -0000	1.22
  @@ -2,6 +2,11 @@
    OSSP ChangeLog for PCRE
    =======================
   
  +  Wed Feb  2 13:23:26 CET 2005
  +  *) Upgraded GNU shtool to 2.0.1 and GNU libtool to 1.5.10
  +     [Thomas Lotterer <thomas@lotterer.net>]
  +
  +  Unknown dates
     *) Import PREFIX logic from OSSP l2 cvs diff -r1.2 -r1.3 l2_ut_pcre.h
   
     *) Remove libpcreposix.la target from Makefile.in to disable
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pcre/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 devtool.conf
  --- ossp-pkg/pcre/devtool.conf	19 Mar 2004 14:55:47 -0000	1.8
  +++ ossp-pkg/pcre/devtool.conf	2 Feb 2005 12:25:44 -0000	1.9
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.2 "1.6.*" echo fixperm install mkdir tarball version
  -    @autogen libtool  1.5.2 "1.5*"
  -    @autogen autoconf 2.59  "2.5[4-9]*"
  +    @autogen shtool   2.0.1  "2.0.*" echo fixperm install mkdir tarball version
  +    @autogen libtool  1.5.10 "1.5.*"
  +    @autogen autoconf 2.59   "2.5[4-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .

From ossp-cvs-owner@ossp.org  Wed Feb  2 13:26:45 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A9E0C764A8; Wed,  2 Feb 2005 13:26:45 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ ChangeLog l2_ut_sa.ac l2_ut_sa.c l2_ut_sa.h
Message-Id: <20050202122645.A9E0C764A8@mail.ossp.org>
Date: Wed,  2 Feb 2005 13:26:45 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   02-Feb-2005 13:26:45
  Branch: HEAD                             Handle: 2005020212264400

  Modified files:
    ossp-pkg/l2             ChangeLog l2_ut_sa.ac l2_ut_sa.c l2_ut_sa.h

  Log:
    import OSSP sa 1.2.4

  Summary:
    Revision    Changes     Path
    1.20        +4  -1      ossp-pkg/l2/ChangeLog
    1.11        +113 -0     ossp-pkg/l2/l2_ut_sa.ac
    1.27        +57 -44     ossp-pkg/l2/l2_ut_sa.c
    1.24        +2  -6      ossp-pkg/l2/l2_ut_sa.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 ChangeLog
  --- ossp-pkg/l2/ChangeLog	24 Jan 2005 15:05:36 -0000	1.19
  +++ ossp-pkg/l2/ChangeLog	2 Feb 2005 12:26:44 -0000	1.20
  @@ -9,8 +9,11 @@
     ChangeLog
     =========
   
  -  Changes between 0.9.8 and 0.9.9 (22-Apr-2004 to 24-Jan-2005)
  +  Changes between 0.9.8 and 0.9.9 (24-Apr-2004 to 01-Feb-2005)
     
  +    *) import OSSP sa 1.2.4
  +       [Thomas Lotterer <thomas@lotterer.net>]
  +
       *) Upgraded build environment to GNU shtool 2.0.1 and
          GNU libtool 1.5.10.
          [Ralf S. Engelschall <rse@engelschall.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_sa.ac
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 l2_ut_sa.ac
  --- ossp-pkg/l2/l2_ut_sa.ac	24 Jan 2005 15:03:18 -0000	1.10
  +++ ossp-pkg/l2/l2_ut_sa.ac	2 Feb 2005 12:26:44 -0000	1.11
  @@ -95,6 +95,116 @@
   )
   ])dnl
   
  +dnl ##
  +dnl ##  Check for C99 va_copy() implementation
  +dnl ##  (and provide fallback implementation if neccessary)
  +dnl ##
  +dnl ##  configure.in:
  +dnl ##    SA_CHECK_VA_COPY
  +dnl ##  foo.c:
  +dnl ##    #include "config.h"
  +dnl ##    [...]
  +dnl ##    va_copy(d,s)
  +dnl ##
  +dnl ##  This check is rather complex: first because we really have to
  +dnl ##  try various possible implementations in sequence and second, we
  +dnl ##  cannot define a macro in config.h with parameters directly.
  +dnl ##
  +
  +dnl #   test program for va_copy() implementation
  +changequote(<<,>>)
  +m4_define(__va_copy_test, <<[
  +#include <stdlib.h>
  +#include <stdarg.h>
  +#include <string.h>
  +#define DO_VA_COPY(d, s) $1
  +void test(char *str, ...)
  +{
  +    va_list ap, ap2;
  +    int i;
  +    va_start(ap, str);
  +    DO_VA_COPY(ap2, ap);
  +    for (i = 1; i <= 9; i++) {
  +        int k = (int)va_arg(ap, int);
  +        if (k != i)
  +            abort();
  +    }
  +    DO_VA_COPY(ap, ap2);
  +    for (i = 1; i <= 9; i++) {
  +        int k = (int)va_arg(ap, int);
  +        if (k != i)
  +            abort();
  +    }
  +    va_end(ap);
  +}
  +int main(int argc, char *argv[])
  +{
  +    test("test", 1, 2, 3, 4, 5, 6, 7, 8, 9);
  +    exit(0);
  +}
  +]>>)
  +changequote([,])
  +
  +dnl #   test driver for va_copy() implementation
  +m4_define(__va_copy_check, [
  +    AH_VERBATIM($1,
  +[/* Predefined possible va_copy() implementation (id: $1) */
  +#define __VA_COPY_USE_$1(d, s) $2])
  +    if test ".$ac_cv_va_copy" = .; then
  +        AC_TRY_RUN(__va_copy_test($2), [ac_cv_va_copy="$1"])
  +    fi
  +])
  +
  +dnl #   Autoconf check for va_copy() implementation checking
  +AC_DEFUN(SA_CHECK_VA_COPY,[
  +  dnl #   provide Autoconf display check message
  +  AC_MSG_CHECKING(for va_copy() function)
  +  dnl #   check for various implementations in priorized sequence   
  +  AC_CACHE_VAL(ac_cv_va_copy, [
  +    ac_cv_va_copy=""
  +    dnl #   1. check for standardized C99 macro
  +    __va_copy_check(C99, [va_copy((d), (s))])
  +    dnl #   2. check for alternative/deprecated GCC macro
  +    __va_copy_check(GCM, [VA_COPY((d), (s))])
  +    dnl #   3. check for internal GCC macro (high-level define)
  +    __va_copy_check(GCH, [__va_copy((d), (s))])
  +    dnl #   4. check for internal GCC macro (built-in function)
  +    __va_copy_check(GCB, [__builtin_va_copy((d), (s))])
  +    dnl #   5. check for assignment approach (assuming va_list is a struct)
  +    __va_copy_check(ASS, [do { (d) = (s); } while (0)])
  +    dnl #   6. check for assignment approach (assuming va_list is a pointer)
  +    __va_copy_check(ASP, [do { *(d) = *(s); } while (0)])
  +    dnl #   7. check for memory copying approach (assuming va_list is a struct)
  +    __va_copy_check(CPS, [memcpy((void *)&(d), (void *)&(s)), sizeof((s))])
  +    dnl #   8. check for memory copying approach (assuming va_list is a pointer)
  +    __va_copy_check(CPP, [memcpy((void *)(d), (void *)(s)), sizeof(*(s))])
  +    if test ".$ac_cv_va_copy" = .; then
  +        AC_ERROR([no working implementation found])
  +    fi
  +  ])
  +  dnl #   optionally activate the fallback implementation
  +  if test ".$ac_cv_va_copy" = ".C99"; then
  +      AC_DEFINE(HAVE_VA_COPY, 1, [Define if va_copy() macro exists (and no fallback implementation is required)])
  +  fi
  +  dnl #   declare which fallback implementation to actually use
  +  AC_DEFINE_UNQUOTED([__VA_COPY_USE], [__VA_COPY_USE_$ac_cv_va_copy],
  +      [Define to id of used va_copy() implementation])
  +  dnl #   provide activation hook for fallback implementation
  +  AH_VERBATIM([__VA_COPY_ACTIVATION],
  +[/* Optional va_copy() implementation activation */
  +#ifndef HAVE_VA_COPY
  +#define va_copy(d, s) __VA_COPY_USE(d, s)
  +#endif
  +])
  +  dnl #   provide Autoconf display result message
  +  if test ".$ac_cv_va_copy" = ".C99"; then
  +      AC_MSG_RESULT([yes])
  +  else
  +      AC_MSG_RESULT([no (using fallback implementation)])
  +  fi
  +])
  +
  +
   dnl #   Check for anything OSSP SA wants to know
   dnl #   configure.in:
   dnl #     SA_CHECK_ALL
  @@ -121,5 +231,8 @@
       SA_CHECK_TYPEDEF(ssize_t, sys/types.h)
       SA_CHECK_SOCKOPT(SO_RCVTIMEO)
       SA_CHECK_SOCKOPT(SO_SNDTIMEO)
  +
  +    dnl # check for va_copy()
  +    SA_CHECK_VA_COPY
   ])
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_sa.c
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 l2_ut_sa.c
  --- ossp-pkg/l2/l2_ut_sa.c	24 Jan 2005 15:03:18 -0000	1.26
  +++ ossp-pkg/l2/l2_ut_sa.c	2 Feb 2005 12:26:44 -0000	1.27
  @@ -210,13 +210,14 @@
   
   /* system call table */
   typedef struct {
  -    SA_SC_DECLARE_3(int,     connect,  int, const struct sockaddr *, socklen_t)
  -    SA_SC_DECLARE_3(int,     accept,   int, struct sockaddr *, socklen_t *)
  -    SA_SC_DECLARE_5(int,     select,   int, fd_set *, fd_set *, fd_set *, struct timeval *)
  -    SA_SC_DECLARE_3(ssize_t, read,     int, void *, size_t)
  -    SA_SC_DECLARE_3(ssize_t, write,    int, const void *, size_t)
  -    SA_SC_DECLARE_6(ssize_t, recvfrom, int, void *, size_t, int, struct sockaddr *, socklen_t *)
  -    SA_SC_DECLARE_6(ssize_t, sendto,   int, const void *, size_t, int, const struct sockaddr *, socklen_t)
  +    SA_SC_DECLARE_3(int,              connect,       int, const struct sockaddr *, socklen_t)
  +    SA_SC_DECLARE_3(int,              accept,        int, struct sockaddr *, socklen_t *)
  +    SA_SC_DECLARE_5(int,              select,        int, fd_set *, fd_set *, fd_set *, struct timeval *)
  +    SA_SC_DECLARE_3(ssize_t,          read,          int, void *, size_t)
  +    SA_SC_DECLARE_3(ssize_t,          write,         int, const void *, size_t)
  +    SA_SC_DECLARE_6(ssize_t,          recvfrom,      int, void *, size_t, int, struct sockaddr *, socklen_t *)
  +    SA_SC_DECLARE_6(ssize_t,          sendto,        int, const void *, size_t, int, const struct sockaddr *, socklen_t)
  +    SA_SC_DECLARE_1(struct hostent *, gethostbyname, const char *name)
   } sa_syscall_tab_t;
   
   /* socket option information */
  @@ -497,8 +498,8 @@
       struct servent *se;
       int bIPv6;
       int bNumeric;
  -    char *cpHost;
  -    char *cpPort;
  +    const char *cpHost;
  +    const char *cpPort;
       char *cpProto;
       unsigned int nPort;
       const char *cpPath;
  @@ -559,7 +560,7 @@
       }
       else if (strncmp(uri, "inet://", 7) == 0) {
           /* parse URI into host, port and protocol parts */
  -        cpHost = (char *)(uri+7);
  +        cpHost = uri+7;
           bIPv6 = FALSE;
           if (cpHost[0] == '[') {
               /* IPv6 address (see RFC2732) */
  @@ -652,7 +653,7 @@
               sf = AF_INET6;
           }
   #endif
  -        else if ((he = gethostbyname(cpHost)) != NULL) {
  +        else if ((he = SA_SC_CALL_1(sa, gethostbyname, cpHost)) != NULL) {
               if (he->h_addrtype == AF_INET) {
                   sa4.sin_family = AF_INET;
                   sa4.sin_port = htons(nPort);
  @@ -940,13 +941,13 @@
           return SA_OK;
   
   #if defined(SO_RCVTIMEO) && defined(USE_SO_RCVTIMEO) && defined(SO_SNDTIMEO) && defined(USE_SO_SNDTIMEO)
  -    if (SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_READ])) {
  +    if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_READ])) {
           if (setsockopt(sa->fdSocket, SOL_SOCKET, SO_RCVTIMEO,
                          (const void *)(&sa->tvTimeout[SA_TIMEOUT_READ]),
                          (socklen_t)(sizeof(sa->tvTimeout[SA_TIMEOUT_READ]))) < 0)
               return SA_RC(SA_ERR_SYS);
       }
  -    if (SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_WRITE])) {
  +    if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_WRITE])) {
           if (setsockopt(sa->fdSocket, SOL_SOCKET, SO_SNDTIMEO,
                          (const void *)(&sa->tvTimeout[SA_TIMEOUT_WRITE]),
                          (socklen_t)(sizeof(sa->tvTimeout[SA_TIMEOUT_WRITE]))) < 0)
  @@ -989,7 +990,7 @@
   #if defined(SO_LINGER)
                       struct linger linger;
                       linger.l_onoff  = (sa->optInfo[i].value == 0 ? 0 : 1);
  -                    linger.l_linger = sa->optInfo[i].value;
  +                    linger.l_linger = (sa->optInfo[i].value <= 0 ? 0 : sa->optInfo[i].value);
                       if (setsockopt(sa->fdSocket, SOL_SOCKET, SO_LINGER,
                                      (const void *)&linger,
                                      (socklen_t)sizeof(struct linger)) < 0)
  @@ -1175,13 +1176,14 @@
       }
   
       /* init syscall object attributes */
  -    SA_SC_ASSIGN(sa, connect,  connect,  NULL);
  -    SA_SC_ASSIGN(sa, accept,   accept,   NULL);
  -    SA_SC_ASSIGN(sa, select,   select,   NULL);
  -    SA_SC_ASSIGN(sa, read,     read,     NULL);
  -    SA_SC_ASSIGN(sa, write,    write,    NULL);
  -    SA_SC_ASSIGN(sa, recvfrom, recvfrom, NULL);
  -    SA_SC_ASSIGN(sa, sendto,   sendto,   NULL);
  +    SA_SC_ASSIGN(sa, connect,       connect,       NULL);
  +    SA_SC_ASSIGN(sa, accept,        accept,        NULL);
  +    SA_SC_ASSIGN(sa, select,        select,        NULL);
  +    SA_SC_ASSIGN(sa, read,          read,          NULL);
  +    SA_SC_ASSIGN(sa, write,         write,         NULL);
  +    SA_SC_ASSIGN(sa, recvfrom,      recvfrom,      NULL);
  +    SA_SC_ASSIGN(sa, sendto,        sendto,        NULL);
  +    SA_SC_ASSIGN(sa, gethostbyname, gethostbyname, NULL);
   
       /* pass object to caller */
       *sap = sa;
  @@ -1339,7 +1341,7 @@
           }
           case SA_OPTION_LINGER: {
   #if defined(SO_LINGER)
  -            int amount = ((int)va_arg(ap, int) ? 1 : 0);
  +            int amount = (int)va_arg(ap, int);
               sa->optInfo[SA_OPTION_LINGER].value = amount;
               sa->optInfo[SA_OPTION_LINGER].todo = TRUE;
   #else
  @@ -1404,13 +1406,14 @@
       /* assign system call */
       rv = SA_OK;
       switch (id) {
  -        case SA_SYSCALL_CONNECT:  SA_SC_ASSIGN(sa, connect,  fptr, fctx); break;
  -        case SA_SYSCALL_ACCEPT:   SA_SC_ASSIGN(sa, accept,   fptr, fctx); break;
  -        case SA_SYSCALL_SELECT:   SA_SC_ASSIGN(sa, select,   fptr, fctx); break;
  -        case SA_SYSCALL_READ:     SA_SC_ASSIGN(sa, read,     fptr, fctx); break;
  -        case SA_SYSCALL_WRITE:    SA_SC_ASSIGN(sa, write,    fptr, fctx); break;
  -        case SA_SYSCALL_RECVFROM: SA_SC_ASSIGN(sa, recvfrom, fptr, fctx); break;
  -        case SA_SYSCALL_SENDTO:   SA_SC_ASSIGN(sa, sendto,   fptr, fctx); break;
  +        case SA_SYSCALL_CONNECT:       SA_SC_ASSIGN(sa, connect,       fptr, fctx); break;
  +        case SA_SYSCALL_ACCEPT:        SA_SC_ASSIGN(sa, accept,        fptr, fctx); break;
  +        case SA_SYSCALL_SELECT:        SA_SC_ASSIGN(sa, select,        fptr, fctx); break;
  +        case SA_SYSCALL_READ:          SA_SC_ASSIGN(sa, read,          fptr, fctx); break;
  +        case SA_SYSCALL_WRITE:         SA_SC_ASSIGN(sa, write,         fptr, fctx); break;
  +        case SA_SYSCALL_RECVFROM:      SA_SC_ASSIGN(sa, recvfrom,      fptr, fctx); break;
  +        case SA_SYSCALL_SENDTO:        SA_SC_ASSIGN(sa, sendto,        fptr, fctx); break;
  +        case SA_SYSCALL_GETHOSTBYNAME: SA_SC_ASSIGN(sa, gethostbyname, fptr, fctx); break;
           default: rv = SA_ERR_ARG;
       }
   
  @@ -1453,6 +1456,7 @@
       socklen_t len;
       sa_rc_t rv;
       struct timeval *tv;
  +    struct timeval tv_buf;
   
       /* argument sanity check(s) */
       if (sa == NULL || raddr == NULL)
  @@ -1509,12 +1513,14 @@
       FD_ZERO(&wset);
       FD_SET(sa->fdSocket, &rset);
       FD_SET(sa->fdSocket, &wset);
  -    if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_CONNECT]))
  -        tv = &sa->tvTimeout[SA_TIMEOUT_CONNECT];
  +    if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_CONNECT])) {
  +        memcpy(&tv_buf, &sa->tvTimeout[SA_TIMEOUT_CONNECT], sizeof(struct timeval));
  +        tv = &tv_buf;
  +    }
       else
           tv = NULL;
       do {
  -        n = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &rset, &wset, NULL, tv);
  +        n = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &rset, &wset, (fd_set *)NULL, tv);
       } while (n == -1 && errno == EINTR);
   
       /* decide on return semantic */
  @@ -1588,6 +1594,7 @@
   #endif
       } sa_buf;
       socklen_t sa_size;
  +    struct timeval tv;
       int s;
       int i;
   
  @@ -1607,9 +1614,9 @@
       if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_ACCEPT])) {
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
  +        memcpy(&tv, &sa->tvTimeout[SA_TIMEOUT_ACCEPT], sizeof(struct timeval));
           do {
  -            n = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &fds, NULL, NULL,
  -                             &sa->tvTimeout[SA_TIMEOUT_ACCEPT]);
  +            n = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &fds, (fd_set *)NULL, (fd_set *)NULL, &tv);
           } while (n == -1 && errno == EINTR);
           if (n == 0)
               return SA_RC(SA_ERR_TMT);
  @@ -1650,6 +1657,7 @@
       SA_SC_COPY((*csa), sa, write);
       SA_SC_COPY((*csa), sa, recvfrom);
       SA_SC_COPY((*csa), sa, sendto);
  +    SA_SC_COPY((*csa), sa, gethostbyname);
   
       /* copy-over original timeout values */
       for (i = 0; i < (int)(sizeof(sa->tvTimeout)/sizeof(sa->tvTimeout[0])); i++) {
  @@ -1759,6 +1767,7 @@
       int rv;
   #if !(defined(SO_RCVTIMEO) && defined(USE_SO_RCVTIMEO) && defined(SO_SNDTIMEO) && defined(USE_SO_SNDTIMEO))
       fd_set fds;
  +    struct timeval tv;
   #endif
   
       /* if timeout is enabled, perform explicit/smart blocking instead
  @@ -1767,9 +1776,9 @@
       if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_READ])) {
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
  +        memcpy(&tv, &sa->tvTimeout[SA_TIMEOUT_READ], sizeof(struct timeval));
           do {
  -            rv = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &fds, NULL, NULL,
  -                              &sa->tvTimeout[SA_TIMEOUT_READ]);
  +            rv = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &fds, (fd_set *)NULL, (fd_set *)NULL, &tv);
           } while (rv == -1 && errno == EINTR);
           if (rv == 0) {
               errno = ETIMEDOUT;
  @@ -1938,6 +1947,7 @@
       int rv;
   #if !(defined(SO_RCVTIMEO) && defined(USE_SO_RCVTIMEO) && defined(SO_SNDTIMEO) && defined(USE_SO_SNDTIMEO))
       fd_set fds;
  +    struct timeval tv;
   #endif
   
       /* if timeout is enabled, perform explicit/smart blocking instead
  @@ -1946,9 +1956,9 @@
       if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_WRITE])) {
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
  +        memcpy(&tv, &sa->tvTimeout[SA_TIMEOUT_WRITE], sizeof(struct timeval));
           do {
  -            rv = SA_SC_CALL_5(sa, select, sa->fdSocket+1, NULL, &fds, NULL,
  -                              &sa->tvTimeout[SA_TIMEOUT_WRITE]);
  +            rv = SA_SC_CALL_5(sa, select, sa->fdSocket+1, (fd_set *)NULL, &fds, (fd_set *)NULL, &tv);
           } while (rv == -1 && errno == EINTR);
           if (rv == 0) {
               errno = ETIMEDOUT;
  @@ -2173,6 +2183,7 @@
       ssize_t n;
       int k;
       fd_set fds;
  +    struct timeval tv;
   
       /* argument sanity check(s) */
       if (sa == NULL || buf == NULL || buflen == 0 || raddr == NULL)
  @@ -2191,9 +2202,9 @@
       if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_READ])) {
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
  +        memcpy(&tv, &sa->tvTimeout[SA_TIMEOUT_READ], sizeof(struct timeval));
           do {
  -            k = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &fds, NULL, NULL,
  -                             &sa->tvTimeout[SA_TIMEOUT_READ]);
  +            k = SA_SC_CALL_5(sa, select, sa->fdSocket+1, &fds, (fd_set *)NULL, (fd_set *)NULL, &tv);
           } while (k == -1 && errno == EINTR);
           if (k == 0)
               errno = ETIMEDOUT;
  @@ -2229,6 +2240,7 @@
       int k;
       fd_set fds;
       sa_rc_t rv;
  +    struct timeval tv;
   
       /* argument sanity check(s) */
       if (sa == NULL || buf == NULL || buflen == 0 || raddr == NULL)
  @@ -2248,9 +2260,9 @@
       if (!SA_TVISZERO(sa->tvTimeout[SA_TIMEOUT_WRITE])) {
           FD_ZERO(&fds);
           FD_SET(sa->fdSocket, &fds);
  +        memcpy(&tv, &sa->tvTimeout[SA_TIMEOUT_WRITE], sizeof(struct timeval));
           do {
  -            k = SA_SC_CALL_5(sa, select, sa->fdSocket+1, NULL, &fds, NULL,
  -                             &sa->tvTimeout[SA_TIMEOUT_WRITE]);
  +            k = SA_SC_CALL_5(sa, select, sa->fdSocket+1, (fd_set *)NULL, &fds, (fd_set *)NULL, &tv);
           } while (k == -1 && errno == EINTR);
           if (k == 0)
               errno = ETIMEDOUT;
  @@ -2273,6 +2285,7 @@
   sa_rc_t sa_sendf(sa_t *sa, sa_addr_t *raddr, const char *cpFmt, ...)
   {
       va_list ap;
  +    va_list apbak;
       int nBuf;
       char *cpBuf;
       sa_rc_t rv;
  @@ -2284,9 +2297,10 @@
   
       /* format string into temporary buffer */
       va_start(ap, cpFmt);
  +    va_copy(apbak, ap);
       if ((nBuf = sa_mvsnprintf(NULL, 0, cpFmt, ap)) == -1)
           return SA_RC(SA_ERR_FMT);
  -    va_end(ap);
  +    va_copy(ap, apbak);
       if ((nBuf+1) > (int)sizeof(caBuf)) {
           /* requires a larger buffer, so allocate dynamically */
           if ((cpBuf = (char *)malloc((size_t)(nBuf+1))) == NULL)
  @@ -2296,7 +2310,6 @@
           /* fits into small buffer, so allocate statically */
           cpBuf = caBuf;
       }
  -    va_start(ap, cpFmt);
       rv = SA_OK;
       if (sa_mvsnprintf(cpBuf, (size_t)(nBuf+1), cpFmt, ap) == -1)
           rv = SA_ERR_FMT;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_sa.h
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 l2_ut_sa.h
  --- ossp-pkg/l2/l2_ut_sa.h	24 Jan 2005 15:03:18 -0000	1.23
  +++ ossp-pkg/l2/l2_ut_sa.h	2 Feb 2005 12:26:44 -0000	1.24
  @@ -157,7 +157,8 @@
       SA_SYSCALL_READ,
       SA_SYSCALL_WRITE,
       SA_SYSCALL_RECVFROM,
  -    SA_SYSCALL_SENDTO
  +    SA_SYSCALL_SENDTO,
  +    SA_SYSCALL_GETHOSTBYNAME
   } sa_syscall_t;
   
   /* unique library identifier */
  @@ -210,10 +211,5 @@
   /* error handling operations */
   extern char   *sa_error        (sa_rc_t __rv);
   
  -/* cleanup */
  -#if defined(HAVE_CONFIG_H) && !defined(HAVE_SOCKLEN_T)
  -#undef socklen_t
  -#endif
  -
   #endif /* __SA_H__ */
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Feb  2 13:27:01 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1F30F764CE; Wed,  2 Feb 2005 13:27:01 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ README l2_version.c
Message-Id: <20050202122701.1F30F764CE@mail.ossp.org>
Date: Wed,  2 Feb 2005 13:27:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   02-Feb-2005 13:27:01
  Branch: HEAD                             Handle: 2005020212270000

  Modified files:
    ossp-pkg/l2             README l2_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.20        +1  -1      ossp-pkg/l2/README
    1.17        +9  -9      ossp-pkg/l2/l2_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/README
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 README
  --- ossp-pkg/l2/README	24 Jan 2005 15:03:17 -0000	1.19
  +++ ossp-pkg/l2/README	2 Feb 2005 12:27:00 -0000	1.20
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_|_____|
   
     OSSP l2 -- Flexible Logging
  -  Version 0.9.8 (22-Apr-2004)
  +  Version 0.9.9 (02-Feb-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_version.c
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 l2_version.c
  --- ossp-pkg/l2/l2_version.c	22 Apr 2004 15:48:06 -0000	1.16
  +++ ossp-pkg/l2/l2_version.c	2 Feb 2005 12:27:00 -0000	1.17
  @@ -8,7 +8,7 @@
   #ifndef _L2_VERSION_C_
   #define _L2_VERSION_C_
   
  -#define L2_VERSION 0x009208
  +#define L2_VERSION 0x009209
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _L2_VERSION_C_AS_HEADER_
   
   l2_version_t l2_version = {
  -    0x009208,
  -    "0.9.8",
  -    "0.9.8 (22-Apr-2004)",
  -    "This is OSSP l2, Version 0.9.8 (22-Apr-2004)",
  -    "OSSP l2 0.9.8 (22-Apr-2004)",
  -    "OSSP l2/0.9.8",
  -    "@(#)OSSP l2 0.9.8 (22-Apr-2004)",
  -    "$Id: l2_version.c,v 1.16 2004/04/22 15:48:06 thl Exp $"
  +    0x009209,
  +    "0.9.9",
  +    "0.9.9 (02-Feb-2005)",
  +    "This is OSSP l2, Version 0.9.9 (02-Feb-2005)",
  +    "OSSP l2 0.9.9 (02-Feb-2005)",
  +    "OSSP l2/0.9.9",
  +    "@(#)OSSP l2 0.9.9 (02-Feb-2005)",
  +    "$Id: l2_version.c,v 1.17 2005/02/02 12:27:00 thl Exp $"
   };
   
   #endif /* _L2_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Wed Feb  2 13:47:28 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4176C7645D; Wed,  2 Feb 2005 13:47:28 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ devtool.conf
Message-Id: <20050202124728.4176C7645D@mail.ossp.org>
Date: Wed,  2 Feb 2005 13:47:28 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   02-Feb-2005 13:47:28
  Branch: HEAD                             Handle: 2005020212472700

  Modified files:
    ossp-pkg/fsl            devtool.conf

  Log:
    fix copy and paste cosmetic bug

  Summary:
    Revision    Changes     Path
    1.23        +1  -1      ossp-pkg/fsl/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 devtool.conf
  --- ossp-pkg/fsl/devtool.conf	19 Mar 2004 15:31:19 -0000	1.22
  +++ ossp-pkg/fsl/devtool.conf	2 Feb 2005 12:47:27 -0000	1.23
  @@ -26,7 +26,7 @@
       @autoclean autoconf
   
       for name in l2 cfg pcre; do
  -        echo "===> lib_${name} (devtool autogen)"
  +        echo "===> lib_${name} (devtool autoclean)"
           (cd lib_${name} && ./devtool autoclean)
           echo "<=== lib_${name}"
       done
  @@ .

From ossp-cvs-owner@ossp.org  Wed Feb  2 13:50:42 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C76837645D; Wed,  2 Feb 2005 13:50:42 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ ChangeLog devtool.conf
Message-Id: <20050202125042.C76837645D@mail.ossp.org>
Date: Wed,  2 Feb 2005 13:50:42 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   02-Feb-2005 13:50:42
  Branch: HEAD                             Handle: 2005020212504200

  Modified files:
    ossp-pkg/fsl            ChangeLog devtool.conf

  Log:
    upgrade build environment to GNU shtool 2.0.1 and GNU libtool 1.5.10

  Summary:
    Revision    Changes     Path
    1.35        +4  -0      ossp-pkg/fsl/ChangeLog
    1.24        +3  -3      ossp-pkg/fsl/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 ChangeLog
  --- ossp-pkg/fsl/ChangeLog	26 Apr 2004 12:35:43 -0000	1.34
  +++ ossp-pkg/fsl/ChangeLog	2 Feb 2005 12:50:42 -0000	1.35
  @@ -8,6 +8,10 @@
   
     CHANGELOG
   
  +    *) Upgraded build environment to GNU shtool 2.0.1 and
  +       GNU libtool 1.5.10.
  +       [Thomas Lotterer <thomas@lotterer.net>]
  +
     Changes between 1.5a3 and 1.5 (26-Apr-2004)
   
       *) None. OpenPKG build farm succeeded on FreeBSD 4.9-STABLE, FreeBSD
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 devtool.conf
  --- ossp-pkg/fsl/devtool.conf	2 Feb 2005 12:47:27 -0000	1.23
  +++ ossp-pkg/fsl/devtool.conf	2 Feb 2005 12:50:42 -0000	1.24
  @@ -10,9 +10,9 @@
       done
   
   %autogen
  -    @autogen shtool   1.6.2 "1.6.*" echo fixperm install mkdir tarball version
  -    @autogen libtool  1.5.2 "1.5*"
  -    @autogen autoconf 2.59  "2.5[4-9]*"
  +    @autogen shtool   2.0.1  "2.0.*" echo fixperm install mkdir tarball version
  +    @autogen libtool  1.5.10 "1.5.*"
  +    @autogen autoconf 2.59   "2.5[4-9]*"
   
       for name in l2 cfg pcre; do
           echo "===> lib_${name} (devtool autogen)"
  @@ .

From ossp-cvs-owner@ossp.org  Wed Feb  2 13:52:13 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D041B7645D; Wed,  2 Feb 2005 13:52:12 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ ChangeLog devtool.conf fsl.c
Message-Id: <20050202125212.D041B7645D@mail.ossp.org>
Date: Wed,  2 Feb 2005 13:52:12 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   02-Feb-2005 13:52:12
  Branch: HEAD                             Handle: 2005020212521101

  Modified files:
    ossp-pkg/fsl            ChangeLog devtool.conf fsl.c

  Log:
    Introduce a new %checkout target to devtool.conf

  Summary:
    Revision    Changes     Path
    1.36        +17 -0      ossp-pkg/fsl/ChangeLog
    1.25        +22 -2      ossp-pkg/fsl/devtool.conf
    1.68        +1  -1      ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 ChangeLog
  --- ossp-pkg/fsl/ChangeLog	2 Feb 2005 12:50:42 -0000	1.35
  +++ ossp-pkg/fsl/ChangeLog	2 Feb 2005 12:52:12 -0000	1.36
  @@ -8,6 +8,23 @@
   
     CHANGELOG
   
  +  Changes between 1.5 and 1.6b1 (02-Feb-2005)
  +
  +    *) Use updated OSSP lib_l2 0.9.9 (includes an updated OSSP sa 1.2.4)
  +       which improves portability issues related to varargs (seen on
  +       AMD64).
  +       [Thomas Lotterer <thomas@lotterer.net>]
  +
  +    *) Use updated OSSP lib_cfg 0.9.8 which improves portability and
  +       robustness. A small adjustment was necessary due to a change in
  +       cfg_node_root.
  +       [Thomas Lotterer <thomas@lotterer.net>]
  +
  +    *) Introduce a new %checkout target to devtool.conf which allows
  +       easy review of what version (if tagged) of libraries was
  +       embedded. Taken from OSSP lmtp2nntp.
  +       [Thomas Lotterer <thomas@lotterer.net>]
  +       
       *) Upgraded build environment to GNU shtool 2.0.1 and
          GNU libtool 1.5.10.
          [Thomas Lotterer <thomas@lotterer.net>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 devtool.conf
  --- ossp-pkg/fsl/devtool.conf	2 Feb 2005 12:50:42 -0000	1.24
  +++ ossp-pkg/fsl/devtool.conf	2 Feb 2005 12:52:11 -0000	1.25
  @@ -3,9 +3,29 @@
   ##
   
   %checkout
  +    BRANCH_L2="L2_0_9_9"
  +    BRANCH_CFG="CFG_0_9_8"
  +    BRANCH_PCRE=""
       for name in l2 cfg pcre; do
  -        echo "===> lib_${name} (cvs co)"
  -        cvs co -d lib_${name} ${name}
  +        release=BRANCH_`echo ${name} | tr [a-z] [A-Z]`
  +        release=`eval echo \\$${release}`
  +        if [ ".${release}" = . ]; then
  +            if [ -d lib_${name}/CVS ]; then
  +                echo "===> lib_${name} (cvs up HEAD)"
  +                ( cd lib_${name} && cvs up -A )
  +            else
  +                echo "===> lib_${name} (cvs co HEAD)"
  +                cvs co -A -d lib_${name} ${name}
  +            fi
  +        else
  +            if [ -d lib_${name}/CVS ]; then
  +                echo "===> lib_${name} (cvs up ${release})"
  +                ( cd lib_${name} && cvs up -r${release} )
  +            else
  +                echo "===> lib_${name} (cvs co ${release})"
  +                cvs co -r${release} -d lib_${name} ${name}
  +            fi
  +        fi
           echo "<=== lib_${name}"
       done
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl.c
  ============================================================================
  $ cvs diff -u -r1.67 -r1.68 fsl.c
  --- ossp-pkg/fsl/fsl.c	22 Apr 2004 10:30:31 -0000	1.67
  +++ ossp-pkg/fsl/fsl.c	2 Feb 2005 12:52:12 -0000	1.68
  @@ -578,7 +578,7 @@
       fsldebug(L2_LEVEL_TRACE, "processcfg() ident/facility=\"%s\", mode=%s", cpISF, mode == 0 ? "map/ident" : "default");
   
       /*  find configuration root node and check if it is a sequence and has one or more directives below it */
  -    if ((cfgrv = cfg_node_root(cfg, &cfgseq)) != CFG_OK) {
  +    if ((cfgrv = cfg_node_root(cfg, NULL, &cfgseq)) != CFG_OK) {
           (void)cfg_error(cfg, cfgrv, &cp); fsldebug(L2_LEVEL_ERROR, "processcfg: cfg_node_root() failed with error %s (%d)", cp, cfgrv); CU(FSL_ERR_CUS); }
   
       /*  only dump once */
  @@ .

From ossp-cvs-owner@ossp.org  Wed Feb  2 13:52:33 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 27DF3764AC; Wed,  2 Feb 2005 13:52:33 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ README fsl_version.c
Message-Id: <20050202125233.27DF3764AC@mail.ossp.org>
Date: Wed,  2 Feb 2005 13:52:33 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   02-Feb-2005 13:52:33
  Branch: HEAD                             Handle: 2005020212523200

  Modified files:
    ossp-pkg/fsl            README fsl_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.46        +1  -1      ossp-pkg/fsl/README
    1.33        +9  -9      ossp-pkg/fsl/fsl_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/README
  ============================================================================
  $ cvs diff -u -r1.45 -r1.46 README
  --- ossp-pkg/fsl/README	26 Apr 2004 12:35:44 -0000	1.45
  +++ ossp-pkg/fsl/README	2 Feb 2005 12:52:32 -0000	1.46
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_| |___/_|
    
     OSSP fsl - Faking/Flexible Syslog Library
  -  Version 1.5.0 (26-Apr-2004)
  +  Version 1.6b1 (02-Feb-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl_version.c
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 fsl_version.c
  --- ossp-pkg/fsl/fsl_version.c	26 Apr 2004 12:35:44 -0000	1.32
  +++ ossp-pkg/fsl/fsl_version.c	2 Feb 2005 12:52:32 -0000	1.33
  @@ -8,7 +8,7 @@
   #ifndef _FSL_VERSION_C_
   #define _FSL_VERSION_C_
   
  -#define FSL_VERSION 0x105200
  +#define FSL_VERSION 0x106101
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _FSL_VERSION_C_AS_HEADER_
   
   fsl_version_t fsl_version = {
  -    0x105200,
  -    "1.5.0",
  -    "1.5.0 (26-Apr-2004)",
  -    "This is OSSP fsl, Version 1.5.0 (26-Apr-2004)",
  -    "OSSP fsl 1.5.0 (26-Apr-2004)",
  -    "OSSP fsl/1.5.0",
  -    "@(#)OSSP fsl 1.5.0 (26-Apr-2004)",
  -    "$Id: fsl_version.c,v 1.32 2004/04/26 12:35:44 thl Exp $"
  +    0x106101,
  +    "1.6b1",
  +    "1.6b1 (02-Feb-2005)",
  +    "This is OSSP fsl, Version 1.6b1 (02-Feb-2005)",
  +    "OSSP fsl 1.6b1 (02-Feb-2005)",
  +    "OSSP fsl/1.6b1",
  +    "@(#)OSSP fsl 1.6b1 (02-Feb-2005)",
  +    "$Id: fsl_version.c,v 1.33 2005/02/02 12:52:32 thl Exp $"
   };
   
   #endif /* _FSL_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  3 10:40:35 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8DE8A7649D; Thu,  3 Feb 2005 10:40:35 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ ChangeLog aclocal.m4 configure.ac
Message-Id: <20050203094035.8DE8A7649D@mail.ossp.org>
Date: Thu,  3 Feb 2005 10:40:35 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Feb-2005 10:40:35
  Branch: HEAD                             Handle: 2005020309403400

  Modified files:
    ossp-pkg/l2             ChangeLog aclocal.m4 configure.ac

  Log:
    - Add va_copy() Autoconf checks to make va_list copying portable.
    - Accept new GNU Bison 2.0

  Summary:
    Revision    Changes     Path
    1.21        +9  -1      ossp-pkg/l2/ChangeLog
    1.17        +111 -0     ossp-pkg/l2/aclocal.m4
    1.29        +4  -2      ossp-pkg/l2/configure.ac
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 ChangeLog
  --- ossp-pkg/l2/ChangeLog	2 Feb 2005 12:26:44 -0000	1.20
  +++ ossp-pkg/l2/ChangeLog	3 Feb 2005 09:40:34 -0000	1.21
  @@ -9,9 +9,17 @@
     ChangeLog
     =========
   
  +  Changes between 0.9.9 and 0.9.10 (01-Feb-2005 to 03-Feb-2005)
  +
  +    *) Add va_copy() Autoconf checks to make va_list copying portable.
  +       [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +    *) Accept new GNU Bison 2.0
  +       [Ralf S. Engelschall <rse@engelschall.com>]
  +
     Changes between 0.9.8 and 0.9.9 (24-Apr-2004 to 01-Feb-2005)
     
  -    *) import OSSP sa 1.2.4
  +    *) Import OSSP sa 1.2.4
          [Thomas Lotterer <thomas@lotterer.net>]
   
       *) Upgraded build environment to GNU shtool 2.0.1 and
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 aclocal.m4
  --- ossp-pkg/l2/aclocal.m4	24 Jan 2005 15:03:17 -0000	1.16
  +++ ossp-pkg/l2/aclocal.m4	3 Feb 2005 09:40:34 -0000	1.17
  @@ -417,3 +417,114 @@
   fi
   ])
   
  +dnl ##
  +dnl ##  Check for C99 va_copy() implementation
  +dnl ##  (and provide fallback implementation if neccessary)
  +dnl ##
  +dnl ##  configure.in:
  +dnl ##    CHECK_VA_COPY
  +dnl ##  foo.c:
  +dnl ##    #include "config.h"
  +dnl ##    [...]
  +dnl ##    va_copy(d,s)
  +dnl ##
  +dnl ##  This check is rather complex: first because we really have to
  +dnl ##  try various possible implementations in sequence and second, we
  +dnl ##  cannot define a macro in config.h with parameters directly.
  +dnl ##
  +
  +dnl #   test program for va_copy() implementation
  +changequote(<<,>>)
  +m4_define(__va_copy_test, <<[
  +#include <stdlib.h>
  +#include <stdarg.h>
  +#include <string.h>
  +#define DO_VA_COPY(d, s) $1
  +void test(char *str, ...)
  +{
  +    va_list ap, ap2;
  +    int i;
  +    va_start(ap, str);
  +    DO_VA_COPY(ap2, ap);
  +    for (i = 1; i <= 9; i++) {
  +        int k = (int)va_arg(ap, int);
  +        if (k != i)
  +            abort();
  +    }
  +    DO_VA_COPY(ap, ap2);
  +    for (i = 1; i <= 9; i++) {
  +        int k = (int)va_arg(ap, int);
  +        if (k != i)
  +            abort();
  +    }
  +    va_end(ap);
  +}
  +int main(int argc, char *argv[])
  +{
  +    test("test", 1, 2, 3, 4, 5, 6, 7, 8, 9);
  +    exit(0);
  +}
  +]>>)
  +changequote([,])
  +
  +dnl #   test driver for va_copy() implementation
  +m4_define(__va_copy_check, [
  +    AH_VERBATIM($1,
  +[/* Predefined possible va_copy() implementation (id: $1) */
  +#define __VA_COPY_USE_$1(d, s) $2])
  +    if test ".$ac_cv_va_copy" = .; then
  +        AC_TRY_RUN(__va_copy_test($2), [ac_cv_va_copy="$1"])
  +    fi
  +])
  +
  +dnl #   Autoconf check for va_copy() implementation checking
  +AC_DEFUN(CHECK_VA_COPY,[
  +  dnl #   provide Autoconf display check message
  +  AC_MSG_CHECKING(for va_copy() function)
  +  dnl #   check for various implementations in priorized sequence   
  +  AC_CACHE_VAL(ac_cv_va_copy, [
  +    ac_cv_va_copy=""
  +    dnl #   1. check for standardized C99 macro
  +    __va_copy_check(C99, [va_copy((d), (s))])
  +    dnl #   2. check for alternative/deprecated GCC macro
  +    __va_copy_check(GCM, [VA_COPY((d), (s))])
  +    dnl #   3. check for internal GCC macro (high-level define)
  +    __va_copy_check(GCH, [__va_copy((d), (s))])
  +    dnl #   4. check for internal GCC macro (built-in function)
  +    __va_copy_check(GCB, [__builtin_va_copy((d), (s))])
  +    dnl #   5. check for assignment approach (assuming va_list is a struct)
  +    __va_copy_check(ASS, [do { (d) = (s); } while (0)])
  +    dnl #   6. check for assignment approach (assuming va_list is a pointer)
  +    __va_copy_check(ASP, [do { *(d) = *(s); } while (0)])
  +    dnl #   7. check for memory copying approach (assuming va_list is a struct)
  +    __va_copy_check(CPS, [memcpy((void *)&(d), (void *)&(s)), sizeof((s))])
  +    dnl #   8. check for memory copying approach (assuming va_list is a pointer)
  +    __va_copy_check(CPP, [memcpy((void *)(d), (void *)(s)), sizeof(*(s))])
  +    if test ".$ac_cv_va_copy" = .; then
  +        AC_ERROR([no working implementation found])
  +    fi
  +  ])
  +  dnl #   optionally activate the fallback implementation
  +  if test ".$ac_cv_va_copy" = ".C99"; then
  +      AC_DEFINE(HAVE_VA_COPY, 1, [Define if va_copy() macro exists (and no fallback implementation is required)])
  +  fi
  +  dnl #   declare which fallback implementation to actually use
  +  AC_DEFINE_UNQUOTED([__VA_COPY_USE], [__VA_COPY_USE_$ac_cv_va_copy],
  +      [Define to id of used va_copy() implementation])
  +  dnl #   provide activation hook for fallback implementation
  +  AH_VERBATIM([__VA_COPY_ACTIVATION],
  +[/* Optional va_copy() implementation activation */
  +#ifndef HAVE_VA_COPY
  +#define va_copy(d, s) __VA_COPY_USE(d, s)
  +#endif
  +])
  +  dnl #   provide Autoconf display result message
  +  if test ".$ac_cv_va_copy" = ".C99"; then
  +      AC_MSG_RESULT([yes])
  +  else
  +      AC_MSG_RESULT([no (using fallback implementation)])
  +  fi
  +  m4_undefine([__va_copy_test])
  +  m4_undefine([__va_copy_check])
  +])
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/configure.ac
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 configure.ac
  --- ossp-pkg/l2/configure.ac	24 Jan 2005 15:03:17 -0000	1.28
  +++ ossp-pkg/l2/configure.ac	3 Feb 2005 09:40:34 -0000	1.29
  @@ -46,8 +46,8 @@
   AC_CHECK_MAINTAINER
   AC_CONFIGURE_LIBTOOL
   
  -AC_CHECK_BISON(BISON, 1.875, [1.[[8-9]][[0-9]]|1.[[8-9]][[0-9]][[0-9]]])
  -AC_CHECK_FLEX(FLEX, 2.5.10, [2.5.1[[0-9]]|2.5.[[2-9]][[0-9]]|2.[[6-9]].*])
  +AC_CHECK_BISON(BISON, 1.875d, [1.[[8-9]][[0-9]]|1.[[8-9]][[0-9]][[0-9]]]|[2.[[0-9]]])
  +AC_CHECK_FLEX(FLEX, 2.5.31, [2.5.1[[0-9]]|2.5.[[2-9]][[0-9]]|2.[[6-9]].*])
   
   AC_CHECK_LIB(nsl, gethostname)
   if test ".`echo $LIBS | grep nsl`" = . ;then
  @@ -59,6 +59,8 @@
   
   AC_CHECK_FUNCS(inet_aton inet_pton inet_ntoa inet_ntop snprintf vsnprintf setitimer)
   
  +CHECK_VA_COPY
  +
   case $PLATFORM in
       *-*-solaris2.[[6-8]]* )
           AC_DEFINE(HAVE_VSYSLOG_USVALIST, 1, [Define to 1 if vsyslog has underscored va_list])
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  3 10:41:39 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 14B257649D; Thu,  3 Feb 2005 10:41:39 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ ChangeLog l2_ch_buffer.c l2_ch_pipe.c
Message-Id: <20050203094139.14B257649D@mail.ossp.org>
Date: Thu,  3 Feb 2005 10:41:39 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Feb-2005 10:41:39
  Branch: HEAD                             Handle: 2005020309413800

  Modified files:
    ossp-pkg/l2             ChangeLog l2_ch_buffer.c l2_ch_pipe.c

  Log:
    Fix compile warnings related to sigaction()'s sa_handler.

  Summary:
    Revision    Changes     Path
    1.22        +3  -0      ossp-pkg/l2/ChangeLog
    1.40        +1  -1      ossp-pkg/l2/l2_ch_buffer.c
    1.33        +1  -1      ossp-pkg/l2/l2_ch_pipe.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 ChangeLog
  --- ossp-pkg/l2/ChangeLog	3 Feb 2005 09:40:34 -0000	1.21
  +++ ossp-pkg/l2/ChangeLog	3 Feb 2005 09:41:38 -0000	1.22
  @@ -10,6 +10,9 @@
     =========
   
     Changes between 0.9.9 and 0.9.10 (01-Feb-2005 to 03-Feb-2005)
  +   
  +    *) Fix compile warnings related to sigaction()'s sa_handler.
  +       [Ralf S. Engelschall <rse@engelschall.com>]
   
       *) Add va_copy() Autoconf checks to make va_list copying portable.
          [Ralf S. Engelschall <rse@engelschall.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_buffer.c
  ============================================================================
  $ cvs diff -u -r1.39 -r1.40 l2_ch_buffer.c
  --- ossp-pkg/l2/l2_ch_buffer.c	24 Jan 2005 15:03:17 -0000	1.39
  +++ ossp-pkg/l2/l2_ch_buffer.c	3 Feb 2005 09:41:38 -0000	1.40
  @@ -189,7 +189,7 @@
           /* initialize auto vars before using them */
           memset(&locact, 0, sizeof(locact));
   
  -        locact.sa_handler = (void(*)())catchsignal;
  +        locact.sa_handler = (void(*)(int))catchsignal;
           sigemptyset(&locact.sa_mask);
           locact.sa_flags = 0;
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_pipe.c
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 l2_ch_pipe.c
  --- ossp-pkg/l2/l2_ch_pipe.c	24 Jan 2005 15:03:17 -0000	1.32
  +++ ossp-pkg/l2/l2_ch_pipe.c	3 Feb 2005 09:41:38 -0000	1.33
  @@ -309,7 +309,7 @@
       /* initialize auto vars before using them */
       memset(&locact, 0, sizeof(locact));
   
  -    locact.sa_handler = (void(*)())catchsignal;
  +    locact.sa_handler = (void(*)(int))catchsignal;
       sigemptyset(&locact.sa_mask);
       locact.sa_flags = 0;
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  3 10:42:37 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5939B7649D; Thu,  3 Feb 2005 10:42:37 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ ChangeLog l2_spec_scan.l
Message-Id: <20050203094237.5939B7649D@mail.ossp.org>
Date: Thu,  3 Feb 2005 10:42:37 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Feb-2005 10:42:37
  Branch: HEAD                             Handle: 2005020309423600

  Modified files:
    ossp-pkg/l2             ChangeLog l2_spec_scan.l

  Log:
    Fix compile warnings for Flex generation code by using the
    %options nounput, noyy_top_state and nounistd.

  Summary:
    Revision    Changes     Path
    1.23        +4  -0      ossp-pkg/l2/ChangeLog
    1.15        +3  -0      ossp-pkg/l2/l2_spec_scan.l
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 ChangeLog
  --- ossp-pkg/l2/ChangeLog	3 Feb 2005 09:41:38 -0000	1.22
  +++ ossp-pkg/l2/ChangeLog	3 Feb 2005 09:42:36 -0000	1.23
  @@ -10,6 +10,10 @@
     =========
   
     Changes between 0.9.9 and 0.9.10 (01-Feb-2005 to 03-Feb-2005)
  +
  +    *) Fix compile warnings for Flex generation code by using the
  +       %options nounput, noyy_top_state and nounistd.
  +       [Ralf S. Engelschall <rse@engelschall.com>]
      
       *) Fix compile warnings related to sigaction()'s sa_handler.
          [Ralf S. Engelschall <rse@engelschall.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_spec_scan.l
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 l2_spec_scan.l
  --- ossp-pkg/l2/l2_spec_scan.l	24 Jan 2005 15:03:18 -0000	1.14
  +++ ossp-pkg/l2/l2_spec_scan.l	3 Feb 2005 09:42:36 -0000	1.15
  @@ -63,6 +63,9 @@
   %option bison-locations
   %option never-interactive
   %option noyywrap
  +%option nounput
  +%option noyy_top_state
  +%option nounistd
   
   /* scanner states */
   %x SS_PARAM
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  3 10:43:53 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E42577649D; Thu,  3 Feb 2005 10:43:52 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ ChangeLog l2tool.c
Message-Id: <20050203094352.E42577649D@mail.ossp.org>
Date: Thu,  3 Feb 2005 10:43:52 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Feb-2005 10:43:52
  Branch: HEAD                             Handle: 2005020309435200

  Modified files:
    ossp-pkg/l2             ChangeLog l2tool.c

  Log:
    Remove local getopt() declarations from l2tool.c for portability.

  Summary:
    Revision    Changes     Path
    1.24        +3  -0      ossp-pkg/l2/ChangeLog
    1.7         +0  -3      ossp-pkg/l2/l2tool.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 ChangeLog
  --- ossp-pkg/l2/ChangeLog	3 Feb 2005 09:42:36 -0000	1.23
  +++ ossp-pkg/l2/ChangeLog	3 Feb 2005 09:43:52 -0000	1.24
  @@ -11,6 +11,9 @@
   
     Changes between 0.9.9 and 0.9.10 (01-Feb-2005 to 03-Feb-2005)
   
  +    *) Remove local getopt() declarations from l2tool.c for portability.
  +       [Ralf S. Engelschall <rse@engelschall.com>]
  +
       *) Fix compile warnings for Flex generation code by using the
          %options nounput, noyy_top_state and nounistd.
          [Ralf S. Engelschall <rse@engelschall.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2tool.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 l2tool.c
  --- ossp-pkg/l2/l2tool.c	24 Jan 2005 15:03:18 -0000	1.6
  +++ ossp-pkg/l2/l2tool.c	3 Feb 2005 09:43:52 -0000	1.7
  @@ -32,9 +32,6 @@
   #include "l2.h"
   
   #include <unistd.h>
  -extern int getopt(int, char *const *, const char *);
  -extern int optind;
  -extern char *optarg;
   
   static void die(l2_env_t *env, l2_result_t rv, char *fmt, ...)
   {
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  3 10:45:38 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E0FE87649D; Thu,  3 Feb 2005 10:45:37 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ configure.ac l2_ut_format.c
Message-Id: <20050203094537.E0FE87649D@mail.ossp.org>
Date: Thu,  3 Feb 2005 10:45:37 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   03-Feb-2005 10:45:37
  Branch: HEAD                             Handle: 2005020309453700

  Modified files:
    ossp-pkg/l2             configure.ac l2_ut_format.c

  Log:
    resolve trunc symbol conflict; make sure configure checks for isnan
    and isinf and l2_ut_format picks up the results

  Summary:
    Revision    Changes     Path
    1.30        +1  -1      ossp-pkg/l2/configure.ac
    1.11        +6  -4      ossp-pkg/l2/l2_ut_format.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/configure.ac
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 configure.ac
  --- ossp-pkg/l2/configure.ac	3 Feb 2005 09:40:34 -0000	1.29
  +++ ossp-pkg/l2/configure.ac	3 Feb 2005 09:45:37 -0000	1.30
  @@ -57,7 +57,7 @@
   
   AC_CHECK_HEADERS(sys/time.h)
   
  -AC_CHECK_FUNCS(inet_aton inet_pton inet_ntoa inet_ntop snprintf vsnprintf setitimer)
  +AC_CHECK_FUNCS(inet_aton inet_pton inet_ntoa inet_ntop snprintf vsnprintf setitimer isnan isinf)
   
   CHECK_VA_COPY
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_format.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 l2_ut_format.c
  --- ossp-pkg/l2/l2_ut_format.c	24 Jan 2005 15:03:18 -0000	1.10
  +++ ossp-pkg/l2/l2_ut_format.c	3 Feb 2005 09:45:37 -0000	1.11
  @@ -98,6 +98,7 @@
   #include <ctype.h>
   #include <math.h>
   
  +#include "l2_config.h"
   #include "l2_ut_format.h"
   
   /* types which are locally use */
  @@ -163,7 +164,8 @@
           l2_util_cvt((arg), (ndigits), (decpt), (sign), 0, (buf))
   
   /* inlined modf(3) to avoid dependency to external libm on systems
  -   (like Tru64, QNX, etc) where modf(3) is not part of libc. */
  +   (like Tru64, QNX, etc) where modf(3) is not part of libc.
  +   We use trnc to avoid conflicts with global definitions of trunc and truncate */
   static double
   l2_util_modf(
       double arg,
  @@ -171,10 +173,10 @@
   {
       double fraction;
       double integral;
  -    long trunc;
  +    long trnc;
   
  -    trunc = (long)arg;
  -    integral = (double)trunc;
  +    trnc = (long)arg;
  +    integral = (double)trnc;
       fraction = arg - integral;
       if (iptr != NULL)
           *iptr = integral;
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  3 10:46:59 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 528DC7647F; Thu,  3 Feb 2005 10:46:59 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ ChangeLog
Message-Id: <20050203094659.528DC7647F@mail.ossp.org>
Date: Thu,  3 Feb 2005 10:46:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   03-Feb-2005 10:46:59
  Branch: HEAD                             Handle: 2005020309465800

  Modified files:
    ossp-pkg/l2             ChangeLog

  Log:
    resolve trunc symbol conflict; make sure configure checks for isnan
    and isinf and l2_ut_format picks up the results

  Summary:
    Revision    Changes     Path
    1.25        +4  -0      ossp-pkg/l2/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 ChangeLog
  --- ossp-pkg/l2/ChangeLog	3 Feb 2005 09:43:52 -0000	1.24
  +++ ossp-pkg/l2/ChangeLog	3 Feb 2005 09:46:58 -0000	1.25
  @@ -11,6 +11,10 @@
   
     Changes between 0.9.9 and 0.9.10 (01-Feb-2005 to 03-Feb-2005)
   
  +    *) Resolve trunc symbol conflict; make sure configure checks for
  +       isnan and isinf and l2_ut_format picks up the results'
  +       [Thomas Lotterer <thomas@lotterer.net>]
  +
       *) Remove local getopt() declarations from l2tool.c for portability.
          [Ralf S. Engelschall <rse@engelschall.com>]
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  3 10:48:52 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 95ED07647F; Thu,  3 Feb 2005 10:48:52 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ ChangeLog l2_ut_format.c
Message-Id: <20050203094852.95ED07647F@mail.ossp.org>
Date: Thu,  3 Feb 2005 10:48:52 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Feb-2005 10:48:52
  Branch: HEAD                             Handle: 2005020309485200

  Modified files:
    ossp-pkg/l2             ChangeLog l2_ut_format.c

  Log:
    Synchronize l2_ut_format.[ch] with OSSP cfg and especially
    now use va_copy for va_list copying for better portability.

  Summary:
    Revision    Changes     Path
    1.26        +4  -0      ossp-pkg/l2/ChangeLog
    1.12        +8  -9      ossp-pkg/l2/l2_ut_format.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 ChangeLog
  --- ossp-pkg/l2/ChangeLog	3 Feb 2005 09:46:58 -0000	1.25
  +++ ossp-pkg/l2/ChangeLog	3 Feb 2005 09:48:52 -0000	1.26
  @@ -11,6 +11,10 @@
   
     Changes between 0.9.9 and 0.9.10 (01-Feb-2005 to 03-Feb-2005)
   
  +    *) Synchronize l2_ut_format.[ch] with OSSP cfg and especially
  +       now use va_copy for va_list copying for better portability.
  +       [Ralf S. Engelschall <rse@engelschall.com>]
  +
       *) Resolve trunc symbol conflict; make sure configure checks for
          isnan and isinf and l2_ut_format picks up the results'
          [Thomas Lotterer <thomas@lotterer.net>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_format.c
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 l2_ut_format.c
  --- ossp-pkg/l2/l2_ut_format.c	3 Feb 2005 09:45:37 -0000	1.11
  +++ ossp-pkg/l2/l2_ut_format.c	3 Feb 2005 09:48:52 -0000	1.12
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ -40,7 +40,7 @@
    * Especially any Apache and network specific kludges were removed again
    * and instead the formatting engine now can be extended by the caller
    * on-the-fly. It was then finally adjusted to be stand-alone for use
  - * inside OSSP l2.
  + * inside OSSP.
    */
   
   /*
  @@ -96,7 +96,6 @@
   #include <stdarg.h>
   #include <string.h>
   #include <ctype.h>
  -#include <math.h>
   
   #include "l2_config.h"
   #include "l2_ut_format.h"
  @@ -379,7 +378,7 @@
   #define PAD(width, len, ch) \
       do {                            \
           INS_CHAR(ch, sp, bep, cc);  \
  -        width-- ;                   \
  +        width--;                    \
       } while (width > len)
   
   /*
  @@ -645,7 +644,7 @@
       register char *sp;
       register char *bep;
       register int cc = 0;
  -    register int i;
  +    register unsigned int i;
   
       char *s = NULL;
       char *q;
  @@ -1153,12 +1152,12 @@
       char *s;
       int rv;
   
  -    apbak = ap;
  +    va_copy(apbak, ap);
       if ((rv = l2_util_vsprintf(NULL, -1, fmt, ap)) == -1)
           return NULL;
       if ((s = malloc(rv+1)) == NULL)
           return NULL;
  -    ap = apbak;
  +    va_copy(ap, apbak);
       if ((rv = l2_util_vsprintf(s, rv+1, fmt, ap)) == -1) {
           free(s);
           return NULL;
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  3 10:54:30 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 99FAB7647F; Thu,  3 Feb 2005 10:54:30 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ l2_ut_format.c
Message-Id: <20050203095430.99FAB7647F@mail.ossp.org>
Date: Thu,  3 Feb 2005 10:54:30 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Feb-2005 10:54:30
  Branch: HEAD                             Handle: 2005020309543000

  Modified files:
    ossp-pkg/l2             l2_ut_format.c

  Log:
    fix isnan/isinf and va_list handling

  Summary:
    Revision    Changes     Path
    1.13        +2  -1      ossp-pkg/l2/l2_ut_format.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_format.c
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 l2_ut_format.c
  --- ossp-pkg/l2/l2_ut_format.c	3 Feb 2005 09:48:52 -0000	1.12
  +++ ossp-pkg/l2/l2_ut_format.c	3 Feb 2005 09:54:30 -0000	1.13
  @@ -96,6 +96,7 @@
   #include <stdarg.h>
   #include <string.h>
   #include <ctype.h>
  +#include <math.h>
   
   #include "l2_config.h"
   #include "l2_ut_format.h"
  @@ -1042,7 +1043,7 @@
                       if (vbuff->format != NULL) {
                           vbuff->format(vbuff,
                                         &prefix_char, &pad_char, &s, &s_len,
  -                                      num_buf, NUM_BUF_SIZE, extinfo, *fmt, &ap);
  +                                      num_buf, NUM_BUF_SIZE, extinfo, *fmt, (va_list *)(void *)&ap);
                           if (s == NULL)
                               return -1;
                       }
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  3 11:32:09 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D7C977649D; Thu,  3 Feb 2005 11:32:08 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ ChangeLog cfg_fmt.c
Message-Id: <20050203103208.D7C977649D@mail.ossp.org>
Date: Thu,  3 Feb 2005 11:32:08 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Feb-2005 11:32:08
  Branch: HEAD                             Handle: 2005020310320800

  Modified files:
    ossp-pkg/cfg            ChangeLog cfg_fmt.c

  Log:
    Plug a memory leak in cfg_fmt.c's cfg_fmt_vasprintf()
    in case a formatting error occurs.

  Summary:
    Revision    Changes     Path
    1.33        +6  -0      ossp-pkg/cfg/ChangeLog
    1.9         +3  -1      ossp-pkg/cfg/cfg_fmt.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	24 Jan 2005 14:25:21 -0000	1.32
  +++ ossp-pkg/cfg/ChangeLog	3 Feb 2005 10:32:08 -0000	1.33
  @@ -8,6 +8,12 @@
   
     CHANGELOG
   
  + Changes between 0.9.8 and 0.9.9 (24-Jan-2005 to xx-Feb-2005):
  +
  +   *) Plug a memory leak in cfg_fmt.c's cfg_fmt_vasprintf()
  +      in case a formatting error occurs.
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
    Changes between 0.9.7 and 0.9.8 (19-Dec-2004 to 24-Jan-2005):
   
      *) Remove debugging fprintf's from (still broken) cfg_node_select() function.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_fmt.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 cfg_fmt.c
  --- ossp-pkg/cfg/cfg_fmt.c	24 Jan 2005 14:18:48 -0000	1.8
  +++ ossp-pkg/cfg/cfg_fmt.c	3 Feb 2005 10:32:08 -0000	1.9
  @@ -1157,8 +1157,10 @@
       if ((s = malloc(rv+1)) == NULL)
           return NULL;
       va_copy(ap, apbak);
  -    if ((rv = cfg_fmt_vsprintf(s, rv+1, fmt, ap)) == -1)
  +    if ((rv = cfg_fmt_vsprintf(s, rv+1, fmt, ap)) == -1) {
  +        free(s);
           return NULL;
  +    }
       return s;
   }
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  3 11:40:15 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 718C27648B; Thu,  3 Feb 2005 11:40:15 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ ChangeLog cfg_fmt.c cfg_fmt.h
Message-Id: <20050203104015.718C27648B@mail.ossp.org>
Date: Thu,  3 Feb 2005 11:40:15 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Feb-2005 11:40:15
  Branch: HEAD                             Handle: 2005020310401400

  Modified files:
    ossp-pkg/cfg            ChangeLog cfg_fmt.c cfg_fmt.h

  Log:
    Revert recently made change "fix va_list variable passing in
    cfg_fmt functions" by using a double-cast which is evil but keeps
    the orrect semantics.

  Summary:
    Revision    Changes     Path
    1.34        +5  -0      ossp-pkg/cfg/ChangeLog
    1.10        +1  -1      ossp-pkg/cfg/cfg_fmt.c
    1.8         +1  -1      ossp-pkg/cfg/cfg_fmt.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	3 Feb 2005 10:32:08 -0000	1.33
  +++ ossp-pkg/cfg/ChangeLog	3 Feb 2005 10:40:14 -0000	1.34
  @@ -10,6 +10,11 @@
   
    Changes between 0.9.8 and 0.9.9 (24-Jan-2005 to xx-Feb-2005):
   
  +   *) Revert recently made change "fix va_list variable passing in
  +      cfg_fmt functions" by using a double-cast which is evil but keeps
  +      the orrect semantics.
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
      *) Plug a memory leak in cfg_fmt.c's cfg_fmt_vasprintf()
         in case a formatting error occurs.
         [Ralf S. Engelschall <rse@engelschall.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_fmt.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 cfg_fmt.c
  --- ossp-pkg/cfg/cfg_fmt.c	3 Feb 2005 10:32:08 -0000	1.9
  +++ ossp-pkg/cfg/cfg_fmt.c	3 Feb 2005 10:40:14 -0000	1.10
  @@ -1041,7 +1041,7 @@
                       if (vbuff->format != NULL) {
                           vbuff->format(vbuff,
                                         &prefix_char, &pad_char, &s, &s_len,
  -                                      num_buf, NUM_BUF_SIZE, extinfo, *fmt, ap);
  +                                      num_buf, NUM_BUF_SIZE, extinfo, *fmt, (va_list *)(void *)&ap);
                           if (s == NULL)
                               return -1;
                       }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_fmt.h
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 cfg_fmt.h
  --- ossp-pkg/cfg/cfg_fmt.h	24 Jan 2005 14:18:48 -0000	1.7
  +++ ossp-pkg/cfg/cfg_fmt.h	3 Feb 2005 10:40:14 -0000	1.8
  @@ -52,7 +52,7 @@
           int num_buf_size,                /* input  arg: temporary buffer len */
           char *extinfo,                   /* input  arg: extension information */
           char fmt_char,                   /* input  arg: current formatting character */
  -        va_list ap                       /* in/out arg: variable argument pointer */
  +        va_list *ap                      /* in/out arg: variable argument pointer */
       );
   
       /* arbitrary passed-through application data */
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  3 11:40:26 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 1924476498; Thu,  3 Feb 2005 11:40:26 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ ChangeLog
Message-Id: <20050203104026.1924476498@mail.ossp.org>
Date: Thu,  3 Feb 2005 11:40:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Feb-2005 11:40:26
  Branch: HEAD                             Handle: 2005020310402500

  Modified files:
    ossp-pkg/cfg            ChangeLog

  Log:
    typo

  Summary:
    Revision    Changes     Path
    1.35        +1  -1      ossp-pkg/cfg/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	3 Feb 2005 10:40:14 -0000	1.34
  +++ ossp-pkg/cfg/ChangeLog	3 Feb 2005 10:40:25 -0000	1.35
  @@ -12,7 +12,7 @@
   
      *) Revert recently made change "fix va_list variable passing in
         cfg_fmt functions" by using a double-cast which is evil but keeps
  -      the orrect semantics.
  +      the correct semantics.
         [Ralf S. Engelschall <rse@engelschall.com>]
   
      *) Plug a memory leak in cfg_fmt.c's cfg_fmt_vasprintf()
  @@ .

From ossp-cvs-owner@ossp.org  Sun Feb  6 13:17:48 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6CF357630D; Sun,  6 Feb 2005 13:17:48 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/svs/ ChangeLog svs.sh
Message-Id: <20050206121748.6CF357630D@mail.ossp.org>
Date: Sun,  6 Feb 2005 13:17:48 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Feb-2005 13:17:48
  Branch: HEAD                             Handle: 2005020612174700

  Modified files:
    ossp-pkg/svs            ChangeLog svs.sh

  Log:
    Replace unportable "if ! <cmd>" construct.

  Summary:
    Revision    Changes     Path
    1.6         +5  -0      ossp-pkg/svs/ChangeLog
    1.7         +3  -1      ossp-pkg/svs/svs.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ChangeLog
  --- ossp-pkg/svs/ChangeLog	13 Jan 2005 11:14:01 -0000	1.5
  +++ ossp-pkg/svs/ChangeLog	6 Feb 2005 12:17:47 -0000	1.6
  @@ -8,6 +8,11 @@
   
     ChangeLog
   
  +  Changes between 1.0.1 and 1.0.2 (13-Jan-2005 to 06-Feb-2005):
  +
  +    *) Replace unportable "if ! <cmd>" construct.
  +       [Ralf S. Engelschall]
  +
     Changes between 1.0.0 and 1.0.1 (14-Dec-2004 to 13-Jan-2005):
   
       *) Adjust copyright messages for new year 2005.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/svs.sh
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 svs.sh
  --- ossp-pkg/svs/svs.sh	13 Jan 2005 11:15:03 -0000	1.6
  +++ ossp-pkg/svs/svs.sh	6 Feb 2005 12:17:47 -0000	1.7
  @@ -124,7 +124,9 @@
                   diff -u3 /dev/null $edit
               else
                   #   regular case: edited file
  -                if ! cmp $orig $edit >/dev/null 2>&1; then
  +                if cmp $orig $edit >/dev/null 2>&1; then
  +                    :
  +                else
                       echo "Index: $edit"
                       diff -u3 $orig $edit
                   fi
  @@ .

From ossp-cvs-owner@ossp.org  Sun Feb  6 13:18:26 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9CECC76335; Sun,  6 Feb 2005 13:18:26 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/svs/ README VERSION
Message-Id: <20050206121826.9CECC76335@mail.ossp.org>
Date: Sun,  6 Feb 2005 13:18:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Feb-2005 13:18:26
  Branch: HEAD                             Handle: 2005020612182600

  Modified files:
    ossp-pkg/svs            README VERSION

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/svs/README
    1.3         +1  -1      ossp-pkg/svs/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/README
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 README
  --- ossp-pkg/svs/README	13 Jan 2005 11:16:07 -0000	1.3
  +++ ossp-pkg/svs/README	6 Feb 2005 12:18:26 -0000	1.4
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/ \_/ |___/
   
     OSSP svs - Stupid/Silly/Simple Versioning System
  -  Version 1.0.1 (13-Jan-2005)
  +  Version 1.0.2 (06-Feb-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/VERSION
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 VERSION
  --- ossp-pkg/svs/VERSION	13 Jan 2005 11:16:07 -0000	1.2
  +++ ossp-pkg/svs/VERSION	6 Feb 2005 12:18:26 -0000	1.3
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP svs (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP svs, Version 1.0.1 (13-Jan-2005)
  +  This is OSSP svs, Version 1.0.2 (06-Feb-2005)
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Feb  6 13:20:25 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 45DE47630D; Sun,  6 Feb 2005 13:20:25 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/tool/ index.wml ossp-w...
Message-Id: <20050206122025.45DE47630D@mail.ossp.org>
Date: Sun,  6 Feb 2005 13:20:25 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   06-Feb-2005 13:20:25
  Branch: HEAD                             Handle: 2005020612202301

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/svs   index.wml

  Log:
    release OSSP svs 1.0.2

  Summary:
    Revision    Changes     Path
    1.121       +1  -0      ossp-web/new/news.txt
    1.46        +1  -1      ossp-web/pkg/tool/index.wml
    1.3         +2  -2      ossp-web/pkg/tool/svs/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.120 -r1.121 news.txt
  --- ossp-web/new/news.txt	29 Jan 2005 08:21:06 -0000	1.120
  +++ ossp-web/new/news.txt	6 Feb 2005 12:20:23 -0000	1.121
  @@ -1,3 +1,4 @@
  +06-Feb-2005: Released T<OSSP svs> 1.0.2
   29-Jan-2005: Released L<OSSP sa> 1.2.4
   24-Jan-2005: Released L<OSSP str> 0.9.10
   24-Jan-2005: Released L<OSSP sa> 1.2.3
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.45 -r1.46 index.wml
  --- ossp-web/pkg/tool/index.wml	13 Jan 2005 11:18:36 -0000	1.45
  +++ ossp-web/pkg/tool/index.wml	6 Feb 2005 12:20:24 -0000	1.46
  @@ -23,7 +23,7 @@
   	        done=100 stable="1.1.5" unstable="none">
     <pkg_item name="svs" longname="OSSP svs" type="tool"
               desc="Stupid/Silly/Simple Versioning System"
  -	        done=100 stable="1.0.1" unstable="none">
  +	        done=100 stable="1.0.2" unstable="none">
     <pkg_item name="eperl" longname="OSSP eperl" type="tool"
               desc="Embedded Perl Language"
   	        done=100 stable="2.2.14" unstable="none">
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/svs/index.wml
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 index.wml
  --- ossp-web/pkg/tool/svs/index.wml	13 Jan 2005 11:18:36 -0000	1.2
  +++ ossp-web/pkg/tool/svs/index.wml	6 Feb 2005 12:20:24 -0000	1.3
  @@ -20,7 +20,7 @@
   <h2>Status</h2>
   
   <pkg_status
  -    stable="1.0.1" stable_date="13-Jan-2005"
  +    stable="1.0.2" stable_date="06-Feb-2005"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -31,7 +31,7 @@
       url=$(FTP_ROOT_URL)/pkg/tool/svs/
       directory=$(FTP_ROOT_DIR)/pkg/tool/svs/
       files="svs-*.tar.gz" 
  -	stable="svs-1.0.1.tar.gz" unstable="none">
  +	stable="svs-1.0.2.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Feb 18 10:33:14 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 4645576311; Fri, 18 Feb 2005 10:33:14 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ ChangeLog README l2_version.c
Message-Id: <20050218093314.4645576311@mail.ossp.org>
Date: Fri, 18 Feb 2005 10:33:14 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   18-Feb-2005 10:33:14
  Branch: HEAD                             Handle: 2005021809331300

  Modified files:
    ossp-pkg/l2             ChangeLog README l2_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.27        +1  -1      ossp-pkg/l2/ChangeLog
    1.21        +1  -1      ossp-pkg/l2/README
    1.18        +9  -9      ossp-pkg/l2/l2_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 ChangeLog
  --- ossp-pkg/l2/ChangeLog	3 Feb 2005 09:48:52 -0000	1.26
  +++ ossp-pkg/l2/ChangeLog	18 Feb 2005 09:33:13 -0000	1.27
  @@ -9,7 +9,7 @@
     ChangeLog
     =========
   
  -  Changes between 0.9.9 and 0.9.10 (01-Feb-2005 to 03-Feb-2005)
  +  Changes between 0.9.9 and 0.9.10 (01-Feb-2005 to 18-Feb-2005)
   
       *) Synchronize l2_ut_format.[ch] with OSSP cfg and especially
          now use va_copy for va_list copying for better portability.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/README
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 README
  --- ossp-pkg/l2/README	2 Feb 2005 12:27:00 -0000	1.20
  +++ ossp-pkg/l2/README	18 Feb 2005 09:33:13 -0000	1.21
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_|_____|
   
     OSSP l2 -- Flexible Logging
  -  Version 0.9.9 (02-Feb-2005)
  +  Version 0.9.10 (18-Feb-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_version.c
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 l2_version.c
  --- ossp-pkg/l2/l2_version.c	2 Feb 2005 12:27:00 -0000	1.17
  +++ ossp-pkg/l2/l2_version.c	18 Feb 2005 09:33:13 -0000	1.18
  @@ -8,7 +8,7 @@
   #ifndef _L2_VERSION_C_
   #define _L2_VERSION_C_
   
  -#define L2_VERSION 0x009209
  +#define L2_VERSION 0x00920A
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _L2_VERSION_C_AS_HEADER_
   
   l2_version_t l2_version = {
  -    0x009209,
  -    "0.9.9",
  -    "0.9.9 (02-Feb-2005)",
  -    "This is OSSP l2, Version 0.9.9 (02-Feb-2005)",
  -    "OSSP l2 0.9.9 (02-Feb-2005)",
  -    "OSSP l2/0.9.9",
  -    "@(#)OSSP l2 0.9.9 (02-Feb-2005)",
  -    "$Id: l2_version.c,v 1.17 2005/02/02 12:27:00 thl Exp $"
  +    0x00920A,
  +    "0.9.10",
  +    "0.9.10 (18-Feb-2005)",
  +    "This is OSSP l2, Version 0.9.10 (18-Feb-2005)",
  +    "OSSP l2 0.9.10 (18-Feb-2005)",
  +    "OSSP l2/0.9.10",
  +    "@(#)OSSP l2 0.9.10 (18-Feb-2005)",
  +    "$Id: l2_version.c,v 1.18 2005/02/18 09:33:13 thl Exp $"
   };
   
   #endif /* _L2_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Fri Feb 18 10:39:26 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 40D8A76311; Fri, 18 Feb 2005 10:39:26 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ devtool.conf
Message-Id: <20050218093926.40D8A76311@mail.ossp.org>
Date: Fri, 18 Feb 2005 10:39:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   18-Feb-2005 10:39:26
  Branch: HEAD                             Handle: 2005021809392500

  Modified files:
    ossp-pkg/l2             devtool.conf

  Log:
    use consolidation account for upload

  Summary:
    Revision    Changes     Path
    1.19        +1  -1      ossp-pkg/l2/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 devtool.conf
  --- ossp-pkg/l2/devtool.conf	24 Jan 2005 15:05:36 -0000	1.18
  +++ ossp-pkg/l2/devtool.conf	18 Feb 2005 09:39:25 -0000	1.19
  @@ -103,5 +103,5 @@
   %upload
       echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/l2/"
       V=`./shtool version -lc -dshort l2_version.c`
  -    scp l2-${V}.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/l2/
  +    scp l2-${V}.tar.gz ossp@master.ossp.org:/e/ossp/ftp/pkg/lib/l2/
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Feb 18 10:40:40 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C400E76311; Fri, 18 Feb 2005 10:40:40 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ devtool.conf
Message-Id: <20050218094040.C400E76311@mail.ossp.org>
Date: Fri, 18 Feb 2005 10:40:40 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   18-Feb-2005 10:40:40
  Branch: HEAD                             Handle: 2005021809404000

  Modified files:
    ossp-pkg/cfg            devtool.conf

  Log:
    use consolidation account for upload

  Summary:
    Revision    Changes     Path
    1.23        +1  -1      ossp-pkg/cfg/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 devtool.conf
  --- ossp-pkg/cfg/devtool.conf	31 Dec 2004 19:16:25 -0000	1.22
  +++ ossp-pkg/cfg/devtool.conf	18 Feb 2005 09:40:40 -0000	1.23
  @@ -94,5 +94,5 @@
   %upload
       echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/cfg/"
       V=`./shtool version -lc -dshort cfg_vers.c`
  -    scp cfg-${V}.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/cfg/
  +    scp cfg-${V}.tar.gz ossp@master.ossp.org:/e/ossp/ftp/pkg/lib/cfg/
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Feb 18 10:58:33 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id DA33876312; Fri, 18 Feb 2005 10:58:32 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ ChangeLog cfg_fmt.c configure.ac
Message-Id: <20050218095832.DA33876312@mail.ossp.org>
Date: Fri, 18 Feb 2005 10:58:32 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   18-Feb-2005 10:58:32
  Branch: HEAD                             Handle: 2005021809583200

  Modified files:
    ossp-pkg/cfg            ChangeLog cfg_fmt.c configure.ac

  Log:
    Resolve trunc symbol conflict; add configure checks for isnan and
    isinf (both merges from recent l2 changes)

  Summary:
    Revision    Changes     Path
    1.36        +4  -0      ossp-pkg/cfg/ChangeLog
    1.11        +6  -4      ossp-pkg/cfg/cfg_fmt.c
    1.15        +1  -0      ossp-pkg/cfg/configure.ac
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	3 Feb 2005 10:40:25 -0000	1.35
  +++ ossp-pkg/cfg/ChangeLog	18 Feb 2005 09:58:32 -0000	1.36
  @@ -10,6 +10,10 @@
   
    Changes between 0.9.8 and 0.9.9 (24-Jan-2005 to xx-Feb-2005):
   
  +   *) Resolve trunc symbol conflict; add configure checks for
  +      isnan and isinf
  +      [Thomas Lotterer <thomas@lotterer.net>]
  +
      *) Revert recently made change "fix va_list variable passing in
         cfg_fmt functions" by using a double-cast which is evil but keeps
         the correct semantics.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_fmt.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 cfg_fmt.c
  --- ossp-pkg/cfg/cfg_fmt.c	3 Feb 2005 10:40:14 -0000	1.10
  +++ ossp-pkg/cfg/cfg_fmt.c	18 Feb 2005 09:58:32 -0000	1.11
  @@ -96,6 +96,7 @@
   #include <stdarg.h>
   #include <string.h>
   #include <ctype.h>
  +#include <math.h>
   
   #include "config.h"
   #include "cfg_fmt.h"
  @@ -163,7 +164,8 @@
           cfg_fmt_cvt((arg), (ndigits), (decpt), (sign), 0, (buf))
   
   /* inlined modf(3) to avoid dependency to external libm on systems
  -   (like Tru64, QNX, etc) where modf(3) is not part of libc. */
  +   (like Tru64, QNX, etc) where modf(3) is not part of libc.
  +   We use trnc to avoid conflicts with global definitions of trunc and truncate */
   static double
   cfg_fmt_modf(
       double arg,
  @@ -171,10 +173,10 @@
   {
       double fraction;
       double integral;
  -    long trunc;
  +    long trnc;
   
  -    trunc = (long)arg;
  -    integral = (double)trunc;
  +    trnc = (long)arg;
  +    integral = (double)trnc;
       fraction = arg - integral;
       if (iptr != NULL)
           *iptr = integral;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/configure.ac
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 configure.ac
  --- ossp-pkg/cfg/configure.ac	24 Jan 2005 14:18:48 -0000	1.14
  +++ ossp-pkg/cfg/configure.ac	18 Feb 2005 09:58:32 -0000	1.15
  @@ -57,6 +57,7 @@
   fi
   
   AC_CONFIG_HEADERS(config.h)
  +AC_CHECK_FUNCS(isnan isinf)
   AC_CONFIG_FILES([Makefile cfg-config])
   AC_CONFIG_COMMANDS([adjustment], [chmod a+x cfg-config])
   AC_OUTPUT
  @@ .

From ossp-cvs-owner@ossp.org  Fri Feb 18 10:59:23 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6473C76312; Fri, 18 Feb 2005 10:59:23 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ devtool.conf
Message-Id: <20050218095923.6473C76312@mail.ossp.org>
Date: Fri, 18 Feb 2005 10:59:23 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   18-Feb-2005 10:59:23
  Branch: HEAD                             Handle: 2005021809592300

  Modified files:
    ossp-pkg/fsl            devtool.conf

  Log:
    use consolidation account for upload

  Summary:
    Revision    Changes     Path
    1.26        +1  -1      ossp-pkg/fsl/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 devtool.conf
  --- ossp-pkg/fsl/devtool.conf	2 Feb 2005 12:52:11 -0000	1.25
  +++ ossp-pkg/fsl/devtool.conf	18 Feb 2005 09:59:23 -0000	1.26
  @@ -104,5 +104,5 @@
   %upload
       echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/fsl/"
       V=`./shtool version -lc -dshort fsl_version.c`
  -    scp fsl-${V}.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/fsl/
  +    scp fsl-${V}.tar.gz ossp@master.ossp.org:/e/ossp/ftp/pkg/lib/fsl/
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Feb 18 11:05:36 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id D533C76327; Fri, 18 Feb 2005 11:05:35 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ ChangeLog cfg.ac configure.ac devtool.conf
Message-Id: <20050218100535.D533C76327@mail.ossp.org>
Date: Fri, 18 Feb 2005 11:05:35 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Feb-2005 11:05:35
  Branch: HEAD                             Handle: 2005021810053500

  Modified files:
    ossp-pkg/cfg            ChangeLog cfg.ac configure.ac devtool.conf

  Log:
    upgrade to libtool 1.5.14; move isnan/isinf into cfg.ac; merge trunc
    stuff from l2

  Summary:
    Revision    Changes     Path
    1.37        +7  -2      ossp-pkg/cfg/ChangeLog
    1.7         +2  -0      ossp-pkg/cfg/cfg.ac
    1.16        +0  -1      ossp-pkg/cfg/configure.ac
    1.24        +1  -1      ossp-pkg/cfg/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.36 -r1.37 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	18 Feb 2005 09:58:32 -0000	1.36
  +++ ossp-pkg/cfg/ChangeLog	18 Feb 2005 10:05:35 -0000	1.37
  @@ -10,10 +10,15 @@
   
    Changes between 0.9.8 and 0.9.9 (24-Jan-2005 to xx-Feb-2005):
   
  -   *) Resolve trunc symbol conflict; add configure checks for
  -      isnan and isinf
  +   *) Add Autoconf checks for isnan() and isinf() for cfg_fmt.c
         [Thomas Lotterer <thomas@lotterer.net>]
   
  +   *) Resolve conflict on symbol "trunc" with <math.h>.
  +      [Thomas Lotterer <thomas@lotterer.net>]
  +
  +   *) Upgraded build environment to GNU libtool 1.5.14
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
      *) Revert recently made change "fix va_list variable passing in
         cfg_fmt functions" by using a double-cast which is evil but keeps
         the correct semantics.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg.ac
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 cfg.ac
  --- ossp-pkg/cfg/cfg.ac	24 Jan 2005 14:18:48 -0000	1.6
  +++ ossp-pkg/cfg/cfg.ac	18 Feb 2005 10:05:35 -0000	1.7
  @@ -55,6 +55,8 @@
       fi
   
       dnl #   additional checks
  +    AC_CHECK_FUNCS(isnan isinf)
  +    AC_CHECK_SIZEOF(long long, 8)
       AC_CHECK_VA_COPY
   ])
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/configure.ac
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 configure.ac
  --- ossp-pkg/cfg/configure.ac	18 Feb 2005 09:58:32 -0000	1.15
  +++ ossp-pkg/cfg/configure.ac	18 Feb 2005 10:05:35 -0000	1.16
  @@ -57,7 +57,6 @@
   fi
   
   AC_CONFIG_HEADERS(config.h)
  -AC_CHECK_FUNCS(isnan isinf)
   AC_CONFIG_FILES([Makefile cfg-config])
   AC_CONFIG_COMMANDS([adjustment], [chmod a+x cfg-config])
   AC_OUTPUT
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 devtool.conf
  --- ossp-pkg/cfg/devtool.conf	18 Feb 2005 09:40:40 -0000	1.23
  +++ ossp-pkg/cfg/devtool.conf	18 Feb 2005 10:05:35 -0000	1.24
  @@ -30,7 +30,7 @@
   
   %autogen
       @autogen shtool   2.0.1  "2.0.*" echo fixperm install mkdir tarball version
  -    @autogen libtool  1.5.10 "1.5*"
  +    @autogen libtool  1.5.14 "1.5*"
       @autogen autoconf 2.59   "2.5[4-9]*"
   
   %autoclean
  @@ .

From ossp-cvs-owner@ossp.org  Fri Feb 18 11:33:31 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8839776327; Fri, 18 Feb 2005 11:33:31 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ ChangeLog README cfg_vers.c ossp-pkg/cfg/per...
Message-Id: <20050218103331.8839776327@mail.ossp.org>
Date: Fri, 18 Feb 2005 11:33:31 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Feb-2005 11:33:31
  Branch: HEAD                             Handle: 2005021810333001

  Modified files:
    ossp-pkg/cfg            ChangeLog README cfg_vers.c
    ossp-pkg/cfg/perl       cfg.pm

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.38        +1  -1      ossp-pkg/cfg/ChangeLog
    1.17        +1  -1      ossp-pkg/cfg/README
    1.15        +9  -9      ossp-pkg/cfg/cfg_vers.c
    1.14        +1  -1      ossp-pkg/cfg/perl/cfg.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	18 Feb 2005 10:05:35 -0000	1.37
  +++ ossp-pkg/cfg/ChangeLog	18 Feb 2005 10:33:30 -0000	1.38
  @@ -8,7 +8,7 @@
   
     CHANGELOG
   
  - Changes between 0.9.8 and 0.9.9 (24-Jan-2005 to xx-Feb-2005):
  + Changes between 0.9.8 and 0.9.9 (24-Jan-2005 to 18-Feb-2005):
   
      *) Add Autoconf checks for isnan() and isinf() for cfg_fmt.c
         [Thomas Lotterer <thomas@lotterer.net>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/README
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 README
  --- ossp-pkg/cfg/README	24 Jan 2005 14:35:54 -0000	1.16
  +++ ossp-pkg/cfg/README	18 Feb 2005 10:33:30 -0000	1.17
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \___|_|  \__, |
                                                |___/
     OSSP cfg - Configuration Parsing
  -  Version 0.9.8 (24-Jan-2005)
  +  Version 0.9.9 (18-Feb-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_vers.c
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 cfg_vers.c
  --- ossp-pkg/cfg/cfg_vers.c	24 Jan 2005 14:35:54 -0000	1.14
  +++ ossp-pkg/cfg/cfg_vers.c	18 Feb 2005 10:33:30 -0000	1.15
  @@ -8,7 +8,7 @@
   #ifndef _CFG_VERS_C_
   #define _CFG_VERS_C_
   
  -#define __CFG_VERSION 0x009208
  +#define __CFG_VERSION 0x009209
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _CFG_VERS_C_AS_HEADER_
   
   __cfg_version_t __cfg_version = {
  -    0x009208,
  -    "0.9.8",
  -    "0.9.8 (24-Jan-2005)",
  -    "This is OSSP cfg, Version 0.9.8 (24-Jan-2005)",
  -    "OSSP cfg 0.9.8 (24-Jan-2005)",
  -    "OSSP cfg/0.9.8",
  -    "@(#)OSSP cfg 0.9.8 (24-Jan-2005)",
  -    "$Id: cfg_vers.c,v 1.14 2005/01/24 14:35:54 rse Exp $"
  +    0x009209,
  +    "0.9.9",
  +    "0.9.9 (18-Feb-2005)",
  +    "This is OSSP cfg, Version 0.9.9 (18-Feb-2005)",
  +    "OSSP cfg 0.9.9 (18-Feb-2005)",
  +    "OSSP cfg/0.9.9",
  +    "@(#)OSSP cfg 0.9.9 (18-Feb-2005)",
  +    "$Id: cfg_vers.c,v 1.15 2005/02/18 10:33:30 rse Exp $"
   };
   
   #endif /* _CFG_VERS_C_AS_HEADER_ */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/cfg.pm
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 cfg.pm
  --- ossp-pkg/cfg/perl/cfg.pm	24 Jan 2005 14:35:55 -0000	1.13
  +++ ossp-pkg/cfg/perl/cfg.pm	18 Feb 2005 10:33:31 -0000	1.14
  @@ -42,7 +42,7 @@
   ##
   
   #   API version
  -our $VERSION = do { my @v = ('0.9.8' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
  +our $VERSION = do { my @v = ('0.9.9' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
   
   #   API inheritance
   our @ISA = qw(Exporter);
  @@ .

From ossp-cvs-owner@ossp.org  Fri Feb 18 11:37:04 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id ACB8B7632A; Fri, 18 Feb 2005 11:37:04 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/cfg/ index.wml ossp-web/pkg/lib/ index.wm...
Message-Id: <20050218103704.ACB8B7632A@mail.ossp.org>
Date: Fri, 18 Feb 2005 11:37:04 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   18-Feb-2005 11:37:04
  Branch: HEAD                             Handle: 2005021810370301

  Modified files:
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/cfg    index.wml
    ossp-web/pkg/lib/l2     index.wml

  Log:
    release OSSP l2 0.9.10 and OSSP cfg 0.9.9

  Summary:
    Revision    Changes     Path
    1.15        +2  -2      ossp-web/pkg/lib/cfg/index.wml
    1.103       +2  -2      ossp-web/pkg/lib/index.wml
    1.13        +2  -2      ossp-web/pkg/lib/l2/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/cfg/index.wml
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 index.wml
  --- ossp-web/pkg/lib/cfg/index.wml	24 Jan 2005 14:55:10 -0000	1.14
  +++ ossp-web/pkg/lib/cfg/index.wml	18 Feb 2005 10:37:04 -0000	1.15
  @@ -36,7 +36,7 @@
   <pkg_status
       name="cfg" assign="rse"
       stable="none"    stable_date="none"
  -    unstable="0.9.8" unstable_date="24-Jan-2005"
  +    unstable="0.9.9" unstable_date="18-Feb-2005"
   	done=95>
   
   <h2>Source</h2>
  @@ -46,7 +46,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/cfg/
       directory=$(FTP_ROOT_DIR)/pkg/lib/cfg/
       files="cfg-*.tar.gz" 
  -	stable="none" unstable="cfg-0.9.8.tar.gz">
  +	stable="none" unstable="cfg-0.9.9.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.102 -r1.103 index.wml
  --- ossp-web/pkg/lib/index.wml	29 Jan 2005 08:21:07 -0000	1.102
  +++ ossp-web/pkg/lib/index.wml	18 Feb 2005 10:37:03 -0000	1.103
  @@ -45,7 +45,7 @@
   			done=95 stable=none unstable=0.9.10>
     <pkg_item name="l2" longname="OSSP l2" type="lib"
               desc="Flexible Logging"
  -			done=95 stable=none unstable=0.9.8>
  +			done=95 stable=none unstable=0.9.10>
     <pkg_item name="al" longname="OSSP al" type="lib"
               desc="Assembly Line"
   			done=95 stable=none unstable=0.9.1>
  @@ -54,7 +54,7 @@
   			done=95 stable=none unstable=0.9.2>
     <pkg_item name="cfg" longname="OSSP cfg" type="lib"
               desc="Configuration Parsing"
  -			done=95 stable=none unstable=0.9.8>
  +			done=95 stable=none unstable=0.9.9>
     <pkg_item name="act" longname="OSSP act" type="lib"
               desc="Abstract Container Types"
   			done=25 stable=none unstable=none>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/l2/index.wml
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 index.wml
  --- ossp-web/pkg/lib/l2/index.wml	26 Apr 2004 13:21:18 -0000	1.12
  +++ ossp-web/pkg/lib/l2/index.wml	18 Feb 2005 10:37:03 -0000	1.13
  @@ -40,7 +40,7 @@
   <pkg_status
       name="l2" assign="rse"
       stable="none"    stable_date="none"
  -    unstable="0.9.8" unstable_date="23-Apr-2004"
  +    unstable="0.9.10" unstable_date="18-Feb-2005"
   	done=95>
   
   <h2>Source</h2>
  @@ -50,7 +50,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/l2/
       directory=$(FTP_ROOT_DIR)/pkg/lib/l2/
       files="l2-*.tar.gz" 
  -	stable="none" unstable="l2-0.9.8.tar.gz">
  +	stable="none" unstable="l2-0.9.10.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Feb 18 11:42:08 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id C4E1A7632A; Fri, 18 Feb 2005 11:42:08 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ ChangeLog README devtool.conf fsl_version.c
Message-Id: <20050218104208.C4E1A7632A@mail.ossp.org>
Date: Fri, 18 Feb 2005 11:42:08 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   18-Feb-2005 11:42:08
  Branch: HEAD                             Handle: 2005021810420800

  Modified files:
    ossp-pkg/fsl            ChangeLog README devtool.conf fsl_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.37        +6  -0      ossp-pkg/fsl/ChangeLog
    1.47        +1  -1      ossp-pkg/fsl/README
    1.27        +2  -2      ossp-pkg/fsl/devtool.conf
    1.34        +9  -9      ossp-pkg/fsl/fsl_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.36 -r1.37 ChangeLog
  --- ossp-pkg/fsl/ChangeLog	2 Feb 2005 12:52:12 -0000	1.36
  +++ ossp-pkg/fsl/ChangeLog	18 Feb 2005 10:42:08 -0000	1.37
  @@ -8,6 +8,12 @@
   
     CHANGELOG
   
  +  Changes between 1.6b1 and 1.6b2 (18-Feb-2005)
  +
  +    *) Use updated OSSP lib_l2 0.9.10 and lib_cfg 0.9.9 to further
  +       improve portability (although still no breakthrough for AMD64)
  +       [Thomas Lotterer <thomas@lotterer.net>]
  +
     Changes between 1.5 and 1.6b1 (02-Feb-2005)
   
       *) Use updated OSSP lib_l2 0.9.9 (includes an updated OSSP sa 1.2.4)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/README
  ============================================================================
  $ cvs diff -u -r1.46 -r1.47 README
  --- ossp-pkg/fsl/README	2 Feb 2005 12:52:32 -0000	1.46
  +++ ossp-pkg/fsl/README	18 Feb 2005 10:42:08 -0000	1.47
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_| |___/_|
    
     OSSP fsl - Faking/Flexible Syslog Library
  -  Version 1.6b1 (02-Feb-2005)
  +  Version 1.6b2 (18-Feb-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 devtool.conf
  --- ossp-pkg/fsl/devtool.conf	18 Feb 2005 09:59:23 -0000	1.26
  +++ ossp-pkg/fsl/devtool.conf	18 Feb 2005 10:42:08 -0000	1.27
  @@ -3,8 +3,8 @@
   ##
   
   %checkout
  -    BRANCH_L2="L2_0_9_9"
  -    BRANCH_CFG="CFG_0_9_8"
  +    BRANCH_L2="L2_0_9_10"
  +    BRANCH_CFG="CFG_0_9_9"
       BRANCH_PCRE=""
       for name in l2 cfg pcre; do
           release=BRANCH_`echo ${name} | tr [a-z] [A-Z]`
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl_version.c
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 fsl_version.c
  --- ossp-pkg/fsl/fsl_version.c	2 Feb 2005 12:52:32 -0000	1.33
  +++ ossp-pkg/fsl/fsl_version.c	18 Feb 2005 10:42:08 -0000	1.34
  @@ -8,7 +8,7 @@
   #ifndef _FSL_VERSION_C_
   #define _FSL_VERSION_C_
   
  -#define FSL_VERSION 0x106101
  +#define FSL_VERSION 0x106102
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _FSL_VERSION_C_AS_HEADER_
   
   fsl_version_t fsl_version = {
  -    0x106101,
  -    "1.6b1",
  -    "1.6b1 (02-Feb-2005)",
  -    "This is OSSP fsl, Version 1.6b1 (02-Feb-2005)",
  -    "OSSP fsl 1.6b1 (02-Feb-2005)",
  -    "OSSP fsl/1.6b1",
  -    "@(#)OSSP fsl 1.6b1 (02-Feb-2005)",
  -    "$Id: fsl_version.c,v 1.33 2005/02/02 12:52:32 thl Exp $"
  +    0x106102,
  +    "1.6b2",
  +    "1.6b2 (18-Feb-2005)",
  +    "This is OSSP fsl, Version 1.6b2 (18-Feb-2005)",
  +    "OSSP fsl 1.6b2 (18-Feb-2005)",
  +    "OSSP fsl/1.6b2",
  +    "@(#)OSSP fsl 1.6b2 (18-Feb-2005)",
  +    "$Id: fsl_version.c,v 1.34 2005/02/18 10:42:08 thl Exp $"
   };
   
   #endif /* _FSL_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Fri Feb 18 20:12:09 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2F1B87633D; Fri, 18 Feb 2005 20:12:09 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ ChangeLog README fsl_version.c
Message-Id: <20050218191209.2F1B87633D@mail.ossp.org>
Date: Fri, 18 Feb 2005 20:12:09 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   18-Feb-2005 20:12:09
  Branch: HEAD                             Handle: 2005021819120800

  Modified files:
    ossp-pkg/fsl            ChangeLog README fsl_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.38        +12 -0      ossp-pkg/fsl/ChangeLog
    1.48        +1  -1      ossp-pkg/fsl/README
    1.35        +9  -9      ossp-pkg/fsl/fsl_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 ChangeLog
  --- ossp-pkg/fsl/ChangeLog	18 Feb 2005 10:42:08 -0000	1.37
  +++ ossp-pkg/fsl/ChangeLog	18 Feb 2005 19:12:08 -0000	1.38
  @@ -8,6 +8,18 @@
   
     CHANGELOG
   
  +  Changes between 1.6b2 and 1.6 (18-Feb-2004)
  +
  +    *) None. OpenPKG build farm succeeded on ix86-freebsd5.3,
  +       ix86-freebsd4.11, amd64-freebsd5.3, ia64-freebsd5.3,
  +       sparc64-freebsd5.3, hppa-hpux11.11, ppc-darwin7.8.0,
  +       ix86-netbsd2.0, ix86-debian3.1, ix86-rhel3, ix86-suse9.2,
  +       ix86-debian3.0, ix86-suse9, ix86-solaris9, sparc64-solaris9,
  +       sparc64-solaris8, ix86-solaris10, sparc64-solaris10,
  +       ix86-gentoo1.6.9, ix86-freebsd6.0, ix86-fedora3,
  +       ix86-mandrake10.1; amd64 is known to be broken;
  +       ix86-freebsd5.3 passed runtime test
  +
     Changes between 1.6b1 and 1.6b2 (18-Feb-2005)
   
       *) Use updated OSSP lib_l2 0.9.10 and lib_cfg 0.9.9 to further
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/README
  ============================================================================
  $ cvs diff -u -r1.47 -r1.48 README
  --- ossp-pkg/fsl/README	18 Feb 2005 10:42:08 -0000	1.47
  +++ ossp-pkg/fsl/README	18 Feb 2005 19:12:08 -0000	1.48
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_| |___/_|
    
     OSSP fsl - Faking/Flexible Syslog Library
  -  Version 1.6b2 (18-Feb-2005)
  +  Version 1.6.0 (18-Feb-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl_version.c
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 fsl_version.c
  --- ossp-pkg/fsl/fsl_version.c	18 Feb 2005 10:42:08 -0000	1.34
  +++ ossp-pkg/fsl/fsl_version.c	18 Feb 2005 19:12:08 -0000	1.35
  @@ -8,7 +8,7 @@
   #ifndef _FSL_VERSION_C_
   #define _FSL_VERSION_C_
   
  -#define FSL_VERSION 0x106102
  +#define FSL_VERSION 0x106200
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _FSL_VERSION_C_AS_HEADER_
   
   fsl_version_t fsl_version = {
  -    0x106102,
  -    "1.6b2",
  -    "1.6b2 (18-Feb-2005)",
  -    "This is OSSP fsl, Version 1.6b2 (18-Feb-2005)",
  -    "OSSP fsl 1.6b2 (18-Feb-2005)",
  -    "OSSP fsl/1.6b2",
  -    "@(#)OSSP fsl 1.6b2 (18-Feb-2005)",
  -    "$Id: fsl_version.c,v 1.34 2005/02/18 10:42:08 thl Exp $"
  +    0x106200,
  +    "1.6.0",
  +    "1.6.0 (18-Feb-2005)",
  +    "This is OSSP fsl, Version 1.6.0 (18-Feb-2005)",
  +    "OSSP fsl 1.6.0 (18-Feb-2005)",
  +    "OSSP fsl/1.6.0",
  +    "@(#)OSSP fsl 1.6.0 (18-Feb-2005)",
  +    "$Id: fsl_version.c,v 1.35 2005/02/18 19:12:08 thl Exp $"
   };
   
   #endif /* _FSL_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Fri Feb 18 21:36:49 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0BD2576331; Fri, 18 Feb 2005 21:36:49 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog THANKS pth.m4
Message-Id: <20050218203649.0BD2576331@mail.ossp.org>
Date: Fri, 18 Feb 2005 21:36:49 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Feb-2005 21:36:48
  Branch: HEAD                             Handle: 2005021820364800

  Modified files:
    ossp-pkg/pth            ChangeLog THANKS pth.m4

  Log:
    Add quotes around function names for AC_DEFUN in pth.m4 to avoid
    warnings about "underquoted definitions".

  Summary:
    Revision    Changes     Path
    1.635       +4  -0      ossp-pkg/pth/ChangeLog
    1.100       +1  -0      ossp-pkg/pth/THANKS
    1.16        +3  -3      ossp-pkg/pth/pth.m4
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.634 -r1.635 ChangeLog
  --- ossp-pkg/pth/ChangeLog	31 Dec 2004 19:34:44 -0000	1.634
  +++ ossp-pkg/pth/ChangeLog	18 Feb 2005 20:36:48 -0000	1.635
  @@ -21,6 +21,10 @@
                     
     Changes between 2.0.3 and 2.0.4 (03-Dec-2004 to xx-Jan-2005)
   
  +   *) Add quotes around function names for AC_DEFUN in pth.m4 to avoid
  +      warnings about "underquoted definitions".
  +      [Stephane Loeuillet <stephane.loeuillet@cegetel.net>]
  +
      *) Adjusted all copyright messages for new year 2005.
         [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/THANKS
  ============================================================================
  $ cvs diff -u -r1.99 -r1.100 THANKS
  --- ossp-pkg/pth/THANKS	6 Dec 2004 19:47:38 -0000	1.99
  +++ ossp-pkg/pth/THANKS	18 Feb 2005 20:36:48 -0000	1.100
  @@ -57,6 +57,7 @@
       o  Barnett Hsu                 <barnett@cs.ucr.edu>
       o  Nick Hudson                 <skrll@netbsd.org>
       o  Andrew Hunter               <esvce@dcs.warwick.ac.uk>
  +    o  Stephane Loeuillet          <stephane.loeuillet@cegetel.net>
       o  Takashi Ishihara            <tishihara@ucdavis.edu>
       o  Jim Jagielski               <jim@jaguNET.com>
       o  Jeremie                     <jeremie@jabber.org>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth.m4
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 pth.m4
  --- ossp-pkg/pth/pth.m4	31 Dec 2004 19:34:44 -0000	1.15
  +++ ossp-pkg/pth/pth.m4	18 Feb 2005 20:36:48 -0000	1.16
  @@ -40,7 +40,7 @@
   dnl ##
   dnl
   dnl #   auxilliary macros
  -AC_DEFUN(_AC_PTH_ERROR, [dnl
  +AC_DEFUN([_AC_PTH_ERROR], [dnl
   AC_MSG_RESULT([*FAILED*])
   m4_define(_ac_pth_line,dnl
   "+------------------------------------------------------------------------+")
  @@ -51,13 +51,13 @@
   echo " _ac_pth_line" 1>&2
   exit 1
   ])
  -AC_DEFUN(_AC_PTH_VERBOSE, [dnl
  +AC_DEFUN([_AC_PTH_VERBOSE], [dnl
   if test ".$verbose" = .yes; then
       AC_MSG_RESULT([  $1])
   fi
   ])
   dnl #   the user macro
  -AC_DEFUN(AC_CHECK_PTH, [dnl
  +AC_DEFUN([AC_CHECK_PTH], [dnl
   dnl
   dnl #   prerequisites
   AC_REQUIRE([AC_PROG_CC])dnl
  @@ .

From ossp-cvs-owner@ossp.org  Fri Feb 18 21:40:22 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id EFD4276331; Fri, 18 Feb 2005 21:40:21 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog devtool.conf
Message-Id: <20050218204021.EFD4276331@mail.ossp.org>
Date: Fri, 18 Feb 2005 21:40:21 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Feb-2005 21:40:21
  Branch: HEAD                             Handle: 2005021820402100

  Modified files:
    ossp-pkg/pth            ChangeLog devtool.conf

  Log:
    Upgraded build environment to GNU libtool 1.5.14

  Summary:
    Revision    Changes     Path
    1.636       +4  -1      ossp-pkg/pth/ChangeLog
    1.19        +1  -1      ossp-pkg/pth/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.635 -r1.636 ChangeLog
  --- ossp-pkg/pth/ChangeLog	18 Feb 2005 20:36:48 -0000	1.635
  +++ ossp-pkg/pth/ChangeLog	18 Feb 2005 20:40:21 -0000	1.636
  @@ -19,7 +19,10 @@
        / __/ | |_| |
     __|_____(_)___/_________________________________________________________
                     
  -  Changes between 2.0.3 and 2.0.4 (03-Dec-2004 to xx-Jan-2005)
  +  Changes between 2.0.3 and 2.0.4 (03-Dec-2004 to 18-Feb-2005)
  +
  +   *) Upgraded build environment to GNU libtool 1.5.14
  +      [Ralf S. Engelschall]
   
      *) Add quotes around function names for AC_DEFUN in pth.m4 to avoid
         warnings about "underquoted definitions".
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 devtool.conf
  --- ossp-pkg/pth/devtool.conf	25 Sep 2004 21:14:44 -0000	1.18
  +++ ossp-pkg/pth/devtool.conf	18 Feb 2005 20:40:21 -0000	1.19
  @@ -4,7 +4,7 @@
   
   %autogen
       @autogen shtool   2.0.1  "2.0.*" echo version scpp mkdir install fixperm tarball
  -    @autogen libtool  1.5.10 "1.5*"
  +    @autogen libtool  1.5.14 "1.5*"
       @autogen autoconf 2.59   "2.5*"
   
   %autoclean
  @@ .

From ossp-cvs-owner@ossp.org  Fri Feb 18 22:45:37 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 37E2E76318; Fri, 18 Feb 2005 22:45:37 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog pth_string.c
Message-Id: <20050218214537.37E2E76318@mail.ossp.org>
Date: Fri, 18 Feb 2005 22:45:37 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Feb-2005 22:45:37
  Branch: HEAD                             Handle: 2005021821453600

  Modified files:
    ossp-pkg/pth            ChangeLog pth_string.c

  Log:
    Fix internal determination of maximum number in a size_t in
    the string formatter engine.

  Summary:
    Revision    Changes     Path
    1.637       +4  -0      ossp-pkg/pth/ChangeLog
    1.14        +2  -2      ossp-pkg/pth/pth_string.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.636 -r1.637 ChangeLog
  --- ossp-pkg/pth/ChangeLog	18 Feb 2005 20:40:21 -0000	1.636
  +++ ossp-pkg/pth/ChangeLog	18 Feb 2005 21:45:36 -0000	1.637
  @@ -21,6 +21,10 @@
                     
     Changes between 2.0.3 and 2.0.4 (03-Dec-2004 to 18-Feb-2005)
   
  +   *) Fix internal determination of maximum number in a size_t in
  +      the string formatter engine.
  +      [Ralf S. Engelschall]
  +
      *) Upgraded build environment to GNU libtool 1.5.14
         [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_string.c
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 pth_string.c
  --- ossp-pkg/pth/pth_string.c	31 Dec 2004 19:34:45 -0000	1.13
  +++ ossp-pkg/pth/pth_string.c	18 Feb 2005 21:45:36 -0000	1.14
  @@ -121,8 +121,8 @@
       ch = *format++;
   
       if (maxlen == -1)
  -        /* possible maximum size in a size_t */
  -        maxlen = (~(1<<((sizeof(size_t)*8)-2)));
  +        /* possible maximum size in a size_t (size_t unfortunately could be signed) */
  +        maxlen = (~(((size_t)1)<<((sizeof(size_t)*8)-1)));
   
       while (state != DP_S_DONE) {
           if ((ch == NUL) || (currlen >= maxlen))
  @@ .

From ossp-cvs-owner@ossp.org  Fri Feb 18 22:49:29 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 05FB676318; Fri, 18 Feb 2005 22:49:28 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ PORTING
Message-Id: <20050218214928.05FB676318@mail.ossp.org>
Date: Fri, 18 Feb 2005 22:49:28 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Feb-2005 22:49:28
  Branch: HEAD                             Handle: 2005021821492800

  Modified files:
    ossp-pkg/pth            PORTING

  Log:
    remember my development box results

  Summary:
    Revision    Changes     Path
    1.190       +1  -0      ossp-pkg/pth/PORTING
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/PORTING
  ============================================================================
  $ cvs diff -u -r1.189 -r1.190 PORTING
  --- ossp-pkg/pth/PORTING	11 Aug 2004 19:32:35 -0000	1.189
  +++ ossp-pkg/pth/PORTING	18 Feb 2005 21:49:28 -0000	1.190
  @@ -15,6 +15,7 @@
     (and should automatically adjust to other platforms, of course):
   
     __PLATFORM_ID_________________________ __MACHINE_CONTEXT__ _STACK_ _VERSION_
  +  i386-unknown-freebsd5.3               | mcsc/sc/mc        | down  | 2.0.3
     i386-unknown-freebsd4.10              | sjlj/ssjlj/sas    | down  | 2.0.1
     i386-unknown-freebsd4.7               | sjlj/ssjlj/sas    | down  | 2.0b0
     i386-pc-solaris2.8                    | mcsc/sc/mc        | down  | 1.4.1
  @@ .

From ossp-cvs-owner@ossp.org  Fri Feb 18 22:54:07 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id B008176318; Fri, 18 Feb 2005 22:54:07 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ README pth_vers.c
Message-Id: <20050218215407.B008176318@mail.ossp.org>
Date: Fri, 18 Feb 2005 22:54:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Feb-2005 22:54:07
  Branch: HEAD                             Handle: 2005021821540700

  Modified files:
    ossp-pkg/pth            README pth_vers.c

  Log:
    bump version number

  Summary:
    Revision    Changes     Path
    1.208       +1  -1      ossp-pkg/pth/README
    1.151       +9  -9      ossp-pkg/pth/pth_vers.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/README
  ============================================================================
  $ cvs diff -u -r1.207 -r1.208 README
  --- ossp-pkg/pth/README	31 Dec 2004 19:34:44 -0000	1.207
  +++ ossp-pkg/pth/README	18 Feb 2005 21:54:07 -0000	1.208
  @@ -5,7 +5,7 @@
     |_|    \__|_| |_|                     the impossible.''
   
     GNU Pth - The GNU Portable Threads
  -  Version 2.0.3 (03-Dec-2004)
  +  Version 2.0.4 (18-Feb-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_vers.c
  ============================================================================
  $ cvs diff -u -r1.150 -r1.151 pth_vers.c
  --- ossp-pkg/pth/pth_vers.c	3 Dec 2004 16:23:38 -0000	1.150
  +++ ossp-pkg/pth/pth_vers.c	18 Feb 2005 21:54:07 -0000	1.151
  @@ -8,7 +8,7 @@
   #ifndef _PTH_VERS_C_
   #define _PTH_VERS_C_
   
  -#define PTH_INTERNAL_VERSION 0x200203
  +#define PTH_INTERNAL_VERSION 0x200204
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _PTH_VERS_C_AS_HEADER_
   
   pth_internal_version_t pth_internal_version = {
  -    0x200203,
  -    "2.0.3",
  -    "2.0.3 (03-Dec-2004)",
  -    "This is GNU Pth, Version 2.0.3 (03-Dec-2004)",
  -    "GNU Pth 2.0.3 (03-Dec-2004)",
  -    "GNU Pth/2.0.3",
  -    "@(#)GNU Pth 2.0.3 (03-Dec-2004)",
  -    "$Id: GNU Pth 2.0.3 (03-Dec-2004) $"
  +    0x200204,
  +    "2.0.4",
  +    "2.0.4 (18-Feb-2005)",
  +    "This is GNU Pth, Version 2.0.4 (18-Feb-2005)",
  +    "GNU Pth 2.0.4 (18-Feb-2005)",
  +    "GNU Pth/2.0.4",
  +    "@(#)GNU Pth 2.0.4 (18-Feb-2005)",
  +    "$Id: GNU Pth 2.0.4 (18-Feb-2005) $"
   };
   
   #endif /* _PTH_VERS_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Feb 21 17:10:10 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9A8BC76328; Mon, 21 Feb 2005 17:10:10 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/fsl/ index.wml oss...
Message-Id: <20050221161010.9A8BC76328@mail.ossp.org>
Date: Mon, 21 Feb 2005 17:10:10 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   21-Feb-2005 17:10:10
  Branch: HEAD                             Handle: 2005022116100901

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/fsl    index.wml

  Log:
    release OSSP fsl 1.6.0

  Summary:
    Revision    Changes     Path
    1.122       +3  -0      ossp-web/new/news.txt
    1.22        +2  -2      ossp-web/pkg/lib/fsl/index.wml
    1.104       +1  -1      ossp-web/pkg/lib/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.121 -r1.122 news.txt
  --- ossp-web/new/news.txt	6 Feb 2005 12:20:23 -0000	1.121
  +++ ossp-web/new/news.txt	21 Feb 2005 16:10:09 -0000	1.122
  @@ -1,3 +1,6 @@
  +18-Feb-2005: Released L<OSSP fsl> 1.6.0
  +18-Feb-2005: Released L<OSSP cfg> 0.9.9
  +18-Feb-2005: Released L<OSSP l2> 0.9.10
   06-Feb-2005: Released T<OSSP svs> 1.0.2
   29-Jan-2005: Released L<OSSP sa> 1.2.4
   24-Jan-2005: Released L<OSSP str> 0.9.10
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/fsl/index.wml
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 index.wml
  --- ossp-web/pkg/lib/fsl/index.wml	26 Apr 2004 13:21:18 -0000	1.21
  +++ ossp-web/pkg/lib/fsl/index.wml	21 Feb 2005 16:10:10 -0000	1.22
  @@ -46,7 +46,7 @@
   <pkg_status
       name="fsl" assign="thl"
       genesis="Jul-2002"
  -    stable="1.5.0" stable_date="26-Apr-2004"
  +    stable="1.6.0" stable_date="18-Feb-2005"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -57,7 +57,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/fsl/
       directory=$(FTP_ROOT_DIR)/pkg/lib/fsl/
       files="fsl-*.tar.gz" 
  -	stable="fsl-1.5\\\\\\\.0.tar.gz" unstable="none">
  +	stable="fsl-1.6\\\\\\\.0.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.103 -r1.104 index.wml
  --- ossp-web/pkg/lib/index.wml	18 Feb 2005 10:37:03 -0000	1.103
  +++ ossp-web/pkg/lib/index.wml	21 Feb 2005 16:10:09 -0000	1.104
  @@ -27,7 +27,7 @@
   			done=100 stable=1.2.4 unstable=none>
     <pkg_item name="fsl" longname="OSSP fsl" type="lib"
               desc="Faked/Flexible Syslog"
  -			done=100 stable=1.5.0 unstable=none>
  +			done=100 stable=1.6.0 unstable=none>
     <pkg_item name="var" longname="OSSP var" type="lib"
               desc="Variable Expansion"
   			done=100 stable=1.1.2 unstable=none>
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 22 12:04:17 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6DCD576335; Tue, 22 Feb 2005 12:04:17 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/string-divert/ ChangeLog Divert.pm Divert.pod Mak...
Message-Id: <20050222110417.6DCD576335@mail.ossp.org>
Date: Tue, 22 Feb 2005 12:04:17 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Feb-2005 12:04:17
  Branch: HEAD                             Handle: 2005022211041600

  Modified files:
    ossp-pkg/string-divert  ChangeLog Divert.pm Divert.pod Makefile.PL test.pl

  Log:
    say hello to 2005 here, to

  Summary:
    Revision    Changes     Path
    1.7         +1  -1      ossp-pkg/string-divert/ChangeLog
    1.10        +1  -1      ossp-pkg/string-divert/Divert.pm
    1.5         +1  -1      ossp-pkg/string-divert/Divert.pod
    1.4         +1  -1      ossp-pkg/string-divert/Makefile.PL
    1.5         +1  -1      ossp-pkg/string-divert/test.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ChangeLog
  --- ossp-pkg/string-divert/ChangeLog	3 Nov 2004 08:10:00 -0000	1.6
  +++ ossp-pkg/string-divert/ChangeLog	22 Feb 2005 11:04:16 -0000	1.7
  @@ -2,7 +2,7 @@
     ChangeLog
     =========
   
  -  0.94 (03-Nov-2004)
  +  0.94 (22-Feb-2005)
         o use empty EXPORT_OK because we have an OO style API only
         o add default empty EXPORT array
     0.93 (22-Sep-2003)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/Divert.pm
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 Divert.pm
  --- ossp-pkg/string-divert/Divert.pm	3 Nov 2004 08:11:18 -0000	1.9
  +++ ossp-pkg/string-divert/Divert.pm	22 Feb 2005 11:04:16 -0000	1.10
  @@ -1,6 +1,6 @@
   ##
   ##  String::Divert - String Object supporting Folding and Diversion
  -##  Copyright (c) 2003-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of String::Divert, a Perl module providing
   ##  a string object supporting folding and diversion.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/Divert.pod
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 Divert.pod
  --- ossp-pkg/string-divert/Divert.pod	3 Nov 2004 08:11:18 -0000	1.4
  +++ ossp-pkg/string-divert/Divert.pod	22 Feb 2005 11:04:16 -0000	1.5
  @@ -1,6 +1,6 @@
   ##
   ##  String::Divert - String Object supporting Folding and Diversion
  -##  Copyright (c) 2003-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of String::Divert, a Perl module providing
   ##  a string object supporting folding and diversion.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/Makefile.PL
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 Makefile.PL
  --- ossp-pkg/string-divert/Makefile.PL	3 Nov 2004 08:11:18 -0000	1.3
  +++ ossp-pkg/string-divert/Makefile.PL	22 Feb 2005 11:04:16 -0000	1.4
  @@ -1,6 +1,6 @@
   ##
   ##  String::Divert - String Object supporting Folding and Diversion
  -##  Copyright (c) 2003-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of String::Divert, a Perl module providing
   ##  a string object supporting folding and diversion.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/test.pl
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 test.pl
  --- ossp-pkg/string-divert/test.pl	3 Nov 2004 08:11:18 -0000	1.4
  +++ ossp-pkg/string-divert/test.pl	22 Feb 2005 11:04:16 -0000	1.5
  @@ -1,6 +1,6 @@
   ##
   ##  String::Divert - String Object supporting Folding and Diversion
  -##  Copyright (c) 2003-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of String::Divert, a Perl module providing
   ##  a string object supporting folding and diversion.
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 22 14:21:35 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 7FAC67632E; Tue, 22 Feb 2005 14:21:35 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/string-divert/ ChangeLog Divert.pm Divert.pod tes...
Message-Id: <20050222132135.7FAC67632E@mail.ossp.org>
Date: Tue, 22 Feb 2005 14:21:35 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Feb-2005 14:21:35
  Branch: HEAD                             Handle: 2005022213213400

  Modified files:
    ossp-pkg/string-divert  ChangeLog Divert.pm Divert.pod test.pl

  Log:
    o add "copy constructor" in overloaded API plus a copying() method
      for selecting what to do in the "copy constructor": passing
      the object as is or cloning via clone() method.
    o add clone() method for recursively cloning object
    o replace "die" with Carp's "croak" for better error messages

  Summary:
    Revision    Changes     Path
    1.8         +5  -0      ossp-pkg/string-divert/ChangeLog
    1.11        +60 -26     ossp-pkg/string-divert/Divert.pm
    1.6         +14 -0      ossp-pkg/string-divert/Divert.pod
    1.6         +3  -1      ossp-pkg/string-divert/test.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 ChangeLog
  --- ossp-pkg/string-divert/ChangeLog	22 Feb 2005 11:04:16 -0000	1.7
  +++ ossp-pkg/string-divert/ChangeLog	22 Feb 2005 13:21:34 -0000	1.8
  @@ -3,6 +3,11 @@
     =========
   
     0.94 (22-Feb-2005)
  +      o add "copy constructor" in overloaded API plus a copying() method
  +        for selecting what to do in the "copy constructor": passing
  +        the object as is or cloning via clone() method.
  +      o add clone() method for recursively cloning object
  +      o replace "die" with Carp's "croak" for better error messages
         o use empty EXPORT_OK because we have an OO style API only
         o add default empty EXPORT array
     0.93 (22-Sep-2003)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/Divert.pm
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 Divert.pm
  --- ossp-pkg/string-divert/Divert.pm	22 Feb 2005 11:04:16 -0000	1.10
  +++ ossp-pkg/string-divert/Divert.pm	22 Feb 2005 13:21:34 -0000	1.11
  @@ -22,10 +22,6 @@
   ##  Divert.pm: Module Implementation
   ##
   
  -use 5.006;
  -use strict;
  -use warnings;
  -
   #   _________________________________________________________________________
   #
   #   STANDARD OBJECT ORIENTED API
  @@ -34,6 +30,11 @@
   
   package String::Divert;
   
  +use 5.006;
  +use strict;
  +use warnings;
  +
  +use Carp;
   require Exporter;
   
   our $VERSION   = '0.94';
  @@ -53,6 +54,7 @@
       $self->{name}      = (defined($name) ? $name : '');
       $self->{overwrite} = 'none';
       $self->{storage}   = 'all';
  +    $self->{copying}   = 'pass';
       $self->{chunks}    = [ '' ];
       $self->{diversion} = [];
       $self->{foldermk}  = '{#%s#}';
  @@ -74,6 +76,19 @@
       return;
   }
   
  +#   clone object
  +sub clone ($) {
  +    my ($self) = @_;
  +    my $ov = $self->overload();
  +    $self->overload(0);
  +    eval { require Storable; };
  +    croak "required module \"Storable\" not installed" if ($@);
  +    my $clone = Storable::dclone($self);
  +    $self->overload($ov);
  +    $clone->overload($ov);
  +    return $clone;
  +}
  +
   #   operation: set/get name of object
   sub name ($;$) {
       my ($self, $name) = @_;
  @@ -93,7 +108,7 @@
           if (@{$self->{diversion}} > 0);
       my $old_mode = $self->{overwrite};
       if (defined($mode)) {
  -        die "invalid mode argument"
  +        croak "invalid mode argument"
               if ($mode !~ m/^(none|once|always)$/);
           $self->{overwrite} = $mode;
       }
  @@ -107,13 +122,25 @@
           if (@{$self->{diversion}} > 0);
       my $old_mode = $self->{storage};
       if (defined($mode)) {
  -        die "invalid mode argument"
  +        croak "invalid mode argument"
               if ($mode !~ m/^(none|fold|all)$/);
           $self->{storage} = $mode;
       }
       return $old_mode;
   }
   
  +#   operation: set/get copy constructor mode
  +sub copying ($;$) {
  +    my ($self, $mode) = @_;
  +    my $old_mode = $self->{copying};
  +    if (defined($mode)) {
  +        croak "invalid mode argument"
  +            if ($mode !~ m/^(clone|pass)$/);
  +        $self->{copying} = $mode;
  +    }
  +    return $old_mode;
  +}
  +
   #   internal: split string into chunks
   sub _chunking ($) {
       my ($self, $string) = @_;
  @@ -122,12 +149,12 @@
       while ($string =~ m/${folderre}()/s) {
           my ($prolog, $id) = ($`, $1);
           push(@chunks, $prolog) if ($prolog ne '' and $self->{storage} !~ m/^(none|fold)/);
  -        die "empty folding object name"
  +        croak "empty folding object name"
               if ($id eq '');
           if ($self->{storage} ne 'none') {
               my $object = $self->folding($id);
               $object = $self->new($id) if (not defined($object));
  -            die "cannot reuse or create folding sub object \"$id\""
  +            croak "cannot reuse or create folding sub object \"$id\""
                   if (not defined($object));
               push(@chunks, $object);
           }
  @@ -142,9 +169,9 @@
       my ($self, $string) = @_;
       return $self->{diversion}->[-1]->assign($string)
           if (@{$self->{diversion}} > 0);
  -    die "cannot assign undefined string"
  +    croak "cannot assign undefined string"
           if (not defined($string));
  -    die "cannot assign reference ".ref($string)." as string"
  +    croak "cannot assign reference ".ref($string)." as string"
           if (ref($string));
       $self->{chunks} = [];
       foreach my $chunk ($self->_chunking($string)) {
  @@ -158,9 +185,9 @@
       my ($self, $string) = @_;
       return $self->{diversion}->[-1]->append($string)
           if (@{$self->{diversion}} > 0);
  -    die "cannot assign undefined string"
  +    croak "cannot assign undefined string"
           if (not defined($string));
  -    die "cannot assign reference as string"
  +    croak "cannot assign reference as string"
           if (ref($string));
       if (   $self->{overwrite} eq 'once'
           or $self->{overwrite} eq 'always') {
  @@ -240,11 +267,11 @@
       my ($self, $id) = @_;
       return $self->{diversion}->[-1]->fold($id)
           if (@{$self->{diversion}} > 0);
  -    die "undefined folding object identifier"
  +    croak "undefined folding object identifier"
           if (not defined($id));
       return undef if ($self->{storage} eq 'none');
       if (ref($id)) {
  -        die "folding object not of class String::Divert"
  +        croak "folding object not of class String::Divert"
               if (   UNIVERSAL::isa($id, "String::Divert")
                   or UNIVERSAL::isa($id, "String::Divert::__OVERLOAD__"));
           push(@{$self->{chunks}}, $id);
  @@ -253,7 +280,7 @@
       else {
           my $object = $self->folding($id);
           $object = $self->new($id) if (not defined($object));
  -        die "unable to create new folding object"
  +        croak "unable to create new folding object"
               if (not defined($object));
           push(@{$self->{chunks}}, $object);
           return $object;
  @@ -324,7 +351,7 @@
           #   configure folder
           my $test = sprintf($a, "foo");
           my ($id) = ($test =~ m|${b}()|s);
  -        die "folder construction format and matching regular expression do not correspond"
  +        croak "folder construction format and matching regular expression do not correspond"
               if (not defined($id) or (defined($id) and $id ne "foo"));
           $self->{foldermk} = $a;
           $self->{folderre} = $b;
  @@ -342,7 +369,7 @@
   sub divert ($$) {
       my ($self, $id) = @_;
       my $object = $self->folding($id);
  -    die "folding sub-object \"$id\" not found"
  +    croak "folding sub-object \"$id\" not found"
           if (not defined($object));
       push(@{$self->{diversion}}, $object);
       return $self;
  @@ -357,11 +384,12 @@
           for ($num = 1; $num <= @{$self->{diversion}}; $num++) {
               last if ($self->{diversion}->[-$num]->{name} eq $name);
           }
  -        die "no object named \"$name\" found for undiversion"
  +        croak "no object named \"$name\" found for undiversion"
               if ($num > @{$self->{diversion}});
       }
       $num = @{$self->{diversion}} if ($num == 0);
  -    die "less number (".scalar(@{$self->{diversion}}).") of diversions active than requested ($num) to undivert"
  +    croak "less number (".scalar(@{$self->{diversion}}).") of " .
  +        "diversions active than requested ($num) to undivert"
           if ($num > @{$self->{diversion}});
       while ($num-- > 0) {
           pop(@{$self->{diversion}});
  @@ -451,9 +479,9 @@
        '<>'       => \&op_unfold,
        '>>'       => \&op_divert,
        '<<'       => \&op_undivert,
  +     '='        => \&op_copyconst,
       #'${}'      => \&op_deref_string,
       #'%{}'      => \&op_deref_hash,
  -    #'='        => \&op_copyconst,
       #'nomethod' => \&op_unknown,
        'fallback' => 0
   );
  @@ -482,12 +510,6 @@
   #    return $self;
   #}
   
  -#sub op_copyconst {
  -#    my ($self, $other, $reverse) = @_;
  -#    #   intentionally do not copy at all
  -#    return $self;
  -#}
  -
   #sub op_deref_string ($$$) {
   #    my $self = shift;
   #    return $self;
  @@ -498,6 +520,18 @@
   #    return $self;
   #}
   
  +sub op_copyconst {
  +    my ($self, $other, $reverse) = @_;
  +    if ($self->{copying} eq 'pass') {
  +        #   object is just passed-through
  +        return $self;
  +    }
  +    else { 
  +        #   object is recursively cloned
  +        return $self->clone();
  +    }
  +}
  +
   sub op_string ($$$) {
       my ($self, $other, $rev) = @_;
       return $self->string();
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/Divert.pod
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 Divert.pod
  --- ossp-pkg/string-divert/Divert.pod	22 Feb 2005 11:04:16 -0000	1.5
  +++ ossp-pkg/string-divert/Divert.pod	22 Feb 2005 13:21:34 -0000	1.6
  @@ -114,6 +114,10 @@
   I<Object Construction>. This creates a new string object with either
   an empty initial name or the one given in C<$name>.
   
  +=item SAPI: C<$y = $x-E<gt>>B<clone>C<;>
  +
  +I<Object Cloning>. This recursively clones the string object in C<$x>.
  +
   =item SAPI: C<$x-E<gt>>B<destroy>C<;>
   
   =item SAPI: C<undef $x;>
  @@ -170,6 +174,16 @@
   or C<"all"> (both contents and foldings are stored). The default is
   C<"all">.
   
  +=item SAPI: C<$mode = $x-E<gt>>B<copying>C<;>
  +
  +=item SAPI: [C<$old_mode =>] C<$x-E<gt>>B<copying>C<($new_mode);>
  +
  +I<Copying Mode>. Retrieves the current copying mode of string object
  +C<$x> or sets a new copying mode. The mode can be C<"pass"> (just
  +pass-through objects in the "copy constructor" from the XAPI) or
  +C<"clone"> (clone object in the "copy constructor" from the XAPI). The
  +default is C<"pass">.
  +
   =back
   
   =head2 Content Manipulation
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/test.pl
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 test.pl
  --- ossp-pkg/string-divert/test.pl	22 Feb 2005 11:04:16 -0000	1.5
  +++ ossp-pkg/string-divert/test.pl	22 Feb 2005 13:21:34 -0000	1.6
  @@ -23,7 +23,7 @@
   ##
   
   use 5.006;
  -use Test::More tests => 37;
  +use Test::More tests => 38;
   
   #   test: module loading
   BEGIN { use_ok('String::Divert') };
  @@ -38,6 +38,8 @@
   $x->name("xx");
   ok($x->name() eq "xx", "overwritten object name");
   $x->name("x");
  +my $y = $x->clone();
  +ok($x != $y, "cloning");
   
   #   test: simple content
   ok($x->string() eq "", "empty initial content");
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar  4 17:34:42 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 91D1276342; Fri,  4 Mar 2005 17:34:42 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/path/ path_temp.c
Message-Id: <20050304163442.91D1276342@mail.ossp.org>
Date: Fri,  4 Mar 2005 17:34:42 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Mar-2005 17:34:42
  Branch: HEAD                             Handle: 2005030416344200

  Modified files:
    ossp-pkg/path           path_temp.c

  Log:
    allow at least access without reading

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/path/path_temp.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/path/path_temp.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 path_temp.c
  --- ossp-pkg/path/path_temp.c	16 Feb 2003 11:39:23 -0000	1.3
  +++ ossp-pkg/path/path_temp.c	4 Mar 2005 16:34:42 -0000	1.4
  @@ -152,7 +152,7 @@
                   return PATH_ERR_SYS;
           }
           else if (id == PATH_TEMP_DIR) {
  -            if (mkdir(path, 0700) == 0) {
  +            if (mkdir(path, 0711) == 0) {
                   rc = PATH_OK;
                   break;
               }
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar  4 17:35:00 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E78517634F; Fri,  4 Mar 2005 17:34:59 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/path/ TODO
Message-Id: <20050304163459.E78517634F@mail.ossp.org>
Date: Fri,  4 Mar 2005 17:34:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Mar-2005 17:34:59
  Branch: HEAD                             Handle: 2005030416345900

  Modified files:
    ossp-pkg/path           TODO

  Log:
    remember one more interesting thing

  Summary:
    Revision    Changes     Path
    1.4         +1  -0      ossp-pkg/path/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/path/TODO
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 TODO
  --- ossp-pkg/path/TODO	16 Feb 2003 11:37:18 -0000	1.3
  +++ ossp-pkg/path/TODO	4 Mar 2005 16:34:59 -0000	1.4
  @@ -1,5 +1,6 @@
   
   - restliche API auf path_rc_t umbauen
  +- add POSIX wordexp? http://www.opengroup.org/onlinepubs/007904975/functions/wordexp.html
   - add glob(*) from shpat
   - add fnmatch(*) from shpat
   - fts(3) from FreeBSD
  @@ .

From ossp-cvs-owner@ossp.org  Sun Mar  6 12:29:26 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9F3AD7631C; Sun,  6 Mar 2005 12:29:26 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog Makefile.in THANKS
Message-Id: <20050306112926.9F3AD7631C@mail.ossp.org>
Date: Sun,  6 Mar 2005 12:29:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Mar-2005 12:29:26
  Branch: HEAD                             Handle: 2005030611292500

  Modified files:
    ossp-pkg/uuid           ChangeLog Makefile.in THANKS

  Log:
    Fixed generated "section" number in uuid-config(1).
    
    Taken over from code by: Piotr Roszatycki <dexter@debian.org>

  Summary:
    Revision    Changes     Path
    1.71        +5  -0      ossp-pkg/uuid/ChangeLog
    1.27        +1  -1      ossp-pkg/uuid/Makefile.in
    1.7         +1  -1      ossp-pkg/uuid/THANKS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.70 -r1.71 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	23 Jan 2005 13:13:27 -0000	1.70
  +++ ossp-pkg/uuid/ChangeLog	6 Mar 2005 11:29:25 -0000	1.71
  @@ -11,6 +11,11 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 1.2.0 and 1.2.1 (23-Jan-2005 to xx-Mar-2005)
  +
  +   o Fixed generated "section" number in uuid-config(1).
  +     [Piotr Roszatycki <dexter@debian.org>]
  +
     Changes between 1.1.2 and 1.2.0 (13-Jan-2005 to 23-Jan-2005)
   
      o Added support for new version 5 UUIDs (name-based, SHA-1)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	23 Jan 2005 11:28:51 -0000	1.26
  +++ ossp-pkg/uuid/Makefile.in	6 Mar 2005 11:29:25 -0000	1.27
  @@ -124,7 +124,7 @@
   	V2=`$(SHTOOL) version -l c -d long $(top_srcdir)/uuid_vers.h`; \
   	D=`$(SHTOOL) version -l c -d long $(top_srcdir)/uuid_vers.h | sed -e 's;.*(;;' -e 's;).*;;'`; \
   	$(POD2MAN) --quotes=none \
  -	           --section=3 --center="Universally Unique Identifier" \
  +	           --section=1 --center="Universally Unique Identifier" \
   	           --release="$$D" --date="OSSP uuid $$V1" $(srcdir)/uuid-config.pod | \
   	sed -e "s;UUID_VERSION_STR;$$V2;" >uuid-config.1
   uuid.1: uuid_cli.pod
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/THANKS
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 THANKS
  --- ossp-pkg/uuid/THANKS	13 Jan 2005 10:30:41 -0000	1.6
  +++ ossp-pkg/uuid/THANKS	6 Mar 2005 11:29:25 -0000	1.7
  @@ -15,7 +15,7 @@
       o  M. Daniel                   <mdaniel@scdi.com>
       o  Fuyuki                      <fuyuki@nigredo.org>
       o  Thomas Lotterer             <thomas@lotterer.net>
  -    o  Piotr Roszatycki            <Piotr_Roszatycki@netia.net.pl>
  +    o  Piotr Roszatycki            <dexter@debian.org>
       o  Michael Schloh              <michael@schloh.com>
       o  Guerry Semones              <guerry@tsunamiresearch.com>
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Mar 29 21:01:44 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 2B8B37631D; Tue, 29 Mar 2005 21:01:44 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid.c uuid.h.in uuid_ac.h uuid_b...
Message-Id: <20050329190144.2B8B37631D@mail.ossp.org>
Date: Tue, 29 Mar 2005 21:01:44 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Mar-2005 21:01:44
  Branch: HEAD                             Handle: 2005032920014100

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid.c uuid.h.in uuid_ac.h uuid_bm.h
                            uuid_cli.c uuid_dce.c uuid_mac.c uuid_md5.c
                            uuid_prng.c uuid_sha1.c uuid_str.c uuid_ui64.c

  Log:
    Cleanup the source code even more by following a large
    set of FlexeLint's suggestions.

  Summary:
    Revision    Changes     Path
    1.72        +4  -0      ossp-pkg/uuid/ChangeLog
    1.51        +39 -26     ossp-pkg/uuid/uuid.c
    1.7         +4  -4      ossp-pkg/uuid/uuid.h.in
    1.4         +1  -1      ossp-pkg/uuid/uuid_ac.h
    1.5         +3  -3      ossp-pkg/uuid/uuid_bm.h
    1.19        +4  -4      ossp-pkg/uuid/uuid_cli.c
    1.3         +14 -11     ossp-pkg/uuid/uuid_dce.c
    1.7         +2  -2      ossp-pkg/uuid/uuid_mac.c
    1.11        +1  -12     ossp-pkg/uuid/uuid_md5.c
    1.5         +2  -2      ossp-pkg/uuid/uuid_prng.c
    1.2         +1  -2      ossp-pkg/uuid/uuid_sha1.c
    1.5         +6  -4      ossp-pkg/uuid/uuid_str.c
    1.4         +15 -11     ossp-pkg/uuid/uuid_ui64.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.71 -r1.72 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	6 Mar 2005 11:29:25 -0000	1.71
  +++ ossp-pkg/uuid/ChangeLog	29 Mar 2005 19:01:41 -0000	1.72
  @@ -13,6 +13,10 @@
   
     Changes between 1.2.0 and 1.2.1 (23-Jan-2005 to xx-Mar-2005)
   
  +   o Cleanup the source code even more by following a large
  +     set of FlexeLint's suggestions.
  +     [Ralf S. Engelschall]
  +
      o Fixed generated "section" number in uuid-config(1).
        [Piotr Roszatycki <dexter@debian.org>]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.50 -r1.51 uuid.c
  --- ossp-pkg/uuid/uuid.c	23 Jan 2005 11:28:51 -0000	1.50
  +++ ossp-pkg/uuid/uuid.c	29 Mar 2005 19:01:41 -0000	1.51
  @@ -34,7 +34,6 @@
   #include <string.h>
   #include <unistd.h>
   #include <ctype.h>
  -#include <unistd.h>
   #include <fcntl.h>
   #include <time.h>
   #include <sys/time.h>
  @@ -145,7 +144,7 @@
   }
   
   /* check whether UUID object represents "Nil UUID" */
  -uuid_rc_t uuid_isnil(uuid_t *uuid, int *result)
  +uuid_rc_t uuid_isnil(const uuid_t *uuid, int *result)
   {
       const unsigned char *ucp;
       int i;
  @@ -167,7 +166,7 @@
   }
   
   /* compare UUID objects */
  -uuid_rc_t uuid_compare(uuid_t *uuid1, uuid_t *uuid2, int *result)
  +uuid_rc_t uuid_compare(const uuid_t *uuid1, const uuid_t *uuid2, int *result)
   {
       int r;
   
  @@ -176,11 +175,13 @@
           return UUID_RC_ARG;
   
       /* convenience macro for setting result */
  -#   define RESULT(r) \
  +#define RESULT(r) \
  +    /*lint -save -e801 -e717*/ \
       do { \
           *result = (r); \
           goto result_exit; \
  -    } while (0)
  +    } while (0) \
  +    /*lint -restore*/
   
       /* special cases: NULL or equal UUIDs */
       if (uuid1 == uuid2)
  @@ -188,9 +189,9 @@
       if (uuid1 == NULL && uuid2 == NULL)
           RESULT(0);
       if (uuid1 == NULL)
  -        RESULT((uuid_isnil(uuid2, &r), r) ? 0 : -1);
  +        RESULT((uuid_isnil(uuid2, &r) == UUID_RC_OK ? r : 0) ? 0 : -1);
       if (uuid2 == NULL)
  -        RESULT((uuid_isnil(uuid1, &r), r) ? 0 : 1);
  +        RESULT((uuid_isnil(uuid1, &r) == UUID_RC_OK ? r : 0) ? 0 : 1);
   
       /* standard cases: regular different UUIDs */
       if (uuid1->obj.time_low != uuid2->obj.time_low)
  @@ -242,12 +243,12 @@
   
       /* unpack "time_mid" field */
       tmp16 = *in++;
  -    tmp16 = (tmp16 << 8) | *in++;
  +    tmp16 = (uuid_uint16_t)(tmp16 << 8) | *in++;
       uuid->obj.time_mid = tmp16;
   
       /* unpack "time_hi_and_version" field */
       tmp16 = *in++;
  -    tmp16 = (tmp16 << 8) | *in++;
  +    tmp16 = (uuid_uint16_t)(tmp16 << 8) | *in++;
       uuid->obj.time_hi_and_version = tmp16;
   
       /* unpack "clock_seq_hi_and_reserved" field */
  @@ -265,7 +266,7 @@
   
   /* INTERNAL: pack UUID object into binary representation
      (allows in-place operation for internal efficiency!) */
  -static uuid_rc_t uuid_export_bin(uuid_t *uuid, void **data_ptr, size_t *data_len)
  +static uuid_rc_t uuid_export_bin(const uuid_t *uuid, void **data_ptr, size_t *data_len)
   {
       uuid_uint8_t *out;
       uuid_uint32_t tmp32;
  @@ -387,27 +388,30 @@
       for (i = 0; i < sizeof(uuid->obj.node); i++) {
           hexbuf[0] = *cp++;
           hexbuf[1] = *cp++;
  -        uuid->obj.node[i] = strtoul(hexbuf, NULL, 16);
  +        uuid->obj.node[i] = (uuid_uint8_t)strtoul(hexbuf, NULL, 16);
       }
   
       return UUID_RC_OK;
   }
   
   /* INTERNAL: export UUID object to string representation */
  -static uuid_rc_t uuid_export_str(uuid_t *uuid, void **data_ptr, size_t *data_len)
  +static uuid_rc_t uuid_export_str(const uuid_t *uuid, void **data_ptr, size_t *data_len)
   {
  +    char *data_buf;
  +
       /* sanity check argument(s) */
       if (uuid == NULL || data_ptr == NULL)
           return UUID_RC_ARG;
   
  -    /* allocate output buffer */
  +    /* determine output buffer */
       if (*data_ptr == NULL) {
  -        if ((*data_ptr = (void *)malloc(UUID_LEN_STR+1)) == NULL)
  +        if ((data_buf = (void *)malloc(UUID_LEN_STR+1)) == NULL)
               return UUID_RC_MEM;
           if (data_len != NULL)
               *data_len = UUID_LEN_STR+1;
       }
       else {
  +        data_buf = (char *)(*data_ptr);
           if (data_len == NULL)
               return UUID_RC_ARG;
           if (*data_len < UUID_LEN_STR+1)
  @@ -416,7 +420,7 @@
       }
   
       /* format UUID into string representation */
  -    str_snprintf((char *)(*data_ptr), UUID_LEN_STR+1,
  +    if (str_snprintf(data_buf, UUID_LEN_STR+1,
           "%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
           (unsigned long)uuid->obj.time_low,
           (unsigned int)uuid->obj.time_mid,
  @@ -428,7 +432,15 @@
           (unsigned int)uuid->obj.node[2],
           (unsigned int)uuid->obj.node[3],
           (unsigned int)uuid->obj.node[4],
  -        (unsigned int)uuid->obj.node[5]);
  +        (unsigned int)uuid->obj.node[5]) != UUID_LEN_STR) {
  +        if (*data_ptr == NULL)
  +            free(data_buf);
  +        return UUID_RC_INT;
  +    }
  +
  +    /* pass back new buffer if locally allocated */
  +    if (*data_ptr == NULL)
  +        *data_ptr = data_buf;
   
       return UUID_RC_OK;
   }
  @@ -454,7 +466,7 @@
   };
   
   /* INTERNAL: dump UUID object as descriptive text */
  -static uuid_rc_t uuid_export_txt(uuid_t *uuid, void **data_ptr, size_t *data_len)
  +static uuid_rc_t uuid_export_txt(const uuid_t *uuid, void **data_ptr, size_t *data_len)
   {
       uuid_rc_t rc;
       char **out;
  @@ -646,7 +658,7 @@
   }
   
   /* UUID exporting */
  -uuid_rc_t uuid_export(uuid_t *uuid, uuid_fmt_t fmt, void **data_ptr, size_t *data_len)
  +uuid_rc_t uuid_export(const uuid_t *uuid, uuid_fmt_t fmt, void **data_ptr, size_t *data_len)
   {
       uuid_rc_t rc;
   
  @@ -666,11 +678,11 @@
   }
   
   /* INTERNAL: brand UUID with version and variant */
  -static void uuid_brand(uuid_t *uuid, int version)
  +static void uuid_brand(uuid_t *uuid, unsigned int version)
   {
       /* set version (as given) */
       uuid->obj.time_hi_and_version &= BM_MASK(11,0);
  -    uuid->obj.time_hi_and_version |= BM_SHL((uuid_uint16_t)version, 12);
  +    uuid->obj.time_hi_and_version |= (uuid_uint16_t)BM_SHL(version, 12);
   
       /* set variant (always DCE 1.1 only) */
       uuid->obj.clock_seq_hi_and_reserved &= BM_MASK(5,0);
  @@ -697,7 +709,7 @@
        */
   
       /* determine current system time and sequence counter */
  -    while (1) {
  +    for (;;) {
           /* determine current system time */
           if (gettimeofday(&time_now, NULL) == -1)
               return UUID_RC_SYS;
  @@ -733,9 +745,9 @@
       }
   
       /* convert from timeval (sec,usec) to OSSP ui64 (100*nsec) format */
  -    t = ui64_n2i(time_now.tv_sec);
  +    t = ui64_n2i((unsigned long)time_now.tv_sec);
       t = ui64_muln(t, 1000000, NULL);
  -    t = ui64_addn(t, time_now.tv_usec, NULL);
  +    t = ui64_addn(t, (int)time_now.tv_usec, NULL);
       t = ui64_muln(t, 10, NULL);
   
       /* adjust for offset between UUID and Unix Epoch time */
  @@ -745,7 +757,7 @@
       /* compensate for low resolution system clock by adding
          the time/tick sequence counter */
       if (uuid->time_seq > 0)
  -        t = ui64_addn(t, uuid->time_seq, NULL);
  +        t = ui64_addn(t, (int)uuid->time_seq, NULL);
   
       /* store the 60 LSB of the time in the UUID */
       t = ui64_rol(t, 16, &ov);
  @@ -790,7 +802,8 @@
   
       if ((mode & UUID_MAKE_MC) || (uuid->mac[0] & BM_OCTET(1,0,0,0,0,0,0,0))) {
           /* generate random IEEE 802 local multicast MAC address */
  -        prng_data(uuid->prng, (void *)&(uuid->obj.node), sizeof(uuid->obj.node));
  +        if (prng_data(uuid->prng, (void *)&(uuid->obj.node), sizeof(uuid->obj.node)) != PRNG_RC_OK)
  +            return UUID_RC_INT;
           uuid->obj.node[0] |= IEEE_MAC_MCBIT;
           uuid->obj.node[0] |= IEEE_MAC_LOBIT;
       }
  @@ -935,7 +948,7 @@
           return UUID_RC_ARG;
   
       /* initialize SHA-1 context */
  -    if (sha1_init(uuid->sha1) != MD5_RC_OK)
  +    if (sha1_init(uuid->sha1) != SHA1_RC_OK)
           return UUID_RC_MEM;
   
       /* load the namespace UUID into SHA-1 context */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.h.in
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 uuid.h.in
  --- ossp-pkg/uuid/uuid.h.in	23 Jan 2005 11:28:51 -0000	1.6
  +++ ossp-pkg/uuid/uuid.h.in	29 Mar 2005 19:01:41 -0000	1.7
  @@ -90,12 +90,12 @@
   extern uuid_rc_t     uuid_make     (uuid_t  *_uuid, unsigned int _mode, ...);
   
   /* UUID comparison */
  -extern uuid_rc_t     uuid_isnil    (uuid_t  *_uuid,                 int *_result);
  -extern uuid_rc_t     uuid_compare  (uuid_t  *_uuid, uuid_t *_uuid2, int *_result);
  +extern uuid_rc_t     uuid_isnil    (const uuid_t *_uuid,                       int *_result);
  +extern uuid_rc_t     uuid_compare  (const uuid_t *_uuid, const uuid_t *_uuid2, int *_result);
   
   /* UUID import/export */
  -extern uuid_rc_t     uuid_import   (uuid_t  *_uuid, uuid_fmt_t _fmt, const void  *_data_ptr, size_t  _data_len);
  -extern uuid_rc_t     uuid_export   (uuid_t  *_uuid, uuid_fmt_t _fmt,       void **_data_ptr, size_t *_data_len);
  +extern uuid_rc_t     uuid_import   (uuid_t       *_uuid, uuid_fmt_t _fmt, const void  *_data_ptr, size_t  _data_len);
  +extern uuid_rc_t     uuid_export   (const uuid_t *_uuid, uuid_fmt_t _fmt,       void **_data_ptr, size_t *_data_len);
   
   /* library utilities */
   extern char         *uuid_error    (uuid_rc_t _rc);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_ac.h
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 uuid_ac.h
  --- ossp-pkg/uuid/uuid_ac.h	31 Dec 2004 19:20:34 -0000	1.3
  +++ ossp-pkg/uuid/uuid_ac.h	29 Mar 2005 19:01:41 -0000	1.4
  @@ -34,7 +34,7 @@
   
   /* define boolean values */
   #define UUID_FALSE 0
  -#define UUID_TRUE  !UUID_FALSE
  +#define UUID_TRUE  (/*lint -save -e506*/ !UUID_FALSE /*lint -restore*/)
   
   /* determine types of 8-bit size */
   #if SIZEOF_CHAR == 1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_bm.h
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 uuid_bm.h
  --- ossp-pkg/uuid/uuid_bm.h	31 Dec 2004 19:20:34 -0000	1.4
  +++ ossp-pkg/uuid/uuid_bm.h	29 Mar 2005 19:01:41 -0000	1.5
  @@ -38,7 +38,7 @@
   /* generate a bitmask consisting of 1 bits from (and including)
      bit position `l' (left) to (and including) bit position `r' */
   #define BM_MASK(l,r) \
  -    (((1<<((l)-(r)+1))-1)<<(r))
  +    ((((unsigned int)1<<(((l)-(r))+1))-1)<<(r))
   
   /* extract a value v from a word w at position `l' to `r' and return value */
   #define BM_GET(w,l,r) \
  @@ -72,9 +72,9 @@
   
   /* rotate word w (of bits n..0) k bits to the left or to the right */
   #define BM_ROL(w,n,k) \
  -    (BM_SHL((w),(k))&BM_MASK(n,0))|BM_SHR(((w)&BM_MASK(n,0)),(n)-(k))
  +    ((BM_SHL((w),(k))&BM_MASK(n,0))|BM_SHR(((w)&BM_MASK(n,0)),(n)-(k)))
   #define BM_ROR(w,n,k) \
  -    (BM_SHR(((w)&BM_MASK(n,0)),(k)))|BM_SHL(((w),(n)-(k))&BM_MASK(n,0))
  +    ((BM_SHR(((w)&BM_MASK(n,0)),(k)))|BM_SHL(((w),(n)-(k))&BM_MASK(n,0)))
   
   #endif /* __UUID_BM_H__ */
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.c
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 uuid_cli.c
  --- ossp-pkg/uuid/uuid_cli.c	23 Jan 2005 11:28:51 -0000	1.18
  +++ ossp-pkg/uuid/uuid_cli.c	29 Mar 2005 19:01:41 -0000	1.19
  @@ -127,10 +127,10 @@
                   if (*p != '\0')
                       usage("invalid argument to option 'v'");
                   switch (i) {
  -                    case 1: version = UUID_MAKE_V1; break;;
  -                    case 3: version = UUID_MAKE_V3; break;;
  -                    case 4: version = UUID_MAKE_V4; break;;
  -                    case 5: version = UUID_MAKE_V5; break;;
  +                    case 1: version = UUID_MAKE_V1; break;
  +                    case 3: version = UUID_MAKE_V3; break;
  +                    case 4: version = UUID_MAKE_V4; break;
  +                    case 5: version = UUID_MAKE_V5; break;
                       default:
                           usage("invalid version on option 'v'");
                           break;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_dce.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid_dce.c
  --- ossp-pkg/uuid/uuid_dce.c	31 Dec 2004 19:20:34 -0000	1.2
  +++ ossp-pkg/uuid/uuid_dce.c	29 Mar 2005 19:01:41 -0000	1.3
  @@ -43,6 +43,9 @@
   /* include regular API */
   #include "uuid.h"
   
  +/* helper macro */
  +#define LEAVE /*lint -save -e801*/ goto leave /*lint -restore*/
  +
   /* create a UUID (v1 only) */
   void uuid_dce_create(uuid_dce_t *uuid_dce, int *status)
   {
  @@ -149,15 +152,15 @@
   
       /* import both UUID binary representations and compare them */
       if (uuid_create(&uuid1) != UUID_RC_OK)
  -        goto leave;
  +        LEAVE;
       if (uuid_create(&uuid2) != UUID_RC_OK)
  -        goto leave;
  +        LEAVE;
       if (uuid_import(uuid1, UUID_FMT_BIN, uuid_dce1, UUID_LEN_BIN) != UUID_RC_OK)
  -        goto leave;
  +        LEAVE;
       if (uuid_import(uuid2, UUID_FMT_BIN, uuid_dce2, UUID_LEN_BIN) != UUID_RC_OK)
  -        goto leave;
  +        LEAVE;
       if (uuid_compare(uuid1, uuid2, &result) != UUID_RC_OK)
  -        goto leave;
  +        LEAVE;
   
       /* indicate successful operation */
       if (status != NULL)
  @@ -204,13 +207,13 @@
   
       /* import string representation and export binary representation */
       if (uuid_create(&uuid) != UUID_RC_OK)
  -        goto leave;
  +        LEAVE;
       if (uuid_import(uuid, UUID_FMT_STR, str, UUID_LEN_STR) != UUID_RC_OK)
  -        goto leave;
  +        LEAVE;
       vp  = uuid_dce;
       len = UUID_LEN_BIN;
       if (uuid_export(uuid, UUID_FMT_BIN, &vp, &len) != UUID_RC_OK)
  -        goto leave;
  +        LEAVE;
   
       /* indicate successful operation */
       if (status != NULL)
  @@ -240,13 +243,13 @@
   
       /* import binary representation and export string representation */
       if (uuid_create(&uuid) != UUID_RC_OK)
  -        goto leave;
  +        LEAVE;
       if (uuid_import(uuid, UUID_FMT_BIN, uuid_dce, UUID_LEN_BIN) != UUID_RC_OK)
  -        goto leave;
  +        LEAVE;
       vp  = str;
       len = UUID_LEN_STR;
       if (uuid_export(uuid, UUID_FMT_STR, &vp, &len) != UUID_RC_OK)
  -        goto leave;
  +        LEAVE;
   
       /* indicate successful operation */
       if (status != NULL)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_mac.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 uuid_mac.c
  --- ossp-pkg/uuid/uuid_mac.c	13 Jan 2005 08:50:11 -0000	1.6
  +++ ossp-pkg/uuid/uuid_mac.c	29 Mar 2005 19:01:41 -0000	1.7
  @@ -81,7 +81,7 @@
   #define FALSE 0
   #endif
   #ifndef TRUE
  -#define TRUE !FALSE
  +#define TRUE (/*lint -save -e506*/ !FALSE /*lint -restore*/)
   #endif
   
   /* return the Media Access Control (MAC) address of
  @@ -107,7 +107,7 @@
               if (ifap->ifa_addr != NULL && ifap->ifa_addr->sa_family == AF_LINK) {
                   sdl = (const struct sockaddr_dl *)(void *)ifap->ifa_addr;
                   ucp = (unsigned char *)(sdl->sdl_data + sdl->sdl_nlen);
  -                if (ucp != NULL && sdl->sdl_alen > 0) {
  +                if (sdl->sdl_alen > 0) {
                       for (i = 0; i < MAC_LEN && i < sdl->sdl_alen; i++, ucp++)
                           data_ptr[i] = (unsigned char)(*ucp & 0xff);
                       freeifaddrs(ifap_head);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_md5.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 uuid_md5.c
  --- ossp-pkg/uuid/uuid_md5.c	13 Jan 2005 10:36:06 -0000	1.10
  +++ ossp-pkg/uuid/uuid_md5.c	29 Mar 2005 19:01:41 -0000	1.11
  @@ -77,17 +77,6 @@
   /* POINTER defines a generic pointer type */
   typedef unsigned char *POINTER;
   
  -/* UINT2 defines a two byte word */
  -#if SIZEOF_UNSIGNED_SHORT   == 2
  -typedef unsigned short int UINT2;
  -#elif SIZEOF_UNSIGNED_INT   == 2
  -typedef unsigned int       UINT2;
  -#elif SIZEOF_UNSIGNED_LONG  == 2
  -typedef unsigned long int  UINT2;
  -#else
  -#error ERROR: unable to determine UINT2 type (two byte word)
  -#endif
  -
   /* UINT4 defines a four byte word */
   #if SIZEOF_UNSIGNED_SHORT       == 4
   typedef unsigned short int     UINT4;
  @@ -193,7 +182,7 @@
           memcpy((POINTER)&context->buffer[idx], (POINTER)input, partLen);
           MD5Transform(context->state, context->buffer);
           for (i = partLen; i + 63 < inputLen; i += 64)
  -            MD5Transform (context->state, &input[i]);
  +            MD5Transform(context->state, &input[i]);
           idx = 0;
       }
       else
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_prng.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 uuid_prng.c
  --- ossp-pkg/uuid/uuid_prng.c	31 Dec 2004 19:20:34 -0000	1.4
  +++ ossp-pkg/uuid/uuid_prng.c	29 Mar 2005 19:01:41 -0000	1.5
  @@ -104,8 +104,8 @@
                       break;
                   continue;
               }
  -            n -= i;
  -            p += i;
  +            n -= (unsigned int)i;
  +            p += (unsigned int)i;
               cnt = 0;
           }
       }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_sha1.c
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid_sha1.c
  --- ossp-pkg/uuid/uuid_sha1.c	23 Jan 2005 11:28:51 -0000	1.1
  +++ ossp-pkg/uuid/uuid_sha1.c	29 Mar 2005 19:01:41 -0000	1.2
  @@ -92,7 +92,6 @@
   enum {
       shaSuccess = 0,
       shaNull,            /* null pointer parameter */
  -    shaInputTooLong,    /* input data too long */
       shaStateError       /* called Input after Result */
   };
   
  @@ -173,7 +172,7 @@
           context->Computed    = 1;
       }
       for (i = 0; i < SHA1HashSize; i++)
  -        Message_Digest[i] = context->Intermediate_Hash[i>>2] >> 8 * (3 - (i & 0x03));
  +        Message_Digest[i] = context->Intermediate_Hash[i>>2] >> (8 * (3 - (i & 0x03)));
   
       return shaSuccess;
   }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_str.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 uuid_str.c
  --- ossp-pkg/uuid/uuid_str.c	31 Dec 2004 19:20:34 -0000	1.4
  +++ ossp-pkg/uuid/uuid_str.c	29 Mar 2005 19:01:41 -0000	1.5
  @@ -100,7 +100,7 @@
   
   /* some handy macros */
   #define char_to_int(p) (p - '0')
  -#define MAX(p,q) ((p >= q) ? p : q)
  +#define STR_MAX(p,q) ((p >= q) ? p : q)
   #define NUL '\0'
   
   static void
  @@ -281,6 +281,7 @@
                   break;
               case 'E':
                   flags |= DP_F_UP;
  +                /* FALLTHROUGH */
               case 'e':
                   if (cflags == DP_C_LDOUBLE)
                       fvalue = va_arg(args, LDOUBLE);
  @@ -289,6 +290,7 @@
                   break;
               case 'G':
                   flags |= DP_F_UP;
  +                /* FALLTHROUGH */
               case 'g':
                   if (cflags == DP_C_LDOUBLE)
                       fvalue = va_arg(args, LDOUBLE);
  @@ -322,7 +324,7 @@
                       num = va_arg(args, LLONG *);
                       *num = (LLONG) currlen;
                   } else {
  -                    int    *num;
  +                    int *num;
                       num = va_arg(args, int *);
                       *num = currlen;
                   }
  @@ -440,13 +442,13 @@
       convert[place] = 0;
   
       zpadlen = max - place;
  -    spadlen = min - MAX(max, place) - (signvalue ? 1 : 0);
  +    spadlen = min - STR_MAX(max, place) - (signvalue ? 1 : 0);
       if (zpadlen < 0)
           zpadlen = 0;
       if (spadlen < 0)
           spadlen = 0;
       if (flags & DP_F_ZERO) {
  -        zpadlen = MAX(zpadlen, spadlen);
  +        zpadlen = STR_MAX(zpadlen, spadlen);
           spadlen = 0;
       }
       if (flags & DP_F_MINUS)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_ui64.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 uuid_ui64.c
  --- ossp-pkg/uuid/uuid_ui64.c	31 Dec 2004 19:20:34 -0000	1.3
  +++ ossp-pkg/uuid/uuid_ui64.c	29 Mar 2005 19:01:41 -0000	1.4
  @@ -38,10 +38,12 @@
   
   /* fill an ui64_t with a sequence of a particular digit */
   #define ui64_fill(__x, __n) \
  +    /*lint -save -e717*/ \
       do { int __i; \
         for (__i = 0; __i < UI64_DIGITS; __i++) \
             (__x).x[__i] = (__n); \
  -    } while(0)
  +    } while (0) \
  +    /*lint -restore*/
   
   /* the value zero */
   ui64_t ui64_zero(void)
  @@ -85,8 +87,10 @@
   
       n = 0;
       i = (int)sizeof(n);
  +    /*lint -save -e774*/
       if (i > UI64_DIGITS)
           i = UI64_DIGITS;
  +    /*lint -restore*/
       while (--i >= 0) {
           n = (n * UI64_BASE) + x.x[i];
       }
  @@ -144,19 +148,19 @@
           return NULL;
       n = ui64_len(x);
       i = 0;
  -	do {
  -		x = ui64_divn(x, base, &r);
  -		str[i++] = map[r];
  -		while (n > 1 && x.x[n-1] == 0)
  -			n--;
  -	} while (i < ((int)len-1) && (n > 1 || x.x[0] != 0));
  -	str[i] = '\0';
  +    do {
  +        x = ui64_divn(x, base, &r);
  +        str[i++] = map[r];
  +        while (n > 1 && x.x[n-1] == 0)
  +            n--;
  +    } while (i < ((int)len-1) && (n > 1 || x.x[0] != 0));
  +    str[i] = '\0';
       for (j = 0; j < --i; j++) {
           c = str[j];
           str[j] = str[i];
           str[i] = c;
       }
  -	return str;
  +    return str;
   }
   
   /* addition of two ui64_t */
  @@ -469,7 +473,7 @@
   {
       UIXX_T(UI64_DIGITS+UI64_DIGITS) zx;
       ui64_t z;
  -	int i;
  +    int i;
       int carry;
   
       if (s <= 0) {
  @@ -517,7 +521,7 @@
   {
       UIXX_T(UI64_DIGITS+UI64_DIGITS) zx;
       ui64_t z;
  -	int i;
  +    int i;
       int carry;
   
       if (s <= 0) {
  @@ .

From ossp-cvs-owner@ossp.org  Tue Mar 29 21:05:17 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3027A76312; Tue, 29 Mar 2005 21:05:17 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ ChangeLog devtool.conf
Message-Id: <20050329190517.3027A76312@mail.ossp.org>
Date: Tue, 29 Mar 2005 21:05:17 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Mar-2005 21:05:17
  Branch: HEAD                             Handle: 2005032920051600

  Modified files:
    ossp-pkg/sa             ChangeLog devtool.conf

  Log:
    upgrade to libtool 1.5.14

  Summary:
    Revision    Changes     Path
    1.45        +5  -0      ossp-pkg/sa/ChangeLog
    1.24        +1  -1      ossp-pkg/sa/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.44 -r1.45 ChangeLog
  --- ossp-pkg/sa/ChangeLog	29 Jan 2005 08:17:32 -0000	1.44
  +++ ossp-pkg/sa/ChangeLog	29 Mar 2005 19:05:16 -0000	1.45
  @@ -11,6 +11,11 @@
     This is a list of all changes to OSSP sa.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 1.2.4 and 1.2.5 (29-Jan-2005 to xx-Mar-2005)
  +
  +   o Upgrade build environment to GNU libtool 1.5.14
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
     Changes between 1.2.3 and 1.2.4 (24-Jan-2005 to 29-Jan-2005)
   
      o Fix timeout handling in various functions by fixing the internal
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 devtool.conf
  --- ossp-pkg/sa/devtool.conf	25 Sep 2004 21:24:30 -0000	1.23
  +++ ossp-pkg/sa/devtool.conf	29 Mar 2005 19:05:16 -0000	1.24
  @@ -4,7 +4,7 @@
   
   %autogen
       @autogen shtool   2.0.1  "1.6.*" all
  -    @autogen libtool  1.5.10 "1.5*"
  +    @autogen libtool  1.5.14 "1.5*"
       @autogen autoconf 2.59   "2.5[4-9]*"
   
   %autoclean
  @@ .

From ossp-cvs-owner@ossp.org  Tue Mar 29 21:24:30 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 6CED576312; Tue, 29 Mar 2005 21:24:30 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ ChangeLog sa.c sa.h
Message-Id: <20050329192430.6CED576312@mail.ossp.org>
Date: Tue, 29 Mar 2005 21:24:30 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Mar-2005 21:24:30
  Branch: HEAD                             Handle: 2005032920242900

  Modified files:
    ossp-pkg/sa             ChangeLog sa.c sa.h

  Log:
    Follow FlexeLint suggestions and "constify" some API
    function parameters.

  Summary:
    Revision    Changes     Path
    1.46        +4  -0      ossp-pkg/sa/ChangeLog
    1.90        +11 -9      ossp-pkg/sa/sa.c
    1.43        +8  -8      ossp-pkg/sa/sa.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.45 -r1.46 ChangeLog
  --- ossp-pkg/sa/ChangeLog	29 Mar 2005 19:05:16 -0000	1.45
  +++ ossp-pkg/sa/ChangeLog	29 Mar 2005 19:24:29 -0000	1.46
  @@ -13,6 +13,10 @@
   
     Changes between 1.2.4 and 1.2.5 (29-Jan-2005 to xx-Mar-2005)
   
  +   o Follow FlexeLint suggestions and "constify" some API
  +     function parameters.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
      o Upgrade build environment to GNU libtool 1.5.14
        [Ralf S. Engelschall <rse@engelschall.com>]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.c
  ============================================================================
  $ cvs diff -u -r1.89 -r1.90 sa.c
  --- ossp-pkg/sa/sa.c	29 Jan 2005 08:17:32 -0000	1.89
  +++ ossp-pkg/sa/sa.c	29 Mar 2005 19:24:29 -0000	1.90
  @@ -267,14 +267,16 @@
              and for IPv6 inet_pton(3) would exist anyway */
           if (inet_aton(strptr, &in_val) == 0)
               return 0;
  +        memcpy(addrptr, &in_val, sizeof(struct in_addr));
  +        return 1;
   #elif defined(HAVE_INET_ADDR)
           /* at least for IPv4 try to rely on the even older inet_addr(3) */
           memset(&in_val, '\0', sizeof(in_val));
           if ((in_val.s_addr = inet_addr(strptr)) == ((in_addr_t)-1))
               return 0;
  -#endif
           memcpy(addrptr, &in_val, sizeof(struct in_addr));
           return 1;
  +#endif
       }
       errno = EAFNOSUPPORT;
       return 0;
  @@ -732,7 +734,7 @@
   }
   
   /* export address object into URI */
  -sa_rc_t sa_addr_a2u(sa_addr_t *saa, char **uri)
  +sa_rc_t sa_addr_a2u(const sa_addr_t *saa, char **uri)
   {
       char uribuf[1024];
       struct sockaddr_un *un;
  @@ -793,7 +795,7 @@
   }
   
   /* export address object into "struct sockaddr" */
  -sa_rc_t sa_addr_a2s(sa_addr_t *saa, struct sockaddr **sabuf, socklen_t *salen)
  +sa_rc_t sa_addr_a2s(const sa_addr_t *saa, struct sockaddr **sabuf, socklen_t *salen)
   {
       /* argument sanity check(s) */
       if (saa == NULL || sabuf == NULL || salen == 0)
  @@ -808,7 +810,7 @@
       return SA_OK;
   }
   
  -sa_rc_t sa_addr_match(sa_addr_t *saa1, sa_addr_t *saa2, int prefixlen)
  +sa_rc_t sa_addr_match(const sa_addr_t *saa1, const sa_addr_t *saa2, int prefixlen)
   {
       const unsigned char *ucp1, *ucp2;
       unsigned int uc1, uc2, mask;
  @@ -934,7 +936,7 @@
   }
   
   /* set timeouts if timeouts or done in kernel */
  -static sa_rc_t sa_socket_settimeouts(sa_t *sa)
  +static sa_rc_t sa_socket_settimeouts(const sa_t *sa)
   {
       /* stop processing if socket is still not allocated */
       if (sa->fdSocket == -1)
  @@ -1222,7 +1224,7 @@
   
       /* kill underlying socket if type changes */
       if (sa->eType != type)
  -        sa_socket_kill(sa);
  +        (void)sa_socket_kill(sa);
   
       /* set new type */
       sa->eType = type;
  @@ -1421,7 +1423,7 @@
   }
   
   /* bind socket to a local address */
  -sa_rc_t sa_bind(sa_t *sa, sa_addr_t *laddr)
  +sa_rc_t sa_bind(sa_t *sa, const sa_addr_t *laddr)
   {
       sa_rc_t rv;
       struct sockaddr_un *un;
  @@ -1449,7 +1451,7 @@
   }
   
   /* connect socket to a remote address */
  -sa_rc_t sa_connect(sa_t *sa, sa_addr_t *raddr)
  +sa_rc_t sa_connect(sa_t *sa, const sa_addr_t *raddr)
   {
       int flags, n, error;
       fd_set rset, wset;
  @@ -2131,7 +2133,7 @@
   }
   
   /* shutdown a socket connection */
  -sa_rc_t sa_shutdown(sa_t *sa, char *flags)
  +sa_rc_t sa_shutdown(sa_t *sa, const char *flags)
   {
       int how;
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.h
  ============================================================================
  $ cvs diff -u -r1.42 -r1.43 sa.h
  --- ossp-pkg/sa/sa.h	24 Jan 2005 15:10:09 -0000	1.42
  +++ ossp-pkg/sa/sa.h	29 Mar 2005 19:24:29 -0000	1.43
  @@ -168,11 +168,11 @@
   extern sa_rc_t sa_addr_destroy (sa_addr_t  *__saa);
   
   /* address operations */
  -extern sa_rc_t sa_addr_u2a     (sa_addr_t  *__saa, const char *__uri, ...);
  -extern sa_rc_t sa_addr_s2a     (sa_addr_t  *__saa, const struct sockaddr *__sabuf, socklen_t __salen);
  -extern sa_rc_t sa_addr_a2u     (sa_addr_t  *__saa, char **__uri);
  -extern sa_rc_t sa_addr_a2s     (sa_addr_t  *__saa, struct sockaddr **__sabuf, socklen_t *__salen);
  -extern sa_rc_t sa_addr_match   (sa_addr_t  *__saa1, sa_addr_t *__saa2, int __prefixlen);
  +extern sa_rc_t sa_addr_u2a     (sa_addr_t       *__saa, const char *__uri, ...);
  +extern sa_rc_t sa_addr_s2a     (sa_addr_t       *__saa, const struct sockaddr *__sabuf, socklen_t __salen);
  +extern sa_rc_t sa_addr_a2u     (const sa_addr_t *__saa, char **__uri);
  +extern sa_rc_t sa_addr_a2s     (const sa_addr_t *__saa, struct sockaddr **__sabuf, socklen_t *__salen);
  +extern sa_rc_t sa_addr_match   (const sa_addr_t *__saa1, const sa_addr_t *__saa2, int __prefixlen);
   
   /* socket object operations */
   extern sa_rc_t sa_create       (sa_t **__sa);
  @@ -186,14 +186,14 @@
   extern sa_rc_t sa_syscall      (sa_t  *__sa, sa_syscall_t __id, void (*__fptr)(void), void *__fctx);
   
   /* socket connection operations */
  -extern sa_rc_t sa_bind         (sa_t  *__sa, sa_addr_t  *__laddr);
  -extern sa_rc_t sa_connect      (sa_t  *__sa, sa_addr_t  *__raddr);
  +extern sa_rc_t sa_bind         (sa_t  *__sa, const sa_addr_t *__laddr);
  +extern sa_rc_t sa_connect      (sa_t  *__sa, const sa_addr_t *__raddr);
   extern sa_rc_t sa_listen       (sa_t  *__sa, int __backlog);
   extern sa_rc_t sa_accept       (sa_t  *__sa, sa_addr_t **__caddr, sa_t **__csa);
   extern sa_rc_t sa_getremote    (sa_t  *__sa, sa_addr_t **__raddr);
   extern sa_rc_t sa_getlocal     (sa_t  *__sa, sa_addr_t **__laddr);
   extern sa_rc_t sa_getfd        (sa_t  *__sa, int *__fd);
  -extern sa_rc_t sa_shutdown     (sa_t  *__sa, char *__flags);
  +extern sa_rc_t sa_shutdown     (sa_t  *__sa, const char *__flags);
   
   /* socket input/output operations (stream communication) */
   extern sa_rc_t sa_read         (sa_t  *__sa, char       *__buf, size_t __buflen, size_t *__bufdone);
  @@ .

From ossp-cvs-owner@ossp.org  Tue Mar 29 21:31:50 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 0BB7F76312; Tue, 29 Mar 2005 21:31:50 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var/ var.c
Message-Id: <20050329193150.0BB7F76312@mail.ossp.org>
Date: Tue, 29 Mar 2005 21:31:50 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Mar-2005 21:31:49
  Branch: HEAD                             Handle: 2005032920314900

  Modified files:
    ossp-pkg/var            var.c

  Log:
    annotate with lint message

  Summary:
    Revision    Changes     Path
    1.107       +1  -0      ossp-pkg/var/var.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var.c
  ============================================================================
  $ cvs diff -u -r1.106 -r1.107 var.c
  --- ossp-pkg/var/var.c	20 Jan 2005 20:29:06 -0000	1.106
  +++ ossp-pkg/var/var.c	29 Mar 2005 19:31:49 -0000	1.107
  @@ -2540,6 +2540,7 @@
                               return VAR_RC(rc);
                           break;
                       }
  +                    /* FALLTHROUGH */
                   default:
                       if (!all) {
                           *dst++ = '\\';
  @@ .

From ossp-cvs-owner@ossp.org  Tue Mar 29 21:32:44 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id BB36176312; Tue, 29 Mar 2005 21:32:44 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ui64/ ui64.c
Message-Id: <20050329193244.BB36176312@mail.ossp.org>
Date: Tue, 29 Mar 2005 21:32:44 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Mar-2005 21:32:44
  Branch: HEAD                             Handle: 2005032920324400

  Modified files:
    ossp-pkg/ui64           ui64.c

  Log:
    merge in changes from OSSP uuid

  Summary:
    Revision    Changes     Path
    1.9         +15 -11     ossp-pkg/ui64/ui64.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ui64/ui64.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 ui64.c
  --- ossp-pkg/ui64/ui64.c	13 Jan 2005 08:42:34 -0000	1.8
  +++ ossp-pkg/ui64/ui64.c	29 Mar 2005 19:32:44 -0000	1.9
  @@ -38,10 +38,12 @@
   
   /* fill an ui64_t with a sequence of a particular digit */
   #define ui64_fill(__x, __n) \
  +    /*lint -save -e717*/ \
       do { int __i; \
         for (__i = 0; __i < UI64_DIGITS; __i++) \
             (__x).x[__i] = (__n); \
  -    } while(0)
  +    } while (0) \
  +    /*lint -restore*/
   
   /* the value zero */
   ui64_t ui64_zero(void)
  @@ -85,8 +87,10 @@
   
       n = 0;
       i = (int)sizeof(n);
  +    /*lint -save -e774*/
       if (i > UI64_DIGITS)
           i = UI64_DIGITS;
  +    /*lint -restore*/
       while (--i >= 0) {
           n = (n * UI64_BASE) + x.x[i];
       }
  @@ -144,19 +148,19 @@
           return NULL;
       n = ui64_len(x);
       i = 0;
  -	do {
  -		x = ui64_divn(x, base, &r);
  -		str[i++] = map[r];
  -		while (n > 1 && x.x[n-1] == 0)
  -			n--;
  -	} while (i < ((int)len-1) && (n > 1 || x.x[0] != 0));
  -	str[i] = '\0';
  +    do {
  +        x = ui64_divn(x, base, &r);
  +        str[i++] = map[r];
  +        while (n > 1 && x.x[n-1] == 0)
  +            n--;
  +    } while (i < ((int)len-1) && (n > 1 || x.x[0] != 0));
  +    str[i] = '\0';
       for (j = 0; j < --i; j++) {
           c = str[j];
           str[j] = str[i];
           str[i] = c;
       }
  -	return str;
  +    return str;
   }
   
   /* addition of two ui64_t */
  @@ -469,7 +473,7 @@
   {
       UIXX_T(UI64_DIGITS+UI64_DIGITS) zx;
       ui64_t z;
  -	int i;
  +    int i;
       int carry;
   
       if (s <= 0) {
  @@ -517,7 +521,7 @@
   {
       UIXX_T(UI64_DIGITS+UI64_DIGITS) zx;
       ui64_t z;
  -	int i;
  +    int i;
       int carry;
   
       if (s <= 0) {
  @@ .

From ossp-cvs-owner@ossp.org  Wed Mar 30 21:22:50 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 9F8B976338; Wed, 30 Mar 2005 21:22:50 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/xds/ xds.h.in
Message-Id: <20050330192250.9F8B976338@mail.ossp.org>
Date: Wed, 30 Mar 2005 21:22:50 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Mar-2005 21:22:50
  Branch: HEAD                             Handle: 2005033020225000

  Modified files:
    ossp-pkg/xds            xds.h.in

  Log:
    follow FlexeLint suggestion and surround parameter usage in macro with
    parenthesis

  Summary:
    Revision    Changes     Path
    1.24        +4  -4      ossp-pkg/xds/xds.h.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds.h.in
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 xds.h.in
  --- ossp-pkg/xds/xds.h.in	12 Sep 2004 17:32:14 -0000	1.23
  +++ ossp-pkg/xds/xds.h.in	30 Mar 2005 19:22:50 -0000	1.24
  @@ -102,8 +102,8 @@
           xds_check_parameter(buffer_size != 0); \
           xds_check_parameter(used_buffer_size != NULL && *used_buffer_size == 0); \
           xds_check_parameter(args != NULL); \
  -        *used_buffer_size = size; \
  -        if (buffer_size < size) \
  +        *used_buffer_size = (size); \
  +        if (buffer_size < (size)) \
               return XDS_ERR_OVERFLOW; \
       } while (XDS_FALSE)
   
  @@ -114,8 +114,8 @@
           xds_check_parameter(buffer_size != 0); \
           xds_check_parameter(used_buffer_size != NULL && *used_buffer_size == 0); \
           xds_check_parameter(args != NULL); \
  -        *used_buffer_size = size; \
  -        if (buffer_size < size) \
  +        *used_buffer_size = (size); \
  +        if (buffer_size < (size)) \
               return XDS_ERR_UNDERFLOW; \
       } while (XDS_FALSE)
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Apr  5 14:14:35 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id E25CF7630D; Tue,  5 Apr 2005 14:14:34 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/due/.due/ due.term.sh
Message-Id: <20050405121434.E25CF7630D@mail.ossp.org>
Date: Tue,  5 Apr 2005 14:14:34 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Apr-2005 14:14:34
  Branch: HEAD                             Handle: 2005040513143400

  Modified files:
    ossp-pkg/due/.due       due.term.sh

  Log:
    add some ideas from http://www.geocities.com/h2428/petar/

  Summary:
    Revision    Changes     Path
    1.7         +3  -0      ossp-pkg/due/.due/due.term.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.due/due.term.sh
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 due.term.sh
  --- ossp-pkg/due/.due/due.term.sh	24 Oct 2004 19:30:24 -0000	1.6
  +++ ossp-pkg/due/.due/due.term.sh	5 Apr 2005 12:14:34 -0000	1.7
  @@ -62,12 +62,15 @@
   alias sane='(xset r rate 400 40; stty sane; eval `resize`) >/dev/null 2>&1 || true'
   
   #   adjust shell history settings
  +PROMPT_COMMAND='builtin history -a'
   shopt -s histappend
   shopt -s cmdhist
   HISTSIZE=9000
   HISTFILESIZE=9000
   HISTIGNORE="&"
   HISTTIMEFORMAT='%Y-%m-%d %H:%M:%S  '
  +bind '"\e[A"':history-search-backward
  +bind '"\e[B"':history-search-forward
   
   #   provide command for rotating a little propeller for
   #   keeping a remote connection busy and this way alive
  @@ .

From ossp-cvs-owner@ossp.org  Tue Apr  5 14:15:39 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id AFE317630D; Tue,  5 Apr 2005 14:15:39 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/due/ .bash.local.rse
Message-Id: <20050405121539.AFE317630D@mail.ossp.org>
Date: Tue,  5 Apr 2005 14:15:39 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Apr-2005 14:15:39
  Branch: HEAD                             Handle: 2005040513153900

  Modified files:
    ossp-pkg/due            .bash.local.rse

  Log:
    more from my own stuff

  Summary:
    Revision    Changes     Path
    1.3         +3  -0      ossp-pkg/due/.bash.local.rse
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.bash.local.rse
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 .bash.local.rse
  --- ossp-pkg/due/.bash.local.rse	22 Oct 2004 19:32:51 -0000	1.2
  +++ ossp-pkg/due/.bash.local.rse	5 Apr 2005 12:15:39 -0000	1.3
  @@ -39,3 +39,6 @@
       alias doch='root -l'
   fi
   
  +#   SLang default color settings
  +export COLORFGBG="default;default"
  +
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 22 17:47:10 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 047C376317; Fri, 22 Apr 2005 17:47:09 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ BRAINSTORM Makefile README ase.cgi ase.css a...
Message-Id: <20050422154709.047C376317@mail.ossp.org>
Date: Fri, 22 Apr 2005 17:47:09 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Apr-2005 17:47:09
  Branch: HEAD                             Handle: 2005042216470800

  Added files:
    ossp-pkg/ase            BRAINSTORM Makefile README ase.cgi ase.css
                            ase.html ase.img.bar16.png ase.img.logo.png ase.pl
                            ase.sql

  Log:
    genesis of OSSP ase

  Summary:
    Revision    Changes     Path
    1.1         +147 -0     ossp-pkg/ase/BRAINSTORM
    1.1         +6  -0      ossp-pkg/ase/Makefile
    1.1         +46 -0      ossp-pkg/ase/README
    1.1         +1396 -0    ossp-pkg/ase/ase.cgi
    1.1         +239 -0     ossp-pkg/ase/ase.css
    1.1         +23 -0      ossp-pkg/ase/ase.html
    1.1         BLOB        ossp-pkg/ase/ase.img.bar16.png
    1.1         BLOB        ossp-pkg/ase/ase.img.logo.png
    1.1         +154 -0     ossp-pkg/ase/ase.pl
    1.1         +269 -0     ossp-pkg/ase/ase.sql
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/BRAINSTORM
  ============================================================================
  $ cvs diff -u -r0 -r1.1 BRAINSTORM
  --- /dev/null	2005-04-22 17:47:08 +0200
  +++ BRAINSTORM	2005-04-22 17:47:08 +0200
  @@ -0,0 +1,147 @@
  +
  +  OSSP ase -- Affiliation Service Environment
  +
  +  MEMBER
  +  ------
  +
  +  Person
  +    o Membership
  +x     + Membership Number          TEXT (UUID?, 2005020901)               UNIQUE KEY
  +x     + Membership Type            TEXT (natural|juristic)
  +x     + Membership Username        TEXT (rse)                             UNIQUE BUT NO KEY
  +x     + Membership Address         TEXT (rse@engelschall.com)             UNIQUE BUT NO KEY
  +x     + MembershipStart            DATE
  +x     + MembershipEnd              DATE
  +    o Name
  +x     - Title                      TEXT (Mr./Ms./Dr./Prof./Dipl.-Inf.)
  +x     + FirstName                  TEXT (Ralf)
  +x     - MiddleInitial              TEXT (S)
  +x     + LastName                   TEXT (Engelschall)
  +x     - Language                   +
  +x       ...Name                    TEXT (German) (English)
  +x       ...IsNative                BOOL (yes)    (no)
  +
  +x   o Personal Details 
  +x     + Birthday                   DATE (1972-11-17)
  +x     - Profession                 TEXT (Computer Scientist)
  +x     - Employer                   TEXT (Cable & Wireless)
  +x     - Biography                  TEXT (I'm....)
  +x     - Portrait                   BLOB (rse.png)
  +x     - Skill Matrix 
  +x       ...Skill1                  INT  (0-4)
  +x       ...Skill2                  INT  (0-4)
  +x       ...Skill3                  INT  (0-4)
  +x     - GeekCode                   TEXT
  +x     - OpenPKGSince               DATE (2000-11-15)
  +x   o Location
  +x     - Street                     TEXT (Silnerstr.)
  +x     - Housenumber                TEXT (28) 
  +x     - Zipcode/PLZ                TEXT (85221)
  +x     + City                       TEXT (Dachau)
  +x     + Country                    TEXT (DE)
  +x     + TimeZoneOffset             INT  ([+-]?(?:[0-9]|1[0-2]))
  +x     - PositionLongitude          INT  
  +x     - PositionLattitude          INT
  +x   o Internet
  +x     - WWW Homepage               TEXT (https?://.+)
  +x   o Bank Account
  +x     - Institute Name             TEXT (Deutsche Bank)
  +x     + Institute Number           TEXT (70070024)
  +x     + Account Number             TEXT (7700735)
  +x     + DirectDebiting             BOOL (yes)
  +x   o Access
  +      + Password
  +        PasswordPlainText          TEXT (plaintext?)
  +x       PasswordMD5                BLOB (no plaintext!)
  +        PasswordSHA1               BLOB (no plaintext!)
  +x       PasswordCrypt              BLOB (no plaintext!)
  +      - RecoveryPassword
  +        RecoveryPasswordMD5        BLOB (no plaintext!)
  +x     - SSH-2 Public Key           TEXT
  +x     - OpenPGP Public Key         TEXT
  +x     - X.509 (SSL, S/MIME) Cert   TEXT
  +x   o Properties
  +x     + Karma                      INT  (known/verified/member/active/board/president)
  +x     + FoundingMember             BOOL (yes)
  +x     + HonoraryMember             BOOL (no)
  +    o Statistics
  +      - Number of Commits          INT
  +      - Number of Emails           INT
  +      - Number of Logins           INT
  +x   o Enrollment
  +x     + EnrollmentStart            DATE
  +x     - RecoverySecretMD5          TEXT
  +x     - RecoverySecretExpiry       TIME
  +x   o Account
  +x     o Log..                      @@@
  +x       ..Date                     DATE
  +x       ..Notice                   TEXT
  +x       ..Privacy                  INT  (public=world/protected=foundation/private=board)
  +x     o Transactions
  +x       + date, purpose, amount
  +    o Privacy                      @@@
  +      + PrivacyField               TEXT (PasswordMD5)
  +      + PrivacyScope               INT  (public=world/protected=foundation/private=board)
  +
  +  Privacy
  +    + PrivacyField                 TEXT (PasswordMD5)
  +    + PrivacyScopeDefault          INT  (public=world/protected=foundation/private=board)
  +    + PrivacyScopeAccept           TEXT (public=world/protected=foundation/private=board)
  +  
  +  ENROLLMENT
  +  ----------
  +
  +  1. http://openpkg.net/enrollment
  +  2. Submit enrollment form with at least:
  +     Firstname
  +     Lastname
  +     City
  +     Country
  +     Email Address
  +     Password
  +  3. Create new MSDB entry with member=no + verified=no and 
  +     arbitrary verification MD5
  +  4. Sending out Email verification mail with URL
  +     http://openpkg.net/enrollment?verify=<membership-id>?md5=...
  +  5. Once verified, mark as verified=yes
  +     if not verified within 7 days, remove entry
  +  6. Allow to pay, enter access details, etc.
  +  7. Once account balance > membership-cost-for-three-months, member=yes 
  +  8. Once access details exist, generate account, etc.
  +
  +  1. Verify Email
  +  2. Approve Foundation Goals and Constitution
  +  3. Pay Money
  +
  +  WORKFLOW
  +  --------
  +
  +  Screen "Login":
  +    - TextField "Login:" (comment: "Username or Email-Address")
  +    - TextField "Password:" (protected view)
  +    - Button "Reset"   (color: grey)  -> Screen "Login"
  +    - Button "Login"   (color: green) -> Screen "Edit"
  +    - Button "Enroll"  (color: blue)  -> Screen "Enrollment"
  +    - Button "Recover" (color: red)   -> Screen "Recovery"
  +
  +  Screen "Edit":
  +    - Login via Password of Username or via "Username:Password" of Admin
  +
  +  Screen "Enrollment":
  + 
  +  Screen "Recovery":
  +    - TextField "Login:" (comment: "Username or Email-Address or Lastname")
  +    - Scode!!
  +
  +    (optionally skipped if Login was already filled out on Screen "Login")
  +    "You can recover your OpenPKG Foundation membership login by
  +    resetting your password. For this please enter your Username or
  +    Email-Address to indentify yourself. We then send you an Email
  +    containing an URL to a page which will allow you to reset your
  +    password. For security reasons the URL is valid for two hours only."
  +    - TextField "Login:" (comment: "Username or Email-Address")
  +    - Button "Recover" -> Mail to <EmailAddress> with scrambled URL
  +                          .../ase?query=<base64-encoding>
  +                          <base64-encoding> = Base64("username=<UserName>&<recoverysecretmd5>")
  +                          and text
  +  
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/Makefile
  ============================================================================
  $ cvs diff -u -r0 -r1.1 Makefile
  --- /dev/null	2005-04-22 17:47:08 +0200
  +++ Makefile	2005-04-22 17:47:08 +0200
  @@ -0,0 +1,6 @@
  +
  +ase.db: ase.sql
  +	rm -f ase.db
  +	sqlite3 ase.db <ase.sql
  +	chmod a+rw ase.db
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/README
  ============================================================================
  $ cvs diff -u -r0 -r1.1 README
  --- /dev/null	2005-04-22 17:47:08 +0200
  +++ README	2005-04-22 17:47:08 +0200
  @@ -0,0 +1,46 @@
  +   _        ___  ____ ____  ____  
  +  |_|_ _   / _ \/ ___/ ___||  _ \   __ _ ___  ___  
  +  _|_||_| | | | \___ \___ \| |_) | / _` / __|/ _ \ 
  + |_||_|_| | |_| |___) |__) |  __/ | (_| \__ \  __/ 
  +  |_|_|_|  \___/|____/____/|_|     \__,_|___/\___| 
  +
  +  OSSP ase - Affiliation Service Environment
  +  Version 0.1.0 (xx-xxx-2005)
  +
  +  ABSTRACT
  +
  +  OSSP ase is...
  +
  +  COPYRIGHT AND LICENSE
  +
  +  Copyright (c) 2005 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2005 The OSSP Project <http://www.ossp.org/>
  +
  +  This file is part of OSSP ase, a service environment for managing
  +  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  +
  +  Permission to use, copy, modify, and distribute this software for
  +  any purpose with or without fee is hereby granted, provided that
  +  the above copyright notice and this permission notice appear in all
  +  copies.
  +
  +  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +  SUCH DAMAGE.
  +
  +  HOME AND DOCUMENTATION
  +
  +  The documentation and latest release can be found on
  +
  +  o http://www.ossp.org/pkg/tool/ase/
  +  o  ftp://ftp.ossp.org/pkg/tool/ase/
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ase.cgi
  --- /dev/null	2005-04-22 17:47:08 +0200
  +++ ase.cgi	2005-04-22 17:47:08 +0200
  @@ -0,0 +1,1396 @@
  +#!/usr/opkg/bin/perl
  +##
  +##  OSSP ase -- Affiliation Service Environment
  +##  Copyright (c) 2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2005 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP ase, a service environment for managing
  +##  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  +##
  +##  This program is free software; you can redistribute it and/or modify
  +##  it under the terms of the GNU General Public License as published by
  +##  the Free Software Foundation; either version 2 of the License, or
  +##  (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this program; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  ase.cgi: CGI
  +##
  +
  +#   language requirements
  +require 5.008;
  +use strict;
  +use warnings;
  +
  +#   language extensions
  +use Socket;                             # from OpenPKG "perl"
  +use IO::All;                            # from OpenPKG "perl-sys"
  +use OSSP::uuid;                         # from OpenPKG "uuid" (with_perl=yes)
  +use GD;                                 # from OpenPKG "perl-gd"
  +use DBI;                                # from OpenPKG "perl-dbi"
  +use DBD::SQLite;                        # from OpenPKG "perl-dbi" (with_dbd_sqlite=yes)
  +use DB_File;                            # from OpenPKG "perl-db"
  +use Data::Dumper;                       # from OpenPKG "perl"
  +use Storable;                           # from OpenPKG "perl"
  +use String::Divert;                     # from OpenPKG "perl-util"
  +use Locale::Language;                   # from OpenPKG "perl-locale"
  +use Locale::Country;                    # from OpenPKG "perl-locale"
  +use Crypt::UnixCrypt;                   # from OpenPKG "perl-crypto"
  +use Crypt::PasswdMD5;                   # from OpenPKG "perl-crypto"
  +use Digest::MD5;                        # from OpenPKG "perl-crypto"
  +use Digest::SHA1;                       # from OpenPKG "perl-crypto"
  +use Mail::Sendmail;                     # from OpenPKG "perl-mail"
  +use HTML::Entities qw();                # from OpenPKG "perl-www"
  +use URI::Escape;                        # from OpenPKG "perl-www"
  +use CGI;                                # from OpenPKG "perl-www"
  +use CGI::Cookie;                        # from OpenPKG "perl-www"
  +use CGI::Application;                   # from OpenPKG "perl-www"
  +use CGI::Session;                       # from OpenPKG "perl-www"
  +use CGI::FormBuilder;                   # from OpenPKG "perl-www"
  +use CGI::GuruMeditation ("OSSP ase");   # from OpenPKG "perl-www"
  +
  +#   program configuration
  +my $my = {
  +    -prog_name => 'ase',
  +    -prog_vers => '0.0.1',
  +    -prog_date => '20-Feb-2005',
  +    -prog_desc => 'Affiliation Service Environment',
  +    -path_db_a => 'ase.db',
  +    -path_db_s => 'ase.sdb',
  +    -path_html => 'ase.html',
  +};
  +
  +##  _________________________________________________________________________
  +##
  +##  CGI APPLICATION FRAMEWORK
  +##  _________________________________________________________________________
  +##
  +
  +#   create a new CGI application object and run it
  +my $app = new MyApp;
  +$app->run();
  +exit(0);
  +
  +#   switch to the CGI application object
  +package MyApp;
  +use base 'CGI::Application';
  +use strict;
  +use warnings;
  +
  +#   application setup hook
  +sub setup {
  +    my ($self) = @_;
  +
  +    #   establish application configuration structure
  +    $self->param(-cfg => $my);
  +
  +    #   establish CGI interface object
  +    my $cgi = new CGI;
  +    $self->query($cgi);
  +    $self->param(-cgi => $cgi);
  +
  +    #   establish HTML output object
  +    my $html = new String::Divert;
  +    $html->folder('{#%s#}', '\{#([a-zA-Z_][a-zA-Z0-9_-]*)#\}');
  +    my $txt < IO::All::io($my->{-path_html})
  +        or die "unable to read HTML skeleton file \"".$my->{-path_html}."\"";
  +    $txt =~ s/\%HEAD\%/$html->folder("head")/se;
  +    $txt =~ s/\%BODY\%/$html->folder("body")/se;
  +    $html->append($txt);
  +    $html->divert("body");
  +    $html->overload(1);
  +    $self->param(-html => $html);
  +
  +    #   establish database object
  +    my $dbi = DBI->connect(
  +        "dbi:SQLite:dbname=".$my->{-path_db_a}, "", "",
  +        { RaiseError => 1, AutoCommit => 1 }
  +    );
  +    die "failed to connect to database \"".$my->{-path_db_a}."\""
  +        if (not defined($dbi));
  +    $self->param(-dbi => $dbi);
  +
  +    #   establish session object
  +    my $sid = ($cgi->cookie("sid") || undef);
  +    my $session = new CGI::Session(
  +        "driver:DB_File;serializer:Storable;id:UUID", $sid,
  +        { Directory => ".", FileName => $my->{-path_db_s} }
  +    );
  +    $session->expires("+1h");
  +    $self->param(-session => $session);
  +
  +    #   configure run-time modes
  +    my $modes = {
  +        #   global modes
  +        'error'              => { -login => 0, -method => \&error                     },
  +        'scode'              => { -login => 0, -method => \&mode_scode_render         },
  +
  +        #   login modes
  +        'login'              => { -login => 0, -method => \&mode_login_screen         },
  +        'login-action'       => { -login => 0, -method => \&mode_login_action         },
  +        'logout'             => { -login => 1, -method => \&mode_logout_screen        },
  +        'enrollment'         => { -login => 0, -method => \&mode_enrollment_screen    },
  +        'enrollment-action'  => { -login => 0, -method => \&mode_enrollment_action    },
  +        'activation'         => { -login => 0, -method => \&mode_activation_screen    },
  +        'recovery'           => { -login => 0, -method => \&mode_recovery_screen      },
  +        'recovery-action'    => { -login => 0, -method => \&mode_recovery_action      },
  +
  +        #   application modes
  +        'menu-overview'      => { -login => 1, -method => \&mode_menu_overview_screen },
  +        'menu-member'        => { -login => 1, -method => \&mode_menu_member_screen   },
  +        'menu-member-action' => { -login => 1, -method => \&mode_menu_member_action   },
  +        'menu-account'       => { -login => 1, -method => \&mode_menu_account_screen  },
  +        'menu-action'        => { -login => 1, -method => \&mode_menu_action_screen   },
  +        'menu-logout'        => { -login => 1, -method => \&mode_menu_logout_screen   },
  +    };
  +    $self->param(-modes => $modes);
  +    my %run_modes = ();
  +    foreach my $mode (keys(%{$modes})) {
  +        $run_modes{$mode} = $modes->{$mode}->{-method};
  +    }
  +    $self->run_modes(%run_modes);
  +    $self->start_mode('menu-overview');
  +    $self->error_mode('error');
  +    $self->mode_param(\&current_mode);
  +
  +    return;
  +}
  +
  +#   helper function for determining run-time mode
  +sub current_mode {
  +    my ($self) = @_;
  +    my $cgi     = $self->param(-cgi);
  +    my $session = $self->param(-session);
  +
  +    #   determine the current run-time mode
  +    my $modes = $self->param(-modes);
  +    my $mode  = ($cgi->url_param("mode") || $cgi->param("mode"));
  +
  +    #   check for an unknown or invalid mode
  +    if (   not defined($mode)
  +        or $mode eq ''
  +        or not defined($modes->{$mode})) {
  +        $mode = $self->start_mode();
  +    }
  +
  +    #   if mode is login and user is already
  +    #   logged in, enforce the regular start mode
  +    if (    $mode eq "login"
  +        and $session->param("login")) {
  +        $mode = $self->start_mode();
  +    }
  +
  +    #   if mode requires a login and the user is 
  +    #   still not logged in, enforce the login!
  +    if (    $modes->{$mode}->{-login}
  +        and not $session->param("login")) {
  +        $mode = "login";
  +    }
  +
  +    return $mode;
  +}
  +
  +#   application post-processing hook
  +sub cgiapp_postrun {
  +    my ($self, $htmlref) = @_;
  +
  +    #   replace output with expanded HTML document if
  +    #   no (non-HTML) output was generated instead.
  +    if (not defined(${$htmlref}) or ${$htmlref} eq '') {
  +        my $html = $self->param(-html);
  +        $html->overload(0);
  +        $html->undivert(0);
  +        ${$htmlref} = $html->string();
  +    }
  +
  +    #   set the session cookie
  +    my $session = $self->param(-session);
  +    my $cookie = new CGI::Cookie(
  +        -name    => 'sid',
  +        -value   => $session->id,
  +        -expires => '+1h'
  +    );
  +    $self->header_add(-cookie => [$cookie]);
  +
  +    #   switch to unbuffered output
  +    $|++;
  +
  +    return;
  +}
  +
  +#   application shutdown hook
  +sub teardown {
  +    my ($self) = @_;
  +
  +    #   close session
  +    my $session = $self->param(-session);
  +    $session->close();
  +
  +    #   disconnect from database
  +    my $dbi = $self->param(-dbi);
  +    $dbi->disconnect();
  +
  +    return;
  +}
  +
  +#   run-mode switching
  +sub switchto ($$;@) {
  +    my ($self, $mode, @args) = @_;
  +    my $modes = $self->param(-modes);
  +    if (not defined($modes->{$mode})) {
  +        die "cannot switch to unknown mode \"$mode\"";
  +    }
  +    my $method = $modes->{$mode}->{-method};
  +    return $self->$method($self, @args);
  +}
  +
  +#   application error handling hook
  +sub error {
  +    my ($self, $error) = @_;
  +    my $html = "ERROR:<br>".HTML::Entities::encode_entities($error)."\n";
  +    return $html;
  +}
  +
  +#   helper function for redirecting to a new URL 
  +sub redirect {
  +    my ($self, $url) = @_;
  +
  +    #   establish redirection HTTP headers
  +    $self->header_type('redirect');
  +    $self->header_props(-url => $url);
  +
  +    #   establish fallback redirection HTML page
  +    my $html =
  +        "You are redirected to the following URL:<br>" .
  +        "<a href=\"$url\">".HTML::Entities::encode_entities($url)."</a>" .
  +        "If nothing happens within 10 seconds," .
  +        "please click the above URL manually.\n";
  +
  +    return $html;
  +}
  +
  +#   helper function for determining self-referencing URL
  +sub url {
  +    my ($self, %attr) = @_;
  +    my $url = $self->param(-cgi)->url(-relative => 1);
  +    my $first = 1;
  +    foreach my $key (keys(%attr)) {
  +        my ($var, $val) = ($key, $attr{$key});
  +        $var =~ s/^-//s;
  +        $var =~ s/-/_/sg;
  +        $url .= ($first ? "?" : ";") . 
  +            URI::Escape::uri_escape($var) . "=" .
  +            URI::Escape::uri_escape($val);
  +        $first = 0;
  +    }
  +    return $url;
  +}
  +
  +#   helper function for generating random string
  +sub makerandom {
  +    my ($self, $n, $set) = @_;
  +    my $rnd = '';
  +    $set =~ s/(.)-(.)/join('', $1..$2)/sge;
  +    for (my $i = 0; $i < $n; $i++) {
  +        $rnd .= substr($set, int(rand(length($set))), 1);
  +    }
  +    return $rnd;
  +}
  +
  +#   helper function for determining remote hostname
  +sub remotehostname {
  +    my ($self) = @_;
  +    my $cgi = $self->param(-cgi);
  +    my $hostname = $cgi->remote_host();
  +    if ($hostname =~ m/^(\d+\.){3}\d+$/s) {
  +        my $iaddr = Socket::inet_aton($hostname);
  +        my $name = gethostbyaddr($iaddr, &Socket::AF_INET); 
  +        $hostname = $name if (defined($name) and $name ne '');
  +    }
  +    if ($hostname !~ m/^(?:[^.]+\.)+[^.]+$/s) {
  +        $hostname = "example.com";
  +    }
  +    return $hostname;
  +}
  +
  +#   helper function for generating encrypted passwords
  +sub makepasswords {
  +    my ($self, $plaintext) = @_;
  +    my $pw = {};
  +
  +    #   Plain Text
  +    $pw->{-plaintext} = $plaintext;
  +
  +    #   generate random salt
  +    my $salt = $self->makerandom(8, "./0-9A-Za-z");
  +
  +    #   Unix crypt(3) (both salted DES and MD5)
  +    $pw->{-cryptdes} = Crypt::UnixCrypt::crypt($pw->{-plaintext}, substr($salt, 0, 2));
  +    $pw->{-cryptmd5} = Crypt::PasswdMD5::unix_md5_crypt($pw->{-plaintext}, $salt);
  +
  +    #   Plain MD5
  +    my $md5 = new Digest::MD5;
  +    $md5->add($pw->{-plaintext});
  +    $pw->{-md5} = $md5->hexdigest;
  +    undef $md5;
  +
  +    #   Plain SHA-1
  +    my $sha1 = new Digest::SHA1;
  +    $sha1->add($pw->{-plaintext});
  +    $pw->{-sha1} = $sha1->hexdigest;
  +    undef $sha1;
  +
  +    return $pw;
  +}
  +
  +#   helper function for current time in YYYYMMDDHHMMSS format
  +sub datetime {
  +    my ($self, $t) = @_;
  +    $t = time() if (not defined($t));
  +    my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday) = gmtime($t);
  +    return sprintf("%04d%02d%02d%02d%02d%02d", $year+1900, $mon+1, $mday, $hour, $min, $sec);
  +}
  +
  +#   helper function for YYYYMMDDHHMMSS to more human format conversion
  +sub datetime2str {
  +    my ($self, $t) = @_;
  +    if ($t =~ m/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/) {
  +        $t = sprintf("%04d-%02d-%02d %02d:%02d:%02d", $1, $2, $3, $4, $5, $6); 
  +    }
  +    return $t;
  +}
  +
  +#   helper function for writing a logbook entry
  +sub logbook ($$;@) {
  +    my ($self, $fmt, @args) = @_;
  +    my $dbi     = $self->param(-dbi);
  +    my $session = $self->param(-session);
  +    
  +    my $uuid = ($session->param("login") || undef);
  +    my $date = $self->datetime();
  +    my $text = (defined($args[0]) ? sprintf($fmt, @args) : $fmt);
  +
  +    my $sth = $dbi->prepare(
  +        "INSERT INTO ase_logbook (lg_uuid, lg_date, lg_text) VALUES (?, ?, ?);"
  +    ) or die $dbi->errstr();
  +    $sth->execute($uuid, $date, $text) or die $dbi->errstr();
  +    return;
  +}
  +
  +##  _________________________________________________________________________
  +##
  +##  SECURITY CODE HANDLING
  +##  _________________________________________________________________________
  +##
  +
  +#   helper function for converting hex "RRGGBB" into decimal (R,G,B)
  +sub hex2rgb {
  +    my ($hex) = @_;
  +    return map { hex($_) }
  +        ($hex =~ m/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/);
  +}
  +
  +#   Security Code: creation
  +sub scode_create {
  +    my ($self) = @_;
  +    my $dbi = $self->param(-dbi);
  +
  +    #   generate new UUID
  +    my $uuid = new OSSP::uuid;
  +    $uuid->make("v1");
  +    my $scode_uuid = $uuid->export("str");
  +    undef $uuid;
  +
  +    #   generate new Security Code Number
  +    #   (notice: "0" and "O" are too hard to distinguish, so left out)
  +    my $scode_num = $self->makerandom(6, "1-9A-Z");
  +
  +    #   determine expiry time
  +    my $scode_expiry = time() + 4*60*60;
  +
  +    #   on-the-fly remove expired codes
  +    my $now = time();
  +    $dbi->do(
  +        "DELETE FROM ase_scode WHERE sc_expiry < $now;"
  +    ) or die $dbi->errmsg;;
  +
  +    #   store Security Code in database
  +    $dbi->do(
  +        "INSERT INTO ase_scode (sc_uuid, sc_number, sc_expiry)" .
  +        " VALUES ('$scode_uuid', '$scode_num', $scode_expiry);"
  +    ) or die $dbi->errmsg;;
  +    
  +    return $scode_uuid;
  +}
  +
  +#   Security Code: image rendering
  +sub scode_render {
  +    my ($self, $scode_uuid) = @_;
  +    my $dbi = $self->param(-dbi);
  +
  +    #   determine Security Code Number
  +    my $rec = $dbi->selectrow_hashref(
  +        "SELECT sc_number FROM ase_scode" .
  +        " WHERE sc_uuid = '$scode_uuid';"
  +    ) or die $dbi->errstr();
  +    my $scode_num = $rec->{'sc_number'};
  +
  +    #   render Security Code Number as a PNG image
  +    my $im_length = (length($scode_num)+1)*10;
  +    my $im = new GD::Image($im_length, 25);
  +    my $c_bg  = $im->colorAllocate(&hex2rgb("ffffff"));
  +    my $c_bd1 = $im->colorAllocate(&hex2rgb("999999"));
  +    my $c_bd2 = $im->colorAllocate(&hex2rgb("cccccc"));
  +    my $c_ln  = $im->colorAllocate(&hex2rgb("dddddd"));
  +    my $c_tx  = $im->colorAllocate(&hex2rgb("888888"));
  +    $im->fill(0, 0, $c_bg);
  +    for (my $i = 5; $i < $im_length; $i += 5) {
  +        $im->line($i, 0, $i, 24, $c_ln);
  +    }
  +    for (my $i = 5; $i < 25; $i += 5) {
  +        $im->line(0, $i, $im_length-1, $i, $c_ln);
  +    }
  +    $im->line(0, 0, $im_length-1, 0, $c_bd1);
  +    $im->line(0, 0, 0, 24, $c_bd1);
  +    $im->line($im_length-1, 0, $im_length-1, 24, $c_bd2);
  +    $im->line(0, 24, $im_length-1, 24, $c_bd2);
  +    $im->string(GD::gdGiantFont(), 8, 5, $scode_num, $c_tx);
  +    my $scode_img = $im->png;
  +
  +    return $scode_img;
  +}
  +
  +#   Security Code: verification
  +sub scode_verify {
  +    my ($self, $scode_uuid, $scode_num) = @_;
  +    my $dbi = $self->param(-dbi);
  +
  +    #   determine Security Code
  +    my $rec = $dbi->selectrow_hashref(
  +        "SELECT sc_number, sc_expiry FROM ase_scode" .
  +        " WHERE sc_uuid = '$scode_uuid'"
  +    ) or die $dbi->errstr();
  +    my $scode_number = $rec->{'sc_number'};
  +    my $scode_expiry = $rec->{'sc_expiry'};
  +
  +    #   verify Security Code
  +    my $ok = ($scode_num eq $scode_number and time() < $scode_expiry);
  +
  +    return $ok;
  +}
  +
  +##  _________________________________________________________________________
  +##
  +##  CGI APPLICATION RUN-TIME MODES
  +##  _________________________________________________________________________
  +##
  +
  +#   run-time mode screen rendering: "login"
  +sub mode_login_screen {
  +    my $self = shift;
  +    my $cgi  = $self->param(-cgi);
  +    my $html = $self->param(-html);
  +
  +    #   generate the outer canvas
  +    $html .= "<div class=\"boxed\">\n";
  +    $html .= "<span class=\"title\">Login</span>\n";
  +    $html .= $cgi->start_form(
  +        -method => 'POST',
  +        -action => $self->url(),
  +        -class  => 'login',
  +    ) . "\n";
  +    $html .= $cgi->hidden(
  +        -name     => 'mode',
  +        -value    => 'login-action',
  +        -override => 1
  +    ) . "\n";
  +    $html->fold("canvas");
  +    $html .= $cgi->end_form() . "\n";
  +    $html .= "</div>\n";
  +    $html >> "canvas";
  +
  +    #   generate header text
  +    $html .=
  +        "Welcome to the OpenPKG Foundation Affiliation Service Environment!<p>\n" .
  +        "Please login with either your Username (members) or\n" .
  +        "with your Email address (fellows).\n" .
  +        "To join the OpenPKG Foundation as a fellow or even member,\n" .
  +        "use \"Account Enrollment\", please.\n".
  +        "If you forgot your OpenPKG Foundation login and/or password,\n" .
  +        "use \"Account Recovery\", please.\n";
  +
  +    #   generate the inner canvas
  +    $html .=
  +        "<p>\n" .
  +        "<table>\n" .
  +        "  <tr>\n" .
  +        "    <td><span class=\"label\">Login:</span></td>\n" .
  +        "    <td>"; $html->fold("field-login"); $html .= "</td>\n" .
  +        "    <td>"; $html->fold("button-enrollment"); $html .= "</td>\n" .
  +        "  </tr>\n" .
  +        "  <tr>\n" .
  +        "    <td><span class=\"label\">Password:</span></td>\n" .
  +        "    <td>"; $html->fold("field-password"); $html .= "</td>\n" .
  +        "    <td>"; $html->fold("button-recovery"); $html .= "</td>\n" .
  +        "  </tr>\n" .
  +        "  <tr>\n" .
  +        "    <td>&nbsp;</td>\n" .
  +        "    <td>"; $html->fold("button-login"); $html .= "</td>\n" .
  +        "    <td>&nbsp;</td>\n" .
  +        "  </tr>\n" .
  +        "  <tr>\n" .
  +        "    <td>&nbsp;</td>\n" .
  +        "    <td colspan=2>"; $html->fold("error"); $html .= "</td>\n" .
  +        "  </tr>\n" .
  +        "</table>\n";
  +
  +    #   optionally print screen-global errror
  +    if (defined(my $error = $cgi->param("login.error"))) {
  +        $html >> "error";
  +        $html .= "<span class=\"error\">Login Error: $error</span>\n";
  +        $html << 1;
  +    }
  +
  +    #   generate the input fields
  +    $html >> "field-login";
  +    $html .= $cgi->textfield(
  +        -id      => 'field_login',
  +        -class   => 'field',
  +        -name    => 'login',
  +        -default => '',
  +        -size    => 30,
  +    );
  +    $html << 1;
  +    $html >> "field-password";
  +    $html .= $cgi->password_field(
  +        -class   => 'field',
  +        -id      => 'field_password',
  +        -name    => 'password',
  +        -default => '',
  +        -size    => 30,
  +    );
  +    $html << 1;
  +    $html >> "button-enrollment";
  +    $html .= $cgi->submit(
  +        -class   => 'button',
  +        -id      => 'button_enrollment',
  +        -name    => 'button.enrollment',
  +        -value   => 'Account Enrollment',
  +    );
  +    $html << 1;
  +    $html >> "button-recovery";
  +    $html .= $cgi->submit(
  +        -class   => 'button',
  +        -id      => 'button_recovery',
  +        -name    => 'button.recovery',
  +        -value   => 'Account Recovery',
  +    );
  +    $html << 1;
  +    $html >> "button-login";
  +    $html .= $cgi->submit(
  +        -class   => 'button',
  +        -id      => 'button_login',
  +        -name    => 'button.login',
  +        -value   => 'Login',
  +    );
  +    $html << 1;
  +
  +    #   undivert
  +    $html << 0;
  +
  +    return;
  +}
  +
  +#   run-time mode screen action: "login"
  +sub mode_login_action {
  +    my $self    = shift;
  +    my $cgi     = $self->param(-cgi);
  +    my $dbi     = $self->param(-dbi);
  +    my $session = $self->param(-session);
  +
  +    if (defined($cgi->param("button.enrollment"))) {
  +        #   go to enrollment screen
  +        return $self->switchto("enrollment");
  +    }
  +    elsif (defined($cgi->param("button.recovery"))) {
  +        #   go to recovery screen
  +        return $self->switchto("recovery");
  +    }
  +    elsif (not defined($cgi->param("button.login"))) {
  +        #   unknown action
  +        die "unable to determine action";
  +    }
  +
  +    #   determine login parameters
  +    my $login    = $cgi->param("login");
  +    my $password = $cgi->param("password");
  +
  +    #   lookup member in database 
  +    if ($login eq '') {
  +        $cgi->param("login.error", "Empty login");
  +        return $self->switchto("login");
  +    }
  +    my $sth = $dbi->prepare(
  +        "SELECT * FROM ase_member" .
  +        " WHERE me_uuid = ? OR me_username = ? OR me_address = ?;"
  +    ) or die $dbi->errstr();
  +    $sth->execute($login, $login, $login) or die $dbi->errstr();
  +    my $rec = $sth->fetchrow_hashref();
  +    if (not defined($rec)) {
  +        $cgi->param("login.error", "Unknown login");
  +        return $self->switchto("login");
  +    }
  +
  +    #   detect special case of administrator login
  +    my $admin_ok = 0;
  +    if ($password =~ m|^([a-z][a-z0-9]+):(.+)$|s) {
  +        my ($admin_login, $admin_password) = ($1, $2); 
  +        my $sth2 = $dbi->prepare(
  +            "SELECT * FROM ase_member" .
  +            " WHERE     me_username = ?" .
  +            "       AND (   me_membership_status = 5" .
  +            "            OR me_membership_prop LIKE '\%A\%');"
  +        ) or die $dbi->errstr();
  +        $sth2->execute($admin_login) or die $dbi->errstr();
  +        my $rec2 = $sth2->fetchrow_hashref();
  +        if (defined($rec2)) {
  +            my $pw = $self->makepasswords($admin_password);
  +            if ($pw->{-sha1} ne $rec2->{'me_access_pw_sha1'}) {
  +                $admin_ok = 1;
  +                $session->param("admin", $rec2->{"me_uuid"});
  +            }
  +        }
  +    }
  +    
  +    #   verify password
  +    if (not $admin_ok) {
  +        if ($password eq '') {
  +            $cgi->param("login.error", "Empty password");
  +            return $self->switchto("login");
  +        }
  +        my $pw = $self->makepasswords($password);
  +        if ($pw->{-sha1} ne $rec->{'me_access_pw_sha1'}) {
  +            $cgi->param("login.error", "Incorrect Password");
  +            return $self->switchto("login");
  +        }
  +    }
  +
  +    #   login the user by remembering his UUID in the session
  +    $session->param("login", $rec->{'me_uuid'});
  +    $self->logbook("login by ".$rec->{'me_address'}); 
  +
  +    #   go to menu
  +    return $self->switchto("menu-overview");
  +}
  +
  +#   application run-time mode processing: "logout"
  +sub mode_logout_screen {
  +    my $self    = shift;
  +    my $cgi     = $self->param(-cgi);
  +    my $html    = $self->param(-html);
  +    my $session = $self->param(-session);
  +
  +    #   remove the session from the database
  +    $session->delete();
  +
  +    #   generate canvas
  +    $html .= "<div class=\"boxed\">\n";
  +    $html .= "<span class=\"title\">Logout</span>\n";
  +    $html->fold("canvas");
  +    $html .= "</div>\n";
  +    $html >> "canvas";
  +
  +    #   generate description
  +    $html .=
  +        "Thank you for visiting the OpenPKG Foundation e.V. Affiliation Service Environment.<br>\n" .
  +        "Your session was terminated and you are now logged out.<br>\n" .
  +        "Please visit us again soon.";
  +
  +    #   redirect to Login screen
  +    $html .=
  +        "<p>\n" .
  +        "You should be redirected to the Login screen in 10 seconds automatically.\n" .
  +        "<meta http-equiv=\"refresh\" content=\"10;url=".$self->url(-mode => "login")."\">\n" .
  +        "<p>\n" .
  +        "<a class=\"button\" href=\"".$self->url(-mode => "login")."\">" .
  +        "Go to <b>Login</b> screen" .
  +        "</a>\n";
  +
  +    return;
  +}
  +
  +#   application run-time mode processing: "edit"
  +sub mode_enrollment_screen {
  +    my $self = shift;
  +    my $cgi  = $self->param(-cgi);
  +    my $html = $self->param(-html);
  +
  +    #   generate the outer canvas
  +    $html .= "<div class=\"boxed\">\n";
  +    $html .= "<span class=\"title\">Account Enrollment</span>\n";
  +    $html .=
  +        "<ul class=\"breadcrumb\">\n" .
  +        "  <li><a href=\"".$self->url(-mode => "login")."\">Login &rarr;</a></li>\n" .
  +        "  <li>Enrollment:</li>\n" .
  +        "</ul>\n";
  +    $html .= $cgi->start_form(
  +        -method => 'POST',
  +        -action => $self->url(),
  +        -class  => 'enrollment',
  +    ) . "\n";
  +    $html .= $cgi->hidden(
  +        -name     => 'mode',
  +        -default  => 'enrollment-action',
  +        -override => 1
  +    ) . "\n";
  +    $html->fold("canvas");
  +    $html .= $cgi->end_form() . "\n";
  +    $html .= "</div>\n";
  +    $html >> "canvas";
  +
  +    #   generate step-by-step list
  +    $html .=
  +        "<ol class=steps>\n" .
  +        "  <li class=this>Account Specification</li>\n" .
  +        "  <li>Account Verification</li>\n" .
  +        "  <li>Account Activation</li>\n" .
  +        "</ol>\n";
  +
  +    #   generate description
  +    $html .=
  +        "<p>\n" .
  +        "Enroll here and join the OpenPKG Foundation e.V.!<p>\n" .
  +        "The enrollment as a <i>Fellow</i> of the OpenPKG Foundation e.V. is <i>free of charge</i>.<br>\n" .
  +        "Later you can even upgrade your status to a full <i>Member</i>\n" .
  +        "of the OpenPKG Foundation, too.<p>\n" .
  +        "For successfully enrolling you have to specify a valid\n" .
  +        "\"Email Address\" and a \"Password\". Additionally, you have to\n" .
  +        "repeat the \"Security Code\" for proving you are human.\n" .
  +        "After pressing \"Enroll\"\n" .
  +        "you will receive a verification Email under the specified\n" .
  +        "address containing an activation URL. Once you clicked on\n" .
  +        "this URL, you are successfully enrolled.\n";
  +
  +    #   determine some information
  +    my $pw = $self->makerandom(8, "A-Za-z0-9");
  +    my $remote = $self->remotehostname();
  +
  +    #   generate the inner canvas
  +    $html .=
  +        "<p>\n" .
  +        "<table class=\"F\">\n" .
  +        "  <tr>\n" .
  +        "    <td class=\"L\"><span class=\"label\">Email Address:</span></td>\n" .
  +        "    <td class=\"I\">"; $html->fold("field-address"); $html .= "</td>\n" .
  +        "  </tr>\n" .
  +        "  <tr>\n" .
  +        "    <td class=\"L\"><span class=\"label\">Password:</span></td>\n" .
  +        "    <td class=\"I\">"; $html->fold("field-password"); $html .= "</td>\n" .
  +        "  </tr>\n" .
  +        "  <tr>\n" .
  +        "    <td class=\"L\"><span class=\"label\">Security Code:</span></td>\n" .
  +        "    <td class=\"I\">"; $html->fold("field-scode"); $html .= "</td>\n" .
  +        "  </tr>\n" .
  +        "  <tr>\n" .
  +        "    <td>&nbsp;</td>\n" .
  +        "    <td>"; $html->fold("button-enroll"); $html .= "</td>\n" .
  +        "  </tr>\n" .
  +        "</table>\n";
  +
  +    #   generate a security code
  +    my $scode_uuid = ($cgi->param("scode.uuid") || $self->scode_create());
  +    $html .= $cgi->hidden(
  +        -name     => 'scode.uuid',
  +        -value    => $scode_uuid,
  +        -override => 1
  +    ) . "\n";
  +
  +    #   generate the input fields
  +    $html >> "field-address";
  +    $html .= $cgi->textfield(
  +        -id        => 'field_address',
  +        -class     => 'field',
  +        -name      => 'address',
  +        -default   => '',
  +        -size      => 40,
  +        -maxlength => 80,
  +    ) . "<br>";
  +    $html .= "<span class=\"annotation\">(<i>name</i>\@<i>domain</i>, e.g. \"foo\@$remote\")</span>\n";
  +    if (defined(my $error = $cgi->param("address.error"))) {
  +        $html .= "<br><span class=\"error\">$error</span>\n";
  +    }
  +    $html << 1;
  +    $html >> "field-password";
  +    $html .= $cgi->password_field(
  +        -id        => 'field_password',
  +        -class     => 'field',
  +        -name      => 'password',
  +        -default   => '',
  +        -size      => 22,
  +        -maxlength => 20,
  +    ) . "<br>";
  +    $html .= "<span class=\"annotation\">(up to 20 characters, e.g. \"$pw\")</span>\n";
  +    if (defined(my $error = $cgi->param("password.error"))) {
  +        $html .= "<br><span class=\"error\">$error</span>\n";
  +    }
  +    $html << 1;
  +    $html >> "field-scode";
  +    $html .= "<img align=top src=\"".$self->url(-mode => 'scode', -uuid => $scode_uuid)."\"> :\n";
  +    $html .= $cgi->textfield(
  +        -id        => 'field_scode',
  +        -class     => 'field',
  +        -name      => 'scode',
  +        -default   => '',
  +        -size      => 7,
  +        -maxlength => 6,
  +    ) . "<br>";
  +    $html .= "<span class=\"annotation\">(repeat the shown 6 character security code)</span>\n";
  +    if (defined(my $error = $cgi->param("scode.error"))) {
  +        $html .= "<br><span class=\"error\">$error</span>\n";
  +    }
  +    $html << 1;
  +    $html >> "button-enroll";
  +    $html .= $cgi->submit(
  +        -class   => 'button',
  +        -id      => 'button_cancel',
  +        -name    => 'button.cancel',
  +        -value   => 'Cancel',
  +    );
  +    $html .= $cgi->submit(
  +        -class   => 'button',
  +        -id      => 'button_enroll',
  +        -name    => 'button.enroll',
  +        -value   => 'Enroll',
  +    );
  +    $html << 1;
  +
  +    return;
  +}
  +
  +#   run-time mode screen action: "enrollment"
  +sub mode_enrollment_action {
  +    my $self = shift;
  +    my $cgi  = $self->param(-cgi);
  +    my $html = $self->param(-html);
  +    my $dbi  = $self->param(-dbi);
  +
  +    #   on-the-fly remove expired entries from database
  +    $dbi->do(
  +        "DELETE FROM ase_enrollment" .
  +        " WHERE en_expiry < ".$self->datetime().";"
  +    ) or die $dbi->errmsg;;
  +
  +    #   make sure we are called correctly
  +    if (defined($cgi->param("button.cancel"))) {
  +        return $self->switchto("login");
  +    }
  +    elsif (not defined($cgi->param("button.enroll"))) {
  +        die "unable to determine action";
  +    }
  +
  +    #   determine form parameters
  +    my $address    = $cgi->param("address");
  +    my $password   = $cgi->param("password");
  +    my $scode_num  = $cgi->param("scode");
  +    my $scode_uuid = $cgi->param("scode.uuid");
  +
  +    #   verify form parameters
  +    my $error = 0;
  +    if ($address !~ m/^[^@]+\@(?:[^.]+\.)+[^.]+$/) {
  +        $cgi->param('address.error', 'Invalid Email address: not <i>name</i>@<i>domain</i>');
  +        $error = 1;
  +    }
  +    if ($password !~ m/^[a-zA-Z0-9]{6,}$/) {
  +        $cgi->param('password.error', 'Invalid Password: at least 6 characters required');
  +        $error = 1;
  +    }
  +    if (not $self->scode_verify($scode_uuid, $scode_num)) {
  +        $cgi->param('scode.error', 'Invalid Security Code');
  +        $error = 1;
  +    }
  +
  +    #   make sure the Email address is still not used
  +    if (not defined($cgi->param('address.error'))) {
  +        my $sth = $dbi->prepare(
  +            "SELECT * FROM ase_enrollment WHERE en_address = ?;"
  +        ) or die $dbi->errstr();
  +        $sth->execute($address) or die $dbi->errstr();
  +        my $rec = $sth->fetchrow_hashref();
  +        if (defined($rec)) {
  +            $cgi->param('address.error', "Email address already in use for enrolling since " .
  +                $self->datetime2str($rec->{'en_start'}));
  +            $error = 1;
  +        }
  +        $sth = $dbi->prepare(
  +            "SELECT * FROM ase_member WHERE me_address = ?;"
  +        ) or die $dbi->errstr();
  +        $sth->execute($address) or die $dbi->errstr();
  +        my $rec = $sth->fetchrow_hashref();
  +        if (defined($rec)) {
  +            $cgi->param('address.error', "Email address already in use since " .
  +                $self->datetime2str($rec->{'me_membership_start'}));
  +            $error = 1;
  +        }
  +    }
  +
  +    #   redirect to enrollment screen if errors occurred
  +    if ($error) {
  +        return $self->switchto("enrollment");
  +    }
  +
  +    #   generate membership UUID
  +    my $uuid = new OSSP::uuid;
  +    $uuid->make("v1");
  +    my $me_uuid = $uuid->export("str");
  +    undef $uuid;
  +
  +    #   generate encrypted password variants
  +    my $pw = $self->makepasswords($password);
  +
  +    #   create membership record in database
  +    my $now = time();
  +    my $t_start  = $self->datetime($now);
  +    my $t_expiry = $self->datetime($now+1*60);
  +    my $sth = $dbi->prepare(
  +        "INSERT INTO ase_enrollment" .
  +        " (en_uuid," .
  +        "  en_address, en_pw_sha1, en_pw_md5, en_pw_cryptmd5, en_pw_cryptdes," .
  +        "  en_start, en_expiry)" .
  +        " VALUES (?, ?, ?, ?, ?, ?, ?, ?);"
  +    ) or die $dbi->errstr();
  +    $sth->execute(
  +        $me_uuid, $address,
  +        $pw->{-sha1}, $pw->{-md5}, $pw->{-cryptmd5}, $pw->{-cryptdes}, 
  +        $t_start, $t_expiry
  +    ) or die $dbi->errstr();
  +
  +    #   send activation URL to Email address
  +    my $url = $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "?mode=activation;uuid=$me_uuid";
  +    my $mail =
  +        "Thank you for your interest in joining the OpenPKG Foundation.\n" .
  +        "To finish your enrollment you have to activate your membership\n" .
  +        "account by going to the following URL until ".$self->datetime2str($t_expiry)." UTC:\n" .
  +        "\n" .
  +        "$url\n" .
  +        "\n" .
  +        "-- \n" .
  +        "Affiliation Service Environment\n" .
  +        "OpenPKG Foundation e.V.\n" .
  +        "" . $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "\n" .
  +        "\n";
  +    $Mail::Sendmail::mailcfg{"smtp"} = [qw(localhost mail)];
  +    Mail::Sendmail::sendmail(
  +        To      => "rse\@engelschall.com\n", #$address,
  +        From    => "OpenPKG Foundation Affiliation Service Environment <ase\@localhost>\n", # FIXME
  +        Subject => "OpenPKG Foundation Membership Enrollment\n",
  +        Message => $mail,
  +    ) or die $Mail::Sendmail::error;
  +
  +    #   generate the outer canvas
  +    $html .= "<div class=\"boxed\">\n";
  +    $html .= "<span class=\"title\">Account Enrollment</span>\n";
  +    $html .=
  +        "<ul class=\"breadcrumb\">\n" .
  +        "  <li><a href=\"".$self->url(-mode => "login")."\">Login &rarr;</a></li>\n" .
  +        "  <li>Enrollment:</li>\n" .
  +        "</ul>\n";
  +    $html .= $cgi->start_form(
  +        -method => 'POST',
  +        -action => $self->url(),
  +        -class  => 'enrollment',
  +    ) . "\n";
  +    $html .= $cgi->hidden(
  +        -name     => 'mode',
  +        -default  => 'enrollment-action',
  +        -override => 1
  +    ) . "\n";
  +    $html->fold("canvas");
  +    $html .= $cgi->end_form() . "\n";
  +    $html .= "</div>\n";
  +    $html >> "canvas";
  +
  +    #   back
  +    #$html .=
  +    #    "<a class=\"button\" href=\"".$self->url(-mode => "login")."\">" .
  +    #    "&larr; Back to <b>Login</b>" .
  +    #    "</a><p>\n";
  +
  +    #   generate step-by-step list
  +    $html .=
  +        "<ol class=steps>\n" .
  +        "  <li>Account Specification</li>\n" .
  +        "  <li class=this>Account Verification</li>\n" .
  +        "  <li>Account Activation</li>\n" .
  +        "</ol>\n";
  +
  +    #   generate header text
  +    $html .=
  +        "<p>\n" .
  +        "An Email was sent to you under &lt;<a href=\"mailto:$address\"><b>$address</b></a>&gt; containing\n" .
  +        "an URL. Please follow this URL for being directed to step 3\n" .
  +        "of this Enrollment procedure, the Account Activation.\n";
  +
  +    return;
  +}
  +
  +#   run-time mode image rendering: "scode"
  +sub mode_scode_render {
  +    my $self = shift;
  +    my $cgi  = $self->param(-cgi);
  +
  +    #   send Security Code image
  +    my $uuid = $cgi->param("uuid");
  +    my $img = $self->scode_render($uuid);
  +    $self->header_props(-type => 'image/png', -expires => '+4d');
  +    return $img;
  +}
  +
  +#   run-time mode screen rendering: "activation"
  +sub mode_activation_screen {
  +    my $self = shift;
  +    my $cgi  = $self->param(-cgi);
  +    my $dbi  = $self->param(-dbi);
  +    my $html = $self->param(-html);
  +
  +    #   determine UUID
  +    my $uuid = $cgi->param("uuid");
  +
  +    #   lookup enrollment information from database
  +    my $sth = $dbi->prepare(
  +        "SELECT * FROM ase_enrollment WHERE en_uuid = ?;"
  +    ) or die $dbi->errstr();
  +    $sth->execute($uuid) or die $dbi->errstr();
  +    my $rec = $sth->fetchrow_hashref();
  +    if (not defined($rec)) {
  +        $html .= "<div class=\"boxed\">\n" .
  +                 "<span class=\"title\">Account Enrollment</span>\n" .
  +                 "<h3 class=\"error\">ERROR: ACTIVATION FAILED</h3>\n" .
  +                 "Sorry, no enrollment information found under " .
  +                 "UUID $uuid. Either you waited too long for activating " .
  +                 "(the enrollment information already expired), or " .
  +                 "you already activated your account or " .
  +                 "the URL you followed was incorrect. Please start " .
  +                 "from scratch!" .
  +                 "<p>\n" .
  +                 "<a class=\"button\" href=\"".$self->url(-mode => "enrollment")."\">" .
  +                 "Go to <b>Enrollment</b> screen" .
  +                 "</a>\n" .
  +                 "</div>\n";
  +        return;
  +    }
  +
  +    #   create new membership account
  +    my $now     = time();
  +    my $t_start = $self->datetime($now);
  +    my $t_end   = $self->datetime($now+365*24*60*60);
  +    my $sth = $dbi->prepare(
  +        "INSERT INTO ase_member" .
  +        " (me_uuid, me_address, " .
  +        "  me_membership_status, me_membership_type, " .
  +        "  me_membership_start, me_membership_end, " .
  +        "  me_access_pw_sha1, me_access_pw_md5, me_access_pw_cryptmd5, me_access_pw_cryptdes)" .
  +        " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"
  +    ) or die $dbi->errstr();
  +    $sth->execute(
  +        $uuid, $rec->{en_address},
  +        1, "N",
  +        $t_start, $t_end,
  +        $rec->{en_pw_sha1}, $rec->{en_pw_md5}, $rec->{en_pw_cryptmd5}, $rec->{en_pw_cryptdes},
  +    ) or die $dbi->errstr();
  +
  +    #   delete enrollment information
  +    $dbi->do(
  +        "DELETE FROM ase_enrollment WHERE en_uuid = '$uuid';"
  +    ) or die $dbi->errmsg;;
  +
  +    #   provide final information
  +    $html .=
  +         "<div class=\"boxed\">\n" .
  +         "<span class=\"title\">Account Enrollment</span>\n";
  +    $html .=
  +        "<ul class=\"breadcrumb\">\n" .
  +        "  <li><a href=\"".$self->url(-mode => "login")."\">Login &rarr;</a></li>\n" .
  +        "  <li>Enrollment:</li>\n" .
  +        "</ul>\n";
  +    $html->fold("canvas");
  +    $html .= "</div>\n";
  +    $html >> "canvas";
  +
  +    #   generate step-by-step list
  +    $html .=
  +        "<ol class=steps>\n" .
  +        "  <li>Account Specification</li>\n" .
  +        "  <li>Account Verification</li>\n" .
  +        "  <li class=this>Account Activation</li>\n" .
  +        "</ol>\n";
  +
  +    #   generate description
  +    $html .=
  +        "Congratulations!\n" .
  +        "<p>\n" .
  +        "You have successfully enrolled for a membership with the OpenPKG Foundation e.V.\n" .
  +        "Your current membership status is <b>Fellow</b>. If you want to become even a <b>Member</b>\n" .
  +        "of the OpenPKG Foundation e.V., please visit your account information and upgrade.</b>\n" .
  +        "You can now access your account by going to the Login screen.\n" .
  +        "<p>\n" .
  +        "<a class=\"button\" href=\"".$self->url(-mode => "login")."\">" .
  +        "Go to <b>Login</b> screen" .
  +        "</a>\n";
  +
  +    return;
  +}
  +
  +#   render navigation tab
  +sub menu_tab {
  +    my $self    = shift;
  +    my $mode    = shift;
  +    my $html    = $self->param(-html);
  +
  +    #   define the menu
  +    my $menu = [
  +        { -mode => "menu-overview", -name => "Overview" },
  +        { -mode => "menu-member",   -name => "Member"   },
  +        { -mode => "menu-account",  -name => "Account"  },
  +        { -mode => "menu-action",   -name => "Action"   },
  +        { -mode => "menu-logout",   -name => "Logout"   },
  +    ];
  +
  +    #   render the menu
  +    $html .=
  +        "<ul class=\"tabs\">\n" .
  +        "  <li class=\"padding\">&nbsp;</li>\n";
  +    foreach my $entry (@{$menu}) {
  +        $html .= "  ";
  +        $html .= ($entry->{-mode} eq $mode ? "<li class=\"active\">": "<li>");
  +        $html .= "<a href=\"".$self->url(-mode => $entry->{-mode})."\">".$entry->{-name}."</a>";
  +        $html .= "</li>\n";
  +    }
  +    $html .=
  +        "  <li class=\"padding\">&nbsp;</li>\n" .
  +        "</ul>\n";
  +    $html .= "<div class=\"tabsframe\">\n";
  +    $html->fold("foo");
  +    $html .= "</div>\n";
  +    $html >> "foo";
  +
  +    return;
  +}
  +
  +#   application run-time mode processing: "menu-overview"
  +sub mode_menu_overview_screen {
  +    my $self    = shift;
  +    my $cgi     = $self->param(-cgi);
  +    my $dbi     = $self->param(-dbi);
  +    my $html    = $self->param(-html);
  +    my $session = $self->param(-session);
  +
  +    #   generate the outer canvas
  +    $html .= "<div class=\"boxed\">\n";
  +    $html .= "<span class=\"title\">Main Menu</span>\n";
  +    $html .= $cgi->start_form(
  +        -method => 'POST',
  +        -action => $self->url(),
  +        -class  => 'menu',
  +    ) . "\n";
  +    $html .= $cgi->hidden(
  +        -name     => 'mode',
  +        -value    => 'menu-action',
  +        -override => 1
  +    ) . "\n";
  +    $html->fold("canvas");
  +    $html .= $cgi->end_form() . "\n";
  +    $html .= "</div>\n";
  +    $html >> "canvas";
  +
  +    #   insert navigation tab
  +    $self->menu_tab("menu-overview");
  +
  +    #   take membership UUID from session
  +    my $me_uuid = $session->param("login");
  +
  +    #   fetch remaining member details from database
  +    my $sth = $dbi->prepare(
  +        "SELECT * FROM ase_member WHERE me_uuid = ?;")
  +        or die $dbi->errstr();
  +    $sth->execute($me_uuid)
  +        or die $dbi->errstr();
  +    my $rec = $sth->fetchrow_hashref()
  +        or die "no member found under UUID $me_uuid";
  +
  +    #   determine name of membership status
  +    my $me_status = (qw(Enrolling Fellow Member Activist Director President))
  +        [$rec->{'me_membership_status'} || 0];
  +
  +    $html .=
  +        "<table class=\"F\">\n" .
  +        "  <tr>\n" .
  +        "    <td class=\"L\"><span class=\"label\">Status:</span></td>\n" .
  +        "    <td class=\"I\">". $me_status ."</td>\n" .
  +        "  </tr>\n" .
  +        "  <tr>\n" .
  +        "    <td class=\"L\"><span class=\"label\">UUID:</span></td>\n" .
  +        "    <td class=\"I\">". $me_uuid ."</td>\n" .
  +        "  </tr>\n" .
  +        "  <tr>\n" .
  +        "    <td class=\"L\"><span class=\"label\">Email Address:</span></td>\n" .
  +        "    <td class=\"I\">". $rec->{"me_address"} ."</td>\n" .
  +        "  </tr>\n" .
  +        "  <tr>\n" .
  +        "    <td class=\"L\"><span class=\"label\">Membership Start:</span></td>\n" .
  +        "    <td class=\"I\">". $self->datetime2str($rec->{'me_membership_start'}) ."</td>\n" .
  +        "  </tr>\n" .
  +        "  <tr>\n" .
  +        "    <td class=\"L\"><span class=\"label\">Membership End:</span></td>\n" .
  +        "    <td class=\"I\">". $self->datetime2str($rec->{'me_membership_end'}) ."</td>\n" .
  +        "  </tr>\n" .
  +        "</table>\n";
  +
  +    return;
  +}
  +
  +#   application run-time mode processing: "menu-member"
  +sub mode_menu_member_screen {
  +    my $self    = shift;
  +    my $cgi     = $self->param(-cgi);
  +    my $dbi     = $self->param(-dbi);
  +    my $html    = $self->param(-html);
  +    my $session = $self->param(-session);
  +
  +    #   generate the outer canvas
  +    $html .= "<div class=\"boxed\">\n";
  +    $html .= "<span class=\"title\">Main Menu</span>\n";
  +    $html .= $cgi->start_form(
  +        -method => 'POST',
  +        -action => $self->url(),
  +        -class  => 'menu',
  +    ) . "\n";
  +    $html .= $cgi->hidden(
  +        -name     => 'mode',
  +        -value    => 'menu-member-action',
  +        -override => 1
  +    ) . "\n";
  +    $html->fold("canvas");
  +    $html .= $cgi->end_form() . "\n";
  +    $html .= "</div>\n";
  +    $html >> "canvas";
  +
  +    #   insert navigation tab
  +    $self->menu_tab("menu-member");
  +
  +    #   take membership UUID from session
  +    my $me_uuid = $session->param("login");
  +
  +    #   fetch remaining member details from database
  +    my $sth = $dbi->prepare(
  +        "SELECT * FROM ase_member WHERE me_uuid = ?;")
  +        or die $dbi->errstr();
  +    $sth->execute($me_uuid)
  +        or die $dbi->errstr();
  +    my $rec = $sth->fetchrow_hashref()
  +        or die "no member found under UUID $me_uuid";
  +
  +    #   determine name of membership status
  +    my $me_status = (qw(Enrolling Fellow Member Activist Director President))
  +        [$rec->{'me_membership_status'} || 0];
  +
  +    $html .= "<table class=\"F\">\n";
  +    $html .=
  +        "  <tr>\n" .
  +        "    <td class=\"L\"><span class=\"label\">"."foo".":</span></td>\n" .
  +        "    <td class=\"I\">"."foo"."</td>\n" .
  +        "  </tr>\n";
  +    $html .= "</table>\n";
  +
  +    #   render member edit form
  +    my $form = new CGI::FormBuilder (
  +        "fields"   => [qw(me_sn me_uuid me_username me_address me_membership_status me_membership_prop me_gender)],
  +        "method"   => "POST",
  +        "values"   => $rec,
  +        "header"   => 0,
  +        "action"   => $self->url(),
  +        "class"    => "menu",
  +        "template" => &render,
  +    );
  +    $form->field(
  +        "name"     => "me_membership_status",
  +        "label"    => "Membership Status",
  +        "options"  => [
  +            [ "0" => "enrolling" ],
  +            [ "1" => "fellow"    ],
  +            [ "2" => "member"    ],
  +            [ "3" => "activist"  ],
  +            [ "4" => "director"  ],
  +            [ "5" => "president" ],
  +        ],
  +    );
  +    sub render {
  +        my ($form) = @_;
  +    }
  +    $html .= $form->render();
  +
  +    return;
  +}
  +
  +#   run-time mode screen action: "menu-member-action"
  +sub mode_menu_member_action {
  +    my $self    = shift;
  +    my $cgi     = $self->param(-cgi);
  +    my $dbi     = $self->param(-dbi);
  +    my $session = $self->param(-session);
  +
  +    return "FUCK";
  +}
  +
  +#   application run-time mode processing: "menu-logout"
  +sub mode_menu_logout_screen {
  +    my $self    = shift;
  +    my $cgi     = $self->param(-cgi);
  +    my $html    = $self->param(-html);
  +    my $session = $self->param(-session);
  +
  +    #   generate the outer canvas
  +    $html .= "<div class=\"boxed\">\n";
  +    $html .= "<span class=\"title\">Main Menu</span>\n";
  +    $html .= $cgi->start_form(
  +        -method => 'POST',
  +        -action => $self->url(),
  +        -class  => 'menu',
  +    ) . "\n";
  +    $html .= $cgi->hidden(
  +        -name     => 'mode',
  +        -value    => 'menu-logout-action',
  +        -override => 1
  +    ) . "\n";
  +    $html->fold("canvas");
  +    $html .= $cgi->end_form() . "\n";
  +    $html .= "</div>\n";
  +    $html >> "canvas";
  +
  +    #   insert navigation tab
  +    $self->menu_tab("menu-logout");
  +
  +    $html .=
  +        "Here you can logout from the OpenPKG Foundation Affiliation Service Environment. " .
  +        "Your current browser session will be destroyed and you will be redirected " .
  +        "to the Login screen again. Unless you explicitly logout, your session " .
  +        "will be kept active.";
  +
  +    $html .=
  +        "<p>\n" .
  +        "<div align=center><a class=\"button\" href=\"".$self->url(-mode => "logout")."\">" .
  +        "<b>Logout!</b>" .
  +        "</a></div><p>\n";
  +
  +    return;
  +}
  +
  +1;
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.css
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ase.css
  --- /dev/null	2005-04-22 17:47:08 +0200
  +++ ase.css	2005-04-22 17:47:08 +0200
  @@ -0,0 +1,239 @@
  +/*
  +**  ase.css -- Cascading Style Sheet
  +*/
  +
  +html {
  +    background:       #c0c0c0;
  +}
  +
  +/* General: Outer Canvas */
  +.ase {
  +    padding:          20px 20px 20px 20px;
  +    width:            600px;
  +    border:           1px solid #000000;
  +    background:       #ffffff;
  +    font-family:      sans-serif, helvetica, arial;
  +}
  +.ase a {
  +    color:            #666699;
  +    text-decoration:  none;
  +}
  +
  +/* General: Hyperlink Buttons */
  +.ase a.button {
  +    color:            #444444;
  +    background:       #f8f8f8;
  +    background-image: url(ase.img.bar16.png);
  +    border-top:       1px solid #f0f0f0;
  +    border-left:      1px solid #cccccc;
  +    border-right:     1px solid #999999;
  +    border-bottom:    1px solid #666666;
  +    padding:          1px 8px 1px 8px;
  +}
  +
  +/* General: Annotations */
  +.ase span.annotation {
  +    font-size:        80%;
  +    color:            #999999;
  +}
  +.ase span.error {
  +    font-size:        80%;
  +    font-weight:      bold;
  +    color:            #cc3333;
  +}
  +.ase div.errorbox {
  +    font-weight:      bold;
  +    background:       #aa3333;
  +    color:            #ffffff;
  +    padding:          4px 8px 4px 8px;
  +}
  +
  +/* General: Headlines */
  +.ase h1 {
  +    font-family:      tahoma, arial, helvetica, sans-serif;
  +    font-weight:      bold;
  +    font-size:        32px;
  +    margin:           0px 0px 8px 0px;
  +}
  +.ase h1.error {
  +    color:            #cc3333;
  +}
  +.ase h2 {
  +    font-family:      tahoma, arial, helvetica, sans-serif;
  +    font-weight:      bold;
  +    font-size:        24px;
  +    margin:           0px 0px 8px 0px;
  +}
  +.ase h2.error {
  +    color:            #cc3333;
  +}
  +.ase h3 {
  +    font-family:      tahoma, arial, helvetica, sans-serif;
  +    font-weight:      bold;
  +    font-size:        16px;
  +    margin:           0px 0px 8px 0px;
  +}
  +.ase h3.error {
  +    color:            #cc3333;
  +}
  +
  +/* General: Boxes */
  +.ase div.boxed {
  +    border:           1px solid #cccccc;
  +    margin-top:       24px;
  +    padding:          24px 16px 16px 16px;
  +    position:         relative;
  +}   
  +.ase div.boxed span.title {
  +    display:          inline;
  +    position:         absolute;
  +    color:            #999999;
  +    font-family:      tahoma, arial, helvetica, sans-serif;
  +    font-weight:      bold;
  +    font-size:        24px;
  +    height:           32px;
  +    background:       #ffffff;
  +    top:              -18px;
  +    left:             16px;
  +    padding:          1px 4px 1px 4px;
  +}
  +
  +/* Step List */
  +ol.steps {
  +    border-left:      4px solid #e0e0e0;
  +    margin-left:      0px;
  +    padding-left:     30px;
  +    font-weight:      bold;
  +}
  +ol.steps li {
  +    color:            #a0a0a0;
  +}
  +ol.steps li.this {
  +    color:            #000000;
  +}
  +
  +/* Breadcrumb List */
  +ul.breadcrumb {
  +    margin:           0px;
  +    margin-bottom:    10px;
  +    padding:          0px;
  +    white-space:      nowrap;
  +    font-weight:      bold;
  +}
  +ul.breadcrumb li {
  +    color:            #000000;
  +    display:          inline;
  +    list-style:       none;
  +}
  +ul.breadcrumb li a {
  +    color:            #a0a0a0;
  +    text-decoration:  none;
  +}
  +
  +/* General: Input Fields */
  +.ase input.field {
  +    background:       #fafafa;
  +    border-top:       1px solid #999999;
  +    border-right:     1px solid #cccccc;
  +    border-bottom:    1px solid #cccccc;
  +    border-left:      1px solid #999999;
  +}
  +.ase input.button {
  +    color:            #444444;
  +    background:       #f8f8f8;
  +    background-image: url(ase.img.bar16.png);
  +    border-top:       1px solid #f0f0f0;
  +    border-left:      1px solid #cccccc;
  +    border-right:     1px solid #999999;
  +    border-bottom:    1px solid #666666;
  +}
  +
  +/* Screen "Login" */
  +.ase form.login input#button_login {
  +    color:            #000000;
  +    font-weight:      bold;
  +    width:            100%;
  +}
  +.ase form.login input#button_enrollment {
  +    width:            100%;
  +}
  +.ase form.login input#button_recovery {
  +    width:            100%;
  +}
  +
  +/* Screen "Enrollment" */
  +.ase form.enrollment input.button {
  +    color:            #000000;
  +    font-weight:      bold;
  +    width:            50%;
  +    margin-top:       4px;
  +}
  +
  +/* General: Form Table */
  +.ase table.F tr {
  +}
  +.ase table.F td.L {
  +    background-color:   #fffffff;
  +    border-bottom:      1px solid #cccccc;
  +    #-moz-border-radius: 10px 0 0 10px;
  +    padding:            4px 10px 4px 20px;
  +}
  +.ase table.F td.I {
  +    border-bottom:      1px solid #cccccc;
  +    padding:            4px 0px 4px 4px;
  +}
  +
  +/* navigation tabs */
  +div.tabsframe {
  +    border:             1px solid #cccccc;
  +    padding:            10px 10px 10px 10px;
  +}
  +ul.tabs {
  +    margin:             0px;
  +    margin-left:        4px;     /* compensate gap reduction (see below) */
  +    padding:            0px;
  +    white-space:        nowrap;
  +    font-family:        sans-serif,helvetica,lucida,verdana,arial;
  +    font-size:          12px;
  +}
  +ul.tabs li {
  +    display:            inline;
  +    margin-left:        -4px;    /* gap reduction between inline elements */
  +    list-style:         none;
  +}
  +ul.tabs li.padding {
  +    border-bottom:      1px solid #bbbbbb;
  +    padding-left:       10px;
  +}
  +ul.tabs li a {
  +    margin:             0px;
  +    -moz-border-radius: 8px 8px 0 0;
  +    border-radius:      8px 8px 0 0;
  +    border-top:         1px solid #cccccc;
  +    border-left:        1px solid #cccccc;
  +    border-right:       1px solid #666666;
  +    border-bottom:      1px solid #999999;
  +    padding:            0px 10px 0px 10px;
  +    background-color:   #f8f8f8;
  +    color:              #666666;
  +    text-decoration:    none;
  +}
  +ul.tabs li.active a {
  +    border-top:         1px solid #cccccc;
  +    border-left:        1px solid #cccccc;
  +    border-right:       1px solid #666666;
  +    border-bottom:      1px solid #ffffff;
  +    padding-top:        4px;
  +    background-color:   #ffffff;
  +    color:              #000000;
  +    font-weight:        bold;
  +}
  +ul.tabs li a:hover {
  +    background-color:   #f0f0f0;
  +    color:              #666666;
  +    text-decoration:    none !important;
  +}
  +ul.tabs li.active a:hover {
  +    background-color:   inherit;
  +    color:              inherit;
  +}
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.html
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ase.html
  --- /dev/null	2005-04-22 17:47:08 +0200
  +++ ase.html	2005-04-22 17:47:09 +0200
  @@ -0,0 +1,23 @@
  +<html>
  +  <head>
  +    <link rel="stylesheet" type="text/css" href="ase.css">
  +    %HEAD%
  +  </head>
  +  <body>
  +    <div class="ase">
  +      <table width=100%>
  +        <tr>
  +          <td valign=bottom>
  +            <h1>OpenPKG Foundation</h1>
  +            <h2>Affiliation Service Environment</h2>
  +          </td>
  +          <td align=right>
  +            <a href="http://www.openpkg.net/"><img src="ase.img.logo.png" alt="" border=0></a>
  +          </td>
  +        </tr>
  +      </table>
  +      <p>
  +      %BODY%
  +    </div>
  +  </body>
  +</html>
  @@ .
  (cd ossp-pkg/ase && \
   uudecode <<'@@ .' && \
   xdelta patch ase.img.bar16.png.xdelta /dev/null ase.img.bar16.png && \
   rm -f ase.img.bar16.png.xdelta)
  Index: ossp-pkg/ase/ase.img.bar16.png
  ============================================================================
  begin 664 ase.img.bar16.png.xdelta
  M)5A$6C`P-"4````(`!``#P````````````````````!S:&EE;&$N,S$Y,RYN
  M=6QL<VAI96QA+C,Q.3,N86QL'XL(`````````P,````````````?BP@`````
  M```#8V!H8&9@8#"X(MMSLY]A$\O+!LX9;WXXU0'%&``]X/R_'````````%,E
  '6$1:,#`T)0``
  `
  end
  @@ .
  (cd ossp-pkg/ase && \
   uudecode <<'@@ .' && \
   xdelta patch ase.img.logo.png.xdelta /dev/null ase.img.logo.png && \
   rm -f ase.img.logo.png.xdelta)
  Index: ossp-pkg/ase/ase.img.logo.png
  ============================================================================
  begin 664 ase.img.logo.png.xdelta
  M)5A$6C`P-"4````(`!``#P````````````````````!S:&EE;&$N,S$Y,RYN
  M=6QL<VAI96QA+C,Q.3,N86QL'XL(`````````P,````````````?BP@`````
  M```#8V!H8&9@8#"X(MMSLY]A$\O+!LX9;WXXU0'%&``]X/R_'````````%,E
  '6$1:,#`T)0``
  `
  end
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.pl
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ase.pl
  --- /dev/null	2005-04-22 17:47:09 +0200
  +++ ase.pl	2005-04-22 17:47:09 +0200
  @@ -0,0 +1,154 @@
  +#!/usr/opkg/bin/perl
  +##
  +##  OSSP ase -- Affiliation Service Environment
  +##  Copyright (c) 2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2005 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP ase, a service environment for managing
  +##  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  +##
  +##  This program is free software; you can redistribute it and/or modify
  +##  it under the terms of the GNU General Public License as published by
  +##  the Free Software Foundation; either version 2 of the License, or
  +##  (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this program; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  ase-auth.pl: authentication command line interface
  +##
  +
  +#   language requirements
  +require 5.008;
  +use strict;
  +use warnings;
  +
  +#   language extensions
  +use Getopt::Long;                       # from OpenPKG "perl"
  +use DBI;                                # from OpenPKG "perl-dbi"
  +use DBD::SQLite;                        # from OpenPKG "perl-dbi" (with_dbd_sqlite=yes)
  +use Crypt::UnixCrypt;                   # from OpenPKG "perl-crypto"
  +use Crypt::PasswdMD5;                   # from OpenPKG "perl-crypto"
  +use Digest::MD5;                        # from OpenPKG "perl-crypto"
  +use Digest::SHA1;                       # from OpenPKG "perl-crypto"
  +
  +#   command line parsing
  +my $opt = {
  +    -help   => 0,
  +    -quiet  => 0,
  +    -type   => 'md5',
  +};
  +my $p = new Getopt::Long::Parser;
  +$p->configure("bundling");
  +$p->getoptions(
  +    'h|help'   => \$opt->{-help},
  +    'q|quiet'  => \$opt->{-quiet},
  +    't|type=s' => \$opt->{-type},
  +) || die "option parsing failed";
  +undef $p;
  +if ($opt->{-help}) {
  +    print "Usage: ase-auth [options] <username> [<password>]\n" .
  +          "Available options:\n" .
  +          " -h,--help       print out this usage page\n" .
  +          " -q,--quiet      quiet processing\n" .
  +          " -t,--type=TYPE  type of password\n";
  +    exit(0);
  +}
  +if (@ARGV < 1 or @ARGV > 2) {
  +    print STDERR "ase-auth:ERROR: invalid number of arguments\n";
  +    exit(1);
  +}
  +
  +#   determine parameters
  +my $username = $ARGV[0];
  +my $password = (defined($ARGV[1]) ? $ARGV[1] : $ENV{"PASSWORD"}) || "";
  +if ($password eq '') {
  +    print STDERR "ase-auth:ERROR: empty password\n";
  +    exit(1);
  +}
  +
  +#   helper function for generating random string
  +sub makerandom {
  +    my ($n, $set) = @_;
  +    my $rnd = '';
  +    $set =~ s/(.)-(.)/join('', $1..$2)/sge;
  +    for (my $i = 0; $i < $n; $i++) {
  +        $rnd .= substr($set, int(rand(length($set))), 1);
  +    }
  +    return $rnd;
  +}
  +
  +#   helper function for generating encrypted passwords
  +sub makepasswords {
  +    my ($plaintext) = @_;
  +    my $pw = {};
  +
  +    #   Plain Text
  +    $pw->{-plaintext} = $plaintext;
  +
  +    #   generate random salt
  +    my $salt = &makerandom(8, "./0-9A-Za-z");
  +
  +    #   Unix crypt(3) (both salted DES and MD5)
  +    $pw->{-cryptdes} = Crypt::UnixCrypt::crypt($pw->{-plaintext}, substr($salt, 0, 2));
  +    $pw->{-cryptmd5} = Crypt::PasswdMD5::unix_md5_crypt($pw->{-plaintext}, $salt);
  +
  +    #   Plain MD5
  +    my $md5 = new Digest::MD5;
  +    $md5->add($pw->{-plaintext});
  +    $pw->{-md5} = $md5->hexdigest;
  +    undef $md5;
  +
  +    #   Plain SHA-1
  +    my $sha1 = new Digest::SHA1;
  +    $sha1->add($pw->{-plaintext});
  +    $pw->{-sha1} = $sha1->hexdigest;
  +    undef $sha1;
  +
  +    return $pw;
  +}
  +
  +#   establish database object
  +my $dbi = DBI->connect(
  +    "dbi:SQLite:dbname=ase.db", "", "",
  +    { RaiseError => 1, AutoCommit => 1 }
  +);
  +die "failed to connect to database \"ase.db\""
  +    if (not defined($dbi));
  +
  +#   lookup member in database 
  +my $sth = $dbi->prepare(
  +    "SELECT * FROM ase_member" .
  +    " WHERE me_username = ? OR me_address = ?;")
  +    or die $dbi->errstr();
  +$sth->execute($username, $username)
  +    or die $dbi->errstr();
  +my $rec = $sth->fetchrow_hashref();
  +if (not defined($rec)) {
  +    print STDERR "Unknown login\n";
  +    exit(1);
  +}
  +
  +#   disconnect from database
  +undef $sth;
  +$dbi->disconnect();
  +
  +#   verify password
  +my $pw = &makepasswords($password);
  +my $type = $opt->{-type};
  +my $ok = 0;
  +eval "\$ok = \$pw->{-$type} eq \$rec->{'me_access_pw_$type'};";
  +
  +#   give results
  +if (not $opt->{-quiet}) {
  +    print STDOUT ($ok ? "OK" : "BAD")."\n";
  +}
  +exit($ok ? 0 : 1);
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.sql
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ase.sql
  --- /dev/null	2005-04-22 17:47:09 +0200
  +++ ase.sql	2005-04-22 17:47:09 +0200
  @@ -0,0 +1,269 @@
  +--
  +--  OSSP ase -- Affiliation Service Environment
  +--  Copyright (c) 2005 Ralf S. Engelschall <rse@engelschall.com>
  +--  Copyright (c) 2005 The OSSP Project <http://www.ossp.org/>
  +--
  +--  This file is part of OSSP ase, a service environment for managing
  +--  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  +--
  +--  This program is free software; you can redistribute it and/or modify
  +--  it under the terms of the GNU General Public License as published by
  +--  the Free Software Foundation; either version 2 of the License, or
  +--  (at your option) any later version.
  +--
  +--  This program is distributed in the hope that it will be useful,
  +--  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +--  General Public License for more details.
  +--
  +--  You should have received a copy of the GNU General Public License
  +--  along with this program; if not, write to the Free Software
  +--  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +--  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +--
  +--  ase.sql: OSSP ase database schema
  +--
  +
  +--  Member Information
  +CREATE TABLE ase_member (
  +    -- Unique Key (primary)
  +    me_sn                      INTEGER,
  +                               -- Membership Sequence/Serial Number
  +                               -- [7]
  +    me_uuid                    TEXT UNIQUE NOT NULL PRIMARY KEY, 
  +                               -- Membership UUID
  +                               -- [75468374-8721-11d9-bee4-0002a5489f14]
  +
  +    -- Unique Keys (secondary)
  +    me_username                TEXT UNIQUE,
  +                               -- Username
  +                               -- [rse]
  +    me_address                 TEXT UNIQUE,
  +                               -- Email-Address
  +                               -- [rse@engelschall.com]
  +
  +    -- Membership Details
  +    me_membership_status       CHAR(1) NOT NULL,
  +                               -- Membership Status/Karma: 0=enrolling, 1=fellow, 2=member, 3=activist, 4=director, 5=president
  +                               -- [5]
  +    me_membership_type         CHAR(1) NOT NULL,
  +                               -- Membership Type: N=natural, J=juristic
  +                               -- [N]
  +    me_membership_class        CHAR(1),
  +                               -- Membership Class: R=regular, S=sustaining
  +                               -- [R]
  +    me_membership_prop         CHAR(4),
  +                               -- Membership Properties: A=admin, F=founding, H=honorary, ...
  +                               -- [F]
  +    me_membership_start        INTEGER,
  +                               -- Membership Start Date
  +                               -- [20050209]
  +    me_membership_end          INTEGER,
  +                               -- Membership End Date
  +                               -- [20060209]
  +
  +    -- Person Details
  +    me_gender                  CHAR(1),
  +                               -- Gender: M=male, F=female
  +                               -- [M] 
  +    me_name_title              TEXT,
  +                               -- Title
  +                               -- [Dipl.-Inf.]
  +    me_name_first              TEXT,
  +                               -- First Name
  +                               -- [Ralf]
  +    me_name_middle             CHAR(1),
  +                               -- Middle Initial
  +                               -- [S]
  +    me_name_last               TEXT,
  +                               -- Last/Family Name
  +                               -- [Engelschall]
  +    me_birthday                INTEGER,
  +                               -- Birthday
  +                               -- [19721117]
  +    me_languages               TEXT,
  +                               -- Languages ISO-639 Codes (primary[,secondary,...])
  +                               -- [DE,EN]
  +
  +    -- Person Description
  +    me_profession              TEXT,
  +                               -- Profession
  +                               -- [Computer Scientist]
  +    me_employer                TEXT,
  +                               -- Currenty Employer
  +                               -- [Cable & Wireless]
  +    me_biography               TEXT,
  +                               -- One-Paragraph Biography Text
  +                               -- [...]
  +    me_portrait                BLOB,
  +                               -- Portrait Picture (PNG or JPEG format)
  +                               -- [...]
  +    me_homepage                TEXT,
  +                               -- Internet/WWW Homepage
  +                               -- [http://www.engelschall.com/]
  +    me_geekcode                TEXT,
  +                               -- GeekCode (see http://www.geekcode.com/)
  +                               -- [...]
  +    me_usc                     TEXT,
  +                               -- Unified Skill Code (RSE's USC)
  +                               -- [...]
  +    me_openpkg_since           INTEGER,
  +                               -- OpenPKG Known to you since...
  +                               -- [20001115]
  +
  +    -- Bank Account
  +    me_bank_institute_iso3166  CHAR(2),
  +                               -- Bank, Institute ISO 3166 Country Code
  +                               -- [DE]
  +    me_bank_institute_name     TEXT,
  +                               -- Bank, Institute Name
  +                               -- [Deutsche Bank]
  +    me_bank_institute_number   TEXT,
  +                               -- Bank, Institute Number
  +                               -- [70070024]
  +    me_bank_account_number     TEXT,
  +                               -- Bank, Account Number
  +                               -- [7700735]
  +    me_bank_directdebiting     INTEGER,
  +                               -- Bank, Direct Debiting: 0=no, 1=yes
  +                               -- [1]
  +
  +    -- Person Location
  +    me_loc_postal_street       TEXT,
  +                               -- Postal Location, Street
  +                               -- [Silnerstr.]
  +    me_loc_postal_house        TEXT,
  +                               -- Postal Location, House Number
  +                               -- [28]
  +    me_loc_postal_zipcode      TEXT,
  +                               -- Postal Location, Zip Code
  +                               -- [85221]
  +    me_loc_postal_city         TEXT,
  +                               -- Postal Location, City
  +                               -- [Dachau]
  +    me_loc_postal_country      TEXT,
  +                               -- Postal Location, Country
  +                               -- [Germany]
  +    me_loc_postal_iso3166      TEXT,
  +                               -- Postal Location, ISO-3166-1 Country Code
  +                               -- [DE]
  +    me_loc_timezoneoffset      INTEGER,
  +                               -- Positional Location, Timezone Offset (-12, ..., +12) without DST
  +                               -- [+1]
  +    me_loc_longitude           REAL,
  +                               -- Positional Location, Longitude
  +                               -- [11.43333]
  +    me_loc_latidude            REAL,
  +                               -- Positional Location, Lattitude
  +                               -- [48.26667]
  +
  +    -- Access
  +    me_access_pw_sha1          TEXT NOT NULL,
  +                               -- Access, Password, plain SHA1
  +                               -- [HHHHHHHH...]
  +    me_access_pw_md5           TEXT NOT NULL,
  +                               -- Access, Password, plain MD5
  +                               -- [HHHHHHHH...]
  +    me_access_pw_cryptmd5      TEXT NOT NULL,
  +                               -- Access, Password, crypt(3) salted MD5
  +                               -- [$1$5OnRPADJ$NOwJzToVtRRFngRxTM21g/]
  +    me_access_pw_cryptdes      TEXT NOT NULL,
  +                               -- Access, Password, crypt(3) salted DES
  +                               -- [xxxxxxxxxx]
  +    me_access_pk_ssh2          TEXT,
  +                               -- Access, Public Key, SSH-2 RSA/DSA (SSH, ssh-keygen)
  +                               -- [........]
  +    me_access_pk_openpgp       TEXT,
  +                               -- Access, Public Key, OpenPGP (PGP, GPG, gpg)
  +                               -- [........]
  +    me_access_pk_x509          TEXT,
  +                               -- Access, Public Key, X.509 Certificate (SSL, S/MIME, openssl)
  +                               -- [........]
  +    
  +    -- Account Recovery
  +    me_recovery_secret         TEXT,
  +                               -- Recovery Alternative 1: Secret
  +                               -- [...]
  +    me_recovery_question       INTEGER,
  +                               -- Recovery Alternative 2: Question: 0=none, 1=mother-maiden-name, 2=father-city-of-birth, 3=last-4-chars-of-creditcard 4=last-4-chars-of-idcard
  +                               -- [1]
  +    me_recovery_answer         TEXT
  +                               -- Recovery Alternative 2: Answer: 0=none, 1=mother-maiden-name, 2=father-city-of-birth, 3=last-4-chars-of-creditcard 4=last-4-chars-of-idcard
  +                               -- [1]
  +);
  +
  +CREATE TABLE ase_enrollment (
  +    en_uuid                    TEXT UNIQUE NOT NULL PRIMARY KEY, 
  +                               -- Membership UUID
  +                               -- [75468374-8721-11d9-bee4-0002a5489f14]
  +    en_address                 TEXT UNIQUE NOT NULL,
  +                               -- Email-Address
  +                               -- [rse@engelschall.com]
  +    en_pw_sha1                 TEXT NOT NULL,
  +                               -- Access, Password, plain SHA1
  +                               -- [HHHHHHHH...]
  +    en_pw_md5                  TEXT NOT NULL,
  +                               -- Access, Password, plain MD5
  +                               -- [HHHHHHHH...]
  +    en_pw_cryptmd5             TEXT NOT NULL,
  +                               -- Access, Password, crypt(3) salted MD5
  +                               -- [$1$5OnRPADJ$NOwJzToVtRRFngRxTM21g/]
  +    en_pw_cryptdes             TEXT NOT NULL,
  +                               -- Access, Password, crypt(3) salted DES
  +                               -- [xxxxxxxxxx]
  +    en_start                   INTEGER NOT NULL,
  +                               -- Enrollment Start (generated, YYYYMMDDHHMMSS)
  +                               -- [20050225000000]
  +    en_expiry                  INTEGER NOT NULL
  +                               -- Enrollment Expiry (generated, YYYYMMDDHHMMSS)
  +                               -- [20050225000000]
  +);
  +
  +--  Action Logbook
  +CREATE TABLE ase_logbook (
  +    -- Unique Key (primary)
  +    lg_uuid                    TEXT, 
  +                               -- Membership UUID
  +                               -- [75468374-8721-11d9-bee4-0002a5489f14]
  +
  +    -- Log Entry
  +    lg_date                    INTEGER NOT NULL,
  +                               -- Log Entry Date YYYYMMDDHHMMSS
  +                               -- [20050225000000]
  +    lg_text                    TEXT NOT NULL
  +                               -- Log Entry Text
  +                               -- [...]
  +);
  +
  +--  Financial Accounts
  +CREATE TABLE ase_account (
  +    -- Unique Key
  +    ac_uuid                    TEXT NOT NULL, 
  +                               -- Membership UUID
  +                               -- [75468374-8721-11d9-bee4-0002a5489f14]
  +
  +    -- Transaction Entry
  +    ac_date                    INTEGER NOT NULL,
  +                               -- Account Transaction Date YYYYMMDDHHMMSS
  +                               -- [20050225000000]
  +    ac_purpose                 TEXT NOT NULL,
  +                               -- Account Transaction Purpose
  +                               -- [Membership 2005/02]
  +    ac_amount                  REAL NOT NULL
  +                               -- Account Transaction Amount +/-N
  +                               -- [+123.50]
  +);
  +
  +--  Temporary Security Codes
  +CREATE TABLE ase_scode (
  +    sc_uuid                    TEXT NOT NULL,
  +                               -- Scode UUID
  +                               -- [75468374-8721-11d9-bee4-0002a5489f14]
  +    sc_number                  TEXT NOT NULL,
  +                               -- Scode Number (4 chars)
  +                               -- [xxxx]
  +    sc_expiry                  INTEGER NOT NULL
  +                               -- Scode Expiry Date/Time YYYYMMDDHHMMSS
  +                               -- [20050225000000]
  +);
  +
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 22 18:38:48 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5759176315; Fri, 22 Apr 2005 18:38:48 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.spec.odg
Message-Id: <20050422163848.5759176315@mail.ossp.org>
Date: Fri, 22 Apr 2005 18:38:48 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Apr-2005 18:38:48
  Branch: HEAD                             Handle: 2005042217384700

  Added files:
    ossp-pkg/ase            ase.spec.odg

  Log:
    add initial cut of specification document(s)

  Summary:
    Revision    Changes     Path
    1.1         BLOB        ossp-pkg/ase/ase.spec.odg
  ____________________________________________________________________________

  (cd ossp-pkg/ase && \
   uudecode <<'@@ .' && \
   xdelta patch ase.spec.odg.xdelta /dev/null ase.spec.odg && \
   rm -f ase.spec.odg.xdelta)
  Index: ossp-pkg/ase/ase.spec.odg
  ============================================================================
  begin 664 ase.spec.odg.xdelta
  M)5A$6C`P-"4````(`!$`$`````````````````````!S:&EE;&$N,3,X-#DN
  M;G5L;'-H:65L82XQ,S@T.2YA;&P?BP@````````#`P```````````!^+"```
  M``````-C8&A@9F!@,+@BVW.SGV$3R\L&SAEO?CC5`<48`#W@_+\<````````
  )52581%HP,#0E
  `
  end
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 22 23:14:03 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 8E12E7630A; Fri, 22 Apr 2005 23:14:03 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp.pod
Message-Id: <20050422211403.8E12E7630A@mail.ossp.org>
Date: Fri, 22 Apr 2005 23:14:03 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   22-Apr-2005 23:14:03
  Branch: HEAD                             Handle: 2005042222140300

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp.pod

  Log:
    spell checking

  Summary:
    Revision    Changes     Path
    1.43        +7  -7      ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp.pod
  ============================================================================
  $ cvs diff -u -r1.42 -r1.43 lmtp2nntp.pod
  --- ossp-pkg/lmtp2nntp/lmtp2nntp.pod	25 Sep 2003 07:25:27 -0000	1.42
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp.pod	22 Apr 2005 21:14:03 -0000	1.43
  @@ -70,7 +70,7 @@
   The B<OSSP lmtp2nntp> program is an LMTP service for use in conjunction
   with an MTA (like Sendmail), providing a reliable real-time mail to news
   gateway. Input messages get their headers reformatted according to configurable rewrite rules.
  -The article is then posted or feeded into
  +The article is then posted or fed into
   a remote NNTP service (like INN). Delivery must take place immediately
   or the transaction fails. B<OSSP lmtp2nntp> relies on the queuing
   capabilities of the MTA in order to provide a fully reliable service.
  @@ -127,7 +127,7 @@
   is a CIDR style bitmask where /0 means no comparison and enforces a match.
   Omitting the wholly option defaults to 0.0.0.0/0 and [::] which allows access from
   any IPv4 or IPv6 host.  It is possible to specify both inclusive and exclusive addresses,
  -the latter have to prefixed with an exclamation mark. In order to pass the ACL
  +the latter have to be prefixed with an exclamation mark. In order to pass the ACL
   a client must match any inclusion and not match any exclusion. If you specify
   exclusions only, a fake inclusion of 0.0.0.0/0 and [::] is appended internally.  Any
   addr can be a name which will be resolved on program launch time. MULTI.
  @@ -145,7 +145,7 @@
   
   Client connections for outgoing NNTP communication bind to this address. If an
   address is specified but port is omitted the kernel chooses an ephemeral port.
  -If you want to specify a port but no address then replace address with all zeroes.
  +If you want to specify a port but no address then replace address with all zeros.
   If completely omitted, no assumptions are made which causes the kernel to choose
   an address based on routing information and an ephemeral port.  The addr can
   be a name which will be resolved on program launch time. SINGLE.
  @@ -181,7 +181,7 @@
   
   Header rewriting rule. A message received by the LMTP server is split
   into header and body. The header is further split into a list where the
  -headernames are uniqe keys to access single- or multivalues. The values
  +headernames are unique keys to access single- or multivalues. The values
   are kept in sequence as they appeared in the original message. The
   gateway processes each rule in priority order. Small I<pri> numbers are
   processed first. The default prioriy is 500.  Each rule can modify a
  @@ -240,7 +240,7 @@
   '${msg.header.I<headername>}' and again, indexes are supported for
   multivalued headers.
   
  -Inside variables, functions can be access through '%functionname'.
  +Inside variables, functions can be accessed through '%functionname'.
   Currently, only %createmessageid is available which creates a value
   properly suitable for a Message-ID: header.
   
  @@ -259,7 +259,7 @@
   
   =item B<--mailfrom|-m> I<regex>
   
  -"Mail From:" envelope restriction to limit sender addresses. If ommitted, anyone can send
  +"Mail From:" envelope restriction to limit sender addresses. If omitted, anyone can send
   mail. The value to be compared includes the angle brackets. Use a PCRE (Perl
   compatible reguar expression) for I<mailfrom>. SINGLE.
   
  @@ -287,7 +287,7 @@
   =item B<--restrictheader|-r> I<regex>
   
   Restrict messages by header. Messages with a matching restrictheader are rejected.  If
  -ommitted no restrictions apply. Matching is done before headers are
  +omitted no restrictions apply. Matching is done before headers are
   rewritten. Use a PCRE (Perl compatible reguar expression) for
   I<regex>. SINGLE.
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Apr 25 17:50:14 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id A81B576304; Mon, 25 Apr 2005 17:50:13 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/due/ devtool.conf
Message-Id: <20050425155013.A81B576304@mail.ossp.org>
Date: Mon, 25 Apr 2005 17:50:13 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Apr-2005 17:50:13
  Branch: HEAD                             Handle: 2005042516501300

  Modified files:
    ossp-pkg/due            devtool.conf

  Log:
    provide better debugging

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-pkg/due/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 devtool.conf
  --- ossp-pkg/due/devtool.conf	23 Oct 2004 06:52:26 -0000	1.4
  +++ ossp-pkg/due/devtool.conf	25 Apr 2005 15:50:13 -0000	1.5
  @@ -40,5 +40,5 @@
       gunzip <due-${V}.tar.gz | tar tvf -
   
   %test
  -    env -i USER=$USER HOME=`pwd` `which bash` "$@"
  +    env -i USER=$USER TERM=$TERM HOME=`pwd` `which bash` "$@"
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Apr 25 17:50:25 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id ED796763CE; Mon, 25 Apr 2005 17:50:24 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/due/ .vimrc
Message-Id: <20050425155024.ED796763CE@mail.ossp.org>
Date: Mon, 25 Apr 2005 17:50:24 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Apr-2005 17:50:24
  Branch: HEAD                             Handle: 2005042516502400

  Modified files:
    ossp-pkg/due            .vimrc

  Log:
    sync with my RSE version

  Summary:
    Revision    Changes     Path
    1.3         +4  -4      ossp-pkg/due/.vimrc
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.vimrc
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 .vimrc
  --- ossp-pkg/due/.vimrc	22 Oct 2004 19:56:28 -0000	1.2
  +++ ossp-pkg/due/.vimrc	25 Apr 2005 15:50:24 -0000	1.3
  @@ -1,7 +1,7 @@
   "##
   "##  OSSP due - Dynamic User Environment
  -"##  Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
  -"##  Copyright (c) 1994-2004 The OSSP Project <http://www.ossp.org/>
  +"##  Copyright (c) 1994-2005 Ralf S. Engelschall <rse@engelschall.com>
  +"##  Copyright (c) 1994-2005 The OSSP Project <http://www.ossp.org/>
   "##
   "##  This file is part of OSSP due, a dynamic user environment
   "##  which can found at http://www.ossp.org/pkg/tool/due/
  @@ -90,10 +90,10 @@
   set virtualedit=block
   
   "   Always expand windows to the maximum height, but expand only to the
  -"   minimum width of 80 characters per line. Also, create new windows
  +"   minimum width of 100 characters per line. Also, create new windows
   "   below current one.
   set winheight=9999
  -set winwidth=80
  +set winwidth=100
   set splitbelow
   
   "   Do not wrap lines (neither implicitly on display nor explicitly
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr 27 16:44:24 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 762B976306; Wed, 27 Apr 2005 16:44:24 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.spec.odg
Message-Id: <20050427144424.762B976306@mail.ossp.org>
Date: Wed, 27 Apr 2005 16:44:24 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   27-Apr-2005 16:44:24
  Branch: HEAD                             Handle: 2005042715442300

  Modified files:
    ossp-pkg/ase            ase.spec.odg

  Log:
    try to fix broken document by reimporting it again

  Summary:
    Revision    Changes     Path
    1.2         BLOB        ossp-pkg/ase/ase.spec.odg
  ____________________________________________________________________________

  (cd ossp-pkg/ase && \
   uudecode <<'@@ .' && \
   mv ase.spec.odg ase.spec.odg.orig && \
   xdelta patch ase.spec.odg.xdelta ase.spec.odg.orig ase.spec.odg && \
   rm -f ase.spec.odg.orig ase.spec.odg.xdelta)
  Index: ossp-pkg/ase/ase.spec.odg
  ============================================================================
  begin 664 ase.spec.odg.xdelta
  M)5A$6C`P-"4````(`!``$`````````````````````!S:&EE;&$N-C0T-3DN
  M;VQD<VAI96QA+C8T-#4Y+FYE=Q^+"`````````,#````````````'XL(````
  M`````V-@:&!F8&`PN"+;<[.?81/+RP;.&6]^.-4!Q1@`/>#\OQP```````!4
  ()5A$6C`P-"4`
  `
  end
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 29 15:48:48 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 3FDC47630D; Fri, 29 Apr 2005 15:48:48 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.spec.odg
Message-Id: <20050429134848.3FDC47630D@mail.ossp.org>
Date: Fri, 29 Apr 2005 15:48:48 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   29-Apr-2005 15:48:48
  Branch: HEAD                             Handle: 2005042914484700

  Modified files:
    ossp-pkg/ase            ase.spec.odg

  Log:
    adjustments to match terminology and workflow according to the
    constitution of the OpenPKG Foundation (the driving force behind OSSP
    ase)

  Summary:
    Revision    Changes     Path
    1.3         BLOB        ossp-pkg/ase/ase.spec.odg
  ____________________________________________________________________________

  (cd ossp-pkg/ase && \
   uudecode <<'@@ .' && \
   mv ase.spec.odg ase.spec.odg.orig && \
   xdelta patch ase.spec.odg.xdelta ase.spec.odg.orig ase.spec.odg && \
   rm -f ase.spec.odg.orig ase.spec.odg.xdelta)
  Index: ossp-pkg/ase/ase.spec.odg
  ============================================================================
  begin 664 ase.spec.odg.xdelta
  M)5A$6C`P-"4````(``\`#P````````````````````!S:&EE;&$N.#<V-"YO
  M;&1S:&EE;&$N.#<V-"YN97<?BP@````````#`P```````````!^+"```````
  M``-C8&A@9F!@,+@BVW.SGV$3R\L&SAEO?CC5`<48`#W@_+\<````````4B58
  &1%HP,#0E
  `
  end
  @@ .

From ossp-cvs-owner@ossp.org  Wed May 11 11:20:05 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5F99476317; Wed, 11 May 2005 11:20:05 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ README
Message-Id: <20050511092005.5F99476317@mail.ossp.org>
Date: Wed, 11 May 2005 11:20:05 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /e/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   11-May-2005 11:20:05
  Branch: HEAD                             Handle: 2005051110200400

  Modified files:
    ossp-pkg/ase            README

  Log:
    point symmetric logo

  Summary:
    Revision    Changes     Path
    1.2         +4  -4      ossp-pkg/ase/README
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/README
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 README
  --- ossp-pkg/ase/README	22 Apr 2005 15:47:08 -0000	1.1
  +++ ossp-pkg/ase/README	11 May 2005 09:20:04 -0000	1.2
  @@ -1,8 +1,8 @@
      _        ___  ____ ____  ____  
  -  |_|_ _   / _ \/ ___/ ___||  _ \   __ _ ___  ___  
  -  _|_||_| | | | \___ \___ \| |_) | / _` / __|/ _ \ 
  - |_||_|_| | |_| |___) |__) |  __/ | (_| \__ \  __/ 
  -  |_|_|_|  \___/|____/____/|_|     \__,_|___/\___| 
  +  |_|_ _   / _ \/ ___/ ___||  _ \   ___  ___  ___  
  +  _|_||_| | | | \___ \___ \| |_) | |__ \/ __|/ _ \ 
  + |_||_|_| | |_| |___) |__) |  __/  / _  \__ \  __/ 
  +  |_|_|_|  \___/|____/____/|_|     \___/|___/\___| 
   
     OSSP ase - Affiliation Service Environment
     Version 0.1.0 (xx-xxx-2005)
  @@ .

From ossp-cvs-owner@ossp.org  Fri May 13 20:52:41 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 10CF076334; Fri, 13 May 2005 20:52:41 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog THANKS sh.platform
Message-Id: <20050513185241.10CF076334@mail.ossp.org>
Date: Fri, 13 May 2005 20:52:41 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-May-2005 20:52:40
  Branch: HEAD                             Handle: 2005051319524000

  Modified files:
    ossp-pkg/shtool         ChangeLog THANKS sh.platform

  Log:
    detect PPC under IBM i5/OS (aka OS/400) with PASE (Portable
    Application Solutions Environment)

  Summary:
    Revision    Changes     Path
    1.208       +5  -0      ossp-pkg/shtool/ChangeLog
    1.34        +1  -0      ossp-pkg/shtool/THANKS
    1.9         +3  -0      ossp-pkg/shtool/sh.platform
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.207 -r1.208 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	11 Aug 2004 19:14:44 -0000	1.207
  +++ ossp-pkg/shtool/ChangeLog	13 May 2005 18:52:40 -0000	1.208
  @@ -9,6 +9,11 @@
   
    ChangeLog
   
  + Changes between 2.0.1 and 2.0.2 (11-Aug-2004 to xx-XXX-2005):
  +
  +   *) Add IBM OS/400 PASE support to "shtool platform".
  +      [Henri Gomez <henri.gomez@gmail.com>]
  +
    Changes between 2.0.0 and 2.0.1 (02-Jul-2004 to 11-Aug-2004):
   
      *) Added M4 language output to "shtool version".
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/THANKS
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 THANKS
  --- ossp-pkg/shtool/THANKS	19 Jul 2004 07:41:34 -0000	1.33
  +++ ossp-pkg/shtool/THANKS	13 May 2005 18:52:40 -0000	1.34
  @@ -21,6 +21,7 @@
     o Scott R. Every           <scott@emji.net>
     o Daniel Richard G.        <straker@MIT.EDU>
     o Dean Gaudet              <dgaudet@arctic.org>
  +  o Henri Gomez              <henri.gomez@gmail.com>
     o Lars Hecking             <lhecking@nmrc.ucc.ie>
     o Manuel Hendel            <manuel@hendel.net>
     o Jim Jagielski            <jim@jaguNET.com>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.platform
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 sh.platform
  --- ossp-pkg/shtool/sh.platform	7 Jun 2004 15:13:21 -0000	1.8
  +++ ossp-pkg/shtool/sh.platform	13 May 2005 18:52:40 -0000	1.9
  @@ -397,6 +397,9 @@
               if [ ".`/usr/sbin/lsattr -El ${cpu_id} | grep -i powerpc`" != . ]; then
                   cpu_arch=powerpc
               fi
  +        elif [ -d /QOpenSys ]; then
  +            #   IBM i5/OS (aka OS/400) with PASE (Portable Application Solutions Environment)
  +            cpu_arch=powerpc
           fi
           if [ -x /usr/bin/oslevel ]; then
               os_level=`/usr/bin/oslevel`
  @@ .

From ossp-cvs-owner@ossp.org  Mon May 16 11:59:40 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 5A37E7634F; Mon, 16 May 2005 11:59:40 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog devtool.conf
Message-Id: <20050516095940.5A37E7634F@mail.ossp.org>
Date: Mon, 16 May 2005 11:59:40 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-May-2005 11:59:40
  Branch: HEAD                             Handle: 2005051610593900

  Modified files:
    ossp-pkg/uuid           ChangeLog devtool.conf

  Log:
    Upgrade to GNU libtool 1.5.16

  Summary:
    Revision    Changes     Path
    1.73        +3  -0      ossp-pkg/uuid/ChangeLog
    1.13        +1  -1      ossp-pkg/uuid/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.72 -r1.73 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	29 Mar 2005 19:01:41 -0000	1.72
  +++ ossp-pkg/uuid/ChangeLog	16 May 2005 09:59:39 -0000	1.73
  @@ -13,6 +13,9 @@
   
     Changes between 1.2.0 and 1.2.1 (23-Jan-2005 to xx-Mar-2005)
   
  +   o Upgrade to GNU libtool 1.5.16.
  +     [Ralf S. Engelschall]
  +
      o Cleanup the source code even more by following a large
        set of FlexeLint's suggestions.
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 devtool.conf
  --- ossp-pkg/uuid/devtool.conf	3 Nov 2004 18:35:24 -0000	1.12
  +++ ossp-pkg/uuid/devtool.conf	16 May 2005 09:59:39 -0000	1.13
  @@ -4,7 +4,7 @@
   
   %autogen
       @autogen shtool   2.0.1  "2.0.*" all
  -    @autogen libtool  1.5.10 "1.5*"
  +    @autogen libtool  1.5.16 "1.5*"
       @autogen autoconf 2.59   "2.5[3-9]*"
   
   %autoclean
  @@ .

From ossp-cvs-owner@ossp.org  Mon May 16 12:01:28 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 66E237634F; Mon, 16 May 2005 12:01:28 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ ChangeLog devtool.conf
Message-Id: <20050516100128.66E237634F@mail.ossp.org>
Date: Mon, 16 May 2005 12:01:28 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-May-2005 12:01:28
  Branch: HEAD                             Handle: 2005051611012700

  Modified files:
    ossp-pkg/sa             ChangeLog devtool.conf

  Log:
    Upgrade build environment to GNU libtool 1.5.16

  Summary:
    Revision    Changes     Path
    1.47        +3  -0      ossp-pkg/sa/ChangeLog
    1.25        +1  -1      ossp-pkg/sa/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.46 -r1.47 ChangeLog
  --- ossp-pkg/sa/ChangeLog	29 Mar 2005 19:24:29 -0000	1.46
  +++ ossp-pkg/sa/ChangeLog	16 May 2005 10:01:27 -0000	1.47
  @@ -12,6 +12,9 @@
     For a more brief summary please have a look at the NEWS file.
   
     Changes between 1.2.4 and 1.2.5 (29-Jan-2005 to xx-Mar-2005)
  +   
  +   o Upgrade build environment to GNU libtool 1.5.16
  +     [Ralf S. Engelschall <rse@engelschall.com>]
   
      o Follow FlexeLint suggestions and "constify" some API
        function parameters.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 devtool.conf
  --- ossp-pkg/sa/devtool.conf	29 Mar 2005 19:05:16 -0000	1.24
  +++ ossp-pkg/sa/devtool.conf	16 May 2005 10:01:27 -0000	1.25
  @@ -4,7 +4,7 @@
   
   %autogen
       @autogen shtool   2.0.1  "1.6.*" all
  -    @autogen libtool  1.5.14 "1.5*"
  +    @autogen libtool  1.5.16 "1.5*"
       @autogen autoconf 2.59   "2.5[4-9]*"
   
   %autoclean
  @@ .

From ossp-cvs-owner@ossp.org  Fri May 27 11:23:03 2005
Received: by mail.ossp.org (Postfix, from userid 6002)
	id 989B376319; Fri, 27 May 2005 11:23:02 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ sh.platform
Message-Id: <20050527092302.989B376319@mail.ossp.org>
Date: Fri, 27 May 2005 11:23:02 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /e/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   27-May-2005 11:23:02
  Branch: HEAD                             Handle: 2005052710230100

  Modified files:
    ossp-pkg/shtool         sh.platform

  Log:
    fix AIX detection and output and add Ubuntu Linux to Linux detection

  Summary:
    Revision    Changes     Path
    1.10        +3  -2      ossp-pkg/shtool/sh.platform
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.platform
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 sh.platform
  --- ossp-pkg/shtool/sh.platform	13 May 2005 18:52:40 -0000	1.9
  +++ ossp-pkg/shtool/sh.platform	27 May 2005 09:23:01 -0000	1.10
  @@ -235,6 +235,7 @@
                           fi
                           ;;
                       debian      ) n="Debian[ GNU/Linux]"        ;;
  +                    ubuntu      ) n="Ubuntu[ GNU/Linux]"        ;;
                       fedora      ) n="<Fedora> Core[ GNU/Linux]" ;;
                       suse        ) n="SuSE[ Linux]"              ;;
                       mandrake    ) n="Mandrake[ Linux]"          ;;
  @@ -404,7 +405,7 @@
           if [ -x /usr/bin/oslevel ]; then
               os_level=`/usr/bin/oslevel`
           else
  -            os_level="`uname -r`.`uname -v`"
  +            os_level="`uname -v`.`uname -r`"
           fi
           os_level=`echo "${os_level}" |\
                     sed -e 's;^\([0-9][0-9]*\.[0-9][0-9]*\)\(\.[0-9][0-9]*\)\(.*\)$;<\1>\2[\3];' \
  @@ -412,7 +413,7 @@
           AT="${cpu_arch}"
           AP="${AT}"
           AC="${AP}"
  -        ST="[IBM ]AIX ${os_level}"
  +        ST="[IBM ]<AIX >${os_level}"
           SP="${ST}"
           case "${os_level}" in
               [12]* ) SC="SVR2" ;;
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jun  2 20:43:06 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id CB6C2752F24; Thu,  2 Jun 2005 20:43:06 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/xds/ ChangeLog xds_engine_xdr.c
Message-Id: <20050602184306.CB6C2752F24@mail.ossp.org>
Date: Thu,  2 Jun 2005 20:43:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Jun-2005 20:43:06
  Branch: HEAD                             Handle: 2005060219430600

  Modified files:
    ossp-pkg/xds            ChangeLog xds_engine_xdr.c

  Log:
    Fix XDR string decoding function by NUL terminating
    the target buffer (instead of the source buffer).
    
    Submitted by: Unknown <ossp@jm.2good.nu>

  Summary:
    Revision    Changes     Path
    1.6         +6  -0      ossp-pkg/xds/ChangeLog
    1.16        +1  -1      ossp-pkg/xds/xds_engine_xdr.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ChangeLog
  --- ossp-pkg/xds/ChangeLog	12 Sep 2004 17:32:14 -0000	1.5
  +++ ossp-pkg/xds/ChangeLog	2 Jun 2005 18:43:06 -0000	1.6
  @@ -11,6 +11,12 @@
     This is a list of all source changes to OSSP xds.
     For less details please have a look at the NEWS file.
   
  +  Changes between 0.9.1 and 0.9.2 (17-Sep-2004 to xx-xxx-2005)
  +
  +   o Fix XDR string decoding function by NUL terminating
  +     the target buffer (instead of the source buffer).
  +     [Unknown <ossp@jm.2good.nu>]
  +
     Changes between 0.9.0 and 0.9.1 (17-Feb-2003 to 12-Sep-2004)
   
      o Fixed a few size_t/int conflicts and uninitialized value warnings.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds_engine_xdr.c
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 xds_engine_xdr.c
  --- ossp-pkg/xds/xds_engine_xdr.c	12 Sep 2004 17:32:14 -0000	1.15
  +++ ossp-pkg/xds/xds_engine_xdr.c	2 Jun 2005 18:43:06 -0000	1.16
  @@ -696,7 +696,7 @@
   
       /* Copy data into the buffer. */
       memmove(*p, (xds_uint8_t *)buffer + 4, p_len);
  -    ((xds_uint8_t *)buffer)[4 + p_len] = '\0';
  +    (*p)[p_len] = '\0';
   
       return XDS_OK;
   }
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jun  2 20:45:49 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 263C5752FBD; Thu,  2 Jun 2005 20:45:49 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/xds/ ChangeLog devtool.conf
Message-Id: <20050602184549.263C5752FBD@mail.ossp.org>
Date: Thu,  2 Jun 2005 20:45:49 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Jun-2005 20:45:49
  Branch: HEAD                             Handle: 2005060219454800

  Modified files:
    ossp-pkg/xds            ChangeLog devtool.conf

  Log:
    upgrade to Libtool 1.5.18

  Summary:
    Revision    Changes     Path
    1.7         +3  -0      ossp-pkg/xds/ChangeLog
    1.8         +4  -4      ossp-pkg/xds/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ChangeLog
  --- ossp-pkg/xds/ChangeLog	2 Jun 2005 18:43:06 -0000	1.6
  +++ ossp-pkg/xds/ChangeLog	2 Jun 2005 18:45:48 -0000	1.7
  @@ -13,6 +13,9 @@
   
     Changes between 0.9.1 and 0.9.2 (17-Sep-2004 to xx-xxx-2005)
   
  +   o Upgraded build environment to GNU libtool 1.5.18
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
      o Fix XDR string decoding function by NUL terminating
        the target buffer (instead of the source buffer).
        [Unknown <ossp@jm.2good.nu>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 devtool.conf
  --- ossp-pkg/xds/devtool.conf	12 Sep 2004 17:20:36 -0000	1.7
  +++ ossp-pkg/xds/devtool.conf	2 Jun 2005 18:45:48 -0000	1.8
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   2.0.1 "2.0.*" all
  -    @autogen libtool  1.5.8 "1.5*"
  -    @autogen autoconf 2.59  "2.5[3-9]*"
  +    @autogen shtool   2.0.1  "2.0.*" all
  +    @autogen libtool  1.5.18 "1.5*"
  +    @autogen autoconf 2.59   "2.5[3-9]*"
   
   %autoclean
       @autoclean shtool
  @@ -13,7 +13,7 @@
       @autoclean autoconf
   
   %configure
  -    CC=gcc35 ./configure \
  +    ./configure \
           --prefix=/tmp/xds \
           --disable-shared \
           --enable-maintainer \
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jun  2 20:49:02 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 058AC752EE2; Thu,  2 Jun 2005 20:49:02 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/xds/ ChangeLog
Message-Id: <20050602184902.058AC752EE2@mail.ossp.org>
Date: Thu,  2 Jun 2005 20:49:02 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Jun-2005 20:49:02
  Branch: HEAD                             Handle: 2005060219490100

  Modified files:
    ossp-pkg/xds            ChangeLog

  Log:
    prepare for release

  Summary:
    Revision    Changes     Path
    1.8         +1  -1      ossp-pkg/xds/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 ChangeLog
  --- ossp-pkg/xds/ChangeLog	2 Jun 2005 18:45:48 -0000	1.7
  +++ ossp-pkg/xds/ChangeLog	2 Jun 2005 18:49:01 -0000	1.8
  @@ -11,7 +11,7 @@
     This is a list of all source changes to OSSP xds.
     For less details please have a look at the NEWS file.
   
  -  Changes between 0.9.1 and 0.9.2 (17-Sep-2004 to xx-xxx-2005)
  +  Changes between 0.9.1 and 0.9.2 (17-Sep-2004 to 02-Jun-2005)
   
      o Upgraded build environment to GNU libtool 1.5.18
        [Ralf S. Engelschall <rse@engelschall.com>]
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jun  2 20:49:16 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id BC89C752F65; Thu,  2 Jun 2005 20:49:16 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/xds/ ChangeLog
Message-Id: <20050602184916.BC89C752F65@mail.ossp.org>
Date: Thu,  2 Jun 2005 20:49:16 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Jun-2005 20:49:16
  Branch: HEAD                             Handle: 2005060219491600

  Modified files:
    ossp-pkg/xds            ChangeLog

  Log:
    fix typo

  Summary:
    Revision    Changes     Path
    1.9         +1  -1      ossp-pkg/xds/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 ChangeLog
  --- ossp-pkg/xds/ChangeLog	2 Jun 2005 18:49:01 -0000	1.8
  +++ ossp-pkg/xds/ChangeLog	2 Jun 2005 18:49:16 -0000	1.9
  @@ -32,7 +32,7 @@
        GNU libtool 1.5.8 and GNU autoconf 2.59
        [Ralf S. Engelschall <rse@engelschall.com>]
   
  -  Changes between GENSIS and 0.9.0 (xx-Mar-2001 to 17-Feb-2003)
  +  Changes between GENESIS and 0.9.0 (xx-Mar-2001 to 17-Feb-2003)
   
      o Upgraded devtool stuff.
        [Ralf S. Engelschall <rse@engelschall.com>]
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jun  2 20:49:40 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 7BCE7752F8D; Thu,  2 Jun 2005 20:49:40 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/xds/ README xds_version.c
Message-Id: <20050602184940.7BCE7752F8D@mail.ossp.org>
Date: Thu,  2 Jun 2005 20:49:40 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Jun-2005 20:49:40
  Branch: HEAD                             Handle: 2005060219494000

  Modified files:
    ossp-pkg/xds            README xds_version.c

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.12        +1  -1      ossp-pkg/xds/README
    1.5         +9  -9      ossp-pkg/xds/xds_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/README
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 README
  --- ossp-pkg/xds/README	12 Sep 2004 17:32:51 -0000	1.11
  +++ ossp-pkg/xds/README	2 Jun 2005 18:49:40 -0000	1.12
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     /_/\_\__,_|___/
   
     OSSP xds - eXtensible Data Serialization
  -  Version 0.9.1 (12-Sep-2004)
  +  Version 0.9.2 (02-Jun-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds_version.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 xds_version.c
  --- ossp-pkg/xds/xds_version.c	12 Sep 2004 17:32:51 -0000	1.4
  +++ ossp-pkg/xds/xds_version.c	2 Jun 2005 18:49:40 -0000	1.5
  @@ -8,7 +8,7 @@
   #ifndef _XDS_VERSION_C_
   #define _XDS_VERSION_C_
   
  -#define XDS_VERSION 0x009201
  +#define XDS_VERSION 0x009202
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _XDS_VERSION_C_AS_HEADER_
   
   xds_version_t xds_version = {
  -    0x009201,
  -    "0.9.1",
  -    "0.9.1 (12-Sep-2004)",
  -    "This is OSSP xds, Version 0.9.1 (12-Sep-2004)",
  -    "OSSP xds 0.9.1 (12-Sep-2004)",
  -    "OSSP xds/0.9.1",
  -    "@(#)OSSP xds 0.9.1 (12-Sep-2004)",
  -    "$Id: OSSP xds 0.9.1 (12-Sep-2004) $"
  +    0x009202,
  +    "0.9.2",
  +    "0.9.2 (02-Jun-2005)",
  +    "This is OSSP xds, Version 0.9.2 (02-Jun-2005)",
  +    "OSSP xds 0.9.2 (02-Jun-2005)",
  +    "OSSP xds/0.9.2",
  +    "@(#)OSSP xds 0.9.2 (02-Jun-2005)",
  +    "$Id: OSSP xds 0.9.2 (02-Jun-2005) $"
   };
   
   #endif /* _XDS_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jun  2 20:51:45 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id EAF0B752F88; Thu,  2 Jun 2005 20:51:44 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/xds/ ChangeLog LICENSE Makefile.in README aclocal...
Message-Id: <20050602185144.EAF0B752F88@mail.ossp.org>
Date: Thu,  2 Jun 2005 20:51:44 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Jun-2005 20:51:44
  Branch: HEAD                             Handle: 2005060219514400

  Modified files:
    ossp-pkg/xds            ChangeLog LICENSE Makefile.in README aclocal.m4
                            configure.ac xds-config.in xds-config.pod
                            xds-xml.dtd xds.c xds.h.in xds.m4 xds.pod
                            xds_engine_xdr.c xds_engine_xml.c xds_p.h
                            xds_test.sh xds_test_lib.c xds_test_xdr.c
                            xds_test_xml.c

  Log:
    Bumped year in copyright messages for year 2005.

  Summary:
    Revision    Changes     Path
    1.10        +3  -0      ossp-pkg/xds/ChangeLog
    1.8         +3  -3      ossp-pkg/xds/LICENSE
    1.41        +3  -3      ossp-pkg/xds/Makefile.in
    1.13        +3  -3      ossp-pkg/xds/README
    1.9         +3  -3      ossp-pkg/xds/aclocal.m4
    1.28        +6  -6      ossp-pkg/xds/configure.ac
    1.8         +3  -3      ossp-pkg/xds/xds-config.in
    1.8         +3  -3      ossp-pkg/xds/xds-config.pod
    1.8         +3  -3      ossp-pkg/xds/xds-xml.dtd
    1.13        +3  -3      ossp-pkg/xds/xds.c
    1.25        +3  -3      ossp-pkg/xds/xds.h.in
    1.8         +3  -3      ossp-pkg/xds/xds.m4
    1.21        +3  -3      ossp-pkg/xds/xds.pod
    1.17        +3  -3      ossp-pkg/xds/xds_engine_xdr.c
    1.14        +3  -3      ossp-pkg/xds/xds_engine_xml.c
    1.12        +3  -3      ossp-pkg/xds/xds_p.h
    1.10        +3  -3      ossp-pkg/xds/xds_test.sh
    1.13        +3  -3      ossp-pkg/xds/xds_test_lib.c
    1.14        +3  -3      ossp-pkg/xds/xds_test_xdr.c
    1.12        +3  -3      ossp-pkg/xds/xds_test_xml.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 ChangeLog
  --- ossp-pkg/xds/ChangeLog	2 Jun 2005 18:49:16 -0000	1.9
  +++ ossp-pkg/xds/ChangeLog	2 Jun 2005 18:51:44 -0000	1.10
  @@ -20,6 +20,9 @@
        the target buffer (instead of the source buffer).
        [Unknown <ossp@jm.2good.nu>]
   
  +   o Bumped year in copyright messages for year 2005.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
     Changes between 0.9.0 and 0.9.1 (17-Feb-2003 to 12-Sep-2004)
   
      o Fixed a few size_t/int conflicts and uninitialized value warnings.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/LICENSE
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 LICENSE
  --- ossp-pkg/xds/LICENSE	12 Sep 2004 17:32:14 -0000	1.7
  +++ ossp-pkg/xds/LICENSE	2 Jun 2005 18:51:44 -0000	1.8
  @@ -1,9 +1,9 @@
   
   OSSP xds - Extensible Data Serialization
   
  -Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -Copyright (c) 2001-2004 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +Copyright (c) 2001-2005 Cable & Wireless Deutschland <http://www.cw.com/de/>
   
   This file is part of OSSP xds, an extensible data serialization
   library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.40 -r1.41 Makefile.in
  --- ossp-pkg/xds/Makefile.in	12 Sep 2004 17:32:14 -0000	1.40
  +++ ossp-pkg/xds/Makefile.in	2 Jun 2005 18:51:44 -0000	1.41
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP xds - Extensible Data Serialization
  -##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP xds, an extensible data serialization
   ##  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/README
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 README
  --- ossp-pkg/xds/README	2 Jun 2005 18:49:40 -0000	1.12
  +++ ossp-pkg/xds/README	2 Jun 2005 18:51:44 -0000	1.13
  @@ -20,9 +20,9 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   
     This file is part of OSSP xds, an extensible data serialization
     library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 aclocal.m4
  --- ossp-pkg/xds/aclocal.m4	12 Sep 2004 17:32:14 -0000	1.8
  +++ ossp-pkg/xds/aclocal.m4	2 Jun 2005 18:51:44 -0000	1.9
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP xds - Extensible Data Serialization
  -dnl ##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +dnl ##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   dnl ##
   dnl ##  This file is part of OSSP xds, an extensible data serialization
   dnl ##  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/configure.ac
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 configure.ac
  --- ossp-pkg/xds/configure.ac	12 Sep 2004 17:32:14 -0000	1.27
  +++ ossp-pkg/xds/configure.ac	2 Jun 2005 18:51:44 -0000	1.28
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP xds - Extensible Data Serialization
  -dnl ##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +dnl ##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   dnl ##
   dnl ##  This file is part of OSSP xds, an extensible data serialization
   dnl ##  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ -34,9 +34,9 @@
   AC_HEADLINE(dnl
   OSSP xds, eXtensible Data Serialization, dnl
   XDS_VERSION, xds_version.c, dnl
  -[Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>])
  +[Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>])
   AC_PLATFORM(PLATFORM)
   
   AC_MSG_PART(Build Tools)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds-config.in
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 xds-config.in
  --- ossp-pkg/xds/xds-config.in	12 Sep 2004 17:32:14 -0000	1.7
  +++ ossp-pkg/xds/xds-config.in	2 Jun 2005 18:51:44 -0000	1.8
  @@ -1,9 +1,9 @@
   #!/bin/sh
   ##
   ##  OSSP xds - Extensible Data Serialization
  -##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP xds, an extensible data serialization
   ##  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds-config.pod
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 xds-config.pod
  --- ossp-pkg/xds/xds-config.pod	12 Sep 2004 17:32:14 -0000	1.7
  +++ ossp-pkg/xds/xds-config.pod	2 Jun 2005 18:51:44 -0000	1.8
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP xds - Extensible Data Serialization
  -##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP xds, an extensible data serialization
   ##  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds-xml.dtd
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 xds-xml.dtd
  --- ossp-pkg/xds/xds-xml.dtd	12 Sep 2004 17:32:14 -0000	1.7
  +++ ossp-pkg/xds/xds-xml.dtd	2 Jun 2005 18:51:44 -0000	1.8
  @@ -1,8 +1,8 @@
   <!-- ===========================================================
        OSSP xds - Extensible Data Serialization
  -     Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -     Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -     Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +     Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +     Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +     Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   
        This file is part of OSSP xds, an extensible data serialization
        library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds.c
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 xds.c
  --- ossp-pkg/xds/xds.c	12 Sep 2004 17:32:14 -0000	1.12
  +++ ossp-pkg/xds/xds.c	2 Jun 2005 18:51:44 -0000	1.13
  @@ -1,8 +1,8 @@
   /*
   **  OSSP xds - Extensible Data Serialization
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP xds, an extensible data serialization
   **  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds.h.in
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 xds.h.in
  --- ossp-pkg/xds/xds.h.in	30 Mar 2005 19:22:50 -0000	1.24
  +++ ossp-pkg/xds/xds.h.in	2 Jun 2005 18:51:44 -0000	1.25
  @@ -1,8 +1,8 @@
   /*
   **  OSSP xds - Extensible Data Serialization
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP xds, an extensible data serialization
   **  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds.m4
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 xds.m4
  --- ossp-pkg/xds/xds.m4	12 Sep 2004 17:32:14 -0000	1.7
  +++ ossp-pkg/xds/xds.m4	2 Jun 2005 18:51:44 -0000	1.8
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP xds - Extensible Data Serialization
  -dnl ##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +dnl ##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   dnl ##
   dnl ##  This file is part of OSSP xds, an extensible data serialization
   dnl ##  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds.pod
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 xds.pod
  --- ossp-pkg/xds/xds.pod	12 Sep 2004 17:34:05 -0000	1.20
  +++ ossp-pkg/xds/xds.pod	2 Jun 2005 18:51:44 -0000	1.21
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP xds - Extensible Data Serialization
  -##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP xds, an extensible data serialization
   ##  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds_engine_xdr.c
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 xds_engine_xdr.c
  --- ossp-pkg/xds/xds_engine_xdr.c	2 Jun 2005 18:43:06 -0000	1.16
  +++ ossp-pkg/xds/xds_engine_xdr.c	2 Jun 2005 18:51:44 -0000	1.17
  @@ -1,8 +1,8 @@
   /*
   **  OSSP xds - Extensible Data Serialization
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP xds, an extensible data serialization
   **  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds_engine_xml.c
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 xds_engine_xml.c
  --- ossp-pkg/xds/xds_engine_xml.c	12 Sep 2004 17:32:14 -0000	1.13
  +++ ossp-pkg/xds/xds_engine_xml.c	2 Jun 2005 18:51:44 -0000	1.14
  @@ -1,8 +1,8 @@
   /*
   **  OSSP xds - Extensible Data Serialization
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP xds, an extensible data serialization
   **  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds_p.h
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 xds_p.h
  --- ossp-pkg/xds/xds_p.h	12 Sep 2004 17:32:14 -0000	1.11
  +++ ossp-pkg/xds/xds_p.h	2 Jun 2005 18:51:44 -0000	1.12
  @@ -1,8 +1,8 @@
   /*
   **  OSSP xds - Extensible Data Serialization
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP xds, an extensible data serialization
   **  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds_test.sh
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 xds_test.sh
  --- ossp-pkg/xds/xds_test.sh	12 Sep 2004 17:32:14 -0000	1.9
  +++ ossp-pkg/xds/xds_test.sh	2 Jun 2005 18:51:44 -0000	1.10
  @@ -1,9 +1,9 @@
   #!/bin/sh
   ##
   ##  OSSP xds - Extensible Data Serialization
  -##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP xds, an extensible data serialization
   ##  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds_test_lib.c
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 xds_test_lib.c
  --- ossp-pkg/xds/xds_test_lib.c	12 Sep 2004 17:32:14 -0000	1.12
  +++ ossp-pkg/xds/xds_test_lib.c	2 Jun 2005 18:51:44 -0000	1.13
  @@ -1,8 +1,8 @@
   /*
   **  OSSP xds - Extensible Data Serialization
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP xds, an extensible data serialization
   **  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds_test_xdr.c
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 xds_test_xdr.c
  --- ossp-pkg/xds/xds_test_xdr.c	12 Sep 2004 17:32:14 -0000	1.13
  +++ ossp-pkg/xds/xds_test_xdr.c	2 Jun 2005 18:51:44 -0000	1.14
  @@ -1,8 +1,8 @@
   /*
   **  OSSP xds - Extensible Data Serialization
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP xds, an extensible data serialization
   **  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds_test_xml.c
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 xds_test_xml.c
  --- ossp-pkg/xds/xds_test_xml.c	12 Sep 2004 17:32:14 -0000	1.11
  +++ ossp-pkg/xds/xds_test_xml.c	2 Jun 2005 18:51:44 -0000	1.12
  @@ -1,8 +1,8 @@
   /*
   **  OSSP xds - Extensible Data Serialization
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP xds, an extensible data serialization
   **  library which can be found at http://www.ossp.org/pkg/lib/xds/.
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jun  2 20:56:05 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 9509D752FA8; Thu,  2 Jun 2005 20:56:05 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20050602185605.9509D752FA8@mail.ossp.org>
Date: Thu,  2 Jun 2005 20:56:05 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   02-Jun-2005 20:56:05
  Branch: HEAD                             Handle: 2005060219560401

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/xds    index.wml

  Log:
    release OSSP xds 0.9.2

  Summary:
    Revision    Changes     Path
    1.123       +1  -0      ossp-web/new/news.txt
    1.105       +1  -1      ossp-web/pkg/lib/index.wml
    1.9         +2  -2      ossp-web/pkg/lib/xds/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.122 -r1.123 news.txt
  --- ossp-web/new/news.txt	21 Feb 2005 16:10:09 -0000	1.122
  +++ ossp-web/new/news.txt	2 Jun 2005 18:56:04 -0000	1.123
  @@ -1,3 +1,4 @@
  +02-Jun-2005: Released L<OSSP xds> 0.9.2
   18-Feb-2005: Released L<OSSP fsl> 1.6.0
   18-Feb-2005: Released L<OSSP cfg> 0.9.9
   18-Feb-2005: Released L<OSSP l2> 0.9.10
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.104 -r1.105 index.wml
  --- ossp-web/pkg/lib/index.wml	21 Feb 2005 16:10:09 -0000	1.104
  +++ ossp-web/pkg/lib/index.wml	2 Jun 2005 18:56:05 -0000	1.105
  @@ -39,7 +39,7 @@
   			done=95 stable=none unstable=0.9.3>
     <pkg_item name="xds" longname="OSSP xds" type="lib"
               desc="Extensible Data Serialization"
  -			done=95 stable=none unstable=0.9.1>
  +			done=95 stable=none unstable=0.9.2>
     <pkg_item name="str" longname="OSSP str" type="lib"
               desc="String Handling"
   			done=95 stable=none unstable=0.9.10>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/xds/index.wml
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 index.wml
  --- ossp-web/pkg/lib/xds/index.wml	12 Sep 2004 17:39:28 -0000	1.8
  +++ ossp-web/pkg/lib/xds/index.wml	2 Jun 2005 18:56:05 -0000	1.9
  @@ -30,7 +30,7 @@
   <pkg_status
       name="xds" assign="rse"
       stable="none" stable_date="none"
  -    unstable="0.9.1" unstable_date="12-Sep-2004"
  +    unstable="0.9.2" unstable_date="02-Jun-2005"
   	done=100>
   
   <h2>See Also</h2>
  @@ -48,7 +48,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/xds/
       directory=$(FTP_ROOT_DIR)/pkg/lib/xds/
       files="xds-*.tar.gz" 
  -	stable="none" unstable="xds-0.9.1.tar.gz">
  +	stable="none" unstable="xds-0.9.2.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jun 11 12:58:11 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id CC57D752F6E; Sat, 11 Jun 2005 12:58:10 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog sh.platform
Message-Id: <20050611105810.CC57D752F6E@mail.ossp.org>
Date: Sat, 11 Jun 2005 12:58:10 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Jun-2005 12:58:10
  Branch: HEAD                             Handle: 2005061111581000

  Modified files:
    ossp-pkg/shtool         ChangeLog sh.platform

  Log:
    Add Mandriva Linux support to "shtool platform".

  Summary:
    Revision    Changes     Path
    1.210       +3  -0      ossp-pkg/shtool/ChangeLog
    1.11        +11 -11     ossp-pkg/shtool/sh.platform
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.209 -r1.210 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	2 Jun 2005 18:22:00 -0000	1.209
  +++ ossp-pkg/shtool/ChangeLog	11 Jun 2005 10:58:10 -0000	1.210
  @@ -11,6 +11,9 @@
   
    Changes between 2.0.1 and 2.0.2 (11-Aug-2004 to xx-XXX-2005):
   
  +   *) Add Mandriva Linux support to "shtool platform".
  +      [Ralf S. Engelschall]
  +
      *) Add IBM OS/400 PASE support to "shtool platform".
         [Henri Gomez <henri.gomez@gmail.com>]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.platform
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 sh.platform
  --- ossp-pkg/shtool/sh.platform	27 May 2005 09:23:01 -0000	1.10
  +++ ossp-pkg/shtool/sh.platform	11 Jun 2005 10:58:10 -0000	1.11
  @@ -213,7 +213,7 @@
           if [ ".$SP" = . ]; then
               for tagfile in x \
                   `cd /etc && \
  -                /bin/ls *[_-]release *[_-]version 2>/dev/null | \
  +                /bin/ls *[_-]release *[_-]version 2>/dev/null | sort | \
                   sed -e '/^redhat-release$/d' -e '/^lsb-release$/d'; \
                   echo redhat-release lsb-release`
               do
  @@ -234,16 +234,16 @@
                               n="<R>ed <H>at <L>inux"
                           fi
                           ;;
  -                    debian      ) n="Debian[ GNU/Linux]"        ;;
  -                    ubuntu      ) n="Ubuntu[ GNU/Linux]"        ;;
  -                    fedora      ) n="<Fedora> Core[ GNU/Linux]" ;;
  -                    suse        ) n="SuSE[ Linux]"              ;;
  -                    mandrake    ) n="Mandrake[ Linux]"          ;;
  -                    gentoo      ) n="Gentoo[ GNU/Linux]"        ;;
  -                    slackware   ) n="Slackware[ Linux]"         ;;
  -                    turbolinux  ) n="TurboLinux"                ;;
  -                    unitedlinux ) n="UnitedLinux"               ;;
  -                    *           ) n="${n}[ GNU/Linux]"          ;;
  +                    debian            ) n="Debian[ GNU/Linux]"        ;;
  +                    ubuntu            ) n="Ubuntu[ GNU/Linux]"        ;;
  +                    fedora            ) n="<Fedora> Core[ GNU/Linux]" ;;
  +                    suse              ) n="SuSE[ Linux]"              ;;
  +                    mandrake|mandriva ) n="Mandriva[ Linux]"          ;;
  +                    gentoo            ) n="Gentoo[ GNU/Linux]"        ;;
  +                    slackware         ) n="Slackware[ Linux]"         ;;
  +                    turbolinux        ) n="TurboLinux"                ;;
  +                    unitedlinux       ) n="UnitedLinux"               ;;
  +                    *                 ) n="${n}[ GNU/Linux]"          ;;
                   esac
                   case "$n" in
                       *"<"*">"* ) SP="$n <$v>" ;;
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jun 15 10:11:16 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 7ED02752F8E; Wed, 15 Jun 2005 10:11:16 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog sh.arx sh.common
Message-Id: <20050615081116.7ED02752F8E@mail.ossp.org>
Date: Wed, 15 Jun 2005 10:11:16 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Jun-2005 10:11:16
  Branch: HEAD                             Handle: 2005061509111600

  Modified files:
    ossp-pkg/shtool         ChangeLog sh.arx sh.common

  Log:
    Fix insecure temporary file handling (CAN-2005-1751, CAN-2005-1759).
    
    Submitted by: Eric Romang <eromang@zataz.net>

  Summary:
    Revision    Changes     Path
    1.211       +4  -1      ossp-pkg/shtool/ChangeLog
    1.22        +11 -11     ossp-pkg/shtool/sh.arx
    1.24        +15 -5      ossp-pkg/shtool/sh.common
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.210 -r1.211 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	11 Jun 2005 10:58:10 -0000	1.210
  +++ ossp-pkg/shtool/ChangeLog	15 Jun 2005 08:11:16 -0000	1.211
  @@ -9,7 +9,10 @@
   
    ChangeLog
   
  - Changes between 2.0.1 and 2.0.2 (11-Aug-2004 to xx-XXX-2005):
  + Changes between 2.0.1 and 2.0.2 (11-Aug-2004 to 15-Jun-2005):
  +
  +   *) Fix insecure temporary file handling (CAN-2005-1751, CAN-2005-1759).
  +      [Eric Romang <eromang@zataz.net>, Ralf S. Engelschall]
   
      *) Add Mandriva Linux support to "shtool platform".
         [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.arx
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 sh.arx
  --- ossp-pkg/shtool/sh.arx	12 Feb 2004 16:06:26 -0000	1.21
  +++ ossp-pkg/shtool/sh.arx	15 Jun 2005 08:11:16 -0000	1.22
  @@ -34,7 +34,7 @@
   files="$*"
   
   #   walk through the file list and expand archives members
  -tmpdir=`echo $archive | sed -e 's;[^/]*$;.arx;'`
  +ar_tmpdir=`echo $archive | sed -e 's;[^/]*$;.arx;'`
   nfiles=''
   if [ ".$files" != . ]; then
       for file in $files; do
  @@ -44,13 +44,13 @@
           fi
           case $file in
               *.a )
  -                if [ ! -d $tmpdir ]; then
  +                if [ ! -d $ar_tmpdir ]; then
                       if [ ".$opt_t" = .yes ]; then
  -                        echo "mkdir $tmpdir" 1>&2
  +                        echo "mkdir $ar_tmpdir" 1>&2
                       fi
  -                    mkdir $tmpdir
  +                    mkdir $ar_tmpdir
                   fi
  -                case $tmpdir in
  +                case $ar_tmpdir in
                        .arx )
                            from="../$file"
                            ;;
  @@ -61,16 +61,16 @@
                            ;;
                   esac
                   if [ ".$opt_t" = .yes ]; then
  -                    echo "(cd $tmpdir && $ar_prg x $from)" 1>&2
  +                    echo "(cd $ar_tmpdir && $ar_prg x $from)" 1>&2
                   fi
  -                (cd $tmpdir && eval $ar_prg x $from)
  +                (cd $ar_tmpdir && eval $ar_prg x $from)
                   if [ $? -ne 0 ]; then
                       echo "$msgprefix:Error: member extraction failed for archive: $file" 1>&2
                       shtool_exit 1
                   fi
                   for member in - `eval $ar_prg t $file | sed -e '/_\.SYMDEF/d'`; do
                       [ ".$member" = .- ] && continue
  -                    nfiles="$nfiles $tmpdir/$member"
  +                    nfiles="$nfiles $ar_tmpdir/$member"
                   done
                   ;;
               * )
  @@ -91,11 +91,11 @@
   fi
   
   #   cleanup and die gracefully
  -if [ -d $tmpdir ]; then
  +if [ -d $ar_tmpdir ]; then
       if [ ".$opt_t" = .yes ]; then
  -        echo "rm -rf $tmpdir" 1>&2
  +        echo "rm -rf $ar_tmpdir" 1>&2
       fi
  -    rm -rf $tmpdir
  +    rm -rf $ar_tmpdir
   fi
   
   shtool_exit 0
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.common
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 sh.common
  --- ossp-pkg/shtool/sh.common	7 Apr 2004 07:55:02 -0000	1.23
  +++ ossp-pkg/shtool/sh.common	15 Jun 2005 08:11:16 -0000	1.24
  @@ -161,6 +161,7 @@
   
   #   establish a temporary file on request
   if [ ".$gen_tmpfile" = .yes ]; then
  +    #   create (explicitly) secure temporary directory
       if [ ".$TMPDIR" != . ]; then
           tmpdir="$TMPDIR"
       elif [ ".$TEMPDIR" != . ]; then
  @@ -168,10 +169,19 @@
       else
           tmpdir="/tmp"
       fi
  -    tmpfile="$tmpdir/.shtool.$$"
  -    rm -f $tmpfile >/dev/null 2>&1
  -    touch $tmpfile
  -    chmod 600 $tmpfile
  +    tmpdir="$tmpdir/.shtool.$$"
  +    ( umask 077
  +      rm -rf "$tmpdir" >/dev/null 2>&1 || true
  +      mkdir  "$tmpdir" >/dev/null 2>&1
  +      if [ $? -ne 0 ]; then
  +          echo "$msgprefix:Error: failed to create temporary directory \`$tmpdir'" 1>&2
  +          exit 1
  +      fi
  +    )
  +
  +    #   create (implicitly) secure temporary file
  +    tmpfile="$tmpdir/shtool.tmp"
  +    touch "$tmpfile"
   fi
   
   #   utility function: map string to lower case
  @@ -188,7 +198,7 @@
   shtool_exit () {
       rc="$1"
       if [ ".$gen_tmpfile" = .yes ]; then
  -        rm -f $tmpfile >/dev/null 2>&1 || true
  +        rm -rf "$tmpdir" >/dev/null 2>&1 || true
       fi
       exit $rc
   }
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jun 15 10:14:37 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 3A91E752FB4; Wed, 15 Jun 2005 10:14:37 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog Makefile.in README configure.ac...
Message-Id: <20050615081437.3A91E752FB4@mail.ossp.org>
Date: Wed, 15 Jun 2005 10:14:37 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Jun-2005 10:14:37
  Branch: HEAD                             Handle: 2005061509143501

  Modified files:
    ossp-pkg/shtool         ChangeLog Makefile.in README configure.ac
                            devtool.func sh.arx sh.echo sh.fixperm sh.install
                            sh.mdate sh.mkdir sh.mkln sh.mkshadow sh.move
                            sh.path sh.platform sh.prop sh.rotate sh.scpp
                            sh.slo sh.subst sh.table sh.tarball sh.version
                            shtool.m4 shtool.pod shtool.spec shtoolize.in
                            shtoolize.pod test.db test.sh

  Log:
    Adjust copyright for year 2005

  Summary:
    Revision    Changes     Path
    1.212       +3  -0      ossp-pkg/shtool/ChangeLog
    1.51        +1  -1      ossp-pkg/shtool/Makefile.in
    1.107       +1  -1      ossp-pkg/shtool/README
    1.6         +2  -2      ossp-pkg/shtool/configure.ac
    1.6         +1  -1      ossp-pkg/shtool/devtool.func
    1.23        +1  -1      ossp-pkg/shtool/sh.arx
    1.39        +1  -1      ossp-pkg/shtool/sh.echo
    1.19        +1  -1      ossp-pkg/shtool/sh.fixperm
    1.32        +1  -1      ossp-pkg/shtool/sh.install
    1.15        +1  -1      ossp-pkg/shtool/sh.mdate
    1.25        +1  -1      ossp-pkg/shtool/sh.mkdir
    1.19        +1  -1      ossp-pkg/shtool/sh.mkln
    1.25        +1  -1      ossp-pkg/shtool/sh.mkshadow
    1.21        +1  -1      ossp-pkg/shtool/sh.move
    1.28        +1  -1      ossp-pkg/shtool/sh.path
    1.12        +1  -1      ossp-pkg/shtool/sh.platform
    1.19        +1  -1      ossp-pkg/shtool/sh.prop
    1.11        +1  -1      ossp-pkg/shtool/sh.rotate
    1.27        +1  -1      ossp-pkg/shtool/sh.scpp
    1.25        +1  -1      ossp-pkg/shtool/sh.slo
    1.15        +1  -1      ossp-pkg/shtool/sh.subst
    1.21        +1  -1      ossp-pkg/shtool/sh.table
    1.23        +1  -1      ossp-pkg/shtool/sh.tarball
    1.38        +1  -1      ossp-pkg/shtool/sh.version
    1.8         +1  -1      ossp-pkg/shtool/shtool.m4
    1.68        +1  -1      ossp-pkg/shtool/shtool.pod
    1.25        +1  -1      ossp-pkg/shtool/shtool.spec
    1.35        +3  -3      ossp-pkg/shtool/shtoolize.in
    1.13        +1  -1      ossp-pkg/shtool/shtoolize.pod
    1.23        +1  -1      ossp-pkg/shtool/test.db
    1.12        +1  -1      ossp-pkg/shtool/test.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.211 -r1.212 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	15 Jun 2005 08:11:16 -0000	1.211
  +++ ossp-pkg/shtool/ChangeLog	15 Jun 2005 08:14:35 -0000	1.212
  @@ -20,6 +20,9 @@
      *) Add IBM OS/400 PASE support to "shtool platform".
         [Henri Gomez <henri.gomez@gmail.com>]
   
  +   *) Adjust copyright for year 2005.
  +      [Ralf S. Engelschall]
  +
    Changes between 2.0.0 and 2.0.1 (02-Jul-2004 to 11-Aug-2004):
   
      *) Added M4 language output to "shtool version".
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.50 -r1.51 Makefile.in
  --- ossp-pkg/shtool/Makefile.in	12 Feb 2004 16:06:26 -0000	1.50
  +++ ossp-pkg/shtool/Makefile.in	15 Jun 2005 08:14:35 -0000	1.51
  @@ -1,6 +1,6 @@
   ##
   ##  Makefile for GNU shtool
  -##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/README
  ============================================================================
  $ cvs diff -u -r1.106 -r1.107 README
  --- ossp-pkg/shtool/README	11 Aug 2004 19:14:44 -0000	1.106
  +++ ossp-pkg/shtool/README	15 Jun 2005 08:14:35 -0000	1.107
  @@ -5,7 +5,7 @@
     |___/_| |_|\__\___/ \___/|_|
   
     GNU shtool -- The GNU Portable Shell Tool
  -  Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 1994-2005 Ralf S. Engelschall <rse@engelschall.com>
   
     http://www.gnu.org/software/shtool/
     ftp://ftp.gnu.org/gnu/shtool/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/configure.ac
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 configure.ac
  --- ossp-pkg/shtool/configure.ac	1 Jan 2004 16:54:20 -0000	1.5
  +++ ossp-pkg/shtool/configure.ac	15 Jun 2005 08:14:35 -0000	1.6
  @@ -1,6 +1,6 @@
   dnl ##
   dnl ##  configure.ac -- Autoconf source for GNU shtool
  -dnl ##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##
   dnl ##  This file is part of shtool and free software; you can redistribute
   dnl ##  it and/or modify it under the terms of the GNU General Public
  @@ -24,7 +24,7 @@
   
   SHTOOL_VERSION_STR="`sh sh.version -l txt -d long VERSION`"
   sh sh.echo -e "Configuring %BGNU shtool%b (Portable Shell Tool), version %B${SHTOOL_VERSION_STR}%b"
  -echo "Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>"
  +echo "Copyright (c) 1994-2005 Ralf S. Engelschall <rse@engelschall.com>"
   AC_SUBST(SHTOOL_VERSION_STR)
   
   AC_PREFIX_DEFAULT(/usr/local)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/devtool.func
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 devtool.func
  --- ossp-pkg/shtool/devtool.func	18 Feb 2004 09:57:19 -0000	1.5
  +++ ossp-pkg/shtool/devtool.func	15 Jun 2005 08:14:35 -0000	1.6
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com> 
   ##
   
   devtool_require () {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.arx
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 sh.arx
  --- ossp-pkg/shtool/sh.arx	15 Jun 2005 08:11:16 -0000	1.22
  +++ ossp-pkg/shtool/sh.arx	15 Jun 2005 08:14:35 -0000	1.23
  @@ -1,6 +1,6 @@
   ##
   ##  arx -- Extended archive command
  -##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.echo
  ============================================================================
  $ cvs diff -u -r1.38 -r1.39 sh.echo
  --- ossp-pkg/shtool/sh.echo	12 Feb 2004 16:06:26 -0000	1.38
  +++ ossp-pkg/shtool/sh.echo	15 Jun 2005 08:14:35 -0000	1.39
  @@ -1,6 +1,6 @@
   ##
   ##  echo -- Print string with optional construct expansion
  -##  Copyright (c) 1998-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.fixperm
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 sh.fixperm
  --- ossp-pkg/shtool/sh.fixperm	12 Feb 2004 16:06:26 -0000	1.18
  +++ ossp-pkg/shtool/sh.fixperm	15 Jun 2005 08:14:35 -0000	1.19
  @@ -1,6 +1,6 @@
   ##
   ##  fixperm -- Fix file permissions inside a source tree
  -##  Copyright (c) 1996-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1996-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.install
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 sh.install
  --- ossp-pkg/shtool/sh.install	12 Feb 2004 16:06:26 -0000	1.31
  +++ ossp-pkg/shtool/sh.install	15 Jun 2005 08:14:35 -0000	1.32
  @@ -1,6 +1,6 @@
   ##
   ##  install -- Install a program, script or datafile
  -##  Copyright (c) 1997-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1997-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.mdate
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 sh.mdate
  --- ossp-pkg/shtool/sh.mdate	12 Feb 2004 16:06:26 -0000	1.14
  +++ ossp-pkg/shtool/sh.mdate	15 Jun 2005 08:14:35 -0000	1.15
  @@ -1,7 +1,7 @@
   ##
   ##  mdate -- Pretty-print modification time of a file or dir
   ##  Copyright (c) 1995-1997 Free Software Foundation, Inc.
  -##  Copyright (c) 1998-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.mkdir
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 sh.mkdir
  --- ossp-pkg/shtool/sh.mkdir	12 Feb 2004 16:06:27 -0000	1.24
  +++ ossp-pkg/shtool/sh.mkdir	15 Jun 2005 08:14:35 -0000	1.25
  @@ -1,6 +1,6 @@
   ##
   ##  mkdir -- Make one or more directories
  -##  Copyright (c) 1996-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1996-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.mkln
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 sh.mkln
  --- ossp-pkg/shtool/sh.mkln	12 Feb 2004 16:06:27 -0000	1.18
  +++ ossp-pkg/shtool/sh.mkln	15 Jun 2005 08:14:35 -0000	1.19
  @@ -1,6 +1,6 @@
   ##
   ##  mkln -- Make link with calculation of relative paths
  -##  Copyright (c) 1998-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.mkshadow
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 sh.mkshadow
  --- ossp-pkg/shtool/sh.mkshadow	12 Feb 2004 16:06:27 -0000	1.24
  +++ ossp-pkg/shtool/sh.mkshadow	15 Jun 2005 08:14:35 -0000	1.25
  @@ -1,6 +1,6 @@
   ##
   ##  mkshadow -- Make a shadow tree through symbolic links
  -##  Copyright (c) 1998-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.move
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 sh.move
  --- ossp-pkg/shtool/sh.move	12 Feb 2004 16:06:27 -0000	1.20
  +++ ossp-pkg/shtool/sh.move	15 Jun 2005 08:14:35 -0000	1.21
  @@ -1,6 +1,6 @@
   ##
   ##  move -- Move files with simultaneous substitution
  -##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.path
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 sh.path
  --- ossp-pkg/shtool/sh.path	12 Feb 2004 16:06:27 -0000	1.27
  +++ ossp-pkg/shtool/sh.path	15 Jun 2005 08:14:35 -0000	1.28
  @@ -1,6 +1,6 @@
   ##
   ##  path -- Deal with program paths
  -##  Copyright (c) 1998-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.platform
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 sh.platform
  --- ossp-pkg/shtool/sh.platform	11 Jun 2005 10:58:10 -0000	1.11
  +++ ossp-pkg/shtool/sh.platform	15 Jun 2005 08:14:35 -0000	1.12
  @@ -1,6 +1,6 @@
   ##
   ##  platform -- Platform Identification Utility
  -##  Copyright (c) 2003-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.prop
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 sh.prop
  --- ossp-pkg/shtool/sh.prop	12 Feb 2004 16:06:27 -0000	1.18
  +++ ossp-pkg/shtool/sh.prop	15 Jun 2005 08:14:35 -0000	1.19
  @@ -1,6 +1,6 @@
   ##
   ##  prop -- Display progress with a running propeller
  -##  Copyright (c) 1998-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.rotate
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 sh.rotate
  --- ossp-pkg/shtool/sh.rotate	12 Feb 2004 16:06:27 -0000	1.10
  +++ ossp-pkg/shtool/sh.rotate	15 Jun 2005 08:14:35 -0000	1.11
  @@ -1,6 +1,6 @@
   ##
   ##  rotate -- Logfile rotation
  -##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.scpp
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 sh.scpp
  --- ossp-pkg/shtool/sh.scpp	12 Feb 2004 16:06:27 -0000	1.26
  +++ ossp-pkg/shtool/sh.scpp	15 Jun 2005 08:14:35 -0000	1.27
  @@ -1,6 +1,6 @@
   ##
   ##  scpp -- Sharing C Pre-Processor
  -##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.slo
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 sh.slo
  --- ossp-pkg/shtool/sh.slo	12 Feb 2004 16:06:27 -0000	1.24
  +++ ossp-pkg/shtool/sh.slo	15 Jun 2005 08:14:35 -0000	1.25
  @@ -1,6 +1,6 @@
   ##
   ##  slo -- Separate linker options by library class
  -##  Copyright (c) 1998-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.subst
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 sh.subst
  --- ossp-pkg/shtool/sh.subst	2 Jul 2004 13:06:36 -0000	1.14
  +++ ossp-pkg/shtool/sh.subst	15 Jun 2005 08:14:36 -0000	1.15
  @@ -1,6 +1,6 @@
   ##
   ##  subst -- Apply sed(1) substitution operations
  -##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.table
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 sh.table
  --- ossp-pkg/shtool/sh.table	12 Feb 2004 16:06:27 -0000	1.20
  +++ ossp-pkg/shtool/sh.table	15 Jun 2005 08:14:36 -0000	1.21
  @@ -1,6 +1,6 @@
   ##
   ##  table -- Pretty-print a field-separated list as a table
  -##  Copyright (c) 1998-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.tarball
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 sh.tarball
  --- ossp-pkg/shtool/sh.tarball	17 Feb 2004 08:54:14 -0000	1.22
  +++ ossp-pkg/shtool/sh.tarball	15 Jun 2005 08:14:36 -0000	1.23
  @@ -1,6 +1,6 @@
   ##
   ##  tarball -- Roll distribution tarballs
  -##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.version
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 sh.version
  --- ossp-pkg/shtool/sh.version	19 Jul 2004 07:41:34 -0000	1.37
  +++ ossp-pkg/shtool/sh.version	15 Jun 2005 08:14:36 -0000	1.38
  @@ -1,6 +1,6 @@
   ##
   ##  version -- Maintain a version information file
  -##  Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1994-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtool.m4
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 shtool.m4
  --- ossp-pkg/shtool/shtool.m4	19 Jul 2004 07:41:34 -0000	1.7
  +++ ossp-pkg/shtool/shtool.m4	15 Jun 2005 08:14:36 -0000	1.8
  @@ -1,6 +1,6 @@
   ##
   ##  shtool.m4 -- GNU shtool Autoconf macros
  -##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtool.pod
  ============================================================================
  $ cvs diff -u -r1.67 -r1.68 shtool.pod
  --- ossp-pkg/shtool/shtool.pod	2 Jul 2004 13:13:15 -0000	1.67
  +++ ossp-pkg/shtool/shtool.pod	15 Jun 2005 08:14:36 -0000	1.68
  @@ -1,6 +1,6 @@
   ##
   ##  shtool.pod -- Manual Page for shtool in POD format
  -##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtool.spec
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 shtool.spec
  --- ossp-pkg/shtool/shtool.spec	11 Aug 2004 19:14:44 -0000	1.24
  +++ ossp-pkg/shtool/shtool.spec	15 Jun 2005 08:14:36 -0000	1.25
  @@ -1,6 +1,6 @@
   ##
   ##  shtool.spec -- RPM specification for shtool package
  -##  Copyright (c) 2000-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtoolize.in
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 shtoolize.in
  --- ossp-pkg/shtool/shtoolize.in	12 Feb 2004 16:06:27 -0000	1.34
  +++ ossp-pkg/shtool/shtoolize.in	15 Jun 2005 08:14:36 -0000	1.35
  @@ -1,7 +1,7 @@
   #!@PERL@
   ##
   ##  shtoolize -- Build shtool script out of ingredient scripts
  -##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ -350,7 +350,7 @@
   #!/bin/sh
   ##
   ##  GNU shtool -- The GNU Portable Shell Tool
  -##  Copyright (c) 1994-2004 Ralf S. Engelschall <rse\@engelschall.com>
  +##  Copyright (c) 1994-2005 Ralf S. Engelschall <rse\@engelschall.com>
   ##
   ##  See http://www.gnu.org/software/shtool/ for more information.
   ##  See ftp://ftp.gnu.org/gnu/shtool/ for latest version.
  @@ -396,7 +396,7 @@
   fi
   if [ ".\$1" = ".-h" ] || [ ".\$1" = ".--help" ]; then
       echo "This is GNU shtool, version ${version}"
  -    echo "Copyright (c) 1994-2004 Ralf S. Engelschall <rse\@engelschall.com>"
  +    echo "Copyright (c) 1994-2005 Ralf S. Engelschall <rse\@engelschall.com>"
       echo "Report bugs to <bug-shtool\@gnu.org>"
       echo ''
       echo "Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtoolize.pod
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 shtoolize.pod
  --- ossp-pkg/shtool/shtoolize.pod	1 Jan 2004 16:54:20 -0000	1.12
  +++ ossp-pkg/shtool/shtoolize.pod	15 Jun 2005 08:14:36 -0000	1.13
  @@ -1,6 +1,6 @@
   ##
   ##  shtoolize.pod -- Manual Page for shtoolize in POD format
  -##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/test.db
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 test.db
  --- ossp-pkg/shtool/test.db	1 Jan 2004 16:54:20 -0000	1.22
  +++ ossp-pkg/shtool/test.db	15 Jun 2005 08:14:36 -0000	1.23
  @@ -1,6 +1,6 @@
   ##
   ##  test.db -- GNU shtool test suite (minimalistic)
  -##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   @begin{echo}
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/test.sh
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 test.sh
  --- ossp-pkg/shtool/test.sh	1 Jan 2004 16:54:20 -0000	1.11
  +++ ossp-pkg/shtool/test.sh	15 Jun 2005 08:14:36 -0000	1.12
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  test.sh -- GNU shtool test suite driver
  -##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jun 15 10:15:28 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id BC9D275301B; Wed, 15 Jun 2005 10:15:28 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ README VERSION shtool.spec
Message-Id: <20050615081528.BC9D275301B@mail.ossp.org>
Date: Wed, 15 Jun 2005 10:15:28 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Jun-2005 10:15:28
  Branch: HEAD                             Handle: 2005061509152800

  Modified files:
    ossp-pkg/shtool         README VERSION shtool.spec

  Log:
    bump version before release

  Summary:
    Revision    Changes     Path
    1.108       +1  -1      ossp-pkg/shtool/README
    1.82        +1  -1      ossp-pkg/shtool/VERSION
    1.26        +1  -1      ossp-pkg/shtool/shtool.spec
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/README
  ============================================================================
  $ cvs diff -u -r1.107 -r1.108 README
  --- ossp-pkg/shtool/README	15 Jun 2005 08:14:35 -0000	1.107
  +++ ossp-pkg/shtool/README	15 Jun 2005 08:15:28 -0000	1.108
  @@ -10,7 +10,7 @@
     http://www.gnu.org/software/shtool/
     ftp://ftp.gnu.org/gnu/shtool/
   
  -  Version 2.0.1 (11-Aug-2004)
  +  Version 2.0.2 (15-Jun-2005)
   
     The GNU shtool program is a compilation of small but very stable and
     portable shell scripts into a single shell tool. All ingredients
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/VERSION
  ============================================================================
  $ cvs diff -u -r1.81 -r1.82 VERSION
  --- ossp-pkg/shtool/VERSION	11 Aug 2004 19:14:44 -0000	1.81
  +++ ossp-pkg/shtool/VERSION	15 Jun 2005 08:15:28 -0000	1.82
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for GNU shtool (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is GNU shtool, Version 2.0.1 (11-Aug-2004)
  +  This is GNU shtool, Version 2.0.2 (15-Jun-2005)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtool.spec
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 shtool.spec
  --- ossp-pkg/shtool/shtool.spec	15 Jun 2005 08:14:36 -0000	1.25
  +++ ossp-pkg/shtool/shtool.spec	15 Jun 2005 08:15:28 -0000	1.26
  @@ -30,7 +30,7 @@
   %define prefix /usr/local
   %endif
   
  -%define ver 2.0.1
  +%define ver 2.0.2
   %define rel 0
   
   Name:       shtool
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jun 15 10:20:36 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 78DDC752F6D; Wed, 15 Jun 2005 10:20:36 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog
Message-Id: <20050615082036.78DDC752F6D@mail.ossp.org>
Date: Wed, 15 Jun 2005 10:20:36 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Jun-2005 10:20:36
  Branch: HEAD                             Handle: 2005061509203600

  Modified files:
    ossp-pkg/shtool         ChangeLog

  Log:
    Ubuntu Linux support was added, too

  Summary:
    Revision    Changes     Path
    1.213       +1  -1      ossp-pkg/shtool/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.212 -r1.213 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	15 Jun 2005 08:14:35 -0000	1.212
  +++ ossp-pkg/shtool/ChangeLog	15 Jun 2005 08:20:36 -0000	1.213
  @@ -14,7 +14,7 @@
      *) Fix insecure temporary file handling (CAN-2005-1751, CAN-2005-1759).
         [Eric Romang <eromang@zataz.net>, Ralf S. Engelschall]
   
  -   *) Add Mandriva Linux support to "shtool platform".
  +   *) Add Mandriva Linux and Ubuntu Linux support to "shtool platform".
         [Ralf S. Engelschall]
   
      *) Add IBM OS/400 PASE support to "shtool platform".
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jun 15 10:46:12 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 964D5752FA2; Wed, 15 Jun 2005 10:46:11 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/tool/ index.wml ossp-w...
Message-Id: <20050615084611.964D5752FA2@mail.ossp.org>
Date: Wed, 15 Jun 2005 10:46:11 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   15-Jun-2005 10:46:11
  Branch: HEAD                             Handle: 2005061509460902

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/shtool
                            index.wml

  Log:
    release OSSP/GNU shtool 2.0.2

  Summary:
    Revision    Changes     Path
    1.124       +1  -0      ossp-web/new/news.txt
    1.47        +1  -1      ossp-web/pkg/tool/index.wml
    1.12        +2  -2      ossp-web/pkg/tool/shtool/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.123 -r1.124 news.txt
  --- ossp-web/new/news.txt	2 Jun 2005 18:56:04 -0000	1.123
  +++ ossp-web/new/news.txt	15 Jun 2005 08:46:09 -0000	1.124
  @@ -1,3 +1,4 @@
  +15-Jun-2005: Released T<OSSP shtool> 2.0.2
   02-Jun-2005: Released L<OSSP xds> 0.9.2
   18-Feb-2005: Released L<OSSP fsl> 1.6.0
   18-Feb-2005: Released L<OSSP cfg> 0.9.9
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.46 -r1.47 index.wml
  --- ossp-web/pkg/tool/index.wml	6 Feb 2005 12:20:24 -0000	1.46
  +++ ossp-web/pkg/tool/index.wml	15 Jun 2005 08:46:10 -0000	1.47
  @@ -14,7 +14,7 @@
   <pkg_list>
     <pkg_item name="shtool" longname="GNU shtool" type="tool"
               desc="Portable Shell Tool"
  -		    done=100 stable="2.0.1" unstable=none>
  +		    done=100 stable="2.0.2" unstable=none>
     <pkg_item name="lmtp2nntp" longname="OSSP lmtp2nntp" type="tool"
               desc="Real-Time Mail to News Gateway"
               done=100 stable="1.3.0" unstable=none>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/shtool/index.wml
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 index.wml
  --- ossp-web/pkg/tool/shtool/index.wml	11 Aug 2004 19:20:38 -0000	1.11
  +++ ossp-web/pkg/tool/shtool/index.wml	15 Jun 2005 08:46:11 -0000	1.12
  @@ -40,7 +40,7 @@
   
   <pkg_status
       name="shtool" assign="rse"
  -    stable="2.0.1"   stable_date="11-Aug-2004"
  +    stable="2.0.2"   stable_date="15-Jun-2005"
       unstable="none"  unstable_date="none"
   	done=100>
   
  @@ -51,7 +51,7 @@
       url=$(FTP_ROOT_URL)/pkg/tool/shtool/
       directory=$(FTP_ROOT_DIR)/pkg/tool/shtool/
       files="shtool-*.tar.gz" 
  -	stable="shtool-2.0.1.tar.gz" unstable="none">
  +	stable="shtool-2.0.2.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jun 15 20:34:04 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 9FB78752F6C; Wed, 15 Jun 2005 20:34:04 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid_mac.c
Message-Id: <20050615183404.9FB78752F6C@mail.ossp.org>
Date: Wed, 15 Jun 2005 20:34:04 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Jun-2005 20:34:04
  Branch: HEAD                             Handle: 2005061519340400

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid_mac.c

  Log:
    Fix MAC address determination under Solaris by using the result of
    ioctl(...,SIOCGARP,...) only if arp_flags had ATF_COM set.

  Summary:
    Revision    Changes     Path
    1.74        +4  -0      ossp-pkg/uuid/ChangeLog
    1.8         +3  -1      ossp-pkg/uuid/uuid_mac.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.73 -r1.74 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	16 May 2005 09:59:39 -0000	1.73
  +++ ossp-pkg/uuid/ChangeLog	15 Jun 2005 18:34:04 -0000	1.74
  @@ -13,6 +13,10 @@
   
     Changes between 1.2.0 and 1.2.1 (23-Jan-2005 to xx-Mar-2005)
   
  +   o Fix MAC address determination under Solaris by using the result of
  +     ioctl(...,SIOCGARP,...) only if arp_flags had ATF_COM set.
  +     [Ralf S. Engelschall]
  +
      o Upgrade to GNU libtool 1.5.16.
        [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_mac.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 uuid_mac.c
  --- ossp-pkg/uuid/uuid_mac.c	29 Mar 2005 19:01:41 -0000	1.7
  +++ ossp-pkg/uuid/uuid_mac.c	15 Jun 2005 18:34:04 -0000	1.8
  @@ -166,9 +166,11 @@
               close(s);
               return FALSE;
           }
  +        close(s);
  +        if (!(ar.arp_flags & ATF_COM))
  +            return FALSE;
           for (i = 0; i < MAC_LEN; i++)
               data_ptr[i] = (unsigned char)(ar.arp_ha.sa_data[i] & 0xff);
  -        close(s);
           return TRUE;
       }
   #endif
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jul  5 21:05:44 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 5601F752EB8; Tue,  5 Jul 2005 21:05:42 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog sh.platform
Message-Id: <20050705190542.5601F752EB8@mail.ossp.org>
Date: Tue,  5 Jul 2005 21:05:42 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Jul-2005 21:05:41
  Branch: HEAD                             Handle: 2005070520054000

  Modified files:
    ossp-pkg/shtool         ChangeLog sh.platform

  Log:
    Improved FreeBSD/amd64 on iX86/EM64T detection within "shtool
    platform" by treating this as a native AMD64 platform similar to
    what the underlying OS does.

  Summary:
    Revision    Changes     Path
    1.214       +7  -0      ossp-pkg/shtool/ChangeLog
    1.13        +8  -7      ossp-pkg/shtool/sh.platform
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.213 -r1.214 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	15 Jun 2005 08:20:36 -0000	1.213
  +++ ossp-pkg/shtool/ChangeLog	5 Jul 2005 19:05:40 -0000	1.214
  @@ -9,6 +9,13 @@
   
    ChangeLog
   
  + Changes between 2.0.2 and 2.0.3 (15-Jun-2005 to xx-XXX-2005):
  +
  +   *) Improved FreeBSD/amd64 on iX86/EM64T detection within "shtool
  +      platform" by treating this as a native AMD64 platform similar to
  +      what the underlying OS does.
  +      [Ralf S. Engelschall]
  +
    Changes between 2.0.1 and 2.0.2 (11-Aug-2004 to 15-Jun-2005):
   
      *) Fix insecure temporary file handling (CAN-2005-1751, CAN-2005-1759).
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.platform
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 sh.platform
  --- ossp-pkg/shtool/sh.platform	15 Jun 2005 08:14:35 -0000	1.12
  +++ ossp-pkg/shtool/sh.platform	5 Jul 2005 19:05:40 -0000	1.13
  @@ -128,13 +128,14 @@
               i386 ) AC="iX86" ;;
           esac
           AP="${AC}"
  -        AT=`(/sbin/sysctl -n hw.model) 2>&1`
  -        case "${AT}" in
  -            *"Xeon"* | *"Pentium Pro"* | *"Cyrix 6x86MX"* | *"Pentium II"* | *"Pentium III"* | *"Pentium 4"* | *"Celeron"* ) AT="i686" ;;
  -            *"Pentium"* ) AT="i586" ;; *"i486[SD]X"* | *"Cyrix 486"* | *"Cyrix [56]x86"* | *"Blue Lightning" | *"Cyrix 486S/DX" ) AT="i486" ;;
  -            *"i386[SD]X"* | *"NexGen 586"* ) AT="i386" ;;
  -            * ) AT="${AP}" ;;
  -        esac
  +        AT="${AP}"
  +        if [ ".${AT}" = ".iX86" ]; then
  +            case "`(/sbin/sysctl -n hw.model) 2>&1`" in
  +                *"Xeon"* | *"Pentium Pro"* | *"Cyrix 6x86MX"* | *"Pentium II"* | *"Pentium III"* | *"Pentium 4"* | *"Celeron"* ) AT="i686" ;;
  +                *"Pentium"* ) AT="i586" ;; *"i486[SD]X"* | *"Cyrix 486"* | *"Cyrix [56]x86"* | *"Blue Lightning" | *"Cyrix 486S/DX" ) AT="i486" ;;
  +                *"i386[SD]X"* | *"NexGen 586"* ) AT="i386" ;;
  +            esac
  +        fi
           #   determine system
           r=`echo "${UNAME_RELEASE}" |\
              sed -e 's;[()];;' -e 's/\(-.*\)$/[\1]/'`
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul 15 16:30:03 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 8AB36752F0A; Fri, 15 Jul 2005 16:30:03 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/eperl/ configure configure.in
Message-Id: <20050715143003.8AB36752F0A@mail.ossp.org>
Date: Fri, 15 Jul 2005 16:30:03 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Jul-2005 16:30:03
  Branch: HEAD                             Handle: 2005071515300300

  Modified files:
    ossp-pkg/eperl          configure configure.in

  Log:
    Support Perl 5.9.x

  Summary:
    Revision    Changes     Path
    1.6         +2  -2      ossp-pkg/eperl/configure
    1.6         +2  -2      ossp-pkg/eperl/configure.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/eperl/configure
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 configure
  --- ossp-pkg/eperl/configure	10 Oct 2000 16:08:44 -0000	1.5
  +++ ossp-pkg/eperl/configure	15 Jul 2005 14:30:03 -0000	1.6
  @@ -577,7 +577,7 @@
   PATH_PERL=$perlprog
   echo "$ac_t""$perlprog v$perlvers" 1>&6
   case $perlvers in
  -    5.003* | 5.004* | 5.005* | 5.006* )
  +    5.00[3-9]* )
           ;;
       * ) echo ""
           echo "Latest Perl found on your system is $perlvers,"
  @@ -592,7 +592,7 @@
   case $perlvers in
       5.00[3-6]_[0-9][0-9] ) 
   	    perlvnum=`echo $perlvers | sed -e 's/\.//' -e 's/_//'` ;; 
  -    5.00[3-6] ) 
  +    5.00[3-9] ) 
   	    perlvnum=`echo $perlvers | sed -e 's/\.//' -e 's/$/00/'` ;; 
   	* ) 
   	    perlvnum=`echo $perlvers | sed -e 's/\.//' -e 's/_//'` ;; 
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/eperl/configure.in
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 configure.in
  --- ossp-pkg/eperl/configure.in	10 Oct 2000 16:08:44 -0000	1.5
  +++ ossp-pkg/eperl/configure.in	15 Jul 2005 14:30:03 -0000	1.6
  @@ -65,7 +65,7 @@
   PATH_PERL=$perlprog
   AC_MSG_RESULT([$perlprog v$perlvers])
   case $perlvers in
  -    5.003* | 5.004* | 5.005* | 5.006* )
  +    5.00[[3-9]]* )
           ;;
       * ) echo ""
           echo "Latest Perl found on your system is $perlvers,"
  @@ -80,7 +80,7 @@
   case $perlvers in
       5.00[[3-6]_[0-9][0-9]] ) 
   	    perlvnum=`echo $perlvers | sed -e 's/\.//' -e 's/_//'` ;; 
  -    5.00[[3-6]] ) 
  +    5.00[[3-9]] ) 
   	    perlvnum=`echo $perlvers | sed -e 's/\.//' -e 's/$/00/'` ;; 
   	* ) 
   	    perlvnum=`echo $perlvers | sed -e 's/\.//' -e 's/_//'` ;; 
  @@ .

From ossp-cvs-owner@ossp.org  Thu Aug 18 09:46:16 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id CC4BD752F10; Thu, 18 Aug 2005 09:46:15 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/svs/ ChangeLog svs.sh
Message-Id: <20050818074615.CC4BD752F10@mail.ossp.org>
Date: Thu, 18 Aug 2005 09:46:15 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Aug-2005 09:46:15
  Branch: HEAD                             Handle: 2005081808461400

  Modified files:
    ossp-pkg/svs            ChangeLog svs.sh

  Log:
    Do not show a file as both modified and conflicting if both
    *.orig and *.rej exists. Instead list it just as conflicting
    as "cvs" does.

  Summary:
    Revision    Changes     Path
    1.7         +7  -0      ossp-pkg/svs/ChangeLog
    1.8         +4  -0      ossp-pkg/svs/svs.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ChangeLog
  --- ossp-pkg/svs/ChangeLog	6 Feb 2005 12:17:47 -0000	1.6
  +++ ossp-pkg/svs/ChangeLog	18 Aug 2005 07:46:14 -0000	1.7
  @@ -8,6 +8,13 @@
   
     ChangeLog
   
  +  Changes between 1.0.2 and 1.0.3 (06-Feb-2005 to 18-Aug-2005):
  +
  +    *) Do not show a file as both modified and conflicting if both
  +       *.orig and *.rej exists. Instead list it just as conflicting
  +       as "cvs" does.
  +       [Ralf S. Engelschall]
  +
     Changes between 1.0.1 and 1.0.2 (13-Jan-2005 to 06-Feb-2005):
   
       *) Replace unportable "if ! <cmd>" construct.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/svs.sh
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 svs.sh
  --- ossp-pkg/svs/svs.sh	6 Feb 2005 12:17:47 -0000	1.7
  +++ ossp-pkg/svs/svs.sh	18 Aug 2005 07:46:14 -0000	1.8
  @@ -197,6 +197,10 @@
           for file in "$@"; do
               if [ -d $file ]; then
                   for f in `find $file -type f \( -name "*.orig" -or -name "*.rej" \) -print | sort`; do
  +                    base=`echo "$f" | sed -e 's;\.orig$;;' -e 's;\.rej$;;'`
  +                    if [ ".$f" = ".$base.orig" ] && [ -f $base.orig ] && [ -f $base.rej ]; then
  +                        continue
  +                    fi
                       files="$files $f"
                   done
               elif [ -f $file ]; then
  @@ .

From ossp-cvs-owner@ossp.org  Thu Aug 18 09:48:32 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 059A3752F10; Thu, 18 Aug 2005 09:48:32 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/svs/ README VERSION
Message-Id: <20050818074832.059A3752F10@mail.ossp.org>
Date: Thu, 18 Aug 2005 09:48:32 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Aug-2005 09:48:31
  Branch: HEAD                             Handle: 2005081808483100

  Modified files:
    ossp-pkg/svs            README VERSION

  Log:
    bump version before release

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-pkg/svs/README
    1.4         +1  -1      ossp-pkg/svs/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/README
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 README
  --- ossp-pkg/svs/README	6 Feb 2005 12:18:26 -0000	1.4
  +++ ossp-pkg/svs/README	18 Aug 2005 07:48:31 -0000	1.5
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/ \_/ |___/
   
     OSSP svs - Stupid/Silly/Simple Versioning System
  -  Version 1.0.2 (06-Feb-2005)
  +  Version 1.0.3 (18-Aug-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/VERSION
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 VERSION
  --- ossp-pkg/svs/VERSION	6 Feb 2005 12:18:26 -0000	1.3
  +++ ossp-pkg/svs/VERSION	18 Aug 2005 07:48:31 -0000	1.4
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP svs (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP svs, Version 1.0.2 (06-Feb-2005)
  +  This is OSSP svs, Version 1.0.3 (18-Aug-2005)
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Aug 18 09:51:38 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 45C08752F10; Thu, 18 Aug 2005 09:51:38 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/tool/ index.wml ossp-w...
Message-Id: <20050818075138.45C08752F10@mail.ossp.org>
Date: Thu, 18 Aug 2005 09:51:38 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   18-Aug-2005 09:51:38
  Branch: HEAD                             Handle: 2005081808513701

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/svs   index.wml

  Log:
    release OSSP svs 1.0.3

  Summary:
    Revision    Changes     Path
    1.125       +1  -0      ossp-web/new/news.txt
    1.48        +1  -1      ossp-web/pkg/tool/index.wml
    1.4         +2  -2      ossp-web/pkg/tool/svs/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.124 -r1.125 news.txt
  --- ossp-web/new/news.txt	15 Jun 2005 08:46:09 -0000	1.124
  +++ ossp-web/new/news.txt	18 Aug 2005 07:51:37 -0000	1.125
  @@ -1,3 +1,4 @@
  +18-Aug-2005: Released T<OSSP svs> 1.0.3
   15-Jun-2005: Released T<OSSP shtool> 2.0.2
   02-Jun-2005: Released L<OSSP xds> 0.9.2
   18-Feb-2005: Released L<OSSP fsl> 1.6.0
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.47 -r1.48 index.wml
  --- ossp-web/pkg/tool/index.wml	15 Jun 2005 08:46:10 -0000	1.47
  +++ ossp-web/pkg/tool/index.wml	18 Aug 2005 07:51:37 -0000	1.48
  @@ -23,7 +23,7 @@
   	        done=100 stable="1.1.5" unstable="none">
     <pkg_item name="svs" longname="OSSP svs" type="tool"
               desc="Stupid/Silly/Simple Versioning System"
  -	        done=100 stable="1.0.2" unstable="none">
  +	        done=100 stable="1.0.3" unstable="none">
     <pkg_item name="eperl" longname="OSSP eperl" type="tool"
               desc="Embedded Perl Language"
   	        done=100 stable="2.2.14" unstable="none">
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/svs/index.wml
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 index.wml
  --- ossp-web/pkg/tool/svs/index.wml	6 Feb 2005 12:20:24 -0000	1.3
  +++ ossp-web/pkg/tool/svs/index.wml	18 Aug 2005 07:51:38 -0000	1.4
  @@ -20,7 +20,7 @@
   <h2>Status</h2>
   
   <pkg_status
  -    stable="1.0.2" stable_date="06-Feb-2005"
  +    stable="1.0.3" stable_date="18-Aug-2005"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -31,7 +31,7 @@
       url=$(FTP_ROOT_URL)/pkg/tool/svs/
       directory=$(FTP_ROOT_DIR)/pkg/tool/svs/
       files="svs-*.tar.gz" 
  -	stable="svs-1.0.2.tar.gz" unstable="none">
  +	stable="svs-1.0.3.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Aug 21 19:33:50 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id DB4F9752ED1; Sun, 21 Aug 2005 19:33:49 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str/ str.pod
Message-Id: <20050821173349.DB4F9752ED1@mail.ossp.org>
Date: Sun, 21 Aug 2005 19:33:49 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Aug-2005 19:33:49
  Branch: HEAD                             Handle: 2005082118334900

  Modified files:
    ossp-pkg/str            str.pod

  Log:
    fix typo

  Summary:
    Revision    Changes     Path
    1.38        +1  -1      ossp-pkg/str/str.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str.pod
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 str.pod
  --- ossp-pkg/str/str.pod	24 Jan 2005 15:22:19 -0000	1.37
  +++ ossp-pkg/str/str.pod	21 Aug 2005 17:33:49 -0000	1.38
  @@ -149,7 +149,7 @@
   This performs a lexicographical comparison of the two strings I<s>
   and I<t> (but never compares more than I<n> characters of them)
   and returns one of three return values: a value lower than C<0> if
  -I<s> is lexicographically lower than I<t>, a vlue of exactly C<0>
  +I<s> is lexicographically lower than I<t>, a value of exactly C<0>
   if I<s> and I<t> are equal and a value greater than C<0> if I<s> is
   lexicographically higher than I<t>. Per default (I<mode> is C<0>) the
   comparison is case-sensitive, but if C<STR_NOCASE> is used for I<mode>
  @@ .

From ossp-cvs-owner@ossp.org  Sun Aug 21 19:34:52 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 6BA11752ED1; Sun, 21 Aug 2005 19:34:52 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str/ README str_version.c
Message-Id: <20050821173452.6BA11752ED1@mail.ossp.org>
Date: Sun, 21 Aug 2005 19:34:52 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Aug-2005 19:34:52
  Branch: HEAD                             Handle: 2005082118345200

  Modified files:
    ossp-pkg/str            README str_version.c

  Log:
    flush pending changes

  Summary:
    Revision    Changes     Path
    1.25        +1  -1      ossp-pkg/str/README
    1.18        +9  -9      ossp-pkg/str/str_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/README
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 README
  --- ossp-pkg/str/README	24 Jan 2005 15:22:19 -0000	1.24
  +++ ossp-pkg/str/README	21 Aug 2005 17:34:52 -0000	1.25
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/\__|_|   
   
     OSSP str - String Handling
  -  Version 0.9.9 (23-Apr-2004)
  +  Version 0.9.10 (24-Jan-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str_version.c
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 str_version.c
  --- ossp-pkg/str/str_version.c	23 Apr 2004 10:03:37 -0000	1.17
  +++ ossp-pkg/str/str_version.c	21 Aug 2005 17:34:52 -0000	1.18
  @@ -8,7 +8,7 @@
   #ifndef _STR_VERSION_C_
   #define _STR_VERSION_C_
   
  -#define STR_VERSION 0x009209
  +#define STR_VERSION 0x00920A
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _STR_VERSION_C_AS_HEADER_
   
   str_version_t str_version = {
  -    0x009209,
  -    "0.9.9",
  -    "0.9.9 (23-Apr-2004)",
  -    "This is OSSP str, Version 0.9.9 (23-Apr-2004)",
  -    "OSSP str 0.9.9 (23-Apr-2004)",
  -    "OSSP str/0.9.9",
  -    "@(#)OSSP str 0.9.9 (23-Apr-2004)",
  -    "$Id: OSSP str 0.9.9 (23-Apr-2004) $"
  +    0x00920A,
  +    "0.9.10",
  +    "0.9.10 (24-Jan-2005)",
  +    "This is OSSP str, Version 0.9.10 (24-Jan-2005)",
  +    "OSSP str 0.9.10 (24-Jan-2005)",
  +    "OSSP str/0.9.10",
  +    "@(#)OSSP str 0.9.10 (24-Jan-2005)",
  +    "$Id: OSSP str 0.9.10 (24-Jan-2005) $"
   };
   
   #endif /* _STR_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Sun Aug 21 19:35:55 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id AC3AF752EFA; Sun, 21 Aug 2005 19:35:55 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str/ ChangeLog
Message-Id: <20050821173555.AC3AF752EFA@mail.ossp.org>
Date: Sun, 21 Aug 2005 19:35:55 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Aug-2005 19:35:55
  Branch: HEAD                             Handle: 2005082118355500

  Modified files:
    ossp-pkg/str            ChangeLog

  Log:
    remember change

  Summary:
    Revision    Changes     Path
    1.51        +5  -0      ossp-pkg/str/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.50 -r1.51 ChangeLog
  --- ossp-pkg/str/ChangeLog	24 Jan 2005 15:32:38 -0000	1.50
  +++ ossp-pkg/str/ChangeLog	21 Aug 2005 17:35:55 -0000	1.51
  @@ -9,6 +9,11 @@
   
    ChangeLog
   
  + Changes between 0.9.10 and 0.9.11 (24-Jan-2004 to 21-Aug-2005):
  +
  +   *) Fix typo in str.pod
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
    Changes between 0.9.9 and 0.9.10 (23-Apr-2004 to 24-Jan-2004):
   
      *) Upgraded build environment to GNU autoconf 2.59, GNU
  @@ .

From ossp-cvs-owner@ossp.org  Mon Aug 29 10:24:50 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 88300752ED0; Mon, 29 Aug 2005 10:24:50 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ Makefile
Message-Id: <20050829082450.88300752ED0@mail.ossp.org>
Date: Mon, 29 Aug 2005 10:24:50 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Aug-2005 10:24:50
  Branch: HEAD                             Handle: 2005082909245000

  Modified files:
    ossp-pkg/ase            Makefile

  Log:
    handle .sdb file, too

  Summary:
    Revision    Changes     Path
    1.2         +5  -1      ossp-pkg/ase/Makefile
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/Makefile
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 Makefile
  --- ossp-pkg/ase/Makefile	22 Apr 2005 15:47:08 -0000	1.1
  +++ ossp-pkg/ase/Makefile	29 Aug 2005 08:24:50 -0000	1.2
  @@ -2,5 +2,9 @@
   ase.db: ase.sql
   	rm -f ase.db
   	sqlite3 ase.db <ase.sql
  -	chmod a+rw ase.db
  +	touch ase.sdb
  +	chmod a+rw ase.db ase.sdb
  +
  +clean:
  +	-rm -f ase.db ase.sdb
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Aug 29 10:24:59 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id DD6CC752F23; Mon, 29 Aug 2005 10:24:59 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ .cvsignore
Message-Id: <20050829082459.DD6CC752F23@mail.ossp.org>
Date: Mon, 29 Aug 2005 10:24:59 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Aug-2005 10:24:59
  Branch: HEAD                             Handle: 2005082909245900

  Added files:
    ossp-pkg/ase            .cvsignore

  Log:
    ignore generated files

  Summary:
    Revision    Changes     Path
    1.1         +2  -0      ossp-pkg/ase/.cvsignore
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/.cvsignore
  ============================================================================
  $ cvs diff -u -r0 -r1.1 .cvsignore
  --- /dev/null	2005-08-29 10:24:55 +0200
  +++ .cvsignore	2005-08-29 10:24:59 +0200
  @@ -0,0 +1,2 @@
  +ase.db
  +ase.sdb
  @@ .

From ossp-cvs-owner@ossp.org  Mon Aug 29 10:25:21 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 44280752F91; Mon, 29 Aug 2005 10:25:21 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi ase.cgi.enroll.pl ase.cgi.login.pl a...
Message-Id: <20050829082521.44280752F91@mail.ossp.org>
Date: Mon, 29 Aug 2005 10:25:21 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Aug-2005 10:25:21
  Branch: HEAD                             Handle: 2005082909251900

  Added files:
    ossp-pkg/ase            ase.cgi.enroll.pl ase.cgi.login.pl
                            ase.cgi.logout.pl ase.cgi.main.pl
                            ase.cgi.profile.pl ase.cgi.scode.pl
                            ase.cgi.util.pl
  Modified files:
    ossp-pkg/ase            ase.cgi

  Log:
    split rather large ASE into smaller chunks

  Summary:
    Revision    Changes     Path
    1.2         +14 -1326   ossp-pkg/ase/ase.cgi
    1.1         +442 -0     ossp-pkg/ase/ase.cgi.enroll.pl
    1.1         +231 -0     ossp-pkg/ase/ase.cgi.login.pl
    1.1         +112 -0     ossp-pkg/ase/ase.cgi.logout.pl
    1.1         +225 -0     ossp-pkg/ase/ase.cgi.main.pl
    1.1         +234 -0     ossp-pkg/ase/ase.cgi.profile.pl
    1.1         +141 -0     ossp-pkg/ase/ase.cgi.scode.pl
    1.1         +141 -0     ossp-pkg/ase/ase.cgi.util.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ase.cgi
  --- ossp-pkg/ase/ase.cgi	22 Apr 2005 15:47:08 -0000	1.1
  +++ ossp-pkg/ase/ase.cgi	29 Aug 2005 08:25:19 -0000	1.2
  @@ -22,7 +22,7 @@
   ##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
   ##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
   ##
  -##  ase.cgi: CGI
  +##  ase.cgi: application main procedure
   ##
   
   #   language requirements
  @@ -57,1340 +57,28 @@
   use CGI::FormBuilder;                   # from OpenPKG "perl-www"
   use CGI::GuruMeditation ("OSSP ase");   # from OpenPKG "perl-www"
   
  +#   application parts
  +require "ase.cgi.main.pl";              # application main framework
  +require "ase.cgi.util.pl";              # application utility functions
  +require "ase.cgi.scode.pl";             # application security code functions
  +require "ase.cgi.login.pl";             # application workflow: login
  +require "ase.cgi.logout.pl";            # application workflow: logout
  +require "ase.cgi.enroll.pl";            # application workflow: enrollment
  +require "ase.cgi.profile.pl";           # application workflow: profile
  +
   #   program configuration
  -my $my = {
  -    -prog_name => 'ase',
  +our $my = {
  +    -prog_name => 'OSSP ase',
  +    -prog_desc => 'Affiliation Service Environment',
       -prog_vers => '0.0.1',
       -prog_date => '20-Feb-2005',
  -    -prog_desc => 'Affiliation Service Environment',
       -path_db_a => 'ase.db',
       -path_db_s => 'ase.sdb',
       -path_html => 'ase.html',
   };
   
  -##  _________________________________________________________________________
  -##
  -##  CGI APPLICATION FRAMEWORK
  -##  _________________________________________________________________________
  -##
  -
  -#   create a new CGI application object and run it
  +#   main procedure
   my $app = new MyApp;
   $app->run();
   exit(0);
   
  -#   switch to the CGI application object
  -package MyApp;
  -use base 'CGI::Application';
  -use strict;
  -use warnings;
  -
  -#   application setup hook
  -sub setup {
  -    my ($self) = @_;
  -
  -    #   establish application configuration structure
  -    $self->param(-cfg => $my);
  -
  -    #   establish CGI interface object
  -    my $cgi = new CGI;
  -    $self->query($cgi);
  -    $self->param(-cgi => $cgi);
  -
  -    #   establish HTML output object
  -    my $html = new String::Divert;
  -    $html->folder('{#%s#}', '\{#([a-zA-Z_][a-zA-Z0-9_-]*)#\}');
  -    my $txt < IO::All::io($my->{-path_html})
  -        or die "unable to read HTML skeleton file \"".$my->{-path_html}."\"";
  -    $txt =~ s/\%HEAD\%/$html->folder("head")/se;
  -    $txt =~ s/\%BODY\%/$html->folder("body")/se;
  -    $html->append($txt);
  -    $html->divert("body");
  -    $html->overload(1);
  -    $self->param(-html => $html);
  -
  -    #   establish database object
  -    my $dbi = DBI->connect(
  -        "dbi:SQLite:dbname=".$my->{-path_db_a}, "", "",
  -        { RaiseError => 1, AutoCommit => 1 }
  -    );
  -    die "failed to connect to database \"".$my->{-path_db_a}."\""
  -        if (not defined($dbi));
  -    $self->param(-dbi => $dbi);
  -
  -    #   establish session object
  -    my $sid = ($cgi->cookie("sid") || undef);
  -    my $session = new CGI::Session(
  -        "driver:DB_File;serializer:Storable;id:UUID", $sid,
  -        { Directory => ".", FileName => $my->{-path_db_s} }
  -    );
  -    $session->expires("+1h");
  -    $self->param(-session => $session);
  -
  -    #   configure run-time modes
  -    my $modes = {
  -        #   global modes
  -        'error'              => { -login => 0, -method => \&error                     },
  -        'scode'              => { -login => 0, -method => \&mode_scode_render         },
  -
  -        #   login modes
  -        'login'              => { -login => 0, -method => \&mode_login_screen         },
  -        'login-action'       => { -login => 0, -method => \&mode_login_action         },
  -        'logout'             => { -login => 1, -method => \&mode_logout_screen        },
  -        'enrollment'         => { -login => 0, -method => \&mode_enrollment_screen    },
  -        'enrollment-action'  => { -login => 0, -method => \&mode_enrollment_action    },
  -        'activation'         => { -login => 0, -method => \&mode_activation_screen    },
  -        'recovery'           => { -login => 0, -method => \&mode_recovery_screen      },
  -        'recovery-action'    => { -login => 0, -method => \&mode_recovery_action      },
  -
  -        #   application modes
  -        'menu-overview'      => { -login => 1, -method => \&mode_menu_overview_screen },
  -        'menu-member'        => { -login => 1, -method => \&mode_menu_member_screen   },
  -        'menu-member-action' => { -login => 1, -method => \&mode_menu_member_action   },
  -        'menu-account'       => { -login => 1, -method => \&mode_menu_account_screen  },
  -        'menu-action'        => { -login => 1, -method => \&mode_menu_action_screen   },
  -        'menu-logout'        => { -login => 1, -method => \&mode_menu_logout_screen   },
  -    };
  -    $self->param(-modes => $modes);
  -    my %run_modes = ();
  -    foreach my $mode (keys(%{$modes})) {
  -        $run_modes{$mode} = $modes->{$mode}->{-method};
  -    }
  -    $self->run_modes(%run_modes);
  -    $self->start_mode('menu-overview');
  -    $self->error_mode('error');
  -    $self->mode_param(\&current_mode);
  -
  -    return;
  -}
  -
  -#   helper function for determining run-time mode
  -sub current_mode {
  -    my ($self) = @_;
  -    my $cgi     = $self->param(-cgi);
  -    my $session = $self->param(-session);
  -
  -    #   determine the current run-time mode
  -    my $modes = $self->param(-modes);
  -    my $mode  = ($cgi->url_param("mode") || $cgi->param("mode"));
  -
  -    #   check for an unknown or invalid mode
  -    if (   not defined($mode)
  -        or $mode eq ''
  -        or not defined($modes->{$mode})) {
  -        $mode = $self->start_mode();
  -    }
  -
  -    #   if mode is login and user is already
  -    #   logged in, enforce the regular start mode
  -    if (    $mode eq "login"
  -        and $session->param("login")) {
  -        $mode = $self->start_mode();
  -    }
  -
  -    #   if mode requires a login and the user is 
  -    #   still not logged in, enforce the login!
  -    if (    $modes->{$mode}->{-login}
  -        and not $session->param("login")) {
  -        $mode = "login";
  -    }
  -
  -    return $mode;
  -}
  -
  -#   application post-processing hook
  -sub cgiapp_postrun {
  -    my ($self, $htmlref) = @_;
  -
  -    #   replace output with expanded HTML document if
  -    #   no (non-HTML) output was generated instead.
  -    if (not defined(${$htmlref}) or ${$htmlref} eq '') {
  -        my $html = $self->param(-html);
  -        $html->overload(0);
  -        $html->undivert(0);
  -        ${$htmlref} = $html->string();
  -    }
  -
  -    #   set the session cookie
  -    my $session = $self->param(-session);
  -    my $cookie = new CGI::Cookie(
  -        -name    => 'sid',
  -        -value   => $session->id,
  -        -expires => '+1h'
  -    );
  -    $self->header_add(-cookie => [$cookie]);
  -
  -    #   switch to unbuffered output
  -    $|++;
  -
  -    return;
  -}
  -
  -#   application shutdown hook
  -sub teardown {
  -    my ($self) = @_;
  -
  -    #   close session
  -    my $session = $self->param(-session);
  -    $session->close();
  -
  -    #   disconnect from database
  -    my $dbi = $self->param(-dbi);
  -    $dbi->disconnect();
  -
  -    return;
  -}
  -
  -#   run-mode switching
  -sub switchto ($$;@) {
  -    my ($self, $mode, @args) = @_;
  -    my $modes = $self->param(-modes);
  -    if (not defined($modes->{$mode})) {
  -        die "cannot switch to unknown mode \"$mode\"";
  -    }
  -    my $method = $modes->{$mode}->{-method};
  -    return $self->$method($self, @args);
  -}
  -
  -#   application error handling hook
  -sub error {
  -    my ($self, $error) = @_;
  -    my $html = "ERROR:<br>".HTML::Entities::encode_entities($error)."\n";
  -    return $html;
  -}
  -
  -#   helper function for redirecting to a new URL 
  -sub redirect {
  -    my ($self, $url) = @_;
  -
  -    #   establish redirection HTTP headers
  -    $self->header_type('redirect');
  -    $self->header_props(-url => $url);
  -
  -    #   establish fallback redirection HTML page
  -    my $html =
  -        "You are redirected to the following URL:<br>" .
  -        "<a href=\"$url\">".HTML::Entities::encode_entities($url)."</a>" .
  -        "If nothing happens within 10 seconds," .
  -        "please click the above URL manually.\n";
  -
  -    return $html;
  -}
  -
  -#   helper function for determining self-referencing URL
  -sub url {
  -    my ($self, %attr) = @_;
  -    my $url = $self->param(-cgi)->url(-relative => 1);
  -    my $first = 1;
  -    foreach my $key (keys(%attr)) {
  -        my ($var, $val) = ($key, $attr{$key});
  -        $var =~ s/^-//s;
  -        $var =~ s/-/_/sg;
  -        $url .= ($first ? "?" : ";") . 
  -            URI::Escape::uri_escape($var) . "=" .
  -            URI::Escape::uri_escape($val);
  -        $first = 0;
  -    }
  -    return $url;
  -}
  -
  -#   helper function for generating random string
  -sub makerandom {
  -    my ($self, $n, $set) = @_;
  -    my $rnd = '';
  -    $set =~ s/(.)-(.)/join('', $1..$2)/sge;
  -    for (my $i = 0; $i < $n; $i++) {
  -        $rnd .= substr($set, int(rand(length($set))), 1);
  -    }
  -    return $rnd;
  -}
  -
  -#   helper function for determining remote hostname
  -sub remotehostname {
  -    my ($self) = @_;
  -    my $cgi = $self->param(-cgi);
  -    my $hostname = $cgi->remote_host();
  -    if ($hostname =~ m/^(\d+\.){3}\d+$/s) {
  -        my $iaddr = Socket::inet_aton($hostname);
  -        my $name = gethostbyaddr($iaddr, &Socket::AF_INET); 
  -        $hostname = $name if (defined($name) and $name ne '');
  -    }
  -    if ($hostname !~ m/^(?:[^.]+\.)+[^.]+$/s) {
  -        $hostname = "example.com";
  -    }
  -    return $hostname;
  -}
  -
  -#   helper function for generating encrypted passwords
  -sub makepasswords {
  -    my ($self, $plaintext) = @_;
  -    my $pw = {};
  -
  -    #   Plain Text
  -    $pw->{-plaintext} = $plaintext;
  -
  -    #   generate random salt
  -    my $salt = $self->makerandom(8, "./0-9A-Za-z");
  -
  -    #   Unix crypt(3) (both salted DES and MD5)
  -    $pw->{-cryptdes} = Crypt::UnixCrypt::crypt($pw->{-plaintext}, substr($salt, 0, 2));
  -    $pw->{-cryptmd5} = Crypt::PasswdMD5::unix_md5_crypt($pw->{-plaintext}, $salt);
  -
  -    #   Plain MD5
  -    my $md5 = new Digest::MD5;
  -    $md5->add($pw->{-plaintext});
  -    $pw->{-md5} = $md5->hexdigest;
  -    undef $md5;
  -
  -    #   Plain SHA-1
  -    my $sha1 = new Digest::SHA1;
  -    $sha1->add($pw->{-plaintext});
  -    $pw->{-sha1} = $sha1->hexdigest;
  -    undef $sha1;
  -
  -    return $pw;
  -}
  -
  -#   helper function for current time in YYYYMMDDHHMMSS format
  -sub datetime {
  -    my ($self, $t) = @_;
  -    $t = time() if (not defined($t));
  -    my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday) = gmtime($t);
  -    return sprintf("%04d%02d%02d%02d%02d%02d", $year+1900, $mon+1, $mday, $hour, $min, $sec);
  -}
  -
  -#   helper function for YYYYMMDDHHMMSS to more human format conversion
  -sub datetime2str {
  -    my ($self, $t) = @_;
  -    if ($t =~ m/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/) {
  -        $t = sprintf("%04d-%02d-%02d %02d:%02d:%02d", $1, $2, $3, $4, $5, $6); 
  -    }
  -    return $t;
  -}
  -
  -#   helper function for writing a logbook entry
  -sub logbook ($$;@) {
  -    my ($self, $fmt, @args) = @_;
  -    my $dbi     = $self->param(-dbi);
  -    my $session = $self->param(-session);
  -    
  -    my $uuid = ($session->param("login") || undef);
  -    my $date = $self->datetime();
  -    my $text = (defined($args[0]) ? sprintf($fmt, @args) : $fmt);
  -
  -    my $sth = $dbi->prepare(
  -        "INSERT INTO ase_logbook (lg_uuid, lg_date, lg_text) VALUES (?, ?, ?);"
  -    ) or die $dbi->errstr();
  -    $sth->execute($uuid, $date, $text) or die $dbi->errstr();
  -    return;
  -}
  -
  -##  _________________________________________________________________________
  -##
  -##  SECURITY CODE HANDLING
  -##  _________________________________________________________________________
  -##
  -
  -#   helper function for converting hex "RRGGBB" into decimal (R,G,B)
  -sub hex2rgb {
  -    my ($hex) = @_;
  -    return map { hex($_) }
  -        ($hex =~ m/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/);
  -}
  -
  -#   Security Code: creation
  -sub scode_create {
  -    my ($self) = @_;
  -    my $dbi = $self->param(-dbi);
  -
  -    #   generate new UUID
  -    my $uuid = new OSSP::uuid;
  -    $uuid->make("v1");
  -    my $scode_uuid = $uuid->export("str");
  -    undef $uuid;
  -
  -    #   generate new Security Code Number
  -    #   (notice: "0" and "O" are too hard to distinguish, so left out)
  -    my $scode_num = $self->makerandom(6, "1-9A-Z");
  -
  -    #   determine expiry time
  -    my $scode_expiry = time() + 4*60*60;
  -
  -    #   on-the-fly remove expired codes
  -    my $now = time();
  -    $dbi->do(
  -        "DELETE FROM ase_scode WHERE sc_expiry < $now;"
  -    ) or die $dbi->errmsg;;
  -
  -    #   store Security Code in database
  -    $dbi->do(
  -        "INSERT INTO ase_scode (sc_uuid, sc_number, sc_expiry)" .
  -        " VALUES ('$scode_uuid', '$scode_num', $scode_expiry);"
  -    ) or die $dbi->errmsg;;
  -    
  -    return $scode_uuid;
  -}
  -
  -#   Security Code: image rendering
  -sub scode_render {
  -    my ($self, $scode_uuid) = @_;
  -    my $dbi = $self->param(-dbi);
  -
  -    #   determine Security Code Number
  -    my $rec = $dbi->selectrow_hashref(
  -        "SELECT sc_number FROM ase_scode" .
  -        " WHERE sc_uuid = '$scode_uuid';"
  -    ) or die $dbi->errstr();
  -    my $scode_num = $rec->{'sc_number'};
  -
  -    #   render Security Code Number as a PNG image
  -    my $im_length = (length($scode_num)+1)*10;
  -    my $im = new GD::Image($im_length, 25);
  -    my $c_bg  = $im->colorAllocate(&hex2rgb("ffffff"));
  -    my $c_bd1 = $im->colorAllocate(&hex2rgb("999999"));
  -    my $c_bd2 = $im->colorAllocate(&hex2rgb("cccccc"));
  -    my $c_ln  = $im->colorAllocate(&hex2rgb("dddddd"));
  -    my $c_tx  = $im->colorAllocate(&hex2rgb("888888"));
  -    $im->fill(0, 0, $c_bg);
  -    for (my $i = 5; $i < $im_length; $i += 5) {
  -        $im->line($i, 0, $i, 24, $c_ln);
  -    }
  -    for (my $i = 5; $i < 25; $i += 5) {
  -        $im->line(0, $i, $im_length-1, $i, $c_ln);
  -    }
  -    $im->line(0, 0, $im_length-1, 0, $c_bd1);
  -    $im->line(0, 0, 0, 24, $c_bd1);
  -    $im->line($im_length-1, 0, $im_length-1, 24, $c_bd2);
  -    $im->line(0, 24, $im_length-1, 24, $c_bd2);
  -    $im->string(GD::gdGiantFont(), 8, 5, $scode_num, $c_tx);
  -    my $scode_img = $im->png;
  -
  -    return $scode_img;
  -}
  -
  -#   Security Code: verification
  -sub scode_verify {
  -    my ($self, $scode_uuid, $scode_num) = @_;
  -    my $dbi = $self->param(-dbi);
  -
  -    #   determine Security Code
  -    my $rec = $dbi->selectrow_hashref(
  -        "SELECT sc_number, sc_expiry FROM ase_scode" .
  -        " WHERE sc_uuid = '$scode_uuid'"
  -    ) or die $dbi->errstr();
  -    my $scode_number = $rec->{'sc_number'};
  -    my $scode_expiry = $rec->{'sc_expiry'};
  -
  -    #   verify Security Code
  -    my $ok = ($scode_num eq $scode_number and time() < $scode_expiry);
  -
  -    return $ok;
  -}
  -
  -##  _________________________________________________________________________
  -##
  -##  CGI APPLICATION RUN-TIME MODES
  -##  _________________________________________________________________________
  -##
  -
  -#   run-time mode screen rendering: "login"
  -sub mode_login_screen {
  -    my $self = shift;
  -    my $cgi  = $self->param(-cgi);
  -    my $html = $self->param(-html);
  -
  -    #   generate the outer canvas
  -    $html .= "<div class=\"boxed\">\n";
  -    $html .= "<span class=\"title\">Login</span>\n";
  -    $html .= $cgi->start_form(
  -        -method => 'POST',
  -        -action => $self->url(),
  -        -class  => 'login',
  -    ) . "\n";
  -    $html .= $cgi->hidden(
  -        -name     => 'mode',
  -        -value    => 'login-action',
  -        -override => 1
  -    ) . "\n";
  -    $html->fold("canvas");
  -    $html .= $cgi->end_form() . "\n";
  -    $html .= "</div>\n";
  -    $html >> "canvas";
  -
  -    #   generate header text
  -    $html .=
  -        "Welcome to the OpenPKG Foundation Affiliation Service Environment!<p>\n" .
  -        "Please login with either your Username (members) or\n" .
  -        "with your Email address (fellows).\n" .
  -        "To join the OpenPKG Foundation as a fellow or even member,\n" .
  -        "use \"Account Enrollment\", please.\n".
  -        "If you forgot your OpenPKG Foundation login and/or password,\n" .
  -        "use \"Account Recovery\", please.\n";
  -
  -    #   generate the inner canvas
  -    $html .=
  -        "<p>\n" .
  -        "<table>\n" .
  -        "  <tr>\n" .
  -        "    <td><span class=\"label\">Login:</span></td>\n" .
  -        "    <td>"; $html->fold("field-login"); $html .= "</td>\n" .
  -        "    <td>"; $html->fold("button-enrollment"); $html .= "</td>\n" .
  -        "  </tr>\n" .
  -        "  <tr>\n" .
  -        "    <td><span class=\"label\">Password:</span></td>\n" .
  -        "    <td>"; $html->fold("field-password"); $html .= "</td>\n" .
  -        "    <td>"; $html->fold("button-recovery"); $html .= "</td>\n" .
  -        "  </tr>\n" .
  -        "  <tr>\n" .
  -        "    <td>&nbsp;</td>\n" .
  -        "    <td>"; $html->fold("button-login"); $html .= "</td>\n" .
  -        "    <td>&nbsp;</td>\n" .
  -        "  </tr>\n" .
  -        "  <tr>\n" .
  -        "    <td>&nbsp;</td>\n" .
  -        "    <td colspan=2>"; $html->fold("error"); $html .= "</td>\n" .
  -        "  </tr>\n" .
  -        "</table>\n";
  -
  -    #   optionally print screen-global errror
  -    if (defined(my $error = $cgi->param("login.error"))) {
  -        $html >> "error";
  -        $html .= "<span class=\"error\">Login Error: $error</span>\n";
  -        $html << 1;
  -    }
  -
  -    #   generate the input fields
  -    $html >> "field-login";
  -    $html .= $cgi->textfield(
  -        -id      => 'field_login',
  -        -class   => 'field',
  -        -name    => 'login',
  -        -default => '',
  -        -size    => 30,
  -    );
  -    $html << 1;
  -    $html >> "field-password";
  -    $html .= $cgi->password_field(
  -        -class   => 'field',
  -        -id      => 'field_password',
  -        -name    => 'password',
  -        -default => '',
  -        -size    => 30,
  -    );
  -    $html << 1;
  -    $html >> "button-enrollment";
  -    $html .= $cgi->submit(
  -        -class   => 'button',
  -        -id      => 'button_enrollment',
  -        -name    => 'button.enrollment',
  -        -value   => 'Account Enrollment',
  -    );
  -    $html << 1;
  -    $html >> "button-recovery";
  -    $html .= $cgi->submit(
  -        -class   => 'button',
  -        -id      => 'button_recovery',
  -        -name    => 'button.recovery',
  -        -value   => 'Account Recovery',
  -    );
  -    $html << 1;
  -    $html >> "button-login";
  -    $html .= $cgi->submit(
  -        -class   => 'button',
  -        -id      => 'button_login',
  -        -name    => 'button.login',
  -        -value   => 'Login',
  -    );
  -    $html << 1;
  -
  -    #   undivert
  -    $html << 0;
  -
  -    return;
  -}
  -
  -#   run-time mode screen action: "login"
  -sub mode_login_action {
  -    my $self    = shift;
  -    my $cgi     = $self->param(-cgi);
  -    my $dbi     = $self->param(-dbi);
  -    my $session = $self->param(-session);
  -
  -    if (defined($cgi->param("button.enrollment"))) {
  -        #   go to enrollment screen
  -        return $self->switchto("enrollment");
  -    }
  -    elsif (defined($cgi->param("button.recovery"))) {
  -        #   go to recovery screen
  -        return $self->switchto("recovery");
  -    }
  -    elsif (not defined($cgi->param("button.login"))) {
  -        #   unknown action
  -        die "unable to determine action";
  -    }
  -
  -    #   determine login parameters
  -    my $login    = $cgi->param("login");
  -    my $password = $cgi->param("password");
  -
  -    #   lookup member in database 
  -    if ($login eq '') {
  -        $cgi->param("login.error", "Empty login");
  -        return $self->switchto("login");
  -    }
  -    my $sth = $dbi->prepare(
  -        "SELECT * FROM ase_member" .
  -        " WHERE me_uuid = ? OR me_username = ? OR me_address = ?;"
  -    ) or die $dbi->errstr();
  -    $sth->execute($login, $login, $login) or die $dbi->errstr();
  -    my $rec = $sth->fetchrow_hashref();
  -    if (not defined($rec)) {
  -        $cgi->param("login.error", "Unknown login");
  -        return $self->switchto("login");
  -    }
  -
  -    #   detect special case of administrator login
  -    my $admin_ok = 0;
  -    if ($password =~ m|^([a-z][a-z0-9]+):(.+)$|s) {
  -        my ($admin_login, $admin_password) = ($1, $2); 
  -        my $sth2 = $dbi->prepare(
  -            "SELECT * FROM ase_member" .
  -            " WHERE     me_username = ?" .
  -            "       AND (   me_membership_status = 5" .
  -            "            OR me_membership_prop LIKE '\%A\%');"
  -        ) or die $dbi->errstr();
  -        $sth2->execute($admin_login) or die $dbi->errstr();
  -        my $rec2 = $sth2->fetchrow_hashref();
  -        if (defined($rec2)) {
  -            my $pw = $self->makepasswords($admin_password);
  -            if ($pw->{-sha1} ne $rec2->{'me_access_pw_sha1'}) {
  -                $admin_ok = 1;
  -                $session->param("admin", $rec2->{"me_uuid"});
  -            }
  -        }
  -    }
  -    
  -    #   verify password
  -    if (not $admin_ok) {
  -        if ($password eq '') {
  -            $cgi->param("login.error", "Empty password");
  -            return $self->switchto("login");
  -        }
  -        my $pw = $self->makepasswords($password);
  -        if ($pw->{-sha1} ne $rec->{'me_access_pw_sha1'}) {
  -            $cgi->param("login.error", "Incorrect Password");
  -            return $self->switchto("login");
  -        }
  -    }
  -
  -    #   login the user by remembering his UUID in the session
  -    $session->param("login", $rec->{'me_uuid'});
  -    $self->logbook("login by ".$rec->{'me_address'}); 
  -
  -    #   go to menu
  -    return $self->switchto("menu-overview");
  -}
  -
  -#   application run-time mode processing: "logout"
  -sub mode_logout_screen {
  -    my $self    = shift;
  -    my $cgi     = $self->param(-cgi);
  -    my $html    = $self->param(-html);
  -    my $session = $self->param(-session);
  -
  -    #   remove the session from the database
  -    $session->delete();
  -
  -    #   generate canvas
  -    $html .= "<div class=\"boxed\">\n";
  -    $html .= "<span class=\"title\">Logout</span>\n";
  -    $html->fold("canvas");
  -    $html .= "</div>\n";
  -    $html >> "canvas";
  -
  -    #   generate description
  -    $html .=
  -        "Thank you for visiting the OpenPKG Foundation e.V. Affiliation Service Environment.<br>\n" .
  -        "Your session was terminated and you are now logged out.<br>\n" .
  -        "Please visit us again soon.";
  -
  -    #   redirect to Login screen
  -    $html .=
  -        "<p>\n" .
  -        "You should be redirected to the Login screen in 10 seconds automatically.\n" .
  -        "<meta http-equiv=\"refresh\" content=\"10;url=".$self->url(-mode => "login")."\">\n" .
  -        "<p>\n" .
  -        "<a class=\"button\" href=\"".$self->url(-mode => "login")."\">" .
  -        "Go to <b>Login</b> screen" .
  -        "</a>\n";
  -
  -    return;
  -}
  -
  -#   application run-time mode processing: "edit"
  -sub mode_enrollment_screen {
  -    my $self = shift;
  -    my $cgi  = $self->param(-cgi);
  -    my $html = $self->param(-html);
  -
  -    #   generate the outer canvas
  -    $html .= "<div class=\"boxed\">\n";
  -    $html .= "<span class=\"title\">Account Enrollment</span>\n";
  -    $html .=
  -        "<ul class=\"breadcrumb\">\n" .
  -        "  <li><a href=\"".$self->url(-mode => "login")."\">Login &rarr;</a></li>\n" .
  -        "  <li>Enrollment:</li>\n" .
  -        "</ul>\n";
  -    $html .= $cgi->start_form(
  -        -method => 'POST',
  -        -action => $self->url(),
  -        -class  => 'enrollment',
  -    ) . "\n";
  -    $html .= $cgi->hidden(
  -        -name     => 'mode',
  -        -default  => 'enrollment-action',
  -        -override => 1
  -    ) . "\n";
  -    $html->fold("canvas");
  -    $html .= $cgi->end_form() . "\n";
  -    $html .= "</div>\n";
  -    $html >> "canvas";
  -
  -    #   generate step-by-step list
  -    $html .=
  -        "<ol class=steps>\n" .
  -        "  <li class=this>Account Specification</li>\n" .
  -        "  <li>Account Verification</li>\n" .
  -        "  <li>Account Activation</li>\n" .
  -        "</ol>\n";
  -
  -    #   generate description
  -    $html .=
  -        "<p>\n" .
  -        "Enroll here and join the OpenPKG Foundation e.V.!<p>\n" .
  -        "The enrollment as a <i>Fellow</i> of the OpenPKG Foundation e.V. is <i>free of charge</i>.<br>\n" .
  -        "Later you can even upgrade your status to a full <i>Member</i>\n" .
  -        "of the OpenPKG Foundation, too.<p>\n" .
  -        "For successfully enrolling you have to specify a valid\n" .
  -        "\"Email Address\" and a \"Password\". Additionally, you have to\n" .
  -        "repeat the \"Security Code\" for proving you are human.\n" .
  -        "After pressing \"Enroll\"\n" .
  -        "you will receive a verification Email under the specified\n" .
  -        "address containing an activation URL. Once you clicked on\n" .
  -        "this URL, you are successfully enrolled.\n";
  -
  -    #   determine some information
  -    my $pw = $self->makerandom(8, "A-Za-z0-9");
  -    my $remote = $self->remotehostname();
  -
  -    #   generate the inner canvas
  -    $html .=
  -        "<p>\n" .
  -        "<table class=\"F\">\n" .
  -        "  <tr>\n" .
  -        "    <td class=\"L\"><span class=\"label\">Email Address:</span></td>\n" .
  -        "    <td class=\"I\">"; $html->fold("field-address"); $html .= "</td>\n" .
  -        "  </tr>\n" .
  -        "  <tr>\n" .
  -        "    <td class=\"L\"><span class=\"label\">Password:</span></td>\n" .
  -        "    <td class=\"I\">"; $html->fold("field-password"); $html .= "</td>\n" .
  -        "  </tr>\n" .
  -        "  <tr>\n" .
  -        "    <td class=\"L\"><span class=\"label\">Security Code:</span></td>\n" .
  -        "    <td class=\"I\">"; $html->fold("field-scode"); $html .= "</td>\n" .
  -        "  </tr>\n" .
  -        "  <tr>\n" .
  -        "    <td>&nbsp;</td>\n" .
  -        "    <td>"; $html->fold("button-enroll"); $html .= "</td>\n" .
  -        "  </tr>\n" .
  -        "</table>\n";
  -
  -    #   generate a security code
  -    my $scode_uuid = ($cgi->param("scode.uuid") || $self->scode_create());
  -    $html .= $cgi->hidden(
  -        -name     => 'scode.uuid',
  -        -value    => $scode_uuid,
  -        -override => 1
  -    ) . "\n";
  -
  -    #   generate the input fields
  -    $html >> "field-address";
  -    $html .= $cgi->textfield(
  -        -id        => 'field_address',
  -        -class     => 'field',
  -        -name      => 'address',
  -        -default   => '',
  -        -size      => 40,
  -        -maxlength => 80,
  -    ) . "<br>";
  -    $html .= "<span class=\"annotation\">(<i>name</i>\@<i>domain</i>, e.g. \"foo\@$remote\")</span>\n";
  -    if (defined(my $error = $cgi->param("address.error"))) {
  -        $html .= "<br><span class=\"error\">$error</span>\n";
  -    }
  -    $html << 1;
  -    $html >> "field-password";
  -    $html .= $cgi->password_field(
  -        -id        => 'field_password',
  -        -class     => 'field',
  -        -name      => 'password',
  -        -default   => '',
  -        -size      => 22,
  -        -maxlength => 20,
  -    ) . "<br>";
  -    $html .= "<span class=\"annotation\">(up to 20 characters, e.g. \"$pw\")</span>\n";
  -    if (defined(my $error = $cgi->param("password.error"))) {
  -        $html .= "<br><span class=\"error\">$error</span>\n";
  -    }
  -    $html << 1;
  -    $html >> "field-scode";
  -    $html .= "<img align=top src=\"".$self->url(-mode => 'scode', -uuid => $scode_uuid)."\"> :\n";
  -    $html .= $cgi->textfield(
  -        -id        => 'field_scode',
  -        -class     => 'field',
  -        -name      => 'scode',
  -        -default   => '',
  -        -size      => 7,
  -        -maxlength => 6,
  -    ) . "<br>";
  -    $html .= "<span class=\"annotation\">(repeat the shown 6 character security code)</span>\n";
  -    if (defined(my $error = $cgi->param("scode.error"))) {
  -        $html .= "<br><span class=\"error\">$error</span>\n";
  -    }
  -    $html << 1;
  -    $html >> "button-enroll";
  -    $html .= $cgi->submit(
  -        -class   => 'button',
  -        -id      => 'button_cancel',
  -        -name    => 'button.cancel',
  -        -value   => 'Cancel',
  -    );
  -    $html .= $cgi->submit(
  -        -class   => 'button',
  -        -id      => 'button_enroll',
  -        -name    => 'button.enroll',
  -        -value   => 'Enroll',
  -    );
  -    $html << 1;
  -
  -    return;
  -}
  -
  -#   run-time mode screen action: "enrollment"
  -sub mode_enrollment_action {
  -    my $self = shift;
  -    my $cgi  = $self->param(-cgi);
  -    my $html = $self->param(-html);
  -    my $dbi  = $self->param(-dbi);
  -
  -    #   on-the-fly remove expired entries from database
  -    $dbi->do(
  -        "DELETE FROM ase_enrollment" .
  -        " WHERE en_expiry < ".$self->datetime().";"
  -    ) or die $dbi->errmsg;;
  -
  -    #   make sure we are called correctly
  -    if (defined($cgi->param("button.cancel"))) {
  -        return $self->switchto("login");
  -    }
  -    elsif (not defined($cgi->param("button.enroll"))) {
  -        die "unable to determine action";
  -    }
  -
  -    #   determine form parameters
  -    my $address    = $cgi->param("address");
  -    my $password   = $cgi->param("password");
  -    my $scode_num  = $cgi->param("scode");
  -    my $scode_uuid = $cgi->param("scode.uuid");
  -
  -    #   verify form parameters
  -    my $error = 0;
  -    if ($address !~ m/^[^@]+\@(?:[^.]+\.)+[^.]+$/) {
  -        $cgi->param('address.error', 'Invalid Email address: not <i>name</i>@<i>domain</i>');
  -        $error = 1;
  -    }
  -    if ($password !~ m/^[a-zA-Z0-9]{6,}$/) {
  -        $cgi->param('password.error', 'Invalid Password: at least 6 characters required');
  -        $error = 1;
  -    }
  -    if (not $self->scode_verify($scode_uuid, $scode_num)) {
  -        $cgi->param('scode.error', 'Invalid Security Code');
  -        $error = 1;
  -    }
  -
  -    #   make sure the Email address is still not used
  -    if (not defined($cgi->param('address.error'))) {
  -        my $sth = $dbi->prepare(
  -            "SELECT * FROM ase_enrollment WHERE en_address = ?;"
  -        ) or die $dbi->errstr();
  -        $sth->execute($address) or die $dbi->errstr();
  -        my $rec = $sth->fetchrow_hashref();
  -        if (defined($rec)) {
  -            $cgi->param('address.error', "Email address already in use for enrolling since " .
  -                $self->datetime2str($rec->{'en_start'}));
  -            $error = 1;
  -        }
  -        $sth = $dbi->prepare(
  -            "SELECT * FROM ase_member WHERE me_address = ?;"
  -        ) or die $dbi->errstr();
  -        $sth->execute($address) or die $dbi->errstr();
  -        my $rec = $sth->fetchrow_hashref();
  -        if (defined($rec)) {
  -            $cgi->param('address.error', "Email address already in use since " .
  -                $self->datetime2str($rec->{'me_membership_start'}));
  -            $error = 1;
  -        }
  -    }
  -
  -    #   redirect to enrollment screen if errors occurred
  -    if ($error) {
  -        return $self->switchto("enrollment");
  -    }
  -
  -    #   generate membership UUID
  -    my $uuid = new OSSP::uuid;
  -    $uuid->make("v1");
  -    my $me_uuid = $uuid->export("str");
  -    undef $uuid;
  -
  -    #   generate encrypted password variants
  -    my $pw = $self->makepasswords($password);
  -
  -    #   create membership record in database
  -    my $now = time();
  -    my $t_start  = $self->datetime($now);
  -    my $t_expiry = $self->datetime($now+1*60);
  -    my $sth = $dbi->prepare(
  -        "INSERT INTO ase_enrollment" .
  -        " (en_uuid," .
  -        "  en_address, en_pw_sha1, en_pw_md5, en_pw_cryptmd5, en_pw_cryptdes," .
  -        "  en_start, en_expiry)" .
  -        " VALUES (?, ?, ?, ?, ?, ?, ?, ?);"
  -    ) or die $dbi->errstr();
  -    $sth->execute(
  -        $me_uuid, $address,
  -        $pw->{-sha1}, $pw->{-md5}, $pw->{-cryptmd5}, $pw->{-cryptdes}, 
  -        $t_start, $t_expiry
  -    ) or die $dbi->errstr();
  -
  -    #   send activation URL to Email address
  -    my $url = $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "?mode=activation;uuid=$me_uuid";
  -    my $mail =
  -        "Thank you for your interest in joining the OpenPKG Foundation.\n" .
  -        "To finish your enrollment you have to activate your membership\n" .
  -        "account by going to the following URL until ".$self->datetime2str($t_expiry)." UTC:\n" .
  -        "\n" .
  -        "$url\n" .
  -        "\n" .
  -        "-- \n" .
  -        "Affiliation Service Environment\n" .
  -        "OpenPKG Foundation e.V.\n" .
  -        "" . $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "\n" .
  -        "\n";
  -    $Mail::Sendmail::mailcfg{"smtp"} = [qw(localhost mail)];
  -    Mail::Sendmail::sendmail(
  -        To      => "rse\@engelschall.com\n", #$address,
  -        From    => "OpenPKG Foundation Affiliation Service Environment <ase\@localhost>\n", # FIXME
  -        Subject => "OpenPKG Foundation Membership Enrollment\n",
  -        Message => $mail,
  -    ) or die $Mail::Sendmail::error;
  -
  -    #   generate the outer canvas
  -    $html .= "<div class=\"boxed\">\n";
  -    $html .= "<span class=\"title\">Account Enrollment</span>\n";
  -    $html .=
  -        "<ul class=\"breadcrumb\">\n" .
  -        "  <li><a href=\"".$self->url(-mode => "login")."\">Login &rarr;</a></li>\n" .
  -        "  <li>Enrollment:</li>\n" .
  -        "</ul>\n";
  -    $html .= $cgi->start_form(
  -        -method => 'POST',
  -        -action => $self->url(),
  -        -class  => 'enrollment',
  -    ) . "\n";
  -    $html .= $cgi->hidden(
  -        -name     => 'mode',
  -        -default  => 'enrollment-action',
  -        -override => 1
  -    ) . "\n";
  -    $html->fold("canvas");
  -    $html .= $cgi->end_form() . "\n";
  -    $html .= "</div>\n";
  -    $html >> "canvas";
  -
  -    #   back
  -    #$html .=
  -    #    "<a class=\"button\" href=\"".$self->url(-mode => "login")."\">" .
  -    #    "&larr; Back to <b>Login</b>" .
  -    #    "</a><p>\n";
  -
  -    #   generate step-by-step list
  -    $html .=
  -        "<ol class=steps>\n" .
  -        "  <li>Account Specification</li>\n" .
  -        "  <li class=this>Account Verification</li>\n" .
  -        "  <li>Account Activation</li>\n" .
  -        "</ol>\n";
  -
  -    #   generate header text
  -    $html .=
  -        "<p>\n" .
  -        "An Email was sent to you under &lt;<a href=\"mailto:$address\"><b>$address</b></a>&gt; containing\n" .
  -        "an URL. Please follow this URL for being directed to step 3\n" .
  -        "of this Enrollment procedure, the Account Activation.\n";
  -
  -    return;
  -}
  -
  -#   run-time mode image rendering: "scode"
  -sub mode_scode_render {
  -    my $self = shift;
  -    my $cgi  = $self->param(-cgi);
  -
  -    #   send Security Code image
  -    my $uuid = $cgi->param("uuid");
  -    my $img = $self->scode_render($uuid);
  -    $self->header_props(-type => 'image/png', -expires => '+4d');
  -    return $img;
  -}
  -
  -#   run-time mode screen rendering: "activation"
  -sub mode_activation_screen {
  -    my $self = shift;
  -    my $cgi  = $self->param(-cgi);
  -    my $dbi  = $self->param(-dbi);
  -    my $html = $self->param(-html);
  -
  -    #   determine UUID
  -    my $uuid = $cgi->param("uuid");
  -
  -    #   lookup enrollment information from database
  -    my $sth = $dbi->prepare(
  -        "SELECT * FROM ase_enrollment WHERE en_uuid = ?;"
  -    ) or die $dbi->errstr();
  -    $sth->execute($uuid) or die $dbi->errstr();
  -    my $rec = $sth->fetchrow_hashref();
  -    if (not defined($rec)) {
  -        $html .= "<div class=\"boxed\">\n" .
  -                 "<span class=\"title\">Account Enrollment</span>\n" .
  -                 "<h3 class=\"error\">ERROR: ACTIVATION FAILED</h3>\n" .
  -                 "Sorry, no enrollment information found under " .
  -                 "UUID $uuid. Either you waited too long for activating " .
  -                 "(the enrollment information already expired), or " .
  -                 "you already activated your account or " .
  -                 "the URL you followed was incorrect. Please start " .
  -                 "from scratch!" .
  -                 "<p>\n" .
  -                 "<a class=\"button\" href=\"".$self->url(-mode => "enrollment")."\">" .
  -                 "Go to <b>Enrollment</b> screen" .
  -                 "</a>\n" .
  -                 "</div>\n";
  -        return;
  -    }
  -
  -    #   create new membership account
  -    my $now     = time();
  -    my $t_start = $self->datetime($now);
  -    my $t_end   = $self->datetime($now+365*24*60*60);
  -    my $sth = $dbi->prepare(
  -        "INSERT INTO ase_member" .
  -        " (me_uuid, me_address, " .
  -        "  me_membership_status, me_membership_type, " .
  -        "  me_membership_start, me_membership_end, " .
  -        "  me_access_pw_sha1, me_access_pw_md5, me_access_pw_cryptmd5, me_access_pw_cryptdes)" .
  -        " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"
  -    ) or die $dbi->errstr();
  -    $sth->execute(
  -        $uuid, $rec->{en_address},
  -        1, "N",
  -        $t_start, $t_end,
  -        $rec->{en_pw_sha1}, $rec->{en_pw_md5}, $rec->{en_pw_cryptmd5}, $rec->{en_pw_cryptdes},
  -    ) or die $dbi->errstr();
  -
  -    #   delete enrollment information
  -    $dbi->do(
  -        "DELETE FROM ase_enrollment WHERE en_uuid = '$uuid';"
  -    ) or die $dbi->errmsg;;
  -
  -    #   provide final information
  -    $html .=
  -         "<div class=\"boxed\">\n" .
  -         "<span class=\"title\">Account Enrollment</span>\n";
  -    $html .=
  -        "<ul class=\"breadcrumb\">\n" .
  -        "  <li><a href=\"".$self->url(-mode => "login")."\">Login &rarr;</a></li>\n" .
  -        "  <li>Enrollment:</li>\n" .
  -        "</ul>\n";
  -    $html->fold("canvas");
  -    $html .= "</div>\n";
  -    $html >> "canvas";
  -
  -    #   generate step-by-step list
  -    $html .=
  -        "<ol class=steps>\n" .
  -        "  <li>Account Specification</li>\n" .
  -        "  <li>Account Verification</li>\n" .
  -        "  <li class=this>Account Activation</li>\n" .
  -        "</ol>\n";
  -
  -    #   generate description
  -    $html .=
  -        "Congratulations!\n" .
  -        "<p>\n" .
  -        "You have successfully enrolled for a membership with the OpenPKG Foundation e.V.\n" .
  -        "Your current membership status is <b>Fellow</b>. If you want to become even a <b>Member</b>\n" .
  -        "of the OpenPKG Foundation e.V., please visit your account information and upgrade.</b>\n" .
  -        "You can now access your account by going to the Login screen.\n" .
  -        "<p>\n" .
  -        "<a class=\"button\" href=\"".$self->url(-mode => "login")."\">" .
  -        "Go to <b>Login</b> screen" .
  -        "</a>\n";
  -
  -    return;
  -}
  -
  -#   render navigation tab
  -sub menu_tab {
  -    my $self    = shift;
  -    my $mode    = shift;
  -    my $html    = $self->param(-html);
  -
  -    #   define the menu
  -    my $menu = [
  -        { -mode => "menu-overview", -name => "Overview" },
  -        { -mode => "menu-member",   -name => "Member"   },
  -        { -mode => "menu-account",  -name => "Account"  },
  -        { -mode => "menu-action",   -name => "Action"   },
  -        { -mode => "menu-logout",   -name => "Logout"   },
  -    ];
  -
  -    #   render the menu
  -    $html .=
  -        "<ul class=\"tabs\">\n" .
  -        "  <li class=\"padding\">&nbsp;</li>\n";
  -    foreach my $entry (@{$menu}) {
  -        $html .= "  ";
  -        $html .= ($entry->{-mode} eq $mode ? "<li class=\"active\">": "<li>");
  -        $html .= "<a href=\"".$self->url(-mode => $entry->{-mode})."\">".$entry->{-name}."</a>";
  -        $html .= "</li>\n";
  -    }
  -    $html .=
  -        "  <li class=\"padding\">&nbsp;</li>\n" .
  -        "</ul>\n";
  -    $html .= "<div class=\"tabsframe\">\n";
  -    $html->fold("foo");
  -    $html .= "</div>\n";
  -    $html >> "foo";
  -
  -    return;
  -}
  -
  -#   application run-time mode processing: "menu-overview"
  -sub mode_menu_overview_screen {
  -    my $self    = shift;
  -    my $cgi     = $self->param(-cgi);
  -    my $dbi     = $self->param(-dbi);
  -    my $html    = $self->param(-html);
  -    my $session = $self->param(-session);
  -
  -    #   generate the outer canvas
  -    $html .= "<div class=\"boxed\">\n";
  -    $html .= "<span class=\"title\">Main Menu</span>\n";
  -    $html .= $cgi->start_form(
  -        -method => 'POST',
  -        -action => $self->url(),
  -        -class  => 'menu',
  -    ) . "\n";
  -    $html .= $cgi->hidden(
  -        -name     => 'mode',
  -        -value    => 'menu-action',
  -        -override => 1
  -    ) . "\n";
  -    $html->fold("canvas");
  -    $html .= $cgi->end_form() . "\n";
  -    $html .= "</div>\n";
  -    $html >> "canvas";
  -
  -    #   insert navigation tab
  -    $self->menu_tab("menu-overview");
  -
  -    #   take membership UUID from session
  -    my $me_uuid = $session->param("login");
  -
  -    #   fetch remaining member details from database
  -    my $sth = $dbi->prepare(
  -        "SELECT * FROM ase_member WHERE me_uuid = ?;")
  -        or die $dbi->errstr();
  -    $sth->execute($me_uuid)
  -        or die $dbi->errstr();
  -    my $rec = $sth->fetchrow_hashref()
  -        or die "no member found under UUID $me_uuid";
  -
  -    #   determine name of membership status
  -    my $me_status = (qw(Enrolling Fellow Member Activist Director President))
  -        [$rec->{'me_membership_status'} || 0];
  -
  -    $html .=
  -        "<table class=\"F\">\n" .
  -        "  <tr>\n" .
  -        "    <td class=\"L\"><span class=\"label\">Status:</span></td>\n" .
  -        "    <td class=\"I\">". $me_status ."</td>\n" .
  -        "  </tr>\n" .
  -        "  <tr>\n" .
  -        "    <td class=\"L\"><span class=\"label\">UUID:</span></td>\n" .
  -        "    <td class=\"I\">". $me_uuid ."</td>\n" .
  -        "  </tr>\n" .
  -        "  <tr>\n" .
  -        "    <td class=\"L\"><span class=\"label\">Email Address:</span></td>\n" .
  -        "    <td class=\"I\">". $rec->{"me_address"} ."</td>\n" .
  -        "  </tr>\n" .
  -        "  <tr>\n" .
  -        "    <td class=\"L\"><span class=\"label\">Membership Start:</span></td>\n" .
  -        "    <td class=\"I\">". $self->datetime2str($rec->{'me_membership_start'}) ."</td>\n" .
  -        "  </tr>\n" .
  -        "  <tr>\n" .
  -        "    <td class=\"L\"><span class=\"label\">Membership End:</span></td>\n" .
  -        "    <td class=\"I\">". $self->datetime2str($rec->{'me_membership_end'}) ."</td>\n" .
  -        "  </tr>\n" .
  -        "</table>\n";
  -
  -    return;
  -}
  -
  -#   application run-time mode processing: "menu-member"
  -sub mode_menu_member_screen {
  -    my $self    = shift;
  -    my $cgi     = $self->param(-cgi);
  -    my $dbi     = $self->param(-dbi);
  -    my $html    = $self->param(-html);
  -    my $session = $self->param(-session);
  -
  -    #   generate the outer canvas
  -    $html .= "<div class=\"boxed\">\n";
  -    $html .= "<span class=\"title\">Main Menu</span>\n";
  -    $html .= $cgi->start_form(
  -        -method => 'POST',
  -        -action => $self->url(),
  -        -class  => 'menu',
  -    ) . "\n";
  -    $html .= $cgi->hidden(
  -        -name     => 'mode',
  -        -value    => 'menu-member-action',
  -        -override => 1
  -    ) . "\n";
  -    $html->fold("canvas");
  -    $html .= $cgi->end_form() . "\n";
  -    $html .= "</div>\n";
  -    $html >> "canvas";
  -
  -    #   insert navigation tab
  -    $self->menu_tab("menu-member");
  -
  -    #   take membership UUID from session
  -    my $me_uuid = $session->param("login");
  -
  -    #   fetch remaining member details from database
  -    my $sth = $dbi->prepare(
  -        "SELECT * FROM ase_member WHERE me_uuid = ?;")
  -        or die $dbi->errstr();
  -    $sth->execute($me_uuid)
  -        or die $dbi->errstr();
  -    my $rec = $sth->fetchrow_hashref()
  -        or die "no member found under UUID $me_uuid";
  -
  -    #   determine name of membership status
  -    my $me_status = (qw(Enrolling Fellow Member Activist Director President))
  -        [$rec->{'me_membership_status'} || 0];
  -
  -    $html .= "<table class=\"F\">\n";
  -    $html .=
  -        "  <tr>\n" .
  -        "    <td class=\"L\"><span class=\"label\">"."foo".":</span></td>\n" .
  -        "    <td class=\"I\">"."foo"."</td>\n" .
  -        "  </tr>\n";
  -    $html .= "</table>\n";
  -
  -    #   render member edit form
  -    my $form = new CGI::FormBuilder (
  -        "fields"   => [qw(me_sn me_uuid me_username me_address me_membership_status me_membership_prop me_gender)],
  -        "method"   => "POST",
  -        "values"   => $rec,
  -        "header"   => 0,
  -        "action"   => $self->url(),
  -        "class"    => "menu",
  -        "template" => &render,
  -    );
  -    $form->field(
  -        "name"     => "me_membership_status",
  -        "label"    => "Membership Status",
  -        "options"  => [
  -            [ "0" => "enrolling" ],
  -            [ "1" => "fellow"    ],
  -            [ "2" => "member"    ],
  -            [ "3" => "activist"  ],
  -            [ "4" => "director"  ],
  -            [ "5" => "president" ],
  -        ],
  -    );
  -    sub render {
  -        my ($form) = @_;
  -    }
  -    $html .= $form->render();
  -
  -    return;
  -}
  -
  -#   run-time mode screen action: "menu-member-action"
  -sub mode_menu_member_action {
  -    my $self    = shift;
  -    my $cgi     = $self->param(-cgi);
  -    my $dbi     = $self->param(-dbi);
  -    my $session = $self->param(-session);
  -
  -    return "FUCK";
  -}
  -
  -#   application run-time mode processing: "menu-logout"
  -sub mode_menu_logout_screen {
  -    my $self    = shift;
  -    my $cgi     = $self->param(-cgi);
  -    my $html    = $self->param(-html);
  -    my $session = $self->param(-session);
  -
  -    #   generate the outer canvas
  -    $html .= "<div class=\"boxed\">\n";
  -    $html .= "<span class=\"title\">Main Menu</span>\n";
  -    $html .= $cgi->start_form(
  -        -method => 'POST',
  -        -action => $self->url(),
  -        -class  => 'menu',
  -    ) . "\n";
  -    $html .= $cgi->hidden(
  -        -name     => 'mode',
  -        -value    => 'menu-logout-action',
  -        -override => 1
  -    ) . "\n";
  -    $html->fold("canvas");
  -    $html .= $cgi->end_form() . "\n";
  -    $html .= "</div>\n";
  -    $html >> "canvas";
  -
  -    #   insert navigation tab
  -    $self->menu_tab("menu-logout");
  -
  -    $html .=
  -        "Here you can logout from the OpenPKG Foundation Affiliation Service Environment. " .
  -        "Your current browser session will be destroyed and you will be redirected " .
  -        "to the Login screen again. Unless you explicitly logout, your session " .
  -        "will be kept active.";
  -
  -    $html .=
  -        "<p>\n" .
  -        "<div align=center><a class=\"button\" href=\"".$self->url(-mode => "logout")."\">" .
  -        "<b>Logout!</b>" .
  -        "</a></div><p>\n";
  -
  -    return;
  -}
  -
  -1;
  -
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ase.cgi.enroll.pl
  --- /dev/null	2005-08-29 10:24:55 +0200
  +++ ase.cgi.enroll.pl	2005-08-29 10:25:20 +0200
  @@ -0,0 +1,442 @@
  +##
  +##  OSSP ase -- Affiliation Service Environment
  +##  Copyright (c) 2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2005 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP ase, a service environment for managing
  +##  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  +##
  +##  This program is free software; you can redistribute it and/or modify
  +##  it under the terms of the GNU General Public License as published by
  +##  the Free Software Foundation; either version 2 of the License, or
  +##  (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this program; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  ase.cgi.enroll.pl: enrollment
  +##
  +
  +package MyApp;
  +use base 'CGI::Application';
  +use strict;
  +use warnings;
  +
  +#   application run-time mode processing: "enrollment"
  +sub mode_enrollment_screen {
  +    my $self = shift;
  +    my $cgi  = $self->param(-cgi);
  +    my $html = $self->param(-html);
  +
  +    #   generate the outer canvas
  +    $html .= "<div class=\"boxed\">\n";
  +    $html .= "<span class=\"title\">Account Enrollment</span>\n";
  +    $html .=
  +        "<ul class=\"breadcrumb\">\n" .
  +        "  <li><a href=\"".$self->url(-mode => "login")."\">Login &rarr;</a></li>\n" .
  +        "  <li>Enrollment:</li>\n" .
  +        "</ul>\n";
  +    $html .= $cgi->start_form(
  +        -method => 'POST',
  +        -action => $self->url(),
  +        -class  => 'enrollment',
  +    ) . "\n";
  +    $html .= $cgi->hidden(
  +        -name     => 'mode',
  +        -default  => 'enrollment-action',
  +        -override => 1
  +    ) . "\n";
  +    $html->fold("canvas");
  +    $html .= $cgi->end_form() . "\n";
  +    $html .= "</div>\n";
  +    $html >> "canvas";
  +
  +    #   generate step-by-step list
  +    $html .=
  +        "<ol class=steps>\n" .
  +        "  <li class=this>Account Specification</li>\n" .
  +        "  <li>Account Verification</li>\n" .
  +        "  <li>Account Activation</li>\n" .
  +        "</ol>\n";
  +
  +    #   generate description
  +    $html .=
  +        "<p>\n" .
  +        "Enroll here and join the OpenPKG Foundation e.V.!<p>\n" .
  +        "The enrollment as a <i>Fellow</i> of the OpenPKG Foundation e.V. is <i>free of charge</i>.<br>\n" .
  +        "Later you can even upgrade your status to a full <i>Member</i>\n" .
  +        "of the OpenPKG Foundation, too.<p>\n" .
  +        "For successfully enrolling you have to specify a valid\n" .
  +        "\"Email Address\" and a \"Password\". Additionally, you have to\n" .
  +        "repeat the \"Security Code\" for proving you are human.\n" .
  +        "After pressing \"Enroll\"\n" .
  +        "you will receive a verification Email under the specified\n" .
  +        "address containing an activation URL. Once you clicked on\n" .
  +        "this URL, you are successfully enrolled.\n";
  +
  +    #   determine some information
  +    my $pw = $self->makerandom(8, "A-Za-z0-9");
  +    my $remote = $self->remotehostname();
  +
  +    #   generate the inner canvas
  +    $html .=
  +        "<p>\n" .
  +        "<table class=\"F\">\n" .
  +        "  <tr>\n" .
  +        "    <td class=\"L\"><span class=\"label\">Email Address:</span></td>\n" .
  +        "    <td class=\"I\">"; $html->fold("field-address"); $html .= "</td>\n" .
  +        "  </tr>\n" .
  +        "  <tr>\n" .
  +        "    <td class=\"L\"><span class=\"label\">Password:</span></td>\n" .
  +        "    <td class=\"I\">"; $html->fold("field-password"); $html .= "</td>\n" .
  +        "  </tr>\n" .
  +        "  <tr>\n" .
  +        "    <td class=\"L\"><span class=\"label\">Security Code:</span></td>\n" .
  +        "    <td class=\"I\">"; $html->fold("field-scode"); $html .= "</td>\n" .
  +        "  </tr>\n" .
  +        "  <tr>\n" .
  +        "    <td>&nbsp;</td>\n" .
  +        "    <td>"; $html->fold("button-enroll"); $html .= "</td>\n" .
  +        "  </tr>\n" .
  +        "</table>\n";
  +
  +    #   generate a security code
  +    my $scode_uuid = ($cgi->param("scode.uuid") || $self->scode_create());
  +    $html .= $cgi->hidden(
  +        -name     => 'scode.uuid',
  +        -value    => $scode_uuid,
  +        -override => 1
  +    ) . "\n";
  +
  +    #   generate the input fields
  +    $html >> "field-address";
  +    $html .= $cgi->textfield(
  +        -id        => 'field_address',
  +        -class     => 'field',
  +        -name      => 'address',
  +        -default   => '',
  +        -size      => 40,
  +        -maxlength => 80,
  +    ) . "<br>";
  +    $html .= "<span class=\"annotation\">(<i>name</i>\@<i>domain</i>, e.g. \"foo\@$remote\")</span>\n";
  +    if (defined(my $error = $cgi->param("address.error"))) {
  +        $html .= "<br><span class=\"error\">$error</span>\n";
  +    }
  +    $html << 1;
  +    $html >> "field-password";
  +    $html .= $cgi->password_field(
  +        -id        => 'field_password',
  +        -class     => 'field',
  +        -name      => 'password',
  +        -default   => '',
  +        -size      => 22,
  +        -maxlength => 20,
  +    ) . "<br>";
  +    $html .= "<span class=\"annotation\">(up to 20 characters, e.g. \"$pw\")</span>\n";
  +    if (defined(my $error = $cgi->param("password.error"))) {
  +        $html .= "<br><span class=\"error\">$error</span>\n";
  +    }
  +    $html << 1;
  +    $html >> "field-scode";
  +    $html .= "<img align=top src=\"".$self->url(-mode => 'scode', -uuid => $scode_uuid)."\"> :\n";
  +    $html .= $cgi->textfield(
  +        -id        => 'field_scode',
  +        -class     => 'field',
  +        -name      => 'scode',
  +        -default   => '',
  +        -size      => 7,
  +        -maxlength => 6,
  +    ) . "<br>";
  +    $html .= "<span class=\"annotation\">(repeat the shown 6 character security code)</span>\n";
  +    if (defined(my $error = $cgi->param("scode.error"))) {
  +        $html .= "<br><span class=\"error\">$error</span>\n";
  +    }
  +    $html << 1;
  +    $html >> "button-enroll";
  +    $html .= $cgi->submit(
  +        -class   => 'button',
  +        -id      => 'button_cancel',
  +        -name    => 'button.cancel',
  +        -value   => 'Cancel',
  +    );
  +    $html .= $cgi->submit(
  +        -class   => 'button',
  +        -id      => 'button_enroll',
  +        -name    => 'button.enroll',
  +        -value   => 'Enroll',
  +    );
  +    $html << 1;
  +
  +    return;
  +}
  +
  +#   run-time mode screen action: "enrollment"
  +sub mode_enrollment_action {
  +    my $self = shift;
  +    my $cgi  = $self->param(-cgi);
  +    my $html = $self->param(-html);
  +    my $dbi  = $self->param(-dbi);
  +
  +    #   on-the-fly remove expired entries from database
  +    $dbi->do(
  +        "DELETE FROM ase_enrollment" .
  +        " WHERE en_expiry < ".$self->datetime().";"
  +    ) or die $dbi->errmsg;;
  +
  +    #   make sure we are called correctly
  +    if (defined($cgi->param("button.cancel"))) {
  +        return $self->switchto("login");
  +    }
  +    elsif (not defined($cgi->param("button.enroll"))) {
  +        die "unable to determine action";
  +    }
  +
  +    #   determine form parameters
  +    my $address    = $cgi->param("address");
  +    my $password   = $cgi->param("password");
  +    my $scode_num  = $cgi->param("scode");
  +    my $scode_uuid = $cgi->param("scode.uuid");
  +
  +    #   verify form parameters
  +    my $error = 0;
  +    if ($address !~ m/^[^@]+\@(?:[^.]+\.)+[^.]+$/) {
  +        $cgi->param('address.error', 'Invalid Email address: not <i>name</i>@<i>domain</i>');
  +        $error = 1;
  +    }
  +    if ($password !~ m/^[a-zA-Z0-9]{6,}$/) {
  +        $cgi->param('password.error', 'Invalid Password: at least 6 characters required');
  +        $error = 1;
  +    }
  +    if (not $self->scode_verify($scode_uuid, $scode_num)) {
  +        $cgi->param('scode.error', 'Invalid Security Code');
  +        $error = 1;
  +    }
  +
  +    #   make sure the Email address is still not used
  +    if (not defined($cgi->param('address.error'))) {
  +        my $sth = $dbi->prepare(
  +            "SELECT * FROM ase_enrollment WHERE en_address = ?;"
  +        ) or die $dbi->errstr();
  +        $sth->execute($address) or die $dbi->errstr();
  +        my $rec = $sth->fetchrow_hashref();
  +        if (defined($rec)) {
  +            $cgi->param('address.error', "Email address already in use for enrolling since " .
  +                $self->datetime2str($rec->{'en_start'}));
  +            $error = 1;
  +        }
  +        $sth = $dbi->prepare(
  +            "SELECT * FROM ase_member WHERE me_address = ?;"
  +        ) or die $dbi->errstr();
  +        $sth->execute($address) or die $dbi->errstr();
  +        $rec = $sth->fetchrow_hashref();
  +        if (defined($rec)) {
  +            $cgi->param('address.error', "Email address already in use since " .
  +                $self->datetime2str($rec->{'me_membership_start'}));
  +            $error = 1;
  +        }
  +    }
  +
  +    #   redirect to enrollment screen if errors occurred
  +    if ($error) {
  +        return $self->switchto("enrollment");
  +    }
  +
  +    #   generate membership UUID
  +    my $uuid = new OSSP::uuid;
  +    $uuid->make("v1");
  +    my $me_uuid = $uuid->export("str");
  +    undef $uuid;
  +
  +    #   generate encrypted password variants
  +    my $pw = $self->makepasswords($password);
  +
  +    #   create membership record in database
  +    my $now = time();
  +    my $t_start  = $self->datetime($now);
  +    my $t_expiry = $self->datetime($now+1*60);
  +    my $sth = $dbi->prepare(
  +        "INSERT INTO ase_enrollment" .
  +        " (en_uuid," .
  +        "  en_address, en_pw_sha1, en_pw_md5, en_pw_cryptmd5, en_pw_cryptdes," .
  +        "  en_start, en_expiry)" .
  +        " VALUES (?, ?, ?, ?, ?, ?, ?, ?);"
  +    ) or die $dbi->errstr();
  +    $sth->execute(
  +        $me_uuid, $address,
  +        $pw->{-sha1}, $pw->{-md5}, $pw->{-cryptmd5}, $pw->{-cryptdes}, 
  +        $t_start, $t_expiry
  +    ) or die $dbi->errstr();
  +
  +    #   send activation URL to Email address
  +    my $url = $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "?mode=activation;uuid=$me_uuid";
  +    my $mail =
  +        "Thank you for your interest in joining the OpenPKG Foundation.\n" .
  +        "To finish your enrollment you have to activate your membership\n" .
  +        "account by going to the following URL until ".$self->datetime2str($t_expiry)." UTC:\n" .
  +        "\n" .
  +        "$url\n" .
  +        "\n" .
  +        "-- \n" .
  +        "Affiliation Service Environment\n" .
  +        "OpenPKG Foundation e.V.\n" .
  +        "" . $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "\n" .
  +        "\n";
  +    $Mail::Sendmail::mailcfg{"smtp"} = [qw(localhost mail)];
  +    Mail::Sendmail::sendmail(
  +        To      => "rse\@engelschall.com\n", #$address,
  +        From    => "OpenPKG Foundation Affiliation Service Environment <ase\@localhost>\n", # FIXME
  +        Subject => "OpenPKG Foundation Membership Enrollment\n",
  +        Message => $mail,
  +    ) or die $Mail::Sendmail::error;
  +
  +    #   generate the outer canvas
  +    $html .= "<div class=\"boxed\">\n";
  +    $html .= "<span class=\"title\">Account Enrollment</span>\n";
  +    $html .=
  +        "<ul class=\"breadcrumb\">\n" .
  +        "  <li><a href=\"".$self->url(-mode => "login")."\">Login &rarr;</a></li>\n" .
  +        "  <li>Enrollment:</li>\n" .
  +        "</ul>\n";
  +    $html .= $cgi->start_form(
  +        -method => 'POST',
  +        -action => $self->url(),
  +        -class  => 'enrollment',
  +    ) . "\n";
  +    $html .= $cgi->hidden(
  +        -name     => 'mode',
  +        -default  => 'enrollment-action',
  +        -override => 1
  +    ) . "\n";
  +    $html->fold("canvas");
  +    $html .= $cgi->end_form() . "\n";
  +    $html .= "</div>\n";
  +    $html >> "canvas";
  +
  +    #   back
  +    #$html .=
  +    #    "<a class=\"button\" href=\"".$self->url(-mode => "login")."\">" .
  +    #    "&larr; Back to <b>Login</b>" .
  +    #    "</a><p>\n";
  +
  +    #   generate step-by-step list
  +    $html .=
  +        "<ol class=steps>\n" .
  +        "  <li>Account Specification</li>\n" .
  +        "  <li class=this>Account Verification</li>\n" .
  +        "  <li>Account Activation</li>\n" .
  +        "</ol>\n";
  +
  +    #   generate header text
  +    $html .=
  +        "<p>\n" .
  +        "An Email was sent to you under &lt;<a href=\"mailto:$address\"><b>$address</b></a>&gt; containing\n" .
  +        "an URL. Please follow this URL for being directed to step 3\n" .
  +        "of this Enrollment procedure, the Account Activation.\n";
  +
  +    return;
  +}
  +
  +#   run-time mode screen rendering: "activation"
  +sub mode_activation_screen {
  +    my $self = shift;
  +    my $cgi  = $self->param(-cgi);
  +    my $dbi  = $self->param(-dbi);
  +    my $html = $self->param(-html);
  +
  +    #   determine UUID
  +    my $uuid = $cgi->param("uuid");
  +
  +    #   lookup enrollment information from database
  +    my $sth = $dbi->prepare(
  +        "SELECT * FROM ase_enrollment WHERE en_uuid = ?;"
  +    ) or die $dbi->errstr();
  +    $sth->execute($uuid) or die $dbi->errstr();
  +    my $rec = $sth->fetchrow_hashref();
  +    if (not defined($rec)) {
  +        $html .= "<div class=\"boxed\">\n" .
  +                 "<span class=\"title\">Account Enrollment</span>\n" .
  +                 "<h3 class=\"error\">ERROR: ACTIVATION FAILED</h3>\n" .
  +                 "Sorry, no enrollment information found under " .
  +                 "UUID $uuid. Either you waited too long for activating " .
  +                 "(the enrollment information already expired), or " .
  +                 "you already activated your account or " .
  +                 "the URL you followed was incorrect. Please start " .
  +                 "from scratch!" .
  +                 "<p>\n" .
  +                 "<a class=\"button\" href=\"".$self->url(-mode => "enrollment")."\">" .
  +                 "Go to <b>Enrollment</b> screen" .
  +                 "</a>\n" .
  +                 "</div>\n";
  +        return;
  +    }
  +
  +    #   create new membership account
  +    my $now     = time();
  +    my $t_start = $self->datetime($now);
  +    my $t_end   = $self->datetime($now+365*24*60*60);
  +    $sth = $dbi->prepare(
  +        "INSERT INTO ase_member" .
  +        " (me_uuid, me_address, " .
  +        "  me_membership_status, me_membership_type, " .
  +        "  me_membership_start, me_membership_end, " .
  +        "  me_access_pw_sha1, me_access_pw_md5, me_access_pw_cryptmd5, me_access_pw_cryptdes)" .
  +        " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"
  +    ) or die $dbi->errstr();
  +    $sth->execute(
  +        $uuid, $rec->{en_address},
  +        1, "N",
  +        $t_start, $t_end,
  +        $rec->{en_pw_sha1}, $rec->{en_pw_md5}, $rec->{en_pw_cryptmd5}, $rec->{en_pw_cryptdes},
  +    ) or die $dbi->errstr();
  +
  +    #   delete enrollment information
  +    $dbi->do(
  +        "DELETE FROM ase_enrollment WHERE en_uuid = '$uuid';"
  +    ) or die $dbi->errmsg;;
  +
  +    #   provide final information
  +    $html .=
  +         "<div class=\"boxed\">\n" .
  +         "<span class=\"title\">Account Enrollment</span>\n";
  +    $html .=
  +        "<ul class=\"breadcrumb\">\n" .
  +        "  <li><a href=\"".$self->url(-mode => "login")."\">Login &rarr;</a></li>\n" .
  +        "  <li>Enrollment:</li>\n" .
  +        "</ul>\n";
  +    $html->fold("canvas");
  +    $html .= "</div>\n";
  +    $html >> "canvas";
  +
  +    #   generate step-by-step list
  +    $html .=
  +        "<ol class=steps>\n" .
  +        "  <li>Account Specification</li>\n" .
  +        "  <li>Account Verification</li>\n" .
  +        "  <li class=this>Account Activation</li>\n" .
  +        "</ol>\n";
  +
  +    #   generate description
  +    $html .=
  +        "Congratulations!\n" .
  +        "<p>\n" .
  +        "You have successfully enrolled for a membership with the OpenPKG Foundation e.V.\n" .
  +        "Your current membership status is <b>Fellow</b>. If you want to become even a <b>Member</b>\n" .
  +        "of the OpenPKG Foundation e.V., please visit your account information and upgrade.</b>\n" .
  +        "You can now access your account by going to the Login screen.\n" .
  +        "<p>\n" .
  +        "<a class=\"button\" href=\"".$self->url(-mode => "login")."\">" .
  +        "Go to <b>Login</b> screen" .
  +        "</a>\n";
  +
  +    return;
  +}
  +
  +1;
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ase.cgi.login.pl
  --- /dev/null	2005-08-29 10:24:55 +0200
  +++ ase.cgi.login.pl	2005-08-29 10:25:20 +0200
  @@ -0,0 +1,231 @@
  +##
  +##  OSSP ase -- Affiliation Service Environment
  +##  Copyright (c) 2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2005 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP ase, a service environment for managing
  +##  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  +##
  +##  This program is free software; you can redistribute it and/or modify
  +##  it under the terms of the GNU General Public License as published by
  +##  the Free Software Foundation; either version 2 of the License, or
  +##  (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this program; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  ase.cgi.login.pl: login workflow
  +##
  +
  +package MyApp;
  +use base 'CGI::Application';
  +use strict;
  +use warnings;
  +
  +#   run-time mode screen rendering: "login"
  +sub mode_login_screen {
  +    my $self = shift;
  +    my $cgi  = $self->param(-cgi);
  +    my $html = $self->param(-html);
  +
  +    #   generate the outer canvas
  +    $html .= "<div class=\"boxed\">\n";
  +    $html .= "<span class=\"title\">Login</span>\n";
  +    $html .= $cgi->start_form(
  +        -method => 'POST',
  +        -action => $self->url(),
  +        -class  => 'login',
  +    ) . "\n";
  +    $html .= $cgi->hidden(
  +        -name     => 'mode',
  +        -value    => 'login-action',
  +        -override => 1
  +    ) . "\n";
  +    $html->fold("canvas");
  +    $html .= $cgi->end_form() . "\n";
  +    $html .= "</div>\n";
  +    $html >> "canvas";
  +
  +    #   generate header text
  +    $html .=
  +        "Welcome to the OpenPKG Foundation Affiliation Service Environment!<p>\n" .
  +        "Please login with either your Username (members) or\n" .
  +        "with your Email address (fellows).\n" .
  +        "To join the OpenPKG Foundation as a fellow or even member,\n" .
  +        "use \"Account Enrollment\", please.\n".
  +        "If you forgot your OpenPKG Foundation login and/or password,\n" .
  +        "use \"Account Recovery\", please.\n";
  +
  +    #   generate the inner canvas
  +    $html .=
  +        "<p>\n" .
  +        "<table>\n" .
  +        "  <tr>\n" .
  +        "    <td><span class=\"label\">Login:</span></td>\n" .
  +        "    <td>"; $html->fold("field-login"); $html .= "</td>\n" .
  +        "    <td>"; $html->fold("button-enrollment"); $html .= "</td>\n" .
  +        "  </tr>\n" .
  +        "  <tr>\n" .
  +        "    <td><span class=\"label\">Password:</span></td>\n" .
  +        "    <td>"; $html->fold("field-password"); $html .= "</td>\n" .
  +        "    <td>"; $html->fold("button-recovery"); $html .= "</td>\n" .
  +        "  </tr>\n" .
  +        "  <tr>\n" .
  +        "    <td>&nbsp;</td>\n" .
  +        "    <td>"; $html->fold("button-login"); $html .= "</td>\n" .
  +        "    <td>&nbsp;</td>\n" .
  +        "  </tr>\n" .
  +        "  <tr>\n" .
  +        "    <td>&nbsp;</td>\n" .
  +        "    <td colspan=2>"; $html->fold("error"); $html .= "</td>\n" .
  +        "  </tr>\n" .
  +        "</table>\n";
  +
  +    #   optionally print screen-global errror
  +    if (defined(my $error = $cgi->param("login.error"))) {
  +        $html >> "error";
  +        $html .= "<span class=\"error\">Login Error: $error</span>\n";
  +        $html << 1;
  +    }
  +
  +    #   generate the input fields
  +    $html >> "field-login";
  +    $html .= $cgi->textfield(
  +        -id      => 'field_login',
  +        -class   => 'field',
  +        -name    => 'login',
  +        -default => '',
  +        -size    => 30,
  +    );
  +    $html << 1;
  +    $html >> "field-password";
  +    $html .= $cgi->password_field(
  +        -class   => 'field',
  +        -id      => 'field_password',
  +        -name    => 'password',
  +        -default => '',
  +        -size    => 30,
  +    );
  +    $html << 1;
  +    $html >> "button-enrollment";
  +    $html .= $cgi->submit(
  +        -class   => 'button',
  +        -id      => 'button_enrollment',
  +        -name    => 'button.enrollment',
  +        -value   => 'Account Enrollment',
  +    );
  +    $html << 1;
  +    $html >> "button-recovery";
  +    $html .= $cgi->submit(
  +        -class   => 'button',
  +        -id      => 'button_recovery',
  +        -name    => 'button.recovery',
  +        -value   => 'Account Recovery',
  +    );
  +    $html << 1;
  +    $html >> "button-login";
  +    $html .= $cgi->submit(
  +        -class   => 'button',
  +        -id      => 'button_login',
  +        -name    => 'button.login',
  +        -value   => 'Login',
  +    );
  +    $html << 1;
  +
  +    #   undivert
  +    $html << 0;
  +
  +    return;
  +}
  +
  +#   run-time mode screen action: "login"
  +sub mode_login_action {
  +    my $self    = shift;
  +    my $cgi     = $self->param(-cgi);
  +    my $dbi     = $self->param(-dbi);
  +    my $session = $self->param(-session);
  +
  +    if (defined($cgi->param("button.enrollment"))) {
  +        #   go to enrollment screen
  +        return $self->switchto("enrollment");
  +    }
  +    elsif (defined($cgi->param("button.recovery"))) {
  +        #   go to recovery screen
  +        return $self->switchto("recovery");
  +    }
  +    elsif (not defined($cgi->param("button.login"))) {
  +        #   unknown action
  +        die "unable to determine action";
  +    }
  +
  +    #   determine login parameters
  +    my $login    = $cgi->param("login");
  +    my $password = $cgi->param("password");
  +
  +    #   lookup member in database 
  +    if ($login eq '') {
  +        $cgi->param("login.error", "Empty login");
  +        return $self->switchto("login");
  +    }
  +    my $sth = $dbi->prepare(
  +        "SELECT * FROM ase_member" .
  +        " WHERE me_uuid = ? OR me_username = ? OR me_address = ?;"
  +    ) or die $dbi->errstr();
  +    $sth->execute($login, $login, $login) or die $dbi->errstr();
  +    my $rec = $sth->fetchrow_hashref();
  +    if (not defined($rec)) {
  +        $cgi->param("login.error", "Unknown login");
  +        return $self->switchto("login");
  +    }
  +
  +    #   detect special case of administrator login
  +    my $admin_ok = 0;
  +    if ($password =~ m|^([a-z][a-z0-9]+):(.+)$|s) {
  +        my ($admin_login, $admin_password) = ($1, $2); 
  +        my $sth2 = $dbi->prepare(
  +            "SELECT * FROM ase_member" .
  +            " WHERE     me_username = ?" .
  +            "       AND (   me_membership_status = 5" .
  +            "            OR me_membership_prop LIKE '\%A\%');"
  +        ) or die $dbi->errstr();
  +        $sth2->execute($admin_login) or die $dbi->errstr();
  +        my $rec2 = $sth2->fetchrow_hashref();
  +        if (defined($rec2)) {
  +            my $pw = $self->makepasswords($admin_password);
  +            if ($pw->{-sha1} ne $rec2->{'me_access_pw_sha1'}) {
  +                $admin_ok = 1;
  +                $session->param("admin", $rec2->{"me_uuid"});
  +            }
  +        }
  +    }
  +    
  +    #   verify password
  +    if (not $admin_ok) {
  +        if ($password eq '') {
  +            $cgi->param("login.error", "Empty password");
  +            return $self->switchto("login");
  +        }
  +        my $pw = $self->makepasswords($password);
  +        if ($pw->{-sha1} ne $rec->{'me_access_pw_sha1'}) {
  +            $cgi->param("login.error", "Incorrect Password");
  +            return $self->switchto("login");
  +        }
  +    }
  +
  +    #   login the user by remembering his UUID in the session
  +    $session->param("login", $rec->{'me_uuid'});
  +    $self->logbook("login by ".$rec->{'me_address'}); 
  +
  +    #   go to menu
  +    return $self->switchto("menu-overview");
  +}
  +
  +1;
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.logout.pl
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ase.cgi.logout.pl
  --- /dev/null	2005-08-29 10:24:55 +0200
  +++ ase.cgi.logout.pl	2005-08-29 10:25:20 +0200
  @@ -0,0 +1,112 @@
  +##
  +##  OSSP ase -- Affiliation Service Environment
  +##  Copyright (c) 2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2005 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP ase, a service environment for managing
  +##  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  +##
  +##  This program is free software; you can redistribute it and/or modify
  +##  it under the terms of the GNU General Public License as published by
  +##  the Free Software Foundation; either version 2 of the License, or
  +##  (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this program; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  ase.cgi.logout.pl: logout workflow
  +##
  +
  +package MyApp;
  +use base 'CGI::Application';
  +use strict;
  +use warnings;
  +
  +#   application run-time mode processing: "logout"
  +sub mode_logout_screen {
  +    my $self    = shift;
  +    my $cgi     = $self->param(-cgi);
  +    my $html    = $self->param(-html);
  +    my $session = $self->param(-session);
  +
  +    #   remove the session from the database
  +    $session->delete();
  +
  +    #   generate canvas
  +    $html .= "<div class=\"boxed\">\n";
  +    $html .= "<span class=\"title\">Logout</span>\n";
  +    $html->fold("canvas");
  +    $html .= "</div>\n";
  +    $html >> "canvas";
  +
  +    #   generate description
  +    $html .=
  +        "Thank you for visiting the OpenPKG Foundation e.V. Affiliation Service Environment.<br>\n" .
  +        "Your session was terminated and you are now logged out.<br>\n" .
  +        "Please visit us again soon.";
  +
  +    #   redirect to Login screen
  +    $html .=
  +        "<p>\n" .
  +        "You should be redirected to the Login screen in 10 seconds automatically.\n" .
  +        "<meta http-equiv=\"refresh\" content=\"10;url=".$self->url(-mode => "login")."\">\n" .
  +        "<p>\n" .
  +        "<a class=\"button\" href=\"".$self->url(-mode => "login")."\">" .
  +        "Go to <b>Login</b> screen" .
  +        "</a>\n";
  +
  +    return;
  +}
  +
  +#   application run-time mode processing: "menu-logout"
  +sub mode_menu_logout_screen {
  +    my $self    = shift;
  +    my $cgi     = $self->param(-cgi);
  +    my $html    = $self->param(-html);
  +    my $session = $self->param(-session);
  +
  +    #   generate the outer canvas
  +    $html .= "<div class=\"boxed\">\n";
  +    $html .= "<span class=\"title\">Main Menu</span>\n";
  +    $html .= $cgi->start_form(
  +        -method => 'POST',
  +        -action => $self->url(),
  +        -class  => 'menu',
  +    ) . "\n";
  +    $html .= $cgi->hidden(
  +        -name     => 'mode',
  +        -value    => 'menu-logout-action',
  +        -override => 1
  +    ) . "\n";
  +    $html->fold("canvas");
  +    $html .= $cgi->end_form() . "\n";
  +    $html .= "</div>\n";
  +    $html >> "canvas";
  +
  +    #   insert navigation tab
  +    $self->menu_tab("menu-logout");
  +
  +    $html .=
  +        "Here you can logout from the OpenPKG Foundation Affiliation Service Environment. " .
  +        "Your current browser session will be destroyed and you will be redirected " .
  +        "to the Login screen again. Unless you explicitly logout, your session " .
  +        "will be kept active.";
  +
  +    $html .=
  +        "<p>\n" .
  +        "<div align=center><a class=\"button\" href=\"".$self->url(-mode => "logout")."\">" .
  +        "<b>Logout!</b>" .
  +        "</a></div><p>\n";
  +
  +    return;
  +}
  +
  +1;
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ase.cgi.main.pl
  --- /dev/null	2005-08-29 10:24:55 +0200
  +++ ase.cgi.main.pl	2005-08-29 10:25:20 +0200
  @@ -0,0 +1,225 @@
  +##
  +##  OSSP ase -- Affiliation Service Environment
  +##  Copyright (c) 2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2005 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP ase, a service environment for managing
  +##  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  +##
  +##  This program is free software; you can redistribute it and/or modify
  +##  it under the terms of the GNU General Public License as published by
  +##  the Free Software Foundation; either version 2 of the License, or
  +##  (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this program; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  ase.cgi.main.pl: main program framework
  +##
  +
  +package MyApp;
  +use base 'CGI::Application';
  +use strict;
  +use warnings;
  +
  +#   application setup hook
  +sub setup {
  +    my ($self) = @_;
  +
  +    #   establish application configuration structure
  +    $self->param(-cfg => $main::my);
  +
  +    #   establish CGI interface object
  +    my $cgi = new CGI;
  +    $self->query($cgi);
  +    $self->param(-cgi => $cgi);
  +
  +    #   establish HTML output object
  +    my $html = new String::Divert;
  +    $html->folder('{#%s#}', '\{#([a-zA-Z_][a-zA-Z0-9_-]*)#\}');
  +    my $txt < IO::All::io($main::my->{-path_html})
  +        or die "unable to read HTML skeleton file \"".$main::my->{-path_html}."\"";
  +    $txt =~ s/\%HEAD\%/$html->folder("head")/se;
  +    $txt =~ s/\%BODY\%/$html->folder("body")/se;
  +    $html->append($txt);
  +    $html->divert("body");
  +    $html->overload(1);
  +    $self->param(-html => $html);
  +
  +    #   establish database object
  +    my $dbi = DBI->connect(
  +        "dbi:SQLite:dbname=".$main::my->{-path_db_a}, "", "",
  +        { RaiseError => 1, AutoCommit => 1 }
  +    );
  +    die "failed to connect to database \"".$main::my->{-path_db_a}."\""
  +        if (not defined($dbi));
  +    $self->param(-dbi => $dbi);
  +
  +    #   establish session object
  +    my $sid = ($cgi->cookie("sid") || undef);
  +    my $session = new CGI::Session(
  +        "driver:DB_File;serializer:Storable;id:UUID", $sid,
  +        { Directory => ".", FileName => $main::my->{-path_db_s} }
  +    );
  +    $session->expires("+1h");
  +    $self->param(-session => $session);
  +
  +    #   configure run-time modes
  +    my $modes = {
  +        #   global modes
  +        'error'              => { -login => 0, -method => \&error                     },
  +        'scode'              => { -login => 0, -method => \&mode_scode_render         },
  +
  +        #   login modes
  +        'login'              => { -login => 0, -method => \&mode_login_screen         },
  +        'login-action'       => { -login => 0, -method => \&mode_login_action         },
  +        'logout'             => { -login => 1, -method => \&mode_logout_screen        },
  +        'enrollment'         => { -login => 0, -method => \&mode_enrollment_screen    },
  +        'enrollment-action'  => { -login => 0, -method => \&mode_enrollment_action    },
  +        'activation'         => { -login => 0, -method => \&mode_activation_screen    },
  +        'recovery'           => { -login => 0, -method => \&mode_recovery_screen      },
  +        'recovery-action'    => { -login => 0, -method => \&mode_recovery_action      },
  +
  +        #   application modes
  +        'menu-overview'      => { -login => 1, -method => \&mode_menu_overview_screen },
  +        'menu-member'        => { -login => 1, -method => \&mode_menu_member_screen   },
  +        'menu-member-action' => { -login => 1, -method => \&mode_menu_member_action   },
  +        'menu-account'       => { -login => 1, -method => \&mode_menu_account_screen  },
  +        'menu-action'        => { -login => 1, -method => \&mode_menu_action_screen   },
  +        'menu-logout'        => { -login => 1, -method => \&mode_menu_logout_screen   },
  +    };
  +    $self->param(-modes => $modes);
  +    my %run_modes = ();
  +    foreach my $mode (keys(%{$modes})) {
  +        $run_modes{$mode} = $modes->{$mode}->{-method};
  +    }
  +    $self->run_modes(%run_modes);
  +    $self->start_mode('menu-overview');
  +    $self->error_mode('error');
  +    $self->mode_param(\&current_mode);
  +
  +    return;
  +}
  +
  +#   helper function for determining run-time mode
  +sub current_mode {
  +    my ($self) = @_;
  +    my $cgi     = $self->param(-cgi);
  +    my $session = $self->param(-session);
  +
  +    #   determine the current run-time mode
  +    my $modes = $self->param(-modes);
  +    my $mode  = ($cgi->url_param("mode") || $cgi->param("mode"));
  +
  +    #   check for an unknown or invalid mode
  +    if (   not defined($mode)
  +        or $mode eq ''
  +        or not defined($modes->{$mode})) {
  +        $mode = $self->start_mode();
  +    }
  +
  +    #   if mode is login and user is already
  +    #   logged in, enforce the regular start mode
  +    if (    $mode eq "login"
  +        and $session->param("login")) {
  +        $mode = $self->start_mode();
  +    }
  +
  +    #   if mode requires a login and the user is 
  +    #   still not logged in, enforce the login!
  +    if (    $modes->{$mode}->{-login}
  +        and not $session->param("login")) {
  +        $mode = "login";
  +    }
  +
  +    return $mode;
  +}
  +
  +#   application post-processing hook
  +sub cgiapp_postrun {
  +    my ($self, $htmlref) = @_;
  +
  +    #   replace output with expanded HTML document if
  +    #   no (non-HTML) output was generated instead.
  +    if (not defined(${$htmlref}) or ${$htmlref} eq '') {
  +        my $html = $self->param(-html);
  +        $html->overload(0);
  +        $html->undivert(0);
  +        ${$htmlref} = $html->string();
  +    }
  +
  +    #   set the session cookie
  +    my $session = $self->param(-session);
  +    my $cookie = new CGI::Cookie(
  +        -name    => 'sid',
  +        -value   => $session->id,
  +        -expires => '+1h'
  +    );
  +    $self->header_add(-cookie => [$cookie]);
  +
  +    #   switch to unbuffered output
  +    $|++;
  +
  +    return;
  +}
  +
  +#   application shutdown hook
  +sub teardown {
  +    my ($self) = @_;
  +
  +    #   close session
  +    my $session = $self->param(-session);
  +    $session->close();
  +
  +    #   disconnect from database
  +    my $dbi = $self->param(-dbi);
  +    $dbi->disconnect();
  +
  +    return;
  +}
  +
  +#   run-mode switching
  +sub switchto ($$;@) {
  +    my ($self, $mode, @args) = @_;
  +    my $modes = $self->param(-modes);
  +    if (not defined($modes->{$mode})) {
  +        die "cannot switch to unknown mode \"$mode\"";
  +    }
  +    my $method = $modes->{$mode}->{-method};
  +    return $self->$method($self, @args);
  +}
  +
  +#   application error handling hook
  +sub error {
  +    my ($self, $error) = @_;
  +    my $html = "ERROR:<br>".HTML::Entities::encode_entities($error)."\n";
  +    return $html;
  +}
  +
  +#   helper function for redirecting to a new URL 
  +sub redirect {
  +    my ($self, $url) = @_;
  +
  +    #   establish redirection HTTP headers
  +    $self->header_type('redirect');
  +    $self->header_props(-url => $url);
  +
  +    #   establish fallback redirection HTML page
  +    my $html =
  +        "You are redirected to the following URL:<br>" .
  +        "<a href=\"$url\">".HTML::Entities::encode_entities($url)."</a>" .
  +        "If nothing happens within 10 seconds," .
  +        "please click the above URL manually.\n";
  +
  +    return $html;
  +}
  +
  +1;
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.profile.pl
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ase.cgi.profile.pl
  --- /dev/null	2005-08-29 10:24:55 +0200
  +++ ase.cgi.profile.pl	2005-08-29 10:25:20 +0200
  @@ -0,0 +1,234 @@
  +##
  +##  OSSP ase -- Affiliation Service Environment
  +##  Copyright (c) 2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2005 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP ase, a service environment for managing
  +##  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  +##
  +##  This program is free software; you can redistribute it and/or modify
  +##  it under the terms of the GNU General Public License as published by
  +##  the Free Software Foundation; either version 2 of the License, or
  +##  (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this program; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  ase.cgi.profile.pl: profile workflow
  +##
  +
  +package MyApp;
  +use base 'CGI::Application';
  +use strict;
  +use warnings;
  +
  +#   render navigation tab
  +sub menu_tab {
  +    my $self    = shift;
  +    my $mode    = shift;
  +    my $html    = $self->param(-html);
  +
  +    #   define the menu
  +    my $menu = [
  +        { -mode => "menu-overview", -name => "Overview" },
  +        { -mode => "menu-member",   -name => "Member"   },
  +        { -mode => "menu-account",  -name => "Account"  },
  +        { -mode => "menu-action",   -name => "Action"   },
  +        { -mode => "menu-logout",   -name => "Logout"   },
  +    ];
  +
  +    #   render the menu
  +    $html .=
  +        "<ul class=\"tabs\">\n" .
  +        "  <li class=\"padding\">&nbsp;</li>\n";
  +    foreach my $entry (@{$menu}) {
  +        $html .= "  ";
  +        $html .= ($entry->{-mode} eq $mode ? "<li class=\"active\">": "<li>");
  +        $html .= "<a href=\"".$self->url(-mode => $entry->{-mode})."\">".$entry->{-name}."</a>";
  +        $html .= "</li>\n";
  +    }
  +    $html .=
  +        "  <li class=\"padding\">&nbsp;</li>\n" .
  +        "</ul>\n";
  +    $html .= "<div class=\"tabsframe\">\n";
  +    $html->fold("foo");
  +    $html .= "</div>\n";
  +    $html >> "foo";
  +
  +    return;
  +}
  +
  +#   application run-time mode processing: "menu-overview"
  +sub mode_menu_overview_screen {
  +    my $self    = shift;
  +    my $cgi     = $self->param(-cgi);
  +    my $dbi     = $self->param(-dbi);
  +    my $html    = $self->param(-html);
  +    my $session = $self->param(-session);
  +
  +    #   generate the outer canvas
  +    $html .= "<div class=\"boxed\">\n";
  +    $html .= "<span class=\"title\">Main Menu</span>\n";
  +    $html .= $cgi->start_form(
  +        -method => 'POST',
  +        -action => $self->url(),
  +        -class  => 'menu',
  +    ) . "\n";
  +    $html .= $cgi->hidden(
  +        -name     => 'mode',
  +        -value    => 'menu-action',
  +        -override => 1
  +    ) . "\n";
  +    $html->fold("canvas");
  +    $html .= $cgi->end_form() . "\n";
  +    $html .= "</div>\n";
  +    $html >> "canvas";
  +
  +    #   insert navigation tab
  +    $self->menu_tab("menu-overview");
  +
  +    #   take membership UUID from session
  +    my $me_uuid = $session->param("login");
  +
  +    #   fetch remaining member details from database
  +    my $sth = $dbi->prepare(
  +        "SELECT * FROM ase_member WHERE me_uuid = ?;")
  +        or die $dbi->errstr();
  +    $sth->execute($me_uuid)
  +        or die $dbi->errstr();
  +    my $rec = $sth->fetchrow_hashref()
  +        or die "no member found under UUID $me_uuid";
  +
  +    #   determine name of membership status
  +    my $me_status = (qw(Enrolling Fellow Member Activist Director President))
  +        [$rec->{'me_membership_status'} || 0];
  +
  +    $html .=
  +        "<table class=\"F\">\n" .
  +        "  <tr>\n" .
  +        "    <td class=\"L\"><span class=\"label\">Status:</span></td>\n" .
  +        "    <td class=\"I\">". $me_status ."</td>\n" .
  +        "  </tr>\n" .
  +        "  <tr>\n" .
  +        "    <td class=\"L\"><span class=\"label\">UUID:</span></td>\n" .
  +        "    <td class=\"I\">". $me_uuid ."</td>\n" .
  +        "  </tr>\n" .
  +        "  <tr>\n" .
  +        "    <td class=\"L\"><span class=\"label\">Email Address:</span></td>\n" .
  +        "    <td class=\"I\">". $rec->{"me_address"} ."</td>\n" .
  +        "  </tr>\n" .
  +        "  <tr>\n" .
  +        "    <td class=\"L\"><span class=\"label\">Membership Start:</span></td>\n" .
  +        "    <td class=\"I\">". $self->datetime2str($rec->{'me_membership_start'}) ."</td>\n" .
  +        "  </tr>\n" .
  +        "  <tr>\n" .
  +        "    <td class=\"L\"><span class=\"label\">Membership End:</span></td>\n" .
  +        "    <td class=\"I\">". $self->datetime2str($rec->{'me_membership_end'}) ."</td>\n" .
  +        "  </tr>\n" .
  +        "</table>\n";
  +
  +    return;
  +}
  +
  +#   application run-time mode processing: "menu-member"
  +sub mode_menu_member_screen {
  +    my $self    = shift;
  +    my $cgi     = $self->param(-cgi);
  +    my $dbi     = $self->param(-dbi);
  +    my $html    = $self->param(-html);
  +    my $session = $self->param(-session);
  +
  +    #   generate the outer canvas
  +    $html .= "<div class=\"boxed\">\n";
  +    $html .= "<span class=\"title\">Main Menu</span>\n";
  +    $html .= $cgi->start_form(
  +        -method => 'POST',
  +        -action => $self->url(),
  +        -class  => 'menu',
  +    ) . "\n";
  +    $html .= $cgi->hidden(
  +        -name     => 'mode',
  +        -value    => 'menu-member-action',
  +        -override => 1
  +    ) . "\n";
  +    $html->fold("canvas");
  +    $html .= $cgi->end_form() . "\n";
  +    $html .= "</div>\n";
  +    $html >> "canvas";
  +
  +    #   insert navigation tab
  +    $self->menu_tab("menu-member");
  +
  +    #   take membership UUID from session
  +    my $me_uuid = $session->param("login");
  +
  +    #   fetch remaining member details from database
  +    my $sth = $dbi->prepare(
  +        "SELECT * FROM ase_member WHERE me_uuid = ?;")
  +        or die $dbi->errstr();
  +    $sth->execute($me_uuid)
  +        or die $dbi->errstr();
  +    my $rec = $sth->fetchrow_hashref()
  +        or die "no member found under UUID $me_uuid";
  +
  +    #   determine name of membership status
  +    my $me_status = (qw(Enrolling Fellow Member Activist Director President))
  +        [$rec->{'me_membership_status'} || 0];
  +
  +    $html .= "<table class=\"F\">\n";
  +    $html .=
  +        "  <tr>\n" .
  +        "    <td class=\"L\"><span class=\"label\">"."foo".":</span></td>\n" .
  +        "    <td class=\"I\">"."foo"."</td>\n" .
  +        "  </tr>\n";
  +    $html .= "</table>\n";
  +
  +    #   render member edit form
  +    my $form = new CGI::FormBuilder (
  +        "fields"   => [qw(me_sn me_uuid me_username me_address me_membership_status me_membership_prop me_gender)],
  +        "method"   => "POST",
  +        "values"   => $rec,
  +        "header"   => 0,
  +        "action"   => $self->url(),
  +        "class"    => "menu",
  +        "template" => &render,
  +    );
  +    $form->field(
  +        "name"     => "me_membership_status",
  +        "label"    => "Membership Status",
  +        "options"  => [
  +            [ "0" => "enrolling" ],
  +            [ "1" => "fellow"    ],
  +            [ "2" => "member"    ],
  +            [ "3" => "activist"  ],
  +            [ "4" => "director"  ],
  +            [ "5" => "president" ],
  +        ],
  +    );
  +    sub render {
  +        my ($form) = @_;
  +    }
  +    $html .= $form->render();
  +
  +    return;
  +}
  +
  +#   run-time mode screen action: "menu-member-action"
  +sub mode_menu_member_action {
  +    my $self    = shift;
  +    my $cgi     = $self->param(-cgi);
  +    my $dbi     = $self->param(-dbi);
  +    my $session = $self->param(-session);
  +
  +    return "FUCK";
  +}
  +
  +1;
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.scode.pl
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ase.cgi.scode.pl
  --- /dev/null	2005-08-29 10:24:55 +0200
  +++ ase.cgi.scode.pl	2005-08-29 10:25:21 +0200
  @@ -0,0 +1,141 @@
  +##
  +##  OSSP ase -- Affiliation Service Environment
  +##  Copyright (c) 2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2005 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP ase, a service environment for managing
  +##  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  +##
  +##  This program is free software; you can redistribute it and/or modify
  +##  it under the terms of the GNU General Public License as published by
  +##  the Free Software Foundation; either version 2 of the License, or
  +##  (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this program; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  ase.cgi.scode.pl: security code handling
  +##
  +
  +package MyApp;
  +use base 'CGI::Application';
  +use strict;
  +use warnings;
  +
  +#   helper function for converting hex "RRGGBB" into decimal (R,G,B)
  +sub hex2rgb {
  +    my ($hex) = @_;
  +    return map { hex($_) }
  +        ($hex =~ m/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/);
  +}
  +
  +#   Security Code: creation
  +sub scode_create {
  +    my ($self) = @_;
  +    my $dbi = $self->param(-dbi);
  +
  +    #   generate new UUID
  +    my $uuid = new OSSP::uuid;
  +    $uuid->make("v1");
  +    my $scode_uuid = $uuid->export("str");
  +    undef $uuid;
  +
  +    #   generate new Security Code Number
  +    #   (notice: "0" and "O" are too hard to distinguish, so left out)
  +    my $scode_num = $self->makerandom(6, "1-9A-Z");
  +
  +    #   determine expiry time
  +    my $scode_expiry = time() + 4*60*60;
  +
  +    #   on-the-fly remove expired codes
  +    my $now = time();
  +    $dbi->do(
  +        "DELETE FROM ase_scode WHERE sc_expiry < $now;"
  +    ) or die $dbi->errmsg;;
  +
  +    #   store Security Code in database
  +    $dbi->do(
  +        "INSERT INTO ase_scode (sc_uuid, sc_number, sc_expiry)" .
  +        " VALUES ('$scode_uuid', '$scode_num', $scode_expiry);"
  +    ) or die $dbi->errmsg;;
  +    
  +    return $scode_uuid;
  +}
  +
  +#   Security Code: image rendering
  +sub scode_render {
  +    my ($self, $scode_uuid) = @_;
  +    my $dbi = $self->param(-dbi);
  +
  +    #   determine Security Code Number
  +    my $rec = $dbi->selectrow_hashref(
  +        "SELECT sc_number FROM ase_scode" .
  +        " WHERE sc_uuid = '$scode_uuid';"
  +    ) or die $dbi->errstr();
  +    my $scode_num = $rec->{'sc_number'};
  +
  +    #   render Security Code Number as a PNG image
  +    my $im_length = (length($scode_num)+1)*10;
  +    my $im = new GD::Image($im_length, 25);
  +    my $c_bg  = $im->colorAllocate(&hex2rgb("ffffff"));
  +    my $c_bd1 = $im->colorAllocate(&hex2rgb("999999"));
  +    my $c_bd2 = $im->colorAllocate(&hex2rgb("cccccc"));
  +    my $c_ln  = $im->colorAllocate(&hex2rgb("dddddd"));
  +    my $c_tx  = $im->colorAllocate(&hex2rgb("888888"));
  +    $im->fill(0, 0, $c_bg);
  +    for (my $i = 5; $i < $im_length; $i += 5) {
  +        $im->line($i, 0, $i, 24, $c_ln);
  +    }
  +    for (my $i = 5; $i < 25; $i += 5) {
  +        $im->line(0, $i, $im_length-1, $i, $c_ln);
  +    }
  +    $im->line(0, 0, $im_length-1, 0, $c_bd1);
  +    $im->line(0, 0, 0, 24, $c_bd1);
  +    $im->line($im_length-1, 0, $im_length-1, 24, $c_bd2);
  +    $im->line(0, 24, $im_length-1, 24, $c_bd2);
  +    $im->string(GD::gdGiantFont(), 8, 5, $scode_num, $c_tx);
  +    my $scode_img = $im->png;
  +
  +    return $scode_img;
  +}
  +
  +#   Security Code: verification
  +sub scode_verify {
  +    my ($self, $scode_uuid, $scode_num) = @_;
  +    my $dbi = $self->param(-dbi);
  +
  +    #   determine Security Code
  +    my $rec = $dbi->selectrow_hashref(
  +        "SELECT sc_number, sc_expiry FROM ase_scode" .
  +        " WHERE sc_uuid = '$scode_uuid'"
  +    ) or die $dbi->errstr();
  +    my $scode_number = $rec->{'sc_number'};
  +    my $scode_expiry = $rec->{'sc_expiry'};
  +
  +    #   verify Security Code
  +    my $ok = ($scode_num eq $scode_number and time() < $scode_expiry);
  +
  +    return $ok;
  +}
  +
  +#   run-time mode image rendering: "scode"
  +sub mode_scode_render {
  +    my $self = shift;
  +    my $cgi  = $self->param(-cgi);
  +
  +    #   send Security Code image
  +    my $uuid = $cgi->param("uuid");
  +    my $img = $self->scode_render($uuid);
  +    $self->header_props(-type => 'image/png', -expires => '+4d');
  +    return $img;
  +}
  +
  +1;
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.util.pl
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ase.cgi.util.pl
  --- /dev/null	2005-08-29 10:24:55 +0200
  +++ ase.cgi.util.pl	2005-08-29 10:25:21 +0200
  @@ -0,0 +1,141 @@
  +##
  +##  OSSP ase -- Affiliation Service Environment
  +##  Copyright (c) 2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2005 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP ase, a service environment for managing
  +##  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  +##
  +##  This program is free software; you can redistribute it and/or modify
  +##  it under the terms of the GNU General Public License as published by
  +##  the Free Software Foundation; either version 2 of the License, or
  +##  (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this program; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  ase.cgi.util.pl: utility functions
  +##
  +
  +package MyApp;
  +use base 'CGI::Application';
  +use strict;
  +use warnings;
  +
  +#   helper function for determining self-referencing URL
  +sub url {
  +    my ($self, %attr) = @_;
  +    my $url = $self->param(-cgi)->url(-relative => 1);
  +    my $first = 1;
  +    foreach my $key (keys(%attr)) {
  +        my ($var, $val) = ($key, $attr{$key});
  +        $var =~ s/^-//s;
  +        $var =~ s/-/_/sg;
  +        $url .= ($first ? "?" : ";") . 
  +            URI::Escape::uri_escape($var) . "=" .
  +            URI::Escape::uri_escape($val);
  +        $first = 0;
  +    }
  +    return $url;
  +}
  +
  +#   helper function for generating random string
  +sub makerandom {
  +    my ($self, $n, $set) = @_;
  +    my $rnd = '';
  +    $set =~ s/(.)-(.)/join('', $1..$2)/sge;
  +    for (my $i = 0; $i < $n; $i++) {
  +        $rnd .= substr($set, int(rand(length($set))), 1);
  +    }
  +    return $rnd;
  +}
  +
  +#   helper function for determining remote hostname
  +sub remotehostname {
  +    my ($self) = @_;
  +    my $cgi = $self->param(-cgi);
  +    my $hostname = $cgi->remote_host();
  +    if ($hostname =~ m/^(\d+\.){3}\d+$/s) {
  +        my $iaddr = Socket::inet_aton($hostname);
  +        my $name = gethostbyaddr($iaddr, &Socket::AF_INET); 
  +        $hostname = $name if (defined($name) and $name ne '');
  +    }
  +    if ($hostname !~ m/^(?:[^.]+\.)+[^.]+$/s) {
  +        $hostname = "example.com";
  +    }
  +    return $hostname;
  +}
  +
  +#   helper function for generating encrypted passwords
  +sub makepasswords {
  +    my ($self, $plaintext) = @_;
  +    my $pw = {};
  +
  +    #   Plain Text
  +    $pw->{-plaintext} = $plaintext;
  +
  +    #   generate random salt
  +    my $salt = $self->makerandom(8, "./0-9A-Za-z");
  +
  +    #   Unix crypt(3) (both salted DES and MD5)
  +    $pw->{-cryptdes} = Crypt::UnixCrypt::crypt($pw->{-plaintext}, substr($salt, 0, 2));
  +    $pw->{-cryptmd5} = Crypt::PasswdMD5::unix_md5_crypt($pw->{-plaintext}, $salt);
  +
  +    #   Plain MD5
  +    my $md5 = new Digest::MD5;
  +    $md5->add($pw->{-plaintext});
  +    $pw->{-md5} = $md5->hexdigest;
  +    undef $md5;
  +
  +    #   Plain SHA-1
  +    my $sha1 = new Digest::SHA1;
  +    $sha1->add($pw->{-plaintext});
  +    $pw->{-sha1} = $sha1->hexdigest;
  +    undef $sha1;
  +
  +    return $pw;
  +}
  +
  +#   helper function for current time in YYYYMMDDHHMMSS format
  +sub datetime {
  +    my ($self, $t) = @_;
  +    $t = time() if (not defined($t));
  +    my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday) = gmtime($t);
  +    return sprintf("%04d%02d%02d%02d%02d%02d", $year+1900, $mon+1, $mday, $hour, $min, $sec);
  +}
  +
  +#   helper function for YYYYMMDDHHMMSS to more human format conversion
  +sub datetime2str {
  +    my ($self, $t) = @_;
  +    if ($t =~ m/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/) {
  +        $t = sprintf("%04d-%02d-%02d %02d:%02d:%02d", $1, $2, $3, $4, $5, $6); 
  +    }
  +    return $t;
  +}
  +
  +#   helper function for writing a logbook entry
  +sub logbook ($$;@) {
  +    my ($self, $fmt, @args) = @_;
  +    my $dbi     = $self->param(-dbi);
  +    my $session = $self->param(-session);
  +    
  +    my $uuid = ($session->param("login") || undef);
  +    my $date = $self->datetime();
  +    my $text = (defined($args[0]) ? sprintf($fmt, @args) : $fmt);
  +
  +    my $sth = $dbi->prepare(
  +        "INSERT INTO ase_logbook (lg_uuid, lg_date, lg_text) VALUES (?, ?, ?);"
  +    ) or die $dbi->errstr();
  +    $sth->execute($uuid, $date, $text) or die $dbi->errstr();
  +    return;
  +}
  +
  +1;
  +
  @@ .

From ossp-cvs-owner@ossp.org  Mon Aug 29 14:43:36 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 29C66752ED0; Mon, 29 Aug 2005 14:43:36 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi ase.cgi.enroll.pl ase.cgi.loader.pl ...
Message-Id: <20050829124336.29C66752ED0@mail.ossp.org>
Date: Mon, 29 Aug 2005 14:43:36 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Aug-2005 14:43:36
  Branch: HEAD                             Handle: 2005082913433500

  Added files:
    ossp-pkg/ase            ase.cgi.loader.pl
  Modified files:
    ossp-pkg/ase            ase.cgi ase.cgi.enroll.pl ase.cgi.login.pl
                            ase.cgi.logout.pl ase.cgi.main.pl
                            ase.cgi.profile.pl ase.cgi.scode.pl
                            ase.cgi.util.pl

  Log:
    add loader functionality and use it to reference files

  Summary:
    Revision    Changes     Path
    1.3         +22 -20     ossp-pkg/ase/ase.cgi
    1.2         +1  -1      ossp-pkg/ase/ase.cgi.enroll.pl
    1.1         +69 -0      ossp-pkg/ase/ase.cgi.loader.pl
    1.2         +1  -1      ossp-pkg/ase/ase.cgi.login.pl
    1.2         +1  -1      ossp-pkg/ase/ase.cgi.logout.pl
    1.2         +19 -9      ossp-pkg/ase/ase.cgi.main.pl
    1.2         +1  -1      ossp-pkg/ase/ase.cgi.profile.pl
    1.2         +1  -1      ossp-pkg/ase/ase.cgi.scode.pl
    1.2         +1  -1      ossp-pkg/ase/ase.cgi.util.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ase.cgi
  --- ossp-pkg/ase/ase.cgi	29 Aug 2005 08:25:19 -0000	1.2
  +++ ossp-pkg/ase/ase.cgi	29 Aug 2005 12:43:35 -0000	1.3
  @@ -1,4 +1,4 @@
  -#!/usr/opkg/bin/perl
  +#!/usr/bin/env perl
   ##
   ##  OSSP ase -- Affiliation Service Environment
   ##  Copyright (c) 2005 Ralf S. Engelschall <rse@engelschall.com>
  @@ -30,6 +30,17 @@
   use strict;
   use warnings;
   
  +#   program configuration
  +our $cfg = {
  +    -prog_name   => 'OSSP ase',
  +    -prog_desc   => 'Affiliation Service Environment',
  +    -prog_vers   => '0.0.1',
  +    -prog_date   => '20-Feb-2005',
  +    -path_libdir => ".",
  +    -path_vardir => ".",
  +    -path_datdir => ".",
  +};
  +
   #   language extensions
   use Socket;                             # from OpenPKG "perl"
   use IO::All;                            # from OpenPKG "perl-sys"
  @@ -58,27 +69,18 @@
   use CGI::GuruMeditation ("OSSP ase");   # from OpenPKG "perl-www"
   
   #   application parts
  -require "ase.cgi.main.pl";              # application main framework
  -require "ase.cgi.util.pl";              # application utility functions
  -require "ase.cgi.scode.pl";             # application security code functions
  -require "ase.cgi.login.pl";             # application workflow: login
  -require "ase.cgi.logout.pl";            # application workflow: logout
  -require "ase.cgi.enroll.pl";            # application workflow: enrollment
  -require "ase.cgi.profile.pl";           # application workflow: profile
  -
  -#   program configuration
  -our $my = {
  -    -prog_name => 'OSSP ase',
  -    -prog_desc => 'Affiliation Service Environment',
  -    -prog_vers => '0.0.1',
  -    -prog_date => '20-Feb-2005',
  -    -path_db_a => 'ase.db',
  -    -path_db_s => 'ase.sdb',
  -    -path_html => 'ase.html',
  -};
  +my $dir = $cfg->{-path_libdir};
  +require "$dir/ase.cgi.main.pl";         # application main framework
  +require "$dir/ase.cgi.loader.pl";       # application file loader
  +require "$dir/ase.cgi.util.pl";         # application utility functions
  +require "$dir/ase.cgi.scode.pl";        # application security code functions
  +require "$dir/ase.cgi.login.pl";        # application workflow: login
  +require "$dir/ase.cgi.logout.pl";       # application workflow: logout
  +require "$dir/ase.cgi.enroll.pl";       # application workflow: enrollment
  +require "$dir/ase.cgi.profile.pl";      # application workflow: profile
   
   #   main procedure
  -my $app = new MyApp;
  +my $app = new ASE ($cfg);
   $app->run();
   exit(0);
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	29 Aug 2005 08:25:19 -0000	1.1
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	29 Aug 2005 12:43:35 -0000	1.2
  @@ -24,7 +24,7 @@
   ##  ase.cgi.enroll.pl: enrollment
   ##
   
  -package MyApp;
  +package ASE;
   use base 'CGI::Application';
   use strict;
   use warnings;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.loader.pl
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ase.cgi.loader.pl
  --- /dev/null	2005-08-29 14:43:26 +0200
  +++ ase.cgi.loader.pl	2005-08-29 14:43:35 +0200
  @@ -0,0 +1,69 @@
  +##
  +##  OSSP ase -- Affiliation Service Environment
  +##  Copyright (c) 2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2005 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP ase, a service environment for managing
  +##  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  +##
  +##  This program is free software; you can redistribute it and/or modify
  +##  it under the terms of the GNU General Public License as published by
  +##  the Free Software Foundation; either version 2 of the License, or
  +##  (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this program; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  ase.cgi.loader.pl: external file loader
  +##
  +
  +package ASE;
  +use base 'CGI::Application';
  +use strict;
  +use warnings;
  +
  +#   run-time mode external file loading: "loader"
  +sub mode_loader {
  +    my $self = shift;
  +    my $cfg  = $self->param(-cfg);
  +    my $cgi  = $self->param(-cgi);
  +
  +    #   parameter sanity checking
  +    my $name = $cgi->param("name");
  +    die "invalid name" if (not (defined($name) and $name ne ''));
  +    die "invalid name" if ($name =~ m|\.\.| or $name =~ m|^/|); # FIXME
  +
  +    #   load external file content 
  +    my $filename = $cfg->{-path_datdir}."/".$name;
  +    die "file not found" if (not -f $filename);
  +    my $content < IO::All::io($filename)
  +        or die "unable to load file \"$filename\"";
  +
  +    #   determine expire time and content type
  +    my $expires = "+10s";
  +    my $type = "application/octet-stream";
  +    if    ($name =~ m|\.css$|)   { $type = "text/css";   $expires = "+1m"; }
  +    elsif ($name =~ m|\.png$|)   { $type = "image/png";  $expires = "+1h"; }
  +    elsif ($name =~ m|\.gif$|)   { $type = "image/gif";  $expires = "+1h"; }
  +    elsif ($name =~ m|\.jpe?g$|) { $type = "image/jpeg"; $expires = "+1h"; }
  +
  +    #   optional content adjustment
  +    if ($name =~ m|\.css$|) {
  +        $content =~ s|url\((.+?)\)|"url(".$cgi->url(-relative => 1).
  +                                   "?mode=loader;name=".URI::Escape::uri_escape($1).")"|sge;
  +    }
  +
  +    #   pass back content
  +    $self->header_props(-type => $type, -expires => $expires);
  +    return $content;
  +}
  +
  +1;
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	29 Aug 2005 08:25:19 -0000	1.1
  +++ ossp-pkg/ase/ase.cgi.login.pl	29 Aug 2005 12:43:35 -0000	1.2
  @@ -24,7 +24,7 @@
   ##  ase.cgi.login.pl: login workflow
   ##
   
  -package MyApp;
  +package ASE;
   use base 'CGI::Application';
   use strict;
   use warnings;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.logout.pl
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ase.cgi.logout.pl
  --- ossp-pkg/ase/ase.cgi.logout.pl	29 Aug 2005 08:25:19 -0000	1.1
  +++ ossp-pkg/ase/ase.cgi.logout.pl	29 Aug 2005 12:43:35 -0000	1.2
  @@ -24,7 +24,7 @@
   ##  ase.cgi.logout.pl: logout workflow
   ##
   
  -package MyApp;
  +package ASE;
   use base 'CGI::Application';
   use strict;
   use warnings;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	29 Aug 2005 08:25:19 -0000	1.1
  +++ ossp-pkg/ase/ase.cgi.main.pl	29 Aug 2005 12:43:35 -0000	1.2
  @@ -24,17 +24,25 @@
   ##  ase.cgi.main.pl: main program framework
   ##
   
  -package MyApp;
  +package ASE;
   use base 'CGI::Application';
   use strict;
   use warnings;
   
  +#   application init hook
  +sub cgiapp_init {
  +    my ($self, $cfg) = @_;
  +
  +    #   establish application configuration structure
  +    $self->param(-cfg => $cfg);
  +
  +    return;
  +}
  +
   #   application setup hook
   sub setup {
       my ($self) = @_;
  -
  -    #   establish application configuration structure
  -    $self->param(-cfg => $main::my);
  +    my $cfg = $self->param(-cfg);
   
       #   establish CGI interface object
       my $cgi = new CGI;
  @@ -44,10 +52,11 @@
       #   establish HTML output object
       my $html = new String::Divert;
       $html->folder('{#%s#}', '\{#([a-zA-Z_][a-zA-Z0-9_-]*)#\}');
  -    my $txt < IO::All::io($main::my->{-path_html})
  -        or die "unable to read HTML skeleton file \"".$main::my->{-path_html}."\"";
  +    my $txt < IO::All::io($cfg->{-path_datdir}."/ase.html")
  +        or die "unable to read HTML skeleton file \"".$cfg->{-path_datdir}."/ase.html"."\"";
       $txt =~ s/\%HEAD\%/$html->folder("head")/se;
       $txt =~ s/\%BODY\%/$html->folder("body")/se;
  +    $txt =~ s/(\s+(?:href|src)=")([^"]+)/$1.$self->url(-mode => "loader", -name => $2)/sge;
       $html->append($txt);
       $html->divert("body");
       $html->overload(1);
  @@ -55,10 +64,10 @@
   
       #   establish database object
       my $dbi = DBI->connect(
  -        "dbi:SQLite:dbname=".$main::my->{-path_db_a}, "", "",
  +        "dbi:SQLite:dbname=".$cfg->{-path_vardir}."/ase.db", "", "",
           { RaiseError => 1, AutoCommit => 1 }
       );
  -    die "failed to connect to database \"".$main::my->{-path_db_a}."\""
  +    die "failed to connect to database \"".$cfg->{-path_vardir}."/ase.db"."\""
           if (not defined($dbi));
       $self->param(-dbi => $dbi);
   
  @@ -66,7 +75,7 @@
       my $sid = ($cgi->cookie("sid") || undef);
       my $session = new CGI::Session(
           "driver:DB_File;serializer:Storable;id:UUID", $sid,
  -        { Directory => ".", FileName => $main::my->{-path_db_s} }
  +        { Directory => $cfg->{-path_vardir}, FileName => "ase.sdb" }
       );
       $session->expires("+1h");
       $self->param(-session => $session);
  @@ -76,6 +85,7 @@
           #   global modes
           'error'              => { -login => 0, -method => \&error                     },
           'scode'              => { -login => 0, -method => \&mode_scode_render         },
  +        'loader'             => { -login => 0, -method => \&mode_loader               },
   
           #   login modes
           'login'              => { -login => 0, -method => \&mode_login_screen         },
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.profile.pl
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ase.cgi.profile.pl
  --- ossp-pkg/ase/ase.cgi.profile.pl	29 Aug 2005 08:25:19 -0000	1.1
  +++ ossp-pkg/ase/ase.cgi.profile.pl	29 Aug 2005 12:43:35 -0000	1.2
  @@ -24,7 +24,7 @@
   ##  ase.cgi.profile.pl: profile workflow
   ##
   
  -package MyApp;
  +package ASE;
   use base 'CGI::Application';
   use strict;
   use warnings;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.scode.pl
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ase.cgi.scode.pl
  --- ossp-pkg/ase/ase.cgi.scode.pl	29 Aug 2005 08:25:19 -0000	1.1
  +++ ossp-pkg/ase/ase.cgi.scode.pl	29 Aug 2005 12:43:35 -0000	1.2
  @@ -24,7 +24,7 @@
   ##  ase.cgi.scode.pl: security code handling
   ##
   
  -package MyApp;
  +package ASE;
   use base 'CGI::Application';
   use strict;
   use warnings;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.util.pl
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ase.cgi.util.pl
  --- ossp-pkg/ase/ase.cgi.util.pl	29 Aug 2005 08:25:19 -0000	1.1
  +++ ossp-pkg/ase/ase.cgi.util.pl	29 Aug 2005 12:43:35 -0000	1.2
  @@ -24,7 +24,7 @@
   ##  ase.cgi.util.pl: utility functions
   ##
   
  -package MyApp;
  +package ASE;
   use base 'CGI::Application';
   use strict;
   use warnings;
  @@ .

From ossp-cvs-owner@ossp.org  Mon Aug 29 15:13:09 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 84943752ED0; Mon, 29 Aug 2005 15:13:09 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ .cvsignore README VERSION ase.cgi ase.pl dev...
Message-Id: <20050829131309.84943752ED0@mail.ossp.org>
Date: Mon, 29 Aug 2005 15:13:09 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /v/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   29-Aug-2005 15:13:09
  Branch: HEAD                             Handle: 2005082914130900

  Added files:
    ossp-pkg/ase            VERSION devtool devtool.conf devtool.func
  Modified files:
    ossp-pkg/ase            .cvsignore README ase.cgi ase.pl

  Log:
    add devtool

  Summary:
    Revision    Changes     Path
    1.2         +2  -0      ossp-pkg/ase/.cvsignore
    1.3         +1  -1      ossp-pkg/ase/README
    1.1         +6  -0      ossp-pkg/ase/VERSION
    1.4         +3  -3      ossp-pkg/ase/ase.cgi
    1.2         +25 -7      ossp-pkg/ase/ase.pl
    1.1         +47 -0      ossp-pkg/ase/devtool
    1.1         +52 -0      ossp-pkg/ase/devtool.conf
    1.1         +73 -0      ossp-pkg/ase/devtool.func
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/.cvsignore
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 .cvsignore
  --- ossp-pkg/ase/.cvsignore	29 Aug 2005 08:24:59 -0000	1.1
  +++ ossp-pkg/ase/.cvsignore	29 Aug 2005 13:13:09 -0000	1.2
  @@ -1,2 +1,4 @@
  +ChangeLog
  +ase-*.tar.gz
   ase.db
   ase.sdb
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/README
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 README
  --- ossp-pkg/ase/README	11 May 2005 09:20:04 -0000	1.2
  +++ ossp-pkg/ase/README	29 Aug 2005 13:13:09 -0000	1.3
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     \___/|___/\___| 
   
     OSSP ase - Affiliation Service Environment
  -  Version 0.1.0 (xx-xxx-2005)
  +  Version 0.1.7 (29-Aug-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/VERSION
  ============================================================================
  $ cvs diff -u -r0 -r1.1 VERSION
  --- /dev/null	2005-08-29 15:13:08 +0200
  +++ VERSION	2005-08-29 15:13:09 +0200
  @@ -0,0 +1,6 @@
  +
  +  VERSION -- Version Information for OSSP ase (syntax: Text)
  +  [automatically generated and maintained by GNU shtool]
  +
  +  This is OSSP ase, Version 0.1.7 (29-Aug-2005)
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ase.cgi
  --- ossp-pkg/ase/ase.cgi	29 Aug 2005 12:43:35 -0000	1.3
  +++ ossp-pkg/ase/ase.cgi	29 Aug 2005 13:13:09 -0000	1.4
  @@ -36,9 +36,9 @@
       -prog_desc   => 'Affiliation Service Environment',
       -prog_vers   => '0.0.1',
       -prog_date   => '20-Feb-2005',
  -    -path_libdir => ".",
  -    -path_vardir => ".",
  -    -path_datdir => ".",
  +    -path_libdir => '.',
  +    -path_vardir => '.',
  +    -path_datdir => '.',
   };
   
   #   language extensions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.pl
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ase.pl
  --- ossp-pkg/ase/ase.pl	22 Apr 2005 15:47:08 -0000	1.1
  +++ ossp-pkg/ase/ase.pl	29 Aug 2005 13:13:09 -0000	1.2
  @@ -1,4 +1,4 @@
  -#!/usr/opkg/bin/perl
  +#!/usr/bin/env perl
   ##
   ##  OSSP ase -- Affiliation Service Environment
   ##  Copyright (c) 2005 Ralf S. Engelschall <rse@engelschall.com>
  @@ -30,6 +30,17 @@
   use strict;
   use warnings;
   
  +#   program configuration
  +our $cfg = {
  +    -prog_name   => 'OSSP ase',
  +    -prog_desc   => 'Affiliation Service Environment',
  +    -prog_vers   => '0.0.1',
  +    -prog_date   => '20-Feb-2005',
  +    -path_libdir => '.',
  +    -path_vardir => '.',
  +    -path_datdir => '.',
  +};
  +
   #   language extensions
   use Getopt::Long;                       # from OpenPKG "perl"
   use DBI;                                # from OpenPKG "perl-dbi"
  @@ -41,26 +52,33 @@
   
   #   command line parsing
   my $opt = {
  -    -help   => 0,
  -    -quiet  => 0,
  -    -type   => 'md5',
  +    -help    => 0,
  +    -version => 0,
  +    -quiet   => 0,
  +    -type    => 'md5',
   };
   my $p = new Getopt::Long::Parser;
   $p->configure("bundling");
   $p->getoptions(
  -    'h|help'   => \$opt->{-help},
  -    'q|quiet'  => \$opt->{-quiet},
  -    't|type=s' => \$opt->{-type},
  +    'h|help'      => \$opt->{-help},
  +    'V|version'   => \$opt->{-version},
  +    'q|quiet'     => \$opt->{-quiet},
  +    't|type=s'    => \$opt->{-type},
   ) || die "option parsing failed";
   undef $p;
   if ($opt->{-help}) {
       print "Usage: ase-auth [options] <username> [<password>]\n" .
             "Available options:\n" .
             " -h,--help       print out this usage page\n" .
  +          " -V,--vesion     print version\n" .
             " -q,--quiet      quiet processing\n" .
             " -t,--type=TYPE  type of password\n";
       exit(0);
   }
  +if ($opt->{-version}) {
  +    print "$cfg->{-prog_name} $cfg->{-prog_vers} ($cfg->{-prog_date})\n";
  +    exit(0);
  +}
   if (@ARGV < 1 or @ARGV > 2) {
       print STDERR "ase-auth:ERROR: invalid number of arguments\n";
       exit(1);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/devtool
  ============================================================================
  $ cvs diff -u -r0 -r1.1 devtool
  --- /dev/null	2005-08-29 15:13:08 +0200
  +++ devtool	2005-08-29 15:13:09 +0200
  @@ -0,0 +1,47 @@
  +#!/bin/sh
  +##
  +##  devtool -- Development Tool
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##
  +
  +if [ $# -eq 0 ]; then
  +    echo "devtool:USAGE: devtool <command> [<arg> ...]" 1>&2
  +    exit 1
  +fi
  +
  +cmd="$1"
  +shift
  +
  +devtoolfunc="./devtool.func"
  +
  +if [ ! -f devtool.conf ]; then
  +    echo "devtool:ERROR: no devtool.conf in current directory" 1>&2
  +    exit 1
  +fi
  +
  +cmdline=`grep "^%$cmd" devtool.conf`
  +if [ ".$cmdline" = . ]; then
  +    echo "devtool:ERROR: command $cmd not found in devtool.conf" 1>&2
  +    exit 1
  +fi
  +
  +if [ ".$TMPDIR" != . ]; then
  +    tmpdir="$TMPDIR"
  +elif [ ".$TEMPDIR" != . ]; then
  +    tmpdir="$TEMPDIR"
  +else
  +    tmpdir="/tmp"
  +fi
  +tmpfile="$tmpdir/rc.$$.tmp"
  +
  +rm -f $tmpfile
  +touch $tmpfile
  +echo ". $devtoolfunc" >>$tmpfile
  +( sed <devtool.conf -e "1,/^%common/d" -e '/^%.*/,$d'
  +  sed <devtool.conf -e "1,/^%$cmd/d" -e '/^%.*/,$d' ) |\
  +sed -e 's;\([ 	]\)@\([a-zA-Z_][a-zA-Z0-9_]*\);\1devtool_\2;' >>$tmpfile
  +
  +sh $tmpfile "$@"
  +
  +rm -f $tmpfile >/dev/null 2>&1 || true
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/devtool.conf
  ============================================================================
  $ cvs diff -u -r0 -r1.1 devtool.conf
  --- /dev/null	2005-08-29 15:13:08 +0200
  +++ devtool.conf	2005-08-29 15:13:09 +0200
  @@ -0,0 +1,52 @@
  +##
  +##  devtool.conf -- Development Tool Configuration
  +##
  +
  +%release
  +    ./devtool version
  +    ./devtool tag
  +    ./devtool dist
  +    ./devtool upload
  +
  +%version
  +    shtool version -l txt -n "OSSP ase" -p "ase_" -e VERSION
  +	V=`shtool version -l txt -dlong VERSION`
  +	sed -e "s/Version .*/Version $V/g" <README >README.n && mv README.n README
  +    V=`shtool version -l txt -dlong VERSION | sed -e 's/ .*$//'`
  +    D=`shtool version -l txt -dlong VERSION | sed -e 's/^.*(//' -e 's/).*$//'`
  +    sed -e "s/-prog_vers => '.*',/-prog_vers => '$V',/" \
  +        -e "s/-prog_date => '.*',/-prog_date => '$D',/" \
  +           <ase.cgi >ase.cgi.n && mv ase.cgi.n ase.cgi
  +    sed -e "s/-prog_vers => '.*',/-prog_vers => '$V',/" \
  +        -e "s/-prog_date => '.*',/-prog_date => '$D',/" \
  +           <ase.pl >ase.pl.n && mv ase.pl.n ase.pl
  +
  +%tag
  +	V=`shtool version -l txt -dshort VERSION | sed -e 's;\.;_;g'`
  +    echo "+++ tagging CVS sources as ASE_${V}"
  +    cvs commit -m 'flush pending changes before tagging'
  +    cvs tag ASE_${V}
  +
  +%dist
  +    echo "+++ removing old tarballs"
  +    rm -f ase-*.tar.gz
  +    echo "+++ changelog"
  +    cvs2cl --revisions --branches --tags --window 10 --utc --log-opts "-l"
  +    echo "+++ fixing"
  +    shtool fixperm -v .
  +    echo "+++ rolling"
  +    V=`shtool version -l txt -dshort VERSION`
  +    shtool tarball -o ase-${V}.tar.gz -d ase-${V} -u ossp -g ossp \
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*,*.tar.gz,^#.*,.*~$,*.bak,00TODO,autom4te\.cache,^[0-9]\.*' \
  +                     -c 'gzip --best' .
  +    ls -l ase-${V}.tar.gz
  +    echo "+++ testing"
  +    gunzip <ase-${V}.tar.gz | tar tvf - | head -10
  +    echo "[...]"
  +    gunzip <ase-${V}.tar.gz | tar tvf - | tail -10
  +
  +%upload
  +    echo "+++ copying to ftp://ftp.ossp.org/pkg/tool/ase/"
  +	V=`shtool version -l txt -dshort VERSION`
  +    scp ase-${V}.tar.gz ossp@master.ossp.org:/v/ossp/ftp/pkg/tool/ase/
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/devtool.func
  ============================================================================
  $ cvs diff -u -r0 -r1.1 devtool.func
  --- /dev/null	2005-08-29 15:13:08 +0200
  +++ devtool.func	2005-08-29 15:13:09 +0200
  @@ -0,0 +1,73 @@
  +##
  +##  devtool.func -- Development Tool Functions
  +##  Copyright (c) 2001-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##
  +
  +devtool_require () {
  +    t="$1"; o="$2"; p="$3"; e="$4"; a="$5"
  +    v=`($t $o | head -1 | awk "{ print \\\$$p; }") 2>/dev/null`
  +    if [ ".$v" = . ]; then
  +        echo "devtool:ERROR: unable to determine version of $t" 1>&2
  +        exit 1
  +    fi
  +    case "$v" in
  +        $e )
  +            ;;
  +        $a )
  +            echo "devtool:WARNING: $t version $v accepted, but expected $e." 1>&2
  +            ;;
  +        * )
  +            echo "devtool:ERROR: $t version $v NOT acceptable, requires $e." 1>&2
  +            exit 1
  +            ;;
  +    esac
  +    echo "$v"
  +}
  +
  +devtool_autogen () {
  +    tool=$1
  +    shift
  +    case $tool in
  +        autoconf )
  +            autoconf_version=`devtool_require autoconf --version 4 "$1" "$2"`
  +            echo "generating (GNU Autoconf $autoconf_version): configure config.h.in"
  +            autoconf
  +            autoheader 2>&1 | grep -v "is unchanged"
  +            rm -rf autom4te.cache >/dev/null 2>&1
  +            ;;
  +        libtool )
  +            libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
  +            echo "generating (GNU Libtool $libtoolize_version): ltmain.sh, libtool.m4, config.guess, config.sub"
  +            libtoolize --force --copy >/dev/null 2>&1
  +            cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
  +                sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` libtool.m4
  +            ;;
  +        shtool )
  +            shtoolize_version=`devtool_require shtoolize -v 3 "$1" "$2"`
  +            echo "generating (GNU Shtool $shtoolize_version): shtool"
  +            shift
  +            shift
  +            shtoolize -q "$@"
  +            ;;
  +    esac
  +}
  +
  +devtool_autoclean () {
  +    tool=$1
  +    shift
  +    case $tool in
  +        autoconf )
  +            echo "removing: configure config.h.in"
  +            rm -f configure config.h.in
  +            ;;
  +        libtool )
  +            echo "removing: ltmain.sh libtool.m4 config.guess config.sub"
  +            rm -f ltmain.sh libtool.m4 config.guess config.sub
  +            ;;
  +        shtool )
  +            echo "removing: shtool"
  +            rm -f shtool
  +            ;;
  +    esac
  +}
  +
  @@ .

From ossp-cvs-owner@ossp.org  Mon Aug 29 15:13:23 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B5242752F16; Mon, 29 Aug 2005 15:13:23 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ README VERSION
Message-Id: <20050829131323.B5242752F16@mail.ossp.org>
Date: Mon, 29 Aug 2005 15:13:23 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /v/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   29-Aug-2005 15:13:23
  Branch: HEAD                             Handle: 2005082914132300

  Modified files:
    ossp-pkg/ase            README VERSION

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/ase/README
    1.2         +1  -1      ossp-pkg/ase/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/README
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 README
  --- ossp-pkg/ase/README	29 Aug 2005 13:13:09 -0000	1.3
  +++ ossp-pkg/ase/README	29 Aug 2005 13:13:23 -0000	1.4
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     \___/|___/\___| 
   
     OSSP ase - Affiliation Service Environment
  -  Version 0.1.7 (29-Aug-2005)
  +  Version 0.1.8 (29-Aug-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/VERSION
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 VERSION
  --- ossp-pkg/ase/VERSION	29 Aug 2005 13:13:09 -0000	1.1
  +++ ossp-pkg/ase/VERSION	29 Aug 2005 13:13:23 -0000	1.2
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP ase (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP ase, Version 0.1.7 (29-Aug-2005)
  +  This is OSSP ase, Version 0.1.8 (29-Aug-2005)
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Aug 29 17:23:52 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id A802A752ED0; Mon, 29 Aug 2005 17:23:52 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.loader.pl ase.cgi.login.pl ase.cgi.m...
Message-Id: <20050829152352.A802A752ED0@mail.ossp.org>
Date: Mon, 29 Aug 2005 17:23:52 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Aug-2005 17:23:52
  Branch: HEAD                             Handle: 2005082916235100

  Modified files:
    ossp-pkg/ase            ase.cgi.loader.pl ase.cgi.login.pl ase.cgi.main.pl
                            ase.css

  Log:
    apply strict XHTML rendering and allow better website embedding

  Summary:
    Revision    Changes     Path
    1.2         +7  -2      ossp-pkg/ase/ase.cgi.loader.pl
    1.3         +3  -3      ossp-pkg/ase/ase.cgi.login.pl
    1.3         +6  -2      ossp-pkg/ase/ase.cgi.main.pl
    1.2         +20 -25     ossp-pkg/ase/ase.css
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.loader.pl
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ase.cgi.loader.pl
  --- ossp-pkg/ase/ase.cgi.loader.pl	29 Aug 2005 12:43:35 -0000	1.1
  +++ ossp-pkg/ase/ase.cgi.loader.pl	29 Aug 2005 15:23:51 -0000	1.2
  @@ -56,8 +56,13 @@
   
       #   optional content adjustment
       if ($name =~ m|\.css$|) {
  -        $content =~ s|url\((.+?)\)|"url(".$cgi->url(-relative => 1).
  -                                   "?mode=loader;name=".URI::Escape::uri_escape($1).")"|sge;
  +        my $adjust_url = sub {
  +            my ($cgi, $url) = @_;
  +            return (  $url =~ m/^[^\/:]+$/
  +                    ? $cgi->url(-relative => 1)."?mode=loader;name=".URI::Escape::uri_escape($url)
  +                    : $1);
  +        };
  +        $content =~ s|url\((.+?)\)|"url(".&$adjust_url($cgi, $1).")"|sge;
       }
   
       #   pass back content
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	29 Aug 2005 12:43:35 -0000	1.2
  +++ ossp-pkg/ase/ase.cgi.login.pl	29 Aug 2005 15:23:51 -0000	1.3
  @@ -55,7 +55,7 @@
   
       #   generate header text
       $html .=
  -        "Welcome to the OpenPKG Foundation Affiliation Service Environment!<p>\n" .
  +        "Welcome to the OpenPKG Foundation Affiliation Service Environment!<p/>\n" .
           "Please login with either your Username (members) or\n" .
           "with your Email address (fellows).\n" .
           "To join the OpenPKG Foundation as a fellow or even member,\n" .
  @@ -65,7 +65,7 @@
   
       #   generate the inner canvas
       $html .=
  -        "<p>\n" .
  +        "<p/>\n" .
           "<table>\n" .
           "  <tr>\n" .
           "    <td><span class=\"label\">Login:</span></td>\n" .
  @@ -84,7 +84,7 @@
           "  </tr>\n" .
           "  <tr>\n" .
           "    <td>&nbsp;</td>\n" .
  -        "    <td colspan=2>"; $html->fold("error"); $html .= "</td>\n" .
  +        "    <td colspan=\"2\">"; $html->fold("error"); $html .= "</td>\n" .
           "  </tr>\n" .
           "</table>\n";
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	29 Aug 2005 12:43:35 -0000	1.2
  +++ ossp-pkg/ase/ase.cgi.main.pl	29 Aug 2005 15:23:51 -0000	1.3
  @@ -55,8 +55,12 @@
       my $txt < IO::All::io($cfg->{-path_datdir}."/ase.html")
           or die "unable to read HTML skeleton file \"".$cfg->{-path_datdir}."/ase.html"."\"";
       $txt =~ s/\%HEAD\%/$html->folder("head")/se;
  -    $txt =~ s/\%BODY\%/$html->folder("body")/se;
  -    $txt =~ s/(\s+(?:href|src)=")([^"]+)/$1.$self->url(-mode => "loader", -name => $2)/sge;
  +    $txt =~ s/\%BODY\%/"<div class=\"ase\">".$html->folder("body")."<\/div>"/se;
  +    my $adjust_url = sub {
  +        my ($self, $url) = @_;
  +        return ($url =~ m|^[^\/:]+$| ? $self->url(-mode => "loader", -name => $url) : $url);
  +    };
  +    $txt =~ s/(\s+(?:href|src)=")([^"]+)/$1.&$adjust_url($self, $2)/sge;
       $html->append($txt);
       $html->divert("body");
       $html->overload(1);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.css
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ase.css
  --- ossp-pkg/ase/ase.css	22 Apr 2005 15:47:08 -0000	1.1
  +++ ossp-pkg/ase/ase.css	29 Aug 2005 15:23:51 -0000	1.2
  @@ -2,16 +2,10 @@
   **  ase.css -- Cascading Style Sheet
   */
   
  -html {
  -    background:       #c0c0c0;
  -}
  -
   /* General: Outer Canvas */
   .ase {
  -    padding:          20px 20px 20px 20px;
  +    padding:          10px 0px 10px 0px;
       width:            600px;
  -    border:           1px solid #000000;
  -    background:       #ffffff;
       font-family:      sans-serif, helvetica, arial;
   }
   .ase a {
  @@ -99,33 +93,33 @@
   }
   
   /* Step List */
  -ol.steps {
  +.ase ol.steps {
       border-left:      4px solid #e0e0e0;
       margin-left:      0px;
       padding-left:     30px;
       font-weight:      bold;
   }
  -ol.steps li {
  +.ase ol.steps li {
       color:            #a0a0a0;
   }
  -ol.steps li.this {
  +.ase ol.steps li.this {
       color:            #000000;
   }
   
   /* Breadcrumb List */
  -ul.breadcrumb {
  +.ase ul.breadcrumb {
       margin:           0px;
       margin-bottom:    10px;
       padding:          0px;
       white-space:      nowrap;
       font-weight:      bold;
   }
  -ul.breadcrumb li {
  +.ase ul.breadcrumb li {
       color:            #000000;
       display:          inline;
       list-style:       none;
   }
  -ul.breadcrumb li a {
  +.ase ul.breadcrumb li a {
       color:            #a0a0a0;
       text-decoration:  none;
   }
  @@ -173,9 +167,9 @@
   .ase table.F tr {
   }
   .ase table.F td.L {
  -    background-color:   #fffffff;
  +    background-color:   #ffffff;
       border-bottom:      1px solid #cccccc;
  -    #-moz-border-radius: 10px 0 0 10px;
  +    /*-moz-border-radius: 10px 0 0 10px;*/
       padding:            4px 10px 4px 20px;
   }
   .ase table.F td.I {
  @@ -184,11 +178,11 @@
   }
   
   /* navigation tabs */
  -div.tabsframe {
  +.ase div.tabsframe {
       border:             1px solid #cccccc;
       padding:            10px 10px 10px 10px;
   }
  -ul.tabs {
  +.ase ul.tabs {
       margin:             0px;
       margin-left:        4px;     /* compensate gap reduction (see below) */
       padding:            0px;
  @@ -196,19 +190,19 @@
       font-family:        sans-serif,helvetica,lucida,verdana,arial;
       font-size:          12px;
   }
  -ul.tabs li {
  +.ase ul.tabs li {
       display:            inline;
       margin-left:        -4px;    /* gap reduction between inline elements */
       list-style:         none;
   }
  -ul.tabs li.padding {
  +.ase ul.tabs li.padding {
       border-bottom:      1px solid #bbbbbb;
       padding-left:       10px;
   }
  -ul.tabs li a {
  +.ase ul.tabs li a {
       margin:             0px;
  -    -moz-border-radius: 8px 8px 0 0;
  -    border-radius:      8px 8px 0 0;
  +    /*-moz-border-radius: 8px 8px 0 0;*/
  +    /*border-radius:      8px 8px 0 0;*/
       border-top:         1px solid #cccccc;
       border-left:        1px solid #cccccc;
       border-right:       1px solid #666666;
  @@ -218,7 +212,7 @@
       color:              #666666;
       text-decoration:    none;
   }
  -ul.tabs li.active a {
  +.ase ul.tabs li.active a {
       border-top:         1px solid #cccccc;
       border-left:        1px solid #cccccc;
       border-right:       1px solid #666666;
  @@ -228,12 +222,13 @@
       color:              #000000;
       font-weight:        bold;
   }
  -ul.tabs li a:hover {
  +.ase ul.tabs li a:hover {
       background-color:   #f0f0f0;
       color:              #666666;
       text-decoration:    none !important;
   }
  -ul.tabs li.active a:hover {
  +.ase ul.tabs li.active a:hover {
       background-color:   inherit;
       color:              inherit;
   }
  +
  @@ .

From ossp-cvs-owner@ossp.org  Mon Aug 29 17:28:36 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 11C59752ED0; Mon, 29 Aug 2005 17:28:36 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO
Message-Id: <20050829152836.11C59752ED0@mail.ossp.org>
Date: Mon, 29 Aug 2005 17:28:36 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Aug-2005 17:28:36
  Branch: HEAD                             Handle: 2005082916283500

  Added files:
    ossp-pkg/ase            TODO

  Log:
    remember what has to be done

  Summary:
    Revision    Changes     Path
    1.1         +3  -0      ossp-pkg/ase/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r0 -r1.1 TODO
  --- /dev/null	2005-08-29 17:28:34 +0200
  +++ TODO	2005-08-29 17:28:36 +0200
  @@ -0,0 +1,3 @@
  +- add OSSP::cfg based ase.cfg for external file referencing & embedded texts & mailing
  +- add support to ase CLI for initial creation of database (use in OpenPKG ase.spec:%post)
  +- add INSTALL document which shows how to link with webserver
  @@ .

From ossp-cvs-owner@ossp.org  Mon Aug 29 17:59:28 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id F08BE752ED0; Mon, 29 Aug 2005 17:59:27 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO
Message-Id: <20050829155927.F08BE752ED0@mail.ossp.org>
Date: Mon, 29 Aug 2005 17:59:27 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Aug-2005 17:59:27
  Branch: HEAD                             Handle: 2005082916592700

  Modified files:
    ossp-pkg/ase            TODO

  Log:
    remember issue

  Summary:
    Revision    Changes     Path
    1.2         +2  -0      ossp-pkg/ase/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 TODO
  --- ossp-pkg/ase/TODO	29 Aug 2005 15:28:35 -0000	1.1
  +++ ossp-pkg/ase/TODO	29 Aug 2005 15:59:27 -0000	1.2
  @@ -1,3 +1,5 @@
   - add OSSP::cfg based ase.cfg for external file referencing & embedded texts & mailing
   - add support to ase CLI for initial creation of database (use in OpenPKG ase.spec:%post)
   - add INSTALL document which shows how to link with webserver
  +- nach go to login screen after enrollment via ?mode=login one cannot login
  +  as the hidden field of mode=login-action is not overriding the query string
  @@ .

From ossp-cvs-owner@ossp.org  Mon Aug 29 19:35:59 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id EA372752ED0; Mon, 29 Aug 2005 19:35:58 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.main.pl ase.html
Message-Id: <20050829173558.EA372752ED0@mail.ossp.org>
Date: Mon, 29 Aug 2005 19:35:58 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Aug-2005 19:35:58
  Branch: HEAD                             Handle: 2005082918355800

  Modified files:
    ossp-pkg/ase            ase.cgi.main.pl ase.html

  Log:
    provide an OpenPKG independent default webpage

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/ase/ase.cgi.main.pl
    1.2         +5  -16     ossp-pkg/ase/ase.html
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	29 Aug 2005 15:23:51 -0000	1.3
  +++ ossp-pkg/ase/ase.cgi.main.pl	29 Aug 2005 17:35:58 -0000	1.4
  @@ -55,7 +55,7 @@
       my $txt < IO::All::io($cfg->{-path_datdir}."/ase.html")
           or die "unable to read HTML skeleton file \"".$cfg->{-path_datdir}."/ase.html"."\"";
       $txt =~ s/\%HEAD\%/$html->folder("head")/se;
  -    $txt =~ s/\%BODY\%/"<div class=\"ase\">".$html->folder("body")."<\/div>"/se;
  +    $txt =~ s/\%BODY\%/"<div class=\"ase\">\n".$html->folder("body")."<\/div>\n"/se;
       my $adjust_url = sub {
           my ($self, $url) = @_;
           return ($url =~ m|^[^\/:]+$| ? $self->url(-mode => "loader", -name => $url) : $url);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.html
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ase.html
  --- ossp-pkg/ase/ase.html	22 Apr 2005 15:47:08 -0000	1.1
  +++ ossp-pkg/ase/ase.html	29 Aug 2005 17:35:58 -0000	1.2
  @@ -1,23 +1,12 @@
  +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  +  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
   <html>
     <head>
  -    <link rel="stylesheet" type="text/css" href="ase.css">
  +    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
  +    <link rel="stylesheet" type="text/css" href="ase.css"/>
       %HEAD%
     </head>
     <body>
  -    <div class="ase">
  -      <table width=100%>
  -        <tr>
  -          <td valign=bottom>
  -            <h1>OpenPKG Foundation</h1>
  -            <h2>Affiliation Service Environment</h2>
  -          </td>
  -          <td align=right>
  -            <a href="http://www.openpkg.net/"><img src="ase.img.logo.png" alt="" border=0></a>
  -          </td>
  -        </tr>
  -      </table>
  -      <p>
  -      %BODY%
  -    </div>
  +    %BODY%
     </body>
   </html>
  @@ .

From ossp-cvs-owner@ossp.org  Mon Aug 29 19:36:56 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 6A152752ED0; Mon, 29 Aug 2005 19:36:56 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.css
Message-Id: <20050829173656.6A152752ED0@mail.ossp.org>
Date: Mon, 29 Aug 2005 19:36:56 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Aug-2005 19:36:56
  Branch: HEAD                             Handle: 2005082918365600

  Modified files:
    ossp-pkg/ase            ase.css

  Log:
    add missing copyright header to CSS file

  Summary:
    Revision    Changes     Path
    1.3         +23 -1      ossp-pkg/ase/ase.css
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.css
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ase.css
  --- ossp-pkg/ase/ase.css	29 Aug 2005 15:23:51 -0000	1.2
  +++ ossp-pkg/ase/ase.css	29 Aug 2005 17:36:56 -0000	1.3
  @@ -1,5 +1,27 @@
   /*
  -**  ase.css -- Cascading Style Sheet
  +**  OSSP ase -- Affiliation Service Environment
  +**  Copyright (c) 2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2005 The OSSP Project <http://www.ossp.org/>
  +**
  +**  This file is part of OSSP ase, a service environment for managing
  +**  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  +**
  +**  This program is free software; you can redistribute it and/or modify
  +**  it under the terms of the GNU General Public License as published by
  +**  the Free Software Foundation; either version 2 of the License, or
  +**  (at your option) any later version.
  +**
  +**  This program is distributed in the hope that it will be useful,
  +**  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +**  General Public License for more details.
  +**
  +**  You should have received a copy of the GNU General Public License
  +**  along with this program; if not, write to the Free Software
  +**  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +**  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +**
  +**  ase.css: Cascading Style Sheet (CSS)
   */
   
   /* General: Outer Canvas */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Aug 29 21:55:24 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 94941752ED0; Mon, 29 Aug 2005 21:55:24 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO ase.cgi.util.pl
Message-Id: <20050829195524.94941752ED0@mail.ossp.org>
Date: Mon, 29 Aug 2005 21:55:24 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Aug-2005 21:55:24
  Branch: HEAD                             Handle: 2005082920552400

  Modified files:
    ossp-pkg/ase            TODO ase.cgi.util.pl

  Log:
    an empty relative URL is treated special by the browser: if current
    url is foo/?bar=quux a link to an empty URL result in a request to
    foo/?bar=quux while a request to '.' results in foo/

  Summary:
    Revision    Changes     Path
    1.3         +0  -2      ossp-pkg/ase/TODO
    1.3         +1  -0      ossp-pkg/ase/ase.cgi.util.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 TODO
  --- ossp-pkg/ase/TODO	29 Aug 2005 15:59:27 -0000	1.2
  +++ ossp-pkg/ase/TODO	29 Aug 2005 19:55:24 -0000	1.3
  @@ -1,5 +1,3 @@
   - add OSSP::cfg based ase.cfg for external file referencing & embedded texts & mailing
   - add support to ase CLI for initial creation of database (use in OpenPKG ase.spec:%post)
   - add INSTALL document which shows how to link with webserver
  -- nach go to login screen after enrollment via ?mode=login one cannot login
  -  as the hidden field of mode=login-action is not overriding the query string
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.util.pl
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ase.cgi.util.pl
  --- ossp-pkg/ase/ase.cgi.util.pl	29 Aug 2005 12:43:35 -0000	1.2
  +++ ossp-pkg/ase/ase.cgi.util.pl	29 Aug 2005 19:55:24 -0000	1.3
  @@ -33,6 +33,7 @@
   sub url {
       my ($self, %attr) = @_;
       my $url = $self->param(-cgi)->url(-relative => 1);
  +    $url = "." if ($url eq '');
       my $first = 1;
       foreach my $key (keys(%attr)) {
           my ($var, $val) = ($key, $attr{$key});
  @@ .

From ossp-cvs-owner@ossp.org  Mon Aug 29 22:25:44 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id E27F7752ED0; Mon, 29 Aug 2005 22:25:44 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog devtool.conf
Message-Id: <20050829202544.E27F7752ED0@mail.ossp.org>
Date: Mon, 29 Aug 2005 22:25:44 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Aug-2005 22:25:44
  Branch: HEAD                             Handle: 2005082921254400

  Modified files:
    ossp-pkg/uuid           ChangeLog devtool.conf

  Log:
    upgrade to newer build tools

  Summary:
    Revision    Changes     Path
    1.75        +1  -1      ossp-pkg/uuid/ChangeLog
    1.14        +2  -2      ossp-pkg/uuid/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.74 -r1.75 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	15 Jun 2005 18:34:04 -0000	1.74
  +++ ossp-pkg/uuid/ChangeLog	29 Aug 2005 20:25:44 -0000	1.75
  @@ -17,7 +17,7 @@
        ioctl(...,SIOCGARP,...) only if arp_flags had ATF_COM set.
        [Ralf S. Engelschall]
   
  -   o Upgrade to GNU libtool 1.5.16.
  +   o Upgrade to GNU libtool 1.5.18 and GNU shtool 2.0.2.
        [Ralf S. Engelschall]
   
      o Cleanup the source code even more by following a large
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 devtool.conf
  --- ossp-pkg/uuid/devtool.conf	16 May 2005 09:59:39 -0000	1.13
  +++ ossp-pkg/uuid/devtool.conf	29 Aug 2005 20:25:44 -0000	1.14
  @@ -3,8 +3,8 @@
   ##
   
   %autogen
  -    @autogen shtool   2.0.1  "2.0.*" all
  -    @autogen libtool  1.5.16 "1.5*"
  +    @autogen shtool   2.0.2  "2.0.*" all
  +    @autogen libtool  1.5.18 "1.5*"
       @autogen autoconf 2.59   "2.5[3-9]*"
   
   %autoclean
  @@ .

From ossp-cvs-owner@ossp.org  Tue Aug 30 17:26:08 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 1D332752ED0; Tue, 30 Aug 2005 17:26:08 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid_prng.c uuid_prng.h
Message-Id: <20050830152608.1D332752ED0@mail.ossp.org>
Date: Tue, 30 Aug 2005 17:26:08 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Aug-2005 17:26:08
  Branch: HEAD                             Handle: 2005083016260700

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid_prng.c uuid_prng.h

  Log:
    Improve the PRNG in case no stronger system PRNG device is
    available by passing time and rand(3) based entropy into the MD5
    one-way hash function to achieve at least some sort of weaker PRN data.

  Summary:
    Revision    Changes     Path
    1.76        +5  -0      ossp-pkg/uuid/ChangeLog
    1.6         +53 -22     ossp-pkg/uuid/uuid_prng.c
    1.3         +2  -1      ossp-pkg/uuid/uuid_prng.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.75 -r1.76 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	29 Aug 2005 20:25:44 -0000	1.75
  +++ ossp-pkg/uuid/ChangeLog	30 Aug 2005 15:26:07 -0000	1.76
  @@ -13,6 +13,11 @@
   
     Changes between 1.2.0 and 1.2.1 (23-Jan-2005 to xx-Mar-2005)
   
  +   o Improve the PRNG in case no stronger system PRNG device is
  +     available by passing time and rand(3) based entropy into the MD5
  +     one-way hash function to achieve at least some sort of weaker PRN data.
  +     [Ralf S. Engelschall]
  +
      o Fix MAC address determination under Solaris by using the result of
        ioctl(...,SIOCGARP,...) only if arp_flags had ATF_COM set.
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_prng.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 uuid_prng.c
  --- ossp-pkg/uuid/uuid_prng.c	29 Mar 2005 19:01:41 -0000	1.5
  +++ ossp-pkg/uuid/uuid_prng.c	30 Aug 2005 15:26:07 -0000	1.6
  @@ -35,9 +35,12 @@
   #include <fcntl.h>
   
   #include "uuid_prng.h"
  +#include "uuid_md5.h"
   
   struct prng_st {
  -    int devfd;
  +    int    dev; /* system PRNG device */
  +    md5_t *md5; /* local MD5 PRNG engine */
  +    long   cnt; /* time resolution compensation counter */
   };
   
   prng_rc_t prng_create(prng_t **prng)
  @@ -56,14 +59,21 @@
           return PRNG_RC_MEM;
   
       /* try to open the system PRNG device */
  -    (*prng)->devfd = -1;
  +    (*prng)->dev = -1;
       if ((fd = open("/dev/urandom", O_RDONLY)) == -1)
           fd = open("/dev/random", O_RDONLY|O_NONBLOCK);
       if (fd != -1) {
           fcntl(fd, F_SETFD, FD_CLOEXEC);
  -        (*prng)->devfd = fd;
  +        (*prng)->dev = fd;
       }
   
  +    /* initialize MD5 engine */
  +    if (md5_create(&((*prng)->md5)) != MD5_RC_OK)
  +        return PRNG_RC_INT;
  +
  +    /* initialize time resolution compensation counter */
  +    (*prng)->cnt = 0;
  +
       /* seed the C library PRNG once */
       gettimeofday(&tv, NULL);
       pid = getpid();
  @@ -72,10 +82,7 @@
           ^ (unsigned int)pid
           ^ (unsigned int)tv.tv_sec
           ^ (unsigned int)tv.tv_usec));
  -
  -    /* crank the PRNG a few times */
  -    gettimeofday(&tv, NULL);
  -    for (i = (unsigned int)(tv.tv_sec ^ tv.tv_usec) & 0x1F; i > 0; i--)
  +    for (i = (unsigned int)((tv.tv_sec ^ tv.tv_usec) & 0x1F); i > 0; i--)
           (void)rand();
   
       return PRNG_RC_OK;
  @@ -85,35 +92,59 @@
   {
       size_t n;
       unsigned char *p;
  -    int cnt;
  +    struct {
  +        struct timeval tv;
  +        long cnt;
  +        int rnd;
  +    } entropy;
  +    unsigned char md5_buf[MD5_LEN_BIN];
  +    unsigned char *md5_ptr;
  +    size_t md5_len;
  +    int retries;
       int i;
   
       /* sanity check argument(s) */
       if (prng == NULL || data_len == 0)
           return PRNG_RC_ARG;
   
  -    /* try to gather data from the system PRNG device */
  -    if (prng->devfd != -1) {
  -        p = (unsigned char *)data_ptr;
  -        n = data_len;
  -        cnt = 0;
  +    /* prepare for generation */
  +    p = (unsigned char *)data_ptr;
  +    n = data_len;
  +
  +    /* approach 1: try to gather data via stronger system PRNG device */
  +    if (prng->dev != -1) {
  +        retries = 0;
           while (n > 0) {
  -            i = read(prng->devfd, (void *)p, n);
  +            i = read(prng->dev, (void *)p, n);
               if (i <= 0) {
  -                if (cnt++ > 16)
  +                if (retries++ > 16)
                       break;
                   continue;
               }
  +            retries = 0;
               n -= (unsigned int)i;
               p += (unsigned int)i;
  -            cnt = 0;
           }
       }
   
  -    /* always also apply the weaker PRNG. In case the stronger PRNG device
  -       based source failed, this is the only remaining randomness, of course */
  -    for (p = (unsigned char *)data_ptr, n = 0; n < data_len; n++)
  -        *p++ ^= (unsigned char)(((unsigned int)rand() >> 7) & 0xFF);
  +    /* approach 2: try to gather data via weaker libc PRNG API. */
  +    while (n > 0) {
  +        /* gather new entropy */
  +        gettimeofday(&(entropy.tv), NULL);
  +        entropy.cnt = prng->cnt++;
  +        entropy.rnd = rand();
  +
  +        /* pass entropy into MD5 engine */
  +        md5_update(prng->md5, (void *)&entropy, sizeof(entropy));
  +
  +        /* store MD5 engine state as PRN output */
  +        md5_ptr = md5_buf;
  +        md5_len = sizeof(md5_buf);
  +        md5_store(prng->md5, (void *)&md5_ptr, &md5_len);
  +        for (i = 0; i < MD5_LEN_BIN && n > 0; i++, n--)
  +            *p++ ^= md5_buf[i]; /* intentionally no assignment because arbitrary
  +                                   caller buffer content is leveraged, too */
  +    }
   
       return PRNG_RC_OK;
   }
  @@ -125,8 +156,8 @@
           return PRNG_RC_ARG;
   
       /* close PRNG device */
  -    if (prng->devfd != -1)
  -        close(prng->devfd);
  +    if (prng->dev != -1)
  +        close(prng->dev);
   
       /* free object */
       free(prng);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_prng.h
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid_prng.h
  --- ossp-pkg/uuid/uuid_prng.h	31 Dec 2004 19:20:34 -0000	1.2
  +++ ossp-pkg/uuid/uuid_prng.h	30 Aug 2005 15:26:07 -0000	1.3
  @@ -56,7 +56,8 @@
   typedef enum {
       PRNG_RC_OK  = 0,
       PRNG_RC_ARG = 1,
  -    PRNG_RC_MEM = 2
  +    PRNG_RC_MEM = 2,
  +    PRNG_RC_INT = 3
   } prng_rc_t;
   
   extern prng_rc_t prng_create  (prng_t **prng);
  @@ .

From ossp-cvs-owner@ossp.org  Tue Aug 30 20:36:55 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id CFCF2752ED0; Tue, 30 Aug 2005 20:36:55 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog SEEALSO
Message-Id: <20050830183655.CFCF2752ED0@mail.ossp.org>
Date: Tue, 30 Aug 2005 20:36:55 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Aug-2005 20:36:55
  Branch: HEAD                             Handle: 2005083019365500

  Added files:
    ossp-pkg/uuid           SEEALSO
  Modified files:
    ossp-pkg/uuid           ChangeLog

  Log:
    Add SEEALSO document which references all known UUID implementations.

  Summary:
    Revision    Changes     Path
    1.77        +5  -1      ossp-pkg/uuid/ChangeLog
    1.1         +52 -0      ossp-pkg/uuid/SEEALSO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.76 -r1.77 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	30 Aug 2005 15:26:07 -0000	1.76
  +++ ossp-pkg/uuid/ChangeLog	30 Aug 2005 18:36:55 -0000	1.77
  @@ -11,7 +11,11 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 1.2.0 and 1.2.1 (23-Jan-2005 to xx-Mar-2005)
  +  Changes between 1.2.0 and 1.2.1 (23-Jan-2005 to 30-Aug-2005)
  +
  +   o Add SEEALSO document which references all known
  +     UUID implementations.
  +     [Ralf S. Engelschall]
   
      o Improve the PRNG in case no stronger system PRNG device is
        available by passing time and rand(3) based entropy into the MD5
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/SEEALSO
  ============================================================================
  $ cvs diff -u -r0 -r1.1 SEEALSO
  --- /dev/null	2005-08-30 20:36:26 +0200
  +++ SEEALSO	2005-08-30 20:36:55 +0200
  @@ -0,0 +1,52 @@
  +   _        ___  ____ ____  ____                _     _
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _   _ _   _(_) __| |
  +  _|_||_| | | | \___ \___ \| |_) | | | | | | | | |/ _` |
  + |_||_|_| | |_| |___) |__) |  __/  | |_| | |_| | | (_| |
  +  |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
  +
  +  OSSP uuid - Universally Unique Identifier
  +
  +  SEE ALSO
  +
  +  Although we consider OSSP uuid the ultimate reference implementation
  +  of an UUID generator, there are multiple alternatives available.
  +  Following is a short reference of all currently known UUID
  +  implementations for platforms with an Unix/POSIX API:
  +
  +  o OSSP uuid (ISO-C), OSSP::uuid (Perl)
  +    http://www.ossp.org/pkg/lib/uuid/
  +    http://cvs.ossp.org/ossp-pkg/uuid/
  +
  +  o FreeBSD libc (ISO-C)
  +    http://www.freebsd.org/
  +    http://www.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/uuid/
  +
  +  o Sun Solaris libc (ISO-C), DCE::UUID (Perl/XS)
  +    http://www.opensolaris.org/
  +    http://cvs.opensolaris.org/source/xref/usr/src/lib/libuuid/
  +
  +  o APR libaprutil (ISO-C), APR::UUID (Perl/XS)
  +    http://svn.apache.org/repos/asf/apr/apr-util/trunk/crypto/
  +
  +  o e2fsprogs/libuuid (ISO-C), UUID (Perl/XS)
  +    http://e2fsprogs.sourceforge.net/
  +    http://thunk.org/hg/e2fsprogs/
  +
  +  o Wine rpcrt4 DLL (ISO-C)
  +    http://www.winehq.org/
  +
  +  o Data::UUID (Perl/XS)
  +    http://search.cpan.org/src/AGOLOMSH/
  +    http://www.cpan.org/modules/by-module/Data/
  +
  +  o JUG (Java/JNI)
  +    http://www.doomdark.org/doomdark/proj/jug/
  +
  +  o Mozilla (ISO-C, ISO-C++)
  +    http://www.mozilla.org/
  +    http://lxr.mozilla.org/mozilla1.7/source/calendar/libxpical/token.c
  +
  +  o HelixPlayer (ISO-C, ISO-C++)
  +    https://player.helixcommunity.org/
  +    common/util/chxuuid.cpp
  +
  @@ .

From ossp-cvs-owner@ossp.org  Tue Aug 30 20:41:56 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id A41CB752ED0; Tue, 30 Aug 2005 20:41:56 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid_prng.c
Message-Id: <20050830184156.A41CB752ED0@mail.ossp.org>
Date: Tue, 30 Aug 2005 20:41:56 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Aug-2005 20:41:56
  Branch: HEAD                             Handle: 2005083019415600

  Modified files:
    ossp-pkg/uuid           uuid_prng.c

  Log:
    cleanup Flexelint warnings

  Summary:
    Revision    Changes     Path
    1.7         +7  -5      ossp-pkg/uuid/uuid_prng.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_prng.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 uuid_prng.c
  --- ossp-pkg/uuid/uuid_prng.c	30 Aug 2005 15:26:07 -0000	1.6
  +++ ossp-pkg/uuid/uuid_prng.c	30 Aug 2005 18:41:56 -0000	1.7
  @@ -63,7 +63,7 @@
       if ((fd = open("/dev/urandom", O_RDONLY)) == -1)
           fd = open("/dev/random", O_RDONLY|O_NONBLOCK);
       if (fd != -1) {
  -        fcntl(fd, F_SETFD, FD_CLOEXEC);
  +        (void)fcntl(fd, F_SETFD, FD_CLOEXEC);
           (*prng)->dev = fd;
       }
   
  @@ -75,7 +75,7 @@
       (*prng)->cnt = 0;
   
       /* seed the C library PRNG once */
  -    gettimeofday(&tv, NULL);
  +    (void)gettimeofday(&tv, NULL);
       pid = getpid();
       srand((unsigned int)(
           ((unsigned int)pid << 16)
  @@ -130,17 +130,19 @@
       /* approach 2: try to gather data via weaker libc PRNG API. */
       while (n > 0) {
           /* gather new entropy */
  -        gettimeofday(&(entropy.tv), NULL);
  +        (void)gettimeofday(&(entropy.tv), NULL);
           entropy.cnt = prng->cnt++;
           entropy.rnd = rand();
   
           /* pass entropy into MD5 engine */
  -        md5_update(prng->md5, (void *)&entropy, sizeof(entropy));
  +        if (md5_update(prng->md5, (void *)&entropy, sizeof(entropy)) != MD5_RC_OK)
  +            return PRNG_RC_INT;
   
           /* store MD5 engine state as PRN output */
           md5_ptr = md5_buf;
           md5_len = sizeof(md5_buf);
  -        md5_store(prng->md5, (void *)&md5_ptr, &md5_len);
  +        if (md5_store(prng->md5, (void *)&md5_ptr, &md5_len) != MD5_RC_OK)
  +            return PRNG_RC_INT;
           for (i = 0; i < MD5_LEN_BIN && n > 0; i++, n--)
               *p++ ^= md5_buf[i]; /* intentionally no assignment because arbitrary
                                      caller buffer content is leveraged, too */
  @@ .

From ossp-cvs-owner@ossp.org  Tue Aug 30 20:42:10 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id F030A752F19; Tue, 30 Aug 2005 20:42:09 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ .flexelint.lnt
Message-Id: <20050830184209.F030A752F19@mail.ossp.org>
Date: Tue, 30 Aug 2005 20:42:09 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Aug-2005 20:42:09
  Branch: HEAD                             Handle: 2005083019420900

  Added files:
    ossp-pkg/uuid           .flexelint.lnt

  Log:
    add FlexeLint configuration

  Summary:
    Revision    Changes     Path
    1.1         +26 -0      ossp-pkg/uuid/.flexelint.lnt
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/.flexelint.lnt
  ============================================================================
  $ cvs diff -u -r0 -r1.1 .flexelint.lnt
  --- /dev/null	2005-08-30 20:41:12 +0200
  +++ .flexelint.lnt	2005-08-30 20:42:09 +0200
  @@ -0,0 +1,26 @@
  +"-emacro(26,va_arg)"
  +-e715 
  +-e534
  +-e545
  +-e818
  +-e732
  +-e834
  +-e537
  +-e766
  +-e830
  +-e749
  +-e750
  +-e751
  +-e752
  +-e753
  +-e754
  +-e755
  +-e714
  +-e526
  +-e759
  +-e768
  +-e769
  +-e765
  +-esym[668,fprintf,fwrite,fclose]
  +-esym[530,ap]
  +-efile[617,uuid_vers.h]
  @@ .

From ossp-cvs-owner@ossp.org  Tue Aug 30 21:25:04 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 76085752ED0; Tue, 30 Aug 2005 21:25:04 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid_prng.c
Message-Id: <20050830192504.76085752ED0@mail.ossp.org>
Date: Tue, 30 Aug 2005 21:25:04 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Aug-2005 21:25:04
  Branch: HEAD                             Handle: 2005083020250400

  Modified files:
    ossp-pkg/uuid           uuid_prng.c

  Log:
    annotate what the source really is

  Summary:
    Revision    Changes     Path
    1.8         +3  -3      ossp-pkg/uuid/uuid_prng.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_prng.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 uuid_prng.c
  --- ossp-pkg/uuid/uuid_prng.c	30 Aug 2005 18:41:56 -0000	1.7
  +++ ossp-pkg/uuid/uuid_prng.c	30 Aug 2005 19:25:04 -0000	1.8
  @@ -130,9 +130,9 @@
       /* approach 2: try to gather data via weaker libc PRNG API. */
       while (n > 0) {
           /* gather new entropy */
  -        (void)gettimeofday(&(entropy.tv), NULL);
  -        entropy.cnt = prng->cnt++;
  -        entropy.rnd = rand();
  +        (void)gettimeofday(&(entropy.tv), NULL);            /* source: libc time */
  +        entropy.rnd = rand();                               /* source: libc PRNG */
  +        entropy.cnt = prng->cnt++;                          /* source: local counter */
   
           /* pass entropy into MD5 engine */
           if (md5_update(prng->md5, (void *)&entropy, sizeof(entropy)) != MD5_RC_OK)
  @@ .

From ossp-cvs-owner@ossp.org  Tue Aug 30 22:00:32 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 9318A752ED0; Tue, 30 Aug 2005 22:00:32 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/perl/ uuid.pod
Message-Id: <20050830200032.9318A752ED0@mail.ossp.org>
Date: Tue, 30 Aug 2005 22:00:32 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Aug-2005 22:00:32
  Branch: HEAD                             Handle: 2005083021003200

  Modified files:
    ossp-pkg/uuid/perl      uuid.pod

  Log:
    fix typo

  Summary:
    Revision    Changes     Path
    1.7         +1  -1      ossp-pkg/uuid/perl/uuid.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 uuid.pod
  --- ossp-pkg/uuid/perl/uuid.pod	23 Jan 2005 12:38:10 -0000	1.6
  +++ ossp-pkg/uuid/perl/uuid.pod	30 Aug 2005 20:00:32 -0000	1.7
  @@ -24,7 +24,7 @@
   ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   ##  SUCH DAMAGE.
   ##
  -##  uuid.pm: Perl Binding (Perl/POD part)
  +##  uuid.pod: Perl Binding (Perl/POD part)
   ##
   
   =pod
  @@ .

From ossp-cvs-owner@ossp.org  Tue Aug 30 22:11:47 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 8BF1F752ED0; Tue, 30 Aug 2005 22:11:47 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ README ossp-pkg/uuid/perl/ uuid.pm ossp-pkg...
Message-Id: <20050830201147.8BF1F752ED0@mail.ossp.org>
Date: Tue, 30 Aug 2005 22:11:47 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Aug-2005 22:11:47
  Branch: HEAD                             Handle: 2005083021114601

  Modified files:
    ossp-pkg/uuid           README uuid_vers.h
    ossp-pkg/uuid/perl      uuid.pm

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.26        +1  -1      ossp-pkg/uuid/README
    1.9         +1  -1      ossp-pkg/uuid/perl/uuid.pm
    1.15        +9  -9      ossp-pkg/uuid/uuid_vers.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 README
  --- ossp-pkg/uuid/README	23 Jan 2005 11:28:51 -0000	1.25
  +++ ossp-pkg/uuid/README	30 Aug 2005 20:11:46 -0000	1.26
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
   
     OSSP uuid - Universally Unique Identifier
  -  Version 1.2.0 (23-Jan-2005)
  +  Version 1.2.1 (30-Aug-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.pm
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 uuid.pm
  --- ossp-pkg/uuid/perl/uuid.pm	23 Jan 2005 12:38:10 -0000	1.8
  +++ ossp-pkg/uuid/perl/uuid.pm	30 Aug 2005 20:11:47 -0000	1.9
  @@ -41,7 +41,7 @@
   ##
   
   #   API version
  -our $VERSION = do { my @v = ('1.2.0' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
  +our $VERSION = do { my @v = ('1.2.1' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
   
   #   API inheritance
   our @ISA = qw(Exporter);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_vers.h
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 uuid_vers.h
  --- ossp-pkg/uuid/uuid_vers.h	23 Jan 2005 11:28:51 -0000	1.14
  +++ ossp-pkg/uuid/uuid_vers.h	30 Aug 2005 20:11:46 -0000	1.15
  @@ -8,7 +8,7 @@
   #ifndef _UUID_VERS_H_
   #define _UUID_VERS_H_
   
  -#define _UUID_VERSION 0x102200
  +#define _UUID_VERSION 0x102201
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _UUID_VERS_H_AS_HEADER_
   
   _uuid_version_t _uuid_version = {
  -    0x102200,
  -    "1.2.0",
  -    "1.2.0 (23-Jan-2005)",
  -    "This is OSSP uuid, Version 1.2.0 (23-Jan-2005)",
  -    "OSSP uuid 1.2.0 (23-Jan-2005)",
  -    "OSSP uuid/1.2.0",
  -    "@(#)OSSP uuid 1.2.0 (23-Jan-2005)",
  -    "$Id: OSSP uuid 1.2.0 (23-Jan-2005) $"
  +    0x102201,
  +    "1.2.1",
  +    "1.2.1 (30-Aug-2005)",
  +    "This is OSSP uuid, Version 1.2.1 (30-Aug-2005)",
  +    "OSSP uuid 1.2.1 (30-Aug-2005)",
  +    "OSSP uuid/1.2.1",
  +    "@(#)OSSP uuid 1.2.1 (30-Aug-2005)",
  +    "$Id: OSSP uuid 1.2.1 (30-Aug-2005) $"
   };
   
   #endif /* _UUID_VERS_H_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Tue Aug 30 22:15:22 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 4B7EF752ED0; Tue, 30 Aug 2005 22:15:22 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20050830201522.4B7EF752ED0@mail.ossp.org>
Date: Tue, 30 Aug 2005 22:15:22 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   30-Aug-2005 22:15:22
  Branch: HEAD                             Handle: 2005083021152101

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/uuid   index.wml

  Log:
    release OSSP uuid 1.2.1

  Summary:
    Revision    Changes     Path
    1.126       +1  -0      ossp-web/new/news.txt
    1.106       +1  -1      ossp-web/pkg/lib/index.wml
    1.22        +2  -2      ossp-web/pkg/lib/uuid/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.125 -r1.126 news.txt
  --- ossp-web/new/news.txt	18 Aug 2005 07:51:37 -0000	1.125
  +++ ossp-web/new/news.txt	30 Aug 2005 20:15:21 -0000	1.126
  @@ -1,3 +1,4 @@
  +30-Aug-2005: Released L<OSSP uuid> 1.2.1
   18-Aug-2005: Released T<OSSP svs> 1.0.3
   15-Jun-2005: Released T<OSSP shtool> 2.0.2
   02-Jun-2005: Released L<OSSP xds> 0.9.2
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.105 -r1.106 index.wml
  --- ossp-web/pkg/lib/index.wml	2 Jun 2005 18:56:05 -0000	1.105
  +++ ossp-web/pkg/lib/index.wml	30 Aug 2005 20:15:21 -0000	1.106
  @@ -33,7 +33,7 @@
   			done=100 stable=1.1.2 unstable=none>
     <pkg_item name="uuid" longname="OSSP uuid" type="lib"
               desc="Universally Unique Identifier"
  -			done=100 stable=1.2.0 unstable=none>
  +			done=100 stable=1.2.1 unstable=none>
     <pkg_item name="val" longname="OSSP val" type="lib"
               desc="Value Access"
   			done=95 stable=none unstable=0.9.3>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/uuid/index.wml
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 index.wml
  --- ossp-web/pkg/lib/uuid/index.wml	23 Jan 2005 13:24:56 -0000	1.21
  +++ ossp-web/pkg/lib/uuid/index.wml	30 Aug 2005 20:15:22 -0000	1.22
  @@ -45,7 +45,7 @@
   
   <pkg_status
       name="uuid" assign="rse"
  -    stable="1.2.0"    stable_date="23-Jan-2005"
  +    stable="1.2.1"    stable_date="30-Aug-2005"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -56,7 +56,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/uuid/
       directory=$(FTP_ROOT_DIR)/pkg/lib/uuid/
       files="uuid-[0-9.]*.tar.gz" 
  -	stable="uuid-1\.2\.0\.tar\.gz" unstable="none">
  +	stable="uuid-1\.2\.1\.tar\.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Aug 30 22:34:36 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 123C5752EC4; Tue, 30 Aug 2005 22:34:36 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog README uuid.c uuid.pod uuid_cli.p...
Message-Id: <20050830203436.123C5752EC4@mail.ossp.org>
Date: Tue, 30 Aug 2005 22:34:36 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Aug-2005 22:34:36
  Branch: HEAD                             Handle: 2005083021343500

  Modified files:
    ossp-pkg/uuid           ChangeLog README uuid.c uuid.pod uuid_cli.pod

  Log:
    Reference the new officially published RFC 4122

  Summary:
    Revision    Changes     Path
    1.78        +5  -0      ossp-pkg/uuid/ChangeLog
    1.27        +4  -4      ossp-pkg/uuid/README
    1.52        +4  -4      ossp-pkg/uuid/uuid.c
    1.26        +9  -18     ossp-pkg/uuid/uuid.pod
    1.20        +4  -4      ossp-pkg/uuid/uuid_cli.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.77 -r1.78 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	30 Aug 2005 18:36:55 -0000	1.77
  +++ ossp-pkg/uuid/ChangeLog	30 Aug 2005 20:34:35 -0000	1.78
  @@ -11,6 +11,11 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 1.2.1 and 1.2.2 (30-Aug-2005 to xx-Sep-2005)
  +
  +   o Reference the new officially published RFC 4122.
  +     [Ralf S. Engelschall]
  +
     Changes between 1.2.0 and 1.2.1 (23-Jan-2005 to 30-Aug-2005)
   
      o Add SEEALSO document which references all known
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 README
  --- ossp-pkg/uuid/README	30 Aug 2005 20:11:46 -0000	1.26
  +++ ossp-pkg/uuid/README	30 Aug 2005 20:34:35 -0000	1.27
  @@ -11,10 +11,10 @@
   
     OSSP uuid is a ISO-C and Perl application programming interface (API)
     and corresponding command line interface (CLI) for the generation of
  -  DCE 1.1 and ISO/IEC 11578:1996 compliant Universally Unique Identifier
  -  (UUID). It supports DCE 1.1 variant UUIDs of version 1 (time and node
  -  based), version 3 (name based, MD5), version 4 (random number based)
  -  and version 5 (name based, SHA-1).
  +  DCE 1.1 and ISO/IEC 11578:1996 and RFC 4122 compliant Universally
  +  Unique Identifier (UUID). It supports DCE 1.1 variant UUIDs of version
  +  1 (time and node based), version 3 (name based, MD5), version 4
  +  (random number based) and version 5 (name based, SHA-1).
   
     UUIDs are 128 bit numbers which are intended to have a high likelihood
     of uniqueness over space and time and are computationally difficult
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.51 -r1.52 uuid.c
  --- ossp-pkg/uuid/uuid.c	29 Mar 2005 19:01:41 -0000	1.51
  +++ ossp-pkg/uuid/uuid.c	30 Aug 2005 20:34:35 -0000	1.52
  @@ -834,13 +834,13 @@
   } uuid_value_table[] = {
       { "nil",     /* 00000000-0000-0000-0000-000000000000 ("Nil UUID") */
         { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 } },
  -    { "ns:DNS",  /* 6ba7b810-9dad-11d1-80b4-00c04fd430c8 (see draft-leach-uuids-guids-01.txt) */
  +    { "ns:DNS",  /* 6ba7b810-9dad-11d1-80b4-00c04fd430c8 (see RFC 4122) */
         { 0x6b,0xa7,0xb8,0x10,0x9d,0xad,0x11,0xd1,0x80,0xb4,0x00,0xc0,0x4f,0xd4,0x30,0xc8 } },
  -    { "ns:URL",  /* 6ba7b811-9dad-11d1-80b4-00c04fd430c8 (see draft-leach-uuids-guids-01.txt) */
  +    { "ns:URL",  /* 6ba7b811-9dad-11d1-80b4-00c04fd430c8 (see RFC 4122) */
         { 0x6b,0xa7,0xb8,0x11,0x9d,0xad,0x11,0xd1,0x80,0xb4,0x00,0xc0,0x4f,0xd4,0x30,0xc8 } },
  -    { "ns:OID",  /* 6ba7b812-9dad-11d1-80b4-00c04fd430c8 (see draft-leach-uuids-guids-01.txt) */
  +    { "ns:OID",  /* 6ba7b812-9dad-11d1-80b4-00c04fd430c8 (see RFC 4122) */
         { 0x6b,0xa7,0xb8,0x12,0x9d,0xad,0x11,0xd1,0x80,0xb4,0x00,0xc0,0x4f,0xd4,0x30,0xc8 } },
  -    { "ns:X500", /* 6ba7b814-9dad-11d1-80b4-00c04fd430c8 (see draft-leach-uuids-guids-01.txt) */
  +    { "ns:X500", /* 6ba7b814-9dad-11d1-80b4-00c04fd430c8 (see RFC 4122) */
         { 0x6b,0xa7,0xb8,0x14,0x9d,0xad,0x11,0xd1,0x80,0xb4,0x00,0xc0,0x4f,0xd4,0x30,0xc8 } }
   };
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	23 Jan 2005 11:28:51 -0000	1.25
  +++ ossp-pkg/uuid/uuid.pod	30 Aug 2005 20:34:35 -0000	1.26
  @@ -40,11 +40,11 @@
   =head1 DESCRIPTION
   
   B<OSSP uuid> is a ISO-C and Perl application programming interface (API)
  -and corresponding command line interface (CLI) for the generation of DCE
  -1.1 and ISO/IEC 11578:1996 compliant I<Universally Unique Identifier>
  -(UUID). It supports DCE 1.1 variant UUIDs of version 1 (time and node
  -based), version 3 (name based, MD5), version 4 (random number based) and
  -version 5 (name based, SHA-1).
  +and corresponding command line interface (CLI) for the generation of
  +DCE 1.1, ISO/IEC 11578:1996 and RFC 4122 compliant I<Universally Unique
  +Identifier> (UUID). It supports DCE 1.1 variant UUIDs of version 1 (time
  +and node based), version 3 (name based, MD5), version 4 (random number
  +based) and version 5 (name based, SHA-1).
   
   UUIDs are 128 bit numbers which are intended to have a high likelihood
   of uniqueness over space and time and are computationally difficult
  @@ -391,11 +391,10 @@
   
   =item
   
  -B<UUIDs and GUIDs>,
  -IETF Internet Draft (expired),
  -Paul J. Leach, Rich Salz,
  -February 1998, 27 pages,
  -http://www.opengroup.org/dce/info/draft-leach-uuids-guids-01.txt
  +B<A Universally Unique IDentifier (UUID) URN Namespace>,
  +P. Leach, M. Mealling, R. Salz,
  +IETF Request for Comments: RFC 4122,
  +July 2005, 32 pages,
   
   =item
   
  @@ -434,14 +433,6 @@
   
   =item
   
  -B<A UUID URN Namespace>,
  -P. Leach, M. Mealling, R. Salz,
  -IETF Internet Draft draft-mealling-uuid-urn-05,
  -December 2004, 31 pages,
  -http://www.ietf.org/internet-drafts/draft-mealling-uuid-urn-05.txt
  -
  -=item
  -
   B<DCE 1.1 compliant UUID functions>,
   FreeBSD manual pages uuid(3) and uuidgen(2),
   http://www.freebsd.org/cgi/man.cgi?query=uuid&manpath=FreeBSD+6.0-current
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.pod
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 uuid_cli.pod
  --- ossp-pkg/uuid/uuid_cli.pod	23 Jan 2005 11:28:51 -0000	1.19
  +++ ossp-pkg/uuid/uuid_cli.pod	30 Aug 2005 20:34:35 -0000	1.20
  @@ -58,10 +58,10 @@
   
   B<OSSP uuid> is a ISO-C and Perl application programming interface (API)
   and corresponding command line interface (CLI) for the generation of DCE
  -1.1 and ISO/IEC 11578:1996 compliant I<Universally Unique Identifier>
  -(UUID). It supports DCE 1.1 variant UUIDs of version 1 (time and node
  -based), version 3 (name based, MD5), version 4 (random number based) and
  -version 5 (name based, SHA-1).
  +1.1 and ISO/IEC 11578:1996 and RFC 4122 compliant I<Universally Unique
  +Identifier> (UUID). It supports DCE 1.1 variant UUIDs of version 1 (time
  +and node based), version 3 (name based, MD5), version 4 (random number
  +based) and version 5 (name based, SHA-1).
   
   UUIDs are 128 bit numbers which are intended to have a high likelihood
   of uniqueness over space and time and are computationally difficult
  @@ .

From ossp-cvs-owner@ossp.org  Tue Aug 30 22:37:38 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id A354E752EC4; Tue, 30 Aug 2005 22:37:38 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/uuid/ index.wml
Message-Id: <20050830203738.A354E752EC4@mail.ossp.org>
Date: Tue, 30 Aug 2005 22:37:38 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   30-Aug-2005 22:37:38
  Branch: HEAD                             Handle: 2005083021373800

  Modified files:
    ossp-web/pkg/lib/uuid   index.wml

  Log:
    remember RFC 4122

  Summary:
    Revision    Changes     Path
    1.23        +1  -1      ossp-web/pkg/lib/uuid/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/uuid/index.wml
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 index.wml
  --- ossp-web/pkg/lib/uuid/index.wml	30 Aug 2005 20:15:22 -0000	1.22
  +++ ossp-web/pkg/lib/uuid/index.wml	30 Aug 2005 20:37:38 -0000	1.23
  @@ -16,7 +16,7 @@
   
   OSSP uuid is a ISO-C and Perl application programming interface (API)
   and corresponding command line interface (CLI) for the generation of
  -DCE 1.1 and ISO/IEC 11578:1996 compliant Universally Unique Identifiers
  +DCE 1.1, ISO/IEC 11578:1996 and RFC 4122 compliant Universally Unique Identifiers
   (UUID). It supports DCE 1.1 variant UUIDs of version 1 (time and node
   based), version 3 (name based, MD5), version 4 (random number based) and
   version 5 (name based, SHA-1).
  @@ .

From ossp-cvs-owner@ossp.org  Tue Aug 30 22:38:11 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 0E1CE752F16; Tue, 30 Aug 2005 22:38:11 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ README uuid_cli.pod
Message-Id: <20050830203811.0E1CE752F16@mail.ossp.org>
Date: Tue, 30 Aug 2005 22:38:11 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Aug-2005 22:38:11
  Branch: HEAD                             Handle: 2005083021381000

  Modified files:
    ossp-pkg/uuid           README uuid_cli.pod

  Log:
    fix wording

  Summary:
    Revision    Changes     Path
    1.28        +4  -4      ossp-pkg/uuid/README
    1.21        +1  -1      ossp-pkg/uuid/uuid_cli.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 README
  --- ossp-pkg/uuid/README	30 Aug 2005 20:34:35 -0000	1.27
  +++ ossp-pkg/uuid/README	30 Aug 2005 20:38:10 -0000	1.28
  @@ -11,10 +11,10 @@
   
     OSSP uuid is a ISO-C and Perl application programming interface (API)
     and corresponding command line interface (CLI) for the generation of
  -  DCE 1.1 and ISO/IEC 11578:1996 and RFC 4122 compliant Universally
  -  Unique Identifier (UUID). It supports DCE 1.1 variant UUIDs of version
  -  1 (time and node based), version 3 (name based, MD5), version 4
  -  (random number based) and version 5 (name based, SHA-1).
  +  DCE 1.1, ISO/IEC 11578:1996 and RFC 4122 compliant Universally Unique
  +  Identifier (UUID). It supports DCE 1.1 variant UUIDs of version 1
  +  (time and node based), version 3 (name based, MD5), version 4 (random
  +  number based) and version 5 (name based, SHA-1).
   
     UUIDs are 128 bit numbers which are intended to have a high likelihood
     of uniqueness over space and time and are computationally difficult
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.pod
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 uuid_cli.pod
  --- ossp-pkg/uuid/uuid_cli.pod	30 Aug 2005 20:34:35 -0000	1.20
  +++ ossp-pkg/uuid/uuid_cli.pod	30 Aug 2005 20:38:10 -0000	1.21
  @@ -58,7 +58,7 @@
   
   B<OSSP uuid> is a ISO-C and Perl application programming interface (API)
   and corresponding command line interface (CLI) for the generation of DCE
  -1.1 and ISO/IEC 11578:1996 and RFC 4122 compliant I<Universally Unique
  +1.1, ISO/IEC 11578:1996 and RFC 4122 compliant I<Universally Unique
   Identifier> (UUID). It supports DCE 1.1 variant UUIDs of version 1 (time
   and node based), version 3 (name based, MD5), version 4 (random number
   based) and version 5 (name based, SHA-1).
  @@ .

From ossp-cvs-owner@ossp.org  Wed Aug 31 09:24:57 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id D245E752ED0; Wed, 31 Aug 2005 09:24:56 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog sh.version
Message-Id: <20050831072456.D245E752ED0@mail.ossp.org>
Date: Wed, 31 Aug 2005 09:24:56 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Aug-2005 09:24:56
  Branch: HEAD                             Handle: 2005083108245600

  Modified files:
    ossp-pkg/shtool         ChangeLog sh.version

  Log:
    Fixed "shtool version -l perl" by replacing "my" with "our"
    to allow the generated file to be really useful when loaded
    with the Perl "require" directive.

  Summary:
    Revision    Changes     Path
    1.215       +5  -0      ossp-pkg/shtool/ChangeLog
    1.39        +1  -1      ossp-pkg/shtool/sh.version
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.214 -r1.215 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	5 Jul 2005 19:05:40 -0000	1.214
  +++ ossp-pkg/shtool/ChangeLog	31 Aug 2005 07:24:56 -0000	1.215
  @@ -11,6 +11,11 @@
   
    Changes between 2.0.2 and 2.0.3 (15-Jun-2005 to xx-XXX-2005):
   
  +   *) Fixed "shtool version -l perl" by replacing "my" with "our"
  +      to allow the generated file to be really useful when loaded
  +      with the Perl "require" directive.
  +      [Ralf S. Engelschall]
  +
      *) Improved FreeBSD/amd64 on iX86/EM64T detection within "shtool
         platform" by treating this as a native AMD64 platform similar to
         what the underlying OS does.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.version
  ============================================================================
  $ cvs diff -u -r1.38 -r1.39 sh.version
  --- ossp-pkg/shtool/sh.version	15 Jun 2005 08:14:36 -0000	1.38
  +++ ossp-pkg/shtool/sh.version	31 Aug 2005 07:24:56 -0000	1.39
  @@ -282,7 +282,7 @@
               echo >>$file "##  [automatically generated and maintained by GNU shtool]"
               echo >>$file "##"
               echo >>$file ""
  -            echo >>$file "my \$${prefix}version = {"
  +            echo >>$file "our \$${prefix}version = {"
               echo >>$file "    'v_hex'   => ${vHex},"
               echo >>$file "    'v_short' => \"${vShort}\","
               echo >>$file "    'v_long'  => \"${vLong}\","
  @@ .

From ossp-cvs-owner@ossp.org  Wed Aug 31 09:26:29 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B29B9752ED0; Wed, 31 Aug 2005 09:26:29 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ devtool.conf
Message-Id: <20050831072629.B29B9752ED0@mail.ossp.org>
Date: Wed, 31 Aug 2005 09:26:29 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Aug-2005 09:26:29
  Branch: HEAD                             Handle: 2005083108262900

  Modified files:
    ossp-pkg/uuid           devtool.conf

  Log:
    fix %upload command

  Summary:
    Revision    Changes     Path
    1.15        +1  -1      ossp-pkg/uuid/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 devtool.conf
  --- ossp-pkg/uuid/devtool.conf	29 Aug 2005 20:25:44 -0000	1.14
  +++ ossp-pkg/uuid/devtool.conf	31 Aug 2005 07:26:29 -0000	1.15
  @@ -87,5 +87,5 @@
   %upload
       echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/uuid/"
       V=`./shtool version -l c -d short uuid_vers.h`
  -    scp uuid-${V}.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/uuid/
  +    scp uuid-${V}.tar.gz ossp@master.ossp.org:/v/ossp/ftp/pkg/lib/uuid/
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Aug 31 09:28:01 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 06725752ED0; Wed, 31 Aug 2005 09:28:01 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.pod
Message-Id: <20050831072801.06725752ED0@mail.ossp.org>
Date: Wed, 31 Aug 2005 09:28:01 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Aug-2005 09:28:01
  Branch: HEAD                             Handle: 2005083108280000

  Modified files:
    ossp-pkg/uuid           uuid.pod

  Log:
    more references to RFC 4122

  Summary:
    Revision    Changes     Path
    1.27        +9  -9      ossp-pkg/uuid/uuid.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	30 Aug 2005 20:34:35 -0000	1.26
  +++ ossp-pkg/uuid/uuid.pod	31 Aug 2005 07:28:00 -0000	1.27
  @@ -58,9 +58,9 @@
   
   =head2 UUID Binary Representation
   
  -According to the DCE 1.1 and ISO/IEC 11578:1996 standards, a DCE 1.1
  -variant UUID is a 128 bit number defined out of 7 fields, each field a
  -multiple of an octet in size and stored in network byte order:
  +According to the DCE 1.1, ISO/IEC 11578:1996 and RFC 4122 standards, a
  +DCE 1.1 variant UUID is a 128 bit number defined out of 7 fields, each
  +field a multiple of an octet in size and stored in network byte order:
   
     0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  @@ -82,12 +82,12 @@
   
   =head2 UUID ASCII String Representation
   
  -According to the DCE 1.1 and ISO/IEC 11578:1996 standards, a DCE
  -1.1 variant UUID is represented as an ASCII string consisting
  -of 8 hexadecimal digits followed by a hyphen, then three groups
  -of 4 hexadecimal digits each followed by a hyphen, then 12
  -hexadecimal digits. Formally, the string representation is defined by
  -the following grammar:
  +According to the DCE 1.1, ISO/IEC 11578:1996 and RFC 4122 standards,
  +a DCE 1.1 variant UUID is represented as an ASCII string consisting
  +of 8 hexadecimal digits followed by a hyphen, then three groups of
  +4 hexadecimal digits each followed by a hyphen, then 12 hexadecimal
  +digits. Formally, the string representation is defined by the following
  +grammar:
   
    uuid                   = <time_low> "-" <time_mid> "-"
                             <time_high_and_version> "-"
  @@ .

From ossp-cvs-owner@ossp.org  Wed Aug 31 10:55:18 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B58BD752ED0; Wed, 31 Aug 2005 10:55:18 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog ossp-pkg/uuid/perl/ uuid.pm uuid....
Message-Id: <20050831085518.B58BD752ED0@mail.ossp.org>
Date: Wed, 31 Aug 2005 10:55:18 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Aug-2005 10:55:18
  Branch: HEAD                             Handle: 2005083109551800

  Modified files:
    ossp-pkg/uuid           ChangeLog
    ossp-pkg/uuid/perl      uuid.pm uuid.pod uuid.ts

  Log:
    Add a functionality-reduced TIE-style Perl API OSSP::uuid::tie,
    intended for very high-level convenience programming.

  Summary:
    Revision    Changes     Path
    1.79        +5  -1      ossp-pkg/uuid/ChangeLog
    1.10        +81 -9      ossp-pkg/uuid/perl/uuid.pm
    1.8         +30 -2      ossp-pkg/uuid/perl/uuid.pod
    1.3         +25 -2      ossp-pkg/uuid/perl/uuid.ts
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.78 -r1.79 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	30 Aug 2005 20:34:35 -0000	1.78
  +++ ossp-pkg/uuid/ChangeLog	31 Aug 2005 08:55:18 -0000	1.79
  @@ -11,7 +11,11 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 1.2.1 and 1.2.2 (30-Aug-2005 to xx-Sep-2005)
  +  Changes between 1.2.1 and 1.3.0 (30-Aug-2005 to xx-Sep-2005)
  +
  +   o Add a functionality-reduced TIE-style Perl API OSSP::uuid::tie,
  +     intended for very high-level convenience programming.
  +     [Ralf S. Engelschall]
   
      o Reference the new officially published RFC 4122.
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.pm
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 uuid.pm
  --- ossp-pkg/uuid/perl/uuid.pm	30 Aug 2005 20:11:47 -0000	1.9
  +++ ossp-pkg/uuid/perl/uuid.pm	31 Aug 2005 08:55:18 -0000	1.10
  @@ -27,19 +27,96 @@
   ##  uuid.pm: Perl Binding (Perl part)
   ##
   
  -package OSSP::uuid;
  +##
  +##  High-Level Perl Module TIE-style API
  +##  (just a functionality-reduced TIE wrapper around the OO-style API)
  +##
  +
  +package OSSP::uuid::tie;
   
   use 5.008;
   use strict;
   use warnings;
   use Carp;
  -use XSLoader;
  -use Exporter;
  +
  +#   inhert from Tie::Scalar
  +require Tie::Scalar;
  +our @ISA = qw(Tie::Scalar);
  +
  +#   helper function
  +sub mode_sanity {
  +    my ($mode) = @_;
  +    if (not (    defined($mode)
  +             and ref($mode) eq 'ARRAY'
  +             and (   (@{$mode} == 1 and $mode->[0] =~ m|^v[14]$|)
  +                  or (@{$mode} == 3 and $mode->[0] =~ m|^v[35]$|)))) {
  +        return (undef, "invalid UUID generation mode specification");
  +    }
  +    if ($mode->[0] =~ m|^v[35]$|) {
  +        my $uuid_ns = new OSSP::uuid;
  +        $uuid_ns->load($mode->[1])
  +            or return (undef, "failed to load UUID $mode->[0] namespace");
  +        $mode->[1] = $uuid_ns;
  +    }
  +    return ($mode, undef);
  +}
  +
  +#   constructor
  +sub TIESCALAR {
  +    my ($class, @args) = @_;
  +    my $self = {};
  +    bless ($self, $class);
  +    $self->{-uuid} = new OSSP::uuid
  +       or croak "failed to create OSSP::uuid object";
  +    my ($mode, $error) = mode_sanity(defined($args[0]) ? [ @args ] : [ "v1" ]);
  +    croak $error if defined($error);
  +    $self->{-mode} = $mode;
  +    return $self;
  +}
  +
  +#   destructor
  +sub DESTROY {
  +    my ($self) = @_;
  +    delete $self->{-uuid};
  +    delete $self->{-mode};
  +    return;
  +}
  +
  +#   fetch value from scalar
  +#   (applied semantic: export UUID in string format)
  +sub FETCH {
  +    my ($self) = @_;
  +    $self->{-uuid}->make(@{$self->{-mode}})
  +       or croak "failed to generate new UUID";
  +    my $value = $self->{-uuid}->export("str")
  +       or croak "failed to export new UUID";
  +    return $value;
  +}
  +
  +#   store value into scalar
  +#   (applied semantic: configure new UUID generation mode)
  +sub STORE {
  +    my ($self, $value) = @_;
  +    my ($mode, $error) = mode_sanity($value);
  +    croak $error if defined($error);
  +    $self->{-mode} = $mode;
  +    return;
  +}
   
   ##
  -##  API Definition
  +##  High-Level Perl Module OO-style API
  +##  (just an OO wrapper around the C-style API)
   ##
   
  +package OSSP::uuid;
  +
  +use 5.008;
  +use strict;
  +use warnings;
  +use Carp;
  +use XSLoader;
  +use Exporter;
  +
   #   API version
   our $VERSION = do { my @v = ('1.2.1' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
   
  @@ -90,11 +167,6 @@
   our @EXPORT_OK = @{$EXPORT_TAGS{'all'}};
   our @EXPORT    = ();
   
  -##
  -##  High-Level Perl Module OO-style API
  -##  (just an OO wrapper around the C-style API)
  -##
  -
   #   constructor
   sub new {
       my $proto = shift;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 uuid.pod
  --- ossp-pkg/uuid/perl/uuid.pod	30 Aug 2005 20:00:32 -0000	1.7
  +++ ossp-pkg/uuid/perl/uuid.pod	31 Aug 2005 08:55:18 -0000	1.8
  @@ -44,12 +44,31 @@
   and node based), version 3 (name based, MD5), version 4 (random number
   based) and version 5 (name based, SHA-1).
   
  -B<OSSP::uuid> provides two Perl APIs:
  +B<OSSP::uuid> provides three Perl APIs:
  +
  +=head2 TIE-STYLE API
  +
  +The TIE-style API is a functionality-reduced wrapper around the OO-style
  +API and intended for very high-level convenience programming:
  +
  +=over 4
  +
  +=item C<use OSSP::uuid;>
  +
  +=item B<tie>C< my $uuid, 'OSSP::uuid::tie', $mode, ...;>
  +
  +=item C<$uuid = [ $mode, ... ];>
  +
  +=item C<print "UUID=$uuid\n";>
  +
  +=item C<untie $uuid;>
  +
  +=back
   
   =head2 OO-STYLE API
   
   The OO-style API is a wrapper around the C-style API and intended for
  -high-level and regular programming.
  +high-level regular programming.
   
   =over 4
   
  @@ -141,6 +160,15 @@
   C-style API. Error handling is omitted here for easier reading, but has
   to be added for production-quality code.
   
  +  #   TIE-style API (very high-level)
  +  use OSSP::uuid;
  +  tie my $uuid, 'OSSP::uuid::tie';
  +  $uuid = [ "v1" ];
  +  print "UUIDs: $uuid, $uuid, $uuid\n";
  +  $uuid = [ "v3", "ns:URL", "http://www.ossp.org/" ];
  +  print "UUIDs: $uuid, $uuid, $uuid\n";
  +  untie $uuid;
  +
     #   OO-style API (high-level)
     use OSSP::uuid;
     my $uuid    = new OSSP::uuid;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.ts
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid.ts
  --- ossp-pkg/uuid/perl/uuid.ts	31 Dec 2004 19:20:39 -0000	1.2
  +++ ossp-pkg/uuid/perl/uuid.ts	31 Aug 2005 08:55:18 -0000	1.3
  @@ -27,14 +27,14 @@
   ##  uuid.ts: Perl Binding (Perl test suite part)
   ##
   
  -use Test::More tests => 31;
  +use Test::More tests => 35;
   
   ##
   ##  Module Loading
   ##
   
   BEGIN {
  -    use_ok('OSSP::uuid')
  +    use_ok('OSSP::uuid');
   };
   BEGIN {
       use OSSP::uuid qw(:all);
  @@ -142,3 +142,26 @@
   undef $uuid;
   undef $uuid_ns;
   
  +##
  +##  TIE API
  +##
  +
  +$uuid = new OSSP::uuid;
  +
  +tie my $var, 'OSSP::uuid::tie';
  +
  +my $val_get1 = $var;
  +my $val_get2 = $var;
  +ok($val_get1 ne $val_get2, "subsequent generation");
  +
  +$uuid->import("str", $val_get1);
  +my $val_cmp1 = $uuid->export("str");
  +$uuid->import("str", $val_get2);
  +my $val_cmp2 = $uuid->export("str");
  +ok($val_get1 eq $val_cmp1, "validity comparison 1");
  +ok($val_get2 eq $val_cmp2, "validity comparison 2");
  +
  +$var = [ "v3", "ns:URL", "http://www.ossp.org/" ];
  +$val_get1 = $var;
  +ok($val_get1 eq "02d9e6d5-9467-382e-8f9b-9300a64ac3cd", "generation of UUID v3");
  +
  @@ .

From ossp-cvs-owner@ossp.org  Wed Aug 31 11:59:45 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id CD07F752ED0; Wed, 31 Aug 2005 11:59:45 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog Makefile.in README devtool.conf o...
Message-Id: <20050831095945.CD07F752ED0@mail.ossp.org>
Date: Wed, 31 Aug 2005 11:59:45 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Aug-2005 11:59:45
  Branch: HEAD                             Handle: 2005083110594500

  Added files:
    ossp-pkg/uuid/perl      uuid_compat.pm uuid_compat.pod uuid_compat.ts
  Modified files:
    ossp-pkg/uuid           ChangeLog Makefile.in README devtool.conf uuid.ac
                            uuid_vers.h
    ossp-pkg/uuid/perl      MANIFEST Makefile.PL uuid.pm

  Log:
    Added optional Data::UUID backward compatibility Perl API which can
    be enabled with the build-time option --with-perl-compat.
    
    Submitted by: Piotr Roszatycki <dexter@debian.org>

  Summary:
    Revision    Changes     Path
    1.80        +5  -1      ossp-pkg/uuid/ChangeLog
    1.28        +4  -3      ossp-pkg/uuid/Makefile.in
    1.29        +1  -1      ossp-pkg/uuid/README
    1.16        +3  -0      ossp-pkg/uuid/devtool.conf
    1.3         +3  -0      ossp-pkg/uuid/perl/MANIFEST
    1.6         +9  -3      ossp-pkg/uuid/perl/Makefile.PL
    1.11        +1  -1      ossp-pkg/uuid/perl/uuid.pm
    1.1         +196 -0     ossp-pkg/uuid/perl/uuid_compat.pm
    1.1         +53 -0      ossp-pkg/uuid/perl/uuid_compat.pod
    1.1         +55 -0      ossp-pkg/uuid/perl/uuid_compat.ts
    1.15        +12 -1      ossp-pkg/uuid/uuid.ac
    1.16        +9  -9      ossp-pkg/uuid/uuid_vers.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.79 -r1.80 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	31 Aug 2005 08:55:18 -0000	1.79
  +++ ossp-pkg/uuid/ChangeLog	31 Aug 2005 09:59:45 -0000	1.80
  @@ -11,7 +11,11 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 1.2.1 and 1.3.0 (30-Aug-2005 to xx-Sep-2005)
  +  Changes between 1.2.1 and 1.3.0 (30-Aug-2005 to xx-XXX-2005)
  +
  +   o Added optional Data::UUID backward compatibility Perl API which can
  +     be enabled with the build-time option --with-perl-compat.
  +     [Piotr Roszatycki <dexter@debian.org>, Ralf S. Engelschall]
   
      o Add a functionality-reduced TIE-style Perl API OSSP::uuid::tie,
        intended for very high-level convenience programming.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	6 Mar 2005 11:29:25 -0000	1.27
  +++ ossp-pkg/uuid/Makefile.in	31 Aug 2005 09:59:45 -0000	1.28
  @@ -71,8 +71,9 @@
   
   TARGETS     = $(LIB_NAME) @DCE_NAME@ $(PRG_NAME) @PERL_NAME@
   
  -WITH_DCE    = @WITH_DCE@
  -WITH_PERL   = @WITH_PERL@
  +WITH_DCE         = @WITH_DCE@
  +WITH_PERL        = @WITH_PERL@
  +WITH_PERL_COMPAT = @WITH_PERL_COMPAT@
   
   .SUFFIXES:
   .SUFFIXES: .c .o .lo
  @@ -97,7 +98,7 @@
   	@$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $(PRG_NAME) $(PRG_OBJS) $(LIB_NAME) $(LIBS)
   
   $(PERL_NAME): $(PERL_OBJS) $(LIB_NAME)
  -	@cd perl && $(PERL) Makefile.PL PREFIX=$(prefix) && $(MAKE) $(MFLAGS) all
  +	@cd perl && $(PERL) Makefile.PL PREFIX=$(prefix) COMPAT=$(WITH_PERL_COMPAT) && $(MAKE) $(MFLAGS) all
   	@touch $(PERL_NAME)
   
   uuid.lo: uuid.c config.h uuid.h uuid_md5.h uuid_sha1.h uuid_prng.h uuid_mac.h uuid_ui64.h uuid_str.h uuid_bm.h uuid_ac.h
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 README
  --- ossp-pkg/uuid/README	30 Aug 2005 20:38:10 -0000	1.28
  +++ ossp-pkg/uuid/README	31 Aug 2005 09:59:45 -0000	1.29
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
   
     OSSP uuid - Universally Unique Identifier
  -  Version 1.2.1 (30-Aug-2005)
  +  Version 1.3.0 (31-Aug-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 devtool.conf
  --- ossp-pkg/uuid/devtool.conf	31 Aug 2005 07:26:29 -0000	1.15
  +++ ossp-pkg/uuid/devtool.conf	31 Aug 2005 09:59:45 -0000	1.16
  @@ -18,6 +18,7 @@
           --disable-shared \
           --enable-debug \
           --with-perl \
  +        --with-perl-compat \
           "$@"
   
   %version
  @@ -28,6 +29,8 @@
       V=`./shtool version -l c -d short uuid_vers.h`
       sed -e "s/\(v = ('\)[^']*\('\)/\1$V\2/g" <perl/uuid.pm >perl/uuid.pm.n
       mv perl/uuid.pm.n perl/uuid.pm
  +    sed -e "s/\(v = ('\)[^']*\('\)/\1$V\2/g" <perl/uuid_compat.pm >perl/uuid_compat.pm.n
  +    mv perl/uuid_compat.pm.n perl/uuid_compat.pm
   
   %dist
       echo "+++ removing old tarballs"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/MANIFEST
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 MANIFEST
  --- ossp-pkg/uuid/perl/MANIFEST	3 Nov 2004 18:01:50 -0000	1.2
  +++ ossp-pkg/uuid/perl/MANIFEST	31 Aug 2005 09:59:45 -0000	1.3
  @@ -5,3 +5,6 @@
   uuid.pm
   uuid.pod
   uuid.ts
  +uuid_compat.pm
  +uuid_compat.pod
  +uuid_compat.ts
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/Makefile.PL
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 Makefile.PL
  --- ossp-pkg/uuid/perl/Makefile.PL	31 Dec 2004 19:20:39 -0000	1.5
  +++ ossp-pkg/uuid/perl/Makefile.PL	31 Aug 2005 09:59:45 -0000	1.6
  @@ -31,6 +31,9 @@
   use Config;
   use ExtUtils::MakeMaker;
   
  +my $compat = 0;
  +@ARGV = grep { $_ =~ m/^COMPAT=(\d+)$/i ? ($compat = $1, 0) : 1 } @ARGV;
  +
   WriteMakefile(
       NAME              => 'OSSP::uuid',
       VERSION_FROM      => 'uuid.pm',
  @@ -39,10 +42,13 @@
       LIBS              => [ '-L../.libs -luuid' ],
       DEFINE            => '',
       INC               => '-I. -I..',
  -    PM                => { 'uuid.pm'  => '$(INST_LIBDIR)/uuid.pm',
  -                           'uuid.pod' => '$(INST_LIBDIR)/uuid.pod' },
  +    PM                => { 'uuid.pm'   => '$(INST_LIBDIR)/uuid.pm',
  +                           'uuid.pod'  => '$(INST_LIBDIR)/uuid.pod',
  +                           ($compat ? ('uuid_compat.pm'  => '$(INST_LIBDIR)/../Data/UUID.pm')  : ()),
  +                           ($compat ? ('uuid_compat.pod' => '$(INST_LIBDIR)/../Data/UUID.pod') : ()),
  +                         },
       TYPEMAPS          => [ 'uuid.tm' ],
  -    test              => { TESTS => 'uuid.ts' },
  +    test              => { TESTS => 'uuid.ts' . ($compat ? ' uuid_compat.ts' : '') },
       NO_META           => 1,
       #    cruel hack to workaround the conflict between OSSP uuid's
       #    uuid_create() function and one from FreeBSD's libc
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.pm
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 uuid.pm
  --- ossp-pkg/uuid/perl/uuid.pm	31 Aug 2005 08:55:18 -0000	1.10
  +++ ossp-pkg/uuid/perl/uuid.pm	31 Aug 2005 09:59:45 -0000	1.11
  @@ -118,7 +118,7 @@
   use Exporter;
   
   #   API version
  -our $VERSION = do { my @v = ('1.2.1' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
  +our $VERSION = do { my @v = ('1.3.0' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
   
   #   API inheritance
   our @ISA = qw(Exporter);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid_compat.pm
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid_compat.pm
  --- /dev/null	2005-08-31 11:59:32 +0200
  +++ uuid_compat.pm	2005-08-31 11:59:45 +0200
  @@ -0,0 +1,196 @@
  +##
  +##  OSSP uuid - Universally Unique Identifier
  +##  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004 Piotr Roszatycki <dexter@debian.org>
  +##
  +##  This file is part of OSSP uuid, a library for the generation
  +##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  uuid_compat.pm: Data::UUID Backward Compatibility Perl API
  +##
  +
  +package Data::UUID;
  +
  +use 5.006;
  +use warnings;
  +use strict;
  +
  +use OSSP::uuid;
  +use MIME::Base64;
  +
  +require Exporter;
  +
  +our @ISA     = qw(Exporter);
  +our @EXPORT  = qw(NameSpace_DNS NameSpace_OID NameSpace_URL NameSpace_X500);
  +
  +our $VERSION = do { my @v = ('1.3.0' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
  +
  +sub new {
  +    my $class = shift;
  +    my $self = bless {}, $class;
  +    return $self;
  +}
  +
  +sub create {
  +    my ($self) = @_;
  +    my $uuid = new OSSP::uuid;
  +    $uuid->make("v4");
  +    return $uuid->export("bin");
  +}
  +
  +sub create_from_name {
  +    my ($self, $nsid, $name) = @_;
  +    my $uuid = new OSSP::uuid;
  +    my $nsiduuid = new OSSP::uuid;
  +    $nsiduuid->import("bin", $nsiduuid);
  +    $uuid = new OSSP::uuid;
  +    $uuid->make("v3", $nsiduuid, $name);
  +    return $uuid->export("bin");
  +}
  +
  +sub to_string {
  +    my ($self, $bin) = @_;
  +    my $uuid = new OSSP::uuid;
  +    $uuid->import("bin", $bin);
  +    return $uuid->export("str");
  +}
  +
  +sub to_hexstring {
  +    my ($self, $bin) = @_;
  +    my $uuid = new OSSP::uuid;
  +    $uuid->import("bin", $bin);
  +    $_ = $uuid->export("str");
  +    s/-//g;
  +    s/^/0x/;
  +    return $_;
  +}
  +
  +sub to_b64string {
  +    my ($self, $bin) = @_;
  +    return MIME::Base64::encode_base64($bin);
  +}
  +
  +sub from_string {
  +    my ($self, $str) = @_;
  +    my $uuid = new OSSP::uuid;
  +    if ($str =~ /^0x(........)(....)(....)(....)(............)$/) {
  +        $str = "$1-$2-$3-$4-$5";
  +    }
  +    $uuid->import("str", $str);
  +    return $uuid->export("bin");
  +}
  +
  +sub from_hexstring {
  +    my ($self, $str) = @_;
  +    my $uuid = new OSSP::uuid;
  +    if ($str =~ /^0x(........)(....)(....)(....)(............)$/) {
  +        $str = "$1-$2-$3-$4-$5";
  +    }
  +    $uuid->import("str", $str);
  +    return $uuid->export("bin");
  +}
  +
  +sub from_b64string {
  +    my ($self, $b64) = @_;
  +    return MIME::Base64::decode_base64($b64);
  +}
  +
  +sub compare {
  +    my ($self, $bin1, $bin2) = @_;
  +    my $uuid1 = new OSSP::uuid;
  +    my $uuid2 = new OSSP::uuid;
  +    $uuid1->import("bin", $bin1);
  +    $uuid2->import("bin", $bin2);
  +    return $uuid1->compare($uuid2);
  +}
  +
  +sub constant {
  +    my ($self, $arg) = @_;
  +    my $ns;
  +    if    ($arg eq "NameSpace_DNS")  { $ns = "ns:DNS";  }
  +    elsif ($arg eq "NameSpace_URL")  { $ns = "ns:URL";  }
  +    elsif ($arg eq "NameSpace_X500") { $ns = "ns:X500"; }
  +    elsif ($arg eq "NameSpace_OID")  { $ns = "ns:OID";  }
  +    else                             { $ns = "nil";     }
  +    my $uuid = new OSSP::uuid;
  +    $uuid->load($ns);
  +    return $uuid->export("bin");
  +}
  +
  +sub NameSpace_DNS {
  +    my $self = new Data::UUID;
  +    return $self->constant("NameSpace_DNS");
  +}
  +
  +sub NameSpace_URL {
  +    my $self = new Data::UUID;
  +    return $self->constant("NameSpace_URL");
  +}
  +
  +sub NameSpace_X500 {
  +    my $self = new Data::UUID;
  +    return $self->constant("NameSpace_X500");
  +}
  +
  +sub NameSpace_OID {
  +    my $self = new Data::UUID;
  +    return $self->constant("NameSpace_OID");
  +}
  +
  +sub create_str {
  +    my ($self) = @_;
  +    my $uuid = $self->create();
  +    return $self->to_string($uuid);
  +}
  +
  +sub create_hex {
  +    my ($self) = @_;
  +    my $uuid = $self->create();
  +    return $self->to_hexstring($uuid);
  +}
  +
  +sub create_b64 {
  +    my ($self) = @_;
  +    my $uuid = $self->create();
  +    return $self->to_b64string($uuid);
  +}
  +
  +sub create_from_name_str {
  +    my ($self, $nsid, $name) = @_;
  +    my $uuid = $self->create_from_name($nsid, $name);
  +    return $self->to_string($uuid);
  +}
  +
  +sub create_from_name_hex {
  +    my ($self, $nsid, $name) = @_;
  +    my $uuid = $self->create_from_name($nsid, $name);
  +    return $self->to_hexstring($uuid);
  +}
  +
  +sub create_from_name_b64 {
  +    my ($self, $nsid, $name) = @_;
  +    my $uuid = $self->create_from_name($nsid, $name);
  +    return $self->to_b64string($uuid);
  +}
  +
  +1;
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid_compat.pod
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid_compat.pod
  --- /dev/null	2005-08-31 11:59:32 +0200
  +++ uuid_compat.pod	2005-08-31 11:59:45 +0200
  @@ -0,0 +1,53 @@
  +##
  +##  OSSP uuid - Universally Unique Identifier
  +##  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP uuid, a library for the generation
  +##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  uuid_compat.pod: Data::UUID Backward Compatibility Perl API (Perl/POD part)
  +##
  +
  +=pod
  +
  +=head1 NAME
  +
  +Data::UUID - B<OSSP uuid> Backward Compatibility Perl Binding
  +
  +=head1 DESCRIPTION
  +
  +B<Data::UUID> is the B<OSSP uuid> backward compatibility Perl binding
  +to the API of the original B<Data::UUID> module. It allows other
  +B<Data::UUID> based Perl modules to run with B<OSSP::uuid> without
  +changes.
  +
  +=head1 SEE ALSO
  +
  +B<OSSP::uuid>.
  +
  +=head1 HISTORY
  +
  +The backward compatibility Perl binding B<Data::UUID> for B<OSSP uuid>
  +was implemented in 2004 by Piotr Roszatycki E<lt>dexter@debian.orgE<gt>.
  +
  +=cut
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid_compat.ts
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid_compat.ts
  --- /dev/null	2005-08-31 11:59:32 +0200
  +++ uuid_compat.ts	2005-08-31 11:59:45 +0200
  @@ -0,0 +1,55 @@
  +##
  +##  OSSP uuid - Universally Unique Identifier
  +##  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004 Piotr Roszatycki <dexter@debian.org>
  +##
  +##  This file is part of OSSP uuid, a library for the generation
  +##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  uuid_compat.ts: Data::UUID Backward Compatibility Perl API (Perl test suite part)
  +##
  +
  +use Test::More tests => 14;
  +
  +BEGIN {
  +    use_ok('Data::UUID');
  +    use Data::UUID;
  +};
  +
  +ok($ug = new Data::UUID);
  +
  +ok($uuid1 = $ug->create());
  +ok($uuid2 = $ug->to_hexstring($uuid1));
  +ok($uuid3 = $ug->from_string($uuid2));
  +ok($ug->compare($uuid1, $uuid3) == 0);
  +
  +ok($uuid4 = $ug->to_b64string($uuid1));
  +ok($uuid5 = $ug->to_b64string($uuid3));
  +ok($uuid4 eq $uuid5);
  +
  +ok($uuid6 = $ug->from_b64string($uuid5));
  +ok($ug->compare($uuid6, $uuid1) == 0);
  +
  +ok($uuid7 = NameSpace_URL);
  +ok($uuid8 = $ug->from_string("6ba7b811-9dad-11d1-80b4-00c04fd430c8"));
  +ok($ug->compare($uuid7, $uuid8) == 0);
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.ac
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 uuid.ac
  --- ossp-pkg/uuid/uuid.ac	31 Dec 2004 19:20:34 -0000	1.14
  +++ ossp-pkg/uuid/uuid.ac	31 Aug 2005 09:59:45 -0000	1.15
  @@ -91,6 +91,10 @@
           AS_HELP_STRING([--with-perl], [build Perl bindings to C API]),
           [ac_cv_with_perl=$withval], [ac_cv_with_perl=no])
       AC_CACHE_CHECK([whether to build Perl bindings to C API], [ac_cv_with_perl], [ac_cv_with_perl=no])
  +    AC_ARG_WITH([perl-compat],
  +        AS_HELP_STRING([--with-perl-compat], [build Perl compatibility API]),
  +        [ac_cv_with_perl_compat=$withval], [ac_cv_with_perl_compat=no])
  +    AC_CACHE_CHECK([whether to build Perl compatibility API], [ac_cv_with_perl_compat], [ac_cv_with_perl_compat=no])
       if test ".$ac_cv_with_perl" = ".yes"; then
           AC_DEFINE(WITH_PERL, 1, [whether to build Perl bindings to C API])
           WITH_PERL='yes'
  @@ -99,8 +103,15 @@
           WITH_PERL='no'
           PERL_NAME=''
       fi
  -    AC_SUBST(WITH_PERL)
  +    if test ".$ac_cv_with_perl_compat" = ".yes"; then
  +        AC_DEFINE(WITH_PERL_COMPAT, 1, [whether to build Perl compatibility API])
  +        WITH_PERL_COMPAT=1
  +    else
  +        WITH_PERL_COMPAT=0
  +    fi
       AC_SUBST(PERL_NAME)
  +    AC_SUBST(WITH_PERL)
  +    AC_SUBST(WITH_PERL_COMPAT)
       AC_PATH_PROG(PERL, perl, NA)
       if test ".$ac_cv_with_perl" = ".yes" -a ".$PERL" = ".NA"; then
           AC_ERROR([required Perl interpreter not found in \$PATH])
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_vers.h
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 uuid_vers.h
  --- ossp-pkg/uuid/uuid_vers.h	30 Aug 2005 20:11:46 -0000	1.15
  +++ ossp-pkg/uuid/uuid_vers.h	31 Aug 2005 09:59:45 -0000	1.16
  @@ -8,7 +8,7 @@
   #ifndef _UUID_VERS_H_
   #define _UUID_VERS_H_
   
  -#define _UUID_VERSION 0x102201
  +#define _UUID_VERSION 0x103200
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _UUID_VERS_H_AS_HEADER_
   
   _uuid_version_t _uuid_version = {
  -    0x102201,
  -    "1.2.1",
  -    "1.2.1 (30-Aug-2005)",
  -    "This is OSSP uuid, Version 1.2.1 (30-Aug-2005)",
  -    "OSSP uuid 1.2.1 (30-Aug-2005)",
  -    "OSSP uuid/1.2.1",
  -    "@(#)OSSP uuid 1.2.1 (30-Aug-2005)",
  -    "$Id: OSSP uuid 1.2.1 (30-Aug-2005) $"
  +    0x103200,
  +    "1.3.0",
  +    "1.3.0 (31-Aug-2005)",
  +    "This is OSSP uuid, Version 1.3.0 (31-Aug-2005)",
  +    "OSSP uuid 1.3.0 (31-Aug-2005)",
  +    "OSSP uuid/1.3.0",
  +    "@(#)OSSP uuid 1.3.0 (31-Aug-2005)",
  +    "$Id: OSSP uuid 1.3.0 (31-Aug-2005) $"
   };
   
   #endif /* _UUID_VERS_H_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Wed Aug 31 12:34:10 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 0820F752EE2; Wed, 31 Aug 2005 12:34:10 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/perl/ Makefile.PL
Message-Id: <20050831103410.0820F752EE2@mail.ossp.org>
Date: Wed, 31 Aug 2005 12:34:10 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Aug-2005 12:34:10
  Branch: HEAD                             Handle: 2005083111340900

  Modified files:
    ossp-pkg/uuid/perl      Makefile.PL

  Log:
    fix manual page installation

  Summary:
    Revision    Changes     Path
    1.7         +3  -2      ossp-pkg/uuid/perl/Makefile.PL
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/Makefile.PL
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 Makefile.PL
  --- ossp-pkg/uuid/perl/Makefile.PL	31 Aug 2005 09:59:45 -0000	1.6
  +++ ossp-pkg/uuid/perl/Makefile.PL	31 Aug 2005 10:34:09 -0000	1.7
  @@ -45,8 +45,9 @@
       PM                => { 'uuid.pm'   => '$(INST_LIBDIR)/uuid.pm',
                              'uuid.pod'  => '$(INST_LIBDIR)/uuid.pod',
                              ($compat ? ('uuid_compat.pm'  => '$(INST_LIBDIR)/../Data/UUID.pm')  : ()),
  -                           ($compat ? ('uuid_compat.pod' => '$(INST_LIBDIR)/../Data/UUID.pod') : ()),
  -                         },
  +                           ($compat ? ('uuid_compat.pod' => '$(INST_LIBDIR)/../Data/UUID.pod') : ()), },
  +    MAN3PODS          => { 'uuid.pod' => '$(INST_MAN3DIR)/OSSP::uuid.3',
  +                           ($compat ? ('uuid_compat.pod' => '$(INST_MAN3DIR)/Data::UUID.3') : ()), },
       TYPEMAPS          => [ 'uuid.tm' ],
       test              => { TESTS => 'uuid.ts' . ($compat ? ' uuid_compat.ts' : '') },
       NO_META           => 1,
  @@ .

From ossp-cvs-owner@ossp.org  Wed Aug 31 12:36:11 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 5E2D4752EE2; Wed, 31 Aug 2005 12:36:11 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ INSTALL
Message-Id: <20050831103611.5E2D4752EE2@mail.ossp.org>
Date: Wed, 31 Aug 2005 12:36:11 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Aug-2005 12:36:11
  Branch: HEAD                             Handle: 2005083111361100

  Modified files:
    ossp-pkg/uuid           INSTALL

  Log:
    mention new --with-perl-compat option

  Summary:
    Revision    Changes     Path
    1.4         +2  -1      ossp-pkg/uuid/INSTALL
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/INSTALL
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 INSTALL
  --- ossp-pkg/uuid/INSTALL	3 Nov 2004 18:26:33 -0000	1.3
  +++ ossp-pkg/uuid/INSTALL	31 Aug 2005 10:36:11 -0000	1.4
  @@ -14,7 +14,8 @@
       $ ./configure \
            --prefix=/path/to/uuid \
            [--with-dce] \
  -         [--with-perl[=/path/to/[bin[/perl]]]
  +         [--with-perl[=/path/to/[bin[/perl]
  +          --with-perl-compat]]
       $ make
       $ make check
       $ make install [DESTDIR=/path/to/temp/root]
  @@ .

From ossp-cvs-owner@ossp.org  Wed Aug 31 12:49:18 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 6743E752EE2; Wed, 31 Aug 2005 12:49:18 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ USERS
Message-Id: <20050831104918.6743E752EE2@mail.ossp.org>
Date: Wed, 31 Aug 2005 12:49:18 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Aug-2005 12:49:18
  Branch: HEAD                             Handle: 2005083111491800

  Modified files:
    ossp-pkg/uuid           USERS

  Log:
    one more user of OSSP uuid

  Summary:
    Revision    Changes     Path
    1.3         +4  -0      ossp-pkg/uuid/USERS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/USERS
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 USERS
  --- ossp-pkg/uuid/USERS	31 Oct 2004 11:59:03 -0000	1.2
  +++ ossp-pkg/uuid/USERS	31 Aug 2005 10:49:18 -0000	1.3
  @@ -28,3 +28,7 @@
       http://www.saurik.com/
       http://svn.saurik.com/repos/menes/trunk/
   
  +  o OpenAether OAPR
  +    C++ wrapper for NSPR
  +    http://www.openaether.org/oapr.html
  +
  @@ .

From ossp-cvs-owner@ossp.org  Wed Aug 31 13:10:30 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 4FC91752EE2; Wed, 31 Aug 2005 13:10:30 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ USERS
Message-Id: <20050831111030.4FC91752EE2@mail.ossp.org>
Date: Wed, 31 Aug 2005 13:10:30 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Aug-2005 13:10:30
  Branch: HEAD                             Handle: 2005083112103000

  Modified files:
    ossp-pkg/uuid           USERS

  Log:
    more known users

  Summary:
    Revision    Changes     Path
    1.4         +8  -0      ossp-pkg/uuid/USERS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/USERS
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 USERS
  --- ossp-pkg/uuid/USERS	31 Aug 2005 10:49:18 -0000	1.3
  +++ ossp-pkg/uuid/USERS	31 Aug 2005 11:10:30 -0000	1.4
  @@ -32,3 +32,11 @@
       C++ wrapper for NSPR
       http://www.openaether.org/oapr.html
   
  +  o Gauche Scheme Interpreter, UUID extension
  +    http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/gauche/Gauche-uuid/
  +    http://www.shiro.dreamhost.com/scheme/gauche/
  +
  +  o CGI::Session::ID::UUID
  +    UUID based ID generator backend for CGI::Session
  +    http://www.cpan.org/modules/by-authors/id/RSE/ 
  +
  @@ .

From ossp-cvs-owner@ossp.org  Wed Aug 31 13:16:19 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id A3B40752EE2; Wed, 31 Aug 2005 13:16:19 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ .cvsignore ChangeLog Makefile.in configure....
Message-Id: <20050831111619.A3B40752EE2@mail.ossp.org>
Date: Wed, 31 Aug 2005 13:16:19 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Aug-2005 13:16:19
  Branch: HEAD                             Handle: 2005083112161800

  Added files:
    ossp-pkg/uuid           uuid.pc.in
  Modified files:
    ossp-pkg/uuid           .cvsignore ChangeLog Makefile.in configure.ac

  Log:
    Added a pkg-config(1) specification uuid.pc which is also
    installed by default in addition to the old-style uuid-config tool.

  Summary:
    Revision    Changes     Path
    1.4         +1  -0      ossp-pkg/uuid/.cvsignore
    1.81        +4  -0      ossp-pkg/uuid/ChangeLog
    1.29        +4  -1      ossp-pkg/uuid/Makefile.in
    1.10        +5  -3      ossp-pkg/uuid/configure.ac
    1.1         +42 -0      ossp-pkg/uuid/uuid.pc.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/.cvsignore
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 .cvsignore
  --- ossp-pkg/uuid/.cvsignore	18 Jan 2004 20:19:23 -0000	1.3
  +++ ossp-pkg/uuid/.cvsignore	31 Aug 2005 11:16:18 -0000	1.4
  @@ -9,6 +9,7 @@
   shtool
   uuid-config
   uuid-config.1
  +uuid.pc
   uuid.1
   uuid.3
   uuid.h
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.80 -r1.81 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	31 Aug 2005 09:59:45 -0000	1.80
  +++ ossp-pkg/uuid/ChangeLog	31 Aug 2005 11:16:18 -0000	1.81
  @@ -13,6 +13,10 @@
   
     Changes between 1.2.1 and 1.3.0 (30-Aug-2005 to xx-XXX-2005)
   
  +   o Added a pkg-config(1) specification uuid.pc which is also
  +     installed by default in addition to the old-style uuid-config tool.
  +     [Ralf S. Engelschall]
  +
      o Added optional Data::UUID backward compatibility Perl API which can
        be enabled with the build-time option --with-perl-compat.
        [Piotr Roszatycki <dexter@debian.org>, Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	31 Aug 2005 09:59:45 -0000	1.28
  +++ ossp-pkg/uuid/Makefile.in	31 Aug 2005 11:16:18 -0000	1.29
  @@ -170,11 +170,12 @@
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(includedir)
  -	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libdir)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libdir)/pkgconfig
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man3
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man1
   	$(SHTOOL) install -c -m 755 ./uuid-config $(DESTDIR)$(bindir)/
   	$(SHTOOL) install -c -m 644 $(srcdir)/uuid-config.1 $(DESTDIR)$(mandir)/man1/
  +	$(SHTOOL) install -c -m 644 $(srcdir)/uuid.pc $(DESTDIR)$(libdir)/pkgconfig/
   	$(SHTOOL) install -c -m 644 ./uuid.h $(DESTDIR)$(includedir)/
   	-@if [ ".$(WITH_DCE)" = .yes ]; then \
   	    echo "$(SHTOOL) install -c -m 644 $(srcdir)/uuid_dce.h $(DESTDIR)$(includedir)/"; \
  @@ -204,11 +205,13 @@
   	    echo "$(RM) $(DESTDIR)$(includedir)/uuid_dce.h"; \
   	    $(RM) $(DESTDIR)$(includedir)/uuid_dce.h; \
   	fi
  +	-$(RM) $(DESTDIR)$(libdir)/pkgconfig/uuid.pc
   	-$(RM) $(DESTDIR)$(mandir)/man1/uuid-config.1
   	-$(RM) $(DESTDIR)$(bindir)/uuid-config
   	-$(RMDIR) $(DESTDIR)$(mandir)/man1 >/dev/null 2>&1 || $(TRUE)
   	-$(RMDIR) $(DESTDIR)$(mandir)/man3 >/dev/null 2>&1 || $(TRUE)
   	-$(RMDIR) $(DESTDIR)$(mandir) >/dev/null 2>&1 || $(TRUE)
  +	-$(RMDIR) $(DESTDIR)$(libdir)/pkgconfig >/dev/null 2>&1 || $(TRUE)
   	-$(RMDIR) $(DESTDIR)$(libdir) >/dev/null 2>&1 || $(TRUE)
   	-$(RMDIR) $(DESTDIR)$(includedir) >/dev/null 2>&1 || $(TRUE)
   	-$(RMDIR) $(DESTDIR)$(bindir) >/dev/null 2>&1 || $(TRUE)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/configure.ac
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 configure.ac
  --- ossp-pkg/uuid/configure.ac	31 Dec 2004 19:20:34 -0000	1.9
  +++ ossp-pkg/uuid/configure.ac	31 Aug 2005 11:16:18 -0000	1.10
  @@ -29,10 +29,12 @@
   
   AC_PREREQ(2.53)
   AC_INIT
  -UUID_VERSION_STR=`$ac_confdir/shtool version -l c -d long uuid_vers.h`
  -UUID_VERSION_HEX=`$ac_confdir/shtool version -l c -d hex  uuid_vers.h`
  +UUID_VERSION_RAW=`$ac_confdir/shtool version -l c -d short uuid_vers.h`
  +UUID_VERSION_STR=`$ac_confdir/shtool version -l c -d long  uuid_vers.h`
  +UUID_VERSION_HEX=`$ac_confdir/shtool version -l c -d hex   uuid_vers.h`
   $ac_confdir/shtool echo -e \
       "Configuring %BOSSP uuid%b (Universally Unique Identifier), version %B${UUID_VERSION_STR}%b"
  +AC_SUBST(UUID_VERSION_RAW)
   AC_SUBST(UUID_VERSION_STR)
   AC_SUBST(UUID_VERSION_HEX)
   
  @@ -48,7 +50,7 @@
   UUID_CHECK_ALL
   
   AC_CONFIG_HEADERS(config.h)
  -AC_CONFIG_FILES([Makefile uuid-config uuid.h])
  +AC_CONFIG_FILES([Makefile uuid-config uuid.pc uuid.h])
   AC_CONFIG_COMMANDS([adjustment], [chmod a-w uuid.h; chmod a+x uuid-config])
   AC_OUTPUT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pc.in
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid.pc.in
  --- /dev/null	2005-08-31 13:15:46 +0200
  +++ uuid.pc.in	2005-08-31 13:16:19 +0200
  @@ -0,0 +1,42 @@
  +##
  +##  OSSP uuid - Universally Unique Identifier
  +##  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP uuid, a library for the generation
  +##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  uuid.pc.in: pkg-config(1) specification
  +##
  +
  +prefix=@prefix@
  +exec_prefix=${prefix}
  +includedir=${prefix}/include
  +libdir=${exec_prefix}/lib
  +
  +Name: OSSP uuid
  +Description: Universally Unique Identifier (UUID) Library
  +Version: @UUID_VERSION_RAW@
  +URL: http://www.ossp.org/pkg/lib/uuid/
  +Cflags: -I${includedir}
  +Libs: -L${libdir} -luuid
  +Libs.private: @LIBS@
  +
  @@ .

From ossp-cvs-owner@ossp.org  Wed Aug 31 14:59:59 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id E6177752EE2; Wed, 31 Aug 2005 14:59:58 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog Makefile.in
Message-Id: <20050831125958.E6177752EE2@mail.ossp.org>
Date: Wed, 31 Aug 2005 14:59:58 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Aug-2005 14:59:58
  Branch: HEAD                             Handle: 2005083113595800

  Modified files:
    ossp-pkg/uuid           ChangeLog Makefile.in

  Log:
    Cleanup some Makefile parts.

  Summary:
    Revision    Changes     Path
    1.82        +3  -0      ossp-pkg/uuid/ChangeLog
    1.30        +3  -3      ossp-pkg/uuid/Makefile.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.81 -r1.82 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	31 Aug 2005 11:16:18 -0000	1.81
  +++ ossp-pkg/uuid/ChangeLog	31 Aug 2005 12:59:58 -0000	1.82
  @@ -13,6 +13,9 @@
   
     Changes between 1.2.1 and 1.3.0 (30-Aug-2005 to xx-XXX-2005)
   
  +   o Cleanup some Makefile parts.
  +     [Ralf S. Engelschall]
  +
      o Added a pkg-config(1) specification uuid.pc which is also
        installed by default in addition to the old-style uuid-config tool.
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	31 Aug 2005 11:16:18 -0000	1.29
  +++ ossp-pkg/uuid/Makefile.in	31 Aug 2005 12:59:58 -0000	1.30
  @@ -42,8 +42,8 @@
   mandir      = @mandir@
   
   CC          = @CC@
  -CPPFLAGS    = -I. -I$(srcdir) @CPPFLAGS@
  -CFLAGS      = @DEFS@ @CFLAGS@
  +CPPFLAGS    = -I. -I$(srcdir) @CPPFLAGS@ @DEFS@
  +CFLAGS      = @CFLAGS@
   LDFLAGS     = @LDFLAGS@
   LIBS        = @LIBS@
   RM          = rm -f
  @@ -59,7 +59,7 @@
   LIB_OBJS    = uuid.lo uuid_md5.lo uuid_sha1.lo uuid_prng.lo uuid_mac.lo uuid_ui64.lo uuid_str.lo
   
   DCE_NAME    = libuuid_dce.la
  -DCE_OBJS    = $(LIB_OBJS) uuid_dce.lo
  +DCE_OBJS    = uuid_dce.lo $(LIB_OBJS)
   
   PRG_NAME    = uuid
   PRG_OBJS    = uuid_cli.o
  @@ .

From ossp-cvs-owner@ossp.org  Wed Aug 31 16:28:29 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 25662752EE2; Wed, 31 Aug 2005 16:28:29 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid.c uuid.h.in
Message-Id: <20050831142829.25662752EE2@mail.ossp.org>
Date: Wed, 31 Aug 2005 16:28:29 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Aug-2005 16:28:29
  Branch: HEAD                             Handle: 2005083115282800

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid.c uuid.h.in

  Log:
    Cleanup the internals of the uuid_create() function and
    add a new corresponding uuid_clone() API function.

  Summary:
    Revision    Changes     Path
    1.83        +4  -0      ossp-pkg/uuid/ChangeLog
    1.53        +49 -14     ossp-pkg/uuid/uuid.c
    1.8         +1  -0      ossp-pkg/uuid/uuid.h.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.82 -r1.83 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	31 Aug 2005 12:59:58 -0000	1.82
  +++ ossp-pkg/uuid/ChangeLog	31 Aug 2005 14:28:28 -0000	1.83
  @@ -13,6 +13,10 @@
   
     Changes between 1.2.1 and 1.3.0 (30-Aug-2005 to xx-XXX-2005)
   
  +   o Cleanup the internals of the uuid_create() function and
  +     add a new corresponding uuid_clone() API function.
  +     [Ralf S. Engelschall]
  +
      o Cleanup some Makefile parts.
        [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.52 -r1.53 uuid.c
  --- ossp-pkg/uuid/uuid.c	30 Aug 2005 20:34:35 -0000	1.52
  +++ ossp-pkg/uuid/uuid.c	31 Aug 2005 14:28:28 -0000	1.53
  @@ -92,35 +92,40 @@
   /* create UUID object */
   uuid_rc_t uuid_create(uuid_t **uuid)
   {
  +    uuid_t *obj;
  +
       /* argument sanity check */
       if (uuid == NULL)
           return UUID_RC_ARG;
   
       /* allocate UUID object */
  -    if ((*uuid = (uuid_t *)malloc(sizeof(uuid_t))) == NULL)
  +    if ((obj = (uuid_t *)malloc(sizeof(uuid_t))) == NULL)
           return UUID_RC_MEM;
   
  -    /* set UUID object initially to "Nil UUID" */
  -    uuid_load(*uuid, "nil");
  -
  -    /* create PRNG and MD5 sub-objects */
  -    if (prng_create(&(*uuid)->prng) != PRNG_RC_OK)
  +    /* create PRNG, MD5 and SHA1 sub-objects */
  +    if (prng_create(&obj->prng) != PRNG_RC_OK)
           return UUID_RC_INT;
  -    if (md5_create(&(*uuid)->md5) != MD5_RC_OK)
  +    if (md5_create(&obj->md5) != MD5_RC_OK)
           return UUID_RC_INT;
  -    if (sha1_create(&(*uuid)->sha1) != SHA1_RC_OK)
  +    if (sha1_create(&obj->sha1) != SHA1_RC_OK)
           return UUID_RC_INT;
   
  +    /* set UUID object initially to "Nil UUID" */
  +    uuid_load(obj, "nil");
  +
       /* resolve MAC address for insertion into node field of UUIDs */
  -    if (!mac_address((unsigned char *)((*uuid)->mac), sizeof((*uuid)->mac))) {
  -        memset((*uuid)->mac, '\0', sizeof((*uuid)->mac));
  -        (*uuid)->mac[0] = BM_OCTET(1,0,0,0,0,0,0,0);
  +    if (!mac_address((unsigned char *)(obj->mac), sizeof(obj->mac))) {
  +        memset(obj->mac, '\0', sizeof(obj->mac));
  +        obj->mac[0] = BM_OCTET(1,0,0,0,0,0,0,0);
       }
   
       /* initialize time attributes */
  -    (*uuid)->time_last.tv_sec  = 0;
  -    (*uuid)->time_last.tv_usec = 0;
  -    (*uuid)->time_seq = 0;
  +    obj->time_last.tv_sec  = 0;
  +    obj->time_last.tv_usec = 0;
  +    obj->time_seq = 0;
  +
  +    /* store result object */
  +    *uuid = obj;
   
       return UUID_RC_OK;
   }
  @@ -143,6 +148,36 @@
       return UUID_RC_OK;
   }
   
  +/* clone UUID object */
  +uuid_rc_t uuid_clone(uuid_t *uuid, uuid_t **clone)
  +{
  +    uuid_t *obj;
  +
  +    /* argument sanity check */
  +    if (uuid == NULL || uuid_clone == NULL)
  +        return UUID_RC_ARG;
  +
  +    /* allocate UUID object */
  +    if ((obj = (uuid_t *)malloc(sizeof(uuid_t))) == NULL)
  +        return UUID_RC_MEM;
  +
  +    /* clone entire internal state */
  +    memcpy(obj, uuid, sizeof(uuid));
  +
  +    /* re-initialize with new PRNG, MD5 and SHA1 sub-objects */
  +    if (prng_create(&obj->prng) != PRNG_RC_OK)
  +        return UUID_RC_INT;
  +    if (md5_create(&obj->md5) != MD5_RC_OK)
  +        return UUID_RC_INT;
  +    if (sha1_create(&obj->sha1) != SHA1_RC_OK)
  +        return UUID_RC_INT;
  +
  +    /* store result object */
  +    *clone = obj;
  +
  +    return UUID_RC_OK;
  +}
  +
   /* check whether UUID object represents "Nil UUID" */
   uuid_rc_t uuid_isnil(const uuid_t *uuid, int *result)
   {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.h.in
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 uuid.h.in
  --- ossp-pkg/uuid/uuid.h.in	29 Mar 2005 19:01:41 -0000	1.7
  +++ ossp-pkg/uuid/uuid.h.in	31 Aug 2005 14:28:28 -0000	1.8
  @@ -84,6 +84,7 @@
   /* UUID object handling */
   extern uuid_rc_t     uuid_create   (uuid_t **_uuid);
   extern uuid_rc_t     uuid_destroy  (uuid_t  *_uuid);
  +extern uuid_rc_t     uuid_clone    (uuid_t  *_uuid, uuid_t **_uuid_clone);
   
   /* UUID generation */
   extern uuid_rc_t     uuid_load     (uuid_t  *_uuid, const char *_name);
  @@ .

From ossp-cvs-owner@ossp.org  Wed Aug 31 16:29:57 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id E4AC1752EE2; Wed, 31 Aug 2005 16:29:56 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog Makefile.in devtool.conf uuid++.c...
Message-Id: <20050831142956.E4AC1752EE2@mail.ossp.org>
Date: Wed, 31 Aug 2005 16:29:56 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Aug-2005 16:29:56
  Branch: HEAD                             Handle: 2005083115295600

  Added files:
    ossp-pkg/uuid           uuid++.cc uuid++.hh
  Modified files:
    ossp-pkg/uuid           ChangeLog Makefile.in devtool.conf uuid.ac
                            uuid.pod

  Log:
    Add an experimental C++ API binding which can be
    enabled under build-time with option --with-cxx.

  Summary:
    Revision    Changes     Path
    1.84        +4  -0      ossp-pkg/uuid/ChangeLog
    1.31        +37 -2      ossp-pkg/uuid/Makefile.in
    1.17        +1  -0      ossp-pkg/uuid/devtool.conf
    1.1         +285 -0     ossp-pkg/uuid/uuid++.cc
    1.1         +74 -0      ossp-pkg/uuid/uuid++.hh
    1.16        +17 -0      ossp-pkg/uuid/uuid.ac
    1.28        +4  -0      ossp-pkg/uuid/uuid.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.83 -r1.84 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	31 Aug 2005 14:28:28 -0000	1.83
  +++ ossp-pkg/uuid/ChangeLog	31 Aug 2005 14:29:56 -0000	1.84
  @@ -13,6 +13,10 @@
   
     Changes between 1.2.1 and 1.3.0 (30-Aug-2005 to xx-XXX-2005)
   
  +   o Add an experimental C++ API binding which can be 
  +     enabled under build-time with option --with-cxx.
  +     [Ralf S. Engelschall]
  +
      o Cleanup the internals of the uuid_create() function and
        add a new corresponding uuid_clone() API function.
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	31 Aug 2005 12:59:58 -0000	1.30
  +++ ossp-pkg/uuid/Makefile.in	31 Aug 2005 14:29:56 -0000	1.31
  @@ -42,8 +42,10 @@
   mandir      = @mandir@
   
   CC          = @CC@
  +CXX         = @CXX@
   CPPFLAGS    = -I. -I$(srcdir) @CPPFLAGS@ @DEFS@
   CFLAGS      = @CFLAGS@
  +CXXFLAGS    = @CXXFLAGS@
   LDFLAGS     = @LDFLAGS@
   LIBS        = @LIBS@
   RM          = rm -f
  @@ -61,6 +63,9 @@
   DCE_NAME    = libuuid_dce.la
   DCE_OBJS    = uuid_dce.lo $(LIB_OBJS)
   
  +CXX_NAME    = libuuid++.la
  +CXX_OBJS    = uuid++.lo $(LIB_OBJS)
  +
   PRG_NAME    = uuid
   PRG_OBJS    = uuid_cli.o
   
  @@ -69,23 +74,30 @@
   PERL_NAME   = perl/blib/lib/OSSP/uuid.pm
   PERL_OBJS   = perl/uuid.pm
   
  -TARGETS     = $(LIB_NAME) @DCE_NAME@ $(PRG_NAME) @PERL_NAME@
  +TARGETS     = $(LIB_NAME) @DCE_NAME@ @CXX_NAME@ $(PRG_NAME) @PERL_NAME@
   
   WITH_DCE         = @WITH_DCE@
  +WITH_CXX         = @WITH_CXX@
   WITH_PERL        = @WITH_PERL@
   WITH_PERL_COMPAT = @WITH_PERL_COMPAT@
   
   .SUFFIXES:
  -.SUFFIXES: .c .o .lo
  +.SUFFIXES: .c .cc .o .lo
   
   all: $(TARGETS)
   
   .c.o:
   	$(CC) $(CPPFLAGS) $(CFLAGS) -c $<
   
  +.cc.o:
  +	$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $<
  +
   .c.lo:
   	@$(LIBTOOL) --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS) -c $<
   
  +.cc.lo:
  +	@$(LIBTOOL) --mode=compile $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $<
  +
   $(LIB_NAME): $(LIB_OBJS)
   	@$(LIBTOOL) --mode=link $(CC) -o $(LIB_NAME) $(LIB_OBJS) -rpath $(libdir) \
   	    -version-info `$(SHTOOL) version -l c -d libtool $(top_srcdir)/uuid_vers.h`
  @@ -94,6 +106,10 @@
   	@$(LIBTOOL) --mode=link $(CC) -o $(DCE_NAME) $(DCE_OBJS) -rpath $(libdir) \
   	    -version-info `$(SHTOOL) version -l c -d libtool $(top_srcdir)/uuid_vers.h`
   
  +$(CXX_NAME): $(CXX_OBJS)
  +	@$(LIBTOOL) --mode=link $(CXX) -o $(CXX_NAME) $(CXX_OBJS) -rpath $(libdir) \
  +	    -version-info `$(SHTOOL) version -l c -d libtool $(top_srcdir)/uuid_vers.h`
  +
   $(PRG_NAME): $(PRG_OBJS) $(LIB_NAME)
   	@$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $(PRG_NAME) $(PRG_OBJS) $(LIB_NAME) $(LIBS)
   
  @@ -110,6 +126,7 @@
   uuid_ui64.lo: uuid_ui64.c uuid_ui64.h
   uuid_dce.lo: uuid_dce.c uuid.h uuid_dce.h
   uuid_cli.o: uuid_cli.c uuid.h
  +uuid++.lo: uuid++.cc uuid++.hh
   
   man: uuid.3 uuid-config.1 uuid.1
   uuid.3: uuid.pod
  @@ -181,11 +198,18 @@
   	    echo "$(SHTOOL) install -c -m 644 $(srcdir)/uuid_dce.h $(DESTDIR)$(includedir)/"; \
   	    $(SHTOOL) install -c -m 644 $(srcdir)/uuid_dce.h $(DESTDIR)$(includedir)/; \
   	fi
  +	-@if [ ".$(WITH_CXX)" = .yes ]; then \
  +	    echo "$(SHTOOL) install -c -m 644 $(srcdir)/uuid++.hh $(DESTDIR)$(includedir)/"; \
  +	    $(SHTOOL) install -c -m 644 $(srcdir)/uuid++.hh $(DESTDIR)$(includedir)/; \
  +	fi
   	$(SHTOOL) install -c -m 644 $(srcdir)/uuid.3 $(DESTDIR)$(mandir)/man3/
   	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libuuid.la $(DESTDIR)$(libdir)/
   	-@if [ ".$(WITH_DCE)" = .yes ]; then \
   	    $(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libuuid_dce.la $(DESTDIR)$(libdir)/; \
   	fi
  +	-@if [ ".$(WITH_CXX)" = .yes ]; then \
  +	    $(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libuuid++.la $(DESTDIR)$(libdir)/; \
  +	fi
   	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -s -m 755 uuid $(DESTDIR)$(bindir)/
   	$(SHTOOL) install -c -m 644 $(srcdir)/uuid.1 $(DESTDIR)$(mandir)/man1/
   	-@if [ ".$(WITH_PERL)" = .yes ]; then \
  @@ -199,12 +223,19 @@
   	-@if [ ".$(WITH_DCE)" = .yes ]; then \
   	    $(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libuuid_dce.la; \
   	fi
  +	-@if [ ".$(WITH_CXX)" = .yes ]; then \
  +	    $(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libuuid++.la; \
  +	fi
   	-$(RM) $(DESTDIR)$(mandir)/man3/uuid.3
   	-$(RM) $(DESTDIR)$(includedir)/uuid.h
   	-@if [ ".$(WITH_DCE)" = .yes ]; then \
   	    echo "$(RM) $(DESTDIR)$(includedir)/uuid_dce.h"; \
   	    $(RM) $(DESTDIR)$(includedir)/uuid_dce.h; \
   	fi
  +	-@if [ ".$(WITH_CXX)" = .yes ]; then \
  +	    echo "$(RM) $(DESTDIR)$(includedir)/uuid++.hh"; \
  +	    $(RM) $(DESTDIR)$(includedir)/uuid++.hh; \
  +	fi
   	-$(RM) $(DESTDIR)$(libdir)/pkgconfig/uuid.pc
   	-$(RM) $(DESTDIR)$(mandir)/man1/uuid-config.1
   	-$(RM) $(DESTDIR)$(bindir)/uuid-config
  @@ -223,6 +254,10 @@
   	    echo "$(RM) $(DCE_NAME) $(DCE_OBJS)"; \
   	    $(RM) $(DCE_NAME) $(DCE_OBJS); \
   	fi
  +	-@if [ ".$(WITH_CXX)" = .yes ]; then \
  +	    echo "$(RM) $(CXX_NAME) $(CXX_OBJS)"; \
  +	    $(RM) $(CXX_NAME) $(CXX_OBJS); \
  +	fi
   	-$(RM) $(PRG_NAME) $(PRG_OBJS)
   	-$(RM) -r .libs >/dev/null 2>&1 || $(TRUE)
   	-$(RM) *.o *.lo
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 devtool.conf
  --- ossp-pkg/uuid/devtool.conf	31 Aug 2005 09:59:45 -0000	1.16
  +++ ossp-pkg/uuid/devtool.conf	31 Aug 2005 14:29:56 -0000	1.17
  @@ -17,6 +17,7 @@
           --prefix=/tmp/uuid \
           --disable-shared \
           --enable-debug \
  +        --with-cxx \
           --with-perl \
           --with-perl-compat \
           "$@"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid++.cc
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid++.cc
  --- /dev/null	2005-08-31 16:29:49 +0200
  +++ uuid++.cc	2005-08-31 16:29:56 +0200
  @@ -0,0 +1,285 @@
  +/*
  +**  OSSP uuid - Universally Unique Identifier
  +**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +**
  +**  This file is part of OSSP uuid, a library for the generation
  +**  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  uuid++.cc: library C++ API implementation
  +*/
  +
  +#include <string.h>
  +#include <stdarg.h>
  +
  +#include "uuid++.hh"
  +
  +using namespace std;
  +
  +/*
  +**  OBJECT CONSTRUCTORS AND DESTRUCTOR
  +*/
  +
  +/*  standard constructor */
  +uuid::uuid()
  +{
  +    if (uuid_create(&ctx) != UUID_RC_OK)
  +        throw "unable to create UUID context";
  +}
  +
  +/*  standard destructor */
  +uuid::~uuid()
  +{
  +    uuid_destroy(ctx);
  +}
  +
  +/*  construction: import of other C++ API object (= special C++ copy constructor) */
  +uuid::uuid(const uuid &obj)
  +{
  +    /* Notice: the copy constructor is the same as the assignment
  +       operator (with the object as the RHS) below, except that (1) no
  +       check for self-assignment is required, (2) no existing internals
  +       have to be destroyed and (3) no return value is given back. */
  +    if (uuid_clone(obj.ctx, &ctx) != UUID_RC_OK)
  +        throw "unable to clone UUID context";
  +}
  +
  +/*  construction: import of other C API object */
  +uuid::uuid(uuid_t *obj)
  +{
  +    if (obj != NULL)
  +        ctx = obj;
  +    else {
  +        if (uuid_create(&ctx) != UUID_RC_OK)
  +            throw "unable to create UUID context";
  +    }
  +}
  +
  +/*  construction: import of binary representation */
  +uuid::uuid(const unsigned char *bin)
  +{
  +    if (uuid_create(&ctx) != UUID_RC_OK)
  +        throw "unable to create UUID context";
  +    if (bin != NULL) {
  +        if (uuid_import(ctx, UUID_FMT_BIN, bin, UUID_LEN_BIN) != UUID_RC_OK)
  +            throw "unable to import UUID from binary representation";
  +    }
  +}
  +
  +/*  construction: import of string representation */
  +uuid::uuid(const char *str)
  +{
  +    if (uuid_create(&ctx) != UUID_RC_OK)
  +        throw "unable to create UUID context";
  +    if (str != NULL) {
  +        if (uuid_import(ctx, UUID_FMT_STR, str, strlen(str)) != UUID_RC_OK)
  +            throw "unable to import UUID from string representation";
  +    }
  +}
  +
  +/*
  +**  IMPORT METHODS
  +*/
  +
  +/*  assignment: import of other C++ API object */
  +uuid &uuid::operator=(const uuid &rhs)
  +{
  +    if (this == &rhs)
  +        return *this;
  +    if (uuid_destroy(ctx) != UUID_RC_OK)
  +        throw "failed to destroy old UUID context";
  +    if (uuid_clone(rhs.ctx, &ctx) != UUID_RC_OK)
  +        throw "unable to clone UUID context";
  +    return *this;
  +}
  +
  +/*  assignment: import of other C API object */
  +uuid &uuid::operator=(const uuid_t *rhs)
  +{
  +    if (rhs == NULL)
  +        throw "invalid RHS C object";
  +    if (uuid_clone((uuid_t *)rhs, &ctx) != UUID_RC_OK)
  +        throw "unable to clone UUID context";
  +    return *this;
  +}
  +
  +/*  assignment: import of binary representation */
  +uuid &uuid::operator=(const unsigned char *rhs)
  +{
  +    if (rhs == NULL)
  +        throw "invalid RHS string";
  +    if (uuid_import(ctx, UUID_FMT_BIN, (const void *)rhs, UUID_LEN_BIN) != UUID_RC_OK)
  +        throw "unable to import into source UUID context";
  +    return *this;
  +}
  +
  +/*  assignment: import of string representation */
  +uuid &uuid::operator=(const char *rhs)
  +{
  +    if (rhs == NULL)
  +        throw "invalid RHS string";
  +    if (uuid_import(ctx, UUID_FMT_STR, (const void *)rhs, strlen(rhs)) != UUID_RC_OK)
  +        throw "unable to import into source UUID context";
  +    return *this;
  +}
  +
  +/*
  +**  GENERATION METHODS
  +*/
  +
  +/*  generation: loading existing UUID by name */
  +void uuid::load(const char *name)
  +{
  +    if (name == NULL)
  +        throw "invalid UUID name";
  +    if (uuid_load(ctx, name) != UUID_RC_OK)
  +        throw "unable to load UUID by name";
  +    return;
  +}
  +
  +/*  generation: making new UUID one from scratch */
  +void uuid::make(unsigned int mode, ...)
  +{
  +    uuid_rc_t rv;
  +    va_list ap;
  +
  +    va_start(ap, mode);
  +    if ((mode & UUID_MAKE_V3) || (mode & UUID_MAKE_V5)) {
  +        const char *ns   = (const char *)va_arg(ap, char *);
  +        const char *name = (const char *)va_arg(ap, char *);
  +        if (ns == NULL || name == NULL)
  +            throw "invalid arguments";
  +        rv = uuid_make(ctx, mode, ns, name);
  +    }
  +    else
  +        rv = uuid_make(ctx, mode);
  +    va_end(ap);
  +    if (rv != UUID_RC_OK)
  +        throw "unable to make new UUID";
  +    return;
  +}
  +
  +/*
  +**  COMPARISON METHODS
  +*/
  +
  +/*  comparison: is-Nil-UUID */
  +int uuid::isnil(void)
  +{
  +    int rv;
  +
  +    if (uuid_isnil(ctx, &rv) != UUID_RC_OK)
  +        throw "unable to compare UUID for being Nil-UUID";
  +    return rv;
  +}
  +
  +/*  comparison: equality */
  +int uuid::operator==(const uuid &rhs)
  +{
  +    int rv;
  +
  +    if (uuid_compare(ctx, rhs.ctx, &rv) != UUID_RC_OK)
  +        throw "unable to compare UUID contexts";
  +    return (rv == 0);
  +}
  +
  +/*  comparison: inequality */
  +int uuid::operator!=(const uuid &rhs)
  +{
  +    int rv;
  +
  +    if (uuid_compare(ctx, rhs.ctx, &rv) != UUID_RC_OK)
  +        throw "unable to compare UUID contexts";
  +    return (rv != 0);
  +}
  +
  +/*  comparison: lower-than */
  +int uuid::operator<(const uuid &rhs)
  +{
  +    int rv;
  +
  +    if (uuid_compare(ctx, rhs.ctx, &rv) != UUID_RC_OK)
  +        throw "unable to compare UUID contexts";
  +    return (rv < 0);
  +}
  +
  +/*  comparison: lower-than-or-equal */
  +int uuid::operator<=(const uuid &rhs)
  +{
  +    int rv;
  +
  +    if (uuid_compare(ctx, rhs.ctx, &rv) != UUID_RC_OK)
  +        throw "unable to compare UUID contexts";
  +    return (rv <= 0);
  +}
  +
  +/*  comparison: greater-than */
  +int uuid::operator>(const uuid &rhs)
  +{
  +    int rv;
  +
  +    if (uuid_compare(ctx, rhs.ctx, &rv) != UUID_RC_OK)
  +        throw "unable to compare UUID contexts";
  +    return (rv > 0);
  +}
  +
  +/*  comparison: greater-than-or-equal */
  +int uuid::operator>=(const uuid &rhs)
  +{
  +    int rv;
  +
  +    if (uuid_compare(ctx, rhs.ctx, &rv) != UUID_RC_OK)
  +        throw "unable to compare UUID contexts";
  +    return (rv >= 0);
  +}
  +
  +/*
  +**  EXPORT METHODS
  +*/
  +
  +/*  export: object representation */
  +uuid_t *uuid::object(void)
  +{
  +    return ctx;
  +}
  +        
  +/*  export: binary representation */
  +unsigned char *uuid::binary(void)
  +{
  +    unsigned char *bin;
  +
  +    bin = NULL;
  +    if (uuid_export(ctx, UUID_FMT_BIN, (void **)&bin, NULL) != UUID_RC_OK)
  +        throw "unable to export UUID context";
  +    return bin;
  +}
  +
  +/*  export: string representation */
  +char *uuid::string(void)
  +{
  +    char *str;
  +
  +    str = NULL;
  +    if (uuid_export(ctx, UUID_FMT_STR, (void **)&str, NULL) != UUID_RC_OK)
  +        throw "unable to export UUID context";
  +    return str;
  +}
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid++.hh
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid++.hh
  --- /dev/null	2005-08-31 16:29:49 +0200
  +++ uuid++.hh	2005-08-31 16:29:56 +0200
  @@ -0,0 +1,74 @@
  +/*
  +**  OSSP uuid - Universally Unique Identifier
  +**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +**
  +**  This file is part of OSSP uuid, a library for the generation
  +**  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  uuid++.hh: library C++ API definition
  +*/
  +
  +#ifndef __UUIDXX_HH__
  +#define __UUIDXX_HH__
  +
  +/* required C API header */
  +#include "uuid.h"
  +
  +class uuid {
  +    private:
  +        uuid_t *ctx;
  +    public:
  +        /* object constructors and destructor */
  +        uuid();                                      /* standard constructor */
  +        ~uuid();                                     /* standard destructor */
  +        uuid(const uuid &obj);                       /* construction: import of other C++ API object */
  +        uuid(uuid_t *obj);                           /* construction: import of other C   API object */
  +        uuid(const unsigned char *str);              /* construction: import of binary representation */
  +        uuid(const char *str);                       /* construction: import of string representation */
  +
  +        /* import methods */
  +        uuid &operator=  (const uuid &rhs);          /* assignment: import of other C++ API object */
  +        uuid &operator=  (const uuid_t *rhs);        /* assignment: import of other C   API object */
  +        uuid &operator=  (const unsigned char *rhs); /* assignment: import of binary representation */
  +        uuid &operator=  (const char *rhs);          /* assignment: import of string representation */
  +
  +        /* generation methods */
  +        void load        (const char *name);         /* generation: loading existing UUID by name */
  +        void make        (unsigned int mode, ...);   /* generation: making new UUID one from scratch */
  +
  +        /* comparison methods */
  +        int  isnil       (void);                     /* comparison: is-Nil-UUID */
  +        int  operator==  (const uuid &rhs);          /* comparison: equality */
  +        int  operator!=  (const uuid &rhs);          /* comparison: inequality */
  +        int  operator<   (const uuid &rhs);          /* comparison: lower-than */
  +        int  operator<=  (const uuid &rhs);          /* comparison: lower-than-or-equal */
  +        int  operator>   (const uuid &rhs);          /* comparison: greater-than */
  +        int  operator>=  (const uuid &rhs);          /* comparison: greater-than-or-equal */
  +
  +        /* export methods */                           
  +        uuid_t        *object (void);                /* export: object representation */
  +        unsigned char *binary (void);                /* export: binary representation */
  +        char          *string (void);                /* export: string representation */
  +};
  +
  +#endif /* __UUIDXX_HH__ */
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.ac
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 uuid.ac
  --- ossp-pkg/uuid/uuid.ac	31 Aug 2005 09:59:45 -0000	1.15
  +++ ossp-pkg/uuid/uuid.ac	31 Aug 2005 14:29:56 -0000	1.16
  @@ -86,6 +86,23 @@
       AC_SUBST(WITH_DCE)
       AC_SUBST(DCE_NAME)
   
  +    dnl #   configure option --with-cxx
  +    AC_ARG_WITH([cxx],
  +        AS_HELP_STRING([--with-cxx], [build C++ bindings to C API]),
  +        [ac_cv_with_cxx=$withval], [ac_cv_with_cxx=no])
  +    AC_CACHE_CHECK([whether to build C++ bindings to C API], [ac_cv_with_cxx], [ac_cv_with_cxx=no])
  +    if test ".$ac_cv_with_cxx" = ".yes"; then
  +        AC_DEFINE(WITH_CXX, 1, [whether to build C++ bindings to C API])
  +        WITH_CXX='yes'
  +        CXX_NAME='$(CXX_NAME)'
  +        AC_PROG_CXX
  +    else
  +        WITH_CXX='no'
  +        CXX_NAME=''
  +    fi
  +    AC_SUBST(CXX_NAME)
  +    AC_SUBST(WITH_CXX)
  +
       dnl #   configure option --with-perl
       AC_ARG_WITH([perl],
           AS_HELP_STRING([--with-perl], [build Perl bindings to C API]),
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	31 Aug 2005 07:28:00 -0000	1.27
  +++ ossp-pkg/uuid/uuid.pod	31 Aug 2005 14:29:56 -0000	1.28
  @@ -246,6 +246,10 @@
   
   Destroy UUID object I<uuid>.
   
  +=item uuid_rc_t B<uuid_clone>(uuid_t *I<uuid>, uuid_t **I<uuid_clone>);
  +
  +Clone UUID object I<uuid> and store new UUID object in I<uuid_clone>.
  +
   =item uuid_rc_t B<uuid_isnil>(uuid_t *I<uuid>, int *I<result>);
   
   Checks whether the UUID in I<uuid> is the I<Nil> UUID.
  @@ .

From ossp-cvs-owner@ossp.org  Wed Aug 31 16:32:53 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id E5C3E752F0F; Wed, 31 Aug 2005 16:32:52 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ NEWS
Message-Id: <20050831143252.E5C3E752F0F@mail.ossp.org>
Date: Wed, 31 Aug 2005 16:32:52 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Aug-2005 16:32:52
  Branch: HEAD                             Handle: 2005083115325000

  Modified files:
    ossp-pkg/uuid           NEWS

  Log:
    remember what is new in version 1.3

  Summary:
    Revision    Changes     Path
    1.4         +3  -0      ossp-pkg/uuid/NEWS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/NEWS
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 NEWS
  --- ossp-pkg/uuid/NEWS	23 Jan 2005 11:28:51 -0000	1.3
  +++ ossp-pkg/uuid/NEWS	31 Aug 2005 14:32:50 -0000	1.4
  @@ -11,6 +11,9 @@
     This is a list of major changes to OSSP uuid. For more detailed
     change descriptions, please have a look at the ChangeLog file.
   
  +  Changes between 1.2 and 1.3
  +    o Added experimental C++ API binding.
  +    o Added Perl TIE-style API binding.
     Changes between 1.1 and 1.2
       o Added support for version 5 UUIDs (name-based, SHA-1)
     Changes between 1.0 and 1.1
  @@ .

From ossp-cvs-owner@ossp.org  Wed Aug 31 21:20:43 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id D03AA752EE2; Wed, 31 Aug 2005 21:20:43 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.h.in uuid.pod
Message-Id: <20050831192043.D03AA752EE2@mail.ossp.org>
Date: Wed, 31 Aug 2005 21:20:43 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Aug-2005 21:20:43
  Branch: HEAD                             Handle: 2005083120204300

  Modified files:
    ossp-pkg/uuid           uuid.h.in uuid.pod

  Log:
    Add missing "const" in manual page and cleanup formatting in header
    file.

  Summary:
    Revision    Changes     Path
    1.9         +9  -9      ossp-pkg/uuid/uuid.h.in
    1.29        +4  -4      ossp-pkg/uuid/uuid.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.h.in
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 uuid.h.in
  --- ossp-pkg/uuid/uuid.h.in	31 Aug 2005 14:28:28 -0000	1.8
  +++ ossp-pkg/uuid/uuid.h.in	31 Aug 2005 19:20:43 -0000	1.9
  @@ -82,21 +82,21 @@
   typedef struct uuid_st uuid_t;
   
   /* UUID object handling */
  -extern uuid_rc_t     uuid_create   (uuid_t **_uuid);
  -extern uuid_rc_t     uuid_destroy  (uuid_t  *_uuid);
  -extern uuid_rc_t     uuid_clone    (uuid_t  *_uuid, uuid_t **_uuid_clone);
  +extern uuid_rc_t     uuid_create   (      uuid_t **_uuid);
  +extern uuid_rc_t     uuid_destroy  (      uuid_t  *_uuid);
  +extern uuid_rc_t     uuid_clone    (const uuid_t  *_uuid, uuid_t **_clone);
   
   /* UUID generation */
  -extern uuid_rc_t     uuid_load     (uuid_t  *_uuid, const char *_name);
  -extern uuid_rc_t     uuid_make     (uuid_t  *_uuid, unsigned int _mode, ...);
  +extern uuid_rc_t     uuid_load     (      uuid_t  *_uuid, const char *_name);
  +extern uuid_rc_t     uuid_make     (      uuid_t  *_uuid, unsigned int _mode, ...);
   
   /* UUID comparison */
  -extern uuid_rc_t     uuid_isnil    (const uuid_t *_uuid,                       int *_result);
  -extern uuid_rc_t     uuid_compare  (const uuid_t *_uuid, const uuid_t *_uuid2, int *_result);
  +extern uuid_rc_t     uuid_isnil    (const uuid_t  *_uuid,                       int *_result);
  +extern uuid_rc_t     uuid_compare  (const uuid_t  *_uuid, const uuid_t *_uuid2, int *_result);
   
   /* UUID import/export */
  -extern uuid_rc_t     uuid_import   (uuid_t       *_uuid, uuid_fmt_t _fmt, const void  *_data_ptr, size_t  _data_len);
  -extern uuid_rc_t     uuid_export   (const uuid_t *_uuid, uuid_fmt_t _fmt,       void **_data_ptr, size_t *_data_len);
  +extern uuid_rc_t     uuid_import   (      uuid_t  *_uuid, uuid_fmt_t _fmt, const void  *_data_ptr, size_t  _data_len);
  +extern uuid_rc_t     uuid_export   (const uuid_t  *_uuid, uuid_fmt_t _fmt,       void **_data_ptr, size_t *_data_len);
   
   /* library utilities */
   extern char         *uuid_error    (uuid_rc_t _rc);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	31 Aug 2005 14:29:56 -0000	1.28
  +++ ossp-pkg/uuid/uuid.pod	31 Aug 2005 19:20:43 -0000	1.29
  @@ -246,17 +246,17 @@
   
   Destroy UUID object I<uuid>.
   
  -=item uuid_rc_t B<uuid_clone>(uuid_t *I<uuid>, uuid_t **I<uuid_clone>);
  +=item uuid_rc_t B<uuid_clone>(const uuid_t *I<uuid>, uuid_t **I<uuid_clone>);
   
   Clone UUID object I<uuid> and store new UUID object in I<uuid_clone>.
   
  -=item uuid_rc_t B<uuid_isnil>(uuid_t *I<uuid>, int *I<result>);
  +=item uuid_rc_t B<uuid_isnil>(const uuid_t *I<uuid>, int *I<result>);
   
   Checks whether the UUID in I<uuid> is the I<Nil> UUID.
   If this is the case, it returns I<true> in C<*>I<result>.
   Else it returns I<false> in C<*>I<result>.
   
  -=item uuid_rc_t B<uuid_compare>(uuid_t *I<uuid>, uuid_t *I<uuid2>, int *I<result>);
  +=item uuid_rc_t B<uuid_compare>(const uuid_t *I<uuid>, const uuid_t *I<uuid2>, int *I<result>);
   
   Compares the order of the two UUIDs in I<uuid1> and I<uuid2>
   and returns the result in C<*>I<result>: C<-1> if I<uuid1> is
  @@ -273,7 +273,7 @@
   minimum expected length in I<data_len> depends on it. Valid values for
   I<fmt> are B<UUID_FMT_BIN> and B<UUID_FMT_STR>.
   
  -=item uuid_rc_t B<uuid_export>(uuid_t *I<uuid>, uuid_fmt_t I<fmt>, void **I<data_ptr>, size_t *I<data_len>);
  +=item uuid_rc_t B<uuid_export>(const uuid_t *I<uuid>, uuid_fmt_t I<fmt>, void **I<data_ptr>, size_t *I<data_len>);
   
   Exports a UUID I<uuid> into an external representation of format I<fmt>.
   The data is written to the buffer at C<*>I<data_ptr> which has to
  @@ .

From ossp-cvs-owner@ossp.org  Wed Aug 31 21:21:13 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 84D49752F23; Wed, 31 Aug 2005 21:21:13 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.c
Message-Id: <20050831192113.84D49752F23@mail.ossp.org>
Date: Wed, 31 Aug 2005 21:21:13 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Aug-2005 21:21:13
  Branch: HEAD                             Handle: 2005083120211300

  Modified files:
    ossp-pkg/uuid           uuid.c

  Log:
    constifiy uuid_clone()

  Summary:
    Revision    Changes     Path
    1.54        +1  -1      ossp-pkg/uuid/uuid.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.53 -r1.54 uuid.c
  --- ossp-pkg/uuid/uuid.c	31 Aug 2005 14:28:28 -0000	1.53
  +++ ossp-pkg/uuid/uuid.c	31 Aug 2005 19:21:13 -0000	1.54
  @@ -149,7 +149,7 @@
   }
   
   /* clone UUID object */
  -uuid_rc_t uuid_clone(uuid_t *uuid, uuid_t **clone)
  +uuid_rc_t uuid_clone(const uuid_t *uuid, uuid_t **clone)
   {
       uuid_t *obj;
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Aug 31 21:22:48 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 98A34752EE2; Wed, 31 Aug 2005 21:22:48 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog
Message-Id: <20050831192248.98A34752EE2@mail.ossp.org>
Date: Wed, 31 Aug 2005 21:22:48 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Aug-2005 21:22:48
  Branch: HEAD                             Handle: 2005083120224800

  Modified files:
    ossp-pkg/uuid           ChangeLog

  Log:
    remember commit

  Summary:
    Revision    Changes     Path
    1.85        +3  -0      ossp-pkg/uuid/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.84 -r1.85 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	31 Aug 2005 14:29:56 -0000	1.84
  +++ ossp-pkg/uuid/ChangeLog	31 Aug 2005 19:22:48 -0000	1.85
  @@ -13,6 +13,9 @@
   
     Changes between 1.2.1 and 1.3.0 (30-Aug-2005 to xx-XXX-2005)
   
  +   o Add missing "const" in manual page.
  +     [Ralf S. Engelschall]
  +
      o Add an experimental C++ API binding which can be 
        enabled under build-time with option --with-cxx.
        [Ralf S. Engelschall]
  @@ .

From ossp-cvs-owner@ossp.org  Wed Aug 31 22:07:30 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 214EA752EE2; Wed, 31 Aug 2005 22:07:30 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ .cvsignore Makefile.in uuid++.cc uuid++.hh ...
Message-Id: <20050831200730.214EA752EE2@mail.ossp.org>
Date: Wed, 31 Aug 2005 22:07:30 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Aug-2005 22:07:30
  Branch: HEAD                             Handle: 2005083121072900

  Added files:
    ossp-pkg/uuid           uuid++.pod
  Modified files:
    ossp-pkg/uuid           .cvsignore Makefile.in uuid++.cc uuid++.hh

  Log:
    ok, second attempt: complete rewrite from scratch of the C++ API. Now
    with a manual page and more methods. It is now providing the same
    functionality as the C API and does no longer miss some parts.

  Summary:
    Revision    Changes     Path
    1.5         +2  -1      ossp-pkg/uuid/.cvsignore
    1.32        +18 -2      ossp-pkg/uuid/Makefile.in
    1.2         +152 -150   ossp-pkg/uuid/uuid++.cc
    1.2         +54 -31     ossp-pkg/uuid/uuid++.hh
    1.1         +249 -0     ossp-pkg/uuid/uuid++.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/.cvsignore
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 .cvsignore
  --- ossp-pkg/uuid/.cvsignore	31 Aug 2005 11:16:18 -0000	1.4
  +++ ossp-pkg/uuid/.cvsignore	31 Aug 2005 20:07:29 -0000	1.5
  @@ -10,7 +10,8 @@
   uuid-config
   uuid-config.1
   uuid.pc
  +uuid.h
   uuid.1
   uuid.3
  -uuid.h
  +uuid++.3
   uuid
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	31 Aug 2005 14:29:56 -0000	1.31
  +++ ossp-pkg/uuid/Makefile.in	31 Aug 2005 20:07:29 -0000	1.32
  @@ -69,7 +69,7 @@
   PRG_NAME    = uuid
   PRG_OBJS    = uuid_cli.o
   
  -MAN_NAME    = uuid.3 uuid.1
  +MAN_NAME    = uuid.3 uuid++.3 uuid.1
   
   PERL_NAME   = perl/blib/lib/OSSP/uuid.pm
   PERL_OBJS   = perl/uuid.pm
  @@ -128,7 +128,7 @@
   uuid_cli.o: uuid_cli.c uuid.h
   uuid++.lo: uuid++.cc uuid++.hh
   
  -man: uuid.3 uuid-config.1 uuid.1
  +man: uuid.3 uuid++.3 uuid-config.1 uuid.1
   uuid.3: uuid.pod
   	V1=`$(SHTOOL) version -l c -d short $(top_srcdir)/uuid_vers.h`; \
   	V2=`$(SHTOOL) version -l c -d long $(top_srcdir)/uuid_vers.h`; \
  @@ -137,6 +137,14 @@
   	           --section=3 --center="Universally Unique Identifier" \
   	           --release="$$D" --date="OSSP uuid $$V1" $(srcdir)/uuid.pod | \
   	sed -e "s;UUID_VERSION_STR;$$V2;" >uuid.3
  +uuid++.3: uuid++.pod
  +	V1=`$(SHTOOL) version -l c -d short $(top_srcdir)/uuid_vers.h`; \
  +	V2=`$(SHTOOL) version -l c -d long $(top_srcdir)/uuid_vers.h`; \
  +	D=`$(SHTOOL) version -l c -d long $(top_srcdir)/uuid_vers.h | sed -e 's;.*(;;' -e 's;).*;;'`; \
  +	$(POD2MAN) --quotes=none \
  +	           --section=3 --center="Universally Unique Identifier" \
  +	           --release="$$D" --date="OSSP uuid $$V1" $(srcdir)/uuid++.pod | \
  +	sed -e "s;UUID_VERSION_STR;$$V2;" >uuid++.3
   uuid-config.1: uuid-config.pod
   	V1=`$(SHTOOL) version -l c -d short $(top_srcdir)/uuid_vers.h`; \
   	V2=`$(SHTOOL) version -l c -d long $(top_srcdir)/uuid_vers.h`; \
  @@ -203,6 +211,10 @@
   	    $(SHTOOL) install -c -m 644 $(srcdir)/uuid++.hh $(DESTDIR)$(includedir)/; \
   	fi
   	$(SHTOOL) install -c -m 644 $(srcdir)/uuid.3 $(DESTDIR)$(mandir)/man3/
  +	-@if [ ".$(WITH_CXX)" = .yes ]; then \
  +	    echo "$(SHTOOL) install -c -m 644 $(srcdir)/uuid++.3 $(DESTDIR)$(mandir)/man3/"; \
  +	    $(SHTOOL) install -c -m 644 $(srcdir)/uuid++.3 $(DESTDIR)$(mandir)/man3/; \
  +	fi
   	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libuuid.la $(DESTDIR)$(libdir)/
   	-@if [ ".$(WITH_DCE)" = .yes ]; then \
   	    $(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libuuid_dce.la $(DESTDIR)$(libdir)/; \
  @@ -227,6 +239,10 @@
   	    $(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libuuid++.la; \
   	fi
   	-$(RM) $(DESTDIR)$(mandir)/man3/uuid.3
  +	-@if [ ".$(WITH_CXX)" = .yes ]; then \
  +	    echo "$(RM) $(DESTDIR)$(mandir)/man3/uuid++.3"; \
  +	    $(RM) $(DESTDIR)$(mandir)/man3/uuid++.3; \
  +	fi
   	-$(RM) $(DESTDIR)$(includedir)/uuid.h
   	-@if [ ".$(WITH_DCE)" = .yes ]; then \
   	    echo "$(RM) $(DESTDIR)$(includedir)/uuid_dce.h"; \
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid++.cc
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid++.cc
  --- ossp-pkg/uuid/uuid++.cc	31 Aug 2005 14:29:56 -0000	1.1
  +++ ossp-pkg/uuid/uuid++.cc	31 Aug 2005 20:07:29 -0000	1.2
  @@ -32,254 +32,256 @@
   
   #include "uuid++.hh"
   
  -using namespace std;
  -
   /*
  -**  OBJECT CONSTRUCTORS AND DESTRUCTOR
  +**  ==== Low-Level C++ API (direct mapping of C API) ====
   */
   
   /*  standard constructor */
   uuid::uuid()
   {
  -    if (uuid_create(&ctx) != UUID_RC_OK)
  -        throw "unable to create UUID context";
  -}
  -
  -/*  standard destructor */
  -uuid::~uuid()
  -{
  -    uuid_destroy(ctx);
  +    uuid_rc_t rc;
  +    if ((rc = uuid_create(&ctx)) != UUID_RC_OK)
  +        throw uuid_error_t(rc);
   }
   
  -/*  construction: import of other C++ API object (= special C++ copy constructor) */
  +/*  copy constructor */
   uuid::uuid(const uuid &obj)
   {
       /* Notice: the copy constructor is the same as the assignment
  -       operator (with the object as the RHS) below, except that (1) no
  -       check for self-assignment is required, (2) no existing internals
  -       have to be destroyed and (3) no return value is given back. */
  -    if (uuid_clone(obj.ctx, &ctx) != UUID_RC_OK)
  -        throw "unable to clone UUID context";
  +       operator (with the object as the argument) below, except that
  +       (1) no check for self-assignment is required, (2) no existing
  +       internals have to be destroyed and (3) no return value is given back. */
  +    uuid_rc_t rc;
  +    if ((rc = uuid_clone(obj.ctx, &ctx)) != UUID_RC_OK)
  +        throw uuid_error_t(rc);
   }
   
  -/*  construction: import of other C API object */
  -uuid::uuid(uuid_t *obj)
  -{
  -    if (obj != NULL)
  -        ctx = obj;
  -    else {
  -        if (uuid_create(&ctx) != UUID_RC_OK)
  -            throw "unable to create UUID context";
  -    }
  +/*  extra constructor via C API object */
  +uuid::uuid(const uuid_t *obj)
  +{
  +    uuid_rc_t rc;
  +    if (obj == NULL)
  +        throw uuid_error_t(UUID_RC_ARG);
  +    if ((rc = uuid_clone(obj, &ctx)) != UUID_RC_OK)
  +        throw uuid_error_t(rc);
   }
   
  -/*  construction: import of binary representation */
  -uuid::uuid(const unsigned char *bin)
  +/*  extra constructor via binary representation */
  +uuid::uuid(const void *bin)
   {
  -    if (uuid_create(&ctx) != UUID_RC_OK)
  -        throw "unable to create UUID context";
  -    if (bin != NULL) {
  -        if (uuid_import(ctx, UUID_FMT_BIN, bin, UUID_LEN_BIN) != UUID_RC_OK)
  -            throw "unable to import UUID from binary representation";
  -    }
  +    uuid_rc_t rc;
  +    if (bin == NULL)
  +        throw uuid_error_t(UUID_RC_ARG);
  +    if ((rc = uuid_create(&ctx)) != UUID_RC_OK)
  +        throw uuid_error_t(rc);
  +    import(bin);
   }
   
  -/*  construction: import of string representation */
  +/*  extra constructor via string representation */
   uuid::uuid(const char *str)
   {
  -    if (uuid_create(&ctx) != UUID_RC_OK)
  -        throw "unable to create UUID context";
  -    if (str != NULL) {
  -        if (uuid_import(ctx, UUID_FMT_STR, str, strlen(str)) != UUID_RC_OK)
  -            throw "unable to import UUID from string representation";
  -    }
  +    uuid_rc_t rc;
  +    if (str == NULL)
  +        throw uuid_error_t(UUID_RC_ARG);
  +    if ((rc = uuid_create(&ctx)) != UUID_RC_OK)
  +        throw uuid_error_t(rc);
  +    import(str);
   }
   
  -/*
  -**  IMPORT METHODS
  -*/
  +/*  standard destructor */
  +uuid::~uuid()
  +{
  +    uuid_destroy(ctx);
  +}
   
  -/*  assignment: import of other C++ API object */
  -uuid &uuid::operator=(const uuid &rhs)
  +/*  assignment operator: import of other C++ API object */
  +uuid &uuid::operator=(const uuid &obj)
   {
  -    if (this == &rhs)
  +    uuid_rc_t rc;
  +    if (this == &obj)
           return *this;
  -    if (uuid_destroy(ctx) != UUID_RC_OK)
  -        throw "failed to destroy old UUID context";
  -    if (uuid_clone(rhs.ctx, &ctx) != UUID_RC_OK)
  -        throw "unable to clone UUID context";
  +    if ((rc = uuid_destroy(ctx)) != UUID_RC_OK)
  +        throw uuid_error_t(rc);
  +    if ((rc = uuid_clone(obj.ctx, &ctx)) != UUID_RC_OK)
  +        throw uuid_error_t(rc);
       return *this;
   }
   
  -/*  assignment: import of other C API object */
  -uuid &uuid::operator=(const uuid_t *rhs)
  +/*  assignment operator: import of other C API object */
  +uuid &uuid::operator=(const uuid_t *obj)
   {
  -    if (rhs == NULL)
  -        throw "invalid RHS C object";
  -    if (uuid_clone((uuid_t *)rhs, &ctx) != UUID_RC_OK)
  -        throw "unable to clone UUID context";
  +    uuid_rc_t rc;
  +    if (obj == NULL)
  +        throw uuid_error_t(UUID_RC_ARG);
  +    if ((rc = uuid_clone(obj, &ctx)) != UUID_RC_OK)
  +        throw uuid_error_t(rc);
       return *this;
   }
   
  -/*  assignment: import of binary representation */
  -uuid &uuid::operator=(const unsigned char *rhs)
  +/*  assignment operator: import of binary representation */
  +uuid &uuid::operator=(const void *bin)
   {
  -    if (rhs == NULL)
  -        throw "invalid RHS string";
  -    if (uuid_import(ctx, UUID_FMT_BIN, (const void *)rhs, UUID_LEN_BIN) != UUID_RC_OK)
  -        throw "unable to import into source UUID context";
  +    if (bin == NULL)
  +        throw uuid_error_t(UUID_RC_ARG);
  +    import(bin);
       return *this;
   }
   
  -/*  assignment: import of string representation */
  -uuid &uuid::operator=(const char *rhs)
  +/*  assignment operator: import of string representation */
  +uuid &uuid::operator=(const char *str)
   {
  -    if (rhs == NULL)
  -        throw "invalid RHS string";
  -    if (uuid_import(ctx, UUID_FMT_STR, (const void *)rhs, strlen(rhs)) != UUID_RC_OK)
  -        throw "unable to import into source UUID context";
  +    if (str == NULL)
  +        throw uuid_error_t(UUID_RC_ARG);
  +    import(str);
       return *this;
   }
   
  -/*
  -**  GENERATION METHODS
  -*/
  +/*  method: clone object */
  +uuid uuid::clone(void)
  +{
  +    return new uuid(this);
  +}
   
  -/*  generation: loading existing UUID by name */
  +/*  method: loading existing UUID by name */
   void uuid::load(const char *name)
   {
  +    uuid_rc_t rc;
       if (name == NULL)
  -        throw "invalid UUID name";
  -    if (uuid_load(ctx, name) != UUID_RC_OK)
  -        throw "unable to load UUID by name";
  +        throw uuid_error_t(UUID_RC_ARG);
  +    if ((rc = uuid_load(ctx, name)) != UUID_RC_OK)
  +        throw uuid_error_t(rc);
       return;
   }
   
  -/*  generation: making new UUID one from scratch */
  +/*  method: making new UUID one from scratch */
   void uuid::make(unsigned int mode, ...)
   {
  -    uuid_rc_t rv;
  +    uuid_rc_t rc;
       va_list ap;
   
       va_start(ap, mode);
       if ((mode & UUID_MAKE_V3) || (mode & UUID_MAKE_V5)) {
  -        const char *ns   = (const char *)va_arg(ap, char *);
  +        const uuid *ns = (const uuid *)va_arg(ap, const uuid *);
           const char *name = (const char *)va_arg(ap, char *);
           if (ns == NULL || name == NULL)
  -            throw "invalid arguments";
  -        rv = uuid_make(ctx, mode, ns, name);
  +            throw uuid_error_t(UUID_RC_ARG);
  +        rc = uuid_make(ctx, mode, ns->ctx, name);
       }
       else
  -        rv = uuid_make(ctx, mode);
  +        rc = uuid_make(ctx, mode);
       va_end(ap);
  -    if (rv != UUID_RC_OK)
  -        throw "unable to make new UUID";
  +    if (rc != UUID_RC_OK)
  +        throw uuid_error_t(rc);
       return;
   }
   
  -/*
  -**  COMPARISON METHODS
  -*/
  -
  -/*  comparison: is-Nil-UUID */
  +/*  method: comparison for Nil UUID */
   int uuid::isnil(void)
   {
  +    uuid_rc_t rc;
       int rv;
   
  -    if (uuid_isnil(ctx, &rv) != UUID_RC_OK)
  -        throw "unable to compare UUID for being Nil-UUID";
  +    if ((rc = uuid_isnil(ctx, &rv)) != UUID_RC_OK)
  +        throw uuid_error_t(rc);
       return rv;
   }
   
  -/*  comparison: equality */
  -int uuid::operator==(const uuid &rhs)
  +/*  method: comparison against other object */
  +int uuid::compare(const uuid &obj)
   {
  +    uuid_rc_t rc;
       int rv;
   
  -    if (uuid_compare(ctx, rhs.ctx, &rv) != UUID_RC_OK)
  -        throw "unable to compare UUID contexts";
  -    return (rv == 0);
  +    if ((rc = uuid_compare(ctx, obj.ctx, &rv)) != UUID_RC_OK)
  +        throw uuid_error_t(rc);
  +    return rv;
   }
   
  -/*  comparison: inequality */
  -int uuid::operator!=(const uuid &rhs)
  +/*  method: comparison for equality */
  +int uuid::operator==(const uuid &obj)
   {
  -    int rv;
  -
  -    if (uuid_compare(ctx, rhs.ctx, &rv) != UUID_RC_OK)
  -        throw "unable to compare UUID contexts";
  -    return (rv != 0);
  +    return (compare(obj) == 0);
   }
   
  -/*  comparison: lower-than */
  -int uuid::operator<(const uuid &rhs)
  +/*  method: comparison for inequality */
  +int uuid::operator!=(const uuid &obj)
   {
  -    int rv;
  -
  -    if (uuid_compare(ctx, rhs.ctx, &rv) != UUID_RC_OK)
  -        throw "unable to compare UUID contexts";
  -    return (rv < 0);
  +    return (compare(obj) != 0);
   }
   
  -/*  comparison: lower-than-or-equal */
  -int uuid::operator<=(const uuid &rhs)
  +/*  method: comparison for lower-than */
  +int uuid::operator<(const uuid &obj)
   {
  -    int rv;
  -
  -    if (uuid_compare(ctx, rhs.ctx, &rv) != UUID_RC_OK)
  -        throw "unable to compare UUID contexts";
  -    return (rv <= 0);
  +    return (compare(obj) < 0);
   }
   
  -/*  comparison: greater-than */
  -int uuid::operator>(const uuid &rhs)
  +/*  method: comparison for lower-than-or-equal */
  +int uuid::operator<=(const uuid &obj)
   {
  -    int rv;
  -
  -    if (uuid_compare(ctx, rhs.ctx, &rv) != UUID_RC_OK)
  -        throw "unable to compare UUID contexts";
  -    return (rv > 0);
  +    return (compare(obj) <= 0);
   }
   
  -/*  comparison: greater-than-or-equal */
  -int uuid::operator>=(const uuid &rhs)
  +/*  method: comparison for greater-than */
  +int uuid::operator>(const uuid &obj)
   {
  -    int rv;
  -
  -    if (uuid_compare(ctx, rhs.ctx, &rv) != UUID_RC_OK)
  -        throw "unable to compare UUID contexts";
  -    return (rv >= 0);
  +    return (compare(obj) > 0);
   }
   
  -/*
  -**  EXPORT METHODS
  -*/
  -
  -/*  export: object representation */
  -uuid_t *uuid::object(void)
  +/*  method: comparison for greater-than-or-equal */
  +int uuid::operator>=(const uuid &obj)
   {
  -    return ctx;
  +    return (compare(obj) >= 0);
   }
           
  -/*  export: binary representation */
  -unsigned char *uuid::binary(void)
  +/*  method: import binary representation */
  +void uuid::import(const void *bin)
   {
  -    unsigned char *bin;
  +    uuid_rc_t rc;
  +    if ((rc = uuid_import(ctx, UUID_FMT_BIN, bin, UUID_LEN_BIN)) != UUID_RC_OK)
  +        throw uuid_error_t(rc);
  +}
   
  -    bin = NULL;
  -    if (uuid_export(ctx, UUID_FMT_BIN, (void **)&bin, NULL) != UUID_RC_OK)
  -        throw "unable to export UUID context";
  +/*  method: import string representation */
  +void uuid::import(const char *str)
  +{
  +    uuid_rc_t rc;
  +    if ((rc = uuid_import(ctx, UUID_FMT_STR, str, UUID_LEN_STR)) != UUID_RC_OK)
  +        throw uuid_error_t(rc);
  +}
  +        
  +/*  method: export binary representation */
  +void *uuid::binary(void)
  +{
  +    uuid_rc_t rc;
  +    void *bin = NULL;
  +    if ((rc = uuid_export(ctx, UUID_FMT_BIN, &bin, NULL)) != UUID_RC_OK)
  +        throw uuid_error_t(rc);
       return bin;
   }
   
  -/*  export: string representation */
  +/*  method: export string representation */
   char *uuid::string(void)
   {
  -    char *str;
  -
  -    str = NULL;
  -    if (uuid_export(ctx, UUID_FMT_STR, (void **)&str, NULL) != UUID_RC_OK)
  -        throw "unable to export UUID context";
  +    uuid_rc_t rc;
  +    char *str = NULL;
  +    if ((rc = uuid_export(ctx, UUID_FMT_STR, (void **)&str, NULL)) != UUID_RC_OK)
  +        throw uuid_error_t(rc);
       return str;
   }
   
  +/*  method: export textual summary representation */
  +char *uuid::summary(void)
  +{
  +    uuid_rc_t rc;
  +    char *txt = NULL;
  +    if ((rc = uuid_export(ctx, UUID_FMT_TXT, (void **)&txt, NULL)) != UUID_RC_OK)
  +        throw uuid_error_t(rc);
  +    return txt;
  +}
  +
  +/*  method: return library version */
  +unsigned long uuid::version(void)
  +{
  +    return uuid_version();
  +}
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid++.hh
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid++.hh
  --- ossp-pkg/uuid/uuid++.hh	31 Aug 2005 14:29:56 -0000	1.1
  +++ ossp-pkg/uuid/uuid++.hh	31 Aug 2005 20:07:29 -0000	1.2
  @@ -31,43 +31,66 @@
   #define __UUIDXX_HH__
   
   /* required C API header */
  +#include <stdlib.h>
   #include "uuid.h"
   
  +/* UUID object class */
   class uuid {
  +    public:
  +        /* construction & destruction */
  +                      uuid         ();                         /* standard constructor */
  +                      uuid         (const uuid   &_obj);       /* copy     constructor */
  +                      uuid         (const uuid_t *_obj);       /* import   constructor */
  +                      uuid         (const void   *_bin);       /* import   constructor */
  +                      uuid         (const char   *_str);       /* import   constructor */
  +                     ~uuid         ();                         /* destructor */
  +
  +        /* copying & cloning */
  +        uuid         &operator=    (const uuid   &_obj);       /* copy   assignment operator */
  +        uuid         &operator=    (const uuid_t *_obj);       /* import assignment operator */
  +        uuid         &operator=    (const void   *_bin);       /* import assignment operator */
  +        uuid         &operator=    (const char   *_str);       /* import assignment operator */
  +        uuid          clone        (void);                     /* regular method */
  +
  +        /* content generation */
  +        void          load         (const char *_name);        /* regular method */
  +        void          make         (unsigned int _mode, ...);  /* regular method */
  +
  +        /* content comparison */
  +        int           isnil        (void);                     /* regular method */
  +        int           compare      (const uuid &_obj);         /* regular method */
  +        int           operator==   (const uuid &_obj);         /* comparison operator */
  +        int           operator!=   (const uuid &_obj);         /* comparison operator */
  +        int           operator<    (const uuid &_obj);         /* comparison operator */
  +        int           operator<=   (const uuid &_obj);         /* comparison operator */
  +        int           operator>    (const uuid &_obj);         /* comparison operator */
  +        int           operator>=   (const uuid &_obj);         /* comparison operator */
  +
  +        /* content importing & exporting */
  +        void          import       (const void *_bin);         /* regular method */
  +        void          import       (const char *_str);         /* regular method */
  +        void         *binary       (void);                     /* regular method */
  +        char         *string       (void);                     /* regular method */
  +        char         *summary      (void);                     /* regular method */
  +
  +        unsigned long version      (void);                     /* regular method */
  +
       private:
           uuid_t *ctx;
  +};
  +
  +/* UUID exception class */
  +class uuid_error_t {
       public:
  -        /* object constructors and destructor */
  -        uuid();                                      /* standard constructor */
  -        ~uuid();                                     /* standard destructor */
  -        uuid(const uuid &obj);                       /* construction: import of other C++ API object */
  -        uuid(uuid_t *obj);                           /* construction: import of other C   API object */
  -        uuid(const unsigned char *str);              /* construction: import of binary representation */
  -        uuid(const char *str);                       /* construction: import of string representation */
  -
  -        /* import methods */
  -        uuid &operator=  (const uuid &rhs);          /* assignment: import of other C++ API object */
  -        uuid &operator=  (const uuid_t *rhs);        /* assignment: import of other C   API object */
  -        uuid &operator=  (const unsigned char *rhs); /* assignment: import of binary representation */
  -        uuid &operator=  (const char *rhs);          /* assignment: import of string representation */
  -
  -        /* generation methods */
  -        void load        (const char *name);         /* generation: loading existing UUID by name */
  -        void make        (unsigned int mode, ...);   /* generation: making new UUID one from scratch */
  -
  -        /* comparison methods */
  -        int  isnil       (void);                     /* comparison: is-Nil-UUID */
  -        int  operator==  (const uuid &rhs);          /* comparison: equality */
  -        int  operator!=  (const uuid &rhs);          /* comparison: inequality */
  -        int  operator<   (const uuid &rhs);          /* comparison: lower-than */
  -        int  operator<=  (const uuid &rhs);          /* comparison: lower-than-or-equal */
  -        int  operator>   (const uuid &rhs);          /* comparison: greater-than */
  -        int  operator>=  (const uuid &rhs);          /* comparison: greater-than-or-equal */
  -
  -        /* export methods */                           
  -        uuid_t        *object (void);                /* export: object representation */
  -        unsigned char *binary (void);                /* export: binary representation */
  -        char          *string (void);                /* export: string representation */
  +                      uuid_error_t ()                     { code(UUID_RC_OK); };
  +                      uuid_error_t (uuid_rc_t _code)      { code(_code); };
  +                     ~uuid_error_t ()                     { };
  +        void          code         (uuid_rc_t _code)      { rc = _code; };
  +        uuid_rc_t     code         (void)                 { return rc; };
  +        char         *string       (void)                 { return uuid_error(rc); };
  +
  +    private:
  +        uuid_rc_t rc;
   };
   
   #endif /* __UUIDXX_HH__ */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid++.pod
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid++.pod
  --- /dev/null	2005-08-31 22:07:25 +0200
  +++ uuid++.pod	2005-08-31 22:07:30 +0200
  @@ -0,0 +1,249 @@
  +##
  +##  OSSP uuid - Universally Unique Identifier
  +##  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP uuid, a library for the generation
  +##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  uuid++.pod: manual page for C++ API
  +##
  +
  +=pod
  +
  +=head1 NAME
  +
  +B<OSSP uuid> - B<Universally Unique Identifier> (C++ API)
  +
  +=head1 VERSION
  +
  +OSSP uuid UUID_VERSION_STR
  +
  +=head1 DESCRIPTION
  +
  +B<uuid++> is the ISO-C++ language binding of the B<OSSP uuid> C API.
  +It provides a thin ISO-C++ class B<uuid> wrapping the ISO-C API type
  +B<uuid_t>.
  +
  +=head1 APPLICATION PROGRAMMING INTERFACE
  +
  +The ISO-C++ Application Programming Interface (API) of B<OSSP uuid>
  +consists of the following components:
  +
  +=head2 CONSTANTS
  +
  +The constants are the same to those provided by the ISO-C API.
  +See uuid(3) for details.
  +
  +=head2 CLASSES
  +
  +The following classes are provided:
  +
  +=over 4
  +
  +=item B<uuid>
  +
  +This is the class corresponding to the C API type B<uuid_t>.
  +It is the main object.
  +
  +=item B<uuid_error_t>
  +
  +This is the class corresponding to the C API function B<uuid_error>.
  +It is the object thrown as an exception in case of any errors.
  +
  +=back
  +
  +=head2 METHODS
  +
  +The following methods are provided:
  +
  +=over 4
  +
  +=item B<uuid>();
  +
  +The standard constructor.
  +
  +=item B<uuid>(const uuid &_obj);
  +
  +The copy constructor for B<uuid> class.
  +
  +=item B<uuid>(const uuid_t *_obj);
  +
  +The import constructor for C API objects.
  +
  +=item B<uuid>(const void *_bin);
  +
  +The import constructor for binary representation.
  +
  +=item B<uuid>(const char *_str);
  +
  +The import constructor for string representation.
  +
  +=item ~B<uuid>();
  +
  +The standard destructor for B<uuid> class.
  +
  +=item uuid &B<uuid::operator=>(const uuid &_obj);
  +
  +The assignment operator corresponding to the copy constructor.
  +
  +=item uuid &B<uuid::operator=>(const uuid_t *_obj);
  +
  +The assignment operator corresponding to the import constructor for C API objects.
  +
  +=item uuid &B<uuid::operator=>(const void *_bin);
  +
  +The assignment operator corresponding to the import constructor for binary representation.
  +
  +=item uuid &B<uuid::operator=>(const char *_str);
  +
  +The assignment operator corresponding to the import constructor for string representation.
  +
  +=item uuid B<uuid::clone>(void);
  +
  +Regular method corresponding to the C API function B<uuid_clone>.
  +
  +=item void B<uuid::load>(const char *_name);
  +
  +Regular method corresponding to the C API function B<uuid_load>.
  +
  +=item void B<uuid::make>(unsigned int _mode, ...);
  +
  +Regular method corresponding to the C API function B<uuid_make>.
  +
  +=item int B<uuid::isnil>(void);
  +
  +Regular method corresponding to the C API function B<uuid_isnil>.
  +
  +=item int B<uuid::compare>(const uuid &_obj);
  +
  +Regular method corresponding to the C API function B<uuid_compare>.
  +
  +=item int B<uuid::operator==>(const uuid &_obj);
  +
  +The comparison operator corresponding to B<uuid_compare> usage for equality.
  +
  +=item int B<uuid::operator!=>(const uuid &_obj);
  +
  +The comparison operator corresponding to B<uuid_compare> usage for inequality.
  +
  +=item int B<uuid::operatorE<lt>>(const uuid &_obj);
  +
  +The comparison operator corresponding to B<uuid_compare> usage for less-than.
  +
  +=item int B<uuid::operatorE<lt>=>(const uuid &_obj);
  +
  +The comparison operator corresponding to B<uuid_compare> usage for less-than-or-equal.
  +
  +=item int B<uuid::operatorE<gt>>(const uuid &_obj);
  +
  +The comparison operator corresponding to B<uuid_compare> usage for greater-than.
  +
  +=item int B<uuid::operatorE<gt>=>(const uuid &_obj);
  +
  +The comparison operator corresponding to B<uuid_compare> usage for greater-than-or-equal.
  +
  +=item void B<uuid::import>(const void *_bin);
  +
  +Regular method corresponding to the C API function B<uuid_import> for binary representation usage.
  +
  +=item void B<uuid::import>(const char *_str);
  +
  +Regular method corresponding to the C API function B<uuid_import> for string representation usage.
  +
  +=item void *B<uuid::binary>(void);
  +
  +Regular method corresponding to the C API function B<uuid_export> for binary representation usage.
  +
  +=item char *B<uuid::string>(void);
  +
  +Regular method corresponding to the C API function B<uuid_export> for string representation usage.
  +
  +=item char *B<uuid::summary>(void);
  +
  +Regular method corresponding to the C API function B<uuid_export> for textual summary representation usage.
  +
  +=item unsigned long B<uuid::version>(void);
  +
  +Regular method corresponding to the C API function B<uuid_version>.
  +
  +=item B<uuid_error_t>()
  +
  +The standard constructor for B<uuid_error_t> class.
  +
  +=item B<uuid_error_t>(uuid_rc_t _code)
  +
  +The standard constructor for B<uuid_error_t> class with return code initialization.
  +
  +=item ~B<uuid_error_t>()
  +
  +The standard destructor for B<uuid_error_t> class.
  +
  +=item void B<uuid_error_t::code>(uuid_rc_t _code)
  +
  +Regular method for setting the return code.
  +
  +=item uuid_rc_t B<uuid_error_t::code>(void)
  +
  +Regular method for fetching the return code.
  +
  +=item char *B<uuid_error_t::string>(void)
  +
  +Regular method for fetching the string corresponding to the current return code.
  +
  +=back
  +
  +=head1 EXAMPLE
  +
  +The following shows an example usage of the C++ API. Exception handling is
  +omitted for code simplification and has to be re-added for production
  +code.
  +
  + /* generate a DCE 1.1 v1 UUID from system environment */
  + char *uuid_v1(void)
  + {
  +     uuid id;
  +     char *str;
  +
  +     id.make(UUID_MAKE_V1);
  +     str = id.string();
  +     return str;
  + }
  +
  + /* generate a DCE 1.1 v3 UUID from an URL */
  + char *uuid_v3(const char *url)
  + {
  +     uuid id;
  +     uuid id_ns;
  +     char *str;
  +
  +     id_ns.load("ns:URL");
  +     id.make(UUID_MAKE_V3, &id_ns, url);
  +     str = id.string();
  +     return str;
  + }
  +
  +=head1 SEE ALSO
  +
  +uuid(3).
  +
  +=cut
  +
  @@ .

From ossp-cvs-owner@ossp.org  Wed Aug 31 22:08:15 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 83413752EE2; Wed, 31 Aug 2005 22:08:15 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid++.cc
Message-Id: <20050831200815.83413752EE2@mail.ossp.org>
Date: Wed, 31 Aug 2005 22:08:15 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Aug-2005 22:08:15
  Branch: HEAD                             Handle: 2005083121081500

  Modified files:
    ossp-pkg/uuid           uuid++.cc

  Log:
    cleanup source

  Summary:
    Revision    Changes     Path
    1.3         +2  -6      ossp-pkg/uuid/uuid++.cc
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid++.cc
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid++.cc
  --- ossp-pkg/uuid/uuid++.cc	31 Aug 2005 20:07:29 -0000	1.2
  +++ ossp-pkg/uuid/uuid++.cc	31 Aug 2005 20:08:15 -0000	1.3
  @@ -32,10 +32,6 @@
   
   #include "uuid++.hh"
   
  -/*
  -**  ==== Low-Level C++ API (direct mapping of C API) ====
  -*/
  -
   /*  standard constructor */
   uuid::uuid()
   {
  @@ -232,7 +228,7 @@
   {
       return (compare(obj) >= 0);
   }
  -        
  +
   /*  method: import binary representation */
   void uuid::import(const void *bin)
   {
  @@ -248,7 +244,7 @@
       if ((rc = uuid_import(ctx, UUID_FMT_STR, str, UUID_LEN_STR)) != UUID_RC_OK)
           throw uuid_error_t(rc);
   }
  -        
  +
   /*  method: export binary representation */
   void *uuid::binary(void)
   {
  @@ .

From ossp-cvs-owner@ossp.org  Wed Aug 31 22:08:54 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 4C541752EE2; Wed, 31 Aug 2005 22:08:54 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ NEWS
Message-Id: <20050831200854.4C541752EE2@mail.ossp.org>
Date: Wed, 31 Aug 2005 22:08:54 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Aug-2005 22:08:54
  Branch: HEAD                             Handle: 2005083121085400

  Modified files:
    ossp-pkg/uuid           NEWS

  Log:
    cleanup

  Summary:
    Revision    Changes     Path
    1.5         +3  -2      ossp-pkg/uuid/NEWS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/NEWS
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 NEWS
  --- ossp-pkg/uuid/NEWS	31 Aug 2005 14:32:50 -0000	1.4
  +++ ossp-pkg/uuid/NEWS	31 Aug 2005 20:08:54 -0000	1.5
  @@ -12,8 +12,9 @@
     change descriptions, please have a look at the ChangeLog file.
   
     Changes between 1.2 and 1.3
  -    o Added experimental C++ API binding.
  -    o Added Perl TIE-style API binding.
  +    o Added new C++ API.
  +    o Added Perl TIE-style API.
  +    o Added Perl Data::UUID backward compatibility API.
     Changes between 1.1 and 1.2
       o Added support for version 5 UUIDs (name-based, SHA-1)
     Changes between 1.0 and 1.1
  @@ .

From ossp-cvs-owner@ossp.org  Wed Aug 31 22:10:26 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id BD830752EE2; Wed, 31 Aug 2005 22:10:26 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ README uuid.pod uuid_cli.pod
Message-Id: <20050831201026.BD830752EE2@mail.ossp.org>
Date: Wed, 31 Aug 2005 22:10:26 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Aug-2005 22:10:26
  Branch: HEAD                             Handle: 2005083121102500

  Modified files:
    ossp-pkg/uuid           README uuid.pod uuid_cli.pod

  Log:
    ok, we now cover C++, too

  Summary:
    Revision    Changes     Path
    1.30        +6  -6      ossp-pkg/uuid/README
    1.30        +6  -6      ossp-pkg/uuid/uuid.pod
    1.22        +6  -6      ossp-pkg/uuid/uuid_cli.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 README
  --- ossp-pkg/uuid/README	31 Aug 2005 09:59:45 -0000	1.29
  +++ ossp-pkg/uuid/README	31 Aug 2005 20:10:25 -0000	1.30
  @@ -9,12 +9,12 @@
   
     ABSTRACT
   
  -  OSSP uuid is a ISO-C and Perl application programming interface (API)
  -  and corresponding command line interface (CLI) for the generation of
  -  DCE 1.1, ISO/IEC 11578:1996 and RFC 4122 compliant Universally Unique
  -  Identifier (UUID). It supports DCE 1.1 variant UUIDs of version 1
  -  (time and node based), version 3 (name based, MD5), version 4 (random
  -  number based) and version 5 (name based, SHA-1).
  +  OSSP uuid is a ISO-C, ISO-C++ and Perl application programming
  +  interface (API) and corresponding command line interface (CLI) for
  +  the generation of DCE 1.1, ISO/IEC 11578:1996 and RFC 4122 compliant
  +  Universally Unique Identifier (UUID). It supports DCE 1.1 variant
  +  UUIDs of version 1 (time and node based), version 3 (name based, MD5),
  +  version 4 (random number based) and version 5 (name based, SHA-1).
   
     UUIDs are 128 bit numbers which are intended to have a high likelihood
     of uniqueness over space and time and are computationally difficult
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	31 Aug 2005 19:20:43 -0000	1.29
  +++ ossp-pkg/uuid/uuid.pod	31 Aug 2005 20:10:25 -0000	1.30
  @@ -39,12 +39,12 @@
   
   =head1 DESCRIPTION
   
  -B<OSSP uuid> is a ISO-C and Perl application programming interface (API)
  -and corresponding command line interface (CLI) for the generation of
  -DCE 1.1, ISO/IEC 11578:1996 and RFC 4122 compliant I<Universally Unique
  -Identifier> (UUID). It supports DCE 1.1 variant UUIDs of version 1 (time
  -and node based), version 3 (name based, MD5), version 4 (random number
  -based) and version 5 (name based, SHA-1).
  +B<OSSP uuid> is a ISO-C, ISO-C++ and Perl application programming
  +interface (API) and corresponding command line interface (CLI) for
  +the generation of DCE 1.1, ISO/IEC 11578:1996 and RFC 4122 compliant
  +I<Universally Unique Identifier> (UUID). It supports DCE 1.1 variant
  +UUIDs of version 1 (time and node based), version 3 (name based, MD5),
  +version 4 (random number based) and version 5 (name based, SHA-1).
   
   UUIDs are 128 bit numbers which are intended to have a high likelihood
   of uniqueness over space and time and are computationally difficult
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.pod
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 uuid_cli.pod
  --- ossp-pkg/uuid/uuid_cli.pod	30 Aug 2005 20:38:10 -0000	1.21
  +++ ossp-pkg/uuid/uuid_cli.pod	31 Aug 2005 20:10:25 -0000	1.22
  @@ -56,12 +56,12 @@
   
   =head1 DESCRIPTION
   
  -B<OSSP uuid> is a ISO-C and Perl application programming interface (API)
  -and corresponding command line interface (CLI) for the generation of DCE
  -1.1, ISO/IEC 11578:1996 and RFC 4122 compliant I<Universally Unique
  -Identifier> (UUID). It supports DCE 1.1 variant UUIDs of version 1 (time
  -and node based), version 3 (name based, MD5), version 4 (random number
  -based) and version 5 (name based, SHA-1).
  +B<OSSP uuid> is a ISO-C, ISO-C++ and Perl application programming
  +interface (API) and corresponding command line interface (CLI) for
  +the generation of DCE 1.1, ISO/IEC 11578:1996 and RFC 4122 compliant
  +I<Universally Unique Identifier> (UUID). It supports DCE 1.1 variant
  +UUIDs of version 1 (time and node based), version 3 (name based, MD5),
  +version 4 (random number based) and version 5 (name based, SHA-1).
   
   UUIDs are 128 bit numbers which are intended to have a high likelihood
   of uniqueness over space and time and are computationally difficult
  @@ .

From ossp-cvs-owner@ossp.org  Thu Sep  1 22:50:18 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 647C1752EE2; Thu,  1 Sep 2005 22:50:18 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.c
Message-Id: <20050901205018.647C1752EE2@mail.ossp.org>
Date: Thu,  1 Sep 2005 22:50:18 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Sep-2005 22:50:18
  Branch: HEAD                             Handle: 2005090121501800

  Modified files:
    ossp-pkg/uuid           uuid.c

  Log:
    fix uuid_clone() function

  Summary:
    Revision    Changes     Path
    1.55        +1  -1      ossp-pkg/uuid/uuid.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.54 -r1.55 uuid.c
  --- ossp-pkg/uuid/uuid.c	31 Aug 2005 19:21:13 -0000	1.54
  +++ ossp-pkg/uuid/uuid.c	1 Sep 2005 20:50:18 -0000	1.55
  @@ -162,7 +162,7 @@
           return UUID_RC_MEM;
   
       /* clone entire internal state */
  -    memcpy(obj, uuid, sizeof(uuid));
  +    memcpy(obj, uuid, sizeof(uuid_t));
   
       /* re-initialize with new PRNG, MD5 and SHA1 sub-objects */
       if (prng_create(&obj->prng) != PRNG_RC_OK)
  @@ .

From ossp-cvs-owner@ossp.org  Thu Sep  1 23:43:03 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 917E6752EE2; Thu,  1 Sep 2005 23:43:03 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ devtool.conf
Message-Id: <20050901214303.917E6752EE2@mail.ossp.org>
Date: Thu,  1 Sep 2005 23:43:03 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Sep-2005 23:43:03
  Branch: HEAD                             Handle: 2005090122430300

  Modified files:
    ossp-pkg/uuid           devtool.conf

  Log:
    Upgrade to GNU libtool 1.5.20

  Summary:
    Revision    Changes     Path
    1.18        +1  -1      ossp-pkg/uuid/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 devtool.conf
  --- ossp-pkg/uuid/devtool.conf	31 Aug 2005 14:29:56 -0000	1.17
  +++ ossp-pkg/uuid/devtool.conf	1 Sep 2005 21:43:03 -0000	1.18
  @@ -4,7 +4,7 @@
   
   %autogen
       @autogen shtool   2.0.2  "2.0.*" all
  -    @autogen libtool  1.5.18 "1.5*"
  +    @autogen libtool  1.5.20 "1.5*"
       @autogen autoconf 2.59   "2.5[3-9]*"
   
   %autoclean
  @@ .

From ossp-cvs-owner@ossp.org  Fri Sep  2 00:24:03 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 00F48752EE2; Fri,  2 Sep 2005 00:24:02 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog Makefile.in devtool.conf ossp-pkg...
Message-Id: <20050901222402.00F48752EE2@mail.ossp.org>
Date: Fri,  2 Sep 2005 00:24:02 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Sep-2005 00:24:02
  Branch: HEAD                             Handle: 2005090123240101

  Added files:
    ossp-pkg/uuid/php       .cvsignore Makefile.local config.m4 uuid.c
                            uuid.php4 uuid.php5 uuid.ts
  Modified files:
    ossp-pkg/uuid           ChangeLog Makefile.in devtool.conf uuid.ac

  Log:
    Add an experimental PHP 4/5 language API binding which
    can be enabled under build-time with opption --with-php.

  Summary:
    Revision    Changes     Path
    1.86        +7  -0      ossp-pkg/uuid/ChangeLog
    1.33        +26 -1      ossp-pkg/uuid/Makefile.in
    1.19        +1  -0      ossp-pkg/uuid/devtool.conf
    1.1         +22 -0      ossp-pkg/uuid/php/.cvsignore
    1.1         +69 -0      ossp-pkg/uuid/php/Makefile.local
    1.1         +43 -0      ossp-pkg/uuid/php/config.m4
    1.1         +525 -0     ossp-pkg/uuid/php/uuid.c
    1.1         +78 -0      ossp-pkg/uuid/php/uuid.php4
    1.1         +81 -0      ossp-pkg/uuid/php/uuid.php5
    1.1         +161 -0     ossp-pkg/uuid/php/uuid.ts
    1.17        +23 -0      ossp-pkg/uuid/uuid.ac
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.85 -r1.86 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	31 Aug 2005 19:22:48 -0000	1.85
  +++ ossp-pkg/uuid/ChangeLog	1 Sep 2005 22:24:01 -0000	1.86
  @@ -13,6 +13,13 @@
   
     Changes between 1.2.1 and 1.3.0 (30-Aug-2005 to xx-XXX-2005)
   
  +   o Add an experimental PHP 4/5 language API binding which
  +     can be enabled under build-time with opption --with-php.
  +     [Ralf S. Engelschall]
  +   
  +   o Upgrade to GNU libtool 1.5.20
  +     [Ralf S. Engelschall]
  +
      o Add missing "const" in manual page.
        [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	31 Aug 2005 20:07:29 -0000	1.32
  +++ ossp-pkg/uuid/Makefile.in	1 Sep 2005 22:24:01 -0000	1.33
  @@ -56,6 +56,7 @@
   TRUE        = true
   POD2MAN     = pod2man
   PERL        = @PERL@
  +PHP         = @PHP@
   
   LIB_NAME    = libuuid.la
   LIB_OBJS    = uuid.lo uuid_md5.lo uuid_sha1.lo uuid_prng.lo uuid_mac.lo uuid_ui64.lo uuid_str.lo
  @@ -74,12 +75,16 @@
   PERL_NAME   = perl/blib/lib/OSSP/uuid.pm
   PERL_OBJS   = perl/uuid.pm
   
  -TARGETS     = $(LIB_NAME) @DCE_NAME@ @CXX_NAME@ $(PRG_NAME) @PERL_NAME@
  +PHP_NAME    = php/modules/uuid.so
  +PHP_OBJS    = php/uuid.c
  +
  +TARGETS     = $(LIB_NAME) @DCE_NAME@ @CXX_NAME@ $(PRG_NAME) @PERL_NAME@ @PHP_NAME@
   
   WITH_DCE         = @WITH_DCE@
   WITH_CXX         = @WITH_CXX@
   WITH_PERL        = @WITH_PERL@
   WITH_PERL_COMPAT = @WITH_PERL_COMPAT@
  +WITH_PHP         = @WITH_PHP@
   
   .SUFFIXES:
   .SUFFIXES: .c .cc .o .lo
  @@ -117,6 +122,10 @@
   	@cd perl && $(PERL) Makefile.PL PREFIX=$(prefix) COMPAT=$(WITH_PERL_COMPAT) && $(MAKE) $(MFLAGS) all
   	@touch $(PERL_NAME)
   
  +$(PHP_NAME): $(PHP_OBJS) $(LIB_NAME)
  +	@cd php && $(MAKE) $(MFLAGS) -f Makefile.local PHP=$(PHP)
  +	@touch $(PERL_NAME)
  +
   uuid.lo: uuid.c config.h uuid.h uuid_md5.h uuid_sha1.h uuid_prng.h uuid_mac.h uuid_ui64.h uuid_str.h uuid_bm.h uuid_ac.h
   uuid_mac.lo: uuid_mac.c config.h uuid_mac.h
   uuid_md5.lo: uuid_md5.c uuid_md5.h
  @@ -190,6 +199,10 @@
   	    echo "==== Perl bindings to C API"; \
   	    (cd perl && $(MAKE) $(MFLAGS) test); \
   	fi
  +	-@if [ ".$(WITH_PHP)" = .yes ]; then \
  +	    echo "==== PHP bindings to C API"; \
  +	    (cd php && $(MAKE) $(MFLAGS) -f Makefile.local test PHP=$(PHP)); \
  +	fi
   
   install:
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
  @@ -227,6 +240,9 @@
   	-@if [ ".$(WITH_PERL)" = .yes ]; then \
   	    (cd perl && $(MAKE) $(MFLAGS) install); \
   	fi
  +	-@if [ ".$(WITH_PHP)" = .yes ]; then \
  +	    (cd php && $(MAKE) $(MFLAGS) -f Makefile.local install EXTDIR=$(prefix)/lib/php PHP=$(PHP)); \
  +	fi
   
   uninstall:
   	-$(RM) $(DESTDIR)$(mandir)/man1/uuid.1
  @@ -280,6 +296,9 @@
   	-@if [ ".$(WITH_PERL)" = .yes ]; then \
   	    (cd perl && $(MAKE) $(MFLAGS) clean || true); \
   	fi
  +	-@if [ ".$(WITH_PHP)" = .yes ]; then \
  +	    (cd php && $(MAKE) $(MFLAGS) -f Makefile.local clean || true); \
  +	fi
   
   distclean: clean
   	-$(RM) config.log config.status config.cache
  @@ -288,10 +307,16 @@
   	-@if [ ".$(WITH_PERL)" = .yes ]; then \
   	    (cd perl && $(MAKE) $(MFLAGS) distclean || true; rm -f Makefile.old); \
   	fi
  +	-@if [ ".$(WITH_PHP)" = .yes ]; then \
  +	    (cd php && $(MAKE) $(MFLAGS) -f Makefile.local distclean || true); \
  +	fi
   
   realclean: distclean
   	-$(RM) uuid.3 uuid.1
   	-$(RM) configure config.h.in
   	-$(RM) shtool
   	-$(RM) ltmain.sh libtool.m4 config.guess config.sub
  +	-@if [ ".$(WITH_PHP)" = .yes ]; then \
  +	    (cd php && $(MAKE) $(MFLAGS) -f Makefile.local realclean || true); \
  +	fi
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 devtool.conf
  --- ossp-pkg/uuid/devtool.conf	1 Sep 2005 21:43:03 -0000	1.18
  +++ ossp-pkg/uuid/devtool.conf	1 Sep 2005 22:24:01 -0000	1.19
  @@ -20,6 +20,7 @@
           --with-cxx \
           --with-perl \
           --with-perl-compat \
  +        --with-php \
           "$@"
   
   %version
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/php/.cvsignore
  ============================================================================
  $ cvs diff -u -r0 -r1.1 .cvsignore
  --- /dev/null	2005-09-02 00:23:26 +0200
  +++ .cvsignore	2005-09-02 00:24:02 +0200
  @@ -0,0 +1,22 @@
  +.deps
  +Makefile
  +Makefile.fragments
  +Makefile.global
  +Makefile.objects
  +acinclude.m4
  +aclocal.m4
  +autom4te.cache
  +build
  +config.guess
  +config.h
  +config.h.in
  +config.nice
  +config.sub
  +configure
  +configure.in
  +include
  +install-sh
  +ltmain.sh
  +missing
  +mkinstalldirs
  +modules
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/php/Makefile.local
  ============================================================================
  $ cvs diff -u -r0 -r1.1 Makefile.local
  --- /dev/null	2005-09-02 00:23:26 +0200
  +++ Makefile.local	2005-09-02 00:24:02 +0200
  @@ -0,0 +1,69 @@
  +##
  +##  OSSP uuid - Universally Unique Identifier
  +##  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP uuid, a library for the generation
  +##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  Makefile.local: PHP/Zend API build procedure (language: make)
  +##
  +
  +PHP    = php
  +EXTDIR = `$(PHP)-config --extension-dir`
  +
  +all: build
  +
  +config:
  +	@if [ ! -f ./configure ]; then $(PHP)ize 2>/dev/null; fi
  +	@if [ ! -f ./Makefile ]; then ./configure --with-php-config=$(PHP)-config; fi
  +
  +build: config
  +	@$(MAKE) $(MFLAGS) -f Makefile
  +
  +test: build
  +	@version=`$(PHP)-config --version | sed -e 's;^\([0-9]\).*$$;\1;'`; \
  +	$(PHP) -q -d "safe_mode=0" -d "extension_dir=./" uuid.ts $$version
  +
  +install: build
  +	@version=`$(PHP)-config --version | sed -e 's;^\([0-9]\).*$$;\1;'`; extdir="$(EXTDIR)"; \
  +	echo "installing PHP$$version API into $$extdir"; \
  +	./build/shtool mkdir -f -p -m 755 $$extdir; \
  +	./build/shtool install -c -m 755 modules/uuid.so $$extdir/uuid.so; \
  +	./build/shtool install -c -m 644 uuid.php$$version $$extdir/uuid.php
  +
  +clean:
  +	@$(MAKE) $(MFLAGS) -f Makefile clean || true
  +
  +distclean: clean
  +	-rm -f Makefile
  +	-rm -f config.status configure.lineno
  +	-rm -f config.h config.log
  +	-rm -f *.core *~
  +
  +realclean: distclean
  +	-rm -rf autom4te.cache build include modules
  +	-rm -f Makefile.fragments Makefile.objects Makefile.global
  +	-rm -f acinclude.m4 aclocal.m4
  +	-rm -f config.guess config.h.in config.nice config.sub
  +	-rm -f configure configure.in 
  +	-rm -f install-sh libtool ltmain.sh missing mkinstalldirs
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/php/config.m4
  ============================================================================
  $ cvs diff -u -r0 -r1.1 config.m4
  --- /dev/null	2005-09-02 00:23:26 +0200
  +++ config.m4	2005-09-02 00:24:02 +0200
  @@ -0,0 +1,43 @@
  +dnl
  +dnl  OSSP uuid - Universally Unique Identifier
  +dnl  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +dnl  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +dnl
  +dnl  This file is part of OSSP uuid, a library for the generation
  +dnl  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +dnl
  +dnl  Permission to use, copy, modify, and distribute this software for
  +dnl  any purpose with or without fee is hereby granted, provided that
  +dnl  the above copyright notice and this permission notice appear in all
  +dnl  copies.
  +dnl
  +dnl  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +dnl  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +dnl  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +dnl  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +dnl  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +dnl  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +dnl  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +dnl  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +dnl  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +dnl  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +dnl  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +dnl  SUCH DAMAGE.
  +dnl
  +dnl  config.m4: PHP/Zend API build-time configuration (language: m4)
  +dnl
  +
  +PHP_ARG_ENABLE(uuid, OSSP uuid module,
  +[  --enable-uuid             Enable OSSP uuid extension module.])
  +
  +if test "$PHP_UUID" != "no"; then
  +    PHP_NEW_EXTENSION(uuid, uuid.c, $ext_shared)
  +    AC_DEFINE(HAVE_UUID, 1, [Have OSSP uuid library])
  +    PHP_ADD_LIBPATH([..], )
  +    PHP_ADD_LIBRARY([uuid],, UUID_SHARED_LIBADD)
  +    PHP_ADD_INCLUDE([..])
  +    PHP_SUBST(UUID_SHARED_LIBADD)
  +    dnl  avoid conflict with libc's uuid_create(3)
  +    EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-Bsymbolic"
  +fi
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/php/uuid.c
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid.c
  --- /dev/null	2005-09-02 00:23:26 +0200
  +++ uuid.c	2005-09-02 00:24:02 +0200
  @@ -0,0 +1,525 @@
  +/*
  +**  OSSP uuid - Universally Unique Identifier
  +**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +**
  +**  This file is part of OSSP uuid, a library for the generation
  +**  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  uuid.c: PHP/Zend API (language: C)
  +*/
  +
  +#ifdef HAVE_CONFIG_H
  +#include "config.h"
  +#endif
  +
  +#include "php.h"
  +#include "uuid.h"
  +#include <stdio.h>
  +
  +/* context structure */
  +typedef struct {
  +    uuid_t *uuid;
  +} ctx_t;
  +
  +/* context implicit destruction */
  +static void ctx_destructor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
  +{
  +    ctx_t *ctx = (ctx_t *)rsrc->ptr;
  +
  +    if (ctx != NULL) {
  +        if (ctx->uuid != NULL) {
  +            uuid_destroy(ctx->uuid);
  +            ctx->uuid = NULL;
  +        }
  +        free(ctx);
  +    }
  +    return;
  +}
  +
  +/* context resource identification */
  +static int ctx_id;               /* internal number */
  +#define ctx_name "UUID context"  /* external name   */
  +
  +/* module initialization */
  +PHP_MINIT_FUNCTION(uuid)
  +{
  +    /* register resource identifier */
  +    ctx_id = zend_register_list_destructors_ex(
  +        ctx_destructor, NULL, ctx_name, module_number);
  +
  +    /* register API constants */
  +    REGISTER_LONG_CONSTANT("UUID_VERSION", UUID_VERSION, CONST_CS|CONST_PERSISTENT);
  +    REGISTER_LONG_CONSTANT("UUID_LEN_BIN", UUID_LEN_BIN, CONST_CS|CONST_PERSISTENT);
  +    REGISTER_LONG_CONSTANT("UUID_LEN_STR", UUID_LEN_STR, CONST_CS|CONST_PERSISTENT);
  +    REGISTER_LONG_CONSTANT("UUID_RC_OK",   UUID_RC_OK,   CONST_CS|CONST_PERSISTENT);
  +    REGISTER_LONG_CONSTANT("UUID_RC_ARG",  UUID_RC_ARG,  CONST_CS|CONST_PERSISTENT);
  +    REGISTER_LONG_CONSTANT("UUID_RC_MEM",  UUID_RC_MEM,  CONST_CS|CONST_PERSISTENT);
  +    REGISTER_LONG_CONSTANT("UUID_RC_SYS",  UUID_RC_SYS,  CONST_CS|CONST_PERSISTENT);
  +    REGISTER_LONG_CONSTANT("UUID_RC_INT",  UUID_RC_INT,  CONST_CS|CONST_PERSISTENT);
  +    REGISTER_LONG_CONSTANT("UUID_RC_IMP",  UUID_RC_IMP,  CONST_CS|CONST_PERSISTENT);
  +    REGISTER_LONG_CONSTANT("UUID_MAKE_V1", UUID_MAKE_V1, CONST_CS|CONST_PERSISTENT);
  +    REGISTER_LONG_CONSTANT("UUID_MAKE_V3", UUID_MAKE_V3, CONST_CS|CONST_PERSISTENT);
  +    REGISTER_LONG_CONSTANT("UUID_MAKE_V4", UUID_MAKE_V4, CONST_CS|CONST_PERSISTENT);
  +    REGISTER_LONG_CONSTANT("UUID_MAKE_V5", UUID_MAKE_V5, CONST_CS|CONST_PERSISTENT);
  +    REGISTER_LONG_CONSTANT("UUID_MAKE_MC", UUID_MAKE_MC, CONST_CS|CONST_PERSISTENT);
  +    REGISTER_LONG_CONSTANT("UUID_FMT_BIN", UUID_FMT_BIN, CONST_CS|CONST_PERSISTENT);
  +    REGISTER_LONG_CONSTANT("UUID_FMT_STR", UUID_FMT_STR, CONST_CS|CONST_PERSISTENT);
  +    REGISTER_LONG_CONSTANT("UUID_FMT_TXT", UUID_FMT_TXT, CONST_CS|CONST_PERSISTENT);
  +
  +    return SUCCESS;
  +}
  +
  +/* module shutdown */
  +PHP_MSHUTDOWN_FUNCTION(uuid)
  +{
  +    return SUCCESS;
  +}
  +
  +/* module information */
  +PHP_MINFO_FUNCTION(uuid)
  +{
  +    char version[32];
  +
  +    /* provide PHP module information */
  +    sprintf(version, "%lx", uuid_version());
  +    php_info_print_table_start();
  +    php_info_print_table_row(2, "UUID (Universally Unique Identifier) Support", "enabled");
  +    php_info_print_table_row(2, "UUID Library Version", version);
  +    php_info_print_table_end();
  +
  +    return;
  +}
  +
  +/* API FUNCTION:
  +   proto rc uuid_create(ctx)
  +   $rc = uuid_create(&$uuid);
  +   create UUID context */
  +PHP_FUNCTION(uuid_create)
  +{
  +    zval *z_ctx;
  +    ctx_t *ctx;
  +    uuid_rc_t rc;
  +
  +    /* parse parameters */
  +    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &z_ctx) == FAILURE)
  +        RETURN_LONG((long)UUID_RC_ARG);
  +
  +    /* post-process and sanity check parameters */
  +    if (!PZVAL_IS_REF(z_ctx)) {
  +        php_error_docref(NULL TSRMLS_CC, E_WARNING, "uuid_create: parameter wasn't passed by reference");
  +        RETURN_LONG((long)UUID_RC_ARG);
  +    }
  +
  +    /* perform operation */
  +    if ((ctx = (ctx_t *)malloc(sizeof(ctx_t))) == NULL)
  +        RETURN_LONG((long)UUID_RC_MEM);
  +    if ((rc = uuid_create(&ctx->uuid)) != UUID_RC_OK) {
  +        php_error_docref(NULL TSRMLS_CC, E_WARNING, "uuid_create: %s", uuid_error(rc));
  +        RETURN_LONG((long)rc);
  +    }
  +    ZEND_REGISTER_RESOURCE(z_ctx, ctx, ctx_id);
  +
  +    RETURN_LONG((long)rc);
  +}
  +
  +/* API FUNCTION:
  +   proto rc uuid_destroy(ctx)
  +   $rc = uuid_destroy($uuid);
  +   destroy UUID context */
  +PHP_FUNCTION(uuid_destroy)
  +{
  +    zval *z_ctx;
  +    ctx_t *ctx;
  +    uuid_rc_t rc;
  +
  +    /* parse parameters */
  +    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &z_ctx) == FAILURE)
  +        RETURN_LONG((long)UUID_RC_ARG);
  +
  +    /* post-process and sanity check parameters */
  +    ZEND_FETCH_RESOURCE(ctx, ctx_t *, &z_ctx, -1, ctx_name, ctx_id);
  +    if (ctx == NULL || ctx->uuid == NULL) {
  +        php_error_docref(NULL TSRMLS_CC, E_WARNING, "uuid_destroy: invalid context");
  +        RETURN_LONG((long)UUID_RC_ARG);
  +    }
  +
  +    /* perform operation */
  +    if ((rc = uuid_destroy(ctx->uuid)) != UUID_RC_OK) {
  +        php_error_docref(NULL TSRMLS_CC, E_WARNING, "uuid_destroy: %s", uuid_error(rc));
  +        RETURN_LONG((long)rc);
  +    }
  +    ctx->uuid = NULL;
  +
  +    RETURN_LONG((long)rc);
  +}
  +
  +/* API FUNCTION:
  +   proto rc uuid_clone(ctx, &ctx2)
  +   $rc = uuid_clone($uuid, &$uuid);
  +   clone UUID context */
  +PHP_FUNCTION(uuid_clone)
  +{
  +    zval *z_ctx;
  +    ctx_t *ctx;
  +    zval *z_clone;
  +    ctx_t *clone;
  +    uuid_rc_t rc;
  +
  +    /* parse parameters */
  +    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rz", &z_ctx, &z_clone) == FAILURE)
  +        RETURN_LONG((long)UUID_RC_ARG);
  +
  +    /* post-process and sanity check parameters */
  +    ZEND_FETCH_RESOURCE(ctx, ctx_t *, &z_ctx, -1, ctx_name, ctx_id);
  +    if (ctx == NULL || ctx->uuid == NULL) {
  +        php_error_docref(NULL TSRMLS_CC, E_WARNING, "uuid_clone: invalid context");
  +        RETURN_LONG((long)UUID_RC_ARG);
  +    }
  +    if (!PZVAL_IS_REF(z_clone)) {
  +        php_error_docref(NULL TSRMLS_CC, E_WARNING, "uuid_clone: clone parameter wasn't passed by reference");
  +        RETURN_LONG((long)UUID_RC_ARG);
  +    }
  +
  +    /* perform operation */
  +    if ((clone = (ctx_t *)malloc(sizeof(ctx_t))) == NULL)
  +        RETURN_LONG((long)UUID_RC_MEM);
  +    if ((rc = uuid_clone(ctx->uuid, &clone->uuid)) != UUID_RC_OK) {
  +        php_error_docref(NULL TSRMLS_CC, E_WARNING, "uuid_clone: %s", uuid_error(rc));
  +        RETURN_LONG((long)rc);
  +    }
  +    ZEND_REGISTER_RESOURCE(z_clone, clone, ctx_id);
  +
  +    RETURN_LONG((long)rc);
  +}
  +
  +/* API FUNCTION:
  +   proto rc uuid_load(ctx, name)
  +   $rc = uuid_name($uuid, $name);
  +   load an existing UUID */
  +PHP_FUNCTION(uuid_load)
  +{
  +    zval *z_ctx;
  +    ctx_t *ctx;
  +    char *name;
  +    size_t name_len;
  +    uuid_rc_t rc;
  +
  +    /* parse parameters */
  +    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &z_ctx, &name, &name_len) == FAILURE)
  +        RETURN_LONG((long)UUID_RC_ARG);
  +
  +    /* post-process and sanity check parameters */
  +    ZEND_FETCH_RESOURCE(ctx, ctx_t *, &z_ctx, -1, ctx_name, ctx_id);
  +    if (ctx == NULL || ctx->uuid == NULL) {
  +        php_error_docref(NULL TSRMLS_CC, E_WARNING, "uuid_load: invalid context");
  +        RETURN_LONG((long)UUID_RC_ARG);
  +    }
  +
  +    /* perform operation */
  +    if ((rc = uuid_load(ctx->uuid, name)) != UUID_RC_OK) {
  +        php_error_docref(NULL TSRMLS_CC, E_WARNING, "uuid_load: %s", uuid_error(rc));
  +        RETURN_LONG((long)rc);
  +    }
  +
  +    RETURN_LONG((long)rc);
  +}
  +
  +/* API FUNCTION:
  +   proto rc uuid_make(ctx, mode[, ..., ...])
  +   $rc = uuid_make($uuid, $mode[, ..., ...]);
  +   make a new UUID */
  +PHP_FUNCTION(uuid_make)
  +{
  +    zval *z_ctx;
  +    ctx_t *ctx;
  +    uuid_rc_t rc;
  +    long z_mode;
  +    unsigned long mode;
  +    zval *z_ctx_ns;
  +    ctx_t *ctx_ns;
  +    char *url;
  +    size_t url_len;
  +
  +    /* parse parameters */
  +    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl|rs", &z_ctx, &z_mode, &z_ctx_ns, &url, &url_len) == FAILURE)
  +        RETURN_LONG((long)UUID_RC_ARG);
  +
  +    /* post-process and sanity check parameters */
  +    ZEND_FETCH_RESOURCE(ctx, ctx_t *, &z_ctx, -1, ctx_name, ctx_id);
  +    if (ctx == NULL || ctx->uuid == NULL) {
  +        php_error_docref(NULL TSRMLS_CC, E_WARNING, "uuid_make: invalid context");
  +        RETURN_LONG((long)UUID_RC_ARG);
  +    }
  +    mode = (unsigned long)z_mode;
  +
  +    /* perform operation */
  +    if (ZEND_NUM_ARGS() == 2 && ((mode & UUID_MAKE_V1) || (mode & UUID_MAKE_V4))) {
  +        if ((rc = uuid_make(ctx->uuid, mode)) != UUID_RC_OK) {
  +            php_error_docref(NULL TSRMLS_CC, E_WARNING, "uuid_make: %s", uuid_error(rc));
  +            RETURN_LONG((long)rc);
  +        }
  +    }
  +    else if (ZEND_NUM_ARGS() == 4 && ((mode & UUID_MAKE_V3) || (mode & UUID_MAKE_V5))) {
  +        ZEND_FETCH_RESOURCE(ctx_ns, ctx_t *, &z_ctx_ns, -1, ctx_name, ctx_id);
  +        if (ctx_ns == NULL) {
  +            php_error_docref(NULL TSRMLS_CC, E_WARNING, "uuid_make: invalid namespace context");
  +            RETURN_LONG((long)UUID_RC_ARG);
  +        }
  +        if (url == NULL) {
  +            php_error_docref(NULL TSRMLS_CC, E_WARNING, "uuid_make: invalid URL");
  +            RETURN_LONG((long)UUID_RC_ARG);
  +        }
  +        if ((rc = uuid_make(ctx->uuid, mode, ctx_ns->uuid, url)) != UUID_RC_OK) {
  +            php_error_docref(NULL TSRMLS_CC, E_WARNING, "uuid_make: %s", uuid_error(rc));
  +            RETURN_LONG((long)rc);
  +        }
  +    }
  +    else {
  +        php_error_docref(NULL TSRMLS_CC, E_WARNING, "uuid_make: invalid mode");
  +        RETURN_LONG((long)UUID_RC_ARG);
  +    }
  +
  +    RETURN_LONG((long)rc);
  +}
  +
  +/* API FUNCTION:
  +   proto rc uuid_isnil(ctx, result)
  +   $rc = uuid_isnil($uuid, &$result);
  +   compare UUID for being Nil UUID */
  +PHP_FUNCTION(uuid_isnil)
  +{
  +    zval *z_ctx;
  +    ctx_t *ctx;
  +    uuid_rc_t rc;
  +    zval *z_result;
  +    int result;
  +
  +    /* parse parameters */
  +    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rz", &z_ctx, &z_result) == FAILURE)
  +        RETURN_LONG((long)UUID_RC_ARG);
  +
  +    /* post-process and sanity check parameters */
  +    ZEND_FETCH_RESOURCE(ctx, ctx_t *, &z_ctx, -1, ctx_name, ctx_id);
  +    if (ctx == NULL || ctx->uuid == NULL) {
  +        php_error_docref(NULL TSRMLS_CC, E_WARNING, "uuid_isnil: invalid context");
  +        RETURN_LONG((long)UUID_RC_ARG);
  +    }
  +    if (!PZVAL_IS_REF(z_result)) {
  +        php_error_docref(NULL TSRMLS_CC, E_WARNING, "uuid_isnil: result parameter wasn't passed by reference");
  +        RETURN_LONG((long)UUID_RC_ARG);
  +    }
  +
  +    /* perform operation */
  +    if ((rc = uuid_isnil(ctx->uuid, &result)) != UUID_RC_OK) {
  +        php_error_docref(NULL TSRMLS_CC, E_WARNING, "uuid_isnil: %s", uuid_error(rc));
  +        RETURN_LONG((long)rc);
  +    }
  +    ZVAL_LONG(z_result, (long)result);
  +
  +    RETURN_LONG((long)rc);
  +}
  +
  +/* API FUNCTION:
  +   proto rc uuid_compare(ctx, ctx2, result)
  +   $rc = uuid_compare($uuid, $uuid2, &$result);
  +   compare two UUIDs */
  +PHP_FUNCTION(uuid_compare)
  +{
  +    zval *z_ctx;
  +    ctx_t *ctx;
  +    zval *z_ctx2;
  +    ctx_t *ctx2;
  +    uuid_rc_t rc;
  +    zval *z_result;
  +    int result;
  +
  +    /* parse parameters */
  +    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rrz", &z_ctx, &z_ctx2, &z_result) == FAILURE)
  +        RETURN_LONG((long)UUID_RC_ARG);
  +
  +    /* post-process and sanity check parameters */
  +    ZEND_FETCH_RESOURCE(ctx, ctx_t *, &z_ctx, -1, ctx_name, ctx_id);
  +    if (ctx == NULL || ctx->uuid == NULL) {
  +        php_error_docref(NULL TSRMLS_CC, E_WARNING, "uuid_compare: invalid context");
  +        RETURN_LONG((long)UUID_RC_ARG);
  +    }
  +    ZEND_FETCH_RESOURCE(ctx2, ctx_t *, &z_ctx2, -1, ctx_name, ctx_id);
  +    if (ctx2 == NULL || ctx2->uuid) {
  +        php_error_docref(NULL TSRMLS_CC, E_WARNING, "uuid_compare: invalid context");
  +        RETURN_LONG((long)UUID_RC_ARG);
  +    }
  +    if (!PZVAL_IS_REF(z_result)) {
  +        php_error_docref(NULL TSRMLS_CC, E_WARNING, "uuid_compare: result parameter wasn't passed by reference");
  +        RETURN_LONG((long)UUID_RC_ARG);
  +    }
  +
  +    /* perform operation */
  +    if ((rc = uuid_compare(ctx->uuid, ctx2->uuid, &result)) != UUID_RC_OK) {
  +        php_error_docref(NULL TSRMLS_CC, E_WARNING, "uuid_compare: %s", uuid_error(rc));
  +        RETURN_LONG((long)rc);
  +    }
  +    ZVAL_LONG(z_result, (long)result);
  +
  +    RETURN_LONG((long)rc);
  +}
  +
  +/* API FUNCTION:
  +   proto rc uuid_import(ctx, fmt, data)
  +   $rc = uuid_import($ctx, $fmt, $data);
  +   import UUID from variable */
  +PHP_FUNCTION(uuid_import)
  +{
  +    zval *z_ctx;
  +    ctx_t *ctx;
  +    long z_fmt;
  +    unsigned long fmt;
  +    zval *z_data;
  +    uuid_rc_t rc;
  +    void *data_ptr;
  +    size_t data_len;
  +
  +    /* parse parameters */
  +    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rls", &z_ctx, &z_fmt, &data_ptr, &data_len) == FAILURE)
  +        RETURN_LONG((long)UUID_RC_ARG);
  +
  +    /* post-process and sanity check parameters */
  +    ZEND_FETCH_RESOURCE(ctx, ctx_t *, &z_ctx, -1, ctx_name, ctx_id);
  +    if (ctx == NULL || ctx->uuid == NULL) {
  +        php_error_docref(NULL TSRMLS_CC, E_WARNING, "uuid_import: invalid context");
  +        RETURN_LONG((long)UUID_RC_ARG);
  +    }
  +    fmt = (unsigned long)z_fmt;
  +
  +    /* perform operation */
  +    if ((rc = uuid_import(ctx->uuid, fmt, data_ptr, data_len)) != UUID_RC_OK) {
  +        php_error_docref(NULL TSRMLS_CC, E_WARNING, "uuid_import: %s", uuid_error(rc));
  +        RETURN_LONG((long)rc);
  +    }
  +
  +    RETURN_LONG((long)rc);
  +}
  +
  +/* API FUNCTION:
  +   proto rc uuid_export(ctx, fmt, data)
  +   $rc = uuid_error($ctx, $fmt, &$data);
  +   export UUID into variable */
  +PHP_FUNCTION(uuid_export)
  +{
  +    zval *z_ctx;
  +    ctx_t *ctx;
  +    long z_fmt;
  +    unsigned long fmt;
  +    zval *z_data;
  +    uuid_rc_t rc;
  +    void *data_ptr;
  +    size_t data_len;
  +
  +    /* parse parameters */
  +    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rlz", &z_ctx, &z_fmt, &z_data) == FAILURE)
  +        RETURN_LONG((long)UUID_RC_ARG);
  +
  +    /* post-process and sanity check parameters */
  +    ZEND_FETCH_RESOURCE(ctx, ctx_t *, &z_ctx, -1, ctx_name, ctx_id);
  +    if (ctx == NULL || ctx->uuid == NULL) {
  +        php_error_docref(NULL TSRMLS_CC, E_WARNING, "uuid_export: invalid context");
  +        RETURN_LONG((long)UUID_RC_ARG);
  +    }
  +    fmt = (unsigned long)z_fmt;
  +    if (!PZVAL_IS_REF(z_data)) {
  +        php_error_docref(NULL TSRMLS_CC, E_WARNING, "uuid_export: data parameter wasn't passed by reference");
  +        RETURN_LONG((long)UUID_RC_ARG);
  +    }
  +
  +    /* perform operation */
  +    data_ptr = NULL;
  +    data_len = 0;
  +    if ((rc = uuid_export(ctx->uuid, fmt, &data_ptr, &data_len)) != UUID_RC_OK) {
  +        php_error_docref(NULL TSRMLS_CC, E_WARNING, "uuid_export: %s", uuid_error(rc));
  +        RETURN_LONG((long)rc);
  +    }
  +    ZVAL_STRINGL(z_data, data_ptr, data_len, 1);
  +    free(data_ptr);
  +
  +    RETURN_LONG((long)rc);
  +}
  +
  +/* API FUNCTION:
  +   proto rc uuid_error(ctx)
  +   $error = uuid_error($rc);
  +   return error string corresponding to error return code */
  +PHP_FUNCTION(uuid_error)
  +{
  +    int z_rc;
  +    uuid_rc_t rc;
  +    char *error;
  +
  +    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &z_rc) == FAILURE)
  +        RETURN_NULL();
  +    rc = (uuid_rc_t)z_rc;
  +    if ((error = uuid_error(rc)) == NULL)
  +        RETURN_NULL();
  +    RETURN_STRING(error, 1);
  +}
  +
  +/* API FUNCTION:
  +   proto int uuid_version()
  +   $version = uuid_version();
  +   return library version number */
  +PHP_FUNCTION(uuid_version)
  +{
  +    RETURN_LONG((long)uuid_version());
  +}
  +
  +/* module function table */
  +static function_entry uuid_functions[] = {
  +    PHP_FE(uuid_create,  third_arg_force_ref)
  +    PHP_FE(uuid_destroy, NULL)
  +    PHP_FE(uuid_clone,   NULL)
  +    PHP_FE(uuid_load,    NULL)
  +    PHP_FE(uuid_make,    NULL)
  +    PHP_FE(uuid_isnil,   NULL)
  +    PHP_FE(uuid_compare, NULL)
  +    PHP_FE(uuid_import,  NULL)
  +    PHP_FE(uuid_export,  NULL)
  +    PHP_FE(uuid_error,   NULL)
  +    PHP_FE(uuid_version, NULL)
  +    { NULL, NULL, NULL }
  +};
  +
  +/* module entry table */
  +zend_module_entry uuid_module_entry = {
  +    STANDARD_MODULE_HEADER,
  +    "uuid",
  +    uuid_functions,
  +    PHP_MINIT(uuid),
  +    PHP_MSHUTDOWN(uuid),
  +    NULL,
  +    NULL,
  +    PHP_MINFO(uuid),
  +    NO_VERSION_YET,
  +    STANDARD_MODULE_PROPERTIES
  +};
  +
  +#ifdef COMPILE_DL_UUID
  +ZEND_GET_MODULE(uuid)
  +#endif
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/php/uuid.php4
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid.php4
  --- /dev/null	2005-09-02 00:23:26 +0200
  +++ uuid.php4	2005-09-02 00:24:02 +0200
  @@ -0,0 +1,78 @@
  +<?php
  +##
  +##  OSSP uuid - Universally Unique Identifier
  +##  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP uuid, a library for the generation
  +##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  uuid.php: PHP/Zend API (language: php 4.x)
  +##
  +
  +class UUID {
  +    var $uuid = null;
  +    function UUID() {
  +        uuid_create(&$this->uuid);
  +    }
  +    function clone() {
  +        $clone = new UUID;
  +        uuid_clone($this->uuid, &$clone->uuid);
  +        return $clone;
  +    }
  +    function load($name) {
  +        uuid_load($this->uuid, $name);
  +    }
  +    function make($fmt, $ns = null, $url = null) {
  +        if (func_num_args() == 3) {
  +            uuid_make($this->uuid, $fmt, $ns->uuid, $url);
  +        }
  +        else {
  +            uuid_make($this->uuid, $fmt);
  +        }
  +    }
  +    function isnil() {
  +        $result = 0;
  +        uuid_isnil($this->uuid, &$result);
  +        return $result;
  +    }
  +    function compare($other) {
  +        $result = 0;
  +        uuid_compare($this->uuid, $other->uuid, &$result);
  +        return $result;
  +    }
  +    function import($fmt, $data) {
  +        uuid_import($this->uuid, $fmt, $data);
  +    }
  +    function export($fmt) {
  +        $data = "";
  +        uuid_export($this->uuid, $fmt, &$data);
  +        return $data;
  +    }
  +    function error($rc) {
  +        return uuid_error($this->uuid, $rc);
  +    }
  +    function version() {
  +        return uuid_version();
  +    }
  +}
  +
  +?>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/php/uuid.php5
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid.php5
  --- /dev/null	2005-09-02 00:23:26 +0200
  +++ uuid.php5	2005-09-02 00:24:02 +0200
  @@ -0,0 +1,81 @@
  +<?php
  +##
  +##  OSSP uuid - Universally Unique Identifier
  +##  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP uuid, a library for the generation
  +##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  uuid.php: PHP/Zend API (language: php 5.x)
  +##
  +
  +class UUID {
  +    private $uuid = null;
  +    public function __construct() {
  +        uuid_create(&$this->uuid);
  +    }
  +    public function __destruct() {
  +        uuid_destroy($this->uuid);
  +    }
  +    public function __clone() {
  +        $uuid = null;
  +        uuid_clone($this->uuid, &$uuid);
  +        $this->uuid = $uuid;
  +    }
  +    public function load($name) {
  +        uuid_load($this->uuid, $name);
  +    }
  +    public function make($fmt, $ns = null, $url = null) {
  +        if (func_num_args() == 3) {
  +            uuid_make($this->uuid, $fmt, $ns->uuid, $url);
  +        }
  +        else {
  +            uuid_make($this->uuid, $fmt);
  +        }
  +    }
  +    public function isnil() {
  +        $result = 0;
  +        uuid_isnil($this->uuid, &$result);
  +        return $result;
  +    }
  +    public function compare($other) {
  +        $result = 0;
  +        uuid_compare($this->uuid, $other->uuid, &$result);
  +        return $result;
  +    }
  +    public function import($fmt, $data) {
  +        uuid_import($this->uuid, $fmt, $data);
  +    }
  +    public function export($fmt) {
  +        $data = "";
  +        uuid_export($this->uuid, $fmt, &$data);
  +        return $data;
  +    }
  +    public function error($rc) {
  +        return uuid_error($this->uuid, $rc);
  +    }
  +    public function version() {
  +        return uuid_version();
  +    }
  +}
  +
  +?>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/php/uuid.ts
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid.ts
  --- /dev/null	2005-09-02 00:23:26 +0200
  +++ uuid.ts	2005-09-02 00:24:02 +0200
  @@ -0,0 +1,161 @@
  +<?php
  +##
  +##  OSSP uuid - Universally Unique Identifier
  +##  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP uuid, a library for the generation
  +##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  uuid.ts: PHP/Zend API test procedure (language: php)
  +##
  +
  +##
  +##  INITIALIZATION
  +##
  +
  +$php_version = $argv[1];
  +
  +print "++ loading DSO uuid.so (low-level API)\n";
  +if (!extension_loaded('uuid')) {
  +    dl('modules/uuid.so');
  +}
  +
  +print "++ loading PHP uuid.php${php_version} (high-level API)\n";
  +require "uuid.php${php_version}";
  +
  +print "++ establishing assertion environment\n";
  +assert_options(ASSERT_ACTIVE, 1);
  +assert_options(ASSERT_WARNING, 0);
  +assert_options(ASSERT_QUIET_EVAL, 1);
  +function my_assert_handler($file, $line, $code)
  +{
  +    echo "ASSERTION FAILED: $file: $line: $code\n";
  +    exit(1);
  +}
  +assert_options(ASSERT_CALLBACK, 'my_assert_handler');
  +
  +##
  +##  LOW-LEVEL API TESTING
  +##
  +
  +print "++ testing low-level C-style API:\n";
  +
  +$uuid = 42;
  +$rc = uuid_create(&$uuid);
  +assert('$rc == 0');
  +assert('$uuid != 42');
  +
  +$rc = uuid_make($uuid, UUID_MAKE_V1);
  +assert('$rc == 0');
  +
  +$str = "foo";
  +$rc = uuid_export($uuid, UUID_FMT_STR, &$str);
  +assert('$rc == 0');
  +assert('$str != "foo"');
  +print "UUID: $str\n";
  +
  +$uuid_ns = 42;
  +$rc = uuid_create(&$uuid_ns);
  +assert('$rc == 0');
  +
  +$rc = uuid_load($uuid_ns, "ns:URL");
  +assert('$rc == 0');
  +
  +$rc = uuid_make($uuid, UUID_MAKE_V3, $uuid_ns, "http://www.ossp.org/");
  +assert('$rc == 0');
  +
  +$str = "bar";
  +$rc = uuid_export($uuid, UUID_FMT_STR, &$str);
  +assert('$rc == 0');
  +assert('$str != "bar"');
  +#assert('$str == "02d9e6d5-9467-382e-8f9b-9300a64ac3cd"');
  +print "UUID: $str\n";
  +
  +$rc = uuid_destroy($uuid);
  +assert('$rc == 0');
  +
  +$rc = uuid_create(&$uuid);
  +assert('$rc == 0');
  +
  +$rc = uuid_import($uuid, UUID_FMT_STR, $str);
  +assert('$rc == 0');
  +
  +$str = "baz";
  +$rc = uuid_export($uuid, UUID_FMT_STR, &$str);
  +assert('$rc == 0');
  +assert('$str != "baz"');
  +#assert('$str == "02d9e6d5-9467-382e-8f9b-9300a64ac3cd"');
  +print "UUID: $str\n";
  +
  +$clone = null;
  +$rc = uuid_clone($uuid, &$clone);
  +assert('$rc == 0');
  +assert('$clone != null');
  +
  +$rc = uuid_destroy($uuid);
  +assert('$rc == 0');
  +
  +$str = "quux";
  +$rc = uuid_export($clone, UUID_FMT_STR, &$str);
  +assert('$rc == 0');
  +assert('$str != "quux"');
  +#assert('$str == "02d9e6d5-9467-382e-8f9b-9300a64ac3cd"');
  +print "UUID: $str\n";
  +
  +##
  +##  HIGH-LEVEL API TESTING
  +##
  +
  +print "++ testing high-level OO-style API:\n";
  +
  +$uuid = new UUID;
  +$uuid->make(UUID_MAKE_V1);
  +$str = $uuid->export(UUID_FMT_STR);
  +print "UUID: $str\n";
  +
  +$uuid_ns = new UUID;
  +$uuid_ns->load("ns:URL");
  +$uuid->make(UUID_MAKE_V3, $uuid_ns, "http://www.ossp.org/");
  +$str = $uuid->export(UUID_FMT_STR);
  +print "UUID: $str\n";
  +$uuid = null;
  +$uuid_ns = null;
  +
  +$uuid = new UUID;
  +$uuid->import(UUID_FMT_STR, $str);
  +$str = $uuid->export(UUID_FMT_STR);
  +print "UUID: $str\n";
  +
  +if ($php_version == 4) {
  +    eval('$clone = $uuid->clone();');
  +}
  +else {
  +    eval('$clone = clone $uuid;');
  +}
  +$uuid = null;
  +
  +$str = $clone->export(UUID_FMT_STR);
  +print "UUID: $str\n";
  +
  +$clone = null;
  +
  +?>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.ac
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 uuid.ac
  --- ossp-pkg/uuid/uuid.ac	31 Aug 2005 14:29:56 -0000	1.16
  +++ ossp-pkg/uuid/uuid.ac	1 Sep 2005 22:24:01 -0000	1.17
  @@ -133,5 +133,28 @@
       if test ".$ac_cv_with_perl" = ".yes" -a ".$PERL" = ".NA"; then
           AC_ERROR([required Perl interpreter not found in \$PATH])
       fi
  +    
  +    dnl #   configure option --with-php
  +    AC_ARG_WITH([php],
  +        AS_HELP_STRING([--with-php], [build PHP bindings to C API]),
  +        [ac_cv_with_php=$withval], [ac_cv_with_php=no])
  +    AC_CACHE_CHECK([whether to build PHP bindings to C API], [ac_cv_with_php], [ac_cv_with_php=no])
  +    if test ".$ac_cv_with_php" = ".yes"; then
  +        AC_DEFINE(WITH_PHP, 1, [whether to build PHP bindings to C API])
  +        WITH_PHP='yes'
  +        PHP_NAME='$(PHP_NAME)'
  +    else
  +        WITH_PHP='no'
  +        PHP_NAME=''
  +    fi
  +    AC_SUBST(PHP_NAME)
  +    AC_SUBST(WITH_PHP)
  +    AC_PATH_PROG(PHP, php5 php, NA)
  +    if test ".$ac_cv_with_php" = ".yes" -a ".$PHP" = ".NA"; then
  +        AC_ERROR([required PHP interpreter not found in \$PATH])
  +    fi
  +    if test ".$ac_cv_with_php" = ".yes"; then
  +        (cd php && make -f Makefile.local config PHP=$PHP)
  +    fi
   ])
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Sep  2 09:21:10 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 7F78F752EE2; Fri,  2 Sep 2005 09:21:10 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/php/ package.xml
Message-Id: <20050902072110.7F78F752EE2@mail.ossp.org>
Date: Fri,  2 Sep 2005 09:21:10 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Sep-2005 09:21:10
  Branch: HEAD                             Handle: 2005090208211000

  Added files:
    ossp-pkg/uuid/php       package.xml

  Log:
    add a PEAR/PECL package specification file

  Summary:
    Revision    Changes     Path
    1.1         +35 -0      ossp-pkg/uuid/php/package.xml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/php/package.xml
  ============================================================================
  $ cvs diff -u -r0 -r1.1 package.xml
  --- /dev/null	2005-09-02 09:20:59 +0200
  +++ package.xml	2005-09-02 09:21:10 +0200
  @@ -0,0 +1,35 @@
  +<?xml version="1.0" encoding="ISO-8859-1" ?>
  +<package>
  +  <name>uuid</name>
  +  <summary>Universally Unique Identifiers (UUID) extension</summary>
  +  <description>
  +    UUID is a PHP extension for the creation
  +    of Universally Unique Identifiers (UUID).
  +  </description>
  +  <license>MIT-Style License</license>
  +  <maintainers>
  +    <maintainer>
  +      <user>rse</user>
  +      <name>Ralf S. Engelschall</name>
  +      <email>rse@engelschall.com</email>
  +    </maintainer>
  +  </maintainers>
  +    <release>
  +      <version>1.0</version>
  +      <date>2003-05-17</date>
  +      <state>unstable</state>
  +    </release>
  +  <configureoptions>
  +    <configureoption name="with-uuid" default="autodetect" prompt="path to OSSP uuid?"/>
  +  </configureoptions>
  +  <filelist>
  +    <dir role="src" name="/">
  +      <file role="src">Makefile.local</file>
  +      <file role="src">config.m4</file>
  +      <file role="src">uuid.c</file>
  +      <file role="php">uuid.php4</file>
  +      <file role="php">uuid.php5</file>
  +      <file role="src">uuid.ts</file>
  +    </dir>
  +  </filelist>
  +</package>
  @@ .

From ossp-cvs-owner@ossp.org  Fri Sep  2 15:15:11 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 24459752EE2; Fri,  2 Sep 2005 15:15:11 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/php/ uuid.c
Message-Id: <20050902131511.24459752EE2@mail.ossp.org>
Date: Fri,  2 Sep 2005 15:15:11 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Sep-2005 15:15:11
  Branch: HEAD                             Handle: 2005090214151000

  Modified files:
    ossp-pkg/uuid/php       uuid.c

  Log:
    remove left-over from debugging

  Summary:
    Revision    Changes     Path
    1.2         +0  -1      ossp-pkg/uuid/php/uuid.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/php/uuid.c
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid.c
  --- ossp-pkg/uuid/php/uuid.c	1 Sep 2005 22:24:02 -0000	1.1
  +++ ossp-pkg/uuid/php/uuid.c	2 Sep 2005 13:15:10 -0000	1.2
  @@ -33,7 +33,6 @@
   
   #include "php.h"
   #include "uuid.h"
  -#include <stdio.h>
   
   /* context structure */
   typedef struct {
  @@ .

From ossp-cvs-owner@ossp.org  Fri Sep  2 16:00:09 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 59AB5752ED2; Fri,  2 Sep 2005 16:00:09 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ README ossp-pkg/uuid/perl/ uuid.pod ossp-pk...
Message-Id: <20050902140009.59AB5752ED2@mail.ossp.org>
Date: Fri,  2 Sep 2005 16:00:09 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Sep-2005 16:00:09
  Branch: HEAD                             Handle: 2005090215000005

  Modified files:
    ossp-pkg/uuid           README uuid.pod uuid_cli.pod
    ossp-pkg/uuid/perl      uuid.pod

  Log:
    new official description now also mentioning PHP

  Summary:
    Revision    Changes     Path
    1.31        +9  -6      ossp-pkg/uuid/README
    1.9         +9  -7      ossp-pkg/uuid/perl/uuid.pod
    1.31        +9  -6      ossp-pkg/uuid/uuid.pod
    1.23        +9  -6      ossp-pkg/uuid/uuid_cli.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 README
  --- ossp-pkg/uuid/README	31 Aug 2005 20:10:25 -0000	1.30
  +++ ossp-pkg/uuid/README	2 Sep 2005 14:00:00 -0000	1.31
  @@ -9,12 +9,15 @@
   
     ABSTRACT
   
  -  OSSP uuid is a ISO-C, ISO-C++ and Perl application programming
  -  interface (API) and corresponding command line interface (CLI) for
  -  the generation of DCE 1.1, ISO/IEC 11578:1996 and RFC 4122 compliant
  -  Universally Unique Identifier (UUID). It supports DCE 1.1 variant
  -  UUIDs of version 1 (time and node based), version 3 (name based, MD5),
  -  version 4 (random number based) and version 5 (name based, SHA-1).
  +  OSSP uuid is a ISO-C:1999 application programming interface (API)
  +  and corresponding command line interface (CLI) for the generation
  +  of DCE 1.1, ISO/IEC 11578:1996 and RFC 4122 compliant Universally
  +  Unique Identifier (UUID). It supports DCE 1.1 variant UUIDs of version
  +  1 (time and node based), version 3 (name based, MD5), version 4
  +  (random number based) and version 5 (name based, SHA-1). Additional
  +  API bindings are provided for the languages ISO-C++:1998, Perl:5 and
  +  PHP:4/5. Optional backward compatibility exists for the ISO-C DCE-1.1
  +  and Perl Data::UUID APIs.
   
     UUIDs are 128 bit numbers which are intended to have a high likelihood
     of uniqueness over space and time and are computationally difficult
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 uuid.pod
  --- ossp-pkg/uuid/perl/uuid.pod	31 Aug 2005 08:55:18 -0000	1.8
  +++ ossp-pkg/uuid/perl/uuid.pod	2 Sep 2005 14:00:05 -0000	1.9
  @@ -35,16 +35,18 @@
   
   =head1 DESCRIPTION
   
  -B<OSSP::uuid> is the Perl binding to the B<OSSP uuid> API.
  -
  -B<OSSP uuid> is an ISO-C and Perl application programming interface
  -(API) and corresponding command line interface (CLI) for the generation
  -of DCE 1.1 and ISO/IEC 11578:1996 compliant I<Universally Unique
  +B<OSSP uuid> is a ISO-C:1999 application programming interface (API)
  +and corresponding command line interface (CLI) for the generation of
  +DCE 1.1, ISO/IEC 11578:1996 and RFC 4122 compliant I<Universally Unique
   Identifier> (UUID). It supports DCE 1.1 variant UUIDs of version 1 (time
   and node based), version 3 (name based, MD5), version 4 (random number
  -based) and version 5 (name based, SHA-1).
  +based) and version 5 (name based, SHA-1). Additional API bindings are
  +provided for the languages ISO-C++:1998, Perl:5 and PHP:4/5. Optional
  +backward compatibility exists for the ISO-C DCE-1.1 and Perl Data::UUID
  +APIs.
   
  -B<OSSP::uuid> provides three Perl APIs:
  +B<OSSP::uuid> is the Perl binding to the B<OSSP uuid> API.
  +Three variants are provided:
   
   =head2 TIE-STYLE API
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	31 Aug 2005 20:10:25 -0000	1.30
  +++ ossp-pkg/uuid/uuid.pod	2 Sep 2005 14:00:00 -0000	1.31
  @@ -39,12 +39,15 @@
   
   =head1 DESCRIPTION
   
  -B<OSSP uuid> is a ISO-C, ISO-C++ and Perl application programming
  -interface (API) and corresponding command line interface (CLI) for
  -the generation of DCE 1.1, ISO/IEC 11578:1996 and RFC 4122 compliant
  -I<Universally Unique Identifier> (UUID). It supports DCE 1.1 variant
  -UUIDs of version 1 (time and node based), version 3 (name based, MD5),
  -version 4 (random number based) and version 5 (name based, SHA-1).
  +B<OSSP uuid> is a ISO-C:1999 application programming interface (API)
  +and corresponding command line interface (CLI) for the generation of
  +DCE 1.1, ISO/IEC 11578:1996 and RFC 4122 compliant I<Universally Unique
  +Identifier> (UUID). It supports DCE 1.1 variant UUIDs of version 1 (time
  +and node based), version 3 (name based, MD5), version 4 (random number
  +based) and version 5 (name based, SHA-1). Additional API bindings are
  +provided for the languages ISO-C++:1998, Perl:5 and PHP:4/5. Optional
  +backward compatibility exists for the ISO-C DCE-1.1 and Perl Data::UUID
  +APIs.
   
   UUIDs are 128 bit numbers which are intended to have a high likelihood
   of uniqueness over space and time and are computationally difficult
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.pod
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 uuid_cli.pod
  --- ossp-pkg/uuid/uuid_cli.pod	31 Aug 2005 20:10:25 -0000	1.22
  +++ ossp-pkg/uuid/uuid_cli.pod	2 Sep 2005 14:00:00 -0000	1.23
  @@ -56,12 +56,15 @@
   
   =head1 DESCRIPTION
   
  -B<OSSP uuid> is a ISO-C, ISO-C++ and Perl application programming
  -interface (API) and corresponding command line interface (CLI) for
  -the generation of DCE 1.1, ISO/IEC 11578:1996 and RFC 4122 compliant
  -I<Universally Unique Identifier> (UUID). It supports DCE 1.1 variant
  -UUIDs of version 1 (time and node based), version 3 (name based, MD5),
  -version 4 (random number based) and version 5 (name based, SHA-1).
  +B<OSSP uuid> is a ISO-C:1999 application programming interface (API)
  +and corresponding command line interface (CLI) for the generation of
  +DCE 1.1, ISO/IEC 11578:1996 and RFC 4122 compliant I<Universally Unique
  +Identifier> (UUID). It supports DCE 1.1 variant UUIDs of version 1 (time
  +and node based), version 3 (name based, MD5), version 4 (random number
  +based) and version 5 (name based, SHA-1). Additional API bindings are
  +provided for the languages ISO-C++:1998, Perl:5 and PHP:4/5. Optional
  +backward compatibility exists for the ISO-C DCE-1.1 and Perl Data::UUID
  +APIs.
   
   UUIDs are 128 bit numbers which are intended to have a high likelihood
   of uniqueness over space and time and are computationally difficult
  @@ .

From ossp-cvs-owner@ossp.org  Fri Sep  2 16:00:46 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 44AC8752ED2; Fri,  2 Sep 2005 16:00:46 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ INSTALL
Message-Id: <20050902140046.44AC8752ED2@mail.ossp.org>
Date: Fri,  2 Sep 2005 16:00:46 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Sep-2005 16:00:46
  Branch: HEAD                             Handle: 2005090215004500

  Modified files:
    ossp-pkg/uuid           INSTALL

  Log:
    mention PHP

  Summary:
    Revision    Changes     Path
    1.5         +6  -5      ossp-pkg/uuid/INSTALL
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/INSTALL
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 INSTALL
  --- ossp-pkg/uuid/INSTALL	31 Aug 2005 10:36:11 -0000	1.4
  +++ ossp-pkg/uuid/INSTALL	2 Sep 2005 14:00:45 -0000	1.5
  @@ -11,11 +11,12 @@
     To install OSSP uuid into /path/to/uuid/ perform
     the following steps in your shell:
   
  -    $ ./configure \
  -         --prefix=/path/to/uuid \
  -         [--with-dce] \
  -         [--with-perl[=/path/to/[bin[/perl]
  -          --with-perl-compat]]
  +    $ ./configure
  +         --prefix=/path/to/uuid
  +        [--with-dce]
  +        [--with-perl[=/path/to/[bin[/perl]
  +         --with-perl-compat]]
  +        [--with-php]
       $ make
       $ make check
       $ make install [DESTDIR=/path/to/temp/root]
  @@ .

From ossp-cvs-owner@ossp.org  Fri Sep  2 16:23:47 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 30646752ED2; Fri,  2 Sep 2005 16:23:47 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog NEWS README uuid_vers.h
Message-Id: <20050902142347.30646752ED2@mail.ossp.org>
Date: Fri,  2 Sep 2005 16:23:47 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Sep-2005 16:23:47
  Branch: HEAD                             Handle: 2005090215234600

  Modified files:
    ossp-pkg/uuid           ChangeLog NEWS README uuid_vers.h

  Log:
    prepare for release

  Summary:
    Revision    Changes     Path
    1.87        +1  -1      ossp-pkg/uuid/ChangeLog
    1.6         +2  -1      ossp-pkg/uuid/NEWS
    1.32        +1  -1      ossp-pkg/uuid/README
    1.17        +5  -5      ossp-pkg/uuid/uuid_vers.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.86 -r1.87 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	1 Sep 2005 22:24:01 -0000	1.86
  +++ ossp-pkg/uuid/ChangeLog	2 Sep 2005 14:23:46 -0000	1.87
  @@ -11,7 +11,7 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 1.2.1 and 1.3.0 (30-Aug-2005 to xx-XXX-2005)
  +  Changes between 1.2.1 and 1.3.0 (30-Aug-2005 to 02-Sep-2005)
   
      o Add an experimental PHP 4/5 language API binding which
        can be enabled under build-time with opption --with-php.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/NEWS
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 NEWS
  --- ossp-pkg/uuid/NEWS	31 Aug 2005 20:08:54 -0000	1.5
  +++ ossp-pkg/uuid/NEWS	2 Sep 2005 14:23:46 -0000	1.6
  @@ -12,9 +12,10 @@
     change descriptions, please have a look at the ChangeLog file.
   
     Changes between 1.2 and 1.3
  -    o Added new C++ API.
       o Added Perl TIE-style API.
       o Added Perl Data::UUID backward compatibility API.
  +    o Added C++ API.
  +    o Added PHP API.
     Changes between 1.1 and 1.2
       o Added support for version 5 UUIDs (name-based, SHA-1)
     Changes between 1.0 and 1.1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 README
  --- ossp-pkg/uuid/README	2 Sep 2005 14:00:00 -0000	1.31
  +++ ossp-pkg/uuid/README	2 Sep 2005 14:23:46 -0000	1.32
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
   
     OSSP uuid - Universally Unique Identifier
  -  Version 1.3.0 (31-Aug-2005)
  +  Version 1.3.0 (02-Sep-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_vers.h
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 uuid_vers.h
  --- ossp-pkg/uuid/uuid_vers.h	31 Aug 2005 09:59:45 -0000	1.16
  +++ ossp-pkg/uuid/uuid_vers.h	2 Sep 2005 14:23:46 -0000	1.17
  @@ -34,12 +34,12 @@
   _uuid_version_t _uuid_version = {
       0x103200,
       "1.3.0",
  -    "1.3.0 (31-Aug-2005)",
  -    "This is OSSP uuid, Version 1.3.0 (31-Aug-2005)",
  -    "OSSP uuid 1.3.0 (31-Aug-2005)",
  +    "1.3.0 (02-Sep-2005)",
  +    "This is OSSP uuid, Version 1.3.0 (02-Sep-2005)",
  +    "OSSP uuid 1.3.0 (02-Sep-2005)",
       "OSSP uuid/1.3.0",
  -    "@(#)OSSP uuid 1.3.0 (31-Aug-2005)",
  -    "$Id: OSSP uuid 1.3.0 (31-Aug-2005) $"
  +    "@(#)OSSP uuid 1.3.0 (02-Sep-2005)",
  +    "$Id: OSSP uuid 1.3.0 (02-Sep-2005) $"
   };
   
   #endif /* _UUID_VERS_H_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Fri Sep  2 16:27:25 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id F0616752ED2; Fri,  2 Sep 2005 16:27:24 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20050902142724.F0616752ED2@mail.ossp.org>
Date: Fri,  2 Sep 2005 16:27:24 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   02-Sep-2005 16:27:24
  Branch: HEAD                             Handle: 2005090215272301

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/uuid   index.wml

  Log:
    release OSSP uuid 1.3.0

  Summary:
    Revision    Changes     Path
    1.127       +1  -0      ossp-web/new/news.txt
    1.107       +1  -1      ossp-web/pkg/lib/index.wml
    1.24        +11 -8      ossp-web/pkg/lib/uuid/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.126 -r1.127 news.txt
  --- ossp-web/new/news.txt	30 Aug 2005 20:15:21 -0000	1.126
  +++ ossp-web/new/news.txt	2 Sep 2005 14:27:23 -0000	1.127
  @@ -1,3 +1,4 @@
  +02-Sep-2005: Released L<OSSP uuid> 1.3.0
   30-Aug-2005: Released L<OSSP uuid> 1.2.1
   18-Aug-2005: Released T<OSSP svs> 1.0.3
   15-Jun-2005: Released T<OSSP shtool> 2.0.2
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.106 -r1.107 index.wml
  --- ossp-web/pkg/lib/index.wml	30 Aug 2005 20:15:21 -0000	1.106
  +++ ossp-web/pkg/lib/index.wml	2 Sep 2005 14:27:24 -0000	1.107
  @@ -33,7 +33,7 @@
   			done=100 stable=1.1.2 unstable=none>
     <pkg_item name="uuid" longname="OSSP uuid" type="lib"
               desc="Universally Unique Identifier"
  -			done=100 stable=1.2.1 unstable=none>
  +			done=100 stable=1.3.0 unstable=none>
     <pkg_item name="val" longname="OSSP val" type="lib"
               desc="Value Access"
   			done=95 stable=none unstable=0.9.3>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/uuid/index.wml
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 index.wml
  --- ossp-web/pkg/lib/uuid/index.wml	30 Aug 2005 20:37:38 -0000	1.23
  +++ ossp-web/pkg/lib/uuid/index.wml	2 Sep 2005 14:27:24 -0000	1.24
  @@ -14,12 +14,15 @@
   
   <h2>Abstract</h2>
   
  -OSSP uuid is a ISO-C and Perl application programming interface (API)
  -and corresponding command line interface (CLI) for the generation of
  -DCE 1.1, ISO/IEC 11578:1996 and RFC 4122 compliant Universally Unique Identifiers
  -(UUID). It supports DCE 1.1 variant UUIDs of version 1 (time and node
  -based), version 3 (name based, MD5), version 4 (random number based) and
  -version 5 (name based, SHA-1).
  +OSSP uuid is a ISO-C:1999 application programming interface (API) and
  +corresponding command line interface (CLI) for the generation of DCE
  +1.1, ISO/IEC 11578:1996 and RFC 4122 compliant Universally Unique
  +Identifier (UUID). It supports DCE 1.1 variant UUIDs of version 1 (time
  +and node based), version 3 (name based, MD5), version 4 (random number
  +based) and version 5 (name based, SHA-1). Additional API bindings are
  +provided for the languages ISO-C++:1998, Perl:5 and PHP:4/5. Optional
  +backward compatibility exists for the ISO-C DCE-1.1 and Perl Data::UUID
  +APIs.
   
   <p>
   UUIDs are 128 bit numbers which are intended to have a high likelihood
  @@ -45,7 +48,7 @@
   
   <pkg_status
       name="uuid" assign="rse"
  -    stable="1.2.1"    stable_date="30-Aug-2005"
  +    stable="1.3.0"    stable_date="02-Sep-2005"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -56,7 +59,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/uuid/
       directory=$(FTP_ROOT_DIR)/pkg/lib/uuid/
       files="uuid-[0-9.]*.tar.gz" 
  -	stable="uuid-1\.2\.1\.tar\.gz" unstable="none">
  +	stable="uuid-1\.3\.0\.tar\.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Sep  2 16:32:41 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id EB86F752ED2; Fri,  2 Sep 2005 16:32:40 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.ac
Message-Id: <20050902143240.EB86F752ED2@mail.ossp.org>
Date: Fri,  2 Sep 2005 16:32:40 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Sep-2005 16:32:40
  Branch: HEAD                             Handle: 2005090215324000

  Modified files:
    ossp-pkg/uuid           uuid.ac

  Log:
    fix typo

  Summary:
    Revision    Changes     Path
    1.18        +1  -1      ossp-pkg/uuid/uuid.ac
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.ac
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 uuid.ac
  --- ossp-pkg/uuid/uuid.ac	1 Sep 2005 22:24:01 -0000	1.17
  +++ ossp-pkg/uuid/uuid.ac	2 Sep 2005 14:32:40 -0000	1.18
  @@ -149,7 +149,7 @@
       fi
       AC_SUBST(PHP_NAME)
       AC_SUBST(WITH_PHP)
  -    AC_PATH_PROG(PHP, php5 php, NA)
  +    AC_PATH_PROGS(PHP, php5 php, NA)
       if test ".$ac_cv_with_php" = ".yes" -a ".$PHP" = ".NA"; then
           AC_ERROR([required PHP interpreter not found in \$PATH])
       fi
  @@ .

From ossp-cvs-owner@ossp.org  Fri Sep  2 16:36:41 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id CD913752ED2; Fri,  2 Sep 2005 16:36:41 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ Makefile.in
Message-Id: <20050902143641.CD913752ED2@mail.ossp.org>
Date: Fri,  2 Sep 2005 16:36:41 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Sep-2005 16:36:41
  Branch: HEAD                             Handle: 2005090215364100

  Modified files:
    ossp-pkg/uuid           Makefile.in

  Log:
    one more typo

  Summary:
    Revision    Changes     Path
    1.34        +1  -1      ossp-pkg/uuid/Makefile.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	1 Sep 2005 22:24:01 -0000	1.33
  +++ ossp-pkg/uuid/Makefile.in	2 Sep 2005 14:36:41 -0000	1.34
  @@ -124,7 +124,7 @@
   
   $(PHP_NAME): $(PHP_OBJS) $(LIB_NAME)
   	@cd php && $(MAKE) $(MFLAGS) -f Makefile.local PHP=$(PHP)
  -	@touch $(PERL_NAME)
  +	@touch $(PHP_NAME)
   
   uuid.lo: uuid.c config.h uuid.h uuid_md5.h uuid_sha1.h uuid_prng.h uuid_mac.h uuid_ui64.h uuid_str.h uuid_bm.h uuid_ac.h
   uuid_mac.lo: uuid_mac.c config.h uuid_mac.h
  @@ .

From ossp-cvs-owner@ossp.org  Fri Sep  2 16:40:14 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id EC6C0752ED2; Fri,  2 Sep 2005 16:40:13 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ Makefile.in ossp-pkg/uuid/php/ Makefile.loc...
Message-Id: <20050902144013.EC6C0752ED2@mail.ossp.org>
Date: Fri,  2 Sep 2005 16:40:13 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Sep-2005 16:40:13
  Branch: HEAD                             Handle: 2005090215401300

  Modified files:
    ossp-pkg/uuid           Makefile.in
    ossp-pkg/uuid/php       Makefile.local

  Log:
    fix DESTDIR passing and usage in PHP part

  Summary:
    Revision    Changes     Path
    1.35        +2  -2      ossp-pkg/uuid/Makefile.in
    1.2         +6  -5      ossp-pkg/uuid/php/Makefile.local
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	2 Sep 2005 14:36:41 -0000	1.34
  +++ ossp-pkg/uuid/Makefile.in	2 Sep 2005 14:40:13 -0000	1.35
  @@ -238,10 +238,10 @@
   	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -s -m 755 uuid $(DESTDIR)$(bindir)/
   	$(SHTOOL) install -c -m 644 $(srcdir)/uuid.1 $(DESTDIR)$(mandir)/man1/
   	-@if [ ".$(WITH_PERL)" = .yes ]; then \
  -	    (cd perl && $(MAKE) $(MFLAGS) install); \
  +	    (cd perl && $(MAKE) $(MFLAGS) install DESTDIR=$(DESTDIR)); \
   	fi
   	-@if [ ".$(WITH_PHP)" = .yes ]; then \
  -	    (cd php && $(MAKE) $(MFLAGS) -f Makefile.local install EXTDIR=$(prefix)/lib/php PHP=$(PHP)); \
  +	    (cd php && $(MAKE) $(MFLAGS) -f Makefile.local install EXTDIR=$(prefix)/lib/php PHP=$(PHP) DESTDIR=$(DESTDIR)); \
   	fi
   
   uninstall:
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/php/Makefile.local
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 Makefile.local
  --- ossp-pkg/uuid/php/Makefile.local	1 Sep 2005 22:24:02 -0000	1.1
  +++ ossp-pkg/uuid/php/Makefile.local	2 Sep 2005 14:40:13 -0000	1.2
  @@ -27,8 +27,9 @@
   ##  Makefile.local: PHP/Zend API build procedure (language: make)
   ##
   
  -PHP    = php
  -EXTDIR = `$(PHP)-config --extension-dir`
  +PHP     = php
  +EXTDIR  = `$(PHP)-config --extension-dir`
  +DESTDIR =
   
   all: build
   
  @@ -46,9 +47,9 @@
   install: build
   	@version=`$(PHP)-config --version | sed -e 's;^\([0-9]\).*$$;\1;'`; extdir="$(EXTDIR)"; \
   	echo "installing PHP$$version API into $$extdir"; \
  -	./build/shtool mkdir -f -p -m 755 $$extdir; \
  -	./build/shtool install -c -m 755 modules/uuid.so $$extdir/uuid.so; \
  -	./build/shtool install -c -m 644 uuid.php$$version $$extdir/uuid.php
  +	./build/shtool mkdir -f -p -m 755 $(DESTDIR)$$extdir; \
  +	./build/shtool install -c -m 755 modules/uuid.so $(DESTDIR)$$extdir/uuid.so; \
  +	./build/shtool install -c -m 644 uuid.php$$version $(DESTDIR)$$extdir/uuid.php
   
   clean:
   	@$(MAKE) $(MFLAGS) -f Makefile clean || true
  @@ .

From ossp-cvs-owner@ossp.org  Fri Sep  2 19:22:06 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id E73C0752ED2; Fri,  2 Sep 2005 19:22:05 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog Makefile.in TODO ossp-pkg/uuid/pe...
Message-Id: <20050902172205.E73C0752ED2@mail.ossp.org>
Date: Fri,  2 Sep 2005 19:22:05 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Sep-2005 19:22:05
  Branch: HEAD                             Handle: 2005090218220500

  Modified files:
    ossp-pkg/uuid           ChangeLog Makefile.in TODO
    ossp-pkg/uuid/perl      Makefile.PL

  Log:
    small cleanups to the source tree only

  Summary:
    Revision    Changes     Path
    1.88        +2  -0      ossp-pkg/uuid/ChangeLog
    1.36        +1  -1      ossp-pkg/uuid/Makefile.in
    1.26        +2  -3      ossp-pkg/uuid/TODO
    1.8         +2  -1      ossp-pkg/uuid/perl/Makefile.PL
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.87 -r1.88 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	2 Sep 2005 14:23:46 -0000	1.87
  +++ ossp-pkg/uuid/ChangeLog	2 Sep 2005 17:22:05 -0000	1.88
  @@ -11,6 +11,8 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 1.3.0 and 1.3.1 (02-Sep-2005 to xx-xxx-2005)
  +
     Changes between 1.2.1 and 1.3.0 (30-Aug-2005 to 02-Sep-2005)
   
      o Add an experimental PHP 4/5 language API binding which
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	2 Sep 2005 14:40:13 -0000	1.35
  +++ ossp-pkg/uuid/Makefile.in	2 Sep 2005 17:22:05 -0000	1.36
  @@ -29,9 +29,9 @@
   
   @SET_MAKE@
   
  +VPATH       = @srcdir@
   srcdir      = @srcdir@
   top_srcdir  = @top_srcdir@
  -VPATH       = @srcdir@
   
   DESTDIR     =
   prefix      = @prefix@
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/TODO
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 TODO
  --- ossp-pkg/uuid/TODO	23 Jan 2005 11:27:12 -0000	1.25
  +++ ossp-pkg/uuid/TODO	2 Sep 2005 17:22:05 -0000	1.26
  @@ -15,10 +15,9 @@
     =====
   
     - allow to re-create version 1 UUIDs by specifying time, etc.
  -  - use MD5/SHA1 for further post-processing data in PRNG?
     - getopt_long support for CLI?
     - a more sophisticated test suite with UUID references?!
     - more platform support in uuid_mac.c?!
  -  - global memory locking according to standard??
  -  - persistent/non-volatile state writing according to standard??
  +  - global memory locking according to standard hints??
  +  - persistent/non-volatile state writing according to standard hints??
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/Makefile.PL
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 Makefile.PL
  --- ossp-pkg/uuid/perl/Makefile.PL	31 Aug 2005 10:34:09 -0000	1.7
  +++ ossp-pkg/uuid/perl/Makefile.PL	2 Sep 2005 17:22:05 -0000	1.8
  @@ -27,7 +27,8 @@
   ##  Makefile.PL: Perl MakeMaker build source procedure
   ##
   
  -use 5.008;
  +require 5.008;
  +
   use Config;
   use ExtUtils::MakeMaker;
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Sep  2 20:16:14 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 1900B752ED2; Fri,  2 Sep 2005 20:16:14 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog Makefile.in devtool.conf
Message-Id: <20050902181614.1900B752ED2@mail.ossp.org>
Date: Fri,  2 Sep 2005 20:16:14 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Sep-2005 20:16:13
  Branch: HEAD                             Handle: 2005090219161300

  Modified files:
    ossp-pkg/uuid           ChangeLog Makefile.in devtool.conf

  Log:
    Add VPATH/srcdir support for at the default
    build procedure plus at least C++ and DCE build options.

  Summary:
    Revision    Changes     Path
    1.89        +4  -0      ossp-pkg/uuid/ChangeLog
    1.37        +65 -60     ossp-pkg/uuid/Makefile.in
    1.20        +1  -0      ossp-pkg/uuid/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.88 -r1.89 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	2 Sep 2005 17:22:05 -0000	1.88
  +++ ossp-pkg/uuid/ChangeLog	2 Sep 2005 18:16:13 -0000	1.89
  @@ -13,6 +13,10 @@
   
     Changes between 1.3.0 and 1.3.1 (02-Sep-2005 to xx-xxx-2005)
   
  +   o Add VPATH/srcdir support for at the default 
  +     build procedure plus at least C++ and DCE build options.
  +     [Ralf S. Engelschall]
  +
     Changes between 1.2.1 and 1.3.0 (30-Aug-2005 to 02-Sep-2005)
   
      o Add an experimental PHP 4/5 language API binding which
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.36 -r1.37 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	2 Sep 2005 17:22:05 -0000	1.36
  +++ ossp-pkg/uuid/Makefile.in	2 Sep 2005 18:16:13 -0000	1.37
  @@ -32,6 +32,8 @@
   VPATH       = @srcdir@
   srcdir      = @srcdir@
   top_srcdir  = @top_srcdir@
  +S           = $(srcdir)
  +C           = .
   
   DESTDIR     =
   prefix      = @prefix@
  @@ -43,7 +45,7 @@
   
   CC          = @CC@
   CXX         = @CXX@
  -CPPFLAGS    = -I. -I$(srcdir) @CPPFLAGS@ @DEFS@
  +CPPFLAGS    = -I. -I$(S) @CPPFLAGS@ @DEFS@
   CFLAGS      = @CFLAGS@
   CXXFLAGS    = @CXXFLAGS@
   LDFLAGS     = @LDFLAGS@
  @@ -51,8 +53,8 @@
   RM          = rm -f
   CP          = cp
   RMDIR       = rmdir
  -SHTOOL      = $(top_srcdir)/shtool
  -LIBTOOL     = ./libtool
  +SHTOOL      = $(S)/shtool
  +LIBTOOL     = $(C)/libtool
   TRUE        = true
   POD2MAN     = pod2man
   PERL        = @PERL@
  @@ -72,11 +74,11 @@
   
   MAN_NAME    = uuid.3 uuid++.3 uuid.1
   
  -PERL_NAME   = perl/blib/lib/OSSP/uuid.pm
  -PERL_OBJS   = perl/uuid.pm
  +PERL_NAME   = $(S)/perl/blib/lib/OSSP/uuid.pm
  +PERL_OBJS   = $(S)/perl/uuid.pm
   
  -PHP_NAME    = php/modules/uuid.so
  -PHP_OBJS    = php/uuid.c
  +PHP_NAME    = $(S)/php/modules/uuid.so
  +PHP_OBJS    = $(S)/php/uuid.c
   
   TARGETS     = $(LIB_NAME) @DCE_NAME@ @CXX_NAME@ $(PRG_NAME) @PERL_NAME@ @PHP_NAME@
   
  @@ -105,68 +107,68 @@
   
   $(LIB_NAME): $(LIB_OBJS)
   	@$(LIBTOOL) --mode=link $(CC) -o $(LIB_NAME) $(LIB_OBJS) -rpath $(libdir) \
  -	    -version-info `$(SHTOOL) version -l c -d libtool $(top_srcdir)/uuid_vers.h`
  +	    -version-info `$(SHTOOL) version -l c -d libtool $(S)/uuid_vers.h`
   
   $(DCE_NAME): $(DCE_OBJS)
   	@$(LIBTOOL) --mode=link $(CC) -o $(DCE_NAME) $(DCE_OBJS) -rpath $(libdir) \
  -	    -version-info `$(SHTOOL) version -l c -d libtool $(top_srcdir)/uuid_vers.h`
  +	    -version-info `$(SHTOOL) version -l c -d libtool $(S)/uuid_vers.h`
   
   $(CXX_NAME): $(CXX_OBJS)
   	@$(LIBTOOL) --mode=link $(CXX) -o $(CXX_NAME) $(CXX_OBJS) -rpath $(libdir) \
  -	    -version-info `$(SHTOOL) version -l c -d libtool $(top_srcdir)/uuid_vers.h`
  +	    -version-info `$(SHTOOL) version -l c -d libtool $(S)/uuid_vers.h`
   
   $(PRG_NAME): $(PRG_OBJS) $(LIB_NAME)
   	@$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $(PRG_NAME) $(PRG_OBJS) $(LIB_NAME) $(LIBS)
   
   $(PERL_NAME): $(PERL_OBJS) $(LIB_NAME)
  -	@cd perl && $(PERL) Makefile.PL PREFIX=$(prefix) COMPAT=$(WITH_PERL_COMPAT) && $(MAKE) $(MFLAGS) all
  +	@cd $(S)/perl && $(PERL) Makefile.PL PREFIX=$(prefix) COMPAT=$(WITH_PERL_COMPAT) && $(MAKE) $(MFLAGS) all
   	@touch $(PERL_NAME)
   
   $(PHP_NAME): $(PHP_OBJS) $(LIB_NAME)
  -	@cd php && $(MAKE) $(MFLAGS) -f Makefile.local PHP=$(PHP)
  +	@cd $(S)/php && $(MAKE) $(MFLAGS) -f Makefile.local PHP=$(PHP)
   	@touch $(PHP_NAME)
   
  -uuid.lo: uuid.c config.h uuid.h uuid_md5.h uuid_sha1.h uuid_prng.h uuid_mac.h uuid_ui64.h uuid_str.h uuid_bm.h uuid_ac.h
  -uuid_mac.lo: uuid_mac.c config.h uuid_mac.h
  -uuid_md5.lo: uuid_md5.c uuid_md5.h
  -uuid_sha1.lo: uuid_sha1.c uuid_sha1.h
  -uuid_prng.lo: uuid_prng.c uuid_prng.h
  -uuid_str.lo: uuid_str.c config.h uuid_str.h
  -uuid_ui64.lo: uuid_ui64.c uuid_ui64.h
  -uuid_dce.lo: uuid_dce.c uuid.h uuid_dce.h
  -uuid_cli.o: uuid_cli.c uuid.h
  -uuid++.lo: uuid++.cc uuid++.hh
  +uuid.lo: $(S)/uuid.c uuid.h $(S)/uuid_md5.h $(S)/uuid_sha1.h $(S)/uuid_prng.h $(S)/uuid_mac.h $(S)/uuid_ui64.h $(S)/uuid_str.h $(S)/uuid_bm.h $(S)/uuid_ac.h
  +uuid_mac.lo: $(S)/uuid_mac.c $(S)/uuid_mac.h
  +uuid_md5.lo: $(S)/uuid_md5.c $(S)/uuid_md5.h
  +uuid_sha1.lo: $(S)/uuid_sha1.c $(S)/uuid_sha1.h
  +uuid_prng.lo: $(S)/uuid_prng.c $(S)/uuid_prng.h
  +uuid_str.lo: $(S)/uuid_str.c $(S)/uuid_str.h
  +uuid_ui64.lo: $(S)/uuid_ui64.c $(S)/uuid_ui64.h
  +uuid_dce.lo: $(S)/uuid_dce.c uuid.h $(S)/uuid_dce.h
  +uuid_cli.o: $(S)/uuid_cli.c uuid.h
  +uuid++.lo: $(S)/uuid++.cc $(S)/uuid++.hh
   
   man: uuid.3 uuid++.3 uuid-config.1 uuid.1
   uuid.3: uuid.pod
  -	V1=`$(SHTOOL) version -l c -d short $(top_srcdir)/uuid_vers.h`; \
  -	V2=`$(SHTOOL) version -l c -d long $(top_srcdir)/uuid_vers.h`; \
  -	D=`$(SHTOOL) version -l c -d long $(top_srcdir)/uuid_vers.h | sed -e 's;.*(;;' -e 's;).*;;'`; \
  +	V1=`$(SHTOOL) version -l c -d short $(S)/uuid_vers.h`; \
  +	V2=`$(SHTOOL) version -l c -d long $(S)/uuid_vers.h`; \
  +	D=`$(SHTOOL) version -l c -d long $(S)/uuid_vers.h | sed -e 's;.*(;;' -e 's;).*;;'`; \
   	$(POD2MAN) --quotes=none \
   	           --section=3 --center="Universally Unique Identifier" \
  -	           --release="$$D" --date="OSSP uuid $$V1" $(srcdir)/uuid.pod | \
  +	           --release="$$D" --date="OSSP uuid $$V1" $(S)/uuid.pod | \
   	sed -e "s;UUID_VERSION_STR;$$V2;" >uuid.3
   uuid++.3: uuid++.pod
  -	V1=`$(SHTOOL) version -l c -d short $(top_srcdir)/uuid_vers.h`; \
  -	V2=`$(SHTOOL) version -l c -d long $(top_srcdir)/uuid_vers.h`; \
  -	D=`$(SHTOOL) version -l c -d long $(top_srcdir)/uuid_vers.h | sed -e 's;.*(;;' -e 's;).*;;'`; \
  +	V1=`$(SHTOOL) version -l c -d short $(S)/uuid_vers.h`; \
  +	V2=`$(SHTOOL) version -l c -d long $(S)/uuid_vers.h`; \
  +	D=`$(SHTOOL) version -l c -d long $(S)/uuid_vers.h | sed -e 's;.*(;;' -e 's;).*;;'`; \
   	$(POD2MAN) --quotes=none \
   	           --section=3 --center="Universally Unique Identifier" \
  -	           --release="$$D" --date="OSSP uuid $$V1" $(srcdir)/uuid++.pod | \
  +	           --release="$$D" --date="OSSP uuid $$V1" $(S)/uuid++.pod | \
   	sed -e "s;UUID_VERSION_STR;$$V2;" >uuid++.3
   uuid-config.1: uuid-config.pod
  -	V1=`$(SHTOOL) version -l c -d short $(top_srcdir)/uuid_vers.h`; \
  -	V2=`$(SHTOOL) version -l c -d long $(top_srcdir)/uuid_vers.h`; \
  -	D=`$(SHTOOL) version -l c -d long $(top_srcdir)/uuid_vers.h | sed -e 's;.*(;;' -e 's;).*;;'`; \
  +	V1=`$(SHTOOL) version -l c -d short $(S)/uuid_vers.h`; \
  +	V2=`$(SHTOOL) version -l c -d long $(S)/uuid_vers.h`; \
  +	D=`$(SHTOOL) version -l c -d long $(S)/uuid_vers.h | sed -e 's;.*(;;' -e 's;).*;;'`; \
   	$(POD2MAN) --quotes=none \
   	           --section=1 --center="Universally Unique Identifier" \
  -	           --release="$$D" --date="OSSP uuid $$V1" $(srcdir)/uuid-config.pod | \
  +	           --release="$$D" --date="OSSP uuid $$V1" $(S)/uuid-config.pod | \
   	sed -e "s;UUID_VERSION_STR;$$V2;" >uuid-config.1
   uuid.1: uuid_cli.pod
  -	V1=`$(SHTOOL) version -l c -d short $(top_srcdir)/uuid_vers.h`; \
  -	V2=`$(SHTOOL) version -l c -d long $(top_srcdir)/uuid_vers.h`; \
  -	D=`$(SHTOOL) version -l c -d long $(top_srcdir)/uuid_vers.h | sed -e 's;.*(;;' -e 's;).*;;'`; \
  -	$(CP) $(srcdir)/uuid_cli.pod /tmp/uuid.pod; \
  +	V1=`$(SHTOOL) version -l c -d short $(S)/uuid_vers.h`; \
  +	V2=`$(SHTOOL) version -l c -d long $(S)/uuid_vers.h`; \
  +	D=`$(SHTOOL) version -l c -d long $(S)/uuid_vers.h | sed -e 's;.*(;;' -e 's;).*;;'`; \
  +	$(CP) $(S)/uuid_cli.pod /tmp/uuid.pod; \
   	$(POD2MAN) --quotes=none \
   	           --section=1 --center="Universally Unique Identifier" \
   	           --release="$$D" --date="OSSP uuid $$V1" /tmp/uuid.pod | \
  @@ -197,11 +199,11 @@
   	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -d `$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v4`
   	-@if [ ".$(WITH_PERL)" = .yes ]; then \
   	    echo "==== Perl bindings to C API"; \
  -	    (cd perl && $(MAKE) $(MFLAGS) test); \
  +	    (cd $(S)/perl && $(MAKE) $(MFLAGS) test); \
   	fi
   	-@if [ ".$(WITH_PHP)" = .yes ]; then \
   	    echo "==== PHP bindings to C API"; \
  -	    (cd php && $(MAKE) $(MFLAGS) -f Makefile.local test PHP=$(PHP)); \
  +	    (cd $(S)/php && $(MAKE) $(MFLAGS) -f Makefile.local test PHP=$(PHP)); \
   	fi
   
   install:
  @@ -211,22 +213,22 @@
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libdir)/pkgconfig
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man3
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man1
  -	$(SHTOOL) install -c -m 755 ./uuid-config $(DESTDIR)$(bindir)/
  -	$(SHTOOL) install -c -m 644 $(srcdir)/uuid-config.1 $(DESTDIR)$(mandir)/man1/
  -	$(SHTOOL) install -c -m 644 $(srcdir)/uuid.pc $(DESTDIR)$(libdir)/pkgconfig/
  -	$(SHTOOL) install -c -m 644 ./uuid.h $(DESTDIR)$(includedir)/
  +	$(SHTOOL) install -c -m 755 uuid-config $(DESTDIR)$(bindir)/
  +	$(SHTOOL) install -c -m 644 $(S)/uuid-config.1 $(DESTDIR)$(mandir)/man1/
  +	$(SHTOOL) install -c -m 644 $(S)/uuid.pc $(DESTDIR)$(libdir)/pkgconfig/
  +	$(SHTOOL) install -c -m 644 uuid.h $(DESTDIR)$(includedir)/
   	-@if [ ".$(WITH_DCE)" = .yes ]; then \
  -	    echo "$(SHTOOL) install -c -m 644 $(srcdir)/uuid_dce.h $(DESTDIR)$(includedir)/"; \
  -	    $(SHTOOL) install -c -m 644 $(srcdir)/uuid_dce.h $(DESTDIR)$(includedir)/; \
  +	    echo "$(SHTOOL) install -c -m 644 $(S)/uuid_dce.h $(DESTDIR)$(includedir)/"; \
  +	    $(SHTOOL) install -c -m 644 $(S)/uuid_dce.h $(DESTDIR)$(includedir)/; \
   	fi
   	-@if [ ".$(WITH_CXX)" = .yes ]; then \
  -	    echo "$(SHTOOL) install -c -m 644 $(srcdir)/uuid++.hh $(DESTDIR)$(includedir)/"; \
  -	    $(SHTOOL) install -c -m 644 $(srcdir)/uuid++.hh $(DESTDIR)$(includedir)/; \
  +	    echo "$(SHTOOL) install -c -m 644 $(S)/uuid++.hh $(DESTDIR)$(includedir)/"; \
  +	    $(SHTOOL) install -c -m 644 $(S)/uuid++.hh $(DESTDIR)$(includedir)/; \
   	fi
  -	$(SHTOOL) install -c -m 644 $(srcdir)/uuid.3 $(DESTDIR)$(mandir)/man3/
  +	$(SHTOOL) install -c -m 644 $(S)/uuid.3 $(DESTDIR)$(mandir)/man3/
   	-@if [ ".$(WITH_CXX)" = .yes ]; then \
  -	    echo "$(SHTOOL) install -c -m 644 $(srcdir)/uuid++.3 $(DESTDIR)$(mandir)/man3/"; \
  -	    $(SHTOOL) install -c -m 644 $(srcdir)/uuid++.3 $(DESTDIR)$(mandir)/man3/; \
  +	    echo "$(SHTOOL) install -c -m 644 $(S)/uuid++.3 $(DESTDIR)$(mandir)/man3/"; \
  +	    $(SHTOOL) install -c -m 644 $(S)/uuid++.3 $(DESTDIR)$(mandir)/man3/; \
   	fi
   	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libuuid.la $(DESTDIR)$(libdir)/
   	-@if [ ".$(WITH_DCE)" = .yes ]; then \
  @@ -236,12 +238,12 @@
   	    $(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libuuid++.la $(DESTDIR)$(libdir)/; \
   	fi
   	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -s -m 755 uuid $(DESTDIR)$(bindir)/
  -	$(SHTOOL) install -c -m 644 $(srcdir)/uuid.1 $(DESTDIR)$(mandir)/man1/
  +	$(SHTOOL) install -c -m 644 $(S)/uuid.1 $(DESTDIR)$(mandir)/man1/
   	-@if [ ".$(WITH_PERL)" = .yes ]; then \
  -	    (cd perl && $(MAKE) $(MFLAGS) install DESTDIR=$(DESTDIR)); \
  +	    (cd $(S)/perl && $(MAKE) $(MFLAGS) install DESTDIR=$(DESTDIR)); \
   	fi
   	-@if [ ".$(WITH_PHP)" = .yes ]; then \
  -	    (cd php && $(MAKE) $(MFLAGS) -f Makefile.local install EXTDIR=$(prefix)/lib/php PHP=$(PHP) DESTDIR=$(DESTDIR)); \
  +	    (cd $(S)/php && $(MAKE) $(MFLAGS) -f Makefile.local install EXTDIR=$(prefix)/lib/php PHP=$(PHP) DESTDIR=$(DESTDIR)); \
   	fi
   
   uninstall:
  @@ -294,21 +296,21 @@
   	-$(RM) -r .libs >/dev/null 2>&1 || $(TRUE)
   	-$(RM) *.o *.lo
   	-@if [ ".$(WITH_PERL)" = .yes ]; then \
  -	    (cd perl && $(MAKE) $(MFLAGS) clean || true); \
  +	    (cd $(S)/perl && $(MAKE) $(MFLAGS) clean || true); \
   	fi
   	-@if [ ".$(WITH_PHP)" = .yes ]; then \
  -	    (cd php && $(MAKE) $(MFLAGS) -f Makefile.local clean || true); \
  +	    (cd $(S)/php && $(MAKE) $(MFLAGS) -f Makefile.local clean || true); \
   	fi
   
   distclean: clean
   	-$(RM) config.log config.status config.cache
  -	-$(RM) Makefile config.h uuid-config uuid.h
  +	-$(RM) Makefile config.h uuid-config uuid.h uuid.pc
   	-$(RM) libtool
   	-@if [ ".$(WITH_PERL)" = .yes ]; then \
  -	    (cd perl && $(MAKE) $(MFLAGS) distclean || true; rm -f Makefile.old); \
  +	    (cd $(S)/perl && $(MAKE) $(MFLAGS) distclean || true; rm -f Makefile.old); \
   	fi
   	-@if [ ".$(WITH_PHP)" = .yes ]; then \
  -	    (cd php && $(MAKE) $(MFLAGS) -f Makefile.local distclean || true); \
  +	    (cd $(S)/php && $(MAKE) $(MFLAGS) -f Makefile.local distclean || true); \
   	fi
   
   realclean: distclean
  @@ -316,7 +318,10 @@
   	-$(RM) configure config.h.in
   	-$(RM) shtool
   	-$(RM) ltmain.sh libtool.m4 config.guess config.sub
  +	-@if [ ".$(WITH_PERL)" = .yes ]; then \
  +	    (cd $(S)/perl && $(MAKE) $(MFLAGS) realclean || true; rm -f Makefile.old); \
  +	fi
   	-@if [ ".$(WITH_PHP)" = .yes ]; then \
  -	    (cd php && $(MAKE) $(MFLAGS) -f Makefile.local realclean || true); \
  +	    (cd $(S)/php && $(MAKE) $(MFLAGS) -f Makefile.local realclean || true); \
   	fi
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 devtool.conf
  --- ossp-pkg/uuid/devtool.conf	1 Sep 2005 22:24:01 -0000	1.19
  +++ ossp-pkg/uuid/devtool.conf	2 Sep 2005 18:16:13 -0000	1.20
  @@ -17,6 +17,7 @@
           --prefix=/tmp/uuid \
           --disable-shared \
           --enable-debug \
  +        --with-dce \
           --with-cxx \
           --with-perl \
           --with-perl-compat \
  @@ .

From ossp-cvs-owner@ossp.org  Fri Sep  2 20:47:33 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id A9C85752ED2; Fri,  2 Sep 2005 20:47:33 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/php/ .cvsignore
Message-Id: <20050902184733.A9C85752ED2@mail.ossp.org>
Date: Fri,  2 Sep 2005 20:47:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Sep-2005 20:47:33
  Branch: HEAD                             Handle: 2005090219473300

  Modified files:
    ossp-pkg/uuid/php       .cvsignore

  Log:
    ignore one more generated file

  Summary:
    Revision    Changes     Path
    1.2         +1  -0      ossp-pkg/uuid/php/.cvsignore
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/php/.cvsignore
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 .cvsignore
  --- ossp-pkg/uuid/php/.cvsignore	1 Sep 2005 22:24:02 -0000	1.1
  +++ ossp-pkg/uuid/php/.cvsignore	2 Sep 2005 18:47:33 -0000	1.2
  @@ -14,6 +14,7 @@
   config.sub
   configure
   configure.in
  +configure.lineno
   include
   install-sh
   ltmain.sh
  @@ .

From ossp-cvs-owner@ossp.org  Fri Sep  2 20:47:54 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 042A1752F15; Fri,  2 Sep 2005 20:47:53 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/perl/ Makefile.PL
Message-Id: <20050902184753.042A1752F15@mail.ossp.org>
Date: Fri,  2 Sep 2005 20:47:53 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Sep-2005 20:47:53
  Branch: HEAD                             Handle: 2005090219475300

  Modified files:
    ossp-pkg/uuid/perl      Makefile.PL

  Log:
    support that the C API is built in an arbitrary subdir

  Summary:
    Revision    Changes     Path
    1.9         +9  -2      ossp-pkg/uuid/perl/Makefile.PL
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/Makefile.PL
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 Makefile.PL
  --- ossp-pkg/uuid/perl/Makefile.PL	2 Sep 2005 17:22:05 -0000	1.8
  +++ ossp-pkg/uuid/perl/Makefile.PL	2 Sep 2005 18:47:53 -0000	1.9
  @@ -32,17 +32,24 @@
   use Config;
   use ExtUtils::MakeMaker;
   
  +#   determine source directory
  +my ($srcdir) = map { my $d = $_; $d =~ s/\/libuuid\.la$//; $d }
  +               grep { -f $_ } ("../libuuid.la", glob("../*/libuuid.la"))
  +    or die "no source directory found (where libuuid.la is located)";
  +
  +#   determine extra build options
   my $compat = 0;
   @ARGV = grep { $_ =~ m/^COMPAT=(\d+)$/i ? ($compat = $1, 0) : 1 } @ARGV;
   
  +#   generate Makefile
   WriteMakefile(
       NAME              => 'OSSP::uuid',
       VERSION_FROM      => 'uuid.pm',
       ABSTRACT_FROM     => 'uuid.pod',
       PREREQ_PM         => {},
  -    LIBS              => [ '-L../.libs -luuid' ],
  +    LIBS              => [ "-L$srcdir/.libs -L$srcdir -luuid" ],
       DEFINE            => '',
  -    INC               => '-I. -I..',
  +    INC               => "-I. -I$srcdir",
       PM                => { 'uuid.pm'   => '$(INST_LIBDIR)/uuid.pm',
                              'uuid.pod'  => '$(INST_LIBDIR)/uuid.pod',
                              ($compat ? ('uuid_compat.pm'  => '$(INST_LIBDIR)/../Data/UUID.pm')  : ()),
  @@ .

From ossp-cvs-owner@ossp.org  Fri Sep  2 20:57:32 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 931E1752ED2; Fri,  2 Sep 2005 20:57:32 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ NEWS
Message-Id: <20050902185732.931E1752ED2@mail.ossp.org>
Date: Fri,  2 Sep 2005 20:57:32 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Sep-2005 20:57:32
  Branch: HEAD                             Handle: 2005090219573200

  Modified files:
    ossp-pkg/uuid           NEWS

  Log:
    better readability

  Summary:
    Revision    Changes     Path
    1.7         +11 -4      ossp-pkg/uuid/NEWS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/NEWS
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 NEWS
  --- ossp-pkg/uuid/NEWS	2 Sep 2005 14:23:46 -0000	1.6
  +++ ossp-pkg/uuid/NEWS	2 Sep 2005 18:57:32 -0000	1.7
  @@ -11,15 +11,22 @@
     This is a list of major changes to OSSP uuid. For more detailed
     change descriptions, please have a look at the ChangeLog file.
   
  -  Changes between 1.2 and 1.3
  +  Major changes between 1.2 and 1.3
  +
       o Added Perl TIE-style API.
       o Added Perl Data::UUID backward compatibility API.
       o Added C++ API.
       o Added PHP API.
  -  Changes between 1.1 and 1.2
  +
  +  Major changes between 1.1 and 1.2
  +
       o Added support for version 5 UUIDs (name-based, SHA-1)
  -  Changes between 1.0 and 1.1
  +
  +  Major changes between 1.0 and 1.1
  +
       o Added Perl API
  -  Changes between 0.9 and 1.0
  +
  +  Major changes between 0.9 and 1.0
  +
       o Initial functionality
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Sep  2 21:50:35 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 1AFCF752ED2; Fri,  2 Sep 2005 21:50:35 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm/ ChangeLog mm_alloc.c
Message-Id: <20050902195035.1AFCF752ED2@mail.ossp.org>
Date: Fri,  2 Sep 2005 21:50:35 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Sep-2005 21:50:35
  Branch: HEAD                             Handle: 2005090220503400

  Modified files:
    ossp-pkg/mm             ChangeLog mm_alloc.c

  Log:
    Optimize insertion of free memory chunks by merging with
    the spare area if possible to decrease memory fragmentation.

  Summary:
    Revision    Changes     Path
    1.49        +4  -0      ossp-pkg/mm/ChangeLog
    1.21        +16 -1      ossp-pkg/mm/mm_alloc.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.48 -r1.49 ChangeLog
  --- ossp-pkg/mm/ChangeLog	15 Nov 2004 16:48:06 -0000	1.48
  +++ ossp-pkg/mm/ChangeLog	2 Sep 2005 19:50:34 -0000	1.49
  @@ -11,6 +11,10 @@
   
    Changes between 1.3.1 and 1.3.2 (12-Sep-2003 to xx-Nov-2004)
   
  +  *) Optimize insertion of free memory chunks by merging with
  +     the spare area if possible to decrease memory fragmentation.
  +     [<gennadyd@yahoo.com>]
  +
     *) Fix mm_realloc() function: If the memory chunk passed to mm_realloc()
        can't be extended and a new chunk must be allocated, the old memory
        is copied into the new chunk with a call to memcpy(3). However, the
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm_alloc.c
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 mm_alloc.c
  --- ossp-pkg/mm/mm_alloc.c	15 Nov 2004 16:48:06 -0000	1.20
  +++ ossp-pkg/mm/mm_alloc.c	2 Sep 2005 19:50:34 -0000	1.21
  @@ -188,13 +188,17 @@
   {
       mem_chunk *mc;
       mem_chunk *mcPrev;
  +    mem_chunk *mcPrevPrev;
       mem_chunk *mcNext;
   
       if (!mm_core_lock((void *)mm, MM_LOCK_RW))
           return;
       mc = &(mm->mp_freechunks);
  -    while (mc->mc_u.mc_next != NULL && (char *)(mc->mc_u.mc_next) < (char *)mcInsert)
  +    mcPrevPrev = mc;
  +    while (mc->mc_u.mc_next != NULL && (char *)(mc->mc_u.mc_next) < (char *)mcInsert) {
  +        mcPrevPrev = mc;
           mc = mc->mc_u.mc_next;
  +    }
       mcPrev = mc;
       mcNext = mc->mc_u.mc_next;
       if (mcPrev == mcInsert || mcNext == mcInsert) {
  @@ -209,6 +213,13 @@
           mcPrev->mc_u.mc_next = mcNext->mc_u.mc_next;
           mm->mp_freechunks.mc_usize -= 1;
       }
  +    else if ((char *)mcPrev+(mcPrev->mc_size) == (char *)mcInsert &&
  +             (char *)mcInsert+(mcInsert->mc_size) == ((char *)mm + mm->mp_offset)) {
  +        /* merge with previous and spare block (to increase spare area) */
  +        mcPrevPrev->mc_u.mc_next = mcPrev->mc_u.mc_next;
  +        mm->mp_offset -= (mcInsert->mc_size + mcPrev->mc_size);
  +        mm->mp_freechunks.mc_usize -= 1;
  +    }
       else if ((char *)mcPrev+(mcPrev->mc_size) == (char *)mcInsert) {
           /* merge with previous chunk */
           mcPrev->mc_size += mcInsert->mc_size;
  @@ -219,6 +230,10 @@
           mcInsert->mc_u.mc_next = mcNext->mc_u.mc_next;
           mcPrev->mc_u.mc_next = mcInsert;
       }
  +    else if ((char *)mcInsert+(mcInsert->mc_size) == ((char *)mm + mm->mp_offset)) {
  +        /* merge with spare block (to increase spare area) */
  +        mm->mp_offset -= mcInsert->mc_size;
  +    }
       else {
           /* no merging possible, so insert as new chunk */
           mcInsert->mc_u.mc_next = mcNext;
  @@ .

From ossp-cvs-owner@ossp.org  Fri Sep  2 21:53:45 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B19F6752ED2; Fri,  2 Sep 2005 21:53:45 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm/ ChangeLog devtool.conf
Message-Id: <20050902195345.B19F6752ED2@mail.ossp.org>
Date: Fri,  2 Sep 2005 21:53:45 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Sep-2005 21:53:45
  Branch: HEAD                             Handle: 2005090220534500

  Modified files:
    ossp-pkg/mm             ChangeLog devtool.conf

  Log:
    upgrade build env tools

  Summary:
    Revision    Changes     Path
    1.50        +2  -2      ossp-pkg/mm/ChangeLog
    1.7         +2  -2      ossp-pkg/mm/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.49 -r1.50 ChangeLog
  --- ossp-pkg/mm/ChangeLog	2 Sep 2005 19:50:34 -0000	1.49
  +++ ossp-pkg/mm/ChangeLog	2 Sep 2005 19:53:45 -0000	1.50
  @@ -9,7 +9,7 @@
    ChangeLog
    =========
   
  - Changes between 1.3.1 and 1.3.2 (12-Sep-2003 to xx-Nov-2004)
  + Changes between 1.3.1 and 1.4.0 (12-Sep-2003 to 02-Sep-2005)
   
     *) Optimize insertion of free memory chunks by merging with
        the spare area if possible to decrease memory fragmentation.
  @@ -22,7 +22,7 @@
        access memory beyond the old data chunk's boundaries.
        [Kirk Petersen <kirk.petersen@watchguard.com>]
   
  -  *) Upgraded build environment to GNU Libtool 1.5.10
  +  *) Upgraded build environment to GNU Libtool 1.5.20 and GNU shtool 2.0.2
        [Ralf S. Engelschall]
   
    Changes between 1.3.0 and 1.3.1 (07-Mar-2003 to 12-Sep-2004)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 devtool.conf
  --- ossp-pkg/mm/devtool.conf	15 Nov 2004 15:14:39 -0000	1.6
  +++ ossp-pkg/mm/devtool.conf	2 Sep 2005 19:53:45 -0000	1.7
  @@ -3,8 +3,8 @@
   ##
   
   %autogen
  -    @autogen shtool   2.0.1  "2.0.*" all
  -    @autogen libtool  1.5.10 "1.5*"
  +    @autogen shtool   2.0.2  "2.0.*" all
  +    @autogen libtool  1.5.20 "1.5*"
       @autogen autoconf 2.59   "2.5[3-9]*"
   
   %autoclean
  @@ .

From ossp-cvs-owner@ossp.org  Fri Sep  2 21:57:14 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 78106752ED2; Fri,  2 Sep 2005 21:57:14 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm/ README mm_vers.c
Message-Id: <20050902195714.78106752ED2@mail.ossp.org>
Date: Fri,  2 Sep 2005 21:57:14 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Sep-2005 21:57:14
  Branch: HEAD                             Handle: 2005090220571400

  Modified files:
    ossp-pkg/mm             README mm_vers.c

  Log:
    bump version before release

  Summary:
    Revision    Changes     Path
    1.81        +1  -1      ossp-pkg/mm/README
    1.44        +9  -9      ossp-pkg/mm/mm_vers.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/README
  ============================================================================
  $ cvs diff -u -r1.80 -r1.81 README
  --- ossp-pkg/mm/README	12 Sep 2004 18:35:01 -0000	1.80
  +++ ossp-pkg/mm/README	2 Sep 2005 19:57:14 -0000	1.81
  @@ -7,7 +7,7 @@
     OSSP mm - Shared Memory Allocation
     Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
     Copyright (c) 1999-2004 The OSSP Project <http://www.ossp.org/>
  -  Version 1.3.1 (12-Sep-2004)
  +  Version 1.4.0 (02-Sep-2005)
   
     OSSP mm is a 2-layer abstraction library which simplifies the usage of
     shared memory between forked (and this way strongly related) processes
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm_vers.c
  ============================================================================
  $ cvs diff -u -r1.43 -r1.44 mm_vers.c
  --- ossp-pkg/mm/mm_vers.c	12 Sep 2004 18:34:00 -0000	1.43
  +++ ossp-pkg/mm/mm_vers.c	2 Sep 2005 19:57:14 -0000	1.44
  @@ -8,7 +8,7 @@
   #ifndef _MM_VERS_C_
   #define _MM_VERS_C_
   
  -#define MM_VERSION 0x103201
  +#define MM_VERSION 0x104200
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _MM_VERS_C_AS_HEADER_
   
   mm_version_t mm_version = {
  -    0x103201,
  -    "1.3.1",
  -    "1.3.1 (12-Sep-2004)",
  -    "This is OSSP mm, Version 1.3.1 (12-Sep-2004)",
  -    "OSSP mm 1.3.1 (12-Sep-2004)",
  -    "OSSP mm/1.3.1",
  -    "@(#)OSSP mm 1.3.1 (12-Sep-2004)",
  -    "$Id: OSSP mm 1.3.1 (12-Sep-2004) $"
  +    0x104200,
  +    "1.4.0",
  +    "1.4.0 (02-Sep-2005)",
  +    "This is OSSP mm, Version 1.4.0 (02-Sep-2005)",
  +    "OSSP mm 1.4.0 (02-Sep-2005)",
  +    "OSSP mm/1.4.0",
  +    "@(#)OSSP mm 1.4.0 (02-Sep-2005)",
  +    "$Id: OSSP mm 1.4.0 (02-Sep-2005) $"
   };
   
   #endif /* _MM_VERS_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Fri Sep  2 21:58:36 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id BD7A0752ED2; Fri,  2 Sep 2005 21:58:36 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm/ THANKS
Message-Id: <20050902195836.BD7A0752ED2@mail.ossp.org>
Date: Fri,  2 Sep 2005 21:58:36 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Sep-2005 21:58:36
  Branch: HEAD                             Handle: 2005090220583600

  Modified files:
    ossp-pkg/mm             THANKS

  Log:
    remember one more

  Summary:
    Revision    Changes     Path
    1.17        +1  -0      ossp-pkg/mm/THANKS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/THANKS
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 THANKS
  --- ossp-pkg/mm/THANKS	19 Dec 2002 09:27:46 -0000	1.16
  +++ ossp-pkg/mm/THANKS	2 Sep 2005 19:58:36 -0000	1.17
  @@ -65,4 +65,5 @@
       o  Rick Watson                 <rick@akbar.cc.utexas.edu>
       o  Mark Wilkie                 <mark@exceptionmedia.com>
       o  Cliff Woolley               <jwoolley@wlu.edu>
  +    o  ??                          <gennadyd@yahoo.com>
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Sep  2 21:59:06 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B2647752F10; Fri,  2 Sep 2005 21:59:06 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm/ devtool.conf
Message-Id: <20050902195906.B2647752F10@mail.ossp.org>
Date: Fri,  2 Sep 2005 21:59:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Sep-2005 21:59:06
  Branch: HEAD                             Handle: 2005090220590600

  Modified files:
    ossp-pkg/mm             devtool.conf

  Log:
    fix %upload command

  Summary:
    Revision    Changes     Path
    1.8         +2  -2      ossp-pkg/mm/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 devtool.conf
  --- ossp-pkg/mm/devtool.conf	2 Sep 2005 19:53:45 -0000	1.7
  +++ ossp-pkg/mm/devtool.conf	2 Sep 2005 19:59:06 -0000	1.8
  @@ -45,7 +45,7 @@
       echo "+++ testing"
       gunzip <mm-${V}.tar.gz | tar tvf -
   
  -%release
  +%upload
       echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/mm/"
  -    scp mm-*.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/mm/
  +    scp mm-*.tar.gz ossp@master.ossp.org:/v/ossp/ftp/pkg/lib/mm/
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Sep  2 22:00:47 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 0F196752ED2; Fri,  2 Sep 2005 22:00:47 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm/ ChangeLog LICENSE Makefile.in README aclocal....
Message-Id: <20050902200047.0F196752ED2@mail.ossp.org>
Date: Fri,  2 Sep 2005 22:00:47 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Sep-2005 22:00:47
  Branch: HEAD                             Handle: 2005090221004600

  Modified files:
    ossp-pkg/mm             ChangeLog LICENSE Makefile.in README aclocal.m4
                            configure.ac mm-config.in mm-config.pod mm.h
                            mm.pod mm_alloc.c mm_core.c mm_global.c mm_lib.c
                            mm_test.c

  Log:
    adjust copyright year

  Summary:
    Revision    Changes     Path
    1.51        +3  -0      ossp-pkg/mm/ChangeLog
    1.8         +2  -2      ossp-pkg/mm/LICENSE
    1.34        +2  -2      ossp-pkg/mm/Makefile.in
    1.82        +2  -2      ossp-pkg/mm/README
    1.30        +2  -2      ossp-pkg/mm/aclocal.m4
    1.7         +4  -4      ossp-pkg/mm/configure.ac
    1.12        +2  -2      ossp-pkg/mm/mm-config.in
    1.10        +2  -2      ossp-pkg/mm/mm-config.pod
    1.30        +2  -2      ossp-pkg/mm/mm.h
    1.24        +2  -2      ossp-pkg/mm/mm.pod
    1.22        +2  -2      ossp-pkg/mm/mm_alloc.c
    1.23        +2  -2      ossp-pkg/mm/mm_core.c
    1.14        +2  -2      ossp-pkg/mm/mm_global.c
    1.10        +2  -2      ossp-pkg/mm/mm_lib.c
    1.13        +2  -2      ossp-pkg/mm/mm_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.50 -r1.51 ChangeLog
  --- ossp-pkg/mm/ChangeLog	2 Sep 2005 19:53:45 -0000	1.50
  +++ ossp-pkg/mm/ChangeLog	2 Sep 2005 20:00:46 -0000	1.51
  @@ -24,6 +24,9 @@
   
     *) Upgraded build environment to GNU Libtool 1.5.20 and GNU shtool 2.0.2
        [Ralf S. Engelschall]
  +  
  +  *) Updated all copyright messages for year 2005.
  +     [Ralf S. Engelschall]
   
    Changes between 1.3.0 and 1.3.1 (07-Mar-2003 to 12-Sep-2004)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/LICENSE
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 LICENSE
  --- ossp-pkg/mm/LICENSE	12 Sep 2004 18:35:01 -0000	1.7
  +++ ossp-pkg/mm/LICENSE	2 Sep 2005 20:00:46 -0000	1.8
  @@ -1,7 +1,7 @@
   
     ====================================================================
  -  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 1999-2004 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
   
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 Makefile.in
  --- ossp-pkg/mm/Makefile.in	12 Sep 2004 18:35:01 -0000	1.33
  +++ ossp-pkg/mm/Makefile.in	2 Sep 2005 20:00:46 -0000	1.34
  @@ -1,6 +1,6 @@
   ## ====================================================================
  -## Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  -## Copyright (c) 1999-2004 The OSSP Project <http://www.ossp.org/>
  +## Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +## Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
   ##
   ## Redistribution and use in source and binary forms, with or without
   ## modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/README
  ============================================================================
  $ cvs diff -u -r1.81 -r1.82 README
  --- ossp-pkg/mm/README	2 Sep 2005 19:57:14 -0000	1.81
  +++ ossp-pkg/mm/README	2 Sep 2005 20:00:46 -0000	1.82
  @@ -5,8 +5,8 @@
     |_|_|_|  \___/|____/____/|_|     |_| |_| |_|_| |_| |_|
   
     OSSP mm - Shared Memory Allocation
  -  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 1999-2004 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
     Version 1.4.0 (02-Sep-2005)
   
     OSSP mm is a 2-layer abstraction library which simplifies the usage of
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 aclocal.m4
  --- ossp-pkg/mm/aclocal.m4	12 Sep 2004 18:35:01 -0000	1.29
  +++ ossp-pkg/mm/aclocal.m4	2 Sep 2005 20:00:46 -0000	1.30
  @@ -1,6 +1,6 @@
   ## ====================================================================
  -## Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  -## Copyright (c) 1999-2004 The OSSP Project <http://www.ossp.org/>
  +## Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +## Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
   ##
   ## Redistribution and use in source and binary forms, with or without
   ## modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/configure.ac
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 configure.ac
  --- ossp-pkg/mm/configure.ac	12 Sep 2004 18:35:01 -0000	1.6
  +++ ossp-pkg/mm/configure.ac	2 Sep 2005 20:00:46 -0000	1.7
  @@ -1,6 +1,6 @@
   ## ====================================================================
  -## Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  -## Copyright (c) 1999-2004 The OSSP Project <http://www.ossp.org/>
  +## Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +## Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
   ##
   ## Redistribution and use in source and binary forms, with or without
   ## modification, are permitted provided that the following conditions
  @@ -64,8 +64,8 @@
   
   dnl #   friendly header ;-)
   echo "Configuring ${T_MD}OSSP mm${T_ME} (Shared Memory Allocation), Version ${T_MD}${MM_VERSION_STR}${T_ME}"
  -echo "Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>"
  -echo "Copyright (c) 1999-2004 The OSSP Project <http://www.ossp.org/>"
  +echo "Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>"
  +echo "Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>"
   echo "Platform: ${T_MD}${PLATFORM}${T_ME}"
   
   dnl #
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm-config.in
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 mm-config.in
  --- ossp-pkg/mm/mm-config.in	12 Sep 2004 18:35:01 -0000	1.11
  +++ ossp-pkg/mm/mm-config.in	2 Sep 2005 20:00:46 -0000	1.12
  @@ -3,8 +3,8 @@
   ## mm-config -- MM library build configuration utility
   ##
   ## ====================================================================
  -## Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  -## Copyright (c) 1999-2004 The OSSP Project <http://www.ossp.org/>
  +## Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +## Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
   ##
   ## Redistribution and use in source and binary forms, with or without
   ## modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm-config.pod
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 mm-config.pod
  --- ossp-pkg/mm/mm-config.pod	12 Sep 2004 18:35:01 -0000	1.9
  +++ ossp-pkg/mm/mm-config.pod	2 Sep 2005 20:00:46 -0000	1.10
  @@ -1,6 +1,6 @@
   ## ====================================================================
  -## Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  -## Copyright (c) 1999-2004 The OSSP Project <http://www.ossp.org/>
  +## Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +## Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
   ##
   ## Redistribution and use in source and binary forms, with or without
   ## modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm.h
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 mm.h
  --- ossp-pkg/mm/mm.h	12 Sep 2004 18:35:01 -0000	1.29
  +++ ossp-pkg/mm/mm.h	2 Sep 2005 20:00:46 -0000	1.30
  @@ -1,6 +1,6 @@
   /* ====================================================================
  - * Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  - * Copyright (c) 1999-2004 The OSSP Project <http://www.ossp.org/>
  + * Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  + * Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm.pod
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 mm.pod
  --- ossp-pkg/mm/mm.pod	12 Sep 2004 18:35:01 -0000	1.23
  +++ ossp-pkg/mm/mm.pod	2 Sep 2005 20:00:46 -0000	1.24
  @@ -1,6 +1,6 @@
   ## ====================================================================
  -## Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  -## Copyright (c) 1999-2004 The OSSP Project <http://www.ossp.org/>
  +## Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +## Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
   ##
   ## Redistribution and use in source and binary forms, with or without
   ## modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm_alloc.c
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 mm_alloc.c
  --- ossp-pkg/mm/mm_alloc.c	2 Sep 2005 19:50:34 -0000	1.21
  +++ ossp-pkg/mm/mm_alloc.c	2 Sep 2005 20:00:46 -0000	1.22
  @@ -1,6 +1,6 @@
   /* ====================================================================
  - * Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  - * Copyright (c) 1999-2004 The OSSP Project <http://www.ossp.org/>
  + * Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  + * Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm_core.c
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 mm_core.c
  --- ossp-pkg/mm/mm_core.c	12 Sep 2004 18:35:01 -0000	1.22
  +++ ossp-pkg/mm/mm_core.c	2 Sep 2005 20:00:46 -0000	1.23
  @@ -1,6 +1,6 @@
   /* ====================================================================
  - * Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  - * Copyright (c) 1999-2004 The OSSP Project <http://www.ossp.org/>
  + * Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  + * Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm_global.c
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 mm_global.c
  --- ossp-pkg/mm/mm_global.c	12 Sep 2004 18:35:01 -0000	1.13
  +++ ossp-pkg/mm/mm_global.c	2 Sep 2005 20:00:46 -0000	1.14
  @@ -1,6 +1,6 @@
   /* ====================================================================
  - * Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  - * Copyright (c) 1999-2004 The OSSP Project <http://www.ossp.org/>
  + * Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  + * Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm_lib.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 mm_lib.c
  --- ossp-pkg/mm/mm_lib.c	12 Sep 2004 18:35:01 -0000	1.9
  +++ ossp-pkg/mm/mm_lib.c	2 Sep 2005 20:00:46 -0000	1.10
  @@ -1,6 +1,6 @@
   /* ====================================================================
  - * Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  - * Copyright (c) 1999-2004 The OSSP Project <http://www.ossp.org/>
  + * Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  + * Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm_test.c
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 mm_test.c
  --- ossp-pkg/mm/mm_test.c	12 Sep 2004 18:35:01 -0000	1.12
  +++ ossp-pkg/mm/mm_test.c	2 Sep 2005 20:00:46 -0000	1.13
  @@ -1,6 +1,6 @@
   /* ====================================================================
  - * Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  - * Copyright (c) 1999-2004 The OSSP Project <http://www.ossp.org/>
  + * Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  + * Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
  @@ .

From ossp-cvs-owner@ossp.org  Fri Sep  2 22:05:01 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id F31B8752F23; Fri,  2 Sep 2005 22:04:58 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20050902200458.F31B8752F23@mail.ossp.org>
Date: Fri,  2 Sep 2005 22:04:58 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   02-Sep-2005 22:04:56
  Branch: HEAD                             Handle: 2005090221045302

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/mm     index.wml

  Log:
    release OSSP mm 1.4.0

  Summary:
    Revision    Changes     Path
    1.128       +1  -0      ossp-web/new/news.txt
    1.108       +1  -1      ossp-web/pkg/lib/index.wml
    1.13        +2  -2      ossp-web/pkg/lib/mm/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.127 -r1.128 news.txt
  --- ossp-web/new/news.txt	2 Sep 2005 14:27:23 -0000	1.127
  +++ ossp-web/new/news.txt	2 Sep 2005 20:04:53 -0000	1.128
  @@ -1,3 +1,4 @@
  +02-Sep-2005: Released L<OSSP mm> 1.4.0
   02-Sep-2005: Released L<OSSP uuid> 1.3.0
   30-Aug-2005: Released L<OSSP uuid> 1.2.1
   18-Aug-2005: Released T<OSSP svs> 1.0.3
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.107 -r1.108 index.wml
  --- ossp-web/pkg/lib/index.wml	2 Sep 2005 14:27:24 -0000	1.107
  +++ ossp-web/pkg/lib/index.wml	2 Sep 2005 20:04:54 -0000	1.108
  @@ -18,7 +18,7 @@
   			done=100 stable=2.0.3 unstable=none>
     <pkg_item name="mm" longname="OSSP mm" type="lib"
               desc="Shared Memory Allocation"
  -			done=100 stable=1.3.1 unstable=none>
  +			done=100 stable=1.4.0 unstable=none>
     <pkg_item name="ex" longname="OSSP ex" type="lib"
               desc="Exception Handling"
   			done=100 stable=1.0.4 unstable=none>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/mm/index.wml
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 index.wml
  --- ossp-web/pkg/lib/mm/index.wml	12 Sep 2004 18:56:59 -0000	1.12
  +++ ossp-web/pkg/lib/mm/index.wml	2 Sep 2005 20:04:55 -0000	1.13
  @@ -30,7 +30,7 @@
   <pkg_status
       name="mm" assign="rse"
   	genesis="Mar-1999"
  -    stable="1.3.1"   stable_date="12-Sep-2004"
  +    stable="1.4.0"   stable_date="02-Sep-2005"
       unstable="none"  unstable_date="none"
   	done=100>
   
  @@ -41,7 +41,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/mm/
       directory=$(FTP_ROOT_DIR)/pkg/lib/mm/
       files="mm-*.tar.gz" 
  -	stable="mm-1.3.1.tar.gz" unstable="none">
  +	stable="mm-1.4.0.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Sep  7 14:58:57 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 44239752ED0; Wed,  7 Sep 2005 14:58:57 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ ChangeLog devtool.conf
Message-Id: <20050907125857.44239752ED0@mail.ossp.org>
Date: Wed,  7 Sep 2005 14:58:57 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Sep-2005 14:58:57
  Branch: HEAD                             Handle: 2005090713585601

  Modified files:
    ossp-pkg/sa             ChangeLog devtool.conf

  Log:
    upgrade build environment

  Summary:
    Revision    Changes     Path
    1.48        +3  -5      ossp-pkg/sa/ChangeLog
    1.26        +2  -2      ossp-pkg/sa/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.47 -r1.48 ChangeLog
  --- ossp-pkg/sa/ChangeLog	16 May 2005 10:01:27 -0000	1.47
  +++ ossp-pkg/sa/ChangeLog	7 Sep 2005 12:58:56 -0000	1.48
  @@ -11,18 +11,16 @@
     This is a list of all changes to OSSP sa.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 1.2.4 and 1.2.5 (29-Jan-2005 to xx-Mar-2005)
  +  Changes between 1.2.4 and 1.2.5 (29-Jan-2005 to xx-xxx-2005)
      
  -   o Upgrade build environment to GNU libtool 1.5.16
  +   o Upgrade build environment to GNU libtool 1.5.20 and
  +     GNU shtool 2.0.2
        [Ralf S. Engelschall <rse@engelschall.com>]
   
      o Follow FlexeLint suggestions and "constify" some API
        function parameters.
        [Ralf S. Engelschall <rse@engelschall.com>]
   
  -   o Upgrade build environment to GNU libtool 1.5.14
  -     [Ralf S. Engelschall <rse@engelschall.com>]
  -
     Changes between 1.2.3 and 1.2.4 (24-Jan-2005 to 29-Jan-2005)
   
      o Fix timeout handling in various functions by fixing the internal
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 devtool.conf
  --- ossp-pkg/sa/devtool.conf	16 May 2005 10:01:27 -0000	1.25
  +++ ossp-pkg/sa/devtool.conf	7 Sep 2005 12:58:57 -0000	1.26
  @@ -3,8 +3,8 @@
   ##
   
   %autogen
  -    @autogen shtool   2.0.1  "1.6.*" all
  -    @autogen libtool  1.5.16 "1.5*"
  +    @autogen shtool   2.0.2  "1.6.*" all
  +    @autogen libtool  1.5.20 "1.5*"
       @autogen autoconf 2.59   "2.5[4-9]*"
   
   %autoclean
  @@ .

From ossp-cvs-owner@ossp.org  Wed Sep  7 15:01:24 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id F2BC7752ED0; Wed,  7 Sep 2005 15:01:23 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ .cvsignore ChangeLog Makefile.in configure.ac...
Message-Id: <20050907130123.F2BC7752ED0@mail.ossp.org>
Date: Wed,  7 Sep 2005 15:01:23 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Sep-2005 15:01:23
  Branch: HEAD                             Handle: 2005090714012300

  Added files:
    ossp-pkg/sa             sa.pc.in
  Modified files:
    ossp-pkg/sa             .cvsignore ChangeLog Makefile.in configure.ac

  Log:
    Add pkg-config(1) specification file sa.pc

  Summary:
    Revision    Changes     Path
    1.7         +1  -0      ossp-pkg/sa/.cvsignore
    1.49        +3  -0      ossp-pkg/sa/ChangeLog
    1.18        +5  -2      ossp-pkg/sa/Makefile.in
    1.18        +3  -1      ossp-pkg/sa/configure.ac
    1.1         +43 -0      ossp-pkg/sa/sa.pc.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/.cvsignore
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 .cvsignore
  --- ossp-pkg/sa/.cvsignore	6 Feb 2003 13:53:47 -0000	1.6
  +++ ossp-pkg/sa/.cvsignore	7 Sep 2005 13:01:23 -0000	1.7
  @@ -9,6 +9,7 @@
   sa-config
   sa.3
   sa.h
  +sa.pc
   sa_test
   shtool
   autom4te.cache
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.48 -r1.49 ChangeLog
  --- ossp-pkg/sa/ChangeLog	7 Sep 2005 12:58:56 -0000	1.48
  +++ ossp-pkg/sa/ChangeLog	7 Sep 2005 13:01:23 -0000	1.49
  @@ -12,6 +12,9 @@
     For a more brief summary please have a look at the NEWS file.
   
     Changes between 1.2.4 and 1.2.5 (29-Jan-2005 to xx-xxx-2005)
  +
  +   o Added pkg-config(1) specification sa.pc
  +     [Ralf S. Engelschall <rse@engelschall.com>]
      
      o Upgrade build environment to GNU libtool 1.5.20 and
        GNU shtool 2.0.2
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 Makefile.in
  --- ossp-pkg/sa/Makefile.in	24 Jan 2005 15:10:09 -0000	1.17
  +++ ossp-pkg/sa/Makefile.in	7 Sep 2005 13:01:23 -0000	1.18
  @@ -91,9 +91,10 @@
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(includedir)
  -	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libdir)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libdir)/pkgconfig
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man3
   	$(SHTOOL) install -c -m 755 sa-config $(DESTDIR)$(bindir)/
  +	$(SHTOOL) install -c -m 644 sa.pc $(DESTDIR)$(libdir)/pkgconfig/
   	$(SHTOOL) install -c -m 644 sa.h $(DESTDIR)$(includedir)/
   	$(SHTOOL) install -c -m 644 sa.3 $(DESTDIR)$(mandir)/man3/
   	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libsa.la $(DESTDIR)$(libdir)/
  @@ -102,9 +103,11 @@
   	@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libsa.la
   	-$(RM) $(DESTDIR)$(mandir)/man3/sa.3
   	-$(RM) $(DESTDIR)$(includedir)/sa.h
  +	-$(RM) $(DESTDIR)$(libdir)/pkgconfig/sa.pc
   	-$(RM) $(DESTDIR)$(bindir)/sa-config
   	-$(RMDIR) $(DESTDIR)$(mandir)/man3 >/dev/null 2>&1 || $(TRUE)
   	-$(RMDIR) $(DESTDIR)$(mandir) >/dev/null 2>&1 || $(TRUE)
  +	-$(RMDIR) $(DESTDIR)$(libdir)/pkgconfig >/dev/null 2>&1 || $(TRUE)
   	-$(RMDIR) $(DESTDIR)$(libdir) >/dev/null 2>&1 || $(TRUE)
   	-$(RMDIR) $(DESTDIR)$(includedir) >/dev/null 2>&1 || $(TRUE)
   	-$(RMDIR) $(DESTDIR)$(bindir) >/dev/null 2>&1 || $(TRUE)
  @@ -118,7 +121,7 @@
   
   distclean: clean
   	-$(RM) config.log config.status config.cache
  -	-$(RM) Makefile config.h sa-config
  +	-$(RM) Makefile config.h sa-config sa.pc
   	-$(RM) libtool
   
   realclean: distclean
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/configure.ac
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 configure.ac
  --- ossp-pkg/sa/configure.ac	24 Jan 2005 15:10:09 -0000	1.17
  +++ ossp-pkg/sa/configure.ac	7 Sep 2005 13:01:23 -0000	1.18
  @@ -31,8 +31,10 @@
   AC_PREREQ(2.53)
   AC_INIT
   SA_VERSION_STR=`./shtool version -l txt -d long VERSION`
  +SA_VERSION_RAW=`./shtool version -l txt -d short VERSION`
   ./shtool echo -e "Configuring %BOSSP sa%b (Socket Abstraction), version %B${SA_VERSION_STR}%b"
   AC_SUBST(SA_VERSION_STR)
  +AC_SUBST(SA_VERSION_RAW)
   
   AC_PROG_MAKE_SET
   AC_PROG_CC
  @@ -48,7 +50,7 @@
                   [AC_DEFINE(WITH_EX, 1, [Define to 1 if building with OSSP ex])])
   
   AC_CONFIG_HEADERS(config.h)
  -AC_CONFIG_FILES([Makefile sa-config])
  +AC_CONFIG_FILES([Makefile sa-config sa.pc])
   AC_CONFIG_COMMANDS([adjustment], [chmod a+x sa-config])
   AC_OUTPUT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.pc.in
  ============================================================================
  $ cvs diff -u -r0 -r1.1 sa.pc.in
  --- /dev/null	2005-09-07 15:01:23 +0200
  +++ sa.pc.in	2005-09-07 15:01:23 +0200
  @@ -0,0 +1,43 @@
  +##
  +##  OSSP sa - Socket Abstraction
  +##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
  +##
  +##  This file is part of OSSP sa, a socket abstraction library which
  +##  can be found at http://www.ossp.org/pkg/lib/sa/.
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  sa.pc.in: pkg-config(1) specification
  +##
  +
  +prefix=@prefix@
  +exec_prefix=${prefix}
  +includedir=${prefix}/include
  +libdir=${exec_prefix}/lib
  +
  +Name: OSSP sa
  +Description: Socket Abstraction Library
  +Version: @SA_VERSION_RAW@
  +URL: http://www.ossp.org/pkg/lib/sa/
  +Cflags: -I${includedir}
  +Libs: -L${libdir} -lsa
  +Libs.private: @LIBS@
  +
  @@ .

From ossp-cvs-owner@ossp.org  Tue Sep 20 22:29:11 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 046487529CA; Tue, 20 Sep 2005 22:29:11 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid_prng.c
Message-Id: <20050920202911.046487529CA@mail.ossp.org>
Date: Tue, 20 Sep 2005 22:29:11 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Sep-2005 22:29:11
  Branch: HEAD                             Handle: 2005092021291000

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid_prng.c

  Log:
    Plug memory leak in PRNG sub-library.
    Detected by valgrind(1).

  Summary:
    Revision    Changes     Path
    1.90        +3  -0      ossp-pkg/uuid/ChangeLog
    1.9         +3  -0      ossp-pkg/uuid/uuid_prng.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.89 -r1.90 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	2 Sep 2005 18:16:13 -0000	1.89
  +++ ossp-pkg/uuid/ChangeLog	20 Sep 2005 20:29:10 -0000	1.90
  @@ -13,6 +13,9 @@
   
     Changes between 1.3.0 and 1.3.1 (02-Sep-2005 to xx-xxx-2005)
   
  +   o Plug memory leak in PRNG sub-library.
  +     [Ralf S. Engelschall]
  +
      o Add VPATH/srcdir support for at the default 
        build procedure plus at least C++ and DCE build options.
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_prng.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 uuid_prng.c
  --- ossp-pkg/uuid/uuid_prng.c	30 Aug 2005 19:25:04 -0000	1.8
  +++ ossp-pkg/uuid/uuid_prng.c	20 Sep 2005 20:29:10 -0000	1.9
  @@ -161,6 +161,9 @@
       if (prng->dev != -1)
           close(prng->dev);
   
  +    /* destroy MD5 engine */
  +    md5_destroy(prng->md5);
  +
       /* free object */
       free(prng);
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Sep 20 22:30:06 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 8FD377529C6; Tue, 20 Sep 2005 22:30:06 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog ossp-pkg/uuid/php/ uuid.c
Message-Id: <20050920203006.8FD377529C6@mail.ossp.org>
Date: Tue, 20 Sep 2005 22:30:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Sep-2005 22:30:06
  Branch: HEAD                             Handle: 2005092021300104

  Modified files:
    ossp-pkg/uuid           ChangeLog
    ossp-pkg/uuid/php       uuid.c

  Log:
    Remove a compiler warning in the PHP bindings (undeclared function).
    Detected by Intel icc(1).

  Summary:
    Revision    Changes     Path
    1.91        +3  -0      ossp-pkg/uuid/ChangeLog
    1.3         +1  -0      ossp-pkg/uuid/php/uuid.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.90 -r1.91 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	20 Sep 2005 20:29:10 -0000	1.90
  +++ ossp-pkg/uuid/ChangeLog	20 Sep 2005 20:30:01 -0000	1.91
  @@ -13,6 +13,9 @@
   
     Changes between 1.3.0 and 1.3.1 (02-Sep-2005 to xx-xxx-2005)
   
  +   o Remove a compiler warning in the PHP bindings.
  +     [Ralf S. Engelschall]
  +
      o Plug memory leak in PRNG sub-library.
        [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/php/uuid.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid.c
  --- ossp-pkg/uuid/php/uuid.c	2 Sep 2005 13:15:10 -0000	1.2
  +++ ossp-pkg/uuid/php/uuid.c	20 Sep 2005 20:30:05 -0000	1.3
  @@ -32,6 +32,7 @@
   #endif
   
   #include "php.h"
  +#include "ext/standard/info.h"
   #include "uuid.h"
   
   /* context structure */
  @@ .

From ossp-cvs-owner@ossp.org  Sat Sep 24 12:20:25 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 34749752816; Sat, 24 Sep 2005 12:20:25 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog README ossp-pkg/uuid/perl/ uuid.p...
Message-Id: <20050924102025.34749752816@mail.ossp.org>
Date: Sat, 24 Sep 2005 12:20:25 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Sep-2005 12:20:25
  Branch: HEAD                             Handle: 2005092411202400

  Modified files:
    ossp-pkg/uuid           ChangeLog README uuid_vers.h
    ossp-pkg/uuid/perl      uuid.pm uuid_compat.pm

  Log:
    bump version before release

  Summary:
    Revision    Changes     Path
    1.92        +1  -1      ossp-pkg/uuid/ChangeLog
    1.33        +1  -1      ossp-pkg/uuid/README
    1.12        +1  -1      ossp-pkg/uuid/perl/uuid.pm
    1.2         +1  -1      ossp-pkg/uuid/perl/uuid_compat.pm
    1.18        +9  -9      ossp-pkg/uuid/uuid_vers.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.91 -r1.92 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	20 Sep 2005 20:30:01 -0000	1.91
  +++ ossp-pkg/uuid/ChangeLog	24 Sep 2005 10:20:24 -0000	1.92
  @@ -11,7 +11,7 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 1.3.0 and 1.3.1 (02-Sep-2005 to xx-xxx-2005)
  +  Changes between 1.3.0 and 1.3.1 (02-Sep-2005 to 24-Sep-2005)
   
      o Remove a compiler warning in the PHP bindings.
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 README
  --- ossp-pkg/uuid/README	2 Sep 2005 14:23:46 -0000	1.32
  +++ ossp-pkg/uuid/README	24 Sep 2005 10:20:24 -0000	1.33
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
   
     OSSP uuid - Universally Unique Identifier
  -  Version 1.3.0 (02-Sep-2005)
  +  Version 1.3.1 (24-Sep-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.pm
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 uuid.pm
  --- ossp-pkg/uuid/perl/uuid.pm	31 Aug 2005 09:59:45 -0000	1.11
  +++ ossp-pkg/uuid/perl/uuid.pm	24 Sep 2005 10:20:24 -0000	1.12
  @@ -118,7 +118,7 @@
   use Exporter;
   
   #   API version
  -our $VERSION = do { my @v = ('1.3.0' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
  +our $VERSION = do { my @v = ('1.3.1' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
   
   #   API inheritance
   our @ISA = qw(Exporter);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid_compat.pm
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid_compat.pm
  --- ossp-pkg/uuid/perl/uuid_compat.pm	31 Aug 2005 09:59:45 -0000	1.1
  +++ ossp-pkg/uuid/perl/uuid_compat.pm	24 Sep 2005 10:20:24 -0000	1.2
  @@ -42,7 +42,7 @@
   our @ISA     = qw(Exporter);
   our @EXPORT  = qw(NameSpace_DNS NameSpace_OID NameSpace_URL NameSpace_X500);
   
  -our $VERSION = do { my @v = ('1.3.0' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
  +our $VERSION = do { my @v = ('1.3.1' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
   
   sub new {
       my $class = shift;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_vers.h
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 uuid_vers.h
  --- ossp-pkg/uuid/uuid_vers.h	2 Sep 2005 14:23:46 -0000	1.17
  +++ ossp-pkg/uuid/uuid_vers.h	24 Sep 2005 10:20:24 -0000	1.18
  @@ -8,7 +8,7 @@
   #ifndef _UUID_VERS_H_
   #define _UUID_VERS_H_
   
  -#define _UUID_VERSION 0x103200
  +#define _UUID_VERSION 0x103201
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _UUID_VERS_H_AS_HEADER_
   
   _uuid_version_t _uuid_version = {
  -    0x103200,
  -    "1.3.0",
  -    "1.3.0 (02-Sep-2005)",
  -    "This is OSSP uuid, Version 1.3.0 (02-Sep-2005)",
  -    "OSSP uuid 1.3.0 (02-Sep-2005)",
  -    "OSSP uuid/1.3.0",
  -    "@(#)OSSP uuid 1.3.0 (02-Sep-2005)",
  -    "$Id: OSSP uuid 1.3.0 (02-Sep-2005) $"
  +    0x103201,
  +    "1.3.1",
  +    "1.3.1 (24-Sep-2005)",
  +    "This is OSSP uuid, Version 1.3.1 (24-Sep-2005)",
  +    "OSSP uuid 1.3.1 (24-Sep-2005)",
  +    "OSSP uuid/1.3.1",
  +    "@(#)OSSP uuid 1.3.1 (24-Sep-2005)",
  +    "$Id: OSSP uuid 1.3.1 (24-Sep-2005) $"
   };
   
   #endif /* _UUID_VERS_H_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Sat Sep 24 12:28:32 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 64A12752816; Sat, 24 Sep 2005 12:28:32 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid.c uuid_prng.c
Message-Id: <20050924102832.64A12752816@mail.ossp.org>
Date: Sat, 24 Sep 2005 12:28:32 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Sep-2005 12:28:32
  Branch: HEAD                             Handle: 2005092411283200

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid.c uuid_prng.c

  Log:
    Fix two incorrect casts, detected by compiling the C code under C++
    constraints.

  Summary:
    Revision    Changes     Path
    1.93        +4  -0      ossp-pkg/uuid/ChangeLog
    1.56        +1  -1      ossp-pkg/uuid/uuid.c
    1.10        +1  -1      ossp-pkg/uuid/uuid_prng.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.92 -r1.93 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	24 Sep 2005 10:20:24 -0000	1.92
  +++ ossp-pkg/uuid/ChangeLog	24 Sep 2005 10:28:32 -0000	1.93
  @@ -13,6 +13,10 @@
   
     Changes between 1.3.0 and 1.3.1 (02-Sep-2005 to 24-Sep-2005)
   
  +   o Fix two incorrect casts, detected by compiling the C code
  +     under C++ constraints.
  +     [Ralf S. Engelschall]
  +
      o Remove a compiler warning in the PHP bindings.
        [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.55 -r1.56 uuid.c
  --- ossp-pkg/uuid/uuid.c	1 Sep 2005 20:50:18 -0000	1.55
  +++ ossp-pkg/uuid/uuid.c	24 Sep 2005 10:28:32 -0000	1.56
  @@ -440,7 +440,7 @@
   
       /* determine output buffer */
       if (*data_ptr == NULL) {
  -        if ((data_buf = (void *)malloc(UUID_LEN_STR+1)) == NULL)
  +        if ((data_buf = (char *)malloc(UUID_LEN_STR+1)) == NULL)
               return UUID_RC_MEM;
           if (data_len != NULL)
               *data_len = UUID_LEN_STR+1;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_prng.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 uuid_prng.c
  --- ossp-pkg/uuid/uuid_prng.c	20 Sep 2005 20:29:10 -0000	1.9
  +++ ossp-pkg/uuid/uuid_prng.c	24 Sep 2005 10:28:32 -0000	1.10
  @@ -141,7 +141,7 @@
           /* store MD5 engine state as PRN output */
           md5_ptr = md5_buf;
           md5_len = sizeof(md5_buf);
  -        if (md5_store(prng->md5, (void *)&md5_ptr, &md5_len) != MD5_RC_OK)
  +        if (md5_store(prng->md5, (void **)(void *)&md5_ptr, &md5_len) != MD5_RC_OK)
               return PRNG_RC_INT;
           for (i = 0; i < MD5_LEN_BIN && n > 0; i++, n--)
               *p++ ^= md5_buf[i]; /* intentionally no assignment because arbitrary
  @@ .

From ossp-cvs-owner@ossp.org  Sat Sep 24 12:35:49 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 92952752816; Sat, 24 Sep 2005 12:35:49 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ devtool.conf
Message-Id: <20050924103549.92952752816@mail.ossp.org>
Date: Sat, 24 Sep 2005 12:35:49 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Sep-2005 12:35:49
  Branch: HEAD                             Handle: 2005092411354900

  Modified files:
    ossp-pkg/uuid           devtool.conf

  Log:
    PHP bindings are special, there Automake & Co are assumed to be
    required

  Summary:
    Revision    Changes     Path
    1.21        +1  -0      ossp-pkg/uuid/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 devtool.conf
  --- ossp-pkg/uuid/devtool.conf	2 Sep 2005 18:16:13 -0000	1.20
  +++ ossp-pkg/uuid/devtool.conf	24 Sep 2005 10:35:49 -0000	1.21
  @@ -54,6 +54,7 @@
       make all man
       echo "+++ dist cleaning"
       make distclean
  +    (cd php && make -f Makefile.local realclean)
       echo "+++ fixing"
       ./shtool fixperm -v .
       echo "+++ rolling"
  @@ .

From ossp-cvs-owner@ossp.org  Sat Sep 24 12:38:00 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 552BD752816; Sat, 24 Sep 2005 12:38:00 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20050924103800.552BD752816@mail.ossp.org>
Date: Sat, 24 Sep 2005 12:38:00 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   24-Sep-2005 12:38:00
  Branch: HEAD                             Handle: 2005092411375901

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/uuid   index.wml

  Log:
    release OSSP uuid 1.3.1

  Summary:
    Revision    Changes     Path
    1.129       +1  -0      ossp-web/new/news.txt
    1.109       +1  -1      ossp-web/pkg/lib/index.wml
    1.25        +2  -2      ossp-web/pkg/lib/uuid/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.128 -r1.129 news.txt
  --- ossp-web/new/news.txt	2 Sep 2005 20:04:53 -0000	1.128
  +++ ossp-web/new/news.txt	24 Sep 2005 10:37:59 -0000	1.129
  @@ -1,3 +1,4 @@
  +24-Sep-2005: Released L<OSSP uuid> 1.3.1
   02-Sep-2005: Released L<OSSP mm> 1.4.0
   02-Sep-2005: Released L<OSSP uuid> 1.3.0
   30-Aug-2005: Released L<OSSP uuid> 1.2.1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.108 -r1.109 index.wml
  --- ossp-web/pkg/lib/index.wml	2 Sep 2005 20:04:54 -0000	1.108
  +++ ossp-web/pkg/lib/index.wml	24 Sep 2005 10:37:59 -0000	1.109
  @@ -33,7 +33,7 @@
   			done=100 stable=1.1.2 unstable=none>
     <pkg_item name="uuid" longname="OSSP uuid" type="lib"
               desc="Universally Unique Identifier"
  -			done=100 stable=1.3.0 unstable=none>
  +			done=100 stable=1.3.1 unstable=none>
     <pkg_item name="val" longname="OSSP val" type="lib"
               desc="Value Access"
   			done=95 stable=none unstable=0.9.3>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/uuid/index.wml
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 index.wml
  --- ossp-web/pkg/lib/uuid/index.wml	2 Sep 2005 14:27:24 -0000	1.24
  +++ ossp-web/pkg/lib/uuid/index.wml	24 Sep 2005 10:38:00 -0000	1.25
  @@ -48,7 +48,7 @@
   
   <pkg_status
       name="uuid" assign="rse"
  -    stable="1.3.0"    stable_date="02-Sep-2005"
  +    stable="1.3.1"    stable_date="24-Sep-2005"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -59,7 +59,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/uuid/
       directory=$(FTP_ROOT_DIR)/pkg/lib/uuid/
       files="uuid-[0-9.]*.tar.gz" 
  -	stable="uuid-1\.3\.0\.tar\.gz" unstable="none">
  +	stable="uuid-1\.3\.1\.tar\.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Sep 25 12:41:18 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 8CDF27529BF; Sun, 25 Sep 2005 12:41:18 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid++.cc
Message-Id: <20050925104118.8CDF27529BF@mail.ossp.org>
Date: Sun, 25 Sep 2005 12:41:18 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Sep-2005 12:41:18
  Branch: HEAD                             Handle: 2005092511411800

  Modified files:
    ossp-pkg/uuid           uuid++.cc

  Log:
    consistent style: always use 'return'

  Summary:
    Revision    Changes     Path
    1.4         +7  -0      ossp-pkg/uuid/uuid++.cc
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid++.cc
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 uuid++.cc
  --- ossp-pkg/uuid/uuid++.cc	31 Aug 2005 20:08:15 -0000	1.3
  +++ ossp-pkg/uuid/uuid++.cc	25 Sep 2005 10:41:18 -0000	1.4
  @@ -50,6 +50,7 @@
       uuid_rc_t rc;
       if ((rc = uuid_clone(obj.ctx, &ctx)) != UUID_RC_OK)
           throw uuid_error_t(rc);
  +    return;
   }
   
   /*  extra constructor via C API object */
  @@ -60,6 +61,7 @@
           throw uuid_error_t(UUID_RC_ARG);
       if ((rc = uuid_clone(obj, &ctx)) != UUID_RC_OK)
           throw uuid_error_t(rc);
  +    return;
   }
   
   /*  extra constructor via binary representation */
  @@ -71,6 +73,7 @@
       if ((rc = uuid_create(&ctx)) != UUID_RC_OK)
           throw uuid_error_t(rc);
       import(bin);
  +    return;
   }
   
   /*  extra constructor via string representation */
  @@ -82,12 +85,14 @@
       if ((rc = uuid_create(&ctx)) != UUID_RC_OK)
           throw uuid_error_t(rc);
       import(str);
  +    return;
   }
   
   /*  standard destructor */
   uuid::~uuid()
   {
       uuid_destroy(ctx);
  +    return;
   }
   
   /*  assignment operator: import of other C++ API object */
  @@ -235,6 +240,7 @@
       uuid_rc_t rc;
       if ((rc = uuid_import(ctx, UUID_FMT_BIN, bin, UUID_LEN_BIN)) != UUID_RC_OK)
           throw uuid_error_t(rc);
  +    return;
   }
   
   /*  method: import string representation */
  @@ -243,6 +249,7 @@
       uuid_rc_t rc;
       if ((rc = uuid_import(ctx, UUID_FMT_STR, str, UUID_LEN_STR)) != UUID_RC_OK)
           throw uuid_error_t(rc);
  +    return;
   }
   
   /*  method: export binary representation */
  @@ .

From ossp-cvs-owner@ossp.org  Sun Sep 25 13:09:11 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 35CD87529BF; Sun, 25 Sep 2005 13:09:11 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog
Message-Id: <20050925110911.35CD87529BF@mail.ossp.org>
Date: Sun, 25 Sep 2005 13:09:11 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Sep-2005 13:09:11
  Branch: HEAD                             Handle: 2005092512091100

  Modified files:
    ossp-pkg/uuid           ChangeLog

  Log:
    remember change

  Summary:
    Revision    Changes     Path
    1.94        +5  -0      ossp-pkg/uuid/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.93 -r1.94 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	24 Sep 2005 10:28:32 -0000	1.93
  +++ ossp-pkg/uuid/ChangeLog	25 Sep 2005 11:09:11 -0000	1.94
  @@ -11,6 +11,11 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 1.3.1 and 1.3.2 (24-Sep-2005 to xx-xxx-2005)
  +   
  +   o Consistently use "return" in uuid++.cc
  +     [Ralf S. Engelschall]
  +
     Changes between 1.3.0 and 1.3.1 (02-Sep-2005 to 24-Sep-2005)
   
      o Fix two incorrect casts, detected by compiling the C code
  @@ .

From ossp-cvs-owner@ossp.org  Sun Oct  2 16:17:58 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id AB947752893; Sun,  2 Oct 2005 16:17:58 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog sh.platform
Message-Id: <20051002141758.AB947752893@mail.ossp.org>
Date: Sun,  2 Oct 2005 16:17:58 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Oct-2005 16:17:58
  Branch: HEAD                             Handle: 2005100215175800

  Modified files:
    ossp-pkg/shtool         ChangeLog sh.platform

  Log:
    Use "env -i sort" for Linux detections in "shtool platform"
    to circumvent LC_COLLATE and LANG environment problems.

  Summary:
    Revision    Changes     Path
    1.216       +4  -0      ossp-pkg/shtool/ChangeLog
    1.14        +12 -12     ossp-pkg/shtool/sh.platform
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.215 -r1.216 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	31 Aug 2005 07:24:56 -0000	1.215
  +++ ossp-pkg/shtool/ChangeLog	2 Oct 2005 14:17:58 -0000	1.216
  @@ -11,6 +11,10 @@
   
    Changes between 2.0.2 and 2.0.3 (15-Jun-2005 to xx-XXX-2005):
   
  +   *) Use "env -i sort" for Linux detections in "shtool platform" 
  +      to circumvent LC_COLLATE and LANG environment problems.
  +      [Ralf S. Engelschall]
  +
      *) Fixed "shtool version -l perl" by replacing "my" with "our"
         to allow the generated file to be really useful when loaded
         with the Perl "require" directive.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.platform
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 sh.platform
  --- ossp-pkg/shtool/sh.platform	5 Jul 2005 19:05:40 -0000	1.13
  +++ ossp-pkg/shtool/sh.platform	2 Oct 2005 14:17:58 -0000	1.14
  @@ -201,7 +201,7 @@
           v_kern=`echo "${UNAME_RELEASE}" |\
               sed -e 's/^\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/'`
           v_libc=`(strings /lib/libc.so.* | grep '^GLIBC_' | sed -e 's/^GLIBC_//' |\
  -            sort -n | sed -n -e '$p' | sed -e 's/^\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/') 2>/dev/null`
  +            env -i sort -n | sed -n -e '$p' | sed -e 's/^\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/') 2>/dev/null`
           ST="GNU/<Linux >${v_libc}/<${v_kern}>"
           if [ -f /etc/lsb-release ]; then
               eval `( . /etc/lsb-release
  @@ -214,7 +214,7 @@
           if [ ".$SP" = . ]; then
               for tagfile in x \
                   `cd /etc && \
  -                /bin/ls *[_-]release *[_-]version 2>/dev/null | sort | \
  +                /bin/ls *[_-]release *[_-]version 2>/dev/null | env -i sort | \
                   sed -e '/^redhat-release$/d' -e '/^lsb-release$/d'; \
                   echo redhat-release lsb-release`
               do
  @@ -235,16 +235,16 @@
                               n="<R>ed <H>at <L>inux"
                           fi
                           ;;
  -                    debian            ) n="Debian[ GNU/Linux]"        ;;
  -                    ubuntu            ) n="Ubuntu[ GNU/Linux]"        ;;
  -                    fedora            ) n="<Fedora> Core[ GNU/Linux]" ;;
  -                    suse              ) n="SuSE[ Linux]"              ;;
  -                    mandrake|mandriva ) n="Mandriva[ Linux]"          ;;
  -                    gentoo            ) n="Gentoo[ GNU/Linux]"        ;;
  -                    slackware         ) n="Slackware[ Linux]"         ;;
  -                    turbolinux        ) n="TurboLinux"                ;;
  -                    unitedlinux       ) n="UnitedLinux"               ;;
  -                    *                 ) n="${n}[ GNU/Linux]"          ;;
  +                    debian             ) n="Debian[ GNU/Linux]"        ;;
  +                    ubuntu             ) n="Ubuntu[ GNU/Linux]"        ;;
  +                    fedora             ) n="<Fedora> Core[ GNU/Linux]" ;;
  +                    suse               ) n="SuSE[ Linux]"              ;;
  +                    mandrake*|mandriva ) n="Mandriva[ Linux]"          ;;
  +                    gentoo             ) n="Gentoo[ GNU/Linux]"        ;;
  +                    slackware          ) n="Slackware[ Linux]"         ;;
  +                    turbolinux         ) n="TurboLinux"                ;;
  +                    unitedlinux        ) n="UnitedLinux"               ;;
  +                    *                  ) n="${n}[ GNU/Linux]"          ;;
                   esac
                   case "$n" in
                       *"<"*">"* ) SP="$n <$v>" ;;
  @@ .

From ossp-cvs-owner@ossp.org  Sun Oct  2 16:18:35 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id EA207752893; Sun,  2 Oct 2005 16:18:34 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog README VERSION shtool.spec
Message-Id: <20051002141834.EA207752893@mail.ossp.org>
Date: Sun,  2 Oct 2005 16:18:34 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Oct-2005 16:18:34
  Branch: HEAD                             Handle: 2005100215183400

  Modified files:
    ossp-pkg/shtool         ChangeLog README VERSION shtool.spec

  Log:
    bump version before release

  Summary:
    Revision    Changes     Path
    1.217       +1  -1      ossp-pkg/shtool/ChangeLog
    1.109       +1  -1      ossp-pkg/shtool/README
    1.83        +1  -1      ossp-pkg/shtool/VERSION
    1.27        +1  -1      ossp-pkg/shtool/shtool.spec
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.216 -r1.217 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	2 Oct 2005 14:17:58 -0000	1.216
  +++ ossp-pkg/shtool/ChangeLog	2 Oct 2005 14:18:34 -0000	1.217
  @@ -9,7 +9,7 @@
   
    ChangeLog
   
  - Changes between 2.0.2 and 2.0.3 (15-Jun-2005 to xx-XXX-2005):
  + Changes between 2.0.2 and 2.0.3 (15-Jun-2005 to 02-Oct-2005):
   
      *) Use "env -i sort" for Linux detections in "shtool platform" 
         to circumvent LC_COLLATE and LANG environment problems.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/README
  ============================================================================
  $ cvs diff -u -r1.108 -r1.109 README
  --- ossp-pkg/shtool/README	15 Jun 2005 08:15:28 -0000	1.108
  +++ ossp-pkg/shtool/README	2 Oct 2005 14:18:34 -0000	1.109
  @@ -10,7 +10,7 @@
     http://www.gnu.org/software/shtool/
     ftp://ftp.gnu.org/gnu/shtool/
   
  -  Version 2.0.2 (15-Jun-2005)
  +  Version 2.0.3 (02-Oct-2005)
   
     The GNU shtool program is a compilation of small but very stable and
     portable shell scripts into a single shell tool. All ingredients
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/VERSION
  ============================================================================
  $ cvs diff -u -r1.82 -r1.83 VERSION
  --- ossp-pkg/shtool/VERSION	15 Jun 2005 08:15:28 -0000	1.82
  +++ ossp-pkg/shtool/VERSION	2 Oct 2005 14:18:34 -0000	1.83
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for GNU shtool (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is GNU shtool, Version 2.0.2 (15-Jun-2005)
  +  This is GNU shtool, Version 2.0.3 (02-Oct-2005)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtool.spec
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 shtool.spec
  --- ossp-pkg/shtool/shtool.spec	15 Jun 2005 08:15:28 -0000	1.26
  +++ ossp-pkg/shtool/shtool.spec	2 Oct 2005 14:18:34 -0000	1.27
  @@ -30,7 +30,7 @@
   %define prefix /usr/local
   %endif
   
  -%define ver 2.0.2
  +%define ver 2.0.3
   %define rel 0
   
   Name:       shtool
  @@ .

From ossp-cvs-owner@ossp.org  Sun Oct  2 16:23:13 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 2ACE2752893; Sun,  2 Oct 2005 16:23:13 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog THANKS sh.mdate
Message-Id: <20051002142313.2ACE2752893@mail.ossp.org>
Date: Sun,  2 Oct 2005 16:23:13 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Oct-2005 16:23:13
  Branch: HEAD                             Handle: 2005100215231200

  Modified files:
    ossp-pkg/shtool         ChangeLog THANKS sh.mdate

  Log:
    "shtool mdate" needs to (un|re)set TIME_STYLE, as GNU coreutils'
    "ls" changes its time format in response to the TIME_STYLE variable.
    
    Submitted by: James Rowe <jnrowe@ukfsn.org>

  Summary:
    Revision    Changes     Path
    1.218       +4  -0      ossp-pkg/shtool/ChangeLog
    1.35        +1  -1      ossp-pkg/shtool/THANKS
    1.16        +8  -0      ossp-pkg/shtool/sh.mdate
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.217 -r1.218 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	2 Oct 2005 14:18:34 -0000	1.217
  +++ ossp-pkg/shtool/ChangeLog	2 Oct 2005 14:23:12 -0000	1.218
  @@ -11,6 +11,10 @@
   
    Changes between 2.0.2 and 2.0.3 (15-Jun-2005 to 02-Oct-2005):
   
  +   *) "shtool mdate" needs to (un|re)set TIME_STYLE, as GNU coreutils'
  +      "ls" changes its time format in response to the TIME_STYLE variable.
  +      [James Rowe <jnrowe@ukfsn.org>]
  +
      *) Use "env -i sort" for Linux detections in "shtool platform" 
         to circumvent LC_COLLATE and LANG environment problems.
         [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/THANKS
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 THANKS
  --- ossp-pkg/shtool/THANKS	13 May 2005 18:52:40 -0000	1.34
  +++ ossp-pkg/shtool/THANKS	2 Oct 2005 14:23:12 -0000	1.35
  @@ -31,7 +31,7 @@
     o Liones                   <liones@myrealbox.com>
     o Thomas Lotterer          <thomas@lotterer.net>
     o Markus F.X.J. Oberhumer  <markus.oberhumer@jk.uni-linz.ac.at>
  -  o James Rowe               <Jay@jnrowe.ukfsn.org>
  +  o James Rowe               <jnrowe@ukfsn.org>
     o Benjamin Saller          <case@appliedtheory.com>
     o Michael Schloh           <michael@schloh.com>
     o Christoph Schug          <chris@schug.net>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.mdate
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 sh.mdate
  --- ossp-pkg/shtool/sh.mdate	15 Jun 2005 08:14:35 -0000	1.15
  +++ ossp-pkg/shtool/sh.mdate	2 Oct 2005 14:23:12 -0000	1.16
  @@ -51,6 +51,14 @@
   LC_ALL=C;  export LC_ALL
   LC_TIME=C; export LC_TIME
   
  +#   GNU ls changes its time format in response to the TIME_STYLE
  +#   variable. Since we cannot assume "unset" works, revert this
  +#   variable to its documented default.
  +if [ ".$TIME_STYLE" != . ]; then
  +    TIME_STYLE=posix-long-iso
  +    export TIME_STYLE
  +fi
  +
   #   get the extended ls output of the file or directory.
   if /bin/ls -L /dev/null >/dev/null 2>&1; then
       set - x`/bin/ls -L -l -d $fod`
  @@ .

From ossp-cvs-owner@ossp.org  Sun Oct  2 16:30:39 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 93821752893; Sun,  2 Oct 2005 16:30:39 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/tool/ index.wml ossp-w...
Message-Id: <20051002143039.93821752893@mail.ossp.org>
Date: Sun,  2 Oct 2005 16:30:39 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   02-Oct-2005 16:30:39
  Branch: HEAD                             Handle: 2005100215303801

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/shtool
                            index.wml

  Log:
    release OSSP shtool 2.0.3

  Summary:
    Revision    Changes     Path
    1.130       +1  -0      ossp-web/new/news.txt
    1.49        +1  -1      ossp-web/pkg/tool/index.wml
    1.13        +2  -2      ossp-web/pkg/tool/shtool/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.129 -r1.130 news.txt
  --- ossp-web/new/news.txt	24 Sep 2005 10:37:59 -0000	1.129
  +++ ossp-web/new/news.txt	2 Oct 2005 14:30:38 -0000	1.130
  @@ -1,3 +1,4 @@
  +02-Oct-2005: Released T<OSSP shtool> 2.0.3
   24-Sep-2005: Released L<OSSP uuid> 1.3.1
   02-Sep-2005: Released L<OSSP mm> 1.4.0
   02-Sep-2005: Released L<OSSP uuid> 1.3.0
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.48 -r1.49 index.wml
  --- ossp-web/pkg/tool/index.wml	18 Aug 2005 07:51:37 -0000	1.48
  +++ ossp-web/pkg/tool/index.wml	2 Oct 2005 14:30:39 -0000	1.49
  @@ -14,7 +14,7 @@
   <pkg_list>
     <pkg_item name="shtool" longname="GNU shtool" type="tool"
               desc="Portable Shell Tool"
  -		    done=100 stable="2.0.2" unstable=none>
  +		    done=100 stable="2.0.3" unstable=none>
     <pkg_item name="lmtp2nntp" longname="OSSP lmtp2nntp" type="tool"
               desc="Real-Time Mail to News Gateway"
               done=100 stable="1.3.0" unstable=none>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/shtool/index.wml
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 index.wml
  --- ossp-web/pkg/tool/shtool/index.wml	15 Jun 2005 08:46:11 -0000	1.12
  +++ ossp-web/pkg/tool/shtool/index.wml	2 Oct 2005 14:30:39 -0000	1.13
  @@ -40,7 +40,7 @@
   
   <pkg_status
       name="shtool" assign="rse"
  -    stable="2.0.2"   stable_date="15-Jun-2005"
  +    stable="2.0.3"   stable_date="02-Oct-2005"
       unstable="none"  unstable_date="none"
   	done=100>
   
  @@ -51,7 +51,7 @@
       url=$(FTP_ROOT_URL)/pkg/tool/shtool/
       directory=$(FTP_ROOT_DIR)/pkg/tool/shtool/
       files="shtool-*.tar.gz" 
  -	stable="shtool-2.0.2.tar.gz" unstable="none">
  +	stable="shtool-2.0.3.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Oct  2 18:31:55 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id D0434752894; Sun,  2 Oct 2005 18:31:53 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex/ ChangeLog README VERSION devtool.conf
Message-Id: <20051002163153.D0434752894@mail.ossp.org>
Date: Sun,  2 Oct 2005 18:31:53 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Oct-2005 18:31:53
  Branch: HEAD                             Handle: 2005100217314901

  Modified files:
    ossp-pkg/ex             ChangeLog README VERSION devtool.conf

  Log:
    flush pending changes and adjust for release

  Summary:
    Revision    Changes     Path
    1.15        +3  -3      ossp-pkg/ex/ChangeLog
    1.16        +1  -1      ossp-pkg/ex/README
    1.9         +1  -1      ossp-pkg/ex/VERSION
    1.14        +2  -2      ossp-pkg/ex/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 ChangeLog
  --- ossp-pkg/ex/ChangeLog	30 Jan 2005 13:41:11 -0000	1.14
  +++ ossp-pkg/ex/ChangeLog	2 Oct 2005 16:31:49 -0000	1.15
  @@ -11,10 +11,10 @@
   
     This is the list of all changes to the OSSP ex source tree.
   
  -  Changes between 1.0.4 and 1.0.5 (05-Apr-2004 to xx-Feb-2005)
  +  Changes between 1.0.4 and 1.0.5 (05-Apr-2004 to 02-Oct-2005)
   
  -   *) Upgrade build environment to GNU libtool 1.5.10 and
  -      GNU shtool 2.0.1
  +   *) Upgrade build environment to GNU libtool 1.5.20 and
  +      GNU shtool 2.0.3
         [Ralf S. Engelschall]
   
      *) Adjusted copyright messages to include new year 2005.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/README
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 README
  --- ossp-pkg/ex/README	30 Jan 2005 13:39:07 -0000	1.15
  +++ ossp-pkg/ex/README	2 Oct 2005 16:31:49 -0000	1.16
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     \___/_/\_\
   
     OSSP ex - Exception Handling
  -  Version 1.0.4 (05-Apr-2004)
  +  Version 1.0.5 (02-Oct-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/VERSION
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 VERSION
  --- ossp-pkg/ex/VERSION	5 Apr 2004 14:44:21 -0000	1.8
  +++ ossp-pkg/ex/VERSION	2 Oct 2005 16:31:49 -0000	1.9
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP ex (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP ex, Version 1.0.4 (05-Apr-2004)
  +  This is OSSP ex, Version 1.0.5 (02-Oct-2005)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 devtool.conf
  --- ossp-pkg/ex/devtool.conf	30 Jan 2005 13:40:05 -0000	1.13
  +++ ossp-pkg/ex/devtool.conf	2 Oct 2005 16:31:50 -0000	1.14
  @@ -3,8 +3,8 @@
   ##
   
   %autogen
  -    @autogen shtool   2.0.1  "2.0.*" all
  -    @autogen libtool  1.5.10 "1.5*"
  +    @autogen shtool   2.0.3  "2.0.*" all
  +    @autogen libtool  1.5.20 "1.5*"
       @autogen autoconf 2.59   "2.5[4-9]*"
   
   %autoclean
  @@ .

From ossp-cvs-owner@ossp.org  Sun Oct  2 18:34:56 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 23712752893; Sun,  2 Oct 2005 18:34:56 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ex/ index.wml ossp...
Message-Id: <20051002163456.23712752893@mail.ossp.org>
Date: Sun,  2 Oct 2005 18:34:56 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   02-Oct-2005 18:34:56
  Branch: HEAD                             Handle: 2005100217345401

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/ex     index.wml

  Log:
    release OSSP ex 1.0.5

  Summary:
    Revision    Changes     Path
    1.131       +1  -0      ossp-web/new/news.txt
    1.13        +2  -2      ossp-web/pkg/lib/ex/index.wml
    1.110       +1  -1      ossp-web/pkg/lib/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.130 -r1.131 news.txt
  --- ossp-web/new/news.txt	2 Oct 2005 14:30:38 -0000	1.130
  +++ ossp-web/new/news.txt	2 Oct 2005 16:34:54 -0000	1.131
  @@ -1,3 +1,4 @@
  +02-Oct-2005: Released L<OSSP ex> 1.0.5
   02-Oct-2005: Released T<OSSP shtool> 2.0.3
   24-Sep-2005: Released L<OSSP uuid> 1.3.1
   02-Sep-2005: Released L<OSSP mm> 1.4.0
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/ex/index.wml
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 index.wml
  --- ossp-web/pkg/lib/ex/index.wml	5 Apr 2004 14:46:33 -0000	1.12
  +++ ossp-web/pkg/lib/ex/index.wml	2 Oct 2005 16:34:55 -0000	1.13
  @@ -42,7 +42,7 @@
   <pkg_status
       name="ex" assign="rse"
   	genesis="Jan-2002"
  -    stable="1.0.4"   stable_date="05-Apr-2004"
  +    stable="1.0.5"   stable_date="02-Oct-2005"
       unstable="none"  unstable_date=""
   	done=100>
   
  @@ -53,7 +53,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/ex/
       directory=$(FTP_ROOT_DIR)/pkg/lib/ex/
       files="ex-*.tar.gz" 
  -	stable="ex-1.0.4.tar.gz" unstable="none">
  +	stable="ex-1.0.5.tar.gz" unstable="none">
   
   <h2>Donation</h2>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.109 -r1.110 index.wml
  --- ossp-web/pkg/lib/index.wml	24 Sep 2005 10:37:59 -0000	1.109
  +++ ossp-web/pkg/lib/index.wml	2 Oct 2005 16:34:55 -0000	1.110
  @@ -21,7 +21,7 @@
   			done=100 stable=1.4.0 unstable=none>
     <pkg_item name="ex" longname="OSSP ex" type="lib"
               desc="Exception Handling"
  -			done=100 stable=1.0.4 unstable=none>
  +			done=100 stable=1.0.5 unstable=none>
     <pkg_item name="sa" longname="OSSP sa" type="lib"
               desc="Socket Abstraction"
   			done=100 stable=1.2.4 unstable=none>
  @@ .

From ossp-cvs-owner@ossp.org  Sun Oct  2 18:38:37 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 387DE752893; Sun,  2 Oct 2005 18:38:37 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog devtool.conf
Message-Id: <20051002163837.387DE752893@mail.ossp.org>
Date: Sun,  2 Oct 2005 18:38:37 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Oct-2005 18:38:37
  Branch: HEAD                             Handle: 2005100217383601

  Modified files:
    ossp-pkg/pth            ChangeLog devtool.conf

  Log:
    Upgraded build environment to GNU libtool 1.5.20 and GNU shtool 2.0.3

  Summary:
    Revision    Changes     Path
    1.638       +6  -0      ossp-pkg/pth/ChangeLog
    1.20        +2  -2      ossp-pkg/pth/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.637 -r1.638 ChangeLog
  --- ossp-pkg/pth/ChangeLog	18 Feb 2005 21:45:36 -0000	1.637
  +++ ossp-pkg/pth/ChangeLog	2 Oct 2005 16:38:36 -0000	1.638
  @@ -19,6 +19,12 @@
        / __/ | |_| |
     __|_____(_)___/_________________________________________________________
                     
  +  Changes between 2.0.4 and 2.0.5 (18-Feb-2005 to xx-xxx-2005)
  +
  +   *) Upgraded build environment to GNU libtool 1.5.20 and
  +      GNU shtool 2.0.3
  +      [Ralf S. Engelschall]
  +
     Changes between 2.0.3 and 2.0.4 (03-Dec-2004 to 18-Feb-2005)
   
      *) Fix internal determination of maximum number in a size_t in
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 devtool.conf
  --- ossp-pkg/pth/devtool.conf	18 Feb 2005 20:40:21 -0000	1.19
  +++ ossp-pkg/pth/devtool.conf	2 Oct 2005 16:38:37 -0000	1.20
  @@ -3,8 +3,8 @@
   ##
   
   %autogen
  -    @autogen shtool   2.0.1  "2.0.*" echo version scpp mkdir install fixperm tarball
  -    @autogen libtool  1.5.14 "1.5*"
  +    @autogen shtool   2.0.3  "2.0.*" echo version scpp mkdir install fixperm tarball
  +    @autogen libtool  1.5.20 "1.5*"
       @autogen autoconf 2.59   "2.5*"
   
   %autoclean
  @@ .

From ossp-cvs-owner@ossp.org  Sun Oct  2 18:43:09 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 34563752893; Sun,  2 Oct 2005 18:43:09 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ ChangeLog devtool.conf
Message-Id: <20051002164309.34563752893@mail.ossp.org>
Date: Sun,  2 Oct 2005 18:43:09 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Oct-2005 18:43:09
  Branch: HEAD                             Handle: 2005100217430800

  Modified files:
    ossp-pkg/sa             ChangeLog devtool.conf

  Log:
    use new GNU shtool 2.0.3

  Summary:
    Revision    Changes     Path
    1.50        +1  -1      ossp-pkg/sa/ChangeLog
    1.27        +1  -1      ossp-pkg/sa/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.49 -r1.50 ChangeLog
  --- ossp-pkg/sa/ChangeLog	7 Sep 2005 13:01:23 -0000	1.49
  +++ ossp-pkg/sa/ChangeLog	2 Oct 2005 16:43:08 -0000	1.50
  @@ -17,7 +17,7 @@
        [Ralf S. Engelschall <rse@engelschall.com>]
      
      o Upgrade build environment to GNU libtool 1.5.20 and
  -     GNU shtool 2.0.2
  +     GNU shtool 2.0.3
        [Ralf S. Engelschall <rse@engelschall.com>]
   
      o Follow FlexeLint suggestions and "constify" some API
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 devtool.conf
  --- ossp-pkg/sa/devtool.conf	7 Sep 2005 12:58:57 -0000	1.26
  +++ ossp-pkg/sa/devtool.conf	2 Oct 2005 16:43:08 -0000	1.27
  @@ -3,7 +3,7 @@
   ##
   
   %autogen
  -    @autogen shtool   2.0.2  "1.6.*" all
  +    @autogen shtool   2.0.3  "1.6.*" all
       @autogen libtool  1.5.20 "1.5*"
       @autogen autoconf 2.59   "2.5[4-9]*"
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Oct  2 18:44:14 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 678C4752893; Sun,  2 Oct 2005 18:44:14 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ ChangeLog README VERSION
Message-Id: <20051002164414.678C4752893@mail.ossp.org>
Date: Sun,  2 Oct 2005 18:44:14 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Oct-2005 18:44:14
  Branch: HEAD                             Handle: 2005100217441400

  Modified files:
    ossp-pkg/sa             ChangeLog README VERSION

  Log:
    bump version before release

  Summary:
    Revision    Changes     Path
    1.51        +1  -1      ossp-pkg/sa/ChangeLog
    1.25        +1  -1      ossp-pkg/sa/README
    1.20        +1  -1      ossp-pkg/sa/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.50 -r1.51 ChangeLog
  --- ossp-pkg/sa/ChangeLog	2 Oct 2005 16:43:08 -0000	1.50
  +++ ossp-pkg/sa/ChangeLog	2 Oct 2005 16:44:14 -0000	1.51
  @@ -11,7 +11,7 @@
     This is a list of all changes to OSSP sa.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 1.2.4 and 1.2.5 (29-Jan-2005 to xx-xxx-2005)
  +  Changes between 1.2.4 and 1.2.5 (29-Jan-2005 to 02-Oct-2005)
   
      o Added pkg-config(1) specification sa.pc
        [Ralf S. Engelschall <rse@engelschall.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/README
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 README
  --- ossp-pkg/sa/README	29 Jan 2005 08:18:22 -0000	1.24
  +++ ossp-pkg/sa/README	2 Oct 2005 16:44:14 -0000	1.25
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/\__,_|
   
     OSSP sa - Socket Abstraction
  -  Version 1.2.4 (29-Jan-2005)
  +  Version 1.2.5 (02-Oct-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/VERSION
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 VERSION
  --- ossp-pkg/sa/VERSION	29 Jan 2005 08:18:22 -0000	1.19
  +++ ossp-pkg/sa/VERSION	2 Oct 2005 16:44:14 -0000	1.20
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP sa (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP sa, Version 1.2.4 (29-Jan-2005)
  +  This is OSSP sa, Version 1.2.5 (02-Oct-2005)
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Oct  2 18:44:35 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 9B8F0752893; Sun,  2 Oct 2005 18:44:35 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ devtool.conf
Message-Id: <20051002164435.9B8F0752893@mail.ossp.org>
Date: Sun,  2 Oct 2005 18:44:35 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Oct-2005 18:44:35
  Branch: HEAD                             Handle: 2005100217443500

  Modified files:
    ossp-pkg/sa             devtool.conf

  Log:
    adjust path

  Summary:
    Revision    Changes     Path
    1.28        +1  -1      ossp-pkg/sa/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 devtool.conf
  --- ossp-pkg/sa/devtool.conf	2 Oct 2005 16:43:08 -0000	1.27
  +++ ossp-pkg/sa/devtool.conf	2 Oct 2005 16:44:35 -0000	1.28
  @@ -52,5 +52,5 @@
   %upload
       echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/sa/"
       V=`./shtool version -l txt -d short VERSION`
  -    scp sa-${V}.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/sa/
  +    scp sa-${V}.tar.gz ossp@master.ossp.org:/v/ossp/ftp/pkg/lib/sa/
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Oct  2 18:47:10 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id AB225752893; Sun,  2 Oct 2005 18:47:10 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20051002164710.AB225752893@mail.ossp.org>
Date: Sun,  2 Oct 2005 18:47:10 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   02-Oct-2005 18:47:10
  Branch: HEAD                             Handle: 2005100217470801

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/sa     index.wml

  Log:
    release OSSP sa 1.2.5

  Summary:
    Revision    Changes     Path
    1.132       +1  -0      ossp-web/new/news.txt
    1.111       +1  -1      ossp-web/pkg/lib/index.wml
    1.23        +2  -2      ossp-web/pkg/lib/sa/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.131 -r1.132 news.txt
  --- ossp-web/new/news.txt	2 Oct 2005 16:34:54 -0000	1.131
  +++ ossp-web/new/news.txt	2 Oct 2005 16:47:08 -0000	1.132
  @@ -1,3 +1,4 @@
  +02-Oct-2005: Released L<OSSP sa> 1.2.5
   02-Oct-2005: Released L<OSSP ex> 1.0.5
   02-Oct-2005: Released T<OSSP shtool> 2.0.3
   24-Sep-2005: Released L<OSSP uuid> 1.3.1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.110 -r1.111 index.wml
  --- ossp-web/pkg/lib/index.wml	2 Oct 2005 16:34:55 -0000	1.110
  +++ ossp-web/pkg/lib/index.wml	2 Oct 2005 16:47:08 -0000	1.111
  @@ -24,7 +24,7 @@
   			done=100 stable=1.0.5 unstable=none>
     <pkg_item name="sa" longname="OSSP sa" type="lib"
               desc="Socket Abstraction"
  -			done=100 stable=1.2.4 unstable=none>
  +			done=100 stable=1.2.5 unstable=none>
     <pkg_item name="fsl" longname="OSSP fsl" type="lib"
               desc="Faked/Flexible Syslog"
   			done=100 stable=1.6.0 unstable=none>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/sa/index.wml
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 index.wml
  --- ossp-web/pkg/lib/sa/index.wml	29 Jan 2005 08:21:07 -0000	1.22
  +++ ossp-web/pkg/lib/sa/index.wml	2 Oct 2005 16:47:09 -0000	1.23
  @@ -110,7 +110,7 @@
   
   <pkg_status
       name="sa" assign="rse" genesis="Jan-2001"
  -    stable="1.2.4"    stable_date="29-Jan-2005"
  +    stable="1.2.5"    stable_date="02-Oct-2005"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -121,7 +121,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/sa/
       directory=$(FTP_ROOT_DIR)/pkg/lib/sa/
       files="sa-*.tar.gz" 
  -	stable="sa-1\.2\.4\.tar\.gz" unstable="sa-SNAP.*\.tar.gz">
  +	stable="sa-1\.2\.5\.tar\.gz" unstable="sa-SNAP.*\.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Oct  2 18:52:47 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 78C4D752893; Sun,  2 Oct 2005 18:52:47 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var/ ChangeLog devtool.conf
Message-Id: <20051002165247.78C4D752893@mail.ossp.org>
Date: Sun,  2 Oct 2005 18:52:47 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Oct-2005 18:52:47
  Branch: HEAD                             Handle: 2005100217524700

  Modified files:
    ossp-pkg/var            ChangeLog devtool.conf

  Log:
    upgrade build environment

  Summary:
    Revision    Changes     Path
    1.16        +5  -1      ossp-pkg/var/ChangeLog
    1.14        +2  -2      ossp-pkg/var/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 ChangeLog
  --- ossp-pkg/var/ChangeLog	20 Jan 2005 20:29:06 -0000	1.15
  +++ ossp-pkg/var/ChangeLog	2 Oct 2005 16:52:47 -0000	1.16
  @@ -11,7 +11,11 @@
     This is a list of all source changes to OSSP var.
     For less details please have a look at the NEWS file.
   
  -  Changes between 1.1.2 and 1.1.3 (31-Oct-2004 to xx-Jan-2005)
  +  Changes between 1.1.2 and 1.1.3 (31-Oct-2004 to 02-Oct-2005)
  +   
  +   o Upgraded build environment to GNU libtool 1.5.20
  +     and GNU shtool 2.0.3.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
   
      o Bumped year in copyright messages for new year 2005.
        [Ralf S. Engelschall <rse@engelschall.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 devtool.conf
  --- ossp-pkg/var/devtool.conf	29 Oct 2004 19:42:20 -0000	1.13
  +++ ossp-pkg/var/devtool.conf	2 Oct 2005 16:52:47 -0000	1.14
  @@ -3,8 +3,8 @@
   ##
   
   %autogen
  -    @autogen shtool   2.0.1  "2.0.*" all
  -    @autogen libtool  1.5.10 "1.5*"
  +    @autogen shtool   2.0.3  "2.0.*" all
  +    @autogen libtool  1.5.20 "1.5*"
       @autogen autoconf 2.59   "2.5[4-9]*"
   
   %autoclean
  @@ .

From ossp-cvs-owner@ossp.org  Sun Oct  2 18:58:32 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 25F95752893; Sun,  2 Oct 2005 18:58:32 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var/ ChangeLog var_play.c var_test.c
Message-Id: <20051002165832.25F95752893@mail.ossp.org>
Date: Sun,  2 Oct 2005 18:58:32 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Oct-2005 18:58:32
  Branch: HEAD                             Handle: 2005100217583100

  Modified files:
    ossp-pkg/var            ChangeLog var_play.c var_test.c

  Log:
    Fix some sprintf(3) parameter passing.

  Summary:
    Revision    Changes     Path
    1.17        +3  -0      ossp-pkg/var/ChangeLog
    1.9         +1  -1      ossp-pkg/var/var_play.c
    1.53        +2  -2      ossp-pkg/var/var_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 ChangeLog
  --- ossp-pkg/var/ChangeLog	2 Oct 2005 16:52:47 -0000	1.16
  +++ ossp-pkg/var/ChangeLog	2 Oct 2005 16:58:31 -0000	1.17
  @@ -12,6 +12,9 @@
     For less details please have a look at the NEWS file.
   
     Changes between 1.1.2 and 1.1.3 (31-Oct-2004 to 02-Oct-2005)
  +
  +   o Fix some sprintf(3) parameter passing.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
      
      o Upgraded build environment to GNU libtool 1.5.20
        and GNU shtool 2.0.3.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var_play.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 var_play.c
  --- ossp-pkg/var/var_play.c	20 Jan 2005 20:29:06 -0000	1.8
  +++ ossp-pkg/var/var_play.c	2 Oct 2005 16:58:31 -0000	1.9
  @@ -99,7 +99,7 @@
       if ((rc = var_expand(var, src_ptr, src_len, &dst_ptr, &dst_len, 1)) != VAR_OK) {
           if (rc != VAR_ERR_INVALID_ARGUMENT && rc != VAR_ERR_OUT_OF_MEMORY) {
               fprintf(stdout, "parsing:   \"%s\"\n", dst_ptr);
  -            fprintf(stdout, "             %*s\n", dst_len, "^");
  +            fprintf(stdout, "             %*s\n", (int)dst_len, "^");
           }
           die("variable expansion", var, rc);
       }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/var_test.c
  ============================================================================
  $ cvs diff -u -r1.52 -r1.53 var_test.c
  --- ossp-pkg/var/var_test.c	20 Jan 2005 20:29:06 -0000	1.52
  +++ ossp-pkg/var/var_test.c	2 Oct 2005 16:58:31 -0000	1.53
  @@ -102,9 +102,9 @@
                          && strncmp(varname, vars[i + counter].name, name_len) == 0)
                       counter++;
                   if (counter == 1)
  -                    sprintf(buf, "%d", length);
  +                    sprintf(buf, "%d", (int)length);
                   else
  -                    sprintf(buf, "%d", counter);
  +                    sprintf(buf, "%d", (int)counter);
                   *data = buf;
                   *data_len = strlen(buf);
                   *buffer_size = 0;
  @@ .

From ossp-cvs-owner@ossp.org  Sun Oct  2 19:50:58 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 77687752893; Sun,  2 Oct 2005 19:50:58 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var/ devtool.conf
Message-Id: <20051002175058.77687752893@mail.ossp.org>
Date: Sun,  2 Oct 2005 19:50:58 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Oct-2005 19:50:58
  Branch: HEAD                             Handle: 2005100218505800

  Modified files:
    ossp-pkg/var            devtool.conf

  Log:
    adjust path

  Summary:
    Revision    Changes     Path
    1.15        +1  -1      ossp-pkg/var/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 devtool.conf
  --- ossp-pkg/var/devtool.conf	2 Oct 2005 16:52:47 -0000	1.14
  +++ ossp-pkg/var/devtool.conf	2 Oct 2005 17:50:58 -0000	1.15
  @@ -59,5 +59,5 @@
   
   %release
       echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/var/"
  -    scp var-*.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/var/
  +    scp var-*.tar.gz ossp@master.ossp.org:/v/ossp/ftp/pkg/lib/var/
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Oct  2 22:47:57 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B3B7C752893; Sun,  2 Oct 2005 22:47:57 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/var/ README VERSION
Message-Id: <20051002204757.B3B7C752893@mail.ossp.org>
Date: Sun,  2 Oct 2005 22:47:57 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Oct-2005 22:47:57
  Branch: HEAD                             Handle: 2005100221475700

  Modified files:
    ossp-pkg/var            README VERSION

  Log:
    bump version before release

  Summary:
    Revision    Changes     Path
    1.11        +1  -1      ossp-pkg/var/README
    1.9         +1  -1      ossp-pkg/var/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/README
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 README
  --- ossp-pkg/var/README	20 Jan 2005 20:29:06 -0000	1.10
  +++ ossp-pkg/var/README	2 Oct 2005 20:47:57 -0000	1.11
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|       \_/ \__,_|_|
   
     OSSP var - Variable Expansion
  -  Version 1.1.2 (31-Oct-2004)
  +  Version 1.1.3 (02-Oct-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/var/VERSION
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 VERSION
  --- ossp-pkg/var/VERSION	31 Oct 2004 11:59:57 -0000	1.8
  +++ ossp-pkg/var/VERSION	2 Oct 2005 20:47:57 -0000	1.9
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP var (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP var, Version 1.1.2 (31-Oct-2004)
  +  This is OSSP var, Version 1.1.3 (02-Oct-2005)
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Oct  2 22:50:07 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id DB2FF752893; Sun,  2 Oct 2005 22:50:07 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20051002205007.DB2FF752893@mail.ossp.org>
Date: Sun,  2 Oct 2005 22:50:07 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   02-Oct-2005 22:50:07
  Branch: HEAD                             Handle: 2005100221500700

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/var    index.wml

  Log:
    release OSSP var 1.1.3

  Summary:
    Revision    Changes     Path
    1.133       +1  -0      ossp-web/new/news.txt
    1.112       +1  -1      ossp-web/pkg/lib/index.wml
    1.13        +2  -2      ossp-web/pkg/lib/var/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.132 -r1.133 news.txt
  --- ossp-web/new/news.txt	2 Oct 2005 16:47:08 -0000	1.132
  +++ ossp-web/new/news.txt	2 Oct 2005 20:50:07 -0000	1.133
  @@ -1,3 +1,4 @@
  +02-Oct-2005: Released L<OSSP var> 1.1.3
   02-Oct-2005: Released L<OSSP sa> 1.2.5
   02-Oct-2005: Released L<OSSP ex> 1.0.5
   02-Oct-2005: Released T<OSSP shtool> 2.0.3
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.111 -r1.112 index.wml
  --- ossp-web/pkg/lib/index.wml	2 Oct 2005 16:47:08 -0000	1.111
  +++ ossp-web/pkg/lib/index.wml	2 Oct 2005 20:50:07 -0000	1.112
  @@ -30,7 +30,7 @@
   			done=100 stable=1.6.0 unstable=none>
     <pkg_item name="var" longname="OSSP var" type="lib"
               desc="Variable Expansion"
  -			done=100 stable=1.1.2 unstable=none>
  +			done=100 stable=1.1.3 unstable=none>
     <pkg_item name="uuid" longname="OSSP uuid" type="lib"
               desc="Universally Unique Identifier"
   			done=100 stable=1.3.1 unstable=none>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/var/index.wml
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 index.wml
  --- ossp-web/pkg/lib/var/index.wml	31 Oct 2004 12:05:03 -0000	1.12
  +++ ossp-web/pkg/lib/var/index.wml	2 Oct 2005 20:50:07 -0000	1.13
  @@ -51,7 +51,7 @@
   
   <pkg_status
       name="var" assign="rse"
  -    stable="1.1.2" stable_date="31-Oct-2004"
  +    stable="1.1.3" stable_date="02-Oct-2005"
       unstable="none" unstable_date="none"
   	genesis="08-Mar-2002" 
   	done=100>
  @@ -63,7 +63,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/var/
       directory=$(FTP_ROOT_DIR)/pkg/lib/var/
       files="var-*.tar.gz" 
  -	stable="var-1.1.2.tar.gz" unstable="none">
  +	stable="var-1.1.3.tar.gz" unstable="none">
   
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Oct  2 22:54:32 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 0C892752893; Sun,  2 Oct 2005 22:54:32 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val/ ChangeLog devtool.conf
Message-Id: <20051002205432.0C892752893@mail.ossp.org>
Date: Sun,  2 Oct 2005 22:54:32 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Oct-2005 22:54:32
  Branch: HEAD                             Handle: 2005100221543100

  Modified files:
    ossp-pkg/val            ChangeLog devtool.conf

  Log:
    Upgraded build environment to GNU libtool 1.5.20 and GNU shtool 2.0.3

  Summary:
    Revision    Changes     Path
    1.5         +5  -0      ossp-pkg/val/ChangeLog
    1.14        +3  -3      ossp-pkg/val/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ChangeLog
  --- ossp-pkg/val/ChangeLog	12 Sep 2004 18:20:42 -0000	1.4
  +++ ossp-pkg/val/ChangeLog	2 Oct 2005 20:54:31 -0000	1.5
  @@ -11,6 +11,11 @@
     This is a list of all changes to OSSP val.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 0.9.3 and 0.9.4 (12-Sep-2004 to 02-Oct-2005)
  +
  +   o Upgraded build environment to GNU libtool 1.5.20 and GNU shtool 2.0.3
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
     Changes between 0.9.2 and 0.9.3 (04-Apr-2003 to 12-Sep-2004)
   
      o Upgraded build environment to GNU libtool 1.5.8 and GNU shtool 2.0.1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 devtool.conf
  --- ossp-pkg/val/devtool.conf	12 Sep 2004 18:20:42 -0000	1.13
  +++ ossp-pkg/val/devtool.conf	2 Oct 2005 20:54:31 -0000	1.14
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   2.0.1 "2.0.*" all
  -    @autogen libtool  1.5.8 "1.5*"
  -    @autogen autoconf 2.59  "2.5[4-9]*"
  +    @autogen shtool   2.0.3  "2.0.*" all
  +    @autogen libtool  1.5.20 "1.5*"
  +    @autogen autoconf 2.59   "2.5[4-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 09:22:14 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 15BDA752893; Mon,  3 Oct 2005 09:22:14 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val/ ChangeLog Makefile.in README aclocal.m4 conf...
Message-Id: <20051003072214.15BDA752893@mail.ossp.org>
Date: Mon,  3 Oct 2005 09:22:14 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 09:22:14
  Branch: HEAD                             Handle: 2005100308221300

  Modified files:
    ossp-pkg/val            ChangeLog Makefile.in README aclocal.m4
                            configure.ac val-config.in val-config.pod val.c
                            val.h val.pod val_test.c

  Log:
    Bumped year in copyright messages for new year 2005

  Summary:
    Revision    Changes     Path
    1.6         +3  -0      ossp-pkg/val/ChangeLog
    1.10        +3  -3      ossp-pkg/val/Makefile.in
    1.11        +3  -3      ossp-pkg/val/README
    1.9         +3  -3      ossp-pkg/val/aclocal.m4
    1.9         +3  -3      ossp-pkg/val/configure.ac
    1.8         +3  -3      ossp-pkg/val/val-config.in
    1.4         +3  -3      ossp-pkg/val/val-config.pod
    1.19        +3  -3      ossp-pkg/val/val.c
    1.10        +3  -3      ossp-pkg/val/val.h
    1.18        +3  -3      ossp-pkg/val/val.pod
    1.11        +3  -3      ossp-pkg/val/val_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ChangeLog
  --- ossp-pkg/val/ChangeLog	2 Oct 2005 20:54:31 -0000	1.5
  +++ ossp-pkg/val/ChangeLog	3 Oct 2005 07:22:13 -0000	1.6
  @@ -16,6 +16,9 @@
      o Upgraded build environment to GNU libtool 1.5.20 and GNU shtool 2.0.3
        [Ralf S. Engelschall <rse@engelschall.com>]
   
  +   o Bumped year in copyright messages for new year 2005.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
     Changes between 0.9.2 and 0.9.3 (04-Apr-2003 to 12-Sep-2004)
   
      o Upgraded build environment to GNU libtool 1.5.8 and GNU shtool 2.0.1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 Makefile.in
  --- ossp-pkg/val/Makefile.in	4 Apr 2004 10:40:50 -0000	1.9
  +++ ossp-pkg/val/Makefile.in	3 Oct 2005 07:22:13 -0000	1.10
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP val - Value Access
  -##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP val, a value access library which
   ##  can be found at http://www.ossp.org/pkg/lib/val/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/README
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 README
  --- ossp-pkg/val/README	12 Sep 2004 18:22:20 -0000	1.10
  +++ ossp-pkg/val/README	3 Oct 2005 07:22:13 -0000	1.11
  @@ -22,9 +22,9 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
  +  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
   
     This file is part of OSSP val, a value access library which
     can be found at http://www.ossp.org/pkg/lib/val/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 aclocal.m4
  --- ossp-pkg/val/aclocal.m4	4 Apr 2004 10:40:50 -0000	1.8
  +++ ossp-pkg/val/aclocal.m4	3 Oct 2005 07:22:13 -0000	1.9
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP val -- Value Access
  -dnl ##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  +dnl ##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   dnl ##
   dnl ##  This file is part of OSSP val, a value access library
   dnl ##  which can be found at http://www.ossp.org/pkg/lib/val/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/configure.ac
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 configure.ac
  --- ossp-pkg/val/configure.ac	4 Apr 2004 10:40:50 -0000	1.8
  +++ ossp-pkg/val/configure.ac	3 Oct 2005 07:22:13 -0000	1.9
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP val - Value Access
  -dnl ##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
  +dnl ##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
   dnl ##
   dnl ##  This file is part of OSSP val, a value access library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/val/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/val-config.in
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 val-config.in
  --- ossp-pkg/val/val-config.in	4 Apr 2004 10:40:50 -0000	1.7
  +++ ossp-pkg/val/val-config.in	3 Oct 2005 07:22:13 -0000	1.8
  @@ -1,9 +1,9 @@
   #!/bin/sh
   ##
   ##  OSSP val - Value Access
  -##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP val, a value access library which
   ##  can be found at http://www.ossp.org/pkg/lib/val/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/val-config.pod
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 val-config.pod
  --- ossp-pkg/val/val-config.pod	4 Apr 2004 10:40:50 -0000	1.3
  +++ ossp-pkg/val/val-config.pod	3 Oct 2005 07:22:13 -0000	1.4
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP val -- Value Access
  -##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2001-2004 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2001-2004 Cable & Wireless (http://www.cw.com/)
  +##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2005 The OSSP Project (http://www.ossp.org/)
  +##  Copyright (c) 2001-2005 Cable & Wireless (http://www.cw.com/)
   ##
   ##  This file is part of OSSP val, a value access
   ##  library which can be found at http://www.ossp.org/pkg/lib/val/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/val.c
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 val.c
  --- ossp-pkg/val/val.c	4 Apr 2004 10:45:29 -0000	1.18
  +++ ossp-pkg/val/val.c	3 Oct 2005 07:22:13 -0000	1.19
  @@ -1,8 +1,8 @@
   /*
   **  OSSP val - Value Access
  -**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP val, a value access library which
   **  can be found at http://www.ossp.org/pkg/lib/val/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/val.h
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 val.h
  --- ossp-pkg/val/val.h	4 Apr 2004 10:40:50 -0000	1.9
  +++ ossp-pkg/val/val.h	3 Oct 2005 07:22:13 -0000	1.10
  @@ -1,8 +1,8 @@
   /*
   **  OSSP val - Value Access
  -**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP val, a value access library which
   **  can be found at http://www.ossp.org/pkg/lib/val/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/val.pod
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 val.pod
  --- ossp-pkg/val/val.pod	4 Apr 2004 10:40:50 -0000	1.17
  +++ ossp-pkg/val/val.pod	3 Oct 2005 07:22:13 -0000	1.18
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP val - Value Access
  -##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP val, a value access library which
   ##  can be found at http://www.ossp.org/pkg/lib/val/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/val_test.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 val_test.c
  --- ossp-pkg/val/val_test.c	4 Apr 2004 10:40:50 -0000	1.10
  +++ ossp-pkg/val/val_test.c	3 Oct 2005 07:22:13 -0000	1.11
  @@ -1,8 +1,8 @@
   /*
   **  OSSP val - Value Access
  -**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP val, a value access library which
   **  can be found at http://www.ossp.org/pkg/lib/val/.
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 09:23:23 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id BC5B0752893; Mon,  3 Oct 2005 09:23:23 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val/ devtool.conf
Message-Id: <20051003072323.BC5B0752893@mail.ossp.org>
Date: Mon,  3 Oct 2005 09:23:23 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 09:23:23
  Branch: HEAD                             Handle: 2005100308232300

  Modified files:
    ossp-pkg/val            devtool.conf

  Log:
    adjust path

  Summary:
    Revision    Changes     Path
    1.15        +1  -1      ossp-pkg/val/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 devtool.conf
  --- ossp-pkg/val/devtool.conf	2 Oct 2005 20:54:31 -0000	1.14
  +++ ossp-pkg/val/devtool.conf	3 Oct 2005 07:23:23 -0000	1.15
  @@ -58,5 +58,5 @@
   
   %release
       echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/val/"
  -    scp val-*.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/val/
  +    scp val-*.tar.gz ossp@master.ossp.org:/v/ossp/ftp/pkg/lib/val/
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 09:23:36 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 4ED757529CA; Mon,  3 Oct 2005 09:23:36 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/val/ ChangeLog README VERSION
Message-Id: <20051003072336.4ED757529CA@mail.ossp.org>
Date: Mon,  3 Oct 2005 09:23:36 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 09:23:36
  Branch: HEAD                             Handle: 2005100308233600

  Modified files:
    ossp-pkg/val            ChangeLog README VERSION

  Log:
    bump version before release

  Summary:
    Revision    Changes     Path
    1.7         +1  -1      ossp-pkg/val/ChangeLog
    1.12        +1  -1      ossp-pkg/val/README
    1.7         +1  -1      ossp-pkg/val/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ChangeLog
  --- ossp-pkg/val/ChangeLog	3 Oct 2005 07:22:13 -0000	1.6
  +++ ossp-pkg/val/ChangeLog	3 Oct 2005 07:23:36 -0000	1.7
  @@ -11,7 +11,7 @@
     This is a list of all changes to OSSP val.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 0.9.3 and 0.9.4 (12-Sep-2004 to 02-Oct-2005)
  +  Changes between 0.9.3 and 0.9.4 (12-Sep-2004 to 03-Oct-2005)
   
      o Upgraded build environment to GNU libtool 1.5.20 and GNU shtool 2.0.3
        [Ralf S. Engelschall <rse@engelschall.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/README
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 README
  --- ossp-pkg/val/README	3 Oct 2005 07:22:13 -0000	1.11
  +++ ossp-pkg/val/README	3 Oct 2005 07:23:36 -0000	1.12
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|       \_/ \__,_|_|
   
     OSSP val - Value Access
  -  Version 0.9.3 (12-Sep-2004)
  +  Version 0.9.4 (03-Oct-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/val/VERSION
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 VERSION
  --- ossp-pkg/val/VERSION	12 Sep 2004 18:22:20 -0000	1.6
  +++ ossp-pkg/val/VERSION	3 Oct 2005 07:23:36 -0000	1.7
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP val (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP val, Version 0.9.3 (12-Sep-2004)
  +  This is OSSP val, Version 0.9.4 (03-Oct-2005)
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 09:25:51 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 9867D752893; Mon,  3 Oct 2005 09:25:51 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/xds/ ChangeLog devtool.conf
Message-Id: <20051003072551.9867D752893@mail.ossp.org>
Date: Mon,  3 Oct 2005 09:25:51 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 09:25:51
  Branch: HEAD                             Handle: 2005100308255100

  Modified files:
    ossp-pkg/xds            ChangeLog devtool.conf

  Log:
    flush pending changes

  Summary:
    Revision    Changes     Path
    1.11        +6  -0      ossp-pkg/xds/ChangeLog
    1.9         +3  -3      ossp-pkg/xds/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 ChangeLog
  --- ossp-pkg/xds/ChangeLog	2 Jun 2005 18:51:44 -0000	1.10
  +++ ossp-pkg/xds/ChangeLog	3 Oct 2005 07:25:51 -0000	1.11
  @@ -11,6 +11,12 @@
     This is a list of all source changes to OSSP xds.
     For less details please have a look at the NEWS file.
   
  +  Changes between 0.9.2 and 0.9.3 (02-Jun-2005 to xx-xxx-2005)
  +   
  +   o Upgraded build environment to GNU libtool 1.5.20
  +     and GNU shtool 2.0.3
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
     Changes between 0.9.1 and 0.9.2 (17-Sep-2004 to 02-Jun-2005)
   
      o Upgraded build environment to GNU libtool 1.5.18
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 devtool.conf
  --- ossp-pkg/xds/devtool.conf	2 Jun 2005 18:45:48 -0000	1.8
  +++ ossp-pkg/xds/devtool.conf	3 Oct 2005 07:25:51 -0000	1.9
  @@ -3,8 +3,8 @@
   ##
   
   %autogen
  -    @autogen shtool   2.0.1  "2.0.*" all
  -    @autogen libtool  1.5.18 "1.5*"
  +    @autogen shtool   2.0.3  "2.0.*" all
  +    @autogen libtool  1.5.20 "1.5*"
       @autogen autoconf 2.59   "2.5[3-9]*"
   
   %autoclean
  @@ -58,5 +58,5 @@
   
   %release
       echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/xds/"
  -    scp xds-*.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/xds/
  +    scp xds-*.tar.gz ossp@master.ossp.org:/v/ossp/ftp/pkg/lib/xds/
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 09:34:44 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id D7BC1752893; Mon,  3 Oct 2005 09:34:43 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str/ ChangeLog devtool.conf str_format.c
Message-Id: <20051003073443.D7BC1752893@mail.ossp.org>
Date: Mon,  3 Oct 2005 09:34:43 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 09:34:43
  Branch: HEAD                             Handle: 2005100308344300

  Modified files:
    ossp-pkg/str            ChangeLog devtool.conf str_format.c

  Log:
    flush pending changes

  Summary:
    Revision    Changes     Path
    1.53        +6  -0      ossp-pkg/str/ChangeLog
    1.8         +3  -3      ossp-pkg/str/devtool.conf
    1.31        +10 -3      ossp-pkg/str/str_format.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.52 -r1.53 ChangeLog
  --- ossp-pkg/str/ChangeLog	23 Sep 2005 14:20:46 -0000	1.52
  +++ ossp-pkg/str/ChangeLog	3 Oct 2005 07:34:43 -0000	1.53
  @@ -11,6 +11,12 @@
   
    Changes between 0.9.10 and 0.9.11 (24-Jan-2004 to 21-Aug-2005):
   
  +   *) Fixed isnan(3) & isinf(3) related compile-time warnings.
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +   *) Upgraded build environment to GNU libtool 1.5.20 and GNU shtool 2.0.3.
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
      *) Remove bogus $(S) in Makefile.in
         [Ralf S. Engelschall <rse@engelschall.com>]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 devtool.conf
  --- ossp-pkg/str/devtool.conf	24 Jan 2005 15:32:38 -0000	1.7
  +++ ossp-pkg/str/devtool.conf	3 Oct 2005 07:34:43 -0000	1.8
  @@ -3,8 +3,8 @@
   ##
   
   %autogen
  -    @autogen shtool   2.0.1  "2.0.*" echo install mkdir fixperm tarball version
  -    @autogen libtool  1.5.10 "1.5*"
  +    @autogen shtool   2.0.3  "2.0.*" echo install mkdir fixperm tarball version
  +    @autogen libtool  1.5.20 "1.5*"
       @autogen autoconf 2.59   "2.5[4-9]*"
   
   %autoclean
  @@ -55,7 +55,7 @@
   %upload
       echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/str/"
       V=`./shtool version -lc -dshort str_version.c`
  -    scp str-${V}.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/str/
  +    scp str-${V}.tar.gz ossp@master.ossp.org:/v/ossp/ftp/pkg/lib/str/
   
   %snap
       rm -f str-*.tar.gz
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str_format.c
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 str_format.c
  --- ossp-pkg/str/str_format.c	24 Jan 2005 15:22:19 -0000	1.30
  +++ ossp-pkg/str/str_format.c	3 Oct 2005 07:34:43 -0000	1.31
  @@ -89,6 +89,13 @@
    * on-the-fly.
    */
   
  +#include <stdio.h>
  +#include <stdlib.h>
  +#include <stdarg.h>
  +#include <string.h>
  +#include <ctype.h>
  +#include <math.h>
  +
   #include "str_p.h"
   
   /* types which are locally use */
  @@ -143,10 +150,10 @@
   {
       double fraction;
       double integral;
  -    long trunc;
  +    long truncated;
   
  -    trunc = (long)arg;
  -    integral = (double)trunc;
  +    truncated = (long)arg;
  +    integral = (double)truncated;
       fraction = arg - integral;
       if (iptr != NULL)
           *iptr = integral;
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 09:35:51 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 74A80752893; Mon,  3 Oct 2005 09:35:51 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str/ ChangeLog README str_version.c
Message-Id: <20051003073551.74A80752893@mail.ossp.org>
Date: Mon,  3 Oct 2005 09:35:51 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 09:35:51
  Branch: HEAD                             Handle: 2005100308355100

  Modified files:
    ossp-pkg/str            ChangeLog README str_version.c

  Log:
    bump version before release

  Summary:
    Revision    Changes     Path
    1.54        +1  -1      ossp-pkg/str/ChangeLog
    1.26        +1  -1      ossp-pkg/str/README
    1.19        +9  -9      ossp-pkg/str/str_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.53 -r1.54 ChangeLog
  --- ossp-pkg/str/ChangeLog	3 Oct 2005 07:34:43 -0000	1.53
  +++ ossp-pkg/str/ChangeLog	3 Oct 2005 07:35:51 -0000	1.54
  @@ -9,7 +9,7 @@
   
    ChangeLog
   
  - Changes between 0.9.10 and 0.9.11 (24-Jan-2004 to 21-Aug-2005):
  + Changes between 0.9.10 and 0.9.11 (24-Jan-2004 to 03-Oct-2005):
   
      *) Fixed isnan(3) & isinf(3) related compile-time warnings.
         [Ralf S. Engelschall <rse@engelschall.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/README
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 README
  --- ossp-pkg/str/README	21 Aug 2005 17:34:52 -0000	1.25
  +++ ossp-pkg/str/README	3 Oct 2005 07:35:51 -0000	1.26
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/\__|_|   
   
     OSSP str - String Handling
  -  Version 0.9.10 (24-Jan-2005)
  +  Version 0.9.11 (03-Oct-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str_version.c
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 str_version.c
  --- ossp-pkg/str/str_version.c	21 Aug 2005 17:34:52 -0000	1.18
  +++ ossp-pkg/str/str_version.c	3 Oct 2005 07:35:51 -0000	1.19
  @@ -8,7 +8,7 @@
   #ifndef _STR_VERSION_C_
   #define _STR_VERSION_C_
   
  -#define STR_VERSION 0x00920A
  +#define STR_VERSION 0x00920B
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _STR_VERSION_C_AS_HEADER_
   
   str_version_t str_version = {
  -    0x00920A,
  -    "0.9.10",
  -    "0.9.10 (24-Jan-2005)",
  -    "This is OSSP str, Version 0.9.10 (24-Jan-2005)",
  -    "OSSP str 0.9.10 (24-Jan-2005)",
  -    "OSSP str/0.9.10",
  -    "@(#)OSSP str 0.9.10 (24-Jan-2005)",
  -    "$Id: OSSP str 0.9.10 (24-Jan-2005) $"
  +    0x00920B,
  +    "0.9.11",
  +    "0.9.11 (03-Oct-2005)",
  +    "This is OSSP str, Version 0.9.11 (03-Oct-2005)",
  +    "OSSP str 0.9.11 (03-Oct-2005)",
  +    "OSSP str/0.9.11",
  +    "@(#)OSSP str 0.9.11 (03-Oct-2005)",
  +    "$Id: OSSP str 0.9.11 (03-Oct-2005) $"
   };
   
   #endif /* _STR_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 09:40:06 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id CF766752893; Mon,  3 Oct 2005 09:40:05 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str/ ChangeLog str_pcre.c
Message-Id: <20051003074005.CF766752893@mail.ossp.org>
Date: Mon,  3 Oct 2005 09:40:05 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 09:40:05
  Branch: HEAD                             Handle: 2005100308400500

  Modified files:
    ossp-pkg/str            ChangeLog str_pcre.c

  Log:
    Security Fix to str_pcre.c (CAN-2005-2491, partially only)

  Summary:
    Revision    Changes     Path
    1.55        +3  -0      ossp-pkg/str/ChangeLog
    1.9         +8  -0      ossp-pkg/str/str_pcre.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.54 -r1.55 ChangeLog
  --- ossp-pkg/str/ChangeLog	3 Oct 2005 07:35:51 -0000	1.54
  +++ ossp-pkg/str/ChangeLog	3 Oct 2005 07:40:05 -0000	1.55
  @@ -11,6 +11,9 @@
   
    Changes between 0.9.10 and 0.9.11 (24-Jan-2004 to 03-Oct-2005):
   
  +   *) Security Fix to str_pcre.c (CAN-2005-2491, partially only)
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
      *) Fixed isnan(3) & isinf(3) related compile-time warnings.
         [Ralf S. Engelschall <rse@engelschall.com>]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str_pcre.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 str_pcre.c
  --- ossp-pkg/str/str_pcre.c	6 Jan 2003 19:13:47 -0000	1.8
  +++ ossp-pkg/str/str_pcre.c	3 Oct 2005 07:40:05 -0000	1.9
  @@ -674,6 +674,10 @@
   
   	while ((cd->ctypes[*p] & ctype_digit) != 0)
   		min = min * 10 + *p++ - '0';
  +	if (min < 0 || min > 65535) {
  +	    *errorptr = ERR5;
  +	    return p;
  +	}
   
   	if (*p == '}')
   		max = min;
  @@ -682,6 +686,10 @@
   			max = 0;
   			while ((cd->ctypes[*p] & ctype_digit) != 0)
   				max = max * 10 + *p++ - '0';
  +			if (max < 0 || max > 65535) {
  +			    *errorptr = ERR5;
  +			    return p;
  +			}
   			if (max < min) {
   				*errorptr = ERR4;
   				return p;
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 09:51:01 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 4C9E0752893; Mon,  3 Oct 2005 09:51:01 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ ChangeLog
Message-Id: <20051003075101.4C9E0752893@mail.ossp.org>
Date: Mon,  3 Oct 2005 09:51:01 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 09:51:01
  Branch: HEAD                             Handle: 2005100308510100

  Modified files:
    ossp-pkg/cfg            ChangeLog

  Log:
    typo

  Summary:
    Revision    Changes     Path
    1.39        +1  -1      ossp-pkg/cfg/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.38 -r1.39 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	18 Feb 2005 10:33:30 -0000	1.38
  +++ ossp-pkg/cfg/ChangeLog	3 Oct 2005 07:51:01 -0000	1.39
  @@ -49,7 +49,7 @@
   
      *) Fixed cfg_node_get() function after recent introduction
         of LOAN/GIFT/COPY  argument passing semantics. This
  -      inbreaks the Perl API's unpack() function.
  +      unbreaks the Perl API's unpack() function.
         [Ralf S. Engelschall <rse@engelschall.com>]
   
    Changes between 0.9.5 and 0.9.6 (27-Nov-2004 to 04-Dec-2004):
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 09:51:37 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 4CADF752893; Mon,  3 Oct 2005 09:51:37 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ ChangeLog devtool.conf
Message-Id: <20051003075137.4CADF752893@mail.ossp.org>
Date: Mon,  3 Oct 2005 09:51:37 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 09:51:37
  Branch: HEAD                             Handle: 2005100308513700

  Modified files:
    ossp-pkg/cfg            ChangeLog devtool.conf

  Log:
    Upgraded build environment to GNU libtool 1.5.20  and GNU shtool 2.0.3

  Summary:
    Revision    Changes     Path
    1.40        +6  -0      ossp-pkg/cfg/ChangeLog
    1.25        +2  -2      ossp-pkg/cfg/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.39 -r1.40 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	3 Oct 2005 07:51:01 -0000	1.39
  +++ ossp-pkg/cfg/ChangeLog	3 Oct 2005 07:51:37 -0000	1.40
  @@ -8,6 +8,12 @@
   
     CHANGELOG
   
  + Changes between 0.9.9 and 0.9.10 (18-Feb-2005 to 03-Oct-2005):
  +
  +   *) Upgraded build environment to GNU libtool 1.5.20
  +      and GNU shtool 2.0.3
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
    Changes between 0.9.8 and 0.9.9 (24-Jan-2005 to 18-Feb-2005):
   
      *) Add Autoconf checks for isnan() and isinf() for cfg_fmt.c
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 devtool.conf
  --- ossp-pkg/cfg/devtool.conf	18 Feb 2005 10:05:35 -0000	1.24
  +++ ossp-pkg/cfg/devtool.conf	3 Oct 2005 07:51:37 -0000	1.25
  @@ -29,8 +29,8 @@
   ##
   
   %autogen
  -    @autogen shtool   2.0.1  "2.0.*" echo fixperm install mkdir tarball version
  -    @autogen libtool  1.5.14 "1.5*"
  +    @autogen shtool   2.0.3  "2.0.*" echo fixperm install mkdir tarball version
  +    @autogen libtool  1.5.20 "1.5*"
       @autogen autoconf 2.59   "2.5[4-9]*"
   
   %autoclean
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 09:54:31 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B6B52752893; Mon,  3 Oct 2005 09:54:31 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ devtool.conf
Message-Id: <20051003075431.B6B52752893@mail.ossp.org>
Date: Mon,  3 Oct 2005 09:54:31 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 09:54:31
  Branch: HEAD                             Handle: 2005100308543100

  Modified files:
    ossp-pkg/cfg            devtool.conf

  Log:
    fix path

  Summary:
    Revision    Changes     Path
    1.26        +1  -1      ossp-pkg/cfg/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 devtool.conf
  --- ossp-pkg/cfg/devtool.conf	3 Oct 2005 07:51:37 -0000	1.25
  +++ ossp-pkg/cfg/devtool.conf	3 Oct 2005 07:54:31 -0000	1.26
  @@ -94,5 +94,5 @@
   %upload
       echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/cfg/"
       V=`./shtool version -lc -dshort cfg_vers.c`
  -    scp cfg-${V}.tar.gz ossp@master.ossp.org:/e/ossp/ftp/pkg/lib/cfg/
  +    scp cfg-${V}.tar.gz ossp@master.ossp.org:/v/ossp/ftp/pkg/lib/cfg/
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 09:58:35 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 0ECAE752893; Mon,  3 Oct 2005 09:58:35 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ ChangeLog devtool.conf
Message-Id: <20051003075835.0ECAE752893@mail.ossp.org>
Date: Mon,  3 Oct 2005 09:58:35 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 09:58:35
  Branch: HEAD                             Handle: 2005100308583400

  Modified files:
    ossp-pkg/l2             ChangeLog devtool.conf

  Log:
    upgrade build environment

  Summary:
    Revision    Changes     Path
    1.28        +6  -0      ossp-pkg/l2/ChangeLog
    1.20        +2  -2      ossp-pkg/l2/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 ChangeLog
  --- ossp-pkg/l2/ChangeLog	18 Feb 2005 09:33:13 -0000	1.27
  +++ ossp-pkg/l2/ChangeLog	3 Oct 2005 07:58:34 -0000	1.28
  @@ -9,6 +9,12 @@
     ChangeLog
     =========
   
  +  Changes between 0.9.10 and 0.9.11 (18-Feb-2005 to 03-Oct-2005)
  +
  +    *) Upgraded build environment to GNU shtool 2.0.3 and
  +       GNU libtool 1.5.20.
  +       [Ralf S. Engelschall <rse@engelschall.com>]
  +
     Changes between 0.9.9 and 0.9.10 (01-Feb-2005 to 18-Feb-2005)
   
       *) Synchronize l2_ut_format.[ch] with OSSP cfg and especially
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 devtool.conf
  --- ossp-pkg/l2/devtool.conf	18 Feb 2005 09:39:25 -0000	1.19
  +++ ossp-pkg/l2/devtool.conf	3 Oct 2005 07:58:34 -0000	1.20
  @@ -42,8 +42,8 @@
       shtool subst -e 's;#include "sa.h";#include "l2_ut_sa.h";' l2_ut_sa.c
   
   %autogen
  -    @autogen shtool   2.0.1  "2.0.*" echo fixperm install mkdir tarball version
  -    @autogen libtool  1.5.10 "1.5*"
  +    @autogen shtool   2.0.3  "2.0.*" echo fixperm install mkdir tarball version
  +    @autogen libtool  1.5.20 "1.5*"
       @autogen autoconf 2.59   "2.5[4-9]*"
   
   %autoclean
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 09:58:49 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 091F57529CA; Mon,  3 Oct 2005 09:58:49 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ README l2_version.c
Message-Id: <20051003075849.091F57529CA@mail.ossp.org>
Date: Mon,  3 Oct 2005 09:58:49 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 09:58:49
  Branch: HEAD                             Handle: 2005100308584800

  Modified files:
    ossp-pkg/l2             README l2_version.c

  Log:
    bump version

  Summary:
    Revision    Changes     Path
    1.22        +1  -1      ossp-pkg/l2/README
    1.19        +9  -9      ossp-pkg/l2/l2_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/README
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 README
  --- ossp-pkg/l2/README	18 Feb 2005 09:33:13 -0000	1.21
  +++ ossp-pkg/l2/README	3 Oct 2005 07:58:48 -0000	1.22
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_|_____|
   
     OSSP l2 -- Flexible Logging
  -  Version 0.9.10 (18-Feb-2005)
  +  Version 0.9.11 (03-Oct-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_version.c
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 l2_version.c
  --- ossp-pkg/l2/l2_version.c	18 Feb 2005 09:33:13 -0000	1.18
  +++ ossp-pkg/l2/l2_version.c	3 Oct 2005 07:58:48 -0000	1.19
  @@ -8,7 +8,7 @@
   #ifndef _L2_VERSION_C_
   #define _L2_VERSION_C_
   
  -#define L2_VERSION 0x00920A
  +#define L2_VERSION 0x00920B
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _L2_VERSION_C_AS_HEADER_
   
   l2_version_t l2_version = {
  -    0x00920A,
  -    "0.9.10",
  -    "0.9.10 (18-Feb-2005)",
  -    "This is OSSP l2, Version 0.9.10 (18-Feb-2005)",
  -    "OSSP l2 0.9.10 (18-Feb-2005)",
  -    "OSSP l2/0.9.10",
  -    "@(#)OSSP l2 0.9.10 (18-Feb-2005)",
  -    "$Id: l2_version.c,v 1.18 2005/02/18 09:33:13 thl Exp $"
  +    0x00920B,
  +    "0.9.11",
  +    "0.9.11 (03-Oct-2005)",
  +    "This is OSSP l2, Version 0.9.11 (03-Oct-2005)",
  +    "OSSP l2 0.9.11 (03-Oct-2005)",
  +    "OSSP l2/0.9.11",
  +    "@(#)OSSP l2 0.9.11 (03-Oct-2005)",
  +    "$Id: l2_version.c,v 1.19 2005/10/03 07:58:48 rse Exp $"
   };
   
   #endif /* _L2_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 10:00:17 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 49C65752893; Mon,  3 Oct 2005 10:00:17 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ ChangeLog l2_ut_sa.c l2_ut_sa.h
Message-Id: <20051003080017.49C65752893@mail.ossp.org>
Date: Mon,  3 Oct 2005 10:00:17 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 10:00:17
  Branch: HEAD                             Handle: 2005100309001600

  Modified files:
    ossp-pkg/l2             ChangeLog l2_ut_sa.c l2_ut_sa.h

  Log:
    Imported OSSP sa 1.2.5

  Summary:
    Revision    Changes     Path
    1.29        +3  -0      ossp-pkg/l2/ChangeLog
    1.28        +11 -9      ossp-pkg/l2/l2_ut_sa.c
    1.25        +8  -8      ossp-pkg/l2/l2_ut_sa.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 ChangeLog
  --- ossp-pkg/l2/ChangeLog	3 Oct 2005 07:58:34 -0000	1.28
  +++ ossp-pkg/l2/ChangeLog	3 Oct 2005 08:00:16 -0000	1.29
  @@ -15,6 +15,9 @@
          GNU libtool 1.5.20.
          [Ralf S. Engelschall <rse@engelschall.com>]
   
  +    *) Imported OSSP sa 1.2.5
  +       [Ralf S. Engelschall <rse@engelschall.com>]
  +
     Changes between 0.9.9 and 0.9.10 (01-Feb-2005 to 18-Feb-2005)
   
       *) Synchronize l2_ut_format.[ch] with OSSP cfg and especially
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_sa.c
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 l2_ut_sa.c
  --- ossp-pkg/l2/l2_ut_sa.c	2 Feb 2005 12:26:44 -0000	1.27
  +++ ossp-pkg/l2/l2_ut_sa.c	3 Oct 2005 08:00:16 -0000	1.28
  @@ -267,14 +267,16 @@
              and for IPv6 inet_pton(3) would exist anyway */
           if (inet_aton(strptr, &in_val) == 0)
               return 0;
  +        memcpy(addrptr, &in_val, sizeof(struct in_addr));
  +        return 1;
   #elif defined(HAVE_INET_ADDR)
           /* at least for IPv4 try to rely on the even older inet_addr(3) */
           memset(&in_val, '\0', sizeof(in_val));
           if ((in_val.s_addr = inet_addr(strptr)) == ((in_addr_t)-1))
               return 0;
  -#endif
           memcpy(addrptr, &in_val, sizeof(struct in_addr));
           return 1;
  +#endif
       }
       errno = EAFNOSUPPORT;
       return 0;
  @@ -732,7 +734,7 @@
   }
   
   /* export address object into URI */
  -sa_rc_t sa_addr_a2u(sa_addr_t *saa, char **uri)
  +sa_rc_t sa_addr_a2u(const sa_addr_t *saa, char **uri)
   {
       char uribuf[1024];
       struct sockaddr_un *un;
  @@ -793,7 +795,7 @@
   }
   
   /* export address object into "struct sockaddr" */
  -sa_rc_t sa_addr_a2s(sa_addr_t *saa, struct sockaddr **sabuf, socklen_t *salen)
  +sa_rc_t sa_addr_a2s(const sa_addr_t *saa, struct sockaddr **sabuf, socklen_t *salen)
   {
       /* argument sanity check(s) */
       if (saa == NULL || sabuf == NULL || salen == 0)
  @@ -808,7 +810,7 @@
       return SA_OK;
   }
   
  -sa_rc_t sa_addr_match(sa_addr_t *saa1, sa_addr_t *saa2, int prefixlen)
  +sa_rc_t sa_addr_match(const sa_addr_t *saa1, const sa_addr_t *saa2, int prefixlen)
   {
       const unsigned char *ucp1, *ucp2;
       unsigned int uc1, uc2, mask;
  @@ -934,7 +936,7 @@
   }
   
   /* set timeouts if timeouts or done in kernel */
  -static sa_rc_t sa_socket_settimeouts(sa_t *sa)
  +static sa_rc_t sa_socket_settimeouts(const sa_t *sa)
   {
       /* stop processing if socket is still not allocated */
       if (sa->fdSocket == -1)
  @@ -1222,7 +1224,7 @@
   
       /* kill underlying socket if type changes */
       if (sa->eType != type)
  -        sa_socket_kill(sa);
  +        (void)sa_socket_kill(sa);
   
       /* set new type */
       sa->eType = type;
  @@ -1421,7 +1423,7 @@
   }
   
   /* bind socket to a local address */
  -sa_rc_t sa_bind(sa_t *sa, sa_addr_t *laddr)
  +sa_rc_t sa_bind(sa_t *sa, const sa_addr_t *laddr)
   {
       sa_rc_t rv;
       struct sockaddr_un *un;
  @@ -1449,7 +1451,7 @@
   }
   
   /* connect socket to a remote address */
  -sa_rc_t sa_connect(sa_t *sa, sa_addr_t *raddr)
  +sa_rc_t sa_connect(sa_t *sa, const sa_addr_t *raddr)
   {
       int flags, n, error;
       fd_set rset, wset;
  @@ -2131,7 +2133,7 @@
   }
   
   /* shutdown a socket connection */
  -sa_rc_t sa_shutdown(sa_t *sa, char *flags)
  +sa_rc_t sa_shutdown(sa_t *sa, const char *flags)
   {
       int how;
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_sa.h
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 l2_ut_sa.h
  --- ossp-pkg/l2/l2_ut_sa.h	2 Feb 2005 12:26:44 -0000	1.24
  +++ ossp-pkg/l2/l2_ut_sa.h	3 Oct 2005 08:00:16 -0000	1.25
  @@ -169,11 +169,11 @@
   extern sa_rc_t sa_addr_destroy (sa_addr_t  *__saa);
   
   /* address operations */
  -extern sa_rc_t sa_addr_u2a     (sa_addr_t  *__saa, const char *__uri, ...);
  -extern sa_rc_t sa_addr_s2a     (sa_addr_t  *__saa, const struct sockaddr *__sabuf, socklen_t __salen);
  -extern sa_rc_t sa_addr_a2u     (sa_addr_t  *__saa, char **__uri);
  -extern sa_rc_t sa_addr_a2s     (sa_addr_t  *__saa, struct sockaddr **__sabuf, socklen_t *__salen);
  -extern sa_rc_t sa_addr_match   (sa_addr_t  *__saa1, sa_addr_t *__saa2, int __prefixlen);
  +extern sa_rc_t sa_addr_u2a     (sa_addr_t       *__saa, const char *__uri, ...);
  +extern sa_rc_t sa_addr_s2a     (sa_addr_t       *__saa, const struct sockaddr *__sabuf, socklen_t __salen);
  +extern sa_rc_t sa_addr_a2u     (const sa_addr_t *__saa, char **__uri);
  +extern sa_rc_t sa_addr_a2s     (const sa_addr_t *__saa, struct sockaddr **__sabuf, socklen_t *__salen);
  +extern sa_rc_t sa_addr_match   (const sa_addr_t *__saa1, const sa_addr_t *__saa2, int __prefixlen);
   
   /* socket object operations */
   extern sa_rc_t sa_create       (sa_t **__sa);
  @@ -187,14 +187,14 @@
   extern sa_rc_t sa_syscall      (sa_t  *__sa, sa_syscall_t __id, void (*__fptr)(void), void *__fctx);
   
   /* socket connection operations */
  -extern sa_rc_t sa_bind         (sa_t  *__sa, sa_addr_t  *__laddr);
  -extern sa_rc_t sa_connect      (sa_t  *__sa, sa_addr_t  *__raddr);
  +extern sa_rc_t sa_bind         (sa_t  *__sa, const sa_addr_t *__laddr);
  +extern sa_rc_t sa_connect      (sa_t  *__sa, const sa_addr_t *__raddr);
   extern sa_rc_t sa_listen       (sa_t  *__sa, int __backlog);
   extern sa_rc_t sa_accept       (sa_t  *__sa, sa_addr_t **__caddr, sa_t **__csa);
   extern sa_rc_t sa_getremote    (sa_t  *__sa, sa_addr_t **__raddr);
   extern sa_rc_t sa_getlocal     (sa_t  *__sa, sa_addr_t **__laddr);
   extern sa_rc_t sa_getfd        (sa_t  *__sa, int *__fd);
  -extern sa_rc_t sa_shutdown     (sa_t  *__sa, char *__flags);
  +extern sa_rc_t sa_shutdown     (sa_t  *__sa, const char *__flags);
   
   /* socket input/output operations (stream communication) */
   extern sa_rc_t sa_read         (sa_t  *__sa, char       *__buf, size_t __buflen, size_t *__bufdone);
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 10:01:29 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 14DF4752893; Mon,  3 Oct 2005 10:01:29 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ l2_version.c
Message-Id: <20051003080129.14DF4752893@mail.ossp.org>
Date: Mon,  3 Oct 2005 10:01:29 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 10:01:29
  Branch: HEAD                             Handle: 2005100309012800

  Modified files:
    ossp-pkg/l2             l2_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.20        +0  -0      ossp-pkg/l2/l2_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_version.c
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 l2_version.c
  --- ossp-pkg/l2/l2_version.c	3 Oct 2005 07:58:48 -0000	1.19
  +++ ossp-pkg/l2/l2_version.c	3 Oct 2005 08:01:28 -0000	1.20
  @@ -39,7 +39,7 @@
       "OSSP l2 0.9.11 (03-Oct-2005)",
       "OSSP l2/0.9.11",
       "@(#)OSSP l2 0.9.11 (03-Oct-2005)",
  -    "$Id: l2_version.c,v 1.19 2005/10/03 07:58:48 rse Exp $"
  +    "$Id: l2_version.c,v 1.20 2005/10/03 08:01:28 rse Exp $"
   };
   
   #endif /* _L2_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 10:02:13 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 7B77D752816; Mon,  3 Oct 2005 10:02:12 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ devtool.conf
Message-Id: <20051003080212.7B77D752816@mail.ossp.org>
Date: Mon,  3 Oct 2005 10:02:12 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 10:02:12
  Branch: HEAD                             Handle: 2005100309021000

  Modified files:
    ossp-pkg/l2             devtool.conf

  Log:
    fix path

  Summary:
    Revision    Changes     Path
    1.21        +1  -1      ossp-pkg/l2/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 devtool.conf
  --- ossp-pkg/l2/devtool.conf	3 Oct 2005 07:58:34 -0000	1.20
  +++ ossp-pkg/l2/devtool.conf	3 Oct 2005 08:02:10 -0000	1.21
  @@ -103,5 +103,5 @@
   %upload
       echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/l2/"
       V=`./shtool version -lc -dshort l2_version.c`
  -    scp l2-${V}.tar.gz ossp@master.ossp.org:/e/ossp/ftp/pkg/lib/l2/
  +    scp l2-${V}.tar.gz ossp@master.ossp.org:/v/ossp/ftp/pkg/lib/l2/
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 10:05:56 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 3229F752893; Mon,  3 Oct 2005 10:05:56 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ ChangeLog l2_ut_pcre.c
Message-Id: <20051003080556.3229F752893@mail.ossp.org>
Date: Mon,  3 Oct 2005 10:05:56 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 10:05:56
  Branch: HEAD                             Handle: 2005100309055500

  Modified files:
    ossp-pkg/l2             ChangeLog l2_ut_pcre.c

  Log:
    Apply PCRE security fix (CAN-2005-2491, partially only)

  Summary:
    Revision    Changes     Path
    1.30        +3  -0      ossp-pkg/l2/ChangeLog
    1.8         +8  -0      ossp-pkg/l2/l2_ut_pcre.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 ChangeLog
  --- ossp-pkg/l2/ChangeLog	3 Oct 2005 08:00:16 -0000	1.29
  +++ ossp-pkg/l2/ChangeLog	3 Oct 2005 08:05:55 -0000	1.30
  @@ -18,6 +18,9 @@
       *) Imported OSSP sa 1.2.5
          [Ralf S. Engelschall <rse@engelschall.com>]
   
  +    *) Apply PCRE security fix (CAN-2005-2491, partially only)
  +       [Ralf S. Engelschall <rse@engelschall.com>]
  +
     Changes between 0.9.9 and 0.9.10 (01-Feb-2005 to 18-Feb-2005)
   
       *) Synchronize l2_ut_format.[ch] with OSSP cfg and especially
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_pcre.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 l2_ut_pcre.c
  --- ossp-pkg/l2/l2_ut_pcre.c	6 Jan 2003 11:41:52 -0000	1.7
  +++ ossp-pkg/l2/l2_ut_pcre.c	3 Oct 2005 08:05:55 -0000	1.8
  @@ -674,6 +674,10 @@
   
   	while ((cd->ctypes[*p] & ctype_digit) != 0)
   		min = min * 10 + *p++ - '0';
  +	if (min < 0 || min > 65535) {
  +	    *errorptr = ERR5;
  +	    return p;
  +	}
   
   	if (*p == '}')
   		max = min;
  @@ -682,6 +686,10 @@
   			max = 0;
   			while ((cd->ctypes[*p] & ctype_digit) != 0)
   				max = max * 10 + *p++ - '0';
  +			if (max < 0 || max > 65535) {
  +			    *errorptr = ERR5;
  +			    return p;
  +			}
   			if (max < min) {
   				*errorptr = ERR4;
   				return p;
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 10:08:12 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id BEA5D752893; Mon,  3 Oct 2005 10:08:12 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ LICENSE Makefile.in README aclocal.m4 configu...
Message-Id: <20051003080812.BEA5D752893@mail.ossp.org>
Date: Mon,  3 Oct 2005 10:08:12 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 10:08:12
  Branch: HEAD                             Handle: 2005100309081100

  Modified files:
    ossp-pkg/l2             LICENSE Makefile.in README aclocal.m4 configure.ac
                            devtool.conf devtool.func l2-config.in
                            l2-config.pod l2.h.in l2.m4 l2.pod l2_ch_buffer.c
                            l2_ch_fd.c l2_ch_file.c l2_ch_filter.c l2_ch_irc.c
                            l2_ch_noop.c l2_ch_null.c l2_ch_pipe.c
                            l2_ch_prefix.c l2_ch_smtp.c l2_ch_socket.c
                            l2_ch_syslog.c l2_channel.c l2_env.c l2_p.h
                            l2_spec.c l2_spec.h l2_spec_parse.y l2_spec_scan.l
                            l2_test.c l2_ut_fmtcb.c l2_ut_format.h
                            l2_ut_level.c l2_ut_param.c l2tool.c l2tool.pod

  Log:
    Adjust copyright messages for new year 2005.

  Summary:
    Revision    Changes     Path
    1.7         +3  -3      ossp-pkg/l2/LICENSE
    1.49        +3  -3      ossp-pkg/l2/Makefile.in
    1.23        +3  -3      ossp-pkg/l2/README
    1.18        +3  -3      ossp-pkg/l2/aclocal.m4
    1.31        +6  -6      ossp-pkg/l2/configure.ac
    1.22        +3  -3      ossp-pkg/l2/devtool.conf
    1.7         +1  -1      ossp-pkg/l2/devtool.func
    1.9         +3  -3      ossp-pkg/l2/l2-config.in
    1.9         +3  -3      ossp-pkg/l2/l2-config.pod
    1.34        +3  -3      ossp-pkg/l2/l2.h.in
    1.8         +3  -3      ossp-pkg/l2/l2.m4
    1.18        +3  -3      ossp-pkg/l2/l2.pod
    1.41        +3  -3      ossp-pkg/l2/l2_ch_buffer.c
    1.19        +3  -3      ossp-pkg/l2/l2_ch_fd.c
    1.33        +3  -3      ossp-pkg/l2/l2_ch_file.c
    1.21        +3  -3      ossp-pkg/l2/l2_ch_filter.c
    1.10        +3  -3      ossp-pkg/l2/l2_ch_irc.c
    1.7         +3  -3      ossp-pkg/l2/l2_ch_noop.c
    1.15        +3  -3      ossp-pkg/l2/l2_ch_null.c
    1.34        +3  -3      ossp-pkg/l2/l2_ch_pipe.c
    1.27        +3  -3      ossp-pkg/l2/l2_ch_prefix.c
    1.13        +3  -3      ossp-pkg/l2/l2_ch_smtp.c
    1.40        +3  -3      ossp-pkg/l2/l2_ch_socket.c
    1.35        +3  -3      ossp-pkg/l2/l2_ch_syslog.c
    1.35        +3  -3      ossp-pkg/l2/l2_channel.c
    1.12        +3  -3      ossp-pkg/l2/l2_env.c
    1.37        +3  -3      ossp-pkg/l2/l2_p.h
    1.12        +3  -3      ossp-pkg/l2/l2_spec.c
    1.6         +3  -3      ossp-pkg/l2/l2_spec.h
    1.13        +3  -3      ossp-pkg/l2/l2_spec_parse.y
    1.16        +3  -3      ossp-pkg/l2/l2_spec_scan.l
    1.56        +3  -3      ossp-pkg/l2/l2_test.c
    1.9         +3  -3      ossp-pkg/l2/l2_ut_fmtcb.c
    1.6         +3  -3      ossp-pkg/l2/l2_ut_format.h
    1.11        +3  -3      ossp-pkg/l2/l2_ut_level.c
    1.13        +3  -3      ossp-pkg/l2/l2_ut_param.c
    1.8         +3  -3      ossp-pkg/l2/l2tool.c
    1.6         +3  -3      ossp-pkg/l2/l2tool.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/LICENSE
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 LICENSE
  --- ossp-pkg/l2/LICENSE	24 Jan 2005 15:03:17 -0000	1.6
  +++ ossp-pkg/l2/LICENSE	3 Oct 2005 08:08:11 -0000	1.7
  @@ -1,9 +1,9 @@
   
     OSSP l2 - Flexible Logging
   
  -  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  -  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
  +  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   
     This file is part of OSSP l2, a flexible logging library which
     can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.48 -r1.49 Makefile.in
  --- ossp-pkg/l2/Makefile.in	24 Jan 2005 15:03:17 -0000	1.48
  +++ ossp-pkg/l2/Makefile.in	3 Oct 2005 08:08:11 -0000	1.49
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP l2 - Flexible Logging
  -##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  -##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of OSSP l2, a flexible logging library which
   ##  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/README
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 README
  --- ossp-pkg/l2/README	3 Oct 2005 07:58:48 -0000	1.22
  +++ ossp-pkg/l2/README	3 Oct 2005 08:08:11 -0000	1.23
  @@ -32,9 +32,9 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  -  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
  +  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   
     This file is part of OSSP l2, a flexible logging library which
     can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 aclocal.m4
  --- ossp-pkg/l2/aclocal.m4	3 Feb 2005 09:40:34 -0000	1.17
  +++ ossp-pkg/l2/aclocal.m4	3 Oct 2005 08:08:11 -0000	1.18
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP l2 - Flexible Logging
  -dnl ##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  -dnl ##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
  +dnl ##  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##
   dnl ##  This file is part of OSSP l2, a flexible logging library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/configure.ac
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 configure.ac
  --- ossp-pkg/l2/configure.ac	3 Feb 2005 09:45:37 -0000	1.30
  +++ ossp-pkg/l2/configure.ac	3 Oct 2005 08:08:11 -0000	1.31
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP l2 - Flexible Logging
  -dnl ##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  -dnl ##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
  +dnl ##  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##
   dnl ##  This file is part of OSSP l2, a flexible logging library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ -33,9 +33,9 @@
   AC_HEADLINE(dnl
   OSSP l2, Flexible Logging, dnl
   L2_VERSION, l2_version.c, dnl
  -[Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -Copyright (c) 2001-2004 Ralf S. Engelschall (rse@engelschall.com)
  -Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>])
  +[Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +Copyright (c) 2001-2005 Ralf S. Engelschall (rse@engelschall.com)
  +Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>])
   AC_PREFIX_DEFAULT(/usr/local)
   AC_PLATFORM(PLATFORM)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 devtool.conf
  --- ossp-pkg/l2/devtool.conf	3 Oct 2005 08:02:10 -0000	1.21
  +++ ossp-pkg/l2/devtool.conf	3 Oct 2005 08:08:11 -0000	1.22
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP l2 - Flexible Logging
  -##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  -##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of OSSP l2, a flexible logging library which
   ##  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/devtool.func
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 devtool.func
  --- ossp-pkg/l2/devtool.func	24 Jan 2005 15:03:17 -0000	1.6
  +++ ossp-pkg/l2/devtool.func	3 Oct 2005 08:08:11 -0000	1.7
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   devtool_require () {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2-config.in
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 l2-config.in
  --- ossp-pkg/l2/l2-config.in	24 Jan 2005 15:03:17 -0000	1.8
  +++ ossp-pkg/l2/l2-config.in	3 Oct 2005 08:08:11 -0000	1.9
  @@ -1,9 +1,9 @@
   #!/bin/sh
   ##
   ##  OSSP l2 - Flexible Logging
  -##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  -##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of OSSP l2, a flexible logging library which
   ##  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2-config.pod
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 l2-config.pod
  --- ossp-pkg/l2/l2-config.pod	24 Jan 2005 15:03:17 -0000	1.8
  +++ ossp-pkg/l2/l2-config.pod	3 Oct 2005 08:08:11 -0000	1.9
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP l2 - Flexible Logging
  -##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  -##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of OSSP l2, a flexible logging library which
   ##  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2.h.in
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 l2.h.in
  --- ossp-pkg/l2/l2.h.in	24 Jan 2005 15:03:17 -0000	1.33
  +++ ossp-pkg/l2/l2.h.in	3 Oct 2005 08:08:11 -0000	1.34
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2.m4
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 l2.m4
  --- ossp-pkg/l2/l2.m4	24 Jan 2005 15:03:17 -0000	1.7
  +++ ossp-pkg/l2/l2.m4	3 Oct 2005 08:08:11 -0000	1.8
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP l2 - Flexible Logging
  -dnl ##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  -dnl ##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
  +dnl ##  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##
   dnl ##  This file is part of OSSP l2, a flexible logging library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2.pod
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 l2.pod
  --- ossp-pkg/l2/l2.pod	24 Jan 2005 15:03:17 -0000	1.17
  +++ ossp-pkg/l2/l2.pod	3 Oct 2005 08:08:11 -0000	1.18
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP l2 - Flexible Logging
  -##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  -##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of OSSP l2, a flexible logging library which
   ##  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_buffer.c
  ============================================================================
  $ cvs diff -u -r1.40 -r1.41 l2_ch_buffer.c
  --- ossp-pkg/l2/l2_ch_buffer.c	3 Feb 2005 09:41:38 -0000	1.40
  +++ ossp-pkg/l2/l2_ch_buffer.c	3 Oct 2005 08:08:11 -0000	1.41
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_fd.c
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 l2_ch_fd.c
  --- ossp-pkg/l2/l2_ch_fd.c	24 Jan 2005 15:03:17 -0000	1.18
  +++ ossp-pkg/l2/l2_ch_fd.c	3 Oct 2005 08:08:11 -0000	1.19
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_file.c
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 l2_ch_file.c
  --- ossp-pkg/l2/l2_ch_file.c	24 Jan 2005 15:03:17 -0000	1.32
  +++ ossp-pkg/l2/l2_ch_file.c	3 Oct 2005 08:08:11 -0000	1.33
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_filter.c
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 l2_ch_filter.c
  --- ossp-pkg/l2/l2_ch_filter.c	24 Jan 2005 15:03:17 -0000	1.20
  +++ ossp-pkg/l2/l2_ch_filter.c	3 Oct 2005 08:08:11 -0000	1.21
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_irc.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 l2_ch_irc.c
  --- ossp-pkg/l2/l2_ch_irc.c	24 Jan 2005 15:03:17 -0000	1.9
  +++ ossp-pkg/l2/l2_ch_irc.c	3 Oct 2005 08:08:11 -0000	1.10
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_noop.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 l2_ch_noop.c
  --- ossp-pkg/l2/l2_ch_noop.c	24 Jan 2005 15:03:17 -0000	1.6
  +++ ossp-pkg/l2/l2_ch_noop.c	3 Oct 2005 08:08:11 -0000	1.7
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_null.c
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 l2_ch_null.c
  --- ossp-pkg/l2/l2_ch_null.c	24 Jan 2005 15:03:17 -0000	1.14
  +++ ossp-pkg/l2/l2_ch_null.c	3 Oct 2005 08:08:11 -0000	1.15
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_pipe.c
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 l2_ch_pipe.c
  --- ossp-pkg/l2/l2_ch_pipe.c	3 Feb 2005 09:41:38 -0000	1.33
  +++ ossp-pkg/l2/l2_ch_pipe.c	3 Oct 2005 08:08:11 -0000	1.34
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_prefix.c
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 l2_ch_prefix.c
  --- ossp-pkg/l2/l2_ch_prefix.c	24 Jan 2005 15:03:17 -0000	1.26
  +++ ossp-pkg/l2/l2_ch_prefix.c	3 Oct 2005 08:08:11 -0000	1.27
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_smtp.c
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 l2_ch_smtp.c
  --- ossp-pkg/l2/l2_ch_smtp.c	24 Jan 2005 15:03:17 -0000	1.12
  +++ ossp-pkg/l2/l2_ch_smtp.c	3 Oct 2005 08:08:11 -0000	1.13
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_socket.c
  ============================================================================
  $ cvs diff -u -r1.39 -r1.40 l2_ch_socket.c
  --- ossp-pkg/l2/l2_ch_socket.c	24 Jan 2005 15:03:17 -0000	1.39
  +++ ossp-pkg/l2/l2_ch_socket.c	3 Oct 2005 08:08:11 -0000	1.40
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_syslog.c
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 l2_ch_syslog.c
  --- ossp-pkg/l2/l2_ch_syslog.c	24 Jan 2005 15:03:17 -0000	1.34
  +++ ossp-pkg/l2/l2_ch_syslog.c	3 Oct 2005 08:08:11 -0000	1.35
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_channel.c
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 l2_channel.c
  --- ossp-pkg/l2/l2_channel.c	24 Jan 2005 15:03:17 -0000	1.34
  +++ ossp-pkg/l2/l2_channel.c	3 Oct 2005 08:08:11 -0000	1.35
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_env.c
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 l2_env.c
  --- ossp-pkg/l2/l2_env.c	24 Jan 2005 15:03:17 -0000	1.11
  +++ ossp-pkg/l2/l2_env.c	3 Oct 2005 08:08:11 -0000	1.12
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_p.h
  ============================================================================
  $ cvs diff -u -r1.36 -r1.37 l2_p.h
  --- ossp-pkg/l2/l2_p.h	24 Jan 2005 15:03:17 -0000	1.36
  +++ ossp-pkg/l2/l2_p.h	3 Oct 2005 08:08:11 -0000	1.37
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_spec.c
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 l2_spec.c
  --- ossp-pkg/l2/l2_spec.c	24 Jan 2005 15:03:17 -0000	1.11
  +++ ossp-pkg/l2/l2_spec.c	3 Oct 2005 08:08:11 -0000	1.12
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_spec.h
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 l2_spec.h
  --- ossp-pkg/l2/l2_spec.h	24 Jan 2005 15:03:18 -0000	1.5
  +++ ossp-pkg/l2/l2_spec.h	3 Oct 2005 08:08:11 -0000	1.6
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_spec_parse.y
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 l2_spec_parse.y
  --- ossp-pkg/l2/l2_spec_parse.y	24 Jan 2005 15:03:18 -0000	1.12
  +++ ossp-pkg/l2/l2_spec_parse.y	3 Oct 2005 08:08:11 -0000	1.13
  @@ -1,9 +1,9 @@
   %{
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_spec_scan.l
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 l2_spec_scan.l
  --- ossp-pkg/l2/l2_spec_scan.l	3 Feb 2005 09:42:36 -0000	1.15
  +++ ossp-pkg/l2/l2_spec_scan.l	3 Oct 2005 08:08:11 -0000	1.16
  @@ -1,9 +1,9 @@
   %{
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_test.c
  ============================================================================
  $ cvs diff -u -r1.55 -r1.56 l2_test.c
  --- ossp-pkg/l2/l2_test.c	24 Jan 2005 15:03:18 -0000	1.55
  +++ ossp-pkg/l2/l2_test.c	3 Oct 2005 08:08:11 -0000	1.56
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_fmtcb.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 l2_ut_fmtcb.c
  --- ossp-pkg/l2/l2_ut_fmtcb.c	24 Jan 2005 15:03:18 -0000	1.8
  +++ ossp-pkg/l2/l2_ut_fmtcb.c	3 Oct 2005 08:08:11 -0000	1.9
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_format.h
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 l2_ut_format.h
  --- ossp-pkg/l2/l2_ut_format.h	24 Jan 2005 15:03:18 -0000	1.5
  +++ ossp-pkg/l2/l2_ut_format.h	3 Oct 2005 08:08:11 -0000	1.6
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_level.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 l2_ut_level.c
  --- ossp-pkg/l2/l2_ut_level.c	24 Jan 2005 15:03:18 -0000	1.10
  +++ ossp-pkg/l2/l2_ut_level.c	3 Oct 2005 08:08:11 -0000	1.11
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_param.c
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 l2_ut_param.c
  --- ossp-pkg/l2/l2_ut_param.c	24 Jan 2005 15:03:18 -0000	1.12
  +++ ossp-pkg/l2/l2_ut_param.c	3 Oct 2005 08:08:11 -0000	1.13
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2tool.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 l2tool.c
  --- ossp-pkg/l2/l2tool.c	3 Feb 2005 09:43:52 -0000	1.7
  +++ ossp-pkg/l2/l2tool.c	3 Oct 2005 08:08:11 -0000	1.8
  @@ -1,8 +1,8 @@
   /*
   **  OSSP l2 - Flexible Logging
  -**  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  -**  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP l2, a flexible logging library which
   **  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2tool.pod
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 l2tool.pod
  --- ossp-pkg/l2/l2tool.pod	24 Jan 2005 15:03:18 -0000	1.5
  +++ ossp-pkg/l2/l2tool.pod	3 Oct 2005 08:08:11 -0000	1.6
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP l2 - Flexible Logging
  -##  Copyright (c) 2001-2004 Cable & Wireless <http://www.cw.com/>
  -##  Copyright (c) 2001-2004 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of OSSP l2, a flexible logging library which
   ##  can be found at http://www.ossp.org/pkg/lib/l2/.
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 10:16:57 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id E8C92752893; Mon,  3 Oct 2005 10:16:56 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ ChangeLog sa.c sa.h sa.pod
Message-Id: <20051003081656.E8C92752893@mail.ossp.org>
Date: Mon,  3 Oct 2005 10:16:56 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 10:16:56
  Branch: HEAD                             Handle: 2005100309165600

  Modified files:
    ossp-pkg/sa             ChangeLog sa.c sa.h sa.pod

  Log:
    Removed SA_SYSCALL_GETHOSTBYNAME because gethostbyname(3) cannot
    be overridden as at is use point (function sa_addr_u2a) the sa_t
    object is not available. Additionally, for IPv6 getaddrinfo(3)
    would have been overridden, too. This fixed compilation on
    platforms without IPv6 APIs.

  Summary:
    Revision    Changes     Path
    1.52        +9  -0      ossp-pkg/sa/ChangeLog
    1.91        +1  -5      ossp-pkg/sa/sa.c
    1.44        +1  -2      ossp-pkg/sa/sa.h
    1.45        +0  -3      ossp-pkg/sa/sa.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.51 -r1.52 ChangeLog
  --- ossp-pkg/sa/ChangeLog	2 Oct 2005 16:44:14 -0000	1.51
  +++ ossp-pkg/sa/ChangeLog	3 Oct 2005 08:16:56 -0000	1.52
  @@ -11,6 +11,15 @@
     This is a list of all changes to OSSP sa.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 1.2.5 and 1.2.6 (02-Oct-2005 to 03-Oct-2005)
  +
  +   o Removed SA_SYSCALL_GETHOSTBYNAME because gethostbyname(3) cannot
  +     be overridden as at is use point (function sa_addr_u2a) the sa_t
  +     object is not available. Additionally, for IPv6 getaddrinfo(3)
  +     would have been overridden, too. This fixed compilation on
  +     platforms without IPv6 APIs.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
     Changes between 1.2.4 and 1.2.5 (29-Jan-2005 to 02-Oct-2005)
   
      o Added pkg-config(1) specification sa.pc
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.c
  ============================================================================
  $ cvs diff -u -r1.90 -r1.91 sa.c
  --- ossp-pkg/sa/sa.c	29 Mar 2005 19:24:29 -0000	1.90
  +++ ossp-pkg/sa/sa.c	3 Oct 2005 08:16:56 -0000	1.91
  @@ -217,7 +217,6 @@
       SA_SC_DECLARE_3(ssize_t,          write,         int, const void *, size_t)
       SA_SC_DECLARE_6(ssize_t,          recvfrom,      int, void *, size_t, int, struct sockaddr *, socklen_t *)
       SA_SC_DECLARE_6(ssize_t,          sendto,        int, const void *, size_t, int, const struct sockaddr *, socklen_t)
  -    SA_SC_DECLARE_1(struct hostent *, gethostbyname, const char *name)
   } sa_syscall_tab_t;
   
   /* socket option information */
  @@ -655,7 +654,7 @@
               sf = AF_INET6;
           }
   #endif
  -        else if ((he = SA_SC_CALL_1(sa, gethostbyname, cpHost)) != NULL) {
  +        else if ((he = gethostbyname(cpHost)) != NULL) {
               if (he->h_addrtype == AF_INET) {
                   sa4.sin_family = AF_INET;
                   sa4.sin_port = htons(nPort);
  @@ -1185,7 +1184,6 @@
       SA_SC_ASSIGN(sa, write,         write,         NULL);
       SA_SC_ASSIGN(sa, recvfrom,      recvfrom,      NULL);
       SA_SC_ASSIGN(sa, sendto,        sendto,        NULL);
  -    SA_SC_ASSIGN(sa, gethostbyname, gethostbyname, NULL);
   
       /* pass object to caller */
       *sap = sa;
  @@ -1415,7 +1413,6 @@
           case SA_SYSCALL_WRITE:         SA_SC_ASSIGN(sa, write,         fptr, fctx); break;
           case SA_SYSCALL_RECVFROM:      SA_SC_ASSIGN(sa, recvfrom,      fptr, fctx); break;
           case SA_SYSCALL_SENDTO:        SA_SC_ASSIGN(sa, sendto,        fptr, fctx); break;
  -        case SA_SYSCALL_GETHOSTBYNAME: SA_SC_ASSIGN(sa, gethostbyname, fptr, fctx); break;
           default: rv = SA_ERR_ARG;
       }
   
  @@ -1659,7 +1656,6 @@
       SA_SC_COPY((*csa), sa, write);
       SA_SC_COPY((*csa), sa, recvfrom);
       SA_SC_COPY((*csa), sa, sendto);
  -    SA_SC_COPY((*csa), sa, gethostbyname);
   
       /* copy-over original timeout values */
       for (i = 0; i < (int)(sizeof(sa->tvTimeout)/sizeof(sa->tvTimeout[0])); i++) {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.h
  ============================================================================
  $ cvs diff -u -r1.43 -r1.44 sa.h
  --- ossp-pkg/sa/sa.h	29 Mar 2005 19:24:29 -0000	1.43
  +++ ossp-pkg/sa/sa.h	3 Oct 2005 08:16:56 -0000	1.44
  @@ -156,8 +156,7 @@
       SA_SYSCALL_READ,
       SA_SYSCALL_WRITE,
       SA_SYSCALL_RECVFROM,
  -    SA_SYSCALL_SENDTO,
  -    SA_SYSCALL_GETHOSTBYNAME
  +    SA_SYSCALL_SENDTO
   } sa_syscall_t;
   
   /* unique library identifier */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.pod
  ============================================================================
  $ cvs diff -u -r1.44 -r1.45 sa.pod
  --- ossp-pkg/sa/sa.pod	24 Jan 2005 15:10:09 -0000	1.44
  +++ ossp-pkg/sa/sa.pod	3 Oct 2005 08:16:56 -0000	1.45
  @@ -524,9 +524,6 @@
   B<SA_SYSCALL_SENDTO>: "C<ssize_t (*)([void *,] int, const void *,
   size_t, int, const struct sockaddr *, socklen_t)>", see sendto(2).
       
  -B<SA_SYSCALL_GETHOSTBYNAME>: "C<struct hostent * (*)([void *,] const
  -char *)>", see gethostbyname(2).
  -
   Example:
   
    ssize_t
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 10:17:21 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id E4824752893; Mon,  3 Oct 2005 10:17:20 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ README VERSION
Message-Id: <20051003081720.E4824752893@mail.ossp.org>
Date: Mon,  3 Oct 2005 10:17:20 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 10:17:20
  Branch: HEAD                             Handle: 2005100309172000

  Modified files:
    ossp-pkg/sa             README VERSION

  Log:
    bump version before release

  Summary:
    Revision    Changes     Path
    1.26        +1  -1      ossp-pkg/sa/README
    1.21        +1  -1      ossp-pkg/sa/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/README
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 README
  --- ossp-pkg/sa/README	2 Oct 2005 16:44:14 -0000	1.25
  +++ ossp-pkg/sa/README	3 Oct 2005 08:17:20 -0000	1.26
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/\__,_|
   
     OSSP sa - Socket Abstraction
  -  Version 1.2.5 (02-Oct-2005)
  +  Version 1.2.6 (03-Oct-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/VERSION
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 VERSION
  --- ossp-pkg/sa/VERSION	2 Oct 2005 16:44:14 -0000	1.20
  +++ ossp-pkg/sa/VERSION	3 Oct 2005 08:17:20 -0000	1.21
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP sa (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP sa, Version 1.2.5 (02-Oct-2005)
  +  This is OSSP sa, Version 1.2.6 (03-Oct-2005)
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 10:20:18 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 72B02752893; Mon,  3 Oct 2005 10:20:18 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ ChangeLog l2_ut_sa.c l2_ut_sa.h
Message-Id: <20051003082018.72B02752893@mail.ossp.org>
Date: Mon,  3 Oct 2005 10:20:18 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 10:20:18
  Branch: HEAD                             Handle: 2005100309201800

  Modified files:
    ossp-pkg/l2             ChangeLog l2_ut_sa.c l2_ut_sa.h

  Log:
    import OSSP sa 1.2.6

  Summary:
    Revision    Changes     Path
    1.31        +1  -1      ossp-pkg/l2/ChangeLog
    1.29        +1  -5      ossp-pkg/l2/l2_ut_sa.c
    1.26        +1  -2      ossp-pkg/l2/l2_ut_sa.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 ChangeLog
  --- ossp-pkg/l2/ChangeLog	3 Oct 2005 08:05:55 -0000	1.30
  +++ ossp-pkg/l2/ChangeLog	3 Oct 2005 08:20:18 -0000	1.31
  @@ -15,7 +15,7 @@
          GNU libtool 1.5.20.
          [Ralf S. Engelschall <rse@engelschall.com>]
   
  -    *) Imported OSSP sa 1.2.5
  +    *) Imported OSSP sa 1.2.6
          [Ralf S. Engelschall <rse@engelschall.com>]
   
       *) Apply PCRE security fix (CAN-2005-2491, partially only)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_sa.c
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 l2_ut_sa.c
  --- ossp-pkg/l2/l2_ut_sa.c	3 Oct 2005 08:00:16 -0000	1.28
  +++ ossp-pkg/l2/l2_ut_sa.c	3 Oct 2005 08:20:18 -0000	1.29
  @@ -217,7 +217,6 @@
       SA_SC_DECLARE_3(ssize_t,          write,         int, const void *, size_t)
       SA_SC_DECLARE_6(ssize_t,          recvfrom,      int, void *, size_t, int, struct sockaddr *, socklen_t *)
       SA_SC_DECLARE_6(ssize_t,          sendto,        int, const void *, size_t, int, const struct sockaddr *, socklen_t)
  -    SA_SC_DECLARE_1(struct hostent *, gethostbyname, const char *name)
   } sa_syscall_tab_t;
   
   /* socket option information */
  @@ -655,7 +654,7 @@
               sf = AF_INET6;
           }
   #endif
  -        else if ((he = SA_SC_CALL_1(sa, gethostbyname, cpHost)) != NULL) {
  +        else if ((he = gethostbyname(cpHost)) != NULL) {
               if (he->h_addrtype == AF_INET) {
                   sa4.sin_family = AF_INET;
                   sa4.sin_port = htons(nPort);
  @@ -1185,7 +1184,6 @@
       SA_SC_ASSIGN(sa, write,         write,         NULL);
       SA_SC_ASSIGN(sa, recvfrom,      recvfrom,      NULL);
       SA_SC_ASSIGN(sa, sendto,        sendto,        NULL);
  -    SA_SC_ASSIGN(sa, gethostbyname, gethostbyname, NULL);
   
       /* pass object to caller */
       *sap = sa;
  @@ -1415,7 +1413,6 @@
           case SA_SYSCALL_WRITE:         SA_SC_ASSIGN(sa, write,         fptr, fctx); break;
           case SA_SYSCALL_RECVFROM:      SA_SC_ASSIGN(sa, recvfrom,      fptr, fctx); break;
           case SA_SYSCALL_SENDTO:        SA_SC_ASSIGN(sa, sendto,        fptr, fctx); break;
  -        case SA_SYSCALL_GETHOSTBYNAME: SA_SC_ASSIGN(sa, gethostbyname, fptr, fctx); break;
           default: rv = SA_ERR_ARG;
       }
   
  @@ -1659,7 +1656,6 @@
       SA_SC_COPY((*csa), sa, write);
       SA_SC_COPY((*csa), sa, recvfrom);
       SA_SC_COPY((*csa), sa, sendto);
  -    SA_SC_COPY((*csa), sa, gethostbyname);
   
       /* copy-over original timeout values */
       for (i = 0; i < (int)(sizeof(sa->tvTimeout)/sizeof(sa->tvTimeout[0])); i++) {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_sa.h
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 l2_ut_sa.h
  --- ossp-pkg/l2/l2_ut_sa.h	3 Oct 2005 08:00:16 -0000	1.25
  +++ ossp-pkg/l2/l2_ut_sa.h	3 Oct 2005 08:20:18 -0000	1.26
  @@ -157,8 +157,7 @@
       SA_SYSCALL_READ,
       SA_SYSCALL_WRITE,
       SA_SYSCALL_RECVFROM,
  -    SA_SYSCALL_SENDTO,
  -    SA_SYSCALL_GETHOSTBYNAME
  +    SA_SYSCALL_SENDTO
   } sa_syscall_t;
   
   /* unique library identifier */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 10:43:04 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 955B8752893; Mon,  3 Oct 2005 10:43:04 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/al/ AUTHORS ChangeLog Makefile.in README aclocal....
Message-Id: <20051003084304.955B8752893@mail.ossp.org>
Date: Mon,  3 Oct 2005 10:43:04 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 10:43:04
  Branch: HEAD                             Handle: 2005100309430301

  Modified files:
    ossp-pkg/al             AUTHORS ChangeLog Makefile.in README aclocal.m4
                            al-config.in al.c al.h al.pod al_test.c
                            configure.ac devtool.conf devtool.func list.h ts.c
                            ts.h

  Log:
    o Upgraded build environment to GNU autoconf 2.59,
      GNU libtool 1.5.20 and GNU shtool 2.0.3
    
    o Provide Autoconf check (AC_CHECK_VA_COPY) for va_copy(d,s) macro
      and fallback implementations and now that we can be sure that
      va_copy() exists for us, use it in var_formatv() and ts.c instead
      of the direct assignments (which are not sufficiently portable).
    
    o Adjusted copyright messages for year 2005.

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/al/AUTHORS
    1.5         +21 -0      ossp-pkg/al/ChangeLog
    1.4         +4  -4      ossp-pkg/al/Makefile.in
    1.6         +4  -4      ossp-pkg/al/README
    1.3         +113 -4     ossp-pkg/al/aclocal.m4
    1.4         +4  -4      ossp-pkg/al/al-config.in
    1.5         +4  -4      ossp-pkg/al/al.c
    1.4         +4  -4      ossp-pkg/al/al.h
    1.5         +6  -6      ossp-pkg/al/al.pod
    1.10        +4  -4      ossp-pkg/al/al_test.c
    1.5         +4  -4      ossp-pkg/al/configure.ac
    1.8         +3  -3      ossp-pkg/al/devtool.conf
    1.2         +1  -1      ossp-pkg/al/devtool.func
    1.3         +4  -4      ossp-pkg/al/list.h
    1.3         +7  -7      ossp-pkg/al/ts.c
    1.2         +3  -3      ossp-pkg/al/ts.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/al/AUTHORS
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 AUTHORS
  --- ossp-pkg/al/AUTHORS	16 Dec 2002 12:24:51 -0000	1.1
  +++ ossp-pkg/al/AUTHORS	3 Oct 2005 08:43:03 -0000	1.2
  @@ -11,5 +11,5 @@
     This is a list of authors who have written
     or edited major parts of the OSSP al sources.
   
  -  Michael van Elst      <mlelstv@dev.de.cw.net>
  +  Michael van Elst      <mlelstv@serpens.de>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/al/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ChangeLog
  --- ossp-pkg/al/ChangeLog	6 Jan 2003 13:49:24 -0000	1.4
  +++ ossp-pkg/al/ChangeLog	3 Oct 2005 08:43:03 -0000	1.5
  @@ -11,13 +11,34 @@
     This is a list of all changes to OSSP al.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 0.9.1 and 0.9.2 (16-Dec-2002 to 02-Oct-2005)
  +
  +   o Upgraded build environment to GNU autoconf 2.59,
  +     GNU libtool 1.5.20 and GNU shtool 2.0.3
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +   o Provide Autoconf check (AC_CHECK_VA_COPY) for va_copy(d,s) macro
  +     and fallback implementations and now that we can be sure that
  +     va_copy() exists for us, use it in var_formatv() and ts.c instead
  +     of the direct assignments (which are not sufficiently portable).
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +   o Adjusted copyright messages for year 2005.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
     Changes between 0.9.0 and 0.9.1 (16-Dec-2002 to 16-Dec-2002)
   
      o Adjusted copyright messages for new year 2003.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
   
      o Fixed ex support in al_test
  +     [Ralf S. Engelschall <rse@engelschall.com>]
   
      o Proper inclusion of autoconf headers
  +     [Ralf S. Engelschall <rse@engelschall.com>]
   
     Initial release 0.9.0 (16-Dec-2002)
  +   
  +   o *GENESIS*
  +     [Michael van Elst <mlelstv@serpens.de>]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/al/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 Makefile.in
  --- ossp-pkg/al/Makefile.in	6 Jan 2003 13:49:24 -0000	1.3
  +++ ossp-pkg/al/Makefile.in	3 Oct 2005 08:43:03 -0000	1.4
  @@ -1,9 +1,9 @@
   ##
   ##  OSSP al - Assembly Line
  -##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -##  Copyright (c) 2002-2003 Michael van Elst <mlelstv@dev.de.cw.net>
  +##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2002-2005 Michael van Elst <mlelstv@serpens.de>
   ##
   ##  This file is part of OSSP al, an abstract datatype of a data buffer
   ##  that can assemble, move and truncate data but avoids actual copying
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/al/README
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 README
  --- ossp-pkg/al/README	6 Jan 2003 13:49:24 -0000	1.5
  +++ ossp-pkg/al/README	3 Oct 2005 08:43:03 -0000	1.6
  @@ -19,10 +19,10 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -  Copyright (c) 2002-2003 Michael van Elst <mlelstv@dev.de.cw.net>
  +  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +  Copyright (c) 2002-2005 Michael van Elst <mlelstv@serpens.de>
   
     This file is part of OSSP al, an abstract data type of a data buffer
     that can assemble, move and truncate data but avoids actual copying.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/al/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 aclocal.m4
  --- ossp-pkg/al/aclocal.m4	6 Jan 2003 13:49:24 -0000	1.2
  +++ ossp-pkg/al/aclocal.m4	3 Oct 2005 08:43:03 -0000	1.3
  @@ -1,9 +1,9 @@
   dnl ##
   dnl ##  al - OSSP Assembly Line
  -dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -dnl ##  Copyright (c) 2002-2003 Michael van Elst <mlelstv@dev.de.cw.net>
  +dnl ##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +dnl ##  Copyright (c) 2002-2005 Michael van Elst <mlelstv@serpens.de>
   dnl ##
   dnl ##  This file is part of OSSP al, an abstract datatype of a data buffer
   dnl ##  that can assemble, move and truncate data but avoids actual copying.
  @@ -227,3 +227,112 @@
   AC_MSG_RESULT([$with_$2])
   ])dnl
   
  +dnl ##
  +dnl ##  Check for C99 va_copy() implementation
  +dnl ##  (and provide fallback implementation if neccessary)
  +dnl ##
  +dnl ##  configure.in:
  +dnl ##    CHECK_VA_COPY
  +dnl ##  foo.c:
  +dnl ##    #include "config.h"
  +dnl ##    [...]
  +dnl ##    va_copy(d,s)
  +dnl ##
  +dnl ##  This check is rather complex: first because we really have to
  +dnl ##  try various possible implementations in sequence and second, we
  +dnl ##  cannot define a macro in config.h with parameters directly.
  +dnl ##
  +
  +dnl #   test program for va_copy() implementation
  +changequote(<<,>>)
  +m4_define(__va_copy_test, <<[
  +#include <stdlib.h>
  +#include <stdarg.h>
  +#include <string.h>
  +#define DO_VA_COPY(d, s) $1
  +void test(char *str, ...)
  +{
  +    va_list ap, ap2;
  +    int i;
  +    va_start(ap, str);
  +    DO_VA_COPY(ap2, ap);
  +    for (i = 1; i <= 9; i++) {
  +        int k = (int)va_arg(ap, int);
  +        if (k != i)
  +            abort();
  +    }
  +    DO_VA_COPY(ap, ap2);
  +    for (i = 1; i <= 9; i++) {
  +        int k = (int)va_arg(ap, int);
  +        if (k != i)
  +            abort();
  +    }
  +    va_end(ap);
  +}
  +int main(int argc, char *argv[])
  +{
  +    test("test", 1, 2, 3, 4, 5, 6, 7, 8, 9);
  +    exit(0);
  +}
  +]>>)
  +changequote([,])
  +
  +dnl #   test driver for va_copy() implementation
  +m4_define(__va_copy_check, [
  +    AH_VERBATIM($1,
  +[/* Predefined possible va_copy() implementation (id: $1) */
  +#define __VA_COPY_USE_$1(d, s) $2])
  +    if test ".$ac_cv_va_copy" = .; then
  +        AC_TRY_RUN(__va_copy_test($2), [ac_cv_va_copy="$1"])
  +    fi
  +])
  +
  +dnl #   Autoconf check for va_copy() implementation checking
  +AC_DEFUN(CHECK_VA_COPY,[
  +  dnl #   provide Autoconf display check message
  +  AC_MSG_CHECKING(for va_copy() function)
  +  dnl #   check for various implementations in priorized sequence   
  +  AC_CACHE_VAL(ac_cv_va_copy, [
  +    ac_cv_va_copy=""
  +    dnl #   1. check for standardized C99 macro
  +    __va_copy_check(C99, [va_copy((d), (s))])
  +    dnl #   2. check for alternative/deprecated GCC macro
  +    __va_copy_check(GCM, [VA_COPY((d), (s))])
  +    dnl #   3. check for internal GCC macro (high-level define)
  +    __va_copy_check(GCH, [__va_copy((d), (s))])
  +    dnl #   4. check for internal GCC macro (built-in function)
  +    __va_copy_check(GCB, [__builtin_va_copy((d), (s))])
  +    dnl #   5. check for assignment approach (assuming va_list is a struct)
  +    __va_copy_check(ASS, [do { (d) = (s); } while (0)])
  +    dnl #   6. check for assignment approach (assuming va_list is a pointer)
  +    __va_copy_check(ASP, [do { *(d) = *(s); } while (0)])
  +    dnl #   7. check for memory copying approach (assuming va_list is a struct)
  +    __va_copy_check(CPS, [memcpy((void *)&(d), (void *)&(s)), sizeof((s))])
  +    dnl #   8. check for memory copying approach (assuming va_list is a pointer)
  +    __va_copy_check(CPP, [memcpy((void *)(d), (void *)(s)), sizeof(*(s))])
  +    if test ".$ac_cv_va_copy" = .; then
  +        AC_ERROR([no working implementation found])
  +    fi
  +  ])
  +  dnl #   optionally activate the fallback implementation
  +  if test ".$ac_cv_va_copy" = ".C99"; then
  +      AC_DEFINE(HAVE_VA_COPY, 1, [Define if va_copy() macro exists (and no fallback implementation is required)])
  +  fi
  +  dnl #   declare which fallback implementation to actually use
  +  AC_DEFINE_UNQUOTED([__VA_COPY_USE], [__VA_COPY_USE_$ac_cv_va_copy],
  +      [Define to id of used va_copy() implementation])
  +  dnl #   provide activation hook for fallback implementation
  +  AH_VERBATIM([__VA_COPY_ACTIVATION],
  +[/* Optional va_copy() implementation activation */
  +#ifndef HAVE_VA_COPY
  +#define va_copy(d, s) __VA_COPY_USE(d, s)
  +#endif
  +])
  +  dnl #   provide Autoconf display result message
  +  if test ".$ac_cv_va_copy" = ".C99"; then
  +      AC_MSG_RESULT([yes])
  +  else
  +      AC_MSG_RESULT([no (using fallback implementation)])
  +  fi
  +])
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/al/al-config.in
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 al-config.in
  --- ossp-pkg/al/al-config.in	6 Jan 2003 13:49:24 -0000	1.3
  +++ ossp-pkg/al/al-config.in	3 Oct 2005 08:43:03 -0000	1.4
  @@ -1,10 +1,10 @@
   #!/bin/sh
   ##
   ##  OSSP al - Assembly Line
  -##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -##  Copyright (c) 2002-2003 Michael van Elst <mlelstv@dev.de.cw.net>
  +##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2002-2005 Michael van Elst <mlelstv@serpens.de>
   ##
   ##  This file is part of OSSP al, an abstract datatype of a data buffer
   ##  that can assemble, move and truncate data but avoids actual copying
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/al/al.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 al.c
  --- ossp-pkg/al/al.c	6 Jan 2003 13:49:24 -0000	1.4
  +++ ossp-pkg/al/al.c	3 Oct 2005 08:43:03 -0000	1.5
  @@ -1,9 +1,9 @@
   /*
   **  OSSP al -- Assembly Line
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 Michael van Elst <mlelstv@dev.de.cw.net>
  +**  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 Michael van Elst <mlelstv@serpens.de>
   **
   **  This file is part of OSSP al, an abstract datatype of a data buffer
   **  that can assemble, move and truncate data but avoids actual copying
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/al/al.h
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 al.h
  --- ossp-pkg/al/al.h	6 Jan 2003 13:49:24 -0000	1.3
  +++ ossp-pkg/al/al.h	3 Oct 2005 08:43:03 -0000	1.4
  @@ -1,9 +1,9 @@
   /*
   **  OSSP al -- Assembly Line
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 Michael van Elst <mlelstv@dev.de.cw.net>
  +**  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 Michael van Elst <mlelstv@serpens.de>
   **
   **  This file is part of OSSP al, an abstract datatype of a data buffer
   **  that can assemble, move and truncate data but avoids actual copying
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/al/al.pod
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 al.pod
  --- ossp-pkg/al/al.pod	6 Jan 2003 13:49:24 -0000	1.4
  +++ ossp-pkg/al/al.pod	3 Oct 2005 08:43:03 -0000	1.5
  @@ -1,9 +1,9 @@
   ##
   ##  OSSP al - Assembly Line
  -##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2003 Michael van Elst <mlelstv@dev.de.cw.net>
  +##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2005 Michael van Elst <mlelstv@serpens.de>
   ##
   ##  This file is part of OSSP al, an abstract datatype of a data buffer
   ##  that can assemble, move and truncate data but avoids actual copying
  @@ -461,14 +461,14 @@
   =head1 HISTORY
   
   B<OSSP al> was invented in October 2002 by Michael van Elst
  -E<lt>mlelstv@dev.de.cw.netE<gt> under contract with Cable & Wireless
  +E<lt>mlelstv@serpens.deE<gt> under contract with Cable & Wireless
   Germany E<lt>http://www.cw.com/deE<gt> for use inside the OSSP project
   E<lt>http://www.ossp.org/E<gt>.
   
   =head1 AUTHORS
   
    Michael van Elst
  - mlelstv@dev.de.cw.net
  + mlelstv@serpens.de
   
   =cut
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/al/al_test.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 al_test.c
  --- ossp-pkg/al/al_test.c	22 Jan 2003 16:37:48 -0000	1.9
  +++ ossp-pkg/al/al_test.c	3 Oct 2005 08:43:04 -0000	1.10
  @@ -1,9 +1,9 @@
   /*
   **  OSSP al - Assembly Line
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -**  Copyright (c) 2002-2003 Michael van Elst <mlelstv@dev.de.cw.net>
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2002-2005 Michael van Elst <mlelstv@serpens.de>
   **
   **  This file is part of OSSP al, an abstract datatype of a data buffer
   **  that can assemble, move and truncate data but avoids actual copying
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/al/configure.ac
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 configure.ac
  --- ossp-pkg/al/configure.ac	6 Jan 2003 13:49:25 -0000	1.4
  +++ ossp-pkg/al/configure.ac	3 Oct 2005 08:43:04 -0000	1.5
  @@ -1,9 +1,9 @@
   dnl ##
   dnl ##  OSSP al - Assembly Line
  -dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -dnl ##  Copyright (c) 2002-2003 Michael van Elst <mlelstv@dev.de.cw.net>
  +dnl ##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +dnl ##  Copyright (c) 2002-2005 Michael van Elst <mlelstv@serpens.de>
   dnl ##
   dnl ##  This file is part of OSSP al, an abstract datatype of a data buffer
   dnl ##  that can assemble, move and truncate data but avoids actual copying
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/al/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 devtool.conf
  --- ossp-pkg/al/devtool.conf	30 Jun 2003 10:36:53 -0000	1.7
  +++ ossp-pkg/al/devtool.conf	3 Oct 2005 08:43:04 -0000	1.8
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.2 "1.6.*" all
  -    @autogen libtool  1.5   "1.5*"
  -    @autogen autoconf 2.57  "2.5[3-9]*"
  +    @autogen shtool   2.0.3  "1.6.*" all
  +    @autogen libtool  1.5.20 "1.5*"
  +    @autogen autoconf 2.59   "2.5[3-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/al/devtool.func
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.func
  --- ossp-pkg/al/devtool.func	16 Dec 2002 12:24:52 -0000	1.1
  +++ ossp-pkg/al/devtool.func	3 Oct 2005 08:43:04 -0000	1.2
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com> 
   ##
   
   devtool_require () {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/al/list.h
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 list.h
  --- ossp-pkg/al/list.h	6 Jan 2003 13:49:25 -0000	1.2
  +++ ossp-pkg/al/list.h	3 Oct 2005 08:43:04 -0000	1.3
  @@ -1,9 +1,9 @@
   /*
   **  OSSP al -- Assembly Line
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2003 Michael van Elst <mlelstv@dev.de.cw.net>
  +**  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 Michael van Elst <mlelstv@serpens.de>
   **
   **  This file is part of OSSP al, an abstract datatype of a data buffer
   **  that can assemble, move and truncate data but avoids actual copying.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/al/ts.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ts.c
  --- ossp-pkg/al/ts.c	6 Feb 2003 13:43:47 -0000	1.2
  +++ ossp-pkg/al/ts.c	3 Oct 2005 08:43:04 -0000	1.3
  @@ -1,11 +1,11 @@
   /*
  -**  TS - OSSP Test Suite Library
  -**  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  OSSP ts - Test Suite Library
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   **
  -**  This file is part of OSSP TS, a small test suite library which
  -**  can be found at http://www.ossp.org/pkg/ts/.
  +**  This file is part of OSSP ts, a small test suite library which
  +**  can be found at http://www.ossp.org/pkg/lib/ts/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  @@ -206,7 +206,7 @@
   
       if (format == NULL)
           return NULL;
  -    ap2 = ap;
  +    va_copy(ap2, ap);
       if ((n = ts_suite_mvxprintf(NULL, 0, format, ap)) == -1)
           return NULL;
       if ((buffer = (char *)malloc(n+1)) == NULL)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/al/ts.h
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ts.h
  --- ossp-pkg/al/ts.h	16 Dec 2002 12:24:52 -0000	1.1
  +++ ossp-pkg/al/ts.h	3 Oct 2005 08:43:04 -0000	1.2
  @@ -1,8 +1,8 @@
   /*
   **  TS - OSSP Test Suite Library
  -**  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP TS, a small test suite library which
   **  can be found at http://www.ossp.org/pkg/ts/.
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 10:43:36 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id AA8A2752893; Mon,  3 Oct 2005 10:43:36 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/al/ devtool.conf
Message-Id: <20051003084336.AA8A2752893@mail.ossp.org>
Date: Mon,  3 Oct 2005 10:43:36 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 10:43:36
  Branch: HEAD                             Handle: 2005100309433600

  Modified files:
    ossp-pkg/al             devtool.conf

  Log:
    fix upload procedure

  Summary:
    Revision    Changes     Path
    1.9         +2  -2      ossp-pkg/al/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/al/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 devtool.conf
  --- ossp-pkg/al/devtool.conf	3 Oct 2005 08:43:04 -0000	1.8
  +++ ossp-pkg/al/devtool.conf	3 Oct 2005 08:43:36 -0000	1.9
  @@ -55,7 +55,7 @@
       gunzip <al-SNAP-${D}.tar.gz | tar tvf - | head -10; echo "[...]"
       gunzip <al-SNAP-${D}.tar.gz | tar tvf - | tail -10
   
  -%release
  +%upload
       echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/al/"
  -    scp al-*.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/al/
  +    scp al-*.tar.gz ossp@master.ossp.org:/v/ossp/ftp/pkg/lib/al/
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 10:43:54 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 61494752893; Mon,  3 Oct 2005 10:43:54 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/al/ README VERSION
Message-Id: <20051003084354.61494752893@mail.ossp.org>
Date: Mon,  3 Oct 2005 10:43:54 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 10:43:54
  Branch: HEAD                             Handle: 2005100309435400

  Modified files:
    ossp-pkg/al             README VERSION

  Log:
    bump version before release

  Summary:
    Revision    Changes     Path
    1.7         +1  -1      ossp-pkg/al/README
    1.3         +1  -1      ossp-pkg/al/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/al/README
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 README
  --- ossp-pkg/al/README	3 Oct 2005 08:43:03 -0000	1.6
  +++ ossp-pkg/al/README	3 Oct 2005 08:43:54 -0000	1.7
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \__,_|_|
                                      
     OSSP al - Assembly Line
  -  Version 0.9.1 (16-Dec-2002)
  +  Version 0.9.2 (03-Oct-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/al/VERSION
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 VERSION
  --- ossp-pkg/al/VERSION	16 Dec 2002 15:14:09 -0000	1.2
  +++ ossp-pkg/al/VERSION	3 Oct 2005 08:43:54 -0000	1.3
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP al (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP al, Version 0.9.1 (16-Dec-2002)
  +  This is OSSP al, Version 0.9.2 (03-Oct-2005)
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 10:50:29 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 30F31752893; Mon,  3 Oct 2005 10:50:29 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/al/ ChangeLog aclocal.m4 configure.ac
Message-Id: <20051003085029.30F31752893@mail.ossp.org>
Date: Mon,  3 Oct 2005 10:50:29 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 10:50:29
  Branch: HEAD                             Handle: 2005100309502800

  Modified files:
    ossp-pkg/al             ChangeLog aclocal.m4 configure.ac

  Log:
    Fixed va_copy detection.

  Summary:
    Revision    Changes     Path
    1.6         +6  -1      ossp-pkg/al/ChangeLog
    1.4         +2  -2      ossp-pkg/al/aclocal.m4
    1.6         +1  -0      ossp-pkg/al/configure.ac
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/al/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ChangeLog
  --- ossp-pkg/al/ChangeLog	3 Oct 2005 08:43:03 -0000	1.5
  +++ ossp-pkg/al/ChangeLog	3 Oct 2005 08:50:28 -0000	1.6
  @@ -11,7 +11,12 @@
     This is a list of all changes to OSSP al.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 0.9.1 and 0.9.2 (16-Dec-2002 to 02-Oct-2005)
  +  Changes between 0.9.2 and 0.9.3 (03-Oct-2002 to 03-Oct-2005)
  +
  +   o Fixed va_copy detection.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +  Changes between 0.9.1 and 0.9.2 (16-Dec-2002 to 03-Oct-2005)
   
      o Upgraded build environment to GNU autoconf 2.59,
        GNU libtool 1.5.20 and GNU shtool 2.0.3
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/al/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 aclocal.m4
  --- ossp-pkg/al/aclocal.m4	3 Oct 2005 08:43:03 -0000	1.3
  +++ ossp-pkg/al/aclocal.m4	3 Oct 2005 08:50:28 -0000	1.4
  @@ -232,7 +232,7 @@
   dnl ##  (and provide fallback implementation if neccessary)
   dnl ##
   dnl ##  configure.in:
  -dnl ##    CHECK_VA_COPY
  +dnl ##    AC_CHECK_VA_COPY
   dnl ##  foo.c:
   dnl ##    #include "config.h"
   dnl ##    [...]
  @@ -288,7 +288,7 @@
   ])
   
   dnl #   Autoconf check for va_copy() implementation checking
  -AC_DEFUN(CHECK_VA_COPY,[
  +AC_DEFUN(AC_CHECK_VA_COPY,[
     dnl #   provide Autoconf display check message
     AC_MSG_CHECKING(for va_copy() function)
     dnl #   check for various implementations in priorized sequence   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/al/configure.ac
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 configure.ac
  --- ossp-pkg/al/configure.ac	3 Oct 2005 08:43:04 -0000	1.5
  +++ ossp-pkg/al/configure.ac	3 Oct 2005 08:50:28 -0000	1.6
  @@ -39,6 +39,7 @@
   AC_PROG_MAKE_SET
   AC_PROG_CC
   AC_CHECK_DEBUGGING
  +AC_CHECK_VA_COPY
   
   sinclude(libtool.m4)
   AC_PROG_LIBTOOL
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 10:50:46 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id A114A752893; Mon,  3 Oct 2005 10:50:46 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/al/ README VERSION
Message-Id: <20051003085046.A114A752893@mail.ossp.org>
Date: Mon,  3 Oct 2005 10:50:46 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 10:50:46
  Branch: HEAD                             Handle: 2005100309504600

  Modified files:
    ossp-pkg/al             README VERSION

  Log:
    bump version before release

  Summary:
    Revision    Changes     Path
    1.8         +1  -1      ossp-pkg/al/README
    1.4         +1  -1      ossp-pkg/al/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/al/README
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 README
  --- ossp-pkg/al/README	3 Oct 2005 08:43:54 -0000	1.7
  +++ ossp-pkg/al/README	3 Oct 2005 08:50:46 -0000	1.8
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \__,_|_|
                                      
     OSSP al - Assembly Line
  -  Version 0.9.2 (03-Oct-2005)
  +  Version 0.9.3 (03-Oct-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/al/VERSION
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 VERSION
  --- ossp-pkg/al/VERSION	3 Oct 2005 08:43:54 -0000	1.3
  +++ ossp-pkg/al/VERSION	3 Oct 2005 08:50:46 -0000	1.4
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP al (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP al, Version 0.9.2 (03-Oct-2005)
  +  This is OSSP al, Version 0.9.3 (03-Oct-2005)
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 11:04:05 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 7F597752893; Mon,  3 Oct 2005 11:04:05 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ ChangeLog aclocal.m4 configure.ac devtool.co...
Message-Id: <20051003090405.7F597752893@mail.ossp.org>
Date: Mon,  3 Oct 2005 11:04:05 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 11:04:05
  Branch: HEAD                             Handle: 2005100310040500

  Modified files:
    ossp-pkg/sio            ChangeLog aclocal.m4 configure.ac devtool.conf
                            ts.c ts.h

  Log:
    flush pending changes

  Summary:
    Revision    Changes     Path
    1.6         +13 -2      ossp-pkg/sio/ChangeLog
    1.3         +109 -0     ossp-pkg/sio/aclocal.m4
    1.5         +1  -0      ossp-pkg/sio/configure.ac
    1.8         +3  -3      ossp-pkg/sio/devtool.conf
    1.3         +7  -7      ossp-pkg/sio/ts.c
    1.2         +3  -3      ossp-pkg/sio/ts.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ChangeLog
  --- ossp-pkg/sio/ChangeLog	11 Feb 2004 08:34:46 -0000	1.5
  +++ ossp-pkg/sio/ChangeLog	3 Oct 2005 09:04:05 -0000	1.6
  @@ -11,9 +11,20 @@
     This is a list of all changes to OSSP sio.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 0.9.2 and 0.9.3 (30-Jun-2003 to xx-Feb-2004)
  +  Changes between 0.9.2 and 0.9.3 (30-Jun-2003 to 03-Oct-2005)
   
  -   ...
  +   *) Provide Autoconf check (AC_CHECK_VA_COPY) for va_copy(d,s) macro
  +      and fallback implementations and now that we can be sure that
  +      va_copy() exists for us, use it in var_formatv() and ts.c instead
  +      of the direct assignments (which are not sufficiently portable).
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +   *) Upgraded build environment to GNU autoconf 2.59,
  +      GNU libtool 1.5.20 and GNU shtool 2.0.3
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +   *) Upgraded to OSSP sa 1.2.6 and OSSP al 0.9.3
  +      [Ralf S. Engelschall <rse@engelschall.com>]
   
      *) Fixed OSSP ex support by internally using a non-conflicting
         namespace for the OSSP ex API.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 aclocal.m4
  --- ossp-pkg/sio/aclocal.m4	6 Jan 2003 19:04:56 -0000	1.2
  +++ ossp-pkg/sio/aclocal.m4	3 Oct 2005 09:04:05 -0000	1.3
  @@ -226,3 +226,112 @@
   AC_MSG_RESULT([$with_$2])
   ])dnl
   
  +dnl ##
  +dnl ##  Check for C99 va_copy() implementation
  +dnl ##  (and provide fallback implementation if neccessary)
  +dnl ##
  +dnl ##  configure.in:
  +dnl ##    AC_CHECK_VA_COPY
  +dnl ##  foo.c:
  +dnl ##    #include "config.h"
  +dnl ##    [...]
  +dnl ##    va_copy(d,s)
  +dnl ##
  +dnl ##  This check is rather complex: first because we really have to
  +dnl ##  try various possible implementations in sequence and second, we
  +dnl ##  cannot define a macro in config.h with parameters directly.
  +dnl ##
  +
  +dnl #   test program for va_copy() implementation
  +changequote(<<,>>)
  +m4_define(__va_copy_test, <<[
  +#include <stdlib.h>
  +#include <stdarg.h>
  +#include <string.h>
  +#define DO_VA_COPY(d, s) $1
  +void test(char *str, ...)
  +{
  +    va_list ap, ap2;
  +    int i;
  +    va_start(ap, str);
  +    DO_VA_COPY(ap2, ap);
  +    for (i = 1; i <= 9; i++) {
  +        int k = (int)va_arg(ap, int);
  +        if (k != i)
  +            abort();
  +    }
  +    DO_VA_COPY(ap, ap2);
  +    for (i = 1; i <= 9; i++) {
  +        int k = (int)va_arg(ap, int);
  +        if (k != i)
  +            abort();
  +    }
  +    va_end(ap);
  +}
  +int main(int argc, char *argv[])
  +{
  +    test("test", 1, 2, 3, 4, 5, 6, 7, 8, 9);
  +    exit(0);
  +}
  +]>>)
  +changequote([,])
  +
  +dnl #   test driver for va_copy() implementation
  +m4_define(__va_copy_check, [
  +    AH_VERBATIM($1,
  +[/* Predefined possible va_copy() implementation (id: $1) */
  +#define __VA_COPY_USE_$1(d, s) $2])
  +    if test ".$ac_cv_va_copy" = .; then
  +        AC_TRY_RUN(__va_copy_test($2), [ac_cv_va_copy="$1"])
  +    fi
  +])
  +
  +dnl #   Autoconf check for va_copy() implementation checking
  +AC_DEFUN(AC_CHECK_VA_COPY,[
  +  dnl #   provide Autoconf display check message
  +  AC_MSG_CHECKING(for va_copy() function)
  +  dnl #   check for various implementations in priorized sequence   
  +  AC_CACHE_VAL(ac_cv_va_copy, [
  +    ac_cv_va_copy=""
  +    dnl #   1. check for standardized C99 macro
  +    __va_copy_check(C99, [va_copy((d), (s))])
  +    dnl #   2. check for alternative/deprecated GCC macro
  +    __va_copy_check(GCM, [VA_COPY((d), (s))])
  +    dnl #   3. check for internal GCC macro (high-level define)
  +    __va_copy_check(GCH, [__va_copy((d), (s))])
  +    dnl #   4. check for internal GCC macro (built-in function)
  +    __va_copy_check(GCB, [__builtin_va_copy((d), (s))])
  +    dnl #   5. check for assignment approach (assuming va_list is a struct)
  +    __va_copy_check(ASS, [do { (d) = (s); } while (0)])
  +    dnl #   6. check for assignment approach (assuming va_list is a pointer)
  +    __va_copy_check(ASP, [do { *(d) = *(s); } while (0)])
  +    dnl #   7. check for memory copying approach (assuming va_list is a struct)
  +    __va_copy_check(CPS, [memcpy((void *)&(d), (void *)&(s)), sizeof((s))])
  +    dnl #   8. check for memory copying approach (assuming va_list is a pointer)
  +    __va_copy_check(CPP, [memcpy((void *)(d), (void *)(s)), sizeof(*(s))])
  +    if test ".$ac_cv_va_copy" = .; then
  +        AC_ERROR([no working implementation found])
  +    fi
  +  ])
  +  dnl #   optionally activate the fallback implementation
  +  if test ".$ac_cv_va_copy" = ".C99"; then
  +      AC_DEFINE(HAVE_VA_COPY, 1, [Define if va_copy() macro exists (and no fallback implementation is required)])
  +  fi
  +  dnl #   declare which fallback implementation to actually use
  +  AC_DEFINE_UNQUOTED([__VA_COPY_USE], [__VA_COPY_USE_$ac_cv_va_copy],
  +      [Define to id of used va_copy() implementation])
  +  dnl #   provide activation hook for fallback implementation
  +  AH_VERBATIM([__VA_COPY_ACTIVATION],
  +[/* Optional va_copy() implementation activation */
  +#ifndef HAVE_VA_COPY
  +#define va_copy(d, s) __VA_COPY_USE(d, s)
  +#endif
  +])
  +  dnl #   provide Autoconf display result message
  +  if test ".$ac_cv_va_copy" = ".C99"; then
  +      AC_MSG_RESULT([yes])
  +  else
  +      AC_MSG_RESULT([no (using fallback implementation)])
  +  fi
  +])
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/configure.ac
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 configure.ac
  --- ossp-pkg/sio/configure.ac	20 Jan 2003 15:34:13 -0000	1.4
  +++ ossp-pkg/sio/configure.ac	3 Oct 2005 09:04:05 -0000	1.5
  @@ -37,6 +37,7 @@
   AC_PROG_MAKE_SET
   AC_PROG_CC
   AC_CHECK_DEBUGGING
  +AC_CHECK_VA_COPY
   
   sinclude(libtool.m4)
   AC_PROG_LIBTOOL
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 devtool.conf
  --- ossp-pkg/sio/devtool.conf	30 Jun 2003 10:36:52 -0000	1.7
  +++ ossp-pkg/sio/devtool.conf	3 Oct 2005 09:04:05 -0000	1.8
  @@ -10,9 +10,9 @@
       done
   
   %autogen
  -    @autogen shtool   1.6.2 "1.6.*" all
  -    @autogen libtool  1.5   "1.5*"
  -    @autogen autoconf 2.57  "2.5[3-9]*"
  +    @autogen shtool   2.0.3  "2.0.*" all
  +    @autogen libtool  1.5.20 "1.5*"
  +    @autogen autoconf 2.59   "2.5[3-9]*"
   
       for name in al sa; do
           echo "===> lib_${name} (devtool autogen)"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/ts.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ts.c
  --- ossp-pkg/sio/ts.c	6 Feb 2003 13:44:23 -0000	1.2
  +++ ossp-pkg/sio/ts.c	3 Oct 2005 09:04:05 -0000	1.3
  @@ -1,11 +1,11 @@
   /*
  -**  TS - OSSP Test Suite Library
  -**  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  OSSP ts - Test Suite Library
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   **
  -**  This file is part of OSSP TS, a small test suite library which
  -**  can be found at http://www.ossp.org/pkg/ts/.
  +**  This file is part of OSSP ts, a small test suite library which
  +**  can be found at http://www.ossp.org/pkg/lib/ts/.
   **
   **  Permission to use, copy, modify, and distribute this software for
   **  any purpose with or without fee is hereby granted, provided that
  @@ -206,7 +206,7 @@
   
       if (format == NULL)
           return NULL;
  -    ap2 = ap;
  +    va_copy(ap2, ap);
       if ((n = ts_suite_mvxprintf(NULL, 0, format, ap)) == -1)
           return NULL;
       if ((buffer = (char *)malloc(n+1)) == NULL)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/ts.h
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ts.h
  --- ossp-pkg/sio/ts.h	18 Dec 2002 15:52:33 -0000	1.1
  +++ ossp-pkg/sio/ts.h	3 Oct 2005 09:04:05 -0000	1.2
  @@ -1,8 +1,8 @@
   /*
   **  TS - OSSP Test Suite Library
  -**  Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2002 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP TS, a small test suite library which
   **  can be found at http://www.ossp.org/pkg/ts/.
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 11:06:14 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id BB9EB752893; Mon,  3 Oct 2005 11:06:13 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ ChangeLog Makefile.in README aclocal.m4 conf...
Message-Id: <20051003090613.BB9EB752893@mail.ossp.org>
Date: Mon,  3 Oct 2005 11:06:13 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 11:06:13
  Branch: HEAD                             Handle: 2005100310061100

  Modified files:
    ossp-pkg/sio            ChangeLog Makefile.in README aclocal.m4
                            configure.ac list.h sio-config.in sio.ac sio.c
                            sio.h sio.pod sio_bio.c sio_buffer.c sio_fd.c
                            sio_hello.c sio_hole.c sio_null.c sio_sa.c
                            sio_sillymux.c sio_sio.c sio_test.c sio_zlib.c

  Log:
    adjust copyright messages

  Summary:
    Revision    Changes     Path
    1.7         +3  -0      ossp-pkg/sio/ChangeLog
    1.5         +3  -3      ossp-pkg/sio/Makefile.in
    1.5         +3  -3      ossp-pkg/sio/README
    1.4         +3  -3      ossp-pkg/sio/aclocal.m4
    1.6         +3  -3      ossp-pkg/sio/configure.ac
    1.8         +3  -3      ossp-pkg/sio/list.h
    1.3         +3  -3      ossp-pkg/sio/sio-config.in
    1.5         +1  -1      ossp-pkg/sio/sio.ac
    1.26        +3  -3      ossp-pkg/sio/sio.c
    1.11        +3  -3      ossp-pkg/sio/sio.h
    1.12        +3  -3      ossp-pkg/sio/sio.pod
    1.14        +3  -3      ossp-pkg/sio/sio_bio.c
    1.10        +3  -3      ossp-pkg/sio/sio_buffer.c
    1.16        +3  -3      ossp-pkg/sio/sio_fd.c
    1.14        +3  -3      ossp-pkg/sio/sio_hello.c
    1.9         +3  -3      ossp-pkg/sio/sio_hole.c
    1.11        +3  -3      ossp-pkg/sio/sio_null.c
    1.11        +3  -3      ossp-pkg/sio/sio_sa.c
    1.5         +3  -3      ossp-pkg/sio/sio_sillymux.c
    1.6         +3  -3      ossp-pkg/sio/sio_sio.c
    1.20        +3  -3      ossp-pkg/sio/sio_test.c
    1.10        +3  -3      ossp-pkg/sio/sio_zlib.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ChangeLog
  --- ossp-pkg/sio/ChangeLog	3 Oct 2005 09:04:05 -0000	1.6
  +++ ossp-pkg/sio/ChangeLog	3 Oct 2005 09:06:11 -0000	1.7
  @@ -26,6 +26,9 @@
      *) Upgraded to OSSP sa 1.2.6 and OSSP al 0.9.3
         [Ralf S. Engelschall <rse@engelschall.com>]
   
  +   *) Adjust copyright messages for year 2005.
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
      *) Fixed OSSP ex support by internally using a non-conflicting
         namespace for the OSSP ex API.
         [Kimura Fuyuki <fuyuki@nigredo.org>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 Makefile.in
  --- ossp-pkg/sio/Makefile.in	20 Jan 2003 19:13:39 -0000	1.4
  +++ ossp-pkg/sio/Makefile.in	3 Oct 2005 09:06:11 -0000	1.5
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP sio - Stream I/O
  -##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of OSSP sio, a layered stream I/O library
   ##  which can be found at http://www.ossp.org/pkg/lib/sio/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/README
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 README
  --- ossp-pkg/sio/README	30 Jun 2003 10:36:52 -0000	1.4
  +++ ossp-pkg/sio/README	3 Oct 2005 09:06:11 -0000	1.5
  @@ -16,9 +16,9 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
   
     This file is part of OSSP sio, a layered stream I/O library
     which can be found at http://www.ossp.org/pkg/lib/sio/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 aclocal.m4
  --- ossp-pkg/sio/aclocal.m4	3 Oct 2005 09:04:05 -0000	1.3
  +++ ossp-pkg/sio/aclocal.m4	3 Oct 2005 09:06:11 -0000	1.4
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP sio - Stream I/O
  -dnl ##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +dnl ##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##
   dnl ##  This file is part of OSSP sio, a layered stream I/O library
   dnl ##  which can be found at http://www.ossp.org/pkg/lib/sio/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/configure.ac
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 configure.ac
  --- ossp-pkg/sio/configure.ac	3 Oct 2005 09:04:05 -0000	1.5
  +++ ossp-pkg/sio/configure.ac	3 Oct 2005 09:06:11 -0000	1.6
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP sio - Stream I/O
  -dnl ##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -dnl ##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +dnl ##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##
   dnl ##  This file is part of OSSP sio, a layered stream I/O library
   dnl ##  which can be found at http://www.ossp.org/pkg/lib/sio/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/list.h
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 list.h
  --- ossp-pkg/sio/list.h	6 Jan 2003 19:04:56 -0000	1.7
  +++ ossp-pkg/sio/list.h	3 Oct 2005 09:06:11 -0000	1.8
  @@ -1,8 +1,8 @@
   /*
   **  OSSP sio - Stream I/O
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP sio, a layered stream I/O library
   **  which can be found at http://www.ossp.org/pkg/lib/sio/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio-config.in
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 sio-config.in
  --- ossp-pkg/sio/sio-config.in	6 Jan 2003 19:04:56 -0000	1.2
  +++ ossp-pkg/sio/sio-config.in	3 Oct 2005 09:06:11 -0000	1.3
  @@ -1,9 +1,9 @@
   #!/bin/sh
   ##
   ##  OSSP sio - Stream I/O
  -##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of OSSP sio, a layered stream I/O library
   ##  which can be found at http://www.ossp.org/pkg/lib/sio/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio.ac
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 sio.ac
  --- ossp-pkg/sio/sio.ac	30 Jun 2003 10:36:52 -0000	1.4
  +++ ossp-pkg/sio/sio.ac	3 Oct 2005 09:06:11 -0000	1.5
  @@ -2,7 +2,7 @@
   dnl ##  OSSP sio - Stream I/O
   dnl ##  Copyright (c) 2002 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##  Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2002 Cable & Wireless <http://www.cw.com/>
   dnl ##  Copyright (c) 2002 Michael van Elst <mlelstv@dev.de.cw.net>
   dnl ##
   dnl ##  This file is part of OSSP sio, an abstract data type of
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio.c
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 sio.c
  --- ossp-pkg/sio/sio.c	11 Feb 2004 08:34:46 -0000	1.25
  +++ ossp-pkg/sio/sio.c	3 Oct 2005 09:06:11 -0000	1.26
  @@ -1,8 +1,8 @@
   /*
   **  OSSP sio - Stream I/O
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP sio, a layered stream I/O library
   **  which can be found at http://www.ossp.org/pkg/lib/sio/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio.h
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 sio.h
  --- ossp-pkg/sio/sio.h	6 Jan 2003 19:04:56 -0000	1.10
  +++ ossp-pkg/sio/sio.h	3 Oct 2005 09:06:11 -0000	1.11
  @@ -1,8 +1,8 @@
   /*
   **  OSSP sio - Stream I/O
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP sio, a layered stream I/O library
   **  which can be found at http://www.ossp.org/pkg/lib/sio/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio.pod
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 sio.pod
  --- ossp-pkg/sio/sio.pod	13 Jan 2003 10:20:04 -0000	1.11
  +++ ossp-pkg/sio/sio.pod	3 Oct 2005 09:06:11 -0000	1.12
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP sio - Stream I/O
  -##  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -##  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of OSSP sio, a layered stream I/O library
   ##  which can be found at http://www.ossp.org/pkg/lib/sio/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_bio.c
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 sio_bio.c
  --- ossp-pkg/sio/sio_bio.c	30 Jun 2003 10:36:52 -0000	1.13
  +++ ossp-pkg/sio/sio_bio.c	3 Oct 2005 09:06:11 -0000	1.14
  @@ -1,8 +1,8 @@
   /*
   **  OSSP sio - Stream I/O
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP sio, a layered stream I/O library
   **  which can be found at http://www.ossp.org/pkg/lib/sio/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_buffer.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 sio_buffer.c
  --- ossp-pkg/sio/sio_buffer.c	6 Jan 2003 19:04:56 -0000	1.9
  +++ ossp-pkg/sio/sio_buffer.c	3 Oct 2005 09:06:11 -0000	1.10
  @@ -1,8 +1,8 @@
   /*
   **  OSSP sio - Stream I/O
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP sio, a layered stream I/O library
   **  which can be found at http://www.ossp.org/pkg/lib/sio/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_fd.c
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 sio_fd.c
  --- ossp-pkg/sio/sio_fd.c	9 Feb 2003 21:39:17 -0000	1.15
  +++ ossp-pkg/sio/sio_fd.c	3 Oct 2005 09:06:11 -0000	1.16
  @@ -1,8 +1,8 @@
   /*
   **  OSSP sio - Stream I/O
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP sio, a layered stream I/O library
   **  which can be found at http://www.ossp.org/pkg/lib/sio/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_hello.c
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 sio_hello.c
  --- ossp-pkg/sio/sio_hello.c	6 Jan 2003 19:04:56 -0000	1.13
  +++ ossp-pkg/sio/sio_hello.c	3 Oct 2005 09:06:11 -0000	1.14
  @@ -1,8 +1,8 @@
   /*
   **  OSSP sio - Stream I/O
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP sio, a layered stream I/O library
   **  which can be found at http://www.ossp.org/pkg/lib/sio/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_hole.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 sio_hole.c
  --- ossp-pkg/sio/sio_hole.c	6 Jan 2003 19:04:56 -0000	1.8
  +++ ossp-pkg/sio/sio_hole.c	3 Oct 2005 09:06:11 -0000	1.9
  @@ -1,8 +1,8 @@
   /*
   **  OSSP sio - Stream I/O
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP sio, a layered stream I/O library
   **  which can be found at http://www.ossp.org/pkg/lib/sio/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_null.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 sio_null.c
  --- ossp-pkg/sio/sio_null.c	6 Jan 2003 19:04:56 -0000	1.10
  +++ ossp-pkg/sio/sio_null.c	3 Oct 2005 09:06:11 -0000	1.11
  @@ -1,8 +1,8 @@
   /*
   **  OSSP sio - Stream I/O
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP sio, a layered stream I/O library
   **  which can be found at http://www.ossp.org/pkg/lib/sio/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_sa.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 sio_sa.c
  --- ossp-pkg/sio/sio_sa.c	30 Jun 2003 10:36:52 -0000	1.10
  +++ ossp-pkg/sio/sio_sa.c	3 Oct 2005 09:06:11 -0000	1.11
  @@ -1,8 +1,8 @@
   /*
   **  OSSP sio - Stream I/O
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP sio, a layered stream I/O library
   **  which can be found at http://www.ossp.org/pkg/lib/sio/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_sillymux.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 sio_sillymux.c
  --- ossp-pkg/sio/sio_sillymux.c	30 Jan 2003 14:35:12 -0000	1.4
  +++ ossp-pkg/sio/sio_sillymux.c	3 Oct 2005 09:06:11 -0000	1.5
  @@ -1,8 +1,8 @@
   /*
   **  OSSP sio - Stream I/O
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP sio, a layered stream I/O library
   **  which can be found at http://www.ossp.org/pkg/lib/sio/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_sio.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 sio_sio.c
  --- ossp-pkg/sio/sio_sio.c	30 Jun 2003 10:36:52 -0000	1.5
  +++ ossp-pkg/sio/sio_sio.c	3 Oct 2005 09:06:11 -0000	1.6
  @@ -1,8 +1,8 @@
   /*
   **  OSSP sio - Stream I/O
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP sio, a layered stream I/O library
   **  which can be found at http://www.ossp.org/pkg/lib/sio/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_test.c
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 sio_test.c
  --- ossp-pkg/sio/sio_test.c	30 Jun 2003 10:36:52 -0000	1.19
  +++ ossp-pkg/sio/sio_test.c	3 Oct 2005 09:06:11 -0000	1.20
  @@ -1,8 +1,8 @@
   /*
   **  OSSP sio - Stream I/O
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP sio, a layered stream I/O library
   **  which can be found at http://www.ossp.org/pkg/lib/sio/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/sio_zlib.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 sio_zlib.c
  --- ossp-pkg/sio/sio_zlib.c	30 Jun 2003 10:36:52 -0000	1.9
  +++ ossp-pkg/sio/sio_zlib.c	3 Oct 2005 09:06:11 -0000	1.10
  @@ -1,8 +1,8 @@
   /*
   **  OSSP sio - Stream I/O
  -**  Copyright (c) 2002-2003 Cable & Wireless Deutschland <http://www.cw.com/de/>
  -**  Copyright (c) 2002-2003 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of OSSP sio, a layered stream I/O library
   **  which can be found at http://www.ossp.org/pkg/lib/sio/.
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 11:06:57 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id CA7C97529C5; Mon,  3 Oct 2005 11:06:56 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ README VERSION
Message-Id: <20051003090656.CA7C97529C5@mail.ossp.org>
Date: Mon,  3 Oct 2005 11:06:56 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 11:06:56
  Branch: HEAD                             Handle: 2005100310065600

  Modified files:
    ossp-pkg/sio            README VERSION

  Log:
    bump version before release

  Summary:
    Revision    Changes     Path
    1.6         +1  -1      ossp-pkg/sio/README
    1.4         +1  -1      ossp-pkg/sio/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/README
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 README
  --- ossp-pkg/sio/README	3 Oct 2005 09:06:11 -0000	1.5
  +++ ossp-pkg/sio/README	3 Oct 2005 09:06:56 -0000	1.6
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/_|\___/
   
     OSSP sio - Stream I/O
  -  Version 0.9.2 (30-Jun-2003)
  +  Version 0.9.3 (03-Oct-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/VERSION
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 VERSION
  --- ossp-pkg/sio/VERSION	30 Jun 2003 10:36:52 -0000	1.3
  +++ ossp-pkg/sio/VERSION	3 Oct 2005 09:06:56 -0000	1.4
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP sio (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP sio, Version 0.9.2 (30-Jun-2003)
  +  This is OSSP sio, Version 0.9.3 (03-Oct-2005)
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 11:07:21 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id E4472752893; Mon,  3 Oct 2005 11:07:20 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sio/ devtool.conf
Message-Id: <20051003090720.E4472752893@mail.ossp.org>
Date: Mon,  3 Oct 2005 11:07:20 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 11:07:20
  Branch: HEAD                             Handle: 2005100310072000

  Modified files:
    ossp-pkg/sio            devtool.conf

  Log:
    fix upload procedure

  Summary:
    Revision    Changes     Path
    1.9         +2  -2      ossp-pkg/sio/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sio/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 devtool.conf
  --- ossp-pkg/sio/devtool.conf	3 Oct 2005 09:04:05 -0000	1.8
  +++ ossp-pkg/sio/devtool.conf	3 Oct 2005 09:07:20 -0000	1.9
  @@ -74,7 +74,7 @@
       gunzip <sio-SNAP-${D}.tar.gz | tar tvf - | head -10; echo "[...]"
       gunzip <sio-SNAP-${D}.tar.gz | tar tvf - | tail -10
   
  -%release
  +%upload
       echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/sio/"
  -    scp sio-*.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/sio/
  +    scp sio-*.tar.gz ossp@master.ossp.org:/v/ossp/ftp/pkg/lib/sio/
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 11:12:43 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 1D9FB752893; Mon,  3 Oct 2005 11:12:43 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ README cfg_vers.c ossp-pkg/cfg/perl/ cfg.pm
Message-Id: <20051003091243.1D9FB752893@mail.ossp.org>
Date: Mon,  3 Oct 2005 11:12:43 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 11:12:43
  Branch: HEAD                             Handle: 2005100310123901

  Modified files:
    ossp-pkg/cfg            README cfg_vers.c
    ossp-pkg/cfg/perl       cfg.pm

  Log:
    bump version before release

  Summary:
    Revision    Changes     Path
    1.18        +1  -1      ossp-pkg/cfg/README
    1.16        +9  -9      ossp-pkg/cfg/cfg_vers.c
    1.15        +1  -1      ossp-pkg/cfg/perl/cfg.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/README
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 README
  --- ossp-pkg/cfg/README	18 Feb 2005 10:33:30 -0000	1.17
  +++ ossp-pkg/cfg/README	3 Oct 2005 09:12:39 -0000	1.18
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \___|_|  \__, |
                                                |___/
     OSSP cfg - Configuration Parsing
  -  Version 0.9.9 (18-Feb-2005)
  +  Version 0.9.10 (03-Oct-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_vers.c
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 cfg_vers.c
  --- ossp-pkg/cfg/cfg_vers.c	18 Feb 2005 10:33:30 -0000	1.15
  +++ ossp-pkg/cfg/cfg_vers.c	3 Oct 2005 09:12:39 -0000	1.16
  @@ -8,7 +8,7 @@
   #ifndef _CFG_VERS_C_
   #define _CFG_VERS_C_
   
  -#define __CFG_VERSION 0x009209
  +#define __CFG_VERSION 0x00920A
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _CFG_VERS_C_AS_HEADER_
   
   __cfg_version_t __cfg_version = {
  -    0x009209,
  -    "0.9.9",
  -    "0.9.9 (18-Feb-2005)",
  -    "This is OSSP cfg, Version 0.9.9 (18-Feb-2005)",
  -    "OSSP cfg 0.9.9 (18-Feb-2005)",
  -    "OSSP cfg/0.9.9",
  -    "@(#)OSSP cfg 0.9.9 (18-Feb-2005)",
  -    "$Id: cfg_vers.c,v 1.15 2005/02/18 10:33:30 rse Exp $"
  +    0x00920A,
  +    "0.9.10",
  +    "0.9.10 (03-Oct-2005)",
  +    "This is OSSP cfg, Version 0.9.10 (03-Oct-2005)",
  +    "OSSP cfg 0.9.10 (03-Oct-2005)",
  +    "OSSP cfg/0.9.10",
  +    "@(#)OSSP cfg 0.9.10 (03-Oct-2005)",
  +    "$Id: cfg_vers.c,v 1.16 2005/10/03 09:12:39 rse Exp $"
   };
   
   #endif /* _CFG_VERS_C_AS_HEADER_ */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/cfg.pm
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 cfg.pm
  --- ossp-pkg/cfg/perl/cfg.pm	18 Feb 2005 10:33:31 -0000	1.14
  +++ ossp-pkg/cfg/perl/cfg.pm	3 Oct 2005 09:12:40 -0000	1.15
  @@ -42,7 +42,7 @@
   ##
   
   #   API version
  -our $VERSION = do { my @v = ('0.9.9' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
  +our $VERSION = do { my @v = ('0.9.10' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
   
   #   API inheritance
   our @ISA = qw(Exporter);
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 11:22:05 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 290A0752893; Mon,  3 Oct 2005 11:22:05 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pcre/ ChangeLog.OSSP devtool.conf pcre.c
Message-Id: <20051003092205.290A0752893@mail.ossp.org>
Date: Mon,  3 Oct 2005 11:22:05 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 11:22:05
  Branch: HEAD                             Handle: 2005100310220400

  Modified files:
    ossp-pkg/pcre           ChangeLog.OSSP devtool.conf pcre.c

  Log:
    - Apply Security Fix (CAN-2005-2491, partially only)
    - Upgraded GNU shtool to 2.0.3 and GNU libtool to 1.5.20

  Summary:
    Revision    Changes     Path
    1.23        +9  -0      ossp-pkg/pcre/ChangeLog.OSSP
    1.10        +2  -2      ossp-pkg/pcre/devtool.conf
    1.9         +11 -0      ossp-pkg/pcre/pcre.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pcre/ChangeLog.OSSP
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 ChangeLog.OSSP
  --- ossp-pkg/pcre/ChangeLog.OSSP	2 Feb 2005 12:25:44 -0000	1.22
  +++ ossp-pkg/pcre/ChangeLog.OSSP	3 Oct 2005 09:22:04 -0000	1.23
  @@ -1,8 +1,17 @@
   
    OSSP ChangeLog for PCRE
    =======================
  +  
  +  Mon Oct  3 11:20:31 CEST 2005
  +
  +  *) Apply Security Fix (CAN-2005-2491, partially only)
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +  *) Upgraded GNU shtool to 2.0.3 and GNU libtool to 1.5.20
  +     [Ralf S. Engelschall <rse@engelschall.com>]
   
     Wed Feb  2 13:23:26 CET 2005
  +
     *) Upgraded GNU shtool to 2.0.1 and GNU libtool to 1.5.10
        [Thomas Lotterer <thomas@lotterer.net>]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pcre/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 devtool.conf
  --- ossp-pkg/pcre/devtool.conf	2 Feb 2005 12:25:44 -0000	1.9
  +++ ossp-pkg/pcre/devtool.conf	3 Oct 2005 09:22:04 -0000	1.10
  @@ -3,8 +3,8 @@
   ##
   
   %autogen
  -    @autogen shtool   2.0.1  "2.0.*" echo fixperm install mkdir tarball version
  -    @autogen libtool  1.5.10 "1.5.*"
  +    @autogen shtool   2.0.3  "2.0.*" echo fixperm install mkdir tarball version
  +    @autogen libtool  1.5.20 "1.5.*"
       @autogen autoconf 2.59   "2.5[4-9]*"
   
   %autoclean
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pcre/pcre.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 pcre.c
  --- ossp-pkg/pcre/pcre.c	7 Jan 2002 15:21:06 -0000	1.8
  +++ ossp-pkg/pcre/pcre.c	3 Oct 2005 09:22:04 -0000	1.9
  @@ -716,12 +716,23 @@
   
   while ((cd->ctypes[*p] & ctype_digit) != 0) min = min * 10 + *p++ - '0';
   
  +if (min < 0 || min > 65535)
  +  {
  +  *errorptr = ERR5;
  +  return p;
  +  }
  +
   if (*p == '}') max = min; else
     {
     if (*(++p) != '}')
       {
       max = 0;
       while((cd->ctypes[*p] & ctype_digit) != 0) max = max * 10 + *p++ - '0';
  +    if (max < 0 || max > 65535)
  +      {
  +      *errorptr = ERR5;
  +      return p;
  +      }
       if (max < min)
         {
         *errorptr = ERR4;
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 11:25:52 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id A8ED1752893; Mon,  3 Oct 2005 11:25:52 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ ChangeLog devtool.conf fsl.c
Message-Id: <20051003092552.A8ED1752893@mail.ossp.org>
Date: Mon,  3 Oct 2005 11:25:52 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 11:25:52
  Branch: HEAD                             Handle: 2005100310255200

  Modified files:
    ossp-pkg/fsl            ChangeLog devtool.conf fsl.c

  Log:
    flush pending changes

  Summary:
    Revision    Changes     Path
    1.39        +13 -1      ossp-pkg/fsl/ChangeLog
    1.28        +4  -4      ossp-pkg/fsl/devtool.conf
    1.69        +3  -0      ossp-pkg/fsl/fsl.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.38 -r1.39 ChangeLog
  --- ossp-pkg/fsl/ChangeLog	18 Feb 2005 19:12:08 -0000	1.38
  +++ ossp-pkg/fsl/ChangeLog	3 Oct 2005 09:25:52 -0000	1.39
  @@ -8,7 +8,18 @@
   
     CHANGELOG
   
  -  Changes between 1.6b2 and 1.6 (18-Feb-2004)
  +  Changes between 1.6.0 and 1.6.1 (18-Feb-2005 to 03-Oct-2005)
  +
  +    *) Apply OpenPKG cruel hack for HP/UX and _XOPEN_SOURCE_EXTENDED
  +       [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +    *) Upgraded build environment to GNU shtool 2.0.3 and GNU libtool 1.5.20.
  +       [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +    *) Use OSSP lib_l2 0.9.11 and lib_cfg 0.9.10.
  +       [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +  Changes between 1.6b2 and 1.6.0 (18-Feb-2005)
   
       *) None. OpenPKG build farm succeeded on ix86-freebsd5.3,
          ix86-freebsd4.11, amd64-freebsd5.3, ia64-freebsd5.3,
  @@ -19,6 +30,7 @@
          ix86-gentoo1.6.9, ix86-freebsd6.0, ix86-fedora3,
          ix86-mandrake10.1; amd64 is known to be broken;
          ix86-freebsd5.3 passed runtime test
  +       [Thomas Lotterer <thomas@lotterer.net>]
   
     Changes between 1.6b1 and 1.6b2 (18-Feb-2005)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 devtool.conf
  --- ossp-pkg/fsl/devtool.conf	18 Feb 2005 10:42:08 -0000	1.27
  +++ ossp-pkg/fsl/devtool.conf	3 Oct 2005 09:25:52 -0000	1.28
  @@ -3,8 +3,8 @@
   ##
   
   %checkout
  -    BRANCH_L2="L2_0_9_10"
  -    BRANCH_CFG="CFG_0_9_9"
  +    BRANCH_L2="L2_0_9_11"
  +    BRANCH_CFG="CFG_0_9_10"
       BRANCH_PCRE=""
       for name in l2 cfg pcre; do
           release=BRANCH_`echo ${name} | tr [a-z] [A-Z]`
  @@ -30,8 +30,8 @@
       done
   
   %autogen
  -    @autogen shtool   2.0.1  "2.0.*" echo fixperm install mkdir tarball version
  -    @autogen libtool  1.5.10 "1.5.*"
  +    @autogen shtool   2.0.3  "2.0.*" echo fixperm install mkdir tarball version
  +    @autogen libtool  1.5.20 "1.5.*"
       @autogen autoconf 2.59   "2.5[4-9]*"
   
       for name in l2 cfg pcre; do
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl.c
  ============================================================================
  $ cvs diff -u -r1.68 -r1.69 fsl.c
  --- ossp-pkg/fsl/fsl.c	2 Feb 2005 12:52:12 -0000	1.68
  +++ ossp-pkg/fsl/fsl.c	3 Oct 2005 09:25:52 -0000	1.69
  @@ -43,6 +43,9 @@
   #include <dirent.h>
   
   /* standard include we re-implement */
  +#ifdef __hpux
  +#define _XOPEN_SOURCE_EXTENDED
  +#endif
   #include <syslog.h>
   
   /* third party (linked in) */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 11:26:15 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id DB45D752893; Mon,  3 Oct 2005 11:26:14 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ devtool.conf
Message-Id: <20051003092614.DB45D752893@mail.ossp.org>
Date: Mon,  3 Oct 2005 11:26:14 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 11:26:14
  Branch: HEAD                             Handle: 2005100310261400

  Modified files:
    ossp-pkg/fsl            devtool.conf

  Log:
    fix path

  Summary:
    Revision    Changes     Path
    1.29        +1  -1      ossp-pkg/fsl/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 devtool.conf
  --- ossp-pkg/fsl/devtool.conf	3 Oct 2005 09:25:52 -0000	1.28
  +++ ossp-pkg/fsl/devtool.conf	3 Oct 2005 09:26:14 -0000	1.29
  @@ -104,5 +104,5 @@
   %upload
       echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/fsl/"
       V=`./shtool version -lc -dshort fsl_version.c`
  -    scp fsl-${V}.tar.gz ossp@master.ossp.org:/e/ossp/ftp/pkg/lib/fsl/
  +    scp fsl-${V}.tar.gz ossp@master.ossp.org:/v/ossp/ftp/pkg/lib/fsl/
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 11:27:55 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 21C2C752893; Mon,  3 Oct 2005 11:27:55 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ README fsl_version.c
Message-Id: <20051003092755.21C2C752893@mail.ossp.org>
Date: Mon,  3 Oct 2005 11:27:55 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 11:27:55
  Branch: HEAD                             Handle: 2005100310275400

  Modified files:
    ossp-pkg/fsl            README fsl_version.c

  Log:
    bump version before release

  Summary:
    Revision    Changes     Path
    1.49        +1  -1      ossp-pkg/fsl/README
    1.36        +9  -9      ossp-pkg/fsl/fsl_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/README
  ============================================================================
  $ cvs diff -u -r1.48 -r1.49 README
  --- ossp-pkg/fsl/README	18 Feb 2005 19:12:08 -0000	1.48
  +++ ossp-pkg/fsl/README	3 Oct 2005 09:27:54 -0000	1.49
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_| |___/_|
    
     OSSP fsl - Faking/Flexible Syslog Library
  -  Version 1.6.0 (18-Feb-2005)
  +  Version 1.6.1 (03-Oct-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl_version.c
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 fsl_version.c
  --- ossp-pkg/fsl/fsl_version.c	18 Feb 2005 19:12:08 -0000	1.35
  +++ ossp-pkg/fsl/fsl_version.c	3 Oct 2005 09:27:54 -0000	1.36
  @@ -8,7 +8,7 @@
   #ifndef _FSL_VERSION_C_
   #define _FSL_VERSION_C_
   
  -#define FSL_VERSION 0x106200
  +#define FSL_VERSION 0x106201
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _FSL_VERSION_C_AS_HEADER_
   
   fsl_version_t fsl_version = {
  -    0x106200,
  -    "1.6.0",
  -    "1.6.0 (18-Feb-2005)",
  -    "This is OSSP fsl, Version 1.6.0 (18-Feb-2005)",
  -    "OSSP fsl 1.6.0 (18-Feb-2005)",
  -    "OSSP fsl/1.6.0",
  -    "@(#)OSSP fsl 1.6.0 (18-Feb-2005)",
  -    "$Id: fsl_version.c,v 1.35 2005/02/18 19:12:08 thl Exp $"
  +    0x106201,
  +    "1.6.1",
  +    "1.6.1 (03-Oct-2005)",
  +    "This is OSSP fsl, Version 1.6.1 (03-Oct-2005)",
  +    "OSSP fsl 1.6.1 (03-Oct-2005)",
  +    "OSSP fsl/1.6.1",
  +    "@(#)OSSP fsl 1.6.1 (03-Oct-2005)",
  +    "$Id: fsl_version.c,v 1.36 2005/10/03 09:27:54 rse Exp $"
   };
   
   #endif /* _FSL_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 11:28:54 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 44051752893; Mon,  3 Oct 2005 11:28:54 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ ChangeLog Makefile.in README aclocal.m4 conf...
Message-Id: <20051003092854.44051752893@mail.ossp.org>
Date: Mon,  3 Oct 2005 11:28:54 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 11:28:54
  Branch: HEAD                             Handle: 2005100310285300

  Modified files:
    ossp-pkg/fsl            ChangeLog Makefile.in README aclocal.m4
                            configure.ac fsl-config.in fsl.ac fsl.c fsl.pod

  Log:
    Adjust copyright messages to include new year 2005.

  Summary:
    Revision    Changes     Path
    1.40        +3  -0      ossp-pkg/fsl/ChangeLog
    1.19        +3  -3      ossp-pkg/fsl/Makefile.in
    1.50        +3  -3      ossp-pkg/fsl/README
    1.5         +3  -3      ossp-pkg/fsl/aclocal.m4
    1.20        +6  -6      ossp-pkg/fsl/configure.ac
    1.6         +3  -3      ossp-pkg/fsl/fsl-config.in
    1.10        +3  -3      ossp-pkg/fsl/fsl.ac
    1.70        +3  -3      ossp-pkg/fsl/fsl.c
    1.34        +3  -3      ossp-pkg/fsl/fsl.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.39 -r1.40 ChangeLog
  --- ossp-pkg/fsl/ChangeLog	3 Oct 2005 09:25:52 -0000	1.39
  +++ ossp-pkg/fsl/ChangeLog	3 Oct 2005 09:28:53 -0000	1.40
  @@ -19,6 +19,9 @@
       *) Use OSSP lib_l2 0.9.11 and lib_cfg 0.9.10.
          [Ralf S. Engelschall <rse@engelschall.com>]
   
  +    *) Adjust copyright messages to include new year 2005.
  +       [Ralf S. Engelschall <rse@engelschall.com>]
  +
     Changes between 1.6b2 and 1.6.0 (18-Feb-2005)
   
       *) None. OpenPKG build farm succeeded on ix86-freebsd5.3,
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 Makefile.in
  --- ossp-pkg/fsl/Makefile.in	17 Feb 2004 09:22:30 -0000	1.18
  +++ ossp-pkg/fsl/Makefile.in	3 Oct 2005 09:28:53 -0000	1.19
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP fsl - Faking/Flexible Syslog Library
  -##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2004 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP fsl, a syslog(3) API faking library which
   ##  can be found at http://www.ossp.org/pkg/lib/fsl/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/README
  ============================================================================
  $ cvs diff -u -r1.49 -r1.50 README
  --- ossp-pkg/fsl/README	3 Oct 2005 09:27:54 -0000	1.49
  +++ ossp-pkg/fsl/README	3 Oct 2005 09:28:53 -0000	1.50
  @@ -20,9 +20,9 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -  Copyright (c) 2002-2004 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
   
     This file is part of OSSP fsl, a syslog(3) API faking library which
     can be found at http://www.ossp.org/pkg/lib/fsl/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 aclocal.m4
  --- ossp-pkg/fsl/aclocal.m4	9 Jan 2004 10:48:26 -0000	1.4
  +++ ossp-pkg/fsl/aclocal.m4	3 Oct 2005 09:28:53 -0000	1.5
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP fsl - Faking/Flexible Syslog Library
  -dnl ##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002-2004 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
   dnl ##
   dnl ##  This file is part of OSSP fsl, a syslog(3) API faking library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/fsl/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/configure.ac
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 configure.ac
  --- ossp-pkg/fsl/configure.ac	22 Apr 2004 09:32:50 -0000	1.19
  +++ ossp-pkg/fsl/configure.ac	3 Oct 2005 09:28:53 -0000	1.20
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP fsl - Faking/Flexible Syslog Library
  -dnl ##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002-2004 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
   dnl ##
   dnl ##  This file is part of OSSP fsl, a syslog(3) API faking library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/fsl/.
  @@ -34,9 +34,9 @@
   dnl #   announce our version
   V=`./shtool version -lc -dlong fsl_version.c`
   ./shtool echo -e "Configuring %BOSSP fsl%b (Faking/Flexible Syslog Library), Version %B${V}%b"
  -echo "Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>"
  -echo "Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>"
  -echo "Copyright (c) 2002-2004 Cable & Wireless Deutschland <http://www.cw.com/de/>"
  +echo "Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>"
  +echo "Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>"
  +echo "Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>"
   
   AC_PROG_MAKE_SET
   AC_PROG_CC
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl-config.in
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 fsl-config.in
  --- ossp-pkg/fsl/fsl-config.in	9 Jan 2004 10:48:27 -0000	1.5
  +++ ossp-pkg/fsl/fsl-config.in	3 Oct 2005 09:28:53 -0000	1.6
  @@ -1,9 +1,9 @@
   #!/bin/sh
   ##
   ##  OSSP fsl - Faking/Flexible Syslog Library
  -##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2004 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP fsl, a syslog(3) API faking library which
   ##  can be found at http://www.ossp.org/pkg/lib/fsl/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl.ac
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 fsl.ac
  --- ossp-pkg/fsl/fsl.ac	9 Jan 2004 10:48:27 -0000	1.9
  +++ ossp-pkg/fsl/fsl.ac	3 Oct 2005 09:28:53 -0000	1.10
  @@ -1,8 +1,8 @@
   dnl ##
   dnl ##  OSSP fsl - Faking/Flexible Syslog Library
  -dnl ##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002-2004 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +dnl ##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
   dnl ##
   dnl ##  This file is part of OSSP fsl, a syslog(3) API faking library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/fsl/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl.c
  ============================================================================
  $ cvs diff -u -r1.69 -r1.70 fsl.c
  --- ossp-pkg/fsl/fsl.c	3 Oct 2005 09:25:52 -0000	1.69
  +++ ossp-pkg/fsl/fsl.c	3 Oct 2005 09:28:53 -0000	1.70
  @@ -1,8 +1,8 @@
   /*
   **  OSSP fsl - Faking/Flexible Syslog Library
  -**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2004 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP fsl, a syslog(3) API faking library which
   **  can be found at http://www.ossp.org/pkg/lib/fsl/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl.pod
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 fsl.pod
  --- ossp-pkg/fsl/fsl.pod	9 Jan 2004 10:48:27 -0000	1.33
  +++ ossp-pkg/fsl/fsl.pod	3 Oct 2005 09:28:53 -0000	1.34
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP fsl - Faking/Flexible Syslog Library
  -##  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2004 Cable & Wireless Deutschland <http://www.cw.com/de/>
  +##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP fsl, a syslog(3) API faking library which
   ##  can be found at http://www.ossp.org/pkg/lib/fsl/.
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 11:39:12 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id D2C647529DA; Mon,  3 Oct 2005 11:39:11 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/al/ index.wml ossp...
Message-Id: <20051003093911.D2C647529DA@mail.ossp.org>
Date: Mon,  3 Oct 2005 11:39:11 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   03-Oct-2005 11:39:11
  Branch: HEAD                             Handle: 2005100310390902

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/al     index.wml
    ossp-web/pkg/lib/cfg    index.wml
    ossp-web/pkg/lib/fsl    index.wml
    ossp-web/pkg/lib/l2     index.wml
    ossp-web/pkg/lib/sa     index.wml
    ossp-web/pkg/lib/sio    index.wml
    ossp-web/pkg/lib/str    index.wml
    ossp-web/pkg/lib/val    index.wml

  Log:
    release a bunch of OSSP libraries

  Summary:
    Revision    Changes     Path
    1.134       +8  -0      ossp-web/new/news.txt
    1.3         +2  -2      ossp-web/pkg/lib/al/index.wml
    1.16        +2  -2      ossp-web/pkg/lib/cfg/index.wml
    1.23        +2  -2      ossp-web/pkg/lib/fsl/index.wml
    1.113       +8  -8      ossp-web/pkg/lib/index.wml
    1.14        +2  -2      ossp-web/pkg/lib/l2/index.wml
    1.24        +2  -2      ossp-web/pkg/lib/sa/index.wml
    1.9         +2  -2      ossp-web/pkg/lib/sio/index.wml
    1.11        +2  -2      ossp-web/pkg/lib/str/index.wml
    1.10        +2  -2      ossp-web/pkg/lib/val/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.133 -r1.134 news.txt
  --- ossp-web/new/news.txt	2 Oct 2005 20:50:07 -0000	1.133
  +++ ossp-web/new/news.txt	3 Oct 2005 09:39:09 -0000	1.134
  @@ -1,3 +1,11 @@
  +03-Oct-2005: Released L<OSSP val> 0.9.4
  +03-Oct-2005: Released L<OSSP str> 0.9.11
  +03-Oct-2005: Released L<OSSP cfg> 0.9.10
  +03-Oct-2005: Released L<OSSP sa> 1.2.6
  +03-Oct-2005: Released L<OSSP l2> 0.9.11
  +03-Oct-2005: Released L<OSSP al> 0.9.3
  +03-Oct-2005: Released L<OSSP sio> 0.9.3
  +03-Oct-2005: Released L<OSSP fsl> 1.6.1
   02-Oct-2005: Released L<OSSP var> 1.1.3
   02-Oct-2005: Released L<OSSP sa> 1.2.5
   02-Oct-2005: Released L<OSSP ex> 1.0.5
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/al/index.wml
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 index.wml
  --- ossp-web/pkg/lib/al/index.wml	16 Dec 2002 15:53:52 -0000	1.2
  +++ ossp-web/pkg/lib/al/index.wml	3 Oct 2005 09:39:09 -0000	1.3
  @@ -27,7 +27,7 @@
   <pkg_status
       name="al" assign="rse"
       stable="none" stable_date="none"
  -    unstable="0.9.1" unstable_date="16-Dec-2002"
  +    unstable="0.9.3" unstable_date="03-Oct-2005"
   	done=95>
   
   <h2>Source</h2>
  @@ -37,7 +37,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/al/
       directory=$(FTP_ROOT_DIR)/pkg/lib/al/
       files="al-*.tar.gz" 
  -	stable="none" unstable="al-0.9.1.tar.gz">
  +	stable="none" unstable="al-0.9.3.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/cfg/index.wml
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 index.wml
  --- ossp-web/pkg/lib/cfg/index.wml	18 Feb 2005 10:37:04 -0000	1.15
  +++ ossp-web/pkg/lib/cfg/index.wml	3 Oct 2005 09:39:09 -0000	1.16
  @@ -36,7 +36,7 @@
   <pkg_status
       name="cfg" assign="rse"
       stable="none"    stable_date="none"
  -    unstable="0.9.9" unstable_date="18-Feb-2005"
  +    unstable="0.9.10" unstable_date="03-Oct-2005"
   	done=95>
   
   <h2>Source</h2>
  @@ -46,7 +46,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/cfg/
       directory=$(FTP_ROOT_DIR)/pkg/lib/cfg/
       files="cfg-*.tar.gz" 
  -	stable="none" unstable="cfg-0.9.9.tar.gz">
  +	stable="none" unstable="cfg-0.9.10.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/fsl/index.wml
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 index.wml
  --- ossp-web/pkg/lib/fsl/index.wml	21 Feb 2005 16:10:10 -0000	1.22
  +++ ossp-web/pkg/lib/fsl/index.wml	3 Oct 2005 09:39:10 -0000	1.23
  @@ -46,7 +46,7 @@
   <pkg_status
       name="fsl" assign="thl"
       genesis="Jul-2002"
  -    stable="1.6.0" stable_date="18-Feb-2005"
  +    stable="1.6.1" stable_date="03-Oct-2005"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -57,7 +57,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/fsl/
       directory=$(FTP_ROOT_DIR)/pkg/lib/fsl/
       files="fsl-*.tar.gz" 
  -	stable="fsl-1.6\\\\\\\.0.tar.gz" unstable="none">
  +	stable="fsl-1.6\\\\\\\.1.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.112 -r1.113 index.wml
  --- ossp-web/pkg/lib/index.wml	2 Oct 2005 20:50:07 -0000	1.112
  +++ ossp-web/pkg/lib/index.wml	3 Oct 2005 09:39:09 -0000	1.113
  @@ -24,10 +24,10 @@
   			done=100 stable=1.0.5 unstable=none>
     <pkg_item name="sa" longname="OSSP sa" type="lib"
               desc="Socket Abstraction"
  -			done=100 stable=1.2.5 unstable=none>
  +			done=100 stable=1.2.6 unstable=none>
     <pkg_item name="fsl" longname="OSSP fsl" type="lib"
               desc="Faked/Flexible Syslog"
  -			done=100 stable=1.6.0 unstable=none>
  +			done=100 stable=1.6.1 unstable=none>
     <pkg_item name="var" longname="OSSP var" type="lib"
               desc="Variable Expansion"
   			done=100 stable=1.1.3 unstable=none>
  @@ -36,25 +36,25 @@
   			done=100 stable=1.3.1 unstable=none>
     <pkg_item name="val" longname="OSSP val" type="lib"
               desc="Value Access"
  -			done=95 stable=none unstable=0.9.3>
  +			done=95 stable=none unstable=0.9.4>
     <pkg_item name="xds" longname="OSSP xds" type="lib"
               desc="Extensible Data Serialization"
   			done=95 stable=none unstable=0.9.2>
     <pkg_item name="str" longname="OSSP str" type="lib"
               desc="String Handling"
  -			done=95 stable=none unstable=0.9.10>
  +			done=95 stable=none unstable=0.9.11>
     <pkg_item name="l2" longname="OSSP l2" type="lib"
               desc="Flexible Logging"
  -			done=95 stable=none unstable=0.9.10>
  +			done=95 stable=none unstable=0.9.11>
     <pkg_item name="al" longname="OSSP al" type="lib"
               desc="Assembly Line"
  -			done=95 stable=none unstable=0.9.1>
  +			done=95 stable=none unstable=0.9.3>
     <pkg_item name="sio" longname="OSSP sio" type="lib"
               desc="Stream I/O"
  -			done=95 stable=none unstable=0.9.2>
  +			done=95 stable=none unstable=0.9.3>
     <pkg_item name="cfg" longname="OSSP cfg" type="lib"
               desc="Configuration Parsing"
  -			done=95 stable=none unstable=0.9.9>
  +			done=95 stable=none unstable=0.9.10>
     <pkg_item name="act" longname="OSSP act" type="lib"
               desc="Abstract Container Types"
   			done=25 stable=none unstable=none>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/l2/index.wml
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 index.wml
  --- ossp-web/pkg/lib/l2/index.wml	18 Feb 2005 10:37:03 -0000	1.13
  +++ ossp-web/pkg/lib/l2/index.wml	3 Oct 2005 09:39:10 -0000	1.14
  @@ -40,7 +40,7 @@
   <pkg_status
       name="l2" assign="rse"
       stable="none"    stable_date="none"
  -    unstable="0.9.10" unstable_date="18-Feb-2005"
  +    unstable="0.9.11" unstable_date="03-Oct-2005"
   	done=95>
   
   <h2>Source</h2>
  @@ -50,7 +50,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/l2/
       directory=$(FTP_ROOT_DIR)/pkg/lib/l2/
       files="l2-*.tar.gz" 
  -	stable="none" unstable="l2-0.9.10.tar.gz">
  +	stable="none" unstable="l2-0.9.11.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/sa/index.wml
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 index.wml
  --- ossp-web/pkg/lib/sa/index.wml	2 Oct 2005 16:47:09 -0000	1.23
  +++ ossp-web/pkg/lib/sa/index.wml	3 Oct 2005 09:39:10 -0000	1.24
  @@ -110,7 +110,7 @@
   
   <pkg_status
       name="sa" assign="rse" genesis="Jan-2001"
  -    stable="1.2.5"    stable_date="02-Oct-2005"
  +    stable="1.2.6"    stable_date="03-Oct-2005"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -121,7 +121,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/sa/
       directory=$(FTP_ROOT_DIR)/pkg/lib/sa/
       files="sa-*.tar.gz" 
  -	stable="sa-1\.2\.5\.tar\.gz" unstable="sa-SNAP.*\.tar.gz">
  +	stable="sa-1\.2\.6\.tar\.gz" unstable="sa-SNAP.*\.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/sio/index.wml
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 index.wml
  --- ossp-web/pkg/lib/sio/index.wml	30 Jun 2003 11:04:34 -0000	1.8
  +++ ossp-web/pkg/lib/sio/index.wml	3 Oct 2005 09:39:11 -0000	1.9
  @@ -26,7 +26,7 @@
   <pkg_status
       name="sio" assign="mlelstv"
       stable="none" stable_date="none"
  -    unstable="0.9.2" unstable_date="30-Jun-2003"
  +    unstable="0.9.3" unstable_date="03-Oct-2005"
   	done=95>
   
   <h2>Source</h2>
  @@ -36,7 +36,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/sio/
       directory=$(FTP_ROOT_DIR)/pkg/lib/sio/
       files="sio-*.tar.gz" 
  -	stable="sio-0\.9\.2\.tar\.gz" unstable="sio-SNAP.*\.tar.gz">
  +	stable="sio-0\.9\.3\.tar\.gz" unstable="sio-SNAP.*\.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/str/index.wml
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 index.wml
  --- ossp-web/pkg/lib/str/index.wml	24 Jan 2005 18:04:13 -0000	1.10
  +++ ossp-web/pkg/lib/str/index.wml	3 Oct 2005 09:39:11 -0000	1.11
  @@ -27,7 +27,7 @@
   <pkg_status
       name="str" assign="rse"
       stable="none"    stable_date="none"
  -    unstable="0.9.10" unstable_date="24-Jan-2005"
  +    unstable="0.9.11" unstable_date="03-Oct-2005"
   	done=95>
   
   <h2>Source</h2>
  @@ -37,7 +37,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/str/
       directory=$(FTP_ROOT_DIR)/pkg/lib/str/
       files="str-*.tar.gz" 
  -	stable="none" unstable="str-0.9.10.tar.gz">
  +	stable="none" unstable="str-0.9.11.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/val/index.wml
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 index.wml
  --- ossp-web/pkg/lib/val/index.wml	12 Sep 2004 18:25:28 -0000	1.9
  +++ ossp-web/pkg/lib/val/index.wml	3 Oct 2005 09:39:11 -0000	1.10
  @@ -34,7 +34,7 @@
   <pkg_status
       name="val" assign="rse"
       stable="none" stable_date="none"
  -    unstable="0.9.3" unstable_date="12-Sep-2004"
  +    unstable="0.9.4" unstable_date="03-Oct-2005"
   	done=100>
   
   <h2>Source</h2>
  @@ -44,7 +44,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/val/
       directory=$(FTP_ROOT_DIR)/pkg/lib/val/
       files="val-*.tar.gz" 
  -	stable="none" unstable="val-0.9.3.tar.gz">
  +	stable="none" unstable="val-0.9.4.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 12:33:50 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id D196D752893; Mon,  3 Oct 2005 12:33:49 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/svs/ ChangeLog devtool.conf svs.sh
Message-Id: <20051003103349.D196D752893@mail.ossp.org>
Date: Mon,  3 Oct 2005 12:33:49 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 12:33:49
  Branch: HEAD                             Handle: 2005100311334800

  Modified files:
    ossp-pkg/svs            ChangeLog devtool.conf svs.sh

  Log:
    - Try diff(3) with options -U3, -u, -C3 and none (in this order)
      to be more platform neutral.
    - Upgraded to GNU shtool 2.0.3

  Summary:
    Revision    Changes     Path
    1.8         +9  -0      ossp-pkg/svs/ChangeLog
    1.3         +2  -2      ossp-pkg/svs/devtool.conf
    1.9         +13 -3      ossp-pkg/svs/svs.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 ChangeLog
  --- ossp-pkg/svs/ChangeLog	18 Aug 2005 07:46:14 -0000	1.7
  +++ ossp-pkg/svs/ChangeLog	3 Oct 2005 10:33:48 -0000	1.8
  @@ -8,6 +8,15 @@
   
     ChangeLog
   
  +  Changes between 1.0.3 and 1.0.4 (18-Aug-2005 to 29-Sep-2005):
  +
  +    *) Try diff(3) with options -U3, -u, -C3 and none (in this order)
  +       to be more platform neutral.
  +       [Ralf S. Engelschall]
  +
  +    *) Upgraded to GNU shtool 2.0.3
  +       [Ralf S. Engelschall]
  +
     Changes between 1.0.2 and 1.0.3 (06-Feb-2005 to 18-Aug-2005):
   
       *) Do not show a file as both modified and conflicting if both
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.conf
  --- ossp-pkg/svs/devtool.conf	14 Dec 2004 19:20:58 -0000	1.2
  +++ ossp-pkg/svs/devtool.conf	3 Oct 2005 10:33:48 -0000	1.3
  @@ -4,7 +4,7 @@
   
   %autogen
       @autogen autoconf 2.59 "2.5*"
  -    @autogen shtool 2.0.1  "2.0.*" all
  +    @autogen shtool 2.0.3  "2.0.*" all
   
   %autoclean
       @autoclean autoconf
  @@ -42,5 +42,5 @@
   %upload
       echo "+++ copying to ftp://ftp.ossp.org/pkg/tool/svs/"
       V=`./shtool version -ltxt -dshort VERSION`
  -    scp svs-${V}.tar.gz master.ossp.org:/e/ossp/ftp/pkg/tool/svs/
  +    scp svs-${V}.tar.gz ossp@master.ossp.org:/v/ossp/ftp/pkg/tool/svs/
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/svs.sh
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 svs.sh
  --- ossp-pkg/svs/svs.sh	18 Aug 2005 07:46:14 -0000	1.8
  +++ ossp-pkg/svs/svs.sh	3 Oct 2005 10:33:48 -0000	1.9
  @@ -117,18 +117,28 @@
               if [ ! -f $edit ]; then
                   #   special case: removed file
                   echo "Index: $edit"
  -                diff -u3 $orig /dev/null | sed -e "1s/^--- $orig/--- $edit/"
  +                ( diff -U3 $orig /dev/null 2>/dev/null ||\
  +                  diff -u  $orig /dev/null 2>/dev/null ||\
  +                  diff -C3 $orig /dev/null 2>/dev/null ||\
  +                  diff     $orig /dev/null
  +                ) | sed -e "1s/^--- $orig/--- $edit/"
               elif [ ! -r $orig ] && [ ! -s $orig ]; then
                   #   special case: new file
                   echo "Index: $edit"
  -                diff -u3 /dev/null $edit
  +                diff -U3 /dev/null $edit 2>/dev/null ||\
  +                diff -u  /dev/null $edit 2>/dev/null ||\
  +                diff -C3 /dev/null $edit 2>/dev/null ||\
  +                diff     /dev/null $edit
               else
                   #   regular case: edited file
                   if cmp $orig $edit >/dev/null 2>&1; then
                       :
                   else
                       echo "Index: $edit"
  -                    diff -u3 $orig $edit
  +                    diff -U3 $orig $edit 2>/dev/null ||\
  +                    diff -u  $orig $edit 2>/dev/null ||\
  +                    diff -C3 $orig $edit 2>/dev/null ||\
  +                    diff     $orig $edit
                   fi
               fi
           done
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 12:34:24 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 0A0BF752893; Mon,  3 Oct 2005 12:34:24 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/svs/ README VERSION
Message-Id: <20051003103424.0A0BF752893@mail.ossp.org>
Date: Mon,  3 Oct 2005 12:34:24 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 12:34:24
  Branch: HEAD                             Handle: 2005100311342300

  Modified files:
    ossp-pkg/svs            README VERSION

  Log:
    bump version before release

  Summary:
    Revision    Changes     Path
    1.6         +1  -1      ossp-pkg/svs/README
    1.5         +1  -1      ossp-pkg/svs/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/README
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 README
  --- ossp-pkg/svs/README	18 Aug 2005 07:48:31 -0000	1.5
  +++ ossp-pkg/svs/README	3 Oct 2005 10:34:23 -0000	1.6
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/ \_/ |___/
   
     OSSP svs - Stupid/Silly/Simple Versioning System
  -  Version 1.0.3 (18-Aug-2005)
  +  Version 1.0.4 (03-Oct-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/VERSION
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 VERSION
  --- ossp-pkg/svs/VERSION	18 Aug 2005 07:48:31 -0000	1.4
  +++ ossp-pkg/svs/VERSION	3 Oct 2005 10:34:23 -0000	1.5
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP svs (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP svs, Version 1.0.3 (18-Aug-2005)
  +  This is OSSP svs, Version 1.0.4 (03-Oct-2005)
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 12:51:22 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 37672752893; Mon,  3 Oct 2005 12:51:22 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ devtool.conf ossp-pkg/popt/ devtool.co...
Message-Id: <20051003105122.37672752893@mail.ossp.org>
Date: Mon,  3 Oct 2005 12:51:22 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 12:51:22
  Branch: HEAD                             Handle: 2005100311512101

  Modified files:
    ossp-pkg/lmtp2nntp      devtool.conf
    ossp-pkg/popt           devtool.conf
    ossp-pkg/tai            devtool.conf

  Log:
    upgrade build environment

  Summary:
    Revision    Changes     Path
    1.21        +7  -7      ossp-pkg/lmtp2nntp/devtool.conf
    1.6         +3  -3      ossp-pkg/popt/devtool.conf
    1.5         +3  -3      ossp-pkg/tai/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 devtool.conf
  --- ossp-pkg/lmtp2nntp/devtool.conf	27 Jun 2004 19:24:09 -0000	1.20
  +++ ossp-pkg/lmtp2nntp/devtool.conf	3 Oct 2005 10:51:21 -0000	1.21
  @@ -3,12 +3,12 @@
   ##
   
   %checkout
  -    BRANCH_EX="EX_1_0_4"
  -    BRANCH_STR="STR_0_9_9"
  -    BRANCH_L2="L2_0_9_8"
  -    BRANCH_SA="SA_1_2_2"
  -    BRANCH_VAR="VAR_1_1_0"
  -    BRANCH_VAL="VAL_0_9_2"
  +    BRANCH_EX="EX_1_0_5"
  +    BRANCH_STR="STR_0_9_11"
  +    BRANCH_L2="L2_0_9_11"
  +    BRANCH_SA="SA_1_2_6"
  +    BRANCH_VAR="VAR_1_1_3"
  +    BRANCH_VAL="VAL_0_9_4"
       BRANCH_POPT=""
       BRANCH_PCRE=""
       BRANCH_TAI=""
  @@ -36,7 +36,7 @@
       done
   
   %autogen
  -    @autogen shtool   1.6.2 "1.6.*" all
  +    @autogen shtool   2.0.3 "2.0.*" all
       @autogen autoconf 2.59  "2.5[4-9]*"
   
       for name in ex str l2 sa var val popt pcre tai; do
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/popt/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 devtool.conf
  --- ossp-pkg/popt/devtool.conf	19 Mar 2004 14:55:48 -0000	1.5
  +++ ossp-pkg/popt/devtool.conf	3 Oct 2005 10:51:21 -0000	1.6
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.2 "1.6.*" all
  -    @autogen libtool  1.5.2 "1.5*"
  -    @autogen autoconf 2.59  "2.5[4-9]*"
  +    @autogen shtool   2.0.3  "2.0.*" all
  +    @autogen libtool  1.5.20 "1.5*"
  +    @autogen autoconf 2.59   "2.5[4-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/tai/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 devtool.conf
  --- ossp-pkg/tai/devtool.conf	19 Mar 2004 14:55:51 -0000	1.4
  +++ ossp-pkg/tai/devtool.conf	3 Oct 2005 10:51:22 -0000	1.5
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.2 "1.6.*" all
  -    @autogen libtool  1.5.2 "1.5*"
  -    @autogen autoconf 2.59  "2.5[4-9]*"
  +    @autogen shtool   2.0.3  "2.0.*" all
  +    @autogen libtool  1.5.20 "1.5*"
  +    @autogen autoconf 2.59   "2.5[4-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 13:32:22 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 33747752893; Mon,  3 Oct 2005 13:32:22 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ devtool.conf
Message-Id: <20051003113222.33747752893@mail.ossp.org>
Date: Mon,  3 Oct 2005 13:32:22 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 13:32:21
  Branch: HEAD                             Handle: 2005100312322100

  Modified files:
    ossp-pkg/lmtp2nntp      devtool.conf

  Log:
    use old TAI lib

  Summary:
    Revision    Changes     Path
    1.22        +1  -1      ossp-pkg/lmtp2nntp/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 devtool.conf
  --- ossp-pkg/lmtp2nntp/devtool.conf	3 Oct 2005 10:51:21 -0000	1.21
  +++ ossp-pkg/lmtp2nntp/devtool.conf	3 Oct 2005 11:32:21 -0000	1.22
  @@ -11,7 +11,7 @@
       BRANCH_VAL="VAL_0_9_4"
       BRANCH_POPT=""
       BRANCH_PCRE=""
  -    BRANCH_TAI=""
  +    BRANCH_TAI="TAI_0_0_0"
       for name in ex str l2 sa var val popt pcre tai; do
           release=BRANCH_`echo ${name} | tr [a-z] [A-Z]`
           release=`eval echo \\$${release}`
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 13:33:54 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 7150A752893; Mon,  3 Oct 2005 13:33:54 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ README lmtp2nntp_version.c
Message-Id: <20051003113354.7150A752893@mail.ossp.org>
Date: Mon,  3 Oct 2005 13:33:54 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 13:33:54
  Branch: HEAD                             Handle: 2005100312335400

  Modified files:
    ossp-pkg/lmtp2nntp      README lmtp2nntp_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.43        +1  -1      ossp-pkg/lmtp2nntp/README
    1.25        +9  -9      ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/README
  ============================================================================
  $ cvs diff -u -r1.42 -r1.43 README
  --- ossp-pkg/lmtp2nntp/README	2 Jul 2004 12:44:36 -0000	1.42
  +++ ossp-pkg/lmtp2nntp/README	3 Oct 2005 11:33:54 -0000	1.43
  @@ -5,7 +5,7 @@
     |_|_|_| \___/|____/____/|_|    |_|_||_||_|\__| .__/____|_||_|_||_|\__| .__/
                                                  |_|                     |_|
     OSSP lmtp2nntp - Mail to News Gateway
  -  Version 1.3.0 (02-Jul-2004)
  +  Version 1.4.0 (03-Oct-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 lmtp2nntp_version.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	2 Jul 2004 12:44:36 -0000	1.24
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	3 Oct 2005 11:33:54 -0000	1.25
  @@ -8,7 +8,7 @@
   #ifndef _LMTP2NNTP_VERSION_C_
   #define _LMTP2NNTP_VERSION_C_
   
  -#define LMTP2NNTP_VERSION 0x103200
  +#define LMTP2NNTP_VERSION 0x104200
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _LMTP2NNTP_VERSION_C_AS_HEADER_
   
   lmtp2nntp_version_t lmtp2nntp_version = {
  -    0x103200,
  -    "1.3.0",
  -    "1.3.0 (02-Jul-2004)",
  -    "This is OSSP lmtp2nntp, Version 1.3.0 (02-Jul-2004)",
  -    "OSSP lmtp2nntp 1.3.0 (02-Jul-2004)",
  -    "OSSP lmtp2nntp/1.3.0",
  -    "@(#)OSSP lmtp2nntp 1.3.0 (02-Jul-2004)",
  -    "$Id: OSSP lmtp2nntp 1.3.0 (02-Jul-2004) $"
  +    0x104200,
  +    "1.4.0",
  +    "1.4.0 (03-Oct-2005)",
  +    "This is OSSP lmtp2nntp, Version 1.4.0 (03-Oct-2005)",
  +    "OSSP lmtp2nntp 1.4.0 (03-Oct-2005)",
  +    "OSSP lmtp2nntp/1.4.0",
  +    "@(#)OSSP lmtp2nntp 1.4.0 (03-Oct-2005)",
  +    "$Id: OSSP lmtp2nntp 1.4.0 (03-Oct-2005) $"
   };
   
   #endif /* _LMTP2NNTP_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 13:36:04 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 18874752893; Mon,  3 Oct 2005 13:36:04 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ devtool.conf
Message-Id: <20051003113604.18874752893@mail.ossp.org>
Date: Mon,  3 Oct 2005 13:36:04 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 13:36:04
  Branch: HEAD                             Handle: 2005100312360300

  Modified files:
    ossp-pkg/lmtp2nntp      devtool.conf

  Log:
    fix upload procedure

  Summary:
    Revision    Changes     Path
    1.23        +2  -1      ossp-pkg/lmtp2nntp/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 devtool.conf
  --- ossp-pkg/lmtp2nntp/devtool.conf	3 Oct 2005 11:32:21 -0000	1.22
  +++ ossp-pkg/lmtp2nntp/devtool.conf	3 Oct 2005 11:36:03 -0000	1.23
  @@ -112,4 +112,5 @@
   %upload
       echo "+++ copying to ftp://ftp.ossp.org/pkg/tool/lmtp2nntp/"
   	V=`./shtool version -lc -dshort lmtp2nntp_version.c`
  -    scp lmtp2nntp-${V}.tar.gz master.ossp.org:/e/ossp/ftp/pkg/tool/lmtp2nntp/
  +    scp lmtp2nntp-${V}.tar.gz ossp@master.ossp.org:/v/ossp/ftp/pkg/tool/lmtp2nntp/
  +
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 14:40:25 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 2E08D752893; Mon,  3 Oct 2005 14:40:25 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/tool/ index.wml ossp-w...
Message-Id: <20051003124025.2E08D752893@mail.ossp.org>
Date: Mon,  3 Oct 2005 14:40:25 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   03-Oct-2005 14:40:25
  Branch: HEAD                             Handle: 2005100313402301

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/lmtp2nntp
                            index.wml
    ossp-web/pkg/tool/quos  index.wml
    ossp-web/pkg/tool/snmpdx
                            index.wml
    ossp-web/pkg/tool/svs   index.wml

  Log:
    release OSSP lmtp2nntp 1.4.0 and OSSP svs 1.0.4

  Summary:
    Revision    Changes     Path
    1.135       +2  -0      ossp-web/new/news.txt
    1.50        +2  -2      ossp-web/pkg/tool/index.wml
    1.15        +2  -2      ossp-web/pkg/tool/lmtp2nntp/index.wml
    1.2         +1  -1      ossp-web/pkg/tool/quos/index.wml
    1.7         +2  -2      ossp-web/pkg/tool/snmpdx/index.wml
    1.5         +2  -2      ossp-web/pkg/tool/svs/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.134 -r1.135 news.txt
  --- ossp-web/new/news.txt	3 Oct 2005 09:39:09 -0000	1.134
  +++ ossp-web/new/news.txt	3 Oct 2005 12:40:23 -0000	1.135
  @@ -1,3 +1,5 @@
  +03-Oct-2005: Released T<OSSP lmtp2nntp> 1.4.0
  +03-Oct-2005: Released T<OSSP svs> 1.0.4
   03-Oct-2005: Released L<OSSP val> 0.9.4
   03-Oct-2005: Released L<OSSP str> 0.9.11
   03-Oct-2005: Released L<OSSP cfg> 0.9.10
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.49 -r1.50 index.wml
  --- ossp-web/pkg/tool/index.wml	2 Oct 2005 14:30:39 -0000	1.49
  +++ ossp-web/pkg/tool/index.wml	3 Oct 2005 12:40:23 -0000	1.50
  @@ -17,13 +17,13 @@
   		    done=100 stable="2.0.3" unstable=none>
     <pkg_item name="lmtp2nntp" longname="OSSP lmtp2nntp" type="tool"
               desc="Real-Time Mail to News Gateway"
  -            done=100 stable="1.3.0" unstable=none>
  +            done=100 stable="1.4.0" unstable=none>
     <pkg_item name="shiela" longname="OSSP shiela" type="tool"
               desc="CVS Access Control and Logging"
   	        done=100 stable="1.1.5" unstable="none">
     <pkg_item name="svs" longname="OSSP svs" type="tool"
               desc="Stupid/Silly/Simple Versioning System"
  -	        done=100 stable="1.0.3" unstable="none">
  +	        done=100 stable="1.0.4" unstable="none">
     <pkg_item name="eperl" longname="OSSP eperl" type="tool"
               desc="Embedded Perl Language"
   	        done=100 stable="2.2.14" unstable="none">
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/lmtp2nntp/index.wml
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 index.wml
  --- ossp-web/pkg/tool/lmtp2nntp/index.wml	2 Jul 2004 13:28:10 -0000	1.14
  +++ ossp-web/pkg/tool/lmtp2nntp/index.wml	3 Oct 2005 12:40:24 -0000	1.15
  @@ -35,7 +35,7 @@
   
   <pkg_status
       name="lmtp2nntp" assign="thl"
  -    stable="1.3.0"   stable_date="02-Jul-2004"
  +    stable="1.4.0"   stable_date="03-Oct-2005"
       unstable=none    unstable_date=none
   	done=100>
   
  @@ -45,7 +45,7 @@
       cvs=$(CVS_ROOT_URL)/pkg/tool/lmtp2nntp/
       url=$(FTP_ROOT_URL)/pkg/tool/lmtp2nntp/
       directory=$(FTP_ROOT_DIR)/pkg/tool/lmtp2nntp/
  -    files="lmtp2nntp-*.tar.gz" stable="lmtp2nntp-1.3\\\\\\\.0.tar.gz" unstable=none>
  +    files="lmtp2nntp-*.tar.gz" stable="lmtp2nntp-1.4\\\\\\\.0.tar.gz" unstable=none>
   
   <h2>Donation</h2>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/quos/index.wml
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/tool/quos/index.wml	25 Oct 2004 15:05:08 -0000	1.1
  +++ ossp-web/pkg/tool/quos/index.wml	3 Oct 2005 12:40:24 -0000	1.2
  @@ -1,5 +1,5 @@
   
  -#use wml::ossp area=pkg:tool subarea=snmpdx
  +#use wml::ossp area=pkg:tool subarea=quos
   
   <title>OSSP quos</title>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/snmpdx/index.wml
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 index.wml
  --- ossp-web/pkg/tool/snmpdx/index.wml	21 Oct 2003 18:19:10 -0000	1.6
  +++ ossp-web/pkg/tool/snmpdx/index.wml	3 Oct 2005 12:40:24 -0000	1.7
  @@ -21,7 +21,7 @@
   
   <pkg_status
       stable="none" stable_date="none"
  -    unstable="0.2.8" unstable_date="21-Oct-2003"
  +    unstable="0.2.10" unstable_date="30-Jul-2004"
   	genesis="August 2003" done=80>
   
   <h2>Source</h2>
  @@ -31,7 +31,7 @@
       url=$(FTP_ROOT_URL)/pkg/tool/snmpdx/
       directory=$(FTP_ROOT_DIR)/pkg/tool/snmpdx/
       files="snmpdx-*.tar.gz" 
  -	stable="none" unstable="snmpdx-0.2.8.tar.gz">
  +	stable="none" unstable="snmpdx-0.2.10.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/svs/index.wml
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 index.wml
  --- ossp-web/pkg/tool/svs/index.wml	18 Aug 2005 07:51:38 -0000	1.4
  +++ ossp-web/pkg/tool/svs/index.wml	3 Oct 2005 12:40:24 -0000	1.5
  @@ -20,7 +20,7 @@
   <h2>Status</h2>
   
   <pkg_status
  -    stable="1.0.3" stable_date="18-Aug-2005"
  +    stable="1.0.4" stable_date="03-Oct-2005"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -31,7 +31,7 @@
       url=$(FTP_ROOT_URL)/pkg/tool/svs/
       directory=$(FTP_ROOT_DIR)/pkg/tool/svs/
       files="svs-*.tar.gz" 
  -	stable="svs-1.0.3.tar.gz" unstable="none">
  +	stable="svs-1.0.4.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 14:43:44 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id A3D87752893; Mon,  3 Oct 2005 14:43:44 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ ChangeLog VERSION devtool.conf shiela-ins...
Message-Id: <20051003124344.A3D87752893@mail.ossp.org>
Date: Mon,  3 Oct 2005 14:43:44 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 14:43:44
  Branch: HEAD                             Handle: 2005100313434400

  Modified files:
    ossp-pkg/shiela         ChangeLog VERSION devtool.conf shiela-install.sh
                            shiela.pl

  Log:
    flush pending changes

  Summary:
    Revision    Changes     Path
    1.56        +5  -0      ossp-pkg/shiela/ChangeLog
    1.18        +1  -1      ossp-pkg/shiela/VERSION
    1.13        +2  -2      ossp-pkg/shiela/devtool.conf
    1.35        +1  -1      ossp-pkg/shiela/shiela-install.sh
    1.70        +1  -1      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.55 -r1.56 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	12 Jan 2005 20:47:25 -0000	1.55
  +++ ossp-pkg/shiela/ChangeLog	3 Oct 2005 12:43:44 -0000	1.56
  @@ -9,6 +9,11 @@
   
     ChangeLog
   
  +  Changes between 1.1.5 and 1.1.6 (12-Jan-2005 to 03-Oct-2005):
  +   
  +   *) Upgraded build environment to GNU shtool 2.0.3
  +      [Ralf S. Engelschall]
  +
     Changes between 1.1.4 and 1.1.5 (02-Jul-2004 to 12-Jan-2005):
   
      *) Upgraded build environment to GNU shtool 2.0.1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/VERSION
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 VERSION
  --- ossp-pkg/shiela/VERSION	12 Jan 2005 20:44:27 -0000	1.17
  +++ ossp-pkg/shiela/VERSION	3 Oct 2005 12:43:44 -0000	1.18
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP shiela (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP shiela, Version 1.1.5 (12-Jan-2005)
  +  This is OSSP shiela, Version 1.1.6 (03-Oct-2005)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 devtool.conf
  --- ossp-pkg/shiela/devtool.conf	12 Jan 2005 20:47:25 -0000	1.12
  +++ ossp-pkg/shiela/devtool.conf	3 Oct 2005 12:43:44 -0000	1.13
  @@ -3,7 +3,7 @@
   ##
   
   %autogen
  -    @autogen shtool   2.0.1 "2.0.*" all
  +    @autogen shtool   2.0.3 "2.0.*" all
       @autogen autoconf 2.59  "2.5[3-9]*"
   
   %autoclean
  @@ -70,5 +70,5 @@
   %upload
       echo "+++ copying to ftp://ftp.ossp.org/pkg/tool/shiela/"
       V=`./shtool version -ltxt -dshort VERSION`
  -    scp shiela-${V}.tar.gz master.ossp.org:/e/ossp/ftp/pkg/tool/shiela/
  +    scp shiela-${V}.tar.gz ossp@master.ossp.org:/v/ossp/ftp/pkg/tool/shiela/
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-install.sh
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 shiela-install.sh
  --- ossp-pkg/shiela/shiela-install.sh	12 Jan 2005 20:46:13 -0000	1.34
  +++ ossp-pkg/shiela/shiela-install.sh	3 Oct 2005 12:43:44 -0000	1.35
  @@ -26,7 +26,7 @@
   ##  shiela-install.sh: repository install program (syntax: Bourne-Shell)
   ##
   
  -version="1.1.5"
  +version="1.1.6"
   
   prefix="@prefix@"
   bindir="@bindir@"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================================
  $ cvs diff -u -r1.69 -r1.70 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	12 Jan 2005 20:46:13 -0000	1.69
  +++ ossp-pkg/shiela/shiela.pl	3 Oct 2005 12:43:44 -0000	1.70
  @@ -26,7 +26,7 @@
   ##  shiela.pl: control program (syntax: Perl)
   ##
   
  -my $version = '1.1.5';
  +my $version = '1.1.6';
   
   require 5.005;
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 17:23:51 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 1F6F47529C5; Mon,  3 Oct 2005 17:23:50 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tai/ TODO
Message-Id: <20051003152350.1F6F47529C5@mail.ossp.org>
Date: Mon,  3 Oct 2005 17:23:50 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 17:23:50
  Branch: HEAD                             Handle: 2005100316235000

  Modified files:
    ossp-pkg/tai            TODO

  Log:
    test commit

  Summary:
    Revision    Changes     Path
    1.3         +1  -0      ossp-pkg/tai/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/tai/TODO
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 TODO
  --- ossp-pkg/tai/TODO	23 Apr 2002 14:23:10 -0000	1.2
  +++ ossp-pkg/tai/TODO	3 Oct 2005 15:23:50 -0000	1.3
  @@ -8,3 +8,4 @@
   - tm_parse(buf,fmt,tm) -> tm_parse(buf,buflen,fmt,tm)
   - add exception support
   
  +
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 17:24:11 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 9D3ED7529CB; Mon,  3 Oct 2005 17:24:11 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tai/ TODO
Message-Id: <20051003152411.9D3ED7529CB@mail.ossp.org>
Date: Mon,  3 Oct 2005 17:24:11 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 17:24:11
  Branch: HEAD                             Handle: 2005100316241100

  Modified files:
    ossp-pkg/tai            TODO

  Log:
    test commit

  Summary:
    Revision    Changes     Path
    1.4         +0  -1      ossp-pkg/tai/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/tai/TODO
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 TODO
  --- ossp-pkg/tai/TODO	3 Oct 2005 15:23:50 -0000	1.3
  +++ ossp-pkg/tai/TODO	3 Oct 2005 15:24:11 -0000	1.4
  @@ -8,4 +8,3 @@
   - tm_parse(buf,fmt,tm) -> tm_parse(buf,buflen,fmt,tm)
   - add exception support
   
  -
  @@ .

From ossp-cvs-owner@ossp.org  Mon Oct  3 17:28:46 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 344E2752893; Mon,  3 Oct 2005 17:28:46 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tai/ TODO
Message-Id: <20051003152846.344E2752893@mail.ossp.org>
Date: Mon,  3 Oct 2005 17:28:46 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Oct-2005 17:28:46
  Branch: HEAD                             Handle: 2005100316284600

  Modified files:
    ossp-pkg/tai            TODO

  Log:
    test commit 2

  Summary:
    Revision    Changes     Path
    1.5         +1  -0      ossp-pkg/tai/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/tai/TODO
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 TODO
  --- ossp-pkg/tai/TODO	3 Oct 2005 15:24:11 -0000	1.4
  +++ ossp-pkg/tai/TODO	3 Oct 2005 15:28:46 -0000	1.5
  @@ -8,3 +8,4 @@
   - tm_parse(buf,fmt,tm) -> tm_parse(buf,buflen,fmt,tm)
   - add exception support
   
  +
  @@ .

From ossp-cvs-owner@ossp.org  Wed Oct  5 10:48:21 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 3B63A752977; Wed,  5 Oct 2005 10:48:21 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/xds/ ChangeLog README xds_version.c
Message-Id: <20051005084821.3B63A752977@mail.ossp.org>
Date: Wed,  5 Oct 2005 10:48:21 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Oct-2005 10:48:21
  Branch: HEAD                             Handle: 2005100509482000

  Modified files:
    ossp-pkg/xds            ChangeLog README xds_version.c

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.12        +1  -1      ossp-pkg/xds/ChangeLog
    1.14        +1  -1      ossp-pkg/xds/README
    1.6         +9  -9      ossp-pkg/xds/xds_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 ChangeLog
  --- ossp-pkg/xds/ChangeLog	3 Oct 2005 07:25:51 -0000	1.11
  +++ ossp-pkg/xds/ChangeLog	5 Oct 2005 08:48:20 -0000	1.12
  @@ -11,7 +11,7 @@
     This is a list of all source changes to OSSP xds.
     For less details please have a look at the NEWS file.
   
  -  Changes between 0.9.2 and 0.9.3 (02-Jun-2005 to xx-xxx-2005)
  +  Changes between 0.9.2 and 0.9.3 (02-Jun-2005 to 05-Oct-2005)
      
      o Upgraded build environment to GNU libtool 1.5.20
        and GNU shtool 2.0.3
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/README
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 README
  --- ossp-pkg/xds/README	2 Jun 2005 18:51:44 -0000	1.13
  +++ ossp-pkg/xds/README	5 Oct 2005 08:48:20 -0000	1.14
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     /_/\_\__,_|___/
   
     OSSP xds - eXtensible Data Serialization
  -  Version 0.9.2 (02-Jun-2005)
  +  Version 0.9.3 (05-Oct-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/xds_version.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 xds_version.c
  --- ossp-pkg/xds/xds_version.c	2 Jun 2005 18:49:40 -0000	1.5
  +++ ossp-pkg/xds/xds_version.c	5 Oct 2005 08:48:20 -0000	1.6
  @@ -8,7 +8,7 @@
   #ifndef _XDS_VERSION_C_
   #define _XDS_VERSION_C_
   
  -#define XDS_VERSION 0x009202
  +#define XDS_VERSION 0x009203
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _XDS_VERSION_C_AS_HEADER_
   
   xds_version_t xds_version = {
  -    0x009202,
  -    "0.9.2",
  -    "0.9.2 (02-Jun-2005)",
  -    "This is OSSP xds, Version 0.9.2 (02-Jun-2005)",
  -    "OSSP xds 0.9.2 (02-Jun-2005)",
  -    "OSSP xds/0.9.2",
  -    "@(#)OSSP xds 0.9.2 (02-Jun-2005)",
  -    "$Id: OSSP xds 0.9.2 (02-Jun-2005) $"
  +    0x009203,
  +    "0.9.3",
  +    "0.9.3 (05-Oct-2005)",
  +    "This is OSSP xds, Version 0.9.3 (05-Oct-2005)",
  +    "OSSP xds 0.9.3 (05-Oct-2005)",
  +    "OSSP xds/0.9.3",
  +    "@(#)OSSP xds 0.9.3 (05-Oct-2005)",
  +    "$Id: OSSP xds 0.9.3 (05-Oct-2005) $"
   };
   
   #endif /* _XDS_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Wed Oct  5 10:49:28 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 1CE97752977; Wed,  5 Oct 2005 10:49:28 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/xds/ devtool.conf
Message-Id: <20051005084928.1CE97752977@mail.ossp.org>
Date: Wed,  5 Oct 2005 10:49:28 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Oct-2005 10:49:28
  Branch: HEAD                             Handle: 2005100509492700

  Modified files:
    ossp-pkg/xds            devtool.conf

  Log:
    rename target

  Summary:
    Revision    Changes     Path
    1.10        +1  -1      ossp-pkg/xds/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/xds/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 devtool.conf
  --- ossp-pkg/xds/devtool.conf	3 Oct 2005 07:25:51 -0000	1.9
  +++ ossp-pkg/xds/devtool.conf	5 Oct 2005 08:49:27 -0000	1.10
  @@ -56,7 +56,7 @@
       gunzip <xds-SNAP-${D}.tar.gz | tar tvf - | head -10; echo "[...]"
       gunzip <xds-SNAP-${D}.tar.gz | tar tvf - | tail -10
   
  -%release
  +%upload
       echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/xds/"
       scp xds-*.tar.gz ossp@master.ossp.org:/v/ossp/ftp/pkg/lib/xds/
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Oct  5 10:51:54 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 6A77A752977; Wed,  5 Oct 2005 10:51:54 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20051005085154.6A77A752977@mail.ossp.org>
Date: Wed,  5 Oct 2005 10:51:54 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   05-Oct-2005 10:51:54
  Branch: HEAD                             Handle: 2005100509515301

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/xds    index.wml

  Log:
    release OSSP xds 0.9.3

  Summary:
    Revision    Changes     Path
    1.136       +1  -0      ossp-web/new/news.txt
    1.114       +1  -1      ossp-web/pkg/lib/index.wml
    1.10        +2  -2      ossp-web/pkg/lib/xds/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.135 -r1.136 news.txt
  --- ossp-web/new/news.txt	3 Oct 2005 12:40:23 -0000	1.135
  +++ ossp-web/new/news.txt	5 Oct 2005 08:51:53 -0000	1.136
  @@ -1,3 +1,4 @@
  +05-Oct-2005: Released L<OSSP xds> 0.9.3
   03-Oct-2005: Released T<OSSP lmtp2nntp> 1.4.0
   03-Oct-2005: Released T<OSSP svs> 1.0.4
   03-Oct-2005: Released L<OSSP val> 0.9.4
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.113 -r1.114 index.wml
  --- ossp-web/pkg/lib/index.wml	3 Oct 2005 09:39:09 -0000	1.113
  +++ ossp-web/pkg/lib/index.wml	5 Oct 2005 08:51:54 -0000	1.114
  @@ -39,7 +39,7 @@
   			done=95 stable=none unstable=0.9.4>
     <pkg_item name="xds" longname="OSSP xds" type="lib"
               desc="Extensible Data Serialization"
  -			done=95 stable=none unstable=0.9.2>
  +			done=95 stable=none unstable=0.9.3>
     <pkg_item name="str" longname="OSSP str" type="lib"
               desc="String Handling"
   			done=95 stable=none unstable=0.9.11>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/xds/index.wml
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 index.wml
  --- ossp-web/pkg/lib/xds/index.wml	2 Jun 2005 18:56:05 -0000	1.9
  +++ ossp-web/pkg/lib/xds/index.wml	5 Oct 2005 08:51:54 -0000	1.10
  @@ -30,7 +30,7 @@
   <pkg_status
       name="xds" assign="rse"
       stable="none" stable_date="none"
  -    unstable="0.9.2" unstable_date="02-Jun-2005"
  +    unstable="0.9.3" unstable_date="05-Oct-2005"
   	done=100>
   
   <h2>See Also</h2>
  @@ -48,7 +48,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/xds/
       directory=$(FTP_ROOT_DIR)/pkg/lib/xds/
       files="xds-*.tar.gz" 
  -	stable="none" unstable="xds-0.9.2.tar.gz">
  +	stable="none" unstable="xds-0.9.3.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Oct  5 10:54:31 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 8C668752977; Wed,  5 Oct 2005 10:54:31 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog README pth_vers.c
Message-Id: <20051005085431.8C668752977@mail.ossp.org>
Date: Wed,  5 Oct 2005 10:54:31 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Oct-2005 10:54:31
  Branch: HEAD                             Handle: 2005100509543100

  Modified files:
    ossp-pkg/pth            ChangeLog README pth_vers.c

  Log:
    bump version before release

  Summary:
    Revision    Changes     Path
    1.639       +1  -1      ossp-pkg/pth/ChangeLog
    1.209       +1  -1      ossp-pkg/pth/README
    1.152       +9  -9      ossp-pkg/pth/pth_vers.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.638 -r1.639 ChangeLog
  --- ossp-pkg/pth/ChangeLog	2 Oct 2005 16:38:36 -0000	1.638
  +++ ossp-pkg/pth/ChangeLog	5 Oct 2005 08:54:31 -0000	1.639
  @@ -19,7 +19,7 @@
        / __/ | |_| |
     __|_____(_)___/_________________________________________________________
                     
  -  Changes between 2.0.4 and 2.0.5 (18-Feb-2005 to xx-xxx-2005)
  +  Changes between 2.0.4 and 2.0.5 (18-Feb-2005 to 05-Oct-2005)
   
      *) Upgraded build environment to GNU libtool 1.5.20 and
         GNU shtool 2.0.3
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/README
  ============================================================================
  $ cvs diff -u -r1.208 -r1.209 README
  --- ossp-pkg/pth/README	18 Feb 2005 21:54:07 -0000	1.208
  +++ ossp-pkg/pth/README	5 Oct 2005 08:54:31 -0000	1.209
  @@ -5,7 +5,7 @@
     |_|    \__|_| |_|                     the impossible.''
   
     GNU Pth - The GNU Portable Threads
  -  Version 2.0.4 (18-Feb-2005)
  +  Version 2.0.5 (05-Oct-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_vers.c
  ============================================================================
  $ cvs diff -u -r1.151 -r1.152 pth_vers.c
  --- ossp-pkg/pth/pth_vers.c	18 Feb 2005 21:54:07 -0000	1.151
  +++ ossp-pkg/pth/pth_vers.c	5 Oct 2005 08:54:31 -0000	1.152
  @@ -8,7 +8,7 @@
   #ifndef _PTH_VERS_C_
   #define _PTH_VERS_C_
   
  -#define PTH_INTERNAL_VERSION 0x200204
  +#define PTH_INTERNAL_VERSION 0x200205
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _PTH_VERS_C_AS_HEADER_
   
   pth_internal_version_t pth_internal_version = {
  -    0x200204,
  -    "2.0.4",
  -    "2.0.4 (18-Feb-2005)",
  -    "This is GNU Pth, Version 2.0.4 (18-Feb-2005)",
  -    "GNU Pth 2.0.4 (18-Feb-2005)",
  -    "GNU Pth/2.0.4",
  -    "@(#)GNU Pth 2.0.4 (18-Feb-2005)",
  -    "$Id: GNU Pth 2.0.4 (18-Feb-2005) $"
  +    0x200205,
  +    "2.0.5",
  +    "2.0.5 (05-Oct-2005)",
  +    "This is GNU Pth, Version 2.0.5 (05-Oct-2005)",
  +    "GNU Pth 2.0.5 (05-Oct-2005)",
  +    "GNU Pth/2.0.5",
  +    "@(#)GNU Pth 2.0.5 (05-Oct-2005)",
  +    "$Id: GNU Pth 2.0.5 (05-Oct-2005) $"
   };
   
   #endif /* _PTH_VERS_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Wed Oct  5 12:11:58 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id CFA99752977; Wed,  5 Oct 2005 12:11:57 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/getopt/ Makefile.in README VERSION configure.ac d...
Message-Id: <20051005101157.CFA99752977@mail.ossp.org>
Date: Wed,  5 Oct 2005 12:11:57 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Oct-2005 12:11:57
  Branch: HEAD                             Handle: 2005100511115700

  Added files:
    ossp-pkg/getopt         getopt.pc.in
  Modified files:
    ossp-pkg/getopt         Makefile.in README VERSION configure.ac
                            devtool.conf getopt.1 getopt.3 getopt.c getopt.h
                            getopt_main.c getopt_test.c

  Log:
    fresh up sources; add pkgconfig file; upgrade build env to latest GNU
    tools

  Summary:
    Revision    Changes     Path
    1.3         +2  -0      ossp-pkg/getopt/Makefile.in
    1.2         +28 -7      ossp-pkg/getopt/README
    1.2         +1  -1      ossp-pkg/getopt/VERSION
    1.2         +2  -2      ossp-pkg/getopt/configure.ac
    1.3         +3  -3      ossp-pkg/getopt/devtool.conf
    1.2         +2  -2      ossp-pkg/getopt/getopt.1
    1.2         +68 -52     ossp-pkg/getopt/getopt.3
    1.2         +3  -3      ossp-pkg/getopt/getopt.c
    1.2         +11 -8      ossp-pkg/getopt/getopt.h
    1.1         +10 -0      ossp-pkg/getopt/getopt.pc.in
    1.2         +0  -4      ossp-pkg/getopt/getopt_main.c
    1.2         +0  -1      ossp-pkg/getopt/getopt_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/getopt/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 Makefile.in
  --- ossp-pkg/getopt/Makefile.in	7 Mar 2003 10:48:14 -0000	1.2
  +++ ossp-pkg/getopt/Makefile.in	5 Oct 2005 10:11:57 -0000	1.3
  @@ -46,6 +46,8 @@
   	$(SHTOOL) install -c -m 755 getopt-config $(DESTDIR)$(bindir)/
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libdir)
   	$(SHTOOL) install -c -m 644 libgetopt.a $(DESTDIR)$(libdir)/
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libdir)/pkgconfig
  +	$(SHTOOL) install -c -m 644 getopt.pc $(DESTDIR)$(libdir)/pkgconfig/
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(includedir)
   	$(SHTOOL) install -c -m 644 getopt.h $(DESTDIR)$(includedir)/
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/getopt/README
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 README
  --- ossp-pkg/getopt/README	7 Mar 2003 10:35:16 -0000	1.1
  +++ ossp-pkg/getopt/README	5 Oct 2005 10:11:57 -0000	1.2
  @@ -1,33 +1,54 @@
   
     OSSP's GNU getopt
   
  -  From gcc 3.2.2 (because more stand-alone than original glibc sources):
  +  IMPORT
  +  ------
  +
  +  From gcc 4.0.2 (because more stand-alone than original glibc sources):
     [ftp://gcc.gnu.org/pub/gcc/releases/]
   
       include/getopt.h         -> getopt.h
       libiberty/getopt.c       -> getopt.c
       libiberty/getopt1.c      -> getopt1.c
   
  -  From glibc 2.3.2:
  +  From glibc 2.3.5:
     [ftp://ftp.gnu.org/gnu/glibc/]
   
       posix/tstgetopt.c        -> getopt_test.c
       manual/getopt.texi       -> getopt.texi
     
  -  From man-pages 1.56:
  +  From man-pages 2.08:
     [ftp://ftp.kernel.org/pub/linux/docs/manpages/]
   
       man3/getopt.3            -> getopt.3
   
  -  From util-linux 2.11 or getopt 1.1.3:
  +  From util-linux 2.12r or even getopt 1.1.3:
     [http://www.kernel.org/pub/linux/utils/util-linux/]
     [http://huizen.dds.nl/~frodol/getopt.html]
   
  -    getopt.1                 -> getopt.1
  -    getopt.c                 -> getopt_main.c
  +    getopt/getopt.1          -> getopt.1
  +    getopt/getopt.c          -> getopt_main.c
  +
  +  POST-ADJUSTMENTS
  +  ----------------
  +
  +  Apply the following adjustments after importing:
  +  
  +  getopt_main.c:
   
  -  Plus replace in getop_main.c:
  +    << #if LIBCGETOPT
  +    << #include <getopt.h>
  +    << #else
  +    << #include "getopt.h"
  +    << #endif
       << #include "nls.h"
  +
  +    >> #include "getopt.h"
       >> #define WITHOUT_GETTEXT 1
       >> #define _(x) x
   
  +  getopt_test.c:
  +
  +    << #include <getopt.h>
  +    >> #include "getopt.h"
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/getopt/VERSION
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 VERSION
  --- ossp-pkg/getopt/VERSION	7 Mar 2003 10:35:16 -0000	1.1
  +++ ossp-pkg/getopt/VERSION	5 Oct 2005 10:11:57 -0000	1.2
  @@ -1 +1 @@
  -20030307
  +20051005
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/getopt/configure.ac
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 configure.ac
  --- ossp-pkg/getopt/configure.ac	7 Mar 2003 10:35:16 -0000	1.1
  +++ ossp-pkg/getopt/configure.ac	5 Oct 2005 10:11:57 -0000	1.2
  @@ -1,5 +1,5 @@
   
  -AC_PREREQ(2.57)
  +AC_PREREQ(2.59)
   AC_INIT
   AC_CONFIG_SRCDIR(Makefile.in)
   GETOPT_VERSION=`cat VERSION`
  @@ -13,7 +13,7 @@
   AC_CHECK_HEADERS(string.h strings.h)
   
   AC_CONFIG_HEADERS(config.h)
  -AC_CONFIG_FILES([Makefile getopt-config])
  +AC_CONFIG_FILES([Makefile getopt-config getopt.pc])
   AC_CONFIG_COMMANDS([adjustment], [chmod a+x getopt-config])
   
   AC_OUTPUT
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/getopt/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.conf
  --- ossp-pkg/getopt/devtool.conf	7 Mar 2003 10:37:50 -0000	1.2
  +++ ossp-pkg/getopt/devtool.conf	5 Oct 2005 10:11:57 -0000	1.3
  @@ -3,8 +3,8 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.2 "1.[56].*" all
  -    @autogen autoconf 2.57  "2.5[3-9]*"
  +    @autogen shtool   2.0.3 "2.0.*" all
  +    @autogen autoconf 2.59  "2.5[3-9]*"
   
   %autoclean
       @autoclean shtool
  @@ -29,5 +29,5 @@
   
   %release
       echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/getopt/"
  -    scp getopt-*.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/getopt/
  +    scp getopt-*.tar.gz ossp@master.ossp.org:/v/ossp/ftp/pkg/lib/getopt/
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/getopt/getopt.1
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 getopt.1
  --- ossp-pkg/getopt/getopt.1	7 Mar 2003 10:35:16 -0000	1.1
  +++ ossp-pkg/getopt/getopt.1	5 Oct 2005 10:11:57 -0000	1.2
  @@ -33,7 +33,7 @@
   in the 
   .BR SYNOPSIS).
   The second part will start at the first non\-option parameter
  -that is not an option argument, or after the first occurence of 
  +that is not an option argument, or after the first occurrence of 
   .RB ` \-\- '.
   If no 
   .RB ` \-o ' 
  @@ -284,7 +284,7 @@
   non\-option parameter output is generated at the place they are found in the 
   input (this is not supported if the first format of the 
   .B SYNOPSIS
  -is used; in that case all preceding occurences of
  +is used; in that case all preceding occurrences of
   .RB ` \- '
   and 
   .RB ` + '
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/getopt/getopt.3
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 getopt.3
  --- ossp-pkg/getopt/getopt.3	7 Mar 2003 10:35:16 -0000	1.1
  +++ ossp-pkg/getopt/getopt.3	5 Oct 2005 10:11:57 -0000	1.2
  @@ -7,7 +7,7 @@
   .\" Permission is granted to copy and distribute modified versions of this
   .\" manual under the conditions for verbatim copying, provided that the
   .\" entire resulting derived work is distributed under the terms of a
  -.\" permission notice identical to this one
  +.\" permission notice identical to this one.
   .\" 
   .\" Since the Linux kernel and libraries are constantly changing, this
   .\" manual page may be incorrect or out-of-date.  The author(s) assume no
  @@ -31,10 +31,13 @@
   .\"  says; moreover, EOF is not defined in <unistd.h>.
   .\" Modified 2002-02-16, joey: added information about non-existing
   .\"  option character and colon as first option character
  +.\" Modified 2004-07-28, Michael Kerrisk <mtk-manpages@gmx.net>
  +.\"	Added text to explain how to order both '[-+]' and ':' at
  +.\"		the start of optstring
   .\"
  -.TH GETOPT 3  2002-02-16 "GNU" "Linux Programmer's Manual"
  +.TH GETOPT 3  2004-07-28 "GNU" "Linux Programmer's Manual"
   .SH NAME
  -getopt \- Parse command line options
  +getopt \- Parse command-line options
   .SH SYNOPSIS
   .nf
   .B #include <unistd.h>
  @@ -59,27 +62,28 @@
   .fi
   .SH DESCRIPTION
   The
  -.B getopt()
  -function parses the command line arguments.  Its arguments
  +.BR getopt ()
  +function parses the command-line arguments.  Its arguments
   .I argc
   and
   .I argv
   are the argument count and array as passed to the
  -.B main()
  +.I main()
   function on program invocation.
  -An element of \fIargv\fP that starts with `-' (and is not exactly "-" or "--")
  +An element of \fIargv\fP that starts with '\-'
  +(and is not exactly "\-" or "\-\-")
   is an option element.  The characters of this element
  -(aside from the initial `-') are option characters.  If \fBgetopt()\fP
  +(aside from the initial '\-') are option characters.  If \fBgetopt\fP()
   is called repeatedly, it returns successively each of the option characters
   from each of the option elements.
   .PP
  -If \fBgetopt()\fP finds another option character, it returns that
  +If \fBgetopt\fP() finds another option character, it returns that
   character, updating the external variable \fIoptind\fP and a static
  -variable \fInextchar\fP so that the next call to \fBgetopt()\fP can
  +variable \fInextchar\fP so that the next call to \fBgetopt\fP() can
   resume the scan with the following option character or
   \fIargv\fP-element.
   .PP
  -If there are no more option characters, \fBgetopt()\fP returns \-1.
  +If there are no more option characters, \fBgetopt\fP() returns \-1.
   Then \fIoptind\fP is the index in \fIargv\fP of the first
   \fIargv\fP-element that is not an option.
   .PP
  @@ -97,54 +101,56 @@
   contains
   .B W
   followed by a semicolon, then
  -.B -W foo
  +.B \-W foo
   is treated as the long option
  -.BR --foo .
  +.BR \-\-foo .
   (The
  -.B -W
  +.B \-W
   option is reserved by POSIX.2 for implementation extensions.)
   This behaviour is a GNU extension, not available with libraries before
   GNU libc 2.
   .PP
  -By default, \fBgetopt()\fP permutes the contents of \fIargv\fP as it
  +By default, \fBgetopt\fP() permutes the contents of \fIargv\fP as it
   scans, so that eventually all the non-options are at the end.  Two
   other modes are also implemented.  If the first character of
  -\fIoptstring\fP is `+' or the environment variable POSIXLY_CORRECT is
  +\fIoptstring\fP is '+' or the environment variable POSIXLY_CORRECT is
   set, then option processing stops as soon as a non-option argument is
  -encountered.  If the first character of \fIoptstring\fP is `-', then
  +encountered.  If the first character of \fIoptstring\fP is '\-', then
   each non-option \fIargv\fP-element is handled as if it were the argument of
   an option with character code 1.  (This is used by programs that were
   written to expect options and other \fIargv\fP-elements in any order
   and that care about the ordering of the two.)
  -The special argument `--' forces an end of option-scanning regardless
  +The special argument "\-\-" forces an end of option-scanning regardless
   of the scanning mode.
   .PP
  -If \fBgetopt()\fP does not recognize an option character, it prints an
  +If \fBgetopt\fP() does not recognize an option character, it prints an
   error message to stderr, stores the character in \fIoptopt\fP, and
  -returns `?'.  The calling program may prevent the error message by
  +returns '?'.  The calling program may prevent the error message by
   setting \fIopterr\fP to 0.
   .PP
  -If \fBgetopt()\fP finds an option character in \fIargv\fP that was not
  +If \fBgetopt\fP() finds an option character in \fIargv\fP that was not
   included in \fIoptstring\fP, or if it detects a missing option argument,
  -it returns `?'  and sets the external variable \fIoptopt\fP to the
  -actual option character.  If the first character of \fIoptstring\fP
  -is a colon (`:'), then \fBgetopt()\fP returns `:' instead of `?' to
  +it returns '?'  and sets the external variable \fIoptopt\fP to the
  +actual option character.  If the first character
  +(following any optional '+'or '\-' described above)
  +of \fIoptstring\fP
  +is a colon (':'), then \fBgetopt\fP() returns ':' instead of '?' to
   indicate a missing option argument.  If an error was detected, and
   the first character of \fIoptstring\fP is not a colon, and
  -the external variable \fIopterr\fP is nonzero (which is the default),
  -\fBgetopt()\fP prints an error message.
  +the external variable \fIopterr\fP is non-zero (which is the default),
  +\fBgetopt\fP() prints an error message.
   .PP
   The
  -.B getopt_long()
  +.BR getopt_long ()
   function works like
  -.B getopt()
  +.BR getopt ()
   except that it also accepts long options, started out by two dashes.
   Long option names may be abbreviated if the abbreviation is
   unique or is an exact match for some defined option.  A long option 
   may take a parameter, of the form
  -.B --arg=param
  +.B \-\-arg=param
   or
  -.BR "--arg param" .
  +.BR "\-\-arg param" .
   .PP
   .I longopts
   is a pointer to the first element of an array of
  @@ -172,15 +178,15 @@
   .TP
   .I has_arg
   is:
  -\fBno_argument\fP (or 0) if the option does not take an argument,
  -\fBrequired_argument\fP (or 1) if the option requires an argument, or
  +\fBno_argument\fP (or 0) if the option does not take an argument;
  +\fBrequired_argument\fP (or 1) if the option requires an argument; or
   \fBoptional_argument\fP (or 2) if the option takes an optional argument.
   .TP
   .I flag
   specifies how results are returned for a long option.  If \fIflag\fP
  -is \fBNULL\fP, then \fBgetopt_long()\fP returns \fIval\fP.  (For
  +is \fBNULL\fP, then \fBgetopt_long\fP() returns \fIval\fP.  (For
   example, the calling program may set \fIval\fP to the equivalent short
  -option character.)  Otherwise, \fBgetopt_long()\fP returns 0, and
  +option character.)  Otherwise, \fBgetopt_long\fP() returns 0, and
   \fIflag\fP points to a variable which is set to \fIval\fP if the
   option is found, but left unchanged if the option is not found.
   .TP
  @@ -194,22 +200,33 @@
   points to a variable which is set to the index of the long option relative to
   .IR longopts .
   .PP
  -\fBgetopt_long_only()\fP is like \fBgetopt_long()\fP, but `-' as well 
  -as `--' can indicate a long option.  If an option that starts with `-'
  -(not `--') doesn't match a long option, but does match a short option,
  +\fBgetopt_long_only\fP() is like \fBgetopt_long\fP(), but '\-' as well 
  +as '\-\-' can indicate a long option.  If an option that starts with '\-'
  +(not '\-\-') doesn't match a long option, but does match a short option,
   it is parsed as a short option instead.  
   .SH "RETURN VALUE"
  -The
  -.B getopt()
  -function returns the option character if the option was found
  -successfully, `:' if there was a missing parameter for one of the
  -options, `?' for an unknown option character, or \-1
  -for the end of the option list.
  +If an option was successfully found, then
  +.BR getopt ()
  +returns the option character.
  +If all command-line options have been parsed, then
  +.BR getopt ()
  +returns \-1.
  +If
  +.BR getopt ()
  +encounters an option character that was not in
  +.IR optstring ,
  +then '?' is returned.
  +If
  +.BR getopt ()
  +encounters an option with a missing argument,
  +then the return value depends on the first character in
  +.IR optstring :
  +if it is ':', then ':' is returned; otherwise '?' is returned.
   .PP
  -\fBgetopt_long()\fP and \fBgetopt_long_only()\fP also return the option
  +\fBgetopt_long\fP() and \fBgetopt_long_only\fP() also return the option
   character when a short option is recognized.  For a long option, they
   return \fIval\fP if \fIflag\fP is \fBNULL\fP, and 0 otherwise.  Error
  -and \-1 returns are the same as for \fBgetopt()\fP, plus `?' for an
  +and \-1 returns are the same as for \fBgetopt\fP (), plus '?' for an
   ambiguous match or an extraneous parameter.
   .SH "ENVIRONMENT VARIABLES"
   .TP
  @@ -229,7 +246,7 @@
   version 2.01, but the support remains in GNU libc.
   .SH EXAMPLE
   The following example program illustrates the use of
  -.BR getopt_long()
  +.BR getopt_long ()
   with most of its features.
   .nf
   .sp
  @@ -257,7 +274,7 @@
   
           c = getopt_long (argc, argv, "abc:d:012",
                    long_options, &option_index);
  -        if (c == -1)
  +        if (c == \-1)
               break;
   
           switch (c) {
  @@ -286,11 +303,11 @@
               break;
   
           case 'c':
  -            printf ("option c with value `%s'\\n", optarg);
  +            printf ("option c with value '%s'\\n", optarg);
               break;
   
           case 'd':
  -            printf ("option d with value `%s'\\n", optarg);
  +            printf ("option d with value '%s'\\n", optarg);
               break;
   
           case '?':
  @@ -313,15 +330,14 @@
   .fi
   .SH BUGS
   The POSIX.2 specification of
  -.B getopt()
  +.BR getopt ()
   has a technical error described in POSIX.2 Interpretation 150.  The GNU
   implementation (and probably all other implementations) implements the
   correct behaviour rather than that specified.
   .SH "CONFORMING TO"
   .TP
  -\fBgetopt()\fP:
  +\fBgetopt\fP():
   POSIX.2, provided the environment variable POSIXLY_CORRECT is set.
   Otherwise, the elements of \fIargv\fP aren't really const, because we
   permute them.  We pretend they're const in the prototype to be
   compatible with other systems.
  -
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/getopt/getopt.c
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 getopt.c
  --- ossp-pkg/getopt/getopt.c	7 Mar 2003 10:35:16 -0000	1.1
  +++ ossp-pkg/getopt/getopt.c	5 Oct 2005 10:11:57 -0000	1.2
  @@ -333,8 +333,8 @@
   	nonoption_flags_len = nonoption_flags_max_len = 0;
         else
   	{
  -	  memset (__mempcpy (new_str, __getopt_nonoption_flags,
  -			     nonoption_flags_max_len),
  +	  memset (mempcpy (new_str, __getopt_nonoption_flags,
  +			   nonoption_flags_max_len),
   		  '\0', top + 1 - nonoption_flags_max_len);
   	  nonoption_flags_max_len = top + 1;
   	  __getopt_nonoption_flags = new_str;
  @@ -444,7 +444,7 @@
   	      if (__getopt_nonoption_flags == NULL)
   		nonoption_flags_max_len = -1;
   	      else
  -		memset (__mempcpy (__getopt_nonoption_flags, orig_str, len),
  +		memset (mempcpy (__getopt_nonoption_flags, orig_str, len),
   			'\0', nonoption_flags_max_len - len);
   	    }
   	}
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/getopt/getopt.h
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 getopt.h
  --- ossp-pkg/getopt/getopt.h	7 Mar 2003 10:35:16 -0000	1.1
  +++ ossp-pkg/getopt/getopt.h	5 Oct 2005 10:11:57 -0000	1.2
  @@ -1,6 +1,6 @@
   /* Declarations for getopt.
  -   Copyright 1989, 1990, 1991, 1992, 1993, 1994, 1996, 1997, 1998, 2000
  -   Free Software Foundation, Inc.
  +   Copyright 1989, 1990, 1991, 1992, 1993, 1994, 1996, 1997, 1998, 2000,
  +   2002 Free Software Foundation, Inc.
   
      NOTE: The canonical source of this file is maintained with the GNU C Library.
      Bugs can be reported to bug-glibc@gnu.org.
  @@ -105,16 +105,19 @@
      declaration without arguments.  If it is 0, we checked and failed
      to find the declaration so provide a fully prototyped one.  If it
      is 1, we found it so don't provide any declaration at all.  */
  -#if defined (__GNU_LIBRARY__) || (defined (HAVE_DECL_GETOPT) && !HAVE_DECL_GETOPT)
  +#if !HAVE_DECL_GETOPT
  +#if defined (__GNU_LIBRARY__) || defined (HAVE_DECL_GETOPT)
   /* Many other libraries have conflicting prototypes for getopt, with
  -   differences in the consts, in stdlib.h.  To avoid compilation
  +   differences in the consts, in unistd.h.  To avoid compilation
      errors, only prototype getopt for the GNU C library.  */
   extern int getopt (int argc, char *const *argv, const char *shortopts);
  -#else /* not __GNU_LIBRARY__ */
  -# if !defined (HAVE_DECL_GETOPT) && !defined (__cplusplus)
  +#else
  +#ifndef __cplusplus
   extern int getopt ();
  -# endif
  -#endif /* __GNU_LIBRARY__ */
  +#endif /* __cplusplus */
  +#endif
  +#endif /* !HAVE_DECL_GETOPT */
  +
   extern int getopt_long (int argc, char *const *argv, const char *shortopts,
   		        const struct option *longopts, int *longind);
   extern int getopt_long_only (int argc, char *const *argv,
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/getopt/getopt.pc.in
  ============================================================================
  $ cvs diff -u -r0 -r1.1 getopt.pc.in
  --- /dev/null	2005-10-05 12:11:56 +0200
  +++ getopt.pc.in	2005-10-05 12:11:57 +0200
  @@ -0,0 +1,10 @@
  +prefix=@prefix@
  +exec_prefix=${prefix}
  +includedir=${prefix}/include
  +libdir=${exec_prefix}/lib
  +
  +Name: GNU getopt
  +Description: GNU Option Parsing Library
  +Version: 0.0
  +Cflags: -I${includedir}
  +Libs: -L${libdir} -lgetopt
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/getopt/getopt_main.c
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 getopt_main.c
  --- ossp-pkg/getopt/getopt_main.c	7 Mar 2003 10:35:16 -0000	1.1
  +++ ossp-pkg/getopt/getopt_main.c	5 Oct 2005 10:11:57 -0000	1.2
  @@ -43,11 +43,7 @@
   #include <unistd.h>
   #include <ctype.h>
   
  -#if LIBCGETOPT
  -#include <getopt.h>
  -#else
   #include "getopt.h"
  -#endif
   
   #define WITHOUT_GETTEXT 1
   #define _(x) x
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/getopt/getopt_test.c
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 getopt_test.c
  --- ossp-pkg/getopt/getopt_test.c	7 Mar 2003 10:35:16 -0000	1.1
  +++ ossp-pkg/getopt/getopt_test.c	5 Oct 2005 10:11:57 -0000	1.2
  @@ -1,4 +1,3 @@
  -
   #include "getopt.h"
   #include <stdio.h>
   #include <string.h>
  @@ .

From ossp-cvs-owner@ossp.org  Wed Oct  5 12:12:18 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 45C027529CB; Wed,  5 Oct 2005 12:12:18 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/getopt/ .cvsignore
Message-Id: <20051005101218.45C027529CB@mail.ossp.org>
Date: Wed,  5 Oct 2005 12:12:18 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Oct-2005 12:12:18
  Branch: HEAD                             Handle: 2005100511121800

  Modified files:
    ossp-pkg/getopt         .cvsignore

  Log:
    ignore generated file

  Summary:
    Revision    Changes     Path
    1.2         +1  -0      ossp-pkg/getopt/.cvsignore
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/getopt/.cvsignore
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 .cvsignore
  --- ossp-pkg/getopt/.cvsignore	7 Mar 2003 10:49:13 -0000	1.1
  +++ ossp-pkg/getopt/.cvsignore	5 Oct 2005 10:12:18 -0000	1.2
  @@ -5,4 +5,5 @@
   getopt
   getopt-*.tar.gz
   getopt-config
  +getopt.pc
   shtool
  @@ .

From ossp-cvs-owner@ossp.org  Wed Oct  5 12:12:37 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id C5A58752977; Wed,  5 Oct 2005 12:12:37 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/getopt/ Makefile.in
Message-Id: <20051005101237.C5A58752977@mail.ossp.org>
Date: Wed,  5 Oct 2005 12:12:37 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Oct-2005 12:12:37
  Branch: HEAD                             Handle: 2005100511123700

  Modified files:
    ossp-pkg/getopt         Makefile.in

  Log:
    remove generated file

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/getopt/Makefile.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/getopt/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 Makefile.in
  --- ossp-pkg/getopt/Makefile.in	5 Oct 2005 10:11:57 -0000	1.3
  +++ ossp-pkg/getopt/Makefile.in	5 Oct 2005 10:12:37 -0000	1.4
  @@ -60,7 +60,7 @@
   	$(RM) getopt_main.o getopt
   
   distclean: clean
  -	$(RM) getopt-config config.h config.log config.status Makefile
  +	$(RM) getopt-config getopt.pc config.h config.log config.status Makefile
   
   realclean: distclean
   	$(RM) shtool configure config.h.in
  @@ .

From ossp-cvs-owner@ossp.org  Wed Oct  5 12:15:34 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id CE5EE752977; Wed,  5 Oct 2005 12:15:34 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/getopt/ README
Message-Id: <20051005101534.CE5EE752977@mail.ossp.org>
Date: Wed,  5 Oct 2005 12:15:34 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Oct-2005 12:15:34
  Branch: HEAD                             Handle: 2005100511153400

  Modified files:
    ossp-pkg/getopt         README

  Log:
    remember what this beast actually is

  Summary:
    Revision    Changes     Path
    1.3         +9  -0      ossp-pkg/getopt/README
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/getopt/README
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 README
  --- ossp-pkg/getopt/README	5 Oct 2005 10:11:57 -0000	1.2
  +++ ossp-pkg/getopt/README	5 Oct 2005 10:15:34 -0000	1.3
  @@ -1,6 +1,15 @@
   
     OSSP's GNU getopt
   
  +  DESCRIPTION
  +  -----------
  +
  +  This is the OSSP re-packaging of GNU getopt(3). It is based on
  +  the original GNU getopt(3) as assembled together from the various
  +  distribution sources. The goal simply is to make a self-contained,
  +  stand-alone and and consistent GNU getopt(3) distribution available
  +  -- both within OSSP and externally to at least OpenPKG.
  +
     IMPORT
     ------
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Oct  5 19:42:15 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id EE7477529CA; Wed,  5 Oct 2005 19:42:14 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ ChangeLog Makefile.in README VERSION conf...
Message-Id: <20051005174214.EE7477529CA@mail.ossp.org>
Date: Wed,  5 Oct 2005 19:42:14 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Oct-2005 19:42:14
  Branch: HEAD                             Handle: 2005100518421301

  Modified files:
    ossp-pkg/snmpdx         ChangeLog Makefile.in README VERSION configure.ac
                            devtool.conf snmpdx.pl snmpdx.pod
    ossp-pkg/snmpdx/snmpdx.d
                            hwCpu.pm hwDisk.pm hwFan.pm hwProd.pm hwPs.pm
                            hwRam.pm swBind.pm swOp.pm swOs.pm sysFs.pm
                            sysLoad.pm sysProc.pm sysUptime.pm sysUser.pm
                            sysVM.pm
    ossp-pkg/snmpdx/snmpdx.mib
                            snmpdx.mib

  Log:
    flush pending changes

  Summary:
    Revision    Changes     Path
    1.17        +9  -0      ossp-pkg/snmpdx/ChangeLog
    1.14        +3  -3      ossp-pkg/snmpdx/Makefile.in
    1.18        +4  -4      ossp-pkg/snmpdx/README
    1.13        +1  -1      ossp-pkg/snmpdx/VERSION
    1.7         +6  -6      ossp-pkg/snmpdx/configure.ac
    1.8         +1  -1      ossp-pkg/snmpdx/devtool.conf
    1.10        +3  -3      ossp-pkg/snmpdx/snmpdx.d/hwCpu.pm
    1.7         +3  -3      ossp-pkg/snmpdx/snmpdx.d/hwDisk.pm
    1.6         +3  -3      ossp-pkg/snmpdx/snmpdx.d/hwFan.pm
    1.3         +3  -3      ossp-pkg/snmpdx/snmpdx.d/hwProd.pm
    1.6         +3  -3      ossp-pkg/snmpdx/snmpdx.d/hwPs.pm
    1.5         +3  -3      ossp-pkg/snmpdx/snmpdx.d/hwRam.pm
    1.2         +3  -3      ossp-pkg/snmpdx/snmpdx.d/swBind.pm
    1.10        +3  -3      ossp-pkg/snmpdx/snmpdx.d/swOp.pm
    1.3         +3  -3      ossp-pkg/snmpdx/snmpdx.d/swOs.pm
    1.7         +3  -3      ossp-pkg/snmpdx/snmpdx.d/sysFs.pm
    1.3         +3  -3      ossp-pkg/snmpdx/snmpdx.d/sysLoad.pm
    1.3         +3  -3      ossp-pkg/snmpdx/snmpdx.d/sysProc.pm
    1.3         +3  -3      ossp-pkg/snmpdx/snmpdx.d/sysUptime.pm
    1.3         +3  -3      ossp-pkg/snmpdx/snmpdx.d/sysUser.pm
    1.12        +3  -3      ossp-pkg/snmpdx/snmpdx.d/sysVM.pm
    1.16        +3  -3      ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib
    1.17        +3  -3      ossp-pkg/snmpdx/snmpdx.pl
    1.3         +3  -3      ossp-pkg/snmpdx/snmpdx.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 ChangeLog
  --- ossp-pkg/snmpdx/ChangeLog	30 Jul 2004 10:21:06 -0000	1.16
  +++ ossp-pkg/snmpdx/ChangeLog	5 Oct 2005 17:42:13 -0000	1.17
  @@ -10,7 +10,16 @@
     ChangeLog
     =========
   
  +  Changes between 0.2.10 and 0.2.11 (30-Jul-2005 to 05-Oct-2005):
  +   
  +   *) Upgrade build environment to GNU shtool 2.0.3
  +      [Ralf S. Engelschall]
  +
  +   *) Update copyright messages for year 2005.
  +      [Ralf S. Engelschall]
  +
     Changes between 0.2.9 and 0.2.10 (28-Jul-2003 to 30-Jul-2004):
  +
      *) add swBind probe and MIB for named(8)
      *) support a configurable OpenPKG instance
      *) swProbe detects and handles OpenPKG 1.x and 2.x
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 Makefile.in
  --- ossp-pkg/snmpdx/Makefile.in	30 Jul 2004 09:30:04 -0000	1.13
  +++ ossp-pkg/snmpdx/Makefile.in	5 Oct 2005 17:42:13 -0000	1.14
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP snmpdx - SNMP Daemon Extension
  -##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP snmpdx, a SNMP daemon extension which
   ##  can be found at http://www.ossp.org/pkg/tool/snmpdx/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/README
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 README
  --- ossp-pkg/snmpdx/README	30 Jul 2004 09:43:49 -0000	1.17
  +++ ossp-pkg/snmpdx/README	5 Oct 2005 17:42:13 -0000	1.18
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/_| |_|_| |_| |_| .__/ \__,_/_/\_\
                                                          |_|
     OSSP snmpdx - SNMP Daemon Extension
  -  Version 0.2.10 (30-Jul-2004)
  +  Version 0.2.11 (05-Oct-2005)
   
     ABSTRACT
   
  @@ -16,9 +16,9 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  -  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
  +  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>
   
     This file is part of OSSP snmpdx, a SNMP daemon extension which
     can be found at http://www.ossp.org/pkg/tool/snmpdx/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/VERSION
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 VERSION
  --- ossp-pkg/snmpdx/VERSION	30 Jul 2004 09:43:49 -0000	1.12
  +++ ossp-pkg/snmpdx/VERSION	5 Oct 2005 17:42:13 -0000	1.13
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP snmpdx (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP snmpdx, Version 0.2.10 (30-Jul-2004)
  +  This is OSSP snmpdx, Version 0.2.11 (05-Oct-2005)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/configure.ac
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 configure.ac
  --- ossp-pkg/snmpdx/configure.ac	30 Jul 2004 09:30:04 -0000	1.6
  +++ ossp-pkg/snmpdx/configure.ac	5 Oct 2005 17:42:13 -0000	1.7
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP snmpdx - SNMP Daemon Extension
  -##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP snmpd, a SNMP Daemon Extension which
   ##  can be found at http://www.ossp.org/pkg/tool/snmpdx/.
  @@ -32,9 +32,9 @@
   dnl # standard OSSP style header
   V=`./shtool version -ltxt -dlong VERSION`
   ./shtool echo -e "Configuring %BOSSP snmpdx%b, Version %B${V}%b"
  -echo "Copyright (c) 2003-2004 Ralf S. Engelschall <rse@engelschall.com>"
  -echo "Copyright (c) 2003-2004 The OSSP Project <http://www.ossp.org/>"
  -echo "Copyright (c) 2003-2004 Cable & Wireless <http://www.cw.com/>"
  +echo "Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>"
  +echo "Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>"
  +echo "Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>"
   
   dnl # check for OpenPKG
   AC_MSG_CHECKING(for openpkg instance)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 devtool.conf
  --- ossp-pkg/snmpdx/devtool.conf	30 Jul 2004 09:30:04 -0000	1.7
  +++ ossp-pkg/snmpdx/devtool.conf	5 Oct 2005 17:42:13 -0000	1.8
  @@ -3,7 +3,7 @@
   ##
   
   %autogen
  -    @autogen shtool   2.0.0 "2.0.*" all
  +    @autogen shtool   2.0.3 "2.0.*" all
       @autogen autoconf 2.59  "2.5[4-9]*"
   
   %autoclean
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/hwCpu.pm
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 hwCpu.pm
  --- ossp-pkg/snmpdx/snmpdx.d/hwCpu.pm	28 Jul 2004 13:00:59 -0000	1.9
  +++ ossp-pkg/snmpdx/snmpdx.d/hwCpu.pm	5 Oct 2005 17:42:13 -0000	1.10
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP snmpdx - SNMP Daemon Extension
  -##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP snmpdx, a SNMP daemon extension which
   ##  can be found at http://www.ossp.org/pkg/tool/snmpdx/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/hwDisk.pm
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 hwDisk.pm
  --- ossp-pkg/snmpdx/snmpdx.d/hwDisk.pm	28 Jul 2004 13:00:59 -0000	1.6
  +++ ossp-pkg/snmpdx/snmpdx.d/hwDisk.pm	5 Oct 2005 17:42:13 -0000	1.7
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP snmpdx - SNMP Daemon Extension
  -##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP snmpdx, a SNMP daemon extension which
   ##  can be found at http://www.ossp.org/pkg/tool/snmpdx/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/hwFan.pm
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 hwFan.pm
  --- ossp-pkg/snmpdx/snmpdx.d/hwFan.pm	28 Jul 2004 13:00:59 -0000	1.5
  +++ ossp-pkg/snmpdx/snmpdx.d/hwFan.pm	5 Oct 2005 17:42:13 -0000	1.6
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP snmpdx - SNMP Daemon Extension
  -##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP snmpdx, a SNMP daemon extension which
   ##  can be found at http://www.ossp.org/pkg/tool/snmpdx/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/hwProd.pm
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 hwProd.pm
  --- ossp-pkg/snmpdx/snmpdx.d/hwProd.pm	10 Sep 2003 15:01:46 -0000	1.2
  +++ ossp-pkg/snmpdx/snmpdx.d/hwProd.pm	5 Oct 2005 17:42:13 -0000	1.3
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP snmpdx - SNMP Daemon Extension
  -##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP snmpdx, a SNMP daemon extension which
   ##  can be found at http://www.ossp.org/pkg/tool/snmpdx/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/hwPs.pm
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 hwPs.pm
  --- ossp-pkg/snmpdx/snmpdx.d/hwPs.pm	28 Jul 2004 13:00:59 -0000	1.5
  +++ ossp-pkg/snmpdx/snmpdx.d/hwPs.pm	5 Oct 2005 17:42:13 -0000	1.6
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP snmpdx - SNMP Daemon Extension
  -##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP snmpdx, a SNMP daemon extension which
   ##  can be found at http://www.ossp.org/pkg/tool/snmpdx/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/hwRam.pm
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 hwRam.pm
  --- ossp-pkg/snmpdx/snmpdx.d/hwRam.pm	28 Jul 2004 13:00:59 -0000	1.4
  +++ ossp-pkg/snmpdx/snmpdx.d/hwRam.pm	5 Oct 2005 17:42:13 -0000	1.5
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP snmpdx - SNMP Daemon Extension
  -##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP snmpdx, a SNMP daemon extension which
   ##  can be found at http://www.ossp.org/pkg/tool/snmpdx/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/swBind.pm
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 swBind.pm
  --- ossp-pkg/snmpdx/snmpdx.d/swBind.pm	30 Jul 2004 09:37:04 -0000	1.1
  +++ ossp-pkg/snmpdx/snmpdx.d/swBind.pm	5 Oct 2005 17:42:13 -0000	1.2
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP snmpdx - SNMP Daemon Extension
  -##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP snmpdx, a SNMP daemon extension which
   ##  can be found at http://www.ossp.org/pkg/tool/snmpdx/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/swOp.pm
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 swOp.pm
  --- ossp-pkg/snmpdx/snmpdx.d/swOp.pm	30 Jul 2004 09:31:23 -0000	1.9
  +++ ossp-pkg/snmpdx/snmpdx.d/swOp.pm	5 Oct 2005 17:42:13 -0000	1.10
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP snmpdx - SNMP Daemon Extension
  -##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP snmpdx, a SNMP daemon extension which
   ##  can be found at http://www.ossp.org/pkg/tool/snmpdx/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/swOs.pm
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 swOs.pm
  --- ossp-pkg/snmpdx/snmpdx.d/swOs.pm	10 Sep 2003 15:01:46 -0000	1.2
  +++ ossp-pkg/snmpdx/snmpdx.d/swOs.pm	5 Oct 2005 17:42:13 -0000	1.3
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP snmpdx - SNMP Daemon Extension
  -##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP snmpdx, a SNMP daemon extension which
   ##  can be found at http://www.ossp.org/pkg/tool/snmpdx/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/sysFs.pm
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 sysFs.pm
  --- ossp-pkg/snmpdx/snmpdx.d/sysFs.pm	28 Jul 2004 13:00:59 -0000	1.6
  +++ ossp-pkg/snmpdx/snmpdx.d/sysFs.pm	5 Oct 2005 17:42:13 -0000	1.7
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP snmpdx - SNMP Daemon Extension
  -##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP snmpdx, a SNMP daemon extension which
   ##  can be found at http://www.ossp.org/pkg/tool/snmpdx/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/sysLoad.pm
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 sysLoad.pm
  --- ossp-pkg/snmpdx/snmpdx.d/sysLoad.pm	10 Sep 2003 15:01:46 -0000	1.2
  +++ ossp-pkg/snmpdx/snmpdx.d/sysLoad.pm	5 Oct 2005 17:42:13 -0000	1.3
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP snmpdx - SNMP Daemon Extension
  -##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP snmpdx, a SNMP daemon extension which
   ##  can be found at http://www.ossp.org/pkg/tool/snmpdx/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/sysProc.pm
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 sysProc.pm
  --- ossp-pkg/snmpdx/snmpdx.d/sysProc.pm	10 Sep 2003 15:01:46 -0000	1.2
  +++ ossp-pkg/snmpdx/snmpdx.d/sysProc.pm	5 Oct 2005 17:42:13 -0000	1.3
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP snmpdx - SNMP Daemon Extension
  -##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP snmpdx, a SNMP daemon extension which
   ##  can be found at http://www.ossp.org/pkg/tool/snmpdx/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/sysUptime.pm
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 sysUptime.pm
  --- ossp-pkg/snmpdx/snmpdx.d/sysUptime.pm	10 Sep 2003 15:01:46 -0000	1.2
  +++ ossp-pkg/snmpdx/snmpdx.d/sysUptime.pm	5 Oct 2005 17:42:13 -0000	1.3
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP snmpdx - SNMP Daemon Extension
  -##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP snmpdx, a SNMP daemon extension which
   ##  can be found at http://www.ossp.org/pkg/tool/snmpdx/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/sysUser.pm
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 sysUser.pm
  --- ossp-pkg/snmpdx/snmpdx.d/sysUser.pm	10 Sep 2003 15:01:46 -0000	1.2
  +++ ossp-pkg/snmpdx/snmpdx.d/sysUser.pm	5 Oct 2005 17:42:13 -0000	1.3
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP snmpdx - SNMP Daemon Extension
  -##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP snmpdx, a SNMP daemon extension which
   ##  can be found at http://www.ossp.org/pkg/tool/snmpdx/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/sysVM.pm
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 sysVM.pm
  --- ossp-pkg/snmpdx/snmpdx.d/sysVM.pm	29 Jul 2004 09:48:25 -0000	1.11
  +++ ossp-pkg/snmpdx/snmpdx.d/sysVM.pm	5 Oct 2005 17:42:13 -0000	1.12
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP snmpdx - SNMP Daemon Extension
  -##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP snmpdx, a SNMP daemon extension which
   ##  can be found at http://www.ossp.org/pkg/tool/snmpdx/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 snmpdx.mib
  --- ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib	30 Jul 2004 10:13:57 -0000	1.15
  +++ ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib	5 Oct 2005 17:42:14 -0000	1.16
  @@ -1,8 +1,8 @@
   --
   --  OSSP snmpdx - SNMP Daemon Extension
  ---  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  ---  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  ---  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
  +--  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  +--  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +--  Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>
   --
   --  This file is part of OSSP snmpdx, a SNMP daemon extension which
   --  can be found at http://www.ossp.org/pkg/tool/snmpdx/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.pl
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 snmpdx.pl
  --- ossp-pkg/snmpdx/snmpdx.pl	27 Jan 2005 13:19:45 -0000	1.16
  +++ ossp-pkg/snmpdx/snmpdx.pl	5 Oct 2005 17:42:13 -0000	1.17
  @@ -1,9 +1,9 @@
   #!@PERL@ -w
   ##
   ##  OSSP snmpdx - SNMP Daemon Extension
  -##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP snmpdx, a SNMP daemon extension which
   ##  can be found at http://www.ossp.org/pkg/tool/snmpdx/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.pod
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 snmpdx.pod
  --- ossp-pkg/snmpdx/snmpdx.pod	10 Sep 2003 15:01:44 -0000	1.2
  +++ ossp-pkg/snmpdx/snmpdx.pod	5 Oct 2005 17:42:13 -0000	1.3
  @@ -1,8 +1,8 @@
   ##
   ##  OSSP snmpdx - SNMP Daemon Extension
  -##  Copyright (c) 2003 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2003 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2003 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP snmpdx, a SNMP daemon extension which
   ##  can be found at http://www.ossp.org/pkg/tool/snmpdx/.
  @@ .

From ossp-cvs-owner@ossp.org  Wed Oct  5 20:04:55 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 0AEAD752977; Wed,  5 Oct 2005 20:04:55 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/iselect/ ChangeLog ossp-pkg/iselect/etc/ shtool
Message-Id: <20051005180455.0AEAD752977@mail.ossp.org>
Date: Wed,  5 Oct 2005 20:04:55 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Oct-2005 20:04:54
  Branch: HEAD                             Handle: 2005100519045200

  Modified files:
    ossp-pkg/iselect        ChangeLog
    ossp-pkg/iselect/etc    shtool

  Log:
    upgrade to GNU shtool 2.0.3

  Summary:
    Revision    Changes     Path
    1.4         +4  -0      ossp-pkg/iselect/ChangeLog
    1.3         +84 -61     ossp-pkg/iselect/etc/shtool
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ChangeLog
  --- ossp-pkg/iselect/ChangeLog	11 Sep 2004 15:18:48 -0000	1.3
  +++ ossp-pkg/iselect/ChangeLog	5 Oct 2005 18:04:52 -0000	1.4
  @@ -2,6 +2,10 @@
     C h a n g e L o g   o f   i S e l e c t
     ___________________________________________________________________________
   
  +  Changes between 1.3.0 and 1.4.0
  +  -------------------------------
  +  051005 o upgraded GNU shtool from 2.0.1 to 2.0.3
  +
     Changes between 1.2.0 and 1.3.0
     -------------------------------
     040911 o upgraded GNU shtool from 1.6.2 to 2.0.1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/etc/shtool
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 shtool
  --- ossp-pkg/iselect/etc/shtool	11 Sep 2004 15:18:56 -0000	1.2
  +++ ossp-pkg/iselect/etc/shtool	5 Oct 2005 18:04:52 -0000	1.3
  @@ -1,12 +1,12 @@
   #!/bin/sh
   ##
   ##  GNU shtool -- The GNU Portable Shell Tool
  -##  Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1994-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  See http://www.gnu.org/software/shtool/ for more information.
   ##  See ftp://ftp.gnu.org/gnu/shtool/ for latest version.
   ##
  -##  Version:  2.0.1 (11-Aug-2004)
  +##  Version:  2.0.3 (02-Oct-2005)
   ##  Contents: all available modules
   ##
   
  @@ -65,8 +65,8 @@
       exit 1
   fi
   if [ ".$1" = ".-h" ] || [ ".$1" = ".--help" ]; then
  -    echo "This is GNU shtool, version 2.0.1 (11-Aug-2004)"
  -    echo "Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>"
  +    echo "This is GNU shtool, version 2.0.3 (02-Oct-2005)"
  +    echo "Copyright (c) 1994-2005 Ralf S. Engelschall <rse@engelschall.com>"
       echo "Report bugs to <bug-shtool@gnu.org>"
       echo ''
       echo "Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]"
  @@ -132,7 +132,7 @@
       exit 0
   fi
   if [ ".$1" = ".-v" ] || [ ".$1" = ".--version" ]; then
  -    echo "GNU shtool 2.0.1 (11-Aug-2004)"
  +    echo "GNU shtool 2.0.3 (02-Oct-2005)"
       exit 0
   fi
   if [ ".$1" = ".-r" ] || [ ".$1" = ".--recreate" ]; then
  @@ -571,6 +571,7 @@
   
   #   establish a temporary file on request
   if [ ".$gen_tmpfile" = .yes ]; then
  +    #   create (explicitly) secure temporary directory
       if [ ".$TMPDIR" != . ]; then
           tmpdir="$TMPDIR"
       elif [ ".$TEMPDIR" != . ]; then
  @@ -578,10 +579,19 @@
       else
           tmpdir="/tmp"
       fi
  -    tmpfile="$tmpdir/.shtool.$$"
  -    rm -f $tmpfile >/dev/null 2>&1
  -    touch $tmpfile
  -    chmod 600 $tmpfile
  +    tmpdir="$tmpdir/.shtool.$$"
  +    ( umask 077
  +      rm -rf "$tmpdir" >/dev/null 2>&1 || true
  +      mkdir  "$tmpdir" >/dev/null 2>&1
  +      if [ $? -ne 0 ]; then
  +          echo "$msgprefix:Error: failed to create temporary directory \`$tmpdir'" 1>&2
  +          exit 1
  +      fi
  +    )
  +
  +    #   create (implicitly) secure temporary file
  +    tmpfile="$tmpdir/shtool.tmp"
  +    touch "$tmpfile"
   fi
   
   #   utility function: map string to lower case
  @@ -598,7 +608,7 @@
   shtool_exit () {
       rc="$1"
       if [ ".$gen_tmpfile" = .yes ]; then
  -        rm -f $tmpfile >/dev/null 2>&1 || true
  +        rm -rf "$tmpdir" >/dev/null 2>&1 || true
       fi
       exit $rc
   }
  @@ -612,7 +622,7 @@
   echo )
       ##
       ##  echo -- Print string with optional construct expansion
  -    ##  Copyright (c) 1998-2004 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1998-2005 Ralf S. Engelschall <rse@engelschall.com>
       ##
   
       text="$*"
  @@ -911,7 +921,7 @@
       ##
       ##  mdate -- Pretty-print modification time of a file or dir
       ##  Copyright (c) 1995-1997 Free Software Foundation, Inc.
  -    ##  Copyright (c) 1998-2004 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1998-2005 Ralf S. Engelschall <rse@engelschall.com>
       ##
   
       fod="$1"
  @@ -932,6 +942,14 @@
       LC_ALL=C;  export LC_ALL
       LC_TIME=C; export LC_TIME
   
  +    #   GNU ls changes its time format in response to the TIME_STYLE
  +    #   variable. Since we cannot assume "unset" works, revert this
  +    #   variable to its documented default.
  +    if [ ".$TIME_STYLE" != . ]; then
  +        TIME_STYLE=posix-long-iso
  +        export TIME_STYLE
  +    fi
  +
       #   get the extended ls output of the file or directory.
       if /bin/ls -L /dev/null >/dev/null 2>&1; then
           set - x`/bin/ls -L -l -d $fod`
  @@ -1036,7 +1054,7 @@
   table )
       ##
       ##  table -- Pretty-print a field-separated list as a table
  -    ##  Copyright (c) 1998-2004 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1998-2005 Ralf S. Engelschall <rse@engelschall.com>
       ##
   
       if [ $opt_c -gt 4 ]; then
  @@ -1101,7 +1119,7 @@
   prop )
       ##
       ##  prop -- Display progress with a running propeller
  -    ##  Copyright (c) 1998-2004 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1998-2005 Ralf S. Engelschall <rse@engelschall.com>
       ##
   
       perl=''
  @@ -1147,7 +1165,7 @@
   move )
       ##
       ##  move -- Move files with simultaneous substitution
  -    ##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
       ##
   
       src="$1"
  @@ -1239,7 +1257,7 @@
   install )
       ##
       ##  install -- Install a program, script or datafile
  -    ##  Copyright (c) 1997-2004 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1997-2005 Ralf S. Engelschall <rse@engelschall.com>
       ##
   
       #   special case: "shtool install -d <dir> [...]" internally
  @@ -1402,7 +1420,7 @@
   mkdir )
       ##
       ##  mkdir -- Make one or more directories
  -    ##  Copyright (c) 1996-2004 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1996-2005 Ralf S. Engelschall <rse@engelschall.com>
       ##
   
       errstatus=0
  @@ -1490,7 +1508,7 @@
   mkln )
       ##
       ##  mkln -- Make link with calculation of relative paths
  -    ##  Copyright (c) 1998-2004 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1998-2005 Ralf S. Engelschall <rse@engelschall.com>
       ##
   
       #   determine source(s) and destination
  @@ -1641,7 +1659,7 @@
   mkshadow )
       ##
       ##  mkshadow -- Make a shadow tree through symbolic links
  -    ##  Copyright (c) 1998-2004 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1998-2005 Ralf S. Engelschall <rse@engelschall.com>
       ##
   
       #   source and destination directory
  @@ -1759,7 +1777,7 @@
   fixperm )
       ##
       ##  fixperm -- Fix file permissions inside a source tree
  -    ##  Copyright (c) 1996-2004 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1996-2005 Ralf S. Engelschall <rse@engelschall.com>
       ##
   
       paths="$*"
  @@ -1816,7 +1834,7 @@
   rotate )
       ##
       ##  rotate -- Logfile rotation
  -    ##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
       ##
   
       #   make sure we have at least one file to rotate
  @@ -2180,7 +2198,7 @@
   tarball )
       ##
       ##  tarball -- Roll distribution tarballs
  -    ##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
       ##
   
       srcs="$*"
  @@ -2344,7 +2362,7 @@
   subst )
       ##
       ##  subst -- Apply sed(1) substitution operations
  -    ##  Copyright (c) 2001-2004 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
       ##
   
       #   remember optional list of file(s)
  @@ -2505,7 +2523,7 @@
   platform )
       ##
       ##  platform -- Platform Identification Utility
  -    ##  Copyright (c) 2003-2004 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
       ##
   
       #   option post-processing
  @@ -2599,13 +2617,14 @@
                   i386 ) AC="iX86" ;;
               esac
               AP="${AC}"
  -            AT=`(/sbin/sysctl -n hw.model) 2>&1`
  -            case "${AT}" in
  -                *"Xeon"* | *"Pentium Pro"* | *"Cyrix 6x86MX"* | *"Pentium II"* | *"Pentium III"* | *"Pentium 4"* | *"Celeron"* ) AT="i686" ;;
  -                *"Pentium"* ) AT="i586" ;; *"i486[SD]X"* | *"Cyrix 486"* | *"Cyrix [56]x86"* | *"Blue Lightning" | *"Cyrix 486S/DX" ) AT="i486" ;;
  -                *"i386[SD]X"* | *"NexGen 586"* ) AT="i386" ;;
  -                * ) AT="${AP}" ;;
  -            esac
  +            AT="${AP}"
  +            if [ ".${AT}" = ".iX86" ]; then
  +                case "`(/sbin/sysctl -n hw.model) 2>&1`" in
  +                    *"Xeon"* | *"Pentium Pro"* | *"Cyrix 6x86MX"* | *"Pentium II"* | *"Pentium III"* | *"Pentium 4"* | *"Celeron"* ) AT="i686" ;;
  +                    *"Pentium"* ) AT="i586" ;; *"i486[SD]X"* | *"Cyrix 486"* | *"Cyrix [56]x86"* | *"Blue Lightning" | *"Cyrix 486S/DX" ) AT="i486" ;;
  +                    *"i386[SD]X"* | *"NexGen 586"* ) AT="i386" ;;
  +                esac
  +            fi
               #   determine system
               r=`echo "${UNAME_RELEASE}" |\
                  sed -e 's;[()];;' -e 's/\(-.*\)$/[\1]/'`
  @@ -2671,7 +2690,7 @@
               v_kern=`echo "${UNAME_RELEASE}" |\
                   sed -e 's/^\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/'`
               v_libc=`(strings /lib/libc.so.* | grep '^GLIBC_' | sed -e 's/^GLIBC_//' |\
  -                sort -n | sed -n -e '$p' | sed -e 's/^\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/') 2>/dev/null`
  +                env -i sort -n | sed -n -e '$p' | sed -e 's/^\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/') 2>/dev/null`
               ST="GNU/<Linux >${v_libc}/<${v_kern}>"
               if [ -f /etc/lsb-release ]; then
                   eval `( . /etc/lsb-release
  @@ -2684,7 +2703,7 @@
               if [ ".$SP" = . ]; then
                   for tagfile in x \
                       `cd /etc && \
  -                    /bin/ls *[_-]release *[_-]version 2>/dev/null | \
  +                    /bin/ls *[_-]release *[_-]version 2>/dev/null | env -i sort | \
                       sed -e '/^redhat-release$/d' -e '/^lsb-release$/d'; \
                       echo redhat-release lsb-release`
                   do
  @@ -2705,15 +2724,16 @@
                                   n="<R>ed <H>at <L>inux"
                               fi
                               ;;
  -                        debian      ) n="Debian[ GNU/Linux]"        ;;
  -                        fedora      ) n="<Fedora> Core[ GNU/Linux]" ;;
  -                        suse        ) n="SuSE[ Linux]"              ;;
  -                        mandrake    ) n="Mandrake[ Linux]"          ;;
  -                        gentoo      ) n="Gentoo[ GNU/Linux]"        ;;
  -                        slackware   ) n="Slackware[ Linux]"         ;;
  -                        turbolinux  ) n="TurboLinux"                ;;
  -                        unitedlinux ) n="UnitedLinux"               ;;
  -                        *           ) n="${n}[ GNU/Linux]"          ;;
  +                        debian             ) n="Debian[ GNU/Linux]"        ;;
  +                        ubuntu             ) n="Ubuntu[ GNU/Linux]"        ;;
  +                        fedora             ) n="<Fedora> Core[ GNU/Linux]" ;;
  +                        suse               ) n="SuSE[ Linux]"              ;;
  +                        mandrake*|mandriva ) n="Mandriva[ Linux]"          ;;
  +                        gentoo             ) n="Gentoo[ GNU/Linux]"        ;;
  +                        slackware          ) n="Slackware[ Linux]"         ;;
  +                        turbolinux         ) n="TurboLinux"                ;;
  +                        unitedlinux        ) n="UnitedLinux"               ;;
  +                        *                  ) n="${n}[ GNU/Linux]"          ;;
                       esac
                       case "$n" in
                           *"<"*">"* ) SP="$n <$v>" ;;
  @@ -2868,11 +2888,14 @@
                   if [ ".`/usr/sbin/lsattr -El ${cpu_id} | grep -i powerpc`" != . ]; then
                       cpu_arch=powerpc
                   fi
  +            elif [ -d /QOpenSys ]; then
  +                #   IBM i5/OS (aka OS/400) with PASE (Portable Application Solutions Environment)
  +                cpu_arch=powerpc
               fi
               if [ -x /usr/bin/oslevel ]; then
                   os_level=`/usr/bin/oslevel`
               else
  -                os_level="`uname -r`.`uname -v`"
  +                os_level="`uname -v`.`uname -r`"
               fi
               os_level=`echo "${os_level}" |\
                         sed -e 's;^\([0-9][0-9]*\.[0-9][0-9]*\)\(\.[0-9][0-9]*\)\(.*\)$;<\1>\2[\3];' \
  @@ -2880,7 +2903,7 @@
               AT="${cpu_arch}"
               AP="${AT}"
               AC="${AP}"
  -            ST="[IBM ]AIX ${os_level}"
  +            ST="[IBM ]<AIX >${os_level}"
               SP="${ST}"
               case "${os_level}" in
                   [12]* ) SC="SVR2" ;;
  @@ -3048,7 +3071,7 @@
   arx )
       ##
       ##  arx -- Extended archive command
  -    ##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
       ##
   
       ar_prg="$opt_C"
  @@ -3057,7 +3080,7 @@
       files="$*"
   
       #   walk through the file list and expand archives members
  -    tmpdir=`echo $archive | sed -e 's;[^/]*$;.arx;'`
  +    ar_tmpdir=`echo $archive | sed -e 's;[^/]*$;.arx;'`
       nfiles=''
       if [ ".$files" != . ]; then
           for file in $files; do
  @@ -3067,13 +3090,13 @@
               fi
               case $file in
                   *.a )
  -                    if [ ! -d $tmpdir ]; then
  +                    if [ ! -d $ar_tmpdir ]; then
                           if [ ".$opt_t" = .yes ]; then
  -                            echo "mkdir $tmpdir" 1>&2
  +                            echo "mkdir $ar_tmpdir" 1>&2
                           fi
  -                        mkdir $tmpdir
  +                        mkdir $ar_tmpdir
                       fi
  -                    case $tmpdir in
  +                    case $ar_tmpdir in
                            .arx )
                                from="../$file"
                                ;;
  @@ -3084,16 +3107,16 @@
                                ;;
                       esac
                       if [ ".$opt_t" = .yes ]; then
  -                        echo "(cd $tmpdir && $ar_prg x $from)" 1>&2
  +                        echo "(cd $ar_tmpdir && $ar_prg x $from)" 1>&2
                       fi
  -                    (cd $tmpdir && eval $ar_prg x $from)
  +                    (cd $ar_tmpdir && eval $ar_prg x $from)
                       if [ $? -ne 0 ]; then
                           echo "$msgprefix:Error: member extraction failed for archive: $file" 1>&2
                           shtool_exit 1
                       fi
                       for member in - `eval $ar_prg t $file | sed -e '/_\.SYMDEF/d'`; do
                           [ ".$member" = .- ] && continue
  -                        nfiles="$nfiles $tmpdir/$member"
  +                        nfiles="$nfiles $ar_tmpdir/$member"
                       done
                       ;;
                   * )
  @@ -3114,11 +3137,11 @@
       fi
   
       #   cleanup and die gracefully
  -    if [ -d $tmpdir ]; then
  +    if [ -d $ar_tmpdir ]; then
           if [ ".$opt_t" = .yes ]; then
  -            echo "rm -rf $tmpdir" 1>&2
  +            echo "rm -rf $ar_tmpdir" 1>&2
           fi
  -        rm -rf $tmpdir
  +        rm -rf $ar_tmpdir
       fi
   
       shtool_exit 0
  @@ -3127,7 +3150,7 @@
   slo )
       ##
       ##  slo -- Separate linker options by library class
  -    ##  Copyright (c) 1998-2004 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1998-2005 Ralf S. Engelschall <rse@engelschall.com>
       ##
   
       DIFS="$IFS"
  @@ -3286,7 +3309,7 @@
   scpp )
       ##
       ##  scpp -- Sharing C Pre-Processor
  -    ##  Copyright (c) 1999-2004 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
       ##
   
       srcs="$*"
  @@ -3506,7 +3529,7 @@
   version )
       ##
       ##  version -- Maintain a version information file
  -    ##  Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1994-2005 Ralf S. Engelschall <rse@engelschall.com>
       ##
   
       file="$1"
  @@ -3663,7 +3686,7 @@
           vGNU="${name} ${triple} (${tim})"
           vWeb="${name}/${triple}"
           vSCCS="@(#)${name} ${triple} (${tim})"
  -        vRCS="\$Id: shtool,v 1.2 2004/09/11 15:18:56 rse Exp ${name} ${triple} (${tim}) \$"
  +        vRCS="\$Id: shtool,v 1.3 2005/10/05 18:04:52 rse Exp ${name} ${triple} (${tim}) \$"
   
           #   determine string out of filename
           #   (do NOT try to optimize this in any way because of portability)
  @@ -3758,7 +3781,7 @@
                   echo >>$file "##  [automatically generated and maintained by GNU shtool]"
                   echo >>$file "##"
                   echo >>$file ""
  -                echo >>$file "my \$${prefix}version = {"
  +                echo >>$file "our \$${prefix}version = {"
                   echo >>$file "    'v_hex'   => ${vHex},"
                   echo >>$file "    'v_short' => \"${vShort}\","
                   echo >>$file "    'v_long'  => \"${vLong}\","
  @@ -3801,7 +3824,7 @@
   path )
       ##
       ##  path -- Deal with program paths
  -    ##  Copyright (c) 1998-2004 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1998-2005 Ralf S. Engelschall <rse@engelschall.com>
       ##
   
       namelist="$*"
  @@ .

From ossp-cvs-owner@ossp.org  Wed Oct  5 20:11:21 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 5494C752977; Wed,  5 Oct 2005 20:11:21 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ devtool.conf
Message-Id: <20051005181121.5494C752977@mail.ossp.org>
Date: Wed,  5 Oct 2005 20:11:21 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Oct-2005 20:11:21
  Branch: HEAD                             Handle: 2005100519112100

  Modified files:
    ossp-pkg/snmpdx         devtool.conf

  Log:
    cleanup for new world orders

  Summary:
    Revision    Changes     Path
    1.9         +2  -2      ossp-pkg/snmpdx/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 devtool.conf
  --- ossp-pkg/snmpdx/devtool.conf	5 Oct 2005 17:42:13 -0000	1.8
  +++ ossp-pkg/snmpdx/devtool.conf	5 Oct 2005 18:11:21 -0000	1.9
  @@ -62,8 +62,8 @@
   %upload
       echo "+++ copying to ftp://ftp.ossp.org/pkg/tool/snmpdx/"
       V=`./shtool version -lc -dshort VERSION`
  -    scp snmpdx-${V}.tar.gz master.ossp.org:/e/ossp/ftp/pkg/tool/snmpdx/
  +    scp snmpdx-${V}.tar.gz ossp@master.ossp.org:/v/ossp/ftp/pkg/tool/snmpdx/
   
   %test
  -    /cw/bin/snmpwalk -M /tmp/snmpdx/share/snmpdx:/cw/share/snmp/mibs -cpublic -v2c -mALL dv1 .1.3.6.1.4.1.4007.42
  +    /openpkg/bin/snmpwalk -M /tmp/snmpdx/share/snmpdx:/openpkg/share/snmp/mibs -cpublic -v2c -mALL dv1 .1.3.6.1.4.1.4007.42
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Oct  5 20:14:54 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 1E9EA752977; Wed,  5 Oct 2005 20:14:54 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/tool/ index.wml ossp-w...
Message-Id: <20051005181454.1E9EA752977@mail.ossp.org>
Date: Wed,  5 Oct 2005 20:14:54 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   05-Oct-2005 20:14:53
  Branch: HEAD                             Handle: 2005100519145201

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/snmpdx
                            index.wml

  Log:
    release OSSP snmpdx 0.2.11

  Summary:
    Revision    Changes     Path
    1.137       +1  -0      ossp-web/new/news.txt
    1.51        +1  -1      ossp-web/pkg/tool/index.wml
    1.8         +2  -2      ossp-web/pkg/tool/snmpdx/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.136 -r1.137 news.txt
  --- ossp-web/new/news.txt	5 Oct 2005 08:51:53 -0000	1.136
  +++ ossp-web/new/news.txt	5 Oct 2005 18:14:52 -0000	1.137
  @@ -1,3 +1,4 @@
  +05-Oct-2005: Released T<OSSP snmpdx> 0.2.11
   05-Oct-2005: Released L<OSSP xds> 0.9.3
   03-Oct-2005: Released T<OSSP lmtp2nntp> 1.4.0
   03-Oct-2005: Released T<OSSP svs> 1.0.4
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.50 -r1.51 index.wml
  --- ossp-web/pkg/tool/index.wml	3 Oct 2005 12:40:23 -0000	1.50
  +++ ossp-web/pkg/tool/index.wml	5 Oct 2005 18:14:53 -0000	1.51
  @@ -62,7 +62,7 @@
   	        done=90 stable="none" unstable="none">
     <pkg_item name="snmpdx" longname="OSSP snmpdx" type="tool"
               desc="SNMP Daemon Extension"
  -	        done=80 stable="none" unstable="0.2.10">
  +	        done=80 stable="none" unstable="0.2.11">
     <pkg_item name="quos" longname="OSSP quos" type="tool"
               desc="Query On Steroids"
   	        done=80 stable="none" unstable="0.2.0">
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/snmpdx/index.wml
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 index.wml
  --- ossp-web/pkg/tool/snmpdx/index.wml	3 Oct 2005 12:40:24 -0000	1.7
  +++ ossp-web/pkg/tool/snmpdx/index.wml	5 Oct 2005 18:14:53 -0000	1.8
  @@ -21,7 +21,7 @@
   
   <pkg_status
       stable="none" stable_date="none"
  -    unstable="0.2.10" unstable_date="30-Jul-2004"
  +    unstable="0.2.11" unstable_date="05-Oct-2005"
   	genesis="August 2003" done=80>
   
   <h2>Source</h2>
  @@ -31,7 +31,7 @@
       url=$(FTP_ROOT_URL)/pkg/tool/snmpdx/
       directory=$(FTP_ROOT_DIR)/pkg/tool/snmpdx/
       files="snmpdx-*.tar.gz" 
  -	stable="none" unstable="snmpdx-0.2.10.tar.gz">
  +	stable="none" unstable="snmpdx-0.2.11.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Oct  5 20:19:43 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B28C0752977; Wed,  5 Oct 2005 20:19:43 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/iselect/ ChangeLog README configure configure.in ...
Message-Id: <20051005181943.B28C0752977@mail.ossp.org>
Date: Wed,  5 Oct 2005 20:19:43 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Oct-2005 20:19:43
  Branch: HEAD                             Handle: 2005100519194200

  Modified files:
    ossp-pkg/iselect        ChangeLog README configure configure.in
                            iselect.pod iselect_browse.c iselect_browse.h
                            iselect_getopt.c iselect_getopt.h iselect_global.h
                            iselect_keys.c iselect_keys.h iselect_main.c
                            iselect_readme.c iselect_readme.txt

  Log:
    adjust copyright yearW

  Summary:
    Revision    Changes     Path
    1.5         +1  -0      ossp-pkg/iselect/ChangeLog
    1.4         +1  -1      ossp-pkg/iselect/README
    1.5         +1  -1      ossp-pkg/iselect/configure
    1.5         +2  -2      ossp-pkg/iselect/configure.in
    1.5         +1  -1      ossp-pkg/iselect/iselect.pod
    1.3         +1  -1      ossp-pkg/iselect/iselect_browse.c
    1.3         +1  -1      ossp-pkg/iselect/iselect_browse.h
    1.3         +1  -1      ossp-pkg/iselect/iselect_getopt.c
    1.3         +1  -1      ossp-pkg/iselect/iselect_getopt.h
    1.3         +1  -1      ossp-pkg/iselect/iselect_global.h
    1.4         +1  -1      ossp-pkg/iselect/iselect_keys.c
    1.3         +1  -1      ossp-pkg/iselect/iselect_keys.h
    1.3         +1  -1      ossp-pkg/iselect/iselect_main.c
    1.4         +1  -1      ossp-pkg/iselect/iselect_readme.c
    1.3         +1  -1      ossp-pkg/iselect/iselect_readme.txt
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ChangeLog
  --- ossp-pkg/iselect/ChangeLog	5 Oct 2005 18:04:52 -0000	1.4
  +++ ossp-pkg/iselect/ChangeLog	5 Oct 2005 18:19:42 -0000	1.5
  @@ -5,6 +5,7 @@
     Changes between 1.3.0 and 1.4.0
     -------------------------------
     051005 o upgraded GNU shtool from 2.0.1 to 2.0.3
  +         o adjusted year range in copyright messages
   
     Changes between 1.2.0 and 1.3.0
     -------------------------------
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/README
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 README
  --- ossp-pkg/iselect/README	11 Sep 2004 15:22:32 -0000	1.3
  +++ ossp-pkg/iselect/README	5 Oct 2005 18:19:42 -0000	1.4
  @@ -17,7 +17,7 @@
     The latest release can be found on
     http://www.ossp.org/pkg/tool/iselect/
   
  -  Copyright (c) 1997-2004 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 1997-2005 Ralf S. Engelschall <rse@engelschall.com>
   
     This program is free software; it may be redistributed and/or modified only
     under the terms of the GNU General Public License, which may be found in the
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/configure
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 configure
  --- ossp-pkg/iselect/configure	11 Sep 2004 15:26:21 -0000	1.4
  +++ ossp-pkg/iselect/configure	5 Oct 2005 18:19:42 -0000	1.5
  @@ -1301,7 +1301,7 @@
   T_MD=`$SHTOOL echo -e %B 2>/dev/null`
   T_ME=`$SHTOOL echo -e %b 2>/dev/null`
   echo "${T_MD}Configuring for iSelect `./etc/shtool version -lc -dlong iselect_version.c`${T_ME}"
  -echo "Copyright (c) 1997-2004 Ralf S. Engelschall <rse@engelschall.com>"
  +echo "Copyright (c) 1997-2005 Ralf S. Engelschall <rse@engelschall.com>"
   
             ac_config_headers="$ac_config_headers config_ac.h"
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/configure.in
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 configure.in
  --- ossp-pkg/iselect/configure.in	11 Sep 2004 15:24:05 -0000	1.4
  +++ ossp-pkg/iselect/configure.in	5 Oct 2005 18:19:42 -0000	1.5
  @@ -3,14 +3,14 @@
   dnl ##  Copyright (c) Ralf S. Engelschall <rse@engelschall.com>
   dnl ##
   
  -AC_PREREQ(2.50)dnl
  +AC_PREREQ(2.59)dnl
   AC_REVISION(1.0)dnl
   AC_INIT(README)
   SHTOOL="./etc/shtool"
   T_MD=`$SHTOOL echo -e %B 2>/dev/null`
   T_ME=`$SHTOOL echo -e %b 2>/dev/null`
   echo "${T_MD}Configuring for iSelect `./etc/shtool version -lc -dlong iselect_version.c`${T_ME}"
  -echo "Copyright (c) 1997-2004 Ralf S. Engelschall <rse@engelschall.com>"
  +echo "Copyright (c) 1997-2005 Ralf S. Engelschall <rse@engelschall.com>"
   
   AC_CONFIG_HEADER(config_ac.h)dnl
   AC_PREFIX_DEFAULT(/usr/local)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect.pod
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 iselect.pod
  --- ossp-pkg/iselect/iselect.pod	11 Sep 2004 15:22:32 -0000	1.4
  +++ ossp-pkg/iselect/iselect.pod	5 Oct 2005 18:19:42 -0000	1.5
  @@ -11,7 +11,7 @@
   ##  
   ##  ======================================================================
   ##
  -##  Copyright (c) 1997-2004 Ralf S. Engelschall.
  +##  Copyright (c) 1997-2005 Ralf S. Engelschall.
   ##
   ##  This program is free software; it may be redistributed and/or
   ##  modified only under the terms of the GNU General Public License, 
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect_browse.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 iselect_browse.c
  --- ossp-pkg/iselect/iselect_browse.c	11 Sep 2004 15:18:49 -0000	1.2
  +++ ossp-pkg/iselect/iselect_browse.c	5 Oct 2005 18:19:42 -0000	1.3
  @@ -11,7 +11,7 @@
   **  
   **  ======================================================================
   **
  -**  Copyright (c) 1997-2004 Ralf S. Engelschall.
  +**  Copyright (c) 1997-2005 Ralf S. Engelschall.
   **
   **  This program is free software; it may be redistributed and/or
   **  modified only under the terms of the GNU General Public License, 
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect_browse.h
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 iselect_browse.h
  --- ossp-pkg/iselect/iselect_browse.h	11 Sep 2004 15:18:49 -0000	1.2
  +++ ossp-pkg/iselect/iselect_browse.h	5 Oct 2005 18:19:42 -0000	1.3
  @@ -11,7 +11,7 @@
   **  
   **  ======================================================================
   **
  -**  Copyright (c) 1997-2004 Ralf S. Engelschall.
  +**  Copyright (c) 1997-2005 Ralf S. Engelschall.
   **
   **  This program is free software; it may be redistributed and/or
   **  modified only under the terms of the GNU General Public License, 
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect_getopt.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 iselect_getopt.c
  --- ossp-pkg/iselect/iselect_getopt.c	11 Sep 2004 15:18:49 -0000	1.2
  +++ ossp-pkg/iselect/iselect_getopt.c	5 Oct 2005 18:19:42 -0000	1.3
  @@ -11,7 +11,7 @@
   **  
   **  ======================================================================
   **
  -**  Copyright (c) 1997-2004 Ralf S. Engelschall.
  +**  Copyright (c) 1997-2005 Ralf S. Engelschall.
   **
   **  This program is free software; it may be redistributed and/or
   **  modified only under the terms of the GNU General Public License, 
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect_getopt.h
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 iselect_getopt.h
  --- ossp-pkg/iselect/iselect_getopt.h	11 Sep 2004 15:18:49 -0000	1.2
  +++ ossp-pkg/iselect/iselect_getopt.h	5 Oct 2005 18:19:42 -0000	1.3
  @@ -11,7 +11,7 @@
   **  
   **  ======================================================================
   **
  -**  Copyright (c) 1997-2004 Ralf S. Engelschall.
  +**  Copyright (c) 1997-2005 Ralf S. Engelschall.
   **
   **  This program is free software; it may be redistributed and/or
   **  modified only under the terms of the GNU General Public License, 
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect_global.h
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 iselect_global.h
  --- ossp-pkg/iselect/iselect_global.h	11 Sep 2004 15:18:49 -0000	1.2
  +++ ossp-pkg/iselect/iselect_global.h	5 Oct 2005 18:19:42 -0000	1.3
  @@ -11,7 +11,7 @@
   **  
   **  ======================================================================
   **
  -**  Copyright (c) 1997-2004 Ralf S. Engelschall.
  +**  Copyright (c) 1997-2005 Ralf S. Engelschall.
   **
   **  This program is free software; it may be redistributed and/or
   **  modified only under the terms of the GNU General Public License, 
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect_keys.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 iselect_keys.c
  --- ossp-pkg/iselect/iselect_keys.c	11 Sep 2004 15:18:49 -0000	1.3
  +++ ossp-pkg/iselect/iselect_keys.c	5 Oct 2005 18:19:42 -0000	1.4
  @@ -11,7 +11,7 @@
   **  
   **  ======================================================================
   **
  -**  Copyright (c) 1997-2004 Ralf S. Engelschall.
  +**  Copyright (c) 1997-2005 Ralf S. Engelschall.
   **
   **  This program is free software; it may be redistributed and/or
   **  modified only under the terms of the GNU General Public License, 
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect_keys.h
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 iselect_keys.h
  --- ossp-pkg/iselect/iselect_keys.h	11 Sep 2004 15:18:49 -0000	1.2
  +++ ossp-pkg/iselect/iselect_keys.h	5 Oct 2005 18:19:42 -0000	1.3
  @@ -11,7 +11,7 @@
   **  
   **  ======================================================================
   **
  -**  Copyright (c) 1997-2004 Ralf S. Engelschall.
  +**  Copyright (c) 1997-2005 Ralf S. Engelschall.
   **
   **  This program is free software; it may be redistributed and/or
   **  modified only under the terms of the GNU General Public License, 
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect_main.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 iselect_main.c
  --- ossp-pkg/iselect/iselect_main.c	11 Sep 2004 15:18:49 -0000	1.2
  +++ ossp-pkg/iselect/iselect_main.c	5 Oct 2005 18:19:42 -0000	1.3
  @@ -11,7 +11,7 @@
   **  
   **  ======================================================================
   **
  -**  Copyright (c) 1997-2004 Ralf S. Engelschall.
  +**  Copyright (c) 1997-2005 Ralf S. Engelschall.
   **
   **  This program is free software; it may be redistributed and/or
   **  modified only under the terms of the GNU General Public License, 
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect_readme.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 iselect_readme.c
  --- ossp-pkg/iselect/iselect_readme.c	11 Sep 2004 15:19:59 -0000	1.3
  +++ ossp-pkg/iselect/iselect_readme.c	5 Oct 2005 18:19:42 -0000	1.4
  @@ -22,7 +22,7 @@
   "  The latest release can be found on",
   "  http://www.ossp.org/pkg/tool/iselect/",
   "",
  -"  Copyright (c) 1997-2004 Ralf S. Engelschall <rse@engelschall.com>",
  +"  Copyright (c) 1997-2005 Ralf S. Engelschall <rse@engelschall.com>",
   "",
   "  This program is free software; it may be redistributed and/or modified ",
   "  only under the terms of the GNU General Public License, which may be found ",
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect_readme.txt
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 iselect_readme.txt
  --- ossp-pkg/iselect/iselect_readme.txt	11 Sep 2004 15:18:49 -0000	1.2
  +++ ossp-pkg/iselect/iselect_readme.txt	5 Oct 2005 18:19:42 -0000	1.3
  @@ -17,7 +17,7 @@
     The latest release can be found on
     http://www.ossp.org/pkg/tool/iselect/
   
  -  Copyright (c) 1997-2004 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 1997-2005 Ralf S. Engelschall <rse@engelschall.com>
   
     This program is free software; it may be redistributed and/or modified 
     only under the terms of the GNU General Public License, which may be found 
  @@ .

From ossp-cvs-owner@ossp.org  Wed Oct  5 20:37:20 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 7D805752977; Wed,  5 Oct 2005 20:37:20 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/iselect/ README iselect.1 iselect_readme.c iselec...
Message-Id: <20051005183720.7D805752977@mail.ossp.org>
Date: Wed,  5 Oct 2005 20:37:20 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Oct-2005 20:37:20
  Branch: HEAD                             Handle: 2005100519371900

  Modified files:
    ossp-pkg/iselect        README iselect.1 iselect_readme.c
                            iselect_readme.txt iselect_version.c

  Log:
    bump version before release

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-pkg/iselect/README
    1.6         +3  -3      ossp-pkg/iselect/iselect.1
    1.5         +1  -1      ossp-pkg/iselect/iselect_readme.c
    1.4         +1  -1      ossp-pkg/iselect/iselect_readme.txt
    1.5         +9  -9      ossp-pkg/iselect/iselect_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/README
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 README
  --- ossp-pkg/iselect/README	5 Oct 2005 18:19:42 -0000	1.4
  +++ ossp-pkg/iselect/README	5 Oct 2005 18:37:19 -0000	1.5
  @@ -12,7 +12,7 @@
     as its control script or in batch mode as a pipeline filter (usually
     between grep and the final executing command).   
   
  -  Version 1.3.0 (11-Sep-2004)
  +  Version 1.3.1 (05-Oct-2005)
   
     The latest release can be found on
     http://www.ossp.org/pkg/tool/iselect/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect.1
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 iselect.1
  --- ossp-pkg/iselect/iselect.1	11 Sep 2004 15:24:05 -0000	1.5
  +++ ossp-pkg/iselect/iselect.1	5 Oct 2005 18:37:19 -0000	1.6
  @@ -1,4 +1,4 @@
  -.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
  +.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.3
   .\"
   .\" Standard preamble:
   .\" ========================================================================
  @@ -129,7 +129,7 @@
   .\" ========================================================================
   .\"
   .IX Title "ISELECT 1"
  -.TH ISELECT 1 "2004-09-11" "EN" "Ralf S. Engelschall"
  +.TH ISELECT 1 "2005-10-05" "EN" "Ralf S. Engelschall"
   .SH "NAME"
   iSelect \-\- Interactive Selection Tool
   .SH "SYNOPSIS"
  @@ -155,7 +155,7 @@
   [\fB\-V\fR]
   .SH "VERSION"
   .IX Header "VERSION"
  -1.3.0 (11\-Sep\-2004)
  +1.3.1 (05\-Oct\-2005)
   .SH "DESCRIPTION"
   .IX Header "DESCRIPTION"
   .Sh "Intend"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect_readme.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 iselect_readme.c
  --- ossp-pkg/iselect/iselect_readme.c	5 Oct 2005 18:19:42 -0000	1.4
  +++ ossp-pkg/iselect/iselect_readme.c	5 Oct 2005 18:37:19 -0000	1.5
  @@ -17,7 +17,7 @@
   "  as its control script or in batch mode as a pipeline filter (usually",
   "  between grep and the final executing command).   ",
   "  ",
  -"  Version 1.3.0 (11-Sep-2004)",
  +"  Version 1.3.1 (05-Oct-2005)",
   "",
   "  The latest release can be found on",
   "  http://www.ossp.org/pkg/tool/iselect/",
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect_readme.txt
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 iselect_readme.txt
  --- ossp-pkg/iselect/iselect_readme.txt	5 Oct 2005 18:19:42 -0000	1.3
  +++ ossp-pkg/iselect/iselect_readme.txt	5 Oct 2005 18:37:19 -0000	1.4
  @@ -12,7 +12,7 @@
     as its control script or in batch mode as a pipeline filter (usually
     between grep and the final executing command).   
     
  -  Version 1.3.0 (11-Sep-2004)
  +  Version 1.3.1 (05-Oct-2005)
   
     The latest release can be found on
     http://www.ossp.org/pkg/tool/iselect/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect_version.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 iselect_version.c
  --- ossp-pkg/iselect/iselect_version.c	11 Sep 2004 15:18:49 -0000	1.4
  +++ ossp-pkg/iselect/iselect_version.c	5 Oct 2005 18:37:19 -0000	1.5
  @@ -8,7 +8,7 @@
   #ifndef _ISELECT_VERSION_C_
   #define _ISELECT_VERSION_C_
   
  -#define ISELECT_VERSION 0x103200
  +#define ISELECT_VERSION 0x103201
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _ISELECT_VERSION_C_AS_HEADER_
   
   iselect_version_t iselect_version = {
  -    0x103200,
  -    "1.3.0",
  -    "1.3.0 (11-Sep-2004)",
  -    "This is iSelect, Version 1.3.0 (11-Sep-2004)",
  -    "iSelect 1.3.0 (11-Sep-2004)",
  -    "iSelect/1.3.0",
  -    "@(#)iSelect 1.3.0 (11-Sep-2004)",
  -    "$Id: iselect_version.c,v 1.4 2004/09/11 15:18:49 rse Exp $"
  +    0x103201,
  +    "1.3.1",
  +    "1.3.1 (05-Oct-2005)",
  +    "This is iSelect, Version 1.3.1 (05-Oct-2005)",
  +    "iSelect 1.3.1 (05-Oct-2005)",
  +    "iSelect/1.3.1",
  +    "@(#)iSelect 1.3.1 (05-Oct-2005)",
  +    "$Id: iselect_version.c,v 1.5 2005/10/05 18:37:19 rse Exp $"
   };
   
   #endif /* _ISELECT_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Thu Oct  6 11:16:25 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 3B9297529CC; Thu,  6 Oct 2005 11:16:25 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/petidomo/librfc822/ address.y
Message-Id: <20051006091625.3B9297529CC@mail.ossp.org>
Date: Thu,  6 Oct 2005 11:16:25 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Oct-2005 11:16:25
  Branch: HEAD                             Handle: 2005100610162400

  Modified files:
    ossp-pkg/petidomo/librfc822
                            address.y

  Log:
    fix syntax

  Summary:
    Revision    Changes     Path
    1.5         +6  -5      ossp-pkg/petidomo/librfc822/address.y
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/petidomo/librfc822/address.y
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 address.y
  --- ossp-pkg/petidomo/librfc822/address.y	19 Jan 2001 14:56:35 -0000	1.4
  +++ ossp-pkg/petidomo/librfc822/address.y	6 Oct 2005 09:16:24 -0000	1.5
  @@ -1,6 +1,6 @@
   /*
      $Source: /v/ossp/cvs/ossp-pkg/petidomo/librfc822/address.y,v $
  -   $Revision: 1.4 $
  +   $Revision: 1.5 $
   
      Copyright (C) 2000 by CyberSolutions GmbH, Germany.
   
  @@ -114,6 +114,7 @@
   					  str_join($$,$1,$2); str_join($$,$$,$3);
   					  str_join($$,$$,$4);
   					}
  +;
   
   local:   atom				{ $$ = $1; }
          | atom local			{ str_join($$,$1,$2); }
  @@ -125,10 +126,10 @@
   	| atom dot domain		{ str_join($$,$2,$3); str_join($$,$1,$$); }
   ;
   
  -atom:	  TOK_ATOM			{ str_dup($$,yytext); }
  -dot:	  '.'				{ $$ = (YYSTYPE) "."; }
  -at:	  '@'				{ $$ = (YYSTYPE) "@"; }
  -colon:	  ':'				{ $$ = (YYSTYPE) ":"; }
  +atom:	  TOK_ATOM			{ str_dup($$,yytext); };
  +dot:	  '.'				{ $$ = (YYSTYPE) "."; };
  +at:	  '@'				{ $$ = (YYSTYPE) "@"; };
  +colon:	  ':'				{ $$ = (YYSTYPE) ":"; };
   
   %%
   /***** internal routines *****/
  @@ .

From ossp-cvs-owner@ossp.org  Thu Oct  6 11:16:46 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 6A9F37529CC; Thu,  6 Oct 2005 11:16:46 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/petidomo/ devtool.conf
Message-Id: <20051006091646.6A9F37529CC@mail.ossp.org>
Date: Thu,  6 Oct 2005 11:16:46 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Oct-2005 11:16:46
  Branch: HEAD                             Handle: 2005100610164500

  Modified files:
    ossp-pkg/petidomo       devtool.conf

  Log:
    upgrade build environment

  Summary:
    Revision    Changes     Path
    1.4         +3  -3      ossp-pkg/petidomo/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/petidomo/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.conf
  --- ossp-pkg/petidomo/devtool.conf	19 Mar 2004 15:31:22 -0000	1.3
  +++ ossp-pkg/petidomo/devtool.conf	6 Oct 2005 09:16:45 -0000	1.4
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.2 "1.6.*" all
  -    @autogen libtool  1.5.2 "1.5*"
  -    @autogen autoconf 2.59  "2.5[4-9]*"
  +    @autogen shtool   2.0.3  "2.0.*" all
  +    @autogen libtool  1.5.20 "1.5*"
  +    @autogen autoconf 2.59   "2.5[4-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct  7 12:59:28 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 57DEC752893; Fri,  7 Oct 2005 12:59:28 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/svs/ ChangeLog svs.sh
Message-Id: <20051007105928.57DEC752893@mail.ossp.org>
Date: Fri,  7 Oct 2005 12:59:28 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Oct-2005 12:59:27
  Branch: HEAD                             Handle: 2005100711592700

  Modified files:
    ossp-pkg/svs            ChangeLog svs.sh

  Log:
    Fix diff(3) option fiddling introduced in version 1.0.4

  Summary:
    Revision    Changes     Path
    1.9         +5  -0      ossp-pkg/svs/ChangeLog
    1.10        +17 -13     ossp-pkg/svs/svs.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 ChangeLog
  --- ossp-pkg/svs/ChangeLog	3 Oct 2005 10:33:48 -0000	1.8
  +++ ossp-pkg/svs/ChangeLog	7 Oct 2005 10:59:27 -0000	1.9
  @@ -8,6 +8,11 @@
   
     ChangeLog
   
  +  Changes between 1.0.4 and 1.0.5 (29-Sep-2005 to 07-Oct-2005):
  +
  +    *) Fix diff(3) option fiddling introduced in version 1.0.4
  +       [Ralf S. Engelschall]
  +
     Changes between 1.0.3 and 1.0.4 (18-Aug-2005 to 29-Sep-2005):
   
       *) Try diff(3) with options -U3, -u, -C3 and none (in this order)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/svs.sh
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 svs.sh
  --- ossp-pkg/svs/svs.sh	3 Oct 2005 10:33:48 -0000	1.9
  +++ ossp-pkg/svs/svs.sh	7 Oct 2005 10:59:27 -0000	1.10
  @@ -37,6 +37,20 @@
       exit 1
   fi
   
  +#   helper function for portable creating a file difference
  +do_diff () {
  +    diff -U3 $1 $2 2>/dev/null
  +    if [ $? -gt 1 ]; then
  +        diff -u $1 $2 2>/dev/null
  +        if [ $? -gt 1 ]; then
  +            diff -C3 $1 $2 2>/dev/null
  +            if [ $? -gt 1 ]; then
  +                diff $1 $2
  +            fi
  +        fi
  +    fi
  +}
  +
   #   dispatch into commands
   cmd="$1"
   shift
  @@ -117,28 +131,18 @@
               if [ ! -f $edit ]; then
                   #   special case: removed file
                   echo "Index: $edit"
  -                ( diff -U3 $orig /dev/null 2>/dev/null ||\
  -                  diff -u  $orig /dev/null 2>/dev/null ||\
  -                  diff -C3 $orig /dev/null 2>/dev/null ||\
  -                  diff     $orig /dev/null
  -                ) | sed -e "1s/^--- $orig/--- $edit/"
  +                do_diff $orig /dev/null | sed -e "1s/^--- $orig/--- $edit/"
               elif [ ! -r $orig ] && [ ! -s $orig ]; then
                   #   special case: new file
                   echo "Index: $edit"
  -                diff -U3 /dev/null $edit 2>/dev/null ||\
  -                diff -u  /dev/null $edit 2>/dev/null ||\
  -                diff -C3 /dev/null $edit 2>/dev/null ||\
  -                diff     /dev/null $edit
  +                do_diff /dev/null $edit
               else
                   #   regular case: edited file
                   if cmp $orig $edit >/dev/null 2>&1; then
                       :
                   else
                       echo "Index: $edit"
  -                    diff -U3 $orig $edit 2>/dev/null ||\
  -                    diff -u  $orig $edit 2>/dev/null ||\
  -                    diff -C3 $orig $edit 2>/dev/null ||\
  -                    diff     $orig $edit
  +                    do_diff $orig $edit
                   fi
               fi
           done
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct  7 13:00:36 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 570F0752893; Fri,  7 Oct 2005 13:00:36 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/svs/ svs.pod
Message-Id: <20051007110036.570F0752893@mail.ossp.org>
Date: Fri,  7 Oct 2005 13:00:36 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Oct-2005 13:00:36
  Branch: HEAD                             Handle: 2005100712003600

  Modified files:
    ossp-pkg/svs            svs.pod

  Log:
    fix typo

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/svs/svs.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/svs.pod
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 svs.pod
  --- ossp-pkg/svs/svs.pod	13 Jan 2005 11:14:01 -0000	1.3
  +++ ossp-pkg/svs/svs.pod	7 Oct 2005 11:00:36 -0000	1.4
  @@ -83,7 +83,7 @@
   =item Index style
   
   For portability and consistency reasons it is good if all patches use
  -the same style. This means that all hunks should be preceeded by an
  +the same style. This means that all hunks should be preceded by an
   C<Index> header and that the change is represented with the concise
   I<unified diff> format with at least 3 lines of context.
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct  7 13:02:03 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id DD257752893; Fri,  7 Oct 2005 13:02:02 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/svs/ README VERSION
Message-Id: <20051007110202.DD257752893@mail.ossp.org>
Date: Fri,  7 Oct 2005 13:02:02 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Oct-2005 13:02:02
  Branch: HEAD                             Handle: 2005100712020200

  Modified files:
    ossp-pkg/svs            README VERSION

  Log:
    bump version before release

  Summary:
    Revision    Changes     Path
    1.7         +1  -1      ossp-pkg/svs/README
    1.6         +1  -1      ossp-pkg/svs/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/README
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 README
  --- ossp-pkg/svs/README	3 Oct 2005 10:34:23 -0000	1.6
  +++ ossp-pkg/svs/README	7 Oct 2005 11:02:02 -0000	1.7
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/ \_/ |___/
   
     OSSP svs - Stupid/Silly/Simple Versioning System
  -  Version 1.0.4 (03-Oct-2005)
  +  Version 1.0.5 (07-Oct-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/VERSION
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 VERSION
  --- ossp-pkg/svs/VERSION	3 Oct 2005 10:34:23 -0000	1.5
  +++ ossp-pkg/svs/VERSION	7 Oct 2005 11:02:02 -0000	1.6
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP svs (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP svs, Version 1.0.4 (03-Oct-2005)
  +  This is OSSP svs, Version 1.0.5 (07-Oct-2005)
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct  7 13:12:49 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id C2F6E752893; Fri,  7 Oct 2005 13:12:49 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/tool/ index.wml ossp-w...
Message-Id: <20051007111249.C2F6E752893@mail.ossp.org>
Date: Fri,  7 Oct 2005 13:12:49 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   07-Oct-2005 13:12:49
  Branch: HEAD                             Handle: 2005100712124900

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/svs   index.wml

  Log:
    release OSSP svs 1.0.5

  Summary:
    Revision    Changes     Path
    1.138       +1  -0      ossp-web/new/news.txt
    1.52        +1  -1      ossp-web/pkg/tool/index.wml
    1.6         +2  -2      ossp-web/pkg/tool/svs/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.137 -r1.138 news.txt
  --- ossp-web/new/news.txt	5 Oct 2005 18:14:52 -0000	1.137
  +++ ossp-web/new/news.txt	7 Oct 2005 11:12:49 -0000	1.138
  @@ -1,3 +1,4 @@
  +07-Oct-2005: Released T<OSSP svs> 1.0.5
   05-Oct-2005: Released T<OSSP snmpdx> 0.2.11
   05-Oct-2005: Released L<OSSP xds> 0.9.3
   03-Oct-2005: Released T<OSSP lmtp2nntp> 1.4.0
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.51 -r1.52 index.wml
  --- ossp-web/pkg/tool/index.wml	5 Oct 2005 18:14:53 -0000	1.51
  +++ ossp-web/pkg/tool/index.wml	7 Oct 2005 11:12:49 -0000	1.52
  @@ -23,7 +23,7 @@
   	        done=100 stable="1.1.5" unstable="none">
     <pkg_item name="svs" longname="OSSP svs" type="tool"
               desc="Stupid/Silly/Simple Versioning System"
  -	        done=100 stable="1.0.4" unstable="none">
  +	        done=100 stable="1.0.5" unstable="none">
     <pkg_item name="eperl" longname="OSSP eperl" type="tool"
               desc="Embedded Perl Language"
   	        done=100 stable="2.2.14" unstable="none">
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/svs/index.wml
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 index.wml
  --- ossp-web/pkg/tool/svs/index.wml	3 Oct 2005 12:40:24 -0000	1.5
  +++ ossp-web/pkg/tool/svs/index.wml	7 Oct 2005 11:12:49 -0000	1.6
  @@ -20,7 +20,7 @@
   <h2>Status</h2>
   
   <pkg_status
  -    stable="1.0.4" stable_date="03-Oct-2005"
  +    stable="1.0.5" stable_date="07-Oct-2005"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -31,7 +31,7 @@
       url=$(FTP_ROOT_URL)/pkg/tool/svs/
       directory=$(FTP_ROOT_DIR)/pkg/tool/svs/
       files="svs-*.tar.gz" 
  -	stable="svs-1.0.4.tar.gz" unstable="none">
  +	stable="svs-1.0.5.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct  7 13:39:43 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 5C2DF752893; Fri,  7 Oct 2005 13:39:43 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/svs/ THANKS
Message-Id: <20051007113943.5C2DF752893@mail.ossp.org>
Date: Fri,  7 Oct 2005 13:39:43 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Oct-2005 13:39:43
  Branch: HEAD                             Handle: 2005100712394300

  Modified files:
    ossp-pkg/svs            THANKS

  Log:
    give proper credit

  Summary:
    Revision    Changes     Path
    1.2         +1  -0      ossp-pkg/svs/THANKS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/THANKS
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 THANKS
  --- ossp-pkg/svs/THANKS	14 Dec 2004 19:18:37 -0000	1.1
  +++ ossp-pkg/svs/THANKS	7 Oct 2005 11:39:43 -0000	1.2
  @@ -12,6 +12,7 @@
     stuff, bugfixes, hints etc. (in alphabetical order):
   
     o Thomas Lotterer          <thomas@lotterer.net>
  +  o Steve Weinreich          <steve@weinreich.org>
   
     ...and all other OSSP svs users who gave me feedback but I've forgot.
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Oct  9 10:58:48 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 689BB7529BF; Sun,  9 Oct 2005 10:58:48 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ README
Message-Id: <20051009085848.689BB7529BF@mail.ossp.org>
Date: Sun,  9 Oct 2005 10:58:48 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /v/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   09-Oct-2005 10:58:48
  Branch: HEAD                             Handle: 2005100909584800

  Modified files:
    ossp-pkg/lmtp2nntp      README

  Log:
    correct accompanying descriptive text

  Summary:
    Revision    Changes     Path
    1.44        +1  -1      ossp-pkg/lmtp2nntp/README
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/README
  ============================================================================
  $ cvs diff -u -r1.43 -r1.44 README
  --- ossp-pkg/lmtp2nntp/README	3 Oct 2005 11:33:54 -0000	1.43
  +++ ossp-pkg/lmtp2nntp/README	9 Oct 2005 08:58:48 -0000	1.44
  @@ -12,7 +12,7 @@
     The OSSP lmtp2nntp program is an LMTP service for use in conjunction
     with an MTA (like Sendmail), providing a reliable real-time mail to news
     gateway. Input messages get their headers slightly reformatted to match
  -  Usenet news article format. The article is then posted or feeded into
  +  Usenet news article format. The article is then posted or fed into
     a remote NNTP service (like INN). Delivery must take place immediately
     or the transaction fails. OSSP lmtp2nntp relies on the queuing
     capabilities of the MTA in order to provide a fully reliable service.
  @@ .

From ossp-cvs-owner@ossp.org  Sun Oct  9 23:27:58 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 97BCE7529BF; Sun,  9 Oct 2005 23:27:58 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/tai/ ChangeLog ts.c
Message-Id: <20051009212758.97BCE7529BF@mail.ossp.org>
Date: Sun,  9 Oct 2005 23:27:58 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /v/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   09-Oct-2005 23:27:58
  Branch: HEAD                             Handle: 2005100922275800

  Modified files:
    ossp-pkg/tai            ChangeLog ts.c

  Log:
    Imported varargs portability patch from OpenPKG lmtp2nntp package

  Summary:
    Revision    Changes     Path
    1.2         +21 -0      ossp-pkg/tai/ChangeLog
    1.3         +1  -1      ossp-pkg/tai/ts.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/tai/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 ChangeLog
  --- ossp-pkg/tai/ChangeLog	18 Apr 2002 09:10:45 -0000	1.1.1.1
  +++ ossp-pkg/tai/ChangeLog	9 Oct 2005 21:27:58 -0000	1.2
  @@ -1,4 +1,25 @@
  +   _        ___  ____ ____  ____    _        _ 
  +  |_|_ _   / _ \/ ___/ ___||  _ \  | |_ __ _(_)
  +  _|_||_| | | | \___ \___ \| |_) | | __/ _` | |
  + |_||_|_| | |_| |___) |__) |  __/  | || (_| | |
  +  |_|_|_|  \___/|____/____/|_|      \__\__,_|_|
  +                                                         
  +  OSSP tai -- Temps Atomique International or International Atomic Time
  +
  +  ChangeLog
  +  =========
  +
  +  Changes
  +
  +    *) Imported varargs portability patch from OpenPKG lmtp2nntp package
  +       [Thomas Lotterer <thomas@lotterer.net>]
   
     o Taken FreeBSD-CURRENT's strftime.c/strptime.c as of 17-Apr-2002 and created 
       tai_format.c out of strftime.c and tai_parse.c out of strptime.c
      
  +
  +
  +
  +
  +
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/tai/ts.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ts.c
  --- ossp-pkg/tai/ts.c	31 Jul 2003 07:29:51 -0000	1.2
  +++ ossp-pkg/tai/ts.c	9 Oct 2005 21:27:58 -0000	1.3
  @@ -202,7 +202,7 @@
   
       if (format == NULL)
           return NULL;
  -    ap2 = ap;
  +    va_copy(ap2, ap);
       if ((n = ts_suite_mvxprintf(NULL, 0, format, ap)) == -1)
           return NULL;
       if ((buffer = (char *)malloc(n+1)) == NULL)
  @@ .

From ossp-cvs-owner@ossp.org  Sun Oct  9 23:28:07 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 702A87529BF; Sun,  9 Oct 2005 23:28:07 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ NEWS configure.ac devtool.conf lmtp2nn...
Message-Id: <20051009212807.702A87529BF@mail.ossp.org>
Date: Sun,  9 Oct 2005 23:28:07 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /v/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   09-Oct-2005 23:28:07
  Branch: HEAD                             Handle: 2005100922280700

  Modified files:
    ossp-pkg/lmtp2nntp      NEWS configure.ac devtool.conf lmtp2nntp_msg.c

  Log:
    removal of dormant OSSP tai library

  Summary:
    Revision    Changes     Path
    1.12        +13 -0      ossp-pkg/lmtp2nntp/NEWS
    1.36        +0  -12     ossp-pkg/lmtp2nntp/configure.ac
    1.24        +3  -4      ossp-pkg/lmtp2nntp/devtool.conf
    1.42        +0  -1      ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/NEWS
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 NEWS
  --- ossp-pkg/lmtp2nntp/NEWS	27 Jun 2004 19:49:55 -0000	1.11
  +++ ossp-pkg/lmtp2nntp/NEWS	9 Oct 2005 21:28:07 -0000	1.12
  @@ -10,6 +10,19 @@
   
     - find fine-grained information in the autocreated ChangeLog
   
  +  NEWS for 1.4.1
  +
  +  - removal of dormant OSSP tai library to overcome portability
  +    problems.
  +
  +  NEWS for 1.4
  +
  +  - no change in the main application 
  +
  +  - update development environment and refresh all embedded OSSP
  +    libraries, picking up bug fixes, closing security holes and
  +    improving portability
  +
     NEWS for 1.3
   
     - this is a fully compatible drop-in replacement for lmtp2nntp-1.2
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/configure.ac
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 configure.ac
  --- ossp-pkg/lmtp2nntp/configure.ac	19 Mar 2004 14:52:03 -0000	1.35
  +++ ossp-pkg/lmtp2nntp/configure.ac	9 Oct 2005 21:28:07 -0000	1.36
  @@ -139,17 +139,6 @@
                    LIBS_EXTRA="$LIBS_EXTRA -lpcre"])
   AC_SUBST(SUBDIR_PCRE)
   
  -dnl #   check for OSSP tai library
  -AC_CHECK_EXTLIB([OSSP tai],
  -                tai, tai_create, tai.h,
  -                [SUBDIR_TAI=""],
  -                [SUBDIR_TAI="lib_tai"
  -                 CPPFLAGS="$CPPFLAGS -Ilib_tai"
  -                 CFLAGS="$CFLAGS -Ilib_tai"
  -                 LDFLAGS="$LDFLAGS -Llib_tai/.libs"
  -                 LIBS_EXTRA="$LIBS_EXTRA -ltai"])
  -AC_SUBST(SUBDIR_TAI)
  -
   dnl #   check for external Dmalloc library
   AC_CHECK_EXTLIB([Dmalloc], dmalloc, dmalloc_debug, dmalloc.h,
                   [AC_DEFINE(WITH_DMALLOC, 1, [Define to 1 if building with Dmalloc])])
  @@ -169,7 +158,6 @@
   if test ".$SUBDIR_VAL"  != .; then AC_CONFIG_SUBDIRS(lib_val)  fi
   if test ".$SUBDIR_POPT" != .; then AC_CONFIG_SUBDIRS(lib_popt) fi
   if test ".$SUBDIR_PCRE" != .; then AC_CONFIG_SUBDIRS(lib_pcre) fi
  -if test ".$SUBDIR_TAI"  != .; then AC_CONFIG_SUBDIRS(lib_tai)  fi
   
   dnl #   standard output generation
   AC_CONFIG_HEADERS(config.h)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 devtool.conf
  --- ossp-pkg/lmtp2nntp/devtool.conf	3 Oct 2005 11:36:03 -0000	1.23
  +++ ossp-pkg/lmtp2nntp/devtool.conf	9 Oct 2005 21:28:07 -0000	1.24
  @@ -11,8 +11,7 @@
       BRANCH_VAL="VAL_0_9_4"
       BRANCH_POPT=""
       BRANCH_PCRE=""
  -    BRANCH_TAI="TAI_0_0_0"
  -    for name in ex str l2 sa var val popt pcre tai; do
  +    for name in ex str l2 sa var val popt pcre; do
           release=BRANCH_`echo ${name} | tr [a-z] [A-Z]`
           release=`eval echo \\$${release}`
           if [ ".${release}" = . ]; then
  @@ -39,7 +38,7 @@
       @autogen shtool   2.0.3 "2.0.*" all
       @autogen autoconf 2.59  "2.5[4-9]*"
   
  -    for name in ex str l2 sa var val popt pcre tai; do
  +    for name in ex str l2 sa var val popt pcre; do
           echo "===> lib_${name} (devtool autogen)"
           (cd lib_${name} && ./devtool autogen)
           echo "<=== lib_${name}"
  @@ -49,7 +48,7 @@
       @autoclean shtool
       @autoclean autoconf
   
  -    for name in ex str l2 sa var val popt pcre tai; do
  +    for name in ex str l2 sa var val popt pcre; do
           echo "===> lib_${name} (devtool autoclean)"
           (cd lib_${name} && ./devtool autoclean)
           echo "<=== lib_${name}"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================================
  $ cvs diff -u -r1.41 -r1.42 lmtp2nntp_msg.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	2 Apr 2004 10:38:13 -0000	1.41
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	9 Oct 2005 21:28:07 -0000	1.42
  @@ -32,7 +32,6 @@
   #include "lmtp2nntp_msg.h"
   #include "lmtp2nntp_argz.h"
   #include "lmtp2nntp_common.h" /* only required for logbook() */
  -#include "tai.h"
   #include "str.h"
   
   /* third party */
  @@ .

From ossp-cvs-owner@ossp.org  Sun Oct  9 23:28:46 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id F05CD7529BF; Sun,  9 Oct 2005 23:28:45 +0200 (CEST)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ README lmtp2nntp_version.c
Message-Id: <20051009212845.F05CD7529BF@mail.ossp.org>
Date: Sun,  9 Oct 2005 23:28:45 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /v/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   09-Oct-2005 23:28:45
  Branch: HEAD                             Handle: 2005100922284500

  Modified files:
    ossp-pkg/lmtp2nntp      README lmtp2nntp_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.45        +1  -1      ossp-pkg/lmtp2nntp/README
    1.26        +9  -9      ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/README
  ============================================================================
  $ cvs diff -u -r1.44 -r1.45 README
  --- ossp-pkg/lmtp2nntp/README	9 Oct 2005 08:58:48 -0000	1.44
  +++ ossp-pkg/lmtp2nntp/README	9 Oct 2005 21:28:45 -0000	1.45
  @@ -5,7 +5,7 @@
     |_|_|_| \___/|____/____/|_|    |_|_||_||_|\__| .__/____|_||_|_||_|\__| .__/
                                                  |_|                     |_|
     OSSP lmtp2nntp - Mail to News Gateway
  -  Version 1.4.0 (03-Oct-2005)
  +  Version 1.4.1 (09-Oct-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_version.c
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 lmtp2nntp_version.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	3 Oct 2005 11:33:54 -0000	1.25
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_version.c	9 Oct 2005 21:28:45 -0000	1.26
  @@ -8,7 +8,7 @@
   #ifndef _LMTP2NNTP_VERSION_C_
   #define _LMTP2NNTP_VERSION_C_
   
  -#define LMTP2NNTP_VERSION 0x104200
  +#define LMTP2NNTP_VERSION 0x104201
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _LMTP2NNTP_VERSION_C_AS_HEADER_
   
   lmtp2nntp_version_t lmtp2nntp_version = {
  -    0x104200,
  -    "1.4.0",
  -    "1.4.0 (03-Oct-2005)",
  -    "This is OSSP lmtp2nntp, Version 1.4.0 (03-Oct-2005)",
  -    "OSSP lmtp2nntp 1.4.0 (03-Oct-2005)",
  -    "OSSP lmtp2nntp/1.4.0",
  -    "@(#)OSSP lmtp2nntp 1.4.0 (03-Oct-2005)",
  -    "$Id: OSSP lmtp2nntp 1.4.0 (03-Oct-2005) $"
  +    0x104201,
  +    "1.4.1",
  +    "1.4.1 (09-Oct-2005)",
  +    "This is OSSP lmtp2nntp, Version 1.4.1 (09-Oct-2005)",
  +    "OSSP lmtp2nntp 1.4.1 (09-Oct-2005)",
  +    "OSSP lmtp2nntp/1.4.1",
  +    "@(#)OSSP lmtp2nntp 1.4.1 (09-Oct-2005)",
  +    "$Id: OSSP lmtp2nntp 1.4.1 (09-Oct-2005) $"
   };
   
   #endif /* _LMTP2NNTP_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Sun Oct  9 23:49:27 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id EA3197529BF; Sun,  9 Oct 2005 23:49:26 +0200 (CEST)
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/tool/ index.wml ossp-w...
Message-Id: <20051009214926.EA3197529BF@mail.ossp.org>
Date: Sun,  9 Oct 2005 23:49:26 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   OSSP Project Master
  Root:   /v/ossp/cvs                      Email:  ossp@ossp.org
  Module: ossp-web                         Date:   09-Oct-2005 23:49:26
  Branch: HEAD                             Handle: 2005100922492501

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/lmtp2nntp
                            index.wml

  Log:
    release lmtp2nntp 1.4.1

  Summary:
    Revision    Changes     Path
    1.139       +1  -0      ossp-web/new/news.txt
    1.53        +1  -1      ossp-web/pkg/tool/index.wml
    1.16        +2  -2      ossp-web/pkg/tool/lmtp2nntp/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.138 -r1.139 news.txt
  --- ossp-web/new/news.txt	7 Oct 2005 11:12:49 -0000	1.138
  +++ ossp-web/new/news.txt	9 Oct 2005 21:49:25 -0000	1.139
  @@ -1,3 +1,4 @@
  +09-Oct-2005: Released T<OSSP lmtp2nntp> 1.4.1
   07-Oct-2005: Released T<OSSP svs> 1.0.5
   05-Oct-2005: Released T<OSSP snmpdx> 0.2.11
   05-Oct-2005: Released L<OSSP xds> 0.9.3
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.52 -r1.53 index.wml
  --- ossp-web/pkg/tool/index.wml	7 Oct 2005 11:12:49 -0000	1.52
  +++ ossp-web/pkg/tool/index.wml	9 Oct 2005 21:49:26 -0000	1.53
  @@ -17,7 +17,7 @@
   		    done=100 stable="2.0.3" unstable=none>
     <pkg_item name="lmtp2nntp" longname="OSSP lmtp2nntp" type="tool"
               desc="Real-Time Mail to News Gateway"
  -            done=100 stable="1.4.0" unstable=none>
  +            done=100 stable="1.4.1" unstable=none>
     <pkg_item name="shiela" longname="OSSP shiela" type="tool"
               desc="CVS Access Control and Logging"
   	        done=100 stable="1.1.5" unstable="none">
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/lmtp2nntp/index.wml
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 index.wml
  --- ossp-web/pkg/tool/lmtp2nntp/index.wml	3 Oct 2005 12:40:24 -0000	1.15
  +++ ossp-web/pkg/tool/lmtp2nntp/index.wml	9 Oct 2005 21:49:26 -0000	1.16
  @@ -35,7 +35,7 @@
   
   <pkg_status
       name="lmtp2nntp" assign="thl"
  -    stable="1.4.0"   stable_date="03-Oct-2005"
  +    stable="1.4.1"   stable_date="09-Oct-2005"
       unstable=none    unstable_date=none
   	done=100>
   
  @@ -45,7 +45,7 @@
       cvs=$(CVS_ROOT_URL)/pkg/tool/lmtp2nntp/
       url=$(FTP_ROOT_URL)/pkg/tool/lmtp2nntp/
       directory=$(FTP_ROOT_DIR)/pkg/tool/lmtp2nntp/
  -    files="lmtp2nntp-*.tar.gz" stable="lmtp2nntp-1.4\\\\\\\.0.tar.gz" unstable=none>
  +    files="lmtp2nntp-*.tar.gz" stable="lmtp2nntp-1.4\\\\\\\.1.tar.gz" unstable=none>
   
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Oct 12 10:14:22 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id E82EB752812; Wed, 12 Oct 2005 10:14:21 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog pth_lib.c
Message-Id: <20051012081421.E82EB752812@mail.ossp.org>
Date: Wed, 12 Oct 2005 10:14:21 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Oct-2005 10:14:21
  Branch: HEAD                             Handle: 2005101209142100

  Modified files:
    ossp-pkg/pth            ChangeLog pth_lib.c

  Log:
    Return an error if pth_kill() is called before pth_init().
    
    Submitted by: Martin Kraemer <Martin.Kraemer@Fujitsu-Siemens.com>

  Summary:
    Revision    Changes     Path
    1.640       +5  -0      ossp-pkg/pth/ChangeLog
    1.60        +2  -0      ossp-pkg/pth/pth_lib.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.639 -r1.640 ChangeLog
  --- ossp-pkg/pth/ChangeLog	5 Oct 2005 08:54:31 -0000	1.639
  +++ ossp-pkg/pth/ChangeLog	12 Oct 2005 08:14:21 -0000	1.640
  @@ -19,6 +19,11 @@
        / __/ | |_| |
     __|_____(_)___/_________________________________________________________
                     
  +  Changes between 2.0.5 and 2.0.6 (05-Oct-2005 to xx-xxx-2005)
  +
  +   *) Return an error if pth_kill() is called before pth_init().
  +      [Martin Kraemer <Martin.Kraemer@Fujitsu-Siemens.com>]
  +
     Changes between 2.0.4 and 2.0.5 (18-Feb-2005 to 05-Oct-2005)
   
      *) Upgraded build environment to GNU libtool 1.5.20 and
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_lib.c
  ============================================================================
  $ cvs diff -u -r1.59 -r1.60 pth_lib.c
  --- ossp-pkg/pth/pth_lib.c	31 Dec 2004 19:34:45 -0000	1.59
  +++ ossp-pkg/pth/pth_lib.c	12 Oct 2005 08:14:21 -0000	1.60
  @@ -138,6 +138,8 @@
   /* kill the package internals */
   int pth_kill(void)
   {
  +    if (!pth_initialized)
  +        return pth_error(FALSE, EINVAL);
       if (pth_current != pth_main)
           return pth_error(FALSE, EPERM);
       pth_debug1("pth_kill: enter");
  @@ .

From ossp-cvs-owner@ossp.org  Wed Oct 12 10:24:30 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id C327A752812; Wed, 12 Oct 2005 10:24:30 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str/ ChangeLog THANKS str_parse.c
Message-Id: <20051012082430.C327A752812@mail.ossp.org>
Date: Wed, 12 Oct 2005 10:24:30 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Oct-2005 10:24:30
  Branch: HEAD                             Handle: 2005101209243000

  Modified files:
    ossp-pkg/str            ChangeLog THANKS str_parse.c

  Log:
    Fixed str_parse(3): the va_list argument was incorrectly used
    twice for processing the arguments and hence lead to a
    segmentation faults. It is triggered by calls like
    str_parse(var, "s/^(.+?):(.+)$/$1-%s-$2/", &new, subst);
    
    Submitted by: Vasil Dimov <vd@datamax.bg>

  Summary:
    Revision    Changes     Path
    1.56        +8  -0      ossp-pkg/str/ChangeLog
    1.11        +2  -1      ossp-pkg/str/THANKS
    1.22        +3  -1      ossp-pkg/str/str_parse.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.55 -r1.56 ChangeLog
  --- ossp-pkg/str/ChangeLog	3 Oct 2005 07:40:05 -0000	1.55
  +++ ossp-pkg/str/ChangeLog	12 Oct 2005 08:24:30 -0000	1.56
  @@ -9,6 +9,14 @@
   
    ChangeLog
   
  + Changes between 0.9.11 and 0.9.12 (03-Oct-2005 to 12-Oct-2005):
  +
  +   *) Fixed str_parse(3): the va_list argument was incorrectly used
  +      twice for processing the arguments and hence lead to a
  +      segmentation faults. It is triggered by calls like
  +      str_parse(var, "s/^(.+?):(.+)$/$1-%s-$2/", &new, subst);
  +      [Vasil Dimov <vd@datamax.bg>]
  +
    Changes between 0.9.10 and 0.9.11 (24-Jan-2004 to 03-Oct-2005):
   
      *) Security Fix to str_pcre.c (CAN-2005-2491, partially only)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/THANKS
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 THANKS
  --- ossp-pkg/str/THANKS	11 Feb 2003 08:39:47 -0000	1.10
  +++ ossp-pkg/str/THANKS	12 Oct 2005 08:24:30 -0000	1.11
  @@ -12,6 +12,7 @@
     Credit has to be given to the following people who contributed ideas,
     stuff, bugfixes, hints etc. (in alphabetical order):
   
  +  o Vasil Dimov              <vd@datamax.bg>
     o Brian T. Egleston        <brian@egleston.com>
     o Dean Gaudet              <dgaudet@arctic.org>
     o Ed Griffiths             <edgrif@sanger.ac.uk>
  @@ -23,5 +24,5 @@
     o Peter Simons             <simons@cryp.to>
     o Fritz Zaucker            <zaucker@ee.ethz.ch>
   
  -  ...and all other Str users who gave me feedback but I've forgot...
  +  ...and all other OSSP str users who gave me feedback but I've forgot...
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str_parse.c
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 str_parse.c
  --- ossp-pkg/str/str_parse.c	24 Jan 2005 15:22:19 -0000	1.21
  +++ ossp-pkg/str/str_parse.c	12 Oct 2005 08:24:30 -0000	1.22
  @@ -297,6 +297,7 @@
       char buf2[128];
       char *buf_ptr;
       str_vformat_t sf;
  +    va_list ap_temp;
   
       /*
        * Caching support
  @@ -564,7 +565,8 @@
           sf.data[3].p = (char *)string;
           sf.data[4].p = cap_vec;
           sf.data[5].i = cap_num;
  -        l = str_vformat(&sf, buf_ptr, ap);
  +        va_copy(ap_temp, ap);
  +        l = str_vformat(&sf, buf_ptr, ap_temp);
   
           /* allocate output buffer */
           if ((*cpp = (char *)malloc(l+1)) == NULL) {
  @@ .

From ossp-cvs-owner@ossp.org  Wed Oct 12 10:28:32 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B6134752812; Wed, 12 Oct 2005 10:28:32 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str/ README str_version.c
Message-Id: <20051012082832.B6134752812@mail.ossp.org>
Date: Wed, 12 Oct 2005 10:28:32 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Oct-2005 10:28:32
  Branch: HEAD                             Handle: 2005101209283200

  Modified files:
    ossp-pkg/str            README str_version.c

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.27        +1  -1      ossp-pkg/str/README
    1.20        +9  -9      ossp-pkg/str/str_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/README
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 README
  --- ossp-pkg/str/README	3 Oct 2005 07:35:51 -0000	1.26
  +++ ossp-pkg/str/README	12 Oct 2005 08:28:32 -0000	1.27
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/\__|_|   
   
     OSSP str - String Handling
  -  Version 0.9.11 (03-Oct-2005)
  +  Version 0.9.12 (12-Oct-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str_version.c
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 str_version.c
  --- ossp-pkg/str/str_version.c	3 Oct 2005 07:35:51 -0000	1.19
  +++ ossp-pkg/str/str_version.c	12 Oct 2005 08:28:32 -0000	1.20
  @@ -8,7 +8,7 @@
   #ifndef _STR_VERSION_C_
   #define _STR_VERSION_C_
   
  -#define STR_VERSION 0x00920B
  +#define STR_VERSION 0x00920C
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _STR_VERSION_C_AS_HEADER_
   
   str_version_t str_version = {
  -    0x00920B,
  -    "0.9.11",
  -    "0.9.11 (03-Oct-2005)",
  -    "This is OSSP str, Version 0.9.11 (03-Oct-2005)",
  -    "OSSP str 0.9.11 (03-Oct-2005)",
  -    "OSSP str/0.9.11",
  -    "@(#)OSSP str 0.9.11 (03-Oct-2005)",
  -    "$Id: OSSP str 0.9.11 (03-Oct-2005) $"
  +    0x00920C,
  +    "0.9.12",
  +    "0.9.12 (12-Oct-2005)",
  +    "This is OSSP str, Version 0.9.12 (12-Oct-2005)",
  +    "OSSP str 0.9.12 (12-Oct-2005)",
  +    "OSSP str/0.9.12",
  +    "@(#)OSSP str 0.9.12 (12-Oct-2005)",
  +    "$Id: OSSP str 0.9.12 (12-Oct-2005) $"
   };
   
   #endif /* _STR_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Wed Oct 12 10:32:53 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 7B97E752812; Wed, 12 Oct 2005 10:32:53 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20051012083253.7B97E752812@mail.ossp.org>
Date: Wed, 12 Oct 2005 10:32:53 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   12-Oct-2005 10:32:53
  Branch: HEAD                             Handle: 2005101209325201

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/str    index.wml

  Log:
    release OSSP str 0.9.12

  Summary:
    Revision    Changes     Path
    1.140       +1  -0      ossp-web/new/news.txt
    1.115       +1  -1      ossp-web/pkg/lib/index.wml
    1.12        +2  -2      ossp-web/pkg/lib/str/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.139 -r1.140 news.txt
  --- ossp-web/new/news.txt	9 Oct 2005 21:49:25 -0000	1.139
  +++ ossp-web/new/news.txt	12 Oct 2005 08:32:52 -0000	1.140
  @@ -1,3 +1,4 @@
  +12-Oct-2005: Released L<OSSP str> 0.9.12
   09-Oct-2005: Released T<OSSP lmtp2nntp> 1.4.1
   07-Oct-2005: Released T<OSSP svs> 1.0.5
   05-Oct-2005: Released T<OSSP snmpdx> 0.2.11
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.114 -r1.115 index.wml
  --- ossp-web/pkg/lib/index.wml	5 Oct 2005 08:51:54 -0000	1.114
  +++ ossp-web/pkg/lib/index.wml	12 Oct 2005 08:32:52 -0000	1.115
  @@ -42,7 +42,7 @@
   			done=95 stable=none unstable=0.9.3>
     <pkg_item name="str" longname="OSSP str" type="lib"
               desc="String Handling"
  -			done=95 stable=none unstable=0.9.11>
  +			done=95 stable=none unstable=0.9.12>
     <pkg_item name="l2" longname="OSSP l2" type="lib"
               desc="Flexible Logging"
   			done=95 stable=none unstable=0.9.11>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/str/index.wml
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 index.wml
  --- ossp-web/pkg/lib/str/index.wml	3 Oct 2005 09:39:11 -0000	1.11
  +++ ossp-web/pkg/lib/str/index.wml	12 Oct 2005 08:32:53 -0000	1.12
  @@ -27,7 +27,7 @@
   <pkg_status
       name="str" assign="rse"
       stable="none"    stable_date="none"
  -    unstable="0.9.11" unstable_date="03-Oct-2005"
  +    unstable="0.9.12" unstable_date="12-Oct-2005"
   	done=95>
   
   <h2>Source</h2>
  @@ -37,7 +37,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/str/
       directory=$(FTP_ROOT_DIR)/pkg/lib/str/
       files="str-*.tar.gz" 
  -	stable="none" unstable="str-0.9.11.tar.gz">
  +	stable="none" unstable="str-0.9.12.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Oct 12 10:50:24 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id A1D16752812; Wed, 12 Oct 2005 10:50:24 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm/ ChangeLog devtool.conf
Message-Id: <20051012085024.A1D16752812@mail.ossp.org>
Date: Wed, 12 Oct 2005 10:50:24 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Oct-2005 10:50:24
  Branch: HEAD                             Handle: 2005101209502400

  Modified files:
    ossp-pkg/mm             ChangeLog devtool.conf

  Log:
    Upgraded build environment to GNU shtool 2.0.3

  Summary:
    Revision    Changes     Path
    1.52        +5  -0      ossp-pkg/mm/ChangeLog
    1.9         +1  -1      ossp-pkg/mm/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.51 -r1.52 ChangeLog
  --- ossp-pkg/mm/ChangeLog	2 Sep 2005 20:00:46 -0000	1.51
  +++ ossp-pkg/mm/ChangeLog	12 Oct 2005 08:50:24 -0000	1.52
  @@ -9,6 +9,11 @@
    ChangeLog
    =========
   
  + Changes between 1.4.0 and 1.4.1 (02-Sep-2005 to 12-Oct-2005)
  +
  +  *) Upgraded build environment to GNU shtool 2.0.3
  +     [Ralf S. Engelschall]
  +
    Changes between 1.3.1 and 1.4.0 (12-Sep-2003 to 02-Sep-2005)
   
     *) Optimize insertion of free memory chunks by merging with
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 devtool.conf
  --- ossp-pkg/mm/devtool.conf	2 Sep 2005 19:59:06 -0000	1.8
  +++ ossp-pkg/mm/devtool.conf	12 Oct 2005 08:50:24 -0000	1.9
  @@ -3,7 +3,7 @@
   ##
   
   %autogen
  -    @autogen shtool   2.0.2  "2.0.*" all
  +    @autogen shtool   2.0.3  "2.0.*" all
       @autogen libtool  1.5.20 "1.5*"
       @autogen autoconf 2.59   "2.5[3-9]*"
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Oct 12 14:31:28 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B9106752812; Wed, 12 Oct 2005 14:31:28 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog sh.version
Message-Id: <20051012123128.B9106752812@mail.ossp.org>
Date: Wed, 12 Oct 2005 14:31:28 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Oct-2005 14:31:28
  Branch: HEAD                             Handle: 2005101213312800

  Modified files:
    ossp-pkg/shtool         ChangeLog sh.version

  Log:
    Use internal util_{lower,upper} functions in "shtool version".

  Summary:
    Revision    Changes     Path
    1.219       +5  -0      ossp-pkg/shtool/ChangeLog
    1.40        +2  -5      ossp-pkg/shtool/sh.version
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.218 -r1.219 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	2 Oct 2005 14:23:12 -0000	1.218
  +++ ossp-pkg/shtool/ChangeLog	12 Oct 2005 12:31:28 -0000	1.219
  @@ -9,6 +9,11 @@
   
    ChangeLog
   
  + Changes between 2.0.3 and 2.0.4 (02-Oct-2005 to xx-xxx-2005):
  +
  +   *) Use internal util_{lower,upper} functions in "shtool version".
  +      [Ralf S. Engelschall]
  +
    Changes between 2.0.2 and 2.0.3 (15-Jun-2005 to 02-Oct-2005):
   
      *) "shtool mdate" needs to (un|re)set TIME_STYLE, as GNU coreutils'
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.version
  ============================================================================
  $ cvs diff -u -r1.39 -r1.40 sh.version
  --- ossp-pkg/shtool/sh.version	31 Aug 2005 07:24:56 -0000	1.39
  +++ ossp-pkg/shtool/sh.version	12 Oct 2005 12:31:28 -0000	1.40
  @@ -191,13 +191,10 @@
   
       #   determine string out of filename
       #   (do NOT try to optimize this in any way because of portability)
  -    filestr=`echo $file |\
  -             tr 'abcdefghijklmnopqrstuvwxyz./%+' \
  -                'ABCDEFGHIJKLMNOPQRSTUVWXYZ____' | sed -e 's/-/_/g'`
  +    filestr=`echo $file | util_upper | tr './%+' '____' | sed -e 's/-/_/g'`
   
       #   generate uppercase prefix
  -    prefixupper=`echo $prefix |\
  -                 tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
  +    prefixupper=`echo $prefix | util_upper`
   
       #   create the version file according the the selected language
       echo "new version: ${vLong}"
  @@ .

From ossp-cvs-owner@ossp.org  Wed Oct 12 14:34:51 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 3A6BF752812; Wed, 12 Oct 2005 14:34:51 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog THANKS shtoolize.in
Message-Id: <20051012123451.3A6BF752812@mail.ossp.org>
Date: Wed, 12 Oct 2005 14:34:51 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Oct-2005 14:34:51
  Branch: HEAD                             Handle: 2005101213345000

  Modified files:
    ossp-pkg/shtool         ChangeLog THANKS shtoolize.in

  Log:
    Enhance portability even more by maximizing Bourne Shell
    compatibility under ZSH and BASH and avoiding NLS dependencies.
    
    Hint by: R. N. de Arenas Coronado <privado@dervishd.net>

  Summary:
    Revision    Changes     Path
    1.220       +4  -0      ossp-pkg/shtool/ChangeLog
    1.36        +1  -0      ossp-pkg/shtool/THANKS
    1.36        +25 -0      ossp-pkg/shtool/shtoolize.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.219 -r1.220 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	12 Oct 2005 12:31:28 -0000	1.219
  +++ ossp-pkg/shtool/ChangeLog	12 Oct 2005 12:34:50 -0000	1.220
  @@ -11,6 +11,10 @@
   
    Changes between 2.0.3 and 2.0.4 (02-Oct-2005 to xx-xxx-2005):
   
  +   *) Enhance portability even more by maximizing Bourne Shell
  +      compatibility under ZSH and BASH and avoiding NLS dependencies.
  +      [R. N. de Arenas Coronado <privado@dervishd.net>]
  +
      *) Use internal util_{lower,upper} functions in "shtool version".
         [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/THANKS
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 THANKS
  --- ossp-pkg/shtool/THANKS	2 Oct 2005 14:23:12 -0000	1.35
  +++ ossp-pkg/shtool/THANKS	12 Oct 2005 12:34:50 -0000	1.36
  @@ -15,6 +15,7 @@
     o Denis Barbier            <barbier@imacs.polytechnique.fr>
     o Marcus Boerger           <marcus.boerger@t-online.de>
     o Bill Campbell            <bill@celestial.com>
  +  o R. N. de Arenas Coronado <privado@dervishd.net>
     o Paul Eggert              <eggert@twinsun.com>
     o Alan Eldridge            <alane@geeksrus.net>
     o Michael van Elst         <mlelstv@serpens.de>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtoolize.in
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 shtoolize.in
  --- ossp-pkg/shtool/shtoolize.in	15 Jun 2005 08:14:36 -0000	1.35
  +++ ossp-pkg/shtool/shtoolize.in	12 Oct 2005 12:34:50 -0000	1.36
  @@ -389,6 +389,31 @@
   ${overview}
   ##
   
  +#   maximum Bourne-Shell compatibility
  +if [ ".\$ZSH_VERSION" != . ] && (emulate sh) >/dev/null 2>&1; then
  +    #   reconfigure zsh(1)
  +    emulate sh
  +    NULLCMD=:
  +    alias -g '\${1+"\$@"}'='"\$@"'
  +elif [ ".\$BASH_VERSION" != . ] && (set -o posix) >/dev/null 2>&1; then
  +    #   reconfigure bash(1)
  +    set -o posix
  +fi
  +
  +#   maximum independence of NLS nuisances
  +for var in \\
  +    LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \\
  +    LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \\
  +    LC_TELEPHONE LC_TIME
  +do
  +    if (set +x; test -z "`(eval \$var=C; export \$var) 2>&1`"); then
  +        eval \$var=C; export \$var
  +    else
  +        unset \$var
  +    fi
  +done
  +
  +#   initial command line handling
   if [ \$# -eq 0 ]; then
       echo "\$0:Error: invalid command line" 1>&2
       echo "\$0:Hint:  run \\`\$0 -h' for usage" 1>&2
  @@ .

From ossp-cvs-owner@ossp.org  Wed Oct 12 14:39:18 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 0A7E5752812; Wed, 12 Oct 2005 14:39:18 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ shtoolize.in
Message-Id: <20051012123918.0A7E5752812@mail.ossp.org>
Date: Wed, 12 Oct 2005 14:39:18 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Oct-2005 14:39:18
  Branch: HEAD                             Handle: 2005101213391700

  Modified files:
    ossp-pkg/shtool         shtoolize.in

  Log:
    make a few quotes more consistent

  Summary:
    Revision    Changes     Path
    1.37        +3  -3      ossp-pkg/shtool/shtoolize.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtoolize.in
  ============================================================================
  $ cvs diff -u -r1.36 -r1.37 shtoolize.in
  --- ossp-pkg/shtool/shtoolize.in	12 Oct 2005 12:34:50 -0000	1.36
  +++ ossp-pkg/shtool/shtoolize.in	12 Oct 2005 12:39:17 -0000	1.37
  @@ -421,10 +421,10 @@
   fi
   if [ ".\$1" = ".-h" ] || [ ".\$1" = ".--help" ]; then
       echo "This is GNU shtool, version ${version}"
  -    echo "Copyright (c) 1994-2005 Ralf S. Engelschall <rse\@engelschall.com>"
  -    echo "Report bugs to <bug-shtool\@gnu.org>"
  +    echo 'Copyright (c) 1994-2005 Ralf S. Engelschall <rse\@engelschall.com>'
  +    echo 'Report bugs to <bug-shtool\@gnu.org>'
       echo ''
  -    echo "Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]"
  +    echo 'Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]'
       echo ''
       echo 'Available global <options>:'
       echo '  -v, --version   display shtool version information'
  @@ .

From ossp-cvs-owner@ossp.org  Wed Oct 12 14:42:05 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 23F71752812; Wed, 12 Oct 2005 14:42:05 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20051012124205.23F71752812@mail.ossp.org>
Date: Wed, 12 Oct 2005 14:42:05 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   12-Oct-2005 14:42:05
  Branch: HEAD                             Handle: 2005101213420400

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/pth    index.wml

  Log:
    sync OSSP pth with GNU pth

  Summary:
    Revision    Changes     Path
    1.141       +2  -0      ossp-web/new/news.txt
    1.116       +1  -1      ossp-web/pkg/lib/index.wml
    1.15        +2  -2      ossp-web/pkg/lib/pth/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.140 -r1.141 news.txt
  --- ossp-web/new/news.txt	12 Oct 2005 08:32:52 -0000	1.140
  +++ ossp-web/new/news.txt	12 Oct 2005 12:42:04 -0000	1.141
  @@ -1,6 +1,7 @@
   12-Oct-2005: Released L<OSSP str> 0.9.12
   09-Oct-2005: Released T<OSSP lmtp2nntp> 1.4.1
   07-Oct-2005: Released T<OSSP svs> 1.0.5
  +05-Oct-2005: Released L<GNU pth> 2.0.5
   05-Oct-2005: Released T<OSSP snmpdx> 0.2.11
   05-Oct-2005: Released L<OSSP xds> 0.9.3
   03-Oct-2005: Released T<OSSP lmtp2nntp> 1.4.0
  @@ -24,6 +25,7 @@
   18-Aug-2005: Released T<OSSP svs> 1.0.3
   15-Jun-2005: Released T<OSSP shtool> 2.0.2
   02-Jun-2005: Released L<OSSP xds> 0.9.2
  +18-Feb-2005: Released L<GNU pth> 2.0.4
   18-Feb-2005: Released L<OSSP fsl> 1.6.0
   18-Feb-2005: Released L<OSSP cfg> 0.9.9
   18-Feb-2005: Released L<OSSP l2> 0.9.10
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.115 -r1.116 index.wml
  --- ossp-web/pkg/lib/index.wml	12 Oct 2005 08:32:52 -0000	1.115
  +++ ossp-web/pkg/lib/index.wml	12 Oct 2005 12:42:04 -0000	1.116
  @@ -15,7 +15,7 @@
   <pkg_list>
     <pkg_item name="pth" longname="GNU pth" type="lib"
               desc="Portable Threads"
  -			done=100 stable=2.0.3 unstable=none>
  +			done=100 stable=2.0.5 unstable=none>
     <pkg_item name="mm" longname="OSSP mm" type="lib"
               desc="Shared Memory Allocation"
   			done=100 stable=1.4.0 unstable=none>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/pth/index.wml
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 index.wml
  --- ossp-web/pkg/lib/pth/index.wml	3 Dec 2004 17:16:05 -0000	1.14
  +++ ossp-web/pkg/lib/pth/index.wml	12 Oct 2005 12:42:04 -0000	1.15
  @@ -61,7 +61,7 @@
   
   <pkg_status
       name="pth" assign="rse"
  -    stable="2.0.3" stable_date="03-Dec-2004"
  +    stable="2.0.5" stable_date="05-Oct-2005"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -72,7 +72,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/pth/
       directory=$(FTP_ROOT_DIR)/pkg/lib/pth/
       files="pth-*.tar.gz" 
  -	stable="pth-2\\\\\\\.0\\\\\\\.3\\\\\\\.tar\.gz" unstable="none">
  +	stable="pth-2\\\\\\\.0\\\\\\\.5\\\\\\\.tar\.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Oct 19 12:56:18 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id DCD557529DB; Wed, 19 Oct 2005 12:56:17 +0200 (CEST)
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/com/ sponsors.wml
Message-Id: <20051019105617.DCD557529DB@mail.ossp.org>
Date: Wed, 19 Oct 2005 12:56:17 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   OSSP Project Master
  Root:   /v/ossp/cvs                      Email:  ossp@ossp.org
  Module: ossp-web                         Date:   19-Oct-2005 12:56:17
  Branch: HEAD                             Handle: 2005101911561700

  Modified files:
    ossp-web/com            sponsors.wml

  Log:
    dignify sponsors

  Summary:
    Revision    Changes     Path
    1.11        +7  -3      ossp-web/com/sponsors.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/com/sponsors.wml
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 sponsors.wml
  --- ossp-web/com/sponsors.wml	26 Apr 2004 14:39:57 -0000	1.10
  +++ ossp-web/com/sponsors.wml	19 Oct 2005 10:56:17 -0000	1.11
  @@ -34,10 +34,14 @@
   resources worth USD $1,000 and more.
   
   <ul>
  -  <li><a href="http://www.engelschall.com/"><b>Ralf S. Engelschall</b></a> (1998-2004)<br>
  -      (Domain Registration, System Administration, Hardware)
  +  <li><a href="http://www.engelschall.com/"><b>Ralf S. Engelschall</b></a> (1998-2005)<br>
  +      (Domain Registration, System Administration, Hardware, Financial Sponsoring)
  +  <li><a href="http://thomas.lotterer.net/"><b>Thomas Lotterer</b></a> (2004-2005)<br>
  +      (Hardware)
     <li><a href="http://www.sdm.de/"><b>sd&m software design & management AG</b></a> (1998)<br>
         (Computing Resources, Network Resources, Manpower) 
  +  <li><a href="http://www.bauernhofurlaub-ostallgaeu.de/"><b>Eva Lachenmayer, Bauernhofurlaub im Allgäu</b></a> (2004-2005)<br>
  +      (Financial Sponsoring)
     <li><a href="http://www.sco.com/"><b>The SCO Group</b></a> (2003)<br>
         (Porting Software Platform UnixWare v7.1.3 & SDK) 
   </ul>
  @@ -48,7 +52,7 @@
   resources worth USD $100 and more.
   
   <ul>
  -   <li><a href="http://www.bauernhofurlaub-ostallgaeu.de/"><b>Eva Lachenmayer, Bauernhofurlaub im Allgäu</b></a> (2004)
  +   <li><a href="http://www.agenturwinkler.com/"><b>Agentur Winkler, Werbeartikel</b></a> (2004)
      <li><a href="http://www.set-die-agentur.de/"><b>Markus Lenk, Set - Die Agentur</b></a> (2004)
      <li><a href="http://www.abakus-internet-marketing.de/"><b>ABAKUS Internet Marketing</b></a> (2003)
      <li><a href="http://www.southmedia.de/"><b>Jan Piotrowski, southmedia</b></a> (2003)
  @@ .

From ossp-cvs-owner@ossp.org  Sat Oct 22 12:33:19 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id A2FFA7529C5; Sat, 22 Oct 2005 12:33:19 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ lmtp2nntp_msg.c
Message-Id: <20051022103319.A2FFA7529C5@mail.ossp.org>
Date: Sat, 22 Oct 2005 12:33:19 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Oct-2005 12:33:19
  Branch: HEAD                             Handle: 2005102211331900

  Modified files:
    ossp-pkg/lmtp2nntp      lmtp2nntp_msg.c

  Log:
    we require <time.h> for time(3)

  Summary:
    Revision    Changes     Path
    1.43        +1  -0      ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c
  ============================================================================
  $ cvs diff -u -r1.42 -r1.43 lmtp2nntp_msg.c
  --- ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	9 Oct 2005 21:28:07 -0000	1.42
  +++ ossp-pkg/lmtp2nntp/lmtp2nntp_msg.c	22 Oct 2005 10:33:19 -0000	1.43
  @@ -28,6 +28,7 @@
   
   #include <stdlib.h>
   #include <stdio.h>
  +#include <time.h>
   
   #include "lmtp2nntp_msg.h"
   #include "lmtp2nntp_argz.h"
  @@ .

From ossp-cvs-owner@ossp.org  Sat Oct 22 12:34:05 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 134A97529C5; Sat, 22 Oct 2005 12:34:05 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/lmtp2nntp/ configure.ac
Message-Id: <20051022103405.134A97529C5@mail.ossp.org>
Date: Sat, 22 Oct 2005 12:34:05 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Oct-2005 12:34:05
  Branch: HEAD                             Handle: 2005102211340400

  Modified files:
    ossp-pkg/lmtp2nntp      configure.ac

  Log:
    make sure local libraries are really picked up before external ones
    (found by CPPFLAGS, LDFLAGS, etc)

  Summary:
    Revision    Changes     Path
    1.37        +24 -24     ossp-pkg/lmtp2nntp/configure.ac
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/lmtp2nntp/configure.ac
  ============================================================================
  $ cvs diff -u -r1.36 -r1.37 configure.ac
  --- ossp-pkg/lmtp2nntp/configure.ac	9 Oct 2005 21:28:07 -0000	1.36
  +++ ossp-pkg/lmtp2nntp/configure.ac	22 Oct 2005 10:34:04 -0000	1.37
  @@ -56,9 +56,9 @@
                   ex, __ex_ctx, ex.h,
                   [SUBDIR_EX=""],
                   [SUBDIR_EX="lib_ex"
  -                 CPPFLAGS="$CPPFLAGS -Ilib_ex"
  -                 CFLAGS="$CFLAGS -Ilib_ex"
  -                 LDFLAGS="$LDFLAGS -Llib_ex/.libs"
  +                 CPPFLAGS="-Ilib_ex $CPPFLAGS"
  +                 CFLAGS="-Ilib_ex $CFLAGS"
  +                 LDFLAGS="-Llib_ex/.libs $LDFLAGS"
                    LIBS_EXTRA="$LIBS_EXTRA -lex"])
   AC_SUBST(SUBDIR_EX)
   
  @@ -67,9 +67,9 @@
                   str, str_parse, str.h,
                   [SUBDIR_STR=""],
                   [SUBDIR_STR="lib_str"
  -                 CPPFLAGS="$CPPFLAGS -Ilib_str"
  -                 CFLAGS="$CFLAGS -Ilib_str"
  -                 LDFLAGS="$LDFLAGS -Llib_str/.libs"
  +                 CPPFLAGS="-Ilib_str $CPPFLAGS"
  +                 CFLAGS="-Ilib_str $CFLAGS"
  +                 LDFLAGS="-Llib_str/.libs $LDFLAGS"
                    LIBS_EXTRA="$LIBS_EXTRA -lstr"])
   AC_SUBST(SUBDIR_STR)
   
  @@ -78,9 +78,9 @@
                   l2, l2_stream_log, l2.h,
                   [SUBDIR_L2=""],
                   [SUBDIR_L2="lib_l2"
  -                 CPPFLAGS="$CPPFLAGS -Ilib_l2"
  -                 CFLAGS="$CFLAGS -Ilib_l2"
  -                 LDFLAGS="$LDFLAGS -Llib_l2/.libs"
  +                 CPPFLAGS="-Ilib_l2 $CPPFLAGS"
  +                 CFLAGS="-Ilib_l2 $CFLAGS"
  +                 LDFLAGS="-Llib_l2/.libs $LDFLAGS"
                    LIBS_EXTRA="$LIBS_EXTRA -ll2"])
   AC_SUBST(SUBDIR_L2)
   
  @@ -89,9 +89,9 @@
                   sa, sa_create, sa.h,
                   [SUBDIR_SA=""],
                   [SUBDIR_SA="lib_sa"
  -                 CPPFLAGS="$CPPFLAGS -Ilib_sa"
  -                 CFLAGS="$CFLAGS -Ilib_sa"
  -                 LDFLAGS="$LDFLAGS -Llib_sa/.libs"
  +                 CPPFLAGS="-Ilib_sa $CPPFLAGS"
  +                 CFLAGS="-Ilib_sa $CFLAGS"
  +                 LDFLAGS="-Llib_sa/.libs $LDFLAGS"
                    LIBS_EXTRA="$LIBS_EXTRA -lsa"])
   AC_SUBST(SUBDIR_SA)
   
  @@ -100,9 +100,9 @@
                   var, var_expand, var.h,
                   [SUBDIR_VAR=""],
                   [SUBDIR_VAR="lib_var"
  -                 CPPFLAGS="$CPPFLAGS -Ilib_var"
  -                 CFLAGS="$CFLAGS -Ilib_var"
  -                 LDFLAGS="$LDFLAGS -Llib_var/.libs"
  +                 CPPFLAGS="-Ilib_var $CPPFLAGS"
  +                 CFLAGS="-Ilib_var $CFLAGS"
  +                 LDFLAGS="-Llib_var/.libs $LDFLAGS"
                    LIBS_EXTRA="$LIBS_EXTRA -lvar"])
   AC_SUBST(SUBDIR_VAR)
   
  @@ -111,9 +111,9 @@
                   val, val_create, val.h,
                   [SUBDIR_VAL=""],
                   [SUBDIR_VAL="lib_val"
  -                 CPPFLAGS="$CPPFLAGS -Ilib_val"
  -                 CFLAGS="$CFLAGS -Ilib_val"
  -                 LDFLAGS="$LDFLAGS -Llib_val/.libs"
  +                 CPPFLAGS="-Ilib_val $CPPFLAGS"
  +                 CFLAGS="-Ilib_val $CFLAGS"
  +                 LDFLAGS="-Llib_val/.libs $LDFLAGS"
                    LIBS_EXTRA="$LIBS_EXTRA -lval"])
   AC_SUBST(SUBDIR_VAL)
   
  @@ -122,9 +122,9 @@
                   popt, popt_getcontext, popt.h,
                   [SUBDIR_POPT=""],
                   [SUBDIR_POPT="lib_popt"
  -                 CPPFLAGS="$CPPFLAGS -Ilib_popt"
  -                 CFLAGS="$CFLAGS -Ilib_popt"
  -                 LDFLAGS="$LDFLAGS -Llib_popt/.libs"
  +                 CPPFLAGS="-Ilib_popt $CPPFLAGS"
  +                 CFLAGS="-Ilib_popt $CFLAGS"
  +                 LDFLAGS="-Llib_popt/.libs $LDFLAGS"
                    LIBS_EXTRA="$LIBS_EXTRA -lpopt"])
   AC_SUBST(SUBDIR_POPT)
   
  @@ -133,9 +133,9 @@
                   pcre, pcre_compile, pcre.h,
                   [SUBDIR_PCRE=""],
                   [SUBDIR_PCRE="lib_pcre"
  -                 CPPFLAGS="$CPPFLAGS -Ilib_pcre"
  -                 CFLAGS="$CFLAGS -Ilib_pcre"
  -                 LDFLAGS="$LDFLAGS -Llib_pcre/.libs"
  +                 CPPFLAGS="-Ilib_pcre $CPPFLAGS"
  +                 CFLAGS="-Ilib_pcre $CFLAGS"
  +                 LDFLAGS="-Llib_pcre/.libs $LDFLAGS"
                    LIBS_EXTRA="$LIBS_EXTRA -lpcre"])
   AC_SUBST(SUBDIR_PCRE)
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Oct 30 10:38:22 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 5DDE3752920; Sun, 30 Oct 2005 10:38:22 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog devtool.conf
Message-Id: <20051030093822.5DDE3752920@mail.ossp.org>
Date: Sun, 30 Oct 2005 10:38:22 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Oct-2005 10:38:22
  Branch: HEAD                             Handle: 2005103009382101

  Modified files:
    ossp-pkg/uuid           ChangeLog devtool.conf

  Log:
    Upgrade to GNU shtool 2.0.3

  Summary:
    Revision    Changes     Path
    1.95        +3  -0      ossp-pkg/uuid/ChangeLog
    1.22        +1  -1      ossp-pkg/uuid/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.94 -r1.95 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	25 Sep 2005 11:09:11 -0000	1.94
  +++ ossp-pkg/uuid/ChangeLog	30 Oct 2005 09:38:21 -0000	1.95
  @@ -12,6 +12,9 @@
     For a more brief summary please have a look at the NEWS file.
   
     Changes between 1.3.1 and 1.3.2 (24-Sep-2005 to xx-xxx-2005)
  +
  +   o Upgrade to GNU shtool 2.0.3
  +     [Ralf S. Engelschall]
      
      o Consistently use "return" in uuid++.cc
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 devtool.conf
  --- ossp-pkg/uuid/devtool.conf	24 Sep 2005 10:35:49 -0000	1.21
  +++ ossp-pkg/uuid/devtool.conf	30 Oct 2005 09:38:22 -0000	1.22
  @@ -3,7 +3,7 @@
   ##
   
   %autogen
  -    @autogen shtool   2.0.2  "2.0.*" all
  +    @autogen shtool   2.0.3  "2.0.*" all
       @autogen libtool  1.5.20 "1.5*"
       @autogen autoconf 2.59   "2.5[3-9]*"
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov  2 22:47:11 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 7E502752920; Wed,  2 Nov 2005 22:47:11 +0100 (CET)
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/com/ sponsors.wml
Message-Id: <20051102214711.7E502752920@mail.ossp.org>
Date: Wed,  2 Nov 2005 22:47:11 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   OSSP Project Master
  Root:   /v/ossp/cvs                      Email:  ossp@ossp.org
  Module: ossp-web                         Date:   02-Nov-2005 22:47:11
  Branch: HEAD                             Handle: 2005110221470900

  Modified files:
    ossp-web/com            sponsors.wml

  Log:
    adjust sponsor URL

  Summary:
    Revision    Changes     Path
    1.12        +1  -1      ossp-web/com/sponsors.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/com/sponsors.wml
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 sponsors.wml
  --- ossp-web/com/sponsors.wml	19 Oct 2005 10:56:17 -0000	1.11
  +++ ossp-web/com/sponsors.wml	2 Nov 2005 21:47:09 -0000	1.12
  @@ -36,7 +36,7 @@
   <ul>
     <li><a href="http://www.engelschall.com/"><b>Ralf S. Engelschall</b></a> (1998-2005)<br>
         (Domain Registration, System Administration, Hardware, Financial Sponsoring)
  -  <li><a href="http://thomas.lotterer.net/"><b>Thomas Lotterer</b></a> (2004-2005)<br>
  +  <li><a href="http://www.lotterer.net/thomas/"><b>Thomas Lotterer</b></a> (2004-2005)<br>
         (Hardware)
     <li><a href="http://www.sdm.de/"><b>sd&m software design & management AG</b></a> (1998)<br>
         (Computing Resources, Network Resources, Manpower) 
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov  9 17:02:09 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id A492B753193; Wed,  9 Nov 2005 17:02:08 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.main.pl
Message-Id: <20051109160208.A492B753193@mail.ossp.org>
Date: Wed,  9 Nov 2005 17:02:08 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Nov-2005 17:02:08
  Branch: HEAD                             Handle: 2005110916020700

  Modified files:
    ossp-pkg/ase            ase.cgi.main.pl

  Log:
    fix name under CGI::Session 4.0 world order

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-pkg/ase/ase.cgi.main.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	29 Aug 2005 17:35:58 -0000	1.4
  +++ ossp-pkg/ase/ase.cgi.main.pl	9 Nov 2005 16:02:07 -0000	1.5
  @@ -78,7 +78,7 @@
       #   establish session object
       my $sid = ($cgi->cookie("sid") || undef);
       my $session = new CGI::Session(
  -        "driver:DB_File;serializer:Storable;id:UUID", $sid,
  +        "driver:DB_File;serializer:Storable;id:uuid", $sid,
           { Directory => $cfg->{-path_vardir}, FileName => "ase.sdb" }
       );
       $session->expires("+1h");
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov  9 17:20:30 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 59E2F753195; Wed,  9 Nov 2005 17:20:30 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.main.pl ase.sql
Message-Id: <20051109162030.59E2F753195@mail.ossp.org>
Date: Wed,  9 Nov 2005 17:20:30 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Nov-2005 17:20:30
  Branch: HEAD                             Handle: 2005110916203000

  Modified files:
    ossp-pkg/ase            ase.cgi.main.pl ase.sql

  Log:
    CGI::Session::Driver::sqlite now works, so switch to using it and
    provide a minimum embed canvas mode

  Summary:
    Revision    Changes     Path
    1.6         +25 -14     ossp-pkg/ase/ase.cgi.main.pl
    1.2         +11 -1      ossp-pkg/ase/ase.sql
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	9 Nov 2005 16:02:07 -0000	1.5
  +++ ossp-pkg/ase/ase.cgi.main.pl	9 Nov 2005 16:20:30 -0000	1.6
  @@ -52,18 +52,29 @@
       #   establish HTML output object
       my $html = new String::Divert;
       $html->folder('{#%s#}', '\{#([a-zA-Z_][a-zA-Z0-9_-]*)#\}');
  -    my $txt < IO::All::io($cfg->{-path_datdir}."/ase.html")
  -        or die "unable to read HTML skeleton file \"".$cfg->{-path_datdir}."/ase.html"."\"";
  -    $txt =~ s/\%HEAD\%/$html->folder("head")/se;
  -    $txt =~ s/\%BODY\%/"<div class=\"ase\">\n".$html->folder("body")."<\/div>\n"/se;
  -    my $adjust_url = sub {
  -        my ($self, $url) = @_;
  -        return ($url =~ m|^[^\/:]+$| ? $self->url(-mode => "loader", -name => $url) : $url);
  -    };
  -    $txt =~ s/(\s+(?:href|src)=")([^"]+)/$1.&$adjust_url($self, $2)/sge;
  -    $html->append($txt);
  -    $html->divert("body");
  -    $html->overload(1);
  +    if (($cgi->param("canvas") || "") eq 'embed') {
  +        #   embedded canvas mode
  +        $html->overload(1);
  +        $html .= "<div class=\"ase\">\n";
  +        $html .= $html->folder("body");
  +        $html .= "</div>\n";
  +        $html->divert("body");
  +    }
  +    else {
  +        #   standalone canvas mode
  +        my $txt < IO::All::io($cfg->{-path_datdir}."/ase.html")
  +            or die "unable to read HTML skeleton file \"".$cfg->{-path_datdir}."/ase.html"."\"";
  +        $txt =~ s/\%HEAD\%/$html->folder("head")/se;
  +        $txt =~ s/\%BODY\%/"<div class=\"ase\">\n".$html->folder("body")."<\/div>\n"/se;
  +        my $adjust_url = sub {
  +            my ($self, $url) = @_;
  +            return ($url =~ m|^[^\/:]+$| ? $self->url(-mode => "loader", -name => $url) : $url);
  +        };
  +        $txt =~ s/(\s+(?:href|src)=")([^"]+)/$1.&$adjust_url($self, $2)/sge;
  +        $html->append($txt);
  +        $html->divert("body");
  +        $html->overload(1);
  +    }
       $self->param(-html => $html);
   
       #   establish database object
  @@ -78,8 +89,8 @@
       #   establish session object
       my $sid = ($cgi->cookie("sid") || undef);
       my $session = new CGI::Session(
  -        "driver:DB_File;serializer:Storable;id:uuid", $sid,
  -        { Directory => $cfg->{-path_vardir}, FileName => "ase.sdb" }
  +        "driver:sqlite;serializer:Storable;id:uuid", $sid,
  +        { Handle => $dbi, TableName => 'ase_sessions' }
       );
       $session->expires("+1h");
       $self->param(-session => $session);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.sql
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ase.sql
  --- ossp-pkg/ase/ase.sql	22 Apr 2005 15:47:08 -0000	1.1
  +++ ossp-pkg/ase/ase.sql	9 Nov 2005 16:20:30 -0000	1.2
  @@ -254,7 +254,7 @@
                                  -- [+123.50]
   );
   
  ---  Temporary Security Codes
  +--  Temporary User Interface Security Codes
   CREATE TABLE ase_scode (
       sc_uuid                    TEXT NOT NULL,
                                  -- Scode UUID
  @@ -267,3 +267,13 @@
                                  -- [20050225000000]
   );
   
  +-- Temporary User Interface Sessions
  +CREATE TABLE ase_sessions (
  +    id                         CHAR(32) NOT NULL PRIMARY KEY,
  +                               -- Session Identifier (OSSP::uuid based)
  +                               -- [75468374-8721-11d9-bee4-0002a5489f14]
  +    a_session                  TEXT NOT NULL
  +                               -- Session Data (Storage based)
  +                               -- [XXXXXXX...]
  +);
  +
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov  9 17:46:11 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 3D9F2753195; Wed,  9 Nov 2005 17:46:11 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ Makefile
Message-Id: <20051109164611.3D9F2753195@mail.ossp.org>
Date: Wed,  9 Nov 2005 17:46:11 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Nov-2005 17:46:11
  Branch: HEAD                             Handle: 2005110916461000

  Modified files:
    ossp-pkg/ase            Makefile

  Log:
    .sdb file is gone

  Summary:
    Revision    Changes     Path
    1.3         +2  -3      ossp-pkg/ase/Makefile
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/Makefile
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 Makefile
  --- ossp-pkg/ase/Makefile	29 Aug 2005 08:24:50 -0000	1.2
  +++ ossp-pkg/ase/Makefile	9 Nov 2005 16:46:10 -0000	1.3
  @@ -2,9 +2,8 @@
   ase.db: ase.sql
   	rm -f ase.db
   	sqlite3 ase.db <ase.sql
  -	touch ase.sdb
  -	chmod a+rw ase.db ase.sdb
  +	chmod a+rw ase.db
   
   clean:
  -	-rm -f ase.db ase.sdb
  +	-rm -f ase.db
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov  9 17:46:43 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 6DDF4753193; Wed,  9 Nov 2005 17:46:43 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi ase.cgi.enroll.pl ase.cgi.login.pl a...
Message-Id: <20051109164643.6DDF4753193@mail.ossp.org>
Date: Wed,  9 Nov 2005 17:46:43 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Nov-2005 17:46:43
  Branch: HEAD                             Handle: 2005110916464102

  Modified files:
    ossp-pkg/ase            ase.cgi ase.cgi.enroll.pl ase.cgi.login.pl
                            ase.cgi.main.pl

  Log:
    DB_File is no longer needed and replace home-brewn switchto() function
    with forward() from CGI::Application::Plugin::Forward

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-pkg/ase/ase.cgi
    1.3         +3  -3      ossp-pkg/ase/ase.cgi.enroll.pl
    1.4         +7  -7      ossp-pkg/ase/ase.cgi.login.pl
    1.7         +2  -12     ossp-pkg/ase/ase.cgi.main.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ase.cgi
  --- ossp-pkg/ase/ase.cgi	29 Aug 2005 13:13:09 -0000	1.4
  +++ ossp-pkg/ase/ase.cgi	9 Nov 2005 16:46:41 -0000	1.5
  @@ -48,7 +48,6 @@
   use GD;                                 # from OpenPKG "perl-gd"
   use DBI;                                # from OpenPKG "perl-dbi"
   use DBD::SQLite;                        # from OpenPKG "perl-dbi" (with_dbd_sqlite=yes)
  -use DB_File;                            # from OpenPKG "perl-db"
   use Data::Dumper;                       # from OpenPKG "perl"
   use Storable;                           # from OpenPKG "perl"
   use String::Divert;                     # from OpenPKG "perl-util"
  @@ -64,6 +63,7 @@
   use CGI;                                # from OpenPKG "perl-www"
   use CGI::Cookie;                        # from OpenPKG "perl-www"
   use CGI::Application;                   # from OpenPKG "perl-www"
  +use CGI::Application::Plugin::Forward;  # from OpenPKG "perl-www"
   use CGI::Session;                       # from OpenPKG "perl-www"
   use CGI::FormBuilder;                   # from OpenPKG "perl-www"
   use CGI::GuruMeditation ("OSSP ase");   # from OpenPKG "perl-www"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	29 Aug 2005 12:43:35 -0000	1.2
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	9 Nov 2005 16:46:42 -0000	1.3
  @@ -192,7 +192,7 @@
   
       #   make sure we are called correctly
       if (defined($cgi->param("button.cancel"))) {
  -        return $self->switchto("login");
  +        return $self->forward("login");
       }
       elsif (not defined($cgi->param("button.enroll"))) {
           die "unable to determine action";
  @@ -245,7 +245,7 @@
   
       #   redirect to enrollment screen if errors occurred
       if ($error) {
  -        return $self->switchto("enrollment");
  +        return $self->forward("enrollment");
       }
   
       #   generate membership UUID
  @@ -290,7 +290,7 @@
           "\n";
       $Mail::Sendmail::mailcfg{"smtp"} = [qw(localhost mail)];
       Mail::Sendmail::sendmail(
  -        To      => "rse\@engelschall.com\n", #$address,
  +        To      => "openpkg\@openpkg.org\n", #$address,
           From    => "OpenPKG Foundation Affiliation Service Environment <ase\@localhost>\n", # FIXME
           Subject => "OpenPKG Foundation Membership Enrollment\n",
           Message => $mail,
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	29 Aug 2005 15:23:51 -0000	1.3
  +++ ossp-pkg/ase/ase.cgi.login.pl	9 Nov 2005 16:46:43 -0000	1.4
  @@ -154,11 +154,11 @@
   
       if (defined($cgi->param("button.enrollment"))) {
           #   go to enrollment screen
  -        return $self->switchto("enrollment");
  +        return $self->forward("enrollment");
       }
       elsif (defined($cgi->param("button.recovery"))) {
           #   go to recovery screen
  -        return $self->switchto("recovery");
  +        return $self->forward("recovery");
       }
       elsif (not defined($cgi->param("button.login"))) {
           #   unknown action
  @@ -172,7 +172,7 @@
       #   lookup member in database 
       if ($login eq '') {
           $cgi->param("login.error", "Empty login");
  -        return $self->switchto("login");
  +        return $self->forward("login");
       }
       my $sth = $dbi->prepare(
           "SELECT * FROM ase_member" .
  @@ -182,7 +182,7 @@
       my $rec = $sth->fetchrow_hashref();
       if (not defined($rec)) {
           $cgi->param("login.error", "Unknown login");
  -        return $self->switchto("login");
  +        return $self->forward("login");
       }
   
       #   detect special case of administrator login
  @@ -210,12 +210,12 @@
       if (not $admin_ok) {
           if ($password eq '') {
               $cgi->param("login.error", "Empty password");
  -            return $self->switchto("login");
  +            return $self->forward("login");
           }
           my $pw = $self->makepasswords($password);
           if ($pw->{-sha1} ne $rec->{'me_access_pw_sha1'}) {
               $cgi->param("login.error", "Incorrect Password");
  -            return $self->switchto("login");
  +            return $self->forward("login");
           }
       }
   
  @@ -224,7 +224,7 @@
       $self->logbook("login by ".$rec->{'me_address'}); 
   
       #   go to menu
  -    return $self->switchto("menu-overview");
  +    return $self->forward("menu-overview");
   }
   
   1;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	9 Nov 2005 16:20:30 -0000	1.6
  +++ ossp-pkg/ase/ase.cgi.main.pl	9 Nov 2005 16:46:43 -0000	1.7
  @@ -26,6 +26,7 @@
   
   package ASE;
   use base 'CGI::Application';
  +use CGI::Application::Plugin::Forward;
   use strict;
   use warnings;
   
  @@ -52,7 +53,7 @@
       #   establish HTML output object
       my $html = new String::Divert;
       $html->folder('{#%s#}', '\{#([a-zA-Z_][a-zA-Z0-9_-]*)#\}');
  -    if (($cgi->param("canvas") || "") eq 'embed') {
  +    if (defined($cgi->param("canvas")) and $cgi->param("canvas") eq 'embed') {
           #   embedded canvas mode
           $html->overload(1);
           $html .= "<div class=\"ase\">\n";
  @@ -210,17 +211,6 @@
       return;
   }
   
  -#   run-mode switching
  -sub switchto ($$;@) {
  -    my ($self, $mode, @args) = @_;
  -    my $modes = $self->param(-modes);
  -    if (not defined($modes->{$mode})) {
  -        die "cannot switch to unknown mode \"$mode\"";
  -    }
  -    my $method = $modes->{$mode}->{-method};
  -    return $self->$method($self, @args);
  -}
  -
   #   application error handling hook
   sub error {
       my ($self, $error) = @_;
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov  9 19:10:12 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 0ABCA753196; Wed,  9 Nov 2005 19:10:12 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO
Message-Id: <20051109181012.0ABCA753196@mail.ossp.org>
Date: Wed,  9 Nov 2005 19:10:12 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Nov-2005 19:10:12
  Branch: HEAD                             Handle: 2005110918101100

  Modified files:
    ossp-pkg/ase            TODO

  Log:
    Ok, I give up, both modules do not work as expected

  Summary:
    Revision    Changes     Path
    1.4         +1  -0      ossp-pkg/ase/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 TODO
  --- ossp-pkg/ase/TODO	29 Aug 2005 19:55:24 -0000	1.3
  +++ ossp-pkg/ase/TODO	9 Nov 2005 18:10:11 -0000	1.4
  @@ -1,3 +1,4 @@
   - add OSSP::cfg based ase.cfg for external file referencing & embedded texts & mailing
   - add support to ase CLI for initial creation of database (use in OpenPKG ase.spec:%post)
   - add INSTALL document which shows how to link with webserver
  +- CGI::GuruMeditation and CGI::Carp do not work under Apache/mod_perl
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov  9 19:28:23 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 2A280753196; Wed,  9 Nov 2005 19:28:23 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.scode.pl ase.html
Message-Id: <20051109182823.2A280753196@mail.ossp.org>
Date: Wed,  9 Nov 2005 19:28:23 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Nov-2005 19:28:23
  Branch: HEAD                             Handle: 2005110918282200

  Modified files:
    ossp-pkg/ase            ase.cgi.scode.pl ase.html

  Log:
    small cosmetics

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/ase/ase.cgi.scode.pl
    1.3         +3  -0      ossp-pkg/ase/ase.html
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.scode.pl
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ase.cgi.scode.pl
  --- ossp-pkg/ase/ase.cgi.scode.pl	29 Aug 2005 12:43:35 -0000	1.2
  +++ ossp-pkg/ase/ase.cgi.scode.pl	9 Nov 2005 18:28:22 -0000	1.3
  @@ -88,7 +88,7 @@
       my $c_bd1 = $im->colorAllocate(&hex2rgb("999999"));
       my $c_bd2 = $im->colorAllocate(&hex2rgb("cccccc"));
       my $c_ln  = $im->colorAllocate(&hex2rgb("dddddd"));
  -    my $c_tx  = $im->colorAllocate(&hex2rgb("888888"));
  +    my $c_tx  = $im->colorAllocate(&hex2rgb("666666"));
       $im->fill(0, 0, $c_bg);
       for (my $i = 5; $i < $im_length; $i += 5) {
           $im->line($i, 0, $i, 24, $c_ln);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.html
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ase.html
  --- ossp-pkg/ase/ase.html	29 Aug 2005 17:35:58 -0000	1.2
  +++ ossp-pkg/ase/ase.html	9 Nov 2005 18:28:22 -0000	1.3
  @@ -4,6 +4,9 @@
     <head>
       <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
       <link rel="stylesheet" type="text/css" href="ase.css"/>
  +    <style type="text/css">
  +      body { margin-left: 50px; }
  +    </style>
       %HEAD%
     </head>
     <body>
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov  9 23:49:01 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id A8B7A753196; Wed,  9 Nov 2005 23:49:01 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi ase.cgi.main.pl ase.cgi.rpc.pl
Message-Id: <20051109224901.A8B7A753196@mail.ossp.org>
Date: Wed,  9 Nov 2005 23:49:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Nov-2005 23:49:01
  Branch: HEAD                             Handle: 2005110922490100

  Added files:
    ossp-pkg/ase            ase.cgi.rpc.pl
  Modified files:
    ossp-pkg/ase            ase.cgi ase.cgi.main.pl

  Log:
    add initial cut for RPC

  Summary:
    Revision    Changes     Path
    1.6         +1  -0      ossp-pkg/ase/ase.cgi
    1.8         +1  -0      ossp-pkg/ase/ase.cgi.main.pl
    1.1         +105 -0     ossp-pkg/ase/ase.cgi.rpc.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ase.cgi
  --- ossp-pkg/ase/ase.cgi	9 Nov 2005 16:46:41 -0000	1.5
  +++ ossp-pkg/ase/ase.cgi	9 Nov 2005 22:49:01 -0000	1.6
  @@ -72,6 +72,7 @@
   my $dir = $cfg->{-path_libdir};
   require "$dir/ase.cgi.main.pl";         # application main framework
   require "$dir/ase.cgi.loader.pl";       # application file loader
  +require "$dir/ase.cgi.rpc.pl";          # application remote procedure call
   require "$dir/ase.cgi.util.pl";         # application utility functions
   require "$dir/ase.cgi.scode.pl";        # application security code functions
   require "$dir/ase.cgi.login.pl";        # application workflow: login
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	9 Nov 2005 16:46:43 -0000	1.7
  +++ ossp-pkg/ase/ase.cgi.main.pl	9 Nov 2005 22:49:01 -0000	1.8
  @@ -102,6 +102,7 @@
           'error'              => { -login => 0, -method => \&error                     },
           'scode'              => { -login => 0, -method => \&mode_scode_render         },
           'loader'             => { -login => 0, -method => \&mode_loader               },
  +        'rpc'                => { -login => 0, -method => \&mode_rpc                  },
   
           #   login modes
           'login'              => { -login => 0, -method => \&mode_login_screen         },
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.rpc.pl
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ase.cgi.rpc.pl
  --- /dev/null	2005-11-09 23:48:45 +0100
  +++ ase.cgi.rpc.pl	2005-11-09 23:49:01 +0100
  @@ -0,0 +1,105 @@
  +##
  +##  OSSP ase -- Affiliation Service Environment
  +##  Copyright (c) 2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2005 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP ase, a service environment for managing
  +##  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  +##
  +##  This program is free software; you can redistribute it and/or modify
  +##  it under the terms of the GNU General Public License as published by
  +##  the Free Software Foundation; either version 2 of the License, or
  +##  (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this program; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  ase.cgi.rpc.pl: remote procedure call
  +##
  +
  +package ASE;
  +use base 'CGI::Application';
  +use strict;
  +use warnings;
  +
  +#   run-time mode: "rpc"
  +sub mode_rpc {
  +    my $self = shift;
  +    my $cfg  = $self->param(-cfg);
  +    my $cgi  = $self->param(-cgi);
  +    my $dbi  = $self->param(-dbi);
  +    my $session = $self->param(-session);
  +
  +    my $method = $cgi->param("method") || "login";
  +
  +    if ($method eq "login") {
  +        #   parameter sanity checking
  +        my $rpc_id             = $cgi->param("id")             || "ase";
  +        my $rpc_canvas_mark    = $cgi->param("canvas_mark")    || "<!-- ASE -->";
  +        my $rpc_canvas_adjust  = $cgi->param("canvas_adjust")  || "yes";
  +        my $rpc_canvas_caching = $cgi->param("canvas_caching") || "no";
  +        my $rpc_canvas_url     = $cgi->param("canvas")         || "";
  +        my $rpc_return_url     = $cgi->param("return");
  +        die "no or invalid return URL given"
  +            if (not defined($rpc_return_url) or $rpc_return_url !~ m|https?://.+|);
  +
  +        #   store parameters into session
  +        $session->param("rpc_id",             $rpc_id);
  +        $session->param("rpc_canvas_mark",    $rpc_canvas_mark);
  +        $session->param("rpc_canvas_adjust",  $rpc_canvas_adjust);
  +        $session->param("rpc_canvas_caching", $rpc_canvas_caching);
  +        $session->param("rpc_canvas_url",     $rpc_canvas_url);
  +        $session->param("rpc_return_url",     $rpc_return_url);
  +
  +        #   redirect to login screen (to clear URL)
  +        return $self->redirect($self->url(-mode => "login"));
  +    }
  +
  +    elsif ($method eq "info") {
  +        #   parameter sanity checking
  +        my $sid = $cgi->param("sid");
  +        die "no or invalid SID given" if (not defined($sid));
  +
  +        #   retrieve session information
  +        my $session = CGI::Session->load(
  +            "driver:sqlite;serializer:Storable;id:uuid", $sid,
  +            { Handle => $dbi, TableName => 'ase_sessions' }
  +        );
  +
  +        #   generate response
  +        my $response = {
  +            "Session-Id"          => $sid,
  +            "Session-Validity"    => "no",
  +        };
  +        if (defined($session) and not $session->is_expired()) {
  +            $response->{"Session-Validity"}    = "yes";
  +            $response->{"Session-Created"}     = $session->ctime();
  +            $response->{"Session-Expires"}     = $session->atime()+$session->expire();
  +            $response->{"Site-Canvas-URL"}     = $session->param("rpc_canvas_url");
  +            $response->{"Site-Canvas-Mark"}    = $session->param("rpc_canvas_mark");
  +            $response->{"Site-Canvas-Adjust"}  = $session->param("rpc_canvas_adjust");
  +            $response->{"Site-Canvas-Caching"} = $session->param("rpc_canvas_caching");
  +            $response->{"Site-Return-URL"}     = $session->param("rpc_return_url");
  +            $response->{"User-Address"}        = $session->remote_addr() || "0.0.0.0";
  +            $response->{"User-Login"}          = $session->param("login") || "unknown";
  +        }
  +        my $content = '';
  +        foreach my $key (sort keys %{$response}) {
  +            if (defined($response->{$key})) {
  +                $content .= sprintf("%s: %s\n", $key, $response->{$key});
  +            }
  +        }
  +        $self->header_props(-type => "text/plain", -expires => "+1m");
  +        return $content;
  +    }
  +}
  +
  +1;
  +
  @@ .

From ossp-cvs-owner@ossp.org  Thu Nov 10 08:54:44 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 8A68B7529D0; Thu, 10 Nov 2005 08:54:44 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi ase.cgi.enroll.pl ase.cgi.loader.pl ...
Message-Id: <20051110075444.8A68B7529D0@mail.ossp.org>
Date: Thu, 10 Nov 2005 08:54:44 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Nov-2005 08:54:44
  Branch: HEAD                             Handle: 2005111007544300

  Modified files:
    ossp-pkg/ase            ase.cgi ase.cgi.enroll.pl ase.cgi.loader.pl
                            ase.cgi.login.pl ase.cgi.logout.pl ase.cgi.main.pl
                            ase.cgi.profile.pl ase.cgi.rpc.pl ase.cgi.scode.pl
                            ase.cgi.util.pl

  Log:
    use OSSP::ase::server as package and print program name in error
    message

  Summary:
    Revision    Changes     Path
    1.7         +1  -1      ossp-pkg/ase/ase.cgi
    1.4         +1  -1      ossp-pkg/ase/ase.cgi.enroll.pl
    1.3         +1  -1      ossp-pkg/ase/ase.cgi.loader.pl
    1.5         +1  -1      ossp-pkg/ase/ase.cgi.login.pl
    1.3         +1  -1      ossp-pkg/ase/ase.cgi.logout.pl
    1.9         +5  -2      ossp-pkg/ase/ase.cgi.main.pl
    1.3         +1  -1      ossp-pkg/ase/ase.cgi.profile.pl
    1.2         +1  -1      ossp-pkg/ase/ase.cgi.rpc.pl
    1.4         +1  -1      ossp-pkg/ase/ase.cgi.scode.pl
    1.4         +1  -1      ossp-pkg/ase/ase.cgi.util.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ase.cgi
  --- ossp-pkg/ase/ase.cgi	9 Nov 2005 22:49:01 -0000	1.6
  +++ ossp-pkg/ase/ase.cgi	10 Nov 2005 07:54:43 -0000	1.7
  @@ -81,7 +81,7 @@
   require "$dir/ase.cgi.profile.pl";      # application workflow: profile
   
   #   main procedure
  -my $app = new ASE ($cfg);
  +my $app = new OSSP::ase::server ($cfg);
   $app->run();
   exit(0);
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	9 Nov 2005 16:46:42 -0000	1.3
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	10 Nov 2005 07:54:43 -0000	1.4
  @@ -24,7 +24,7 @@
   ##  ase.cgi.enroll.pl: enrollment
   ##
   
  -package ASE;
  +package OSSP::ase::server;
   use base 'CGI::Application';
   use strict;
   use warnings;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.loader.pl
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ase.cgi.loader.pl
  --- ossp-pkg/ase/ase.cgi.loader.pl	29 Aug 2005 15:23:51 -0000	1.2
  +++ ossp-pkg/ase/ase.cgi.loader.pl	10 Nov 2005 07:54:43 -0000	1.3
  @@ -24,7 +24,7 @@
   ##  ase.cgi.loader.pl: external file loader
   ##
   
  -package ASE;
  +package OSSP::ase::server;
   use base 'CGI::Application';
   use strict;
   use warnings;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	9 Nov 2005 16:46:43 -0000	1.4
  +++ ossp-pkg/ase/ase.cgi.login.pl	10 Nov 2005 07:54:43 -0000	1.5
  @@ -24,7 +24,7 @@
   ##  ase.cgi.login.pl: login workflow
   ##
   
  -package ASE;
  +package OSSP::ase::server;
   use base 'CGI::Application';
   use strict;
   use warnings;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.logout.pl
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ase.cgi.logout.pl
  --- ossp-pkg/ase/ase.cgi.logout.pl	29 Aug 2005 12:43:35 -0000	1.2
  +++ ossp-pkg/ase/ase.cgi.logout.pl	10 Nov 2005 07:54:43 -0000	1.3
  @@ -24,7 +24,7 @@
   ##  ase.cgi.logout.pl: logout workflow
   ##
   
  -package ASE;
  +package OSSP::ase::server;
   use base 'CGI::Application';
   use strict;
   use warnings;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	9 Nov 2005 22:49:01 -0000	1.8
  +++ ossp-pkg/ase/ase.cgi.main.pl	10 Nov 2005 07:54:43 -0000	1.9
  @@ -24,7 +24,7 @@
   ##  ase.cgi.main.pl: main program framework
   ##
   
  -package ASE;
  +package OSSP::ase::server;
   use base 'CGI::Application';
   use CGI::Application::Plugin::Forward;
   use strict;
  @@ -215,7 +215,10 @@
   #   application error handling hook
   sub error {
       my ($self, $error) = @_;
  -    my $html = "ERROR:<br>".HTML::Entities::encode_entities($error)."\n";
  +    my $cfg = $self->param(-cfg);
  +
  +    my $html = sprintf("%s ERROR:<br>%s\n", $cfg->{-prog_name}, HTML::Entities::encode_entities($error));
  +
       return $html;
   }
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.profile.pl
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ase.cgi.profile.pl
  --- ossp-pkg/ase/ase.cgi.profile.pl	29 Aug 2005 12:43:35 -0000	1.2
  +++ ossp-pkg/ase/ase.cgi.profile.pl	10 Nov 2005 07:54:43 -0000	1.3
  @@ -24,7 +24,7 @@
   ##  ase.cgi.profile.pl: profile workflow
   ##
   
  -package ASE;
  +package OSSP::ase::server;
   use base 'CGI::Application';
   use strict;
   use warnings;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.rpc.pl
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ase.cgi.rpc.pl
  --- ossp-pkg/ase/ase.cgi.rpc.pl	9 Nov 2005 22:49:01 -0000	1.1
  +++ ossp-pkg/ase/ase.cgi.rpc.pl	10 Nov 2005 07:54:43 -0000	1.2
  @@ -24,7 +24,7 @@
   ##  ase.cgi.rpc.pl: remote procedure call
   ##
   
  -package ASE;
  +package OSSP::ase::server;
   use base 'CGI::Application';
   use strict;
   use warnings;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.scode.pl
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ase.cgi.scode.pl
  --- ossp-pkg/ase/ase.cgi.scode.pl	9 Nov 2005 18:28:22 -0000	1.3
  +++ ossp-pkg/ase/ase.cgi.scode.pl	10 Nov 2005 07:54:43 -0000	1.4
  @@ -24,7 +24,7 @@
   ##  ase.cgi.scode.pl: security code handling
   ##
   
  -package ASE;
  +package OSSP::ase::server;
   use base 'CGI::Application';
   use strict;
   use warnings;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.util.pl
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ase.cgi.util.pl
  --- ossp-pkg/ase/ase.cgi.util.pl	29 Aug 2005 19:55:24 -0000	1.3
  +++ ossp-pkg/ase/ase.cgi.util.pl	10 Nov 2005 07:54:43 -0000	1.4
  @@ -24,7 +24,7 @@
   ##  ase.cgi.util.pl: utility functions
   ##
   
  -package ASE;
  +package OSSP::ase::server;
   use base 'CGI::Application';
   use strict;
   use warnings;
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov 16 11:54:18 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 5F00A752927; Wed, 16 Nov 2005 11:54:18 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/string-divert/ ChangeLog Divert.pm Divert.pod
Message-Id: <20051116105418.5F00A752927@mail.ossp.org>
Date: Wed, 16 Nov 2005 11:54:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Nov-2005 11:54:18
  Branch: HEAD                             Handle: 2005111610541700

  Modified files:
    ossp-pkg/string-divert  ChangeLog Divert.pm Divert.pod

  Log:
    o document "bool" method in Divert.pod, too.
    o allow objects to be passed to "append" and "assign" methods
    o call "destroy" method in "DESTROY"
    o support anonymous sub-objects
    o completely reviewed and cleaned up implementation

  Summary:
    Revision    Changes     Path
    1.9         +6  -0      ossp-pkg/string-divert/ChangeLog
    1.12        +96 -58     ossp-pkg/string-divert/Divert.pm
    1.7         +23 -4      ossp-pkg/string-divert/Divert.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 ChangeLog
  --- ossp-pkg/string-divert/ChangeLog	22 Feb 2005 13:21:34 -0000	1.8
  +++ ossp-pkg/string-divert/ChangeLog	16 Nov 2005 10:54:17 -0000	1.9
  @@ -2,6 +2,12 @@
     ChangeLog
     =========
   
  +  0.95 (16-Nov-2005)
  +      o document "bool" method in Divert.pod, too.
  +      o allow objects to be passed to "append" and "assign" methods
  +      o call "destroy" method in "DESTROY"
  +      o support anonymous sub-objects
  +      o completely reviewed and cleaned up implementation
     0.94 (22-Feb-2005)
         o add "copy constructor" in overloaded API plus a copying() method
           for selecting what to do in the "copy constructor": passing
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/Divert.pm
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 Divert.pm
  --- ossp-pkg/string-divert/Divert.pm	22 Feb 2005 13:21:34 -0000	1.11
  +++ ossp-pkg/string-divert/Divert.pm	16 Nov 2005 10:54:17 -0000	1.12
  @@ -51,14 +51,16 @@
       my $self = {};
       bless ($self, $class);
   
  -    $self->{name}      = (defined($name) ? $name : '');
  -    $self->{overwrite} = 'none';
  -    $self->{storage}   = 'all';
  -    $self->{copying}   = 'pass';
  -    $self->{chunks}    = [ '' ];
  -    $self->{diversion} = [];
  -    $self->{foldermk}  = '{#%s#}';
  -    $self->{folderre}  = '\{#([a-zA-Z_][a-zA-Z0-9_]*)#\}';
  +    $name ||= "";
  +
  +    $self->{name}      = $name;                             # name of object
  +    $self->{overwrite} = 'none';                            # overwrite mode (none|once|always)
  +    $self->{storage}   = 'all';                             # storage mode (none|fold|all)
  +    $self->{copying}   = 'pass';                            # copying mode (pass|clone)
  +    $self->{chunks}    = [];                                # string chunks
  +    $self->{diversion} = [];                                # stack of active diversions
  +    $self->{foldermk}  = '{#%s#}';                          # folder text representation format
  +    $self->{folderre}  = '\{#([a-zA-Z_][a-zA-Z0-9_]*)#\}';  # folder text representation regexp
   
       return $self;
   }
  @@ -73,6 +75,8 @@
   
   #   object destruction (implicit)
   sub DESTROY ($) {
  +    $_[0]->overload(0);
  +    bless $_[0], 'UNIVERSAL';
       return;
   }
   
  @@ -108,7 +112,7 @@
           if (@{$self->{diversion}} > 0);
       my $old_mode = $self->{overwrite};
       if (defined($mode)) {
  -        croak "invalid mode argument"
  +        croak "invalid overwrite mode argument"
               if ($mode !~ m/^(none|once|always)$/);
           $self->{overwrite} = $mode;
       }
  @@ -122,7 +126,7 @@
           if (@{$self->{diversion}} > 0);
       my $old_mode = $self->{storage};
       if (defined($mode)) {
  -        croak "invalid mode argument"
  +        croak "invalid storage mode argument"
               if ($mode !~ m/^(none|fold|all)$/);
           $self->{storage} = $mode;
       }
  @@ -132,9 +136,11 @@
   #   operation: set/get copy constructor mode
   sub copying ($;$) {
       my ($self, $mode) = @_;
  +    return $self->{diversion}->[-1]->copying($mode)
  +        if (@{$self->{diversion}} > 0);
       my $old_mode = $self->{copying};
       if (defined($mode)) {
  -        croak "invalid mode argument"
  +        croak "invalid copying mode argument"
               if ($mode !~ m/^(clone|pass)$/);
           $self->{copying} = $mode;
       }
  @@ -142,7 +148,7 @@
   }
   
   #   internal: split string into chunks
  -sub _chunking ($) {
  +sub _chunking ($$) {
       my ($self, $string) = @_;
       my @chunks = ();
       my $folderre = $self->{folderre};
  @@ -154,7 +160,7 @@
           if ($self->{storage} ne 'none') {
               my $object = $self->folding($id);
               $object = $self->new($id) if (not defined($object));
  -            croak "cannot reuse or create folding sub object \"$id\""
  +            croak "cannot create new folding sub object \"$id\""
                   if (not defined($object));
               push(@chunks, $object);
           }
  @@ -164,52 +170,53 @@
       return @chunks;
   }
   
  -#   operation: assign a string
  +#   operation: assign an object
   sub assign ($$) {
  -    my ($self, $string) = @_;
  -    return $self->{diversion}->[-1]->assign($string)
  +    my ($self, $obj) = @_;
  +    return $self->{diversion}->[-1]->assign($obj)
           if (@{$self->{diversion}} > 0);
  -    croak "cannot assign undefined string"
  -        if (not defined($string));
  -    croak "cannot assign reference ".ref($string)." as string"
  -        if (ref($string));
  -    $self->{chunks} = [];
  -    foreach my $chunk ($self->_chunking($string)) {
  -        push(@{$self->{chunks}}, $chunk);
  +    croak "cannot assign undefined object"
  +        if (not defined($obj));
  +    if (&String::Divert::_isobj($obj)) {
  +        $self->{chunks} = [ $obj ];
  +    }
  +    else {
  +        $self->{chunks} = [];
  +        foreach my $chunk ($self->_chunking($obj)) {
  +            push(@{$self->{chunks}}, $chunk);
  +        }
       }
       return $self;
   }
   
  -#   operation: append a string
  +#   operation: append an object
   sub append ($$) {
  -    my ($self, $string) = @_;
  -    return $self->{diversion}->[-1]->append($string)
  +    my ($self, $obj) = @_;
  +    return $self->{diversion}->[-1]->append($obj)
           if (@{$self->{diversion}} > 0);
  -    croak "cannot assign undefined string"
  -        if (not defined($string));
  -    croak "cannot assign reference as string"
  -        if (ref($string));
  +    croak "cannot append undefined object"
  +        if (not defined($obj));
       if (   $self->{overwrite} eq 'once'
           or $self->{overwrite} eq 'always') {
  -        $self->{chunks} = [];
  -        foreach my $chunk ($self->_chunking($string)) {
  -            push(@{$self->{chunks}}, $chunk);
  -        }
  +        $self->assign($obj);
           $self->{overwrite} = 'none'
               if ($self->{overwrite} eq 'once');
       }
       else {
  -        foreach my $chunk ($self->_chunking($string)) {
  -            if (ref($chunk)) {
  -                push(@{$self->{chunks}}, $chunk);
  -            }
  -            else {
  -                if (ref($self->{chunks}->[-1])) {
  +        if (&String::Divert::_isobj($obj)) {
  +            push(@{$self->{chunks}}, $obj);
  +        }
  +        else {
  +            foreach my $chunk ($self->_chunking($obj)) {
  +                if (ref($chunk) or (@{$self->{chunks}} > 0 and ref($self->{chunks}->[-1]))) {
                       push(@{$self->{chunks}}, $chunk);
                   }
  -                else {
  +                elsif (@{$self->{chunks}} > 0) {
                       $self->{chunks}->[-1] .= $chunk;
                   }
  +                else {
  +                    $self->{chunks} = [ $chunk ];
  +                }
               }
           }
       }
  @@ -219,9 +226,9 @@
   #   operation: unfold (and return) string contents temporarily
   sub string ($) {
       my ($self) = @_;
  -    my $string = '';
       return $self->{diversion}->[-1]->string()
           if (@{$self->{diversion}} > 0);
  +    my $string = '';
       foreach my $chunk (@{$self->{chunks}}) {
           if (ref($chunk)) {
               my $prefix = '';
  @@ -247,9 +254,9 @@
   #   operation: unfold string contents temporarily until already true or finally false
   sub bool ($) {
       my ($self) = @_;
  -    my $string = '';
       return $self->{diversion}->[-1]->bool()
           if (@{$self->{diversion}} > 0);
  +    my $string = '';
       foreach my $chunk (@{$self->{chunks}}) {
           if (ref($chunk)) {
               $string .= $chunk->string(); # recursion!
  @@ -262,18 +269,23 @@
       return 0;
   }
   
  +#   internal: create an anonymous object name
  +my $_anonymous_count = 1;
  +sub _anonymous_name () {
  +    return sprintf("ANONYMOUS:%d", $_anonymous_count++);
  +}
  +
   #   operation: append folding sub-object
  -sub fold ($$) {
  +sub fold ($;$) {
       my ($self, $id) = @_;
       return $self->{diversion}->[-1]->fold($id)
           if (@{$self->{diversion}} > 0);
  -    croak "undefined folding object identifier"
  -        if (not defined($id));
       return undef if ($self->{storage} eq 'none');
  +    $id = &String::Divert::_anonymous_name()
  +        if (not defined($id));
       if (ref($id)) {
           croak "folding object not of class String::Divert"
  -            if (   UNIVERSAL::isa($id, "String::Divert")
  -                or UNIVERSAL::isa($id, "String::Divert::__OVERLOAD__"));
  +            if (not &String::Divert::_isobj($id));
           push(@{$self->{chunks}}, $id);
           return $id;
       }
  @@ -293,10 +305,18 @@
       return $self->{diversion}->[-1]->unfold()
           if (@{$self->{diversion}} > 0);
       my $string = $self->string();
  -    $self->{chunks} = [ $string ];
  +    $self->{chunks} = $string ne '' ? [ $string ] : [];
       return $string;
   }
   
  +#   internal: check whether object is a String::Divert object
  +sub _isobj ($) {
  +    my ($obj) = @_;
  +    return (    ref($obj)
  +            and (   UNIVERSAL::isa($obj, "String::Divert")
  +                 or UNIVERSAL::isa($obj, "String::Divert::__OVERLOAD__")));
  +}
  +
   #   internal: compare whether two objects are the same
   sub _isobjeq ($$) {
       my ($obj1, $obj2) = @_;
  @@ -316,7 +336,7 @@
       return $self->{diversion}->[-1]->folding($id)
           if (@{$self->{diversion}} > 0);
       if (defined($id)) {
  -        my $folding = undef;
  +        my $folding; $folding = undef;
           foreach my $chunk (@{$self->{chunks}}) {
               if (ref($chunk)) {
                   if (   (ref($id)     and &String::Divert::_isobjeq($chunk, $id))
  @@ -345,9 +365,9 @@
   }
   
   #   operation: configure or generate textually represented folding object
  -sub folder ($$;$) {
  +sub folder ($;$$) {
       my ($self, $a, $b) = @_;
  -    if (defined($b)) {
  +    if (defined($a) and defined($b)) {
           #   configure folder
           my $test = sprintf($a, "foo");
           my ($id) = ($test =~ m|${b}()|s);
  @@ -360,17 +380,34 @@
       else {
           #   create folder
           return "" if ($self->{storage} eq 'none');
  +        $a = &String::Divert::_anonymous_name()
  +            if (not defined($a));
           my $folder = sprintf($self->{foldermk}, $a);
           return $folder;
       }
   }
   
   #   operation: push diversion of operations to sub-object
  -sub divert ($$) {
  +sub divert ($;$) {
       my ($self, $id) = @_;
  -    my $object = $self->folding($id);
  -    croak "folding sub-object \"$id\" not found"
  -        if (not defined($object));
  +    my $object; $object = undef;
  +    if (not defined($id)) {
  +        #   choose last folding object
  +        foreach my $chunk ($self->folding()) {
  +            if (ref($chunk)) {
  +                $object = $chunk;
  +                last;
  +            }
  +        }
  +        croak "no last folding sub-object found"
  +            if (not defined($object));
  +    }
  +    else {
  +        #   choose named folding object
  +        $object = $self->folding($id);
  +        croak "folding sub-object \"$id\" not found"
  +            if (not defined($object));
  +    }
       push(@{$self->{diversion}}, $object);
       return $self;
   }
  @@ -380,6 +417,7 @@
       my ($self, $num) = @_;
       $num = 1 if (not defined($num));
       if ($num !~ m|^\d+$|) {
  +        #   lookup number by name
           my $name = $num;
           for ($num = 1; $num <= @{$self->{diversion}}; $num++) {
               last if ($self->{diversion}->[-$num]->{name} eq $name);
  @@ -401,11 +439,11 @@
   sub diversion ($) {
       my ($self) = @_;
       if (not wantarray) {
  -        #   return last diversion only
  +        #   return last diversion only (or undef if none exist)
           return $self->{diversion}->[-1];
       }
       else {
  -        #   return all diversions (in reverse order of activation)
  +        #   return all diversions (in reverse order of activation) (or empty array if none exist)
           return reverse(@{$self->{diversion}});
       }
   }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/Divert.pod
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 Divert.pod
  --- ossp-pkg/string-divert/Divert.pod	22 Feb 2005 13:21:34 -0000	1.6
  +++ ossp-pkg/string-divert/Divert.pod	16 Nov 2005 10:54:17 -0000	1.7
  @@ -218,6 +218,13 @@
   unfolding the contents in string object C<$x>, you have to use operation
   B<unfold>.
   
  +=item SAPI: C<$bool = $x-E<gt>>B<bool>C<;>
  +
  +I<Content Unfolding (Temporary)>. This unfolds the contents of string
  +object C<$x> until its value is already equivalent to the boolean true
  +value or finally equivalent to the boolean false value. The contents of
  +the string object is still kept in folded internal format.
  +
   =back
   
   =head2 Content Folding
  @@ -229,7 +236,9 @@
   
   =item SAPI: [C<$y =>] C<$x-E<gt>>B<fold>C<($name);>
   
  -=item SAPI: C<$x-E<gt>>B<fold>C<($y);>
  +=item SAPI: [C<$y =>] C<$x-E<gt>>B<fold>C<($y);>
  +
  +=item SAPI: [C<$y =>] C<$x-E<gt>>B<fold>C<();>
   
   =item XAPI: [C<$y = (>]C<$x E<gt>E<gt>= $name>[C<)>]C<;>
   
  @@ -239,7 +248,9 @@
   the current position by appending a B<String::Divert> sub object (given
   in existing object C<$y> or created on-the-fly with name I<name>). The
   sub-object representing the folding is allowed to be re-appended by name
  -or through C<$y>.
  +or through C<$y>. If no name or object is given, an anonymous
  +sub object is created on the fly (for use by method B<divert> without
  +arguments).
   
   =item SAPI: [C<$string =>] C<$x-E<gt>>B<unfold>C<;>
   
  @@ -261,6 +272,8 @@
   
   =item SAPI: C<$string = $x-E<gt>>B<folder>C<($name);>
   
  +=item SAPI: C<$string = $x-E<gt>>B<folder>C<();>
  +
   I<Content Folding Textual Representation>. This configures (if
   the two argument form is used) or generates (if the one argument
   form is used) textual representation of a content folding. For
  @@ -273,7 +286,9 @@
   "C<\{#([a-zA-Z_][a-zA-Z0-9_]*)#\}>". In the one argument form, the
   function applies C<$name> to the previously configured C<$format> and
   returns the result for inclusion into a string which in turn is assigned
  -or appended to the string object.
  +or appended to the string object. If no C<$name> is given, an anonymous
  +folder is returned on the fly (for use by method B<divert> without
  +arguments).
   
   =back
   
  @@ -288,6 +303,8 @@
   
   =item SAPI: [C<$x =>] C<$x-E<gt>>B<divert>C<($y);>
   
  +=item SAPI: [C<$x =>] C<$x-E<gt>>B<divert>C<();>
  +
   =item XAPI: C<$x E<gt>E<gt> $name;>
   
   =item XAPI: C<$x E<gt>E<gt> $y;>
  @@ -295,7 +312,9 @@
   I<Content Diversion Activation>. This activates in string object C<$x>
   a content diversion to a sub-object (given by name C<$name> or object
   reference C<$y>). The diversion target should be a folded sub-object of
  -C<$x>, but is not technically required.
  +C<$x>, but is not technically required. If no C<$name> or object C<$y>
  +is specified, a diversion is activated to the last folder in the current
  +diversion.
   
   =item SAPI: [C<$x =>] C<$x-E<gt>>B<undivert>C<($num);>
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov 16 11:55:02 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 946F575291C; Wed, 16 Nov 2005 11:55:02 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/string-divert/ Divert.pm
Message-Id: <20051116105502.946F575291C@mail.ossp.org>
Date: Wed, 16 Nov 2005 11:55:02 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Nov-2005 11:55:02
  Branch: HEAD                             Handle: 2005111610550200

  Modified files:
    ossp-pkg/string-divert  Divert.pm

  Log:
    bump version before release

  Summary:
    Revision    Changes     Path
    1.13        +1  -1      ossp-pkg/string-divert/Divert.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/Divert.pm
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 Divert.pm
  --- ossp-pkg/string-divert/Divert.pm	16 Nov 2005 10:54:17 -0000	1.12
  +++ ossp-pkg/string-divert/Divert.pm	16 Nov 2005 10:55:02 -0000	1.13
  @@ -37,7 +37,7 @@
   use Carp;
   require Exporter;
   
  -our $VERSION   = '0.94';
  +our $VERSION   = '0.95';
   
   our @ISA       = qw(Exporter);
   our @EXPORT    = qw();
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov 16 13:08:50 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 332A375290A; Wed, 16 Nov 2005 13:08:50 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/string-divert/ ChangeLog Divert.pm Divert.pod TOD...
Message-Id: <20051116120850.332A375290A@mail.ossp.org>
Date: Wed, 16 Nov 2005 13:08:50 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Nov-2005 13:08:49
  Branch: HEAD                             Handle: 2005111612084900

  Modified files:
    ossp-pkg/string-divert  ChangeLog Divert.pm Divert.pod TODO sample2.pl
                            test.pl

  Log:
    o add folding loop detection to "string" method
    o use anonymous names already in "new" method
    o don't follow diversions on "folding" method to
      allow one to divert back to upper objects, too.
    o document that "folding" method returns all
      foldings if no name or object is specified.
    o change sample2.pl to show the usual "head" diversion
      once one is already diverted in "body".

  Summary:
    Revision    Changes     Path
    1.10        +9  -0      ossp-pkg/string-divert/ChangeLog
    1.14        +22 -10     ossp-pkg/string-divert/Divert.pm
    1.8         +12 -7      ossp-pkg/string-divert/Divert.pod
    1.3         +0  -2      ossp-pkg/string-divert/TODO
    1.3         +7  -6      ossp-pkg/string-divert/sample2.pl
    1.7         +1  -2      ossp-pkg/string-divert/test.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 ChangeLog
  --- ossp-pkg/string-divert/ChangeLog	16 Nov 2005 10:54:17 -0000	1.9
  +++ ossp-pkg/string-divert/ChangeLog	16 Nov 2005 12:08:49 -0000	1.10
  @@ -2,6 +2,15 @@
     ChangeLog
     =========
   
  +  0.96 (16-Nov-2005)
  +      o add folding loop detection to "string" method
  +      o use anonymous names already in "new" method
  +      o don't follow diversions on "folding" method to
  +        allow one to divert back to upper objects, too.
  +      o document that "folding" method returns all
  +        foldings if no name or object is specified.
  +      o change sample2.pl to show the usual "head" diversion
  +        once one is already diverted in "body".
     0.95 (16-Nov-2005)
         o document "bool" method in Divert.pod, too.
         o allow objects to be passed to "append" and "assign" methods
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/Divert.pm
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 Divert.pm
  --- ossp-pkg/string-divert/Divert.pm	16 Nov 2005 10:55:02 -0000	1.13
  +++ ossp-pkg/string-divert/Divert.pm	16 Nov 2005 12:08:49 -0000	1.14
  @@ -43,6 +43,12 @@
   our @EXPORT    = qw();
   our @EXPORT_OK = qw();
   
  +#   internal: create an anonymous object name
  +my $_anonymous_count = 1;
  +sub _anonymous_name () {
  +    return sprintf("ANONYMOUS:%d", $_anonymous_count++);
  +}
  +
   #   object construction
   sub new ($;$) {
       my ($proto, $name) = @_;
  @@ -51,7 +57,7 @@
       my $self = {};
       bless ($self, $class);
   
  -    $name ||= "";
  +    $name ||= &String::Divert::_anonymous_name();
   
       $self->{name}      = $name;                             # name of object
       $self->{overwrite} = 'none';                            # overwrite mode (none|once|always)
  @@ -228,9 +234,22 @@
       my ($self) = @_;
       return $self->{diversion}->[-1]->string()
           if (@{$self->{diversion}} > 0);
  +    return $self->_string([]);
  +}
  +
  +#   internal: string() operation with loop detection
  +sub _string ($$) {
  +    my ($self, $visit) = @_;
       my $string = '';
  +    if (grep { &String::Divert::_isobjeq($_, $self) } @{$visit}) {
  +        croak "folding loop detected: " .
  +            join(" -> ", map { $_->name() } @{$visit}) . 
  +            " -> " . $self->name();
  +    }
  +    push(@{$visit}, $self);
       foreach my $chunk (@{$self->{chunks}}) {
           if (ref($chunk)) {
  +            #   folding loop detection
               my $prefix = '';
               #   check for existing prefix
               #   (keep in mind that m|([^\n]+)$|s _DOES NOT_
  @@ -240,7 +259,7 @@
                   $prefix = $1;
                   $prefix =~ s|[^ \t]| |sg;
               }
  -            my $block = $chunk->string(); # recursion!
  +            my $block = $chunk->_string($visit); # recursion!
               $block =~ s|\n(?=.)|\n$prefix|sg if ($prefix ne '');
               $string .= $block;
           }
  @@ -248,6 +267,7 @@
               $string .= $chunk;
           }
       }
  +    pop(@{$visit});
       return $string;
   }
   
  @@ -269,12 +289,6 @@
       return 0;
   }
   
  -#   internal: create an anonymous object name
  -my $_anonymous_count = 1;
  -sub _anonymous_name () {
  -    return sprintf("ANONYMOUS:%d", $_anonymous_count++);
  -}
  -
   #   operation: append folding sub-object
   sub fold ($;$) {
       my ($self, $id) = @_;
  @@ -333,8 +347,6 @@
   #   operation: lookup particular or all folding sub-object(s)
   sub folding ($;$) {
       my ($self, $id) = @_;
  -    return $self->{diversion}->[-1]->folding($id)
  -        if (@{$self->{diversion}} > 0);
       if (defined($id)) {
           my $folding; $folding = undef;
           foreach my $chunk (@{$self->{chunks}}) {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/Divert.pod
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 Divert.pod
  --- ossp-pkg/string-divert/Divert.pod	16 Nov 2005 10:54:17 -0000	1.7
  +++ ossp-pkg/string-divert/Divert.pod	16 Nov 2005 12:08:49 -0000	1.8
  @@ -263,10 +263,13 @@
   
   =item SAPI: C<$y = $x-E<gt>>B<folding>C<($name);>
   
  +=item SAPI: C<@y = $x-E<gt>>B<folding>C<();>
  +
   =item XAPI: C<$y = ($x E<lt>E<lt>= $name);>
   
   I<Content Folding Lookup>. This lookups in string object C<$x> the
  -contained folding sub-object with name C<$name>.
  +contained folding sub-object with name C<$name>. If C<$name> is not
  +specified, it returns a list of all folding sub-objects.
   
   =item SAPI: C<$x-E<gt>>B<folder>C<($format, $regex);>
   
  @@ -359,14 +362,9 @@
        "    " . $html->folder("body") .
        "  </body>\n" .
        "</html>\n";
  -
  - #   generate header
  - $html >> "head";
  - $html .= "<title>foo</title>\n";
  - $html << 1;
  + $html >> "body";
   
    #   generate body
  - $html >> "body";
    $html .= "<table>\n" .
             "  <tr>\n" .
             "   <td>\n" .
  @@ -378,15 +376,22 @@
             "  </tr>\n" .
             "</table>\n";
   
  + #   generate header
  + $html >> "head";
  + $html .= "<title>foo</title>\n";
  + $html << 1;
  +
    #   generate left contents
    $html >> "left";
    $html .= "bar1\n" .
             "bar2\n";
  + $html << 1;
   
    #   generate right contents
    $html >> "right";
    $html .= "quux1\n" .
             "quux2\n";
  + $html << 1;
   
    #   undivert all diversions and output unfolded HTML
    $html << 0;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/TODO
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 TODO
  --- ossp-pkg/string-divert/TODO	23 May 2003 11:09:57 -0000	1.2
  +++ ossp-pkg/string-divert/TODO	16 Nov 2005 12:08:49 -0000	1.3
  @@ -2,8 +2,6 @@
    TODO
    ====
   
  - o check recursion on folding and diversion to avoid loops
  -
    o resurrect TIE mechanism for assignment operator once Perl 
      is no longer buggy (see "BUGS" in "perldoc overload") and
      no longer looses the overloading after STORE.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/sample2.pl
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 sample2.pl
  --- ossp-pkg/string-divert/sample2.pl	23 May 2003 11:09:57 -0000	1.2
  +++ ossp-pkg/string-divert/sample2.pl	16 Nov 2005 12:08:49 -0000	1.3
  @@ -16,14 +16,9 @@
       "    " . $html->folder("body") .
       "  </body>\n" .
       "</html>\n";
  -
  -#   generate header
  -$html >> "head";
  -$html .= "<title>foo</title>\n";
  -$html << 1;
  +$html >> "body";
   
   #   generate body
  -$html >> "body";
   $html .= "<table>\n" .
            "  <tr>\n" .
            "   <td>\n" .
  @@ -35,6 +30,11 @@
            "  </tr>\n" .
            "</table>\n";
   
  +#   generate header
  +$html >> "head";
  +$html .= "<title>foo</title>\n";
  +$html << 1;
  +
   #   generate left contents
   $html >> "left";
   $html .= "bar1\n" .
  @@ -45,6 +45,7 @@
   $html >> "right";
   $html .= "quux1\n" .
            "quux2\n";
  +$html << 1;
   
   #   undivert all diversions and output unfolded HTML
   $html << 0;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/test.pl
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 test.pl
  --- ossp-pkg/string-divert/test.pl	22 Feb 2005 13:21:34 -0000	1.6
  +++ ossp-pkg/string-divert/test.pl	16 Nov 2005 12:08:49 -0000	1.7
  @@ -23,7 +23,7 @@
   ##
   
   use 5.006;
  -use Test::More tests => 38;
  +use Test::More tests => 37;
   
   #   test: module loading
   BEGIN { use_ok('String::Divert') };
  @@ -34,7 +34,6 @@
   $x->destroy;
   $x = new String::Divert;
   ok(defined($x), "object (re)creation");
  -ok($x->name() eq "", "object name");
   $x->name("xx");
   ok($x->name() eq "xx", "overwritten object name");
   $x->name("x");
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov 16 13:51:14 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 4BC14752909; Wed, 16 Nov 2005 13:51:14 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/string-divert/ ChangeLog Divert.pm Divert.pod
Message-Id: <20051116125114.4BC14752909@mail.ossp.org>
Date: Wed, 16 Nov 2005 13:51:14 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Nov-2005 13:51:14
  Branch: HEAD                             Handle: 2005111612511300

  Modified files:
    ossp-pkg/string-divert  ChangeLog Divert.pm Divert.pod

  Log:
    change "divert" method without arg to really divert to the last
    established folder.

  Summary:
    Revision    Changes     Path
    1.11        +2  -0      ossp-pkg/string-divert/ChangeLog
    1.15        +13 -7      ossp-pkg/string-divert/Divert.pm
    1.9         +2  -2      ossp-pkg/string-divert/Divert.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 ChangeLog
  --- ossp-pkg/string-divert/ChangeLog	16 Nov 2005 12:08:49 -0000	1.10
  +++ ossp-pkg/string-divert/ChangeLog	16 Nov 2005 12:51:13 -0000	1.11
  @@ -11,6 +11,8 @@
           foldings if no name or object is specified.
         o change sample2.pl to show the usual "head" diversion
           once one is already diverted in "body".
  +      o change "divert" method without arg to really divert to the last
  +        established folder.
     0.95 (16-Nov-2005)
         o document "bool" method in Divert.pod, too.
         o allow objects to be passed to "append" and "assign" methods
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/Divert.pm
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 Divert.pm
  --- ossp-pkg/string-divert/Divert.pm	16 Nov 2005 12:08:49 -0000	1.14
  +++ ossp-pkg/string-divert/Divert.pm	16 Nov 2005 12:51:13 -0000	1.15
  @@ -67,6 +67,7 @@
       $self->{diversion} = [];                                # stack of active diversions
       $self->{foldermk}  = '{#%s#}';                          # folder text representation format
       $self->{folderre}  = '\{#([a-zA-Z_][a-zA-Z0-9_]*)#\}';  # folder text representation regexp
  +    $self->{folderlst} = undef;                             # folder object of last folding operation
   
       return $self;
   }
  @@ -185,11 +186,13 @@
           if (not defined($obj));
       if (&String::Divert::_isobj($obj)) {
           $self->{chunks} = [ $obj ];
  +        $self->{folderlst} = $obj if (ref($obj));
       }
       else {
           $self->{chunks} = [];
           foreach my $chunk ($self->_chunking($obj)) {
               push(@{$self->{chunks}}, $chunk);
  +            $self->{folderlst} = $chunk if (ref($chunk));
           }
       }
       return $self;
  @@ -211,11 +214,13 @@
       else {
           if (&String::Divert::_isobj($obj)) {
               push(@{$self->{chunks}}, $obj);
  +            $self->{folderlst} = $obj if (ref($obj));
           }
           else {
               foreach my $chunk ($self->_chunking($obj)) {
                   if (ref($chunk) or (@{$self->{chunks}} > 0 and ref($self->{chunks}->[-1]))) {
                       push(@{$self->{chunks}}, $chunk);
  +                    $self->{folderlst} = $chunk if (ref($chunk));
                   }
                   elsif (@{$self->{chunks}} > 0) {
                       $self->{chunks}->[-1] .= $chunk;
  @@ -301,6 +306,7 @@
           croak "folding object not of class String::Divert"
               if (not &String::Divert::_isobj($id));
           push(@{$self->{chunks}}, $id);
  +        $self->{folderlst} = $id;
           return $id;
       }
       else {
  @@ -309,6 +315,7 @@
           croak "unable to create new folding object"
               if (not defined($object));
           push(@{$self->{chunks}}, $object);
  +        $self->{folderlst} = $object;
           return $object;
       }
   }
  @@ -320,6 +327,7 @@
           if (@{$self->{diversion}} > 0);
       my $string = $self->string();
       $self->{chunks} = $string ne '' ? [ $string ] : [];
  +    $self->{folderlst} = undef;
       return $string;
   }
   
  @@ -356,7 +364,7 @@
                       $folding = $chunk;
                       last;
                   }
  -                $folding = $chunk->folding($id);
  +                $folding = $chunk->folding($id); # recursion!
                   last if (defined($folding));
               }
           }
  @@ -405,11 +413,9 @@
       my $object; $object = undef;
       if (not defined($id)) {
           #   choose last folding object
  -        foreach my $chunk ($self->folding()) {
  -            if (ref($chunk)) {
  -                $object = $chunk;
  -                last;
  -            }
  +        foreach my $obj (reverse ($self, @{$self->{diversion}})) {
  +            $object = $obj->{folderlst};
  +            last if (defined($object));
           }
           croak "no last folding sub-object found"
               if (not defined($object));
  @@ -431,7 +437,7 @@
       if ($num !~ m|^\d+$|) {
           #   lookup number by name
           my $name = $num;
  -        for ($num = 1; $num <= @{$self->{diversion}}; $num++) {
  +        for (my $num = 1; $num <= @{$self->{diversion}}; $num++) {
               last if ($self->{diversion}->[-$num]->{name} eq $name);
           }
           croak "no object named \"$name\" found for undiversion"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/Divert.pod
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 Divert.pod
  --- ossp-pkg/string-divert/Divert.pod	16 Nov 2005 12:08:49 -0000	1.8
  +++ ossp-pkg/string-divert/Divert.pod	16 Nov 2005 12:51:13 -0000	1.9
  @@ -316,8 +316,8 @@
   a content diversion to a sub-object (given by name C<$name> or object
   reference C<$y>). The diversion target should be a folded sub-object of
   C<$x>, but is not technically required. If no C<$name> or object C<$y>
  -is specified, a diversion is activated to the last folder in the current
  -diversion.
  +is specified, a diversion is activated to the folder which was
  +inserted last into the currently or previously active objects.
   
   =item SAPI: [C<$x =>] C<$x-E<gt>>B<undivert>C<($num);>
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov 16 14:13:26 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 11F6E752915; Wed, 16 Nov 2005 14:13:25 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ .cvsignore ase.cgi ase.cgi.loader.pl ase.cgi...
Message-Id: <20051116131325.11F6E752915@mail.ossp.org>
Date: Wed, 16 Nov 2005 14:13:25 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Nov-2005 14:13:25
  Branch: HEAD                             Handle: 2005111613132400

  Added files:
    ossp-pkg/ase            ase.pm sample.cgi sample.css sample.db.sh
                            sample.db.sql sample.html
  Modified files:
    ossp-pkg/ase            .cvsignore ase.cgi ase.cgi.loader.pl
                            ase.cgi.login.pl ase.cgi.main.pl ase.cgi.rpc.pl
                            ase.cgi.util.pl ase.html

  Log:
    ok, flush my work until now: intended functionality is fully hammered
    in; initial redirects from application to ASE work; embedding of ASE
    into application screen work, etc

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/ase/.cvsignore
    1.8         +2  -0      ossp-pkg/ase/ase.cgi
    1.4         +4  -24     ossp-pkg/ase/ase.cgi.loader.pl
    1.6         +7  -2      ossp-pkg/ase/ase.cgi.login.pl
    1.10        +43 -28     ossp-pkg/ase/ase.cgi.main.pl
    1.3         +28 -23     ossp-pkg/ase/ase.cgi.rpc.pl
    1.5         +60 -0      ossp-pkg/ase/ase.cgi.util.pl
    1.4         +2  -3      ossp-pkg/ase/ase.html
    1.1         +249 -0     ossp-pkg/ase/ase.pm
    1.1         +159 -0     ossp-pkg/ase/sample.cgi
    1.1         +16 -0      ossp-pkg/ase/sample.css
    1.1         +15 -0      ossp-pkg/ase/sample.db.sh
    1.1         +19 -0      ossp-pkg/ase/sample.db.sql
    1.1         +15 -0      ossp-pkg/ase/sample.html
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/.cvsignore
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 .cvsignore
  --- ossp-pkg/ase/.cvsignore	29 Aug 2005 13:13:09 -0000	1.2
  +++ ossp-pkg/ase/.cvsignore	16 Nov 2005 13:13:24 -0000	1.3
  @@ -1,4 +1,4 @@
   ChangeLog
   ase-*.tar.gz
   ase.db
  -ase.sdb
  +sample.db
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 ase.cgi
  --- ossp-pkg/ase/ase.cgi	10 Nov 2005 07:54:43 -0000	1.7
  +++ ossp-pkg/ase/ase.cgi	16 Nov 2005 13:13:24 -0000	1.8
  @@ -67,6 +67,8 @@
   use CGI::Session;                       # from OpenPKG "perl-www"
   use CGI::FormBuilder;                   # from OpenPKG "perl-www"
   use CGI::GuruMeditation ("OSSP ase");   # from OpenPKG "perl-www"
  +use LWP::UserAgent;                     # from OpenPKG "perl-www"
  +use LWP::Simple qw();                   # from OpenPKG "perl-www"
   
   #   application parts
   my $dir = $cfg->{-path_libdir};
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.loader.pl
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ase.cgi.loader.pl
  --- ossp-pkg/ase/ase.cgi.loader.pl	10 Nov 2005 07:54:43 -0000	1.3
  +++ ossp-pkg/ase/ase.cgi.loader.pl	16 Nov 2005 13:13:24 -0000	1.4
  @@ -38,32 +38,12 @@
       #   parameter sanity checking
       my $name = $cgi->param("name");
       die "invalid name" if (not (defined($name) and $name ne ''));
  -    die "invalid name" if ($name =~ m|\.\.| or $name =~ m|^/|); # FIXME
   
  -    #   load external file content 
  -    my $filename = $cfg->{-path_datdir}."/".$name;
  -    die "file not found" if (not -f $filename);
  -    my $content < IO::All::io($filename)
  -        or die "unable to load file \"$filename\"";
  +    #   load URL
  +    my ($type, $expires, $content) = $self->fetch($name);
   
  -    #   determine expire time and content type
  -    my $expires = "+10s";
  -    my $type = "application/octet-stream";
  -    if    ($name =~ m|\.css$|)   { $type = "text/css";   $expires = "+1m"; }
  -    elsif ($name =~ m|\.png$|)   { $type = "image/png";  $expires = "+1h"; }
  -    elsif ($name =~ m|\.gif$|)   { $type = "image/gif";  $expires = "+1h"; }
  -    elsif ($name =~ m|\.jpe?g$|) { $type = "image/jpeg"; $expires = "+1h"; }
  -
  -    #   optional content adjustment
  -    if ($name =~ m|\.css$|) {
  -        my $adjust_url = sub {
  -            my ($cgi, $url) = @_;
  -            return (  $url =~ m/^[^\/:]+$/
  -                    ? $cgi->url(-relative => 1)."?mode=loader;name=".URI::Escape::uri_escape($url)
  -                    : $1);
  -        };
  -        $content =~ s|url\((.+?)\)|"url(".&$adjust_url($cgi, $1).")"|sge;
  -    }
  +    #   adjust content
  +    $content = $self->adjust_url($type, $content);
   
       #   pass back content
       $self->header_props(-type => $type, -expires => $expires);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	10 Nov 2005 07:54:43 -0000	1.5
  +++ ossp-pkg/ase/ase.cgi.login.pl	16 Nov 2005 13:13:24 -0000	1.6
  @@ -223,8 +223,13 @@
       $session->param("login", $rec->{'me_uuid'});
       $self->logbook("login by ".$rec->{'me_address'}); 
   
  -    #   go to menu
  -    return $self->forward("menu-overview");
  +    #   perform login: either go to menu or redirect to external return URL
  +    if (defined(my $url = $session->param("return_url"))) {
  +        return $self->redirect(sprintf($url, $session->id()));
  +    }
  +    else {
  +        return $self->forward("menu-overview");
  +    }
   }
   
   1;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	10 Nov 2005 07:54:43 -0000	1.9
  +++ ossp-pkg/ase/ase.cgi.main.pl	16 Nov 2005 13:13:24 -0000	1.10
  @@ -50,34 +50,6 @@
       $self->query($cgi);
       $self->param(-cgi => $cgi);
   
  -    #   establish HTML output object
  -    my $html = new String::Divert;
  -    $html->folder('{#%s#}', '\{#([a-zA-Z_][a-zA-Z0-9_-]*)#\}');
  -    if (defined($cgi->param("canvas")) and $cgi->param("canvas") eq 'embed') {
  -        #   embedded canvas mode
  -        $html->overload(1);
  -        $html .= "<div class=\"ase\">\n";
  -        $html .= $html->folder("body");
  -        $html .= "</div>\n";
  -        $html->divert("body");
  -    }
  -    else {
  -        #   standalone canvas mode
  -        my $txt < IO::All::io($cfg->{-path_datdir}."/ase.html")
  -            or die "unable to read HTML skeleton file \"".$cfg->{-path_datdir}."/ase.html"."\"";
  -        $txt =~ s/\%HEAD\%/$html->folder("head")/se;
  -        $txt =~ s/\%BODY\%/"<div class=\"ase\">\n".$html->folder("body")."<\/div>\n"/se;
  -        my $adjust_url = sub {
  -            my ($self, $url) = @_;
  -            return ($url =~ m|^[^\/:]+$| ? $self->url(-mode => "loader", -name => $url) : $url);
  -        };
  -        $txt =~ s/(\s+(?:href|src)=")([^"]+)/$1.&$adjust_url($self, $2)/sge;
  -        $html->append($txt);
  -        $html->divert("body");
  -        $html->overload(1);
  -    }
  -    $self->param(-html => $html);
  -
       #   establish database object
       my $dbi = DBI->connect(
           "dbi:SQLite:dbname=".$cfg->{-path_vardir}."/ase.db", "", "",
  @@ -96,6 +68,49 @@
       $session->expires("+1h");
       $self->param(-session => $session);
   
  +    #   establish HTML output object
  +    my $html = new String::Divert;
  +    $html->folder('{#%s#}', '\{#([a-zA-Z_][a-zA-Z0-9_-]*)#\}');
  +
  +    #   provide outer HTML canvas
  +    my $canvas_url       = $session->param("canvas_url")       || $cgi->param("canvas_url")       || "ase.html";
  +    my $canvas_mark_head = $session->param("canvas_mark_head") || $cgi->param("canvas_mark_head") || "<!-- ASE: HEAD -->";
  +    my $canvas_mark_body = $session->param("canvas_mark_head") || $cgi->param("canvas_mark_head") || "<!-- ASE: BODY -->";
  +    my $canvas_adjust    = $session->param("canvas_adjust")    || $cgi->param("canvas_adjust")    || "yes";
  +    my $canvas_caching   = $session->param("canvas_caching")   || $cgi->param("canvas_caching")   || "no";
  +    #   FIXME: caching
  +    my ($canvas_type, undef, $canvas) = $self->fetch($canvas_url);
  +    die "invalid content type" if ($canvas_type ne 'text/html');
  +    $canvas = $self->adjust_url($canvas_type, $canvas) if ($canvas_adjust);
  +    if ($canvas =~ m/${canvas_mark_head}/si) {
  +        $canvas =~ s/${canvas_mark_head}([ \t]*\n)?/$html->folder("head")/sie;
  +    }
  +    else {
  +        $canvas =~ s/(<head>)/$1.$html->folder("head")/sie;
  +    }
  +    if ($canvas =~ m/${canvas_mark_body}/si) {
  +        $canvas =~ s/${canvas_mark_body}([ \t]*\n)?/$html->folder("body")/sie;
  +    }
  +    else {
  +        $canvas =~ s/(<body>)/$1.$html->folder("body")/sie;
  +    }
  +    $html->append($canvas);
  +    $html->overload(1);
  +
  +    #   provide inner HTML canvas
  +    $html->divert("head");
  +    $html .= "<link rel=\"stylesheet\" type=\"text/css\"" .
  +             " href=\"".$self->url(-mode => "loader", -name => "ase.css")."\"/>\n";
  +    $html->undivert();
  +    $html->divert("body");
  +    $html .= "<div class=\"ase\">\n";
  +    $html .= "  "; $html->fold();
  +    $html .= "<\/div>\n";
  +    $html->divert();
  +
  +    #   post-prepare HTML output object
  +    $self->param(-html => $html);
  +
       #   configure run-time modes
       my $modes = {
           #   global modes
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.rpc.pl
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ase.cgi.rpc.pl
  --- ossp-pkg/ase/ase.cgi.rpc.pl	10 Nov 2005 07:54:43 -0000	1.2
  +++ ossp-pkg/ase/ase.cgi.rpc.pl	16 Nov 2005 13:13:24 -0000	1.3
  @@ -41,27 +41,31 @@
   
       if ($method eq "login") {
           #   parameter sanity checking
  -        my $rpc_id             = $cgi->param("id")             || "ase";
  -        my $rpc_canvas_mark    = $cgi->param("canvas_mark")    || "<!-- ASE -->";
  -        my $rpc_canvas_adjust  = $cgi->param("canvas_adjust")  || "yes";
  -        my $rpc_canvas_caching = $cgi->param("canvas_caching") || "no";
  -        my $rpc_canvas_url     = $cgi->param("canvas")         || "";
  -        my $rpc_return_url     = $cgi->param("return");
  +        my $canvas_mark_head = $cgi->param("canvas_mark_head") || "";
  +        my $canvas_mark_body = $cgi->param("canvas_mark_body") || "";
  +        my $canvas_adjust    = $cgi->param("canvas_adjust")    || "";
  +        my $canvas_caching   = $cgi->param("canvas_caching")   || "";
  +        my $canvas_url       = $cgi->param("canvas_url")       || "";
  +        my $return_url       = $cgi->param("return_url");
           die "no or invalid return URL given"
  -            if (not defined($rpc_return_url) or $rpc_return_url !~ m|https?://.+|);
  +            if (not defined($return_url) or $return_url !~ m|https?://.+|);
   
           #   store parameters into session
  -        $session->param("rpc_id",             $rpc_id);
  -        $session->param("rpc_canvas_mark",    $rpc_canvas_mark);
  -        $session->param("rpc_canvas_adjust",  $rpc_canvas_adjust);
  -        $session->param("rpc_canvas_caching", $rpc_canvas_caching);
  -        $session->param("rpc_canvas_url",     $rpc_canvas_url);
  -        $session->param("rpc_return_url",     $rpc_return_url);
  +        $session->param("canvas_mark_head", $canvas_mark_head);
  +        $session->param("canvas_mark_body", $canvas_mark_body);
  +        $session->param("canvas_adjust",    $canvas_adjust);
  +        $session->param("canvas_caching",   $canvas_caching);
  +        $session->param("canvas_url",       $canvas_url);
  +        $session->param("return_url",       $return_url);
   
           #   redirect to login screen (to clear URL)
           return $self->redirect($self->url(-mode => "login"));
       }
   
  +    elsif ($method eq "logout") {
  +        #   FIXME
  +    }
  +
       elsif ($method eq "info") {
           #   parameter sanity checking
           my $sid = $cgi->param("sid");
  @@ -79,16 +83,17 @@
               "Session-Validity"    => "no",
           };
           if (defined($session) and not $session->is_expired()) {
  -            $response->{"Session-Validity"}    = "yes";
  -            $response->{"Session-Created"}     = $session->ctime();
  -            $response->{"Session-Expires"}     = $session->atime()+$session->expire();
  -            $response->{"Site-Canvas-URL"}     = $session->param("rpc_canvas_url");
  -            $response->{"Site-Canvas-Mark"}    = $session->param("rpc_canvas_mark");
  -            $response->{"Site-Canvas-Adjust"}  = $session->param("rpc_canvas_adjust");
  -            $response->{"Site-Canvas-Caching"} = $session->param("rpc_canvas_caching");
  -            $response->{"Site-Return-URL"}     = $session->param("rpc_return_url");
  -            $response->{"User-Address"}        = $session->remote_addr() || "0.0.0.0";
  -            $response->{"User-Login"}          = $session->param("login") || "unknown";
  +            $response->{"Session-Validity"} = "yes";
  +            $response->{"Session-Created"}  = $session->ctime();
  +            $response->{"Session-Expires"}  = $session->atime()+$session->expire();
  +            $response->{"Canvas-URL"}       = $session->param("canvas_url");
  +            $response->{"Canvas-Mark-Head"} = $session->param("canvas_mark_head");
  +            $response->{"Canvas-Mark-Body"} = $session->param("canvas_mark_body");
  +            $response->{"Canvas-Adjust"}    = $session->param("canvas_adjust");
  +            $response->{"Canvas-Caching"}   = $session->param("canvas_caching");
  +            $response->{"Return-URL"}       = $session->param("return_url");
  +            $response->{"User-Address"}     = $session->remote_addr() || "0.0.0.0";
  +            $response->{"User-Login"}       = $session->param("login") || "unknown";
           }
           my $content = '';
           foreach my $key (sort keys %{$response}) {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.util.pl
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ase.cgi.util.pl
  --- ossp-pkg/ase/ase.cgi.util.pl	10 Nov 2005 07:54:43 -0000	1.4
  +++ ossp-pkg/ase/ase.cgi.util.pl	16 Nov 2005 13:13:24 -0000	1.5
  @@ -47,6 +47,66 @@
       return $url;
   }
   
  +#   helper function for fetching an URL
  +sub fetch {
  +    my ($self, $url) = @_;
  +    my $cfg = $self->param(-cfg);
  +
  +    #   determine expire time and content type
  +    my $type    = "application/octet-stream";
  +    my $expires = "+10s";
  +    my $content = "";
  +
  +    #   load external file content 
  +    if ($url =~ m/^https?:\/\/.+$/) { 
  +        die "invalid URL \"$url\"" if ($url !~ m/^https?:\/\/\S+\.(?:ossp\.org|openpkg\.(?:org|com|net))/); # FIXME: SECURITY enough?
  +        my $ua = new LWP::UserAgent;
  +        $ua->agent($cfg->{-prog_name}."/".$cfg->{-prog_vers});
  +        $ua->timeout(20);
  +        $ua->max_size(1*1024*1024);
  +        $ua->max_redirect(2);
  +        $ua->protocols_allowed([ 'http', 'https']);
  +        my $response = $ua->get($url);
  +        die "unable to load URL \"$url\"" if (not $response->is_success);
  +        $type    = $response->content_type;
  +        $expires = $response->expires;
  +        $content = $response->content;
  +    }
  +    else {
  +        die "invalid URL \"$url\"" if ($url =~ m|\.\.| or $url =~ m|^/|); # FIXME: SECURITY enough?
  +        my $filename = $cfg->{-path_datdir}."/".$url;
  +        die "file not found" if (not -f $filename);
  +        $content < IO::All::io($filename)
  +            or die "unable to load file \"$filename\"";
  +        if    ($url =~ m|\.html$|)  { $type = "text/html";  $expires = "+1m"; }
  +        elsif ($url =~ m|\.css$|)   { $type = "text/css";   $expires = "+1m"; }
  +        elsif ($url =~ m|\.png$|)   { $type = "image/png";  $expires = "+1h"; }
  +        elsif ($url =~ m|\.gif$|)   { $type = "image/gif";  $expires = "+1h"; }
  +        elsif ($url =~ m|\.jpe?g$|) { $type = "image/jpeg"; $expires = "+1h"; }
  +    }
  +
  +    #   return results
  +    return ($type, $expires, $content);
  +}
  +
  +#   helper function for adjustment of URLs in Web content
  +sub adjust_url {
  +    my ($self, $type, $content) = @_;
  +
  +    my $adjust_url = sub {
  +        my ($self, $url) = @_;
  +        return ($url =~ m/^[^\/:]+$/ ? $self->url(-mode => "loader", -name => $url) : $1);
  +    };
  +    if ($type eq 'text/css') {
  +        $content =~ s/(url\((['"]?))(.+?)(\2\))/$1.&$adjust_url($self, $3).$4/sge;
  +    }
  +    elsif ($type eq 'text/html') {
  +        $content =~ s/(\s+(?:href|src)=(['"]))([^\2]+?)(\2)/$1.&$adjust_url($self, $3).$4/sge;
  +    }
  +
  +    return $content;
  +}
  +
   #   helper function for generating random string
   sub makerandom {
       my ($self, $n, $set) = @_;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.html
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ase.html
  --- ossp-pkg/ase/ase.html	9 Nov 2005 18:28:22 -0000	1.3
  +++ ossp-pkg/ase/ase.html	16 Nov 2005 13:13:24 -0000	1.4
  @@ -3,13 +3,12 @@
   <html>
     <head>
       <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
  -    <link rel="stylesheet" type="text/css" href="ase.css"/>
       <style type="text/css">
         body { margin-left: 50px; }
       </style>
  -    %HEAD%
  +    <!-- ASE: HEAD -->
     </head>
     <body>
  -    %BODY%
  +    <!-- ASE: BODY -->
     </body>
   </html>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.pm
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ase.pm
  --- /dev/null	2005-11-16 14:13:25 +0100
  +++ ase.pm	2005-11-16 14:13:25 +0100
  @@ -0,0 +1,249 @@
  +##
  +##  OSSP ase -- Affiliation Service Environment
  +##  Copyright (c) 2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2005 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP ase, a service environment for managing
  +##  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  +##
  +##  This program is free software; you can redistribute it and/or modify
  +##  it under the terms of the GNU General Public License as published by
  +##  the Free Software Foundation; either version 2 of the License, or
  +##  (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this program; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  ase.pm: client API
  +##
  +
  +package OSSP::ase::client;
  +
  +use 5.008;
  +use strict;
  +use warnings;
  +use Carp;
  +use Exporter;
  +use IO::Socket::INET;
  +use URI::Escape;
  +
  +our $VERSION = do { my @v = ('0.0.1' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
  +
  +our @ISA = qw(Exporter);
  +our @EXPORT_OK = ();
  +our @EXPORT    = ();
  +
  +sub new {
  +    my $proto = shift;
  +    my $class = ref($proto) || $proto;
  +    my %args = @_;
  +    my $self = {};
  +    bless ($self, $class);
  +    $self->{-server}           = ($args{-server}        || die "no OSSP ase server URL specified with \"-server\"");
  +    $self->{-cgi}              = ($args{-cgi}           || new CGI),;
  +    $self->{-mode}             = ($args{-mode}          || "mode"),;
  +    $self->{-session}          = ($args{-session}       || new CGI::Session),;
  +    $self->{-login}            = ($args{-login}         || "login");
  +    $self->{-valid}            = ($args{-valid}         || "+1m"),;
  +    $self->{-canvas_mark_head} = ($args{-canvas_mark}   || "<!-- ASE: HEAD -->");
  +    $self->{-canvas_mark_body} = ($args{-canvas_mark}   || "<!-- ASE: BODY -->");
  +    $self->{-canvas_adjust}    = ($args{-canvas_adjust} || 1);
  +    $self->{-canvas_caching}   = ($args{-canvas_adjust} || 0);
  +    return $self;
  +}
  +
  +sub DESTROY ($) {
  +    my ($self) = @_;
  +    $self->{-cgi} = undef;
  +    return;
  +}
  +
  +sub run ($;%) {
  +    my ($self, %args) = @_;
  +    my $action = $self->{-cgi}->param("ase-action") || "";
  +
  +    if ($action =~ m/^(login|logout|info)$/) {
  +        #   remember mode during and after action
  +        my $mode_during = $self->{-cgi}->param("ase-mode-during") || "";
  +        my $mode_after  = $self->{-cgi}->param("ase-mode-after")  || "";
  +        $self->{-session}->param("ase-mode-after", $mode_after);
  +
  +        #   determine canvas and return URLs
  +        my $canvas = sprintf("%s?%s=%s", $self->{-cgi}->url(-full => 1), $self->{-mode}, $mode_during);
  +        my $return = sprintf("%s?ase-action=comeback;ase-client-sid=%s;ase-server-sid=%%s",
  +            $self->{-cgi}->url(-full => 1), $self->{-session}->id());
  +
  +        #   determine server request URL
  +        my $url = sprintf("%s?mode=rpc;method=%s;" .
  +            "canvas_url=%s;canvas_mark=%s;canvas_adjust=%s;canvas_caching=%s;" .
  +            "return_url=%s",
  +            $self->{-server},
  +            $action,
  +            URI::Escape::uri_escape($canvas),
  +            URI::Escape::uri_escape($self->{-canvas_mark}),
  +            $self->{-canvas_adjust} ? "yes" : "no",
  +            $self->{-canvas_caching} ? "yes" : "no",
  +            URI::Escape::uri_escape($return)
  +        );
  +
  +        #   redirect to server request URL
  +        print $self->{-cgi}->redirect(-url => $url, -status => 302);
  +        exit(0);
  +    }
  +
  +    elsif ($action eq 'comeback') {
  +        my $client_sid = $self->{-cgi}->param("ase-client-sid");
  +        my $server_sid = $self->{-cgi}->param("ase-server-sid");
  +
  +        #   query server for session
  +        my $server = $self->{-server};
  +        my ($host, $port, $path) = ($server =~ m|^http://([^:]+)((?::\d+)?)(.*)$|) or die;
  +        $path .= "?mode=rpc;method=info;sid=$server_sid";
  +        my $sock = new IO::Socket::INET (
  +            PeerAddr => $host,
  +            PeerPort => $port,
  +            Proto    => "tcp",
  +            Timeout  => 10
  +        ) or die "failed to connect to $host:$port: $@";
  +        $sock->autoflush(1);
  +        $sock->printf(
  +            "GET $path HTTP/1.0\n" .
  +            "Host: $host:$port\n" .
  +            "\n"
  +        );
  +        my $response = '';
  +        $response = $_ while (<$sock>);
  +        $sock->close();
  +
  +        #   parse response
  +        $response =~ s|^HTTP/1.[01x]\s+200\s+.+?\n\n||s;
  +        foreach my $key (qw(
  +            Session-Validity
  +            Session-Created
  +            Session-Expires
  +            Site-Canvas-URL
  +            Site-Canvas-Mark
  +            Site-Canvas-Adjust
  +            Site-Canvas-Caching
  +            Site-Return-URL
  +            User-Address
  +            User-Login
  +        )) {
  +            $response =~ s|^${key}:\s+([^\n]+)$|$self->{-session}->param(lc("ase-$key"), $1), ''|mgei;
  +        }
  +
  +        #   verify login
  +        if (    ($client_sid eq $self->{-session}->id())
  +            and ($self->{-session}->param("ase-session-validity") eq 'yes')) {
  +            #   success
  +            $self->{-session}->param($self->{-login}, $self->{-session}->param("ase-user-login"));
  +        }
  +
  +        my $mode_after = $self->{-session}->param("ase-mode-after");
  +        my $url = sprintf("%s?%s=%s", $self->{-cgi}->url(-relative => 1), $self->{-mode}, $mode_after);
  +
  +        #   redirect to own following URL
  +        print $self->{-cgi}->redirect(-url => $url, -status => 302);
  +        exit(0);
  +    }
  +
  +    return;
  +}
  +
  +sub url ($%) {
  +    my ($self, %args) = @_;
  +    my $base = $self->{-cgi}->url(-relative => 1);
  +    my $mode = $self->{-cgi}->param($self->{-mode}) || "";
  +    my $url = sprintf(
  +        "%s?ase-action=%s;ase-mode-during=%s;ase-mode-after=%s",
  +        $base, $args{-action},
  +        $args{-mode_during} || $mode,
  +        $args{-mode_after}  || $mode
  +    );
  +    return $url;
  +}
  +
  +sub login ($) {
  +    my ($self) = @_;
  +
  +    return $self->{-session}->param($self->{-login});
  +}
  +
  +sub attr ($$) {
  +    my ($self, $name) = @_;
  +
  +    return $self->{-session}->param("ase-$name");
  +}
  +
  +sub canvas ($%) {
  +    my ($self, %args) = @_;
  +
  +    return ($args{-part} eq 'head' ? $self->{-canvas_mark_head} : $self->{-canvas_mark_body});
  +}
  +
  +1;
  +
  +__END__
  +
  +=pod
  +
  +=head1 NAME
  +
  +OSSP::ase::client -- OSSP ase Client API
  +
  +=head1 SYNOPSIS
  +
  +=over 0
  +
  + use CGI;
  + use CGI::Session;
  + use OSSP::ase::client;
  +
  + my $cgi = new CGI;
  +
  +
  +
  + my $myurl = $cgi->url(-full => 1);
  +
  + my $ase = new OSSP::ase::client;
  + $ase->remote_url("http://registry.openpkg.org/ase");
  + $ase->canvas("$myurl?mode=ase-canvas");
  + $ase->rpc("$myurl?mode=ase-rpc;args=%s");
  + $ase->return($myurl);
  +
  + my $cookie = $cgi->param("cookie");
  + 
  + if ($cgi->param("mode") eq '') {
  +     if (   (not own cookie set)
  +         or (not own cookie in own database)
  +         or (own cookie is expired)         )
  +         print $ase->login();
  +     else
  +         my $sid = $ase->session(-sid);
  + }
  + elsif ($cgi->param("mode") eq 'ase-canvas') {
  +     print "<html>....<!-- OSSP ase -->...</html>\n";
  + }
  + elsif ($cgi->param("mode") eq 'ase-rpc') {
  +     print $ase->rpc($cgi->param("args"))
  +         or die "OSSP ase client RPC: ". $ase->error();
  + }
  + else {
  +
  + }
  +
  + print $cgi->header(-cookie => 
  +
  +=head1 DESCRIPTION
  +
  +B<OSSP::ase::client> is the client API of B<OSSP ase>.
  +
  +=cut
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/sample.cgi
  ============================================================================
  $ cvs diff -u -r0 -r1.1 sample.cgi
  --- /dev/null	2005-11-16 14:13:25 +0100
  +++ sample.cgi	2005-11-16 14:13:25 +0100
  @@ -0,0 +1,159 @@
  +#!/usr/bin/env perl
  +##
  +##  OSSP ase -- Affiliation Service Environment
  +##  Copyright (c) 2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2005 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP ase, a service environment for managing
  +##  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  +##
  +##  This program is free software; you can redistribute it and/or modify
  +##  it under the terms of the GNU General Public License as published by
  +##  the Free Software Foundation; either version 2 of the License, or
  +##  (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this program; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  sample.cgi: example CGI application
  +##
  +
  +#   language requirements
  +require 5.008;
  +use strict;
  +use warnings;
  +
  +#   external requirements
  +use DBI;
  +use CGI;
  +use CGI::Cookie;
  +use CGI::Session;
  +use CGI::GuruMeditation;
  +use IO::All;
  +use String::Divert;
  +#use OSSP::ase::client;                                 # production
  +BEGIN { require "./ase.pm"; import OSSP::ase::client; } # development
  +
  +##
  +##  PROLOG
  +##
  +
  +#   establish RDBMS object
  +my $dbi = DBI->connect(
  +    "dbi:SQLite:dbname=sample.db", "", "",
  +    { RaiseError => 1, AutoCommit => 1 }
  +) or die;
  +
  +#   establish CGI Query object
  +my $cgi = new CGI;
  +
  +#   establish CGI Session object
  +CGI::Session->name("sid");
  +my $session = new CGI::Session(
  +    "driver:sqlite;serializer:Storable;id:uuid", $cgi,
  +    { Handle => $dbi, TableName => 'session' }
  +) or die;
  +$session->expires("+1m");
  +
  +#   establish ASE object
  +my $ase = new OSSP::ase::client(
  +    -server  => "http://registry.openpkg.org/ase",
  +    -cgi     => $cgi,
  +    -mode    => "mode",
  +    -session => $session,
  +    -login   => "login",
  +    -valid   => "+1m",
  +) or die;
  +$ase->run();
  +
  +#   establish HTML output object
  +my $html = new String::Divert;
  +$html->folder('{#%s#}', '\{#([a-zA-Z_][a-zA-Z0-9_-]*)#\}');
  +my $txt < IO::All::io("sample.html")
  +    or die "unable to read HTML skeleton file \"sample.html"."\"";
  +$txt =~ s/<!-- HEAD -->/$html->folder("head")/se;
  +$txt =~ s/<!-- BODY -->/"<div class=\"sample\">\n".$html->folder("body")."<\/div>\n"/se;
  +$html->append($txt);
  +$html->divert("body");
  +$html->overload(1);
  +
  +##
  +##  MAIN
  +##
  +
  +my $mode  = ($cgi->url_param("mode") || $cgi->param("mode")) || "page1";
  +
  +sub show_login () {
  +    my $html = '';
  +    if ($ase->login()) {
  +        $html .= sprintf(
  +            "Logged in as &lt;<a href=\"%s\">%s</a>&lt; (%s) [<a href=\"%s\">Logout</a>]\n",
  +            $ase->url(-action => "info", -mode_during => "login", -mode_after => "page1"),
  +            $ase->login(),
  +            $ase->attr("realname") || "Unknown",
  +            $ase->url(-action => "logout", -mode_during => "login", -mode_after => "page2")
  +        );
  +    }
  +    else {
  +        $html .= sprintf(
  +            "Not logged in [<a href=\"%s\">Login</a>]\n",
  +            $ase->url(-action => "login", -mode_during => "login", -mode_after => "page1")
  +        );
  +    }
  +    return $html;
  +}
  +
  +$html .= "Navigation:\n";
  +$html .= sprintf("<a href=\"%s\">Page 1</a>", $cgi->url(-relative => 1)."?mode=page1") . " | ";
  +$html .= sprintf("<a href=\"%s\">Page 2</a>", $cgi->url(-relative => 1)."?mode=page2");
  +$html .= "<p/>\n";
  +
  +if ($mode eq "login") {
  +    $html .= "<h1>Login</h1>\n";
  +    $html->divert("head");
  +    $html .= $ase->canvas(-part => "head");
  +    $html->undivert();
  +    $html .= $ase->canvas(-part => "body");
  +}
  +elsif ($mode eq "page1") {
  +    $html .= show_login();
  +    $html .= "<h1>Page #1</h1>\n";
  +    $html .= "Content Page #1\n";
  +}
  +elsif ($mode eq "page2") {
  +    $html .= show_login();
  +    $html .= "<h1>Page #2</h1>\n";
  +    $html .= "Content Page #2\n";
  +}
  +
  +##
  +##  EPILOG
  +##
  +
  +#   determine HTTP response header
  +my $cookie = new CGI::Cookie(
  +    -name    => $session->name(),
  +    -value   => $session->id(),
  +    -expires => $session->atime()+$session->expire(),
  +    -path    => $cgi->url(-absolute => 1),
  +);
  +my $header = $cgi->header(
  +    -cookie => [$cookie]
  +);
  +
  +#   determine HTTP response body
  +$html->undivert(0);
  +my $body = $html->string();
  +
  +#   send response
  +$|++;
  +print $header . $body;
  +exit(0);
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/sample.css
  ============================================================================
  $ cvs diff -u -r0 -r1.1 sample.css
  --- /dev/null	2005-11-16 14:13:25 +0100
  +++ sample.css	2005-11-16 14:13:25 +0100
  @@ -0,0 +1,16 @@
  +
  +body {
  +    background:       #f0f0f0;
  +}
  +
  +h1 {
  +    font-family:      tahoma, arial, helvetica, sans-serif;
  +    font-weight:      bold;
  +    font-size:        32px;
  +    margin:           0px 0px 8px 0px;
  +}
  +
  +div#canvas {
  +    background:       #300fff;
  +}
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/sample.db.sh
  ============================================================================
  $ cvs diff -u -r0 -r1.1 sample.db.sh
  --- /dev/null	2005-11-16 14:13:25 +0100
  +++ sample.db.sh	2005-11-16 14:13:25 +0100
  @@ -0,0 +1,15 @@
  +#!/bin/sh
  +cmd="$1"
  +if [ ".$cmd" = . ]; then
  +    cmd="dump"
  +fi
  +case "$cmd" in
  +    init )
  +        rm -f sample.db
  +        sqlite3 sample.db <sample.db.sql
  +        chmod a+rw sample.db
  +        ;;
  +    dump )
  +        sqlite3 sample.db .dump
  +        ;;
  +esac
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/sample.db.sql
  ============================================================================
  $ cvs diff -u -r0 -r1.1 sample.db.sql
  --- /dev/null	2005-11-16 14:13:25 +0100
  +++ sample.db.sql	2005-11-16 14:13:25 +0100
  @@ -0,0 +1,19 @@
  +
  +CREATE TABLE user (
  +    email          TEXT NOT NULL,
  +                   -- User Email-Address
  +                   -- [rse@engelschall.com]
  +    realname       TEXT NOT NULL
  +                   -- User Real-Name
  +                   -- [Ralf S. Engelschall]
  +);
  +
  +CREATE TABLE session (
  +    id             CHAR(32) NOT NULL PRIMARY KEY,
  +                   -- Session Identifier (OSSP::uuid based)
  +                   -- [75468374-8721-11d9-bee4-0002a5489f14]
  +    a_session      TEXT NOT NULL
  +                   -- Session Data (Storage based)
  +                   -- [XXXXXXX...]
  +);
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/sample.html
  ============================================================================
  $ cvs diff -u -r0 -r1.1 sample.html
  --- /dev/null	2005-11-16 14:13:25 +0100
  +++ sample.html	2005-11-16 14:13:25 +0100
  @@ -0,0 +1,15 @@
  +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  +  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  +<html>
  +  <head>
  +    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
  +    <link rel="stylesheet" type="text/css" href="sample.css"/>
  +    <!-- HEAD -->
  +  </head>
  +  <body>
  +    <h1>Sample</h1>
  +    <div id="canvas">
  +      <!-- BODY -->
  +    </div>
  +  </body>
  +</html>
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov 16 14:14:28 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 091CB75296B; Wed, 16 Nov 2005 14:14:28 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/string-divert/ Divert.pm
Message-Id: <20051116131428.091CB75296B@mail.ossp.org>
Date: Wed, 16 Nov 2005 14:14:28 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Nov-2005 14:14:27
  Branch: HEAD                             Handle: 2005111613142700

  Modified files:
    ossp-pkg/string-divert  Divert.pm

  Log:
    bump version before release

  Summary:
    Revision    Changes     Path
    1.16        +1  -1      ossp-pkg/string-divert/Divert.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/Divert.pm
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 Divert.pm
  --- ossp-pkg/string-divert/Divert.pm	16 Nov 2005 12:51:13 -0000	1.15
  +++ ossp-pkg/string-divert/Divert.pm	16 Nov 2005 13:14:27 -0000	1.16
  @@ -37,7 +37,7 @@
   use Carp;
   require Exporter;
   
  -our $VERSION   = '0.95';
  +our $VERSION   = '0.96';
   
   our @ISA       = qw(Exporter);
   our @EXPORT    = qw();
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 21 10:07:39 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 4534A752909; Mon, 21 Nov 2005 10:07:39 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi ase.cgi.loader.pl ase.cgi.main.pl as...
Message-Id: <20051121090739.4534A752909@mail.ossp.org>
Date: Mon, 21 Nov 2005 10:07:39 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Nov-2005 10:07:39
  Branch: HEAD                             Handle: 2005112109073701

  Modified files:
    ossp-pkg/ase            ase.cgi ase.cgi.loader.pl ase.cgi.main.pl
                            ase.cgi.util.pl ase.css sample.cgi sample.css
                            sample.html

  Log:
    finally fix the URL rewritings during canvas embedding

  Summary:
    Revision    Changes     Path
    1.9         +1  -0      ossp-pkg/ase/ase.cgi
    1.5         +1  -1      ossp-pkg/ase/ase.cgi.loader.pl
    1.11        +1  -1      ossp-pkg/ase/ase.cgi.main.pl
    1.6         +14 -5      ossp-pkg/ase/ase.cgi.util.pl
    1.4         +2  -2      ossp-pkg/ase/ase.css
    1.2         +12 -3      ossp-pkg/ase/sample.cgi
    1.2         +11 -2      ossp-pkg/ase/sample.css
    1.2         +0  -1      ossp-pkg/ase/sample.html
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 ase.cgi
  --- ossp-pkg/ase/ase.cgi	16 Nov 2005 13:13:24 -0000	1.8
  +++ ossp-pkg/ase/ase.cgi	21 Nov 2005 09:07:37 -0000	1.9
  @@ -59,6 +59,7 @@
   use Digest::SHA1;                       # from OpenPKG "perl-crypto"
   use Mail::Sendmail;                     # from OpenPKG "perl-mail"
   use HTML::Entities qw();                # from OpenPKG "perl-www"
  +use URI;                                # from OpenPKG "perl-www"
   use URI::Escape;                        # from OpenPKG "perl-www"
   use CGI;                                # from OpenPKG "perl-www"
   use CGI::Cookie;                        # from OpenPKG "perl-www"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.loader.pl
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ase.cgi.loader.pl
  --- ossp-pkg/ase/ase.cgi.loader.pl	16 Nov 2005 13:13:24 -0000	1.4
  +++ ossp-pkg/ase/ase.cgi.loader.pl	21 Nov 2005 09:07:37 -0000	1.5
  @@ -43,7 +43,7 @@
       my ($type, $expires, $content) = $self->fetch($name);
   
       #   adjust content
  -    $content = $self->adjust_url($type, $content);
  +    $content = $self->adjust_url($name, $type, $content);
   
       #   pass back content
       $self->header_props(-type => $type, -expires => $expires);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	16 Nov 2005 13:13:24 -0000	1.10
  +++ ossp-pkg/ase/ase.cgi.main.pl	21 Nov 2005 09:07:37 -0000	1.11
  @@ -81,7 +81,7 @@
       #   FIXME: caching
       my ($canvas_type, undef, $canvas) = $self->fetch($canvas_url);
       die "invalid content type" if ($canvas_type ne 'text/html');
  -    $canvas = $self->adjust_url($canvas_type, $canvas) if ($canvas_adjust);
  +    $canvas = $self->adjust_url($canvas_url, $canvas_type, $canvas) if ($canvas_adjust);
       if ($canvas =~ m/${canvas_mark_head}/si) {
           $canvas =~ s/${canvas_mark_head}([ \t]*\n)?/$html->folder("head")/sie;
       }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.util.pl
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ase.cgi.util.pl
  --- ossp-pkg/ase/ase.cgi.util.pl	16 Nov 2005 13:13:24 -0000	1.5
  +++ ossp-pkg/ase/ase.cgi.util.pl	21 Nov 2005 09:07:38 -0000	1.6
  @@ -91,17 +91,26 @@
   
   #   helper function for adjustment of URLs in Web content
   sub adjust_url {
  -    my ($self, $type, $content) = @_;
  +    my ($self, $base_url, $type, $content) = @_;
   
       my $adjust_url = sub {
  -        my ($self, $url) = @_;
  -        return ($url =~ m/^[^\/:]+$/ ? $self->url(-mode => "loader", -name => $url) : $1);
  +        my ($self, $direct, $base_url, $url) = @_;
  +        my $bu = new URI $base_url;
  +        if (defined($bu->scheme)) {
  +            my $u = new URI $url;
  +            $url = $u->abs($base_url)->as_string();
  +        }
  +        return ($direct ? $url : $self->url(-mode => "loader", -name => $url));
       };
       if ($type eq 'text/css') {
  -        $content =~ s/(url\((['"]?))(.+?)(\2\))/$1.&$adjust_url($self, $3).$4/sge;
  +        $content =~ s/(url\((['"]?))(.+?)(\2\))/$1.&$adjust_url($self, 0, $base_url, $3).$4/sgei;
  +        $content =~ s/(\@import\s+\((['"]?))(.+?)(\2\))/$1.&$adjust_url($self, 0, $base_url, $3).$4/sgei;
       }
       elsif ($type eq 'text/html') {
  -        $content =~ s/(\s+(?:href|src)=(['"]))([^\2]+?)(\2)/$1.&$adjust_url($self, $3).$4/sge;
  +        $content =~ s/(<link\s+[^>]*(?:href)=(['"]))([^\2]+?)(\2)/$1.&$adjust_url($self, 0, $base_url, $3).$4/sgei;
  +        $content =~ s/(<(?:img|script)\s+[^>]*(?:src)=(['"]))([^\2]+?)(\2)/$1.&$adjust_url($self, 0, $base_url, $3).$4/sgei;
  +        $content =~ s/(<form\s+[^>]*(?:action)=(['"]))([^\2]+?)(\2)/$1.&$adjust_url($self, 0, $base_url, $3).$4/sgei;
  +        $content =~ s/(<a\s+[^>]*(?:href)=(['"]))([^\2]+?)(\2)/$1.&$adjust_url($self, 1, $base_url, $3).$4/sgei;
       }
   
       return $content;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.css
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ase.css
  --- ossp-pkg/ase/ase.css	29 Aug 2005 17:36:56 -0000	1.3
  +++ ossp-pkg/ase/ase.css	21 Nov 2005 09:07:38 -0000	1.4
  @@ -39,7 +39,7 @@
   .ase a.button {
       color:            #444444;
       background:       #f8f8f8;
  -    background-image: url(ase.img.bar16.png);
  +    background-image: url('ase.img.bar16.png');
       border-top:       1px solid #f0f0f0;
       border-left:      1px solid #cccccc;
       border-right:     1px solid #999999;
  @@ -157,7 +157,7 @@
   .ase input.button {
       color:            #444444;
       background:       #f8f8f8;
  -    background-image: url(ase.img.bar16.png);
  +    background-image: url('ase.img.bar16.png');
       border-top:       1px solid #f0f0f0;
       border-left:      1px solid #cccccc;
       border-right:     1px solid #999999;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/sample.cgi
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 sample.cgi
  --- ossp-pkg/ase/sample.cgi	16 Nov 2005 13:13:24 -0000	1.1
  +++ ossp-pkg/ase/sample.cgi	21 Nov 2005 09:07:38 -0000	1.2
  @@ -110,13 +110,16 @@
       return $html;
   }
   
  +$html .= "<h1>Sample Application</h1>\n";
  +
   $html .= "Navigation:\n";
   $html .= sprintf("<a href=\"%s\">Page 1</a>", $cgi->url(-relative => 1)."?mode=page1") . " | ";
   $html .= sprintf("<a href=\"%s\">Page 2</a>", $cgi->url(-relative => 1)."?mode=page2");
  +$html .= "<hr/>\n";
   $html .= "<p/>\n";
   
   if ($mode eq "login") {
  -    $html .= "<h1>Login</h1>\n";
  +    $html .= "<h2>Login</h1>\n";
       $html->divert("head");
       $html .= $ase->canvas(-part => "head");
       $html->undivert();
  @@ -124,15 +127,21 @@
   }
   elsif ($mode eq "page1") {
       $html .= show_login();
  -    $html .= "<h1>Page #1</h1>\n";
  +    $html .= "<h2>Page #1</h2>\n";
       $html .= "Content Page #1\n";
   }
   elsif ($mode eq "page2") {
       $html .= show_login();
  -    $html .= "<h1>Page #2</h1>\n";
  +    $html .= "<h2>Page #2</h2>\n";
       $html .= "Content Page #2\n";
   }
   
  +$html .= "<p/>\n";
  +$html .= "<hr/>\n";
  +$html .= "Navigation:\n";
  +$html .= sprintf("<a href=\"%s\">Page 1</a>", $cgi->url(-relative => 1)."?mode=page1") . " | ";
  +$html .= sprintf("<a href=\"%s\">Page 2</a>", $cgi->url(-relative => 1)."?mode=page2");
  +
   ##
   ##  EPILOG
   ##
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/sample.css
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 sample.css
  --- ossp-pkg/ase/sample.css	16 Nov 2005 13:13:24 -0000	1.1
  +++ ossp-pkg/ase/sample.css	21 Nov 2005 09:07:38 -0000	1.2
  @@ -1,6 +1,6 @@
   
   body {
  -    background:       #f0f0f0;
  +    background:       #cccccc;
   }
   
   h1 {
  @@ -10,7 +10,16 @@
       margin:           0px 0px 8px 0px;
   }
   
  +h2 {
  +    font-family:      tahoma, arial, helvetica, sans-serif;
  +    font-weight:      bold;
  +    font-size:        24px;
  +    margin:           0px 0px 8px 0px;
  +}
  +
   div#canvas {
  -    background:       #300fff;
  +    padding:          10px 10px 10px 10px;
  +    border:           1px solid #000000;
  +    background:       #f0f0f0;
   }
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/sample.html
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 sample.html
  --- ossp-pkg/ase/sample.html	16 Nov 2005 13:13:24 -0000	1.1
  +++ ossp-pkg/ase/sample.html	21 Nov 2005 09:07:38 -0000	1.2
  @@ -7,7 +7,6 @@
       <!-- HEAD -->
     </head>
     <body>
  -    <h1>Sample</h1>
       <div id="canvas">
         <!-- BODY -->
       </div>
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 21 14:31:47 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 10C0C75291D; Mon, 21 Nov 2005 14:31:46 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO ase.cgi.rpc.pl ase.pm sample.cgi
Message-Id: <20051121133146.10C0C75291D@mail.ossp.org>
Date: Mon, 21 Nov 2005 14:31:46 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Nov-2005 14:31:45
  Branch: HEAD                             Handle: 2005112113314500

  Modified files:
    ossp-pkg/ase            TODO ase.cgi.rpc.pl ase.pm sample.cgi

  Log:
    get comeback working now, too

  Summary:
    Revision    Changes     Path
    1.5         +3  -0      ossp-pkg/ase/TODO
    1.4         +9  -1      ossp-pkg/ase/ase.cgi.rpc.pl
    1.2         +13 -6      ossp-pkg/ase/ase.pm
    1.3         +3  -3      ossp-pkg/ase/sample.cgi
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 TODO
  --- ossp-pkg/ase/TODO	9 Nov 2005 18:10:11 -0000	1.4
  +++ ossp-pkg/ase/TODO	21 Nov 2005 13:31:45 -0000	1.5
  @@ -2,3 +2,6 @@
   - add support to ase CLI for initial creation of database (use in OpenPKG ase.spec:%post)
   - add INSTALL document which shows how to link with webserver
   - CGI::GuruMeditation and CGI::Carp do not work under Apache/mod_perl
  +
  +- rueckweg
  +- logout im ASE
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.rpc.pl
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ase.cgi.rpc.pl
  --- ossp-pkg/ase/ase.cgi.rpc.pl	16 Nov 2005 13:13:24 -0000	1.3
  +++ ossp-pkg/ase/ase.cgi.rpc.pl	21 Nov 2005 13:31:45 -0000	1.4
  @@ -93,7 +93,15 @@
               $response->{"Canvas-Caching"}   = $session->param("canvas_caching");
               $response->{"Return-URL"}       = $session->param("return_url");
               $response->{"User-Address"}     = $session->remote_addr() || "0.0.0.0";
  -            $response->{"User-Login"}       = $session->param("login") || "unknown";
  +            my $sth = $dbi->prepare(
  +                "SELECT * FROM ase_member WHERE me_uuid = ?;")
  +                or die $dbi->errstr();
  +            $sth->execute($session->param("login"))
  +                or die $dbi->errstr();
  +            my $rec = $sth->fetchrow_hashref()
  +                or die "no member found under UUID";
  +            $response->{"User-UUID"}  = $session->param("login") || "unknown";
  +            $response->{"User-Login"} = $rec->{"me_address"}     || "unknown";
           }
           my $content = '';
           foreach my $key (sort keys %{$response}) {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.pm
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ase.pm
  --- ossp-pkg/ase/ase.pm	16 Nov 2005 13:13:24 -0000	1.1
  +++ ossp-pkg/ase/ase.pm	21 Nov 2005 13:31:45 -0000	1.2
  @@ -33,6 +33,9 @@
   use Exporter;
   use IO::Socket::INET;
   use URI::Escape;
  +use lib ".";
  +use debug;
  +my $debug = new debug (-file => "/tmp/ase.log");
   
   our $VERSION = do { my @v = ('0.0.1' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
   
  @@ -51,7 +54,7 @@
       $self->{-mode}             = ($args{-mode}          || "mode"),;
       $self->{-session}          = ($args{-session}       || new CGI::Session),;
       $self->{-login}            = ($args{-login}         || "login");
  -    $self->{-valid}            = ($args{-valid}         || "+1m"),;
  +    $self->{-valid}            = ($args{-valid}         || "+5m"),;
       $self->{-canvas_mark_head} = ($args{-canvas_mark}   || "<!-- ASE: HEAD -->");
       $self->{-canvas_mark_body} = ($args{-canvas_mark}   || "<!-- ASE: BODY -->");
       $self->{-canvas_adjust}    = ($args{-canvas_adjust} || 1);
  @@ -88,7 +91,7 @@
               $action,
               URI::Escape::uri_escape($canvas),
               URI::Escape::uri_escape($self->{-canvas_mark}),
  -            $self->{-canvas_adjust} ? "yes" : "no",
  +            $self->{-canvas_adjust}  ? "yes" : "no",
               $self->{-canvas_caching} ? "yes" : "no",
               URI::Escape::uri_escape($return)
           );
  @@ -104,7 +107,9 @@
   
           #   query server for session
           my $server = $self->{-server};
  -        my ($host, $port, $path) = ($server =~ m|^http://([^:]+)((?::\d+)?)(.*)$|) or die;
  +        my ($host, $port, $path) = ($server =~ m|^http://([^:/]+)((?::\d+)?)(.*)$|) or die;
  +        $port ||= 80;
  +        $port =~ s|^:||;
           $path .= "?mode=rpc;method=info;sid=$server_sid";
           my $sock = new IO::Socket::INET (
               PeerAddr => $host,
  @@ -119,10 +124,11 @@
               "\n"
           );
           my $response = '';
  -        $response = $_ while (<$sock>);
  +        $response .= $_ while (<$sock>);
           $sock->close();
   
           #   parse response
  +        $debug->dump($response, $self);
           $response =~ s|^HTTP/1.[01x]\s+200\s+.+?\n\n||s;
           foreach my $key (qw(
               Session-Validity
  @@ -133,11 +139,12 @@
               Site-Canvas-Adjust
               Site-Canvas-Caching
               Site-Return-URL
  -            User-Address
               User-Login
  +            User-UUID
           )) {
  -            $response =~ s|^${key}:\s+([^\n]+)$|$self->{-session}->param(lc("ase-$key"), $1), ''|mgei;
  +            $response =~ s|${key}:\s+([^\n]+)\n|$self->{-session}->param(lc("ase-$key"), $1), ''|sei;
           }
  +        $debug->dump($response, $self);
   
           #   verify login
           if (    ($client_sid eq $self->{-session}->id())
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/sample.cgi
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 sample.cgi
  --- ossp-pkg/ase/sample.cgi	21 Nov 2005 09:07:38 -0000	1.2
  +++ ossp-pkg/ase/sample.cgi	21 Nov 2005 13:31:45 -0000	1.3
  @@ -60,7 +60,7 @@
       "driver:sqlite;serializer:Storable;id:uuid", $cgi,
       { Handle => $dbi, TableName => 'session' }
   ) or die;
  -$session->expires("+1m");
  +$session->expires("+5m");
   
   #   establish ASE object
   my $ase = new OSSP::ase::client(
  @@ -94,10 +94,9 @@
       my $html = '';
       if ($ase->login()) {
           $html .= sprintf(
  -            "Logged in as &lt;<a href=\"%s\">%s</a>&lt; (%s) [<a href=\"%s\">Logout</a>]\n",
  +            "Logged in as &lt;<a href=\"%s\">%s</a>&gt; [<a href=\"%s\">Logout</a>]\n",
               $ase->url(-action => "info", -mode_during => "login", -mode_after => "page1"),
               $ase->login(),
  -            $ase->attr("realname") || "Unknown",
               $ase->url(-action => "logout", -mode_during => "login", -mode_after => "page2")
           );
       }
  @@ -111,6 +110,7 @@
   }
   
   $html .= "<h1>Sample Application</h1>\n";
  +$html .= sprintf("SID:%s<br>\n", $session->id());
   
   $html .= "Navigation:\n";
   $html .= sprintf("<a href=\"%s\">Page 1</a>", $cgi->url(-relative => 1)."?mode=page1") . " | ";
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 21 14:32:12 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 6CD0775291C; Mon, 21 Nov 2005 14:32:12 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.pm
Message-Id: <20051121133212.6CD0775291C@mail.ossp.org>
Date: Mon, 21 Nov 2005 14:32:12 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Nov-2005 14:32:12
  Branch: HEAD                             Handle: 2005112113321200

  Modified files:
    ossp-pkg/ase            ase.pm

  Log:
    ops, remove my debugging aid

  Summary:
    Revision    Changes     Path
    1.3         +0  -3      ossp-pkg/ase/ase.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.pm
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ase.pm
  --- ossp-pkg/ase/ase.pm	21 Nov 2005 13:31:45 -0000	1.2
  +++ ossp-pkg/ase/ase.pm	21 Nov 2005 13:32:12 -0000	1.3
  @@ -34,8 +34,6 @@
   use IO::Socket::INET;
   use URI::Escape;
   use lib ".";
  -use debug;
  -my $debug = new debug (-file => "/tmp/ase.log");
   
   our $VERSION = do { my @v = ('0.0.1' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
   
  @@ -144,7 +142,6 @@
           )) {
               $response =~ s|${key}:\s+([^\n]+)\n|$self->{-session}->param(lc("ase-$key"), $1), ''|sei;
           }
  -        $debug->dump($response, $self);
   
           #   verify login
           if (    ($client_sid eq $self->{-session}->id())
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 21 15:13:52 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 1285375291D; Mon, 21 Nov 2005 15:13:51 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO ase.cgi.logout.pl ase.cgi.rpc.pl ase.pm...
Message-Id: <20051121141351.1285375291D@mail.ossp.org>
Date: Mon, 21 Nov 2005 15:13:51 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Nov-2005 15:13:51
  Branch: HEAD                             Handle: 2005112114135100

  Modified files:
    ossp-pkg/ase            TODO ase.cgi.logout.pl ase.cgi.rpc.pl ase.pm
                            sample.cgi

  Log:
    flush fixed and todos until now

  Summary:
    Revision    Changes     Path
    1.6         +8  -2      ossp-pkg/ase/TODO
    1.4         +8  -0      ossp-pkg/ase/ase.cgi.logout.pl
    1.5         +3  -7      ossp-pkg/ase/ase.cgi.rpc.pl
    1.4         +7  -1      ossp-pkg/ase/ase.pm
    1.4         +2  -2      ossp-pkg/ase/sample.cgi
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 TODO
  --- ossp-pkg/ase/TODO	21 Nov 2005 13:31:45 -0000	1.5
  +++ ossp-pkg/ase/TODO	21 Nov 2005 14:13:51 -0000	1.6
  @@ -3,5 +3,11 @@
   - add INSTALL document which shows how to link with webserver
   - CGI::GuruMeditation and CGI::Carp do not work under Apache/mod_perl
   
  -- rueckweg
  -- logout im ASE
  +- speed optimization (caching)
  +- cleanup internal variables
  +- remove or disable dead code in ASE (profile)
  +- remove or finish missing code in ASE (recovery)
  +- package ASE as OpenPKG package
  +- forced validation of session (timed, manual)
  +- info RPC page
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.logout.pl
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ase.cgi.logout.pl
  --- ossp-pkg/ase/ase.cgi.logout.pl	10 Nov 2005 07:54:43 -0000	1.3
  +++ ossp-pkg/ase/ase.cgi.logout.pl	21 Nov 2005 14:13:51 -0000	1.4
  @@ -36,6 +36,9 @@
       my $html    = $self->param(-html);
       my $session = $self->param(-session);
   
  +    #   optionally redirect to external return URL
  +    my $return_url = $session->param("return_url");
  +
       #   remove the session from the database
       $session->delete();
   
  @@ -62,6 +65,11 @@
           "Go to <b>Login</b> screen" .
           "</a>\n";
   
  +    #   optionally redirect to external return URL
  +    if (defined($return_url)) {
  +        return $self->redirect(sprintf($return_url, "none"));
  +    }
  +
       return;
   }
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.rpc.pl
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ase.cgi.rpc.pl
  --- ossp-pkg/ase/ase.cgi.rpc.pl	21 Nov 2005 13:31:45 -0000	1.4
  +++ ossp-pkg/ase/ase.cgi.rpc.pl	21 Nov 2005 14:13:51 -0000	1.5
  @@ -39,7 +39,7 @@
   
       my $method = $cgi->param("method") || "login";
   
  -    if ($method eq "login") {
  +    if ($method eq "login" or $method eq "logout") {
           #   parameter sanity checking
           my $canvas_mark_head = $cgi->param("canvas_mark_head") || "";
           my $canvas_mark_body = $cgi->param("canvas_mark_body") || "";
  @@ -58,12 +58,8 @@
           $session->param("canvas_url",       $canvas_url);
           $session->param("return_url",       $return_url);
   
  -        #   redirect to login screen (to clear URL)
  -        return $self->redirect($self->url(-mode => "login"));
  -    }
  -
  -    elsif ($method eq "logout") {
  -        #   FIXME
  +        #   redirect to login/logout screen (to clear URL)
  +        return $self->redirect($self->url(-mode => $method));
       }
   
       elsif ($method eq "info") {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.pm
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ase.pm
  --- ossp-pkg/ase/ase.pm	21 Nov 2005 13:32:12 -0000	1.3
  +++ ossp-pkg/ase/ase.pm	21 Nov 2005 14:13:51 -0000	1.4
  @@ -125,8 +125,10 @@
           $response .= $_ while (<$sock>);
           $sock->close();
   
  +        #   prepare
  +        $self->{-session}->clear(["ase-session-validity"]);
  +
           #   parse response
  -        $debug->dump($response, $self);
           $response =~ s|^HTTP/1.[01x]\s+200\s+.+?\n\n||s;
           foreach my $key (qw(
               Session-Validity
  @@ -149,6 +151,10 @@
               #   success
               $self->{-session}->param($self->{-login}, $self->{-session}->param("ase-user-login"));
           }
  +        else {
  +            #   failure
  +            $self->{-session}->clear([$self->{-login}]);
  +        }
   
           my $mode_after = $self->{-session}->param("ase-mode-after");
           my $url = sprintf("%s?%s=%s", $self->{-cgi}->url(-relative => 1), $self->{-mode}, $mode_after);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/sample.cgi
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 sample.cgi
  --- ossp-pkg/ase/sample.cgi	21 Nov 2005 13:31:45 -0000	1.3
  +++ ossp-pkg/ase/sample.cgi	21 Nov 2005 14:13:51 -0000	1.4
  @@ -97,13 +97,13 @@
               "Logged in as &lt;<a href=\"%s\">%s</a>&gt; [<a href=\"%s\">Logout</a>]\n",
               $ase->url(-action => "info", -mode_during => "login", -mode_after => "page1"),
               $ase->login(),
  -            $ase->url(-action => "logout", -mode_during => "login", -mode_after => "page2")
  +            $ase->url(-action => "logout", -mode_during => "login", -mode_after => $mode)
           );
       }
       else {
           $html .= sprintf(
               "Not logged in [<a href=\"%s\">Login</a>]\n",
  -            $ase->url(-action => "login", -mode_during => "login", -mode_after => "page1")
  +            $ase->url(-action => "login", -mode_during => "login", -mode_after => $mode)
           );
       }
       return $html;
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 21 18:07:53 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 4E7887533DF; Mon, 21 Nov 2005 18:07:53 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO
Message-Id: <20051121170753.4E7887533DF@mail.ossp.org>
Date: Mon, 21 Nov 2005 18:07:53 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Nov-2005 18:07:53
  Branch: HEAD                             Handle: 2005112117075200

  Modified files:
    ossp-pkg/ase            TODO

  Log:
    remember todo

  Summary:
    Revision    Changes     Path
    1.7         +23 -7      ossp-pkg/ase/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 TODO
  --- ossp-pkg/ase/TODO	21 Nov 2005 14:13:51 -0000	1.6
  +++ ossp-pkg/ase/TODO	21 Nov 2005 17:07:52 -0000	1.7
  @@ -1,13 +1,29 @@
  -- add OSSP::cfg based ase.cfg for external file referencing & embedded texts & mailing
  -- add support to ase CLI for initial creation of database (use in OpenPKG ase.spec:%post)
  -- add INSTALL document which shows how to link with webserver
  -- CGI::GuruMeditation and CGI::Carp do not work under Apache/mod_perl
   
  -- speed optimization (caching)
  +TODO:
  +- forced validation of session (timed, manual)
  +- info RPC page
   - cleanup internal variables
   - remove or disable dead code in ASE (profile)
   - remove or finish missing code in ASE (recovery)
  +
  +CANDO:
   - package ASE as OpenPKG package
  -- forced validation of session (timed, manual)
  -- info RPC page
  +- speed optimization (caching)
  +- add OSSP::cfg based ase.cfg for external file referencing & embedded texts & mailing
  +- add support to ase CLI for initial creation of database (use in OpenPKG ase.spec:%post)
  +- add INSTALL document which shows how to link with webserver
  +- CGI::GuruMeditation and CGI::Carp do not work under Apache/mod_perl
  +
  +User Attributes:
  +- uuid internal
  +- email verified
  +- password 
  +- telefonnummer
  +- business area
  +- company name
  +- snail mail address
  +- country code
  +- number of platforms
  +- number of servers
  +- number of instances
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 21 18:30:16 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id C0D4E752909; Mon, 21 Nov 2005 18:30:15 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.main.pl
Message-Id: <20051121173015.C0D4E752909@mail.ossp.org>
Date: Mon, 21 Nov 2005 18:30:15 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Nov-2005 18:30:15
  Branch: HEAD                             Handle: 2005112117301500

  Modified files:
    ossp-pkg/ase            ase.cgi.main.pl

  Log:
    add identification to HTTP response, too

  Summary:
    Revision    Changes     Path
    1.12        +5  -0      ossp-pkg/ase/ase.cgi.main.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	21 Nov 2005 09:07:37 -0000	1.11
  +++ ossp-pkg/ase/ase.cgi.main.pl	21 Nov 2005 17:30:15 -0000	1.12
  @@ -206,6 +206,11 @@
       );
       $self->header_add(-cookie => [$cookie]);
   
  +    #   set a custom HTTP header for identification
  +    my $cfg = $self->param(-cfg);
  +    my $id = sprintf("%s %s (%s)", $cfg->{-prog_name}, $cfg->{-prog_vers}, $cfg->{-prog_date});
  +    $self->header_props(-X_User_Agent => $id);
  +
       #   switch to unbuffered output
       $|++;
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 21 22:29:17 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id EDD1E75291D; Mon, 21 Nov 2005 22:29:16 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.login.pl ase.cgi.logout.pl ase.cgi.m...
Message-Id: <20051121212916.EDD1E75291D@mail.ossp.org>
Date: Mon, 21 Nov 2005 22:29:16 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Nov-2005 22:29:16
  Branch: HEAD                             Handle: 2005112121291600

  Modified files:
    ossp-pkg/ase            ase.cgi.login.pl ase.cgi.logout.pl ase.cgi.main.pl
                            ase.cgi.rpc.pl ase.pm sample.cgi

  Log:
    flush work of this evening: cleanups and fixes

  Summary:
    Revision    Changes     Path
    1.7         +1  -1      ossp-pkg/ase/ase.cgi.login.pl
    1.5         +4  -4      ossp-pkg/ase/ase.cgi.logout.pl
    1.13        +1  -1      ossp-pkg/ase/ase.cgi.main.pl
    1.6         +23 -10     ossp-pkg/ase/ase.cgi.rpc.pl
    1.5         +25 -22     ossp-pkg/ase/ase.pm
    1.5         +8  -8      ossp-pkg/ase/sample.cgi
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	16 Nov 2005 13:13:24 -0000	1.6
  +++ ossp-pkg/ase/ase.cgi.login.pl	21 Nov 2005 21:29:16 -0000	1.7
  @@ -224,7 +224,7 @@
       $self->logbook("login by ".$rec->{'me_address'}); 
   
       #   perform login: either go to menu or redirect to external return URL
  -    if (defined(my $url = $session->param("return_url"))) {
  +    if (defined(my $url = $session->param("after_login"))) {
           return $self->redirect(sprintf($url, $session->id()));
       }
       else {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.logout.pl
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ase.cgi.logout.pl
  --- ossp-pkg/ase/ase.cgi.logout.pl	21 Nov 2005 14:13:51 -0000	1.4
  +++ ossp-pkg/ase/ase.cgi.logout.pl	21 Nov 2005 21:29:16 -0000	1.5
  @@ -36,8 +36,8 @@
       my $html    = $self->param(-html);
       my $session = $self->param(-session);
   
  -    #   optionally redirect to external return URL
  -    my $return_url = $session->param("return_url");
  +    #   remember optional external return URL
  +    my $url = $session->param("after_logout");
   
       #   remove the session from the database
       $session->delete();
  @@ -66,8 +66,8 @@
           "</a>\n";
   
       #   optionally redirect to external return URL
  -    if (defined($return_url)) {
  -        return $self->redirect(sprintf($return_url, "none"));
  +    if (defined($url)) {
  +        return $self->redirect(sprintf($url, "none"));
       }
   
       return;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	21 Nov 2005 17:30:15 -0000	1.12
  +++ ossp-pkg/ase/ase.cgi.main.pl	21 Nov 2005 21:29:16 -0000	1.13
  @@ -209,7 +209,7 @@
       #   set a custom HTTP header for identification
       my $cfg = $self->param(-cfg);
       my $id = sprintf("%s %s (%s)", $cfg->{-prog_name}, $cfg->{-prog_vers}, $cfg->{-prog_date});
  -    $self->header_props(-X_User_Agent => $id);
  +    $self->header_add(-X_User_Agent => $id);
   
       #   switch to unbuffered output
       $|++;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.rpc.pl
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ase.cgi.rpc.pl
  --- ossp-pkg/ase/ase.cgi.rpc.pl	21 Nov 2005 14:13:51 -0000	1.5
  +++ ossp-pkg/ase/ase.cgi.rpc.pl	21 Nov 2005 21:29:16 -0000	1.6
  @@ -45,8 +45,8 @@
           my $canvas_mark_body = $cgi->param("canvas_mark_body") || "";
           my $canvas_adjust    = $cgi->param("canvas_adjust")    || "";
           my $canvas_caching   = $cgi->param("canvas_caching")   || "";
  -        my $canvas_url       = $cgi->param("canvas_url")       || "";
  -        my $return_url       = $cgi->param("return_url");
  +        my $canvas_url       = $cgi->param("canvas")           || "";
  +        my $return_url       = $cgi->param("return");
           die "no or invalid return URL given"
               if (not defined($return_url) or $return_url !~ m|https?://.+|);
   
  @@ -56,10 +56,17 @@
           $session->param("canvas_adjust",    $canvas_adjust);
           $session->param("canvas_caching",   $canvas_caching);
           $session->param("canvas_url",       $canvas_url);
  -        $session->param("return_url",       $return_url);
  +        $session->param("after_$method",    $return_url);
   
  -        #   redirect to login/logout screen (to clear URL)
  -        return $self->redirect($self->url(-mode => $method));
  +        if (   ($method eq "login"  and     $session->param("login"))
  +            or ($method eq "logout" and not $session->param("login"))) {
  +            #   already logged or logged out, so redirect back immediately
  +            return $self->redirect(sprintf($return_url, $session->id()));
  +        }
  +        else {
  +            #   else redirect to login/logout screen (to clear URL)
  +            return $self->redirect($self->url(-mode => $method));
  +        }
       }
   
       elsif ($method eq "info") {
  @@ -73,22 +80,25 @@
               { Handle => $dbi, TableName => 'ase_sessions' }
           );
   
  -        #   generate response
  +        #   determine response attributes
           my $response = {
               "Session-Id"          => $sid,
               "Session-Validity"    => "no",
           };
           if (defined($session) and not $session->is_expired()) {
  +            #   session context attributes
               $response->{"Session-Validity"} = "yes";
               $response->{"Session-Created"}  = $session->ctime();
               $response->{"Session-Expires"}  = $session->atime()+$session->expire();
  +
  +            #   session canvas attributes
               $response->{"Canvas-URL"}       = $session->param("canvas_url");
               $response->{"Canvas-Mark-Head"} = $session->param("canvas_mark_head");
               $response->{"Canvas-Mark-Body"} = $session->param("canvas_mark_body");
               $response->{"Canvas-Adjust"}    = $session->param("canvas_adjust");
               $response->{"Canvas-Caching"}   = $session->param("canvas_caching");
  -            $response->{"Return-URL"}       = $session->param("return_url");
  -            $response->{"User-Address"}     = $session->remote_addr() || "0.0.0.0";
  +
  +            #   session client attributes
               my $sth = $dbi->prepare(
                   "SELECT * FROM ase_member WHERE me_uuid = ?;")
                   or die $dbi->errstr();
  @@ -96,9 +106,12 @@
                   or die $dbi->errstr();
               my $rec = $sth->fetchrow_hashref()
                   or die "no member found under UUID";
  -            $response->{"User-UUID"}  = $session->param("login") || "unknown";
  -            $response->{"User-Login"} = $rec->{"me_address"}     || "unknown";
  +            $response->{"Client-Address"}     = $session->remote_addr()  || "0.0.0.0";
  +            $response->{"Client-Login-UUID"}  = $session->param("login") || "unknown";
  +            $response->{"Client-Login-EMail"} = $rec->{"me_address"}     || "unknown";
           }
  +
  +        #   generate response
           my $content = '';
           foreach my $key (sort keys %{$response}) {
               if (defined($response->{$key})) {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.pm
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ase.pm
  --- ossp-pkg/ase/ase.pm	21 Nov 2005 14:13:51 -0000	1.4
  +++ ossp-pkg/ase/ase.pm	21 Nov 2005 21:29:16 -0000	1.5
  @@ -33,7 +33,6 @@
   use Exporter;
   use IO::Socket::INET;
   use URI::Escape;
  -use lib ".";
   
   our $VERSION = do { my @v = ('0.0.1' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
   
  @@ -83,8 +82,8 @@
   
           #   determine server request URL
           my $url = sprintf("%s?mode=rpc;method=%s;" .
  -            "canvas_url=%s;canvas_mark=%s;canvas_adjust=%s;canvas_caching=%s;" .
  -            "return_url=%s",
  +            "canvas=%s;canvas_mark=%s;canvas_adjust=%s;canvas_caching=%s;" .
  +            "return=%s",
               $self->{-server},
               $action,
               URI::Escape::uri_escape($canvas),
  @@ -125,41 +124,45 @@
           $response .= $_ while (<$sock>);
           $sock->close();
   
  -        #   prepare
  +        #   prepare for verification
  +        $self->{-session}->clear([$self->{-login}]);
           $self->{-session}->clear(["ase-session-validity"]);
   
           #   parse response
  -        $response =~ s|^HTTP/1.[01x]\s+200\s+.+?\n\n||s;
  +        $response =~ s|^HTTP/1.[01x]\s+200\s+.+?\r?\n\r?\n||s;
           foreach my $key (qw(
  +            Session-Id
               Session-Validity
               Session-Created
               Session-Expires
  -            Site-Canvas-URL
  -            Site-Canvas-Mark
  -            Site-Canvas-Adjust
  -            Site-Canvas-Caching
  -            Site-Return-URL
  -            User-Login
  -            User-UUID
  +            Canvas-URL
  +            Canvas-Mark-Head
  +            Canvas-Mark-Body
  +            Canvas-Adjust
  +            Canvas-Caching
  +            Client-Address
  +            Client-Login-UUID
  +            Client-Login-EMail
           )) {
  -            $response =~ s|${key}:\s+([^\n]+)\n|$self->{-session}->param(lc("ase-$key"), $1), ''|sei;
  +            $response =~ s|${key}:[ \t]+([^\r\n]+)\r?\n|$self->{-session}->param(lc("ase-$key"), $1), ''|sei;
           }
   
           #   verify login
  +        my $login_valid   = $self->{-session}->param("ase-session-validity")   || 0;
  +        my $login_name    = $self->{-session}->param("ase-client-login-email") || "";
  +        my $login_expires = $self->{-session}->param("ase-session-expires")    || 0;
  +        $login_expires -= time();
           if (    ($client_sid eq $self->{-session}->id())
  -            and ($self->{-session}->param("ase-session-validity") eq 'yes')) {
  -            #   success
  -            $self->{-session}->param($self->{-login}, $self->{-session}->param("ase-user-login"));
  -        }
  -        else {
  -            #   failure
  -            $self->{-session}->clear([$self->{-login}]);
  +            and ($login_valid eq "yes")
  +            and ($login_name ne "")
  +            and ($login_expires > 0)    ) {
  +            $self->{-session}->param($self->{-login},  $login_name);
  +            $self->{-session}->expire($self->{-login}, $login_expires);
           }
   
  +        #   redirect to own following URL
           my $mode_after = $self->{-session}->param("ase-mode-after");
           my $url = sprintf("%s?%s=%s", $self->{-cgi}->url(-relative => 1), $self->{-mode}, $mode_after);
  -
  -        #   redirect to own following URL
           print $self->{-cgi}->redirect(-url => $url, -status => 302);
           exit(0);
       }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/sample.cgi
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 sample.cgi
  --- ossp-pkg/ase/sample.cgi	21 Nov 2005 14:13:51 -0000	1.4
  +++ ossp-pkg/ase/sample.cgi	21 Nov 2005 21:29:16 -0000	1.5
  @@ -110,7 +110,7 @@
   }
   
   $html .= "<h1>Sample Application</h1>\n";
  -$html .= sprintf("SID:%s<br>\n", $session->id());
  +$html .= sprintf("Session: SID %s<br>\n", $session->id());
   
   $html .= "Navigation:\n";
   $html .= sprintf("<a href=\"%s\">Page 1</a>", $cgi->url(-relative => 1)."?mode=page1") . " | ";
  @@ -146,15 +146,15 @@
   ##  EPILOG
   ##
   
  +#   determine HTTP response cookies
  +my $cookie = [];
  +push(@{$cookie}, $session->cookie(
  +    -path => $cgi->url(-absolute => 1)
  +)) if ($session->is_new());
  +
   #   determine HTTP response header
  -my $cookie = new CGI::Cookie(
  -    -name    => $session->name(),
  -    -value   => $session->id(),
  -    -expires => $session->atime()+$session->expire(),
  -    -path    => $cgi->url(-absolute => 1),
  -);
   my $header = $cgi->header(
  -    -cookie => [$cookie]
  +    -cookie => $cookie,
   );
   
   #   determine HTTP response body
  @@ .

From ossp-cvs-owner@ossp.org  Tue Nov 22 08:26:44 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 1A86175291D; Tue, 22 Nov 2005 08:26:44 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog THANKS pth_attr.c
Message-Id: <20051122072644.1A86175291D@mail.ossp.org>
Date: Tue, 22 Nov 2005 08:26:44 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Nov-2005 08:26:43
  Branch: HEAD                             Handle: 2005112207264300

  Modified files:
    ossp-pkg/pth            ChangeLog THANKS pth_attr.c

  Log:
    Add a missing "break" in pth_attr.c:pth_attr_ctrl().
    
    Submitted by: Stefan Schippers <stefan@schippers.it>

  Summary:
    Revision    Changes     Path
    1.641       +3  -0      ossp-pkg/pth/ChangeLog
    1.101       +1  -0      ossp-pkg/pth/THANKS
    1.22        +1  -0      ossp-pkg/pth/pth_attr.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.640 -r1.641 ChangeLog
  --- ossp-pkg/pth/ChangeLog	12 Oct 2005 08:14:21 -0000	1.640
  +++ ossp-pkg/pth/ChangeLog	22 Nov 2005 07:26:43 -0000	1.641
  @@ -21,6 +21,9 @@
                     
     Changes between 2.0.5 and 2.0.6 (05-Oct-2005 to xx-xxx-2005)
   
  +   *) Add a missing "break" in pth_attr.c:pth_attr_ctrl().
  +      [Stefan Schippers <stefan@schippers.it>]
  +
      *) Return an error if pth_kill() is called before pth_init().
         [Martin Kraemer <Martin.Kraemer@Fujitsu-Siemens.com>]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/THANKS
  ============================================================================
  $ cvs diff -u -r1.100 -r1.101 THANKS
  --- ossp-pkg/pth/THANKS	18 Feb 2005 20:36:48 -0000	1.100
  +++ ossp-pkg/pth/THANKS	22 Nov 2005 07:26:43 -0000	1.101
  @@ -101,6 +101,7 @@
       o  Keith Rose                  <keith@avocetsys.com>
       o  Michele Satriani            <satriani@info.uniroma2.it>
       o  Jonathan Schilling          <jls@sco.com>
  +    o  Stefan Schippers            <stefan@schippers.it>
       o  David W. Schuler            <schuld@btv.ibm.com>
       o  Peter Simons                <simons@cys.de>
       o  Robert S. Tau               <rst@mit.edu>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_attr.c
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 pth_attr.c
  --- ossp-pkg/pth/pth_attr.c	31 Dec 2004 19:34:45 -0000	1.21
  +++ ossp-pkg/pth/pth_attr.c	22 Nov 2005 07:26:43 -0000	1.22
  @@ -163,6 +163,7 @@
                   dst = va_arg(ap, int *);
               }
               *dst = *src;
  +            break;
           }
           case PTH_ATTR_JOINABLE: {
               /* detachment type */
  @@ .

From ossp-cvs-owner@ossp.org  Tue Nov 22 08:33:46 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 3198A75292A; Tue, 22 Nov 2005 08:33:46 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog README pth_vers.c
Message-Id: <20051122073346.3198A75292A@mail.ossp.org>
Date: Tue, 22 Nov 2005 08:33:46 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Nov-2005 08:33:46
  Branch: HEAD                             Handle: 2005112207334500

  Modified files:
    ossp-pkg/pth            ChangeLog README pth_vers.c

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.642       +1  -1      ossp-pkg/pth/ChangeLog
    1.210       +1  -1      ossp-pkg/pth/README
    1.153       +9  -9      ossp-pkg/pth/pth_vers.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.641 -r1.642 ChangeLog
  --- ossp-pkg/pth/ChangeLog	22 Nov 2005 07:26:43 -0000	1.641
  +++ ossp-pkg/pth/ChangeLog	22 Nov 2005 07:33:45 -0000	1.642
  @@ -19,7 +19,7 @@
        / __/ | |_| |
     __|_____(_)___/_________________________________________________________
                     
  -  Changes between 2.0.5 and 2.0.6 (05-Oct-2005 to xx-xxx-2005)
  +  Changes between 2.0.5 and 2.0.6 (05-Oct-2005 to 22-Nov-2005)
   
      *) Add a missing "break" in pth_attr.c:pth_attr_ctrl().
         [Stefan Schippers <stefan@schippers.it>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/README
  ============================================================================
  $ cvs diff -u -r1.209 -r1.210 README
  --- ossp-pkg/pth/README	5 Oct 2005 08:54:31 -0000	1.209
  +++ ossp-pkg/pth/README	22 Nov 2005 07:33:45 -0000	1.210
  @@ -5,7 +5,7 @@
     |_|    \__|_| |_|                     the impossible.''
   
     GNU Pth - The GNU Portable Threads
  -  Version 2.0.5 (05-Oct-2005)
  +  Version 2.0.6 (22-Nov-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_vers.c
  ============================================================================
  $ cvs diff -u -r1.152 -r1.153 pth_vers.c
  --- ossp-pkg/pth/pth_vers.c	5 Oct 2005 08:54:31 -0000	1.152
  +++ ossp-pkg/pth/pth_vers.c	22 Nov 2005 07:33:45 -0000	1.153
  @@ -8,7 +8,7 @@
   #ifndef _PTH_VERS_C_
   #define _PTH_VERS_C_
   
  -#define PTH_INTERNAL_VERSION 0x200205
  +#define PTH_INTERNAL_VERSION 0x200206
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _PTH_VERS_C_AS_HEADER_
   
   pth_internal_version_t pth_internal_version = {
  -    0x200205,
  -    "2.0.5",
  -    "2.0.5 (05-Oct-2005)",
  -    "This is GNU Pth, Version 2.0.5 (05-Oct-2005)",
  -    "GNU Pth 2.0.5 (05-Oct-2005)",
  -    "GNU Pth/2.0.5",
  -    "@(#)GNU Pth 2.0.5 (05-Oct-2005)",
  -    "$Id: GNU Pth 2.0.5 (05-Oct-2005) $"
  +    0x200206,
  +    "2.0.6",
  +    "2.0.6 (22-Nov-2005)",
  +    "This is GNU Pth, Version 2.0.6 (22-Nov-2005)",
  +    "GNU Pth 2.0.6 (22-Nov-2005)",
  +    "GNU Pth/2.0.6",
  +    "@(#)GNU Pth 2.0.6 (22-Nov-2005)",
  +    "$Id: GNU Pth 2.0.6 (22-Nov-2005) $"
   };
   
   #endif /* _PTH_VERS_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Tue Nov 22 08:56:49 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id DD9F675292A; Tue, 22 Nov 2005 08:56:48 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20051122075648.DD9F675292A@mail.ossp.org>
Date: Tue, 22 Nov 2005 08:56:48 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   22-Nov-2005 08:56:48
  Branch: HEAD                             Handle: 2005112207564800

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/pth    index.wml

  Log:
    release GNU Pth 2.0.6

  Summary:
    Revision    Changes     Path
    1.142       +1  -0      ossp-web/new/news.txt
    1.117       +1  -1      ossp-web/pkg/lib/index.wml
    1.16        +2  -2      ossp-web/pkg/lib/pth/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.141 -r1.142 news.txt
  --- ossp-web/new/news.txt	12 Oct 2005 12:42:04 -0000	1.141
  +++ ossp-web/new/news.txt	22 Nov 2005 07:56:48 -0000	1.142
  @@ -1,3 +1,4 @@
  +22-Nov-2005: Released L<GNU pth> 2.0.6
   12-Oct-2005: Released L<OSSP str> 0.9.12
   09-Oct-2005: Released T<OSSP lmtp2nntp> 1.4.1
   07-Oct-2005: Released T<OSSP svs> 1.0.5
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.116 -r1.117 index.wml
  --- ossp-web/pkg/lib/index.wml	12 Oct 2005 12:42:04 -0000	1.116
  +++ ossp-web/pkg/lib/index.wml	22 Nov 2005 07:56:48 -0000	1.117
  @@ -15,7 +15,7 @@
   <pkg_list>
     <pkg_item name="pth" longname="GNU pth" type="lib"
               desc="Portable Threads"
  -			done=100 stable=2.0.5 unstable=none>
  +			done=100 stable=2.0.6 unstable=none>
     <pkg_item name="mm" longname="OSSP mm" type="lib"
               desc="Shared Memory Allocation"
   			done=100 stable=1.4.0 unstable=none>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/pth/index.wml
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 index.wml
  --- ossp-web/pkg/lib/pth/index.wml	12 Oct 2005 12:42:04 -0000	1.15
  +++ ossp-web/pkg/lib/pth/index.wml	22 Nov 2005 07:56:48 -0000	1.16
  @@ -61,7 +61,7 @@
   
   <pkg_status
       name="pth" assign="rse"
  -    stable="2.0.5" stable_date="05-Oct-2005"
  +    stable="2.0.6" stable_date="22-Nov-2005"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -72,7 +72,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/pth/
       directory=$(FTP_ROOT_DIR)/pkg/lib/pth/
       files="pth-*.tar.gz" 
  -	stable="pth-2\\\\\\\.0\\\\\\\.5\\\\\\\.tar\.gz" unstable="none">
  +	stable="pth-2\\\\\\\.0\\\\\\\.6\\\\\\\.tar\.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Nov 22 10:54:39 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 6F24475291D; Tue, 22 Nov 2005 10:54:39 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.pm
Message-Id: <20051122095439.6F24475291D@mail.ossp.org>
Date: Tue, 22 Nov 2005 10:54:39 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Nov-2005 10:54:39
  Branch: HEAD                             Handle: 2005112209543900

  Modified files:
    ossp-pkg/ase            ase.pm

  Log:
    cleanup client API

  Summary:
    Revision    Changes     Path
    1.6         +27 -46     ossp-pkg/ase/ase.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.pm
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ase.pm
  --- ossp-pkg/ase/ase.pm	21 Nov 2005 21:29:16 -0000	1.5
  +++ ossp-pkg/ase/ase.pm	22 Nov 2005 09:54:39 -0000	1.6
  @@ -40,12 +40,17 @@
   our @EXPORT_OK = ();
   our @EXPORT    = ();
   
  +#   object constructor
   sub new {
       my $proto = shift;
  -    my $class = ref($proto) || $proto;
       my %args = @_;
  +
  +    #   create new object
  +    my $class = ref($proto) || $proto;
       my $self = {};
       bless ($self, $class);
  +
  +    #   fill object with attributes
       $self->{-server}           = ($args{-server}        || die "no OSSP ase server URL specified with \"-server\"");
       $self->{-cgi}              = ($args{-cgi}           || new CGI),;
       $self->{-mode}             = ($args{-mode}          || "mode"),;
  @@ -56,19 +61,28 @@
       $self->{-canvas_mark_body} = ($args{-canvas_mark}   || "<!-- ASE: BODY -->");
       $self->{-canvas_adjust}    = ($args{-canvas_adjust} || 1);
       $self->{-canvas_caching}   = ($args{-canvas_adjust} || 0);
  +
  +    #   return object
       return $self;
   }
   
  +#   object destructor
   sub DESTROY ($) {
       my ($self) = @_;
  -    $self->{-cgi} = undef;
  +
  +    #   destroy object attributes
  +    $self->{-cgi}    = undef;
  +    $self->{-session} = undef;
  +
       return;
   }
   
  +#   run-time engine
   sub run ($;%) {
       my ($self, %args) = @_;
       my $action = $self->{-cgi}->param("ase-action") || "";
   
  +    #   request ASE actions
       if ($action =~ m/^(login|logout|info)$/) {
           #   remember mode during and after action
           my $mode_during = $self->{-cgi}->param("ase-mode-during") || "";
  @@ -98,6 +112,7 @@
           exit(0);
       }
   
  +    #   respond to ASE actions
       elsif ($action eq 'comeback') {
           my $client_sid = $self->{-cgi}->param("ase-client-sid");
           my $server_sid = $self->{-cgi}->param("ase-server-sid");
  @@ -170,8 +185,11 @@
       return;
   }
   
  +#   self-referencing URL generator
   sub url ($%) {
       my ($self, %args) = @_;
  +
  +    #   create self-referencing URL
       my $base = $self->{-cgi}->url(-relative => 1);
       my $mode = $self->{-cgi}->param($self->{-mode}) || "";
       my $url = sprintf(
  @@ -180,21 +198,25 @@
           $args{-mode_during} || $mode,
           $args{-mode_after}  || $mode
       );
  +
       return $url;
   }
   
  +#   return current login
   sub login ($) {
       my ($self) = @_;
   
       return $self->{-session}->param($self->{-login});
   }
   
  +#   return arbitrary ASE session attributes
   sub attr ($$) {
       my ($self, $name) = @_;
   
       return $self->{-session}->param("ase-$name");
   }
   
  +#   return ASE canvas marker for head and body
   sub canvas ($%) {
       my ($self, %args) = @_;
   
  @@ -211,52 +233,11 @@
   
   OSSP::ase::client -- OSSP ase Client API
   
  -=head1 SYNOPSIS
  -
  -=over 0
  -
  - use CGI;
  - use CGI::Session;
  - use OSSP::ase::client;
  -
  - my $cgi = new CGI;
  -
  -
  -
  - my $myurl = $cgi->url(-full => 1);
  -
  - my $ase = new OSSP::ase::client;
  - $ase->remote_url("http://registry.openpkg.org/ase");
  - $ase->canvas("$myurl?mode=ase-canvas");
  - $ase->rpc("$myurl?mode=ase-rpc;args=%s");
  - $ase->return($myurl);
  -
  - my $cookie = $cgi->param("cookie");
  - 
  - if ($cgi->param("mode") eq '') {
  -     if (   (not own cookie set)
  -         or (not own cookie in own database)
  -         or (own cookie is expired)         )
  -         print $ase->login();
  -     else
  -         my $sid = $ase->session(-sid);
  - }
  - elsif ($cgi->param("mode") eq 'ase-canvas') {
  -     print "<html>....<!-- OSSP ase -->...</html>\n";
  - }
  - elsif ($cgi->param("mode") eq 'ase-rpc') {
  -     print $ase->rpc($cgi->param("args"))
  -         or die "OSSP ase client RPC: ". $ase->error();
  - }
  - else {
  -
  - }
  -
  - print $cgi->header(-cookie => 
  -
   =head1 DESCRIPTION
   
  -B<OSSP::ase::client> is the client API of B<OSSP ase>.
  +B<OSSP::ase::client> is the client Perl API of B<OSSP ase>.
  +It allows an arbitrary CGI written in Perl to leverage from
  +B<OSSP ase> authentication.
   
   =cut
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Nov 22 10:55:41 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 0E43B7529C4; Tue, 22 Nov 2005 10:55:41 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.pm
Message-Id: <20051122095541.0E43B7529C4@mail.ossp.org>
Date: Tue, 22 Nov 2005 10:55:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Nov-2005 10:55:41
  Branch: HEAD                             Handle: 2005112209554000

  Modified files:
    ossp-pkg/ase            ase.pm

  Log:
    style cleanup

  Summary:
    Revision    Changes     Path
    1.7         +3  -1      ossp-pkg/ase/ase.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.pm
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ase.pm
  --- ossp-pkg/ase/ase.pm	22 Nov 2005 09:54:39 -0000	1.6
  +++ ossp-pkg/ase/ase.pm	22 Nov 2005 09:55:40 -0000	1.7
  @@ -220,7 +220,9 @@
   sub canvas ($%) {
       my ($self, %args) = @_;
   
  -    return ($args{-part} eq 'head' ? $self->{-canvas_mark_head} : $self->{-canvas_mark_body});
  +    return ( $args{-part} eq 'head'
  +            ? $self->{-canvas_mark_head}
  +            : $self->{-canvas_mark_body});
   }
   
   1;
  @@ .

From ossp-cvs-owner@ossp.org  Tue Nov 22 10:58:03 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id E838975291D; Tue, 22 Nov 2005 10:58:02 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ sample.cgi
Message-Id: <20051122095802.E838975291D@mail.ossp.org>
Date: Tue, 22 Nov 2005 10:58:02 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Nov-2005 10:58:02
  Branch: HEAD                             Handle: 2005112209580200

  Modified files:
    ossp-pkg/ase            sample.cgi

  Log:
    print problem information

  Summary:
    Revision    Changes     Path
    1.6         +4  -4      ossp-pkg/ase/sample.cgi
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/sample.cgi
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 sample.cgi
  --- ossp-pkg/ase/sample.cgi	21 Nov 2005 21:29:16 -0000	1.5
  +++ ossp-pkg/ase/sample.cgi	22 Nov 2005 09:58:02 -0000	1.6
  @@ -49,7 +49,7 @@
   my $dbi = DBI->connect(
       "dbi:SQLite:dbname=sample.db", "", "",
       { RaiseError => 1, AutoCommit => 1 }
  -) or die;
  +) or die "$!";
   
   #   establish CGI Query object
   my $cgi = new CGI;
  @@ -59,7 +59,7 @@
   my $session = new CGI::Session(
       "driver:sqlite;serializer:Storable;id:uuid", $cgi,
       { Handle => $dbi, TableName => 'session' }
  -) or die;
  +) or die "$!";
   $session->expires("+5m");
   
   #   establish ASE object
  @@ -70,11 +70,11 @@
       -session => $session,
       -login   => "login",
       -valid   => "+1m",
  -) or die;
  +) or die "$!";
   $ase->run();
   
   #   establish HTML output object
  -my $html = new String::Divert;
  +my $html = new String::Divert or die "$!";
   $html->folder('{#%s#}', '\{#([a-zA-Z_][a-zA-Z0-9_-]*)#\}');
   my $txt < IO::All::io("sample.html")
       or die "unable to read HTML skeleton file \"sample.html"."\"";
  @@ .

From ossp-cvs-owner@ossp.org  Tue Nov 22 11:15:39 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id C2D607529C4; Tue, 22 Nov 2005 11:15:38 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.sql sample.db.sql
Message-Id: <20051122101538.C2D607529C4@mail.ossp.org>
Date: Tue, 22 Nov 2005 11:15:38 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Nov-2005 11:15:38
  Branch: HEAD                             Handle: 2005112210153700

  Modified files:
    ossp-pkg/ase            ase.sql sample.db.sql

  Log:
    a UUID is 36-chars long in text representation and the session is a
    BLOB and not TEXT

  Summary:
    Revision    Changes     Path
    1.3         +2  -2      ossp-pkg/ase/ase.sql
    1.2         +2  -2      ossp-pkg/ase/sample.db.sql
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.sql
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ase.sql
  --- ossp-pkg/ase/ase.sql	9 Nov 2005 16:20:30 -0000	1.2
  +++ ossp-pkg/ase/ase.sql	22 Nov 2005 10:15:37 -0000	1.3
  @@ -269,10 +269,10 @@
   
   -- Temporary User Interface Sessions
   CREATE TABLE ase_sessions (
  -    id                         CHAR(32) NOT NULL PRIMARY KEY,
  +    id                         CHAR(36) NOT NULL PRIMARY KEY,
                                  -- Session Identifier (OSSP::uuid based)
                                  -- [75468374-8721-11d9-bee4-0002a5489f14]
  -    a_session                  TEXT NOT NULL
  +    a_session                  BLOB NOT NULL
                                  -- Session Data (Storage based)
                                  -- [XXXXXXX...]
   );
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/sample.db.sql
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 sample.db.sql
  --- ossp-pkg/ase/sample.db.sql	16 Nov 2005 13:13:24 -0000	1.1
  +++ ossp-pkg/ase/sample.db.sql	22 Nov 2005 10:15:37 -0000	1.2
  @@ -9,10 +9,10 @@
   );
   
   CREATE TABLE session (
  -    id             CHAR(32) NOT NULL PRIMARY KEY,
  +    id             CHAR(36) NOT NULL PRIMARY KEY,
                      -- Session Identifier (OSSP::uuid based)
                      -- [75468374-8721-11d9-bee4-0002a5489f14]
  -    a_session      TEXT NOT NULL
  +    a_session      BLOB NOT NULL
                      -- Session Data (Storage based)
                      -- [XXXXXXX...]
   );
  @@ .

From ossp-cvs-owner@ossp.org  Tue Nov 22 11:17:14 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 90E5E75291D; Tue, 22 Nov 2005 11:17:14 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ sample.cgi
Message-Id: <20051122101714.90E5E75291D@mail.ossp.org>
Date: Tue, 22 Nov 2005 11:17:14 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Nov-2005 11:17:14
  Branch: HEAD                             Handle: 2005112210171300

  Modified files:
    ossp-pkg/ase            sample.cgi

  Log:
    interesting, the objects have to be explicitly destroyed or else at
    least CGI::Session dumps core

  Summary:
    Revision    Changes     Path
    1.7         +9  -1      ossp-pkg/ase/sample.cgi
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/sample.cgi
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 sample.cgi
  --- ossp-pkg/ase/sample.cgi	22 Nov 2005 09:58:02 -0000	1.6
  +++ ossp-pkg/ase/sample.cgi	22 Nov 2005 10:17:13 -0000	1.7
  @@ -154,7 +154,7 @@
   
   #   determine HTTP response header
   my $header = $cgi->header(
  -    -cookie => $cookie,
  +    -cookie => $cookie
   );
   
   #   determine HTTP response body
  @@ -164,5 +164,13 @@
   #   send response
   $|++;
   print $header . $body;
  +
  +#   destroy objects
  +undef $ase;
  +undef $session;
  +undef $cgi;
  +undef $dbi;
  +
  +#   die gracefully
   exit(0);
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Nov 22 11:29:13 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id CC18875292A; Tue, 22 Nov 2005 11:29:13 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.main.pl
Message-Id: <20051122102913.CC18875292A@mail.ossp.org>
Date: Tue, 22 Nov 2005 11:29:13 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Nov-2005 11:29:13
  Branch: HEAD                             Handle: 2005112210291300

  Modified files:
    ossp-pkg/ase            ase.cgi.main.pl

  Log:
    correctly shutdown objects, else at least CGI::Session dumps core when
    writing the session to disk

  Summary:
    Revision    Changes     Path
    1.14        +14 -2      ossp-pkg/ase/ase.cgi.main.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	21 Nov 2005 21:29:16 -0000	1.13
  +++ ossp-pkg/ase/ase.cgi.main.pl	22 Nov 2005 10:29:13 -0000	1.14
  @@ -220,14 +220,26 @@
   #   application shutdown hook
   sub teardown {
       my ($self) = @_;
  +    
  +    #   gracefully shutdown HTML output object
  +    my $html = $self->param(-html);
  +    $html->destroy();
  +    $self->delete(-html);
   
  -    #   close session
  +    #   gracefully shutdown CGI session object
       my $session = $self->param(-session);
       $session->close();
  +    $self->delete(-session);
   
  -    #   disconnect from database
  +    #   gracefully shutdown DBI database object
       my $dbi = $self->param(-dbi);
       $dbi->disconnect();
  +    $self->delete(-dbi);
  +
  +    #   gracefully shutdown CGI query object
  +    #   (not really possible to effectively destroy object here as
  +    #   CGI::Application doesn't allow to use $self->query() a second time)
  +    $self->delete(-cgi);
   
       return;
   }
  @@ .

From ossp-cvs-owner@ossp.org  Tue Nov 22 14:38:27 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 681D27531A0; Tue, 22 Nov 2005 14:38:27 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.main.pl sample.cgi
Message-Id: <20051122133827.681D27531A0@mail.ossp.org>
Date: Tue, 22 Nov 2005 14:38:27 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Nov-2005 14:38:27
  Branch: HEAD                             Handle: 2005112213382700

  Modified files:
    ossp-pkg/ase            ase.cgi.main.pl sample.cgi

  Log:
    fix cookie handling, output content-length headers, etc

  Summary:
    Revision    Changes     Path
    1.15        +10 -5      ossp-pkg/ase/ase.cgi.main.pl
    1.8         +17 -8      ossp-pkg/ase/sample.cgi
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	22 Nov 2005 10:29:13 -0000	1.14
  +++ ossp-pkg/ase/ase.cgi.main.pl	22 Nov 2005 13:38:27 -0000	1.15
  @@ -60,12 +60,13 @@
       $self->param(-dbi => $dbi);
   
       #   establish session object
  +    CGI::Session->name("sid");
       my $sid = ($cgi->cookie("sid") || undef);
       my $session = new CGI::Session(
           "driver:sqlite;serializer:Storable;id:uuid", $sid,
           { Handle => $dbi, TableName => 'ase_sessions' }
       );
  -    $session->expires("+1h");
  +    $session->expire("+1h");
       $self->param(-session => $session);
   
       #   establish HTML output object
  @@ -195,20 +196,24 @@
           $html->overload(0);
           $html->undivert(0);
           ${$htmlref} = $html->string();
  +        $self->header_add(-Content_length => length(${$htmlref}));
       }
  -
  + 
       #   set the session cookie
  +    my $cgi     = $self->param(-cgi);
       my $session = $self->param(-session);
       my $cookie = new CGI::Cookie(
  -        -name    => 'sid',
  +        -name    => $session->name(),
           -value   => $session->id,
  -        -expires => '+1h'
  +        -expires => sprintf("+%ds", $session->expires()),
  +        -path    => $cgi->url(-absolute => 1),
       );
       $self->header_add(-cookie => [$cookie]);
   
       #   set a custom HTTP header for identification
       my $cfg = $self->param(-cfg);
  -    my $id = sprintf("%s %s (%s)", $cfg->{-prog_name}, $cfg->{-prog_vers}, $cfg->{-prog_date});
  +    my $id = sprintf("%s %s (%s)",
  +        $cfg->{-prog_name}, $cfg->{-prog_vers}, $cfg->{-prog_date});
       $self->header_add(-X_User_Agent => $id);
   
       #   switch to unbuffered output
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/sample.cgi
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 sample.cgi
  --- ossp-pkg/ase/sample.cgi	22 Nov 2005 10:17:13 -0000	1.7
  +++ ossp-pkg/ase/sample.cgi	22 Nov 2005 13:38:27 -0000	1.8
  @@ -60,7 +60,11 @@
       "driver:sqlite;serializer:Storable;id:uuid", $cgi,
       { Handle => $dbi, TableName => 'session' }
   ) or die "$!";
  -$session->expires("+5m");
  +$session->expire("+5m");
  +#if (not defined($session->param("housekeeping"))) {
  +#    $session->param("housekeeping", 1);
  +#    CGI::Session->find(sub {});
  +#}
   
   #   establish ASE object
   my $ase = new OSSP::ase::client(
  @@ -146,21 +150,26 @@
   ##  EPILOG
   ##
   
  +#   determine HTTP response body
  +$html->undivert(0);
  +my $body = $html->string();
  +
   #   determine HTTP response cookies
   my $cookie = [];
  -push(@{$cookie}, $session->cookie(
  -    -path => $cgi->url(-absolute => 1)
  +push(@{$cookie}, $cgi->cookie(
  +    -name    => $session->name(),
  +    -value   => $session->id(),
  +    -expires => sprintf("+%ds", $session->expires()),
  +    -path    => $cgi->url(-absolute => 1)
   )) if ($session->is_new());
   
   #   determine HTTP response header
   my $header = $cgi->header(
  -    -cookie => $cookie
  +    -type           => 'text/html',
  +    -Content_length => length($body),
  +    -cookie         => $cookie
   );
   
  -#   determine HTTP response body
  -$html->undivert(0);
  -my $body = $html->string();
  -
   #   send response
   $|++;
   print $header . $body;
  @@ .

From ossp-cvs-owner@ossp.org  Tue Nov 22 16:40:09 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B33C375292A; Tue, 22 Nov 2005 16:40:08 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ sample.cgi
Message-Id: <20051122154008.B33C375292A@mail.ossp.org>
Date: Tue, 22 Nov 2005 16:40:08 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Nov-2005 16:40:08
  Branch: HEAD                             Handle: 2005112215400800

  Modified files:
    ossp-pkg/ase            sample.cgi

  Log:
    always do housekeeping

  Summary:
    Revision    Changes     Path
    1.9         +4  -4      ossp-pkg/ase/sample.cgi
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/sample.cgi
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 sample.cgi
  --- ossp-pkg/ase/sample.cgi	22 Nov 2005 13:38:27 -0000	1.8
  +++ ossp-pkg/ase/sample.cgi	22 Nov 2005 15:40:08 -0000	1.9
  @@ -61,10 +61,10 @@
       { Handle => $dbi, TableName => 'session' }
   ) or die "$!";
   $session->expire("+5m");
  -#if (not defined($session->param("housekeeping"))) {
  -#    $session->param("housekeeping", 1);
  -#    CGI::Session->find(sub {});
  -#}
  +if (not defined($session->param("housekeeping"))) {
  +    $session->param("housekeeping", 1);
  +    CGI::Session->find(sub {});
  +}
   
   #   establish ASE object
   my $ase = new OSSP::ase::client(
  @@ .

From ossp-cvs-owner@ossp.org  Tue Nov 22 17:12:38 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 7DBA67529C4; Tue, 22 Nov 2005 17:12:38 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO ase.cgi.main.pl ase.cgi.rpc.pl ase.pm
Message-Id: <20051122161238.7DBA67529C4@mail.ossp.org>
Date: Tue, 22 Nov 2005 17:12:38 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Nov-2005 17:12:38
  Branch: HEAD                             Handle: 2005112216123701

  Modified files:
    ossp-pkg/ase            TODO ase.cgi.main.pl ase.cgi.rpc.pl ase.pm

  Log:
    major overhaul of server canvas processing and major cleanups of
    client side

  Summary:
    Revision    Changes     Path
    1.8         +4  -0      ossp-pkg/ase/TODO
    1.16        +67 -63     ossp-pkg/ase/ase.cgi.main.pl
    1.7         +6  -6      ossp-pkg/ase/ase.cgi.rpc.pl
    1.8         +167 -82    ossp-pkg/ase/ase.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 TODO
  --- ossp-pkg/ase/TODO	21 Nov 2005 17:07:52 -0000	1.7
  +++ ossp-pkg/ase/TODO	22 Nov 2005 16:12:37 -0000	1.8
  @@ -27,3 +27,7 @@
   - number of servers
   - number of instances
   
  +
  +- mode=rpc no canvas loading!
  +- ase client error page if canvas= in run(), etc.
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	22 Nov 2005 13:38:27 -0000	1.15
  +++ ossp-pkg/ase/ase.cgi.main.pl	22 Nov 2005 16:12:37 -0000	1.16
  @@ -69,74 +69,31 @@
       $session->expire("+1h");
       $self->param(-session => $session);
   
  -    #   establish HTML output object
  -    my $html = new String::Divert;
  -    $html->folder('{#%s#}', '\{#([a-zA-Z_][a-zA-Z0-9_-]*)#\}');
  -
  -    #   provide outer HTML canvas
  -    my $canvas_url       = $session->param("canvas_url")       || $cgi->param("canvas_url")       || "ase.html";
  -    my $canvas_mark_head = $session->param("canvas_mark_head") || $cgi->param("canvas_mark_head") || "<!-- ASE: HEAD -->";
  -    my $canvas_mark_body = $session->param("canvas_mark_head") || $cgi->param("canvas_mark_head") || "<!-- ASE: BODY -->";
  -    my $canvas_adjust    = $session->param("canvas_adjust")    || $cgi->param("canvas_adjust")    || "yes";
  -    my $canvas_caching   = $session->param("canvas_caching")   || $cgi->param("canvas_caching")   || "no";
  -    #   FIXME: caching
  -    my ($canvas_type, undef, $canvas) = $self->fetch($canvas_url);
  -    die "invalid content type" if ($canvas_type ne 'text/html');
  -    $canvas = $self->adjust_url($canvas_url, $canvas_type, $canvas) if ($canvas_adjust);
  -    if ($canvas =~ m/${canvas_mark_head}/si) {
  -        $canvas =~ s/${canvas_mark_head}([ \t]*\n)?/$html->folder("head")/sie;
  -    }
  -    else {
  -        $canvas =~ s/(<head>)/$1.$html->folder("head")/sie;
  -    }
  -    if ($canvas =~ m/${canvas_mark_body}/si) {
  -        $canvas =~ s/${canvas_mark_body}([ \t]*\n)?/$html->folder("body")/sie;
  -    }
  -    else {
  -        $canvas =~ s/(<body>)/$1.$html->folder("body")/sie;
  -    }
  -    $html->append($canvas);
  -    $html->overload(1);
  -
  -    #   provide inner HTML canvas
  -    $html->divert("head");
  -    $html .= "<link rel=\"stylesheet\" type=\"text/css\"" .
  -             " href=\"".$self->url(-mode => "loader", -name => "ase.css")."\"/>\n";
  -    $html->undivert();
  -    $html->divert("body");
  -    $html .= "<div class=\"ase\">\n";
  -    $html .= "  "; $html->fold();
  -    $html .= "<\/div>\n";
  -    $html->divert();
  -
  -    #   post-prepare HTML output object
  -    $self->param(-html => $html);
  -
       #   configure run-time modes
       my $modes = {
           #   global modes
  -        'error'              => { -login => 0, -method => \&error                     },
  -        'scode'              => { -login => 0, -method => \&mode_scode_render         },
  -        'loader'             => { -login => 0, -method => \&mode_loader               },
  -        'rpc'                => { -login => 0, -method => \&mode_rpc                  },
  +        'error'              => { -login => 0, -canvas => 0, -method => \&error                     },
  +        'scode'              => { -login => 0, -canvas => 0, -method => \&mode_scode_render         },
  +        'loader'             => { -login => 0, -canvas => 0, -method => \&mode_loader               },
  +        'rpc'                => { -login => 0, -canvas => 0, -method => \&mode_rpc                  },
   
           #   login modes
  -        'login'              => { -login => 0, -method => \&mode_login_screen         },
  -        'login-action'       => { -login => 0, -method => \&mode_login_action         },
  -        'logout'             => { -login => 1, -method => \&mode_logout_screen        },
  -        'enrollment'         => { -login => 0, -method => \&mode_enrollment_screen    },
  -        'enrollment-action'  => { -login => 0, -method => \&mode_enrollment_action    },
  -        'activation'         => { -login => 0, -method => \&mode_activation_screen    },
  -        'recovery'           => { -login => 0, -method => \&mode_recovery_screen      },
  -        'recovery-action'    => { -login => 0, -method => \&mode_recovery_action      },
  +        'login'              => { -login => 0, -canvas => 1, -method => \&mode_login_screen         },
  +        'login-action'       => { -login => 0, -canvas => 1, -method => \&mode_login_action         },
  +        'logout'             => { -login => 1, -canvas => 1, -method => \&mode_logout_screen        },
  +        'enrollment'         => { -login => 0, -canvas => 1, -method => \&mode_enrollment_screen    },
  +        'enrollment-action'  => { -login => 0, -canvas => 1, -method => \&mode_enrollment_action    },
  +        'activation'         => { -login => 0, -canvas => 1, -method => \&mode_activation_screen    },
  +        'recovery'           => { -login => 0, -canvas => 1, -method => \&mode_recovery_screen      },
  +        'recovery-action'    => { -login => 0, -canvas => 1, -method => \&mode_recovery_action      },
   
           #   application modes
  -        'menu-overview'      => { -login => 1, -method => \&mode_menu_overview_screen },
  -        'menu-member'        => { -login => 1, -method => \&mode_menu_member_screen   },
  -        'menu-member-action' => { -login => 1, -method => \&mode_menu_member_action   },
  -        'menu-account'       => { -login => 1, -method => \&mode_menu_account_screen  },
  -        'menu-action'        => { -login => 1, -method => \&mode_menu_action_screen   },
  -        'menu-logout'        => { -login => 1, -method => \&mode_menu_logout_screen   },
  +        'menu-overview'      => { -login => 1, -canvas => 1, -method => \&mode_menu_overview_screen },
  +        'menu-member'        => { -login => 1, -canvas => 1, -method => \&mode_menu_member_screen   },
  +        'menu-member-action' => { -login => 1, -canvas => 1, -method => \&mode_menu_member_action   },
  +        'menu-account'       => { -login => 1, -canvas => 1, -method => \&mode_menu_account_screen  },
  +        'menu-action'        => { -login => 1, -canvas => 1, -method => \&mode_menu_action_screen   },
  +        'menu-logout'        => { -login => 1, -canvas => 1, -method => \&mode_menu_logout_screen   },
       };
       $self->param(-modes => $modes);
       my %run_modes = ();
  @@ -148,6 +105,53 @@
       $self->error_mode('error');
       $self->mode_param(\&current_mode);
   
  +    #   output HTML canvas object provisioning
  +    if ($modes->{$self->current_mode()}->{-canvas}) {
  +
  +        #   establish HTML canvas output object
  +        my $html = new String::Divert;
  +        $html->folder('{#%s#}', '\{#([a-zA-Z_][a-zA-Z0-9_-]*)#\}');
  +
  +        #   provide outer HTML canvas
  +        my $canvas_url       = $session->param("canvas_url")       || $cgi->param("canvas_url")       || "ase.html";
  +        my $canvas_mark_head = $session->param("canvas_mark_head") || $cgi->param("canvas_mark_head") || "<!-- ASE: HEAD -->";
  +        my $canvas_mark_body = $session->param("canvas_mark_head") || $cgi->param("canvas_mark_head") || "<!-- ASE: BODY -->";
  +        my $canvas_adjust    = $session->param("canvas_adjust")    || $cgi->param("canvas_adjust")    || "yes";
  +        my $canvas_caching   = $session->param("canvas_caching")   || $cgi->param("canvas_caching")   || "no";
  +        #   FIXME: caching
  +        my ($canvas_type, undef, $canvas) = $self->fetch($canvas_url);
  +        die "invalid content type \"$canvas_type\"" if ($canvas_type ne 'text/html');
  +        $canvas = $self->adjust_url($canvas_url, $canvas_type, $canvas) if ($canvas_adjust);
  +        if ($canvas =~ m/${canvas_mark_head}/si) {
  +            $canvas =~ s/${canvas_mark_head}([ \t]*\n)?/$html->folder("head")/sie;
  +        }
  +        else {
  +            $canvas =~ s/(<head>)/$1.$html->folder("head")/sie;
  +        }
  +        if ($canvas =~ m/${canvas_mark_body}/si) {
  +            $canvas =~ s/${canvas_mark_body}([ \t]*\n)?/$html->folder("body")/sie;
  +        }
  +        else {
  +            $canvas =~ s/(<body>)/$1.$html->folder("body")/sie;
  +        }
  +        $html->append($canvas);
  +        $html->overload(1);
  +
  +        #   provide inner HTML canvas
  +        $html->divert("head");
  +        $html .= "<link rel=\"stylesheet\" type=\"text/css\"" .
  +                 " href=\"".$self->url(-mode => "loader", -name => "ase.css")."\"/>\n";
  +        $html->undivert();
  +        $html->divert("body");
  +        $html .= "<div class=\"ase\">\n";
  +        $html .= "  "; $html->fold();
  +        $html .= "<\/div>\n";
  +        $html->divert();
  +
  +        #   store HTML canvas output object
  +        $self->param(-html => $html);
  +    }
  +
       return;
   }
   
  @@ -228,12 +232,12 @@
       
       #   gracefully shutdown HTML output object
       my $html = $self->param(-html);
  -    $html->destroy();
  +    $html->destroy() if (defined($html));
       $self->delete(-html);
   
       #   gracefully shutdown CGI session object
       my $session = $self->param(-session);
  -    $session->close();
  +    $session->flush();
       $self->delete(-session);
   
       #   gracefully shutdown DBI database object
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.rpc.pl
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ase.cgi.rpc.pl
  --- ossp-pkg/ase/ase.cgi.rpc.pl	21 Nov 2005 21:29:16 -0000	1.6
  +++ ossp-pkg/ase/ase.cgi.rpc.pl	22 Nov 2005 16:12:37 -0000	1.7
  @@ -82,12 +82,12 @@
   
           #   determine response attributes
           my $response = {
  -            "Session-Id"          => $sid,
  -            "Session-Validity"    => "no",
  +            "Session-Id"    => $sid,
  +            "Session-Valid" => "no",
           };
           if (defined($session) and not $session->is_expired()) {
               #   session context attributes
  -            $response->{"Session-Validity"} = "yes";
  +            $response->{"Session-Valid"}    = "yes";
               $response->{"Session-Created"}  = $session->ctime();
               $response->{"Session-Expires"}  = $session->atime()+$session->expire();
   
  @@ -106,9 +106,9 @@
                   or die $dbi->errstr();
               my $rec = $sth->fetchrow_hashref()
                   or die "no member found under UUID";
  -            $response->{"Client-Address"}     = $session->remote_addr()  || "0.0.0.0";
  -            $response->{"Client-Login-UUID"}  = $session->param("login") || "unknown";
  -            $response->{"Client-Login-EMail"} = $rec->{"me_address"}     || "unknown";
  +            $response->{"Client-Address"}    = $session->remote_addr()  || "0.0.0.0";
  +            $response->{"Client-Login-UUID"} = $session->param("login") || "unknown";
  +            $response->{"Client-Login-Name"} = $rec->{"me_address"}     || "unknown";
           }
   
           #   generate response
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.pm
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 ase.pm
  --- ossp-pkg/ase/ase.pm	22 Nov 2005 09:55:40 -0000	1.7
  +++ ossp-pkg/ase/ase.pm	22 Nov 2005 16:12:38 -0000	1.8
  @@ -40,6 +40,34 @@
   our @EXPORT_OK = ();
   our @EXPORT    = ();
   
  +#   names of valid ASE session attributes
  +my @valid_attributes = qw(
  +    session-id
  +    session-valid
  +    session-created
  +    session-expires
  +    canvas-url
  +    canvas-mark-head
  +    canvas-mark-body
  +    canvas-adjust
  +    canvas-caching
  +    client-address
  +    client-login-uuid
  +    client-login-name
  +);
  +
  +#   fatal error message
  +sub fatal ($$;@) {
  +    my ($self, $fmt, @args) = @_;
  +    my $body = "ASE CLIENT ERROR:\n";
  +    $body .= (@_ >= 3 ? sprintf($fmt, @args) : sprintf("%s", $fmt));
  +    print $self->{-cgi}->header(
  +        -status => "500 Internal Server Error",
  +        -type   => "text/plain",
  +    ) . $body;
  +    exit(0);
  +}
  +
   #   object constructor
   sub new {
       my $proto = shift;
  @@ -52,11 +80,11 @@
   
       #   fill object with attributes
       $self->{-server}           = ($args{-server}        || die "no OSSP ase server URL specified with \"-server\"");
  -    $self->{-cgi}              = ($args{-cgi}           || new CGI),;
  -    $self->{-mode}             = ($args{-mode}          || "mode"),;
  -    $self->{-session}          = ($args{-session}       || new CGI::Session),;
  +    $self->{-cgi}              = ($args{-cgi}           || new CGI);
  +    $self->{-mode}             = ($args{-mode}          || "mode");
  +    $self->{-session}          = ($args{-session}       || new CGI::Session);
       $self->{-login}            = ($args{-login}         || "login");
  -    $self->{-valid}            = ($args{-valid}         || "+5m"),;
  +    $self->{-valid}            = ($args{-valid}         || 300);
       $self->{-canvas_mark_head} = ($args{-canvas_mark}   || "<!-- ASE: HEAD -->");
       $self->{-canvas_mark_body} = ($args{-canvas_mark}   || "<!-- ASE: BODY -->");
       $self->{-canvas_adjust}    = ($args{-canvas_adjust} || 1);
  @@ -71,8 +99,8 @@
       my ($self) = @_;
   
       #   destroy object attributes
  -    $self->{-cgi}    = undef;
  -    $self->{-session} = undef;
  +    delete $self->{-cgi};
  +    delete $self->{-session};
   
       return;
   }
  @@ -80,22 +108,31 @@
   #   run-time engine
   sub run ($;%) {
       my ($self, %args) = @_;
  -    my $action = $self->{-cgi}->param("ase-action") || "";
   
  -    #   request ASE actions
  +    ##
  +    ##  PERFORM EXCEPTIONAL STAND-ALONE ACTIONS
  +    ##
  +
  +    my $action = $self->{-cgi}->param("ase-action") || "";
       if ($action =~ m/^(login|logout|info)$/) {
  -        #   remember mode during and after action
  +        #
  +        #   request ASE actions
  +        #
           my $mode_during = $self->{-cgi}->param("ase-mode-during") || "";
           my $mode_after  = $self->{-cgi}->param("ase-mode-after")  || "";
  -        $self->{-session}->param("ase-mode-after", $mode_after);
   
  -        #   determine canvas and return URLs
  -        my $canvas = sprintf("%s?%s=%s", $self->{-cgi}->url(-full => 1), $self->{-mode}, $mode_during);
  -        my $return = sprintf("%s?ase-action=comeback;ase-client-sid=%s;ase-server-sid=%%s",
  -            $self->{-cgi}->url(-full => 1), $self->{-session}->id());
  +        #   remember mode after action
  +        $self->attr("mode-after", $mode_after);
   
  -        #   determine server request URL
  -        my $url = sprintf("%s?mode=rpc;method=%s;" .
  +        #   determine URLs for canvas and return
  +        my $canvas = sprintf("%s?%s=%s",
  +            $self->{-cgi}->url(-full => 1), $self->{-mode}, $mode_during);
  +        my $return = sprintf("%s?ase-action=comeback;ase-action-old=%s;ase-client-sid=%s;ase-server-sid=%%s",
  +            $self->{-cgi}->url(-full => 1), $action, $self->{-session}->id());
  +
  +        #   determine URL for server request
  +        my $url = sprintf(
  +            "%s?mode=rpc;method=%s;" .
               "canvas=%s;canvas_mark=%s;canvas_adjust=%s;canvas_caching=%s;" .
               "return=%s",
               $self->{-server},
  @@ -108,71 +145,32 @@
           );
   
           #   redirect to server request URL
  +        #   (intentionally terminates the application immediately)
           print $self->{-cgi}->redirect(-url => $url, -status => 302);
           exit(0);
       }
  -
  -    #   respond to ASE actions
       elsif ($action eq 'comeback') {
  -        my $client_sid = $self->{-cgi}->param("ase-client-sid");
  -        my $server_sid = $self->{-cgi}->param("ase-server-sid");
  -
  -        #   query server for session
  -        my $server = $self->{-server};
  -        my ($host, $port, $path) = ($server =~ m|^http://([^:/]+)((?::\d+)?)(.*)$|) or die;
  -        $port ||= 80;
  -        $port =~ s|^:||;
  -        $path .= "?mode=rpc;method=info;sid=$server_sid";
  -        my $sock = new IO::Socket::INET (
  -            PeerAddr => $host,
  -            PeerPort => $port,
  -            Proto    => "tcp",
  -            Timeout  => 10
  -        ) or die "failed to connect to $host:$port: $@";
  -        $sock->autoflush(1);
  -        $sock->printf(
  -            "GET $path HTTP/1.0\n" .
  -            "Host: $host:$port\n" .
  -            "\n"
  -        );
  -        my $response = '';
  -        $response .= $_ while (<$sock>);
  -        $sock->close();
  -
  -        #   prepare for verification
  -        $self->{-session}->clear([$self->{-login}]);
  -        $self->{-session}->clear(["ase-session-validity"]);
  -
  -        #   parse response
  -        $response =~ s|^HTTP/1.[01x]\s+200\s+.+?\r?\n\r?\n||s;
  -        foreach my $key (qw(
  -            Session-Id
  -            Session-Validity
  -            Session-Created
  -            Session-Expires
  -            Canvas-URL
  -            Canvas-Mark-Head
  -            Canvas-Mark-Body
  -            Canvas-Adjust
  -            Canvas-Caching
  -            Client-Address
  -            Client-Login-UUID
  -            Client-Login-EMail
  -        )) {
  -            $response =~ s|${key}:[ \t]+([^\r\n]+)\r?\n|$self->{-session}->param(lc("ase-$key"), $1), ''|sei;
  +        #
  +        #   respond to ASE actions
  +        #
  +        my $action_old = $self->{-cgi}->param("ase-action-old") || "";
  +        my $client_sid = $self->{-cgi}->param("ase-client-sid") || "";
  +        my $server_sid = $self->{-cgi}->param("ase-server-sid") || "";
  +
  +        #   sanity check local client session (always)
  +        if ($client_sid ne $self->{-session}->id()) {
  +            $self->fatal("client session invalid: mismatch between \"%s\" and \"%s\"",
  +                $client_sid, $self->{-session}->id());
           }
   
  -        #   verify login
  -        my $login_valid   = $self->{-session}->param("ase-session-validity")   || 0;
  -        my $login_name    = $self->{-session}->param("ase-client-login-email") || "";
  -        my $login_expires = $self->{-session}->param("ase-session-expires")    || 0;
  -        $login_expires -= time();
  -        if (    ($client_sid eq $self->{-session}->id())
  -            and ($login_valid eq "yes")
  -            and ($login_name ne "")
  -            and ($login_expires > 0)    ) {
  -            $self->{-session}->param($self->{-login},  $login_name);
  -            $self->{-session}->expire($self->{-login}, $login_expires);
  +        #   sanity check remote server session
  +        $self->attr("session-id", $server_sid);
  +        $self->validate(1);
  +        if ($action_old eq "login" and $self->attr("session-valid") ne "yes") {
  +            $self->fatal("server session still invalid: \"%s\"", $server_sid);
  +        }
  +        elsif ($action_old eq "logout" and $self->attr("session-valid") ne "no") {
  +            $self->fatal("server session still valid: \"%s\"", $server_sid);
           }
   
           #   redirect to own following URL
  @@ -182,6 +180,84 @@
           exit(0);
       }
   
  +    ##
  +    ##  PERFORM REGULAR EMBEDDED ACTIONS
  +    ##
  +
  +    #   validate session (not forced)
  +    $self->validate(0);
  +
  +    return;
  +}
  +
  +#   session validation
  +sub validate ($) {
  +    my ($self, $forced) = @_;
  +
  +    #   make sure there is a session to be validated
  +    my $server_sid = $self->attr("session-id");
  +    return if (not defined($server_sid));
  +
  +    #   short-circuit if still no (re-)validation is necessary
  +    my $valid_since = $self->attr("session-valid-since");
  +    return if (    not $forced
  +               and defined($valid_since)
  +               and ($valid_since + $self->{-valid}) > time());
  +
  +    #   clear all remembered session attributes
  +    $self->{-session}->clear([$self->{-login}]);
  +    foreach my $key (@valid_attributes) {
  +        $self->{-session}->clear([$key]);
  +    }
  +
  +    #   query server for session information
  +    my $server = $self->{-server};
  +    my ($host, $port, $path) = ($server =~ m|^http://([^:/]+)((?::\d+)?)(.*)$|) or die;
  +    $port ||= 80;
  +    $port =~ s|^:||;
  +    $path .= "?mode=rpc;method=info;sid=$server_sid";
  +    my $sock = new IO::Socket::INET (
  +        PeerAddr => $host,
  +        PeerPort => $port,
  +        Proto    => "tcp",
  +        Timeout  => 10
  +    ) or die "failed to connect to $host:$port: $@";
  +    $sock->autoflush(1);
  +    $sock->printf(
  +        "GET $path HTTP/1.0\n" .
  +        "Host: $host:$port\n" .
  +        "\n"
  +    );
  +    my $response = '';
  +    $response .= $_ while (<$sock>);
  +    $sock->close();
  +
  +    #   parse session information response
  +    $response =~ s|^HTTP/1.[01x]\s+200\s+.+?\r?\n\r?\n||s;
  +    foreach my $key (@valid_attributes) {
  +        $self->attr($key, "");
  +        $response =~ s|${key}:[ \t]+([^\r\n]+)\r?\n|$self->attr($key, $1), ''|sei;
  +    }
  +
  +    #   validate session
  +    my $session_valid     = $self->attr("session-valid")     || "no";
  +    my $session_expires   = $self->attr("session-expires")   || 0;
  +    my $client_login_uuid = $self->attr("client-login-uuid") || "";
  +    my $client_login_name = $self->attr("client-login-name") || "";
  +    $session_expires -= time();
  +    if (    ($session_valid     eq "yes")
  +        and ($session_expires   >  0    )
  +        and ($client_login_uuid ne ""   )
  +        and ($client_login_name ne ""   )) {
  +        $self->{-session}->param($self->{-login},  $client_login_name);
  +        $self->{-session}->expire($self->{-login}, sprintf("+%ds", $session_expires));
  +    }
  +    else {
  +        $self->attr("session-valid", "no");
  +    }
  +
  +    #   remember time of this validation
  +    $self->attr("session-valid-since", time());
       return;
   }
   
  @@ -202,6 +278,22 @@
       return $url;
   }
   
  +#   return arbitrary ASE session attributes
  +sub attr ($$;$) {
  +    my ($self, $name, $value) = @_;
  +
  +    my $value_old = $self->{-session}->param("ase-$name");
  +    if (@_ == 3) {
  +        if (defined($value)) {
  +            $self->{-session}->param("ase-$name", $value);
  +        }
  +        else {
  +            $self->{-session}->clear("ase-$name");
  +        }
  +    }
  +    return $value_old;
  +}
  +
   #   return current login
   sub login ($) {
       my ($self) = @_;
  @@ -209,13 +301,6 @@
       return $self->{-session}->param($self->{-login});
   }
   
  -#   return arbitrary ASE session attributes
  -sub attr ($$) {
  -    my ($self, $name) = @_;
  -
  -    return $self->{-session}->param("ase-$name");
  -}
  -
   #   return ASE canvas marker for head and body
   sub canvas ($%) {
       my ($self, %args) = @_;
  @@ .

From ossp-cvs-owner@ossp.org  Tue Nov 22 17:16:35 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 3F6897531A0; Tue, 22 Nov 2005 17:16:35 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO ase.pm
Message-Id: <20051122161635.3F6897531A0@mail.ossp.org>
Date: Tue, 22 Nov 2005 17:16:35 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Nov-2005 17:16:34
  Branch: HEAD                             Handle: 2005112216163400

  Modified files:
    ossp-pkg/ase            TODO ase.pm

  Log:
    more error handling; remove already done issues from TODO file

  Summary:
    Revision    Changes     Path
    1.9         +0  -6      ossp-pkg/ase/TODO
    1.9         +10 -5      ossp-pkg/ase/ase.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 TODO
  --- ossp-pkg/ase/TODO	22 Nov 2005 16:12:37 -0000	1.8
  +++ ossp-pkg/ase/TODO	22 Nov 2005 16:16:34 -0000	1.9
  @@ -1,8 +1,6 @@
   
   TODO:
  -- forced validation of session (timed, manual)
   - info RPC page
  -- cleanup internal variables
   - remove or disable dead code in ASE (profile)
   - remove or finish missing code in ASE (recovery)
   
  @@ -27,7 +25,3 @@
   - number of servers
   - number of instances
   
  -
  -- mode=rpc no canvas loading!
  -- ase client error page if canvas= in run(), etc.
  -
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.pm
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 ase.pm
  --- ossp-pkg/ase/ase.pm	22 Nov 2005 16:12:38 -0000	1.8
  +++ ossp-pkg/ase/ase.pm	22 Nov 2005 16:16:34 -0000	1.9
  @@ -118,8 +118,10 @@
           #
           #   request ASE actions
           #
  -        my $mode_during = $self->{-cgi}->param("ase-mode-during") || "";
  -        my $mode_after  = $self->{-cgi}->param("ase-mode-after")  || "";
  +        my $mode_during = $self->{-cgi}->param("ase-mode-during")
  +            or $self->fatal("CGI parameter \"ase-mode-during\" missing or empty");
  +        my $mode_after  = $self->{-cgi}->param("ase-mode-after")
  +            or $self->fatal("CGI parameter \"ase-mode-after\" missing or empty");
   
           #   remember mode after action
           $self->attr("mode-after", $mode_after);
  @@ -153,9 +155,12 @@
           #
           #   respond to ASE actions
           #
  -        my $action_old = $self->{-cgi}->param("ase-action-old") || "";
  -        my $client_sid = $self->{-cgi}->param("ase-client-sid") || "";
  -        my $server_sid = $self->{-cgi}->param("ase-server-sid") || "";
  +        my $action_old = $self->{-cgi}->param("ase-action-old")
  +            or $self->fatal("CGI parameter \"ase-action-old\" missing or empty");
  +        my $client_sid = $self->{-cgi}->param("ase-client-sid")
  +            or $self->fatal("CGI parameter \"ase-client-sid\" missing or empty");
  +        my $server_sid = $self->{-cgi}->param("ase-server-sid")
  +            or $self->fatal("CGI parameter \"ase-server-sid\" missing or empty");
   
           #   sanity check local client session (always)
           if ($client_sid ne $self->{-session}->id()) {
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov 23 15:28:01 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 7FCC275292A; Wed, 23 Nov 2005 15:28:01 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO ase.cgi.main.pl ase.cgi.rpc.pl ase.cgi....
Message-Id: <20051123142801.7FCC275292A@mail.ossp.org>
Date: Wed, 23 Nov 2005 15:28:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Nov-2005 15:28:01
  Branch: HEAD                             Handle: 2005112314280001

  Modified files:
    ossp-pkg/ase            TODO ase.cgi.main.pl ase.cgi.rpc.pl
                            ase.cgi.util.pl ase.pm sample.cgi

  Log:
    major overhaul of client side (again)

  Summary:
    Revision    Changes     Path
    1.10        +1  -0      ossp-pkg/ase/TODO
    1.17        +11 -9      ossp-pkg/ase/ase.cgi.main.pl
    1.8         +4  -10     ossp-pkg/ase/ase.cgi.rpc.pl
    1.7         +1  -0      ossp-pkg/ase/ase.cgi.util.pl
    1.10        +267 -101   ossp-pkg/ase/ase.pm
    1.10        +18 -5      ossp-pkg/ase/sample.cgi
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 TODO
  --- ossp-pkg/ase/TODO	22 Nov 2005 16:16:34 -0000	1.9
  +++ ossp-pkg/ase/TODO	23 Nov 2005 14:28:00 -0000	1.10
  @@ -1,5 +1,6 @@
   
   TODO:
  +- ase.pm: caching? adjust? valid params?
   - info RPC page
   - remove or disable dead code in ASE (profile)
   - remove or finish missing code in ASE (recovery)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	22 Nov 2005 16:12:37 -0000	1.16
  +++ ossp-pkg/ase/ase.cgi.main.pl	23 Nov 2005 14:28:00 -0000	1.17
  @@ -113,15 +113,12 @@
           $html->folder('{#%s#}', '\{#([a-zA-Z_][a-zA-Z0-9_-]*)#\}');
   
           #   provide outer HTML canvas
  -        my $canvas_url       = $session->param("canvas_url")       || $cgi->param("canvas_url")       || "ase.html";
  +        my $canvas_url       = "ase.html"; # $session->param("canvas_url")       || $cgi->param("canvas_url")       || "ase.html";
           my $canvas_mark_head = $session->param("canvas_mark_head") || $cgi->param("canvas_mark_head") || "<!-- ASE: HEAD -->";
           my $canvas_mark_body = $session->param("canvas_mark_head") || $cgi->param("canvas_mark_head") || "<!-- ASE: BODY -->";
  -        my $canvas_adjust    = $session->param("canvas_adjust")    || $cgi->param("canvas_adjust")    || "yes";
  -        my $canvas_caching   = $session->param("canvas_caching")   || $cgi->param("canvas_caching")   || "no";
  -        #   FIXME: caching
           my ($canvas_type, undef, $canvas) = $self->fetch($canvas_url);
           die "invalid content type \"$canvas_type\"" if ($canvas_type ne 'text/html');
  -        $canvas = $self->adjust_url($canvas_url, $canvas_type, $canvas) if ($canvas_adjust);
  +        $canvas = $self->adjust_url($canvas_url, $canvas_type, $canvas);
           if ($canvas =~ m/${canvas_mark_head}/si) {
               $canvas =~ s/${canvas_mark_head}([ \t]*\n)?/$html->folder("head")/sie;
           }
  @@ -197,11 +194,16 @@
       #   no (non-HTML) output was generated instead.
       if (not defined(${$htmlref}) or ${$htmlref} eq '') {
           my $html = $self->param(-html);
  -        $html->overload(0);
  -        $html->undivert(0);
  -        ${$htmlref} = $html->string();
  -        $self->header_add(-Content_length => length(${$htmlref}));
  +        if (defined($html)) {
  +            $html->overload(0);
  +            $html->undivert(0);
  +            ${$htmlref} = $html->string();
  +        }
       }
  +
  +    #   determine content length
  +    $self->header_add(-Content_length => length(${$htmlref}))
  +        if (defined(${$htmlref}));
    
       #   set the session cookie
       my $cgi     = $self->param(-cgi);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.rpc.pl
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 ase.cgi.rpc.pl
  --- ossp-pkg/ase/ase.cgi.rpc.pl	22 Nov 2005 16:12:37 -0000	1.7
  +++ ossp-pkg/ase/ase.cgi.rpc.pl	23 Nov 2005 14:28:00 -0000	1.8
  @@ -41,22 +41,18 @@
   
       if ($method eq "login" or $method eq "logout") {
           #   parameter sanity checking
  +        my $return_url       = $cgi->param("return");
  +        my $canvas_url       = $cgi->param("canvas")           || "";
           my $canvas_mark_head = $cgi->param("canvas_mark_head") || "";
           my $canvas_mark_body = $cgi->param("canvas_mark_body") || "";
  -        my $canvas_adjust    = $cgi->param("canvas_adjust")    || "";
  -        my $canvas_caching   = $cgi->param("canvas_caching")   || "";
  -        my $canvas_url       = $cgi->param("canvas")           || "";
  -        my $return_url       = $cgi->param("return");
           die "no or invalid return URL given"
               if (not defined($return_url) or $return_url !~ m|https?://.+|);
   
           #   store parameters into session
  +        $session->param("after_$method",    $return_url);
  +        $session->param("canvas_url",       $canvas_url);
           $session->param("canvas_mark_head", $canvas_mark_head);
           $session->param("canvas_mark_body", $canvas_mark_body);
  -        $session->param("canvas_adjust",    $canvas_adjust);
  -        $session->param("canvas_caching",   $canvas_caching);
  -        $session->param("canvas_url",       $canvas_url);
  -        $session->param("after_$method",    $return_url);
   
           if (   ($method eq "login"  and     $session->param("login"))
               or ($method eq "logout" and not $session->param("login"))) {
  @@ -95,8 +91,6 @@
               $response->{"Canvas-URL"}       = $session->param("canvas_url");
               $response->{"Canvas-Mark-Head"} = $session->param("canvas_mark_head");
               $response->{"Canvas-Mark-Body"} = $session->param("canvas_mark_body");
  -            $response->{"Canvas-Adjust"}    = $session->param("canvas_adjust");
  -            $response->{"Canvas-Caching"}   = $session->param("canvas_caching");
   
               #   session client attributes
               my $sth = $dbi->prepare(
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.util.pl
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ase.cgi.util.pl
  --- ossp-pkg/ase/ase.cgi.util.pl	21 Nov 2005 09:07:38 -0000	1.6
  +++ ossp-pkg/ase/ase.cgi.util.pl	23 Nov 2005 14:28:00 -0000	1.7
  @@ -60,6 +60,7 @@
       #   load external file content 
       if ($url =~ m/^https?:\/\/.+$/) { 
           die "invalid URL \"$url\"" if ($url !~ m/^https?:\/\/\S+\.(?:ossp\.org|openpkg\.(?:org|com|net))/); # FIXME: SECURITY enough?
  +        #   FIXME: CACHING?! Use HTTP Headers!
           my $ua = new LWP::UserAgent;
           $ua->agent($cfg->{-prog_name}."/".$cfg->{-prog_vers});
           $ua->timeout(20);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.pm
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 ase.pm
  --- ossp-pkg/ase/ase.pm	22 Nov 2005 16:16:34 -0000	1.9
  +++ ossp-pkg/ase/ase.pm	23 Nov 2005 14:28:00 -0000	1.10
  @@ -29,14 +29,11 @@
   use 5.008;
   use strict;
   use warnings;
  -use Carp;
   use Exporter;
  -use IO::Socket::INET;
  -use URI::Escape;
   
   our $VERSION = do { my @v = ('0.0.1' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
   
  -our @ISA = qw(Exporter);
  +our @ISA       = qw(Exporter);
   our @EXPORT_OK = ();
   our @EXPORT    = ();
   
  @@ -49,23 +46,60 @@
       canvas-url
       canvas-mark-head
       canvas-mark-body
  -    canvas-adjust
  -    canvas-caching
       client-address
       client-login-uuid
       client-login-name
   );
   
  -#   fatal error message
  -sub fatal ($$;@) {
  +#   textual markers for canvas
  +my $canvas_mark = {
  +    head => "<!-- ASE: HEAD -->",
  +    body => "<!-- ASE: BODY -->"
  +};
  +
  +#   lazy loading of modules
  +sub _use ($$) {
  +    my ($self, $name) = @_;
  +    if (not defined($self->{-use}->{$name})) {
  +        eval "require $name; import $name;";
  +        $self->{-use}->{$name} = 1;
  +    }
  +    return;
  +}
  +
  +#   debugging: time identification
  +sub _time () {
  +    my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time());
  +    return sprintf("%04d-%02d-%02d %02d:%02d:%02d", $year, $mon+1, $mday, $hour, $min, $sec);
  +}
  +
  +#   debugging: message formatting
  +sub _debug ($$;@) {
       my ($self, $fmt, @args) = @_;
  -    my $body = "ASE CLIENT ERROR:\n";
  -    $body .= (@_ >= 3 ? sprintf($fmt, @args) : sprintf("%s", $fmt));
  -    print $self->{-cgi}->header(
  -        -status => "500 Internal Server Error",
  -        -type   => "text/plain",
  -    ) . $body;
  -    exit(0);
  +
  +    return if (not defined($self->{-debug}));
  +    if (defined($args[0])) {
  +        $self->{-debug}->printf("%s $fmt\n", $self->_time(), @args);
  +    }
  +    else {
  +        $self->{-debug}->printf("%s %s\n", $self->_time(), $fmt);
  +    }
  +    return;
  +}
  +
  +#   debugging: structure dumping
  +sub _dump ($;@) {
  +    my ($self, $prefix, @args) = @_;
  +
  +    return if (not defined($self->{-debug}));
  +    $self->_use("Data::Dumper");
  +    my $d = Data::Dumper->new([@args]);
  +    $d->Purity(0);
  +    $d->Indent(1);
  +    $d->Terse(1);
  +    $d->Pad(sprintf("%s %s| ", $self->_time()), $prefix);
  +    $self->{-debug}->print($d->Dump());
  +    return;
   }
   
   #   object constructor
  @@ -79,39 +113,65 @@
       bless ($self, $class);
   
       #   fill object with attributes
  -    $self->{-server}           = ($args{-server}        || die "no OSSP ase server URL specified with \"-server\"");
  -    $self->{-cgi}              = ($args{-cgi}           || new CGI);
  -    $self->{-mode}             = ($args{-mode}          || "mode");
  -    $self->{-session}          = ($args{-session}       || new CGI::Session);
  -    $self->{-login}            = ($args{-login}         || "login");
  -    $self->{-valid}            = ($args{-valid}         || 300);
  -    $self->{-canvas_mark_head} = ($args{-canvas_mark}   || "<!-- ASE: HEAD -->");
  -    $self->{-canvas_mark_body} = ($args{-canvas_mark}   || "<!-- ASE: BODY -->");
  -    $self->{-canvas_adjust}    = ($args{-canvas_adjust} || 1);
  -    $self->{-canvas_caching}   = ($args{-canvas_adjust} || 0);
  +    $self->{-server}   = ($args{-server}  || die "no OSSP ase server URL specified with \"-server\"");
  +    $self->{-cgi}      = ($args{-cgi}     || new CGI);
  +    $self->{-session}  = ($args{-session} || new CGI::Session);
  +    $self->{-mode}     = ($args{-mode}    || "mode");
  +    $self->{-valid}    = ($args{-valid}   || 0);
  +    $self->{-debug}    = ($args{-debug}   || undef);
  +    $self->{-response} = "";
  +    $self->{-error}    = "";
  +    $self->{-use}      = {};
  +
  +    #   optionally open debug logfile
  +    if (defined($self->{-debug})) {
  +        $self->_use("IO::File");
  +        $self->{-debug} = IO::File->new(">>" . $self->{-debug})
  +            or die "failed to open debug logfile: $!";
  +    }
   
       #   return object
       return $self;
   }
   
  -#   object destructor
  -sub DESTROY ($) {
  +#   object destructor (explicit)
  +sub destroy ($) {
       my ($self) = @_;
   
  -    #   destroy object attributes
  +    #   shutdown sub-objects
  +    $self->{-session}->flush() if (defined($self->{-session}));
  +    $self->{-debug}->close()   if (defined($self->{-debug}));
  +
  +    #   destroy sub-objects
       delete $self->{-cgi};
       delete $self->{-session};
  +    delete $self->{-debug};
  +
  +    return;
  +}
   
  +#   object destructor (implicit)
  +sub DESTROY ($) {
  +    my ($self) = @_;
  +    $self->destroy();
       return;
   }
   
  -#   run-time engine
  -sub run ($;%) {
  +#   run-time responsibility check
  +sub responsible ($) {
  +    my ($self) = @_;
  +
  +    my $action = $self->{-cgi}->param("ase-action") || "";
  +    return $action =~ m/^(login|logout|info|comeback)$/;
  +}
  +
  +#   run-time action handler
  +sub action ($;%) {
       my ($self, %args) = @_;
   
  -    ##
  -    ##  PERFORM EXCEPTIONAL STAND-ALONE ACTIONS
  -    ##
  +    #   debugging
  +    $self->_debug("action: client-sid=%s server-sid=%s",
  +        $self->{-session}->id(), $self->attr("session-id") || "none");
   
       my $action = $self->{-cgi}->param("ase-action") || "";
       if ($action =~ m/^(login|logout|info)$/) {
  @@ -119,9 +179,12 @@
           #   request ASE actions
           #
           my $mode_during = $self->{-cgi}->param("ase-mode-during")
  -            or $self->fatal("CGI parameter \"ase-mode-during\" missing or empty");
  +            or { $self->error("CGI parameter \"ase-mode-during\" missing or empty"), return 0 };
           my $mode_after  = $self->{-cgi}->param("ase-mode-after")
  -            or $self->fatal("CGI parameter \"ase-mode-after\" missing or empty");
  +            or { $self->error("CGI parameter \"ase-mode-after\" missing or empty"), return 0 };
  +
  +        #   debugging
  +        $self->_debug("action: action=%s mode-during=%s mode-after=%s", $action, $mode_during, $mode_after);
   
           #   remember mode after action
           $self->attr("mode-after", $mode_after);
  @@ -129,70 +192,80 @@
           #   determine URLs for canvas and return
           my $canvas = sprintf("%s?%s=%s",
               $self->{-cgi}->url(-full => 1), $self->{-mode}, $mode_during);
  -        my $return = sprintf("%s?ase-action=comeback;ase-action-old=%s;ase-client-sid=%s;ase-server-sid=%%s",
  -            $self->{-cgi}->url(-full => 1), $action, $self->{-session}->id());
  +        my $return = sprintf("%s?ase-action=comeback;ase-action-old=%s;ase-sid=%%s",
  +            $self->{-cgi}->url(-full => 1), $action);
   
           #   determine URL for server request
  +        $self->_use("URI::Escape");
           my $url = sprintf(
               "%s?mode=rpc;method=%s;" .
  -            "canvas=%s;canvas_mark=%s;canvas_adjust=%s;canvas_caching=%s;" .
  -            "return=%s",
  -            $self->{-server},
  -            $action,
  +            "return=%s;canvas=%s;canvas_mark_head=%s;canvas_mark_body=%s",
  +            $self->{-server}, $action,
  +            URI::Escape::uri_escape($return),
               URI::Escape::uri_escape($canvas),
  -            URI::Escape::uri_escape($self->{-canvas_mark}),
  -            $self->{-canvas_adjust}  ? "yes" : "no",
  -            $self->{-canvas_caching} ? "yes" : "no",
  -            URI::Escape::uri_escape($return)
  -        );
  +            URI::Escape::uri_escape($canvas_mark->{"head"}),
  +            URI::Escape::uri_escape($canvas_mark->{"body"}));
   
           #   redirect to server request URL
  -        #   (intentionally terminates the application immediately)
  -        print $self->{-cgi}->redirect(-url => $url, -status => 302);
  -        exit(0);
  +        $self->response($self->{-cgi}->redirect(-url => $url, -status => 302));
  +        return 1;
       }
       elsif ($action eq 'comeback') {
           #
           #   respond to ASE actions
           #
           my $action_old = $self->{-cgi}->param("ase-action-old")
  -            or $self->fatal("CGI parameter \"ase-action-old\" missing or empty");
  -        my $client_sid = $self->{-cgi}->param("ase-client-sid")
  -            or $self->fatal("CGI parameter \"ase-client-sid\" missing or empty");
  -        my $server_sid = $self->{-cgi}->param("ase-server-sid")
  -            or $self->fatal("CGI parameter \"ase-server-sid\" missing or empty");
  -
  -        #   sanity check local client session (always)
  -        if ($client_sid ne $self->{-session}->id()) {
  -            $self->fatal("client session invalid: mismatch between \"%s\" and \"%s\"",
  -                $client_sid, $self->{-session}->id());
  -        }
  +            or { $self->error("CGI parameter \"ase-action-old\" missing or empty"), return 0 };
  +        my $sid = $self->{-cgi}->param("ase-sid")
  +            or { $self->error("CGI parameter \"ase-sid\" missing or empty"), return 0 };
  +
  +        $self->_debug("action: action=%s action-old=%s sid=%s", $action, $action_old, $sid);
   
           #   sanity check remote server session
  -        $self->attr("session-id", $server_sid);
  +        $self->attr("session-id", $sid);
           $self->validate(1);
           if ($action_old eq "login" and $self->attr("session-valid") ne "yes") {
  -            $self->fatal("server session still invalid: \"%s\"", $server_sid);
  +            $self->error("server session still invalid after login: \"%s\"", $sid);
  +            return 0;
           }
           elsif ($action_old eq "logout" and $self->attr("session-valid") ne "no") {
  -            $self->fatal("server session still valid: \"%s\"", $server_sid);
  +            $self->error("server session still valid after logout: \"%s\"", $sid);
  +            return 0;
           }
   
           #   redirect to own following URL
  -        my $mode_after = $self->{-session}->param("ase-mode-after");
  +        my $mode_after = $self->attr("mode-after");
           my $url = sprintf("%s?%s=%s", $self->{-cgi}->url(-relative => 1), $self->{-mode}, $mode_after);
  -        print $self->{-cgi}->redirect(-url => $url, -status => 302);
  -        exit(0);
  +        $self->response($self->{-cgi}->redirect(-url => $url, -status => 302));
  +        return 1;
       }
  +    else {
  +        $self->error("unable to determine action");
  +        return 0;
  +    }
  +}
   
  -    ##
  -    ##  PERFORM REGULAR EMBEDDED ACTIONS
  -    ##
  +sub response ($;$) {
  +    my ($self, $response) = @_;
  +
  +    my $rv = $self->{-response};
  +    if (not $rv and $self->error()) {
  +        $rv = $self->{-cgi}->header(
  +            -status  => "500 Internal Server Error",
  +            -type    => "text/plain",
  +            -expires => "+0s",
  +        ) . "ASE ERROR: " . $self->error() . "\n";
  +    }
  +    $self->{-response} = $response if (@_ == 2);
  +    return $rv;
  +}
   
  -    #   validate session (not forced)
  -    $self->validate(0);
  +sub error ($;$@) {
  +    my ($self, $fmt, @args) = @_;
   
  -    return;
  +    my $rv = $self->{-error};
  +    $self->{-error} = (@_ >= 3 ? sprintf($fmt, @args) : sprintf("%s", $fmt)) if (@_ >= 2);
  +    return $rv;
   }
   
   #   session validation
  @@ -200,28 +273,32 @@
       my ($self, $forced) = @_;
   
       #   make sure there is a session to be validated
  -    my $server_sid = $self->attr("session-id");
  -    return if (not defined($server_sid));
  +    my $sid = $self->attr("session-id");
  +    return if (not defined($sid));
  +
  +    #   debugging
  +    $self->_debug("METHOD: validate: forced=%s sid=%s", $forced ? "yes" : "no", $sid);
   
       #   short-circuit if still no (re-)validation is necessary
       my $valid_since = $self->attr("session-valid-since");
       return if (    not $forced
                  and defined($valid_since)
  -               and ($valid_since + $self->{-valid}) > time());
  +               and (   $self->{-valid} == 0
  +                    or ($valid_since + $self->{-valid}) > time()));
   
       #   clear all remembered session attributes
  -    $self->{-session}->clear([$self->{-login}]);
       foreach my $key (@valid_attributes) {
  -        $self->{-session}->clear([$key]);
  +        $self->attr($key, undef);
       }
   
       #   query server for session information
  +    $self->_use("IO::Socket::INET");
       my $server = $self->{-server};
       my ($host, $port, $path) = ($server =~ m|^http://([^:/]+)((?::\d+)?)(.*)$|) or die;
       $port ||= 80;
       $port =~ s|^:||;
  -    $path .= "?mode=rpc;method=info;sid=$server_sid";
  -    my $sock = new IO::Socket::INET (
  +    $path .= "?mode=rpc;method=info;sid=$sid";
  +    my $sock = IO::Socket::INET->new (
           PeerAddr => $host,
           PeerPort => $port,
           Proto    => "tcp",
  @@ -236,33 +313,35 @@
       my $response = '';
       $response .= $_ while (<$sock>);
       $sock->close();
  +    $self->_debug("METHOD: validate: response from %s", $server);
   
       #   parse session information response
  +    my $attribute = {};
       $response =~ s|^HTTP/1.[01x]\s+200\s+.+?\r?\n\r?\n||s;
       foreach my $key (@valid_attributes) {
  -        $self->attr($key, "");
  -        $response =~ s|${key}:[ \t]+([^\r\n]+)\r?\n|$self->attr($key, $1), ''|sei;
  +        $attribute->{$key} = "";
  +        $response =~ s|${key}:[ \t]+([^\r\n]+)\r?\n|$attribute->{$key} = $1, ''|sei;
       }
   
  -    #   validate session
  -    my $session_valid     = $self->attr("session-valid")     || "no";
  -    my $session_expires   = $self->attr("session-expires")   || 0;
  -    my $client_login_uuid = $self->attr("client-login-uuid") || "";
  -    my $client_login_name = $self->attr("client-login-name") || "";
  -    $session_expires -= time();
  -    if (    ($session_valid     eq "yes")
  -        and ($session_expires   >  0    )
  -        and ($client_login_uuid ne ""   )
  -        and ($client_login_name ne ""   )) {
  -        $self->{-session}->param($self->{-login},  $client_login_name);
  -        $self->{-session}->expire($self->{-login}, sprintf("+%ds", $session_expires));
  +    #   check validatity of session
  +    my $expires = ($attribute->{"session-expires"} || 0) - time();
  +    if (not (    $attribute->{"session-valid"} eq "yes"
  +             and $attribute->{"client-login-uuid"} ne ""
  +             and $attribute->{"client-login-name"} ne ""
  +             and $expires > 0                           )) {
  +        $attribute->{"session-valid"}   = "no";
  +        $attribute->{"session-expires"} = time()+1;
  +        $expires = 1;
       }
  -    else {
  -        $self->attr("session-valid", "no");
  +
  +    #   take over session attributes
  +    foreach my $key (@valid_attributes) {
  +        $self->attr($key, $attribute->{$key}, sprintf("+%ds", $expires));
       }
   
       #   remember time of this validation
       $self->attr("session-valid-since", time());
  +    $self->_dump("validate: ", $self->{-session});
       return;
   }
   
  @@ -284,13 +363,16 @@
   }
   
   #   return arbitrary ASE session attributes
  -sub attr ($$;$) {
  -    my ($self, $name, $value) = @_;
  +sub attr ($$;$$) {
  +    my ($self, $name, $value, $expire) = @_;
   
       my $value_old = $self->{-session}->param("ase-$name");
  -    if (@_ == 3) {
  +    if (@_ >= 3) {
           if (defined($value)) {
               $self->{-session}->param("ase-$name", $value);
  +            if (defined($expire)) {
  +                $self->{-session}->expire("ase-$name", $expire);
  +            }
           }
           else {
               $self->{-session}->clear("ase-$name");
  @@ -303,7 +385,7 @@
   sub login ($) {
       my ($self) = @_;
   
  -    return $self->{-session}->param($self->{-login});
  +    return (($self->attr("session-valid") || "no") eq "yes");
   }
   
   #   return ASE canvas marker for head and body
  @@ -311,8 +393,8 @@
       my ($self, %args) = @_;
   
       return ( $args{-part} eq 'head'
  -            ? $self->{-canvas_mark_head}
  -            : $self->{-canvas_mark_body});
  +            ? $canvas_mark->{"head"}
  +            : $canvas_mark->{"body"});
   }
   
   1;
  @@ -331,5 +413,89 @@
   It allows an arbitrary CGI written in Perl to leverage from
   B<OSSP ase> authentication.
   
  +=head1 APPLICATION PROGRAMMING INTERFACE (API)
  +
  +The following API methods are provided:
  +
  +=over 4
  +
  +=item C<my $ase = >B<new OSSP::ase::client>C<(>I<options>C<);>
  +
  +This creates a new B<OSSP ase> client object.
  +The available I<options> are:
  +
  +=over 4
  +
  +=item B<-server> (default: I<none>)
  +
  +Mandatory URL of the B<OSSP ase> server CGI.
  +Usually something like C<http://ase.example.com/ase.cgi>".
  +
  +=item B<-cgi> (default: C<new CGI>)
  +
  +Optional but strongly recommended reference to a B<CGI> query object.
  +
  +=item B<-session> (default: C<new CGI::Session>)
  +
  +Optional but strongly recommended reference to a B<CGI::Session> session
  +handling object.
  +
  +=item B<-mode> (default: C<"mode">)
  +
  +Optional name of B<CGI> parameter holding the run-time mode
  +dispatching information, i.e., the parameter your application
  +uses to decide which application screen/page to display.
  +
  +=item B<-valid> (default: C<0>)
  +
  +Optional number of seconds a B<OSSP ase> server session information is
  +valid before it is forced to be revalidated. A value of C<0> indicates
  +that no revalidation is enforced at all. Nevertheless the B<OSSP ase>
  +server session information is automatically expiring after the time
  +the server indicated. The revalidated is intended for intermediate
  +revalidation.
  +
  +=back
  +
  +=item C<$ase-E<gt>destroy();>
  +
  +=item C<undef $ase;>
  +
  +This destroys the B<OSSP ase> client object.
  +
  +=item C<$ase-E<gt>responsible();>
  +
  +FIXME
  +
  +=item C<$ase-E<gt>action();>
  +
  +FIXME
  +
  +=item C<$ase-E<gt>error();>
  +
  +FIXME
  +
  +=item C<$ase-E<gt>response();>
  +
  +FIXME
  +
  +=item C<$ase-E<gt>validate($forced);>
  +
  +FIXME
  +
  +=item C<$ase-E<gt>url();>
  +
  +FIXME
  +
  +=item C<$ase-E<gt>attr($name>[C<, $value>[C<, $expire>]]C<);>
  +
  +FIXME
  +
  +=item C<$ase-E<gt>canvas();>
  +
  +FIXME
  +
  +=back
  +
   =cut
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/sample.cgi
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 sample.cgi
  --- ossp-pkg/ase/sample.cgi	22 Nov 2005 15:40:08 -0000	1.9
  +++ ossp-pkg/ase/sample.cgi	23 Nov 2005 14:28:01 -0000	1.10
  @@ -70,12 +70,18 @@
   my $ase = new OSSP::ase::client(
       -server  => "http://registry.openpkg.org/ase",
       -cgi     => $cgi,
  -    -mode    => "mode",
       -session => $session,
  -    -login   => "login",
  -    -valid   => "+1m",
  +    -mode    => "mode",
  +    -valid   => 60,
  +    -debug   => "sample.log",
   ) or die "$!";
  -$ase->run();
  +
  +#   ASE runtime handling
  +if ($ase->responsible()) {
  +    $ase->action();
  +    print $ase->response();
  +    goto cleanup;
  +}
   
   #   establish HTML output object
   my $html = new String::Divert or die "$!";
  @@ -100,7 +106,7 @@
           $html .= sprintf(
               "Logged in as &lt;<a href=\"%s\">%s</a>&gt; [<a href=\"%s\">Logout</a>]\n",
               $ase->url(-action => "info", -mode_during => "login", -mode_after => "page1"),
  -            $ase->login(),
  +            $ase->attr("client-login-name"),
               $ase->url(-action => "logout", -mode_during => "login", -mode_after => $mode)
           );
       }
  @@ -174,7 +180,14 @@
   $|++;
   print $header . $body;
   
  +##
  +##  CLEANUP SEQUENCE
  +##
  +
  +cleanup:
  +
   #   destroy objects
  +#   (reversed construction order!)
   undef $ase;
   undef $session;
   undef $cgi;
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov 23 16:35:30 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 9083E752923; Wed, 23 Nov 2005 16:35:30 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.pm
Message-Id: <20051123153530.9083E752923@mail.ossp.org>
Date: Wed, 23 Nov 2005 16:35:30 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Nov-2005 16:35:30
  Branch: HEAD                             Handle: 2005112315353000

  Modified files:
    ossp-pkg/ase            ase.pm

  Log:
    use 'use base' abstraction

  Summary:
    Revision    Changes     Path
    1.11        +1  -2      ossp-pkg/ase/ase.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.pm
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 ase.pm
  --- ossp-pkg/ase/ase.pm	23 Nov 2005 14:28:00 -0000	1.10
  +++ ossp-pkg/ase/ase.pm	23 Nov 2005 15:35:30 -0000	1.11
  @@ -29,11 +29,10 @@
   use 5.008;
   use strict;
   use warnings;
  -use Exporter;
  +use base 'Exporter';
   
   our $VERSION = do { my @v = ('0.0.1' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
   
  -our @ISA       = qw(Exporter);
   our @EXPORT_OK = ();
   our @EXPORT    = ();
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov 23 17:28:53 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id D0A3675292A; Wed, 23 Nov 2005 17:28:52 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi ase.cgi.enroll.pl ase.cgi.main.pl as...
Message-Id: <20051123162852.D0A3675292A@mail.ossp.org>
Date: Wed, 23 Nov 2005 17:28:52 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Nov-2005 17:28:52
  Branch: HEAD                             Handle: 2005112316285200

  Modified files:
    ossp-pkg/ase            ase.cgi ase.cgi.enroll.pl ase.cgi.main.pl
                            ase.cgi.profile.pl ase.cgi.scode.pl
                            ase.cgi.util.pl

  Log:
    speed up processing of OSSP ase server by performing a lazy/deferred
    loading of half of the extension modules

  Summary:
    Revision    Changes     Path
    1.10        +18 -17     ossp-pkg/ase/ase.cgi
    1.5         +2  -0      ossp-pkg/ase/ase.cgi.enroll.pl
    1.18        +2  -2      ossp-pkg/ase/ase.cgi.main.pl
    1.4         +1  -0      ossp-pkg/ase/ase.cgi.profile.pl
    1.5         +3  -0      ossp-pkg/ase/ase.cgi.scode.pl
    1.8         +30 -1      ossp-pkg/ase/ase.cgi.util.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 ase.cgi
  --- ossp-pkg/ase/ase.cgi	21 Nov 2005 09:07:37 -0000	1.9
  +++ ossp-pkg/ase/ase.cgi	23 Nov 2005 16:28:52 -0000	1.10
  @@ -41,35 +41,36 @@
       -path_datdir => '.',
   };
   
  -#   language extensions
  -use Socket;                             # from OpenPKG "perl"
  -use IO::All;                            # from OpenPKG "perl-sys"
  -use OSSP::uuid;                         # from OpenPKG "uuid" (with_perl=yes)
  -use GD;                                 # from OpenPKG "perl-gd"
  +#   language extensions (loaded always)
  +use Class::Autouse qw(:nostat);         # from OpenPKG "perl-util"
   use DBI;                                # from OpenPKG "perl-dbi"
   use DBD::SQLite;                        # from OpenPKG "perl-dbi" (with_dbd_sqlite=yes)
  -use Data::Dumper;                       # from OpenPKG "perl"
   use Storable;                           # from OpenPKG "perl"
   use String::Divert;                     # from OpenPKG "perl-util"
  -use Locale::Language;                   # from OpenPKG "perl-locale"
  -use Locale::Country;                    # from OpenPKG "perl-locale"
  -use Crypt::UnixCrypt;                   # from OpenPKG "perl-crypto"
  -use Crypt::PasswdMD5;                   # from OpenPKG "perl-crypto"
  -use Digest::MD5;                        # from OpenPKG "perl-crypto"
  -use Digest::SHA1;                       # from OpenPKG "perl-crypto"
  -use Mail::Sendmail;                     # from OpenPKG "perl-mail"
   use HTML::Entities qw();                # from OpenPKG "perl-www"
   use URI;                                # from OpenPKG "perl-www"
  -use URI::Escape;                        # from OpenPKG "perl-www"
   use CGI;                                # from OpenPKG "perl-www"
   use CGI::Cookie;                        # from OpenPKG "perl-www"
   use CGI::Application;                   # from OpenPKG "perl-www"
   use CGI::Application::Plugin::Forward;  # from OpenPKG "perl-www"
   use CGI::Session;                       # from OpenPKG "perl-www"
  -use CGI::FormBuilder;                   # from OpenPKG "perl-www"
   use CGI::GuruMeditation ("OSSP ase");   # from OpenPKG "perl-www"
  -use LWP::UserAgent;                     # from OpenPKG "perl-www"
  -use LWP::Simple qw();                   # from OpenPKG "perl-www"
  +
  +#   language extensions (loaded on-demand only)
  +sub autouse { Class::Autouse->autouse($_) foreach (@_); }
  +autouse(qw(Socket));                    # from OpenPKG "perl"
  +autouse(qw(Data::Dumper));              # from OpenPKG "perl"
  +autouse(qw(OSSP::uuid));                # from OpenPKG "uuid" (with_perl=yes)
  +autouse(qw(IO::All));                   # from OpenPKG "perl-sys"
  +autouse(qw(GD GD::Image));              # from OpenPKG "perl-gd"
  +autouse(qw(Crypt::UnixCrypt));          # from OpenPKG "perl-crypto"
  +autouse(qw(Crypt::PasswdMD5));          # from OpenPKG "perl-crypto"
  +autouse(qw(Digest::MD5));               # from OpenPKG "perl-crypto"
  +autouse(qw(Digest::SHA1));              # from OpenPKG "perl-crypto"
  +autouse(qw(Mail::Sendmail));            # from OpenPKG "perl-mail"
  +autouse(qw(URI::Escape));               # from OpenPKG "perl-www"
  +autouse(qw(LWP::UserAgent));            # from OpenPKG "perl-www"
  +autouse(qw(CGI::FormBuilder));          # from OpenPKG "perl-www"
   
   #   application parts
   my $dir = $cfg->{-path_libdir};
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	10 Nov 2005 07:54:43 -0000	1.4
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	23 Nov 2005 16:28:52 -0000	1.5
  @@ -249,6 +249,7 @@
       }
   
       #   generate membership UUID
  +    $self->use("OSSP::uuid");
       my $uuid = new OSSP::uuid;
       $uuid->make("v1");
       my $me_uuid = $uuid->export("str");
  @@ -275,6 +276,7 @@
       ) or die $dbi->errstr();
   
       #   send activation URL to Email address
  +    $self->use("Mail::Sendmail");
       my $url = $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "?mode=activation;uuid=$me_uuid";
       my $mail =
           "Thank you for your interest in joining the OpenPKG Foundation.\n" .
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	23 Nov 2005 14:28:00 -0000	1.17
  +++ ossp-pkg/ase/ase.cgi.main.pl	23 Nov 2005 16:28:52 -0000	1.18
  @@ -113,9 +113,9 @@
           $html->folder('{#%s#}', '\{#([a-zA-Z_][a-zA-Z0-9_-]*)#\}');
   
           #   provide outer HTML canvas
  -        my $canvas_url       = "ase.html"; # $session->param("canvas_url")       || $cgi->param("canvas_url")       || "ase.html";
  +        my $canvas_url       = $session->param("canvas_url")       || $cgi->param("canvas_url")       || "ase.html";
           my $canvas_mark_head = $session->param("canvas_mark_head") || $cgi->param("canvas_mark_head") || "<!-- ASE: HEAD -->";
  -        my $canvas_mark_body = $session->param("canvas_mark_head") || $cgi->param("canvas_mark_head") || "<!-- ASE: BODY -->";
  +        my $canvas_mark_body = $session->param("canvas_mark_body") || $cgi->param("canvas_mark_body") || "<!-- ASE: BODY -->";
           my ($canvas_type, undef, $canvas) = $self->fetch($canvas_url);
           die "invalid content type \"$canvas_type\"" if ($canvas_type ne 'text/html');
           $canvas = $self->adjust_url($canvas_url, $canvas_type, $canvas);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.profile.pl
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ase.cgi.profile.pl
  --- ossp-pkg/ase/ase.cgi.profile.pl	10 Nov 2005 07:54:43 -0000	1.3
  +++ ossp-pkg/ase/ase.cgi.profile.pl	23 Nov 2005 16:28:52 -0000	1.4
  @@ -191,6 +191,7 @@
       $html .= "</table>\n";
   
       #   render member edit form
  +    $self->use("CGI::FormBuilder");
       my $form = new CGI::FormBuilder (
           "fields"   => [qw(me_sn me_uuid me_username me_address me_membership_status me_membership_prop me_gender)],
           "method"   => "POST",
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.scode.pl
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ase.cgi.scode.pl
  --- ossp-pkg/ase/ase.cgi.scode.pl	10 Nov 2005 07:54:43 -0000	1.4
  +++ ossp-pkg/ase/ase.cgi.scode.pl	23 Nov 2005 16:28:52 -0000	1.5
  @@ -42,6 +42,7 @@
       my $dbi = $self->param(-dbi);
   
       #   generate new UUID
  +    $self->use("OSSP::uuid");
       my $uuid = new OSSP::uuid;
       $uuid->make("v1");
       my $scode_uuid = $uuid->export("str");
  @@ -82,6 +83,8 @@
       my $scode_num = $rec->{'sc_number'};
   
       #   render Security Code Number as a PNG image
  +    $self->use("GD");
  +    $self->use("GD::Image");
       my $im_length = (length($scode_num)+1)*10;
       my $im = new GD::Image($im_length, 25);
       my $c_bg  = $im->colorAllocate(&hex2rgb("ffffff"));
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.util.pl
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 ase.cgi.util.pl
  --- ossp-pkg/ase/ase.cgi.util.pl	23 Nov 2005 14:28:00 -0000	1.7
  +++ ossp-pkg/ase/ase.cgi.util.pl	23 Nov 2005 16:28:52 -0000	1.8
  @@ -29,9 +29,28 @@
   use strict;
   use warnings;
   
  +#   helper function for loading an extension module on demand
  +sub use {
  +    my ($self, @modules) = @_;
  +
  +    #   load module
  +    foreach my $module (@modules) {
  +        Class::Autouse->load($module);
  +    }
  +    return;
  +}
  +
  +#   helper function for dumping a data structure recursively
  +sub dump {
  +    my ($self, @refs) = @_;
  +    $self->use("Data::Dumper");
  +    return Data::Dumper->Dump([@refs]);
  +}
  +
   #   helper function for determining self-referencing URL
   sub url {
       my ($self, %attr) = @_;
  +    $self->use("URI::Escape");
       my $url = $self->param(-cgi)->url(-relative => 1);
       $url = "." if ($url eq '');
       my $first = 1;
  @@ -61,6 +80,9 @@
       if ($url =~ m/^https?:\/\/.+$/) { 
           die "invalid URL \"$url\"" if ($url !~ m/^https?:\/\/\S+\.(?:ossp\.org|openpkg\.(?:org|com|net))/); # FIXME: SECURITY enough?
           #   FIXME: CACHING?! Use HTTP Headers!
  +        $self->use("Socket");
  +        $self->use("Net::HTTP");
  +        $self->use("LWP::UserAgent");
           my $ua = new LWP::UserAgent;
           $ua->agent($cfg->{-prog_name}."/".$cfg->{-prog_vers});
           $ua->timeout(20);
  @@ -68,7 +90,7 @@
           $ua->max_redirect(2);
           $ua->protocols_allowed([ 'http', 'https']);
           my $response = $ua->get($url);
  -        die "unable to load URL \"$url\"" if (not $response->is_success);
  +        die "unable to load URL \"$url\": " . $response->error_as_HTML if (not $response->is_success);
           $type    = $response->content_type;
           $expires = $response->expires;
           $content = $response->content;
  @@ -77,6 +99,7 @@
           die "invalid URL \"$url\"" if ($url =~ m|\.\.| or $url =~ m|^/|); # FIXME: SECURITY enough?
           my $filename = $cfg->{-path_datdir}."/".$url;
           die "file not found" if (not -f $filename);
  +        $self->use("IO::All");
           $content < IO::All::io($filename)
               or die "unable to load file \"$filename\"";
           if    ($url =~ m|\.html$|)  { $type = "text/html";  $expires = "+1m"; }
  @@ -134,6 +157,7 @@
       my $cgi = $self->param(-cgi);
       my $hostname = $cgi->remote_host();
       if ($hostname =~ m/^(\d+\.){3}\d+$/s) {
  +        $self->use("Socket");
           my $iaddr = Socket::inet_aton($hostname);
           my $name = gethostbyaddr($iaddr, &Socket::AF_INET); 
           $hostname = $name if (defined($name) and $name ne '');
  @@ -149,6 +173,11 @@
       my ($self, $plaintext) = @_;
       my $pw = {};
   
  +    $self->use("Crypt::UnixCrypt");
  +    $self->use("Crypt::PasswdMD5");
  +    $self->use("Digest::MD5");
  +    $self->use("Digest::SHA1");
  +
       #   Plain Text
       $pw->{-plaintext} = $plaintext;
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov 23 18:56:42 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 677C875292A; Wed, 23 Nov 2005 18:56:42 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO ase.cgi.main.pl ase.cgi.util.pl ase.sql...
Message-Id: <20051123175642.677C875292A@mail.ossp.org>
Date: Wed, 23 Nov 2005 18:56:42 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Nov-2005 18:56:42
  Branch: HEAD                             Handle: 2005112317564100

  Modified files:
    ossp-pkg/ase            TODO ase.cgi.main.pl ase.cgi.util.pl ase.sql
                            sample.cgi

  Log:
    add caching of externally loaded resources in order to speed up OSSP
    ase server part again

  Summary:
    Revision    Changes     Path
    1.11        +0  -2      ossp-pkg/ase/TODO
    1.19        +2  -0      ossp-pkg/ase/ase.cgi.main.pl
    1.9         +54 -12     ossp-pkg/ase/ase.cgi.util.pl
    1.4         +13 -0      ossp-pkg/ase/ase.sql
    1.11        +6  -1      ossp-pkg/ase/sample.cgi
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 TODO
  --- ossp-pkg/ase/TODO	23 Nov 2005 14:28:00 -0000	1.10
  +++ ossp-pkg/ase/TODO	23 Nov 2005 17:56:41 -0000	1.11
  @@ -1,13 +1,11 @@
   
   TODO:
  -- ase.pm: caching? adjust? valid params?
   - info RPC page
   - remove or disable dead code in ASE (profile)
   - remove or finish missing code in ASE (recovery)
   
   CANDO:
   - package ASE as OpenPKG package
  -- speed optimization (caching)
   - add OSSP::cfg based ase.cfg for external file referencing & embedded texts & mailing
   - add support to ase CLI for initial creation of database (use in OpenPKG ase.spec:%post)
   - add INSTALL document which shows how to link with webserver
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	23 Nov 2005 16:28:52 -0000	1.18
  +++ ossp-pkg/ase/ase.cgi.main.pl	23 Nov 2005 17:56:41 -0000	1.19
  @@ -198,6 +198,8 @@
               $html->overload(0);
               $html->undivert(0);
               ${$htmlref} = $html->string();
  +            $self->header_add(-expires => "+0s");
  +            $self->header_add(-Cache_Control => "max-age=0");
           }
       }
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.util.pl
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 ase.cgi.util.pl
  --- ossp-pkg/ase/ase.cgi.util.pl	23 Nov 2005 16:28:52 -0000	1.8
  +++ ossp-pkg/ase/ase.cgi.util.pl	23 Nov 2005 17:56:41 -0000	1.9
  @@ -40,6 +40,44 @@
       return;
   }
   
  +#   helper function for caching values
  +sub cache ($$;$@) {
  +    my ($self, $key, $expire, @data) = @_;
  +    my $dbi = $self->param(-dbi);
  +
  +    if (@_ >= 4) {
  +        #   store
  +        my $data = [ @data ];
  +        my $blob = Storable::freeze($data);
  +        return if ($expire <= 0);
  +        $expire += time();
  +        my $sth = $dbi->prepare_cached(
  +            "DELETE FROM ase_cache WHERE ca_id = ? OR ca_expire <= ?;"
  +        ) or die $dbi->errstr();
  +        $sth->execute($key, time());
  +        $sth = $dbi->prepare_cached(
  +            "INSERT INTO ase_cache (ca_id, ca_value, ca_expire) VALUES (?, ?, ?);"
  +        ) or die $dbi->errstr();
  +        $sth->bind_param(1, $key);
  +        $sth->bind_param(2, $blob, DBI::SQL_BLOB);
  +        $sth->bind_param(3, $expire);
  +        $sth->execute() or die $dbi->errstr();
  +        return;
  +    }
  +    else {
  +        #   retrieve
  +        my $sth = $dbi->prepare_cached(
  +            "SELECT ca_value FROM ase_cache WHERE ca_id = ? AND ca_expire > ?;"
  +        ) or die $dbi->errstr();
  +        $sth->execute($key, time()) or die $dbi->errstr();
  +        my $blob = $sth->fetchrow_array();
  +        return undef if (not defined($blob));
  +        my $data = Storable::thaw($blob);
  +        return undef if (not defined($data) or not ref($data));
  +        return wantarray ? @{$data} : $data->[0];
  +    }
  +}
  +
   #   helper function for dumping a data structure recursively
   sub dump {
       my ($self, @refs) = @_;
  @@ -79,18 +117,22 @@
       #   load external file content 
       if ($url =~ m/^https?:\/\/.+$/) { 
           die "invalid URL \"$url\"" if ($url !~ m/^https?:\/\/\S+\.(?:ossp\.org|openpkg\.(?:org|com|net))/); # FIXME: SECURITY enough?
  -        #   FIXME: CACHING?! Use HTTP Headers!
  -        $self->use("Socket");
  -        $self->use("Net::HTTP");
  -        $self->use("LWP::UserAgent");
  -        my $ua = new LWP::UserAgent;
  -        $ua->agent($cfg->{-prog_name}."/".$cfg->{-prog_vers});
  -        $ua->timeout(20);
  -        $ua->max_size(1*1024*1024);
  -        $ua->max_redirect(2);
  -        $ua->protocols_allowed([ 'http', 'https']);
  -        my $response = $ua->get($url);
  -        die "unable to load URL \"$url\": " . $response->error_as_HTML if (not $response->is_success);
  +        $self->use("HTTP::Response");
  +        my $response;
  +        if (not defined($response = $self->cache($url))) {
  +            $self->use("Socket");
  +            $self->use("Net::HTTP");
  +            $self->use("LWP::UserAgent");
  +            my $ua = new LWP::UserAgent;
  +            $ua->agent($cfg->{-prog_name}."/".$cfg->{-prog_vers});
  +            $ua->timeout(20);
  +            $ua->max_size(1*1024*1024);
  +            $ua->max_redirect(2);
  +            $ua->protocols_allowed([ 'http', 'https']);
  +            $response = $ua->get($url);
  +            die "unable to load URL \"$url\"" if (not $response->is_success);
  +            $self->cache($url, $response->fresh_until() - time(), $response);
  +        }
           $type    = $response->content_type;
           $expires = $response->expires;
           $content = $response->content;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.sql
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ase.sql
  --- ossp-pkg/ase/ase.sql	22 Nov 2005 10:15:37 -0000	1.3
  +++ ossp-pkg/ase/ase.sql	23 Nov 2005 17:56:41 -0000	1.4
  @@ -277,3 +277,16 @@
                                  -- [XXXXXXX...]
   );
   
  +-- Temporary User Interface Sessions
  +CREATE TABLE ase_cache (
  +    ca_id                      TEXT NOT NULL PRIMARY KEY,
  +                               -- Cache Identifier
  +                               -- [XXXXXXX...]
  +    ca_value                   BLOB NOT NULL,
  +                               -- Cache Data
  +                               -- [XXXXXXX...]
  +    ca_expire                  INTEGER NOT NULL
  +                               -- Cache Expire Time YYYYMMDDHHMMSS
  +                               -- [20050225000000]
  +);
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/sample.cgi
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 sample.cgi
  --- ossp-pkg/ase/sample.cgi	23 Nov 2005 14:28:01 -0000	1.10
  +++ ossp-pkg/ase/sample.cgi	23 Nov 2005 17:56:41 -0000	1.11
  @@ -169,11 +169,16 @@
       -path    => $cgi->url(-absolute => 1)
   )) if ($session->is_new());
   
  +#   determine HTTP expiration time
  +my $expires = '+0s';
  +$expires = '+2m' if ($mode eq "login");
  +
   #   determine HTTP response header
   my $header = $cgi->header(
       -type           => 'text/html',
       -Content_length => length($body),
  -    -cookie         => $cookie
  +    -cookie         => $cookie,
  +    -expires        => $expires,
   );
   
   #   send response
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov 23 21:31:08 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 109E0752923; Wed, 23 Nov 2005 21:31:06 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi
Message-Id: <20051123203106.109E0752923@mail.ossp.org>
Date: Wed, 23 Nov 2005 21:31:06 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Nov-2005 21:31:06
  Branch: HEAD                             Handle: 2005112320310600

  Modified files:
    ossp-pkg/ase            ase.cgi

  Log:
    Socket cannot be lazy loaded

  Summary:
    Revision    Changes     Path
    1.11        +1  -1      ossp-pkg/ase/ase.cgi
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 ase.cgi
  --- ossp-pkg/ase/ase.cgi	23 Nov 2005 16:28:52 -0000	1.10
  +++ ossp-pkg/ase/ase.cgi	23 Nov 2005 20:31:06 -0000	1.11
  @@ -43,6 +43,7 @@
   
   #   language extensions (loaded always)
   use Class::Autouse qw(:nostat);         # from OpenPKG "perl-util"
  +use Socket;                             # from OpenPKG "perl"
   use DBI;                                # from OpenPKG "perl-dbi"
   use DBD::SQLite;                        # from OpenPKG "perl-dbi" (with_dbd_sqlite=yes)
   use Storable;                           # from OpenPKG "perl"
  @@ -58,7 +59,6 @@
   
   #   language extensions (loaded on-demand only)
   sub autouse { Class::Autouse->autouse($_) foreach (@_); }
  -autouse(qw(Socket));                    # from OpenPKG "perl"
   autouse(qw(Data::Dumper));              # from OpenPKG "perl"
   autouse(qw(OSSP::uuid));                # from OpenPKG "uuid" (with_perl=yes)
   autouse(qw(IO::All));                   # from OpenPKG "perl-sys"
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov 23 21:44:00 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id F26E375292A; Wed, 23 Nov 2005 21:43:59 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO
Message-Id: <20051123204359.F26E375292A@mail.ossp.org>
Date: Wed, 23 Nov 2005 21:43:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Nov-2005 21:43:59
  Branch: HEAD                             Handle: 2005112320435900

  Modified files:
    ossp-pkg/ase            TODO

  Log:
    remember what we have to do

  Summary:
    Revision    Changes     Path
    1.12        +17 -12     ossp-pkg/ase/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 TODO
  --- ossp-pkg/ase/TODO	23 Nov 2005 17:56:41 -0000	1.11
  +++ ossp-pkg/ase/TODO	23 Nov 2005 20:43:59 -0000	1.12
  @@ -11,16 +11,21 @@
   - add INSTALL document which shows how to link with webserver
   - CGI::GuruMeditation and CGI::Carp do not work under Apache/mod_perl
   
  -User Attributes:
  -- uuid internal
  -- email verified
  -- password 
  -- telefonnummer
  -- business area
  -- company name
  -- snail mail address
  -- country code
  -- number of platforms
  -- number of servers
  -- number of instances
  +1. registry.cgi -> registry.openpkg.org/registry
  +2. ASE disable/remove dead parts
  +3. addon attributes
  +   User Attributes:
  +   - uuid internal
  +   - email verified
  +   - password 
  +   - telefonnummer
  +   - business area
  +   - company name
  +   - snail mail address
  +   - country code
  +   - number of platforms
  +   - number of servers
  +   - number of instances
  +4. styling
  +5. ProFTPd activate
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov 23 21:45:24 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 9A50075292A; Wed, 23 Nov 2005 21:45:24 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO
Message-Id: <20051123204524.9A50075292A@mail.ossp.org>
Date: Wed, 23 Nov 2005 21:45:24 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Nov-2005 21:45:24
  Branch: HEAD                             Handle: 2005112320452400

  Modified files:
    ossp-pkg/ase            TODO

  Log:
    review has to be done, too

  Summary:
    Revision    Changes     Path
    1.13        +2  -1      ossp-pkg/ase/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 TODO
  --- ossp-pkg/ase/TODO	23 Nov 2005 20:43:59 -0000	1.12
  +++ ossp-pkg/ase/TODO	23 Nov 2005 20:45:24 -0000	1.13
  @@ -27,5 +27,6 @@
      - number of servers
      - number of instances
   4. styling
  -5. ProFTPd activate
  +5. "openpkg register review"
  +6. ProFTPd activate
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Nov 24 21:32:05 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 95C5275292D; Thu, 24 Nov 2005 21:32:04 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.enroll.pl ase.cgi.util.pl
Message-Id: <20051124203204.95C5275292D@mail.ossp.org>
Date: Thu, 24 Nov 2005 21:32:04 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Nov-2005 21:32:04
  Branch: HEAD                             Handle: 2005112420320301

  Modified files:
    ossp-pkg/ase            ase.cgi.enroll.pl ase.cgi.util.pl

  Log:
    flush

  Summary:
    Revision    Changes     Path
    1.6         +1  -1      ossp-pkg/ase/ase.cgi.enroll.pl
    1.10        +0  -1      ossp-pkg/ase/ase.cgi.util.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	23 Nov 2005 16:28:52 -0000	1.5
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	24 Nov 2005 20:32:04 -0000	1.6
  @@ -292,7 +292,7 @@
           "\n";
       $Mail::Sendmail::mailcfg{"smtp"} = [qw(localhost mail)];
       Mail::Sendmail::sendmail(
  -        To      => "openpkg\@openpkg.org\n", #$address,
  +        To      => $address,
           From    => "OpenPKG Foundation Affiliation Service Environment <ase\@localhost>\n", # FIXME
           Subject => "OpenPKG Foundation Membership Enrollment\n",
           Message => $mail,
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.util.pl
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 ase.cgi.util.pl
  --- ossp-pkg/ase/ase.cgi.util.pl	23 Nov 2005 17:56:41 -0000	1.9
  +++ ossp-pkg/ase/ase.cgi.util.pl	24 Nov 2005 20:32:03 -0000	1.10
  @@ -199,7 +199,6 @@
       my $cgi = $self->param(-cgi);
       my $hostname = $cgi->remote_host();
       if ($hostname =~ m/^(\d+\.){3}\d+$/s) {
  -        $self->use("Socket");
           my $iaddr = Socket::inet_aton($hostname);
           my $name = gethostbyaddr($iaddr, &Socket::AF_INET); 
           $hostname = $name if (defined($name) and $name ne '');
  @@ .

From ossp-cvs-owner@ossp.org  Thu Nov 24 21:32:33 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 475A4752926; Thu, 24 Nov 2005 21:32:33 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.login.pl
Message-Id: <20051124203233.475A4752926@mail.ossp.org>
Date: Thu, 24 Nov 2005 21:32:33 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Nov-2005 21:32:33
  Branch: HEAD                             Handle: 2005112420323200

  Modified files:
    ossp-pkg/ase            ase.cgi.login.pl

  Log:
    flush

  Summary:
    Revision    Changes     Path
    1.8         +31 -29     ossp-pkg/ase/ase.cgi.login.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	21 Nov 2005 21:29:16 -0000	1.7
  +++ ossp-pkg/ase/ase.cgi.login.pl	24 Nov 2005 20:32:32 -0000	1.8
  @@ -55,13 +55,10 @@
   
       #   generate header text
       $html .=
  -        "Welcome to the OpenPKG Foundation Affiliation Service Environment!<p/>\n" .
  -        "Please login with either your Username (members) or\n" .
  -        "with your Email address (fellows).\n" .
  -        "To join the OpenPKG Foundation as a fellow or even member,\n" .
  -        "use \"Account Enrollment\", please.\n".
  -        "If you forgot your OpenPKG Foundation login and/or password,\n" .
  -        "use \"Account Recovery\", please.\n";
  +        "Welcome to the Affiliation Service Environment!<p/>\n" .
  +        "Please login with your Email address.\n" .
  +        "If you have still no account use \"Account Enrollment\", please.\n".
  +        "If you forgot your password, use \"Account Recovery\", please.\n";
   
       #   generate the inner canvas
       $html .=
  @@ -98,44 +95,49 @@
       #   generate the input fields
       $html >> "field-login";
       $html .= $cgi->textfield(
  -        -id      => 'field_login',
  -        -class   => 'field',
  -        -name    => 'login',
  -        -default => '',
  -        -size    => 30,
  +        -id       => 'field_login',
  +        -class    => 'field',
  +        -name     => 'login',
  +        -default  => '',
  +        -tabindex => 1,
  +        -size     => 30,
       );
       $html << 1;
       $html >> "field-password";
       $html .= $cgi->password_field(
  -        -class   => 'field',
  -        -id      => 'field_password',
  -        -name    => 'password',
  -        -default => '',
  -        -size    => 30,
  +        -class    => 'field',
  +        -id       => 'field_password',
  +        -name     => 'password',
  +        -default  => '',
  +        -tabindex => 2,
  +        -size     => 30,
       );
       $html << 1;
       $html >> "button-enrollment";
       $html .= $cgi->submit(
  -        -class   => 'button',
  -        -id      => 'button_enrollment',
  -        -name    => 'button.enrollment',
  -        -value   => 'Account Enrollment',
  +        -class    => 'button',
  +        -id       => 'button_enrollment',
  +        -name     => 'button.enrollment',
  +        -value    => 'Account Enrollment',
  +        -tabindex => 4,
       );
       $html << 1;
       $html >> "button-recovery";
       $html .= $cgi->submit(
  -        -class   => 'button',
  -        -id      => 'button_recovery',
  -        -name    => 'button.recovery',
  -        -value   => 'Account Recovery',
  +        -class    => 'button',
  +        -id       => 'button_recovery',
  +        -name     => 'button.recovery',
  +        -value    => 'Account Recovery',
  +        -tabindex => 5,
       );
       $html << 1;
       $html >> "button-login";
       $html .= $cgi->submit(
  -        -class   => 'button',
  -        -id      => 'button_login',
  -        -name    => 'button.login',
  -        -value   => 'Login',
  +        -class    => 'button',
  +        -id       => 'button_login',
  +        -name     => 'button.login',
  +        -tabindex => 3,
  +        -value    => 'Login',
       );
       $html << 1;
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Nov 25 21:21:47 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 614B0752938; Fri, 25 Nov 2005 21:21:47 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.util.pl
Message-Id: <20051125202147.614B0752938@mail.ossp.org>
Date: Fri, 25 Nov 2005 21:21:47 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Nov-2005 21:21:47
  Branch: HEAD                             Handle: 2005112520214600

  Modified files:
    ossp-pkg/ase            ase.cgi.util.pl

  Log:
    form actions have to be direct URLs

  Summary:
    Revision    Changes     Path
    1.11        +1  -1      ossp-pkg/ase/ase.cgi.util.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.util.pl
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 ase.cgi.util.pl
  --- ossp-pkg/ase/ase.cgi.util.pl	24 Nov 2005 20:32:03 -0000	1.10
  +++ ossp-pkg/ase/ase.cgi.util.pl	25 Nov 2005 20:21:46 -0000	1.11
  @@ -175,7 +175,7 @@
       elsif ($type eq 'text/html') {
           $content =~ s/(<link\s+[^>]*(?:href)=(['"]))([^\2]+?)(\2)/$1.&$adjust_url($self, 0, $base_url, $3).$4/sgei;
           $content =~ s/(<(?:img|script)\s+[^>]*(?:src)=(['"]))([^\2]+?)(\2)/$1.&$adjust_url($self, 0, $base_url, $3).$4/sgei;
  -        $content =~ s/(<form\s+[^>]*(?:action)=(['"]))([^\2]+?)(\2)/$1.&$adjust_url($self, 0, $base_url, $3).$4/sgei;
  +        $content =~ s/(<form\s+[^>]*(?:action)=(['"]))([^\2]+?)(\2)/$1.&$adjust_url($self, 1, $base_url, $3).$4/sgei;
           $content =~ s/(<a\s+[^>]*(?:href)=(['"]))([^\2]+?)(\2)/$1.&$adjust_url($self, 1, $base_url, $3).$4/sgei;
       }
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Nov 26 13:42:59 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 12C09752931; Sat, 26 Nov 2005 13:42:59 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.pm
Message-Id: <20051126124259.12C09752931@mail.ossp.org>
Date: Sat, 26 Nov 2005 13:42:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Nov-2005 13:42:59
  Branch: HEAD                             Handle: 2005112612425800

  Modified files:
    ossp-pkg/ase            ase.pm

  Log:
    apply the usual hack/fix for empty relative URLs in case mod_rewrite
    magic is active

  Summary:
    Revision    Changes     Path
    1.12        +1  -0      ossp-pkg/ase/ase.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.pm
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 ase.pm
  --- ossp-pkg/ase/ase.pm	23 Nov 2005 15:35:30 -0000	1.11
  +++ ossp-pkg/ase/ase.pm	26 Nov 2005 12:42:58 -0000	1.12
  @@ -350,6 +350,7 @@
   
       #   create self-referencing URL
       my $base = $self->{-cgi}->url(-relative => 1);
  +    $base = '.' if ($base eq '');
       my $mode = $self->{-cgi}->param($self->{-mode}) || "";
       my $url = sprintf(
           "%s?ase-action=%s;ase-mode-during=%s;ase-mode-after=%s",
  @@ .

From ossp-cvs-owner@ossp.org  Sat Nov 26 14:05:08 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id DCAC4752935; Sat, 26 Nov 2005 14:05:07 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.pm
Message-Id: <20051126130507.DCAC4752935@mail.ossp.org>
Date: Sat, 26 Nov 2005 14:05:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Nov-2005 14:05:07
  Branch: HEAD                             Handle: 2005112613050700

  Modified files:
    ossp-pkg/ase            ase.pm

  Log:
    we have to use url_param() to allow applications to use POST instead
    of GET

  Summary:
    Revision    Changes     Path
    1.13        +9  -7      ossp-pkg/ase/ase.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.pm
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 ase.pm
  --- ossp-pkg/ase/ase.pm	26 Nov 2005 12:42:58 -0000	1.12
  +++ ossp-pkg/ase/ase.pm	26 Nov 2005 13:05:07 -0000	1.13
  @@ -160,7 +160,7 @@
   sub responsible ($) {
       my ($self) = @_;
   
  -    my $action = $self->{-cgi}->param("ase-action") || "";
  +    my $action = $self->{-cgi}->url_param("ase-action") || "";
       return $action =~ m/^(login|logout|info|comeback)$/;
   }
   
  @@ -172,14 +172,14 @@
       $self->_debug("action: client-sid=%s server-sid=%s",
           $self->{-session}->id(), $self->attr("session-id") || "none");
   
  -    my $action = $self->{-cgi}->param("ase-action") || "";
  +    my $action = $self->{-cgi}->url_param("ase-action") || "";
       if ($action =~ m/^(login|logout|info)$/) {
           #
           #   request ASE actions
           #
  -        my $mode_during = $self->{-cgi}->param("ase-mode-during")
  +        my $mode_during = $self->{-cgi}->url_param("ase-mode-during")
               or { $self->error("CGI parameter \"ase-mode-during\" missing or empty"), return 0 };
  -        my $mode_after  = $self->{-cgi}->param("ase-mode-after")
  +        my $mode_after  = $self->{-cgi}->url_param("ase-mode-after")
               or { $self->error("CGI parameter \"ase-mode-after\" missing or empty"), return 0 };
   
           #   debugging
  @@ -213,9 +213,9 @@
           #
           #   respond to ASE actions
           #
  -        my $action_old = $self->{-cgi}->param("ase-action-old")
  +        my $action_old = $self->{-cgi}->url_param("ase-action-old")
               or { $self->error("CGI parameter \"ase-action-old\" missing or empty"), return 0 };
  -        my $sid = $self->{-cgi}->param("ase-sid")
  +        my $sid = $self->{-cgi}->url_param("ase-sid")
               or { $self->error("CGI parameter \"ase-sid\" missing or empty"), return 0 };
   
           $self->_debug("action: action=%s action-old=%s sid=%s", $action, $action_old, $sid);
  @@ -351,7 +351,9 @@
       #   create self-referencing URL
       my $base = $self->{-cgi}->url(-relative => 1);
       $base = '.' if ($base eq '');
  -    my $mode = $self->{-cgi}->param($self->{-mode}) || "";
  +    my $mode =    $self->{-cgi}->url_param($self->{-mode})
  +               || $self->{-cgi}->param($self->{-mode})
  +               || "";
       my $url = sprintf(
           "%s?ase-action=%s;ase-mode-during=%s;ase-mode-after=%s",
           $base, $args{-action},
  @@ .

From ossp-cvs-owner@ossp.org  Sun Nov 27 20:28:24 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B5FD575292D; Sun, 27 Nov 2005 20:28:24 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO ase.cgi ase.cgi.recover.pl
Message-Id: <20051127192824.B5FD575292D@mail.ossp.org>
Date: Sun, 27 Nov 2005 20:28:24 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   27-Nov-2005 20:28:24
  Branch: HEAD                             Handle: 2005112719282400

  Added files:
    ossp-pkg/ase            ase.cgi.recover.pl
  Modified files:
    ossp-pkg/ase            TODO ase.cgi

  Log:
    instead of producing an error on recovery, show a page

  Summary:
    Revision    Changes     Path
    1.14        +0  -1      ossp-pkg/ase/TODO
    1.12        +1  -0      ossp-pkg/ase/ase.cgi
    1.1         +56 -0      ossp-pkg/ase/ase.cgi.recover.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 TODO
  --- ossp-pkg/ase/TODO	23 Nov 2005 20:45:24 -0000	1.13
  +++ ossp-pkg/ase/TODO	27 Nov 2005 19:28:24 -0000	1.14
  @@ -11,7 +11,6 @@
   - add INSTALL document which shows how to link with webserver
   - CGI::GuruMeditation and CGI::Carp do not work under Apache/mod_perl
   
  -1. registry.cgi -> registry.openpkg.org/registry
   2. ASE disable/remove dead parts
   3. addon attributes
      User Attributes:
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 ase.cgi
  --- ossp-pkg/ase/ase.cgi	23 Nov 2005 20:31:06 -0000	1.11
  +++ ossp-pkg/ase/ase.cgi	27 Nov 2005 19:28:24 -0000	1.12
  @@ -82,6 +82,7 @@
   require "$dir/ase.cgi.login.pl";        # application workflow: login
   require "$dir/ase.cgi.logout.pl";       # application workflow: logout
   require "$dir/ase.cgi.enroll.pl";       # application workflow: enrollment
  +require "$dir/ase.cgi.recover.pl";      # application workflow: recovery
   require "$dir/ase.cgi.profile.pl";      # application workflow: profile
   
   #   main procedure
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.recover.pl
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ase.cgi.recover.pl
  --- /dev/null	2005-11-27 20:28:01 +0100
  +++ ase.cgi.recover.pl	2005-11-27 20:28:24 +0100
  @@ -0,0 +1,56 @@
  +##
  +##  OSSP ase -- Affiliation Service Environment
  +##  Copyright (c) 2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2005 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP ase, a service environment for managing
  +##  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  +##
  +##  This program is free software; you can redistribute it and/or modify
  +##  it under the terms of the GNU General Public License as published by
  +##  the Free Software Foundation; either version 2 of the License, or
  +##  (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this program; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  ase.cgi.recover.pl: recovery
  +##
  +
  +package OSSP::ase::server;
  +use base 'CGI::Application';
  +use strict;
  +use warnings;
  +
  +#   application run-time mode processing: "recovery"
  +sub mode_recovery_screen {
  +    my $self = shift;
  +    my $cgi  = $self->param(-cgi);
  +    my $html = $self->param(-html);
  +
  +    #   generate the outer canvas
  +    $html .= "<div class=\"boxed\">\n";
  +    $html .= "<span class=\"title\">Account Recovery</span>\n";
  +    $html .= "Sorry, Account Recovery still not implemented!";
  +    return;
  +}
  +
  +#   run-time mode screen action: "recovery"
  +sub mode_recovery_action {
  +    my $self = shift;
  +    my $cgi  = $self->param(-cgi);
  +    my $html = $self->param(-html);
  +    my $dbi  = $self->param(-dbi);
  +
  +    return;
  +}
  +
  +1;
  +
  @@ .

From ossp-cvs-owner@ossp.org  Sun Nov 27 20:29:08 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 04B5A752923; Sun, 27 Nov 2005 20:29:08 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO ase.cgi.profile.pl
Message-Id: <20051127192908.04B5A752923@mail.ossp.org>
Date: Sun, 27 Nov 2005 20:29:08 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   27-Nov-2005 20:29:08
  Branch: HEAD                             Handle: 2005112719290700

  Modified files:
    ossp-pkg/ase            TODO ase.cgi.profile.pl

  Log:
    disable unfinished parts

  Summary:
    Revision    Changes     Path
    1.15        +0  -1      ossp-pkg/ase/TODO
    1.5         +3  -3      ossp-pkg/ase/ase.cgi.profile.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 TODO
  --- ossp-pkg/ase/TODO	27 Nov 2005 19:28:24 -0000	1.14
  +++ ossp-pkg/ase/TODO	27 Nov 2005 19:29:07 -0000	1.15
  @@ -11,7 +11,6 @@
   - add INSTALL document which shows how to link with webserver
   - CGI::GuruMeditation and CGI::Carp do not work under Apache/mod_perl
   
  -2. ASE disable/remove dead parts
   3. addon attributes
      User Attributes:
      - uuid internal
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.profile.pl
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ase.cgi.profile.pl
  --- ossp-pkg/ase/ase.cgi.profile.pl	23 Nov 2005 16:28:52 -0000	1.4
  +++ ossp-pkg/ase/ase.cgi.profile.pl	27 Nov 2005 19:29:07 -0000	1.5
  @@ -38,9 +38,9 @@
       #   define the menu
       my $menu = [
           { -mode => "menu-overview", -name => "Overview" },
  -        { -mode => "menu-member",   -name => "Member"   },
  -        { -mode => "menu-account",  -name => "Account"  },
  -        { -mode => "menu-action",   -name => "Action"   },
  +        # { -mode => "menu-member",   -name => "Member"   }, FIXME
  +        # { -mode => "menu-account",  -name => "Account"  }, FIXME
  +        # { -mode => "menu-action",   -name => "Action"   }, FIXME
           { -mode => "menu-logout",   -name => "Logout"   },
       ];
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Nov 27 20:32:48 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 4E93A752923; Sun, 27 Nov 2005 20:32:48 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.enroll.pl ase.cgi.logout.pl
Message-Id: <20051127193248.4E93A752923@mail.ossp.org>
Date: Sun, 27 Nov 2005 20:32:48 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   27-Nov-2005 20:32:48
  Branch: HEAD                             Handle: 2005112719324800

  Modified files:
    ossp-pkg/ase            ase.cgi.enroll.pl ase.cgi.logout.pl

  Log:
    remove some texts to reduce confusions

  Summary:
    Revision    Changes     Path
    1.7         +8  -13     ossp-pkg/ase/ase.cgi.enroll.pl
    1.6         +2  -2      ossp-pkg/ase/ase.cgi.logout.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	24 Nov 2005 20:32:04 -0000	1.6
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	27 Nov 2005 19:32:48 -0000	1.7
  @@ -69,10 +69,8 @@
       #   generate description
       $html .=
           "<p>\n" .
  -        "Enroll here and join the OpenPKG Foundation e.V.!<p>\n" .
  -        "The enrollment as a <i>Fellow</i> of the OpenPKG Foundation e.V. is <i>free of charge</i>.<br>\n" .
  -        "Later you can even upgrade your status to a full <i>Member</i>\n" .
  -        "of the OpenPKG Foundation, too.<p>\n" .
  +        "Enroll here and join us<p>\n" .
  +        "The enrollment as a <i>Fellow</i> is <i>free of charge</i>.<br>\n" .
           "For successfully enrolling you have to specify a valid\n" .
           "\"Email Address\" and a \"Password\". Additionally, you have to\n" .
           "repeat the \"Security Code\" for proving you are human.\n" .
  @@ -279,22 +277,21 @@
       $self->use("Mail::Sendmail");
       my $url = $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "?mode=activation;uuid=$me_uuid";
       my $mail =
  -        "Thank you for your interest in joining the OpenPKG Foundation.\n" .
  -        "To finish your enrollment you have to activate your membership\n" .
  -        "account by going to the following URL until ".$self->datetime2str($t_expiry)." UTC:\n" .
  +        "Thank you for your registering to OpenPKG.\n" .
  +        "To finish your registration you have to activate your account\n" .
  +        "by going to the following URL until ".$self->datetime2str($t_expiry)." UTC:\n" .
           "\n" .
           "$url\n" .
           "\n" .
           "-- \n" .
           "Affiliation Service Environment\n" .
  -        "OpenPKG Foundation e.V.\n" .
           "" . $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "\n" .
           "\n";
       $Mail::Sendmail::mailcfg{"smtp"} = [qw(localhost mail)];
       Mail::Sendmail::sendmail(
           To      => $address,
  -        From    => "OpenPKG Foundation Affiliation Service Environment <ase\@localhost>\n", # FIXME
  -        Subject => "OpenPKG Foundation Membership Enrollment\n",
  +        From    => "OpenPKG Affiliation Service Environment <ase\@localhost>\n", # FIXME
  +        Subject => "OpenPKG Registration\n",
           Message => $mail,
       ) or die $Mail::Sendmail::error;
   
  @@ -428,9 +425,7 @@
       $html .=
           "Congratulations!\n" .
           "<p>\n" .
  -        "You have successfully enrolled for a membership with the OpenPKG Foundation e.V.\n" .
  -        "Your current membership status is <b>Fellow</b>. If you want to become even a <b>Member</b>\n" .
  -        "of the OpenPKG Foundation e.V., please visit your account information and upgrade.</b>\n" .
  +        "You have successfully registered with OpenPKG.\n" .
           "You can now access your account by going to the Login screen.\n" .
           "<p>\n" .
           "<a class=\"button\" href=\"".$self->url(-mode => "login")."\">" .
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.logout.pl
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ase.cgi.logout.pl
  --- ossp-pkg/ase/ase.cgi.logout.pl	21 Nov 2005 21:29:16 -0000	1.5
  +++ ossp-pkg/ase/ase.cgi.logout.pl	27 Nov 2005 19:32:48 -0000	1.6
  @@ -51,7 +51,7 @@
   
       #   generate description
       $html .=
  -        "Thank you for visiting the OpenPKG Foundation e.V. Affiliation Service Environment.<br>\n" .
  +        "Thank you for visiting the Affiliation Service Environment.<br>\n" .
           "Your session was terminated and you are now logged out.<br>\n" .
           "Please visit us again soon.";
   
  @@ -102,7 +102,7 @@
       $self->menu_tab("menu-logout");
   
       $html .=
  -        "Here you can logout from the OpenPKG Foundation Affiliation Service Environment. " .
  +        "Here you can logout from the Affiliation Service Environment. " .
           "Your current browser session will be destroyed and you will be redirected " .
           "to the Login screen again. Unless you explicitly logout, your session " .
           "will be kept active.";
  @@ .

From ossp-cvs-owner@ossp.org  Sun Nov 27 20:33:24 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 278D6752923; Sun, 27 Nov 2005 20:33:24 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO
Message-Id: <20051127193324.278D6752923@mail.ossp.org>
Date: Sun, 27 Nov 2005 20:33:24 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   27-Nov-2005 20:33:24
  Branch: HEAD                             Handle: 2005112719332300

  Modified files:
    ossp-pkg/ase            TODO

  Log:
    more items done

  Summary:
    Revision    Changes     Path
    1.16        +2  -6      ossp-pkg/ase/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 TODO
  --- ossp-pkg/ase/TODO	27 Nov 2005 19:29:07 -0000	1.15
  +++ ossp-pkg/ase/TODO	27 Nov 2005 19:33:23 -0000	1.16
  @@ -10,9 +10,7 @@
   - add support to ase CLI for initial creation of database (use in OpenPKG ase.spec:%post)
   - add INSTALL document which shows how to link with webserver
   - CGI::GuruMeditation and CGI::Carp do not work under Apache/mod_perl
  -
  -3. addon attributes
  -   User Attributes:
  +- addon attributes
      - uuid internal
      - email verified
      - password 
  @@ -24,7 +22,5 @@
      - number of platforms
      - number of servers
      - number of instances
  -4. styling
  -5. "openpkg register review"
  -6. ProFTPd activate
  +
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 28 18:11:28 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id E7C7075293E; Mon, 28 Nov 2005 18:11:27 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.login.pl ase.cgi.profile.pl ase.sql
Message-Id: <20051128171127.E7C7075293E@mail.ossp.org>
Date: Mon, 28 Nov 2005 18:11:27 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Nov-2005 18:11:27
  Branch: HEAD                             Handle: 2005112817112700

  Modified files:
    ossp-pkg/ase            ase.cgi.login.pl ase.cgi.profile.pl ase.sql

  Log:
    remove unused fields in database

  Summary:
    Revision    Changes     Path
    1.9         +3  -3      ossp-pkg/ase/ase.cgi.login.pl
    1.6         +1  -1      ossp-pkg/ase/ase.cgi.profile.pl
    1.5         +22 -160    ossp-pkg/ase/ase.sql
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	24 Nov 2005 20:32:32 -0000	1.8
  +++ ossp-pkg/ase/ase.cgi.login.pl	28 Nov 2005 17:11:27 -0000	1.9
  @@ -178,9 +178,9 @@
       }
       my $sth = $dbi->prepare(
           "SELECT * FROM ase_member" .
  -        " WHERE me_uuid = ? OR me_username = ? OR me_address = ?;"
  +        " WHERE me_uuid = ? OR me_address = ?;"
       ) or die $dbi->errstr();
  -    $sth->execute($login, $login, $login) or die $dbi->errstr();
  +    $sth->execute($login, $login) or die $dbi->errstr();
       my $rec = $sth->fetchrow_hashref();
       if (not defined($rec)) {
           $cgi->param("login.error", "Unknown login");
  @@ -193,7 +193,7 @@
           my ($admin_login, $admin_password) = ($1, $2); 
           my $sth2 = $dbi->prepare(
               "SELECT * FROM ase_member" .
  -            " WHERE     me_username = ?" .
  +            " WHERE     me_address = ?" .
               "       AND (   me_membership_status = 5" .
               "            OR me_membership_prop LIKE '\%A\%');"
           ) or die $dbi->errstr();
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.profile.pl
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ase.cgi.profile.pl
  --- ossp-pkg/ase/ase.cgi.profile.pl	27 Nov 2005 19:29:07 -0000	1.5
  +++ ossp-pkg/ase/ase.cgi.profile.pl	28 Nov 2005 17:11:27 -0000	1.6
  @@ -193,7 +193,7 @@
       #   render member edit form
       $self->use("CGI::FormBuilder");
       my $form = new CGI::FormBuilder (
  -        "fields"   => [qw(me_sn me_uuid me_username me_address me_membership_status me_membership_prop me_gender)],
  +        "fields"   => [qw(me_sn me_uuid me_address me_membership_status me_membership_prop me_gender)],
           "method"   => "POST",
           "values"   => $rec,
           "header"   => 0,
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.sql
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ase.sql
  --- ossp-pkg/ase/ase.sql	23 Nov 2005 17:56:41 -0000	1.4
  +++ ossp-pkg/ase/ase.sql	28 Nov 2005 17:11:27 -0000	1.5
  @@ -27,21 +27,20 @@
   --  Member Information
   CREATE TABLE ase_member (
       -- Unique Key (primary)
  -    me_sn                      INTEGER,
  -                               -- Membership Sequence/Serial Number
  -                               -- [7]
       me_uuid                    TEXT UNIQUE NOT NULL PRIMARY KEY, 
                                  -- Membership UUID
                                  -- [75468374-8721-11d9-bee4-0002a5489f14]
   
       -- Unique Keys (secondary)
  -    me_username                TEXT UNIQUE,
  -                               -- Username
  -                               -- [rse]
       me_address                 TEXT UNIQUE,
                                  -- Email-Address
                                  -- [rse@engelschall.com]
   
  +    -- Person Details
  +    me_name                    TEXT,
  +                               -- Person Name
  +                               -- [Ralf S. Engelschall]
  +
       -- Membership Details
       me_membership_status       CHAR(1) NOT NULL,
                                  -- Membership Status/Karma: 0=enrolling, 1=fellow, 2=member, 3=activist, 4=director, 5=president
  @@ -49,12 +48,6 @@
       me_membership_type         CHAR(1) NOT NULL,
                                  -- Membership Type: N=natural, J=juristic
                                  -- [N]
  -    me_membership_class        CHAR(1),
  -                               -- Membership Class: R=regular, S=sustaining
  -                               -- [R]
  -    me_membership_prop         CHAR(4),
  -                               -- Membership Properties: A=admin, F=founding, H=honorary, ...
  -                               -- [F]
       me_membership_start        INTEGER,
                                  -- Membership Start Date
                                  -- [20050209]
  @@ -62,101 +55,6 @@
                                  -- Membership End Date
                                  -- [20060209]
   
  -    -- Person Details
  -    me_gender                  CHAR(1),
  -                               -- Gender: M=male, F=female
  -                               -- [M] 
  -    me_name_title              TEXT,
  -                               -- Title
  -                               -- [Dipl.-Inf.]
  -    me_name_first              TEXT,
  -                               -- First Name
  -                               -- [Ralf]
  -    me_name_middle             CHAR(1),
  -                               -- Middle Initial
  -                               -- [S]
  -    me_name_last               TEXT,
  -                               -- Last/Family Name
  -                               -- [Engelschall]
  -    me_birthday                INTEGER,
  -                               -- Birthday
  -                               -- [19721117]
  -    me_languages               TEXT,
  -                               -- Languages ISO-639 Codes (primary[,secondary,...])
  -                               -- [DE,EN]
  -
  -    -- Person Description
  -    me_profession              TEXT,
  -                               -- Profession
  -                               -- [Computer Scientist]
  -    me_employer                TEXT,
  -                               -- Currenty Employer
  -                               -- [Cable & Wireless]
  -    me_biography               TEXT,
  -                               -- One-Paragraph Biography Text
  -                               -- [...]
  -    me_portrait                BLOB,
  -                               -- Portrait Picture (PNG or JPEG format)
  -                               -- [...]
  -    me_homepage                TEXT,
  -                               -- Internet/WWW Homepage
  -                               -- [http://www.engelschall.com/]
  -    me_geekcode                TEXT,
  -                               -- GeekCode (see http://www.geekcode.com/)
  -                               -- [...]
  -    me_usc                     TEXT,
  -                               -- Unified Skill Code (RSE's USC)
  -                               -- [...]
  -    me_openpkg_since           INTEGER,
  -                               -- OpenPKG Known to you since...
  -                               -- [20001115]
  -
  -    -- Bank Account
  -    me_bank_institute_iso3166  CHAR(2),
  -                               -- Bank, Institute ISO 3166 Country Code
  -                               -- [DE]
  -    me_bank_institute_name     TEXT,
  -                               -- Bank, Institute Name
  -                               -- [Deutsche Bank]
  -    me_bank_institute_number   TEXT,
  -                               -- Bank, Institute Number
  -                               -- [70070024]
  -    me_bank_account_number     TEXT,
  -                               -- Bank, Account Number
  -                               -- [7700735]
  -    me_bank_directdebiting     INTEGER,
  -                               -- Bank, Direct Debiting: 0=no, 1=yes
  -                               -- [1]
  -
  -    -- Person Location
  -    me_loc_postal_street       TEXT,
  -                               -- Postal Location, Street
  -                               -- [Silnerstr.]
  -    me_loc_postal_house        TEXT,
  -                               -- Postal Location, House Number
  -                               -- [28]
  -    me_loc_postal_zipcode      TEXT,
  -                               -- Postal Location, Zip Code
  -                               -- [85221]
  -    me_loc_postal_city         TEXT,
  -                               -- Postal Location, City
  -                               -- [Dachau]
  -    me_loc_postal_country      TEXT,
  -                               -- Postal Location, Country
  -                               -- [Germany]
  -    me_loc_postal_iso3166      TEXT,
  -                               -- Postal Location, ISO-3166-1 Country Code
  -                               -- [DE]
  -    me_loc_timezoneoffset      INTEGER,
  -                               -- Positional Location, Timezone Offset (-12, ..., +12) without DST
  -                               -- [+1]
  -    me_loc_longitude           REAL,
  -                               -- Positional Location, Longitude
  -                               -- [11.43333]
  -    me_loc_latidude            REAL,
  -                               -- Positional Location, Lattitude
  -                               -- [48.26667]
  -
       -- Access
       me_access_pw_sha1          TEXT NOT NULL,
                                  -- Access, Password, plain SHA1
  @@ -167,29 +65,9 @@
       me_access_pw_cryptmd5      TEXT NOT NULL,
                                  -- Access, Password, crypt(3) salted MD5
                                  -- [$1$5OnRPADJ$NOwJzToVtRRFngRxTM21g/]
  -    me_access_pw_cryptdes      TEXT NOT NULL,
  +    me_access_pw_cryptdes      TEXT NOT NULL
                                  -- Access, Password, crypt(3) salted DES
                                  -- [xxxxxxxxxx]
  -    me_access_pk_ssh2          TEXT,
  -                               -- Access, Public Key, SSH-2 RSA/DSA (SSH, ssh-keygen)
  -                               -- [........]
  -    me_access_pk_openpgp       TEXT,
  -                               -- Access, Public Key, OpenPGP (PGP, GPG, gpg)
  -                               -- [........]
  -    me_access_pk_x509          TEXT,
  -                               -- Access, Public Key, X.509 Certificate (SSL, S/MIME, openssl)
  -                               -- [........]
  -    
  -    -- Account Recovery
  -    me_recovery_secret         TEXT,
  -                               -- Recovery Alternative 1: Secret
  -                               -- [...]
  -    me_recovery_question       INTEGER,
  -                               -- Recovery Alternative 2: Question: 0=none, 1=mother-maiden-name, 2=father-city-of-birth, 3=last-4-chars-of-creditcard 4=last-4-chars-of-idcard
  -                               -- [1]
  -    me_recovery_answer         TEXT
  -                               -- Recovery Alternative 2: Answer: 0=none, 1=mother-maiden-name, 2=father-city-of-birth, 3=last-4-chars-of-creditcard 4=last-4-chars-of-idcard
  -                               -- [1]
   );
   
   CREATE TABLE ase_enrollment (
  @@ -199,6 +77,9 @@
       en_address                 TEXT UNIQUE NOT NULL,
                                  -- Email-Address
                                  -- [rse@engelschall.com]
  +    en_name                    TEXT,
  +                               -- Person Name
  +                               -- [Ralf S. Engelschall]
       en_pw_sha1                 TEXT NOT NULL,
                                  -- Access, Password, plain SHA1
                                  -- [HHHHHHHH...]
  @@ -219,6 +100,19 @@
                                  -- [20050225000000]
   );
   
  +--  Temporary User Interface Security Codes
  +CREATE TABLE ase_scode (
  +    sc_uuid                    TEXT NOT NULL,
  +                               -- Scode UUID
  +                               -- [75468374-8721-11d9-bee4-0002a5489f14]
  +    sc_number                  TEXT NOT NULL,
  +                               -- Scode Number (4 chars)
  +                               -- [xxxx]
  +    sc_expiry                  INTEGER NOT NULL
  +                               -- Scode Expiry Date/Time YYYYMMDDHHMMSS
  +                               -- [20050225000000]
  +);
  +
   --  Action Logbook
   CREATE TABLE ase_logbook (
       -- Unique Key (primary)
  @@ -235,38 +129,6 @@
                                  -- [...]
   );
   
  ---  Financial Accounts
  -CREATE TABLE ase_account (
  -    -- Unique Key
  -    ac_uuid                    TEXT NOT NULL, 
  -                               -- Membership UUID
  -                               -- [75468374-8721-11d9-bee4-0002a5489f14]
  -
  -    -- Transaction Entry
  -    ac_date                    INTEGER NOT NULL,
  -                               -- Account Transaction Date YYYYMMDDHHMMSS
  -                               -- [20050225000000]
  -    ac_purpose                 TEXT NOT NULL,
  -                               -- Account Transaction Purpose
  -                               -- [Membership 2005/02]
  -    ac_amount                  REAL NOT NULL
  -                               -- Account Transaction Amount +/-N
  -                               -- [+123.50]
  -);
  -
  ---  Temporary User Interface Security Codes
  -CREATE TABLE ase_scode (
  -    sc_uuid                    TEXT NOT NULL,
  -                               -- Scode UUID
  -                               -- [75468374-8721-11d9-bee4-0002a5489f14]
  -    sc_number                  TEXT NOT NULL,
  -                               -- Scode Number (4 chars)
  -                               -- [xxxx]
  -    sc_expiry                  INTEGER NOT NULL
  -                               -- Scode Expiry Date/Time YYYYMMDDHHMMSS
  -                               -- [20050225000000]
  -);
  -
   -- Temporary User Interface Sessions
   CREATE TABLE ase_sessions (
       id                         CHAR(36) NOT NULL PRIMARY KEY,
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 28 18:23:32 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 3C1F575292D; Mon, 28 Nov 2005 18:23:32 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.enroll.pl
Message-Id: <20051128172332.3C1F575292D@mail.ossp.org>
Date: Mon, 28 Nov 2005 18:23:32 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Nov-2005 18:23:32
  Branch: HEAD                             Handle: 2005112817233100

  Modified files:
    ossp-pkg/ase            ase.cgi.enroll.pl

  Log:
    use a better email address

  Summary:
    Revision    Changes     Path
    1.8         +1  -1      ossp-pkg/ase/ase.cgi.enroll.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	27 Nov 2005 19:32:48 -0000	1.7
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	28 Nov 2005 17:23:31 -0000	1.8
  @@ -290,7 +290,7 @@
       $Mail::Sendmail::mailcfg{"smtp"} = [qw(localhost mail)];
       Mail::Sendmail::sendmail(
           To      => $address,
  -        From    => "OpenPKG Affiliation Service Environment <ase\@localhost>\n", # FIXME
  +        From    => "OpenPKG Affiliation Service Environment <nobody\@openpkg.org>\n", # FIXME
           Subject => "OpenPKG Registration\n",
           Message => $mail,
       ) or die $Mail::Sendmail::error;
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 28 19:31:17 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 8BA15752931; Mon, 28 Nov 2005 19:31:16 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.enroll.pl
Message-Id: <20051128183116.8BA15752931@mail.ossp.org>
Date: Mon, 28 Nov 2005 19:31:16 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Nov-2005 19:31:16
  Branch: HEAD                             Handle: 2005112818311600

  Modified files:
    ossp-pkg/ase            ase.cgi.enroll.pl

  Log:
    be less restrictive on the password

  Summary:
    Revision    Changes     Path
    1.9         +1  -1      ossp-pkg/ase/ase.cgi.enroll.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	28 Nov 2005 17:23:31 -0000	1.8
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	28 Nov 2005 18:31:16 -0000	1.9
  @@ -208,7 +208,7 @@
           $cgi->param('address.error', 'Invalid Email address: not <i>name</i>@<i>domain</i>');
           $error = 1;
       }
  -    if ($password !~ m/^[a-zA-Z0-9]{6,}$/) {
  +    if ($password !~ m/^.{6,}$/) {
           $cgi->param('password.error', 'Invalid Password: at least 6 characters required');
           $error = 1;
       }
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 28 22:00:44 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 8A91A75292D; Mon, 28 Nov 2005 22:00:44 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.enroll.pl ase.cgi.login.pl ase.css a...
Message-Id: <20051128210044.8A91A75292D@mail.ossp.org>
Date: Mon, 28 Nov 2005 22:00:44 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Nov-2005 22:00:44
  Branch: HEAD                             Handle: 2005112821004300

  Modified files:
    ossp-pkg/ase            ase.cgi.enroll.pl ase.cgi.login.pl ase.css
                            ase.html

  Log:
    CSS and XHTML cleanups; add name to form

  Summary:
    Revision    Changes     Path
    1.10        +33 -10     ossp-pkg/ase/ase.cgi.enroll.pl
    1.10        +2  -2      ossp-pkg/ase/ase.cgi.login.pl
    1.5         +6  -2      ossp-pkg/ase/ase.css
    1.5         +1  -0      ossp-pkg/ase/ase.html
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	28 Nov 2005 18:31:16 -0000	1.9
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	28 Nov 2005 21:00:43 -0000	1.10
  @@ -47,14 +47,14 @@
           -method => 'POST',
           -action => $self->url(),
           -class  => 'enrollment',
  -    ) . "\n";
  +    ) . "<div>\n";
       $html .= $cgi->hidden(
           -name     => 'mode',
           -default  => 'enrollment-action',
           -override => 1
       ) . "\n";
       $html->fold("canvas");
  -    $html .= $cgi->end_form() . "\n";
  +    $html .= "</div>" . $cgi->end_form() . "\n";
       $html .= "</div>\n";
       $html >> "canvas";
   
  @@ -69,8 +69,8 @@
       #   generate description
       $html .=
           "<p>\n" .
  -        "Enroll here and join us<p>\n" .
  -        "The enrollment as a <i>Fellow</i> is <i>free of charge</i>.<br>\n" .
  +        "Enroll here and join us.\n" .
  +        "The enrollment as a <i>Fellow</i> is <i>free of charge</i>.\n" .
           "For successfully enrolling you have to specify a valid\n" .
           "\"Email Address\" and a \"Password\". Additionally, you have to\n" .
           "repeat the \"Security Code\" for proving you are human.\n" .
  @@ -88,6 +88,10 @@
           "<p>\n" .
           "<table class=\"F\">\n" .
           "  <tr>\n" .
  +        "    <td class=\"L\"><span class=\"label\">Name:</span></td>\n" .
  +        "    <td class=\"I\">"; $html->fold("field-name"); $html .= "</td>\n" .
  +        "  </tr>\n" .
  +        "  <tr>\n" .
           "    <td class=\"L\"><span class=\"label\">Email Address:</span></td>\n" .
           "    <td class=\"I\">"; $html->fold("field-address"); $html .= "</td>\n" .
           "  </tr>\n" .
  @@ -114,6 +118,20 @@
       ) . "\n";
   
       #   generate the input fields
  +    $html >> "field-name";
  +    $html .= $cgi->textfield(
  +        -id        => 'field_name',
  +        -class     => 'field',
  +        -name      => 'name',
  +        -default   => '',
  +        -size      => 40,
  +        -maxlength => 80,
  +    ) . "<br>";
  +    $html .= "<span class=\"annotation\">(<i>firstname lastname</i>, e.g. \"John Doe\")</span>\n";
  +    if (defined(my $error = $cgi->param("name.error"))) {
  +        $html .= "<br><span class=\"error\">$error</span>\n";
  +    }
  +    $html << 1;
       $html >> "field-address";
       $html .= $cgi->textfield(
           -id        => 'field_address',
  @@ -197,6 +215,7 @@
       }
   
       #   determine form parameters
  +    my $name       = $cgi->param("name");
       my $address    = $cgi->param("address");
       my $password   = $cgi->param("password");
       my $scode_num  = $cgi->param("scode");
  @@ -204,6 +223,10 @@
   
       #   verify form parameters
       my $error = 0;
  +    if ($name !~ m/\S+\s+\S+/) {
  +        $cgi->param('name.error', 'Invalid Name: not <i>firstname lastname</i>');
  +        $error = 1;
  +    }
       if ($address !~ m/^[^@]+\@(?:[^.]+\.)+[^.]+$/) {
           $cgi->param('address.error', 'Invalid Email address: not <i>name</i>@<i>domain</i>');
           $error = 1;
  @@ -263,12 +286,12 @@
       my $sth = $dbi->prepare(
           "INSERT INTO ase_enrollment" .
           " (en_uuid," .
  -        "  en_address, en_pw_sha1, en_pw_md5, en_pw_cryptmd5, en_pw_cryptdes," .
  +        "  en_name, en_address, en_pw_sha1, en_pw_md5, en_pw_cryptmd5, en_pw_cryptdes," .
           "  en_start, en_expiry)" .
  -        " VALUES (?, ?, ?, ?, ?, ?, ?, ?);"
  +        " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);"
       ) or die $dbi->errstr();
       $sth->execute(
  -        $me_uuid, $address,
  +        $me_uuid, $name, $address,
           $pw->{-sha1}, $pw->{-md5}, $pw->{-cryptmd5}, $pw->{-cryptdes}, 
           $t_start, $t_expiry
       ) or die $dbi->errstr();
  @@ -382,14 +405,14 @@
       my $t_end   = $self->datetime($now+365*24*60*60);
       $sth = $dbi->prepare(
           "INSERT INTO ase_member" .
  -        " (me_uuid, me_address, " .
  +        " (me_uuid, me_name, me_address, " .
           "  me_membership_status, me_membership_type, " .
           "  me_membership_start, me_membership_end, " .
           "  me_access_pw_sha1, me_access_pw_md5, me_access_pw_cryptmd5, me_access_pw_cryptdes)" .
  -        " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"
  +        " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"
       ) or die $dbi->errstr();
       $sth->execute(
  -        $uuid, $rec->{en_address},
  +        $uuid, $rec->{en_name}, $rec->{en_address},
           1, "N",
           $t_start, $t_end,
           $rec->{en_pw_sha1}, $rec->{en_pw_md5}, $rec->{en_pw_cryptmd5}, $rec->{en_pw_cryptdes},
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	28 Nov 2005 17:11:27 -0000	1.9
  +++ ossp-pkg/ase/ase.cgi.login.pl	28 Nov 2005 21:00:43 -0000	1.10
  @@ -42,14 +42,14 @@
           -method => 'POST',
           -action => $self->url(),
           -class  => 'login',
  -    ) . "\n";
  +    ) . "<div>\n";
       $html .= $cgi->hidden(
           -name     => 'mode',
           -value    => 'login-action',
           -override => 1
       ) . "\n";
       $html->fold("canvas");
  -    $html .= $cgi->end_form() . "\n";
  +    $html .= "</div>" . $cgi->end_form() . "\n";
       $html .= "</div>\n";
       $html >> "canvas";
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.css
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ase.css
  --- ossp-pkg/ase/ase.css	21 Nov 2005 09:07:38 -0000	1.4
  +++ ossp-pkg/ase/ase.css	28 Nov 2005 21:00:43 -0000	1.5
  @@ -130,7 +130,9 @@
   
   /* Breadcrumb List */
   .ase ul.breadcrumb {
  -    margin:           0px;
  +    margin-top:       0px;
  +    margin-left:      0px;
  +    margin-right:     0px;
       margin-bottom:    10px;
       padding:          0px;
       white-space:      nowrap;
  @@ -205,7 +207,9 @@
       padding:            10px 10px 10px 10px;
   }
   .ase ul.tabs {
  -    margin:             0px;
  +    margin-top:         0px;
  +    margin-bottom:      0px;
  +    margin-right:       0px;
       margin-left:        4px;     /* compensate gap reduction (see below) */
       padding:            0px;
       white-space:        nowrap;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.html
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ase.html
  --- ossp-pkg/ase/ase.html	16 Nov 2005 13:13:24 -0000	1.4
  +++ ossp-pkg/ase/ase.html	28 Nov 2005 21:00:43 -0000	1.5
  @@ -3,6 +3,7 @@
   <html>
     <head>
       <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
  +    <title>ASE</title>
       <style type="text/css">
         body { margin-left: 50px; }
       </style>
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 28 22:03:59 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 8CB5E752923; Mon, 28 Nov 2005 22:03:59 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.css
Message-Id: <20051128210359.8CB5E752923@mail.ossp.org>
Date: Mon, 28 Nov 2005 22:03:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Nov-2005 22:03:59
  Branch: HEAD                             Handle: 2005112821035900

  Modified files:
    ossp-pkg/ase            ase.css

  Log:
    be more specific

  Summary:
    Revision    Changes     Path
    1.6         +1  -1      ossp-pkg/ase/ase.css
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.css
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ase.css
  --- ossp-pkg/ase/ase.css	28 Nov 2005 21:00:43 -0000	1.5
  +++ ossp-pkg/ase/ase.css	28 Nov 2005 21:03:59 -0000	1.6
  @@ -25,7 +25,7 @@
   */
   
   /* General: Outer Canvas */
  -.ase {
  +DIV.ase {
       padding:          10px 0px 10px 0px;
       width:            600px;
       font-family:      sans-serif, helvetica, arial;
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 28 22:23:09 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 9A248752922; Mon, 28 Nov 2005 22:23:09 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.util.pl
Message-Id: <20051128212309.9A248752922@mail.ossp.org>
Date: Mon, 28 Nov 2005 22:23:09 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Nov-2005 22:23:09
  Branch: HEAD                             Handle: 2005112821230900

  Modified files:
    ossp-pkg/ase            ase.cgi.util.pl

  Log:
    make sure -name argument is always last for IE hacks

  Summary:
    Revision    Changes     Path
    1.12        +4  -1      ossp-pkg/ase/ase.cgi.util.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.util.pl
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 ase.cgi.util.pl
  --- ossp-pkg/ase/ase.cgi.util.pl	25 Nov 2005 20:21:46 -0000	1.11
  +++ ossp-pkg/ase/ase.cgi.util.pl	28 Nov 2005 21:23:09 -0000	1.12
  @@ -92,7 +92,10 @@
       my $url = $self->param(-cgi)->url(-relative => 1);
       $url = "." if ($url eq '');
       my $first = 1;
  -    foreach my $key (keys(%attr)) {
  +    my @keys = ();
  +    push(@keys, grep { $_ ne "-name" } keys(%attr));
  +    push(@keys, grep { $_ eq "-name" } keys(%attr));
  +    foreach my $key (@keys) {
           my ($var, $val) = ($key, $attr{$key});
           $var =~ s/^-//s;
           $var =~ s/-/_/sg;
  @@ .

From ossp-cvs-owner@ossp.org  Tue Nov 29 17:38:48 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id BE7E9752935; Tue, 29 Nov 2005 17:38:47 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.login.pl
Message-Id: <20051129163847.BE7E9752935@mail.ossp.org>
Date: Tue, 29 Nov 2005 17:38:47 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Nov-2005 17:38:47
  Branch: HEAD                             Handle: 2005112916384700

  Modified files:
    ossp-pkg/ase            ase.cgi.login.pl

  Log:
    perform some logging of operations

  Summary:
    Revision    Changes     Path
    1.11        +1  -1      ossp-pkg/ase/ase.cgi.login.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	28 Nov 2005 21:00:43 -0000	1.10
  +++ ossp-pkg/ase/ase.cgi.login.pl	29 Nov 2005 16:38:47 -0000	1.11
  @@ -223,7 +223,7 @@
   
       #   login the user by remembering his UUID in the session
       $session->param("login", $rec->{'me_uuid'});
  -    $self->logbook("login by ".$rec->{'me_address'}); 
  +    $self->logbook("login by %s <%s>", $rec->{'me_name'}, $rec->{'me_address'}); 
   
       #   perform login: either go to menu or redirect to external return URL
       if (defined(my $url = $session->param("after_login"))) {
  @@ .

From ossp-cvs-owner@ossp.org  Tue Nov 29 17:46:38 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B790A752932; Tue, 29 Nov 2005 17:46:38 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.enroll.pl
Message-Id: <20051129164638.B790A752932@mail.ossp.org>
Date: Tue, 29 Nov 2005 17:46:38 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Nov-2005 17:46:38
  Branch: HEAD                             Handle: 2005112916463800

  Modified files:
    ossp-pkg/ase            ase.cgi.enroll.pl

  Log:
    add password verification

  Summary:
    Revision    Changes     Path
    1.11        +26 -5      ossp-pkg/ase/ase.cgi.enroll.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	28 Nov 2005 21:00:43 -0000	1.10
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	29 Nov 2005 16:46:38 -0000	1.11
  @@ -159,6 +159,18 @@
       if (defined(my $error = $cgi->param("password.error"))) {
           $html .= "<br><span class=\"error\">$error</span>\n";
       }
  +    $html .= $cgi->password_field(
  +        -id        => 'field_password_verify',
  +        -class     => 'field',
  +        -name      => 'password_verify',
  +        -default   => '',
  +        -size      => 22,
  +        -maxlength => 20,
  +    ) . "<br>";
  +    $html .= "<span class=\"annotation\">(retype password here for verification)</span>\n";
  +    if (defined(my $error = $cgi->param("password_verify.error"))) {
  +        $html .= "<br><span class=\"error\">$error</span>\n";
  +    }
       $html << 1;
       $html >> "field-scode";
       $html .= "<img align=top src=\"".$self->url(-mode => 'scode', -uuid => $scode_uuid)."\"> :\n";
  @@ -215,11 +227,12 @@
       }
   
       #   determine form parameters
  -    my $name       = $cgi->param("name");
  -    my $address    = $cgi->param("address");
  -    my $password   = $cgi->param("password");
  -    my $scode_num  = $cgi->param("scode");
  -    my $scode_uuid = $cgi->param("scode.uuid");
  +    my $name            = $cgi->param("name");
  +    my $address         = $cgi->param("address");
  +    my $password        = $cgi->param("password");
  +    my $password_verify = $cgi->param("password_verify");
  +    my $scode_num       = $cgi->param("scode");
  +    my $scode_uuid      = $cgi->param("scode.uuid");
   
       #   verify form parameters
       my $error = 0;
  @@ -235,6 +248,10 @@
           $cgi->param('password.error', 'Invalid Password: at least 6 characters required');
           $error = 1;
       }
  +    if ($password_verify ne $password) {
  +        $cgi->param('password_verify.error', 'Invalid Verification Password: does not match Password');
  +        $error = 1;
  +    }
       if (not $self->scode_verify($scode_uuid, $scode_num)) {
           $cgi->param('scode.error', 'Invalid Security Code');
           $error = 1;
  @@ -362,6 +379,8 @@
           "an URL. Please follow this URL for being directed to step 3\n" .
           "of this Enrollment procedure, the Account Activation.\n";
   
  +    $self->logbook("enrollment started for %s <%s>", $name, $address);
  +
       return;
   }
   
  @@ -455,6 +474,8 @@
           "Go to <b>Login</b> screen" .
           "</a>\n";
   
  +    $self->logbook("enrollment finished for %s <%s>", $rec->{en_name}, $rec->{en_address});
  +
       return;
   }
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov 30 14:20:58 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 88C7A752923; Wed, 30 Nov 2005 14:20:58 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.scode.pl
Message-Id: <20051130132058.88C7A752923@mail.ossp.org>
Date: Wed, 30 Nov 2005 14:20:58 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Nov-2005 14:20:58
  Branch: HEAD                             Handle: 2005113013205800

  Modified files:
    ossp-pkg/ase            ase.cgi.scode.pl

  Log:
    really avoid O and 0 at all

  Summary:
    Revision    Changes     Path
    1.6         +1  -1      ossp-pkg/ase/ase.cgi.scode.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.scode.pl
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ase.cgi.scode.pl
  --- ossp-pkg/ase/ase.cgi.scode.pl	23 Nov 2005 16:28:52 -0000	1.5
  +++ ossp-pkg/ase/ase.cgi.scode.pl	30 Nov 2005 13:20:58 -0000	1.6
  @@ -50,7 +50,7 @@
   
       #   generate new Security Code Number
       #   (notice: "0" and "O" are too hard to distinguish, so left out)
  -    my $scode_num = $self->makerandom(6, "1-9A-Z");
  +    my $scode_num = $self->makerandom(6, "1-9A-NP-Z");
   
       #   determine expiry time
       my $scode_expiry = time() + 4*60*60;
  @@ .

From ossp-cvs-owner@ossp.org  Wed Nov 30 14:21:28 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 4AC1A752931; Wed, 30 Nov 2005 14:21:28 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.enroll.pl
Message-Id: <20051130132128.4AC1A752931@mail.ossp.org>
Date: Wed, 30 Nov 2005 14:21:28 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Nov-2005 14:21:28
  Branch: HEAD                             Handle: 2005113013212800

  Modified files:
    ossp-pkg/ase            ase.cgi.enroll.pl

  Log:
    tell us when a new registration was successfully, this way we don't
    have to poll the database

  Summary:
    Revision    Changes     Path
    1.12        +18 -0      ossp-pkg/ase/ase.cgi.enroll.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	29 Nov 2005 16:46:38 -0000	1.11
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	30 Nov 2005 13:21:28 -0000	1.12
  @@ -474,6 +474,24 @@
           "Go to <b>Login</b> screen" .
           "</a>\n";
   
  +    #   send activation information to administrators
  +    $self->use("Mail::Sendmail");
  +    my $mail =
  +        "Successful OpenPKG Fellow Registration:\n" .
  +        $rec->{en_name}." <".$rec->{en_address}.">\n" .
  +        "\n" .
  +        "-- \n" .
  +        "Affiliation Service Environment\n" .
  +        "" . $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "\n" .
  +        "\n";
  +    $Mail::Sendmail::mailcfg{"smtp"} = [qw(localhost mail)];
  +    Mail::Sendmail::sendmail(
  +        To      => "openpkg-registry\@openpkg.org",
  +        From    => "OpenPKG Affiliation Service Environment <nobody\@openpkg.org>\n", # FIXME
  +        Subject => "OpenPKG Registration: ".$rec->{en_name}." <".$rec->{en_address}.">\n",
  +        Message => $mail,
  +    ) or die $Mail::Sendmail::error;
  +
       $self->logbook("enrollment finished for %s <%s>", $rec->{en_name}, $rec->{en_address});
   
       return;
  @@ .

From ossp-cvs-owner@ossp.org  Tue Dec  6 08:38:49 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id AB8AA75292E; Tue,  6 Dec 2005 08:38:49 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog THANKS ossp-pkg/uuid/perl/ uuid_c...
Message-Id: <20051206073849.AB8AA75292E@mail.ossp.org>
Date: Tue,  6 Dec 2005 08:38:49 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Dec-2005 08:38:49
  Branch: HEAD                             Handle: 2005120607384801

  Modified files:
    ossp-pkg/uuid           ChangeLog THANKS
    ossp-pkg/uuid/perl      uuid_compat.pm uuid_compat.pod

  Log:
    Cleaned up and speed optimized perl/uuid_compat.pm
    (the Data::UUID compatibility module for Perl)
    
    Submitted by: David Wheeler <david@justatheory.com>

  Summary:
    Revision    Changes     Path
    1.96        +4  -0      ossp-pkg/uuid/ChangeLog
    1.8         +1  -0      ossp-pkg/uuid/THANKS
    1.3         +62 -82     ossp-pkg/uuid/perl/uuid_compat.pm
    1.2         +4  -2      ossp-pkg/uuid/perl/uuid_compat.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.95 -r1.96 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	30 Oct 2005 09:38:21 -0000	1.95
  +++ ossp-pkg/uuid/ChangeLog	6 Dec 2005 07:38:48 -0000	1.96
  @@ -13,6 +13,10 @@
   
     Changes between 1.3.1 and 1.3.2 (24-Sep-2005 to xx-xxx-2005)
   
  +   o Cleaned up and speed optimized perl/uuid_compat.pm
  +     (the Data::UUID compatibility module for Perl)
  +     [David Wheeler <david@justatheory.com>]
  +
      o Upgrade to GNU shtool 2.0.3
        [Ralf S. Engelschall]
      
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/THANKS
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 THANKS
  --- ossp-pkg/uuid/THANKS	6 Mar 2005 11:29:25 -0000	1.7
  +++ ossp-pkg/uuid/THANKS	6 Dec 2005 07:38:49 -0000	1.8
  @@ -18,4 +18,5 @@
       o  Piotr Roszatycki            <dexter@debian.org>
       o  Michael Schloh              <michael@schloh.com>
       o  Guerry Semones              <guerry@tsunamiresearch.com>
  +    o  David Wheeler               <david@justatheory.com>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid_compat.pm
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid_compat.pm
  --- ossp-pkg/uuid/perl/uuid_compat.pm	24 Sep 2005 10:20:24 -0000	1.2
  +++ ossp-pkg/uuid/perl/uuid_compat.pm	6 Dec 2005 07:38:49 -0000	1.3
  @@ -35,7 +35,7 @@
   use strict;
   
   use OSSP::uuid;
  -use MIME::Base64;
  +use MIME::Base64 qw();
   
   require Exporter;
   
  @@ -52,36 +52,34 @@
   
   sub create {
       my ($self) = @_;
  -    my $uuid = new OSSP::uuid;
  -    $uuid->make("v4");
  -    return $uuid->export("bin");
  +    my $uuid = OSSP::uuid->new;
  +    $uuid->make('v4');
  +    return $uuid->export('bin');
   }
   
   sub create_from_name {
       my ($self, $nsid, $name) = @_;
  -    my $uuid = new OSSP::uuid;
  -    my $nsiduuid = new OSSP::uuid;
  -    $nsiduuid->import("bin", $nsiduuid);
  -    $uuid = new OSSP::uuid;
  -    $uuid->make("v3", $nsiduuid, $name);
  -    return $uuid->export("bin");
  +    my $uuid = OSSP::uuid->new;
  +    my $nsiduuid = OSSP::uuid->new;
  +    $nsiduuid->import('bin', $nsiduuid);
  +    $uuid = OSSP::uuid->new;
  +    $uuid->make('v3', $nsiduuid, $name);
  +    return $uuid->export('bin');
   }
   
   sub to_string {
       my ($self, $bin) = @_;
  -    my $uuid = new OSSP::uuid;
  -    $uuid->import("bin", $bin);
  -    return $uuid->export("str");
  +    my $uuid = OSSP::uuid->new;
  +    $uuid->import('bin', $bin);
  +    return $uuid->export('str');
   }
   
   sub to_hexstring {
       my ($self, $bin) = @_;
  -    my $uuid = new OSSP::uuid;
  -    $uuid->import("bin", $bin);
  -    $_ = $uuid->export("str");
  -    s/-//g;
  -    s/^/0x/;
  -    return $_;
  +    my $uuid = OSSP::uuid->new;
  +    $uuid->import('bin', $bin);
  +    (my $string = '0x' . $uuid->export('str')) =~ s/-//g;
  +    return $string;
   }
   
   sub to_b64string {
  @@ -91,22 +89,20 @@
   
   sub from_string {
       my ($self, $str) = @_;
  -    my $uuid = new OSSP::uuid;
  -    if ($str =~ /^0x(........)(....)(....)(....)(............)$/) {
  -        $str = "$1-$2-$3-$4-$5";
  -    }
  -    $uuid->import("str", $str);
  -    return $uuid->export("bin");
  +    my $uuid = OSSP::uuid->new;
  +    $uuid->import('str',
  +          $str =~ /^0x/
  +        ? join '-', unpack('x2 a8 a4 a4 a4 a12', $str)
  +        : $str
  +    );
  +    return $uuid->export('bin');
   }
   
   sub from_hexstring {
       my ($self, $str) = @_;
  -    my $uuid = new OSSP::uuid;
  -    if ($str =~ /^0x(........)(....)(....)(....)(............)$/) {
  -        $str = "$1-$2-$3-$4-$5";
  -    }
  -    $uuid->import("str", $str);
  -    return $uuid->export("bin");
  +    my $uuid = OSSP::uuid->new;
  +    $uuid->import('str', join '-', unpack('x2 a8 a4 a4 a4 a12', $str));
  +    return $uuid->export('bin');
   }
   
   sub from_b64string {
  @@ -116,80 +112,64 @@
   
   sub compare {
       my ($self, $bin1, $bin2) = @_;
  -    my $uuid1 = new OSSP::uuid;
  -    my $uuid2 = new OSSP::uuid;
  -    $uuid1->import("bin", $bin1);
  -    $uuid2->import("bin", $bin2);
  +    my $uuid1 = OSSP::uuid->new;
  +    my $uuid2 = OSSP::uuid->new;
  +    $uuid1->import('bin', $bin1);
  +    $uuid2->import('bin', $bin2);
       return $uuid1->compare($uuid2);
   }
   
  -sub constant {
  -    my ($self, $arg) = @_;
  -    my $ns;
  -    if    ($arg eq "NameSpace_DNS")  { $ns = "ns:DNS";  }
  -    elsif ($arg eq "NameSpace_URL")  { $ns = "ns:URL";  }
  -    elsif ($arg eq "NameSpace_X500") { $ns = "ns:X500"; }
  -    elsif ($arg eq "NameSpace_OID")  { $ns = "ns:OID";  }
  -    else                             { $ns = "nil";     }
  -    my $uuid = new OSSP::uuid;
  -    $uuid->load($ns);
  -    return $uuid->export("bin");
  -}
  -
  -sub NameSpace_DNS {
  -    my $self = new Data::UUID;
  -    return $self->constant("NameSpace_DNS");
  -}
  -
  -sub NameSpace_URL {
  -    my $self = new Data::UUID;
  -    return $self->constant("NameSpace_URL");
  -}
  -
  -sub NameSpace_X500 {
  -    my $self = new Data::UUID;
  -    return $self->constant("NameSpace_X500");
  +my %NS = (
  +    'NameSpace_DNS'  => 'ns:DNS',
  +    'NameSpace_URL'  => 'ns:URL',
  +    'NameSpace_OID'  => 'ns:OID',
  +    'NameSpace_X500' => 'ns:X500',
  +);
  +
  +while (my ($k, $v) = each %NS) {
  +    no strict 'refs';
  +    *{$k} = sub () {
  +        my $uuid = OSSP::uuid->new;
  +        $uuid->load($v);
  +        return $uuid->export('bin');
  +    };
   }
   
  -sub NameSpace_OID {
  -    my $self = new Data::UUID;
  -    return $self->constant("NameSpace_OID");
  +sub constant {
  +    my ($self, $arg) = @_;
  +    my $uuid = OSSP::uuid->new;
  +    $uuid->load($NS{$arg} || 'nil');
  +    return $uuid->export('bin');
   }
   
   sub create_str {
  -    my ($self) = @_;
  -    my $uuid = $self->create();
  -    return $self->to_string($uuid);
  +    my $self = shift;
  +    return $self->to_string($self->create);
   }
   
   sub create_hex {
  -    my ($self) = @_;
  -    my $uuid = $self->create();
  -    return $self->to_hexstring($uuid);
  +    my $self = shift;
  +    return $self->to_hexstring($self->create);
   }
   
   sub create_b64 {
  -    my ($self) = @_;
  -    my $uuid = $self->create();
  -    return $self->to_b64string($uuid);
  +    my $self = shift;
  +    return $self->to_b64string($self->create);
   }
   
   sub create_from_name_str {
  -    my ($self, $nsid, $name) = @_;
  -    my $uuid = $self->create_from_name($nsid, $name);
  -    return $self->to_string($uuid);
  +    my $self = shift;
  +    return $self->to_string($self->create_from_name(@_));
   }
   
   sub create_from_name_hex {
  -    my ($self, $nsid, $name) = @_;
  -    my $uuid = $self->create_from_name($nsid, $name);
  -    return $self->to_hexstring($uuid);
  +    my $self = shift;
  +    return $self->to_hexstring($self->create_from_name(@_));
   }
   
   sub create_from_name_b64 {
  -    my ($self, $nsid, $name) = @_;
  -    my $uuid = $self->create_from_name($nsid, $name);
  -    return $self->to_b64string($uuid);
  +    my $self = shift;
  +    return $self->to_b64string($self->create_from_name(@_));
   }
   
   1;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid_compat.pod
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid_compat.pod
  --- ossp-pkg/uuid/perl/uuid_compat.pod	31 Aug 2005 09:59:45 -0000	1.1
  +++ ossp-pkg/uuid/perl/uuid_compat.pod	6 Dec 2005 07:38:49 -0000	1.2
  @@ -46,8 +46,10 @@
   
   =head1 HISTORY
   
  -The backward compatibility Perl binding B<Data::UUID> for B<OSSP uuid>
  -was implemented in 2004 by Piotr Roszatycki E<lt>dexter@debian.orgE<gt>.
  +The backward compatibility Perl binding B<Data::UUID> for B<OSSP
  +uuid> was originally implemented in 2004 by Piotr Roszatycki
  +E<lt>dexter@debian.orgE<gt>. It was later cleaned up and speed optimized
  +in December 2005 by David Wheeler E<lt>david@justatheory.comE<gt>.
   
   =cut
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Dec  6 12:52:12 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id CCE91752934; Tue,  6 Dec 2005 12:52:11 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog README ossp-pkg/uuid/perl/ uuid.p...
Message-Id: <20051206115211.CCE91752934@mail.ossp.org>
Date: Tue,  6 Dec 2005 12:52:11 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Dec-2005 12:52:11
  Branch: HEAD                             Handle: 2005120611521100

  Modified files:
    ossp-pkg/uuid           ChangeLog README uuid_vers.h
    ossp-pkg/uuid/perl      uuid.pm uuid_compat.pm

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.97        +1  -1      ossp-pkg/uuid/ChangeLog
    1.34        +1  -1      ossp-pkg/uuid/README
    1.13        +1  -1      ossp-pkg/uuid/perl/uuid.pm
    1.4         +1  -1      ossp-pkg/uuid/perl/uuid_compat.pm
    1.19        +9  -9      ossp-pkg/uuid/uuid_vers.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.96 -r1.97 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	6 Dec 2005 07:38:48 -0000	1.96
  +++ ossp-pkg/uuid/ChangeLog	6 Dec 2005 11:52:11 -0000	1.97
  @@ -11,7 +11,7 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 1.3.1 and 1.3.2 (24-Sep-2005 to xx-xxx-2005)
  +  Changes between 1.3.1 and 1.3.2 (24-Sep-2005 to 06-Dec-2005)
   
      o Cleaned up and speed optimized perl/uuid_compat.pm
        (the Data::UUID compatibility module for Perl)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 README
  --- ossp-pkg/uuid/README	24 Sep 2005 10:20:24 -0000	1.33
  +++ ossp-pkg/uuid/README	6 Dec 2005 11:52:11 -0000	1.34
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
   
     OSSP uuid - Universally Unique Identifier
  -  Version 1.3.1 (24-Sep-2005)
  +  Version 1.3.2 (06-Dec-2005)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.pm
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 uuid.pm
  --- ossp-pkg/uuid/perl/uuid.pm	24 Sep 2005 10:20:24 -0000	1.12
  +++ ossp-pkg/uuid/perl/uuid.pm	6 Dec 2005 11:52:11 -0000	1.13
  @@ -118,7 +118,7 @@
   use Exporter;
   
   #   API version
  -our $VERSION = do { my @v = ('1.3.1' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
  +our $VERSION = do { my @v = ('1.3.2' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
   
   #   API inheritance
   our @ISA = qw(Exporter);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid_compat.pm
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 uuid_compat.pm
  --- ossp-pkg/uuid/perl/uuid_compat.pm	6 Dec 2005 07:38:49 -0000	1.3
  +++ ossp-pkg/uuid/perl/uuid_compat.pm	6 Dec 2005 11:52:11 -0000	1.4
  @@ -42,7 +42,7 @@
   our @ISA     = qw(Exporter);
   our @EXPORT  = qw(NameSpace_DNS NameSpace_OID NameSpace_URL NameSpace_X500);
   
  -our $VERSION = do { my @v = ('1.3.1' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
  +our $VERSION = do { my @v = ('1.3.2' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
   
   sub new {
       my $class = shift;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_vers.h
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 uuid_vers.h
  --- ossp-pkg/uuid/uuid_vers.h	24 Sep 2005 10:20:24 -0000	1.18
  +++ ossp-pkg/uuid/uuid_vers.h	6 Dec 2005 11:52:11 -0000	1.19
  @@ -8,7 +8,7 @@
   #ifndef _UUID_VERS_H_
   #define _UUID_VERS_H_
   
  -#define _UUID_VERSION 0x103201
  +#define _UUID_VERSION 0x103202
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _UUID_VERS_H_AS_HEADER_
   
   _uuid_version_t _uuid_version = {
  -    0x103201,
  -    "1.3.1",
  -    "1.3.1 (24-Sep-2005)",
  -    "This is OSSP uuid, Version 1.3.1 (24-Sep-2005)",
  -    "OSSP uuid 1.3.1 (24-Sep-2005)",
  -    "OSSP uuid/1.3.1",
  -    "@(#)OSSP uuid 1.3.1 (24-Sep-2005)",
  -    "$Id: OSSP uuid 1.3.1 (24-Sep-2005) $"
  +    0x103202,
  +    "1.3.2",
  +    "1.3.2 (06-Dec-2005)",
  +    "This is OSSP uuid, Version 1.3.2 (06-Dec-2005)",
  +    "OSSP uuid 1.3.2 (06-Dec-2005)",
  +    "OSSP uuid/1.3.2",
  +    "@(#)OSSP uuid 1.3.2 (06-Dec-2005)",
  +    "$Id: OSSP uuid 1.3.2 (06-Dec-2005) $"
   };
   
   #endif /* _UUID_VERS_H_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Tue Dec  6 12:54:39 2005
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 90CD8752938; Tue,  6 Dec 2005 12:54:39 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20051206115439.90CD8752938@mail.ossp.org>
Date: Tue,  6 Dec 2005 12:54:39 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   06-Dec-2005 12:54:39
  Branch: HEAD                             Handle: 2005120611543801

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/uuid   index.wml

  Log:
    release OSSP uuid 1.3.2

  Summary:
    Revision    Changes     Path
    1.143       +1  -0      ossp-web/new/news.txt
    1.118       +1  -1      ossp-web/pkg/lib/index.wml
    1.26        +1  -1      ossp-web/pkg/lib/uuid/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.142 -r1.143 news.txt
  --- ossp-web/new/news.txt	22 Nov 2005 07:56:48 -0000	1.142
  +++ ossp-web/new/news.txt	6 Dec 2005 11:54:38 -0000	1.143
  @@ -1,3 +1,4 @@
  +06-Dec-2005: Released L<OSSP uuid> 1.3.2
   22-Nov-2005: Released L<GNU pth> 2.0.6
   12-Oct-2005: Released L<OSSP str> 0.9.12
   09-Oct-2005: Released T<OSSP lmtp2nntp> 1.4.1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.117 -r1.118 index.wml
  --- ossp-web/pkg/lib/index.wml	22 Nov 2005 07:56:48 -0000	1.117
  +++ ossp-web/pkg/lib/index.wml	6 Dec 2005 11:54:39 -0000	1.118
  @@ -33,7 +33,7 @@
   			done=100 stable=1.1.3 unstable=none>
     <pkg_item name="uuid" longname="OSSP uuid" type="lib"
               desc="Universally Unique Identifier"
  -			done=100 stable=1.3.1 unstable=none>
  +			done=100 stable=1.3.2 unstable=none>
     <pkg_item name="val" longname="OSSP val" type="lib"
               desc="Value Access"
   			done=95 stable=none unstable=0.9.4>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/uuid/index.wml
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 index.wml
  --- ossp-web/pkg/lib/uuid/index.wml	24 Sep 2005 10:38:00 -0000	1.25
  +++ ossp-web/pkg/lib/uuid/index.wml	6 Dec 2005 11:54:39 -0000	1.26
  @@ -48,7 +48,7 @@
   
   <pkg_status
       name="uuid" assign="rse"
  -    stable="1.3.1"    stable_date="24-Sep-2005"
  +    stable="1.3.2"    stable_date="06-Dec-2005"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jan  7 09:11:41 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 2EDB275292F; Sat,  7 Jan 2006 09:11:41 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog devtool.conf
Message-Id: <20060107081141.2EDB275292F@mail.ossp.org>
Date: Sat,  7 Jan 2006 09:11:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Jan-2006 09:11:41
  Branch: HEAD                             Handle: 2006010708114000

  Modified files:
    ossp-pkg/uuid           ChangeLog devtool.conf

  Log:
    Upgrade build environment to GNU libtool 1.5.22

  Summary:
    Revision    Changes     Path
    1.98        +5  -0      ossp-pkg/uuid/ChangeLog
    1.23        +1  -1      ossp-pkg/uuid/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.97 -r1.98 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	6 Dec 2005 11:52:11 -0000	1.97
  +++ ossp-pkg/uuid/ChangeLog	7 Jan 2006 08:11:40 -0000	1.98
  @@ -11,6 +11,11 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 1.3.2 and 1.3.3 (06-Dec-2005 to xx-Jan-2006)
  +
  +   o Upgrade build environment to GNU libtool 1.5.22
  +     [Ralf S. Engelschall]
  +
     Changes between 1.3.1 and 1.3.2 (24-Sep-2005 to 06-Dec-2005)
   
      o Cleaned up and speed optimized perl/uuid_compat.pm
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 devtool.conf
  --- ossp-pkg/uuid/devtool.conf	30 Oct 2005 09:38:22 -0000	1.22
  +++ ossp-pkg/uuid/devtool.conf	7 Jan 2006 08:11:40 -0000	1.23
  @@ -4,7 +4,7 @@
   
   %autogen
       @autogen shtool   2.0.3  "2.0.*" all
  -    @autogen libtool  1.5.20 "1.5*"
  +    @autogen libtool  1.5.22 "1.5*"
       @autogen autoconf 2.59   "2.5[3-9]*"
   
   %autoclean
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 12 20:59:37 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 2F384752950; Thu, 12 Jan 2006 20:59:37 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid.pod
Message-Id: <20060112195937.2F384752950@mail.ossp.org>
Date: Thu, 12 Jan 2006 20:59:37 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Jan-2006 20:59:37
  Branch: HEAD                             Handle: 2006011219593600

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid.pod

  Log:
    Fixed documentation of uuid_make() function.

  Summary:
    Revision    Changes     Path
    1.99        +4  -1      ossp-pkg/uuid/ChangeLog
    1.32        +4  -6      ossp-pkg/uuid/uuid.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.98 -r1.99 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	7 Jan 2006 08:11:40 -0000	1.98
  +++ ossp-pkg/uuid/ChangeLog	12 Jan 2006 19:59:36 -0000	1.99
  @@ -11,7 +11,10 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 1.3.2 and 1.3.3 (06-Dec-2005 to xx-Jan-2006)
  +  Changes between 1.3.2 and 1.3.3 (06-Dec-2005 to 12-Jan-2006)
  +
  +   o Fixed documentation of uuid_make() function.
  +     [Ralf S. Engelschall]
   
      o Upgrade build environment to GNU libtool 1.5.22
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	2 Sep 2005 14:00:00 -0000	1.31
  +++ ossp-pkg/uuid/uuid.pod	12 Jan 2006 19:59:36 -0000	1.32
  @@ -328,12 +328,10 @@
   
   If I<mode> contains the C<UUID_MAKE_V3> or C<UUID_MAKE_V5> bit, a DCE
   1.1 variant UUID of version 3 or 5 is generated and two additional
  -C<NUL>-terminated string arguments of type "C<const char *>" are
  -expected: first a namespace, given as an internally pre-defined id
  -(currently known are ids "C<DNS>", "C<URL>", "C<OID>", and "C<X500>")
  -or a UUID in string representation. Second, a name string of arbitrary
  -length. The UUID is generated out of the 128-bit MD5 or 160-bit SHA-1
  -from the concatenated octet stream of namespace UUID and name string.
  +arguments are expected: first, a namespace UUID object (C<uuid_t *>).
  +Second, a name string of arbitrary length (C<const char *>). The UUID is
  +generated out of the 128-bit MD5 or 160-bit SHA-1 from the concatenated
  +octet stream of namespace UUID and name string.
   
   If I<mode> contains the C<UUID_MAKE_V4> bit, a DCE 1.1 variant UUID
   of version 4 is generated. The UUID is generated out of 128-bit random
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 12 21:00:24 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id AFB11752950; Thu, 12 Jan 2006 21:00:24 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog ossp-pkg/uuid/pgsql/ Makefile uui...
Message-Id: <20060112200024.AFB11752950@mail.ossp.org>
Date: Thu, 12 Jan 2006 21:00:24 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Jan-2006 21:00:24
  Branch: HEAD                             Handle: 2006011220002301

  Added files:
    ossp-pkg/uuid/pgsql     Makefile uuid.c uuid.sql.in uuid.txt
  Modified files:
    ossp-pkg/uuid           ChangeLog

  Log:
    Added experimental PostgreSQL bindings.

  Summary:
    Revision    Changes     Path
    1.100       +3  -0      ossp-pkg/uuid/ChangeLog
    1.1         +50 -0      ossp-pkg/uuid/pgsql/Makefile
    1.1         +409 -0     ossp-pkg/uuid/pgsql/uuid.c
    1.1         +120 -0     ossp-pkg/uuid/pgsql/uuid.sql.in
    1.1         +36 -0      ossp-pkg/uuid/pgsql/uuid.txt
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.99 -r1.100 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	12 Jan 2006 19:59:36 -0000	1.99
  +++ ossp-pkg/uuid/ChangeLog	12 Jan 2006 20:00:23 -0000	1.100
  @@ -13,6 +13,9 @@
   
     Changes between 1.3.2 and 1.3.3 (06-Dec-2005 to 12-Jan-2006)
   
  +   o Added experimental PostgreSQL bindings.
  +     [Ralf S. Engelschall]
  +
      o Fixed documentation of uuid_make() function.
        [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/pgsql/Makefile
  ============================================================================
  $ cvs diff -u -r0 -r1.1 Makefile
  --- /dev/null	2006-01-12 21:00:23 +0100
  +++ Makefile	2006-01-12 21:00:24 +0100
  @@ -0,0 +1,50 @@
  +##
  +##  Makefile for PostgreSQL extension module
  +##
  +
  +#   NOTICE: This requires GNU make as the PostgreSQL PGXS build
  +#   environment is based on GNU make features!
  +#
  +#   NOTICE: Usually one would just use "PGXS := $(shell pg_config
  +#   --pgxs)" followed by "include $(PGXS)" as the template. The problem
  +#   just is that this way (at least still under PostgreSQL 8.1) one
  +#   cannot pass the "-L../.libs -luuid" to the command which links the
  +#   DSO. Hence we fiddle around with the Makefiles which "PGXS" uses
  +#   itself ourself.
  +
  +PGXS              := $(shell pg_config --pgxs)
  +top_builddir      := $(dir $(PGXS))../..
  +include           $(top_builddir)/src/Makefile.global
  +    
  +NAME              = uuid
  +OBJS              = uuid.o
  +SO_MAJOR_VERSION  = 1
  +SO_MINOR_VERSION  = 0
  +
  +override CPPFLAGS := -I.. $(CPPFLAGS)
  +SHLIB_LINK        := -L../.libs -luuid
  +SHLIB_LINK        += $(shell test $(shell uname -s) = FreeBSD && echo "-Wl,-Bsymbolic")
  +rpath             :=
  +
  +all: uuid.sql all-lib
  +
  +enable_shared     = yes
  +include           $(top_builddir)/src/Makefile.shlib
  +
  +uuid.sql: uuid.sql.in
  +	sed -e 's;@MODULE_PATHNAME@;$(DESTDIR)$(pkglibdir)/uuid$(DLSUFFIX);g' <uuid.sql.in >uuid.sql
  +
  +install: all
  +	$(mkinstalldirs) $(DESTDIR)$(pkglibdir)
  +	$(mkinstalldirs) $(DESTDIR)$(datadir)
  +	$(INSTALL_SHLIB) $(shlib) $(DESTDIR)$(pkglibdir)/uuid$(DLSUFFIX)
  +	$(INSTALL_DATA) uuid.sql $(DESTDIR)$(datadir)/uuid.sql
  +
  +uninstall:
  +	-rm -f $(DESTDIR)$(pkglibdir)/uuid$(DLSUFFIX)
  +	-rm -f $(DESTDIR)$(datadir)/uuid.sql
  +
  +clean distclean: clean-lib
  +	rm -f $(OBJS)
  +	rm -f uuid.sql
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/pgsql/uuid.c
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid.c
  --- /dev/null	2006-01-12 21:00:23 +0100
  +++ uuid.c	2006-01-12 21:00:24 +0100
  @@ -0,0 +1,409 @@
  +/*
  +**  OSSP uuid - Universally Unique Identifier
  +**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +**
  +**  This file is part of OSSP uuid, a library for the generation
  +**  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  uuid.c: PostgreSQL Binding (C part)
  +*/
  +
  +/*  PostgreSQL (part 1/2) headers */
  +#include "postgres.h"
  +
  +/*  system headers */
  +#include <string.h>
  +
  +/*  PostgreSQL (part 2/2) headers */
  +#include "fmgr.h"
  +#include "lib/stringinfo.h"
  +
  +/*  own headers */
  +#include "uuid.h"
  +
  +/* internal UUID datum data structure */
  +typedef struct {
  +    char uuid_bin[UUID_LEN_BIN];
  +} uuid_datum_t;
  +
  +/* forward declarations */
  +Datum pg_uuid_in     (PG_FUNCTION_ARGS);
  +Datum pg_uuid_out    (PG_FUNCTION_ARGS);
  +Datum pg_uuid_recv   (PG_FUNCTION_ARGS);
  +Datum pg_uuid_send   (PG_FUNCTION_ARGS);
  +Datum pg_uuid_make   (PG_FUNCTION_ARGS);
  +Datum pg_uuid_eq     (PG_FUNCTION_ARGS);
  +Datum pg_uuid_ne     (PG_FUNCTION_ARGS);
  +
  +/* API function: uuid_in */
  +PG_FUNCTION_INFO_V1(pg_uuid_in);
  +Datum pg_uuid_in(PG_FUNCTION_ARGS)
  +{
  +    char *uuid_str;
  +    uuid_datum_t *uuid_datum;
  +    uuid_rc_t rc;
  +    uuid_t *uuid;
  +    void *vp;
  +    size_t len;
  +
  +    /* sanity check input argument */
  +    if ((uuid_str = PG_GETARG_CSTRING(0)) == NULL) {
  +        ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
  +                errmsg("invalid UUID string")));
  +        PG_RETURN_NULL();
  +    }
  +    if ((len = strlen(uuid_str)) != UUID_LEN_STR) {
  +        ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
  +                errmsg("invalid UUID string length %d (expected %d)", len, UUID_LEN_STR)));
  +        PG_RETURN_NULL();
  +    }
  +
  +    /* import as string representation */
  +    if ((rc = uuid_create(&uuid)) != UUID_RC_OK) {
  +        ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
  +                errmsg("failed to create UUID object: %s", uuid_error(rc))));
  +        PG_RETURN_NULL();
  +    }
  +    if ((rc = uuid_import(uuid, UUID_FMT_STR, uuid_str, len)) != UUID_RC_OK) {
  +        ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
  +                errmsg("failed to import UUID string representation: %s", uuid_error(rc))));
  +        uuid_destroy(uuid);
  +        PG_RETURN_NULL();
  +    }
  +
  +    /* export as binary representation */
  +    if ((uuid_datum = (uuid_datum_t *)palloc(sizeof(uuid_datum_t))) == NULL) {
  +        ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
  +                errmsg("failed to allocate UUID datum")));
  +        uuid_destroy(uuid);
  +        PG_RETURN_NULL();
  +    }
  +    vp = &(uuid_datum->uuid_bin);
  +    len = sizeof(uuid_datum->uuid_bin);
  +    if ((rc = uuid_export(uuid, UUID_FMT_BIN, &vp, &len)) != UUID_RC_OK) {
  +        ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
  +                errmsg("failed to export UUID binary representation: %s", uuid_error(rc))));
  +        uuid_destroy(uuid);
  +        pfree(uuid_datum);
  +        PG_RETURN_NULL();
  +    }
  +    uuid_destroy(uuid);
  +
  +    /* return UUID datum */
  +    PG_RETURN_POINTER(uuid_datum);
  +}
  +
  +/* API function: uuid_out */
  +PG_FUNCTION_INFO_V1(pg_uuid_out);
  +Datum pg_uuid_out(PG_FUNCTION_ARGS)
  +{
  +    uuid_datum_t *uuid_datum;
  +    uuid_rc_t rc;
  +    uuid_t *uuid;
  +    char *uuid_str;
  +    void *vp;
  +    size_t len;
  +
  +    /* sanity check input argument */
  +    if ((uuid_datum = (uuid_datum_t *)PG_GETARG_POINTER(0)) == NULL) {
  +        ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
  +                errmsg("invalid UUID datum")));
  +        PG_RETURN_NULL();
  +    }
  +
  +    /* import as binary representation */
  +    if ((rc = uuid_create(&uuid)) != UUID_RC_OK) {
  +        ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
  +                errmsg("failed to create UUID object: %s", uuid_error(rc))));
  +        PG_RETURN_NULL();
  +    }
  +    if ((rc = uuid_import(uuid, UUID_FMT_BIN, uuid_datum->uuid_bin, sizeof(uuid_datum->uuid_bin))) != UUID_RC_OK) {
  +        ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
  +                errmsg("failed to import UUID binary representation: %s", uuid_error(rc))));
  +        uuid_destroy(uuid);
  +        PG_RETURN_NULL();
  +    }
  +
  +    /* export as string representation */
  +    len = UUID_LEN_STR+1;
  +    if ((vp = uuid_str = (char *)palloc(len)) == NULL) {
  +        ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
  +                errmsg("failed to allocate UUID string")));
  +        uuid_destroy(uuid);
  +        PG_RETURN_NULL();
  +    }
  +    if ((rc = uuid_export(uuid, UUID_FMT_STR, &vp, &len)) != UUID_RC_OK) {
  +        ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
  +                errmsg("failed to export UUID string representation: %s", uuid_error(rc))));
  +        uuid_destroy(uuid);
  +        pfree(uuid_datum);
  +        PG_RETURN_NULL();
  +    }
  +    uuid_destroy(uuid);
  +
  +    /* return UUID string */
  +    PG_RETURN_CSTRING(uuid_str);
  +}
  +
  +/* API function: uuid_recv */
  +PG_FUNCTION_INFO_V1(pg_uuid_recv);
  +Datum pg_uuid_recv(PG_FUNCTION_ARGS)
  +{
  +    StringInfo uuid_internal;
  +    uuid_datum_t *uuid_datum;
  +
  +    /* sanity check input argument */
  +    if ((uuid_internal = (StringInfo)PG_GETARG_POINTER(0)) == NULL) {
  +        ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
  +                errmsg("invalid UUID StringInfo object")));
  +        PG_RETURN_NULL();
  +    }
  +    if (uuid_internal->len != UUID_LEN_BIN) {
  +        ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
  +                errmsg("invalid UUID binary length %d (expected %d)", uuid_internal->len, UUID_LEN_BIN)));
  +        PG_RETURN_NULL();
  +    }
  +
  +    /* import as binary representation */
  +    if ((uuid_datum = (uuid_datum_t *)palloc(sizeof(uuid_datum_t))) == NULL) {
  +        ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
  +                errmsg("failed to allocate UUID datum")));
  +        PG_RETURN_NULL();
  +    }
  +    memcpy(uuid_datum->uuid_bin, uuid_internal->data, uuid_internal->len);
  +
  +    /* return UUID datum */
  +    PG_RETURN_POINTER(uuid_datum);
  +}
  +
  +/* API function: uuid_send */
  +PG_FUNCTION_INFO_V1(pg_uuid_send);
  +Datum pg_uuid_send(PG_FUNCTION_ARGS)
  +{
  +    uuid_datum_t *uuid_datum;
  +    bytea *uuid_bytea;
  +
  +    /* sanity check input argument */
  +    if ((uuid_datum = (uuid_datum_t *)PG_GETARG_POINTER(0)) == NULL) {
  +        ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
  +                errmsg("invalid UUID datum")));
  +        PG_RETURN_NULL();
  +    }
  +
  +    /* export as binary representation */
  +    if ((uuid_bytea = (bytea *)palloc(VARHDRSZ + UUID_LEN_BIN)) == NULL) {
  +        ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
  +                errmsg("failed to allocate UUID bytea")));
  +        PG_RETURN_NULL();
  +    }
  +    uuid_bytea->vl_len = VARHDRSZ + UUID_LEN_BIN;
  +    memcpy(uuid_bytea->vl_dat, uuid_datum->uuid_bin, UUID_LEN_BIN);
  +
  +    /* return UUID bytea */
  +    PG_RETURN_BYTEA_P(uuid_bytea);
  +}
  +
  +/* API function: uuid_make */
  +PG_FUNCTION_INFO_V1(pg_uuid_make);
  +Datum pg_uuid_make(PG_FUNCTION_ARGS)
  +{
  +    uuid_t *uuid;
  +    uuid_t *uuid_ns;
  +    uuid_rc_t rc;
  +    int version;
  +    unsigned int mode;
  +    uuid_datum_t *uuid_datum;
  +    char *str_ns;
  +    char *str_name;
  +    void *vp;
  +    size_t len;
  +
  +    /* sanity check input argument */
  +    version = (int)PG_GETARG_INT32(0);
  +    switch (version) {
  +        case 1: mode = UUID_MAKE_V1; break;
  +        case 3: mode = UUID_MAKE_V3; break;
  +        case 4: mode = UUID_MAKE_V4; break;
  +        case 5: mode = UUID_MAKE_V5; break;
  +        default: {
  +            ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
  +                    errmsg("invalid UUID version %d (expected 1, 3, 4 or 5)", version)));
  +            PG_RETURN_NULL();
  +        }
  +    }
  +    if (   ((mode & (UUID_MAKE_V1|UUID_MAKE_V4)) && PG_NARGS() != 1)
  +        || ((mode & (UUID_MAKE_V3|UUID_MAKE_V5)) && PG_NARGS() != 3)) {
  +        ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
  +                errmsg("invalid number (%d) of arguments", PG_NARGS())));
  +        PG_RETURN_NULL();
  +    }
  +
  +    /* make a new UUID */
  +    if ((rc = uuid_create(&uuid)) != UUID_RC_OK) {
  +        ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
  +                errmsg("failed to create UUID object: %s", uuid_error(rc))));
  +        PG_RETURN_NULL();
  +    }
  +    if (version == 3 || version == 5) {
  +        if ((str_ns = PG_GETARG_CSTRING(1)) == NULL) {
  +            ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
  +                    errmsg("invalid namespace UUID string")));
  +            PG_RETURN_NULL();
  +        }
  +        if ((str_name = PG_GETARG_CSTRING(2)) == NULL) {
  +            ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
  +                    errmsg("invalid name string")));
  +            PG_RETURN_NULL();
  +        }
  +        if ((rc = uuid_create(&uuid_ns)) != UUID_RC_OK) {
  +            ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
  +                    errmsg("failed to create UUID namespace object: %s", uuid_error(rc))));
  +            PG_RETURN_NULL();
  +        }
  +        if ((rc = uuid_load(uuid_ns, str_ns)) != UUID_RC_OK) {
  +            if ((rc = uuid_import(uuid_ns, UUID_FMT_STR, str_ns, strlen(str_ns))) != UUID_RC_OK) {
  +                ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
  +                        errmsg("failed to import UUID namespace: %s", uuid_error(rc))));
  +                PG_RETURN_NULL();
  +            }
  +        }
  +        if ((rc = uuid_make(uuid, mode, uuid_ns, str_name)) != UUID_RC_OK) {
  +            ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
  +                    errmsg("failed to make v%d UUID: %s", version, uuid_error(rc))));
  +            uuid_destroy(uuid);
  +            PG_RETURN_NULL();
  +        }
  +        uuid_destroy(uuid_ns);
  +    }
  +    else {
  +        if ((rc = uuid_make(uuid, mode)) != UUID_RC_OK) {
  +            ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
  +                    errmsg("failed to make v%d UUID: %s", version, uuid_error(rc))));
  +            uuid_destroy(uuid);
  +            PG_RETURN_NULL();
  +        }
  +    }
  +
  +    /* export as binary representation */
  +    if ((uuid_datum = (uuid_datum_t *)palloc(sizeof(uuid_datum_t))) == NULL) {
  +        ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
  +                errmsg("failed to allocate UUID datum")));
  +        uuid_destroy(uuid);
  +        PG_RETURN_NULL();
  +    }
  +    vp = &(uuid_datum->uuid_bin);
  +    len = sizeof(uuid_datum->uuid_bin);
  +    if ((rc = uuid_export(uuid, UUID_FMT_BIN, &vp, &len)) != UUID_RC_OK) {
  +        ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
  +                errmsg("failed to export UUID binary representation: %s", uuid_error(rc))));
  +        uuid_destroy(uuid);
  +        pfree(uuid_datum);
  +        PG_RETURN_NULL();
  +    }
  +    uuid_destroy(uuid);
  +    PG_RETURN_POINTER(uuid_datum);
  +}
  +
  +/* INTERNAL function: _uuid_cmp */
  +static int _uuid_cmp(PG_FUNCTION_ARGS)
  +{
  +    uuid_datum_t *uuid_datum1;
  +    uuid_datum_t *uuid_datum2;
  +    uuid_t *uuid1;
  +    uuid_t *uuid2;
  +    uuid_rc_t rc;
  +    int result;
  +
  +    /* sanity check input argument */
  +    if ((uuid_datum1 = (uuid_datum_t *)PG_GETARG_POINTER(0)) == NULL) {
  +        ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
  +                errmsg("invalid first UUID datum argument")));
  +        PG_RETURN_NULL();
  +    }
  +    if ((uuid_datum2 = (uuid_datum_t *)PG_GETARG_POINTER(1)) == NULL) {
  +        ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
  +                errmsg("invalid second UUID datum argument")));
  +        PG_RETURN_NULL();
  +    }
  +
  +    /* load both UUIDs */
  +    if ((rc = uuid_create(&uuid1)) != UUID_RC_OK) {
  +        ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
  +                errmsg("failed to create UUID object: %s", uuid_error(rc))));
  +        PG_RETURN_NULL();
  +    }
  +    if ((rc = uuid_create(&uuid2)) != UUID_RC_OK) {
  +        ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
  +                errmsg("failed to create UUID object: %s", uuid_error(rc))));
  +        uuid_destroy(uuid1);
  +        PG_RETURN_NULL();
  +    }
  +    if ((rc = uuid_import(uuid1, UUID_FMT_BIN, uuid_datum1->uuid_bin, sizeof(uuid_datum1->uuid_bin))) != UUID_RC_OK) {
  +        ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
  +                errmsg("failed to import UUID: %s", uuid_error(rc))));
  +        uuid_destroy(uuid1);
  +        uuid_destroy(uuid2);
  +        PG_RETURN_NULL();
  +    }
  +    if ((rc = uuid_import(uuid2, UUID_FMT_BIN, uuid_datum2->uuid_bin, sizeof(uuid_datum2->uuid_bin))) != UUID_RC_OK) {
  +        ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
  +                errmsg("failed to import UUID: %s", uuid_error(rc))));
  +        uuid_destroy(uuid1);
  +        uuid_destroy(uuid2);
  +        PG_RETURN_NULL();
  +    }
  +
  +    /* compare UUIDs */
  +    if ((rc = uuid_compare(uuid1, uuid2, &result)) != UUID_RC_OK) {
  +        uuid_destroy(uuid1);
  +        uuid_destroy(uuid2);
  +        PG_RETURN_NULL();
  +    }
  +
  +    /* cleanup */
  +    uuid_destroy(uuid1);
  +    uuid_destroy(uuid2);
  +
  +    /* return result */
  +    return result;
  +}
  +
  +/* API function: uuid_eq */
  +PG_FUNCTION_INFO_V1(pg_uuid_eq);
  +Datum pg_uuid_eq(PG_FUNCTION_ARGS)
  +{
  +    int rc;
  +
  +    rc = _uuid_cmp(fcinfo);
  +    PG_RETURN_BOOL(rc == 0);
  +}
  +
  +/* API function: uuid_ne */
  +PG_FUNCTION_INFO_V1(pg_uuid_ne);
  +Datum pg_uuid_ne(PG_FUNCTION_ARGS)
  +{
  +    int rc;
  +
  +    rc = _uuid_cmp(fcinfo);
  +    PG_RETURN_BOOL(rc != 0);
  +}
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/pgsql/uuid.sql.in
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid.sql.in
  --- /dev/null	2006-01-12 21:00:23 +0100
  +++ uuid.sql.in	2006-01-12 21:00:24 +0100
  @@ -0,0 +1,120 @@
  +--
  +--  OSSP uuid - Universally Unique Identifier
  +--  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  +--  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +--
  +--  This file is part of OSSP uuid, a library for the generation
  +--  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +--
  +--  Permission to use, copy, modify, and distribute this software for
  +--  any purpose with or without fee is hereby granted, provided that
  +--  the above copyright notice and this permission notice appear in all
  +--  copies.
  +--
  +--  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +--  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +--  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +--  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +--  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +--  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +--  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +--  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +--  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +--  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +--  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +--  SUCH DAMAGE.
  +--
  +--  uuid.sql: PostgreSQL Binding (SQL part)
  +--
  +
  +SET search_path TO public;
  +
  +--  DROP FUNCTION uuid_in(CSTRING)    CASCADE;
  +--  DROP FUNCTION uuid_out(uuid)      CASCADE;
  +--  DROP FUNCTION uuid_recv(INTERNAL) CASCADE;
  +--  DROP FUNCTION uuid_send(uuid)     CASCADE;
  +
  +--
  +--  the UUID data type
  +--
  +
  +CREATE FUNCTION
  +    uuid_in(CSTRING) RETURNS uuid
  +    STRICT
  +    LANGUAGE C AS '@MODULE_PATHNAME@', 'pg_uuid_in';
  +
  +CREATE FUNCTION
  +    uuid_out(uuid) RETURNS CSTRING
  +    STRICT
  +    LANGUAGE C AS '@MODULE_PATHNAME@', 'pg_uuid_out';
  +
  +CREATE FUNCTION
  +    uuid_recv(INTERNAL) RETURNS uuid
  +    STRICT
  +    LANGUAGE C AS '@MODULE_PATHNAME@', 'pg_uuid_in';
  +
  +CREATE FUNCTION
  +    uuid_send(uuid) RETURNS BYTEA
  +    STRICT
  +    LANGUAGE C AS '@MODULE_PATHNAME@', 'pg_uuid_out';
  +
  +CREATE TYPE uuid (
  +    INPUT   = uuid_in,   -- for SQL input
  +    OUTPUT  = uuid_out,  -- for SQL output
  +    RECEIVE = uuid_recv, -- for DB input
  +    SEND    = uuid_send, -- for DB output
  +    DEFAULT = 'uuid(1)',
  +    INTERNALLENGTH = 16,
  +    ALIGNMENT = char
  +);
  +
  +COMMENT ON TYPE uuid
  +    IS 'UUID type';
  +
  +--
  +--  the UUID constructor function
  +--
  +
  +CREATE FUNCTION
  +    uuid(CSTRING) RETURNS uuid
  +    IMMUTABLE STRICT
  +    LANGUAGE C AS '@MODULE_PATHNAME@', 'pg_uuid_in';
  +
  +CREATE FUNCTION
  +    uuid(INTEGER) RETURNS uuid
  +    VOLATILE CALLED ON NULL INPUT
  +    LANGUAGE C AS '@MODULE_PATHNAME@', 'pg_uuid_make';
  +
  +CREATE FUNCTION
  +    uuid(INTEGER, CSTRING, CSTRING) RETURNS uuid
  +    VOLATILE CALLED ON NULL INPUT
  +    LANGUAGE C AS '@MODULE_PATHNAME@', 'pg_uuid_make';
  +
  +--
  +--  the UUID operators
  +--
  +
  +CREATE FUNCTION
  +    uuid_eq(uuid, uuid) RETURNS BOOL
  +    IMMUTABLE STRICT
  +    LANGUAGE C AS '@MODULE_PATHNAME@', 'pg_uuid_eq';
  +
  +CREATE FUNCTION
  +    uuid_ne(uuid, uuid) RETURNS BOOL
  +    IMMUTABLE STRICT
  +    LANGUAGE C AS '@MODULE_PATHNAME@', 'pg_uuid_ne';
  +
  +CREATE OPERATOR = (
  +    leftarg    = uuid,
  +    rightarg   = uuid,
  +    negator    = <>,
  +    procedure  = uuid_eq
  +);
  +
  +CREATE OPERATOR <> (
  +    leftarg    = uuid,
  +    rightarg   = uuid,
  +    negator    = =,
  +    procedure  = uuid_ne
  +);
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/pgsql/uuid.txt
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid.txt
  --- /dev/null	2006-01-12 21:00:23 +0100
  +++ uuid.txt	2006-01-12 21:00:24 +0100
  @@ -0,0 +1,36 @@
  +
  +  OSSP uuid bindings for PostgreSQL
  +  =================================
  +
  +  This is the OSSP uuid binding for the PostgreSQL RDBMS, providing
  +  native UUID data type support.
  +
  +  Installation
  +  ------------
  +
  +  In order to install the OSSP uuid binding into the PostgreSQL database
  +  <database> one has run:
  +
  +  $ <prefix>/bin/psql \
  +    -d <database> \
  +    -U postgresql \
  +    -f <prefix>/share/postgresql/uuid.sql
  +
  +  Usage
  +  -----
  +
  +  psql -d <database>
  +  psql> CREATE TABLE test (id UUID DEFAULT uuid(1), name TEXT);
  +  psql> INSERT INTO test (name) VALUES
  +        ('foo');
  +  psql> INSERT INTO test (id, name) VALUES
  +        (uuid(1), 'bar');
  +  psql> INSERT INTO test (id, name) VALUES
  +        (uuid(3, 'ns:URL', 'http://www.ossp.org/'), 'baz');
  +  psql> INSERT INTO test (id, name) VALUES
  +        (uuid(3, '6ba7b811-9dad-11d1-80b4-00c04fd430c8',
  +                 'http://www.ossp.org/'), 'quux');
  +  psql> SELECT uuid(4);
  +  psql> SELECT * FROM test WHERE id = uuid(3, 'ns:URL', 'http://www.ossp.org/');
  +  psql> DROP TABLE test;
  +
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 12 21:30:17 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 417EF752952; Thu, 12 Jan 2006 21:30:17 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/pgsql/ .cvsignore
Message-Id: <20060112203017.417EF752952@mail.ossp.org>
Date: Thu, 12 Jan 2006 21:30:17 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Jan-2006 21:30:17
  Branch: HEAD                             Handle: 2006011220301600

  Added files:
    ossp-pkg/uuid/pgsql     .cvsignore

  Log:
    ignore files

  Summary:
    Revision    Changes     Path
    1.1         +5  -0      ossp-pkg/uuid/pgsql/.cvsignore
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/pgsql/.cvsignore
  ============================================================================
  $ cvs diff -u -r0 -r1.1 .cvsignore
  --- /dev/null	2006-01-12 21:30:07 +0100
  +++ .cvsignore	2006-01-12 21:30:16 +0100
  @@ -0,0 +1,5 @@
  +libuuid.a
  +libuuid.so.1
  +libuuid.so
  +uuid.sql
  +uuid.o
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 12 21:31:51 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 7A9C6752954; Thu, 12 Jan 2006 21:31:51 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ Makefile.in devtool.conf ossp-pkg/uuid/pgsq...
Message-Id: <20060112203151.7A9C6752954@mail.ossp.org>
Date: Thu, 12 Jan 2006 21:31:51 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Jan-2006 21:31:51
  Branch: HEAD                             Handle: 2006011220315001

  Modified files:
    ossp-pkg/uuid           Makefile.in devtool.conf uuid.ac
    ossp-pkg/uuid/pgsql     Makefile

  Log:
    hook PostgreSQL bindings into regular build environment

  Summary:
    Revision    Changes     Path
    1.38        +26 -1      ossp-pkg/uuid/Makefile.in
    1.24        +1  -0      ossp-pkg/uuid/devtool.conf
    1.2         +6  -1      ossp-pkg/uuid/pgsql/Makefile
    1.19        +23 -0      ossp-pkg/uuid/uuid.ac
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	2 Sep 2005 18:16:13 -0000	1.37
  +++ ossp-pkg/uuid/Makefile.in	12 Jan 2006 20:31:50 -0000	1.38
  @@ -59,6 +59,7 @@
   POD2MAN     = pod2man
   PERL        = @PERL@
   PHP         = @PHP@
  +PG_CONFIG   = @PG_CONFIG@
   
   LIB_NAME    = libuuid.la
   LIB_OBJS    = uuid.lo uuid_md5.lo uuid_sha1.lo uuid_prng.lo uuid_mac.lo uuid_ui64.lo uuid_str.lo
  @@ -80,13 +81,17 @@
   PHP_NAME    = $(S)/php/modules/uuid.so
   PHP_OBJS    = $(S)/php/uuid.c
   
  -TARGETS     = $(LIB_NAME) @DCE_NAME@ @CXX_NAME@ $(PRG_NAME) @PERL_NAME@ @PHP_NAME@
  +PGSQL_NAME  = $(S)/pgsql/libuuid.so
  +PGSQL_OBJS  = $(S)/pgsql/uuid.c
  +
  +TARGETS     = $(LIB_NAME) @DCE_NAME@ @CXX_NAME@ $(PRG_NAME) @PERL_NAME@ @PHP_NAME@ @PGSQL_NAME@
   
   WITH_DCE         = @WITH_DCE@
   WITH_CXX         = @WITH_CXX@
   WITH_PERL        = @WITH_PERL@
   WITH_PERL_COMPAT = @WITH_PERL_COMPAT@
   WITH_PHP         = @WITH_PHP@
  +WITH_PGSQL       = @WITH_PGSQL@
   
   .SUFFIXES:
   .SUFFIXES: .c .cc .o .lo
  @@ -128,6 +133,10 @@
   	@cd $(S)/php && $(MAKE) $(MFLAGS) -f Makefile.local PHP=$(PHP)
   	@touch $(PHP_NAME)
   
  +$(PGSQL_NAME): $(PGSQL_OBJS) $(LIB_NAME)
  +	@cd $(S)/pgsql && $(MAKE) $(MFLAGS) PG_CONFIG=$(PG_CONFIG)
  +	@touch $(PGSQL_NAME)
  +
   uuid.lo: $(S)/uuid.c uuid.h $(S)/uuid_md5.h $(S)/uuid_sha1.h $(S)/uuid_prng.h $(S)/uuid_mac.h $(S)/uuid_ui64.h $(S)/uuid_str.h $(S)/uuid_bm.h $(S)/uuid_ac.h
   uuid_mac.lo: $(S)/uuid_mac.c $(S)/uuid_mac.h
   uuid_md5.lo: $(S)/uuid_md5.c $(S)/uuid_md5.h
  @@ -205,6 +214,10 @@
   	    echo "==== PHP bindings to C API"; \
   	    (cd $(S)/php && $(MAKE) $(MFLAGS) -f Makefile.local test PHP=$(PHP)); \
   	fi
  +	-@if [ ".$(WITH_PGSQL)" = .yes ]; then \
  +	    echo "==== PGSQL bindings to C API"; \
  +	    (cd $(S)/pgsql && $(MAKE) $(MFLAGS) test PG_CONFIG=$(PG_CONFIG)); \
  +	fi
   
   install:
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
  @@ -245,6 +258,9 @@
   	-@if [ ".$(WITH_PHP)" = .yes ]; then \
   	    (cd $(S)/php && $(MAKE) $(MFLAGS) -f Makefile.local install EXTDIR=$(prefix)/lib/php PHP=$(PHP) DESTDIR=$(DESTDIR)); \
   	fi
  +	-@if [ ".$(WITH_PGSQL)" = .yes ]; then \
  +	    (cd $(S)/pgsql && $(MAKE) $(MFLAGS) install DESTDIR=$(DESTDIR) PG_CONFIG=$(PG_CONFIG)); \
  +	fi
   
   uninstall:
   	-$(RM) $(DESTDIR)$(mandir)/man1/uuid.1
  @@ -301,6 +317,9 @@
   	-@if [ ".$(WITH_PHP)" = .yes ]; then \
   	    (cd $(S)/php && $(MAKE) $(MFLAGS) -f Makefile.local clean || true); \
   	fi
  +	-@if [ ".$(WITH_PGSQL)" = .yes ]; then \
  +	    (cd $(S)/pgsql && $(MAKE) $(MFLAGS) clean PG_CONFIG=$(PG_CONFIG) || true); \
  +	fi
   
   distclean: clean
   	-$(RM) config.log config.status config.cache
  @@ -312,6 +331,9 @@
   	-@if [ ".$(WITH_PHP)" = .yes ]; then \
   	    (cd $(S)/php && $(MAKE) $(MFLAGS) -f Makefile.local distclean || true); \
   	fi
  +	-@if [ ".$(WITH_PGSQL)" = .yes ]; then \
  +	    (cd $(S)/pgsql && $(MAKE) $(MFLAGS) distclean PG_CONFIG=$(PG_CONFIG) || true); \
  +	fi
   
   realclean: distclean
   	-$(RM) uuid.3 uuid.1
  @@ -324,4 +346,7 @@
   	-@if [ ".$(WITH_PHP)" = .yes ]; then \
   	    (cd $(S)/php && $(MAKE) $(MFLAGS) -f Makefile.local realclean || true); \
   	fi
  +	-@if [ ".$(WITH_PGSQL)" = .yes ]; then \
  +	    (cd $(S)/pgsql && $(MAKE) $(MFLAGS) realclean PG_CONFIG=$(PG_CONFIG) || true); \
  +	fi
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 devtool.conf
  --- ossp-pkg/uuid/devtool.conf	7 Jan 2006 08:11:40 -0000	1.23
  +++ ossp-pkg/uuid/devtool.conf	12 Jan 2006 20:31:50 -0000	1.24
  @@ -22,6 +22,7 @@
           --with-perl \
           --with-perl-compat \
           --with-php \
  +        --with-pgsql \
           "$@"
   
   %version
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/pgsql/Makefile
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 Makefile
  --- ossp-pkg/uuid/pgsql/Makefile	12 Jan 2006 20:00:23 -0000	1.1
  +++ ossp-pkg/uuid/pgsql/Makefile	12 Jan 2006 20:31:51 -0000	1.2
  @@ -12,7 +12,8 @@
   #   DSO. Hence we fiddle around with the Makefiles which "PGXS" uses
   #   itself ourself.
   
  -PGXS              := $(shell pg_config --pgxs)
  +PG_CONFIG         ?= pg_config
  +PGXS              := $(shell $(PG_CONFIG) --pgxs)
   top_builddir      := $(dir $(PGXS))../..
   include           $(top_builddir)/src/Makefile.global
       
  @@ -48,3 +49,7 @@
   	rm -f $(OBJS)
   	rm -f uuid.sql
   
  +realclean: distclean
  +
  +test:
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.ac
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 uuid.ac
  --- ossp-pkg/uuid/uuid.ac	2 Sep 2005 14:32:40 -0000	1.18
  +++ ossp-pkg/uuid/uuid.ac	12 Jan 2006 20:31:50 -0000	1.19
  @@ -156,5 +156,28 @@
       if test ".$ac_cv_with_php" = ".yes"; then
           (cd php && make -f Makefile.local config PHP=$PHP)
       fi
  +
  +    dnl #   configure option --with-pgsql
  +    AC_ARG_WITH([pgsql],
  +        AS_HELP_STRING([--with-pgsql], [build PostgreSQL bindings to C API]),
  +        [ac_cv_with_pgsql=$withval], [ac_cv_with_pgsql=no])
  +    AC_CACHE_CHECK([whether to build PostgreSQL bindings to C API], [ac_cv_with_pgsql], [ac_cv_with_pgsql=no])
  +    if test ".$ac_cv_with_pgsql" = ".yes"; then
  +        AC_DEFINE(WITH_PGSQL, 1, [whether to build PostgreSQL bindings to C API])
  +        WITH_PGSQL='yes'
  +        PGSQL_NAME='$(PGSQL_NAME)'
  +    else
  +        WITH_PGSQL='no'
  +        PGSQL_NAME=''
  +    fi
  +    AC_SUBST(PGSQL_NAME)
  +    AC_SUBST(WITH_PGSQL)
  +    AC_PATH_PROGS(PG_CONFIG, pg_config, NA)
  +    if test ".$ac_cv_with_pgsql" = ".yes" -a ".$PG_CONFIG" = ".NA"; then
  +        AC_ERROR([required PostgreSQL pg_config utility not found in \$PATH])
  +    fi
  +    if test ".$ac_cv_with_pgsql" = ".yes" -a ".`${MAKE-make} -v 2>/dev/null | grep GNU`" = .; then
  +        AC_ERROR([PostgreSQL bindings require GNU make to build])
  +    fi
   ])
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 12 21:32:43 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id BA05575292E; Thu, 12 Jan 2006 21:32:43 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog README ossp-pkg/uuid/perl/ uuid.p...
Message-Id: <20060112203243.BA05575292E@mail.ossp.org>
Date: Thu, 12 Jan 2006 21:32:43 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Jan-2006 21:32:43
  Branch: HEAD                             Handle: 2006011220324201

  Modified files:
    ossp-pkg/uuid           ChangeLog README uuid_vers.h
    ossp-pkg/uuid/perl      uuid.pm uuid_compat.pm

  Log:
    bump up the version because of PostgreSQL bindings

  Summary:
    Revision    Changes     Path
    1.101       +1  -1      ossp-pkg/uuid/ChangeLog
    1.35        +1  -1      ossp-pkg/uuid/README
    1.14        +1  -1      ossp-pkg/uuid/perl/uuid.pm
    1.5         +1  -1      ossp-pkg/uuid/perl/uuid_compat.pm
    1.20        +9  -9      ossp-pkg/uuid/uuid_vers.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.100 -r1.101 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	12 Jan 2006 20:00:23 -0000	1.100
  +++ ossp-pkg/uuid/ChangeLog	12 Jan 2006 20:32:42 -0000	1.101
  @@ -11,7 +11,7 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 1.3.2 and 1.3.3 (06-Dec-2005 to 12-Jan-2006)
  +  Changes between 1.3.2 and 1.4.0 (06-Dec-2005 to 12-Jan-2006)
   
      o Added experimental PostgreSQL bindings.
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 README
  --- ossp-pkg/uuid/README	6 Dec 2005 11:52:11 -0000	1.34
  +++ ossp-pkg/uuid/README	12 Jan 2006 20:32:42 -0000	1.35
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
   
     OSSP uuid - Universally Unique Identifier
  -  Version 1.3.2 (06-Dec-2005)
  +  Version 1.4.0 (12-Jan-2006)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.pm
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 uuid.pm
  --- ossp-pkg/uuid/perl/uuid.pm	6 Dec 2005 11:52:11 -0000	1.13
  +++ ossp-pkg/uuid/perl/uuid.pm	12 Jan 2006 20:32:43 -0000	1.14
  @@ -118,7 +118,7 @@
   use Exporter;
   
   #   API version
  -our $VERSION = do { my @v = ('1.3.2' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
  +our $VERSION = do { my @v = ('1.4.0' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
   
   #   API inheritance
   our @ISA = qw(Exporter);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid_compat.pm
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 uuid_compat.pm
  --- ossp-pkg/uuid/perl/uuid_compat.pm	6 Dec 2005 11:52:11 -0000	1.4
  +++ ossp-pkg/uuid/perl/uuid_compat.pm	12 Jan 2006 20:32:43 -0000	1.5
  @@ -42,7 +42,7 @@
   our @ISA     = qw(Exporter);
   our @EXPORT  = qw(NameSpace_DNS NameSpace_OID NameSpace_URL NameSpace_X500);
   
  -our $VERSION = do { my @v = ('1.3.2' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
  +our $VERSION = do { my @v = ('1.4.0' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
   
   sub new {
       my $class = shift;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_vers.h
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 uuid_vers.h
  --- ossp-pkg/uuid/uuid_vers.h	6 Dec 2005 11:52:11 -0000	1.19
  +++ ossp-pkg/uuid/uuid_vers.h	12 Jan 2006 20:32:42 -0000	1.20
  @@ -8,7 +8,7 @@
   #ifndef _UUID_VERS_H_
   #define _UUID_VERS_H_
   
  -#define _UUID_VERSION 0x103202
  +#define _UUID_VERSION 0x104200
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _UUID_VERS_H_AS_HEADER_
   
   _uuid_version_t _uuid_version = {
  -    0x103202,
  -    "1.3.2",
  -    "1.3.2 (06-Dec-2005)",
  -    "This is OSSP uuid, Version 1.3.2 (06-Dec-2005)",
  -    "OSSP uuid 1.3.2 (06-Dec-2005)",
  -    "OSSP uuid/1.3.2",
  -    "@(#)OSSP uuid 1.3.2 (06-Dec-2005)",
  -    "$Id: OSSP uuid 1.3.2 (06-Dec-2005) $"
  +    0x104200,
  +    "1.4.0",
  +    "1.4.0 (12-Jan-2006)",
  +    "This is OSSP uuid, Version 1.4.0 (12-Jan-2006)",
  +    "OSSP uuid 1.4.0 (12-Jan-2006)",
  +    "OSSP uuid/1.4.0",
  +    "@(#)OSSP uuid 1.4.0 (12-Jan-2006)",
  +    "$Id: OSSP uuid 1.4.0 (12-Jan-2006) $"
   };
   
   #endif /* _UUID_VERS_H_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 12 22:01:02 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 7B80C752947; Thu, 12 Jan 2006 22:01:02 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/pgsql/ uuid.sql.in
Message-Id: <20060112210102.7B80C752947@mail.ossp.org>
Date: Thu, 12 Jan 2006 22:01:02 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Jan-2006 22:01:02
  Branch: HEAD                             Handle: 2006011221010200

  Modified files:
    ossp-pkg/uuid/pgsql     uuid.sql.in

  Log:
    more dropping of existing stuff and use a transaction

  Summary:
    Revision    Changes     Path
    1.2         +22 -4      ossp-pkg/uuid/pgsql/uuid.sql.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/pgsql/uuid.sql.in
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid.sql.in
  --- ossp-pkg/uuid/pgsql/uuid.sql.in	12 Jan 2006 20:00:23 -0000	1.1
  +++ ossp-pkg/uuid/pgsql/uuid.sql.in	12 Jan 2006 21:01:02 -0000	1.2
  @@ -27,12 +27,24 @@
   --  uuid.sql: PostgreSQL Binding (SQL part)
   --
   
  +--
  +--  prolog
  +--
  +
   SET search_path TO public;
   
  ---  DROP FUNCTION uuid_in(CSTRING)    CASCADE;
  ---  DROP FUNCTION uuid_out(uuid)      CASCADE;
  ---  DROP FUNCTION uuid_recv(INTERNAL) CASCADE;
  ---  DROP FUNCTION uuid_send(uuid)     CASCADE;
  +DROP FUNCTION uuid_in(CSTRING)    CASCADE;
  +DROP FUNCTION uuid_out(uuid)      CASCADE;
  +DROP FUNCTION uuid_recv(INTERNAL) CASCADE;
  +DROP FUNCTION uuid_send(uuid)     CASCADE;
  +DROP TYPE     uuid                CASCADE;
  +DROP FUNCTION uuid(uuid)          CASCADE;
  +DROP FUNCTION uuid_eq(uuid)       CASCADE;
  +DROP FUNCTION uuid_ne(uuid)       CASCADE;
  +DROP OPERATOR =(uuid,uuid)        CASCADE;
  +DROP OPERATOR <>(uuid,uuid)       CASCADE;
  +
  +BEGIN;
   
   --
   --  the UUID data type
  @@ -118,3 +130,9 @@
       procedure  = uuid_ne
   );
   
  +--
  +--  epilog
  +--
  +
  +COMMIT;
  +
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jan 13 07:44:36 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id AA78475296E; Fri, 13 Jan 2006 07:44:35 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog Makefile.in README configure.ac o...
Message-Id: <20060113064435.AA78475296E@mail.ossp.org>
Date: Fri, 13 Jan 2006 07:44:35 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Jan-2006 07:44:35
  Branch: HEAD                             Handle: 2006011306443004

  Modified files:
    ossp-pkg/uuid           ChangeLog Makefile.in README configure.ac
                            uuid++.cc uuid++.hh uuid++.pod uuid-config.in
                            uuid-config.pod uuid.ac uuid.c uuid.h.in
                            uuid.pc.in uuid.pod uuid_ac.h uuid_bm.h uuid_cli.c
                            uuid_cli.pod uuid_dce.c uuid_dce.h uuid_mac.c
                            uuid_mac.h uuid_md5.c uuid_md5.h uuid_prng.c
                            uuid_prng.h uuid_sha1.c uuid_sha1.h uuid_str.c
                            uuid_str.h
    ossp-pkg/uuid/perl      Makefile.PL uuid.pm uuid.pod uuid.tm uuid.ts
                            uuid.xs uuid_compat.pm uuid_compat.pod
                            uuid_compat.ts
    ossp-pkg/uuid/pgsql     uuid.c uuid.sql.in
    ossp-pkg/uuid/php       Makefile.local config.m4 uuid.c uuid.php4
                            uuid.php5 uuid.ts

  Log:
    Adjust copyright messages for new year 2006.

  Summary:
    Revision    Changes     Path
    1.102       +3  -0      ossp-pkg/uuid/ChangeLog
    1.39        +2  -2      ossp-pkg/uuid/Makefile.in
    1.36        +2  -2      ossp-pkg/uuid/README
    1.11        +2  -2      ossp-pkg/uuid/configure.ac
    1.10        +2  -2      ossp-pkg/uuid/perl/Makefile.PL
    1.15        +2  -2      ossp-pkg/uuid/perl/uuid.pm
    1.10        +2  -2      ossp-pkg/uuid/perl/uuid.pod
    1.4         +2  -2      ossp-pkg/uuid/perl/uuid.tm
    1.4         +2  -2      ossp-pkg/uuid/perl/uuid.ts
    1.5         +2  -2      ossp-pkg/uuid/perl/uuid.xs
    1.6         +2  -2      ossp-pkg/uuid/perl/uuid_compat.pm
    1.3         +2  -2      ossp-pkg/uuid/perl/uuid_compat.pod
    1.2         +2  -2      ossp-pkg/uuid/perl/uuid_compat.ts
    1.2         +2  -2      ossp-pkg/uuid/pgsql/uuid.c
    1.3         +2  -2      ossp-pkg/uuid/pgsql/uuid.sql.in
    1.3         +2  -2      ossp-pkg/uuid/php/Makefile.local
    1.2         +2  -2      ossp-pkg/uuid/php/config.m4
    1.4         +2  -2      ossp-pkg/uuid/php/uuid.c
    1.2         +2  -2      ossp-pkg/uuid/php/uuid.php4
    1.2         +2  -2      ossp-pkg/uuid/php/uuid.php5
    1.2         +2  -2      ossp-pkg/uuid/php/uuid.ts
    1.5         +2  -2      ossp-pkg/uuid/uuid++.cc
    1.3         +2  -2      ossp-pkg/uuid/uuid++.hh
    1.2         +2  -2      ossp-pkg/uuid/uuid++.pod
    1.5         +2  -2      ossp-pkg/uuid/uuid-config.in
    1.4         +2  -2      ossp-pkg/uuid/uuid-config.pod
    1.20        +2  -2      ossp-pkg/uuid/uuid.ac
    1.57        +2  -2      ossp-pkg/uuid/uuid.c
    1.10        +2  -2      ossp-pkg/uuid/uuid.h.in
    1.2         +2  -2      ossp-pkg/uuid/uuid.pc.in
    1.33        +2  -2      ossp-pkg/uuid/uuid.pod
    1.5         +2  -2      ossp-pkg/uuid/uuid_ac.h
    1.6         +2  -2      ossp-pkg/uuid/uuid_bm.h
    1.20        +2  -2      ossp-pkg/uuid/uuid_cli.c
    1.24        +2  -2      ossp-pkg/uuid/uuid_cli.pod
    1.4         +2  -2      ossp-pkg/uuid/uuid_dce.c
    1.3         +2  -2      ossp-pkg/uuid/uuid_dce.h
    1.9         +2  -2      ossp-pkg/uuid/uuid_mac.c
    1.4         +2  -2      ossp-pkg/uuid/uuid_mac.h
    1.12        +2  -2      ossp-pkg/uuid/uuid_md5.c
    1.5         +2  -2      ossp-pkg/uuid/uuid_md5.h
    1.11        +2  -2      ossp-pkg/uuid/uuid_prng.c
    1.4         +2  -2      ossp-pkg/uuid/uuid_prng.h
    1.3         +2  -2      ossp-pkg/uuid/uuid_sha1.c
    1.2         +2  -2      ossp-pkg/uuid/uuid_sha1.h
    1.6         +2  -2      ossp-pkg/uuid/uuid_str.c
    1.3         +2  -2      ossp-pkg/uuid/uuid_str.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.101 -r1.102 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	12 Jan 2006 20:32:42 -0000	1.101
  +++ ossp-pkg/uuid/ChangeLog	13 Jan 2006 06:44:30 -0000	1.102
  @@ -13,6 +13,9 @@
   
     Changes between 1.3.2 and 1.4.0 (06-Dec-2005 to 12-Jan-2006)
   
  +   o Adjust copyright messages for new year 2006.
  +     [Ralf S. Engelschall]
  +
      o Added experimental PostgreSQL bindings.
        [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.38 -r1.39 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	12 Jan 2006 20:31:50 -0000	1.38
  +++ ossp-pkg/uuid/Makefile.in	13 Jan 2006 06:44:30 -0000	1.39
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 README
  --- ossp-pkg/uuid/README	12 Jan 2006 20:32:42 -0000	1.35
  +++ ossp-pkg/uuid/README	13 Jan 2006 06:44:30 -0000	1.36
  @@ -29,8 +29,8 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   
     This file is part of OSSP uuid, a library for the generation
     of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/configure.ac
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 configure.ac
  --- ossp-pkg/uuid/configure.ac	31 Aug 2005 11:16:18 -0000	1.10
  +++ ossp-pkg/uuid/configure.ac	13 Jan 2006 06:44:30 -0000	1.11
  @@ -1,7 +1,7 @@
   dnl ##
   dnl ##  OSSP uuid - Universally Unique Identifier
  -dnl ##  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   dnl ##
   dnl ##  This file is part of OSSP uuid, a library for the generation
   dnl ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/Makefile.PL
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 Makefile.PL
  --- ossp-pkg/uuid/perl/Makefile.PL	2 Sep 2005 18:47:53 -0000	1.9
  +++ ossp-pkg/uuid/perl/Makefile.PL	13 Jan 2006 06:44:33 -0000	1.10
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.pm
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 uuid.pm
  --- ossp-pkg/uuid/perl/uuid.pm	12 Jan 2006 20:32:43 -0000	1.14
  +++ ossp-pkg/uuid/perl/uuid.pm	13 Jan 2006 06:44:33 -0000	1.15
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 uuid.pod
  --- ossp-pkg/uuid/perl/uuid.pod	2 Sep 2005 14:00:05 -0000	1.9
  +++ ossp-pkg/uuid/perl/uuid.pod	13 Jan 2006 06:44:33 -0000	1.10
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.tm
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 uuid.tm
  --- ossp-pkg/uuid/perl/uuid.tm	31 Dec 2004 19:20:39 -0000	1.3
  +++ ossp-pkg/uuid/perl/uuid.tm	13 Jan 2006 06:44:33 -0000	1.4
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.ts
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 uuid.ts
  --- ossp-pkg/uuid/perl/uuid.ts	31 Aug 2005 08:55:18 -0000	1.3
  +++ ossp-pkg/uuid/perl/uuid.ts	13 Jan 2006 06:44:33 -0000	1.4
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.xs
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 uuid.xs
  --- ossp-pkg/uuid/perl/uuid.xs	23 Jan 2005 12:38:10 -0000	1.4
  +++ ossp-pkg/uuid/perl/uuid.xs	13 Jan 2006 06:44:33 -0000	1.5
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid_compat.pm
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 uuid_compat.pm
  --- ossp-pkg/uuid/perl/uuid_compat.pm	12 Jan 2006 20:32:43 -0000	1.5
  +++ ossp-pkg/uuid/perl/uuid_compat.pm	13 Jan 2006 06:44:33 -0000	1.6
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2004 Piotr Roszatycki <dexter@debian.org>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid_compat.pod
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid_compat.pod
  --- ossp-pkg/uuid/perl/uuid_compat.pod	6 Dec 2005 07:38:49 -0000	1.2
  +++ ossp-pkg/uuid/perl/uuid_compat.pod	13 Jan 2006 06:44:33 -0000	1.3
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid_compat.ts
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid_compat.ts
  --- ossp-pkg/uuid/perl/uuid_compat.ts	31 Aug 2005 09:59:45 -0000	1.1
  +++ ossp-pkg/uuid/perl/uuid_compat.ts	13 Jan 2006 06:44:33 -0000	1.2
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2004 Piotr Roszatycki <dexter@debian.org>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/pgsql/uuid.c
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid.c
  --- ossp-pkg/uuid/pgsql/uuid.c	12 Jan 2006 20:00:23 -0000	1.1
  +++ ossp-pkg/uuid/pgsql/uuid.c	13 Jan 2006 06:44:34 -0000	1.2
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/pgsql/uuid.sql.in
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid.sql.in
  --- ossp-pkg/uuid/pgsql/uuid.sql.in	12 Jan 2006 21:01:02 -0000	1.2
  +++ ossp-pkg/uuid/pgsql/uuid.sql.in	13 Jan 2006 06:44:34 -0000	1.3
  @@ -1,7 +1,7 @@
   --
   --  OSSP uuid - Universally Unique Identifier
  ---  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  ---  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +--  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +--  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   --
   --  This file is part of OSSP uuid, a library for the generation
   --  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/php/Makefile.local
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 Makefile.local
  --- ossp-pkg/uuid/php/Makefile.local	2 Sep 2005 14:40:13 -0000	1.2
  +++ ossp-pkg/uuid/php/Makefile.local	13 Jan 2006 06:44:34 -0000	1.3
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/php/config.m4
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 config.m4
  --- ossp-pkg/uuid/php/config.m4	1 Sep 2005 22:24:02 -0000	1.1
  +++ ossp-pkg/uuid/php/config.m4	13 Jan 2006 06:44:34 -0000	1.2
  @@ -1,7 +1,7 @@
   dnl
   dnl  OSSP uuid - Universally Unique Identifier
  -dnl  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -dnl  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +dnl  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +dnl  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   dnl
   dnl  This file is part of OSSP uuid, a library for the generation
   dnl  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/php/uuid.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 uuid.c
  --- ossp-pkg/uuid/php/uuid.c	20 Sep 2005 20:30:05 -0000	1.3
  +++ ossp-pkg/uuid/php/uuid.c	13 Jan 2006 06:44:34 -0000	1.4
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/php/uuid.php4
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid.php4
  --- ossp-pkg/uuid/php/uuid.php4	1 Sep 2005 22:24:02 -0000	1.1
  +++ ossp-pkg/uuid/php/uuid.php4	13 Jan 2006 06:44:34 -0000	1.2
  @@ -1,8 +1,8 @@
   <?php
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/php/uuid.php5
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid.php5
  --- ossp-pkg/uuid/php/uuid.php5	1 Sep 2005 22:24:02 -0000	1.1
  +++ ossp-pkg/uuid/php/uuid.php5	13 Jan 2006 06:44:34 -0000	1.2
  @@ -1,8 +1,8 @@
   <?php
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/php/uuid.ts
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid.ts
  --- ossp-pkg/uuid/php/uuid.ts	1 Sep 2005 22:24:02 -0000	1.1
  +++ ossp-pkg/uuid/php/uuid.ts	13 Jan 2006 06:44:34 -0000	1.2
  @@ -1,8 +1,8 @@
   <?php
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid++.cc
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 uuid++.cc
  --- ossp-pkg/uuid/uuid++.cc	25 Sep 2005 10:41:18 -0000	1.4
  +++ ossp-pkg/uuid/uuid++.cc	13 Jan 2006 06:44:30 -0000	1.5
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid++.hh
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid++.hh
  --- ossp-pkg/uuid/uuid++.hh	31 Aug 2005 20:07:29 -0000	1.2
  +++ ossp-pkg/uuid/uuid++.hh	13 Jan 2006 06:44:30 -0000	1.3
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid++.pod
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid++.pod
  --- ossp-pkg/uuid/uuid++.pod	31 Aug 2005 20:07:29 -0000	1.1
  +++ ossp-pkg/uuid/uuid++.pod	13 Jan 2006 06:44:30 -0000	1.2
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid-config.in
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 uuid-config.in
  --- ossp-pkg/uuid/uuid-config.in	31 Dec 2004 19:20:34 -0000	1.4
  +++ ossp-pkg/uuid/uuid-config.in	13 Jan 2006 06:44:30 -0000	1.5
  @@ -1,8 +1,8 @@
   #!/bin/sh
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid-config.pod
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 uuid-config.pod
  --- ossp-pkg/uuid/uuid-config.pod	31 Dec 2004 19:20:34 -0000	1.3
  +++ ossp-pkg/uuid/uuid-config.pod	13 Jan 2006 06:44:30 -0000	1.4
  @@ -1,8 +1,8 @@
   #!/bin/sh
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.ac
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 uuid.ac
  --- ossp-pkg/uuid/uuid.ac	12 Jan 2006 20:31:50 -0000	1.19
  +++ ossp-pkg/uuid/uuid.ac	13 Jan 2006 06:44:30 -0000	1.20
  @@ -1,7 +1,7 @@
   dnl ##
   dnl ##  OSSP uuid - Universally Unique Identifier
  -dnl ##  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   dnl ##
   dnl ##  This file is part of OSSP uuid, a library for the generation
   dnl ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.56 -r1.57 uuid.c
  --- ossp-pkg/uuid/uuid.c	24 Sep 2005 10:28:32 -0000	1.56
  +++ ossp-pkg/uuid/uuid.c	13 Jan 2006 06:44:30 -0000	1.57
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.h.in
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 uuid.h.in
  --- ossp-pkg/uuid/uuid.h.in	31 Aug 2005 19:20:43 -0000	1.9
  +++ ossp-pkg/uuid/uuid.h.in	13 Jan 2006 06:44:30 -0000	1.10
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pc.in
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid.pc.in
  --- ossp-pkg/uuid/uuid.pc.in	31 Aug 2005 11:16:18 -0000	1.1
  +++ ossp-pkg/uuid/uuid.pc.in	13 Jan 2006 06:44:30 -0000	1.2
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	12 Jan 2006 19:59:36 -0000	1.32
  +++ ossp-pkg/uuid/uuid.pod	13 Jan 2006 06:44:30 -0000	1.33
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_ac.h
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 uuid_ac.h
  --- ossp-pkg/uuid/uuid_ac.h	29 Mar 2005 19:01:41 -0000	1.4
  +++ ossp-pkg/uuid/uuid_ac.h	13 Jan 2006 06:44:30 -0000	1.5
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_bm.h
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 uuid_bm.h
  --- ossp-pkg/uuid/uuid_bm.h	29 Mar 2005 19:01:41 -0000	1.5
  +++ ossp-pkg/uuid/uuid_bm.h	13 Jan 2006 06:44:30 -0000	1.6
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.c
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 uuid_cli.c
  --- ossp-pkg/uuid/uuid_cli.c	29 Mar 2005 19:01:41 -0000	1.19
  +++ ossp-pkg/uuid/uuid_cli.c	13 Jan 2006 06:44:30 -0000	1.20
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.pod
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 uuid_cli.pod
  --- ossp-pkg/uuid/uuid_cli.pod	2 Sep 2005 14:00:00 -0000	1.23
  +++ ossp-pkg/uuid/uuid_cli.pod	13 Jan 2006 06:44:30 -0000	1.24
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_dce.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 uuid_dce.c
  --- ossp-pkg/uuid/uuid_dce.c	29 Mar 2005 19:01:41 -0000	1.3
  +++ ossp-pkg/uuid/uuid_dce.c	13 Jan 2006 06:44:30 -0000	1.4
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_dce.h
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid_dce.h
  --- ossp-pkg/uuid/uuid_dce.h	31 Dec 2004 19:20:34 -0000	1.2
  +++ ossp-pkg/uuid/uuid_dce.h	13 Jan 2006 06:44:31 -0000	1.3
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_mac.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 uuid_mac.c
  --- ossp-pkg/uuid/uuid_mac.c	15 Jun 2005 18:34:04 -0000	1.8
  +++ ossp-pkg/uuid/uuid_mac.c	13 Jan 2006 06:44:31 -0000	1.9
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_mac.h
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 uuid_mac.h
  --- ossp-pkg/uuid/uuid_mac.h	31 Dec 2004 19:20:34 -0000	1.3
  +++ ossp-pkg/uuid/uuid_mac.h	13 Jan 2006 06:44:31 -0000	1.4
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_md5.c
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 uuid_md5.c
  --- ossp-pkg/uuid/uuid_md5.c	29 Mar 2005 19:01:41 -0000	1.11
  +++ ossp-pkg/uuid/uuid_md5.c	13 Jan 2006 06:44:31 -0000	1.12
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_md5.h
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 uuid_md5.h
  --- ossp-pkg/uuid/uuid_md5.h	31 Dec 2004 19:20:34 -0000	1.4
  +++ ossp-pkg/uuid/uuid_md5.h	13 Jan 2006 06:44:31 -0000	1.5
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_prng.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 uuid_prng.c
  --- ossp-pkg/uuid/uuid_prng.c	24 Sep 2005 10:28:32 -0000	1.10
  +++ ossp-pkg/uuid/uuid_prng.c	13 Jan 2006 06:44:31 -0000	1.11
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_prng.h
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 uuid_prng.h
  --- ossp-pkg/uuid/uuid_prng.h	30 Aug 2005 15:26:07 -0000	1.3
  +++ ossp-pkg/uuid/uuid_prng.h	13 Jan 2006 06:44:31 -0000	1.4
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_sha1.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid_sha1.c
  --- ossp-pkg/uuid/uuid_sha1.c	29 Mar 2005 19:01:41 -0000	1.2
  +++ ossp-pkg/uuid/uuid_sha1.c	13 Jan 2006 06:44:31 -0000	1.3
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_sha1.h
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid_sha1.h
  --- ossp-pkg/uuid/uuid_sha1.h	23 Jan 2005 11:28:51 -0000	1.1
  +++ ossp-pkg/uuid/uuid_sha1.h	13 Jan 2006 06:44:31 -0000	1.2
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_str.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 uuid_str.c
  --- ossp-pkg/uuid/uuid_str.c	29 Mar 2005 19:01:41 -0000	1.5
  +++ ossp-pkg/uuid/uuid_str.c	13 Jan 2006 06:44:31 -0000	1.6
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_str.h
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid_str.h
  --- ossp-pkg/uuid/uuid_str.h	31 Dec 2004 19:20:34 -0000	1.2
  +++ ossp-pkg/uuid/uuid_str.h	13 Jan 2006 06:44:31 -0000	1.3
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jan 13 07:45:20 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 2E0CF75296E; Fri, 13 Jan 2006 07:45:20 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ NEWS
Message-Id: <20060113064520.2E0CF75296E@mail.ossp.org>
Date: Fri, 13 Jan 2006 07:45:20 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Jan-2006 07:45:20
  Branch: HEAD                             Handle: 2006011306451900

  Modified files:
    ossp-pkg/uuid           NEWS

  Log:
    remember PostgreSQL API

  Summary:
    Revision    Changes     Path
    1.8         +4  -0      ossp-pkg/uuid/NEWS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/NEWS
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 NEWS
  --- ossp-pkg/uuid/NEWS	2 Sep 2005 18:57:32 -0000	1.7
  +++ ossp-pkg/uuid/NEWS	13 Jan 2006 06:45:19 -0000	1.8
  @@ -11,6 +11,10 @@
     This is a list of major changes to OSSP uuid. For more detailed
     change descriptions, please have a look at the ChangeLog file.
   
  +  Major changes between 1.3 and 1.4
  +
  +    o Added PostgreSQL API.
  +
     Major changes between 1.2 and 1.3
   
       o Added Perl TIE-style API.
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jan 13 07:46:51 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 41F3D752951; Fri, 13 Jan 2006 07:46:51 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.pod
Message-Id: <20060113064651.41F3D752951@mail.ossp.org>
Date: Fri, 13 Jan 2006 07:46:51 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Jan-2006 07:46:51
  Branch: HEAD                             Handle: 2006011306465000

  Modified files:
    ossp-pkg/uuid           uuid.pod

  Log:
    add URL and make RFC references equal in style

  Summary:
    Revision    Changes     Path
    1.34        +2  -1      ossp-pkg/uuid/uuid.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	13 Jan 2006 06:44:30 -0000	1.33
  +++ ossp-pkg/uuid/uuid.pod	13 Jan 2006 06:46:50 -0000	1.34
  @@ -400,6 +400,7 @@
   P. Leach, M. Mealling, R. Salz,
   IETF Request for Comments: RFC 4122,
   July 2005, 32 pages,
  +http://www.ietf.org/rfc/rfc4122.txt
   
   =item
   
  @@ -432,7 +433,7 @@
   
   B<HTTP Extensions for Distributed Authoring (WebDAV)>,
   section B<6.4.1 Node Field Generation Without the IEEE 802 Address>,
  -IETF RFC 2518,
  +IETF Request for Comments: RFC 2518,
   February 1999, 94 pages,
   http://www.ietf.org/rfc/rfc2518.txt
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jan 13 07:54:15 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id CABF3752951; Fri, 13 Jan 2006 07:54:15 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.pod
Message-Id: <20060113065415.CABF3752951@mail.ossp.org>
Date: Fri, 13 Jan 2006 07:54:15 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Jan-2006 07:54:15
  Branch: HEAD                             Handle: 2006011306541500

  Modified files:
    ossp-pkg/uuid           uuid.pod

  Log:
    FreeBSD 6.0-RELEASE already exists, CURRENT is now FreeBSD 7.0

  Summary:
    Revision    Changes     Path
    1.35        +1  -1      ossp-pkg/uuid/uuid.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	13 Jan 2006 06:46:50 -0000	1.34
  +++ ossp-pkg/uuid/uuid.pod	13 Jan 2006 06:54:15 -0000	1.35
  @@ -441,7 +441,7 @@
   
   B<DCE 1.1 compliant UUID functions>,
   FreeBSD manual pages uuid(3) and uuidgen(2),
  -http://www.freebsd.org/cgi/man.cgi?query=uuid&manpath=FreeBSD+6.0-current
  +http://www.freebsd.org/cgi/man.cgi?query=uuid&manpath=FreeBSD+6.0-RELEASE
   
   =back
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jan 13 07:57:45 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id C127175296E; Fri, 13 Jan 2006 07:57:45 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ .flexelint.lnt
Message-Id: <20060113065745.C127175296E@mail.ossp.org>
Date: Fri, 13 Jan 2006 07:57:45 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Jan-2006 07:57:45
  Branch: HEAD                             Handle: 2006011306574500

  Modified files:
    ossp-pkg/uuid           .flexelint.lnt

  Log:
    flexelint seems to dislike the old config part

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/uuid/.flexelint.lnt
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/.flexelint.lnt
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 .flexelint.lnt
  --- ossp-pkg/uuid/.flexelint.lnt	30 Aug 2005 18:42:09 -0000	1.1
  +++ ossp-pkg/uuid/.flexelint.lnt	13 Jan 2006 06:57:45 -0000	1.2
  @@ -1,4 +1,4 @@
  -"-emacro(26,va_arg)"
  +/* "-emacro(26,va_arg)" */
   -e715 
   -e534
   -e545
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jan 13 07:58:22 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 9CADA752947; Fri, 13 Jan 2006 07:58:22 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ TODO
Message-Id: <20060113065822.9CADA752947@mail.ossp.org>
Date: Fri, 13 Jan 2006 07:58:22 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Jan-2006 07:58:22
  Branch: HEAD                             Handle: 2006011306582200

  Modified files:
    ossp-pkg/uuid           TODO

  Log:
    remember more

  Summary:
    Revision    Changes     Path
    1.27        +1  -0      ossp-pkg/uuid/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/TODO
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 TODO
  --- ossp-pkg/uuid/TODO	2 Sep 2005 17:22:05 -0000	1.26
  +++ ossp-pkg/uuid/TODO	13 Jan 2006 06:58:22 -0000	1.27
  @@ -20,4 +20,5 @@
     - more platform support in uuid_mac.c?!
     - global memory locking according to standard hints??
     - persistent/non-volatile state writing according to standard hints??
  +  - top-level Makefile.PL for CPAN contribution
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jan 15 19:37:44 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 3C5E9752951; Sun, 15 Jan 2006 19:37:44 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog Makefile.PL
Message-Id: <20060115183744.3C5E9752951@mail.ossp.org>
Date: Sun, 15 Jan 2006 19:37:44 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Jan-2006 19:37:44
  Branch: HEAD                             Handle: 2006011518374300

  Added files:
    ossp-pkg/uuid           Makefile.PL
  Modified files:
    ossp-pkg/uuid           ChangeLog

  Log:
    create a top-level Perl ExtUtils::MakeMaker wrapper script to make the
    CPAN people more happy

  Summary:
    Revision    Changes     Path
    1.103       +3  -0      ossp-pkg/uuid/ChangeLog
    1.1         +67 -0      ossp-pkg/uuid/Makefile.PL
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.102 -r1.103 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	13 Jan 2006 06:44:30 -0000	1.102
  +++ ossp-pkg/uuid/ChangeLog	15 Jan 2006 18:37:43 -0000	1.103
  @@ -13,6 +13,9 @@
   
     Changes between 1.3.2 and 1.4.0 (06-Dec-2005 to 12-Jan-2006)
   
  +   o Created a top-level Perl ExtUtils::MakeMaker wrapper script
  +     [Ralf S. Engelschall]
  +
      o Adjust copyright messages for new year 2006.
        [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.PL
  ============================================================================
  $ cvs diff -u -r0 -r1.1 Makefile.PL
  --- /dev/null	2006-01-15 19:37:08 +0100
  +++ Makefile.PL	2006-01-15 19:37:44 +0100
  @@ -0,0 +1,67 @@
  +##
  +##  OSSP uuid - Universally Unique Identifier
  +##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP uuid, a library for the generation
  +##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  Makefile.PL: top-level Perl ExtUtils::MakeMaker wrapper script
  +##
  +
  +require 5.008;
  +use IO::File;
  +
  +my $ARGS = join(" ", @ARGV);
  +
  +print "++ writing Makefile\n";
  +
  +my $mk = new IO::File ">Makefile" or die;
  +$mk->print(<< "EOF");
  +
  +PERL     = $^X
  +FULLPERL = $^X
  +ARGS     = $ARGS
  +
  +all pure_all:
  +	\@if [ ! -d build ]; then mkdir build; fi
  +	\@if [ ! -f build/Makefile ]; then (cd build && ../configure --disable-shared); fi
  +	\@if [ ! -f build/libuuid.la ]; then (cd build && \$(MAKE) \$(MFLAGS) libuuid.la); fi
  +	\@if [ ! -f perl/Makefile ]; then (cd perl && \$(PERL) Makefile.PL \$(ARGS)); fi
  +	\@cd perl && \$(MAKE) \$(MFLAGS) \$\@
  +
  +install pure_install test:
  +	\@cd perl && \$(MAKE) \$(MFLAGS) \$\@
  +
  +clean:
  +	\@cd build && \$(MAKE) \$(MFLAGS) \$\@
  +	\@cd perl && \$(MAKE) \$(MFLAGS) \$\@
  +
  +distclean realclean:
  +	\@cd build && \$(MAKE) \$(MFLAGS) \$\@
  +	\@cd perl && \$(MAKE) \$(MFLAGS) \$\@
  +	-rm -rf build || true
  +	-rm -rf Makefile || true
  +
  +EOF
  +
  +$mk->close();
  +
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jan 15 19:39:30 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id D0EAF752951; Sun, 15 Jan 2006 19:39:30 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ TODO
Message-Id: <20060115183930.D0EAF752951@mail.ossp.org>
Date: Sun, 15 Jan 2006 19:39:30 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Jan-2006 19:39:30
  Branch: HEAD                             Handle: 2006011518393000

  Modified files:
    ossp-pkg/uuid           TODO

  Log:
    done

  Summary:
    Revision    Changes     Path
    1.28        +0  -1      ossp-pkg/uuid/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/TODO
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 TODO
  --- ossp-pkg/uuid/TODO	13 Jan 2006 06:58:22 -0000	1.27
  +++ ossp-pkg/uuid/TODO	15 Jan 2006 18:39:30 -0000	1.28
  @@ -20,5 +20,4 @@
     - more platform support in uuid_mac.c?!
     - global memory locking according to standard hints??
     - persistent/non-volatile state writing according to standard hints??
  -  - top-level Makefile.PL for CPAN contribution
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jan 15 19:40:15 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id CB154752928; Sun, 15 Jan 2006 19:40:15 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ README uuid_vers.h
Message-Id: <20060115184015.CB154752928@mail.ossp.org>
Date: Sun, 15 Jan 2006 19:40:15 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Jan-2006 19:40:15
  Branch: HEAD                             Handle: 2006011518401500

  Modified files:
    ossp-pkg/uuid           README uuid_vers.h

  Log:
    adjust for release

  Summary:
    Revision    Changes     Path
    1.37        +1  -1      ossp-pkg/uuid/README
    1.21        +5  -5      ossp-pkg/uuid/uuid_vers.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.36 -r1.37 README
  --- ossp-pkg/uuid/README	13 Jan 2006 06:44:30 -0000	1.36
  +++ ossp-pkg/uuid/README	15 Jan 2006 18:40:15 -0000	1.37
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
   
     OSSP uuid - Universally Unique Identifier
  -  Version 1.4.0 (12-Jan-2006)
  +  Version 1.4.0 (15-Jan-2006)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_vers.h
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 uuid_vers.h
  --- ossp-pkg/uuid/uuid_vers.h	12 Jan 2006 20:32:42 -0000	1.20
  +++ ossp-pkg/uuid/uuid_vers.h	15 Jan 2006 18:40:15 -0000	1.21
  @@ -34,12 +34,12 @@
   _uuid_version_t _uuid_version = {
       0x104200,
       "1.4.0",
  -    "1.4.0 (12-Jan-2006)",
  -    "This is OSSP uuid, Version 1.4.0 (12-Jan-2006)",
  -    "OSSP uuid 1.4.0 (12-Jan-2006)",
  +    "1.4.0 (15-Jan-2006)",
  +    "This is OSSP uuid, Version 1.4.0 (15-Jan-2006)",
  +    "OSSP uuid 1.4.0 (15-Jan-2006)",
       "OSSP uuid/1.4.0",
  -    "@(#)OSSP uuid 1.4.0 (12-Jan-2006)",
  -    "$Id: OSSP uuid 1.4.0 (12-Jan-2006) $"
  +    "@(#)OSSP uuid 1.4.0 (15-Jan-2006)",
  +    "$Id: OSSP uuid 1.4.0 (15-Jan-2006) $"
   };
   
   #endif /* _UUID_VERS_H_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jan 15 19:40:37 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B4269752928; Sun, 15 Jan 2006 19:40:36 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog
Message-Id: <20060115184036.B4269752928@mail.ossp.org>
Date: Sun, 15 Jan 2006 19:40:36 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Jan-2006 19:40:36
  Branch: HEAD                             Handle: 2006011518403600

  Modified files:
    ossp-pkg/uuid           ChangeLog

  Log:
    adjust for release

  Summary:
    Revision    Changes     Path
    1.104       +1  -1      ossp-pkg/uuid/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.103 -r1.104 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	15 Jan 2006 18:37:43 -0000	1.103
  +++ ossp-pkg/uuid/ChangeLog	15 Jan 2006 18:40:36 -0000	1.104
  @@ -11,7 +11,7 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 1.3.2 and 1.4.0 (06-Dec-2005 to 12-Jan-2006)
  +  Changes between 1.3.2 and 1.4.0 (06-Dec-2005 to 15-Jan-2006)
   
      o Created a top-level Perl ExtUtils::MakeMaker wrapper script
        [Ralf S. Engelschall]
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jan 15 19:47:28 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 7AD8C75292E; Sun, 15 Jan 2006 19:47:28 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20060115184728.7AD8C75292E@mail.ossp.org>
Date: Sun, 15 Jan 2006 19:47:28 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   15-Jan-2006 19:47:28
  Branch: HEAD                             Handle: 2006011518472602

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/uuid   index.wml

  Log:
    release OSSP uuid 1.4.0

  Summary:
    Revision    Changes     Path
    1.144       +1  -0      ossp-web/new/news.txt
    1.119       +1  -1      ossp-web/pkg/lib/index.wml
    1.27        +2  -2      ossp-web/pkg/lib/uuid/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.143 -r1.144 news.txt
  --- ossp-web/new/news.txt	6 Dec 2005 11:54:38 -0000	1.143
  +++ ossp-web/new/news.txt	15 Jan 2006 18:47:26 -0000	1.144
  @@ -1,3 +1,4 @@
  +15-Jan-2006: Released L<OSSP uuid> 1.4.0
   06-Dec-2005: Released L<OSSP uuid> 1.3.2
   22-Nov-2005: Released L<GNU pth> 2.0.6
   12-Oct-2005: Released L<OSSP str> 0.9.12
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.118 -r1.119 index.wml
  --- ossp-web/pkg/lib/index.wml	6 Dec 2005 11:54:39 -0000	1.118
  +++ ossp-web/pkg/lib/index.wml	15 Jan 2006 18:47:27 -0000	1.119
  @@ -33,7 +33,7 @@
   			done=100 stable=1.1.3 unstable=none>
     <pkg_item name="uuid" longname="OSSP uuid" type="lib"
               desc="Universally Unique Identifier"
  -			done=100 stable=1.3.2 unstable=none>
  +			done=100 stable=1.4.0 unstable=none>
     <pkg_item name="val" longname="OSSP val" type="lib"
               desc="Value Access"
   			done=95 stable=none unstable=0.9.4>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/uuid/index.wml
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 index.wml
  --- ossp-web/pkg/lib/uuid/index.wml	6 Dec 2005 11:54:39 -0000	1.26
  +++ ossp-web/pkg/lib/uuid/index.wml	15 Jan 2006 18:47:28 -0000	1.27
  @@ -48,7 +48,7 @@
   
   <pkg_status
       name="uuid" assign="rse"
  -    stable="1.3.2"    stable_date="06-Dec-2005"
  +    stable="1.4.0"    stable_date="15-Jan-2006"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -59,7 +59,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/uuid/
       directory=$(FTP_ROOT_DIR)/pkg/lib/uuid/
       files="uuid-[0-9.]*.tar.gz" 
  -	stable="uuid-1\.3\.1\.tar\.gz" unstable="none">
  +	stable="uuid-1\.4\.0\.tar\.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Feb  4 10:43:27 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 8AB53752903; Sat,  4 Feb 2006 10:43:27 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog Makefile.in README configure.ac...
Message-Id: <20060204094327.8AB53752903@mail.ossp.org>
Date: Sat,  4 Feb 2006 10:43:27 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Feb-2006 10:43:27
  Branch: HEAD                             Handle: 2006020409432501

  Modified files:
    ossp-pkg/shtool         ChangeLog Makefile.in README configure.ac
                            devtool.func sh.arx sh.echo sh.fixperm sh.install
                            sh.mdate sh.mkdir sh.mkln sh.mkshadow sh.move
                            sh.path sh.platform sh.prop sh.rotate sh.scpp
                            sh.slo sh.subst sh.table sh.tarball sh.version
                            shtool.m4 shtool.pod shtool.spec shtoolize.in
                            shtoolize.pod test.db test.sh

  Log:
    Adjust copyright for year 2006

  Summary:
    Revision    Changes     Path
    1.221       +4  -1      ossp-pkg/shtool/ChangeLog
    1.52        +1  -1      ossp-pkg/shtool/Makefile.in
    1.110       +1  -1      ossp-pkg/shtool/README
    1.7         +2  -2      ossp-pkg/shtool/configure.ac
    1.7         +1  -1      ossp-pkg/shtool/devtool.func
    1.24        +1  -1      ossp-pkg/shtool/sh.arx
    1.40        +1  -1      ossp-pkg/shtool/sh.echo
    1.20        +1  -1      ossp-pkg/shtool/sh.fixperm
    1.33        +1  -1      ossp-pkg/shtool/sh.install
    1.17        +1  -1      ossp-pkg/shtool/sh.mdate
    1.26        +1  -1      ossp-pkg/shtool/sh.mkdir
    1.20        +1  -1      ossp-pkg/shtool/sh.mkln
    1.26        +1  -1      ossp-pkg/shtool/sh.mkshadow
    1.22        +1  -1      ossp-pkg/shtool/sh.move
    1.29        +1  -1      ossp-pkg/shtool/sh.path
    1.15        +1  -1      ossp-pkg/shtool/sh.platform
    1.20        +1  -1      ossp-pkg/shtool/sh.prop
    1.12        +1  -1      ossp-pkg/shtool/sh.rotate
    1.28        +1  -1      ossp-pkg/shtool/sh.scpp
    1.26        +1  -1      ossp-pkg/shtool/sh.slo
    1.16        +1  -1      ossp-pkg/shtool/sh.subst
    1.22        +1  -1      ossp-pkg/shtool/sh.table
    1.24        +1  -1      ossp-pkg/shtool/sh.tarball
    1.41        +1  -1      ossp-pkg/shtool/sh.version
    1.9         +1  -1      ossp-pkg/shtool/shtool.m4
    1.69        +1  -1      ossp-pkg/shtool/shtool.pod
    1.28        +1  -1      ossp-pkg/shtool/shtool.spec
    1.38        +3  -3      ossp-pkg/shtool/shtoolize.in
    1.14        +1  -1      ossp-pkg/shtool/shtoolize.pod
    1.24        +1  -1      ossp-pkg/shtool/test.db
    1.13        +1  -1      ossp-pkg/shtool/test.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.220 -r1.221 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	12 Oct 2005 12:34:50 -0000	1.220
  +++ ossp-pkg/shtool/ChangeLog	4 Feb 2006 09:43:25 -0000	1.221
  @@ -9,7 +9,7 @@
   
    ChangeLog
   
  - Changes between 2.0.3 and 2.0.4 (02-Oct-2005 to xx-xxx-2005):
  + Changes between 2.0.3 and 2.0.4 (02-Oct-2005 to 04-Feb-2006):
   
      *) Enhance portability even more by maximizing Bourne Shell
         compatibility under ZSH and BASH and avoiding NLS dependencies.
  @@ -18,6 +18,9 @@
      *) Use internal util_{lower,upper} functions in "shtool version".
         [Ralf S. Engelschall]
   
  +   *) Adjust copyright for year 2006.
  +      [Ralf S. Engelschall]
  +
    Changes between 2.0.2 and 2.0.3 (15-Jun-2005 to 02-Oct-2005):
   
      *) "shtool mdate" needs to (un|re)set TIME_STYLE, as GNU coreutils'
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.51 -r1.52 Makefile.in
  --- ossp-pkg/shtool/Makefile.in	15 Jun 2005 08:14:35 -0000	1.51
  +++ ossp-pkg/shtool/Makefile.in	4 Feb 2006 09:43:25 -0000	1.52
  @@ -1,6 +1,6 @@
   ##
   ##  Makefile for GNU shtool
  -##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/README
  ============================================================================
  $ cvs diff -u -r1.109 -r1.110 README
  --- ossp-pkg/shtool/README	2 Oct 2005 14:18:34 -0000	1.109
  +++ ossp-pkg/shtool/README	4 Feb 2006 09:43:25 -0000	1.110
  @@ -5,7 +5,7 @@
     |___/_| |_|\__\___/ \___/|_|
   
     GNU shtool -- The GNU Portable Shell Tool
  -  Copyright (c) 1994-2005 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 1994-2006 Ralf S. Engelschall <rse@engelschall.com>
   
     http://www.gnu.org/software/shtool/
     ftp://ftp.gnu.org/gnu/shtool/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/configure.ac
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 configure.ac
  --- ossp-pkg/shtool/configure.ac	15 Jun 2005 08:14:35 -0000	1.6
  +++ ossp-pkg/shtool/configure.ac	4 Feb 2006 09:43:25 -0000	1.7
  @@ -1,6 +1,6 @@
   dnl ##
   dnl ##  configure.ac -- Autoconf source for GNU shtool
  -dnl ##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##
   dnl ##  This file is part of shtool and free software; you can redistribute
   dnl ##  it and/or modify it under the terms of the GNU General Public
  @@ -24,7 +24,7 @@
   
   SHTOOL_VERSION_STR="`sh sh.version -l txt -d long VERSION`"
   sh sh.echo -e "Configuring %BGNU shtool%b (Portable Shell Tool), version %B${SHTOOL_VERSION_STR}%b"
  -echo "Copyright (c) 1994-2005 Ralf S. Engelschall <rse@engelschall.com>"
  +echo "Copyright (c) 1994-2006 Ralf S. Engelschall <rse@engelschall.com>"
   AC_SUBST(SHTOOL_VERSION_STR)
   
   AC_PREFIX_DEFAULT(/usr/local)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/devtool.func
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 devtool.func
  --- ossp-pkg/shtool/devtool.func	15 Jun 2005 08:14:35 -0000	1.6
  +++ ossp-pkg/shtool/devtool.func	4 Feb 2006 09:43:25 -0000	1.7
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2006 Ralf S. Engelschall <rse@engelschall.com> 
   ##
   
   devtool_require () {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.arx
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 sh.arx
  --- ossp-pkg/shtool/sh.arx	15 Jun 2005 08:14:35 -0000	1.23
  +++ ossp-pkg/shtool/sh.arx	4 Feb 2006 09:43:25 -0000	1.24
  @@ -1,6 +1,6 @@
   ##
   ##  arx -- Extended archive command
  -##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.echo
  ============================================================================
  $ cvs diff -u -r1.39 -r1.40 sh.echo
  --- ossp-pkg/shtool/sh.echo	15 Jun 2005 08:14:35 -0000	1.39
  +++ ossp-pkg/shtool/sh.echo	4 Feb 2006 09:43:25 -0000	1.40
  @@ -1,6 +1,6 @@
   ##
   ##  echo -- Print string with optional construct expansion
  -##  Copyright (c) 1998-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2006 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.fixperm
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 sh.fixperm
  --- ossp-pkg/shtool/sh.fixperm	15 Jun 2005 08:14:35 -0000	1.19
  +++ ossp-pkg/shtool/sh.fixperm	4 Feb 2006 09:43:25 -0000	1.20
  @@ -1,6 +1,6 @@
   ##
   ##  fixperm -- Fix file permissions inside a source tree
  -##  Copyright (c) 1996-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1996-2006 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.install
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 sh.install
  --- ossp-pkg/shtool/sh.install	15 Jun 2005 08:14:35 -0000	1.32
  +++ ossp-pkg/shtool/sh.install	4 Feb 2006 09:43:25 -0000	1.33
  @@ -1,6 +1,6 @@
   ##
   ##  install -- Install a program, script or datafile
  -##  Copyright (c) 1997-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1997-2006 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.mdate
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 sh.mdate
  --- ossp-pkg/shtool/sh.mdate	2 Oct 2005 14:23:12 -0000	1.16
  +++ ossp-pkg/shtool/sh.mdate	4 Feb 2006 09:43:25 -0000	1.17
  @@ -1,7 +1,7 @@
   ##
   ##  mdate -- Pretty-print modification time of a file or dir
   ##  Copyright (c) 1995-1997 Free Software Foundation, Inc.
  -##  Copyright (c) 1998-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2006 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.mkdir
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 sh.mkdir
  --- ossp-pkg/shtool/sh.mkdir	15 Jun 2005 08:14:35 -0000	1.25
  +++ ossp-pkg/shtool/sh.mkdir	4 Feb 2006 09:43:25 -0000	1.26
  @@ -1,6 +1,6 @@
   ##
   ##  mkdir -- Make one or more directories
  -##  Copyright (c) 1996-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1996-2006 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.mkln
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 sh.mkln
  --- ossp-pkg/shtool/sh.mkln	15 Jun 2005 08:14:35 -0000	1.19
  +++ ossp-pkg/shtool/sh.mkln	4 Feb 2006 09:43:25 -0000	1.20
  @@ -1,6 +1,6 @@
   ##
   ##  mkln -- Make link with calculation of relative paths
  -##  Copyright (c) 1998-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2006 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.mkshadow
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 sh.mkshadow
  --- ossp-pkg/shtool/sh.mkshadow	15 Jun 2005 08:14:35 -0000	1.25
  +++ ossp-pkg/shtool/sh.mkshadow	4 Feb 2006 09:43:25 -0000	1.26
  @@ -1,6 +1,6 @@
   ##
   ##  mkshadow -- Make a shadow tree through symbolic links
  -##  Copyright (c) 1998-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2006 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.move
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 sh.move
  --- ossp-pkg/shtool/sh.move	15 Jun 2005 08:14:35 -0000	1.21
  +++ ossp-pkg/shtool/sh.move	4 Feb 2006 09:43:25 -0000	1.22
  @@ -1,6 +1,6 @@
   ##
   ##  move -- Move files with simultaneous substitution
  -##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.path
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 sh.path
  --- ossp-pkg/shtool/sh.path	15 Jun 2005 08:14:35 -0000	1.28
  +++ ossp-pkg/shtool/sh.path	4 Feb 2006 09:43:25 -0000	1.29
  @@ -1,6 +1,6 @@
   ##
   ##  path -- Deal with program paths
  -##  Copyright (c) 1998-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2006 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.platform
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 sh.platform
  --- ossp-pkg/shtool/sh.platform	2 Oct 2005 14:17:58 -0000	1.14
  +++ ossp-pkg/shtool/sh.platform	4 Feb 2006 09:43:25 -0000	1.15
  @@ -1,6 +1,6 @@
   ##
   ##  platform -- Platform Identification Utility
  -##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2006 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.prop
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 sh.prop
  --- ossp-pkg/shtool/sh.prop	15 Jun 2005 08:14:35 -0000	1.19
  +++ ossp-pkg/shtool/sh.prop	4 Feb 2006 09:43:25 -0000	1.20
  @@ -1,6 +1,6 @@
   ##
   ##  prop -- Display progress with a running propeller
  -##  Copyright (c) 1998-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2006 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.rotate
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 sh.rotate
  --- ossp-pkg/shtool/sh.rotate	15 Jun 2005 08:14:35 -0000	1.11
  +++ ossp-pkg/shtool/sh.rotate	4 Feb 2006 09:43:25 -0000	1.12
  @@ -1,6 +1,6 @@
   ##
   ##  rotate -- Logfile rotation
  -##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2006 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.scpp
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 sh.scpp
  --- ossp-pkg/shtool/sh.scpp	15 Jun 2005 08:14:35 -0000	1.27
  +++ ossp-pkg/shtool/sh.scpp	4 Feb 2006 09:43:25 -0000	1.28
  @@ -1,6 +1,6 @@
   ##
   ##  scpp -- Sharing C Pre-Processor
  -##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.slo
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 sh.slo
  --- ossp-pkg/shtool/sh.slo	15 Jun 2005 08:14:35 -0000	1.25
  +++ ossp-pkg/shtool/sh.slo	4 Feb 2006 09:43:25 -0000	1.26
  @@ -1,6 +1,6 @@
   ##
   ##  slo -- Separate linker options by library class
  -##  Copyright (c) 1998-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2006 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.subst
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 sh.subst
  --- ossp-pkg/shtool/sh.subst	15 Jun 2005 08:14:36 -0000	1.15
  +++ ossp-pkg/shtool/sh.subst	4 Feb 2006 09:43:25 -0000	1.16
  @@ -1,6 +1,6 @@
   ##
   ##  subst -- Apply sed(1) substitution operations
  -##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2006 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.table
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 sh.table
  --- ossp-pkg/shtool/sh.table	15 Jun 2005 08:14:36 -0000	1.21
  +++ ossp-pkg/shtool/sh.table	4 Feb 2006 09:43:25 -0000	1.22
  @@ -1,6 +1,6 @@
   ##
   ##  table -- Pretty-print a field-separated list as a table
  -##  Copyright (c) 1998-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2006 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.tarball
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 sh.tarball
  --- ossp-pkg/shtool/sh.tarball	15 Jun 2005 08:14:36 -0000	1.23
  +++ ossp-pkg/shtool/sh.tarball	4 Feb 2006 09:43:25 -0000	1.24
  @@ -1,6 +1,6 @@
   ##
   ##  tarball -- Roll distribution tarballs
  -##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.version
  ============================================================================
  $ cvs diff -u -r1.40 -r1.41 sh.version
  --- ossp-pkg/shtool/sh.version	12 Oct 2005 12:31:28 -0000	1.40
  +++ ossp-pkg/shtool/sh.version	4 Feb 2006 09:43:25 -0000	1.41
  @@ -1,6 +1,6 @@
   ##
   ##  version -- Maintain a version information file
  -##  Copyright (c) 1994-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1994-2006 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtool.m4
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 shtool.m4
  --- ossp-pkg/shtool/shtool.m4	15 Jun 2005 08:14:36 -0000	1.8
  +++ ossp-pkg/shtool/shtool.m4	4 Feb 2006 09:43:26 -0000	1.9
  @@ -1,6 +1,6 @@
   ##
   ##  shtool.m4 -- GNU shtool Autoconf macros
  -##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtool.pod
  ============================================================================
  $ cvs diff -u -r1.68 -r1.69 shtool.pod
  --- ossp-pkg/shtool/shtool.pod	15 Jun 2005 08:14:36 -0000	1.68
  +++ ossp-pkg/shtool/shtool.pod	4 Feb 2006 09:43:26 -0000	1.69
  @@ -1,6 +1,6 @@
   ##
   ##  shtool.pod -- Manual Page for shtool in POD format
  -##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtool.spec
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 shtool.spec
  --- ossp-pkg/shtool/shtool.spec	2 Oct 2005 14:18:34 -0000	1.27
  +++ ossp-pkg/shtool/shtool.spec	4 Feb 2006 09:43:26 -0000	1.28
  @@ -1,6 +1,6 @@
   ##
   ##  shtool.spec -- RPM specification for shtool package
  -##  Copyright (c) 2000-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2006 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtoolize.in
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 shtoolize.in
  --- ossp-pkg/shtool/shtoolize.in	12 Oct 2005 12:39:17 -0000	1.37
  +++ ossp-pkg/shtool/shtoolize.in	4 Feb 2006 09:43:26 -0000	1.38
  @@ -1,7 +1,7 @@
   #!@PERL@
   ##
   ##  shtoolize -- Build shtool script out of ingredient scripts
  -##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ -350,7 +350,7 @@
   #!/bin/sh
   ##
   ##  GNU shtool -- The GNU Portable Shell Tool
  -##  Copyright (c) 1994-2005 Ralf S. Engelschall <rse\@engelschall.com>
  +##  Copyright (c) 1994-2006 Ralf S. Engelschall <rse\@engelschall.com>
   ##
   ##  See http://www.gnu.org/software/shtool/ for more information.
   ##  See ftp://ftp.gnu.org/gnu/shtool/ for latest version.
  @@ -421,7 +421,7 @@
   fi
   if [ ".\$1" = ".-h" ] || [ ".\$1" = ".--help" ]; then
       echo "This is GNU shtool, version ${version}"
  -    echo 'Copyright (c) 1994-2005 Ralf S. Engelschall <rse\@engelschall.com>'
  +    echo 'Copyright (c) 1994-2006 Ralf S. Engelschall <rse\@engelschall.com>'
       echo 'Report bugs to <bug-shtool\@gnu.org>'
       echo ''
       echo 'Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]'
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtoolize.pod
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 shtoolize.pod
  --- ossp-pkg/shtool/shtoolize.pod	15 Jun 2005 08:14:36 -0000	1.13
  +++ ossp-pkg/shtool/shtoolize.pod	4 Feb 2006 09:43:26 -0000	1.14
  @@ -1,6 +1,6 @@
   ##
   ##  shtoolize.pod -- Manual Page for shtoolize in POD format
  -##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/test.db
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 test.db
  --- ossp-pkg/shtool/test.db	15 Jun 2005 08:14:36 -0000	1.23
  +++ ossp-pkg/shtool/test.db	4 Feb 2006 09:43:26 -0000	1.24
  @@ -1,6 +1,6 @@
   ##
   ##  test.db -- GNU shtool test suite (minimalistic)
  -##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   @begin{echo}
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/test.sh
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 test.sh
  --- ossp-pkg/shtool/test.sh	15 Jun 2005 08:14:36 -0000	1.12
  +++ ossp-pkg/shtool/test.sh	4 Feb 2006 09:43:26 -0000	1.13
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  test.sh -- GNU shtool test suite driver
  -##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .

From ossp-cvs-owner@ossp.org  Sat Feb  4 10:54:07 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 6372D75294E; Sat,  4 Feb 2006 10:54:07 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog THANKS sh.tarball
Message-Id: <20060204095407.6372D75294E@mail.ossp.org>
Date: Sat,  4 Feb 2006 10:54:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Feb-2006 10:54:07
  Branch: HEAD                             Handle: 2006020409540700

  Modified files:
    ossp-pkg/shtool         ChangeLog THANKS sh.tarball

  Log:
    Add ".svn" to the default ignore list of "shtool tarball".
    Add missing documentation for "shtool tarball" option "-d".
    
    Submitted by: Sakagami Hiroki <sakagami@gmail.com>

  Summary:
    Revision    Changes     Path
    1.222       +6  -0      ossp-pkg/shtool/ChangeLog
    1.37        +1  -0      ossp-pkg/shtool/THANKS
    1.25        +10 -4      ossp-pkg/shtool/sh.tarball
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.221 -r1.222 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	4 Feb 2006 09:43:25 -0000	1.221
  +++ ossp-pkg/shtool/ChangeLog	4 Feb 2006 09:54:07 -0000	1.222
  @@ -11,6 +11,12 @@
   
    Changes between 2.0.3 and 2.0.4 (02-Oct-2005 to 04-Feb-2006):
   
  +   *) Add ".svn" to the default ignore list of "shtool tarball".
  +      [Ralf S. Engelschall]
  +
  +   *) Add missing documentation for "shtool tarball" option "-d".
  +      [Ralf S. Engelschall, Sakagami Hiroki <sakagami@gmail.com>]
  +
      *) Enhance portability even more by maximizing Bourne Shell
         compatibility under ZSH and BASH and avoiding NLS dependencies.
         [R. N. de Arenas Coronado <privado@dervishd.net>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/THANKS
  ============================================================================
  $ cvs diff -u -r1.36 -r1.37 THANKS
  --- ossp-pkg/shtool/THANKS	12 Oct 2005 12:34:50 -0000	1.36
  +++ ossp-pkg/shtool/THANKS	4 Feb 2006 09:54:07 -0000	1.37
  @@ -25,6 +25,7 @@
     o Henri Gomez              <henri.gomez@gmail.com>
     o Lars Hecking             <lhecking@nmrc.ucc.ie>
     o Manuel Hendel            <manuel@hendel.net>
  +  o Sakagami Hiroki          <sakagami@gmail.com>
     o Jim Jagielski            <jim@jaguNET.com>
     o Martin Kraemer           <Martin.Kraemer@MchP.Siemens.De>
     o Thomas Linden            <tom@izb.net>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.tarball
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 sh.tarball
  --- ossp-pkg/shtool/sh.tarball	4 Feb 2006 09:43:25 -0000	1.24
  +++ ossp-pkg/shtool/sh.tarball	4 Feb 2006 09:54:07 -0000	1.25
  @@ -31,7 +31,7 @@
   opt_d=""
   opt_u=""
   opt_g=""
  -opt_e="CVS,\\.cvsignore,\\.[oa]\$"
  +opt_e="CVS,\\.cvsignore,\\.svn,\\.[oa]\$"
   
   . ./sh.common
   
  @@ -209,6 +209,7 @@
   [B<-v>|B<--verbose>]
   [B<-o>|B<--output> I<tarball>]
   [B<-c>|B<--compress> I<prog>]
  +[B<-d>|B<--directory> I<directory>]
   [B<-u>|B<--user> I<user>]
   [B<-g>|B<--group> I<group>]
   [B<-e>|B<--exclude> I<pattern>]
  @@ -221,8 +222,8 @@
   
   The four important aspects of good open source software tarballs are:
   (1) unpack into a single top-level directory, (2) top-level directory
  -corresponds to the tarball filename, (3) tarball should be sorted and
  -(4) arbitrary names for file owner and group.
  +corresponds to the tarball filename, (3) tarball files should be sorted
  +and (4) arbitrary names for file owner and group.
   
   =head1 OPTIONS
   
  @@ -246,6 +247,11 @@
   
   Pipe resulting tarball through compression program I<prog>.
   
  +=item B<-d>, B<--directory> I<directory>
  +
  +Sets the top-level directory into which the tarball unpacks.
  +By default it is I<tarball> without the trailing C<.tar.*> extension.
  +
   =item B<-u>, B<--user> I<user>
   
   The user (owner) of files and directories in the tarball to I<user>.
  @@ -259,7 +265,7 @@
   Exclude files and directories matching comma-separated list of
   regex I<pattern> from the tarball. Directories are expanded
   before the filtering takes place. The default filter pattern is
  -"C<CVS,\\.cvsignore,\\.[oa]\$>".
  +"C<CVS,\\.cvsignore,\\.svn,\\.[oa]\$>".
   
   =back
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Feb  4 10:59:17 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 0C45A75294E; Sat,  4 Feb 2006 10:59:17 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog THANKS sh.mdate
Message-Id: <20060204095917.0C45A75294E@mail.ossp.org>
Date: Sat,  4 Feb 2006 10:59:17 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Feb-2006 10:59:17
  Branch: HEAD                             Handle: 2006020409591600

  Modified files:
    ossp-pkg/shtool         ChangeLog THANKS sh.mdate

  Log:
    Remove obsolete LANG/LC_TIME/LC_ALL adjustments in sh.mdate.
    
    Submitted by: Mike Frysinger <vapier@gentoo.org>

  Summary:
    Revision    Changes     Path
    1.223       +3  -0      ossp-pkg/shtool/ChangeLog
    1.38        +1  -0      ossp-pkg/shtool/THANKS
    1.18        +0  -5      ossp-pkg/shtool/sh.mdate
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.222 -r1.223 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	4 Feb 2006 09:54:07 -0000	1.222
  +++ ossp-pkg/shtool/ChangeLog	4 Feb 2006 09:59:16 -0000	1.223
  @@ -11,6 +11,9 @@
   
    Changes between 2.0.3 and 2.0.4 (02-Oct-2005 to 04-Feb-2006):
   
  +   *) Remove obsolete LANG/LC_TIME/LC_ALL adjustments in sh.mdate.
  +      [Mike Frysinger <vapier@gentoo.org>]
  +
      *) Add ".svn" to the default ignore list of "shtool tarball".
         [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/THANKS
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 THANKS
  --- ossp-pkg/shtool/THANKS	4 Feb 2006 09:54:07 -0000	1.37
  +++ ossp-pkg/shtool/THANKS	4 Feb 2006 09:59:16 -0000	1.38
  @@ -20,6 +20,7 @@
     o Alan Eldridge            <alane@geeksrus.net>
     o Michael van Elst         <mlelstv@serpens.de>
     o Scott R. Every           <scott@emji.net>
  +  o Mike Frysinger           <vapier@gentoo.org>
     o Daniel Richard G.        <straker@MIT.EDU>
     o Dean Gaudet              <dgaudet@arctic.org>
     o Henri Gomez              <henri.gomez@gmail.com>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.mdate
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 sh.mdate
  --- ossp-pkg/shtool/sh.mdate	4 Feb 2006 09:43:25 -0000	1.17
  +++ ossp-pkg/shtool/sh.mdate	4 Feb 2006 09:59:16 -0000	1.18
  @@ -46,11 +46,6 @@
       shtool_exit 1
   fi
   
  -#   prevent "date" giving response in another language
  -LANG=C;    export LANG
  -LC_ALL=C;  export LC_ALL
  -LC_TIME=C; export LC_TIME
  -
   #   GNU ls changes its time format in response to the TIME_STYLE
   #   variable. Since we cannot assume "unset" works, revert this
   #   variable to its documented default.
  @@ .

From ossp-cvs-owner@ossp.org  Sat Feb  4 11:41:19 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 7A229752948; Sat,  4 Feb 2006 11:41:19 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ README VERSION shtool.spec
Message-Id: <20060204104119.7A229752948@mail.ossp.org>
Date: Sat,  4 Feb 2006 11:41:19 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Feb-2006 11:41:19
  Branch: HEAD                             Handle: 2006020410411801

  Modified files:
    ossp-pkg/shtool         README VERSION shtool.spec

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.111       +1  -1      ossp-pkg/shtool/README
    1.84        +1  -1      ossp-pkg/shtool/VERSION
    1.29        +1  -1      ossp-pkg/shtool/shtool.spec
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/README
  ============================================================================
  $ cvs diff -u -r1.110 -r1.111 README
  --- ossp-pkg/shtool/README	4 Feb 2006 09:43:25 -0000	1.110
  +++ ossp-pkg/shtool/README	4 Feb 2006 10:41:18 -0000	1.111
  @@ -10,7 +10,7 @@
     http://www.gnu.org/software/shtool/
     ftp://ftp.gnu.org/gnu/shtool/
   
  -  Version 2.0.3 (02-Oct-2005)
  +  Version 2.0.4 (04-Feb-2006)
   
     The GNU shtool program is a compilation of small but very stable and
     portable shell scripts into a single shell tool. All ingredients
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/VERSION
  ============================================================================
  $ cvs diff -u -r1.83 -r1.84 VERSION
  --- ossp-pkg/shtool/VERSION	2 Oct 2005 14:18:34 -0000	1.83
  +++ ossp-pkg/shtool/VERSION	4 Feb 2006 10:41:19 -0000	1.84
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for GNU shtool (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is GNU shtool, Version 2.0.3 (02-Oct-2005)
  +  This is GNU shtool, Version 2.0.4 (04-Feb-2006)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtool.spec
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 shtool.spec
  --- ossp-pkg/shtool/shtool.spec	4 Feb 2006 09:43:26 -0000	1.28
  +++ ossp-pkg/shtool/shtool.spec	4 Feb 2006 10:41:19 -0000	1.29
  @@ -30,7 +30,7 @@
   %define prefix /usr/local
   %endif
   
  -%define ver 2.0.3
  +%define ver 2.0.4
   %define rel 0
   
   Name:       shtool
  @@ .

From ossp-cvs-owner@ossp.org  Sat Feb  4 12:09:13 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id ED36075294B; Sat,  4 Feb 2006 12:09:12 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/tool/ index.wml ossp-w...
Message-Id: <20060204110912.ED36075294B@mail.ossp.org>
Date: Sat,  4 Feb 2006 12:09:12 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   04-Feb-2006 12:09:12
  Branch: HEAD                             Handle: 2006020411091101

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/shtool
                            index.wml

  Log:
    release GNU shtool 2.0.4

  Summary:
    Revision    Changes     Path
    1.145       +1  -0      ossp-web/new/news.txt
    1.54        +1  -1      ossp-web/pkg/tool/index.wml
    1.14        +2  -2      ossp-web/pkg/tool/shtool/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.144 -r1.145 news.txt
  --- ossp-web/new/news.txt	15 Jan 2006 18:47:26 -0000	1.144
  +++ ossp-web/new/news.txt	4 Feb 2006 11:09:11 -0000	1.145
  @@ -1,3 +1,4 @@
  +04-Feb-2006: Released T<GNU shtool> 2.0.4
   15-Jan-2006: Released L<OSSP uuid> 1.4.0
   06-Dec-2005: Released L<OSSP uuid> 1.3.2
   22-Nov-2005: Released L<GNU pth> 2.0.6
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.53 -r1.54 index.wml
  --- ossp-web/pkg/tool/index.wml	9 Oct 2005 21:49:26 -0000	1.53
  +++ ossp-web/pkg/tool/index.wml	4 Feb 2006 11:09:11 -0000	1.54
  @@ -14,7 +14,7 @@
   <pkg_list>
     <pkg_item name="shtool" longname="GNU shtool" type="tool"
               desc="Portable Shell Tool"
  -		    done=100 stable="2.0.3" unstable=none>
  +		    done=100 stable="2.0.4" unstable=none>
     <pkg_item name="lmtp2nntp" longname="OSSP lmtp2nntp" type="tool"
               desc="Real-Time Mail to News Gateway"
               done=100 stable="1.4.1" unstable=none>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/shtool/index.wml
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 index.wml
  --- ossp-web/pkg/tool/shtool/index.wml	2 Oct 2005 14:30:39 -0000	1.13
  +++ ossp-web/pkg/tool/shtool/index.wml	4 Feb 2006 11:09:12 -0000	1.14
  @@ -40,7 +40,7 @@
   
   <pkg_status
       name="shtool" assign="rse"
  -    stable="2.0.3"   stable_date="02-Oct-2005"
  +    stable="2.0.4"   stable_date="04-Feb-2006"
       unstable="none"  unstable_date="none"
   	done=100>
   
  @@ -51,7 +51,7 @@
       url=$(FTP_ROOT_URL)/pkg/tool/shtool/
       directory=$(FTP_ROOT_DIR)/pkg/tool/shtool/
       files="shtool-*.tar.gz" 
  -	stable="shtool-2.0.3.tar.gz" unstable="none">
  +	stable="shtool-2.0.4.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb  7 09:19:19 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 8CAAD7528E1; Tue,  7 Feb 2006 09:19:18 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog ossp-pkg/uuid/perl/ uuid.xs ossp-...
Message-Id: <20060207081918.8CAAD7528E1@mail.ossp.org>
Date: Tue,  7 Feb 2006 09:19:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Feb-2006 09:19:18
  Branch: HEAD                             Handle: 2006020708191402

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid.c uuid.h.in uuid_cli.c
    ossp-pkg/uuid/perl      uuid.xs
    ossp-pkg/uuid/pgsql     uuid.c
    ossp-pkg/uuid/php       uuid.c

  Log:
    Apply workaround to uuid.h to avoid conflicts with
    vendor UUID implementations where uuid_t (Darwin / MacOS X)
    or uuid_create/uuid_compare (POSIX) might exist.
    
    Supported by: SpaceNet (MacOS X platform)

  Summary:
    Revision    Changes     Path
    1.105       +7  -0      ossp-pkg/uuid/ChangeLog
    1.6         +2  -2      ossp-pkg/uuid/perl/uuid.xs
    1.3         +3  -3      ossp-pkg/uuid/pgsql/uuid.c
    1.5         +1  -1      ossp-pkg/uuid/php/uuid.c
    1.58        +5  -3      ossp-pkg/uuid/uuid.c
    1.11        +10 -0      ossp-pkg/uuid/uuid.h.in
    1.21        +2  -2      ossp-pkg/uuid/uuid_cli.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.104 -r1.105 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	15 Jan 2006 18:40:36 -0000	1.104
  +++ ossp-pkg/uuid/ChangeLog	7 Feb 2006 08:19:14 -0000	1.105
  @@ -11,6 +11,13 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 1.4.0 and 1.4.1 (15-Jan-2006 to 07-Feb-2006)
  +
  +   o Apply workaround to uuid.h to avoid conflicts with
  +     vendor UUID implementations where uuid_t (Darwin/MacOSX)
  +     or uuid_create/uuid_compare (POSIX) might exist.
  +     [Ralf S. Engelschall]
  +
     Changes between 1.3.2 and 1.4.0 (06-Dec-2005 to 15-Jan-2006)
   
      o Created a top-level Perl ExtUtils::MakeMaker wrapper script
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.xs
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 uuid.xs
  --- ossp-pkg/uuid/perl/uuid.xs	13 Jan 2006 06:44:33 -0000	1.5
  +++ ossp-pkg/uuid/perl/uuid.xs	7 Feb 2006 08:19:15 -0000	1.6
  @@ -27,12 +27,12 @@
   **  uuid.xs: Perl Binding (Perl/XS part)
   */
   
  +#include "uuid.h"
  +
   #include "EXTERN.h"
   #include "perl.h"
   #include "XSUB.h"
   
  -#include "uuid.h"
  -
   MODULE = OSSP::uuid PACKAGE = OSSP::uuid
   
   void
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/pgsql/uuid.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid.c
  --- ossp-pkg/uuid/pgsql/uuid.c	13 Jan 2006 06:44:34 -0000	1.2
  +++ ossp-pkg/uuid/pgsql/uuid.c	7 Feb 2006 08:19:15 -0000	1.3
  @@ -27,6 +27,9 @@
   **  uuid.c: PostgreSQL Binding (C part)
   */
   
  +/*  own headers */
  +#include "uuid.h"
  +
   /*  PostgreSQL (part 1/2) headers */
   #include "postgres.h"
   
  @@ -37,9 +40,6 @@
   #include "fmgr.h"
   #include "lib/stringinfo.h"
   
  -/*  own headers */
  -#include "uuid.h"
  -
   /* internal UUID datum data structure */
   typedef struct {
       char uuid_bin[UUID_LEN_BIN];
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/php/uuid.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 uuid.c
  --- ossp-pkg/uuid/php/uuid.c	13 Jan 2006 06:44:34 -0000	1.4
  +++ ossp-pkg/uuid/php/uuid.c	7 Feb 2006 08:19:16 -0000	1.5
  @@ -31,9 +31,9 @@
   #include "config.h"
   #endif
   
  +#include "uuid.h"
   #include "php.h"
   #include "ext/standard/info.h"
  -#include "uuid.h"
   
   /* context structure */
   typedef struct {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.57 -r1.58 uuid.c
  --- ossp-pkg/uuid/uuid.c	13 Jan 2006 06:44:30 -0000	1.57
  +++ ossp-pkg/uuid/uuid.c	7 Feb 2006 08:19:15 -0000	1.58
  @@ -27,6 +27,10 @@
   **  uuid.c: library API implementation
   */
   
  +/* own headers (part 1/2) */
  +#include "config.h"
  +#include "uuid.h"
  +
   /* system headers */
   #include <stdio.h>
   #include <stdlib.h>
  @@ -39,9 +43,7 @@
   #include <sys/time.h>
   #include <sys/types.h>
   
  -/* own headers */
  -#include "config.h"
  -#include "uuid.h"
  +/* own headers (part 2/2) */
   #include "uuid_vers.h"
   #include "uuid_md5.h"
   #include "uuid_sha1.h"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.h.in
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 uuid.h.in
  --- ossp-pkg/uuid/uuid.h.in	13 Jan 2006 06:44:30 -0000	1.10
  +++ ossp-pkg/uuid/uuid.h.in	7 Feb 2006 08:19:15 -0000	1.11
  @@ -30,6 +30,16 @@
   #ifndef __UUID_H__
   #define __UUID_H__
   
  +/* workaround conflicts with system headers */
  +#define uuid_t       __vendor_uuid_t
  +#define uuid_create  __vendor_uuid_create
  +#define uuid_compare __vendor_uuid_compare
  +#include <sys/types.h>
  +#include <unistd.h>
  +#undef  uuid_t
  +#undef  uuid_create
  +#undef  uuid_compare
  +
   /* required system headers */
   #include <string.h>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.c
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 uuid_cli.c
  --- ossp-pkg/uuid/uuid_cli.c	13 Jan 2006 06:44:30 -0000	1.20
  +++ ossp-pkg/uuid/uuid_cli.c	7 Feb 2006 08:19:15 -0000	1.21
  @@ -27,6 +27,8 @@
   **  uuid_cli.c: command line tool
   */
   
  +#include "uuid.h"
  +
   #include <stdio.h>
   #include <stdlib.h>
   #include <stdarg.h>
  @@ -34,8 +36,6 @@
   #include <string.h>
   #include <errno.h>
   
  -#include "uuid.h"
  -
   /* error handler */
   static void
   error(int ec, const char *str, ...)
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb  7 09:22:26 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id D06B47528E1; Tue,  7 Feb 2006 09:22:26 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog devtool.conf
Message-Id: <20060207082226.D06B47528E1@mail.ossp.org>
Date: Tue,  7 Feb 2006 09:22:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Feb-2006 09:22:26
  Branch: HEAD                             Handle: 2006020708222600

  Modified files:
    ossp-pkg/uuid           ChangeLog devtool.conf

  Log:
    Upgrade to GNU shtool 2.0.4

  Summary:
    Revision    Changes     Path
    1.106       +3  -0      ossp-pkg/uuid/ChangeLog
    1.25        +1  -1      ossp-pkg/uuid/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.105 -r1.106 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	7 Feb 2006 08:19:14 -0000	1.105
  +++ ossp-pkg/uuid/ChangeLog	7 Feb 2006 08:22:26 -0000	1.106
  @@ -13,6 +13,9 @@
   
     Changes between 1.4.0 and 1.4.1 (15-Jan-2006 to 07-Feb-2006)
   
  +   o Upgrade to GNU shtool 2.0.4
  +     [Ralf S. Engelschall]
  +
      o Apply workaround to uuid.h to avoid conflicts with
        vendor UUID implementations where uuid_t (Darwin/MacOSX)
        or uuid_create/uuid_compare (POSIX) might exist.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 devtool.conf
  --- ossp-pkg/uuid/devtool.conf	12 Jan 2006 20:31:50 -0000	1.24
  +++ ossp-pkg/uuid/devtool.conf	7 Feb 2006 08:22:26 -0000	1.25
  @@ -3,7 +3,7 @@
   ##
   
   %autogen
  -    @autogen shtool   2.0.3  "2.0.*" all
  +    @autogen shtool   2.0.4  "2.0.*" all
       @autogen libtool  1.5.22 "1.5*"
       @autogen autoconf 2.59   "2.5[3-9]*"
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb  7 09:31:45 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 740C17528E9; Tue,  7 Feb 2006 09:31:45 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog sh.version
Message-Id: <20060207083145.740C17528E9@mail.ossp.org>
Date: Tue,  7 Feb 2006 09:31:45 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Feb-2006 09:31:45
  Branch: HEAD                             Handle: 2006020708314400

  Modified files:
    ossp-pkg/shtool         ChangeLog sh.version

  Log:
    Fix "shtool version" command which got broken after
    recent util_{lower,upper} usage.

  Summary:
    Revision    Changes     Path
    1.224       +6  -0      ossp-pkg/shtool/ChangeLog
    1.42        +2  -2      ossp-pkg/shtool/sh.version
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.223 -r1.224 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	4 Feb 2006 09:59:16 -0000	1.223
  +++ ossp-pkg/shtool/ChangeLog	7 Feb 2006 08:31:44 -0000	1.224
  @@ -9,6 +9,12 @@
   
    ChangeLog
   
  + Changes between 2.0.4 and 2.0.5 (04-Feb-2006 to 07-Feb-2006):
  +
  +   *) Fix "shtool version" command which got broken after
  +      recent util_{lower,upper} usage.
  +      [Ralf S. Engelschall]
  +
    Changes between 2.0.3 and 2.0.4 (02-Oct-2005 to 04-Feb-2006):
   
      *) Remove obsolete LANG/LC_TIME/LC_ALL adjustments in sh.mdate.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.version
  ============================================================================
  $ cvs diff -u -r1.41 -r1.42 sh.version
  --- ossp-pkg/shtool/sh.version	4 Feb 2006 09:43:25 -0000	1.41
  +++ ossp-pkg/shtool/sh.version	7 Feb 2006 08:31:44 -0000	1.42
  @@ -191,10 +191,10 @@
   
       #   determine string out of filename
       #   (do NOT try to optimize this in any way because of portability)
  -    filestr=`echo $file | util_upper | tr './%+' '____' | sed -e 's/-/_/g'`
  +    filestr=`util_upper "$file" | tr './%+' '____' | sed -e 's/-/_/g'`
   
       #   generate uppercase prefix
  -    prefixupper=`echo $prefix | util_upper`
  +    prefixupper=`util_upper "$prefix"`
   
       #   create the version file according the the selected language
       echo "new version: ${vLong}"
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb  7 09:32:26 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 20D29752914; Tue,  7 Feb 2006 09:32:26 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ README VERSION shtool.spec
Message-Id: <20060207083226.20D29752914@mail.ossp.org>
Date: Tue,  7 Feb 2006 09:32:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Feb-2006 09:32:26
  Branch: HEAD                             Handle: 2006020708322500

  Modified files:
    ossp-pkg/shtool         README VERSION shtool.spec

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.112       +1  -1      ossp-pkg/shtool/README
    1.85        +1  -1      ossp-pkg/shtool/VERSION
    1.30        +1  -1      ossp-pkg/shtool/shtool.spec
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/README
  ============================================================================
  $ cvs diff -u -r1.111 -r1.112 README
  --- ossp-pkg/shtool/README	4 Feb 2006 10:41:18 -0000	1.111
  +++ ossp-pkg/shtool/README	7 Feb 2006 08:32:25 -0000	1.112
  @@ -10,7 +10,7 @@
     http://www.gnu.org/software/shtool/
     ftp://ftp.gnu.org/gnu/shtool/
   
  -  Version 2.0.4 (04-Feb-2006)
  +  Version 2.0.5 (07-Feb-2006)
   
     The GNU shtool program is a compilation of small but very stable and
     portable shell scripts into a single shell tool. All ingredients
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/VERSION
  ============================================================================
  $ cvs diff -u -r1.84 -r1.85 VERSION
  --- ossp-pkg/shtool/VERSION	4 Feb 2006 10:41:19 -0000	1.84
  +++ ossp-pkg/shtool/VERSION	7 Feb 2006 08:32:25 -0000	1.85
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for GNU shtool (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is GNU shtool, Version 2.0.4 (04-Feb-2006)
  +  This is GNU shtool, Version 2.0.5 (07-Feb-2006)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtool.spec
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 shtool.spec
  --- ossp-pkg/shtool/shtool.spec	4 Feb 2006 10:41:19 -0000	1.29
  +++ ossp-pkg/shtool/shtool.spec	7 Feb 2006 08:32:25 -0000	1.30
  @@ -30,7 +30,7 @@
   %define prefix /usr/local
   %endif
   
  -%define ver 2.0.4
  +%define ver 2.0.5
   %define rel 0
   
   Name:       shtool
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb  7 09:36:37 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 5743B752917; Tue,  7 Feb 2006 09:36:37 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/tool/ index.wml ossp-w...
Message-Id: <20060207083637.5743B752917@mail.ossp.org>
Date: Tue,  7 Feb 2006 09:36:37 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   07-Feb-2006 09:36:37
  Branch: HEAD                             Handle: 2006020708363601

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/shtool
                            index.wml

  Log:
    release GNU shtool 2.0.5

  Summary:
    Revision    Changes     Path
    1.146       +1  -0      ossp-web/new/news.txt
    1.55        +1  -1      ossp-web/pkg/tool/index.wml
    1.15        +2  -2      ossp-web/pkg/tool/shtool/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.145 -r1.146 news.txt
  --- ossp-web/new/news.txt	4 Feb 2006 11:09:11 -0000	1.145
  +++ ossp-web/new/news.txt	7 Feb 2006 08:36:36 -0000	1.146
  @@ -1,3 +1,4 @@
  +07-Feb-2006: Released T<GNU shtool> 2.0.5
   04-Feb-2006: Released T<GNU shtool> 2.0.4
   15-Jan-2006: Released L<OSSP uuid> 1.4.0
   06-Dec-2005: Released L<OSSP uuid> 1.3.2
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.54 -r1.55 index.wml
  --- ossp-web/pkg/tool/index.wml	4 Feb 2006 11:09:11 -0000	1.54
  +++ ossp-web/pkg/tool/index.wml	7 Feb 2006 08:36:37 -0000	1.55
  @@ -14,7 +14,7 @@
   <pkg_list>
     <pkg_item name="shtool" longname="GNU shtool" type="tool"
               desc="Portable Shell Tool"
  -		    done=100 stable="2.0.4" unstable=none>
  +		    done=100 stable="2.0.5" unstable=none>
     <pkg_item name="lmtp2nntp" longname="OSSP lmtp2nntp" type="tool"
               desc="Real-Time Mail to News Gateway"
               done=100 stable="1.4.1" unstable=none>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/shtool/index.wml
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 index.wml
  --- ossp-web/pkg/tool/shtool/index.wml	4 Feb 2006 11:09:12 -0000	1.14
  +++ ossp-web/pkg/tool/shtool/index.wml	7 Feb 2006 08:36:36 -0000	1.15
  @@ -40,7 +40,7 @@
   
   <pkg_status
       name="shtool" assign="rse"
  -    stable="2.0.4"   stable_date="04-Feb-2006"
  +    stable="2.0.5"   stable_date="07-Feb-2006"
       unstable="none"  unstable_date="none"
   	done=100>
   
  @@ -51,7 +51,7 @@
       url=$(FTP_ROOT_URL)/pkg/tool/shtool/
       directory=$(FTP_ROOT_DIR)/pkg/tool/shtool/
       files="shtool-*.tar.gz" 
  -	stable="shtool-2.0.4.tar.gz" unstable="none">
  +	stable="shtool-2.0.7.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb  7 09:42:54 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 2D134752921; Tue,  7 Feb 2006 09:42:54 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog README devtool.conf ossp-pkg/uuid...
Message-Id: <20060207084254.2D134752921@mail.ossp.org>
Date: Tue,  7 Feb 2006 09:42:54 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Feb-2006 09:42:54
  Branch: HEAD                             Handle: 2006020708425300

  Modified files:
    ossp-pkg/uuid           ChangeLog README devtool.conf uuid_vers.h
    ossp-pkg/uuid/perl      uuid.pm uuid_compat.pm

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.107       +1  -1      ossp-pkg/uuid/ChangeLog
    1.38        +1  -1      ossp-pkg/uuid/README
    1.26        +1  -1      ossp-pkg/uuid/devtool.conf
    1.16        +1  -1      ossp-pkg/uuid/perl/uuid.pm
    1.7         +1  -1      ossp-pkg/uuid/perl/uuid_compat.pm
    1.22        +9  -9      ossp-pkg/uuid/uuid_vers.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.106 -r1.107 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	7 Feb 2006 08:22:26 -0000	1.106
  +++ ossp-pkg/uuid/ChangeLog	7 Feb 2006 08:42:53 -0000	1.107
  @@ -13,7 +13,7 @@
   
     Changes between 1.4.0 and 1.4.1 (15-Jan-2006 to 07-Feb-2006)
   
  -   o Upgrade to GNU shtool 2.0.4
  +   o Upgrade to GNU shtool 2.0.5
        [Ralf S. Engelschall]
   
      o Apply workaround to uuid.h to avoid conflicts with
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 README
  --- ossp-pkg/uuid/README	15 Jan 2006 18:40:15 -0000	1.37
  +++ ossp-pkg/uuid/README	7 Feb 2006 08:42:53 -0000	1.38
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
   
     OSSP uuid - Universally Unique Identifier
  -  Version 1.4.0 (15-Jan-2006)
  +  Version 1.4.1 (07-Feb-2006)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 devtool.conf
  --- ossp-pkg/uuid/devtool.conf	7 Feb 2006 08:22:26 -0000	1.25
  +++ ossp-pkg/uuid/devtool.conf	7 Feb 2006 08:42:53 -0000	1.26
  @@ -3,7 +3,7 @@
   ##
   
   %autogen
  -    @autogen shtool   2.0.4  "2.0.*" all
  +    @autogen shtool   2.0.5  "2.0.*" all
       @autogen libtool  1.5.22 "1.5*"
       @autogen autoconf 2.59   "2.5[3-9]*"
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.pm
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 uuid.pm
  --- ossp-pkg/uuid/perl/uuid.pm	13 Jan 2006 06:44:33 -0000	1.15
  +++ ossp-pkg/uuid/perl/uuid.pm	7 Feb 2006 08:42:53 -0000	1.16
  @@ -118,7 +118,7 @@
   use Exporter;
   
   #   API version
  -our $VERSION = do { my @v = ('1.4.0' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
  +our $VERSION = do { my @v = ('1.4.1' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
   
   #   API inheritance
   our @ISA = qw(Exporter);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid_compat.pm
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 uuid_compat.pm
  --- ossp-pkg/uuid/perl/uuid_compat.pm	13 Jan 2006 06:44:33 -0000	1.6
  +++ ossp-pkg/uuid/perl/uuid_compat.pm	7 Feb 2006 08:42:53 -0000	1.7
  @@ -42,7 +42,7 @@
   our @ISA     = qw(Exporter);
   our @EXPORT  = qw(NameSpace_DNS NameSpace_OID NameSpace_URL NameSpace_X500);
   
  -our $VERSION = do { my @v = ('1.4.0' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
  +our $VERSION = do { my @v = ('1.4.1' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
   
   sub new {
       my $class = shift;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_vers.h
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 uuid_vers.h
  --- ossp-pkg/uuid/uuid_vers.h	15 Jan 2006 18:40:15 -0000	1.21
  +++ ossp-pkg/uuid/uuid_vers.h	7 Feb 2006 08:42:53 -0000	1.22
  @@ -8,7 +8,7 @@
   #ifndef _UUID_VERS_H_
   #define _UUID_VERS_H_
   
  -#define _UUID_VERSION 0x104200
  +#define _UUID_VERSION 0x104201
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _UUID_VERS_H_AS_HEADER_
   
   _uuid_version_t _uuid_version = {
  -    0x104200,
  -    "1.4.0",
  -    "1.4.0 (15-Jan-2006)",
  -    "This is OSSP uuid, Version 1.4.0 (15-Jan-2006)",
  -    "OSSP uuid 1.4.0 (15-Jan-2006)",
  -    "OSSP uuid/1.4.0",
  -    "@(#)OSSP uuid 1.4.0 (15-Jan-2006)",
  -    "$Id: OSSP uuid 1.4.0 (15-Jan-2006) $"
  +    0x104201,
  +    "1.4.1",
  +    "1.4.1 (07-Feb-2006)",
  +    "This is OSSP uuid, Version 1.4.1 (07-Feb-2006)",
  +    "OSSP uuid 1.4.1 (07-Feb-2006)",
  +    "OSSP uuid/1.4.1",
  +    "@(#)OSSP uuid 1.4.1 (07-Feb-2006)",
  +    "$Id: OSSP uuid 1.4.1 (07-Feb-2006) $"
   };
   
   #endif /* _UUID_VERS_H_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb  7 09:49:14 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B0AE4752921; Tue,  7 Feb 2006 09:49:14 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20060207084914.B0AE4752921@mail.ossp.org>
Date: Tue,  7 Feb 2006 09:49:14 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   07-Feb-2006 09:49:14
  Branch: HEAD                             Handle: 2006020708491400

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/uuid   index.wml

  Log:
    release OSSP uuid 1.4.1

  Summary:
    Revision    Changes     Path
    1.147       +1  -0      ossp-web/new/news.txt
    1.120       +1  -1      ossp-web/pkg/lib/index.wml
    1.28        +2  -2      ossp-web/pkg/lib/uuid/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.146 -r1.147 news.txt
  --- ossp-web/new/news.txt	7 Feb 2006 08:36:36 -0000	1.146
  +++ ossp-web/new/news.txt	7 Feb 2006 08:49:14 -0000	1.147
  @@ -1,3 +1,4 @@
  +07-Feb-2006: Released L<OSSP uuid> 1.4.1
   07-Feb-2006: Released T<GNU shtool> 2.0.5
   04-Feb-2006: Released T<GNU shtool> 2.0.4
   15-Jan-2006: Released L<OSSP uuid> 1.4.0
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.119 -r1.120 index.wml
  --- ossp-web/pkg/lib/index.wml	15 Jan 2006 18:47:27 -0000	1.119
  +++ ossp-web/pkg/lib/index.wml	7 Feb 2006 08:49:14 -0000	1.120
  @@ -33,7 +33,7 @@
   			done=100 stable=1.1.3 unstable=none>
     <pkg_item name="uuid" longname="OSSP uuid" type="lib"
               desc="Universally Unique Identifier"
  -			done=100 stable=1.4.0 unstable=none>
  +			done=100 stable=1.4.1 unstable=none>
     <pkg_item name="val" longname="OSSP val" type="lib"
               desc="Value Access"
   			done=95 stable=none unstable=0.9.4>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/uuid/index.wml
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 index.wml
  --- ossp-web/pkg/lib/uuid/index.wml	15 Jan 2006 18:47:28 -0000	1.27
  +++ ossp-web/pkg/lib/uuid/index.wml	7 Feb 2006 08:49:14 -0000	1.28
  @@ -48,7 +48,7 @@
   
   <pkg_status
       name="uuid" assign="rse"
  -    stable="1.4.0"    stable_date="15-Jan-2006"
  +    stable="1.4.1"    stable_date="07-Feb-2006"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -59,7 +59,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/uuid/
       directory=$(FTP_ROOT_DIR)/pkg/lib/uuid/
       files="uuid-[0-9.]*.tar.gz" 
  -	stable="uuid-1\.4\.0\.tar\.gz" unstable="none">
  +	stable="uuid-1\.4\.1\.tar\.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb 23 14:32:47 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 39A897528E0; Thu, 23 Feb 2006 14:32:47 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog Makefile.in
Message-Id: <20060223133247.39A897528E0@mail.ossp.org>
Date: Thu, 23 Feb 2006 14:32:47 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Feb-2006 14:32:47
  Branch: HEAD                             Handle: 2006022313324600

  Modified files:
    ossp-pkg/uuid           ChangeLog Makefile.in

  Log:
    Declare "install", "uninstall" and "clean" make(1) targets ".PHONY".
    This especially workarounds problems on case insensitive filesystems
    (like MacOS X' filesystem) where the "INSTALL" document conflicts with
    the "install" target.

  Summary:
    Revision    Changes     Path
    1.108       +8  -0      ossp-pkg/uuid/ChangeLog
    1.40        +3  -0      ossp-pkg/uuid/Makefile.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.107 -r1.108 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	7 Feb 2006 08:42:53 -0000	1.107
  +++ ossp-pkg/uuid/ChangeLog	23 Feb 2006 13:32:46 -0000	1.108
  @@ -11,6 +11,14 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 1.4.1 and 1.4.2 (07-Feb-2006 to xx-Feb-2006)
  +   
  +   o Declare "install", "uninstall" and "clean" make(1) targets
  +     ".PHONY". This especially workarounds problems on case insensitive
  +     filesystems (like MacOS X' filesystem) where the "INSTALL" document
  +     conflicts with the "install" target.
  +     [Ralf S. Engelschall, David Wheeler <david@kineticode.com>]
  +
     Changes between 1.4.0 and 1.4.1 (15-Jan-2006 to 07-Feb-2006)
   
      o Upgrade to GNU shtool 2.0.5
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.39 -r1.40 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	13 Jan 2006 06:44:30 -0000	1.39
  +++ ossp-pkg/uuid/Makefile.in	23 Feb 2006 13:32:46 -0000	1.40
  @@ -219,6 +219,7 @@
   	    (cd $(S)/pgsql && $(MAKE) $(MFLAGS) test PG_CONFIG=$(PG_CONFIG)); \
   	fi
   
  +.PHONY: install
   install:
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
  @@ -262,6 +263,7 @@
   	    (cd $(S)/pgsql && $(MAKE) $(MFLAGS) install DESTDIR=$(DESTDIR) PG_CONFIG=$(PG_CONFIG)); \
   	fi
   
  +.PHONY: uninstall
   uninstall:
   	-$(RM) $(DESTDIR)$(mandir)/man1/uuid.1
   	-@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(bindir)/uuid
  @@ -298,6 +300,7 @@
   	-$(RMDIR) $(DESTDIR)$(bindir) >/dev/null 2>&1 || $(TRUE)
   	-$(RMDIR) $(DESTDIR)$(prefix) >/dev/null 2>&1 || $(TRUE)
   
  +.PHONY: clean
   clean:
   	-$(RM) $(LIB_NAME) $(LIB_OBJS)
   	-@if [ ".$(WITH_DCE)" = .yes ]; then \
  @@ .

From ossp-cvs-owner@ossp.org  Tue Feb 28 22:10:18 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 5C2957528A9; Tue, 28 Feb 2006 22:10:18 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ ChangeLog devtool.conf
Message-Id: <20060228211018.5C2957528A9@mail.ossp.org>
Date: Tue, 28 Feb 2006 22:10:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Feb-2006 22:10:18
  Branch: HEAD                             Handle: 2006022821101700

  Modified files:
    ossp-pkg/sa             ChangeLog devtool.conf

  Log:
    Upgrade build environment to GNU libtool 1.5.22 and GNU shtool 2.0.5

  Summary:
    Revision    Changes     Path
    1.53        +6  -0      ossp-pkg/sa/ChangeLog
    1.29        +2  -2      ossp-pkg/sa/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.52 -r1.53 ChangeLog
  --- ossp-pkg/sa/ChangeLog	3 Oct 2005 08:16:56 -0000	1.52
  +++ ossp-pkg/sa/ChangeLog	28 Feb 2006 21:10:17 -0000	1.53
  @@ -11,6 +11,12 @@
     This is a list of all changes to OSSP sa.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 1.2.6 and 1.2.7 (03-Oct-2005 to xx-XXX-2006)
  +
  +   o Upgrade build environment to GNU libtool 1.5.22 and
  +     GNU shtool 2.0.5
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
     Changes between 1.2.5 and 1.2.6 (02-Oct-2005 to 03-Oct-2005)
   
      o Removed SA_SYSCALL_GETHOSTBYNAME because gethostbyname(3) cannot
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 devtool.conf
  --- ossp-pkg/sa/devtool.conf	2 Oct 2005 16:44:35 -0000	1.28
  +++ ossp-pkg/sa/devtool.conf	28 Feb 2006 21:10:17 -0000	1.29
  @@ -3,8 +3,8 @@
   ##
   
   %autogen
  -    @autogen shtool   2.0.3  "1.6.*" all
  -    @autogen libtool  1.5.20 "1.5*"
  +    @autogen shtool   2.0.5  "1.6.*" all
  +    @autogen libtool  1.5.22 "1.5*"
       @autogen autoconf 2.59   "2.5[4-9]*"
   
   %autoclean
  @@ .

From ossp-cvs-owner@ossp.org  Mon Mar 13 10:14:24 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id D4770752907; Mon, 13 Mar 2006 10:14:23 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog ossp-pkg/uuid/perl/ uuid.xs
Message-Id: <20060313091423.D4770752907@mail.ossp.org>
Date: Mon, 13 Mar 2006 10:14:23 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Mar-2006 10:14:23
  Branch: HEAD                             Handle: 2006031309142300

  Modified files:
    ossp-pkg/uuid           ChangeLog
    ossp-pkg/uuid/perl      uuid.xs

  Log:
    Fix Perl API's "export" function by not taking over NUL-termination
    character under UUID_FMT_TXT.

  Summary:
    Revision    Changes     Path
    1.109       +4  -0      ossp-pkg/uuid/ChangeLog
    1.7         +1  -1      ossp-pkg/uuid/perl/uuid.xs
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.108 -r1.109 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	23 Feb 2006 13:32:46 -0000	1.108
  +++ ossp-pkg/uuid/ChangeLog	13 Mar 2006 09:14:23 -0000	1.109
  @@ -12,6 +12,10 @@
     For a more brief summary please have a look at the NEWS file.
   
     Changes between 1.4.1 and 1.4.2 (07-Feb-2006 to xx-Feb-2006)
  +
  +   o Fix Perl API's "export" function by not taking over NUL-termination
  +     character under UUID_FMT_TXT.
  +     [Thomas Lotterer <thomas@lotterer.net>]
      
      o Declare "install", "uninstall" and "clean" make(1) targets
        ".PHONY". This especially workarounds problems on case insensitive
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.xs
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 uuid.xs
  --- ossp-pkg/uuid/perl/uuid.xs	7 Feb 2006 08:19:15 -0000	1.6
  +++ ossp-pkg/uuid/perl/uuid.xs	13 Mar 2006 09:14:23 -0000	1.7
  @@ -201,7 +201,7 @@
           data_len = 0;
           RETVAL = uuid_export(uuid, fmt, &data_ptr, &data_len);
           if (RETVAL == UUID_RC_OK) {
  -            if (fmt == UUID_FMT_STR)
  +            if (fmt == UUID_FMT_STR || fmt == UUID_FMT_TXT)
                   data_len--; /* Perl doesn't wish NUL-termination on strings */
               sv_setpvn(ST(2), data_ptr, data_len);
               free(data_ptr);
  @@ .

From ossp-cvs-owner@ossp.org  Mon Mar 13 10:39:11 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 83591752910; Mon, 13 Mar 2006 10:39:11 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog aclocal.m4 uuid.ac uuid_str.c
Message-Id: <20060313093911.83591752910@mail.ossp.org>
Date: Mon, 13 Mar 2006 10:39:11 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Mar-2006 10:39:11
  Branch: HEAD                             Handle: 2006031309391100

  Modified files:
    ossp-pkg/uuid           ChangeLog aclocal.m4 uuid.ac uuid_str.c

  Log:
    Fix uuid_export() function by fixing the internal
    uuid_s[ar]printf() functions which require the backup of va_list
    arguments between subsequent processing.

  Summary:
    Revision    Changes     Path
    1.110       +5  -0      ossp-pkg/uuid/ChangeLog
    1.2         +109 -0     ossp-pkg/uuid/aclocal.m4
    1.21        +3  -0      ossp-pkg/uuid/uuid.ac
    1.7         +6  -0      ossp-pkg/uuid/uuid_str.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.109 -r1.110 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	13 Mar 2006 09:14:23 -0000	1.109
  +++ ossp-pkg/uuid/ChangeLog	13 Mar 2006 09:39:11 -0000	1.110
  @@ -13,6 +13,11 @@
   
     Changes between 1.4.1 and 1.4.2 (07-Feb-2006 to xx-Feb-2006)
   
  +   o Fix uuid_export() function by fixing the internal
  +     uuid_s[ar]printf() functions which require the backup of va_list
  +     arguments between subsequent processing.
  +     [Ralf S. Engelschall, Thomas Lotterer <thomas@lotterer.net>]
  +
      o Fix Perl API's "export" function by not taking over NUL-termination
        character under UUID_FMT_TXT.
        [Thomas Lotterer <thomas@lotterer.net>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 aclocal.m4
  --- ossp-pkg/uuid/aclocal.m4	6 Jan 2004 20:14:28 -0000	1.1
  +++ ossp-pkg/uuid/aclocal.m4	13 Mar 2006 09:39:11 -0000	1.2
  @@ -114,3 +114,112 @@
   fi
   ])
   
  +dnl ##
  +dnl ##  Check for C99 va_copy() implementation
  +dnl ##  (and provide fallback implementation if neccessary)
  +dnl ##
  +dnl ##  configure.in:
  +dnl ##    AC_CHECK_VA_COPY
  +dnl ##  foo.c:
  +dnl ##    #include "config.h"
  +dnl ##    [...]
  +dnl ##    va_copy(d,s)
  +dnl ##
  +dnl ##  This check is rather complex: first because we really have to
  +dnl ##  try various possible implementations in sequence and second, we
  +dnl ##  cannot define a macro in config.h with parameters directly.
  +dnl ##
  +
  +dnl #   test program for va_copy() implementation
  +changequote(<<,>>)
  +m4_define(__va_copy_test, <<[
  +#include <stdlib.h>
  +#include <stdarg.h>
  +#include <string.h>
  +#define DO_VA_COPY(d, s) $1
  +void test(char *str, ...)
  +{
  +    va_list ap, ap2;
  +    int i;
  +    va_start(ap, str);
  +    DO_VA_COPY(ap2, ap);
  +    for (i = 1; i <= 9; i++) {
  +        int k = (int)va_arg(ap, int);
  +        if (k != i)
  +            abort();
  +    }
  +    DO_VA_COPY(ap, ap2);
  +    for (i = 1; i <= 9; i++) {
  +        int k = (int)va_arg(ap, int);
  +        if (k != i)
  +            abort();
  +    }
  +    va_end(ap);
  +}
  +int main(int argc, char *argv[])
  +{
  +    test("test", 1, 2, 3, 4, 5, 6, 7, 8, 9);
  +    exit(0);
  +}
  +]>>)
  +changequote([,])
  +
  +dnl #   test driver for va_copy() implementation
  +m4_define(__va_copy_check, [
  +    AH_VERBATIM($1,
  +[/* Predefined possible va_copy() implementation (id: $1) */
  +#define __VA_COPY_USE_$1(d, s) $2])
  +    if test ".$ac_cv_va_copy" = .; then
  +        AC_TRY_RUN(__va_copy_test($2), [ac_cv_va_copy="$1"])
  +    fi
  +])
  +
  +dnl #   Autoconf check for va_copy() implementation checking
  +AC_DEFUN(AC_CHECK_VA_COPY,[
  +  dnl #   provide Autoconf display check message
  +  AC_MSG_CHECKING(for va_copy() function)
  +  dnl #   check for various implementations in priorized sequence   
  +  AC_CACHE_VAL(ac_cv_va_copy, [
  +    ac_cv_va_copy=""
  +    dnl #   1. check for standardized C99 macro
  +    __va_copy_check(C99, [va_copy((d), (s))])
  +    dnl #   2. check for alternative/deprecated GCC macro
  +    __va_copy_check(GCM, [VA_COPY((d), (s))])
  +    dnl #   3. check for internal GCC macro (high-level define)
  +    __va_copy_check(GCH, [__va_copy((d), (s))])
  +    dnl #   4. check for internal GCC macro (built-in function)
  +    __va_copy_check(GCB, [__builtin_va_copy((d), (s))])
  +    dnl #   5. check for assignment approach (assuming va_list is a struct)
  +    __va_copy_check(ASS, [do { (d) = (s); } while (0)])
  +    dnl #   6. check for assignment approach (assuming va_list is a pointer)
  +    __va_copy_check(ASP, [do { *(d) = *(s); } while (0)])
  +    dnl #   7. check for memory copying approach (assuming va_list is a struct)
  +    __va_copy_check(CPS, [memcpy((void *)&(d), (void *)&(s)), sizeof((s))])
  +    dnl #   8. check for memory copying approach (assuming va_list is a pointer)
  +    __va_copy_check(CPP, [memcpy((void *)(d), (void *)(s)), sizeof(*(s))])
  +    if test ".$ac_cv_va_copy" = .; then
  +        AC_ERROR([no working implementation found])
  +    fi
  +  ])
  +  dnl #   optionally activate the fallback implementation
  +  if test ".$ac_cv_va_copy" = ".C99"; then
  +      AC_DEFINE(HAVE_VA_COPY, 1, [Define if va_copy() macro exists (and no fallback implementation is required)])
  +  fi
  +  dnl #   declare which fallback implementation to actually use
  +  AC_DEFINE_UNQUOTED([__VA_COPY_USE], [__VA_COPY_USE_$ac_cv_va_copy],
  +      [Define to id of used va_copy() implementation])
  +  dnl #   provide activation hook for fallback implementation
  +  AH_VERBATIM([__VA_COPY_ACTIVATION],
  +[/* Optional va_copy() implementation activation */
  +#ifndef HAVE_VA_COPY
  +#define va_copy(d, s) __VA_COPY_USE(d, s)
  +#endif
  +])
  +  dnl #   provide Autoconf display result message
  +  if test ".$ac_cv_va_copy" = ".C99"; then
  +      AC_MSG_RESULT([yes])
  +  else
  +      AC_MSG_RESULT([no (using fallback implementation)])
  +  fi
  +])
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.ac
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 uuid.ac
  --- ossp-pkg/uuid/uuid.ac	13 Jan 2006 06:44:30 -0000	1.20
  +++ ossp-pkg/uuid/uuid.ac	13 Mar 2006 09:39:11 -0000	1.21
  @@ -39,6 +39,9 @@
       fi
       AC_CHECK_LIB(socket, accept)
   
  +    dnl #  check for portable va_copy()
  +    AC_CHECK_VA_COPY()
  +
       dnl #   check for system headers
       AC_CHECK_HEADERS(sys/types.h sys/param.h sys/time.h sys/socket.h sys/sockio.h sys/ioctl.h)
       AC_CHECK_HEADERS(netdb.h ifaddrs.h net/if.h net/if_dl.h net/if_arp.h netinet/in.h arpa/inet.h,,,
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_str.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 uuid_str.c
  --- ossp-pkg/uuid/uuid_str.c	13 Jan 2006 06:44:31 -0000	1.6
  +++ ossp-pkg/uuid/uuid_str.c	13 Mar 2006 09:39:11 -0000	1.7
  @@ -690,10 +690,13 @@
   {
       char *rv;
       int n;
  +    va_list ap_bak;
   
  +    va_copy(ap_bak, ap);
       n = str_vsnprintf(NULL, 0, fmt, ap);
       if ((rv = (char *)malloc(n+1)) == NULL)
           return NULL;
  +    va_copy(ap, ap_bak);
       str_vsnprintf(rv, n+1, fmt, ap);
       return rv;
   }
  @@ -720,6 +723,7 @@
   {
       int rv;
       size_t n;
  +    va_list ap_bak;
   
       if (str == NULL)
           return -1;
  @@ -728,10 +732,12 @@
           rv = strlen(*str);
       }
       else {
  +        va_copy(ap_bak, ap);
           n = strlen(*str);
           rv = str_vsnprintf(NULL, 0, fmt, ap);
           if ((*str = (char *)realloc(*str, n+rv+1)) == NULL)
               return -1;
  +        va_copy(ap, ap_bak);
           str_vsnprintf((*str)+n, rv+1, fmt, ap);
       }
       return rv;
  @@ .

From ossp-cvs-owner@ossp.org  Mon Mar 13 10:42:48 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 821F3752907; Mon, 13 Mar 2006 10:42:48 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog README ossp-pkg/uuid/perl/ uuid.p...
Message-Id: <20060313094248.821F3752907@mail.ossp.org>
Date: Mon, 13 Mar 2006 10:42:48 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Mar-2006 10:42:48
  Branch: HEAD                             Handle: 2006031309424701

  Modified files:
    ossp-pkg/uuid           ChangeLog README uuid_vers.h
    ossp-pkg/uuid/perl      uuid.pm uuid_compat.pm

  Log:
    bump version before release

  Summary:
    Revision    Changes     Path
    1.111       +1  -1      ossp-pkg/uuid/ChangeLog
    1.39        +1  -1      ossp-pkg/uuid/README
    1.17        +1  -1      ossp-pkg/uuid/perl/uuid.pm
    1.8         +1  -1      ossp-pkg/uuid/perl/uuid_compat.pm
    1.23        +9  -9      ossp-pkg/uuid/uuid_vers.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.110 -r1.111 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	13 Mar 2006 09:39:11 -0000	1.110
  +++ ossp-pkg/uuid/ChangeLog	13 Mar 2006 09:42:47 -0000	1.111
  @@ -11,7 +11,7 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 1.4.1 and 1.4.2 (07-Feb-2006 to xx-Feb-2006)
  +  Changes between 1.4.1 and 1.4.2 (07-Feb-2006 to 13-Mar-2006)
   
      o Fix uuid_export() function by fixing the internal
        uuid_s[ar]printf() functions which require the backup of va_list
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.38 -r1.39 README
  --- ossp-pkg/uuid/README	7 Feb 2006 08:42:53 -0000	1.38
  +++ ossp-pkg/uuid/README	13 Mar 2006 09:42:47 -0000	1.39
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
   
     OSSP uuid - Universally Unique Identifier
  -  Version 1.4.1 (07-Feb-2006)
  +  Version 1.4.2 (13-Mar-2006)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.pm
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 uuid.pm
  --- ossp-pkg/uuid/perl/uuid.pm	7 Feb 2006 08:42:53 -0000	1.16
  +++ ossp-pkg/uuid/perl/uuid.pm	13 Mar 2006 09:42:48 -0000	1.17
  @@ -118,7 +118,7 @@
   use Exporter;
   
   #   API version
  -our $VERSION = do { my @v = ('1.4.1' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
  +our $VERSION = do { my @v = ('1.4.2' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
   
   #   API inheritance
   our @ISA = qw(Exporter);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid_compat.pm
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 uuid_compat.pm
  --- ossp-pkg/uuid/perl/uuid_compat.pm	7 Feb 2006 08:42:53 -0000	1.7
  +++ ossp-pkg/uuid/perl/uuid_compat.pm	13 Mar 2006 09:42:48 -0000	1.8
  @@ -42,7 +42,7 @@
   our @ISA     = qw(Exporter);
   our @EXPORT  = qw(NameSpace_DNS NameSpace_OID NameSpace_URL NameSpace_X500);
   
  -our $VERSION = do { my @v = ('1.4.1' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
  +our $VERSION = do { my @v = ('1.4.2' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
   
   sub new {
       my $class = shift;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_vers.h
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 uuid_vers.h
  --- ossp-pkg/uuid/uuid_vers.h	7 Feb 2006 08:42:53 -0000	1.22
  +++ ossp-pkg/uuid/uuid_vers.h	13 Mar 2006 09:42:47 -0000	1.23
  @@ -8,7 +8,7 @@
   #ifndef _UUID_VERS_H_
   #define _UUID_VERS_H_
   
  -#define _UUID_VERSION 0x104201
  +#define _UUID_VERSION 0x104202
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _UUID_VERS_H_AS_HEADER_
   
   _uuid_version_t _uuid_version = {
  -    0x104201,
  -    "1.4.1",
  -    "1.4.1 (07-Feb-2006)",
  -    "This is OSSP uuid, Version 1.4.1 (07-Feb-2006)",
  -    "OSSP uuid 1.4.1 (07-Feb-2006)",
  -    "OSSP uuid/1.4.1",
  -    "@(#)OSSP uuid 1.4.1 (07-Feb-2006)",
  -    "$Id: OSSP uuid 1.4.1 (07-Feb-2006) $"
  +    0x104202,
  +    "1.4.2",
  +    "1.4.2 (13-Mar-2006)",
  +    "This is OSSP uuid, Version 1.4.2 (13-Mar-2006)",
  +    "OSSP uuid 1.4.2 (13-Mar-2006)",
  +    "OSSP uuid/1.4.2",
  +    "@(#)OSSP uuid 1.4.2 (13-Mar-2006)",
  +    "$Id: OSSP uuid 1.4.2 (13-Mar-2006) $"
   };
   
   #endif /* _UUID_VERS_H_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Mar 13 10:45:45 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id F159075292C; Mon, 13 Mar 2006 10:45:44 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20060313094544.F159075292C@mail.ossp.org>
Date: Mon, 13 Mar 2006 10:45:44 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   13-Mar-2006 10:45:44
  Branch: HEAD                             Handle: 2006031309454400

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/uuid   index.wml

  Log:
    release OSSP uuid 1.4.2

  Summary:
    Revision    Changes     Path
    1.148       +1  -0      ossp-web/new/news.txt
    1.121       +1  -1      ossp-web/pkg/lib/index.wml
    1.29        +2  -2      ossp-web/pkg/lib/uuid/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.147 -r1.148 news.txt
  --- ossp-web/new/news.txt	7 Feb 2006 08:49:14 -0000	1.147
  +++ ossp-web/new/news.txt	13 Mar 2006 09:45:44 -0000	1.148
  @@ -1,3 +1,4 @@
  +13-Mar-2006: Released L<OSSP uuid> 1.4.2
   07-Feb-2006: Released L<OSSP uuid> 1.4.1
   07-Feb-2006: Released T<GNU shtool> 2.0.5
   04-Feb-2006: Released T<GNU shtool> 2.0.4
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.120 -r1.121 index.wml
  --- ossp-web/pkg/lib/index.wml	7 Feb 2006 08:49:14 -0000	1.120
  +++ ossp-web/pkg/lib/index.wml	13 Mar 2006 09:45:44 -0000	1.121
  @@ -33,7 +33,7 @@
   			done=100 stable=1.1.3 unstable=none>
     <pkg_item name="uuid" longname="OSSP uuid" type="lib"
               desc="Universally Unique Identifier"
  -			done=100 stable=1.4.1 unstable=none>
  +			done=100 stable=1.4.2 unstable=none>
     <pkg_item name="val" longname="OSSP val" type="lib"
               desc="Value Access"
   			done=95 stable=none unstable=0.9.4>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/uuid/index.wml
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 index.wml
  --- ossp-web/pkg/lib/uuid/index.wml	7 Feb 2006 08:49:14 -0000	1.28
  +++ ossp-web/pkg/lib/uuid/index.wml	13 Mar 2006 09:45:44 -0000	1.29
  @@ -48,7 +48,7 @@
   
   <pkg_status
       name="uuid" assign="rse"
  -    stable="1.4.1"    stable_date="07-Feb-2006"
  +    stable="1.4.2"    stable_date="13-Mar-2006"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -59,7 +59,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/uuid/
       directory=$(FTP_ROOT_DIR)/pkg/lib/uuid/
       files="uuid-[0-9.]*.tar.gz" 
  -	stable="uuid-1\.4\.1\.tar\.gz" unstable="none">
  +	stable="uuid-1\.4\.2\.tar\.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 17 08:10:11 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 2CE347528EB; Fri, 17 Mar 2006 08:10:11 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid_str.c
Message-Id: <20060317071011.2CE347528EB@mail.ossp.org>
Date: Fri, 17 Mar 2006 08:10:11 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   17-Mar-2006 08:10:11
  Branch: HEAD                             Handle: 2006031707101000

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid_str.c

  Log:
    Speed up processing in uuid_str.c by reducing va_copy() calls from
    two to just one per formatting.

  Summary:
    Revision    Changes     Path
    1.112       +6  -0      ossp-pkg/uuid/ChangeLog
    1.8         +6  -8      ossp-pkg/uuid/uuid_str.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.111 -r1.112 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	13 Mar 2006 09:42:47 -0000	1.111
  +++ ossp-pkg/uuid/ChangeLog	17 Mar 2006 07:10:10 -0000	1.112
  @@ -11,6 +11,12 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 1.4.2 and 1.4.3 (13-Mar-2006 to XX-Mar-2006)
  +
  +   o Speed up processing in uuid_str.c by reducing va_copy() calls from
  +     two to just one per formatting.
  +     [Ralf S. Engelschall]
  +
     Changes between 1.4.1 and 1.4.2 (07-Feb-2006 to 13-Mar-2006)
   
      o Fix uuid_export() function by fixing the internal
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_str.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 uuid_str.c
  --- ossp-pkg/uuid/uuid_str.c	13 Mar 2006 09:39:11 -0000	1.7
  +++ ossp-pkg/uuid/uuid_str.c	17 Mar 2006 07:10:10 -0000	1.8
  @@ -690,13 +690,12 @@
   {
       char *rv;
       int n;
  -    va_list ap_bak;
  +    va_list ap_tmp;
   
  -    va_copy(ap_bak, ap);
  -    n = str_vsnprintf(NULL, 0, fmt, ap);
  +    va_copy(ap_tmp, ap);
  +    n = str_vsnprintf(NULL, 0, fmt, ap_tmp);
       if ((rv = (char *)malloc(n+1)) == NULL)
           return NULL;
  -    va_copy(ap, ap_bak);
       str_vsnprintf(rv, n+1, fmt, ap);
       return rv;
   }
  @@ -723,7 +722,7 @@
   {
       int rv;
       size_t n;
  -    va_list ap_bak;
  +    va_list ap_tmp;
   
       if (str == NULL)
           return -1;
  @@ -732,12 +731,11 @@
           rv = strlen(*str);
       }
       else {
  -        va_copy(ap_bak, ap);
  +        va_copy(ap_tmp, ap);
           n = strlen(*str);
  -        rv = str_vsnprintf(NULL, 0, fmt, ap);
  +        rv = str_vsnprintf(NULL, 0, fmt, ap_tmp);
           if ((*str = (char *)realloc(*str, n+rv+1)) == NULL)
               return -1;
  -        va_copy(ap, ap_bak);
           str_vsnprintf((*str)+n, rv+1, fmt, ap);
       }
       return rv;
  @@ .

From ossp-cvs-owner@ossp.org  Tue Apr  4 16:58:44 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id F3E82752928; Tue,  4 Apr 2006 16:58:43 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/php/ Makefile.local
Message-Id: <20060404145843.F3E82752928@mail.ossp.org>
Date: Tue,  4 Apr 2006 16:58:43 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Apr-2006 16:58:43
  Branch: HEAD                             Handle: 2006040415584300

  Modified files:
    ossp-pkg/uuid/php       Makefile.local

  Log:
    remove more generated files

  Summary:
    Revision    Changes     Path
    1.4         +1  -0      ossp-pkg/uuid/php/Makefile.local
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/php/Makefile.local
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 Makefile.local
  --- ossp-pkg/uuid/php/Makefile.local	13 Jan 2006 06:44:34 -0000	1.3
  +++ ossp-pkg/uuid/php/Makefile.local	4 Apr 2006 14:58:43 -0000	1.4
  @@ -67,4 +67,5 @@
   	-rm -f config.guess config.h.in config.nice config.sub
   	-rm -f configure configure.in 
   	-rm -f install-sh libtool ltmain.sh missing mkinstalldirs
  +	-rm -f run-tests.php
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr  5 19:39:16 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id ED515752923; Wed,  5 Apr 2006 19:39:15 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.enroll.pl ase.cgi.login.pl ase.cgi.l...
Message-Id: <20060405173915.ED515752923@mail.ossp.org>
Date: Wed,  5 Apr 2006 19:39:15 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Apr-2006 19:39:15
  Branch: HEAD                             Handle: 2006040518391500

  Modified files:
    ossp-pkg/ase            ase.cgi.enroll.pl ase.cgi.login.pl
                            ase.cgi.logout.pl ase.cgi.profile.pl
                            ase.cgi.recover.pl ase.cgi.util.pl ase.css ase.pl

  Log:
    flush pending changes

  Summary:
    Revision    Changes     Path
    1.13        +35 -5      ossp-pkg/ase/ase.cgi.enroll.pl
    1.12        +1  -1      ossp-pkg/ase/ase.cgi.login.pl
    1.7         +2  -2      ossp-pkg/ase/ase.cgi.logout.pl
    1.7         +2  -2      ossp-pkg/ase/ase.cgi.profile.pl
    1.2         +1  -1      ossp-pkg/ase/ase.cgi.recover.pl
    1.13        +3  -0      ossp-pkg/ase/ase.cgi.util.pl
    1.7         +2  -2      ossp-pkg/ase/ase.css
    1.3         +2  -2      ossp-pkg/ase/ase.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	30 Nov 2005 13:21:28 -0000	1.12
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	5 Apr 2006 17:39:15 -0000	1.13
  @@ -36,7 +36,7 @@
       my $html = $self->param(-html);
   
       #   generate the outer canvas
  -    $html .= "<div class=\"boxed\">\n";
  +    $html .= "<div class=\"ase_boxed\">\n";
       $html .= "<span class=\"title\">Account Enrollment</span>\n";
       $html .=
           "<ul class=\"breadcrumb\">\n" .
  @@ -281,6 +281,35 @@
           }
       }
   
  +    #   make sure the Email address is not a "take and throw away" one
  +    #my @blacklist1 = (
  +    #    qr/\@gmail\.com$/,          # Google
  +    #    qr/\@hotmail\.com$/,        # Microsoft
  +    #    qr/\@yahoo\.(com|de)$/,     # Yahoo
  +    #    qr/\@lycos\.com$/,          # Lycos
  +    #);
  +    #foreach my $re (@blacklist1) {
  +    #    if ($address =~ m/$re/s) {
  +    #        $cgi->param('address.error', "Email address is on black-list of free mail account providers");
  +    #        $error = 1;
  +    #    }
  +    #}
  +
  +    #   make sure the Name is not a dummy one
  +    my @blacklist2 = (
  +        qr/(?:John\s+)?Doe/i,
  +        qr/\bAnon(?:ymous)?\b/i,
  +        qr/\b(?:foo|bar|baz|quux)\b/i,
  +        qr/(?:firstname|lastname)/i,
  +        qr/^\S+$/i,
  +    );
  +    foreach my $re (@blacklist2) {
  +        if ($name =~ m/$re/s) {
  +            $cgi->param('name.error', "Name is not valid");
  +            $error = 1;
  +        }
  +    }
  +
       #   redirect to enrollment screen if errors occurred
       if ($error) {
           return $self->forward("enrollment");
  @@ -299,7 +328,7 @@
       #   create membership record in database
       my $now = time();
       my $t_start  = $self->datetime($now);
  -    my $t_expiry = $self->datetime($now+1*60);
  +    my $t_expiry = $self->datetime($now+1*60*60);
       my $sth = $dbi->prepare(
           "INSERT INTO ase_enrollment" .
           " (en_uuid," .
  @@ -336,7 +365,7 @@
       ) or die $Mail::Sendmail::error;
   
       #   generate the outer canvas
  -    $html .= "<div class=\"boxed\">\n";
  +    $html .= "<div class=\"ase_boxed\">\n";
       $html .= "<span class=\"title\">Account Enrollment</span>\n";
       $html .=
           "<ul class=\"breadcrumb\">\n" .
  @@ -401,7 +430,7 @@
       $sth->execute($uuid) or die $dbi->errstr();
       my $rec = $sth->fetchrow_hashref();
       if (not defined($rec)) {
  -        $html .= "<div class=\"boxed\">\n" .
  +        $html .= "<div class=\"ase_boxed\">\n" .
                    "<span class=\"title\">Account Enrollment</span>\n" .
                    "<h3 class=\"error\">ERROR: ACTIVATION FAILED</h3>\n" .
                    "Sorry, no enrollment information found under " .
  @@ -444,7 +473,7 @@
   
       #   provide final information
       $html .=
  -         "<div class=\"boxed\">\n" .
  +         "<div class=\"ase_boxed\">\n" .
            "<span class=\"title\">Account Enrollment</span>\n";
       $html .=
           "<ul class=\"breadcrumb\">\n" .
  @@ -469,6 +498,7 @@
           "<p>\n" .
           "You have successfully registered with OpenPKG.\n" .
           "You can now access your account by going to the Login screen.\n" .
  +        "Please login at least once now to finish activating your account.\n" .
           "<p>\n" .
           "<a class=\"button\" href=\"".$self->url(-mode => "login")."\">" .
           "Go to <b>Login</b> screen" .
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	29 Nov 2005 16:38:47 -0000	1.11
  +++ ossp-pkg/ase/ase.cgi.login.pl	5 Apr 2006 17:39:15 -0000	1.12
  @@ -36,7 +36,7 @@
       my $html = $self->param(-html);
   
       #   generate the outer canvas
  -    $html .= "<div class=\"boxed\">\n";
  +    $html .= "<div class=\"ase_boxed\">\n";
       $html .= "<span class=\"title\">Login</span>\n";
       $html .= $cgi->start_form(
           -method => 'POST',
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.logout.pl
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ase.cgi.logout.pl
  --- ossp-pkg/ase/ase.cgi.logout.pl	27 Nov 2005 19:32:48 -0000	1.6
  +++ ossp-pkg/ase/ase.cgi.logout.pl	5 Apr 2006 17:39:15 -0000	1.7
  @@ -43,7 +43,7 @@
       $session->delete();
   
       #   generate canvas
  -    $html .= "<div class=\"boxed\">\n";
  +    $html .= "<div class=\"ase_boxed\">\n";
       $html .= "<span class=\"title\">Logout</span>\n";
       $html->fold("canvas");
       $html .= "</div>\n";
  @@ -81,7 +81,7 @@
       my $session = $self->param(-session);
   
       #   generate the outer canvas
  -    $html .= "<div class=\"boxed\">\n";
  +    $html .= "<div class=\"ase_boxed\">\n";
       $html .= "<span class=\"title\">Main Menu</span>\n";
       $html .= $cgi->start_form(
           -method => 'POST',
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.profile.pl
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ase.cgi.profile.pl
  --- ossp-pkg/ase/ase.cgi.profile.pl	28 Nov 2005 17:11:27 -0000	1.6
  +++ ossp-pkg/ase/ase.cgi.profile.pl	5 Apr 2006 17:39:15 -0000	1.7
  @@ -74,7 +74,7 @@
       my $session = $self->param(-session);
   
       #   generate the outer canvas
  -    $html .= "<div class=\"boxed\">\n";
  +    $html .= "<div class=\"ase_boxed\">\n";
       $html .= "<span class=\"title\">Main Menu</span>\n";
       $html .= $cgi->start_form(
           -method => 'POST',
  @@ -146,7 +146,7 @@
       my $session = $self->param(-session);
   
       #   generate the outer canvas
  -    $html .= "<div class=\"boxed\">\n";
  +    $html .= "<div class=\"ase_boxed\">\n";
       $html .= "<span class=\"title\">Main Menu</span>\n";
       $html .= $cgi->start_form(
           -method => 'POST',
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.recover.pl
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ase.cgi.recover.pl
  --- ossp-pkg/ase/ase.cgi.recover.pl	27 Nov 2005 19:28:24 -0000	1.1
  +++ ossp-pkg/ase/ase.cgi.recover.pl	5 Apr 2006 17:39:15 -0000	1.2
  @@ -36,7 +36,7 @@
       my $html = $self->param(-html);
   
       #   generate the outer canvas
  -    $html .= "<div class=\"boxed\">\n";
  +    $html .= "<div class=\"ase_boxed\">\n";
       $html .= "<span class=\"title\">Account Recovery</span>\n";
       $html .= "Sorry, Account Recovery still not implemented!";
       return;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.util.pl
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 ase.cgi.util.pl
  --- ossp-pkg/ase/ase.cgi.util.pl	28 Nov 2005 21:23:09 -0000	1.12
  +++ ossp-pkg/ase/ase.cgi.util.pl	5 Apr 2006 17:39:15 -0000	1.13
  @@ -169,6 +169,9 @@
               my $u = new URI $url;
               $url = $u->abs($base_url)->as_string();
           }
  +        $url =~ s/\&lt;/</sg;
  +        $url =~ s/\&gt;/>/sg;
  +        $url =~ s/\&amp;/\&/sg;
           return ($direct ? $url : $self->url(-mode => "loader", -name => $url));
       };
       if ($type eq 'text/css') {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.css
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ase.css
  --- ossp-pkg/ase/ase.css	28 Nov 2005 21:03:59 -0000	1.6
  +++ ossp-pkg/ase/ase.css	5 Apr 2006 17:39:15 -0000	1.7
  @@ -94,13 +94,13 @@
   }
   
   /* General: Boxes */
  -.ase div.boxed {
  +.ase div.ase_boxed {
       border:           1px solid #cccccc;
       margin-top:       24px;
       padding:          24px 16px 16px 16px;
       position:         relative;
   }   
  -.ase div.boxed span.title {
  +.ase div.ase_boxed span.title {
       display:          inline;
       position:         absolute;
       color:            #999999;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.pl
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ase.pl
  --- ossp-pkg/ase/ase.pl	29 Aug 2005 13:13:09 -0000	1.2
  +++ ossp-pkg/ase/ase.pl	5 Apr 2006 17:39:15 -0000	1.3
  @@ -144,9 +144,9 @@
   #   lookup member in database 
   my $sth = $dbi->prepare(
       "SELECT * FROM ase_member" .
  -    " WHERE me_username = ? OR me_address = ?;")
  +    " WHERE me_address = ?;")
       or die $dbi->errstr();
  -$sth->execute($username, $username)
  +$sth->execute($username)
       or die $dbi->errstr();
   my $rec = $sth->fetchrow_hashref();
   if (not defined($rec)) {
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr 13 20:06:02 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 9A5CF752903; Thu, 13 Apr 2006 20:06:01 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.enroll.pl
Message-Id: <20060413180601.9A5CF752903@mail.ossp.org>
Date: Thu, 13 Apr 2006 20:06:01 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Apr-2006 20:06:01
  Branch: HEAD                             Handle: 2006041319055900

  Modified files:
    ossp-pkg/ase            ase.cgi.enroll.pl

  Log:
    tell the administrators the number of total registrations so far

  Summary:
    Revision    Changes     Path
    1.14        +8  -1      ossp-pkg/ase/ase.cgi.enroll.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	5 Apr 2006 17:39:15 -0000	1.13
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	13 Apr 2006 18:05:59 -0000	1.14
  @@ -504,10 +504,17 @@
           "Go to <b>Login</b> screen" .
           "</a>\n";
   
  +    #   determine additional information for administrators
  +    $sth = $dbi->prepare(
  +        "SELECT count(*) AS count FROM ase_member;"
  +    ) or die $dbi->errstr();
  +    $sth->execute() or die $dbi->errstr();
  +    my $rec2 = $sth->fetchrow_hashref();
  +
       #   send activation information to administrators
       $self->use("Mail::Sendmail");
       my $mail =
  -        "Successful OpenPKG Fellow Registration:\n" .
  +        "Successful OpenPKG Fellow Registration (No. ".$rec2->{count}."):\n" .
           $rec->{en_name}." <".$rec->{en_address}.">\n" .
           "\n" .
           "-- \n" .
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr 19 18:28:09 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 021F87528EB; Wed, 19 Apr 2006 18:28:08 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog sh.platform
Message-Id: <20060419162808.021F87528EB@mail.ossp.org>
Date: Wed, 19 Apr 2006 18:28:08 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-Apr-2006 18:28:08
  Branch: HEAD                             Handle: 2006041917280800

  Modified files:
    ossp-pkg/shtool         ChangeLog sh.platform

  Log:
    Add correct detection of Sun Solaris on AMD64 to
    GNU shtool "platform" command.
    
    Sponsored by: SpaceNet AG <http://www.space.net/>
                  via OpenPKG GmbH <http://www.openpkg.com/>

  Summary:
    Revision    Changes     Path
    1.225       +4  -0      ossp-pkg/shtool/ChangeLog
    1.16        +6  -1      ossp-pkg/shtool/sh.platform
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.224 -r1.225 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	7 Feb 2006 08:31:44 -0000	1.224
  +++ ossp-pkg/shtool/ChangeLog	19 Apr 2006 16:28:08 -0000	1.225
  @@ -11,6 +11,10 @@
   
    Changes between 2.0.4 and 2.0.5 (04-Feb-2006 to 07-Feb-2006):
   
  +   *) Add correct detection of Sun Solaris on AMD64 to
  +      GNU shtool "platform" command.
  +      [Ralf S. Engelschall]
  +
      *) Fix "shtool version" command which got broken after
         recent util_{lower,upper} usage.
         [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.platform
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 sh.platform
  --- ossp-pkg/shtool/sh.platform	4 Feb 2006 09:43:25 -0000	1.15
  +++ ossp-pkg/shtool/sh.platform	19 Apr 2006 16:28:08 -0000	1.16
  @@ -262,7 +262,12 @@
           #   determine architecture
           AT="${UNAME_MACHINE}"
           case "${AT}" in
  -            i86pc ) AT="iX86" ;;
  +            i86pc )
  +                AT="iX86"
  +                case "`(/bin/isainfo -k) 2>&1`" in
  +                    amd64 ) AT="AMD64" ;;
  +                esac
  +                ;;
           esac
           AP="${AT}"
           case "${AP}" in
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr 19 18:28:57 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id E48B17528E8; Wed, 19 Apr 2006 18:28:56 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog sh.platform
Message-Id: <20060419162856.E48B17528E8@mail.ossp.org>
Date: Wed, 19 Apr 2006 18:28:56 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-Apr-2006 18:28:56
  Branch: HEAD                             Handle: 2006041917285600

  Modified files:
    ossp-pkg/shtool         ChangeLog sh.platform

  Log:
    Add support for Sun Niagara (sun4v) architecture to
    GNU shtool "platform" command.
    
    Submitted by: Christoph Schug
    Sponsored by: SpaceNet AG <http://www.space.net/>

  Summary:
    Revision    Changes     Path
    1.226       +4  -0      ossp-pkg/shtool/ChangeLog
    1.17        +1  -1      ossp-pkg/shtool/sh.platform
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.225 -r1.226 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	19 Apr 2006 16:28:08 -0000	1.225
  +++ ossp-pkg/shtool/ChangeLog	19 Apr 2006 16:28:56 -0000	1.226
  @@ -11,6 +11,10 @@
   
    Changes between 2.0.4 and 2.0.5 (04-Feb-2006 to 07-Feb-2006):
   
  +   *) Add support for Sun Niagara (sun4v) architecture to
  +      GNU shtool "platform" command.
  +      [Christoph Schug]
  +
      *) Add correct detection of Sun Solaris on AMD64 to
         GNU shtool "platform" command.
         [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.platform
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 sh.platform
  --- ossp-pkg/shtool/sh.platform	19 Apr 2006 16:28:08 -0000	1.16
  +++ ossp-pkg/shtool/sh.platform	19 Apr 2006 16:28:56 -0000	1.17
  @@ -272,7 +272,7 @@
           AP="${AT}"
           case "${AP}" in
               sun4[cdm] ) AP="SPARC32" ;;
  -            sun4u     ) AP="SPARC64" ;;
  +            sun4[uv]  ) AP="SPARC64" ;;
               sun4*     ) AP="SPARC"   ;;
           esac
           AC="${AP}"
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr 19 18:30:21 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 913547528E8; Wed, 19 Apr 2006 18:30:21 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog README VERSION
Message-Id: <20060419163021.913547528E8@mail.ossp.org>
Date: Wed, 19 Apr 2006 18:30:21 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-Apr-2006 18:30:21
  Branch: HEAD                             Handle: 2006041917302000

  Modified files:
    ossp-pkg/shtool         ChangeLog README VERSION

  Log:
    bump version before release

  Summary:
    Revision    Changes     Path
    1.227       +1  -1      ossp-pkg/shtool/ChangeLog
    1.113       +1  -1      ossp-pkg/shtool/README
    1.86        +1  -1      ossp-pkg/shtool/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.226 -r1.227 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	19 Apr 2006 16:28:56 -0000	1.226
  +++ ossp-pkg/shtool/ChangeLog	19 Apr 2006 16:30:20 -0000	1.227
  @@ -9,7 +9,7 @@
   
    ChangeLog
   
  - Changes between 2.0.4 and 2.0.5 (04-Feb-2006 to 07-Feb-2006):
  + Changes between 2.0.4 and 2.0.5 (04-Feb-2006 to 19-Apr-2006):
   
      *) Add support for Sun Niagara (sun4v) architecture to
         GNU shtool "platform" command.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/README
  ============================================================================
  $ cvs diff -u -r1.112 -r1.113 README
  --- ossp-pkg/shtool/README	7 Feb 2006 08:32:25 -0000	1.112
  +++ ossp-pkg/shtool/README	19 Apr 2006 16:30:20 -0000	1.113
  @@ -10,7 +10,7 @@
     http://www.gnu.org/software/shtool/
     ftp://ftp.gnu.org/gnu/shtool/
   
  -  Version 2.0.5 (07-Feb-2006)
  +  Version 2.0.5 (19-Apr-2006)
   
     The GNU shtool program is a compilation of small but very stable and
     portable shell scripts into a single shell tool. All ingredients
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/VERSION
  ============================================================================
  $ cvs diff -u -r1.85 -r1.86 VERSION
  --- ossp-pkg/shtool/VERSION	7 Feb 2006 08:32:25 -0000	1.85
  +++ ossp-pkg/shtool/VERSION	19 Apr 2006 16:30:20 -0000	1.86
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for GNU shtool (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is GNU shtool, Version 2.0.5 (07-Feb-2006)
  +  This is GNU shtool, Version 2.0.5 (19-Apr-2006)
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr 19 18:35:32 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 3137675317C; Wed, 19 Apr 2006 18:35:31 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog README VERSION shtool.spec
Message-Id: <20060419163531.3137675317C@mail.ossp.org>
Date: Wed, 19 Apr 2006 18:35:31 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-Apr-2006 18:35:28
  Branch: HEAD                             Handle: 2006041917351709

  Modified files:
    ossp-pkg/shtool         ChangeLog README VERSION shtool.spec

  Log:
    fix version

  Summary:
    Revision    Changes     Path
    1.228       +3  -1      ossp-pkg/shtool/ChangeLog
    1.114       +1  -1      ossp-pkg/shtool/README
    1.87        +1  -1      ossp-pkg/shtool/VERSION
    1.31        +1  -1      ossp-pkg/shtool/shtool.spec
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.227 -r1.228 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	19 Apr 2006 16:30:20 -0000	1.227
  +++ ossp-pkg/shtool/ChangeLog	19 Apr 2006 16:35:17 -0000	1.228
  @@ -9,7 +9,7 @@
   
    ChangeLog
   
  - Changes between 2.0.4 and 2.0.5 (04-Feb-2006 to 19-Apr-2006):
  + Changes between 2.0.5 and 2.0.6 (07-Feb-2006 to 19-Apr-2006):
   
      *) Add support for Sun Niagara (sun4v) architecture to
         GNU shtool "platform" command.
  @@ -19,6 +19,8 @@
         GNU shtool "platform" command.
         [Ralf S. Engelschall]
   
  + Changes between 2.0.4 and 2.0.5 (04-Feb-2006 to 07-Feb-2006):
  +
      *) Fix "shtool version" command which got broken after
         recent util_{lower,upper} usage.
         [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/README
  ============================================================================
  $ cvs diff -u -r1.113 -r1.114 README
  --- ossp-pkg/shtool/README	19 Apr 2006 16:30:20 -0000	1.113
  +++ ossp-pkg/shtool/README	19 Apr 2006 16:35:22 -0000	1.114
  @@ -10,7 +10,7 @@
     http://www.gnu.org/software/shtool/
     ftp://ftp.gnu.org/gnu/shtool/
   
  -  Version 2.0.5 (19-Apr-2006)
  +  Version 2.0.6 (19-Apr-2006)
   
     The GNU shtool program is a compilation of small but very stable and
     portable shell scripts into a single shell tool. All ingredients
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/VERSION
  ============================================================================
  $ cvs diff -u -r1.86 -r1.87 VERSION
  --- ossp-pkg/shtool/VERSION	19 Apr 2006 16:30:20 -0000	1.86
  +++ ossp-pkg/shtool/VERSION	19 Apr 2006 16:35:24 -0000	1.87
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for GNU shtool (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is GNU shtool, Version 2.0.5 (19-Apr-2006)
  +  This is GNU shtool, Version 2.0.6 (19-Apr-2006)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtool.spec
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 shtool.spec
  --- ossp-pkg/shtool/shtool.spec	7 Feb 2006 08:32:25 -0000	1.30
  +++ ossp-pkg/shtool/shtool.spec	19 Apr 2006 16:35:26 -0000	1.31
  @@ -30,7 +30,7 @@
   %define prefix /usr/local
   %endif
   
  -%define ver 2.0.5
  +%define ver 2.0.6
   %define rel 0
   
   Name:       shtool
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr 19 18:40:45 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 13CFE752980; Wed, 19 Apr 2006 18:40:45 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/tool/ index.wml ossp-w...
Message-Id: <20060419164045.13CFE752980@mail.ossp.org>
Date: Wed, 19 Apr 2006 18:40:45 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   19-Apr-2006 18:40:45
  Branch: HEAD                             Handle: 2006041917404400

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/shtool
                            index.wml

  Log:
    release GNU shtool 2.0.6

  Summary:
    Revision    Changes     Path
    1.149       +1  -0      ossp-web/new/news.txt
    1.56        +1  -1      ossp-web/pkg/tool/index.wml
    1.16        +1  -1      ossp-web/pkg/tool/shtool/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.148 -r1.149 news.txt
  --- ossp-web/new/news.txt	13 Mar 2006 09:45:44 -0000	1.148
  +++ ossp-web/new/news.txt	19 Apr 2006 16:40:44 -0000	1.149
  @@ -1,3 +1,4 @@
  +17-Apr-2006: Released T<GNU shtool> 2.0.6
   13-Mar-2006: Released L<OSSP uuid> 1.4.2
   07-Feb-2006: Released L<OSSP uuid> 1.4.1
   07-Feb-2006: Released T<GNU shtool> 2.0.5
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.55 -r1.56 index.wml
  --- ossp-web/pkg/tool/index.wml	7 Feb 2006 08:36:37 -0000	1.55
  +++ ossp-web/pkg/tool/index.wml	19 Apr 2006 16:40:44 -0000	1.56
  @@ -14,7 +14,7 @@
   <pkg_list>
     <pkg_item name="shtool" longname="GNU shtool" type="tool"
               desc="Portable Shell Tool"
  -		    done=100 stable="2.0.5" unstable=none>
  +		    done=100 stable="2.0.6" unstable=none>
     <pkg_item name="lmtp2nntp" longname="OSSP lmtp2nntp" type="tool"
               desc="Real-Time Mail to News Gateway"
               done=100 stable="1.4.1" unstable=none>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/shtool/index.wml
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 index.wml
  --- ossp-web/pkg/tool/shtool/index.wml	7 Feb 2006 08:36:36 -0000	1.15
  +++ ossp-web/pkg/tool/shtool/index.wml	19 Apr 2006 16:40:44 -0000	1.16
  @@ -51,7 +51,7 @@
       url=$(FTP_ROOT_URL)/pkg/tool/shtool/
       directory=$(FTP_ROOT_DIR)/pkg/tool/shtool/
       files="shtool-*.tar.gz" 
  -	stable="shtool-2.0.7.tar.gz" unstable="none">
  +	stable="shtool-2.0.6.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed May 10 10:53:12 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 04540752928; Wed, 10 May 2006 10:53:12 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid.pod
Message-Id: <20060510085312.04540752928@mail.ossp.org>
Date: Wed, 10 May 2006 10:53:12 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-May-2006 10:53:11
  Branch: HEAD                             Handle: 2006051009531100

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid.pod

  Log:
    Replaced "clock_seq_and_reserved" with
    "clock_seq_high_and_reserved" in uuid.pod to already reflect the
    description in the forthcoming RFC.

  Summary:
    Revision    Changes     Path
    1.113       +6  -1      ossp-pkg/uuid/ChangeLog
    1.36        +16 -14     ossp-pkg/uuid/uuid.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.112 -r1.113 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	17 Mar 2006 07:10:10 -0000	1.112
  +++ ossp-pkg/uuid/ChangeLog	10 May 2006 08:53:11 -0000	1.113
  @@ -11,7 +11,12 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 1.4.2 and 1.4.3 (13-Mar-2006 to XX-Mar-2006)
  +  Changes between 1.4.2 and 1.4.3 (13-Mar-2006 to XX-May-2006)
  +
  +   o Replaced "clock_seq_and_reserved" with
  +     "clock_seq_high_and_reserved" in uuid.pod to already reflect the
  +     description in the forthcoming RFC.
  +     [Ralf S. Engelschall]
   
      o Speed up processing in uuid_str.c by reducing va_copy() calls from
        two to just one per formatting.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	13 Jan 2006 06:54:15 -0000	1.35
  +++ ossp-pkg/uuid/uuid.pod	10 May 2006 08:53:11 -0000	1.36
  @@ -92,20 +92,22 @@
   digits. Formally, the string representation is defined by the following
   grammar:
   
  - uuid                   = <time_low> "-" <time_mid> "-"
  -                          <time_high_and_version> "-"
  -                          <clock_seq_and_reserved>
  -                          <clock_seq_low> "-" <node>
  - time_low               = 4*<hex_octet>
  - time_mid               = 2*<hex_octet>
  - time_high_and_version  = 2*<hex_octet>
  - clock_seq_and_reserved = <hex_octet>
  - clock_seq_low          = <hex_octet>
  - node                   = 6*<hex_octet>
  - hex_octet              = <hex_digit> <hex_digit>
  - hex_digit              = "0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9"
  -                         |"a"|"b"|"c"|"d"|"e"|"f"
  -                         |"A"|"B"|"C"|"D"|"E"|"F"
  + uuid                        = <time_low> "-"
  +                               <time_mid> "-"
  +                               <time_high_and_version> "-"
  +                               <clock_seq_high_and_reserved>
  +                               <clock_seq_low> "-"
  +                               <node>
  + time_low                    = 4*<hex_octet>
  + time_mid                    = 2*<hex_octet>
  + time_high_and_version       = 2*<hex_octet>
  + clock_seq_high_and_reserved = <hex_octet>
  + clock_seq_low               = <hex_octet>
  + node                        = 6*<hex_octet>
  + hex_octet                   = <hex_digit> <hex_digit>
  + hex_digit                   = "0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9"
  +                              |"a"|"b"|"c"|"d"|"e"|"f"
  +                              |"A"|"B"|"C"|"D"|"E"|"F"
   
   An example of a UUID string representation is the ASCII string
   "C<54531d28-402b-11d8-af12-0002a5094c23>". The string representation
  @@ .

From ossp-cvs-owner@ossp.org  Wed May 10 11:07:34 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 07E9475292A; Wed, 10 May 2006 11:07:33 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog OVERVIEW
Message-Id: <20060510090733.07E9475292A@mail.ossp.org>
Date: Wed, 10 May 2006 11:07:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-May-2006 11:07:33
  Branch: HEAD                             Handle: 2006051010073300

  Added files:
    ossp-pkg/uuid           OVERVIEW
  Modified files:
    ossp-pkg/uuid           ChangeLog

  Log:
    Added an "OVERVIEW" file which tries to give the "big picture"
    about UUIDs and allows to survice during the nasty UUID bit fiddling.

  Summary:
    Revision    Changes     Path
    1.114       +4  -0      ossp-pkg/uuid/ChangeLog
    1.1         +81 -0      ossp-pkg/uuid/OVERVIEW
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.113 -r1.114 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	10 May 2006 08:53:11 -0000	1.113
  +++ ossp-pkg/uuid/ChangeLog	10 May 2006 09:07:33 -0000	1.114
  @@ -13,6 +13,10 @@
   
     Changes between 1.4.2 and 1.4.3 (13-Mar-2006 to XX-May-2006)
   
  +   o Added an "OVERVIEW" file which tries to give the "big picture"
  +     about UUIDs and allows to survice during the nasty UUID bit fiddling.
  +     [Ralf S. Engelschall]
  +
      o Replaced "clock_seq_and_reserved" with
        "clock_seq_high_and_reserved" in uuid.pod to already reflect the
        description in the forthcoming RFC.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/OVERVIEW
  ============================================================================
  $ cvs diff -u -r0 -r1.1 OVERVIEW
  --- /dev/null	2006-05-10 11:07:33 +0200
  +++ OVERVIEW	2006-05-10 11:07:33 +0200
  @@ -0,0 +1,81 @@
  +
  +   _        ___  ____ ____  ____                _     _
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _   _ _   _(_) __| |
  +  _|_||_| | | | \___ \___ \| |_) | | | | | | | | |/ _` |
  + |_||_|_| | |_| |___) |__) |  __/  | |_| | |_| | | (_| |
  +  |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
  +
  +  OSSP uuid - Universally Unique Identifier
  +
  +  OVERVIEW
  +
  +  A UUID consists of 128 bits (16-octets) which are split into 6
  +  octet-bounded unsigned integer fields ("time_low", "time_mid",
  +  "time_hi_and_version", "clk_seq_hi_res", "clk_seq_low" and "node") and
  +  where two fields are multiplexed with a fixed size 4-bit "version" and
  +  a variable sized 2-3 bit "variant" field.
  +
  +  The UUID octets are counted from left to right 15 to 0 and the bits
  +  in each octet are counted from left to right 7 to 0 (most significant
  +  bit first, least significant bit last). The unsigned integer fields
  +  formed out of multiple octets are stored in "network byte order" (most
  +  significant octet first, least significant octet last). A UUID is
  +  stored and transmitted from left to right, i.e., in "network byte
  +  order" with the most significant octet first and the least significant
  +  octet last.
  +
  +  Illustration 1:
  +  (single octet array, less compact, more annotations)
  +
  +
  +  Bits:                                                   [4]           [2-3]
  +  Field:                                                version        variant
  +        MSO                                           -->|  |<--      -->| |<--                                                        LSO
  +           \                                             |  |            | |                                                          /
  +  Octet:    15      14      13      12      11      10   |  |9       8   | | 7       6       5       4       3       2       1       0
  +         +------++------++------++------++------++------++------++------++------++------++------++------++------++------++------++------+
  +  UUID:  |      ||      ||      ||      ||      ||      |####   ||      |##:    ||      ||      ||      ||      ||      ||      ||      |
  +         +------++------++------++------++------++------++------++------++------++------++------++------++------++------++------++------+
  +  Bit:   76543210765432107654321076543210765432107654321076543210765432107654321076543210765432107654321076543210765432107654321076543210
  +        /|                              ||              ||              ||      ||      ||                                              |\
  +     MSB |                              ||              ||              ||      ||      ||                                              | LSB
  +         |<---------------------------->||<------------>||<------------>||<---->||<---->||<-------------------------------------------->|
  +                                                           time_hi        clk_seq clk_seq
  +  Field:           time_low                  time_mid      _and_version   _hi_res _low                         node
  +  Bits:              [32]                      [16]           [16]        [5-6]     [8]                        [48]
  +
  +
  +  Illustration 2:
  +  (two octet arrays, more compact, less annotations)
  +
  +                                                        [4]
  +                                                      version
  +                                                    -->|  |<--
  +                                                       |  |
  +                                                       |  |  [16]
  +                   [32]                      [16]      |  |time_hi
  +                 time_low                  time_mid    | _and_version
  +       |<---------------------------->||<------------>||<------------>|
  +       |    MSO                       ||              ||  |           |
  +       |   /                          ||              ||  |           |
  +       |  15      14      13      12  ||  11      10  ||  |9       8  |
  +       7654321076543210765432107654321076543210765432107654321076543210
  +      /+------++------++------++------++------++------++------++------+~
  +   MSB |      ||      ||      ||      ||      ||      |####   ||      |  ...
  +       +------++------++------++------++------++------++------++------+~
  +      ~+------++------++------++------++------++------++------++------+
  +  ...  ##:    ||      ||      ||      ||      ||      ||      ||      | LSB
  +      ~+------++------++------++------++------++------++------++------+/
  +       7654321076543210765432107654321076543210765432107654321076543210
  +       | | 7  ||   6  ||   5       4       3       2       1       0  |
  +       | |    ||      ||                                          /   |
  +       | |    ||      ||                                        LSO   |
  +       |<---->||<---->||<-------------------------------------------->|
  +       |clk_seq clk_seq                      node
  +       |_hi_res _low                         [48]
  +       |[5-6]    [8]
  +       | |
  +    -->| |<--
  +     variant
  +      [2-3]
  +
  @@ .

From ossp-cvs-owner@ossp.org  Wed May 10 11:16:26 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B542375290D; Wed, 10 May 2006 11:16:26 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog devtool.conf
Message-Id: <20060510091626.B542375290D@mail.ossp.org>
Date: Wed, 10 May 2006 11:16:26 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-May-2006 11:16:26
  Branch: HEAD                             Handle: 2006051010162600

  Modified files:
    ossp-pkg/uuid           ChangeLog devtool.conf

  Log:
    Upgrade build environment to GNU shtool 2.0.6

  Summary:
    Revision    Changes     Path
    1.115       +3  -0      ossp-pkg/uuid/ChangeLog
    1.27        +1  -1      ossp-pkg/uuid/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.114 -r1.115 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	10 May 2006 09:07:33 -0000	1.114
  +++ ossp-pkg/uuid/ChangeLog	10 May 2006 09:16:26 -0000	1.115
  @@ -12,6 +12,9 @@
     For a more brief summary please have a look at the NEWS file.
   
     Changes between 1.4.2 and 1.4.3 (13-Mar-2006 to XX-May-2006)
  +   
  +   o Upgrade build environment to GNU shtool 2.0.6
  +     [Ralf S. Engelschall]
   
      o Added an "OVERVIEW" file which tries to give the "big picture"
        about UUIDs and allows to survice during the nasty UUID bit fiddling.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 devtool.conf
  --- ossp-pkg/uuid/devtool.conf	7 Feb 2006 08:42:53 -0000	1.26
  +++ ossp-pkg/uuid/devtool.conf	10 May 2006 09:16:26 -0000	1.27
  @@ -3,7 +3,7 @@
   ##
   
   %autogen
  -    @autogen shtool   2.0.5  "2.0.*" all
  +    @autogen shtool   2.0.6  "2.0.*" all
       @autogen libtool  1.5.22 "1.5*"
       @autogen autoconf 2.59   "2.5[3-9]*"
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 11 11:37:32 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 448F275291B; Thu, 11 May 2006 11:37:31 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog Makefile.in ossp-pkg/uuid/perl/ u...
Message-Id: <20060511093731.448F275291B@mail.ossp.org>
Date: Thu, 11 May 2006 11:37:31 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-May-2006 11:37:31
  Branch: HEAD                             Handle: 2006051110372703

  Added files:
    ossp-pkg/uuid           uuid_ui128.c uuid_ui128.h
  Modified files:
    ossp-pkg/uuid           ChangeLog Makefile.in uuid++.cc uuid++.hh
                            uuid++.pod uuid.c uuid.h.in uuid.pod uuid_cli.c
                            uuid_cli.pod
    ossp-pkg/uuid/perl      uuid.pm uuid.pod uuid.ts uuid.xs
    ossp-pkg/uuid/php       uuid.c

  Log:
    Add full support for Single Integer Value (SIV) UUID representation
    for both importing and exporting in C/C++/Perl/PHP APIs.

  Summary:
    Revision    Changes     Path
    1.116       +5  -1      ossp-pkg/uuid/ChangeLog
    1.41        +3  -2      ossp-pkg/uuid/Makefile.in
    1.18        +4  -0      ossp-pkg/uuid/perl/uuid.pm
    1.11        +1  -0      ossp-pkg/uuid/perl/uuid.pod
    1.5         +5  -1      ossp-pkg/uuid/perl/uuid.ts
    1.8         +5  -1      ossp-pkg/uuid/perl/uuid.xs
    1.6         +2  -0      ossp-pkg/uuid/php/uuid.c
    1.6         +13 -2      ossp-pkg/uuid/uuid++.cc
    1.4         +1  -0      ossp-pkg/uuid/uuid++.hh
    1.3         +5  -1      ossp-pkg/uuid/uuid++.pod
    1.59        +106 -9     ossp-pkg/uuid/uuid.c
    1.12        +3  -1      ossp-pkg/uuid/uuid.h.in
    1.37        +41 -14     ossp-pkg/uuid/uuid.pod
    1.22        +50 -20     ossp-pkg/uuid/uuid_cli.c
    1.25        +44 -21     ossp-pkg/uuid/uuid_cli.pod
    1.1         +586 -0     ossp-pkg/uuid/uuid_ui128.c
    1.1         +114 -0     ossp-pkg/uuid/uuid_ui128.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.115 -r1.116 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	10 May 2006 09:16:26 -0000	1.115
  +++ ossp-pkg/uuid/ChangeLog	11 May 2006 09:37:27 -0000	1.116
  @@ -11,7 +11,11 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 1.4.2 and 1.4.3 (13-Mar-2006 to XX-May-2006)
  +  Changes between 1.4.2 and 1.5.0 (13-Mar-2006 to XX-May-2006)
  +
  +   o Add full support for Single Integer Value (SIV) UUID representation
  +     for both importing and exporting in C/C++/Perl/PHP APIs.
  +     [Ralf S. Engelschall]
      
      o Upgrade build environment to GNU shtool 2.0.6
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.40 -r1.41 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	23 Feb 2006 13:32:46 -0000	1.40
  +++ ossp-pkg/uuid/Makefile.in	11 May 2006 09:37:27 -0000	1.41
  @@ -62,7 +62,7 @@
   PG_CONFIG   = @PG_CONFIG@
   
   LIB_NAME    = libuuid.la
  -LIB_OBJS    = uuid.lo uuid_md5.lo uuid_sha1.lo uuid_prng.lo uuid_mac.lo uuid_ui64.lo uuid_str.lo
  +LIB_OBJS    = uuid.lo uuid_md5.lo uuid_sha1.lo uuid_prng.lo uuid_mac.lo uuid_ui64.lo uuid_ui128.lo uuid_str.lo
   
   DCE_NAME    = libuuid_dce.la
   DCE_OBJS    = uuid_dce.lo $(LIB_OBJS)
  @@ -137,13 +137,14 @@
   	@cd $(S)/pgsql && $(MAKE) $(MFLAGS) PG_CONFIG=$(PG_CONFIG)
   	@touch $(PGSQL_NAME)
   
  -uuid.lo: $(S)/uuid.c uuid.h $(S)/uuid_md5.h $(S)/uuid_sha1.h $(S)/uuid_prng.h $(S)/uuid_mac.h $(S)/uuid_ui64.h $(S)/uuid_str.h $(S)/uuid_bm.h $(S)/uuid_ac.h
  +uuid.lo: $(S)/uuid.c uuid.h $(S)/uuid_md5.h $(S)/uuid_sha1.h $(S)/uuid_prng.h $(S)/uuid_mac.h $(S)/uuid_ui64.h $(S)/uuid_ui128.h $(S)/uuid_str.h $(S)/uuid_bm.h $(S)/uuid_ac.h
   uuid_mac.lo: $(S)/uuid_mac.c $(S)/uuid_mac.h
   uuid_md5.lo: $(S)/uuid_md5.c $(S)/uuid_md5.h
   uuid_sha1.lo: $(S)/uuid_sha1.c $(S)/uuid_sha1.h
   uuid_prng.lo: $(S)/uuid_prng.c $(S)/uuid_prng.h
   uuid_str.lo: $(S)/uuid_str.c $(S)/uuid_str.h
   uuid_ui64.lo: $(S)/uuid_ui64.c $(S)/uuid_ui64.h
  +uuid_ui128.lo: $(S)/uuid_ui64.c $(S)/uuid_ui128.h
   uuid_dce.lo: $(S)/uuid_dce.c uuid.h $(S)/uuid_dce.h
   uuid_cli.o: $(S)/uuid_cli.c uuid.h
   uuid++.lo: $(S)/uuid++.cc $(S)/uuid++.hh
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.pm
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 uuid.pm
  --- ossp-pkg/uuid/perl/uuid.pm	13 Mar 2006 09:42:48 -0000	1.17
  +++ ossp-pkg/uuid/perl/uuid.pm	11 May 2006 09:37:30 -0000	1.18
  @@ -129,6 +129,7 @@
           UUID_VERSION
           UUID_LEN_BIN
           UUID_LEN_STR
  +        UUID_LEN_SIV
           UUID_RC_OK
           UUID_RC_ARG
           UUID_RC_MEM
  @@ -142,6 +143,7 @@
           UUID_MAKE_MC
           UUID_FMT_BIN
           UUID_FMT_STR
  +        UUID_FMT_SIV
           UUID_FMT_TXT
       )],
       'func' => [qw(
  @@ -256,6 +258,7 @@
           my ($self, $fmt, $data_ptr, $data_len) = @_;
           if    ($fmt eq 'bin') { $fmt = $self->UUID_FMT_BIN; }
           elsif ($fmt eq 'str') { $fmt = $self->UUID_FMT_STR; }
  +        elsif ($fmt eq 'siv') { $fmt = $self->UUID_FMT_SIV; }
           elsif ($fmt eq 'txt') { $fmt = $self->UUID_FMT_TXT; }
           else  { croak("invalid format \"$fmt\""); }
           $data_len ||= length($data_ptr); # functional redudant, but Perl dislikes undef value here
  @@ -283,6 +286,7 @@
           my $data_ptr;
           if    ($fmt eq 'bin') { $fmt = $self->UUID_FMT_BIN; }
           elsif ($fmt eq 'str') { $fmt = $self->UUID_FMT_STR; }
  +        elsif ($fmt eq 'siv') { $fmt = $self->UUID_FMT_SIV; }
           elsif ($fmt eq 'txt') { $fmt = $self->UUID_FMT_TXT; }
           else  { croak("invalid format \"$fmt\""); }
           $self->{-rc} = uuid_export($self->{-uuid}, $fmt, $data_ptr, undef);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 uuid.pod
  --- ossp-pkg/uuid/perl/uuid.pod	13 Jan 2006 06:44:33 -0000	1.10
  +++ ossp-pkg/uuid/perl/uuid.pod	11 May 2006 09:37:30 -0000	1.11
  @@ -153,6 +153,7 @@
   C<UUID_MAKE_MC>,
   C<UUID_FMT_BIN>,
   C<UUID_FMT_STR>,
  +C<UUID_FMT_SIV>,
   C<UUID_FMT_TXT>.
   
   =head1 EXAMPLES
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.ts
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 uuid.ts
  --- ossp-pkg/uuid/perl/uuid.ts	13 Jan 2006 06:44:33 -0000	1.4
  +++ ossp-pkg/uuid/perl/uuid.ts	11 May 2006 09:37:30 -0000	1.5
  @@ -27,7 +27,7 @@
   ##  uuid.ts: Perl Binding (Perl test suite part)
   ##
   
  -use Test::More tests => 35;
  +use Test::More tests => 36;
   
   ##
   ##  Module Loading
  @@ -87,6 +87,10 @@
   ok((    $rc == UUID_RC_OK
       and $ptr eq "02d9e6d5-9467-382e-8f9b-9300a64ac3cd"
       and $len == UUID_LEN_STR), "uuid_export (5)");
  +$rc = uuid_export($uuid_ns, UUID_FMT_SIV, $ptr, $len);
  +ok((    $rc == UUID_RC_OK
  +    and $ptr eq "3789866285607910888100818383505376205"
  +    and $len <= UUID_LEN_SIV), "uuid_export (6)");
   
   $rc = uuid_destroy($uuid_ns);
   ok($rc == UUID_RC_OK, "uuid_destroy (1)");
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.xs
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 uuid.xs
  --- ossp-pkg/uuid/perl/uuid.xs	13 Mar 2006 09:14:23 -0000	1.7
  +++ ossp-pkg/uuid/perl/uuid.xs	11 May 2006 09:37:30 -0000	1.8
  @@ -48,6 +48,7 @@
               { "UUID_VERSION", UUID_VERSION },
               { "UUID_LEN_BIN", UUID_LEN_BIN },
               { "UUID_LEN_STR", UUID_LEN_STR },
  +            { "UUID_LEN_SIV", UUID_LEN_SIV },
               { "UUID_RC_OK",   UUID_RC_OK   },
               { "UUID_RC_ARG",  UUID_RC_ARG  },
               { "UUID_RC_MEM",  UUID_RC_MEM  },
  @@ -61,6 +62,7 @@
               { "UUID_MAKE_MC", UUID_MAKE_MC },
               { "UUID_FMT_BIN", UUID_FMT_BIN },
               { "UUID_FMT_STR", UUID_FMT_STR },
  +            { "UUID_FMT_SIV", UUID_FMT_SIV },
               { "UUID_FMT_TXT", UUID_FMT_TXT }
           };
       INPUT:
  @@ -201,7 +203,9 @@
           data_len = 0;
           RETVAL = uuid_export(uuid, fmt, &data_ptr, &data_len);
           if (RETVAL == UUID_RC_OK) {
  -            if (fmt == UUID_FMT_STR || fmt == UUID_FMT_TXT)
  +            if (fmt == UUID_FMT_SIV)
  +                data_len = strlen((char *)data_ptr);
  +            else if (fmt == UUID_FMT_STR || fmt == UUID_FMT_TXT)
                   data_len--; /* Perl doesn't wish NUL-termination on strings */
               sv_setpvn(ST(2), data_ptr, data_len);
               free(data_ptr);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/php/uuid.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 uuid.c
  --- ossp-pkg/uuid/php/uuid.c	7 Feb 2006 08:19:16 -0000	1.5
  +++ ossp-pkg/uuid/php/uuid.c	11 May 2006 09:37:30 -0000	1.6
  @@ -70,6 +70,7 @@
       REGISTER_LONG_CONSTANT("UUID_VERSION", UUID_VERSION, CONST_CS|CONST_PERSISTENT);
       REGISTER_LONG_CONSTANT("UUID_LEN_BIN", UUID_LEN_BIN, CONST_CS|CONST_PERSISTENT);
       REGISTER_LONG_CONSTANT("UUID_LEN_STR", UUID_LEN_STR, CONST_CS|CONST_PERSISTENT);
  +    REGISTER_LONG_CONSTANT("UUID_LEN_SIV", UUID_LEN_SIV, CONST_CS|CONST_PERSISTENT);
       REGISTER_LONG_CONSTANT("UUID_RC_OK",   UUID_RC_OK,   CONST_CS|CONST_PERSISTENT);
       REGISTER_LONG_CONSTANT("UUID_RC_ARG",  UUID_RC_ARG,  CONST_CS|CONST_PERSISTENT);
       REGISTER_LONG_CONSTANT("UUID_RC_MEM",  UUID_RC_MEM,  CONST_CS|CONST_PERSISTENT);
  @@ -83,6 +84,7 @@
       REGISTER_LONG_CONSTANT("UUID_MAKE_MC", UUID_MAKE_MC, CONST_CS|CONST_PERSISTENT);
       REGISTER_LONG_CONSTANT("UUID_FMT_BIN", UUID_FMT_BIN, CONST_CS|CONST_PERSISTENT);
       REGISTER_LONG_CONSTANT("UUID_FMT_STR", UUID_FMT_STR, CONST_CS|CONST_PERSISTENT);
  +    REGISTER_LONG_CONSTANT("UUID_FMT_SIV", UUID_FMT_SIV, CONST_CS|CONST_PERSISTENT);
       REGISTER_LONG_CONSTANT("UUID_FMT_TXT", UUID_FMT_TXT, CONST_CS|CONST_PERSISTENT);
   
       return SUCCESS;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid++.cc
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 uuid++.cc
  --- ossp-pkg/uuid/uuid++.cc	13 Jan 2006 06:44:30 -0000	1.5
  +++ ossp-pkg/uuid/uuid++.cc	11 May 2006 09:37:27 -0000	1.6
  @@ -243,12 +243,13 @@
       return;
   }
   
  -/*  method: import string representation */
  +/*  method: import string or single integer value representation */
   void uuid::import(const char *str)
   {
       uuid_rc_t rc;
       if ((rc = uuid_import(ctx, UUID_FMT_STR, str, UUID_LEN_STR)) != UUID_RC_OK)
  -        throw uuid_error_t(rc);
  +        if ((rc = uuid_import(ctx, UUID_FMT_SIV, str, UUID_LEN_SIV)) != UUID_RC_OK)
  +            throw uuid_error_t(rc);
       return;
   }
   
  @@ -272,6 +273,16 @@
       return str;
   }
   
  +/*  method: export single integer value representation */
  +char *uuid::integer(void)
  +{
  +    uuid_rc_t rc;
  +    char *str = NULL;
  +    if ((rc = uuid_export(ctx, UUID_FMT_SIV, (void **)&str, NULL)) != UUID_RC_OK)
  +        throw uuid_error_t(rc);
  +    return str;
  +}
  +
   /*  method: export textual summary representation */
   char *uuid::summary(void)
   {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid++.hh
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 uuid++.hh
  --- ossp-pkg/uuid/uuid++.hh	13 Jan 2006 06:44:30 -0000	1.3
  +++ ossp-pkg/uuid/uuid++.hh	11 May 2006 09:37:27 -0000	1.4
  @@ -71,6 +71,7 @@
           void          import       (const char *_str);         /* regular method */
           void         *binary       (void);                     /* regular method */
           char         *string       (void);                     /* regular method */
  +        char         *integer      (void);                     /* regular method */
           char         *summary      (void);                     /* regular method */
   
           unsigned long version      (void);                     /* regular method */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid++.pod
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid++.pod
  --- ossp-pkg/uuid/uuid++.pod	13 Jan 2006 06:44:30 -0000	1.2
  +++ ossp-pkg/uuid/uuid++.pod	11 May 2006 09:37:28 -0000	1.3
  @@ -115,7 +115,7 @@
   
   =item uuid &B<uuid::operator=>(const char *_str);
   
  -The assignment operator corresponding to the import constructor for string representation.
  +The assignment operator corresponding to the import constructor for string and single integer value representation.
   
   =item uuid B<uuid::clone>(void);
   
  @@ -177,6 +177,10 @@
   
   Regular method corresponding to the C API function B<uuid_export> for string representation usage.
   
  +=item char *B<uuid::integer>(void);
  +
  +Regular method corresponding to the C API function B<uuid_export> for single integer value representation usage.
  +
   =item char *B<uuid::summary>(void);
   
   Regular method corresponding to the C API function B<uuid_export> for textual summary representation usage.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.58 -r1.59 uuid.c
  --- ossp-pkg/uuid/uuid.c	7 Feb 2006 08:19:15 -0000	1.58
  +++ ossp-pkg/uuid/uuid.c	11 May 2006 09:37:28 -0000	1.59
  @@ -50,6 +50,7 @@
   #include "uuid_prng.h"
   #include "uuid_mac.h"
   #include "uuid_ui64.h"
  +#include "uuid_ui128.h"
   #include "uuid_str.h"
   #include "uuid_bm.h"
   #include "uuid_ac.h"
  @@ -431,6 +432,39 @@
       return UUID_RC_OK;
   }
   
  +/* INTERNAL: import UUID object from single integer value representation */
  +static uuid_rc_t uuid_import_siv(uuid_t *uuid, const void *data_ptr, size_t data_len)
  +{
  +    const char *str;
  +    uuid_uint8_t tmp_bin[UUID_LEN_BIN];
  +    ui128_t ui, ui2;
  +    int i;
  +
  +    /* sanity check argument(s) */
  +    if (uuid == NULL || data_ptr == NULL || data_len < 1)
  +        return UUID_RC_ARG;
  +
  +    /* check for correct UUID single integer value syntax */
  +    str = (const char *)data_ptr;
  +    for (i = 0; i < data_len; i++)
  +        if (!isdigit((int)str[i]))
  +            return UUID_RC_ARG;
  +
  +    /* parse single integer value representation (SIV) */
  +    ui = ui128_s2i(str, NULL, 10);
  +
  +    /* import octets into UUID binary representation */
  +    for (i = 0; i < UUID_LEN_BIN; i++) {
  +        ui = ui128_rol(ui, 8, &ui2);
  +        tmp_bin[i] = (uuid_uint8_t)(ui128_i2n(ui2) & 0xff);
  +    }
  +
  +    /* import into internal UUID representation */
  +    uuid_import(uuid, UUID_FMT_BIN, (void *)&tmp_bin, UUID_LEN_BIN);
  +
  +    return UUID_RC_OK;
  +}
  +
   /* INTERNAL: export UUID object to string representation */
   static uuid_rc_t uuid_export_str(const uuid_t *uuid, void **data_ptr, size_t *data_len)
   {
  @@ -482,6 +516,61 @@
       return UUID_RC_OK;
   }
   
  +/* INTERNAL: export UUID object to single integer value representation */
  +static uuid_rc_t uuid_export_siv(const uuid_t *uuid, void **data_ptr, size_t *data_len)
  +{
  +    char *data_buf;
  +    void *tmp_ptr;
  +    size_t tmp_len;
  +    uuid_uint8_t tmp_bin[UUID_LEN_BIN];
  +    ui128_t ui, ui2;
  +    uuid_rc_t rc;
  +    int i;
  +
  +    /* sanity check argument(s) */
  +    if (uuid == NULL || data_ptr == NULL)
  +        return UUID_RC_ARG;
  +
  +    /* determine output buffer */
  +    if (*data_ptr == NULL) {
  +        if ((data_buf = (char *)malloc(UUID_LEN_SIV+1)) == NULL)
  +            return UUID_RC_MEM;
  +        if (data_len != NULL)
  +            *data_len = UUID_LEN_SIV+1;
  +    }
  +    else {
  +        data_buf = (char *)(*data_ptr);
  +        if (data_len == NULL)
  +            return UUID_RC_ARG;
  +        if (*data_len < UUID_LEN_SIV+1)
  +            return UUID_RC_MEM;
  +        *data_len = UUID_LEN_SIV+1;
  +    }
  +
  +    /* export into UUID binary representation */
  +    tmp_ptr = (void *)&tmp_bin;
  +    tmp_len = sizeof(tmp_bin);
  +    if ((rc = uuid_export(uuid, UUID_FMT_BIN, &tmp_ptr, &tmp_len)) != UUID_RC_OK)
  +        return rc;
  +
  +    /* import from UUID binary representation */
  +    ui = ui128_zero();
  +    for (i = 0; i < UUID_LEN_BIN; i++) {
  +        ui2 = ui128_n2i((unsigned long)tmp_bin[i]);
  +        ui = ui128_rol(ui, 8, NULL);
  +        ui = ui128_or(ui, ui2);
  +    }
  +
  +    /* format into single integer value representation */
  +    ui128_i2s(ui, data_buf, UUID_LEN_SIV+1, 10);
  +
  +    /* pass back new buffer if locally allocated */
  +    if (*data_ptr == NULL)
  +        *data_ptr = data_buf;
  +
  +    return UUID_RC_OK;
  +}
  +
   /* decoding tables */
   static struct {
       uuid_uint8_t num;
  @@ -518,6 +607,7 @@
       uuid_uint32_t tmp32;
       uuid_uint8_t tmp_bin[UUID_LEN_BIN];
       char tmp_str[UUID_LEN_STR+1];
  +    char tmp_siv[UUID_LEN_SIV+1];
       void *tmp_ptr;
       size_t tmp_len;
       ui64_t t;
  @@ -541,12 +631,17 @@
       if ((rc = uuid_isnil(uuid, &isnil)) != UUID_RC_OK)
           return rc;
   
  -    /* decode into string representation */
  +    /* decode into various representations */
       tmp_ptr = (void *)&tmp_str;
       tmp_len = sizeof(tmp_str);
       if ((rc = uuid_export(uuid, UUID_FMT_STR, &tmp_ptr, &tmp_len)) != UUID_RC_OK)
           return rc;
  -    str_rsprintf(out, "UUID:    %s\n", tmp_str);
  +    tmp_ptr = (void *)&tmp_siv;
  +    tmp_len = sizeof(tmp_siv);
  +    if ((rc = uuid_export(uuid, UUID_FMT_SIV, &tmp_ptr, &tmp_len)) != UUID_RC_OK)
  +        return rc;
  +    str_rsprintf(out, "encode: STR:     %s\n", tmp_str);
  +    str_rsprintf(out, "        SIV:     %s\n", tmp_siv);
   
       /* decode UUID variant */
       tmp8 = uuid->obj.clock_seq_hi_and_reserved;
  @@ -567,7 +662,7 @@
               }
           }
       }
  -    str_rsprintf(out, "variant: %s\n", variant);
  +    str_rsprintf(out, "decode: variant: %s\n", variant);
   
       /* decode UUID version */
       tmp16 = (BM_SHR(uuid->obj.time_hi_and_version, 12) & BM_MASK(3,0));
  @@ -582,7 +677,7 @@
               }
           }
       }
  -    str_rsprintf(out, "version: %d (%s)\n", (int)tmp16, version);
  +    str_rsprintf(out, "        version: %d (%s)\n", (int)tmp16, version);
   
       /*
        * decode UUID content
  @@ -602,15 +697,15 @@
           t_sec = (time_t)ui64_i2n(t);
           tm = gmtime(&t_sec);
           strftime(t_buf, sizeof(t_buf), "%Y-%m-%d %H:%M:%S", tm);
  -        str_rsprintf(out, "content: time:  %s.%06d.%d UTC\n", t_buf, t_usec, t_nsec);
  +        str_rsprintf(out, "        content: time:  %s.%06d.%d UTC\n", t_buf, t_usec, t_nsec);
   
           /* decode clock sequence */
           tmp32 = ((uuid->obj.clock_seq_hi_and_reserved & BM_MASK(5,0)) << 8)
                   + uuid->obj.clock_seq_low;
  -        str_rsprintf(out, "         clock: %ld (usually random)\n", (long)tmp32);
  +        str_rsprintf(out, "                 clock: %ld (usually random)\n", (long)tmp32);
   
           /* decode node MAC address */
  -        str_rsprintf(out, "         node:  %02x:%02x:%02x:%02x:%02x:%02x (%s %s)\n",
  +        str_rsprintf(out, "                 node:  %02x:%02x:%02x:%02x:%02x:%02x (%s %s)\n",
               (unsigned int)uuid->obj.node[0],
               (unsigned int)uuid->obj.node[1],
               (unsigned int)uuid->obj.node[2],
  @@ -646,8 +741,8 @@
   
           /* dump as colon-seperated hexadecimal byte-string */
           str_rsprintf(out,
  -            "content: %02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X\n"
  -            "         (%s)\n",
  +            "        content: %02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X\n"
  +            "                 (%s)\n",
               (unsigned int)tmp_bin[0],  (unsigned int)tmp_bin[1],  (unsigned int)tmp_bin[2],
               (unsigned int)tmp_bin[3],  (unsigned int)tmp_bin[4],  (unsigned int)tmp_bin[5],
               (unsigned int)tmp_bin[6],  (unsigned int)tmp_bin[7],  (unsigned int)tmp_bin[8],
  @@ -687,6 +782,7 @@
       switch (fmt) {
           case UUID_FMT_BIN: rc = uuid_import_bin(uuid, data_ptr, data_len); break;
           case UUID_FMT_STR: rc = uuid_import_str(uuid, data_ptr, data_len); break;
  +        case UUID_FMT_SIV: rc = uuid_import_siv(uuid, data_ptr, data_len); break;
           case UUID_FMT_TXT: rc = UUID_RC_IMP; /* not implemented */ break;
           default:           rc = UUID_RC_ARG;
       }
  @@ -707,6 +803,7 @@
       switch (fmt) {
           case UUID_FMT_BIN: rc = uuid_export_bin(uuid, data_ptr, data_len); break;
           case UUID_FMT_STR: rc = uuid_export_str(uuid, data_ptr, data_len); break;
  +        case UUID_FMT_SIV: rc = uuid_export_siv(uuid, data_ptr, data_len); break;
           case UUID_FMT_TXT: rc = uuid_export_txt(uuid, data_ptr, data_len); break;
           default:           rc = UUID_RC_ARG;
       }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.h.in
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 uuid.h.in
  --- ossp-pkg/uuid/uuid.h.in	7 Feb 2006 08:19:15 -0000	1.11
  +++ ossp-pkg/uuid/uuid.h.in	11 May 2006 09:37:28 -0000	1.12
  @@ -60,6 +60,7 @@
   /* encoding octet stream lengths */
   #define UUID_LEN_BIN  (128 /*bit*/ / 8 /*bytes*/)
   #define UUID_LEN_STR  (128 /*bit*/ / 4 /*nibbles*/ + 4 /*hyphens*/)
  +#define UUID_LEN_SIV  (39  /*int(log(10,exp(2,128)-1)+1) digits*/)
   
   /* API return codes */
   typedef enum {
  @@ -84,7 +85,8 @@
   typedef enum {
       UUID_FMT_BIN = 0,        /* binary representation (import/export) */
       UUID_FMT_STR = 1,        /* string representation (import/export) */
  -    UUID_FMT_TXT = 2         /* textual description   (export only)   */
  +    UUID_FMT_SIV = 2,        /* single integer value  (import/export) */
  +    UUID_FMT_TXT = 3         /* textual description   (export only)   */
   } uuid_fmt_t;
   
   /* UUID abstract data type */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.36 -r1.37 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	10 May 2006 08:53:11 -0000	1.36
  +++ ossp-pkg/uuid/uuid.pod	11 May 2006 09:37:28 -0000	1.37
  @@ -77,11 +77,11 @@
    3|                         node (2-5)                            |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   
  -An example of a UUID binary representation is the octet stream "C<0xEC
  -0xB9 0xF3 0x5F 0x44 0x2A 0x11 0xD8 0x8A 0x24 0x00 0x90 0x27 0x2F 0xF7
  -0x25>". The binary representation format is exactly what the B<OSSP
  -uuid> API functions B<uuid_import>() and B<uuid_export>() deal with
  -under C<UUID_FMT_BIN>.
  +An example of a UUID binary representation is the octet stream C<0xF8
  +0x1D 0x4F 0xAE 0x7D 0xEC 0x11 0xD0 0xA7 0x65 0x00 0xA0 0xC9 0x1E 0x6B
  +0xF6>. The binary representation format is exactly what the B<OSSP uuid>
  +API functions B<uuid_import>() and B<uuid_export>() deal with under
  +C<UUID_FMT_BIN>.
   
   =head2 UUID ASCII String Representation
   
  @@ -110,10 +110,32 @@
                                 |"A"|"B"|"C"|"D"|"E"|"F"
   
   An example of a UUID string representation is the ASCII string
  -"C<54531d28-402b-11d8-af12-0002a5094c23>". The string representation
  +"C<f81d4fae-7dec-11d0-a765-00a0c91e6bf6>". The string representation
   format is exactly what the B<OSSP uuid> API functions B<uuid_import>()
   and B<uuid_export>() deal with under C<UUID_FMT_STR>.
   
  +Notice: a corresponding URL can be generated out of a ASCII string
  +representation of an UUID by prefixing with "C<urn:uuid:>" as in
  +"C<urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6>".
  +
  +=head2 UUID Single Integer Value Representation
  +
  +According to the ISO/IEC 11578:1996 and ITU-T Rec. X.667 standards, a
  +DCE 1.1 variant UUID can be also represented as a single integer value
  +consisting of a decimal number with up to 39 digits.
  +
  +An example of a UUID single integer value representation is the decimal
  +number "C<329800735698586629295641978511506172918>". The string
  +representation format is exactly what the B<OSSP uuid> API functions
  +B<uuid_import>() and B<uuid_export>() deal with under C<UUID_FMT_SIV>.
  +
  +Notice: a corresponding ISO OID can be generated under the
  +"{joint-iso-itu-t(2) uuid(25)}" arc out of a single integer value
  +representation of a UUID by prefixing with "C<2.25.>". An example OID
  +is "C<2.25.329800735698586629295641978511506172918>". Additionally,
  +an URL can be generated by further prefixing with "C<urn:oid:>" as in
  +"C<urn:oid:2.25.329800735698586629295641978511506172918>".
  +
   =head2 UUID Variants and Versions
   
   A UUID has a variant and version. The variant defines the layout of the
  @@ -205,11 +227,13 @@
   $I<r>, {qw(s 9 . 2 b 1 a 0)}->{$I<t>}, ($I<t> eq 's' ? 99 : $I<l>))",
   i.e., the version 0.9.6 is encoded as "0x009206".
   
  -=item B<UUID_LEN_BIN>, B<UUID_LEN_STR>
  +=item B<UUID_LEN_BIN>, B<UUID_LEN_STR>, B<UUID_LEN_SIV>
   
   The number of octets of the UUID binary and string representations.
  -Notice that the lengths of the string representation does I<not> include
  -the necessary C<NUL> termination character.
  +Notice that the lengths of the string representation (B<UUID_LEN_STR>)
  +and the lengths of the single integer value representation
  +(B<UUID_LEN_SIV>) does I<not> include the necessary C<NUL> termination
  +character.
   
   =item B<UUID_MAKE_V1>, B<UUID_MAKE_V3>, B<UUID_MAKE_V4>, B<UUID_MAKE_V5>, B<UUID_MAKE_MC>
   
  @@ -224,13 +248,15 @@
   The C<UUID_RC_OK> indicates success, the others indicate errors.
   Use B<uuid_error>() to translate them into string versions.
   
  -=item B<UUID_FMT_BIN>, B<UUID_FMT_STR>, B<UUID_FMT_TXT>
  +=item B<UUID_FMT_BIN>, B<UUID_FMT_STR>, B<UUID_FMT_SIV>, B<UUID_FMT_TXT>
   
   The I<fmt> formats for use with B<uuid_import>() and B<uuid_export>().
   The B<UUID_FMT_BIN> indicates the UUID binary representation (of
   length B<UUID_LEN_BIN>), the B<UUID_FMT_STR> indicates the UUID string
  -representation (of length B<UUID_LEN_STR>) and the B<UUID_FMT_TXT>
  -indicates the textual description (of arbitrary length) of a UUID.
  +representation (of length B<UUID_LEN_STR>), the B<UUID_FMT_SIV>
  +indicates the UUID single integer value representation (of maximum
  +length B<UUID_LEN_SIV>) and the B<UUID_FMT_TXT> indicates the textual
  +description (of arbitrary length) of a UUID.
   
   =back
   
  @@ -276,7 +302,7 @@
   
   The format of the external representation is specified by I<fmt> and the
   minimum expected length in I<data_len> depends on it. Valid values for
  -I<fmt> are B<UUID_FMT_BIN> and B<UUID_FMT_STR>.
  +I<fmt> are B<UUID_FMT_BIN>, B<UUID_FMT_STR> and B<UUID_FMT_SIV>.
   
   =item uuid_rc_t B<uuid_export>(const uuid_t *I<uuid>, uuid_fmt_t I<fmt>, void **I<data_ptr>, size_t *I<data_len>);
   
  @@ -291,7 +317,8 @@
   
   The format of the external representation is specified by I<fmt> and the
   minimum required length in C<*>I<data_len> depends on it. Valid values
  -for I<fmt> are B<UUID_FMT_BIN>, B<UUID_FMT_STR> and B<UUID_FMT_TXT>.
  +for I<fmt> are B<UUID_FMT_BIN>, B<UUID_FMT_STR>, B<UUID_FMT_SIV> and
  +B<UUID_FMT_TXT>.
   
   =item uuid_rc_t B<uuid_load>(uuid_t *I<uuid>, const char *I<name>);
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.c
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 uuid_cli.c
  --- ossp-pkg/uuid/uuid_cli.c	7 Feb 2006 08:19:15 -0000	1.21
  +++ ossp-pkg/uuid/uuid_cli.c	11 May 2006 09:37:28 -0000	1.22
  @@ -62,8 +62,8 @@
           vfprintf(stderr, str, ap);
           fprintf(stderr, "\n");
       }
  -    fprintf(stderr, "usage: uuid [-v version] [-m] [-n count] [-1] [-r] [-o filename] [namespace name]\n");
  -    fprintf(stderr, "usage: uuid -d [-r] [-o filename] [uuid]\n");
  +    fprintf(stderr, "usage: uuid [-v version] [-m] [-n count] [-1] [-F format] [-o filename] [namespace name]\n");
  +    fprintf(stderr, "usage: uuid -d [-F format] [-o filename] [uuid]\n");
       va_end(ap);
       exit(1);
   }
  @@ -73,6 +73,7 @@
   {
       char uuid_buf_bin[UUID_LEN_BIN];
       char uuid_buf_str[UUID_LEN_STR+1];
  +    char uuid_buf_siv[UUID_LEN_SIV+1];
       uuid_t *uuid;
       uuid_t *uuid_ns;
       uuid_rc_t rc;
  @@ -82,20 +83,20 @@
       int count;
       int i;
       int iterate;
  -    int raw;
  +    uuid_fmt_t fmt;
       int decode;
       void *vp;
       size_t n;
       unsigned int version;
   
       /* command line parsing */
  -    count = -1;     /* no count yet */
  -    fp = stdout;    /* default output file */
  -    iterate = 0;    /* not one at a time */
  -    raw = 0;        /* default is ASCII output */
  -    decode = 0;     /* default is to encode */
  +    count = -1;         /* no count yet */
  +    fp = stdout;        /* default output file */
  +    iterate = 0;        /* not one at a time */
  +    fmt = UUID_FMT_STR; /* default is ASCII output */
  +    decode = 0;         /* default is to encode */
       version = UUID_MAKE_V1;
  -    while ((ch = getopt(argc, argv, "1n:rdmo:v:h")) != -1) {
  +    while ((ch = getopt(argc, argv, "1n:rF:dmo:v:h")) != -1) {
           switch (ch) {
               case '1':
                   iterate = 1;
  @@ -108,7 +109,17 @@
                       usage("invalid argument to option 'n'");
                   break;
               case 'r':
  -                raw = 1;
  +                fmt = UUID_FMT_BIN;
  +                break;
  +            case 'F':
  +                if (strcasecmp(optarg, "bin") == 0)
  +                    fmt = UUID_FMT_BIN;
  +                else if (strcasecmp(optarg, "str") == 0)
  +                    fmt = UUID_FMT_STR;
  +                else if (strcasecmp(optarg, "siv") == 0)
  +                    fmt = UUID_FMT_SIV;
  +                else
  +                    error(1, "invalid format \"%s\" (has to be \"bin\", \"str\" or \"siv\")", optarg);
                   break;
               case 'd':
                   decode = 1;
  @@ -155,27 +166,39 @@
           if (argc != 1)
               usage("invalid number of arguments");
           if (strcmp(argv[0], "-") == 0) {
  -            if (raw) {
  +            if (fmt == UUID_FMT_BIN) {
                   if (fread(uuid_buf_bin, UUID_LEN_BIN, 1, stdin) != 1)
                       error(1, "fread: failed to read %d (UUID_LEN_BIN) bytes from stdin", UUID_LEN_BIN);
                   if ((rc = uuid_import(uuid, UUID_FMT_BIN, uuid_buf_bin, UUID_LEN_BIN)) != UUID_RC_OK)
                       error(1, "uuid_import: %s", uuid_error(rc));
               }
  -            else {
  +            else if (fmt == UUID_FMT_STR) {
                   if (fread(uuid_buf_str, UUID_LEN_STR, 1, stdin) != 1)
                       error(1, "fread: failed to read %d (UUID_LEN_STR) bytes from stdin", UUID_LEN_STR);
                   uuid_buf_str[UUID_LEN_STR] = '\0';
                   if ((rc = uuid_import(uuid, UUID_FMT_STR, uuid_buf_str, UUID_LEN_STR)) != UUID_RC_OK)
                       error(1, "uuid_import: %s", uuid_error(rc));
               }
  +            else if (fmt == UUID_FMT_SIV) {
  +                if (fread(uuid_buf_siv, UUID_LEN_SIV, 1, stdin) != 1)
  +                    error(1, "fread: failed to read %d (UUID_LEN_SIV) bytes from stdin", UUID_LEN_SIV);
  +                uuid_buf_siv[UUID_LEN_SIV] = '\0';
  +                if ((rc = uuid_import(uuid, UUID_FMT_SIV, uuid_buf_siv, UUID_LEN_SIV)) != UUID_RC_OK)
  +                    error(1, "uuid_import: %s", uuid_error(rc));
  +            }
           }
           else {
  -            if (raw)
  -                error(1, "raw input mode only possible if reading from stdin");
  -            if (strlen(argv[0]) != UUID_LEN_STR)
  -                error(1, "invalid length of UUID string representation");
  -            if ((rc = uuid_import(uuid, UUID_FMT_STR, argv[0], strlen(argv[0]))) != UUID_RC_OK)
  -                error(1, "uuid_import: %s", uuid_error(rc));
  +            if (fmt == UUID_FMT_BIN) {
  +                error(1, "binary input mode only possible if reading from stdin");
  +            }
  +            else if (fmt == UUID_FMT_STR) {
  +                if ((rc = uuid_import(uuid, UUID_FMT_STR, argv[0], strlen(argv[0]))) != UUID_RC_OK)
  +                    error(1, "uuid_import: %s", uuid_error(rc));
  +            }
  +            else if (fmt == UUID_FMT_SIV) {
  +                if ((rc = uuid_import(uuid, UUID_FMT_SIV, argv[0], strlen(argv[0]))) != UUID_RC_OK)
  +                    error(1, "uuid_import: %s", uuid_error(rc));
  +            }
           }
           vp = NULL;
           if ((rc = uuid_export(uuid, UUID_FMT_TXT, &vp, NULL)) != UUID_RC_OK)
  @@ -222,20 +245,27 @@
                   if ((rc = uuid_make(uuid, version)) != UUID_RC_OK)
                       error(1, "uuid_make: %s", uuid_error(rc));
               }
  -            if (raw) {
  +            if (fmt == UUID_FMT_BIN) {
                   vp = NULL;
                   if ((rc = uuid_export(uuid, UUID_FMT_BIN, &vp, &n)) != UUID_RC_OK)
                       error(1, "uuid_export: %s", uuid_error(rc));
                   fwrite(vp, n, 1, fp);
                   free(vp);
               }
  -            else {
  +            else if (fmt == UUID_FMT_STR) {
                   vp = NULL;
                   if ((rc = uuid_export(uuid, UUID_FMT_STR, &vp, &n)) != UUID_RC_OK)
                       error(1, "uuid_export: %s", uuid_error(rc));
                   fprintf(fp, "%s\n", (char *)vp);
                   free(vp);
               }
  +            else if (fmt == UUID_FMT_SIV) {
  +                vp = NULL;
  +                if ((rc = uuid_export(uuid, UUID_FMT_SIV, &vp, &n)) != UUID_RC_OK)
  +                    error(1, "uuid_export: %s", uuid_error(rc));
  +                fprintf(fp, "%s\n", (char *)vp);
  +                free(vp);
  +            }
           }
           if ((rc = uuid_destroy(uuid)) != UUID_RC_OK)
               error(1, "uuid_destroy: %s", uuid_error(rc));
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.pod
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 uuid_cli.pod
  --- ossp-pkg/uuid/uuid_cli.pod	13 Jan 2006 06:44:30 -0000	1.24
  +++ ossp-pkg/uuid/uuid_cli.pod	11 May 2006 09:37:28 -0000	1.25
  @@ -44,7 +44,7 @@
   [B<-m>]
   [B<-n> I<count>]
   [B<-1>]
  -[B<-r>]
  +[B<-F> I<format>]
   [B<-o> I<filename>]
   [I<namespace> I<name>]
   
  @@ -113,11 +113,31 @@
   remembered in the UUID context of the API. Option B<-1> deletes the
   remembered UUID on each iteration.
   
  -=item B<-r>
  +=item B<-F> I<format>
  +
  +Representation format for importing or exporting an UUID. The
  +following (case insensitive) format identifiers are currently recognized:
  +
  +=over 4
  +
  +=item C<BIN> (binary representation)
  +
  +This is the raw 128 bit network byte order binary representation of a
  +UUID. Example is the octet stream C<0xF8 0x1D 0x4F 0xAE 0x7D 0xEC 0x11
  +0xD0 0xA7 0x65 0x00 0xA0 0xC9 0x1E 0x6B 0xF6>.
   
  -Output the generated UUID in 128 bit (network byte order) raw binary
  -representation format. The default is to output the generated UUID in
  -the standardized ASCII string representation.
  +=item C<STR> (string representation)
  +
  +This is the 36 character hexadecimal ASCII string representation of a
  +UUID. Example is the string "C<f81d4fae-7dec-11d0-a765-00a0c91e6bf6>".
  +
  +=item C<SIV> (single integer value representation)
  +
  +This is the maximum 39 character long single integer
  +value representation of a UUID. Example is the string
  +"C<329800735698586629295641978511506172918>".
  +
  +=back
   
   =item B<-o> I<filename>
   
  @@ -139,12 +159,13 @@
   
    # decode and dump DCE 1.1 v1 UUID (time and node based)
    $ uuid -d 01c47915-4777-11d8-bc70-0090272ff725
  - UUID:    01c47915-4777-11d8-bc70-0090272ff725
  - variant: DCE 1.1, ISO/IEC 11578:1996
  - version: 1 (time and node based)
  - content: time:  2004-01-15 16:22:26.376322.1 UTC
  -          clock: 15472 (usually random)
  -          node:  00:90:27:2f:f7:25 (global unicast)
  + encode: STR:     01c47915-4777-11d8-bc70-0090272ff725
  +         SIV:     2349374037528578887923094374772111141
  + decode: variant: DCE 1.1, ISO/IEC 11578:1996
  +         version: 1 (time and node based)
  +         content: time:  2004-01-15 16:22:26.376322.1 UTC
  +                  clock: 15472 (usually random)
  +                  node:  00:90:27:2f:f7:25 (global unicast)
   
    # generate DCE 1.1 v3 UUID (name based)
    $ uuid -v3 ns:URL http://www.ossp.org/
  @@ -152,11 +173,12 @@
   
    # decode and dump DCE 1.1 v3 UUID (name based)
    $ uuid -d 02d9e6d5-9467-382e-8f9b-9300a64ac3cd
  - UUID:    02d9e6d5-9467-382e-8f9b-9300a64ac3cd
  - variant: DCE 1.1, ISO/IEC 11578:1996
  - version: 3 (name based)
  - content: 02:D9:E6:D5:94:67:08:2E:0F:9B:93:00:A6:4A:C3:CD
  -          (not decipherable, because message digest only)
  + encode: STR:     02d9e6d5-9467-382e-8f9b-9300a64ac3cd
  +         SIV:     3789866285607910888100818383505376205
  + decode: variant: DCE 1.1, ISO/IEC 11578:1996
  +         version: 3 (name based, MD5)
  +         content: 02:D9:E6:D5:94:67:08:2E:0F:9B:93:00:A6:4A:C3:CD
  +                  (not decipherable: MD5 message digest only)
   
    # generate DCE 1.1 v4 UUID 4 (random data based)
    $ uuid -v4
  @@ -164,11 +186,12 @@
   
    # decode and dump DCE 1.1 v4 UUID 4 (random data based)
    $ uuid -d eb424026-6f54-4ef8-a4d0-bb658a1fc6cf
  - UUID:    eb424026-6f54-4ef8-a4d0-bb658a1fc6cf
  - variant: DCE 1.1, ISO/IEC 11578:1996
  - version: 4 (random data based)
  - content: EB:42:40:26:6F:54:0E:F8:24:D0:BB:65:8A:1F:C6:CF
  -          (no semantics, because random data only)
  + encode: STR:     eb424026-6f54-4ef8-a4d0-bb658a1fc6cf
  +         SIV:     312712571721458096795100956955942831823
  + decode: variant: DCE 1.1, ISO/IEC 11578:1996
  +         version: 4 (random data based)
  +         content: EB:42:40:26:6F:54:0E:F8:24:D0:BB:65:8A:1F:C6:CF
  +                  (no semantics: random data only)
   
   =head1 SEE ALSO
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_ui128.c
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid_ui128.c
  --- /dev/null	2006-05-11 11:37:29 +0200
  +++ uuid_ui128.c	2006-05-11 11:37:29 +0200
  @@ -0,0 +1,586 @@
  +/*
  +**  OSSP ui128 - 128-Bit Arithmetic
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +**
  +**  This file is part of OSSP ui128, a 128-bit arithmetic library
  +**  which can be found at http://www.ossp.org/pkg/lib/ui128/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  ui128.c: implementation of 128-bit unsigned integer arithmetic
  +*/
  +
  +#include <string.h>
  +#include <ctype.h>
  +
  +#include "uuid_ui128.h"
  +
  +#define UI128_BASE   256 /* 2^8 */
  +#define UI128_DIGITS 16  /* 8*16 = 128 bit */
  +#define UIXX_T(n) struct { unsigned char x[n]; }
  +
  +/* fill an ui128_t with a sequence of a particular digit */
  +#define ui128_fill(__x, __n) \
  +    /*lint -save -e717*/ \
  +    do { int __i; \
  +      for (__i = 0; __i < UI128_DIGITS; __i++) \
  +          (__x).x[__i] = (__n); \
  +    } while (0) \
  +    /*lint -restore*/
  +
  +/* the value zero */
  +ui128_t ui128_zero(void)
  +{
  +    ui128_t z;
  +
  +    ui128_fill(z, 0);
  +    return z;
  +}
  +
  +/* the maximum value */
  +ui128_t ui128_max(void)
  +{
  +    ui128_t z;
  +
  +    ui128_fill(z, UI128_BASE-1);
  +    return z;
  +}
  +
  +/* convert ISO-C "unsigned long" into internal format */
  +ui128_t ui128_n2i(unsigned long n)
  +{
  +    ui128_t z;
  +    int i;
  +
  +    i = 0;
  +    do {
  +        z.x[i++] = (n % UI128_BASE);
  +    } while ((n /= UI128_BASE) > 0 && i < UI128_DIGITS);
  +    for ( ; i < UI128_DIGITS; i++)
  +        z.x[i] = 0;
  +    return z;
  +}
  +
  +/* convert internal format into ISO-C "unsigned long";
  +   truncates if sizeof(unsigned long) is less than UI128_DIGITS! */
  +unsigned long ui128_i2n(ui128_t x)
  +{
  +    unsigned long n;
  +    int i;
  +
  +    n = 0;
  +    i = (int)sizeof(n);
  +    /*lint -save -e774*/
  +    if (i > UI128_DIGITS)
  +        i = UI128_DIGITS;
  +    /*lint -restore*/
  +    while (--i >= 0) {
  +        n = (n * UI128_BASE) + x.x[i];
  +    }
  +    return n;
  +}
  +
  +/* convert string representation of arbitrary base into internal format */
  +ui128_t ui128_s2i(const char *str, char **end, int base)
  +{
  +    ui128_t z;
  +    const char *cp;
  +    int carry;
  +    static char map[] = {
  +         0,  1,  2,  3,  4,  5,  6,  7,  8,  9,             /* 0...9 */
  +        36, 36, 36, 36, 36, 36, 36,                         /* illegal chars */
  +        10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, /* A...M */
  +        23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, /* N...Z */
  +        36, 36, 36, 36, 36, 36,                             /* illegal chars */
  +        10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, /* a...m */
  +        23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35  /* m...z */
  +    };
  +
  +    ui128_fill(z, 0);
  +    if (str == NULL || (base < 2 || base > 36))
  +        return z;
  +    cp = str;
  +    while (*cp != '\0' && isspace((int)(*cp)))
  +        cp++;
  +    while (   *cp != '\0'
  +           && isalnum((int)(*cp))
  +           && map[(int)(*cp)-'0'] < base) {
  +        z = ui128_muln(z, base, &carry);
  +        if (carry)
  +            break;
  +        z = ui128_addn(z, map[(int)(*cp)-'0'], &carry);
  +        if (carry)
  +            break;
  +        cp++;
  +    }
  +    if (end != NULL)
  +        *end = (char *)cp;
  +    return z;
  +}
  +
  +/* convert internal format into string representation of arbitrary base */
  +char *ui128_i2s(ui128_t x, char *str, size_t len, int base)
  +{
  +    static char map[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  +    char c;
  +    int r;
  +    int n;
  +    int i, j;
  +
  +    if (str == NULL || len < 2 || (base < 2 || base > 36))
  +        return NULL;
  +    n = ui128_len(x);
  +    i = 0;
  +    do {
  +        x = ui128_divn(x, base, &r);
  +        str[i++] = map[r];
  +        while (n > 1 && x.x[n-1] == 0)
  +            n--;
  +    } while (i < ((int)len-1) && (n > 1 || x.x[0] != 0));
  +    str[i] = '\0';
  +    for (j = 0; j < --i; j++) {
  +        c = str[j];
  +        str[j] = str[i];
  +        str[i] = c;
  +    }
  +    return str;
  +}
  +
  +/* addition of two ui128_t */
  +ui128_t ui128_add(ui128_t x, ui128_t y, ui128_t *ov)
  +{
  +    ui128_t z;
  +    int carry;
  +    int i;
  +
  +    carry = 0;
  +    for (i = 0; i < UI128_DIGITS; i++) {
  +        carry += (x.x[i] + y.x[i]);
  +        z.x[i] = (carry % UI128_BASE);
  +        carry /= UI128_BASE;
  +    }
  +    if (ov != NULL)
  +        *ov = ui128_n2i((unsigned long)carry);
  +    return z;
  +}
  +
  +/* addition of an ui128_t and a single digit */
  +ui128_t ui128_addn(ui128_t x, int y, int *ov)
  +{
  +    ui128_t z;
  +    int i;
  +
  +    for (i = 0; i < UI128_DIGITS; i++) {
  +        y += x.x[i];
  +        z.x[i] = (y % UI128_BASE);
  +        y /= UI128_BASE;
  +    }
  +    if (ov != NULL)
  +        *ov = y;
  +    return z;
  +}
  +
  +/* subtraction of two ui128_t */
  +ui128_t ui128_sub(ui128_t x, ui128_t y, ui128_t *ov)
  +{
  +    ui128_t z;
  +    int borrow;
  +    int i;
  +    int d;
  +
  +    borrow = 0;
  +    for (i = 0; i < UI128_DIGITS; i++) {
  +        d = ((x.x[i] + UI128_BASE) - borrow - y.x[i]);
  +        z.x[i] = (d % UI128_BASE);
  +        borrow = (1 - (d/UI128_BASE));
  +    }
  +    if (ov != NULL)
  +        *ov = ui128_n2i((unsigned long)borrow);
  +    return z;
  +}
  +
  +/* subtraction of an ui128_t and a single digit */
  +ui128_t ui128_subn(ui128_t x, int y, int *ov)
  +{
  +    ui128_t z;
  +    int i;
  +    int d;
  +
  +    for (i = 0; i < UI128_DIGITS; i++) {
  +        d = (x.x[i] + UI128_BASE) - y;
  +        z.x[i] = (d % UI128_BASE);
  +        y = (1 - (d/UI128_BASE));
  +    }
  +    if (ov != NULL)
  +        *ov = y;
  +    return z;
  +}
  +
  +/*
  +             7 3 2
  +         * 9 4 2 8
  +         ---------
  +           5 8 5 6
  +   +     1 4 6 4
  +   +   2 9 2 8
  +   + 6 5 8 8
  +   ---------------
  +   = 6 9 0 1 2 9 6
  +*/
  +
  +ui128_t ui128_mul(ui128_t x, ui128_t y, ui128_t *ov)
  +{
  +    UIXX_T(UI128_DIGITS+UI128_DIGITS) zx;
  +    ui128_t z;
  +    int carry;
  +    int i, j;
  +
  +    /* clear temporary result buffer */
  +    for (i = 0; i < (UI128_DIGITS+UI128_DIGITS); i++)
  +        zx.x[i] = 0;
  +
  +    /* perform multiplication operation */
  +    for (i = 0; i < UI128_DIGITS; i++) {
  +        /* calculate partial product and immediately add to z */
  +        carry = 0;
  +        for (j = 0; j < UI128_DIGITS; j++) {
  +            carry += (x.x[i] * y.x[j]) + zx.x[i+j];
  +            zx.x[i+j] = (carry % UI128_BASE);
  +            carry /= UI128_BASE;
  +        }
  +        /* add carry to remaining digits in z */
  +        for ( ; j < UI128_DIGITS + UI128_DIGITS - i; j++) {
  +            carry += zx.x[i+j];
  +            zx.x[i+j] = (carry % UI128_BASE);
  +            carry /= UI128_BASE;
  +        }
  +    }
  +
  +    /* provide result by splitting zx into z and ov */
  +    memcpy(z.x, zx.x, UI128_DIGITS);
  +    if (ov != NULL)
  +        memcpy((*ov).x, &zx.x[UI128_DIGITS], UI128_DIGITS);
  +
  +    return z;
  +}
  +
  +ui128_t ui128_muln(ui128_t x, int y, int *ov)
  +{
  +    ui128_t z;
  +    int carry;
  +    int i;
  +
  +    carry = 0;
  +    for (i = 0; i < UI128_DIGITS; i++) {
  +        carry += (x.x[i] * y);
  +        z.x[i] = (carry % UI128_BASE);
  +        carry /= UI128_BASE;
  +    }
  +    if (ov != NULL)
  +        *ov = carry;
  +    return z;
  +}
  +
  +/*
  +  =   2078 [q]
  +   0615367 [x] : 296 [y]
  +  -0592    [dq]
  +  -----
  +  = 0233
  +   -0000   [dq]
  +   -----
  +   = 2336
  +    -2072  [dq]
  +    -----
  +    = 2647
  +     -2308 [dq]
  +     -----
  +     = 279 [r]
  + */
  +ui128_t ui128_div(ui128_t x, ui128_t y, ui128_t *ov)
  +{
  +    ui128_t q;
  +    ui128_t r;
  +    int i;
  +    int n, m;
  +    int ovn;
  +
  +    /* determine actual number of involved digits */
  +    n = ui128_len(x);
  +    m = ui128_len(y);
  +
  +    if (m == 1) {
  +        /* simple case #1: reduceable to ui128_divn() */
  +        if (y.x[0] == 0) {
  +            /* error case: division by zero! */
  +            ui128_fill(q, 0);
  +            ui128_fill(r, 0);
  +        }
  +        else {
  +            q = ui128_divn(x, y.x[0], &ovn);
  +            ui128_fill(r, 0);
  +            r.x[0] = (unsigned char)ovn;
  +        }
  +
  +    } else if (n < m) {
  +        /* simple case #2: everything is in the remainder */
  +        ui128_fill(q, 0);
  +        r = x;
  +
  +    } else { /* n >= m, m > 1 */
  +        /* standard case: x[0..n] / y[0..m] */
  +        UIXX_T(UI128_DIGITS+1) rx;
  +        UIXX_T(UI128_DIGITS+1) dq;
  +        ui128_t t;
  +        int km;
  +        int k;
  +        int qk;
  +        unsigned long y2;
  +        unsigned long r3;
  +        int borrow;
  +        int d;
  +
  +        /* rx is x with a leading zero in order to make
  +           sure that n > m and not just n >= m */
  +        memcpy(rx.x, x.x, UI128_DIGITS);
  +        rx.x[UI128_DIGITS] = 0;
  +
  +        for (k = n - m; k >= 0; k--) {
  +            /* efficiently compute qk by guessing
  +               qk := rx[k+m-2...k+m]/y[m-2...m-1] */
  +            km = k + m;
  +            y2 = (y.x[m-1]*UI128_BASE) + y.x[m-2];
  +            r3 = (rx.x[km]*(UI128_BASE*UI128_BASE)) +
  +                 (rx.x[km-1]*UI128_BASE) + rx.x[km-2];
  +            qk = r3 / y2;
  +            if (qk >= UI128_BASE)
  +                qk = UI128_BASE - 1;
  +
  +            /* dq := y*qk (post-adjust qk if guessed incorrectly) */
  +            t = ui128_muln(y, qk, &ovn);
  +            memcpy(dq.x, t.x, UI128_DIGITS);
  +            dq.x[m] = (unsigned char)ovn;
  +            for (i = m; i > 0; i--)
  +                if (rx.x[i+k] != dq.x[i])
  +                    break;
  +            if (rx.x[i+k] < dq.x[i]) {
  +                t = ui128_muln(y, --qk, &ovn);
  +                memcpy(dq.x, t.x, UI128_DIGITS);
  +                dq.x[m] = (unsigned char)ovn;
  +            }
  +
  +            /* store qk */
  +            q.x[k] = (unsigned char)qk;
  +
  +            /* rx := rx - dq*(b^k) */
  +            borrow = 0;
  +            for (i = 0; i < m+1; i++) {
  +                d = ((rx.x[k+i] + UI128_BASE) - borrow - dq.x[i]);
  +                rx.x[k+i] = (d % UI128_BASE);
  +                borrow = (1 - (d/UI128_BASE));
  +            }
  +        }
  +        memcpy(r.x, rx.x, m);
  +
  +        /* fill out results with leading zeros */
  +        for (i = n-m+1; i < UI128_DIGITS; i++)
  +            q.x[i] = 0;
  +        for (i = m; i < UI128_DIGITS; i++)
  +            r.x[i] = 0;
  +    }
  +
  +    /* provide results */
  +    if (ov != NULL)
  +        *ov = r;
  +    return q;
  +}
  +
  +ui128_t ui128_divn(ui128_t x, int y, int *ov)
  +{
  +    ui128_t z;
  +    unsigned int carry;
  +    int i;
  +
  +    carry = 0;
  +    for (i = (UI128_DIGITS - 1); i >= 0; i--) {
  +        carry = (carry * UI128_BASE) + x.x[i];
  +        z.x[i] = (carry / y);
  +        carry %= y;
  +    }
  +    if (ov != NULL)
  +        *ov = carry;
  +    return z;
  +}
  +
  +ui128_t ui128_and(ui128_t x, ui128_t y)
  +{
  +    ui128_t z;
  +    int i;
  +
  +    for (i = 0; i < UI128_DIGITS; i++)
  +        z.x[i] = (x.x[i] & y.x[i]);
  +    return z;
  +}
  +
  +ui128_t ui128_or(ui128_t x, ui128_t y)
  +{
  +    ui128_t z;
  +    int i;
  +
  +    for (i = 0; i < UI128_DIGITS; i++)
  +        z.x[i] = (x.x[i] | y.x[i]);
  +    return z;
  +}
  +
  +ui128_t ui128_xor(ui128_t x, ui128_t y)
  +{
  +    ui128_t z;
  +    int i;
  +
  +    for (i = 0; i < UI128_DIGITS; i++)
  +        z.x[i] = ((x.x[i] & ~(y.x[i])) | (~(x.x[i]) & (y.x[i])));
  +    return z;
  +}
  +
  +ui128_t ui128_not(ui128_t x)
  +{
  +    ui128_t z;
  +    int i;
  +
  +    for (i = 0; i < UI128_DIGITS; i++)
  +        z.x[i] = ~(x.x[i]);
  +    return z;
  +}
  +
  +ui128_t ui128_rol(ui128_t x, int s, ui128_t *ov)
  +{
  +    UIXX_T(UI128_DIGITS+UI128_DIGITS) zx;
  +    ui128_t z;
  +    int i;
  +    int carry;
  +
  +    if (s <= 0) {
  +        /* no shift at all */
  +        if (ov != NULL)
  +            *ov = ui128_zero();
  +        return x;
  +    }
  +    else if (s > 128) {
  +        /* too large shift */
  +        if (ov != NULL)
  +            *ov = ui128_zero();
  +        return ui128_zero();
  +    }
  +    else if (s == 128) {
  +        /* maximum shift */
  +        if (ov != NULL)
  +            *ov = x;
  +        return ui128_zero();
  +    }
  +    else { /* regular shift */
  +        /* shift (logically) left by s/8 bytes */
  +        for (i = 0; i < UI128_DIGITS+UI128_DIGITS; i++)
  +            zx.x[i] = 0;
  +        for (i = 0; i < UI128_DIGITS; i++)
  +            zx.x[i+(s/8)] = x.x[i];
  +        /* shift (logically) left by remaining s%8 bits */
  +        s %= 8;
  +        if (s > 0) {
  +            carry = 0;
  +            for (i = 0; i < UI128_DIGITS+UI128_DIGITS; i++) {
  +                carry += (zx.x[i] * (1 << s));
  +                zx.x[i] = (carry % UI128_BASE);
  +                carry /= UI128_BASE;
  +            }
  +        }
  +        memcpy(z.x, zx.x, UI128_DIGITS);
  +        if (ov != NULL)
  +            memcpy((*ov).x, &zx.x[UI128_DIGITS], UI128_DIGITS);
  +    }
  +    return z;
  +}
  +
  +ui128_t ui128_ror(ui128_t x, int s, ui128_t *ov)
  +{
  +    UIXX_T(UI128_DIGITS+UI128_DIGITS) zx;
  +    ui128_t z;
  +    int i;
  +    int carry;
  +
  +    if (s <= 0) {
  +        /* no shift at all */
  +        if (ov != NULL)
  +            *ov = ui128_zero();
  +        return x;
  +    }
  +    else if (s > 128) {
  +        /* too large shift */
  +        if (ov != NULL)
  +            *ov = ui128_zero();
  +        return ui128_zero();
  +    }
  +    else if (s == 128) {
  +        /* maximum shift */
  +        if (ov != NULL)
  +            *ov = x;
  +        return ui128_zero();
  +    }
  +    else { /* regular shift */
  +        /* shift (logically) right by s/8 bytes */
  +        for (i = 0; i < UI128_DIGITS+UI128_DIGITS; i++)
  +            zx.x[i] = 0;
  +        for (i = 0; i < UI128_DIGITS; i++)
  +            zx.x[UI128_DIGITS+i-(s/8)] = x.x[i];
  +        /* shift (logically) right by remaining s%8 bits */
  +        s %= 8;
  +        if (s > 0) {
  +            carry = 0;
  +            for (i = (UI128_DIGITS+UI128_DIGITS - 1); i >= 0; i--) {
  +                carry = (carry * UI128_BASE) + zx.x[i];
  +                zx.x[i] = (carry / (1 << s));
  +                carry %= (1 << s);
  +            }
  +        }
  +        memcpy(z.x, &zx.x[UI128_DIGITS], UI128_DIGITS);
  +        if (ov != NULL)
  +            memcpy((*ov).x, zx.x, UI128_DIGITS);
  +    }
  +    return z;
  +}
  +
  +int ui128_cmp(ui128_t x, ui128_t y)
  +{
  +    int i;
  +
  +    i = UI128_DIGITS - 1;
  +    while (i > 0 && x.x[i] == y.x[i])
  +        i--;
  +    return (x.x[i] - y.x[i]);
  +}
  +
  +int ui128_len(ui128_t x)
  +{
  +    int i;
  +
  +    for (i = UI128_DIGITS; i > 1 && x.x[i-1] == 0; i--)
  +        ;
  +    return i;
  +}
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_ui128.h
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid_ui128.h
  --- /dev/null	2006-05-11 11:37:29 +0200
  +++ uuid_ui128.h	2006-05-11 11:37:29 +0200
  @@ -0,0 +1,114 @@
  +/*
  +**  OSSP ui128 - 128-Bit Arithmetic
  +**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  +**
  +**  This file is part of OSSP ui128, a 128-bit arithmetic library
  +**  which can be found at http://www.ossp.org/pkg/lib/ui128/.
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  ui128.h: API declaration
  +*/
  +
  +#ifndef __UI128_H__
  +#define __UI128_H__
  +
  +#include <string.h>
  +
  +#define UI128_PREFIX uuid_
  +
  +/* embedding support */
  +#ifdef UI128_PREFIX
  +#if defined(__STDC__) || defined(__cplusplus)
  +#define __UI128_CONCAT(x,y) x ## y
  +#define UI128_CONCAT(x,y) __UI128_CONCAT(x,y)
  +#else
  +#define __UI128_CONCAT(x) x
  +#define UI128_CONCAT(x,y) __UI128_CONCAT(x)y
  +#endif
  +#define ui128_t     UI128_CONCAT(UI128_PREFIX,ui128_t)
  +#define ui128_zero  UI128_CONCAT(UI128_PREFIX,ui128_zero)
  +#define ui128_max   UI128_CONCAT(UI128_PREFIX,ui128_max)
  +#define ui128_n2i   UI128_CONCAT(UI128_PREFIX,ui128_n2i)
  +#define ui128_i2n   UI128_CONCAT(UI128_PREFIX,ui128_i2n)
  +#define ui128_s2i   UI128_CONCAT(UI128_PREFIX,ui128_s2i)
  +#define ui128_i2s   UI128_CONCAT(UI128_PREFIX,ui128_i2s)
  +#define ui128_add   UI128_CONCAT(UI128_PREFIX,ui128_add)
  +#define ui128_addn  UI128_CONCAT(UI128_PREFIX,ui128_addn)
  +#define ui128_sub   UI128_CONCAT(UI128_PREFIX,ui128_sub)
  +#define ui128_subn  UI128_CONCAT(UI128_PREFIX,ui128_subn)
  +#define ui128_mul   UI128_CONCAT(UI128_PREFIX,ui128_mul)
  +#define ui128_muln  UI128_CONCAT(UI128_PREFIX,ui128_muln)
  +#define ui128_div   UI128_CONCAT(UI128_PREFIX,ui128_div)
  +#define ui128_divn  UI128_CONCAT(UI128_PREFIX,ui128_divn)
  +#define ui128_and   UI128_CONCAT(UI128_PREFIX,ui128_and)
  +#define ui128_or    UI128_CONCAT(UI128_PREFIX,ui128_or)
  +#define ui128_xor   UI128_CONCAT(UI128_PREFIX,ui128_xor)
  +#define ui128_not   UI128_CONCAT(UI128_PREFIX,ui128_not)
  +#define ui128_rol   UI128_CONCAT(UI128_PREFIX,ui128_rol)
  +#define ui128_ror   UI128_CONCAT(UI128_PREFIX,ui128_ror)
  +#define ui128_len   UI128_CONCAT(UI128_PREFIX,ui128_len)
  +#define ui128_cmp   UI128_CONCAT(UI128_PREFIX,ui128_cmp)
  +#endif
  +
  +typedef struct {
  +    unsigned char x[16]; /* x_0, ..., x_15 */
  +} ui128_t;
  +
  +#define ui128_cons(x15,x14,x13,x12,x11,x10,x9,x8,x7,x6,x5,x4,x3,x2,x1,x0) \
  +    { { 0x##x0, 0x##x1, 0x##x2,  0x##x3,  0x##x4,  0x##x5,  0x##x6,  0x##x7, \
  +    { { 0x##x8, 0x##x9, 0x##x10, 0x##x11, 0x##x12, 0x##x13, 0x##x14, 0x##x15 } }
  +
  +/* particular values */
  +extern ui128_t        ui128_zero (void);
  +extern ui128_t        ui128_max  (void);
  +
  +/* import and export via ISO-C "unsigned long" */
  +extern ui128_t        ui128_n2i  (unsigned long n);
  +extern unsigned long  ui128_i2n  (ui128_t x);
  +
  +/* import and export via ISO-C string of arbitrary base */
  +extern ui128_t        ui128_s2i  (const char *str, char **end, int base);
  +extern char *         ui128_i2s  (ui128_t x, char *str, size_t len, int base);
  +
  +/* arithmetical operations */
  +extern ui128_t        ui128_add  (ui128_t x, ui128_t y, ui128_t *ov);
  +extern ui128_t        ui128_addn (ui128_t x, int     y, int     *ov);
  +extern ui128_t        ui128_sub  (ui128_t x, ui128_t y, ui128_t *ov);
  +extern ui128_t        ui128_subn (ui128_t x, int     y, int     *ov);
  +extern ui128_t        ui128_mul  (ui128_t x, ui128_t y, ui128_t *ov);
  +extern ui128_t        ui128_muln (ui128_t x, int     y, int     *ov);
  +extern ui128_t        ui128_div  (ui128_t x, ui128_t y, ui128_t *ov);
  +extern ui128_t        ui128_divn (ui128_t x, int     y, int     *ov);
  +
  +/* bit operations */
  +extern ui128_t        ui128_and  (ui128_t x, ui128_t y);
  +extern ui128_t        ui128_or   (ui128_t x, ui128_t y);
  +extern ui128_t        ui128_xor  (ui128_t x, ui128_t y);
  +extern ui128_t        ui128_not  (ui128_t x);
  +extern ui128_t        ui128_rol  (ui128_t x, int s, ui128_t *ov);
  +extern ui128_t        ui128_ror  (ui128_t x, int s, ui128_t *ov);
  +
  +/* other operations */
  +extern int            ui128_len  (ui128_t x);
  +extern int            ui128_cmp  (ui128_t x, ui128_t y);
  +
  +#endif /* __UI128_H__ */
  +
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 11 11:44:16 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id D7881752916; Thu, 11 May 2006 11:44:16 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.pod
Message-Id: <20060511094416.D7881752916@mail.ossp.org>
Date: Thu, 11 May 2006 11:44:16 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-May-2006 11:44:16
  Branch: HEAD                             Handle: 2006051110441600

  Modified files:
    ossp-pkg/uuid           uuid.pod

  Log:
    replace the old ASCII art with a newer one

  Summary:
    Revision    Changes     Path
    1.38        +35 -11     ossp-pkg/uuid/uuid.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	11 May 2006 09:37:28 -0000	1.37
  +++ ossp-pkg/uuid/uuid.pod	11 May 2006 09:44:16 -0000	1.38
  @@ -65,17 +65,41 @@
   DCE 1.1 variant UUID is a 128 bit number defined out of 7 fields, each
   field a multiple of an octet in size and stored in network byte order:
   
  -  0                   1                   2                   3
  -   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  -  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  - 0|                          time_low                             |
  -  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  - 1|       time_mid                |         time_hi_and_version   |
  -  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  - 2|clk_seq_hi_res |  clk_seq_low  |         node (0-1)            |
  -  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  - 3|                         node (2-5)                            |
  -  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  +                                                    [4]
  +                                                   version
  +                                                 -->|  |<--
  +                                                    |  |
  +                                                    |  |  [16]
  +                [32]                      [16]      |  |time_hi
  +              time_low                  time_mid    | _and_version
  +    |<---------------------------->||<------------>||<------------>|
  +    | MSB                          ||              ||  |           |
  +    | /                            ||              ||  |           |
  +    |/                             ||              ||  |           |
  +
  +    +------++------++------++------++------++------++------++------+~~
  +    |  15  ||  14  ||  13  ||  12  ||  11  ||  10  |####9  ||   8  | 
  +    | MSO  ||      ||      ||      ||      ||      |####   ||      |
  +    +------++------++------++------++------++------++------++------+~~
  +    7654321076543210765432107654321076543210765432107654321076543210
  +
  +  ~~+------++------++------++------++------++------++------++------+
  +    ##* 7  ||   6  ||   5  ||   4  ||   3  ||   2  ||   1  ||   0  | 
  +    ##*    ||      ||      ||      ||      ||      ||      ||  LSO |
  +  ~~+------++------++------++------++------++------++------++------+
  +    7654321076543210765432107654321076543210765432107654321076543210
  +
  +    | |    ||      ||                                             /|
  +    | |    ||      ||                                            / |
  +    | |    ||      ||                                          LSB |
  +    |<---->||<---->||<-------------------------------------------->|
  +    |clk_seq clk_seq                      node
  +    |_hi_res _low                         [48]
  +    |[5-6]    [8]
  +    | |
  + -->| |<--
  +  variant
  +   [2-3]
   
   An example of a UUID binary representation is the octet stream C<0xF8
   0x1D 0x4F 0xAE 0x7D 0xEC 0x11 0xD0 0xA7 0x65 0x00 0xA0 0xC9 0x1E 0x6B
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 11 19:44:44 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id BF69D752916; Thu, 11 May 2006 19:44:43 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog THANKS ossp-pkg/uuid/php/ uuid.c
Message-Id: <20060511174443.BF69D752916@mail.ossp.org>
Date: Thu, 11 May 2006 19:44:43 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-May-2006 19:44:43
  Branch: HEAD                             Handle: 2006051118444201

  Modified files:
    ossp-pkg/uuid           ChangeLog THANKS
    ossp-pkg/uuid/php       uuid.c

  Log:
    Fix PHP bindings: the wrong argument to uuid_create()
    was forced to a reference
    
    Submitted by: Roman Neuhauser <neuhauser@sigpipe.cz>

  Summary:
    Revision    Changes     Path
    1.117       +4  -0      ossp-pkg/uuid/ChangeLog
    1.9         +1  -0      ossp-pkg/uuid/THANKS
    1.7         +1  -1      ossp-pkg/uuid/php/uuid.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.116 -r1.117 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	11 May 2006 09:37:27 -0000	1.116
  +++ ossp-pkg/uuid/ChangeLog	11 May 2006 17:44:42 -0000	1.117
  @@ -13,6 +13,10 @@
   
     Changes between 1.4.2 and 1.5.0 (13-Mar-2006 to XX-May-2006)
   
  +   o Fix PHP bindings: the wrong argument to uuid_create()
  +     was forced to a reference
  +     [Roman Neuhauser <neuhauser@sigpipe.cz>]
  +
      o Add full support for Single Integer Value (SIV) UUID representation
        for both importing and exporting in C/C++/Perl/PHP APIs.
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/THANKS
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 THANKS
  --- ossp-pkg/uuid/THANKS	6 Dec 2005 07:38:49 -0000	1.8
  +++ ossp-pkg/uuid/THANKS	11 May 2006 17:44:42 -0000	1.9
  @@ -15,6 +15,7 @@
       o  M. Daniel                   <mdaniel@scdi.com>
       o  Fuyuki                      <fuyuki@nigredo.org>
       o  Thomas Lotterer             <thomas@lotterer.net>
  +    o  Roman Neuhauser             <neuhauser@sigpipe.cz>
       o  Piotr Roszatycki            <dexter@debian.org>
       o  Michael Schloh              <michael@schloh.com>
       o  Guerry Semones              <guerry@tsunamiresearch.com>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/php/uuid.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 uuid.c
  --- ossp-pkg/uuid/php/uuid.c	11 May 2006 09:37:30 -0000	1.6
  +++ ossp-pkg/uuid/php/uuid.c	11 May 2006 17:44:43 -0000	1.7
  @@ -493,7 +493,7 @@
   
   /* module function table */
   static function_entry uuid_functions[] = {
  -    PHP_FE(uuid_create,  third_arg_force_ref)
  +    PHP_FE(uuid_create,  first_arg_force_ref)
       PHP_FE(uuid_destroy, NULL)
       PHP_FE(uuid_clone,   NULL)
       PHP_FE(uuid_load,    NULL)
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 11 20:32:08 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 36CAB75291B; Thu, 11 May 2006 20:32:08 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog ossp-pkg/uuid/pgsql/ uuid.c uuid....
Message-Id: <20060511183208.36CAB75291B@mail.ossp.org>
Date: Thu, 11 May 2006 20:32:08 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-May-2006 20:32:08
  Branch: HEAD                             Handle: 2006051119320700

  Modified files:
    ossp-pkg/uuid           ChangeLog
    ossp-pkg/uuid/pgsql     uuid.c uuid.sql.in

  Log:
    - Add Hash indexing support UUID data type of PostgreSQL bindings.
    - Add comparison operators and B-Tree indexing support UUID data
      type of PostgreSQL bindings.
    
    Submitted by: Roman Neuhauser <neuhauser@sigpipe.cz>

  Summary:
    Revision    Changes     Path
    1.118       +7  -0      ossp-pkg/uuid/ChangeLog
    1.4         +75 -1      ossp-pkg/uuid/pgsql/uuid.c
    1.4         +115 -10    ossp-pkg/uuid/pgsql/uuid.sql.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.117 -r1.118 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	11 May 2006 17:44:42 -0000	1.117
  +++ ossp-pkg/uuid/ChangeLog	11 May 2006 18:32:07 -0000	1.118
  @@ -13,6 +13,13 @@
   
     Changes between 1.4.2 and 1.5.0 (13-Mar-2006 to XX-May-2006)
   
  +   o Add Hash indexing support UUID data type of PostgreSQL bindings.
  +     [Ralf S. Engelschall]
  +
  +   o Add comparison operators and B-Tree indexing support UUID data
  +     type of PostgreSQL bindings.
  +     [Roman Neuhauser <neuhauser@sigpipe.cz>]
  +
      o Fix PHP bindings: the wrong argument to uuid_create()
        was forced to a reference
        [Roman Neuhauser <neuhauser@sigpipe.cz>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/pgsql/uuid.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 uuid.c
  --- ossp-pkg/uuid/pgsql/uuid.c	7 Feb 2006 08:19:15 -0000	1.3
  +++ ossp-pkg/uuid/pgsql/uuid.c	11 May 2006 18:32:07 -0000	1.4
  @@ -39,10 +39,11 @@
   /*  PostgreSQL (part 2/2) headers */
   #include "fmgr.h"
   #include "lib/stringinfo.h"
  +#include "access/hash.h"
   
   /* internal UUID datum data structure */
   typedef struct {
  -    char uuid_bin[UUID_LEN_BIN];
  +    unsigned char uuid_bin[UUID_LEN_BIN];
   } uuid_datum_t;
   
   /* forward declarations */
  @@ -50,9 +51,15 @@
   Datum pg_uuid_out    (PG_FUNCTION_ARGS);
   Datum pg_uuid_recv   (PG_FUNCTION_ARGS);
   Datum pg_uuid_send   (PG_FUNCTION_ARGS);
  +Datum pg_uuid_hash   (PG_FUNCTION_ARGS);
   Datum pg_uuid_make   (PG_FUNCTION_ARGS);
   Datum pg_uuid_eq     (PG_FUNCTION_ARGS);
   Datum pg_uuid_ne     (PG_FUNCTION_ARGS);
  +Datum pg_uuid_lt     (PG_FUNCTION_ARGS);
  +Datum pg_uuid_gt     (PG_FUNCTION_ARGS);
  +Datum pg_uuid_le     (PG_FUNCTION_ARGS);
  +Datum pg_uuid_ge     (PG_FUNCTION_ARGS);
  +Datum pg_uuid_cmp    (PG_FUNCTION_ARGS);
   
   /* API function: uuid_in */
   PG_FUNCTION_INFO_V1(pg_uuid_in);
  @@ -323,6 +330,23 @@
       PG_RETURN_POINTER(uuid_datum);
   }
   
  +/* API function: uuid_hash */
  +PG_FUNCTION_INFO_V1(pg_uuid_hash);
  +Datum pg_uuid_hash(PG_FUNCTION_ARGS)
  +{
  +    uuid_datum_t *uuid_datum;
  +
  +    /* sanity check input argument */
  +    if ((uuid_datum = (uuid_datum_t *)PG_GETARG_POINTER(0)) == NULL) {
  +        ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
  +                errmsg("invalid UUID datum argument")));
  +        PG_RETURN_NULL();
  +    }
  +
  +    /* return hash value of the UUID */
  +    PG_RETURN_INT32(hash_any(uuid_datum->uuid_bin, sizeof(uuid_datum->uuid_bin)));
  +}
  +
   /* INTERNAL function: _uuid_cmp */
   static int _uuid_cmp(PG_FUNCTION_ARGS)
   {
  @@ -407,3 +431,53 @@
       PG_RETURN_BOOL(rc != 0);
   }
   
  +/* API function: uuid_lt */
  +PG_FUNCTION_INFO_V1(pg_uuid_lt);
  +Datum pg_uuid_lt(PG_FUNCTION_ARGS)
  +{
  +    int rc;
  +
  +    rc = _uuid_cmp(fcinfo);
  +    PG_RETURN_BOOL(rc == -1);
  +}
  +
  +/* API function: uuid_gt */
  +PG_FUNCTION_INFO_V1(pg_uuid_gt);
  +Datum pg_uuid_gt(PG_FUNCTION_ARGS)
  +{
  +    int rc;
  +
  +    rc = _uuid_cmp(fcinfo);
  +    PG_RETURN_BOOL(rc == 1);
  +}
  +
  +/* API function: uuid_le */
  +PG_FUNCTION_INFO_V1(pg_uuid_le);
  +Datum pg_uuid_le(PG_FUNCTION_ARGS)
  +{
  +    int rc;
  +
  +    rc = _uuid_cmp(fcinfo);
  +    PG_RETURN_BOOL(rc < 1);
  +}
  +
  +/* API function: uuid_ge */
  +PG_FUNCTION_INFO_V1(pg_uuid_ge);
  +Datum pg_uuid_ge(PG_FUNCTION_ARGS)
  +{
  +    int rc;
  +
  +    rc = _uuid_cmp(fcinfo);
  +    PG_RETURN_BOOL(rc > -1);
  +}
  +
  +/* API function: uuid_cmp */
  +PG_FUNCTION_INFO_V1(pg_uuid_cmp);
  +Datum pg_uuid_cmp(PG_FUNCTION_ARGS)
  +{
  +    int rc;
  +
  +    rc = _uuid_cmp(fcinfo);
  +    PG_RETURN_INT32(rc);
  +}
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/pgsql/uuid.sql.in
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 uuid.sql.in
  --- ossp-pkg/uuid/pgsql/uuid.sql.in	13 Jan 2006 06:44:34 -0000	1.3
  +++ ossp-pkg/uuid/pgsql/uuid.sql.in	11 May 2006 18:32:07 -0000	1.4
  @@ -33,16 +33,35 @@
   
   SET search_path TO public;
   
  -DROP FUNCTION uuid_in(CSTRING)    CASCADE;
  -DROP FUNCTION uuid_out(uuid)      CASCADE;
  -DROP FUNCTION uuid_recv(INTERNAL) CASCADE;
  -DROP FUNCTION uuid_send(uuid)     CASCADE;
  -DROP TYPE     uuid                CASCADE;
  -DROP FUNCTION uuid(uuid)          CASCADE;
  -DROP FUNCTION uuid_eq(uuid)       CASCADE;
  -DROP FUNCTION uuid_ne(uuid)       CASCADE;
  -DROP OPERATOR =(uuid,uuid)        CASCADE;
  -DROP OPERATOR <>(uuid,uuid)       CASCADE;
  +DROP FUNCTION uuid_in(CSTRING)                    CASCADE;
  +DROP FUNCTION uuid_out(uuid)                      CASCADE;
  +DROP FUNCTION uuid_recv(INTERNAL)                 CASCADE;
  +DROP FUNCTION uuid_send(uuid)                     CASCADE;
  +DROP TYPE     uuid                                CASCADE;
  +DROP CAST     (CSTRING AS uuid)                   CASCADE;
  +DROP CAST     (uuid AS CSTRING)                   CASCADE;
  +
  +DROP FUNCTION uuid(CSTRING)                       CASCADE;
  +DROP FUNCTION uuid(INTEGER)                       CASCADE;
  +DROP FUNCTION uuid(INTEGER, CSTRING, CSTRING)     CASCADE;
  +
  +DROP FUNCTION uuid_eq(uuid)                       CASCADE;
  +DROP FUNCTION uuid_ne(uuid)                       CASCADE;
  +DROP FUNCTION uuid_lt(uuid, uuid)                 CASCADE;
  +DROP FUNCTION uuid_gt(uuid, uuid)                 CASCADE;
  +DROP FUNCTION uuid_le(uuid, uuid)                 CASCADE;
  +DROP FUNCTION uuid_ge(uuid, uuid)                 CASCADE;
  +DROP OPERATOR =(uuid,uuid)                        CASCADE;
  +DROP OPERATOR <>(uuid,uuid)                       CASCADE;
  +DROP OPERATOR <(uuid,uuid)                        CASCADE;
  +DROP OPERATOR >(uuid,uuid)                        CASCADE;
  +DROP OPERATOR <=(uuid,uuid)                       CASCADE;
  +DROP OPERATOR >=(uuid,uuid)                       CASCADE;
  +
  +DROP FUNCTION uuid_hash(uuid)                     CASCADE;
  +DROP FUNCTION uuid_cmp(uuid, uuid)                CASCADE;
  +DROP OPERATOR CLASS uuid_ops USING hash           CASCADE;
  +DROP OPERATOR CLASS uuid_ops USING btree          CASCADE;
   
   BEGIN;
   
  @@ -83,6 +102,12 @@
   COMMENT ON TYPE uuid
       IS 'UUID type';
   
  +CREATE CAST (CSTRING AS uuid)
  +    WITH FUNCTION uuid_in(CSTRING) AS ASSIGNMENT;
  +
  +CREATE CAST (uuid AS CSTRING)
  +    WITH FUNCTION uuid_out(uuid)   AS ASSIGNMENT;
  +
   --
   --  the UUID constructor function
   --
  @@ -116,6 +141,26 @@
       IMMUTABLE STRICT
       LANGUAGE C AS '@MODULE_PATHNAME@', 'pg_uuid_ne';
   
  +CREATE FUNCTION
  +    uuid_lt(uuid, uuid) RETURNS BOOL
  +    IMMUTABLE STRICT
  +    LANGUAGE C AS '@MODULE_PATHNAME@', 'pg_uuid_lt';
  +
  +CREATE FUNCTION
  +    uuid_gt(uuid, uuid) RETURNS BOOL
  +    IMMUTABLE STRICT
  +    LANGUAGE C AS '@MODULE_PATHNAME@', 'pg_uuid_gt';
  +
  +CREATE FUNCTION
  +    uuid_le(uuid, uuid) RETURNS BOOL
  +    IMMUTABLE STRICT
  +    LANGUAGE C AS '@MODULE_PATHNAME@', 'pg_uuid_le';
  +
  +CREATE FUNCTION
  +    uuid_ge(uuid, uuid) RETURNS BOOL
  +    IMMUTABLE STRICT
  +    LANGUAGE C AS '@MODULE_PATHNAME@', 'pg_uuid_ge';
  +
   CREATE OPERATOR = (
       leftarg    = uuid,
       rightarg   = uuid,
  @@ -130,6 +175,66 @@
       procedure  = uuid_ne
   );
   
  +CREATE OPERATOR < (
  +    leftarg    = uuid,
  +    rightarg   = uuid,
  +    commutator = >,
  +    negator    = >=,
  +    procedure  = uuid_lt
  +);
  +
  +CREATE OPERATOR > (
  +    leftarg    = uuid,
  +    rightarg   = uuid,
  +    commutator = <,
  +    negator    = <=,
  +    procedure  = uuid_gt
  +);
  +
  +CREATE OPERATOR <= (
  +    leftarg    = uuid,
  +    rightarg   = uuid,
  +    commutator = >=,
  +    negator    = >,
  +    procedure  = uuid_le
  +);
  +
  +CREATE OPERATOR >= (
  +    leftarg    = uuid,
  +    rightarg   = uuid,
  +    commutator = <=,
  +    negator    = <,
  +    procedure  = uuid_ge
  +);
  +
  +--
  +--  the UUID support for indexing
  +--
  +
  +CREATE FUNCTION
  +    uuid_hash(uuid) RETURNS INTEGER
  +    IMMUTABLE STRICT
  +    LANGUAGE C AS '@MODULE_PATHNAME@', 'pg_uuid_hash';
  +
  +CREATE FUNCTION
  +    uuid_cmp(uuid, uuid) RETURNS INTEGER
  +    IMMUTABLE STRICT
  +    LANGUAGE C AS '@MODULE_PATHNAME@', 'pg_uuid_cmp';
  +
  +CREATE OPERATOR CLASS uuid_ops
  +    DEFAULT FOR TYPE uuid USING hash AS
  +    OPERATOR 1 =,   -- 1: equal
  +    FUNCTION 1 uuid_hash(uuid);
  +
  +CREATE OPERATOR CLASS uuid_ops
  +    DEFAULT FOR TYPE uuid USING btree AS
  +    OPERATOR 1 <,   -- 1: less than
  +    OPERATOR 2 <=,  -- 2: less than or equal
  +    OPERATOR 3 =,   -- 3: equal
  +    OPERATOR 4 >=,  -- 4: greater than or equal
  +    OPERATOR 5 >,   -- 5: greater than
  +    FUNCTION 1 uuid_cmp(uuid, uuid);
  +
   --
   --  epilog
   --
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 11 20:39:14 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id E029275290D; Thu, 11 May 2006 20:39:13 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/php/ uuid.c
Message-Id: <20060511183913.E029275290D@mail.ossp.org>
Date: Thu, 11 May 2006 20:39:13 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-May-2006 20:39:13
  Branch: HEAD                             Handle: 2006051119391300

  Modified files:
    ossp-pkg/uuid/php       uuid.c

  Log:
    switch to no reference enforment at all

  Summary:
    Revision    Changes     Path
    1.8         +1  -1      ossp-pkg/uuid/php/uuid.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/php/uuid.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 uuid.c
  --- ossp-pkg/uuid/php/uuid.c	11 May 2006 17:44:43 -0000	1.7
  +++ ossp-pkg/uuid/php/uuid.c	11 May 2006 18:39:13 -0000	1.8
  @@ -493,7 +493,7 @@
   
   /* module function table */
   static function_entry uuid_functions[] = {
  -    PHP_FE(uuid_create,  first_arg_force_ref)
  +    PHP_FE(uuid_create,  NULL)
       PHP_FE(uuid_destroy, NULL)
       PHP_FE(uuid_clone,   NULL)
       PHP_FE(uuid_load,    NULL)
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 11 20:39:36 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id CBD6A75290D; Thu, 11 May 2006 20:39:36 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/php/ .cvsignore
Message-Id: <20060511183936.CBD6A75290D@mail.ossp.org>
Date: Thu, 11 May 2006 20:39:36 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-May-2006 20:39:36
  Branch: HEAD                             Handle: 2006051119393600

  Modified files:
    ossp-pkg/uuid/php       .cvsignore

  Log:
    ignore one more generated file

  Summary:
    Revision    Changes     Path
    1.3         +1  -0      ossp-pkg/uuid/php/.cvsignore
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/php/.cvsignore
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 .cvsignore
  --- ossp-pkg/uuid/php/.cvsignore	2 Sep 2005 18:47:33 -0000	1.2
  +++ ossp-pkg/uuid/php/.cvsignore	11 May 2006 18:39:36 -0000	1.3
  @@ -21,3 +21,4 @@
   missing
   mkinstalldirs
   modules
  +run-tests.php
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 11 20:42:54 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 79DAE75290D; Thu, 11 May 2006 20:42:54 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ README ossp-pkg/uuid/perl/ uuid.pm uuid_com...
Message-Id: <20060511184254.79DAE75290D@mail.ossp.org>
Date: Thu, 11 May 2006 20:42:54 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-May-2006 20:42:54
  Branch: HEAD                             Handle: 2006051119425301

  Modified files:
    ossp-pkg/uuid           README uuid_vers.h
    ossp-pkg/uuid/perl      uuid.pm uuid_compat.pm

  Log:
    as we have already changes too much, switch to 1.5 now

  Summary:
    Revision    Changes     Path
    1.40        +1  -1      ossp-pkg/uuid/README
    1.19        +1  -1      ossp-pkg/uuid/perl/uuid.pm
    1.9         +1  -1      ossp-pkg/uuid/perl/uuid_compat.pm
    1.24        +9  -9      ossp-pkg/uuid/uuid_vers.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.39 -r1.40 README
  --- ossp-pkg/uuid/README	13 Mar 2006 09:42:47 -0000	1.39
  +++ ossp-pkg/uuid/README	11 May 2006 18:42:53 -0000	1.40
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
   
     OSSP uuid - Universally Unique Identifier
  -  Version 1.4.2 (13-Mar-2006)
  +  Version 1.5.0 (11-May-2006)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.pm
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 uuid.pm
  --- ossp-pkg/uuid/perl/uuid.pm	11 May 2006 09:37:30 -0000	1.18
  +++ ossp-pkg/uuid/perl/uuid.pm	11 May 2006 18:42:54 -0000	1.19
  @@ -118,7 +118,7 @@
   use Exporter;
   
   #   API version
  -our $VERSION = do { my @v = ('1.4.2' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
  +our $VERSION = do { my @v = ('1.5.0' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
   
   #   API inheritance
   our @ISA = qw(Exporter);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid_compat.pm
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 uuid_compat.pm
  --- ossp-pkg/uuid/perl/uuid_compat.pm	13 Mar 2006 09:42:48 -0000	1.8
  +++ ossp-pkg/uuid/perl/uuid_compat.pm	11 May 2006 18:42:54 -0000	1.9
  @@ -42,7 +42,7 @@
   our @ISA     = qw(Exporter);
   our @EXPORT  = qw(NameSpace_DNS NameSpace_OID NameSpace_URL NameSpace_X500);
   
  -our $VERSION = do { my @v = ('1.4.2' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
  +our $VERSION = do { my @v = ('1.5.0' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
   
   sub new {
       my $class = shift;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_vers.h
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 uuid_vers.h
  --- ossp-pkg/uuid/uuid_vers.h	13 Mar 2006 09:42:47 -0000	1.23
  +++ ossp-pkg/uuid/uuid_vers.h	11 May 2006 18:42:53 -0000	1.24
  @@ -8,7 +8,7 @@
   #ifndef _UUID_VERS_H_
   #define _UUID_VERS_H_
   
  -#define _UUID_VERSION 0x104202
  +#define _UUID_VERSION 0x105200
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _UUID_VERS_H_AS_HEADER_
   
   _uuid_version_t _uuid_version = {
  -    0x104202,
  -    "1.4.2",
  -    "1.4.2 (13-Mar-2006)",
  -    "This is OSSP uuid, Version 1.4.2 (13-Mar-2006)",
  -    "OSSP uuid 1.4.2 (13-Mar-2006)",
  -    "OSSP uuid/1.4.2",
  -    "@(#)OSSP uuid 1.4.2 (13-Mar-2006)",
  -    "$Id: OSSP uuid 1.4.2 (13-Mar-2006) $"
  +    0x105200,
  +    "1.5.0",
  +    "1.5.0 (11-May-2006)",
  +    "This is OSSP uuid, Version 1.5.0 (11-May-2006)",
  +    "OSSP uuid 1.5.0 (11-May-2006)",
  +    "OSSP uuid/1.5.0",
  +    "@(#)OSSP uuid 1.5.0 (11-May-2006)",
  +    "$Id: OSSP uuid 1.5.0 (11-May-2006) $"
   };
   
   #endif /* _UUID_VERS_H_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 18 10:08:21 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 1831A75291C; Thu, 18 May 2006 10:08:21 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ BINDINGS
Message-Id: <20060518080821.1831A75291C@mail.ossp.org>
Date: Thu, 18 May 2006 10:08:21 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-May-2006 10:08:21
  Branch: HEAD                             Handle: 2006051809082000

  Added files:
    ossp-pkg/uuid           BINDINGS

  Log:
    remember existing BINDINGS

  Summary:
    Revision    Changes     Path
    1.1         +35 -0      ossp-pkg/uuid/BINDINGS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/BINDINGS
  ============================================================================
  $ cvs diff -u -r0 -r1.1 BINDINGS
  --- /dev/null	2006-05-18 10:08:04 +0200
  +++ BINDINGS	2006-05-18 10:08:20 +0200
  @@ -0,0 +1,35 @@
  +
  +   _        ___  ____ ____  ____                _     _
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _   _ _   _(_) __| |
  +  _|_||_| | | | \___ \___ \| |_) | | | | | | | | |/ _` |
  + |_||_|_| | |_| |___) |__) |  __/  | |_| | |_| | | (_| |
  +  |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
  +
  +  OSSP uuid - Universally Unique Identifier
  +
  +  LANGUAGE BINDINGS
  +
  +  Various programming language bindings exist for OSSP uuid.
  +  The following is the list of known bindings:
  +
  +  o C
  +    (native API)
  +
  +  o C++
  +    (addon API; part of the OSSP uuid distribution; see uuid++.* files) 
  +
  +  o Perl
  +    (addon API; part of the OSSP uuid distribution; see perl/ directory) 
  +
  +  o PHP
  +    (addon API; part of the OSSP uuid distribution; see php/ directory) 
  +
  +  o PostgreSQL
  +    (addon API; part of the OSSP uuid distribution; see pgsql/ directory) 
  +
  +  o GNU Guile GEE (Scheme)
  +    https://gna.org/projects/gee
  +
  +  o Chicken (Scheme)
  +    http://www.call-with-current-continuation.org/eggs/uuid-ossp.html
  +
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jun  8 19:48:24 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 865A075349B; Thu,  8 Jun 2006 19:48:24 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog pth.m4
Message-Id: <20060608174824.865A075349B@mail.ossp.org>
Date: Thu,  8 Jun 2006 19:48:24 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Jun-2006 19:48:24
  Branch: HEAD                             Handle: 2006060818482300

  Modified files:
    ossp-pkg/pth            ChangeLog pth.m4

  Log:
    Let AC_CHECK_PTH use "pth-config --libs --all" instead of just
    "pth-config --libs" to allow it to work under platforms like
    Solaris where additional libraries are required.

  Summary:
    Revision    Changes     Path
    1.643       +7  -0      ossp-pkg/pth/ChangeLog
    1.17        +2  -2      ossp-pkg/pth/pth.m4
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.642 -r1.643 ChangeLog
  --- ossp-pkg/pth/ChangeLog	22 Nov 2005 07:33:45 -0000	1.642
  +++ ossp-pkg/pth/ChangeLog	8 Jun 2006 17:48:23 -0000	1.643
  @@ -19,6 +19,13 @@
        / __/ | |_| |
     __|_____(_)___/_________________________________________________________
                     
  +  Changes between 2.0.6 and 2.0.7 (22-Nov-2005 to 08-Jun-2006)
  +
  +   *) Let AC_CHECK_PTH use "pth-config --libs --all" instead of just
  +      "pth-config --libs" to allow it to work under platforms like
  +      Solaris where additional libraries are required.
  +      [Ralf S. Engelschall]
  +
     Changes between 2.0.5 and 2.0.6 (05-Oct-2005 to 22-Nov-2005)
   
      *) Add a missing "break" in pth_attr.c:pth_attr_ctrl().
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth.m4
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 pth.m4
  --- ossp-pkg/pth/pth.m4	18 Feb 2005 20:36:48 -0000	1.16
  +++ ossp-pkg/pth/pth.m4	8 Jun 2006 17:48:23 -0000	1.17
  @@ -120,7 +120,7 @@
               _pth_cppflags=`pth-config --cflags`
               _pth_cflags=`pth-config --cflags`
               _pth_ldflags=`pth-config --ldflags`
  -            _pth_libs=`pth-config --libs`
  +            _pth_libs=`pth-config --libs --all`
           fi
       elif test -d "$with_pth"; then
           with_pth=`echo $with_pth | sed -e 's;/*$;;'`
  @@ -161,7 +161,7 @@
                           _pth_cppflags=`$_dir/pth-config --cflags`
                           _pth_cflags=`$_dir/pth-config --cflags`
                           _pth_ldflags=`$_dir/pth-config --ldflags`
  -                        _pth_libs=`$_dir/pth-config --libs`
  +                        _pth_libs=`$_dir/pth-config --libs --all`
                           _pth_found=yes
                           break
                       fi
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jun  8 19:54:59 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 9C6097533F2; Thu,  8 Jun 2006 19:54:59 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog Makefile.in README aclocal.m4 conf...
Message-Id: <20060608175459.9C6097533F2@mail.ossp.org>
Date: Thu,  8 Jun 2006 19:54:59 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Jun-2006 19:54:59
  Branch: HEAD                             Handle: 2006060818545103

  Modified files:
    ossp-pkg/pth            ChangeLog Makefile.in README aclocal.m4
                            config.param configure.ac devtool.func
                            pth-config.in pth-config.pod pth.h.in pth.m4
                            pth.pod pth.spec pth_acmac.h.in pth_attr.c
                            pth_cancel.c pth_clean.c pth_compat.c pth_data.c
                            pth_debug.c pth_errno.c pth_event.c pth_ext.c
                            pth_fork.c pth_high.c pth_lib.c pth_mctx.c
                            pth_msg.c pth_p.h.in pth_pqueue.c pth_ring.c
                            pth_sched.c pth_string.c pth_sync.c pth_syscall.c
                            pth_tcb.c pth_time.c pth_uctx.c pth_util.c
                            pthread-config.in pthread-config.pod pthread.c
                            pthread.h.in pthread.pod striptease.mk
                            striptease.pl test_common.c test_common.h
                            test_httpd.c test_misc.c test_mp.c test_philo.c
                            test_pthread.c test_select.c test_sfio.c
                            test_sig.c test_std.c test_uctx.c

  Log:
    Adjusted all copyright messages for new year 2006

  Summary:
    Revision    Changes     Path
    1.644       +3  -0      ossp-pkg/pth/ChangeLog
    1.156       +1  -1      ossp-pkg/pth/Makefile.in
    1.211       +1  -1      ossp-pkg/pth/README
    1.105       +1  -1      ossp-pkg/pth/aclocal.m4
    1.24        +1  -1      ossp-pkg/pth/config.param
    1.16        +2  -2      ossp-pkg/pth/configure.ac
    1.7         +1  -1      ossp-pkg/pth/devtool.func
    1.28        +1  -1      ossp-pkg/pth/pth-config.in
    1.24        +1  -1      ossp-pkg/pth/pth-config.pod
    1.146       +1  -1      ossp-pkg/pth/pth.h.in
    1.18        +1  -1      ossp-pkg/pth/pth.m4
    1.167       +1  -1      ossp-pkg/pth/pth.pod
    1.14        +1  -1      ossp-pkg/pth/pth.spec
    1.12        +1  -1      ossp-pkg/pth/pth_acmac.h.in
    1.23        +1  -1      ossp-pkg/pth/pth_attr.c
    1.30        +1  -1      ossp-pkg/pth/pth_cancel.c
    1.21        +1  -1      ossp-pkg/pth/pth_clean.c
    1.13        +1  -1      ossp-pkg/pth/pth_compat.c
    1.34        +1  -1      ossp-pkg/pth/pth_data.c
    1.32        +1  -1      ossp-pkg/pth/pth_debug.c
    1.28        +1  -1      ossp-pkg/pth/pth_errno.c
    1.66        +1  -1      ossp-pkg/pth/pth_event.c
    1.15        +1  -1      ossp-pkg/pth/pth_ext.c
    1.18        +1  -1      ossp-pkg/pth/pth_fork.c
    1.110       +1  -1      ossp-pkg/pth/pth_high.c
    1.61        +1  -1      ossp-pkg/pth/pth_lib.c
    1.62        +1  -1      ossp-pkg/pth/pth_mctx.c
    1.30        +1  -1      ossp-pkg/pth/pth_msg.c
    1.39        +1  -1      ossp-pkg/pth/pth_p.h.in
    1.34        +1  -1      ossp-pkg/pth/pth_pqueue.c
    1.27        +1  -1      ossp-pkg/pth/pth_ring.c
    1.94        +1  -1      ossp-pkg/pth/pth_sched.c
    1.15        +1  -1      ossp-pkg/pth/pth_string.c
    1.42        +1  -1      ossp-pkg/pth/pth_sync.c
    1.34        +1  -1      ossp-pkg/pth/pth_syscall.c
    1.44        +1  -1      ossp-pkg/pth/pth_tcb.c
    1.31        +1  -1      ossp-pkg/pth/pth_time.c
    1.6         +1  -1      ossp-pkg/pth/pth_uctx.c
    1.26        +1  -1      ossp-pkg/pth/pth_util.c
    1.24        +1  -1      ossp-pkg/pth/pthread-config.in
    1.20        +1  -1      ossp-pkg/pth/pthread-config.pod
    1.68        +1  -1      ossp-pkg/pth/pthread.c
    1.71        +1  -1      ossp-pkg/pth/pthread.h.in
    1.27        +1  -1      ossp-pkg/pth/pthread.pod
    1.11        +1  -1      ossp-pkg/pth/striptease.mk
    1.19        +2  -2      ossp-pkg/pth/striptease.pl
    1.18        +1  -1      ossp-pkg/pth/test_common.c
    1.11        +1  -1      ossp-pkg/pth/test_common.h
    1.56        +1  -1      ossp-pkg/pth/test_httpd.c
    1.37        +1  -1      ossp-pkg/pth/test_misc.c
    1.46        +1  -1      ossp-pkg/pth/test_mp.c
    1.23        +1  -1      ossp-pkg/pth/test_philo.c
    1.18        +1  -1      ossp-pkg/pth/test_pthread.c
    1.19        +1  -1      ossp-pkg/pth/test_select.c
    1.15        +1  -1      ossp-pkg/pth/test_sfio.c
    1.23        +1  -1      ossp-pkg/pth/test_sig.c
    1.21        +1  -1      ossp-pkg/pth/test_std.c
    1.5         +1  -1      ossp-pkg/pth/test_uctx.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.643 -r1.644 ChangeLog
  --- ossp-pkg/pth/ChangeLog	8 Jun 2006 17:48:23 -0000	1.643
  +++ ossp-pkg/pth/ChangeLog	8 Jun 2006 17:54:51 -0000	1.644
  @@ -26,6 +26,9 @@
         Solaris where additional libraries are required.
         [Ralf S. Engelschall]
   
  +   *) Adjusted all copyright messages for new year 2006.
  +      [Ralf S. Engelschall]
  +
     Changes between 2.0.5 and 2.0.6 (05-Oct-2005 to 22-Nov-2005)
   
      *) Add a missing "break" in pth_attr.c:pth_attr_ctrl().
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.155 -r1.156 Makefile.in
  --- ossp-pkg/pth/Makefile.in	31 Dec 2004 19:34:44 -0000	1.155
  +++ ossp-pkg/pth/Makefile.in	8 Jun 2006 17:54:51 -0000	1.156
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/README
  ============================================================================
  $ cvs diff -u -r1.210 -r1.211 README
  --- ossp-pkg/pth/README	22 Nov 2005 07:33:45 -0000	1.210
  +++ ossp-pkg/pth/README	8 Jun 2006 17:54:51 -0000	1.211
  @@ -54,7 +54,7 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   
     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.104 -r1.105 aclocal.m4
  --- ossp-pkg/pth/aclocal.m4	31 Dec 2004 19:34:44 -0000	1.104
  +++ ossp-pkg/pth/aclocal.m4	8 Jun 2006 17:54:51 -0000	1.105
  @@ -1,6 +1,6 @@
   dnl ##
   dnl ##  GNU Pth - The GNU Portable Threads
  -dnl ##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##
   dnl ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   dnl ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/config.param
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 config.param
  --- ossp-pkg/pth/config.param	31 Dec 2004 19:34:44 -0000	1.23
  +++ ossp-pkg/pth/config.param	8 Jun 2006 17:54:51 -0000	1.24
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/configure.ac
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 configure.ac
  --- ossp-pkg/pth/configure.ac	31 Dec 2004 19:34:44 -0000	1.15
  +++ ossp-pkg/pth/configure.ac	8 Jun 2006 17:54:51 -0000	1.16
  @@ -1,6 +1,6 @@
   dnl ##
   dnl ##  GNU Pth - The GNU Portable Threads
  -dnl ##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##
   dnl ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   dnl ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ -42,7 +42,7 @@
   AC_HEADLINE(dnl
   GNU Pth, Portable Threads, dnl
   PTH_VERSION, pth_vers.c, dnl
  -[Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>])
  +[Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>])
   AC_CONFIG_PARAM(config.param)
   AC_CONFIG_HEADER(pth_acdef.h)dnl
   AC_PREFIX_DEFAULT(/usr/local)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/devtool.func
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 devtool.func
  --- ossp-pkg/pth/devtool.func	31 Dec 2004 19:34:44 -0000	1.6
  +++ ossp-pkg/pth/devtool.func	8 Jun 2006 17:54:51 -0000	1.7
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2006 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   devtool_require () {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth-config.in
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 pth-config.in
  --- ossp-pkg/pth/pth-config.in	31 Dec 2004 19:34:44 -0000	1.27
  +++ ossp-pkg/pth/pth-config.in	8 Jun 2006 17:54:51 -0000	1.28
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth-config.pod
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 pth-config.pod
  --- ossp-pkg/pth/pth-config.pod	31 Dec 2004 19:34:44 -0000	1.23
  +++ ossp-pkg/pth/pth-config.pod	8 Jun 2006 17:54:51 -0000	1.24
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth.h.in
  ============================================================================
  $ cvs diff -u -r1.145 -r1.146 pth.h.in
  --- ossp-pkg/pth/pth.h.in	31 Dec 2004 19:34:44 -0000	1.145
  +++ ossp-pkg/pth/pth.h.in	8 Jun 2006 17:54:52 -0000	1.146
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth.m4
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 pth.m4
  --- ossp-pkg/pth/pth.m4	8 Jun 2006 17:48:23 -0000	1.17
  +++ ossp-pkg/pth/pth.m4	8 Jun 2006 17:54:52 -0000	1.18
  @@ -1,6 +1,6 @@
   dnl ##
   dnl ##  GNU Pth - The GNU Portable Threads
  -dnl ##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##
   dnl ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   dnl ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth.pod
  ============================================================================
  $ cvs diff -u -r1.166 -r1.167 pth.pod
  --- ossp-pkg/pth/pth.pod	31 Dec 2004 19:34:44 -0000	1.166
  +++ ossp-pkg/pth/pth.pod	8 Jun 2006 17:54:52 -0000	1.167
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth.spec
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 pth.spec
  --- ossp-pkg/pth/pth.spec	31 Dec 2004 19:34:45 -0000	1.13
  +++ ossp-pkg/pth/pth.spec	8 Jun 2006 17:54:52 -0000	1.14
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 2000-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2006 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_acmac.h.in
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 pth_acmac.h.in
  --- ossp-pkg/pth/pth_acmac.h.in	31 Dec 2004 19:34:45 -0000	1.11
  +++ ossp-pkg/pth/pth_acmac.h.in	8 Jun 2006 17:54:52 -0000	1.12
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_attr.c
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 pth_attr.c
  --- ossp-pkg/pth/pth_attr.c	22 Nov 2005 07:26:43 -0000	1.22
  +++ ossp-pkg/pth/pth_attr.c	8 Jun 2006 17:54:52 -0000	1.23
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_cancel.c
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 pth_cancel.c
  --- ossp-pkg/pth/pth_cancel.c	31 Dec 2004 19:34:45 -0000	1.29
  +++ ossp-pkg/pth/pth_cancel.c	8 Jun 2006 17:54:52 -0000	1.30
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_clean.c
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 pth_clean.c
  --- ossp-pkg/pth/pth_clean.c	31 Dec 2004 19:34:45 -0000	1.20
  +++ ossp-pkg/pth/pth_clean.c	8 Jun 2006 17:54:52 -0000	1.21
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_compat.c
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 pth_compat.c
  --- ossp-pkg/pth/pth_compat.c	31 Dec 2004 19:34:45 -0000	1.12
  +++ ossp-pkg/pth/pth_compat.c	8 Jun 2006 17:54:52 -0000	1.13
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_data.c
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 pth_data.c
  --- ossp-pkg/pth/pth_data.c	31 Dec 2004 19:34:45 -0000	1.33
  +++ ossp-pkg/pth/pth_data.c	8 Jun 2006 17:54:52 -0000	1.34
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_debug.c
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 pth_debug.c
  --- ossp-pkg/pth/pth_debug.c	31 Dec 2004 19:34:45 -0000	1.31
  +++ ossp-pkg/pth/pth_debug.c	8 Jun 2006 17:54:52 -0000	1.32
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_errno.c
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 pth_errno.c
  --- ossp-pkg/pth/pth_errno.c	31 Dec 2004 19:34:45 -0000	1.27
  +++ ossp-pkg/pth/pth_errno.c	8 Jun 2006 17:54:52 -0000	1.28
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_event.c
  ============================================================================
  $ cvs diff -u -r1.65 -r1.66 pth_event.c
  --- ossp-pkg/pth/pth_event.c	31 Dec 2004 19:34:45 -0000	1.65
  +++ ossp-pkg/pth/pth_event.c	8 Jun 2006 17:54:52 -0000	1.66
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_ext.c
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 pth_ext.c
  --- ossp-pkg/pth/pth_ext.c	31 Dec 2004 19:34:45 -0000	1.14
  +++ ossp-pkg/pth/pth_ext.c	8 Jun 2006 17:54:52 -0000	1.15
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_fork.c
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 pth_fork.c
  --- ossp-pkg/pth/pth_fork.c	31 Dec 2004 19:34:45 -0000	1.17
  +++ ossp-pkg/pth/pth_fork.c	8 Jun 2006 17:54:52 -0000	1.18
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_high.c
  ============================================================================
  $ cvs diff -u -r1.109 -r1.110 pth_high.c
  --- ossp-pkg/pth/pth_high.c	31 Dec 2004 19:34:45 -0000	1.109
  +++ ossp-pkg/pth/pth_high.c	8 Jun 2006 17:54:53 -0000	1.110
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_lib.c
  ============================================================================
  $ cvs diff -u -r1.60 -r1.61 pth_lib.c
  --- ossp-pkg/pth/pth_lib.c	12 Oct 2005 08:14:21 -0000	1.60
  +++ ossp-pkg/pth/pth_lib.c	8 Jun 2006 17:54:53 -0000	1.61
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_mctx.c
  ============================================================================
  $ cvs diff -u -r1.61 -r1.62 pth_mctx.c
  --- ossp-pkg/pth/pth_mctx.c	31 Dec 2004 19:34:45 -0000	1.61
  +++ ossp-pkg/pth/pth_mctx.c	8 Jun 2006 17:54:53 -0000	1.62
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_msg.c
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 pth_msg.c
  --- ossp-pkg/pth/pth_msg.c	31 Dec 2004 19:34:45 -0000	1.29
  +++ ossp-pkg/pth/pth_msg.c	8 Jun 2006 17:54:53 -0000	1.30
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_p.h.in
  ============================================================================
  $ cvs diff -u -r1.38 -r1.39 pth_p.h.in
  --- ossp-pkg/pth/pth_p.h.in	31 Dec 2004 19:34:45 -0000	1.38
  +++ ossp-pkg/pth/pth_p.h.in	8 Jun 2006 17:54:53 -0000	1.39
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_pqueue.c
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 pth_pqueue.c
  --- ossp-pkg/pth/pth_pqueue.c	31 Dec 2004 19:34:45 -0000	1.33
  +++ ossp-pkg/pth/pth_pqueue.c	8 Jun 2006 17:54:53 -0000	1.34
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_ring.c
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 pth_ring.c
  --- ossp-pkg/pth/pth_ring.c	31 Dec 2004 19:34:45 -0000	1.26
  +++ ossp-pkg/pth/pth_ring.c	8 Jun 2006 17:54:53 -0000	1.27
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_sched.c
  ============================================================================
  $ cvs diff -u -r1.93 -r1.94 pth_sched.c
  --- ossp-pkg/pth/pth_sched.c	31 Dec 2004 19:34:45 -0000	1.93
  +++ ossp-pkg/pth/pth_sched.c	8 Jun 2006 17:54:53 -0000	1.94
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_string.c
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 pth_string.c
  --- ossp-pkg/pth/pth_string.c	18 Feb 2005 21:45:36 -0000	1.14
  +++ ossp-pkg/pth/pth_string.c	8 Jun 2006 17:54:53 -0000	1.15
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_sync.c
  ============================================================================
  $ cvs diff -u -r1.41 -r1.42 pth_sync.c
  --- ossp-pkg/pth/pth_sync.c	31 Dec 2004 19:34:45 -0000	1.41
  +++ ossp-pkg/pth/pth_sync.c	8 Jun 2006 17:54:53 -0000	1.42
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_syscall.c
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 pth_syscall.c
  --- ossp-pkg/pth/pth_syscall.c	31 Dec 2004 19:34:45 -0000	1.33
  +++ ossp-pkg/pth/pth_syscall.c	8 Jun 2006 17:54:53 -0000	1.34
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_tcb.c
  ============================================================================
  $ cvs diff -u -r1.43 -r1.44 pth_tcb.c
  --- ossp-pkg/pth/pth_tcb.c	31 Dec 2004 19:34:45 -0000	1.43
  +++ ossp-pkg/pth/pth_tcb.c	8 Jun 2006 17:54:53 -0000	1.44
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_time.c
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 pth_time.c
  --- ossp-pkg/pth/pth_time.c	31 Dec 2004 19:34:45 -0000	1.30
  +++ ossp-pkg/pth/pth_time.c	8 Jun 2006 17:54:53 -0000	1.31
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_uctx.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 pth_uctx.c
  --- ossp-pkg/pth/pth_uctx.c	31 Dec 2004 19:34:45 -0000	1.5
  +++ ossp-pkg/pth/pth_uctx.c	8 Jun 2006 17:54:53 -0000	1.6
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_util.c
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 pth_util.c
  --- ossp-pkg/pth/pth_util.c	31 Dec 2004 19:34:45 -0000	1.25
  +++ ossp-pkg/pth/pth_util.c	8 Jun 2006 17:54:53 -0000	1.26
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pthread-config.in
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 pthread-config.in
  --- ossp-pkg/pth/pthread-config.in	31 Dec 2004 19:34:45 -0000	1.23
  +++ ossp-pkg/pth/pthread-config.in	8 Jun 2006 17:54:54 -0000	1.24
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pthread-config.pod
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 pthread-config.pod
  --- ossp-pkg/pth/pthread-config.pod	31 Dec 2004 19:34:45 -0000	1.19
  +++ ossp-pkg/pth/pthread-config.pod	8 Jun 2006 17:54:54 -0000	1.20
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pthread.c
  ============================================================================
  $ cvs diff -u -r1.67 -r1.68 pthread.c
  --- ossp-pkg/pth/pthread.c	31 Dec 2004 19:34:45 -0000	1.67
  +++ ossp-pkg/pth/pthread.c	8 Jun 2006 17:54:54 -0000	1.68
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pthread.h.in
  ============================================================================
  $ cvs diff -u -r1.70 -r1.71 pthread.h.in
  --- ossp-pkg/pth/pthread.h.in	31 Dec 2004 19:34:45 -0000	1.70
  +++ ossp-pkg/pth/pthread.h.in	8 Jun 2006 17:54:54 -0000	1.71
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pthread.pod
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 pthread.pod
  --- ossp-pkg/pth/pthread.pod	31 Dec 2004 19:34:45 -0000	1.26
  +++ ossp-pkg/pth/pthread.pod	8 Jun 2006 17:54:54 -0000	1.27
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/striptease.mk
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 striptease.mk
  --- ossp-pkg/pth/striptease.mk	31 Dec 2004 19:34:45 -0000	1.10
  +++ ossp-pkg/pth/striptease.mk	8 Jun 2006 17:54:54 -0000	1.11
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/striptease.pl
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 striptease.pl
  --- ossp-pkg/pth/striptease.pl	31 Dec 2004 19:34:45 -0000	1.18
  +++ ossp-pkg/pth/striptease.pl	8 Jun 2006 17:54:54 -0000	1.19
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ -89,7 +89,7 @@
   $pth_c = <<'EOT';
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_common.c
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 test_common.c
  --- ossp-pkg/pth/test_common.c	31 Dec 2004 19:34:45 -0000	1.17
  +++ ossp-pkg/pth/test_common.c	8 Jun 2006 17:54:54 -0000	1.18
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_common.h
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 test_common.h
  --- ossp-pkg/pth/test_common.h	31 Dec 2004 19:34:45 -0000	1.10
  +++ ossp-pkg/pth/test_common.h	8 Jun 2006 17:54:54 -0000	1.11
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_httpd.c
  ============================================================================
  $ cvs diff -u -r1.55 -r1.56 test_httpd.c
  --- ossp-pkg/pth/test_httpd.c	31 Dec 2004 19:34:45 -0000	1.55
  +++ ossp-pkg/pth/test_httpd.c	8 Jun 2006 17:54:54 -0000	1.56
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_misc.c
  ============================================================================
  $ cvs diff -u -r1.36 -r1.37 test_misc.c
  --- ossp-pkg/pth/test_misc.c	31 Dec 2004 19:34:45 -0000	1.36
  +++ ossp-pkg/pth/test_misc.c	8 Jun 2006 17:54:54 -0000	1.37
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_mp.c
  ============================================================================
  $ cvs diff -u -r1.45 -r1.46 test_mp.c
  --- ossp-pkg/pth/test_mp.c	31 Dec 2004 19:34:45 -0000	1.45
  +++ ossp-pkg/pth/test_mp.c	8 Jun 2006 17:54:54 -0000	1.46
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_philo.c
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 test_philo.c
  --- ossp-pkg/pth/test_philo.c	31 Dec 2004 19:34:45 -0000	1.22
  +++ ossp-pkg/pth/test_philo.c	8 Jun 2006 17:54:54 -0000	1.23
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_pthread.c
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 test_pthread.c
  --- ossp-pkg/pth/test_pthread.c	31 Dec 2004 19:34:45 -0000	1.17
  +++ ossp-pkg/pth/test_pthread.c	8 Jun 2006 17:54:54 -0000	1.18
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_select.c
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 test_select.c
  --- ossp-pkg/pth/test_select.c	31 Dec 2004 19:34:45 -0000	1.18
  +++ ossp-pkg/pth/test_select.c	8 Jun 2006 17:54:54 -0000	1.19
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_sfio.c
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 test_sfio.c
  --- ossp-pkg/pth/test_sfio.c	31 Dec 2004 19:34:45 -0000	1.14
  +++ ossp-pkg/pth/test_sfio.c	8 Jun 2006 17:54:54 -0000	1.15
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_sig.c
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 test_sig.c
  --- ossp-pkg/pth/test_sig.c	31 Dec 2004 19:34:45 -0000	1.22
  +++ ossp-pkg/pth/test_sig.c	8 Jun 2006 17:54:54 -0000	1.23
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_std.c
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 test_std.c
  --- ossp-pkg/pth/test_std.c	31 Dec 2004 19:34:45 -0000	1.20
  +++ ossp-pkg/pth/test_std.c	8 Jun 2006 17:54:54 -0000	1.21
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_uctx.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 test_uctx.c
  --- ossp-pkg/pth/test_uctx.c	31 Dec 2004 19:34:45 -0000	1.4
  +++ ossp-pkg/pth/test_uctx.c	8 Jun 2006 17:54:54 -0000	1.5
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jun  8 19:56:21 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 325AB753494; Thu,  8 Jun 2006 19:56:21 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog devtool.conf
Message-Id: <20060608175621.325AB753494@mail.ossp.org>
Date: Thu,  8 Jun 2006 19:56:21 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Jun-2006 19:56:21
  Branch: HEAD                             Handle: 2006060818562000

  Modified files:
    ossp-pkg/pth            ChangeLog devtool.conf

  Log:
    Upgraded build environment from GNU shtool 2.0.3 to 2.0.6
    and from GNU libtool 1.5.20 to 1.5.22.

  Summary:
    Revision    Changes     Path
    1.645       +4  -0      ossp-pkg/pth/ChangeLog
    1.21        +2  -2      ossp-pkg/pth/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.644 -r1.645 ChangeLog
  --- ossp-pkg/pth/ChangeLog	8 Jun 2006 17:54:51 -0000	1.644
  +++ ossp-pkg/pth/ChangeLog	8 Jun 2006 17:56:20 -0000	1.645
  @@ -21,6 +21,10 @@
                     
     Changes between 2.0.6 and 2.0.7 (22-Nov-2005 to 08-Jun-2006)
   
  +   *) Upgraded build environment from GNU shtool 2.0.3 to 2.0.6
  +      and from GNU libtool 1.5.20 to 1.5.22.
  +      [Ralf S. Engelschall]
  +
      *) Let AC_CHECK_PTH use "pth-config --libs --all" instead of just
         "pth-config --libs" to allow it to work under platforms like
         Solaris where additional libraries are required.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 devtool.conf
  --- ossp-pkg/pth/devtool.conf	2 Oct 2005 16:38:37 -0000	1.20
  +++ ossp-pkg/pth/devtool.conf	8 Jun 2006 17:56:20 -0000	1.21
  @@ -3,8 +3,8 @@
   ##
   
   %autogen
  -    @autogen shtool   2.0.3  "2.0.*" echo version scpp mkdir install fixperm tarball
  -    @autogen libtool  1.5.20 "1.5*"
  +    @autogen shtool   2.0.6  "2.0.*" echo version scpp mkdir install fixperm tarball
  +    @autogen libtool  1.5.22 "1.5*"
       @autogen autoconf 2.59   "2.5*"
   
   %autoclean
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jun  8 20:02:25 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 7FC0675290B; Thu,  8 Jun 2006 20:02:25 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ HISTORY
Message-Id: <20060608180225.7FC0675290B@mail.ossp.org>
Date: Thu,  8 Jun 2006 20:02:25 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Jun-2006 20:02:25
  Branch: HEAD                             Handle: 2006060819022400

  Modified files:
    ossp-pkg/pth            HISTORY

  Log:
    complete history of GNU Pth

  Summary:
    Revision    Changes     Path
    1.13        +8  -0      ossp-pkg/pth/HISTORY
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/HISTORY
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 HISTORY
  --- ossp-pkg/pth/HISTORY	1 Jan 2003 15:49:11 -0000	1.12
  +++ ossp-pkg/pth/HISTORY	8 Jun 2006 18:02:24 -0000	1.13
  @@ -99,4 +99,12 @@
     07-Nov-2002  2.0b0         alpha
     08-Nov-2002  2.0b1         alpha
     04-Dec-2002  2.0b2         alpha
  +  17-Feb-2003  2.0.0         release
  +  13-Jul-2004  2.0.1         release
  +  12-Sep-2004  2.0.2         release
  +  03-Dec-2004  2.0.3         release
  +  18-Feb-2005  2.0.4         release
  +  05-Oct-2005  2.0.5         release
  +  22-Nov-2005  2.0.6         release
  +  08-Jun-2006  2.0.7         release
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jun  8 20:10:20 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 8552C7533F2; Thu,  8 Jun 2006 20:10:20 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ PORTING
Message-Id: <20060608181020.8552C7533F2@mail.ossp.org>
Date: Thu,  8 Jun 2006 20:10:20 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Jun-2006 20:10:20
  Branch: HEAD                             Handle: 2006060819102000

  Modified files:
    ossp-pkg/pth            PORTING

  Log:
    remember my development platform

  Summary:
    Revision    Changes     Path
    1.191       +1  -0      ossp-pkg/pth/PORTING
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/PORTING
  ============================================================================
  $ cvs diff -u -r1.190 -r1.191 PORTING
  --- ossp-pkg/pth/PORTING	18 Feb 2005 21:49:28 -0000	1.190
  +++ ossp-pkg/pth/PORTING	8 Jun 2006 18:10:20 -0000	1.191
  @@ -15,6 +15,7 @@
     (and should automatically adjust to other platforms, of course):
   
     __PLATFORM_ID_________________________ __MACHINE_CONTEXT__ _STACK_ _VERSION_
  +  i386-unknown-freebsd6.1               | mcsc/sc/mc        | down  | 2.0.6
     i386-unknown-freebsd5.3               | mcsc/sc/mc        | down  | 2.0.3
     i386-unknown-freebsd4.10              | sjlj/ssjlj/sas    | down  | 2.0.1
     i386-unknown-freebsd4.7               | sjlj/ssjlj/sas    | down  | 2.0b0
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jun  8 20:14:22 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id C451F7533F2; Thu,  8 Jun 2006 20:14:22 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ README pth_vers.c
Message-Id: <20060608181422.C451F7533F2@mail.ossp.org>
Date: Thu,  8 Jun 2006 20:14:22 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Jun-2006 20:14:22
  Branch: HEAD                             Handle: 2006060819142200

  Modified files:
    ossp-pkg/pth            README pth_vers.c

  Log:
    bump version before release

  Summary:
    Revision    Changes     Path
    1.212       +1  -1      ossp-pkg/pth/README
    1.154       +9  -9      ossp-pkg/pth/pth_vers.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/README
  ============================================================================
  $ cvs diff -u -r1.211 -r1.212 README
  --- ossp-pkg/pth/README	8 Jun 2006 17:54:51 -0000	1.211
  +++ ossp-pkg/pth/README	8 Jun 2006 18:14:22 -0000	1.212
  @@ -5,7 +5,7 @@
     |_|    \__|_| |_|                     the impossible.''
   
     GNU Pth - The GNU Portable Threads
  -  Version 2.0.6 (22-Nov-2005)
  +  Version 2.0.7 (08-Jun-2006)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_vers.c
  ============================================================================
  $ cvs diff -u -r1.153 -r1.154 pth_vers.c
  --- ossp-pkg/pth/pth_vers.c	22 Nov 2005 07:33:45 -0000	1.153
  +++ ossp-pkg/pth/pth_vers.c	8 Jun 2006 18:14:22 -0000	1.154
  @@ -8,7 +8,7 @@
   #ifndef _PTH_VERS_C_
   #define _PTH_VERS_C_
   
  -#define PTH_INTERNAL_VERSION 0x200206
  +#define PTH_INTERNAL_VERSION 0x200207
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _PTH_VERS_C_AS_HEADER_
   
   pth_internal_version_t pth_internal_version = {
  -    0x200206,
  -    "2.0.6",
  -    "2.0.6 (22-Nov-2005)",
  -    "This is GNU Pth, Version 2.0.6 (22-Nov-2005)",
  -    "GNU Pth 2.0.6 (22-Nov-2005)",
  -    "GNU Pth/2.0.6",
  -    "@(#)GNU Pth 2.0.6 (22-Nov-2005)",
  -    "$Id: GNU Pth 2.0.6 (22-Nov-2005) $"
  +    0x200207,
  +    "2.0.7",
  +    "2.0.7 (08-Jun-2006)",
  +    "This is GNU Pth, Version 2.0.7 (08-Jun-2006)",
  +    "GNU Pth 2.0.7 (08-Jun-2006)",
  +    "GNU Pth/2.0.7",
  +    "@(#)GNU Pth 2.0.7 (08-Jun-2006)",
  +    "$Id: GNU Pth 2.0.7 (08-Jun-2006) $"
   };
   
   #endif /* _PTH_VERS_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jun  8 20:17:40 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 918937534A4; Thu,  8 Jun 2006 20:17:40 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20060608181740.918937534A4@mail.ossp.org>
Date: Thu,  8 Jun 2006 20:17:40 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   08-Jun-2006 20:17:40
  Branch: HEAD                             Handle: 2006060819173801

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/pth    index.wml

  Log:
    release GNU Pth 2.0.7

  Summary:
    Revision    Changes     Path
    1.150       +1  -0      ossp-web/new/news.txt
    1.122       +1  -1      ossp-web/pkg/lib/index.wml
    1.17        +2  -2      ossp-web/pkg/lib/pth/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.149 -r1.150 news.txt
  --- ossp-web/new/news.txt	19 Apr 2006 16:40:44 -0000	1.149
  +++ ossp-web/new/news.txt	8 Jun 2006 18:17:38 -0000	1.150
  @@ -1,3 +1,4 @@
  +08-Jun-2006: Released T<GNU pth> 2.0.7
   17-Apr-2006: Released T<GNU shtool> 2.0.6
   13-Mar-2006: Released L<OSSP uuid> 1.4.2
   07-Feb-2006: Released L<OSSP uuid> 1.4.1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.121 -r1.122 index.wml
  --- ossp-web/pkg/lib/index.wml	13 Mar 2006 09:45:44 -0000	1.121
  +++ ossp-web/pkg/lib/index.wml	8 Jun 2006 18:17:39 -0000	1.122
  @@ -15,7 +15,7 @@
   <pkg_list>
     <pkg_item name="pth" longname="GNU pth" type="lib"
               desc="Portable Threads"
  -			done=100 stable=2.0.6 unstable=none>
  +			done=100 stable=2.0.7 unstable=none>
     <pkg_item name="mm" longname="OSSP mm" type="lib"
               desc="Shared Memory Allocation"
   			done=100 stable=1.4.0 unstable=none>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/pth/index.wml
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 index.wml
  --- ossp-web/pkg/lib/pth/index.wml	22 Nov 2005 07:56:48 -0000	1.16
  +++ ossp-web/pkg/lib/pth/index.wml	8 Jun 2006 18:17:39 -0000	1.17
  @@ -61,7 +61,7 @@
   
   <pkg_status
       name="pth" assign="rse"
  -    stable="2.0.6" stable_date="22-Nov-2005"
  +    stable="2.0.7" stable_date="08-Jun-2006"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -72,7 +72,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/pth/
       directory=$(FTP_ROOT_DIR)/pkg/lib/pth/
       files="pth-*.tar.gz" 
  -	stable="pth-2\\\\\\\.0\\\\\\\.6\\\\\\\.tar\.gz" unstable="none">
  +	stable="pth-2\\\\\\\.0\\\\\\\.7\\\\\\\.tar\.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jun 10 09:06:40 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 91CBF7534A5; Sat, 10 Jun 2006 09:06:40 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm/ ChangeLog devtool.conf
Message-Id: <20060610070640.91CBF7534A5@mail.ossp.org>
Date: Sat, 10 Jun 2006 09:06:40 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Jun-2006 09:06:40
  Branch: HEAD                             Handle: 2006061008063900

  Modified files:
    ossp-pkg/mm             ChangeLog devtool.conf

  Log:
    upgrade build environment

  Summary:
    Revision    Changes     Path
    1.53        +2  -1      ossp-pkg/mm/ChangeLog
    1.10        +2  -2      ossp-pkg/mm/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.52 -r1.53 ChangeLog
  --- ossp-pkg/mm/ChangeLog	12 Oct 2005 08:50:24 -0000	1.52
  +++ ossp-pkg/mm/ChangeLog	10 Jun 2006 07:06:39 -0000	1.53
  @@ -11,7 +11,8 @@
   
    Changes between 1.4.0 and 1.4.1 (02-Sep-2005 to 12-Oct-2005)
   
  -  *) Upgraded build environment to GNU shtool 2.0.3
  +  *) Upgraded build environment to GNU shtool 2.0.6 and
  +     GNU libtool 1.5.22
        [Ralf S. Engelschall]
   
    Changes between 1.3.1 and 1.4.0 (12-Sep-2003 to 02-Sep-2005)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 devtool.conf
  --- ossp-pkg/mm/devtool.conf	12 Oct 2005 08:50:24 -0000	1.9
  +++ ossp-pkg/mm/devtool.conf	10 Jun 2006 07:06:39 -0000	1.10
  @@ -3,8 +3,8 @@
   ##
   
   %autogen
  -    @autogen shtool   2.0.3  "2.0.*" all
  -    @autogen libtool  1.5.20 "1.5*"
  +    @autogen shtool   2.0.6  "2.0.*" all
  +    @autogen libtool  1.5.22 "1.5*"
       @autogen autoconf 2.59   "2.5[3-9]*"
   
   %autoclean
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jun 10 09:07:55 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 9244B7534A5; Sat, 10 Jun 2006 09:07:55 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm/ ChangeLog THANKS mm.pod
Message-Id: <20060610070755.9244B7534A5@mail.ossp.org>
Date: Sat, 10 Jun 2006 09:07:55 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Jun-2006 09:07:55
  Branch: HEAD                             Handle: 2006061008075400

  Modified files:
    ossp-pkg/mm             ChangeLog THANKS mm.pod

  Log:
    Fix spelling errors in manual page mm(3)

  Summary:
    Revision    Changes     Path
    1.54        +3  -0      ossp-pkg/mm/ChangeLog
    1.18        +1  -0      ossp-pkg/mm/THANKS
    1.25        +14 -14     ossp-pkg/mm/mm.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.53 -r1.54 ChangeLog
  --- ossp-pkg/mm/ChangeLog	10 Jun 2006 07:06:39 -0000	1.53
  +++ ossp-pkg/mm/ChangeLog	10 Jun 2006 07:07:54 -0000	1.54
  @@ -15,6 +15,9 @@
        GNU libtool 1.5.22
        [Ralf S. Engelschall]
   
  +  *) Fix spelling errors in manual page mm(3).
  +     [Neil Conway <neilc@samurai.com>]
  +
    Changes between 1.3.1 and 1.4.0 (12-Sep-2003 to 02-Sep-2005)
   
     *) Optimize insertion of free memory chunks by merging with
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/THANKS
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 THANKS
  --- ossp-pkg/mm/THANKS	2 Sep 2005 19:58:36 -0000	1.17
  +++ ossp-pkg/mm/THANKS	10 Jun 2006 07:07:54 -0000	1.18
  @@ -21,6 +21,7 @@
       o  Jeff Clark                  <hotwire@hoser.com>
       o  Albert Chin-A-Young         <china@thewrittenword.com>
       o  Eric Cholet                 <cholet@logilune.com>
  +    o  Neil Conway                 <neilc@samurai.com>
       o  Alexander Demenchuk         <alder@untech.com>
       o  Jason Dillon                <jason@planet57.com>
       o  Alexander Farber            <farber@cpan.org>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm.pod
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 mm.pod
  --- ossp-pkg/mm/mm.pod	2 Sep 2005 20:00:46 -0000	1.24
  +++ ossp-pkg/mm/mm.pod	10 Jun 2006 07:07:54 -0000	1.25
  @@ -151,7 +151,7 @@
   type `C<MM *>' as its first argument. This API provides a comfortable way to
   work with small dynamically allocated shared memory chunks inside large
   statically allocated shared memory segments. It is internally based on the
  -I<Low-Level Shared Memory API> for creating the underlaying shared memory
  +I<Low-Level Shared Memory API> for creating the underlying shared memory
   segment.
   
   =item B<Low-Level Shared Memory API>
  @@ -221,7 +221,7 @@
   =item 4.2BSD-style flock(2) on temporary file (FLOCK)
   
   I<Advantage:> exists on a lot of platforms, especially on older Unix
  -derivates.  I<Disadvantage:> needs a temporary file on the filesystem and has
  +derivatives. I<Disadvantage:> needs a temporary file on the filesystem and has
   to re-open file-descriptors to it in each(!) fork(2)'ed child process.
   
   =item SysV IPC semget(2) (IPCSEM)
  @@ -303,7 +303,7 @@
   =item int B<MM_permission>(mode_t I<mode>, uid_t I<owner>, gid_t I<group>);
   
   This sets the filesystem I<mode>, I<owner> and I<group> for the global shared
  -memory pool (has effects only if the underlaying shared memory segment
  +memory pool (has effects only if the underlying shared memory segment
   implementation is actually based on external auxiliary files).  The arguments
   are directly passed through to chmod(2) and chown(2).
   
  @@ -391,7 +391,7 @@
   =item int B<mm_permission>(MM *I<mm>, mode_t I<mode>, uid_t I<owner>, gid_t I<group>);
   
   This sets the filesystem I<mode>, I<owner> and I<group> for the shared memory
  -pool I<mm> (has effects only when the underlaying shared memory segment
  +pool I<mm> (has effects only when the underlying shared memory segment
   implementation is actually based on external auxiliary files).  The arguments
   are directly passed through to chmod(2) and chown(2).
   
  @@ -419,21 +419,21 @@
   returns either a (virtual memory word aligned) pointer to it or C<NULL> in
   case of an error (out of memory). It behaves like the POSIX.1 malloc(3)
   function but instead of allocating memory from the I<heap> it allocates it
  -from the shared memory segment underlaying I<mm>.
  +from the shared memory segment underlying I<mm>.
   
   =item void B<mm_free>(MM *I<mm>, void *I<ptr>);
   
   This deallocates the chunk starting at I<ptr> in the shared memory pool I<mm>.
   It behaves like the POSIX.1 free(3) function but instead of deallocating
   memory from the I<heap> it deallocates it from the shared memory segment
  -underlaying I<mm>.
  +underlying I<mm>.
   
   =item void *B<mm_realloc>(MM *I<mm>, void *I<ptr>, size_t I<size>);
   
   This function reallocates the chunk starting at I<ptr> inside the shared
   memory pool I<mm> with the new size of I<size> bytes.  It behaves like the
   POSIX.1 realloc(3) function but instead of reallocating memory in the
  -I<heap> it reallocates it in the shared memory segment underlaying I<mm>.
  +I<heap> it reallocates it in the shared memory segment underlying I<mm>.
   
   =item void *B<mm_calloc>(MM *I<mm>, size_t I<number>, size_t I<size>);
   
  @@ -498,7 +498,7 @@
   =item int B<mm_core_permission>(void *I<core>, mode_t I<mode>, uid_t I<owner>, gid_t I<group>);
   
   This sets the filesystem I<mode>, I<owner> and I<group> for the shared memory
  -segment I<code> (has effects only when the underlaying shared memory segment
  +segment I<code> (has effects only when the underlying shared memory segment
   implementation is actually based on external auxiliary files).  The arguments
   are directly passed through to chmod(2) and chown(2).
   
  @@ -536,7 +536,7 @@
   =item size_t B<mm_core_align2page>(size_t I<size>);
   
   This is just a utility function which can be used to align the number I<size>
  -to the next virtual memory I<page> boundary used by the underlaying platform.
  +to the next virtual memory I<page> boundary used by the underlying platform.
   The memory page boundary under Unix platforms is usually somewhere between
   2048 and 16384 bytes. You do not have to align the I<size> arguments of other
   B<OSSP mm> library functions yourself, because this is already done internally.
  @@ -546,12 +546,12 @@
   =item size_t B<mm_core_align2word>(size_t I<size>);
   
   This is another utility function which can be used to align the number I<size>
  -to the next virtual memory I<word> boundary used by the underlaying platform.
  +to the next virtual memory I<word> boundary used by the underlying platform.
   The memory word boundary under Unix platforms is usually somewhere between 4
   and 16 bytes.  You do not have to align the I<size> arguments of other B<OSSP mm>
   library functions yourself, because this is already done internally.  This
   function is exported by the B<OSSP mm> library just for convenience reasons in case
  -an application wants to perform simular calculations for other purposes.
  +an application wants to perform similar calculations for other purposes.
   
   =back
   
  @@ -584,16 +584,16 @@
   =head1 RESTRICTIONS
   
   The maximum size of a continuous shared memory segment one can allocate
  -depends on the underlaying platform. This cannot be changed, of course.  But
  +depends on the underlying platform. This cannot be changed, of course.  But
   currently the high-level malloc(3)-style API just uses a single shared memory
  -segment as the underlaying data structure for an C<MM> object which means that
  +segment as the underlying data structure for an C<MM> object which means that
   the maximum amount of memory an C<MM> object represents also depends on the
   platform.
   
   This could be changed in later versions by allowing at least the
   high-level malloc(3)-style API to internally use multiple shared memory
   segments to form the C<MM> object. This way C<MM> objects could have
  -arbitrary sizes, although the maximum size of an allocatable continous
  +arbitrary sizes, although the maximum size of an allocatable continuous
   chunk still is bounded by the maximum size of a shared memory segment.
   
   =head1 SEE ALSO
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jun 10 09:34:56 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 38D587534B1; Sat, 10 Jun 2006 09:34:56 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm/ ChangeLog mm.pod
Message-Id: <20060610073456.38D587534B1@mail.ossp.org>
Date: Sat, 10 Jun 2006 09:34:56 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Jun-2006 09:34:56
  Branch: HEAD                             Handle: 2006061008345401

  Modified files:
    ossp-pkg/mm             ChangeLog mm.pod

  Log:
    Corrected description of mm_sizeof() function

  Summary:
    Revision    Changes     Path
    1.55        +2  -1      ossp-pkg/mm/ChangeLog
    1.26        +6  -5      ossp-pkg/mm/mm.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.54 -r1.55 ChangeLog
  --- ossp-pkg/mm/ChangeLog	10 Jun 2006 07:07:54 -0000	1.54
  +++ ossp-pkg/mm/ChangeLog	10 Jun 2006 07:34:54 -0000	1.55
  @@ -15,7 +15,8 @@
        GNU libtool 1.5.22
        [Ralf S. Engelschall]
   
  -  *) Fix spelling errors in manual page mm(3).
  +  *) Fix spelling errors in manual page mm(3) and corrected
  +     description of mm_sizeof() function.
        [Neil Conway <neilc@samurai.com>]
   
    Changes between 1.3.1 and 1.4.0 (12-Sep-2003 to 02-Sep-2005)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm.pod
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 mm.pod
  --- ossp-pkg/mm/mm.pod	10 Jun 2006 07:07:54 -0000	1.25
  +++ ossp-pkg/mm/mm.pod	10 Jun 2006 07:34:55 -0000	1.26
  @@ -85,7 +85,7 @@
    void    mm_free(MM *mm, void *ptr);
    void   *mm_calloc(MM *mm, size_t number, size_t size);
    char   *mm_strdup(MM *mm, const char *str);
  - size_t  mm_sizeof(void *ptr);
  + size_t  mm_sizeof(MM *mm, void *ptr);
    size_t  mm_maxsize(void);
    size_t  mm_available(MM *mm);
    char   *mm_error(void);
  @@ -452,11 +452,12 @@
   subsequently be used as an argument to the function mm_free(3). If
   insufficient shared memory is available, C<NULL> is returned.
   
  -=item size_t B<mm_sizeof>(const void *I<ptr>);
  +=item size_t B<mm_sizeof>(MM *I<mm>, const void *I<ptr>);
   
  -This function returns the size in bytes of the chunk starting at I<ptr> when
  -I<ptr> was previously allocated with mm_malloc(3). The result is undefined
  -when I<ptr> was not previously allocated with mm_malloc(3).
  +This function returns the size in bytes of the chunk starting at I<ptr>
  +when I<ptr> was previously allocated with mm_malloc(3) inside the
  +shared memory pool I<mm>. The result is undefined when I<ptr> was not
  +previously allocated with mm_malloc(3).
   
   =item size_t B<mm_maxsize>(void);
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jun 10 12:00:22 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 7D56C753497; Sat, 10 Jun 2006 12:00:21 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/sa/ ChangeLog Makefile.in README aclocal.m4 confi...
Message-Id: <20060610100021.7D56C753497@mail.ossp.org>
Date: Sat, 10 Jun 2006 12:00:21 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Jun-2006 12:00:21
  Branch: HEAD                             Handle: 2006061011001700

  Modified files:
    ossp-pkg/sa             ChangeLog Makefile.in README aclocal.m4
                            configure.ac sa-config.in sa.ac sa.c sa.h sa.pc.in
                            sa.pod sa_test.c ts.c ts.h

  Log:
    Adjusted all copyright messages for year 2006

  Summary:
    Revision    Changes     Path
    1.54        +3  -0      ossp-pkg/sa/ChangeLog
    1.19        +2  -2      ossp-pkg/sa/Makefile.in
    1.27        +2  -2      ossp-pkg/sa/README
    1.14        +2  -2      ossp-pkg/sa/aclocal.m4
    1.19        +2  -2      ossp-pkg/sa/configure.ac
    1.9         +2  -2      ossp-pkg/sa/sa-config.in
    1.19        +2  -2      ossp-pkg/sa/sa.ac
    1.92        +2  -2      ossp-pkg/sa/sa.c
    1.45        +2  -2      ossp-pkg/sa/sa.h
    1.2         +2  -2      ossp-pkg/sa/sa.pc.in
    1.46        +2  -2      ossp-pkg/sa/sa.pod
    1.29        +2  -2      ossp-pkg/sa/sa_test.c
    1.13        +2  -2      ossp-pkg/sa/ts.c
    1.6         +2  -2      ossp-pkg/sa/ts.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.53 -r1.54 ChangeLog
  --- ossp-pkg/sa/ChangeLog	28 Feb 2006 21:10:17 -0000	1.53
  +++ ossp-pkg/sa/ChangeLog	10 Jun 2006 10:00:17 -0000	1.54
  @@ -17,6 +17,9 @@
        GNU shtool 2.0.5
        [Ralf S. Engelschall <rse@engelschall.com>]
   
  +   o Adjusted all copyright messages for year 2006.
  +     [Ralf S. Engelschall]
  +
     Changes between 1.2.5 and 1.2.6 (02-Oct-2005 to 03-Oct-2005)
   
      o Removed SA_SYSCALL_GETHOSTBYNAME because gethostbyname(3) cannot
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 Makefile.in
  --- ossp-pkg/sa/Makefile.in	7 Sep 2005 13:01:23 -0000	1.18
  +++ ossp-pkg/sa/Makefile.in	10 Jun 2006 10:00:17 -0000	1.19
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP sa - Socket Abstraction
  -##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2006 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP sa, a socket abstraction library which
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/README
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 README
  --- ossp-pkg/sa/README	3 Oct 2005 08:17:20 -0000	1.26
  +++ ossp-pkg/sa/README	10 Jun 2006 10:00:17 -0000	1.27
  @@ -18,8 +18,8 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2001-2006 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2001-2006 The OSSP Project <http://www.ossp.org/>
     Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   
     This file is part of OSSP sa, a socket abstraction library which
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 aclocal.m4
  --- ossp-pkg/sa/aclocal.m4	24 Jan 2005 15:10:09 -0000	1.13
  +++ ossp-pkg/sa/aclocal.m4	10 Jun 2006 10:00:17 -0000	1.14
  @@ -1,7 +1,7 @@
   dnl ##
   dnl ##  OSSP sa - Socket Abstraction
  -dnl ##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2006 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2006 The OSSP Project <http://www.ossp.org/>
   dnl ##  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   dnl ##
   dnl ##  This file is part of OSSP sa, a socket abstraction library which
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/configure.ac
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 configure.ac
  --- ossp-pkg/sa/configure.ac	7 Sep 2005 13:01:23 -0000	1.18
  +++ ossp-pkg/sa/configure.ac	10 Jun 2006 10:00:17 -0000	1.19
  @@ -1,7 +1,7 @@
   dnl ##
   dnl ##  OSSP sa - Socket Abstraction
  -dnl ##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2006 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2006 The OSSP Project <http://www.ossp.org/>
   dnl ##  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   dnl ##
   dnl ##  This file is part of OSSP sa, a socket abstraction library which
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa-config.in
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 sa-config.in
  --- ossp-pkg/sa/sa-config.in	24 Jan 2005 15:10:09 -0000	1.8
  +++ ossp-pkg/sa/sa-config.in	10 Jun 2006 10:00:17 -0000	1.9
  @@ -1,8 +1,8 @@
   #!/bin/sh
   ##
   ##  OSSP sa - Socket Abstraction
  -##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2006 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP sa, a socket abstraction library which
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.ac
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 sa.ac
  --- ossp-pkg/sa/sa.ac	24 Jan 2005 15:10:09 -0000	1.18
  +++ ossp-pkg/sa/sa.ac	10 Jun 2006 10:00:17 -0000	1.19
  @@ -1,7 +1,7 @@
   dnl ##
   dnl ##  OSSP sa - Socket Abstraction
  -dnl ##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2001-2006 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2001-2006 The OSSP Project <http://www.ossp.org/>
   dnl ##  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   dnl ##
   dnl ##  This file is part of OSSP sa, a socket abstraction library which
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.c
  ============================================================================
  $ cvs diff -u -r1.91 -r1.92 sa.c
  --- ossp-pkg/sa/sa.c	3 Oct 2005 08:16:56 -0000	1.91
  +++ ossp-pkg/sa/sa.c	10 Jun 2006 10:00:17 -0000	1.92
  @@ -1,7 +1,7 @@
   /*
   **  OSSP sa - Socket Abstraction
  -**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2006 The OSSP Project <http://www.ossp.org/>
   **  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP sa, a socket abstraction library which
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.h
  ============================================================================
  $ cvs diff -u -r1.44 -r1.45 sa.h
  --- ossp-pkg/sa/sa.h	3 Oct 2005 08:16:56 -0000	1.44
  +++ ossp-pkg/sa/sa.h	10 Jun 2006 10:00:17 -0000	1.45
  @@ -1,7 +1,7 @@
   /*
   **  OSSP sa - Socket Abstraction
  -**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2006 The OSSP Project <http://www.ossp.org/>
   **  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP sa, a socket abstraction library which
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.pc.in
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 sa.pc.in
  --- ossp-pkg/sa/sa.pc.in	7 Sep 2005 13:01:23 -0000	1.1
  +++ ossp-pkg/sa/sa.pc.in	10 Jun 2006 10:00:17 -0000	1.2
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP sa - Socket Abstraction
  -##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2006 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP sa, a socket abstraction library which
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa.pod
  ============================================================================
  $ cvs diff -u -r1.45 -r1.46 sa.pod
  --- ossp-pkg/sa/sa.pod	3 Oct 2005 08:16:56 -0000	1.45
  +++ ossp-pkg/sa/sa.pod	10 Jun 2006 10:00:17 -0000	1.46
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP sa - Socket Abstraction
  -##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2001-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2006 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP sa, a socket abstraction library which
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/sa_test.c
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 sa_test.c
  --- ossp-pkg/sa/sa_test.c	24 Jan 2005 15:10:09 -0000	1.28
  +++ ossp-pkg/sa/sa_test.c	10 Jun 2006 10:00:17 -0000	1.29
  @@ -1,7 +1,7 @@
   /*
   **  OSSP sa - Socket Abstraction
  -**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2006 The OSSP Project <http://www.ossp.org/>
   **  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP sa, a socket abstraction library which
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ts.c
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 ts.c
  --- ossp-pkg/sa/ts.c	24 Jan 2005 15:10:09 -0000	1.12
  +++ ossp-pkg/sa/ts.c	10 Jun 2006 10:00:17 -0000	1.13
  @@ -1,7 +1,7 @@
   /*
   **  OSSP ts - Test Suite Library
  -**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2006 The OSSP Project <http://www.ossp.org/>
   **  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP ts, a small test suite library which
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/sa/ts.h
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ts.h
  --- ossp-pkg/sa/ts.h	24 Jan 2005 15:10:09 -0000	1.5
  +++ ossp-pkg/sa/ts.h	10 Jun 2006 10:00:17 -0000	1.6
  @@ -1,7 +1,7 @@
   /*
   **  TS - OSSP Test Suite Library
  -**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2006 The OSSP Project <http://www.ossp.org/>
   **  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
   **
   **  This file is part of OSSP TS, a small test suite library which
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jun 10 23:12:37 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 869F47531B4; Sat, 10 Jun 2006 23:12:36 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm/ mm.pod mm_alloc.c
Message-Id: <20060610211236.869F47531B4@mail.ossp.org>
Date: Sat, 10 Jun 2006 23:12:36 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Jun-2006 23:12:36
  Branch: HEAD                             Handle: 2006061022123500

  Modified files:
    ossp-pkg/mm             mm.pod mm_alloc.c

  Log:
    fix more typos

  Summary:
    Revision    Changes     Path
    1.27        +1  -1      ossp-pkg/mm/mm.pod
    1.23        +1  -1      ossp-pkg/mm/mm_alloc.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm.pod
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 mm.pod
  --- ossp-pkg/mm/mm.pod	10 Jun 2006 07:34:55 -0000	1.26
  +++ ossp-pkg/mm/mm.pod	10 Jun 2006 21:12:35 -0000	1.27
  @@ -287,7 +287,7 @@
   
   =head1 API FUNCTIONS
   
  -In the following, all API functions are described in detail The order
  +In the following, all API functions are described in detail. The order
   directly follows the one in the B<SYNOPSIS> section above.
   
   =head2 Global Malloc-Replacement API
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm_alloc.c
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 mm_alloc.c
  --- ossp-pkg/mm/mm_alloc.c	2 Sep 2005 20:00:46 -0000	1.22
  +++ ossp-pkg/mm/mm_alloc.c	10 Jun 2006 21:12:35 -0000	1.23
  @@ -88,7 +88,7 @@
   }
   
   /*
  - * Set permissions on memory pools underlaying disk files
  + * Set permissions on memory pool's underlaying disk files
    */
   int mm_permission(MM *mm, mode_t mode, uid_t owner, gid_t group)
   {
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jun 10 23:14:02 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 99B097533E0; Sat, 10 Jun 2006 23:14:02 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm/ mm.pod
Message-Id: <20060610211402.99B097533E0@mail.ossp.org>
Date: Sat, 10 Jun 2006 23:14:02 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Jun-2006 23:14:02
  Branch: HEAD                             Handle: 2006061022140200

  Modified files:
    ossp-pkg/mm             mm.pod

  Log:
    fix another typo

  Summary:
    Revision    Changes     Path
    1.28        +1  -1      ossp-pkg/mm/mm.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm.pod
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 mm.pod
  --- ossp-pkg/mm/mm.pod	10 Jun 2006 21:12:35 -0000	1.27
  +++ ossp-pkg/mm/mm.pod	10 Jun 2006 21:14:02 -0000	1.28
  @@ -399,7 +399,7 @@
   
   This destroys the complete shared memory pool I<mm> and with it all chunks
   which were allocated in this pool. Additionally any created files on the
  -filesystem corresponding the to shared memory pool are unlinked.
  +filesystem corresponding to the shared memory pool are unlinked.
   
   =item int B<mm_lock>(MM *I<mm>, mm_lock_mode I<mode>);
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jun 10 23:25:56 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id CB0DD7534AB; Sat, 10 Jun 2006 23:25:55 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm/ ChangeLog mm.h mm.pod mm_alloc.c mm_global.c
Message-Id: <20060610212555.CB0DD7534AB@mail.ossp.org>
Date: Sat, 10 Jun 2006 23:25:55 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Jun-2006 23:25:55
  Branch: HEAD                             Handle: 2006061022255401

  Modified files:
    ossp-pkg/mm             ChangeLog mm.h mm.pod mm_alloc.c mm_global.c

  Log:
    Add new API function MM_reset() and mm_reset().
    
    Submitted by: Neil Conway <neilc@samurai.com>

  Summary:
    Revision    Changes     Path
    1.56        +3  -0      ossp-pkg/mm/ChangeLog
    1.31        +2  -0      ossp-pkg/mm/mm.h
    1.29        +14 -0      ossp-pkg/mm/mm.pod
    1.24        +13 -0      ossp-pkg/mm/mm_alloc.c
    1.15        +8  -0      ossp-pkg/mm/mm_global.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.55 -r1.56 ChangeLog
  --- ossp-pkg/mm/ChangeLog	10 Jun 2006 07:34:54 -0000	1.55
  +++ ossp-pkg/mm/ChangeLog	10 Jun 2006 21:25:54 -0000	1.56
  @@ -11,6 +11,9 @@
   
    Changes between 1.4.0 and 1.4.1 (02-Sep-2005 to 12-Oct-2005)
   
  +  *) Add new API function MM_reset() and mm_reset().
  +     [Neil Conway <neilc@samurai.com>]
  +
     *) Upgraded build environment to GNU shtool 2.0.6 and
        GNU libtool 1.5.22
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm.h
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 mm.h
  --- ossp-pkg/mm/mm.h	2 Sep 2005 20:00:46 -0000	1.30
  +++ ossp-pkg/mm/mm.h	10 Jun 2006 21:25:54 -0000	1.31
  @@ -331,6 +331,7 @@
   /* Global Malloc-Replacement API */
   int     MM_create(size_t, const char *);
   int     MM_permission(mode_t, uid_t, gid_t);
  +void    MM_reset(void);
   void    MM_destroy(void);
   int     MM_lock(mm_lock_mode);
   int     MM_unlock(void);
  @@ -347,6 +348,7 @@
   /* Standard Malloc-Style API */
   MM     *mm_create(size_t, const char *);
   int     mm_permission(MM *, mode_t, uid_t, gid_t);
  +void    mm_reset(MM *);
   void    mm_destroy(MM *);
   int     mm_lock(MM *, mm_lock_mode);
   int     mm_unlock(MM *);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm.pod
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 mm.pod
  --- ossp-pkg/mm/mm.pod	10 Jun 2006 21:14:02 -0000	1.28
  +++ ossp-pkg/mm/mm.pod	10 Jun 2006 21:25:54 -0000	1.29
  @@ -60,6 +60,7 @@
   
    int     MM_create(size_t size, const char *file);
    int     MM_permission(mode_t mode, uid_t owner, gid_t group);
  + void    MM_reset(void);
    void    MM_destroy(void);
    int     MM_lock(mm_lock_mode mode);
    int     MM_unlock(void);
  @@ -77,6 +78,7 @@
   
    MM     *mm_create(size_t size, char *file);
    int     mm_permission(MM *mm, mode_t mode, uid_t owner, gid_t group);
  + void    mm_reset(MM *mm);
    void    mm_destroy(MM *mm);
    int     mm_lock(MM *mm, mm_lock_mode mode);
    int     mm_unlock(MM *mm);
  @@ -307,6 +309,12 @@
   implementation is actually based on external auxiliary files).  The arguments
   are directly passed through to chmod(2) and chown(2).
   
  +=item void B<MM_reset>(void);
  +
  +This resets the global shared memory pool: all chunks that have been
  +allocated in the pool are marked as free and are eligible for reuse. The
  +global memory pool itself is not destroyed.
  + 
   =item void B<MM_destroy>(void);
   
   This destroys the global shared memory pool and should be called I<after> all
  @@ -395,6 +403,12 @@
   implementation is actually based on external auxiliary files).  The arguments
   are directly passed through to chmod(2) and chown(2).
   
  +=item void B<mm_reset>(MM *I<mm>);
  +
  +This resets the shared memory pool I<mm>: all chunks that have been
  +allocated in the pool are marked as free and are eligible for reuse. The
  +memory pool itself is not destroyed.
  +
   =item void B<mm_destroy>(MM *I<mm>);
   
   This destroys the complete shared memory pool I<mm> and with it all chunks
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm_alloc.c
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 mm_alloc.c
  --- ossp-pkg/mm/mm_alloc.c	10 Jun 2006 21:12:35 -0000	1.23
  +++ ossp-pkg/mm/mm_alloc.c	10 Jun 2006 21:25:54 -0000	1.24
  @@ -98,6 +98,19 @@
   }
   
   /*
  + * Reset a memory pool.
  + */
  +void mm_reset(MM *mm)
  +{
  +    if (mm == NULL)
  +        return;
  +    mm->mp_offset = SIZEOF_mem_pool;
  +    mm->mp_freechunks.mc_usize = 0;
  +    mm->mp_freechunks.mc_u.mc_next = NULL;
  +    return;
  +}
  +
  +/*
    * Destroy a memory pool
    */
   void mm_destroy(MM *mm)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm_global.c
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 mm_global.c
  --- ossp-pkg/mm/mm_global.c	2 Sep 2005 20:00:46 -0000	1.14
  +++ ossp-pkg/mm/mm_global.c	10 Jun 2006 21:25:55 -0000	1.15
  @@ -66,6 +66,14 @@
       return mm_permission(mm_global, mode, owner, group);
   }
   
  +void MM_reset(void)
  +{
  +    if (mm_global == NULL)
  +        return;
  +    mm_reset(mm_global);
  +    return;
  +}
  +
   void MM_destroy(void)
   {
       if (mm_global == NULL)
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jun 11 09:06:28 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 031D575349A; Sun, 11 Jun 2006 09:06:27 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt
Message-Id: <20060611070627.031D575349A@mail.ossp.org>
Date: Sun, 11 Jun 2006 09:06:27 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   11-Jun-2006 09:06:27
  Branch: HEAD                             Handle: 2006061108062600

  Modified files:
    ossp-web/new            news.txt

  Log:
    fix URL

  Summary:
    Revision    Changes     Path
    1.151       +1  -1      ossp-web/new/news.txt
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.150 -r1.151 news.txt
  --- ossp-web/new/news.txt	8 Jun 2006 18:17:38 -0000	1.150
  +++ ossp-web/new/news.txt	11 Jun 2006 07:06:26 -0000	1.151
  @@ -1,4 +1,4 @@
  -08-Jun-2006: Released T<GNU pth> 2.0.7
  +08-Jun-2006: Released L<GNU pth> 2.0.7
   17-Apr-2006: Released T<GNU shtool> 2.0.6
   13-Mar-2006: Released L<OSSP uuid> 1.4.2
   07-Feb-2006: Released L<OSSP uuid> 1.4.1
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jun 12 20:03:00 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 0E86E7528E9; Mon, 12 Jun 2006 20:02:58 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ .cvsignore ChangeLog Makefile.in rse-pmt.fig...
Message-Id: <20060612180258.0E86E7528E9@mail.ossp.org>
Date: Mon, 12 Jun 2006 20:02:58 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Jun-2006 20:02:58
  Branch: HEAD                             Handle: 2006061219025102

  Added files:
    ossp-pkg/pth            rse-pmt.fig rse-pmt.pdf rse-pmt.tex
  Modified files:
    ossp-pkg/pth            .cvsignore ChangeLog Makefile.in rse-pmt.ps

  Log:
    Added LaTeX sources of USENIX paper (rse-pmt.tex, rse-pmt.fig)
    to source tree and add Makefile targets for re-generating outputs
    (rse-pmt.ps, rse-pmt.pdf). This way all GNU Pth related material
    is finally part of the same distribution.

  Summary:
    Revision    Changes     Path
    1.22        +4  -0      ossp-pkg/pth/.cvsignore
    1.646       +8  -0      ossp-pkg/pth/ChangeLog
    1.157       +20 -0      ossp-pkg/pth/Makefile.in
    1.1         +211 -0     ossp-pkg/pth/rse-pmt.fig
    1.1         BLOB        ossp-pkg/pth/rse-pmt.pdf
    1.9         +2272 -1849 ossp-pkg/pth/rse-pmt.ps
    1.1         +1389 -0    ossp-pkg/pth/rse-pmt.tex
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/.cvsignore
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 .cvsignore
  --- ossp-pkg/pth/.cvsignore	3 Nov 2002 09:59:32 -0000	1.21
  +++ ossp-pkg/pth/.cvsignore	12 Jun 2006 18:02:51 -0000	1.22
  @@ -39,3 +39,7 @@
   test_uctx
   test_sig
   test_std
  +rse-pmt.aux
  +rse-pmt.dvi
  +rse-pmt.eps
  +rse-pmt.log
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.645 -r1.646 ChangeLog
  --- ossp-pkg/pth/ChangeLog	8 Jun 2006 17:56:20 -0000	1.645
  +++ ossp-pkg/pth/ChangeLog	12 Jun 2006 18:02:51 -0000	1.646
  @@ -19,6 +19,14 @@
        / __/ | |_| |
     __|_____(_)___/_________________________________________________________
                     
  +  Changes between 2.0.7 and 2.0.9 (07-Jun-2006 to 12-Jun-2006)
  +
  +   *) Added LaTeX sources of USENIX paper (rse-pmt.tex, rse-pmt.fig)
  +      to source tree and add Makefile targets for re-generating outputs
  +      (rse-pmt.ps, rse-pmt.pdf). This way all GNU Pth related material
  +      is finally part of the same distribution.
  +      [Ralf S. Engelschall]
  +
     Changes between 2.0.6 and 2.0.7 (22-Nov-2005 to 08-Jun-2006)
   
      *) Upgraded build environment from GNU shtool 2.0.3 to 2.0.6
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.156 -r1.157 Makefile.in
  --- ossp-pkg/pth/Makefile.in	8 Jun 2006 17:54:51 -0000	1.156
  +++ ossp-pkg/pth/Makefile.in	12 Jun 2006 18:02:52 -0000	1.157
  @@ -73,6 +73,10 @@
   POD2MAN     = pod2man
   GDB         = gdb
   PERL        = perl
  +FIG2DEV     = fig2dev
  +LATEX       = latex
  +DVIPS       = dvips
  +GS          = gs
   
   ##
   ##  ____ TARGET DEFINITIONS _________________________________________
  @@ -214,6 +218,19 @@
   test_pthread: test_pthread.o test_common.o libpthread.la
   	$(LIBTOOL) --mode=link --quiet $(CC) $(LDFLAGS) -o test_pthread test_pthread.o test_common.o libpthread.la $(LIBS)
   
  +#   build paper
  +rse-pmt.eps: rse-pmt.fig
  +	$(FIG2DEV) -L eps -F rse-pmt.fig rse-pmt.eps
  +rse-pmt.aux: rse-pmt.tex rse-pmt.eps
  +	$(LATEX) rse-pmt.tex
  +rse-pmt.dvi: rse-pmt.tex rse-pmt.eps rse-pmt.aux
  +	$(LATEX) rse-pmt.tex
  +rse-pmt.ps: rse-pmt.dvi
  +	$(DVIPS) -o rse-pmt.ps rse-pmt.dvi
  +rse-pmt.pdf: rse-pmt.ps
  +	$(GS) -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 \
  +	      -sOutputFile=rse-pmt.pdf -c .setpdfwrite -f rse-pmt.ps
  +
   #   install the package
   install: all-for-install
   	@$(MAKE) $(MKFLAGS) install-dirs install-pth @INSTALL_PTHREAD@
  @@ -298,11 +315,14 @@
   	$(RM) pthread-config pthread.h
   	$(RM) config.log config.cache config.status
   	$(RM) libtool
  +	$(RM) rse-pmt.aux rse-pmt.log
  +	$(RM) rse-pmt.eps rse-pmt.dvi
   	$(RM) *.bak *~
   
   #   clean the source tree by removing really all generate stuff
   realclean: distclean
   	$(RM) $(TARGET_MANS)
  +	$(RM) rse-pmt.ps
   	./devtool autoclean
   
   #   give hints what to do as the next step
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/rse-pmt.fig
  ============================================================================
  $ cvs diff -u -r0 -r1.1 rse-pmt.fig
  --- /dev/null	2006-06-12 20:02:53 +0200
  +++ rse-pmt.fig	2006-06-12 20:02:54 +0200
  @@ -0,0 +1,211 @@
  +#FIG 3.2
  +Landscape
  +Center
  +Metric
  +Letter  
  +100.00
  +Single
  +-2
  +1200 2
  +6 735 690 945 900
  +2 4 0 2 0 -1 100 0 20 0.000 0 0 2 0 0 5
  +	 930 885 750 885 750 705 930 705 930 885
  +4 0 7 50 0 2 10 0.0000 4 105 75 810 840 1\001
  +-6
  +6 990 675 1215 900
  +2 4 0 2 0 -1 100 0 20 0.000 0 0 2 0 0 5
  +	 1185 885 1005 885 1005 705 1185 705 1185 885
  +4 0 7 50 0 2 10 0.0000 4 105 75 1065 840 2\001
  +-6
  +6 990 1170 1200 1380
  +2 4 0 2 0 -1 100 0 20 0.000 0 0 2 0 0 5
  +	 1185 1365 1005 1365 1005 1185 1185 1185 1185 1365
  +4 0 7 50 0 2 10 0.0000 4 105 75 1065 1320 6\001
  +-6
  +6 1260 1485 1470 1695
  +2 4 0 2 0 -1 100 0 20 0.000 0 0 2 0 0 5
  +	 1455 1680 1275 1680 1275 1500 1455 1500 1455 1680
  +4 0 7 50 0 2 10 0.0000 4 105 75 1335 1635 7\001
  +-6
  +6 1995 1485 2205 1695
  +2 4 0 2 0 -1 100 0 20 0.000 0 0 2 0 0 5
  +	 2190 1680 2010 1680 2010 1500 2190 1500 2190 1680
  +4 0 7 50 0 2 10 0.0000 4 105 75 2070 1635 8\001
  +-6
  +6 1980 495 2205 720
  +2 4 0 2 0 -1 100 0 20 0.000 0 0 2 0 0 5
  +	 2190 705 2010 705 2010 525 2190 525 2190 705
  +4 0 7 50 0 2 10 0.0000 4 105 75 2070 660 4\001
  +-6
  +6 1305 540 1530 765
  +2 4 0 2 0 -1 100 0 20 0.000 0 0 2 0 0 5
  +	 1500 750 1320 750 1320 570 1500 570 1500 750
  +4 0 7 50 0 2 10 0.0000 4 105 75 1380 705 3\001
  +-6
  +6 3060 870 3270 1080
  +2 4 0 2 0 -1 100 0 20 0.000 0 0 2 0 0 5
  +	 3255 1065 3075 1065 3075 885 3255 885 3255 1065
  +4 0 7 50 0 2 10 0.0000 4 105 75 3135 1020 5\001
  +-6
  +6 1995 2085 2205 2295
  +2 4 0 2 0 -1 100 0 20 0.000 0 0 2 0 0 5
  +	 2190 2280 2010 2280 2010 2100 2190 2100 2190 2280
  +4 0 7 50 0 2 10 0.0000 4 105 75 2070 2235 9\001
  +-6
  +6 1995 2625 2205 2835
  +2 4 0 2 0 -1 100 0 20 0.000 0 0 2 0 0 5
  +	 2190 2820 2010 2820 2010 2640 2190 2640 2190 2820
  +4 0 7 50 0 2 10 0.0000 4 105 150 2040 2775 13\001
  +-6
  +6 3030 2490 3240 2700
  +2 4 0 2 0 -1 100 0 20 0.000 0 0 2 0 0 5
  +	 3225 2685 3045 2685 3045 2505 3225 2505 3225 2685
  +4 0 7 50 0 2 10 0.0000 4 105 150 3068 2640 10\001
  +-6
  +6 1500 3210 1710 3420
  +2 4 0 2 0 -1 100 0 20 0.000 0 0 2 0 0 5
  +	 1695 3405 1515 3405 1515 3225 1695 3225 1695 3405
  +4 0 7 50 0 2 10 0.0000 4 105 150 1545 3360 14\001
  +-6
  +6 3300 2490 3510 2700
  +2 4 0 2 0 -1 100 0 20 0.000 0 0 2 0 0 5
  +	 3495 2685 3315 2685 3315 2505 3495 2505 3495 2685
  +4 0 7 50 0 2 10 0.0000 4 105 150 3337 2640 11\001
  +-6
  +6 3030 2745 3240 2955
  +2 4 0 2 0 -1 100 0 20 0.000 0 0 2 0 0 5
  +	 3225 2940 3045 2940 3045 2760 3225 2760 3225 2940
  +4 0 7 50 0 2 10 0.0000 4 105 150 3068 2895 12\001
  +-6
  +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
  +	 630 270 1890 270 1890 3600 630 3600 630 270
  +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
  +	 2340 270 3600 270 3600 1800 2340 1800 2340 270
  +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
  +	 2340 2070 3600 2070 3600 3600 2340 3600 2340 2070
  +2 1 2 1 0 7 50 0 -1 1.000 0 0 -1 0 0 6
  +	 1980 810 2025 720 2070 900 2115 720 2160 900 2205 810
  +2 1 2 1 0 7 50 0 -1 1.000 0 0 7 0 0 6
  +	 1980 1170 2014 1081 2059 1261 2104 1081 2149 1261 2205 1170
  +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 7
  +	1 1 1.00 60.00 120.00
  +	 1260 4586 1980 4593 1980 3690 450 3690 450 630 990 630
  +	 1260 630
  +2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 3
  +	1 1 1.00 60.00 120.00
  +	 1260 630 1260 810 1980 810
  +2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
  +	1 1 1.00 60.00 120.00
  +	 2205 810 2970 810
  +2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
  +	1 1 1.00 60.00 120.00
  +	 2970 810 2970 1170
  +2 1 0 2 0 7 50 0 -1 0.000 0 0 7 0 1 2
  +	1 1 1.00 60.00 120.00
  +	 2205 1170 2970 1170
  +2 1 0 2 0 7 50 0 -1 0.000 0 0 7 0 1 2
  +	1 1 1.00 60.00 120.00
  +	 1260 1170 1980 1170
  +2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
  +	1 1 1.00 60.00 120.00
  +	 1260 1440 2970 1440
  +2 1 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 2
  +	 1260 1170 1260 1440
  +2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 5
  +	1 1 1.00 60.00 120.00
  +	 2970 1440 2970 1890 2250 1890 2250 2520 2970 2520
  +2 1 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 2
  +	 2970 2520 2970 2883
  +2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
  +	1 1 1.00 60.00 120.00
  +	 2970 2891 1245 2883
  +2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 5
  +	1 1 1.00 60.00 120.00
  +	 1260 2880 1260 3150 2070 3150 2062 4773 1245 4781
  +2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 3
  +	1 1 1.00 60.00 120.00
  +	 450 4050 1260 4050 1260 4586
  +2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
  +	1 1 1.00 60.00 120.00
  +	 1252 4773 1260 5220
  +2 1 2 2 0 7 50 0 -1 3.000 0 1 7 1 0 5
  +	1 1 1.00 60.00 120.00
  +	 2970 3150 2970 3690 2250 3690 2250 4230 2970 4230
  +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 3
  +	 630 6300 1890 6300 1890 7290
  +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 1 2
  +	1 1 1.00 60.00 120.00
  +	1 1 1.00 60.00 120.00
  +	 3690 6300 3690 7560
  +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
  +	 2340 6300 3600 6300 3600 7560 2340 7560 2340 6300
  +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
  +	 630 3780 1890 3780 1890 6120 630 6120 630 3780
  +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
  +	 2340 3780 3600 3780 3600 6120 2340 6120 2340 3780
  +2 1 2 2 0 7 50 0 -1 3.000 0 1 7 1 0 4
  +	1 1 1.00 60.00 120.00
  +	 1260 5220 2160 5220 2160 3150 2970 3150
  +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
  +	 630 6300 630 7380
  +2 1 0 1 0 7 50 0 -1 0.000 0 1 -1 0 0 2
  +	 630 6570 900 6300
  +2 1 0 1 0 7 50 0 -1 0.000 0 1 -1 0 0 2
  +	 630 6840 1170 6300
  +2 1 0 1 0 7 50 0 -1 0.000 0 1 -1 0 0 2
  +	 630 7110 1440 6300
  +2 1 0 1 0 7 50 0 -1 0.000 0 1 -1 0 0 2
  +	 630 7380 1710 6300
  +2 1 0 1 0 7 50 0 -1 0.000 0 1 -1 0 0 2
  +	 810 7470 1890 6435
  +2 1 0 1 0 7 50 0 -1 0.000 0 1 -1 0 0 2
  +	 1080 7515 1890 6750
  +2 1 0 1 0 7 50 0 -1 0.000 0 1 -1 0 0 2
  +	 1665 7245 1890 7020
  +2 1 0 1 0 7 50 0 -1 0.000 0 1 -1 0 0 2
  +	 2340 6570 2610 6300
  +2 1 0 1 0 7 50 0 -1 0.000 0 1 -1 0 0 2
  +	 2340 6840 2925 6300
  +2 1 0 1 0 7 50 0 -1 0.000 0 1 -1 0 0 2
  +	 2340 7110 3240 6300
  +2 1 0 1 0 7 50 0 -1 0.000 0 1 -1 0 0 2
  +	 2340 7380 3510 6300
  +2 1 0 1 0 7 50 0 -1 0.000 0 1 -1 0 0 2
  +	 2520 7560 3600 6570
  +2 1 0 1 0 7 50 0 -1 0.000 0 1 -1 0 0 2
  +	 2880 7560 3600 6930
  +2 1 0 1 0 7 50 0 -1 0.000 0 1 -1 0 0 2
  +	 3240 7560 3600 7245
  +2 1 2 2 0 7 50 0 -1 3.000 0 1 7 1 0 2
  +	1 1 1.00 60.00 120.00
  +	 2970 4230 2970 5310
  +2 1 2 2 0 7 50 0 -1 3.000 0 1 7 1 0 2
  +	1 1 1.00 60.00 120.00
  +	 2970 5310 1260 5310
  +2 1 2 2 0 7 50 0 -1 3.000 0 1 7 1 0 3
  +	1 1 1.00 60.00 120.00
  +	 2970 5580 2970 5670 1260 5670
  +2 1 2 2 0 7 50 0 -1 3.000 0 1 7 1 0 3
  +	1 1 1.00 60.00 120.00
  +	 1260 5670 1260 5940 360 5940
  +2 1 2 2 0 7 50 0 -1 3.000 0 1 7 1 0 3
  +	1 1 1.00 60.00 120.00
  +	 1260 5355 1260 5580 2970 5580
  +3 2 0 1 0 7 50 0 -1 0.000 0 0 0 4
  +	 630 7380 1035 7515 1530 7290 1890 7290
  +	 0.000 -1.000 -1.000 0.000
  +4 0 0 50 0 2 10 0.0000 4 150 525 2430 6480 sk_addr\001
  +4 0 0 50 0 2 10 0.0000 4 120 705 720 6480 main stack\001
  +4 0 0 50 0 2 10 0.0000 4 120 330 720 3960 main\001
  +4 0 0 50 0 2 10 0.0000 4 150 1005 2430 3960 sf_addr(sf_arg)\001
  +4 0 0 50 0 2 10 0.0000 4 150 825 2430 2250 mctx_create\001
  +4 0 0 50 0 2 10 0.0000 4 150 825 2430 450 mctx_create\001
  +4 0 0 50 0 2 10 0.0000 4 150 825 720 450 mctx_create\001
  +4 0 0 50 0 2 10 0.0000 4 150 390 3150 2250 _boot\001
  +4 0 0 50 0 2 10 0.0000 4 165 810 2790 585 _trampoline\001
  +4 0 0 50 0 2 10 1.5708 4 165 465 3870 7110 sk_size\001
  +4 0 0 50 0 2 10 0.0000 4 165 810 1350 5175 mctx_switch\001
  +4 0 0 50 0 2 10 0.0000 4 165 810 2385 5445 mctx_switch\001
  +4 0 0 50 0 2 10 0.0000 4 165 810 1350 5535 mctx_switch\001
  +4 0 0 50 0 2 10 0.0000 4 165 810 2385 5805 mctx_switch\001
  +4 0 0 50 0 2 10 0.0000 4 150 825 1305 4725 mctx_create\001
  @@ .
  (cd ossp-pkg/pth && \
   uudecode <<'@@ .' && \
   xdelta patch rse-pmt.pdf.xdelta /dev/null rse-pmt.pdf && \
   rm -f rse-pmt.pdf.xdelta)
  Index: ossp-pkg/pth/rse-pmt.pdf
  ============================================================================
  begin 664 rse-pmt.pdf.xdelta
  M)5A$6C`P-"4````(`!$`$`````````````````````!S:&EE;&$N-S4Y-C`N
  M;G5L;'-H:65L82XW-3DV,"YA;&P?BP@````````#C-HSD"@*H&71MGW;MFW;
  MMFW;MFW;MFW;MFWW?U/U)YIDLE,GWN$BD1<6I6&@988B&;N.*X1BP:?'MS.T
  MA.+FII,VL35S-L=G_>]1I!.UL'8V<<2G$[4V<#81-C&R,S;AY85R<G8T,;"!
  M<L^>T=%*0AE+B*W?>T?AGMW0W]1YH^2KL9[J:EQCM#J"$!/W!`!#1T5'F(9H
  MZ#/W.S5=9:FBO,H6T)\J`,?I[++5\/AX5&39V]MA<W`;^WO\P^OK?*KJ:^^:
  MV]V)D+N+[/*K[M/=_OB-'?];?UIS\WL"P'SO<MRK3CF]#2IS$_[5!NF#]%N3
  M:+OH@M?=^3B]_A6(G!&GF-/%>YTQOW%U>'VU[[5;I#J:WF#YA9N$IIK#;97#
  MQ1DNS;XWHWOH:1K%='D]MJ>-V1Z\G?L%R9.D"FXV8]LN:]XZN^@(`>PZ2VLH
  M@,$E)=XF3:9G%\[!S)@5^4EV=541]47M4Q8-OL/])D`2"Z=!)TI@/YOD#]+9
  MY4%#/87AP]4&,,'5%^,D!R32P9T=:?W2"6T7O6$[NMG0VUHZHU>LQR7]@<'S
  M+*L).[CZ"KNYD+KF'UBK=,9'613J)VXNU>/E'9?)T`EK0HNHYZ(^&1BXF/G@
  M`5"8O&+]G!^VZ5(UZ^,3;_$`+.JVS>FCN;(W\QM*V=QG<?Z$P[7;E*33+RFI
  M:P,'A3$*8N>*6TJNU/K.:HVV>%T\%V54"Z\4J4\NKT=&5W$7`B/1T6D^^4N=
  M=K$.,4I0C2CN2@SFK2O;"=`@RX5()@O<DC:&M!"`(N+[#I'^,<@YF=I\4<HN
  MWA6&<-9C\XX4RFRB>ZAX1C7U6"D5>#^!7*+:B!.=GUH-S9+X24$%BPQP[`+\
  M")``:K/2AWI/Z-@)DQE\'*?&+5JVB*^="K"\.'/R373*(N.N:M#YD1<KNP[K
  M(GBSS5\]SJ15NY[GN][JO2'-KY68^NH;;'N'M43O@G9G\UYAD,MVJ@=4QF`&
  MD`'+!-`*HB;YS,$$TI,5VJXOGE9V`MZ``JQ%^O,BF.OEJ4)ZSY^0(Z[:<K,1
  MSKBE#3CIY9F7((@#5T]LYG0$(C>K1TA`S(;DE;FWL28(O%`!A#&I@;J\WBM"
  M]Z=E:>1NA4(##J*\V3\R>R!CY+-X??075FL?CM6Z!$]K61E:M;($%8+<!)Q<
  M1FUFB'6][W2]ATJM!X]/\KHG,*?MXUK\<;EZZGSY*.W]<_'ZJWK-_?;6<V?_
  M`^GTBNJK`20"-B9XZB()"6V911Z$I]4"SXL1'L$F+".KO?=4<IM+"20=0?)-
  M0,7.!FZ"#V7V?Q&1:K#;#9II)*<&(.3/:#=.=B9W>I:M*.U`_FBD-\;ZT`91
  M=V$<TD3Q]0:P<>O*HL1<)T#W`"VE08]K5NS:"52>@"N!3]1$'EP(D[L4HO>%
  M$MW($=QB[).S4AI-[3@3-4GQ\(:OOT#<P_T$1R*U516T'<3D1%E4R[IL>OU5
  M21:L:PJ,`^FQC2*]\HN^8L-/P&7(`-]IKBHTJ2>S)GDU]Q]_K]NHB$?<K#<.
  MH-OR6KX`(,71#RP#;X*\",:/&4\[/BLR"#HLB^'0W5?TM_'!KYLHYOH448'Q
  M.F?!WQJGJ!N[&>/%6XNE7<H-&N>VH;J]R'\%<!^,%PUFE[/,*VL]KG3YI':!
  MV@QL)KRC>_2*+XL"]2(BLTSM:>(_*-,D%Q3751RU&'`J,/O%\9RAA,L/(,8K
  MUJ,=UEV"8BX9);EA@00@'QU>&<AR"#*4(S/3"8M#9;7[Y:!WN_<"LY#1G)C5
  M?5F4YU`'N`47<GT]>L8%Q4JI![O:T6?R]2>7"\H$2EXS?C9%0KS6-X7S_C2E
  MD(7*Q1(KLY^0M%!BBBF!>$KVD.*9X?+'7/0X$%579P<0:HKJS@MBWZTWEI)B
  M4(1%!HL&1#4IYEJ<#`'ZF@_4;NCZ-OI)IO\&[RS_;-X:9%QK1I,]MFGJ;V@]
  M&RNFP^8L$3%P=LSV9I1B,RDHBH_=%)NA;1&8Y\9(<)#C]/%1CG&>(9*(+N`2
  M@%A0_4-%Z7/=]/=3W3A./G67#N;X)!<0?[PO_SX?9^S^QC\,Q,E_][^,/ZL)
  MLXJE;$+ME_/:27&7,9TJ2C%+$\GLRQ9V0/\##F2[3T'L-KE)5">I3+LD^6D9
  MR(,ZQE'@3#-'&1@-/P^GA3'^=F2-!TXWSVN]3?CHEVD:O`<(`T=/TKGFFG$:
  M79]8I#\LEY28'),Y5,6LH7=<^KS!J$M,&ZVL[H3MK+\O@X&@5BDTD]7T22P0
  M)^6\1+6@;TY5D8*7-Y'/4D@F\=4OFSRDBT8+X6G%/'$/)E^[4'IV`UO!FT8E
  M7*T&>0?)03+Y1.4$7;ODV?C;D(4S9%\"XDN?R6\U&#9Z6*MVQ#@Y`#24%-K4
  MPT'>-P4?C=A#922?HSY["2KF0J)Z'B\N"#'M\_#M2D/H@<*Q=<\<1CZ`\,AT
  MV_Z`HV9FH)M>.XI<TY"1Z%F$@$'1W_3'<[VG]<6O+W!\WF\8CO4UYK(4E'X_
  M4#F4M@?EVY'QX+U0S6U+/.1+@VO6(QC1O_5@D00IE6PK._SI/<!AO`:MBFBD
  M(AJX6(%AOLAPLX;G9A3W7%UN$]0N?Q7@]]NHWAQ"5]P!OG5X)?G@P2=>ASO#
  MM)<'&(V<Y80(Q,+V9U:#^HK3K!%81)T5;-0,6&I9=#F<&4#3[=6B*LSG-08N
  M?K;.?U`J1,FCKR2_"F[NZU$DCX*A&`WK7U3'],$7_(I7PD++GD^RB4QP@IY%
  M@^WQ#"6Q#\;;H,`6.5B/UOQ$+Q,^\Q_BEAF:1HK$>4#:K,KG5G1P=&UZKCI2
  MS"Y>J*K;F@L^KMX\V5"+T1Y>_F%5D+7:)=H?>0PUBA.P7C"13S2L::6^7",+
  M(XD'&(.EBN!1B(Y$C"91B,=0W@MGN@CB0_?CP3OG'RF^*9:(U2KF)7<:S*_K
  MN'W*3KE;_W0A:US4E_8S^.XSJY"K]ENC3-AC;PRL,I\A[D^"S^!=O1_,\46-
  MC;,L-\#BE7XM2,AVJ2D]-XJR#<;<*;\%5T!#KVD$,`XVO7=305ONFL8/!'\_
  MH1"O'Y0.2E(&K6=8ELAT\-<3;DA4+.XG9E>QO<L?PQ:VN=5S=1#'%]K@J2PJ
  M%:JGJ@K0$X1/P`B"=YT@M.IHT1F$U(P4)R72.]QB+]=M1ZG^ZHV?KYVC*&8,
  M/N</[<:$P1;`?3F3445--Z*:+*R>G1C@%\VT7!,3XRQ$AY\%ZJ-<E<NKAJ0-
  M29M:]PD/&,-M0S;ME3E/"26/"],5>(Z&$4N-1(;Z7`).RC`_=0*1)ZP"I,AM
  MU"^O:*HF.RQ]JP_4NQL+1J"RVI$*D'"FW_T'P)`$$M(%3^G?E0^4\F,"!#Z0
  ML')PA,2.-,7:?3V8@5UJ[$+8%\>.,M\%R"S[!U@K<A<;]Q1S"P')6X#_C$GA
  M":&?GR:.4=3OR8"D@%>='2\19_#3/:(@=QUP'K&4@3IK3#U(YS#'XR&*.O<E
  M]V^?5I7)44Y=G5KWH(]7O,?C62C\3V5=JJ:%_WF-2YJ_GT_`KAJ95IX*X[_T
  M*W="X53[58,<-E^.,;F(AAKR,2'=U_(U)4:JI14=)!;!7*X7[GT4R2.X;(OD
  MXYWS^;_H@?)8VK/+PU'`R$=&\2?9D3Q!AO13/8.E`^"QXLN\4TN=LB:M2_?5
  M@P64?[Z7_;V2(QFM2#[TQZ522V09,:$Y8D'&3(<5Y+GP6#V&X5[HJ5"@@5??
  M03WVGM2HQ2PY_OQ+K+U41/\6/BS36=96"\\H:\![4\S>X'%3CZKO.H*EX!(^
  M@UR@L*I;8S;;1?DY/2T;;OS5.!T=UWLH3CNJ!X"E#%QD=`_;S%*887B6,Y$(
  MRX4A`?-G#0],6?&MBYUSP<VQPH!RP-O3W.4M_5YEE$P;:R:P^3.`)*XWW&Y^
  MVL"M4?M#*@5HVZY4QNN%HLC'?2.X(H94M07GS>_@4;V]"9@-C@3T*$X:="WN
  MDZ$^80(>H*B4([@^"R^*!D!*@H^;),-**6-/RAY\(/F>=]?RVPQOY;.C7^/#
  M<C0E+63]>;Q=,\/R6%;8R,*4FEI*YY9Z0NJ0?UR(>+UZ(*^;%_((,#*S29I"
  M"'8GS2^DJ_P8:&(NY/!X%:7PQJ*(QI/3(4<N-2N<$M(1FE6KYN&C6C+7?Q[P
  MZ4/QG$RA[)O;\,59".]QK69ZFL^Q"AZA<-VD;M<112,GF]QJ)NK`3210,EW5
  M=ZTF47=3MSPO.#-9]X,2WYE/H@!I\W%1"%"/?H8#X_V0TY+SV`7J&D3O524`
  M%Z5OT_^AZ5M6NGP_54!<[FV!AS#.TTUD_<7<!!#O'G.#\[OE(8S,D!_JIGJ)
  M+#;_M0]&5@M,TFE'`-S&7[9FG!DA`J6/D!9G/BEKZR+S`.OR/1RA%5;-(4XA
  M&,0U1,O1@6$X5;O.?89]4DR)(^A@8S):ND10\QJM;:C8#',2D+P[4^5E$%#Z
  MCX(O9&?H3V;7,U\AH^H?%;\EYCRNUDNLHX7KO?9`?^XYFFF]`*L'B+P,\2^0
  MHWI_.FT;:#8!1OX=23'&RE&*U3BZC-("]-"O8`!W8@6AZF2`WYE,,_LT'+<)
  M]&BKK?SP"<'@>[[:E?H*QT?%0\W=*K4)]<@R/WC9![(\1)CVA/3M(5_*L*S'
  MP?D/H-1O#=KW%MVJ6"Q/6'J\5_]RFGX$;+$XF/16QZQCDZ.I7R8^6#.P0HK#
  MB!2@MRXX#L_-W_0&?PFU__-""*4[RQC,T>A)LR=+J"$K^I0S)U!+_%Q"&0F.
  M4U,0#@`'^]J?:-14F$3?Y*;X2;O0PE)%Z*@&3+_F4^^*\ZT'&GC)#4PR"`]/
  MM)I7(OQJ.M'(B\,FLZ$"\\\!%W<F_*UR(J2AM6H4YA#$@*;)X=7H[3>1ZTP,
  MN=;XJ*T/$T`M7G`L(>D?][CU208A+TCT+4#MKO>[:Y_C)2@R>*35C052QG&D
  M+FTY\DY*\EN4*EOY!S+#NO+$\I$_-N1.20]0YS>`IA^?9_W!/X"-N92^2E9W
  M:<3D&+1R4P6]H+.&3/DT/:5*3?QJWY)O6\V!WF^?;0Y(/9KS$T#*H`88E=V(
  M)A&/TG+L"Q3.SG,H6+X;"E1DE!SD79_W*;&/L>&NR2=/->@W9MF;FG_H!&GL
  MWPTNRT""*K2P6'&]'PB>*1<_84!I-\:OJUT8%Q;2AQ_W3]Z_9.5I";-UI?1?
  M2<,@(`@&:H(<!Q0Z5K'?$I2Q05A!C>,#-RON[NI_Y0%D4P2&NG=B$??6#I-'
  M(6GU]4STO;EGVXR]E\F2EC@GR`9Q:GB@R0DF'J0;[;F3<E;F_'4^[>\M)K<Y
  MWSM*F<T'.`/BA>G;KQTEN,*>:YK\X49++8L]8U<V22X<5=]L>&]J+#:UDM1:
  MVS!N53RM(G)([<K",(5QDJ!*[V]T-%,R,\%%"W/PI,]A5^)<(>-PO*3+(1.F
  ME?[+EW3_O"_T_>C&89<^0T]A8$6-O4:5P>0P"??PJ39N"8A>ADOOM9W)8ZA[
  M.G>W9\!1<]Z-US/&56MA(?T9&!*S"\N=\=Z5%4T\RG,GM':[;\#?V5WNU6V,
  M$5>S"Y4[^I+4D8M+2VS*L@DXOB?3L"IRYMY$9\7JZ%Q@9HLKRPG@8<9=DNZ"
  MS30=4ZST)_,RG,V'"_1*EPN\1!>^B1NZK`>77&#%K60#E\1L5N+UDGX%\_)9
  M<&W@J:F`'<Q4[7>C07RDI)*J,BU,6NH(/C]:DAID=M='09--_:J7B3[1G60Y
  MD1(MC+Y[8DL'=-!/\!:C#WZ!J^;/UY)@-]]T\9:+?6C%.(T\KA\S_C<H4BT5
  MMT71E;1>,[4H/!]#E-R]O]MVTL9+1/O/$5P>+%ME;C]QQ[;F<$$$O=!(X_'$
  MA>S?B47UO(MYV9'&82T*[26#"?4[<G[24W/=FHUZ*DKAMXBTVP!U_"N?1=LX
  MY9$VJ"[VXA4S!L"1IHMP&4LIIG#N];MFF4CHA<NF+Y=/:I;](EE`D/&)X:O\
  M.X<*S5D'8+V0Q$6E/Z/HFKMDC#2WZGBF;!O3(IANSHB^4.X96XICHZL+':#A
  M<Z*RS[O.CSW7,/"<H=@>0A-"[9+TDRD,S+SJFY&7^.JPT[PS#-_OMWV]JQ+M
  MNB=*P*-4JXC:,+OD\B]8Z/MN>P":@5(P:][0*KY"BDK0[=J%\\0>Q%N+#HGQ
  M1P+CGL?&Z)-E0:+3&#F9K@DQ$UG726_-7.9PMY0(EB>HPN,*0SNHS2:(NS;9
  M?<Q&@AA1$]RG83</8!T'I5H6B!2J6*<=O-VFD.^#79(:<349]OSIM%!\&H<8
  MQG4@\"1(CB9Z[B@ASIYI9<&:BBE"J%[#7X[1JNL72%A70!R4OD0\9G0`53PF
  MH&W@LD"R5D*Q&P9DDEED%__Y/WP72KER7;GYRN9!>%_V=QGT=(D+E_:]B@/O
  MQ]R>S;/RUR&B&Y">/\@^%49W-H+B<HLX@N+W@1-\+HC+/.P&?VK!28`?[3N"
  MU?U[J'LH/OD'X%U:PD!(3/()28J6/LQV$7G@#=BDKX_X,2?H@9/]F0TZ^R>2
  M^/3$6QU,1,01I='8OI$`;/(!N+)FEEA)&LE]:SJP&2]?D%&Y+<RW1"';<P)Q
  M<)U03X9XA^$,PLQR%K%]4AENKM57,V4.#0['[Y57T(94D-27ILSHFRWA":]"
  MB*W[I(++AM.C\W7]?08-97CMT#%BEEV3$C.VUK`Q,KNIBUN*0)(+6"6I/V9W
  M,9BS^I^FIU`^.@Q9_*\G'N`YSW=0N(_3$CVIQD;;),GGQ)`:5QMW57>F3#::
  MH)+@FW;3W0./!<B\["ITDE)2/Q"0#*O#9U75VB[V:*.`V#IF=G3-D!8)T)JF
  M&U5IUKZ+H'>3(C^RV_8)*QC]!]\&C8A7^?#K[22%B#&9=H/PY8&5\Q4C\[L\
  MM(P(!Y`]&["-5WAL]NB41G>IC$):Z`WUX'+5,77'L>J&E8JO`=R6&D.1IK-A
  M]MA4O*OPB,JU,?PD\33#6F!<A;NZ0ND)G?DJ_W'.[?FL+[<)!L"H?BY4)6F+
  MBM1PPS-8<+.!6Y+R\I2#;-4`?85$(IGH,GY3^L-97"V+]&_:+G99U^.E$8VO
  M7:YF!CFL3ZM#4>.<5O\E&9RDLEI7KB:-ZTB8_E&WW/K(Z/G\MVT1Z1BXWK4%
  M>XO>7Q=$=$I5HC%"#;W.4!Z:NSZDT_:0->VC1KO1CN?@@P=-#U;`<5RT5T[E
  M`Y=T,*--=R!EEJ3P&/6;>`G#P-.O/O(&<UW,+(C=:*7!->,Y.D8>UZDW9@.)
  M%>WP1M#$F$WFI<5_0J.-;$Y(JP]8W(5`JSXF+(+6N7(2!R,U?0,/+O:,U,ZS
  M0JH_,`Y).Z.8S;)`CBV!)S3#X5*A"+0;MP+3(00$N>M0=YL(K*G7?H:)!LQS
  M"BX(=X>07%6[>\*I^,Q:7@Q%*(0=P+SZ3I9J$\F&#,;KV5E/M$;>QYT&$TL<
  M_EN9W0/5T-)^7KZK0NM(PQJ91E"V]P+CMW`+*-C+]+[PK8<`WTZQ\$7%@R#3
  MDUD8[_@R>=S?_*J,:A,P#_O/M:-!'FPEIX`1MAE&?8/!1)_B($,`V]VXW6WS
  M`.'$$^2J<WQVV4XCC:H-C%UG/DFHQT?64V&K9(20H)9H=3(:F(&T)@/\$83#
  MP5-[I[8D1^R[4*S:,=09W/OM`H39_:-)8X.%:JN`.2],E;"ZR5WZ36#)Q5PY
  M8Y]/:^\ET8]-L2('*&\_H7P3;EOC'#FMT]#Q,&Q@I?>W9C+RX&CH[B%-0YZ5
  M*O*\KLB'$U2$D4L_8U(0[@EJ9ES;#@+K-^62W)98F-KZ4L#A*/C)4_5:X%T0
  M;YNH6Y]HT>^/B#OJ#&"7`ONPC(I'#W9:MIUD:;MM&UY2=)E^W+*5.^)U+QL1
  MT!=RX!'0''VSO>72;Y$'/Q.BR+^W37\R>'*G3LPN/44<9S?FILXI,Y=A,P%F
  MW8T3'CWWAJ7CTLJH=$FOR`_HID\B&#U,^@T`<'G#F.>?@%;M$V7P3K?KX(1'
  M,=5W\`^$/-U+M\J<>=*?3&`Q=1MV'_WT1]#/`.I2S30P;,>PTIR3#9NQUW8J
  M43FL6%<J]G\1@.YQ(:63Y$W.I%)Y%U(G[O!U=0[AF@L2OB(XEB%R#Y(`'=,M
  MEMV_2A5Y8!M\+&A=CBM+G\\.=6D1A$V.&\"PWTH$ZAP<)8J?Y#0>Z$H4DM<Z
  M`)>ZDZ.&Q4%OCQL:B&N/H=5MO-W2&^)]EGZ.*DEC3,>F9&EG2<;UOS6A408A
  M/$([A-T(3%M=6H1`U=2M@6^(:@^`QS$3*(67.K3*C%.@$#8#".0-AY-./4-&
  M-KZX<G8I4]1W@!WL./?[FQMW5C7B;#XHBRBJW$!YU^K?^^K-%O;+#!OYKS/I
  M1`JB*$#?4]N\&_>).9)E!,6J;D<JS)G?$6'82Z8+;']NY/)*G/*2DZX*#HW]
  M8CA\;WZRQ71\XOF@<][.L],=K;;0O=!C!J.K'^Y/KFA-J[YQ&)7+*9"VN!)J
  M]PU51+'A3`^"A`(<)=\"L"E[5?Q=G(%&V[4FW&TA3T_1"P.O%J6RXGFI9&SV
  M:PX+FT%*QJ?!\:O-,QZ^JL+?[L;/(S36L/G`3H3@G&%49N!$I:L])D;'UN)@
  M%\3.T55\--`W+)'R'\9[_-V^648%`<Z:IY'-S=!J-Q2UBOZ!(7E_$NEL*=)9
  M.HEZ;P]*T;YA">\.TW=:94J3*2`WX*P$<@JP^;1I57V^0FUJ,"%`19/[0%0R
  M)P70*-[1FDFGD*8;Z-?L:5RR(DWV7\+\N>43%.6+5T*,[US92+H9TR>KIDP(
  M9W9=0`E9K8#"A[R5_NZ[*V$RG:2B,[[NQ<CGMT:73*[T%7.+:O,/[<OPYX:!
  M85L_%GF<%6?0HN=3HNI-2TD:@;0K+4/6,XX^;9PJER9.4,LN*?MYZJF7]:YU
  M*UZ]/"#)WB/MX4RYL7[%X^^^<Y1$SQ2SQ.;:`Q2[31N+@7O(F6V>2FN?W[7=
  M-2K[#W6$JP=UY_<L!MSS+#UVQ*\AM:WS*&#M,?C8!%5L%].VNBMK%'%(VIQ#
  MR:,]>BM;>I-TMW7!!PSZ!V&1]ZII6Y+V6XQ:#+2+$D5B^;Q2!MU@_'%F+1OM
  M&U?$0H*U]>,BG>6;Y_0J+,^CR3!QO84-64Q)IU%ZJZO5%9-QI--\]9+PL"R[
  M/B#'GL*HJGPYCU-664#A).++M*GHC1,6@0)CZWEW^D:P$&N*:D]+@IA!/"#K
  M-=IJ+9&IX'7,CP8B#:J?:'S..:GZ4XFE\4@U[1*<K"H[GF)YO1;(?^YT"Z\L
  MNV1$+,YCXA]`^OGD=F>#)T&6)W,%"\`Z+<B``$4O42`,>A`K7]7E`=>+45&=
  MM:%P8BK2S[X,C),-K"EGFY\D&>30TG5.&XJ][':&"0T+()"\Q7"G15S^#3^%
  MS'UK8";>N%FE70N+>T#V%W,8W=JW?@$%PG%Y;3IWB]9%]`H5Q+W&W#R]?\-'
  MUG_E]2G)O+K>3\@\UFB!ZN\IW=6/HW'XG[L.@UW<#W1ZN_;%I@;8MYG.#]WC
  M-'`<Q5G0W4?6TF$;\J0"/YDY9G:R[/?'4`"2V_YQJ^O<SX9)B__$3&ZTVK!7
  M`'\3D!V>Q8?[P7&VTW3':,RV])J4<%R'HV1>05M4]F.9';,VN>J\8;HGYD_+
  M0/#(]3%"&:Y.QO/2H'U]$A;I<\[K56P%$K5^L?B)=&5.1&GQCA5#;>[@KFI4
  M!V7P4XA@$.[<@@?ZJE7/VB`E+.LZAL:0]D6[TD+B,A!?#P3_$1>.])Q^N)>?
  M\X<0J9(9QE(TX]K7HF@J`BH4#'C2V/QNH&0.WE\:,OYTC*LO-M,]XDUA`BO[
  M=JVU*?N63]YLT#&\T]6<*V.ZR,Q!4SUSOPC1-!^_HA:)^-.''.ML%%%'DP%"
  M[>W4;7^:-9;VL:*^5\)]O#U2G&%,SB#8_H:KWSGCMBZ]4P?]W*'CSCJ$.<'"
  M54J8/;2`_;@V[[^A`D:_`)Z7DZO_-&,IAGR)L,@`O^;UKT*1K-EY_)+=RI:]
  M`D`$?2W$*VR=NC.O0!8\,A!57^?CXLK/;R(\1MP;PV(:=1_JW&`,D4]RC,72
  M(GLE;YQ0O'"O-BQ9XG#2PI`6_+GZV.^:8SIUZIT\5-$*!K!L)X:B0/#UFAO[
  MNB]S6_`S$*?.#X*)Q1Z&Z;QDOR\88(!?(VPCIV($P5B4?*CQ?&))GI"+<I=F
  MVN)1VY%0I54T>'H2NDY[^[J$JSAT:2BCZQUOSAT'IA1NJE@`KGJ.R.,[K>8M
  MT?0<$4@[2ZT#7%]""!3PA\5P-D;#_";I:`/Z)IP5997LKB^R"D-JDU%ZX:"2
  MVV#<R];128':GM^0*-#XC`;WQ!3BX%Q'KA[E*2GXT/N([V%@_</7_HQ=;79@
  M/H4OE]8W=-ZK;UY(1Z?20$N/_8B$0YD>-88Z@\^:!R](=O"/-E_@V`4U6M0C
  MQ%84$/-IXDZH:B:D$"^.R3(I:3OK`9B-0%<RZS@>KJ5Z,`R_1<U81+/Y&B_E
  MQ5+C))ZAMR<['#'1T;5T82R6#H6OB?:LO8@7?G4:9<R.5%\6&%K<\(<'N6[A
  M")0:+?A<W%[?E96X6_[3,D4CJ]"H[#H*:_3=E9?@==ZS\(UYLP<9R<L^76RL
  MF8K[ITG--F"\+"DQY@5"_D@@WC(5Q9`HK4X;QN'&%<9QQ5)415\V8C5F`]XU
  MQB4^7LMLDO4&OGF$@^E]P:17+;?*KRF37M?OTC46!;0:J,`[WHHWCY'U1<2$
  M'L3N4'X5FC8&">")P$MD`&-#74FP+]65\8L:("(?%0*$![;.#$:[`?0S\L$>
  M>Y\/$CU\G*VG>H'H$XYGN269<YY6MLQ\`:G0!%B/?[B7]L^=>!W,-TRV%%75
  M<ES\W]S"#_;%5<IA1#+K81[2HCZE$IH&.*)U]^8Q:T&$,O)\BK&/.A-6G/]3
  M"&/]!WIK$?;TDX[,OE'DC!"\X`PV_8V5Q4DYVU)VNOM?YQ:]=?IM%BSM,R_,
  M;N7=]B#[&Y*R)`EN*<.+++[\$O_=`\WOP?Q!897@GQ)@B9J%K"L\U18#2&W<
  M,C*\&5X8,)>F#:$J+'QA1W79L=6!:F%%<G1;,4W<P_Z[9JZ/]V]']I&RX;\>
  MK$3.%J$;FE^-K'KQPATPOA'9KLJ&N="\>7\LO).2IR@.;PU6;\XL^LXVBB*L
  MV.T.^4@=OTH&BO7+?S_UO_DZV<G9</"JV=)/N9P_(ER!2UG*?#S^"O>KT)2Y
  M8DDB:"7DF4_AG4OBZJ`W.Y_%HH35G!5?=?!#.DICC\4G/S90JXHY&+\>-L;:
  M=H=Z+[P>8-8-,PW8&K26T!N7+;J#1_<_#N_O\C<Z(0`;(KUP#2/*Z@Z#&9WU
  M$F=EP1!'\%1W`,NPJPH!&8Y=?)Y5FPCE%TFK08S]15D&8U>7YXGKC6D-4#'I
  MCV/5F+9EH+AF.Z2=2HM&H`?HS*2YS*)H]-M4+V?LX57(\JITEI,>1P-$X?\F
  M?4B\(U!QL'D`3R$>\8YL2<QS31OK+F-H-QLUC-EO?]&)2Z,,H+'&PJ'R(+Q3
  MX?<G`5V2J8+6$%O<^\B<S*2^_6DAZSH:'_K)FJ1O@4)C30X%-#K2QVH(W/3V
  M@T)VTB/WD;Y_4(NO6)GOAI(20J$I[IV;.T("9<O\?RJTE"LTR&PELY;;UZPG
  M^Y1'I=DJ3ATSXE0-RNJ^R55X#%H"<E8D2C(#UHBL6=#ARQ0]XA.*V$\^"7?-
  M#*=64N%\.T4NQ%<NGG_-*DRE!``3%,7.*G5A^MK*O]+@;[_9OM_^8'01U4QL
  MC?\79ORW_@_F8/U?U,'.PL'P?S^&_U=Z,/Q_4@^-).RVA-AUGRP]AC@>7=D*
  M>V#?I&,CFZE6ZZ6#F/H7_H?E1V21S>/?F)^AK`BF`$EEMSF8$E@*P:)+RNR(
  M:3HY;[\.VD/'$;]'/[S>[O?KN=O'"WBTAXN2]F^=GZN/D3<TPK^YS+W>[T->
  M;P3:(:3JYL_'WR3H!#VWQT6*AGZ_V[[N]Z\#/;6UJ\-5%4L_=U?0'XJ*Y0.N
  M=RIUHV)V[NY.U*@64?7W'TV+EO_R@=]<:E.;ST09P,8]NO.$W,3IK9$Y85.1
  M#\.KK3TIK'D&TJ/9XPNL2]8*=@Y;>ZE2*Z%R<U\;7003[YVK@?IW"9#,S=V!
  M9.E``,&IS(C&.(1V(_?XC//%_&:5,N:;PAIU53I.'7I7JO)+F.,[S#9$J*^Q
  MN[RWQ58CP5@,;H-M4='R9$)JZ5+H:J?R2\WKH[/W<_IK1P<RWZ^&]N;WZN8;
  MLS0U"*GG)FO8M;@)NDL2)/-CB4&M8[-XGL09MES.&(HT*_5N!3N+)4D(/=V_
  M(7(Q]$,%^7QIBARYQ]YBON8S:W?RE4`;%I!8QVF8;*O3G:3=QF]8EV[CE<:K
  MR8*#7(#<2+77PC?1E1#8HYSJ^U)_\\5E6VXCPZ<[P%H!\.5,!\N<7ONQYJ&X
  MN_2ZE:NK)X*$:)\92.?,:,NAP82S*A]:%K.KL_=NZ[<NXE_"^%SU%J.XR_+I
  MN9KKV#0J1+%CZ*5XR)8N?P.-':!7#$$/!'AU:L/^_02%5T.UH_+X4<1MN<_%
  MA%I"K!A#J+S6U/_>5>!]!\EZB5I#PX%\%Z82E]R8\<\#\\][]5UP+`7J)U['
  M;WBF#O%%Z7B>'5VNJ](,\\)X4AA7+\)%096-]DS@%$"#P@1XYU;-N>M`I8_<
  MR(M0#E;=Z7W,8)\L`J(V12$JX,5Z9VQG>9WBNC0X[A^\VB2=`.8OS,\19=OQ
  MLK`[`N&U<5!PCXHBO(\)Z_9K$OT=_/:D$]<?8TU$\FFK8*#UP2E"'/-S0Q):
  M^X3%FHE8<_WC(L2ZIHNR>I)&:IU@&.EN<\F.`2L1(T=4QAH<*G>T`/"(L&K9
  MOZJNT!ZFA#,>(.]GCNHO2G_X)1>[*AFX!:5&M2%9-E^\#AD^\);/$6@.#NAQ
  M$U5WGGG3"(23#FP#&SPI8"UG!O$#IP,1W#<PBP-KO6AAU#]BFP1<W-:YW+:-
  MWBM.K&.\WP_K]477\$.QO;;>W;ADB+RC6+TD&KDNGB);+%0+;B?1@_HF^G"8
  M#INM(X>P?[+[YRGR_4K(RZZ0@M(G$`)Y!@_DW+45PM1VB4TC3RT0MZLCE@-X
  MQS'8`[(3LKR7HV8"L11B;='=FO0HS2-("("<6`D\@:2Y]A-*V6E)4;"=EUR[
  MKC+<ELN"PL=;"L,V;/@$AOO3I?]$Y3"EL#L\M/T&%]Q'[5\_R50L*<>H*##Z
  M%P=>Z(;+=#T#E]AT4#[[*SH!)5HUCL3\B\^+$YO9)J5?B"V>#4/V'<[=N\=/
  ME2CH\3-A.TU+^NT3/3WN-_)^2`;UWADOYP!'T04%!OLF-,N@VWWKAWQ3`-'0
  MC4.64"W`%_S#QW0'O]5PXC..LO*5!\KS+:YJIOF@B2R$[A8E25F4@-`7POTD
  MM\1U($*T@S<<GOP1]\065P'OBP14>IA3P)$R%#'&@Y93&U.C*60ZV3#5U4O`
  M_A30"Q6!BGZI&K"BO]EJ7\"-3VPU2@Q!R1+X>8`QESVWT4!>J&C]P*_+-0A^
  ML%L3V1XTA8T(!.979NAIB1#QYN)6R=-%0WDMG=X0;KY$_&.?;%:H=I/B],U3
  M^<L1!XOZ01U.4G;V_0,BI91:A:YNBJPFE^/[7RC;/G<@:$Q:AH5/;@24GG5=
  MDNX]%TCOW:OV=$YPS/-L;24?E4_0,PQM\9VS9#G%X8<NR28?6J#*@]QSC45?
  MF8#.=-D>304Z";'$RILT!B'FR!C!((2`?2YW<L(R#A6MI[$>=LIN=EAI"2&T
  M^D2B&QP+)9J9S\S?";ZD4?V*H&ZBL$O0RCB\(V"O:^!K\33ID.4G.=M`)&F*
  M&D>U_'(=B\7![H&XY//A9,T#UM'RC(`9W?7$2*:]UXH;\\77(56]TCI?"&#J
  M!4+&27YA08.1JG#UW:Q7Y*M?VHU"2J@(T;!VDDP*4G,[".<:`+D]`<)[&+5R
  M0/>$4T8B1:#X=AA,5))AK@.;T/-,-HM)!!.%F^OIN3*(LXDGV3Y0^/U7;`-\
  ML&9B7Y@'CS<&X">GV=T'.325V#UE^@[I)<N@1P:J?)_G$7A/N#(S/?>8LJ):
  MV2WB76S3G*&RT6D/V;8UT1$6<MM<7#Z]&$<`76PP!O.OX!7I(C\XLLA7V^D:
  M`&$[M=B]8\)@X)R'F=COZE\5(="VNOC3QW>UQ>3GMT@<``&\'H;OXX_6C,-D
  MZ1<*&!9GI?UE#J\S7;`(NDEM[/Q\^$EH\.7U0VP=P?;@FYDTG;M>@'1M_7\V
  M.EB("W=6ID,$E$E)G<>K>N8:M+!6".$`&J!YM^R-YD^.BMZ`[-GRS>11H%"Z
  M+?5S6GH;\9/8GEGEX#"0)4FP^Q4P]5DF!G_;7%M`GAJS8L6M#^V.9)QCG',;
  MO/:FD17HV@#!=BC:]EK<(`7]1%L!10$T9X:YW4I3!\(MN-OQ2W'T=0U=?B\G
  M`>.0-;%_0^LP065\=$!=F?&#8`0.]K;*6+JI[&R*\9:A@+<7PV8;&\XF1DRO
  M[KQ"85?51%\][`V`#B+@"ALG->$?8F):>S6^%*IGM"6.Y5#WC5FF.F1G#HDG
  MX240@I#SE=F91I,S9A<\42^)CJS(O'TQNUAVPN#EF*:!>!+E3T<O<Z6%SY>@
  M-'%^-?QL9]Z@#$"AF!G]V_;CRKS4#;C!%B#`,L]UL&5K4-,Y$"=A`1&_A7O]
  MA$110*7L+8\B>1<"%*YUW0`^%94N5_/C!%6;M3Y4<-JT?FXE"5\^#=T$K1"L
  M(?OI+7TM^WK*72NO+!,_I;P>9+Z>!)KD>*KSQ`*NT;!R#%_>!J;B3`FO$B4@
  MX?)JI2%JK)S3\?V:80^_"P#(S6$?7&G?%9-%#H'@3!<0)`<VAX:HD?+?!(B%
  MW3-&PE\\XR$F_2_I/!JY=K:Y)$$ZQ)<059SW2=<5O//\2+IM+0>F;/564<:V
  M-C^>5@AY\F6Z()8J/(2'3H9"W(?`[S36Q<D/)Z:1ZA@Z*%87_%=?_%V8L9,J
  MJE+9U6ROP`GQ>":)%%P'@]ZP:S$4K9RA)#:.UKD%X/?3WBO;%#]7UL_KA[EB
  M2P4>_[T+K#9RP5H4\YQ-`[NP.?@R5,Z:GV#NPT+J$US!2E.*QPB&8=NN]L4<
  M@4H8-G\U5(`HTQ_=M$^\(R/,RS5/#(>:J2ION4L!)09!`LB_\]C"LZ56*OE;
  M.#-I,G%<>J#-E\KP$MU.&2'"TB5YH<."BXGP1Z-=51\-=W1O%.T2SFXMZ"V3
  M-RT1CT=PBD2@><T@[IIB>$)TO=3'CB(A"8G'7\'.O<7`NP27(3%O<B'WA@\'
  M@C,7A:_J17=:&L+SU)'%CTNZOB;LIE6NCCQO3L&]8>0@8MTRN=B\;)-EOM?@
  M'SX:-7Q==10FCWI:W3K7P1]MP%O&!%"=`^UM03?;/Z"*95O-V[,^U]#,-A`T
  M/__[Y*CU:ZQ-&P!&T'Y&D)8@7A_)X)^%ZKH>\]_FIZ#X)0J[>P[N#WZ&P73:
  M1G20$M0OYEDQ8+O"R/B%N'^HFZ6A`O1U%Y(#W+#A=3<++T?T%9`IYL/B1W`=
  M*PK92Z?E?1R#B1[Z!SJ]VH'Q:-LU)_:/-S^0@/:@DK.*6!0O:-$D9\<`GO#2
  M_VM7$BX<!G-B]!:%2_QA1IR8*:A3%S$)!A<:=K+RR0UIJ5\+*X+<`3^D!U-8
  M`MN_R0U?\ME2'CCW$9)F/H+LP\?,XAZ.6$+C60!<'27_#I+W.QC]0)>1ZP,'
  M6QU&B&T[[MR#7]_;RR$0K/8XMT?+(="5S2U]PSZ*Y2I)/`DYS56:9CV*ZT:F
  M@H?_/$0Y^O"\F#13!MO?B9;U.(GQD!T=8[!XPRX#Q1C>(2-5F4RC%0-P38S<
  MP%YN/7(P@-L#6@;."+'J8'7GQC\('1S9-@HI3/^.]_;"*?#?Z6T[!+KLOR(R
  M3QEZD3%`*4%0C**N9^ZTXCV=Z`9JRZ:U:AGOT_+0./W:^8LFJF@D(9*6#Z!>
  M&ZTY3I5X(:V6='LONM7E*@5I#+%!`;&.*2U"SRQNC*7\>]9%=(>C65IC'H&!
  MP%!>P<LC^GT&M>`SF*_9%N?)E(X$BNMM]OOD+G=>X$OXDS$D*&%>@P-5<.ED
  M1,1#:6N1!:MST35+V9^#0"*.3&ZD!9E7##6D_'>6&#].0(EE=XL.="Y(-7:Y
  MIS6#!:NQ1KVV\1N-?I)(LR[*W8T1TV3KDB\Y4V):AY>OVU<;D+?M?ZL<'J^#
  M)5WM-[S:F&G>*`?W7NG^KJM4<D9-$M%N4=>VNLVLZUD=!9<+U1@V@0PH9_H8
  MHOEJ>4O#Q6Y1R$'5K"/=-B5\#F"N#UME,-=8[9M+CU$M6GY%!_6ZM108YW0M
  M%)O>F7DKQV>NK9PHZ;CM/?P<H0C\9/6.*B;$/?Z88K"*VL'X4U,R6M^%BW-W
  M!QGPJR7-9)"4Q9W=M:V)R6>JNS\R)LY_*'F`&X[%EO1E^#!$RP./1-5*'Z`)
  MU7W5/KX1XECW<4[\S_V[H-D,G;8VP-9$)C(*/_3=X_NJ"IXDIJ=)2@L:5-_2
  M%>AFU4^;BQIFSSNO9VO72NH`YNI`=>9>CRBU\/F%+22Z^1X_\.S#R!/KO7)=
  MJ$!MU*A*KYNU#(2)/*@IK;_BG';/?U6+1P=-H1?#L[?Z^20[.52;7RW)];>=
  M)"<R@=%NJGKZG=I9IE@7=9`O/Z0C-()VQ@^_W-A!K?GWT1D1@7U2;$S*H8@1
  MI//TI839YXG^Z'2P/[U0'7EK`M\%"U!M^0",DVM<D+!!BYU)Q&#.0')_NEUI
  M+T6==22;\V%!E7.KGVML+UL^MZ!CO4A`"I"9G:K)62[2ZS@<B='>]J-,72NK
  MXGY7K@,=IE])WD+0R/?:\^<VAIT*#\.CLXT2!1VRVY")W#/W;F`$#*3<=![B
  MDR>H]%@@<PW",KK/?,RM0W?QQ-O'9-#F"`P3UZ'J+YKF/.''?*X4KAR.[^K!
  MF=M/&[&[1YF!?)"KV!LV+G#7V&;0[M4X:767TQ+$=`1AKMF\S;9W:GD<&*];
  M5-%YCC[!>\!P-[>$5/OOF0C08P=`!P8>/K=0^D".9<6?5KJI2HA_&EM##C1A
  MTLUO-NQXG"QNZ@%6!_[R8++.PK"C80"8):IBQ>CAP%VK3EO&(O^,"VTW')0]
  MT`JI.3>'4867O8&<A5Q(2]^2S\MIHW_)F>I.'5-?3/3N=!K,(SZ7<].T3J7$
  M6DN8GFK,8^A@DC,<TY2F"-GFI9V)\"/7/H$#.19068^NH-;9>\<)6,/4!:,C
  MHPSGK)ZU/'5T?U5NJ@4F&5-YM].-NB."7K#?16&F/U:RH0_4H.@4,(;7^2J=
  MA>F[+7O88I9E^*)`F-6Y=F>)_>$3;7;1*#@#/SX?C5(M(SK<F(%"`OK)P7,-
  M7ZT]+,6"#USM95FL0]&/7463%M%:PSJ?:SF;#4\J.-:&E'Q(UX:<2<_S_MF=
  M7F*V,^-'!$^SW%.*^:7UE(_M"6#8]56]>@V]2[E%YP-C/+CH29VIJ=0Z69C2
  M`0J!1O3&S`X0!R@GAU=@;`Z5EN^N0L(W;*>A_PMO5HM:#7CA0M*\>,5C7RE4
  M'6B;\\3E(`,.,UT(ZZ[:O4D,DT;\)K/"IS]%05_SC1]FUF0J4(#O5H7'/PA%
  M5!J#"<4$:&H1$^'&,FM0R[.:E_8,BTM@1<TK,&:"S"_-3!CR5N'5*_JF!I\3
  MWH:QB?4BE3PJLZ8WGZE*9-O;)Y"]3.72VB](OTI&7'P6..<35&9F/$]UXHK'
  MS>N79LYAO$Z.Q3S(<]R::Z6=QLU?F?Y93^TH"(3*`_YW$10N&YA(Q2_A,VS'
  M*0&X)<I00%-H`7%#=_P'YZZZ7CJ3E@$"DU_&L8+W"ISKH39@3]P-TGT>AA8,
  M'T5O>9\,B4![#ODEC`QQ,S3^0AU?4/>`(79NC0<9`,S<Q'^.\82\2SLZY[C@
  MYOP18+G9R9<I+X+'(##ZQ(=%25`@0_N>9`E:TJF,X^)WO!K`=TFG])YT=V,6
  M5)@&7,-+AIVGK@*XB/;2.7!8VN^3<=T^GM?F$,M#T_PDI^P(="+>DWJ9W[-%
  M:>X=48B8`(\IR%^UHUJ3GD*=BX4.8`AM"+)>4XFR8E<$*$@5L(JC!@.^DM>Y
  MCPIZD@P%(%@G1&\OOCSMI:6S^GHO]3@:=MI?\A%\?B'RL?J(HJ5!2PN:D&7M
  M+S0'CI02#&\VJJUY\>THF+*83FS@YC$GB_P(4F0-['!KLFNCQ-+`WHHEQC0J
  M&6)6&K`4CSW=R>`HN,97G)"94N'58;003D5K5/]0_*V7MZ]#ZA`DB>G$1:#Q
  MR^MO3G;B=:C=)F;P($&R@AQ?JQR&=:IDA%F66>)5^@AN6@8@'VO0'H7)F3ZW
  MB0%@FR-C0R^/F*_[#S*G3M#2!?((1%GNA9`VD"=P5Z(D_^\TEE+S>*V^FN?E
  M0:)A#I%1W_:%NI.5)05.%QOJV;/V05&MNXVR"S!;5IR/$B/\Z77)JKFT++?9
  M65LMVK\7A7&,P48?B'=[,-@8,X9\\Q.V6/A&Y!*0@?0F@*)D12Z?6CDNYZR:
  M?)*,;<@4I6S;8E.H%6*&<J@^!$3K?6V6(N;+M5M:S5$6@[-\G>P<DO%:M*,N
  MEZ_4N,G,);M"H99N,$@6<`H\Z?'\*OG^]-%V.A>0NBWM(Q4#V`]L3&1S/,D3
  M1M:0VB*&RNQ"-<%;%/79XU;`56/Z3A%:O<<\^2(!:I)#T<`QUIQ?TW4Z?0F.
  ML'<KIT/-QO#Y7<<MJ^^AZ<MFADDQ$-6(^1WG"DZ=.3E,5L$O1XAT^-H;)RZR
  MUJ7FD[EAFU(N^1AD5,692E,=MZ4$`ZUZW-;9LK!R=E67F%GHTW/7`<*HD,'L
  M,G*4<%%45A(I`<X37I5RIX4&M>C%6'[+_K9E12N83RJ>#O(OTV%'F>>&_?1(
  MP#YO`2#,[X;)M+,YV7MEF-C+,%$G1_($,E1P+K'*.,-Q&<4[.!P\JN,*2;3T
  M956:-:U21\SC-:G&;UO79V7U&Y!D:9E?K?<85FK!9?;X21;9B726!]Z,]OKX
  M\@?96Y:\0$/QPM$WF3S?EHPB$675,@*U.B?2AJ&CG\FTA&M`R>*]Z;N$8;9/
  M[_J3FHQ<?,%`Y+5?+HV!UB=_SR[>$C2?:[J&H<_Q-4Z+L1A,<H?KLZ+7.L]D
  M*-U^`K<)98QUY8MQ0P(2TVT,3AQCG2BH,4LWJGG.:TA!G`Z:/ECA9C5NO:"N
  MTQT^]'2)7M("@"-]?\G,E"Z=8B96!L:;OT/<KEI:S,]W5\F+(I]68_<X!]@F
  M>T,68S:1?@(JD9.7D'O=/*\B,)C=CX_GG9LA`+33_YH!^`[:6R5LWSD/35VR
  MJL$'SBIRHOB5&233C)$5@9]BGLA,]E@T\R2%<==M"=PQY;&7Z^5G$;J88?5]
  M?D1L-&[9?24IJ&ZYNFK7!$&*-HN&931G*]@0=5X?-MZ=1F>#ZNEXA9,J20AL
  M?P:UFV03RD\)[*9Q1B`.=.8Q6;1(#?NT*U1Q8A_2]4;JOIAR*6?ZHQ4VI&Y-
  MOG=/#&!))7676M1Y(H;I2.JB2:3N2(.B9?O/]83PHY3H+@"<TD^57I#9&<HG
  M\OO1%W(43A#47F1=2FN,H(63<>CA:,2Z#'X,=U7FQ1'>O5"JJ+UA!!_^/GU$
  M/^Q.SM*D3-BC3\&PS);Q-[-ZX>!?A04;(.QQ-T,,+IDL7(N#X_`4%SM9F%`;
  M,F=]MRZBU@C;H@`U'.QLKM%ZES!,*(47#-:EKY\6-'DIEP3]M?^RVG>KRZ8W
  M&<U.#8^5GE^UGM,O<OQ$ZX>2^2"DRH[22>G*/S.L+-!H7Z>(GHT`V:>S,5MF
  MRCVO2X&^)ZLUS4XMPZ`6=\5T^PU&;^9KR1X8%=#;Q=W(=67%G$]M+ZIJ7-(L
  MN[H+#`0JNG1/G5R48^;`:/\10^G]2!0$\,&7^B"'(/-++M2A,#Z)D^V[]1I1
  MR0;.S*TW(YI2M,H7]/KM4$L1&'Z.NDXG6>A5+;PBJ(TQ\\"J*>*P+6$GH/B[
  M*3U2+(TV)>M3(\N]%V6Q:D6I7JBQ3&RJ0(O_L@E*."C;\Q%"X][[&[(E`"="
  M\*J&8B>Q\_?)INM+LATV_RA2J@X_Z<1#)7\XD8:4)^1<7=(64+/?G6%(>-7P
  MU;A19>15$$YKU,D;+.>;F^-K>Y::%EOLF6IGN3^F/*5VOYPP'FJ4W$UVNZ:Q
  M\,&NFH]R]5KCL.JA8@A5X1/0'Y8D)!V^"CY,4/TY,,EV(<+#]?@\2G1B?8:2
  M`Q195V@9`BF/MR66ZI#G!N6Q05[TS2M9(02-7G,1]J,6W8'VMFZ[?>G5A\@"
  M&?!=RA)1C1Y=*",'6LEQ'H;VHH6>@TL4\$>1:?LT7&QI0@IV'EOGH-)QP%H`
  M*;+@1W6U@_O#-6JMF0?7%,:5SX2PI3:&N@;X(?PZ]=)E,--X,DUC)`QOZZFI
  M2&=IQ,?SQ.B_68<=W&LEL!72V!*+R?"557V^ZC1>R=2-)J=7_#P]11T'[&T0
  MA=-TX=-K6#MH8N#D87K2#'&H;ST#,_WG[Q`EDB"515;D.6"-1=3WU27T>/KP
  M4GSH'X(Q":9J\?E9N4OG3CP8KEW`%:4*R%IF?5Y4]TH>9G#6<E^*5:]\D<6#
  MNIX';QCVRZ;)S@E[KROJ0(;-BPK\TIOVX&6$.]#_JIPT?C#@S2&E$[6@P4).
  M)&8\0E^]\K$@&$3@0L#5<22$9+(A-+#.W[G'^PJ@20[M.>[[X`*9T,'1-#Y[
  M^T[,9XT28"\1)T1_BYG:\7NR[Y'E;_NI;_3U-Z@GXDS@O4'=W%/M3&MI((P7
  M70MCY&K7FFGEBK,AEU-S;=FD=$/YDM;H)R9S_A6)RC!E/<@5Z;JIH[V29=<A
  MW[MA>&Q5Y3RGK78)-J'`H^2EK:QFQOG"RD[K@=3T)1(CSN0R5?N<\'/=/<C5
  M=O!)>\BBE?\),&3J1CE:GO9>BT"5C67);GE:>!XS!#(V6]]24ZN,*A/4"PIN
  M\_A8]>J(&3MPM9<I46E%38IDKG3)=^%H`*'9BTLB.8#9^N<1THN0GUPX'Z/:
  MR"U6(\VPFS]SQ<.D-?M9LM$8W%L5.$68O/3/74X^HY`QX?)PQ/+TIV6#Q?\C
  M_2AZS5"BC*-K;O2:YP+%(7N&9E5)(M0(R7%_?A?0'(-?CD'.6YIP\(O?SXQ(
  MPK,*U9&EV;%)]F_;4OU%00IR0*XM4CL?.O!C1A)NG)LKZ>X1$\WZGU"2NAC%
  M'0I9D5U;%F_WI,L^UQL..%OI@KA'A%2#KA=9.P2YTA=''RD"YZ-^WY%EQ%O_
  M+>H?WX`@%V&UQ8=TQ$=A+Q6'O2&I#&+D8+]`D?<AA2J4RJXK"\<7U,SZE4<"
  MDT.V0;LA&2KOFVWQ;4SL0X-/GYNX5LCC+(7TCQ9;_;0TG>.NA.$8-XW5EZ`8
  MR38VWQ!T?:,##,!)1T@L_;8RW",^)V1W'J*OUAHR.\;\R](D.TP7$%7UG'V`
  M<ZA>[:*7TG'[I31ZZ29IN]X/F?]I:V1GH]OX83F*;K"(9M8M<G1J'"\`D`R#
  ME5R+QVI2?^;N.,\TGE.=`830`Z>Z7R-2V!\_$N)DX+UE[F?D;CNSXXY*+X:B
  M[J'^T,?4&I;;)2*EM?%.NXZH#ZM"WL@@N]`R;=5JVC`*B:=CI0F&1DY03:(3
  M<J[WM%KN;*W5SGE^-!M0D_'H8]4'YCQ1:)>C!=;"BGH6!Q[*3[GV&B98K?]:
  MB:'%PX`XHEJ<V;Z+4E[:VVE"'Y9/(,2^5\H20^_G;*,2YC;D=9WRX.XB3[O)
  M_:F)17O9)RTV#,>QB^FH)&MN!)R8M;/QQSHFM3>Z-+;D(]"S%4X=7NHK,F/4
  M:BY<7DI7QXCYEUR30]+0$N"N<9X666[IV<HKB\M;HOFO#?[?\,NZ%3$V]V3M
  M3(<#8-":2SL6G:ULVISL-JS852R4U:TLFZ16TG8I)M7(\^II8OQ^Q]<B>,8>
  M!MJAI'.7$#K'6RF&<I4V]Y,Z$O_093`/R0P\4>C?R`<A5-`^MXUQS$)HM`MW
  M]B'%$628#%(44XY;?E\*^^XYQ\$%5X7CV=J'HOJ3GF^E=@<QCRUFAX*S]G&R
  M>OQ*."HF.S*TI)8G7=?+C#J5^6^3+9\?4SF;3JU\133]07W#8R`4=\Q];L&#
  M8Q!#3E6SI5MB>VOE:*HLV.\[2%;(WY*W0R2D.G:E%D@31-EIZ:@BTB$I8R8L
  MFV7=B"5AE?$&6NLA3S9UIO]HY5JQ^JC&I%9!C):HX<-W9^>Y=H23*XL>@:_J
  M8VGV*:1-..C_,/)-,=ZPL9=CV[9MV[_A.WC'MO&.;=NV;=NV;=N>V6\WV;WY
  MW^Q=TS1YTM,^29MST@GA$$["R[I'2O#HX[+<3%.#(I1"TS\_3+("'42&<DV.
  MC@B'X'N648LRO8]$!19#RW=5F."C-"FW@P>.TQP4^>!^6)$CTGYA"0XK;7U^
  M.BME\>*HU8IEG?YY\1L\AY'P'"ENX;HNG1U'B'YJ>U@^,;G8YO0;''>LC3AJ
  M<#UKFI;`U_&$FX.$-75+J%DA?V@`16OM'TFP,,'M\^M,R/D'66%SGVH$Q0D-
  M2WS\0[3F0R8IZ@..[AI<Z[U$)4^F:+ZKQ;]%'.GVLYM#CJ9J&X![#+?"RET>
  M"%"JMFSAAZJ/]"C4A[_,QS`8\`\U?W;VW*LL3V>9M[9'*F=M+ZDD1-NVN3X.
  M"[A979\H$4NS)Y.5,`(17R?,RS"FL4GY8J#-8A0;FETHB=>H#[I7'WR2"LI)
  M90@&[KR[I%Q11C(+CV/1L(C*8N\\<SXF1*!:&^/?@_E_I^/`[45.%I&YI*NC
  M%_-F<#&!P_O$+'<2/1-IB)@Q\0O70OXE,@=)3RMEEO9KF^N"U[,[<R9];^<4
  MY!9]28P/82H?.F0KQJ(;-K<#DGOG`QU>TJU3NN#&N/!6*>IO^USPH0E2*_4.
  ME<^KYX?%Z=B=.7K;*PAT'YJL<QR'X',&@47FLE_Y7O?DPJZXO$<PQAD*;R(U
  M]<MZ'K18!_X$!+GNQXF%SJ_BHL+%@&MU67RRT%,$P%=[8O:,8*J;CN]&K;S'
  MMM=E8H-NN)DE:6G71_GJ!BZ$6IUR0'#^M`F:W\:@D'BO@`-.G_0R:36,6NUJ
  MYP;H"[SH,3I+C9\'#:O@]^<F&'K)%F\O#8;"GS$64[]_.!PAFBX'+:4SR'4Y
  M)*BM=U]D;2_=19HS_MLF:8,["TROI443S0O@_V%'/`_#;A=V])MMQ$?.QHCO
  M?PG2N+'*J>$^Y+HN+)=(`O\Q>\=W/4A]9?QQRB]B3Q7B.%FH>;O=',548.CI
  M]7L,^#WZY?-R?Q_^AM>3MM.N<*-&4,KQ/V4\#(]HT;<KCT]DC'-B*VEE)BS(
  M?$SVH&C6-;P9X5%GE8&B>O=J&XQWU`8F=,AF90&*M&O5RY.`7HIRK>:S]NVQ
  M\O4I\UUY7JTCL?A>]BC'K/)B>.7,)Q19!X??"%K<YNBZ]-A\4U2[D.1'W47#
  M'*BG8?SFC\4:I5=XB`,A#52>PP-V!<9V1-K7P8@A;<\]8JH>V7EAJC[KKP@%
  M0-'E2K;C85:]Q?'KL\J)0W6Y3.']M/H,NY54RXCSL,:SA2Y8Q8@1H#\G\-*@
  M%,LY2NY>E4'EJKZV2(H'QA59R8;<M7R_MWV_^^&3N@,?J7Y_4CBR2I=UIF4J
  M=F1JS((6=/B]8E(I>3V;@69BW3QT1HVXU+;J!U"V(8(*1Y\0*]3`;G0W3>K3
  MF1S^H5?W#7T#DFT<HMR(#C(NO?O;51@I?U>U3$12Z9\G42L2-IFW=:[5T7!$
  MP]:4<,OBC<TX=BDD-/](?6,AOPR?'^1T:MX9&5MH<*,$ZLZ"&[:`/@GW7?4U
  M8QMQ?0&Q&+^UB1]FD>E.&Q,TDF:/^1G;P=/X>_>J<]4+7&R6G2#4D0M^/[WH
  M4__I6+H1[/^='YE^2EL5T'!N!L@,?WQ;'/X%-C.#"OT?0AGF_Z>4X6;B_K].
  M%N;_H91A8?G_4<I<Z\@DDK4ZQ.PYW/2\UFN98M[[W%%LPH1::Q0-)5]!`4*]
  MIP3:&EDGC^G:+WL-?O7-0*B(_$6<U116Z20I1"/6#.%AI(Q]QC!1SFXYK/=P
  M0WYE?@6\'>^'":]/AE\Q]Z]#['3UU/LY5!W:%24RA*V7^KHQ#1]O'@[<WPJ5
  M9DY:!V"MT7ZX7NYO,7=U[IX(Z:(;WTLEF9(VV_IQ"SEB<_3NEC:(F>]LYVP?
  MSZ:']5KT;K?TV5U]/MU:3P,;%SZO%[.QBDZV;/5NU_*ZESA^=;`[O>,SI'NZ
  M\3)_KN=[=>KZ62;3MX]"OY_04VWC2D@.]%R]ZD;.EC*;_GE&@_+.-D<Q)KNZ
  M?/)W.<U8D+?6NGAR,QU72]LEWZ-8[/41FTZ9$A+0[?)Y0)!^V;9B@G)&M#L0
  MB'Q<TPM84C;GP@5L[^\&/_1Y-7\_SGSV8REH]<`NL7`F^#E1=C0Y;F9R(:E9
  M<.@R#<>+$4/8<.]>#8(NQ@_MICCL7AT1%2D;?K;4[5<\X0'\5LN+%7.Z(@,!
  M(TM<P@;&&+5+AUK%SJ':UO;1CQR!KZ:?<N=7-NYDV?S3AZ8P]C%*"-(P:8=O
  M2"=O5!']3#W>&AZ@`A'"%C5C9&-0LWND])!&SR^">Z0FU?_0H>TZV5""D&*,
  MSRZ`,*#_J/@EW]6&B_UX0):QZ[*:C%_1E`"S3UC4?QN40E"B\^F`Q`-9TT^]
  MZ(V]IO+60%;Z26TX73U63'JSA)H<@&L.&`_UV8\'^\J)+-O!C`JB\8T0Z[,O
  MQ,!F05_"H"$J^FD3@[2+A`,C[E7:Q323(U4##7%3,9X;\)P3RYY6YE$WI23)
  M)#5`H:>!8J?=O7A'\MQ,X04-]DF3P21%HWG!RZ4AH[]2ZJ?H7A;JEW#!=EN.
  M>BN!8N3`PG?L#\"P84'`4R7JNJBY&BB=6V2!8($T$'CR4+,0E&#5H_]\U.OZ
  M`5<:@MD<W-]"FYT\82#U51]?H\!5?(.M;$ATY1J?,?Y0D3'/2/<K`3_B0;U!
  MGN5HG"B+6@[Q2PUX"K;P@8*7@99()6F'B34"\V.8OS!]ZF^^PNQXUJU!1YSD
  MO*.')=[]59((`#`U]C.LBY%703X"3F;ZC9`QG)$%N)8?!&M0`)C"G7A)+2HF
  MXA75C0P:J,`='`^0*9Y[L1`<@Y+&X1C\SPVE7SG)J6+3.N@Z\ES<S6%]*3,5
  M2.X5^N)^C$.E[JL9$FC"1_7""F<`>YTFXP2$+<K0I[MZ$DC9"I!+4%LQCSP,
  MGC&Z#ET<:Q#OJ_K?\2!JKB=)XV;LOM5OLX5+^.&)I%6`,[:]>.`%#*(_&TD-
  M"ZHT-GXP4<(=>'5I0B!DP@\JQ%/=&?@^QWL8D.5:?HZI)I%%K[O3?2BLU?RX
  MJ0^HUZ.S/C,F\]MZ&#`&K,+,QYFP/ZV7#L%NZNBW^?Q\\KB=W2$8ONPG.9]T
  M)40<!V-\4*[G$HZ_6&;(.`OBA'`+8W_ZKJ5;.3QAVIAQ_VYB+(*OE`&$.9#^
  MI2[.R1R&;FJ)'H7!D&+V'R(P+3K,66:@EX[1_*"])E`_Q##<+P;FW^20MU#"
  M7\_%2L0&O78U!.'EO5/3.[[S?X?4O+4PL0ND0?6;C"X&RY9.'I*\SQ1OUCO%
  MZL"&@-0@8'6W#/'[V+DIUI)1\XD`T9[O%EZ8KF7I0&Y+P`O!*3'+#1D#)LFE
  M`T%K,2-+[$"3_MT"W0O!"MCA^$[R')?\)'!8Z=KICLAHWFHQT.GI:-L1OD2N
  M4/J=_B`0H_=5YT,9@I$>..D$A$C_8+#[;Z6W>CG<FA='@59\:&\O[4%;-A%U
  M.%]]FP*1O^&^*?!3Y8*RB(!L2"3R>RXXZEE;$I*7O_!RV9.,X"Q%@9`0"5#?
  M$D@'I2."7G]6M$-@78O.,%IG/,)0S0O'>\MLI*$\`"%_R'`Z.M%+`X*L:IH[
  MKVGM#OKTA)PN#YQ'UYA8=HG[(,LKUM?5SPCH-2/N]G)-H7P6D0[Q#>'JDV`;
  MS28^U[$,2Y(+O!';.9?\[2*N"LY>`T&C$:^!U9>06GY/G,:R._/L-&1!(<Y]
  M[?R.D@23#M4#43*>%M'*?+5'['9H-];UX7'X3MHC56H.1->_&F2N!2&GD87!
  M[X9VC?;)N@C8;I_KS1I"[_>VBB]#>EW^^8912%LC/2=4$(/YNG]X6O>)1BB*
  M?T47^#Y$U\1Y/?9*H&H/S3C-GXVH+/<YL%.(<N_Z`U)\,B*QZ4K**5Q8UXA!
  M0KV!567ZIF/41KL+)VZ?QD#@2_^?;7=0-XT=9*KP&Q%FC.[JIQ1K3?/S9^!8
  M:.MMQ"]SH!<21)@N06@G[Q7"KTZPMR`H.,%B$A$B:PU*?0,O'F]ML\NX:%:4
  MI#GN71G[PS,7P3NR8""AYQ+BSFS;Z]40]7O+(S(NOR$BC6'0400@U(3`#JMK
  M)9\3/'OHG?Z,3&"4Y9:$R7VD$^H<GO%HC/3JHG,!"&)N!UZ";F[TI.ZS_T:2
  M4)#*[957'7V)V<XZM$I\UAGVZY\4X5@A>(0E'NJRM#V.CN3-*&3>7>25_.I8
  MX+(!1*O08\;@>7`NZ`-!BB'_.KHZ9!`_I%]>')GC[4560ITLD%O(XI.A[V?`
  M$:'Q:[RO2*^^B>2S<,7<LZ/A9=^KU,<EG)H+7'4:Q!C#FH6;%,RSMMB/+WPU
  MB%,U^$STG$V"\2DHRXONY2(EN/V1`S&)PUG#Y=J9\N!0GP((Y:6_,H9]R!%:
  M&T4(79C%OXDH=%JC?]+J3&13!`KRWSKE<PJMK"/2U]L6%MOH*N9XW2OY15P'
  MSV`-QK.5H>JR(%.>0"`>ZG%ISJ'+Y6_@];U$+2)7^TB_*@KH=>`45L)XR]O4
  MC3H*RTZ[%7I\?T$V0A-;>/H%=4K)JHZ:.^+5^6[RV[D;_KHT(!*C$[X%\!NL
  MBW;PA3C]P"[<PIYS(QW^5$G)5F.$WZM2I[Y=EL`JN%72O08*=&JZ'JP>R%=O
  M>0]XI.6"'LTPBHX)19I`$7FP+X]-(F$*UJ"?1#),170S$ER,:X&$PB(4*0=J
  M[ZU>#/M<*R2[\A]?1ZROH/*M+E:,/&YR`HPB^F/B+E6C`\'(O`K-8/H0SX6N
  M.E;\R/RE58CRFXDB@%+H>!IVQ6CZPB<5<WVX8G;F(>?VB<)P8C6"41YV#V&&
  MC[=V8QLH\QV?)U(%IG;W5.#ZO&"R3((A:%,)B^IC?`DM]?79R&G@VZQQ#]9P
  M`$K-;B_P.<G[&/KK/2L;084(D1%J).7L7>$79'?DY/0E?!4/;DCCI9<&%-]]
  M9GY59EW!>GY=2&.N+2C"FS#0/D/U(H.?H#8XO2XH,&YA.=],PJ<39N@?=RK\
  M;A.Y&#FO*@9O?7OK:L7W`=#`.K%YW0I>(8M).'DLOM@R'>7%OM&37]]T0FDF
  M63DM37?58K\T.<U>38X8;=3W(V#<]N`S,EO9^O)U>R+^J15M*/=2S?\"$9(/
  MC38918/ZBB-"Q_FQD>\8BF?34^R4:A$0$0]/]0%"Z^']3/W>'H8C>_?*4"3]
  MI<?F<DJO8Q+CP$$@B-^QN8*CV=RH7_63]B(9U.W?!I3ZQ0ZT%3D+LFGS(5$*
  M6EL)&*E'WEL_N'VO)&(I#.:C39%J]QI`/16OC(^I#O_V<DOVFS!G8LC"[:-!
  M.)9SU+)U3EN13J2`;T4?RG.4KBZIW7VV;>Y)>HO9@I8H"=VZIBAZ>V:B416<
  MI/#A)Z`HP]1A,AGJLW'QP,*4RYESL4B%_=P$Q>R#TRH6'$V>U(JN.]?`"6Y]
  M5[*!K]\:[)OJNN:D/NF[NHL,P^:4V47U7+`UD7@IP[1()B?'4Z5PDSD,F+)1
  MR3\LB).;")C*2>YH`O/2A.@MSL/02KJI_\AUD3BC$:J1+N<#LMH?27FB1K!@
  MZ4D/04V12!SOHWRP[4Q)U(IV8TDKJ"[-0>'2L+C<5Z9`!'9*@"Z8*=%NP+QT
  M[O.G#CHF!2="J+/RG"L:^CWZIG?R3;%US"K\H2+'2)?%P9L5.F#.2$-F0:I^
  MI'R_KD+HM%ELD&63*LW+5MS.(BNQD_EPP(3.6U&O)XK-Q6)LNOGY&IWZ_TK\
  M"M2&M[J;[#BA4>DHJTS0IY:)A-$+[.ZS8Y^SA#'^0&$DK<DR&9`<AL&X8/4.
  M!/&YB<*=\"_Q*RJ?R<SOGX[]99>JQ#U6.P+!Y[%3P:!(3;(8?D!+21IF&L0S
  M6.IKRP'2&.4M8,&VD+H,G`ITJM[UP9#C3'4;1H5\XV&DI1"@S94;ICVPH1?^
  M6M;T(-#HKR9#;<N@JRP7\<TA=DLT4]37B`MJ,N>D8CB97AO;-PL*OB\^*C(I
  MYG38-C>ME-_EC""FJ<JLHHZG">.7-5.J/Z\T_MD+I@HO#]?+6_R9SP*!?V48
  MMTQB:;8#;+ZF-^VP'(>/AQ%&E!/5N_7*`%MW98X<LH/M<_`R=.`T*C:YD68"
  MF[%4X1X68=^2#BP%A+D&#=&BV*>JB9#"[QCO32+RQKC&@`N)IB+MY&_HWV6O
  M@"QJ(H'L[]AH+J:X0",D2K:B$=F@H[*\O-$6089QDEP"/T2OJT2S#KK113))
  M/!Z,@7+;@I+>11M/?CUYU,TK2UZ#[O`\L3&A=C^/NK?,#J#:CQ9)>KTS++)7
  M$&W0=Q@,XTOR@REF1;0:LUO'YG22U,]RZ0T<_\XH2X[+M^G#\T;#UDR"16H6
  M&@[8:)_KNI*#3\^UR%/?`B8J42VRXI,@[5I2EN@F1UK#318F":3:"<SN5G4"
  M9?5`6=D_]>A,@+LAB==CY[>-9H:LLB@F#RWP-L;B!I`POLQK1UJ%YLIDN@G*
  MATIB)W?M1/42-'BBF4QH#3S^;EY"--RA91$SV(LBW'+@5%N5W'9(/OVW6M@1
  M8L+I.N,Z">-(@<?J#IDKVR_IW?>@GU0O-FD-I#"PPM:GEI=^P?OX**]86`!.
  M0%8(GMBYS@G']%Y!LK1'Z<21]]V19S_OXAMJ4&C.?_CGX<5*XN5S3Y!YNF=T
  MGE/0SS;\M5N5@5Z:(B,0X=MHIR*\?D'%:8B#YWX;1J)`&PZ'#?*B&G_Q1-&8
  MCU5AXP<"-[$$_V5FAT_)&:\XQ^/$FQ`&<&;7=F0`#!_FG=D6'[<TYF4ADA/^
  MFEE13-:SX-P.#`2W],#'XXE"^?Z!$RZ+];P@#_,OYLT[&?)3\$Z;EB*6N%S@
  M,/(HFA'>XVRA`TU.]EU?U#89R]%_)6B%]NYH_1,C,#$&,9_,J$R$_G;8_F""
  MT1;*?[RY2("J*-U5CF:XCNF$W<R2'$@!\A?F2\7LO*&]A&N==DX.Z<P`%+S?
  M([DP3<O-&+E[9/;(CY,DMTG74Z96ZDR\('*R)_OB@HUH,,Q=@=BBEH@1RPC=
  M'=IBSBX;>:WQA)KJ!16S2"G-N*[4`UB8`@D(B?W+F]4^T`,A'MTNR:'?:W;3
  M$`>/>WIFM&OPB?TIJ/\=L*-*4FI2$*Q*1[H/.%D9!?F:,%;S`0/C8]%N`.AC
  M,R(_EW+-I-62(KCOI25ZD/:KVO4EA_P2MFO4#](\R=2'$I__Z!5&FD)6JC5[
  MS`>#9=\+PJ=>I@7\W02F#JKLX"$/4A;7MVL(Q9O@6#BT<?_ZTSXW_CQ*!._>
  MB175<OMAE<9\?/]JLC5Z?!_ZX*9!\-M!/^N:'CPG6\,,VU6!L6J2/FS#CK6S
  M%_M9@L4:VF=O,:6-DWO#QE&TDF'KKB[VL5785&4.Y]S!AUPV!\EN`@=\9SB?
  M__*/X+8/.@'AZQSD0A,@97`/L5ICAIMPM1!\C=1PM9,ZK#ZU1\9$>\(MCH`"
  M%W6T^`=B^<O_3PDT,(E<7HP;^^?*<K5W(7-*O!Q3(-D^>?)W_-@K9WB[]EPK
  M(VW%@O9(9%#@\?OV<*'>MTGT&7T1[SO,?N;"ONEQ3^!BB)W.KRJT8*#_2E*S
  M?#3!D;2_9N-1@O_"_<B%=5Z0PP,?*'G=V*()+#H#(_HEA*EG+;?NK=>:F'"8
  MJ3OWW+^4<))7N"U`HV@9BH9GB>GH(0AZZ*XS_?RKSH#MA-%O8R-\6B!V#;/<
  M;"5@Y03VJ0>FQQ(J]$VG6JT!V7O/VSSUF&=%AIL/T5"!70G&4$GK/&/$*KNB
  M.'-P`J(7Q$,X<=+]NJJOQU*W<OGN$8%C2H@[M!/#2KW4H8ATQ4+!<=ASO`#-
  M\M-7.WO0T"4&-5@%2ZPMY"V58.O'G9>1S';SC-T:'>LO_3*^-;IC]_JXYR3[
  MBH".3151D+%5,7KIBO3!/O_;U3S"))'UQW<(6^BZD.NL*)LRRZ+BE<@F^U6<
  M$TY*'&6^`++6(1M/3*^X>!`@HT#O>"GO:PHG=ZQ88RT<;5R[&O1@<TO8+%K&
  M3'0>"!E98Y@,UE><7S0A;-$#RA*.S#@=ORE^<Q>E8V3\I5G%5Q2$UJD*L:,\
  M4Y)@>[CNI+!S#8:HFK:"M!\SV7#D7+=/+Q]HYO!6*EIOOQQD:SM7#3G-MS&!
  MI0%)JHX#X(B\!GY:KP3IUH.X(D1YFL)GEV![<?7-AVM&*K_&XA<>EKS",5*\
  MY&7+&E]JZT*,F\33]-$/K7)-`8KLY2MS81*93S.[;10+)#*'J=&"3X37-CYU
  MWMB:Y*"ZAHJ!G=6-#V2X/Z2GJT^8#HDH.R?7VJI3R<P#+_@DIKDBJCB6:&QR
  M[&/P'/G\0A>*=\:M".:M@.X;.?Z7A(CMJ?MJ5(>$T1722VI.)R?L!,PDVV6#
  MR;KLNR@3!@U)P8$2L:P>2Z:V>J2.*72^(?8T.*7><#S;OX)I3DG=H:9"_]/I
  M#^"ZSJ,O"Y;F'$E%/93IY^`8VF)L9X+#I/,53131?WKL)MT)F%,U-Y7!C^!N
  MZ#2-`8B8JHI6FUVGKWU$J9CT'"3L/ER5FU9G3]A^&&>+W@A(WFKO)ET=I-J6
  ME@*5ZEN=0,\9FO2H1YM;KFYDBZ_6E".70JA]QS>#"-L5.!$T*L=J*WCD"_*)
  MK8BD*&"0-F*P0SI?U[Q@PJ]9W)!=[2\3\ZG-8)ZL0J:G+^Y(""S<^-8F/!SV
  MQ.O,=A_7WQ:0UW>UN.H^[Q_I%C9</X=N(P@URM`XI*\O'SELOE2=1E282:95
  M^X[*;!"(@W6"VM?RCK.C;\H=GIQYI>A")9`7;D&T(1@9KQ7W>B:#O]>@6PZ<
  M$*,.V=MIB8O\JB'9R8^<1G1!N1A;-"@B])OCT@8MZ'OZP49QV7OUN!`)\!F=
  M5))AHTS6]:<TDC>!_Y*X^K*;"['!-(1G<9W(5[$0,VF*+6IC.Q?)R_IGZ^"$
  M.VH>`<%^EQPM-@NM3$P[8>C2]6"X63DR@])[P6965U<.G%#"]4N37_A3W%/%
  ML)F6BD]VZ*ARZCY.^:4FJ]&]P#MDQ?:<]M)0D,`:9H'*#GS*L5C-ANT>KZ'-
  MO`Y#Q:B@.2O6K/G1$]"<C^=.[2,H=AW&?H@KA]'/Q#K"B;>>V$<\Q.8.G$.N
  M^](IFZ-<1:<U$-I>DS18,[:,M_`Y7:9=S`R+:\W4`CT96GL3!@X\)@N/%,+&
  MB&)WK@\U36KJ)&<SSS5P?91+.!N>:V)7?AKI;8JC)>FAH'B@O=T:"ZYC#UB=
  M$*-U-'!7<";KZXHJL0I5!XO^526,&M-P)@&[F+RH;J=GD_*`S+^2UXN-:VCH
  M*PL+YC8&(;)9I9']%IM[M:&Y6DPV3(RGSWL!Z1KD414RGTR1?O_FTGX'6W!N
  M2^+HMCCB?'=,[#$4E.#&8!%+U#R\KATV4=.^S$_[&E7^=57!UC9X9.0.#*--
  M[6N\7[YAH?/_[+6P'E,Z++\ISW*AZ(94'._A_TASCZ),VG?1_/)GK_U373&)
  M-BI5\"#5.2Y]N.'`IR.M/4A&D+=@F9C"("Q_>_>8*D."[A:XDNZEXB7>#GC2
  MM4S/T3^W(8KJI/T06E?:JKF^JCJ\.P3PXIQV5>YJ5&GG)@T:#5)P@/RJJGIJ
  MSAZFH)H7D'8N"/R<N</,^BCD]`H+P`[^W2A5ILF='";$'<6G'?;X84`1=T=4
  MV/."4DB3T4SH58#M'IO9!B;@V%3=3MD6!5=7U'\B^KY:+^X&H2]&Q!`L0O@1
  M4U_EGW@"W@SP1FI'"QR7[G9>?ZVJ.W6`I#29A(!EO\,94?(+V<8,W[VZ2Z4,
  MCL\G`YT=C7"WWBM"HRT5_IRHFW@PNEUX*O@>-\0S"U*2F*]Q@PK"H8YVK(M6
  MB#BI&@?035@.S=(D%0W.IE@&HSSV7CM$Y;&UH+$[=:+CB=W(5#0XU`8EZ/73
  M3`_%_7MMLA'5XV?8"-4OW\`FR/1)'Q_CT(`IY,R+><M&_=%_J0O`1T_#8:PZ
  M1W.<JG8'=8C5;W&(NJMV]5%$8UH'H/U%__RLF97@V[DDU7(=@K912JFN7+WQ
  M&=1,2G]/0P/*F+_L$R?K_Z8!ABFO&1A5VW;>W%W]"=L*X((B*4\_UJ:.V7J;
  M6WG#TG.(LOIL[UQF[_LB(`C9(;/UF4=7VF7O163&=1&;.M\^7;[1+-V:>VE-
  M'-/=NV3(?^47;!SY>L$S/`?LM!(:Q&/W?I^7A(?5I-*J_[TC>QY:DT35*^ZE
  M*`?^"]ZQZPKP%DJ;=N2?7E.ZU9^=+U8LIKF5>FC(S<3?[0X_E==P\?H7`.4K
  MO+Q17.+/7B*<F'>;N2Y%)MV6)5J]#;(O'&W5/A8-9],?3VO4?<T]S[KQVRA1
  M"\&J=^&?@N^*\2U:O$]"U1#-M6+XXX[YCV1_H*4<5<8KZIV8F@(MQZ<Z<0`D
  M6Y5[CC[FIV=H#GDYMZ+.S.M3M#^#B\EB7*9_4X]EY0'3;;ML1,2PO-5WTA=B
  MQWQJI7.BVG?;\<5S\8]SB0&T^0BS%[;H:8E>4HE`KQ/ZIM:HV%XRKLV!QCX^
  MP-..J:&)U7B96;R(3#1?2UV[ASS&PMQ"HZ/`WLOS[XZ/]1]2[:K;;`S_6<8W
  MCG5P#Y&,=#(0!L,Y!IHM?16.)1%ME1<@$YTJZ0ASJ<"#<,YZT)A;;>6F`P>[
  MF?BY0*86KHONX-0>#J_\'?]E:[;;4(YOJN.\.MCA,=.08^W$*X.OHHF'P$':
  M[IL4G.`Y47/WU\9&YJ>^)"Q.5RA^H6D#['$Z$:[!!V+O4J*A#^%$\E>;^D4[
  MCQEYTXB$&,F2K-1MU0BU*'<E"7+@^4=1`5!;4M=9;<8PKGC7/"F;_J5/`I6/
  M4K04<%A9E]A[OQLH]^^9\E?1GU44X.:6HS90:GI9A8GVH&7B7T61.-6HD67F
  MU[MA#65JS,S9]M`W9?F-2F5'YORC7=7U/P7:)U=P#N"!)]"G5$QZ[-RP[+8"
  MA^C3%?SLVC%T7HF+<WK^]*.?FT+;G".L?.\-/9.YO727N:\_NCE8.1X/>Y(R
  M`V-9\?2`C5HH3(L<C->89&7_PXS]8*;&>DD"<V$\0464LX0R>>N'BQF_B%=2
  M1T8.D3?'6!A+?P38ER0%V!UAW^#.,(H>L\J1C8=0P$&4RO3:2++*-U3M[/#G
  M'^%C2HV3E>I%GS\N&;6Z2`,T&LD+>-E[_)=EP1:I*KBW(C9=;:M1Z`0"":5Z
  M)RDMI3,JX20JX<V2@P<,F//<O=`(\:8%'AM&[#RN8J3(B-E7AO8%ZP\R*7H8
  M+YBO,5Z)[+B,A*])MOB=;%J`4%$QC8C/WIF:7;5$*&:J*T.$'ROKC5</+.:N
  M(BG(1YV04#U##>/92TT*'?J2]RG1=9=S<@*FU]FG!B`BO-LY1.9[/W+D)A\-
  M]ZT^`=[[N`L-FVS@-<<J':9HNSHL55IR@HQ%T.^MP3>58H*[#XZ9RK2FJSS"
  M&;ZQT`RGOFD%HQ&CWK+$BTY5K)ME8BC)YR71?C?6[!H$Q]\PP7\A@JWH$_3[
  MMSFVNX21(B_)Z/LL7V).QX)9IB3VZY[\N8%["(R%7;5H8E>Z+<DPU_)&OJE8
  MM$]^=$8JC6-!4%9.-8'\.?+]QUU2`&&S$AZX%M,4$N#C1RHHJU.%[T6E$.VN
  M!3.7OS29-_'E$^BT8".=E<-\(`$I*6;"0-ALL/[&X#%FECR0KV,8;`9F[Y[-
  M]`2SS\^QW_@&O.=4W"A307S(.]KA(US01Y4PBIX&&ES>"F0+"RDWD6@0?E5F
  M+^^(_=8^KH81C>EL<4HZA!\_"TB)6$)YP%=+573K(R3O#[D\D/-OKR%7;/B"
  MA/G]HW7//%72H6PKR]-+[;DJ>+7W'$XW9DM&S5$'>98NSGN(E!I69GRYF-WH
  M.M$X'V8UCE8LXRE&M;622GS[WG_!X'U=`X^^HW,&F_4A;1VDII:1HJ@T)71Q
  M=@J._-SH$S2332DR.5K8L@OB1V[VXF!\!R1FCQBU?-B+O;U/7RU2F_4]X73[
  M+TXU0@5OS?F*F^7K(%[4-\4\N#3,3B-".RBZC7?(SU1F9@06*-%OYO:]34T]
  M&@]*IQII@CE=SL`=-&0;'(M7TWH'6`5J#/L4JLE8:6/2MW2?+=\(1+?`38":
  M,_/9=.LM.[$4>M@@A!I7T>D*.?"#66FT49:=.^H+9/>)$=@U%`H[H'-77X<#
  MRO23@">K%S4([#$FN&E0N%J/U9E-1`R-'UY:)NFK5D&N`P73^<H7%3S&I-B9
  MF.VP!N!LCI.Z;Y$]R:)ZKK@%[NE2PSL1[Y#(R2FMSA`Q?R&?U69X_P?#_7^8
  MZ_]M<'(QL_X_)]?_9+BY_W\8[F,=SUB\UGC(?[_GRG3V?0:<=TV9=BRAO'M9
  M1WAZ*)OUQS)`HUQ51<N#"2[H%B9:[T]JPV;Q.OR-C1?-1F(<QAVA<AB1O32J
  MZ.,7O=E3B5SI][E?NZ&,M]YOP;SN#R>Z7AXD\CYZ,K.WW]<Y8[^LIQN4A-NA
  MF`.`M(!DU=PM7R^%HXM^^?TA:F9N]W^_Q]VU"H2YPNO2A_*[.<*^TC3.'M@R
  M$UB>'W?6E!16T76EJW=L__M`A/=*A-J6EMV,R[\%58_[Z>]?8*6@PB9SYFD:
  MM[S3'](\(M44')\0%ZM[`&T"#&:UVW;$;LO!I*K7W\CPL!A"B=2;7P\<;J(`
  M[K_.=+[\O)O4IQ270^?NAOXP)F'J^XK4#J`J,!>S#R.@7O,1:M5NXRO=P^K7
  M7N95[\0]G:@["C?&E,8>Q?N%TT^7C=G+/@VZBG_XJGM1W=C(LN3[)%D_H3,^
  MBA(<PN7.`3RB&[Z;<2H=+$''M->"UH]+>;(^E,/H7ZI*/8*;TXF99G;@(C.6
  MO-,[BP0L5%4/S_R,U"IO,;@&C/[@CDPXF[.W1)_!:2`3(]^"6YV_D[7N+SF.
  M+./[?X(`CP$MZ7C4GG]BFE030TN#K`MH7F`3<KHL0-N,N.<?1HR(E3U\**Z*
  MNN!+=[.AN:%I24W9S+F;2WA=-L+&L4#O&+[9L+)N/-Q5_BD1Q0+!\<NP),YU
  M%P'E/P`TEP?D_B'P)8W==KGQ[2_QI@/24*)9;.0DFAZW94]5@Z%+9ZV4"8E`
  MGXR?ST&E`=B_@Q1:IY#&/`N,%,A.%)K3>?6$A\KL[2QG;TSPFIT\/6]/\*K/
  MDY2+=&SI#2.;5E_8YKG+TH>8R1Y9`FB&#2$,W(F2!G@+E=27C/?42"3X?2[<
  MS:>P(=6,"T4#XK0#;'ZZV2KJ&L.L&CZJ3_0^4$6-F-'TMP](0=JKV2,`+%)&
  M:)NMHOGCOOIBZ2HN+D;X<L7#B0+KPI568%UV)[ZL/?L)Z1F`\V]A)GMC.IIY
  MY6:9T=D:^.MCO=6%OOM3M[[P)FXMKX&PX$21W^&$+(]88Q@1^%,,LX_2@%-E
  M`-BAT+.E`S%#O10-G[ER`HTY-ATZ/!Y^%QOUG^UL$PSJN92'($J')=OZ1JLO
  M?EF1#V]1(9"PB:/@QWZBKGI?DF`;L!R$*AP)N_;7\2L=U^H!2QYN;]9B[=4%
  MLE>;_0-X&=UI]A?@"+FTTO5Q:WK26<ZGDH[C%,_+#F(P=ELAJ^7[2X?"#YO#
  M&>%XMU1)*`XF]FAH,![R=%I7<_.53_/1V-O$4K7H$0DN&7JKGQ5L@;+RC!QA
  M9,.D%5%5_NS&C:]WW>)A[*D&9<T1RSC]1D-..M.ROF4W]>X_-9J=W=&*)068
  M(?%6JG(B07_*O(89Y!0ZB7]>?KH%MQ,U-U$KA:@KW\4"`1A"5CT];:]N[$+,
  M4ZHQ?Z2N^[*&4DJX1ZET&QZ%QM[ST2EK&,RN0&,GL*`/&&@/6.Q,/Q;DP>;4
  M7-3A!"A<!DO'M/"SX$KUA%^9,.J\%00%$Q,3Y3_Y1\1N58/'4;4.K""H(4R]
  M'G2%2G>7<C,9<[&0^PR8G2.Z6"CUVWC>8'^W>;DOYTG-@;5_V5A?+_MX<@OT
  MV;&=I<7`:^FKAG41I%6U8&]&I8GRN]"WLLU5$7Z`K^R92.RL#Y'0[P*&3W!?
  MSKEASU^7\32Y[15L2HO6Z^"8LWBQ;OH4`^\1;R@,&)C1,R1L'45];"&\M<)V
  MR$85S)=Y:\8)52_E+6]R$@&0=DB%3S*V;6!4T_G7U2C1.7&*5,U_TQC;6WR$
  M=G?D[M*>GBW)4MPH`^N?(C6;6:4S?=M[D#B>'C1%ISJHV>]NIN@H$7VN?G/"
  MU^7DI:3QIQ"IL-F>0MP"6:EVV('6#.&M%%GII\`L(>K:%E&:<HF!CDUEJ?O<
  M8&,Y&)1V?-=+KCHA!+G';&O93N6=N(NY6U4S%X;L@X:;&QTC<APAL#CQU`%T
  M\\MZR.M:H'_BNX6:W)N=!*P7=WQ>!SO8P&I*TH<R"RG"$CLI@8)1BU=EZU!`
  M%6GG;X&9B1!LG^+>XD"9I3#B*U%N_\XAN+P:67@QN1W1?[^\*I]M$*J<L8#5
  M<5(QZB)VM`PG./(9$=O89H3SEUYJK0LQ[0VVR`M&P'I`J;1_EQ![B%](?:+*
  MYV4/#;#I?S'-L?O`^`@AW"*YC@$/3@"=&[#;DCO,$HU4#\%)A,(2.7^Z(GH\
  MR523[*Z_0/OO80'L#;ZM7_JK,Q'MH\LL7A5-%OOL<;M.WN#_`?8UQ>/?_G:G
  MU`H#60C)@:V/EF?Z8DB"T)Z37+2,WA.H_0B(K=-_!<\3$KD*<V-'_1SHGZ1#
  MN'[B1V>G@;HE!/(WF))+_0D:H58W1%:HPT'1Y/JROJP5+22"F:GBLHH$.MU;
  MY;?<[IFTP79G\[,"D\D/-\0"^;2A.3CJ';-FIM6RJ,7&%QO@GG:,@(-`I*!R
  M35R.6V.=-B)DQ@K$O1I955RA7(\DFYD/U7M#!<-BP^SF*^^?!M[FA59.2ABJ
  MZ5Y<.>S$.G>&N0)W;H'MEX7`>I8\T^:]G*P1K_@2I1405=',)8$2*D/B*FE5
  M-P@IUA3CQ+S:PW[:.*7"[I/&4[;98R^#,0GJ=Z:4($PNUN&7HI_>\VBIT5U2
  M\DS9414R5]0#25+PXA8'M4J\OFZMOE]QMTKH<M2P>IB@7<-PUW(@[`;&IR8G
  M[/_(EV/Q5ZR4;E7/)X^.A<Y2CT)BHS>LDU$C3H!<HW#K.*A(L+$FR;+:&`Q4
  MRHHF1R04X\=GH[*6L!^Y?C`PJ](K,CSTV'I_\..@Q2^N$=]*VSXSD9PO]+.E
  MB`JJ+3_>&R+;WK#TU"<,^/GQ4+^$@BKP>?LD&5E&NYQ(D7!*KS":#GW)0);D
  MM`Q+'K6SU6ZL_>[[VU;>NFMG"Z8M8=9KAHS;-35(=24"O*?!V]GS5#`U"P'Z
  MURG;2X=3(F52NS#_QG0*HID2$=]%QK[>T)1+1,9EH75]&46_QN.F;N:UBM)^
  M6F3O/!8";M0=GI]IJ(JMBC%+;H19'Y('@GLN<W_\D+E1)7U"O<MV.+3:;3EB
  M$[HO6I[>P/I^$(;:Q>.Y*(8;S''UG[?;HA*D(#2U1W,7*XZ:NN<=UE*EHB,"
  MA2?FQR9V.,B5A1[DRU3X;MILZ9ZM>"3FMUK+6Q_XI2@"35@;,T",;;&@'Y/(
  MP[\J$_*5?Z?9!7$(X5PQ"=9+!CCQ?;GXJVK*LA`&SQ&+VY,ET+QR-*NX:S1N
  M)D<=+Z$#=CI&6V@CL.!D&3V]M%O>N%7DBAD:2@%8#T>]I_)2I++-CZ9?#`&/
  MVK]BG/ZJ<QZ9\H[;WNDPS,2$/J!+&:;\7N5JQT%"O5=\^];>+%8,X&;=0=X`
  M61"T/%Z-Y4Z[.4\V8(0V5M%4ZBO@B)&UZ)2C"&#2AQ]&-)-%6;U3-$,_Z&+$
  M=$4SY%#-PF]C@DQ2M1'=*C:V>54[W(HI)=!<CG3(9PQMY,,YO2P%-(/&`ND>
  M@*6^050-UFW)R[GY2\CQ%7SH#6U^=T$0"P!4X.=5HNIYU"G!",7W.0]J+P!1
  MR=YN!\&"_;;UG!T+5>T_Q6-3=HUG&RZZ!<I<^X<^W&_(`SPT'0JXJPSJZSX[
  MC>B'-ML"DAGG3)_%?))_Z,1I9\4C#->3YU0*EFE_CO9W7A+-3R">=MP00+SV
  M^Y_,#-]`'2/K3PXQ`Y<#NW\J5*M5$7E6GX]JB7U>0L=)[JFO+"FT:^H#ZBRF
  M?TQ>/T/URM);R!-G=[KO61:0Q:*%^@I`%F%U*=B,#IXRB4SX--N5]SP+!'VQ
  M<VD.#V"BHN"4!K68JXBUPTG\7*;_&H&N5OM':CZ'JC[S]$,.]L=N+#[6B%CL
  M\8%#,T.]0'C<Y5%;J^T[>WZT*&Y*3?T-O']R?5`E4<09GH8YTR%VWPE=3VX_
  M]_FI^\0ND8B#<`69)?U,U*':T4@?Q=H8'_YOIIR/B,50R(]U$YBZ!,#JT!^O
  M_XUT<7EVFXK"E+"\)U9+W0<J$^;DV;2J54O$B?A=C:#3**<MEU+KP^ZXO<>Z
  MS\MJP-/88P8@721FQR+$R==VV>"1@.DV'Y#+O(#S!EBY,+EMS;1#D^KS<?YZ
  M[R*YLMQDM+[[)D!H#&9L$\U#"ZL_7U$6RO@(T3]<]>H6VJAM[$)+@D!T73#W
  MMQ^J*'B20M=`<)=TG':R^D,"%==6@!-E-26MYE0$DC8GC>RE[(K(F`SWAX-+
  MX^DGF\C58F_,0K(-7J6&_:QZ']P6#BI&SFK>)X!RLD8)'^WH]<UJW?.J]O4U
  ME!]O97<*VSE8.?^MZLJ^(`Z8)%-4<JB\0HC]FS9D#-15X?,-9,'#S!7=;L-"
  M5J"2TWQ0Z#TET>M_\Y::FE,7U6%Z>O#ME'[Y_FOG67HL095WN-9\X%M2\+=C
  M-8&('4)A`WX1VM1.-;(LW%+(RI/TS'E13.XDU04<!U;,XJA5!*$JOX)%$%<.
  MW0GEGMX&*XU\=:4N-SC&8_JYQ9!9AU[7,=1IK7Y@@(JYR;RH)Q\GD89@[WPE
  M(E<]NMN`^VNV<L0'+Y#&UAVJLIK>`R(9<QY+D1R[Z\*/EV!#GO@M-_9!I-+>
  MB%6F:#%!D/)87.SR4]5KI$5HPWLB8I+>@HCDLP`]LR1L-*BA;JL!-J7<:0@2
  MK:PYL3?_Y\DGH;#Z.[90<#PN7/@[XOB"7J7\TJ?7G\9;X8V(C.<-[?L]+%MS
  MKN]/_TPC%0P680P,UX_\[H<^(\=!]G+F!U2>H@Y65E"GP71]G9EJ*;CCVNM(
  ML3248'DG9]OF11U3]_T2&N'C)S;.^@%"E+5<]-7MQH;C<(U4;$C[N3."N<2_
  MN9\4(7)G=\>/+)NK`*T0$JCIH@*_9P\W[-,.9&=O:\7V\0D-?$[2T3L3%<[O
  MJ_T.PDZ][)["E"B?#PB.FHGS#:9QZ<<TDV-N24SZA//;I*ES@9(]Z-OHE#^X
  MJ#MXS$?>L.*217V5;='+MW)F4C]]^-,(Z:&4G'A[#.F`[X,6>+[8AH5QIEQ"
  MG!-A))\^VP"DC]^9BTKBFEYK_]*K-(:7S"K>0@I"S!AY4(&=5MH_K4BVA\8<
  MLGA.+(2YZ0`I2C`-1(`77<V`=*DHP$U>QZ/C^J6ENHK,JV7-9;#BFX2N.F?!
  MH+D3;G<RR>R<_TN:"?6:[%Q"/CZ/-\;GC_@E1[C/UE*)&*_/<`E>2TK%7_<E
  MVQ=A^Q;.,&ZIEKA>FS2B-\_%.S67G.KBM_[W.8.%CD%#T>77<]?3&YSDB[5D
  M+V``Y[[/3O5TN5%7I(4>^"JU+`H3$4RB_B\W!4>`\_C[XF^?,1J6WHL;>Z_*
  M6P7Z;Q^&YU=P"O41)2$?H9&`6:;WS,M="#W*:0;?,)%_A*L2%26GCK6GJAKO
  M06[2?B4&$)>]"\NHW"!SBK@@_"]?%Z7$/6Q+)*4.+`0K/X1XJ8&N$4D5/*7J
  MP3"N?+>M@4JQ7PAJ0HW^['V4?M]B"+ENOBCA\!AETH9T$J+!^=[P/_(&RY0E
  M%:M;1C42^C9'!7D\K$OB0RJ_Z[!`L]0"@QXH!`;U/&LS1H-W2;:T`7VRYQAL
  MK([[,3UF8D[GR7!)LH]2&1TG&4['[2]<G1F>A9GS(R.I53I1P/9D?B5"FW0+
  MT_=/HOJ>._@)F6HTM*NK4)%8E9IG2B]IYZ\E.W?.A`Z\NG9;Q*G4N/"*0'LJ
  M&D9.;?&D<2T#4:PPI46U6FS-Z*Y-=Q9+9;/64CP6IU7ZO[,IM^KI>=0YMF]3
  MUU-Q,'NT\^SQT?/O=F-4[K@P4H2MS\/:+JMLGF3YR;C0ZF?[=?4R@&9S0C2E
  MP[(!2,K'QPZ;,^>XB>5=2^)EC'MK?C6A.R&1*`/$'CJQ?>]7E1JKV\M9I)CS
  MN5(T$$STI8(V[EZT@X=[-;"BB/JBO*(D.MG=QM/!E4M5^Q1.Y'#S"WS.UK_+
  M5T\2;X$J_53\W\*0T$=%0WW;32F7=T7FIC$T!KLZE_;'MD^;M+'@*VA,>M=7
  MSO6U)_)!.8Y+RK[O!]V@)I+=R+I%Z\ZF5C?&@5*V+=&0B:'-RZ>45ADAR?PA
  MWD4!J)\%MG32@F6"XTR4$((YWU3"C^?(:1P=:S-'$7AU&,QW)"4UIP%7CJ3&
  M'.Z5ES)"$X)8YCR417R".4KDRJ3(K^W:UBPVQAOWI$C'>YJ8K406Y<+]$MMX
  M).._O".13/).=.1\ET7T!9"%9%$>1>R[+3EC(BS&K`.9'(Y88Y=Y@\>6R`1T
  MBQV3=\S[OC./F$+!WL%)`39%CAF"K#(8S%%0U_\@K?^M=T/C)?LC`&6\SO+9
  M8E1TIZM-'B">^*))AHLSE7<?UO;3,>)!KU<;,C<SI/&5%-Y1`[.\JC(Z[-G(
  M#E1K;U[U@>N<[[O,'3.=7K.8XZV6TQ;/;4),@-V9FZ>0QUN%U/6AM1MSUS#Q
  MH0`<ENZWY&:6M2MA6)^YN@T[[KGU0F"+]+&F\UAL#4&'.^X^>Y=@K:@?[>9@
  MV+5FY@:Q\X\_"E"U*@ZX/NK^N3=NZ3K=R*>8BNSNCJ[/O$B=K'X4K"A\D:#K
  MYBIZ*@E.;J&2.1.TP_;\R377;MV>'1;OA-(F^;LXIXEU<Q\I,*Z3PS_%=6(M
  M._:F`?F:[=26O#;M3NGXQR"D/*G+]SX)G*HC9L9/A_%VS&(L;B8KFWYV7:-Y
  MT.+R$D5N$\('63?!RF5T'F#1CY@7CM`K."CFG49>W;M<X04'@V^O3\A`MTWR
  M4T=&,T_=6_GB=$V+M/>D_V:A8^'&&<XM+_8EY:<#+D[?4ARO0C[9_RB6#)>@
  MZK9,D;8<[IUYV/&`)@DB4/TXV)'<*]YTNO+$HJ!HT<0J.$GV8J&#\5KA^3U.
  M27Y]BR/9;/ZBG@BP4VYC?,O0F='%C?6.+QG!O0J_I=NFCL_(Y`<4A92`U]AM
  M@Y$$W/^I=2F\3ZB9ECFY>(;*QFPWZ&B*$P\*>Q<UY?88,8A[VO4E+3KES?T)
  M\(HZJKG)6,P"51V>O%'!%2SCAMP53/]K1X141)]80(5.47JU8E@+1H7:6+TV
  MFH0"B]JV)PZ(T]HEEQ:I+A.J%$Z%+*`RN5G%Y_]2CS>^:7(E--X3_.G+2-X>
  M16[B2(RW.J&C?3<J7%)2]QHR*D7WB9J*`N`N.-V]<-,:=3$)&F5+*[6Z0K"9
  M'L*SGXLXTWT6B9V%?P=ZTT#8=]3=[ZW[H-I1!DM!\QS#1_%Y943S"3920%@=
  MQ3N]I$>ES1`L/7D9%B50HF#(UH5VU"(,Z9G,U0BDH!Q*?R[N?**&)M*;KWC&
  MP<E^$(H&<!QW_\)94_+.8J`&7TG_C$2FK<Q+!X=[UYD'/+4]YE/D%X_J&QU0
  M%T#Z<-)`E<L,B%D#E^(],M/HH+`<++HV^U>@R*!(R@H["7]$)-J93$`CIQ?E
  MPQ)YVUKW&>OE)<6>@I8$O>#C-L`6R6GVY!G<%K@J07O@A.YWL;E/;4B10E%2
  M/9^+6S7]*1K97!&[(IVB+I?RKCY0^P/Q%PQ5MT^Z"9T1Y(F4UU1EQQ6.""U^
  M-)E,]K0=&0`1^_#\*,KSV_)P!MZOZV79]22.H=7(B[P0&CM01"JL2/+;V?_`
  M'BE$`D8XS+^/S:J.PO9+8<,32,](6T-I/L%5S3QIX_Y"3*P,SWX/"E)>`DVZ
  M9)8?<VBB'OI1I=@JKNJC].X*.&HGSGCPLW?KV^$8,KE"OL"14RMF$[).S($=
  MDIJ5X]:I*U.0']41M0"3@BPF(.*!ZD478NNRVX4E='`?OJ/@*]E(4G7_B^NE
  M*7,:Q1".M&GN!FUH[`6)W"(WBFU0=+@)>K4XI)"O$UMI-;!)7G<']P\,`XON
  M0(6I3ZDJ!L>J(&:A*V9!U[:DL&G4<3G3X.ZQ92WAH!8UU4O`J<#A4VXT:A7#
  M7.UA:>7'B_Z[I]_=[XQC<!:)_%`P:E[.@P&+G)\05JF(R/^)%61!#9Q!Y5EG
  M)=2S#D8:*4O25IB=3GTT`TJU$T25LG4Q=4;6EK7*!U!_,4B6K)R-\EW`?+7:
  MS*7OD#EO0M>RCQ]R0(&/2=428U?+H+;_WS\DMA\D,-GUR&370FQV-^EOEK:#
  M(/K27/NTZ#3X:25FF!7,OV$"XCAO!_)[\O($^P+FHA$/VZ4L_K%0%+*SFFQ+
  M-#:[B]#(9F7=*.[R=XA^H$VVVC@,U`3E[&""E[B[DI[RA,WZEZF6A-O5@,T1
  MG9WU$]ZL92T<#`@/E'DG@MJT)X$%,1@V$%XK.B6!*CHU`N\'QVU!!T,(OZ6'
  M^B2_B2,*0Q?V$\R$#H!(^3FR5;00F365L\X`YAT;X)@*:R#B<<'#")'KD!^8
  M<_4.8@NC0OBG2A(.ZM".^\#H6*54UKPK<\YJ*.(5;L?=I3"D@92%V(QR.C\Q
  ME0F,(9B9GCQ"(7',T62B(QW&"Y?['\H=2?^EJ.,!YE:C'NPF/WBA#81?SG1/
  M<:=*,->?80N>M)`V+43-?\-C#3EA8SZ91S:T#88#EI\9IXCD08;=M2Z#E)9N
  M=M+FB?]MN3\)R#@KY"3U$ZG#+O`5>(00K+SH:"Z#M9>N4QR*&.[3:KJ!ZJ:R
  MK^$,(/KI-OGR)#U@@8!VEC2T1V6!@8@E.TS!XB.1%^MZC02'<(`X+)??7YRG
  M??!L2@7[8X=E_""/']N_OC'-Q`6:VQ*T]U\&4!P'"(S3F4[:0JL\/=YG]?>/
  MA1#M@CG#M2N\&HAM$F/-';X6]R/?%'A_]8WDP&*-U;1J2@X,2@(V99>'[0Z,
  MJ7\,X8*&@UN#VTZ[R9UXZ2@R^!:`=\W9H-.<N$;/1VS&QICX4^!T.7]B]NX>
  M@P1(1TO%/1>:.X3^'J2VO`HGN^965DY="+1_.?N5NDK>7-P&4OY)?GOC-7SQ
  M%M@(OE;_^+=I0NH!TT<C#,F^RX&O)K4<XZLIQO[$EA5U/T).H5_#,0BV\Q5_
  M"QMA`S611X2&7^[,05PH="3%@J!I3.@*:[`!RIQ2%:[7].S8_L>%@:HQDH]H
  MZ..Z*21PIB%=B,-*D#K4ATJE9\J0"&]]-Z5*UYHV7S>&.,`RD]GX3[PPGBI[
  MYI.VO9A'3W=R,WD,76"AJ..24X(&<Z$^72;QS$0'Y4\AB>U_L4/_Q9:/_/=R
  MWZT4BQO[BKW8UH!>[G!2&PZ3^Y`$PTGH.AR5A+R+3*_M?]4"@7(.=9ZAX$\%
  M4/+O"IQ(\[=BT)GC4K!U:8(H+2B&%_=7AM*/,84\,,_JQ)452/N2&I],R_-0
  M5S/AZQA/Q]<L<Z@86R.QV/I%TWLPK!'Q$T9&MZ0_X@9$[QX(4/Z4XPB7,2R(
  M83#^TTY\O;_-I4ZC8%V44HY\4T;/X1!:]ME>;.;'^>/9\I2<P;FYH":]O'TD
  M)V]F*Z8M09)_,^9L^5\3T?W71'L<\Z5=Z6(#+&17[2W.\B[1FL9).5]%MMNE
  MV\2E*!6_,IX\0K(1TQR3]_\`ZP7=_L-)D:`5+?F4A1%(3F05_P&1=_$?$)>A
  M#$&,A]GX6]R3G(I%=S]/T#NPS10F\!4VCSSV0OYQF=="E4DYOF+]BJ.6G`64
  MA7Y(3F[)FT6G+/=%IYF'"C*-/NN5VN#*5^+UA34!T&<CE1W[CK]3G0"+ZC'Z
  M6DBYQ&@7C)P]AZ'1=_3N@B5'<6QUXDT33Q?,;Y/NX!7I21U)[=#=XLW!$>Z&
  M\9C7"3/>_=#V35$7NW)VL<Q2CH^'+#2.ER)GF1J28HWGI\_S?\M[ONEA67*N
  M[9<V-@?+0NZ0RB)<-KX\F^=`7]GDLOK<Y\])AG(&($D-;6@%9$\,5>,`Q:.S
  MU#*-(=J.)/%H=&8'J)*QJ_>7&&PH"\[B(71J<4=IT-79W)4Y)?6&DMR)P*IP
  M;)>F"G>:,XVH>RE$CK!"YC&P",JNJ!B*"FA\*RPUDIT[SXQ*F5Z>=PMUBF**
  MHTHB<B+:M%%+L/LRSAW(80BGAT^_-CK^>:]FW74/VC0J[$O,<_TNF.O'KGQM
  ML)M<AF3($G$Z^.^*^:05P)PZA*,93$:6KT5=Z_]B[!N"A&&")6?F&]NV;=NV
  M;=NV;=NV;=NV;7/_=]B]O,M>^U`=69T541F1T?G`IVUO96&KPX!/0+J^WPKW
  M#RS/3==;;A3<1HH4&_ON2;5;W\-I)3*MQGVF]_6?FL&$&'>A,^-N(BJQ]@IM
  MAJE;R:-'ME8`VMQ5<;S'=R]*7H-Q$@'O3P.HK<3ADM"_/WVX8C>@52U[6%?;
  MQR,VB4-@OZU(NO8RL`::>Z_;U1V*8(MS"YM``0'QQ-`'F"D?1K*]5D*$%S6O
  M4^%/+J"C*"%YST=>XR`W]M(DS?@>IZ8,>B7T)FZ&9ZGZ9Q8JZ3GU0C<<#W^)
  M_9CH=.W]AT*4.HUDQ)-G2SA).P:-\]AM9:?AW[R6PR2%Z%M+5C0)/C6Q$(N.
  M[N&[V7DEY*$?7>:QFK6R/G,6W7LK\B$,GK*YVFF2/!6<`;.:=Q&J7;L1.<V'
  M)=5O=[SHAU"5VPA3QG9J5_Z9V(7=!W8GPVD\#"+QO%;]4;4>H;:A."A/KO+I
  MN:H<R94U)4P@K.7BR]7ENJMNYKLA?XSH)Z*;"S::Z<$,_[JE#%0VJ4,+;16:
  MB5Q;[^%-_67!PLD42L-(`$/M%70#S&J^`6A54&`.7X*9L^I*Q*?24.LU\>`4
  MM\W1;<<GY'Y@)7=;"[3^7S8!`F[%:#/:B(<'H4`Z(A-!R@-)4Q_K(PQY^&JY
  MBM=YG"P3==YI#;O%#],()C"I?+12X]6QU$:#*(M%\<RBU>6@566O]\+4S:9$
  MTB#NR*%Y7:Q%J#3+D3(X2..V0%(KRXM@^T.A=.0DZS8Y@I?\$R3/@=(/@1_$
  M961!=1EB&!3F;HS/:C7&_3!MY;1B!"1^0/Y8&6H.H9SZQ+)RN>ID\HO%B1)G
  M-]?8/68J&9;2>&<9EILEERGL9;-7)<-8L//T@Z_82UXZ#0M`IE:O;V2@&6_?
  M"1BL,YUE#E*(;'/;:><"+]E55O9`?WA>DE,CXVZPBN\1#0D4R43U'A,"^QQ6
  M5,&TB)=$V?MX]')2S$M@;>./6:*../,50-R-;$/22<.(!G_!#YH*!UY(W636
  M8\+U6-K2.V`$%J<)AY3*WMK+?'`,,A'2#,*4VD2E!.)U0R5!1XT"8F<AYU<=
  M8Q]%,"6O0"58V,('*_.,-:4$*I;TY"L(R;SN-?)F;76"*`%P[L41LI"^Z8VP
  MFW1].#M2"%*P'4(*'\^]*`$;?5(##C>,;\W6(5Z8HL0'KVJ=PS.A".PW8XMH
  M_JC&4P-P1Q8YT@]YH?3N51*EAWAKSV4K9B6MV?"H0%.KRBN&BFW"I&UZD#C.
  M3W^;_F`"-SS>E<(LH<35FH?"%-MX/,R/HQ9.GUD5&0RXDGF=T:&I[U2%E4C"
  MCR(7KY\@X::WW._;SSTMR;725"T3/:F]^6$S_<4"&^0Y4SG)F4Q3,)WBH%-$
  M22X6B;9,9%Q?L)=*\ZI@*R/(J410ME-BE8"YSK6Z@*CE=J/0Q\!G=^>YCB#$
  M]`.L3.6%R.O*[2(UC>G,CL<?,-J#;PX4/U.;:T;<4>S:WBEZB4I%$?D3/H&#
  M`?Y_0/X_W9`24>MEH'$0'3$G>Y$)-CP>^PN$,R?QFM[T.?,Y](U)]<D>RE<H
  M,/7S6HPG4:J03M\P%-A4=NL?^.V>4NO:DG)0%#D)R^(V.VD/5REV8LNVJ_<=
  MR\/$8)QIFMX9_B[SW,1ZO<%H8"-(3#&0+:D!+4>JDZ"5;\;[.-(3B9P8J81X
  MSI,)EX+P5)Q^"3A,K_?1.5R)3$US7E%A(/=!7#8[NN#N*`KY5.`S?C<AWA<$
  M3';O\[)I>-PFQ2UE>KDIS#=J-%%6;$#NEF0N]U!,1.V;F=S$[S1-O_$J/<+.
  M<UX[E?HW3U915_<NP#%1@;K&5*K[!.)-A<\0P)*X&NJ6%J\:!@8O(1F?M::W
  M-.H7?>&.*6T.UYVKLN!0W?9T#AI[@FAE(JYC<#HD$C[B'@,66K-7_/B63!PV
  MGDWUK9_E$DOEY&/0LSW!10)FAOB")^,QI:A.V]6_2SU_8%$Z#*O_V^?"\7]_
  M<F!G_G\^%Z;_G7G"]/^5>;+"LY6(W>:B,HO59UCUV'ATV(SIQE]!C,+5*A4Q
  ME6#3^8A?I8C\)A@I1=O2+;X<1MR7Y>0O>@3@0\_3Q"0E,0+V^NI<%.#4=[#?
  MU>0`;T;TF_7K]WJY8.;G8+9FAS?2979XS7=6E1;7ZT5<RC=Z<=&TQQV`-JB!
  M_C\V%YX.3^+2L1QN)TGH^[TDM;A>SKZ=?K9DY<OO'V^7M@W*&U"BG8^J&/31
  M_6X.O\Z-R`%-HNN/)L</;]\+$&T0JVCDL[JSK#3ZQ("O>UX/"A\E#*.)HKO)
  MKS0L!MC)B2>\\3IZ$CYRDMD_7U@G1U7@IY>D/W\52+$T#/L4.5I]DSI6+0YQ
  MF+[]MJ>3+L>/(>^(?S^W$T5\?(B[FL!Q7$I'&;C"X(JY.SJ\G9>#[;^>H(WW
  M!O.]0,]=EU8PCM:YSWML2-<Q^.4>,6Q#^`#Z$-*6SH:!/:ZX!*@!5BEE[NU;
  M(.0T3VQ]-/@$]%Y-P;',JME`G(ON[1H"9UF/!V\GCY9HT\7HS-($=8>&H:O"
  M%93DD#6.:&.;DPCE$WDV(=)U?2-R%E0D),/`_!;8!K""8\<2D]Q(\TR*]Q.`
  M8G":5>&0!6'Y0!_O?G;9.-E,#S@V,-35AN6#(2>7C=6/@4:#9=?<$]FVDSMQ
  M[ROTZB3O%T_=7C+G3KT2IO=&'E1T5M<(]TN"_7?W&ASL=5QSO>1N@%:;@!'B
  M7K\_HN#Q<*V#?MKIF-#]5U\SKMC;[)Y4Y,EY2(T(J+8>?K\&1,?XUH!JI)F!
  M[`FTA*^4XG8N\4%@&RY#0#G<7`K9]`2]IS3=I6:<S\E_$^H6ML%G#N50WGLP
  MK.R15XW,VG;T_\:14Y7'V?:0I1^!F_.N\\[_]5;ZCSS5LW@EG_@HV7LIV4N!
  M<ROT+)S%L6D9;0.H9^MFJJ;A>:N.A\L+&,@V*@9#2%Y8DD)C.34B?;S&Q>5^
  M<U)A,$FR4&2X?]1J_]+KS1HR^\<VX`;/.2@RYT=B@,""3"<.GV\1<N6E3L&=
  M/#J6":]HI//6'J\8@AK&OY\8(==`?"+S`]"&)%"A;SM4E<03,'71I%U;0<?S
  MPUD9_S08^A(W&4Y-:X\*P#VKUA=Q@WKF\Y]0Y)/5H`=?*\S_]Y`@7$R,>V==
  M_*TB3N"]2".EN&0E;B/D:T""NC.(`DGIJNP'%=,"(?29!.V2B@@*KYAX\OF?
  M)C0"]S3-=:Z3EA=5%,R8R&$NH6M;PK6E;<W0KA2'F".[FF,UVMWIO994-Z+/
  M1&4PZK&N^HZSVW^I)_B![S[4HZ&@R@P.9E\_VC-7_[K2QK=JD"'/EE::O!HQ
  MR9WEU&]*PT^V'#\ZJ_<_RTE0HSS7$%'@KXUA`RFEAMZ9M,GS*1RAU,<<5OM9
  M@_BAV&(_@!F@/Y4!(GC$Q*-]DPD(P;&)CG8^^HZ06(%C(#%"HN-(G;_)R8?U
  M4M)R;8X!?#-@S:W/LMB>N,(M_AF.;#W1L?G:FP*O8!7`H4:^X%,^N!C<3XP/
  M33+NPYMF^BPF^V62(YM"):7VRRX:.X%&XT^ZCUSKSML=X^^&]QAOI&@'*BHA
  M\EOZK$DJ.@:SN%)?5L4P!['M$WY#"I0,EU?$4RA&2T/^J+($=CYS6>>WE]NU
  MKTUD^D.J$(,;UFH?1*_DMQ!,M>^(\XB3%`*HT9_PEXS1P"*%+DP#(8),#%[:
  M49=K?@N3SZQ??!4NK$T0\FU)B8TA96.(4LG"RP&,`1*,>7);Y!H\.^=>)X,'
  M`&IIS3OCJ\SZ@5$?%B]M9-SW"Z2EH"K*!A`WG-%AG*3)DP."X73\=OI_<<*M
  M#(G=:%*<'55Z.>#)`_L_D.3>O]"D+(3/#,&3*6!>(>'#8E2ZLD`ALK/HXW#K
  M2;?V'.$,MMN#)KZ[$Z&\@X!EUE1_A7`1-W!%M>-;:W:Q#7,),]"'CCJI(MK?
  M:(NX`6@S0USDBZ#ZAAMS:$YI]5C7APA#,,*X[T$2AW"./_EJUE`-$**'*80@
  M<GVT%:JI(P'X*M/<%NV2U6YEE221BA;,0H/[&SGP$9(=B8L1ZB'%77F`?4!Z
  M&_&IHC(%KJ'W9U;>Z+!T+$29JQ&!JPV)HRE9+RH$?1I]5H)WBE+ZKGATI+M^
  MV\NH6&RF='H-T7QUB<:;X"`?S=)B8Z(Q[T.RQ$X.!8.2E.-!W7_P=0,?`DRX
  MCPR+SM.`Q(3A>0J].Z=FF4@_2@0V!R+M.A"X30#@/53U5Q84X7JLA:.<L5!1
  MJ5-FDLJ9_JAKP2)0[JHVV(W2?J;[@S(&%<5*S=8?-,@1']ID@+-]64\+NQ%C
  M,.VID=ZHQNBW0TVPYV(V\RD^@^-!53&=3.#O1;GF1S\VRL)'C\^WBI)OM_2'
  M(.MA\WH,0-"F_UCH#-9`[^]0>L210Y4G\Q.?PF`]?0S7[LG>I99E4JC#C_)/
  M](D30X=33I>6;]+TVS^6>XVBDB6Z;P&JJP($!.7$(].TIZEB$"K3399WDWLH
  M#.)4>^,72ZBJ/W2VF`.7C@3N+8H^\GCR!RR*BQP]N*TEU7[@.H2&0R'_N[H/
  M0XB90!RZX746FA(N>0X:LXL">2S4UDV;*CM)'*8%7WM0D$'\)"'H3.-"BO>Z
  M)V1_+DK4H2E9QA=MLZ<FI0'I,P)JDK2_QXR*IY;%X'8=YKF*1Z8D;'XKS>`O
  MXJ1T*R]0+`2+O(S`+(`E$@=Q3;4O&Q>0W_H7+Z^%VT(]UDQQ;WCUABYMG&$K
  M+A3X9-"B1QTU3&B6$IE`5A/+PGSY#B*:Z#\)OM%\L,O^G?NP*[$QDB'+T2-!
  MW`!+/C#R=$&C(!%I1LV2C(%HJ2%>)DZ#8.T(D/4:2`3Z^P-A\]X?$+`U"F0@
  MLT1"5T`JX1"*3D=G5W-<\A?I0(OAK9Q)L7B-6;BL_XQNA5FH#&@L5>*CNE3@
  MQHX:'WX;[YAD`I(#3&N@MCE<H+\"AQ.]9Z)".Z$:!QA_ZU9%R,MK!W84)XGA
  M03<++7V[GJP0/N3_DY&]8?-"(8\XS$*&L=#EZ#%QV>9V\X]'"NHG3/%EX2FX
  MY35HOO,AF(4]4Q2$<#\U$A#B^NBY?"A+LPOPZ$QMN'S\X.KN08"#_,Y=+!--
  MA(ZJ![&L4MM*?[C"U9`P;:FZV6)[#625N3TV;.VC_WC.F5YL*1)JR-RA.$/[
  M%N%K79*X394E]=K`)`1]>/0\K2"P]#!0[AP%%8QHVGS:K9T"_$('H-7R4A#3
  M*20\G\=9'??/WYU<C=LAB`C0/]`N'.<.=&'X<E&GPL.J`P:UN=+\0(:()2T+
  M#^$7,LA%BJHN);6&`\&/#"$;(R!ZM<O(_J\W0,TYP[/@?+(+L.;,^&1''LVI
  M\5E$;RF_S(22D^C3A.1B22I06C?L>HJM3D`S,T0MT3N%LXE'I8/;J"91A!W`
  M[\RZ!0L;XHFW\0BRH=(Q@9&\5>PJF)#7`#H_PR"Y&V09'?!>4OIX#56B&\N\
  M`@G0/8=XV(Y#3ZP?`FI.",&2MDGV@I\XAHJT.+#8H`2T1D9&+S9``%6+)%27
  M8#CYGP(SQ"!H?&Y#J;@.C?X)^E(GU`-:7@_YM9CW/F3(B`>)U$R$@ESQHZ)@
  M(8)DO"9&P:#^1Q;'7Z!X2(T+>D`E\IX3K$)U5E@4B",(C8Y3$(B4Y/H\!)?R
  M@/3]&/?YNKQ*90$HP-3KOS,;^\5SFT]C>Y0ZUR4GAQE;A*-^@F-R3NYM@S;2
  METW$CV29)M7A:!+`\1=0_>)`YYWCLU5,K*-V98[5Y8W&K:9,EP6KFI2I&^;*
  M9^(^W0A#JX;;_(K3"+:46W8=X`(\!V_I$39ST_`R%5*NF$]VP/M,B?WBU!74
  MJ9P328#(IMU8"OIEQ0LD%/1!>77*'P@HZ`5K[!">T3V$?I$R`*!3VX`P<FC<
  MSGYZT_TX"OK@O5A:>F#E'`!/ALD%HORD%33*3A_"I_4C3COH6(KIXE<"U(,N
  M42T$@2;GH6/)7^$,2"@^!2"1#/KT^?%I#>Z[V7QR>A1)T!.:*)I$5H+'_5"=
  M@S)HU3(>9E\5@T1XNQ(4E/H>()XY$7<E'"!21I<(E_J*`S1S])A-B5W=]93/
  M\%\I6-I5"1'#SV1^E*PSGQG+PRB+Y07F2S5++G_2NRN*:IULO@DRF)W]6$3N
  M(E4SRN`B$#AI87=LBWE."5Q&,-U`/A.R#B55-%AC24X6^'`9DIQ!B.Q95'?*
  M].P')88V4M!ZG%X`_KC-P(PX"-WZ[V))#+]ZH!)6`^<.;J5\'O#<RG\0)V5F
  M)+=5!&YZ26N[!+LQ:J+'D+)%U#U?AKAOK=^Y8NA/CI8LL2%.(_7$*.P)8_^@
  M;3:/VX'#5BCZ>O=(^<:9QC19@"3$")_<XPS.6V3HA,7K#UIU-5:^*999!&"-
  M3+347%P0LXU95'=5L>)T2V4;VSW+[9NA/<%W%U^<7-"@R@*##=^;A>KD$:W8
  M&KI;6_=15L\LU@;,;0;&%,7&U(`6XA4K;Y6ILD1TT/N)5,4V,O`OYI(1QT8E
  M0:9%LD<NN\`:FLT&EI-%"R/X<-,TY#^)X?N++\VIT+F;2VSHL>R#2V!42<!W
  M2N./>G&S$`5RQXV&(.WL\WAC!GI4!O1C3-9&LYG"Y,IL6'?SFOMY2_%=UH7(
  MA\EZM+<$8W^_(;[+D/"9/^20<^"L1N#_*BJZ3K[+^&9%O(6=C\1XRI]$4SSW
  M63ITOQ4*J&*$DKZ](Q:>GLWA?V[J%BK+O5M[8R52XCQS<D_E1'[NC%R@]1+M
  MNPRF(]5OS\'(IN>FJ</KK2-'+%".K3]H@(H6[R*C1P^#.G'50\RO:8S,H,K`
  MM3GWI2:LD0^!KCBXBIA%V61R=#0@Y'JIX88I*.F-J"Y81\1\_)S`NT%^P^)5
  MTOF,HN9J7(Q>)8.(:CU-"BQ"$NE$/,=\(^+E/?)F_B&D=8!?ZYSN#X2,+<S4
  M0,9%H.7MG,^Q=8@;H:ZI/[)'3-*+:V4GS"7F/UF\)6#,BX"Y$;.G&:_65>WQ
  M?4&-FS&BPO/&JO0\4,X:S18'_F#:@^F@S[=(2-OR=T-9]S2H[(]Z4!!A9>9'
  M2W$]1X<C[#??R8*G^=!<FSUV0M_70MMS\'T*>2";%(X"4Z6VS+GEJ<(=`\K#
  MF6-4W>S9UBMK8FCQV*O=]M(UT2AEX\*,+NU-:%E$+I+#4J$')W-?#]#,M%?X
  M_E9_8L@3C?MK`4*][0N&8=M-N$<3>G5Z*]'239V,'-)ZCJIEU0#6Y(?DVA0?
  MTYU-_:<%>[5YCW)-\/?'3(B+WSZM!?M/_I*E7#4OE!03Y`"-1161G$*>`6(3
  M3TI;4(JB"\#Q,-342@AX+5,^BNS6-7R&`D/XG[1>-_PV6X#HZ1(I8I>`O@1+
  M+'3*4N:I!3S`8-)-$@'2[JNU$1D/#+YKV89L</VHL!MN/3X0\;C%>Y/9$-TL
  M]54I]7FM@=57-#\U?`&,D\@?-Y5R^>21#43DH:-Q:2))+_H7>F5K/-3GEZ_U
  M?'4-_.AW1`S^_+9'=GA5K6;2Z"9/K@)OIDZ=5H`P8SES_?Y'^FQCSP-EUI7-
  M=?#THD(U=5F?W-"/W>F1Z29*WBL.&`08T*`\9D,R*"7C`Y4U3"3:3IU$.7HT
  M0*WW?Z7P3?C?)88,M4'%LRA&`:4`T@^4;?WK=ZHATOZ%XHJRZPS?.,3]4=:Z
  M"@=S\;0ZJ15/&FR3^@?0PFGP?5%#KZ)7V,[0AVZ!Y&RXJH2)!?1&P7I]'Q7/
  MX;:]Q@DZ>W/(TD::])HY:UL0#"H.(5<;3A+Q4V1:X:>4+WDJ"^"M0^LW.VA@
  M:022N])Q'A6]0>JIGR``'8].@*RJE>6!"0)R,#O^:^I,P5]^`Q_X=P(.V5PH
  M2T,^K>^7$!@8'GPW=0+E"LQX^Y1!<DN%,XX-CK27/&5(77P,$I^Q^/8##*7<
  M>8AB8'*S[]5820!R!Z9!K1RX7J6SCDR1*DR)Z:L+.D]POJF%2RB(932Q[^L3
  M#_"G;3M$<D]`;NC'>QM'SW!=I0VM:AL6ZF&W_O+KS'F:V^P-_XV'=G\W+Z9Q
  MR]W,2\FI;S`=ZY%W1[C]`L6L-?(OO<;3HM57'5TF9K?#G%Z9RVR]WF3CZH&?
  M0CKW!&:Y[%H_+;MQ0,*P%KW+G!)NG\?2U$4?)FPDT#_(WG$\#>]N&,]1_=N;
  M/4)/IZ@6T"!-R6N*>/,\$N1$R5;W.3$_5[+2U!!&OM^AE2R2:7U]\\2?9$GC
  M=AB;_"'!__/<0W;+'@^<"QANS8O6/@N:0+416R(7#`1B@E&OEL8I!1RO"0.`
  M\0]/0T-%"LX4V-<TS-NP+29()M);&:<@\AUM*/E2W;G`B&N"LIG7OW>1Z%7"
  MILX:?/F#*-/A`O&0I$,*^1;FJS^.9+99^>A$(XG3&36F*V4<67&^2ZTB5"%8
  MNBZYG=JUJS<MKOE?X%&V)R$!<P1,``OJ_BS3%&IPZUD?Y3P1/$':A*T]084!
  M-I5MPUF_WCQ27?!RY_;1N#`XMDEIXE6HY&;F;(+SU?6+F6$;S"1`XDI5JR&`
  MM)L1BY9BNAYC3H\+B8>TXY"+W?WW@ATKT'>M0W6;_^BF:$%5,[>:!@(9V%6R
  M@:9BCUEV#89?&B?'`:NA*W[K)X-<Q<5*%MKA:8UD4:/-@3AF:]L,C:J#9@\U
  M6(99SNZ>[-65JL,M)>2$6EY1F?],=A=RXI?3*VLM%52J^XH_8E<Z9[J]3M-@
  MW*=6]W(0G$%#B^H9C[ZL.%]=JE>U]Z>&1P!`C'Z@=NO(/41BU"2-/>7(]8Q<
  M`GYU?R=Y6K%FU;5W&8E'78?9!]#H!JLAU27F^/`*CQ8010A6@TFHG60WY21Y
  M%H9X3^LJOO(FS0!D5SZO<PN3U@)7BS1OH:L<5'T%M?DPD=5;\_"F/#IX_P>%
  ME"?.ZA!VFX<LEY4L$!#89S70@)#:\^;B;6'*C@3DK=H<U1T<5PF0OLZGD4'8
  MB>WFD3CV3W9U,IJ]D%8QFUD5\/:)EDIU`HS25&0+Z.H#()LE!9HE"4_].=#:
  MLT3D#P8T;K3C[Q<,.M,`A8):WP4`-)W7B8W*%]EIE;=7JB7MDP=M-KF.+7,N
  MBLA7Q:,7<JN#V0=YUJ)#*WA<.L].[':QMCR5M=N:^'$T4^QY"^:T7+>4@M%.
  M&SAR>+6@NZ8RVA9>R!@98N/@C\H!+R,@2R24$P4:73]X\&Z3XM4+)-PDXV_B
  MM&K7F@H.U%/C(JL(_:"/E_Z"I1-J(\&Y20%YZW#SQEQ)-XS5#$*\34-`;IE9
  MAXKJ`V[/]OSPO`!=I@`E4WF"5=7J:AZA%17?>KP7.OK2*[WX\H!0'^U;#&@<
  M.[02$_KFYH$QS\+HUG`M"6.*_5"48YJT`64!#2G?1O-:?XRU#0@H^A6N8DE\
  MPZ9LUS/L)BI23.9^\#_^7#4^,F9T(S3M#F=:<`HV0FP>6.LUW$I9V3D("+J.
  M9\=+`&JGBM95&Z$T87GON0&4,2BJ!;'MJ1JF)7.=I?7EJS6W_.$KRD?-(.["
  MP2/UZI[B!:HHRVOUJ(GW(K9X&52DZ."2L3S+IR0U@!41L2>`T4CQ6TIU<OTV
  M;F29_;!-'64+L=1XFJ0C6W/N%A,'Y=U!VR`QF^?]3-G'?)GDBO-8M@;=_U34
  MS:#DY80-\P!"H_1HO.36ZJ:/L_38&F'!1K]LP$V5LVSP?!2^S(Y;"=(-@=@B
  M0D;S>B]_J^JQ;?[4/^1<A0PY(7@(59=F`IS)?"Y0!E#8!VC0GJXP`R%1M6FU
  MLPSD_80(:"5!=-)'$=_X)A.NRACS4N_WX)O;&<$3JXE9.%&-&CM,L-4Q&G\7
  M=$(64YO-Y]&EQ,$@NX[*F$?V)%7@*P!5,*S\3V.':O2R47[2*6MCY=,LEH[G
  MN28@L-5"0)X#Q1)VCEPBEGQWR,D`H/[.('\Q9:#N4E5OW;AG^<JKQUV;CNZL
  M*:#)!+6G`N7G;&IE:?4[0.@?O?I@A./H1_??Y#&C/6/88:EX6S=Q#4BH+=YD
  MN)2#J:`D=Q!A2U$Y<&MMGLJ6<,Y-:/3?NED)C434C@E7@^X,9`^<T#.N3IZ<
  M:JR^JC4Q,Z=JMA4-SK=(VH$\,U/H,=R:0@%ESA@BF%\"+^]WRIA=9LY85@WS
  M%V)7:IHLR)I';WE\6Z=45?/`GU8:0T2PC<;K&[N22V7T]RH8FF2X8O;:A5">
  M,]95:0_YWUB+E=XM.63`X'HKF0+WUR/G=JGY(-RJ9+B"E2O!JIQV^.@0+T/7
  M.T+;Z$0/75,S.-RJ]Z4@_@W/6_CH/!TH8GPD"2/*I9XQ<.9Z>:FA)-+V1:@@
  M@&5ZQG56=D-%)@>IOJKP`"Z]0![#VDC2TM+=R1OS3$UG')Z*`HY/RUL^7/,Q
  MP$;OP-]3Z"O@<%*`\*;$*-7%]25\>C&@%5L,*V8=!D_>-^HXK&PI;D,+!J5#
  MWSD.2V9T>8F<#6\])*DO$TBM;>DS-KL#*)DU:595-ZX<+!6HM%N&O8=H<C.X
  M9(F/+O?GHA6;.S',!D)_54RD2IPYOC_;X<J9YK$$=W.CK_K(^),$=R*7D%V9
  MK*,4W26X%MD,ZF^O\1%'SXFR6)2E5U]!&'VNQU2D6:'T@2H3KM<)QL`]&M?I
  M2J8%12#%C"+DIC<`U9S6R]]%8MG)[#::F*QT5XB?!]_Q'5/>V)#I8+(BMI?O
  M!8P[L$$ET.EY7T?C<JU8PBKB1LNN@_OO2=RID.0`G/-L7CT9=I,[67J#G@]J
  M!FX/X7"7A(;=*&_+&#3UD&77*)L0>D!Z`8,;)IK8W?-.*-X73[VK-?]`=*JE
  M;DV%,N)%!;3U8P&&1$3Y4V;S@(>9?&$Q65;3QC%^-Q+R/7ODR?:,8+Y+:/Y?
  M;KD7:Q;I[(AP@C<-,*:\::K;*O_)[5R%,1Q,]_H8+"XYSC$W7SYQP>/=/.^R
  MKMD!C\EV(26&B^*Q?K'C]?!)*-?)<)PJPWF>'.9*:Y.5N?3+MNU<(DMV^$\I
  M[?Q<.#V'HCTV2BG&'NTF;&G00)9`,?*_&/_,&:FBO^@Q5`HO]^$ZOV!\F`\-
  M-OTFK4+[+\253??4Y9\6/&HOZT[^7:4?#+;QS:H-L9\#`_5%%4H_C1<U#G((
  M%5>':]1;)J"31YN.KG+W*HIHN[2DRK_I#[YIG#GPX?F6X4O>,\T%++G$[0!R
  M[)5()'?%AJPRS1N$"09%%U&)VG3C.`BB\TJ=M^9/_NQMNK/X";L'"9SFM;,^
  MB33SZ=DRT<N@$_7/=%[==_C7,C%=]\W=\#@#Y0)3>$-4[51(N9YF`)>4<X\W
  MI>$0;O[3/\81/TJL0)H``"[)IIIJ/P$#^)/^-:7*I/K#GZNT\'^`CJ8>RWK)
  MZFI2BG78U-2:+KU!S9.VJ)AR%U;6X($M0G+!8Y-V'4.LLPIG8)R\;KG]?Z/Z
  MYI2+J.,3*@FNL>I-_2=4C>H$4HLO,P]MXON[+:ODMINJ4[2-+J5$<W4\FBJ`
  ML<X^CJXXN/WR-FNE)I8-9E`!?$'-"6.2PHRZ+I:7VLCA30/B74)&^_\F33/D
  MQX*A,*@1$34:J/8E+U9C+ZJ=L8*<`I>\ITNW%Y899CU@5H-C/SL83@I']RUB
  MTYER""/</RW01<0ZZ^O;3XOAC(B5,TXQYKV1!DS*+D7/D8?J;5\@4L'V9>9Z
  MNA4ZC=O%F]8;_?W9>!24SZJ.@EM,2U?G/XZ$MWV?O\]06TPURTD=R5;8T1NL
  MK>"",DJ"JS9\TJC]4A!+=$=Q_3TXB:.QYOXE.UB%*9/F:C;W62D,)DMM%4!X
  M""LIOQ'ILK8.7HAUWT\_J^9*8!V:FN46QK-"L[*N.YAZW:`PH]O6/([:=Z>K
  MGE#3<5TNMG^?V\;>X8A(25-%_!KH>(@1#YY1Y%,.#)=J.11"MC:TRVO*$\3B
  M!O,4F2FX"JEC*4QN'`/K4NF8*0SLSTJT635%8S-8^<3OK+.1T&NA"Q;]*XG,
  MVO4T6&3^M^;0PM'TJ5-A;8`=OB(LAF,4!=_8J@8R>9DT.[98;5VV&Q[#F(*H
  M_8E8]ZA&U9E5%%KV?@ZX0E9-70[;.6W"V`WPOD:*4%]^@]\%RM6"\WA@Q25Z
  MW5H%[*8)LFJ@_^M;`DLD%N4AN@^+$B?F&)7>?W`5VPG=2=0$Y!ARU68O[S-B
  M/IWA++:F9-CF;.)0O!WW%S!)=1HC0U:=D+WX[V9@N>%\\N7)N(%S.@/I^+42
  MOF'0A24CH8>0$HF-+LX_6DS[G3QX39&:.*G!=9NC+*$]TYZL$F>A+CS[)*[@
  MNP"C=L?+&F(&#],WUL.?$L%U_G?C_7?=>7XT."0^=(RV3G+]^(+P,F=Y)2XD
  M47,DX6D%DRFFX.Y;_G.0?*X[*WRK2V(83BM,8!F>-166?/6G,ZY#[M!Z>!^!
  MAOD(EN,DHG1JD[VTFK!$^$R7>7D;YG=M]=5PZU\Z>V&LQ\DE#.:"#*(:E@]I
  M"]=^>UA"2CN^3_)80O^\-&&;==,Y=8.N4-4'MP5-*"QJ[AR)6W@?PC:E1W]I
  M6.=B&T%VSS2O*&3*\K[R'"D"=LLS-PF/"-):BYDAV#2M5ROCW3S-9,NU\]"Z
  MJ!)2DH[*74D/`D$YDSW%2D-R2J9MH1.ECY2&&U:)/%!6HWILIC5)21<*L+OF
  MA+E22H4TF.B3`@*L`UW96XM=D"VL</8)S*VS$N,&;7Y]'$9?F`=1#OU->2A_
  M:]=S3RD^*`F*W9Z3<H#)7W%MJOS(E*0+:24]T#6C^FF"<D"))GD'_S)-Q6%A
  M1V:S6"Y:W=A0HJ!K7ADS*Y!4I4]`OMB-+"`P#./"*O_^4Q:?*N#99.@>B6N4
  MSD/"B^'6)S!:EQ;S6`0^!\12'CK2`3'K<%E+.7B@@"G4=E*+XRTE%EGD<ZKZ
  MEGFG4Q'>4.RH%QU]H^W[/#VVZR'&6SF.Y9$[!*.2PYPY'-7M`OY)\?[2F_<Z
  M*4@)@,'724@S?9!J*JT_M*L.44=J4<U"%K0&X:S>P3VG:MI->,FCRBJ1*RY'
  MI0&(N7A`Y^-Z*`I^@#T^]];+@?:N>[-PTP6+5_EX4U&\-U]:J4$4IO"52B.#
  MR.Z-E:`4>O=RLWTE?MU.Q#:B;-,&!:@%E=-EI!-R);X*I%"5#@8E-!/6`-CA
  MZU8[2<?E4ZEWP>/8J3_3W0(+]-)U]5:8D?V*0#HK$+T88TE2NY<E"\/(<<PD
  MAJ=*,X^JE<?8%+@LQ1'JC72E'[[@J5S%^>"`\%^J90<#XNL)]28[7J"5K_]!
  M[Z+>056&HB3NWK2:WM*GWLE)?C:?>M=%,T')0CT`ZCV56XC((>[X<_[\-^FF
  M=KGM8*#9I;729O!1L[[;2*E1GWZF;8V\0^$E.9R_LF%9I"VR/@7")2RL33!1
  M[[..P>`;EBCTM$!+??PKR?FV/51=GJH3\@?[=0(?=,SPS=6WXK;WA(BC>Q]>
  MG!_U#3M0.O)X0/<3?X^1<V'U0XO'P/NUS7;!"DSJ>6A=J@I-;?2'R^_+DX>H
  M$@O$-.9V<D<%'BS)*4+H\@98UYD/!Q3$*O>ADN?)@B?2K?)D:]$YL!4SYQG-
  M78N2>2T6AA'#1L\5_!.`=7I:-&=:/@W;"[(?V^IAA9=JJ\J0K-''*-F(.+#[
  M@@LH15Y]<WT%VL*$[XA/1T:/\3UWI/[1.\=*&/".^5TZ?/,*8%Y4X]D.>@:E
  MBR2.VE:W?B3),Z0_*<+45MJ[MFE%'RK5393C1YCC1YNC1.Z/5`=R5S07SQ-M
  M)?D[8ZOW]0I?P1"5%28_>SMZ6_DW>;W0<VP/2MA*^A%$7I%3#K`#+Y`R"\.#
  M>^BE>1JZ^?#0R'^K4(H+\*+!><O*RA8[_%P,BKHH:EAR++)6?:83;Y^RHU3E
  M'>ULRIWK&V'#6MR2O&<*LI5:.PV@F;*%3J*13'A,B(99PP8VF&HQVR'_ZLP6
  M</U;J:L8N!*6E<,F85<%T%]_JC@D%)5Q'787P_N6CL0VK/0L-IE3YEPR'#6,
  M?$84^G=M*ZMFI(F*&JM`\=7RR1@SXZH`+N*&/L@GI/<[#;J+EJYTT)0N>%YU
  MI;OVC,3"I&REA`Q/%XQ)T'GMW\?"WS_X))7;_V6$8?I_D2;L;*S_]Y#Y?T>:
  M,/__19KX2,5A<SG2VJ?]4$UVW09PY7@G[6[XVZRO15UA`.I.H__#X9DKU^(L
  M(O*8S=#S.SIB&C=657%+,24Q+Y@\-XZ/!A^-$CC-@[LBA*7Z/?G3X]G]'K+;
  M.=B98T/PA`_[T_+S:?]XBAF'L_+]NI^C*Q=@#R91MW@Y&-G"2M![\USP10$K
  M&SX\/A@YFKFS.\%Q*2Y6;)O:Z8%U==#=_>WC:@`F4?7YRO#EH`KL\'%RHT.U
  MBJEOX]O;F1+1N@`):U7[>Y,=%U''^*N.[O+)^/VJ>'VA^%4<=1Y?G\.["-&/
  M(<#F6U:%@WFGHL\4J8W\A+\J[(9JZUMFTW`*?98*:D3C756]8U1DP(C4S,E'
  MNZ]TS6WSS!#73RD#1`3J(3^#4@9Q^:KLJ<<0$/ZJ./Q,%\4/[/71FMCX_<;P
  M@XTBV$];_?;!6LG:7/GK?H_#.@Q$)<"^!6'X8F'XHG,3I);LP#6[.!,RQG+9
  M87C1U6P1-W%K?XJ-Z7E\-A'B)TX8I;NBY$CN^<*D&Q^I*X6'I*,'M$C^Y5.A
  MUJK3VXK*J9;LHE6U<,;TFXPUOE$9+1,#JAWP:$)8%GA'O]K<-\Q#+4>_ZH5=
  M'JA3JQ%C)11=E-L23<A*][X/0_OS>#IDZSM;!C9+UDJ^!;[V86,V01,ZWC]*
  M@8<[$Z>\+2'5[F9`"DB@3EAE^O#@6`+I`_KH9$?*)>#WD%G`2\//ZRM-#U6J
  MTKT_0W-+5,XGBGRI$K/L0"_+Z_N=4M=SNDQ3V$-K],_3-R137J2N<FU4RW.*
  M7(Q\')X1F-$0@.ZY9:0,USV3;3E\_DTN6&3P[-NTAP#O90PH$(U%ECE'T1LF
  M!CIS#*"<*H"+(;`&9&!LP[!N9Z[FM,]&;H68.W,G$#6P&"#B*%A?U&?^`/`@
  MBL+:OL&SO4H_6V69+"7;N':19?:I,BF]@])EEL+WXF+S@:;0FO=KK_JG/D]M
  M;H1]ZJQ7`WX1A<)72*&PMVDW/TEM&5.\5)RSG-(#5C,>^RH:X7`ZU4XK\7`+
  M>[<U;I+]?)E;%]'\&.6"1!$.WMJ)S,?G#%K6"3>LTF.*9[@6N<5_EW55B7?U
  M(RAEO%:]D8\V(;,\:ANR(A>S4N?1WYKU]V4@W//S[@^X(4+ED5E>4]:1<-<]
  MRYA80>^/\G>O]7B7(;9'E0GGLNC^IJ>[_8TF`C**)PZ_&J0)ASFI.CETQL9F
  MYT84VAN$R!B^LC0)6HI,VUT]Y#N3,>?B12B%Z8(6*MZC+L@IB3`3%$]]&OYF
  M.$[F.GGM01>JW-[T*/U7XG95FJM/1CJJ#[MG7S*V$1'A]PP-Y2SGJQO]<%O5
  M!>[(-T?.0MD3DH,<=9^#Z<-4&4@\JT)K>ITMP?1!`_1I<@,FQ90KT>IR%:`9
  M*46RA2@/M-2X2;SM!/6XEK&2&=Y&;P*TX9\8(0[JK(-6,^&+*&:M4.1IRN>G
  MIG(TQ66`AC*^<UDC2Q^5D"KQJ&RI-UO\-[/<+0/S,&<AOCR@BUX9I!>,_$7E
  MBF(MXC>43N5*/!,K:"KU2`:MN2"8-+V1*5$$;IB@B&S*N[NC]-Y8FZO<S^W\
  M52)HI@CXEI)J,/KZEF/'XNI#%ZA5C4IC:`?U9M,VVY2X]J@?V.U.47T<JZ6O
  M.7QBZ<M[U(T^2H`.N1BTEE3"EU7W>$#Y1+)&.5WV]1%[R!9E/-RE:_2BI!SE
  ML?I]:A5OL6?2O^HFY=0J(Y<XY2O7F9NMM.>%BGS"Z;BR@?TN:3EU%9:!*@!K
  MU0(U*,^XKOB!,S6.2OSU=6X;5Q7/D`Y>-AX.14(:(!#YFPF_F`ZNTW?K^J3[
  M-DMG6>^?)>]LSUH&*(4%6$A9E>8"(ZW@@^ML)#S!F1G&2Z)X%^.05R,P&ME\
  MQO3D$K!N2NM*5FB\Q#]DZ:9\*9*+@J6$ER'11KL[ZV2F`U022D)!P!J9FSIP
  M2P_*"[NA)BQF?>`_-DB]6_Z#3\8*93G;08!#%`Z7RY1@\,-2](B3C%"H5:\>
  MGCC-R^@R*.(U-CXV.O/^7#&]P#C)WRK.9_7(4@I!V6JNM&W5O'%:Y"G:VI(&
  M+EQX%3H-.VHPI&'5%F>=FVJNRLQ"\?:(VW5;2^C2&^L%!`S#[,.!8FZ*_-52
  M%L[5.2?A:UF.[GQ9Q<)Q=[W/?R[\LYURWLI'ZFT8L=B:/[L1"J!@/CU]DE&B
  M7/:[4S:Z32I/422/>I4NG!R5)M:XQO'D$NE/IKB"Y>88/NS$&C]]DX#\6RYU
  MFB5)5&-8M3.,"0<]34W_3L9>P`I/`H.UF8LE-[I([;GS-HM2^*G_!_JL?-SD
  M3E0K*=?.MEU:/_)X)2Q<=I&CH/Y%*NV_9:_!)BWSNZF=5'&UJ$6=JU!5.U%A
  M7BTUI)8XX%-H0N22%BWI4$1FLF4W*-E84<KFNJU*X=Z3([)G.97KWP5=YK[)
  MY<$(M>Z!/*\O.\$;5:/_$GU'Q(=)$3/_U60],?HW=EK;IZB/IK.&>CI]-#<7
  MM#XFP)BR+3'68U^\>!)O9Q+]R8F@%[\=9.&[9T&PB4C"]<HF:H<(C#]XA9&G
  M)XMV@64;V/7C(?8[-ZV$#B^]XV"_F94.X,?UL+!5Z",L=GP[-4`$)*^6I<5=
  MR$[:=C;'^AU#OM0]9$L9%S%5K]-EM:EO_\I*-[NA/:8+YS%U9Q9TA*!L,]=]
  MM%L$0%G0I6[2&^EWB)0N5LLU.C,;O647(`Q&-B0[O,P!]42B?RUH\-H[T&3_
  ML,SLFB56)L9:WKW0(SNK0L25^TWQXANJ3B'T\'U)5R[9,%\_MPT563HZ)>)2
  MG8=H/[9IDZ@A5G[E>4A4+"]^IU<O_/D88*3E$Y1MDI5"B=[-BXAJ&.Z8B\5.
  MJ;<_)]I;?>/B4-H/HB(1`HSU%=OW]O&ZGK9;Q8=YB9:;DB_/.]S_U@%=4Y<(
  MZX"LJ=%2<[8>>B0L21BP`3-6U)$0]#DM_W-,R-2Z,V8M=KS0%9KRLD)<]N.)
  MKO!@3<#.IH9>)A71WUEELS2[$\BSU[/L>7--E:Q3BG3Z:.&H=HUUD(I676!M
  MH4&U3[@25YBE=-7S)!1+&7'JE8-"UYDAP=.1(%Q+]6#@9\3SLZ--8".93NV1
  MY[3B1-R,GC;C*F]V3.PJ""783)O8YCO%@C4"4QN%56JP1=1.%''(L$[!U]><
  MU[><9P,F!.F$;_O^Y$:_[0P69$AT$A`AFO-*OX[.VY9GMSF7MB30>P'*,<P^
  MV4@C$Q6(?+B!49G:34.W'+NZ:\H:(FK:!&H$+83F([8_6M06RXYQ*A71PQF5
  MPYMZ:AB4S#Q"Z1HX+0#8'%/OA:F_ZST7Y92*EB<ZJY?H"=GKI#0K_B(<@B%;
  M-CM+B]GE*FNN2)KE9&UFO<$K@?1IAZ*]#O\T]#4@\OFU_4'E0OG'A01@ZA%'
  MG&DI#&.P8E;LE7Z%+J*A+?15:E$YU5+7Z+J@H[&ZY;%>GT1\=8(U@J*HHV--
  M5F'P[+PC3$JSK9[AVXU/P.XXOM5Z1S0%HJ<;[R]CW+%X^&@K'^A@[Q-RU,4E
  M%23F/>COXULK?:%\,);TR@F<8=5.ST3G+5ZPX$GO*U[0$,+W9C:KGZ*+TJ'@
  MA9&@\`W&<>PHFFY,/9)GB_#\1=B@=.4:HE<7"F0Z<>&YL\B,,DAHFC)\=@K#
  M/(L3C_E[`.OE=%79J5,N#-74QM1N9?[F9+6$;-;`427M*ZK+_63M3G2OS-'$
  MIC'SNK>BIRYG8G5KE[2,M:R6IC[.P<,S<?'RZ96T.)37M/)2Q6GH,C1]R>O0
  M-YEHC]Z51.F[*@L<::E`ZU3MBKYTSE/61"UV-Y-S<#<<F]UQVI#/S.'5F1RS
  M7/+-FF)]T\^/"&NORS:7AD"O$3/0DN-X<Z<PER8;\&WS1MGL$'4QF;9^:!=\
  MQS9#BFN,B%_3D18R*.2X2+#GM%?)UN5`3J&]1$H][M"=6>DF"K2Z-;:]!>+R
  M)U\AH4I2P-%(*J^E)S>/+MJMYP3#X/)3)II=$:8%E.<[=6]\W-YV+G7Q.&61
  MSN`&+"J$G?'(:>83EP+$[;%Q&\)D3`M:0WG9=27:!YJZ>]&Z++Z4?EZ<K>C!
  MY?+\_D29EY=.4B,,9'7LC<5AA&)\ZQ`OJ/D(-HC_K8IXVF`8`2HXM+GW,!(J
  MB(:D$EOL4'R3R>ZV]R$9I(308:\Z'Z#=*/]T?!1JF""KY(%3F1;>)BJ-F&R6
  MQI?0NG:`?9@432VY17O%R%).O?;=RUQ%\?S;#XG(O$LC,!X1NY&]%&U6F8U;
  MB5S>`V]IIM[T&*G1"GMYM='!,4A1EY0UE!JUO$?/AD8>:7[JWEF3D&0J'RZG
  M4)L5F%3M4RW`CG@:9N9EAC,!M/PCG;\XD^3B5ZOC@R/L$$XX!ARF5;S<,YE^
  M*[:KE09+KTIF(HN,BO[:*E3IPN!(W2H[EA6'_#1*-.(M5,)E/@!#X'JA^F0<
  M]XS1`1TM$>:D:&\A)-]AJ\*(K%3UZ[+L$'3'J/Q]NK-DT3[DJN86-P;SL*^=
  MW+99'X^SD,K5>):L5#Y7-1HKED,VQIZ'"24+UV@[E55@P3?=EI!WY`.^2^F%
  M]Z>1]E>68.`QELN]+_+Y0V+`(DMS_L%0^I&PVTO<3ZD8+7CG?K`4!5[JHLP'
  MF#*&L-AAY>N,Y)VKS%/4RIHXEB/Y!2$7O<>'H63,MTDK\<T.?K<<0F9DKBPE
  M+.SJZXM8_A,)[#DJD7]DEN<*1WN;XX<X>WZ5[4<H/66Z*L<''PP=WX"9>2A^
  MHZG=I.)OZ@L='0#1K?UP01L#)4<ROUWRX(@_WW9OSAQ20S_G,7@&/#5Z(!LX
  MVUR_N>-1,OQO/:G1\$D++3?^`#MQ#I'A#G\@2TCUBXV@&06U*3P_K''+2;U'
  M-XN,Q]=<D+4MU!JX>",&+0H?@\_(+BW0Y>P:G,1N.2('<NEG2$#S#KYK"UW%
  MV"\E@\O="57.!Q$8O?@JB!-1$E7;&E=G1HFK/[[C<#"6Z\>%==.=$MP@X-(;
  MQX`"^&T(!`GQ0G7EY/<J`9>-;_$IIA+K*`&7!]4P;4A$;5TC^J@MS8YZ,F4P
  M:B7'X6W6WME:<YZ3)G>'!SO\G_IPS=F.,$$)&=K67!OR61?6/?2$V9-8I"Z1
  M!L6^F7-.[B:GRLST7(].T%:SO?,]6E-6US_]0_G8,J'NL!MA@@T,`0WJ*7:K
  M.`FC(6<SM"/UD8$(JS3%@6WFKLZJ\<5GSIQ/MBIZ;T7_AAX_^NQ:W:DQ#=<E
  MIRTF\CEJW2@S>7+YCM$.=,S&+M$785[4)C>^?.6HU5"GU^-/VIEE6=/3:$;1
  M8Q=!].1KUH+.K%8R@K&`9B+!WJ[@NFX;>?CZY<EV75'E)X1L-WK[+MUBYJB1
  M&*ZIRK&5QAX7*FG*;-D':C';+,0RHK*K*:BY&@?"/$591Y&JS6S,2!;9P+[X
  MJ.Q+"6.A:,/3*E0.G!99V7&<LE:]4H?<T"I^UE^+##'=,N.=N4K'14]-P\S5
  M2&_?ZK)J5C`Q@>>0!EST?&[Z%2[#/HG/3;>!77O[G$&SXCK9ZVI;RW!\FI!)
  M#6'"/2=<6)*<CN#Q=&]M3_C2AW;GPZ_VY)W(+2S.@7&S]"$EXK+9BBJXP1^P
  M*M>L?H;9XJG'!N_AGI:EGBK)!7;.L1Y&UOB*`=3V#RN4(LA%LZI\F9>;?#=>
  MU!X^U5R2$;_C7O_#'7HCSKY!P]L]:^4^.Q-;B['>QQOIE3GM$@O8>VVU"1I2
  MQ%X/R3^8:M$$GHT-B*J##=X6UH.5C.',;&V)--5UJX^4,P0J/?P!N[J9E"/5
  M$BX&\4_O,.:5;/6-!Y?UM@GQC-M]+>RGRWI;(>=],0ZI$/"]]XY^F4*/+KP!
  MDVJ?TX/B!#X7G+GO[47E[O41KK5R_%$3@,MI_K]PFY.$/=*R*.-(GNLT;AC"
  M-RFQDR2(:V>C!5\%C<Q#V?6/#C89:P+AG5].O>UBSCNSKKJ%6>A+6>?X,"T'
  M+G=S/UQ&2(F*'2:Q8]U]PJ4!5V]L]XZ5S,A!JX.P]4+C2].0NC):/`S93_M4
  MZ#20RI%I.JCLZZCX@C>P*KI>:GF/N$O6P68WH4VE5Q'QT$O;`8N4)U^A&VH`
  M9"<(HK$CCXB1+&[EE[1T,:2==(H8B?$UEVTOR=T54S31KQ7=H-%-JN6LN8CO
  M9QMTXQ:%GNN=FS["//R:^6TO+S8HJ7=(E=!=$CKA>]B[(]7Q4]^9#Q-5Z;/;
  MY5Z;IFFNU`:US_;:(8@VNT<E4&.[MQZ)Z0B@4@Y?[8Y\:EG+-!ADG^/C'L(_
  M4?LEGI1%AHZ\G=?H[FWYPQ_EL-Z<?D-9HG@M^LUM]P!Q=H[=CBAF>=LJV;#A
  MQ^?.)HNU.(JE\QMC):\_;64)YTW[S?Z[,]<B,.LSWZ&R9#<LNS-:NE-*_4*?
  MNPG1F?LS+))ISWJK^;"Q9RWS.C@X-M&07S?OLX/3GQD_/-[=ZC`W-DFI[4L'
  M>M^8MV9>6WPXX`+QD2](A<S?M0<81W`9+U?`D)@P-388PNE"E6$%?"I,XV#4
  M%O=/^:[IN>#^ZLCC(D'P`(*D.F<K(_&>K^BZ;]F>`@_08D`>97X,!P%54^7.
  MJ;DZV]W?T]#1JAZ.;Q(_T-.VO]<<=:YA3[\G+DOAUJS@*?3'FNA_-J#@\%S%
  M1)3!N12@;&!%!@+K16,IEP[F((%6B]Z""015PAA"(A%,G8-XEF4?&?;Q9W()
  M.B'PL%?,-`NKHY[&)EBSG]F>(+%`$D1>^O',SX&-T]7.F7E%_#YD"PZ(`M',
  M&4K0LECA9.;,@KC@0&?-0.8)AU&XS]AU1C9SXYG"PS"$",8BR"""`7$$VA@D
  MI6VA0C=,?$B1^0K@F@3!A,-04UI9^CRH-B(:>4IE_0KX%OIP,(JANO:I%2FZ
  M3T[(17?$G+*%Q*+M@_D4_6,PP$C$>$V`D\'0O*'UG*_7A@/+55F@`\[2P@D$
  MH<YE)0*FR:'$>O[&'?\-RZD:?CI>C:R=5I9_)?V&?.K9-H4]LCCF^K^@XP*T
  M;!/+DC5+QD+T_T`P((HP)#X0@U4(,+H0+IK[PYL6CT37P">:@!BPC9^K[^62
  MT`Z%%U7!,U:OBF*#-!H2/<L[)$IUL6/:7+#P_1.S9P_0P@_^UR:S"%1A@ZS(
  MW'M0/5>A-JA`8&'\'Y)17?O5CI/_D"`6WPES"A#32G*26Q<R4**(%RD&)&-8
  M0;XDH%G,(1.2#Y0+/Z2-\"[^"]H_EBM77L2U+:Y6IIR+D019+%?>.L90RW[A
  M>-DL5Q9][<?WN`8QR]&Z9>%S*WS.$?<2OM2^00V%AC\54RWCX0I9J9B;HX&N
  MB,<,51:'QF(<Q%0\IM5"5\3N1`U%3JMKIL`U$%;'L\17)&!!I(AGO`RLGZYT
  MGCAJO3O>(),KB]#G59M"TPBM%TDE<!E`;]S]7AB)-&D=S3Q2)=@E;4E7L%PW
  MWEM5]S6UHA9:QZ2RF?2D8+]R>C&"(HZ+KFG@_H\=L]1NF7E>/,\YPDJ(+KT*
  M\98*VY=D`$R?$/(W;OVG,$^`0!NZ,S*]:>S9LS*]:+@KB"A&J.>;)BCWEMY7
  MBG6G'<T4IUW[_]-"T\>E_O01.B(Z\JEAQ[R+!K?(7B6S8EFT4ZTPG?`QA'G"
  M]6?M(`4KB4D4+]$>B#@]!4,[D#@]B2#"$`4A0ZE2U>9W%KZF=Q8A]6_-S65U
  MYJ+_:BJA]I4Z--RW0'?G3S]1^I2.\?;^R6;ELBZ\.8"F&%&OHQ,8H^+((K*"
  M9><V1,CCO'YJ!\6`4@R(!A7WYQ].!PC=M(!B35)YN]>-8)*7_$NP0K+C/XYL
  MX$X5+P*2S%<`,%D'T<M0O8T?,]R;:)++)><5F&\_N#=R8B_5!P._#_6_PH4*
  MSA6!17PF!/8B?<ERK`<AM`\)E&-G#`[\9P6+4M9O/ECPFID'(78/6I8)&6P/
  MO'U.02E<)XRA_A[=Q%.F:Q&"(HZ[\1^!&_XCL&W)VG=V\#E7@BP\A06A<;*^
  MS3^.'5+:%MQ`$\%*JG)(!5A,.+O]K](`GB4O*TW+_Z;]GK`$:A@$F1J74O9,
  M!%OG/_8&+18G!E7`RV<B=S[6Q)3]]5BP3SG=HK!#$L=<!P@\KD/-,K8M6OG.
  M?OYW32P21*&Q:DW1D`[U+X`[OK_B`H@<0)/D/PF:U"8>LR0]P)5C-O'&.12C
  MUKV6*<NGF/Z2O>ECK`+[W&X6A'):6_0I(X9W$/EK'Y_9(-KSQVQ'MVFD3]DT
  M"!U\^O_#V#L$Z<($VZ+-KVW;=N_>;=NV;=MV]V[;MFW;MFV;]S\1[[[)F=Q9
  M10ZR(A$K5F6LC`()"ZDGR?;U]FW5`CU2:!7ZF'HAXV]B/Y"%&T;@Q/_;@_9P
  M,YSK6#Q_4)3R/<-V(=@52-VD+D;/[[81I"VTU?7Y!9#E:7&)\T5LTQU;306Y
  M$<T?7N]F,;S0_?@FLNLY_?TI_7+W*0RA^/5')_N7[<P,0A.`PYS&/-=&#99;
  MU]1TMBBJ_*&N]RH;([G!%0E&5!$=_`X<-)V-A?2:,[=NV2=L9*Y3"X4$'[=8
  MY!"5-IT]+N)2&P=2']JK^#$1/K_Z>,&>1,9`03WKWBNH7+?^=Q+QI.KO7Q4M
  MO`!VZP4B9A;Z8JB1'D.\<3MX`K-D9-G]3V>(XBH-XZU"Z2+E-^'06.5Q?T*A
  M%RJR"+@&=1Q(',&13<)9,FTZ_W1$>[\#+4<T14+[S*I,&@._WRN/B^5/<2%L
  MG`GQ/BC:=H"'/F+"5I)*174,/UC/4OEZ(-8GIQ`_-!8^3E'^9>K'<5?.O*$?
  M_&9ZJL:TAP_=%<;=!E0Z\X(+V%I6'%XM35%,7@LGX-Z!)'G:^.P2LE9L.M*@
  MFCX%5^=?XV8Z`=:]:PX%NQ?95:H]^B:4<35D<:,%$)(\3-A!2V(FD&,B%:%#
  M/Z5F(+U#^JMC=#$/*(X8`ZOYO\+#:+;"[2DSW!]\-H91;V"*<;T(RQG*(.J.
  MT12^:<04!9E</XBB)DZ`P@;QD`TWYB>GV3]6M=,+W.PI;[>A38\5CBO[9\FU
  MW%D-\/+YP'_\'!%V6W^NT!3%Y+7P@M@;!SYM__P7X^@"Z\R+[C6:=]GXE)M8
  M5_8IU(PNS"?:547"?1-[8R76P!4U]TYX83,G8-P5K`'[PPWZ9#%K^M]F1O5:
  MC:G:YE1LM#O7+',8BNNSX-6>-=FLZHX8)T\N;;&53;-6ED&@/"$"[`%<)"Z!
  M>J51'(N#374(S4_=^26L55=\T%]?*HH-0%#G'3GBBH'E$M`J,KYH-4GCUD+)
  MU&?;G79D-TI.`"`Y0;-2:DOY>#QO5%#=*#X]W"`O'-S\'O^AZ`B*V+#;1EV;
  MEE&`)IG($-K^35T9;V=MVB(^/Q29+J.ZP[YDFM3:K`OOTM1Q>^]UJO\XC8'I
  M`:I=,&$47302LJ]Z.B1^;2Y!D2R?!E2^+7$\BH-43G!_0,UFC=M1S0P3A)A?
  M_%XBA/`^.0I<43%::(P9F?ABGBQ;WCCOWSZUX5RB%><TG</;4"SDP'`;`V+(
  M@)F-$8^JUE+;#.!'XL@RW`M*2]SV;UC253I#LZF0WFAP?M$\+B_;D#$1*/M'
  M4E8G2"9%T9JL`=>T@R)7=`_RBY1Z-V#-N5DS:\RH*B7`67(G4)*$,)QF8KU_
  M29XDPF:&0WBXFRS"^BUC[DD'3^>E;4!\&7SKC!C4@77E57MF_7JJ56A'UBIK
  M"-^L-NC;<947W4ESG+L#Q`(_N\&J2LU"=\A!_$$TZ9Y(XZV^=F*C8SL@T6=#
  MO[?PRW/[C1[^M[YY5R-33:R8;#8JB"V@">E8%,V>+C4VWBD75NM`90#7[9U^
  M&+_U]C$F):E($)F>"(_Y$?Q!GF@@X:PZ=>'TO%J:Q?B"$'8:.9,2+8_GAC7O
  MM5C/H+[5?\D8VK\0I(C=#/>5X=-6<;8\&977"Q5-\(..;FK!&F2\^B1NJ3N)
  M-5<%Y[-BTI`8N-IE7S,[!IYX&46;>K"QW6ZT*WN5/:H=5@_&JPIG;6(TI17G
  M!6%JA/?S[UV7669G"):)$]LWP^*)K8['VP4>^-DQ6;[.EL1U2T1LC[,!(H/#
  M8_">@'=H':'N@2AR?].8@S@\?V8LSY-+Q`3!OT^C[2';DYX4RU:DI]"#2`4?
  MDMUX"[L(%4@'XHI>Q$_M88SPNDJ)_HU;XG^7F8)#W/U&/$J[T0*#%(&LZ[L-
  M<:)\?I/[V*]I?@^41$R/K0_BYCDT%;/&ORGDNV()P,QMCZINHI8Z&"@+6N@#
  MV&=T#U]H?A9DL7JD$+VH]5!1L<L<+REWDO02S!<5E<[A*C1WHVME%]2USG,S
  MX$.XBZW4>,[V\%Z__W.`I7,XB[FA(SE$`Q.IY1?*-Y5;C1]IQ>5=H"6W@T*0
  MD%BB+DSK2I9PDO!EO$&A0D4%K+:<&U=92V_6.EA9@%+*E/BW!9)]L2>S&7DP
  MJ-F31'T^K7%J&?5/+;_<8TJP+JY+NV?MSOMT13'J]6P*=0_CA:4(T,2ER!'9
  MUC*6VJ@=4)+>VK+@1_OH!!R"<\1BU0X_8%FXEC:1"6<?W5_G2=7K!3S;HE$:
  M&%7-(HYX1B6BQ<3N819-#1W$=1W?*D^E-NY0>=NDT:6M:,6'0+=GT#)J7L\X
  M2*5S7J(TV!.]P!@+8"]D05@HTYK$3K/`OZ*/"069/QBX!!^)B@$9)^W/2[#O
  M1?8JSNOVQT^Q&'+FN5#(QUI@'1E*K"E:VL7@="Q)W(;W_Y77RQ%*B/EBL-#@
  M5_@/;PR]>S`+_X-CB1X[C0:$S)X:8H@<PT[;3?_GU<OHRQ"$:'4Q\G8RF?27
  M^[M]Q2M$@,?;XI`,A?](`5%XC$/M`)G/!%#>0PTH[R(*L!7WN00="W522#_2
  MUAGFWH(0`1&Q73<E;EKD?M.X&N-^C+-[([M&#CPW5=CG+["&$AZ32S#-/I2A
  MTH?8OM*SO0G<>9:X1X@.8Q#D`%FIN(6)?RRA%3Y#C[%U@-JY=D*%`H,-DL);
  MEW93K%H"E/O!>P95_*G_I-="@+LW_QR1%>+"2!=S&Q/O"1+WR+M\[,&I.GAS
  M#3%;0HAWRE@IR^W61EO](,#<!_9IC=1Z3`#1MOD$?$H81D4R(U&!')(W3PMV
  M)[*',K`%RU#I5C;ID0I;K_<@>HS*PB`A(R*4:\=>&%9G\2\:6`3.5/3YS(B1
  M*,CJTAN8`S),+"'P*A_0P>$YJ,&AF1]Q\`8,_P$;<\&[8#\7:9RR&JQE4JD&
  M/R/Q\<,Z.U80KK53Z21`7@?W'C.QA0(DHG21MAWKSS"\>=6LTN@-8(-P2F:T
  MVMM66"!I,JS4WH&5D&RZRQ`4&K$HVK#]LV(+,O\>*U&S^I[]R;)0(29M,9N)
  M1B8&7Z;'U22$`:,SQ<(O2W#T[T212_K9/6K:D@6`NM@>O&8.;(BVO$Q]I))%
  MN`M'@"(\%(=PC[!H?A_&*)YAC;0IS(.<G2J;(K?;WSVA2&(--`-S1O?K:S^6
  M0:_W)QH4\_5-/`>%6J?6\_/M830V++>WR_L9V$^;R('%+=%.IX1O9]N+DMC*
  MUL\7)_Z+Z.?MZP;!S>V^8"JZYHL@ON?C89)`S\?W\6$R,UIE+RXAZ]L!5^Y7
  M+2`YN6;(#O/G;;!43L]0BRJ^D00P#]G]>%ZKQ]OK_76^.!A+('6ZE%%7^);P
  MQ+@`/H2N</;P&.LGPY.,$X@'R>\KX<_I>-_,7I;[^W"8JG9[3\W+B<'"RR<5
  MY>S2`=?5[:2G5V!B%Y36XXQ/[,V2N:3W[B=8_/2O;S+FJB\X[D60B>E&7^[U
  M)9*+^$ORXD*5W%3K`#"^Q%,.6BYM&/;O:/)/VZC-B.;1I?/V-@\4Z\SW[D<X
  M_^$)MN9*D6WSV+5+5@GYL3550@=%<X&\60!?>3BVINHG_'.U1%.^;G>)KL0S
  MIO<]EA^T1)6Y#W@#_BMT::5STID6$M)"AW.H\1:#*5TBHI4UFGRAY%;O*H"`
  MW^W<CA-.2!3K\H>8^OWW$K(=[X8:':]Y7`&1-*Z?7/#0U(@JL._U[4;-&S'#
  M>>2ZDTLD(U+Z[5IM:TE2209#-+$.HG*3PL:AE6DG:6?KQZAGM'E';9N38KN[
  M`4'AQ\L#A:`2*(*L1^>U[^-7\W-V=3;!9OAY[SED%FU8BG\<5>+V`0<*+W>F
  M-!*^]:7V+L,:8'ADM\CS0>Z[6MOLJ:?GGM@3C]C4Z].5^":LUH&5SMG21H',
  M-K@JT&3J#4G`-J9\EM&\WZ3V;KY#>D'C\@GSR\4[O==\*__WH,O`:`N9FDBV
  M<"F4.-(6\3[*&82@CK(NM+5[]--GT+>WQLX[N^G4COY]X2//5D_9P#M7E4?$
  MH4*7>`9[.:KIO/8UQ[0MX3:)3Y/9B/`4C("IQSC6BI?L,Z[9N-%K;8[JVS=[
  MDZKW4W+T;H/H)I\\9OTI_@3:EJ%7EN"#6"T6&`<J\ZT[G3GKSZ/*!R7&34BN
  ME(W52[ZK/$0;17;UO/84,AY<.CXYQY_]F#_#X\\-%Y&0Y"!#5JTX[/<)J%8?
  MHB`:``M.9-ZZU-MVZHJ#>/HE7S98:$TBO89J3_@9$:A5Z\.\7!5MXX]D['(!
  M4VJEO#,F85%9MT+3O54O$*6/-`:'F7L"]GAJ,=U2))KKSM1)C#!WC"ZS';S3
  M(=5Z=!\!@&1"9PFU??N@@U,UJ,8](&JUP@C\[GBFF<3C1#`-[P4!>2;5\0,=
  ML?2HM)SZ.+R4L](;\6'<*E/0H<!8;.'5FG&!UA:.W-=A)'^.(H,!:E0N<MK1
  MX`0A?$V.-X4`8*)22M8]+.9WN?UB6!'1*HQ?&H*@X%[T/O5'IM\47H'CJ4#=
  M?@]4H&@%5(;6;U4P\ZTXZWTL#81:V1C,9_(G!F%*XAS[_%GB<M,"*7QP!#?1
  M[1K"*5JJN/C8:>81<>.Z,E5-QJ2KMHO`XFS\D+G[PSP21C-^0.6<]G`A2]V.
  MHLO*+Z2<L7_=P`31M3%-0>GPC0V[&6W4;"Q\;H3E?I75ZIV'<=#'>.';M%2'
  MM)8L3.O)-;SWM_Y@\R\5ZAZM[6QW9LUWNG)7+F)2>E`JCT3A!QYWXPQO"L9+
  M]X([6_PM*C*I3OS$M]1"T8KN'DZ,*1C1&+5;&:;"(6MSS,MW%EN*P0-<BA?H
  M8RQ#$:6W;Z$W_\Q#;=G1V.DOZ'Y,!]__DH.Q_-__OSA8_S+^_T;6_RT'8_M_
  MD8-MZV@XX7(XQMR1^(G<3G:TY]?T^ZSMAZ6O#QZF=XLZ!Y.8LEE+HE)I%)41
  MN4S_>)H5P)/*:VSK;$]/YD,(+E.BQIVF0BD?S\+,CX7T^6WOIJJ)Z7V?86"T
  MBIU?"-+W$&C:Q?KR)FS[":]ZW4]#;2&B*[+.:S:S<_`EZ+C5HNM.`GZRM/&^
  MFY9&:=;![+3564=IYH6OFV/<.40WU\I29^O#(`6'CUUNOICTNCE4*Y@4TX\G
  MC9;-::2U>SAUJ2KW?^J^T,-<F+!E;ODF7WLEW20J?WP?"!@OV\)EG"?262[G
  MW+$.#X[""A-WOYJX`VIT/5!2:F,#6#4M_L4VU!&>DG+[A<#1X'%7_'Z?8*I>
  M-L'J2(E&O3[AV1F4_'.@'CO^W,]YL;6IUNK!H<\YCK++P\*35TW89;`G;H%:
  MH>V]6;EJTOF):,H=A"U(&:#MQ3EIP-;<;:%AFH]62\#W$L7XUVNU-_NGC69$
  MU+/S*SKV01`L3X0<,=V:K6I1O"]9I1Y*TQ6OZ<[1`SP1:1Y"*MPA_=8O^7:6
  M9UR;F8GWB.E/B!9`2L\>DPI9:':?YJJJ2AZ;8I.-[^@D-3^B\/OFZ*Q6;+X]
  M!$.1ODD]#3`D4CX\75GX*#%<9CIG`4"<!R-R*!-M4^79X,`\@UGXPZ)W?&)A
  MZ[O'R<A<C<=]<P0K"K&"58B-PVV"/#?IOP6S]TW%ZE.85*Q-Z*/%C(.FLRJM
  M)A7S3-*U1WH`^F.+K777HYHC:[+`GR?&\&?0:?;%-NY;U3X:X9L[`?%.T#U#
  MC!A$"(Q:BEN]E)#%<O8!YVM;&*'ET,A7'1_(HL>QX_@$&GP*<EFQ:Q41G-Q8
  M>H22^"($NB)B02D2_43T?:Y-4$0T!?Q4EA:FGJTY4KY[8'?6WAMB]C8B"`-*
  MB(&=)#F73U/YK\]2K;^N0+)HE4Y3OB+_E*`-6/TS[*W#/\2,EZ^Y&-*N4K5X
  M5/QEFH3\FMADBZ04Z/:"0-NNXI%`26%=@GA,YA\1]*#5T6@H;&O:R%#E[GH.
  MN=3D9Y*(4:O<6`'GID`.%-FCW`@N<_N%>?5++9=51Z2]^2`8IV]0.ZU.1/ZG
  M_]).Y?4L8_NB*O[6'WARWPQA@-K02J4FI.>XJ9^9]T[&]MMY!B0*`1NPXP*V
  M\,K"QK!^4KG5-3[M5YVB$>>P7.N$EC#(>.UX&U#0ZA%JY_@82#9`)55WN=5E
  M".'%@3U5"MQ'RT9,=>S3<&3-*M7'9(SS61:2Q3T0T`3*'[)^J'>[F>^G]%3_
  M3P.5[W8V`B?EI&NOBJ(7E1^M47W8Y]RVT)I4OU*N:@R9@T=KM/`LPU]P[O[,
  M;C(R`9NQSGMJB9PDZ_1D=,M[E/?`;K2H6WN4B=#I;+R1H#K9J@K9$__ON?"J
  M%+K[,4#_(E_ZVN!("OJ+CFX=F%VW\>CK,0AJCHIK8+@%]DSE<_Z]0RL%EQON
  MSA*V`"FL#Y7KP6`FT-7!-9<YNU;C(A=.1O??X(^MC1BU"][7F&5UG^H@R/.>
  M1@V[0<:E;;QOH\P*;B2WUB1O(4X\OE[94IK/GVI&D]VQPVD656'468W`',?'
  M`IF!G^ONA'Z@8WG=\5DMYNQCS1^)L'5!CSJ/DJS%;(<PMO=+<&7.N!*!8WB2
  MM$[ZN^N=@U;7:D('0&.'5?8,G[H2JX4N9N\(7Z#>9A8'8KY-+FQ)`K/B*'G3
  M'I7&/$N`DS21N5V3R5F^/X($/EO;9^0(6'K#B`.ZAONM>\<^TA,K<2E0D@UC
  MG[$0@0!@\\K2(64Q?EJI"*R]`T,!OS%.NZ&HW:3V`=4G2@-A=P]_EHYK(!$]
  M.V@A#*-,0A$-.8D.)7].@/#7TR$7:H`DD8/GC-8M%SL4V/CPHM(@<%.?#U%+
  M8/Y?('DPZC#>;*R(4>$`'D8:8Y\:2M*%FU2Q7D\8DHQU]*K4NFV5)5WJ;Z`,
  MCK$QF1HKL40?KO:="I7("DO/[.!,'/$`*LC%;F/5AXE42TK^Y,-JI\26LZ9Q
  M79/6Q)ZH?Y.">/KQFT=E_[6^&78UVLW6JUKOY/1__>MW0G[^:60[85/6U!V#
  M;(L"(PT+7N^D1JLQREZ3$/#/BMQT+W/KBXCM-RMS]^3DU6;1(I'26@3%9DWE
  M(.<X::U6@Q-7U)L@,401P39?'#FH5:0QR4E(O!K'92_.LY26@2&WM(HT\N#B
  M:0,Y^FY^%;%2$XV`$PDZJU:K1;6.EK=:46;T)(8[>@/G4B.5[>\-H_3>DX=F
  MJQKR7T>9,7'R!>L$$$,4O4:\L:=PMDY<6OOVW,U;S1\<:`S^941\\D8-N)%)
  M,*R`4;+50G`U:^]4'5"/.TB)IA3S(RJWHT4.+IJ%5F=TGS%^=4'NX]4KDG"2
  M+Y1+?;DUI!%9)^F8:Z+!H/X1O'?F4#I*#.^/<UG_TQI5L^C\+R)](Q`I_%@O
  MF_-HS?TMR"C95J)#(Q#^#R*@.78H0?&QJ+\6#^<*VHDC9QR*5HYS1_<M+4Z_
  MP](@Z%1!:<T]')3FC4Q;#B:?7N#UH3"=&45!I-TMK%O>M%WS>=9X"L75NRX`
  M$^AR.9PD[U'8($-71DHM""0KXHIH5K<M]!RHBZ;GEGK\D"4H%BY?](RLN>;/
  M=*^_@;LW^@H,C<;#$-O8NI5K"")IX]M*$3B%K%>2_VQD=[G;E*T3;PV*#@BI
  M7B:Z;^0"V\5D"E=EVFMV3^%)ZP@Y.$&X_%KCR^TTU(;E_G5@\$(3);G/+GQ%
  M/ZLL"X3Q"O>4HEYKG_K,U$13K*]8_/&#P/JH5G4:F;%/)=/_+"\ZOFPLY7GD
  M,W/L-L7HLZ3.+53Z.B\]KG5\C(FM^8SGP$(IF4Z-,"76:D'[Y6U0VW4JRAA+
  MV2[&KDJZVG6]$-(-/,`GWW.))=GSJ3L+/IH*%_SM8WWG-[%U=KSC?\^3&#F]
  M(O&=Q!;B91N_794!\2_%+)E!RJ!S-1[G.'J<2H*2DF&PBXYW0R3I+48U$3F[
  MW_N6G!\"P"*[,C9NK8=9X/CV"K;$NP5UX8EO-;RN]W_Q1G@_C^"RK(OQP,J<
  M$K^(N38%(LR-A<X3B'5$?)(>M=S"'"!/[%EYA4MY&FS^@@TW>N->\4,S3=W?
  M]S'M_K6A65-U27&Y!!Y(<9]9%VVQVL6;!<>L\=,(XNEGHD@BS/J9D@3'"HC^
  M]$S,[HX:`R3K'WHM4-:.L%#/>-5::NHFS\.4&I)PF.+25U=7QW:G[9^7DYJ2
  MES#4.AN6G"F,5/_9:JGW,FV[_$//VE)O8V?\UH2?_RB6HG1;$2:=XU`N]/KP
  M#Z2R\U4E\NZYP*>8WV*\FT'I1OG*!_*\7T^I$M!Y.(B['+1*()#PAA>5P_ZE
  M;C6+2?6U,Q7]1S1SA^^^(OZ]^>Y14OI"[(]=SAU`WT^L.1FX[C65#=/")UF4
  M\$C/2U.F0Y08+5UZ+:9CH'!*+C/X,4<%!;R>!_J2\>R6X7%S_+)8=6,?;TA6
  MO]L-MEP-.>?4^AM[JMN/,.B(\X,R.4\+60L1DR.]O.RH;N*0N^T62IG"LE:)
  M&L1K[\3@2MR;EB*&8$FN1]]G]R_7P)+OLB<PEO98L#]JP?<O<M25N)%MXHD]
  M`63\>_&-C'L_)%!GLD"UPN#19X7&%L+$:H3;^>W')!,.B@.;=1C%RW':>O_"
  MBUY,O"QKB6^4CUR\.W9TKL>)\;)=;@-'09A#.ND+.M?0#I?7+.]:3JI*;U22
  MV37@EOU48[M%:N91PEOC=(\+GJ4?^\ZD2*R86ZLWQDO\.$*N[]Y%L.Y080;B
  M<V"3%>($/W[00%::-_DVCZ<$*,&\GI.>52[:1I!SK-F#-JJ<2&X4NQ?24-LX
  M.HAM>@KA33F%*-"B2-;(3V#;X+/(M>R5)GS6T?<BALVV@KS7H?$']W"_5>?.
  MZ1WD:+*TEECK"]/QT\8Q:G=(5=E2STRC)\`4DIQZVP:,NG)3CK!5T6N%2FAN
  M\A>K"\=&M]B.=%3_7`>C_;W$IRJ^HQ)3GF>/6>Z2V>W;Y.QC-FA#7RD`XQF?
  M[RAV\66&O8.>^0IN,V!KI0\EVIYIA:X\>K]!9Z)4^!.?056?]9&_?<H+7@<A
  MXW!G'330S4EP#&H7Y&/%;4UUNR2Z&O4?6_,?(OV4+MK)TP`)\;Y>VL];Z]W=
  ME,;H?TU.?-IJM]4P7P7\2)9(&8_MM#DH;HD,M!4IYMOBPJUX^'/>S<B)E<E?
  M:ZJ;D*)#/:)0OLO?.K8MNX%L`-4$WN.:^BP([GGP4ODD$9)B^9V7O])9RI.]
  MN$9$"80V9DCU0Q)<10B6C$[LU9,&9:[NP.S[J?NGKB$B?R')@)#,AA[_4NT[
  M\'H_YS#$`&G/`Y.GX;,ZNV?WANCY!NA!Q*;$>`_TTG+.^[GE+IF]L3N3]2:2
  M8Q'Z"1!`%OI8FSN$/]J6+/Y%LW=41"69J18I<'P'[QI#UV2?[DVL3)R$;)FW
  MU'8;EEK>O@U1J,#YJ^.36*L;4T;#OU)W`L%N9422+9U1]2!*1JJ^+#SNY.D`
  MVSIAGI++CG_B2[L[YNU[OJ**.D%DPB-*'#=47L.LD!S:=@8`A[G[\P=E`%LP
  MQJ;-?X#TJ<PQV!$;J1P>J#ZY.I@#BNO-KH=TALJ$A)NPS_I*=-W;!587*,6\
  M/_^9KY<`4PSC+0'MS\)^U9Y;Y^0JRBN)AO>NIDJ)/V)5Q6:0BV8P>*7$)58]
  MF:<X%9QB68@Z<A(R)'%3-9T$@X)^4#?X$WC3(?4?M`E`HR)D,&;A8F4(`+)B
  M2I56*BC@F(^$N9\)A(SH`E!O78QGLXJ#"RW.17]B"*OBRKPH0VY*E_HG5U9L
  M(3"ZK)(5"4V*FAVU4]$;#;\%2(FF%9]['N/!B5J5+/IP^"Q?VK8B#XUXF7!@
  M?<"^"0;H<>KU>$7P9,#AO:HRP@2FTWE[>D(IBB<8M"ENR7ZK(FR6+O/CQ,6V
  M9W(:H5WB0M)GGY/QKG].B:+[W]Q@(%(*%I248M$7BH)WP53(5@WL$.L(EN2]
  ME2QI.#U2F+I3ZW7<,&@4!\>B^-S=+HF^HFS&%)*F,G25()`,0N+(.I"5,F12
  ML[$G6JK%?+FBP/P:%G\FT/4*""FI<"PA2A9K/C63R),CBC>U1(TU$*^,L@?)
  MQ50J?\4<P':02F=-,8G^]$Z6<Q0DN,DI+I[WO:FNA`<.TD12.UZT+F.IG)AX
  MP,C?MX<,-^V!A/#MW]SBBW;[&F6IF7K(P(`)!A]MR-\-94CJKI9LGMO^D!%Y
  M:S^KFGXO0PUJYKDRZG7G\6:)JV*FX7R.6_%P2?%I3[X"2&6BQ87D6SJ,\7KY
  MP@HC(VF?K4*6*@+VSHB@X@?_$;%Z?X\WGDM0[*I,='M2R+S;?$["#=L\K#,1
  MC?5XM>[)_H^6VJ/PET?[(/.#<(:R/2K04#3C(,BIR@T>5?_$<#XMX,0^\2:P
  M$8,I[3U7``'B\%ZI(.D+>&GC=Z%A``)]N7"IO4#&!N[)<`UJ>'H6=8;:^EA3
  MC7)6??%^0+:Q)S^B[5']*N%\4F)(\?J"]UP[+\]>`>-GXD."(HD7S.IK0O*P
  MPK`$\J+S``B]O!CCG<D\+Z/H-=$5FO#:.:U>QJ9R^;CSC]+X$-8EDIX#IR;7
  M2>.+",F>[S6^E9O>`3@,^:B*_A`@7E$IV?59$=!KQ>*BK/N0.!.+!J0)4?B[
  M"-3K'IAR;,.30O97Q[""W_)M?10(03&=V!?EHV*Y1#0"?":AI'9=H'\%>W/.
  M;))6M(Q9,>%!/U*NX=_%U@E_*357)#(X.1AL"T6(+Y.G^*W=T@C%].3%P)3X
  M*J:]^Z0<U:R1T89X`_D`B.0[-N7DZB>I:F@PVVUH>?14`.540%@Z'/TK1UAH
  M[9BV./11@[NM)A'8DU_P>.@9-Z_;F29SJ\^!)#PF9S\CP3OS"+B_(CP:4?&"
  METKWS%5ZH+RX>3AVC_P+11\%?VD/5@*6]4%1)I[Z64'-!7^<4@5:=W!OM;AN
  M2CMZ2WT)<_A(DV%2TY]LO`5JR&T&%L_$'9/08Z.'B]*?'&LAM#J@0`N(EO/;
  M[]KQ&DZX%BO;9O.A[;15V\D"2[9(V"PYC6F%N40=%0QCMUZWW&-Q&@8':(/E
  MOZ$F2`/,XT+&-5=WE!.WEQA&96<'`DHV(VPF%\[46DR4(S:9Y\@A[]RC46GU
  M69`!NM6ONP#N]`T8DB!0+2#3K=;0%JBV[^`]I1T\X9''B6_#=5Q/*J-G;37H
  MI545XE:8^:886R*2MX+O\)(`'Z`P_2)15Y=1N\<@OM,3'%=3XY[:U7BX)?'X
  MUJ295<M^J14&V>`(X?V_>Y0,T)`!F7QY'N1O'^3TGDN:Q6![>'9@R6L:5NO2
  M^G[T.]-@DXPWSW=.7OSS1&?A:-K[K>>B$SJ>1N$ZXLWIO;`]Y[-#OGRSA3YL
  M=\^]'S59Z/Y0"5->J,6B/28J+S$DH*<C,760L!U6>G!7!S:&G;6:W<H:U*@:
  M%Y^CC3TMJ-IS6&9^6WEL9&F1!4!*C4^K!M?O>>;RJB51V:-$D2RFJBD%19^$
  M6;=W]$'N-5.!Q95Y."A,=+T1K,GECO0L&_L*/`G&-R#<JMXY>+7<(U2:,ISQ
  MMAN;:72D4<ZN;(W-Y*EMY/\1K/FJ?A((6VI*.FD\YQ&CU"\`,\#US-XGK3UH
  M;H:P:9Y+'3LC&).L9N/D#%@#%MG9>_,?]K-.9UAZIJHXWW$X;R.2HZEC,EE)
  M$#"Z?)Z?#=A9TI$0XL!$!&*(Z4+5'5##(#O1U.EK?&JSAW@-^"*\N5HV+GAC
  MG]$E>8ML&PO0/G7_B(GJ[,&^[[AU8544I:@O4*\8LV=K#YC2?U2AM]UCF",,
  M^$OC_`O$OW4'Y4L#"SB:.'"U9-B7X<%)@O/&.ULJ/BC72]6X>61.K1SI:5L\
  M46MEVR=-K,ERI-#<+>NG\4VS^WEIS1A8;]+I>H/$=)/YFYG-(XQ/B=\RC(&5
  MX\NW7"3&:,TE)Q*23O7`H4/Z\M18S@1F@]&7^-=0!">D$A^.F4MWW;,+;\0W
  MM-0(I*>:+T,DNYC,VOA5!.GST$(=PT(M87*PL2_M"M&26&74[$T<0O@#?79$
  M>$?E3O4W*P((D)A"%=(?NTB%,G63DL^#H/`@UCJFJX&6SKY.F>^!M==:^F<(
  M&.Q(6G+%^=2I2CY1(@3:O:XG4/[-2*0/6U5?#068AV-BQG"IR>O@69HRO86E
  M*P`-W-M);](FH>_;-)57-K=G(#&K:B4.C)S'&,`[Q%E<R1.4E5"B!7@"HS@P
  M`9+KQT*W([$-7H94N_I-Z92Y@X"-VI<#GT/QF!C@KQ>$?W,V4$DQ^(D+&0PT
  M<?AP)D^LOX60DQ4P."$`FBM-L9#]CR?3LI16_>XZVQ9Q,YXHD36,)P(-]5"%
  ME4OL)=W,"'M=\";P_5[._P(S%%CS_.^A+=O_-Y_]R\+*\G^-?__W#N_?_Z<=
  MWF.?34>\<0?]8/QW-'<M?:.YBPZU\^D%2S(/-QXCN&;'X"J(."`&(>0\]_GP
  M'SBNE=[.=)?IBID+)Z"L^3'7.^!IWNUE#16/WN7<F161K.HWAE^?GYMQ.;_+
  M&5U?;^3;G(C&7Y7:'>[W193XW\:3TEG?'U1=2#,#*%5-GY>G891X`K>'*:KZ
  MOMS2VYRO_:_#X6+MIN2'K^=A:#D<DN%WJ39426H77YS:8)2?KXL#1=H5R\+9
  M75UM33MT&FN?W:A'.1O_KZH`B)S62;:WC8ZSOW-F?-I`+*I@0D28NPU1*T_%
  MG9Z)74_PHII!CR=?/F!:6$;`JE\ZD_JS=@MYU)0/9S*?"S;9KA\)FMEOAXN]
  M8<FH-5J2URG+`Y:\W:%HWF$TA'^_(N53)^6N'QB>D2$^CQ<I?M^$+8_M<;;2
  M-6>?B`7C'JX&IQ,Q%KMQ"<<RJ9IUHF]8D_KN\G5VFB9IT,<RX<>`W9JT<?O4
  M3;\Z:F1UF:^]M<NDJ+:(K]>+X\['7UU$%NFE#C&W^),D:6I`]P"Q`*`\G65D
  MX3`*@OL:P!DJ7JKU+R3PP;K.YSO#LQEZ[%@:V#OD1)>-6R\AI2.2O=J2@DRG
  M!&#-&P;=GY`B'96HMM5F^9:^2+=(^>?K,VK2Q>'RHCJ/Q+L/R7^ABZ+,^Z?"
  M5C4]+83(%B:\T<SNHI&6*9RL;&\VY^>60N[7*Q_0*)F,1*?;8Y'*=OW@T=EE
  ME>;N!<0'Q1,/@5G5G"S\^]YUTUVA]3B+@9%J^3>J8?]+H]MKV49(PZOA</4N
  MA:7.[-0OIC//D\6@?7UYS(CX)GY9EY[^'W!)P\=C*0:_]8*%7*N_/"Y_<9*F
  M=CY<\%--X&Z]$1`J$!B^Q$U/16Q+*F\K`A+I8`2('I(@TLB:KN49+M4N\3(H
  M]=G?1%\M177N9`HW*=M(%^`KJX*3Z]`^1*YQ6@_HKAK0/F)-+/3FR,?:>%IK
  M_W3,(0H3\+BH?)*NB_Y&J;N,;!U?YILUN&TS=QI:_E)CRD!NFQ*XOMH]/`:,
  MXZ%!2KB\)TW4HI^UL3V73N]U>KZ&)2'SBTY7B>"U3YX,$`,G_Y*)Z5S7-Z89
  M<-)A;`HGC7>Q3*4CR-K-XTG7=U=CK/N'E.Q?T!*SU2!:(6A"7[+;4>:'PBU)
  MREYW8BV"`AF@N(\I3S3\<IGP/8P04+H`RK#SQMW&M9>(D)?E'>1!;[+T6R_)
  M,!GOY&8_)LAKW3@V@7]QELV4U^>NW)G,7*%!4)48))DW@FFL,?#<>@K3;S'M
  M'2.G1X9>\?YV477BHW5HS`[N28,(>UDI1!X-!&JXCHO?;_'!E6#5Q'W;)%3@
  M[3ST>751+JXT.EY#A,CQQQV07<Y2ZGC@]A.N9-[2$'*\_'/QE%*IQZ_!S(IT
  M*48&\WF6[L"5,4TF^FL%=>.4>]?$_!2L95R2<V]52]]:]R4)8/,1-QN3GE`3
  M]3!/E0P;Z%-WLC7Z0A(<2-5=-JN7@NP,:2#Y1L2C'L_OO"S=@3Q$H-O7W"H(
  M1B^:"IXKP-[\@9K8P)2DI/3VI=BGW76"TDE6*_"^P_9P'PL8$P>5^$G*AFD,
  MMC+V)$KBY@TZFDUA_+USV&<RL"OP7P"E!IQD6JND.ZX\C#5Q.P`*[T_.-<`"
  M!9L57`*G'K-RYE>OT]N5R%^IUFJ6:?'-BJ\/;N`"?;G<*9<!<T16%?>T@*<L
  MU7%-!\XRYH_EVO8;[16]5)XQ28VH#],.V:SN*=7%S%;[I!M:,H$#PR5K#VX<
  MFHV&(,P0CZ#UNJ\86EDIIS2L=(/<T8V4ZN>6@QZJL+RE#N)0IR08CN/9-9KN
  M;/=%&8\F;XU3QQ;Y'X/G_0#):OY8@12RW%_+!ZG/P9%\^ZB5E@6[,.T@0DBB
  M=YXR4L*9J%6214);_W"*8"CO]CITZV#]>5W^DA.`ITV7^265P)PN45@BH<U5
  M']<1](EV>",DX<U*#"BKI\\LL:`0JNYXR#+Z#JUYFRNQ.%A==6!V)2\0M.0[
  M.1HO0A5,+:OIWEC%;5IJC3J\@"ZQD(]%@?53^5&S(<=L+J:O&";&)_P>.C&<
  M9>2&FI-MOPK<!F8JM\7[ZD[93X8Y`L'#AB=?'(DM[T:QS%"TJ-_6)D*0*JK>
  M+U;7(4^'-QNUDR^5SQ+V2N-(XP<>!DVI@GLG)D6K,=O;YAA9I<$+_1'I(]?E
  MWK?_?59B'$&B/!;]DX$<;+(QXQMQ%_>><KZZ\`A%A^-H`(`!5Z.^A;4[2&2`
  ME5,/CXD>4<\<7?_LCQV,8_(NT_X7!GL7/#Q+H]W>*R'HU*G;F2Q*5&Q,-[/I
  M<M09J7LJ-[TZ?W^5)YYZ]9TS(C?H^N+J'UZ)/#WG.F0@5KMUV1N"?L.+LJ_"
  M+#6,;C[]S?!TTQ`2:![+9FAGG4,>.\YGZ`D!GC_KD+JQO6+U>_#84!!"/,+`
  M[?CEI1A$J]?CJW!8/R9!ITMC0`=DB%L.YC*8RZ$)!QB0GS0KR?95?>TGJ&F8
  M"N?2%0KK',$:J]>5-A$`JFRS-U]M0=Q(Z4N/SDFOR$UC75U&;L-.P;+PN@R3
  M%)D\297<Q,3+=&"3"UAI^MZWG>M@/FH"P6Z:K*=/?"H_P$B'%OBSF$<])4S!
  M;-[T8:*4I#9E'C+XQ39V+2E_!_QKAU[BC1DJEMZ`(&K]9R*[U!L9300J?-T:
  M3QEPMA4\)14]#VVUCD]T^A">&O8;Q;NQXQ2PD-#9<?K2*,=)FPF0070,50<T
  M*A`_1[>[V6',<J>:BPNVO_BDOC;4`8I"V>2@EF@M*PJX>C8>^82M]L=QYP?<
  M$F<?6%R?5LTF&58!>^B^%Q^-FL(LDP.+<V=`@5543I`B.+HFCO,;L3,(UIS*
  M]C9K*8;Y`C7_(>P_28=9:*/MIA8J>/428')Y-S!,NZW3SUO8O)Y%1DSFL:8_
  MW`EQR82M6NSN:"?"A/E>FA/PI`_WMQ<=Q2XJ`N+9MY;;*^+4?4THP,'PN_`Y
  M7$OP54%PWT[=DI2F@4\UUKG1);+"Y,IB=AO;P1#DX8'6'6LI`4#VZ0=D9JGZ
  M3F)S)*8^F?-.SWTO,`.$&SCM?6YGMW#=N\C([1<2L43$VG;\5@@3R55"M'=E
  M#G?M3IF\)X$ERF\V))EV]-SJB?J06;\ZBJ\A@,3/UCP8VDO+/N1WD<XI9W#.
  M3_]=Q:C/:QW]^\T`,/]^_L-5BT=54]'KG$HUUT%8E(1<,/JF2"&(%,P^$`T1
  M]%X0IQN8"]@R7^RZ:(&$#"!3FI669"?G9']P$$AZX6CP3S[2Z&^"]1,GPFP_
  MK/<#RT)H>CC*??\&.0;&T*(0HK>W]/3.4#7:LV,FNH!-$7@&*FA%9G<],7>T
  M6O[YL:+X\#:F+V`F@6$>/,."L!'\H#0;G`$P)CD0-=$IO#K/(>7G"6G$1Q9]
  MM"%2_V:T>%C#"RK#AJHG-3`QOR#.8!W:N]I=99:)+1AG9<?'W(06HFA"]0U]
  M1BR]YB+(=S]^M6;=O*B.?T\RASG!\;+IA]`72^/VB*U;LPYUU8^<UB_H$/]=
  M-"(`@CZ*.UWW#8?3RNZ.78<(\0Q&/YV7MUZ0%XL9[F_->(<!U]\S8XZF@YSL
  ML;T2:Z)!!YZVK&+&]_L=PI8'+,X6?R?BH9HBWI[C91O?;&#^^44Q(%)N*M-^
  M&>UUH;\USJAF).X8YB4)</H;VUX:0&-`#R[%E':)->7"?9(#617<CEH3VI[3
  MK\TWN#7"Y2>#><(V?(9]B\[[HA2(A5H,\PMF5`C,@LR%=*WK7/"]:EQF)_JL
  MA+4[_D,EZEDI&Q9_=^P2ELJ,VZ26#RF:`U83'<^E3R3*NF^"8'ADT3>!*;&'
  MC:0/0>+%=:T(:IO.2'RVJP,&D8`5_"9`4IUNQ$"#^#2?"VQ+Q2A5S=5W#]&A
  M``U[_H?Q$#U9_R/V]'->M5+IS5<?5SNX/^,W9XX"S1*NZM081]>$E>1HM^!5
  M[.MO-Q]_TVL2#-<.`5S6\MFHIY\LJ.++CWP<_L4W!Q+__*?0_CM2%]]TR@_#
  MP?<\)B-ONOP*=*5.#*/]DD"^-W);@_P.<"5;@QB,-4V2'&@*\,IZ0+.5F\DV
  MHM%UH<%W[N1AX?*%7%@T]&#^J'EX9!5(;#1%``W)(;QZV^5U#FY-R]A_]4)F
  MQ@>:Q`^(_C7HYLZ#R9YC!N81PC6BCL7OIMO(!JN*=G4JL_?"*CU-`L\!5`2[
  M?,K_6V$BS/YAN%U%.@CF5C3/R^9HN*`SNY(A#ZSZ'^^7\.KA&)']*Q)M)\+Z
  M9-8\0*II^9=^HF8SU')CS&IU(C>G&+E@<'*@JB,#',K=>2V@)+O$^Q9YDN)M
  M""JM]-&?)Q`OVU5IGGYI[`L+P?JF[7P<=&-U'$*O]=39W$KTM%:L5+FZ[A"X
  M';(0_SK,9(+E*4`<O?[Y;@W8W:W/4,S;)3+G\81=`(@MQ19;=W7TL<M0B?2J
  M74TI?/MA/?V'.0QU>\YZX1?M<E<;T/Q\)J$[W(*K,D-_6E)%VH)\_^:IH+T*
  M2R%XQIP+"0PYDMZ`MJ(R,`8@B1BD3!"?S<`M10T<Z8H?LVO"2$_7NC]3_3ON
  M8W[GT&0GAMPDVK%!R'N510;:+79V9PPX4^9E41O-9%UR50*_"L"%T4`:L*L4
  M(J+)HU'U3!C_Z=+Q56'7H,=/FM_<NR^<*8[_E6?K&6?U<"C'.(Z&.?6KXD/Y
  M70N$"8(*!)[K2/.M/<,7_G)9JGWLV3!R!B^'#[0(F^AW#(._3X!&6&,GML4.
  M^*B+X8\I$Y5@<T%^6`O(Q*&]SQL15DDS*D-$K1%1;O%\K;AGYKRQ<MSFH"X&
  MR%ZJL,T"-EQ\^S)\^*RPTWSO.%RTT'(D"6P)/"2.(T:3D5..[DXD6,OX_EB%
  M-[/C^SM6Y.8X0N>M"E'OG?55PQN8P+'BI%W4>"`U952VKGJ@&D"1WE+I,D;'
  M!0I#W'3/V_1?=(W5>)?W)F;RV"[32;S!!;&`&]-(,NTABL;V(O&@V_JT,_(.
  M&EX=S.=F0X`R6?(G5>D/=Y5MA6ZJ?90;W;7K8Q.!'FQ6@ZMEZSE/9TFR!M&X
  M7?<]/5:ZOI?\STOJ]/JA1F>G95+NRLH/BV".J.QZ(-^4R_XD)\#0!)VRLD^(
  M;KDXO1S$K%SZQ^CSX_7ZX2\,2_I>Y:(<#D/K(N"^'ZK(=N/X1(V+$I92:N[&
  MM^<7.$@-53!`OTXX>3*R%Q@6@'L?WD]39NK9V&^LIM<R&7OU$B?S6:.#[.C>
  MVVB![;Y`I$W'AI!7X6^#_6)CQVR'0'0X*39M5=1'17WCH!1G[5M];.-77!<[
  M8+D0<]N!%F7C:;!]KI272:^P8Z@B"\;P<QTPR$@RUJ_MG`Q%;EC`WAD\.ZD2
  M\32N5G76>4%FZM#Y.H%)_@:J]LD-S8K:^V><_2^L@6J`.CU7%6&YXZX"PT49
  M`QN-,0S$138.5-<R2AH:/\;($GR!$W`_[;(HRRKEI1'I(R"H7G($,YT=;DTO
  M#8N(R8/(N%J7Z,.CM%K,Q"=$!4`#`.5*U?^@)Z=T#AHUU/GG(NVH`+@C3:<5
  MA*05ZK`4Z@J]A;A4PD2>]_QW#1^:2=R"/QY%7O#8G3Q_6`SD54!S4FWT%_*C
  MH[Z>)T\/-\%J16B47KD8E78#/^'Z<H0MIDWOFF*#I(9!G^18Q^@Q.3_:16F-
  M*ZFA6VK"1^]W9;EJ^/9S^2'$-+<]]J4YW<'GJXAMU:4W`1,9X6F\AT)+&YKA
  M@U?3X4N3CVTIIK[9S'O?>;7%-MNUQCS$H3K:WCS$M"[-Y0I"'Z_,+9"N\AC&
  M^7W'W>>U=ZV(IDSB,\X\..TNZ"4(=[\0W+5\5%W9**GXL![<0[O<7*T:/FC-
  M9*W)*QGK10_;\R^KY(#,:+;MYV?(NE..[FY^I2"]E36S@)M@A<AEMJT5,BWB
  MZK6?6BJ',NSI]:ZJC9_D+@;O$QZ$Y"[`]TN3=7K%TXY:G*2@SFMFM<.(@B^+
  M0#Q_=^G^$\2>;)]')!/>E<X,Z*?(K/$S?8/81`YN]27\,O@A`;BC%@]?4A[M
  M0^D=[LKS8PA?BEWM@=>2&?JP.Q$X[A^5\O!9!\$%1[\;<L9\@3+V3N%FP[!E
  M2[F"(;B#ZLR;A![0$(<^B]])RZVGM@7I5%L!,2MY%EN>(GK*D"W59[X.><TC
  M,V5K]D.7S8JN4D!VAFW2;Y7T1RH<G!%-5MGO^S!-#]]E*%=H<WB:>`P>0%\,
  MNY)\VV9LJCX=>JPX;VJM$_*P<^VU4&:/?I!BH&D6N4QFLH+B2__,/%1HO&;W
  M5`>[+TB$B=52,I?X6X=),!ANON-[H)U3G@!'M[&)M1Q02UC/@Q`IG=:\W:;L
  M7[G^VG'-S+1?W$PPKTQ-V?L$?K8IVE]^"P@R;?T61_XTA>N,=O-!<!9C._Z\
  M)E]%]Q^;6]^@UL\1E$]WWK3]\=*$M-YPS)/3"#+:,AK@*9FL0[K;;2YEK[Y1
  MNF@DFN,!&-?64=&O9E_+;"[JGEE0%"*\$72HY,[4Z?T$;:NV=AM`7-Q`Z53S
  M9]D:`JP)Y0=6";%*1=F^ZU87.,'&;"2)[91IJL#-R1C&Q$W(>AAT%#GOUNG3
  MBOH'6U(9=WPRV::=X1[&ZGC8:@=Z;#Y+)+0T5*^*H1J+MZ'M$L(&)C2,^F02
  M*\>J=LDK:3!7J9#T0ZV<N9S3%*(+>N:]FCR+^=88@Q@CZ")?V16Q-2D'T[X'
  MV&@P2VI!*9.6:9*E+RS/OO$S7;`LYWJ-&795H_"U>"SE&<ZZ.U\([T'B5A.=
  M`#A7"FP#GR_6KDL!Z`I?*/K\1?19:<H'G(AZ2V9\)FZJ+\A5G$.$%0KZDN,'
  MHW>><$<!<L\V!R9`!0YI_<563/Z*6:G]2<7%V5627'@T4):L-XOKILQ]5A=,
  MU^00H#VW;!))X)$$/K.<#$P)FML*=@SPSA5>VG*&W?=,=ES5GG4\G>V(]/?%
  M53>JZ?G98='8VG!M<YIRN*B9O-K2F<-O*KM46#8,(Z(5V%)4'Z9F7<OI,CXT
  MIW3'_.YTE4E<=,?$\+A/?$_(W**$QSY<]R*M_@M/1A";Z7#T*6<RZ32R7M-H
  M:)S[LRW;01*#0Z//H&IB3VMBMH;DV5P1HHLO93SCEJLZHVX;?VJ5-5/@9WI'
  MW:('[']-A^=@!9!=T)V'(TH8P['"AI4RVF&D[SWSJOJ3YUN!$W>NW(Z?^>%&
  M6;8NM+8DPGS1(E^JOK<:E;Z4;^^N.NJ9)0]U<YNLMY3QTJON\O+W&MXYQ$#0
  M.SE'6Q*O-P4@ZHBW>[8[[E]F=.:Z_V7,>"`&<2IV9+]`X(IWONTXD_U3J'T`
  MW5FD.Z3J"6(-V#O>,L*+-5>?%C##[NV'R";2$;()B:\W^H+R/M5Q_F>@/&$X
  MLVIB02@.GTNI6K"H)17&!1`RS"D_.E6ZPJ_IWN]',?]0THDTY4-CTV?7[U1=
  M"9O2K/FR?="\[@3KH]X>*1`)$A'77>^V,!WS3Q2DJYRO<FF]USUN-+Y+0]WV
  MJHU#5&VMZD/DN#5DIJSO;M]E=[TX)T9*R#?RX(@_3M,=Z*9SZGVL+)`QG'95
  M:AOD<@6!4-`!(#]E,(D`+*^JN@POGSJ5K+.#JE=W3R&1YB*QC@U4M41B@-0\
  MV&$N(C`%MIKFR!KIB_Q+7?6;Z6H'IE!;=#-B\6K8=K@+I_71B?TGT%:#,]FO
  MH$A7X9;,,LLM>0@=O9NHFTDV(ULJ'EAA^???);E^MKK*N'=])$2._/W7&U)I
  MPED=$`4@>#IL.6R$M\<R,#C$]Z$IMZ1VRGV6%;9/@%"Z*1,HGPJUA(:+@WP)
  M\Q"IS.#4"G'^3!6B*L,6)B4;F9V=,4?#%29.1O.9%HE-GD$N7=0Q%%'"7M7$
  MX@6=>C?$ZQE#K1C6PVS%CC]N(=GX<%]IX"26QEQ@1DUVTRNZ9O!#N8G\SJLB
  M$[!_'__]E&BA>9.9R'SID.Q76:^Y=W$N'\1G$BLA$_N.7)_LV[6"14"=^XW@
  M<0FZW##P,R<277F5[.E5V51R[O6-?'N#I&U+0>\#/WQOE5""CJ&2150_48"K
  MJ[W';26K\O^3IZM1IPI>1MP;W*Y/WXQ4S(F2S2(G-<,C9%#>S\8!>;H9)55$
  M@B<])3M[/5?):+`7B)!Q0O#N`J!-;OJ$3"UMEO/FG)`,?;/#``S]Q3=C(Z\/
  M;_:R$?%3EN'\M$%SQ^,SHVSDF@!%Y"@OWW7<NL/KSWVUH3B$M)T6(7<`XP?2
  M/B.LSBL-]FGKFR$WN#X05K,IL@(DII%!DY_PV2H^M[DH1%'/^K0!_5E93V%@
  MV3N'+/W[XV!/O5I\))(*)(X#RKI/$/FIL)*/NT=SQQ,]^EW/L\9.2U3X4YD*
  M8CWB?SR9?>7E5W^<;KUG$+XN`6MFC1KBW;K8&!M]`+N@HT^\\%//(=1[^HF;
  M&6011R3M+LMA3%7VWE&R6,.:`GX@F9&-LK`8#TCM?F+"?LJW9G3I.S9)XG%_
  M/Z)5.P(KLPW*$I][+8";_MVSU#2MAP[?6U,W&265[IJFA]1/OOY6*(JE3_AW
  M>+2OP15$LNQE[(LU*&VO];X#[S%$E\%:[796C+E@0HH^.PTRMHQC(@5L<>@E
  M3/5OK<Y"7!=@C\^:PE.)FNNS\N(:9/(-N_C5G?)=2Z[I:'`'J&$R4;X,(+@*
  MIY/NZ_-^()"T#B`GZ@1K$R/@1](:MPKE22DBY4:N=%NK.W?XNF=1<XXOY&EX
  MP2U/D_5<\EJT=4Q[5]&$P'C%4QH*@NE6Q;_.<4F0?0"!$[8S/"W%;M\@GNB;
  M/"2RM!4D#*HE#/CI@'K\()HPZGL1'3'*2!@B6'6@%+.JJQ'P<]T&1FQ]+UF?
  MQ!44"USD1FY20.CI-2N'G_PSQER5F>!J5"Y:TI<=-)'[%,D>ZF'DR;W'`2C,
  M3N]2?0TC-*4MT#Z44.FEXDLM!BO..=8EZ'!8V+$KY'P3"3SX8PD<'O00?A,M
  M7&&[/7<H]L+FYC9><R^[S#3:O-;R?K3;;Z3&)Z6-O<YB2[I5W*B2=[*>A2Y'
  M@"EDC1/J.VRM(0&P&3]W*HRP[LL$2U;7HE/<Y'V8H/PXY,7@<KEN:6W+H3N4
  MW:;FH1):S+WE$K7?]'.V$R\N)SEH8Z*S1G-<\BR46[CN'*V8I:^DH%+RJ5'6
  MG]'IO0YS?^ASAB67&QO]@T>ZK%+:ABMN)2U]8F\Q*I&T#M$%O^":/82LH<(=
  MB2PC?3TZ+.ZFM%AL`!K$,GV@B'6$[5HYCEYC27;!Z$KA:U0G;]EPRZ,U^J<_
  M^[(*J.`D%CM^!2?$O-(9Q"3,G?,$,69;'?[HL76KT(1\IF&F&WHA4QL8:>",
  MI_93*@A5AV-\A-'"NJAQVV`<[KZ6-7<H57=UDN"MMS!0*DQ3J7.:6UDJ)!?,
  M-X.`WG0=,([3WFQ/T1=XA=W?>F7;=7T76!%9EYU&PH59>I]GQK6!0L4Q+=>&
  M4XJ30!'Q>BN5#F?$!9_R9/Y%5AVP-T\.JG]I(9QHTOP^QV=-F;&9W\*=QF2M
  MA,H&'KJ);:IQ\7JWIUL!A.[&L](XHM8=7CEK%8-G%VSV7/#]`[S:/5LRQ2^>
  M6&]JNH8?Q(*DNHK"NR7,,`(?,=C4[';Z.X%=^-4ZQDNQBL!,M,+XVQI309&?
  M7KC"ZEB`!P.4MM@P,<X1C&=!TTAO@,(<6U5767!^2+KV.]6^8R7?X'G"H0Z9
  MZ%/G7QN+WG@91WLL\JU,.M+1//,[DV!S2BC<FZ3U?9(W]/;G(EE7=&2H8F#)
  MV[J\[>L^P`[%-F/YVMI3'H:UVLO>G\G0CYT>J,>JF8H`71M=%>TSK8P;<KI!
  MGW7P#.BX$`0?#)WRVZLCP3`&)1YJC)"B9.@10$6RHT$`AO5#ULK^_K63(9SQ
  MK2"DB%QY[@`5)20+,8(VI2Z5L)2S'M!J=]Y85"><?W%)3B96:!U==X6.]%0.
  M'29"X4TP)G(64&L.X6U28U<*CHCP?Q@[A^Y<`&5IQ[9MV_:.;=NV;1MO;-O9
  ML6W;MIV=Y)YO<+_)F=Q)#^H'='6M]:QJ3KS[ZG/<OOJ!RJ1M#@NQVPO@!Q.!
  M3_6-Q>,B_":T=<IJWK"WH?A=?%N^[IQ+T6Z,7QJ5N8-YYO)8'C:*;(C,8"GM
  M"WH,V]P]RB@*J\;E^UUH^HA'WGFZ-D9VZW)?=I;=>RBX:>LQX*76)\Y3@-G8
  MF1M:@O8LG*#X7']DA&97\K,/7BKO.BCSU=*<$YT8^O*'`I-0U7#5Q-_'R:SE
  M#!H(XW_#)3G5+^Q"84;"!SQJOAH.0VHN1*PYOCG#.+*91,5?O@3)4[3BU!DO
  M;,M1#<".&V#3?E(J%_I`MFJ!.P@H-$#A'*O]G<5:E)YQ<>_"-6G=-9"DIGP=
  MGN4H_.16%[7%#FA`-?::(K#FAX_<D=FA%\,%D=WUWVAG'C!/4:,+4P*OXN>@
  M+VFZ=:S7M*.L5M:+T&@)TSVOAV10T6E=,$^]4\C]&(>1__+D72I"T"F(GA%0
  M^].8==8@6&3XA[%PG$LS+Z`-[08\VP%TC_T(OVWFU:I1$Q5U$A=8Y-^/Y_]@
  M63@/FXB.'&HZF6F4'U5VL(1C'OH<*RC'A!*(`;,)N,C8DZ-Z')>H$3@@RZ0S
  ME&""XR=XR#=#Z)X`7@(MEN%)ID-:M_P7;2*R)'J!A])P+\X//.YYOC)OQ"&,
  M.'?``[U*]*S^ST!\U?V]JC92;?463L4;IUL,CQA57#J*7Y4'Q1[]0:S54GU6
  MKS,5?@BE.X/K@'5Y/<05>:&86UOWN>H9<5Z^:)<>_U1BED^SA]L_&ST7!LTR
  M3+D41H$6H'6Y+K)6Z_PM<J\V\%5WFY4?>%8<.3YILV#H]$VC.*/UINA(JVYI
  M]A1C*R;-K'S5'QY;4:=6JSX&??DW?9]6RS'5K)QQQEQ@>/I,1^,31Z4S[(7C
  M(.NU?K1G[2-_1.G1(_X-+(QG[V.F1B&3]2N<IOU-OL1OLVH-F<`E0JKPS4]D
  MY8C&"+"Z+TW@._G9B\E1@N2V[1+$33>]9#J>CH8GQ$]^-6M=KF.NX\>\H\Y`
  M^#)T89W#(E*IW3$PK(=IX8E=M64"O&`0YK'IA9O^OT)TFVZWNI+U@KQ"<"9^
  MKU1I7[ZH:2[S'LKZU"BJ-)<MQ:G0QAUYOG_*L[2(?2<!CKAIQMO\3>4J=^3V
  M>5!ZBW3!Y;X1*&!SHTUSN>@F&SJ5@D!16Y[:C-N=.Z9VUIJ!ERZ?Z$D'OXG=
  M3@-6LK##J:E$TQ^<S+H6ZGEQ+LX3?P],W-E>%:XZ359@T%*DI50FIT5S]]EF
  MO=VALVWZ)_OE5Y8\$09IO-NB)7(_>L%)TO/[LZY%`47K*BS1N7M)V(U6\`$#
  M%G]DH?L\3I]%,R_F]6V>V=TF5WJD)1D>ANF1BL8J7G!>=SI=&!R(&#H@\&6X
  MP@?;N,G&AC':4"K)DHP9J?`)J7(;XI$#WBL0O@X=QC7]7)2V_&^6*SS4Q!YD
  M/,6!PWY/Q/CJ*_?N&N,73?*HC+0M\4<!.LYKV8G/%SG0[%J^O39#+=CX_NPO
  M=])76][]3PNA^%'M,Q<,&GZ/K&N#:3%TI"*X"N3BE=7N/H5C&8]C7$<0?"9+
  M^O8NGSG((=6H,6%I#1>):*@IG)16(_>\[H@9-Q/S%.X%;POWTLZA&7_NE&D*
  MYGTFW>B?D4T^+9.X6.N)I#)]*[:2DG^01'<+R_1U'&2FOM1X8`N?_;(X58EO
  MR=N8P51BD'RPIQ8T4ES@O:X`-<JU`6UG1B)@)CJ4?RU11W?EM<%X+VZ>>1=_
  M*MS8@ZT`\I(E=J@=O@J0-GIIDRMJ/H\J0U+7Q31,1$&0X^LEEQ1<T_;Y%=,F
  MGP)*GI9RMZBMTA8PHN^VZL'WT"OZ4VW8VR?6./,O2]X@OTU-:;KQ1EW>[T7O
  M'O@YDW(]=A_<YRET/X]VXIWN;:U6E]\^_AP[G#[N176,SV0H0V>A?32LUZ@T
  MQF;U,'X%U"]V^U/A4N9&Y-]#\#\<.#;]/[5BY;8P%VNFXO0)#67CORI>B?4P
  M<2:OKZ?0V"#-&HUFE-ZR;7KM2]HCJ3H+9PN"O144KZ/;.#9.^7VI>X@1UEP'
  M0V/(7JD\%8Z^5IVX<PQC37E9`*3L=/?JW:W^"E2\F%R#%_NH24IY0X;;=M@T
  MF9_BOK0RT/318C$?V<-&:,/K]H_#[,"!LTP3KUE!'_;0OZ%09$2T03[!$Y?_
  M<0L(VIZXHP^%]-S`F9PV_\B0LH&:Q+[`R(K608O.RU2<^:1N_XV_?[77Q,`_
  M_J1MU)UKY+P5QBP455;[MYQ"G-C?ZN0[?U>4LB?OO_<W.TU0MM*"I"#[=Y<1
  M:#OX>*=.\O:KL4X66DRKXXNTP"_-6FD0*4@^/:(T8Q`3/(Y?T>3X2HU,K),5
  ME6X(D@&QV[#&`F4R31G>Y`HUF@TI2D)[/`28H*="D4`(;"!1.GS>OUIK277M
  M20CH%#TT^^#[]$!^?^@?/E"L[DHUC.C&T"B)1O?)+C5NN!__H8!HF]`PZD]=
  M=]M!8P1],!97:_7FH)$YE,2N(1+[U&0#YNY>H;U$"7%.2SU]6%[W^XWDL'_B
  M"Z>XY\RE0+K`13*]T?Y75*(<8HM-W^8D$LQ$_*^!K5;$/5'RSS#/:V^"+EO;
  M*N?;S)8D/US5@H]L"87ZXN80N&&%T4C6QLT=N47GT^.1<.6,PQ3O9,)<*?4+
  MO<`]([Z>_:K9OP<*+L("0WX5$ZG@R#9^ES59Y\!UA*1LMO,B[C%?_9T.PGA$
  M:PX7IZ-%`B8G29V$G@R[NS39B2WCP7'N`JX90T!!7O@;[RP5'?0%+?$GCC_9
  M^6;#WY+BI@4)C-Q/A&1-DZO,V;(O_:-UB>9J5^/JM(WK07E#RKG"K>,Y$Q6&
  M#A72_'BT^>(![96O\X5F4)/)H=D8P[=G1ED7QM@[K#@:@E[X_2Q6356OLM4C
  M^36"WJRYM54"6<$$4B/!'<_15U:.E\.1/'7(QU9W?)[$VL'3BKB#RPYZ_M0%
  MZ+N&J0UD60O'"%ZI3F^U,I,_KE*S/2L=K,]('JWG7\Q'AK-`11E_;".8.Q"U
  M$,#]-YN*[K1.]\E;+Y36<BX?/-Z&N%>`>2[&3G].:AK&2K3?XB-"U&8?D+A:
  MTQW=125BOT-9YX.#M\W?!8D.Z#3NYEC%33P2I'K@EB2&'OGS>UNF4[_$^%%"
  M>6?6EXRUC3=R*YIA\^^6L6/^Z#[W*H^%K0?7URL\PA0GN4@='`6)Z5CQS^C?
  M_3EH3%R=97TIO[C[(\^-`5^+L+Q0!RI=$ZGWEYM;K7*'^;R,FGM8KYBY</=.
  MU<%HX([G0N19LM;F&GC4X0$YJ1+%S]0$OF;&I!$[<4\*>2"X=J^4"-S\V5?%
  M;"&)FB0#MA__5#J=LY2RPBY;N2IP='Y:Z0*:G,-W?$;OL&.3<#F^8JRY]QFP
  M!UXTR$)(7PZ753==!@W=:Y7R5.`':2S=LX^VVHL`K><[0(A!@T70Z*UNN4*`
  MS[<MS-@#F>.FMI,45FUB?VB!7YQ3*O,"#_C*0E9'#K-+?G08082JRA4?.T8<
  M%/*$K_[K8TR)_IJ3##G<UC#:'Z7E<YC\.@>/9I/^;_%LKQNGH41L:C1G8Y%@
  MBZ;7:`S)(D$,';6,N0*+)&I:.&4GRN10M!&S#">N?%LKWDYY;<W0"%*:$W;-
  M/<REE>9$B!.)9&]3DI>?(D+1E0?Z5<AB?FLY5`@F>D!W_(""4T71=_76($G.
  M,!]*="FGQ>HCF*S-Z5TT[5_&Z>F8:9"GI;S&K/CZ/WQ>-$RP*S4`5*_BF"EV
  MW9_P&40T09+R)/#K<;FY6+$E[Y&CL1U#S:*2`0;W;HXNJY,,/X-*?<M2D2S#
  MV?-_%VI#A<GHR]*<R*O<QV4>CQ@V^\'XAE`.)@7U]6&50FGY+YX",C4UVA^/
  M4TI:6'ZV8#^D.1PSIWQZZC(!GO)2I1?XX=QIX2_!\KAY^S(7KB*R@QS!+QR)
  M+P>P@NMP;Y[B,(L`_K.L-_LY]LPS:ELC`*)ELB_3RENRL!U`"45**$.J^NBB
  MN"*DQRM!TZA*J1&Q6BD[#$J%!;\:$XG-!G*>0#:?%O4+O;MI4%;-J;"4K0EP
  M_`KG4(;']<@KI=HE=0NE$L]!`^WTTCZ8G_+<S?LIZA9Q$*:Z4]\!1(5/X[(1
  MSSM=S&-K9L!R(+`BR@4B-'F30N'N3JM`@<>\VRC,V=,.4![GO+P4,Y4J`*PS
  MV[C@H-(H5AYIJ=[G'/S!BT.`?GQ34SH![<:\R@J[?PQFCDRV$:>=ZC3GL1"^
  ML=E=,Y#2E.:T+EUYR/`WC_?[&7#]/%JJ"G!/DI=0_8J88!&@.<8>.STEY-,#
  M/%K8IAGRMF10]*V+5:?2$_JMU%!6&2FG&^U]_'G2XI#5:LK!I`6<P@PMS.,F
  MX"\<=+9K#).OL9M[.RE=I20H;G._'.CG_FEJO._W_A6@:APC%-J)=.__\W3!
  M7N$^F1`!9#/<;75T5H@!OIX!K7<,"NO;0"UVO,\%N'^S+MSQ&7ZYQ#21T",*
  MXJHLIZ2.^;*'=:>5(D'_)&<_#WUJT@Z"R"9HY;KM#NHY[CR"'[[6]+>L<T8H
  M5>1DJ(9]5*X0+8SE#8X0]6C+/3E22(%[`/TF=NG^^\/`.+I[X8T5JGNW1=2Y
  MY7L<LKK-FX\+[(+ZPDYI7C);8UA/H9#(6+P:>2TH\/$;KIP&_%\(*OO_]@8P
  M,W%R___B`':N_V90N?\O#.J,GE0*_M^D^`:'?^A^V;?0/<Y&$A\LQ%[7C1($
  MC"C\`N,"+9))J5)1:)@ZS_7YL@6*XV`H+Y?L.B9AI#6'5S0U4;I]LKX>[`J7
  MUJ._M;]^SS,A^7X8=7F]7HG^/<H:^?8*<X2^;T*UOQEK?^L%O*`(Z32F6CQO
  M;E:&*!&7/[WG-08JH'^>[K,A#73[>H,LZO7:?RY/2RCN<A_7'.SEO9OT.TX^
  M;V;@[-;-].L,!HM9-C-^2*^N7XZR4QJG2HHZ_9,$G.6KK[8V+[<^:2^N7N+8
  MEXKV+T@MB=XG+'V^$[*7^#[,'D;U!+<Z]?I88CI^,'A94YJR.*;TV1'\$^ID
  MQ8?:>^OJ!7;TOSGXL<_X\*]AKXGD1Y/%':Q^3\;&MI9B[/UW13,(V=`HS@X[
  M;:V=7"F\WLT1+C_UFOO?S6\L<\=L_[VXNCPV9R^CU`L.`*Y1GIO\[4%EGV]X
  MO"7&_A6]NM+<_+X<!`@J"L'T^=W?[_4EIK,X=,'0)`.OGOA`Z(EQ9G(WZ0W!
  M1UIGA5R5[R`-=74"N^Y2-E-I!@1\FWXU_GR8?9_B7D\,ZAYEH!EGG))O!Z$Y
  M0B:AB>34+!'*PTI>-;-+7JF/3%2FK0[Q2=1/:J:QK`787)#877,V@#R!E-^H
  M:;TVR)/W?-R\FF]JLM.;1YEY0+L)]CS<[Q:!?B?12>6B$$CS*F01FC4I>EZO
  ML,SX-_PK4=/T+UZJ6M"8@/5R)S9_7/"/WG57+3VC9E$F"='J2-/GXS?V!%/+
  MJ"E$]9'J"^Z3R#`AXI4,7T%FNCTA?8!*\0M(,'%CR@]#D;F8`OO<:.X<,HL>
  MT`_8@,/('Q],NKO:^TLN"M*O5Q_@#;(L."3_H+XNO$#S\'U3P'0K_?JKY.>K
  MO_9`:MLO*PS.XMJ$>$R[B,']<^Q[:&@NJ,7UBSEC:(=N\=L\IVJ(XAB/>M_Y
  M<7E@@N1;R6AW4%]9__)@Y_=/Q^]?F4#O)H$+INPHCH'V[]2+.*LY[JZ!O:%O
  M3'X@X*,PS.PI!=%?%L7,9!PVC0;::P7U69J(0"07?VG?)RR%E]K&:4`>EW`@
  MDW_#-"`-HC5,@B2"TB)*$M79GE)W980'$V6OJ:,/59:GPFP"/P`!G]$[2MM<
  MM<1B4&Q.*K23H_[2,L-]D>[1T]R-2D%CMP:^]/RMEFQ-"9I':7=$KB0*Y4P.
  MHXZ90Y;(`Y8EC(F29)Q&RG4QG1;?%-CL^T",H``\^5M,3>@GD-=TV;;^5]5L
  M4UK*3.(`GO>JNU@U3O4)3(]!%,ME8&!=25DBZE(+=Y"3O\%;06&?H&<YBKQ2
  M.".)"F:=PF9>';.UG%U*=V9(R4/^)QH9NT40M-XD-OTF"<'[<<$CFOOG8_K<
  MH=+U^(ILO)%-:5V=)45"&31T=?R98,4@_^`?_?A=O[DR)V$EN&L<-9KX)-N*
  MRL^25"V8JP4*,.](:#_&;4DNR)$96>EX\'/G3B?K%-K!M1UIV92;#RC>KFB?
  M[N\W1'O6XX>)W<OQ-8MF;&X*41."/-&Q&A+?B4;J0D&H>!^M<'.3M-3,Q@0]
  MZ6@PRO0GM!DZZC\<6Z3T"Q+^T<!#4+90,Z54,.B#TCBHE-,:"Q6?JWCDTO;D
  MERU<K9L!#)WOIAK-;R4>B3N-Z%89'RZ]G-.!`X4QO%1U7%[\^(I*T2C2(F9:
  MIWM^6V7+M'PW@C.>&SFO%IRH"B(9'4C)]RY9IR+R'ZR(TO**]*!7$NNYOW*@
  MR.J:2+$WAM`?_'L00VF0V_\,B)/H!QAFH-<L$U'4B2MFM#9`;!"O,[M@[A:7
  MLVL0A[QXC7&LF##8<I`R?]'(D;F@!(VY5B-Y:L*-@!&/X,J^^;Q)[I72P^H'
  M\7#8BRJ*K?T./E6,B_V3><'E:HAGNSLG6I[+XO-B(GD\!P7S6/0\OEMM3S%Q
  MSU:W_AKY?%Z]KD'3TR)E]*_QEDN>PE/:"6EQ`I@V[LC]`FNV:%\[$%1T09PD
  M'1^#5]/P)5\'KT%1'Q/F*G!]>-@TNC/S`)15/OX1,7YY>T$]A,'%M"0OD@B#
  MO`=X49.G:ZG3G10=K-'T?Y)GB58F6'JZK=J5C#R(MF_FY]=6C:I-+43?4+&?
  MUCD>ZK#$`GJ!X:%78RMG`U)2;4<%FE!N,,J`!S>::<3]XV,8XZ)BU'8\^F'#
  M2.<J/-W*V#OO5X5V.)1T?'7[TKWX-M8XO8"-X7(FW@18'A<(HMA(>IVFZ5V,
  M`SR2\7C+H(T&?5KJ&<F_;_^9<[;QGCYP"&D"&`JO=8GU<CF-E7_[42,`36'@
  M30>#Z+,F[+T>'65S/Q,9M<S([6FD%%N7O9F97Q1T1(3_F7^_<KSH_3_N!P@)
  M`TE*ZG4;'B:G-=R5IXI>5J[J"?BP1Z6S>E<-H:V->%K!8.01,N`H16WY6'(X
  M8(XX$)56)H*&N+CV8&(C$G"'L/T,M35B).#6MM59)1;M.IM#]EJL#1:,^Z'"
  M$0Z%9K`[@!3,PSTP5NKE/Z_S8VE+&0+3HV23'(^:5]>^%AW.S/+@L7"57D50
  M+NUT[^+^&=!G;X.?BY32&W3ABP*W]6GLY8\2#K'-]:J519<MCF/?=OW>P%<8
  M\41V]LA?SX&EUZ2:D]]KW(D2[GU:/_JXEO=YA`KK`-?`<N>X;"70T-!XB\F9
  MB8:.%J=H``[<B&(%A.;R+/`-98Q.8A]J",MZSL)P?-HBWQ<P$/*C2'D&XA`J
  M]B`O[4A\%1]KHTX5X[:0'NE@')W*@J#E`*'73V_LB_=56@LM'4U732O&N/"1
  MF<RC!3I[>W-)>L5B)/A^&EO>E')I7U3P>!G<-\<XZ)VJDK75JUQ*#VOKZUK4
  M."-^-Q5]Q&%8"I7A\Y!OZ\JM#G%`2GDBKBC;SPH390').Y3J['5W,_<"@VY3
  MI.F\XTXU6B=VW2)UH'M%)<'@:E1B&A#/W&U,8]R9'U(0F6Y=)@TPM>KPGP<@
  MX@=/?'5:(U=[0X:G(PP(MDE]>Z+S+H:QEE7RHS,3-V$*DQ=7^:NG!H<Q>8%`
  M529`JD!29<&#LIHG0W%JTD'$#,([P4<.GF4QYX5R6^D_MR_C68FI71*'51[)
  MG*U"LU0(%"0F.,-$^=M`:N*0W3]1KO;#0Z(@=,.0.MZ/I_['Q:"XYJ_NAMBV
  M3]'..9U_0;0AT53>I^J-?1-BIO%:7)KE>;4(^NH2]NP30)2LMD(?$XV9`BWP
  MSC%`20W`/)E<"$5U`@5PUQ"<0/IAK1>M(:>`:*CC]1^-NJVE;"*X>!G_D`R%
  MJQUILIE4J_5OGP('BOR9$%5E<]2>E=NJ8?!`AC$^.Q/2@N!JQ6Z=U)/J%QGI
  M%Z954MDOX-V\T"BR0)4=SZ4&OL$^Q;4!K2+W3C7VVV5W)[4F,)*E.&?21#A_
  MB/T$^Q,4GNI<3@VSJ]`27^=1RD[28&DTL#OCJ`!4T2XK3X_?A?D/V092K(4`
  MC'.?(X3.I5\=Y&T3.2P"#Q]"BJ9S::/B@7RA[(TKBRDH%8\WZB&L01.%OX@W
  M=1E=D?0GB%$\T=D8Z;?1-5SQ(5Q`*!P29Q??JN1D+"'Q-^(8L]16Q#78A1Z&
  MPV-36)1-_S"&`WU+"BF47G?[LVD`:($WL`G/BW\42Z-\-I+Y]'PQ=P/*+)8+
  M%?5X2&9P1'!C\'G/HH_8X<<)@6_,L'UXML^;]340*H(@]Y%)N%AVU*'$W@`P
  MW]&?%_]YXQS+"&_0<4BK%BP?ZOQ57FDSO%/+D6NND^)H9:C\F>MB%IN5"LC<
  M+@:PUP`#&T(8;HTI=1-]<]\":2[0<S"^D?@ME#R0CF_D#C/RU"JB,T=H.K(0
  M73BDB2$T5-22;\&8H&R-O=8.B;LKH6,#@.J#%XS<`7YNGKW6?6=!-?)S^B&B
  ME1]>%UV,_?C-L@-L07O782^@$TD[7S$[XND]N"=."5+[.;P1LB>O5N7CU0:K
  M!MRL\BT5),BT=V3*-J:^6306M:[U';V]<S:0GF'\`>>)POKG6[)X/!D+W*GK
  M_1@QF`AK(_;QCTE8,R9YQ;%8($8D7VVSR-)Z-<'>%?IM*P=)O.VD"CBA1#AU
  M#%>[)*[%7$P8>P,0+[9-5;^-Y_Q_B#$/=%PPI#KKLI2844U"1XV/F.<-#WCP
  M,[.)HMK;<][2$=QZV(1V2+G'"B=)?_P:5H<BJ1,UK+9UFR8SZ9/%JWC0A+7W
  MD>E*E!:&DOOOO\+!C13P,$>#/7%5U2"LU:1%;+^,*:O!%22'(.+WT^+^_/XX
  M`T4'C3)Q@N85Y!U3"-X)J6L,_=[F15QK)AH)&,#(13G7?R[^WD"4-;;#84JD
  M^[G2`8FRD2$;BD_'>L!#M^6I+@/P%*$<7MK,0D)C7)D7G2!0F.$#ARK!X2J8
  M.&I>^"BC.Q0C*\"G:U-%U21%R.([9P7)+YU7M9)J0>("5],*7UGA5#GC<^S>
  M2<74H<;9@*(VR$`?:QB(<>WOG*!XA+]%L_B,^8[)=Q^H`)BWEWQ4HBR.Z$.O
  M\E0,L]28Q9)K$S3SUVZTY(;#2]?7AO`Z[T)71/X)\%3S!A"%WO'R+=[RGC/(
  MZ#KH%#-V,:3`*6S,1W<K:;P%H-@R?"(1_:$+L6^BPC?WPCG_VEN)ZT@1+XJ`
  M*W#(*8;P7+GRL=K\%.`5L"]>:OYSS901PVSS<YXB^,JN\A_W+^3]2J^'=>/!
  M>I1A]03FVHR.<>-BGEDE7?+=+_!=M$=ZBU1WMX3\`-P,QJ^+>X!\7:Z#ICH+
  M./DUSOJ[,X/RZ9R!)#!BC872JM%%0Z^P4D8H1^U,&4,*?()7;9FA@35GQHI"
  MK$&9X*ZML&V=-EZM%+O1_F3NN7U-XY5;AK^Z;U8)*%&$\)2$T0T>M-%,G2ER
  M,C:U"4).AP\D"(FG?"-]?T*REE:$U^J\ZW^NT#@-0;>D#G$9ANSO,]5U^C$>
  MU@6>9<-[C#S#2,FW,O,05.F]/+<REXC*/K+R>DUSC7&'S[HM0.(DV[45L^V;
  M7R+C\@0K&_@!AO8'I8`56.P&=<D))M88PO/!KKBP:7'^G)O,I5DVEAT5>IU>
  M08AY$Z=LM=4KG)P>^)1`9]4^?L=-XX/A:YUBWY7H^;4AK%`Q:#S5=P)+PF#0
  M@G*D:\E4)A51D<,35Y(`<]^.4W3],1LKTW!M*[#FB\`-KF"&0#XT!32"S$>\
  MC4^D$NNJT2&CNJ=.@Y$&!E1H`JD56LS?O"6PYFDR=@;-@G'.`+R2ATM26&IG
  MR'N9;6)3(>98BN8+;VIL%!?7E_1Q[/3;NBRJD#@VKB#!B^5R[]N_:$BI91NB
  MDB:`X@CJ6J-EF:J9H3MYHW"!Z"62&%DE_MH+:G,W$*9D3:LMBKM5]>-4G'9#
  M2$#=Q-P&SH8JX`XLT(3YFQ9Q69@1*)$S)]^]9-BN#D`13,KP+5!+(/04ZS91
  MPJT5@A'+VF:D"1E`^80*DDZUHW5T*0TFH5WOH;J]N44ENT.3QP4XITWG^8R/
  M:(BYJ:FG)AZ`G(4&Z%WVKZ0X(!NL)^L=7R(U28/Q.P`12^5T$]B"O)F^WFJ)
  M6.G9`:];K4>V+@'/NL'N<-2MI_;38K]RTVH0M<OJ:,:6NZC:O0#S60+'M2T-
  M12L6#C#=QS(UAGT<R03G\)JCFS!D&8Q^*DR&N<2<B]9)G-PMVD)S.Z?(TDMI
  M$7R5+G'Z;&GYS4Y-RU,F,T4V-A0W`_`/RZWD/FR>%?&LXM<LX3$B+Q^6Y+;K
  M*6BFT/@0F)85#QC`771'Y3.(C9CCSSJ)/R7,3+..!X[RF(ZN33=!\P='9MFT
  M.,F='OR"JL&USJC)<]LC[G)`$R++&3+8EPVTGF]L\2C&T"&T!$L%-!*ABU-C
  MFWJNNIW&G&#K+SN7L4F:@RPXO]2Z)$5$-DKLK\`HH["B\]3WDWI_9L0G]$`P
  M*QU7;950>;6^G>*>'.`W9::%XV&G?N#L1\L:>E.>9B?S9YH@1QQRB/3<AR#N
  M="W(QW2A>NPH3S/BERM&T\!=*6`VFG5%ZCR`X>%35:&AWD>#V&1\V45^2<RF
  MON8XZ#D+W)5]5+SR8H+`B5"8]0(H*8;=5M!0%Q?H^3C!X_F@0L?E3`^GEPQ+
  M?,:<.4=.M^CFRW@2IV,FKV_DNT_]GRT&?U(HP5(#HKXYKT$TB^P"GAKTHU<E
  MD5'3',V)^/C@XWOWT-R35GD8!R_%)@AG.E`@0/ZT%%PG6\,80;-AL!B"6[EN
  M/L5-9"X:,7H#$JGE5J=>!ZMY@G,W4=_@QG61P4+HU@D8NC[#84+_B)M$:E99
  MP]54T,PH7T:G[(2'T%Q$^Q+-&C?J-&9,D3[+AXRS.=ZBLG#&7[*S0*<S4_GD
  MR=LNVPQPNPHV>B+7>\3_]5"WX.8A$ITI,,0SFKFR%^6==&)DMX2(CP4%BG(6
  MGPMSB/2FC!@;+L7"2-*&/6M)&\\J16*/D2?'*Y]Q.3ZM*`AB_+C+5_/@TSKR
  M+CNQ/'",[Z\+,0?K,($?GU"C'\U3@&?#+@X+T9>E:,C+;<0GM=/+*/T,2RB2
  M(ZO.)XDN$];+Q-9<'#RQOIV4>A!0?XIL^0W)M@4E4WO@:""1])/#R]T^'L^3
  M?4676G]#(XNK(7<NFL7:;&)0&P2;;'7?Q;&P[&^[ZB(9;K\K/#_!DLR40&=J
  M.[^3%"&`8DI3'-LQI#?M=*YIB0M<!,$7L[Y3&U]L*V9779/.55'D%EV@M+<_
  M&AY-->05Z!7%GX[JI3O01DA?D^#60++9Q+#`J;R3(G"X.K)?F6-00X)4LT%/
  M"MU*%8Q,L]RJ*KLW>'=*:%M-;GA+]`Q#][P!VMLKH(F;&:&DHO6D2PRD(H&A
  MFK=^/`+>=W5^XY6+*IQ('([$SF!M,LOX]\$SDAHQP'H]`'NYX#<V:UIC7$_-
  M1%DC6;<[*`F;Z:</_<3Y\M!W2>IUD'X(^]LE,6=XX5,X#6-$4Z*OH9*/#.OX
  M40:(UPP(K<%/(4`V/80C>['P7<&6RM9M[0E]AY&MQ!I)1'5D2/<%8B<Q8YI\
  M_!)2\ZSFQ\AO)T.6-%0E1(>;]:\\%A>/Y+``IL.9\8H>"75JA:/PTVI3.UKX
  MZ!^FQ?6E,9_NL<*0)R_;(8P,-2+3]W$1U4^],"0H*J1R`T;%%@G6\(<R6&?-
  M+@"%?=2+J8C*=2U?E:!:FSG$VF[).`5E:@_[Y!H$CVVE?4</=1/8_..5=E\J
  M7='N50&BQU-?IT'IB7RD43-F/6&>6F5LMN;RM/HZJ:'(0S$*VKE4%",S,>,M
  MZQ=YQ"YOZZ)7M^$Y(#J(*4ZA'`ZG<[!?;X9QW6T(K#7+L,C2/)W;4L33'W67
  M`ASC`RA0&15MQ8WCR6POX<,ZQ:9E/QP>#*IOTUUZ6^Q\S#*%S7#QIZPGS,J3
  M=&O4WFEA]QIW%NC3JG9NML8Z]'[Q`J$;*P!GI?>L'#*TP9TBK55<-'&"F-3W
  M&/#-U>TT'QA)ADMAQX.*1J]1AH256M:%<H$S05?!ULB:`H9P$]#+7G.3;R0?
  M*SC`#(5WYB+_2_188_W1IDLLUW$",Q.=V&6UV3U%'N;HGB*\TZ_7*+:\[D:<
  M0"O6VOF8J&&+72,7?N_M%(O5U&L6T;FQ[>P7S>!*7D::QJEBUN.2ECC5V$S'
  M&0K=I=VI70$\U6S:>%]JX(T%RC#]A:L8%ZO!4RE%G3$S+D@<-[B,=KG_!<`2
  MK6R[`<SC'[M'O`]*L'X$E3F*I^)5M&=PC+X$Y[5[/AZ,R/'G9+RP[T#37+G@
  MN:6&;1GK,/EUX.#TN*L@5'$>SQT^M)?2TE!MZ;9:QB&IQENHB0\^I-UD!&V2
  M,%4]/M;;YT!B`)2+X6W)5J%(L\4(!#="O\_2*'Y2U@QMG;BFC@%FK(G:0#I_
  MU)V)IZB3*Y-N^[5ICS[$3OD'2$>!RXI;XLWPDTR6X1]:=::ZS([<64&D_[(7
  MA?;94VWAB7P*CHTQZ=2N):="7#G:M[JZ]P.(C53O;A%U%DH\WB)JTTUC2_2Q
  MC3!=B7'<0IK.GYM=S_?L99:E<]'SJ!]!M+1,A2]593*,KGGXM6&Q"?MS=^LO
  M9VL\GL]E.7)UXF.8A;MSMKHYN?70=TK3JY`S2JV?/:>4,6IN_EX_PKTMK_"M
  M9Q=KJ<HQ;,5(0]UI**B-?^8I@--H[&:72*!,45>C_E258Y,]_Q*)8<&W05&(
  M[M<ON+)G-P9GJ(UL6-;6$-B&"H7O#?Y!24LFKJ^;I/&-UXR.$^Q3\-6Q*210
  M!E[SD%A/;Z7]L&>+_^@O$UI+DE+#Z-'EG)I];KM4A\&/=3"D8@Y$W$&QI*I4
  M].![IUX05H)8`K>YEZBR:?D+U!8MBB\Y^\40YK+:?5='<[!^P=WI1.5E)G$8
  MS`[>\SDQJU22`G'4PA,SIO4">X\ZBDT8)Y'[<5)8G%"^G,/)OB=)TG/+Z&&;
  M6AR`683E\X2PRJZE5NX:$_0W+C?=D.-REB'[9HV=`QY.D4HJ.BFEC,"*@W)5
  MJHS!I*&RW;:2N?/[1>_;>*0=B/>GIA]&V?KG]:.KS2W7E`W$QCR_>^YDSDKL
  M<84#T8$DG!>.!ZK1([<.?["I@IF[N8"RX3U.QUE&`!-C!"!"AY;1->=75-W0
  M*R6NT96N<CU8@7;)4(,52W8X2H5[U6`O?'I[`?YQ6(X0Y-6K;1'IN&DA]WR.
  MDO/>)-!;DU!_9=)3HK`X=T:!`ZDS5[_O@FQTZ+1O;4*)<PI'4_$"_T7=%Y\!
  M4Z<:FP3+:8S7#^N?E9WE0A"#T[#5#355R)#K3J[@V6B$Z48<-"VQN&BT8MD4
  M76G;RVRXSL54&I\^@ZB\X5L39$;:ELHWLG?<K61$V8=27.M0BGE))-R[.T5$
  M2D#/(9GYJ$]0PM<C&ZZIJ4!S9"1"XU!!9SH+NH<.^&ZX#<S>Y![.T=321#+[
  MDRI&2#Q,`!P@AWR8`CJD&^%D!'V8S`.<]/>"&)/<7$IZMSJ8(IET/[TTGE(S
  M,7X8EKQUF-]_TQ#G@>0JC5<[OM7U:XK=EC?1.!0N4R!S1+M*TG&#S@>#>6+8
  M-0]35';%.`F7CXJ3UA*I22&GV)EY!!)#JTA."1TM-6G4[UI51'(!1=&&OCN7
  MC:#7+_089X5IX&V("9>$/![._J;W!D.'IGY--H>NP5>0[=33I%6V,VB$OYD-
  MP)8%:=/@\.WC$:5X]3L-#NJGLZKSZ;7EOH$`^,;?`W1C?U07IC'7P;29\^5U
  M+!\(>GK*=,^74P0!H:K`/C>%M`%_2C>V\?K4J3Y7GH=*\N*;')4A'8W=@]K?
  M4,AP(6K&A:D^0S/S_RG#6]*[MR@V^X*XK,[6W:3FLL(2U;+2<J!`&_SFFKC2
  M*@5)L".F36L*&"_(WE)ST0$5D)O.!2Y+,BB.L"KDD_)ZDX<D0+1UD,DM'[_6
  M1![S6;.-D39/?8'(-X:QP88?_GW*OE/>&9VO<6+0/@P7MAC0]Y/ZRXT>E;,B
  MR66KZGSJW5A(RDZ\\U&+R?>L3?7'_2959/;>IA4\[[ED:U3FI@;<250UHEE;
  M5J,H%.H</2X8'3']%8`\<"P`]$L-#4P7WF=_"Q5*H49D]<J!KI_DB9A06G)\
  MR[7_H2,@3BUPJZ:"Q[8V$3OE=3ML\M&!$\.MK>;[Q[B\==&-I<B=@7=T5IUE
  MAP1CVR)C^W[FU7;O3J*-"0@/<,-AJA6=B&__35EK(X2<DKT'!@J6.HG1R+)#
  MK4K=;F_E&FP0[.,PUK=R"4.ZN=J^0H]K4M8DL;&Q9;!6]^SG`VP%!GY-G6B1
  MB]:)Q-`(D$[I0#B`F7.8'`G&L[!=:=GRK?+[)B;N8N_1T'_B`.C%##)Y4W=R
  MI__0J[>ID./0$2BU\,J]N+D;5=/+:"YDORW*EVRN^(,.O\?H=IBJEHNW(^F<
  M\0YH?UA+1++-=]>!A:?"C$9;[%6>JRF;0P@<3EWRGX'[=+)[)Q`D;YNJ>"I"
  M[J,Q4)Z1?]OOMW'%G%.!_@A5Y64'TF@MB[>2BRY@F!A<C8/-W[=#=.W."S28
  M3_7\)>$3*PF1**HQJF)0:M)AU-%MV`_#9*%#\"&MC3^`F4WY$I+(9^]_)FEC
  MX_9+V!VO$X*EMI$0_81^Q]*T0&=J5$D0ZE73-6RN$3@GYG;B%)#WU/:Y#8%-
  MS_M2!75S?_.^;\Y8\FA%?5*FV:)=HR54H)W`-W.KX3TMS3!PZ4LG+/\:/RK8
  MQ;\PZ,S4%+6-"K=\$*/A9[#RHHR/BU<=>JZXK.$[0T=G_RYWHS).=@F?(6E$
  M*YR.`P4SG38"PI&]JJ6@ZW64$)0&F;=I&.*$_X=.6?*2L.WD%O!B%Q7Q:O*P
  M+:#O=_4D:6#9[6*S>,.?8E"<ZW#LT6=;K)@/A;G[ZC"FU<\H*6=CU%S5&/]*
  MDNAE7.%"!DW<I>],PD`%"\B4!FT8S';&IU^@BOC,7]-`+$TQAK'@2AQHITQ^
  M56U@RT#NT#74!`I0PL-QZ0L?T<9M];@NZ;M#5M4J8477[Z*+EZFCT]<JB`=3
  MG,/+I88T`L3THNLN`HN>!C'I4Q]X$X?8K,#HLILML;</,>ECNE0^DR'O'E`1
  MF'<=F9T:XD@RU[.P$21U&3CCXJ1'[+NW0_`9G:G[!EUS;APC/*V\B^S6PUL"
  MAXW1X'77"/-KSZ"OS=X8WJRV]A3+_47IA^KOV5'A?[;!.:&HCXWU\E;]XE$!
  M#9T^SAFW=`'5-"2*0BH60TZF0@_9*63,I.R_:@"+ORP0JDSN_"N"YTR?I3&Y
  M1$B-O+P18]0$AO;["P4I_3*?KH04.A2T..AX9JJ-E9:(H<R07B%31G--K(?*
  M6;;$C.VD:*CM1FFCL"$@O*UKDX=7K45)HZ(\T_GBS:4,=.#+LO`Y(Z_4IEZ5
  M^./UX_FX>F.F<'J%JZ>2X<U^`U;X3Y['?T2;3:YN+YP,R[F*3<W]A[Q4$P(\
  MTE!1*8Y,12#FFC^$35IM4:3JDF,6UQAR/<-Z1;(WQ0(D&7;4VRQ'7P!MXB1]
  M0LL6>OK@>M]+A9=BB%CWA/#E84OOI_`!</"?@%/SF>N:/U_R-0V&X>[I5@-]
  M(*`^MIGZ,02(\.RL.KKYO"H6X@3C5-7G-^;;"3R=V+4B#C2],R,&@$.,81Z&
  M<?F0.%-,.'$7H#91W!1N)&;3=7HLPK2,K1[^,I(8!*0??4!Q?2W),3S`EYT0
  M<B`S..%Q6]$GE_X:'PVURL9U<7/+`EAN/^NW\FTB%0--\J6KR^&F1P&$A^LW
  MQBO)52S$LEZSFW;"4LVIR2#V_M'UYHZLK/3>AF_%\.O?W1Q]T?A@5E>?UBBW
  M&%`0^C\K<1R&;V@VG'WWQE=]`GZ9.BO_9B1P"W!)Y[!YY)'.W4C0.W*)CP71
  MFKX\0L4S\@V,S.GK_?HO^P9AI_@NA`>@N8U,?LV)3R&5,CRO<F.U1>6HXI--
  M)#>?-:QP_''T/CN_OX%**J&A/`JW[#R-#4/1[`V]_'QTY>^77>%.*ZE2]"/Q
  M'N+>KVJ'TU'<$+12WS0@KU2)9]?G,CYZ(6AK>FZ-T6>R$&_H"ISHN@4VI=ET
  M?)O0_7*6:KVV,1X*=$WLB+2X+YTRO#0I$S"C1WV(AJV;<KH=4L]#PA'F?N)J
  MXG\!33)%XJ8JSL$L9<,KIE>L'Q,$>5KZ(TJ*R=?+Q$Y03#I\YO_/V`*W(+E)
  MMD1R^27?W.5MK^5&;S/Z'3REZ79%,,4;>"\'^"LKM':?B<:8]\40GS9\Y"LI
  M`="!@9RU3_0E["`-RH3J,SPJRD5S(0QI82!5*<X/N,G*LMMJH;B1EFY)4:<Q
  M+?'VWWV)$6TM3C!8"#F@U;%_BOG\7A'*I%IX]OL2-WDK$QF+8>1"+TPM4OYM
  M2XB(58K&FQ]JNU>[@5\C/B72UY-\=7QV6M.#)R.$-^ZQ?_4VOC;R)#6G@WF6
  M5("E:T!4]%>6\<T@V/"Y$>02/E%C6^.`#QV[1_.?Q'QUX['Z=ONTVQI2:PF2
  M8#?IY[%1[:P</Q(%MG7E1H*ZA=Q`=48T!:M'O)3CZ)/"?LUP,X(NG(`@D%:'
  MA($I(S/0&JQ[0?1]K'14D1R'^3A.2816/Z^)LZ&7BVOE?07LW>)OC9@Z`<N(
  M!T!19R]T-3$6>8,STM8WJ6L92%XPXPS($#F4:B4*[=(@J`&$V0@1TF@,C+['
  M0H^VH176VV4Y,H(NR6U$Z=I@Z-^M7D%M60`(NH^E(]U0F>#1X*P1RW7$KDWA
  MKFK17>O@RW=*XS;9`X@22ES*H1%X%=ZN!!@OAQ0#;QXJ7;L%$X64SM3[27I)
  MHL#F3]]8)X%C5YB8M/M<VCOGV'7@OIT9!S\^]@)[C6BY$O6FEI,3%%,.>(<%
  M[BSWT\GO7="957%*-J69%$G"[V\.!1K=^,;V$<;,1Z9G1#YT)+;;83EQ6(<P
  MB%5+W-@B/BNZ+SB&JL*MX+9&<BK&@_0"((2:KX;T]`_VD2V^1)JS5ZLP$DPE
  M/WR\M6/%TG946M,H@IAF/(&Z8(!"9:V]H`Z;XB#\IC7!C47Y8>\)!U:'.'??
  M!<Y=W@+N,)1=FDE'[K@7RUUI[&\$?<IO_G?"'$)$T7](;.ZBL^5Q3Q[H3UX'
  M)CXG8F7A/;A3V4*.R%4#B!SNIEVU4U3>F*Z!(4\F:!"K8]`8S<RH*AU7NJ%D
  MT)[8[/WH?K)^EC+!.2X?4U84%HRT8%[`LILY4:B2N`<WKML<7\C<7I&@\V2B
  MXR_U]O?2ZX:B;?1G"5$5]EK%)Q"I"EZ^(9/(?GYR7(A;)\]?&Q8$H,7"G1"-
  ME2Y$:[(^?O(L+I+A'A6PG`5J[^BV.QTSCCOD4YQ:NVVEF]U/$[-XE]),.F`_
  MOZ8I#UOA[(5@-7;HZVG@K:2#"?GU?K.WNIW,W19&N1"`$ZWK46316%`29KZ<
  MR;4%H]XSIA5$`T7-W]F[C07X995.*BF>5T]^;.@@7]V$$\;0\[[H4^F+DY#F
  MP!:1>"AZ.8:Q'QN+M;ZZA+Y4<9?O2B:F<H`/-M:\2(.K8?Z:/^&JA%/F>/_Y
  M-T'^RMC>VIA@S,V/=P*Z\:X.H=QF\Q>/A%FG7],![Y>.O6M@G/)]`&$DK`A9
  M[PB`XNS.;"Y.XU)?/-P-E0UW`Y_SV\4)HR1,<&5,\!J&7\7$;F8$SQ,7]+YT
  MDDJ,J:GE@T<=F!'6F&32()IQW#B_WUG2NI"?9^#;FX9V5U[\>MK^$9/(O1^H
  M'V<6D]2]/]CM>'\B,O>1#-@=Y1@S9`9VZM5+N+26;J1CJC8"$C4;L3C*L4("
  M6T751HK3S%H]"$S%53AF;6I1.R(;D^_C)XUPV$[Z)3),F"=OOX%$_^UONIU2
  M8G,9.]WC=[[(0B&#)2F=P6++Y*Y3GD=YM6(#DG]L)9+`NHY*CED[11U:AJDA
  M?FSCOTCV(13.(1J2RJ"R6.A_54OT8H^]=>2_N3HR/Z@W)1X>-N!;11N#4F9E
  MF@C*V)=S:\&]=2^YA^_!,#T/?XTVUDKXU<>H`M(R8?.2D"!X>1D$F^IB;+V.
  M9BG7SR?>N[]@^:^D`/\>!GZ!!_5C^?X;G^/^W[<[W.RL_RMRL/X7/<?!]G^A
  MYV[T=%+P_SK5.>^^T[Y2[\JU%`_@.ZI-BFTEUVH"3).:<IN^^Z>2`9XIU)<B
  MOW$ECSY+\--PG4&C.2[N&DDT:8N@$A86CG;/)U>P/_X<"I>VH[^``,*>]J?;
  M\H/K"PV/QWJ+R^N_6TO-O`%]Q8#?S/2_<_Y.A`*2%E;2^CX^[K\3^*W=!,]:
  M3-;!`;=][4]G3_4,#"^F/:MG^0;3]VTNVKF_1X?*<KN\)W/UD\5NK_5OO_B;
  MS_'L.(4S7PF%N0D,!9G[;C3UC75+;%]:'R\K'@4R]64ESQ^TYRK8=M,?4_],
  M<Z;TK"TH!:^>(-V(YJ[NQTWL]I6\5LC^]'FK&/14]1V6V&7)-KW7M3DY,]?0
  M[\,&5!=_:.,<LN(5Y9'@#J#^8Y;%\?=U*BSC#CM?U>^).A[[G+%YI_=,V_[8
  M*I723.O+<>BKVT)=84%GA6R51SK3QB4*H-3Y<+ZZI'9'HCS/\_V!"`CM@0+\
  M?'I^G3O;$?Q]48;<EO)SKW3=F!R;$37\N>'!/-S,(Z-9]`YF6)0F]'C0TX1T
  M`-.&2='9^YH"[Z[`@YO@Z`H4Q)'#=$AO/U#"`3"GL%J)'@@TA#`IL&8.*A1T
  M8=FZ6GMESA#+&_DIU1]AE/.,>>U^4JK*43TPRZ\I"-R=<(SUV4TYB?4%:YQ-
  ML$H'*%XT\QIE`BY)`,0T'`YG0;L6S?',?7`24Z2\&P3YJQ*/@]F?[P4"`E4)
  M<VT21D[7;0S'+;;56I8FJRK!!GT][3GE0+07&CSCJ"D`6I4.:?-'Y$B\6?#;
  M@%NSEO9,+S"_GY-7THUR;ZKQ!'P'K*?*M?_L>7>CLI@#(W]B\#;8L-M\9IB`
  MNY_<O3TEC#:F:>*\S(]I>:%6[?R>WLXG4RH)3XMJ(B4,SY8Q`(4E+6P*Y!8)
  M7QF:MM<P1UU`"*%=3AS*1U`V7E-F..&T-H^LU2;85%];^>P#)NEU&;^XX<`L
  MKW,6M(7OQK0C;\<,S@=U,O8S+HB='6Z16X:#R9^6<$+VK<1X4//)7XGOERIY
  MNP"90*2)Z-01%Q<N^4V%"1[,DK"F`HA^W[7T":+R&UXLL@9Z5`L%_U1W.87H
  M6&1>#F#.'A56*!-=#I",L.Q@^HC=V:P[7/[=8T^!3==BLWV.&6A/P<>XC2QQ
  M%)S$9N)-8DKF?ID@`>@`(A$9/H4Y[*7QO2$!%B5+/"AFS<$CWAYK;K6L(TDC
  MYH)1JYN*6S4=!W1*7^]P?AXBIS+[FIBCS&05[2;BU0VQ`$UB$A,O\83ST1G!
  M;I=?@Q_?'\7#-;>^ZLVN1;SQ0A&7![CLX-)I-LQ]/[+TQ4L_-'8.;'2\6,(L
  M(.BZ)0I*H8E_X%Y'W,K1"5J:AZA(2#!6_Z2QT\1X+4.;H\=!A!W+3>$_*@3T
  M!IQ"T5T[+9,DG]LMYE$:_A`VRX-M:W./?0;T^+T6]'Y]K%Y.\0050>!8OFC$
  M,+7*T^_,<BS<350(#ABX/3=$NM4<KW"*\>$@@B[W,P_97E08.,ST]<NG9;F=
  MDQ-;`!,ECU/L16`$0T3-CU]O*&!P?&S!KDN9^*)<?''S^]W#L\'#T^^!50T'
  MZ"%:/"%7Z32<OP!U5]4'_Q2C-%PB03'7%3?7E4YI#31"-RA?O8L.'9^`.P]`
  MT?ZX8S?;)VA;43NK0?FS$YGP?Z?AL1^74JF;RQEX*@MD'ZQUVHH6X2W3GS`G
  M8^8Q@F:O?%B(QE1?26D>>URW.$@T.=NS0&R(^#95VM#S[SNDB1T.DBDBNW(E
  MX1F#C1YDW\1CE(5)"&52EPQ#2)1%3*)2E8GS\AQKK`,U48J=!]GB,3%6DXR[
  MN?T,M(DQEG+ZP*.]R;'!).&@X#G=4/_]_BP2_(.O99C-2&L2\.>O]]7O39.J
  M>FL9S;^JEF*TQ90MZ=/<5*22?B'FA@(XJCMW*TB+Q06$V52\!YYOS'6JZY#-
  MELQ$FI%%/\!?,#%3$7&+&&[0IGY<B74<JR`IDW,.88?/?6Y/G8@>=XBL%+)A
  MUE)QTRW3$6B=BN:?C9%23AAS.PGX1O8I,F(0G)NU#SDOTCK1LJ?7P:\)L)6*
  M8DG07#VY^1+Q5E)M83_T\T6P7/!)SLROSR%QO!T&$<9K0Q`58-)!SD_=0/.9
  M]55.Y$Q5LBZYK'K!2;JJ9EW,[7)6+CB6/K6Y'W:C:4(C6`YP16RJ/O^_KP]&
  MJ_$KMM0CW;80@+]O77:DY$][&GA0GCD)U,U'724J@V3#*];8[K?/%Z\F(="A
  M7&;[,<8@M`U`G7JGQPT?JV"OK!MG9VGQ39I_?%*9U#+!$YO_T:!J+#J)FHMA
  M50^X9H[3[LS)]M?TT4B`H2UI2%9G6ZM87;)SSWB58$#03-\REZZ]5-P6RTY"
  MA.+$@V="Y3SK#F?;PX=5A>`4*L()@/="&]B>5XY[:>L&,8I2?=+K0'/:-->(
  M^O\SVF^S)0I<1(1;M41:<B]`Z1GMHS1$B=WSI7:J7$N6)2=D[O]9K&";F;75
  M[D$N_5)@W&^M<!,`'YTVS"=[2-GDQJGM?P#S&('Z9B8`'C8;L(\Z,N-:.H<H
  M]%37#'+N&1;.;0WAM6T;X1`/?2[<*1'&3@+H`93'K=@BL=>LBG"FZ<]_3XT;
  M##>#%->MPW#)NAXMZC]1AY%1G%P,>Y_"0=3]%8Z)L-5.0M-08;-!436.=0E:
  M`;0DDP`6U+&VU#8#Z=NGI`=^Z;(IY5)_:F0,Y<$$L5WL8_"X[B]2A(&!"_&+
  M<TIT\W*,'N3L]X^1TI"1%R)U?Z670`)&4GM(7[+N(%E(-VS%C.)X77%H$>7-
  MDX:;D:2OSH]`KCPD[!)/G\%9R^4C4]-D'9',V@\NH%ZHMPH5[2V/VL<*.7&,
  M<"(=QCB=#%5@X>G>PAAK3AGM'](J3TD?I=&*X.AGI",R.N.F']68,4U6:DSJ
  M.'Z)%'`V%NN&!#O"E#)#58=N#A5#D=K-U?F`X)^A#\R;ZJ*1'NVRGED3X>.:
  M5`^MDY;-E*5)N7`N`GE7OU83(!)E)W4;&PTWI/J1L?27AY5=JKC,V'U<8KKX
  M>KG5G&0--3?OI>0Y2:-@[,07SWIK*<*5L82KHQZ>D-^*A#=WRJ,HXF2U_/V#
  M&+7S-=3(K*2_!8YP^Y[VP*:'D#9%1T3M?!MC!2K+S\.NOHN7QQ<:<U?U#NDF
  MQF#G?0-^[4I9<^)X#4CF24-=_HN5&J"8`Q:V0?.B3'=1H2#=>K/JL:#MB1*T
  M@0L%_[:M9=4.98@(F5]'^+V!61#H"-F2W]VYD=1'L3]*/'R(P$OH[@9)D7#H
  MMHTB?J[D+B@$0=*X#41'_T2YOH8Z"MIR6D0)&A)<=0OW$-&UAWRR0=+1-)L"
  M,;.9L9ZN&6/"6[78H4#PN)R"DS8'6SCMK7;K]AZ1V,\M3B8@7AX]?;X/;>1(
  MHM_9G^EA,!%!ZN@\CB%W-OYD+-BL5V=LO%!,U#&P'=H5^!(H)O`RK.2`8TN<
  M1B#;%D_,Y$4IHX4ZBH-:(B?X&--')]>IMCSDK2*V]$=@U:/E[N><`GOJU"A`
  M@0Y=47,S6IYRK06*T8JJ)?`R=ROY#B#G'+#MD>.L\0B]RYKK!X.RJW-)7=EO
  MTN>D\K\T6%0^,9P(U2W7?7<JW:%=L0_/"T\LMT\N<'I6V6%IR8*IV=,/IO$\
  M+FK)9%B/C>'@=<MG3Y1>9EV*\FK-F/7%(3K&+]=ZDZ@[_2+P0)[&SDX52,\M
  MT:HVD^P1^&&W%8ZQ6#M5>@?`MWW8?IF7T!'=VDV<ZDK!1(^#M2=.@"(48?2[
  MPG@N*+C;'_)JO.L)C%^A0,67Z?=>ZI>9H4)QU[U@YYB=0^09E\S]/;DC7E_2
  MR_:YI88#C9N=^"S#^B$A9@CI(V4%\N/0DKNX6I$'7;\*EAKN:'>UTU)BR+BS
  MRV)2:9$Y5L#+B(_34(J@GB'U!+'#V3\Q.G6G<@9C59"_&#A(@A\)`9YQ6+L%
  M0:6?SP3769]TEG5M_L';X!X/RQ"W1U95[4?[DRY"NP.H7"`'G3!1>CD%$=/Q
  M3*HR%B,8@$M-"C4Y"NPR[>J$GAS]'U[>,<JV+=GW3=NV;<RT;=NV5MJV;6NE
  M;6NEL=*VM=*9*YUOG]IUWMVOJEZU>^YMK3[-/OKH$?'K_^C1QOP0K6.#+.<_
  M]:)[::&)&\,N74FVHS%[J3/,M`J!90ZO1LF]8W@JDU7`,2*_7<2V3VNHD:@Q
  MK'&:*)XZ%24G,NW'8I/P=+#B>$NW%V'UD,-*".MGR^I@='UXC[)`["7?Y7.Q
  M_E)=D0OQ4W+]A?EX._G+$;8Q!-3/W,YE=%03@GJ$A9YY#V.H(PTM*KSEH*X*
  MYMU4`7SYVRH4'7/$"B86FU%=T<6W'WYKCE'V@Q)%OAHXNB:,L@[A])F((LET
  M7Q]GKWP'C;^(#^YRE<6@+?8P+,@%$[$"6,7'8XB_H3-K]I;',YX?I#\Z5L;[
  M;VP,R:`/EOSQEV]1(96);(%C,AI9X;C^0@/!XDP)G$!%ORN)"W6C$G^7;H9-
  M*I!3B;9:8J"W;)2QSA31>H``L$C0K<H,">-<%'`4FYSO'B3.5MFV/C%UO`=^
  M(\H':0W/9Y>G_5W]+$.G@@L/IK=("-&TS!H2KU#9LHVMZ-H27HAKSKM>V@'I
  M/!SXM/KM!YKIUFF5<3IQRNQZ=JF_DD@%:L(I38<4:OQ$;/P%`Q%/21F;2+F2
  MSC<(^4GUD>]4$`AQ:<.SI)%KP!9V01@<"NJ^EX89K"\MKG-8<!/VJR@'0(*U
  MWW*$>06`F*(8@!6EEX_XS!VD)R*#XFOF]\+F-2I""F",A0,GMC>OH1LY6M%6
  MAS>6@O459HK='IO\*+T"U0/&).REF?10.`9B[X%IPK3U'Z74=WXH!A4+.SA7
  M92FK\<T:+&J$=Y,:27*1#N_KW0-,B!9*XF_,E^]<:2GRB4;".1,+!!B)8?H'
  M*6.$O\:/53M0,@]-K`JP@BVG3;>^%=9`W`^.B`12*H0*))<.02D0T>-"8-1:
  M*H\Y1M>UD1/#R6Z&OAY0^65%P5<MF=KYK50FL'*8\B\H^U-42)"LDXE].(4M
  M$A'S9%($&HF#/4\!*69TPX]FBE#TQP5Q/>1W54_9P/E`+W4P$JT99\V]#ONG
  M$DUS/8?U'7^Z/U_@E+XHK_,[!BI:FMU(\3#X11QWSWCEB"1WR5$>SZ:X&9W5
  M[:4C"T5-(0?11_],S0_=]J02$IOB=MI92:*)2;L?;TG@<]&9XK?XC3=1=&[I
  M';OA0DYZP*E"F/SC)+:US:-DF0ID23,J8W,I!\O*IHK20B>7QR2>^=?I9ONB
  M]*^YUJ84!ARY+'!BKFJ5?C9LZK+PMUS6^?87)XXFF)``:"M)K@*O`>EV?,^>
  MA`4LBN:"-]"%XS/\]BA>X&>R$+U!5QU<!V<E+('"28M#N$!7)3=J3\6GIY#F
  MW*C?:,37'G@;1#8P%>3,.)46)0VA[$2*;0/JC1L5$S%"FI]NUF:2/@)/3'EX
  M;LV&P23JSFA=VL8XPU"E\A9CJ).KEED/:;L=6BR>=+V(A!*Q+KN`Z2MN.,+T
  M<]4QDF"Y@&!HWF,4P#".\XO@^JKTN).Y`]+0#0+W4-8K.NOY8>P4%_F%34/8
  MUUM1N^Y&@5<L0XI+8[;+2[4G,!U],<2P/$X_/+UB\3I$`LL@9Q19,5A810")
  MN<Q#;\-:IT>]&+ZR_!Q)712R))V,[0`U%DU[[5SU3S%$(BL9\7*MC&_`R>XW
  M*'HHOBPQ#,FR<TI#AOFU&&9S5B^DC7*+44%]P=/>5;7\TK-L<K.4D"2!XE=^
  MTVX%LGHQ@77.J"CRRV`.4^:--<50E&7!!D.K7#+&,R%WE0HFNAFXF&0)T;3C
  M&8WV$.H<`C,0`&Q4G#K9%V;I.FW_\W$#`9YA)?G31K+I^'%XE6.1W=961RLG
  M94O9;$M_VF_JMZV$>_9E9=P*DQ6)N2((=H^@D=[MJ9[S+ET&]-P`18_B"K%&
  MEE@CHNOONBUF"]Y!@`R0[>HCH,.%S;'P2RX%WBVSC=.>A^$CM-3,!O,+]@1D
  MU>^4US4N#QM1>'JN(:[AVZ/$9UCFS8T,*X,@)2/]Q?1;?<O@Y:[(DGI`=],:
  M9D[?Y4(UH^%YZ0VP=PXQ;O+J:P<P-Q:4;04+@Q[-?EDSR]W"JXPF#9C&2.G!
  M6KJ*3"TB"3;,=XG\J+-.!/-L/5QB;"4O:D%.VS-/>?/Q-L%F.%6NJ@'OFQA&
  MQ8#?).F.ZIP;)4M-;/"&G`C-QY:+ZN!O!"9]*V[GO@SP&#2WPZM"X.$[L3TY
  M2+"K+9G1G#198A98FYJ*CU0XT3\*8<O]5+BH<BKIHA!*8UE!'^+`HLG6(*T4
  M,A=GJQ)+HR8T'R3Q$+PL=4)P5L%ARS1ON1(E943?#6!GH@*%/!3BD!V8U'&2
  MW.8;N98Y2DHTWUO*^9`?`A`CCBC64WDUAVY%Q&FY,3K6:ZKW(QB#1E+6#P$P
  MF$]2@?6V)IYY:3]%5[\/[O(,.Z>MG'T[XXCZYI"@U@!&"$NIZRU!MUK427FZ
  M?3`;")JT&X5R^7K`0Y[%=R-;)@-+0C!"#5,2E4[,CEB]H"ORT:(N2DEVI!'R
  M4S>G^R,P-P7#9#5)0!CQW'AU;O?)[H$Y4L9?C=!@60)E9GMX:3,*=\<X$A6C
  M_-'Z5KI>5TV?;-0ZOC!_9;I'IV7O\LAJ836T;G8'+(TYZ)6TP/>Q>(RF$2YU
  M['G]@/M#B1HE%F,^+CB/R;X*$EI9)Q:KXDG2N[5Q>A$V2MP>M8%6U?ZVF!<5
  M^0,EES61W#XW*?>;C<7BVE`@&$&YM,%!A+%6BDHC8^\)%IX`89:UQI@AXZ`@
  MB`+[.LDW^N0'5?8B^(S]\@!,#:XT,*IT)FY2-HLUHQA%'$.6'*?`3<'$.!%O
  M')Z(0"GZN7'B2F>!KG99IA0DCS>=,IZB;\@S'6_-C+"_9Q54D>4'N*4ZMBG`
  MP*(=WT_CCW\G@ST&$P[)9$]ZLXCRCYIGGZ*&/]4(N;B42+$$T9X78$BKFB8N
  M>UAONA(_\$G(FL/K2L4(6L)A^&O^+-;4`6L)Y53@><J/-6\T.A3@5PU-OPDF
  MAC$%S4ADT-O(,(R2C%CK<,X:RKM3JE^A(-3B9JD&[J6M7T2^WU?<$%1R1,AM
  M"2IJ!-*>,9(6RNXXSLE,8F6)Y=59ZFKQY(BH/'0B0CS$"L#DT2@FN9=8BAFD
  MU&:IG+*H^R%,D'O+(0A2'SXT-^0=5J19E375!HH3GDB@,)<"FQQ=S&U<C.IJ
  M=0L!Y,]IX+4C+]*B'D?QT1!)\MZ0)O0F0!RU3)@=0P"_^%T'FGE_M,,PAH"3
  M^C=0+#B>$\YD6F-&%]]L+_0)=AA0]?3$K3"=:C%0JA(0&V26`$2#/3G;F#TO
  M"O0=3ZM$J7Z[TYXLEXD#EEPTEQ"#L8SA=-HW;9:PE7TE3R*$.^OXA.K*A51P
  M+0TRAVGY(;N,$Q>2Y';5<L[F2.QP(C)F7&<DX%]^FJ:GVI6_$/-_`*/Q6!57
  M-#HQR7+1(A"HJG!$63LQF!.>4Z.X(_5W51(I%Y@4@Y#B.="NSQ^M`^(LBOI=
  MKH:_7XZ15GXIJB$$*^107T7`=]GS*)YE5",N$A_G5L=W'^HMCU96\:5XI7*H
  MA?PN15G^B6DG"XW<+X<$@WU>;QTIIP:.M]*!@P975#DO]1(JB/Z9=@>;V-\_
  MU2GD5T@1FBW.'.NM/*$P6D4R2AGT7.!@DJF:P5Q0;5"JPBK$'7N1LKN;++PG
  M\ZX)I,^V'_`(0%W(QH090%+;P$MD.V^*]1UW^<I%TQQB)_#`9IIE!]:!4S,G
  MEJY^L#L`94C,*-5,=B\3'-!YE[!<Z%D9J4UL0MNRTKSXTH'>(;7'TQZ6A3/D
  M&LOF!F*Y'ZUZ??Z27MTN_SWD!J<I8-&?E#!Z?.SG'I@IAR!'XB<$B2$T6_K*
  MM@U(!OBF@OU(V27X=>E%+QV(EE4E;DF&<=-@@*%&N1X#UXK,'$JY'\*4?&]]
  ML=OU:HZ0-[B;\^U3R/R*`4*DSW]=7MRLVM?NO`&P_&Z!6Z.#`\-L,%Z/4`).
  MIRS2T0DA^FL9G)^D$%9F?2C/C+)KHDTK-L44=5JYS5A.\[67]`N>2:_8O9B_
  MFN]:L;;`):6!'H+[R'!V#"2)_+$'<;3Z-Y/UF7(4#D/3@1KV#R';8&L@97Q;
  M^N"NHHKP2M#<G(WPBYIDBM)JQ&&0PI+84V5K&\3L$*6KQ3E14-`]TNPJ=PXK
  M$+,L%XO"DQR'QBDK]L^;=7LM:V'/$G/GY<2KS7+P!96FI"$G`C4O'B"GI+2(
  M?0F*+8S71K?'M@8@()<>R.+(BP^Y4,Y/3!1F'DP>^8+M+0]\JHD2M!D?98ZE
  M$_I.ZGKB&.WQ\_=LO9I@55VU#'*(P6-?NMML)OB@(5#-K.STG:O-!9,),LB,
  MZE><KU5O5I>L(G)FR<7^+7TZ\.CN1EWP&0.3R/U@R.CL.KJ(6Y3KVIR35I\C
  M.S%6XR`=-MJZBZ'=LAK&?O<*4/U#3N&WN$@W6VRV-;[&LQ>*?:#LN4.=8^"I
  M[S+$<.:-S%<1=:V@B5()&H3+?1S#A8*M;[W]O6TOTAF%0_5/.LM,<X28',Q4
  M#,-RE\J6Y6=.6[M/45'\8#`]_$E=WSS>DLI9"_H6R5$::`/87L"S_!C-15U_
  MOSA:4:>1`+,.JK,&97AQ5-O;97:\R$'S/%9"CG@LGB/HA:S9IZ.8)X+',&)7
  M;YV&[-O3B@329P3AJ[+8"V\K8HDR[MKFP"_#D-9@CR*!=O-+J_7)%>NXU=YB
  M//IV1;C-<(ZM_K#2I3\>VUT.&94I7K_QDJ4@IC)96>7D=%$5E($A2X21**]<
  M/>&W90XBR:UERZ@ES;6;/X9[Y=TSUM+BI@P/K>45[OF$NHV)/X30U)KHO3([
  MC#-NH@5C5`O26/^V8F*]DUY9/#-Y)Y6BFNM#/&7'(=F-AA;KBYX<%MM$0S$2
  M+$Y\*%RSJ'&WIFHKB6-A!G'TF;=T'0Z(WHF/:0,5Q47K:-WE5KU8A.,N9>,H
  MU4X/1FMXDED\9#^<B7^93O23[2'VV$H=D0-V[/[9NQ>WHEPK%W2+FVK?CC1B
  M#&UG"WUQ>)2:D-OE%'JM4<2TZ?X2=.=T_K'F<PJMDF=_2"ZA>\ZN_C.-!,WE
  M<8S;EW:_SN''[94Z:C-KU[UN/9&ISN'S>PQ;WE3S6@)[._3UJ1VSORH`QOLQ
  MNGLG99`M2E<4]W6"JK`CE1N3-]*\^MZQ'`)[E<$PTEO$WHCBQ1,5)A#,O$WJ
  MA$#DFYZZC@#YF/$T!.\W*>8A\-NT(VS5,P%],$0>#9>KS^-]"UQ1JL+`_HT5
  MYM\<%&Q9`&1V8^XN4_BLZ79"@_E303=Q)K3*2"K'CP%BRJ/DS^Y?7O1'UZUE
  M?;4/<-T+)B$E.WW;06=C-M_:4'PF+_+5\D)48[L`VT7?L'$CF-/#JU7%7>"+
  MW"<M+LW'*,2B&$1H9*C%%F&/&\1(!<`KF:,U="*-$'[%F@[^@NPOHE`MKH!H
  MT0`JM3STU!1"S+UCWZ_QO])^0MKS=3COK1;)S<9SCU[B/,CH5\QWA=NU;:6_
  M1E?20=S[45TN&J>#P(K[E>[Z[G)0JE-9JMSA5,+HI<S4)?3(1HAQ`UL')^M3
  MIA`Z+F6^RZQ5*AL[E6J_9;=;5YI@PQG1U\@W[D%+M5G$%=Z5S2CL8-.66M0H
  M;"M%'L)[NO)"(D5VZBIQ%FT78?<9(A)Q09INFPVM<KKO_BQA8BZS!2/'A)BF
  M"I_"(L:P6@0;FOVM>&/`*LN$DRX],X(QDJ/!@N6(UU,Q_#;J62%Z56J@=I!L
  M5TB=_'RD((S90>O$;X2"-$ILJEZX;=-[K+XL9!D)$%K.%1:VTR?X1AG9]AN;
  M9X!'IWZ;+X2K?UV%>H7'41-QBH%:W'[YH[R99H!S\G=?Q5"GMR-T5LJ(1TCI
  M89WK?DTNC7Q3E=S[PZ"17:,VK"&[$P.W)I(H[KL+/BDF[>#+D3RQ/6G9>(OY
  M.-_980^1;9\92E5S/7#=H[SG2S2SC%D!\$O(.7&POU>5UXK:^0':V(1:>&OY
  MZ>+;H;Y!/V\PFQN0"$L)#N1Y[*^T%G#W]:U]4X@1EC6Z[@`9+4-XQ[G(72S5
  M5*K%8XY<JK)'L&P;43QCO)]9?2>$^2SPE*#?U]`]LIZ?J">31&+JBC<I'K&N
  MLQVBG_#A5(B?GA']S.[-\P"IB,B*C&EQ"![\-1'%&MN_W5Q-.3N3BB8[@X5T
  MTF('\:8`O\`1&3]S'\@I^M/KMG:/!X*U;:QRD(L>X%6L0[-KLSL-PF]8NYF0
  M+XVWTC8I_"*<"`NXO^Q*'_/B#]Q0.$'JO'_`B@DF;/;U1]FW;N/5V:(K;"K+
  M_%CNZ%K!'<D;RE]VSP3#G:115+>DD$%&.[5=QT2[T:1-*SC0G9938ID;Z&B`
  MO>T$`KMID&Y%#.VS,#";W%FP#;-%Y7=?@,OW;_?]]%3;B'0&S6S)1T='-!US
  MP(:;H\?:!E[),;-!E`Q78)?2)E]AEZQ(5TS&7.=-QV-<3)-*G#+<R!B8_``N
  M"#B6L5(P6RPO[#2-'X]2C-CTKLR2XN4)V'HZ:(=.B)3VN@VVE8&&T+4!M-PU
  MU5Y[V0WEJ-^`JZH0G(-8N,*P1XRM]JNY"7IAJ,F:-,5&\)8[HWKU1S`\K]X9
  MS[JRU5K(P2#!>1$=IU3(3:$G7-U;84%7"IN7H3W=N6L)JY<Q"@'AM$U<WL?6
  M_WJ^(\`G($2N]Y2R8$=;VS8U8[FG/[ID@'.+K9D)9;9+G=!5D7RNN=H/0]#:
  MU,,JX"".EA%M/FY@Q9<S7G2?DSB<K<#TJK)K.-_ML5IV,U2W3_T8.REN_`%1
  M.-\Q33$>5[7VD"#(]STWN?+QAB$KW?$EECGVJ,*CLZ%$(\SYL,$I1PEN%-GH
  MY1?_CQ\WY;[=$C#1G):M_@Q)0;HYCEU.EIK?30,3Q=NX.=@T+%2-8^`^^FH2
  MT*IN5435PY5L)\.2F!K%-\P"D^^K6UEG';$W76T:]#5EQYO1JY<3FP?X7ZZ5
  M0RJ0GK2:[G9:A_`T$%'.+?*_@!'8W_F^7ZFS#_[4N>&HLI1"#":OEZ18KN_^
  M7"J.7>BE90R*;BTP**#3WZA#K30XT7=K.PRP4S9UHDXLCX6IUB6YO5.-E^OE
  M)))%?CCU9_B^&\/,#HVVE.$@\*-*UM#_=(6-4]>%F*^Z.&F[NF^)ZJ[MZ&*M
  M%-2O^-(?9F!E_6V=58O*8*,]A3`5#7SM8U%H5T;/,%(4^I:W/#CIU9H9SLD+
  MI]T#:UDCBS"$-K7PAZZGYN$!O085AK3*'$S5<"M>5^$OOK@M6GR<DI"5EV7C
  M7>\F'+$'5Z'G:*P]6U$X7Y.$.3?B$WKKZ,G2A8.J]`%)49,'B-YP$^&'\-YP
  M']H5SI!250%"W0J7+`=CJ[.1WDAE*/YU1^@A]6A.4V`&?IB+2%TB!S=709S!
  M#II;"<W&]^^%O24:234DRK53+LMO=L+GDD7WL"PR%1I=;S^@957/5+A`^GY>
  MEXI"[RPU(PY*<SMN6^+'S!<"UR<4XSO5E]+O'>X<Z?NBK/;08+#5=BGW,\[=
  MY#HW8B@MBFW5LYB]V#/[R9#(DAB(Y*]I2TK1*"UJ-C;"=O'MZ#W3:A#=^#%Q
  M5)U/6,5Y#6ZHK[UNHXEHPM`@]&OBZ0GO(#M#MSK&\3`(W:%[VL:*<L7[H2G8
  M(('A;TV[*%[H,O?,FE8=N<V1MI)N96^E@U)Y#CN9.!GE'RON`T4-1_F/>L3S
  MCS1!%TXI?H>4FUCYE?H3N^O!T2X_?6;%JO%6\GO`I.^G`NZ[EO$U:CGQSFY+
  M,0VSMS$N#J1WQ[>=/B,QU@AOO*O@)4^\C"W*\+>,'XVAXM\/O5#9"LL=7ZJ7
  MP7NVZW\M"1);*^/5,_XD^WW06?C+<:?D,D;CPE4#Y!#7&:+A;DST;GA/'8VJ
  M!B%1@=U(-V0B[%PZKY4OK'6YE24%ZCA2_-+S:[FDN+KE^(;%AOY@3(K#N/,]
  MZQ0AR@]OJE$.AU$RN4\`I$89.1JO?$"=$(YPDL+'EI@*+R7?W7Y7MY>[0!1-
  M%>:@='B6`@&IXK21P@\/3ZEP,NY[FY"4_CE[><EV#5O'M-H<A@8?28$B+48Z
  MDSFKYH-O+T(V\$+V\@=?21'!'L+/QQ/\:+JW2M'2@J5N#0F'E(;^H%\)V1+%
  MF0>&2%AIM&OA0K(.X2MTY<VC-'IVV\)?UL<0<[(OVIY76L^/@C+O<*D&B!]=
  M]XAM=IWR1'M9HJ!V\[VB2#IP),;4.N0#6&!/E-D/U;!NIU[W$C+K#8V3.8JX
  M*7Q616;CN>P=U':1[I7LTA:OT+?D@Q+L*NJNIDM#'K6MA/>Q>3K:G\3#^1?>
  M))JLS=]LI3N`,.A1N[9#!-5[AU)TF@Q#S%.^29/'*92;T74V3`.25;XXSN@2
  M1R?0_5KM96NRA`G[>E;QO"^9=_%A`\53VVJ_5Y:F;)5SDH_ZSZ(3K/[J+_'F
  M0GV06H+;CA`IG;G!DV9C!7W3LR(^]#AQ;ZL%4_?NJ'TMM/W)UY.<;NRI#&UA
  MT66=FOU.D?FS\#I^K>YI6&/0.JJK9<>XZQS_?);!VT]C(D[F4CICZP>$X6%_
  MP4\&9"C&.D2F&TWFFRZRMCVEY`@DC>OAH)@^8<#&P;3O3E(=#4#/F522&DT9
  M4+HL7-CNI4,<FF+=`*!S`+)#_?$57%1;?"_O!!_I=GTPO%,J#GPW:>8LXP=S
  M_OB]3P`58R@&S[@H35QQ68%#K3P>85!6#$7*Q::PMEN+X+RR8;E6V;NPEF8W
  M5:`-^SQJCB7#&[+[6L-[3[G^\X%SLP<*8S)S[5Y@D=DG865H__C#VAVN8%&,
  M)0QGA3C4:AH@>]&TOO'1^6I*RK]^O5K`X36)5*((?\T>W#W1LK9P$03:]]K.
  MWVL0%\^RKP2]2J[G$#P5%!(#&_U+$FIC'9:T028\O;]3<.6]>&N5,W>5TXWT
  M-FNU78%V//DV0>Q+CR#^7GW<0I@;&L%#A0^ZG4X3!&SLI@?_[D14<D0L;2_=
  M>\L8>??Q/EY>$X2E1F"0U)P4%+(C?NDMD+>H#,\X'TRI-=$7ZW4H(%NN2:DK
  M''111`$#5&9[?QH]OZ&A.I[P&H'VQ!YL963\XSB$C:19J#7X9A+Q+!*?5:I`
  M-2&UEH;6J:8:Z,(\3E+>%J2Q&S1SR)JG=:*NR5=YVMY-9>93_6P1:,!IU.KT
  M\D>,3&(W>]$H("^-_^MMZ:Y*S1:0)+>9XBR,.#]@VJ?L"U8AD-C8V>8,6;'T
  MDK0[T+(29%`=+:,/;(E5H$Q/8[L$<$FXG<4V:4!Q/!6"CU-B0<4>"MC3+,9R
  M1R;V&>[FEVL(0C!-Z3$.GYB/09%FFJ<S1<P#AH4YJ$<`"XF'4&,7>U0*K7*'
  MG+&ZZ-U2]UT![Q45,OQAO'0B4Q^]0;,#$+UI'*$%6!O>]+NQG!#2N,PP>=[C
  M4FB`4SLA$N=*@2(FM//Z/$GY!I8;C48)G-P^)59"LA=.NV[B^AN8V2KB%H=^
  M0LE\?(LO]6)_RR6"FYTZ=HS0CXL(,'G0NAB>>E9(W(1NC=K7(*P&^TUI2WC@
  MW"T90D<KM-9-'@M`N8[7*8)7,<5S&..].^H=@HF1*.MVK@C*MYJ!W#NT?*B)
  M(D)H\.A\#>Q"IL828YTTJKSSO/+Y+;<+MBYB&/QC+9^F=^+7U!.3"`VFE[59
  M*;RVJ!;V$!`_.O$.NCUJX4F<#"8WD!\&Q6CT5!\-<ZO7LIQ="3F>>F>T0]DV
  MTH#Q8?3E?1VM31ZV35JP[>'0NB5(AH'(D%Z?+DFXROH<4WI)CO;I%1EU$QUN
  MS]VM3>25*5B&H7V13GD24WRI$;7T6E]?-K1.$`Q86*K1[F]VWAX+S=(Q@@<@
  M%`9/BND-F-V#_N@3LPCK$319NK-*-!GA9)$*L?BBG-$$GHA9(=U20I)D8ZL%
  M(4OOWSK>?)[FJ.TIP'6GK&!,^38'30^D(SX%.F!QRV_*87/R]9OCX&XK8UZR
  MHBI/`%'+-QYK@(>=?DD[.0L4G8N)W22[4X$(3AR2?KTE)4%R<:^1O7BA[R!L
  M0XS*=S2HIQY+$+*PGQ.2R4YD->>:'/G&K@U''O;/[HU/AK^:EY&&ZG)DTQJI
  M#F""X@V/X";WXD7H8L%9-9RCA3:X##QXS$DUN_TG/5^V:0!X<"6I,!!V4'G<
  M6D$'VJO;C/[-P%DK]/6OV8PKY*U%NL@//;41NI/M$`-8L1MVW>XR5L77C!'K
  M^]-K4LL"]FD'J;`GQ@@B<LJ,98!RUNX^]QXBTD`_-=:+0F+,FI]&"Z<@3!#A
  M,84A!8L1B>>:GM7+MZ^T?);K[3XRR;='\4MLW`OT8\/=?OXG_D#5VTE$_]2'
  M^;?^RC^O,61CY?KO60ZV?VK$Y&#_WVG$7-+32L=G2^*W(/B@/:_H<$?@R%TO
  M/1X?P36$6PW%S3H>\#"[86'/"'LAOW>F%.Z@(A.CN5=/M3N^$>2FK5.F%O-I
  M"-?/?\CE/+OMN_U"--#M]%G)Y?UX5.[V)I'OS:CSZWAX3<+ZFHM7R-?E"R5\
  M1BWD*:WAY?)UDHJ)Y_'<3SG=]2]C9/BH[^H2B)BALKB\NNV]KFY:?]Y*]EBI
  M*OC>U:/<Q>&]QTW_*DCHVR'PD+M(\6#_FVF+0N$=)IV/MZ#G^?;!.4.#\U:O
  M7OV@V:?,CO%R7&B0JA>3LBS>4%T`[CI]^1),WZM,>/6#<P=_)/"G'"@TJ`HL
  M<"]SW,VCOEO/K]A5WU#4YH&+[>NKV&#JAC=;+%FPMC=[_P1Q-^7Q%[L;P9_Z
  ME2YK`[0NA#D%?5Y0)M2(M#3N93=;%)+4[U=:7KO3^M&U&NO]*./RV,2;5T*O
  M]\4N+_>?!89[@_5C'AI@3=[<`HJ,YDR)^OL@/G"H<S<.56=E^J-FS`-5>Q,P
  MR+O6SS[TADO?)B;:F>AUOB&HPU]K+TTZ+35?ERQ@-EC7HW%[-/"48";T03[-
  METS&ERDY*B$XXB,478,HB^K&_401VY)Y8_$KN6C9T"-(VY#18LP([_./VL'E
  M/ED<=`'PL'X&?^;IM[YFLF_<#HF>0IK:H_L,,[,<8!WHKGAWO*$PL,V:W=2#
  M0Y)R$[/9\^E:F9!O-Y/T1YT]ETIR+LN3'7,#%R`[B@Y]ZTQ'S1R`T89O!GWS
  MI-3[-$&D7?H]?U5[V7+5_.3VFZ^Z9(EA-<N^]`($Z0A@KHT7]]-(`YERQ*(.
  M^4H>+C3AH`=!68E!NCH8+A2V.&:M1]H]?U?/=#N`#ILP8(LB&-XA0?S7)\]'
  MU#=&(K+J`%=LF:\4AORR<=XP3$U8&52WOM*N(2"(YW<A]K6SI"\F%J".MRA\
  MXCF3$@K(;D,C'L2%SA$UWQ3)TQ/1"L2GSGO?.CR]<<<1EUY&)%!7LM+P^[3N
  MB4_^:VPMB;OO)V=WMW#P-Q0>J4LL1I)RTLLNXD]1104#F(J5,R<@C;->O\;5
  M.#ZA/,XF],%3%.,^WR>!7P(VH!SD5:-IKZF8Q#P+@C4-75B")OS9BSBT"D-R
  MK>WH0'C`TJ'(WO#4>&W[XESJ`VAH$L&$4J$%`^)1*H%^#WU*8UZ/[_*LZ$R4
  MXU6>"KW^9M76T31L>//Q_T;$`*\X@0FM+QBC`YU@!(!:`_V6R"Q<2&,"[!H4
  MHJ<3@J/HV[H7(^YV>F+A>4Y<)7N5A"^3`+B)!#TGRKG3*;K77C\`54CTH8.R
  M'AJ:O7@XW=BO2;305[^F$0R2/>::SP%A27B`%31PK`\D?KLBJUM0'7M?K?B>
  M_5@+!7W=@KU`XD_MIP;!?"IB`;DJ[!<OT-T`R?+4/B+H`;.*\/))04NLWPC[
  MFU)L/1BD8Q&4[\MFE%HQGK/W?86?C_N43-]QO5(M]ZEGO'F)\[Q^$\:E02.B
  MM2!JS;4YM^\:?,X"*N<8K-2P(5'&GM(L'I-=88TM2AD(BJM_IPR;(@C7#1O-
  M/^QWT&D0;)SM?;.$^Y.TV\P#C*8&5$XKT$Q:OZ,@5+E)?Q!07S$WLTUI/"<[
  M'AN98J+X>O_OX;:/WG0<*]!A+!$P*45RG$`.R1*6V:/(&4F/M.J)XIB(DG2E
  M=V2Q1I3]"4T$H)ND^G,=#+IYO$0-0;.&FU-T82C$2#LA_K*P4J%S<`>JJD+D
  M`R/X"KX;"M\)G)_^.8I?3]7\]^M0F:A?_:-#JF@11VHO'::(4Y73OV3*OEZ&
  MX.R)QE$.4(BIN0:+'#`OF_#-?LO*6/S2SC47.CQ3:P>T.V$0RP:SHPH:]2VD
  MY-)H>)JOO9S1(3J0STD]/&Y(N6QO@'Y6&F*'2@^*5Y9D#_D%L"`ZHU/-P2,<
  MP>=>+*7=$@GMY8J_LD^'0#DZ21V[D_-YM^$(H%X%K5)P:F`*AJ>72P1$VM0D
  MBBJ\>#D$FJ.?:II^<I@GG1Q?0R8[^0P`Z&=%DNX2:VL1"0N"8S6K>*G0PK2,
  M%K2*WLCXDA)Q^;&?#7Y6B^T6N0$R!&<SW0&'&;Y(G+X&FF#C^7<$9(LAG9!@
  M*)L8X3+T(A&\22%'["OR"7,S7:,DU(PO8_N\5!J+_744XT"&OT/8VK=WO=$U
  MD_H1%]C)5]]K`%NRWZD'XM5VW%&F9AD#F4N=UI6%;GP^X>L6:JP<.MI%)0]+
  M"!.5NY?&K6'@/%'S*(^QMKKBPZ`?TQHYB'6V6<A&'O*]=[?U0<>GGM0Y1QH:
  MWTP7?6.+%T5*/J%LI(FQ)/HTQLA0$M'"?(.-RK[%5&LYTX@=@\,\-FUFIA*2
  MN']7TG:2&+`FL=O)XXQ-YJ[,1G^Z@*[X0BZ-!T)E@2X*<T$VU#N)X.OA26=8
  MV((>M7-KHW9&R\(X0U_A"KX];AR`"MI,P&:W$]^85O9(OF^+'"\H"YXZ90-^
  MY6!5C*<+Q!)$3N6608!!LZ(EC:)1+!4*[PKB$)(!ING+1+,*H@OI8K5C_I3M
  M+\J_`K65GD53@$BGQ0(TNH<N8NW*\*@-8:JYP+ZE;]8LSSP8+3GFV=S<G`&Q
  M7J_\T`83F9N<L?A&!50=HK743"NR?6CX_LWO[I:3RN>LIGD<\;B/\DP(",T"
  MQ$OR.CY<#ASU=V?8]#-])"LE.0:FO2)K6.D8]'>%TQ\'A<9""9;76;[+C0;[
  M:P/"\FM56=URSA017HPDZ%`IY8Z#SA%FX'YR^G&M?HBFC(DMUO$\$-=>/UA4
  MLTUL!S<V2?LNG2#AT`:8YHIX%9GDF,,/SIS7Y?G,:+/!VI&0,`T3*Q]^Y/Z6
  M2Q$1H@I^`JZO36..8+I8:TN6]^TI5+'IY]FWMCQ?#`!F!LLD=B_9+FZVHNZG
  M0SE-#`E%F3>[?"%Q)+FS<"")+?"C+5K5\[B8^@(E#RJ%5'ZH"V\XC4Y^Y1.I
  M9@4BE)AH<#SAA"3CUH+FB-CE*3T<WF^$`CFFB1LZXD3M09@D.[V1$K\*OSUP
  M\L<B1#);VLP+'5=3/+:8@HR@?\,WK1='2@$_LDK!2X$M12$CP(%Q=S["#+&@
  MZ."4#!N-?$MS-T.22PX1]S28BC5#UPK\4!7!K@O``7LDVDG4P3YSY9(%1KI*
  MW?G@D?+A%WZ!RX?'1_&:M[4B\EM+<N^G#>"T$+/<WE$"#:389LA2#\C1M*(K
  M7EGBXC*);6UJ0F=E'V-!$N%V=Y=&TQP)>CGT+N#7@VPJ)LX;%E-R*LA-Q>TK
  M]O0ET\T9>#Y2$FJ\G,:=\#E-1K2["VO4%0=GCSC34AU38PM592<5\!,H6]_U
  M(@,J*)20KR%VKV-S9<G(W+*TMIXX(Q2'UIQ25/8]K5;)/,,!'GNE``)6748*
  MJ6\"#PQ+AS$NIB#RX/P&&[%F@;W#;-"(H6PWPBP$#3FH$Q:O2.T`^6[1WZ[J
  M-+A%9BG9'`=Y2QJ2"M7(RAE_&3#3I'/H]HMU*)Z4K"$K\UMB'@L!W9C>:&_Z
  M"@69M]2FR?O&/&UK!=("K[9AH5I$V"RFG0A4<A"*]J:Y:\B:.,G$8/KM/%7^
  MF@Q\$T(*N-F=)?QZ=G!\C'@:4#_3])D^["%9`=5MSFTR,:$S_999CVTPX2RX
  M_+CC#1//M909[M2<5<\U6S&@$]97P%O+GOPB$2NI#8=!`):S<<[#!:M+RHH$
  M$\+#3!)77265.1-3]%%37(R'['')2PO9RH^=]R*8S_W8>EXS`ZP&"#>5'-BR
  M/DPH5>:NM;4YRI"/D*U,BCK8AA//P@H>50L&<!]9!A2.<SH]84?`!*Y>%=9!
  M8*+<,*%2$F5%[]Q(]#W>%/+A4B+1$ZW#B)F^&5V%B&N=#S8KWWR7-<S`V2!C
  M#L.0L_IE$`]J\<>Z3&\]M+>]F7\Z@B'6MX@,&P..2P964>562Q/@)D]I-`\!
  MMW2$4_"A%!V3@9`$X[7+^8%AV4:'A?INF`=(_NCC'(^35@S7SL56];.+5Y_9
  MGG[MK$O*YA:G5(3DYI92K8AN&@"6(HLX(N0;[>4G>\G@A6[Q'JM*5`CF0]YK
  M<6,'1Y4RJ5NS*_7^;XI.-`>/6TX1/_-E<4GG<B1AH^;J0"1/H=$0)!,&"#HQ
  M#ID0-TW$$("2?"T=T4!']WXXE`X(Z*V=`D=W/$6>[EIQ,*B-X%79BCU,>!!W
  M(N4&57S[F?1/-=E0I$6?W28[D$RUW&4%?(DDD-5<;.(,HX-!2G^NN8J(,$DG
  M`VT_+VH>K2J04!'[]]6W&JE`N"MLIP`I9%8?.IG9J,\/^4Y9?B5QO/XNN=E'
  MTR:<*+C![EP6U1.6E`T5'/A[:(@*$G!(:+$O5BG`5"B8.')/::';72R97&<J
  MQ"]689WQD*<7/U;L^A:5@-M5DY1^TTSN8"W[D)I@`K$1DNOE,2=S4<5<*.,<
  MHO/=\1=]\HF"I]]O[R?<Y-XJ],-UW\X$S:Y8I:)_&B\G?3_C09R(3],>C1^A
  M%.*SH"UQ2JG1@U>V_PWPD8D)39=R^^Q.A^&4ZS>&*OC0IVK\%$6DE!];]^F?
  M%&"6PF07C"PJ@O!#E6L]_&.J@SW?KK!`^\M@"B<6(F"=*"$R+L81=3:Q>T@4
  M<I=^=7HS$C`W68EZ1JP4_9VV1.?@V\D+'652:ZI%DIQW0#Z\X@)LTSEV+DI7
  M!/<,9-<:28_VA4'%U*',3%3&+9:!?2<>FOGF;[)H\V&51MNAX-H42@PY*Z/A
  MZI$N.PDH+#JR3>=H83KH2[PS1<UJGL(XO2*L^7JJPE394CFK+;,Y4-QJ.J-:
  M,-LU;!NK0B`#N=\Q^.GQ8/2?LD1+DO=Q]'$$M/GQ]9P1Y%_LA11:E'>"<=XA
  M-L5I^>%-J_/!7*$^<8>V#52'MKVSPNC"Q*)NRRT18I(!FFPR))Y1:N2F0PH`
  M08>LK#13(^4:1V6ZZ-5ME]_%+NFCG-I&*J<ZBU![10)@]<_6K=7?[!Z4-X]T
  M,>6:@7*:?D@,F*SZ+FM(Z_;!TP*C"59>L._]<*^M:/^8Z;A+NS#>=Q,0OJZ.
  MS1O\C;,[UR_^?648%(?*(2G.%>/=Y!W[>X+#K5?"`](F9,U;X^#E:P[$EU-=
  M_?,636.(:;T15W,C+`Y,?LOX*V?F)<7"G"XZY/<F^6$EY`>;+1\;JBPE%(BE
  M:=P6-AIX!7.E,ZLP"1J3;;"<`8J?E2T%/IWD/\^1C<Z(8]==S`;AI'*.05=,
  M`?SAI7""^'N`O:I0)[61?NO"JH+4%OCG[Q%^+4GMON%!:#BWZH^RBRHX<`YV
  M0\4!D:PY92XJ])"R:(`&6*EC>L%P[216$Y\07GM>S27#L\QMU^6))K.<O2*/
  M&%2JY@W*XH3N2J?UK-AA#*I<%,5$+WS%[11GBC;R]L$A\ZJ@P`I8N-ALU6`J
  M_K?1A\MA,]TVD"O@B.!.4^'%X/46<GFEW(QJ9ES,5]3@./;7P:^P07%B@5GN
  MQ4H(EN.3IN%YK2TVI3RGCQZJZIR6Q;17+`GIN.`B?!@&Y:MPDMG&]:E#$M+/
  M0_CNDTQ(I=Z'X8;@/[)41Q41;<8RO2\N(RMO?.#?QX$EQ[P1_)S'>=(K3?6E
  MY"3)H::(-`@`D0?1)]/USVXHO_Z9=Q&K,AUMDS4;3[Y]N(;K_8Q6C8<ERU-#
  MK<N>]`TGS=;8D.[0'=B7'$T-2N.C$1%K,J_`<-Z&U2D0'KT7`&5`.5ANKGXJ
  MYI/A-9=*U1*;V:NP:M%0I,BC6+&H)*<&(0M44O03)4<Z@]DV&*!6J>(3U]*Y
  M,.,8IUN;!@/K8N4"RM^TH5R9+K'9='AL-(6WG5<J1Y(M2!5:C60U[-+1B?>!
  MU50ICUKWV0/YE$CCEIV!D7C)?R%NIA,,V&()Q01\T'#!8IP:65LX=YA*2X!3
  M49F237ST06DKAV\O=5DHXU/.H=(T1EV*I<7[!Q0\)/,)9MT(H19*/N?#J7':
  M>H4,!O'EDP$<[#FV:]IP&6'#+Y[I'$]GQ846>LN\?;S,UJM;3B$RQRMAPWG?
  M6G6/@B"T4%YC]:)+%%4/0WQ)5OU$WRE4OF6FQT^6D(WE60:\ASUV&^3-?EKN
  M]:HV+$U0#TDOF'+Z=DEQ![6PR-RZE;M9![=O#@4>UOF(]8@Z[UZ_M7Q*_E@E
  M#5P/RX=NB4MH.5+JB5R*DD+4_<(P%FTEF2W:N2+E*)?,Z3..GM#?":[V/^&6
  MLC7;!X560D'&54,Y\+4L)S,,CIJG?(2/O$0F9-N`CT]GK`'#Y(]6@!^PUF8J
  MI8=SU[W#>]'"%^;L^R%^$8.\[=&5LNKHN-TXF4"@!SR"':_(>OJJ#]6#-/86
  M*B;3".;#RGP7&MIEO1ZW:=*RB$D6OK](7E[0#NY),.P:KW^#-NJKQX`IS>TG
  MDUSBD]?0_J-6]?.'H5/+='_7F":)^@[<]GY.6J:KI_B84Q!2N<QW]NF@.KDF
  M<*%&PZRCTIK#1L"TRRJGVC;@H"G#I,?#6J@)+-B&_@3#4#%ZOI@D@(<;W7J#
  M#MBH<7J_/'X_7A&J3CX@!M`8V6H4HF"KIZ[M(F'ATSX;>=3+.+2#.1<4NT=!
  M6W.^Y?0]0AI/0+^+H-RY5<"1DD6A"`F?ZBU+-N!2BUPV]#'S^PCL@OCS$MCB
  MJM5OT*;I3QNT-@23X[%1R!*=^1^'1&UB&:(7C*A(I<(ZE0VIC^ZVBOP?-+VJ
  MABA*\[&XRM"_[WLT_1-_,339Z$\2[4[>)C/]^A0:N5PK%\%,/J.D"GPERB$2
  MJ(`7+]G-K)8(1Q`O*0I%FO"0(3:5;)S"#IV*V:A9-A@TLU,XL?>\6`LDZW.*
  MVH2+K;**H]:Q!@U+(@,II\<47KZ^Y!L#=PG$I\7(`>OPB-$L?X$K:XQYYEL>
  MIB/Q6^:%KV&C>YSX4")4QK"-J9602NCYU),&`2(0@A)P:X#KW)A]R-4M(E-L
  MB*F#?WX&ET-$XE>D74E>9IIF6\&Q;F#27>87$MZ7FB8`6H>6F@/8\'#0VQ?E
  M3MA%=S5C?\)R@1"6-L^(KL>T8)M-U[]%F=6O\P^X;ZWRQ&IA:SIALMGR95<\
  M?P?X^AWLO^<F!M+I'QU!EZ9;=)R!#=R86W>%V(Q,-F6LYUGC5HR:=PB43H(<
  M[30W78*RPM]=38TOC-6WB4RKYREPSKME^F:F,R=./1_P<<""B)5!I-5D/09Y
  M8\ID.:FRF*.GI*'M@1)$D<C1=;MHNT]D5AR3'IW^</P*1D<58!R$[*R8-+TD
  ME4,X:8"^<*J3GLWC=CQ>##FY--6L:0(_T[<(S<T7[8!VJ5AFSK74&?IY$Q,9
  M/?PP@0C`$2<W)*6X[1E`I3A2@R3E;N3SAU'.2(N(IV*)DH%^HV8KN9&^!0$:
  MAM4"54>ZQ7Y*AZ6+$\$?^I[9R6^0]"@-P@!=90K;S0,\8!&$#.RXKCC(3#*5
  MDMI&DP,&T98$\[$$<ZS2][0"O0=]U;8/3VPVM,F[+R9K.V!)XQ;&HC4=B2E[
  M6043B='?!SG,3#^L/-D4+)2)W@BH;Y$MCX1SJ3;@RB#(]*KU%/IN4.W"UF[-
  MX(UK4T;)3\H2`A4<GG/(-3+_S,FJWG-F:B2V"4F^Y>*,Y/C`T#ZC6<VVG_UP
  M7-=8%)\IVP_6.LK@.E<[TK4*MZ]GOMV5P-;Q"1:*,R;6),1]V$OX4"MUO9WN
  MLNNRO*Q$"*7/&TI0+(7I9*+=K6M?/Z=1#R8$_TM$4]`Y[X$&'4@,K@JX>J3D
  MI0!XY]%N4XLHLU,D)W1#E7D7]P?8$^F7X0>DVNFS,;[J..D*DI;2%'EUI1C&
  M23H)2303++*61:1N6S!DQK1(2@>Q!WX(DJ[R;6;0BJ?9U>_++15M45ZPNLQ5
  M-LJT>AMJ9!G"U7/JI+S($BGV60NJR%?YC-0\6&F&=4[Q?@UJQ"J]MIP3%96=
  MM"'$#MT*LR.*X7PJL5)G`CC4XB^GF1=8Z(>X:TCBL($I[MGH525P+QDB;?@'
  M?31>_%A`DEC6TQD6U_RBW.V=]1LCCI%Z</CN"^L`XC7]7G!5!ZW%FL."A7TA
  M11UJWW1L)B+TZ-!#R@"H'4O9-5</#OT3(%&([FA6\Z"[L+$^HC-6P/LZ2^-,
  M48A1+_-VG)DQ.U(<Y<5#5#*>_QBK4GY)QD50Q,:+5_.V?1;'QK;,4S7WO3)8
  MA$*S?<I^-)2:QU/UUG"`#AMMT;5*IZ%_GM>Y&:H&>3+;L9]=V,!CQI*E%E?2
  MW$ER?`GS>81`@:?W)P@\<+O_##<L8H`!/6B!FY:?&JKCS:&IL;H%S7!S7=FI
  M.BS&XOGO4&ZWL4&R;4%2<O.ZNJ*X":7P2M3RYU2]&_X$[D3.5'=Y3";E8_4&
  MIL'LY.XXQ=2/`_Y;W9\Z>7T_QPEM8YYT@5@H[^Z`E$/JS_%_M#&LR:PN!V%T
  M]AFOA'2S"B0[0@'6R4?W.T[-B[]VL64@QDM?`C;BB64(3LOAX.<_V4.=(R\G
  MTP*,?+@48FM\W86R2)]ZG.B3AR`=/P_5.G;SCWS]8G9PU(ZY3F+7T*.$)Z,D
  M6O/C9-BPV>X^\=CK99YBE@`4G;F/>:3-[LJ]$B&7F-.K9?BF'DZJ"J,..5<-
  M2KWIG4M*TL]T[\Y'4+_OEWRYF1W6$@DZ&S$/*D'X,0:T*8R*I\*VG?0Y\M1Q
  M7ILV3A:.C.&<+`O(,'%JWT5WA@^]$Q8*/W/,^U_HZW-_-@NCGI&()A0S'&-!
  M<?4G)YBD3$+(-<*3?X@-0J"?0%1U"(2X!XR#*L1,3UPTNG"0[]T.NSIQ6V"0
  M/S/BO25#:04=3B`,#"P((F9J?&'2EF>W1B8T(S@46PGS!\GR^2(2*Z@31QX>
  M]2A:$S%6!1$=NG84P-N%L_JL-,S4:VILW$]"@/OWSL:*(^!;SY_]5E&XN56E
  MI#1N>'@4)T+^"4-B*!,3E&US!;M/6*/@,>VMNY,'GZ".0N+&R'N@)=6L])&K
  MJD<8;S]H[]0+/F!&LXT!12#/KL/-8,4#5D?&,ENR"AYQZ!J'0D8M]K;J3<.A
  M'R>J$(Y]DT9;XR%`Q#62PF0X1"E50B2)G3S?_PK+3+W-(3</T?C=V&,B[;(B
  M;SR+<'25\5"+"2E&XM01%K4\5R=4(AJNE5M8V+&196U"?!A3(2#+L_8A#-Y?
  M]RX,'QE'-VLPJC#+27D5:&-."[ND`R'POA56\W7J?I,3A`=R+)820)O*MBE-
  MN>`N4@F<%[/V0`F=CC\GIS\9UGZ:"`VZZJT`:E%32<CZ@+(.<LS/SLDH'ZTM
  M$`L]_M*U%Q"VBTM)91+/9&LGO7#*+R>\S\T?2-E:W?S.@S,=B*Y:5B7OQ_%4
  M-*J,K*,Y1I0-I+(4-#_M++Q,4WVS&6@]((E(YD3"E]3EK!I6S[7MR4<3>H/<
  M\V/&<I1=`XE/$:"1X(G`Z)^YSU;F*Y8.6L65A&Z8*XZ8849=X+@>5=H<R3)0
  M:#NZL%PXK25MD90Z``O6:,[;8EM]-D5[Q@C0(V8QJV;3&W7J57>68RL#$E>,
  M[X2V7+6W?]J6#'K2VG>MK5.@7]:)],?2LAA$))*^:>,FT%BW_J)I.QY;XU4+
  M@#U"A2/3<O`DAB^@H.B_Q7;1P1E'()7\L&>SVX5#(2O(8O_YB7GJ9V]UW@KI
  MI'6:T1)1M#F`T&L)UE4M2M'-;-;Q.`$$_1-E*'EZ&Z-A+.JH%8(?EGKV4BGH
  M6GMK0:QFKEDPK&[IK?L<)ST?0Q#T%<S4WFZ^L61ROCC+-9!=@3'+=:'D<.LH
  MX-<3^Q*:A;"V2AMH*(O(@#F;06<G-X\-5%:`/*7IY9MDVP?^"&KNC/RQ(-\P
  M1!=U7H8&YF$,PE>2&$_L[_&&0R5V[43UF)_U/C_@M;6VY;/!DQUH?R.0ZS5]
  MQ<EA%:"QTKZ4Z%VPH6!N<-J2B/H(<5W>%-M$1Y(TZ7A&8)9V)]!=V#F"X@RO
  MI5Z3V(NOU5'U1C/V[?:\1F:I$^8:!!!Z?3S,<Z2[.`Q&*LOG2;H'M;@+321S
  MQ#/R=3S@J.^#?>%^_;X9'E]:4!;#)N"<\WV@Z.=<M3A^`+\1R54-<J[HZ*U$
  MW:))B=9%(>P4CVTUU<K9_72?QM+0WW$WLZ\0<N(R#]C.P(/H+.5VA^?(-[KS
  M%0%YS)0HU',GOJG7WN_5K.RZ8<K>QG.`'L6WHX[:F`@U`BE2Z3$?(XRLBO+7
  M.HF+]P?/3]TL5F'+>S:;01]W`BGQ.7-LEV2D]P0P*ZD=:AA"ZMRHC20HFM9+
  M?8']5"\R\`G56/!Q*U&U*OXEV_A:=8B9@JB5!<ON-;<]_!VD99/4;0$"YB31
  MWFLHLSI>>2$VUBI-SCH)91BSQC>M$S$Q6+\OIGR_WMF6IY*T*4^T@D?+\;-S
  MY/YH"7R1./9$+8$N5%36^IWU/3<L73-3=DM,5M1'?HX)TUEQX+B5&Y(:5!)<
  M["/7YP@^W=9@E/8&O.GD^+HC7:8(M_6<TQ%8;@2?"GB@=2*NP11G^UNL3?$G
  M:F7>X$GW0XK.[0B8H<\)X[?K8S:P=P0$&]%+Y41#+1H^9>P\E<M?01^=[<I5
  M^=SZ\M8V:,3!ZZ\,T7>F6+J>4A@XAK=^DX6L'4IF-V-'P\9;-;&:/]521GDP
  M(U3"&(5(TZWH],\D">98,FO'YDUIQ<;2$B0(E<7(SV\A=.1ERAX['CR"7PN'
  M'07]Q-GR5BJ@T)/>XX[TJ9@Z9M*PVS=?R.]_4\T:*)2HG;P13+&S$(R>->/Q
  M1PA8G[(45Y1TK!(Q&#(@M'%DRY@XLY+*>18S&((0W*^>O<4ST2>;)Z4+*2B8
  M>P[->1/A#:^6T4W<&)FVDKFQ,;]0#Q'`?C_AUB?\#K:$_1HI:89J%Q]P$<03
  M1J].\`0!P;>#88-\AB^+RFI[&S[FF/L`NQ&S=2^Q^\XI4+^M<8G@CD>2B93)
  MHV.67SH]Q!O[J[GC]/*GD::<,`LO\=T'4^5]'D8CZVU"R)IR&7`BCY:LGYM_
  M(A4QUW9)#)@-`$%]/FQFC=PFYT4KV[1T%VRM^HNZWGJX6V]F'"\!+LUJ`%'[
  M@.,[)_G>S"+?K1MA0XB*M8GK.<82;K2:'NXC%0O1@?&]/38=[P-#1<&L7GX3
  MRO'T-A21Q\\_SES$+XLW-R=X:P_<J_0U3"8\?_-F[1L>V_+!//>L)KAQ`M78
  MSGM0T#%!>DK_R\9OMHT8P#Z]TL];Q]MAXE<UOQP#W,[MGK\RO6CO@N:=0YZ,
  MU/'KH2K0JA7*W#8CIT))1,.T'YT/RW2!XRNWD4\<A?/G""',_9#3NR9*A+OI
  M3F+U9L>ZI78F)Y1X"4";J:)<\^>PO>!&AOJ>,93?C]Z;$%=_VK(U-"6VZ%A^
  M^9=6;[%LV&S6=>>$2+R0V:-,?*(A/HB>R*/(]*&3F+NX%KVS$"]&SC4M%G4$
  M`I6I(P!<%>VS2M!6K_QDZ<\:+BG=)G#KS)WWLV6^(/W.BI#_J7_B;VT1_S7@
  M!#!S_O<DX']U3ZAZ?C-C5#2R,&.4,S.U,A)V\"#28?KC-1L7&Q$G@$4/AE'9
  MP<7(Q8R(Z8]53F;V+D3_=0>6\A_39LX.KDXF9LY_.%%T<C!1,7/18504%2=B
  M5#7S</G#3LS#14+E;Z;,+'^:B#O\8<[\IST_/PRCR!_/?WAT)F+[[ZF_\S'_
  MIP$Y_PK(]<^`S/](R,+TGR5D8?L+(0O[/Q.R,/\C(<=_EI#UKTEF_1=)9N'\
  M!T+6_W"66?^:9=9_D676?\PRX#^<90#K7P@!@'\F!/QCE@%L_V'"OVH(^!<:
  M`MC_@9#M/ZPAVU\KA>U?5`K;/VK(]A^N%':FOQ"R,_\+PG^L%':6_RPAQU]K
  MF>-?U#([ZS\0<OR':YF#XZ^$G/],R/&/M?R_KFXD^ALAT=\0G8D89:Q,G8ET
  M8/ZL-N8_?UC^3!'+GU%8_YP$_#D)^-,SVY]/;'\N8?]3,8X_5^H1_0'B^E_?
  M$N:_?M7^OQ+]L<;(Q<C6P>*_2?ZN@IR9BY'I'V^(N%C^4>1_T/C_E0.&44%1
  MCHB9G_^_(_WEO"AS_,U.^2\<?[G%4ID3YF_B,2K_@<K,_/<A$PPSTY]#+ABN
  M?S#F_+>NN?ZEZ__ECYD#AIGC_\<U"]N_<\W"_J]<L[#"L+#^CZ*P_EMM6/^J
  M#2LS#.O?)?E7`5F98%B9_F>Q_ZUXK%S_1[%9.6!8.?Y'&`#6?X<!`/PKH?]W
  M7?_;'0+^SW;XOQF;[=^>'[9_>7[86&'8_F?GAYWIWT5A9_Z_$(_CWQY-CG]9
  MMAS,,!Q_5Y&="X:=Z^]##ACVOT=A9X-A9_N?87#\6PS._XL=LOY%'N'_I[@K
  M#VOBZOI!%#%%T;IKU<&JP25DELP6!8L@0C4NB`NU*"$98$JV)H$`*G7?TJH5
  M%WA54%NQ5&M=6]M*Q>*^8K6(%1]M2Y%:MRH:%`O?G;"%F4!]_/H^+_XS]\S<
  M>[;?^9U[PP159H:C;XXJ32QCDHXR:#6UQ,:)Q;+)B3$6;L2)D,8U*!=+1+`Z
  MQBQ88+1>;="P^CC0=1SV-+<@OW?5SY,%L[&Q#.A0H"7-$*.R6%86JXURHB3,
  MA2E31X6$CYDT-$@Y.9)VV!',F-4FUF@QF""TU@XG$T-8D]D2%*\"]Q#9.%7=
  M-8+`LFFLQA)OG@&1-!=#P3^Q"]G_[#X.VB;N:)U-9%'.*<!;3`%_&]N0`BZN
  M#8-IK#Y0;V:;R0\BBP,G7PL0O)^HT@(\HK(8DTK-:)E82^V5B8V+MXBYZ,:H
  MU`EFK<H<[Y1.TA4X0QEM$F-AU:J70"8&NUB@$9IAH-NS:M<`)5J,#M%<=`0`
  M=7*'H%U8,S8X*'!L.$`GJ%@^.DFX>73*L49TXD[@=+!!(R!P&'9*NB!?S?A'
  MD"XLG1PZ;5+@%$<="4TEJ!8*J=%2U-G0)F@D6XRW8*/U"FB4Z1*U%M:H37%.
  M">["T4F14R)#@H&CRC`7CA+-.TK@C9Z25*.K>/-E2\'8*^0'=\5S3OFA^%;C
  M+?&<J_10*-$D/52+Z:'^2^E!6B2`E^U/F"LT._>X"3%:]OU$YB660IHGE);(
  MA&XQ>G1ST1.0B1@A*)D&F,V86;-SG%KPT*5%--R2133_$P+7%B$X*K.P6@WC
  M9(DKBJN-3[A!I]*[-@9IT1CDI<,#-@/@O$C*WD\T6!A-C-;19^H'=:T&<"58
  M&/09&:/3-&TW*'_;T;2(',/Q*ATCW%&,`D=J<**6HJ#227#6`Q4?Q7WA+<X,
  MR<6R0+.:.U,#(3@.JXRA#&=)[9!;G;O'S13+:B$4J(_3@J,XP*"%T4V%$)@`
  MTT!U@L.W;V.;=-E)F_3;P0[30E@M@X$]"]1TS^B4I]HOZ#E_/X\'_Z"&_UJ!
  MI`("&KZY-V5U5.CD]WLLK8G;>/WT$@8._7RS>R=-]Y`NRRYM:/_#Z]\9(X;T
  M5_J;[P18]"N1ZR69][2SO][_C??7[-[(H0<R/PS]N'#8"L^*(8>7?3M8]JWG
  MMYX+S&6=WA//M-BK9U;^%7#1YK/<4]5CT!0\=\:?23F=7W3Z<.207U<M#XRV
  MW1O]K5=IS.JQIN,_!Y4\>?O^&;?[+P(''-V3\)'NG75LOO[^O4N1I](_?^_1
  MN*@H::1AR[F\J%YO7OMT;[GOPA/AXM1PW9T[VX<][;5OYI>2C=9>01H,#\Y<
  MFGO_QN4AZ:K\][:>TZ3G;D1[SSZW-F?M9X$[0U9U7%/1XZ!XD:)P])65;29&
  M+N^YO-"]HB>FOCFD>L4>Y8`]]/>/V]U\TN,WCY'+OQE8O:/5S/P?SH\ZN]^C
  MJ,.AL^TO7.IQS/U8K_TQH5_O\WLXSZW[^-/YGKI`Q=:T&S5%/K<4A]SZ?/?G
  M>\:*G@?G;JYV.T+>8J*]K(.@9[=/W@F9>/K@J5NO:<H>+WX17J[JN.I8<?`/
  M!:G+=VJK#IM_ZK>P8Y>'_OONKE<LS+N]RO;L\@)EIZ3%8W:(5DD^25=]4-Q=
  MLNCFC`T9`[!?Y@WY&2=^6-1C_:#J_7?.W8N4^M[J/N[\^2YE,Y=D+>E_-+3'
  MMN05'AOF;<[[0NR[^/7B-GO^>'[P[SYILT7VU#EZZ[GN/L2<+RVYPWV\*P-M
  MK^G0<H_S8^[M4VU.:9V,=LAM-V'UH%X%7^RW3YT3MNSHL`OKLF#WL_,/546-
  MK2[JLO1B@6+8NEW'CD4-N#+,='O?BZ5>3_-\NW;O?>C+%<$#.LWO\ND?>X;O
  MRSOQ>X?AGZ1%BVY^;#J>L6C#K>S73M\[W-&:G%%U:_>V3W:'$:U_Z_QVVN@M
  M7?X8IMFA@T=ICWR\LCA?L6FQ?))JL]_,K/7B=;_M._[H_-]G3&&ZD.\-R,`-
  M;U9XT\>'_R06_OJ%SVW-%;E@8U9?Y!0H)Q0!&P%"6.-`Z%SCCF%#C5-8LR5.
  MB65*UFP&K.9HP!"&84Y%;]0FFF46J\&YHBFX:453\*M4M!Q!G"K:;;6;H=I-
  MU+J5R,W-S</A.7<UH+*W6^4;K2K[N-NH9\PSOS8V+W>;5^O=]IK7[7@G.^QM
  M']91Y.[F%C+VG2"#,<7!1)!OT&`(H6D2"M0!;E*K])!298EG="JN<VNAR08U
  MRUA2_*!`K18*YV:8H7#&S)B2&(U#<9!!9TSDOCBL!.:;]"*1J-505"3R$G7F
  M5+6=<JS&33E%U*'&O=U)$;7%?FB__9MLM\HV^]TKI?;4KO:='IE9MNSL9-O<
  M?E4[[;L\,FU95JLM>6[?JEU5N]K.3;99K5FVS'YV,/*8:TO.SK9E9?;M4+G,
  M5FROJ'CXN5M>A7U6F7OE%/NHKB:/);I%L^;/6;0PS)9H\ZP*]7CRR`[;^YX\
  M:GO0T^Z!7*_J4-4F4(9.SK.MW+1[PX'M*=OC%RZWK5C6=]NYHWN.VSS+OE+0
  MPR-'1"C[5454O3=OGFVYS=RSLJU'A\2MST9NK<K99->O]ZB*V=#V<W'A:WW%
  MK<ELKW9;UWIY%69[M1>)]O_VZ3(AC`G^EJLY&`MW[74XAB$"'(_D-%*/8KP!
  MQ4#HC&+'L![%S;4IFBN"I#KXDB0)`*U*=AXYP]LA:8!W_<:O";P1'KR15X$W
  MAF!.\%9KHE4QT1J-QOJT_4JY7(1,20O%JE>KGON<+;GQ=_J?8_P32&\SZ7UV
  MS8/>B[_?Z)E&EM;LEN3GGSM57M;YWJ99$R/79F9-VK;EEUVYT?$LN_M6QL9W
  MUF9NRMAQ:^/T-1__9^/T5J6EOJUO2^)RUD?<&4R5@<%\2Y>AK;=WV]%MW?:<
  MM[1)%RY*?:5ATO"'YR>$2<^HHZ.C-3'1TX_F'SMU*N*H/3OS,56PMLW(.;>Q
  MM&DUDRZ\*+@[.[O<7OX`N9SSY&G2A/6;BN3;MWZ3EY<;=M_JU?%$VBHVH^C:
  M]1+IM>+B*X4E-P.VAU7/ED_L_]QJ4:O')%AW:@JNY.2FSYZ]0YE>U==]P1%U
  M#C'^;D:QE)[[:"V;/GQV[YS3C]?YO6"/K+[W=7[KI^??]3[T^Z'IYVX_-NJS
  MCA<4Y(M$VSHE?^@"?/SC;W/@$YZD&L!'@8R2B`L*!<(FVR2$^&?P(1C:(H$&
  MRL8W`1?*`Q?Z*N#"Y7(G<`U<>=[PH_&-$Q_T,22^/B<L-'K\SY^US1MW>_$Y
  MF\^Q#0/W:;!8Y(3O_)"W>G0^<[905SA_Z)RQ@V'Q<)'/FMS%YQ?:/IB_(VI$
  M1C(2^>NL2T5KQG4S7$P?<?%Q"OQI]EL]EF26]+WXXNX7DU.4WRP:?+GS&:9/
  M_JR%SW\4Q?;)>)*]KFCTM93`[^>.SZ)767HDU5S"K)9$:;<Y7;><_O-^[]*[
  M)9O2+:,_FUYX.\K'?Z;BK=&'*XH7G3XY:=;J;5=C0Z=1X_PV$[^6OMYU1TS8
  MF9KLNRM#IG:6=WW3?]+(KC,"/96'NG7\=H&^_XU*'W2K=_&C=F4I"X8-<5_S
  MXMWP^XG(L_G:?<_[/K\Z:\_&@1[01]T7V9_X+U^Z:J7/&WO<\W=*RY=Y;9"4
  MFPYWF!L_]?AS_1>GCWKW//G[BKV;2G[*\5DZ9OVU*ZD=PJ\-6NM]Y"]C>7E!
  MI^O]O.5;AY9%%[@?G#!L[Y9>*Z(^T^17=_OJ\>(W=F\?\WCJL]PY(PI7ME_?
  M^<9/\E9AQP>,8];-*CIQ]:N*C2<7#[KZRY:]G<1[.O9?T/%6T+SNQ,D#'E>6
  M/QB(M&L7;7OP]JZ<?M*?#Y!OQ^V,^C5^3\+D$UVP"_?>&D.U6E*8$U)%SRI[
  MTJ=HYJGU/Z:HO@N@;JE"[Q9T3_(\5+A`O_"7?<=B4G:VC?KL_5:R,\1VP\XN
  M6WQ+2Q^5K_IB_2^VX5"KAZ-Z?ST@]<Z-K*\D*Z2?E'55_EAZ<?_*L+S]"0&7
  MO_S/><^_W4O[WPL2UA#^LH<-P;&^?A]"@NT%#>$P*21P('2N(<>P81M"-KL+
  M@9THG$())PJO'3D7F$/2,H5CO"K#7HG"8;DK"C<#"C\@VAOAQ."/+C\<,[*.
  MP4L>_+GX^][MTJ[>KMG]9BV#]_G]_\W@\Z3_Q.#7AGRTE3FZJN39AS?;IXUC
  MJCM5YDVHF/W<7L%>3I58)JS9=(DZN#NWEL$5GFD3#!E%1==_E$9>+9Y^]4HM
  M@3]_X+4Z(B@HCN/O&U=.]$P?5#%^XR"[?WM-X8,*MGWGX9*DL1<R%(DG/KW0
  MKOWETF<KNM<<F)7_=$8\6C5^MZ1D>-Q?#V%8)`HZG-Q-B#K:B>GJ`HR@)-X0
  MX1$CDXW@A,E8H!@FCM7[2QY\=T0"L1I_R31<"2N-04P\&YIJ8B:GCH]0IR:H
  M:8UD9`"8I0*K,])DE5$:Z\BL&0)H\^\?%#XNI#_W0+(B66?4,185E*S3ZLV*
  M9'^)8XH"7'-BF01R/&))\)=,5TZ$+`:#-H&U0*@?[8=($6P8%&L"Q6`UF!(@
  MQ(^0@"5-FEA%>'!(W8)@Y"^)MUB,"IG,:K7Z63$_@RE.!G:@M`Q&92@J!4](
  MS2EZBRI9JC>_*:F;QTYOF*8W^SEL\E,;=#)VN@SQ@V7UBNH+DS7H(6ZLBC$D
  M6OPE.$+B.*'"I1B*TU($80@I#'ZD2`S!P!I,A5)JNEZ3T<G")JK`#:`+`R$`
  M5XJ))H,F$1SG_26!(1/'06/B#69+K6Z(\L/E$MF_9Q%(EVN+P(U:[R%PI0`;
  M<#8V)1A4JK\$A6&P("%%T-I[08[/&P3W`D8TW#28(D`N`UPZ`W&O$DPSL0`P
  M(V3\&2-D/#?_5<>5RI9=U^EJO5<J%<$&=:(.,&=8\$MJ^1=3I%$WF&E,-&D=
  MF-:H98R6X2PR`U,18*=&K8@UF,#1"E25T0B87<7IY(`%,@%N6EB+E@EPV!2H
  MM=1>:%E.A4*KTL?Y2Y*E&B96!3A<$F`R,U*CSN*G26)K,Z!EZU+AF"IK7,Y%
  M?F1U1<E=-I1\@!CZEW[^O84:>0X0H[_$RK&8@"R=N+*^*GU=XG@PZ(0<<D$0
  MN%+P#59PM0`3"(K0.(&2X#XHHN9NU8'>%T3<:'[7-^'=P1#N1^,JJ/$P#>;@
  M4+A*XS@ZCTYAP/$YUF)5F1@P/8++AJ]3V@8WO'62;&)BQ3!$8V*XX0<B<!S#
  MH5C((0,]GZ1!7W;<T=?+:)Q[-;"I#"8(WG,P35$47\8]B_-E%,&]],I;C\(%
  M.E"$>]6AJ4R.P@(91O-U`!G)?;+#U\']JI8GHU&:[P<-RP5^4`3-LQE&2(+[
  M33S//I@0^D;3`EN`=[!`+PKS8P5TT+RXP"B.\^,,5D.Y4PO/%HP6R!"8.SKS
  M9`B""&S!"%*@E^#''L;D."*(*4HA`G]16)AS!!'Z`0I!@"N`/WZ.@%XY/WYR
  M3$X),(11_.>`#@P6Y`W!,+Z_-$W0_+C(,1SFVX)C*":,J5PNC+V<1`4Z*)SO
  M+U@/YS^'4Z30-P3'A/'#^76)P"YJ$*<H@1\`X:3`#PS'!'I)G!3J)7!A3`E*
  M(`.(YL<9Z.5S#F`A$A'Z2^("K"$D):QI#./[!M83R&C@G``;&(8+N(0@^=@`
  MSR&H(+\$4"W`/<W/)?=W$H4VHZ1<H!>AA/8A%"7D-1P6U"\@0`'6*(H08I*F
  M!'I1`5X`EQ"H(`:`#X2QPH3U1M!"WTA*J`-%4:&,0`0VHQ2?$T$^4"'O8H20
  MZS!:V`/DB-`^.4H)UJ-0V`FG%I,*G&M-CO=5)[.I#.BKD"S<8+!`CL\J(5F8
  M/M8`U;VH&Q8,S1B!(Z-"D-%$(`H*',='D2$H3,M#@@"5A<#!A#PPX)^?B!([
  M_EBFRF1Q-'/0FTD4$0\<.'I"B/C_`.==IP%XM`$`'XL(`````````V-@:&!F
  M8&#HJ*L25?Z]XW/_\P6B-O5_5D?^>,'&R,BC49!8DIRAD))8DJB)504C`P.0
  6!@##:A/410`````!E)<E6$1:,#`T)0``
  `
  end
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/rse-pmt.ps
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 rse-pmt.ps
  --- ossp-pkg/pth/rse-pmt.ps	18 Jun 2000 09:12:35 -0000	1.8
  +++ ossp-pkg/pth/rse-pmt.ps	12 Jun 2006 18:02:52 -0000	1.9
  @@ -1,17 +1,19 @@
   %!PS-Adobe-2.0
  -%%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software
  -%%Title: pmt.dvi
  +%%Creator: dvips(k) 5.95a Copyright 2005 Radical Eye Software
  +%%Title: rse-pmt.dvi
   %%Pages: 11
   %%PageOrder: Ascend
  -%%BoundingBox: 0 0 612 792
  +%%BoundingBox: 0 0 595 842
   %%DocumentFonts: Times-Bold Times-Roman Times-Italic Helvetica-Bold
  -%%+ Courier Times-BoldItalic Courier-Bold Courier-BoldOblique Helvetica
  +%%+ Courier CMSY9 Times-BoldItalic Courier-Bold Courier-BoldOblique
  +%%+ CMSY8 CMMI10 CMSY10 CMR10 Helvetica
  +%%DocumentPaperSizes: a4
   %%EndComments
   %DVIPSWebPage: (www.radicaleye.com)
  -%DVIPSCommandLine: dvips -t letter pmt.dvi
  -%DVIPSParameters: dpi=600, compressed
  -%DVIPSSource:  TeX output 2000.06.18:1110
  -%%BeginProcSet: texc.pro
  +%DVIPSCommandLine: dvips -o rse-pmt.ps rse-pmt.dvi
  +%DVIPSParameters: dpi=1200
  +%DVIPSSource:  TeX output 2006.06.12:1951
  +%%BeginProcSet: tex.pro 0 0
   %!
   /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
   N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
  @@ -30,22 +32,10 @@
   definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
   }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
   B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
  -1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3
  -1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx
  -0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx
  -sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{
  -rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp
  -gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B
  -/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{
  -/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{
  -A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy
  -get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse}
  -ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp
  -fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17
  -{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add
  -chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{
  -1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop}
  -forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
  +1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
  +/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
  +setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
  +restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
   /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
   }if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
   bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
  @@ -69,20 +59,25 @@
   rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
   
   %%EndProcSet
  -%%BeginProcSet: 8r.enc
  +%%BeginProcSet: 8r.enc 0 0
  +% File 8r.enc  TeX Base 1 Encoding  Revision 2.0  2002-10-30
  +%
   % @@psencodingfile@{
  -%   author = "S. Rahtz, P. MacKay, Alan Jeffrey, B. Horn, K. Berry",
  -%   version = "0.6",
  -%   date = "1 July 1998",
  -%   filename = "8r.enc",
  -%   email = "tex-fonts@@tug.org",
  -%   docstring = "Encoding for TrueType or Type 1 fonts
  -%                to be used with TeX."
  +%   author    = "S. Rahtz, P. MacKay, Alan Jeffrey, B. Horn, K. Berry,
  +%                W. Schmidt, P. Lehman",
  +%   version   = "2.0",
  +%   date      = "30 October 2002",
  +%   filename  = "8r.enc",
  +%   email     = "tex-fonts@@tug.org",
  +%   docstring = "This is the encoding vector for Type1 and TrueType
  +%                fonts to be used with TeX.  This file is part of the
  +%                PSNFSS bundle, version 9"
   % @}
   % 
  -% Idea is to have all the characters normally included in Type 1 fonts
  +% The idea is to have all the characters normally included in Type 1 fonts
   % available for typesetting. This is effectively the characters in Adobe
  -% Standard Encoding + ISO Latin 1 + extra characters from Lucida.
  +% Standard encoding, ISO Latin 1, Windows ANSI including the euro symbol,
  +% MacRoman, and some extra characters from Lucida.
   % 
   % Character code assignments were made as follows:
   % 
  @@ -100,76 +95,95 @@
   % (3) Y&Y Lucida Bright includes some extra text characters; in the
   % hopes that other PostScript fonts, perhaps created for public
   % consumption, will include them, they are included starting at 0x12.
  +% These are /dotlessj /ff /ffi /ffl.
   % 
  -% (4) Remaining positions left undefined are for use in (hopefully)
  -% upward-compatible revisions, if someday more characters are generally
  -% available.
  -% 
  -% (5) hyphen appears twice for compatibility with both 
  -% ASCII and Windows.
  -% 
  +% (4) hyphen appears twice for compatibility with both ASCII and Windows.
  +%
  +% (5) /Euro was assigned to 128, as in Windows ANSI
  +%
  +% (6) Missing characters from MacRoman encoding incorporated as follows:
  +%
  +%     PostScript      MacRoman        TeXBase1
  +%     --------------  --------------  --------------
  +%     /notequal       173             0x16
  +%     /infinity       176             0x17
  +%     /lessequal      178             0x18
  +%     /greaterequal   179             0x19
  +%     /partialdiff    182             0x1A
  +%     /summation      183             0x1B
  +%     /product        184             0x1C
  +%     /pi             185             0x1D
  +%     /integral       186             0x81
  +%     /Omega          189             0x8D
  +%     /radical        195             0x8E
  +%     /approxequal    197             0x8F
  +%     /Delta          198             0x9D
  +%     /lozenge        215             0x9E
  +%
   /TeXBase1Encoding [
  -% 0x00 (encoded characters from Adobe Standard not in Windows 3.1)
  -  /.notdef /dotaccent /fi /fl
  -  /fraction /hungarumlaut /Lslash /lslash
  -  /ogonek /ring /.notdef
  -  /breve /minus /.notdef 
  -% These are the only two remaining unencoded characters, so may as
  -% well include them.
  -  /Zcaron /zcaron 
  +% 0x00
  + /.notdef /dotaccent /fi /fl
  + /fraction /hungarumlaut /Lslash /lslash
  + /ogonek /ring /.notdef /breve
  + /minus /.notdef /Zcaron /zcaron
   % 0x10
  - /caron /dotlessi 
  -% (unusual TeX characters available in, e.g., Lucida Bright)
  - /dotlessj /ff /ffi /ffl 
  - /.notdef /.notdef /.notdef /.notdef
  - /.notdef /.notdef /.notdef /.notdef
  - % very contentious; it's so painful not having quoteleft and quoteright
  - % at 96 and 145 that we move the things normally found there to here.
  - /grave /quotesingle 
  -% 0x20 (ASCII begins)
  + /caron /dotlessi /dotlessj /ff
  + /ffi /ffl /notequal /infinity
  + /lessequal /greaterequal /partialdiff /summation
  + /product /pi /grave /quotesingle
  +% 0x20
    /space /exclam /quotedbl /numbersign
    /dollar /percent /ampersand /quoteright
  - /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash
  + /parenleft /parenright /asterisk /plus
  + /comma /hyphen /period /slash
   % 0x30
  - /zero /one /two /three /four /five /six /seven
  - /eight /nine /colon /semicolon /less /equal /greater /question
  + /zero /one /two /three
  + /four /five /six /seven
  + /eight /nine /colon /semicolon
  + /less /equal /greater /question
   % 0x40
  - /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O
  + /at /A /B /C
  + /D /E /F /G
  + /H /I /J /K
  + /L /M /N /O
   % 0x50
  - /P /Q /R /S /T /U /V /W
  - /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
  + /P /Q /R /S
  + /T /U /V /W
  + /X /Y /Z /bracketleft
  + /backslash /bracketright /asciicircum /underscore
   % 0x60
  - /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o
  + /quoteleft /a /b /c
  + /d /e /f /g
  + /h /i /j /k
  + /l /m /n /o
   % 0x70
  - /p /q /r /s /t /u /v /w
  - /x /y /z /braceleft /bar /braceright /asciitilde
  - /.notdef % rubout; ASCII ends
  + /p /q /r /s
  + /t /u /v /w
  + /x /y /z /braceleft
  + /bar /braceright /asciitilde /.notdef
   % 0x80
  - /.notdef /.notdef /quotesinglbase /florin
  + /Euro /integral /quotesinglbase /florin
    /quotedblbase /ellipsis /dagger /daggerdbl
    /circumflex /perthousand /Scaron /guilsinglleft
  - /OE /.notdef /.notdef /.notdef
  + /OE /Omega /radical /approxequal
   % 0x90
    /.notdef /.notdef /.notdef /quotedblleft
    /quotedblright /bullet /endash /emdash
    /tilde /trademark /scaron /guilsinglright
  - /oe /.notdef /.notdef /Ydieresis
  + /oe /Delta /lozenge /Ydieresis
   % 0xA0
  - /.notdef % nobreakspace
  - /exclamdown /cent /sterling
  + /.notdef /exclamdown /cent /sterling
    /currency /yen /brokenbar /section
    /dieresis /copyright /ordfeminine /guillemotleft
  - /logicalnot
  - /hyphen % Y&Y (also at 45); Windows' softhyphen
  - /registered
  - /macron
  + /logicalnot /hyphen /registered /macron
   % 0xD0
    /degree /plusminus /twosuperior /threesuperior
    /acute /mu /paragraph /periodcentered
    /cedilla /onesuperior /ordmasculine /guillemotright
    /onequarter /onehalf /threequarters /questiondown
   % 0xC0
  - /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
  + /Agrave /Aacute /Acircumflex /Atilde
  + /Adieresis /Aring /AE /Ccedilla
    /Egrave /Eacute /Ecircumflex /Edieresis
    /Igrave /Iacute /Icircumflex /Idieresis
   % 0xD0
  @@ -189,24 +203,26 @@
    /udieresis /yacute /thorn /ydieresis
   ] def
   
  +
   %%EndProcSet
  -%%BeginProcSet: texps.pro
  +%%BeginProcSet: texps.pro 0 0
   %!
   TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
   index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
  -exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]/Metrics
  -exch def dict begin Encoding{exch dup type/integertype ne{pop pop 1 sub
  -dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}
  -ifelse}forall Metrics/Metrics currentdict end def[2 index currentdict
  -end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{
  -dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1
  -roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def
  -dup[exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}
  -if}forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}
  -def end
  +exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0
  +ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{
  +pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get
  +div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type
  +/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end
  +definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup
  +sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll
  +mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[
  +exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if}
  +forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def
  +end
   
   %%EndProcSet
  -%%BeginProcSet: special.pro
  +%%BeginProcSet: special.pro 0 0
   %!
   TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N
   /vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N
  @@ -243,28 +259,29 @@
   /psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x
   psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx
   psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub
  -TR/showpage{}N/erasepage{}N/copypage{}N/p 3 def @MacSetUp}N/doclip{
  -psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2
  -roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath
  -moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict
  -begin/SpecialSave save N gsave normalscale currentpoint TR
  -@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{
  -CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto
  -closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx
  -sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR
  -}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse
  -CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury
  -lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N
  -/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end}
  -repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N
  -/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX
  -currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY
  -moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X
  -/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0
  -1 startangle endangle arc savematrix setmatrix}N end
  +TR/showpage{}N/erasepage{}N/setpagedevice{pop}N/copypage{}N/p 3 def
  +@MacSetUp}N/doclip{psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll
  +newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto
  +closepath clip newpath moveto}N/endTexFig{end psf$SavedState restore}N
  +/@beginspecial{SDict begin/SpecialSave save N gsave normalscale
  +currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N}
  +N/@setspecial{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs
  +neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate
  +rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup}ifelse
  +scale llx neg lly neg TR}{rhiSeen{rhi ury lly sub div dup scale llx neg
  +lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx
  +ury lineto llx ury lineto closepath clip}if/showpage{}N/erasepage{}N
  +/setpagedevice{pop}N/copypage{}N newpath}N/@endspecial{count ocount sub{
  +pop}repeat countdictstack dcount sub{end}repeat grestore SpecialSave
  +restore end}N/@defspecial{SDict begin}N/@fedspecial{end}B/li{lineto}B
  +/rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1
  +setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY
  +moveto}N/ellipse{/endangle X/startangle X/yrad X/xrad X/savematrix
  +matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc
  +savematrix setmatrix}N end
   
   %%EndProcSet
  -%%BeginProcSet: color.pro
  +%%BeginProcSet: color.pro 0 0
   %!
   TeXDict begin/setcmykcolor where{pop}{/setcmykcolor{dup 10 eq{pop
   setrgbcolor}{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll
  @@ -313,1003 +330,1348 @@
   setcmykcolor}DC/White{0 0 0 0 setcmykcolor}DC end
   
   %%EndProcSet
  -TeXDict begin 40258431 52099146 1000 600 600 (pmt.dvi)
  -@start /Fa 165[37 43 1[56 43 43 37 33 40 43 33 43 43
  -53 37 43 23 20 43 43 33 37 43 40 40 43 65[{
  -TeXBase1Encoding ReEncodeFont}25 59.7758 /Times-Roman
  -rf /Fb 140[37 25 12[42 101[{TeXBase1Encoding ReEncodeFont}3
  -74.7198 /Helvetica rf
  -%DVIPSBitmapFont: Fc cmr10 10 2
  -/Fc 2 51 df<15301578B3A6007FB812F8B912FCA26C17F8C80078C8FCB3A6153036367B
  -AF41>43 D<EB0FF0EB7FFE48B57E3903E03FC03907000FE0000E6D7E00186D7E00386D7E
  -00308048130081007C80B41580A27FA36CC7FCA2121CC81300A25D5DA24A5AA24A5A5D4A
  -5A4A5A5D4AC7FC143E5C5C5C495A495A49C8FC130E49EB01805B5B491303491400485A48
  -C7FC00065C000FB6FC5A5A485CB6FCA321387CB72A>50 D E
  -%EndDVIPSBitmapFont
  -%DVIPSBitmapFont: Fd cmsy10 10 1
  -/Fd 1 3 df<0060150600F0150F6C151F007C153E6C157C6C15F86C6CEB01F06C6CEB03
  -E06C6CEB07C06C6CEB0F806C6CEB1F00017C133E6D5B6D5B90380F81F0903807C3E09038
  -03E7C06DB45A6D90C7FC147EA214FF497F903803E7C0903807C3E090380F81F049C67E01
  -3E137C497F497F4848EB0F804848EB07C04848EB03E04848EB01F048C812F8003E157C48
  -153E48151F48150F00601506282874A841>2 D E
  -%EndDVIPSBitmapFont
  -%DVIPSBitmapFont: Fe cmmi10 10 2
  -/Fe 2 79 df<1760177017F01601A21603A21607160FA24C7EA216331673166316C3A2ED
  -0183A2ED0303150683150C160115181530A21560A215C014011580DA03007FA202061300
  -140E140C5C021FB5FC5CA20260C7FC5C83495A8349C8FC1306A25BA25B13381330017016
  -80EA01F0D807F815FF267FFF80013F13FEB516FF18FE383C7DBB3E>65
  -D<902603FFF891381FFFF8495E6D6D80D90007030113006FEC007802061670814A6C1560
  -A26F7EA202186D5C151FA26F7E02304B5A6F7EA282DA60034AC7FCA26F7EA24A6C6C1306
  -A2828249485DEE3F80A217C049C7001F5B17E0160FA201066E6C5AA217F81603495EEE01
  -FCA2EE00FE495E17FF177FA2496F5AA2171F137095C8FC01F081EA07FC267FFFC080B56C
  -14064A140245397DB843>78 D E
  -%EndDVIPSBitmapFont
  -%DVIPSBitmapFont: Ff cmsy8 8 1
  -/Ff 1 3 df<006015C000E01401007014030078EC07806CEC0F006C141E6C5C6C6C5B6C
  -6C5B6C6C485A6C6C485A90387807806D48C7FCEB1E1E6D5AEB07F86D5A6D5A497E497EEB
  -0F3CEB1E1E497E496C7E496C7E48486C7E48486C7E4848137848C77E001E80488048EC07
  -800070EC03C048140100601400222376A137>2 D E
  -%EndDVIPSBitmapFont
  -/Fg 135[45 3[45 6[45 9[45 99[{TeXBase1Encoding ReEncodeFont}4
  -74.7198 /Courier-BoldOblique rf /Fh 135[40 40 2[40 40
  -2[40 40 40 40 40 40 40 40 40 40 1[40 1[40 1[40 12[40
  -1[40 1[40 40 40 4[40 1[40 25[40 45[{TeXBase1Encoding ReEncodeFont}25
  -66.4176 /Courier rf /Fi 133[45 45 1[45 45 45 45 45 45
  -1[45 45 45 1[45 2[45 45 1[45 45 45 45 1[45 1[45 59[45
  -35[{TeXBase1Encoding ReEncodeFont}21 74.7198 /Courier-Bold
  -rf /Fj 133[29 33 37 50 33 42 21 29 29 1[37 37 42 58 21
  -37 21 21 42 37 25 33 37 33 37 37 25 11[46 42 24[25 37
  -37 37 37 37 37 37 37 37 37 1[19 6[25 58 35[42 2[{
  -TeXBase1Encoding ReEncodeFont}43 74.7198 /Times-BoldItalic
  -rf /Fk 103[45 29[45 45 45 45 45 45 45 45 45 1[45 45 45
  -45 45 45 45 45 45 45 45 45 45 45 45 45 1[45 9[45 45 45
  -45 2[45 45 45 45 45 1[45 45 45 45 45 45 45 45 45 2[45
  -45 1[45 9[45 45 45 45 45 45 1[45 45 45 1[45 4[45 33[{
  -TeXBase1Encoding ReEncodeFont}59 74.7198 /Courier rf
  -/Fl 135[29 3[18 1[26 1[33 33 33 48 18 29 1[18 33 2[29
  -1[29 1[33 11[48 1[33 2[41 1[44 55 5[48 3[44 41 19[17
  -46[{TeXBase1Encoding ReEncodeFont}23 66.4176 /Times-Italic
  -rf /Fm 134[33 33 48 33 33 18 26 22 1[33 33 33 52 18 33
  -18 18 33 33 22 29 33 29 33 29 3[22 1[22 2[48 63 48 48
  -41 37 44 1[37 48 48 59 41 48 1[22 48 48 37 41 48 44 44
  -48 6[18 33 33 33 33 33 33 33 33 33 33 18 17 22 17 2[22
  -22 37[37 2[{TeXBase1Encoding ReEncodeFont}66 66.4176
  -/Times-Roman rf /Fn 134[33 33 48 33 37 22 26 29 1[37
  -33 37 55 18 1[22 18 37 33 22 29 37 29 37 33 12[44 37
  -2[41 52 8[41 4[48 6[22 33 33 3[33 33 33 33 33 1[17 4[22
  -22 40[{TeXBase1Encoding ReEncodeFont}40 66.4176 /Times-Bold
  -rf
  -%DVIPSBitmapFont: Fo cmsy9 9 4
  -/Fo 4 111 df<126012F812FEEA7F80EA1FE0EA07F8EA01FE38007F80EB1FE0EB07F8EB
  -01FE9038007FC0EC1FF0EC07FCEC01FF9138003FC0ED0FF0ED03FCED00FFEE3FC0EE0FF0
  -EE03FCEE00FEA2EE03FCEE0FF0EE3FC0EEFF00ED03FCED0FF0ED3FC003FFC7FCEC07FCEC
  -1FF0EC7FC04948C8FCEB07F8EB1FE0EB7F80D801FEC9FCEA07F8EA1FE0EA7F8000FECAFC
  -12F81260CBFCAC007FB712FCB812FEA26C16FC2F3E7AB03C>21 D<EC07E0143FECFE00EB
  -01F8EB03E0495A130F495AB3A649C7FCA2137E5BEA03F8EA7FE048C8FCEA7FE0EA03F8C6
  -7E137E7FA26D7EB3A66D7E13076D7EEB01F8EB00FEEC3FE014071B4B7BB726>102
  -D<127CEAFFC0EA07F0EA01F8EA007C7F133F6D7EB3A66D7EA26D7E6D7E6D7E9038007FC0
  -EC1FE0EC7FC0903801F800495A495A495AA2495AB3A649C7FC133E5B485AEA07F0EAFFC0
  -007CC8FC1B4B7BB726>I<126012F0A21278A37EA37EA37EA36C7EA36C7EA26C7EA36C7E
  -A31378A37FA37FA37FA36D7EA26D7EA36D7EA36D7EA31478A380A380A280A3EC0780A3EC
  -03C0A3EC01E0A3EC00F0A31578A215301D4B7CB726>110 D E
  -%EndDVIPSBitmapFont
  -/Fp 135[50 50 50 50 50 50 50 1[50 50 50 50 50 50 50 50
  -50 50 50 50 50 50 50 50 7[50 1[50 50 50 50 50 50 1[50
  -50 50 2[50 1[50 50 50 1[50 1[50 1[50 12[50 2[50 2[50
  -50 50 1[50 50 50 4[50 35[{TeXBase1Encoding ReEncodeFont}49
  -83.022 /Courier rf /Fq 133[37 3[42 1[28 32 3[42 5[23
  -3[37 46 21[60 78 18[28 8[42 5[47 42 28 28 40[{
  -TeXBase1Encoding ReEncodeFont}16 83.022 /Times-Bold rf
  -/Fr 133[32 37 37 55 37 42 23 32 32 1[42 42 42 60 23 37
  -1[23 42 42 23 37 42 37 42 42 8[51 1[51 60 46 42 51 1[51
  -60 55 69 46 2[28 1[60 51 51 60 55 51 51 3[56 2[28 42
  -42 1[42 42 42 1[42 42 1[23 21 28 42[42 2[{TeXBase1Encoding ReEncodeFont}
  -56 83.022 /Times-Italic rf /Fs 134[60 3[66 40 47 53 1[66
  -60 66 100 33 2[33 2[40 53 66 53 66 60 14[86 1[73 6[47
  -7[86 13[60 60 60 49[{TeXBase1Encoding ReEncodeFont}24
  -119.552 /Times-Bold rf /Ft 134[42 1[58 1[46 1[42 29 2[46
  -46 1[21 2[21 46 46 1[42 46 1[46 17[50 4[54 16[25 58[{
  -TeXBase1Encoding ReEncodeFont}17 74.7198 /Helvetica-Bold
  -rf /Fu 134[33 33 50 33 37 21 29 29 37 37 37 37 54 21
  -33 1[21 37 37 21 33 37 33 37 37 8[46 62 46 54 42 37 46
  -54 46 54 50 62 42 2[25 1[54 46 46 54 50 46 46 5[25 25
  -5[37 37 37 37 37 1[19 25 19 4[25 36[37 2[{TeXBase1Encoding ReEncodeFont}
  -57 74.7198 /Times-Italic rf /Fv 133[33 37 37 54 37 37
  -21 29 25 37 37 37 37 58 21 37 21 21 37 37 25 33 37 33
  -37 33 3[25 1[25 2[54 71 54 54 46 42 50 54 42 54 54 66
  -46 54 29 25 54 54 42 46 54 50 50 54 5[21 21 37 37 37
  -37 37 37 37 37 37 37 21 19 25 19 42 1[25 25 25 58 34[42
  -42 2[{TeXBase1Encoding ReEncodeFont}75 74.7198 /Times-Roman
  -rf /Fw 134[37 37 1[37 42 25 29 33 1[42 37 42 62 21 42
  -1[21 42 37 1[33 42 33 42 37 9[75 54 1[50 42 2[46 58 54
  -71 50 2[29 1[58 1[50 54 54 1[54 18[19 46[{TeXBase1Encoding ReEncodeFont}
  -37 74.7198 /Times-Bold rf /Fx 104[83 42 1[37 37 24[37
  -42 42 60 42 42 23 32 28 42 42 42 42 65 23 42 23 23 42
  -42 28 37 42 37 42 37 3[28 1[28 2[60 78 60 60 51 46 55
  -1[46 60 60 74 51 60 1[28 60 60 46 51 60 55 55 60 76 37
  -4[23 42 42 42 42 42 42 42 42 42 42 23 21 28 21 2[28 28
  -28 5[28 29[46 46 2[{TeXBase1Encoding ReEncodeFont}77
  -83.022 /Times-Roman rf /Fy 87[33 49[44 50 28 39 39 3[50
  -4[28 50 2[44 1[44 1[50 11[72 55 6[83 35[33 33 40[{
  -TeXBase1Encoding ReEncodeFont}17 99.6264 /Times-Italic
  -rf /Fz 140[39 4[50 1[28 3[50 50 33 44 1[44 1[44 13[55
  -66 12[61 22[25 46[{TeXBase1Encoding ReEncodeFont}13 99.6264
  -/Times-Roman rf /FA 134[50 50 72 50 55 33 39 44 1[55
  -50 55 83 28 55 33 28 55 50 33 44 55 44 55 50 9[100 1[72
  -66 55 72 1[61 78 1[94 1[78 1[39 78 78 61 66 72 72 66
  -72 8[50 50 50 50 50 50 50 50 2[25 33 3[33 33 1[83 34[55
  -55 2[{TeXBase1Encoding ReEncodeFont}57 99.6264 /Times-Bold
  -rf /FB 138[96 57 1[76 2[86 96 1[48 2[48 96 86 1[76 96
  -1[96 86 16[105 2[163 77[{TeXBase1Encoding ReEncodeFont}15
  -172.188 /Times-Bold rf end
  +%%BeginFont: CMR10
  +%!PS-AdobeFont-1.1: CMR10 1.00B
  +%%CreationDate: 1992 Feb 19 19:54:52
  +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
  +11 dict begin
  +/FontInfo 7 dict dup begin
  +/version (1.00B) readonly def
  +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
  +/FullName (CMR10) readonly def
  +/FamilyName (Computer Modern) readonly def
  +/Weight (Medium) readonly def
  +/ItalicAngle 0 def
  +/isFixedPitch false def
  +end readonly def
  +/FontName /CMR10 def
  +/PaintType 0 def
  +/FontType 1 def
  +/FontMatrix [0.001 0 0 0.001 0 0] readonly def
  +/Encoding 256 array
  +0 1 255 {1 index exch /.notdef put} for
  +dup 43 /plus put
  +dup 50 /two put
  +readonly def
  +/FontBBox{-251 -250 1009 969}readonly def
  +currentdict end
  +currentfile eexec
  +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
  +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
  +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
  +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
  +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
  +2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4
  +87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F
  +D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0
  +92A36FAC8D27F9087AFEEA2096F839A2BC4B937F24E080EF7C0F9374A18D565C
  +295A05210DB96A23175AC59A9BD0147A310EF49C551A417E0A22703F94FF7B75
  +409A5D417DA6730A69E310FA6A4229FC7E4F620B0FC4C63C50E99E179EB51E4C
  +4BC45217722F1E8E40F1E1428E792EAFE05C5A50D38C52114DFCD24D54027CBF
  +2512DD116F0463DE4052A7AD53B641A27E81E481947884CE35661B49153FA19E
  +0A2A860C7B61558671303DE6AE06A80E4E450E17067676E6BBB42A9A24ACBC3E
  +B0CA7B7A3BFEA84FED39CCFB6D545BB2BCC49E5E16976407AB9D94556CD4F008
  +24EF579B6800B6DC3AAF840B3FC6822872368E3B4274DD06CA36AF8F6346C11B
  +43C772CC242F3B212C4BD7018D71A1A74C9A94ED0093A5FB6557F4E0751047AF
  +D72098ECA301B8AE68110F983796E581F106144951DF5B750432A230FDA3B575
  +5A38B5E7972AABC12306A01A99FCF8189D71B8DBF49550BAEA9CF1B97CBFC7CC
  +96498ECC938B1A1710B670657DE923A659DB8757147B140A48067328E7E3F9C3
  +7D1888B284904301450CE0BC15EEEA00E48CCD6388F3FC3C8578EF9A20A0E06E
  +4F7ADDAF0E7D1E182D115BF1AD931977325AD391E72E2B13CC108E3726C11099
  +E2000623188AAAC9F3E233EB253BDD8B0A4759A66A113E066238B0086AC1B634
  +5ABFF90E4B5ED3FA69C22541981B2BFC9710AEF6B50A8BB53431C7B4D380D721
  +639E005D6B4688EE16BFF48443E7C9E5FB5BC5883E271CB034289232A0694CCE
  +12A5A2637485FB47BC281A2129E040DE629890E13430C788F3860C1EC52C8DE4
  +581DE90A40BF466BD3EFF7D03E7B33CF5DF9BD038D5E27602FC07D387B1115BF
  +843776E976022FA3DDDB1132F32935428D0B14D9F2835F2E774363ECA0E7BA0B
  +D9B4A0083A8D751A82644167C763874FB86DAB03BDECC3EEC2243CCDB104DD94
  +24FC1731E5C449F475E53B73D92814059370688B9E8252D0402188058A8214B1
  +9D409DD944A2F2EA0BF8559353B2F7690C0C23386C54B813FD74D541BD12A6BC
  +167FC46065D5EC82F71315F8BD967DB8272042F5D9818E7A0F616870A39B7071
  +29E50828BA48B9D82755F09DA2B6F56C414AF14B7CBD6BE39AFCF681709D2471
  +652FB14F114FDA3F8141CABABE595D1DD69D1C4A9AE8F491BD3D7DE3B8F7C3ED
  +9759358B5EBE0C8B3402A9A2025A82639708D9596A8087ED8F601A152A518A37
  +A6D73278AF9A487F55091DBB148299C853FA5012A3C4522B206B89356C0F6067
  +0BA3EE71F3B36B7EE3E5AFDD3224E93A8BAD1F64E272417647158942C682700C
  +3BC5E0995E2EE30DB8BF9469F0995FAF1A82
  +0000000000000000000000000000000000000000000000000000000000000000
  +0000000000000000000000000000000000000000000000000000000000000000
  +0000000000000000000000000000000000000000000000000000000000000000
  +0000000000000000000000000000000000000000000000000000000000000000
  +0000000000000000000000000000000000000000000000000000000000000000
  +0000000000000000000000000000000000000000000000000000000000000000
  +0000000000000000000000000000000000000000000000000000000000000000
  +0000000000000000000000000000000000000000000000000000000000000000
  +cleartomark
  +%%EndFont 
  +%%BeginFont: CMSY10
  +%!PS-AdobeFont-1.1: CMSY10 1.0
  +%%CreationDate: 1991 Aug 15 07:20:57
  +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
  +11 dict begin
  +/FontInfo 7 dict dup begin
  +/version (1.0) readonly def
  +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
  +/FullName (CMSY10) readonly def
  +/FamilyName (Computer Modern) readonly def
  +/Weight (Medium) readonly def
  +/ItalicAngle -14.035 def
  +/isFixedPitch false def
  +end readonly def
  +/FontName /CMSY10 def
  +/PaintType 0 def
  +/FontType 1 def
  +/FontMatrix [0.001 0 0 0.001 0 0] readonly def
  +/Encoding 256 array
  +0 1 255 {1 index exch /.notdef put} for
  +dup 2 /multiply put
  +readonly def
  +/FontBBox{-29 -960 1116 775}readonly def
  +currentdict end
  +currentfile eexec
  +D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
  +7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
  +A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
  +E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
  +221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A
  +27D1663E0B62F461F6E40A5D6676D1D12B51E641C1D4E8E2771864FC104F8CBF
  +5B78EC1D88228725F1C453A678F58A7E1B7BD7CA700717D288EB8DA1F57C4F09
  +0ABF1D42C5DDD0C384C7E22F8F8047BE1D4C1CC8E33368FB1AC82B4E96146730
  +DE3302B2E6B819CB6AE455B1AF3187FFE8071AA57EF8A6616B9CB7941D44EC7A
  +71A7BB3DF755178D7D2E4BB69859EFA4BBC30BD6BB1531133FD4D9438FF99F09
  +4ECC068A324D75B5F696B8688EEB2F17E5ED34CCD6D047A4E3806D000C199D7C
  +515DB70A8D4F6146FE068DC1E5DE8BC5703711DA090312BA3FC00A08C453C609
  +C627A8B149D71F3155BFBF5A359E54EFE40EB6AAF7344F336BBDFA5241D39DFD
  +19DFE4F1B56DCAAEA84D9290E81FFAD8472517CB517C9F8D04EAF8E87A58341D
  +57386FF17BF29235356C3F85FE85CCB75DFBD407A6B76C198356415768FE0D58
  +0F0E0665E6B2EFC269256FCE0146C415E35D900293555D8B6CB2AA451586E477
  +93461FAF0803AE54B9FEE351771B08F9F7D564B5F50CB4E660298DECF4DC0F67
  +0A4DA5738D89F708019CDFF9443964830B406748B60EF34EA35EDA7DF1C05A1E
  +A385C5DE4B171FCD735AA0C41E54B09D133E48FCAA3A75F1B05C2AD4CD792534
  +4160FCF0C48076AD3174E1A970FD9A285EB251E016B2739E373B43F17A1D50BC
  +02FB2383DACFF35A5503EE8D0C8147908BFF5FA0D9D06F243AA8B4FFFCD8FF4E
  +ED02BC
  +0000000000000000000000000000000000000000000000000000000000000000
  +0000000000000000000000000000000000000000000000000000000000000000
  +0000000000000000000000000000000000000000000000000000000000000000
  +0000000000000000000000000000000000000000000000000000000000000000
  +0000000000000000000000000000000000000000000000000000000000000000
  +0000000000000000000000000000000000000000000000000000000000000000
  +0000000000000000000000000000000000000000000000000000000000000000
  +0000000000000000000000000000000000000000000000000000000000000000
  +cleartomark
  +%%EndFont 
  +%%BeginFont: CMMI10
  +%!PS-AdobeFont-1.1: CMMI10 1.100
  +%%CreationDate: 1996 Jul 23 07:53:57
  +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
  +11 dict begin
  +/FontInfo 7 dict dup begin
  +/version (1.100) readonly def
  +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
  +/FullName (CMMI10) readonly def
  +/FamilyName (Computer Modern) readonly def
  +/Weight (Medium) readonly def
  +/ItalicAngle -14.04 def
  +/isFixedPitch false def
  +end readonly def
  +/FontName /CMMI10 def
  +/PaintType 0 def
  +/FontType 1 def
  +/FontMatrix [0.001 0 0 0.001 0 0] readonly def
  +/Encoding 256 array
  +0 1 255 {1 index exch /.notdef put} for
  +dup 65 /A put
  +dup 78 /N put
  +readonly def
  +/FontBBox{-32 -250 1048 750}readonly def
  +currentdict end
  +currentfile eexec
  +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
  +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
  +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
  +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
  +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
  +D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
  +9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321
  +990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E
  +6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB
  +DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721
  +59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823
  +D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF
  +8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808
  +6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9
  +1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE
  +03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909
  +95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1
  +74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2
  +3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8
  +47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19
  +AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8
  +42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8
  +40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837
  +B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53
  +95601766777978D01677B8D19E1B10A078432D2884BB6250F980A231AC216383
  +1FD449E6C47B12C66F68D19F77E672D207E4454D4FE979040A5CF8D0F31FFB88
  +13B824C3B5675933EDB05D3EC1687024F38F3B9480096C8CC3EE5E51CF75AF22
  +92119E844810F5AC882300FFEA881FD9AF30B3641171C15D4B40C088C7A480C4
  +F0168D1AF719EED16E7F34DFE59E505E5FAAD4DD1E30918D3C06CA3C03CD6A0A
  +AC440A7238E59139C4338BC398EAC55D68593D60981A5FA1DD2222D78164340F
  +C25F5DF2D37EFC9E90F29B44C626410F740734D57C9E463156B7656BB48F8785
  +18DF94463376E831A865D0A529AB562572F3B37E65CCF7715C1E69DBDE368CE6
  +5F25C19753DB0D9F25243B703FC683ACC9E35B6643ADC727183649C2EC1927D1
  +129B93DB94672FA19C9613EAD3B19579B8824BD0D86AD70D89002D44D8328072
  +BFAE543FCF6BD9A3008DAE7E8E9393EA1672F420FE2E1EF2C49B3532A2642A75
  +5E1C88B645E99840EBD742881CB6844BA155BD73FDDB923D73895EE2703514C1
  +5F90371E51BC6A3B252072591921AD07155E1837DFACD9DC3154BBB63DE6FAB4
  +1867218FE229C1676867B720ED9AFE1C0070DCC3647B01475464C3B8E8414050
  +488CB48C1A123A49CC016DF43EE649BAE5E00C37DABD7653BC8A18F79F31B926
  +F0859F043831331AB3DBFB4DC923454C09C29C8049BFBA71BD7FE5EA5B1DFA4C
  +736D775FDF529F6F99785219D4298E9823771433504E2AA8B0A92EB7D9F433C5
  +D6406B17D9C03F4DB0277ED4001E1E3D1A537AABB336F651
  +0000000000000000000000000000000000000000000000000000000000000000
  +0000000000000000000000000000000000000000000000000000000000000000
  +0000000000000000000000000000000000000000000000000000000000000000
  +0000000000000000000000000000000000000000000000000000000000000000
  +0000000000000000000000000000000000000000000000000000000000000000
  +0000000000000000000000000000000000000000000000000000000000000000
  +0000000000000000000000000000000000000000000000000000000000000000
  +0000000000000000000000000000000000000000000000000000000000000000
  +cleartomark
  +%%EndFont 
  +%%BeginFont: CMSY8
  +%!PS-AdobeFont-1.1: CMSY8 1.0
  +%%CreationDate: 1991 Aug 15 07:22:10
  +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
  +11 dict begin
  +/FontInfo 7 dict dup begin
  +/version (1.0) readonly def
  +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
  +/FullName (CMSY8) readonly def
  +/FamilyName (Computer Modern) readonly def
  +/Weight (Medium) readonly def
  +/ItalicAngle -14.035 def
  +/isFixedPitch false def
  +end readonly def
  +/FontName /CMSY8 def
  +/PaintType 0 def
  +/FontType 1 def
  +/FontMatrix [0.001 0 0 0.001 0 0] readonly def
  +/Encoding 256 array
  +0 1 255 {1 index exch /.notdef put} for
  +dup 2 /multiply put
  +readonly def
  +/FontBBox{-30 -955 1185 779}readonly def
  +currentdict end
  +currentfile eexec
  +D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
  +7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
  +A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
  +E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
  +221A37D9A807DD01161779DDE7D5FC1B2109839E5B52DFBB2A7C1B5D8E7E8AA0
  +5B10EA43D6A8ED61AF5B23D49920D8F79DAB6A59062134D84AC0100187A6CD1F
  +80F5DDD9D222ACB1C23326A7656A635C4A241CCD32CBFDF8363206B8AA36E107
  +1477F5496111E055C7491002AFF272E46ECC46422F0380D093284870022523FB
  +DA1716CC4F2E2CCAD5F173FCBE6EDDB874AD255CD5E5C0F86214393FCB5F5C20
  +9C3C2BB5886E36FC3CCC21483C3AC193485A46E9D22BD7201894E4D45ADD9BF1
  +CC5CF6A5010B5654AC0BE0DA903DB563B13840BA3015F72E51E3BC80156388BA
  +F83C7D393392BCBC227771CDCB976E93302531886DDA73EBC9178917EFD0C20B
  +133F1E59A6DB3811BD410DC83AA75BE26D4E754A02DD0075D7A793D8C4B499A2
  +BC8E8A5316CB716ADB46D95C7B12CA61DD83222233C8DDFA7CDE7D9A6ADE5D37
  +DCAD7CA36C274C9844CCFFEDA502BBBDB60FAE578D00B89137526796A1EBEAE8
  +F896D9A1F6DA099B80ABF69047F70A59D086D90DEE48A18606D68FF1B98B671E
  +AED376EEE1EB099004C5343B1D473F845D60C9BCDBB19DA77E0DDDB032052DDB
  +48629F27A39B5CC68A4A2A285D09356A9BC085EF39D03B96F073FFF0F63AEDDE
  +0CA7918F4534E6DDC108A93CAEFA2775CB07C30D5D5A108FBBDC5E909F110BB6
  +89474C11CD76FBC6E9CDA58775C49840E2903429597CBA68253CC92E62FDB847
  +1D8D9A975D2D7B6E2DD6F3B68F6562C54D091FC926FE5410DE5D9A8C0A73AB17
  +333450D9
  +0000000000000000000000000000000000000000000000000000000000000000
  +0000000000000000000000000000000000000000000000000000000000000000
  +0000000000000000000000000000000000000000000000000000000000000000
  +0000000000000000000000000000000000000000000000000000000000000000
  +0000000000000000000000000000000000000000000000000000000000000000
  +0000000000000000000000000000000000000000000000000000000000000000
  +0000000000000000000000000000000000000000000000000000000000000000
  +0000000000000000000000000000000000000000000000000000000000000000
  +cleartomark
  +%%EndFont 
  +%%BeginFont: CMSY9
  +%!PS-AdobeFont-1.1: CMSY9 1.0
  +%%CreationDate: 1991 Aug 15 07:22:27
  +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
  +11 dict begin
  +/FontInfo 7 dict dup begin
  +/version (1.0) readonly def
  +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
  +/FullName (CMSY9) readonly def
  +/FamilyName (Computer Modern) readonly def
  +/Weight (Medium) readonly def
  +/ItalicAngle -14.035 def
  +/isFixedPitch false def
  +end readonly def
  +/FontName /CMSY9 def
  +/PaintType 0 def
  +/FontType 1 def
  +/FontMatrix [0.001 0 0 0.001 0 0] readonly def
  +/Encoding 256 array
  +0 1 255 {1 index exch /.notdef put} for
  +dup 21 /greaterequal put
  +dup 102 /braceleft put
  +dup 103 /braceright put
  +dup 110 /backslash put
  +readonly def
  +/FontBBox{-30 -958 1146 777}readonly def
  +currentdict end
  +currentfile eexec
  +D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
  +7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
  +A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
  +E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
  +221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A
  +27D1663E0B62F461F6E40A5D6676D0037D33F24E2FAC2B0009AD3C8350CDF8CC
  +65BCA87979C36D14CB552E9A985E48BE4E88ECA16DF418749AF04FDD2B0E1380
  +D281BB2476BB45FF30946B247DFD7F57305FA87E50CA338121C71CDFDF927A9C
  +77FF14CB4A1D6D80356FB1171ED38C37702350497B44E42CE31DB2F493807DAA
  +15B887C671199A54C4C1294BC520F5538C15556BC43C9F62342B121C6DCD6C5F
  +491DA47FF360201EE21C08A781ED0589A6DF91B99FE118B9B29E4F068672E52F
  +1A06C514D91C4C937D4E642503392B1CD1B984B04B674C2977A634F63B35677E
  +9196FFC0F57806BBA111603CDED14B3FD9D537343B83693A57CE39EF70A3F289
  +CAA584C8ADC703D35922D286242575D4A249B19BBF483DF303D802B5D2FA278F
  +BA6E3C852733048FD342AE39CCC9F4D8809C846471E751597EBD521EFE368858
  +ADC4CA646D35FF65C797EF775445747B6510960FECCAD9A2EF0B76500EA0C069
  +B8E8AFA16D099299FE092A97E2FDF483A39FCCACFFF3DF10D4C3CC0D78BB7413
  +DDB69644F0305FD1158CDB96AC4432BFB81DB1259B8AC16982694149276336C4
  +659FFC384078BAF79749E72CD873E8B4B99D3D928F624CB6A1FEEE07199E5274
  +213F60F9902597D145C52DABC5AD44616A8B0894DB47F6F2A07F585BDCE050AE
  +9F159401B65219C9695CFF122C9CBE743839A29060B2B33A6B0CBDD41516F448
  +09A8795098237D1805168A35D8E20F1B211A580B2F051572F44E76EC01A7BAE3
  +66CE505B13C828AF4FAF0EDC9BCD96A014E86993552839DBCFDD88BF84285CE0
  +BFB2CC6AB9AC3308C2438E1E5E9EB2F7727CDCB4A71BB83F1D70F15436712730
  +75BD1B40CC9B7FBEFA20B4F3BDA5E68C540D6FC8AF1CA3A30E1FBA7FA7D8E011
  +2AC2F960786C810642986594F3BB8A33838381FE47D436A485E95DC3C391B251
  +9C43A85A8D8EAB0E5D5B978ECD8BF0D117D61C3CA57D46BE354513F6DA278B51
  +FFD5C2E3B25F900BAE47C5D006366E513742409500B32AED625A4B2AC1F4E3F4
  +8A7D6153C2C6D994804A1E3834E8623F2BC29752B9069BA80C10E9EE8A60E32A
  +8259CE68944FBB6FB47FACF129FBA781E0D1B7B46481BC05B34482901C8A6770
  +4D3101B75317FB04E90DFEF394C7A8329D24CC4CA261A339D4B3F4193BD2A5A4
  +13A1DCDC60A4A685B0F99D8CFC00F944F1D21FC0E0BAC319D36747AA47C156B6
  +CCD69E3F7AADB801BDFCF16833FCF141FCF33CCACEAF6DA099724DF56FA14CC2
  +163379669D980643E0BF8B9F2CAA7AB5AE55171A1D6686C28F658B223D039FBB
  +47A47BFE8FF5907BBBBBE8EC56D2538ADD4ACABA19648592741C5F74F1F1D01F
  +ACB7B023997973E5BC4961990DFA539A16E7764CA2DE4167C2F4F18EAC1D68BD
  +E82B66A38CCA217C10C2A03C4679
  +0000000000000000000000000000000000000000000000000000000000000000
  +0000000000000000000000000000000000000000000000000000000000000000
  +0000000000000000000000000000000000000000000000000000000000000000
  +0000000000000000000000000000000000000000000000000000000000000000
  +0000000000000000000000000000000000000000000000000000000000000000
  +0000000000000000000000000000000000000000000000000000000000000000
  +0000000000000000000000000000000000000000000000000000000000000000
  +0000000000000000000000000000000000000000000000000000000000000000
  +cleartomark
  +%%EndFont 
  +TeXDict begin 39139632 55387786 1000 1200 1200 (rse-pmt.dvi)
  +@start /Fa 165[73 86 1[113 86 86 73 66 80 86 66 86 86
  +106 73 86 47 40 86 86 66 73 86 80 80 86 65[{
  +TeXBase1Encoding ReEncodeFont}25 119.552 /Times-Roman
  +rf /Fb 140[75 50 12[83 101[{TeXBase1Encoding ReEncodeFont}3
  +149.44 /Helvetica rf /Fc 205[83 6[129 43[{}2 166.044
  +/CMR10 rf /Fd 253[129 2[{}1 166.044 /CMSY10 rf /Fe 177[133
  +12[125 65[{}2 166.044 /CMMI10 rf /Ff 253[110 2[{}1 132.835
  +/CMSY8 rf /Fg 135[90 3[90 6[90 9[90 99[{TeXBase1Encoding ReEncodeFont}4
  +149.44 /Courier-BoldOblique rf /Fh 135[80 80 2[80 80
  +2[80 80 80 80 80 80 80 80 80 80 1[80 1[80 1[80 12[80
  +1[80 1[80 80 80 4[80 1[80 25[80 45[{TeXBase1Encoding ReEncodeFont}25
  +132.835 /Courier rf /Fi 133[90 90 1[90 90 90 90 90 90
  +1[90 90 90 1[90 2[90 90 1[90 90 90 90 1[90 1[90 59[90
  +35[{TeXBase1Encoding ReEncodeFont}21 149.44 /Courier-Bold
  +rf /Fj 133[58 66 75 100 66 83 42 58 58 1[75 75 83 116
  +42 75 42 42 83 75 50 66 75 66 75 75 50 11[91 83 24[50
  +75 75 75 75 75 75 75 75 75 75 1[37 6[50 116 35[83 2[{
  +TeXBase1Encoding ReEncodeFont}43 149.44 /Times-BoldItalic
  +rf /Fk 103[90 29[90 90 90 90 90 90 90 90 90 1[90 90 90
  +90 90 90 90 90 90 90 90 90 90 90 90 90 1[90 9[90 90 90
  +90 2[90 90 90 90 90 1[90 90 90 90 90 90 90 90 90 2[90
  +90 1[90 9[90 90 90 90 90 90 1[90 90 90 1[90 4[90 33[{
  +TeXBase1Encoding ReEncodeFont}59 149.44 /Courier rf /Fl
  +135[59 3[37 1[52 1[66 66 66 96 37 59 1[37 66 2[59 1[59
  +1[66 11[96 1[66 2[81 1[89 111 5[96 3[89 81 19[33 46[{
  +TeXBase1Encoding ReEncodeFont}23 132.835 /Times-Italic
  +rf /Fm 134[66 66 96 66 66 37 52 44 1[66 66 66 103 37
  +66 37 37 66 66 44 59 66 59 66 59 3[44 1[44 2[96 125 96
  +96 81 74 89 1[74 96 96 118 81 96 1[44 96 96 74 81 96
  +89 89 96 6[37 66 66 66 66 66 66 66 66 66 66 37 33 44
  +33 2[44 44 37[74 2[{TeXBase1Encoding ReEncodeFont}66
  +132.835 /Times-Roman rf /Fn 134[66 66 96 66 74 44 52
  +59 1[74 66 74 111 37 1[44 37 74 66 44 59 74 59 74 66
  +12[89 74 2[81 103 8[81 4[96 6[44 66 66 3[66 66 66 66
  +66 1[33 4[44 44 40[{TeXBase1Encoding ReEncodeFont}40
  +132.835 /Times-Bold rf /Fo 145[77 6[77 77 80[119 21[{}4
  +149.44 /CMSY9 rf /Fp 135[100 100 100 100 100 100 100
  +1[100 100 100 100 100 100 100 100 100 100 100 100 100
  +100 100 100 7[100 1[100 100 100 100 100 100 1[100 100
  +100 2[100 1[100 100 100 1[100 1[100 1[100 12[100 2[100
  +2[100 100 100 1[100 100 100 4[100 35[{TeXBase1Encoding ReEncodeFont}49
  +166.044 /Courier rf /Fq 133[74 3[83 1[55 65 3[83 5[46
  +3[74 92 21[120 157 18[55 8[83 5[95 83 55 55 40[{
  +TeXBase1Encoding ReEncodeFont}16 166.044 /Times-Bold
  +rf /Fr 133[65 74 74 111 74 83 46 65 65 1[83 83 83 120
  +46 74 1[46 83 83 46 74 83 74 83 83 8[101 1[101 120 92
  +83 101 1[101 120 111 138 92 2[55 1[120 101 101 120 111
  +101 101 3[112 2[55 83 83 1[83 83 83 1[83 83 1[46 42 55
  +42[83 2[{TeXBase1Encoding ReEncodeFont}56 166.044 /Times-Italic
  +rf /Fs 134[120 3[133 80 93 106 1[133 120 133 199 66 2[66
  +2[80 106 133 106 133 120 14[173 1[146 6[93 7[173 13[120
  +120 120 49[{TeXBase1Encoding ReEncodeFont}24 239.103
  +/Times-Bold rf /Ft 134[83 1[116 1[91 1[83 58 2[91 91
  +1[42 2[42 91 91 1[83 91 1[91 17[100 4[108 16[50 58[{
  +TeXBase1Encoding ReEncodeFont}17 149.44 /Helvetica-Bold
  +rf /Fu 134[66 66 100 66 75 42 58 58 75 75 75 75 108 42
  +66 1[42 75 75 42 66 75 66 75 75 8[91 124 91 108 83 75
  +91 108 91 108 100 124 83 2[50 1[108 91 91 108 100 91
  +91 5[50 50 5[75 75 75 75 75 1[37 50 37 4[50 36[75 2[{
  +TeXBase1Encoding ReEncodeFont}57 149.44 /Times-Italic
  +rf /Fv 133[66 75 75 108 75 75 42 58 50 75 75 75 75 116
  +42 75 42 42 75 75 50 66 75 66 75 66 3[50 1[50 2[108 141
  +108 108 91 83 100 108 83 108 108 133 91 108 58 50 108
  +108 83 91 108 100 100 108 5[42 42 75 75 75 75 75 75 75
  +75 75 75 42 37 50 37 84 1[50 50 50 116 34[83 83 2[{
  +TeXBase1Encoding ReEncodeFont}75 149.44 /Times-Roman
  +rf /Fw 134[75 75 1[75 83 50 58 66 1[83 75 83 124 42 83
  +1[42 83 75 1[66 83 66 83 75 9[149 108 1[100 83 2[91 116
  +108 141 100 2[58 1[116 1[100 108 108 1[108 18[37 46[{
  +TeXBase1Encoding ReEncodeFont}37 149.44 /Times-Bold rf
  +/Fx 104[166 83 1[74 74 24[74 83 83 120 83 83 46 65 55
  +83 83 83 83 129 46 83 46 46 83 83 55 74 83 74 83 74 3[55
  +1[55 2[120 157 120 120 101 92 111 1[92 120 120 148 101
  +120 1[55 120 120 92 101 120 111 111 120 153 74 4[46 83
  +83 83 83 83 83 83 83 83 83 46 42 55 42 2[55 55 55 5[55
  +29[92 92 2[{TeXBase1Encoding ReEncodeFont}77 166.044
  +/Times-Roman rf /Fy 87[66 49[88 100 55 78 78 3[100 4[55
  +100 2[88 1[88 1[100 11[144 111 6[166 35[66 66 40[{
  +TeXBase1Encoding ReEncodeFont}17 199.253 /Times-Italic
  +rf /Fz 140[78 4[100 1[55 3[100 100 66 88 1[88 1[88 13[111
  +133 12[122 22[50 46[{TeXBase1Encoding ReEncodeFont}13
  +199.253 /Times-Roman rf /FA 134[100 100 144 100 111 66
  +78 88 1[111 100 111 166 55 111 66 55 111 100 66 88 111
  +88 111 100 9[199 1[144 133 111 144 1[122 155 1[188 1[155
  +1[78 155 155 122 133 144 144 133 144 8[100 100 100 100
  +100 100 100 100 2[50 66 3[66 66 1[166 34[111 111 2[{
  +TeXBase1Encoding ReEncodeFont}57 199.253 /Times-Bold
  +rf /FB 138[191 115 1[153 2[172 191 1[96 2[96 191 172
  +1[153 191 1[191 172 16[210 2[325 77[{TeXBase1Encoding ReEncodeFont}15
  +344.375 /Times-Bold rf end
   %%EndProlog
   %%BeginSetup
  -%%Feature: *Resolution 600dpi
  +%%Feature: *Resolution 1200dpi
   TeXDict begin
  -%%BeginPaperSize: Letter
  -letter
  +%%BeginPaperSize: a4
  +a4
   %%EndPaperSize
  -
  + end
   %%EndSetup
   %%Page: 1 1
  -1 0 bop Black Black Black Black 1052 119 a FB(P)m(ortable)44
  -b(Multithr)m(eading)753 254 y FA(The)26 b(Signal)f(Stack)h(T)-7
  -b(rick)26 b(F)n(or)e(User)l(-Space)i(Thr)n(ead)h(Cr)n(eation)1567
  -472 y Fz(Ralf)e(S.)g(Engelschall)1148 595 y Fy(T)-9 b(ec)o(hnisc)o(he)
  -24 b(Univer)o(sit)1988 596 y(\250)1980 595 y(at)f(M)2172
  -596 y(\250)2164 595 y(unc)o(hen)h(\(TUM\))1109 718 y
  -Fx(rse@engelschall.com,)18 b(http://www)-5 b(.engelschall.com)p
  -Black Black 1811 999 a Fw(Abstract)p Black Black 208
  -1136 a Fv(This)23 b(paper)h(describes)g(a)g(pragmatic)g(b)o(ut)f
  -(portable)h(f)o(allback)h(approach)g(for)e(creating)h(and)h
  -(dispatching)f(between)h(the)e(machine)208 1227 y(conte)o(xts)c(of)g
  -(multiple)f(threads)h(of)g(e)o(x)o(ecution)h(on)f(Unix)g(systems)g
  -(that)f(lack)h(a)f(dedicated)i(user)o(-space)f(conte)o(xt)h(switching)f
  -(f)o(acility)-5 b(.)208 1318 y(Such)22 b(a)g(f)o(allback)h(approach)h
  -(for)f(implementing)g(machine)g(conte)o(xts)g(is)f(a)g(vital)g(part)h
  -(of)f(a)g(user)o(-space)h(multithreading)g(en)m(viron-)208
  -1410 y(ment,)g(if)e(it)h(has)h(to)f(achie)n(v)o(e)h(maximum)g
  -(portability)g(across)g(a)f(wide)g(range)h(of)g(Unix)f(\003a)o(v)o
  -(ors.)33 b(The)22 b(approach)i(is)e(entirely)g(based)208
  -1501 y(on)d(standard)h(Unix)g(system)f(f)o(acilities)g(and)h(ANSI-C)e
  -(language)i(features)g(and)g(especially)g(does)g(not)f(require)h(an)o
  -(y)f(assembly)h(code)208 1592 y(or)27 b(platform)h(speci\002c)f(tricks)
  -g(at)h(all.)48 b(The)27 b(most)h(interesting)g(issue)f(is)g(the)h
  -(technique)h(of)e(creating)h(the)g(machine)g(conte)o(xt)g(for)208
  -1684 y(threads,)18 b(which)g(this)f(paper)h(e)o(xplains)h(in)e(detail.)
  -23 b(The)17 b(described)i(approach)g(closely)f(follo)n(ws)g(the)g
  -(algorithm)g(as)f(implemented)i(by)208 1775 y(the)h(author)h(for)f(the)
  -g(popular)h(user)o(-space)g(multithreading)g(library)f
  -Fu(GNU)f(P)-6 b(ortable)21 b(Thr)m(eads)g Fv(\()p Fu(GNU)e(Pth)p
  -Fv(,)h([25)q(]\))f(which)i(this)f(w)o(ay)208 1866 y(quickly)f(gained)h
  -(the)f(status)g(of)g(one)g(of)g(the)g(most)g(portable)h(user)o(-space)f
  -(multithreading)h(libraries.)208 2007 y Ft(K)o(e)o(yw)o(or)o(ds:)e
  -Fv(portability)-5 b(,)15 b(multithreading,)i(Unix,)e(POSIX,)f(SUSv2,)h
  -(ANSI-C,)e(user)o(-space,)j(conte)o(xt)g(creation,)g(conte)o(xt)f
  -(switch-)208 2099 y(ing,)j(signal)i(handler)m(,)f(stack,)g(mak)o
  -(econte)o(xt,)h(switchconte)o(xt,)g(sigaltstack,)e(setjmp,)h(longjmp.)
  -208 2240 y Ft(Pub)o(lishing:)g Fv(Early)f(drafts)f(of)h(this)g(paper)g
  -(were)g(distrib)o(uted)g(with)f(the)h(GNU)g(Pth)f(distrib)o(ution.)22
  -b(The)c(\002nal)g(release)g(v)o(ersion)g(w)o(as)208 2331
  -y(published)i(on)f(the)g(USENIX)f(Annual)h(T)-5 b(echnical)20
  -b(Conference,)f(June)h(18-23,)g(2000,)f(San)g(Die)o(go,)g(California,)f
  -(USA.)0 2711 y Fs(1)119 b(Intr)n(oduction)0 2895 y FA(1.1)99
  -b(Multithr)n(eading)0 3052 y Fx(The)25 b(paradigm)d(of)j(programming)c
  -(with)k(multiple)g(threads)f(of)0 3152 y(e)o(x)o(ecution)c(\(aka)i
  -Fr(multithr)m(eading)p Fx(\))f(is)i(already)f(a)h(v)o(ery)e(old)h(one)0
  -3252 y(and)i(dates)g(back)g(to)g(the)h(decades)f(of)g(programming)c
  -(with)25 b Fr(co-)0 3351 y(r)l(outines)19 b Fx([2,)g(3].)25
  -b(P)o(aradoxically)-5 b(,)17 b(the)i(use)h(of)f(threads)g(on)g(Unix)0
  -3451 y(platforms)g(did)h(not)g(become)f(popular)f(until)i(the)g(early)g
  -(1990s.)0 3602 y FA(Multithr)n(eading)26 b(Adv)o(antages)0
  -3728 y Fx(Multithreading)31 b(can)i(pro)o(vide)f(man)o(y)g(bene\002ts)h
  -(for)g(applica-)0 3828 y(tions)26 b(\(good)f(runtime)g(concurrenc)o(y)
  --5 b(,)24 b(parallel)i(programming)0 3927 y(techniques)j(can)h(be)g
  -(implemented)e(more)i(easily)-5 b(,)32 b(the)e(popu-)0
  -4027 y(lar)22 b(procedural)d(programming)f(style)k(can)f(be)h(combined)
  -d(with)0 4127 y(multiple)g(threads)f(of)h(e)o(x)o(ecution,)e
  -Fr(etc.)p Fx(\))24 b(b)n(ut)c(the)f(most)g(interest-)0
  -4226 y(ing)25 b(ones)g(are)g(usually)g(performance)d(gains)j(and)f
  -(reduced)g(re-)0 4326 y(source)17 b(consumption.)k(Because)d(in)g
  -(contrast)f(to)h(multiprocess)0 4425 y(applications,)e(multithreaded)f
  -(ones)i(usually)f(require)g(less)i(sys-)0 4525 y(tem)25
  -b(resources)f(\(mainly)g(memory\))e(and)j(their)f(internal)g(com-)0
  -4625 y(munication)33 b(part)i(can)g(le)n(v)o(erage)f(from)g(the)i
  -(shared)e(address)0 4724 y(space.)0 4876 y FA(Multithr)n(eading)26
  -b(and)g(A)n(pplications)0 5001 y Fx(Ne)n(v)o(ertheless)d(there)h(still)
  -h(e)o(xist)g(just)g(a)f(fe)n(w)h(real)f(applications)0
  -5101 y(in)35 b(the)f(free)g(softw)o(are)h(w)o(orld)f(that)g(use)h
  -(multithreading)d(for)0 5201 y(their)20 b(bene\002t,)g(although)f
  -(their)h(application)f(domains)h(are)g(pre-)0 5300 y(destined)32
  -b(for)f(multithreading.)59 b(F)o(or)32 b(instance,)j(the)d(popular)0
  -5400 y(Apache)38 b(webserv)o(er)g(as)i(of)f(v)o(ersion)f(1.3)h(still)h
  -(uses)g(a)f(pre-)2025 2895 y(forking)32 b(process)h(model)g(for)h
  -(serving)f(HTTP)h(requests,)i(al-)2025 2995 y(though)14
  -b(tw)o(o)i(e)o(xperiments)e(with)j(multithreaded)c(Apache)i(v)n(ari-)
  -2025 3095 y(ants)22 b(in)g(1996)e(\(with)i Fr(r)o(sthr)m(eads)g
  -Fx([27)n(]\))g(and)f(1998)f(\(with)i Fr(NSPR)2025 3194
  -y Fx([31)o(]\))37 b(already)f(sho)n(wed)g(great)h(performance)d
  -(boosts.)76 b(The)2025 3294 y(same)20 b(applies)g(to)h(man)o(y)e
  -(similar)h(applications.)2150 3401 y(The)h(reason)g(for)g(this)i
  -(restraint)e(mainly)g(is)i(that)f(for)f(a)h(long)2025
  -3500 y(time,)c(multithreading)e(f)o(acilities)j(under)d(Unix)i(were)g
  -(rare.)24 b(The)2025 3600 y(situation)f(became)f(better)h(after)f(some)
  -h(v)o(endors)f(lik)o(e)h Fr(Sun)f Fx(and)2025 3699 y
  -Fr(DEC)f Fx(incorporated)15 b(threading)h(f)o(acilities)j(into)f(their)
  -g(Unix)f(\003a-)2025 3799 y(v)n(ors)36 b(and)g Fr(POSIX)j
  -Fx(standardized)c(a)i(threading)e Fr(Application)2025
  -3899 y(Pr)l(o)o(gr)o(amming)18 b(Interface)g Fx(\(API\))h(\(aka)f
  -Fr(Pthr)m(eads)g Fx([1]\).)24 b(But)c(an)2025 3998 y(API)e(and)f(a)h
  -(fe)n(w)f(v)o(endor)f(implementations)f(are)j(not)f(enough)e(to)2025
  -4098 y(ful\002ll)29 b(the)g(portability)e(requirements)g(of)h(modern)f
  -(free)i(soft-)2025 4198 y(w)o(are)37 b(packages.)74 b(Here)37
  -b(stand-alone)f(and)g(really)h(portable)2025 4297 y(multithreading)18
  -b(en)m(vironments)f(are)j(needed.)2150 4404 y(The)49
  -b(author)g(collected)h(and)f(e)n(v)n(aluated)g(o)o(v)o(er)g(twenty)2025
  -4503 y(\(mostly)42 b(user)n(-space\))h(a)n(v)n(ailable)f
  -(multithreading)f(f)o(acilities)2025 4603 y(for)15 b(Unix)g(systems)h
  -(\(see)g(T)-7 b(able)16 b(1\),)g(b)n(ut)g(only)e(a)i(fe)n(w)g(of)f
  -(them)h(are)2025 4703 y(freely)27 b(a)n(v)n(ailable)g(and)g(sho)n(wed)g
  -(to)h(be)g(really)f(portable.)46 b(And)2025 4802 y(e)n(v)o(en)19
  -b(the)i(mostly)f(portable)f(ones)h(suf)n(fered)f(from)g(the)i(f)o(act)f
  -(that)2025 4902 y(the)o(y)31 b(partly)g(depend)f(on)h(assembly)g(code)g
  -(or)h(platform)e(spe-)2025 5001 y(ci\002c)e(tricks)f(usually)g(related)
  -g(to)h(the)f(creation)g(and)g(dispatch-)2025 5101 y(ing)d(of)h(the)g
  -(indi)n(vidual)e(threads.)38 b(This)25 b(means)f(that)h(the)g(num-)2025
  -5201 y(ber)c(of)h(platforms)f(the)o(y)g(support)f(is)j(limited)e(and)h
  -(applications)2025 5300 y(which)27 b(are)h(based)g(on)g(these)g(f)o
  -(acilities)h(are)f(only)f(portable)f(to)2025 5400 y(those)c(platforms.)
  -29 b(This)22 b(situation)f(is)i(not)f(satisf)o(actory)-5
  -b(,)21 b(so)h(ap-)p Black 1929 5700 a(1)p Black eop
  +TeXDict begin 1 0 bop Black Black Black Black 2103 710
  +a FB(P)-7 b(ortable)87 b(Multithr)-6 b(eading)1507 981
  +y FA(The)50 b(Signal)f(Stack)h(T)-15 b(rick)51 b(F)-5
  +b(or)50 b(User)-7 b(-Space)50 b(Thr)l(ead)g(Cr)l(eation)3133
  +1416 y Fz(Ralf)h(S.)f(Engelschall)2296 1663 y Fy(T)-18
  +b(ec)m(hnisc)m(he)50 b(Univer)n(sit)3973 1664 y(\250)3957
  +1663 y(at)g(M)4344 1664 y(\250)4328 1663 y(unc)m(hen)g(\(TUM\))2217
  +1909 y Fx(rse@engelschall.com,)39 b(http://www)-11 b(.engelschall.com)p
  +Black Black 3622 2470 a Fw(Abstract)p Black Black 415
  +2744 a Fv(This)46 b(paper)h(describes)g(a)g(pragmatic)f(b)m(ut)g
  +(portable)f(f)o(allback)g(approach)i(for)f(creating)g(and)g
  +(dispatching)f(between)h(the)h(machine)415 2927 y(conte)n(xts)36
  +b(of)g(multiple)f(threads)h(of)h(e)n(x)n(ecution)e(on)h(Unix)g(systems)
  +h(that)f(lack)h(a)g(dedicated)f(user)m(-space)i(conte)n(xt)d(switching)
  +g(f)o(acility)-10 b(.)415 3109 y(Such)44 b(a)h(f)o(allback)e(approach)h
  +(for)f(implementing)g(machine)h(conte)n(xts)f(is)h(a)h(vital)e(part)g
  +(of)h(a)g(user)m(-space)h(multithreading)d(en)-6 b(viron-)415
  +3292 y(ment,)46 b(if)e(it)f(has)h(to)g(achie)l(v)n(e)h(maximum)f
  +(portability)d(across)j(a)h(wide)f(range)g(of)f(Unix)h(\003a)m(v)m
  +(ors.)67 b(The)44 b(approach)g(is)g(entirely)f(based)415
  +3475 y(on)37 b(standard)h(Unix)f(system)h(f)o(acilities)e(and)h(ANSI-C)
  +h(language)f(features)h(and)g(especially)f(does)h(not)f(require)g(an)n
  +(y)h(assembly)g(code)415 3657 y(or)54 b(platform)f(speci\002c)i(tricks)
  +f(at)g(all.)98 b(The)55 b(most)f(interesting)e(issue)j(is)f(the)g
  +(technique)g(of)g(creating)f(the)i(machine)f(conte)n(xt)g(for)415
  +3840 y(threads,)35 b(which)f(this)g(paper)h(e)n(xplains)e(in)h(detail.)
  +45 b(The)35 b(described)g(approach)f(closely)g(follo)l(ws)g(the)g
  +(algorithm)f(as)i(implemented)f(by)415 4023 y(the)40
  +b(author)e(for)h(the)h(popular)e(user)m(-space)i(multithreading)d
  +(library)h Fu(GNU)i(P)-12 b(ortable)39 b(Thr)-6 b(eads)40
  +b Fv(\()p Fu(GNU)f(Pth)p Fv(,)h([25)o(]\))g(which)f(this)f(w)o(ay)415
  +4205 y(quickly)e(g)o(ained)h(the)g(status)g(of)f(one)i(of)e(the)h(most)
  +g(portable)f(user)m(-space)i(multithreading)d(libraries.)415
  +4487 y Ft(K)n(e)n(yw)m(or)m(ds:)43 b Fv(portability)-10
  +b(,)29 b(multithreading,)f(Unix,)j(POSIX,)e(SUSv2,)i(ANSI-C,)e(user)m
  +(-space,)j(conte)n(xt)d(creation,)i(conte)n(xt)d(switch-)415
  +4670 y(ing,)37 b(signal)f(handler)-6 b(,)37 b(stack,)h(mak)o(econte)n
  +(xt,)f(switchconte)n(xt,)e(sig)o(altstack,)i(setjmp,)g(longjmp.)415
  +4952 y Ft(Pub)o(lishing:)45 b Fv(Early)34 b(drafts)h(of)f(this)h(paper)
  +g(were)g(distrib)m(uted)e(with)g(the)i(GNU)g(Pth)g(distrib)m(ution.)42
  +b(The)35 b(\002nal)g(release)h(v)n(ersion)e(w)o(as)415
  +5135 y(published)i(on)g(the)h(USENIX)h(Annual)e(T)-10
  +b(echnical)37 b(Conference,)h(June)f(18-23,)f(2000,)h(San)g(Die)n(go,)g
  +(California,)f(USA.)0 5895 y Fs(1)239 b(Intr)l(oduction)0
  +6293 y FA(1.1)198 b(Multithr)l(eading)0 6634 y Fx(The)51
  +b(paradigm)g(of)g(programming)h(with)f(multiple)g(threads)g(of)0
  +6833 y(e)n(x)n(ecution)45 b(\(aka)h Fr(multithr)-6 b(eading)p
  +Fx(\))46 b(is)g(already)g(a)g(v)n(ery)g(old)g(one)0 7032
  +y(and)k(dates)f(back)g(to)h(the)g(decades)e(of)i(programming)h(with)f
  +Fr(co-)0 7232 y(r)-7 b(outines)39 b Fx([2,)h(3].)51 b(P)n(aradoxically)
  +-11 b(,)39 b(the)h(use)g(of)g(threads)g(on)g(Unix)0 7431
  +y(platforms)i(did)g(not)f(become)g(popular)h(until)g(the)f(early)h
  +(1990s.)0 7776 y FA(Multithr)l(eading)52 b(Adv)n(antages)0
  +8057 y Fx(Multithreading)68 b(can)f(pro)n(vide)h(man)n(y)f(bene\002ts)h
  +(for)g(applica-)0 8256 y(tions)54 b(\(good)g(runtime)g(concurrenc)n(y)
  +-11 b(,)56 b(parallel)e(programming)0 8455 y(techniques)61
  +b(can)g(be)g(implemented)h(more)f(easily)-11 b(,)66 b(the)c(popu-)0
  +8654 y(lar)44 b(procedural)h(programming)g(style)f(can)g(be)g(combined)
  +g(with)0 8854 y(multiple)c(threads)f(of)h(e)n(x)n(ecution,)e
  +Fr(etc.)p Fx(\))50 b(b)m(ut)39 b(the)h(most)f(interest-)0
  +9053 y(ing)52 b(ones)f(are)g(usually)g(performance)h(g)o(ains)f(and)h
  +(reduced)f(re-)0 9252 y(source)36 b(consumption.)49 b(Because)34
  +b(in)j(contrast)f(to)g(multiprocess)0 9451 y(applications,)g
  +(multithreaded)f(ones)g(usually)g(require)g(less)g(sys-)0
  +9651 y(tem)51 b(resources)f(\(mainly)h(memory\))h(and)e(their)i
  +(internal)f(com-)0 9850 y(munication)72 b(part)g(can)f(le)l(v)n(erage)f
  +(from)j(the)e(shared)g(address)0 10049 y(space.)0 10395
  +y FA(Multithr)l(eading)52 b(and)d(A)-5 b(pplications)0
  +10675 y Fx(Ne)l(v)n(ertheless)48 b(there)h(still)h(e)n(xist)f(just)g(a)
  +h(fe)l(w)f(real)h(applications)0 10874 y(in)70 b(the)h(free)f(softw)n
  +(are)g(w)n(orld)h(that)g(use)e(multithreading)i(for)0
  +11073 y(their)43 b(bene\002t,)f(although)g(their)h(application)f
  +(domains)g(are)g(pre-)0 11272 y(destined)65 b(for)i(multithreading.)124
  +b(F)n(or)66 b(instance,)71 b(the)66 b(popular)p Black
  +Black 4050 6293 a(Apache)79 b(webserv)n(er)f(as)h(of)h(v)n(ersion)f
  +(1.3)g(still)h(uses)e(a)i(pre-)4050 6492 y(forking)70
  +b(process)e(model)h(for)g(serving)g(HTTP)h(requests,)75
  +b(al-)4050 6692 y(though)33 b(tw)n(o)h(e)n(xperiments)e(with)h
  +(multithreaded)h(Apache)e(v)l(ari-)4050 6891 y(ants)44
  +b(in)h(1996)f(\(with)h Fr(r)n(sthr)-6 b(eads)43 b Fx([27]\))j(and)e
  +(1998)g(\(with)h Fr(NSPR)4050 7090 y Fx([31]\))76 b(already)g(sho)l
  +(wed)e(great)i(performance)f(boosts.)153 b(The)4050 7289
  +y(same)41 b(applies)g(to)g(man)n(y)g(similar)h(applications.)4299
  +7587 y(The)j(reason)f(for)i(this)e(restraint)h(mainly)g(is)g(that)g
  +(for)g(a)g(long)4050 7787 y(time,)38 b(multithreading)g(f)n(acilities)f
  +(under)h(Unix)f(were)g(rare.)50 b(The)4050 7986 y(situation)d(became)g
  +(better)g(after)h(some)f(v)n(endors)f(lik)n(e)i Fr(Sun)f
  +Fx(and)4050 8185 y Fr(DEC)41 b Fx(incorporated)d(threading)f(f)n
  +(acilities)h(into)f(their)h(Unix)g(\003a-)4050 8384 y(v)m(ors)74
  +b(and)f Fr(POSIX)83 b Fx(standardized)73 b(a)h(threading)g
  +Fr(Application)4050 8584 y(Pr)-7 b(o)n(gr)n(amming)38
  +b(Interface)h Fx(\(API\))h(\(aka)f Fr(Pthr)-6 b(eads)39
  +b Fx([1]\).)51 b(But)39 b(an)4050 8783 y(API)e(and)f(a)g(fe)l(w)f(v)n
  +(endor)h(implementations)g(are)g(not)h(enough)f(to)4050
  +8982 y(ful\002ll)60 b(the)f(portability)g(requirements)g(of)g(modern)g
  +(free)g(soft-)4050 9181 y(w)n(are)75 b(packages.)151
  +b(Here)75 b(stand-alone)g(and)g(really)g(portable)4050
  +9381 y(multithreading)42 b(en)-7 b(vironments)42 b(are)f(needed.)4299
  +9678 y(The)102 b(author)g(collected)f(and)g(e)l(v)l(aluated)f(o)n(v)n
  +(er)h(twenty)4050 9878 y(\(mostly)88 b(user)m(-space\))e(a)m(v)l
  +(ailable)h(multithreading)h(f)n(acilities)4050 10077
  +y(for)33 b(Unix)g(systems)e(\(see)h(T)-13 b(able)32 b(1\),)i(b)m(ut)e
  +(only)h(a)f(fe)l(w)g(of)h(them)f(are)4050 10276 y(freely)57
  +b(a)m(v)l(ailable)e(and)i(sho)l(wed)e(to)i(be)f(really)h(portable.)96
  +b(And)4050 10475 y(e)l(v)n(en)41 b(the)h(mostly)g(portable)g(ones)f
  +(suf)l(fered)h(from)h(the)f(f)n(act)g(that)4050 10675
  +y(the)n(y)64 b(partly)h(depend)f(on)g(assembly)f(code)h(or)h(platform)g
  +(spe-)4050 10874 y(ci\002c)56 b(tricks)g(usually)g(related)f(to)i(the)f
  +(creation)f(and)h(dispatch-)4050 11073 y(ing)51 b(of)g(the)f(indi)l
  +(vidual)h(threads.)78 b(This)51 b(means)f(that)h(the)f(num-)4050
  +11272 y(ber)45 b(of)g(platforms)g(the)n(y)f(support)h(is)g(limited)g
  +(and)g(applications)p Black 3858 11872 a(1)p Black eop
  +end
   %%Page: 2 2
  -2 1 bop Black Black 0 83 a Fx(plication)25 b(authors)g(still)j(a)n(v)n
  -(oid)d(the)i(use)f(of)g(multithreading)d(if)0 183 y(the)o(y)28
  -b(w)o(ant)g(to)h(\(or)f(ha)n(v)o(e)g(to\))g(achie)n(v)o(e)f(maximum)g
  -(portability)0 282 y(for)20 b(their)f(application.)125
  -387 y(A)25 b(pragmatic)e(and)h(mostly)g(portable)f(f)o(allback)h
  -(technique)0 486 y(for)d(implementing)f(user)n(-space)h(threads)g(can)h
  -(f)o(acilitate)g(wider)0 586 y(use)e(of)g(multithreading)e(in)i(free)g
  -(softw)o(are)g(applications.)0 750 y FA(Ingr)n(edients)26
  -b(of)f(a)g(Thr)n(ead)0 884 y Fx(A)h(Unix)f(process)f(has)i(man)o(y)e
  -(ingredients,)h(b)n(ut)g(the)g(most)h(im-)0 983 y(portant)k(ones)h(are)
  -h(its)g(memory)e(mapping)f(table,)34 b(the)e(signal)0
  -1083 y(dispatching)18 b(table,)h(the)g(signal)g(mask,)g(the)g(set)h(of)
  -f(\002le)h(descrip-)0 1183 y(tors)30 b(and)f(the)h(machine)e(conte)o
  -(xt.)52 b(The)29 b(machine)g(conte)o(xt)f(in)0 1282 y(turn)d(consists)i
  -(of)e(at)i(least)g(the)f(CPU)h(re)o(gisters)e(including)g(the)0
  -1382 y(program)18 b(counter)h(and)h(the)h(stack)f(pointer)-5
  -b(.)25 b(In)20 b(addition,)f(there)0 1482 y(can)28 b(be)f(light-weight)
  -g(processes)g(\(L)-6 b(WP\))28 b(or)f(threads,)i(which)0
  -1581 y(usually)g(share)g(all)h(attrib)n(utes)f(with)g(the)h(underlying)
  -c(\(hea)n(vy-)0 1681 y(weight\))19 b(process)h(e)o(xcept)f(for)h(the)g
  -(machine)f(conte)o(xt.)0 1845 y FA(K)n(er)o(nel-Space)25
  -b(vs.)31 b(User)l(-Space)0 1979 y Fx(Those)c(L)-6 b(WPs)28
  -b(or)f(threads,)h(on)e(a)i(Unix)f(platform)e(classically)0
  -2078 y(can)34 b(be)g(implemented)e(either)i(in)g(k)o(ernel-space)f(or)g
  -(in)i(user)n(-)0 2178 y(space.)76 b(When)38 b(implemented)d(in)j(k)o
  -(ernel-space,)h(one)e(usu-)0 2278 y(ally)22 b(calls)h(them)e(L)-6
  -b(WPs)23 b(or)e(k)o(ernel)g(threads,)h(otherwise)f(\(user)n(-)0
  -2377 y(space\))d(threads.)24 b(If)19 b(threads)f(are)h(implemented)d
  -(by)j(the)g(k)o(ernel,)0 2477 y(the)24 b(thread)g(conte)o(xt)f
  -(switches)h(are)h(performed)c(by)j(the)g(k)o(ernel)0
  -2576 y(without)17 b(notice)f(by)h(the)g(application,)f(similar)i(to)f
  -(the)h(dispatch-)0 2676 y(ing)33 b(of)g(processes.)64
  -b(If)33 b(threads)g(are)g(implemented)e(in)j(user)n(-)0
  -2776 y(space,)20 b(the)g(thread)f(conte)o(xt)g(switches)i(are)f
  -(performed)d(usually)0 2875 y(by)31 b(an)g(application)f(library)g
  -(without)h(notice)f(by)h(the)h(k)o(ernel.)0 2975 y(Additionally)-5
  -b(,)39 b(there)e(e)o(xist)h(hybrid)d(threading)h(approaches,)0
  -3075 y(where)28 b(typically)g(a)h(user)n(-space)g(library)e(binds)i
  -(one)f(or)g(more)0 3174 y(user)n(-space)19 b(threads)h(to)g(one)g(or)g
  -(more)f(k)o(ernel-space)g(L)-6 b(WPs.)0 3338 y FA(Thr)n(ead)27
  -b(Models)0 3472 y Fx(The)h(v)o(endor)d(threading)h(f)o(acilities)j
  -(under)d Fr(Sun)h(Solaris)p Fx(,)i Fr(IBM)0 3572 y(AIX)p
  -Fx(,)h Fr(DEC)h(T)-5 b(ru64)31 b Fx(\(formerly)d Fr(DIGIT)l(AL)i(UNIX)k
  -Fx(or)d Fr(OSF/1)p Fx(\))0 3671 y(and)20 b Fr(SGI)h(IRIX)i
  -Fx(use)e(a)h Fq(M:N)f Fx(mapping)e([21)o(,)i(30)o(],)g
  -Fr(i.e)o(.)p Fx(,)f Fq(M)i Fx(user)n(-)0 3771 y(space)33
  -b(threads)g(are)h(mapped)e(onto)g Fq(N)i Fx(k)o(ernel-space)e(L)-6
  -b(WPs.)0 3871 y(On)20 b(the)h(other)e(hand,)g Fr(LinuxThr)m(eads)g
  -Fx([29)o(])i(under)e Fr(GNU/Linux)0 3970 y Fx(uses)f(a)f
  -Fq(1:1)g Fx(mapping)e(and)i(pure)f(user)n(-space)h(implementations)0
  -4070 y(lik)o(e)k Fr(GNU)g(Pth)p Fx(,)f Fr(FSU)g(pthr)m(eads)f
  -Fx(or)i Fr(MIT)f(pthr)m(eads)p Fx(,)g Fr(etc.)26 b Fx(use)20
  -b(a)0 4170 y Fq(M:1)g Fx(mapping)f([25)n(,)i(22)o(,)f(23)o(].)125
  -4274 y(From)39 b(no)n(w)g(on)h(we)g(focus)g(on)f(such)h
  -Fq(M:1)g Fx(user)g(space)0 4374 y(threading)d(approaches,)42
  -b(where)c(one)h(or)f(more)h(user)g(space)0 4473 y(threads)16
  -b(are)g(implemented)f(inside)i(a)g(single)f(k)o(ernel)g(space)h(pro-)0
  -4573 y(cess.)24 b(The)15 b(e)o(x)o(ercise)f(is)i(to)g(implement)e(this)
  -i(by)e(using)h(standard-)0 4672 y(ized)20 b(Unix)g(system)g(and)g
  -(ANSI-C)g(language)f(f)o(acilities)i Fr(only)p Fx(.)0
  -4936 y FA(1.2)99 b(The)26 b(Exer)n(cise)0 5101 y Fx(As)d(we)g(ha)n(v)o
  -(e)f(mentioned,)e(a)j(thread)e(shares)i(its)g(state)g(with)g(the)0
  -5201 y(underlying)i(process)j(e)o(xcept)f(for)g(the)h(machine)f(conte)o
  -(xt.)46 b(So)0 5300 y(the)17 b(major)e(task)i(for)f(a)h(user)n(-space)f
  -(threading)e(system)j(is)g(to)g(cre-)0 5400 y(ate)k(and)e(dispatch)h
  -(those)g(machine)f(conte)o(xts.)2150 83 y(In)d(practice,)g(the)h
  -(second)f(major)g(task)h(it)g(has)g(to)g(do)f(is)i(to)f(en-)2025
  -183 y(sure)k(that)f(no)h(thread)f(by)g(accident)g(blocks)g(the)h(whole)
  -f(process)2025 282 y(\(and)25 b(thereby)f(all)i(other)f(threads\).)41
  -b(Instead)25 b(when)g(an)h(opera-)2025 382 y(tion)j(w)o(ould)f(block,)i
  -(the)f(threading)e(library)h(should)g(suspend)2025 482
  -y(only)19 b(the)g(e)o(x)o(ecution)e(of)i(the)g(current)g(thread)f(and)h
  -(in)g(the)h(mean-)2025 581 y(time)g(dispatch)f(the)h(remaining)e
  -(threads.)24 b(But)d(this)f(task)g(is)h(out-)2025 681
  -y(side)30 b(the)h(scope)e(of)h(this)h(paper)e(\(see)h([11)o(])h(for)e
  -(details)i(about)2025 780 y(this)24 b(task\).)33 b(W)-7
  -b(e)24 b(focus)f(only)f(on)h(the)g(aspect)g(of)g(machine)e(con-)2025
  -880 y(te)o(xt)f(handling.)2025 1112 y FA(1.3)99 b(The)26
  -b(Curse)g(of)e(P)n(ortability)2025 1267 y Fx(Our)18 b(goal)g(of)f(real)
  -i(portability)d(for)i(a)h(threading)d(system)i(causes)2025
  -1367 y(some)j(non-tri)n(vial)d(problems)i(which)g(ha)n(v)o(e)g(to)h(be)
  -g(solv)o(ed.)26 b(The)2025 1467 y(most)f(ob)o(vious)e(one)h(is)i(that)f
  -(dealing)f(with)h(machine)f(conte)o(xts)2025 1566 y(usually)33
  -b(suf)n(fers)g(from)f(portability)-5 b(,)35 b(because)d(it)j(is)f(a)g
  -(highly)2025 1666 y(CPU)18 b(dependent)d(task)i(for)f(which)g(not)h(e)n
  -(v)o(ery)e(Unix)i(\003a)n(v)n(or)g(pro-)2025 1766 y(vides)25
  -b(a)g(standardized)e(API.)i(Although)e(such)i(an)g(API)g(w)o(ould)2025
  -1865 y(be)f(not)h(too)f(hard)f(for)h(v)o(endors)f(to)i(pro)o(vide,)e
  -(because)h(in)h(prin-)2025 1965 y(ciple)d(it)h(is)g(just)g(a)g(matter)e
  -(of)h(switching)g(a)h(fe)n(w)f(CPU)h(re)o(gisters)2025
  -2064 y(\(mainly)c(the)h(program)e(counter)h(and)h(the)g(stack)g
  -(pointer\).)2025 2201 y FA(Assembly)k(Code)i(Consider)n(ed)g(Harmful)
  -2025 2319 y Fx(Additionally)-5 b(,)21 b(we)j(disallo)n(w)e(the)h(use)h
  -(of)e(an)o(y)g(assembly)h(solu-)2025 2418 y(tions)c(or)g(platform)e
  -(speci\002c)j(tricks,)f(because)f(then)h(the)g(thread-)2025
  -2518 y(ing)e(system)i(again)d(w)o(ould)h(be)h(only)f(semi-portable,)f
  -Fr(i.e)o(.)p Fx(,)i(it)h(can)2025 2617 y(be)e(ported)f(to)i
  -Fq(N)f Fx(platforms)f(b)n(ut)i(on)f(the)g Fq(\(N+1\))p
  -Fx(th)f(platform)g(one)2025 2717 y(has)28 b(to)g(manually)e(adjust)i
  -(or)f(e)n(v)o(en)g(e)o(xtend)f(it)i(to)g(w)o(ork)f(there,)2025
  -2817 y(too.)2150 2916 y(This)e(is)h(usually)f(not)g(acceptable,)h(e)n
  -(v)o(en)e(if)i(it)g(also)g(mak)o(es)2025 3016 y(solving)20
  -b(the)h(problems)f(harder)-5 b(.)26 b(At)c(least)f(most)g(of)g(the)g
  -(kno)n(wn)2025 3116 y(free)26 b(softw)o(are)g(user)n(-space)g
  -(threading)f(systems)i([22)o(,)f(23)o(,)h(24)o(])2025
  -3215 y(do)15 b(not)g(restrict)h(themself)e(to)i(this)g(and)f(therefore)
  -e(are)j(just)g(semi-)2025 3315 y(portable.)24 b(But)c(real)g
  -(portability)f(should)g(be)h(a)h(major)f(goal.)2025 3589
  -y Fs(2)119 b(Pr)n(oblem)30 b(Analysis)2025 3791 y FA(2.1)99
  -b(The)26 b(T)-9 b(ask)25 b(in)g(Detail)2025 3947 y Fx(Our)d(task)h(is)g
  -(simple)f(in)h(principle:)28 b(pro)o(vide)20 b(an)j(API)f(and)g(cor)n
  -(-)2025 4046 y(responding)f(implementation)f(for)j(creating)f(and)g
  -(dispatching)2025 4146 y(machine)15 b(conte)o(xts)g(on)h(which)g(user)n
  -(-space)g(threads)f(can)h(be)h(im-)2025 4246 y(plemented.)2025
  -4382 y FA(The)26 b(Pr)n(oposed)g(API)2025 4500 y Fx(In)18
  -b(detail)g(we)g(propose)f(the)h(follo)n(wing)e Fr(Application)g(Pr)l(o)
  -o(gr)o(am-)2025 4599 y(mer)o(s)21 b(Interface)f Fx(\(API\))g(for)f(the)
  -h(machine)f(conte)o(xt)g(handling:)p Black 2120 4749
  -50 50 v Black 2233 4749 a(A)25 b(data)g(structure)f(of)g(type)h
  -Fp(mctx)p 3266 4749 25 4 v 29 w(t)g Fx(which)f(holds)h(the)2233
  -4849 y(machine)19 b(conte)o(xt.)p Black 2120 5001 50
  -50 v Black 2233 5001 a(A)95 b(function)e(\223)p Fq(v)o(oid)h
  -Fp(mctx)p 3248 5001 25 4 v 29 w(create\(mctx)p 3827 5001
  -V 28 w(t)2233 5101 y(*)p Fr(mctx)p Fx(,)26 b Fq(v)o(oid)g
  -Fp(\(*)p Fr(sf)p 2825 5101 V 30 w(addr)r Fp(\)\()p Fq(v)o(oid)e(*)p
  -Fp(\),)i Fq(v)o(oid)g Fp(*)p Fr(sf)p 3742 5101 V 30 w(ar)m(g)p
  -Fx(,)2233 5201 y Fq(v)o(oid)c Fp(*)p Fr(sk)p 2531 5201
  -V 30 w(addr)p Fx(,)g Fq(size)p 2891 5201 V 30 w(t)h Fr(sk)p
  -3041 5201 V 30 w(size)p Fp(\))p Fx(\224)g(which)g(creates)f(and)2233
  -5300 y(initializes)17 b(a)h(machine)e(conte)o(xt)f(structure)h(in)i
  -Fr(mctx)f Fx(with)2233 5400 y(a)25 b(start)g(function)e
  -Fr(sf)p 2825 5400 V 31 w(addr)p Fx(,)i(a)g(start)h(function)d(ar)o
  -(gument)p Black 1929 5700 a(2)p Black eop
  +TeXDict begin 2 1 bop Black Black 0 638 a Fx(which)57
  +b(are)g(based)f(on)h(these)g(f)n(acilities)g(are)g(only)h(portable)f
  +(to)0 838 y(those)44 b(platforms.)62 b(This)45 b(situation)g(is)g(not)g
  +(satisf)n(actory)-11 b(,)45 b(so)g(ap-)0 1037 y(plication)53
  +b(authors)h(still)f(a)m(v)m(oid)g(the)g(use)g(of)g(multithreading)i(if)
  +0 1236 y(the)n(y)j(w)n(ant)g(to)g(\(or)h(ha)m(v)n(e)d(to\))j(achie)l(v)
  +n(e)e(maximum)h(portability)0 1435 y(for)42 b(their)g(application.)249
  +1644 y(A)50 b(pragmatic)h(and)f(mostly)g(portable)h(f)n(allback)f
  +(technique)0 1844 y(for)45 b(implementing)h(user)m(-space)d(threads)h
  +(can)h(f)n(acilitate)g(wider)0 2043 y(use)c(of)h(multithreading)g(in)g
  +(free)f(softw)n(are)h(applications.)0 2370 y FA(Ingr)l(edients)50
  +b(of)g(a)g(Thr)l(ead)0 2639 y Fx(A)i(Unix)f(process)g(has)g(man)n(y)g
  +(ingredients,)j(b)m(ut)d(the)h(most)f(im-)0 2838 y(portant)64
  +b(ones)g(are)f(its)h(memory)h(mapping)f(table,)k(the)c(signal)0
  +3037 y(dispatching)39 b(table,)g(the)h(signal)f(mask,)g(the)g(set)g(of)
  +h(\002le)f(descrip-)0 3236 y(tors)61 b(and)f(the)g(machine)g(conte)n
  +(xt.)107 b(The)61 b(machine)f(conte)n(xt)g(in)0 3436
  +y(turn)54 b(consists)e(of)h(at)g(least)f(the)h(CPU)h(re)n(gisters)e
  +(including)h(the)0 3635 y(program)43 b(counter)e(and)h(the)g(stack)f
  +(pointer)-9 b(.)53 b(In)42 b(addition,)g(there)0 3834
  +y(can)56 b(be)h(light-weight)g(processes)e(\(L)-12 b(WP\))58
  +b(or)f(threads,)i(which)0 4033 y(usually)g(share)g(all)h(attrib)m(utes)
  +g(with)f(the)h(underlying)g(\(hea)m(vy-)0 4233 y(weight\))42
  +b(process)e(e)n(xcept)h(for)h(the)f(machine)g(conte)n(xt.)0
  +4560 y FA(K)-5 b(er)m(nel-Space)52 b(vs.)61 b(User)-7
  +b(-Space)0 4828 y Fx(Those)55 b(L)-12 b(WPs)55 b(or)h(threads,)i(on)d
  +(a)h(Unix)f(platform)h(classically)0 5028 y(can)69 b(be)g(implemented)g
  +(either)h(in)f(k)n(ernel-space)g(or)h(in)f(user)m(-)0
  +5227 y(space.)153 b(When)75 b(implemented)h(in)g(k)n(ernel-space,)83
  +b(one)76 b(usu-)0 5426 y(ally)45 b(calls)f(them)h(L)-12
  +b(WPs)45 b(or)g(k)n(ernel)g(threads,)g(otherwise)f(\(user)m(-)0
  +5625 y(space\))38 b(threads.)49 b(If)40 b(threads)e(are)g(implemented)h
  +(by)g(the)f(k)n(ernel,)0 5825 y(the)50 b(thread)f(conte)n(xt)g
  +(switches)g(are)g(performed)h(by)g(the)g(k)n(ernel)0
  +6024 y(without)36 b(notice)g(by)f(the)h(application,)g(similar)g(to)g
  +(the)f(dispatch-)0 6223 y(ing)68 b(of)g(processes.)128
  +b(If)68 b(threads)f(are)h(implemented)g(in)f(user)m(-)0
  +6422 y(space,)40 b(the)h(thread)g(conte)n(xt)g(switches)f(are)h
  +(performed)h(usually)0 6622 y(by)64 b(an)f(application)h(library)g
  +(without)g(notice)g(by)g(the)f(k)n(ernel.)0 6821 y(Additionally)-11
  +b(,)85 b(there)76 b(e)n(xist)f(h)o(ybrid)i(threading)f(approaches,)0
  +7020 y(where)58 b(typically)h(a)g(user)m(-space)e(library)j(binds)e
  +(one)h(or)g(more)0 7219 y(user)m(-space)40 b(threads)h(to)h(one)f(or)h
  +(more)f(k)n(ernel-space)g(L)-12 b(WPs.)0 7547 y FA(Thr)l(ead)50
  +b(Models)0 7815 y Fx(The)57 b(v)n(endor)f(threading)h(f)n(acilities)g
  +(under)g Fr(Sun)g(Solaris)p Fx(,)j Fr(IBM)0 8014 y(AIX)p
  +Fx(,)j Fr(DEC)f(T)-9 b(ru64)62 b Fx(\(formerly)i Fr(DIGIT)-8
  +b(AL)63 b(UNIX)70 b Fx(or)62 b Fr(OSF/1)p Fx(\))0 8214
  +y(and)42 b Fr(SGI)h(IRIX)52 b Fx(use)42 b(a)g Fq(M:N)h
  +Fx(mapping)g([21,)f(30],)h Fr(i.e)n(.)p Fx(,)e Fq(M)h
  +Fx(user)m(-)0 8413 y(space)67 b(threads)g(are)h(mapped)g(onto)g
  +Fq(N)g Fx(k)n(ernel-space)g(L)-12 b(WPs.)0 8612 y(On)42
  +b(the)f(other)h(hand,)g Fr(LinuxThr)-6 b(eads)41 b Fx([29])h(under)g
  +Fr(GNU/Linux)0 8811 y Fx(uses)34 b(a)i Fq(1:1)g Fx(mapping)f(and)h
  +(pure)f(user)m(-space)f(implementations)0 9011 y(lik)n(e)42
  +b Fr(GNU)g(Pth)p Fx(,)g Fr(FSU)g(pthr)-6 b(eads)41 b
  +Fx(or)h Fr(MIT)h(pthr)-6 b(eads)p Fx(,)40 b Fr(etc.)52
  +b Fx(use)41 b(a)0 9210 y Fq(M:1)h Fx(mapping)f([25)q(,)g(22,)g(23].)249
  +9419 y(From)82 b(no)l(w)f(on)g(we)f(focus)h(on)g(such)f
  +Fq(M:1)i Fx(user)e(space)0 9618 y(threading)f(approaches,)87
  +b(where)79 b(one)g(or)h(more)f(user)g(space)0 9817 y(threads)34
  +b(are)g(implemented)g(inside)g(a)h(single)f(k)n(ernel)g(space)f(pro-)0
  +10017 y(cess.)46 b(The)32 b(e)n(x)n(ercise)e(is)h(to)h(implement)g
  +(this)f(by)h(using)f(standard-)0 10216 y(ized)41 b(Unix)h(system)f(and)
  +g(ANSI-C)h(language)f(f)n(acilities)g Fr(only)p Fx(.)0
  +10744 y FA(1.2)198 b(The)50 b(Exer)l(cise)0 11073 y Fx(As)45
  +b(we)h(ha)m(v)n(e)e(mentioned,)i(a)g(thread)g(shares)e(its)i(state)f
  +(with)h(the)0 11272 y(underlying)57 b(process)f(e)n(xcept)g(for)i(the)f
  +(machine)f(conte)n(xt.)97 b(So)p Black Black 4050 638
  +a(the)34 b(major)h(task)e(for)i(a)f(user)m(-space)e(threading)i(system)
  +g(is)g(to)g(cre-)4050 838 y(ate)41 b(and)g(dispatch)g(those)g(machine)g
  +(conte)n(xts.)4299 1037 y(In)35 b(practice,)g(the)f(second)g(major)h
  +(task)f(it)h(has)f(to)g(do)h(is)f(to)h(en-)4050 1236
  +y(sure)42 b(that)h(no)g(thread)f(by)h(accident)f(blocks)g(the)h(whole)f
  +(process)4050 1436 y(\(and)53 b(thereby)f(all)h(other)g(threads\).)84
  +b(Instead)52 b(when)h(an)f(opera-)4050 1635 y(tion)59
  +b(w)n(ould)h(block,)j(the)58 b(threading)i(library)f(should)g(suspend)
  +4050 1834 y(only)40 b(the)g(e)n(x)n(ecution)e(of)i(the)g(current)g
  +(thread)g(and)f(in)h(the)g(mean-)4050 2033 y(time)h(dispatch)f(the)h
  +(remaining)g(threads.)51 b(But)41 b(this)f(task)h(is)g(out-)4050
  +2233 y(side)61 b(the)g(scope)g(of)h(this)f(paper)g(\(see)g([11])h(for)g
  +(details)f(about)4050 2432 y(this)47 b(task\).)68 b(W)-13
  +b(e)47 b(focus)f(only)i(on)f(the)g(aspect)g(of)g(machine)g(con-)4050
  +2631 y(te)n(xt)41 b(handling.)4050 3107 y FA(1.3)198
  +b(The)50 b(Curse)g(of)g(P)l(ortability)4050 3418 y Fx(Our)38
  +b(goal)f(of)h(real)f(portability)i(for)f(a)f(threading)h(system)f
  +(causes)4050 3618 y(some)42 b(non-tri)l(vial)i(problems)f(which)f(ha)m
  +(v)n(e)g(to)h(be)f(solv)n(ed.)54 b(The)4050 3817 y(most)d(ob)n(vious)f
  +(one)h(is)f(that)h(dealing)g(with)g(machine)f(conte)n(xts)4050
  +4016 y(usually)68 b(suf)l(fers)f(from)i(portability)-11
  +b(,)75 b(because)67 b(it)h(is)g(a)g(highly)4050 4215
  +y(CPU)35 b(dependent)f(task)h(for)g(which)g(not)g(e)l(v)n(ery)f(Unix)h
  +(\003a)m(v)m(or)f(pro-)4050 4415 y(vides)51 b(a)f(standardized)h(API.)g
  +(Although)g(such)f(an)h(API)h(w)n(ould)4050 4614 y(be)e(not)g(too)h
  +(hard)f(for)h(v)n(endors)e(to)h(pro)n(vide,)i(because)d(in)h(prin-)4050
  +4813 y(ciple)45 b(it)h(is)f(just)h(a)f(matter)h(of)g(switching)f(a)g
  +(fe)l(w)g(CPU)h(re)n(gisters)4050 5012 y(\(mainly)c(the)f(program)i
  +(counter)e(and)g(the)h(stack)e(pointer\).)4050 5312 y
  +FA(Assembly)49 b(Code)g(Consider)l(ed)i(Harmful)4050
  +5561 y Fx(Additionally)-11 b(,)49 b(we)d(disallo)l(w)h(the)g(use)f(of)i
  +(an)n(y)e(assembly)g(solu-)4050 5760 y(tions)39 b(or)h(platform)g
  +(speci\002c)e(tricks,)i(because)d(then)j(the)f(thread-)4050
  +5959 y(ing)e(system)f(ag)o(ain)h(w)n(ould)g(be)f(only)h(semi-portable,)
  +h Fr(i.e)n(.)p Fx(,)d(it)j(can)4050 6159 y(be)d(ported)h(to)g
  +Fq(N)g Fx(platforms)g(b)m(ut)f(on)h(the)g Fq(\(N+1\))p
  +Fx(th)g(platform)g(one)4050 6358 y(has)56 b(to)h(manually)f(adjust)g
  +(or)h(e)l(v)n(en)e(e)n(xtend)h(it)h(to)g(w)n(ork)g(there,)4050
  +6557 y(too.)4299 6756 y(This)52 b(is)g(usually)g(not)g(acceptable,)h(e)
  +l(v)n(en)d(if)j(it)f(also)f(mak)n(es)4050 6956 y(solving)43
  +b(the)g(problems)g(harder)-9 b(.)56 b(At)43 b(least)g(most)g(of)g(the)g
  +(kno)l(wn)4050 7155 y(free)54 b(softw)n(are)h(user)m(-space)d
  +(threading)j(systems)e([22,)h(23,)g(24])4050 7354 y(do)32
  +b(not)g(restrict)g(themself)g(to)g(this)g(and)f(therefore)i(are)e(just)
  +h(semi-)4050 7553 y(portable.)51 b(But)42 b(real)f(portability)h
  +(should)g(be)f(a)g(major)h(goal.)4050 8114 y Fs(2)239
  +b(Pr)l(oblem)60 b(Analysis)4050 8519 y FA(2.1)198 b(The)50
  +b(T)-18 b(ask)49 b(in)h(Detail)4050 8830 y Fx(Our)c(task)f(is)h(simple)
  +f(in)h(principle:)61 b(pro)n(vide)46 b(an)f(API)h(and)g(cor)m(-)4050
  +9030 y(responding)h(implementation)h(for)f(creating)g(and)g
  +(dispatching)4050 9229 y(machine)33 b(conte)n(xts)g(on)h(which)f(user)m
  +(-space)f(threads)i(can)f(be)g(im-)4050 9428 y(plemented.)4050
  +9727 y FA(The)50 b(Pr)l(oposed)f(API)4050 9977 y Fx(In)38
  +b(detail)f(we)g(propose)g(the)g(follo)l(wing)h Fr(Application)g(Pr)-7
  +b(o)n(gr)n(am-)4050 10176 y(mer)n(s)41 b(Interface)g
  +Fx(\(API\))h(for)g(the)g(machine)f(conte)n(xt)g(handling:)p
  +Black 4241 10541 100 100 v Black 4465 10541 a(A)51 b(data)f(structure)h
  +(of)g(type)g Fp(mctx)p 6531 10541 50 7 v 58 w(t)g Fx(which)f(holds)h
  +(the)4465 10741 y(machine)41 b(conte)n(xt.)p Black 4241
  +11073 100 100 v Black 4465 11073 a(A)190 b(function)h(\223)p
  +Fq(v)n(oid)g Fp(mctx)p 6496 11073 50 7 v 59 w(create\(mctx)p
  +7655 11073 V 55 w(t)4465 11301 y(*)4565 11272 y Fr(mctx)p
  +Fx(,)54 b Fq(v)n(oid)f Fp(\()5430 11301 y(*)5530 11272
  +y Fr(sf)p 5651 11272 V 59 w(addr)t Fp(\)\()p Fq(v)n(oid)e(*)p
  +Fp(\),)k Fq(v)n(oid)7264 11301 y Fp(*)7364 11272 y Fr(sf)p
  +7485 11272 V 59 w(ar)-6 b(g)p Fx(,)p Black 3858 11872
  +a(2)p Black eop end
   %%Page: 3 3
  -3 2 bop Black Black Black 0 3 3864 4 v 0 2441 4 2439
  -v 68 642 a Fw(P)o(ackage)553 642 y
  +TeXDict begin 3 2 bop Black Black Black 0 479 7727 7
  +v 0 5355 7 4877 v 135 1757 a Fw(P)o(ackage)1106 1757
  +y
    gsave currentpoint currentpoint translate 45 neg rotate neg exch neg
   exch translate
  - 553 642 a Fw(Genesis)553
  -642 y
  + 1106 1757 a Fw(Genesis)1106 1757 y
    currentpoint grestore moveto
  - 553 642 a 744 642 a
  + 1106 1757 a 1488
  +1757 a
    gsave currentpoint currentpoint translate 45 neg rotate neg exch neg
   exch translate
  - 744 642 a Fw(Latest)19 b(V)-7
  -b(ersion)744 642 y
  + 1488 1757 a Fw(Latest)37 b(V)-15 b(ersion)1488
  +1757 y
    currentpoint grestore moveto
  - 744 642 a 1010 642 a
  + 1488 1757 a 2020 1757 a
    gsave currentpoint currentpoint translate 45 neg rotate neg exch neg
   exch translate
  - 1010 642 a Fw(Implementation)18
  -b(Space)1010 642 y
  + 2020 1757 a Fw(Implementation)37
  +b(Space)2020 1757 y
    currentpoint grestore moveto
  - 1010 642 a 1404 642 a
  + 2020 1757 a 2808 1757 a
    gsave currentpoint currentpoint translate 45 neg rotate neg exch neg
   exch translate
  - 1404 642 a Fw(Thr)o(ead)g
  -(Mapping)1404 642 y
  + 2808 1757
  +a Fw(Thr)m(ead)h(Mapping)2808 1757 y
    currentpoint grestore moveto
  - 1404 642 a 1562 642 a
  + 2808 1757 a 3123
  +1757 a
    gsave currentpoint currentpoint translate 45 neg rotate neg exch neg
   exch translate
  - 1562 642 a
  -Fw(Acti)o(v)o(e)h(De)o(v)o(elopment)1562 642 y
  + 3123 1757 a Fw(Acti)o(v)o(e)e(De)n(v)o(elopment)3123
  +1757 y
    currentpoint grestore moveto
  - 1562 642
  -a 1703 642 a
  + 3123 1757 a 3406 1757 a
    gsave currentpoint currentpoint translate 45 neg rotate neg exch neg
   exch translate
  - 1703 642 a Fw(Experimental)f(State)1703
  -642 y
  + 3406 1757 a Fw(Experimental)h(State)3406
  +1757 y
    currentpoint grestore moveto
  - 1703 642 a 1844 642 a
  + 3406 1757 a 3688 1757 a
    gsave currentpoint currentpoint translate 45 neg rotate neg exch neg
   exch translate
  - 1844 642 a Fw(Open)g(Sour)o(ce)1844
  -642 y
  + 3688 1757 a Fw(Open)h(Sour)m(ce)3688
  +1757 y
    currentpoint grestore moveto
  - 1844 642 a 1985 642 a
  + 3688 1757 a 3970 1757 a
    gsave currentpoint currentpoint translate 45 neg rotate neg exch neg
   exch translate
  - 1985 642 a Fw(Pthr)o(ead)g(API)1985
  -642 y
  + 3970 1757 a Fw(Pthr)m(ead)g(API)3970
  +1757 y
    currentpoint grestore moveto
  - 1985 642 a 2126 642 a
  + 3970 1757 a 4252 1757 a
    gsave currentpoint currentpoint translate 45 neg rotate neg exch neg
   exch translate
  - 2126 642 a Fw(Pthr)o(ead)g(Shar)o(ed)g
  -(Memory)2126 642 y
  + 4252 1757 a Fw(Pthr)m(ead)h(Shar)m(ed)f
  +(Memory)4252 1757 y
    currentpoint grestore moveto
  - 2126 642 a 2267 642 a
  + 4252 1757 a 4535 1757 a
    gsave currentpoint currentpoint translate 45 neg rotate neg exch neg
   exch translate
  - 2267 642 a Fw(Nati)o(v)o(e)i
  -(API)2267 642 y
  + 4535 1757
  +a Fw(Nati)o(v)o(e)d(API)4535 1757 y
    currentpoint grestore moveto
  - 2267 642 a 2408 642 a
  + 4535 1757 a 4817
  +1757 a
    gsave currentpoint currentpoint translate 45 neg rotate neg exch neg
   exch translate
  - 2408 642 a Fw(Nati)o(v)o(e)g(API)
  -e Fo(\025)h Fw(Pthr)o(ead)f(API)2408 642 y
  + 4817 1757 a Fw(Nati)o(v)o(e)g(API)j Fo(\025)g
  +Fw(Pthr)m(ead)g(API)4817 1757 y
    currentpoint grestore moveto
  - 2408 642 a
  -2550 642 a
  + 4817 1757 a 5099 1757
  +a
    gsave currentpoint currentpoint translate 45 neg rotate neg exch neg
   exch translate
  - 2550 642 a Fw(Nati)o(v)o(e)h(API)g(is)f(Pthr)o(ead)g(API)
  -2550 642 y
  + 5099 1757 a Fw(Nati)o(v)o(e)d(API)j(is)f(Pthr)m(ead)h(API)5099
  +1757 y
    currentpoint grestore moveto
  - 2550 642 a 2765 642 a
  + 5099 1757 a 5531 1757 a
    gsave currentpoint currentpoint translate 45 neg rotate neg exch neg
   exch translate
  - 2765 642 a Fw(Pr)o(eempti)o(v)o(e)h
  -(Scheduling)2765 642 y
  + 5531 1757 a Fw(Pr)m(eempti)o(v)o(e)g
  +(Scheduling)5531 1757 y
    currentpoint grestore moveto
  - 2765 642 a 2906 642 a
  + 5531 1757 a 5813 1757 a
    gsave currentpoint currentpoint translate 45 neg rotate neg exch neg
   exch translate
  - 2906 642
  -a Fw(P)o(ortability)2906 642 y
  + 5813
  +1757 a Fw(P)m(ortability)5813 1757 y
    currentpoint grestore moveto
  - 2906 642 a 3360 642 a
  + 5813 1757 a 6719
  +1757 a
    gsave currentpoint currentpoint translate 45 neg rotate neg exch neg
   exch translate
  -
  -3360 642 a Fw(Assembly)f(Code)3360 642 y
  + 6719 1757 a Fw(Assembly)g(Code)6719 1757 y
    currentpoint grestore moveto
  - 3360 642 a 3509
  -642 a
  + 6719
  +1757 a 7018 1757 a
    gsave currentpoint currentpoint translate 45 neg rotate neg exch neg
   exch translate
  - 3509 642 a Fw(SysCall)g(Wrap.)3509 642 y
  + 7018 1757 a Fw(SysCall)e(Wrap.)7018
  +1757 y
    currentpoint grestore moveto
  - 3509 642
  -a 47 673 3658 4 v 68 737 a Fv(gnu-pth)254 b(1999)43 b(1.3.5)117
  -b(user)270 b(n:1)63 b(yes)42 b(no)67 b(yes)42 b(yes)g(no)67
  -b(yes)42 b(yes)h(no)141 b(no)67 b(full/mcsc+sjlj)42 b(no)75
  -b(partly)68 820 y(cmu-l)o(wp)221 b(1984)43 b(1.4)173
  -b(user)270 b(n:1)63 b(yes)42 b(no)67 b(yes)42 b(no)67
  -b(-)116 b(yes)42 b(yes)h(partly)e(no)67 b(semi/\002x)o(ed:8)86
  -b(yes)50 b(no)68 903 y(fsu-pthread)146 b(1992)43 b(3.13)136
  -b(user)270 b(n:1)63 b(no)k(no)g(yes)42 b(yes)g(no)67
  -b(no)g(-)117 b(-)190 b(yes)42 b(semi/\002x)o(ed:6)86
  -b(yes)50 b(yes)68 986 y(mit-pthread)137 b(1993)43 b(1.8.9)117
  -b(user)270 b(n:1)63 b(no)k(no)g(yes)42 b(yes)g(no)67
  -b(no)g(-)117 b(-)190 b(yes)42 b(semi/\002x)o(ed:17)49
  -b(yes)h(yes)68 1069 y(ptl)406 b(1997)43 b(990622)h(user)270
  -b(n:1)63 b(no)k(no)g(yes)42 b(yes)g(no)67 b(no)g(-)117
  -b(-)190 b(yes)42 b(semi/\002x)o(ed:10)49 b(yes)h(yes)68
  -1152 y(linuxthreads)117 b(1997)43 b(2.1.2)117 b(user+k)o(ernel)43
  -b(1:1)63 b(yes)42 b(no)67 b(yes)42 b(yes)g(no)67 b(no)g(-)117
  -b(-)190 b(yes)42 b(semi/\002x)o(ed:5)86 b(yes)50 b(yes)68
  -1235 y(uthread)262 b(1998)43 b(3.4)173 b(user)270 b(n:1)63
  -b(yes)42 b(no)67 b(yes)42 b(yes)g(no)67 b(no)g(-)117
  -b(-)190 b(yes)42 b(semi/\002x)o(ed:2)86 b(yes)50 b(yes)68
  -1318 y(cthread)266 b(1991)43 b(991115)h(user)270 b(n:1)63
  -b(no)k(no)g(yes)42 b(no)67 b(-)116 b(yes)42 b(yes)h(no)141
  -b(no)67 b(semi/\002x)o(ed:8)86 b(yes)50 b(yes)68 1401
  -y(openthreads/qt)d(1996)c(2.0)173 b(user)270 b(n:1)63
  -b(no)k(no)g(yes)42 b(no)67 b(-)116 b(yes)42 b(no)68 b(no)141
  -b(no)67 b(semi/\002x)o(ed:9)86 b(yes)50 b(no)68 1484
  -y(rt++/qt)276 b(1996)43 b(1.0)173 b(user)270 b(n:1)63
  -b(no)k(no)g(yes)42 b(no)67 b(-)116 b(yes)42 b(yes)h(no)141
  -b(no)67 b(semi/\002x)o(ed:9)86 b(yes)50 b(no)68 1567
  -y(rsthreads)216 b(1996)43 b(980331)h(user)270 b(n:1)63
  -b(no)k(yes)42 b(yes)g(no)67 b(-)116 b(yes)42 b(no)68
  -b(no)141 b(no)67 b(semi/\002x)o(ed:9)86 b(yes)50 b(no)68
  -1650 y(pcthread)229 b(1996)43 b(1.0)173 b(user)270 b(n:1)63
  -b(no)k(yes)42 b(yes)g(yes)g(no)67 b(no)g(-)117 b(-)190
  -b(yes)42 b(semi/\002x)o(ed:1)86 b(yes)50 b(no)68 1733
  -y(bbthreads)196 b(1996)43 b(0.3)173 b(k)o(ernel)209 b(1:1)63
  -b(no)k(yes)42 b(yes)g(no)67 b(-)116 b(yes)42 b(no)68
  -b(-)190 b(yes)42 b(semi/\002x)o(ed:1)86 b(yes)50 b(no)68
  -1816 y(jkthreads)212 b(1998)43 b(1.2)173 b(k)o(ernel)209
  -b(1:1)63 b(no)k(yes)42 b(yes)g(no)67 b(-)116 b(yes)42
  -b(no)68 b(-)190 b(yes)42 b(semi/\002x)o(ed:1)86 b(yes)50
  -b(no)68 1899 y(nthreads)233 b(1997)43 b(970604)h(user)270
  -b(n:1)63 b(no)k(yes)42 b(yes)g(no)67 b(-)116 b(yes)42
  -b(no)68 b(-)190 b(no)67 b(semi/\002x)o(ed:9)86 b(yes)50
  -b(partly)68 1982 y(re)o(xthreads)176 b(1993)43 b(930614)h(user)270
  -b(n:1)63 b(no)k(yes)42 b(yes)g(no)67 b(-)116 b(yes)42
  -b(no)68 b(-)190 b(no)67 b(semi/\002x)o(ed:4)86 b(yes)50
  -b(no)68 2065 y(coro)353 b(1999)43 b(1.0.3)117 b(user)270
  -b(n:1)63 b(no)k(yes)42 b(yes)g(no)67 b(-)116 b(yes)42
  -b(no)68 b(-)190 b(no)67 b(semi/\002x)o(ed:1)86 b(yes)50
  -b(no)68 2148 y(greenthreads)105 b(1995)43 b(1.2)173 b(user)270
  -b(n:1)63 b(no)k(no)g(no)g(no)g(-)116 b(yes)42 b(yes)h(-)190
  -b(yes)42 b(full/mcsc)176 b(no)75 b(no)68 2231 y(solaris-pthread)42
  -b(NN)83 b(2.7)173 b(user+k)o(ernel)43 b(n:m)f(yes)g(no)67
  -b(no)g(yes)42 b(yes)g(yes)g(yes)h(no)141 b(yes)42 b(NN)346
  -b(NN)41 b(yes)68 2314 y(tru64-pthread)80 b(NN)j(5.0)173
  -b(user+k)o(ernel)43 b(n:m)f(yes)g(no)67 b(no)g(yes)42
  -b(yes)g(no)67 b(no)h(no)141 b(yes)42 b(NN)346 b(NN)41
  -b(yes)68 2397 y(aix-pthread)146 b(NN)83 b(4.3)173 b(user+k)o(ernel)43
  -b(1:1)63 b(yes)42 b(no)67 b(no)g(yes)42 b(yes)g(no)67
  -b(no)h(no)141 b(yes)42 b(NN)346 b(NN)41 b(yes)p 3860
  -2441 4 2439 v 0 2444 3864 4 v 0 2532 a Fn(T)-6 b(able)18
  -b(1:)67 b Fm(Summary)20 b(of)h(e)n(v)n(aluated)j(multithreading)g
  -(packages)f(and)e(some)g(of)f(their)i(determined)h(characteristics.)36
  -b(Notice)22 b(that)g(mostly)f(all)h(packages)g(contain)295
  -2600 y(assembly)17 b(code)h(and)g(are)g(just)f(semi-portable,)j
  -Fl(i.e)o(.)p Fm(,)c(the)o(y)i(support)g(only)g(a)f(\002x)o(ed)g(set)g
  -(of)g(platforms)i(and)e(do)g(not)h(automatically)j(adjust)d(for)f(ne)n
  -(w)h(ones.)p Black 208 2864 a Fr(sf)p 268 2864 25 4 v
  -30 w(ar)m(g)p Fx(,)36 b(and)d(a)h(stack)f(starting)g(at)h
  -Fr(sk)p 1343 2864 V 30 w(addr)p Fx(,)i(which)d(is)208
  -2963 y Fr(sk)p 282 2963 V 30 w(size)21 b Fx(bytes)f(in)g(size.)p
  -Black 95 3115 50 50 v Black 208 3115 a(A)i(function)f(\223)p
  -Fq(v)o(oid)h Fp(mctx)p 1006 3115 25 4 v 30 w(save\(mctx)p
  -1486 3115 V 28 w(t)h(*)p Fr(mctx)p Fp(\))p Fx(\224)208
  -3215 y(which)j(sa)n(v)o(es)i(the)g(current)e(machine)g(conte)o(xt)g
  -(into)i(the)208 3314 y(machine)19 b(conte)o(xt)g(structure)g
  -Fr(mctx)p Fx(.)p Black 95 3466 50 50 v Black 208 3466
  -a(A)78 b(function)e(\223)p Fq(v)o(oid)i Fp(mctx)p 1173
  -3466 25 4 v 30 w(restore\(mctx)p 1803 3466 V 27 w(t)208
  -3566 y(*)p Fr(mctx)p Fp(\))p Fx(\224)40 b(which)g(restores)g(the)h(ne)n
  -(w)f(machine)f(con-)208 3666 y(te)o(xt)18 b(from)g(the)h(machine)e
  -(conte)o(xt)h(structure)g Fr(mctx)p Fx(.)24 b(This)208
  -3765 y(function)29 b(does)i(not)g(return)f(to)h(the)h(caller)-5
  -b(.)58 b(Instead)31 b(it)208 3865 y(does)18 b(return)g(at)i(the)f
  -(location)g(stored)f(in)i Fr(mctx)f Fx(\(which)g(is)208
  -3964 y(either)d Fr(sf)p 474 3964 V 30 w(addr)i Fx(from)e(a)h(pre)n
  -(vious)f Fp(mctx)p 1415 3964 V 29 w(create)g Fx(call)208
  -4064 y(or)j(the)i(location)e(of)h(a)g(pre)n(vious)f Fp(mctx)p
  -1365 4064 V 29 w(save)h Fx(call\).)p Black 95 4216 50
  -50 v Black 208 4216 a(A)95 b(function)e(\223)p Fq(v)o(oid)h
  -Fp(mctx)p 1223 4216 25 4 v 29 w(switch\(mctx)p 1802 4216
  -V 28 w(t)208 4316 y(*)p Fr(mctx)p 420 4316 V 29 w(old)p
  -Fx(,)19 b Fp(mctx)p 796 4316 V 29 w(t)h(*)p Fr(mctx)p
  -1102 4316 V 30 w(ne)o(w)p Fp(\))p Fx(\224)f(which)g(switches)208
  -4415 y(from)59 b(the)i(current)e(machine)g(conte)o(xt)h(\(sa)n(v)o(ed)f
  -(to)208 4515 y Fr(mctx)p 370 4515 V 29 w(old)28 b Fx(for)e(later)g
  -(use\))g(to)g(a)h(ne)n(w)f(conte)o(xt)f(\(restored)208
  -4615 y(from)c Fr(mctx)p 554 4615 V 30 w(ne)o(w)p Fx(\).)31
  -b(This)22 b(function)f(returns)g(only)h(to)h(the)208
  -4714 y(caller)39 b(if)h Fp(mctx)p 728 4714 V 30 w(restore)f
  -Fx(or)g Fp(mctx)p 1456 4714 V 29 w(switch)h Fx(is)208
  -4814 y(again)19 b(used)h(on)f Fr(mctx)p 846 4814 V 30
  -w(old)p Fx(.)0 5045 y FA(2.2)99 b(T)-9 b(echnical)26
  -b(P)n(ossibilities)0 5201 y Fx(Poking)18 b(around)f(in)i(the)f
  -(references)g(of)g(the)h(ANSI-C)g(language)0 5300 y(reference)36
  -b(and)i(the)g(Unix)f(standards)g(sho)n(w)h(the)g(follo)n(wing)0
  -5400 y(functions)19 b(on)h(which)f(an)h(implementation)e(can)i(be)g
  -(based:)p Black 2120 2864 50 50 v Black 2233 2864 a(There)55
  -b(is)h(the)g Fp(ucontext)p Fx(\(3\))e(f)o(acility)i(with)g(the)2233
  -2963 y(functions)34 b Fp(getcontext)p Fx(\(3\),)j Fp(makecontext)p
  -Fx(\(3\),)2233 3063 y Fp(swapcontext)p Fx(\(3\))31 b(and)j
  -Fp(setcontext)p Fx(\(3\))e(which)2233 3162 y(conform)21
  -b(to)j(the)g Fr(Single)f(Unix)h(Speci\002cation)p Fx(,)e(V)-9
  -b(ersion)2233 3262 y(2)38 b(\()p Fr(SUSv2)e Fx([20)o(],)42
  -b(aka)c Fr(Unix95/98)p Fx(\).)76 b(Unfortunately)2233
  -3362 y(these)16 b(are)g(a)n(v)n(ailable)f(on)h(modern)e(Unix)h
  -(platforms)g(only)-5 b(.)p Black 2120 3625 V Black 2233
  -3625 a(There)87 b(are)h(the)h Fp(jmp)p 3051 3625 25 4
  -v 29 w(buf)f Fx(based)g(functions)2233 3724 y Fp(setjmp)p
  -Fx(\(3\))29 b(and)h Fp(longjmp)p Fx(\(3\))f(which)i(conform)d(to)2233
  -3824 y(ISO)41 b(9899:1990)c(\(ISO-C\))k(and)f(the)h Fp(sigjmp)p
  -3727 3824 V 29 w(buf)2233 3924 y Fx(based)71 b Fp(sigsetjmp)p
  -Fx(\(3\))f(and)i Fp(siglongjmp)p Fx(\(3\))2233 4023 y(functions)17
  -b(which)h(conform)f(to)i(IEEE)f(Std1003.1-1988)2233 4123
  -y(\()p Fr(POSIX)t Fx(\),)f(and)j Fr(Single)f(Unix)h(Speci\002cation)p
  -Fx(,)d(V)-9 b(ersion)19 b(2)2233 4222 y(\()p Fr(SUSv2)j
  -Fx([20)o(],)j(aka)f Fr(Unix95/98)p Fx(\).)35 b(The)24
  -b(\002rst)h(tw)o(o)g(func-)2233 4322 y(tions)17 b(are)h(a)n(v)n
  -(ailable)f(really)h(on)f(all)h(Unix)g(platforms,)f(the)2233
  -4422 y(last)k(tw)o(o)f(are)g(a)n(v)n(ailable)g(only)f(on)h(some)g(of)g
  -(them.)2233 4603 y(On)h(some)h(platforms)e Fp(setjmp)p
  -Fx(\(3\))g(and)i Fp(longjmp)p Fx(\(3\))2233 4703 y(sa)n(v)o(e)45
  -b(and)h(restore)f(also)h(the)f(signal)h(mask)f(\(if)h(one)2233
  -4802 y(does)e(not)g(w)o(ant)g(this)h(semantics,)50 b(one)44
  -b(has)h(to)f(call)p 2233 4902 V 2257 4902 a Fp(setjmp)p
  -Fx(\(3\))36 b(and)p 2854 4902 V 67 w Fp(longjmp)p Fx(\(3\))g(there\))g
  -(while)i(on)2233 5001 y(others)23 b(one)h(has)g(to)g(e)o(xplicitly)g
  -(use)g(the)g(superset)g(func-)2233 5101 y(tions)36 b
  -Fp(sigsetjmp)p Fx(\(3\))f(and)h Fp(siglongjmp)p Fx(\(3\))e(for)2233
  -5201 y(this.)115 b(In)50 b(our)f(discussion)h(we)g(can)g(assume)g(that)
  -2233 5300 y Fp(setjmp)p Fx(\(3\))40 b(and)j Fp(longjmp)p
  -Fx(\(3\))d(sa)n(v)o(e)j(and)f(restore)2233 5400 y(the)36
  -b(signal)f(mask,)40 b(because)35 b(if)h(this)h(is)g(not)e(the)h(case)p
  -Black 1929 5700 a(3)p Black eop
  + 7018 1757 a 94 1819 7315 7 v 135 1947 a Fv(gnu-pth)504
  +b(1999)82 b(1.3.5)233 b(user)539 b(n:1)123 b(yes)84 b(no)132
  +b(yes)83 b(yes)g(no)133 b(yes)83 b(yes)g(no)282 b(no)132
  +b(full/mcsc+sjlj)81 b(no)149 b(partly)135 2113 y(cmu-l)o(wp)440
  +b(1984)82 b(1.4)345 b(user)539 b(n:1)123 b(yes)84 b(no)132
  +b(yes)83 b(no)132 b(-)233 b(yes)83 b(yes)g(partly)f(no)132
  +b(semi/\002x)n(ed:8)168 b(yes)100 b(no)135 2279 y(fsu-pthread)289
  +b(1992)82 b(3.13)270 b(user)539 b(n:1)123 b(no)133 b(no)f(yes)83
  +b(yes)g(no)133 b(no)f(-)232 b(-)382 b(yes)83 b(semi/\002x)n(ed:6)168
  +b(yes)100 b(yes)135 2445 y(mit-pthread)272 b(1993)82
  +b(1.8.9)233 b(user)539 b(n:1)123 b(no)133 b(no)f(yes)83
  +b(yes)g(no)133 b(no)f(-)232 b(-)382 b(yes)83 b(semi/\002x)n(ed:17)93
  +b(yes)100 b(yes)135 2611 y(ptl)812 b(1997)82 b(990622)g(user)539
  +b(n:1)123 b(no)133 b(no)f(yes)83 b(yes)g(no)133 b(no)f(-)232
  +b(-)382 b(yes)83 b(semi/\002x)n(ed:10)93 b(yes)100 b(yes)135
  +2777 y(linuxthreads)230 b(1997)82 b(2.1.2)233 b(user+k)o(ernel)82
  +b(1:1)123 b(yes)84 b(no)132 b(yes)83 b(yes)g(no)133 b(no)f(-)232
  +b(-)382 b(yes)83 b(semi/\002x)n(ed:5)168 b(yes)100 b(yes)135
  +2943 y(uthread)522 b(1998)82 b(3.4)345 b(user)539 b(n:1)123
  +b(yes)84 b(no)132 b(yes)83 b(yes)g(no)133 b(no)f(-)232
  +b(-)382 b(yes)83 b(semi/\002x)n(ed:2)168 b(yes)100 b(yes)135
  +3109 y(cthread)531 b(1991)82 b(991115)g(user)539 b(n:1)123
  +b(no)133 b(no)f(yes)83 b(no)132 b(-)233 b(yes)83 b(yes)g(no)282
  +b(no)132 b(semi/\002x)n(ed:8)168 b(yes)100 b(yes)135
  +3275 y(openthreads/qt)89 b(1996)82 b(2.0)345 b(user)539
  +b(n:1)123 b(no)133 b(no)f(yes)83 b(no)132 b(-)233 b(yes)83
  +b(no)132 b(no)282 b(no)132 b(semi/\002x)n(ed:9)168 b(yes)100
  +b(no)135 3441 y(rt++/qt)552 b(1996)82 b(1.0)345 b(user)539
  +b(n:1)123 b(no)133 b(no)f(yes)83 b(no)132 b(-)233 b(yes)83
  +b(yes)g(no)282 b(no)132 b(semi/\002x)n(ed:9)168 b(yes)100
  +b(no)135 3607 y(rsthreads)431 b(1996)82 b(980331)g(user)539
  +b(n:1)123 b(no)133 b(yes)83 b(yes)g(no)132 b(-)233 b(yes)83
  +b(no)132 b(no)282 b(no)132 b(semi/\002x)n(ed:9)168 b(yes)100
  +b(no)135 3773 y(pcthread)456 b(1996)82 b(1.0)345 b(user)539
  +b(n:1)123 b(no)133 b(yes)83 b(yes)g(yes)g(no)133 b(no)f(-)232
  +b(-)382 b(yes)83 b(semi/\002x)n(ed:1)168 b(yes)100 b(no)135
  +3939 y(bbthreads)389 b(1996)82 b(0.3)345 b(k)o(ernel)415
  +b(1:1)123 b(no)133 b(yes)83 b(yes)g(no)132 b(-)233 b(yes)83
  +b(no)132 b(-)382 b(yes)83 b(semi/\002x)n(ed:1)168 b(yes)100
  +b(no)135 4105 y(jkthreads)422 b(1998)82 b(1.2)345 b(k)o(ernel)415
  +b(1:1)123 b(no)133 b(yes)83 b(yes)g(no)132 b(-)233 b(yes)83
  +b(no)132 b(-)382 b(yes)83 b(semi/\002x)n(ed:1)168 b(yes)100
  +b(no)135 4271 y(nthreads)464 b(1997)82 b(970604)g(user)539
  +b(n:1)123 b(no)133 b(yes)83 b(yes)g(no)132 b(-)233 b(yes)83
  +b(no)132 b(-)382 b(no)132 b(semi/\002x)n(ed:9)168 b(yes)100
  +b(partly)135 4437 y(re)n(xthreads)350 b(1993)82 b(930614)g(user)539
  +b(n:1)123 b(no)133 b(yes)83 b(yes)g(no)132 b(-)233 b(yes)83
  +b(no)132 b(-)382 b(no)132 b(semi/\002x)n(ed:4)168 b(yes)100
  +b(no)135 4603 y(coro)705 b(1999)82 b(1.0.3)233 b(user)539
  +b(n:1)123 b(no)133 b(yes)83 b(yes)g(no)132 b(-)233 b(yes)83
  +b(no)132 b(-)382 b(no)132 b(semi/\002x)n(ed:1)168 b(yes)100
  +b(no)135 4769 y(greenthreads)207 b(1995)82 b(1.2)345
  +b(user)539 b(n:1)123 b(no)133 b(no)f(no)g(no)g(-)233
  +b(yes)83 b(yes)g(-)382 b(yes)83 b(full/mcsc)349 b(no)149
  +b(no)135 4935 y(solaris-pthread)81 b(NN)166 b(2.7)345
  +b(user+k)o(ernel)82 b(n:m)g(yes)i(no)132 b(no)g(yes)83
  +b(yes)h(yes)f(yes)g(no)282 b(yes)83 b(NN)690 b(NN)83
  +b(yes)135 5101 y(tru64-pthread)155 b(NN)166 b(5.0)345
  +b(user+k)o(ernel)82 b(n:m)g(yes)i(no)132 b(no)g(yes)83
  +b(yes)h(no)132 b(no)g(no)282 b(yes)83 b(NN)690 b(NN)83
  +b(yes)135 5267 y(aix-pthread)289 b(NN)166 b(4.3)345 b(user+k)o(ernel)82
  +b(1:1)123 b(yes)84 b(no)132 b(no)g(yes)83 b(yes)h(no)132
  +b(no)g(no)282 b(yes)83 b(NN)690 b(NN)83 b(yes)p 7719
  +5355 7 4877 v 0 5362 7727 7 v 0 5537 a Fn(T)-12 b(able)33
  +b(1:)133 b Fm(Summary)42 b(of)f(e)m(v)m(aluated)g(multithreading)i
  +(packages)e(and)g(some)g(of)g(their)g(determined)h(characteristics.)63
  +b(Notice)41 b(that)f(mostly)h(all)g(packages)g(contain)589
  +5673 y(assembly)34 b(code)g(and)g(are)f(just)g(semi-portable,)i
  +Fl(i.e)n(.)p Fm(,)f(the)n(y)g(support)h(only)f(a)f(\002x)n(ed)h(set)f
  +(of)h(platforms)g(and)g(do)g(not)g(automatically)h(adjust)e(for)h(ne)m
  +(w)f(ones.)p Black 415 6199 a Fq(v)n(oid)764 6228 y Fp(*)864
  +6199 y Fr(sk)p 1013 6199 50 7 v 59 w(addr)p Fx(,)47 b
  +Fq(size)p 1734 6199 V 59 w(t)f Fr(sk)p 2033 6199 V 59
  +w(size)p Fp(\))p Fx(\224)f(which)h(creates)f(and)415
  +6399 y(initializes)35 b(a)g(machine)g(conte)n(xt)g(structure)g(in)g
  +Fr(mctx)h Fx(with)415 6598 y(a)51 b(start)g(function)g
  +Fr(sf)p 1602 6598 V 60 w(addr)p Fx(,)h(a)f(start)f(function)i(ar)m
  +(gument)415 6797 y Fr(sf)p 536 6797 V 60 w(ar)-6 b(g)p
  +Fx(,)73 b(and)68 b(a)f(stack)g(starting)h(at)g Fr(sk)p
  +2687 6797 V 59 w(addr)p Fx(,)74 b(which)67 b(is)415 6996
  +y Fr(sk)p 564 6996 V 59 w(size)41 b Fx(bytes)g(in)g(size.)p
  +Black 191 7480 100 100 v Black 415 7480 a(A)46 b(function)g(\223)p
  +Fq(v)n(oid)h Fp(mctx)p 2013 7480 50 7 v 58 w(save\(mctx)p
  +2971 7480 V 56 w(t)3163 7509 y(*)3263 7480 y Fr(mctx)p
  +Fp(\))p Fx(\224)415 7679 y(which)56 b(sa)m(v)n(es)e(the)i(current)g
  +(machine)f(conte)n(xt)h(into)g(the)415 7878 y(machine)41
  +b(conte)n(xt)g(structure)h Fr(mctx)p Fx(.)p Black 191
  +8362 100 100 v Black 415 8362 a(A)157 b(function)h(\223)p
  +Fq(v)n(oid)g Fp(mctx)p 2347 8362 50 7 v 58 w(restore\(mctx)p
  +3605 8362 V 55 w(t)415 8590 y(*)515 8561 y Fr(mctx)p
  +Fp(\))p Fx(\224)81 b(which)h(restores)g(the)g(ne)l(w)f(machine)h(con-)
  +415 8760 y(te)n(xt)38 b(from)i(the)e(machine)h(conte)n(xt)f(structure)g
  +Fr(mctx)p Fx(.)50 b(This)415 8960 y(function)64 b(does)f(not)h(return)g
  +(to)g(the)g(caller)-9 b(.)117 b(Instead)63 b(it)415 9159
  +y(does)39 b(return)h(at)f(the)h(location)f(stored)h(in)f
  +Fr(mctx)h Fx(\(which)f(is)415 9358 y(either)c Fr(sf)p
  +949 9358 V 60 w(addr)j Fx(from)d(a)g(pre)l(vious)f Fp(mctx)p
  +2829 9358 V 59 w(create)e Fx(call)415 9557 y(or)42 b(the)f(location)h
  +(of)g(a)f(pre)l(vious)g Fp(mctx)p 2730 9557 V 58 w(save)f
  +Fx(call\).)p Black 191 10041 100 100 v Black 415 10041
  +a(A)190 b(function)h(\223)p Fq(v)n(oid)g Fp(mctx)p 2446
  +10041 50 7 v 59 w(switch\(mctx)p 3605 10041 V 55 w(t)415
  +10269 y(*)515 10240 y Fr(mctx)p 839 10240 V 59 w(old)p
  +Fx(,)40 b Fp(mctx)p 1592 10240 V 59 w(t)1780 10269 y(*)1880
  +10240 y Fr(mctx)p 2204 10240 V 59 w(ne)n(w)p Fp(\))p
  +Fx(\224)f(which)h(switches)415 10439 y(from)123 b(the)f(current)h
  +(machine)e(conte)n(xt)h(\(sa)m(v)n(ed)f(to)415 10639
  +y Fr(mctx)p 739 10639 V 59 w(old)59 b Fx(for)54 b(later)f(use\))g(to)h
  +(a)f(ne)l(w)g(conte)n(xt)g(\(restored)415 10838 y(from)47
  +b Fr(mctx)p 1108 10838 V 59 w(ne)n(w)p Fx(\).)63 b(This)47
  +b(function)f(returns)g(only)g(to)g(the)415 11037 y(caller)81
  +b(if)g Fp(mctx)p 1457 11037 V 58 w(restore)d Fx(or)j
  +Fp(mctx)p 2912 11037 V 59 w(switch)d Fx(is)415 11236
  +y(ag)o(ain)41 b(used)g(on)h Fr(mctx)p 1693 11236 V 59
  +w(old)p Fx(.)p Black Black 4050 6199 a FA(2.2)198 b(T)-18
  +b(echnical)51 b(P)l(ossibilities)4050 6513 y Fx(Poking)39
  +b(around)g(in)g(the)g(references)f(of)h(the)f(ANSI-C)i(language)4050
  +6712 y(reference)77 b(and)f(the)h(Unix)h(standards)e(sho)l(w)g(the)h
  +(follo)l(wing)4050 6911 y(functions)42 b(on)f(which)g(an)h
  +(implementation)g(can)f(be)g(based:)p Black 4241 7281
  +100 100 v Black 4465 7281 a(There)113 b(is)g(the)f Fp(ucontext)p
  +Fx(\(3\))f(f)n(acility)i(with)g(the)4465 7480 y(functions)73
  +b Fp(getcontext)p Fx(\(3\),)78 b Fp(makecontext)p Fx(\(3\),)4465
  +7679 y Fp(swapcontext)p Fx(\(3\))67 b(and)i Fp(setcontext)p
  +Fx(\(3\))e(which)4465 7879 y(conform)50 b(to)f(the)g
  +Fr(Single)g(Unix)g(Speci\002cation)p Fx(,)h(V)-18 b(ersion)4465
  +8078 y(2)77 b(\()p Fr(SUSv2)g Fx([20)q(],)86 b(aka)76
  +b Fr(Unix95/98)p Fx(\).)159 b(Unfortunately)4465 8277
  +y(these)32 b(are)h(a)m(v)l(ailable)f(on)h(modern)g(Unix)h(platforms)f
  +(only)-11 b(.)p Black 4241 8614 V Black 4465 8614 a(There)178
  +b(are)f(the)h Fp(jmp)p 6101 8614 50 7 v 59 w(buf)e Fx(based)h
  +(functions)4465 8813 y Fp(setjmp)p Fx(\(3\))62 b(and)g
  +Fp(longjmp)p Fx(\(3\))f(which)i(conform)h(to)4465 9012
  +y(ISO)83 b(9899:1990)g(\(ISO-C\))h(and)f(the)g Fp(sigjmp)p
  +7454 9012 V 57 w(buf)4465 9211 y Fx(based)145 b Fp(sigsetjmp)p
  +Fx(\(3\))e(and)i Fp(siglongjmp)p Fx(\(3\))4465 9411 y(functions)39
  +b(which)g(conform)g(to)g(IEEE)h(Std1003.1-1988)4465 9610
  +y(\()p Fr(POSIX)7 b Fx(\),)43 b(and)e Fr(Single)g(Unix)g
  +(Speci\002cation)p Fx(,)g(V)-18 b(ersion)40 b(2)4465
  +9809 y(\()p Fr(SUSv2)50 b Fx([20],)i(aka)d Fr(Unix95/98)p
  +Fx(\).)76 b(The)50 b(\002rst)g(tw)n(o)g(func-)4465 10008
  +y(tions)37 b(are)f(a)m(v)l(ailable)g(really)g(on)h(all)g(Unix)g
  +(platforms,)g(the)4465 10208 y(last)k(tw)n(o)h(are)f(a)m(v)l(ailable)g
  +(only)h(on)f(some)g(of)h(them.)4465 10475 y(On)j(some)f(platforms)h
  +Fp(setjmp)p Fx(\(3\))e(and)h Fp(longjmp)p Fx(\(3\))4465
  +10675 y(sa)m(v)n(e)91 b(and)h(restore)g(also)g(the)h(signal)f(mask)g
  +(\(if)h(one)4465 10874 y(does)c(not)h(w)n(ant)g(this)g(semantics,)100
  +b(one)90 b(has)f(to)h(call)p 4465 11073 V 4515 11073
  +a Fp(setjmp)p Fx(\(3\))74 b(and)p 5708 11073 V 136 w
  +Fp(longjmp)p Fx(\(3\))g(there\))j(while)f(on)4465 11272
  +y(others)106 b(one)h(has)f(to)g(e)n(xplicitly)h(use)e(the)i(superset)p
  +Black 3858 11872 a(3)p Black eop end
   %%Page: 4 4
  -4 3 bop Black Black 208 83 a Fx(in)46 b(practice,)53
  -b(one)46 b(easily)h(can)f(replace)g(them)g(with)208 183
  -y Fp(sigsetjmp)p Fx(\(3\))41 b(and)i Fp(siglongjmp)p
  -Fx(\(3\))e(calls)k(\(if)208 282 y(a)n(v)n(ailable\))30
  -b(or)h(\(if)g(not)g(a)n(v)n(ailable\))f(emulate)h(the)g(miss-)208
  -382 y(ing)d(functionality)g(manually)f(with)j(additional)e
  -Fp(sig-)208 482 y(procmask)p Fx(\(2\))j(calls)i(\(see)h
  -Fp(pth)p 1245 482 25 4 v 29 w(mctx.c)f Fx(in)g Fr(GNU)208
  -581 y(Pth)20 b Fx([25)n(]\).)p Black 95 739 50 50 v Black
  -208 739 a(There)37 b(is)i(the)f(function)e Fp(sigaltstack)p
  -Fx(\(2\))f(which)208 839 y(conforms)f(to)j(the)g Fr(Single)f(Unix)h
  -(Speci\002cation)p Fx(,)h(V)-9 b(er)n(-)208 938 y(sion)34
  -b(2)g(\()p Fr(SUSv2)f Fx([20)n(],)38 b(aka)c Fr(Unix95/98)p
  -Fx(\))e(and)i(its)h(an-)208 1038 y(cestor)25 b(function)f
  -Fp(sigstack)p Fx(\(2\))f(from)h Fr(4.2BSD)p Fx(.)g(The)208
  -1137 y(last)d(one)e(e)o(xists)i(only)e(on)h Fr(BSD)p
  -Fx(-deri)n(v)o(ed)d(platforms,)i(b)n(ut)208 1237 y(the)g(\002rst)h
  -(function)e(already)h(e)o(xists)h(on)f(all)h(current)e(Unix)208
  -1337 y(platforms.)0 1571 y FA(2.3)99 b(Maximum)25 b(P)n(ortability)f
  -(Solution)0 1726 y Fx(The)44 b(maximum)e(portable)h(solution)g(ob)o
  -(viously)f(is)j(to)f(use)0 1826 y(the)j(standardized)f
  -Fp(makecontext)p Fx(\(3\))e(function)i(to)h(cre-)0 1926
  -y(ate)k(threads)f(and)g Fp(switchcontext)p Fx(\(3\))e(or)i
  -Fp(getcon-)0 2025 y(text)p Fx(\(3\)/)p Fp(setcontext)p
  -Fx(\(3\))18 b(to)23 b(dispatch)e(them.)31 b(And)22 b(actu-)0
  -2125 y(ally)h(these)f(are)h(the)f(preferred)f(functions)g(modern)f
  -(user)n(-space)0 2224 y(multithreading)25 b(systems)k(are)e(using.)48
  -b(W)-7 b(e)29 b(could)e(easily)h(im-)0 2324 y(plement)20
  -b(our)g(proposed)f(API)i(as)g(follo)n(wing)e(\(all)i(error)f(checks)0
  -2424 y(omitted)f(for)h(better)g(readability\):)p Black
  -Black 0 2561 a Fk(/*)63 b Fj(mac)o(hine)19 b(context)g(data)g
  -(structure)44 b Fk(*/)0 2635 y Fi(typedef)g(struct)f
  -Fk(mctx_st)h Fo(f)179 2710 y Fk(ucontext_t)f(uc;)0 2785
  -y Fo(g)i Fk(mctx_t;)0 2934 y(/*)63 b Fj(sav)o(e)20 b(mac)o(hine)e
  -(context)45 b Fk(*/)0 3009 y Fi(#define)f Fk(mctx_save\(mctx\))e
  -Fo(n)179 3084 y Fk(\()p Fi(void)p Fk(\)getcontext\(&\(mctx\)->uc\))0
  -3233 y(/*)63 b Fj(restore)20 b(mac)o(hine)e(context)45
  -b Fk(*/)0 3308 y Fi(#define)f Fk(mctx_restore\(mctx\))d
  -Fo(n)179 3383 y Fk(\()p Fi(void)p Fk(\)setcontext\(&\(mctx\)->uc\))0
  -3532 y(/*)63 b Fj(switc)o(h)18 b(mac)o(hine)h(context)45
  -b Fk(*/)0 3607 y Fi(#define)f Fk(mctx_switch\(mctx_old,mctx_new\))39
  -b Fo(n)179 3681 y Fk(\()p Fi(void)p Fk
  -(\)swapcontext\(&\(\(mctx_old\)->uc\),)g Fo(n)986 3756
  -y Fk(&\(\(mctx_new\)->uc\)\))0 3906 y(/*)63 b Fj(create)20
  -b(mac)o(hine)e(context)45 b Fk(*/)0 3980 y Fi(void)f
  -Fk(mctx_create\()179 4055 y(mctx_t)g(*mctx,)179 4130
  -y Fi(void)g Fk(\(*sf_addr\)\()p Fi(void)f Fk(*\),)h Fi(void)g
  -Fk(*sf_arg,)179 4204 y Fi(void)g Fk(*sk_addr,)g(size_t)g(sk_size\))0
  -4279 y Fo(f)179 4429 y Fk(/*)64 b Fj(f)o(etc)o(h)18 b(current)g
  -(context)45 b Fk(*/)179 4503 y(getcontext\(&\(mctx->uc\)\);)179
  -4653 y(/*)64 b Fj(adjust)18 b(to)h(new)f(context)45 b
  -Fk(*/)179 4728 y(mctx->uc.uc_link)491 b(=)44 b(NULL;)179
  -4802 y(mctx->uc.uc_stack.ss_sp)176 b(=)44 b(sk_addr;)179
  -4877 y(mctx->uc.uc_stack.ss_size)86 b(=)44 b(sk_size;)179
  -4952 y(mctx->uc.uc_stack.ss_flags)d(=)j(0;)179 5101 y(/*)64
  -b Fj(mak)n(e)19 b(new)f(context)45 b Fk(*/)179 5176 y
  -(makecontext\(&\(mctx->uc\),)717 5251 y(sf_addr,)f(1,)g(sf_arg\);)179
  -5325 y Fi(return)p Fk(;)0 5400 y Fo(g)2025 83 y Fx(Unfortunately)14
  -b(there)j(are)g(still)h(lots)g(of)f(Unix)f(platforms)g(where)2025
  -183 y(this)43 b(approach)d(cannot)h(be)h(used,)47 b(because)42
  -b(the)g(standard-)2025 282 y(ized)e Fp(ucontext)p Fx(\(3\))d(API)j(is)g
  -(not)g(pro)o(vided)d(by)i(the)h(v)o(en-)2025 382 y(dor)-5
  -b(.)80 b(Actually)38 b(the)h(platform)e(test)i(results)g(for)f
  -Fr(GNU)i(Pth)2025 482 y Fx(\(see)29 b(T)-7 b(able)29
  -b(2)g(belo)n(w\))f(sho)n(wed)g(that)h(only)f(7)h(of)g(21)f(success-)
  -2025 581 y(fully)e(tested)g(Unix)g(\003a)n(v)n(ors)g(pro)o(vided)e(the)
  -i(standardized)e(API)2025 681 y(\()p Fp(makecontext)p
  -Fx(\(3\),)19 b Fr(etc.)p Fx(\).)31 b(On)22 b(all)h(other)f(platforms,)f
  -Fr(GNU)2025 780 y(Pth)31 b Fx(w)o(as)h(forced)e(to)h(use)h(the)f(f)o
  -(allback)f(approach)f(of)i(imple-)2025 880 y(menting)25
  -b(the)h(machine)f(conte)o(xt)f(as)j(we)f(will)h(describe)e(in)i(the)
  -2025 980 y(follo)n(wing.)44 b(Ob)o(viously)25 b(this)j(f)o(allback)e
  -(approach)f(has)i(to)g(use)2025 1079 y(the)36 b(remaining)f(technical)g
  -(possibilities)h(\()p Fp(sigsetjmp)p Fx(\(3\),)2025 1179
  -y Fr(etc.)p Fx(\).)p 2025 1271 1899 4 v 2025 3174 4 1904
  -v 2103 1351 a Fn(Operating)18 b(System)p 2837 1374 4
  -79 v 277 w(Ar)o(chitectur)o(e\(s\))p 3450 1374 V 188
  -w(mcsc)p 3694 1374 V 104 w(sjlj)2103 1430 y Fm(FreeBSD)g(2.x/3.x)p
  -2837 1453 V 339 w(Intel)p 3450 1453 V 494 w(no)p 3694
  -1453 V 177 w(yes)2103 1508 y(FreeBSD)g(3.x)p 2837 1532
  -V 440 w(Intel,)g(Alpha)p 3450 1532 V 298 w(no)p 3694
  -1532 V 177 w(yes)2103 1587 y(NetBSD)g(1.3/1.4)p 2837
  -1611 V 361 w(Intel,)g(PPC,)e(M68K)p 3450 1611 V 135 w(no)p
  -3694 1611 V 177 w(yes)2103 1666 y(OpenBSD)i(2.5/2.6)p
  -2837 1690 V 313 w(Intel,)g(SP)-6 b(ARC)p 3450 1690 V
  -255 w(no)p 3694 1690 V 177 w(yes)2103 1745 y(BSDI)17
  -b(4.0)p 2837 1769 V 536 w(Intel)p 3450 1769 V 494 w(no)p
  -3694 1769 V 177 w(yes)2103 1824 y(Linux)g(2.0.x)g(glibc)h(1.x/2.0)p
  -2837 1848 V 129 w(Intel,)g(SP)-6 b(ARC,)16 b(PPC)p 3450
  -1848 V 104 w(no)p 3694 1848 V 177 w(yes)2103 1903 y(Linux)h(2.2.x)g
  -(glibc)h(2.0/2.1)p 2837 1926 V 129 w(Intel,)g(Alpha,)g(ARM)p
  -3450 1926 V 112 w(no)p 3694 1926 V 177 w(yes)2103 1982
  -y(Sun)f(SunOS)g(4.1.x)p 2837 2005 V 329 w(SP)-6 b(ARC)p
  -3450 2005 V 410 w(no)p 3694 2005 V 177 w(yes)2103 2060
  -y(Sun)17 b(Solaris)h(2.5/2.6/2.7)p 2837 2084 V 181 w(SP)-6
  -b(ARC)p 3450 2084 V 410 w(yes)p 3694 2084 V 155 w(yes)2103
  -2139 y(SCO)17 b(UnixW)-5 b(are)18 b(2.x/7.x)p 2837 2163
  -V 169 w(Intel)p 3450 2163 V 494 w(yes)p 3694 2163 V 155
  -w(yes)2103 2218 y(SCO)f(OpenServ)o(er)i(5.0.x)p 2837
  -2242 V 175 w(Intel)p 3450 2242 V 494 w(no)p 3694 2242
  -V 177 w(yes)2103 2297 y(IBM)e(AIX)g(4.1/4.2/4.3)p 2837
  -2321 V 225 w(RS6000,)g(PPC)p 3450 2321 V 249 w(yes)p
  -3694 2321 V 155 w(yes)2103 2376 y(HP)g(HPUX)f(9.10/10.20)p
  -2837 2400 V 205 w(HPP)-6 b(A)p 3450 2400 V 450 w(no)p
  -3694 2400 V 177 w(yes)2103 2455 y(HP)17 b(HPUX)f(11.0)p
  -2837 2479 V 372 w(HPP)-6 b(A)p 3450 2479 V 450 w(yes)p
  -3694 2479 V 155 w(yes)2103 2534 y(SGI)17 b(IRIX)g(5.3)p
  -2837 2557 V 427 w(MIPS)g(32/64)p 3450 2557 V 292 w(no)p
  -3694 2557 V 177 w(yes)2103 2613 y(SGI)g(IRIX)g(6.2/6.5)p
  -2837 2636 V 326 w(MIPS)g(32/64)p 3450 2636 V 292 w(yes)p
  -3694 2636 V 155 w(yes)2103 2691 y(ISC)g(4.0)p 2837 2715
  -V 584 w(Intel)p 3450 2715 V 494 w(no)p 3694 2715 V 177
  -w(yes)2103 2770 y(Apple)h(MacOS)f(X)p 2837 2794 V 341
  -w(PPC)p 3450 2794 V 496 w(no)p 3694 2794 V 177 w(yes)2103
  -2849 y(DEC)f(OSF1/T)n(ru64)i(4.0/5.0)p 2837 2873 V 103
  -w(Alpha)p 3450 2873 V 453 w(yes)p 3694 2873 V 155 w(yes)2103
  -2928 y(SNI)f(ReliantUNIX)p 2837 2952 V 308 w(MIPS)p 3450
  -2952 V 459 w(yes)p 3694 2952 V 155 w(yes)2103 3007 y(AmigaOS)p
  -2837 3031 V 522 w(M68K)p 3450 3031 V 441 w(no)p 3694
  -3031 V 177 w(yes)p 3921 3174 4 1904 v 2025 3177 1899
  -4 v 2025 3264 a Fn(T)-6 b(able)18 b(2:)67 b Fm(Summary)20
  -b(of)h(operating)j(system)d(support.)33 b(The)20 b(le)n(v)o(el)j(and)f
  -(type)2320 3332 y(of)h(support)h(found)f(on)g(each)i(tested)g
  -(operating)g(system.)39 b Fh(mcsc)p Fm(:)2320 3400 y(functional)168
  -b Fh(makecontext)p Fm(\(3\)/)p Fh(switchcontext)p Fm(\(3\),)2320
  -3466 y Fh(sjlj)p Fm(:)83 b(functional)51 b Fh(setjmp)p
  -Fm(\(3\)/)p Fh(longjmp)p Fm(\(3\))c(or)i Fh(sig-)2320
  -3531 y(setjmp)p Fm(\(3\)/)p Fh(siglongjmp)p Fm(\(3\).)25
  -b(See)19 b(\002le)h Fh(PORTING)d Fm(in)j Fl(GNU)2320
  -3597 y(Pth)c Fm([25)q(])h(for)g(more)g(details.)2025
  -3834 y FA(2.4)99 b(Remaining)25 b(P)n(ossibilities)2025
  -3999 y Fx(Our)f(problem)e(can)i(be)g(di)n(vided)f(into)h(tw)o(o)g
  -(parts,)h(an)f(easy)g(one)2025 4099 y(and)c(a)g(dif)n(\002cult)g(one.)
  -2025 4264 y FA(The)26 b(Easy)f(P)o(art)2025 4399 y Fx(That)k
  -Fp(setjmp)p Fx(\(3\))e(and)h Fp(longjmp)p Fx(\(3\))f(can)i(be)g(used)g
  -(to)g(im-)2025 4498 y(plement)20 b(user)n(-space)g(threads)g(is)i
  -(commonly)c(kno)n(wn)h([24)o(,)i(27)o(,)2025 4598 y(28)o(].)57
  -b(Mostly)31 b(all)g(older)g(portable)e(user)n(-space)h(threading)f(li-)
  -2025 4697 y(braries)c(are)h(based)g(on)f(them,)i(although)d(some)h
  -(problems)g(are)2025 4797 y(kno)n(wn)h(with)h(these)g(f)o(acilities)h
  -(\(see)f(belo)n(w\).)45 b(So)28 b(it)g(becomes)2025 4897
  -y(clear)g(that)f(we)h(also)g(ha)n(v)o(e)f(to)h(use)g(these)g(functions)
  -e(and)h(base)2025 4996 y(our)h(machine)f(conte)o(xt)g(\()p
  -Fp(mctx)p 2980 4996 25 4 v 29 w(t)p Fx(\))i(on)f(their)g
  -Fp(jmp)p 3559 4996 V 29 w(buf)h Fx(data)2025 5096 y(structure.)2150
  -5201 y(W)-7 b(e)39 b(immediately)e(recognize)f(that)j(this)f(w)o(ay)h
  -(we)f(ha)n(v)o(e)2025 5300 y(at)j(least)g(solv)o(ed)f(the)g
  -(dispatching)f(problem,)44 b(because)39 b(our)2025 5400
  -y Fp(mctx)p 2230 5400 V 29 w(save)p Fx(,)73 b Fp(mctx)p
  -2753 5400 V 29 w(restore)62 b Fx(and)g Fp(mctx)p 3577
  -5400 V 29 w(switch)p Black 1929 5700 a Fx(4)p Black eop
  +TeXDict begin 4 3 bop Black Black 415 638 a Fx(functions)66
  +b Fp(sigsetjmp)p Fx(\(3\))d(and)i Fp(siglongjmp)p Fx(\(3\))415
  +838 y(for)108 b(this.)250 b(In)107 b(our)h(discussion)f(we)g(can)g
  +(assume)415 1037 y(that)75 b Fp(setjmp)p Fx(\(3\))f(and)g
  +Fp(longjmp)p Fx(\(3\))g(sa)m(v)n(e)f(and)i(re-)415 1236
  +y(store)69 b(the)g(signal)f(mask,)75 b(because)68 b(if)h(this)g(is)g
  +(not)g(the)415 1435 y(case)95 b(in)h(practice,)108 b(one)95
  +b(easily)h(can)f(replace)g(them)415 1635 y(with)54 b
  +Fp(sigsetjmp)p Fx(\(3\))d(and)j Fp(siglongjmp)p Fx(\(3\))d(calls)415
  +1834 y(\(if)93 b(a)m(v)l(ailable\))f(or)h(\(if)g(not)g(a)m(v)l
  +(ailable\))f(emulate)g(the)415 2033 y(missing)98 b(functionality)h
  +(manually)f(with)g(additional)415 2233 y Fp(sigprocmask)p
  +Fx(\(2\))c(calls)i(\(see)g Fp(pth)p 2877 2233 50 7 v
  +59 w(mctx.c)f Fx(in)415 2432 y Fr(GNU)41 b(Pth)h Fx([25)q(]\).)p
  +Black 191 2772 100 100 v Black 415 2772 a(There)77 b(is)g(the)g
  +(function)h Fp(sigaltstack)p Fx(\(2\))73 b(which)415
  +2971 y(conforms)i(to)g(the)f Fr(Single)h(Unix)f(Speci\002cation)p
  +Fx(,)83 b(V)-18 b(er)m(-)415 3171 y(sion)69 b(2)h(\()p
  +Fr(SUSv2)g Fx([20],)76 b(aka)69 b Fr(Unix95/98)p Fx(\))h(and)g(its)f
  +(an-)415 3370 y(cestor)52 b(function)g Fp(sigstack)p
  +Fx(\(2\))e(from)i Fr(4.2BSD)p Fx(.)g(The)415 3569 y(last)41
  +b(one)g(e)n(xists)f(only)i(on)f Fr(BSD)p Fx(-deri)l(v)n(ed)h
  +(platforms,)f(b)m(ut)415 3768 y(the)f(\002rst)h(function)f(already)g(e)
  +n(xists)f(on)h(all)h(current)f(Unix)415 3968 y(platforms.)0
  +4454 y FA(2.3)198 b(Maximum)50 b(P)l(ortability)g(Solution)0
  +4770 y Fx(The)141 b(maximum)h(portable)f(solution)g(ob)n(viously)g(is)g
  +(to)0 4969 y(use)160 b(the)h(standardized)f Fp(makecontext)p
  +Fx(\(3\))e(function)0 5168 y(to)176 b(create)f(threads)g(and)g
  +Fp(switchcontext)p Fx(\(3\))d(or)0 5367 y Fp(getcontext)p
  +Fx(\(3\)/)p Fp(setcontext)p Fx(\(3\))83 b(to)90 b(dispatch)e(them.)0
  +5567 y(And)65 b(actually)g(these)g(are)g(the)h(preferred)f(functions)h
  +(modern)0 5766 y(user)m(-space)52 b(multithreading)j(systems)e(are)h
  +(using.)88 b(W)-13 b(e)53 b(could)0 5965 y(easily)78
  +b(implement)i(our)f(proposed)g(API)h(as)e(follo)l(wing)i(\(all)0
  +6164 y(error)42 b(checks)e(omitted)i(for)g(better)g(readability\):)p
  +Black Black 0 6490 a Fk(/)90 6516 y(*)306 6490 y Fj(mac)o(hine)c
  +(context)e(data)g(structure)2308 6516 y Fk(*)2398 6490
  +y(/)0 6640 y Fi(typedef)87 b(struct)h Fk(mctx_st)f Fo(f)359
  +6789 y Fk(ucontext_t)f(uc;)0 6939 y Fo(g)j Fk(mctx_t;)0
  +7238 y(/)90 7264 y(*)306 7238 y Fj(sav)n(e)38 b(mac)o(hine)f(context)
  +1713 7264 y Fk(*)1803 7238 y(/)0 7387 y Fi(#define)87
  +b Fk(mctx_save\(mctx\))e Fo(n)359 7536 y Fk(\()p Fi(void)p
  +Fk(\)getcontext\(&\(mctx\)->uc)o(\))0 7835 y(/)90 7861
  +y(*)306 7835 y Fj(restore)38 b(mac)o(hine)f(context)1873
  +7861 y Fk(*)1963 7835 y(/)0 7985 y Fi(#define)87 b Fk
  +(mctx_restore\(mctx\))d Fo(n)359 8134 y Fk(\()p Fi(void)p
  +Fk(\)setcontext\(&\(mctx\)->uc)o(\))0 8433 y(/)90 8459
  +y(*)306 8433 y Fj(switc)o(h)37 b(mac)o(hine)g(context)1838
  +8459 y Fk(*)1928 8433 y(/)0 8583 y Fi(#define)87 b Fk
  +(mctx_switch\(mctx_old,mctx_new\))80 b Fo(n)359 8732
  +y Fk(\()p Fi(void)p Fk(\)swapcontext\(&\(\(mctx_ol)o(d\)-)o(>uc)o(\),)g
  +Fo(n)1973 8881 y Fk(&\(\(mctx_new\)->uc\)\))0 9180 y(/)90
  +9206 y(*)306 9180 y Fj(create)38 b(mac)o(hine)f(context)1823
  +9206 y Fk(*)1913 9180 y(/)0 9330 y Fi(void)88 b Fk(mctx_create\()359
  +9479 y(mctx_t)986 9505 y(*)1076 9479 y(mctx,)359 9629
  +y Fi(void)g Fk(\()897 9655 y(*)987 9629 y(sf_addr\)\()p
  +Fi(void)2242 9655 y Fk(*)2332 9629 y(\),)g Fi(void)3049
  +9655 y Fk(*)3139 9629 y(sf_arg,)359 9778 y Fi(void)807
  +9804 y Fk(*)897 9778 y(sk_addr,)f(size_t)g(sk_size\))0
  +9927 y Fo(f)359 10226 y Fk(/)449 10252 y(*)665 10226
  +y Fj(f)o(etc)o(h)36 b(current)j(context)2039 10252 y
  +Fk(*)2129 10226 y(/)359 10376 y(getcontext\(&\(mctx->uc\)\);)359
  +10675 y(/)449 10701 y(*)665 10675 y Fj(adjust)d(to)h(new)g(context)2055
  +10701 y Fk(*)2145 10675 y(/)359 10824 y(mctx->uc.uc_link)981
  +b(=)89 b(NULL;)359 10974 y(mctx->uc.uc_stack.ss_sp)351
  +b(=)89 b(sk_addr;)359 11123 y(mctx->uc.uc_stack.ss_size)171
  +b(=)89 b(sk_size;)359 11272 y(mctx->uc.uc_stack.ss_flags)81
  +b(=)89 b(0;)p Black Black 4409 788 a(/)4499 814 y(*)4715
  +788 y Fj(mak)l(e)37 b(new)g(context)5905 814 y Fk(*)5995
  +788 y(/)4409 937 y(makecontext\(&\(mctx->uc\),)5485 1087
  +y(sf_addr,)87 b(1,)i(sf_arg\);)4409 1236 y Fi(return)p
  +Fk(;)4050 1386 y Fo(g)4050 1762 y Fx(Unfortunately)36
  +b(there)f(are)g(still)g(lots)h(of)f(Unix)h(platforms)f(where)4050
  +1961 y(this)85 b(approach)h(cannot)f(be)g(used,)96 b(because)84
  +b(the)h(standard-)4050 2160 y(ized)80 b Fp(ucontext)p
  +Fx(\(3\))e(API)j(is)f(not)h(pro)n(vided)f(by)g(the)g(v)n(en-)4050
  +2360 y(dor)-9 b(.)162 b(Actually)78 b(the)g(platform)i(test)e(results)g
  +(for)h Fr(GNU)e(Pth)4050 2559 y Fx(\(see)58 b(T)-13 b(able)59
  +b(2)g(belo)l(w\))g(sho)l(wed)f(that)h(only)g(7)g(of)h(21)f(success-)
  +4050 2758 y(fully)54 b(tested)f(Unix)g(\003a)m(v)m(ors)g(pro)n(vided)h
  +(the)f(standardized)g(API)4050 2957 y(\()p Fp(makecontext)p
  +Fx(\(3\),)43 b Fr(etc.)p Fx(\).)62 b(On)46 b(all)f(other)h(platforms,)g
  +Fr(GNU)4050 3157 y(Pth)64 b Fx(w)n(as)f(forced)h(to)g(use)e(the)i(f)n
  +(allback)g(approach)f(of)g(imple-)4050 3356 y(menting)53
  +b(the)g(machine)g(conte)n(xt)g(as)f(we)h(will)g(describe)g(in)g(the)
  +4050 3555 y(follo)l(wing.)93 b(Ob)n(viously)54 b(this)i(f)n(allback)f
  +(approach)g(has)f(to)i(use)4050 3754 y(the)73 b(remaining)h(technical)f
  +(possibilities)g(\()p Fp(sigsetjmp)p Fx(\(3\),)4050 3954
  +y Fr(etc.)p Fx(\).)p 4050 4114 3798 7 v 4050 7921 7 3807
  +v 4206 4274 a Fn(Operating)34 b(System)p 5674 4322 7
  +158 v 552 w(Ar)n(chitectur)n(e\(s\))p 6901 4322 V 368
  +w(mcsc)p 7387 4322 V 205 w(sjlj)4206 4432 y Fm(FreeBSD)f(2.x/3.x)p
  +5674 4479 V 679 w(Intel)p 6901 4479 V 984 w(no)p 7387
  +4479 V 354 w(yes)4206 4590 y(FreeBSD)g(3.x)p 5674 4637
  +V 881 w(Intel,)h(Alpha)p 6901 4637 V 593 w(no)p 7387
  +4637 V 354 w(yes)4206 4748 y(NetBSD)e(1.3/1.4)p 5674
  +4795 V 724 w(Intel,)i(PPC,)f(M68K)p 6901 4795 V 268 w(no)p
  +7387 4795 V 354 w(yes)4206 4905 y(OpenBSD)g(2.5/2.6)p
  +5674 4953 V 628 w(Intel,)h(SP)-12 b(ARC)p 6901 4953 V
  +507 w(no)p 7387 4953 V 354 w(yes)4206 5063 y(BSDI)33
  +b(4.0)p 5674 5110 V 1073 w(Intel)p 6901 5110 V 984 w(no)p
  +7387 5110 V 354 w(yes)4206 5221 y(Linux)i(2.0.x)g(glibc)e(1.x/2.0)p
  +5674 5268 V 259 w(Intel,)h(SP)-12 b(ARC,)32 b(PPC)p 6901
  +5268 V 205 w(no)p 7387 5268 V 354 w(yes)4206 5379 y(Linux)j(2.2.x)g
  +(glibc)e(2.0/2.1)p 5674 5426 V 259 w(Intel,)h(Alpha,)g(ARM)p
  +6901 5426 V 223 w(no)p 7387 5426 V 354 w(yes)4206 5536
  +y(Sun)g(SunOS)g(4.1.x)p 5674 5584 V 660 w(SP)-12 b(ARC)p
  +6901 5584 V 817 w(no)p 7387 5584 V 354 w(yes)4206 5694
  +y(Sun)34 b(Solaris)f(2.5/2.6/2.7)p 5674 5741 V 363 w(SP)-12
  +b(ARC)p 6901 5741 V 817 w(yes)p 7387 5741 V 309 w(yes)4206
  +5852 y(SCO)33 b(UnixW)-11 b(are)34 b(2.x/7.x)p 5674 5899
  +V 340 w(Intel)p 6901 5899 V 984 w(yes)p 7387 5899 V 309
  +w(yes)4206 6010 y(SCO)f(OpenServ)n(er)h(5.0.x)p 5674
  +6057 V 353 w(Intel)p 6901 6057 V 984 w(no)p 7387 6057
  +V 354 w(yes)4206 6167 y(IBM)f(AIX)g(4.1/4.2/4.3)p 5674
  +6215 V 452 w(RS6000,)i(PPC)p 6901 6215 V 495 w(yes)p
  +7387 6215 V 309 w(yes)4206 6325 y(HP)e(HPUX)g(9.10/10.20)p
  +5674 6372 V 411 w(HPP)-12 b(A)p 6901 6372 V 899 w(no)p
  +7387 6372 V 354 w(yes)4206 6483 y(HP)33 b(HPUX)g(11.0)p
  +5674 6530 V 745 w(HPP)-12 b(A)p 6901 6530 V 899 w(yes)p
  +7387 6530 V 309 w(yes)4206 6641 y(SGI)33 b(IRIX)g(5.3)p
  +5674 6688 V 856 w(MIPS)g(32/64)p 6901 6688 V 583 w(no)p
  +7387 6688 V 354 w(yes)4206 6798 y(SGI)g(IRIX)g(6.2/6.5)p
  +5674 6846 V 654 w(MIPS)g(32/64)p 6901 6846 V 583 w(yes)p
  +7387 6846 V 309 w(yes)4206 6956 y(ISC)g(4.0)p 5674 7003
  +V 1169 w(Intel)p 6901 7003 V 984 w(no)p 7387 7003 V 354
  +w(yes)4206 7114 y(Apple)h(MacOS)f(X)p 5674 7161 V 681
  +w(PPC)p 6901 7161 V 990 w(no)p 7387 7161 V 354 w(yes)4206
  +7271 y(DEC)g(OSF1/T)-5 b(ru64)35 b(4.0/5.0)p 5674 7319
  +V 208 w(Alpha)p 6901 7319 V 903 w(yes)p 7387 7319 V 309
  +w(yes)4206 7429 y(SNI)e(ReliantUNIX)p 5674 7477 V 611
  +w(MIPS)p 6901 7477 V 917 w(yes)p 7387 7477 V 309 w(yes)4206
  +7587 y(Amig)o(aOS)p 5674 7634 V 1044 w(M68K)p 6901 7634
  +V 881 w(no)p 7387 7634 V 354 w(yes)p 7841 7921 7 3807
  +v 4050 7928 3798 7 v 4050 8102 a Fn(T)-12 b(able)33 b(2:)133
  +b Fm(Summary)43 b(of)e(operating)i(system)e(support.)66
  +b(The)42 b(le)m(v)n(el)e(and)i(type)4639 8238 y(of)k(support)h(found)h
  +(on)e(each)g(tested)f(operating)i(system.)78 b Fh(mcsc)p
  +Fm(:)4639 8374 y(functional)331 b Fh(makecontext)p Fm(\(3\)/)p
  +Fh(switchcontext)p Fm(\(3\),)4639 8505 y Fh(sjlj)p Fm(:)165
  +b(functional)98 b Fh(setjmp)p Fm(\(3\)/)p Fh(longjmp)p
  +Fm(\(3\))c(or)i Fh(sig-)4639 8635 y(setjmp)p Fm(\(3\)/)p
  +Fh(siglongjmp)p Fm(\(3\).)51 b(See)37 b(\002le)g Fh(PORTING)e
  +Fm(in)j Fl(GNU)4639 8766 y(Pth)c Fm([25)q(])f(for)i(more)f(details.)
  +4050 9199 y FA(2.4)198 b(Remaining)50 b(P)l(ossibilities)4050
  +9515 y Fx(Our)g(problem)f(can)g(be)g(di)l(vided)h(into)f(tw)n(o)h
  +(parts,)h(an)e(easy)f(one)4050 9715 y(and)41 b(a)h(dif)l(\002cult)g
  +(one.)4050 10022 y FA(The)50 b(Easy)e(P)n(art)4050 10276
  +y Fx(That)59 b Fp(setjmp)p Fx(\(3\))f(and)h Fp(longjmp)p
  +Fx(\(3\))e(can)h(be)h(used)f(to)h(im-)4050 10475 y(plement)43
  +b(user)m(-space)e(threads)h(is)g(commonly)h(kno)l(wn)g([24,)f(27,)4050
  +10675 y(28].)116 b(Mostly)62 b(all)h(older)g(portable)g(user)m(-space)e
  +(threading)i(li-)4050 10874 y(braries)53 b(are)f(based)g(on)h(them,)i
  +(although)e(some)f(problems)h(are)4050 11073 y(kno)l(wn)i(with)h(these)
  +f(f)n(acilities)g(\(see)g(belo)l(w\).)93 b(So)55 b(it)h(becomes)4050
  +11272 y(clear)g(that)h(we)f(also)g(ha)m(v)n(e)f(to)i(use)e(these)h
  +(functions)h(and)f(base)p Black 3858 11872 a(4)p Black
  +eop end
   %%Page: 5 5
  -5 4 bop Black Black 0 83 a Fx(functions)32 b(can)h(be)g(easily)g
  -(implemented)e(with)i Fp(setjmp)p Fx(\(3\))0 183 y(and)20
  -b Fp(longjmp)p Fx(\(3\).)0 358 y FA(The)26 b(Dif\002cult)g(P)o(art)0
  -500 y Fx(Ne)n(v)o(ertheless,)g(the)h(dif)n(\002cult)e(problem)g(of)h
  -(ho)n(w)f(to)i(create)f(the)0 600 y(machine)k(conte)o(xt)f(remains.)56
  -b(Ev)o(en)29 b(kno)n(wing)g(that)i(our)f(ma-)0 699 y(chine)17
  -b(conte)o(xt)f(is)i Fp(jmp)p 687 699 25 4 v 30 w(buf)f
  -Fx(based)g(is)i(no)e(adv)n(antage)e(to)j(us.)24 b(A)0
  -799 y Fp(jmp)p 155 799 V 29 w(buf)18 b Fx(has)f(to)g(be)g(treated)g(by)
  -g(us)g(as)h(an)f(opaque)f(data)h(struc-)0 899 y(ture)26
  -b(\227)h(for)e(portability)g(reasons.)42 b(The)26 b(only)g(operations)e
  -(we)0 998 y(can)15 b(perform)f(on)h(it)h(are)f Fp(setjmp)p
  -Fx(\(3\))f(and)h Fp(longjmp)p Fx(\(3\))e(calls,)0 1098
  -y(of)23 b(course.)32 b(Additionally)-5 b(,)21 b(we)j(are)f(forced)e(to)
  -i(use)g Fp(sigalt-)0 1198 y(stack)p Fx(\(3\))f(for)h(our)g(stack)h
  -(manipulations,)e(because)h(it)h(is)h(the)0 1297 y(only)19
  -b(portable)g(function)g(which)g(actually)h(deals)g(with)h(stacks.)125
  -1406 y(So)33 b(it)g(is)h(clear)f(that)g(our)f(implementation)f(for)h
  -Fp(mctx)p 1801 1406 V 29 w(-)0 1505 y(create)k Fx(has)h(to)g(play)f(a)i
  -(fe)n(w)e(tricks)h(to)g(use)g(a)g Fp(jmp)p 1701 1505
  -V 30 w(buf)0 1605 y Fx(for)44 b(passing)h(e)o(x)o(ecution)e(control)h
  -(to)h(an)g(arbitrary)e(startup)0 1704 y(routine.)82 b(And)39
  -b(our)g(approach)f(has)i(to)g(be)f(careful)g(to)h(en-)0
  -1804 y(sure)51 b(that)h(it)g(does)f(not)h(suf)n(fer)e(from)h(une)o
  -(xpected)e(side-)0 1904 y(ef)n(fects.)131 b(It)56 b(should)e(be)i(also)
  -g(ob)o(vious)d(that)j(we)g(can-)0 2003 y(not)e(again)f(e)o(xpect)g(to)i
  -(\002nd)f(an)g(easy)g(solution)g(\(as)g(for)0 2103 y
  -Fp(mctx)p 205 2103 V 29 w(save)p Fx(,)g Fp(mctx)p 709
  -2103 V 29 w(restore)47 b Fx(and)h Fp(mctx)p 1504 2103
  -V 29 w(switch)p Fx(\),)0 2203 y(because)29 b Fp(setjmp)p
  -Fx(\(3\))f(and)i Fp(sigaltstack)p Fx(\(3\))d(cannot)i(be)0
  -2302 y(tri)n(vially)20 b(combined)e(to)i(form)f Fp(mctx)p
  -1102 2302 V 29 w(create)p Fx(.)0 2630 y Fs(3)119 b(Implementation)0
  -2833 y Fx(As)24 b(we)g(ha)n(v)o(e)f(already)g(discussed,)g(our)g
  -(implementation)e(con-)0 2932 y(tains)31 b(an)f(easy)h(part)f(\()p
  -Fp(mctx)p 869 2932 V 29 w(save)p Fx(,)i Fp(mctx)p 1351
  -2932 V 29 w(restore)e Fx(and)0 3032 y Fp(mctx)p 205 3032
  -V 29 w(switch)p Fx(\))i(and)h(a)h(dif)n(\002cult)e(part)h(\()p
  -Fp(mctx)p 1504 3032 V 29 w(create)p Fx(\).)0 3131 y(Let)23
  -b(us)h(start)f(with)g(the)g(easy)g(part,)g(whose)g(implementation)e(is)
  -0 3231 y(ob)o(vious)26 b(\(all)i(error)e(checks)i(again)e(omitted)h
  -(for)g(better)g(read-)0 3331 y(ability\):)p Black Black
  -0 3532 a Fk(/*)63 b Fj(mac)o(hine)19 b(context)g(data)g(structure)44
  -b Fk(*/)0 3607 y Fi(typedef)g(struct)f Fk(mctx_st)h Fo(f)179
  -3681 y Fk(jmp_buf)g(jb;)0 3756 y Fo(g)h Fk(mctx_t;)0
  -3906 y(/*)63 b Fj(sav)o(e)20 b(mac)o(hine)e(context)45
  -b Fk(*/)0 3980 y Fi(#define)f Fk(mctx_save\(mctx\))e
  -Fo(n)179 4055 y Fk(\()p Fi(void)p Fk(\)setjmp\(\(mctx\)->jb\))0
  -4204 y(/*)63 b Fj(restore)20 b(mac)o(hine)e(context)45
  -b Fk(*/)0 4279 y Fi(#define)f Fk(mctx_restore\(mctx\))d
  -Fo(n)179 4354 y Fk(longjmp\(\(mctx\)->jb,)h(1\))0 4503
  -y(/*)63 b Fj(switc)o(h)18 b(mac)o(hine)h(context)45 b
  -Fk(*/)0 4578 y Fi(#define)f Fk(mctx_switch\(mctx_old,mctx_new\))39
  -b Fo(n)179 4653 y Fi(if)45 b Fk(\(setjmp\(\(mctx_old\)->jb\))c(==)j
  -(0\))h Fo(n)359 4728 y Fk(longjmp\(\(mctx_new\)->jb,)c(1\))0
  -4877 y(/*)63 b Fj(create)20 b(mac)o(hine)e(context)45
  -b Fk(*/)0 4952 y Fi(void)f Fk(mctx_create\()179 5026
  -y(mctx_t)g(*mctx,)179 5101 y Fi(void)g Fk(\(*sf_addr\)\()p
  -Fi(void)f Fk(*\),)h Fi(void)g Fk(*sf_arg,)179 5176 y
  -Fi(void)g Fk(*sk_addr,)g(size_t)g(sk_size\))0 5251 y
  -Fo(f)198 5325 y Fj(...initialization)16 b(of)j Fg(mctx)f
  -Fj(to)h(be)g(\002lled)f(in...)0 5400 y Fo(g)2025 83 y
  -Fx(There)23 b(is)i(one)f(subtle)f(b)n(ut)h(important)f(point)g(we)h
  -(should)f(men-)2025 183 y(tion:)45 b(The)30 b(use)h(of)f(the)h(C)g
  -(pre-processor)d Fp(#define)h Fx(direc-)2025 282 y(ti)n(v)o(e)36
  -b(to)g(implement)f Fp(mctx)p 2881 282 V 29 w(save)p Fx(,)40
  -b Fp(mctx)p 3371 282 V 29 w(restore)35 b Fx(and)2025
  -382 y Fp(mctx)p 2230 382 V 29 w(switch)40 b Fx(is)i(intentional.)86
  -b(F)o(or)40 b(technical)g(reasons)2025 482 y(related)35
  -b(to)h Fp(setjmp)p Fx(\(3\))e(semantics)h(and)g Fp(return)g
  -Fx(related)2025 581 y(stack)h(beha)n(vior)e(\(which)h(we)i(will)f(e)o
  -(xplain)f(later)h(in)g(detail\))2025 681 y(we)25 b Fr(cannot)g
  -Fx(implement)f(these)h(three)g(functions)e(\(at)i(least)h(not)2025
  -780 y Fp(mctx)p 2230 780 V 29 w(switch)p Fx(\))32 b(as)h(C)g(functions)
  -e(if)h(we)h(w)o(ant)f(to)h(achie)n(v)o(e)2025 880 y(maximum)25
  -b(portability)g(across)i(all)g(platforms.)43 b(Instead)26
  -b(the)o(y)2025 980 y(ha)n(v)o(e)20 b(to)g(be)g(implemented)e(as)j
  -(pre-processor)d(macros.)2025 1217 y FA(3.1)99 b(Algorithm)25
  -b(Ov)o(er)o(view)2025 1373 y Fx(The)g(general)e(idea)i(for)f
  -Fp(mctx)p 2940 1373 V 29 w(create)h Fx(is)h(to)f(con\002gure)e(the)2025
  -1472 y(gi)n(v)o(en)14 b(stack)i(as)g(a)g(signal)f(stack)h(via)f
  -Fp(sigaltstack)p Fx(\(2\),)f(send)2025 1572 y(the)33
  -b(current)f(process)g(a)i(signal)e(to)i(transfer)e(e)o(x)o(ecution)e
  -(con-)2025 1672 y(trol)e(onto)g(this)h(stack,)h(sa)n(v)o(e)f(the)f
  -(machine)f(conte)o(xt)h(there)g(via)2025 1771 y Fp(setjmp)p
  -Fx(\(3\),)16 b(get)h(rid)h(of)f(the)g(signal)h(handler)e(scope)h(and)g
  -(boot-)2025 1871 y(strap)j(into)g(the)g(startup)g(routine.)2150
  -1970 y(The)31 b(real)g(problem)f(in)i(this)g(approach)d(comes)i(from)g
  -(the)2025 2070 y(signal)e(handler)f(scope)h(which)g(implies)h(v)n
  -(arious)e(restrictions)2025 2170 y(on)21 b(Unix)g(platforms)f(\(the)h
  -(signal)g(handler)f(scope)g(often)h(is)h(just)2025 2269
  -y(a)i(\003ag)h(in)f(the)g(process)f(control)g(block)g(\(PCB\))i(which)f
  -(v)n(arious)2025 2369 y(system)30 b(calls,)j(lik)o(e)e
  -Fp(sigaltstack)p Fx(\(2\),)e(check)h(before)e(al-)2025
  -2469 y(lo)n(wing)c(the)h(operation)f(\226)h(b)n(ut)g(because)g(it)h(is)
  -g(part)f(of)f(the)i(pro-)2025 2568 y(cess)20 b(state)g(the)f(k)o(ernel)
  -g(manages,)f(the)h(process)g(cannot)f(change)2025 2668
  -y(it)i(itself\).)25 b(As)20 b(we)f(will)h(see,)g(we)g(ha)n(v)o(e)e(to)i
  -(perform)d(a)i(fe)n(w)h(tricks)2025 2767 y(to)i(get)f(rid)h(of)f(it.)29
  -b(The)22 b(second)e(main)h(problem)f(is:)29 b(ho)n(w)21
  -b(do)g(we)2025 2867 y(prepare)k(the)h(calling)g(of)g(the)g(start)h
  -(routine)e(without)h(immedi-)2025 2967 y(ately)20 b(entering)f(it?)2025
  -3204 y FA(3.2)99 b(Algorithm)2025 3360 y Fx(The)20 b(input)f(to)i(the)f
  -Fp(mctx)p 2779 3360 V 29 w(create)g Fx(function)e(is)j(the)g(machine)
  -2025 3459 y(conte)o(xt)30 b(structure)h Fr(mctx)h Fx(which)f(should)f
  -(be)i(initialized,)i(the)2025 3559 y(thread)15 b(startup)h(function)e
  -(address)i Fr(sf)p 3111 3559 V 30 w(addr)p Fx(,)h(the)f(thread)f
  -(startup)2025 3659 y(function)24 b(ar)o(gument)g Fr(sf)p
  -2727 3659 V 30 w(ar)m(g)i Fx(and)f(a)i(chunk)d(of)i(memory)e(start-)
  -2025 3758 y(ing)31 b(at)i Fr(sk)p 2330 3758 V 30 w(addr)g
  -Fx(and)e Fr(sk)p 2772 3758 V 30 w(size)i Fx(bytes)e(in)h(size,)j(which)
  -d(should)2025 3858 y(become)19 b(the)h(threads)g(stack.)2150
  -3958 y(The)33 b(follo)n(wing)f(algorithm)g(for)h Fp(mctx)p
  -3361 3958 V 29 w(create)g Fx(is)i(di-)2025 4057 y(rectly)21
  -b(modeled)f(after)h(the)h(implemented)e(algorithm)g(one)h(can)2025
  -4157 y(\002nd)28 b(in)h Fr(GNU)h(Pth)e Fx([25)o(],)j(which)d(in)h(turn)
  -f(w)o(as)i(deri)n(v)o(ed)d(from)2025 4256 y(techniques)19
  -b(originally)f(found)h(in)h Fr(r)o(sthr)m(eads)h Fx([27)n(]:)p
  -Black 2129 4438 a(1.)p Black 41 w(Preserv)o(e)i(the)h(current)g(signal)
  -g(mask)g(and)g(block)f(an)i(ar)n(-)2233 4537 y(bitrary)f(w)o(ork)o(er)h
  -(signal)h(\(we)g(use)g Fp(SIGUSR1)p Fx(,)g(b)n(ut)g(an)o(y)2233
  -4637 y(signal)d(can)f(be)i(used)e(for)h(this)g(\226)h(e)n(v)o(en)e(an)h
  -(already)f(used)2233 4736 y(one\).)53 b(This)30 b(w)o(ork)o(er)f
  -(signal)g(is)i(later)f(temporarily)e(re-)2233 4836 y(quired)18
  -b(for)i(the)g(trampoline)f(step.)p Black 2129 5001 a(2.)p
  -Black 41 w(Preserv)o(e)28 b(a)h(possibly)g(e)o(xisting)f(signal)h
  -(action)g(for)g(the)2233 5101 y(w)o(ork)o(er)19 b(signal)i(and)g
  -(con\002gure)e(a)i(trampoline)e(function)2233 5201 y(as)g(the)h(ne)n(w)
  -f(temporary)e(signal)i(action.)24 b(The)19 b(signal)g(de-)2233
  -5300 y(li)n(v)o(ery)g(is)j(con\002gured)d(to)i(occur)f(on)g(an)h
  -(alternate)g(signal)2233 5400 y(stack)f(\(see)g(ne)o(xt)g(step\).)p
  -Black 1929 5700 a(5)p Black eop
  +TeXDict begin 5 4 bop Black Black 0 638 a Fx(our)58 b(machine)g(conte)n
  +(xt)g(\()p Fp(mctx)p 1910 638 50 7 v 58 w(t)p Fx(\))g(on)g(their)h
  +Fp(jmp)p 3068 638 V 58 w(buf)e Fx(data)0 838 y(structure.)249
  +1038 y(W)-13 b(e)77 b(immediately)h(recognize)f(that)g(this)h(w)n(ay)f
  +(we)g(ha)m(v)n(e)0 1237 y(at)82 b(least)f(solv)n(ed)g(the)h
  +(dispatching)g(problem,)92 b(because)81 b(our)0 1437
  +y Fp(mctx)p 410 1437 V 58 w(save)p Fx(,)146 b Fp(mctx)p
  +1456 1437 V 58 w(restore)124 b Fx(and)i Fp(mctx)p 3104
  +1437 V 58 w(switch)0 1636 y Fx(functions)67 b(can)g(be)g(easily)g
  +(implemented)g(with)h Fp(setjmp)p Fx(\(3\))0 1835 y(and)41
  +b Fp(longjmp)p Fx(\(3\).)0 2137 y FA(The)50 b(Dif\002cult)h(P)n(art)0
  +2389 y Fx(Ne)l(v)n(ertheless,)j(the)f(dif)l(\002cult)i(problem)e(of)h
  +(ho)l(w)g(to)f(create)g(the)0 2588 y(machine)62 b(conte)n(xt)g
  +(remains.)114 b(Ev)n(en)62 b(kno)l(wing)g(that)h(our)g(ma-)0
  +2787 y(chine)54 b(conte)n(xt)h(is)f Fp(jmp)p 1431 2787
  +V 59 w(buf)g Fx(based)g(is)g(no)h(adv)l(antage)f(to)h(us.)0
  +2987 y(A)k Fp(jmp)p 489 2987 V 58 w(buf)f Fx(has)h(to)g(be)g(treated)f
  +(by)h(us)g(as)f(an)h(opaque)f(data)0 3186 y(structure)45
  +b(\227)g(for)h(portability)g(reasons.)61 b(The)45 b(only)g(operations)0
  +3385 y(we)51 b(can)f(perform)i(on)f(it)g(are)g Fp(setjmp)p
  +Fx(\(3\))e(and)i Fp(longjmp)p Fx(\(3\))0 3584 y(calls,)89
  +b(of)81 b(course.)166 b(Additionally)-11 b(,)91 b(we)80
  +b(are)g(forced)g(to)h(use)0 3784 y Fp(sigaltstack)p Fx(\(3\))36
  +b(for)j(our)h(stack)e(manipulations,)h(because)0 3983
  +y(it)k(is)f(the)h(only)g(portable)f(function)h(which)g(actually)f
  +(deals)g(with)0 4182 y(stacks.)249 4382 y(So)67 b(it)h(is)e(clear)h
  +(that)g(our)g(implementation)h(for)f Fp(mctx)p 3602 4382
  +V 58 w(-)0 4582 y(create)72 b Fx(has)i(to)h(play)g(a)f(fe)l(w)h(tricks)
  +f(to)h(use)f(a)g Fp(jmp)p 3402 4582 V 59 w(buf)0 4781
  +y Fx(for)92 b(passing)e(e)n(x)n(ecution)g(control)h(to)g(an)g
  +(arbitrary)h(startup)0 4980 y(routine.)168 b(And)81 b(our)g(approach)f
  +(has)g(to)g(be)h(careful)f(to)h(en-)0 5179 y(sure)104
  +b(that)g(it)g(does)g(not)g(suf)l(fer)g(from)h(une)n(xpected)e(side-)0
  +5379 y(ef)l(fects.)263 b(It)112 b(should)h(be)f(also)f(ob)n(vious)h
  +(that)g(we)g(can-)0 5578 y(not)e(ag)o(ain)f(e)n(xpect)g(to)g(\002nd)h
  +(an)g(easy)e(solution)i(\(as)f(for)0 5777 y Fp(mctx)p
  +410 5777 V 58 w(save)p Fx(,)g Fp(mctx)p 1419 5777 V 58
  +w(restore)94 b Fx(and)i Fp(mctx)p 3007 5777 V 58 w(switch)p
  +Fx(\),)0 5976 y(because)59 b Fp(setjmp)p Fx(\(3\))h(and)g
  +Fp(sigaltstack)p Fx(\(3\))e(cannot)i(be)0 6176 y(tri)l(vially)42
  +b(combined)g(to)f(form)i Fp(mctx)p 2205 6176 V 58 w(create)p
  +Fx(.)0 6742 y Fs(3)239 b(Implementation)0 7116 y Fx(As)48
  +b(we)f(ha)m(v)n(e)g(already)h(discussed,)g(our)g(implementation)h(con-)
  +0 7315 y(tains)62 b(an)f(easy)h(part)g(\()p Fp(mctx)p
  +1737 7315 V 58 w(save)p Fx(,)k Fp(mctx)p 2703 7315 V
  +58 w(restore)59 b Fx(and)0 7514 y Fp(mctx)p 410 7514
  +V 58 w(switch)p Fx(\))66 b(and)h(a)g(dif)l(\002cult)h(part)g(\()p
  +Fp(mctx)p 3007 7514 V 58 w(create)p Fx(\).)0 7713 y(Let)47
  +b(us)g(start)g(with)g(the)g(easy)f(part,)j(whose)d(implementation)h(is)
  +0 7913 y(ob)n(vious)56 b(\(all)h(error)g(checks)e(ag)o(ain)h(omitted)h
  +(for)g(better)g(read-)0 8112 y(ability\):)p Black Black
  +0 8433 a Fk(/)90 8459 y(*)306 8433 y Fj(mac)o(hine)38
  +b(context)e(data)g(structure)2308 8459 y Fk(*)2398 8433
  +y(/)0 8583 y Fi(typedef)87 b(struct)h Fk(mctx_st)f Fo(f)359
  +8732 y Fk(jmp_buf)g(jb;)0 8881 y Fo(g)i Fk(mctx_t;)0
  +9180 y(/)90 9206 y(*)306 9180 y Fj(sav)n(e)38 b(mac)o(hine)f(context)
  +1713 9206 y Fk(*)1803 9180 y(/)0 9330 y Fi(#define)87
  +b Fk(mctx_save\(mctx\))e Fo(n)359 9479 y Fk(\()p Fi(void)p
  +Fk(\)setjmp\(\(mctx\)->jb\))0 9778 y(/)90 9804 y(*)306
  +9778 y Fj(restore)38 b(mac)o(hine)f(context)1873 9804
  +y Fk(*)1963 9778 y(/)0 9927 y Fi(#define)87 b Fk(mctx_restore\(mctx\))d
  +Fo(n)359 10077 y Fk(longjmp\(\(mctx\)->jb,)f(1\))0 10376
  +y(/)90 10402 y(*)306 10376 y Fj(switc)o(h)37 b(mac)o(hine)g(context)
  +1838 10402 y Fk(*)1928 10376 y(/)0 10525 y Fi(#define)87
  +b Fk(mctx_switch\(mctx_old,mctx_new\))80 b Fo(n)359 10675
  +y Fi(if)89 b Fk(\(setjmp\(\(mctx_old\)->jb\))82 b(==)89
  +b(0\))g Fo(n)717 10824 y Fk(longjmp\(\(mctx_new\)->jb,)82
  +b(1\))0 11123 y(/)90 11149 y(*)306 11123 y Fj(create)38
  +b(mac)o(hine)f(context)1823 11149 y Fk(*)1913 11123 y(/)0
  +11272 y Fi(void)88 b Fk(mctx_create\()p Black Black 4409
  +638 a(mctx_t)5036 664 y(*)5126 638 y(mctx,)4409 788 y
  +Fi(void)g Fk(\()4947 814 y(*)5037 788 y(sf_addr\)\()p
  +Fi(void)6292 814 y Fk(*)6382 788 y(\),)g Fi(void)7099
  +814 y Fk(*)7189 788 y(sf_arg,)4409 937 y Fi(void)4857
  +963 y Fk(*)4947 937 y(sk_addr,)f(size_t)g(sk_size\))4050
  +1087 y Fo(f)4446 1236 y Fj(...initialization)34 b(of)j
  +Fg(mctx)f Fj(to)h(be)g(\002lled)g(in...)4050 1386 y Fo(g)4050
  +1753 y Fx(There)49 b(is)g(one)g(subtle)g(b)m(ut)g(important)h(point)f
  +(we)g(should)g(men-)4050 1952 y(tion:)93 b(The)62 b(use)f(of)h(the)g(C)
  +g(pre-processor)f Fp(#define)f Fx(direc-)4050 2151 y(ti)l(v)n(e)73
  +b(to)g(implement)h Fp(mctx)p 5762 2151 V 58 w(save)p
  +Fx(,)79 b Fp(mctx)p 6741 2151 V 59 w(restore)70 b Fx(and)4050
  +2351 y Fp(mctx)p 4460 2351 V 58 w(switch)81 b Fx(is)h(intentional.)175
  +b(F)n(or)83 b(technical)f(reasons)4050 2550 y(related)72
  +b(to)g Fp(setjmp)p Fx(\(3\))f(semantics)g(and)h Fp(return)e
  +Fx(related)4050 2749 y(stack)i(beha)m(vior)h(\(which)g(we)f(will)h(e)n
  +(xplain)g(later)g(in)g(detail\))4050 2948 y(we)51 b Fr(cannot)j
  +Fx(implement)d(these)f(three)h(functions)g(\(at)g(least)g(not)4050
  +3148 y Fp(mctx)p 4460 3148 V 58 w(switch)p Fx(\))64 b(as)h(C)h
  +(functions)f(if)h(we)g(w)n(ant)g(to)g(achie)l(v)n(e)4050
  +3347 y(maximum)55 b(portability)g(across)f(all)g(platforms.)91
  +b(Instead)54 b(the)n(y)4050 3546 y(ha)m(v)n(e)40 b(to)i(be)f
  +(implemented)h(as)f(pre-processor)g(macros.)4050 4024
  +y FA(3.1)198 b(Algorithm)51 b(Ov)n(er)n(view)4050 4336
  +y Fx(The)g(general)g(idea)f(for)i Fp(mctx)p 5881 4336
  +V 58 w(create)c Fx(is)j(to)g(con\002gure)g(the)4050 4535
  +y(gi)l(v)n(en)31 b(stack)h(as)f(a)h(signal)f(stack)h(via)g
  +Fp(sigaltstack)p Fx(\(2\),)e(send)4050 4735 y(the)67
  +b(current)g(process)f(a)h(signal)g(to)g(transfer)g(e)n(x)n(ecution)f
  +(con-)4050 4934 y(trol)59 b(onto)f(this)g(stack,)i(sa)m(v)n(e)d(the)g
  +(machine)h(conte)n(xt)f(there)h(via)4050 5133 y Fp(setjmp)p
  +Fx(\(3\),)35 b(get)h(rid)g(of)h(the)f(signal)g(handler)g(scope)f(and)g
  +(boot-)4050 5332 y(strap)41 b(into)h(the)g(startup)f(routine.)4299
  +5532 y(The)64 b(real)g(problem)h(in)f(this)g(approach)g(comes)f(from)i
  +(the)4050 5731 y(signal)60 b(handler)g(scope)f(which)g(implies)h(v)l
  +(arious)g(restrictions)4050 5931 y(on)44 b(Unix)f(platforms)h(\(the)g
  +(signal)g(handler)f(scope)g(often)h(is)f(just)4050 6130
  +y(a)49 b(\003ag)g(in)h(the)f(process)f(control)i(block)f(\(PCB\))g
  +(which)g(v)l(arious)4050 6329 y(system)61 b(calls,)k(lik)n(e)d
  +Fp(sigaltstack)p Fx(\(2\),)g(check)e(before)i(al-)4050
  +6528 y(lo)l(wing)52 b(the)f(operation)h(\226)f(b)m(ut)g(because)f(it)i
  +(is)g(part)f(of)h(the)f(pro-)4050 6728 y(cess)38 b(state)h(the)g(k)n
  +(ernel)h(manages,)f(the)g(process)g(cannot)g(change)4050
  +6927 y(it)h(itself\).)51 b(As)39 b(we)g(will)h(see,)e(we)h(ha)m(v)n(e)f
  +(to)i(perform)h(a)e(fe)l(w)g(tricks)4050 7126 y(to)44
  +b(get)g(rid)h(of)g(it.)59 b(The)44 b(second)g(main)g(problem)g(is:)57
  +b(ho)l(w)44 b(do)g(we)4050 7325 y(prepare)54 b(the)f(calling)h(of)g
  +(the)f(start)h(routine)g(without)g(immedi-)4050 7525
  +y(ately)41 b(entering)h(it?)4050 8002 y FA(3.2)198 b(Algorithm)4050
  +8315 y Fx(The)42 b(input)g(to)g(the)f Fp(mctx)p 5558
  +8315 V 58 w(create)f Fx(function)i(is)f(the)g(machine)4050
  +8514 y(conte)n(xt)63 b(structure)i Fr(mctx)f Fx(which)g(should)g(be)g
  +(initialized,)69 b(the)4050 8713 y(thread)33 b(startup)h(function)g
  +(address)e Fr(sf)p 6223 8713 V 60 w(addr)p Fx(,)i(the)g(thread)f
  +(startup)4050 8912 y(function)54 b(ar)m(gument)f Fr(sf)p
  +5455 8912 V 59 w(ar)-6 b(g)53 b Fx(and)g(a)g(chunk)g(of)g(memory)h
  +(start-)4050 9112 y(ing)65 b(at)f Fr(sk)p 4660 9112 V
  +59 w(addr)69 b Fx(and)64 b Fr(sk)p 5545 9112 V 59 w(size)g
  +Fx(bytes)g(in)h(size,)k(which)64 b(should)4050 9311 y(become)41
  +b(the)g(threads)g(stack.)4299 9511 y(The)69 b(follo)l(wing)g(algorithm)
  +g(for)g Fp(mctx)p 6722 9511 V 58 w(create)d Fx(is)j(di-)4050
  +9710 y(rectly)44 b(modeled)g(after)h(the)f(implemented)g(algorithm)h
  +(one)g(can)4050 9909 y(\002nd)59 b(in)g Fr(GNU)f(Pth)h
  +Fx([25],)k(which)58 b(in)h(turn)g(w)n(as)f(deri)l(v)n(ed)g(from)4050
  +10108 y(techniques)41 b(originally)h(found)g(in)g Fr(r)n(sthr)-6
  +b(eads)40 b Fx([27]:)p Black 4258 10475 a(1.)p Black
  +82 w(Preserv)n(e)49 b(the)h(current)g(signal)g(mask)f(and)h(block)f(an)
  +h(ar)m(-)4465 10675 y(bitrary)k(w)n(ork)n(er)g(signal)e(\(we)h(use)f
  +Fp(SIGUSR1)p Fx(,)h(b)m(ut)g(an)n(y)4465 10874 y(signal)47
  +b(can)g(be)g(used)g(for)h(this)f(\226)g(e)l(v)n(en)g(an)g(already)g
  +(used)4465 11073 y(one\).)109 b(This)61 b(w)n(ork)n(er)h(signal)f(is)f
  +(later)h(temporarily)h(re-)4465 11272 y(quired)42 b(for)g(the)f
  +(trampoline)h(step.)p Black 3858 11872 a(5)p Black eop
  +end
   %%Page: 6 6
  -6 5 bop Black Black Black 104 83 a Fx(3.)p Black 41 w(Preserv)o(e)35
  -b(a)h(possibly)g(acti)n(v)o(e)f(alternate)g(signal)h(stack)208
  -183 y(and)56 b(con\002gure)f(the)h(memory)f(chunk)h(starting)g(at)208
  -282 y Fr(sk)p 282 282 25 4 v 30 w(addr)47 b Fx(as)f(the)g(ne)n(w)f
  -(temporary)f(alternate)h(signal)208 382 y(stack)20 b(of)g(length)f
  -Fr(sk)p 791 382 V 30 w(size)p Fx(.)p Black 104 566 a(4.)p
  -Black 41 w(Sa)n(v)o(e)40 b(parameters)g(for)g(the)h(trampoline)e(step)i
  -(\()p Fr(mctx)p Fx(,)208 666 y Fr(sf)p 268 666 V 30 w(addr)p
  -Fx(,)25 b Fr(sf)p 557 666 V 30 w(ar)m(g)p Fx(,)h Fr(etc.)p
  -Fx(\))39 b(in)26 b(global)e(v)n(ariables,)h(send)g(the)208
  -766 y(current)20 b(process)g(the)i(w)o(ork)o(er)e(signal,)h
  -(temporarily)e(un-)208 865 y(block)d(it)i(and)f(this)h(w)o(ay)f(allo)n
  -(w)h(it)g(to)g(be)f(deli)n(v)o(ered)f(on)h(the)208 965
  -y(signal)25 b(stack)h(in)g(order)f(to)h(transfer)f(e)o(x)o(ecution)f
  -(control)208 1065 y(to)c(the)g(trampoline)f(function.)p
  -Black 104 1249 a(5.)p Black 41 w(After)24 b(the)h(trampoline)e
  -(function)g(asynchronously)f(en-)208 1349 y(tered,)27
  -b(sa)n(v)o(e)g(its)h(machine)e(conte)o(xt)g(in)h(the)g
  -Fr(mctx)g Fx(struc-)208 1448 y(ture)j(and)g(immediately)g(return)f
  -(from)h(it)h(to)g(terminate)208 1548 y(the)20 b(signal)g(handler)f
  -(scope.)p Black 104 1732 a(6.)p Black 41 w(Restore)29
  -b(the)g(preserv)o(ed)f(alternate)h(signal)g(stack,)i(pre-)208
  -1832 y(serv)o(ed)18 b(signal)h(action)g(and)g(preserv)o(ed)e(signal)i
  -(mask)g(for)208 1932 y(w)o(ork)o(er)30 b(signal.)59 b(This)32
  -b(w)o(ay)g(an)f(e)o(xisting)g(application)208 2031 y(con\002guration)17
  -b(for)j(the)g(w)o(ork)o(er)f(signal)h(is)h(restored.)p
  -Black 104 2216 a(7.)p Black 41 w(Sa)n(v)o(e)115 b(the)g(current)f
  -(machine)g(conte)o(xt)g(of)208 2315 y Fp(mctx)p 413 2315
  -V 29 w(create)p Fx(.)52 b(This)30 b(allo)n(ws)g(us)g(to)g(return)e(to)i
  -(this)208 2415 y(point)19 b(after)h(the)g(ne)o(xt)g(trampoline)e(step.)
  -p Black 104 2599 a(8.)p Black 41 w(Restore)30 b(the)g(pre)n(viously)e
  -(sa)n(v)o(ed)i(machine)f(conte)o(xt)g(of)208 2699 y(the)15
  -b(trampoline)g(function)f(\()p Fr(mctx)p Fx(\))h(to)h(again)f(transfer)
  -g(e)o(x-)208 2799 y(ecution)31 b(control)h(onto)g(the)h(alternate)f
  -(stack,)k(b)n(ut)d(this)208 2898 y(time)20 b(without\(!\))j(signal)d
  -(handler)f(scope.)p Black 104 3083 a(9.)p Black 41 w(After)50
  -b(reaching)f(the)i(trampoline)e(function)g(\()p Fr(mctx)p
  -Fx(\))208 3182 y(again,)40 b(immediately)c(bootstrap)g(into)h(a)g
  -(clean)g(stack)208 3282 y(frame)19 b(by)h(just)g(calling)g(a)h(second)e
  -(function.)p Black 62 3467 a(10.)p Black 41 w(Set)51
  -b(the)h(ne)n(w)f(signal)g(mask)g(to)g(be)g(the)g(same)h(as)208
  -3566 y(the)32 b(original)e(signal)i(mask)g(which)g(w)o(as)h(acti)n(v)o
  -(e)e(when)208 3666 y Fp(mctx)p 413 3666 V 29 w(create)e
  -Fx(w)o(as)i(called.)53 b(This)30 b(is)h(required)d(be-)208
  -3765 y(cause)19 b(in)g(the)g(\002rst)h(trampoline)e(step)h(we)h
  -(usually)e(had)h(at)208 3865 y(least)h(the)h(w)o(ork)o(er)e(signal)h
  -(block)o(ed.)p Black 62 4050 a(11.)p Black 41 w(Load)51
  -b(the)i(passed)f(startup)g(information)f(\()p Fr(sf)p
  -1673 4050 V 29 w(addr)p Fx(,)208 4149 y Fr(sf)p 268 4149
  -V 30 w(ar)m(g)p Fx(\))46 b(from)g Fp(mctx)p 894 4149
  -V 29 w(create)g Fx(into)g(local)h(\(stack-)208 4249 y(based\))27
  -b(v)n(ariables.)47 b(This)28 b(is)h(important)e(because)g(their)208
  -4348 y(v)n(alues)17 b(ha)n(v)o(e)f(to)i(be)f(preserv)o(ed)f(in)i
  -(machine)e(conte)o(xt)g(de-)208 4448 y(pendent)g(memory)g(until)h(the)h
  -(created)f(machine)g(conte)o(xt)208 4548 y(is)k(the)f(\002rst)h(time)f
  -(restored)f(by)h(the)g(application.)p Black 62 4732 a(12.)p
  -Black 41 w(Sa)n(v)o(e)26 b(the)g(current)f(machine)h(conte)o(xt)f(for)h
  -(later)g(restor)n(-)208 4832 y(ing)19 b(by)h(the)g(calling)g
  -(application.)p Black 62 5016 a(13.)p Black 41 w(Restore)30
  -b(the)g(pre)n(viously)e(sa)n(v)o(ed)i(machine)f(conte)o(xt)g(of)208
  -5116 y Fp(mctx)p 413 5116 V 29 w(create)20 b Fx(to)i(transfer)e(e)o(x)o
  -(ecution)f(control)h(back)208 5216 y(to)g(it.)p Black
  -62 5400 a(14.)p Black 41 w(Return)f(to)i(the)f(calling)g(application.)
  -2025 83 y(When)d(the)h(calling)f(application)e(no)n(w)i(again)g
  -(switches)g(into)h(the)2025 183 y(established)25 b(machine)f(conte)o
  -(xt)g Fr(mctx)p Fx(,)i(the)f(thread)g(starts)h(run-)2025
  -282 y(ning)h(at)i(routine)e Fr(sf)p 2614 282 V 31 w(addr)i
  -Fx(with)g(ar)o(gument)d Fr(sf)p 3405 282 V 30 w(ar)m(g)p
  -Fx(.)49 b(Figure)27 b(1)2025 382 y(illustrates)g(the)g(algorithm)e
  -(\(the)i(numbers)e(refer)h(to)i(the)e(algo-)2025 482
  -y(rithm)20 b(steps)g(listed)h(abo)o(v)o(e\).)2025 1015
  -y
  - 14669332 30325391 0 0 14669332 30325391 startTexFig
  - 2025 1015 a
  -%%BeginDocument: pmt-fig.eps
  +TeXDict begin 6 5 bop Black Black Black 208 638 a Fx(2.)p
  +Black 82 w(Preserv)n(e)59 b(a)g(possibly)g(e)n(xisting)g(signal)g
  +(action)g(for)h(the)415 838 y(w)n(ork)n(er)44 b(signal)f(and)f
  +(con\002gure)h(a)g(trampoline)h(function)415 1037 y(as)39
  +b(the)g(ne)l(w)h(temporary)g(signal)f(action.)50 b(The)40
  +b(signal)f(de-)415 1236 y(li)l(v)n(ery)k(is)g(con\002gured)g(to)g
  +(occur)g(on)g(an)g(alternate)f(signal)415 1435 y(stack)f(\(see)g(ne)n
  +(xt)g(step\).)p Black 208 1802 a(3.)p Black 82 w(Preserv)n(e)72
  +b(a)h(possibly)g(acti)l(v)n(e)f(alternate)h(signal)g(stack)415
  +2001 y(and)115 b(con\002gure)f(the)h(memory)g(chunk)f(starting)h(at)415
  +2200 y Fr(sk)p 564 2200 50 7 v 59 w(addr)96 b Fx(as)c(the)g(ne)l(w)g
  +(temporary)h(alternate)f(signal)415 2399 y(stack)41 b(of)h(length)f
  +Fr(sk)p 1583 2399 V 59 w(size)p Fx(.)p Black 208 2765
  +a(4.)p Black 82 w(Sa)m(v)n(e)82 b(parameters)g(for)h(the)g(trampoline)g
  +(step)f(\()p Fr(mctx)p Fx(,)415 2965 y Fr(sf)p 536 2965
  +V 60 w(addr)p Fx(,)52 b Fr(sf)p 1115 2965 V 60 w(ar)-6
  +b(g)p Fx(,)52 b Fr(etc.)p Fx(\))80 b(in)51 b(global)g(v)l(ariables,)i
  +(send)d(the)415 3164 y(current)44 b(process)f(the)g(w)n(ork)n(er)i
  +(signal,)e(temporarily)i(un-)415 3363 y(block)36 b(it)g(and)g(this)g(w)
  +n(ay)g(allo)l(w)g(it)g(to)g(be)g(deli)l(v)n(ered)f(on)h(the)415
  +3562 y(signal)53 b(stack)f(in)h(order)g(to)g(transfer)g(e)n(x)n
  +(ecution)f(control)415 3762 y(to)42 b(the)f(trampoline)h(function.)p
  +Black 208 4128 a(5.)p Black 82 w(After)51 b(the)g(trampoline)h
  +(function)f(asynchronously)f(en-)415 4327 y(tered,)58
  +b(sa)m(v)n(e)53 b(its)i(machine)f(conte)n(xt)g(in)h(the)g
  +Fr(mctx)g Fx(struc-)415 4526 y(ture)63 b(and)f(immediately)h(return)h
  +(from)f(it)g(to)g(terminate)415 4725 y(the)42 b(signal)f(handler)g
  +(scope.)p Black 208 5091 a(6.)p Black 82 w(Restore)59
  +b(the)h(preserv)n(ed)f(alternate)g(signal)h(stack,)j(pre-)415
  +5291 y(serv)n(ed)39 b(signal)g(action)h(and)f(preserv)n(ed)g(signal)g
  +(mask)g(for)415 5490 y(w)n(ork)n(er)65 b(signal.)119
  +b(This)65 b(w)n(ay)f(an)g(e)n(xisting)g(application)415
  +5689 y(con\002guration)42 b(for)g(the)g(w)n(ork)n(er)g(signal)f(is)h
  +(restored.)p Black 208 6055 a(7.)p Black 82 w(Sa)m(v)n(e)231
  +b(the)g(current)h(machine)f(conte)n(xt)g(of)415 6254
  +y Fp(mctx)p 825 6254 V 58 w(create)p Fx(.)106 b(This)60
  +b(allo)l(ws)g(us)g(to)h(return)g(to)f(this)415 6454 y(point)42
  +b(after)g(the)f(ne)n(xt)g(trampoline)h(step.)p Black
  +208 6820 a(8.)p Black 82 w(Restore)61 b(the)g(pre)l(viously)g(sa)m(v)n
  +(ed)f(machine)h(conte)n(xt)g(of)415 7019 y(the)33 b(trampoline)g
  +(function)g(\()p Fr(mctx)p Fx(\))h(to)f(ag)o(ain)g(transfer)f(e)n(x-)
  +415 7218 y(ecution)67 b(control)g(onto)g(the)g(alternate)f(stack,)72
  +b(b)m(ut)67 b(this)415 7417 y(time)42 b(without\(!\))53
  +b(signal)41 b(handler)g(scope.)p Black 208 7783 a(9.)p
  +Black 82 w(After)103 b(reaching)f(the)h(trampoline)g(function)f(\()p
  +Fr(mctx)p Fx(\))415 7983 y(ag)o(ain,)84 b(immediately)76
  +b(bootstrap)f(into)h(a)g(clean)f(stack)415 8182 y(frame)42
  +b(by)f(just)h(calling)f(a)h(second)e(function.)p Black
  +125 8548 a(10.)p Black 82 w(Set)104 b(the)f(ne)l(w)g(signal)g(mask)h
  +(to)f(be)h(the)f(same)g(as)415 8747 y(the)65 b(original)h(signal)f
  +(mask)g(which)g(w)n(as)f(acti)l(v)n(e)g(when)415 8946
  +y Fp(mctx)p 825 8946 V 58 w(create)59 b Fx(w)n(as)h(called.)108
  +b(This)61 b(is)g(required)g(be-)415 9146 y(cause)38 b(in)i(the)g
  +(\002rst)f(trampoline)h(step)f(we)h(usually)f(had)g(at)415
  +9345 y(least)i(the)g(w)n(ork)n(er)i(signal)e(block)n(ed.)p
  +Black 125 9711 a(11.)p Black 82 w(Load)107 b(the)f(passed)f(startup)h
  +(information)h(\()p Fr(sf)p 3345 9711 V 60 w(addr)p Fx(,)415
  +9910 y Fr(sf)p 536 9910 V 60 w(ar)-6 b(g)p Fx(\))94 b(from)h
  +Fp(mctx)p 1787 9910 V 59 w(create)d Fx(into)j(local)f(\(stack-)415
  +10109 y(based\))57 b(v)l(ariables.)96 b(This)58 b(is)e(important)i
  +(because)e(their)415 10309 y(v)l(alues)35 b(ha)m(v)n(e)g(to)h(be)g
  +(preserv)n(ed)f(in)h(machine)g(conte)n(xt)f(de-)415 10508
  +y(pendent)h(memory)i(until)f(the)f(created)g(machine)h(conte)n(xt)415
  +10707 y(is)k(the)h(\002rst)g(time)f(restored)h(by)f(the)h(application.)
  +p Black 125 11073 a(12.)p Black 82 w(Sa)m(v)n(e)53 b(the)h(current)g
  +(machine)f(conte)n(xt)h(for)g(later)g(restor)m(-)415
  +11272 y(ing)42 b(by)f(the)h(calling)f(application.)p
  +Black Black Black 4175 638 a(13.)p Black 82 w(Restore)61
  +b(the)g(pre)l(viously)g(sa)m(v)n(ed)f(machine)h(conte)n(xt)g(of)4465
  +838 y Fp(mctx)p 4875 838 V 58 w(create)42 b Fx(to)i(transfer)f(e)n(x)n
  +(ecution)f(control)j(back)4465 1037 y(to)d(it.)p Black
  +4175 1350 a(14.)p Black 82 w(Return)g(to)f(the)h(calling)f
  +(application.)4050 1666 y(When)35 b(the)h(calling)g(application)g(no)l
  +(w)f(ag)o(ain)h(switches)f(into)h(the)4050 1866 y(established)50
  +b(machine)i(conte)n(xt)e Fr(mctx)p Fx(,)j(the)f(thread)f(starts)g(run-)
  +4050 2065 y(ning)58 b(at)g(routine)g Fr(sf)p 5230 2065
  +V 59 w(addr)j Fx(with)d(ar)m(gument)g Fr(sf)p 6810 2065
  +V 60 w(ar)-6 b(g)p Fx(.)99 b(Figure)58 b(1)4050 2264
  +y(illustrates)d(the)f(algorithm)i(\(the)f(numbers)g(refer)g(to)g(the)g
  +(algo-)4050 2463 y(rithm)42 b(steps)f(listed)g(abo)n(v)n(e\).)4050
  +10360 y @beginspecial 0 @llx 0 @lly 224 @urx 461 @ury
  +2240 @rwi @setspecial
  +%%BeginDocument: rse-pmt.eps
   %!PS-Adobe-2.0 EPSF-2.0
  -%%Title: pmt-fig.eps
  -%%Creator: fig2dev Version 3.2.3 Patchlevel 
  -%%CreationDate: Sat Apr 22 23:14:14 2000
  +%%Title: rse-pmt.fig
  +%%Creator: fig2dev Version 3.2 Patchlevel 5-alpha7
  +%%CreationDate: Mon Jun 12 19:51:15 2006
   %%For: rse@en1.engelschall.com (Ralf S. Engelschall)
  -%%BoundingBox: 0 0 223 461
  -%%Magnification: 1.0000
  +%%BoundingBox: 0 0 224 461
  +%Magnification: 1.0000
   %%EndComments
   /$F2psDict 200 dict def
   $F2psDict begin
  @@ -1350,8 +1712,8 @@
   
   end
   save
  -newpath 0 461 moveto 0 0 lineto 223 0 lineto 223 461 lineto closepath clip newpath
  --21.0 477.0 translate
  +newpath 0 461 moveto 0 0 lineto 224 0 lineto 224 461 lineto closepath clip newpath
  +-21.3 477.0 translate
   1 -1 scale
   
   /cp {closepath} bind def
  @@ -1389,10 +1751,17 @@
   /$F2psEnd {$F2psEnteredState restore end} def
   
   $F2psBegin
  -%%Page: 1 1
   10 setmiterlimit
  +0 slj 0 slc
    0.06299 0.06299 sc
  +%
  +% Fig objects follow
  +%
  +% 
  +% here starts figure with depth 100
   % Polyline
  +0 slj
  +0 slc
   15.000 slw
   n 780 705 m 750 705 750 855 30 arcto 4 {pop} repeat
     750 885 900 885 30 arcto 4 {pop} repeat
  @@ -1477,10 +1846,15 @@
     3495 2685 3495 2535 30 arcto 4 {pop} repeat
     3495 2505 3345 2505 30 arcto 4 {pop} repeat
    cp gs 0.00 setgray ef gr gs col0 s gr 
  -/Times-Bold ff 150.00 scf sf
  +% here ends figure;
  +% 
  +% here starts figure with depth 50
  +/Times-Bold ff 158.75 scf sf
   3068 2895 m
   gs 1 -1 sc (12) col7 sh gr
   % Polyline
  +0 slj
  +0 slc
   7.500 slw
   n 630 270 m 1890 270 l 1890 3600 l 630 3600 l
    cp gs col0 s gr 
  @@ -1501,7 +1875,7 @@
   % Polyline
   15.000 slw
   gs  clippath
  -1275 660 m 1275 600 l 1124 600 l 1244 630 l 1124 660 l cp
  +1108 660 m 1275 660 l 1275 600 l 1108 600 l 1108 600 l 1228 630 l 1108 660 l cp
   eoclip
   n 1260 4586 m 1980 4593 l 1980 3690 l 450 3690 l 450 630 l 990 630 l
   
  @@ -1509,140 +1883,140 @@
   
   % arrowhead
   7.500 slw
  -n 1124 660 m 1244 630 l 1124 600 l 1124 660 l  cp gs 0.00 setgray ef gr  col0 s
  +n 1108 660 m 1228 630 l 1108 600 l 1108 660 l  cp gs 0.00 setgray ef gr  col0 s
   % Polyline
   15.000 slw
   gs  clippath
  -1995 840 m 1995 780 l 1844 780 l 1964 810 l 1844 840 l cp
  +1828 840 m 1995 840 l 1995 780 l 1828 780 l 1828 780 l 1948 810 l 1828 840 l cp
   eoclip
   n 1260 630 m 1260 810 l
    1980 810 l gs col0 s gr gr
   
   % arrowhead
   7.500 slw
  -n 1844 840 m 1964 810 l 1844 780 l 1844 840 l  cp gs 0.00 setgray ef gr  col0 s
  +n 1828 840 m 1948 810 l 1828 780 l 1828 840 l  cp gs 0.00 setgray ef gr  col0 s
   % Polyline
   15.000 slw
   gs  clippath
  -2985 840 m 2985 780 l 2834 780 l 2954 810 l 2834 840 l cp
  +2818 840 m 2985 840 l 2985 780 l 2818 780 l 2818 780 l 2938 810 l 2818 840 l cp
   eoclip
   n 2205 810 m
    2970 810 l gs col0 s gr gr
   
   % arrowhead
   7.500 slw
  -n 2834 840 m 2954 810 l 2834 780 l 2834 840 l  cp gs 0.00 setgray ef gr  col0 s
  +n 2818 840 m 2938 810 l 2818 780 l 2818 840 l  cp gs 0.00 setgray ef gr  col0 s
   % Polyline
   15.000 slw
   gs  clippath
  -2940 1185 m 3000 1185 l 3000 1034 l 2970 1154 l 2940 1034 l cp
  +2940 1018 m 2940 1185 l 3000 1185 l 3000 1018 l 3000 1018 l 2970 1138 l 2940 1018 l cp
   eoclip
   n 2970 810 m
    2970 1170 l gs col0 s gr gr
   
   % arrowhead
   7.500 slw
  -n 2940 1034 m 2970 1154 l 3000 1034 l 2940 1034 l  cp gs 0.00 setgray ef gr  col0 s
  +n 2940 1018 m 2970 1138 l 3000 1018 l 2940 1018 l  cp gs 0.00 setgray ef gr  col0 s
   % Polyline
   15.000 slw
   gs  clippath
  -2190 1140 m 2190 1200 l 2341 1200 l 2221 1170 l 2341 1140 l cp
  +2357 1140 m 2190 1140 l 2190 1200 l 2357 1200 l 2357 1200 l 2237 1170 l 2357 1140 l cp
   eoclip
   n 2205 1170 m
    2970 1170 l gs col0 s gr gr
   
   % arrowhead
   7.500 slw
  -n 2341 1140 m 2221 1170 l 2341 1200 l 2341 1140 l  cp gs 0.00 setgray ef gr  col0 s
  +n 2357 1140 m 2237 1170 l 2357 1200 l 2357 1140 l  cp gs 0.00 setgray ef gr  col0 s
   % Polyline
   15.000 slw
   gs  clippath
  -1245 1140 m 1245 1200 l 1396 1200 l 1276 1170 l 1396 1140 l cp
  +1412 1140 m 1245 1140 l 1245 1200 l 1412 1200 l 1412 1200 l 1292 1170 l 1412 1140 l cp
   eoclip
   n 1260 1170 m
    1980 1170 l gs col0 s gr gr
   
   % arrowhead
   7.500 slw
  -n 1396 1140 m 1276 1170 l 1396 1200 l 1396 1140 l  cp gs 0.00 setgray ef gr  col0 s
  +n 1412 1140 m 1292 1170 l 1412 1200 l 1412 1140 l  cp gs 0.00 setgray ef gr  col0 s
   % Polyline
   15.000 slw
   gs  clippath
  -2985 1470 m 2985 1410 l 2834 1410 l 2954 1440 l 2834 1470 l cp
  +2818 1470 m 2985 1470 l 2985 1410 l 2818 1410 l 2818 1410 l 2938 1440 l 2818 1470 l cp
   eoclip
   n 1260 1440 m
    2970 1440 l gs col0 s gr gr
   
   % arrowhead
   7.500 slw
  -n 2834 1470 m 2954 1440 l 2834 1410 l 2834 1470 l  cp gs 0.00 setgray ef gr  col0 s
  +n 2818 1470 m 2938 1440 l 2818 1410 l 2818 1470 l  cp gs 0.00 setgray ef gr  col0 s
   % Polyline
   15.000 slw
   n 1260 1170 m
    1260 1440 l gs col0 s gr 
   % Polyline
   gs  clippath
  -2985 2550 m 2985 2490 l 2834 2490 l 2954 2520 l 2834 2550 l cp
  +2818 2550 m 2985 2550 l 2985 2490 l 2818 2490 l 2818 2490 l 2938 2520 l 2818 2550 l cp
   eoclip
   n 2970 1440 m 2970 1890 l 2250 1890 l 2250 2520 l
    2970 2520 l gs col0 s gr gr
   
   % arrowhead
   7.500 slw
  -n 2834 2550 m 2954 2520 l 2834 2490 l 2834 2550 l  cp gs 0.00 setgray ef gr  col0 s
  +n 2818 2550 m 2938 2520 l 2818 2490 l 2818 2550 l  cp gs 0.00 setgray ef gr  col0 s
   % Polyline
   15.000 slw
   n 2970 2520 m
    2970 2883 l gs col0 s gr 
   % Polyline
   gs  clippath
  -1230 2852 m 1229 2912 l 1380 2913 l 1261 2883 l 1381 2853 l cp
  +1397 2853 m 1230 2852 l 1229 2912 l 1396 2913 l 1396 2913 l 1277 2883 l 1397 2853 l cp
   eoclip
   n 2970 2891 m
    1245 2883 l gs col0 s gr gr
   
   % arrowhead
   7.500 slw
  -n 1381 2853 m 1261 2883 l 1380 2913 l 1381 2853 l  cp gs 0.00 setgray ef gr  col0 s
  +n 1397 2853 m 1277 2883 l 1396 2913 l 1397 2853 l  cp gs 0.00 setgray ef gr  col0 s
   % Polyline
   15.000 slw
   gs  clippath
  -1229 4751 m 1230 4811 l 1381 4809 l 1261 4781 l 1380 4749 l cp
  +1396 4749 m 1229 4751 l 1230 4811 l 1397 4809 l 1397 4809 l 1277 4781 l 1396 4749 l cp
   eoclip
   n 1260 2880 m 1260 3150 l 2070 3150 l 2062 4773 l
    1245 4781 l gs col0 s gr gr
   
   % arrowhead
   7.500 slw
  -n 1380 4749 m 1261 4781 l 1381 4809 l 1380 4749 l  cp gs 0.00 setgray ef gr  col0 s
  +n 1396 4749 m 1277 4781 l 1397 4809 l 1396 4749 l  cp gs 0.00 setgray ef gr  col0 s
   % Polyline
   15.000 slw
   gs  clippath
  -1230 4601 m 1290 4601 l 1290 4450 l 1260 4570 l 1230 4450 l cp
  +1230 4434 m 1230 4601 l 1290 4601 l 1290 4434 l 1290 4434 l 1260 4554 l 1230 4434 l cp
   eoclip
   n 450 4050 m 1260 4050 l
    1260 4586 l gs col0 s gr gr
   
   % arrowhead
   7.500 slw
  -n 1230 4450 m 1260 4570 l 1290 4450 l 1230 4450 l  cp gs 0.00 setgray ef gr  col0 s
  +n 1230 4434 m 1260 4554 l 1290 4434 l 1230 4434 l  cp gs 0.00 setgray ef gr  col0 s
   % Polyline
   15.000 slw
   gs  clippath
  -1230 5235 m 1290 5234 l 1287 5083 l 1260 5204 l 1227 5084 l cp
  +1226 5068 m 1230 5235 l 1290 5234 l 1286 5067 l 1286 5067 l 1259 5188 l 1226 5068 l cp
   eoclip
   n 1252 4773 m
    1260 5220 l gs col0 s gr gr
   
   % arrowhead
   7.500 slw
  -n 1227 5084 m 1260 5204 l 1287 5083 l 1227 5084 l  cp gs 0.00 setgray ef gr  col0 s
  +n 1226 5068 m 1259 5188 l 1286 5067 l 1226 5068 l  cp gs 0.00 setgray ef gr  col0 s
   % Polyline
   1 slc
   15.000 slw
    [15 45] 45 sd
   gs  clippath
  -2985 4260 m 2985 4200 l 2834 4200 l 2954 4230 l 2834 4260 l cp
  +2818 4260 m 2985 4260 l 2985 4200 l 2818 4200 l 2818 4200 l 2938 4230 l 2818 4260 l cp
   eoclip
   n 2970 3150 m 2970 3690 l 2250 3690 l 2250 4230 l
    2970 4230 l gs col0 s gr gr
  @@ -1650,22 +2024,22 @@
   % arrowhead
   0 slc
   7.500 slw
  -n 2834 4260 m 2954 4230 l 2834 4200 l 2834 4260 l  cp gs 0.00 setgray ef gr  col0 s
  +n 2818 4260 m 2938 4230 l 2818 4200 l 2818 4260 l  cp gs 0.00 setgray ef gr  col0 s
   % Polyline
   n 630 6300 m 1890 6300 l
    1890 7290 l gs col0 s gr 
   % Polyline
   gs  clippath
  -3660 7575 m 3720 7575 l 3720 7424 l 3690 7544 l 3660 7424 l cp
  -3720 6285 m 3660 6285 l 3660 6436 l 3690 6316 l 3720 6436 l cp
  +3660 7408 m 3660 7575 l 3720 7575 l 3720 7408 l 3720 7408 l 3690 7528 l 3660 7408 l cp
  +3720 6452 m 3720 6285 l 3660 6285 l 3660 6452 l 3660 6452 l 3690 6332 l 3720 6452 l cp
   eoclip
   n 3690 6300 m
    3690 7560 l gs col0 s gr gr
   
   % arrowhead
  -n 3720 6436 m 3690 6316 l 3660 6436 l 3720 6436 l  cp gs 0.00 setgray ef gr  col0 s
  +n 3720 6452 m 3690 6332 l 3660 6452 l 3720 6452 l  cp gs 0.00 setgray ef gr  col0 s
   % arrowhead
  -n 3660 7424 m 3690 7544 l 3720 7424 l 3660 7424 l  cp gs 0.00 setgray ef gr  col0 s
  +n 3660 7408 m 3690 7528 l 3720 7408 l 3660 7408 l  cp gs 0.00 setgray ef gr  col0 s
   % Polyline
   n 2340 6300 m 3600 6300 l 3600 7560 l 2340 7560 l
    cp gs col0 s gr 
  @@ -1680,7 +2054,7 @@
   15.000 slw
    [15 45] 45 sd
   gs  clippath
  -2985 3180 m 2985 3120 l 2834 3120 l 2954 3150 l 2834 3180 l cp
  +2818 3180 m 2985 3180 l 2985 3120 l 2818 3120 l 2818 3120 l 2938 3150 l 2818 3180 l cp
   eoclip
   n 1260 5220 m 2160 5220 l 2160 3150 l
    2970 3150 l gs col0 s gr gr
  @@ -1688,7 +2062,7 @@
   % arrowhead
   0 slc
   7.500 slw
  -n 2834 3180 m 2954 3150 l 2834 3120 l 2834 3180 l  cp gs 0.00 setgray ef gr  col0 s
  +n 2818 3180 m 2938 3150 l 2818 3120 l 2818 3180 l  cp gs 0.00 setgray ef gr  col0 s
   % Polyline
   n 630 6300 m
    630 7380 l gs col0 s gr 
  @@ -1739,7 +2113,7 @@
   15.000 slw
    [15 45] 45 sd
   gs  clippath
  -2940 5325 m 3000 5325 l 3000 5174 l 2970 5294 l 2940 5174 l cp
  +2940 5158 m 2940 5325 l 3000 5325 l 3000 5158 l 3000 5158 l 2970 5278 l 2940 5158 l cp
   eoclip
   n 2970 4230 m
    2970 5310 l gs col0 s gr gr
  @@ -1747,13 +2121,13 @@
   % arrowhead
   0 slc
   7.500 slw
  -n 2940 5174 m 2970 5294 l 3000 5174 l 2940 5174 l  cp gs 0.00 setgray ef gr  col0 s
  +n 2940 5158 m 2970 5278 l 3000 5158 l 2940 5158 l  cp gs 0.00 setgray ef gr  col0 s
   % Polyline
   1 slc
   15.000 slw
    [15 45] 45 sd
   gs  clippath
  -1245 5280 m 1245 5340 l 1396 5340 l 1276 5310 l 1396 5280 l cp
  +1412 5280 m 1245 5280 l 1245 5340 l 1412 5340 l 1412 5340 l 1292 5310 l 1412 5280 l cp
   eoclip
   n 2970 5310 m
    1260 5310 l gs col0 s gr gr
  @@ -1761,13 +2135,13 @@
   % arrowhead
   0 slc
   7.500 slw
  -n 1396 5280 m 1276 5310 l 1396 5340 l 1396 5280 l  cp gs 0.00 setgray ef gr  col0 s
  +n 1412 5280 m 1292 5310 l 1412 5340 l 1412 5280 l  cp gs 0.00 setgray ef gr  col0 s
   % Polyline
   1 slc
   15.000 slw
    [15 45] 45 sd
   gs  clippath
  -1245 5640 m 1245 5700 l 1396 5700 l 1276 5670 l 1396 5640 l cp
  +1412 5640 m 1245 5640 l 1245 5700 l 1412 5700 l 1412 5700 l 1292 5670 l 1412 5640 l cp
   eoclip
   n 2970 5580 m 2970 5670 l
    1260 5670 l gs col0 s gr gr
  @@ -1775,13 +2149,13 @@
   % arrowhead
   0 slc
   7.500 slw
  -n 1396 5640 m 1276 5670 l 1396 5700 l 1396 5640 l  cp gs 0.00 setgray ef gr  col0 s
  +n 1412 5640 m 1292 5670 l 1412 5700 l 1412 5640 l  cp gs 0.00 setgray ef gr  col0 s
   % Polyline
   1 slc
   15.000 slw
    [15 45] 45 sd
   gs  clippath
  -345 5910 m 345 5970 l 496 5970 l 376 5940 l 496 5910 l cp
  +512 5910 m 345 5910 l 345 5970 l 512 5970 l 512 5970 l 392 5940 l 512 5910 l cp
   eoclip
   n 1260 5670 m 1260 5940 l
    360 5940 l gs col0 s gr gr
  @@ -1789,13 +2163,13 @@
   % arrowhead
   0 slc
   7.500 slw
  -n 496 5910 m 376 5940 l 496 5970 l 496 5910 l  cp gs 0.00 setgray ef gr  col0 s
  +n 512 5910 m 392 5940 l 512 5970 l 512 5910 l  cp gs 0.00 setgray ef gr  col0 s
   % Polyline
   1 slc
   15.000 slw
    [15 45] 45 sd
   gs  clippath
  -2985 5610 m 2985 5550 l 2834 5550 l 2954 5580 l 2834 5610 l cp
  +2818 5610 m 2985 5610 l 2985 5550 l 2818 5550 l 2818 5550 l 2938 5580 l 2818 5610 l cp
   eoclip
   n 1260 5355 m 1260 5580 l
    2970 5580 l gs col0 s gr gr
  @@ -1803,8 +2177,9 @@
   % arrowhead
   0 slc
   7.500 slw
  -n 2834 5610 m 2954 5580 l 2834 5550 l 2834 5610 l  cp gs 0.00 setgray ef gr  col0 s
  +n 2818 5610 m 2938 5580 l 2818 5550 l 2818 5610 l  cp gs 0.00 setgray ef gr  col0 s
   % Polyline
  +2 slj
   n 630 7380 m 631 7381 l 634 7383 l 639 7388 l 647 7394 l 657 7402 l
    670 7412 l 686 7423 l 703 7435 l 723 7448 l 744 7460 l
    766 7472 l 791 7483 l 817 7493 l 845 7502 l 877 7509 l
  @@ -1818,830 +2193,878 @@
    1831 7273 l 1847 7277 l 1861 7280 l 1872 7284 l 1880 7286 l
    1885 7288 l 1889 7289 l
    1890 7290 l gs col0 s gr 
  -/Times-Bold ff 150.00 scf sf
  +/Times-Bold ff 158.75 scf sf
   2430 6480 m
   gs 1 -1 sc (sk_addr) col0 sh gr
  -/Times-Bold ff 150.00 scf sf
  +/Times-Bold ff 158.75 scf sf
   720 6480 m
   gs 1 -1 sc (main stack) col0 sh gr
  -/Times-Bold ff 150.00 scf sf
  +/Times-Bold ff 158.75 scf sf
   720 3960 m
   gs 1 -1 sc (main) col0 sh gr
  -/Times-Bold ff 150.00 scf sf
  +/Times-Bold ff 158.75 scf sf
   2430 3960 m
   gs 1 -1 sc (sf_addr\(sf_arg\)) col0 sh gr
  -/Times-Bold ff 150.00 scf sf
  +/Times-Bold ff 158.75 scf sf
   2430 2250 m
   gs 1 -1 sc (mctx_create) col0 sh gr
  -/Times-Bold ff 150.00 scf sf
  +/Times-Bold ff 158.75 scf sf
   2430 450 m
   gs 1 -1 sc (mctx_create) col0 sh gr
  -/Times-Bold ff 150.00 scf sf
  +/Times-Bold ff 158.75 scf sf
   720 450 m
   gs 1 -1 sc (mctx_create) col0 sh gr
  -/Times-Bold ff 150.00 scf sf
  +/Times-Bold ff 158.75 scf sf
   3150 2250 m
   gs 1 -1 sc (_boot) col0 sh gr
  -/Times-Bold ff 150.00 scf sf
  +/Times-Bold ff 158.75 scf sf
   2790 585 m
   gs 1 -1 sc (_trampoline) col0 sh gr
  -/Times-Bold ff 150.00 scf sf
  +/Times-Bold ff 158.75 scf sf
   3870 7110 m
   gs 1 -1 sc  90.0 rot (sk_size) col0 sh gr
  -/Times-Bold ff 150.00 scf sf
  +/Times-Bold ff 158.75 scf sf
   1350 5175 m
   gs 1 -1 sc (mctx_switch) col0 sh gr
  -/Times-Bold ff 150.00 scf sf
  +/Times-Bold ff 158.75 scf sf
   2385 5445 m
   gs 1 -1 sc (mctx_switch) col0 sh gr
  -/Times-Bold ff 150.00 scf sf
  +/Times-Bold ff 158.75 scf sf
   1350 5535 m
   gs 1 -1 sc (mctx_switch) col0 sh gr
  -/Times-Bold ff 150.00 scf sf
  +/Times-Bold ff 158.75 scf sf
   2385 5805 m
   gs 1 -1 sc (mctx_switch) col0 sh gr
  -/Times-Bold ff 150.00 scf sf
  +/Times-Bold ff 158.75 scf sf
   1305 4725 m
   gs 1 -1 sc (mctx_create) col0 sh gr
  -/Times-Bold ff 150.00 scf sf
  +/Times-Bold ff 158.75 scf sf
   810 840 m
   gs 1 -1 sc (1) col7 sh gr
  -/Times-Bold ff 150.00 scf sf
  +/Times-Bold ff 158.75 scf sf
   1065 840 m
   gs 1 -1 sc (2) col7 sh gr
  -/Times-Bold ff 150.00 scf sf
  +/Times-Bold ff 158.75 scf sf
   1065 1320 m
   gs 1 -1 sc (6) col7 sh gr
  -/Times-Bold ff 150.00 scf sf
  +/Times-Bold ff 158.75 scf sf
   1335 1635 m
   gs 1 -1 sc (7) col7 sh gr
  -/Times-Bold ff 150.00 scf sf
  +/Times-Bold ff 158.75 scf sf
   2070 1635 m
   gs 1 -1 sc (8) col7 sh gr
  -/Times-Bold ff 150.00 scf sf
  +/Times-Bold ff 158.75 scf sf
   2070 660 m
   gs 1 -1 sc (4) col7 sh gr
  -/Times-Bold ff 150.00 scf sf
  +/Times-Bold ff 158.75 scf sf
   1380 705 m
   gs 1 -1 sc (3) col7 sh gr
  -/Times-Bold ff 150.00 scf sf
  +/Times-Bold ff 158.75 scf sf
   3135 1020 m
   gs 1 -1 sc (5) col7 sh gr
  -/Times-Bold ff 150.00 scf sf
  +/Times-Bold ff 158.75 scf sf
   2070 2235 m
   gs 1 -1 sc (9) col7 sh gr
  -/Times-Bold ff 150.00 scf sf
  +/Times-Bold ff 158.75 scf sf
   2040 2775 m
   gs 1 -1 sc (13) col7 sh gr
  -/Times-Bold ff 150.00 scf sf
  +/Times-Bold ff 158.75 scf sf
   3068 2640 m
   gs 1 -1 sc (10) col7 sh gr
  -/Times-Bold ff 150.00 scf sf
  +/Times-Bold ff 158.75 scf sf
   1545 3360 m
   gs 1 -1 sc (14) col7 sh gr
  -/Times-Bold ff 150.00 scf sf
  +/Times-Bold ff 158.75 scf sf
   3337 2640 m
   gs 1 -1 sc (11) col7 sh gr
  +% here ends figure;
   $F2psEnd
   rs
  +showpage
  +%%Trailer
  +%EOF
   
   %%EndDocument
  -
  - endTexFig
  - 2025 4944 a Fn(Figur)o(e)d(1:)66 b Fm(Illustration)18
  -b(of)c(the)h(machine)h(conte)o(xt)g(creation)h(procedure.)22
  -b(The)2350 5012 y(thick)h(solid)f(lines)h(and)e(numeric)i(marks)e
  -(correspond)i(to)f(the)g(al-)2350 5080 y(gorithm)c(steps)g(as)f
  -(described)i(in)f(section)h(3.2.)h(The)d(thick)i(dotted)2350
  -5148 y(lines)h(sho)n(w)f(a)g(possible)h(further)g(processing)h(where)f
  -(a)f(fe)n(w)g(con-)2350 5216 y(te)o(xt)i(switches)h(are)e(performed)i
  -(to)e(dispatch)i(between)f(the)g(main)2350 5284 y(thread)e(and)e(the)h
  -(ne)n(w)g(created)h(thread.)p Black 1929 5700 a Fx(6)p
  -Black eop
  + @endspecial 174 x Fn(Figur)n(e)33 b(1:)134 b Fm(Illustration)28
  +b(of)h(the)f(machine)g(conte)n(xt)h(creation)g(procedure.)41
  +b(The)4701 10670 y(thick)h(solid)g(lines)g(and)h(numeric)g(marks)f
  +(correspond)i(to)f(the)f(al-)4701 10806 y(gorithm)35
  +b(steps)e(as)g(described)i(in)f(section)f(3.2.)44 b(The)34
  +b(thick)g(dotted)4701 10942 y(lines)i(sho)m(w)h(a)g(possible)h(further)
  +g(processing)g(where)f(a)g(fe)m(w)g(con-)4701 11078 y(te)n(xt)i
  +(switches)f(are)i(performed)h(to)e(dispatch)h(between)g(the)f(main)4701
  +11214 y(thread)34 b(and)g(the)f(ne)m(w)h(created)f(thread.)p
  +Black 3858 11872 a Fx(6)p Black eop end
   %%Page: 7 7
  -7 6 bop Black Black 0 83 a FA(3.3)99 b(Sour)n(ce)27 b(Code)0
  -239 y Fx(The)43 b(corresponding)d(ANSI-C)k(code,)49 b(which)43
  -b(implements)0 338 y Fp(mctx)p 205 338 25 4 v 29 w(create)p
  -Fx(,)37 b(is)d(a)h(little)f(bit)h(more)e(complicated.)64
  -b(But)0 438 y(with)23 b(the)g(presented)e(algorithm)g(in)i(mind,)f(it)i
  -(is)f(no)n(w)f(straight-)0 538 y(forw)o(ard.)p Black
  -Black 0 693 a Fi(static)44 b Fk(mctx_t)313 b(mctx_caller;)0
  -767 y Fi(static)44 b Fk(sig_atomic_t)f(mctx_called;)0
  -917 y Fi(static)h Fk(mctx_t)268 b(*mctx_creat;)0 992
  -y Fi(static)44 b(void)313 b Fk(\(*mctx_creat_func\)\()p
  -Fi(void)41 b Fk(*\);)0 1066 y Fi(static)j(void)358 b
  -Fk(*mctx_creat_arg;)0 1141 y Fi(static)44 b Fk(sigset_t)223
  -b(mctx_creat_sigs;)0 1290 y Fi(void)44 b Fk(mctx_create\()179
  -1365 y(mctx_t)g(*mctx,)179 1440 y Fi(void)g Fk(\(*sf_addr\)\()p
  -Fi(void)f Fk(*\),)h Fi(void)g Fk(*sf_arg,)179 1515 y
  -Fi(void)g Fk(*sk_addr,)g Fi(size_t)g Fk(sk_size\))0 1589
  -y Fo(f)179 1664 y Fi(struct)g Fk(sigaction)f(sa;)179
  -1739 y Fi(struct)h Fk(sigaction)f(osa;)179 1813 y Fi(struct)h
  -Fk(sigaltstack)f(ss;)179 1888 y Fi(struct)h Fk(sigaltstack)f(oss;)179
  -1963 y(sigset_t)h(osigs;)179 2038 y(sigset_t)g(sigs;)179
  -2187 y(/*)64 b Fj(Step)18 b(1:)45 b Fk(*/)179 2262 y
  -(sigemptyset\(&sigs\);)179 2336 y(sigaddset\(&sigs,)d(SIGUSR1\);)179
  -2411 y(sigprocmask\(SIG_BLOCK,)f(&sigs,)j(&osigs\);)179
  -2561 y(/*)64 b Fj(Step)18 b(2:)45 b Fk(*/)179 2635 y(memset\(\()p
  -Fi(void)e Fk(*\)&sa,)h(0,)493 2710 y Fi(sizeof)p Fk(\()p
  -Fi(struct)f Fk(sigaction\)\);)179 2785 y(sa.sa_handler)g(=)i
  -(mctx_create_trampoline;)179 2860 y(sa.sa_flags)e(=)i(SA_ONSTACK;)179
  -2934 y(sigemptyset\(&sa.sa_mask\);)179 3009 y(sigaction\(SIGUSR1,)d
  -(&sa,)i(&osa\);)179 3158 y(/*)64 b Fj(Step)18 b(3:)45
  -b Fk(*/)179 3233 y(ss.ss_sp)178 b(=)45 b(sk_addr;)179
  -3308 y(ss.ss_size)88 b(=)45 b(sk_size;)179 3383 y(ss.ss_flags)e(=)i(0;)
  -179 3457 y(sigaltstack\(&ss,)d(&oss\);)179 3607 y(/*)64
  -b Fj(Step)18 b(4:)45 b Fk(*/)179 3681 y(mctx_creat)268
  -b(=)44 b(mctx;)179 3756 y(mctx_creat_func)f(=)h(sf_addr;)179
  -3831 y(mctx_creat_arg)88 b(=)44 b(sf_arg;)179 3906 y(mctx_creat_sigs)f
  -(=)h(osigs;)179 3980 y(mctx_called)223 b(=)44 b(FALSE;)179
  -4055 y(kill\(getpid\(\),)f(SIGUSR1\);)179 4130 y(sigfillset\(&sigs\);)
  -179 4204 y(sigdelset\(&sigs,)f(SIGUSR1\);)179 4279 y
  -Fi(while)i Fk(\(!mctx_called\))359 4354 y(sigsuspend\(&sigs\);)179
  -4503 y(/*)64 b Fj(Step)18 b(6:)45 b Fk(*/)179 4578 y
  -(sigaltstack\(NULL,)d(&ss\);)179 4653 y(ss.ss_flags)h(=)i(SS_DISABLE;)
  -179 4728 y(sigaltstack\(&ss,)d(NULL\);)179 4802 y(if)j
  -(\(!\(oss.ss_flags)d(&)j(SS_DISABLE\)\))359 4877 y(sigaltstack\(&oss,)d
  -(NULL\);)179 4952 y(sigaction\(SIGUSR1,)g(&osa,)i(NULL\);)179
  -5026 y(sigprocmask\(SIG_SETMASK,)717 5101 y(&osigs,)g(NULL\);)179
  -5251 y(/*)64 b Fj(Step)18 b(7)h(&)g(Step)f(8:)45 b Fk(*/)179
  -5325 y(mctx_switch\(&mctx_caller,)c(mctx\);)2204 83 y(/*)64
  -b Fj(Step)18 b(14:)45 b Fk(*/)2204 158 y Fi(return)p
  -Fk(;)2025 232 y Fo(g)2025 382 y Fi(void)f Fk(mctx_create_trampoline\()p
  -Fi(int)d Fk(sig\))2025 457 y Fo(f)2204 531 y Fk(/*)64
  -b Fj(Step)18 b(5:)45 b Fk(*/)2204 606 y Fi(if)g Fk
  -(\(mctx_save\(mctx_creat\))c(==)j(0\))h Fo(f)2384 681
  -y Fk(mctx_called)e(=)h(TRUE;)2384 756 y Fi(return)p Fk(;)2204
  -830 y Fo(g)2204 980 y Fk(/*)64 b Fj(Step)18 b(9:)45 b
  -Fk(*/)2204 1054 y(mctx_create_boot\(\);)2025 1129 y Fo(g)2025
  -1279 y Fi(void)f Fk(mctx_create_boot\()p Fi(void)p Fk(\))2025
  -1353 y Fo(f)2204 1428 y Fi(void)g Fk(\(*mctx_start_func\)\()p
  -Fi(void)d Fk(*\);)2204 1503 y Fi(void)j Fk(*mctx_start_arg;)2204
  -1652 y(/*)64 b Fj(Step)18 b(10:)45 b Fk(*/)2204 1727
  -y(sigprocmask\(SIG_SETMASK,)2742 1802 y(&mctx_creat_sigs,)d(NULL\);)
  -2204 1951 y(/*)64 b Fj(Step)18 b(11:)45 b Fk(*/)2204
  -2026 y(mctx_start_func)e(=)h(mctx_creat_func;)2204 2100
  -y(mctx_start_arg)88 b(=)44 b(mctx_creat_arg;)2204 2250
  -y(/*)64 b Fj(Step)18 b(12)h(&)g(Step)g(13:)45 b Fk(*/)2204
  -2325 y(mctx_switch\(mctx_creat,)c(&mctx_caller\);)2204
  -2474 y(/*)64 b Fj(The)18 b(thread)h(``magically'')g(starts...)62
  -b Fk(*/)2204 2549 y(mctx_start_func\(mctx_start_arg\);)2204
  -2698 y(/*)45 b(NOTREACHED)e(*/)2204 2773 y(abort\(\);)2025
  -2848 y Fo(g)2025 3124 y FA(3.4)99 b(Run-time)26 b(P)n(enalty)2025
  -3294 y Fx(After)31 b(this)h(discussion)f(of)g(the)g(implementation)e
  -(details,)35 b(an)2025 3393 y(ob)o(viously)29 b(occuring)h(question)g
  -(no)n(w)h(is)h(what)g(the)f(e)o(xpected)2025 3493 y(run-time)g(penalty)
  -h(is.)63 b(That)32 b(is,)k(what)d(does)f(our)g(presented)2025
  -3592 y(machine)43 b(conte)o(xt)f(implementation)g(cost)i(compared)e(to)
  -i(a)2025 3692 y Fp(ucontext)p Fx(\(3\))33 b(based)j(solution.)70
  -b(From)35 b(the)g(already)f(dis-)2025 3792 y(cussed)21
  -b(details)h(we)g(can)f(easily)h(guess)f(that)h(our)e(comple)o(x)g(ma-)
  -2025 3891 y(chine)27 b(conte)o(xt)f(creation)h(procedure)d(\()p
  -Fp(mctx)p 3392 3891 V 29 w(create)p Fx(\))j(will)2025
  -3991 y(be)20 b(certainly)f(noticeably)f(slo)n(wer)i(than)g(a)g
  -(solution)f(based)h(on)f(a)2025 4091 y Fp(ucontext)p
  -Fx(\(3\))f(f)o(acility)-5 b(.)2150 4197 y(But)48 b(a)g(wild)g(guess)f
  -(is)i(not)e(suf)n(\002cing)g(for)g(a)h(reason-)2025 4297
  -y(able)d(statement.)101 b(So)45 b(we)h(ha)n(v)o(e)f(written)g(a)h
  -Fr(Simple)f(Ma-)2025 4397 y(c)o(hine)21 b(Conte)n(xt)g(Benc)o(hmark)g
  -Fx(\(SMCB)i([32)n(]\))f(which)f(w)o(as)h(used)2025 4496
  -y(to)36 b(compare)e(run-time)g(costs)j(of)e(the)h Fp(mctx)p
  -3421 4496 V 29 w(create)f Fx(and)2025 4596 y Fp(mctx)p
  -2230 4596 V 29 w(switch)27 b Fx(functions)f(if)h(once)f(implemented)g
  -(through)2025 4696 y(the)17 b Fr(POSIX)i Fp(makecontext)p
  -Fx(\(3\)/)p Fp(swapcontext)p Fx(\(3\))11 b(func-)2025
  -4795 y(tions)55 b(\(as)h(sho)n(wn)f(in)g(section)h(2.3\),)63
  -b(and)55 b(once)f(imple-)2025 4895 y(mented)44 b(with)g(our)g(based)g
  -(f)o(allback)g(implementation)f(\(for)2025 4994 y(con)m(v)o(enience)c
  -(reasons)j(we)h(directly)e(used)h Fp(sigjmp)p 3706 4994
  -V 29 w(buf)p Fx(,)2025 5094 y Fp(sigsetjmp)p Fx(\(3\))g(and)h
  -Fp(siglongjmp)p Fx(\(3\))f(in)i(the)g(bench-)2025 5194
  -y(mark,)31 b(because)d(all)i(tested)g(platforms)e(pro)o(vided)e
  -(this\).)53 b(The)2025 5293 y(results)21 b(are)f(sho)n(wn)f(T)-7
  -b(able)20 b(3)h(belo)n(w)-5 b(.)2150 5400 y(As)32 b(one)e(can)h(deri)n
  -(v)o(e)f(from)g(these)i(e)n(v)n(aluations,)g(our)e(sig-)p
  -Black 1929 5700 a(7)p Black eop
  +TeXDict begin 7 6 bop Black Black 0 638 a FA(3.3)198
  +b(Sour)l(ce)51 b(Code)0 950 y Fx(The)88 b(corresponding)h(ANSI-C)f
  +(code,)99 b(which)88 b(implements)0 1149 y Fp(mctx)p
  +410 1149 50 7 v 58 w(create)p Fx(,)73 b(is)c(a)g(little)g(bit)g(more)g
  +(complicated.)133 b(But)0 1348 y(with)47 b(the)f(presented)g(algorithm)
  +h(in)g(mind,)g(it)g(is)f(no)l(w)h(straight-)0 1548 y(forw)n(ard.)p
  +Black Black 0 1858 a Fi(static)88 b Fk(mctx_t)625 b(mctx_caller;)0
  +2007 y Fi(static)88 b Fk(sig_atomic_t)d(mctx_called;)0
  +2306 y Fi(static)j Fk(mctx_t)1704 2332 y(*)1794 2306
  +y(mctx_creat;)0 2456 y Fi(static)g(void)626 b Fk(\()1704
  +2482 y(*)1794 2456 y(mctx_creat_func\)\()p Fi(void)3766
  +2482 y Fk(*)3856 2456 y(\);)0 2605 y Fi(static)88 b(void)1704
  +2631 y Fk(*)1794 2605 y(mctx_creat_arg;)0 2754 y Fi(static)g
  +Fk(sigset_t)445 b(mctx_creat_sigs;)0 3053 y Fi(void)88
  +b Fk(mctx_create\()359 3203 y(mctx_t)986 3229 y(*)1076
  +3203 y(mctx,)359 3352 y Fi(void)g Fk(\()897 3378 y(*)987
  +3352 y(sf_addr\)\()p Fi(void)2242 3378 y Fk(*)2332 3352
  +y(\),)g Fi(void)3049 3378 y Fk(*)3139 3352 y(sf_arg,)359
  +3502 y Fi(void)807 3528 y Fk(*)897 3502 y(sk_addr,)f
  +Fi(size_t)g Fk(sk_size\))0 3651 y Fo(f)359 3800 y Fi(struct)g
  +Fk(sigaction)g(sa;)359 3950 y Fi(struct)g Fk(sigaction)g(osa;)359
  +4099 y Fi(struct)g Fk(sigaltstack)f(ss;)359 4249 y Fi(struct)h
  +Fk(sigaltstack)f(oss;)359 4398 y(sigset_t)h(osigs;)359
  +4548 y(sigset_t)g(sigs;)359 4847 y(/)449 4873 y(*)665
  +4847 y Fj(Step)37 b(1:)1182 4873 y Fk(*)1272 4847 y(/)359
  +4996 y(sigemptyset\(&sigs\);)359 5145 y(sigaddset\(&sigs,)84
  +b(SIGUSR1\);)359 5295 y(sigprocmask\(SIG_BLOCK,)e(&sigs,)88
  +b(&osigs\);)359 5594 y(/)449 5620 y(*)665 5594 y Fj(Step)37
  +b(2:)1182 5620 y Fk(*)1272 5594 y(/)359 5743 y(memset\(\()p
  +Fi(void)1524 5769 y Fk(*)1614 5743 y(\)&sa,)88 b(0,)986
  +5893 y Fi(sizeof)p Fk(\()p Fi(struct)e Fk(sigaction\)\);)359
  +6042 y(sa.sa_handler)f(=)k(mctx_create_trampoline;)359
  +6191 y(sa.sa_flags)d(=)j(SA_ONSTACK;)359 6341 y
  +(sigemptyset\(&sa.sa_mask\);)359 6490 y(sigaction\(SIGUSR1,)83
  +b(&sa,)89 b(&osa\);)359 6789 y(/)449 6815 y(*)665 6789
  +y Fj(Step)37 b(3:)1182 6815 y Fk(*)1272 6789 y(/)359
  +6939 y(ss.ss_sp)356 b(=)89 b(sk_addr;)359 7088 y(ss.ss_size)176
  +b(=)89 b(sk_size;)359 7238 y(ss.ss_flags)d(=)j(0;)359
  +7387 y(sigaltstack\(&ss,)84 b(&oss\);)359 7686 y(/)449
  +7712 y(*)665 7686 y Fj(Step)37 b(4:)1182 7712 y Fk(*)1272
  +7686 y(/)359 7835 y(mctx_creat)534 b(=)90 b(mctx;)359
  +7985 y(mctx_creat_func)84 b(=)90 b(sf_addr;)359 8134
  +y(mctx_creat_arg)174 b(=)90 b(sf_arg;)359 8284 y(mctx_creat_sigs)84
  +b(=)90 b(osigs;)359 8433 y(mctx_called)444 b(=)90 b(FALSE;)359
  +8583 y(kill\(getpid\(\),)85 b(SIGUSR1\);)359 8732 y
  +(sigfillset\(&sigs\);)359 8881 y(sigdelset\(&sigs,)f(SIGUSR1\);)359
  +9031 y Fi(while)k Fk(\(!mctx_called\))717 9180 y(sigsuspend\(&sigs\);)
  +359 9479 y(/)449 9505 y(*)665 9479 y Fj(Step)37 b(6:)1182
  +9505 y Fk(*)1272 9479 y(/)359 9629 y(sigaltstack\(NULL,)84
  +b(&ss\);)359 9778 y(ss.ss_flags)i(=)j(SS_DISABLE;)359
  +9927 y(sigaltstack\(&ss,)84 b(NULL\);)359 10077 y(if)89
  +b(\(!\(oss.ss_flags)84 b(&)90 b(SS_DISABLE\)\))717 10226
  +y(sigaltstack\(&oss,)84 b(NULL\);)359 10376 y(sigaction\(SIGUSR1,)f
  +(&osa,)88 b(NULL\);)359 10525 y(sigprocmask\(SIG_SETMASK,)1435
  +10675 y(&osigs,)f(NULL\);)359 10974 y(/)449 11000 y(*)665
  +10974 y Fj(Step)37 b(7)g(&)h(Step)f(8:)1751 11000 y Fk(*)1841
  +10974 y(/)359 11123 y(mctx_switch\(&mctx_caller,)81 b(mctx\);)p
  +Black Black 4409 638 a(/)4499 664 y(*)4715 638 y Fj(Step)37
  +b(14:)5307 664 y Fk(*)5397 638 y(/)4409 788 y Fi(return)p
  +Fk(;)4050 937 y Fo(g)4050 1236 y Fi(void)88 b Fk
  +(mctx_create_trampoline\()p Fi(int)81 b Fk(sig\))4050
  +1386 y Fo(f)4409 1535 y Fk(/)4499 1561 y(*)4715 1535
  +y Fj(Step)37 b(5:)5232 1561 y Fk(*)5322 1535 y(/)4409
  +1685 y Fi(if)89 b Fk(\(mctx_save\(mctx_creat\))82 b(==)89
  +b(0\))g Fo(f)4767 1834 y Fk(mctx_called)d(=)k(TRUE;)4767
  +1983 y Fi(return)p Fk(;)4409 2133 y Fo(g)4409 2432 y
  +Fk(/)4499 2458 y(*)4715 2432 y Fj(Step)37 b(9:)5232 2458
  +y Fk(*)5322 2432 y(/)4409 2581 y(mctx_create_boot\(\);)4050
  +2731 y Fo(g)4050 3030 y Fi(void)88 b Fk(mctx_create_boot\()p
  +Fi(void)p Fk(\))4050 3179 y Fo(f)4409 3328 y Fi(void)g
  +Fk(\()4947 3354 y(*)5037 3328 y(mctx_start_func\)\()p
  +Fi(void)7009 3354 y Fk(*)7099 3328 y(\);)4409 3478 y
  +Fi(void)4857 3504 y Fk(*)4947 3478 y(mctx_start_arg;)4409
  +3777 y(/)4499 3803 y(*)4715 3777 y Fj(Step)37 b(10:)5307
  +3803 y Fk(*)5397 3777 y(/)4409 3926 y(sigprocmask\(SIG_SETMASK,)5485
  +4076 y(&mctx_creat_sigs,)84 b(NULL\);)4409 4374 y(/)4499
  +4400 y(*)4715 4374 y Fj(Step)37 b(11:)5307 4400 y Fk(*)5397
  +4374 y(/)4409 4524 y(mctx_start_func)84 b(=)90 b(mctx_creat_func;)4409
  +4673 y(mctx_start_arg)174 b(=)90 b(mctx_creat_arg;)4409
  +4972 y(/)4499 4998 y(*)4715 4972 y Fj(Step)37 b(12)g(&)g(Step)h(13:)
  +5950 4998 y Fk(*)6040 4972 y(/)4409 5122 y(mctx_switch\(mctx_creat,)82
  +b(&mctx_caller\);)4409 5421 y(/)4499 5447 y(*)4715 5421
  +y Fj(The)38 b(thread)f(``magically'')e(starts...)6834
  +5447 y Fk(*)6924 5421 y(/)4409 5570 y(mctx_start_func\(mctx_start_a)o
  +(rg\))o(;)4409 5869 y(/)4499 5895 y(*)4678 5869 y(NOTREACHED)5664
  +5895 y(*)5754 5869 y(/)4409 6018 y(abort\(\);)4050 6168
  +y Fo(g)4050 6721 y FA(3.4)198 b(Run-time)51 b(P)l(enalty)4050
  +7060 y Fx(After)64 b(this)g(discussion)f(of)h(the)g(implementation)g
  +(details,)k(an)4050 7259 y(ob)n(viously)c(occuring)g(question)f(no)l(w)
  +h(is)g(what)f(the)h(e)n(xpected)4050 7458 y(run-time)j(penalty)f(is.)
  +125 b(That)67 b(is,)k(what)c(does)e(our)i(presented)4050
  +7657 y(machine)88 b(conte)n(xt)h(implementation)g(cost)g(compared)f(to)
  +h(a)4050 7857 y Fp(ucontext)p Fx(\(3\))70 b(based)h(solution.)143
  +b(From)73 b(the)f(already)g(dis-)4050 8056 y(cussed)43
  +b(details)g(we)h(can)f(easily)g(guess)g(that)h(our)h(comple)n(x)e(ma-)
  +4050 8255 y(chine)56 b(conte)n(xt)f(creation)h(procedure)g(\()p
  +Fp(mctx)p 6784 8255 V 59 w(create)p Fx(\))e(will)4050
  +8454 y(be)41 b(certainly)g(noticeably)g(slo)l(wer)f(than)h(a)g
  +(solution)g(based)f(on)h(a)4050 8654 y Fp(ucontext)p
  +Fx(\(3\))e(f)n(acility)-11 b(.)4299 8867 y(But)96 b(a)g(wild)h(guess)e
  +(is)h(not)h(suf)l(\002cing)f(for)h(a)f(reason-)4050 9066
  +y(able)c(statement.)201 b(So)92 b(we)g(ha)m(v)n(e)f(written)h(a)f
  +Fr(Simple)h(Ma-)4050 9266 y(c)n(hine)43 b(Conte)m(xt)g(Benc)n(hmark)j
  +Fx(\(SMCB)d([32)q(]\))h(which)g(w)n(as)g(used)4050 9465
  +y(to)73 b(compare)f(run-time)i(costs)d(of)i(the)g Fp(mctx)p
  +6842 9465 V 58 w(create)d Fx(and)4050 9664 y Fp(mctx)p
  +4460 9664 V 58 w(switch)54 b Fx(functions)h(if)h(once)f(implemented)g
  +(through)4050 9863 y(the)34 b Fr(POSIX)43 b Fp(makecontext)p
  +Fx(\(3\)/)p Fp(swapcontext)p Fx(\(3\))28 b(func-)4050
  +10063 y(tions)112 b(\(as)f(sho)l(wn)h(in)g(section)f(2.3\),)129
  +b(and)112 b(once)f(imple-)4050 10262 y(mented)90 b(with)h(our)f(based)g
  +(f)n(allback)g(implementation)h(\(for)4050 10461 y(con)-7
  +b(v)n(enience)84 b(reasons)h(we)g(directly)h(used)f Fp(sigjmp)p
  +7412 10461 V 58 w(buf)p Fx(,)4050 10660 y Fp(sigsetjmp)p
  +Fx(\(3\))h(and)k Fp(siglongjmp)p Fx(\(3\))c(in)j(the)g(bench-)4050
  +10860 y(mark,)64 b(because)58 b(all)i(tested)f(platforms)h(pro)n(vided)
  +g(this\).)106 b(The)4050 11059 y(results)41 b(are)g(sho)l(wn)g(T)-13
  +b(able)41 b(3)h(belo)l(w)-11 b(.)4299 11272 y(As)106
  +b(one)h(can)f(deri)l(v)n(e)g(from)h(these)f(e)l(v)l(aluations,)122
  +b(our)p Black 3858 11872 a(7)p Black eop end
   %%Page: 8 8
  -8 7 bop Black Black 0 83 a Fx(nal)25 b(stack)f(trick)h(to)f(implement)f
  -Fp(mctx)p 1174 83 25 4 v 30 w(create)h Fx(in)g(practice)0
  -183 y(is)31 b(approximately)c(15)j(times)h(slo)n(wer)f(than)f(the)h
  -Fp(makecon-)0 282 y(text)p Fx(\(3\))36 b(based)i(v)n(ariant.)77
  -b(This)38 b(cost)g(should)f(not)g(be)h(ne-)0 382 y(glected.)f(On)25
  -b(the)f(other)g(hand,)g(the)h Fp(sigsetjmp)p Fx(\(3\)/)d
  -Fp(sig-)0 482 y(longjmp)p Fx(\(3\))29 b(based)i Fp(mctx)p
  -903 482 V 29 w(switch)g Fx(performs)f(about)g(as)0 581
  -y(good)17 b(as)h(the)g Fp(swapcontext)p Fx(\(3\))e(based)i(v)n(ariant)f
  -(\(the)g(reason)0 681 y(why)29 b(on)g(most)g(of)h(the)f(tested)h
  -(platforms)e(it)j(is)f(e)n(v)o(en)f(slightly)0 780 y(f)o(aster)37
  -b(is)h(not)f(kno)n(wn)e(\226)i(b)n(ut)g(we)g(guess)g(it)h(is)g(related)
  -e(to)h(a)0 880 y(greater)26 b(management)f(o)o(v)o(erhead)f(in)k(the)f
  -Fp(ucontext)p Fx(\(3\))e(f)o(a-)0 980 y(cility)-5 b(,)16
  -b(which)f(is)i(a)f(superset)f(of)g(the)h(functionality)e(we)h
  -(require\).)0 1079 y(Or)h(in)g(short:)22 b(our)15 b(presented)g(f)o
  -(allback)g(approach)e(costs)j(notice-)0 1179 y(able)24
  -b(e)o(xtra)g(CPU)h(c)o(ycles)f(on)g(thread)f(creation)g(time,)i(b)n(ut)
  -g(is)g(as)0 1279 y(f)o(ast)17 b(as)g(the)g(standardized)d(solution)i
  -(under)f(thread)g(dispatching)0 1378 y(time.)p 0 1492
  -1899 4 v 0 2931 4 1440 v 78 1562 a Fn(10000)j Ff(\002)e
  -Fn(mctx)p 475 1562 20 4 v 25 w(cr)o(eate)j(\(in)e(seconds\):)78
  -1710 y(Platf)n(orm)p 827 1734 4 79 v 561 w(mcsc)p 1080
  -1734 V 165 w(sjlj)p 1332 1734 V 103 w(o)o(v)o(erhead)78
  -1789 y Fm(Sun)g(Solaris)h(2.6)f(\(SP)-6 b(ARC\))p 827
  -1813 V 133 w(0.076)p 1080 1813 V 104 w(1.268)p 1332 1813
  -V 247 w(16.7)78 1868 y(DEC)16 b(T)n(ru64)h(5.0)g(\(Alpha\))p
  -827 1892 V 171 w(0.019)p 1080 1892 V 104 w(0.235)p 1332
  -1892 V 247 w(12.4)78 1947 y(SGI)g(IRIX)g(6.5)f(\(MIPS\))p
  -827 1971 V 227 w(0.105)p 1080 1971 V 104 w(1.523)p 1332
  -1971 V 247 w(14.5)78 2026 y(SCO)h(UnixW)-5 b(are)18 b(7.0)e(\(Intel\))p
  -827 2050 V 105 w(0.204)p 1080 2050 V 104 w(3.827)p 1332
  -2050 V 247 w(18.8)78 2105 y(HP)h(HP/UX)f(11.0)h(\(HPP)-6
  -b(A\))p 827 2128 V 144 w(0.057)p 1080 2128 V 104 w(0.667)p
  -1332 2128 V 247 w(11.8)1192 2184 y Fn(A)f(v)o(erage:)89
  -b(14.8)78 2311 y(10000)18 b Ff(\002)e Fn(mctx)p 475 2311
  -20 4 v 25 w(switch)i(\(in)f(seconds\):)78 2410 y(Platf)n(orm)p
  -827 2433 4 79 v 561 w(mcsc)p 1080 2433 V 165 w(sjlj)p
  -1332 2433 V 103 w(o)o(v)o(erhead)78 2488 y Fm(Sun)g(Solaris)h(2.6)f
  -(\(SP)-6 b(ARC\))p 827 2512 V 133 w(0.137)p 1080 2512
  -V 104 w(0.210)p 1332 2512 V 281 w(1.5)78 2567 y(DEC)16
  -b(T)n(ru64)h(5.0)g(\(Alpha\))p 827 2591 V 171 w(0.034)p
  -1080 2591 V 104 w(0.022)p 1332 2591 V 281 w(0.6)78 2646
  -y(SGI)g(IRIX)g(6.5)f(\(MIPS\))p 827 2670 V 227 w(0.235)p
  -1080 2670 V 104 w(0.190)p 1332 2670 V 281 w(0.8)78 2725
  -y(SCO)h(UnixW)-5 b(are)18 b(7.0)e(\(Intel\))p 827 2749
  -V 105 w(0.440)p 1080 2749 V 104 w(0.398)p 1332 2749 V
  -281 w(0.9)78 2804 y(HP)h(HP/UX)f(11.0)h(\(HPP)-6 b(A\))p
  -827 2828 V 144 w(0.106)p 1080 2828 V 104 w(0.065)p 1332
  -2828 V 281 w(0.6)1225 2883 y Fn(A)f(v)o(erage:)90 b(0.9)p
  -1896 2931 4 1440 v 0 2934 1899 4 v 0 3022 a(T)-6 b(able)18
  -b(3:)67 b Fm(Summary)20 b(of)h Fl(Simple)i(Mac)o(hine)g(Conte)o(xt)g
  -(Benc)o(hmark)g Fm(\(SMCB,)295 3090 y([32]\).)d(The)d(speed)g(of)g
  -(machine)h(conte)o(xt)h(creation)g(and)e(switching)295
  -3158 y(found)25 b(on)g(each)h(tested)g(operating)i(system.)44
  -b Fn(mcsc)p Fm(:)38 b(functional)295 3226 y Fh(makecontext)p
  -Fm(\(3\))11 b(/)i Fh(switchcontext)p Fm(\(3\),)f Fn(sjlj)p
  -Fm(:)20 b(functional)295 3293 y Fh(sigsetjmp)p Fm(\(3\)/)p
  -Fh(siglongjmp)p Fm(\(3\).)58 b Fn(o)o(v)o(erhead)p Fm(:)49
  -b(the)31 b(o)o(v)o(er)o(-)295 3359 y(head)18 b(of)f(using)g
  -Fn(sjlj)g Fm(instead)i(of)e Fn(mcsc)p Fm(.)0 3573 y FA(3.5)99
  -b(Remaining)25 b(Issues)0 3730 y Fx(The)20 b(presented)e(algorithm)h
  -(and)g(source)g(code)h(can)f(be)h(directly)0 3829 y(used)29
  -b(in)h(practice)f(for)f(implementing)g(a)i(minimal)e(threading)0
  -3929 y(system)e(or)g(the)g(concept)e(of)i(co-routines.)40
  -b(Its)27 b(big)f(adv)n(antage)0 4029 y(is)20 b(that)f(if)g(the)g
  -(operating)e(system)i(pro)o(vides)e(the)i(required)e(stan-)0
  -4128 y(dardized)j(primiti)n(v)o(es,)g(we)h(do)g(not)g(need)f(to)i(kno)n
  -(w)e(an)o(ything)f(at)0 4228 y(all)28 b(about)e(the)h(machine)g(we)g
  -(are)g(running)f(on)g(\227)i(e)n(v)o(erything)0 4327
  -y(just)d(w)o(orks.)38 b(Ne)n(v)o(ertheless,)25 b(there)f(remain)g(a)h
  -(fe)n(w)f(special)h(is-)0 4427 y(sues)c(we)f(still)i(ha)n(v)o(e)d(to)i
  -(discuss.)0 4577 y FA(The)26 b(W)-6 b(aggly)23 b(longjmp\(3\))i(after)h
  -(Retur)o(n)0 4702 y Fx(On)e(some)f(platforms,)h Fp(longjmp)p
  -Fx(\(3\))e(may)h(not)g(be)h(called)g(af-)0 4802 y(ter)30
  -b(the)g(function)e(which)i(called)f(the)h Fp(setjmp)p
  -Fx(\(3\))f(returned.)0 4902 y(When)22 b(this)i(is)f(done,)f(the)h
  -(stack)g(frame)e(situation)i(is)g(not)f(guar)n(-)0 5001
  -y(anteed)k(to)h(be)g(in)f(a)i(clean)e(and)g(consistent)h(state.)45
  -b(But)27 b(this)h(is)0 5101 y(e)o(xactly)c(the)h(mechanism)f(we)h(use)g
  -(in)g(order)f(to)h(get)g(rid)g(of)g(the)0 5200 y(signal)20
  -b(handler)f(scope)h(in)g(step)g(5.)125 5300 y(The)c(only)g(alternati)n
  -(v)o(e)g(w)o(ould)g(be)h(to)g(lea)n(v)o(e)g(the)g(signal)f(han-)0
  -5400 y(dler)27 b(via)g Fp(longjmp)p Fx(\(3\),)g(b)n(ut)g(then)g(we)h(w)
  -o(ould)e(ha)n(v)o(e)h(another)2025 83 y(problem,)f(as)h(e)o(xperience)d
  -(sho)n(wed.)41 b(F)o(or)26 b(instance,)j(R)q Fm(O)t(B)t(E)t(RT)2027
  -183 y Fx(S)t(.)k(T)t Fm(H)t(AU)r Fx(')-5 b(s)29 b Fr(Really)e(Simple)g
  -(Thr)m(eads)h Fx(\()p Fr(r)o(sthr)m(eads)p Fx(\))f([27)o(])h(w)o(as)
  -2025 282 y(ported)17 b(to)h(se)n(v)o(eral)f(platforms)g(and)g(w)o(as)i
  -(used)f(to)g(run)f(an)h(e)o(xper)n(-)2025 382 y(imental)23
  -b(multithreaded)d(v)o(ersion)i(of)h(the)g(Apache)f(webserv)o(er)-5
  -b(.)2027 482 y(T)t Fm(H)t(AU)r Fx(')g(s)18 b(approach)d(w)o(as)i
  -(similar)g(to)g(ours,)g(b)n(ut)f(dif)n(fered)f(signif-)2025
  -581 y(icantly)k(in)h(the)f(w)o(ay)g(the)h(signal)f(handler)f(is)i
  -(left.)25 b(In)19 b(particular)m(,)2025 681 y(in)27 b(an)f(attempt)g
  -(to)h(a)n(v)n(oid)f(the)g(unsafe)g(stack)h(frame,)g(it)g(used)f(a)2025
  -780 y Fp(longjmp)p Fx(\(3\))19 b(call)i(to)g(lea)n(v)o(e)f(the)h
  -(signal)f(handler)m(,)f(rather)h(than)2025 880 y(returning)27
  -b(from)h(it.)51 b(But)30 b(this)f(approach)e(does)h(not)h(w)o(ork)f(on)
  -2025 980 y(some)20 b Fr(SysV)6 b Fx(-deri)n(v)o(ed)18
  -b(k)o(ernels,)h(as)i(we)g(already)e(mentioned.)2150 1079
  -y(The)31 b(problem)e(is)k(that)e(these)h(k)o(ernels)f(do)g(not)g
  -(\223belie)n(v)o(e\224)2025 1179 y(that)e(the)g(code)g(is)h(out)e(of)h
  -(the)g(signal-handling)e(conte)o(xt,)i(un-)2025 1279
  -y(til)k(the)f(signal)f(handler)g(has)h(returned)e(\227)i(and)g
  -(accordingly)-5 b(,)2025 1378 y(refuse)28 b(to)g(allo)n(w)g
  -(readjustment)f(of)g(the)i(signal)f(stack)g(until)g(it)2025
  -1478 y(has.)61 b(But)32 b(with)g(the)h Fr(r)o(sthr)m(eads)f
  -Fx(approach,)g(the)h(signal)e(han-)2025 1577 y(dler)23
  -b(that)f(created)h(the)f(\002rst)i(thread)e(ne)n(v)o(er)f(returns,)i
  -(and)f(when)2025 1677 y Fr(r)o(sthr)m(eads)17 b Fx(w)o(ants)g(to)g
  -(create)g(the)g(second)f(thread,)g(these)h(k)o(ernels)2025
  -1777 y(refuse)23 b(to)g(readjust)g(the)h(signal)f(stack,)h(and)f(we)h
  -(are)f(stuck.)34 b(So)2025 1876 y(with)17 b(portability)e(in)i(mind,)f
  -(we)h(decided)e(that)i(it)g(is)h(better)e(to)h(get)2025
  -1976 y(rid)23 b(of)f(the)h(signal)g(handler)f(scope)g(with)h(the)g
  -(straight-forw)o(ard)2025 2076 y(\223)p Fp(return)p Fx(\224)38
  -b(and)h(instead)g(\002ght)g(the)g(mentioned)f(\(simpler\))2025
  -2175 y(problem)18 b(of)i(an)h(unsafe)e(stack)h(frame.)2150
  -2275 y(F)o(ortunately)-5 b(,)24 b(in)i(practice)e(this)i(is)h(not)e(as)
  -h(problematic)e(as)2025 2374 y(it)j(seems,)h(because)e(e)n(v)n
  -(aluations)f(\(for)h Fr(GNU)h(Pth)p Fx(\))f(on)g(a)h(wide)2025
  -2474 y(range)35 b(of)g(current)g(Unix)g(platforms)g(sho)n(wed)g(that)h
  -(one)f(can)2025 2574 y(reach)21 b(a)g(safe)h(stack)f(frame)f(again)h
  -(by)f(just)i(calling)f(a)h(function.)2025 2673 y(That)k(is)i(the)e
  -(reason)g(why)f(our)h(algorithm)f(enters)h(the)g(second)2025
  -2773 y(trampoline)18 b(function)h(in)h(step)h(9.)2025
  -2918 y FA(The)26 b(Uncooperati)o(v)o(e)g(longjmp\(3\))2025
  -3040 y Fx(Ev)o(en)e(on)i(operating)d(systems)j(which)f(ha)n(v)o(e)g(w)o
  -(orking)f Fr(POSIX)2025 3140 y Fx(functions,)c(our)g(approach)f(may)h
  -(theoretically)g(still)i(not)e(w)o(ork,)2025 3240 y(because)48
  -b Fp(longjmp)p Fx(\(3\))f(does)i(not)f(cooperate.)109
  -b(F)o(or)49 b(in-)2025 3339 y(stance,)17 b(on)e(some)h(platforms)f(the)
  -h(standard)f Fr(libc)i Fp(longjmp)p Fx(\(3\))2025 3439
  -y(branches)d(to)h(error)n(-handling)d(code)j(if)g(it)h(detects)g(that)f
  -(the)h(caller)2025 3539 y(tries)j(to)h(jump)e Fr(up)g
  -Fx(the)h(stack,)g Fr(i.e)o(.)p Fx(,)g(into)g(a)g(stack)g(frame)f(that)h
  -(has)2025 3638 y(already)g(returned.)2150 3738 y(This)28
  -b(is)h(usually)f(implemented)f(by)h(comparing)e(the)i(cur)n(-)2025
  -3837 y(rent)f(stack)g(pointer)f(to)h(the)g(one)f(in)h(the)g
  -Fp(jmp)p 3387 3837 25 4 v 30 w(buf)g Fx(structure.)2025
  -3937 y(That)j(is)h(why)e(it)i(is)g(important)e(for)g(our)h(algorithm)e
  -(to)j(return)2025 4037 y(from)19 b(the)g(signal)h(handler)e(and)h(this)
  -h(w)o(ay)f(enter)g(the)h(\(dif)n(ferent\))2025 4136 y(stack)31
  -b(of)g(the)h(parent)e(thread.)57 b(In)31 b(practice,)i(the)e(implemen-)
  -2025 4236 y(tation)26 b(in)g Fr(GNU)h(Pth)f Fx(sho)n(wed)g(that)g(then)
  -g(one)f(no)h(longer)f(suf-)2025 4336 y(fers)16 b(from)f(those)g
  -(uncooperati)n(v)o(e)d Fp(longjmp)p Fx(\(3\))i(implementa-)2025
  -4435 y(tions,)k(b)n(ut)f(one)f(should)h(k)o(eep)f(this)i(point)e(in)i
  -(mind)e(when)h(reach-)2025 4535 y(ing)29 b(e)n(v)o(en)f(more)h
  -(uncooperati)n(v)o(e)d(v)n(ariants)j(on)g(esoteric)g(Unix)2025
  -4634 y(platforms.)22 b(If)16 b(it)h(still)g(occurs,)f(one)g(can)g(only)
  -f(try)h(to)g(resume)g(the)2025 4734 y(operation)24 b(by)h(using)f(a)i
  -(possibly)f(e)o(xisting)g(platform-speci\002c)2025 4834
  -y(error)19 b(handling)f(hook.)2025 4979 y FA(Garbage)25
  -b(at)g(Bottom)g(of)g(Stacks)2025 5101 y Fx(There)17 b(is)i(a)f(subtle)f
  -(side-ef)n(fect)g(of)g(our)g(implementation:)22 b(there)2025
  -5201 y(remains)16 b(some)h(garbage)e(at)j(the)f(bottom)e(of)i(each)g
  -(thread)f(stack.)2025 5300 y(The)33 b(reason)g(is)i(that)e(if)h(a)g
  -(signal)g(is)g(deli)n(v)o(ered,)h(the)f(operat-)2025
  -5400 y(ing)d(system)g(pushes)f(some)h(state)h(onto)e(the)h(stack,)i
  -(which)e(is)p Black 1929 5700 a(8)p Black eop
  +TeXDict begin 8 7 bop Black Black 0 638 a Fx(signal)114
  +b(stack)f(trick)h(to)g(implement)g Fp(mctx)p 2861 638
  +50 7 v 58 w(create)e Fx(in)0 838 y(practice)100 b(is)g(approximately)g
  +(15)g(times)g(slo)l(wer)g(than)g(the)0 1037 y Fp(makecontext)p
  +Fx(\(3\))51 b(based)j(v)l(ariant.)92 b(This)55 b(cost)f(should)h(not)0
  +1236 y(be)k(ne)n(glected.)104 b(On)60 b(the)f(other)h(hand,)j(the)d
  +Fp(sigsetjmp)p Fx(\(3\)/)0 1435 y Fp(siglongjmp)p Fx(\(3\))36
  +b(based)j Fp(mctx)p 2057 1435 V 58 w(switch)e Fx(performs)j(about)0
  +1635 y(as)d(good)g(as)f(the)h Fp(swapcontext)p Fx(\(3\))d(based)i(v)l
  +(ariant)i(\(the)f(rea-)0 1834 y(son)c(wh)o(y)h(on)g(most)g(of)g(the)g
  +(tested)f(platforms)h(it)g(is)g(e)l(v)n(en)f(slightly)0
  +2033 y(f)n(aster)75 b(is)g(not)g(kno)l(wn)g(\226)g(b)m(ut)g(we)f(guess)
  +g(it)i(is)e(related)h(to)g(a)0 2233 y(greater)55 b(management)g(o)n(v)n
  +(erhead)f(in)h(the)g Fp(ucontext)p Fx(\(3\))e(f)n(a-)0
  +2432 y(cility)-11 b(,)34 b(which)e(is)h(a)f(superset)f(of)i(the)f
  +(functionality)h(we)f(require\).)0 2631 y(Or)h(in)f(short:)48
  +b(our)33 b(presented)e(f)n(allback)i(approach)f(costs)g(notice-)0
  +2830 y(able)49 b(e)n(xtra)g(CPU)h(c)n(ycles)e(on)i(thread)f(creation)g
  +(time,)j(b)m(ut)d(is)h(as)0 3030 y(f)n(ast)34 b(as)f(the)h
  +(standardized)f(solution)h(under)g(thread)g(dispatching)0
  +3229 y(time.)p 0 3456 3798 7 v 0 6335 7 2880 v 156 3597
  +a Fn(10000)h Ff(\002)e Fn(mctx)p 952 3597 40 7 v 48 w(cr)n(eate)h(\(in)
  +f(seconds\):)156 3893 y(Platf)m(orm)p 1654 3941 7 158
  +v 1118 w(mcsc)p 2159 3941 V 327 w(sjlj)p 2664 3941 V
  +206 w(o)o(v)o(erhead)156 4051 y Fm(Sun)h(Solaris)f(2.6)h(\(SP)-12
  +b(ARC\))p 1654 4098 V 266 w(0.076)p 2159 4098 V 207 w(1.268)p
  +2664 4098 V 497 w(16.7)156 4209 y(DEC)33 b(T)-5 b(ru64)35
  +b(5.0)f(\(Alpha\))p 1654 4256 V 342 w(0.019)p 2159 4256
  +V 207 w(0.235)p 2664 4256 V 497 w(12.4)156 4367 y(SGI)f(IRIX)g(6.5)i
  +(\(MIPS\))p 1654 4414 V 454 w(0.105)p 2159 4414 V 207
  +w(1.523)p 2664 4414 V 497 w(14.5)156 4524 y(SCO)e(UnixW)-11
  +b(are)34 b(7.0)h(\(Intel\))p 1654 4572 V 207 w(0.204)p
  +2159 4572 V 207 w(3.827)p 2664 4572 V 497 w(18.8)156
  +4682 y(HP)e(HP/UX)g(11.0)h(\(HPP)-12 b(A\))p 1654 4729
  +V 289 w(0.057)p 2159 4729 V 207 w(0.667)p 2664 4729 V
  +497 w(11.8)2383 4840 y Fn(A)f(v)o(erage:)175 b(14.8)156
  +5095 y(10000)35 b Ff(\002)e Fn(mctx)p 952 5095 40 7 v
  +48 w(switch)g(\(in)g(seconds\):)156 5291 y(Platf)m(orm)p
  +1654 5339 7 158 v 1118 w(mcsc)p 2159 5339 V 327 w(sjlj)p
  +2664 5339 V 206 w(o)o(v)o(erhead)156 5449 y Fm(Sun)h(Solaris)f(2.6)h
  +(\(SP)-12 b(ARC\))p 1654 5497 V 266 w(0.137)p 2159 5497
  +V 207 w(0.210)p 2664 5497 V 563 w(1.5)156 5607 y(DEC)33
  +b(T)-5 b(ru64)35 b(5.0)f(\(Alpha\))p 1654 5654 V 342
  +w(0.034)p 2159 5654 V 207 w(0.022)p 2664 5654 V 563 w(0.6)156
  +5765 y(SGI)f(IRIX)g(6.5)i(\(MIPS\))p 1654 5812 V 454
  +w(0.235)p 2159 5812 V 207 w(0.190)p 2664 5812 V 563 w(0.8)156
  +5922 y(SCO)e(UnixW)-11 b(are)34 b(7.0)h(\(Intel\))p 1654
  +5970 V 207 w(0.440)p 2159 5970 V 207 w(0.398)p 2664 5970
  +V 563 w(0.9)156 6080 y(HP)e(HP/UX)g(11.0)h(\(HPP)-12
  +b(A\))p 1654 6128 V 289 w(0.106)p 2159 6128 V 207 w(0.065)p
  +2664 6128 V 563 w(0.6)2450 6238 y Fn(A)f(v)o(erage:)174
  +b(0.9)p 3791 6335 7 2880 v 0 6342 3798 7 v 0 6516 a(T)-12
  +b(able)33 b(3:)133 b Fm(Summary)43 b(of)f Fl(Simple)f(Mac)n(hine)h
  +(Conte)m(xt)g(Benc)n(hmark)i Fm(\(SMCB,)589 6652 y([32)q(]\).)e(The)33
  +b(speed)f(of)h(machine)h(conte)n(xt)f(creation)g(and)g(switching)589
  +6788 y(found)51 b(on)f(each)f(tested)g(operating)h(system.)89
  +b Fn(mcsc)p Fm(:)71 b(functional)589 6925 y Fh(makecontext)p
  +Fm(\(3\))23 b(/)j Fh(switchcontext)p Fm(\(3\),)e Fn(sjlj)p
  +Fm(:)37 b(functional)589 7059 y Fh(sigsetjmp)p Fm(\(3\)/)p
  +Fh(siglongjmp)p Fm(\(3\).)116 b Fn(o)o(v)o(erhead)p Fm(:)94
  +b(the)59 b(o)n(v)n(er)m(-)589 7191 y(head)34 b(of)g(using)g
  +Fn(sjlj)f Fm(instead)h(of)g Fn(mcsc)p Fm(.)0 7619 y FA(3.5)198
  +b(Remaining)50 b(Issues)0 7932 y Fx(The)41 b(presented)g(algorithm)g
  +(and)g(source)g(code)f(can)h(be)g(directly)0 8131 y(used)59
  +b(in)i(practice)e(for)i(implementing)f(a)g(minimal)h(threading)0
  +8330 y(system)52 b(or)i(the)f(concept)f(of)h(co-routines.)86
  +b(Its)53 b(big)g(adv)l(antage)0 8530 y(is)39 b(that)f(if)i(the)e
  +(operating)h(system)f(pro)n(vides)g(the)h(required)g(stan-)0
  +8729 y(dardized)k(primiti)l(v)n(es,)h(we)f(do)g(not)h(need)f(to)h(kno)l
  +(w)f(an)n(ything)g(at)0 8928 y(all)56 b(about)f(the)h(machine)f(we)g
  +(are)h(running)g(on)g(\227)f(e)l(v)n(erything)0 9127
  +y(just)50 b(w)n(orks.)78 b(Ne)l(v)n(ertheless,)50 b(there)h(remain)f(a)
  +g(fe)l(w)g(special)g(is-)0 9327 y(sues)40 b(we)i(still)f(ha)m(v)n(e)f
  +(to)i(discuss.)0 9627 y FA(The)50 b(W)-13 b(aggly)49
  +b(longjmp\(3\))h(after)h(Retur)m(n)0 9877 y Fx(On)e(some)f(platforms,)i
  +Fp(longjmp)p Fx(\(3\))d(may)i(not)g(be)f(called)h(af-)0
  +10076 y(ter)61 b(the)g(function)h(which)e(called)h(the)g
  +Fp(setjmp)p Fx(\(3\))e(returned.)0 10276 y(When)46 b(this)g(is)g(done,)
  +h(the)g(stack)e(frame)i(situation)f(is)g(not)h(guar)m(-)0
  +10475 y(anteed)54 b(to)h(be)f(in)h(a)f(clean)g(and)h(consistent)e
  +(state.)90 b(But)55 b(this)f(is)0 10674 y(e)n(xactly)c(the)h(mechanism)
  +f(we)h(use)f(in)i(order)f(to)g(get)g(rid)h(of)f(the)0
  +10873 y(signal)41 b(handler)h(scope)e(in)i(step)f(5.)249
  +11073 y(The)35 b(only)g(alternati)l(v)n(e)g(w)n(ould)g(be)g(to)g(lea)m
  +(v)n(e)e(the)i(signal)g(han-)0 11272 y(dler)56 b(via)f
  +Fp(longjmp)p Fx(\(3\),)i(b)m(ut)f(then)f(we)h(w)n(ould)g(ha)m(v)n(e)e
  +(another)p Black Black 4050 638 a(problem,)i(as)d(e)n(xperience)f(sho)l
  +(wed.)86 b(F)n(or)53 b(instance,)60 b(R)r Fm(O)8 b(B)g(E)g(RT)4054
  +838 y Fx(S)g(.)65 b(T)8 b Fm(H)g(A)q(U)t Fx(')-9 b(s)57
  +b Fr(Really)g(Simple)g(Thr)-6 b(eads)55 b Fx(\()p Fr(r)n(sthr)-6
  +b(eads)p Fx(\))56 b([27)q(])g(w)n(as)4050 1037 y(ported)37
  +b(to)g(se)l(v)n(eral)f(platforms)i(and)e(w)n(as)h(used)f(to)i(run)f(an)
  +g(e)n(xper)m(-)4050 1236 y(imental)47 b(multithreaded)h(v)n(ersion)e
  +(of)i(the)f(Apache)f(webserv)n(er)-9 b(.)4054 1435 y(T)8
  +b Fm(H)g(A)q(U)t Fx(')-9 b(s)35 b(approach)f(w)n(as)g(similar)h(to)g
  +(ours,)g(b)m(ut)g(dif)l(fered)f(signif-)4050 1635 y(icantly)40
  +b(in)g(the)g(w)n(ay)g(the)g(signal)f(handler)h(is)g(left.)51
  +b(In)40 b(particular)-7 b(,)4050 1834 y(in)54 b(an)g(attempt)g(to)g(a)m
  +(v)m(oid)g(the)g(unsafe)f(stack)h(frame,)i(it)f(used)e(a)4050
  +2033 y Fp(longjmp)p Fx(\(3\))40 b(call)j(to)f(lea)m(v)n(e)f(the)i
  +(signal)f(handler)-7 b(,)42 b(rather)h(than)4050 2233
  +y(returning)60 b(from)f(it.)103 b(But)59 b(this)g(approach)f(does)h
  +(not)g(w)n(ork)g(on)4050 2432 y(some)41 b Fr(SysV)13
  +b Fx(-deri)l(v)n(ed)41 b(k)n(ernels,)g(as)f(we)i(already)f(mentioned.)
  +4299 2631 y(The)64 b(problem)h(is)e(that)h(these)g(k)n(ernels)f(do)h
  +(not)h(\223belie)l(v)n(e\224)4050 2830 y(that)59 b(the)h(code)e(is)h
  +(out)h(of)f(the)h(signal-handling)f(conte)n(xt,)k(un-)4050
  +3030 y(til)i(the)g(signal)g(handler)g(has)f(returned)h(\227)g(and)f
  +(accordingly)-11 b(,)4050 3229 y(refuse)57 b(to)h(allo)l(w)f
  +(readjustment)g(of)h(the)f(signal)g(stack)g(until)h(it)4050
  +3428 y(has.)121 b(But)66 b(with)f(the)g Fr(r)n(sthr)-6
  +b(eads)64 b Fx(approach,)70 b(the)65 b(signal)g(han-)4050
  +3627 y(dler)47 b(that)g(created)f(the)h(\002rst)g(thread)g(ne)l(v)n(er)
  +f(returns,)i(and)e(when)4050 3827 y Fr(r)n(sthr)-6 b(eads)33
  +b Fx(w)n(ants)i(to)g(create)f(the)h(second)f(thread,)h(these)f(k)n
  +(ernels)4050 4026 y(refuse)48 b(to)g(readjust)f(the)h(signal)g(stack,)g
  +(and)g(we)f(are)h(stuck.)70 b(So)4050 4225 y(with)35
  +b(portability)g(in)f(mind,)i(we)e(decided)f(that)i(it)f(is)g(better)h
  +(to)f(get)4050 4424 y(rid)47 b(of)h(the)f(signal)f(handler)h(scope)g
  +(with)g(the)g(straight-forw)n(ard)4050 4624 y(\223)p
  +Fp(return)p Fx(\224)77 b(and)i(instead)g(\002ght)h(the)g(mentioned)f
  +(\(simpler\))4050 4823 y(problem)42 b(of)g(an)f(unsafe)g(stack)g
  +(frame.)4299 5022 y(F)n(ortunately)-11 b(,)55 b(in)d(practice)g(this)g
  +(is)g(not)g(as)f(problematic)i(as)4050 5221 y(it)h(seems,)i(because)c
  +(e)l(v)l(aluations)h(\(for)i Fr(GNU)f(Pth)p Fx(\))g(on)h(a)e(wide)4050
  +5421 y(range)72 b(of)i(current)e(Unix)h(platforms)g(sho)l(wed)f(that)h
  +(one)g(can)4050 5620 y(reach)43 b(a)g(safe)g(stack)g(frame)h(ag)o(ain)f
  +(by)h(just)f(calling)h(a)f(function.)4050 5819 y(That)54
  +b(is)g(the)g(reason)f(wh)o(y)h(our)h(algorithm)g(enters)e(the)h(second)
  +4050 6018 y(trampoline)42 b(function)g(in)g(step)f(9.)4050
  +6309 y FA(The)50 b(Uncooperati)n(v)n(e)g(longjmp\(3\))4050
  +6553 y Fx(Ev)n(en)i(on)g(operating)h(systems)e(which)h(ha)m(v)n(e)f(w)n
  +(orking)i Fr(POSIX)4050 6752 y Fx(functions,)43 b(our)g(approach)g(may)
  +g(theoretically)g(still)h(not)f(w)n(ork,)4050 6952 y(because)97
  +b Fp(longjmp)p Fx(\(3\))g(does)h(not)h(cooperate.)223
  +b(F)n(or)99 b(in-)4050 7151 y(stance,)33 b(on)h(some)f(platforms)g(the)
  +h(standard)f Fr(libc)g Fp(longjmp)p Fx(\(3\))4050 7350
  +y(branches)e(to)h(error)m(-handling)g(code)g(if)g(it)g(detects)f(that)h
  +(the)f(caller)4050 7549 y(tries)39 b(to)g(jump)g Fr(up)h
  +Fx(the)e(stack,)h Fr(i.e)n(.)p Fx(,)e(into)i(a)g(stack)f(frame)i(that)f
  +(has)4050 7749 y(already)i(returned.)4299 7948 y(This)58
  +b(is)g(usually)f(implemented)h(by)g(comparing)g(the)g(cur)m(-)4050
  +8147 y(rent)d(stack)g(pointer)g(to)h(the)f(one)f(in)i(the)f
  +Fp(jmp)p 6775 8147 50 7 v 58 w(buf)g Fx(structure.)4050
  +8346 y(That)62 b(is)f(wh)o(y)h(it)f(is)h(important)g(for)g(our)g
  +(algorithm)g(to)f(return)4050 8546 y(from)41 b(the)f(signal)g(handler)g
  +(and)g(this)g(w)n(ay)h(enter)f(the)g(\(dif)l(ferent\))4050
  +8745 y(stack)63 b(of)h(the)f(parent)h(thread.)117 b(In)64
  +b(practice,)k(the)c(implemen-)4050 8944 y(tation)54 b(in)f
  +Fr(GNU)g(Pth)i Fx(sho)l(wed)d(that)i(then)f(one)h(no)f(longer)h(suf-)
  +4050 9144 y(fers)33 b(from)g(those)f(uncooperati)l(v)n(e)g
  +Fp(longjmp)p Fx(\(3\))f(implementa-)4050 9343 y(tions,)36
  +b(b)m(ut)f(one)h(should)f(k)n(eep)g(this)h(point)g(in)f(mind)h(when)f
  +(reach-)4050 9542 y(ing)60 b(e)l(v)n(en)f(more)h(uncooperati)l(v)n(e)f
  +(v)l(ariants)h(on)g(esoteric)f(Unix)4050 9741 y(platforms.)49
  +b(If)34 b(it)f(still)h(occurs,)g(one)f(can)f(only)i(try)g(to)f(resume)g
  +(the)4050 9941 y(operation)52 b(by)g(using)g(a)g(possibly)f(e)n
  +(xisting)h(platform-speci\002c)4050 10140 y(error)42
  +b(handling)g(hook.)4050 10430 y FA(Garbage)49 b(at)h(Bottom)g(of)g
  +(Stacks)4050 10675 y Fx(There)37 b(is)f(a)g(subtle)h(side-ef)l(fect)f
  +(of)h(our)g(implementation:)49 b(there)4050 10874 y(remains)35
  +b(some)f(g)o(arbage)h(at)g(the)g(bottom)h(of)f(each)f(thread)h(stack.)
  +4050 11073 y(The)69 b(reason)e(is)h(that)h(if)g(a)f(signal)g(is)g(deli)
  +l(v)n(ered,)74 b(the)68 b(operat-)4050 11272 y(ing)63
  +b(system)f(pushes)g(some)h(state)f(onto)h(the)g(stack,)k(which)c(is)p
  +Black 3858 11872 a(8)p Black eop end
   %%Page: 9 9
  -9 8 bop Black Black 0 83 a Fx(restored)27 b(later)m(,)j(when)e(the)h
  -(signal)f(handler)f(returns.)48 b(But)29 b(al-)0 183
  -y(though)h(we)h(return)f(from)h(the)g(signal)g(handler)m(,)h(we)g(jump)
  -e(in)0 282 y(again,)c(and)g(this)h(time)f(we)g(enter)g(not)g(directly)f
  -(at)i(the)f(bottom)0 382 y(of)17 b(the)g(stack,)g(because)f(of)h(the)g
  -Fp(setjmp)p Fx(\(3\))e(in)i(the)g(trampoline)0 482 y(function.)125
  -587 y(Since)31 b(the)h(operating)d(system)j(has)f(to)h(capture)e(all)j
  -(CPU)0 687 y(re)o(gisters)22 b(\(including)d(those)j(that)g(are)g
  -(ordinarily)e(scratch)i(re)o(g-)0 787 y(isters)f(or)f(caller)n(-sa)n(v)
  -o(e)g(re)o(gisters\),)f(there)h(can)g(be)g(a)h(f)o(air)f(amount)0
  -886 y(of)h(memory)e(at)i(the)h(bottom)d(of)i(the)g(established)g
  -(thread)f(stack.)0 986 y(F)o(or)d(some)h(systems)g(this)g(can)g(be)g(e)
  -n(v)o(en)e(up)i(to)g(1)g(KB)g(of)g(garbage)0 1085 y([27)o(].)25
  -b(But)19 b(e)o(xcept)g(for)f(the)i(additional)d(memory)h(consumption)0
  -1185 y(it)j(does)f(not)g(hurt.)125 1291 y(W)-7 b(e)32
  -b(just)g(ha)n(v)o(e)f(to)h(k)o(eep)f(in)h(mind)f(this)h(additional)e
  -(stack)0 1391 y(consumption)25 b(when)j(deciding)e(the)i(stack)g(size)h
  -(\()p Fr(sk)p 1569 1391 25 4 v 29 w(size)p Fx(\).)49
  -b(A)0 1490 y(reasonable)23 b(stack)i(size)g(usually)f(is)i(between)e
  -(16)g(and)g(32)g(KB.)0 1590 y(Less)31 b(is)h(neither)e(reasonable)f
  -(nor)h(al)o(w)o(ays)h(allo)n(wed)f(\(current)0 1689 y(Unix)c(platforms)
  -f(usually)h(require)f(a)i(stack)g(to)f(be)h(at)g(least)g(16)0
  -1789 y(KB)21 b(in)f(size\).)0 1957 y FA(Stack)26 b(Ov)o(er\003o)o(ws)0
  -2094 y Fx(There)47 b(is)j(a)e(noticeable)f(dif)n(ference)g(between)g
  -(the)h(initial)0 2193 y Fp(main)p Fx(\(\))29 b(thread)f(and)h(the)h(e)o
  -(xplicitly)f(spa)o(wned)f(threads:)44 b(the)0 2293 y(initial)31
  -b(thread)f(runs)g(on)h(the)f(standard)g(process)g(stack.)57
  -b(This)0 2393 y(stack)43 b(automatically)e(can)h(gro)n(w)g(under)f
  -(Unix,)47 b(while)c(the)0 2492 y(stacks)22 b(of)g(the)g(spa)o(wned)f
  -(threads)g(are)h(\002x)o(ed)f(in)h(size.)31 b(So)22 b(stack)0
  -2592 y(o)o(v)o(er\003o)n(ws)k(can)h(occur)f(for)h(the)g(spa)o(wned)f
  -(threads.)45 b(This)28 b(im-)0 2692 y(plies)g(that)g(the)g(parent)f
  -(has)h(to)h(mak)o(e)e(a)h(reasonable)f(guess)h(of)0 2791
  -y(the)22 b(threads)f(stack)h(space)g(requirement)d(already)i(at)h(spa)o
  -(wning)0 2891 y(time.)125 2997 y(And)g(there)g(is)i(no)e(really)h
  -(portable)e(solution)h(to)h(this)g(prob-)0 3096 y(lem,)32
  -b(because)d(e)n(v)o(en)f(if)i(the)g(thread)f(library')-5
  -b(s)28 b(scheduler)h(can)0 3196 y(detect)16 b(the)g(stack)g(o)o(v)o
  -(er\003o)n(w)-5 b(,)15 b(it)i(cannot)e(easily)h(resize)g(the)h(stack.)0
  -3296 y(The)34 b(reason)g(is)h(simply)f(that)g(the)h(stack)f
  -(initialization)g(goes)0 3395 y(hand)26 b(in)h(hand)f(with)i(the)f
  -(initialization)f(of)h(the)g(start)h(routine,)0 3495
  -y(as)d(we)g(discussed)f(before.)36 b(And)24 b(this)h(start)g(routine)e
  -(has)i(to)g(be)0 3594 y(a)e(real)g(C)h(function)d(in)i(order)f(to)g
  -Fr(call)p Fx(.)33 b(But)24 b(once)e(the)h(thread)f(is)0
  -3694 y(running,)i(there)g(no)h(longer)f(e)o(xists)h(such)g(an)g(entry)f
  -(point.)39 b(So,)0 3794 y(e)n(v)o(en)30 b(if)h(the)g(scheduler)f(w)o
  -(ould)g(be)h(able)f(to)h(gi)n(v)o(e)g(the)g(thread)0
  -3893 y(a)g(ne)n(w)g(enlar)o(ged)e(stack,)34 b(there)c(is)i(no)e(chance)
  -g(to)i(restart)f(the)0 3993 y(thread)19 b(on)h(this)h(ne)n(w)f(stack.)
  -125 4099 y(Or)i(more)f(correct,)g(there)g(is)i(no)f Fr(portable)f
  -Fx(w)o(ay)h(to)g(achie)n(v)o(e)0 4198 y(it.)j(As)18 b(with)g(the)g(pre)
  -n(vious)e(problems,)g(there)h(is)i(a)f(non-portable)0
  -4298 y(solution.)49 b(That)28 b(is)i(why)d(our)h(implementation)e(did)j
  -(not)f(deal)0 4398 y(with)g(this)h(issue.)48 b(Instead)28
  -b(in)g(practice)f(one)g(usually)h(lets)h(the)0 4497 y(scheduler)16
  -b(just)h(detect)g(the)g(stack)h(o)o(v)o(er\003o)n(w)d(and)h(terminate)h
  -(the)0 4597 y(thread.)25 b(This)c(is)h(done)d(by)i(using)f(a)h(red)f
  -(zone)g(at)h(the)g(top)f(of)h(the)0 4696 y(stack)i(which)g(is)h(mark)o
  -(ed)e(with)h(a)h(magic)e(v)n(alue)h(the)g(scheduler)0
  -4796 y(checks)d(between)f(thread)g(dispatching)g(operations.)125
  -4902 y(Resizing)g(solutions)f(are)h(only)f(possible)h(in)g
  -(semi-portable)0 5001 y(w)o(ays.)39 b(One)25 b(approach)e(is)j(to)f
  -(place)f(the)h(thread)f(stacks)i(into)e(a)0 5101 y(memory)g(mapped)h
  -(area)h(\(see)h Fp(mmap)p Fx(\(2\)\))d(of)i(the)g(process)g(ad-)0
  -5201 y(dress)31 b(space)f(and)g(let)h(the)g(scheduler)e(catch)i
  -Fp(SIGSEGV)e Fx(sig-)0 5300 y(nals.)70 b(When)34 b(such)h(a)g(signal)g
  -(occurs,)j(because)c(of)h(a)g(stack)0 5400 y(o)o(v)o(er\003o)n(w)i(in)j
  -(this)f(area,)44 b(the)39 b(scheduler)f(e)o(xplicitly)g(resizes)2025
  -83 y(the)c(memory)e(mapped)h(area.)66 b(This)34 b(resizing)g(can)g(be)g
  -(done)2025 183 y(either)e(by)f(cop)o(ying)f(the)i(stack)h(contents)e
  -(into)h(a)g(ne)n(w)g(lar)o(ger)2025 282 y(area)c(which)g(is)h(then)f
  -(re-mapped)e(to)i(the)h(old)f(address)g(or)g(via)2025
  -382 y(an)k(e)n(v)o(en)f(more)g(ele)o(gant)f(w)o(ay)-5
  -b(,)34 b(as)f(the)f(v)o(endor)d(threading)h(li-)2025
  -482 y(braries)e(of)g Fr(Sun)f(Solaris)p Fx(,)j Fr(F)-5
  -b(r)m(eeBSD)28 b Fx(and)g Fr(DEC)h(T)-5 b(ru64)28 b Fx(do)g(it:)2025
  -581 y(the)j(thread)g(stacks)h(are)f(allocated)g(inside)g(memory)f
  -(mapped)2025 681 y(areas)g(which)f(are)h(already)e(initially)i(a)g(fe)n
  -(w)g(MB)g(in)g(\(virtual\))2025 780 y(size)25 b(and)f(then)g(one)h
  -(just)g(relies)g(on)f(the)g(virtual)g(memory)f(sys-)2025
  -880 y(tem')-5 b(s)31 b(feature)e(that)h(only)f(the)h(actually)g
  -(consumed)e(memory)2025 980 y(space)20 b(is)h(mapped.)2025
  -1149 y FA(Startup)26 b(Routine)g(T)-9 b(ermination)2025
  -1287 y Fx(There)48 b(is)i(a)g(cruel)e Fp(abort)p Fx(\(3\))g(call)h(at)h
  -(the)f(end)g(of)f(our)2025 1387 y Fp(mctx)p 2230 1387
  -V 29 w(create)p 2559 1387 V 29 w(boot)d Fx(function.)97
  -b(This)45 b(means,)50 b(if)c(the)2025 1486 y(startup)18
  -b(routine)g(w)o(ould)g(return,)f(the)i(process)f(is)i(aborted.)j(That)
  -2025 1586 y(is)29 b(ob)o(viously)e(not)h(reasonable,)h(so)f(why)g(ha)n
  -(v)o(e)g(we)h(written)f(it)2025 1685 y(this)21 b(w)o(ay?)2150
  -1792 y(If)15 b(the)g(thread)f(returns)h(from)f(the)h(startup)g
  -(routine,)g(it)h(should)2025 1891 y(be)22 b(cleanly)f(terminated.)29
  -b(But)23 b(it)g(cannot)e(terminate)g(itself)i(\(for)2025
  -1991 y(instance,)g(because)f(it)h(cannot)f(free)g(its)i(o)n(wn)e(stack)
  -h(while)g(run-)2025 2091 y(ning)31 b(on)g(it,)j Fr(etc.)p
  -Fx(\).)59 b(So)31 b(the)h(termination)e(handling)f(actually)2025
  -2190 y(is)g(the)f(task)g(of)g(the)f(thread)g(library)g(scheduler)-5
  -b(.)47 b(As)29 b(a)f(conse-)2025 2290 y(quence,)21 b(the)h(thread)f
  -(spa)o(wning)g(function)f(of)i(a)h(thread)e(library)2025
  -2389 y(should)e(be)h(not)g(directly)g Fp(mctx)p 2973
  -2389 V 29 w(create)p Fx(.)2150 2496 y(Instead)27 b(the)g(thread)g(spa)o
  -(wning)f(function)g(should)h(use)h(an)2025 2595 y(additional)17
  -b(trampoline)g(function)f(as)j(the)g(higher)n(-le)n(v)o(el)d(startup)
  -2025 2695 y(routine.)23 b(And)18 b(this)h(trampoline)e(function)g
  -(performs)g(a)i(conte)o(xt)2025 2795 y(switch)26 b(back)f(into)h(the)f
  -(thread)g(library)g(scheduler)f(before)h(the)2025 2894
  -y(lo)n(wer)n(-le)n(v)o(el)f(startup)h(routine)f(w)o(ould)g(return.)39
  -b(The)25 b(scheduler)2025 2994 y(then)g(can)h(safely)f(remo)o(v)o(e)f
  -(the)i(thread)e(and)h(its)i(machine)d(con-)2025 3094
  -y(te)o(xt.)35 b(That)24 b(is)g(why)f(the)h Fp(abort)p
  -Fx(\(3\))e(call)i(is)h(ne)n(v)o(er)d(reached)g(in)2025
  -3193 y(practice)27 b(\(more)f(details)i(can)f(be)h(found)d(in)j(the)f
  -(implementa-)2025 3293 y(tions)22 b(of)f Fp(pth)p 2455
  -3293 V 29 w(spawn)h Fx(and)f Fp(pth)p 3048 3293 V 29
  -w(exit)g Fx(in)h Fp(pth)p 3535 3293 V 30 w(lib.c)f Fx(of)2025
  -3392 y Fr(GNU)g(Pth)f Fx([25)o(]\))2025 3562 y FA(The)26
  -b(sigstack\(2\))f(F)n(allback)f(Situation)2025 3700 y
  -Fx(Not)37 b(all)h(platforms)e(pro)o(vide)g(the)h(standardized)e
  -Fp(sigalt-)2025 3799 y(stack)p Fx(\(2\).)d(Instead)22
  -b(the)o(y)g(at)i(least)g(pro)o(vide)c(the)j Fr(4.2BSD)f
  -Fx(an-)2025 3899 y(cestor)i(function)f Fp(sigstack)p
  -Fx(\(2\).)35 b(But)24 b(one)g(cannot)f(tri)n(vially)2025
  -3999 y(replace)c Fp(sigaltstack)p Fx(\(2\))e(by)i Fp(sigstack)p
  -Fx(\(2\))f(in)i(this)g(sit-)2025 4098 y(uation,)c(because)f(in)i
  -(contrast)e(to)i Fp(sigaltstack)p Fx(\(2\),)d(the)i(old)2025
  -4198 y Fp(sigstack)p Fx(\(2\))34 b(does)h(not)g(automatically)g(handle)
  -f(the)i(ma-)2025 4297 y(chine)20 b(dependent)e(direction)g(of)i(stack)h
  -(gro)n(wth.)2150 4404 y(Instead,)44 b(the)c(caller)g(has)g(to)g(kno)n
  -(w)f(the)h(direction)f(and)2025 4503 y(al)o(w)o(ays)52
  -b(call)f Fp(sigstack)p Fx(\(2\))e(with)j(the)f(address)g(of)g(the)2025
  -4603 y(bottom)h(of)g(the)h(stack.)123 b(So,)61 b(in)54
  -b(a)f(real-w)o(orld)e(imple-)2025 4703 y(mentation)38
  -b(one)h(\002rst)h(has)g(to)g(determine)e(the)i(direction)e(of)2025
  -4802 y(stack)i(gro)n(wth)e(in)i(order)f(to)h(use)g Fp(sigstack)p
  -Fx(\(2\))d(as)k(a)f(re-)2025 4902 y(placement)49 b(for)h
  -Fp(sigaltstack)p Fx(\(2\).)113 b(F)o(ortunately)49 b(this)2025
  -5001 y(is)55 b(easier)e(than)h(it)g(seems)g(on)f(the)h(\002rst)g(look)f
  -(\(for)g(de-)2025 5101 y(tails)43 b(see)g(the)f(macros)f
  -Fp(AC)p 2886 5101 V 30 w(CHECK)p 3166 5101 V 29 w(STACKGROWTH)f
  -Fx(and)2025 5201 y Fp(AC)p 2130 5201 V 30 w(CHECK)p 2410
  -5201 V 28 w(STACKSETUP)33 b Fx(in)h(\002le)h Fp(aclocal.m4)e
  -Fx(from)2025 5300 y Fr(GNU)24 b(Pth)f Fx([25)o(]\).)33
  -b(Alternati)n(v)o(ely)21 b(if)j(one)e(can)h(af)n(ford)f(to)h(w)o(aste)
  -2025 5400 y(memory)-5 b(,)16 b(one)h(can)h(use)g(an)g(ele)o(gant)f
  -(trick:)24 b(to)18 b(set)h(up)e(a)i(stack)f(of)p Black
  -1929 5700 a(9)p Black eop
  +TeXDict begin 9 8 bop Black Black 0 638 a Fx(restored)58
  +b(later)-7 b(,)62 b(when)57 b(the)h(signal)g(handler)g(returns.)100
  +b(But)58 b(al-)0 838 y(though)64 b(we)f(return)i(from)f(the)g(signal)f
  +(handler)-7 b(,)69 b(we)64 b(jump)g(in)0 1037 y(ag)o(ain,)56
  +b(and)d(this)g(time)h(we)f(enter)g(not)g(directly)h(at)f(the)g(bottom)0
  +1236 y(of)35 b(the)g(stack,)g(because)f(of)h(the)g Fp(setjmp)p
  +Fx(\(3\))e(in)j(the)f(trampoline)0 1435 y(function.)249
  +1647 y(Since)64 b(the)g(operating)g(system)g(has)f(to)h(capture)g(all)g
  +(CPU)0 1846 y(re)n(gisters)44 b(\(including)i(those)e(that)h(are)g
  +(ordinarily)h(scratch)e(re)n(g-)0 2046 y(isters)d(or)h(caller)m(-sa)m
  +(v)n(e)e(re)n(gisters\),)g(there)i(can)f(be)g(a)g(f)n(air)i(amount)0
  +2245 y(of)g(memory)h(at)f(the)g(bottom)h(of)f(the)g(established)f
  +(thread)h(stack.)0 2444 y(F)n(or)37 b(some)f(systems)f(this)i(can)f(be)
  +g(e)l(v)n(en)g(up)h(to)f(1)h(KB)f(of)h(g)o(arbage)0 2643
  +y([27].)51 b(But)40 b(e)n(xcept)e(for)i(the)g(additional)g(memory)g
  +(consumption)0 2843 y(it)i(does)f(not)g(hurt.)249 3054
  +y(W)-13 b(e)64 b(just)g(ha)m(v)n(e)f(to)h(k)n(eep)h(in)f(mind)h(this)f
  +(additional)h(stack)0 3253 y(consumption)57 b(when)f(deciding)h(the)g
  +(stack)f(size)g(\()p Fr(sk)p 3137 3253 50 7 v 60 w(size)p
  +Fx(\).)96 b(A)0 3453 y(reasonable)49 b(stack)h(size)f(usually)h(is)g
  +(between)g(16)g(and)g(32)h(KB.)0 3652 y(Less)62 b(is)g(neither)h
  +(reasonable)e(nor)i(al)n(w)n(ays)f(allo)l(wed)g(\(current)0
  +3851 y(Unix)54 b(platforms)h(usually)e(require)i(a)e(stack)h(to)g(be)g
  +(at)g(least)f(16)0 4050 y(KB)41 b(in)h(size\).)0 4386
  +y FA(Stack)50 b(Ov)n(er\003o)n(ws)0 4660 y Fx(There)98
  +b(is)f(a)h(noticeable)f(dif)l(ference)g(between)g(the)g(initial)0
  +4859 y Fp(main)p Fx(\(\))59 b(thread)i(and)f(the)g(e)n(xplicitly)g(spa)
  +n(wned)f(threads:)89 b(the)0 5059 y(initial)63 b(thread)g(runs)g(on)f
  +(the)h(standard)f(process)g(stack.)114 b(This)0 5258
  +y(stack)85 b(automatically)h(can)g(gro)l(w)g(under)g(Unix,)97
  +b(while)86 b(the)0 5457 y(stacks)44 b(of)h(the)g(spa)n(wned)f(threads)g
  +(are)h(\002x)n(ed)g(in)g(size.)60 b(So)46 b(stack)0 5656
  +y(o)n(v)n(er\003o)l(ws)54 b(can)h(occur)h(for)g(the)g(spa)n(wned)e
  +(threads.)93 b(This)55 b(im-)0 5856 y(plies)i(that)g(the)g(parent)g
  +(has)f(to)h(mak)n(e)g(a)g(reasonable)f(guess)g(of)0 6055
  +y(the)45 b(threads)f(stack)g(space)f(requirement)i(already)f(at)h(spa)n
  +(wning)0 6254 y(time.)249 6466 y(And)i(there)f(is)h(no)f(really)h
  +(portable)g(solution)g(to)g(this)f(prob-)0 6665 y(lem,)65
  +b(because)59 b(e)l(v)n(en)g(if)i(the)f(thread)g(library')-9
  +b(s)61 b(scheduler)f(can)0 6864 y(detect)33 b(the)g(stack)g(o)n(v)n
  +(er\003o)l(w)-11 b(,)34 b(it)f(cannot)h(easily)e(resize)h(the)g(stack.)
  +0 7063 y(The)70 b(reason)f(is)h(simply)g(that)g(the)f(stack)g
  +(initialization)i(goes)0 7263 y(hand)55 b(in)h(hand)f(with)h(the)f
  +(initialization)h(of)f(the)h(start)f(routine,)0 7462
  +y(as)49 b(we)h(discussed)e(before.)77 b(And)50 b(this)g(start)f
  +(routine)i(has)e(to)h(be)0 7661 y(a)d(real)f(C)h(function)g(in)g(order)
  +g(to)g Fr(call)p Fx(.)67 b(But)47 b(once)f(the)h(thread)f(is)0
  +7860 y(running,)54 b(there)d(no)g(longer)g(e)n(xists)f(such)h(an)g
  +(entry)g(point.)80 b(So,)0 8060 y(e)l(v)n(en)62 b(if)h(the)g(scheduler)
  +f(w)n(ould)i(be)e(able)h(to)g(gi)l(v)n(e)f(the)h(thread)0
  +8259 y(a)g(ne)l(w)f(enlar)m(ged)h(stack,)k(there)c(is)g(no)g(chance)f
  +(to)h(restart)g(the)0 8458 y(thread)41 b(on)h(this)f(ne)l(w)g(stack.)
  +249 8670 y(Or)k(more)h(correct,)f(there)g(is)g(no)g Fr(portable)f
  +Fx(w)n(ay)h(to)h(achie)l(v)n(e)0 8869 y(it.)k(As)35 b(with)i(the)f(pre)
  +l(vious)g(problems,)h(there)f(is)g(a)h(non-portable)0
  +9068 y(solution.)101 b(That)59 b(is)e(wh)o(y)i(our)f(implementation)h
  +(did)f(not)g(deal)0 9268 y(with)f(this)g(issue.)97 b(Instead)56
  +b(in)h(practice)g(one)g(usually)f(lets)h(the)0 9467 y(scheduler)35
  +b(just)g(detect)g(the)g(stack)f(o)n(v)n(er\003o)l(w)h(and)g(terminate)g
  +(the)0 9666 y(thread.)54 b(This)42 b(is)h(done)f(by)g(using)g(a)h(red)f
  +(zone)g(at)g(the)h(top)f(of)h(the)0 9865 y(stack)k(which)g(is)g(mark)n
  +(ed)h(with)f(a)g(magic)h(v)l(alue)e(the)i(scheduler)0
  +10065 y(checks)40 b(between)h(thread)h(dispatching)f(operations.)249
  +10276 y(Resizing)d(solutions)h(are)g(only)h(possible)e(in)i
  +(semi-portable)0 10475 y(w)n(ays.)79 b(One)50 b(approach)h(is)f(to)h
  +(place)g(the)f(thread)h(stacks)f(into)h(a)0 10675 y(memory)j(mapped)f
  +(area)g(\(see)g Fp(mmap)p Fx(\(2\)\))g(of)h(the)f(process)g(ad-)0
  +10874 y(dress)61 b(space)h(and)g(let)g(the)g(scheduler)g(catch)f
  +Fp(SIGSEGV)f Fx(sig-)0 11073 y(nals.)139 b(When)71 b(such)f(a)h(signal)
  +g(occurs,)77 b(because)70 b(of)h(a)g(stack)0 11272 y(o)n(v)n(er\003o)l
  +(w)79 b(in)g(this)h(area,)88 b(the)79 b(scheduler)g(e)n(xplicitly)g
  +(resizes)p Black Black 4050 638 a(the)69 b(memory)h(mapped)f(area.)133
  +b(This)70 b(resizing)f(can)f(be)h(done)4050 838 y(either)c(by)g(cop)n
  +(ying)h(the)f(stack)f(contents)h(into)g(a)g(ne)l(w)g(lar)m(ger)4050
  +1037 y(area)57 b(which)h(is)f(then)h(re-mapped)g(to)g(the)f(old)h
  +(address)f(or)h(via)4050 1236 y(an)65 b(e)l(v)n(en)e(more)i(ele)n(g)o
  +(ant)f(w)n(ay)-11 b(,)70 b(as)64 b(the)h(v)n(endor)f(threading)h(li-)
  +4050 1435 y(braries)57 b(of)h Fr(Sun)g(Solaris)p Fx(,)j
  +Fr(F)-9 b(r)j(eeBSD)57 b Fx(and)h Fr(DEC)f(T)-9 b(ru64)58
  +b Fx(do)g(it:)4050 1635 y(the)64 b(thread)g(stacks)f(are)h(allocated)f
  +(inside)h(memory)g(mapped)4050 1834 y(areas)c(which)g(are)g(already)g
  +(initially)i(a)e(fe)l(w)g(MB)g(in)h(\(virtual\))4050
  +2033 y(size)50 b(and)g(then)g(one)g(just)g(relies)g(on)h(the)f(virtual)
  +h(memory)g(sys-)4050 2233 y(tem')-9 b(s)61 b(feature)h(that)f(only)h
  +(the)f(actually)g(consumed)g(memory)4050 2432 y(space)40
  +b(is)i(mapped.)4050 2722 y FA(Startup)50 b(Routine)g(T)-18
  +b(ermination)4050 2967 y Fx(There)99 b(is)g(a)g(cruel)h
  +Fp(abort)p Fx(\(3\))e(call)h(at)g(the)g(end)g(of)h(our)4050
  +3166 y Fp(mctx)p 4460 3166 V 58 w(create)p 5118 3166
  +V 58 w(boot)89 b Fx(function.)200 b(This)91 b(means,)102
  +b(if)91 b(the)4050 3365 y(startup)38 b(routine)h(w)n(ould)g(return,)h
  +(the)e(process)f(is)i(aborted.)50 b(That)4050 3564 y(is)58
  +b(ob)n(viously)f(not)i(reasonable,)h(so)e(wh)o(y)g(ha)m(v)n(e)f(we)g
  +(written)i(it)4050 3764 y(this)41 b(w)n(ay?)4299 3963
  +y(If)32 b(the)g(thread)f(returns)h(from)h(the)e(startup)h(routine,)h
  +(it)f(should)4050 4162 y(be)45 b(cleanly)g(terminated.)62
  +b(But)45 b(it)h(cannot)e(terminate)i(itself)f(\(for)4050
  +4361 y(instance,)h(because)g(it)g(cannot)h(free)f(its)h(o)l(wn)f(stack)
  +g(while)g(run-)4050 4561 y(ning)64 b(on)g(it,)70 b Fr(etc.)p
  +Fx(\).)117 b(So)65 b(the)f(termination)g(handling)g(actually)4050
  +4760 y(is)57 b(the)f(task)h(of)g(the)g(thread)g(library)g(scheduler)-9
  +b(.)97 b(As)56 b(a)h(conse-)4050 4959 y(quence,)45 b(the)g(thread)g
  +(spa)n(wning)g(function)g(of)h(a)f(thread)g(library)4050
  +5158 y(should)c(be)h(not)f(directly)h Fp(mctx)p 5945
  +5158 V 58 w(create)p Fx(.)4299 5358 y(Instead)56 b(the)g(thread)h(spa)n
  +(wning)e(function)i(should)f(use)g(an)4050 5557 y(additional)38
  +b(trampoline)g(function)h(as)e(the)h(higher)m(-le)l(v)n(el)f(startup)
  +4050 5756 y(routine.)50 b(And)38 b(this)h(trampoline)f(function)h
  +(performs)g(a)f(conte)n(xt)4050 5955 y(switch)52 b(back)g(into)h(the)g
  +(thread)f(library)i(scheduler)d(before)i(the)4050 6155
  +y(lo)l(wer)m(-le)l(v)n(el)e(startup)g(routine)h(w)n(ould)g(return.)82
  +b(The)52 b(scheduler)4050 6354 y(then)g(can)g(safely)g(remo)n(v)n(e)g
  +(the)g(thread)g(and)h(its)f(machine)g(con-)4050 6553
  +y(te)n(xt.)72 b(That)48 b(is)h(wh)o(y)f(the)h Fp(abort)p
  +Fx(\(3\))e(call)h(is)g(ne)l(v)n(er)g(reached)g(in)4050
  +6752 y(practice)56 b(\(more)g(details)g(can)f(be)h(found)g(in)h(the)f
  +(implementa-)4050 6952 y(tions)44 b(of)h Fp(pth)p 4910
  +6952 V 59 w(spawn)d Fx(and)i Fp(pth)p 6095 6952 V 59
  +w(exit)f Fx(in)i Fp(pth)p 7071 6952 V 58 w(lib.c)e Fx(of)4050
  +7151 y Fr(GNU)e(Pth)h Fx([25)q(]\))4050 7441 y FA(The)50
  +b(sigstack\(2\))f(F)-5 b(allback)50 b(Situation)4050
  +7686 y Fx(Not)230 b(all)h(platforms)g(pro)n(vide)f(the)g(standardized)
  +4050 7885 y Fp(sigaltstack)p Fx(\(2\).)266 b(Instead)114
  +b(the)n(y)f(at)i(least)e(pro)n(vide)4050 8084 y(the)104
  +b Fr(4.2BSD)g Fx(ancestor)g(function)g Fp(sigstack)p
  +Fx(\(2\).)237 b(But)4050 8284 y(one)122 b(cannot)g(tri)l(vially)h
  +(replace)e Fp(sigaltstack)p Fx(\(2\))e(by)4050 8483 y
  +Fp(sigstack)p Fx(\(2\))63 b(in)k(this)e(situation,)72
  +b(because)64 b(in)i(contrast)g(to)4050 8682 y Fp(sigaltstack)p
  +Fx(\(2\),)45 b(the)i(old)g Fp(sigstack)p Fx(\(2\))e(does)i(not)g(au-)
  +4050 8881 y(tomatically)64 b(handle)g(the)g(machine)f(dependent)g
  +(direction)i(of)4050 9081 y(stack)41 b(gro)l(wth.)4299
  +9280 y(Instead,)90 b(the)81 b(caller)g(has)g(to)g(kno)l(w)h(the)f
  +(direction)g(and)4050 9479 y(al)n(w)n(ays)103 b(call)h
  +Fp(sigstack)p Fx(\(2\))d(with)i(the)h(address)e(of)i(the)4050
  +9678 y(bottom)j(of)h(the)e(stack.)247 b(So,)123 b(in)107
  +b(a)g(real-w)n(orld)g(imple-)4050 9878 y(mentation)80
  +b(one)g(\002rst)h(has)e(to)i(determine)f(the)g(direction)h(of)4050
  +10077 y(stack)f(gro)l(wth)h(in)f(order)h(to)g(use)f Fp(sigstack)p
  +Fx(\(2\))e(as)i(a)h(re-)4050 10276 y(placement)102 b(for)g
  +Fp(sigaltstack)p Fx(\(2\).)230 b(F)n(ortunately)102 b(this)4050
  +10475 y(is)108 b(easier)g(than)g(it)h(seems)e(on)i(the)f(\002rst)h
  +(look)g(\(for)g(de-)4050 10675 y(tails)85 b(see)f(the)h(macros)g
  +Fp(AC)p 5772 10675 V 59 w(CHECK)p 6331 10675 V 58 w(STACKGROWTH)c
  +Fx(and)4050 10874 y Fp(AC)p 4260 10874 V 59 w(CHECK)p
  +4819 10874 V 58 w(STACKSETUP)65 b Fx(in)70 b(\002le)f
  +Fp(aclocal.m4)c Fx(from)4050 11073 y Fr(GNU)47 b(Pth)h
  +Fx([25]\).)69 b(Alternati)l(v)n(ely)47 b(if)h(one)f(can)f(af)l(ford)i
  +(to)g(w)n(aste)4050 11272 y(memory)-11 b(,)38 b(one)f(can)f(use)h(an)g
  +(ele)n(g)o(ant)f(trick:)50 b(to)37 b(set)g(up)g(a)f(stack)h(of)p
  +Black 3858 11872 a(9)p Black eop end
   %%Page: 10 10
  -10 9 bop Black Black 0 83 a Fx(size)21 b Fe(N)9 b Fx(,)21
  -b(one)f(allocates)g(a)h(chunk)e(of)h(memory)f(\(starting)h(at)h(ad-)0
  -183 y(dress)c Fe(A)p Fx(\))h(of)f(size)h Fe(N)f Fd(\002)8
  -b Fc(2)17 b Fx(and)f(then)h(calls)h Fp(sigstack)p Fx(\(2\))d(with)0
  -282 y(the)20 b(parameters)f Fr(sk)p 581 282 25 4 v 30
  -w(addr=)p Fe(A)d Fc(+)h Fe(N)30 b Fx(and)19 b Fr(sk)p
  -1291 282 V 30 w(size=)p Fe(N)9 b Fx(,)21 b Fr(i.e)o(.)p
  -Fx(,)e(one)0 382 y(speci\002es)29 b(the)g(middle)g(of)f(the)h(memory)e
  -(chunk)h(as)h(the)g(stack)0 482 y(base.)0 651 y FA(The)d(Blind)g(Alley)
  -e(of)h(Brain-Dead)h(Platf)n(orms)0 789 y Fx(The)31 b(w)o(orld)g(w)o
  -(ould)f(not)i(be)f(as)h(funn)o(y)d(as)j(it)g(is,)j(if)d(really)f(all)0
  -888 y(Unix)f(platforms)e(w)o(ould)i(be)g(f)o(air)g(to)g(us.)55
  -b(Instead,)31 b(currently)0 988 y(at)24 b(least)g(one)e(platform)g(e)o
  -(xists)i(which)f(plays)g(unf)o(air:)30 b(unfortu-)0 1088
  -y(nately)-5 b(,)26 b(ancient)e(v)o(ersions)h(of)g(the)g(popular)f
  -Fr(GNU/Linux)p Fx(.)40 b(Al-)0 1187 y(though)21 b(we)i(will)h(disco)o
  -(v)o(er)d(that)i(it)h(both)e(pro)o(vides)f Fp(sigalt-)0
  -1287 y(stack)p Fx(\(2\))c(and)i Fp(sigstack)p Fx(\(2\),)d(our)j
  -(approach)d(w)o(on')o(t)i(w)o(ork)0 1387 y(on)27 b Fr(Linux)g
  -Fx(k)o(ernels)g(prior)f(to)i(v)o(ersion)e(2.2)g(and)h
  -Fr(glibc)g Fx(prior)f(to)0 1486 y(v)o(ersion)19 b(2.1.)125
  -1592 y(Why?)42 b(Because)26 b(its)h Fr(libc)g Fx(pro)o(vides)d(only)h
  -(stubs)i(of)e(these)0 1692 y(functions)h(which)i(al)o(w)o(ays)g(return)
  -f(just)h Fp(-1)g Fx(with)g Fp(errno)g Fx(set)0 1792 y(to)g
  -Fp(ENOSYS)p Fx(.)f(So,)j(this)e(de\002nitely)f(means)g(that)h(our)f
  -(nifty)g(al-)0 1891 y(gorithm)40 b(is)i(useless)h(there,)j(because)40
  -b(its)j(central)e(point)g Fr(is)0 1991 y Fp(sigaltstack)p
  -Fx(\(2\)/)p Fp(sigstack)p Fx(\(2\).)31 b(Ne)n(v)o(ertheless)23
  -b(we)h(do)0 2091 y(not)17 b(need)g(to)h(gi)n(v)o(e)f(up.)23
  -b(At)18 b(least)h(not,)e(if)h(we,)g(for)f(a)h(single)g(brain-)0
  -2190 y(dead)29 b(platform,)i(accept)f(to)g(break)f(our)g(general)g
  -(goal)g(of)h(not)0 2290 y(using)20 b(an)o(y)f(platform)g(dependent)f
  -(code.)125 2396 y(So,)g(what)h(can)g(we)g(actually)f(do)g(here?)24
  -b(All)19 b(we)g(ha)n(v)o(e)f(to)h(do,)0 2496 y(is)f(to)f(\002ddle)g
  -(around)e(a)j(little)g(bit)f(with)h(the)f(machine-dependent)0
  -2595 y Fp(jmp)p 155 2595 V 29 w(buf)23 b Fx(ingredients)f(\(by)h
  -(poking)e(around)g(in)i Fp(setjmp.h)0 2695 y Fx(or)16
  -b(by)f(disassembling)g Fp(longjmp)p Fx(\(3\))f(in)j(the)f(deb)n
  -(ugger\).)21 b(Usu-)0 2795 y(ally)e(one)f(just)h(has)g(to)f(do)g(a)h
  -Fp(setjmp)p Fx(\(3\))e(to)i(get)f(an)h(initial)g(state)0
  -2894 y(in)24 b(the)g Fp(jmp)p 370 2894 V 29 w(buf)g Fx(structure)f(and)
  -h(then)f(manually)f(adjust)i(tw)o(o)0 2994 y(of)34 b(its)h(\002elds:)54
  -b(the)35 b(program)d(counter)g(\(usually)i(a)h(structure)0
  -3094 y(member)29 b(with)i(\223)p Fp(pc)p Fx(\224)g(in)g(the)f(name\))g
  -(and)g(the)h(stack)g(pointer)0 3193 y(\(usually)19 b(a)i(structure)e
  -(member)g(with)h(\223)p Fp(sp)p Fx(\224)g(in)h(the)f(name\).)125
  -3299 y(That)f(is)i(all)f(and)f(can)g(be)h(acceptable)e(for)h(a)i
  -(real-w)o(orld)d(im-)0 3399 y(plementation)e(which)g(really)i(w)o(ants)
  -f(to)h(co)o(v)o(er)e(mostly)h Fr(all)h Fx(plat-)0 3499
  -y(forms)f(\226)i(at)f(least)h(as)g(long)e(as)i(the)f(special)h
  -(treatment)e(is)i(needed)0 3598 y(just)31 b(for)f(one)h(or)f(tw)o(o)h
  -(platforms.)56 b(But)31 b(one)f(has)h(to)g(k)o(eep)f(in)0
  -3698 y(mind)e(that)h(it)h(at)g(least)f(breaks)g(one)f(of)h(the)g
  -(initial)g(goals)g(and)0 3798 y(has)20 b(to)h(be)f(treated)g(as)g(a)h
  -(last)g(chance)e(solution.)0 3967 y FA(Functions)26 b(sigsetjmp\(3\))f
  -(and)g(siglongjmp\(3\))125 4105 y Fx(One)42 b(certainly)f(w)o(ants)i
  -(the)g Fr(POSIX)i Fx(thread)d(semantics)0 4204 y(where)50
  -b(a)h(thread)e(has)i(its)g(o)n(wn)f(signal)g(mask.)115
  -b(As)51 b(al-)0 4304 y(ready)36 b(mentioned,)i(on)e(some)h(platforms)e
  -Fp(setjmp)p Fx(\(3\))g(and)0 4404 y Fp(longjmp)p Fx(\(3\))e(do)h(not)h
  -(pro)o(vide)d(this)j(and)g(instead)f(one)g(has)0 4503
  -y(to)23 b(e)o(xplicitly)f(call)i Fp(sigsetjmp)p Fx(\(3\))d(and)h
  -Fp(siglongjmp)p Fx(\(3\))0 4603 y(instead.)111 b(There)49
  -b(is)h(only)e(one)g(snare:)83 b(on)49 b(some)g(plat-)0
  -4703 y(forms)36 b Fp(sigsetjmp)p Fx(\(3\)/)p Fp(siglongjmp)p
  -Fx(\(3\))31 b(sa)n(v)o(e)36 b(also)h(in-)0 4802 y(formation)g(about)i
  -(the)g(alternate)g(signals)h(stack.)82 b(So)40 b(here)0
  -4902 y(one)45 b(has)h(to)f(mak)o(e)g(sure)g(that)h(although)e(the)h
  -(thread)f(dis-)0 5001 y(patching)36 b(later)i(uses)g
  +TeXDict begin 10 9 bop Black Black 0 638 a Fx(size)41
  +b Fe(N)18 b Fx(,)43 b(one)f(allocates)f(a)g(chunk)h(of)h(memory)f
  +(\(starting)h(at)f(ad-)0 838 y(dress)35 b Fe(A)p Fx(\))h(of)g(size)f
  +Fe(N)f Fd(\002)16 b Fc(2)35 b Fx(and)h(then)f(calls)g
  +Fp(sigstack)p Fx(\(2\))f(with)0 1037 y(the)41 b(parameters)f
  +Fr(sk)p 1162 1037 50 7 v 59 w(addr=)p Fe(A)35 b Fc(+)g
  +Fe(N)59 b Fx(and)41 b Fr(sk)p 2583 1037 V 59 w(size=)p
  +Fe(N)18 b Fx(,)40 b Fr(i.e)n(.)p Fx(,)f(one)0 1236 y(speci\002es)58
  +b(the)h(middle)g(of)g(the)g(memory)h(chunk)f(as)f(the)h(stack)0
  +1435 y(base.)0 1726 y FA(The)50 b(Blind)g(Alley)h(of)e(Brain-Dead)h
  +(Platf)-5 b(orms)0 1970 y Fx(The)34 b(w)n(orld)g(w)n(ould)h(not)e(be)h
  +(as)f(funn)n(y)h(as)f(it)h(is,)g(if)g(really)g(all)g(Unix)0
  +2170 y(platforms)48 b(w)n(ould)g(be)f(f)n(air)i(to)e(us.)69
  +b(Instead,)48 b(currently)g(at)g(least)0 2369 y(one)67
  +b(platform)h(e)n(xists)e(which)i(plays)e(unf)n(air:)105
  +b(unfortunately)-11 b(,)0 2568 y(ancient)62 b(v)n(ersions)g(of)g(the)h
  +(popular)g Fr(GNU/Linux)p Fx(.)114 b(Although)0 2767
  +y(we)35 b(will)g(disco)n(v)n(er)f(that)h(it)g(both)g(pro)n(vides)g
  +Fp(sigaltstack)p Fx(\(2\))0 2967 y(and)54 b Fp(sigstack)p
  +Fx(\(2\),)g(our)h(approach)e(w)n(on')m(t)i(w)n(ork)g(on)f
  +Fr(Linux)0 3166 y Fx(k)n(ernels)37 b(prior)g(to)g(v)n(ersion)f(2.2)g
  +(and)h Fr(glibc)g Fx(prior)g(to)g(v)n(ersion)f(2.1.)249
  +3365 y(Wh)o(y?)87 b(Because)51 b(its)j Fr(libc)f Fx(pro)n(vides)g(only)
  +g(stubs)g(of)h(these)0 3564 y(functions)j(which)g(al)n(w)n(ays)f
  +(return)i(just)e Fp(-1)g Fx(with)i Fp(errno)d Fx(set)0
  +3764 y(to)i Fp(ENOSYS)p Fx(.)d(So,)60 b(this)d(de\002nitely)g(means)f
  +(that)g(our)h(nifty)h(al-)0 3963 y(gorithm)85 b(is)f(useless)e(there,)
  +94 b(because)83 b(its)h(central)g(point)g Fr(is)0 4162
  +y Fp(sigaltstack)p Fx(\(2\)/)p Fp(sigstack)p Fx(\(2\).)68
  +b(Ne)l(v)n(ertheless)46 b(we)j(do)0 4361 y(not)36 b(need)g(to)h(gi)l(v)
  +n(e)e(up.)50 b(At)36 b(least)f(not,)j(if)e(we,)h(for)g(a)f(single)f
  +(brain-)0 4561 y(dead)61 b(platform,)66 b(accept)60 b(to)h(break)g(our)
  +h(general)e(goal)h(of)h(not)0 4760 y(using)41 b(an)n(y)g(platform)h
  +(dependent)f(code.)249 4959 y(So,)e(what)f(can)g(we)g(actually)g(do)h
  +(here?)50 b(All)39 b(we)f(ha)m(v)n(e)f(to)h(do,)0 5158
  +y(is)d(to)h(\002ddle)f(around)h(a)f(little)h(bit)g(with)f(the)h
  +(machine-dependent)0 5358 y Fp(jmp)p 310 5358 V 59 w(buf)46
  +b Fx(ingredients)h(\(by)h(poking)g(around)f(in)h Fp(setjmp.h)0
  +5557 y Fx(or)33 b(by)h(disassembling)e Fp(longjmp)p Fx(\(3\))f(in)i
  +(the)g(deb)m(ugger\).)48 b(Usu-)0 5756 y(ally)38 b(one)g(just)g(has)g
  +(to)g(do)h(a)f Fp(setjmp)p Fx(\(3\))e(to)j(get)f(an)g(initial)h(state)0
  +5955 y(in)49 b(the)g Fp(jmp)p 740 5955 V 59 w(buf)e Fx(structure)i(and)
  +g(then)g(manually)g(adjust)g(tw)n(o)0 6155 y(of)70 b(its)g(\002elds:)
  +107 b(the)70 b(program)g(counter)g(\(usually)g(a)f(structure)0
  +6354 y(member)63 b(with)f(\223)p Fp(pc)p Fx(\224)g(in)g(the)h(name\))f
  +(and)g(the)h(stack)f(pointer)0 6553 y(\(usually)41 b(a)h(structure)f
  +(member)h(with)g(\223)p Fp(sp)p Fx(\224)e(in)h(the)h(name\).)249
  +6752 y(That)f(is)f(all)g(and)h(can)f(be)g(acceptable)f(for)i(a)f
  +(real-w)n(orld)h(im-)0 6952 y(plementation)36 b(which)g(really)g(w)n
  +(ants)g(to)g(co)n(v)n(er)f(mostly)h Fr(all)h Fx(plat-)0
  +7151 y(forms)h(\226)f(at)g(least)g(as)g(long)h(as)e(the)i(special)e
  +(treatment)i(is)f(needed)0 7350 y(just)63 b(for)g(one)f(or)h(tw)n(o)g
  +(platforms.)115 b(But)63 b(one)f(has)g(to)h(k)n(eep)g(in)0
  +7549 y(mind)d(that)f(it)g(at)g(least)g(breaks)f(one)h(of)h(the)f
  +(initial)h(goals)e(and)0 7749 y(has)41 b(to)h(be)f(treated)g(as)g(a)g
  +(last)g(chance)g(solution.)0 8039 y FA(Functions)49 b(sigsetjmp\(3\))h
  +(and)f(siglongjmp\(3\))249 8284 y Fx(One)86 b(certainly)g(w)n(ants)g
  +(the)g Fr(POSIX)94 b Fx(thread)86 b(semantics)0 8483
  +y(where)101 b(a)h(thread)g(has)f(its)h(o)l(wn)f(signal)h(mask.)232
  +b(As)101 b(al-)0 8682 y(ready)74 b(mentioned,)82 b(on)75
  +b(some)f(platforms)g Fp(setjmp)p Fx(\(3\))f(and)0 8881
  +y Fp(longjmp)p Fx(\(3\))c(do)h(not)h(pro)n(vide)f(this)h(and)f(instead)
  +g(one)h(has)0 9081 y(to)47 b(e)n(xplicitly)h(call)f Fp(sigsetjmp)p
  +Fx(\(3\))d(and)j Fp(siglongjmp)p Fx(\(3\))0 9280 y(instead.)224
  +b(There)99 b(is)g(only)h(one)f(snare:)166 b(on)100 b(some)f(plat-)0
  +9479 y(forms)74 b Fp(sigsetjmp)p Fx(\(3\)/)p Fp(siglongjmp)p
  +Fx(\(3\))68 b(sa)m(v)n(e)k(also)i(in-)0 9678 y(formation)81
  +b(about)f(the)g(alternate)f(signals)g(stack.)166 b(So)80
  +b(here)0 9878 y(one)92 b(has)f(to)h(mak)n(e)g(sure)g(that)g(although)g
  +(the)g(thread)g(dis-)0 10077 y(patching)76 b(later)h(uses)e
   Fp(sigsetjmp)p Fx(\(3\)/)p Fp(siglongjmp)p Fx(\(3\),)0
  -5101 y(the)43 b(thread)f(creation)g(step)h(in)g Fp(mctx)p
  -1197 5101 V 29 w(create)g Fx(still)h(uses)0 5201 y(plain)h
  -Fp(setjmp)p Fx(\(3\)/)p Fp(longjmp)p Fx(\(3\))d(calls)k(for)f(the)h
  -(trampo-)0 5300 y(line)g(trick.)100 b(One)46 b(just)g(has)g(to)g(be)f
  -(careful)g(because)g(the)0 5400 y Fp(jmp)p 155 5400 V
  -29 w(buf)20 b Fx(and)e Fp(sigjmp)p 793 5400 V 29 w(buf)i
  -Fx(structures)e(cannot)g(be)i(mix)o(ed)2025 83 y(between)28
  -b(calls)h(to)g(the)g Fp(sigsetjmp)p Fx(\(3\)/)p Fp(siglongjmp)p
  -Fx(\(3\))2025 183 y(and)20 b Fp(setjmp)p Fx(\(3\)/)p
  -Fp(longjmp)p Fx(\(3\).)2025 340 y FA(Mor)n(e)25 b(Machine)h(Context)g
  -(Ingr)n(edients)2025 470 y Fx(Finally)-5 b(,)33 b(for)d(a)h(real-w)o
  -(orld)f(threading)f(implementation)f(one)2025 570 y(usually)j(w)o(ants)
  -h(to)g(put)f(more)g(state)h(into)f(the)h(machine)e(con-)2025
  -670 y(te)o(xt)43 b(structure)f Fp(mctx)p 2731 670 V 29
  -w(t)p Fx(.)94 b(F)o(or)42 b(instance)h(to)g(ful\002ll)g(more)2025
  -769 y Fr(POSIX)25 b Fx(threading)20 b(semantics,)i(it)g(is)h
  -(reasonable)d(to)i(also)g(sa)n(v)o(e)2025 869 y(and)37
  -b(restore)g(the)g(global)g Fp(errno)g Fx(v)n(ariable.)76
  -b(All)38 b(this)g(can)2025 968 y(be)32 b(easily)h(achie)n(v)o(ed)e(by)h
  -(e)o(xtending)e(the)j Fp(mctx)p 3503 968 V 29 w(t)g Fx(structure)2025
  -1068 y(with)d(additional)f(\002elds)h(and)f(by)h(making)e(the)i
  -Fp(mctx)p 3656 1068 V 29 w(save)p Fx(,)2025 1168 y Fp(mctx)p
  -2230 1168 V 29 w(restore)38 b Fx(and)h Fp(mctx)p 3007
  -1168 V 29 w(switch)f Fx(functions)g(to)h(be)2025 1267
  -y(a)o(w)o(are)20 b(of)g(them.)2025 1520 y FA(3.6)99 b(Related)26
  -b(W)-7 b(ork)2025 1681 y Fx(Beside)38 b Fr(GNU)h(Pth)e
  -Fx([25)o(],)42 b(there)37 b(are)h(other)f(multithreading)2025
  -1781 y(libraries)c(which)f(use)i(v)n(ariants)e(of)h(the)g(presented)f
  -(approach)2025 1880 y(for)23 b(implementing)e(machine)h(conte)o(xts)h
  -(in)g(user)n(-space.)34 b(Most)2025 1980 y(notably)40
  -b(there)g(are)j(R)q Fm(O)t(B)t(E)t(RT)k Fx(S)t(.)f(T)t
  -Fm(H)t(AU)r Fx(')-5 b(s)42 b Fr(Really)f(Simple)2025
  -2079 y(Thr)m(eads)18 b Fx(\()p Fr(r)o(sthr)m(eads)p Fx(,)h([27)o(]\))f
  -(package)f(which)h(uses)h Fp(sigalt-)2025 2179 y(stack)p
  -Fx(\(2\))h(in)i(a)g(v)o(ery)f(similar)h(w)o(ay)f(for)h(thread)e
  -(creation,)h(and)2027 2279 y(K)r Fm(O)q(T)n(A)h Fx(A)t
  -Fm(B)t(E)r Fx(')-5 b(s)19 b Fr(P)-7 b(ortable)17 b(Thr)m(ead)g(Libr)o
  -(ary)g Fx(\()p Fr(PTL)p Fx(,)h([24)o(]\))f(which)2025
  -2378 y(uses)30 b(a)g Fp(sigstack)p Fx(\(2\))d(approach.)51
  -b(But)30 b(because)f(their)g(ap-)2025 2478 y(proaches)14
  -b(handle)h(the)h(signal)g(handler)e(scope)h(dif)n(ferently)-5
  -b(,)14 b(the)o(y)2025 2578 y(are)30 b(not)g(able)h(to)f(achie)n(v)o(e)f
  -(the)i(same)f(amount)f(of)h(portability)2025 2677 y(and)23
  -b(this)h(w)o(ay)f(do)g(not)g(w)o(ork)g(for)g(instance)g(on)g(some)g
  -(System-)2025 2777 y(V)-8 b(-deri)n(v)o(ed)18 b(platforms.)2025
  -3030 y FA(3.7)99 b(Summary)26 b(&)f(A)-10 b(v)o(ailability)2025
  -3190 y Fx(W)j(e)22 b(ha)n(v)o(e)e(presented)f(a)i(pragmatic)f(and)g
  -(mostly)g(portable)g(f)o(all-)2025 3290 y(back)e(approach)e(for)i
  -(implementing)e(the)j(machine)e(conte)o(xt)g(for)2025
  -3390 y(user)n(-space)30 b(threads,)j(based)e(entirely)f(on)g(Unix)h
  -(system)g(and)2025 3489 y(ANSI-C)24 b(language)d(f)o(acilities.)35
  -b(The)23 b(approach)e(w)o(as)j(success-)2025 3589 y(fully)i(tested)h
  -(in)g(practice)f(on)h(a)g(wide)g(range)e(of)i(Unix)f(\003a)n(v)n(ors)
  -2025 3689 y(by)17 b Fr(GNU)h(Pth)f Fx(and)g(should)f(also)h(adapt)g(to)
  -g(the)h(remaining)d(Unix)2025 3788 y(platforms)f(as)i(long)f(as)h(the)o
  -(y)f(adhere)f(to)i(the)f(rele)n(v)n(ant)g(standards.)2150
  -3891 y(The)50 b Fr(GNU)i(Pth)e Fx(package)g(is)h(distrib)n(uted)f
  -(under)g(the)2025 3990 y(GNU)32 b(Library)f(General)g(Public)g(License)
  -h(\(LGPL)f(2.1\))g(and)2025 4090 y(freely)40 b(a)n(v)n(ailable)h(from)e
  -Fr(http://www)-6 b(.gnu.or)m(g/softwar)m(e/pth/)2025
  -4189 y Fx(and)20 b Fr(ftp://ftp.gnu.or)m(g/gnu/pth/)p
  -Fx(.)2025 4442 y FA(3.8)99 b(Ackno)o(wledgements)2025
  -4603 y Fx(I)17 b(w)o(ould)f(lik)o(e)h(to)f(thank)i(R)q
  -Fm(O)t(B)t(E)t(RT)k Fx(S)t(.)f(T)t Fm(H)t(AU)r Fx(,)f(D)q
  -Fm(A)-5 b(V)t(I)t(D)22 b Fx(B)s Fm(U)t(T)t(E)t(N)t Fx(-)2027
  -4703 y Fm(H)t(O)t(F)r Fx(,)k(M)t Fm(A)t(RT)t(I)t(N)i
  -Fx(K)t Fm(R)t(A)t(E)t(M)t(E)t(R)r Fx(,)f(E)t Fm(R)t(I)t(C)h
  -Fx(N)t Fm(E)t(W)t(T)s(O)t(N)d Fx(and)g(B)t Fm(R)q(U)t(N)t(O)2027
  -4802 y Fx(H)t Fm(A)t(I)t(B)t(L)t(E)33 b Fx(for)c(their)g(comments)g
  -(which)h(helped)e(to)i(write)h(the)2025 4902 y(initial)d(v)o(ersion)f
  -(of)g(this)h(paper)-5 b(.)48 b(Additionally)-5 b(,)27
  -b(credit)g(has)h(to)2025 5001 y(be)21 b(gi)n(v)o(en)e(to)k(C)t
  -Fm(H)t(R)t(I)t(S)t(T)s(O)t(P)t(H)t(E)t(R)j Fx(S)t Fm(M)t(A)t(L)t(L)d
  -Fx(and)d(the)g(USENIX)h(re-)2025 5101 y(vie)n(wers)f(for)g(their)g(in)m
  -(v)n(aluable)e(feedback)h(which)g(allo)n(wed)h(this)2025
  -5201 y(paper)28 b(to)h(be)f(e)o(xtended,)h(cleaned)f(up)g(and)h
  -(\002nally)f(published)2025 5300 y(at)c(the)f(USENIX)g(Annual)f(T)-6
  -b(echnical)22 b(Conference)g(2000.)32 b(Fi-)2025 5400
  -y(nally)-5 b(,)27 b(thanks)e(go)h(to)h(all)f(users)h(of)f
  -Fr(GNU)h(Pth)f Fx(for)f(their)h(feed-)p Black 1908 5700
  -a(10)p Black eop
  +10276 y(the)87 b(thread)g(creation)g(step)f(in)i Fp(mctx)p
  +2395 10276 V 58 w(create)d Fx(still)i(uses)0 10475 y(plain)93
  +b Fp(setjmp)p Fx(\(3\)/)p Fp(longjmp)p Fx(\(3\))c(calls)j(for)h(the)f
  +(trampo-)0 10675 y(line)g(trick.)204 b(One)92 b(just)g(has)g(to)g(be)g
  +(careful)g(because)f(the)0 10874 y Fp(jmp)p 310 10874
  +V 59 w(buf)38 b Fx(and)i Fp(sigjmp)p 1587 10874 V 57
  +w(buf)f Fx(structures)g(cannot)h(be)f(mix)n(ed)0 11073
  +y(between)58 b(calls)g(to)g(the)h Fp(sigsetjmp)p Fx(\(3\)/)p
  +Fp(siglongjmp)p Fx(\(3\))0 11272 y(and)41 b Fp(setjmp)p
  +Fx(\(3\)/)p Fp(longjmp)p Fx(\(3\).)p Black Black 4050
  +638 a FA(Mor)l(e)51 b(Machine)f(Context)g(Ingr)l(edients)4050
  +908 y Fx(Finally)-11 b(,)68 b(for)c(a)e(real-w)n(orld)i(threading)f
  +(implementation)g(one)4050 1107 y(usually)h(w)n(ants)g(to)h(put)f(more)
  +h(state)e(into)i(the)f(machine)g(con-)4050 1306 y(te)n(xt)87
  +b(structure)g Fp(mctx)p 5462 1306 V 58 w(t)p Fx(.)188
  +b(F)n(or)87 b(instance)f(to)i(ful\002ll)g(more)4050 1505
  +y Fr(POSIX)53 b Fx(threading)45 b(semantics,)f(it)h(is)g(reasonable)f
  +(to)g(also)h(sa)m(v)n(e)4050 1705 y(and)76 b(restore)g(the)g(global)g
  +Fp(errno)e Fx(v)l(ariable.)154 b(All)77 b(this)f(can)4050
  +1904 y(be)66 b(easily)f(achie)l(v)n(ed)g(by)h(e)n(xtending)f(the)h
  +Fp(mctx)p 7005 1904 V 58 w(t)g Fx(structure)4050 2103
  +y(with)61 b(additional)g(\002elds)g(and)f(by)h(making)g(the)g
  +Fp(mctx)p 7312 2103 V 58 w(save)p Fx(,)4050 2302 y Fp(mctx)p
  +4460 2302 V 58 w(restore)77 b Fx(and)h Fp(mctx)p 6013
  +2302 V 59 w(switch)e Fx(functions)j(to)g(be)4050 2502
  +y(a)n(w)n(are)41 b(of)h(them.)4050 3033 y FA(3.6)198
  +b(Related)51 b(W)-15 b(ork)4050 3363 y Fx(Beside)97 b
  +Fr(GNU)h(Pth)h Fx([25],)112 b(there)99 b(are)f(other)g(multithread-)
  +4050 3562 y(ing)82 b(libraries)g(which)g(use)f(v)l(ariants)h(of)g(the)g
  +(presented)f(ap-)4050 3762 y(proach)33 b(for)h(implementing)g(machine)f
  +(conte)n(xts)g(in)g(user)m(-space.)4050 3961 y(Most)99
  +b(notably)g(there)g(are)k(R)r Fm(O)8 b(B)g(E)g(RT)107
  +b Fx(S)8 b(.)108 b(T)8 b Fm(H)g(A)q(U)t Fx(')-9 b(s)100
  +b Fr(Really)4050 4160 y(Simple)78 b(Thr)-6 b(eads)77
  +b Fx(\()p Fr(r)n(sthr)-6 b(eads)p Fx(,)85 b([27]\))79
  +b(package)d(which)i(uses)4050 4359 y Fp(sigaltstack)p
  +Fx(\(2\))42 b(in)j(a)g(v)n(ery)g(similar)h(w)n(ay)f(for)h(thread)f
  +(cre-)4050 4559 y(ation,)56 b(and)i(K)t Fm(O)s(T)l(A)j
  +Fx(A)8 b Fm(B)g(E)t Fx(')-9 b(s)54 b Fr(P)-13 b(ortable)53
  +b(Thr)-6 b(ead)54 b(Libr)n(ary)e Fx(\()p Fr(PTL)p Fx(,)4050
  +4758 y([24]\))34 b(which)f(uses)f(a)g Fp(sigstack)p Fx(\(2\))f
  +(approach.)48 b(But)32 b(because)4050 4957 y(their)52
  +b(approaches)f(handle)h(the)g(signal)f(handler)h(scope)f(dif)l(fer)m(-)
  +4050 5156 y(ently)-11 b(,)64 b(the)n(y)59 b(are)h(not)g(able)f(to)h
  +(achie)l(v)n(e)e(the)i(same)f(amount)h(of)4050 5356 y(portability)34
  +b(and)f(this)g(w)n(ay)g(do)g(not)h(w)n(ork)f(for)h(instance)e(on)h
  +(some)4050 5555 y(System-V)-17 b(-deri)l(v)n(ed)42 b(platforms.)4050
  +6086 y FA(3.7)198 b(Summary)49 b(&)h(A)-20 b(v)n(ailability)4050
  +6416 y Fx(W)-13 b(e)42 b(ha)m(v)n(e)f(presented)h(a)g(pragmatic)g(and)h
  +(mostly)f(portable)h(f)n(all-)4050 6615 y(back)38 b(approach)f(for)i
  +(implementing)f(the)g(machine)g(conte)n(xt)f(for)4050
  +6815 y(user)m(-space)61 b(threads,)68 b(based)62 b(entirely)i(on)f
  +(Unix)g(system)f(and)4050 7014 y(ANSI-C)48 b(language)f(f)n(acilities.)
  +70 b(The)48 b(approach)f(w)n(as)h(success-)4050 7213
  +y(fully)55 b(tested)f(in)h(practice)g(on)f(a)h(wide)f(range)h(of)g
  +(Unix)g(\003a)m(v)m(ors)4050 7412 y(by)36 b Fr(GNU)f(Pth)h
  +Fx(and)f(should)h(also)f(adapt)g(to)h(the)f(remaining)h(Unix)4050
  +7612 y(platforms)c(as)g(long)g(as)g(the)n(y)f(adhere)h(to)g(the)g(rele)
  +l(v)l(ant)f(standards.)4299 7821 y(The)103 b Fr(GNU)f(Pth)h
  +Fx(package)f(is)h(distrib)m(uted)f(under)h(the)4050 8020
  +y(GNU)64 b(Library)i(General)e(Public)h(License)g(\(LGPL)h(2.1\))e(and)
  +4050 8219 y(freely)83 b(a)m(v)l(ailable)f(from)i Fr(http://www)-12
  +b(.gnu.or)-6 b(g/softwar)g(e/pth/)4050 8419 y Fx(and)41
  +b Fr(ftp://ftp.gnu.or)-6 b(g/gnu/pth/)p Fx(.)4050 8949
  +y FA(3.8)198 b(Ackno)n(wledgements)4050 9280 y Fx(I)35
  +b(w)n(ould)f(lik)n(e)h(to)g(thank)j(R)r Fm(O)8 b(B)g(E)g(RT)43
  +b Fx(S)8 b(.)43 b(T)8 b Fm(H)g(A)q(U)t Fx(,)40 b(D)r
  +Fm(A)-10 b(V)8 b(I)g(D)43 b Fx(B)7 b Fm(U)h(T)g(E)g(N)g
  +Fx(-)4054 9479 y Fm(H)g(O)g(F)t Fx(,)52 b(M)8 b Fm(A)g(RT)g(I)g(N)56
  +b Fx(K)8 b Fm(R)g(A)g(E)g(M)g(E)g(R)t Fx(,)53 b(E)8 b
  +Fm(R)g(I)g(C)57 b Fx(N)8 b Fm(E)g(W)g(T)e(O)i(N)52 b
  +Fx(and)f(B)8 b Fm(R)s(U)g(N)g(O)4054 9678 y Fx(H)g Fm(A)g(I)g(B)g(L)g
  +(E)66 b Fx(for)c(their)f(comments)g(which)f(helped)h(to)g(write)g(the)
  +4050 9878 y(initial)c(v)n(ersion)f(of)h(this)g(paper)-9
  +b(.)96 b(Additionally)-11 b(,)61 b(credit)c(has)f(to)4050
  +10077 y(be)42 b(gi)l(v)n(en)g(to)k(C)8 b Fm(H)g(R)g(I)g(S)g(T)e(O)i(P)g
  +(H)g(E)g(R)51 b Fx(S)8 b Fm(M)g(A)g(L)g(L)48 b Fx(and)42
  +b(the)h(USENIX)g(re-)4050 10276 y(vie)l(wers)e(for)h(their)g(in)-7
  +b(v)l(aluable)42 b(feedback)f(which)h(allo)l(wed)f(this)4050
  +10475 y(paper)58 b(to)h(be)g(e)n(xtended,)i(cleaned)d(up)h(and)f
  +(\002nally)h(published)4050 10675 y(at)47 b(the)h(USENIX)g(Annual)f(T)
  +-12 b(echnical)48 b(Conference)e(2000.)69 b(Fi-)4050
  +10874 y(nally)-11 b(,)56 b(thanks)e(go)f(to)h(all)g(users)e(of)i
  +Fr(GNU)g(Pth)g Fx(for)g(their)g(feed-)4050 11073 y(back)39
  +b(on)h(the)f(implementation,)h(which)f(helped)h(in)f(\002ne-tuning)4050
  +11272 y(the)i(presented)g(approach.)1859 b([)p Fb(rse)p
  +Fx(])p Black 3817 11872 a(10)p Black eop end
   %%Page: 11 11
  -11 10 bop Black Black 0 83 a Fx(back)19 b(on)f(the)i(implementation,)c
  -(which)j(helped)f(in)i(\002ne-tuning)0 183 y(the)g(presented)f
  -(approach.)927 b([)p Fb(rse)p Fx(])0 446 y Fs(Refer)n(ences)p
  -Black 71 615 a Fv([1])p Black 41 w Fu(POSIX)18 b(1003.1c)j(Thr)m
  -(eading)p Fv(,)e(IEEE)f(POSIX)f(1003.1c-1995,)199 706
  -y(ISO/IEC)g(9945-1:1996)p Black 71 821 a([2])p Black
  -43 w(M)t(.)t(E)t(.)46 b(C)t Fa(O)t(N)t(W)m(A)n(Y)r Fv(:)70
  -b Fu(Design)44 b(of)f(a)h(separ)o(able)h(tr)o(ansition-)199
  -913 y(dia)o(gr)o(am)20 b(compiler)-8 b(.)p Fv(,)19 b(Comm.)f(A)m(CM)h
  -(6:7,)g(1963,)h(p.396-408)p Black 71 1028 a([3])p Black
  -43 w(E)t(.)t(W)m(.)h(D)t Fa(I)t(J)t(K)t(S)t(T)t(R)t(A)r
  -Fv(:)f Fu(Co-oper)o(ating)g(sequential)g(pr)m(ocesses)p
  -Fv(,)g(in)199 1119 y(F)-6 b(.)24 b(Genuys)j(\(Ed.\),)e
  -Fu(Pr)m(o)o(gr)o(amming)h(Langua)o(g)o(es)p Fv(,)j(N)m(A)-8
  -b(T)o(O)24 b(Ad-)199 1211 y(v)n(anced)f(Study)f(Institute,)f(Academic)i
  -(Press,)e(London,)i(1965,)199 1302 y(p.42-112.)p Black
  -71 1417 a([4])p Black 43 w(B)t(.)34 b(N)t Fa(I)t(C)t(H)t(O)t(L)t(S)t
  -Fv(,)i(D)t(.)e(B)s Fa(U)t(T)t(T)t(L)t(A)t(R)t Fv(,)h(J)t(.)t(P)l(.)e(F)
  -o Fa(A)t(R)t(R)t(E)t(L)r Fv(:)45 b Fu(Pthr)m(eads)199
  -1509 y(Pr)m(o)o(gr)o(amming)23 b(-)g(A)e(POSIX)h(Standar)m(d)j(for)d
  -(Better)g(Multipr)m(o-)199 1600 y(cessing)p Fv(,)e(O'Reilly)-5
  -b(,)18 b(1996;)h(ISBN)f(1-56592-115-1)p Black 71 1715
  -a([5])p Black 43 w(B)t(.)27 b(L)t Fa(E)t(W)t(I)t(S)t
  -Fv(,)g(D)t(.)f(J)t(.)h(B)t Fa(E)t(R)t(G)r Fv(:)k Fu(Thr)m(eads)25
  -b(Primer)f(-)f(A)h(Guide)g(T)-7 b(o)199 1807 y(Multithr)m(eaded)19
  -b(Pr)m(o)o(gr)o(amming)p Fv(,)f(Prentice)f(Hall,)f(1996;)j(ISBN)199
  -1898 y(0-13-443698-9)p Black 71 2013 a([6])p Black 43
  -w(S)t(.)g(J)t(.)g(N)t Fa(O)t(RT)s(O)t(N)t Fv(,)f(M)t(.)i(D)t(.)f(D)t
  -Fa(I)t(P)o(A)t(S)t(Q)s(U)r(A)t(L)t(E)r Fv(:)f Fu(Thr)m(ead)f(T)l(ime)e
  -(-)h(The)199 2105 y(Multithr)m(eaded)g(Pr)m(o)o(gr)o(amming)g(Guide)p
  -Fv(,)f(Prentice)f(Hall,)h(1997;)199 2196 y(ISBN)j(0-13-190067-6)p
  -Black 71 2312 a([7])p Black 43 w(D)t(.)24 b(R)t(.)g(B)s
  -Fa(U)t(T)t(E)t(N)t(H)t(O)t(F)r Fv(:)g Fu(Pr)m(o)o(gr)o(amming)e(with)e
  -(POSIX)g(Thr)m(eads)p Fv(,)199 2403 y(Addison)g(W)-6
  -b(esle)o(y)h(,)19 b(1997;)g(ISBN)f(0-201-63392-2)p Black
  -71 2518 a([8])p Black 43 w(S)t(.)27 b(P)t Fa(R)t(A)t(S)t(A)t(D)r
  -Fv(:)32 b Fu(Multithr)m(eading)26 b(Pr)m(o)o(gr)o(amming)f(T)-7
  -b(ec)o(hniques)p Fv(,)199 2610 y(McGra)o(w-Hill,)18 b(1996;)i(ISBN)e
  -(0-079-12250-7)p Black 71 2725 a([9])p Black 43 w(S)t(.)32
  -b(K)t Fa(L)t(E)t(I)t(N)t(M)t(A)t(N)t Fv(,)g(B)t(.)h(S)t
  -Fa(M)t(A)t(L)t(D)t(E)t(R)t(S)t Fv(,)e(D)t(.)i(S)t Fa(H)t(A)t(H)r
  -Fv(:)43 b Fu(Pr)m(o)o(gr)o(am-)199 2816 y(ming)29 b(with)e(Thr)m(eads)p
  -Fv(,)k(Prentice)d(Hall,)i(1995;)k(ISBN)27 b(0-131-)199
  -2908 y(72389-8)p Black 33 3023 a([10])p Black 44 w(C)t(.)t(J)t(.)40
  -b(N)t Fa(O)t(RT)t(H)t(R)r(U)t(P)r Fv(:)58 b Fu(Pr)m(o)o(gr)o(amming)38
  -b(W)l(ith)g(Unix)f(Thr)m(eads)p Fv(,)199 3114 y(John)20
  -b(W)m(ile)o(y)e(&)h(Sons,)g(1996;)h(ISBN)d(0-471-13751-0)p
  -Black 33 3230 a([11])p Black 44 w(P)l(.)29 b(B)r Fa(A)t(RT)s(O)t(N)t
  -Fv(-)t(D)q Fa(A)l(V)t(I)t(S)t Fv(,)g(D)t(.)g(M)t Fa(C)t
  -Fv(N)r Fa(A)t(M)t(E)t(E)t Fv(,)g(R)t(.)h(V)-5 b Fa(A)t(S)t(W)m(A)t(N)t
  -(I)t Fv(,)30 b(E)t(.)201 3321 y(L)t Fa(A)t(Z)t(O)r(W)t(S)t(K)t(A)r
  -Fv(:)19 b Fu(Adding)d(Sc)o(heduler)g(Activations)f(to)f(Mac)o(h)i(3.0)p
  -Fv(,)199 3412 y(Uni)n(v)o(ersity)27 b(of)g(W)-6 b(ashington,)29
  -b(1992;)j(T)-5 b(echnical)27 b(Report)f(92-)199 3504
  -y(08-03)p Black 33 3619 a([12])p Black 44 w(D)t(.)18
  -b(S)t Fa(T)t(E)t(I)t(N)t Fv(,)e(D)t(.)h(S)t Fa(H)t(A)t(H)r
  -Fv(:)j Fu(Implementing)c(Lightwight)e(Thr)m(eads)p Fv(,)199
  -3710 y(SunSoft)19 b(Inc.,)f(1992)i(\(published)g(at)f(USENIX'92\).)p
  -Black 33 3826 a([13])p Black 44 w(W)m(.)t(R)t(.)t(S)t
  -Fa(T)t(E)t(V)t(E)t(N)t(S)r Fv(:)48 b Fu(Advanced)35 b(Pr)m(o)o(gr)o
  -(amming)g(in)f(the)h(Unix)199 3917 y(En)m(vir)m(onment)p
  -Fv(,)58 b(Addison-W)-6 b(esle)o(y)h(,)58 b(1992;)66 b(ISBN)49
  -b(0-201-)199 4008 y(56317-7)p Black 33 4124 a([14])p
  -Black 44 w(D)t(.)42 b(L)t Fa(E)t(W)t(I)t(N)t(E)r Fv(:)59
  -b Fu(POSIX)38 b(Pr)m(o)o(gr)o(ammer')m(s)h(Guide:)63
  -b(Writing)199 4215 y(P)-6 b(ortable)34 b(Unix)g(Pr)m(o)o(gr)o(ams)p
  -Fv(,)k(O'Reilly)33 b(&)h(Associates,Inc.,)199 4306 y(1994;)20
  -b(ISBN)e(0-937175-73-0)p Black 33 4422 a([15])p Black
  -44 w(B)t Fa(RY)m(A)t(N)137 b Fv(O)t(')t(S)t Fa(U)t(L)t(L)t(I)t(V)l(A)t
  -(N)r Fv(:)250 b Fu(F)l(r)m(equently)136 b(ask)o(ed)199
  -4513 y(questions)187 b(for)e(comp.os.r)m(esear)m(c)o(h)p
  -Fv(,)229 b(1995;)199 4604 y(http://www)-5 b(.serpentine.com/)p
  -Fk(\230)p Fv(bos/os-f)o(aq/,)199 4696 y
  +TeXDict begin 11 10 bop Black Black 0 638 a Fs(Refer)l(ences)p
  +Black 141 976 a Fv([1])p Black 82 w Fu(POSIX)38 b(1003.1c)e(Thr)-6
  +b(eading)p Fv(,)37 b(IEEE)h(POSIX)f(1003.1c-1995,)398
  +1158 y(ISO/IEC)g(9945-1:1996)p Black 141 1397 a([2])p
  +Black 86 w(M)8 b(.)g(E)g(.)93 b(C)8 b Fa(O)g(N)g(W)-6
  +b(A)h(Y)t Fv(:)141 b Fu(Design)86 b(of)g(a)g(separ)n(able)f(tr)n
  +(ansition-)398 1580 y(dia)o(gr)n(am)35 b(compiler)-17
  +b(.)p Fv(,)38 b(Comm.)g(A)-6 b(CM)37 b(6:7,)f(1963,)h(p.396-408)p
  +Black 141 1819 a([3])p Black 86 w(E)8 b(.)g(W)-6 b(.)45
  +b(D)8 b Fa(I)g(J)g(K)g(S)g(T)g(R)g(A)t Fv(:)41 b Fu(Co-oper)n(ating)35
  +b(sequential)h(pr)-7 b(ocesses)p Fv(,)39 b(in)398 2001
  +y(F)-12 b(.)51 b(Genuys)e(\(Ed.\),)k Fu(Pr)-7 b(o)o(gr)n(amming)48
  +b(Langua)o(g)o(es)p Fv(,)j(N)-5 b(A)-17 b(T)m(O)51 b(Ad-)398
  +2184 y(v)l(anced)43 b(Study)f(Institute,)g(Academic)h(Press,)i(London,)
  +e(1965,)398 2367 y(p.42-112.)p Black 141 2605 a([4])p
  +Black 86 w(B)8 b(.)70 b(N)8 b Fa(I)g(C)g(H)g(O)g(L)g(S)g
  +Fv(,)73 b(D)8 b(.)70 b(B)7 b Fa(U)h(T)g(T)g(L)g(A)g(R)g
  +Fv(,)72 b(J)8 b(.)g(P)-9 b(.)70 b(F)n Fa(A)8 b(R)g(R)g(E)g(L)t
  +Fv(:)93 b Fu(Pthr)-6 b(eads)398 2788 y(Pr)f(o)o(gr)n(amming)43
  +b(-)h(A)h(POSIX)f(Standar)-6 b(d)43 b(for)h(Better)h(Multipr)-7
  +b(o-)398 2971 y(cessing)p Fv(,)38 b(O'Reilly)-10 b(,)36
  +b(1996;)g(ISBN)h(1-56592-115-1)p Black 141 3209 a([5])p
  +Black 86 w(B)8 b(.)55 b(L)8 b Fa(E)g(W)g(I)g(S)g Fv(,)55
  +b(D)8 b(.)55 b(J)8 b(.)55 b(B)8 b Fa(E)g(R)g(G)t Fv(:)63
  +b Fu(Thr)-6 b(eads)48 b(Primer)f(-)h(A)f(Guide)g(T)-14
  +b(o)398 3392 y(Multithr)-6 b(eaded)33 b(Pr)-7 b(o)o(gr)n(amming)p
  +Fv(,)33 b(Prentice)g(Hall,)h(1996;)g(ISBN)398 3575 y(0-13-443698-9)p
  +Black 141 3813 a([6])p Black 86 w(S)8 b(.)40 b(J)8 b(.)39
  +b(N)8 b Fa(O)g(R)q(T)e(O)i(N)g Fv(,)37 b(M)8 b(.)39 b(D)8
  +b(.)40 b(D)8 b Fa(I)g(P)m(A)g(S)g(Q)f(U)s(A)h(L)g(E)t
  +Fv(:)39 b Fu(Thr)-6 b(ead)32 b(T)-8 b(ime)31 b(-)h(The)398
  +3996 y(Multithr)-6 b(eaded)28 b(Pr)-7 b(o)o(gr)n(amming)26
  +b(Guide)p Fv(,)k(Prentice)f(Hall,)h(1997;)398 4179 y(ISBN)37
  +b(0-13-190067-6)p Black 141 4417 a([7])p Black 86 w(D)8
  +b(.)49 b(R)8 b(.)48 b(B)7 b Fa(U)h(T)g(E)g(N)g(H)g(O)g(F)t
  +Fv(:)50 b Fu(Pr)-7 b(o)o(gr)n(amming)39 b(with)h(POSIX)h(Thr)-6
  +b(eads)p Fv(,)398 4600 y(Addison)36 b(W)-12 b(esle)n(y)i(,)38
  +b(1997;)e(ISBN)h(0-201-63392-2)p Black 141 4839 a([8])p
  +Black 86 w(S)8 b(.)56 b(P)8 b Fa(R)g(A)g(S)g(A)g(D)t
  +Fv(:)65 b Fu(Multithr)-6 b(eading)46 b(Pr)-7 b(o)o(gr)n(amming)46
  +b(T)-14 b(ec)n(hniques)p Fv(,)398 5022 y(McGra)n(w-Hill,)36
  +b(1996;)g(ISBN)h(0-079-12250-7)p Black 141 5260 a([9])p
  +Black 86 w(S)8 b(.)66 b(K)8 b Fa(L)g(E)g(I)g(N)g(M)g(A)g(N)g
  +Fv(,)68 b(B)8 b(.)65 b(S)8 b Fa(M)g(A)g(L)g(D)g(E)g(R)g(S)g
  +Fv(,)68 b(D)8 b(.)66 b(S)8 b Fa(H)g(A)g(H)t Fv(:)86 b
  +Fu(Pr)-7 b(o)o(gr)n(am-)398 5443 y(ming)55 b(with)g(Thr)-6
  +b(eads)p Fv(,)61 b(Prentice)55 b(Hall,)61 b(1995;)i(ISBN)56
  +b(0-131-)398 5626 y(72389-8)p Black 66 5864 a([10])p
  +Black 86 w(C)8 b(.)g(J)g(.)82 b(N)8 b Fa(O)g(R)q(T)g(H)g(R)s(U)g(P)t
  +Fv(:)116 b Fu(Pr)-7 b(o)o(gr)n(amming)73 b(W)-8 b(ith)74
  +b(Unix)g(Thr)-6 b(eads)p Fv(,)398 6047 y(John)37 b(W)-6
  +b(ile)n(y)36 b(&)i(Sons,)f(1996;)f(ISBN)h(0-471-13751-0)p
  +Black 66 6286 a([11])p Black 86 w(P)-9 b(.)61 b(B)s Fa(A)8
  +b(R)q(T)e(O)i(N)g Fv(-)g(D)s Fa(A)-8 b(V)8 b(I)g(S)g
  +Fv(,)58 b(D)8 b(.)60 b(M)8 b Fa(C)g Fv(N)s Fa(A)g(M)g(E)g(E)g
  +Fv(,)61 b(R)8 b(.)60 b(V)-10 b Fa(A)8 b(S)g(W)-6 b(A)8
  +b(N)g(I)g Fv(,)61 b(E)8 b(.)402 6468 y(L)g Fa(A)g(Z)g(O)t(W)g(S)g(K)g
  +(A)t Fv(:)39 b Fu(Adding)28 b(Sc)n(heduler)h(Activations)e(to)i(Mac)n
  +(h)g(3.0)p Fv(,)398 6651 y(Uni)l(v)n(ersity)51 b(of)i(W)-12
  +b(ashington,)55 b(1992;)k(T)-10 b(echnical)53 b(Report)f(92-)398
  +6834 y(08-03)p Black 66 7072 a([12])p Black 86 w(D)8
  +b(.)37 b(S)8 b Fa(T)g(E)g(I)g(N)g Fv(,)36 b(D)8 b(.)36
  +b(S)8 b Fa(H)g(A)g(H)t Fv(:)40 b Fu(Implementing)27 b(Lightwight)f(Thr)
  +-6 b(eads)p Fv(,)398 7255 y(SunSoft)36 b(Inc.,)i(1992)e(\(published)g
  +(at)h(USENIX'92\).)p Black 66 7494 a([13])p Black 86
  +w(W)-6 b(.)8 b(R)g(.)g(S)g Fa(T)g(E)g(V)g(E)g(N)g(S)t
  +Fv(:)103 b Fu(Advanced)68 b(Pr)-7 b(o)o(gr)n(amming)66
  +b(in)h(the)g(Unix)398 7676 y(En)-6 b(vir)f(onment)p Fv(,)114
  +b(Addison-W)-12 b(esle)n(y)i(,)114 b(1992;)128 b(ISBN)99
  +b(0-201-)398 7859 y(56317-7)p Black 66 8098 a([14])p
  +Black 86 w(D)8 b(.)84 b(L)8 b Fa(E)g(W)g(I)g(N)g(E)t
  +Fv(:)121 b Fu(POSIX)77 b(Pr)-7 b(o)o(gr)n(ammer')h(s)76
  +b(Guide:)123 b(Writing)398 8281 y(P)-12 b(ortable)67
  +b(Unix)g(Pr)-7 b(o)o(gr)n(ams)p Fv(,)74 b(O'Reilly)65
  +b(&)j(Associates,Inc.,)398 8463 y(1994;)36 b(ISBN)h(0-937175-73-0)p
  +Black 66 8702 a([15])p Black 86 w(B)8 b Fa(RY)-6 b(A)8
  +b(N)274 b Fv(O)8 b(')g(S)g Fa(U)g(L)g(L)g(I)g(V)-8 b(A)8
  +b(N)t Fv(:)504 b Fu(F)-8 b(r)i(equently)268 b(ask)o(ed)398
  +8885 y(questions)369 b(for)h(comp.os.r)-6 b(esear)g(c)n(h)p
  +Fv(,)456 b(1995;)398 9067 y(http://www)-10 b(.serpentine.com/)p
  +Fk(\230)p Fv(bos/os-f)o(aq/,)398 9250 y
   (ftp://rtfm.mit.edu/pub/usenet/comp.os.research/)p Black
  -33 4811 a([16])p Black 44 w(S)t Fa(U)t(N)24 b Fv(M)t
  -Fa(I)t(C)t(R)r(O)t(S)t(Y)t(S)t(T)t(E)t(M)t(S)t Fv(,)e(I)t
  -Fa(N)t(C)r Fv(:)27 b Fu(Thr)m(eads)22 b(F)l(r)m(equently)g(Ask)o(ed)199
  -4902 y(Questions)p Fv(,)111 b(1995,)f(http://www.sun.com/w)o(orkshop/-)
  -199 4994 y(threads/f)o(aq.html)p Black 2058 83 a([17])p
  -Black 44 w(B)t Fa(RY)m(A)t(N)78 b Fv(O)t(')t(S)t Fa(U)t(L)t(L)t(I)t(V)l
  -(A)t(N)r Fv(:)132 b Fu(F)l(r)m(equently)76 b(ask)o(ed)g(ques-)2224
  -174 y(tions)134 b(for)g(comp.pr)m(o)o(gr)o(amming)o(.thr)m(eads)p
  -Fv(,)165 b(1997;)2224 266 y(http://www)-5 b(.serpentine.com/)p
  -Fk(\230)p Fv(bos/threads-f)o(aq/.)p Black 2058 410 a([18])p
  -Black 44 w(B)t Fa(I)t(L)83 b Fv(L)t Fa(E)t(W)t(I)t(S)r
  -Fv(:)144 b Fu(F)l(r)m(equently)82 b(ask)o(ed)f(questions)h(for)2224
  -502 y(comp.pr)m(o)o(gr)o(amming)o(.thr)m(eads)p Fv(,)213
  -b(1999;)250 b(http://-)2224 593 y(www)-5 b(.lambdacs.com/ne)n
  -(wsgroup/F)f(A)l(Q.html)p Black 2058 738 a([19])p Black
  -44 w(N)t Fa(U)t(M)t(E)t(R)t(I)t(C)57 b Fv(Q)s Fa(U)t(E)t(S)t(T)h
  -Fv(I)t Fa(N)t(C)r Fv(:)96 b Fu(Multithr)m(eading)58 b(-)e(De\002ni-)
  -2224 829 y(tions)k(and)h(Guidelines)p Fv(;)81 b(1998;)g(http://www)-5
  -b(.numeric-)2224 920 y(quest.com/lang/multi-frame.html)p
  -Black 2058 1065 a([20])p Black 44 w(T)t Fa(H)t(E)42 b
  -Fv(O)t Fa(P)t(E)t(N)f Fv(G)t Fa(R)r(O)t(U)t(P)r Fv(:)62
  -b Fu(The)39 b(Single)h(Unix)f(Speci\002cation,)2224 1156
  -y(V)-8 b(er)o(sion)46 b(2)g(-)f(Thr)m(eads)p Fv(;)60
  -b(1997;)f(http://www.opengroup-)2224 1248 y(.or)o
  -(g/onlinepubs/007908799/xsh/threads.html)p Black 2058
  -1393 a([21])p Black 44 w(S)t Fa(U)t(N)41 b Fv(M)t Fa(I)t(C)t(R)r(O)t(S)
  -t(Y)t(S)t(T)t(E)t(M)t(S)d Fv(I)t Fa(N)t(C)r Fv(:)61 b
  -Fu(SMI)39 b(Thr)m(ead)g(Resour)m(ces)p Fv(;)2224 1484
  -y(http://www)-5 b(.sun.com/w)o(orkshop/threads)p Black
  -2058 1629 a([22])p Black 44 w(F)t Fa(R)t(A)t(N)t(K)29
  -b Fv(M)t Fa(U)t(E)t(L)t(L)t(E)t(R)r Fv(:)35 b Fu(FSU)26
  -b(pthr)m(eads)p Fv(;)32 b(1997;)g(http://www-)2224 1720
  -y(.cs.fsu.edu/)p Fk(\230)p Fv(mueller/pthreads/)p Black
  -2058 1865 a([23])p Black 44 w(C)t Fa(H)t(R)t(I)t(S)85
  -b Fv(P)t Fa(R)r(O)q(V)t(E)t(N)t(Z)t(A)t(N)t(O)r Fv(:)145
  -b Fu(MIT)82 b(pthr)m(eads)p Fv(;)115 b(1993;)2224 1956
  -y(http://www)-5 b(.mit.edu/people/prov)o(en/pthreads.html)2224
  -2047 y(\(old\),)209 b(http://www.humanf)o(actor.com/pthreads/mit-)2224
  -2139 y(pthreads.html)20 b(\(updated\))p Black 2058 2283
  -a([24])p Black 44 w(K)r Fa(O)r(T)n(A)29 b Fv(A)t Fa(B)t(E)r
  -Fv(:)35 b Fu(P)-6 b(ortable)27 b(Thr)m(eading)g(Libr)o(ary)g
  -Fv(\(PTL\);)d(1999;)2224 2375 y(http://www.media.osaka-cu.ac.jp/)p
  -Fk(\230)p Fv(k-abe/PTL/)p Black 2058 2519 a([25])p Black
  -44 w(R)t Fa(A)t(L)t(F)19 b Fv(S)t(.)h(E)t Fa(N)t(G)t(E)t(L)t(S)t(C)t(H)
  -t(A)t(L)t(L)r Fv(:)d Fu(GNU)g(P)-6 b(ortable)17 b(Thr)m(eads)h
  -Fv(\(Pth\);)2224 2611 y(1999;)55 b(http://www.gnu.or)o(g/softw)o
  -(are/pth/,)47 b(ftp://ftp.gnu-)2224 2702 y(.or)o(g/gnu/pth/)p
  -Black 2058 2847 a([26])p Black 44 w(M)t Fa(I)t(C)t(H)t(A)t(E)t(L)36
  -b Fv(T)n(.)i(P)t Fa(E)t(T)t(E)t(R)t(S)t(O)t(N)r Fv(:)50
  -b Fu(POSIX)34 b(and)h(DCE)f(Thr)m(eads)2224 2938 y(F)-8
  -b(or)57 b(Linux)h Fv(\(PCThreads\);)75 b(1995;)j(http://members.aa-)
  -2224 3029 y(.net/)p Fk(\230)p Fv(mtp/PCthreads.html)p
  -Black 2058 3174 a([27])p Black 44 w(R)q Fa(O)t(B)t(E)t(RT)27
  -b Fv(S)t(.)h(T)t Fa(H)t(A)q(U)r Fv(:)35 b Fu(Really)25
  -b(Simple)g(Thr)m(eads)i Fv(\(rsthreads\);)2224 3265 y(1996;)20
  -b(ftp://ftp.ai.mit.edu/pub/rst/)p Black 2058 3410 a([28])p
  -Black 44 w(J)t Fa(O)t(H)t(N)94 b Fv(B)t Fa(I)t(R)t(R)t(E)t(L)t(L)r
  -Fv(:)163 b Fu(F)l(r)m(eeBSD)91 b(uthr)m(eads)p Fv(;)129
  -b(1998;)2224 3502 y(ftp://ftp.freebsd.or)o(g/pub/FreeBSD/FreeBSD-)2224
  -3593 y(current/src/lib/libc)p 2780 3593 23 4 v 27 w(r/uthread/)p
  -Black 2058 3738 a([29])p Black 44 w(X)t Fa(A)l(V)t(I)t(E)t(R)46
  -b Fv(L)t Fa(E)t(R)r(O)q(Y)r Fv(:)70 b Fu(The)44 b(LinuxThr)m(eads)h
  -(libr)o(ary)p Fv(;)57 b(1999;)2224 3829 y(http://pauillac.inria.fr/)p
  -Fk(\230)p Fv(xlero)o(y/linuxthreads/)p Black 2058 3974
  -a([30])p Black 44 w(I)t(B)t(M)r(:)17 b Fu(AIX)h(V)-8
  -b(er)o(sion)18 b(4.3)h(Gener)o(al)g(Pr)m(o)o(gr)o(amming)g(Concepts:)
  -2224 4065 y(Writing)56 b(and)g(Deb)o(ug)o(ging)h(Pr)m(o)o(gr)o(ams;)74
  -b(Under)o(standing)2224 4156 y(Thr)m(eads)p Fv(;)41 b(1998;)h
  -(http://www.rs6000.ibm.com/doc)p 3714 4156 V 28 w(link/-)2224
  -4248 y(en)p 2298 4248 V 28 w(US/a)p 2476 4248 V 26 w(doc)p
  -2609 4248 V 28 w(lib/aixpr)o(ggd/genprogc/understanding-)p
  -2224 4339 V 2247 4339 a(threads.htm)p Black 2058 4484
  -a([31])p Black 42 w Fu(Netscape)110 b(P)-6 b(ortable)110
  -b(Runtime)f Fv(\(NSPR\);)f(http://-)2224 4575 y(www)-5
  -b(.mozilla.or)o(g/docs/refList/refNSPR/,)246 b(http://-)2224
  -4666 y(lxr)l(.mozilla.or)o(g/seamonk)o(e)o(y/source/nsprpub/)p
  -Black 2058 4811 a([32])p Black 44 w(R)t Fa(A)t(L)t(F)45
  -b Fv(S)t(.)f(E)t Fa(N)t(G)t(E)t(L)t(S)t(C)t(H)t(A)t(L)t(L)r
  -Fv(:)65 b Fu(Simple)42 b(Mac)o(hine)h(Conte)o(xt)2224
  -4902 y(Benc)o(hmark)q Fv(;)73 b(2000;)f(http://www)-5
  -b(.gnu.or)o(g/softw)o(are/pth-)2224 4994 y(/smcb)m(.tar)l(.gz)p
  -Black 1908 5700 a Fx(11)p Black eop
  +66 9489 a([16])p Black 86 w(S)8 b Fa(U)g(N)50 b Fv(M)8
  +b Fa(I)g(C)g(R)s(O)g(S)g(Y)g(S)g(T)g(E)g(M)g(S)g Fv(,)46
  +b(I)8 b Fa(N)g(C)t Fv(:)54 b Fu(Thr)-6 b(eads)42 b(F)-8
  +b(r)i(equently)43 b(Ask)o(ed)398 9671 y(Questions)p Fv(,)219
  +b(1995,)g(http://www.sun.com/w)o(orkshop/-)398 9854 y(threads/f)o
  +(aq.html)p Black Black Black 4116 638 a([17])p Black
  +86 w(B)8 b Fa(RY)-6 b(A)8 b(N)156 b Fv(O)8 b(')g(S)g
  +Fa(U)g(L)g(L)g(I)g(V)-8 b(A)8 b(N)t Fv(:)266 b Fu(F)-8
  +b(r)i(equently)150 b(ask)o(ed)g(ques-)4448 821 y(tions)266
  +b(for)g(comp.pr)-7 b(o)o(gr)n(amming)n(.thr)h(eads)p
  +Fv(,)323 b(1997;)4448 1004 y(http://www)-10 b(.serpentine.com/)p
  +Fk(\230)p Fv(bos/threads-f)o(aq/.)p Black 4116 1253 a([18])p
  +Black 86 w(B)8 b Fa(I)g(L)167 b Fv(L)8 b Fa(E)g(W)g(I)g(S)t
  +Fv(:)290 b Fu(F)-8 b(r)i(equently)160 b(ask)o(ed)g(questions)g(for)4448
  +1435 y(comp.pr)-7 b(o)o(gr)n(amming)n(.thr)h(eads)p Fv(,)418
  +b(1999;)495 b(http://-)4448 1618 y(www)-10 b(.lambdacs.com/ne)l
  +(wsgroup/F)f(A)j(Q.html)p Black 4116 1867 a([19])p Black
  +86 w(N)8 b Fa(U)g(M)g(E)g(R)g(I)g(C)116 b Fv(Q)7 b Fa(U)h(E)g(S)g(T)116
  +b Fv(I)8 b Fa(N)g(C)t Fv(:)193 b Fu(Multithr)-6 b(eading)109
  +b(-)i(De\002ni-)4448 2050 y(tions)118 b(and)h(Guidelines)p
  +Fv(;)158 b(1998;)h(http://www)-10 b(.numeric-)4448 2233
  +y(quest.com/lang/multi-frame.html)p Black 4116 2482 a([20])p
  +Black 86 w(T)8 b Fa(H)g(E)85 b Fv(O)8 b Fa(P)g(E)g(N)84
  +b Fv(G)8 b Fa(R)s(O)g(U)g(P)t Fv(:)125 b Fu(The)79 b(Single)d(Unix)i
  +(Speci\002cation,)4448 2664 y(V)-17 b(er)o(sion)91 b(2)f(-)h(Thr)-6
  +b(eads)p Fv(;)117 b(1997;)f(http://www.opengroup-)4448
  +2847 y(.or)m(g/onlinepubs/007908799/xsh/threads.html)p
  +Black 4116 3096 a([21])p Black 86 w(S)8 b Fa(U)g(N)83
  +b Fv(M)8 b Fa(I)g(C)g(R)s(O)g(S)g(Y)g(S)g(T)g(E)g(M)g(S)79
  +b Fv(I)8 b Fa(N)g(C)t Fv(:)121 b Fu(SMI)76 b(Thr)-6 b(ead)77
  +b(Resour)-6 b(ces)p Fv(;)4448 3279 y(http://www)c(.sun.com/w)o
  +(orkshop/threads)p Black 4116 3528 a([22])p Black 86
  +w(F)8 b Fa(R)g(A)g(N)g(K)59 b Fv(M)8 b Fa(U)g(E)g(L)g(L)g(E)g(R)t
  +Fv(:)73 b Fu(FSU)53 b(pthr)-6 b(eads)p Fv(;)59 b(1997;)g(http://www-)
  +4448 3710 y(.cs.fsu.edu/)p Fk(\230)p Fv(mueller/pthreads/)p
  +Black 4116 3959 a([23])p Black 86 w(C)8 b Fa(H)g(R)g(I)g(S)169
  +b Fv(P)8 b Fa(R)s(O)r(V)g(E)g(N)g(Z)g(A)g(N)g(O)t Fv(:)295
  +b Fu(MIT)164 b(pthr)-6 b(eads)p Fv(;)227 b(1993;)4448
  +4142 y(http://www)-10 b(.mit.edu/people/prov)n(en/pthreads.html)4448
  +4325 y(\(old\),)418 b(http://www.humanf)o(actor.com/pthreads/mit-)4448
  +4507 y(pthreads.html)36 b(\(updated\))p Black 4116 4756
  +a([24])p Black 86 w(K)t Fa(O)s(T)m(A)58 b Fv(A)8 b Fa(B)g(E)t
  +Fv(:)73 b Fu(P)-12 b(ortable)51 b(Thr)-6 b(eading)51
  +b(Libr)n(ary)g Fv(\(PTL\);)h(1999;)4448 4939 y
  +(http://www.media.osaka-cu.ac.jp/)p Fk(\230)p Fv(k-abe/PTL/)p
  +Black 4116 5188 a([25])p Black 86 w(R)8 b Fa(A)g(L)g(F)40
  +b Fv(S)8 b(.)41 b(E)8 b Fa(N)g(G)g(E)g(L)g(S)g(C)g(H)g(A)g(L)g(L)t
  +Fv(:)39 b Fu(GNU)33 b(P)-12 b(ortable)33 b(Thr)-6 b(eads)34
  +b Fv(\(Pth\);)4448 5371 y(1999;)105 b(http://www.gnu.or)m(g/softw)o
  +(are/pth/,)88 b(ftp://ftp.gnu-)4448 5553 y(.or)m(g/gnu/pth/)p
  +Black 4116 5802 a([26])p Black 86 w(M)8 b Fa(I)g(C)g(H)g(A)g(E)g(L)73
  +b Fv(T)m(.)j(P)8 b Fa(E)g(T)g(E)g(R)g(S)g(O)g(N)t Fv(:)105
  +b Fu(POSIX)68 b(and)g(DCE)h(Thr)-6 b(eads)4448 5985 y(F)-16
  +b(or)115 b(Linux)e Fv(\(PCThreads\);)152 b(1995;)e(http://members.aa-)
  +4448 6168 y(.net/)p Fk(\230)p Fv(mtp/PCthreads.html)p
  +Black 4116 6417 a([27])p Black 86 w(R)s Fa(O)8 b(B)g(E)g(R)q(T)54
  +b Fv(S)8 b(.)58 b(T)8 b Fa(H)g(A)q(U)t Fv(:)71 b Fu(Really)50
  +b(Simple)g(Thr)-6 b(eads)50 b Fv(\(rsthreads\);)4448
  +6599 y(1996;)36 b(ftp://ftp.ai.mit.edu/pub/rst/)p Black
  +4116 6849 a([28])p Black 86 w(J)8 b Fa(O)g(H)g(N)189
  +b Fv(B)8 b Fa(I)g(R)g(R)g(E)g(L)g(L)t Fv(:)329 b Fu(F)-8
  +b(r)i(eeBSD)183 b(uthr)-6 b(eads)p Fv(;)253 b(1998;)4448
  +7031 y(ftp://ftp.freebsd.or)m(g/pub/FreeBSD/FreeBSD-)4448
  +7214 y(current/src/lib/libc)p 5565 7214 45 7 v 50 w(r/uthread/)p
  +Black 4116 7463 a([29])p Black 86 w(X)8 b Fa(A)-8 b(V)8
  +b(I)g(E)g(R)92 b Fv(L)8 b Fa(E)g(R)s(O)r(Y)t Fv(:)144
  +b Fu(The)88 b(LinuxThr)-6 b(eads)87 b(libr)n(ary)p Fv(;)112
  +b(1999;)4448 7646 y(http://pauillac.inria.fr/)p Fk(\230)p
  +Fv(xlero)o(y/linuxth)o(reads/)p Black 4116 7895 a([30])p
  +Black 86 w(I)8 b(B)g(M)t(:)34 b Fu(AIX)j(V)-17 b(er)o(sion)36
  +b(4.3)g(Gener)n(al)g(Pr)-7 b(o)o(gr)n(amming)34 b(Concepts:)4448
  +8077 y(Writing)110 b(and)f(Deb)m(ug)o(ging)g(Pr)-7 b(o)o(gr)n(ams;)146
  +b(Under)o(standing)4448 8260 y(Thr)-6 b(eads)p Fv(;)81
  +b(1998;)d(http://www.rs6000.ibm.com/doc)p 7435 8260 V
  +50 w(link/-)4448 8443 y(en)p 4598 8443 V 54 w(US/a)p
  +4951 8443 V 54 w(doc)p 5221 8443 V 53 w(lib/aixpr)m
  +(ggd/genprogc/understanding-)p 4448 8625 V 4493 8625
  +a(threads.htm)p Black 4116 8874 a([31])p Black 82 w Fu(Netscape)218
  +b(P)-12 b(ortable)218 b(Runtime)f Fv(\(NSPR\);)g(http://-)4448
  +9057 y(www)-10 b(.mozilla.or)m(g/docs/refList/refNSPR/,)493
  +b(http://-)4448 9240 y(lxr)-8 b(.mozilla.or)m(g/seamonk)o(e)n
  +(y/source/nsprpub/)p Black 4116 9489 a([32])p Black 86
  +w(R)8 b Fa(A)g(L)g(F)90 b Fv(S)8 b(.)91 b(E)8 b Fa(N)g(G)g(E)g(L)g(S)g
  +(C)g(H)g(A)g(L)g(L)t Fv(:)134 b Fu(Simple)83 b(Mac)n(hine)g(Conte)m(xt)
  +4448 9671 y(Benc)n(hmark)s Fv(;)142 b(2000;)g(http://www)-10
  +b(.gnu.or)m(g/softw)o(are/pth-)4448 9854 y(/smcb)k(.tar)e(.gz)p
  +Black 3817 11872 a Fx(11)p Black eop end
   %%Trailer
  -end
  +
   userdict /end-hook known{end-hook}if
   %%EOF
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/rse-pmt.tex
  ============================================================================
  $ cvs diff -u -r0 -r1.1 rse-pmt.tex
  --- /dev/null	2006-06-12 20:02:55 +0200
  +++ rse-pmt.tex	2006-06-12 20:02:57 +0200
  @@ -0,0 +1,1389 @@
  +
  +\documentclass[10pt,letterpaper]{article}
  +
  +\usepackage{vmargin}
  +\usepackage{multicol}
  +\usepackage{times}
  +\usepackage{epsfig}
  +\usepackage{float}
  +\usepackage{color}
  +\usepackage{calc}
  +\usepackage{alltt}
  +\usepackage{verbatim}
  +\usepackage{moreverb}
  +\usepackage{fancyheadings}
  +\usepackage{supertabular}
  +\usepackage{colortbl}
  +\usepackage{rotating}
  +
  +\floatstyle{boxed}
  +
  +\makeatletter
  +
  +\let\hangafter\@hangfrom
  +
  +\definecolor{dark}{rgb}{0.5,0.5,0.5}
  +\definecolor{medium}{rgb}{0.7,0.7,0.7}
  +\definecolor{light}{rgb}{0.95,0.95,0.95}
  +\newcommand{\grayrow}{\rowcolor[gray]{0.8}}
  +
  +\setpapersize{USletter}
  +\setmarginsrb{1.0in}{1.0in}{1.0in}{0.5in}{0pt}{0pt}{0.5in}{0.5in}
  +
  +%\renewcommand{\sfdefault}{phv}
  +\renewcommand{\section}{\@startsection%
  +    {section}{1}{\z@}%
  +    {-3.5ex \@plus -1ex \@minus -.2ex}%
  +    {2.3ex \@plus.2ex}%
  +    {\normalfont\Large\bfseries}}
  +\renewcommand{\subsection}{\@startsection%
  +    {subsection}{2}{\z@}%
  +    {-3.25ex\@plus -1ex \@minus -.2ex}%
  +    {1.5ex \@plus .2ex}%
  +    {\normalfont\large\bfseries}}
  +\renewcommand{\subsubsection}{\@startsection%
  +    {subsubsection}{3}{\z@}%
  +    {-3.25ex\@plus -1ex \@minus -.2ex}%
  +    {1.5ex \@plus .2ex}%
  +    {\normalfont\normalsize}}
  +\renewcommand{\paragraph}{\@startsection%
  +    {paragraph}{4}{\z@}%
  +    {3.25ex \@plus1ex \@minus.2ex}%
  +    {-1em}%
  +    {\normalfont\normalsize\bfseries}}
  +\renewcommand{\subparagraph}{\@startsection%
  +    {subparagraph}{5}{\parindent}%
  +    {3.25ex \@plus1ex \@minus .2ex}%
  +    {-1em}%
  +    {\normalfont\normalsize}}
  +
  +\renewcommand{\labelitemi}{   \rule{6pt}{6pt} }
  +\renewcommand{\labelitemii}{  \rule{5pt}{5pt} }
  +\renewcommand{\labelitemiii}{ \rule{4pt}{4pt} }
  +\renewcommand{\labelitemiv}{  \rule{3pt}{3pt} }
  +
  +\newcommand{\mypar}[1]{\medskip\noindent{\large\bfseries #1}\smallskip}
  +
  +\makeatother
  +
  +\pagestyle{fancy}
  +\lhead{}
  +\chead{}
  +\rhead{}
  +\headrulewidth=0pt
  +\lfoot{}
  +\cfoot{\thepage}
  +\rfoot{}
  +
  +\begin{document}
  +
  +\begin{center}
  +{\huge\bfseries Portable Multithreading}\\[1mm]
  +{\large\bfseries The Signal Stack Trick For User-Space Thread Creation}\\[5mm]
  +{\large Ralf S. Engelschall}\\[1mm]
  +{\large\textit{Technische Universit\"at M\"unchen (TUM)}}\\[1mm]
  +rse@engelschall.com, http://www.engelschall.com\\[8mm]
  +%{\large June 18th, 2000}
  +\end{center}
  +
  +\begin{abstract}
  +\noindent This paper describes a pragmatic but portable fallback
  +approach for creating and dispatching between the machine contexts of
  +multiple threads of execution on Unix systems that lack a dedicated
  +user-space context switching facility. Such a fallback approach
  +for implementing machine contexts is a vital part of a user-space
  +multithreading environment, if it has to achieve maximum portability
  +across a wide range of Unix flavors. The approach is entirely based
  +on standard Unix system facilities and ANSI-C language features and
  +especially does not require any assembly code or platform specific
  +tricks at all. The most interesting issue is the technique of creating
  +the machine context for threads, which this paper explains in detail.
  +The described approach closely follows the algorithm as implemented by
  +the author for the popular user-space multithreading library \textit{GNU
  +Portable Threads} (\textit{GNU Pth}, \cite{pth}) which this way quickly
  +gained the status of one of the most portable user-space multithreading
  +libraries.
  +
  +\medskip
  +\noindent
  +\textsf{\bfseries Keywords:}
  +portability, multithreading, Unix, POSIX, SUSv2, ANSI-C, user-space, context
  +creation, context switching, signal handler, stack, makecontext,
  +switchcontext, sigaltstack, setjmp, longjmp.
  +
  +\medskip
  +\noindent
  +\textsf
  +{\bfseries Publishing:}
  +Early drafts of this paper were distributed with the GNU Pth
  +distribution. The final release version was published on the USENIX
  +Annual Technical Conference, June 18-23, 2000, San Diego, California,
  +USA.
  +\end{abstract}
  +
  +\medskip
  +\columnsep=0.25in
  +\begin{multicols}{2}[\section{Introduction}]
  +
  +\subsection{Multithreading}
  +
  +The paradigm of programming with multiple threads of execution (aka
  +\textit{multithreading}) is already a very old one and dates back to
  +the decades of programming with \textit{co-routines} \cite{co1,co2}.
  +Paradoxically, the use of threads on Unix platforms did not become
  +popular until the early 1990s.
  +
  +\mypar{Multithreading Advantages}
  +
  +\noindent
  +Multithreading can provide many benefits for applications (good runtime
  +concurrency, parallel programming techniques can be implemented more easily,
  +the popular procedural programming style can be combined with multiple
  +threads of execution, \textit{etc.}) but the most interesting ones are
  +usually performance gains and reduced resource consumption. Because
  +in contrast to multiprocess applications, multithreaded ones usually
  +require less system resources (mainly memory) and their internal
  +communication part can leverage from the shared address space.
  +
  +\mypar{Multithreading and Applications}
  +
  +\noindent
  +Nevertheless there still exist just a few real applications in the free
  +software world that use multithreading for their benefit, although
  +their application domains are predestined for multithreading. For
  +instance, the popular Apache webserver as of version 1.3 still uses
  +a pre-forking process model for serving HTTP requests, although
  +two experiments with multithreaded Apache variants in 1996 (with
  +\textit{rsthreads} \cite{rsthreads}) and 1998 (with \textit{NSPR}
  +\cite{nspr}) already showed great performance boosts. The same applies
  +to many similar applications.
  +
  +The reason for this restraint mainly is that for a long time,
  +multithreading facilities under Unix were rare. The situation
  +became better after some vendors like \textit{Sun} and \textit{DEC}
  +incorporated threading facilities into their Unix flavors and
  +\textit{POSIX} standardized a threading \textit{Application Programming
  +Interface} (API) (aka \textit{Pthreads} \cite{iso}). But an API and a
  +few vendor implementations are not enough to fulfill the portability
  +requirements of modern free software packages. Here stand-alone and
  +really portable multithreading environments are needed.
  +
  +The author collected and evaluated over twenty (mostly user-space)
  +available multithreading facilities for Unix systems (see Table 1),
  +but only a few of them are freely available and showed to be really
  +portable. And even the mostly portable ones suffered from the fact that
  +they partly depend on assembly code or platform specific tricks usually
  +related to the creation and dispatching of the individual threads. This
  +means that the number of platforms they support is limited and
  +applications which are based on these facilities are only portable to
  +those platforms. This situation is not satisfactory, so application
  +authors still avoid the use of multithreading if they want to (or have
  +to) achieve maximum portability for their application.
  +
  +A pragmatic and mostly portable fallback technique for implementing
  +user-space threads can facilitate wider use of multithreading in free
  +software applications.
  +
  +\newcommand{\he}[1]{\begin{rotate}{45}\textbf{\small #1}\end{rotate}}
  +\begin{figure*}[t]
  +\noindent
  +\fbox
  +{\small
  +\setlength{\tabcolsep}{2.5pt}
  +\begin{tabular}{lllllllllllllllll}
  +\rule{0pt}{26mm}%
  +\textbf{Package} & \he{Genesis} & \he{Latest Version} & \he{Implementation Space} & \he{Thread Mapping} & \he{Active Development} & \he{Experimental State} & \he{Open Source} & \he{Pthread API} & \he{Pthread Shared Memory} & \he{Native API} & \he{Native API $\ge$ Pthread API} & \he{Native API is Pthread API} & \he{Preemptive Scheduling} & \he{Portability} & \he{Assembly Code} & \he{SysCall Wrap.} \\
  +\hline
  +gnu-pth         & 1999 & 1.3.5  & user        & n:1  & yes  & no  & yes & yes & no  & yes & yes & no     & no  & full/mcsc+sjlj & no  & partly \\[-1pt]
  +cmu-lwp         & 1984 & 1.4    & user        & n:1  & yes  & no  & yes & no  & -   & yes & yes & partly & no  & semi/fixed:8   & yes & no     \\[-1pt]
  +fsu-pthread     & 1992 & 3.13   & user        & n:1  & no   & no  & yes & yes & no  & no  & -   & -      & yes & semi/fixed:6   & yes & yes    \\[-1pt]
  +mit-pthread     & 1993 & 1.8.9  & user        & n:1  & no   & no  & yes & yes & no  & no  & -   & -      & yes & semi/fixed:17  & yes & yes    \\[-1pt]
  +ptl             & 1997 & 990622 & user        & n:1  & no   & no  & yes & yes & no  & no  & -   & -      & yes & semi/fixed:10  & yes & yes    \\[-1pt]
  +linuxthreads    & 1997 & 2.1.2  & user+kernel & 1:1  & yes  & no  & yes & yes & no  & no  & -   & -      & yes & semi/fixed:5   & yes & yes    \\[-1pt]
  +uthread         & 1998 & 3.4    & user        & n:1  & yes  & no  & yes & yes & no  & no  & -   & -      & yes & semi/fixed:2   & yes & yes    \\[-1pt]
  +cthread         & 1991 & 991115 & user        & n:1  & no   & no  & yes & no  & -   & yes & yes & no     & no  & semi/fixed:8   & yes & yes    \\[-1pt]
  +openthreads/qt  & 1996 & 2.0    & user        & n:1  & no   & no  & yes & no  & -   & yes & no  & no     & no  & semi/fixed:9   & yes & no     \\[-1pt]
  +rt++/qt         & 1996 & 1.0    & user        & n:1  & no   & no  & yes & no  & -   & yes & yes & no     & no  & semi/fixed:9   & yes & no     \\[-1pt]
  +rsthreads       & 1996 & 980331 & user        & n:1  & no   & yes & yes & no  & -   & yes & no  & no     & no  & semi/fixed:9   & yes & no     \\[-1pt]
  +pcthread        & 1996 & 1.0    & user        & n:1  & no   & yes & yes & yes & no  & no  & -   & -      & yes & semi/fixed:1   & yes & no     \\[-1pt]
  +bbthreads       & 1996 & 0.3    & kernel      & 1:1  & no   & yes & yes & no  & -   & yes & no  & -      & yes & semi/fixed:1   & yes & no     \\[-1pt]
  +jkthreads       & 1998 & 1.2    & kernel      & 1:1  & no   & yes & yes & no  & -   & yes & no  & -      & yes & semi/fixed:1   & yes & no     \\[-1pt]
  +nthreads        & 1997 & 970604 & user        & n:1  & no   & yes & yes & no  & -   & yes & no  & -      & no  & semi/fixed:9   & yes & partly \\[-1pt]
  +rexthreads      & 1993 & 930614 & user        & n:1  & no   & yes & yes & no  & -   & yes & no  & -      & no  & semi/fixed:4   & yes & no     \\[-1pt]
  +coro            & 1999 & 1.0.3  & user        & n:1  & no   & yes & yes & no  & -   & yes & no  & -      & no  & semi/fixed:1   & yes & no     \\[-1pt]
  +greenthreads    & 1995 & 1.2    & user        & n:1  & no   & no  & no  & no  & -   & yes & yes & -      & yes & full/mcsc      & no  & no     \\[-1pt]
  +solaris-pthread & NN   & 2.7    & user+kernel & n:m  & yes  & no  & no  & yes & yes & yes & yes & no     & yes & NN             & NN  & yes    \\[-1pt]
  +tru64-pthread   & NN   & 5.0    & user+kernel & n:m  & yes  & no  & no  & yes & yes & no  & no  & no     & yes & NN             & NN  & yes    \\[-1pt]
  +aix-pthread     & NN   & 4.3    & user+kernel & 1:1  & yes  & no  & no  & yes & yes & no  & no  & no     & yes & NN             & NN  & yes    \\[-1pt]
  +\end{tabular}\ \ \ \ \ \ \ 
  +}\\[4pt]
  +\parbox{\linewidth}{\footnotesize\baselineskip=0pt
  +\hangafter{\textbf{Table 1:}\quad}%
  +Summary of evaluated multithreading packages and some of their
  +determined characteristics. Notice that mostly all packages con\-tain
  +assembly code and are just semi-portable, \textit{i.e.}, they support
  +only a fixed set of platforms and do not automatically adjust for new
  +ones.
  +}
  +\end{figure*}
  +
  +\mypar{Ingredients of a Thread}
  +
  +\noindent
  +A Unix process has many ingredients, but the most important ones are its
  +memory mapping table, the signal dispatching table, the signal mask, the
  +set of file descriptors and the machine context. The machine context
  +in turn consists of at least the CPU registers including the program
  +counter and the stack pointer. In addition, there can be light-weight
  +processes (LWP) or threads, which usually share all attributes with the
  +underlying (heavy-weight) process except for the machine context.
  +
  +\mypar{Kernel-Space vs. User-Space}
  +
  +\noindent
  +Those LWPs or threads, on a Unix platform classically can be implemented
  +either in kernel-space or in user-space. When implemented in
  +kernel-space, one usually calls them LWPs or kernel threads, otherwise
  +(user-space) threads. If threads are implemented by the kernel, the
  +thread context switches are performed by the kernel without notice by
  +the application, similar to the dispatching of processes. If threads are
  +implemented in user-space, the thread context switches are performed
  +usually by an application library without notice by the kernel.
  +Additionally, there exist hybrid threading approaches, where typically a
  +user-space library binds one or more user-space threads to one or more
  +kernel-space LWPs.
  +
  +\mypar{Thread Models}
  +
  +\noindent
  +The vendor threading facilities under \textit{Sun Solaris},
  +\textit{IBM AIX}, \textit{DEC Tru64} (formerly \textit{DIGITAL
  +UNIX} or \textit{OSF/1}) and \textit{SGI IRIX} use a \textbf{M:N}
  +mapping \cite{str,aix}, \textit{i.e.}, \textbf{M} user-space threads
  +are mapped onto \textbf{N} kernel-space LWPs. On the other hand,
  +\textit{LinuxThreads} \cite{linuxthreads} under \textit{GNU/Linux}
  +uses a \textbf{1:1} mapping and pure user-space implementations like
  +\textit{GNU Pth}, \textit{FSU pthreads} or \textit{MIT pthreads},
  +\textit{etc.} use a \textbf{M:1} mapping \cite{pth,fsu,mit}.
  +
  +From now on we focus on such \textbf{M:1} user space threading
  +approaches, where one or more user space threads are implemented
  +inside a single kernel space process. The exercise is to implement
  +this by using standardized Unix system and ANSI-C language facilities
  +\textit{only}.
  +
  +\subsection{The Exercise}
  +
  +As we have mentioned, a thread shares its state with the underlying
  +process except for the machine context. So the major task for a
  +user-space threading system is to create and dispatch those machine
  +contexts.
  +
  +In practice, the second major task it has to do is to ensure that no
  +thread by accident blocks the whole process (and thereby all other
  +threads). Instead when an operation would block, the threading library
  +should suspend only the execution of the current thread and in the
  +meantime dispatch the remaining threads. But this task is outside the
  +scope of this paper (see \cite{bmv} for details about this task). We
  +focus only on the aspect of machine context handling.
  +
  +\subsection{The Curse of Portability}
  +
  +Our goal of real portability for a threading system causes some
  +non-trivial problems which have to be solved. The most obvious one is
  +that dealing with machine contexts usually suffers from portability,
  +because it is a highly CPU dependent task for which not every Unix
  +flavor provides a standardized API. Although such an API would be not
  +too hard for vendors to provide, because in principle it is just a matter
  +of switching a few CPU registers (mainly the program counter and the
  +stack pointer).
  +
  +\mypar{Assembly Code Considered Harmful}
  +
  +\noindent
  +Additionally, we disallow the use of any assembly solutions or platform
  +specific tricks, because then the threading system again would be only
  +semi-portable, \textit{i.e.}, it can be ported to \textbf{N} platforms
  +but on the \textbf{(N+1)}th platform one has to manually adjust or even
  +extend it to work there, too.
  +
  +This is usually not acceptable, even if it also makes solving the
  +problems harder. At least most of the known free software user-space
  +threading systems \cite{fsu,mit,ptl2} do not restrict themself to this
  +and therefore are just semi-portable. But real portability should be a
  +major goal.
  +
  +\section{Problem Analysis}
  +
  +\subsection{The Task in Detail}
  +
  +Our task is simple in principle: provide an API and corresponding
  +implementation for creating and dispatching machine contexts on which
  +user-space threads can be implemented.
  +
  +\mypar{The Proposed API}
  +
  +\noindent
  +In detail we propose the following \textit{Application Programmers
  +Interface} (API) for the machine context handling:
  +
  +\begin{itemize}
  +\item A data structure of type \texttt{mctx\_t} which holds the machine context.
  +
  +\item A function 
  +      ``\textbf{void} \texttt{mctx\_crea\-te(}\texttt{mctx\_t} \texttt{*}\textit{mctx},
  +      \textbf{void} \texttt{(*}\textit{sf\_addr}\texttt{)(}\textbf{void *}\texttt{),}
  +      \textbf{void} \texttt{*}\textit{sf\_arg}, 
  +      \textbf{void} \texttt{*}\textit{sk\_addr}, 
  +      \textbf{size\_t} \textit{sk\_size}\texttt{)}''
  +      which creates and initializes a machine context structure in
  +      \textit{mctx} with a start function \textit{sf\_addr}, a start
  +      function argument \textit{sf\_arg}, and a stack starting at
  +      \textit{sk\_addr}, which is \textit{sk\_size} bytes in size.
  +  
  +\item A function
  +      ``\textbf{void} \texttt{mctx\_save(}\texttt{mctx\_t}
  +      \texttt{*}\textit{mctx}\texttt{)}''
  +      which saves the current machine context into the machine context
  +      structure \textit{mctx}.
  +
  +\item A function
  +      ``\textbf{void} \texttt{mctx\_restore(}\texttt{mctx\_t}
  +      \texttt{*}\textit{mctx}\texttt{)}''
  +      which restores the new machine context from the machine context
  +      structure \textit{mctx}. This function does not return to
  +      the caller. Instead it does return at the location stored
  +      in \textit{mctx} (which is either \textit{sf\_addr} from a
  +      previous \texttt{mctx\_create} call or the location of a previous
  +      \texttt{mctx\_save} call).
  +
  +\item A function
  +      ``\textbf{void} \texttt{mctx\_switch(}\texttt{mctx\_t} \texttt{*}\textit{mctx\-\_old},
  +      \texttt{mctx\_t} \texttt{*}\textit{mctx\_new}\texttt{)}''
  +      which switches from the current machine context (saved to
  +      \textit{mctx\_old} for later use) to a new context (restored from
  +      \textit{mctx\_new}). This function returns only to the caller if
  +      \texttt{mctx\_restore} or \texttt{mctx\_switch} is again used on
  +      \textit{mctx\_old}.
  +      
  +\end{itemize}
  +
  +\subsection{Technical Possibilities}
  +
  +Poking around in the references of the ANSI-C language reference and the
  +Unix standards show the following functions on which an implementation
  +can be based:
  +
  +\begin{itemize}
  +\item There is the \texttt{ucontext}(3) facility with the functions
  +      \texttt{getcontext}(3), \texttt{makecontext}(3),
  +      \texttt{swapcontext}(3) and \texttt{setcontext}(3) which
  +      conform to the \textit{Single Unix Specification}, Version 2
  +      (\textit{SUSv2} \cite{sus}, aka \textit{Unix95/98}). Unfortunately
  +      these are available on modern Unix platforms only.
  +
  +\item There are the \texttt{jmp\_buf} based
  +      functions \texttt{setjmp}(3) and \texttt{long\-jmp}(3) which
  +      conform to ISO 9899:1990 (ISO-C) and the \texttt{sigjmp\_buf}
  +      based \texttt{sigsetjmp}(3) and \texttt{sig\-long\-jmp}(3)
  +      functions which conform to IEEE Std\-1003.1-1988 (\textit{POSIX}),
  +      and \textit{Single Unix Specification}, Version 2 (\textit{SUSv2}
  +      \cite{sus}, aka \textit{Unix95/98}). The first two functions are
  +      available really on all Unix platforms, the last two are available
  +      only on some of them.
  +
  +      On some platforms \texttt{setjmp}(3) and \texttt{longjmp}(3)
  +      save and restore also the signal mask (if one does not want
  +      this semantics, one has to call \texttt{\_setjmp}(3) and
  +      \texttt{\_longjmp}(3) there) while on others one has to
  +      explicitly use the superset functions \texttt{sigsetjmp}(3) and
  +      \texttt{siglongjmp}(3) for this. In our discussion we can assume
  +      that \texttt{setjmp}(3) and \texttt{longjmp}(3) save and restore
  +      the signal mask, because if this is not the case in practice,
  +      one easily can replace them with \texttt{sigsetjmp}(3) and
  +      \texttt{siglongjmp}(3) calls (if available) or (if not available)
  +      emulate the missing functionality manually with additional
  +      \texttt{sigprocmask}(2) calls (see \texttt{pth\_mctx.c} in
  +      \textit{GNU Pth} \cite{pth}).
  +
  +\item There is the function \texttt{sigaltstack}(2) which 
  +      conforms to the \textit{Single Unix Specification}, Version 2
  +      (\textit{SUSv2} \cite{sus}, aka \textit{Unix95/98}) and its
  +      ancestor function \texttt{sigstack}(2) from \textit{4.2BSD}. The
  +      last one exists only on \textit{BSD}-derived platforms, but the
  +      first function already exists on all current Unix platforms.
  +\end{itemize}
  +
  +\subsection{Maximum Portability Solution}
  +
  +The maximum portable solution obviously is to use
  +the standardized \texttt{makecontext}(3) function
  +to create threads and \texttt{switchcontext}(3) or
  +\texttt{getcontext}(3)/\texttt{setcontext}(3) to dispatch them.
  +And actually these are the preferred functions modern user-space
  +multithreading systems are using. We could easily implement our proposed
  +API as following (all error checks omitted for better readability):
  +
  +{\small
  +\baselineskip=9pt
  +\begin{alltt}
  +/* \textrm{\textit{\bfseries machine context data structure}} */
  +\textbf{typedef struct} mctx_st \{ 
  +    ucontext_t uc;
  +\} mctx_t;
  +
  +/* \textrm{\textit{\bfseries save machine context}} */
  +\textbf{#define} mctx_save(mctx) \(\backslash\)
  +    (\textbf{void})getcontext(&(mctx)->uc)
  +
  +/* \textrm{\textit{\bfseries restore machine context}} */
  +\textbf{#define} mctx_restore(mctx) \(\backslash\)
  +    (\textbf{void})setcontext(&(mctx)->uc)
  +
  +/* \textrm{\textit{\bfseries switch machine context}} */
  +\textbf{#define} mctx_switch(mctx_old,mctx_new) \(\backslash\)
  +    (\textbf{void})swapcontext(&((mctx_old)->uc), \(\backslash\)
  +                      &((mctx_new)->uc))
  +
  +/* \textrm{\textit{\bfseries create machine context}} */
  +\textbf{void} mctx_create(
  +    mctx_t *mctx,
  +    \textbf{void} (*sf_addr)(\textbf{void} *), \textbf{void} *sf_arg,
  +    \textbf{void} *sk_addr, size_t sk_size) 
  +\{
  +
  +    /* \textrm{\textit{\bfseries fetch current context}} */
  +    getcontext(&(mctx->uc));
  +
  +    /* \textrm{\textit{\bfseries adjust to new context}} */
  +    mctx->uc.uc_link           = NULL;
  +    mctx->uc.uc_stack.ss_sp    = sk_addr;
  +    mctx->uc.uc_stack.ss_size  = sk_size;
  +    mctx->uc.uc_stack.ss_flags = 0;
  +
  +    /* \textrm{\textit{\bfseries make new context}} */
  +    makecontext(&(mctx->uc), 
  +                sf_addr, 1, sf_arg);
  +    \textbf{return};
  +\}
  +\end{alltt}}
  +
  +\noindent
  +Unfortunately there are still lots of Unix platforms where this
  +approach cannot be used, because the standardized \texttt{ucontext}(3)
  +API is not provided by the vendor. Actually the platform test results
  +for \textit{GNU Pth} (see Table 2 below) showed that only 7 of 21
  +successfully tested Unix flavors provided the standardized API
  +(\texttt{makecontext}(3), \textit{etc.}). On all other platforms,
  +\textit{GNU Pth} was forced to use the fallback approach of implementing
  +the machine context as we will describe in the following. Obviously
  +this fallback approach has to use the remaining technical possibilities
  +(\texttt{sigsetjmp}(3), \textit{etc.}).
  +
  +\medskip
  +\noindent
  +\fbox
  +{\parbox{7.8cm}
  +{\footnotesize
  +\noindent
  +\medskip
  +\begin{tabular}{l|l|l|l}
  +{\bfseries Operating System} & 
  +{\bfseries Architecture(s)} & 
  +{\bfseries mcsc} & 
  +{\bfseries sjlj} \\
  +FreeBSD 2.x/3.x            & Intel             & no  & yes \\
  +FreeBSD 3.x                & Intel, Alpha      & no  & yes \\
  +NetBSD 1.3/1.4             & Intel, PPC, M68K  & no  & yes \\
  +OpenBSD 2.5/2.6            & Intel, SPARC      & no  & yes \\
  +BSDI 4.0                   & Intel             & no  & yes \\
  +Linux 2.0.x glibc 1.x/2.0  & Intel, SPARC, PPC & no  & yes \\
  +Linux 2.2.x glibc 2.0/2.1  & Intel, Alpha, ARM & no  & yes \\
  +Sun SunOS 4.1.x            & SPARC             & no  & yes \\
  +Sun Solaris 2.5/2.6/2.7    & SPARC             & yes & yes \\
  +SCO UnixWare 2.x/7.x       & Intel             & yes & yes \\
  +SCO OpenServer 5.0.x       & Intel             & no  & yes \\
  +IBM AIX 4.1/4.2/4.3        & RS6000, PPC       & yes & yes \\
  +HP HPUX 9.10/10.20         & HPPA              & no  & yes \\
  +HP HPUX 11.0               & HPPA              & yes & yes \\
  +SGI IRIX 5.3               & MIPS 32/64        & no  & yes \\
  +SGI IRIX 6.2/6.5           & MIPS 32/64        & yes & yes \\
  +ISC 4.0                    & Intel             & no  & yes \\
  +Apple MacOS X              & PPC               & no  & yes \\
  +DEC OSF1/Tru64 4.0/5.0     & Alpha             & yes & yes \\
  +SNI ReliantUNIX            & MIPS              & yes & yes \\
  +AmigaOS                    & M68K              & no  & yes \\
  +\end{tabular}
  +
  +\medskip
  +\noindent
  +{\tiny
  +\begin{tabular}{ll}
  +\end{tabular}
  +}
  +}}\\[4pt]
  +\parbox{\linewidth}{\footnotesize\baselineskip=0pt
  +\hangafter{\textbf{Table 2:}\quad}%
  +Summary of operating system support. The level and type of support found on
  +each tested operating system. \texttt{mcsc}: functional
  +\texttt{makecontext}(3)/\-\texttt{switchcontext}(3), \texttt{sjlj}: functional
  +\texttt{setjmp}(3)/\texttt{longjmp}(3) or
  +\texttt{sig\-setjmp}(3)/\-\texttt{siglongjmp}(3). See file \texttt{PORTING} in
  +\textit{GNU Pth} \cite{pth} for more details.
  +}
  +
  +\subsection{Remaining Possibilities}
  +
  +Our problem can be divided into two parts, an easy one and a difficult one.
  +
  +\mypar{The Easy Part}
  +
  +\noindent
  +That \texttt{setjmp}(3) and \texttt{longjmp}(3) can be used to implement
  +user-space threads is commonly known \cite{ptl2,rsthreads,uthread}.
  +Mostly all older portable user-space threading libraries are based
  +on them, although some problems are known with these facilities (see
  +below). So it becomes clear that we also have to use these functions and
  +base our machine context (\texttt{mctx\_t}) on their \texttt{jmp\_buf}
  +data structure.
  +
  +We immediately recognize that this way we have at least solved
  +the dispatching problem, because our \texttt{mctx\_save},
  +\texttt{mctx\_restore} and \texttt{mctx\_switch} functions can be easily
  +implemented with \texttt{setjmp}(3) and \texttt{longjmp}(3).
  +
  +\mypar{The Difficult Part}
  +
  +\noindent
  +Nevertheless, the difficult problem of how to create the machine context
  +remains. Even knowing that our machine context is \texttt{jmp\_buf}
  +based is no advantage to us. A \texttt{jmp\_buf} has to be treated
  +by us as an opaque data structure --- for portability reasons. The
  +only operations we can perform on it are \texttt{setjmp}(3) and
  +\texttt{longjmp}(3) calls, of course. Additionally, we are forced to use
  +\texttt{sigaltstack}(3) for our stack manipulations, because it is the
  +only portable function which actually deals with stacks.
  +
  +So it is clear that our implementation for \texttt{mctx\_\-create} has
  +to play a few tricks to use a \texttt{jmp\_buf} for passing execution
  +control to an arbitrary startup routine. And our approach 
  +has to be careful to ensure that it does not suffer from unexpected
  +side-effects. It should be also obvious that we cannot again
  +expect to find an easy solution (as for \texttt{mctx\_save},
  +\texttt{mctx\_restore} and \texttt{mctx\_switch}), because
  +\texttt{setjmp}(3) and \texttt{sigaltstack}(3) cannot be trivially
  +combined to form \texttt{mctx\_create}.
  +
  +\section{Implementation}
  +
  +As we have already discussed, our implementation contains an easy part
  +(\texttt{mctx\_save}, \texttt{mctx\_restore} and \texttt{mctx\_switch})
  +and a difficult part (\texttt{mctx\_create}). Let us start with the easy
  +part, whose implementation is obvious (all error checks again omitted
  +for better readability):
  +
  +{\small
  +\baselineskip=9pt
  +\begin{alltt}
  +/* \textrm{\textit{\bfseries machine context data structure}} */
  +\textbf{typedef struct} mctx_st \{ 
  +    jmp_buf jb;
  +\} mctx_t;
  +
  +/* \textrm{\textit{\bfseries save machine context}} */
  +\textbf{#define} mctx_save(mctx) \(\backslash\)
  +    (\textbf{void})setjmp((mctx)->jb)
  +
  +/* \textrm{\textit{\bfseries restore machine context}} */
  +\textbf{#define} mctx_restore(mctx) \(\backslash\)
  +    longjmp((mctx)->jb, 1)
  +
  +/* \textrm{\textit{\bfseries switch machine context}} */
  +\textbf{#define} mctx_switch(mctx_old,mctx_new) \(\backslash\)
  +    \textbf{if} (setjmp((mctx_old)->jb) == 0) \(\backslash\)
  +        longjmp((mctx_new)->jb, 1)
  +
  +/* \textrm{\textit{\bfseries create machine context}} */
  +\textbf{void} mctx_create(
  +    mctx_t *mctx,
  +    \textbf{void} (*sf_addr)(\textbf{void} *), \textbf{void} *sf_arg,
  +    \textbf{void} *sk_addr, size_t sk_size) 
  +\{
  +    \textrm{\textit{\bfseries ...initialization of \texttt{mctx} to be filled in...}}
  +\}
  +\end{alltt}}
  +
  +\noindent
  +There is one subtle but important point we should mention: The
  +use of the C pre-processor \texttt{\#define} directive to implement
  +\texttt{mctx\_save}, \texttt{mctx\_restore} and \texttt{mctx\_switch}
  +is intentional. For technical reasons related to \texttt{setjmp}(3)
  +semantics and \texttt{return} related stack behavior (which we will
  +explain later in detail) we \textit{cannot} implement these three
  +functions (at least not \texttt{mctx\_switch}) as C functions if we want
  +to achieve maximum portability across all platforms. Instead they have
  +to be implemented as pre-processor macros.
  +
  +\subsection{Algorithm Overview}
  +
  +The general idea for \texttt{mctx\_create} is to configure the given
  +stack as a signal stack via \texttt{sigaltstack}(2), send the current
  +process a signal to transfer execution control onto this stack, save
  +the machine context there via \texttt{setjmp}(3), get rid of the signal
  +handler scope and bootstrap into the startup routine.
  +
  +The real problem in this approach comes from the signal handler scope
  +which implies various restrictions on Unix platforms (the signal
  +handler scope often is just a flag in the process control block (PCB)
  +which various system calls, like \texttt{sigaltstack}(2), check before
  +allowing the operation -- but because it is part of the process state
  +the kernel manages, the process cannot change it itself). As we will
  +see, we have to perform a few tricks to get rid of it. The second main
  +problem is: how do we prepare the calling of the start routine without
  +immediately entering it?
  +
  +\subsection{Algorithm}
  +
  +The input to the \texttt{mctx\_create} function is the machine context
  +structure \textit{mctx} which should be initialized, the thread startup
  +function address \textit{sf\_addr}, the thread startup function argument
  +\textit{sf\_arg} and a chunk of memory starting at \textit{sk\_addr} and
  +\textit{sk\_size} bytes in size, which should become the threads stack.
  +
  +The following algorithm for \texttt{mctx\_create} is directly modeled
  +after the implemented algorithm one can find in \textit{GNU Pth}
  +\cite{pth}, which in turn was derived from techniques originally found
  +in \textit{rsthreads} \cite{rsthreads}:
  +
  +\begin{enumerate}
  +
  +\item Preserve the current signal mask and block an arbitrary worker
  +      signal (we use \texttt{SIGUSR1}, but any signal can be used for
  +      this -- even an already used one). This worker signal is later
  +      temporarily required for the trampoline step.
  +
  +\item Preserve a possibly existing signal action for the worker
  +      signal and configure a trampoline function as the new temporary
  +      signal action. The signal delivery is configured to occur on
  +      an alternate signal stack (see next step).
  +
  +\item Preserve a possibly active alternate signal stack and configure
  +      the memory chunk starting at \textit{sk\_addr} as the new
  +      temporary alternate signal stack of length \textit{sk\_size}.
  +
  +\item Save parameters for the trampoline step (\textit{mctx},
  +      \textit{sf\_addr}, \textit{sf\_arg}, \textit{etc.}) in global
  +      variables, send the current process the worker signal, temporarily
  +      unblock it and this way allow it to be delivered on the signal
  +      stack in order to transfer execution control to the trampoline
  +      function. 
  +
  +\item After the trampoline function asynchronously entered, save its
  +      machine context in the \textit{mctx} structure and immediately
  +      return from it to terminate the signal handler scope.
  + 
  +\item Restore the preserved alternate signal stack, preserved signal
  +      action and preserved signal mask for worker signal. This way
  +      an existing application configuration for the worker signal is
  +      restored.
  +
  +\item Save the current machine context of \texttt{mctx\_create}. This
  +      allows us to return to this point after the next trampoline step.
  +
  +\item Restore the previously saved machine context of the trampoline function
  +      (\textit{mctx}) to again transfer execution control onto the alternate
  +      stack, but this time without(!) signal handler scope. 
  +
  +\item After reaching the trampoline function (\textit{mctx}) again,
  +      immediately bootstrap into a clean stack frame by just calling a
  +      second function.
  +
  +\item Set the new signal mask to be the same as the original signal
  +      mask which was active when \texttt{mctx\_create} was called. This
  +      is required because in the first trampoline step we usually had at
  +      least the worker signal blocked.
  +
  +\item Load the passed startup information (\textit{sf\_addr},
  +      \textit{sf\_arg}) from \texttt{mctx\_create} into local
  +      (stack-based) variables. This is important because their values
  +      have to be preserved in machine context dependent memory until
  +      the created machine context is the first time restored by the
  +      application.
  +
  +\item Save the current machine context for later restoring by
  +      the calling application.
  +      
  +\item Restore the previously saved machine context
  +      of \texttt{mctx\_create} to transfer execution control back to it.
  +
  +\item Return to the calling application.
  +
  +\end{enumerate}
  +
  +\noindent
  +When the calling application now again switches into the established
  +machine context \textit{mctx}, the thread starts running at routine
  +\textit{sf\_addr} with argument \textit{sf\_arg}. Figure 1 illustrates
  +the algorithm (the numbers refer to the algorithm steps listed above).
  +
  +\bigskip
  +\noindent
  +\psfig{file=rse-pmt.eps}\\[4pt]
  +\parbox{\linewidth}{\footnotesize\baselineskip=0pt
  +\hangafter{\textbf{Figure 1:}\quad}%
  +Illustration of the machine context creation procedure. The thick
  +solid lines and numeric marks correspond to the algorithm steps as
  +described in section 3.2. The thick dotted lines show a possible further
  +processing where a few context switches are performed to dispatch
  +between the main thread and the new created thread.
  +}
  +\smallskip
  +
  +\subsection{Source Code}
  +
  +The corresponding ANSI-C code, which implements \texttt{mctx\_create},
  +is a little bit more complicated. But with the presented algorithm in
  +mind, it is now straight-forward.
  +
  +{\small%
  +\baselineskip=9pt
  +\begin{alltt}
  +\textbf{static} mctx_t       mctx_caller;
  +\textbf{static} sig_atomic_t mctx_called;
  +
  +\textbf{static} mctx_t      *mctx_creat;
  +\textbf{static} \textbf{void}       (*mctx_creat_func)(\textbf{void} *);
  +\textbf{static} \textbf{void}        *mctx_creat_arg;
  +\textbf{static} sigset_t     mctx_creat_sigs;
  +
  +\textbf{void} mctx_create(
  +    mctx_t *mctx,
  +    \textbf{void} (*sf_addr)(\textbf{void} *), \textbf{void} *sf_arg, 
  +    \textbf{void} *sk_addr, \textbf{size_t} sk_size)
  +\{
  +    \textbf{struct} sigaction sa;
  +    \textbf{struct} sigaction osa;
  +    \textbf{struct} sigaltstack ss;
  +    \textbf{struct} sigaltstack oss;
  +    sigset_t osigs;
  +    sigset_t sigs;
  +
  +    /* \textrm{\textit{\bfseries Step 1:}} */
  +    sigemptyset(&sigs);
  +    sigaddset(&sigs, SIGUSR1);
  +    sigprocmask(SIG_BLOCK, &sigs, &osigs);
  +
  +    /* \textrm{\textit{\bfseries Step 2:}} */
  +    memset((\textbf{void} *)&sa, 0, 
  +           \textbf{sizeof}(\textbf{struct} sigaction));
  +    sa.sa_handler = mctx_create_trampoline;
  +    sa.sa_flags = SA_ONSTACK;
  +    sigemptyset(&sa.sa_mask);
  +    sigaction(SIGUSR1, &sa, &osa);
  +
  +    /* \textrm{\textit{\bfseries Step 3:}} */
  +    ss.ss_sp    = sk_addr; 
  +    ss.ss_size  = sk_size;
  +    ss.ss_flags = 0;
  +    sigaltstack(&ss, &oss);
  +
  +    /* \textrm{\textit{\bfseries Step 4:}} */
  +    mctx_creat      = mctx;
  +    mctx_creat_func = sf_addr;
  +    mctx_creat_arg  = sf_arg;
  +    mctx_creat_sigs = osigs;
  +    mctx_called     = FALSE;
  +    kill(getpid(), SIGUSR1);
  +    sigfillset(&sigs);
  +    sigdelset(&sigs, SIGUSR1);
  +    \textbf{while} (!mctx_called)
  +        sigsuspend(&sigs);
  +
  +    /* \textrm{\textit{\bfseries Step 6:}} */
  +    sigaltstack(NULL, &ss);
  +    ss.ss_flags = SS_DISABLE;
  +    sigaltstack(&ss, NULL);
  +    if (!(oss.ss_flags & SS_DISABLE))
  +        sigaltstack(&oss, NULL);
  +    sigaction(SIGUSR1, &osa, NULL);
  +    sigprocmask(SIG_SETMASK, 
  +                &osigs, NULL);
  +
  +    /* \textrm{\textit{\bfseries Step 7 \& Step 8:}} */
  +    mctx_switch(&mctx_caller, mctx);
  +
  +    /* \textrm{\textit{\bfseries Step 14:}} */
  +    \textbf{return};
  +\}
  +
  +\textbf{void} mctx_create_trampoline(\textbf{int} sig)
  +\{
  +    /* \textrm{\textit{\bfseries Step 5:}} */
  +    \textbf{if} (mctx_save(mctx_creat) == 0) \{
  +        mctx_called = TRUE;
  +        \textbf{return};
  +    \}
  +
  +    /* \textrm{\textit{\bfseries Step 9:}} */
  +    mctx_create_boot();
  +\}
  +
  +\textbf{void} mctx_create_boot(\textbf{void})
  +\{
  +    \textbf{void} (*mctx_start_func)(\textbf{void} *);
  +    \textbf{void} *mctx_start_arg;
  +
  +    /* \textrm{\textit{\bfseries Step 10:}} */
  +    sigprocmask(SIG_SETMASK, 
  +                &mctx_creat_sigs, NULL);
  +
  +    /* \textrm{\textit{\bfseries Step 11:}} */
  +    mctx_start_func = mctx_creat_func;
  +    mctx_start_arg  = mctx_creat_arg;
  +
  +    /* \textrm{\textit{\bfseries Step 12 \& Step 13:}} */
  +    mctx_switch(mctx_creat, &mctx_caller);
  +
  +    /* \textrm{\textit{\bfseries The thread ``magically'' starts... }} */
  +    mctx_start_func(mctx_start_arg);
  +
  +    /* NOTREACHED */
  +    abort();
  +\}
  +\end{alltt}
  +}
  +
  +\subsection{Run-time Penalty}
  +
  +After this discussion of the implementation details, an obviously
  +occuring question now is what the expected run-time penalty is. That is,
  +what does our presented machine context implementation cost compared
  +to a \texttt{ucontext}(3) based solution. From the already discussed
  +details we can easily guess that our complex machine context creation
  +procedure (\texttt{mctx\_create}) will be certainly noticeably slower
  +than a solution based on a \texttt{ucontext}(3) facility.
  +
  +But a wild guess is not sufficing for a reasonable statement. So we have
  +written a \textit{Simple Machine Context Benchmark} (SMCB \cite{smcb})
  +which was used to compare run-time costs of the \texttt{mctx\_create}
  +and \texttt{mctx\_switch} functions if once implemented through
  +the \textit{POSIX} \texttt{makecontext}(3)/\texttt{swapcontext}(3)
  +functions (as shown in section 2.3), and once implemented with our
  +based fallback implementation (for convenience reasons we directly used
  +\texttt{sigjmp\_buf}, \texttt{sigsetjmp}(3) and \texttt{siglongjmp}(3)
  +in the benchmark, because all tested platforms provided this). The
  +results are shown Table 3 below.
  +
  +As one can derive from these evaluations, our signal stack trick to
  +implement \texttt{mctx\_create} in practice is approximately 15 times
  +slower than the \texttt{makecontext}(3) based variant. This cost
  +should not be neglected. On the other hand, the \texttt{sigsetjmp}(3)/
  +\texttt{siglongjmp}(3) based \texttt{mctx\_switch} performs about as
  +good as the \texttt{swapcontext}(3) based variant (the reason why
  +on most of the tested platforms it is even slightly faster is not
  +known -- but we guess it is related to a greater management overhead
  +in the \texttt{ucontext}(3) facility, which is a superset of the
  +functionality we require). Or in short: our presented fallback approach
  +costs noticeable extra CPU cycles on thread creation time, but is as
  +fast as the standardized solution under thread dispatching time.
  +
  +\bigskip
  +\noindent
  +\fbox
  +{\parbox{7.8cm}
  +{\footnotesize
  +\noindent
  +\medskip
  +\ \ \ {\bfseries 10000 $\times$ mctx\_create (in seconds):}\\[1mm]
  +\begin{tabular}{l|r|r|r}
  +{\bfseries Platform} & 
  +{\bfseries mcsc} & 
  +{\bfseries sjlj} & 
  +{\bfseries overhead} \\
  +Sun Solaris 2.6 (SPARC)  & 0.076 & 1.268 & 16.7 \\
  +DEC Tru64 5.0 (Alpha)    & 0.019 & 0.235 & 12.4 \\
  +SGI IRIX 6.5 (MIPS)      & 0.105 & 1.523 & 14.5 \\
  +SCO UnixWare 7.0 (Intel) & 0.204 & 3.827 & 18.8 \\
  +HP HP/UX 11.0 (HPPA)     & 0.057 & 0.667 & 11.8 \\
  +\multicolumn{4}{r}{
  +    {\bfseries Average: \quad 14.8}} \\
  +\end{tabular}
  +
  +\medskip
  +\ \ \ {\bfseries 10000 $\times$ mctx\_switch (in seconds):}\\[1mm]
  +\begin{tabular}{l|r|r|r}
  +{\bfseries Platform} & 
  +{\bfseries mcsc} & 
  +{\bfseries sjlj} & 
  +{\bfseries overhead} \\
  +Sun Solaris 2.6 (SPARC)  & 0.137 & 0.210 & 1.5 \\
  +DEC Tru64 5.0 (Alpha)    & 0.034 & 0.022 & 0.6 \\
  +SGI IRIX 6.5 (MIPS)      & 0.235 & 0.190 & 0.8 \\
  +SCO UnixWare 7.0 (Intel) & 0.440 & 0.398 & 0.9 \\
  +HP HP/UX 11.0 (HPPA)     & 0.106 & 0.065 & 0.6 \\
  +\multicolumn{4}{r}{
  +    {\bfseries Average: \quad 0.9}} \\
  +\end{tabular}
  +}}\\[4pt]
  +\parbox{\linewidth}{\footnotesize\baselineskip=0pt
  +\hangafter{\textbf{Table 3:}\quad}%
  +Summary of \textit{Simple Machine Context Benchmark} (SMCB, \cite{smcb}).
  +The speed of machine context creation and switching found on
  +each tested operating system. \textbf{mcsc}: functional
  +\texttt{makecontext}(3) / \texttt{switchcontext}(3), \textbf{sjlj}: functional
  +\texttt{sigsetjmp}(3)/\texttt{siglongjmp}(3). \textbf{overhead}: the
  +overhead of using \textbf{sjlj} instead of \textbf{mcsc}.
  +}
  +
  +\subsection{Remaining Issues}
  +
  +The presented algorithm and source code can be directly used in
  +practice for implementing a minimal threading system or the concept
  +of co-routines. Its big advantage is that if the operating system
  +provides the required standardized primitives, we do not need to know
  +anything at all about the machine we are running on --- everything just
  +works. Nevertheless, there remain a few special issues we still have to
  +discuss.
  +
  +\mypar{The Waggly longjmp(3) after Return}
  +
  +\noindent
  +On some platforms, \texttt{longjmp}(3) may not be called after the
  +function which called the \texttt{setjmp}(3) returned. When this is
  +done, the stack frame situation is not guaranteed to be in a clean and
  +consistent state. But this is exactly the mechanism we use in order to
  +get rid of the signal handler scope in step 5.
  +
  +The only alternative would be to leave the signal handler via
  +\texttt{longjmp}(3), but then we would have another problem,
  +as experience showed. For instance, \textsc{Robert S. Thau}'s
  +\textit{Really Simple Threads} (\textit{rsthreads}) \cite{rsthreads}
  +was ported to several platforms and was used to run an experimental
  +multithreaded version of the Apache webserver. \textsc{Thau}'s approach
  +was similar to ours, but differed significantly in the way the signal
  +handler is left. In particular, in an attempt to avoid the unsafe stack
  +frame, it used a \texttt{longjmp}(3) call to leave the signal handler,
  +rather than returning from it. But this approach does not work on some
  +\textit{SysV}-derived kernels, as we already mentioned.
  +
  +The problem is that these kernels do not ``believe'' that the code
  +is out of the signal-handling context, until the signal handler has
  +returned --- and accordingly, refuse to allow readjustment of the
  +signal stack until it has. But with the \textit{rsthreads} approach,
  +the signal handler that created the first thread never returns, and
  +when \textit{rsthreads} wants to create the second thread, these
  +kernels refuse to readjust the signal stack, and we are stuck. So with
  +portability in mind, we decided that it is better to get rid of the
  +signal handler scope with the straight-forward ``\texttt{return}'' and
  +instead fight the mentioned (simpler) problem of an unsafe stack frame.
  +
  +Fortunately, in practice this is not as problematic as it seems, because
  +evaluations (for \textit{GNU Pth}) on a wide range of current Unix
  +platforms showed that one can reach a safe stack frame again by just
  +calling a function. That is the reason why our algorithm enters the
  +second trampoline function in step 9.
  +
  +\mypar{The Uncooperative longjmp(3)}
  +
  +\noindent
  +Even on operating systems which have working \textit{POSIX}
  +functions, our approach may theoretically still not work, because
  +\texttt{longjmp}(3) does not cooperate. For instance, on some
  +platforms the standard \textit{libc} \texttt{longjmp}(3) branches
  +to error-handling code if it detects that the caller tries to jump
  +\textit{up} the stack, \textit{i.e.}, into a stack frame that has
  +already returned.
  +
  +This is usually implemented by comparing the current stack pointer
  +to the one in the \texttt{jmp\_buf} structure. That is why it is
  +important for our algorithm to return from the signal handler and this
  +way enter the (different) stack of the parent thread. In practice,
  +the implementation in \textit{GNU Pth} showed that then one no longer
  +suffers from those uncooperative \texttt{longjmp}(3) implementations,
  +but one should keep this point in mind when reaching even more
  +uncooperative variants on esoteric Unix platforms. If it still occurs,
  +one can only try to resume the operation by using a possibly existing
  +platform-specific error handling hook.
  +
  +\mypar{Garbage at Bottom of Stacks}
  +
  +\noindent
  +There is a subtle side-effect of our implementation: there remains some
  +garbage at the bottom of each thread stack. The reason is that if a
  +signal is delivered, the operating system pushes some state onto the
  +stack, which is restored later, when the signal handler returns. But
  +although we return from the signal handler, we jump in again, and this
  +time we enter not directly at the bottom of the stack, because of the
  +\texttt{setjmp}(3) in the trampoline function.
  +
  +Since the operating system has to capture all CPU registers (including
  +those that are ordinarily scratch registers or caller-save registers),
  +there can be a fair amount of memory at the bottom of the established
  +thread stack. For some systems this can be even up to 1 KB of garbage
  +\cite{rsthreads}. But except for the additional memory consumption it
  +does not hurt.
  +
  +We just have to keep in mind this additional stack consumption when
  +deciding the stack size (\textit{sk\_size}). A reasonable stack size
  +usually is between 16 and 32 KB. Less is neither reasonable nor always
  +allowed (current Unix platforms usually require a stack to be at least
  +16 KB in size).
  +
  +\mypar{Stack Overflows}
  +
  +\noindent
  +There is a noticeable difference between the initial \texttt{main}()
  +thread and the explicitly spawned threads: the initial thread runs on
  +the standard process stack. This stack automatically can grow under
  +Unix, while the stacks of the spawned threads are fixed in size. So
  +stack overflows can occur for the spawned threads. This implies that
  +the parent has to make a reasonable guess of the threads stack space
  +requirement already at spawning time.
  +
  +And there is no really portable solution to this problem, because even
  +if the thread library's scheduler can detect the stack overflow, it
  +cannot easily resize the stack. The reason is simply that the stack
  +initialization goes hand in hand with the initialization of the start
  +routine, as we discussed before. And this start routine has to be a real
  +C function in order to \textit{call}. But once the thread is running,
  +there no longer exists such an entry point. So, even if the scheduler
  +would be able to give the thread a new enlarged stack, there is no
  +chance to restart the thread on this new stack.
  +
  +Or more correct, there is no \textit{portable} way to achieve it. As
  +with the previous problems, there is a non-portable solution. That
  +is why our implementation did not deal with this issue. Instead in
  +practice one usually lets the scheduler just detect the stack overflow
  +and terminate the thread. This is done by using a red zone at the top
  +of the stack which is marked with a magic value the scheduler checks
  +between thread dispatching operations.
  +
  +Resizing solutions are only possible in semi-portable ways. One
  +approach is to place the thread stacks into a memory mapped area (see
  +\texttt{mmap}(2)) of the process address space and let the scheduler
  +catch \texttt{SIGSEGV} signals. When such a signal occurs, because of
  +a stack overflow in this area, the scheduler explicitly resizes the
  +memory mapped area. This resizing can be done either by copying the
  +stack contents into a new larger area which is then re-mapped to the
  +old address or via an even more elegant way, as the vendor threading
  +libraries of \textit{Sun Solaris}, \textit{FreeBSD} and \textit{DEC
  +Tru64} do it: the thread stacks are allocated inside memory mapped areas
  +which are already initially a few MB in (virtual) size and then one just
  +relies on the virtual memory system's feature that only the actually
  +consumed memory space is mapped.
  +
  +\mypar{Startup Routine Termination}
  +
  +\noindent
  +There is a cruel \texttt{abort}(3) call at the end of our
  +\texttt{mctx\_create\_boot} function. This means, if the startup
  +routine would return, the process is aborted. That is obviously not
  +reasonable, so why have we written it this way?
  +
  +If the thread returns from the startup routine, it should be cleanly
  +terminated. But it cannot terminate itself (for instance, because
  +it cannot free its own stack while running on it, \textit{etc.}). So
  +the termination handling actually is the task of the thread library
  +scheduler. As a consequence, the thread spawning function of a thread
  +library should be not directly \texttt{mctx\_create}.
  +
  +Instead the thread spawning function should use an additional trampoline
  +function as the higher-level startup routine. And this trampoline
  +function performs a context switch back into the thread library
  +scheduler before the lower-level startup routine would return.
  +The scheduler then can safely remove the thread and its machine
  +context. That is why the \texttt{abort}(3) call is never reached
  +in practice (more details can be found in the implementations of
  +\texttt{pth\_spawn} and \texttt{pth\_exit} in \texttt{pth\_lib.c} of
  +\textit{GNU Pth} \cite{pth})
  +
  +\mypar{The sigstack(2) Fallback Situation}
  +
  +\noindent
  +Not all platforms provide the standardized \texttt{sigaltstack}(2).
  +Instead they at least provide the \textit{4.2BSD} ancestor
  +function \texttt{sigstack}(2). But one cannot trivially replace
  +\texttt{sigaltstack}(2) by \texttt{sigstack}(2) in this situation,
  +because in contrast to \texttt{sigaltstack}(2), the old
  +\texttt{sigstack}(2) does not automatically handle the machine dependent
  +direction of stack growth.
  +
  +Instead, the caller has to know the direction and always call
  +\texttt{sigstack}(2) with the address of the bottom of the stack. So, in
  +a real-world implementation one first has to determine the direction of
  +stack growth in order to use \texttt{sigstack}(2) as a replacement for
  +\texttt{sigaltstack}(2). Fortunately this is easier than it seems on the
  +first look (for details see the macros \texttt{AC\_CHECK\_STACKGROWTH}
  +and \texttt{AC\_CHECK\_STACKSETUP} in file \texttt{aclocal.m4} from
  +\textit{GNU Pth} \cite{pth}). Alternatively if one can afford to waste
  +memory, one can use an elegant trick: to set up a stack of size $N$,
  +one allocates a chunk of memory (starting at address $A$) of size
  +$N\times2$ and then calls \texttt{sigstack}(2) with the parameters
  +\textit{sk\_addr=}$A+N$ and \textit{sk\_size=}$N$, \textit{i.e.}, one
  +specifies the middle of the memory chunk as the stack base.
  +
  +\mypar{The Blind Alley of Brain-Dead Platforms}
  +
  +\noindent
  +The world would not be as funny as it is, if really all Unix platforms
  +would be fair to us. Instead, currently at least one platform exists
  +which plays unfair: unfortunately, ancient versions of the popular
  +\textit{GNU/Linux}. Although we will discover that it both provides
  +\texttt{sigaltstack}(2) and \texttt{sigstack}(2), our approach won't
  +work on \textit{Linux} kernels prior to version 2.2 and \textit{glibc}
  +prior to version 2.1.
  +
  +Why? Because its \textit{libc} provides only stubs of these functions
  +which always return just \texttt{-1} with \texttt{errno} set
  +to \texttt{ENOSYS}. So, this definitely means that our nifty
  +algorithm is useless there, because its central point \textit{is}
  +\texttt{sigaltstack}(2)/\texttt{sigstack}(2). Nevertheless we do not
  +need to give up. At least not, if we, for a single brain-dead platform,
  +accept to break our general goal of not using any platform dependent
  +code.
  +
  +So, what can we actually do here? All we have to do, is to fiddle
  +around a little bit with the machine-dependent \texttt{jmp\_buf}
  +ingredients (by poking around in \texttt{setjmp.h} or by disassembling
  +\texttt{longjmp}(3) in the debugger). Usually one just has to do a
  +\texttt{setjmp}(3) to get an initial state in the \texttt{jmp\_buf}
  +structure and then manually adjust two of its fields: the program
  +counter (usually a structure member with ``\texttt{pc}'' in the name)
  +and the stack pointer (usually a structure member with ``\texttt{sp}''
  +in the name).
  +
  +That is all and can be acceptable for a real-world implementation which
  +really wants to cover mostly \textit{all} platforms -- at least as long
  +as the special treatment is needed just for one or two platforms. But
  +one has to keep in mind that it at least breaks one of the initial goals
  +and has to be treated as a last chance solution.
  +
  +\mypar{Functions sigsetjmp(3) and siglongjmp(3)}
  +
  +One certainly wants the \textit{POSIX} thread semantics where a
  +thread has its own signal mask. As already mentioned, on some
  +platforms \texttt{setjmp}(3) and \texttt{longjmp}(3) do not provide
  +this and instead one has to explicitly call \texttt{sigsetjmp}(3)
  +and \texttt{siglongjmp}(3) instead. There is only one snare:
  +on some platforms \texttt{sigsetjmp}(3)/\texttt{siglongjmp}(3)
  +save also information about the alternate signals stack. So
  +here one has to make sure that although the thread dispatching
  +later uses \texttt{sigsetjmp}(3)/\texttt{siglongjmp}(3), the
  +thread creation step in \texttt{mctx\_create} still uses plain
  +\texttt{setjmp}(3)/\texttt{longjmp}(3) calls for the trampoline
  +trick. One just has to be careful because the \texttt{jmp\_buf}
  +and \texttt{sigjmp\_buf} structures cannot be mixed between
  +calls to the \texttt{sigsetjmp}(3)/\texttt{siglongjmp}(3) and
  +\texttt{setjmp}(3)/\texttt{longjmp}(3).
  +
  +\mypar{More Machine Context Ingredients}
  +
  +\noindent
  +Finally, for a real-world threading implementation one usually wants to
  +put more state into the machine context structure \texttt{mctx\_t}.
  +For instance to fulfill more \textit{POSIX} threading semantics, it is
  +reasonable to also save and restore the global \texttt{errno} variable.
  +All this can be easily achieved by extending the \texttt{mctx\_t}
  +structure with additional fields and by making the \texttt{mctx\_save},
  +\texttt{mctx\_restore} and \texttt{mctx\_switch} functions to be aware
  +of them.
  +
  +\subsection{Related Work}
  +
  +Beside \textit{GNU Pth} \cite{pth}, there are other multithreading
  +libraries which use variants of the presented approach for implementing
  +machine contexts in user-space. Most notably there are \textsc{Robert
  +S. Thau}'s \textit{Really Simple Threads} (\textit{rsthreads},
  +\cite{rsthreads}) package which uses \texttt{sigaltstack}(2) in
  +a very similar way for thread creation, and \textsc{Kota Abe}'s
  +\textit{Portable Thread Library} (\textit{PTL}, \cite{ptl2}) which uses
  +a \texttt{sigstack}(2) approach. But because their approaches handle
  +the signal handler scope differently, they are not able to achieve the
  +same amount of portability and this way do not work for instance on some
  +System-V-derived platforms.
  +
  +\subsection{Summary \& Availability}
  +
  +We have presented a pragmatic and mostly portable fallback approach
  +for implementing the machine context for user-space threads, based
  +entirely on Unix system and ANSI-C language facilities. The approach
  +was successfully tested in practice on a wide range of Unix flavors by
  +\textit{GNU Pth} and should also adapt to the remaining Unix platforms
  +as long as they adhere to the relevant standards.
  +
  +The \textit{GNU Pth} package is distributed under the
  +GNU Library General Public License (LGPL 2.1) and freely
  +available from \textit{http://www.gnu.org/software/pth/} and
  +\textit{ftp://ftp.gnu.org/gnu/pth/}.
  +
  +\subsection{Acknowledgements}
  +
  +I would like to thank \textsc{Robert S. Thau}, \textsc{David Butenhof},
  +\textsc{Martin Kraemer}, \textsc{Eric Newton} and \textsc{Bruno Haible}
  +for their comments which helped to write the initial version of this
  +paper. Additionally, credit has to be given to \textsc{Christopher
  +Small} and the USENIX reviewers for their invaluable feedback which
  +allowed this paper to be extended, cleaned up and finally published
  +at the USENIX Annual Technical Conference 2000. Finally, thanks
  +go to all users of \textit{GNU Pth} for their feedback on the
  +implementation, which helped in fine-tuning the presented approach.
  +\hfill [\textsf{\small rse}]
  +
  +{\small%\baselineskip=10pt
  +\begin{thebibliography}{XX}
  +
  +\bibitem{iso}
  +        \textit{POSIX 1003.1c Threading},
  +        IEEE POSIX 1003.1c-1995, ISO/IEC 9945-1:1996
  +
  +\bibitem{co1}
  +        \textsc{M.E. Conway}: \textit{Design of a separable transition-diagram
  +        compiler.}, Comm. ACM 6:7, 1963, p.396-408
  +
  +\bibitem{co2}
  +        \textsc{E.W. Dijkstra}: \textit{Co-operating sequential processes}, in
  +        F. Genuys (Ed.), \textit{Programming Languages}, NATO Advanced Study
  +        Institute, Academic Press, London, 1965, p.42-112.
  +
  +\bibitem{nbf}
  +        \textsc{B. Nichols, D. Buttlar, J.P. Farrel}: \textit{Pthreads
  +        Programming - A POSIX Standard for Better Multiprocessing}, 
  +        O'Reilly, 1996; ISBN 1-56592-115-1
  +
  +\bibitem{lbe}
  +        \textsc{B. Lewis, D. J. Berg}: 
  +        \textit{Threads Primer - A Guide To Multithreaded Programming}, 
  +        Prentice Hall, 1996; ISBN 0-13-443698-9
  +
  +\bibitem{ndi}
  +        \textsc{S. J. Norton, M. D. Dipasquale}:
  +        \textit{Thread Time - The Multithreaded Programming Guide},
  +        Prentice Hall, 1997; ISBN 0-13-190067-6
  +
  +\bibitem{drb}
  +        \textsc{D. R. Butenhof}:
  +        \textit{Programming with POSIX Threads},
  +        Addison Wesley, 1997;
  +        ISBN 0-201-63392-2
  +
  +\bibitem{spr}
  +        \textsc{S. Prasad}:
  +        \textit{Multithreading Programming Techniques},
  +        McGraw-Hill, 1996;
  +        ISBN 0-079-12250-7 
  +
  +\bibitem{kss}
  +        \textsc{S. Kleinman, B. Smalders, D. Shah}:
  +        \textit{Programming with Threads},
  +        Prentice Hall, 1995;
  +        ISBN 0-131-72389-8
  +
  +\bibitem{cjn}
  +        \textsc{C.J. Northrup}:
  +        \textit{Programming With Unix Threads},
  +        John Wiley \& Sons, 1996;
  +        ISBN 0-471-13751-0
  +
  +\bibitem{bmv}
  +        \textsc{P. Barton-Davis, D. McNamee, R. Vaswani, E. Lazowska}:
  +        \textit{Adding Scheduler Activations to Mach 3.0},
  +        University of Washington, 1992;
  +        Technical Report 92-08-03
  +
  +\bibitem{lwp}
  +        \textsc{D. Stein, D. Shah}: \textit{Implementing Lightwight Threads}, 
  +        SunSoft Inc., 1992 (published at USENIX'92). 
  +
  +\bibitem{aup}
  +        \textsc{W.R.Stevens}: \textit{Advanced Programming in
  +        the Unix Environment}, Addison-Wesley, 1992; ISBN 0-201-56317-7
  +
  +\bibitem{posix}
  +        \textsc{D. Lewine}: \textit{POSIX Programmer's Guide: Writing Portable
  +        Unix Programs}, O'Reilly \& Associates,Inc., 1994; ISBN 0-937175-73-0
  +
  +\bibitem{osfaq}
  +        \textsc{Bryan O'Sullivan}: \textit{Frequently asked questions for
  +        comp.os.research}, 1995; http://www.serpentine.com/\verb|~|bos/os-faq/,
  +        ftp://rtfm.mit.edu/pub/usenet/comp.os\-.re\-search/
  +
  +\bibitem{tfaq1}
  +        \textsc{Sun Microsystems, Inc}: \textit{Threads Frequently Asked Questions},
  +        1995, http://www\-.sun\-.com/\-workshop/\-threads/\-faq.html
  +
  +\bibitem{tfaq2}
  +        \textsc{Bryan O'Sullivan}: \textit{Frequently asked questions for
  +        comp.programming.threads}, 1997;
  +        http://www.serpentine.com/\verb|~|bos/threads-faq/.
  +
  +\bibitem{tfaq3}
  +        \textsc{Bil Lewis}: \textit{Frequently asked questions for
  +        comp.programming.threads}, 1999;
  +        http://\-www.lambdacs.com/\-newsgroup/\-FAQ\-.html
  +
  +\bibitem{mdg}
  +        \textsc{Numeric Quest Inc}: \textit{Multithreading - Definitions and Guidelines};
  +        1998; http://www.numeric-quest.com/lang/multi-frame.html
  +
  +\bibitem{sus}
  +        \textsc{The Open Group}: \textit{The Sing\-le Unix Speci\-fi\-cation, Version 2 - Threads};
  +        1997; http://www\-.opengroup\-.org/online\-pubs/007908799/xsh/threads.html
  +
  +\bibitem{str}
  +        \textsc{Sun Microsystems Inc}: \textit{SMI Thread Resources}; 
  +        http://www.sun\-.com/\-workshop/\-threads
  +
  +\bibitem{fsu}
  +        \textsc{Frank Mueller}: \textit{FSU pthreads}; 1997;
  +        http://www\-.cs.fsu\-.edu/\-\verb|~|mueller/\-pthreads/
  +
  +\bibitem{mit}
  +        \textsc{Chris Provenzano}: \textit{MIT pthreads}; 1993;
  +        http://www.mit\-.edu/people/\-pro\-ven/\-pthreads.html (old),
  +        http://www\-.human\-factor\-.com/\-pthreads/\-mit-pthreads.html (updated)
  +
  +\bibitem{ptl2}
  +        \textsc{Kota Abe}: \textit{Portable Threading Library} (PTL); 1999;
  +        http://www\-.media\-.osaka-cu\-.ac\-.jp/\verb|~|k-abe/PTL/
  +
  +\bibitem{pth}
  +        \textsc{Ralf S. Engelschall}: \textit{GNU Portable Threads} (Pth); 1999;
  +        http://www\-.gnu\-.org/\-software/\-pth/, ftp://ftp\-.gnu\-.org/\-gnu/\-pth/
  +
  +\bibitem{pcthreads}
  +        \textsc{Michael T. Peterson}: \textit{POSIX and DCE Threads For Linux}
  +        (PCThreads); 1995; http://members.aa\-.net/\verb|~|mtp/PCthreads.html
  +
  +\bibitem{rsthreads}
  +        \textsc{Robert S. Thau}: \textit{Really Simple Threads} (rsthreads); 1996;
  +        ftp://ftp.ai.mit.edu/pub/rst/
  +
  +\bibitem{uthread}
  +        \textsc{John Birrell}: \textit{FreeBSD uthreads}; 1998;
  +        ftp://ftp.freebsd\-.org/pub/FreeBSD/\-FreeBSD-current/src/lib/libc\_r/uthread/
  +
  +\bibitem{linuxthreads}
  +        \textsc{Xavier Leroy}: \textit{The LinuxThreads library}; 1999;
  +        http://\-pauillac\-.inria\-.fr/\verb|~|xleroy/\-linux\-threads/
  +
  +\bibitem{aix}
  +        \textsc{IBM}: \textit{AIX Version 4.3 General Programming Concepts:
  +        Writing and Debugging Programs; Understanding Threads}; 1998;
  +        http://www\-.rs6000\-.ibm\-.com/\-doc\_link/\-en\_US/\-a\_doc\_lib/\-aixprggd/\-genprogc/\-understanding\-\_threads\-.htm
  +
  +\bibitem{nspr}
  +        \textit{Netscape Portable Runtime} (NSPR);
  +        http://\-www.mozilla.org/\-docs/\-refList/refNSPR/,
  +        http://\-lxr.mozilla.org/\-seamonkey/\-source/nsprpub/
  +
  +\bibitem{smcb}
  +        \textsc{Ralf S. Engelschall}: \textit{Simple Machine Context Benchmark}; 2000;
  +        http://\-www.gnu.org\-/software/\-pth\-/smcb.tar.gz
  +
  +\end{thebibliography}
  +}
  +
  +\end{multicols}
  +
  +\end{document}
  +
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jun 12 20:04:52 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id BB83C75292A; Mon, 12 Jun 2006 20:04:52 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog
Message-Id: <20060612180452.BB83C75292A@mail.ossp.org>
Date: Mon, 12 Jun 2006 20:04:52 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Jun-2006 20:04:52
  Branch: HEAD                             Handle: 2006061219045200

  Modified files:
    ossp-pkg/pth            ChangeLog

  Log:
    ops, next will be 2.0.8

  Summary:
    Revision    Changes     Path
    1.647       +1  -1      ossp-pkg/pth/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.646 -r1.647 ChangeLog
  --- ossp-pkg/pth/ChangeLog	12 Jun 2006 18:02:51 -0000	1.646
  +++ ossp-pkg/pth/ChangeLog	12 Jun 2006 18:04:52 -0000	1.647
  @@ -19,7 +19,7 @@
        / __/ | |_| |
     __|_____(_)___/_________________________________________________________
                     
  -  Changes between 2.0.7 and 2.0.9 (07-Jun-2006 to 12-Jun-2006)
  +  Changes between 2.0.7 and 2.0.8 (07-Jun-2006 to 12-Jun-2006)
   
      *) Added LaTeX sources of USENIX paper (rse-pmt.tex, rse-pmt.fig)
         to source tree and add Makefile targets for re-generating outputs
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jul 20 10:13:57 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 9BCBE7531A0; Thu, 20 Jul 2006 10:13:57 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ ChangeLog
Message-Id: <20060720081357.9BCBE7531A0@mail.ossp.org>
Date: Thu, 20 Jul 2006 10:13:57 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Jul-2006 10:13:57
  Branch: HEAD                             Handle: 2006072009135700

  Modified files:
    ossp-pkg/shiela         ChangeLog

  Log:
    Adjust copyright messages for new year 2006.

  Summary:
    Revision    Changes     Path
    1.57        +5  -0      ossp-pkg/shiela/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.56 -r1.57 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	3 Oct 2005 12:43:44 -0000	1.56
  +++ ossp-pkg/shiela/ChangeLog	20 Jul 2006 08:13:57 -0000	1.57
  @@ -9,6 +9,11 @@
   
     ChangeLog
   
  +  Changes between 1.1.6 and 1.1.7 (03-Oct-2005 to 20-Jul-2006):
  +
  +   *) Adjust copyright messages for new year 2006.
  +      [Ralf S. Engelschall]
  +
     Changes between 1.1.5 and 1.1.6 (12-Jan-2005 to 03-Oct-2005):
      
      *) Upgraded build environment to GNU shtool 2.0.3
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jul 20 10:17:12 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id E970075347B; Thu, 20 Jul 2006 10:17:11 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ Makefile.in README VERSION configure.ac d...
Message-Id: <20060720081711.E970075347B@mail.ossp.org>
Date: Thu, 20 Jul 2006 10:17:11 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Jul-2006 10:17:11
  Branch: HEAD                             Handle: 2006072009171001

  Modified files:
    ossp-pkg/shiela         Makefile.in README VERSION configure.ac
                            devtool.conf shiela-install.pod shiela-install.sh
                            shiela-test.sh shiela.pl shiela.pod

  Log:
    Adjust copyright messages for new year 2006 and upgrade build
    environment.

  Summary:
    Revision    Changes     Path
    1.10        +3  -2      ossp-pkg/shiela/Makefile.in
    1.17        +2  -2      ossp-pkg/shiela/README
    1.19        +1  -1      ossp-pkg/shiela/VERSION
    1.5         +4  -4      ossp-pkg/shiela/configure.ac
    1.14        +2  -2      ossp-pkg/shiela/devtool.conf
    1.27        +2  -2      ossp-pkg/shiela/shiela-install.pod
    1.36        +3  -3      ossp-pkg/shiela/shiela-install.sh
    1.5         +2  -2      ossp-pkg/shiela/shiela-test.sh
    1.71        +3  -3      ossp-pkg/shiela/shiela.pl
    1.25        +2  -2      ossp-pkg/shiela/shiela.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 Makefile.in
  --- ossp-pkg/shiela/Makefile.in	12 Jan 2005 20:46:12 -0000	1.9
  +++ ossp-pkg/shiela/Makefile.in	20 Jul 2006 08:17:10 -0000	1.10
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP shiela - CVS Access Control and Logging Facility
  -##  Copyright (c) 2000-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2000-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2000-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2006 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP shiela, an access control and logging
   ##  facility for Concurrent Versions System (CVS) repositories
  @@ -41,6 +41,7 @@
   libdir      = @libdir@
   includedir  = @includedir@
   mandir      = @mandir@
  +datarootdir = @datarootdir@
   
   DESTDIR     =
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/README
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 README
  --- ossp-pkg/shiela/README	12 Jan 2005 20:46:13 -0000	1.16
  +++ ossp-pkg/shiela/README	20 Jul 2006 08:17:10 -0000	1.17
  @@ -21,8 +21,8 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2000-2005 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2000-2005 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2000-2006 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2000-2006 The OSSP Project <http://www.ossp.org/>
   
     This file is part of OSSP shiela, an access control and logging
     facility for Concurrent Versions System (CVS) repositories
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/VERSION
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 VERSION
  --- ossp-pkg/shiela/VERSION	3 Oct 2005 12:43:44 -0000	1.18
  +++ ossp-pkg/shiela/VERSION	20 Jul 2006 08:17:10 -0000	1.19
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP shiela (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP shiela, Version 1.1.6 (03-Oct-2005)
  +  This is OSSP shiela, Version 1.1.7 (20-Jul-2006)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/configure.ac
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 configure.ac
  --- ossp-pkg/shiela/configure.ac	12 Jan 2005 20:46:13 -0000	1.4
  +++ ossp-pkg/shiela/configure.ac	20 Jul 2006 08:17:10 -0000	1.5
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP shiela - CVS Access Control and Logging Facility
  -##  Copyright (c) 2000-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2000-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2000-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2006 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP shiela, an access control and logging
   ##  facility for Concurrent Versions System (CVS) repositories
  @@ -30,8 +30,8 @@
   
   V=`./shtool version -ltxt -dlong VERSION`
   ./shtool echo -e "Configuring %BOSSP shiela%b, Version %B${V}%b"
  -echo "Copyright (c) 2000-2005 Ralf S. Engelschall <rse@engelschall.com>"
  -echo "Copyright (c) 2000-2005 The OSSP Project <http://www.ossp.org/>"
  +echo "Copyright (c) 2000-2006 Ralf S. Engelschall <rse@engelschall.com>"
  +echo "Copyright (c) 2000-2006 The OSSP Project <http://www.ossp.org/>"
   
   AC_MSG_CHECKING(for Perl program)
   AC_ARG_WITH(perl,dnl
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 devtool.conf
  --- ossp-pkg/shiela/devtool.conf	3 Oct 2005 12:43:44 -0000	1.13
  +++ ossp-pkg/shiela/devtool.conf	20 Jul 2006 08:17:11 -0000	1.14
  @@ -3,8 +3,8 @@
   ##
   
   %autogen
  -    @autogen shtool   2.0.3 "2.0.*" all
  -    @autogen autoconf 2.59  "2.5[3-9]*"
  +    @autogen shtool   2.0.6 "2.0.*" all
  +    @autogen autoconf 2.60  "2.6*"
   
   %autoclean
       @autoclean shtool
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-install.pod
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 shiela-install.pod
  --- ossp-pkg/shiela/shiela-install.pod	12 Jan 2005 20:46:13 -0000	1.26
  +++ ossp-pkg/shiela/shiela-install.pod	20 Jul 2006 08:17:11 -0000	1.27
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP shiela - CVS Access Control and Logging Facility
  -##  Copyright (c) 2000-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2000-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2000-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2006 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP shiela, an access control and logging
   ##  facility for Concurrent Versions System (CVS) repositories
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-install.sh
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 shiela-install.sh
  --- ossp-pkg/shiela/shiela-install.sh	3 Oct 2005 12:43:44 -0000	1.35
  +++ ossp-pkg/shiela/shiela-install.sh	20 Jul 2006 08:17:11 -0000	1.36
  @@ -1,8 +1,8 @@
   #!@SH@
   ##
   ##  OSSP shiela - CVS Access Control and Logging Facility
  -##  Copyright (c) 2000-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2000-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2000-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2006 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP shiela, an access control and logging
   ##  facility for Concurrent Versions System (CVS) repositories
  @@ -26,7 +26,7 @@
   ##  shiela-install.sh: repository install program (syntax: Bourne-Shell)
   ##
   
  -version="1.1.6"
  +version="1.1.7"
   
   prefix="@prefix@"
   bindir="@bindir@"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela-test.sh
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 shiela-test.sh
  --- ossp-pkg/shiela/shiela-test.sh	12 Jan 2005 20:46:13 -0000	1.4
  +++ ossp-pkg/shiela/shiela-test.sh	20 Jul 2006 08:17:11 -0000	1.5
  @@ -1,8 +1,8 @@
   #!/bin/sh
   ##
   ##  OSSP shiela - CVS Access Control and Logging Facility
  -##  Copyright (c) 2000-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2000-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2000-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2006 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP shiela, an access control and logging
   ##  facility for Concurrent Versions System (CVS) repositories
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================================
  $ cvs diff -u -r1.70 -r1.71 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	3 Oct 2005 12:43:44 -0000	1.70
  +++ ossp-pkg/shiela/shiela.pl	20 Jul 2006 08:17:11 -0000	1.71
  @@ -1,8 +1,8 @@
   #!@PERL@ -w
   ##
   ##  OSSP shiela - CVS Access Control and Logging Facility
  -##  Copyright (c) 2000-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2000-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2000-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2006 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP shiela, an access control and logging
   ##  facility for Concurrent Versions System (CVS) repositories
  @@ -26,7 +26,7 @@
   ##  shiela.pl: control program (syntax: Perl)
   ##
   
  -my $version = '1.1.6';
  +my $version = '1.1.7';
   
   require 5.005;
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pod
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 shiela.pod
  --- ossp-pkg/shiela/shiela.pod	12 Jan 2005 20:46:14 -0000	1.24
  +++ ossp-pkg/shiela/shiela.pod	20 Jul 2006 08:17:11 -0000	1.25
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP shiela - CVS Access Control and Logging Facility
  -##  Copyright (c) 2000-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2000-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2000-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2006 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP shiela, an access control and logging
   ##  facility for Concurrent Versions System (CVS) repositories
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jul 20 10:18:01 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id CDDF075349C; Thu, 20 Jul 2006 10:18:01 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ ChangeLog
Message-Id: <20060720081801.CDDF075349C@mail.ossp.org>
Date: Thu, 20 Jul 2006 10:18:01 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Jul-2006 10:18:01
  Branch: HEAD                             Handle: 2006072009180100

  Modified files:
    ossp-pkg/shiela         ChangeLog

  Log:
    remember build env update

  Summary:
    Revision    Changes     Path
    1.58        +4  -0      ossp-pkg/shiela/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.57 -r1.58 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	20 Jul 2006 08:13:57 -0000	1.57
  +++ ossp-pkg/shiela/ChangeLog	20 Jul 2006 08:18:01 -0000	1.58
  @@ -11,6 +11,10 @@
   
     Changes between 1.1.6 and 1.1.7 (03-Oct-2005 to 20-Jul-2006):
   
  +   *) Upgraded build environment to GNU shtool 2.0.6 and
  +      GNU autoconf 2.60
  +      [Ralf S. Engelschall]
  +
      *) Adjust copyright messages for new year 2006.
         [Ralf S. Engelschall]
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jul 20 19:04:29 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 19F077534A6; Thu, 20 Jul 2006 19:04:29 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog devtool.conf
Message-Id: <20060720170429.19F077534A6@mail.ossp.org>
Date: Thu, 20 Jul 2006 19:04:29 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Jul-2006 19:04:29
  Branch: HEAD                             Handle: 2006072018042800

  Modified files:
    ossp-pkg/uuid           ChangeLog devtool.conf

  Log:
    upgrade to GNU autoconf 2.60

  Summary:
    Revision    Changes     Path
    1.119       +1  -1      ossp-pkg/uuid/ChangeLog
    1.28        +1  -1      ossp-pkg/uuid/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.118 -r1.119 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	11 May 2006 18:32:07 -0000	1.118
  +++ ossp-pkg/uuid/ChangeLog	20 Jul 2006 17:04:28 -0000	1.119
  @@ -28,7 +28,7 @@
        for both importing and exporting in C/C++/Perl/PHP APIs.
        [Ralf S. Engelschall]
      
  -   o Upgrade build environment to GNU shtool 2.0.6
  +   o Upgrade build environment to GNU shtool 2.0.6 and GNU autoconf 2.60
        [Ralf S. Engelschall]
   
      o Added an "OVERVIEW" file which tries to give the "big picture"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 devtool.conf
  --- ossp-pkg/uuid/devtool.conf	10 May 2006 09:16:26 -0000	1.27
  +++ ossp-pkg/uuid/devtool.conf	20 Jul 2006 17:04:28 -0000	1.28
  @@ -5,7 +5,7 @@
   %autogen
       @autogen shtool   2.0.6  "2.0.*" all
       @autogen libtool  1.5.22 "1.5*"
  -    @autogen autoconf 2.59   "2.5[3-9]*"
  +    @autogen autoconf 2.60   "2.6[0-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jul 20 19:21:17 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 76B717534A6; Thu, 20 Jul 2006 19:21:17 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog THANKS ossp-pkg/uuid/pgsql/ uuid....
Message-Id: <20060720172117.76B717534A6@mail.ossp.org>
Date: Thu, 20 Jul 2006 19:21:17 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Jul-2006 19:21:17
  Branch: HEAD                             Handle: 2006072018211601

  Modified files:
    ossp-pkg/uuid           ChangeLog THANKS
    ossp-pkg/uuid/pgsql     uuid.c

  Log:
    Numerious fixed to the error handling in the PostgreSQL bindings.
    
    Submitted by: Neil Conway <neilc@samurai.com>

  Summary:
    Revision    Changes     Path
    1.120       +3  -0      ossp-pkg/uuid/ChangeLog
    1.10        +1  -0      ossp-pkg/uuid/THANKS
    1.5         +39 -96     ossp-pkg/uuid/pgsql/uuid.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.119 -r1.120 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	20 Jul 2006 17:04:28 -0000	1.119
  +++ ossp-pkg/uuid/ChangeLog	20 Jul 2006 17:21:16 -0000	1.120
  @@ -12,6 +12,9 @@
     For a more brief summary please have a look at the NEWS file.
   
     Changes between 1.4.2 and 1.5.0 (13-Mar-2006 to XX-May-2006)
  +   
  +   o Numerious fixed to the error handling in the PostgreSQL bindings.
  +     [Neil Conway <neilc@samurai.com>]
   
      o Add Hash indexing support UUID data type of PostgreSQL bindings.
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/THANKS
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 THANKS
  --- ossp-pkg/uuid/THANKS	11 May 2006 17:44:42 -0000	1.9
  +++ ossp-pkg/uuid/THANKS	20 Jul 2006 17:21:17 -0000	1.10
  @@ -12,6 +12,7 @@
     bugfixes, hints, gave platform feedback, etc. (in alphabetical order):
   
       o  Matthias Andree             <matthias.andree@gmx.de>
  +    o  Neil Conway                 <neilc@samurai.com>
       o  M. Daniel                   <mdaniel@scdi.com>
       o  Fuyuki                      <fuyuki@nigredo.org>
       o  Thomas Lotterer             <thomas@lotterer.net>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/pgsql/uuid.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 uuid.c
  --- ossp-pkg/uuid/pgsql/uuid.c	11 May 2006 18:32:07 -0000	1.4
  +++ ossp-pkg/uuid/pgsql/uuid.c	20 Jul 2006 17:21:17 -0000	1.5
  @@ -73,45 +73,35 @@
       size_t len;
   
       /* sanity check input argument */
  -    if ((uuid_str = PG_GETARG_CSTRING(0)) == NULL) {
  +    if ((uuid_str = PG_GETARG_CSTRING(0)) == NULL)
           ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
                   errmsg("invalid UUID string")));
  -        PG_RETURN_NULL();
  -    }
  -    if ((len = strlen(uuid_str)) != UUID_LEN_STR) {
  +    if ((len = strlen(uuid_str)) != UUID_LEN_STR)
           ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
                   errmsg("invalid UUID string length %d (expected %d)", len, UUID_LEN_STR)));
  -        PG_RETURN_NULL();
  -    }
   
       /* import as string representation */
  -    if ((rc = uuid_create(&uuid)) != UUID_RC_OK) {
  +    if ((rc = uuid_create(&uuid)) != UUID_RC_OK)
           ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
                   errmsg("failed to create UUID object: %s", uuid_error(rc))));
  -        PG_RETURN_NULL();
  -    }
       if ((rc = uuid_import(uuid, UUID_FMT_STR, uuid_str, len)) != UUID_RC_OK) {
  +        uuid_destroy(uuid);
           ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
                   errmsg("failed to import UUID string representation: %s", uuid_error(rc))));
  -        uuid_destroy(uuid);
  -        PG_RETURN_NULL();
       }
   
       /* export as binary representation */
       if ((uuid_datum = (uuid_datum_t *)palloc(sizeof(uuid_datum_t))) == NULL) {
  +        uuid_destroy(uuid);
           ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
                   errmsg("failed to allocate UUID datum")));
  -        uuid_destroy(uuid);
  -        PG_RETURN_NULL();
       }
       vp = &(uuid_datum->uuid_bin);
       len = sizeof(uuid_datum->uuid_bin);
       if ((rc = uuid_export(uuid, UUID_FMT_BIN, &vp, &len)) != UUID_RC_OK) {
  +        uuid_destroy(uuid);
           ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
                   errmsg("failed to export UUID binary representation: %s", uuid_error(rc))));
  -        uuid_destroy(uuid);
  -        pfree(uuid_datum);
  -        PG_RETURN_NULL();
       }
       uuid_destroy(uuid);
   
  @@ -131,39 +121,31 @@
       size_t len;
   
       /* sanity check input argument */
  -    if ((uuid_datum = (uuid_datum_t *)PG_GETARG_POINTER(0)) == NULL) {
  +    if ((uuid_datum = (uuid_datum_t *)PG_GETARG_POINTER(0)) == NULL)
           ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
                   errmsg("invalid UUID datum")));
  -        PG_RETURN_NULL();
  -    }
   
       /* import as binary representation */
  -    if ((rc = uuid_create(&uuid)) != UUID_RC_OK) {
  +    if ((rc = uuid_create(&uuid)) != UUID_RC_OK)
           ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
                   errmsg("failed to create UUID object: %s", uuid_error(rc))));
  -        PG_RETURN_NULL();
  -    }
       if ((rc = uuid_import(uuid, UUID_FMT_BIN, uuid_datum->uuid_bin, sizeof(uuid_datum->uuid_bin))) != UUID_RC_OK) {
  +        uuid_destroy(uuid);
           ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
                   errmsg("failed to import UUID binary representation: %s", uuid_error(rc))));
  -        uuid_destroy(uuid);
  -        PG_RETURN_NULL();
       }
   
       /* export as string representation */
       len = UUID_LEN_STR+1;
       if ((vp = uuid_str = (char *)palloc(len)) == NULL) {
  +        uuid_destroy(uuid);
           ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
                   errmsg("failed to allocate UUID string")));
  -        uuid_destroy(uuid);
  -        PG_RETURN_NULL();
       }
       if ((rc = uuid_export(uuid, UUID_FMT_STR, &vp, &len)) != UUID_RC_OK) {
  +        uuid_destroy(uuid);
           ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
                   errmsg("failed to export UUID string representation: %s", uuid_error(rc))));
  -        uuid_destroy(uuid);
  -        pfree(uuid_datum);
  -        PG_RETURN_NULL();
       }
       uuid_destroy(uuid);
   
  @@ -179,23 +161,17 @@
       uuid_datum_t *uuid_datum;
   
       /* sanity check input argument */
  -    if ((uuid_internal = (StringInfo)PG_GETARG_POINTER(0)) == NULL) {
  +    if ((uuid_internal = (StringInfo)PG_GETARG_POINTER(0)) == NULL)
           ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
                   errmsg("invalid UUID StringInfo object")));
  -        PG_RETURN_NULL();
  -    }
  -    if (uuid_internal->len != UUID_LEN_BIN) {
  +    if (uuid_internal->len != UUID_LEN_BIN)
           ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
                   errmsg("invalid UUID binary length %d (expected %d)", uuid_internal->len, UUID_LEN_BIN)));
  -        PG_RETURN_NULL();
  -    }
   
       /* import as binary representation */
  -    if ((uuid_datum = (uuid_datum_t *)palloc(sizeof(uuid_datum_t))) == NULL) {
  +    if ((uuid_datum = (uuid_datum_t *)palloc(sizeof(uuid_datum_t))) == NULL)
           ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
                   errmsg("failed to allocate UUID datum")));
  -        PG_RETURN_NULL();
  -    }
       memcpy(uuid_datum->uuid_bin, uuid_internal->data, uuid_internal->len);
   
       /* return UUID datum */
  @@ -210,18 +186,14 @@
       bytea *uuid_bytea;
   
       /* sanity check input argument */
  -    if ((uuid_datum = (uuid_datum_t *)PG_GETARG_POINTER(0)) == NULL) {
  +    if ((uuid_datum = (uuid_datum_t *)PG_GETARG_POINTER(0)) == NULL)
           ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
                   errmsg("invalid UUID datum")));
  -        PG_RETURN_NULL();
  -    }
   
       /* export as binary representation */
  -    if ((uuid_bytea = (bytea *)palloc(VARHDRSZ + UUID_LEN_BIN)) == NULL) {
  +    if ((uuid_bytea = (bytea *)palloc(VARHDRSZ + UUID_LEN_BIN)) == NULL)
           ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
                   errmsg("failed to allocate UUID bytea")));
  -        PG_RETURN_NULL();
  -    }
       uuid_bytea->vl_len = VARHDRSZ + UUID_LEN_BIN;
       memcpy(uuid_bytea->vl_dat, uuid_datum->uuid_bin, UUID_LEN_BIN);
   
  @@ -237,7 +209,7 @@
       uuid_t *uuid_ns;
       uuid_rc_t rc;
       int version;
  -    unsigned int mode;
  +    unsigned int mode = 0;
       uuid_datum_t *uuid_datum;
       char *str_ns;
       char *str_name;
  @@ -251,80 +223,61 @@
           case 3: mode = UUID_MAKE_V3; break;
           case 4: mode = UUID_MAKE_V4; break;
           case 5: mode = UUID_MAKE_V5; break;
  -        default: {
  +        default:
               ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
                       errmsg("invalid UUID version %d (expected 1, 3, 4 or 5)", version)));
  -            PG_RETURN_NULL();
  -        }
       }
       if (   ((mode & (UUID_MAKE_V1|UUID_MAKE_V4)) && PG_NARGS() != 1)
  -        || ((mode & (UUID_MAKE_V3|UUID_MAKE_V5)) && PG_NARGS() != 3)) {
  +        || ((mode & (UUID_MAKE_V3|UUID_MAKE_V5)) && PG_NARGS() != 3))
           ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
                   errmsg("invalid number (%d) of arguments", PG_NARGS())));
  -        PG_RETURN_NULL();
  -    }
   
       /* make a new UUID */
  -    if ((rc = uuid_create(&uuid)) != UUID_RC_OK) {
  +    if ((rc = uuid_create(&uuid)) != UUID_RC_OK)
           ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
                   errmsg("failed to create UUID object: %s", uuid_error(rc))));
  -        PG_RETURN_NULL();
  -    }
       if (version == 3 || version == 5) {
  -        if ((str_ns = PG_GETARG_CSTRING(1)) == NULL) {
  +        if ((str_ns = PG_GETARG_CSTRING(1)) == NULL)
               ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
                       errmsg("invalid namespace UUID string")));
  -            PG_RETURN_NULL();
  -        }
  -        if ((str_name = PG_GETARG_CSTRING(2)) == NULL) {
  +        if ((str_name = PG_GETARG_CSTRING(2)) == NULL)
               ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
                       errmsg("invalid name string")));
  -            PG_RETURN_NULL();
  -        }
  -        if ((rc = uuid_create(&uuid_ns)) != UUID_RC_OK) {
  +        if ((rc = uuid_create(&uuid_ns)) != UUID_RC_OK)
               ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
                       errmsg("failed to create UUID namespace object: %s", uuid_error(rc))));
  -            PG_RETURN_NULL();
  -        }
           if ((rc = uuid_load(uuid_ns, str_ns)) != UUID_RC_OK) {
  -            if ((rc = uuid_import(uuid_ns, UUID_FMT_STR, str_ns, strlen(str_ns))) != UUID_RC_OK) {
  +            if ((rc = uuid_import(uuid_ns, UUID_FMT_STR, str_ns, strlen(str_ns))) != UUID_RC_OK)
                   ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
                           errmsg("failed to import UUID namespace: %s", uuid_error(rc))));
  -                PG_RETURN_NULL();
  -            }
           }
           if ((rc = uuid_make(uuid, mode, uuid_ns, str_name)) != UUID_RC_OK) {
  +            uuid_destroy(uuid);
               ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
                       errmsg("failed to make v%d UUID: %s", version, uuid_error(rc))));
  -            uuid_destroy(uuid);
  -            PG_RETURN_NULL();
           }
           uuid_destroy(uuid_ns);
       }
       else {
           if ((rc = uuid_make(uuid, mode)) != UUID_RC_OK) {
  +            uuid_destroy(uuid);
               ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
                       errmsg("failed to make v%d UUID: %s", version, uuid_error(rc))));
  -            uuid_destroy(uuid);
  -            PG_RETURN_NULL();
           }
       }
   
       /* export as binary representation */
       if ((uuid_datum = (uuid_datum_t *)palloc(sizeof(uuid_datum_t))) == NULL) {
  +        uuid_destroy(uuid);
           ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
                   errmsg("failed to allocate UUID datum")));
  -        uuid_destroy(uuid);
  -        PG_RETURN_NULL();
       }
       vp = &(uuid_datum->uuid_bin);
       len = sizeof(uuid_datum->uuid_bin);
       if ((rc = uuid_export(uuid, UUID_FMT_BIN, &vp, &len)) != UUID_RC_OK) {
  +        uuid_destroy(uuid);
           ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
                   errmsg("failed to export UUID binary representation: %s", uuid_error(rc))));
  -        uuid_destroy(uuid);
  -        pfree(uuid_datum);
  -        PG_RETURN_NULL();
       }
       uuid_destroy(uuid);
       PG_RETURN_POINTER(uuid_datum);
  @@ -337,11 +290,9 @@
       uuid_datum_t *uuid_datum;
   
       /* sanity check input argument */
  -    if ((uuid_datum = (uuid_datum_t *)PG_GETARG_POINTER(0)) == NULL) {
  +    if ((uuid_datum = (uuid_datum_t *)PG_GETARG_POINTER(0)) == NULL)
           ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
                   errmsg("invalid UUID datum argument")));
  -        PG_RETURN_NULL();
  -    }
   
       /* return hash value of the UUID */
       PG_RETURN_INT32(hash_any(uuid_datum->uuid_bin, sizeof(uuid_datum->uuid_bin)));
  @@ -358,49 +309,41 @@
       int result;
   
       /* sanity check input argument */
  -    if ((uuid_datum1 = (uuid_datum_t *)PG_GETARG_POINTER(0)) == NULL) {
  +    if ((uuid_datum1 = (uuid_datum_t *)PG_GETARG_POINTER(0)) == NULL)
           ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
                   errmsg("invalid first UUID datum argument")));
  -        PG_RETURN_NULL();
  -    }
  -    if ((uuid_datum2 = (uuid_datum_t *)PG_GETARG_POINTER(1)) == NULL) {
  +    if ((uuid_datum2 = (uuid_datum_t *)PG_GETARG_POINTER(1)) == NULL)
           ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
                   errmsg("invalid second UUID datum argument")));
  -        PG_RETURN_NULL();
  -    }
   
       /* load both UUIDs */
  -    if ((rc = uuid_create(&uuid1)) != UUID_RC_OK) {
  +    if ((rc = uuid_create(&uuid1)) != UUID_RC_OK)
           ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
                   errmsg("failed to create UUID object: %s", uuid_error(rc))));
  -        PG_RETURN_NULL();
  -    }
       if ((rc = uuid_create(&uuid2)) != UUID_RC_OK) {
  +        uuid_destroy(uuid1);
           ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
                   errmsg("failed to create UUID object: %s", uuid_error(rc))));
  -        uuid_destroy(uuid1);
  -        PG_RETURN_NULL();
       }
       if ((rc = uuid_import(uuid1, UUID_FMT_BIN, uuid_datum1->uuid_bin, sizeof(uuid_datum1->uuid_bin))) != UUID_RC_OK) {
  -        ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
  -                errmsg("failed to import UUID: %s", uuid_error(rc))));
           uuid_destroy(uuid1);
           uuid_destroy(uuid2);
  -        PG_RETURN_NULL();
  -    }
  -    if ((rc = uuid_import(uuid2, UUID_FMT_BIN, uuid_datum2->uuid_bin, sizeof(uuid_datum2->uuid_bin))) != UUID_RC_OK) {
           ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
                   errmsg("failed to import UUID: %s", uuid_error(rc))));
  +    }
  +    if ((rc = uuid_import(uuid2, UUID_FMT_BIN, uuid_datum2->uuid_bin, sizeof(uuid_datum2->uuid_bin))) != UUID_RC_OK) {
           uuid_destroy(uuid1);
           uuid_destroy(uuid2);
  -        PG_RETURN_NULL();
  +        ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
  +                errmsg("failed to import UUID: %s", uuid_error(rc))));
       }
   
       /* compare UUIDs */
       if ((rc = uuid_compare(uuid1, uuid2, &result)) != UUID_RC_OK) {
           uuid_destroy(uuid1);
           uuid_destroy(uuid2);
  -        PG_RETURN_NULL();
  +        ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
  +                errmsg("failed to compare UUID objects: %s", uuid_error(rc))));
       }
   
       /* cleanup */
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jul 20 19:46:57 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 061EB752903; Thu, 20 Jul 2006 19:46:57 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog
Message-Id: <20060720174657.061EB752903@mail.ossp.org>
Date: Thu, 20 Jul 2006 19:46:57 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Jul-2006 19:46:56
  Branch: HEAD                             Handle: 2006072018465500

  Modified files:
    ossp-pkg/uuid           ChangeLog

  Log:
    fix typo

  Summary:
    Revision    Changes     Path
    1.121       +1  -1      ossp-pkg/uuid/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.120 -r1.121 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	20 Jul 2006 17:21:16 -0000	1.120
  +++ ossp-pkg/uuid/ChangeLog	20 Jul 2006 17:46:55 -0000	1.121
  @@ -13,7 +13,7 @@
   
     Changes between 1.4.2 and 1.5.0 (13-Mar-2006 to XX-May-2006)
      
  -   o Numerious fixed to the error handling in the PostgreSQL bindings.
  +   o Numerous fixed to the error handling in the PostgreSQL bindings.
        [Neil Conway <neilc@samurai.com>]
   
      o Add Hash indexing support UUID data type of PostgreSQL bindings.
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul 21 21:01:38 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id DEC427533F2; Fri, 21 Jul 2006 21:01:37 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.pod
Message-Id: <20060721190137.DEC427533F2@mail.ossp.org>
Date: Fri, 21 Jul 2006 21:01:37 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Jul-2006 21:01:37
  Branch: HEAD                             Handle: 2006072120013700

  Modified files:
    ossp-pkg/uuid           uuid.pod

  Log:
    improve manual page reference

  Summary:
    Revision    Changes     Path
    1.39        +11 -10     ossp-pkg/uuid/uuid.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.38 -r1.39 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	11 May 2006 09:44:16 -0000	1.38
  +++ ossp-pkg/uuid/uuid.pod	21 Jul 2006 19:01:37 -0000	1.39
  @@ -451,12 +451,22 @@
   
   B<A Universally Unique IDentifier (UUID) URN Namespace>,
   P. Leach, M. Mealling, R. Salz,
  -IETF Request for Comments: RFC 4122,
  +IETF RFC 4122,
   July 2005, 32 pages,
   http://www.ietf.org/rfc/rfc4122.txt
   
   =item
   
  +Information Technology -- Open Systems Interconnection (OSI),
  +B<Procedures for the operation of OSI Registration Authorities:
  +Generation and Registration of Universally Unique Identifiers (UUIDs)
  +and their Use as ASN.1 Object Identifier Components>,
  +ISO/IEC 9834-8:2004 / ITU-T Rec. X.667, 2004,
  +December 2004, 25 pages,
  +http://www.itu.int/ITU-T/studygroups/com17/oid/X.667-E.pdf
  +
  +=item
  +
   B<DCE 1.1: Remote Procedure Call>,
   appendix B<Universally Unique Identifier>,
   Open Group Technical Standard
  @@ -475,15 +485,6 @@
   
   =item 
   
  -Information technology -- Open Systems Interconnection (OSI),
  -B<Procedures for the operation of OSI Registration Authorities:
  -Generation and Registration of Universally Unique Identifiers (UUIDs)
  -and their Use as ASN.1 Object Identifier Components>,
  -ISO/IEC 9834-8:2004 / ITU-T Rec. X.667, 2004,
  -December 2004, 25 pages.
  -
  -=item
  -
   B<HTTP Extensions for Distributed Authoring (WebDAV)>,
   section B<6.4.1 Node Field Generation Without the IEEE 802 Address>,
   IETF Request for Comments: RFC 2518,
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jul 23 14:57:17 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 749E275290D; Sun, 23 Jul 2006 14:57:17 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20060723125717.749E275290D@mail.ossp.org>
Date: Sun, 23 Jul 2006 14:57:17 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   23-Jul-2006 14:57:17
  Branch: HEAD                             Handle: 2006072313571601

  Added files:
    ossp-web/pkg/lib/js     .cvsignore index.wml
  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml

  Log:
    release OSSP js 1.6.20060722

  Summary:
    Revision    Changes     Path
    1.152       +1  -0      ossp-web/new/news.txt
    1.123       +3  -0      ossp-web/pkg/lib/index.wml
    1.1         +1  -0      ossp-web/pkg/lib/js/.cvsignore
    1.1         +78 -0      ossp-web/pkg/lib/js/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.151 -r1.152 news.txt
  --- ossp-web/new/news.txt	11 Jun 2006 07:06:26 -0000	1.151
  +++ ossp-web/new/news.txt	23 Jul 2006 12:57:16 -0000	1.152
  @@ -1,3 +1,4 @@
  +22-Jul-2006: Released L<OSSP js> 1.6.20060722
   08-Jun-2006: Released L<GNU pth> 2.0.7
   17-Apr-2006: Released T<GNU shtool> 2.0.6
   13-Mar-2006: Released L<OSSP uuid> 1.4.2
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.122 -r1.123 index.wml
  --- ossp-web/pkg/lib/index.wml	8 Jun 2006 18:17:39 -0000	1.122
  +++ ossp-web/pkg/lib/index.wml	23 Jul 2006 12:57:16 -0000	1.123
  @@ -40,6 +40,9 @@
     <pkg_item name="xds" longname="OSSP xds" type="lib"
               desc="Extensible Data Serialization"
   			done=95 stable=none unstable=0.9.3>
  +  <pkg_item name="js" longname="OSSP js" type="lib"
  +            desc="Mozilla JavaScript Engine"
  +			done=100 stable=none unstable=1.6.20060722>
     <pkg_item name="str" longname="OSSP str" type="lib"
               desc="String Handling"
   			done=95 stable=none unstable=0.9.12>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/js/.cvsignore
  ============================================================================
  $ cvs diff -u -r0 -r1.1 .cvsignore
  --- /dev/null	2006-07-23 14:55:36 +0200
  +++ .cvsignore	2006-07-23 14:57:17 +0200
  @@ -0,0 +1 @@
  +*.html
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/js/index.wml
  ============================================================================
  $ cvs diff -u -r0 -r1.1 index.wml
  --- /dev/null	2006-07-23 14:55:36 +0200
  +++ index.wml	2006-07-23 14:57:17 +0200
  @@ -0,0 +1,78 @@
  +
  +#use wml::ossp area=pkg:lib subarea=js
  +
  +<title>OSSP js</title>
  +
  +<h1>Mozilla JavaScript Engine</h1>
  +
  +<h2>Abstract</h2>
  +
  +OSSP js is a stand-alone distribution of the JavaScript (JS) programming
  +language reference implementation from Mozilla -- aka "JSRef" or
  +"SpiderMonkey". This distribution provides a smart, stand-alone and
  +portable distribution of Mozilla JavaScript through a build environment
  +based on GNU autoconf, GNU libtool and GNU shtool, including support
  +for easy JavaScript build-time feature set selection (ECMA-3, JS-1.5,
  +JS-1.6), optional CLI line editing support, optional "stdio" based File
  +object support and JS/Perl bindings. Additionally, the C API in "libjs"
  +contains both the JavaScript engine and the required Sun math library
  +("fdlibm") and with all internal symbols carefully protected under the
  +"js" namespace. Finally, a js-config(1) utility and a pkg-config(1)
  +specification is provided to allow applications to easily build with the
  +JavaScript C API.
  +
  +<h2>Justification</h2>
  +
  +OSSP js was created because for OSSP and similar pedantic C coding
  +projects a smart, stand-alone, portable, clean, powerful and robust
  +scripting language engine is required. JavaScript is a great programming
  +language and Mozilla JavaScript "SpiderMonkey" definitely is an
  +acceptable clean, powerful and robust implementation. Unfortunately
  +there is just a stand-alone distribution released from time to time
  +by Mozilla and it is far away from really being smart, stand-alone
  +and portable. At least for OSSP it was not acceptable having to
  +tell the community that for small and stand-alone C components like
  +the OSSP components they either have to install the great but large
  +Mozilla Firefox application (where Mozilla JavaScript is included) or
  +have to fiddle around theirself with an older stand-alone JavaScript
  +distribution and its weak build environment. OSSP js combines the best
  +from two worlds: the 1:1 repackaged JavaScript code base from Mozilla
  +and the usual amount of GNU autoconf, GNU libtool and GNU shtool
  +wrappers as always used by OSSP. Additionally, stand-alone ("stdio"
  +instead of NSPR based) File object support was required.
  +
  +<h2>Versioning</h2>
  +
  +The version of OSSP js is M.N.YYYYMMDD where M.N is the JavaScript
  +branch and YYYYMMDD is the date where the JavaScript code was
  +extracted from the Mozilla CVS repository.
  +
  +<h2>Documentation</h2>
  +
  +<h2>Authors</h2>
  +
  +<pkg_author name="Brendan Eich" mail="brendan@mozilla.org">
  +<pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  +
  +<h2>Status</h2>
  +
  +<pkg_status
  +    name="js" assign="rse"
  +	genesis="Jul-2006"
  +    stable="1.6.20060722" stable_date="22-Jul-2006"
  +    unstable="none"       unstable_date="none"
  +	done=100>
  +
  +<h2>Source</h2>
  +
  +<pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/lib/js/
  +    url=$(FTP_ROOT_URL)/pkg/lib/js/
  +    directory=$(FTP_ROOT_DIR)/pkg/lib/js/
  +    files="js-*.tar.gz" 
  +	stable="js-1.6.20060722.tar.gz" unstable="none">
  +	
  +<h2>Donation</h2>
  +
  +<pkg_donation name="js" return="$(BASE_URL)/pkg/lib/js/">
  +
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jul 23 19:54:53 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id E3047752921; Sun, 23 Jul 2006 19:54:52 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ LINKS
Message-Id: <20060723175452.E3047752921@mail.ossp.org>
Date: Sun, 23 Jul 2006 19:54:52 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Jul-2006 19:54:52
  Branch: HEAD                             Handle: 2006072318545200

  Modified files:
    ossp-pkg/js             LINKS

  Log:
    more links

  Summary:
    Revision    Changes     Path
    1.2         +5  -0      ossp-pkg/js/LINKS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/LINKS
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 LINKS
  --- ossp-pkg/js/LINKS	22 Jul 2006 19:43:48 -0000	1.1
  +++ ossp-pkg/js/LINKS	23 Jul 2006 17:54:52 -0000	1.2
  @@ -19,4 +19,9 @@
     o http://lxr.mozilla.org/mozilla/source/js/src/README.html
     o http://www.jibbering.com/faq/
     o http://www.faqts.com/knowledge_base/index.phtml/fid/53/
  +  o http://users.skynet.be/saw/SpiderMonkey.htm
  +  o http://groups.google.com/group/mozilla.dev.tech.js-engine
  +  o http://groups.google.com/group/netscape.public.mozilla.jseng
  +  o http://groups.google.com/group/comp.lang.javascript
  +  o http://burstproject.org/build/doc/shells.html
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jul 23 20:34:16 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 0E13F7528E9; Sun, 23 Jul 2006 20:34:16 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ ChangeLog Makefile.in configure.ac ossp-pkg/j...
Message-Id: <20060723183416.0E13F7528E9@mail.ossp.org>
Date: Sun, 23 Jul 2006 20:34:16 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Jul-2006 20:34:16
  Branch: HEAD                             Handle: 2006072319341500

  Modified files:
    ossp-pkg/js             ChangeLog Makefile.in configure.ac
    ossp-pkg/js/src         js.c jsapi.c

  Log:
    o Install all src/js*.h headers during "make install" to allow
      applications to at least optionally poke around in the internals.
      This also allows an application to call js_InitFileClass() from
      <jsfile.h> without us having to really call this function in the
      standard API function JS_InitStandardClasses().
    
    o Change the default of the --with-file/--without from --without-file
      to --with-file (enable the File object by default), but activate
      it only in the CLI (where it doesn't hurt and where it is actually
      really required to get something useful running there in practice)
      but explicitly _NOT_ in JS_InitStandardClasses() (as this is
      what would hurt the security in applications which assume that
      JS_InitStandardClasses() initialized only really the standard
      classes).

  Summary:
    Revision    Changes     Path
    1.2         +19 -0      ossp-pkg/js/ChangeLog
    1.21        +1  -10     ossp-pkg/js/Makefile.in
    1.13        +5  -5      ossp-pkg/js/configure.ac
    1.2         +12 -0      ossp-pkg/js/src/js.c
    1.4         +2  -0      ossp-pkg/js/src/jsapi.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ChangeLog
  --- ossp-pkg/js/ChangeLog	22 Jul 2006 19:43:48 -0000	1.1
  +++ ossp-pkg/js/ChangeLog	23 Jul 2006 18:34:15 -0000	1.2
  @@ -11,6 +11,25 @@
   
     This is a list of all changes to OSSP js.
   
  +  Changes between 1.6.20060722 and 1.6.20060723 (2006-07-22 to 2006-07-23)
  +
  +   o Install all src/js*.h headers during "make install" to allow
  +     applications to at least optionally poke around in the internals.
  +     This also allows an application to call js_InitFileClass() from
  +     <jsfile.h> without us having to really call this function in the
  +     standard API function JS_InitStandardClasses().
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +   o Change the default of the --with-file/--without from --without-file
  +     to --with-file (enable the File object by default), but activate
  +     it only in the CLI (where it doesn't hurt and where it is actually
  +     really required to get something useful running there in practice)
  +     but explicitly _NOT_ in JS_InitStandardClasses() (as this is
  +     what would hurt the security in applications which assume that
  +     JS_InitStandardClasses() initialized only really the standard
  +     classes).
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
     Changes between *GENESIS* and 1.6.20060722 (2006-06-XX to 2006-07-22)
      
      o Initial OSSP js distribution of Mozilla JavaScript 1.6 as of 2006-07-22.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 Makefile.in
  --- ossp-pkg/js/Makefile.in	23 Jul 2006 10:51:04 -0000	1.20
  +++ ossp-pkg/js/Makefile.in	23 Jul 2006 18:34:15 -0000	1.21
  @@ -60,15 +60,6 @@
   PERL         = @PERL@
   TRUE         = true
   
  -LIB_HDRS     = src/jsautocfg.h             \
  -               src/jsapi.h                 \
  -               src/jsdbgapi.h              \
  -               src/jscompat.h              \
  -               src/jslong.h                \
  -               src/jsosdep.h               \
  -               src/jsotypes.h              \
  -               src/jspubtd.h               \
  -               src/jstypes.h
   LIB_OBJS     = src/jsapi.lo                \
                  src/jsarena.lo              \
                  src/jsarray.lo              \
  @@ -193,7 +184,7 @@
   	$(SHTOOL) install -c -m 755 js $(DESTDIR)$(bindir)/
   	$(SHTOOL) install -c -m 644 js.1 $(DESTDIR)$(mandir)/man1/
   	$(SHTOOL) install -c -m 644 js.3 $(DESTDIR)$(mandir)/man3/
  -	$(SHTOOL) install -c -m 644 $(LIB_HDRS) $(DESTDIR)$(includedir)/js/
  +	$(SHTOOL) install -c -m 644 src/js*.h $(DESTDIR)$(includedir)/js/
   	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 $(LIB_NAME) $(DESTDIR)$(libdir)/
   	$(SHTOOL) install -c -m 755 js-config.sh $(DESTDIR)$(bindir)/js-config
   	$(SHTOOL) install -c -m 644 js.pc $(DESTDIR)$(libdir)/pkgconfig/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/configure.ac
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 configure.ac
  --- ossp-pkg/js/configure.ac	23 Jul 2006 10:52:12 -0000	1.12
  +++ ossp-pkg/js/configure.ac	23 Jul 2006 18:34:15 -0000	1.13
  @@ -119,12 +119,12 @@
       CLI_LIBS="$CLI_LIBS `$PERL -MExtUtils::Embed -e ldopts`"
   fi
   
  -dnl #   configure option --with-file
  +dnl #   configure option --without-file
   AC_ARG_WITH([file],
  -	AS_HELP_STRING([--with-file], [build with File object (grants access to the filesystem)]),
  -	[ac_cv_with_file=$withval], [ac_cv_with_file=no])
  -AC_CACHE_CHECK([whether to build with the File object], [ac_cv_with_file], [ac_cv_with_file=no])
  -if test ".$ac_cv_with_file" != ".no"; then
  +	AS_HELP_STRING([--without-file], [build without File object (grants access to the filesystem)]),
  +	[ac_cv_with_file=$withval], [ac_cv_with_file=yes])
  +AC_CACHE_CHECK([whether to build with the File object], [ac_cv_with_file], [ac_cv_with_file=yes])
  +if test ".$ac_cv_with_file" = ".yes"; then
   	CPPFLAGS="$CPPFLAGS -DJS_HAS_FILE_OBJECT"
   fi
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/js.c
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 js.c
  --- ossp-pkg/js/src/js.c	6 Jan 2006 16:49:15 -0000	1.1.1.1
  +++ ossp-pkg/js/src/js.c	23 Jul 2006 18:34:15 -0000	1.2
  @@ -63,6 +63,12 @@
   #include "jsscope.h"
   #include "jsscript.h"
   
  +#ifdef OSSP
  +#if JS_HAS_FILE_OBJECT
  +#include "jsfile.h"
  +#endif
  +#endif
  +
   #ifdef PERLCONNECT
   #include "perlconnect/jsperl.h"
   #endif
  @@ -2482,6 +2488,12 @@
   #else
       if (!JS_InitStandardClasses(cx, glob))
           return 1;
  +#ifdef OSSP
  +#if JS_HAS_FILE_OBJECT
  +    if (!js_InitFileClass(cx, glob))
  +        return 1;
  +#endif
  +#endif
   #endif
       if (!JS_DefineFunctions(cx, glob, shell_functions))
           return 1;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsapi.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 jsapi.c
  --- ossp-pkg/js/src/jsapi.c	23 Jul 2006 12:01:17 -0000	1.3
  +++ ossp-pkg/js/src/jsapi.c	23 Jul 2006 18:34:15 -0000	1.4
  @@ -1203,9 +1203,11 @@
   #if JS_HAS_XML_SUPPORT
              js_InitXMLClasses(cx, obj) &&
   #endif
  +#ifndef OSSP
   #if JS_HAS_FILE_OBJECT
              js_InitFileClass(cx, obj) &&
   #endif
  +#endif
              js_InitDateClass(cx, obj);
   }
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jul 23 21:11:50 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id EC763752921; Sun, 23 Jul 2006 21:11:49 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ ChangeLog Makefile.in jslint.js
Message-Id: <20060723191149.EC763752921@mail.ossp.org>
Date: Sun, 23 Jul 2006 21:11:49 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Jul-2006 21:11:49
  Branch: HEAD                             Handle: 2006072320114801

  Added files:
    ossp-pkg/js             jslint.js
  Modified files:
    ossp-pkg/js             ChangeLog Makefile.in

  Log:
    Added jslint (see http://www.jslint.com/) together with some
    home-brewn option parser. The result is installed as
    a stand-alone "jslint" program.

  Summary:
    Revision    Changes     Path
    1.3         +5  -0      ossp-pkg/js/ChangeLog
    1.22        +1  -0      ossp-pkg/js/Makefile.in
    1.1         +2542 -0    ossp-pkg/js/jslint.js
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ChangeLog
  --- ossp-pkg/js/ChangeLog	23 Jul 2006 18:34:15 -0000	1.2
  +++ ossp-pkg/js/ChangeLog	23 Jul 2006 19:11:48 -0000	1.3
  @@ -13,6 +13,11 @@
   
     Changes between 1.6.20060722 and 1.6.20060723 (2006-07-22 to 2006-07-23)
   
  +   o Added jslint (see http://www.jslint.com/) together with some
  +     home-brewn option parser. The result is installed as
  +     a stand-alone "jslint" program.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
      o Install all src/js*.h headers during "make install" to allow
        applications to at least optionally poke around in the internals.
        This also allows an application to call js_InitFileClass() from
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 Makefile.in
  --- ossp-pkg/js/Makefile.in	23 Jul 2006 18:34:15 -0000	1.21
  +++ ossp-pkg/js/Makefile.in	23 Jul 2006 19:11:48 -0000	1.22
  @@ -182,6 +182,7 @@
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(includedir)/js
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libdir)/pkgconfig
   	$(SHTOOL) install -c -m 755 js $(DESTDIR)$(bindir)/
  +	$(SHTOOL) install -e 's;#!\./js;#!$(bindir)/js;' -c -m 755 jslint.js $(DESTDIR)$(bindir)/jslint
   	$(SHTOOL) install -c -m 644 js.1 $(DESTDIR)$(mandir)/man1/
   	$(SHTOOL) install -c -m 644 js.3 $(DESTDIR)$(mandir)/man3/
   	$(SHTOOL) install -c -m 644 src/js*.h $(DESTDIR)$(includedir)/js/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/jslint.js
  ============================================================================
  $ cvs diff -u -r0 -r1.1 jslint.js
  --- /dev/null	2006-07-23 21:11:38 +0200
  +++ jslint.js	2006-07-23 21:11:49 +0200
  @@ -0,0 +1,2542 @@
  +#!./js
  +
  +/* ============================================================== */
  +
  +// jslint.js
  +// 2006-06-12
  +/*
  +Copyright (c) 2002 Douglas Crockford  (www.JSLint.com)
  +
  +Permission is hereby granted, free of charge, to any person obtaining a copy of
  +this software and associated documentation files (the "Software"), to deal in
  +the Software without restriction, including without limitation the rights to
  +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
  +of the Software, and to permit persons to whom the Software is furnished to do
  +so, subject to the following conditions:
  +
  +The above copyright notice and this permission notice shall be included in all
  +copies or substantial portions of the Software.
  +
  +The Software shall be used for Good, not Evil.
  +
  +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  +SOFTWARE.
  +*/
  +
  +
  +/*
  +    jslint is a function. It takes two parameters.
  +
  +        var myResult = jslint(source, option);
  +
  +    The first parameter is either a string or an array of strings. If it is a
  +    string, it will be split on '\n' or '\r'. If it is an array of strings, it
  +    is assumed that each string represents one line. The source can be a
  +    JavaScript text, or HTML text, or a Konfabulator text.
  +
  +    The second parameter is an optional object of options which control the
  +    operation of jslint. All of the options are booleans. All are optional and
  +    have a default value of false.
  +
  +    {
  +        browser    : true if the standard browser globals should be predefined
  +        cap        : true if upper case HTML should be allowed
  +        debug      : true if debugger statements should be allowed
  +        evil       : true if eval should be allowed
  +        jscript    : true if jscript deviations should be allowed
  +        laxLineEnd : true if line breaks should not be checked
  +        passfail   : true if the scan should stop on first error
  +        plusplus   : true if post increment should not be allowed
  +        undef      : true if undefined variables are errors
  +    }
  +
  +    If it checks out, jslint returns true. Otherwise, it returns false.
  +
  +    If false, you can inspect jslint.errors to find out the problems.
  +    jslint.errors is an array of objects containing these members:
  +
  +    {
  +        line      : The line (relative to 0) at which the lint was found
  +        character : The character (relative to 0) at which the lint was found
  +        reason    : The problem
  +        evidence  : The text line in which the problem occurred
  +    }
  +
  +    If a fatal error was found, a null will be the last element of the
  +    jslint.errors array.
  +
  +    You can request a Function Report, which shows all of the functions
  +    and the parameters and vars that they use. This can be used to find
  +    implied global variables and other problems. The report is in HTML and
  +    can be inserted in a <body>.
  +
  +        var myReport = jslint.report(option);
  +
  +    If the option is true, then the report will be limited to only errors.
  +*/
  +
  +String.prototype.entityify = function () {
  +    return this.
  +        replace(/&/g, '&amp;').
  +        replace(/</g, '&lt;').
  +        replace(/>/g, '&gt;');
  +};
  +
  +String.prototype.isAlpha = function () {
  +    return (this >= 'a' && this <= 'z\uffff') ||
  +        (this >= 'A' && this <= 'Z\uffff');
  +};
  +
  +
  +String.prototype.isDigit = function () {
  +    return (this >= '0' && this <= '9');
  +};
  +
  +
  +// We build the application inside a function so that we produce only a single
  +// global variable. The function will be invoked, its return value is the JSLint
  +// function itself.
  +
  +var jslint;
  +jslint = function () {
  +
  +    var anonname,
  +
  +// browser contains a set of global names which are commonly provided by a
  +// web browser environment.
  +
  +        browser = {
  +            alert: true,
  +            blur: true,
  +            clearInterval: true,
  +            clearTimeout: true,
  +            close: true,
  +            closed: true,
  +            confirm: true,
  +            defaultStatus: true,
  +            document: true,
  +            event: true,
  +            focus: true,
  +            frames: true,
  +            history: true,
  +            Image: true,
  +            length: true,
  +            location: true,
  +            moveBy: true,
  +            moveTo: true,
  +            name: true,
  +            navigator: true,
  +            onblur: true,
  +            onerror: true,
  +            onfocus: true,
  +            onload: true,
  +            onresize: true,
  +            onunload: true,
  +            open: true,
  +            opener: true,
  +            parent: true,
  +            print: true,
  +            prompt: true,
  +            resizeBy: true,
  +            resizeTo: true,
  +            screen: true,
  +            scroll: true,
  +            scrollBy: true,
  +            scrollTo: true,
  +            self: true,
  +            setInterval: true,
  +            setTimeout: true,
  +            status: true,
  +            top: true,
  +            window: true,
  +            XMLHttpRequest: true
  +        },
  +        funlab, funstack, functions, globals,
  +
  +// konfab contains the global names which are provided to a Konfabulator widget.
  +
  +        konfab = {
  +            alert: true,
  +            animator: true,
  +            appleScript: true,
  +            beep: true,
  +            bytesToUIString: true,
  +            chooseColor: true,
  +            chooseFile: true,
  +            chooseFolder: true,
  +            convertPathToHFS: true,
  +            convertPathToPlatform: true,
  +            closeWidget: true,
  +            CustomAnimation: true,
  +            escape: true,
  +            FadeAnimation: true,
  +            focusWidget: true,
  +            form: true,
  +            include: true,
  +            isApplicationRunning: true,
  +            iTunes: true,
  +            konfabulatorVersion: true,
  +            log: true,
  +            MoveAnimation: true,
  +            openURL: true,
  +            play: true,
  +            popupMenu: true,
  +            print: true,
  +            prompt: true,
  +            reloadWidget: true,
  +            resolvePath: true,
  +            resumeUpdates: true,
  +            RotateAnimation: true,
  +            runCommand: true,
  +            runCommandInBg: true,
  +            saveAs: true,
  +            savePreferences: true,
  +            showWidgetPreferences: true,
  +            sleep: true,
  +            speak: true,
  +            suppressUpdates: true,
  +            tellWidget: true,
  +            unescape: true,
  +            updateNow: true,
  +            yahooCheckLogin: true,
  +            yahooLogin: true,
  +            yahooLogout: true,
  +            COM: true,
  +            filesystem: true,
  +            preferenceGroups: true,
  +            preferences: true,
  +            screen: true,
  +            system: true,
  +            URL: true,
  +            XMLDOM: true,
  +            XMLHttpRequest: true
  +        },
  +        lines, lookahead, member, noreach, option, prevtoken, stack,
  +
  +// standard contains the global names that are provided by standard JavaScript.
  +
  +        standard = {
  +            Array: true,
  +            Boolean: true,
  +            Date: true,
  +            decodeURI: true,
  +            decodeURIComponent: true,
  +            encodeURI: true,
  +            encodeURIComponent: true,
  +            Error: true,
  +            escape: true,
  +            eval: true,
  +            EvalError: true,
  +            Function: true,
  +            isFinite: true,
  +            isNaN: true,
  +            Math: true,
  +            Number: true,
  +            Object: true,
  +            parseInt: true,
  +            parseFloat: true,
  +            RangeError: true,
  +            ReferenceError: true,
  +            RegExp: true,
  +            String: true,
  +            SyntaxError: true,
  +            TypeError: true,
  +            unescape: true,
  +            URIError: true
  +        },
  +        syntax = {}, token, verb,
  +/*
  +    xmode is used to adapt to the exceptions in XML parsing. It can have these
  +    states:
  +        false   .js script file
  +        "       A " attribute
  +        '       A ' attribute
  +        content The content of a script tag
  +        CDATA   A CDATA block
  +*/
  +        xmode,
  +/*
  +    xtype identifies the type of document being analyzed. It can have these
  +    states:
  +        false   .js script file
  +        html    .html file
  +        widget  .kon Konfabulator file
  +*/
  +        xtype,
  +// token
  +        tx = /^([(){}[.,:;'"~]|\](\]>)?|\?>?|==?=?|\/(\*(global|extern)*|=|)|\*[\/=]?|\+[+=]?|-[-=]?|%[=>]?|&[&=]?|\|[|=]?|>>?>?=?|<([\/=%\?]|\!(\[|--)?|<=?)?|\^=?|\!=?=?|[a-zA-Z_$][a-zA-Z0-9_$]*|[0-9]+([xX][0-9a-fA-F]+|\.[0-9]*)?([eE][+-]?[0-9]+)?)/,
  +// string ending in single quote
  +        sx = /^((\\[^\x00-\x1f]|[^\x00-\x1f'\\])*)'/,
  +        sxx = /^(([^\x00-\x1f'])*)'/,
  +// string ending in double quote
  +        qx = /^((\\[^\x00-\x1f]|[^\x00-\x1f"\\])*)"/,
  +        qxx = /^(([^\x00-\x1f"])*)"/,
  +// regular expression
  +        rx = /^(\\[^\x00-\x1f]|\[(\\[^\x00-\x1f]|[^\x00-\x1f\\\/])*\]|[^\x00-\x1f\\\/\[])+\/[gim]*/,
  +// star slash
  +        lx = /\*\/|\/\*/,
  +// global identifier
  +        gx = /^([a-zA-Z_$][a-zA-Z0-9_$]*)/,
  +// identifier
  +        ix = /^([a-zA-Z_$][a-zA-Z0-9_$]*$)/,
  +// global separators
  +        hx = /^[\x00-\x20,]*(\*\/)?/,
  +// whitespace
  +        wx = /^\s*(\/\/.*\r*$)?/;
  +
  +// Make a new object that inherits from an existing object.
  +
  +    function object(o) {
  +        function f() {}
  +        f.prototype = o;
  +        return new f();
  +    }
  +
  +// Produce an error warning.
  +
  +    function warning(m, x, y) {
  +        var l, c, t = typeof x === 'object' ? x : token;
  +        if (typeof x === 'number') {
  +            l = x;
  +            c = y || 0;
  +        } else {
  +            if (t.id === '(end)') {
  +                t = prevtoken;
  +            }
  +            l = t.line || 0;
  +            c = t.from || 0;
  +        }
  +        jslint.errors.push({
  +            id: '(error)',
  +            reason: m,
  +            evidence: lines[l] || '',
  +            line: l,
  +            character: c
  +        });
  +        if (option.passfail) {
  +            jslint.errors.push(null);
  +            throw null;
  +        }
  +    }
  +
  +    function error(m, x, y) {
  +        warning(m, x, y);
  +        jslint.errors.push(null);
  +        throw null;
  +    }
  +
  +
  +// lexical analysis
  +
  +    var lex = function () {
  +        var character, from, line, s;
  +
  +// Private lex methods
  +
  +        function nextLine() {
  +            line += 1;
  +            if (line >= lines.length) {
  +                return false;
  +            }
  +            character = 0;
  +            s = lines[line];
  +            return true;
  +        }
  +
  +// Produce a token object.  The token inherits from a syntax symbol.
  +
  +        function it(type, value) {
  +            var t;
  +            if (type === '(punctuator)') {
  +                t = syntax[value];
  +            } else if (type === '(identifier)') {
  +                t = syntax[value];
  +                if (!t || typeof t != 'object') {
  +                    t = syntax[type];
  +                }
  +            } else {
  +                t = syntax[type];
  +            }
  +            if (!t || typeof t != 'object') {
  +                error("Unrecognized symbol: '" + value + "' " + type);
  +            }
  +            t = object(t);
  +            if (value || type === '(string)') {
  +                t.value = value;
  +            }
  +            t.line = line;
  +            t.character = character;
  +            t.from = from;
  +            return t;
  +        }
  +
  +// Public lex methods
  +
  +        return {
  +            init: function (source) {
  +                if (typeof source === 'string') {
  +                    lines = source.split('\n');
  +                    if (lines.length == 1) {
  +                        lines = lines[0].split('\r');
  +                    }
  +                } else {
  +                    lines = source;
  +                }
  +                line = 0;
  +                character = 0;
  +                from = 0;
  +                s = lines[0];
  +            },
  +
  +// token -- this is called by advance to get the next token.
  +
  +            token: function () {
  +                var c, i, l, r, t;
  +
  +                function string(x) {
  +                    r = x.exec(s);
  +                    if (r) {
  +                        t = r[1];
  +                        l = r[0].length;
  +                        s = s.substr(l);
  +                        character += l;
  +                        if (xmode == 'script') {
  +                            if (t.indexOf('<\/') >= 0) {
  +                                warning(
  +    'Expected "...<\\/..." and instead saw "...<\/...".', token);
  +                            }
  +                        }
  +                        return it('(string)', r[1]);
  +                    } else {
  +                        for (var j = 0; j < s.length; j += 1) {
  +                            var c = s.charAt(j);
  +                            if (c < ' ') {
  +                                if (c === '\n' || c === '\r') {
  +                                    break;
  +                                }
  +                                error("Control character in string: " +
  +                                    s.substring(0, j), line, character + j);
  +                            }
  +                        }
  +                        error("Unclosed string: " + s, line, character);
  +                    }
  +                }
  +
  +                for (;;) {
  +                    if (!s) {
  +                        return it(nextLine() ? '(endline)' : '(end)', '');
  +                    }
  +                    r = wx.exec(s);
  +                    if (!r || !r[0]) {
  +                        break;
  +                    }
  +                    l = r[0].length;
  +                    s = s.substr(l);
  +                    character += l;
  +                    if (s) {
  +                        break;
  +                    }
  +                }
  +                from = character;
  +                r = tx.exec(s);
  +                if (r) {
  +                    t = r[0];
  +                    l = t.length;
  +                    s = s.substr(l);
  +                    character += l;
  +                    c = t.substr(0, 1);
  +
  +//      identifier
  +
  +                    if (c.isAlpha() || c === '_' || c === '$') {
  +                        return it('(identifier)', t);
  +                    }
  +
  +//      number
  +
  +                    if (c.isDigit()) {
  +                        if (token.id === '.') {
  +                            warning(
  +            "A decimal fraction should have a zero before the decimal point.",
  +                                token);
  +                        }
  +                        if (!isFinite(Number(t))) {
  +                            warning("Bad number: '" + t + "'.",
  +                                line, character);
  +                        }
  +                        if (s.substr(0, 1).isAlpha()) {
  +                            error("Space is required after a number: '" +
  +                                t + "'.", line, character);
  +                        }
  +                        if (c === '0' && t.substr(1,1).isDigit()) {
  +                            warning("Don't use extra leading zeros: '" +
  +                                t + "'.", line, character);
  +                        }
  +                        if (t.substr(t.length - 1) === '.') {
  +                            warning(
  +    "A trailing decimal point can be confused with a dot: '" + t + "'.",
  +                                line, character);
  +                        }
  +                        return it('(number)', t);
  +                    }
  +
  +//      string
  +
  +                    if (t === '"') {
  +                        return (xmode === '"' ||  xmode === 'string') ?
  +                            it('(punctuator)', t) :
  +                            string(xmode === 'xml' ? qxx : qx);
  +                    }
  +                    if (t === "'") {
  +                        return (xmode === "'" ||  xmode === 'string') ?
  +                            it('(punctuator)', t) :
  +                            string(xmode === 'xml' ? sxx : sx);
  +                    }
  +
  +//      unbegun comment
  +
  +                    if (t === '/*') {
  +                        for (;;) {
  +                            i = s.search(lx);
  +                            if (i >= 0) {
  +                                break;
  +                            }
  +                            if (!nextLine()) {
  +                                error("Unclosed comment.", token);
  +                            }
  +                        }
  +                        character += i + 2;
  +                        if (s.substr(i, 1) === '/') {
  +                            error("Nested comment.");
  +                        }
  +                        s = s.substr(i + 2);
  +                        return this.token();
  +                    }
  +
  +//      /*extern
  +
  +                    if (t === '/*extern' || t === '/*global') {
  +                        for (;;) {
  +                            r = hx.exec(s);
  +                            if (r) {
  +                                l = r[0].length;
  +                                s = s.substr(l);
  +                                character += l;
  +                                if (r[1] === '*/') {
  +                                    return this.token();
  +                                }
  +                            }
  +                            if (s) {
  +                                r = gx.exec(s);
  +                                if (r) {
  +                                    l = r[0].length;
  +                                    s = s.substr(l);
  +                                    character += l;
  +                                    globals[r[1]] = true;
  +                                } else {
  +                                    error("Bad extern identifier: '" +
  +                                        s + "'.", line, character);
  +                                }
  +                             } else if (!nextLine()) {
  +                                error("Unclosed comment.");
  +                            }
  +                        }
  +                    }
  +
  +//      punctuator
  +
  +                    return it('(punctuator)', t);
  +                }
  +                error("Unexpected token: " + (t || s.substr(0, 1)),
  +                    line, character);
  +            },
  +
  +// skip -- skip past the next occurrence of a particular string.
  +// If the argument is empty, skip to just before the next '<' character.
  +// This is used to ignore HTML content. Return false if it isn't found.
  +
  +            skip: function (to) {
  +                if (token.id) {
  +                    if (!to) {
  +                        to = '';
  +                        if (token.id.substr(0, 1) === '<') {
  +                            lookahead.push(token);
  +                            return true;
  +                        }
  +                    } else if (token.id.indexOf(to) >= 0) {
  +                        return true;
  +                    }
  +                }
  +                prevtoken = token;
  +                token = syntax['(error)'];
  +                for (;;) {
  +                    var i = s.indexOf(to || '<');
  +                    if (i >= 0) {
  +                        character += i + to.length;
  +                        s = s.substr(i + to.length);
  +                        return true;
  +                    }
  +                    if (!nextLine()) {
  +                        break;
  +                    }
  +                }
  +                return false;
  +            },
  +
  +// regex -- this is called by parse when it sees '/' being used as a prefix.
  +
  +            regex: function () {
  +                var l, r = rx.exec(s), x;
  +                if (r) {
  +                    l = r[0].length;
  +                    character += l;
  +                    s = s.substr(l);
  +                    x = r[1];
  +                    return it('(regex)', x);
  +                }
  +                error("Bad regular expression: " + s);
  +            }
  +        };
  +    }();
  +
  +    function builtin(name) {
  +        return standard[name] === true ||
  +               globals[name] === true ||
  +               (xtype === 'widget' && konfab[name] === true) ||
  +               ((xtype === 'html' || option.browser) && browser[name] === true);
  +    }
  +
  +    function addlabel(t, type) {
  +        if (t) {
  +            if (typeof funlab[t] === 'string') {
  +                switch (funlab[t]) {
  +                case 'var':
  +                case 'var*':
  +                    if (type === 'global') {
  +                        funlab[t] = 'var*';
  +                        return;
  +                    }
  +                    break;
  +                case 'global':
  +                    if (type === 'var') {
  +                        warning('Var ' + t +
  +                            ' was used before it was declared.', prevtoken);
  +                    }
  +                    if (type === 'var*' || type === 'global') {
  +                        return;
  +                    }
  +                    break;
  +                case 'function':
  +                case 'parameter':
  +                    if (type === 'global') {
  +                        return;
  +                    }
  +                    break;
  +                }
  +                warning("Identifier '" + t + "' already declared as " +
  +                    funlab[t], prevtoken);
  +            }
  +            funlab[t] = type;
  +        }
  +    }
  +
  +
  +// We need a peek function. If it has an argument, it peeks that much farther
  +// ahead. It is used to distinguish
  +//     for ( var i in ...
  +// from
  +//     for ( var i = ...
  +
  +    function peek(i) {
  +        var j = 0, t;
  +        if (token == syntax['(error)']) {
  +            return token;
  +        }
  +        if (typeof i === 'undefined') {
  +            i = 0;
  +        }
  +        while (j <= i) {
  +            t = lookahead[j];
  +            if (!t) {
  +                t = lookahead[j] = lex.token();
  +            }
  +            j += 1;
  +        }
  +        return t;
  +    }
  +
  +
  +    var badbreak = {')': true, ']': true, '++': true, '--': true};
  +
  +// Produce the next token. It looks for programming errors.
  +
  +    function advance(id, t) {
  +        var l;
  +        switch (prevtoken.id) {
  +        case '(number)':
  +            if (token.id === '.') {
  +                warning(
  +"A dot following a number can be confused with a decimal point.", prevtoken);
  +            }
  +            break;
  +        case '-':
  +            if (token.id === '-' || token.id === '--') {
  +                warning("Confusing minusses.");
  +            }
  +            break;
  +        case '+':
  +            if (token.id === '+' || token.id === '++') {
  +                warning("Confusing plusses.");
  +            }
  +            break;
  +        }
  +        if (prevtoken.type === '(string)' || prevtoken.identifier) {
  +            anonname = prevtoken.value;
  +        }
  +
  +        if (id && token.value != id) {
  +            if (t) {
  +                if (token.id === '(end)') {
  +                    warning("Unmatched '" + t.id + "'.", t);
  +                } else {
  +                    warning("Expected '" + id + "' to match '" +
  +                        t.id + "' from line " + (t.line + 1) +
  +                        " and instead saw '" + token.value + "'.");
  +                }
  +            } else {
  +                warning("Expected '" + id + "' and instead saw '" +
  +                    token.value + "'.");
  +            }
  +        }
  +        prevtoken = token;
  +        for (;;) {
  +            token = lookahead.shift() || lex.token();
  +            if (token.id === '<![') {
  +                if (xtype === 'html') {
  +                    error("Unexpected token '<!['");
  +                }
  +                if (xmode === 'script') {
  +                    token = lex.token();
  +                    if (token.value !== 'CDATA') {
  +                        error("Expected 'CDATA'");
  +                    }
  +                    token = lex.token();
  +                    if (token.id !== '[') {
  +                        error("Expected '['");
  +                    }
  +                    xmode = 'CDATA';
  +                } else if (xmode === 'xml') {
  +                    lex.skip(']]>');
  +                } else {
  +                    error("Unexpected token '<!['");
  +                }
  +            } else if (token.id === ']]>') {
  +                if (xmode === 'CDATA') {
  +                    xmode = 'script';
  +                } else {
  +                    error("Unexpected token ']]>");
  +                }
  +            } else if (token.id !== '(endline)') {
  +                break;
  +            }
  +            if (xmode === '"' || xmode === "'") {
  +                error("Missing '" + xmode + "'.", prevtoken);
  +            }
  +            l = !xmode && !option.laxLineEnd &&
  +                (prevtoken.type == '(string)' || prevtoken.type == '(number)' ||
  +                prevtoken.type == '(identifier)' || badbreak[prevtoken.id]);
  +        }
  +        if (l && token.id != '{' && token.id != '}' && token.id != ']') {
  +            warning(
  +                "Strict line ending error: '" +
  +                prevtoken.value + "'.", prevtoken);
  +        }
  +        if (xtype === 'widget' && xmode === 'script' && token.id) {
  +            l = token.id.charAt(0);
  +            if (l === '<' || l === '&') {
  +                token.nud = token.led = null;
  +                token.lbp = 0;
  +                token.reach = true;
  +            }
  +        }
  +    }
  +
  +
  +    function advanceregex() {
  +        token = lex.regex();
  +    }
  +
  +
  +    function beginfunction(i) {
  +        var f = {'(name)': i, '(line)': token.line + 1, '(context)': funlab};
  +        funstack.push(funlab);
  +        funlab = f;
  +        functions.push(funlab);
  +    }
  +
  +
  +    function endfunction() {
  +        funlab = funstack.pop();
  +    }
  +
  +
  +// This is the heart of JSLint, the Pratt parser. In addition to parsing, it
  +// is looking for ad hoc lint patterns. We add to Pratt's model .fud, which is
  +// like nud except that it is only used on the first token of a statement.
  +// Having .fud makes it much easier to define JavaScript. I retained Pratt's
  +// nomenclature, even though it isn't very descriptive.
  +
  +// .nud     Null denotation
  +// .fud     First null denotation
  +// .led     Left denotation
  +//  lbp     Left binding power
  +//  rbp     Right binding power
  +
  +// They are key to the parsing method called Top Down Operator Precedence.
  +
  +    function parse(rbp, initial) {
  +        var l, left, o;
  +        if (token.id && token.id === '/') {
  +            if (prevtoken.id != '(' && prevtoken.id != '=' &&
  +                    prevtoken.id != ':' && prevtoken.id != ',' &&
  +                    prevtoken.id != '=') {
  +                warning(
  +"Expected to see a '(' or '=' or ':' or ',' preceding a regular expression literal, and instead saw '" +
  +                    prevtoken.value + "'.", prevtoken);
  +            }
  +            advanceregex();
  +        }
  +        if (token.id === '(end)') {
  +            warning("Unexpected early end of program", prevtoken);
  +        }
  +        advance();
  +        if (initial) {
  +            anonname = 'anonymous';
  +            verb = prevtoken.value;
  +        }
  +        if (initial && prevtoken.fud) {
  +            prevtoken.fud();
  +        } else {
  +            if (prevtoken.nud) {
  +                o = prevtoken.exps;
  +                left = prevtoken.nud();
  +            } else {
  +                if (token.type === '(number)' && prevtoken.id === '.') {
  +                    warning(
  +"A leading decimal point can be confused with a dot: ." + token.value,
  +                        prevtoken);
  +                }
  +                error("Expected an identifier and instead saw '" +
  +                    prevtoken.id + "'.", prevtoken);
  +            }
  +            while (rbp < token.lbp) {
  +                o = token.exps;
  +                advance();
  +                if (prevtoken.led) {
  +                    left = prevtoken.led(left);
  +                } else {
  +                    error("Expected an operator and instead saw '" +
  +                        prevtoken.id + "'.");
  +                }
  +            }
  +            if (initial && !o) {
  +                warning(
  +"Expected an assignment or function call and instead saw an expression.",
  +                    prevtoken);
  +            }
  +        }
  +        if (l) {
  +            funlab[l] = 'label';
  +        }
  +        return left;
  +    }
  +
  +
  +// Parasitic constructors for making the symbols that will be inherited by
  +// tokens.
  +
  +    function symbol(s, p) {
  +        return syntax[s] || (syntax[s] = {id: s, lbp: p, value: s});
  +    }
  +
  +
  +    function delim(s) {
  +        return symbol(s, 0);
  +    }
  +
  +
  +    function stmt(s, f) {
  +        var x = delim(s);
  +        x.identifier = x.reserved = true;
  +        x.fud = f;
  +        return x;
  +    }
  +
  +
  +    function blockstmt(s, f) {
  +        var x = stmt(s, f);
  +        x.block = true;
  +        return x;
  +    }
  +
  +
  +    function prefix(s, f) {
  +        var x = symbol(s, 150);
  +        x.nud = (typeof f === 'function') ? f : function () {
  +            parse(150);
  +            return this;
  +        };
  +        return x;
  +    }
  +
  +
  +    function prefixname(s, f) {
  +        var x = prefix(s, f);
  +        x.identifier = x.reserved = true;
  +        return x;
  +    }
  +
  +
  +    function type(s, f) {
  +        var x = delim(s);
  +        x.type = s;
  +        x.nud = f;
  +        return x;
  +    }
  +
  +
  +    function reserve(s, f) {
  +        var x = type(s, f);
  +        x.identifier = x.reserved = true;
  +        return x;
  +    }
  +
  +
  +    function reservevar(s) {
  +        return reserve(s, function () {
  +            return this;
  +        });
  +    }
  +
  +
  +    function infix(s, f, p) {
  +        var x = symbol(s, p);
  +        x.led = (typeof f === 'function') ? f : function (left) {
  +            return [f, left, parse(p)];
  +        };
  +        return x;
  +    }
  +
  +
  +    function assignop(s, f) {
  +        symbol(s, 20).exps = true;
  +        return infix(s, function (left) {
  +            if (left) {
  +                if (left.id === '.' || left.id === '[' ||
  +                        (left.identifier && !left.reserved)) {
  +                    parse(19);
  +                    return left;
  +                }
  +                if (left == syntax['function']) {
  +                    if (option.jscript) {
  +                        parse(19);
  +                        return left;
  +                    } else {
  +                        warning(
  +"Expected an identifier in an assignment, and instead saw a function invocation.",
  +                            prevtoken);
  +                    }
  +                }
  +            }
  +            error("Bad assignment.", this);
  +        }, 20);
  +    }
  +
  +
  +    function suffix(s, f) {
  +        var x = symbol(s, 150);
  +        x.led = function (left) {
  +            if (option.plusplus) {
  +                warning(this.id + " is considered harmful.", this);
  +            }
  +            return [f, left];
  +        };
  +        return x;
  +    }
  +
  +
  +    function optionalidentifier() {
  +        if (token.reserved) {
  +            warning("Expected an identifier and instead saw '" +
  +                token.id + "' (a reserved word).");
  +        }
  +        if (token.identifier) {
  +            advance();
  +            return prevtoken.value;
  +        }
  +    }
  +
  +
  +    function identifier() {
  +        var i = optionalidentifier();
  +        if (i) {
  +            return i;
  +        }
  +        if (prevtoken.id === 'function' && token.id === '(') {
  +            warning("Missing name in function statement.");
  +        } else {
  +            error("Expected an identifier and instead saw '" +
  +                    token.value + "'.", token);
  +        }
  +    }
  +
  +
  +    function reachable(s) {
  +        var i = 0, t;
  +        if (token.id != ';' || noreach) {
  +            return;
  +        }
  +        for (;;) {
  +            t = peek(i);
  +            if (t.reach) {
  +                return;
  +            }
  +            if (t.id != '(endline)') {
  +                if (t.id === 'function') {
  +                    warning(
  +"Inner functions should be listed at the top of the outer function.", t);
  +                    break;
  +                }
  +                warning("Unreachable '" + t.value + "' after '" + s +
  +                    "'.", t);
  +                break;
  +            }
  +            i += 1;
  +        }
  +    }
  +
  +
  +    function statement() {
  +        var t = token;
  +        while (t.id === ';') {
  +            warning("Unnecessary semicolon", t);
  +            advance(';');
  +            t = token;
  +            if (t.id === '}') {
  +                return;
  +            }
  +        }
  +        if (t.identifier && !t.reserved && peek().id === ':') {
  +            advance();
  +            advance(':');
  +            addlabel(t.value, 'live*');
  +            if (!token.labelled) {
  +                warning("Label '" + t.value +
  +                    "' on unlabelable statement '" + token.value + "'.",
  +                    token);
  +            }
  +            if (t.value.toLowerCase() == 'javascript') {
  +                warning("Label '" + t.value +
  +                    "' looks like a javascript url.",
  +                    token);
  +            }
  +            token.label = t.value;
  +            t = token;
  +        }
  +        parse(0, true);
  +        if (!t.block) {
  +            if (token.id != ';') {
  +                warning("Missing ';'", prevtoken.line,
  +                    prevtoken.from + prevtoken.value.length);
  +            } else {
  +                advance(';');
  +            }
  +        }
  +    }
  +
  +
  +    function statements() {
  +        while (!token.reach) {
  +            statement();
  +        }
  +    }
  +
  +
  +    function block() {
  +        var t = token;
  +        if (token.id === '{') {
  +            advance('{');
  +            statements();
  +            advance('}', t);
  +        } else {
  +            warning("Missing '{' before '" + token.value + "'.");
  +            noreach = true;
  +            statement();
  +            noreach = false;
  +        }
  +        verb = null;
  +    }
  +
  +
  +// An identity function, used by string and number tokens.
  +
  +    function idValue() {
  +        return this;
  +    }
  +
  +
  +    function countMember(m) {
  +        if (typeof member[m] === 'number') {
  +            member[m] += 1;
  +        } else {
  +            member[m] = 1;
  +        }
  +    }
  +
  +
  +// Common HTML attributes that carry scripts.
  +
  +    var scriptstring = {
  +        onblur:      true,
  +        onchange:    true,
  +        onclick:     true,
  +        ondblclick:  true,
  +        onfocus:     true,
  +        onkeydown:   true,
  +        onkeypress:  true,
  +        onkeyup:     true,
  +        onload:      true,
  +        onmousedown: true,
  +        onmousemove: true,
  +        onmouseout:  true,
  +        onmouseover: true,
  +        onmouseup:   true,
  +        onreset:     true,
  +        onselect:    true,
  +        onsubmit:    true,
  +        onunload:    true
  +    };
  +
  +
  +// XML types. Currently we support html and widget.
  +
  +    var xmltype = {
  +        HTML: {
  +            doBegin: function (n) {
  +                if (!option.cap) {
  +                    warning("HTML case error.");
  +                }
  +                xmltype.html.doBegin();
  +            }
  +        },
  +        html: {
  +            doBegin: function (n) {
  +                xtype = 'html';
  +                xmltype.html.script = false;
  +            },
  +            doTagName: function (n, p) {
  +                var i, t = xmltype.html.tag[n], x;
  +                if (!t) {
  +                    error('Unrecognized tag: <' + n + '>. ' +
  +                        (n === n.toLowerCase() ?
  +                        'Did you mean <' + n.toLowerCase() + '>?' : ''));
  +                }
  +                x = t.parent;
  +                if (x) {
  +                    if (x.indexOf(' ' + p + ' ') < 0) {
  +                        error('A <' + n + '> must be within <' + x + '>',
  +                            prevtoken);
  +                    }
  +                } else {
  +                    i = stack.length;
  +                    do {
  +                        if (i <= 0) {
  +                            error('A <' + n + '> must be within the body',
  +                                prevtoken);
  +                        }
  +                        i -= 1;
  +                    } while (stack[i].name !== 'body');
  +                }
  +                xmltype.html.script = n === 'script';
  +                return t.simple;
  +            },
  +            doAttribute: function (n, a) {
  +                if (n === 'script') {
  +                    if (a === 'src') {
  +                        xmltype.html.script = false;
  +                        return 'string';
  +                    } else if (a === 'language') {
  +                        warning("The 'language' attribute is deprecated",
  +                            prevtoken);
  +                        return false;
  +                    }
  +                }
  +                return scriptstring[a] && 'script';
  +            },
  +            doIt: function (n) {
  +                return xmltype.html.script ? 'script' :
  +                    n !== 'html' && xmltype.html.tag[n].special && 'special';
  +            },
  +            tag: {
  +                a:        {},
  +                abbr:     {},
  +                acronym:  {},
  +                address:  {},
  +                applet:   {},
  +                area:     {simple: true, parent: ' map '},
  +                b:        {},
  +                base:     {simple: true, parent: ' head '},
  +                bdo:      {},
  +                big:      {},
  +                blockquote: {},
  +                body:     {parent: ' html noframes '},
  +                br:       {simple: true},
  +                button:   {},
  +                caption:  {parent: ' table '},
  +                center:   {},
  +                cite:     {},
  +                code:     {},
  +                col:      {simple: true, parent: ' table colgroup '},
  +                colgroup: {parent: ' table '},
  +                dd:       {parent: ' dl '},
  +                del:      {},
  +                dfn:      {},
  +                dir:      {},
  +                div:      {},
  +                dl:       {},
  +                dt:       {parent: ' dl '},
  +                em:       {},
  +                embed:    {},
  +                fieldset: {},
  +                font:     {},
  +                form:     {},
  +                frame:    {simple: true, parent: ' frameset '},
  +                frameset: {parent: ' html frameset '},
  +                h1:       {},
  +                h2:       {},
  +                h3:       {},
  +                h4:       {},
  +                h5:       {},
  +                h6:       {},
  +                head:     {parent: ' html '},
  +                html:     {},
  +                hr:       {simple: true},
  +                i:        {},
  +                iframe:   {},
  +                img:      {simple: true},
  +                input:    {simple: true},
  +                ins:      {},
  +                kbd:      {},
  +                label:    {},
  +                legend:   {parent: ' fieldset '},
  +                li:       {parent: ' dir menu ol ul '},
  +                link:     {simple: true, parent: ' head '},
  +                map:      {},
  +                menu:     {},
  +                meta:     {simple: true, parent: ' head noscript '},
  +                noframes: {parent: ' html body '},
  +                noscript: {parent: ' html head body frameset '},
  +                object:   {},
  +                ol:       {},
  +                optgroup: {parent: ' select '},
  +                option:   {parent: ' optgroup select '},
  +                p:        {},
  +                param:    {simple: true, parent: ' applet object '},
  +                pre:      {},
  +                q:        {},
  +                samp:     {},
  +                script:   {parent:
  +' head body p div span abbr acronym address bdo blockquote cite code del dfn em ins kbd pre samp strong th td var '},
  +                select:   {},
  +                small:    {},
  +                span:     {},
  +                strong:   {},
  +                style:    {parent: ' head ', special: true},
  +                sub:      {},
  +                sup:      {},
  +                table:    {},
  +                tbody:    {parent: ' table '},
  +                td:       {parent: ' tr '},
  +                textarea: {},
  +                tfoot:    {parent: ' table '},
  +                th:       {parent: ' tr '},
  +                thead:    {parent: ' table '},
  +                title:    {parent: ' head '},
  +                tr:       {parent: ' table tbody thead tfoot '},
  +                tt:       {},
  +                u:        {},
  +                ul:       {},
  +                'var':    {}
  +            }
  +        },
  +        widget: {
  +            doBegin: function (n) {
  +                xtype = 'widget';
  +            },
  +            doTagName: function (n, p) {
  +                var t = xmltype.widget.tag[n];
  +                if (!t) {
  +                    error('Unrecognized tag: <' + n + '>. ');
  +                }
  +                var x = t.parent;
  +                if (x.indexOf(' ' + p + ' ') < 0) {
  +                    error('A <' + n + '> must be within <' + x + '>', prevtoken);
  +                }
  +            },
  +            doAttribute: function (n, a) {
  +                var t = xmltype.widget.tag[a];
  +                if (!t) {
  +                    error('Unrecognized attribute: <' + n + ' ' + a + '>. ');
  +                }
  +                var x = t.parent;
  +                if (x.indexOf(' ' + n + ' ') < 0) {
  +                    error('Attribute ' + a + ' does not belong in <' +
  +                        n + '>');
  +                }
  +                return t.script ? 'script' : a === 'name' ? 'define' : 'string';
  +            },
  +            doIt: function (n) {
  +                var x = xmltype.widget.tag[n];
  +                return x && x.script && 'script';
  +            },
  +            tag: {
  +                "about-box": {parent: ' widget '},
  +                "about-image": {parent: ' about-box '},
  +                "about-text": {parent: ' about-box '},
  +                "about-version": {parent: ' about-box '},
  +                action: {parent: ' widget ', script: true},
  +                alignment: {parent: ' image text textarea window '},
  +                author: {parent: ' widget '},
  +                autoHide: {parent: ' scrollbar '},
  +                bgColor: {parent: ' text textarea '},
  +                bgOpacity: {parent: ' text textarea '},
  +                checked: {parent: ' image '},
  +                clipRect: {parent: ' image '},
  +                color: {parent: ' about-text about-version shadow text textarea '},
  +                contextMenuItems: {parent: ' frame image text textarea window '},
  +                colorize: {parent: ' image '},
  +                columns: {parent: ' textarea '},
  +                company: {parent: ' widget '},
  +                copyright: {parent: ' widget '},
  +                data: {parent: ' about-text about-version text textarea '},
  +                debug: {parent: ' widget '},
  +                defaultValue: {parent: ' preference '},
  +                defaultTracking: {parent: ' widget '},
  +                description: {parent: ' preference '},
  +                directory: {parent: ' preference '},
  +                editable: {parent: ' textarea '},
  +                enabled: {parent: ' menuItem '},
  +                extension: {parent: ' preference '},
  +                file: {parent: ' action preference '},
  +                fillMode: {parent: ' image '},
  +                font: {parent: ' about-text about-version text textarea '},
  +                frame: {parent: ' frame window '},
  +                group: {parent: ' preference '},
  +                hAlign: {parent: ' frame image scrollbar text textarea '},
  +                height: {parent: ' frame image scrollbar text textarea window '},
  +                hidden: {parent: ' preference '},
  +                hLineSize: {parent: ' frame '},
  +                hOffset: {parent: ' about-text about-version frame image scrollbar shadow text textarea window '},
  +                hotkey: {parent: ' widget '},
  +                hRegistrationPoint: {parent: ' image '},
  +                hslAdjustment: {parent: ' image '},
  +                hslTinting: {parent: ' image '},
  +                hScrollBar: {parent: ' frame '},
  +                icon: {parent: ' preferenceGroup '},
  +                image: {parent: ' about-box frame window widget '},
  +                interval: {parent: ' action timer '},
  +                key: {parent: ' hotkey '},
  +                kind: {parent: ' preference '},
  +                level: {parent: ' window '},
  +                lines: {parent: ' textarea '},
  +                loadingSrc: {parent: ' image '},
  +                max: {parent: ' scrollbar '},
  +                maxLength: {parent: ' preference '},
  +                menuItem: {parent: ' contextMenuItems '},
  +                min: {parent: ' scrollbar '},
  +                minimumVersion: {parent: ' widget '},
  +                minLength: {parent: ' preference '},
  +                missingSrc: {parent: ' image '},
  +                modifier: {parent: ' hotkey '},
  +                name: {parent: ' hotkey image preference preferenceGroup text textarea timer window '},
  +                notSaved: {parent: ' preference '},
  +                onContextMenu: {parent: ' frame image text textarea window ', script: true},
  +                onDragDrop: {parent: ' frame image text textarea ', script: true},
  +                onDragEnter: {parent: ' frame image text textarea ', script: true},
  +                onDragExit: {parent: ' frame image text textarea ', script: true},
  +                onFirstDisplay: {parent: ' window ', script: true},
  +                onGainFocus: {parent: ' textarea window ', script: true},
  +                onKeyDown: {parent: ' hotkey text textarea ', script: true},
  +                onKeyPress: {parent: ' textarea ', script: true},
  +                onKeyUp: {parent: ' hotkey text textarea ', script: true},
  +                onImageLoaded: {parent: ' image ', script: true},
  +                onLoseFocus: {parent: ' textarea window ', script: true},
  +                onMouseDown: {parent: ' frame image text textarea ', script: true},
  +                onMouseEnter: {parent: ' frame image text textarea ', script: true},
  +                onMouseExit: {parent: ' frame image text textarea ', script: true},
  +                onMouseMove: {parent: ' frame image text ', script: true},
  +                onMouseUp: {parent: ' frame image text textarea ', script: true},
  +                onMouseWheel: {parent: ' frame ', script: true},
  +                onMultiClick: {parent: ' frame image text textarea window ', script: true},
  +                onSelect: {parent: ' menuItem ', script: true},
  +                onTimerFired: {parent: ' timer ', script: true},
  +                onValueChanged: {parent: ' scrollbar ', script: true},
  +                opacity: {parent: ' frame image scrollbar shadow text textarea window '},
  +                option: {parent: ' preference widget '},
  +                optionValue: {parent: ' preference '},
  +                order: {parent: ' preferenceGroup '},
  +                orientation: {parent: ' scrollbar '},
  +                pageSize: {parent: ' scrollbar '},
  +                preference: {parent: ' widget '},
  +                preferenceGroup: {parent: ' widget '},
  +                remoteAsync: {parent: ' image '},
  +                requiredPlatform: {parent: ' widget '},
  +                rotation: {parent: ' image '},
  +                scrollX: {parent: ' frame '},
  +                scrollY: {parent: ' frame '},
  +                secure: {parent: ' preference textarea '},
  +                scrollbar: {parent: ' text textarea '},
  +                shadow: {parent: ' about-text text window '},
  +                size: {parent: ' about-text about-version text textarea '},
  +                spellcheck: {parent: ' textarea '},
  +                src: {parent: ' image '},
  +                srcHeight: {parent: ' image '},
  +                srcWidth: {parent: ' image '},
  +                style: {parent: ' about-text about-version preference text textarea '},
  +                text: {parent: ' frame window '},
  +                textarea: {parent: ' frame window '},
  +                timer: {parent: ' widget '},
  +                thumbColor: {parent: ' scrollbar '},
  +                ticking: {parent: ' timer '},
  +                ticks: {parent: ' preference '},
  +                tickLabel: {parent: ' preference '},
  +                tileOrigin: {parent: ' image '},
  +                title: {parent: ' menuItem preference preferenceGroup window '},
  +                tooltip: {parent: ' image text textarea '},
  +                truncation: {parent: ' text '},
  +                tracking: {parent: ' image '},
  +                trigger: {parent: ' action '},
  +                truncation: {parent: ' text textarea '},
  +                type: {parent: ' preference '},
  +                useFileIcon: {parent: ' image '},
  +                vAlign: {parent: ' frame image scrollbar text textarea '},
  +                value: {parent: ' preference scrollbar '},
  +                version: {parent: ' widget '},
  +                visible: {parent: ' frame image scrollbar text textarea window '},
  +                vLineSize: {parent: ' frame '},
  +                vOffset: {parent: ' about-text about-version frame image scrollbar shadow text textarea window '},
  +                vRegistrationPoint: {parent: ' image '},
  +                vScrollBar: {parent: ' frame '},
  +                width: {parent: ' frame image scrollbar text textarea window '},
  +                window: {parent: ' widget '},
  +                zOrder: {parent: ' frame image scrollbar text textarea '}
  +            }
  +        }
  +    };
  +
  +    function xmlword(tag) {
  +        var w = token.value;
  +        if (!token.identifier) {
  +            if (token.id === '<') {
  +                error(tag ? "Expected &lt; and saw '<'" : "Missing '>'",
  +                    prevtoken);
  +            } else {
  +                warning("Missing quotes", prevtoken);
  +            }
  +        }
  +        advance();
  +        while (token.id === '-' || token.id === ':') {
  +            w += token.id;
  +            advance();
  +            if (!token.identifier) {
  +                error('Bad name: ' + w + token.value);
  +            }
  +            w += token.value;
  +            advance();
  +        }
  +        return w;
  +    }
  +
  +    function xml() {
  +        var a, e, n, q, t;
  +        xmode = 'xml';
  +        stack = [];
  +        for (;;) {
  +            switch (token.value) {
  +            case '<':
  +                advance('<');
  +                t = token;
  +                n = xmlword(true);
  +                t.name = n;
  +                if (!xtype) {
  +                    if (xmltype[n]) {
  +                        xmltype[n].doBegin();
  +                        n = xtype;
  +                        e = false;
  +                    } else {
  +                        error("Unrecognized <" + n + ">");
  +                    }
  +                } else {
  +                    if (option.cap && xtype === 'html') {
  +                        n = n.toLowerCase();
  +                    }
  +                    e = xmltype[xtype].doTagName(n, stack[stack.length - 1].type);
  +                }
  +                t.type = n;
  +                for (;;) {
  +                    if (token.id === '/') {
  +                        advance('/');
  +                        e = true;
  +                        break;
  +                    }
  +                    if (token.id && token.id.substr(0, 1) === '>') {
  +                        break;
  +                    }
  +                    a = xmlword();
  +                    switch (xmltype[xtype].doAttribute(n, a)) {
  +                    case 'script':
  +                        xmode = 'string';
  +                        advance('=');
  +                        q = token.id;
  +                        if (q !== '"' && q !== "'") {
  +                            error('Missing quote.');
  +                        }
  +                        xmode = q;
  +                        advance(q);
  +                        statements();
  +                        if (token.id !== q) {
  +                            error(
  +                              'Missing close quote on script attribute');
  +                        }
  +                        xmode = 'xml';
  +                        advance(q);
  +                        break;
  +                    case 'value':
  +                        advance('=');
  +                        if (!token.identifier &&
  +                                token.type != '(string)' &&
  +                                token.type != '(number)') {
  +                            error('Bad value: ' + token.value);
  +                        }
  +                        advance();
  +                        break;
  +                    case 'string':
  +                        advance('=');
  +                        if (token.type !== '(string)') {
  +                            error('Bad value: ' + token.value);
  +                        }
  +                        advance();
  +                        break;
  +                    case 'define':
  +                        advance('=');
  +                        if (token.type !== '(string)') {
  +                            error('Bad value: ' + token.value);
  +                        }
  +                        addlabel(token.value, 'global');
  +                        advance();
  +                        break;
  +                    default:
  +                        if (token.id === '=') {
  +                            advance('=');
  +                            if (!token.identifier &&
  +                                    token.type != '(string)' &&
  +                                    token.type != '(number)') {
  +                            }
  +                            advance();
  +                        }
  +                    }
  +                }
  +                switch (xmltype[xtype].doIt(n)) {
  +                case 'script':
  +                    xmode = 'script';
  +                    advance('>');
  +                    statements();
  +                    xmode = 'xml';
  +                    break;
  +                case 'special':
  +                    e = true;
  +                    n = '</' + t.name + '>';
  +                    if (!lex.skip(n)) {
  +                        error("Missing " + n, t);
  +                    }
  +                    break;
  +                default:
  +                    lex.skip('>');
  +                }
  +                if (!e) {
  +                    stack.push(t);
  +                }
  +                break;
  +            case '</':
  +                advance('</');
  +                n = xmlword(true);
  +                t = stack.pop();
  +                if (!t) {
  +                    error('Unexpected close tag: </' + n + '>');
  +                }
  +                if (t.name != n) {
  +                    error('Expected </' + t.name +
  +                        '> and instead saw </' + n + '>');
  +                }
  +                if (token.id !== '>') {
  +                    error("Expected '>'");
  +                }
  +                lex.skip('>');
  +                break;
  +            case '<!':
  +                for (;;) {
  +                    advance();
  +                    if (token.id === '>') {
  +                        break;
  +                    }
  +                    if (token.id === '<' || token.id === '(end)') {
  +                        error("Missing '>'.", prevtoken);
  +                    }
  +                }
  +                lex.skip('>');
  +                break;
  +            case '<!--':
  +                lex.skip('-->');
  +                break;
  +            case '<%':
  +                lex.skip('%>');
  +                break;
  +            case '<?':
  +                for (;;) {
  +                    advance();
  +                    if (token.id === '?>') {
  +                        break;
  +                    }
  +                    if (token.id === '<?' || token.id === '<' ||
  +                            token.id === '>' || token.id === '(end)') {
  +                        error("Missing '?>'.", prevtoken);
  +                    }
  +                }
  +                lex.skip('?>');
  +                break;
  +            case '<=':
  +            case '<<':
  +            case '<<=':
  +                error("Expected '&lt;'.");
  +                break;
  +            case '(end)':
  +                return;
  +            }
  +            if (!lex.skip('')) {
  +                if (stack.length) {
  +                    t = stack.pop();
  +                    error('Missing </' + t.name + '>', t);
  +                }
  +                return;
  +            }
  +            advance();
  +        }
  +    }
  +
  +
  +// Build the syntax table by declaring the syntactic elements of the language.
  +
  +    type('(number)', idValue);
  +    type('(string)', idValue);
  +
  +    syntax['(identifier)'] = {
  +        type: '(identifier)',
  +        lbp: 0,
  +        identifier: true,
  +        nud: function () {
  +            if (option.undef && !builtin(this.value) &&
  +                    xmode !== '"' && xmode !== "'") {
  +                var c = funlab;
  +                while (!c[this.value]) {
  +                    c = c['(context)'];
  +                    if (!c) {
  +                        warning("Undefined variable: " + this.value,
  +                            prevtoken);
  +                        break;
  +                    }
  +                }
  +            }
  +            addlabel(this.value, 'global');
  +            return this;
  +        },
  +        led: function () {
  +            error("Expected an operator and instead saw '" +
  +                token.value + "'.");
  +        }
  +    };
  +
  +    type('(regex)', function () {
  +        return [this.id, this.value, this.flags];
  +    });
  +
  +    delim('(endline)');
  +    delim('(begin)');
  +    delim('(end)').reach = true;
  +    delim('</').reach = true;
  +    delim('<![').reach = true;
  +    delim('<%');
  +    delim('<?');
  +    delim('<!');
  +    delim('<!--');
  +    delim('%>');
  +    delim('?>');
  +    delim('(error)').reach = true;
  +    delim('}').reach = true;
  +    delim(')');
  +    delim(']');
  +    delim(']]>').reach = true;
  +    delim('"').reach = true;
  +    delim("'").reach = true;
  +    delim(';');
  +    delim(':').reach = true;
  +    delim(',');
  +    reserve('else');
  +    reserve('case').reach = true;
  +    reserve('default').reach = true;
  +    reserve('catch');
  +    reserve('finally');
  +    reservevar('arguments');
  +    reservevar('false');
  +    reservevar('Infinity');
  +    reservevar('NaN');
  +    reservevar('null');
  +    reservevar('this');
  +    reservevar('true');
  +    reservevar('undefined');
  +    assignop('=', 'assign', 20);
  +    assignop('+=', 'assignadd', 20);
  +    assignop('-=', 'assignsub', 20);
  +    assignop('*=', 'assignmult', 20);
  +    assignop('/=', 'assigndiv', 20).nud = function () {
  +        warning(
  +            "A regular expression literal can be confused with '/='.");
  +    };
  +    assignop('%=', 'assignmod', 20);
  +    assignop('&=', 'assignbitand', 20);
  +    assignop('|=', 'assignbitor', 20);
  +    assignop('^=', 'assignbitxor', 20);
  +    assignop('<<=', 'assignshiftleft', 20);
  +    assignop('>>=', 'assignshiftright', 20);
  +    assignop('>>>=', 'assignshiftrightunsigned', 20);
  +    infix('?', function (left) {
  +        parse(10);
  +        advance(':');
  +        parse(10);
  +    }, 30);
  +
  +    infix('||', 'or', 40);
  +    infix('&&', 'and', 50);
  +    infix('|', 'bitor', 70);
  +    infix('^', 'bitxor', 80);
  +    infix('&', 'bitand', 90);
  +    infix('==', function (left) {
  +        var t = token;
  +        if (    (t.type === '(number)' && !+t.value) ||
  +                (t.type === '(string)' && !t.value) ||
  +                t.type === 'true' || t.type === 'false' ||
  +                t.type === 'undefined' || t.type === 'null') {
  +            warning("Use '===' to compare with '" + t.value + "'.", t);
  +        }
  +        return ['==', left, parse(100)];
  +    }, 100);
  +    infix('===', 'equalexact', 100);
  +    infix('!=', function (left) {
  +        var t = token;
  +        if (    (t.type === '(number)' && !+t.value) ||
  +                (t.type === '(string)' && !t.value) ||
  +                t.type === 'true' || t.type === 'false' ||
  +                t.type === 'undefined' || t.type === 'null') {
  +            warning("Use '!==' to compare with '" + t.value + "'.", t);
  +        }
  +        return ['!=', left, parse(100)];
  +    }, 100);
  +    infix('!==', 'notequalexact', 100);
  +    infix('<', 'less', 110);
  +    infix('>', 'greater', 110);
  +    infix('<=', 'lessequal', 110);
  +    infix('>=', 'greaterequal', 110);
  +    infix('<<', 'shiftleft', 120);
  +    infix('>>', 'shiftright', 120);
  +    infix('>>>', 'shiftrightunsigned', 120);
  +    infix('in', 'in', 120);
  +    infix('instanceof', 'instanceof', 120);
  +    infix('+', 'addconcat', 130);
  +    prefix('+', 'num');
  +    infix('-', 'sub', 130);
  +    prefix('-', 'neg');
  +    infix('*', 'mult', 140);
  +    infix('/', 'div', 140);
  +    infix('%', 'mod', 140);
  +
  +    suffix('++', 'postinc');
  +    prefix('++', 'preinc');
  +    syntax['++'].exps = true;
  +
  +    suffix('--', 'postdec');
  +    prefix('--', 'predec');
  +    syntax['--'].exps = true;
  +    prefixname('delete', function () {
  +        parse(0);
  +    }).exps = true;
  +
  +
  +    prefix('~', 'bitnot');
  +    prefix('!', 'not');
  +    prefixname('typeof', 'typeof');
  +    prefixname('new', function () {
  +        var c = parse(155);
  +        if (c) {
  +            if (c.identifier) {
  +                switch (c.value) {
  +                case 'Object':
  +                    warning('Use the object literal notation {}.', prevtoken);
  +                    break;
  +                case 'Array':
  +                    warning('Use the array literal notation [].', prevtoken);
  +                    break;
  +                case 'Number':
  +                case 'String':
  +                case 'Boolean':
  +                    warning("Do not use the " + c.value +
  +                        " function as a constructor.", prevtoken);
  +                    break;
  +                case 'Function':
  +                    if (!option.evil) {
  +                        warning('The Function constructor is eval.');
  +                    }
  +                }
  +            } else {
  +                if (c.id !== '.' && c.id !== '[' && c.id !== '(') {
  +                    warning('Bad constructor', prevtoken);
  +                }
  +            }
  +        } else {
  +            warning('Weird construction.', this);
  +        }
  +        if (token.id === '(') {
  +            advance('(');
  +            if (token.id !== ')') {
  +                for (;;) {
  +                    parse(10);
  +                    if (token.id !== ',') {
  +                        break;
  +                    }
  +                    advance(',');
  +                }
  +            }
  +            advance(')');
  +        } else {
  +            warning("Missing '()' invoking a constructor.");
  +        }
  +        return syntax['function'];
  +    });
  +    syntax['new'].exps = true;
  +
  +    infix('.', function (left) {
  +        var m = identifier();
  +        if (typeof m === 'string') {
  +            countMember(m);
  +        }
  +        if (!option.evil && left && left.value === 'document' &&
  +                (m === 'write' || m === 'writeln')) {
  +            warning("document.write can be a form of eval.", left);
  +        }
  +        this.left = left;
  +        this.right = m;
  +        return this;
  +    }, 160);
  +
  +    infix('(', function (left) {
  +        var n = 0, p = [];
  +        if (token.id !== ')') {
  +            for (;;) {
  +                p[p.length] = parse(10);
  +                n += 1;
  +                if (token.id !== ',') {
  +                    break;
  +                }
  +                advance(',');
  +            }
  +        }
  +        advance(')');
  +        if (typeof left === 'object') {
  +            if (left.value == 'parseInt' && n == 1) {
  +                warning("Missing radix parameter", left);
  +            }
  +            if (!option.evil) {
  +                if (left.value == 'eval' || left.value == 'Function') {
  +                    warning("eval is evil", left);
  +                } else if (p[0] && p[0].id === '(string)' &&
  +                       (left.value === 'setTimeout' ||
  +                        left.value === 'setInterval')) {
  +                    warning(
  +    "Implied eval is evil. Use a function argument instead of a string", left);
  +                }
  +            }
  +            if (!left.identifier && left.id !== '.' &&
  +                    left.id !== '[' && left.id !== '(') {
  +                warning('Bad invocation.', left);
  +            }
  +
  +        }
  +        return syntax['function'];
  +    }, 155).exps = true;
  +
  +    prefix('(', function () {
  +        parse(0);
  +        advance(')', this);
  +    });
  +
  +    infix('[', function (left) {
  +        var e = parse(0);
  +        if (e && e.type === '(string)') {
  +            countMember(e.value);
  +            if (ix.test(e.value)) {
  +                var s = syntax[e.value];
  +                if (!s || !s.reserved) {
  +                    warning("This is better written in dot notation.", e);
  +                }
  +            }
  +        }
  +        advance(']', this);
  +        this.left = left;
  +        this.right = e;
  +        return this;
  +    }, 160);
  +
  +    prefix('[', function () {
  +        if (token.id === ']') {
  +            advance(']');
  +            return;
  +        }
  +        for (;;) {
  +            parse(10);
  +            if (token.id === ',') {
  +                advance(',');
  +                if (token.id === ']' || token.id === ',') {
  +                    warning('Extra comma.', prevtoken);
  +                }
  +            } else {
  +                advance(']', this);
  +                return;
  +            }
  +        }
  +    }, 160);
  +
  +    (function (x) {
  +        x.nud = function () {
  +            var i;
  +            if (token.id === '}') {
  +                advance('}');
  +                return;
  +            }
  +            for (;;) {
  +                i = optionalidentifier(true);
  +                if (!i && (token.id === '(string)' || token.id === '(number)')) {
  +                    i = token.id;
  +                    advance();
  +                }
  +                if (!i) {
  +                    error("Expected an identifier and instead saw '" +
  +                        token.value + "'.");
  +                }
  +                if (typeof i.value === 'string') {
  +                    countMember(i.value);
  +                }
  +                advance(':');
  +                parse(10);
  +                if (token.id === ',') {
  +                    advance(',');
  +                    if (token.id === ',' || token.id === '}') {
  +                        warning("Extra comma.");
  +                    }
  +                } else {
  +                    advance('}', this);
  +                    return;
  +                }
  +            }
  +        };
  +        x.fud = function () {
  +            error(
  +                "Expected to see a statement and instead saw a block.");
  +        };
  +    })(delim('{'));
  +
  +
  +    function varstatement() {
  +        for (;;) {
  +            addlabel(identifier(), 'var');
  +            if (token.id === '=') {
  +                advance('=');
  +                parse(20);
  +            }
  +            if (token.id === ',') {
  +                advance(',');
  +            } else {
  +                return;
  +            }
  +        }
  +    }
  +
  +
  +    stmt('var', varstatement);
  +
  +
  +    function functionparams() {
  +        var t = token;
  +        advance('(');
  +        if (token.id === ')') {
  +            advance(')');
  +            return;
  +        }
  +        for (;;) {
  +            addlabel(identifier(), 'parameter');
  +            if (token.id === ',') {
  +                advance(',');
  +            } else {
  +                advance(')', t);
  +                return;
  +            }
  +        }
  +    }
  +
  +
  +    blockstmt('function', function () {
  +        var i = identifier();
  +        addlabel(i, 'var*');
  +        beginfunction(i);
  +        addlabel(i, 'function');
  +        functionparams();
  +        block();
  +        endfunction();
  +    });
  +
  +    prefixname('function', function () {
  +        var i = optionalidentifier() || ('"' + anonname + '"');
  +        beginfunction(i);
  +        addlabel(i, 'function');
  +        functionparams();
  +        block();
  +        endfunction();
  +    });
  +
  +    blockstmt('if', function () {
  +        var t = token;
  +        advance('(');
  +        parse(20);
  +        advance(')', t);
  +        block();
  +        if (token.id === 'else') {
  +            advance('else');
  +            if (token.id === 'if' || token.id === 'switch') {
  +                statement();
  +            } else {
  +                block();
  +            }
  +        }
  +    });
  +
  +    blockstmt('try', function () {
  +        var b;
  +        block();
  +        if (token.id === 'catch') {
  +            advance('catch');
  +            beginfunction('"catch"');
  +            functionparams();
  +            block();
  +            endfunction();
  +            b = true;
  +        }
  +        if (token.id === 'finally') {
  +            advance('finally');
  +            beginfunction('"finally"');
  +            block();
  +            endfunction();
  +            return;
  +        } else if (!b) {
  +            error("Expected 'catch' or 'finally' and instead saw '" +
  +                token.value + "'.");
  +        }
  +    });
  +
  +    blockstmt('while', function () {
  +        var t= token;
  +        advance('(');
  +        parse(20);
  +        advance(')', t);
  +        block();
  +    }).labelled = true;
  +
  +    reserve('with');
  +
  +    blockstmt('switch', function () {
  +        var t = token;
  +        advance('(');
  +        var g = false;
  +        parse(20);
  +        advance(')', t);
  +        t = token;
  +        advance('{');
  +        for (;;) {
  +            switch (token.id) {
  +            case 'case':
  +                switch (verb) {
  +                case 'break':
  +                case 'case':
  +                case 'continue':
  +                case 'return':
  +                case 'switch':
  +                case 'throw':
  +                    break;
  +                default:
  +                    warning(
  +                        "Expected a 'break' statement before 'case'.",
  +                        prevtoken);
  +                }
  +                advance('case');
  +                parse(20);
  +                g = true;
  +                advance(':');
  +                verb = 'case';
  +                break;
  +            case 'default':
  +                switch (verb) {
  +                case 'break':
  +                case 'continue':
  +                case 'return':
  +                case 'throw':
  +                    break;
  +                default:
  +                    warning(
  +                        "Expected a 'break' statement before 'default'.",
  +                        prevtoken);
  +                }
  +                advance('default');
  +                g = true;
  +                advance(':');
  +                break;
  +            case '}':
  +                advance('}', t);
  +                return;
  +            default:
  +                if (g) {
  +                    statements();
  +                } else {
  +                    error("Expected to see 'case' and instead saw '" +
  +                        token.value + "'.");
  +                }
  +            }
  +        }
  +    }).labelled = true;
  +
  +    stmt('debugger', function () {
  +        if (!option.debug) {
  +            warning("All debugger statements should be removed.");
  +        }
  +    });
  +
  +    stmt('do', function () {
  +        block();
  +        advance('while');
  +        var t = token;
  +        advance('(');
  +        parse(20);
  +        advance(')', t);
  +    }).labelled = true;
  +
  +    blockstmt('for', function () {
  +        var t = token;
  +        advance('(');
  +        if (peek(token.id === 'var' ? 1 : 0).id === 'in') {
  +            if (token.id === 'var') {
  +                advance('var');
  +                addlabel(identifier(), 'var');
  +            } else {
  +                advance();
  +            }
  +            advance('in');
  +            parse(20);
  +            advance(')', t);
  +            block();
  +            return;
  +        } else {
  +            if (token.id != ';') {
  +                if (token.id === 'var') {
  +                    advance('var');
  +                    varstatement();
  +                } else {
  +                    for (;;) {
  +                        parse(0);
  +                        if (token.id !== ',') {
  +                            break;
  +                        }
  +                        advance(',');
  +                    }
  +                }
  +            }
  +            advance(';');
  +            if (token.id != ';') {
  +                parse(20);
  +            }
  +            advance(';');
  +            if (token.id === ';') {
  +                error("Expected to see ')' and instead saw ';'");
  +            }
  +            if (token.id != ')') {
  +                for (;;) {
  +                    parse(0);
  +                    if (token.id !== ',') {
  +                        break;
  +                    }
  +                    advance(',');
  +                }
  +            }
  +            advance(')', t);
  +            block();
  +        }
  +    }).labelled = true;
  +
  +
  +    function nolinebreak(t) {
  +        if (t.line !== token.line) {
  +            warning("Statement broken badly.", t);
  +        }
  +    }
  +
  +
  +    stmt('break', function () {
  +        nolinebreak(this);
  +        if (funlab[token.value] === 'live*') {
  +            advance();
  +        }
  +        reachable('break');
  +    });
  +
  +
  +    stmt('continue', function () {
  +        nolinebreak(this);
  +        if (funlab[token.id] === 'live*') {
  +            advance();
  +        }
  +        reachable('continue');
  +    });
  +
  +
  +    stmt('return', function () {
  +        nolinebreak(this);
  +        if (token.id != ';' && !token.reach) {
  +            parse(20);
  +        }
  +        reachable('return');
  +    });
  +
  +
  +    stmt('throw', function () {
  +        nolinebreak(this);
  +        parse(20);
  +        reachable('throw');
  +    });
  +
  +
  +//  Superfluous reserved words
  +
  +    reserve('abstract');
  +    reserve('boolean');
  +    reserve('byte');
  +    reserve('char');
  +    reserve('class');
  +    reserve('const');
  +    reserve('double');
  +    reserve('enum');
  +    reserve('export');
  +    reserve('extends');
  +    reserve('final');
  +    reserve('float');
  +    reserve('goto');
  +    reserve('implements');
  +    reserve('import');
  +    reserve('int');
  +    reserve('interface');
  +    reserve('long');
  +    reserve('native');
  +    reserve('package');
  +    reserve('private');
  +    reserve('protected');
  +    reserve('public');
  +    reserve('short');
  +    reserve('static');
  +    reserve('super');
  +    reserve('synchronized');
  +    reserve('throws');
  +    reserve('transient');
  +    reserve('void');
  +    reserve('volatile');
  +
  +
  +// The actual jslint function itself.
  +
  +    var j = function (s, o) {
  +        option = o;
  +        if (!o) {
  +            option = {};
  +        }
  +        jslint.errors = [];
  +        globals = {};
  +        functions = [];
  +        xmode = false;
  +        xtype = '';
  +        stack = null;
  +        funlab = {};
  +        member = {};
  +        funstack = [];
  +        lookahead = [];
  +        lex.init(s);
  +
  +        prevtoken = token = syntax['(begin)'];
  +        try {
  +            advance();
  +            if (token.value.charAt(0) === '<') {
  +                xml();
  +            } else {
  +                statements();
  +                advance('(end)');
  +            }
  +        } catch (e) {
  +            if (e) {
  +                jslint.errors.push({
  +                    reason: "JSLint error: " + e.description,
  +                    line: token.line,
  +                    character: token.from,
  +                    evidence: token.value
  +                });
  +            }
  +        }
  +        return jslint.errors.length === 0;
  +    };
  +
  +
  +// Report generator.
  +
  +    j.report = function (option) {
  +        var a = [], c, cc, f, i, k, o = [], s;
  +
  +        function detail(h) {
  +            if (s.length) {
  +                o.push('<div>' + h + ':&nbsp; ' + s.sort().join(', ') +
  +                    '</div>');
  +            }
  +        }
  +
  +        k = jslint.errors.length;
  +        if (k) {
  +            o.push(
  +                '<div style="background-color: mistyrose;">Error:<blockquote>');
  +            for (i = 0; i < k; i += 1) {
  +                c = jslint.errors[i];
  +                if (c) {
  +                    o.push('<p>Problem at line ' + (c.line + 1) +
  +                        ' character ' + (c.character + 1) +
  +                        ': ' + c.reason.entityify() +
  +                        '</p><p><tt>' + c.evidence.entityify() +
  +                        '</tt></p>');
  +                }
  +            }
  +            o.push('</blockquote></div>');
  +            if (!c) {
  +                return o.join('');
  +            }
  +        }
  +
  +        if (!option) {
  +            for (k in member) {
  +                a.push(k);
  +            }
  +            if (a.length) {
  +                a = a.sort();
  +                o.push(
  +                 '<table><tbody><tr><th>Members</th><th>Occurrences</th></tr>');
  +                for (i = 0; i < a.length; i += 1) {
  +                    o.push('<tr><td><tt>', a[i], '</tt></td><td>', member[a[i]],
  +                        '</td></tr>');
  +                }
  +                o.push('</tbody></table>');
  +            }
  +            for (i = 0; i < functions.length; ++i) {
  +                f = functions[i];
  +                for (k in f) {
  +                    if (f[k] === 'global') {
  +                        c = f['(context)'];
  +                        for (;;) {
  +                            cc = c['(context)'];
  +                            if (!cc) {
  +                                if ((!funlab[k] || funlab[k] === 'var?') &&
  +                                        !builtin(k)) {
  +                                    funlab[k] = 'var?';
  +                                    f[k] = 'global?';
  +                                }
  +                                break;
  +                            }
  +                            if (c[k] === 'parameter!' || c[k] === 'var!') {
  +                                f[k] = 'var.';
  +                                break;
  +                            }
  +                            if (c[k] === 'var' || c[k] === 'var*' ||
  +                                    c[k] === 'var!') {
  +                                f[k] = 'var.';
  +                                c[k] = 'var!';
  +                                break;
  +                            }
  +                            if (c[k] === 'parameter') {
  +                                f[k] = 'var.';
  +                                c[k] = 'parameter!';
  +                                break;
  +                            }
  +                            c = cc;
  +                        }
  +                    }
  +                }
  +            }
  +            s = [];
  +            for (k in funlab) {
  +                c = funlab[k];
  +                if (typeof c === 'string' && c.substr(0, 3) === 'var') {
  +                    if (c === 'var?') {
  +                        s.push('<tt>' + k + '</tt><small>&nbsp;(?)</small>');
  +                    } else {
  +                        s.push('<tt>' + k + '</tt>');
  +                    }
  +                }
  +            }
  +            detail('Global');
  +            if (functions.length) {
  +                o.push('<br>Function:<ol style="padding-left:0.5in">');
  +            }
  +            for (i = 0; i < functions.length; i += 1) {
  +                f = functions[i];
  +                o.push('<li value=' +
  +                    f['(line)'] + '><tt>' + (f['(name)'] || '') + '</tt>');
  +                s = [];
  +                for (k in f) {
  +                    if (k.charAt(0) != '(') {
  +                        switch (f[k]) {
  +                        case 'parameter':
  +                            s.push('<tt>' + k + '</tt>');
  +                            break;
  +                        case 'parameter!':
  +                            s.push('<tt>' + k +
  +                                '</tt><small>&nbsp;(closure)</small>');
  +                            break;
  +                        }
  +                    }
  +                }
  +                detail('Parameter');
  +                s = [];
  +                for (k in f) {
  +                    if (k.charAt(0) != '(') {
  +                        switch(f[k]) {
  +                        case 'var':
  +                            s.push('<tt>' + k +
  +                                '</tt><small>&nbsp;(unused)</small>');
  +                            break;
  +                        case 'var*':
  +                            s.push('<tt>' + k + '</tt>');
  +                            break;
  +                        case 'var!':
  +                            s.push('<tt>' + k +
  +                                '</tt><small>&nbsp;(closure)</small>');
  +                            break;
  +                        case 'var.':
  +                            s.push('<tt>' + k +
  +                                '</tt><small>&nbsp;(outer)</small>');
  +                            break;
  +                        }
  +                    }
  +                }
  +                detail('Var');
  +                s = [];
  +                c = f['(context)'];
  +                for (k in f) {
  +                    if (k.charAt(0) != '(' && f[k].substr(0, 6) === 'global') {
  +                        if (f[k] === 'global?') {
  +                            s.push('<tt>' + k + '</tt><small>&nbsp;(?)</small>');
  +                        } else {
  +                            s.push('<tt>' + k + '</tt>');
  +                        }
  +                    }
  +                }
  +                detail('Global');
  +                s = [];
  +                for (k in f) {
  +                    if (k.charAt(0) != '(' && f[k] === 'label') {
  +                       s.push(k);
  +                    }
  +                }
  +                detail('Label');
  +                o.push('</li>');
  +            }
  +            if (functions.length) {
  +                o.push('</ol>');
  +            }
  +        }
  +        return o.join('');
  +    };
  +
  +    return j;
  +
  +}();
  +
  +/* ============================================================== */
  +
  +var options = {
  +    "browser"    : false,
  +    "cap"        : false,
  +    "debug"      : false,
  +    "evil"       : false,
  +    "jscript"    : false,
  +    "laxLineEnd" : false,
  +    "passfail"   : false,
  +    "plusplus"   : false,
  +    "undef"      : false
  +};
  +
  +function die(str) {
  +    print("jslint:ERROR: " + str);
  +    quit();
  +}
  +
  +function usage() {
  +    print("jslint:USAGE: jslint file.js");
  +    quit();
  +}
  +
  +var i;
  +for (i = 0; i < arguments.length; i++) {
  +    if (   arguments[i].substring(0, 1) != '-'
  +        && arguments[i].substring(0, 1) != '+')
  +        break;
  +    if (options[arguments[i].substring(1)] == undefined)
  +        die("invalid command line option \"" + arguments[i] + "\"");
  +    options[arguments[i].substring(1)] =
  +        (arguments[i].substring(0, 1) == "-" ? true : false);
  +}
  +if (arguments[i] == undefined) {
  +    usage()
  +}
  +
  +var file = new File(arguments[i]);
  +file.open("read");
  +var script = file.readAll();
  +file.close();
  +
  +if (!jslint(script, { passfail: true })) {
  +    var e = jslint.errors[0];
  +    print('jslint: line ' + (e.line + 1) + ' character ' + (e.character + 1) + ': ' + e.reason);
  +    print((e.evidence || ''). replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1"));
  +    quit();
  +}
  +
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jul 24 20:31:14 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B94BD7534A9; Mon, 24 Jul 2006 20:31:13 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: MOZILLA: ossp-pkg/js/src/ .cvsignore Makefile.in Makefile....
Message-Id: <20060724183113.B94BD7534A9@mail.ossp.org>
Date: Mon, 24 Jul 2006 20:31:13 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Jul-2006 20:31:13
  Branch: MOZILLA                          Handle: 19990427161803218933502

  Modified files:           (Branch: MOZILLA)
    ossp-pkg/js/src         .cvsignore Makefile.in js.c js.msg jsapi.c jsapi.h
                            jsarena.c jsarena.h jsarray.c jsatom.c jscntxt.c
                            jscntxt.h jscompat.h jsdbgapi.c jsdbgapi.h
                            jsdhash.h jsemit.c jsexn.c jsexn.h jsfile.c
                            jsfun.c jsgc.c jsinterp.c jsmath.c jsobj.c jsobj.h
                            jsopcode.c jsparse.c jsprf.c jsprf.h jspubtd.h
                            jsregexp.c jsregexp.h jsscan.c jsscope.c
                            jsscript.c jsstr.c jsstr.h jsxml.c
    ossp-pkg/js/src/config  WINNT4.0.mk WINNT5.0.mk WINNT5.1.mk WINNT5.2.mk
    ossp-pkg/js/src/fdlibm  .cvsignore fdlibm.h
    ossp-pkg/js/src/perlconnect
                            .cvsignore jsperl.c
  Touched files:            (Branch: MOZILLA)
    ossp-pkg/js/src         Makefile.ref README.html SpiderMonkey.rsp
                            config.mk js.mak js.mdp js.pkg js3240.rc
                            jsOS240.def jsarray.h jsatom.h jsbit.h jsbool.c
                            jsbool.h jsclist.h jsconfig.h jsconfig.mk
                            jscpucfg.c jscpucfg.h jsdate.c jsdate.h jsdhash.c
                            jsdtoa.c jsdtoa.h jsemit.h jsfile.h jsfile.msg
                            jsfun.h jsgc.h jshash.h jsify.pl jsinterp.h
                            jslibmath.h jslock.c jslock.h jslocko.asm jslog2.c
                            jslong.c jslong.h jsmath.h jsnum.c jsnum.h
                            jsopcode.h jsopcode.tbl jsosdep.h jsotypes.h
                            jsparse.h jsprvtd.h jsscan.h jsscope.h jsscript.h
                            jsshell.msg jsstddef.h jstypes.h jsutil.c jsutil.h
                            jsxdrapi.c jsxdrapi.h jsxml.h lock_SunOS.s
                            perfect.js plify_jsdhash.sed prmjtime.c prmjtime.h
                            resource.h rules.mk win32.order
    ossp-pkg/js/src/config  AIX4.1.mk AIX4.2.mk AIX4.3.mk Darwin.mk
                            Darwin1.3.mk Darwin1.4.mk Darwin5.2.mk
                            Darwin5.3.mk HP-UXB.10.10.mk HP-UXB.10.20.mk
                            HP-UXB.11.00.mk IRIX.mk IRIX5.3.mk IRIX6.1.mk
                            IRIX6.2.mk IRIX6.3.mk IRIX6.5.mk Linux_All.mk
                            Mac_OS10.0.mk OSF1V4.0.mk OSF1V5.0.mk
                            SunOS4.1.4.mk SunOS5.3.mk SunOS5.4.mk
                            SunOS5.5.1.mk SunOS5.5.mk SunOS5.6.mk SunOS5.7.mk
                            SunOS5.8.mk SunOS5.9.mk dgux.mk
    ossp-pkg/js/src/editline
                            Makefile.ref README editline.3 editline.c
                            editline.h sysunix.c unix.h
    ossp-pkg/js/src/fdlibm  Makefile.in Makefile.ref e_acos.c e_acosh.c
                            e_asin.c e_atan2.c e_atanh.c e_cosh.c e_exp.c
                            e_fmod.c e_gamma.c e_gamma_r.c e_hypot.c e_j0.c
                            e_j1.c e_jn.c e_lgamma.c e_lgamma_r.c e_log.c
                            e_log10.c e_pow.c e_rem_pio2.c e_remainder.c
                            e_scalb.c e_sinh.c e_sqrt.c fdlibm.mak fdlibm.mdp
                            k_cos.c k_rem_pio2.c k_sin.c k_standard.c k_tan.c
                            s_asinh.c s_atan.c s_cbrt.c s_ceil.c s_copysign.c
                            s_cos.c s_erf.c s_expm1.c s_fabs.c s_finite.c
                            s_floor.c s_frexp.c s_ilogb.c s_isnan.c s_ldexp.c
                            s_lib_version.c s_log1p.c s_logb.c s_matherr.c
                            s_modf.c s_nextafter.c s_rint.c s_scalbn.c
                            s_signgam.c s_significand.c s_sin.c s_tan.c
                            s_tanh.c w_acos.c w_acosh.c w_asin.c w_atan2.c
                            w_atanh.c w_cosh.c w_exp.c w_fmod.c w_gamma.c
                            w_gamma_r.c w_hypot.c w_j0.c w_j1.c w_jn.c
                            w_lgamma.c w_lgamma_r.c w_log.c w_log10.c w_pow.c
                            w_remainder.c w_scalb.c w_sinh.c w_sqrt.c
    ossp-pkg/js/src/perlconnect
                            JS.def JS.dsp JS.pm JS.xs Makefile.PL Makefile.ref
                            PerlConnect.dsp PerlConnect.dsw PerlConnect.pm
                            PerlConnectShell.dsp README.html bg.jpg jsperl.h
                            jsperlbuild.pl jsperlpvt.h test.js test.pl typemap

  Log:
    Import new upstream version: Mozilla JavaScript (SpiderMonkey) 1.6 as of 2006-07-24
    
    [Release Tag: MOZILLA_JS_1_6_20060724]

  Summary:
    Revision    Changes     Path
    MOZILLA     +8  -1      ossp-pkg/js/src/.cvsignore
    1.1.1.2     +3  -22     ossp-pkg/js/src/Makefile.in
    1.1.1.2     +0  -0      ossp-pkg/js/src/config/WINNT4.0.mk
    1.1.1.2     +0  -0      ossp-pkg/js/src/config/WINNT5.0.mk
    1.1.1.2     +0  -0      ossp-pkg/js/src/config/WINNT5.1.mk
    1.1.1.2     +0  -0      ossp-pkg/js/src/config/WINNT5.2.mk
    MOZILLA     +0  -0      ossp-pkg/js/src/fdlibm/.cvsignore
    1.1.1.2     +0  -0      ossp-pkg/js/src/fdlibm/fdlibm.h
    1.1.1.2     +55 -28     ossp-pkg/js/src/js.c
    1.1.1.2     +4  -1      ossp-pkg/js/src/js.msg
    1.1.1.2     +47 -37     ossp-pkg/js/src/jsapi.c
    1.1.1.2     +40 -15     ossp-pkg/js/src/jsapi.h
    1.1.1.2     +1  -2      ossp-pkg/js/src/jsarena.c
    1.1.1.2     +5  -7      ossp-pkg/js/src/jsarena.h
    1.1.1.2     +49 -112    ossp-pkg/js/src/jsarray.c
    1.1.1.2     +6  -3      ossp-pkg/js/src/jsatom.c
    1.1.1.2     +114 -98    ossp-pkg/js/src/jscntxt.c
    1.1.1.2     +1  -13     ossp-pkg/js/src/jscntxt.h
    1.1.1.2     +1  -1      ossp-pkg/js/src/jscompat.h
    1.1.1.2     +4  -11     ossp-pkg/js/src/jsdbgapi.c
    1.1.1.2     +0  -7      ossp-pkg/js/src/jsdbgapi.h
    1.1.1.2     +1  -1      ossp-pkg/js/src/jsdhash.h
    1.1.1.2     +3  -3      ossp-pkg/js/src/jsemit.c
    1.1.1.2     +19 -26     ossp-pkg/js/src/jsexn.c
    1.1.1.2     +3  -0      ossp-pkg/js/src/jsexn.h
    1.1.1.2     +1  -1      ossp-pkg/js/src/jsfile.c
    1.1.1.2     +48 -147    ossp-pkg/js/src/jsfun.c
    1.1.1.2     +4  -29     ossp-pkg/js/src/jsgc.c
    1.1.1.2     +20 -59     ossp-pkg/js/src/jsinterp.c
    1.1.1.2     +0  -10     ossp-pkg/js/src/jsmath.c
    1.1.1.2     +102 -288   ossp-pkg/js/src/jsobj.c
    1.1.1.2     +0  -10     ossp-pkg/js/src/jsobj.h
    1.1.1.2     +28 -15     ossp-pkg/js/src/jsopcode.c
    1.1.1.2     +11 -5      ossp-pkg/js/src/jsparse.c
    1.1.1.2     +58 -6      ossp-pkg/js/src/jsprf.c
    1.1.1.2     +2  -0      ossp-pkg/js/src/jsprf.h
    1.1.1.2     +21 -2      ossp-pkg/js/src/jspubtd.h
    1.1.1.2     +11 -8      ossp-pkg/js/src/jsregexp.c
    1.1.1.2     +0  -3      ossp-pkg/js/src/jsregexp.h
    1.1.1.2     +21 -35     ossp-pkg/js/src/jsscan.c
    1.1.1.2     +9  -14     ossp-pkg/js/src/jsscope.c
    1.1.1.2     +0  -6      ossp-pkg/js/src/jsscript.c
    1.1.1.2     +276 -76    ossp-pkg/js/src/jsstr.c
    1.1.1.2     +21 -8      ossp-pkg/js/src/jsstr.h
    1.1.1.2     +173 -130   ossp-pkg/js/src/jsxml.c
    MOZILLA     +0  -0      ossp-pkg/js/src/perlconnect/.cvsignore
    1.1.1.2     +0  -0      ossp-pkg/js/src/perlconnect/jsperl.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/.cvsignore
  ============================================================================
  $ cvs diff -u -rMOZILLA -rMOZILLA .cvsignore
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 Makefile.in
  --- ossp-pkg/js/src/Makefile.in	12 Jun 2006 21:36:07 -0000	1.1.1.1
  +++ ossp-pkg/js/src/Makefile.in	1 Jun 2005 14:26:26 -0000	1.1.1.2
  @@ -368,35 +368,16 @@
   # the mdcpucfg for the target so it needs the appropriate target defines
   ifdef HOST_NSPR_MDCPUCFG
   HOST_CC := $(HOST_CC) -DMDCPUCFG=$(TARGET_NSPR_MDCPUCFG)
  -HOST_CFLAGS := $(patsubst -DXP_%,,$(HOST_CFLAGS))
  -endif
  -
  -ifdef CROSS_COMPILE
  -# jscpucfg needs to know when it's supposed to produce a config for the target
  -JSCPUCFG_DEFINES = $(ACDEFINES)
  -
  -# This is incredibly hacky.  Darwin NSPR uses the same MDCPUCFG for multiple
  -# processors, and determines which processor to configure for based on
  -# #ifdef i386.  This macro is among the NSPR defines, but is also automatically
  -# defined by the compiler when building for i386.  It therefore needs to be
  -# defined here if targeting i386, and explicitly undefined otherwise.
  -ifeq ($(OS_ARCH),Darwin)
  -ifeq ($(TARGET_CPU),powerpc)
  -JSCPUCFG_DEFINES += -Ui386
  -else
  -JSCPUCFG_DEFINES += -Di386=1
  -endif
  -endif
   endif
   
   ifeq ($(OS_ARCH),QNX)
   ifneq ($(OS_TARGET),NTO)
   # QNX's compiler apparently can't build a binary directly from a source file.
   jscpucfg.o: jscpucfg.c Makefile.in
  -	$(HOST_CC) $(HOST_CFLAGS) -c $(JSCPUCFG_DEFINES) $(DEFINES) $(NSPR_CFLAGS) -o $@ $<
  +	$(HOST_CC) $(HOST_CFLAGS) -c $(DEFINES) $(NSPR_CFLAGS) -o $@ $<
   
   jscpucfg: jscpucfg.o
  -	$(HOST_CC) $(HOST_CFLAGS) $(JSCPUCFG_DEFINES) $(DEFINES) -o $@ $<
  +	$(HOST_CC) $(HOST_CFLAGS) $(DEFINES) -o $@ $<
   endif
   else
   ifeq ($(OS_ARCH),WINCE)
  @@ -404,7 +385,7 @@
   	echo no need to build jscpucfg $<
   else
   jscpucfg$(HOST_BIN_SUFFIX): jscpucfg.c Makefile.in
  -	$(HOST_CC) $(HOST_CFLAGS) $(JSCPUCFG_DEFINES) $(DEFINES) $(NSPR_CFLAGS) $(OUTOPTION)$@ $<
  +	$(HOST_CC) $(HOST_CFLAGS) $(DEFINES) $(NSPR_CFLAGS) $(OUTOPTION)$@ $<
   endif
   endif
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/config/WINNT4.0.mk
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 config/WINNT4.0.mk
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/config/WINNT5.0.mk
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 config/WINNT5.0.mk
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/config/WINNT5.1.mk
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 config/WINNT5.1.mk
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/config/WINNT5.2.mk
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 config/WINNT5.2.mk
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/fdlibm/.cvsignore
  ============================================================================
  $ cvs diff -u -rMOZILLA -rMOZILLA fdlibm/.cvsignore
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/fdlibm/fdlibm.h
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 fdlibm/fdlibm.h
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/js.c
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 js.c
  --- ossp-pkg/js/src/js.c	6 Jan 2006 16:49:15 -0000	1.1.1.1
  +++ ossp-pkg/js/src/js.c	4 Apr 2006 14:09:44 -0000	1.1.1.2
  @@ -548,12 +548,6 @@
       return JS_TRUE;
   }
   
  -static void
  -my_LoadErrorReporter(JSContext *cx, const char *message, JSErrorReport *report);
  -
  -static void
  -my_ErrorReporter(JSContext *cx, const char *message, JSErrorReport *report);
  -
   static JSBool
   Load(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
   {
  @@ -563,7 +557,6 @@
       JSScript *script;
       JSBool ok;
       jsval result;
  -    JSErrorReporter older;
       uint32 oldopts;
   
       for (i = 0; i < argc; i++) {
  @@ -573,7 +566,6 @@
           argv[i] = STRING_TO_JSVAL(str);
           filename = JS_GetStringBytes(str);
           errno = 0;
  -        older = JS_SetErrorReporter(cx, my_LoadErrorReporter);
           oldopts = JS_GetOptions(cx);
           JS_SetOptions(cx, oldopts | JSOPTION_COMPILE_N_GO);
           script = JS_CompileFile(cx, obj, filename);
  @@ -586,7 +578,6 @@
               JS_DestroyScript(cx, script);
           }
           JS_SetOptions(cx, oldopts);
  -        JS_SetErrorReporter(cx, older);
           if (!ok)
               return JS_FALSE;
       }
  @@ -1565,6 +1556,54 @@
       return JS_NewNumberValue(cx, i, rval);
   }
   
  +static JSBool
  +StringsAreUtf8(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
  +               jsval *rval)
  +{
  +    *rval = JS_CStringsAreUTF8() ? JSVAL_TRUE : JSVAL_FALSE;
  +    return JS_TRUE;
  +}
  +
  +static const char* badUtf8 = "...\xC0...";
  +static const char* bigUtf8 = "...\xFB\xBF\xBF\xBF\xBF...";
  +static const jschar badSurrogate[] = { 'A', 'B', 'C', 0xDEEE, 'D', 'E', 0 };
  +
  +static JSBool
  +TestUtf8(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
  +{
  +    intN mode = 1;
  +    jschar chars[20];
  +    size_t charsLength = 5;
  +    char bytes[20];
  +    size_t bytesLength = 20;
  +    if (argc && !JS_ValueToInt32(cx, *argv, &mode))
  +        return JS_FALSE;
  +
  +    /* The following throw errors if compiled with UTF-8. */
  +    switch (mode) {
  +      /* mode 1: malformed UTF-8 string. */
  +      case 1: 
  +        JS_NewStringCopyZ(cx, badUtf8); 
  +        break;
  +      /* mode 2: big UTF-8 character. */
  +      case 2: 
  +        JS_NewStringCopyZ(cx, bigUtf8); 
  +        break;
  +      /* mode 3: bad surrogate character. */
  +      case 3: 
  +        JS_EncodeCharacters(cx, badSurrogate, 6, bytes, &bytesLength); 
  +        break;
  +      /* mode 4: use a too small buffer. */
  +      case 4: 
  +        JS_DecodeBytes(cx, "1234567890", 10, chars, &charsLength); 
  +        break;
  +      default:
  +        JS_ReportError(cx, "invalid mode parameter");
  +        return JS_FALSE;
  +    }
  +    return !JS_IsExceptionPending (cx);
  +}
  +
   static JSFunctionSpec shell_functions[] = {
       {"version",         Version,        0},
       {"options",         Options,        0},
  @@ -1578,6 +1617,8 @@
       {"untrap",          Untrap,         2},
       {"line2pc",         LineToPC,       0},
       {"pc2line",         PCToLine,       0},
  +    {"stringsAreUtf8",  StringsAreUtf8, 0},
  +    {"testUtf8",        TestUtf8,       1},
   #ifdef DEBUG
       {"dis",             Disassemble,    1},
       {"dissrc",          DisassWithSrc,  1},
  @@ -1617,6 +1658,8 @@
       "untrap(fun[, pc])      Remove a trap",
       "line2pc([fun,] line)   Map line number to PC",
       "pc2line(fun[, pc])     Map PC to line number",
  +    "stringsAreUTF8()       Check if strings are UTF-8 encoded",
  +    "testUTF8(mode)         Perform UTF-8 tests (modes are 1 to 4)",
   #ifdef DEBUG
       "dis([fun])             Disassemble functions into bytecodes",
       "dissrc([fun])          Disassemble functions with source lines",
  @@ -1644,14 +1687,14 @@
   static void
   ShowHelpHeader(void)
   {
  -    fprintf(gOutFile, "%-9s %-22s %s\n", "Command", "Usage", "Description");
  -    fprintf(gOutFile, "%-9s %-22s %s\n", "=======", "=====", "===========");
  +    fprintf(gOutFile, "%-14s %-22s %s\n", "Command", "Usage", "Description");
  +    fprintf(gOutFile, "%-14s %-22s %s\n", "=======", "=====", "===========");
   }
   
   static void
   ShowHelpForCommand(uintN n)
   {
  -    fprintf(gOutFile, "%-9.9s %s\n", shell_functions[n].name, shell_help_messages[n]);
  +    fprintf(gOutFile, "%-14.14s %s\n", shell_functions[n].name, shell_help_messages[n]);
   }
   
   static JSBool
  @@ -1923,22 +1966,6 @@
   }
   
   static void
  -my_LoadErrorReporter(JSContext *cx, const char *message, JSErrorReport *report)
  -{
  -    if (!report) {
  -        fprintf(gErrFile, "%s\n", message);
  -        return;
  -    }
  -
  -    /* Ignore any exceptions */
  -    if (JSREPORT_IS_EXCEPTION(report->flags))
  -        return;
  -
  -    /* Otherwise, fall back to the ordinary error reporter. */
  -    my_ErrorReporter(cx, message, report);
  -}
  -
  -static void
   my_ErrorReporter(JSContext *cx, const char *message, JSErrorReport *report)
   {
       int i, j, k, n;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/js.msg
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 js.msg
  --- ossp-pkg/js/src/js.msg	16 Jun 2006 00:51:06 -0000	1.1.1.1
  +++ ossp-pkg/js/src/js.msg	4 Apr 2006 14:09:44 -0000	1.1.1.2
  @@ -281,4 +281,7 @@
   MSG_DEF(JSMSG_TOO_MANY_FUN_VARS,      199, 0, JSEXN_SYNTAXERR, "too many local variables")
   MSG_DEF(JSMSG_ARRAY_INIT_TOO_BIG,     200, 0, JSEXN_INTERNALERR, "array initialiser too large")
   MSG_DEF(JSMSG_REGEXP_TOO_COMPLEX,     201, 0, JSEXN_INTERNALERR, "regular expression too complex")
  -MSG_DEF(JSMSG_WRONG_CONSTRUCTOR,      202, 1, JSEXN_TYPEERR, "wrong construtor called for {0}")
  +MSG_DEF(JSMSG_BUFFER_TOO_SMALL,       202, 0, JSEXN_INTERNALERR, "buffer too small")
  +MSG_DEF(JSMSG_BAD_SURROGATE_CHAR,     203, 1, JSEXN_TYPEERR, "bad surrogate character {0}")
  +MSG_DEF(JSMSG_UTF8_CHAR_TOO_LARGE,    204, 1, JSEXN_TYPEERR, "UTF-8 character {0} too large")
  +MSG_DEF(JSMSG_MALFORMED_UTF8_CHAR,    205, 1, JSEXN_TYPEERR, "malformed UTF-8 character sequence at offset {0}")
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsapi.c
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 jsapi.c
  --- ossp-pkg/js/src/jsapi.c	16 Jun 2006 02:01:22 -0000	1.1.1.1
  +++ ossp-pkg/js/src/jsapi.c	4 Apr 2006 14:09:44 -0000	1.1.1.2
  @@ -884,6 +884,10 @@
       /* XXXbe give the GC or another request calling it a chance to run here?
                Assumes FIFO scheduling */
       JS_LOCK_GC(rt);
  +    if (rt->gcThread != cx->thread) {
  +        while (rt->gcLevel > 0)
  +            JS_AWAIT_GC_DONE(rt);
  +    }
       rt->requestCount++;
       JS_UNLOCK_GC(rt);
   }
  @@ -1465,7 +1469,7 @@
   AddAtomToArray(JSContext *cx, JSAtom *atom, JSIdArray *ida, jsint *ip)
   {
       jsint i, length;
  -    
  +
       i = *ip;
       length = ida->length;
       if (i >= length) {
  @@ -1843,7 +1847,7 @@
       bytes = rt->gcBytes;
       lastBytes = rt->gcLastBytes;
       if ((bytes > 8192 && bytes > lastBytes + lastBytes / 2) ||
  -        rt->gcMallocBytes > rt->gcMaxMallocBytes) {
  +        rt->gcMallocBytes > rt->gcMaxBytes) {
           /*
            * Run the GC if we have half again as many bytes of GC-things as
            * the last time we GC'd, or if we have malloc'd more bytes through
  @@ -1877,19 +1881,6 @@
       return js_IsAboutToBeFinalized(cx, thing);
   }
   
  -JS_PUBLIC_API(void)
  -JS_SetGCParameter(JSRuntime *rt, JSGCParamKey key, uint32 value)
  -{
  -    switch (key) {
  -      case JSGC_MAX_BYTES:
  -        rt->gcMaxBytes = value;
  -        break;
  -      case JSGC_MAX_MALLOC_BYTES:
  -        rt->gcMaxMallocBytes = value;
  -        break;
  -    }
  -}
  -
   JS_PUBLIC_API(intN)
   JS_AddExternalStringFinalizer(JSStringFinalizeOp finalizer)
   {
  @@ -2295,7 +2286,7 @@
       scope = js_GetMutableScope(cx, obj);
       if (scope)
           SCOPE_SET_SEALED(scope);
  -    JS_UNLOCK_SCOPE(cx, scope);
  +    JS_UNLOCK_OBJ(cx, obj);
       if (!scope)
           return JS_FALSE;
   
  @@ -3200,7 +3191,7 @@
       void *pdata;
       jsint index;
       JSIdArray *ida;
  -    
  +
       CHECK_REQUEST(cx);
       iterobj = js_NewObject(cx, &prop_iter_class, NULL, obj);
       if (!iterobj)
  @@ -3276,7 +3267,7 @@
           ida = (JSIdArray *) JS_GetPrivate(cx, iterobj);
           JS_ASSERT(i <= ida->length);
           if (i == 0) {
  -            *idp = JSVAL_VOID; 
  +            *idp = JSVAL_VOID;
           } else {
               *idp = ida->vector[--i];
               OBJ_SET_SLOT(cx, iterobj, JSSLOT_ITER_INDEX, INT_TO_JSVAL(i));
  @@ -3441,12 +3432,6 @@
       return fun->flags;
   }
   
  -JS_PUBLIC_API(uint16)
  -JS_GetFunctionArity(JSFunction *fun)
  -{
  -    return fun->nargs;
  -}
  -
   JS_PUBLIC_API(JSBool)
   JS_ObjectIsFunction(JSContext *cx, JSObject *obj)
   {
  @@ -3626,7 +3611,7 @@
       JSScript *script;
   
       CHECK_REQUEST(cx);
  -    chars = js_InflateString(cx, bytes, length);
  +    chars = js_InflateString(cx, bytes, &length);
       if (!chars)
           return NULL;
       script = JS_CompileUCScript(cx, obj, chars, length, filename, lineno);
  @@ -3644,7 +3629,7 @@
       JSScript *script;
   
       CHECK_REQUEST(cx);
  -    chars = js_InflateString(cx, bytes, length);
  +    chars = js_InflateString(cx, bytes, &length);
       if (!chars)
           return NULL;
       script = JS_CompileUCScriptForPrincipals(cx, obj, principals,
  @@ -3713,7 +3698,7 @@
       JSErrorReporter older;
   
       CHECK_REQUEST(cx);
  -    chars = js_InflateString(cx, bytes, length);
  +    chars = js_InflateString(cx, bytes, &length);
       if (!chars)
           return JS_TRUE;
   
  @@ -3836,7 +3821,7 @@
       JSFunction *fun;
   
       CHECK_REQUEST(cx);
  -    chars = js_InflateString(cx, bytes, length);
  +    chars = js_InflateString(cx, bytes, &length);
       if (!chars)
           return NULL;
       fun = JS_CompileUCFunction(cx, obj, name, nargs, argnames, chars, length,
  @@ -3856,7 +3841,7 @@
       JSFunction *fun;
   
       CHECK_REQUEST(cx);
  -    chars = js_InflateString(cx, bytes, length);
  +    chars = js_InflateString(cx, bytes, &length);
       if (!chars)
           return NULL;
       fun = JS_CompileUCFunctionForPrincipals(cx, obj, principals, name,
  @@ -4061,7 +4046,7 @@
       JSBool ok;
   
       CHECK_REQUEST(cx);
  -    chars = js_InflateString(cx, bytes, length);
  +    chars = js_InflateString(cx, bytes, &length);
       if (!chars)
           return JS_FALSE;
       ok = JS_EvaluateUCScript(cx, obj, chars, length, filename, lineno, rval);
  @@ -4080,7 +4065,7 @@
       JSBool ok;
   
       CHECK_REQUEST(cx);
  -    chars = js_InflateString(cx, bytes, length);
  +    chars = js_InflateString(cx, bytes, &length);
       if (!chars)
           return JS_FALSE;
       ok = JS_EvaluateUCScriptForPrincipals(cx, obj, principals, chars, length,
  @@ -4230,15 +4215,16 @@
   {
       jschar *chars;
       JSString *str;
  +    size_t charsLength = length;
   
       CHECK_REQUEST(cx);
       /* Make a Unicode vector from the 8-bit char codes in bytes. */
  -    chars = js_InflateString(cx, bytes, length);
  +    chars = js_InflateString(cx, bytes, &charsLength);
       if (!chars)
           return NULL;
   
       /* Free chars (but not bytes, which caller frees on error) if we fail. */
  -    str = js_NewString(cx, chars, length, 0);
  +    str = js_NewString(cx, chars, charsLength, 0);
       if (!str) {
           JS_free(cx, chars);
           return NULL;
  @@ -4257,7 +4243,7 @@
       JSString *str;
   
       CHECK_REQUEST(cx);
  -    js = js_InflateString(cx, s, n);
  +    js = js_InflateString(cx, s, &n);
       if (!js)
           return NULL;
       str = js_NewString(cx, js, n, 0);
  @@ -4277,7 +4263,7 @@
       if (!s)
           return cx->runtime->emptyString;
       n = strlen(s);
  -    js = js_InflateString(cx, s, n);
  +    js = js_InflateString(cx, s, &n);
       if (!js)
           return NULL;
       str = js_NewString(cx, js, n, 0);
  @@ -4421,6 +4407,30 @@
       return JS_TRUE;
   }
   
  +JS_PUBLIC_API(JSBool)
  +JS_EncodeCharacters(JSContext *cx, const jschar *src, size_t srclen, char *dst,
  +                    size_t *dstlenp)
  +{
  +    return js_DeflateStringToBuffer(cx, src, srclen, dst, dstlenp);
  +}
  +
  +JS_PUBLIC_API(JSBool)
  +JS_DecodeBytes(JSContext *cx, const char *src, size_t srclen, jschar *dst,
  +               size_t *dstlenp)
  +{
  +    return js_InflateStringToBuffer(cx, src, srclen, dst, dstlenp);
  +}
  +
  +JS_PUBLIC_API(JSBool)
  +JS_CStringsAreUTF8()
  +{
  +#ifdef JS_C_STRINGS_ARE_UTF8
  +    return JS_TRUE;
  +#else
  +    return JS_FALSE;
  +#endif
  +}
  +
   /************************************************************************/
   
   JS_PUBLIC_API(void)
  @@ -4502,7 +4512,7 @@
   JS_PUBLIC_API(void)
   JS_ReportOutOfMemory(JSContext *cx)
   {
  -    js_ReportOutOfMemory(cx, js_GetErrorMessage);
  +    js_ReportOutOfMemory(cx);
   }
   
   JS_PUBLIC_API(JSErrorReporter)
  @@ -4528,7 +4538,7 @@
       JSObject *obj;
   
       CHECK_REQUEST(cx);
  -    chars = js_InflateString(cx, bytes, length);
  +    chars = js_InflateString(cx, bytes, &length);
       if (!chars)
           return NULL;
       obj = js_NewRegExpObject(cx, NULL, chars, length, flags);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsapi.h
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 jsapi.h
  --- ossp-pkg/js/src/jsapi.h	16 Jun 2006 02:01:22 -0000	1.1.1.1
  +++ ossp-pkg/js/src/jsapi.h	4 Apr 2006 14:09:44 -0000	1.1.1.2
  @@ -739,14 +739,6 @@
   extern JS_PUBLIC_API(JSBool)
   JS_IsAboutToBeFinalized(JSContext *cx, void *thing);
   
  -typedef enum JSGCParamKey {
  -    JSGC_MAX_BYTES        = 0,  /* maximum nominal heap before last ditch GC */
  -    JSGC_MAX_MALLOC_BYTES = 1   /* # of JS_malloc bytes before last ditch GC */
  -} JSGCParamKey;
  -
  -extern JS_PUBLIC_API(void)
  -JS_SetGCParameter(JSRuntime *rt, JSGCParamKey key, uint32 value);
  -
   /*
    * Add a finalizer for external strings created by JS_NewExternalString (see
    * below) using a type-code returned from this function, and that understands
  @@ -1393,12 +1385,6 @@
   JS_GetFunctionFlags(JSFunction *fun);
   
   /*
  - * Return the arity (length) of fun.
  - */
  -extern JS_PUBLIC_API(uint16)
  -JS_GetFunctionArity(JSFunction *fun);
  -
  -/*
    * Infallible predicate to test whether obj is a function object (faster than
    * comparing obj's class name to "Function", but equivalent unless someone has
    * overwritten the "Function" identifier with a different constructor and then
  @@ -1764,16 +1750,55 @@
   extern JS_PUBLIC_API(JSBool)
   JS_MakeStringImmutable(JSContext *cx, JSString *str);
   
  +/*
  + * Return JS_TRUE if C (char []) strings passed via the API and internally
  + * are UTF-8. The source must be compiled with JS_C_STRINGS_ARE_UTF8 defined
  + * to get UTF-8 support.
  + */
  +JS_PUBLIC_API(JSBool)
  +JS_CStringsAreUTF8();
  +
  +/*
  + * Character encoding support.
  + *
  + * For both JS_EncodeCharacters and JS_DecodeBytes, set *dstlenp to the size
  + * of the destination buffer before the call; on return, *dstlenp contains the
  + * number of bytes (JS_EncodeCharacters) or jschars (JS_DecodeBytes) actually
  + * stored.  To determine the necessary destination buffer size, make a sizing
  + * call that passes NULL for dst.
  + *
  + * On errors, the functions report the error. In that case, *dstlenp contains
  + * the number of characters or bytes transferred so far.  If cx is NULL, no
  + * error is reported on failure, and the functions simply return JS_FALSE.
  + *
  + * NB: Neither function stores an additional zero byte or jschar after the
  + * transcoded string.
  + *
  + * If the source has been compiled with the #define JS_C_STRINGS_ARE_UTF8 to
  + * enable UTF-8 interpretation of C char[] strings, then JS_EncodeCharacters
  + * encodes to UTF-8, and JS_DecodeBytes decodes from UTF-8, which may create
  + * addititional errors if the character sequence is malformed.  If UTF-8
  + * support is disabled, the functions deflate and inflate, respectively.
  + */
  +JS_PUBLIC_API(JSBool)
  +JS_EncodeCharacters(JSContext *cx, const jschar *src, size_t srclen, char *dst,
  +                    size_t *dstlenp);
  +
  +JS_PUBLIC_API(JSBool)
  +JS_DecodeBytes(JSContext *cx, const char *src, size_t srclen, jschar *dst,
  +               size_t *dstlenp);
  +
   /************************************************************************/
   
   /*
  - * Locale specific string conversion callback.
  + * Locale specific string conversion and error message callbacks.
    */
   struct JSLocaleCallbacks {
       JSLocaleToUpperCase     localeToUpperCase;
       JSLocaleToLowerCase     localeToLowerCase;
       JSLocaleCompare         localeCompare;
       JSLocaleToUnicode       localeToUnicode;
  +    JSErrorCallback         localeGetErrorMessage;
   };
   
   /*
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsarena.c
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 jsarena.c
  --- ossp-pkg/js/src/jsarena.c	16 Jun 2006 01:09:56 -0000	1.1.1.1
  +++ ossp-pkg/js/src/jsarena.c	23 Feb 2005 21:36:10 -0000	1.1.1.2
  @@ -171,8 +171,7 @@
        * https://bugzilla.mozilla.org/show_bug.cgi?id=279273.
        */
       JS_ASSERT((nb & pool->mask) == 0);
  -    for (a = pool->current; nb > a->limit || a->avail > a->limit - nb;
  -         pool->current = a) {
  +    for (a = pool->current; a->avail > a->limit - nb; pool->current = a) {
           ap = &a->next;
           if (!*ap) {
               /* Not enough space in pool -- try to reclaim a free arena. */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsarena.h
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 jsarena.h
  --- ossp-pkg/js/src/jsarena.h	2 Jul 2006 03:05:20 -0000	1.1.1.1
  +++ ossp-pkg/js/src/jsarena.h	23 Feb 2005 21:36:10 -0000	1.1.1.2
  @@ -113,12 +113,10 @@
       JS_ARENA_ALLOCATE_CAST(p, void *, pool, nb)
   
   #define JS_ARENA_ALLOCATE_TYPE(p, type, pool)                                 \
  -    JS_ARENA_ALLOCATE_COMMON(p, type *, pool, sizeof(type), 0)
  -
  -#define JS_ARENA_ALLOCATE_CAST(p, type, pool, nb)                             \
  -    JS_ARENA_ALLOCATE_COMMON(p, type, pool, nb, _nb > _a->limit)
  +    JS_ARENA_ALLOCATE_CAST(p, type *, pool, sizeof(type))
   
   /*
  + *
    * NB: In JS_ARENA_ALLOCATE_CAST and JS_ARENA_GROW_CAST, always subtract _nb
    * from a->limit rather than adding _nb to _p, to avoid overflowing a 32-bit
    * address space (possible when running a 32-bit program on a 64-bit system
  @@ -128,12 +126,12 @@
    * Thanks to Juergen Kreileder <jk@blackdown.de>, who brought this up in
    * https://bugzilla.mozilla.org/show_bug.cgi?id=279273.
    */
  -#define JS_ARENA_ALLOCATE_COMMON(p, type, pool, nb, guard)                    \
  +#define JS_ARENA_ALLOCATE_CAST(p, type, pool, nb)                             \
       JS_BEGIN_MACRO                                                            \
           JSArena *_a = (pool)->current;                                        \
           size_t _nb = JS_ARENA_ALIGN(pool, nb);                                \
           jsuword _p = _a->avail;                                               \
  -        if ((guard) || _p > _a->limit - _nb)                                  \
  +        if (_p > _a->limit - _nb)                                             \
               _p = (jsuword)JS_ArenaAllocate(pool, _nb);                        \
           else                                                                  \
               _a->avail = _p + _nb;                                             \
  @@ -150,7 +148,7 @@
           if (_a->avail == (jsuword)(p) + JS_ARENA_ALIGN(pool, size)) {         \
               size_t _nb = (size) + (incr);                                     \
               _nb = JS_ARENA_ALIGN(pool, _nb);                                  \
  -            if (_a->limit >= _nb && (jsuword)(p) <= _a->limit - _nb) {        \
  +            if ((jsuword)(p) <= _a->limit - _nb) {                            \
                   _a->avail = (jsuword)(p) + _nb;                               \
                   JS_ArenaCountInplaceGrowth(pool, size, incr);                 \
               } else if ((jsuword)(p) == _a->base) {                            \
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsarray.c
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 jsarray.c
  --- ossp-pkg/js/src/jsarray.c	2 Jul 2006 04:46:09 -0000	1.1.1.1
  +++ ossp-pkg/js/src/jsarray.c	1 Nov 2005 01:14:28 -0000	1.1.1.2
  @@ -475,18 +475,9 @@
           }
   
           /* Allocate 3 + 1 at end for ", ", closing bracket, and zero. */
  -        tmplen = JSSTRING_LENGTH(str);
  -        growth = (nchars + (sepstr ? seplen : 0) + tmplen + 3 + 1);
  -        if (nchars > growth || tmplen > growth ||
  -            growth > (size_t)-1 / sizeof(jschar)) {
  -            if (chars) {
  -                free(chars);
  -                chars = NULL;
  -            }
  -            JS_ReportOutOfMemory(cx);
  -            goto done;
  -        }
  -        growth *= sizeof(jschar);
  +        growth = (nchars + (sepstr ? seplen : 0) +
  +                  JSSTRING_LENGTH(str) +
  +                  3 + 1) * sizeof(jschar);
           if (!chars) {
               chars = (jschar *) malloc(growth);
               if (!chars)
  @@ -505,6 +496,7 @@
           }
           sepstr = JSSTRING_CHARS(sep);
   
  +        tmplen = JSSTRING_LENGTH(str);
           js_strncpy(&chars[nchars], JSSTRING_CHARS(str), tmplen);
           nchars += tmplen;
       }
  @@ -647,23 +639,12 @@
       jsuint len, half, i;
       jsid id, id2;
       jsval *tmproot, *tmproot2;
  -    JSBool idexists, id2exists, ok;
  +    JSBool idexists, id2exists;
   
       if (!js_GetLengthProperty(cx, obj, &len))
           return JS_FALSE;
   
       /*
  -     * When len > JSVAL_INT_MAX + 1 the loop below accesses indexes greater
  -     * than JSVAL_INT_MAX. For such indexes the corresponding ids are atoms.
  -     * We use JS_KEEP_ATOMS to protect them against GC since OBJ_GET_PROPERTY
  -     * can potentially execute an arbitrary script. See bug 341956.
  -     *
  -     * After this point control must flow through label out: to exit.
  -     */
  -    if (len > JSVAL_INT_MAX + 1)
  -        JS_KEEP_ATOMS(cx->runtime);
  -
  -    /*
        * Use argv[argc] and argv[argc + 1] as local roots to hold temporarily
        * array elements for GC-safe swap.
        */
  @@ -671,51 +652,44 @@
       tmproot2 = argv + argc + 1;
       half = len / 2;
       for (i = 0; i < half; i++) {
  -        /*
  -         * Get both values while checking for holes to make sure they don't
  -         * get filled.
  -         */
           if (!IndexToId(cx, i, &id))
  -            goto bad;
  -        if (!PropertyExists(cx, obj, id, &idexists))
  -            goto bad;
  -        if (idexists && !OBJ_GET_PROPERTY(cx, obj, id, tmproot))
  -            goto bad;
  -
  +            return JS_FALSE;
           if (!IndexToId(cx, len - i - 1, &id2))
  -            goto bad;
  -        if (!PropertyExists(cx, obj, id2, &id2exists))
  -            goto bad;
  -        if (id2exists && !OBJ_GET_PROPERTY(cx, obj, id2, tmproot2))
  -            goto bad;
  +            return JS_FALSE;
  +
  +        /* Check for holes to make sure they don't get filled. */
  +        if (!PropertyExists(cx, obj, id, &idexists) ||
  +            !PropertyExists(cx, obj, id2, &id2exists)) {
  +            return JS_FALSE;
  +        }
  +
  +        /*
  +         * Get both of the values now. Note that we don't use v, or v2 based on
  +         * idexists and id2exists.
  +         */
  +        if (!OBJ_GET_PROPERTY(cx, obj, id, tmproot) ||
  +            !OBJ_GET_PROPERTY(cx, obj, id2, tmproot2)) {
  +            return JS_FALSE;
  +        }
   
  -        /* Exchange the values. */
           if (idexists) {
               if (!OBJ_SET_PROPERTY(cx, obj, id2, tmproot))
  -                goto bad;
  +                return JS_FALSE;
           } else {
               if (!OBJ_DELETE_PROPERTY(cx, obj, id2, tmproot))
  -                goto bad;
  +                return JS_FALSE;
           }
           if (id2exists) {
               if (!OBJ_SET_PROPERTY(cx, obj, id, tmproot2))
  -                goto bad;
  +                return JS_FALSE;
           } else {
               if (!OBJ_DELETE_PROPERTY(cx, obj, id, tmproot2))
  -                goto bad;
  +                return JS_FALSE;
           }
       }
  -    ok = JS_TRUE;
   
  -  out:
  -    if (len > JSVAL_INT_MAX + 1)
  -        JS_UNKEEP_ATOMS(cx->runtime);
       *rval = OBJECT_TO_JSVAL(obj);
  -    return ok;
  -
  -  bad:
  -    ok = JS_FALSE;
  -    goto out;
  +    return JS_TRUE;
   }
   
   typedef struct HSortArgs {
  @@ -1062,26 +1036,20 @@
   {
       jsuint index;
       jsid id;
  -    JSBool ok;
       jsval junk;
   
       if (!js_GetLengthProperty(cx, obj, &index))
           return JS_FALSE;
       if (index > 0) {
           index--;
  +        if (!IndexToId(cx, index, &id))
  +            return JS_FALSE;
   
           /* Get the to-be-deleted property's value into rval. */
  -        if (!IndexToId(cx, index, &id))
  +        if (!OBJ_GET_PROPERTY(cx, obj, id, rval))
               return JS_FALSE;
   
  -        /* See comments in array_reverse. */
  -        if (index > JSVAL_INT_MAX)
  -            JS_KEEP_ATOMS(cx->runtime);
  -        ok = OBJ_GET_PROPERTY(cx, obj, id, rval) &&
  -             OBJ_DELETE_PROPERTY(cx, obj, id, &junk);
  -        if (index > JSVAL_INT_MAX)
  -            JS_UNKEEP_ATOMS(cx->runtime);
  -        if (!ok)
  +        if (!OBJ_DELETE_PROPERTY(cx, obj, id, &junk))
               return JS_FALSE;
       }
       return js_SetLengthProperty(cx, obj, index);
  @@ -1111,12 +1079,10 @@
               for (i = 1; i <= length; i++) {
                   if (!IndexToId(cx, i, &id))
                       return JS_FALSE;
  -                if (!OBJ_GET_PROPERTY(cx, obj, id, &argv[0]))
  -                    return JS_FALSE;
  -
  -                /* Get id after value to avoid nested GC hazards. */
                   if (!IndexToId(cx, i - 1, &id2))
                       return JS_FALSE;
  +                if (!OBJ_GET_PROPERTY(cx, obj, id, &argv[0]))
  +                    return JS_FALSE;
                   if (!OBJ_SET_PROPERTY(cx, obj, id2, &argv[0]))
                       return JS_FALSE;
               }
  @@ -1148,21 +1114,16 @@
               while (last--) {
                   if (!IndexToExistingId(cx, obj, last, &id))
                       return JS_FALSE;
  -                if (id != JSID_HOLE) {
  -                    if (!OBJ_GET_PROPERTY(cx, obj, id, vp))
  -                        return JS_FALSE;
  +                if (id == JSID_HOLE) {
  +                    OBJ_DELETE_PROPERTY(cx, obj, id2, &junk);
  +                    continue;
                   }
  -
  -                /* Get id after value to avoid nested GC hazards. */
  +                if (!OBJ_GET_PROPERTY(cx, obj, id, vp))
  +                    return JS_FALSE;
                   if (!IndexToId(cx, last + argc, &id2))
                       return JS_FALSE;
  -                if (id == JSID_HOLE) {
  -                    if (!OBJ_DELETE_PROPERTY(cx, obj, id2, &junk))
  -                        return JS_FALSE;
  -                } else {
  -                    if (!OBJ_SET_PROPERTY(cx, obj, id2, vp))
  -                        return JS_FALSE;
  -                }
  +                if (!OBJ_SET_PROPERTY(cx, obj, id2, vp))
  +                    return JS_FALSE;
               }
           }
   
  @@ -1274,8 +1235,6 @@
                           continue;       /* don't fill holes in the new array */
                       if (!OBJ_GET_PROPERTY(cx, obj, id, vp))
                           return JS_FALSE;
  -
  -                    /* Get id after value to avoid nested GC hazards. */
                       if (!IndexToId(cx, last - begin, &id2))
                           return JS_FALSE;
                       if (!OBJ_SET_PROPERTY(cx, obj2, id2, vp))
  @@ -1296,15 +1255,11 @@
           while (last-- > end) {
               if (!IndexToExistingId(cx, obj, last, &id))
                   return JS_FALSE;
  -            if (id != JSID_HOLE) {
  -                if (!OBJ_GET_PROPERTY(cx, obj, id, vp))
  -                    return JS_FALSE;
  -            }
  -
  -            /* Get id after value to avoid nested GC hazards. */
               if (!IndexToId(cx, last + delta, &id2))
                   return JS_FALSE;
               if (id != JSID_HOLE) {
  +                if (!OBJ_GET_PROPERTY(cx, obj, id, vp))
  +                    return JS_FALSE;
                   if (!OBJ_SET_PROPERTY(cx, obj, id2, vp))
                       return JS_FALSE;
               } else {
  @@ -1318,15 +1273,11 @@
           for (last = end; last < length; last++) {
               if (!IndexToExistingId(cx, obj, last, &id))
                   return JS_FALSE;
  -            if (id != JSID_HOLE) {
  -                if (!OBJ_GET_PROPERTY(cx, obj, id, vp))
  -                    return JS_FALSE;
  -            }
  -
  -            /* Get id after value to avoid nested GC hazards. */
               if (!IndexToId(cx, last - delta, &id2))
                   return JS_FALSE;
               if (id != JSID_HOLE) {
  +                if (!OBJ_GET_PROPERTY(cx, obj, id, vp))
  +                    return JS_FALSE;
                   if (!OBJ_SET_PROPERTY(cx, obj, id2, vp))
                       return JS_FALSE;
               } else {
  @@ -1403,8 +1354,6 @@
                       }
                       if (!OBJ_GET_PROPERTY(cx, aobj, id, vp))
                           return JS_FALSE;
  -
  -                    /* Get id after value to avoid nested GC hazards. */
                       if (!IndexToId(cx, length + slot, &id2))
                           return JS_FALSE;
                       if (!OBJ_SET_PROPERTY(cx, nobj, id2, vp))
  @@ -1487,8 +1436,6 @@
               continue;
           if (!OBJ_GET_PROPERTY(cx, obj, id, vp))
               return JS_FALSE;
  -
  -        /* Get id after value to avoid nested GC hazards. */
           if (!IndexToId(cx, slot - begin, &id2))
               return JS_FALSE;
           if (!OBJ_SET_PROPERTY(cx, nobj, id2, vp))
  @@ -1645,7 +1592,10 @@
               return JS_FALSE;
           argv[1] = OBJECT_TO_JSVAL(thisp);
       } else {
  -        thisp = NULL;
  +        JSObject *tmp;
  +        thisp = callable;
  +        while ((tmp = OBJ_GET_PARENT(cx, thisp)) != NULL)
  +            thisp = tmp;
       }
   
       /* We call with 3 args (value, index, array), plus room for rval. */
  @@ -1670,11 +1620,7 @@
           if (!ok)
               break;
   
  -        /*
  -         * Push callable and 'this', then args. We must do this for every
  -         * iteration around the loop since js_Invoke uses origsp[0] for rval
  -         * storage and some native functions use origsp[1] for local rooting.
  -         */
  +        /* Push callable and 'this', then args. */
           sp = origsp;
           *sp++ = OBJECT_TO_JSVAL(callable);
           *sp++ = OBJECT_TO_JSVAL(thisp);
  @@ -1706,15 +1652,6 @@
             case FOREACH:
               break;
             case MAP:
  -            /*
  -             * We reconstruct id once again when it is a GC thing since scripts
  -             * can trigger GC that collects it. See bug 341956.
  -             */
  -            if (i > JSVAL_INT_MAX) {
  -                ok = IndexToId(cx, i, &id);
  -                if (!ok)
  -                    goto out;
  -            }
               ok = OBJ_SET_PROPERTY(cx, newarr, id, &rval2);
               if (!ok)
                   goto out;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsatom.c
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 jsatom.c
  --- ossp-pkg/js/src/jsatom.c	22 Aug 2005 17:36:57 -0000	1.1.1.1
  +++ ossp-pkg/js/src/jsatom.c	4 Apr 2006 14:09:45 -0000	1.1.1.2
  @@ -719,12 +719,15 @@
        */
   #define ATOMIZE_BUF_MAX 32
       jschar inflated[ATOMIZE_BUF_MAX];
  +    size_t inflatedLength = ATOMIZE_BUF_MAX - 1;
   
       if (length < ATOMIZE_BUF_MAX) {
  -        js_InflateStringToBuffer(inflated, bytes, length);
  +        js_InflateStringToBuffer(cx, bytes, length, inflated, &inflatedLength);
  +        inflated[inflatedLength] = 0;
           chars = inflated;
       } else {
  -        chars = js_InflateString(cx, bytes, length);
  +        inflatedLength = length;
  +        chars = js_InflateString(cx, bytes, &inflatedLength);
           if (!chars)
               return NULL;
           flags |= ATOM_NOCOPY;
  @@ -733,7 +736,7 @@
       str = ALIGN(buf, JSString);
   
       str->chars = chars;
  -    str->length = length;
  +    str->length = inflatedLength;
       atom = js_AtomizeString(cx, str, ATOM_TMPSTR | flags);
       if (chars != inflated && (!atom || ATOM_TO_STRING(atom)->chars != chars))
           JS_free(cx, chars);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jscntxt.c
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 jscntxt.c
  --- ossp-pkg/js/src/jscntxt.c	1 Nov 2005 00:47:49 -0000	1.1.1.1
  +++ ossp-pkg/js/src/jscntxt.c	4 Apr 2006 14:09:45 -0000	1.1.1.2
  @@ -1,4 +1,5 @@
   /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
  + * vim: set ts=8 sw=4 et tw=80:
    *
    * ***** BEGIN LICENSE BLOCK *****
    * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  @@ -712,14 +713,15 @@
    * type message, and then hope the process ends swiftly.
    */
   void
  -js_ReportOutOfMemory(JSContext *cx, JSErrorCallback callback)
  +js_ReportOutOfMemory(JSContext *cx)
   {
       JSStackFrame *fp;
       JSErrorReport report;
       JSErrorReporter onError = cx->errorReporter;
   
       /* Get the message for this error, but we won't expand any arguments. */
  -    const JSErrorFormatString *efs = callback(NULL, NULL, JSMSG_OUT_OF_MEMORY);
  +    const JSErrorFormatString *efs = 
  +        js_GetLocalizedErrorMessage(cx, NULL, NULL, JSMSG_OUT_OF_MEMORY);
       const char *msg = efs ? efs->format : "Out of memory";
   
       /* Fill out the report, but don't do anything that requires allocation. */
  @@ -821,104 +823,112 @@
       }
   
       *messagep = NULL;
  -    if (callback) {
  +
  +    /* Most calls supply js_GetErrorMessage; if this is so, assume NULL. */
  +    if (!callback || callback == js_GetErrorMessage)
  +        efs = js_GetLocalizedErrorMessage(cx, userRef, NULL, errorNumber);
  +    else
           efs = callback(userRef, NULL, errorNumber);
  -        if (efs) {
  -            size_t totalArgsLength = 0;
  -            size_t argLengths[10]; /* only {0} thru {9} supported */
  -            argCount = efs->argCount;
  -            JS_ASSERT(argCount <= 10);
  -            if (argCount > 0) {
  -                /*
  -                 * Gather the arguments into an array, and accumulate
  -                 * their sizes. We allocate 1 more than necessary and
  -                 * null it out to act as the caboose when we free the
  -                 * pointers later.
  -                 */
  -                reportp->messageArgs = (const jschar **)
  -                    JS_malloc(cx, sizeof(jschar *) * (argCount + 1));
  -                if (!reportp->messageArgs)
  -                    return JS_FALSE;
  -                reportp->messageArgs[argCount] = NULL;
  -                for (i = 0; i < argCount; i++) {
  -                    if (charArgs) {
  -                        char *charArg = va_arg(ap, char *);
  -                        reportp->messageArgs[i]
  -                            = js_InflateString(cx, charArg, strlen(charArg));
  -                        if (!reportp->messageArgs[i])
  -                            goto error;
  -                    }
  -                    else
  -                        reportp->messageArgs[i] = va_arg(ap, jschar *);
  -                    argLengths[i] = js_strlen(reportp->messageArgs[i]);
  -                    totalArgsLength += argLengths[i];
  -                }
  -                /* NULL-terminate for easy copying. */
  -                reportp->messageArgs[i] = NULL;
  -            }
  +    if (efs) {
  +        size_t totalArgsLength = 0;
  +        size_t argLengths[10]; /* only {0} thru {9} supported */
  +        argCount = efs->argCount;
  +        JS_ASSERT(argCount <= 10);
  +        if (argCount > 0) {
               /*
  -             * Parse the error format, substituting the argument X
  -             * for {X} in the format.
  +             * Gather the arguments into an array, and accumulate
  +             * their sizes. We allocate 1 more than necessary and
  +             * null it out to act as the caboose when we free the
  +             * pointers later.
                */
  -            if (argCount > 0) {
  -                if (efs->format) {
  -                    const char *fmt;
  -                    const jschar *arg;
  -                    jschar *out;
  -                    int expandedArgs = 0;
  -                    size_t expandedLength
  -                        = strlen(efs->format)
  -                            - (3 * argCount) /* exclude the {n} */
  -                            + totalArgsLength;
  -                    /*
  -                     * Note - the above calculation assumes that each argument
  -                     * is used once and only once in the expansion !!!
  -                     */
  -                    reportp->ucmessage = out = (jschar *)
  -                        JS_malloc(cx, (expandedLength + 1) * sizeof(jschar));
  -                    if (!out)
  -                        goto error;
  -                    fmt = efs->format;
  -                    while (*fmt) {
  -                        if (*fmt == '{') {
  -                            if (isdigit(fmt[1])) {
  -                                int d = JS7_UNDEC(fmt[1]);
  -                                JS_ASSERT(d < argCount);
  -                                arg = reportp->messageArgs[d];
  -                                js_strncpy(out, arg, argLengths[d]);
  -                                out += argLengths[d];
  -                                fmt += 3;
  -                                expandedArgs++;
  -                                continue;
  -                            }
  -                        }
  -                        /*
  -                         * is this kosher?
  -                         */
  -                        *out++ = (unsigned char)(*fmt++);
  -                    }
  -                    JS_ASSERT(expandedArgs == argCount);
  -                    *out = 0;
  -                    *messagep =
  -                        js_DeflateString(cx, reportp->ucmessage,
  -                                         (size_t)(out - reportp->ucmessage));
  -                    if (!*messagep)
  +            reportp->messageArgs = (const jschar **)
  +                JS_malloc(cx, sizeof(jschar *) * (argCount + 1));
  +            if (!reportp->messageArgs)
  +                return JS_FALSE;
  +            reportp->messageArgs[argCount] = NULL;
  +            for (i = 0; i < argCount; i++) {
  +                if (charArgs) {
  +                    char *charArg = va_arg(ap, char *);
  +                    size_t charArgLength = strlen(charArg);
  +                    reportp->messageArgs[i]
  +                        = js_InflateString(cx, charArg, &charArgLength);
  +                    if (!reportp->messageArgs[i])
                           goto error;
  +                } else {
  +                    reportp->messageArgs[i] = va_arg(ap, jschar *);
                   }
  -            } else {
  +                argLengths[i] = js_strlen(reportp->messageArgs[i]);
  +                totalArgsLength += argLengths[i];
  +            }
  +            /* NULL-terminate for easy copying. */
  +            reportp->messageArgs[i] = NULL;
  +        }
  +        /*
  +         * Parse the error format, substituting the argument X
  +         * for {X} in the format.
  +         */
  +        if (argCount > 0) {
  +            if (efs->format) {
  +                jschar *buffer, *fmt, *out;
  +                int expandedArgs = 0;
  +                size_t expandedLength;
  +                size_t len = strlen(efs->format);
  +
  +                buffer = fmt = js_InflateString (cx, efs->format, &len);
  +                if (!buffer)
  +                    goto error;
  +                expandedLength = len
  +                                 - (3 * argCount)       /* exclude the {n} */
  +                                 + totalArgsLength;
  +
                   /*
  -                 * Zero arguments: the format string (if it exists) is the
  -                 * entire message.
  -                 */
  -                if (efs->format) {
  -                    *messagep = JS_strdup(cx, efs->format);
  -                    if (!*messagep)
  -                        goto error;
  -                    reportp->ucmessage
  -                        = js_InflateString(cx, *messagep, strlen(*messagep));
  -                    if (!reportp->ucmessage)
  -                        goto error;
  +                * Note - the above calculation assumes that each argument
  +                * is used once and only once in the expansion !!!
  +                */
  +                reportp->ucmessage = out = (jschar *)
  +                    JS_malloc(cx, (expandedLength + 1) * sizeof(jschar));
  +                if (!out) {
  +                    JS_free (cx, buffer);
  +                    goto error;
  +                }
  +                while (*fmt) {
  +                    if (*fmt == '{') {
  +                        if (isdigit(fmt[1])) {
  +                            int d = JS7_UNDEC(fmt[1]);
  +                            JS_ASSERT(d < argCount);
  +                            js_strncpy(out, reportp->messageArgs[d],
  +                                       argLengths[d]);
  +                            out += argLengths[d];
  +                            fmt += 3;
  +                            expandedArgs++;
  +                            continue;
  +                        }
  +                    }
  +                    *out++ = *fmt++;
                   }
  +                JS_ASSERT(expandedArgs == argCount);
  +                *out = 0;
  +                JS_free (cx, buffer);
  +                *messagep =
  +                    js_DeflateString(cx, reportp->ucmessage,
  +                                     (size_t)(out - reportp->ucmessage));
  +                if (!*messagep)
  +                    goto error;
  +            }
  +        } else {
  +            /*
  +             * Zero arguments: the format string (if it exists) is the
  +             * entire message.
  +             */
  +            if (efs->format) {
  +                size_t len;
  +                *messagep = JS_strdup(cx, efs->format);
  +                if (!*messagep)
  +                    goto error;
  +                len = strlen(*messagep);
  +                reportp->ucmessage = js_InflateString(cx, *messagep, &len);
  +                if (!reportp->ucmessage)
  +                    goto error;
               }
           }
       }
  @@ -992,9 +1002,15 @@
       if (message)
           JS_free(cx, message);
       if (report.messageArgs) {
  -        int i = 0;
  -        while (report.messageArgs[i])
  -            JS_free(cx, (void *)report.messageArgs[i++]);
  +        /*
  +         * js_ExpandErrorArguments owns its messageArgs only if it had to
  +         * inflate the arguments (from regular |char *|s).
  +         */
  +        if (charArgs) {
  +            int i = 0;
  +            while (report.messageArgs[i])
  +                JS_free(cx, (void *)report.messageArgs[i++]);
  +        }
           JS_free(cx, (void *)report.messageArgs);
       }
       if (report.ucmessage)
  @@ -1049,10 +1065,10 @@
   JSErrorFormatString js_ErrorFormatString[JSErr_Limit] = {
   #if JS_HAS_DFLT_MSG_STRINGS
   #define MSG_DEF(name, number, count, exception, format) \
  -    { format, count } ,
  +    { format, count, exception } ,
   #else
   #define MSG_DEF(name, number, count, exception, format) \
  -    { NULL, count } ,
  +    { NULL, count, exception } ,
   #endif
   #include "js.msg"
   #undef MSG_DEF
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jscntxt.h
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 jscntxt.h
  --- ossp-pkg/js/src/jscntxt.h	21 Jun 2006 23:02:59 -0000	1.1.1.1
  +++ ossp-pkg/js/src/jscntxt.h	4 Apr 2006 14:09:45 -0000	1.1.1.2
  @@ -71,11 +71,6 @@
       JSScopeProperty     *child;
   } JSPropertyTreeEntry;
   
  -/*
  - * Forward declaration for opaque JSRuntime.nativeIteratorStates.
  - */
  -typedef struct JSNativeIteratorState JSNativeIteratorState;
  -
   struct JSRuntime {
       /* Runtime state, synchronized by the stateChange/gcLock condvar/lock. */
       JSRuntimeState      state;
  @@ -89,7 +84,6 @@
       uint32              gcBytes;
       uint32              gcLastBytes;
       uint32              gcMaxBytes;
  -    uint32              gcMaxMallocBytes;
       uint32              gcLevel;
       uint32              gcNumber;
       JSPackedBool        gcPoke;
  @@ -260,12 +254,6 @@
       JSObject            *anynameObject;
       JSObject            *functionNamespaceObject;
   
  -    /*
  -     * A helper list for the GC, so it can mark native iterator states. See
  -     * js_MarkNativeIteratorStates for details.
  -     */
  -    JSNativeIteratorState *nativeIteratorStates;
  -
   #ifdef DEBUG
       /* Function invocation metering. */
       jsrefcount          inlineCalls;
  @@ -706,7 +694,7 @@
   #endif
   
   extern void
  -js_ReportOutOfMemory(JSContext *cx, JSErrorCallback errorCallback);
  +js_ReportOutOfMemory(JSContext *cx);
   
   /*
    * Report an exception using a previously composed JSErrorReport.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jscompat.h
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 jscompat.h
  --- ossp-pkg/js/src/jscompat.h	15 Nov 2003 00:10:56 -0000	1.1.1.1
  +++ ossp-pkg/js/src/jscompat.h	4 Apr 2006 14:09:45 -0000	1.1.1.2
  @@ -36,7 +36,7 @@
    * ***** END LICENSE BLOCK ***** */
   
   /* -*- Mode: C; tab-width: 8 -*-
  - * Copyright © 1996-1999 Netscape Communications Corporation, All Rights Reserved.
  + * Copyright (C) 1996-1999 Netscape Communications Corporation, All Rights Reserved.
    */
   #ifndef jscompat_h___
   #define jscompat_h___
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsdbgapi.c
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 jsdbgapi.c
  --- ossp-pkg/js/src/jsdbgapi.c	20 Jun 2006 22:27:40 -0000	1.1.1.1
  +++ ossp-pkg/js/src/jsdbgapi.c	4 Apr 2006 14:09:45 -0000	1.1.1.2
  @@ -940,7 +940,7 @@
       jschar *chars;
       JSBool ok;
   
  -    chars = js_InflateString(cx, bytes, length);
  +    chars = js_InflateString(cx, bytes, &length);
       if (!chars)
           return JS_FALSE;
       ok = JS_EvaluateUCInStackFrame(cx, fp, chars, length, filename, lineno,
  @@ -1309,20 +1309,13 @@
           fp = cx->fp;
       while (fp) {
           if (fp->script) {
  -            return JS_GetScriptFilenameFlags(fp->script);
  +            if (!fp->script->filename)
  +                return JSFILENAME_NULL;
  +            return js_GetScriptFilenameFlags(fp->script->filename);
           }
           fp = fp->down;
       }
       return 0;
  - }
  -
  -JS_PUBLIC_API(uint32)
  -JS_GetScriptFilenameFlags(JSScript *script)
  -{
  -    JS_ASSERT(script);
  -    if (!script->filename)
  -        return JSFILENAME_NULL;
  -    return js_GetScriptFilenameFlags(script->filename);    
   }
   
   JS_PUBLIC_API(JSBool)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsdbgapi.h
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 jsdbgapi.h
  --- ossp-pkg/js/src/jsdbgapi.h	20 Jun 2006 22:27:40 -0000	1.1.1.1
  +++ ossp-pkg/js/src/jsdbgapi.h	4 Sep 2005 15:44:04 -0000	1.1.1.2
  @@ -359,13 +359,6 @@
   JS_GetTopScriptFilenameFlags(JSContext *cx, JSStackFrame *fp);
   
   /*
  - * Get the script filename flags for the script.  If the script
  - * doesn't have a filename, return JSFILENAME_NULL.
  - */
  -extern JS_PUBLIC_API(uint32)
  -JS_GetScriptFilenameFlags(JSScript *script);
  -
  -/*
    * Associate flags with a script filename prefix in rt, so that any subsequent
    * script compilation will inherit those flags if the script's filename is the
    * same as prefix, or if prefix is a substring of the script's filename.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsdhash.h
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 jsdhash.h
  --- ossp-pkg/js/src/jsdhash.h	22 Feb 2006 03:19:37 -0000	1.1.1.1
  +++ ossp-pkg/js/src/jsdhash.h	19 Aug 2005 19:36:57 -0000	1.1.1.2
  @@ -45,7 +45,7 @@
   
   JS_BEGIN_EXTERN_C
   
  -#if defined(__GNUC__) && defined(__i386__) && (__GNUC__ >= 3) && !defined(XP_OS2)
  +#if defined(__GNUC__) && defined(__i386__) && (__GNUC__ >= 3) && !defined(XP_OS2) && !defined(XP_MACOSX)
   #define JS_DHASH_FASTCALL __attribute__ ((regparm (3),stdcall))
   #else
   #define JS_DHASH_FASTCALL
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsemit.c
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 jsemit.c
  --- ossp-pkg/js/src/jsemit.c	28 Feb 2006 02:01:42 -0000	1.1.1.1
  +++ ossp-pkg/js/src/jsemit.c	4 Apr 2006 14:09:45 -0000	1.1.1.2
  @@ -1647,8 +1647,8 @@
       jsbytecode *pc;
   
       if (atomIndex >= JS_BIT(16)) {
  -        mode = (js_CodeSpec[op].format & JOF_MODEMASK);
           if (op != JSOP_SETNAME) {
  +            mode = (js_CodeSpec[op].format & JOF_MODEMASK);
               prefixOp = (mode == JOF_NAME)
                          ? JSOP_FINDNAME
                          : (mode == JOF_PROP)
  @@ -2049,8 +2049,8 @@
               }
           }
           pn2 = pn->pn_expr;
  -        if (pn->pn_type == TOK_DOT && pn2->pn_type == TOK_NAME) {
  -            if (!LookupArgOrVar(cx, tc, pn2))
  +        if (pn->pn_type == TOK_DOT) {
  +            if (pn2->pn_type == TOK_NAME && !LookupArgOrVar(cx, tc, pn2))
                   return JS_FALSE;
               if (!(pn2->pn_op == JSOP_ARGUMENTS &&
                     pn->pn_atom == cx->runtime->atomState.lengthAtom)) {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsexn.c
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 jsexn.c
  --- ossp-pkg/js/src/jsexn.c	6 Jun 2006 12:01:13 -0000	1.1.1.1
  +++ ossp-pkg/js/src/jsexn.c	4 Apr 2006 14:09:45 -0000	1.1.1.2
  @@ -263,23 +263,6 @@
       return privateData->errorReport;
   }
   
  -/*
  - * This must be kept in synch with the exceptions array below.
  - * XXX use a jsexn.tbl file a la jsopcode.tbl
  - */
  -typedef enum JSExnType {
  -    JSEXN_NONE = -1,
  -      JSEXN_ERR,
  -        JSEXN_INTERNALERR,
  -        JSEXN_EVALERR,
  -        JSEXN_RANGEERR,
  -        JSEXN_REFERENCEERR,
  -        JSEXN_SYNTAXERR,
  -        JSEXN_TYPEERR,
  -        JSEXN_URIERR,
  -        JSEXN_LIMIT
  -} JSExnType;
  -
   struct JSExnSpec {
       int protoIndex;
       const char *name;
  @@ -549,6 +532,7 @@
   Exception(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
   {
       JSBool ok;
  +    jsval pval;
       uint32 lineno;
       JSString *message, *filename;
       JSStackFrame *fp;
  @@ -568,10 +552,10 @@
           ok = OBJ_GET_PROPERTY(cx, JSVAL_TO_OBJECT(argv[-2]),
                                 ATOM_TO_JSID(cx->runtime->atomState
                                              .classPrototypeAtom),
  -                              rval);
  +                              &pval);
           if (!ok)
               goto out;
  -        obj = js_NewObject(cx, &ExceptionClass, JSVAL_TO_OBJECT(*rval), NULL);
  +        obj = js_NewObject(cx, &ExceptionClass, JSVAL_TO_OBJECT(pval), NULL);
           if (!obj) {
               ok = JS_FALSE;
               goto out;
  @@ -920,12 +904,19 @@
       return protos[0];
   }
   
  -static JSExnType errorToExceptionNum[] = {
  -#define MSG_DEF(name, number, count, exception, format) \
  -    exception,
  -#include "js.msg"
  -#undef MSG_DEF
  -};
  +const JSErrorFormatString* 
  +js_GetLocalizedErrorMessage(JSContext* cx, void *userRef, const char *locale, const uintN errorNumber)
  +{
  +    const JSErrorFormatString *errorString = NULL;
  +
  +    if (cx->localeCallbacks && cx->localeCallbacks->localeGetErrorMessage) {
  +        errorString = cx->localeCallbacks
  +                        ->localeGetErrorMessage(userRef, locale, errorNumber);
  +    }
  +    if (!errorString)
  +        errorString = js_GetErrorMessage(userRef, locale, errorNumber);
  +    return errorString;
  +}
   
   #if defined ( DEBUG_mccabe ) && defined ( PRINTNAMES )
   /* For use below... get character strings for error name and exception name */
  @@ -947,6 +938,7 @@
       JSString *messageStr, *filenameStr;
       uintN lineno;
       JSExnPrivate *privateData;
  +    const JSErrorFormatString *errorString;
   
       /*
        * Tell our caller to report immediately if cx has no active frames, or if
  @@ -958,7 +950,8 @@
   
       /* Find the exception index associated with this error. */
       errorNumber = (JSErrNum) reportp->errorNumber;
  -    exn = errorToExceptionNum[errorNumber];
  +    errorString = js_GetLocalizedErrorMessage(cx, NULL, NULL, errorNumber);
  +    exn = errorString ? errorString->exnType : JSEXN_NONE;
       JS_ASSERT(exn < JSEXN_LIMIT);
   
   #if defined( DEBUG_mccabe ) && defined ( PRINTNAMES )
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsexn.h
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 jsexn.h
  --- ossp-pkg/js/src/jsexn.h	15 Nov 2003 00:10:57 -0000	1.1.1.1
  +++ ossp-pkg/js/src/jsexn.h	4 Apr 2006 14:09:45 -0000	1.1.1.2
  @@ -97,6 +97,9 @@
   extern JSErrorReport *
   js_ErrorFromException(JSContext *cx, jsval exn);
   
  +extern const JSErrorFormatString* 
  +js_GetLocalizedErrorMessage(JSContext* cx, void *userRef, const char *locale, const uintN errorNumber);
  +
   JS_END_EXTERN_C
   
   #endif /* jsexn_h___ */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsfile.c
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 jsfile.c
  --- ossp-pkg/js/src/jsfile.c	6 Jun 2006 12:01:13 -0000	1.1.1.1
  +++ ossp-pkg/js/src/jsfile.c	1 Nov 2005 01:20:21 -0000	1.1.1.2
  @@ -2172,7 +2172,6 @@
           obj = JS_NewObject(cx, &file_class, NULL, NULL);
           if (!obj)
               return JS_FALSE;
  -        *rval = OBJECT_TO_JSVAL(obj);
       }
   
       str = (argc == 0) 
  @@ -2192,6 +2191,7 @@
   
       SECURITY_CHECK(cx, NULL, "constructor", file);
   
  +    *rval = OBJECT_TO_JSVAL(obj);
       return JS_TRUE;
   }
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsfun.c
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 jsfun.c
  --- ossp-pkg/js/src/jsfun.c	19 Jul 2006 18:42:56 -0000	1.1.1.1
  +++ ossp-pkg/js/src/jsfun.c	4 Apr 2006 14:09:45 -0000	1.1.1.2
  @@ -1,5 +1,5 @@
   /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
  - * vim: set ts=8 sw=4 et tw=78:
  + * vim: set ts=8 sw=4 et tw=80:
    *
    * ***** BEGIN LICENSE BLOCK *****
    * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  @@ -722,7 +722,7 @@
   call_enumerate(JSContext *cx, JSObject *obj)
   {
       JSStackFrame *fp;
  -    JSObject *funobj, *pobj;
  +    JSObject *funobj;
       JSScope *scope;
       JSScopeProperty *sprop, *cprop;
       JSPropertyOp getter;
  @@ -771,20 +771,9 @@
           JS_ASSERT(atom->flags & ATOM_HIDDEN);
           atom = atom->entry.value;
   
  -        if (!js_LookupProperty(cx, obj, ATOM_TO_JSID(atom), &pobj, &prop))
  +        if (!js_LookupProperty(cx, obj, ATOM_TO_JSID(atom), &obj, &prop))
               return JS_FALSE;
  -
  -        /*
  -         * If we found the property in a different object, don't try sticking
  -         * it into wrong slots vector. This can occur because we have a mutable
  -         * __proto__ slot, and cloned function objects rely on their __proto__
  -         * to delegate to the object that contains the var and arg properties.
  -         */
  -        if (!prop || pobj != obj) {
  -            if (prop)
  -                OBJ_DROP_PROPERTY(cx, pobj, prop);
  -            continue;
  -        }
  +        JS_ASSERT(obj && prop);
           cprop = (JSScopeProperty *)prop;
           LOCKED_OBJ_SET_SLOT(obj, cprop->slot, vec[(uint16) sprop->shortid]);
           OBJ_DROP_PROPERTY(cx, obj, prop);
  @@ -904,25 +893,15 @@
   
   #endif /* JS_HAS_CALL_OBJECT */
   
  -/*
  - * ECMA-262 specifies that length is a property of function object instances,
  - * but we can avoid that space cost by delegating to a prototype property that
  - * is JSPROP_PERMANENT and JSPROP_SHARED.  Each fun_getProperty call computes
  - * a fresh length value based on the arity of the individual function object's
  - * private data.
  - *
  - * The extensions below other than length, i.e., the ones not in ECMA-262,
  - * are neither JSPROP_READONLY nor JSPROP_SHARED, because for compatibility
  - * with ECMA we must allow a delegating object to override them.
  - */
  -#define LENGTH_PROP_ATTRS (JSPROP_READONLY|JSPROP_PERMANENT|JSPROP_SHARED)
  +/* SHARED because fun_getProperty always computes a new value. */
  +#define FUNCTION_PROP_ATTRS (JSPROP_READONLY|JSPROP_PERMANENT|JSPROP_SHARED)
   
   static JSPropertySpec function_props[] = {
  -    {js_arguments_str, CALL_ARGUMENTS, JSPROP_PERMANENT,  0,0},
  -    {js_arity_str,     FUN_ARITY,      JSPROP_PERMANENT,  0,0},
  -    {js_caller_str,    FUN_CALLER,     JSPROP_PERMANENT,  0,0},
  -    {js_length_str,    ARGS_LENGTH,    LENGTH_PROP_ATTRS, 0,0},
  -    {js_name_str,      FUN_NAME,       JSPROP_PERMANENT,  0,0},
  +    {js_arguments_str, CALL_ARGUMENTS, FUNCTION_PROP_ATTRS,0,0},
  +    {js_arity_str,     FUN_ARITY,      FUNCTION_PROP_ATTRS,0,0},
  +    {js_length_str,    ARGS_LENGTH,    FUNCTION_PROP_ATTRS,0,0},
  +    {js_name_str,      FUN_NAME,       FUNCTION_PROP_ATTRS,0,0},
  +    {js_caller_str,    FUN_CALLER,     FUNCTION_PROP_ATTRS,0,0},
       {0,0,0,0,0}
   };
   
  @@ -937,34 +916,10 @@
           return JS_TRUE;
       slot = JSVAL_TO_INT(id);
   
  -    /*
  -     * Loop because getter and setter can be delegated from another class,
  -     * but loop only for ARGS_LENGTH because we must pretend that f.length
  -     * is in each function instance f, per ECMA-262, instead of only in the
  -     * Function.prototype object (we use JSPROP_PERMANENT with JSPROP_SHARED
  -     * to make it appear so).
  -     *
  -     * This code couples tightly to the attributes for the function_props[]
  -     * initializers above, and to js_SetProperty and js_HasOwnPropertyHelper.
  -     *
  -     * It's important to allow delegating objects, even though they inherit
  -     * this getter (fun_getProperty), to override arguments, arity, caller,
  -     * and name.  If we didn't return early for slot != ARGS_LENGTH, we would
  -     * clobber *vp with the native property value, instead of letting script
  -     * override that value in delegating objects.
  -     *
  -     * Note how that clobbering is what simulates JSPROP_READONLY for all of
  -     * the non-standard properties when the directly addressed object (obj)
  -     * is a function object (i.e., when this loop does not iterate).
  -     */
  -    while (!(fun = (JSFunction *)
  -                   JS_GetInstancePrivate(cx, obj, &js_FunctionClass, NULL))) {
  -        if (slot != ARGS_LENGTH)
  -            return JS_TRUE;
  -        obj = OBJ_GET_PROTO(cx, obj);
  -        if (!obj)
  -            return JS_TRUE;
  -    }
  +    /* No valid function object should lack private data, but check anyway. */
  +    fun = (JSFunction *)JS_GetInstancePrivate(cx, obj, &js_FunctionClass, NULL);
  +    if (!fun)
  +        return JS_TRUE;
   
       /* Find fun's top-most activation record. */
       for (fp = cx->fp; fp && (fp->fun != fun || (fp->flags & JSFRAME_SPECIAL));
  @@ -1043,8 +998,8 @@
       prototypeId = ATOM_TO_JSID(cx->runtime->atomState.classPrototypeAtom);
       if (!OBJ_LOOKUP_PROPERTY(cx, obj, prototypeId, &pobj, &prop))
           return JS_FALSE;
  -    if (prop)
  -        OBJ_DROP_PROPERTY(cx, pobj, prop);
  +    JS_ASSERT(prop);
  +    OBJ_DROP_PROPERTY(cx, pobj, prop);
       return JS_TRUE;
   }
   
  @@ -1183,7 +1138,6 @@
       JSContext *cx;
       JSFunction *fun;
       JSString *atomstr;
  -    JSTempValueRooter tvr;
       uint32 flagsword;           /* originally only flags was JS_XDRUint8'd */
       char *propname;
       JSScopeProperty *sprop;
  @@ -1191,7 +1145,6 @@
       JSAtom *atom;
       uintN i, n, dupflag;
       uint32 type;
  -    JSBool ok;
   #ifdef DEBUG
       uintN nvars = 0, nargs = 0;
   #endif
  @@ -1221,16 +1174,12 @@
           atomstr = NULL;
       }
   
  -    /* From here on, control flow must flow through label out. */
  -    JS_PUSH_SINGLE_TEMP_ROOT(cx, OBJECT_TO_JSVAL(fun->object), &tvr);
  -    ok = JS_TRUE;
  -
       if (!JS_XDRStringOrNull(xdr, &atomstr) ||
           !JS_XDRUint16(xdr, &fun->nargs) ||
           !JS_XDRUint16(xdr, &fun->extra) ||
           !JS_XDRUint16(xdr, &fun->nvars) ||
           !JS_XDRUint32(xdr, &flagsword)) {
  -        goto bad;
  +        return JS_FALSE;
       }
   
       /* do arguments and local vars */
  @@ -1250,7 +1199,7 @@
                                          n * sizeof(JSScopeProperty *));
                   if (!spvec) {
                       JS_ReportOutOfMemory(cx);
  -                    goto bad;
  +                    return JS_FALSE;
                   }
               }
               scope = OBJ_SCOPE(fun->object);
  @@ -1281,7 +1230,7 @@
                       !JS_XDRCString(xdr, &propname)) {
                       if (mark)
                           JS_ARENA_RELEASE(&cx->tempPool, mark);
  -                    goto bad;
  +                    return JS_FALSE;
                   }
               }
               if (mark)
  @@ -1295,7 +1244,7 @@
                   if (!JS_XDRUint32(xdr, &type) ||
                       !JS_XDRUint32(xdr, &userid) ||
                       !JS_XDRCString(xdr, &propname)) {
  -                    goto bad;
  +                    return JS_FALSE;
                   }
                   JS_ASSERT(type == JSXDR_FUNARG || type == JSXDR_FUNVAR ||
                             type == JSXDR_FUNCONST);
  @@ -1316,7 +1265,7 @@
                   atom = js_Atomize(cx, propname, strlen(propname), 0);
                   JS_free(cx, propname);
                   if (!atom)
  -                    goto bad;
  +                    return JS_FALSE;
   
                   /* Flag duplicate argument if atom is bound in fun->object. */
                   dupflag = SCOPE_GET_PROPERTY(OBJ_SCOPE(fun->object),
  @@ -1329,14 +1278,14 @@
                                             attrs | JSPROP_SHARED,
                                             dupflag | SPROP_HAS_SHORTID,
                                             JSVAL_TO_INT(userid))) {
  -                    goto bad;
  +                    return JS_FALSE;
                   }
               }
           }
       }
   
       if (!js_XDRScript(xdr, &fun->u.script, NULL))
  -        goto bad;
  +        return JS_FALSE;
   
       if (xdr->mode == JSXDR_DECODE) {
           fun->interpreted = JS_TRUE;
  @@ -1348,19 +1297,13 @@
               /* XXX only if this was a top-level function! */
               fun->atom = js_AtomizeString(cx, atomstr, 0);
               if (!fun->atom)
  -                goto bad;
  +                return JS_FALSE;
           }
   
           js_CallNewScriptHook(cx, fun->u.script, fun);
       }
   
  -out:
  -    JS_POP_TEMP_ROOT(cx, &tvr);
  -    return ok;
  -
  -bad:
  -    ok = JS_FALSE;
  -    goto out;
  +    return JS_TRUE;
   }
   
   #else  /* !JS_HAS_XDR */
  @@ -1525,7 +1468,7 @@
   fun_call(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
   {
       jsval fval, *sp, *oldsp;
  -    JSString *str;
  +    JSObject *tmp;
       void *mark;
       uintN i;
       JSStackFrame *fp;
  @@ -1536,19 +1479,17 @@
       fval = argv[-1];
   
       if (!JSVAL_IS_FUNCTION(cx, fval)) {
  -        str = JS_ValueToString(cx, fval);
  -        if (str) {
  -            JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL,
  -                                 JSMSG_INCOMPATIBLE_PROTO,
  -                                 js_Function_str, call_str,
  -                                 JS_GetStringBytes(str));
  -        }
  +        JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL,
  +                             JSMSG_INCOMPATIBLE_PROTO,
  +                             js_Function_str, call_str,
  +                             JS_GetStringBytes(JS_ValueToString(cx, fval)));
           return JS_FALSE;
       }
   
       if (argc == 0) {
           /* Call fun with its global object as the 'this' param if no args. */
  -        obj = NULL;
  +        while ((tmp = OBJ_GET_PARENT(cx, obj)) != NULL)
  +            obj = tmp;
       } else {
           /* Otherwise convert the first arg to 'this' and skip over it. */
           if (!js_ValueToObject(cx, argv[0], &obj))
  @@ -1587,7 +1528,6 @@
   fun_apply(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
   {
       jsval fval, *sp, *oldsp;
  -    JSString *str;
       JSObject *aobj;
       jsuint length;
       void *mark;
  @@ -1605,13 +1545,10 @@
       fval = argv[-1];
   
       if (!JSVAL_IS_FUNCTION(cx, fval)) {
  -        str = JS_ValueToString(cx, fval);
  -        if (str) {
  -            JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL,
  -                                 JSMSG_INCOMPATIBLE_PROTO,
  -                                 js_Function_str, "apply",
  -                                 JS_GetStringBytes(str));
  -        }
  +        JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL,
  +                             JSMSG_INCOMPATIBLE_PROTO,
  +                             js_Function_str, "apply",
  +                             JS_GetStringBytes(JS_ValueToString(cx, fval)));
           return JS_FALSE;
       }
   
  @@ -1726,7 +1663,7 @@
       JSTokenStream *ts;
       JSPrincipals *principals;
       jschar *collected_args, *cp;
  -    size_t arg_length, args_length, old_args_length;
  +    size_t arg_length, args_length;
       JSTokenType tt;
       JSBool ok;
   
  @@ -1786,7 +1723,7 @@
       }
   
       /* Belt-and-braces: check that the caller has access to parent. */
  -    if (!js_CheckPrincipalsAccess(cx, parent, principals, js_Function_str))
  +    if (!js_CheckPrincipalsAccess(cx, parent, principals, "Function"))
           return JS_FALSE;
   
       n = argc ? argc - 1 : 0;
  @@ -1808,27 +1745,10 @@
               if (!arg)
                   return JS_FALSE;
               argv[i] = STRING_TO_JSVAL(arg);
  -
  -            /*
  -             * Check for overflow.  The < test works because the maximum
  -             * JSString length fits in 2 fewer bits than size_t has.
  -             */
  -            old_args_length = args_length;
  -            args_length = old_args_length + JSSTRING_LENGTH(arg);
  -            if (args_length < old_args_length) {
  -                JS_ReportOutOfMemory(cx);
  -                return JS_FALSE;
  -            }
  -        }
  -
  -        /* Add 1 for each joining comma and check for overflow (two ways). */
  -        old_args_length = args_length;
  -        args_length = old_args_length + n - 1;
  -        if (args_length < old_args_length ||
  -            args_length >= ~(size_t)0 / sizeof(jschar)) {
  -            JS_ReportOutOfMemory(cx);
  -            return JS_FALSE;
  +            args_length += JSSTRING_LENGTH(arg);
           }
  +        /* Add 1 for each joining comma. */
  +        args_length += n - 1;
   
           /*
            * Allocate a string to hold the concatenated arguments, including room
  @@ -2047,7 +1967,6 @@
                  uintN flags, JSObject *parent, JSAtom *atom)
   {
       JSFunction *fun;
  -    JSTempValueRooter tvr;
   
       /* If funobj is null, allocate an object for it. */
       if (funobj) {
  @@ -2058,16 +1977,13 @@
               return NULL;
       }
   
  -    /* Protect fun from any potential last-ditch GCs. */
  -    JS_PUSH_SINGLE_TEMP_ROOT(cx, OBJECT_TO_JSVAL(funobj), &tvr);
  -
       /*
        * Allocate fun after allocating funobj so slot allocation in js_NewObject
        * does not wipe out fun from cx->newborn[GCX_PRIVATE].
        */
       fun = (JSFunction *) js_NewGCThing(cx, GCX_PRIVATE, sizeof(JSFunction));
       if (!fun)
  -        goto out;
  +        return NULL;
   
       /* Initialize all function members. */
       fun->nrefs = 0;
  @@ -2086,11 +2002,8 @@
       /* Link fun to funobj and vice versa. */
       if (!js_LinkFunctionObject(cx, fun, funobj)) {
           cx->newborn[GCX_OBJECT] = NULL;
  -        fun = NULL;
  +        return NULL;
       }
  -
  -out:
  -    JS_POP_TEMP_ROOT(cx, &tvr);
       return fun;
   }
   
  @@ -2174,7 +2087,6 @@
       JSFunction *fun;
       JSObject *funobj;
       JSStackFrame *caller;
  -    JSPrincipals *principals;
   
       if (JSVAL_IS_FUNCTION(cx, *vp))
           return JSVAL_TO_OBJECT(*vp);
  @@ -2186,21 +2098,10 @@
       *vp = OBJECT_TO_JSVAL(funobj);
   
       caller = JS_GetScriptedCaller(cx, cx->fp);
  -    if (caller) {
  -        principals = caller->script->principals;
  -    } else {
  -        /* No scripted caller, don't allow access. */
  -        principals = NULL;
  -    }
  -
  -    /*
  -     * FIXME: Reparameterize so we don't call js_AtomToPrintableString unless
  -     *        there is an error (bug 324694).
  -     */
  -    if (!js_CheckPrincipalsAccess(cx, funobj, principals,
  -                                  fun->atom
  -                                  ? js_AtomToPrintableString(cx, fun->atom)
  -                                  : js_anonymous_str)) {
  +    if (caller &&
  +        !js_CheckPrincipalsAccess(cx, funobj,
  +                                  caller->script->principals,
  +                                  JS_GetFunctionName(fun))) {
           return NULL;
       }
       return funobj;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsgc.c
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 jsgc.c
  --- ossp-pkg/js/src/jsgc.c	21 Jun 2006 23:02:59 -0000	1.1.1.1
  +++ ossp-pkg/js/src/jsgc.c	4 Apr 2006 14:09:45 -0000	1.1.1.2
  @@ -341,12 +341,7 @@
           return JS_FALSE;
       }
       rt->gcLocksHash = NULL;     /* create lazily */
  -
  -    /*
  -     * Separate gcMaxMallocBytes from gcMaxBytes but initialize to maxbytes
  -     * for default backward API compatibility.
  -     */
  -    rt->gcMaxBytes = rt->gcMaxMallocBytes = maxbytes;
  +    rt->gcMaxBytes = maxbytes;
       return JS_TRUE;
   }
   
  @@ -592,7 +587,7 @@
           METER(rt->gcStats.recycle[i]++);
       } else {
           if (rt->gcBytes < rt->gcMaxBytes &&
  -            (tried_gc || rt->gcMallocBytes < rt->gcMaxMallocBytes))
  +            (tried_gc || rt->gcMallocBytes < rt->gcMaxBytes))
           {
               /*
                * Inline form of JS_ARENA_ALLOCATE adapted to truncate the current
  @@ -661,17 +656,8 @@
            * this reference, allowing thing to be GC'd if it has no other refs.
            * See JS_EnterLocalRootScope and related APIs.
            */
  -        if (js_PushLocalRoot(cx, lrs, (jsval) thing) < 0) {
  -            /*
  -             * When we fail for a thing allocated through the tail of
  -             * the last arena, thing's flag byte is not initialized. So
  -             * to prevent GC accessing the uninitialized flags during
  -             * the finalization, we always mark the thing as final. See
  -             * bug 337407.
  -             */
  -            *flagp = GCF_FINAL;
  +        if (js_PushLocalRoot(cx, lrs, (jsval) thing) < 0)
               goto fail;
  -        }
       } else {
           /*
            * No local root scope, so we're stuck with the old, fragile model of
  @@ -1717,7 +1703,6 @@
       js_MarkAtomState(&rt->atomState, gcflags, gc_mark_atom_key_thing, cx);
       js_MarkWatchPoints(rt);
       js_MarkScriptFilenames(rt, gcflags);
  -    js_MarkNativeIteratorStates(cx);
   
       iter = NULL;
       while ((acx = js_ContextIterator(rt, JS_TRUE, &iter)) != NULL) {
  @@ -1823,9 +1808,6 @@
                   GC_MARK_JSVALS(cx, tvr->count, tvr->u.array, "tvr->u.array");
               }
           }
  -
  -        if (acx->sharpObjectMap.depth > 0)
  -            js_GCMarkSharpMap(cx, &acx->sharpObjectMap);
       }
   #ifdef DUMP_CALL_TABLE
       js_DumpCallTable(cx);
  @@ -1846,6 +1828,7 @@
        */
       js_SweepAtomState(&rt->atomState);
       js_SweepScopeProperties(rt);
  +    js_SweepScriptFilenames(rt);
       for (i = 0; i < GC_NUM_FREELISTS; i++) {
           nbytes = GC_FREELIST_NBYTES(i);
           nflags = nbytes / sizeof(JSGCThing);
  @@ -1890,14 +1873,6 @@
       }
   
       /*
  -     * Sweep script filenames after sweeping functions in the generic loop
  -     * above. In this way when scripted function's finalizer destroys script
  -     * triggering a call to rt->destroyScriptHook, the hook can still access
  -     * script's filename. See bug 323267.
  -     */
  -    js_SweepScriptFilenames(rt);
  -
  -    /*
        * Free phase.
        * Free any unused arenas and rebuild the JSGCThing freelist.
        */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsinterp.c
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 jsinterp.c
  --- ossp-pkg/js/src/jsinterp.c	16 Jun 2006 01:28:02 -0000	1.1.1.1
  +++ ossp-pkg/js/src/jsinterp.c	4 Apr 2006 14:09:45 -0000	1.1.1.2
  @@ -1,5 +1,5 @@
   /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
  - * vim: set ts=8 sw=4 et tw=78:
  + * vim: set ts=8 sw=4 et tw=80:
    *
    * ***** BEGIN LICENSE BLOCK *****
    * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  @@ -460,6 +460,8 @@
   JSBool
   js_ComputeThis(JSContext *cx, JSObject *thisp, JSStackFrame *fp)
   {
  +    JSObject *parent;
  +
       if (thisp && OBJ_GET_CLASS(cx, thisp) != &js_CallClass) {
           /* Some objects (e.g., With) delegate 'this' to another object. */
           thisp = OBJ_THIS_OBJECT(cx, thisp);
  @@ -488,26 +490,13 @@
            */
           JS_ASSERT(!(fp->flags & JSFRAME_CONSTRUCTING));
           if (JSVAL_IS_PRIMITIVE(fp->argv[-2]) ||
  -            !OBJ_GET_PARENT(cx, JSVAL_TO_OBJECT(fp->argv[-2]))) {
  +            !(parent = OBJ_GET_PARENT(cx, JSVAL_TO_OBJECT(fp->argv[-2])))) {
               thisp = cx->globalObject;
           } else {
  -            jsid id;
  -            jsval v;
  -            uintN attrs;
  -
  -            /* Walk up the parent chain. */
  -            thisp = JSVAL_TO_OBJECT(fp->argv[-2]);
  -            id = ATOM_TO_JSID(cx->runtime->atomState.parentAtom);
  -            for (;;) {
  -                if (!OBJ_CHECK_ACCESS(cx, thisp, id, JSACC_PARENT, &v, &attrs))
  -                    return JS_FALSE;
  -                if (JSVAL_IS_VOID(v))
  -                    v = OBJ_GET_SLOT(cx, thisp, JSSLOT_PARENT);
  -                JS_ASSERT(JSVAL_TO_OBJECT(v) == OBJ_GET_PARENT(cx, thisp));
  -                if (JSVAL_IS_NULL(v))
  -                    break;
  -                thisp = JSVAL_TO_OBJECT(v);
  -            }
  +            /* walk up to find the top-level object */
  +            thisp = parent;
  +            while ((parent = OBJ_GET_PARENT(cx, thisp)) != NULL)
  +                thisp = parent;
           }
       }
       fp->thisp = thisp;
  @@ -1993,17 +1982,6 @@
                           LOAD_INTERRUPT_HANDLER(rt);
                       }
                   }
  -
  -#if JS_HAS_CALL_OBJECT
  -                /*
  -                 * If frame has a call object, sync values and clear the back-
  -                 * pointer. This can happen for a lightweight function if it
  -                 * calls eval unexpectedly (in a way that is hidden from the
  -                 * compiler). See bug 325540.
  -                 */
  -                if (fp->callobj)
  -                    ok &= js_PutCallObject(cx, fp);
  -#endif
   #if JS_HAS_ARGS_OBJECT
                   if (fp->argsobj)
                       ok &= js_PutArgsObject(cx, fp);
  @@ -2280,23 +2258,12 @@
   
               /* Is this the first iteration ? */
               if (JSVAL_IS_VOID(rval)) {
  -                /*
  -                 * Yes, create a new JSObject to hold the iterator state.
  -                 * Use NULL as the nominal parent in js_NewObject to ensure
  -                 * that we use the correct scope chain lookup to try to find the
  -                 * PropertyIterator constructor.
  -                 */
  -                propobj = js_NewObject(cx, &prop_iterator_class, NULL, NULL);
  +                /* Yes, create a new JSObject to hold the iterator state */
  +                propobj = js_NewObject(cx, &prop_iterator_class, NULL, obj);
                   if (!propobj) {
                       ok = JS_FALSE;
                       goto out;
                   }
  -
  -                /*
  -                 * Now that we've resolved the object, use the PARENT slot to
  -                 * store the object that we're iterating over.
  -                 */
  -                propobj->slots[JSSLOT_PARENT] = OBJECT_TO_JSVAL(obj);
                   propobj->slots[JSSLOT_ITER_STATE] = JSVAL_NULL;
   
                   /*
  @@ -3394,12 +3361,17 @@
   #undef FAST_GLOBAL_INCREMENT_OP
   
             do_nonint_fast_global_incop:
  +          {
  +            const JSCodeSpec *cs = &js_CodeSpec[op];
  +
               vp = sp++;
               SAVE_SP(fp);
               NONINT_INCREMENT_OP_MIDDLE();
               OBJ_SET_SLOT(cx, obj, slot, rval);
               STORE_OPND(-1, rtmp);
  +            len = cs->length;
               break;
  +          }
   
             case JSOP_GETPROP:
               /* Get an immediate atom naming the property. */
  @@ -4556,7 +4528,8 @@
                */
               SAVE_SP(fp);
               obj2 = fp->scopeChain;
  -            parent = js_NewObject(cx, &js_ObjectClass, NULL, obj2);
  +            parent = js_ConstructObject(cx, &js_ObjectClass, NULL, obj2,
  +                                        0, NULL);
               if (!parent) {
                   ok = JS_FALSE;
                   goto out;
  @@ -4982,24 +4955,12 @@
               JS_ASSERT(JSVAL_IS_OBJECT(lval));
               obj = JSVAL_TO_OBJECT(lval);
   
  +            /* Define obj[id] to contain rval and to be permanent. */
               SAVE_SP(fp);
  -
  -            /*
  -             * It's possible for an evil script to substitute a random object
  -             * for the new object. Check to make sure that we don't override a
  -             * readonly property with the below OBJ_DEFINE_PROPERTY.
  -             */
  -            ok = OBJ_GET_ATTRIBUTES(cx, obj, id, NULL, &attrs);
  +            ok = OBJ_DEFINE_PROPERTY(cx, obj, id, rval, NULL, NULL,
  +                                     JSPROP_PERMANENT, NULL);
               if (!ok)
                   goto out;
  -            if (!(attrs & (JSPROP_READONLY | JSPROP_PERMANENT |
  -                           JSPROP_GETTER | JSPROP_SETTER))) {
  -                /* Define obj[id] to contain rval and to be permanent. */
  -                ok = OBJ_DEFINE_PROPERTY(cx, obj, id, rval, NULL, NULL,
  -                                         JSPROP_PERMANENT, NULL);
  -                if (!ok)
  -                    goto out;
  -            }
   
               /* Now that we're done with rval, pop it. */
               sp--;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsmath.c
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 jsmath.c
  --- ossp-pkg/js/src/jsmath.c	7 Jan 2006 00:15:10 -0000	1.1.1.1
  +++ ossp-pkg/js/src/jsmath.c	7 Jul 2005 22:35:38 -0000	1.1.1.2
  @@ -283,16 +283,6 @@
           return JS_FALSE;
       if (!js_ValueToNumber(cx, argv[1], &y))
           return JS_FALSE;
  -#if !JS_USE_FDLIBM_MATH
  -    /*
  -     * Because C99 and ECMA specify different behavior for pow(),
  -     * we need to wrap the libm call to make it ECMA compliant.
  -     */
  -    if (!JSDOUBLE_IS_FINITE(y) && (x == 1.0 || x == -1.0)) {
  -        *rval = DOUBLE_TO_JSVAL(cx->runtime->jsNaN);
  -        return JS_TRUE;
  -    }
  -#endif
       z = fd_pow(x, y);
       return js_NewNumberValue(cx, z, rval);
   }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsobj.c
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 jsobj.c
  --- ossp-pkg/js/src/jsobj.c	21 Jun 2006 23:02:59 -0000	1.1.1.1
  +++ ossp-pkg/js/src/jsobj.c	4 Apr 2006 14:09:45 -0000	1.1.1.2
  @@ -1,5 +1,5 @@
   /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
  - * vim: set ts=8 sw=4 et tw=78:
  + * vim: set ts=8 sw=4 et tw=80:
    *
    * ***** BEGIN LICENSE BLOCK *****
    * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  @@ -69,10 +69,6 @@
   
   #include "jsdbgapi.h"   /* whether or not JS_HAS_OBJ_WATCHPOINT */
   
  -#if JS_HAS_XML_SUPPORT
  -#include "jsxml.h"
  -#endif
  -
   #ifdef JS_THREADSAFE
   #define NATIVE_DROP_PROPERTY js_DropProperty
   
  @@ -431,15 +427,15 @@
               return NULL;
           }
   
  -        /* 
  +        /*
            * Increment map->depth to protect js_EnterSharpObject from reentering
            * itself badly.  Without this fix, if we reenter the basis case where
            * map->depth == 0, when unwinding the inner call we will destroy the
            * newly-created hash table and crash.
            */
  -	++map->depth;
  +        ++map->depth;
           ida = JS_Enumerate(cx, obj);
  -	--map->depth;
  +        --map->depth;
           if (!ida)
               return NULL;
   
  @@ -572,7 +568,7 @@
           len = JS_snprintf(buf, sizeof buf, "#%u%c",
                             sharpid >> SHARP_ID_SHIFT,
                             (sharpid & SHARP_BIT) ? '#' : '=');
  -        *sp = js_InflateString(cx, buf, len);
  +        *sp = js_InflateString(cx, buf, &len);
           if (!*sp) {
               if (ida)
                   JS_DestroyIdArray(cx, ida);
  @@ -632,42 +628,6 @@
       }
   }
   
  -JS_STATIC_DLL_CALLBACK(intN)
  -gc_sharp_table_entry_marker(JSHashEntry *he, intN i, void *arg)
  -{
  -    GC_MARK((JSContext *)arg, (JSObject *)he->key, "sharp table entry", NULL);
  -    return JS_DHASH_NEXT;
  -}
  -
  -void
  -js_GCMarkSharpMap(JSContext *cx, JSSharpObjectMap *map)
  -{
  -    JS_ASSERT(map->depth > 0);
  -    JS_ASSERT(map->table);
  -
  -    /*
  -     * During recursive calls to MarkSharpObjects a non-native object or
  -     * object with a custom getProperty method can potentially return an
  -     * unrooted value or even cut from the object graph an argument of one of
  -     * MarkSharpObjects recursive invocations. So we must protect map->table
  -     * entries against GC.
  -     *
  -     * We can not simply use JSTempValueRooter to mark the obj argument of
  -     * MarkSharpObjects during recursion as we have to protect *all* entries
  -     * in JSSharpObjectMap including those that contains otherwise unreachable
  -     * objects just allocated through custom getProperty. Otherwise newer
  -     * allocations can re-use the address of an object stored in the hashtable
  -     * confusing js_EnterSharpObject. So to address the problem we simply
  -     * mark all objects from map->table.
  -     *
  -     * An alternative "proper" solution is to use JSTempValueRooter in
  -     * MarkSharpObjects with code to remove during finalization entries
  -     * with otherwise unreachable objects. But this is way too complex
  -     * to justify spending efforts.
  -     */
  -    JS_HashTableEnumerateEntries(map->table, gc_sharp_table_entry_marker, cx);
  -}
  -
   #define OBJ_TOSTRING_EXTRA      4       /* for 4 local GC roots */
   
   #if JS_HAS_INITIALIZERS || JS_HAS_TOSOURCE
  @@ -680,7 +640,7 @@
       JSIdArray *ida;
       jschar *chars, *ochars, *vsharp;
       const jschar *idstrchars, *vchars;
  -    size_t nchars, idstrlength, gsoplength, vlength, vsharplength, curlen;
  +    size_t nchars, idstrlength, gsoplength, vlength, vsharplength;
       char *comma;
       jsint i, j, length, valcnt;
       jsid id;
  @@ -940,31 +900,14 @@
               }
   #endif
   
  -#define SAFE_ADD(n)                                                          \
  -    JS_BEGIN_MACRO                                                           \
  -        size_t n_ = (n);                                                     \
  -        curlen += n_;                                                        \
  -        if (curlen < n_)                                                     \
  -            goto overflow;                                                   \
  -    JS_END_MACRO
  -
  -            curlen = nchars;
  -            if (comma)
  -                SAFE_ADD(2);
  -            SAFE_ADD(idstrlength + 1);
  -            if (gsop[j])
  -                SAFE_ADD(JSSTRING_LENGTH(gsop[j]) + 1);
  -            SAFE_ADD(vsharplength);
  -            SAFE_ADD(vlength);
  -            SAFE_ADD((outermost ? 2 : 1) + 1);
  -#undef SAFE_ADD
  -
  -            if (curlen > (size_t)-1 / sizeof(jschar))
  -                goto overflow;
  -
               /* Allocate 1 + 1 at end for closing brace and terminating 0. */
               chars = (jschar *)
  -                realloc((ochars = chars), curlen * sizeof(jschar));
  +                realloc((ochars = chars),
  +                        (nchars + (comma ? 2 : 0) +
  +                         idstrlength + 1 +
  +                         (gsop[j] ? 1 + JSSTRING_LENGTH(gsop[j]) : 0) +
  +                         vsharplength + vlength +
  +                         (outermost ? 2 : 1) + 1) * sizeof(jschar));
               if (!chars) {
                   /* Save code space on error: let JS_free ignore null vsharp. */
                   JS_free(cx, vsharp);
  @@ -1042,12 +985,6 @@
       }
       *rval = STRING_TO_JSVAL(str);
       return JS_TRUE;
  -
  -  overflow:
  -    JS_free(cx, vsharp);
  -    free(chars);
  -    chars = NULL;
  -    goto error;
   }
   #endif /* JS_HAS_INITIALIZERS || JS_HAS_TOSOURCE */
   
  @@ -1209,14 +1146,6 @@
           return JS_TRUE;
       }
   
  -    /*
  -     * If the caller is a lightweight function and doesn't have a variables
  -     * object, then we need to provide one for the compiler to stick any
  -     * declared (var) variables into.
  -     */
  -    if (caller && !caller->varobj && !js_GetCallObject(cx, caller, NULL))
  -        return JS_FALSE;
  -
   #if JS_HAS_SCRIPT_OBJECT
       /*
        * Script.prototype.compile/exec and Object.prototype.eval all take an
  @@ -1325,9 +1254,10 @@
        * caller's principals has access to scopeobj.
        */
       ok = js_CheckPrincipalsAccess(cx, scopeobj, principals, js_eval_str);
  -    if (ok)
  -        ok = js_Execute(cx, scopeobj, script, caller, JSFRAME_EVAL, rval);
  +    if (!ok)
  +        goto out;
   
  +    ok = js_Execute(cx, scopeobj, script, caller, JSFRAME_EVAL, rval);
       JS_DestroyScript(cx, script);
   
   out:
  @@ -1436,38 +1366,11 @@
           *rval = JSVAL_FALSE;
       } else if (obj2 == obj) {
           *rval = JSVAL_TRUE;
  +    } else if (OBJ_IS_NATIVE(obj2)) {
  +        sprop = (JSScopeProperty *)prop;
  +        *rval = BOOLEAN_TO_JSVAL(SPROP_IS_SHARED_PERMANENT(sprop));
       } else {
  -        JSClass *clasp;
  -        JSExtendedClass *xclasp;
  -
  -        clasp = OBJ_GET_CLASS(cx, obj);
  -        xclasp = (clasp->flags & JSCLASS_IS_EXTENDED)
  -                 ? (JSExtendedClass *)clasp
  -                 : NULL;
  -        if (xclasp && xclasp->outerObject &&
  -            xclasp->outerObject(cx, obj2) == obj) {
  -            *rval = JSVAL_TRUE;
  -        } else if (OBJ_IS_NATIVE(obj2) && OBJ_GET_CLASS(cx, obj2) == clasp) {
  -            /*
  -             * The combination of JSPROP_SHARED and JSPROP_PERMANENT in a
  -             * delegated property makes that property appear to be direct in
  -             * all delegating instances of the same native class.  This hack
  -             * avoids bloating every function instance with its own 'length'
  -             * (AKA 'arity') property.  But it must not extend across class
  -             * boundaries, to avoid making hasOwnProperty lie (bug 320854).
  -             *
  -             * It's not really a hack, of course: a permanent property can't
  -             * be deleted, and JSPROP_SHARED means "don't allocate a slot in
  -             * any instance, prototype or delegating".  Without a slot, and
  -             * without the ability to remove and recreate (with differences)
  -             * the property, there is no way to tell whether it is directly
  -             * owned, or indirectly delegated.
  -             */
  -            sprop = (JSScopeProperty *)prop;
  -            *rval = BOOLEAN_TO_JSVAL(SPROP_IS_SHARED_PERMANENT(sprop));
  -        } else {
  -            *rval = JSVAL_FALSE;
  -        }
  +        *rval = JSVAL_FALSE;
       }
       if (prop)
           OBJ_DROP_PROPERTY(cx, obj2, prop);
  @@ -2041,7 +1944,6 @@
       JSClass *protoclasp;
       uint32 nslots, i;
       jsval *newslots;
  -    JSTempValueRooter tvr;
   
       /* Bootstrap the ur-object, and make it the default prototype object. */
       if (!proto) {
  @@ -2066,14 +1968,6 @@
           return NULL;
   
       /*
  -     * Root obj to prevent it from being killed.
  -     * AllocSlots can trigger a finalizer from a last-ditch GC calling
  -     * JS_ClearNewbornRoots. There's also the possibilty of things
  -     * happening under the objectHook call-out below.    
  -     */
  -    JS_PUSH_SINGLE_TEMP_ROOT(cx, OBJECT_TO_JSVAL(obj), &tvr);
  -
  -    /*
        * Share proto's map only if it has the same JSObjectOps, and only if
        * proto's class has the same private and reserved slots as obj's map
        * and class have.  We assume that if prototype and object are of the
  @@ -2138,14 +2032,11 @@
           JS_UNKEEP_ATOMS(cx->runtime);
       }
   
  -out:
  -    JS_POP_TEMP_ROOT(cx, &tvr);
  -    cx->newborn[GCX_OBJECT] = (JSGCThing *) obj;
       return obj;
   
   bad:
  -    obj = NULL;
  -    goto out;
  +    cx->newborn[GCX_OBJECT] = NULL;
  +    return NULL;
   }
   
   JSBool
  @@ -2197,18 +2088,13 @@
                      JSObject *parent, uintN argc, jsval *argv)
   {
       jsval cval, rval;
  -    JSTempValueRooter argtvr, tvr;
  +    JSTempValueRooter tvr;
       JSObject *obj, *ctor;
   
  -    JS_PUSH_TEMP_ROOT(cx, argc, argv, &argtvr);
  -
  -    if (!js_FindConstructor(cx, parent, clasp->name, &cval)) {
  -        JS_POP_TEMP_ROOT(cx, &argtvr);
  +    if (!js_FindConstructor(cx, parent, clasp->name, &cval))
           return NULL;
  -    }
       if (JSVAL_IS_PRIMITIVE(cval)) {
           js_ReportIsNotFunction(cx, &cval, JSV2F_CONSTRUCT | JSV2F_SEARCH_STACK);
  -        JS_POP_TEMP_ROOT(cx, &argtvr);
           return NULL;
       }
   
  @@ -2217,6 +2103,7 @@
        * this point, all control flow must exit through label out with obj set.
        */
       JS_PUSH_SINGLE_TEMP_ROOT(cx, cval, &tvr);
  +    obj = NULL;
   
       /*
        * If proto or parent are NULL, set them to Constructor.prototype and/or
  @@ -2230,7 +2117,6 @@
                                 ATOM_TO_JSID(cx->runtime->atomState
                                              .classPrototypeAtom),
                                 &rval)) {
  -            obj = NULL;
               goto out;
           }
           if (JSVAL_IS_OBJECT(rval))
  @@ -2241,37 +2127,17 @@
       if (!obj)
           goto out;
   
  -    if (!js_InternalConstruct(cx, obj, cval, argc, argv, &rval))
  -        goto bad;
  -
  -    if (JSVAL_IS_PRIMITIVE(rval))
  +    if (!js_InternalConstruct(cx, obj, cval, argc, argv, &rval)) {
  +        cx->newborn[GCX_OBJECT] = NULL;
  +        obj = NULL;
           goto out;
  -    obj = JSVAL_TO_OBJECT(rval);
  -
  -    /*
  -     * If the given class has both the JSCLASS_HAS_PRIVATE and the
  -     * JSCLASS_CONSTRUCT_PROTOTYPE flags, then the class should have its private
  -     * data set. If it doesn't, then it means the constructor was replaced, and
  -     * we should throw a typerr.
  -     */
  -    if (OBJ_GET_CLASS(cx, obj) != clasp ||
  -        (!(~clasp->flags & (JSCLASS_HAS_PRIVATE |
  -                            JSCLASS_CONSTRUCT_PROTOTYPE)) &&
  -         !JS_GetPrivate(cx, obj))) {
  -        JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL,
  -                             JSMSG_WRONG_CONSTRUCTOR, clasp->name);
  -        goto bad;
       }
   
  +    if (!JSVAL_IS_PRIMITIVE(rval))
  +        obj = JSVAL_TO_OBJECT(rval);
   out:
       JS_POP_TEMP_ROOT(cx, &tvr);
  -    JS_POP_TEMP_ROOT(cx, &argtvr);
       return obj;
  -
  -bad:
  -    cx->newborn[GCX_OBJECT] = NULL;
  -    obj = NULL;
  -    goto out;
   }
   
   void
  @@ -2377,7 +2243,7 @@
   #if JS_BUG_EMPTY_INDEX_ZERO
   #define CHECK_FOR_EMPTY_INDEX(id)                                             \
       JS_BEGIN_MACRO                                                            \
  -        if (JSSTRING_LENGTH(str_) == 0)                                       \
  +        if (JSSTRING_LENGTH(_str) == 0)                                       \
               id = JSVAL_ZERO;                                                  \
       JS_END_MACRO
   #else
  @@ -3152,8 +3018,25 @@
           if ((attrs & JSPROP_READONLY) ||
               (SCOPE_IS_SEALED(scope) && pobj == obj)) {
               JS_UNLOCK_SCOPE(cx, scope);
  -            if ((attrs & JSPROP_READONLY) && JS_VERSION_IS_ECMA(cx))
  -                return JS_TRUE;
  +
  +            /*
  +             * Here, we'll either return true or goto read_only_error, which
  +             * reports a strict warning or throws an error.  So we redefine
  +             * the |flags| local variable to be JSREPORT_* flags to pass to
  +             * JS_ReportErrorFlagsAndNumberUC at label read_only_error.  We
  +             * must likewise re-task flags further below for the other 'goto
  +             * read_only_error;' case.
  +             */
  +            flags = JSREPORT_ERROR;
  +            if ((attrs & JSPROP_READONLY) && JS_VERSION_IS_ECMA(cx)) {
  +                if (!JS_HAS_STRICT_OPTION(cx)) {
  +                    /* Just return true per ECMA if not in strict mode. */
  +                    return JS_TRUE;
  +                }
  +
  +                /* Strict mode: report a read-only strict warning. */
  +                flags = JSREPORT_STRICT | JSREPORT_WARNING;
  +            }
               goto read_only_error;
           }
   
  @@ -3200,8 +3083,10 @@
       }
   
       if (!sprop) {
  -        if (SCOPE_IS_SEALED(OBJ_SCOPE(obj)) && OBJ_SCOPE(obj)->object == obj)
  +        if (SCOPE_IS_SEALED(OBJ_SCOPE(obj)) && OBJ_SCOPE(obj)->object == obj) {
  +            flags = JSREPORT_ERROR;
               goto read_only_error;
  +        }
   
           /* Find or make a property descriptor with the right heritage. */
           JS_LOCK_OBJ(cx, obj);
  @@ -3275,12 +3160,11 @@
                                                  JSDVG_IGNORE_STACK,
                                                  ID_TO_VALUE(id),
                                                  NULL);
  -    if (str) {
  -        JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL,
  -                             JSMSG_READ_ONLY,
  -                             JS_GetStringBytes(str));
  -    }
  -    return JS_FALSE;
  +    if (!str)
  +        return JS_FALSE;
  +    return JS_ReportErrorFlagsAndNumberUC(cx, flags, js_GetErrorMessage,
  +                                          NULL, JSMSG_READ_ONLY,
  +                                          JS_GetStringChars(str));
     }
   }
   
  @@ -3546,12 +3430,10 @@
   }
   
   /* Private type used to iterate over all properties of a native JS object */
  -struct JSNativeIteratorState {
  -    jsint                   next_index; /* index into jsid array */
  -    JSIdArray               *ida;       /* all property ids in enumeration */
  -    JSNativeIteratorState   *next;      /* double-linked list support */
  -    JSNativeIteratorState   **prevp;
  -};
  +typedef struct JSNativeIteratorState {
  +    jsint next_index;   /* index into jsid array */
  +    JSIdArray *ida;     /* all property ids in enumeration */
  +} JSNativeIteratorState;
   
   /*
    * This function is used to enumerate the properties of native JSObjects
  @@ -3562,7 +3444,6 @@
   js_Enumerate(JSContext *cx, JSObject *obj, JSIterateOp enum_op,
                jsval *statep, jsid *idp)
   {
  -    JSRuntime *rt;
       JSObject *proto;
       JSClass *clasp;
       JSEnumerateOp enumerate;
  @@ -3572,7 +3453,6 @@
       JSIdArray *ida;
       JSNativeIteratorState *state;
   
  -    rt = cx->runtime;
       clasp = OBJ_GET_CLASS(cx, obj);
       enumerate = clasp->enumerate;
       if (clasp->flags & JSCLASS_NEW_ENUMERATE)
  @@ -3649,15 +3529,6 @@
           }
           state->ida = ida;
           state->next_index = 0;
  -
  -        JS_LOCK_RUNTIME(rt);
  -        state->next = rt->nativeIteratorStates;
  -        if (state->next)
  -            state->next->prevp = &state->next;
  -        state->prevp = &rt->nativeIteratorStates;
  -        *state->prevp = state;
  -        JS_UNLOCK_RUNTIME(rt);
  -
           *statep = PRIVATE_TO_JSVAL(state);
           if (idp)
               *idp = INT_TO_JSVAL(length);
  @@ -3675,17 +3546,6 @@
   
         case JSENUMERATE_DESTROY:
           state = (JSNativeIteratorState *) JSVAL_TO_PRIVATE(*statep);
  -
  -        JS_LOCK_RUNTIME(rt);
  -        JS_ASSERT(rt->nativeIteratorStates);
  -        JS_ASSERT(*state->prevp == state);
  -        if (state->next) {
  -            JS_ASSERT(state->next->prevp == &state->next);
  -            state->next->prevp = state->prevp;
  -        }
  -        *state->prevp = state->next;
  -        JS_UNLOCK_RUNTIME(rt);
  -
           JS_DestroyIdArray(cx, state->ida);
           JS_free(cx, state);
           *statep = JSVAL_NULL;
  @@ -3694,84 +3554,41 @@
       return JS_TRUE;
   }
   
  -void
  -js_MarkNativeIteratorStates(JSContext *cx)
  -{
  -    JSNativeIteratorState *state;
  -    jsid *cursor, *end, id;
  -
  -    state = cx->runtime->nativeIteratorStates;
  -    if (!state)
  -        return;
  -
  -    do {
  -        JS_ASSERT(*state->prevp == state);
  -        cursor = state->ida->vector;
  -        end = cursor + state->ida->length;
  -        for (; cursor != end; ++cursor) {
  -            id = *cursor;
  -            if (JSID_IS_ATOM(id)) {
  -                GC_MARK_ATOM(cx, JSID_TO_ATOM(id), NULL);
  -            } else if (JSID_IS_OBJECT(id)) {
  -                GC_MARK(cx, JSID_TO_OBJECT(id), "ida->vector[i]", NULL);
  -            }
  -        }
  -    } while ((state = state->next) != NULL);
  -}
  -  
  -
   JSBool
   js_CheckAccess(JSContext *cx, JSObject *obj, jsid id, JSAccessMode mode,
                  jsval *vp, uintN *attrsp)
   {
  -    JSBool writing;
       JSObject *pobj;
       JSProperty *prop;
  -    JSClass *clasp;
       JSScopeProperty *sprop;
  +    JSClass *clasp;
       JSCheckAccessOp check;
  +    JSBool ok;
   
  -    writing = (mode & JSACC_WRITE) != 0;
  -    switch (mode & JSACC_TYPEMASK) {
  -      case JSACC_PROTO:
  -        pobj = obj;
  -        if (!writing)
  -            *vp = OBJ_GET_SLOT(cx, obj, JSSLOT_PROTO);
  -        *attrsp = JSPROP_PERMANENT;
  -        break;
  -
  -      case JSACC_PARENT:
  -        JS_ASSERT(!writing);
  -        pobj = obj;
  -        *vp = OBJ_GET_SLOT(cx, obj, JSSLOT_PARENT);
  -        *attrsp = JSPROP_READONLY | JSPROP_PERMANENT;
  -        break;
  -
  -      default:
  -        if (!js_LookupProperty(cx, obj, id, &pobj, &prop))
  -            return JS_FALSE;
  -        if (!prop) {
  -            if (!writing)
  -                *vp = JSVAL_VOID;
  -            *attrsp = 0;
  -            clasp = OBJ_GET_CLASS(cx, obj);
  -            return !clasp->checkAccess ||
  -                   clasp->checkAccess(cx, obj, ID_TO_VALUE(id), mode, vp);
  -        }
  -        if (!OBJ_IS_NATIVE(pobj)) {
  -            OBJ_DROP_PROPERTY(cx, pobj, prop);
  -            return OBJ_CHECK_ACCESS(cx, pobj, id, mode, vp, attrsp);
  -        }
  -
  -        sprop = (JSScopeProperty *)prop;
  -        *attrsp = sprop->attrs;
  -        if (!writing) {
  -            *vp = (SPROP_HAS_VALID_SLOT(sprop, OBJ_SCOPE(pobj)))
  -                  ? LOCKED_OBJ_GET_SLOT(pobj, sprop->slot)
  -                  : JSVAL_VOID;
  -        }
  +    if (!js_LookupProperty(cx, obj, id, &pobj, &prop))
  +        return JS_FALSE;
  +    if (!prop) {
  +        *vp = JSVAL_VOID;
  +        *attrsp = 0;
  +        clasp = OBJ_GET_CLASS(cx, obj);
  +        return !clasp->checkAccess ||
  +               clasp->checkAccess(cx, obj, ID_TO_VALUE(id), mode, vp);
  +    }
  +    if (!OBJ_IS_NATIVE(pobj)) {
           OBJ_DROP_PROPERTY(cx, pobj, prop);
  +        return OBJ_CHECK_ACCESS(cx, pobj, id, mode, vp, attrsp);
  +    }
  +    sprop = (JSScopeProperty *)prop;
  +    if (!(mode & JSACC_WRITE)) {
  +        *vp = (SPROP_HAS_VALID_SLOT(sprop, OBJ_SCOPE(pobj)))
  +            ? LOCKED_OBJ_GET_SLOT(pobj, sprop->slot)
  +            : ((mode & JSACC_WATCH) == JSACC_PROTO)
  +            ? LOCKED_OBJ_GET_SLOT(obj, JSSLOT_PROTO)
  +            : (mode == JSACC_PARENT)
  +            ? LOCKED_OBJ_GET_SLOT(obj, JSSLOT_PARENT)
  +            : JSVAL_VOID;
       }
  +    *attrsp = sprop->attrs;
   
       /*
        * If obj's class has a stub (null) checkAccess hook, use the per-runtime
  @@ -3785,11 +3602,19 @@
        * checkObjectAccess hook.  This covers precompilation-based sharing and
        * (possibly unintended) runtime sharing across trust boundaries.
        */
  -    clasp = OBJ_GET_CLASS(cx, pobj);
  +    clasp = LOCKED_OBJ_GET_CLASS(pobj);
       check = clasp->checkAccess;
       if (!check)
           check = cx->runtime->checkObjectAccess;
  -    return !check || check(cx, pobj, ID_TO_VALUE(id), mode, vp);
  +    if (check) {
  +        JS_UNLOCK_OBJ(cx, pobj);
  +        ok = check(cx, pobj, ID_TO_VALUE(id), mode, vp);
  +        JS_LOCK_OBJ(cx, pobj);
  +    } else {
  +        ok = JS_TRUE;
  +    }
  +    OBJ_DROP_PROPERTY(cx, pobj, prop);
  +    return ok;
   }
   
   #ifdef JS_THREADSAFE
  @@ -4171,7 +3996,6 @@
                uintN argc, jsval *argv, jsval *rval)
   {
       JSErrorReporter older;
  -    jsid id;
       jsval fval;
       JSBool ok;
       int stackDummy;
  @@ -4187,24 +4011,14 @@
        * behave properly.
        */
       older = JS_SetErrorReporter(cx, NULL);
  -    id = ATOM_TO_JSID(atom);
  -    fval = JSVAL_VOID;
  -#if JS_HAS_XML_SUPPORT
  -    if (OBJECT_IS_XML(cx, obj)) {
  -        JSXMLObjectOps *ops;
  -
  -        ops = (JSXMLObjectOps *) obj->map->ops;
  -        obj = ops->getMethod(cx, obj, id, &fval);
  -        ok = (obj != NULL);
  -    } else
  -#endif
  -    {
  -        ok = OBJ_GET_PROPERTY(cx, obj, id, &fval);
  -    }
  -    if (!ok)
  +    if (!OBJ_GET_PROPERTY(cx, obj, ATOM_TO_JSID(atom), &fval)) {
           JS_ClearPendingException(cx);
  -    ok = JSVAL_IS_PRIMITIVE(fval) ||
  -         js_InternalCall(cx, obj, fval, argc, argv, rval);
  +        ok = JS_TRUE;
  +    } else if (!JSVAL_IS_PRIMITIVE(fval)) {
  +        ok = js_InternalCall(cx, obj, fval, argc, argv, rval);
  +    } else {
  +        ok = JS_TRUE;
  +    }
       JS_SetErrorReporter(cx, older);
       return ok;
   }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsobj.h
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 jsobj.h
  --- ossp-pkg/js/src/jsobj.h	21 Jun 2006 23:02:59 -0000	1.1.1.1
  +++ ossp-pkg/js/src/jsobj.h	23 Oct 2005 09:13:04 -0000	1.1.1.2
  @@ -259,13 +259,6 @@
   extern void
   js_LeaveSharpObject(JSContext *cx, JSIdArray **idap);
   
  -/*
  - * Mark objects stored in map if GC happens between js_EnterSharpObject
  - * and js_LeaveSharpObject. GC calls this when map->depth > 0.
  - */
  -extern void
  -js_GCMarkSharpMap(JSContext *cx, JSSharpObjectMap *map);
  -
   extern JSBool
   js_obj_toSource(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
                   jsval *rval);
  @@ -440,9 +433,6 @@
   js_Enumerate(JSContext *cx, JSObject *obj, JSIterateOp enum_op,
                jsval *statep, jsid *idp);
   
  -extern void
  -js_MarkNativeIteratorStates(JSContext *cx);
  -
   extern JSBool
   js_CheckAccess(JSContext *cx, JSObject *obj, jsid id, JSAccessMode mode,
                  jsval *vp, uintN *attrsp);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsopcode.c
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 jsopcode.c
  --- ossp-pkg/js/src/jsopcode.c	28 Apr 2006 18:03:27 -0000	1.1.1.1
  +++ ossp-pkg/js/src/jsopcode.c	4 Apr 2006 14:09:45 -0000	1.1.1.2
  @@ -463,10 +463,30 @@
               break;
   
           /* Use js_EscapeMap, \u, or \x only if necessary. */
  -        if ((u = js_strchr(js_EscapeMap, c)) != NULL)
  +        if ((u = js_strchr(js_EscapeMap, c)) != NULL) {
               ok = Sprint(sp, "\\%c", (char)u[1]) >= 0;
  -        else
  +        } else {
  +#ifdef JS_C_STRINGS_ARE_UTF8
  +            /* If this is a surrogate pair, make sure to print the pair. */
  +            if (c >= 0xD800 && c <= 0xDBFF) {
  +                jschar buffer[3];
  +                buffer[0] = c;
  +                buffer[1] = *++t;
  +                buffer[2] = 0;
  +                if (t == z) {
  +                    ok = JS_FALSE;
  +                    break;
  +                }
  +                ok = Sprint(sp, "%hs", buffer) >= 0;
  +            } else {
  +                /* Print as UTF-8 string. */
  +                ok = Sprint(sp, "%hc", c) >= 0;
  +            }
  +#else
  +            /* Use \uXXXX or \xXX  if the string cannot be displayed as UTF-8. */
               ok = Sprint(sp, (c >> 8) ? "\\u%04X" : "\\x%02X", c) >= 0;
  +#endif
  +        }
           if (!ok)
               return NULL;
       }
  @@ -856,20 +876,13 @@
   static const char *
   VarPrefix(jssrcnote *sn)
   {
  -    const char *kw;
  -    static char buf[8];
  -
  -    kw = NULL;
       if (sn) {
           if (SN_TYPE(sn) == SRC_VAR)
  -            kw = js_var_str;
  -        else if (SN_TYPE(sn) == SRC_CONST)
  -            kw = js_const_str;
  -    }
  -    if (!kw)
  -        return "";
  -    JS_snprintf(buf, sizeof buf, "%s ", kw);
  -    return buf;
  +            return "var ";
  +        if (SN_TYPE(sn) == SRC_CONST)
  +            return "const ";
  +    }
  +    return "";
   }
   
   static JSBool
  @@ -2557,7 +2570,7 @@
   
                 case JSOP_DEFXMLNS:
                   rval = POP_STR();
  -                js_printf(jp, "\t%s %s %s = %s;\n",
  +                js_printf(jp, "\t%s %s %s %s;\n",
                             js_default_str, js_xml_str, js_namespace_str, rval);
                   todo = -2;
                   break;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsparse.c
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 jsparse.c
  --- ossp-pkg/js/src/jsparse.c	16 Jun 2006 01:11:53 -0000	1.1.1.1
  +++ ossp-pkg/js/src/jsparse.c	4 Apr 2006 14:09:45 -0000	1.1.1.2
  @@ -1933,6 +1933,15 @@
           break;
   
         case TOK_WITH:
  +        if (!js_ReportCompileErrorNumber(cx, ts,
  +                                         JSREPORT_TS |
  +                                         JSREPORT_WARNING |
  +                                         JSREPORT_STRICT,
  +                                         JSMSG_DEPRECATED_USAGE,
  +                                         js_with_statement_str)) {
  +            return NULL;
  +        }
  +
           pn = NewParseNode(cx, ts, PN_BINARY, tc);
           if (!pn)
               return NULL;
  @@ -4343,15 +4352,12 @@
           /* The parser already rejected end-tags with attributes. */
           JS_ASSERT(tt != TOK_XMLETAGO || i == 0);
           switch (pn2->pn_type) {
  -          case TOK_XMLATTR:
  -            if (!accum)
  -                goto cantfold;
  -            /* FALL THROUGH */
             case TOK_XMLNAME:
  +          case TOK_XMLATTR:
             case TOK_XMLSPACE:
             case TOK_XMLTEXT:
             case TOK_STRING:
  -            if (pn2->pn_arity == PN_LIST)
  +            if (pn->pn_arity == PN_LIST)
                   goto cantfold;
               str = ATOM_TO_STRING(pn2->pn_atom);
               break;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsprf.c
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 jsprf.c
  --- ossp-pkg/js/src/jsprf.c	24 Sep 2004 03:31:15 -0000	1.1.1.1
  +++ ossp-pkg/js/src/jsprf.c	4 Apr 2006 14:09:45 -0000	1.1.1.2
  @@ -49,6 +49,8 @@
   #include "jsprf.h"
   #include "jslong.h"
   #include "jsutil.h" /* Added by JSIFY */
  +#include "jspubtd.h"
  +#include "jsstr.h"
   
   /*
   ** Note: on some platforms va_list is defined as an array,
  @@ -105,6 +107,7 @@
   #define TYPE_STRING     8
   #define TYPE_DOUBLE     9
   #define TYPE_INTSTR     10
  +#define TYPE_WSTRING    11
   #define TYPE_UNKNOWN    20
   
   #define FLAG_LEFT       0x1
  @@ -395,6 +398,27 @@
       return fill2(ss, s ? s : "(null)", slen, width, flags);
   }
   
  +static int cvt_ws(SprintfState *ss, const jschar *ws, int width, int prec,
  +                  int flags)
  +{
  +    int result;
  +    /* 
  +     * Supply NULL as the JSContext; errors are not reported, 
  +     * and malloc() is used to allocate the buffer buffer. 
  +     */
  +    if (ws) {
  +        int slen = js_strlen(ws);
  +        char *s = js_DeflateString(NULL, ws, slen);
  +        if (!s)
  +            return -1; /* JSStuffFunc error indicator. */
  +        result = cvt_s(ss, s, width, prec, flags);
  +        free(s);
  +    } else {
  +        result = cvt_s(ss, NULL, width, prec, flags);
  +    }
  +    return result;
  +}
  +
   /*
   ** BuildArgArray stands for Numbered Argument list Sprintf
   ** for example,
  @@ -578,7 +602,7 @@
               break;
   
           case 's':
  -            nas[ cn ].type = TYPE_STRING;
  +            nas[ cn ].type = (nas[ cn ].type == TYPE_UINT16) ? TYPE_WSTRING : TYPE_STRING;
               break;
   
           case 'n':
  @@ -635,6 +659,8 @@
   
           case TYPE_STRING:       (void)va_arg( ap, char* );              break;
   
  +        case TYPE_WSTRING:      (void)va_arg( ap, jschar* );            break;
  +
           case TYPE_INTSTR:       (void)va_arg( ap, JSIntn* );            break;
   
           case TYPE_DOUBLE:       (void)va_arg( ap, double );             break;
  @@ -662,11 +688,13 @@
       int flags, width, prec, radix, type;
       union {
           char ch;
  +        jschar wch;
           int i;
           long l;
           JSInt64 ll;
           double d;
           const char *s;
  +        const jschar* ws;
           int *ip;
       } u;
       const char *fmt0;
  @@ -678,7 +706,10 @@
       struct NumArgState nasArray[ NAS_DEFAULT_NUM ];
       char pattern[20];
       const char *dolPt = NULL;  /* in "%4$.2f", dolPt will poiont to . */
  -
  +#ifdef JS_C_STRINGS_ARE_UTF8
  +    char utf8buf[6];
  +    int utf8len;
  +#endif
   
       /*
       ** build an argument array, IF the fmt is numbered argument
  @@ -905,7 +936,6 @@
               break;
   
             case 'c':
  -            u.ch = va_arg(ap, int);
               if ((flags & FLAG_LEFT) == 0) {
                   while (width-- > 1) {
                       rv = (*ss->stuff)(ss, " ", 1);
  @@ -914,7 +944,20 @@
                       }
                   }
               }
  -            rv = (*ss->stuff)(ss, &u.ch, 1);
  +            switch (type) {
  +              case TYPE_INT16:
  +                /* Treat %hc as %c if JS_C_STRINGS_ARE_UTF8 is undefined. */
  +#ifdef JS_C_STRINGS_ARE_UTF8
  +                u.wch = va_arg(ap, int);
  +                utf8len = js_OneUcs4ToUtf8Char (utf8buf, u.wch);
  +                rv = (*ss->stuff)(ss, utf8buf, utf8len);
  +                break;
  +#endif
  +              case TYPE_INTN:
  +                u.ch = va_arg(ap, int);
  +                rv = (*ss->stuff)(ss, &u.ch, 1);
  +                break;
  +            }
               if (rv < 0) {
                   return rv;
               }
  @@ -953,8 +996,17 @@
   #endif
   
             case 's':
  -            u.s = va_arg(ap, const char*);
  -            rv = cvt_s(ss, u.s, width, prec, flags);
  +            if(type == TYPE_INT16) {
  +                /* 
  +                 * This would do a simple string/byte conversion 
  +                 * if JS_C_STRINGS_ARE_UTF8 is not defined. 
  +                 */
  +                u.ws = va_arg(ap, const jschar*);
  +                rv = cvt_ws(ss, u.ws, width, prec, flags);
  +            } else {
  +                u.s = va_arg(ap, const char*);
  +                rv = cvt_s(ss, u.s, width, prec, flags);
  +            }
               if (rv < 0) {
                   return rv;
               }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsprf.h
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 jsprf.h
  --- ossp-pkg/js/src/jsprf.h	9 Dec 2004 01:32:19 -0000	1.1.1.1
  +++ ossp-pkg/js/src/jsprf.h	4 Apr 2006 14:09:45 -0000	1.1.1.2
  @@ -50,7 +50,9 @@
   **      %ld, %lu, %lx, %lX, %lo - 32-bit versions of above
   **      %lld, %llu, %llx, %llX, %llo - 64 bit versions of above
   **      %s - string
  +**      %hs - 16-bit version of above (only available if compiled with JS_C_STRINGS_ARE_UTF8)
   **      %c - character
  +**      %hc - 16-bit version of above (only available if compiled with JS_C_STRINGS_ARE_UTF8)
   **      %p - pointer (deals with machine dependent pointer size)
   **      %f - float
   **      %g - float
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jspubtd.h
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 jspubtd.h
  --- ossp-pkg/js/src/jspubtd.h	21 Oct 2005 23:30:23 -0000	1.1.1.1
  +++ ossp-pkg/js/src/jspubtd.h	4 Apr 2006 14:09:45 -0000	1.1.1.2
  @@ -546,9 +546,28 @@
   (* JS_DLL_CALLBACK JSErrorReporter)(JSContext *cx, const char *message,
                                       JSErrorReport *report);
   
  +/*
  + * Possible exception types. These types are part of a JSErrorFormatString 
  + * structure. They define which error to throw in case of a runtime error.
  + * JSEXN_NONE marks an unthrowable error.
  + */
  +typedef enum JSExnType {
  +    JSEXN_NONE = -1,
  +      JSEXN_ERR,
  +        JSEXN_INTERNALERR,
  +        JSEXN_EVALERR,
  +        JSEXN_RANGEERR,
  +        JSEXN_REFERENCEERR,
  +        JSEXN_SYNTAXERR,
  +        JSEXN_TYPEERR,
  +        JSEXN_URIERR,
  +        JSEXN_LIMIT
  +} JSExnType;
  +
   typedef struct JSErrorFormatString {
  -    const char *format;
  -    uintN argCount;
  +    const char *format;  /* the error message (may be UTF-8 if compiled with JS_C_STRINGS_ARE_UTF8) */
  +    uint16 argCount;     /* the number of arguments to convert in the error message */
  +    uint16 exnType;      /* One of the JSExnType constants above */
   } JSErrorFormatString;
   
   typedef const JSErrorFormatString *
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsregexp.c
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 jsregexp.c
  --- ossp-pkg/js/src/jsregexp.c	6 Jun 2006 12:01:13 -0000	1.1.1.1
  +++ ossp-pkg/js/src/jsregexp.c	4 Apr 2006 14:09:45 -0000	1.1.1.2
  @@ -1925,7 +1925,10 @@
   
       state.context = cx;
       state.tokenStream = ts;
  -    state.cpbegin = state.cp = JSSTRING_CHARS(str);
  +    state.cp = js_UndependString(cx, str);
  +    if (!state.cp)
  +        goto out;
  +    state.cpbegin = state.cp;
       state.cpend = state.cp + len;
       state.flags = flags;
       state.parenCount = 0;
  @@ -2034,6 +2037,10 @@
       return js_NewRegExp(cx, ts, str, flags, flat);
   }
   
  +
  +#define HOLD_REGEXP(cx, re) JS_ATOMIC_INCREMENT(&(re)->nrefs)
  +#define DROP_REGEXP(cx, re) js_DestroyRegExp(cx, re)
  +
   /*
    * Save the current state of the match - the position in the input
    * text as well as the position in the bytecode. The state of any
  @@ -4064,12 +4071,6 @@
           obj = js_NewObject(cx, &js_RegExpClass, NULL, NULL);
           if (!obj)
               return JS_FALSE;
  -
  -        /*
  -         * regexp_compile does not use rval to root its temporaries
  -         * so we can use it to root obj.
  -         */
  -        *rval = OBJECT_TO_JSVAL(obj);
       }
       return regexp_compile(cx, obj, argc, argv, rval);
   }
  @@ -4122,10 +4123,12 @@
           return NULL;
       JS_PUSH_SINGLE_TEMP_ROOT(cx, STRING_TO_JSVAL(str), &tvr);
       obj = js_NewObject(cx, &js_RegExpClass, NULL, NULL);
  -    if (!obj || !JS_SetPrivate(cx, obj, re) || !js_SetLastIndex(cx, obj, 0)) {
  +    if (!obj || !JS_SetPrivate(cx, obj, re)) {
           js_DestroyRegExp(cx, re);
           obj = NULL;
       }
  +    if (obj && !js_SetLastIndex(cx, obj, 0))
  +        obj = NULL;
       JS_POP_TEMP_ROOT(cx, &tvr);
       return obj;
   }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsregexp.h
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 jsregexp.h
  --- ossp-pkg/js/src/jsregexp.h	22 Feb 2006 23:10:57 -0000	1.1.1.1
  +++ ossp-pkg/js/src/jsregexp.h	30 Sep 2005 21:57:31 -0000	1.1.1.2
  @@ -117,9 +117,6 @@
   js_NewRegExpOpt(JSContext *cx, JSTokenStream *ts,
                   JSString *str, JSString *opt, JSBool flat);
   
  -#define HOLD_REGEXP(cx, re) JS_ATOMIC_INCREMENT(&(re)->nrefs)
  -#define DROP_REGEXP(cx, re) js_DestroyRegExp(cx, re)
  -
   extern void
   js_DestroyRegExp(JSContext *cx, JSRegExp *re);
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsscan.c
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 jsscan.c
  --- ossp-pkg/js/src/jsscan.c	13 Jun 2006 22:12:56 -0000	1.1.1.1
  +++ ossp-pkg/js/src/jsscan.c	4 Apr 2006 14:09:45 -0000	1.1.1.2
  @@ -798,12 +798,8 @@
       jschar *bp;
   
       offset = PTRDIFF(sb->ptr, sb->base, jschar);
  -    JS_ASSERT(offset >= 0);
  -    newlength += offset + 1;
  -    if ((size_t)offset < newlength && newlength < ~(size_t)0 / sizeof(jschar))
  -        bp = realloc(sb->base, newlength * sizeof(jschar));
  -    else
  -        bp = NULL;
  +    newlength += offset;
  +    bp = (jschar *) realloc(sb->base, (newlength + 1) * sizeof(jschar));
       if (!bp) {
           free(sb->base);
           sb->base = STRING_BUFFER_ERROR_BASE;
  @@ -811,7 +807,7 @@
       }
       sb->base = bp;
       sb->ptr = bp + offset;
  -    sb->limit = bp + newlength - 1;
  +    sb->limit = bp + newlength;
       return JS_TRUE;
   }
   
  @@ -1024,8 +1020,9 @@
       msg = JSMSG_BAD_XML_NCR;
   bad:
       /* No match: throw a TypeError per ECMA-357 10.3.2.1 step 8(a). */
  +    FastAppendChar(&ts->tokenbuf, ';');
       bytes = js_DeflateString(cx, bp + 1,
  -                             PTRDIFF(ts->tokenbuf.ptr, bp, jschar) - 1);
  +                             PTRDIFF(ts->tokenbuf.ptr, bp, jschar) - 2);
       if (bytes) {
           js_ReportCompileErrorNumber(cx, ts, JSREPORT_TS | JSREPORT_ERROR,
                                       msg, bytes);
  @@ -1115,21 +1112,16 @@
       JSBool hadUnicodeEscape;
   
   #define INIT_TOKENBUF()     (ts->tokenbuf.ptr = ts->tokenbuf.base)
  +#define NUL_TERM_TOKENBUF() (*ts->tokenbuf.ptr = 0)
  +#define TRIM_TOKENBUF(i)    (ts->tokenbuf.ptr = ts->tokenbuf.base + i)
   #define TOKENBUF_LENGTH()   PTRDIFF(ts->tokenbuf.ptr, ts->tokenbuf.base, jschar)
  -#define TOKENBUF_OK()       STRING_BUFFER_OK(&ts->tokenbuf)
  -#define TOKENBUF_TO_ATOM()  (TOKENBUF_OK()                                    \
  -                             ? js_AtomizeChars(cx,                            \
  -                                               TOKENBUF_BASE(),               \
  -                                               TOKENBUF_LENGTH(),             \
  -                                               0)                             \
  -                             : NULL)
  -#define ADD_TO_TOKENBUF(c)  FastAppendChar(&ts->tokenbuf, (jschar) (c))
  -
  -/* The following 4 macros should only be used when TOKENBUF_OK() is true. */
   #define TOKENBUF_BASE()     (ts->tokenbuf.base)
   #define TOKENBUF_CHAR(i)    (ts->tokenbuf.base[i])
  -#define TRIM_TOKENBUF(i)    (ts->tokenbuf.ptr = ts->tokenbuf.base + i)
  -#define NUL_TERM_TOKENBUF() (*ts->tokenbuf.ptr = 0)
  +#define TOKENBUF_TO_ATOM()  js_AtomizeChars(cx,                               \
  +                                            TOKENBUF_BASE(),                  \
  +                                            TOKENBUF_LENGTH(),                \
  +                                            0)
  +#define ADD_TO_TOKENBUF(c)  FastAppendChar(&ts->tokenbuf, (jschar) (c))
   
       /* If there was a fatal error, keep returning TOK_ERROR. */
       if (ts->flags & TSF_ERROR)
  @@ -1258,7 +1250,7 @@
                    * so escape " if it is expressed directly in a single-quoted
                    * attribute value.
                    */
  -                if (c == '"' && !(ts->flags & TSF_XMLONLYMODE)) {
  +                if (c == '"') {
                       JS_ASSERT(qc == '\'');
                       js_AppendCString(&ts->tokenbuf, js_quot_entity_str);
                       continue;
  @@ -1349,9 +1341,11 @@
               kw = ATOM_KEYWORD(atom);
               if (kw->tokentype == TOK_RESERVED) {
                   char buf[MAX_KEYWORD_LENGTH + 1];
  -
  -                js_DeflateStringToBuffer(buf, TOKENBUF_BASE(),
  -                                              TOKENBUF_LENGTH());
  +                size_t buflen = sizeof(buf) - 1;
  +                if (!js_DeflateStringToBuffer(cx, TOKENBUF_BASE(), TOKENBUF_LENGTH(),
  +                                                  buf, &buflen))
  +                    goto error;
  +                buf [buflen] = 0;
                   if (!js_ReportCompileErrorNumber(cx, ts,
                                                    JSREPORT_TS |
                                                    JSREPORT_WARNING |
  @@ -1448,8 +1442,6 @@
           UngetChar(ts, c);
           ADD_TO_TOKENBUF(0);
   
  -        if (!TOKENBUF_OK())
  -            goto error;
           if (radix == 10) {
               if (!js_strtod(cx, TOKENBUF_BASE(), &endptr, &dval)) {
                   js_ReportCompileErrorNumber(cx, ts,
  @@ -1750,8 +1742,6 @@
                   if (contentIndex < 0) {
                       atom = cx->runtime->atomState.emptyAtom;
                   } else {
  -                    if (!TOKENBUF_OK())
  -                        goto error;
                       atom = js_AtomizeChars(cx,
                                              &TOKENBUF_CHAR(contentIndex),
                                              TOKENBUF_LENGTH() - contentIndex,
  @@ -1968,8 +1958,6 @@
                   goto error;
               }
               /* XXXbe fix jsregexp.c so it doesn't depend on NUL termination */
  -            if (!TOKENBUF_OK())
  -                goto error;
               NUL_TERM_TOKENBUF();
               obj = js_NewRegExpObject(cx, ts,
                                        TOKENBUF_BASE(),
  @@ -2116,14 +2104,12 @@
       goto out;
   
   #undef INIT_TOKENBUF
  +#undef TRIM_TOKENBUF
   #undef TOKENBUF_LENGTH
  -#undef TOKENBUF_OK
  -#undef TOKENBUF_TO_ATOM
  -#undef ADD_TO_TOKENBUF
   #undef TOKENBUF_BASE
   #undef TOKENBUF_CHAR
  -#undef TRIM_TOKENBUF
  -#undef NUL_TERM_TOKENBUF
  +#undef TOKENBUF_TO_ATOM
  +#undef ADD_TO_TOKENBUF
   }
   
   void
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsscope.c
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 jsscope.c
  --- ossp-pkg/js/src/jsscope.c	25 Apr 2006 01:10:30 -0000	1.1.1.1
  +++ ossp-pkg/js/src/jsscope.c	6 Dec 2004 23:17:19 -0000	1.1.1.2
  @@ -98,7 +98,7 @@
   }
   
   static JSBool
  -CreateScopeTable(JSContext *cx, JSScope *scope, JSBool report)
  +CreateScopeTable(JSScope *scope)
   {
       int sizeLog2;
       JSScopeProperty *sprop, **spp;
  @@ -120,14 +120,8 @@
   
       scope->table = (JSScopeProperty **)
           calloc(JS_BIT(sizeLog2), sizeof(JSScopeProperty *));
  -    if (!scope->table) {
  -        if (report)
  -            JS_ReportOutOfMemory(cx);
  +    if (!scope->table)
           return JS_FALSE;
  -    }
  -
  -    /* Racy update after calloc, to help keep the GC self-scheduled well. */
  -    cx->runtime->gcMallocBytes += JS_BIT(sizeLog2) * sizeof(JSScopeProperty *);
   
       scope->hashShift = JS_DHASH_BITS - sizeLog2;
       for (sprop = scope->lastProp; sprop; sprop = sprop->parent) {
  @@ -354,9 +348,6 @@
       oldtable = scope->table;
       scope->table = table;
   
  -    /* Treat the above calloc as a JS_malloc, to match CreateScopeTable. */
  -    cx->runtime->gcMallocBytes += nbytes;
  -
       /* Copy only live entries, leaving removed and free ones behind. */
       for (oldspp = oldtable; oldsize != 0; oldspp++) {
           sprop = SPROP_FETCH(oldspp);
  @@ -977,8 +968,10 @@
                    * delete code is simple-minded that way!
                    */
                   if (!scope->table) {
  -                    if (!CreateScopeTable(cx, scope, JS_TRUE))
  +                    if (!CreateScopeTable(scope)) {
  +                        JS_ReportOutOfMemory(cx);
                           return NULL;
  +                    }
                       spp = js_SearchScope(scope, id, JS_TRUE);
                       sprop = overwriting = SPROP_FETCH(spp);
                   }
  @@ -1174,7 +1167,7 @@
            * entry count just reached the threshold.
            */
           if (!scope->table && scope->entryCount >= SCOPE_HASH_THRESHOLD)
  -            (void) CreateScopeTable(cx, scope, JS_FALSE);
  +            (void) CreateScopeTable(scope);
       }
   
       METER(adds);
  @@ -1316,8 +1309,10 @@
   
       /* Convert from a list to a hash so we can handle "middle deletes". */
       if (!scope->table && sprop != scope->lastProp) {
  -        if (!CreateScopeTable(cx, scope, JS_TRUE))
  +        if (!CreateScopeTable(scope)) {
  +            JS_ReportOutOfMemory(cx);
               return JS_FALSE;
  +        }
           spp = js_SearchScope(scope, id, JS_FALSE);
           stored = *spp;
           sprop = SPROP_CLEAR_COLLISION(stored);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsscript.c
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 jsscript.c
  --- ossp-pkg/js/src/jsscript.c	6 Jun 2006 12:01:13 -0000	1.1.1.1
  +++ ossp-pkg/js/src/jsscript.c	1 Nov 2005 01:23:48 -0000	1.1.1.2
  @@ -861,12 +861,6 @@
           obj = js_NewObject(cx, &js_ScriptClass, NULL, NULL);
           if (!obj)
               return JS_FALSE;
  -
  -        /*
  -         * script_compile does not use rval to root its temporaries
  -         * so we can use it to root obj.
  -         */
  -        *rval = OBJECT_TO_JSVAL(obj);
       }
       return script_compile(cx, obj, argc, argv, rval);
   }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsstr.c
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 jsstr.c
  --- ossp-pkg/js/src/jsstr.c	3 May 2006 23:59:51 -0000	1.1.1.1
  +++ ossp-pkg/js/src/jsstr.c	4 Apr 2006 14:09:45 -0000	1.1.1.2
  @@ -267,9 +267,6 @@
   str_encodeURI_Component(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
                           jsval *rval);
   
  -static int
  -OneUcs4ToUtf8Char(uint8 *utf8Buffer, uint32 ucs4Char);
  -
   static uint32
   Utf8ToOneUcs4Char(const uint8 *utf8Buffer, int utf8Length);
   
  @@ -1168,9 +1165,7 @@
               return JS_FALSE;
           reobj = NULL;
       }
  -    /* From here on, all control flow must reach the matching DROP. */
       data->regexp = re;
  -    HOLD_REGEXP(cx, re);
   
       if (re->flags & JSREG_GLOB)
           data->flags |= GLOBAL_REGEXP;
  @@ -1186,23 +1181,23 @@
           if (reobj) {
               /* Set the lastIndex property's reserved slot to 0. */
               ok = js_SetLastIndex(cx, reobj, 0);
  +            if (!ok)
  +                return JS_FALSE;
           } else {
               ok = JS_TRUE;
           }
  -        if (ok) {
  -            length = JSSTRING_LENGTH(str);
  -            for (count = 0; index <= length; count++) {
  -                ok = js_ExecuteRegExp(cx, re, str, &index, JS_TRUE, rval);
  -                if (!ok || *rval != JSVAL_TRUE)
  -                    break;
  -                ok = glob(cx, count, data);
  -                if (!ok)
  +        length = JSSTRING_LENGTH(str);
  +        for (count = 0; index <= length; count++) {
  +            ok = js_ExecuteRegExp(cx, re, str, &index, JS_TRUE, rval);
  +            if (!ok || *rval != JSVAL_TRUE)
  +                break;
  +            ok = glob(cx, count, data);
  +            if (!ok)
  +                break;
  +            if (cx->regExpStatics.lastMatch.length == 0) {
  +                if (index == length)
                       break;
  -                if (cx->regExpStatics.lastMatch.length == 0) {
  -                    if (index == length)
  -                        break;
  -                    index++;
  -                }
  +                index++;
               }
           }
       } else {
  @@ -1243,7 +1238,6 @@
           ok = js_ExecuteRegExp(cx, re, str, &index, test, rval);
       }
   
  -    DROP_REGEXP(cx, re);
       if (reobj) {
           /* Tell our caller that it doesn't need to destroy data->regexp. */
           data->flags &= ~KEEP_REGEXP;
  @@ -1252,7 +1246,6 @@
           data->regexp = NULL;
           js_DestroyRegExp(cx, re);
       }
  -
       return ok;
   }
   
  @@ -2183,11 +2176,6 @@
       endlen = strlen(end);
       taglen += JSSTRING_LENGTH(str) + 2 + endlen + 1;    /* 'str</end>' */
   
  -    if (taglen >= ~(size_t)0 / sizeof(jschar)) {
  -        JS_ReportOutOfMemory(cx);
  -        return JS_FALSE;
  -    }
  -
       tagbuf = (jschar *) JS_malloc(cx, (taglen + 1) * sizeof(jschar));
       if (!tagbuf)
           return JS_FALSE;
  @@ -2880,44 +2868,251 @@
       return s;
   }
   
  -#define INFLATE_STRING_BODY                                                   \
  -    for (i = 0; i < length; i++)                                              \
  -        chars[i] = (unsigned char) bytes[i];                                  \
  -    chars[i] = 0;
  +#ifdef JS_C_STRINGS_ARE_UTF8
   
  -void
  -js_InflateStringToBuffer(jschar *chars, const char *bytes, size_t length)
  +jschar *
  +js_InflateString(JSContext *cx, const char *bytes, size_t *length)
  +{
  +    jschar *chars = NULL;
  +    size_t dstlen = 0;
  +
  +    if (!js_InflateStringToBuffer(cx, bytes, *length, NULL, &dstlen))
  +        return NULL;
  +    chars = (jschar *) JS_malloc(cx, (dstlen + 1) * sizeof (jschar));
  +    if (!chars)
  +        return NULL;
  +    js_InflateStringToBuffer(cx, bytes, *length, chars, &dstlen);
  +    chars [dstlen] = 0;
  +    *length = dstlen;
  +    return chars;
  +}
  +
  +/*
  + * May be called with null cx by js_GetStringBytes, see below.
  + */
  +char *
  +js_DeflateString(JSContext *cx, const jschar *chars, size_t length)
  +{
  +    size_t size = 0;
  +    char *bytes = NULL;
  +    if (!js_DeflateStringToBuffer (cx, chars, length, NULL, &size))
  +        return NULL;
  +    bytes = (char *) (cx ? JS_malloc(cx, size+1) : malloc(size+1));
  +    if (!bytes)
  +        return NULL;
  +    js_DeflateStringToBuffer (cx, chars, length, bytes, &size);
  +    bytes [size] = 0;
  +    return bytes;
  +}
  +
  +JSBool
  +js_DeflateStringToBuffer(JSContext *cx, const jschar* src, size_t srclen, char* dst, size_t* dstlenp)
  +{
  +    size_t i, utf8Len, dstlen = *dstlenp, origDstlen = dstlen;
  +    jschar c, c2;
  +    uint32 v;
  +    uint8 utf8buf[6];
  +
  +    if (!dst)
  +        dstlen = origDstlen = (size_t) -1;
  +
  +    while (srclen) {
  +        c = *src++;
  +        srclen--;
  +        if ((c >= 0xDC00) && (c <= 0xDFFF))
  +            goto badSurrogate;
  +        if (c < 0xD800 || c > 0xDBFF) {
  +            v = c;
  +        } else {
  +            if (srclen < 1)
  +                goto bufferTooSmall;
  +            c2 = *src++;
  +            srclen--;
  +            if ((c2 < 0xDC00) || (c2 > 0xDFFF)) {
  +                c = c2;
  +                goto badSurrogate;
  +            }
  +            v = ((c - 0xD800) << 10) + (c2 - 0xDC00) + 0x10000;
  +        }
  +        if (v < 0x0080) {
  +            // no encoding necessary - performance hack
  +            if (!dstlen)
  +                goto bufferTooSmall;
  +            if (dst)
  +                *dst++ = (char) v;
  +            utf8Len = 1;
  +        } else {
  +            utf8Len = js_OneUcs4ToUtf8Char(utf8buf, v);
  +            if (utf8Len > dstlen)
  +                goto bufferTooSmall;
  +            if (dst) {
  +                for (i = 0; i < utf8Len; i++)
  +                    *dst++ = (char) utf8buf [i];
  +            }
  +        }
  +        dstlen -= utf8Len;
  +    }
  +    *dstlenp = (origDstlen - dstlen);
  +    return JS_TRUE;
  +
  +badSurrogate:
  +    *dstlenp = (origDstlen - dstlen);
  +    if (cx) {
  +        char buffer [10];
  +        JS_snprintf (buffer, 10, "0x%x", c);
  +        JS_ReportErrorFlagsAndNumber(cx,
  +                                JSREPORT_ERROR,
  +                                js_GetErrorMessage, NULL,
  +                                JSMSG_BAD_SURROGATE_CHAR,
  +                                buffer);
  +    }
  +    return JS_FALSE;
  +
  +bufferTooSmall:
  +    *dstlenp = (origDstlen - dstlen);
  +    if (cx)
  +        JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL, JSMSG_BUFFER_TOO_SMALL);
  +    return JS_FALSE;
  +}
  +
  +JSBool
  +js_InflateStringToBuffer(JSContext *cx, const char *src, size_t srclen, jschar* dst, size_t* dstlenp)
  +{
  +    uint32 v;
  +    size_t offset = 0, j, n, dstlen = *dstlenp, origDstlen = dstlen;
  +
  +    if (!dst)
  +        dstlen = origDstlen = (size_t) -1;
  +
  +    while (srclen) {
  +        v = (uint8) *src;
  +        n = 1;
  +        if (v & 0x80) {
  +            while (v & (0x80 >> n))
  +                n++;
  +            if (n > srclen)
  +                goto bufferTooSmall;
  +            if (n == 1 || n > 6)
  +                goto badCharacter;
  +            for (j = 1; j < n; j++) {
  +                if ((src [j] & 0xC0) != 0x80)
  +                    goto badCharacter;
  +            }
  +            v = Utf8ToOneUcs4Char(src, n);
  +            if (v >= 0x10000) {
  +                v -= 0x10000;
  +                if (v > 0xFFFFF || dstlen < 2) {
  +                    *dstlenp = (origDstlen - dstlen);
  +                    if (cx) {
  +                        char buffer [10];
  +                        JS_snprintf (buffer, 10, "0x%x", v + 0x10000);
  +                        JS_ReportErrorFlagsAndNumber(cx,
  +                                                JSREPORT_ERROR,
  +                                                js_GetErrorMessage, NULL,
  +                                                JSMSG_UTF8_CHAR_TOO_LARGE,
  +                                                buffer);
  +                    }
  +                    return JS_FALSE;
  +                }
  +                if (dstlen < 2)
  +                    goto bufferTooSmall;
  +                if (dst) {
  +                    *dst++ = (jschar)((v >> 10) + 0xD800);
  +                    v = (jschar)((v & 0x3FF) + 0xDC00);
  +                }
  +                dstlen--;
  +            }
  +        }
  +        if (!dstlen)
  +            goto bufferTooSmall;
  +        if (dst)
  +            *dst++ = (jschar) v;
  +        dstlen--;
  +        offset += n;
  +        src += n;
  +        srclen -= n;
  +    }
  +    *dstlenp = (origDstlen - dstlen);
  +    return JS_TRUE;
  +
  +badCharacter:
  +    *dstlenp = (origDstlen - dstlen);
  +    if (cx) {
  +        char buffer [10];
  +        JS_snprintf (buffer, 10, "%d", offset);
  +        JS_ReportErrorFlagsAndNumber(cx,
  +                                JSREPORT_ERROR,
  +                                js_GetErrorMessage, NULL,
  +                                JSMSG_MALFORMED_UTF8_CHAR,
  +                                buffer);
  +    }
  +    return JS_FALSE;
  +
  +bufferTooSmall:
  +    *dstlenp = (origDstlen - dstlen);
  +    if (cx)
  +        JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL, JSMSG_BUFFER_TOO_SMALL);
  +    return JS_FALSE;
  +}
  +
  +#else
  +
  +JSBool
  +js_InflateStringToBuffer(JSContext* cx, const char *bytes, size_t length, jschar *chars, size_t* charsLength)
   {
       size_t i;
   
  -    INFLATE_STRING_BODY
  +    if (length > *charsLength) {
  +        for (i = 0; i < *charsLength; i++)
  +            chars[i] = (unsigned char) bytes[i];
  +        if (cx)
  +            JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL, JSMSG_BUFFER_TOO_SMALL);
  +        return JS_FALSE;
  +    }
  +    else {
  +        for (i = 0; i < length; i++)
  +            chars[i] = (unsigned char) bytes[i];
  +        *charsLength = length;
  +        return JS_TRUE;
  +    }
   }
   
   jschar *
  -js_InflateString(JSContext *cx, const char *bytes, size_t length)
  +js_InflateString(JSContext *cx, const char *bytes, size_t *bytesLength)
   {
       jschar *chars;
  -    size_t i;
  +    size_t i, length = *bytesLength;
   
       chars = (jschar *) JS_malloc(cx, (length + 1) * sizeof(jschar));
  -    if (!chars)
  +    if (!chars) {
  +        *bytesLength = 0;
           return NULL;
  -
  -    INFLATE_STRING_BODY
  +    }
  +    for (i = 0; i < length; i++)
  +        chars[i] = (unsigned char) bytes[i];
  +    chars [length] = 0;
  +    *bytesLength = length;
       return chars;
   }
   
  -#define DEFLATE_STRING_BODY                                                   \
  -    for (i = 0; i < length; i++)                                              \
  -        bytes[i] = (char) chars[i];                                           \
  -    bytes[i] = 0;
  -
  -void
  -js_DeflateStringToBuffer(char *bytes, const jschar *chars, size_t length)
  +JSBool
  +js_DeflateStringToBuffer(JSContext* cx, const jschar *chars, size_t length, char *bytes, size_t* bytesLength)
   {
       size_t i;
   
  -    DEFLATE_STRING_BODY
  +    if (length > *bytesLength) {
  +        for (i = 0; i < *bytesLength; i++)
  +            bytes[i] = (char) chars[i];
  +        if (cx)
  +            JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL, JSMSG_BUFFER_TOO_SMALL);
  +        return JS_FALSE;
  +    }
  +    else {
  +        for (i = 0; i < length; i++)
  +            bytes[i] = (char) chars[i];
  +        *bytesLength = length;
  +        return JS_TRUE;
  +    }
   }
   
   /*
  @@ -2934,10 +3129,15 @@
       if (!bytes)
           return NULL;
   
  -    DEFLATE_STRING_BODY
  +    for (i = 0; i < length; i++)
  +        bytes[i] = (char) chars[i];
  +
  +    bytes [length] = 0;
       return bytes;
   }
   
  +#endif
  +
   static JSHashTable *
   GetDeflatedStringCache(void)
   {
  @@ -4357,8 +4557,8 @@
          const jschar *unescapedSet2, jsval *rval)
   {
       size_t length, j, k, L;
  -    jschar *chars, C, C2;
  -    uint32 V;
  +    jschar *chars, c, c2;
  +    uint32 v;
       uint8 utf8buf[6];
       jschar hexBuf[4];
       static const char HexDigits[] = "0123456789ABCDEF"; /* NB: uppercase */
  @@ -4378,19 +4578,19 @@
       hexBuf[3] = 0;
       chars = JSSTRING_CHARS(str);
       for (k = 0; k < length; k++) {
  -        C = chars[k];
  -        if (js_strchr(unescapedSet, C) ||
  -            (unescapedSet2 && js_strchr(unescapedSet2, C))) {
  -            if (!AddCharsToURI(cx, R, &C, 1))
  +        c = chars[k];
  +        if (js_strchr(unescapedSet, c) ||
  +            (unescapedSet2 && js_strchr(unescapedSet2, c))) {
  +            if (!AddCharsToURI(cx, R, &c, 1))
                   return JS_FALSE;
           } else {
  -            if ((C >= 0xDC00) && (C <= 0xDFFF)) {
  +            if ((c >= 0xDC00) && (c <= 0xDFFF)) {
                   JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL,
                                    JSMSG_BAD_URI, NULL);
                   return JS_FALSE;
               }
  -            if (C < 0xD800 || C > 0xDBFF) {
  -                V = C;
  +            if (c < 0xD800 || c > 0xDBFF) {
  +                v = c;
               } else {
                   k++;
                   if (k == length) {
  @@ -4398,15 +4598,15 @@
                                        JSMSG_BAD_URI, NULL);
                       return JS_FALSE;
                   }
  -                C2 = chars[k];
  -                if ((C2 < 0xDC00) || (C2 > 0xDFFF)) {
  +                c2 = chars[k];
  +                if ((c2 < 0xDC00) || (c2 > 0xDFFF)) {
                       JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL,
                                        JSMSG_BAD_URI, NULL);
                       return JS_FALSE;
                   }
  -                V = ((C - 0xD800) << 10) + (C2 - 0xDC00) + 0x10000;
  +                v = ((c - 0xD800) << 10) + (c2 - 0xDC00) + 0x10000;
               }
  -            L = OneUcs4ToUtf8Char(utf8buf, V);
  +            L = js_OneUcs4ToUtf8Char(utf8buf, v);
               for (j = 0; j < L; j++) {
                   hexBuf[1] = HexDigits[utf8buf[j] >> 4];
                   hexBuf[2] = HexDigits[utf8buf[j] & 0xf];
  @@ -4432,8 +4632,8 @@
   Decode(JSContext *cx, JSString *str, const jschar *reservedSet, jsval *rval)
   {
       size_t length, start, k;
  -    jschar *chars, C, H;
  -    uint32 V;
  +    jschar *chars, c, H;
  +    uint32 v;
       jsuint B;
       uint8 octets[6];
       JSString *R;
  @@ -4451,8 +4651,8 @@
   
       chars = JSSTRING_CHARS(str);
       for (k = 0; k < length; k++) {
  -        C = chars[k];
  -        if (C == '%') {
  +        c = chars[k];
  +        if (c == '%') {
               start = k;
               if ((k + 2) >= length)
                   goto bad;
  @@ -4461,7 +4661,7 @@
               B = JS7_UNHEX(chars[k+1]) * 16 + JS7_UNHEX(chars[k+2]);
               k += 2;
               if (!(B & 0x80)) {
  -                C = (jschar)B;
  +                c = (jschar)B;
               } else {
                   n = 1;
                   while (B & (0x80 >> n))
  @@ -4483,28 +4683,28 @@
                       k += 2;
                       octets[j] = (char)B;
                   }
  -                V = Utf8ToOneUcs4Char(octets, n);
  -                if (V >= 0x10000) {
  -                    V -= 0x10000;
  -                    if (V > 0xFFFFF)
  +                v = Utf8ToOneUcs4Char(octets, n);
  +                if (v >= 0x10000) {
  +                    v -= 0x10000;
  +                    if (v > 0xFFFFF)
                           goto bad;
  -                    C = (jschar)((V & 0x3FF) + 0xDC00);
  -                    H = (jschar)((V >> 10) + 0xD800);
  +                    c = (jschar)((v & 0x3FF) + 0xDC00);
  +                    H = (jschar)((v >> 10) + 0xD800);
                       if (!AddCharsToURI(cx, R, &H, 1))
                           return JS_FALSE;
                   } else {
  -                    C = (jschar)V;
  +                    c = (jschar)v;
                   }
               }
  -            if (js_strchr(reservedSet, C)) {
  +            if (js_strchr(reservedSet, c)) {
                   if (!AddCharsToURI(cx, R, &chars[start], (k - start + 1)))
                       return JS_FALSE;
               } else {
  -                if (!AddCharsToURI(cx, R, &C, 1))
  +                if (!AddCharsToURI(cx, R, &c, 1))
                       return JS_FALSE;
               }
           } else {
  -            if (!AddCharsToURI(cx, R, &C, 1))
  +            if (!AddCharsToURI(cx, R, &c, 1))
                   return JS_FALSE;
           }
       }
  @@ -4582,8 +4782,8 @@
    * Convert one UCS-4 char and write it into a UTF-8 buffer, which must be at
    * least 6 bytes long.  Return the number of UTF-8 bytes of data written.
    */
  -static int
  -OneUcs4ToUtf8Char(uint8 *utf8Buffer, uint32 ucs4Char)
  +int
  +js_OneUcs4ToUtf8Char(uint8 *utf8Buffer, uint32 ucs4Char)
   {
       int utf8Length = 1;
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsstr.h
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 jsstr.h
  --- ossp-pkg/js/src/jsstr.h	12 Jan 2005 05:18:17 -0000	1.1.1.1
  +++ ossp-pkg/js/src/jsstr.h	4 Apr 2006 14:09:45 -0000	1.1.1.2
  @@ -424,27 +424,33 @@
   /*
    * Inflate bytes to JS chars and vice versa.  Report out of memory via cx
    * and return null on error, otherwise return the jschar or byte vector that
  - * was JS_malloc'ed.
  + * was JS_malloc'ed. length is updated with the length of the new string in jschars.
    */
   extern jschar *
  -js_InflateString(JSContext *cx, const char *bytes, size_t length);
  +js_InflateString(JSContext *cx, const char *bytes, size_t *length);
   
   extern char *
   js_DeflateString(JSContext *cx, const jschar *chars, size_t length);
   
   /*
    * Inflate bytes to JS chars into a buffer.
  - * 'chars' must be large enough for 'length'+1 jschars.
  + * 'chars' must be large enough for 'length' jschars.
  + * The buffer is NOT null-terminated.
  + * cx may be NULL, which means no errors are thrown.
  + * The destination length needs to be initialized with the buffer size, takes the number of chars moved.
    */
  -extern void
  -js_InflateStringToBuffer(jschar *chars, const char *bytes, size_t length);
  +extern JSBool
  +js_InflateStringToBuffer(JSContext* cx, const char *bytes, size_t length, jschar *chars, size_t* charsLength);
   
   /*
    * Deflate JS chars to bytes into a buffer.
  - * 'bytes' must be large enough for 'length'+1 chars.
  + * 'bytes' must be large enough for 'length chars.
  + * The buffer is NOT null-terminated.
  + * cx may be NULL, which means no errors are thrown.
  + * The destination length needs to be initialized with the buffer size, takes the number of bytes moved.
    */
  -extern void
  -js_DeflateStringToBuffer(char *bytes, const jschar *chars, size_t length);
  +extern JSBool
  +js_DeflateStringToBuffer(JSContext* cx, const jschar *chars, size_t charsLength, char *bytes, size_t* length);
   
   /*
    * Associate bytes with str in the deflated string cache, returning true on
  @@ -464,6 +470,13 @@
   js_str_escape(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
                 jsval *rval);
   
  +/*
  + * Convert one UCS-4 char and write it into a UTF-8 buffer, which must be at
  + * least 6 bytes long.  Return the number of UTF-8 bytes of data written.
  + */
  +extern int
  +js_OneUcs4ToUtf8Char(uint8 *utf8Buffer, uint32 ucs4Char);
  +
   JS_END_EXTERN_C
   
   #endif /* jsstr_h___ */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsxml.c
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 jsxml.c
  --- ossp-pkg/js/src/jsxml.c	13 Jun 2006 22:07:54 -0000	1.1.1.1
  +++ ossp-pkg/js/src/jsxml.c	4 Apr 2006 14:09:45 -0000	1.1.1.2
  @@ -1225,12 +1225,7 @@
   #define XMLARRAY_HAS_MEMBER(a,e,f)  (XMLArrayFindMember(a, (void *)(e), f) != \
                                        XML_NOT_FOUND)
   #define XMLARRAY_MEMBER(a,i,t)      ((t *) (a)->vector[i])
  -#define XMLARRAY_SET_MEMBER(a,i,e)                                            \
  -    JS_BEGIN_MACRO                                                            \
  -      if ((a)->length <= (i))                                                 \
  -          (a)->length = (i) + 1;                                              \
  -      ((a)->vector[i] = (void *)(e));                                         \
  -    JS_END_MACRO
  +#define XMLARRAY_SET_MEMBER(a,i,e)  ((a)->vector[i] = (void *)(e))
   #define XMLARRAY_ADD_MEMBER(x,a,i,e)XMLArrayAddMember(x, a, i, (void *)(e))
   #define XMLARRAY_INSERT(x,a,i,n)    XMLArrayInsert(x, a, i, n)
   #define XMLARRAY_APPEND(x,a,e)      XMLARRAY_ADD_MEMBER(x, a, (a)->length, (e))
  @@ -1263,12 +1258,6 @@
   };
   
   static JSBool
  -xml_setting_getter(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
  -{
  -    return JS_TRUE;
  -}
  -
  -static JSBool
   xml_setting_setter(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
   {
       JSBool b;
  @@ -1288,16 +1277,16 @@
   
   static JSPropertySpec xml_static_props[] = {
       {js_ignoreComments_str,     XML_IGNORE_COMMENTS,   JSPROP_PERMANENT,
  -                                xml_setting_getter, xml_setting_setter},
  +                                NULL, xml_setting_setter},
       {js_ignoreProcessingInstructions_str,
                      XML_IGNORE_PROCESSING_INSTRUCTIONS, JSPROP_PERMANENT,
  -                                xml_setting_getter, xml_setting_setter},
  +                                NULL, xml_setting_setter},
       {js_ignoreWhitespace_str,   XML_IGNORE_WHITESPACE, JSPROP_PERMANENT,
  -                                xml_setting_getter, xml_setting_setter},
  +                                NULL, xml_setting_setter},
       {js_prettyPrinting_str,     XML_PRETTY_PRINTING,   JSPROP_PERMANENT,
  -                                xml_setting_getter, xml_setting_setter},
  +                                NULL, xml_setting_setter},
       {js_prettyIndent_str,       XML_PRETTY_INDENT,     JSPROP_PERMANENT,
  -                                xml_setting_getter, NULL},
  +                                NULL, NULL},
       {0,0,0,0,0}
   };
   
  @@ -1494,10 +1483,8 @@
           xml = ParseNodeToXML(cx, pn2, inScopeNSes, flags);
           if (!xml)
               goto fail;
  -        if (js_PushLocalRoot(cx, cx->localRootStack, (jsval)xml) < 0)
  -            goto fail;
  -
           flags &= ~XSF_PRECOMPILED_ROOT;
  +
           n = pn->pn_count;
           JS_ASSERT(n >= 2);
           n -= 2;
  @@ -1524,8 +1511,10 @@
                   continue;
               }
   
  -            if (!kid)
  +            if (!kid) {
  +                xml->xml_kids.length = i;
                   goto fail;
  +            }
   
               /* Store kid in xml right away, to protect it from GC. */
               XMLARRAY_SET_MEMBER(&xml->xml_kids, i, kid);
  @@ -1543,6 +1532,7 @@
           }
   
           JS_ASSERT(i == n);
  +        xml->xml_kids.length = n;
           if (n < pn->pn_count - 2)
               XMLArrayTrim(&xml->xml_kids);
           XMLARRAY_TRUNCATE(cx, inScopeNSes, length);
  @@ -1575,13 +1565,16 @@
                   continue;
               }
   
  -            if (!kid)
  +            if (!kid) {
  +                xml->xml_kids.length = i;
                   goto fail;
  +            }
   
               XMLARRAY_SET_MEMBER(&xml->xml_kids, i, kid);
               ++i;
           }
   
  +        xml->xml_kids.length = n;
           if (n < pn->pn_count)
               XMLArrayTrim(&xml->xml_kids);
           break;
  @@ -1590,7 +1583,7 @@
         case TOK_XMLPTAGC:
           length = inScopeNSes->length;
           pn2 = pn->pn_head;
  -        JS_ASSERT(pn2->pn_type == TOK_XMLNAME);
  +        JS_ASSERT(pn2->pn_type = TOK_XMLNAME);
           if (pn2->pn_arity == PN_LIST)
               goto syntax;
   
  @@ -1739,8 +1732,10 @@
               JS_ASSERT(pn2->pn_type == TOK_XMLATTR);
   
               attr = js_NewXML(cx, JSXML_CLASS_ATTRIBUTE);
  -            if (!attr)
  +            if (!attr) {
  +                xml->xml_attrs.length = i;
                   goto fail;
  +            }
   
               XMLARRAY_SET_MEMBER(&xml->xml_attrs, i, attr);
               attr->parent = xml;
  @@ -1748,6 +1743,8 @@
               attr->xml_value = ATOM_TO_STRING(pn2->pn_atom);
           }
   
  +        xml->xml_attrs.length = n;
  +
           /* Point tag closes its own namespace scope. */
           if (pn->pn_type == TOK_XMLPTAGC)
               XMLARRAY_TRUNCATE(cx, inScopeNSes, length);
  @@ -1841,44 +1838,23 @@
   }
   
   static JSBool
  -FillSettingsCache(JSContext *cx)
  -{
  -    int i;
  -    const char *name;
  -    jsval v;
  -    JSBool isSet;
  -
  -    /* Note: XML_PRETTY_INDENT is not a boolean setting. */
  -    for (i = XML_IGNORE_COMMENTS; i < XML_PRETTY_INDENT; i++) {
  -        name = xml_static_props[i].name;
  -        if (!GetXMLSetting(cx, name, &v) || !js_ValueToBoolean(cx, v, &isSet))
  -            return JS_FALSE;
  -        if (isSet)
  -            cx->xmlSettingFlags |= JS_BIT(i);
  -        else
  -            cx->xmlSettingFlags &= ~JS_BIT(i);
  -    }
  -
  -    cx->xmlSettingFlags |= XSF_CACHE_VALID;
  -    return JS_TRUE;
  -}
  -
  -static JSBool
   GetBooleanXMLSetting(JSContext *cx, const char *name, JSBool *bp)
   {
       int i;
  +    jsval v;
   
  -    if (!(cx->xmlSettingFlags & XSF_CACHE_VALID) && !FillSettingsCache(cx))
  -        return JS_FALSE;
  -
  -    for (i = 0; xml_static_props[i].name; i++) {
  -        if (!strcmp(xml_static_props[i].name, name)) {
  -            *bp = (cx->xmlSettingFlags & JS_BIT(i)) != 0;
  -            return JS_TRUE;
  +    if (cx->xmlSettingFlags & XSF_CACHE_VALID) {
  +        for (i = 0; xml_static_props[i].name; i++) {
  +            if (!strcmp(xml_static_props[i].name, name)) {
  +                *bp = (cx->xmlSettingFlags & JS_BIT(i)) != 0;
  +                return JS_TRUE;
  +            }
           }
  +        *bp = JS_FALSE;
  +        return JS_TRUE;
       }
  -    *bp = JS_FALSE;
  -    return JS_TRUE;
  +
  +    return GetXMLSetting(cx, name, &v) && js_ValueToBoolean(cx, v, bp);
   }
   
   static JSBool
  @@ -1906,7 +1882,7 @@
   {
       jsval nsval;
       JSXMLNamespace *ns;
  -    size_t urilen, srclen, length, offset;
  +    size_t urilen, srclen, length, offset, dstlen;
       jschar *chars;
       const jschar *srcp, *endp;
       void *mark;
  @@ -1938,16 +1914,20 @@
       if (!chars)
           return NULL;
   
  -    js_InflateStringToBuffer(chars, prefix, constrlen(prefix));
  -    offset = constrlen(prefix);
  +    dstlen = length;
  +    js_InflateStringToBuffer(cx, prefix, constrlen(prefix), chars, &dstlen);
  +    offset = dstlen;
       js_strncpy(chars + offset, JSSTRING_CHARS(ns->uri), urilen);
       offset += urilen;
  -    js_InflateStringToBuffer(chars + offset, middle, constrlen(middle));
  -    offset += constrlen(middle);
  +    dstlen = length - offset + 1;
  +    js_InflateStringToBuffer(cx, middle, constrlen(middle), chars + offset, &dstlen);
  +    offset += dstlen;
       srcp = JSSTRING_CHARS(src);
       js_strncpy(chars + offset, srcp, srclen);
       offset += srclen;
  -    js_InflateStringToBuffer(chars + offset, suffix, constrlen(suffix));
  +    dstlen = length - offset + 1;
  +    js_InflateStringToBuffer(cx, suffix, constrlen(suffix), chars + offset, &dstlen);
  +    chars [offset + dstlen] = 0;
   
       mark = JS_ARENA_MARK(&cx->tempPool);
       ts = js_NewBufferTokenStream(cx, chars, length);
  @@ -2317,11 +2297,6 @@
               newlength += 3;
           else if (c == '&')
               newlength += 4;
  -
  -        if (newlength < length) {
  -            JS_ReportOutOfMemory(cx);
  -            return NULL;
  -        }
       }
       if ((sb && STRING_BUFFER_OFFSET(sb) != 0) || newlength > length) {
           JSStringBuffer localSB;
  @@ -2329,7 +2304,7 @@
               sb = &localSB;
               js_InitStringBuffer(sb);
           }
  -        if (!sb->grow(sb, newlength)) {
  +        if (!sb->grow(sb, STRING_BUFFER_OFFSET(sb) + newlength)) {
               JS_ReportOutOfMemory(cx);
               return NULL;
           }
  @@ -2372,11 +2347,6 @@
               newlength += 3;
           else if (c == '&' || c == '\n' || c == '\r' || c == '\t')
               newlength += 4;
  -
  -        if (newlength < length) {
  -            JS_ReportOutOfMemory(cx);
  -            return NULL;
  -        }
       }
       if ((sb && STRING_BUFFER_OFFSET(sb) != 0) || newlength > length) {
           JSStringBuffer localSB;
  @@ -2384,7 +2354,7 @@
               sb = &localSB;
               js_InitStringBuffer(sb);
           }
  -        if (!sb->grow(sb, newlength)) {
  +        if (!sb->grow(sb, STRING_BUFFER_OFFSET(sb) + newlength)) {
               JS_ReportOutOfMemory(cx);
               return NULL;
           }
  @@ -2914,7 +2884,7 @@
       str = js_NewString(cx, sb.base, STRING_BUFFER_OFFSET(&sb), 0);
   out:
       JS_LeaveLocalRootScope(cx);
  -    if (!str && STRING_BUFFER_OK(&sb))
  +    if (!str)
           js_FinishStringBuffer(&sb);
       XMLArrayFinish(cx, &decls);
       if (ancdecls.capacity != 0)
  @@ -3088,7 +3058,7 @@
   out:
       qn = (JSXMLQName *) JS_GetPrivate(cx, obj);
       atom = cx->runtime->atomState.lazy.functionNamespaceURIAtom;
  -    if (qn->uri && atom &&
  +    if (atom &&
           (qn->uri == ATOM_TO_STRING(atom) ||
            !js_CompareStrings(qn->uri, ATOM_TO_STRING(atom)))) {
           if (!JS_ValueToId(cx, STRING_TO_JSVAL(qn->localName), funidp))
  @@ -3179,6 +3149,7 @@
               kid = XMLARRAY_MEMBER(&xml->xml_kids, j, JSXML);
               XMLARRAY_SET_MEMBER(&list->xml_kids, i + j, kid);
           }
  +        list->xml_kids.length = k;
           return JS_TRUE;
       }
   
  @@ -3271,12 +3242,12 @@
               kid2->xml_value = str;
           }
   
  -        XMLARRAY_SET_MEMBER(to, j, kid2);
  -        ++j;
  +        XMLARRAY_SET_MEMBER(to, j++, kid2);
           if (parent->xml_class != JSXML_CLASS_LIST)
               kid2->parent = parent;
       }
   
  +    to->length = j;
       if (j < n)
           XMLArrayTrim(to);
       return JS_TRUE;
  @@ -3334,6 +3305,7 @@
                   }
                   XMLARRAY_SET_MEMBER(&copy->xml_namespaces, i, ns2);
               }
  +            copy->xml_namespaces.length = n;
   
               ok = DeepCopySetInLRS(cx, &xml->xml_attrs, &copy->xml_attrs, copy,
                                     0);
  @@ -3602,8 +3574,6 @@
   static JSBool
   CheckCycle(JSContext *cx, JSXML *xml, JSXML *kid)
   {
  -    JS_ASSERT(kid->xml_class != JSXML_CLASS_LIST);
  -
       do {
           if (xml == kid) {
               JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL,
  @@ -3637,6 +3607,8 @@
           vobj = JSVAL_TO_OBJECT(v);
           if (OBJECT_IS_XML(cx, vobj)) {
               vxml = (JSXML *) JS_GetPrivate(cx, vobj);
  +            if (!CheckCycle(cx, xml, vxml))
  +                return JS_FALSE;
               if (vxml->xml_class == JSXML_CLASS_LIST)
                   n = vxml->xml_kids.length;
           }
  @@ -3651,8 +3623,6 @@
       if (vxml && vxml->xml_class == JSXML_CLASS_LIST) {
           for (j = 0; j < n; j++) {
               kid = XMLARRAY_MEMBER(&vxml->xml_kids, j, JSXML);
  -            if (!CheckCycle(cx, xml, kid))
  -                return JS_FALSE;
               kid->parent = xml;
               XMLARRAY_SET_MEMBER(&xml->xml_kids, i + j, kid);
   
  @@ -4356,6 +4326,7 @@
                       kid2 = XMLARRAY_MEMBER(&vxml->xml_kids, k, JSXML);
                       XMLARRAY_SET_MEMBER(&copy->xml_kids, k, kid2);
                   }
  +                copy->xml_kids.length = n;
   
                   JS_ASSERT(parent != xml);
                   if (parent) {
  @@ -4755,7 +4726,6 @@
   {
       JSXML *target, *base;
       JSXMLQName *targetprop;
  -    JSObject *targetpropobj;
       jsval id, tv;
   
       /* Our caller must be protecting newborn objects. */
  @@ -4770,15 +4740,10 @@
   
       target = list->xml_target;
       targetprop = list->xml_targetprop;
  -    if (!target || !targetprop || IS_STAR(targetprop->localName)) {
  -        *result = NULL;
  -        return JS_TRUE;
  -    }
  -
  -    targetpropobj = js_GetXMLQNameObject(cx, targetprop);
  -    if (!targetpropobj)
  -        return JS_FALSE;
  -    if (OBJ_GET_CLASS(cx, targetpropobj) == &js_AttributeNameClass) {
  +    if (!target ||
  +        !targetprop ||
  +        OBJ_GET_CLASS(cx, targetprop->object) == &js_AttributeNameClass ||
  +        IS_STAR(targetprop->localName)) {
           *result = NULL;
           return JS_TRUE;
       }
  @@ -4792,7 +4757,7 @@
       if (!js_GetXMLObject(cx, base))
           return JS_FALSE;
   
  -    id = OBJECT_TO_JSVAL(targetpropobj);
  +    id = OBJECT_TO_JSVAL(targetprop->object);
       if (!GetProperty(cx, base->object, id, &tv))
           return JS_FALSE;
       target = (JSXML *) JS_GetPrivate(cx, JSVAL_TO_OBJECT(tv));
  @@ -4921,26 +4886,12 @@
           elt = vec[i];
           {
   #ifdef GC_MARK_DEBUG
  -            char buf[120];
  +            char buf[100];
  +            JSXMLQName *qn = elt->name;
   
  -            if (elt->xml_class == JSXML_CLASS_LIST) {
  -                strcpy(buf, js_XMLList_str);
  -            } else if (JSXML_HAS_NAME(elt)) {
  -                JSXMLQName *qn = elt->name;
  -
  -                JS_snprintf(buf, sizeof buf, "%s::%s",
  -                            qn->uri ? JS_GetStringBytes(qn->uri) : "*",
  -                            JS_GetStringBytes(qn->localName));
  -            } else {
  -                JSString *str = elt->xml_value;
  -                size_t srclen = JSSTRING_LENGTH(str);
  -                size_t dstlen = sizeof buf;
  -
  -                if (srclen >= sizeof buf / 6)
  -                    srclen = sizeof buf / 6 - 1;
  -                js_DeflateStringToBuffer(cx, JSSTRING_CHARS(str), srclen,
  -                                         buf, &dstlen);
  -            }
  +            JS_snprintf(buf, sizeof buf, "%s::%s",
  +                        qn->uri ? JS_GetStringBytes(qn->uri) : "*",
  +                        JS_GetStringBytes(qn->localName));
   #else
               const char *buf = NULL;
   #endif
  @@ -6168,6 +6119,7 @@
               XMLARRAY_SET_MEMBER(&inScopeNSes, i, ns);
           }
   
  +        inScopeNSes.length = i;
           ns = ok ? GetNamespace(cx, xml->name, &inScopeNSes) : NULL;
           XMLArrayFinish(cx, &inScopeNSes);
           if (!ns)
  @@ -7008,7 +6960,6 @@
       {js_text_str,             xml_text,                  0,0,GENERIC_MASK},
       {js_toString_str,         xml_toString,              0,0,GENERIC_MASK},
       {js_toXMLString_str,      xml_toXMLString,           0,0,GENERIC_MASK},
  -    {js_toSource_str,         xml_toXMLString,           0,0,GENERIC_MASK},
       {js_valueOf_str,          xml_valueOf,               0,0,GENERIC_MASK},
       {0,0,0,0,0}
   };
  @@ -7235,6 +7186,10 @@
       return xml;
   }
   
  +/*
  + * Code factored from js_MarkXML for use by xml_DeutschScorrWaite, see below.
  + * All things marked here cannot lead to overlong lists (mark stack overflow).
  + */
   static void
   xml_mark_tail(JSContext *cx, JSXML *xml, void *arg)
   {
  @@ -7242,9 +7197,9 @@
   
       if (xml->xml_class == JSXML_CLASS_LIST) {
           if (xml->xml_target)
  -            JS_MarkGCThing(cx, xml->xml_target, "target", arg);
  +            js_MarkXML(cx, xml->xml_target, arg);
           if (xml->xml_targetprop)
  -            JS_MarkGCThing(cx, xml->xml_targetprop, "targetprop", arg);
  +            js_MarkXMLQName(cx, xml->xml_targetprop, arg);
       } else {
           namespace_mark_vector(cx,
                                 (JSXMLNamespace **) xml->xml_namespaces.vector,
  @@ -7260,22 +7215,115 @@
       }
   }
   
  +static void
  +xml_DeutschSchorrWaite(JSContext *cx, JSXML *xml, void *arg)
  +{
  +    JSXML *top, *kid;
  +    uint8 *flagp;
  +    uint32 i, n;
  +#ifdef JS_GCMETER
  +    JSRuntime *rt = cx->runtime;
  +# define GCMETER(x)     x
  +#else
  +# define GCMETER(x)     /* nothing */
  +#endif
  +
  +    top = NULL;
  +    flagp = js_GetGCThingFlags(xml);
  +
  +down:
  +    GCMETER(if (++rt->gcStats.dswdepth > rt->gcStats.maxdswdepth)
  +                rt->gcStats.maxdswdepth = rt->gcStats.dswdepth);
  +
  +    *flagp |= GCF_MARK;
  +
  +    i = 0;
  +    for (;;) {
  +        /*
  +         * Let (i == n) index xml->parent, not any child in xml->xml_kids.
  +         * Use JSXML_LENGTH here and below in case xml is a leaf node whose
  +         * parent we are marking non-recursively.  In the case where parent
  +         * is being marked, the "kid/down" sense is backwards -- humor me.
  +         */
  +        for (n = JSXML_LENGTH(xml); i <= n; i++) {
  +            if (i < n) {
  +                kid = XMLARRAY_MEMBER(&xml->xml_kids, i, JSXML);
  +            } else {
  +                kid = xml->parent;
  +                if (!kid)
  +                    continue;
  +            }
  +
  +            flagp = js_GetGCThingFlags(kid);
  +            if (*flagp & GCF_MARK)
  +                continue;
  +
  +            /*
  +             * Don't descend if a for..in loop is enumerating xml's kids, i.e.
  +             * if xml has kids and its xml_kids.cursors member is non-null.
  +             */
  +            if (JSXML_HAS_KIDS(kid) &&
  +                (JSXML_HAS_VALUE(xml) || !xml->xml_kids.cursors)) {
  +                if (i < n)
  +                    XMLARRAY_SET_MEMBER(&xml->xml_kids, i, top);
  +                else
  +                    xml->parent = top;
  +                if (JSXML_HAS_KIDS(xml))
  +                    xml->xml_kids.cursors = JS_UINT32_TO_PTR(i);
  +                top = xml;
  +                xml = kid;
  +                goto down;
  +            }
  +
  +            js_MarkXML(cx, kid, arg);
  +        }
  +
  +        /* If we are back at the root (or we never left it), we're done. */
  +        GCMETER(rt->gcStats.dswdepth--);
  +        xml->xml_kids.cursors = NULL;
  +        if (!top)
  +            return;
  +
  +        /* Time to go back up the spanning tree. */
  +        GCMETER(rt->gcStats.dswup++);
  +        i = JSXML_HAS_KIDS(top) ? JS_PTR_TO_UINT32(top->xml_kids.cursors) : 0;
  +        if (i < JSXML_LENGTH(top)) {
  +            kid = XMLARRAY_MEMBER(&top->xml_kids, i, JSXML);
  +            XMLARRAY_SET_MEMBER(&top->xml_kids, i, xml);
  +        } else {
  +            JS_ASSERT(i == JSXML_LENGTH(top));
  +            kid = top->parent;
  +            top->parent = xml;
  +        }
  +        xml = top;
  +        top = kid;
  +        i++;
  +    }
  +#undef GCMETER
  +}
  +
   void
   js_MarkXML(JSContext *cx, JSXML *xml, void *arg)
   {
  +    int stackDummy;
  +
       JS_MarkGCThing(cx, xml->object, js_object_str, arg);
       JS_MarkGCThing(cx, xml->name, js_name_str, arg);
  -    JS_MarkGCThing(cx, xml->parent, js_xml_parent_str, arg);
  -
  -    if (JSXML_HAS_VALUE(xml)) {
  -        JS_MarkGCThing(cx, xml->xml_value, "value", arg);
  +    if (!JS_CHECK_STACK_SIZE(cx, stackDummy)) {
  +        xml_DeutschSchorrWaite(cx, xml, arg);
       } else {
  -        xml_mark_vector(cx,
  -                        (JSXML **) xml->xml_kids.vector,
  -                        xml->xml_kids.length,
  -                        arg);
  +        JS_MarkGCThing(cx, xml->parent, js_xml_parent_str, arg);
  +
  +        if (JSXML_HAS_VALUE(xml)) {
  +            JS_MarkGCThing(cx, xml->xml_value, "value", arg);
  +        } else {
  +            xml_mark_vector(cx,
  +                            (JSXML **) xml->xml_kids.vector,
  +                            xml->xml_kids.length,
  +                            arg);
   
  -        xml_mark_tail(cx, xml, arg);
  +            xml_mark_tail(cx, xml, arg);
  +        }
       }
   }
   
  @@ -7326,16 +7374,11 @@
   js_NewXMLObject(JSContext *cx, JSXMLClass xml_class)
   {
       JSXML *xml;
  -    JSObject *obj;
  -    JSTempValueRooter tvr;
   
       xml = js_NewXML(cx, xml_class);
       if (!xml)
           return NULL;
  -    JS_PUSH_SINGLE_TEMP_ROOT(cx, OBJECT_TO_JSVAL(xml), &tvr);
  -    obj = js_GetXMLObject(cx, xml);
  -    JS_POP_TEMP_ROOT(cx, &tvr);
  -    return obj;
  +    return js_GetXMLObject(cx, xml);
   }
   
   static JSObject *
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/perlconnect/.cvsignore
  ============================================================================
  $ cvs diff -u -rMOZILLA -rMOZILLA perlconnect/.cvsignore
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/perlconnect/jsperl.c
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.1.1.2 perlconnect/jsperl.c
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jul 24 20:38:28 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 91A827534BB; Mon, 24 Jul 2006 20:38:28 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/src/ .cvsignore ossp-pkg/js/src/fdlibm/ .cvsig...
Message-Id: <20060724183828.91A827534BB@mail.ossp.org>
Date: Mon, 24 Jul 2006 20:38:28 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Jul-2006 20:38:28
  Branch: HEAD                             Handle: 2006072419382602

  Modified files:
    ossp-pkg/js/src         .cvsignore js.c jsapi.c jscntxt.c jsfile.c
                            jsinterp.c jsprf.c jspubtd.h
    ossp-pkg/js/src/fdlibm  .cvsignore fdlibm.h
    ossp-pkg/js/src/perlconnect
                            .cvsignore

  Log:
    Resolve conflicts after import of new upstream version: Mozilla
    JavaScript (SpiderMonkey) 1.6 as of 2006-07-24

  Summary:
    Revision    Changes     Path
    1.2         +8  -1      ossp-pkg/js/src/.cvsignore
    1.2         +7  -1      ossp-pkg/js/src/fdlibm/.cvsignore
    1.3         +1  -1      ossp-pkg/js/src/fdlibm/fdlibm.h
    1.3         +55 -28     ossp-pkg/js/src/js.c
    1.5         +47 -37     ossp-pkg/js/src/jsapi.c
    1.3         +114 -98    ossp-pkg/js/src/jscntxt.c
    1.3         +1  -1      ossp-pkg/js/src/jsfile.c
    1.4         +20 -59     ossp-pkg/js/src/jsinterp.c
    1.3         +58 -6      ossp-pkg/js/src/jsprf.c
    1.3         +21 -2      ossp-pkg/js/src/jspubtd.h
    1.2         +0  -5      ossp-pkg/js/src/perlconnect/.cvsignore
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/.cvsignore
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 .cvsignore
  --- ossp-pkg/js/src/.cvsignore	22 Jul 2006 11:38:55 -0000	1.1
  +++ ossp-pkg/js/src/.cvsignore	24 Jul 2006 18:38:26 -0000	1.2
  @@ -1,2 +1,9 @@
  +*.pdb
  +*.ncb
  +*.opt
  +*.plg
  +Debug
  +Release
  +Makefile
  +jscpucfg
   jsautocfg.h
  -*.lo
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/fdlibm/.cvsignore
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 .cvsignore
  --- ossp-pkg/js/src/fdlibm/.cvsignore	22 Jul 2006 11:38:55 -0000	1.1
  +++ ossp-pkg/js/src/fdlibm/.cvsignore	24 Jul 2006 18:38:27 -0000	1.2
  @@ -1 +1,7 @@
  -*.lo
  +*.pdb
  +*.ncb
  +*.opt
  +*.plg
  +Debug
  +Release
  +Makefile
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/fdlibm/fdlibm.h
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 fdlibm.h
  --- ossp-pkg/js/src/fdlibm/fdlibm.h	22 Jul 2006 13:48:03 -0000	1.2
  +++ ossp-pkg/js/src/fdlibm/fdlibm.h	24 Jul 2006 18:38:28 -0000	1.3
  @@ -152,7 +152,7 @@
   #define __LITTLE_ENDIAN
   #endif
   
  -#if defined(linux) && (defined(__i386__) || defined(__x86_64__) || defined(__ia64) || (defined(__mips) && defined(__MIPSEL__)))
  +#if defined(linux) && (defined(__i386__) || defined(__x86_64__) || defined(__ia64))
   #define __LITTLE_ENDIAN
   #endif
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/js.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 js.c
  --- ossp-pkg/js/src/js.c	23 Jul 2006 18:34:15 -0000	1.2
  +++ ossp-pkg/js/src/js.c	24 Jul 2006 18:38:26 -0000	1.3
  @@ -554,12 +554,6 @@
       return JS_TRUE;
   }
   
  -static void
  -my_LoadErrorReporter(JSContext *cx, const char *message, JSErrorReport *report);
  -
  -static void
  -my_ErrorReporter(JSContext *cx, const char *message, JSErrorReport *report);
  -
   static JSBool
   Load(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
   {
  @@ -569,7 +563,6 @@
       JSScript *script;
       JSBool ok;
       jsval result;
  -    JSErrorReporter older;
       uint32 oldopts;
   
       for (i = 0; i < argc; i++) {
  @@ -579,7 +572,6 @@
           argv[i] = STRING_TO_JSVAL(str);
           filename = JS_GetStringBytes(str);
           errno = 0;
  -        older = JS_SetErrorReporter(cx, my_LoadErrorReporter);
           oldopts = JS_GetOptions(cx);
           JS_SetOptions(cx, oldopts | JSOPTION_COMPILE_N_GO);
           script = JS_CompileFile(cx, obj, filename);
  @@ -592,7 +584,6 @@
               JS_DestroyScript(cx, script);
           }
           JS_SetOptions(cx, oldopts);
  -        JS_SetErrorReporter(cx, older);
           if (!ok)
               return JS_FALSE;
       }
  @@ -1571,6 +1562,54 @@
       return JS_NewNumberValue(cx, i, rval);
   }
   
  +static JSBool
  +StringsAreUtf8(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
  +               jsval *rval)
  +{
  +    *rval = JS_CStringsAreUTF8() ? JSVAL_TRUE : JSVAL_FALSE;
  +    return JS_TRUE;
  +}
  +
  +static const char* badUtf8 = "...\xC0...";
  +static const char* bigUtf8 = "...\xFB\xBF\xBF\xBF\xBF...";
  +static const jschar badSurrogate[] = { 'A', 'B', 'C', 0xDEEE, 'D', 'E', 0 };
  +
  +static JSBool
  +TestUtf8(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
  +{
  +    intN mode = 1;
  +    jschar chars[20];
  +    size_t charsLength = 5;
  +    char bytes[20];
  +    size_t bytesLength = 20;
  +    if (argc && !JS_ValueToInt32(cx, *argv, &mode))
  +        return JS_FALSE;
  +
  +    /* The following throw errors if compiled with UTF-8. */
  +    switch (mode) {
  +      /* mode 1: malformed UTF-8 string. */
  +      case 1: 
  +        JS_NewStringCopyZ(cx, badUtf8); 
  +        break;
  +      /* mode 2: big UTF-8 character. */
  +      case 2: 
  +        JS_NewStringCopyZ(cx, bigUtf8); 
  +        break;
  +      /* mode 3: bad surrogate character. */
  +      case 3: 
  +        JS_EncodeCharacters(cx, badSurrogate, 6, bytes, &bytesLength); 
  +        break;
  +      /* mode 4: use a too small buffer. */
  +      case 4: 
  +        JS_DecodeBytes(cx, "1234567890", 10, chars, &charsLength); 
  +        break;
  +      default:
  +        JS_ReportError(cx, "invalid mode parameter");
  +        return JS_FALSE;
  +    }
  +    return !JS_IsExceptionPending (cx);
  +}
  +
   static JSFunctionSpec shell_functions[] = {
       {"version",         Version,        0},
       {"options",         Options,        0},
  @@ -1584,6 +1623,8 @@
       {"untrap",          Untrap,         2},
       {"line2pc",         LineToPC,       0},
       {"pc2line",         PCToLine,       0},
  +    {"stringsAreUtf8",  StringsAreUtf8, 0},
  +    {"testUtf8",        TestUtf8,       1},
   #ifdef DEBUG
       {"dis",             Disassemble,    1},
       {"dissrc",          DisassWithSrc,  1},
  @@ -1623,6 +1664,8 @@
       "untrap(fun[, pc])      Remove a trap",
       "line2pc([fun,] line)   Map line number to PC",
       "pc2line(fun[, pc])     Map PC to line number",
  +    "stringsAreUTF8()       Check if strings are UTF-8 encoded",
  +    "testUTF8(mode)         Perform UTF-8 tests (modes are 1 to 4)",
   #ifdef DEBUG
       "dis([fun])             Disassemble functions into bytecodes",
       "dissrc([fun])          Disassemble functions with source lines",
  @@ -1650,14 +1693,14 @@
   static void
   ShowHelpHeader(void)
   {
  -    fprintf(gOutFile, "%-9s %-22s %s\n", "Command", "Usage", "Description");
  -    fprintf(gOutFile, "%-9s %-22s %s\n", "=======", "=====", "===========");
  +    fprintf(gOutFile, "%-14s %-22s %s\n", "Command", "Usage", "Description");
  +    fprintf(gOutFile, "%-14s %-22s %s\n", "=======", "=====", "===========");
   }
   
   static void
   ShowHelpForCommand(uintN n)
   {
  -    fprintf(gOutFile, "%-9.9s %s\n", shell_functions[n].name, shell_help_messages[n]);
  +    fprintf(gOutFile, "%-14.14s %s\n", shell_functions[n].name, shell_help_messages[n]);
   }
   
   static JSBool
  @@ -1929,22 +1972,6 @@
   }
   
   static void
  -my_LoadErrorReporter(JSContext *cx, const char *message, JSErrorReport *report)
  -{
  -    if (!report) {
  -        fprintf(gErrFile, "%s\n", message);
  -        return;
  -    }
  -
  -    /* Ignore any exceptions */
  -    if (JSREPORT_IS_EXCEPTION(report->flags))
  -        return;
  -
  -    /* Otherwise, fall back to the ordinary error reporter. */
  -    my_ErrorReporter(cx, message, report);
  -}
  -
  -static void
   my_ErrorReporter(JSContext *cx, const char *message, JSErrorReport *report)
   {
       int i, j, k, n;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsapi.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 jsapi.c
  --- ossp-pkg/js/src/jsapi.c	23 Jul 2006 18:34:15 -0000	1.4
  +++ ossp-pkg/js/src/jsapi.c	24 Jul 2006 18:38:26 -0000	1.5
  @@ -896,6 +896,10 @@
       /* XXXbe give the GC or another request calling it a chance to run here?
                Assumes FIFO scheduling */
       JS_LOCK_GC(rt);
  +    if (rt->gcThread != cx->thread) {
  +        while (rt->gcLevel > 0)
  +            JS_AWAIT_GC_DONE(rt);
  +    }
       rt->requestCount++;
       JS_UNLOCK_GC(rt);
   }
  @@ -1483,7 +1487,7 @@
   AddAtomToArray(JSContext *cx, JSAtom *atom, JSIdArray *ida, jsint *ip)
   {
       jsint i, length;
  -    
  +
       i = *ip;
       length = ida->length;
       if (i >= length) {
  @@ -1861,7 +1865,7 @@
       bytes = rt->gcBytes;
       lastBytes = rt->gcLastBytes;
       if ((bytes > 8192 && bytes > lastBytes + lastBytes / 2) ||
  -        rt->gcMallocBytes > rt->gcMaxMallocBytes) {
  +        rt->gcMallocBytes > rt->gcMaxBytes) {
           /*
            * Run the GC if we have half again as many bytes of GC-things as
            * the last time we GC'd, or if we have malloc'd more bytes through
  @@ -1895,19 +1899,6 @@
       return js_IsAboutToBeFinalized(cx, thing);
   }
   
  -JS_PUBLIC_API(void)
  -JS_SetGCParameter(JSRuntime *rt, JSGCParamKey key, uint32 value)
  -{
  -    switch (key) {
  -      case JSGC_MAX_BYTES:
  -        rt->gcMaxBytes = value;
  -        break;
  -      case JSGC_MAX_MALLOC_BYTES:
  -        rt->gcMaxMallocBytes = value;
  -        break;
  -    }
  -}
  -
   JS_PUBLIC_API(intN)
   JS_AddExternalStringFinalizer(JSStringFinalizeOp finalizer)
   {
  @@ -2313,7 +2304,7 @@
       scope = js_GetMutableScope(cx, obj);
       if (scope)
           SCOPE_SET_SEALED(scope);
  -    JS_UNLOCK_SCOPE(cx, scope);
  +    JS_UNLOCK_OBJ(cx, obj);
       if (!scope)
           return JS_FALSE;
   
  @@ -3218,7 +3209,7 @@
       void *pdata;
       jsint index;
       JSIdArray *ida;
  -    
  +
       CHECK_REQUEST(cx);
       iterobj = js_NewObject(cx, &prop_iter_class, NULL, obj);
       if (!iterobj)
  @@ -3294,7 +3285,7 @@
           ida = (JSIdArray *) JS_GetPrivate(cx, iterobj);
           JS_ASSERT(i <= ida->length);
           if (i == 0) {
  -            *idp = JSVAL_VOID; 
  +            *idp = JSVAL_VOID;
           } else {
               *idp = ida->vector[--i];
               OBJ_SET_SLOT(cx, iterobj, JSSLOT_ITER_INDEX, INT_TO_JSVAL(i));
  @@ -3459,12 +3450,6 @@
       return fun->flags;
   }
   
  -JS_PUBLIC_API(uint16)
  -JS_GetFunctionArity(JSFunction *fun)
  -{
  -    return fun->nargs;
  -}
  -
   JS_PUBLIC_API(JSBool)
   JS_ObjectIsFunction(JSContext *cx, JSObject *obj)
   {
  @@ -3644,7 +3629,7 @@
       JSScript *script;
   
       CHECK_REQUEST(cx);
  -    chars = js_InflateString(cx, bytes, length);
  +    chars = js_InflateString(cx, bytes, &length);
       if (!chars)
           return NULL;
       script = JS_CompileUCScript(cx, obj, chars, length, filename, lineno);
  @@ -3662,7 +3647,7 @@
       JSScript *script;
   
       CHECK_REQUEST(cx);
  -    chars = js_InflateString(cx, bytes, length);
  +    chars = js_InflateString(cx, bytes, &length);
       if (!chars)
           return NULL;
       script = JS_CompileUCScriptForPrincipals(cx, obj, principals,
  @@ -3731,7 +3716,7 @@
       JSErrorReporter older;
   
       CHECK_REQUEST(cx);
  -    chars = js_InflateString(cx, bytes, length);
  +    chars = js_InflateString(cx, bytes, &length);
       if (!chars)
           return JS_TRUE;
   
  @@ -3854,7 +3839,7 @@
       JSFunction *fun;
   
       CHECK_REQUEST(cx);
  -    chars = js_InflateString(cx, bytes, length);
  +    chars = js_InflateString(cx, bytes, &length);
       if (!chars)
           return NULL;
       fun = JS_CompileUCFunction(cx, obj, name, nargs, argnames, chars, length,
  @@ -3874,7 +3859,7 @@
       JSFunction *fun;
   
       CHECK_REQUEST(cx);
  -    chars = js_InflateString(cx, bytes, length);
  +    chars = js_InflateString(cx, bytes, &length);
       if (!chars)
           return NULL;
       fun = JS_CompileUCFunctionForPrincipals(cx, obj, principals, name,
  @@ -4079,7 +4064,7 @@
       JSBool ok;
   
       CHECK_REQUEST(cx);
  -    chars = js_InflateString(cx, bytes, length);
  +    chars = js_InflateString(cx, bytes, &length);
       if (!chars)
           return JS_FALSE;
       ok = JS_EvaluateUCScript(cx, obj, chars, length, filename, lineno, rval);
  @@ -4098,7 +4083,7 @@
       JSBool ok;
   
       CHECK_REQUEST(cx);
  -    chars = js_InflateString(cx, bytes, length);
  +    chars = js_InflateString(cx, bytes, &length);
       if (!chars)
           return JS_FALSE;
       ok = JS_EvaluateUCScriptForPrincipals(cx, obj, principals, chars, length,
  @@ -4248,15 +4233,16 @@
   {
       jschar *chars;
       JSString *str;
  +    size_t charsLength = length;
   
       CHECK_REQUEST(cx);
       /* Make a Unicode vector from the 8-bit char codes in bytes. */
  -    chars = js_InflateString(cx, bytes, length);
  +    chars = js_InflateString(cx, bytes, &charsLength);
       if (!chars)
           return NULL;
   
       /* Free chars (but not bytes, which caller frees on error) if we fail. */
  -    str = js_NewString(cx, chars, length, 0);
  +    str = js_NewString(cx, chars, charsLength, 0);
       if (!str) {
           JS_free(cx, chars);
           return NULL;
  @@ -4275,7 +4261,7 @@
       JSString *str;
   
       CHECK_REQUEST(cx);
  -    js = js_InflateString(cx, s, n);
  +    js = js_InflateString(cx, s, &n);
       if (!js)
           return NULL;
       str = js_NewString(cx, js, n, 0);
  @@ -4295,7 +4281,7 @@
       if (!s)
           return cx->runtime->emptyString;
       n = strlen(s);
  -    js = js_InflateString(cx, s, n);
  +    js = js_InflateString(cx, s, &n);
       if (!js)
           return NULL;
       str = js_NewString(cx, js, n, 0);
  @@ -4439,6 +4425,30 @@
       return JS_TRUE;
   }
   
  +JS_PUBLIC_API(JSBool)
  +JS_EncodeCharacters(JSContext *cx, const jschar *src, size_t srclen, char *dst,
  +                    size_t *dstlenp)
  +{
  +    return js_DeflateStringToBuffer(cx, src, srclen, dst, dstlenp);
  +}
  +
  +JS_PUBLIC_API(JSBool)
  +JS_DecodeBytes(JSContext *cx, const char *src, size_t srclen, jschar *dst,
  +               size_t *dstlenp)
  +{
  +    return js_InflateStringToBuffer(cx, src, srclen, dst, dstlenp);
  +}
  +
  +JS_PUBLIC_API(JSBool)
  +JS_CStringsAreUTF8()
  +{
  +#ifdef JS_C_STRINGS_ARE_UTF8
  +    return JS_TRUE;
  +#else
  +    return JS_FALSE;
  +#endif
  +}
  +
   /************************************************************************/
   
   JS_PUBLIC_API(void)
  @@ -4520,7 +4530,7 @@
   JS_PUBLIC_API(void)
   JS_ReportOutOfMemory(JSContext *cx)
   {
  -    js_ReportOutOfMemory(cx, js_GetErrorMessage);
  +    js_ReportOutOfMemory(cx);
   }
   
   JS_PUBLIC_API(JSErrorReporter)
  @@ -4546,7 +4556,7 @@
       JSObject *obj;
   
       CHECK_REQUEST(cx);
  -    chars = js_InflateString(cx, bytes, length);
  +    chars = js_InflateString(cx, bytes, &length);
       if (!chars)
           return NULL;
       obj = js_NewRegExpObject(cx, NULL, chars, length, flags);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jscntxt.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 jscntxt.c
  --- ossp-pkg/js/src/jscntxt.c	22 Jul 2006 13:48:03 -0000	1.2
  +++ ossp-pkg/js/src/jscntxt.c	24 Jul 2006 18:38:27 -0000	1.3
  @@ -1,4 +1,5 @@
   /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
  + * vim: set ts=8 sw=4 et tw=80:
    *
    * ***** BEGIN LICENSE BLOCK *****
    * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  @@ -716,14 +717,15 @@
    * type message, and then hope the process ends swiftly.
    */
   void
  -js_ReportOutOfMemory(JSContext *cx, JSErrorCallback callback)
  +js_ReportOutOfMemory(JSContext *cx)
   {
       JSStackFrame *fp;
       JSErrorReport report;
       JSErrorReporter onError = cx->errorReporter;
   
       /* Get the message for this error, but we won't expand any arguments. */
  -    const JSErrorFormatString *efs = callback(NULL, NULL, JSMSG_OUT_OF_MEMORY);
  +    const JSErrorFormatString *efs = 
  +        js_GetLocalizedErrorMessage(cx, NULL, NULL, JSMSG_OUT_OF_MEMORY);
       const char *msg = efs ? efs->format : "Out of memory";
   
       /* Fill out the report, but don't do anything that requires allocation. */
  @@ -825,104 +827,112 @@
       }
   
       *messagep = NULL;
  -    if (callback) {
  +
  +    /* Most calls supply js_GetErrorMessage; if this is so, assume NULL. */
  +    if (!callback || callback == js_GetErrorMessage)
  +        efs = js_GetLocalizedErrorMessage(cx, userRef, NULL, errorNumber);
  +    else
           efs = callback(userRef, NULL, errorNumber);
  -        if (efs) {
  -            size_t totalArgsLength = 0;
  -            size_t argLengths[10]; /* only {0} thru {9} supported */
  -            argCount = efs->argCount;
  -            JS_ASSERT(argCount <= 10);
  -            if (argCount > 0) {
  -                /*
  -                 * Gather the arguments into an array, and accumulate
  -                 * their sizes. We allocate 1 more than necessary and
  -                 * null it out to act as the caboose when we free the
  -                 * pointers later.
  -                 */
  -                reportp->messageArgs = (const jschar **)
  -                    JS_malloc(cx, sizeof(jschar *) * (argCount + 1));
  -                if (!reportp->messageArgs)
  -                    return JS_FALSE;
  -                reportp->messageArgs[argCount] = NULL;
  -                for (i = 0; i < argCount; i++) {
  -                    if (charArgs) {
  -                        char *charArg = va_arg(ap, char *);
  -                        reportp->messageArgs[i]
  -                            = js_InflateString(cx, charArg, strlen(charArg));
  -                        if (!reportp->messageArgs[i])
  -                            goto error;
  -                    }
  -                    else
  -                        reportp->messageArgs[i] = va_arg(ap, jschar *);
  -                    argLengths[i] = js_strlen(reportp->messageArgs[i]);
  -                    totalArgsLength += argLengths[i];
  -                }
  -                /* NULL-terminate for easy copying. */
  -                reportp->messageArgs[i] = NULL;
  -            }
  +    if (efs) {
  +        size_t totalArgsLength = 0;
  +        size_t argLengths[10]; /* only {0} thru {9} supported */
  +        argCount = efs->argCount;
  +        JS_ASSERT(argCount <= 10);
  +        if (argCount > 0) {
               /*
  -             * Parse the error format, substituting the argument X
  -             * for {X} in the format.
  +             * Gather the arguments into an array, and accumulate
  +             * their sizes. We allocate 1 more than necessary and
  +             * null it out to act as the caboose when we free the
  +             * pointers later.
                */
  -            if (argCount > 0) {
  -                if (efs->format) {
  -                    const char *fmt;
  -                    const jschar *arg;
  -                    jschar *out;
  -                    int expandedArgs = 0;
  -                    size_t expandedLength
  -                        = strlen(efs->format)
  -                            - (3 * argCount) /* exclude the {n} */
  -                            + totalArgsLength;
  -                    /*
  -                     * Note - the above calculation assumes that each argument
  -                     * is used once and only once in the expansion !!!
  -                     */
  -                    reportp->ucmessage = out = (jschar *)
  -                        JS_malloc(cx, (expandedLength + 1) * sizeof(jschar));
  -                    if (!out)
  -                        goto error;
  -                    fmt = efs->format;
  -                    while (*fmt) {
  -                        if (*fmt == '{') {
  -                            if (isdigit(fmt[1])) {
  -                                int d = JS7_UNDEC(fmt[1]);
  -                                JS_ASSERT(d < argCount);
  -                                arg = reportp->messageArgs[d];
  -                                js_strncpy(out, arg, argLengths[d]);
  -                                out += argLengths[d];
  -                                fmt += 3;
  -                                expandedArgs++;
  -                                continue;
  -                            }
  -                        }
  -                        /*
  -                         * is this kosher?
  -                         */
  -                        *out++ = (unsigned char)(*fmt++);
  -                    }
  -                    JS_ASSERT(expandedArgs == argCount);
  -                    *out = 0;
  -                    *messagep =
  -                        js_DeflateString(cx, reportp->ucmessage,
  -                                         (size_t)(out - reportp->ucmessage));
  -                    if (!*messagep)
  +            reportp->messageArgs = (const jschar **)
  +                JS_malloc(cx, sizeof(jschar *) * (argCount + 1));
  +            if (!reportp->messageArgs)
  +                return JS_FALSE;
  +            reportp->messageArgs[argCount] = NULL;
  +            for (i = 0; i < argCount; i++) {
  +                if (charArgs) {
  +                    char *charArg = va_arg(ap, char *);
  +                    size_t charArgLength = strlen(charArg);
  +                    reportp->messageArgs[i]
  +                        = js_InflateString(cx, charArg, &charArgLength);
  +                    if (!reportp->messageArgs[i])
                           goto error;
  +                } else {
  +                    reportp->messageArgs[i] = va_arg(ap, jschar *);
                   }
  -            } else {
  +                argLengths[i] = js_strlen(reportp->messageArgs[i]);
  +                totalArgsLength += argLengths[i];
  +            }
  +            /* NULL-terminate for easy copying. */
  +            reportp->messageArgs[i] = NULL;
  +        }
  +        /*
  +         * Parse the error format, substituting the argument X
  +         * for {X} in the format.
  +         */
  +        if (argCount > 0) {
  +            if (efs->format) {
  +                jschar *buffer, *fmt, *out;
  +                int expandedArgs = 0;
  +                size_t expandedLength;
  +                size_t len = strlen(efs->format);
  +
  +                buffer = fmt = js_InflateString (cx, efs->format, &len);
  +                if (!buffer)
  +                    goto error;
  +                expandedLength = len
  +                                 - (3 * argCount)       /* exclude the {n} */
  +                                 + totalArgsLength;
  +
                   /*
  -                 * Zero arguments: the format string (if it exists) is the
  -                 * entire message.
  -                 */
  -                if (efs->format) {
  -                    *messagep = JS_strdup(cx, efs->format);
  -                    if (!*messagep)
  -                        goto error;
  -                    reportp->ucmessage
  -                        = js_InflateString(cx, *messagep, strlen(*messagep));
  -                    if (!reportp->ucmessage)
  -                        goto error;
  +                * Note - the above calculation assumes that each argument
  +                * is used once and only once in the expansion !!!
  +                */
  +                reportp->ucmessage = out = (jschar *)
  +                    JS_malloc(cx, (expandedLength + 1) * sizeof(jschar));
  +                if (!out) {
  +                    JS_free (cx, buffer);
  +                    goto error;
  +                }
  +                while (*fmt) {
  +                    if (*fmt == '{') {
  +                        if (isdigit(fmt[1])) {
  +                            int d = JS7_UNDEC(fmt[1]);
  +                            JS_ASSERT(d < argCount);
  +                            js_strncpy(out, reportp->messageArgs[d],
  +                                       argLengths[d]);
  +                            out += argLengths[d];
  +                            fmt += 3;
  +                            expandedArgs++;
  +                            continue;
  +                        }
  +                    }
  +                    *out++ = *fmt++;
                   }
  +                JS_ASSERT(expandedArgs == argCount);
  +                *out = 0;
  +                JS_free (cx, buffer);
  +                *messagep =
  +                    js_DeflateString(cx, reportp->ucmessage,
  +                                     (size_t)(out - reportp->ucmessage));
  +                if (!*messagep)
  +                    goto error;
  +            }
  +        } else {
  +            /*
  +             * Zero arguments: the format string (if it exists) is the
  +             * entire message.
  +             */
  +            if (efs->format) {
  +                size_t len;
  +                *messagep = JS_strdup(cx, efs->format);
  +                if (!*messagep)
  +                    goto error;
  +                len = strlen(*messagep);
  +                reportp->ucmessage = js_InflateString(cx, *messagep, &len);
  +                if (!reportp->ucmessage)
  +                    goto error;
               }
           }
       }
  @@ -996,9 +1006,15 @@
       if (message)
           JS_free(cx, message);
       if (report.messageArgs) {
  -        int i = 0;
  -        while (report.messageArgs[i])
  -            JS_free(cx, (void *)report.messageArgs[i++]);
  +        /*
  +         * js_ExpandErrorArguments owns its messageArgs only if it had to
  +         * inflate the arguments (from regular |char *|s).
  +         */
  +        if (charArgs) {
  +            int i = 0;
  +            while (report.messageArgs[i])
  +                JS_free(cx, (void *)report.messageArgs[i++]);
  +        }
           JS_free(cx, (void *)report.messageArgs);
       }
       if (report.ucmessage)
  @@ -1053,10 +1069,10 @@
   JSErrorFormatString js_ErrorFormatString[JSErr_Limit] = {
   #if JS_HAS_DFLT_MSG_STRINGS
   #define MSG_DEF(name, number, count, exception, format) \
  -    { format, count } ,
  +    { format, count, exception } ,
   #else
   #define MSG_DEF(name, number, count, exception, format) \
  -    { NULL, count } ,
  +    { NULL, count, exception } ,
   #endif
   #include "js.msg"
   #undef MSG_DEF
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsfile.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 jsfile.c
  --- ossp-pkg/js/src/jsfile.c	23 Jul 2006 10:52:12 -0000	1.2
  +++ ossp-pkg/js/src/jsfile.c	24 Jul 2006 18:38:27 -0000	1.3
  @@ -2400,7 +2400,6 @@
           obj = JS_NewObject(cx, &file_class, NULL, NULL);
           if (!obj)
               return JS_FALSE;
  -        *rval = OBJECT_TO_JSVAL(obj);
       }
   
       str = (argc == 0) 
  @@ -2420,6 +2419,7 @@
   
       SECURITY_CHECK(cx, NULL, "constructor", file);
   
  +    *rval = OBJECT_TO_JSVAL(obj);
       return JS_TRUE;
   }
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsinterp.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 jsinterp.c
  --- ossp-pkg/js/src/jsinterp.c	22 Jul 2006 20:31:56 -0000	1.3
  +++ ossp-pkg/js/src/jsinterp.c	24 Jul 2006 18:38:27 -0000	1.4
  @@ -1,5 +1,5 @@
   /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
  - * vim: set ts=8 sw=4 et tw=78:
  + * vim: set ts=8 sw=4 et tw=80:
    *
    * ***** BEGIN LICENSE BLOCK *****
    * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  @@ -460,6 +460,8 @@
   JSBool
   js_ComputeThis(JSContext *cx, JSObject *thisp, JSStackFrame *fp)
   {
  +    JSObject *parent;
  +
       if (thisp && OBJ_GET_CLASS(cx, thisp) != &js_CallClass) {
           /* Some objects (e.g., With) delegate 'this' to another object. */
           thisp = OBJ_THIS_OBJECT(cx, thisp);
  @@ -488,26 +490,13 @@
            */
           JS_ASSERT(!(fp->flags & JSFRAME_CONSTRUCTING));
           if (JSVAL_IS_PRIMITIVE(fp->argv[-2]) ||
  -            !OBJ_GET_PARENT(cx, JSVAL_TO_OBJECT(fp->argv[-2]))) {
  +            !(parent = OBJ_GET_PARENT(cx, JSVAL_TO_OBJECT(fp->argv[-2])))) {
               thisp = cx->globalObject;
           } else {
  -            jsid id;
  -            jsval v;
  -            uintN attrs;
  -
  -            /* Walk up the parent chain. */
  -            thisp = JSVAL_TO_OBJECT(fp->argv[-2]);
  -            id = ATOM_TO_JSID(cx->runtime->atomState.parentAtom);
  -            for (;;) {
  -                if (!OBJ_CHECK_ACCESS(cx, thisp, id, JSACC_PARENT, &v, &attrs))
  -                    return JS_FALSE;
  -                if (JSVAL_IS_VOID(v))
  -                    v = OBJ_GET_SLOT(cx, thisp, JSSLOT_PARENT);
  -                JS_ASSERT(JSVAL_TO_OBJECT(v) == OBJ_GET_PARENT(cx, thisp));
  -                if (JSVAL_IS_NULL(v))
  -                    break;
  -                thisp = JSVAL_TO_OBJECT(v);
  -            }
  +            /* walk up to find the top-level object */
  +            thisp = parent;
  +            while ((parent = OBJ_GET_PARENT(cx, thisp)) != NULL)
  +                thisp = parent;
           }
       }
       fp->thisp = thisp;
  @@ -2009,17 +1998,6 @@
                           LOAD_INTERRUPT_HANDLER(rt);
                       }
                   }
  -
  -#if JS_HAS_CALL_OBJECT
  -                /*
  -                 * If frame has a call object, sync values and clear the back-
  -                 * pointer. This can happen for a lightweight function if it
  -                 * calls eval unexpectedly (in a way that is hidden from the
  -                 * compiler). See bug 325540.
  -                 */
  -                if (fp->callobj)
  -                    ok &= js_PutCallObject(cx, fp);
  -#endif
   #if JS_HAS_ARGS_OBJECT
                   if (fp->argsobj)
                       ok &= js_PutArgsObject(cx, fp);
  @@ -2296,23 +2274,12 @@
   
               /* Is this the first iteration ? */
               if (JSVAL_IS_VOID(rval)) {
  -                /*
  -                 * Yes, create a new JSObject to hold the iterator state.
  -                 * Use NULL as the nominal parent in js_NewObject to ensure
  -                 * that we use the correct scope chain lookup to try to find the
  -                 * PropertyIterator constructor.
  -                 */
  -                propobj = js_NewObject(cx, &prop_iterator_class, NULL, NULL);
  +                /* Yes, create a new JSObject to hold the iterator state */
  +                propobj = js_NewObject(cx, &prop_iterator_class, NULL, obj);
                   if (!propobj) {
                       ok = JS_FALSE;
                       goto out;
                   }
  -
  -                /*
  -                 * Now that we've resolved the object, use the PARENT slot to
  -                 * store the object that we're iterating over.
  -                 */
  -                propobj->slots[JSSLOT_PARENT] = OBJECT_TO_JSVAL(obj);
                   propobj->slots[JSSLOT_ITER_STATE] = JSVAL_NULL;
   
                   /*
  @@ -3410,12 +3377,17 @@
   #undef FAST_GLOBAL_INCREMENT_OP
   
             do_nonint_fast_global_incop:
  +          {
  +            const JSCodeSpec *cs = &js_CodeSpec[op];
  +
               vp = sp++;
               SAVE_SP(fp);
               NONINT_INCREMENT_OP_MIDDLE();
               OBJ_SET_SLOT(cx, obj, slot, rval);
               STORE_OPND(-1, rtmp);
  +            len = cs->length;
               break;
  +          }
   
             case JSOP_GETPROP:
               /* Get an immediate atom naming the property. */
  @@ -4572,7 +4544,8 @@
                */
               SAVE_SP(fp);
               obj2 = fp->scopeChain;
  -            parent = js_NewObject(cx, &js_ObjectClass, NULL, obj2);
  +            parent = js_ConstructObject(cx, &js_ObjectClass, NULL, obj2,
  +                                        0, NULL);
               if (!parent) {
                   ok = JS_FALSE;
                   goto out;
  @@ -4998,24 +4971,12 @@
               JS_ASSERT(JSVAL_IS_OBJECT(lval));
               obj = JSVAL_TO_OBJECT(lval);
   
  +            /* Define obj[id] to contain rval and to be permanent. */
               SAVE_SP(fp);
  -
  -            /*
  -             * It's possible for an evil script to substitute a random object
  -             * for the new object. Check to make sure that we don't override a
  -             * readonly property with the below OBJ_DEFINE_PROPERTY.
  -             */
  -            ok = OBJ_GET_ATTRIBUTES(cx, obj, id, NULL, &attrs);
  +            ok = OBJ_DEFINE_PROPERTY(cx, obj, id, rval, NULL, NULL,
  +                                     JSPROP_PERMANENT, NULL);
               if (!ok)
                   goto out;
  -            if (!(attrs & (JSPROP_READONLY | JSPROP_PERMANENT |
  -                           JSPROP_GETTER | JSPROP_SETTER))) {
  -                /* Define obj[id] to contain rval and to be permanent. */
  -                ok = OBJ_DEFINE_PROPERTY(cx, obj, id, rval, NULL, NULL,
  -                                         JSPROP_PERMANENT, NULL);
  -                if (!ok)
  -                    goto out;
  -            }
   
               /* Now that we're done with rval, pop it. */
               sp--;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsprf.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 jsprf.c
  --- ossp-pkg/js/src/jsprf.c	22 Jul 2006 17:02:34 -0000	1.2
  +++ ossp-pkg/js/src/jsprf.c	24 Jul 2006 18:38:27 -0000	1.3
  @@ -49,6 +49,8 @@
   #include "jsprf.h"
   #include "jslong.h"
   #include "jsutil.h" /* Added by JSIFY */
  +#include "jspubtd.h"
  +#include "jsstr.h"
   
   /*
   ** Note: on some platforms va_list is defined as an array,
  @@ -110,6 +112,7 @@
   #define TYPE_STRING     8
   #define TYPE_DOUBLE     9
   #define TYPE_INTSTR     10
  +#define TYPE_WSTRING    11
   #define TYPE_UNKNOWN    20
   
   #define FLAG_LEFT       0x1
  @@ -400,6 +403,27 @@
       return fill2(ss, s ? s : "(null)", slen, width, flags);
   }
   
  +static int cvt_ws(SprintfState *ss, const jschar *ws, int width, int prec,
  +                  int flags)
  +{
  +    int result;
  +    /* 
  +     * Supply NULL as the JSContext; errors are not reported, 
  +     * and malloc() is used to allocate the buffer buffer. 
  +     */
  +    if (ws) {
  +        int slen = js_strlen(ws);
  +        char *s = js_DeflateString(NULL, ws, slen);
  +        if (!s)
  +            return -1; /* JSStuffFunc error indicator. */
  +        result = cvt_s(ss, s, width, prec, flags);
  +        free(s);
  +    } else {
  +        result = cvt_s(ss, NULL, width, prec, flags);
  +    }
  +    return result;
  +}
  +
   /*
   ** BuildArgArray stands for Numbered Argument list Sprintf
   ** for example,
  @@ -583,7 +607,7 @@
               break;
   
           case 's':
  -            nas[ cn ].type = TYPE_STRING;
  +            nas[ cn ].type = (nas[ cn ].type == TYPE_UINT16) ? TYPE_WSTRING : TYPE_STRING;
               break;
   
           case 'n':
  @@ -640,6 +664,8 @@
   
           case TYPE_STRING:       (void)va_arg( ap, char* );              break;
   
  +        case TYPE_WSTRING:      (void)va_arg( ap, jschar* );            break;
  +
           case TYPE_INTSTR:       (void)va_arg( ap, JSIntn* );            break;
   
           case TYPE_DOUBLE:       (void)va_arg( ap, double );             break;
  @@ -667,11 +693,13 @@
       int flags, width, prec, radix, type;
       union {
           char ch;
  +        jschar wch;
           int i;
           long l;
           JSInt64 ll;
           double d;
           const char *s;
  +        const jschar* ws;
           int *ip;
       } u;
       const char *fmt0;
  @@ -683,7 +711,10 @@
       struct NumArgState nasArray[ NAS_DEFAULT_NUM ];
       char pattern[20];
       const char *dolPt = NULL;  /* in "%4$.2f", dolPt will poiont to . */
  -
  +#ifdef JS_C_STRINGS_ARE_UTF8
  +    char utf8buf[6];
  +    int utf8len;
  +#endif
   
       /*
       ** build an argument array, IF the fmt is numbered argument
  @@ -910,7 +941,6 @@
               break;
   
             case 'c':
  -            u.ch = va_arg(ap, int);
               if ((flags & FLAG_LEFT) == 0) {
                   while (width-- > 1) {
                       rv = (*ss->stuff)(ss, " ", 1);
  @@ -919,7 +949,20 @@
                       }
                   }
               }
  -            rv = (*ss->stuff)(ss, &u.ch, 1);
  +            switch (type) {
  +              case TYPE_INT16:
  +                /* Treat %hc as %c if JS_C_STRINGS_ARE_UTF8 is undefined. */
  +#ifdef JS_C_STRINGS_ARE_UTF8
  +                u.wch = va_arg(ap, int);
  +                utf8len = js_OneUcs4ToUtf8Char (utf8buf, u.wch);
  +                rv = (*ss->stuff)(ss, utf8buf, utf8len);
  +                break;
  +#endif
  +              case TYPE_INTN:
  +                u.ch = va_arg(ap, int);
  +                rv = (*ss->stuff)(ss, &u.ch, 1);
  +                break;
  +            }
               if (rv < 0) {
                   return rv;
               }
  @@ -958,8 +1001,17 @@
   #endif
   
             case 's':
  -            u.s = va_arg(ap, const char*);
  -            rv = cvt_s(ss, u.s, width, prec, flags);
  +            if(type == TYPE_INT16) {
  +                /* 
  +                 * This would do a simple string/byte conversion 
  +                 * if JS_C_STRINGS_ARE_UTF8 is not defined. 
  +                 */
  +                u.ws = va_arg(ap, const jschar*);
  +                rv = cvt_ws(ss, u.ws, width, prec, flags);
  +            } else {
  +                u.s = va_arg(ap, const char*);
  +                rv = cvt_s(ss, u.s, width, prec, flags);
  +            }
               if (rv < 0) {
                   return rv;
               }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jspubtd.h
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 jspubtd.h
  --- ossp-pkg/js/src/jspubtd.h	22 Jul 2006 20:31:56 -0000	1.2
  +++ ossp-pkg/js/src/jspubtd.h	24 Jul 2006 18:38:27 -0000	1.3
  @@ -546,9 +546,28 @@
   (* JS_DLL_CALLBACK JSErrorReporter)(JSContext *cx, const char *message,
                                       JSErrorReport *report);
   
  +/*
  + * Possible exception types. These types are part of a JSErrorFormatString 
  + * structure. They define which error to throw in case of a runtime error.
  + * JSEXN_NONE marks an unthrowable error.
  + */
  +typedef enum JSExnType {
  +    JSEXN_NONE = -1,
  +      JSEXN_ERR,
  +        JSEXN_INTERNALERR,
  +        JSEXN_EVALERR,
  +        JSEXN_RANGEERR,
  +        JSEXN_REFERENCEERR,
  +        JSEXN_SYNTAXERR,
  +        JSEXN_TYPEERR,
  +        JSEXN_URIERR,
  +        JSEXN_LIMIT
  +} JSExnType;
  +
   typedef struct JSErrorFormatString {
  -    const char *format;
  -    uintN argCount;
  +    const char *format;  /* the error message (may be UTF-8 if compiled with JS_C_STRINGS_ARE_UTF8) */
  +    uint16 argCount;     /* the number of arguments to convert in the error message */
  +    uint16 exnType;      /* One of the JSExnType constants above */
   } JSErrorFormatString;
   
   typedef const JSErrorFormatString *
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/perlconnect/.cvsignore
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 .cvsignore
  --- ossp-pkg/js/src/perlconnect/.cvsignore	22 Jul 2006 15:09:45 -0000	1.1
  +++ ossp-pkg/js/src/perlconnect/.cvsignore	24 Jul 2006 18:38:28 -0000	1.2
  @@ -1,6 +1 @@
  -Makefile
  -Makefile.PL
  -blib
  -pm_to_blib
  -JS.bs
   JS.c
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jul 24 20:53:41 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 86949752921; Mon, 24 Jul 2006 20:53:41 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ ChangeLog
Message-Id: <20060724185341.86949752921@mail.ossp.org>
Date: Mon, 24 Jul 2006 20:53:41 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Jul-2006 20:53:41
  Branch: HEAD                             Handle: 2006072419534100

  Modified files:
    ossp-pkg/js             ChangeLog

  Log:
    Remember upgrade.

  Summary:
    Revision    Changes     Path
    1.4         +5  -0      ossp-pkg/js/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ChangeLog
  --- ossp-pkg/js/ChangeLog	23 Jul 2006 19:11:48 -0000	1.3
  +++ ossp-pkg/js/ChangeLog	24 Jul 2006 18:53:41 -0000	1.4
  @@ -13,6 +13,11 @@
   
     Changes between 1.6.20060722 and 1.6.20060723 (2006-07-22 to 2006-07-23)
   
  +   o Upgrade from (the Mozilla Firefox 1.5 pinned version) SpiderMonkey
  +     1.6.20060722 to the (SPIDERMONKEY_1_6_0_BRANCH based) 1.6.20060724
  +     upstream version.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
      o Added jslint (see http://www.jslint.com/) together with some
        home-brewn option parser. The result is installed as
        a stand-alone "jslint" program.
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jul 24 20:54:41 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 74EE5752928; Mon, 24 Jul 2006 20:54:41 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ ChangeLog ossp-pkg/js/src/ jsfile.c
Message-Id: <20060724185441.74EE5752928@mail.ossp.org>
Date: Mon, 24 Jul 2006 20:54:41 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Jul-2006 20:54:41
  Branch: HEAD                             Handle: 2006072419544001

  Modified files:
    ossp-pkg/js             ChangeLog
    ossp-pkg/js/src         jsfile.c

  Log:
    Fix an incorrect argument type bug in jsfile.c related to a call to
    js_InflateString(). A "size_t *" has to be passed, not a "size_t".

  Summary:
    Revision    Changes     Path
    1.5         +4  -0      ossp-pkg/js/ChangeLog
    1.4         +9  -0      ossp-pkg/js/src/jsfile.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ChangeLog
  --- ossp-pkg/js/ChangeLog	24 Jul 2006 18:53:41 -0000	1.4
  +++ ossp-pkg/js/ChangeLog	24 Jul 2006 18:54:40 -0000	1.5
  @@ -13,6 +13,10 @@
   
     Changes between 1.6.20060722 and 1.6.20060723 (2006-07-22 to 2006-07-23)
   
  +   o Fix an incorrect argument type bug in jsfile.c related to a call to
  +     js_InflateString(). A "size_t *" has to be passed, not a "size_t".
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
      o Upgrade from (the Mozilla Firefox 1.5 pinned version) SpiderMonkey
        1.6.20060722 to the (SPIDERMONKEY_1_6_0_BRANCH based) 1.6.20060724
        upstream version.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsfile.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 jsfile.c
  --- ossp-pkg/js/src/jsfile.c	24 Jul 2006 18:38:27 -0000	1.3
  +++ ossp-pkg/js/src/jsfile.c	24 Jul 2006 18:54:41 -0000	1.4
  @@ -2277,9 +2277,18 @@
       sprintf(url, "file://%s", file->path);
       /* TODO: js_escape in jsstr.h may go away at some point */
   
  +#ifdef OSSP
  +{
  +    size_t len = strlen(url);
  +    urlChars = js_InflateString(cx, url, &len);
  +    if (urlChars == NULL) return JS_FALSE;
  +    *rval = STRING_TO_JSVAL(js_NewString(cx, urlChars, len, 0));
  +}
  +#else
       urlChars = js_InflateString(cx, url, strlen(url));
       if (urlChars == NULL) return JS_FALSE;
       *rval = STRING_TO_JSVAL(js_NewString(cx, urlChars, strlen(url), 0));
  +#endif
       if (!js_str_escape(cx, obj, 0, rval, rval)) return JS_FALSE;
   
       return JS_TRUE;
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jul 24 21:04:54 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 397EA75292A; Mon, 24 Jul 2006 21:04:54 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ ChangeLog ossp-pkg/js/src/ jsapi.c jscntxt.c ...
Message-Id: <20060724190454.397EA75292A@mail.ossp.org>
Date: Mon, 24 Jul 2006 21:04:54 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Jul-2006 21:04:54
  Branch: HEAD                             Handle: 2006072420045003

  Modified files:
    ossp-pkg/js             ChangeLog
    ossp-pkg/js/src         jsapi.c jscntxt.c jsdtoa.c jsfile.c jsinterp.c
                            jspubtd.h

  Log:
    Consistently mark all OSSP bugfixes with a "/* BUGFIX */" tag on
    the "#ifdef OSSP" line. This way one can more easily see what
    are specific OSSP specific changes what should be taken over by
    upstream vendor.

  Summary:
    Revision    Changes     Path
    1.6         +6  -0      ossp-pkg/js/ChangeLog
    1.6         +3  -3      ossp-pkg/js/src/jsapi.c
    1.4         +1  -1      ossp-pkg/js/src/jscntxt.c
    1.3         +2  -2      ossp-pkg/js/src/jsdtoa.c
    1.5         +5  -5      ossp-pkg/js/src/jsfile.c
    1.5         +6  -6      ossp-pkg/js/src/jsinterp.c
    1.4         +1  -1      ossp-pkg/js/src/jspubtd.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ChangeLog
  --- ossp-pkg/js/ChangeLog	24 Jul 2006 18:54:40 -0000	1.5
  +++ ossp-pkg/js/ChangeLog	24 Jul 2006 19:04:50 -0000	1.6
  @@ -13,6 +13,12 @@
   
     Changes between 1.6.20060722 and 1.6.20060723 (2006-07-22 to 2006-07-23)
   
  +   o Consistently mark all OSSP bugfixes with a "/* BUGFIX */" tag on
  +     the "#ifdef OSSP" line. This way one can more easily see what
  +     are specific OSSP specific changes what should be taken over by
  +     upstream vendor.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
      o Fix an incorrect argument type bug in jsfile.c related to a call to
        js_InflateString(). A "size_t *" has to be passed, not a "size_t".
        [Ralf S. Engelschall <rse@engelschall.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsapi.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 jsapi.c
  --- ossp-pkg/js/src/jsapi.c	24 Jul 2006 18:38:26 -0000	1.5
  +++ ossp-pkg/js/src/jsapi.c	24 Jul 2006 19:04:50 -0000	1.6
  @@ -130,7 +130,7 @@
   
   static JSBool
   TryArgumentFormatter(JSContext *cx, const char **formatp, JSBool fromJS,
  -#ifdef OSSP
  +#ifdef OSSP /* BUGFIX */
                        jsval **vpp, va_list app)
   #else
                        jsval **vpp, va_list *app)
  @@ -264,7 +264,7 @@
             default:
               format--;
               if (!TryArgumentFormatter(cx, &format, JS_TRUE, &sp,
  -#ifdef OSSP
  +#ifdef OSSP /* BUGFIX */
                                         ap)) {
   #else
                                         JS_ADDRESSOF_VA_LIST(ap))) {
  @@ -371,7 +371,7 @@
             default:
               format--;
               if (!TryArgumentFormatter(cx, &format, JS_FALSE, &sp,
  -#ifdef OSSP
  +#ifdef OSSP /* BUGFIX */
                                         ap)) {
   #else
                                         JS_ADDRESSOF_VA_LIST(ap))) {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jscntxt.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 jscntxt.c
  --- ossp-pkg/js/src/jscntxt.c	24 Jul 2006 18:38:27 -0000	1.3
  +++ ossp-pkg/js/src/jscntxt.c	24 Jul 2006 19:04:50 -0000	1.4
  @@ -367,7 +367,7 @@
       return ((JSDHashNumber)JS_PTR_TO_UINT32(key->obj) >> JSVAL_TAGBITS) ^ key->id;
   }
   
  -#ifdef OSSP
  +#ifdef OSSP /* BUGFIX */
   JS_STATIC_DLL_CALLBACK(JSBool)
   #else
   JS_PUBLIC_API(JSBool)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsdtoa.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 jsdtoa.c
  --- ossp-pkg/js/src/jsdtoa.c	22 Jul 2006 20:31:56 -0000	1.2
  +++ ossp-pkg/js/src/jsdtoa.c	24 Jul 2006 19:04:53 -0000	1.3
  @@ -247,7 +247,7 @@
   #define word1(x)        JSDOUBLE_LO32(x)
   #define set_word1(x, y) JSDOUBLE_SET_LO32(x, y)
   
  -#ifdef OSSP
  +#ifdef OSSP /* BUGFIX */
   #define Storeinc(a,b,c) (*(a)++ = (b) << 16 | ((c) & 0xffff))
   #else
   #define Storeinc(a,b,c) (*(a)++ = (b) << 16 | (c) & 0xffff)
  @@ -1830,7 +1830,7 @@
       }
   #ifdef Avoid_Underflow
       if (scale) {
  -#ifdef OSSP
  +#ifdef OSSP /* CLEANUP */
           rv0 = 0.; /* calm the compiler warning */
   #endif
           set_word0(rv0, Exp_1 - P*Exp_msk1);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsfile.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 jsfile.c
  --- ossp-pkg/js/src/jsfile.c	24 Jul 2006 18:54:41 -0000	1.4
  +++ ossp-pkg/js/src/jsfile.c	24 Jul 2006 19:04:53 -0000	1.5
  @@ -2277,7 +2277,7 @@
       sprintf(url, "file://%s", file->path);
       /* TODO: js_escape in jsstr.h may go away at some point */
   
  -#ifdef OSSP
  +#ifdef OSSP /* BUGFIX */
   {
       size_t len = strlen(url);
       urlChars = js_InflateString(cx, url, &len);
  @@ -2871,18 +2871,18 @@
                       bytes = js_combinePath(cx, file->path, prop_name);
                       *vp = OBJECT_TO_JSVAL(js_NewFileObject(cx, bytes));
                       JS_free(cx, bytes);
  -#ifdef OSSP
  +#ifdef OSSP /* BUGFIX */
                       closedir(dir);
   #else
  -                    PR_CloseDir(dir); /* XXX: bugfix */
  +                    PR_CloseDir(dir);
   #endif
                       return JS_TRUE;
                   }
               }
  -#ifdef OSSP
  +#ifdef OSSP /* BUGFIX */
               closedir(dir);
   #else
  -            PR_CloseDir(dir); /* XXX: bugfix */
  +            PR_CloseDir(dir);
   #endif
           }
       }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsinterp.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 jsinterp.c
  --- ossp-pkg/js/src/jsinterp.c	24 Jul 2006 18:38:27 -0000	1.4
  +++ ossp-pkg/js/src/jsinterp.c	24 Jul 2006 19:04:53 -0000	1.5
  @@ -920,7 +920,7 @@
           thisp = frame.thisp;
   
           id = ATOM_TO_JSID(cx->runtime->atomState.noSuchMethodAtom);
  -#if JS_HAS_XML_SUPPORT
  +#if defined(OSSP) /* BUGFIX */ && JS_HAS_XML_SUPPORT
           if (OBJECT_IS_XML(cx, thisp)) {
               JSXMLObjectOps *ops;
   
  @@ -934,7 +934,7 @@
           } else {
   #endif
               ok = OBJ_GET_PROPERTY(cx, thisp, id, &v);
  -#if JS_HAS_XML_SUPPORT
  +#if defined(OSSP) /* BUGFIX */ && JS_HAS_XML_SUPPORT
           }
   #endif
           if (!ok)
  @@ -1733,7 +1733,7 @@
       void *mark;
       jsbytecode *endpc, *pc2;
       JSOp op, op2;
  -#ifdef OSSP
  +#ifdef OSSP /* CLEANUP */
       const JSCodeSpec *cs = NULL;
   #else
       const JSCodeSpec *cs;
  @@ -1742,7 +1742,7 @@
       JSAtom *atom;
       uintN argc, slot, attrs;
       jsval *vp, lval, rval, ltmp, rtmp;
  -#ifdef OSSP
  +#ifdef OSSP /* CLEANUP */
       jsid id = -1L;
   #else
       jsid id;
  @@ -1758,7 +1758,7 @@
       JSFunction *fun;
       JSType type;
   #ifdef DEBUG
  -#ifdef OSSP
  +#ifdef OSSP /* CLEANUP */
       FILE *tracefp = NULL;
   #else
       FILE *tracefp;
  @@ -5503,7 +5503,7 @@
           if (printable)
               js_ReportIsNotDefined(cx, printable);
           ok = JS_FALSE;
  -#ifdef OSSP
  +#ifdef OSSP /* CLEANUP */
           sp = NULL;
   #endif
           goto out;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jspubtd.h
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 jspubtd.h
  --- ossp-pkg/js/src/jspubtd.h	24 Jul 2006 18:38:27 -0000	1.3
  +++ ossp-pkg/js/src/jspubtd.h	24 Jul 2006 19:04:53 -0000	1.4
  @@ -580,7 +580,7 @@
   typedef JSBool
   (* JS_DLL_CALLBACK JSArgumentFormatter)(JSContext *cx, const char *format,
                                           JSBool fromJS, jsval **vpp,
  -#ifdef OSSP
  +#ifdef OSSP /* BUGFIX */
                                           va_list app);
   #else
                                           va_list *app);
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jul 24 21:21:49 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id AA18D7528EA; Mon, 24 Jul 2006 21:21:49 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ configure.ac ossp-pkg/js/src/ jstypes.h
Message-Id: <20060724192149.AA18D7528EA@mail.ossp.org>
Date: Mon, 24 Jul 2006 21:21:49 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Jul-2006 21:21:49
  Branch: HEAD                             Handle: 2006072420214900

  Modified files:
    ossp-pkg/js             configure.ac
    ossp-pkg/js/src         jstypes.h

  Log:
    Move definitions of XP_UNIX and EXPORT_JS_API back from jstypes.h
    to configure.ac (and this way the command-line) to not break the
    use of jstypes.h as a regular API header in JS based applications.

  Summary:
    Revision    Changes     Path
    1.14        +1  -1      ossp-pkg/js/configure.ac
    1.4         +0  -6      ossp-pkg/js/src/jstypes.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/configure.ac
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 configure.ac
  --- ossp-pkg/js/configure.ac	23 Jul 2006 18:34:15 -0000	1.13
  +++ ossp-pkg/js/configure.ac	24 Jul 2006 19:21:49 -0000	1.14
  @@ -45,7 +45,7 @@
   AC_CHECK_LIB(socket, accept)
   AC_CHECK_LIB(m, floor)
   
  -CPPFLAGS="$CPPFLAGS -DOSSP"
  +CPPFLAGS="$CPPFLAGS -DOSSP -DXP_UNIX -DEXPORT_JS_API"
   
   dnl #   configure option --with-version
   AC_ARG_WITH([version],
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jstypes.h
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 jstypes.h
  --- ossp-pkg/js/src/jstypes.h	22 Jul 2006 16:47:14 -0000	1.3
  +++ ossp-pkg/js/src/jstypes.h	24 Jul 2006 19:21:49 -0000	1.4
  @@ -56,12 +56,6 @@
   
   #include <stddef.h>
   
  -#ifdef OSSP
  -/* select functionality */
  -#define XP_UNIX
  -#define EXPORT_JS_API
  -#endif
  -
   /***********************************************************************
   ** MACROS:      JS_EXTERN_API
   **              JS_EXPORT_API
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jul 24 21:22:41 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id AB85675348C; Mon, 24 Jul 2006 21:22:41 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ ChangeLog
Message-Id: <20060724192241.AB85675348C@mail.ossp.org>
Date: Mon, 24 Jul 2006 21:22:41 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Jul-2006 21:22:41
  Branch: HEAD                             Handle: 2006072420224100

  Modified files:
    ossp-pkg/js             ChangeLog

  Log:
    remember change

  Summary:
    Revision    Changes     Path
    1.7         +5  -0      ossp-pkg/js/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ChangeLog
  --- ossp-pkg/js/ChangeLog	24 Jul 2006 19:04:50 -0000	1.6
  +++ ossp-pkg/js/ChangeLog	24 Jul 2006 19:22:41 -0000	1.7
  @@ -13,6 +13,11 @@
   
     Changes between 1.6.20060722 and 1.6.20060723 (2006-07-22 to 2006-07-23)
   
  +   o Move definitions of XP_UNIX and EXPORT_JS_API back from jstypes.h
  +     to configure.ac (and this way the command-line) to not break the
  +     use of jstypes.h as a regular API header in JS based applications.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
      o Consistently mark all OSSP bugfixes with a "/* BUGFIX */" tag on
        the "#ifdef OSSP" line. This way one can more easily see what
        are specific OSSP specific changes what should be taken over by
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jul 24 21:53:02 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 9E3A1752909; Mon, 24 Jul 2006 21:53:02 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ ChangeLog js-config.sh.in js.pc.in ossp-pkg/j...
Message-Id: <20060724195302.9E3A1752909@mail.ossp.org>
Date: Mon, 24 Jul 2006 21:53:02 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Jul-2006 21:53:02
  Branch: HEAD                             Handle: 2006072420530002

  Modified files:
    ossp-pkg/js             ChangeLog js-config.sh.in js.pc.in
    ossp-pkg/js/src         jsapi.c jsapi.h jsatom.c jsfile.c jsstr.c
    ossp-pkg/js/src/perlconnect
                            JS.xs Makefile.PL.in

  Log:
    Apply multiple code cleanups and bugfixes.

  Summary:
    Revision    Changes     Path
    1.8         +3  -0      ossp-pkg/js/ChangeLog
    1.2         +1  -1      ossp-pkg/js/js-config.sh.in
    1.5         +1  -1      ossp-pkg/js/js.pc.in
    1.7         +8  -0      ossp-pkg/js/src/jsapi.c
    1.2         +56 -15     ossp-pkg/js/src/jsapi.h
    1.2         +10 -3      ossp-pkg/js/src/jsatom.c
    1.6         +10 -4      ossp-pkg/js/src/jsfile.c
    1.2         +276 -76    ossp-pkg/js/src/jsstr.c
    1.4         +7  -6      ossp-pkg/js/src/perlconnect/JS.xs
    1.4         +1  -1      ossp-pkg/js/src/perlconnect/Makefile.PL.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 ChangeLog
  --- ossp-pkg/js/ChangeLog	24 Jul 2006 19:22:41 -0000	1.7
  +++ ossp-pkg/js/ChangeLog	24 Jul 2006 19:53:00 -0000	1.8
  @@ -13,6 +13,9 @@
   
     Changes between 1.6.20060722 and 1.6.20060723 (2006-07-22 to 2006-07-23)
   
  +   o Apply multiple code cleanups and bugfixes.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
      o Move definitions of XP_UNIX and EXPORT_JS_API back from jstypes.h
        to configure.ac (and this way the command-line) to not break the
        use of jstypes.h as a regular API header in JS based applications.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/js-config.sh.in
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 js-config.sh.in
  --- ossp-pkg/js/js-config.sh.in	23 Jul 2006 08:00:43 -0000	1.1
  +++ ossp-pkg/js/js-config.sh.in	24 Jul 2006 19:53:00 -0000	1.2
  @@ -109,7 +109,7 @@
               output="$output $js_acdir"
               ;;
           --cppflags)
  -            output="$output -DXP_UNIX -I$js_includedir/js"
  +            output="$output -DOSSP -DXP_UNIX -I$js_includedir/js"
               ;;
           --cflags)
               : # none
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/js.pc.in
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 js.pc.in
  --- ossp-pkg/js/js.pc.in	23 Jul 2006 08:00:43 -0000	1.4
  +++ ossp-pkg/js/js.pc.in	24 Jul 2006 19:53:01 -0000	1.5
  @@ -7,4 +7,4 @@
   Description: Mozilla JavaScript Engine
   Version: @JS_VERSION@
   Libs: -L${libdir} -ljs @LIBS@
  -Cflags: -DXP_UNIX -I${includedir}/js
  +Cflags: -DOSSP -DXP_UNIX -I${includedir}/js
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsapi.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 jsapi.c
  --- ossp-pkg/js/src/jsapi.c	24 Jul 2006 19:04:50 -0000	1.6
  +++ ossp-pkg/js/src/jsapi.c	24 Jul 2006 19:53:01 -0000	1.7
  @@ -99,7 +99,11 @@
   #endif
   
   JS_PUBLIC_API(int64)
  +#ifdef OSSP /* CLEANUP */
  +JS_Now(void)
  +#else
   JS_Now()
  +#endif
   {
       return PRMJ_Now();
   }
  @@ -4440,7 +4444,11 @@
   }
   
   JS_PUBLIC_API(JSBool)
  +#ifdef OSSP /* CLEANUP */
  +JS_CStringsAreUTF8(void)
  +#else
   JS_CStringsAreUTF8()
  +#endif
   {
   #ifdef JS_C_STRINGS_ARE_UTF8
       return JS_TRUE;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsapi.h
  ============================================================================
  $ cvs diff -u -r1.1.1.2 -r1.2 jsapi.h
  --- ossp-pkg/js/src/jsapi.h	4 Apr 2006 14:09:44 -0000	1.1.1.2
  +++ ossp-pkg/js/src/jsapi.h	24 Jul 2006 19:53:01 -0000	1.2
  @@ -39,6 +39,14 @@
   
   #ifndef jsapi_h___
   #define jsapi_h___
  +
  +#ifndef OSSP
  +#define OSSP
  +#endif
  +#ifndef XP_UNIX
  +#define XP_UNIX
  +#endif
  +
   /*
    * JavaScript API.
    */
  @@ -163,7 +171,11 @@
    * comment in jstypes.h regarding safe int64 usage.
    */
   extern JS_PUBLIC_API(int64)
  +#ifdef OSSP /* CLEANUP */
  +JS_Now(void);
  +#else
   JS_Now();
  +#endif
   
   /* Don't want to export data, so provide accessors for non-inline jsvals. */
   extern JS_PUBLIC_API(jsval)
  @@ -1756,7 +1768,11 @@
    * to get UTF-8 support.
    */
   JS_PUBLIC_API(JSBool)
  +#ifdef OSSP /* CLEANUP */
  +JS_CStringsAreUTF8(void);
  +#else
   JS_CStringsAreUTF8();
  +#endif
   
   /*
    * Character encoding support.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsatom.c
  ============================================================================
  $ cvs diff -u -r1.1.1.2 -r1.2 jsatom.c
  --- ossp-pkg/js/src/jsatom.c	4 Apr 2006 14:09:45 -0000	1.1.1.2
  +++ ossp-pkg/js/src/jsatom.c	24 Jul 2006 19:53:01 -0000	1.2
  @@ -210,6 +210,10 @@
   }
   
   /* These next two are exported to jsscript.c and used similarly there. */
  +#ifdef OSSP /* CLEANUP */
  +void * JS_DLL_CALLBACK js_alloc_table_space(void *, size_t);
  +void   JS_DLL_CALLBACK js_free_table_space(void *, void *);
  +#endif
   void * JS_DLL_CALLBACK
   js_alloc_table_space(void *priv, size_t size)
   {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsfile.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 jsfile.c
  --- ossp-pkg/js/src/jsfile.c	24 Jul 2006 19:04:53 -0000	1.5
  +++ ossp-pkg/js/src/jsfile.c	24 Jul 2006 19:53:01 -0000	1.6
  @@ -43,10 +43,6 @@
    */
   #if JS_HAS_FILE_OBJECT
   
  -#ifdef OSSP
  -#define XP_UNIX
  -#endif
  -
   #include "jsstddef.h"
   
   /* ----------------- Platform-specific includes and defines ----------------- */
  @@ -95,6 +91,9 @@
   #include "jsscript.h"
   #include "jsstr.h"
   #include "jsutil.h" /* Added by JSIFY */
  +#ifdef OSSP /* CLEANUP */
  +#include "jsfile.h"
  +#endif
   #include <string.h>
   
   /* NSPR dependencies */
  @@ -2363,6 +2362,9 @@
   }
   
   /* Internal function, used for cases which NSPR file support doesn't cover */
  +#ifdef OSSP /* CLEANUP */
  +static
  +#endif
   JSObject*
   js_NewFileObjectFromFILE(JSContext *cx, FILE *nativehandle, char *filename,
       int32 mode, JSBool open, JSBool randomAccess)
  @@ -2475,7 +2477,11 @@
       FILE_APPEND             = -19,
       FILE_REPLACE            = -20,
       FILE_AUTOFLUSH          = -21,
  +#ifdef OSSP /* BUGFIX */
  +    FILE_ISNATIVE           = -22
  +#else
       FILE_ISNATIVE           = -22,
  +#endif
   };
   
   static JSPropertySpec file_props[] = {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsstr.c
  ============================================================================
  $ cvs diff -u -r1.1.1.2 -r1.2 jsstr.c
  --- ossp-pkg/js/src/jsstr.c	4 Apr 2006 14:09:45 -0000	1.1.1.2
  +++ ossp-pkg/js/src/jsstr.c	24 Jul 2006 19:53:01 -0000	1.2
  @@ -2935,7 +2935,7 @@
               v = ((c - 0xD800) << 10) + (c2 - 0xDC00) + 0x10000;
           }
           if (v < 0x0080) {
  -            // no encoding necessary - performance hack
  +            /* OSSP BUGFIX */ /* no encoding necessary - performance hack */
               if (!dstlen)
                   goto bufferTooSmall;
               if (dst)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/perlconnect/JS.xs
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 JS.xs
  --- ossp-pkg/js/src/perlconnect/JS.xs	22 Jul 2006 17:10:02 -0000	1.3
  +++ ossp-pkg/js/src/perlconnect/JS.xs	24 Jul 2006 19:53:02 -0000	1.4
  @@ -126,7 +126,7 @@
   struct PerlObjectItem {
       char * name;
       SV* pObject;
  -    //JSObject *jsStub;
  +    /* OSSP BUGFIX *//*JSObject *jsStub;*/
       JSObject *jsObject;
       JSClass *jsClass;
       struct PerlCallbackItem* vector;
  @@ -136,8 +136,8 @@
   typedef struct PerlObjectItem PerlObjectItem;
   
   /* error reporter */
  -//struct JSContextItem;
  -//struct JSContextItem;
  +/* OSSP BUGFIX *//*struct JSContextItem;*/
  +/* OSSP BUGFIX *//*struct JSContextItem;*/
   struct  JSContextItem {
       JSContext *cx;
       SV *errorReporter;
  @@ -492,7 +492,8 @@
       class->enumerate = JS_EnumerateStub;
       class->resolve = JS_ResolveStub;
       class->convert = JS_ConvertStub;
  -    //class->finalize = JS_FinalizeStub;
  +    /* OSSP BUGFIX */
  +    /*class->finalize = JS_FinalizeStub;*/
       class->finalize = PCB_FinalizeStub;
       return(class);
   }
  @@ -655,7 +656,7 @@
               JS_ClearPendingException(cx);
           }
           JS_SetErrorReporter(cx, NULL);
  -        JS_GC(cx); //important
  +        JS_GC(cx); /* OSSP BUGFIX */ /*important*/
           JS_DestroyContext(cx);
           PCB_FreeContextItem(cx);
       }
  @@ -811,7 +812,7 @@
       }
       /* create js object in given context */
       object_class = PCB_NewStdJSClass(name);
  -    //jso = JS_NewObject(cx, object_class, NULL, 0);
  +    /* OSSP BUGFIX */ /* jso = JS_NewObject(cx, object_class, NULL, 0); */
   
       jso = JS_DefineObject(cx, JS_GetGlobalObject(cx), name, 
                             object_class, NULL, 
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/perlconnect/Makefile.PL.in
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 Makefile.PL.in
  --- ossp-pkg/js/src/perlconnect/Makefile.PL.in	22 Jul 2006 17:10:02 -0000	1.3
  +++ ossp-pkg/js/src/perlconnect/Makefile.PL.in	24 Jul 2006 19:53:02 -0000	1.4
  @@ -3,7 +3,7 @@
   
   WriteMakefile(
       NAME         => 'JS',
  -	DEFINE       => '-DOSSP',
  +	DEFINE       => '-DOSSP -DXP_UNIX',
   	INC          => "-I..",
   	LIBS         => "-L../../.libs -ljs @LIBS@",
   	VERSION_FROM => 'JS.pm',
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jul 24 21:53:29 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 722A9752909; Mon, 24 Jul 2006 21:53:29 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/src/perlconnect/ .cvsignore
Message-Id: <20060724195329.722A9752909@mail.ossp.org>
Date: Mon, 24 Jul 2006 21:53:29 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Jul-2006 21:53:29
  Branch: HEAD                             Handle: 2006072420532900

  Modified files:
    ossp-pkg/js/src/perlconnect
                            .cvsignore

  Log:
    ignore more generated files

  Summary:
    Revision    Changes     Path
    1.3         +5  -0      ossp-pkg/js/src/perlconnect/.cvsignore
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/perlconnect/.cvsignore
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 .cvsignore
  --- ossp-pkg/js/src/perlconnect/.cvsignore	24 Jul 2006 18:38:28 -0000	1.2
  +++ ossp-pkg/js/src/perlconnect/.cvsignore	24 Jul 2006 19:53:29 -0000	1.3
  @@ -1 +1,6 @@
  +JS.bs
   JS.c
  +Makefile
  +Makefile.PL
  +blib
  +pm_to_blib
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jul 24 22:12:15 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 357F7752928; Mon, 24 Jul 2006 22:12:15 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ ChangeLog README VERSION ossp-pkg/js/src/ jsa...
Message-Id: <20060724201215.357F7752928@mail.ossp.org>
Date: Mon, 24 Jul 2006 22:12:15 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-Jul-2006 22:12:15
  Branch: HEAD                             Handle: 2006072421121400

  Modified files:
    ossp-pkg/js             ChangeLog README VERSION
    ossp-pkg/js/src         jsapi.c

  Log:
    bump version before release

  Summary:
    Revision    Changes     Path
    1.9         +1  -1      ossp-pkg/js/ChangeLog
    1.9         +1  -1      ossp-pkg/js/README
    1.3         +1  -1      ossp-pkg/js/VERSION
    1.8         +1  -1      ossp-pkg/js/src/jsapi.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 ChangeLog
  --- ossp-pkg/js/ChangeLog	24 Jul 2006 19:53:00 -0000	1.8
  +++ ossp-pkg/js/ChangeLog	24 Jul 2006 20:12:14 -0000	1.9
  @@ -11,7 +11,7 @@
   
     This is a list of all changes to OSSP js.
   
  -  Changes between 1.6.20060722 and 1.6.20060723 (2006-07-22 to 2006-07-23)
  +  Changes between 1.6.20060722 and 1.6.20060724 (2006-07-22 to 2006-07-24)
   
      o Apply multiple code cleanups and bugfixes.
        [Ralf S. Engelschall <rse@engelschall.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/README
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 README
  --- ossp-pkg/js/README	23 Jul 2006 10:56:36 -0000	1.8
  +++ ossp-pkg/js/README	24 Jul 2006 20:12:14 -0000	1.9
  @@ -6,7 +6,7 @@
                                     |__/      
   
     OSSP js - Mozilla JavaScript Engine
  -  Version 1.6.20060722 (22-Jul-2006)
  +  Version 1.6.20060724 (24-Jul-2006)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/VERSION
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 VERSION
  --- ossp-pkg/js/VERSION	22 Jul 2006 19:43:48 -0000	1.2
  +++ ossp-pkg/js/VERSION	24 Jul 2006 20:12:14 -0000	1.3
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP js (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP js, Version 1.6.20060722 (22-Jul-2006)
  +  This is OSSP js, Version 1.6.20060724 (24-Jul-2006)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsapi.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 jsapi.c
  --- ossp-pkg/js/src/jsapi.c	24 Jul 2006 19:53:01 -0000	1.7
  +++ ossp-pkg/js/src/jsapi.c	24 Jul 2006 20:12:14 -0000	1.8
  @@ -1085,7 +1085,7 @@
   JS_GetImplementationVersion(void)
   {
   #ifdef OSSP
  -    return "JavaScript-C 1.6 pre-release 1 2006-04-04 (OSSP js 1.6.20060722)";
  +    return "JavaScript-C 1.6 pre-release 1 2006-04-04 (OSSP js 1.6.20060724)";
   #else
       return "JavaScript-C 1.6 pre-release 1 2006-04-04";
   #endif
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jul 24 22:24:27 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 79BAC7534BC; Mon, 24 Jul 2006 22:24:27 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20060724202427.79BAC7534BC@mail.ossp.org>
Date: Mon, 24 Jul 2006 22:24:27 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   24-Jul-2006 22:24:27
  Branch: HEAD                             Handle: 2006072421242601

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/js     index.wml

  Log:
    release OSSP js 1.6.20060724

  Summary:
    Revision    Changes     Path
    1.153       +1  -0      ossp-web/new/news.txt
    1.124       +1  -1      ossp-web/pkg/lib/index.wml
    1.2         +2  -2      ossp-web/pkg/lib/js/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.152 -r1.153 news.txt
  --- ossp-web/new/news.txt	23 Jul 2006 12:57:16 -0000	1.152
  +++ ossp-web/new/news.txt	24 Jul 2006 20:24:26 -0000	1.153
  @@ -1,3 +1,4 @@
  +24-Jul-2006: Released L<OSSP js> 1.6.20060724
   22-Jul-2006: Released L<OSSP js> 1.6.20060722
   08-Jun-2006: Released L<GNU pth> 2.0.7
   17-Apr-2006: Released T<GNU shtool> 2.0.6
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.123 -r1.124 index.wml
  --- ossp-web/pkg/lib/index.wml	23 Jul 2006 12:57:16 -0000	1.123
  +++ ossp-web/pkg/lib/index.wml	24 Jul 2006 20:24:26 -0000	1.124
  @@ -42,7 +42,7 @@
   			done=95 stable=none unstable=0.9.3>
     <pkg_item name="js" longname="OSSP js" type="lib"
               desc="Mozilla JavaScript Engine"
  -			done=100 stable=none unstable=1.6.20060722>
  +			done=100 stable=none unstable=1.6.20060724>
     <pkg_item name="str" longname="OSSP str" type="lib"
               desc="String Handling"
   			done=95 stable=none unstable=0.9.12>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/js/index.wml
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/lib/js/index.wml	23 Jul 2006 12:57:17 -0000	1.1
  +++ ossp-web/pkg/lib/js/index.wml	24 Jul 2006 20:24:27 -0000	1.2
  @@ -59,7 +59,7 @@
   <pkg_status
       name="js" assign="rse"
   	genesis="Jul-2006"
  -    stable="1.6.20060722" stable_date="22-Jul-2006"
  +    stable="1.6.20060724" stable_date="24-Jul-2006"
       unstable="none"       unstable_date="none"
   	done=100>
   
  @@ -70,7 +70,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/js/
       directory=$(FTP_ROOT_DIR)/pkg/lib/js/
       files="js-*.tar.gz" 
  -	stable="js-1.6.20060722.tar.gz" unstable="none">
  +	stable="js-1.6.20060724.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jul 25 15:00:54 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id AF83E7534BC; Tue, 25 Jul 2006 15:00:53 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ ChangeLog THANKS shiela.pl
Message-Id: <20060725130053.AF83E7534BC@mail.ossp.org>
Date: Tue, 25 Jul 2006 15:00:53 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Jul-2006 15:00:53
  Branch: HEAD                             Handle: 2006072514005200

  Modified files:
    ossp-pkg/shiela         ChangeLog THANKS shiela.pl

  Log:
    Fix "arbitrary shell command execution" security bug caused by
    missing shell command argument escaping for user supplied arguments.
    
    Submitted by: Brian Caswell <bmc@shmoo.com>, Sourcefire

  Summary:
    Revision    Changes     Path
    1.59        +4  -0      ossp-pkg/shiela/ChangeLog
    1.7         +1  -0      ossp-pkg/shiela/THANKS
    1.72        +47 -19     ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.58 -r1.59 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	20 Jul 2006 08:18:01 -0000	1.58
  +++ ossp-pkg/shiela/ChangeLog	25 Jul 2006 13:00:52 -0000	1.59
  @@ -11,6 +11,10 @@
   
     Changes between 1.1.6 and 1.1.7 (03-Oct-2005 to 20-Jul-2006):
   
  +   *) Fix "arbitrary shell command execution" security bug caused by
  +      missing shell command argument escaping for user supplied arguments.
  +      [Brian Caswell <bmc@shmoo.com>, Ralf S. Engelschall] (CVE-2006-3633)
  +
      *) Upgraded build environment to GNU shtool 2.0.6 and
         GNU autoconf 2.60
         [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/THANKS
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 THANKS
  --- ossp-pkg/shiela/THANKS	27 Jun 2004 07:44:03 -0000	1.6
  +++ ossp-pkg/shiela/THANKS	25 Jul 2006 13:00:52 -0000	1.7
  @@ -13,6 +13,7 @@
     stuff, bugfixes, hints etc. (in alphabetical order):
   
     o Denis Barbier               <barbier@imacs.polytechnique.fr>
  +  o Brian Caswell               <bmc@shmoo.com>
     o Markus Sander               <msander@de.cw.com>
     o Michael Schloh v. Bennewitz <michael.schloh@cw.com>
     o Christoph Schug             <chris@schug.net>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================================
  $ cvs diff -u -r1.71 -r1.72 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	20 Jul 2006 08:17:11 -0000	1.71
  +++ ossp-pkg/shiela/shiela.pl	25 Jul 2006 13:00:52 -0000	1.72
  @@ -207,7 +207,8 @@
       $RT->{mimeboundary} = $randtag;
   
       #   determine CVS version and capabilities
  -    my $v = `$RT->{cvs} --version 2>/dev/null`;
  +    my $cmd = sprintf("%s --version 2>/dev/null", &qsa($RT->{cvs}));
  +    my $v = `$cmd`;
       $RT->{cvsvers} = '?';
       $RT->{cvsvers} = $1 if ($v =~ m|Concurrent\s+Versions\s+System\s+\(CVS\)\s+([\d.p]+)\s+|s);
       $RT->{cvsrse} = 0;
  @@ -580,7 +581,7 @@
       STDERR->flush; # because of fork() behind open2()!
       $cvs->{rfd} = new IO::Handle;
       $cvs->{wfd} = new IO::Handle;
  -    $cvs->{pid} = IPC::Open2::open2($cvs->{rfd}, $cvs->{wfd}, "$program -f -Q -n server")
  +    $cvs->{pid} = IPC::Open2::open2($cvs->{rfd}, $cvs->{wfd}, sprintf("%s -f -Q -n server", &main::qsa($program)))
           or die "cannot spawn CVS server process `$program server'";
       print STDERR "cvs server: spawned (pid $cvs->{pid})\n" if ($trace);
       bless ($cvs, $class);
  @@ -739,8 +740,9 @@
       bless ($sm, $class);
       $sm->{trace} = $trace;
       $sm->{fd} = new IO::Handle;
  -    open($sm->{fd}, "|$RT->{sendmail} -oi -oem $toaddr");
  -    print "sendmail: spawned \"$RT->{sendmail} -oi -oem $toaddr\"\n" if ($sm->{trace});
  +    my $cmd = sprintf("%s -oi -oem %s", &main::qsa($RT->{sendmail}), &main::qsa($toaddr));
  +    open($sm->{fd}, "|$cmd");
  +    print "sendmail: spawned \"$cmd\"\n" if ($sm->{trace});
       $sm->{header} =
           "From: \"".$RT->{username}."\" <".$RT->{usermail}.">\n" .
           "To: $toaddr\n" .
  @@ -843,6 +845,32 @@
       }
   }
   
  +#   quote shell argument
  +sub qsa {
  +    my ($arg) = @_;
  +
  +    #   remove NUL characters at all because
  +    #   - sh:   removes silenty      (strange)
  +    #   - bash: removes silenty      (strange)
  +    #   - ksh:  complains and aborts (problem)
  +    #   - zsh:  keeps as-is          (ok)
  +    #   all(!) other characters in the range 0x00-0xff are safe to be
  +    #   passed through the shell when single quoted as explicit tests
  +    #   with all(!) characters under sh, bash, ksh and zsh showed.
  +    $arg =~ s/\x00//sg;
  +    
  +    #   single quote argument by
  +    #   1. escape "single quote" character by
  +    #      - temporarily ending single quotation
  +    #      - double quoting "single quote" character
  +    #      - restarting single quotation
  +    #   2. embedding remaining string into single quotes
  +    $arg =~ s/'/'"'"'/sg;
  +    $arg = "'$arg'";
  +    
  +    return $arg;
  +}   
  +
   ##  _________________________________________________________________
   ##
   ##  History database support.
  @@ -1248,7 +1276,7 @@
       #   annotate the files with the branch they stay on
       my $cvsstat = '';
       if (not $RT->{useserver}) {
  -        my $io = new IO::File "$RT->{cvs} -f -Q -n status ".join(' ', @cvsfiles)."|"
  +        my $io = new IO::File sprintf("%s -f -Q -n status %s|", &qsa($RT->{cvs}), join(' ', map { &qsa($_) } @cvsfiles))
               or die "unable to open CVS command pipe for reading";
           $cvsstat .= $_ while (<$io>);
           $io->close;
  @@ -1493,7 +1521,7 @@
                       print STDERR "cvs import: Ignoring this operation - don't expect log messages!\n";
                       exit(0);
                   }
  -                my $io = new IO::File "$RT->{cvs} -f -Q -n log -r$It '$Is'|"
  +                my $io = new IO::File sprintf("%s -f -Q -n log -r%s %s|", &qsa($RT->{cvs}), &qsa($It), &qsa($Is))
                       or die "unable to open CVS command pipe for reading";
                   $rcslog = $_ while (<$io>);
                   $io->close;
  @@ -1615,7 +1643,7 @@
           if ($Io eq 'R' and $Iv eq 'NONE') {
               my $rcslog ='';
               if (not $RT->{useserver}) {
  -                my $io = new IO::File "$RT->{cvs} -f -Q -n log '$Is'|"
  +                my $io = new IO::File sprintf("%s -f -Q -n log %s|", &qsa($RT->{cvs}), &qsa($Is))
                       or die "unable to open CVS command pipe for reading";
                   $rcslog .= $_ while (<$io>);
                   $io->close;
  @@ -1638,7 +1666,7 @@
           my $rcslog = '';
           if ($Io eq 'A' or $Io eq 'M' or $Io eq 'R') {
               if (not $RT->{useserver}) {
  -                my $io = new IO::File "$RT->{cvs} -f -Q -n log -r$Iv '$Is'|"
  +                my $io = new IO::File sprintf("%s -f -Q -n log -r%s %s|", &qsa($RT->{cvs}), &qsa($Iv), &qsa($Is))
                       or die "unable to open CVS command pipe for reading";
                   $rcslog .= $_ while (<$io>);
                   $io->close;
  @@ -1709,7 +1737,7 @@
                   or die "unable to open temporary file $RT->{tmpfile}.all for writing";
               my $l = 0;
               if (not $RT->{useserver}) {
  -                my $cvs = new IO::File "$RT->{cvs} -f -Q -n update -p -r$Iv '$Is'|"
  +                my $cvs = new IO::File sprintf("%s -f -Q -n update -p -r%s %s|", &qsa($RT->{cvs}), &qsa($Iv), &qsa($Is))
                       or die "unable to open CVS command pipe for reading";
                   while (<$cvs>) {
                       $io->print($_);
  @@ -1749,9 +1777,9 @@
                       my $io = new IO::File ">$RT->{tmpfile}.null"
                           or die "unable to open temporary file $RT->{tmpfile}.null for writing";
                       $io->close;
  -                    system("$RT->{xdelta} delta $RT->{tmpfile}.null " .
  -                           "$RT->{tmpfile}.all $RT->{tmpfile}.xdelta >/dev/null 2>&1");
  -                    $io = new IO::File "$RT->{uuencode} $RT->{tmpfile}.xdelta $Is.xdelta |"
  +                    system(sprintf("%s delta %s.null %s.all %s.xdelta >/dev/null 2>&1",
  +                           &qsa($RT->{xdelta}), &qsa($RT->{tmpfile}), &qsa($RT->{tmpfile}), &qsa($RT->{tmpfile})));
  +                    $io = new IO::File sprintf("%s %s.xdelta %s.xdelta|", &qsa($RT->{uuencode}), &qsa($RT->{tmpfile}), &qsa($Is))
                           or die "unable to open uuencode command pipe for reading";
                       $cvsdiff .= $_ while (<$io>);
                       $io->close;
  @@ -1771,7 +1799,7 @@
                           ("=" x 76) . "\n" .
                           "\$ cvs diff -u -r0 -r$Iv $Is\n";
                       my $diff = '';
  -                    my $io = new IO::File "$RT->{diff} -u /dev/null $RT->{tmpfile}.all|"
  +                    my $io = new IO::File sprintf("%s -u /dev/null %s.all|", &qsa($RT->{diff}), &qsa($RT->{tmpfile}))
                           or die "unable to open CVS command pipe for reading";
                       $diff .= $_ while (<$io>);
                       $io->close;
  @@ -1800,7 +1828,7 @@
                       my $io = new IO::File ">$RT->{tmpfile}.old"
                           or die "unable to open temporary file $RT->{tmpfile}.old for writing";
                       if (not $RT->{useserver}) {
  -                        my $cvs = new IO::File "$RT->{cvs} -f -Q -n update -p -r$IV '$Is'|"
  +                        my $cvs = new IO::File sprintf("%s -f -Q -n update -p -r%s %s|", &qsa($RT->{cvs}), &qsa($IV), &qsa($Is))
                               or die "unable to open CVS command pipe for reading";
                           $io->print($_) while (<$cvs>);
                           $cvs->close;
  @@ -1821,7 +1849,7 @@
                       $io = new IO::File ">$RT->{tmpfile}.new"
                           or die "unable to open temporary file $RT->{tmpfile}.new for writing";
                       if (not $RT->{useserver}) {
  -                        my $cvs = new IO::File "$RT->{cvs} -f -Q -n update -p -r$Iv '$Is'|"
  +                        my $cvs = new IO::File sprintf("%s -f -Q -n update -p -r%s %s|", &qsa($RT->{cvs}), &qsa($Iv), &qsa($Is))
                               or die "unable to open CVS command pipe for reading";
                           $io->print($_) while (<$cvs>);
                           $cvs->close;
  @@ -1848,9 +1876,9 @@
                           "Index: $cvsdir/$Is\n" .
                           ("=" x 76) . "\n";
                       unlink("$RT->{tmpfile}.xdelta");
  -                    system("$RT->{xdelta} delta $RT->{tmpfile}.old " .
  -                           "$RT->{tmpfile}.new $RT->{tmpfile}.xdelta >/dev/null 2>&1");
  -                    $io = new IO::File "$RT->{uuencode} $RT->{tmpfile}.xdelta $Is.xdelta |"
  +                    system(sprintf("%s delta %s.old %s.new %s.xdelta >/dev/null 2>&1",
  +                        &qsa($RT->{xdelta}), &qsa($RT->{tmpfile}), &qsa($RT->{tmpfile})));
  +                    $io = new IO::File sprintf("%s %s.xdelta %s.xdelta|", &qsa($RT->{uuencode}), &qsa($RT->{tmpfile}), &qsa($Is))
                           or die "unable to open uuencode command pipe for reading";
                       $cvsdiff .= $_ while (<$io>);
                       $io->close;
  @@ -1867,7 +1895,7 @@
                   #   generate textual change patch script
                   my $d = '';
                   if (not $RT->{useserver}) {
  -                    my $io = new IO::File "$RT->{cvs} -f -Q -n diff -u -r$IV -r$Iv '$Is'|"
  +                    my $io = new IO::File sprintf("%s -f -Q -n diff -u -r%s -r%s %s|", &qsa($RT->{cvs}), &qsa($IV), &qsa($Iv), &qsa($Is))
                           or die "unable to open CVS command pipe for reading";
                       $d .= $_ while (<$io>);
                       $io->close;
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jul 25 15:02:13 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 00FFE7534A7; Tue, 25 Jul 2006 15:02:13 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ ChangeLog VERSION
Message-Id: <20060725130213.00FFE7534A7@mail.ossp.org>
Date: Tue, 25 Jul 2006 15:02:13 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Jul-2006 15:02:12
  Branch: HEAD                             Handle: 2006072514021200

  Modified files:
    ossp-pkg/shiela         ChangeLog VERSION

  Log:
    adjust version for release

  Summary:
    Revision    Changes     Path
    1.60        +1  -1      ossp-pkg/shiela/ChangeLog
    1.20        +1  -1      ossp-pkg/shiela/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.59 -r1.60 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	25 Jul 2006 13:00:52 -0000	1.59
  +++ ossp-pkg/shiela/ChangeLog	25 Jul 2006 13:02:12 -0000	1.60
  @@ -9,7 +9,7 @@
   
     ChangeLog
   
  -  Changes between 1.1.6 and 1.1.7 (03-Oct-2005 to 20-Jul-2006):
  +  Changes between 1.1.6 and 1.1.7 (03-Oct-2005 to 25-Jul-2006):
   
      *) Fix "arbitrary shell command execution" security bug caused by
         missing shell command argument escaping for user supplied arguments.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/VERSION
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 VERSION
  --- ossp-pkg/shiela/VERSION	20 Jul 2006 08:17:10 -0000	1.19
  +++ ossp-pkg/shiela/VERSION	25 Jul 2006 13:02:12 -0000	1.20
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP shiela (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP shiela, Version 1.1.7 (20-Jul-2006)
  +  This is OSSP shiela, Version 1.1.7 (25-Jul-2006)
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jul 25 15:05:15 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id E1CD37534BC; Tue, 25 Jul 2006 15:05:14 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/tool/ index.wml ossp-w...
Message-Id: <20060725130514.E1CD37534BC@mail.ossp.org>
Date: Tue, 25 Jul 2006 15:05:14 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   25-Jul-2006 15:05:14
  Branch: HEAD                             Handle: 2006072514051400

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/shiela
                            index.wml

  Log:
    release OSSP shiela 1.1.7

  Summary:
    Revision    Changes     Path
    1.154       +2  -0      ossp-web/new/news.txt
    1.57        +1  -1      ossp-web/pkg/tool/index.wml
    1.17        +2  -2      ossp-web/pkg/tool/shiela/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.153 -r1.154 news.txt
  --- ossp-web/new/news.txt	24 Jul 2006 20:24:26 -0000	1.153
  +++ ossp-web/new/news.txt	25 Jul 2006 13:05:14 -0000	1.154
  @@ -1,3 +1,5 @@
  +25-Jul-2006: Released T<OSSP shiela> 1.1.7
  +24-Jul-2006: Released L<OSSP js> 1.6.20060724
   24-Jul-2006: Released L<OSSP js> 1.6.20060724
   22-Jul-2006: Released L<OSSP js> 1.6.20060722
   08-Jun-2006: Released L<GNU pth> 2.0.7
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.56 -r1.57 index.wml
  --- ossp-web/pkg/tool/index.wml	19 Apr 2006 16:40:44 -0000	1.56
  +++ ossp-web/pkg/tool/index.wml	25 Jul 2006 13:05:14 -0000	1.57
  @@ -20,7 +20,7 @@
               done=100 stable="1.4.1" unstable=none>
     <pkg_item name="shiela" longname="OSSP shiela" type="tool"
               desc="CVS Access Control and Logging"
  -	        done=100 stable="1.1.5" unstable="none">
  +	        done=100 stable="1.1.7" unstable="none">
     <pkg_item name="svs" longname="OSSP svs" type="tool"
               desc="Stupid/Silly/Simple Versioning System"
   	        done=100 stable="1.0.5" unstable="none">
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/shiela/index.wml
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 index.wml
  --- ossp-web/pkg/tool/shiela/index.wml	12 Jan 2005 20:52:28 -0000	1.16
  +++ ossp-web/pkg/tool/shiela/index.wml	25 Jul 2006 13:05:14 -0000	1.17
  @@ -25,7 +25,7 @@
   <h2>Status</h2>
   
   <pkg_status
  -    stable="1.1.5" stable_date="12-Jan-2005"
  +    stable="1.1.7" stable_date="25-Jul-2006"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -36,7 +36,7 @@
       url=$(FTP_ROOT_URL)/pkg/tool/shiela/
       directory=$(FTP_ROOT_DIR)/pkg/tool/shiela/
       files="shiela-*.tar.gz" 
  -	stable="shiela-1.1.5.tar.gz" unstable="none">
  +	stable="shiela-1.1.7.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jul 25 17:25:22 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id CA5C0753494; Tue, 25 Jul 2006 17:25:21 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ ChangeLog
Message-Id: <20060725152521.CA5C0753494@mail.ossp.org>
Date: Tue, 25 Jul 2006 17:25:21 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Jul-2006 17:25:21
  Branch: HEAD                             Handle: 2006072516252100

  Modified files:
    ossp-pkg/shiela         ChangeLog

  Log:
    test commit after OSSP shiela upgrade on server side

  Summary:
    Revision    Changes     Path
    1.61        +2  -0      ossp-pkg/shiela/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.60 -r1.61 ChangeLog
  --- ossp-pkg/shiela/ChangeLog	25 Jul 2006 13:02:12 -0000	1.60
  +++ ossp-pkg/shiela/ChangeLog	25 Jul 2006 15:25:21 -0000	1.61
  @@ -9,6 +9,8 @@
   
     ChangeLog
   
  +  Changes between 1.1.7 and 1.1.8 (25-Jul-2006 to xx-xxx-200x):
  +
     Changes between 1.1.6 and 1.1.7 (03-Oct-2005 to 25-Jul-2006):
   
      *) Fix "arbitrary shell command execution" security bug caused by
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jul 26 09:16:00 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 244DF7534D3; Wed, 26 Jul 2006 09:16:00 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ ChangeLog ossp-pkg/js/src/ jsfile.c
Message-Id: <20060726071600.244DF7534D3@mail.ossp.org>
Date: Wed, 26 Jul 2006 09:16:00 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   26-Jul-2006 09:16:00
  Branch: HEAD                             Handle: 2006072608155900

  Modified files:
    ossp-pkg/js             ChangeLog
    ossp-pkg/js/src         jsfile.c

  Log:
    Apply a few more upstream fixes to jsfile.c.

  Summary:
    Revision    Changes     Path
    1.10        +5  -0      ossp-pkg/js/ChangeLog
    1.7         +27 -6      ossp-pkg/js/src/jsfile.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 ChangeLog
  --- ossp-pkg/js/ChangeLog	24 Jul 2006 20:12:14 -0000	1.9
  +++ ossp-pkg/js/ChangeLog	26 Jul 2006 07:15:59 -0000	1.10
  @@ -11,6 +11,11 @@
   
     This is a list of all changes to OSSP js.
   
  +  Changes between 1.6.20060724 and 1.6.20060726 (2006-07-24 to 2006-07-26)
  +
  +   o Apply a few more upstream fixes to jsfile.c.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
     Changes between 1.6.20060722 and 1.6.20060724 (2006-07-22 to 2006-07-24)
   
      o Apply multiple code cleanups and bugfixes.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsfile.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 jsfile.c
  --- ossp-pkg/js/src/jsfile.c	24 Jul 2006 19:53:01 -0000	1.6
  +++ ossp-pkg/js/src/jsfile.c	26 Jul 2006 07:15:59 -0000	1.7
  @@ -807,7 +807,11 @@
   
   /* Buffered version of PR_Read. Used by js_FileRead */
   static int32
  +#ifdef OSSP
  +js_BufferedRead(JSFile * f, unsigned char *buf, int32 len)
  +#else
   js_BufferedRead(JSFile * f, char *buf, int32 len)
  +#endif
   {
       int32 count = 0;
   
  @@ -901,7 +905,11 @@
           break;
   
         case UCS2:
  +#ifdef OSSP
  +        count = js_BufferedRead(file, (unsigned char*)buf, len*2) >> 1;
  +#else
           count = js_BufferedRead(file, (char*)buf, len*2) >> 1;
  +#endif
           if (count == -1)
               return 0;
   
  @@ -2259,8 +2267,15 @@
   file_toString(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval*rval)
   {
       JSFile *file = JS_GetInstancePrivate(cx, obj, &file_class, NULL);
  +#ifdef OSSP
  +    JSString *str;
   
  +    if ((str = JS_NewStringCopyZ(cx, file->path)) == NULL)
  +        return JS_FALSE;
  +    *rval = STRING_TO_JSVAL(str);
  +#else
       *rval = STRING_TO_JSVAL(JS_NewStringCopyZ(cx, file->path));
  +#endif
       return JS_TRUE;
   }
   
  @@ -2270,6 +2285,10 @@
       JSFile *file = JS_GetInstancePrivate(cx, obj, &file_class, NULL);
       char url[MAX_PATH_LENGTH];
       jschar *urlChars;
  +#ifdef OSSP
  +    size_t len;
  +    JSString *str;
  +#endif
   
   	JSFILE_CHECK_NATIVE("toURL");
   
  @@ -2277,12 +2296,14 @@
       /* TODO: js_escape in jsstr.h may go away at some point */
   
   #ifdef OSSP /* BUGFIX */
  -{
  -    size_t len = strlen(url);
  -    urlChars = js_InflateString(cx, url, &len);
  -    if (urlChars == NULL) return JS_FALSE;
  -    *rval = STRING_TO_JSVAL(js_NewString(cx, urlChars, len, 0));
  -}
  +    len = strlen(url);
  +    if ((urlChars = js_InflateString(cx, url, &len)) == NULL)
  +        return JS_FALSE;
  +    if ((str = js_NewString(cx, urlChars, len, 0)) == NULL) {
  +        JS_free(cx, urlChars);
  +        return JS_FALSE;
  +    }
  +    *rval = STRING_TO_JSVAL(str);
   #else
       urlChars = js_InflateString(cx, url, strlen(url));
       if (urlChars == NULL) return JS_FALSE;
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul 28 20:04:17 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B23CF752861; Fri, 28 Jul 2006 20:04:16 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid_mac.h
Message-Id: <20060728180416.B23CF752861@mail.ossp.org>
Date: Fri, 28 Jul 2006 20:04:16 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Jul-2006 20:04:16
  Branch: HEAD                             Handle: 2006072819041500

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid_mac.h

  Log:
    Cleanup internal uuid_mac.h header.

  Summary:
    Revision    Changes     Path
    1.122       +3  -0      ossp-pkg/uuid/ChangeLog
    1.5         +2  -2      ossp-pkg/uuid/uuid_mac.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.121 -r1.122 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	20 Jul 2006 17:46:55 -0000	1.121
  +++ ossp-pkg/uuid/ChangeLog	28 Jul 2006 18:04:15 -0000	1.122
  @@ -12,6 +12,9 @@
     For a more brief summary please have a look at the NEWS file.
   
     Changes between 1.4.2 and 1.5.0 (13-Mar-2006 to XX-May-2006)
  +
  +   o Cleanup internal uuid_mac.h header.
  +     [Ralf S. Engelschall]
      
      o Numerous fixed to the error handling in the PostgreSQL bindings.
        [Neil Conway <neilc@samurai.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_mac.h
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 uuid_mac.h
  --- ossp-pkg/uuid/uuid_mac.h	13 Jan 2006 06:44:31 -0000	1.4
  +++ ossp-pkg/uuid/uuid_mac.h	28 Jul 2006 18:04:15 -0000	1.5
  @@ -43,12 +43,12 @@
   #define __MAC_CONCAT(x) x
   #define MAC_CONCAT(x,y) __MAC_CONCAT(x)y
   #endif
  -#define mac_address MAC_CONCAT(MAC_PREFIX,mac_create)
  +#define mac_address MAC_CONCAT(MAC_PREFIX,mac_address)
   #endif
   
   #define MAC_LEN 6
   
  -extern int mac_address(unsigned char *data_ptr, size_t data_len);
  +extern int mac_address(unsigned char *_data_ptr, size_t _data_len);
   
   #endif /* __UUID_MAC_H__ */
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul 28 20:18:40 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 3CCE77528A2; Fri, 28 Jul 2006 20:18:40 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid_md5.c
Message-Id: <20060728181840.3CCE77528A2@mail.ossp.org>
Date: Fri, 28 Jul 2006 20:18:40 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Jul-2006 20:18:40
  Branch: HEAD                             Handle: 2006072819183900

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid_md5.c

  Log:
    Cleanup source code according to complains by SPLINT.

  Summary:
    Revision    Changes     Path
    1.123       +3  -0      ossp-pkg/uuid/ChangeLog
    1.13        +13 -11     ossp-pkg/uuid/uuid_md5.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.122 -r1.123 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	28 Jul 2006 18:04:15 -0000	1.122
  +++ ossp-pkg/uuid/ChangeLog	28 Jul 2006 18:18:39 -0000	1.123
  @@ -13,6 +13,9 @@
   
     Changes between 1.4.2 and 1.5.0 (13-Mar-2006 to XX-May-2006)
   
  +   o Cleanup source code according to complains by SPLINT.
  +     [Ralf S. Engelschall]
  +
      o Cleanup internal uuid_mac.h header.
        [Ralf S. Engelschall]
      
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_md5.c
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 uuid_md5.c
  --- ossp-pkg/uuid/uuid_md5.c	13 Jan 2006 06:44:31 -0000	1.12
  +++ ossp-pkg/uuid/uuid_md5.c	28 Jul 2006 18:18:39 -0000	1.13
  @@ -100,8 +100,8 @@
   /* prototypes for internal functions */
   static void MD5Init      (MD5_CTX *_ctx);
   static void MD5Update    (MD5_CTX *_ctx, unsigned char *, unsigned int);
  -static void MD5Final     (unsigned char [16], MD5_CTX *);
  -static void MD5Transform (UINT4 [4], unsigned char [64]);
  +static void MD5Final     (unsigned char [], MD5_CTX *);
  +static void MD5Transform (UINT4 [], unsigned char []);
   static void Encode       (unsigned char *, UINT4 *, unsigned int);
   static void Decode       (UINT4 *, unsigned char *, unsigned int);
   
  @@ -175,11 +175,11 @@
           context->count[1]++;
       context->count[1] += ((UINT4)inputLen >> 29);
   
  -    partLen = 64 - idx;
  +    partLen = (unsigned int)64 - idx;
   
       /* Transform as many times as possible.  */
       if (inputLen >= partLen) {
  -        memcpy((POINTER)&context->buffer[idx], (POINTER)input, partLen);
  +        memcpy((POINTER)&context->buffer[idx], (POINTER)input, (size_t)partLen);
           MD5Transform(context->state, context->buffer);
           for (i = partLen; i + 63 < inputLen; i += 64)
               MD5Transform(context->state, &input[i]);
  @@ -189,13 +189,13 @@
           i = 0;
   
       /* Buffer remaining input */
  -    memcpy((POINTER)&context->buffer[idx], (POINTER)&input[i], inputLen-i);
  +    memcpy((POINTER)&context->buffer[idx], (POINTER)&input[i], (size_t)(inputLen - i));
   }
   
   /* MD5 finalization. Ends an MD5 message-digest operation, writing the
      the message digest and zeroizing the context. */
   static void MD5Final(
  -    unsigned char digest[16],                        /* message digest */
  +    unsigned char digest[],                                 /* message digest */
       MD5_CTX *context)                                       /* context */
   {
       unsigned char bits[8];
  @@ -206,7 +206,7 @@
   
       /* Pad out to 56 mod 64. */
       idx = (unsigned int)((context->count[0] >> 3) & 0x3f);
  -    padLen = (idx < 56) ? (56 - idx) : (120 - idx);
  +    padLen = (idx < 56) ? ((unsigned int)56 - idx) : ((unsigned int)120 - idx);
       MD5Update(context, PADDING, padLen);
   
       /* Append length (before padding) */
  @@ -216,13 +216,13 @@
       Encode(digest, context->state, 16);
   
       /* Zeroize sensitive information. */
  -    memset((POINTER)context, '\0', sizeof (*context));
  +    memset((POINTER)context, 0, sizeof(*context));
   }
   
   /* MD5 basic transformation. Transforms state based on block. */
   static void MD5Transform(
  -    UINT4 state[4],
  -    unsigned char block[64])
  +    UINT4 state[],
  +    unsigned char block[])
   {
       UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16];
   
  @@ -322,7 +322,7 @@
       state[3] += d;
   
       /* Zeroize sensitive information. */
  -    memset((POINTER)x, '\0', sizeof (x));
  +    memset((POINTER)x, 0, sizeof(x));
   }
   
   /* Encodes input (UINT4) into output (unsigned char).
  @@ -340,6 +340,7 @@
           output[j+2] = (unsigned char)((input[i] >> 16) & 0xff);
           output[j+3] = (unsigned char)((input[i] >> 24) & 0xff);
       }
  +    return;
   }
   
   /* Decodes input (unsigned char) into output (UINT4).
  @@ -356,6 +357,7 @@
                       | (((UINT4)input[j+1]) << 8 )
                       | (((UINT4)input[j+2]) << 16)
                       | (((UINT4)input[j+3]) << 24);
  +    return;
   }
   
   /*
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul 28 20:22:43 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 8BAC7752894; Fri, 28 Jul 2006 20:22:43 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid.c
Message-Id: <20060728182243.8BAC7752894@mail.ossp.org>
Date: Fri, 28 Jul 2006 20:22:43 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Jul-2006 20:22:43
  Branch: HEAD                             Handle: 2006072819224300

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid.c

  Log:
    Fixed potential memory leak in uuid_create() as spotted by SPLINT.

  Summary:
    Revision    Changes     Path
    1.124       +3  -0      ossp-pkg/uuid/ChangeLog
    1.60        +17 -4      ossp-pkg/uuid/uuid.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.123 -r1.124 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	28 Jul 2006 18:18:39 -0000	1.123
  +++ ossp-pkg/uuid/ChangeLog	28 Jul 2006 18:22:43 -0000	1.124
  @@ -13,6 +13,9 @@
   
     Changes between 1.4.2 and 1.5.0 (13-Mar-2006 to XX-May-2006)
   
  +   o Fixed potential memory leak in uuid_create() as spotted by SPLINT.
  +     [Ralf S. Engelschall]
  +
      o Cleanup source code according to complains by SPLINT.
        [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.59 -r1.60 uuid.c
  --- ossp-pkg/uuid/uuid.c	11 May 2006 09:37:28 -0000	1.59
  +++ ossp-pkg/uuid/uuid.c	28 Jul 2006 18:22:43 -0000	1.60
  @@ -105,13 +105,26 @@
       if ((obj = (uuid_t *)malloc(sizeof(uuid_t))) == NULL)
           return UUID_RC_MEM;
   
  -    /* create PRNG, MD5 and SHA1 sub-objects */
  -    if (prng_create(&obj->prng) != PRNG_RC_OK)
  +    /* create PRNG sub-object */
  +    if (prng_create(&obj->prng) != PRNG_RC_OK) {
  +        free(obj);
           return UUID_RC_INT;
  -    if (md5_create(&obj->md5) != MD5_RC_OK)
  +    }
  +
  +    /* create MD5 sub-object */
  +    if (md5_create(&obj->md5) != MD5_RC_OK) {
  +        prng_destroy(obj->prng);
  +        free(obj);
           return UUID_RC_INT;
  -    if (sha1_create(&obj->sha1) != SHA1_RC_OK)
  +    }
  +
  +    /* create SHA1 sub-object */
  +    if (sha1_create(&obj->sha1) != SHA1_RC_OK) {
  +        md5_destroy(obj->md5);
  +        prng_destroy(obj->prng);
  +        free(obj);
           return UUID_RC_INT;
  +    }
   
       /* set UUID object initially to "Nil UUID" */
       uuid_load(obj, "nil");
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul 28 21:04:33 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 568BD7528A3; Fri, 28 Jul 2006 21:04:33 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.c uuid_dce.c uuid_mac.c
Message-Id: <20060728190433.568BD7528A3@mail.ossp.org>
Date: Fri, 28 Jul 2006 21:04:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Jul-2006 21:04:33
  Branch: HEAD                             Handle: 2006072820043200

  Modified files:
    ossp-pkg/uuid           uuid.c uuid_dce.c uuid_mac.c

  Log:
    Even more pendantic code cleanups according to complains by SPLINT

  Summary:
    Revision    Changes     Path
    1.61        +103 -67    ossp-pkg/uuid/uuid.c
    1.5         +1  -1      ossp-pkg/uuid/uuid_dce.c
    1.10        +1  -1      ossp-pkg/uuid/uuid_mac.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.60 -r1.61 uuid.c
  --- ossp-pkg/uuid/uuid.c	28 Jul 2006 18:22:43 -0000	1.60
  +++ ossp-pkg/uuid/uuid.c	28 Jul 2006 19:04:32 -0000	1.61
  @@ -105,33 +105,35 @@
       if ((obj = (uuid_t *)malloc(sizeof(uuid_t))) == NULL)
           return UUID_RC_MEM;
   
  -    /* create PRNG sub-object */
  +    /* create PRNG, MD5 and SHA1 sub-objects */
       if (prng_create(&obj->prng) != PRNG_RC_OK) {
           free(obj);
           return UUID_RC_INT;
       }
  -
  -    /* create MD5 sub-object */
       if (md5_create(&obj->md5) != MD5_RC_OK) {
  -        prng_destroy(obj->prng);
  +        (void)prng_destroy(obj->prng);
           free(obj);
           return UUID_RC_INT;
       }
  -
  -    /* create SHA1 sub-object */
       if (sha1_create(&obj->sha1) != SHA1_RC_OK) {
  -        md5_destroy(obj->md5);
  -        prng_destroy(obj->prng);
  +        (void)md5_destroy(obj->md5);
  +        (void)prng_destroy(obj->prng);
           free(obj);
           return UUID_RC_INT;
       }
   
       /* set UUID object initially to "Nil UUID" */
  -    uuid_load(obj, "nil");
  +    if (uuid_load(obj, "nil") != UUID_RC_OK) {
  +        (void)sha1_destroy(obj->sha1);
  +        (void)md5_destroy(obj->md5);
  +        (void)prng_destroy(obj->prng);
  +        free(obj);
  +        return UUID_RC_INT;
  +    }
   
       /* resolve MAC address for insertion into node field of UUIDs */
       if (!mac_address((unsigned char *)(obj->mac), sizeof(obj->mac))) {
  -        memset(obj->mac, '\0', sizeof(obj->mac));
  +        memset(obj->mac, 0, sizeof(obj->mac));
           obj->mac[0] = BM_OCTET(1,0,0,0,0,0,0,0);
       }
   
  @@ -154,9 +156,9 @@
           return UUID_RC_ARG;
   
       /* destroy PRNG, MD5 and SHA-1 sub-objects */
  -    prng_destroy(uuid->prng);
  -    md5_destroy(uuid->md5);
  -    sha1_destroy(uuid->sha1);
  +    (void)prng_destroy(uuid->prng);
  +    (void)md5_destroy(uuid->md5);
  +    (void)sha1_destroy(uuid->sha1);
   
       /* free UUID object */
       free(uuid);
  @@ -181,12 +183,21 @@
       memcpy(obj, uuid, sizeof(uuid_t));
   
       /* re-initialize with new PRNG, MD5 and SHA1 sub-objects */
  -    if (prng_create(&obj->prng) != PRNG_RC_OK)
  +    if (prng_create(&obj->prng) != PRNG_RC_OK) {
  +        free(obj);
           return UUID_RC_INT;
  -    if (md5_create(&obj->md5) != MD5_RC_OK)
  +    }
  +    if (md5_create(&obj->md5) != MD5_RC_OK) {
  +        (void)prng_destroy(obj->prng);
  +        free(obj);
           return UUID_RC_INT;
  -    if (sha1_create(&obj->sha1) != SHA1_RC_OK)
  +    }
  +    if (sha1_create(&obj->sha1) != SHA1_RC_OK) {
  +        (void)md5_destroy(obj->md5);
  +        (void)prng_destroy(obj->prng);
  +        free(obj);
           return UUID_RC_INT;
  +    }
   
       /* store result object */
       *clone = obj;
  @@ -207,7 +218,7 @@
       /* a "Nil UUID" is defined as all octets zero, so check for this case */
       *result = UUID_TRUE;
       for (i = 0, ucp = (unsigned char *)&(uuid->obj); i < UUID_LEN_BIN; i++) {
  -        if (*ucp++ != '\0') {
  +        if (*ucp++ != (unsigned char)'\0') {
               *result = UUID_FALSE;
               break;
           }
  @@ -286,20 +297,20 @@
       in = (const uuid_uint8_t *)data_ptr;
   
       /* unpack "time_low" field */
  -    tmp32 = *in++;
  -    tmp32 = (tmp32 << 8) | *in++;
  -    tmp32 = (tmp32 << 8) | *in++;
  -    tmp32 = (tmp32 << 8) | *in++;
  +    tmp32 = (uuid_uint32_t)(*in++);
  +    tmp32 = (tmp32 << 8) | (uuid_uint32_t)(*in++);
  +    tmp32 = (tmp32 << 8) | (uuid_uint32_t)(*in++);
  +    tmp32 = (tmp32 << 8) | (uuid_uint32_t)(*in++);
       uuid->obj.time_low = tmp32;
   
       /* unpack "time_mid" field */
  -    tmp16 = *in++;
  -    tmp16 = (uuid_uint16_t)(tmp16 << 8) | *in++;
  +    tmp16 = (uuid_uint16_t)(*in++);
  +    tmp16 = (uuid_uint16_t)(tmp16 << 8) | (uuid_uint16_t)(*in++);
       uuid->obj.time_mid = tmp16;
   
       /* unpack "time_hi_and_version" field */
  -    tmp16 = *in++;
  -    tmp16 = (uuid_uint16_t)(tmp16 << 8) | *in++;
  +    tmp16 = (uuid_uint16_t)*in++;
  +    tmp16 = (uuid_uint16_t)(tmp16 << 8) | (uuid_uint16_t)(*in++);
       uuid->obj.time_hi_and_version = tmp16;
   
       /* unpack "clock_seq_hi_and_reserved" field */
  @@ -309,7 +320,7 @@
       uuid->obj.clock_seq_low = *in++;
   
       /* unpack "node" field */
  -    for (i = 0; i < sizeof(uuid->obj.node); i++)
  +    for (i = 0; i < (unsigned int)sizeof(uuid->obj.node); i++)
           uuid->obj.node[i] = *in++;
   
       return UUID_RC_OK;
  @@ -370,7 +381,7 @@
       out[9] = uuid->obj.clock_seq_low;
   
       /* pack "node" field */
  -    for (i = 0; i < sizeof(uuid->obj.node); i++)
  +    for (i = 0; i < (unsigned int)sizeof(uuid->obj.node); i++)
           out[10+i] = uuid->obj.node[i];
   
       return UUID_RC_OK;
  @@ -436,7 +447,7 @@
       /* parse hex values of "node" part */
       cp = str+24;
       hexbuf[2] = '\0';
  -    for (i = 0; i < sizeof(uuid->obj.node); i++) {
  +    for (i = 0; i < (unsigned int)sizeof(uuid->obj.node); i++) {
           hexbuf[0] = *cp++;
           hexbuf[1] = *cp++;
           uuid->obj.node[i] = (uuid_uint8_t)strtoul(hexbuf, NULL, 16);
  @@ -451,6 +462,7 @@
       const char *str;
       uuid_uint8_t tmp_bin[UUID_LEN_BIN];
       ui128_t ui, ui2;
  +    uuid_rc_t rc;
       int i;
   
       /* sanity check argument(s) */
  @@ -459,7 +471,7 @@
   
       /* check for correct UUID single integer value syntax */
       str = (const char *)data_ptr;
  -    for (i = 0; i < data_len; i++)
  +    for (i = 0; i < (int)data_len; i++)
           if (!isdigit((int)str[i]))
               return UUID_RC_ARG;
   
  @@ -473,7 +485,8 @@
       }
   
       /* import into internal UUID representation */
  -    uuid_import(uuid, UUID_FMT_BIN, (void *)&tmp_bin, UUID_LEN_BIN);
  +    if ((rc = uuid_import(uuid, UUID_FMT_BIN, (void *)&tmp_bin, UUID_LEN_BIN)) != UUID_RC_OK)
  +        return rc;
   
       return UUID_RC_OK;
   }
  @@ -563,8 +576,11 @@
       /* export into UUID binary representation */
       tmp_ptr = (void *)&tmp_bin;
       tmp_len = sizeof(tmp_bin);
  -    if ((rc = uuid_export(uuid, UUID_FMT_BIN, &tmp_ptr, &tmp_len)) != UUID_RC_OK)
  +    if ((rc = uuid_export(uuid, UUID_FMT_BIN, &tmp_ptr, &tmp_len)) != UUID_RC_OK) {
  +        if (*data_ptr == NULL)
  +            free(data_buf);
           return rc;
  +    }
   
       /* import from UUID binary representation */
       ui = ui128_zero();
  @@ -575,7 +591,7 @@
       }
   
       /* format into single integer value representation */
  -    ui128_i2s(ui, data_buf, UUID_LEN_SIV+1, 10);
  +    (void)ui128_i2s(ui, data_buf, UUID_LEN_SIV+1, 10);
   
       /* pass back new buffer if locally allocated */
       if (*data_ptr == NULL)
  @@ -589,10 +605,10 @@
       uuid_uint8_t num;
       const char *desc;
   } uuid_dectab_variant[] = {
  -    { BM_OCTET(0,0,0,0,0,0,0,0), "reserved (NCS backward compatible)" },
  -    { BM_OCTET(1,0,0,0,0,0,0,0), "DCE 1.1, ISO/IEC 11578:1996" },
  -    { BM_OCTET(1,1,0,0,0,0,0,0), "reserved (Microsoft GUID)" },
  -    { BM_OCTET(1,1,1,0,0,0,0,0), "reserved (future use)" }
  +    { (uuid_uint8_t)BM_OCTET(0,0,0,0,0,0,0,0), "reserved (NCS backward compatible)" },
  +    { (uuid_uint8_t)BM_OCTET(1,0,0,0,0,0,0,0), "DCE 1.1, ISO/IEC 11578:1996" },
  +    { (uuid_uint8_t)BM_OCTET(1,1,0,0,0,0,0,0), "reserved (Microsoft GUID)" },
  +    { (uuid_uint8_t)BM_OCTET(1,1,1,0,0,0,0,0), "reserved (future use)" }
   };
   static struct {
       int num;
  @@ -653,8 +669,8 @@
       tmp_len = sizeof(tmp_siv);
       if ((rc = uuid_export(uuid, UUID_FMT_SIV, &tmp_ptr, &tmp_len)) != UUID_RC_OK)
           return rc;
  -    str_rsprintf(out, "encode: STR:     %s\n", tmp_str);
  -    str_rsprintf(out, "        SIV:     %s\n", tmp_siv);
  +    (void)str_rsprintf(out, "encode: STR:     %s\n", tmp_str);
  +    (void)str_rsprintf(out, "        SIV:     %s\n", tmp_siv);
   
       /* decode UUID variant */
       tmp8 = uuid->obj.clock_seq_hi_and_reserved;
  @@ -663,8 +679,8 @@
       else {
           variant = "unknown";
           for (i = 7; i >= 0; i--) {
  -            if ((tmp8 & BM_BIT(i,1)) == 0) {
  -                tmp8 &= ~BM_MASK(i,0);
  +            if ((tmp8 & (uuid_uint8_t)BM_BIT(i,1)) == 0) {
  +                tmp8 &= ~(uuid_uint8_t)BM_MASK(i,0);
                   break;
               }
           }
  @@ -675,10 +691,10 @@
               }
           }
       }
  -    str_rsprintf(out, "decode: variant: %s\n", variant);
  +    (void)str_rsprintf(out, "decode: variant: %s\n", variant);
   
       /* decode UUID version */
  -    tmp16 = (BM_SHR(uuid->obj.time_hi_and_version, 12) & BM_MASK(3,0));
  +    tmp16 = (BM_SHR(uuid->obj.time_hi_and_version, 12) & (uuid_uint16_t)BM_MASK(3,0));
       if (isnil)
           version = "n.a.";
       else {
  @@ -709,16 +725,16 @@
           t = ui64_divn(t, 1000000, &t_usec);
           t_sec = (time_t)ui64_i2n(t);
           tm = gmtime(&t_sec);
  -        strftime(t_buf, sizeof(t_buf), "%Y-%m-%d %H:%M:%S", tm);
  -        str_rsprintf(out, "        content: time:  %s.%06d.%d UTC\n", t_buf, t_usec, t_nsec);
  +        (void)strftime(t_buf, sizeof(t_buf), "%Y-%m-%d %H:%M:%S", tm);
  +        (void)str_rsprintf(out, "        content: time:  %s.%06d.%d UTC\n", t_buf, t_usec, t_nsec);
   
           /* decode clock sequence */
           tmp32 = ((uuid->obj.clock_seq_hi_and_reserved & BM_MASK(5,0)) << 8)
                   + uuid->obj.clock_seq_low;
  -        str_rsprintf(out, "                 clock: %ld (usually random)\n", (long)tmp32);
  +        (void)str_rsprintf(out, "                 clock: %ld (usually random)\n", (long)tmp32);
   
           /* decode node MAC address */
  -        str_rsprintf(out, "                 node:  %02x:%02x:%02x:%02x:%02x:%02x (%s %s)\n",
  +        (void)str_rsprintf(out, "                 node:  %02x:%02x:%02x:%02x:%02x:%02x (%s %s)\n",
               (unsigned int)uuid->obj.node[0],
               (unsigned int)uuid->obj.node[1],
               (unsigned int)uuid->obj.node[2],
  @@ -753,7 +769,7 @@
           tmp_bin[8] &= BM_MASK(5,0);
   
           /* dump as colon-seperated hexadecimal byte-string */
  -        str_rsprintf(out,
  +        (void)str_rsprintf(out,
               "        content: %02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X\n"
               "                 (%s)\n",
               (unsigned int)tmp_bin[0],  (unsigned int)tmp_bin[1],  (unsigned int)tmp_bin[2],
  @@ -930,8 +946,10 @@
       if (   clck == 0
           || (   time_now.tv_sec < uuid->time_last.tv_sec
               || (   time_now.tv_sec == uuid->time_last.tv_sec
  -                && time_now.tv_usec < uuid->time_last.tv_usec)))
  -        prng_data(uuid->prng, (void *)&clck, sizeof(clck));
  +                && time_now.tv_usec < uuid->time_last.tv_usec))) {
  +        if (prng_data(uuid->prng, (void *)&clck, sizeof(clck)) != PRNG_RC_OK)
  +            return UUID_RC_INT;
  +    }
       else
           clck++;
       clck %= BM_POW2(14);
  @@ -975,20 +993,25 @@
   
   /* INTERNAL: pre-defined UUID values.
      (defined as network byte ordered octet stream) */
  +#define UUID_MAKE(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16) \
  +    { (uuid_uint8_t)(a1),  (uuid_uint8_t)(a2),  (uuid_uint8_t)(a3),  (uuid_uint8_t)(a4),  \
  +      (uuid_uint8_t)(a5),  (uuid_uint8_t)(a6),  (uuid_uint8_t)(a7),  (uuid_uint8_t)(a8),  \
  +      (uuid_uint8_t)(a9),  (uuid_uint8_t)(a10), (uuid_uint8_t)(a11), (uuid_uint8_t)(a12), \
  +      (uuid_uint8_t)(a13), (uuid_uint8_t)(a14), (uuid_uint8_t)(a15), (uuid_uint8_t)(a16) }
   static struct {
       char *name;
       uuid_uint8_t uuid[UUID_LEN_BIN];
   } uuid_value_table[] = {
       { "nil",     /* 00000000-0000-0000-0000-000000000000 ("Nil UUID") */
  -      { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 } },
  +      UUID_MAKE(0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00) },
       { "ns:DNS",  /* 6ba7b810-9dad-11d1-80b4-00c04fd430c8 (see RFC 4122) */
  -      { 0x6b,0xa7,0xb8,0x10,0x9d,0xad,0x11,0xd1,0x80,0xb4,0x00,0xc0,0x4f,0xd4,0x30,0xc8 } },
  +      UUID_MAKE(0x6b,0xa7,0xb8,0x10,0x9d,0xad,0x11,0xd1,0x80,0xb4,0x00,0xc0,0x4f,0xd4,0x30,0xc8) },
       { "ns:URL",  /* 6ba7b811-9dad-11d1-80b4-00c04fd430c8 (see RFC 4122) */
  -      { 0x6b,0xa7,0xb8,0x11,0x9d,0xad,0x11,0xd1,0x80,0xb4,0x00,0xc0,0x4f,0xd4,0x30,0xc8 } },
  +      UUID_MAKE(0x6b,0xa7,0xb8,0x11,0x9d,0xad,0x11,0xd1,0x80,0xb4,0x00,0xc0,0x4f,0xd4,0x30,0xc8) },
       { "ns:OID",  /* 6ba7b812-9dad-11d1-80b4-00c04fd430c8 (see RFC 4122) */
  -      { 0x6b,0xa7,0xb8,0x12,0x9d,0xad,0x11,0xd1,0x80,0xb4,0x00,0xc0,0x4f,0xd4,0x30,0xc8 } },
  +      UUID_MAKE(0x6b,0xa7,0xb8,0x12,0x9d,0xad,0x11,0xd1,0x80,0xb4,0x00,0xc0,0x4f,0xd4,0x30,0xc8) },
       { "ns:X500", /* 6ba7b814-9dad-11d1-80b4-00c04fd430c8 (see RFC 4122) */
  -      { 0x6b,0xa7,0xb8,0x14,0x9d,0xad,0x11,0xd1,0x80,0xb4,0x00,0xc0,0x4f,0xd4,0x30,0xc8 } }
  +      UUID_MAKE(0x6b,0xa7,0xb8,0x14,0x9d,0xad,0x11,0xd1,0x80,0xb4,0x00,0xc0,0x4f,0xd4,0x30,0xc8) }
   };
   
   /* load UUID object with pre-defined value */
  @@ -1004,7 +1027,7 @@
   
       /* search for UUID in table */
       uuid_octets = NULL;
  -    for (i = 0; i < sizeof(uuid_value_table)/sizeof(uuid_value_table[0]); i++) {
  +    for (i = 0; i < (unsigned int)sizeof(uuid_value_table)/sizeof(uuid_value_table[0]); i++) {
            if (strcmp(uuid_value_table[i].name, name) == 0) {
                uuid_octets = uuid_value_table[i].uuid;
                break;
  @@ -1028,6 +1051,7 @@
       uuid_uint8_t uuid_buf[UUID_LEN_BIN];
       void *uuid_ptr;
       size_t uuid_len;
  +    uuid_rc_t rc;
   
       /* determine namespace UUID and name string arguments */
       if ((uuid_ns = (uuid_t *)va_arg(ap, void *)) == NULL)
  @@ -1042,22 +1066,27 @@
       /* load the namespace UUID into MD5 context */
       uuid_ptr = (void *)&uuid_buf;
       uuid_len = sizeof(uuid_buf);
  -    uuid_export(uuid_ns, UUID_FMT_BIN, &uuid_ptr, &uuid_len);
  -    md5_update(uuid->md5, uuid_buf, uuid_len);
  +    if ((rc = uuid_export(uuid_ns, UUID_FMT_BIN, &uuid_ptr, &uuid_len)) != UUID_RC_OK)
  +        return rc;
  +    if (md5_update(uuid->md5, uuid_buf, uuid_len) != MD5_RC_OK)
  +        return UUID_RC_INT;
   
       /* load the argument name string into MD5 context */
  -    md5_update(uuid->md5, str, strlen(str));
  +    if (md5_update(uuid->md5, str, strlen(str)) != MD5_RC_OK)
  +        return UUID_RC_INT;
   
       /* store MD5 result into UUID
          (requires MD5_LEN_BIN space, UUID_LEN_BIN space is available,
          and both are equal in size, so we are safe!) */
       uuid_ptr = (void *)&(uuid->obj);
  -    md5_store(uuid->md5, &uuid_ptr, NULL);
  +    if (md5_store(uuid->md5, &uuid_ptr, NULL) != MD5_RC_OK)
  +        return UUID_RC_INT;
   
       /* fulfill requirement of standard and convert UUID data into
          local/host byte order (this uses fact that uuid_import_bin() is
          able to operate in-place!) */
  -    uuid_import(uuid, UUID_FMT_BIN, (void *)&(uuid->obj), UUID_LEN_BIN);
  +    if ((rc = uuid_import(uuid, UUID_FMT_BIN, (void *)&(uuid->obj), UUID_LEN_BIN)) != UUID_RC_OK)
  +        return rc;
   
       /* brand UUID with version and variant */
       uuid_brand(uuid, 3);
  @@ -1069,7 +1098,8 @@
   static uuid_rc_t uuid_make_v4(uuid_t *uuid, unsigned int mode, va_list ap)
   {
       /* fill UUID with random data */
  -    prng_data(uuid->prng, (void *)&(uuid->obj), sizeof(uuid->obj));
  +    if (prng_data(uuid->prng, (void *)&(uuid->obj), sizeof(uuid->obj)) != PRNG_RC_OK)
  +        return UUID_RC_INT;
   
       /* brand UUID with version and variant */
       uuid_brand(uuid, 4);
  @@ -1087,6 +1117,7 @@
       size_t uuid_len;
       uuid_uint8_t sha1_buf[SHA1_LEN_BIN];
       void *sha1_ptr;
  +    uuid_rc_t rc;
   
       /* determine namespace UUID and name string arguments */
       if ((uuid_ns = (uuid_t *)va_arg(ap, void *)) == NULL)
  @@ -1096,30 +1127,35 @@
   
       /* initialize SHA-1 context */
       if (sha1_init(uuid->sha1) != SHA1_RC_OK)
  -        return UUID_RC_MEM;
  +        return UUID_RC_INT;
   
       /* load the namespace UUID into SHA-1 context */
       uuid_ptr = (void *)&uuid_buf;
       uuid_len = sizeof(uuid_buf);
  -    uuid_export(uuid_ns, UUID_FMT_BIN, &uuid_ptr, &uuid_len);
  -    sha1_update(uuid->sha1, uuid_buf, uuid_len);
  +    if ((rc = uuid_export(uuid_ns, UUID_FMT_BIN, &uuid_ptr, &uuid_len)) != UUID_RC_OK)
  +        return rc;
  +    if (sha1_update(uuid->sha1, uuid_buf, uuid_len) != SHA1_RC_OK)
  +        return UUID_RC_INT;
   
       /* load the argument name string into SHA-1 context */
  -    sha1_update(uuid->sha1, str, strlen(str));
  +    if (sha1_update(uuid->sha1, str, strlen(str)) != SHA1_RC_OK)
  +        return UUID_RC_INT;
   
       /* store SHA-1 result into UUID
          (requires SHA1_LEN_BIN space, but UUID_LEN_BIN space is available
          only, so use a temporary buffer to store SHA-1 results and then
          use lower part only according to standard */
       sha1_ptr = (void *)sha1_buf;
  -    sha1_store(uuid->sha1, &sha1_ptr, NULL);
  +    if (sha1_store(uuid->sha1, &sha1_ptr, NULL) != SHA1_RC_OK)
  +        return UUID_RC_INT;
       uuid_ptr = (void *)&(uuid->obj);
       memcpy(uuid_ptr, sha1_ptr, UUID_LEN_BIN);
   
       /* fulfill requirement of standard and convert UUID data into
          local/host byte order (this uses fact that uuid_import_bin() is
          able to operate in-place!) */
  -    uuid_import(uuid, UUID_FMT_BIN, (void *)&(uuid->obj), UUID_LEN_BIN);
  +    if ((rc = uuid_import(uuid, UUID_FMT_BIN, (void *)&(uuid->obj), UUID_LEN_BIN)) != UUID_RC_OK)
  +        return rc;
   
       /* brand UUID with version and variant */
       uuid_brand(uuid, 5);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_dce.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 uuid_dce.c
  --- ossp-pkg/uuid/uuid_dce.c	13 Jan 2006 06:44:30 -0000	1.4
  +++ ossp-pkg/uuid/uuid_dce.c	28 Jul 2006 19:04:32 -0000	1.5
  @@ -95,7 +95,7 @@
   
       /* short-circuit implementation, because Nil UUID is trivial to
          create, so no need to use regular OSSP uuid API */
  -    memset(uuid_dce, '\0', UUID_LEN_BIN);
  +    memset(uuid_dce, 0, UUID_LEN_BIN);
   
       /* return successfully */
       if (status != NULL)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_mac.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 uuid_mac.c
  --- ossp-pkg/uuid/uuid_mac.c	13 Jan 2006 06:44:31 -0000	1.9
  +++ ossp-pkg/uuid/uuid_mac.c	28 Jul 2006 19:04:32 -0000	1.10
  @@ -158,7 +158,7 @@
               return FALSE;
           if ((s = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0)
               return FALSE;
  -        memset(&ar, '\0', sizeof(ar));
  +        memset(&ar, 0, sizeof(ar));
           sa = (struct sockaddr_in *)((void *)&(ar.arp_pa));
           sa->sin_family = AF_INET;
           memcpy(&(sa->sin_addr), *(he->h_addr_list), sizeof(struct in_addr));
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul 28 21:16:05 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id A450F752909; Fri, 28 Jul 2006 21:16:05 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid_md5.c uuid_prng.c uuid_sha1.c uuid_sha...
Message-Id: <20060728191605.A450F752909@mail.ossp.org>
Date: Fri, 28 Jul 2006 21:16:05 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Jul-2006 21:16:05
  Branch: HEAD                             Handle: 2006072820160302

  Modified files:
    ossp-pkg/uuid           uuid_md5.c uuid_prng.c uuid_sha1.c uuid_sha1.h

  Log:
    Even more pendantic code cleanups according to complains by SPLINT

  Summary:
    Revision    Changes     Path
    1.14        +1  -0      ossp-pkg/uuid/uuid_md5.c
    1.12        +7  -5      ossp-pkg/uuid/uuid_prng.c
    1.4         +29 -25     ossp-pkg/uuid/uuid_sha1.c
    1.3         +2  -1      ossp-pkg/uuid/uuid_sha1.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_md5.c
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 uuid_md5.c
  --- ossp-pkg/uuid/uuid_md5.c	28 Jul 2006 18:18:39 -0000	1.13
  +++ ossp-pkg/uuid/uuid_md5.c	28 Jul 2006 19:16:03 -0000	1.14
  @@ -155,6 +155,7 @@
       context->state[1] = 0xefcdab89;
       context->state[2] = 0x98badcfe;
       context->state[3] = 0x10325476;
  +    return;
   }
   
   /* MD5 block update operation. Continues an MD5 message-digest
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_prng.c
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 uuid_prng.c
  --- ossp-pkg/uuid/uuid_prng.c	13 Jan 2006 06:44:31 -0000	1.11
  +++ ossp-pkg/uuid/uuid_prng.c	28 Jul 2006 19:16:03 -0000	1.12
  @@ -48,7 +48,7 @@
       int fd = -1;
       struct timeval tv;
       pid_t pid;
  -    size_t i;
  +    unsigned int i;
   
       /* sanity check argument(s) */
       if (prng == NULL)
  @@ -68,8 +68,10 @@
       }
   
       /* initialize MD5 engine */
  -    if (md5_create(&((*prng)->md5)) != MD5_RC_OK)
  +    if (md5_create(&((*prng)->md5)) != MD5_RC_OK) {
  +        free(*prng);
           return PRNG_RC_INT;
  +    }
   
       /* initialize time resolution compensation counter */
       (*prng)->cnt = 0;
  @@ -115,7 +117,7 @@
       if (prng->dev != -1) {
           retries = 0;
           while (n > 0) {
  -            i = read(prng->dev, (void *)p, n);
  +            i = (int)read(prng->dev, (void *)p, n);
               if (i <= 0) {
                   if (retries++ > 16)
                       break;
  @@ -159,10 +161,10 @@
   
       /* close PRNG device */
       if (prng->dev != -1)
  -        close(prng->dev);
  +        (void)close(prng->dev);
   
       /* destroy MD5 engine */
  -    md5_destroy(prng->md5);
  +    (void)md5_destroy(prng->md5);
   
       /* free object */
       free(prng);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_sha1.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 uuid_sha1.c
  --- ossp-pkg/uuid/uuid_sha1.c	13 Jan 2006 06:44:31 -0000	1.3
  +++ ossp-pkg/uuid/uuid_sha1.c	28 Jul 2006 19:16:05 -0000	1.4
  @@ -111,7 +111,7 @@
   /* Function Prototypes */
   static int SHA1Reset  (SHA1Context *);
   static int SHA1Input  (SHA1Context *, const sha1_uint8_t *, unsigned int);
  -static int SHA1Result (SHA1Context *, sha1_uint8_t Message_Digest[SHA1HashSize]);
  +static int SHA1Result (SHA1Context *, sha1_uint8_t Message_Digest[]);
   
   /* Local Function Prototyptes */
   static void SHA1PadMessage         (SHA1Context *);
  @@ -152,7 +152,7 @@
    *  of hash is stored in the 0th element, the last octet of hash in the
    *  19th element.
    */
  -static int SHA1Result(SHA1Context *context, sha1_uint8_t Message_Digest[SHA1HashSize])
  +static int SHA1Result(SHA1Context *context, sha1_uint8_t Message_Digest[])
   {
       int i;
   
  @@ -165,14 +165,14 @@
           SHA1PadMessage(context);
           for (i = 0; i < 64; i++) {
               /* message may be sensitive, clear it out */
  -            context->Message_Block[i] = 0;
  +            context->Message_Block[i] = (sha1_uint8_t)0;
           }
           context->Length_Low  = 0; /* and clear length */
           context->Length_High = 0;
           context->Computed    = 1;
       }
       for (i = 0; i < SHA1HashSize; i++)
  -        Message_Digest[i] = context->Intermediate_Hash[i>>2] >> (8 * (3 - (i & 0x03)));
  +        Message_Digest[i] = (sha1_uint8_t)(context->Intermediate_Hash[i>>2] >> (8 * (3 - (i & 0x03))));
   
       return shaSuccess;
   }
  @@ -231,10 +231,10 @@
   
       /* Initialize the first 16 words in the array W */
       for (t = 0; t < 16; t++) {
  -        W[t]  = context->Message_Block[t * 4    ] << 24;
  -        W[t] |= context->Message_Block[t * 4 + 1] << 16;
  -        W[t] |= context->Message_Block[t * 4 + 2] << 8;
  -        W[t] |= context->Message_Block[t * 4 + 3];
  +        W[t]  = (sha1_uint32_t)(context->Message_Block[t * 4    ] << 24);
  +        W[t] |= (sha1_uint32_t)(context->Message_Block[t * 4 + 1] << 16);
  +        W[t] |= (sha1_uint32_t)(context->Message_Block[t * 4 + 2] <<  8);
  +        W[t] |= (sha1_uint32_t)(context->Message_Block[t * 4 + 3]      );
       }
   
       for (t = 16; t < 80; t++)
  @@ -309,28 +309,28 @@
          the initial padding bits and length. If so, we will pad the block,
          process it, and then continue padding into a second block. */
       if (context->Message_Block_Index > 55) {
  -        context->Message_Block[context->Message_Block_Index++] = 0x80;
  +        context->Message_Block[context->Message_Block_Index++] = (sha1_uint8_t)0x80;
           while (context->Message_Block_Index < 64)
  -            context->Message_Block[context->Message_Block_Index++] = 0;
  +            context->Message_Block[context->Message_Block_Index++] = (sha1_uint8_t)0;
           SHA1ProcessMessageBlock(context);
           while(context->Message_Block_Index < 56)
  -            context->Message_Block[context->Message_Block_Index++] = 0;
  +            context->Message_Block[context->Message_Block_Index++] = (sha1_uint8_t)0;
       }
       else {
  -        context->Message_Block[context->Message_Block_Index++] = 0x80;
  +        context->Message_Block[context->Message_Block_Index++] = (sha1_uint8_t)0x80;
           while(context->Message_Block_Index < 56)
  -            context->Message_Block[context->Message_Block_Index++] = 0;
  +            context->Message_Block[context->Message_Block_Index++] = (sha1_uint8_t)0;
       }
   
       /* Store the message length as the last 8 octets */
  -    context->Message_Block[56] = context->Length_High >> 24;
  -    context->Message_Block[57] = context->Length_High >> 16;
  -    context->Message_Block[58] = context->Length_High >> 8;
  -    context->Message_Block[59] = context->Length_High;
  -    context->Message_Block[60] = context->Length_Low  >> 24;
  -    context->Message_Block[61] = context->Length_Low  >> 16;
  -    context->Message_Block[62] = context->Length_Low  >> 8;
  -    context->Message_Block[63] = context->Length_Low;
  +    context->Message_Block[56] = (sha1_uint8_t)(context->Length_High >> 24);
  +    context->Message_Block[57] = (sha1_uint8_t)(context->Length_High >> 16);
  +    context->Message_Block[58] = (sha1_uint8_t)(context->Length_High >>  8);
  +    context->Message_Block[59] = (sha1_uint8_t)(context->Length_High      );
  +    context->Message_Block[60] = (sha1_uint8_t)(context->Length_Low  >> 24);
  +    context->Message_Block[61] = (sha1_uint8_t)(context->Length_Low  >> 16);
  +    context->Message_Block[62] = (sha1_uint8_t)(context->Length_Low  >>  8);
  +    context->Message_Block[63] = (sha1_uint8_t)(context->Length_Low       );
   
       SHA1ProcessMessageBlock(context);
       return;
  @@ -350,7 +350,8 @@
           return SHA1_RC_ARG;
       if ((*sha1 = (sha1_t *)malloc(sizeof(sha1_t))) == NULL)
           return SHA1_RC_MEM;
  -    SHA1Reset(&((*sha1)->ctx));
  +    if (SHA1Reset(&((*sha1)->ctx)) != shaSuccess)
  +        return SHA1_RC_INT;
       return SHA1_RC_OK;
   }
   
  @@ -358,7 +359,8 @@
   {
       if (sha1 == NULL)
           return SHA1_RC_ARG;
  -    SHA1Reset(&(sha1->ctx));
  +    if (SHA1Reset(&(sha1->ctx)) != shaSuccess)
  +        return SHA1_RC_INT;
       return SHA1_RC_OK;
   }
   
  @@ -366,7 +368,8 @@
   {
       if (sha1 == NULL)
           return SHA1_RC_ARG;
  -    SHA1Input(&(sha1->ctx), (unsigned char *)data_ptr, (unsigned int)data_len);
  +    if (SHA1Input(&(sha1->ctx), (unsigned char *)data_ptr, (unsigned int)data_len) != shaSuccess)
  +        return SHA1_RC_INT;
       return SHA1_RC_OK;
   }
   
  @@ -390,7 +393,8 @@
           }
       }
       memcpy((void *)(&ctx), (void *)(&(sha1->ctx)), sizeof(SHA1Context));
  -    SHA1Result(&(ctx), (unsigned char *)(*data_ptr));
  +    if (SHA1Result(&(ctx), (unsigned char *)(*data_ptr)) != shaSuccess)
  +        return SHA1_RC_INT;
       return SHA1_RC_OK;
   }
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_sha1.h
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid_sha1.h
  --- ossp-pkg/uuid/uuid_sha1.h	13 Jan 2006 06:44:31 -0000	1.2
  +++ ossp-pkg/uuid/uuid_sha1.h	28 Jul 2006 19:16:05 -0000	1.3
  @@ -62,7 +62,8 @@
   typedef enum {
       SHA1_RC_OK  = 0,
       SHA1_RC_ARG = 1,
  -    SHA1_RC_MEM = 2
  +    SHA1_RC_MEM = 2,
  +    SHA1_RC_INT = 3
   } sha1_rc_t;
   
   extern sha1_rc_t sha1_create  (sha1_t **sha1);
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul 28 21:17:44 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 4F1DB7528A3; Fri, 28 Jul 2006 21:17:44 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog README uuid_vers.h
Message-Id: <20060728191744.4F1DB7528A3@mail.ossp.org>
Date: Fri, 28 Jul 2006 21:17:44 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Jul-2006 21:17:44
  Branch: HEAD                             Handle: 2006072820174301

  Modified files:
    ossp-pkg/uuid           ChangeLog README uuid_vers.h

  Log:
    prepare for release

  Summary:
    Revision    Changes     Path
    1.125       +1  -1      ossp-pkg/uuid/ChangeLog
    1.41        +1  -1      ossp-pkg/uuid/README
    1.25        +5  -5      ossp-pkg/uuid/uuid_vers.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.124 -r1.125 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	28 Jul 2006 18:22:43 -0000	1.124
  +++ ossp-pkg/uuid/ChangeLog	28 Jul 2006 19:17:43 -0000	1.125
  @@ -11,7 +11,7 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 1.4.2 and 1.5.0 (13-Mar-2006 to XX-May-2006)
  +  Changes between 1.4.2 and 1.5.0 (13-Mar-2006 to 28-Jul-2006)
   
      o Fixed potential memory leak in uuid_create() as spotted by SPLINT.
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.40 -r1.41 README
  --- ossp-pkg/uuid/README	11 May 2006 18:42:53 -0000	1.40
  +++ ossp-pkg/uuid/README	28 Jul 2006 19:17:44 -0000	1.41
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
   
     OSSP uuid - Universally Unique Identifier
  -  Version 1.5.0 (11-May-2006)
  +  Version 1.5.0 (28-Jul-2006)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_vers.h
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 uuid_vers.h
  --- ossp-pkg/uuid/uuid_vers.h	11 May 2006 18:42:53 -0000	1.24
  +++ ossp-pkg/uuid/uuid_vers.h	28 Jul 2006 19:17:44 -0000	1.25
  @@ -34,12 +34,12 @@
   _uuid_version_t _uuid_version = {
       0x105200,
       "1.5.0",
  -    "1.5.0 (11-May-2006)",
  -    "This is OSSP uuid, Version 1.5.0 (11-May-2006)",
  -    "OSSP uuid 1.5.0 (11-May-2006)",
  +    "1.5.0 (28-Jul-2006)",
  +    "This is OSSP uuid, Version 1.5.0 (28-Jul-2006)",
  +    "OSSP uuid 1.5.0 (28-Jul-2006)",
       "OSSP uuid/1.5.0",
  -    "@(#)OSSP uuid 1.5.0 (11-May-2006)",
  -    "$Id: OSSP uuid 1.5.0 (11-May-2006) $"
  +    "@(#)OSSP uuid 1.5.0 (28-Jul-2006)",
  +    "$Id: OSSP uuid 1.5.0 (28-Jul-2006) $"
   };
   
   #endif /* _UUID_VERS_H_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul 28 21:19:11 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 139EA752910; Fri, 28 Jul 2006 21:19:11 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ NEWS
Message-Id: <20060728191911.139EA752910@mail.ossp.org>
Date: Fri, 28 Jul 2006 21:19:11 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Jul-2006 21:19:11
  Branch: HEAD                             Handle: 2006072820191000

  Modified files:
    ossp-pkg/uuid           NEWS

  Log:
    remember major changes

  Summary:
    Revision    Changes     Path
    1.9         +6  -0      ossp-pkg/uuid/NEWS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/NEWS
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 NEWS
  --- ossp-pkg/uuid/NEWS	13 Jan 2006 06:45:19 -0000	1.8
  +++ ossp-pkg/uuid/NEWS	28 Jul 2006 19:19:10 -0000	1.9
  @@ -11,6 +11,12 @@
     This is a list of major changes to OSSP uuid. For more detailed
     change descriptions, please have a look at the ChangeLog file.
   
  +  Major changes between 1.4 and 1.5
  +
  +    o Many internal code cleanups and fixes.
  +    o Improved and fixed PostgreSQL API.
  +    o Improved and fixed PHP API.
  +
     Major changes between 1.3 and 1.4
   
       o Added PostgreSQL API.
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul 28 21:24:43 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 0C86A752910; Fri, 28 Jul 2006 21:24:43 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20060728192443.0C86A752910@mail.ossp.org>
Date: Fri, 28 Jul 2006 21:24:43 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   28-Jul-2006 21:24:43
  Branch: HEAD                             Handle: 2006072820244200

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/uuid   index.wml

  Log:
    release OSSP uuid 1.5.0

  Summary:
    Revision    Changes     Path
    1.155       +1  -0      ossp-web/new/news.txt
    1.125       +1  -1      ossp-web/pkg/lib/index.wml
    1.30        +2  -2      ossp-web/pkg/lib/uuid/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.154 -r1.155 news.txt
  --- ossp-web/new/news.txt	25 Jul 2006 13:05:14 -0000	1.154
  +++ ossp-web/new/news.txt	28 Jul 2006 19:24:42 -0000	1.155
  @@ -1,3 +1,4 @@
  +28-Jul-2006: Released L<OSSP uuid> 1.5.0
   25-Jul-2006: Released T<OSSP shiela> 1.1.7
   24-Jul-2006: Released L<OSSP js> 1.6.20060724
   24-Jul-2006: Released L<OSSP js> 1.6.20060724
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.124 -r1.125 index.wml
  --- ossp-web/pkg/lib/index.wml	24 Jul 2006 20:24:26 -0000	1.124
  +++ ossp-web/pkg/lib/index.wml	28 Jul 2006 19:24:42 -0000	1.125
  @@ -33,7 +33,7 @@
   			done=100 stable=1.1.3 unstable=none>
     <pkg_item name="uuid" longname="OSSP uuid" type="lib"
               desc="Universally Unique Identifier"
  -			done=100 stable=1.4.2 unstable=none>
  +			done=100 stable=1.5.0 unstable=none>
     <pkg_item name="val" longname="OSSP val" type="lib"
               desc="Value Access"
   			done=95 stable=none unstable=0.9.4>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/uuid/index.wml
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 index.wml
  --- ossp-web/pkg/lib/uuid/index.wml	13 Mar 2006 09:45:44 -0000	1.29
  +++ ossp-web/pkg/lib/uuid/index.wml	28 Jul 2006 19:24:42 -0000	1.30
  @@ -48,7 +48,7 @@
   
   <pkg_status
       name="uuid" assign="rse"
  -    stable="1.4.2"    stable_date="13-Mar-2006"
  +    stable="1.5.0"    stable_date="28-Jul-2006"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -59,7 +59,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/uuid/
       directory=$(FTP_ROOT_DIR)/pkg/lib/uuid/
       files="uuid-[0-9.]*.tar.gz" 
  -	stable="uuid-1\.4\.2\.tar\.gz" unstable="none">
  +	stable="uuid-1\.5\.0\.tar\.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jul 29 11:08:16 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 3B10875286A; Sat, 29 Jul 2006 11:08:16 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ ChangeLog THANKS configure.ac ossp-pkg/js/src...
Message-Id: <20060729090816.3B10875286A@mail.ossp.org>
Date: Sat, 29 Jul 2006 11:08:16 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Jul-2006 11:08:16
  Branch: HEAD                             Handle: 2006072910081500

  Added files:
    ossp-pkg/js             THANKS
  Modified files:
    ossp-pkg/js             ChangeLog configure.ac
    ossp-pkg/js/src         jsfile.c

  Log:
    Increase portability by gracefully downgrading the stat(2) use of
    st_birthtime to st_birthtimensec or even st_mtime.

  Summary:
    Revision    Changes     Path
    1.11        +5  -1      ossp-pkg/js/ChangeLog
    1.1         +17 -0      ossp-pkg/js/THANKS
    1.15        +2  -0      ossp-pkg/js/configure.ac
    1.8         +12 -0      ossp-pkg/js/src/jsfile.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 ChangeLog
  --- ossp-pkg/js/ChangeLog	26 Jul 2006 07:15:59 -0000	1.10
  +++ ossp-pkg/js/ChangeLog	29 Jul 2006 09:08:15 -0000	1.11
  @@ -11,7 +11,11 @@
   
     This is a list of all changes to OSSP js.
   
  -  Changes between 1.6.20060724 and 1.6.20060726 (2006-07-24 to 2006-07-26)
  +  Changes between 1.6.20060724 and 1.6.20060728 (2006-07-24 to 2006-07-28)
  +
  +   o Increase portability by gracefully downgrading the stat(2) use of
  +     st_birthtime to st_birthtimensec or even st_mtime.
  +     [Ralf S. Engelschall <rse@engelschall.com>,  Andrew Vajoczki <vajoczki@rogers.com>]
   
      o Apply a few more upstream fixes to jsfile.c.
        [Ralf S. Engelschall <rse@engelschall.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/THANKS
  ============================================================================
  $ cvs diff -u -r0 -r1.1 THANKS
  --- /dev/null	2006-07-29 11:05:57 +0200
  +++ THANKS	2006-07-29 11:08:15 +0200
  @@ -0,0 +1,17 @@
  +   _        ___  ____ ____  ____     _      
  +  |_|_ _   / _ \/ ___/ ___||  _ \   (_)___  
  +  _|_||_| | | | \___ \___ \| |_) |  | / __| 
  + |_||_|_| | |_| |___) |__) |  __/   | \__ \ 
  +  |_|_|_|  \___/|____/____/|_|     _/ |___/ 
  +                                  |__/      
  +
  +  OSSP js - Mozilla JavaScript Engine
  +
  +  THANKS
  +
  +  Credit has to be given to the following people who contributed ideas,
  +  bugfixes, hints, gave platform feedback, etc. (in alphabetical order):
  +
  +    o  Thomas Lotterer             <thomas@lotterer.net>
  +    o  Andrew Vajoczki             <vajoczki@rogers.com>
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/configure.ac
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 configure.ac
  --- ossp-pkg/js/configure.ac	24 Jul 2006 19:21:49 -0000	1.14
  +++ ossp-pkg/js/configure.ac	29 Jul 2006 09:08:15 -0000	1.15
  @@ -45,6 +45,8 @@
   AC_CHECK_LIB(socket, accept)
   AC_CHECK_LIB(m, floor)
   
  +AC_CHECK_MEMBERS([struct stat.st_birthtime, struct stat.st_birthtimensec],,, [#include <sys/stat.h>])
  +
   CPPFLAGS="$CPPFLAGS -DOSSP -DXP_UNIX -DEXPORT_JS_API"
   
   dnl #   configure option --with-version
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsfile.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 jsfile.c
  --- ossp-pkg/js/src/jsfile.c	26 Jul 2006 07:15:59 -0000	1.7
  +++ ossp-pkg/js/src/jsfile.c	29 Jul 2006 09:08:15 -0000	1.8
  @@ -43,6 +43,10 @@
    */
   #if JS_HAS_FILE_OBJECT
   
  +#ifdef OSSP
  +#include "../config.h"
  +#endif
  +
   #include "jsstddef.h"
   
   /* ----------------- Platform-specific includes and defines ----------------- */
  @@ -2696,7 +2700,15 @@
               goto out;
           }
   
  +#if defined(HAVE_STRUCT_STAT_ST_BIRTHTIME)
           t = (time_t)(info.st_birthtime);
  +#elif defined(HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC)
  +        t = (time_t)(info.st_birthtimensec / (1000*1000*1000));
  +#else
  +        /* not really correct, but the only possible fallback on not
  +           fully POSIX compliant platforms. */
  +        t = (time_t)(info.st_mtime);
  +#endif
           tm = localtime(&t);
           *vp = OBJECT_TO_JSVAL(js_NewDateObject(cx, tm->tm_year + 1900,
                                       tm->tm_mon + 1,
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jul 29 11:14:41 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 02AB6752908; Sat, 29 Jul 2006 11:14:40 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ ChangeLog Makefile.in THANKS
Message-Id: <20060729091440.02AB6752908@mail.ossp.org>
Date: Sat, 29 Jul 2006 11:14:40 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Jul-2006 11:14:40
  Branch: HEAD                             Handle: 2006072910144000

  Modified files:
    ossp-pkg/js             ChangeLog Makefile.in THANKS

  Log:
    Changed GNU libtool shared library versioning from 0:0 to 1:6

  Summary:
    Revision    Changes     Path
    1.12        +6  -1      ossp-pkg/js/ChangeLog
    1.23        +1  -1      ossp-pkg/js/Makefile.in
    1.2         +1  -0      ossp-pkg/js/THANKS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 ChangeLog
  --- ossp-pkg/js/ChangeLog	29 Jul 2006 09:08:15 -0000	1.11
  +++ ossp-pkg/js/ChangeLog	29 Jul 2006 09:14:40 -0000	1.12
  @@ -13,9 +13,14 @@
   
     Changes between 1.6.20060724 and 1.6.20060728 (2006-07-24 to 2006-07-28)
   
  +   o Changed GNU libtool shared library versioning from 0:0 to 1:6.
  +     [Ralf S. Engelschall <rse@engelschall.com>,
  +      Alfred Reibenschuh <alfred.reibenschuh@it-austria.com>]
  +
      o Increase portability by gracefully downgrading the stat(2) use of
        st_birthtime to st_birthtimensec or even st_mtime.
  -     [Ralf S. Engelschall <rse@engelschall.com>,  Andrew Vajoczki <vajoczki@rogers.com>]
  +     [Ralf S. Engelschall <rse@engelschall.com>,
  +      Andrew Vajoczki <vajoczki@rogers.com>]
   
      o Apply a few more upstream fixes to jsfile.c.
        [Ralf S. Engelschall <rse@engelschall.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 Makefile.in
  --- ossp-pkg/js/Makefile.in	23 Jul 2006 19:11:48 -0000	1.22
  +++ ossp-pkg/js/Makefile.in	29 Jul 2006 09:14:40 -0000	1.23
  @@ -154,7 +154,7 @@
   	@$(LIBTOOL) --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -c $<
   
   $(LIB_NAME): $(LIB_OBJS)
  -	@$(LIBTOOL) --mode=link $(CC) -o $(LIB_NAME) $(LIB_OBJS) -rpath $(libdir) -version-info 0:0
  +	@$(LIBTOOL) --mode=link $(CC) -o $(LIB_NAME) $(LIB_OBJS) -rpath $(libdir) -version-info 1:6
   
   $(CLI_NAME): $(CLI_OBJS) $(LIB_NAME)
   	@$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) $(CLI_LDFLAGS) -o $(CLI_NAME) $(CLI_OBJS) $(LIB_NAME) $(LIBS) $(CLI_LIBS)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/THANKS
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 THANKS
  --- ossp-pkg/js/THANKS	29 Jul 2006 09:08:15 -0000	1.1
  +++ ossp-pkg/js/THANKS	29 Jul 2006 09:14:40 -0000	1.2
  @@ -13,5 +13,6 @@
     bugfixes, hints, gave platform feedback, etc. (in alphabetical order):
   
       o  Thomas Lotterer             <thomas@lotterer.net>
  +    o  Alfred Reibenschuh          <alfred.reibenschuh@it-austria.com>
       o  Andrew Vajoczki             <vajoczki@rogers.com>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jul 29 11:15:10 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id CF9F4752908; Sat, 29 Jul 2006 11:15:10 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ ChangeLog ossp-pkg/js/src/ jsfile.c
Message-Id: <20060729091510.CF9F4752908@mail.ossp.org>
Date: Sat, 29 Jul 2006 11:15:10 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Jul-2006 11:15:10
  Branch: HEAD                             Handle: 2006072910150901

  Modified files:
    ossp-pkg/js             ChangeLog
    ossp-pkg/js/src         jsfile.c

  Log:
    use ctime

  Summary:
    Revision    Changes     Path
    1.13        +1  -1      ossp-pkg/js/ChangeLog
    1.9         +1  -1      ossp-pkg/js/src/jsfile.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 ChangeLog
  --- ossp-pkg/js/ChangeLog	29 Jul 2006 09:14:40 -0000	1.12
  +++ ossp-pkg/js/ChangeLog	29 Jul 2006 09:15:09 -0000	1.13
  @@ -18,7 +18,7 @@
         Alfred Reibenschuh <alfred.reibenschuh@it-austria.com>]
   
      o Increase portability by gracefully downgrading the stat(2) use of
  -     st_birthtime to st_birthtimensec or even st_mtime.
  +     st_birthtime to st_birthtimensec or even st_ctime.
        [Ralf S. Engelschall <rse@engelschall.com>,
         Andrew Vajoczki <vajoczki@rogers.com>]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsfile.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 jsfile.c
  --- ossp-pkg/js/src/jsfile.c	29 Jul 2006 09:08:15 -0000	1.8
  +++ ossp-pkg/js/src/jsfile.c	29 Jul 2006 09:15:10 -0000	1.9
  @@ -2707,7 +2707,7 @@
   #else
           /* not really correct, but the only possible fallback on not
              fully POSIX compliant platforms. */
  -        t = (time_t)(info.st_mtime);
  +        t = (time_t)(info.st_ctime);
   #endif
           tm = localtime(&t);
           *vp = OBJECT_TO_JSVAL(js_NewDateObject(cx, tm->tm_year + 1900,
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jul 29 13:29:00 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 3AF8B75289B; Sat, 29 Jul 2006 13:29:00 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: MOZILLA: ossp-pkg/js/src/ .cvsignore Makefile.in Makefile....
Message-Id: <20060729112900.3AF8B75289B@mail.ossp.org>
Date: Sat, 29 Jul 2006 13:29:00 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Jul-2006 13:29:00
  Branch: MOZILLA                          Handle: -NONE-

  Touched files:            (Branch: MOZILLA)
    ossp-pkg/js/src         .cvsignore Makefile.in Makefile.ref README.html
                            SpiderMonkey.rsp config.mk js.c js.mak js.mdp
                            js.msg js.pkg js3240.rc jsOS240.def jsapi.c
                            jsapi.h jsarena.c jsarena.h jsarray.c jsarray.h
                            jsatom.c jsatom.h jsbit.h jsbool.c jsbool.h
                            jsclist.h jscntxt.c jscntxt.h jscompat.h
                            jsconfig.h jsconfig.mk jscpucfg.c jscpucfg.h
                            jsdate.c jsdate.h jsdbgapi.c jsdbgapi.h jsdhash.c
                            jsdhash.h jsdtoa.c jsdtoa.h jsemit.c jsemit.h
                            jsexn.c jsexn.h jsfile.c jsfile.h jsfile.msg
                            jsfun.c jsfun.h jsgc.c jsgc.h jshash.h jsify.pl
                            jsinterp.c jsinterp.h jslibmath.h jslock.c
                            jslock.h jslocko.asm jslog2.c jslong.c jslong.h
                            jsmath.c jsmath.h jsnum.c jsnum.h jsobj.c jsobj.h
                            jsopcode.c jsopcode.h jsopcode.tbl jsosdep.h
                            jsotypes.h jsparse.c jsparse.h jsprf.c jsprf.h
                            jsprvtd.h jspubtd.h jsregexp.c jsregexp.h jsscan.c
                            jsscan.h jsscope.c jsscope.h jsscript.c jsscript.h
                            jsshell.msg jsstddef.h jsstr.c jsstr.h jstypes.h
                            jsutil.c jsutil.h jsxdrapi.c jsxdrapi.h jsxml.c
                            jsxml.h lock_SunOS.s perfect.js plify_jsdhash.sed
                            prmjtime.c prmjtime.h resource.h rules.mk
                            win32.order
    ossp-pkg/js/src/config  AIX4.1.mk AIX4.2.mk AIX4.3.mk Darwin.mk
                            Darwin1.3.mk Darwin1.4.mk Darwin5.2.mk
                            Darwin5.3.mk HP-UXB.10.10.mk HP-UXB.10.20.mk
                            HP-UXB.11.00.mk IRIX.mk IRIX5.3.mk IRIX6.1.mk
                            IRIX6.2.mk IRIX6.3.mk IRIX6.5.mk Linux_All.mk
                            Mac_OS10.0.mk OSF1V4.0.mk OSF1V5.0.mk
                            SunOS4.1.4.mk SunOS5.3.mk SunOS5.4.mk
                            SunOS5.5.1.mk SunOS5.5.mk SunOS5.6.mk SunOS5.7.mk
                            SunOS5.8.mk SunOS5.9.mk WINNT4.0.mk WINNT5.0.mk
                            WINNT5.1.mk WINNT5.2.mk dgux.mk
    ossp-pkg/js/src/editline
                            Makefile.ref README editline.3 editline.c
                            editline.h sysunix.c unix.h
    ossp-pkg/js/src/fdlibm  .cvsignore Makefile.in Makefile.ref e_acos.c
                            e_acosh.c e_asin.c e_atan2.c e_atanh.c e_cosh.c
                            e_exp.c e_fmod.c e_gamma.c e_gamma_r.c e_hypot.c
                            e_j0.c e_j1.c e_jn.c e_lgamma.c e_lgamma_r.c
                            e_log.c e_log10.c e_pow.c e_rem_pio2.c
                            e_remainder.c e_scalb.c e_sinh.c e_sqrt.c fdlibm.h
                            fdlibm.mak fdlibm.mdp k_cos.c k_rem_pio2.c k_sin.c
                            k_standard.c k_tan.c s_asinh.c s_atan.c s_cbrt.c
                            s_ceil.c s_copysign.c s_cos.c s_erf.c s_expm1.c
                            s_fabs.c s_finite.c s_floor.c s_frexp.c s_ilogb.c
                            s_isnan.c s_ldexp.c s_lib_version.c s_log1p.c
                            s_logb.c s_matherr.c s_modf.c s_nextafter.c
                            s_rint.c s_scalbn.c s_signgam.c s_significand.c
                            s_sin.c s_tan.c s_tanh.c w_acos.c w_acosh.c
                            w_asin.c w_atan2.c w_atanh.c w_cosh.c w_exp.c
                            w_fmod.c w_gamma.c w_gamma_r.c w_hypot.c w_j0.c
                            w_j1.c w_jn.c w_lgamma.c w_lgamma_r.c w_log.c
                            w_log10.c w_pow.c w_remainder.c w_scalb.c w_sinh.c
                            w_sqrt.c
    ossp-pkg/js/src/perlconnect
                            .cvsignore JS.def JS.dsp JS.pm JS.xs Makefile.PL
                            Makefile.ref PerlConnect.dsp PerlConnect.dsw
                            PerlConnect.pm PerlConnectShell.dsp README.html
                            bg.jpg jsperl.c jsperl.h jsperlbuild.pl
                            jsperlpvt.h test.js test.pl typemap

  Log:
    Import new upstream version: Mozilla JavaScript (SpiderMonkey) 1.6 as of 2006-07-29
    
    [Release Tag: MOZILLA_JS_1_6_20060729]

  Summary:
    Revision    Changes     Path
  ____________________________________________________________________________

From ossp-cvs-owner@ossp.org  Sat Jul 29 13:30:39 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 2149F75289B; Sat, 29 Jul 2006 13:30:39 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ ChangeLog
Message-Id: <20060729113039.2149F75289B@mail.ossp.org>
Date: Sat, 29 Jul 2006 13:30:39 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Jul-2006 13:30:39
  Branch: HEAD                             Handle: 2006072912303800

  Modified files:
    ossp-pkg/js             ChangeLog

  Log:
    Upgrade to upstream sources as of 2006-07-28.

  Summary:
    Revision    Changes     Path
    1.14        +3  -0      ossp-pkg/js/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 ChangeLog
  --- ossp-pkg/js/ChangeLog	29 Jul 2006 09:15:09 -0000	1.13
  +++ ossp-pkg/js/ChangeLog	29 Jul 2006 11:30:38 -0000	1.14
  @@ -13,6 +13,9 @@
   
     Changes between 1.6.20060724 and 1.6.20060728 (2006-07-24 to 2006-07-28)
   
  +   o Upgrade to upstream sources as of 2006-07-28.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
      o Changed GNU libtool shared library versioning from 0:0 to 1:6.
        [Ralf S. Engelschall <rse@engelschall.com>,
         Alfred Reibenschuh <alfred.reibenschuh@it-austria.com>]
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jul 29 13:30:53 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 639617528A3; Sat, 29 Jul 2006 13:30:52 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ ChangeLog
Message-Id: <20060729113052.639617528A3@mail.ossp.org>
Date: Sat, 29 Jul 2006 13:30:52 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Jul-2006 13:30:52
  Branch: HEAD                             Handle: 2006072912305000

  Modified files:
    ossp-pkg/js             ChangeLog

  Log:
    Upgrade to upstream sources as of 2006-07-29

  Summary:
    Revision    Changes     Path
    1.15        +2  -2      ossp-pkg/js/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 ChangeLog
  --- ossp-pkg/js/ChangeLog	29 Jul 2006 11:30:38 -0000	1.14
  +++ ossp-pkg/js/ChangeLog	29 Jul 2006 11:30:50 -0000	1.15
  @@ -11,9 +11,9 @@
   
     This is a list of all changes to OSSP js.
   
  -  Changes between 1.6.20060724 and 1.6.20060728 (2006-07-24 to 2006-07-28)
  +  Changes between 1.6.20060724 and 1.6.20060729 (2006-07-24 to 2006-07-29)
   
  -   o Upgrade to upstream sources as of 2006-07-28.
  +   o Upgrade to upstream sources as of 2006-07-29.
        [Ralf S. Engelschall <rse@engelschall.com>]
   
      o Changed GNU libtool shared library versioning from 0:0 to 1:6.
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jul 29 13:33:35 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id AB999752894; Sat, 29 Jul 2006 13:33:35 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ README VERSION devtool.conf ossp-pkg/js/src/ ...
Message-Id: <20060729113335.AB999752894@mail.ossp.org>
Date: Sat, 29 Jul 2006 13:33:35 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Jul-2006 13:33:35
  Branch: HEAD                             Handle: 2006072912333500

  Modified files:
    ossp-pkg/js             README VERSION devtool.conf
    ossp-pkg/js/src         jsapi.c

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.10        +1  -1      ossp-pkg/js/README
    1.4         +1  -1      ossp-pkg/js/VERSION
    1.7         +3  -1      ossp-pkg/js/devtool.conf
    1.9         +1  -1      ossp-pkg/js/src/jsapi.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/README
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 README
  --- ossp-pkg/js/README	24 Jul 2006 20:12:14 -0000	1.9
  +++ ossp-pkg/js/README	29 Jul 2006 11:33:35 -0000	1.10
  @@ -6,7 +6,7 @@
                                     |__/      
   
     OSSP js - Mozilla JavaScript Engine
  -  Version 1.6.20060724 (24-Jul-2006)
  +  Version 1.6.20060729 (29-Jul-2006)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/VERSION
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 VERSION
  --- ossp-pkg/js/VERSION	24 Jul 2006 20:12:14 -0000	1.3
  +++ ossp-pkg/js/VERSION	29 Jul 2006 11:33:35 -0000	1.4
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP js (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP js, Version 1.6.20060724 (24-Jul-2006)
  +  This is OSSP js, Version 1.6.20060729 (29-Jul-2006)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 devtool.conf
  --- ossp-pkg/js/devtool.conf	23 Jul 2006 10:52:12 -0000	1.6
  +++ ossp-pkg/js/devtool.conf	29 Jul 2006 11:33:35 -0000	1.7
  @@ -25,7 +25,9 @@
       ./shtool version -l txt -n "OSSP js" -e VERSION
       V=`./shtool version -l txt -d long VERSION`
       sed -e "s/Version .*/Version $V/g" <README >README.n
  -    mv README.n README
  +    V=`./shtool version -l txt -d short VERSION`
  +    sed -e "s/OSSP js 1.6........./OSSP js $V/g" <src/jsapi.c >src/jsapi.c.n
  +    mv src/jsapi.c.n src/jsapi.c
   
   %dist
       echo "+++ removing old tarballs"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsapi.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 jsapi.c
  --- ossp-pkg/js/src/jsapi.c	24 Jul 2006 20:12:14 -0000	1.8
  +++ ossp-pkg/js/src/jsapi.c	29 Jul 2006 11:33:35 -0000	1.9
  @@ -1085,7 +1085,7 @@
   JS_GetImplementationVersion(void)
   {
   #ifdef OSSP
  -    return "JavaScript-C 1.6 pre-release 1 2006-04-04 (OSSP js 1.6.20060724)";
  +    return "JavaScript-C 1.6 pre-release 1 2006-04-04 (OSSP js 1.6.20060729)";
   #else
       return "JavaScript-C 1.6 pre-release 1 2006-04-04";
   #endif
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jul 29 13:42:09 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 33C18752994; Sat, 29 Jul 2006 13:42:09 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/ index.wml ossp-web/new/ news.txt ossp-web/pkg/li...
Message-Id: <20060729114209.33C18752994@mail.ossp.org>
Date: Sat, 29 Jul 2006 13:42:09 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   29-Jul-2006 13:42:09
  Branch: HEAD                             Handle: 2006072912420801

  Modified files:
    ossp-web                index.wml
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/js     index.wml

  Log:
    release OSSP js 1.6.20060729

  Summary:
    Revision    Changes     Path
    1.5         +10 -0      ossp-web/index.wml
    1.156       +1  -0      ossp-web/new/news.txt
    1.126       +1  -1      ossp-web/pkg/lib/index.wml
    1.3         +2  -2      ossp-web/pkg/lib/js/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/index.wml
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 index.wml
  --- ossp-web/index.wml	24 Sep 2002 12:53:44 -0000	1.4
  +++ ossp-web/index.wml	29 Jul 2006 11:42:08 -0000	1.5
  @@ -32,6 +32,16 @@
   href="$(ROOT)/com/donations.html">donations</a> from many individuals
   and companies all this would be not possible, of course.
   
  +..PAGE_CANVAS_NB3>>
  +<font size=-2>
  +Current <a href="$(ROOT)/com/sponsors.html">Sponsors</a>:<p>
  +<a href="http://www.engelschall.com/">Ralf S. Engelschall</a><br>
  +<a href="http://www.lotterer.net/thomas/">Thomas Lotterer</a><br>
  +<font color="#993333">Honscha</font> <a href="http://pliant.cx/">Münzen</a><br>
  +<a href="http://www.nur-mietwagen.de/">Oliver Bornhak</a><br>
  +<a href="http://www.bauernhofurlaub-ostallgaeu.de/">Eva Lachenmayer</a><br>
  +<<..
  +
   <p>
   <b>Newsflash:</b>
   <p>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.155 -r1.156 news.txt
  --- ossp-web/new/news.txt	28 Jul 2006 19:24:42 -0000	1.155
  +++ ossp-web/new/news.txt	29 Jul 2006 11:42:08 -0000	1.156
  @@ -1,3 +1,4 @@
  +29-Jul-2006: Released L<OSSP js> 1.6.20060729
   28-Jul-2006: Released L<OSSP uuid> 1.5.0
   25-Jul-2006: Released T<OSSP shiela> 1.1.7
   24-Jul-2006: Released L<OSSP js> 1.6.20060724
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.125 -r1.126 index.wml
  --- ossp-web/pkg/lib/index.wml	28 Jul 2006 19:24:42 -0000	1.125
  +++ ossp-web/pkg/lib/index.wml	29 Jul 2006 11:42:08 -0000	1.126
  @@ -42,7 +42,7 @@
   			done=95 stable=none unstable=0.9.3>
     <pkg_item name="js" longname="OSSP js" type="lib"
               desc="Mozilla JavaScript Engine"
  -			done=100 stable=none unstable=1.6.20060724>
  +			done=100 stable=none unstable=1.6.20060729>
     <pkg_item name="str" longname="OSSP str" type="lib"
               desc="String Handling"
   			done=95 stable=none unstable=0.9.12>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/js/index.wml
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 index.wml
  --- ossp-web/pkg/lib/js/index.wml	24 Jul 2006 20:24:27 -0000	1.2
  +++ ossp-web/pkg/lib/js/index.wml	29 Jul 2006 11:42:09 -0000	1.3
  @@ -59,7 +59,7 @@
   <pkg_status
       name="js" assign="rse"
   	genesis="Jul-2006"
  -    stable="1.6.20060724" stable_date="24-Jul-2006"
  +    stable="1.6.20060729" stable_date="29-Jul-2006"
       unstable="none"       unstable_date="none"
   	done=100>
   
  @@ -70,7 +70,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/js/
       directory=$(FTP_ROOT_DIR)/pkg/lib/js/
       files="js-*.tar.gz" 
  -	stable="js-1.6.20060724.tar.gz" unstable="none">
  +	stable="js-1.6.20060729.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jul 29 14:18:54 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id A678B75297D; Sat, 29 Jul 2006 14:18:54 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/js/ index.wml spidermonkey.png
Message-Id: <20060729121854.A678B75297D@mail.ossp.org>
Date: Sat, 29 Jul 2006 14:18:54 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   29-Jul-2006 14:18:54
  Branch: HEAD                             Handle: 2006072913185400

  Added files:
    ossp-web/pkg/lib/js     spidermonkey.png
  Modified files:
    ossp-web/pkg/lib/js     index.wml

  Log:
    add a little spidermonkey image

  Summary:
    Revision    Changes     Path
    1.4         +2  -0      ossp-web/pkg/lib/js/index.wml
    1.1         BLOB        ossp-web/pkg/lib/js/spidermonkey.png
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/js/index.wml
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 index.wml
  --- ossp-web/pkg/lib/js/index.wml	29 Jul 2006 11:42:09 -0000	1.3
  +++ ossp-web/pkg/lib/js/index.wml	29 Jul 2006 12:18:54 -0000	1.4
  @@ -3,6 +3,8 @@
   
   <title>OSSP js</title>
   
  +<img src="spidermonkey.png" alt="" align="right">
  +
   <h1>Mozilla JavaScript Engine</h1>
   
   <h2>Abstract</h2>
  @@ .
  (cd ossp-web/pkg/lib/js && \
   uudecode <<'@@ .' && \
   xdelta patch spidermonkey.png.xdelta /dev/null spidermonkey.png && \
   rm -f spidermonkey.png.xdelta)
  Index: ossp-web/pkg/lib/js/spidermonkey.png
  ============================================================================
  begin 664 spidermonkey.png.xdelta
  M)5A$6C`P-"4````(`!$`$`````````````````````!S:&EE;&$N,S<Y.3@N
  M;G5L;'-H:65L82XS-SDY."YA;&P?BP@````````#`"M`U+^)4$Y'#0H:"@``
  M``U)2$12````R````)$(!@```?'>QS<````)<$A9<P``"Q,```L3`0":G!@`
  M```$9T%-00``L8Y\^U&3````(&-(4DT``'HE``"`@P``^?\``(#I``!U,```
  MZF```#J8```7;Y)?Q48``)>+241!5'C:['T%>%1']_Z-N[N[N[N[>T*,""&$
  MX.[N!8K6:2E0BK842@WJ]"O4OKK1%BDM4#P>2,CYOW,S-RPIM-"/\J/]L\\S
  MSR:;[-Z=>V;FV'O>(Q"1\'>/:S_\G0_I(E<N=PJ=[:U"9T>[<+FS0QS=/3U"
  MSV7V>[OX=S9:VUJ%2^?/"4T7SROB[7(8*A@ZSZZ<OVGEM#$[5DT;OW?#BGE[
  M/__D_<EX71]#^2]=I/-RJ^#MYJSEJ:U,L\LRZ<D9HSH38J,K\8$9&*D8X1BA
  M&"$8!K(74<`+2A^\O6^FIZ>G'ON6TD7V;WU*:&]M$7[Y^9@V^^8V*@(-3@YD
  M]W@`1IB:FIH%GC7YK)0QY/GHG:UTD9^/'39PUU<F#TM#"K`R9A]@SO])\X%!
  M6<?S`IS;XUUM6@<$.5&2JQGQ;VW$/JRCO5-H:;DHS*[*$CYY<Z]PYM<C-Y8)
  MF\47;VRG:$<CJDX)8B]0M+TI-41XT:`@9ZJ/\:9\'SL:FA1`"5%A4]AMZ.[`
  MK;O2*=S.113FU^>2M[$F94>Z4I2[!14&NE"FK2&5^]I239@K97G:49J;.57&
  M^K$W.%TX=UIH[6R]]8MTMC>S7]4G3)@0I:,J3P'6QI07X$8)N#7YGA8486U`
  M1FHJE('9S!J4WX/_M6MJ.B]>1';\\/D'?W"1KAYQ,$$M&E7]I;F&$OF8ZY"E
  MNCSYZ"JR;UYJH"Q/Q:'.[.>!;-EV8-6U7FG[W878^,.+/#I[E/#TXHF?!>*;
  MQ[B:LPM=Q;]Y8NAE!+B0#2Z:X&9!XPN3V,7LV(IJ:VD2^H\;7N2-;8\+!_9L
  M$D=ZB$>GL[Y:=Z2C"64&BM^<7431VUR?K"W,&O%SH(VY6:F9FA)6H\$Y_*YQ
  M2Q=IOGA.W(RMS1<$3R-UR@]UHV@7<W:!$@S=SBM7Y"PT%:@L,9B]9LPNZN9J
  MV[Q@[.!?\+.9N)%EQ@TOTB'N]C;VDGR<MQVE!CBQ#ZM645&Q97*ZW-4E3!TW
  M,BC0SHB]SEZ3MS'08C^GL%MV2Q?A.U3CS1>W;HSS<6`OU&'8L`NP-[4T71#*
  MRP88Q'K;L[^YLWTU:5C-&CQ;];_`32_B;*S=9::MVC5E2.E/=I;F0_D9I,4N
  M\L;^5_4M=-4I.]R+XOQ<#K$]P@]'#7;;;ODB>*BQ%<26)CM*RO+2=Q1EI9SA
  M1X<2A@N&-[O_[/>.MA9Q=FS<SD7Z/Y3X157NF#ZY*YKQ;[_(__B0NZ7;Q1Z2
  MP%J;+XI:\<S)X[W[!P*6M")[O>GB!:'IPGGAZ`\_:/!ESY25[MC2K,UK9TW>
  MOFGEDAU//SA[:TA(B*6AH:&6^#^W>Y&+S4V]:F%(,2UM**'QV;$]ZQ9.?QZO
  MI7-%%L?5;AB&FZCX^BZ"W5Z>'#H!JM2$J=#3OQ[KN\C5[F[QMKS__GO:TP87
  MCR\)<Z+%HVN_X1_JR@T&-;X2%?D,%?C/O;?KPKFS5MN??=IZ6FT>A7B)!V($
  M>T-E9:7&@0W+CU5$^)Q)=K.]&@^MV9`22`H*"K7\T%3IP.R8PFJ#/GIH^BCA
  M`N[`T6\_O:%,Y$X=_NCSIQ:,IDAG,W+25R$+'54J#W&EQB@OJ@EVIDP7,RKP
  M<Z!4=_'09+=#H:N]3;CEB[1W=LD-'5)GC_E2C(,!Z4$SED?Y4#(.PQ&XR(AX
  M/\J`;@DPT85*%L^U?`Q5IIS:84+=ZDS$`U)#0\.D)"UVB(V^.@5:&).?B3:5
  M^ME0M(T>F2C)4V:H)U7'>+`W9#.Y]=>&'=V=?WP1IA7;.JZP'U4\3;0HRLD,
  MFM&"5`6A9W!1WB=X/3'>WXY2G/38&_SS\_,4H'KE6R__7OV>.W?RYA<Y=_Z<
  M.*,H9W,*M<-,+'6E;VTZJ::8!L;Z4Z2]$879&E&*A_4W_&R3NR7URQZ2ZF7+
  M+MS!A+TXJ#(Q0+(2-?;LW%X4ZV3*?D]@JR_`R>9TFJ\C^]WQ1A?ZPQW/S*)@
  M&P.*\[#J<M918D:$'U_WZGF1[L0W&]L#FH%NHB69R'[_TZ.>/;8^\H#XQSGC
  MANV)][8E>WWU;OZ!:JW-E\3;:&>D+=T^I=@0?_+W=A_&+)9;TB?\P0QE;4=C
  M+;+456,SB&??_@ILJ[86\2)RYFH"*2DI%;,+Y\6%_X;G*';!6[K(<YO6#;?2
  M5;_J9J[_LY*28J%'K\'MS.33VG)1+LK#MMO;VH@BW:S9ZYF>GAX:_$NIMV&6
  MMSH3!:YV]?BI:E:0&-ZCK:7EQ\\?`RX;IMN9^R#7T=9K7+!9WL[MZJ\C-*4/
  MO*]^[^:X_A<\^OQ3:>"0E92E-)C29.XD>P]S*9E>D_5=915IY^4K0ON5;IEQ
  M5;[Y$@[MUF:AJ[M3^5)GN]OV[=N5O_KN.ZW-V[:P]2<?&QNKN&C.3`V^YOH/
  MA4<>6:LD:J=?CQOT+9F_>R+,(6=6`7/*VR^=D=8M^T+JW[ZY^[W:A(C3*<XV
  M%&5E0"/2HZ@Q+9+&Y";0V)QXJHCRHS1/6TJ'^1_M9$)NQFKD:J1*CACNUB:D
  MK:WMP#>>P@TGTHZ[A6-4M;"PD-TAA:E3)HO.^!]-I.M*WP3DKESNF[0J>]_>
  M%W>)#OY3JQ=3D+D6-20%TZB,<&I(C3BCKJ96Q@_#!!Y=\.$FCC/?^>S+6C-=
  MPYTB]LR"!I;\=_4^FTMV(K@X$YN"KXT1^=F;D:66,B5$!-.KN[8^QH,':E*D
  M0IK(J=.GC?E=9F<9^_(:NKHZVJ\_O^FQ*"_'GAQ_9XJ'HAN:[$<V%J;,%<SC
  M7]J>'U=J_%B38[9".S3KK(&9HKW`W'6FSIDW_3N5?K,3Y?6WWF)?0O&KMW<>
  M/?W=00JT-J1)0ZO(P\:4TCWMZ>E5B]ZVMK2(JBW*K-[XX!P*-=>E:"L]JH<>
  M&YT<0&/2@J@JQ)D*?6RI*,"!ZN)\J#K:@]PT!':7AF"D<1='6[*FQ&`&I"?%
  M&B2CA\4<_O)$I/7[P.BR[O5SA]&C4VJI,,B.ZA)](!T]RHORH%"LU6`;0ZJ-
  M\:,\#TNJ\+:A<F\K&I<41`WA'E3A[T@S2U*I/CZ0<GWL*=?+FHJ#'2D[0+0$
  M8OG24&P]?QK[K^5OFX@@XVG:184%9L\8/^(!7?R;M:$J!3N;DIVN&N4%NE))
  MB`<EP+0,-=6D-&M=:HSSH@)/2\IRMZ8,+QOR,=:F#/CGH99Z5`6II'A:,^.Y
  ME*]_M4LW",C(CH/[=@NK)P_[ZQ.18BO39\Z2GS9]AC)?OZ9A7L[MUG"O0QS-
  MR=_2F"(<S"DOQ`TGB1:-3/:G8EB5J>Z6Y.?BW,*7$86YV5`ZEEEIJ`NYN3B-
  MQ6O14@`.D26Y/YJ([&B[TBZ<_^T7X<C7G]S^1*3Q\.S1HGVQ=GKC9P%6^A2%
  M,$N"IQ4%87G%(D@T=&#)TSPBE<F6#GRG@&'#AH5Y(;H8[&!$N0'V5(<PY8`H
  MKZO#BC.V\$B)CA2B[#A_7KAPYI1P(PNW_V#ASUN>R*D?OL#X7!R73AX1![O@
  MW,;*ST.PE'RQ5%155<?$N9HV1<,=RL3R*4B/F<<W,3L*E0=G)71E![OB@+!E
  M'SHB+29DKK6^5H\)?$8/A'HRO!PHT=F*9M65'.1'*SN>%6YE,K<\D1^_^J_P
  MP>LO]HV#^UX0[59?*T-*\+`B+WOK<P8Z6O7I\.>2L)'U--4F<Z_4CGNC<MPR
  MI&Q$1&L&Y#%W.!3ZPIP?M>S\=YLS:=0,)U,=LC<7XUG1&AKJ)C>RUO_04ORC
  MB4A1.]GQUMX=ZYR,-"G4Q8)2_)TH,\2=])0%9HB7<T-;C!9U(MB&J)X8\)DQ
  MHAH3\:0H>&C<K[>,CHI2?/6E%Q4W+)^YQD1#F6ST-*1H8+#D1-VQB3`M_?Q3
  MJ\5XP?G??A6_5`B603*.U;Q(;T(4D+DJ-=R;L.7+2?P"S-Z6/(O*LA)3''T4
  M["CZ1GE<2S.)*3DAINV%"#!_W9_OF3^=Q.U,1''!F-K_QOI[4&*`*_E!NYMK
  MJU&DNRVYFAE086S0.7YQ5WY$RUTX\YO`QK2I4Z3@AMJ[^_:F%"9%'4Z`%QD-
  M10IGG4G.R]G)28O_CS[W+NVDH..M3.)V)L+N&%NK'AA!/)[!GGW9%W&Q-+[J
  M@HAS0V$:+9T^]E>^I*08E/*\40._'YP;=V3IU!$?</LIDTN.!5X,_/S\Q&`E
  M\YCX7I+[(\_I?UI:?Q*14^43=>=+PH7?707^=V49CTS*!"G<$>_L=KRW.QYJ
  MO)N/?Z6'^*^8R#_^T7\BEZ$_I!.">7GB*<-_9N/*E<O(UOX@=%^^+!S:_:SX
  M=Z9S)/=6^EG\7SQW7.Z^SF=O:^\0+B'BWMW3)?QV\8+!:V^]J?K2RR^K_'SR
  M5TV^[\1C?,^>/=HW\]FW;-VL/&7R)/GK]NG?.9$N_.]%'*TL4W^19>LOG)=K
  M:FI2E8Y>_L74^"FGN^_Y[:FSZ@9LGE"1NV7#RB6[D$IX[N$Y4U[9^NB#.^<,
  MK]CZSDO;-^[;]THZMZ!U^'L5[])$FN`XM>+_VX7VIK-2ND_EX+X74Q;4%AZ.
  M=[2F<"C;\C`O&H[`P\C,&!J7GTCUR6%4'.*))+,EI<%Y8X$'-NQUE2@0R8%E
  M4T=<X$Z:ZG7)_;][(NQBKB[.RE^__\:J(#,=JH[THN4-9;2DKIB&I83U/+-H
  MZH\+IXR;S^TR*>?"GI.X/1<JDW\)XV%):\E$^MU$V,6YN2RW?]^KJM.G396@
  M#7)_-!&6K^$34<2S"L)#\O@LQ;,7SK,`@^+XLHPT3VV!BF#>U\3XTI2B))K4
  M6/L0_E;`?7GF=`5R*\"%VV:2&6/.(R8FW)JPY*_I\HSD[Y<6"^>P+SYO1,7H
  M`Z^_/'?.U`E!FIJ:!B8F)LP44>CHZ/S=1'JH1U@W>XQP\=QOXN^'#W^O.F/Z
  M-,7ERY>IG3CR?=Z<X37DJJ=.`Z,\$;<*)@\7QT:>:6$A(%_X-_;<C-?A)H\J
  MMPI4^!=5D,&)*,AN_-\%Z*3'OGW[%(_\\%VTLZDNN9GK48R7'2V<.N8G;T\/
  M3WX'%$_(3&3S,YL47GOM-0U^014N:DT/5V>#ZMSD=SQUE2D?@8>20$=:,"B+
  MB;J,+Q=/?E>U'!P<5/+R<A6DX,.1[SX7'AQ7)^QZ8KGPR_=?".=/'1=.'OM>
  M^.'+#_[\^&UIZU#%W5/[SX$WC3O.'CGC;Z9)6?`[HGP!'0GVI!$%*6>0D8OB
  M)XSBDL6+V9=7V[#A:>=G9P\_-B(M]$1%I'=3MJ]+<TZ`2V<<@S=@DY8A@K*H
  MOI@>&%5SCN=;(GDN7U-"X73@2&YM;>J+HGSWV0=_?2((-(AB>^^]`RZ>!DHT
  M=W`.?7_H59*3DZ-H^".-N7'DX>Y68*ROX_/9P3<OC\+)8@_7M3[2AQH!P!F7
  M'DJ-\3XT%,FZ<L2VAB;Z4R/`.IEN`.J4%6[DD@CE:UP\:;J[>5SK3D[DS+F+
  M!E)*^,!SC^"E%K)&(#+04I^&9$=2FI\])0>YD3)>\[+0HWP_1ZH,<J6QB&<U
  MX@2JQM*I#G&A(A\;RG2WHA+X\O4)"#H$.5!^B-LWW*1WZ(M4`FG4W?4W3`01
  M$]5I4R;*'__ABTF+&XOIU?6+*-Y1G^I3_&A`O!<02N84@N"<#R(IJ4AJU80#
  M!@77MQ01E2I,<BQ2=4.CO6EHG#]5X6\IR!/F`18R(-">1F1&TO)Q0YJYGR,Z
  M9"WG3ET+T-W)B<B8YFKO[7[F7>:FVJHID)>!,OQN1!>AA&R1CF4YQE)@NLJ#
  MW:B"A4:1\VV(<*<:+*?!B$3F89(ISA:0F#/%.5E2JI,A@GEN-+8DHXWO#T-V
  MG>:F<[TQ*V14_XZ)"/Y^ONST,;0P-PVL*"\;E!SHVF*CITR&&HH4X68)6)<1
  M97@[4+*C!64@KE6!$ZG,SY;J(MTH&[BR=`]K,D6N.0CPKTA7:XJST:'9U;D4
  M[.&TE*<EF3Z0;_NC@!RL@!D5&?_;1#K;1#R:$G(/>@BV66>EI\0[VUJ<\4%`
  M+MC)@NRT-6$VV``JYH5PJ`%0=PC466A2GI<YQ=@9D(N>*N$HH@0LJU@?)ZH,
  M=1)#J/C,6JZ9=<5,\)]&&%N$;GRO7PY_^1<G<@WS)L]U@_8G[[^QS$!5@:QU
  M$!*RLR!?<T,Q9&H')9>,I32])(YRO*S(0DF@J-#`^2ZVYM.S8#LEX#`8@IAP
  M)H+=^)Q"KK'5FIHOR+?=8KA4'%A^O_URY*]-Y,+%BT)G=Q^F2U]#3IY,L6<2
  M$:3S1CHA!?N#H]0(QQTE>SKTZ.KHU+.@@[.C7::_@R&E(^:;Y6%&]C96D[@9
  MPFPC96;/M76URXF`/S8NWTK\MT/X]K\'_MI$+F(L:&0Z3-#P@I8/L-:']:E*
  MT=C@H0[&9*VIQ-XXE-_M9&[,N2;`&D@"]C(31W)AL#W5Q'M3>K#G&4LSXT`I
  MR^3K[2WF`5L12F*I_%L)ES9?.G_[$VGKO"PL'ULE(A[9A=U@L@0C]NL/O<*D
  M$0R@:`G0*HE1(=/Y:<2"=0:__OSS,E\K(P2ZK2D%^L113X7R@UU$<SPO"%:"
  MC^/5NK+B%&Z"B_;;K4[DEF*_TD,*8#>=.BH;Q%:/`JXG!!@17T?;KL28R,7L
  M]V28(#Z]$<,H"?3(]I2ZHCQ%.9K2D(KB=?B]OC`FX`=])84>6TUE<D;`KRHF
  M@,(L=!C&P9T?Q\HWPYS\Y8F\M^>9/FR*-#[:MW-Q''(?\1@Q0=XK"A)"=\5`
  M&99$>2.4ZG226[&FT='1(CC92@=2"'>CZO28$]S*9:9)$!(]"9X.=@];JBM"
  ML@;D8*1%&NIJP?PF*-W9B;SR7%\D_A`&NU/KETQY.1*@&C?$;-D=]C16[TGR
  MLJ6@7F1HI12$SB\H8&:U\A/+9E)1C"<YZRM(\!4G'HDWX0G0``,=S1YG4ST:
  M.:A\"0_!JM^12*/TD$67,-^"G5HC*POWL3WAHJ]!:0$N5S/\':@HTI,,=+4:
  M^2:W$:&MB,1/GS%#<>'\.?ZV1AH4`@28LY-C#4^WJ4MN[HX-*T<Z(:^NK"!.
  ME$%HO-A^^=LFPM^HF.CO@B"V#J5CLZ;`&$P+=*+H0*^G^=UVYR:Y'$\IR"V<
  M/X]-C%*#W,G+4P01,;=4BT?J%4*\W;J9<IT[?NA^[L[:W0CC^S]-!"8ZHAYG
  M>M\(B<R:-D7/T4"-G+">*U)"H+'M*-C'?25?^[Y2[/?"Z5]@`%X6?CMS6CP<
  M/'$(Y$?Z4G)<]"Q)HW]TX'5APX.S%SD9ZY")NI*D)`-Y;D3^CD[DRP_?1=CF
  MK(2>EGOUN<WS0V`$)L)L#T8B-"S0;[G,)`RNX8S;1$S2B1^_%4V<)Q]:^61Z
  ML#N-&S3@!#^>1=S(YD=7+C+")$("?.NYI\BDIWS'HO'L,7OV;'F96)/F?_;M
  M'I8<YG\TD&5PX4"Y.#E.YW=1DH3BQ;.B].2DB;3WVFJ*6]<_NBS>%W96H,ME
  M?JJQC2Z_9>.3&05I<1(:S_MVDCRW.A&YS]Y_JS0[)O1D0J`'N5@8D(V^&B4B
  M66.NK4(FVJJ2X1<IZ0R>Y-%HAPG.;X*85I@WLNI32^!(DY$L<M!5ZN%WWDQ*
  M!+$HB+65E1N?G'*G3`CJ3DQ$P<]:O]O!4*O;"7!V'VNCIKPH_Z,-Y7E/X&]%
  MYGJ:'<,&9)WDZ]VD7^Y#;L>ZE5O5%.5[XH!V2`6@P-?&F(+L3;O@#M3P<AQ#
  MF2B(&M?J8O+T3D]$G@<6[/DI$\+U0P`['N,C0Y(<<>['PQ<9G)=((X<-C96*
  MD1CL]#_[7QQ9DQ7SXYP1U<=RTI,;^8F6RI5A7ZZ1'>D<)BEW#69_9R<BQ\UV
  M37Z*Z''?09O?/;W00%\_G$(7DR(":4QMR>-\TE+JC3U;<9W@QX]E&RX)-1$<
  M(*;=>B<B3>+OF,B?/13XI.SX9O?A7UR-WP0%F8"T%I>`$I_DW4\K_,E#GH=R
  M=+BT-/@$[KW\R/T<XOT<XOUQ7R#_-('(/L0DVDT,"!%GW='.5=S%ZQ)TLH/E
  MN!A26$P/`63+,BOL.BR[(J&&I;S7C6#0LHD]*:DGY8Q%G/?EKC\8O7EDAOV^
  M!*S>95P/^&\V5"\3Z9]K:[;9!/SWMS_\H/+-#X=5CIPXH7;\Y$GUS=NV*G1V
  M]X*VV&!!W8YV9$';VC3:VMITNSH[!4)XYFI+LW`5\&S"G'H0Q3YU]+`PI39/
  M>'KY3.&MW9OOS-G[3Q$(2W:V=Z`$"S>JM0U1OM8;C+9V>?Q-`P+1NG3Q@MQ%
  ME-5=.GU<5(*??_VU\J^__6:R>-$B-6Z"*,&$UURR9(D6HBA2[D]5QL+5Y":+
  M]BT,+3XT75R<M8R-C37*R\O%6G3VV=]]^[6=3#Y1[H8`_W^B0,0"`H2(+C5=
  M$D'/[1B788!>NH`;WRN`O@D_LG:U4D!`@)(L[/W`@0,A/W_R_CLOKEGP]O9E
  M<]Z>7);]3JR5SKL5"9'O#H@..Y'HX4AI'O94!I>=Y?TKH_U0>.!+(W/B:$))
  M&HTO2J5QQ:DTIBB9!@+OG\90AM&^5!`71.69L51?DM$RH;[TZ.KY4SZ;-:+\
  MO4_?V__JWA>>*^;^G&3B*?>Y0_\6@;"J#H9)8)4=#&!QN?F<,!W)MY7+EH@,
  M"/8VUEH_??#F_L<FUU^L"/=J<])0[8D#++D`M=03<',G(ATZ(2^!YE;E(?49
  M3)7AGC0\-92F#$BE^8.+:";2.W-J"VCIR$I:-KJ&5DT>1MO6+J2=3SUTJ"0_
  M9TA82%!)9'AH87)B?/&HX0T-"V=/F[IRR=P%CZ]>^M#.#8^^L_O9Q[]];M-C
  M;S^_\?'#ZQ]9-9-'QZQY&$/]=\P,MRD0'2X0N;LL$#D9@<C)"$3Q4DNSN`OV
  M[W]5-3$A7F7S4P_9?';HW2%S<3,#C=0HS<6**H"W&(8<\],S1]!S*V;2U/(,
  M>F!D5=.*B0V?K)P[^2D79\<*?$8N1A9/@"1Q-&8LQV1$\K)9:4A<&D'<C?3B
  MKJ0KSP*Y\AOOSA$%GCR#ZL(].E/N#*GV.4*W(A`V<1XWE3OYR\^6,M4N:F(!
  M9&Z.SI[=NRR'#*G73$E)49$]&V]'(*P$Z/3//Z$<X0ODK+N$KJXK[-I*$(@6
  M$_S^?:\I_GCX.S69,U=.AO=#Y:FET[-V;EHWK"PQE%AI13P"U0-CO*@>N7.6
  MG)E5G7UU0G71F[G1P<L021_``3!9,HB=8!Z;<N,Y=%L.>#'C1XP1]]D-9(:^
  M3"Q`DZ]V->G>\"-)0P:M*ND7#?X_2C?$H-Q,(+BA0/AT2&]0VK'^X54)P3[D
  M8P=@/_*#`W-2:-JP@9]N>F3Y@C4K'TSA$S#B%U:5MN*O)XX*)_Y$(%=[K@KO
  MO/"L\.RR68+L#3]^]"=CEJKP!U[XPT/O6THZ8-FB>9:?'GQGTM3ZLO/Q.'I\
  M#-4I%?G^^CA?JD1VN2$U"&=\[)6,Z.!%''%1)(-!#N$KVA')7BO4Q9M:6%BP
  MFZO)2D6MK:U5;P#DD>L_6%T+RSBSVA:6K&7U+2QARVI<_C#7^1>M++EC1W]2
  M'UQ7*P)^#G_Q\7Y[8UV*]+`E%Q,=8C'H>%\'"G>S`NK<D)2`ZMCPR/(NMHT=
  M'1U\N7!T9;:D6%O6;W4KR"I9OGIT=NW:Y?O9)Q^6??7I!U,^_N#]\B\_/+#U
  MLX_?G__^._M'KIX[X>N$8&]R1A`TTLD<M#!65(S$0!XR@>-SHZDAP9=&9P2?
  M5E%69@'14AY:B^58:R<.1M+GJU95ILQ?CE5&R6(69*ND&'Z!54HQ#`.KEF+I
  M_[LBD`N76AQGS)@AOWG#D\JM%T^SLU/EXL_?_.>1Z4-Z=C^VD!Z>.IB^./`2
  M??'A>PB*NI"CI0DYVUE1490_N>BH4S6.C(4+%D[&JHMR=G;QVKI]1S07C&0V
  MZKZ\>U?H5V_N_77QL/+V=!>KCBA3+?+75:%(4PV*M]*A#"<C*@&.(M?+@K)1
  ML97L9"PBO?)\K*DTQ`FU=/;`5IB##,B*%@_.!?HQF@H"''M28\-9WFL0+^)(
  MXV>\&Z]8U),Y)N1[,SF=,F5JO:5J]YQ`]NU_0U%FF[(OKW'QYZ^_?&[5%&H]
  M^1V]_LR#M&'A&'ILT62*1/%4I+L->2(/G0<L1X:W(WF`FV!(=@R9&^H,?^6%
  M;9W#RW.QBZR)L3"P2VJRZC'DV\J!E:J/\Z-AJ.]C<**Q*<$T,L&?ZH'(&1@$
  MJ!UP4A5X'A+K0P-0-E0+?3`(@+"A@!_E>EM3JJLIC<Z.0&EI")4&VU%1?MY2
  MGB9@]2!1-C;6/GPW:,M&VEO.GA)8X:,$$KOW!?+Z6XJR"O/[3P_F'7IIT^D?
  M/WB-#A_<2T<^?9,:T@/(RU"90JQUQ"+@'/!GY(6YD(^E-H4"^I<3ZDI&2#W;
  M&6I0+*`>H:CF24#!6`;.^ER`;`I][:D2NVLP2(KJP]UI%-!V@P`FJ,,8'(;7
  M`)>JQ=\*4;N5@U1X39@[#62F:$HH#<"UL@'.R0'VA>V8DD`[&I45!B5N1E7Q
  M?CVYB=%C^<YPE"V;%0%NXFB#0%!3W-;RSQ`(>[1W=,JQ"B._7LB6QO[GGEHU
  MK2*-GE\[B];-&DIA#*+E:0K$*ZI;`8R+PY$2XFA((2Y&%(?5ZPX\)TMN10"J
  M$@[@0[JOG4BL409#H!@U9ADH+"T`Y"L=_%?#@)RMP&ZH\K>G><4)-!X[I<(/
  M-QDEBXVQOC08T.`1J6%4%>%#XW)B*1V[+0*EPQ&`@3%:L7*@IZJ0RJ]+#*+Z
  MM#`:E!3>RA/$@3R;H2L!*GX[^IUP^L>OA1;X+&RTPZCX1PBD7_*`;7?=$765
  M`0\],'?8RB7S'WMD[H3+8=;:!!N0S$%+9Z^M1!8823C;'4PT@;%3`.K1#"67
  M!A2`Q%MM0A`EH\BU$,=4OH\C^1NH4SH0+%G@"(FST,4N<:514,;ET!OUT>XT
  M&4=1#7;)``@O%X;#4#AI"0!2!9CIDI^9/@7BB,QG:$D(-1E0A#*\?T1F%)4"
  M&CIU8'X'0A45'*/GRDU6,;UTB55Q7;XQ@QHCJ>F4!`*:,=G!!/+U1^\)DPOC
  MA!7CZ__O!-+9WB0)19E;08;<PW3ESE#$W&D3)@=YNUQD1Q0H3L01`-0FTRV^
  M\(9]S9$)!:E."D(012#2R45ZEW$>9&'7>!BP\FL'D6PGW].<LJ$7LMU-*0;$
  M.UX`3X9#UT1CYUD"LL<JFLTT5(!6T"%_6P@SW)>*0#G$P,39.+IJ`&EEI0S1
  MH4$SN(D;Q:D)#"5P,>/-NRVX7O\!*&S7U:O"F[NW"%O7+/@_$$@721!`N8+"
  M(A%0OV#A0G8$J.-W(UM;.Q-NWKHLF#+J75-0*3B;Z)$5\(WN9H;D@=I;!SU=
  MBD!=2)*G(V7ZNZ&NW16H.PN@[]0H$YR,Z<`)YWJ8H/;=%-ZT/0#/IA1II4W1
  M=D#H`<UJIJ_;/:(DZQ@XGUIM]+5@:KM0!`HS/>R!O`"XIR+$$4=G$"5`=WFY
  MBB"&"LY9Y\.M*Q&N#NRD\#\+I)]P&!-3.\9%E*5?./.+<.:7G_YN@?3\;C!X
  M(V=[DI/Q(Y@Y:UX0%_JU!5/FT!]:\$M"['K+W`-M],D?=!!L)`(5Z(=CBE6-
  MXP/('KBT<%-]$3I<A#J"1%<[,L9[,R)"SL1&A,W!YU9S,S8?6[4['L=:+'94
  M"'#4N=!?%<!*AQ@K4TE*Y%.<\8MYW\&L>D-6?[2V7E)L:;W$D+F,`T"N]4X)
  M1A8SVL6BS\W"B9^^%@Y_<>CN"J0'_WOJY$E9BA:M55,;/K=%,3?#GSKA.&*,
  M$.RH8?1<WD!XN>-G]K=8_)X+DW;$X*IM7A[N"W6U-,<D1@0OGCR\X=EP/Z\)
  M0#>6\+@2@[%%Z.OK!XVO*?C4#B#V5!1N!#J;`-EB3]G^(%X(L:<86SV:7E=\
  M#!"&L5RA!W'X@N'O(JK,]+UP3I!&,[!/3<"KMC+VE[8[,1A5XD7A^`]?WCV!
  MG#US1GCFP9G"NOGCA:>73)'TC/KVU7,_<P#W`2.`"+4W%BTL/^P*]G,*$&KA
  M.%9ZF44M*`QZ)L#![$WNR!7RF%(HAU&(\20H9[&@ZJT]VX]K8]<DPL\)8*1B
  MV&5E\$]J8`AD^5I31;0731^83M7QOJ)NR@UTZ@JVUF].\G%<7Y:7&<_UGHE,
  MR%N6B$^N&8*Y'8SN_XSEO5,"N8+0Q[#<:&'L@!1A7&EJWY`$,K$BX[-@8('9
  M,<6(+6)A!3G!`Q\Z(.O;ROST9\/M#=L8J#,<J&V&$V:0VSA/VW:\-X='3UU0
  M)&;*G3DQ2'?VY(E?7*&/W(!$BG&QIFS&&<@(;FL+KM;GQ!QU,5`YJ2<OUV,!
  MQ1\"8?EA)[IB)WF!A\4'.[(&%EX1G-9`,YVK$TLSC@;Y^07Q:*LD(%F,C-P]
  M+9"?O_E8./'M)W\ZV''PY,,K+1ORDXX$L16,&\TH4SR--7L*DR->8G#Y00-R
  M-X39ZG<'88<41'A0&#B0&%3>&2C:RJ+T!WC0SYW?*/6H7NPSNU%:FU<O/JG"
  M(KBPSI+A%*;`OZG,35_/(,><+X,=;^G6EN9Y'HXV->[6Y@MM#?1^,E%1[+&'
  M9>:@I4I^$"@K<TE!+"X4UEN@K5$3:.(">&37A.M!L<3RGA7("^N6"4_.'RNL
  M7S3A)F.B^,QNW(OK'GC=Q\:,$G'#&.LBJR(QUE1K#_;UF.9H;]L89*/_$?M;
  M-'9&&D(A8XH3R5Q5_JR\O/Q@?F3%R/@-ZC*15K93C$N1.#)25:2JY"!BF.]`
  M"VTJ*\A9R(.'X3S?X,!7OR,7+C/-0Q44Y&-=[&T'.%D8G['45!%+VP)`DFUM
  MJ$-1`1X-'!-H*UQCN)5GC&+_Z[CC`F$PZ2[D1'JN=O]N7`4(X,KE]CX&BR63
  MAK\<"\N)'46A.+9,P1Q:D1C2[N/A,A6.XU?1J`#(0(IS8$(`4IT.9*TN?,(M
  MJ`(N#'>9N@M%"<;MWYMVU7IYU]:'\0,%.1I3+IQ&+PBD/"VJB<>N6,+(25-#
  M@PE3`Z%T-9;'YJM>C^\`NSGCZQ<IJ:KTN&&7NL'!3`WSONCC[<5T&".P]%)7
  M5S='4%3S5NAQ_B>,XE\5"*/:N1E]9"_@OY<F]_#G'RW*C@GJB$&12R2*6VST
  MU"@0BCP!"C8!<:MLQ*(R@*%/PLZPTE*\&NKEM):'QC-EXDZ&LG1M$N*#"UQE
  MW-C1#HGPVM45Y:@@QI^*X@)QA%D3K+2AW!J32*$U&(V/Q([#/T]U:$GZ'@>D
  M#SQP7-D::E%:J'>+LK)R!4>0Q_3WZN]9@;1>NG`SH4AY#>4-:Y8^R0C%XW"4
  M9*).DE'>QD/Q#LJ*HEA/^`RPKC04Y:_X>CBOXK1;N3Q'X<U!J;K24=$"$_1R
  M5_<U"$ZO4!1MK*VTGWQT[6`Y9)[!/XK/=Q2M-C\?KY'<]PCDUI18_\S2RNS[
  MU524:M3FQFU049`C3\2_+&&6ZZHIM?):9^E[>,@0["C>#IK]K@J$9?)8G0+C
  M<9)J%=CH:&7.SW?B[GAKS];!E=E)E]T19[)'C"H'I%,E"&.$X>@*$$U;X^ZP
  M`*]5G.NI@"MO7ZF,3#;)?YGWC6"KN^GB6:$'6<3'%DWMVR7UI3G^4X;7MJG#
  M!"Y%Z3+J:FCZZ"&?\!L;QGT//<D99)\[JCQ[IJVI`7E`&&H@H!Q357B$E]ED
  M\_"*A,:_H\+X6P4BA>,9F:@,)X$8WUJQ8,9*!]2OA@%(D!_M3TDH\PEPM$0L
  MR_JRG[?';"Z(?![L\[FQ(&2!%&VB0"1<.0,^'#_\M03YUGQXY=(B&RT4"'N`
  M_Q-65V5:U&D9/>3*4\BJ4CYGYOB13ZCP7,R0DLS?9$`,X1QP(!H1T=%1BG=*
  M$'=<(-.F3NX##_SWX-OQ;^_9O&7?CO6O+!XW^)6Z[-C7IHX<_$YB1%"+HY49
  M8E<ZR*][(L:$6%6H!PJ0S2$49U:JV<!SV2G<BK&3R4\HRI*)->-8O":4-CE6
  M=[)ERV:%HJ(B6>&KCQHYPCHWVO^"!]*W:2CAR(E`Q-?/OD>ME_=4Y(M05U<S
  MDX&TBQ&$V=,FAHP>7%EHH*\O55KX\-UD)%ET=UH8=TP@)XX=,=[Q]*,;G<WT
  M6FW!=NT%TC_&%^UG:T*A**GR!Q\KNR$LIVZ%T(@&C@_,Z$I#2=8O\0'N[5XX
  M&H(<+*Y"V39P+I80;HX:R*Q<N;;65N'";Z>%"V=_DY/.>RDI%AX<H+5_Y].O
  MC"I-.SVX(/DW#UN+9D:HQLY_T.53,8!H:0CEVQAH(GBIW*8@+U_4WX]!/D>Q
  M7Z1:S]#`P!26E`G_+EI2OE_4D;=1<W.W=XA8[:&JHJQO:6%NIZ.CX\5C0]&\
  MC"N9K_I4/E+XZF2F8Z*YN=E>(RTUL;:S-B^M.=#?+T-?2R-,2U/3F2M.?7XS
  M^L-@Y+_\X-V!T0$>W8AE$:NG,]76(`<(/@:91ALCW9ZT,*^6"=4%IV:/;7@1
  M9+OE_*C*X-]-,A`D[DTY";[$/GOJE$G*?KYBPDU1-FQRC>GNWA6(E$M7Y]:/
  M%&*WY=O<GA\_=OPU:Q[F-N,Y;)NBS.0D2U/#-FL4N%LB%&^#8=Q;)8GV"<K-
  M&NKJKOP]NC*FKKQ,Y-B4YS(".$`M@0L\@>N*<(E,")P_SGIZNE9\U4NT.'VU
  M3A@B.7O_FB?9<:\+1.@'TY%"&,K]AA(?DJ*7_E>%FYZF'';C:V-E&9\4&52!
  M(R.16T,^_!@SEK%NI.NI\!R&`?\,2RYT*RYPZ<B1)47JVVDR@I`9_WR!_"\/
  MN1O<6#-^4^UXGMN<.X*:PK7N8[+OE^O',"7+-'4]8OS?]/B;!-)?./(WV&5*
  MLN>X</_Q[ZK-NU_2=G_<%\A]@=P?]P5R7R!_KX7U3WG<$R;T+0GD=UV>I/I"
  M'B:7'"\&>Y&M_Y,=W<@L?OW?_PA7KO:(_T/X_>S1[X7OWG]#H)YNL5U()V_B
  M>J/.4+)E;K(ET6+CIC\LB>X=+<W-8E/+%CB&W5<OHR2Z0^%*3[?&A?8VV^.G
  M3VI]C7+H0Q]_K/33B9_5CJ(L^MO#AU7$DFC>RX(Q_C+<+TJBV3!CSV(9-*I_
  MNU%LV@.'DE#MQ>[?4\MF"\NG-`B[UJ\2/GO_]?__!-*?V[S?D&?/DD":\1TO
  M@_SP*EV1/W;BN/K%]C;GXZ=.FNP%]_ECCSVF]-'GGVE\^\-A[2^^_5I%MJB(
  M1YS%\=X[[Q@*-^9$5[R)$RL.QI>^;;O8#TWN^-$?=61ZG<G]JP3":M3%.O76
  M&]:IRS/2``C$$"72"I<8H>39TT)'BTCB*`>2`/W/OOA"3W):8V)C55F-^OCQ
  MXR5@G52GKGZ;=>I:LG7JP<%!VMG965J)B?'BYW[XP2&+&]2I_SL$(I+FX]JL
  MQRXCSQ<'?F[J'4H@#)!K;F[6>6;#>H4;E-(I]2NETY8H@@"2,-BW;?WL%9,:
  M-T^LR-D\KC3KV<E5A5NV/;IJ#\CV=SP\9^K.U3,GO;!Z^OA7GEHR9_>S#RW?
  MMO6Q52\N'E^_\\&IC5MW;5BS]<-W7EMUZ-"!BA4K5OCRF)TASV9J&1D9:<K$
  MX$2A_'L$PJA+&7=^1[/0R>H^H"LN712)`Q2:+O7F60I`;#Y[U@PI9",1I&LU
  MG_SYB0]W;7YKR\(I;V]<,NO=+'>K=Y-=K-X=E)'T2::_5U>"BZV(UJ])"*:Z
  M)-8PP)T:TB)H;$$RB`/2:5Q1BD@<,`RU[GDH,,H*`Q\SR`6*\;\U^2DTO"K_
  MY(()#=\LGSGJT-,KYQ[X^I.#JT:/&NG!A:,E6QC[[Q((,+67K[2BC!ID!JV7
  MQ,X,'<WG9`.=XF[0UM30.OOC5RMVK9S[_82"M!^R?=RZ4P#N3K"WI&`@43(]
  M[6AH4BB-RHRFQM1(&IX>C;*Y6!H'WK:QN?$T*CN.*L&NRI@=LD&`G0B$31)X
  MI#.`KDEF(')+AE]&2TECM),T`=&C@0K9HZS"$Z\SM$MVI!\]\\1#XY!CLNF'
  M.Y;_UPJDJUT$J,F]^,(.J4>!ZM&O/LU[9=V2"^-R8IK"+`R[O%&<FH0,Z&#`
  MB:9@M8_.B*89I9F@ATX'FMZ=ZE#M-2XO5B3HGC.H0&1R6#"DA%:.J:$'1M?2
  M4PLFT]Y-#S<MFS=CA8^G1W%H<%!1>&AP?MF`HLJI$\>,6KYPSNRURQ<^\,RZ
  MU=M>>.;QKW9M?OR_8'+X[W,;'W^U8?"@%)YZ,)6I?_QW"D0VNASF[ZT^?>(X
  MD]V/+D&S2%=RU)"G1'L3FCX@B5:-&$CS!^;1(M!E+`"=1EU,0,^<JKSN'0_.
  M.??TPJGOKYX[]:$1]8-&:JJK9PO76H-([4&D%B%I/'LJ)<TBA&OM0D+XSV$R
  M(Y0GU;PX#NV."$0-0P4"D;O+`KF.5D/Z'0*1@T#$,_CA1]8H+5^^5&75L@7Z
  MV[=L<GA]Z^,7"H$=#D")W4"`,&K`U+MP4![M7C6'5HVM!5@[OWOQB(''ULX9
  MOW](=?EDU)84<&A0!D]+)W"D3`R'"T7VH]4(XS<^@"?</&1H-21J#7?^ND2M
  MX<:%825S9"G=E@YA-X'=<&3<%#_]]!/E7DZ1?1)80>&U5U]6E4T:_2\"Z>GI
  MZ2\0!=8K!C\K7NGLD.<[4YGUD&%_?_>]=Y6.'3_B(A4.K9P[U7']\IDOE<4'
  M@=E!%=T><"PE!M)@X,0&Q_O3I(($5.Q&79U26_R?Z/"08;ST+8\C*).Y`"(X
  M,D7B+Y&]T5+W7JG_C#U/N$D4'";<HI+M1V/._V[)T]:F_4`6BK<M$(;D/GGR
  M%^V7][Z@+6.IB'P>NYY_SFK]4T^*M*\%!?G7->BY'8&POWWQGS=A*;7W\IQT
  M76&?H0Y!J;)=\=,/A]5>>_4EQ1N9KX"KFKRR8T/IVOG3/W)&2QDW'27*`MB[
  M,2T$2M@;0H@@[(:+U5F)ZWU<G1JY('+YL1/'5[L_7\7./+-I+9,RELQ6PWX\
  M)WK<5);X2V[$==+??Y$X461K5&[9#U'`RNRS5E[;]6Q(?KCKF'4K%LWXZ,`;
  M\_;MWC:"?>&&^CJQ?"PF)D:W/UW%9;"^W8I`V/6'Q7H(K0PD=XGY%6<Y_5.K
  M\.SFS0H@OM'>O&FC\KOOO*7VZ:>?2MV/U-[>LVU<?7;4UI*X8+$J.![%0"5@
  M>QB:%DJ5*+F>.RBGNZ&B^"$E)<4RCEC,X4=2-$?3>*JHJ+`5;\4P79J:&D;\
  M1FOWN\FR#8U4;I#]E.5%D6UT]&>IZ%OWU+$R^XA@/_WP_<CQ]17?>]M;H3&2
  M/66@"G9B0S7-&56S;M?V9VJ]/#V=^7;4DS7GV/MO52!3\J-E@WUR!P^^K_[?
  M3SX6&:@_./B^\=JU:Z3>CVH_'?XVX^F5"S;FA?N@%D6/@L$-7@82@MIH3QJ(
  M,;XPEH;E1AT%GJE*!L>;PG6!/S^&&&K&U,[.SE@2@*^OKSK_[C?*X5\W?OCT
  MH'`6#$873O\LG#MY#`TV?@+%]U?"3U]]+'S_^<$['\LZ_/UWHG[8\\(NPT=7
  M+MEFK"R`1L,88#E38@S6KJ;:E!<;3#F9:1=>V?+D.VM6+*W@9ZJ1+(#A9@)A
  MDSIUZK3V"80QZNOKE620+++T>NJRWO1_#[Y5/;NQ?$=!1O)Q;]0QAJ,P:`!8
  M'E)!(I#."GG"74!&%DGCRC)8H5`EWQ497#D'<%U@W8_5385U)V4"V+AQ?5^S
  M=#::4;W+[LVC,\<(*\<-$I:C3GW3TIG"VR]L$NZF0,05\,TW7['S4?&G[[_+
  MG35^9(LM,+Q!#F9D#<0BH]6/!TT&ZS_KRAJ-^'K2ML>6[V7*$*$'9SYA3=GP
  M`!/(#5`EDCX2.:4@&+.#!]]+_>K3CT9\_O'!T5_^]]#T+S]Z;^.A_[PSZ,T]
  M6YX?655XP1..G#],V"17*Y%BHPA-?VJA*\9`5U0$V5PM3`Q?RH51R'=%&%?.
  M-OQ[Z7!!*\ON`D9TV=)RX7=,#NS>/#)CU/^-0)I:6AVW;MZH</J7HZ8???B>
  MSL<?O&M][N0/TQZ9-XEP=E`U6!6&P5KQMS.A$#>TJD%CX%!P$V;XN:"4S>'R
  MPTOFL5*S@+"P,(]^IIT8Q%NR:)&63`Q)^Z>#^Q]_:?7,8^LFUAR;41A[?%!"
  MX*G24(^+91&>K5F^CJVIWHX=F3X.W6G>3LVQ3A8]">!6B07IS0"TP"E&)6X-
  MCJ<I92DT)"T<+:8\>C(28^=R8>1QTS60*VJS?C6%O3BNRQ*M1B_SZ#TE$/2@
  M<SMR_(18L/+=5_\U:3I_,N73#]_U/[CGZ2N@9Z+U"\;0\P_/IY9S)VG>J%H*
  M<K4E)VLT??%PHOQ`-Q1:ZM#&-<L_#@P,9(K3]]'''D_,R,BTD+$NM"LJ*LR.
  M?/;!RN?7S&\;E!#<%F]MT!T$\O\@?56*0X@AT5I79'48@)+G+#0F2P.[0RZ:
  M*Q4@/%&,NO2R4)#/>%M1%EX;'.=-*T:6BL)IR$GX`A54C5P8N=QZ\N.FJ;1;
  M^UB!KJ"F7.0YN9<%(H:EC_VL5L!S`/5U->HG?_IRYHS:+!H+S_:K-[>!;T2-
  M'E\TE3Y\90N9ZFF2D:8:Q8!9(1Z-S4K!V+E\2N/9>3.G+@2\,\'2S"302$?3
  MX\U7=[V]=_,3M'!D%64#)>^H*D<>&DI4C$8$#6@]-`36T'"4-(\#\<RXC%`:
  MD>2/GF,>-"C"#9PG'N#.LJ="D-/4HORY+M:;ZA/]$&L*H@(0"$19:E%)=.`O
  M>KHZH_^@]*$/8MK-3''PG?PC!/+^P0^4^MGX*I]_]&[F9_N>I?=W/TD_?_$N
  M;5XREE[;O(:*T3$H-=`9J'A3`*,MJ3S*CX+!TH/:<`C(=N>$X77;URZ<2>6I
  M462-`!MC;5!@S`T:JN"[0G45WM\8'T`-T3XT*BF`QH"@LA$WNQ9$,J5@:QB`
  M,8AUM8/E5(D^@]40V@CX%66@X\@%MTD6B,T6U&12!=B`T)/S>Q2/-DKE#^IJ
  M:D'HU>;0OPZE]=QIH?WB>>'JE?9_AD#.GK]D_-HU`C.Q-N^C]]Y(^?J=Y^B=
  M[6NI\_Q1.G/X$*7CR`BP4*,XT"QYPM(J`@O/B/PX,/2XB_09T2">T585&P*1
  MCHH\2A=`)H"R!D;'5\K:".(&U^)Y%#SHD>!('`8"LWKP9%5#.5>C#KT&O%FU
  M^*P:O)8-QJ`,,`%E(9HZ`%1^.:CD'1CA24.3@[%C/$3&N2P?Z_;R]+@-0.M7
  M\;($+^X5]Y4Z7^/+PD"8_A\A$)`#R"9R%-:N7&;XS:']ZP^]M(&.?K*/3AW^
  M@+:OF@Y^+",*MM*B$*O>'G1Y("Q+`-F8!ZCZ&)EP``H^#="G+AC,H"%@<XA&
  M,6@*VKCEH*R@`(6;I?B?0:A%K$,.800XL89&NH/`S)GJ\3F#T8^+D9B50S@Y
  M,&-+4"A:A3P#X],=A/_-QS&7@UI&MLL*_:QA77E2%82:@%+L<:69'PG7.M](
  M`A%WO:Q`&'G998DKZQX7B-KTF;-$$S`_+T=A[^X=Y@=V;_IH;'XD/32YEEYX
  M:":]NFX^U2;Z@O'9E*KC/-`9U)\J8STI)=@!Q3W:E`$RF"2<]Z&PAOS`VN`/
  M/R$</Q>',$H_?QQ%CI2-\ND!$%(YA%@&Y5R*5=X(73$I/0S"\40#3@\:',&H
  M_IQI,GK`CD)2:&A\,!CD4-'+A`'AYD,7Y7GAJ`23715H-JH@K/KT*,I.B![!
  M/7`[V;KSUO.G!79DM8$1J%,D7?YG*/4^/X0)A$UFT[J'?-?.:/QQR;`2>AG"
  MJ$/R)AQD+U4Q6.%)WA0+-KEX%U/R=]!'S1\HDT`,8Z'-DC+Z8O5M/&@V\K'R
  M!R'@QVYB(6YF!FK-<^!<EF.5U\-"*G(UHXGHQSRG,([JV-&%W3(A,QR*'7V:
  MP10W"'F+,;@N6*DI!?7N@>A+F,)\$%RO-A;];+%#AL`<S\?.&UU?LXP[@;+%
  MG`J,3>ZWG[X5SO]V0FCM:@=-4]L_0R#MG5?D9)Q#)5L;:]W_O/'BL.TKIG?%
  MX>;*\?:8SKKJ%&"J3A[ZRI3IBR)/W)P,*%AK.(_ZT!L!H,Y@1#$YZ.]6#L5=
  M#)U1'.`,R\J!TO&W`>!BS,`.&@0E/1S64RU8?DI!#S@<-W<H(Y:!8,IP;&7B
  MFJDXCE)@.)2&>%"XA2%%P9!(P.\9;B889E2*_RV%MUZ"([!Q4/52[@Q*5+7L
  MV%*\@-UQZ<(9F/:7Q#ZB4CM;)IA_P@Z1I5W22(B-LEHP973NL@4SIS[SV(J/
  M&K*CR%E+CO1$P2B3)9I'NH,0,P[<B0;J4.)FVJ+N<$"]^@#$F@IQ(^,<+*@*
  M1/4Q4.ZA)@BYX*A*L$;W9H0\QL+,K0YB"MV11B;YT?C,,"I@_8/]T)$6UE@9
  MC`;&3Q($ACHWU!6F0JAY8*>+L]'%,0;R9%AH=6"P+H8Q\,"\V9MO5+?.Z/V:
  M071P(XJ_:T*!0)K/_X[BC]V;Y:.KA15C:_]/!2*6M]G8V$@-F\PU-#3<W5T<
  M8ZLJ!E3%1$<-7#*I_A"C?W5D0M%7(7,\VR,A%,T4/)K..J*5HZC,`UQ`FFE/
  M`R"8"-0>ID&'Q&%W,.LI%Y9:'HZY:D1H1Z-3=2$LN'R\G^V,+%AK62`@\$:E
  MKSU(T3R0]T[&YR4@N!F"XM,HL*#F0(],*(H'`68XY<(`B`X+F20C$)MK`CDO
  M-"/??C/.1=G6PK_OG8SWH%<(VR$+AU4(SX!]^_]*('W4%%PHIMSS]41A9HBB
  MHF+<HDF-K.TN`HTZQ"C^7$"/%`'S-@@WS`\DRS[&X,=RLL*QYHS=XDUI+%*,
  M^%,$F!_"P3C'^I87>5N*WCDC4,[RQ/O@N?L:J2-$8D+>QAI@J%,E:PP[?4UR
  M--`&18<+2J+!N0BN+.;)#\"1E0O^E%&EV=^@RK:&YSG\9(\L1O%W:P*Y^6@!
  MLJ4)G_'XG''"6[LVWGV!=+:W_*Y$#0]#'A>RV[Y]&[/[`^N+4E\1"SI!HNR&
  MG>%FP2PK"W(VU"97/6V*=0;G(N)>[/AB]$B>.,IBH?"C$)/*AY.7!",AT]F8
  M\L!6G0GK+=0,W(JPS'SQ>5:@#-20DR-&/.,%-M(,Z**4`#<8$/94"L[>JDA7
  M*H(14`$]96%B.(%SJ"3P9%-?$^$[(1!I7*9N@>VX;S]X6SA[XLA=%`@CP>SJ
  MZQ"H,'_!0HWT]'2M:"2BXN(33"26G?S\_-A@]+S64U.$4$"Q`4%X6QJ#Z%('
  MC8Q-*,[-'D>-,V4%NH-:"4<0.!?]P<B3`P<QQP?*V=6(BN%3L!L<A7;L46`E
  M#3#7)B,0S:2&!9S-BO`[::`JWQT(AH@X[#1_9RORM#.E3/`N-D#_E,!2&YZ;
  MT*ZOIS>4ATXBA&NM>,44PIT42%]_^YXK0DOK10CDA'`.K*2_G?CQ[Q;(-3:Y
  MRYR=-#<O3S9LSE:??MF`$J\-:Q:SYJMDIJ4"LU<-.H31_#%F.7/R,H$)#,LH
  MBH7LH1?B@&6R`.,HZW,\`'[+K`'Q-"3>A[+1A3W/UP:TLKIDIJI"=<4Y'R`D
  M,HQQ:ID9ZGP9Z&)#H3!W$\$L%`=_I@S!QB'PB3*PL[)BPY[@Q#9I/`$E*731
  M,60=W>^D0&0[OS-FTJ9+9X7S8":]JP)I!F:VJ;FE?S$GBPX;+)HU+4<7Y"Y6
  M:+ANH"B0+6K4X]PM1([%"!P_;F".8TRDC"(VP%*/'&`M(<@$,`*,`)BR67#Z
  MBH(\1.'9ZVI='5E7M0]Z:C!GC"OT]G1]R`F[)C[`CB)`TA\!WZ4ZLI>WMSS:
  MHQ-L<F-Y9C">YSY,)-H,QD;:PEA)@=F"0/X65E)QQW1?%LZ=^57XZ>N[+)".
  M*U>%CJX>6=-8<_.Z1S+\$3[7!GV2"UB!=$&Y$0@RS%B1\-*87''C63?P-$1N
  M(\%ZS:AB53DI#!.,-?X_&HRE!0G15S,2XA;QU5[(5WQ\6G3('D=C=9&1-!<Q
  MK$28Q0,C7"G108_F#BT]AETTA/]_M"PS751D1"_##U`M[5?:Y=JZT"CL"H1R
  M!3L%HXT]W\%=TXFT](]??G1W!=)^^:KX_Z]LWR`Q/ZC.&3,DH0`G0-B_+#&$
  MS-3DH3=TP4&B3M:PNJ)@V@;"061=$QA5+-LMR3!K)PXJ_C$O._-1(P/]B9:F
  MQN.'#BS=U%A5L<;2U*A.AC*#<5D%+Y\W<WR$N^W%:`060QAK'4S=S&`6]46>
  MQ-^&BL,].B8/J]FNK:59PKUT#^%:9P35_@RDLC2QET`[U0*NE3M#$8L!?,#Y
  MWWX5OO[DW;LCD$M-S>+_[G]ND_#`Z"IIERB/+,^*'P'@L340@BSBR[QZ!S#+
  M,9(QQE+*=@>+:\4@8.B-"'%%9ORO6-6,?*R.6T82+">!`]."S<W-F;?M]/#2
  MA=L9_R\C2`N!E\\Z+A2`9CP;AD`E,H:#X1@R8$-ZH$MK94KD-[GQX34\2]B_
  M>8M2=7FYJ%/:S@+_>^X<%/))43!WDHVT'<%+)I2[(I!.<)\?>&FG\-3BR<+3
  M;/3R]BK-&U,7-[ZJ`):1(!Y1C+,W",Z?GZ6NR&;-!F,J97R]3"C^%KH=Z((S
  MG.N(3'[4!/;#1EGN>W%7;7E.6JLS:%\C$4+QPV<4H9=("8*/K+=4.CS^,?FQ
  M:&\43P7P]@N"G7NB'4W;PNR-CV5%^@_R<G=UDV&.^!WIS9E?CHFPHSO-V7N[
  M))A_22!MG;VE6R\\O49X>.9PX='9H\0A$H4U5L:.KL@F1B[&B#`976RP+8XJ
  M8TUPOCO@J`+)/G8*.\X2(!RV@VIRXH]S19PDD_N6^ECIO_+2WK#]NW8<3O!R
  MP'MM*!;TLP6A[O`Y?,D+>LI*70%Y&6WD9^PH&W$OALF*A,"9PSD&K?"J`)I.
  M=+?KK,N(7V9B9.@J7-\CZ[IN.W=:(+=+$WO;`B'J$79O?DH8FA5Q'8DR)U)6
  MJDJ/C*T$;-/70D<\GAAWKQ=H_[P`S\]+3UZ3ZN=PA''U,H)E]G?&;NUIJ$+5
  M`W+7<J8?7Q[JT)=(9;[X^(/B-4L6]!C">O,'_"C-CX$IT!`&9N^:*4.;@NT,
  MOC=3E>\P`)^BAY$FA6(1N!MHD`^B!D[07PR5,CPKEJ+@LV3Y.C4]L7CV6AFA
  M&_;/L]_S`CGUP^?7C7/'OQ.:3AT5+IT\<MU@`MFY\;&$5!P?@;"4&+LUX^=%
  MJHX&#\AY`<C`46D!3A\G0IDS5NMXZ(!,1(&9^9L7X=[,>;?\^O%=B2;UEG6/
  MCF1\\MX@1LO`>WRA2Z959C%^6K8UAT*1U]=FQ[T<Z&!Q24]-M<<`SJ29DARY
  M(^[EK*-&?G!4JU#340`01@CX>@>$>G;4593D\9(`,QF**$7A_Y#9^I8$<HNL
  MUG(5)07J>Y]]<H(?PO$XNW'6FY$[5JR?B6H/;A@#'PQ.]K$_'0D%'\T"BB@/
  MZ"7H1_HWP;^3!P.#.2A![&@0W<MLK?KFB\^A=B:XPPZ!RD3$P%+@5!8$.;4P
  MAY&#&L1V>$"OIWNZ.)2YVUF.\+`R?<%44^VR#3BZ'."HND*@L>B^@%V"9W-$
  MJA7`C)VZAJ/3K?BNO.-"N>,">6_/,\*!/9O^<+`)K%XPU6+3JGG'G725<%19
  M03]8PN^`(^ADW&IE:<%6\D`OI'?S$01D?Z]#9C`7&<0(>Z.K/NZ.4W@90`A7
  MY*)`\@L*Q/C9],D3G":/'KK/3$5.]/!9%QUW?=6>J<-JMW%00SJ'AP9Q/<0^
  M)QH+(<W>VG)TK(_K`3M#O2MF0%TZ`"63`%T4@5P*\WUJ2W+F<R-"HJH5PRSW
  MK$#6S1OS!S3C$R2:<?EI#>5.2R<-)6,E073\4H&A,E11I+R8P"_!MSO<TDA_
  M.',&TY'1BX+^J`'<)PF*V-O1^B&.HTKG,$]K?F0IR3#;Z6QZ=/5*&R3$8L%"
  M6IT42*Y0Z$-SHJ\*O7U%$GFH1++,[#E<U(L+*$)922DQ.M#O<3BK/8X(;`8C
  M6VD"/GB4F)W@PG23"40JW@F:\;_%RGH;K7T^>&.O\,'K+_8;>X6#^W<+!_?M
  M%CD:E\V9ZM20&PL+2QF<[S:B[\&BLP59::O9&>]AKO<Z:U>1"I;K1!`K1R$-
  MZVFN\P/W08HXCLI#]J9,1R]%KFPU]C^_\:$`3S?R@T%0`!Q7(J[A::%S%5BL
  M2@G4H*JB8JMQC>#2B.L'&QYD9*"'T)K\M$N*B`AXHC<6(^\<.;"@G>LOMAAL
  M4/O7UP#F;C/*W9)`&%LG@<SX]]SO5U'/URGVKV4W;_V33SC'NQB+UA/;`78`
  M8MMC1`;[S?6QMW@^U<_^*FOD4H7570C_P0]=W$"R.93[(,P9#%155;&7!25P
  MFG$Q"K!MX^/Q^1G)/YCA[$_P!<H%`#I;/14:5C5@K7"MO9$ENZ%F9F;J;'#!
  MZG!KRA*Y&[?\E(A6B)B\$=*Q4!5H]M2)6_EQ&<IWEAY/R-V;`F&%]C=NW]U+
  M=LSH72O*RU37/;+&VUE;7HQ/,:7.XE9,>6>'N/4D>SM<@:?>DX]\=RA6.'L.
  MLC?]BA]5.?S(<.G'ORAROV_>LD7!S<V5K5A=\.[NU8$>2$!+O70X@($(]Z^8
  M/O8G;A`$\=V@(U,&(1;SP-M7STY/L%PR=\Q[BC"/@Q#PU$&.)=C%DMQ<G(?T
  M%\@]O4-N+I#6ON35X+I!FL\^LNPT<PC3`&1SA^/G!&<P!J9M#)1P-C!5*=`=
  MV1!$,)PV+RN#7V`A50G7:,>]N5^@W7<S)-YW<(I(P<N'%TU_W@"Y>T^@(QM1
  M'\YZ\(ZHR/V1@ZK#N1FK[^!@+U)C-)T_TP?4B`CT,8Q&R;,E])`+?"-;I)H'
  M%.0LY4YIFDS^7=)?_T2!B!>4KQI8J35[>"59ZRB+:5QV'"0@E)X&A$DR!)$%
  M:RH-73WC$!C45U,^B0*:P;QF(YG?"#MN=JI*1U4_@8C=>]Y_[;D7K"U,R!WG
  M?T5*&':(&8THRS[!=5`T5^J&K%6%))`#[[RI'AWLJ[YBUMAV>60=&0&T,P`6
  MA0FA/0C;E'-AQO;37PK_%ZRDMRP01OO=#A.N?V<$?D&%JH$#]0M9*`-.5S;"
  M&D&P\UT1U2T'U#,'D,\H>.R^T!^JRLK?0_$.D5F5(5SA7G]400A]0NGJDE:Y
  M2GYNMD50@/_7]F#;3@&[`NN36).3^`NWM.*XI22UFP"-^2GQ^S4,+#;S1$I9
  M14E1;.("%FR*Z>W^5L2_Q^]`=?>L0%C@[>4M3PCOOKRS%]G(+W0%A9G-ET02
  M%\577M@9&8!=X0F!,'"#!YZ+@"+,@[^0"8"<#Q)4+N8&1U#CUR#C-[`SVP5<
  M[.:R^-N+9T^*/0%[!7(9&*JVOF.''2<C*_,/,G.5M:K(`[@[.<3K5RZ0A'Y)
  M*:D,3>FQ)3-$+%DHLI4ZRG*4GQC^-7]/#M]9OV\D<\\*Y-?C"+-O%-[?OZ=7
  M(#B^V!'6"HR3%';?]?1#WUK"W&6M(WQ13569%(PPN#-VBJDHC%!WNQ^Q,X9R
  M863P:B97;I;V%<Z+)<]\-%\Z)[1#1WW[Q2?"@I%BB%_LC+!E[<*])@:Z5V.0
  MER]%[B7<P[[;W<6IG@<GO81K/4"DHDL5QA6O("\G[EQX\3U.MI92OB59N-;J
  M2/=.[XZ[)I`NK-Z/WGI9.MO5)E3G`ZVH`30(`-<`4F?BV&(ZPQS]<"/\?+^!
  M.3NTW\[H+PR%_JNREW'ZHIA3./+-9WW7VO/<UJ0`-\?SOJ#%*(H-H#!XW7'A
  M@1.Y+^$K7.OL*9:IE9<.T,Y#S8HQTLIV2!G7%V=\SH61Q:V[ZWI>_5\R6]^R
  M0&3KPGG_$(D4634I,=$X$.>R'\K;4M`^@DV>W20W)*`*DJ+>1D[\=\=4?TJ)
  M&QT1$@4X\W8OG.EK7LG^WZ`R/?:(->):;(>$HF=)?'C@#+[S`F21BNRS5RQ[
  MP%@??@<[JG0UU*@@,TGJQI/`@YF29:4\?=I4^7M6(-@)<OV8=%1DJV&W;WK*
  MY]N/WUN]<O;$EPU0!Q*-(P1-(BD;^%IO@*QS4Q/>89%8H;<OK71,2<+0DBV9
  M;NLU&.1N)!#VM]^@QZ3CY\5=SP5G1P?]Y@XE78P>5*'P)>I*<C;T"TY*IJN"
  MJXN+YNQ)HY^)\+#IF3B\K@/=XC*YJ1W"K;)[IG_(304R9=($>9DXDMK[^YY?
  M_/K.#2]O7KOHE9'%J:].'E+^6G51UC<A_EXHC58CY+HI-]*'V+F>#,BH#_(A
  M0?Z^\_#>6FY62FV%S/H+@S5SN7CNC+@3^EEO<H\]]JA2OP6A]?3J!Y[UM#;J
  M9KU#XEF="6I&*G*2]W(%S7:@'7H3ZLM<0S4I(<Y\VKA1J2,&593*!"#=^?&F
  M?2<=P;]KAXAM(S:NF//)T-+LKZ)\W:[$!WA0,B`Z@0"H>:&Y"V)39(C0-HL)
  MY:!$P`'I528<!W2*]@`@VL/98:IPK;N.GW"MT7S?,77N]"G674<9SXJLPP[;
  M#9N?V:0@`R\2<5^VMK:ZN]:O>6QL3>%GL-8ZHM'JB!U5['ADS68RX\)>X@(1
  M>U`Q@3C8VTO7D=I?B(`^+2U-5P,#`Q?NB$HA][]E=]PI@<B=.74BIS@Y\J@-
  M6LRQ^G,?6$X^:%(?[&@F-EGQQ<^N\':=`(#61=F!EH*`YBW:YR</J?S-R5C[
  MJ@N$,VQ@R4$.R8GCX6USKFQ[\PTP9QDQY?G3IX`".2_;84<DD?GLT+L%2\;7
  MG:[)C#F='NE_SMG<H(OU'XGS`1H^-1R=X("F!P)>#]=/"@]8S7/R??D4M,U3
  M[8=+UK:QMI8EAM&59>*Y9P7"%)N[NYORP(R8\^[F>EWL!MOH:URUU=?HQG.7
  MHXG.98"I3Z+/U+&&HM1CD^K+WHL*"1C.;WXQSO8#ANK*5)P83O9FAJ.%:ZWQ
  MK&56Y'7%^DUB8^"+XN^??G`@9DQ%=K>QIO)5#65%&`NF")%8H]42P-C8$<P9
  M]+,U1K&I*ULL9PI38Q_F5E."%&#4T]/3=G-S4^X'YI/5@;(]1^1;T!KPGMXA
  M_(MJ`B=K:F5A[@*'SE=142&"K_8DX??MCI)Y3B(Q,,"O0DE1\:PY&-N8Y[YJ
  MZ>)5MI9F"3H::CY(XTJ4&U(CENLZ-C,A/3QOXAE<C^S@C0<BPZ>OKB(R1GC:
  MF)*WO?GE@6E1%V<.K_JZ)"=M!@^_Y/+O)'G]?4I:XO*2/ALMCU1O1/[2PDK<
  M[G&!*/))&?!,F@M?Y8'\6)`ZG4D*TH__G3EF/I59":^::D&?&.N1%XZ\RK1H
  MJLM+IC$#\ZX\L7;%(RA7EN@M^D!LO(&7>-TM#RW\KK$H^7!U1M1/XZMRCSXP
  MJ?&GF6,;'D&%;1&/S&9Q,SJ9>]H!,DP-VC8VUF),[/H..\T"N_&2"7]]AYU[
  M7R!2Z8$6SR68<Z4L9>.D'E2V_'6I%9$95Y8.A9G)>TS0!-@2G"ALV`+%J`:(
  MJ2+K)3@@>Q5_?W\NE#Z<,/]<3VXYQ?(C26)XB^2+@CF"KG:VMHY<:4L"[M_Z
  M2$X2R(U;'MW;`A'Z6SE\HKH\^"8-73ZT9<B[I/]EQX9-8W7IB(R4A"]R$J.N
  MYB>$]<1%AO2,J"I^O;&ZK(Z;P1;\^%*1X962[5]ES^-3OCQ%Z\N%Y,+_9LF%
  MJB=S!-ZD#]4_6R#]T>U_UA!,EE9;B=\<:95[J*JJAOJZ.^?$1H04<Y\DB`O$
  MLI\IW.?[<$$9\YUGQ8T"B49/(AC3N@$SVTV:@OWS!?)7'_+]A&+)SW<OOLK]
  M^"JW%_HUE>^W"/HS3LON1#49W-:_ID'8W]FN0K8/HK32I3Z(MGS%F_0'J-U@
  M=]X2-=Z_Y?%W]P_I<_*X8+1D])`.5^:RV-K_[Q]WHZ%+_Y4NJX.DU7Z_9=Y=
  M%,C-A'1?"+<JD/OC?E.P^^.^0.Z/^^/^!KD_[H_[&^3^N#_N;Y#[X_ZXES?(
  M_<>_^B%WB^-^&.NO;)"^OEU_4,]SLVY[;/1V,[J6U&/0+(:O[N#MJ&[4\.U&
  MXPJJ%EB;JS,GCXN=E7X^]H/8.Z:;]Q?K1KD)ZR$C,JFCC\RAW<^*O61Z0&S-
  M&ORP:[,F/^Q9ZDTF@OQENO7=;/3.X^;_^[OO*O.W3G2"NI5FUS<?W>(S;_>+
  M@H&+(M3MTOGS8K-31MS=VQR[4VR0C6=5UB3[7'.S`6N4?:ZMV88UR]ZT;8O"
  MOK?>5-W_UENJ6[9O5_X&S;-9XVRT"A:;9Q\_>5*=-=#>O&VKPFUL*KF?CQ_7
  M/'?VK/FI4Z?TA.O;ALD+?]"TZ'\<]S?(_0W2)8>AA`VB>*,-(@W6HKD-B.DN
  M<-RA8;FH,38]NTGA&'KM76AKM;_0TN)QZOQYJP.'#FG7]3:;$E$1@_$S-HK:
  M?_#ZA__]1/>U-_9K/?3HPZJU=75*P@U:G+E[>"BGIJ:IQ,3$JCHZ.LJV3%/M
  M-]3^9*C>QKBN-5M,3+3JS)G3-3=L7*_]_*Z=6NAFJ29]UZF3)RG_\O-1N],G
  M3[BS\0>;\_X&N1<V2!>^+WMN12_`BT"7LW$))WY3OP7^9X.AT]G&:&EIT<>S
  M7?.E2\9X70GCCTY8^7XI7`E.I-)O$:M+P]W-33,L-%1$EZ#^4#,A.E(W-S71
  M"!T/3.)#?$W#O%S-`MT<S/V<[2Q\G>PLO1VLK;SLK:PJ\K-<-CSQ>."CCS[B
  M-WWR9.>QHT8YS9H^W67Q_/GNZQY^V&_'IHT1>W=LCWUQQ_:8C4\^$3ACRA3G
  M(75U]O-FSW+=OFU;V)./K(G(2XES\7"PLO'W<+()]?>TB0X-L$F.B[).B(VT
  M'#F\P7[Y@TM=UJY=Y3)Y\D0;/S]?0XX-D-`P#".@86)BK%%65J;=V-BH/6[<
  M6"WAYGT.^S;*_0URKVX0C&;9T=3[W'3INLTACZ&*H<PV0W/3I>O\B1E3)]VH
  ML67_S:`V9>)$(_2%]'E][^ZP-;.G^(TOR_4;7ICA_^#<F4$;GGPRM+XX/\1#
  M3S7(2EX(BG"U"QXW=$C(R\]O+WMQ\_JGMJQ=^NM#L\;3@N'5-*VZB"95Y(IC
  M*M@$I]<4T8S:8IJ"]EACBU*I+C$4-,!HJH`RQ\HH'ZJ(]$;3!+`!HB/W`/`7
  M#(Q!5PN4N(]$2Y(QA4DTLC"1&K*BJ"$[AL969-+,QC):,+J&5L\:3>L?G$//
  M;WB(]N_:W/;&WNV?[7MIQ[;77MRYZK6]NR:\^O*+@^;-F)2>G1`679*9$#9Y
  MS/#@B6-&>!7DY=AADYOT`]=HR&@BI7Y()KG[&^2>V2"7>C<(VRC-Z$`.2N%.
  ML5<9/A/,M=W='6B5U2G2!#`BU6:TSF*C!1NF^>(%X18T@^KCJY::[-^QT7O/
  MNM4Q2T;4I(PK3L]8.VMJ_KO/;5_QZI./7-PX?QJMFS6!UHQKH,5#*FE,1BS:
  M0+I1"3@?2H*PB$,]T.O`CF+`,Q<(:AE_<)KZH"[+%R6>(>"%BV?DXF".9YU(
  M*E%$5Q/M1U6H&F$;H@@5(XPW;GAV/(TI2*%QQ6DT84`&C4?+^C&%*30R+Q&-
  M6..Q(6*H#OUZ*N,#1<:N1)!_A()XT-^:8?6UR=U4$XSUJFBT@3X/>HI@V`)Y
  M.H:;D0K8(C7`:&]$2:"_*4GPIR%%B31G[&!Z_,&%],(S3YY^?<^.[>N?>#0/
  MX%DK-34U,PY5U^T'>KUND]S?(/?J!@'ZN(/1_%]AS9C0)>L*:^Z'OMG8.%>:
  MSPD=36>$SN:SPM;-&Q1F39NLV`]YK;)[RT:+0R]O3WUJ[ICJ245)-=,KLB=N
  M6CYO\^:5BX\L'3.4II;ET>#8($I''5PP>N8%@.TE%&2)L2A03,!"C[-!+R1;
  M,TI!'XL\L.M7H(]%=21.^(1@&I4911/S$VAR02)-*TFF&67I-+<FCQ;6%=&\
  MV@*:595+,P?FB,^SJ_-H/EY?.+B$II1G,49^&I&;2*,+4VE,,39':3:-+LVY
  M.+PT]]OA97D'1U46O3U^4/D[DQHJWYXRM.KM:<-JWIK<,/#MT8-*WQM6571H
  M>%7A1\,J"S[#^&+8P/ROA@TL^&9H><X/@TLR3U3GI9XOSTIH*\V*:Z_(26RI
  MRD\^GQT?VAP?XG-Y8%;\I56SQW_UV.KEP]`^PI7W[+.0@>=+F^0Z4/+]#?(/
  MV2#=<+"[.MOZ:PI9"*CJ^Z^]$+GWJ0=G/O?HTB6;5RS<^\#XQO;A!4E4FQ""
  M]D6V8@^0"%,-BD!E;J:'/56AO7=-A!\-0X'_=-`I+<*"GE^931-S8JD!?+HC
  M0$XSNS2='AX[B)Z:/HI6C!A("P:7]"P;4=VS=E)CTV,S1O_\]))9GSRQ>.9K
  MLQNK=@W)B=]1EQFSHRXKEHV=0W(2=@XK3-DYNBQSY_C*W)WC!N;O'%]=M'/:
  MD,J=B\8W[EP];]+.AQZ8_>2<*>/FQD2&5W*B&=D2O'A>`!3#*[&B=72T8SW_
  M7WO7`1Y5M75O>F^3WLLDDYY,)KWWWB>-]$J`4$(O2>B]*B`@"(H@H"!@12DV
  M1)\=GE@`%<1&[QV2G'^=FS/Q9DC0]_2]'WWA^_8WZ3,)9YW=UE[;VS,U/#0X
  M,R$N)B<[(U5>45I<.FYD4^."F6WC5RR>/7/5(W-G+5\X<\K"69/'/;9HUN2U
  MRQ?.6CAKZG#(IJ=A>DLQ<NW&QC$4GL2PMS&^_R9`M&!Z,(U^@/Q^@&S:O$'M
  M_??W:ZQ>O5JCJ&O];;>7V+OW-8<#+VZ8MFGAY-6K9TYZ:NK@JF.-67'8(>]+
  M<J%-%H.=DA$0E4Z")MG`Q&`R?U`)V3I_`GEY^70<^&%D>G4NF5B40J:49Y)%
  M3>5D3<O0SJ>FC>G<.*?ESN/3QW_YZ-0).Z>.'KJL-#.E-<+/L\G5WKK2RDQ4
  MK*NCG0?-RFRH*&52Y5>EV=(4-N.IL*0'F'`*+HZ!@$[#10C&)(,$8RM2-LBK
  M,"G[>`#[&AD;9PQDWQ?$WI:QK_<5@,-9:<#+H+>QEC\5(%T@Z3KL"JESA>&P
  MJ^!S&ILW/:,VN:U5]:LOO]"B-KFM[8%U\+\P0-1AFC#5NWC>.[?YKU&%:<*T
  MZ.<`$#7ZM=?PG!>N7E+_Y>QIQW.7+KK\@'Z#(I?`*GD-6:"L.X^`B$;IL4/[
  M=VQY?-&KDQI*/AN$D"4+XMXQ4'!/A,YH`?*%\E`?K`KVXA>BUF!U\-C<&#*K
  M)I?,J<\GDXJ3R3"L=QPKC^]<-*+R]OKY;5]/&%R]4BIQ'FYBJ%>IKZM3BJ'I
  M0AQ^.1MHSF$C_XK;77&S*PYT)--G"%.:^PT4'&S%X58V?\%LL`^;5O1D$XKT
  M$(M[&5]5-B?V>>&X*_T^5X$)?XX#"ZVL!#F(OM+@G=I_I(I%;T1Z4"@@J`>@
  M($'=V>@\_N,O7[YHL6O7+BVF'22\";NG%;<]]ZSIAQ^\;[MRQ7(#I?+;?26X
  M_P9`;C&C"O>*OX/B=Q2`@X)8`Q_3`T`,83H,*/0UJE#OV/6SNJ;CZ06Q9?,F
  MV&:UR5VBM_SO4UA8H/;11Q_I;GOV&8.X\$`M@9H+O=7T#KW]ZMB%(RK_61P?
  M<B'`"=I*F&'V-]4B,5@QD"-UXK<U%F#U0#Y=:)X00,;($TAK>089G9]`*B*]
  M.AN3@CIGU1?=6=DZ\MBPZM(E3@[V5/^;2K85,9F%/,%P>2J[V>/8!*CB1A<.
  MO/NPV[BWP^S(#J(],SN!V2J98E;;FLW06;")43,F*R$<)S;JQ8P%8U\B-C1I
  MRK[?7&!F[.,BP6BR`AC:O4PH_?D`X8W=I(HGF3IUJCH\AJ:PFB+4=&(OM/L7
  M#0P,--NV;:OGFV_NDRU<N("7@FNHKS>BM6NQ6*Q<95`5@H4"I.-/!$@'%2/&
  M][[_V@YN3ET>]_S*^?RZ'/K]%(CM]]IA=REH&!ANJ`(0_.O9NV>/^H\_G-0[
  M?_:,!<SRR%=?:O?11>X1-BD`,42>F/3F\T\>1#GS=$Z4]*Q89'S+2D>#%\]/
  M]K;%5F<DSE@F/P"RKA00H_)CD1BC%%J=39JP0+@^7GJW.2_VFV'E\E4.=K9U
  MD'REJC\#&"#D3)DGBX5'B2S.CV1`D#$0>#,`T%O8&=4?)U1_%`($5@\XS$9*
  M4[F*7D1OIB<P7:5&H9;2>'=?)AS#4VY.]M9\U/J-'LB?WBBDH80V3(T"1"F)
  MU%B\>)'QN[M?7+IHXI#V(07)[=@ITD[%9.:-']R^9FY+^][G-]S[[-V]/ZU:
  M,'TR<YF*^7,;=JN8L_\`(R5WJ*$\!GW]YFWNYQ]/\`#Y\8\"I+-KI]8[+VSF
  M)LECN,U8K<H+J^$".(5-GM\?/<S]^-T14#K.<0]HQ'4#X9'%B[3>W+?7Y*,/
  M_V%[\+-/'5[<N=.JH:&>UWC9O>LEKR_>W_?JEB53VJ<.+&C/#99T!$$71F*@
  M@:VH6%6+10;5V))=&XO>09B$9'AAISQ`,KXD";M0(N!%'$E)N/N5YI*T-R)#
  M`D<B-Z!RMZ5,^Z6``2*3Y0@)S#.$L5#(3QB;0PG<R<G9R<$.NB7L;V\J./A"
  M00@=I6YV;UH%PBC@0:;:%_WD[,_'^>6<OWQ_E%\_>.+K@_P*PF\.?RA<LO9;
  M#5'5?X>6\J<`A,75VC"%>U)%0JDY?]X\@Q>W/#6K!#5M)R,-7N>>:O&+<!.Z
  M6YOPLEM4[LJ4;HS`8H,"J/,M;AE.=FY<??Z-W2^]\>;N5Y<_L6I%375Y:83$
  MS=4=(J:*4793@7A0KWH!?P`@$'VXKKIITT:UJ=.FJO9UV)6I%L]NV61\Y*LO
  MQ.^_M]]6<9.%!`?K''CW;;</_O&NWZR9T\W<W27Z`^NJS6I+Y3;QP;[V\]K&
  MY+WWUNM/K9[;^DLV0B,O['&V@A2D@SX4J``.NA*E"#O.RB"+7T$MW(N4`13U
  M\7YD0E$\F5Z315K*4Z]/J,YY)\3/8PS7I9Q8QD*G`I8_*#Q$M,`[*)1(Q"P<
  MLL5^:2N4/Q5B&,+P0T=Q^,NA'M_2,E$[.CI*O:]#=Q6+4V_>NL;_C;_[^A#W
  M^)21W-2J+'Y_\Y(Q#?Q2[15MS?QB[9U/+.9W.7_ZYBO\^N"?CG[>M4(8$0#=
  M6GL!2U+IYMK?"9"'EJRH<NSH$>V3WY_07;EB1;<:XI>?'Y3]^.U7LV>WCCML
  M;Z+?:8?_]`1HO:4AB:2/(5#+I2N%_5!WI\JYD*,DH6XVQ!V"W_@!O,F@C(4=
  M;V3O"\^>>67[EE4R?U]>V1>NW@6N7E&!,!;(#?0`RN\!B/"F@=Z<^OXW]A@=
  M>'./Y8YG-YD.:QJLIT2]T(6,FWY=7:UHUHQIEHOFS;%[9,$<Y\7S9KK.FSG5
  M><S(X78SI[2Z/3I_1L"BV5.ELZ>U>38-&NC<4%LI'C.D-FC!E-$UKV]_9L^S
  M:Y9VCJDI)`%B&Z)'+PR8']84Q&$E01D`T9P908:GAY$2K%9.Q]ZZ%"@=YZ`J
  M58'-OK7883HF)[QS6G7F3\WE.1O,1<94$[R2>8LBYBD42P85ZVS\6/(K9M[9
  MFOWME+VRMC#TH+N,L,VX!S'QVC706JY=>J#=N-D5AAXY]"&W:G(S-ZTZ^W\#
  M(-=NW,(6WQOZ)[[[5G=J6XOJ6WMVJ1\_^J7VT:\/&WUS["OCK5LVZL^?.],@
  M+C9&_Z<31X?_>/3@3W,GC$#G4Y_88"]1D+,%B<4JG#CLN@O&X:":?%2L,9I^
  M#*")QD+U2"A9)D/`G;YM`D%=!TLS,J@DA[0V#/@V.R)@=DY*P@`+"XM0Z/7Y
  M^OO[>V&IAQ/74XY.NY<\A;<IDR>K-PYLT%`2&>[F'T6&AQGLV;0Z:,.,YNS'
  M1E?GSJK-SI]4G%@P*#&@J";6KWAV<WW="YO63]RU;?.B'4^OV;AS_>J7=SRY
  M\L#6M<L_>^Z)Y>\_MV[E*UM6+SN\<=F".YM7+K[V[!/+CCRW=M7N#2N6O+MZ
  M[N3.8=BN29>HV&AQQ`I[_:CDMQQ>H33"&\M^):005:<"K"$J#!23<GB,1DB!
  M#\^*)"-SH\D8FF-49'2.+\_\9VI4R&Q4F>H8,`:PG"*+E55C6#6)5H@\!.5,
  MH>?5%W@&C5[$8E1N@?CXJ]V&W>2NHXO?#Y`^#.`P17QO?>'R%:?SY\Y:3&Z=
  MJ/KA@;=TS_S\O?V%,S_Z7#CWH_=33ZXV_N2#=SS/GOQZY"]'/MC[U?X7;JV;
  M/88,RHXBN3(O4HLM.H^U#B9O;%E)WMJQGBR;,8'(T<VE0`GV<")!V*T>[",A
  M/A(7$N(M(;4I$:0LW)?8(#1S02@V*#.6;'UBQ?O)R<E%!@8&T1GI&7&>GEY2
  M<W,+\<A1H[VFSYSI%AX>+NHE/M86$._TIDV;9O'9@3>C]^]X9N#>9]<UO_72
  MUHG;UC\Q9M.CBQY=,V7,SW/J"TC+@#0R,CL&)=%P,ABTA3J42S-<L/9/GR.!
  M.A#P-\+"9`MUWH+QMK\N3(\C7MC.XPD`R`SQ-:;JQ(]]S-]0A43;&9`LY`X%
  M4@=0-FQ)OC]"*)DS]L4[DFHL4QZ7'T6F5J:1"<7Q9+0\EHPI2"2-&9$WRE/"
  MOQI4G/.J/#UE#G*+>@$P\EG5*8%5FF0LL18+E)5$@B:8<K6F2ST<%!:%W<)F
  MI%NWA>#H!\CO!8C5F7,7+?YY^$O-*5.G\#=R6\M$]3V[7M0_]<,WKC]]?]3_
  MQ1=W6O[TS>?5)S[=]_.RB0TD#8N;6^KRR='W7B(?O/`X63:NF@P'/V9:\T!R
  M\,`^<N:[PV3?<VM($^@&SE:F1$=+DU@:&Q!W1VL2Y>-*4D%Q2(,X=CCV1J;"
  MHPS-C2?K%LWX=OV:56M&C!@^%%6M-!97^^GJZGJ@>46]B4U&:I+XK3TO51X_
  M^OF,XT<.+_[BHW<?>7?7]B6O/+-NX=./S%_QV+1)FV<.'W1L0M4`4@O5VGQL
  M^TYU$I$$:P.28*,/,R`QX/S$@ON3!`Y0-K:"%_C8DU+D"9581%T;X4$:HKW(
  M0&P*IV^7!XM)&38M56'S7TF0&$TZ.U*$[4OEH>ZD.!"KX&'549ZD`;E#'5;U
  MUD1[@ZM$"7M>I`IOEP2Y@.LD)D/3@D'6"R;IV+R4$^!Z?5!V_!?Y*?%+=72T
  MZ5I&JGY8S8"AV-4<QQ)MH;=0)-;&O8"BVT.TWZ'\+LKUNL7U`^3/";'X/^S>
  M-]Y47X6NKE*RRLMBKGALJ=7)(P<'G?S\[6.;%T\B3;E1Y.G%4\CM\\?)-Q^\
  M"H!4(N%T)W5H5+VV:07Y](WM9.6TD:04GD**?,/)2D1<89YV\"AX/QY>)<T+
  MJO$>CE@M[$`2*4B*TV\OG]Q\IC@SB6Z)RJTN+QZ\YX5G-ZQ;/&,;UA]O+XH-
  M?+XD.?S`L-J22[4E>20]-H)$2KV)G[,=<3<U)*Y8^>6!)>+^X!Z%FAN`=V1!
  M\K`CM`9LTB8LN6C"NIFF.'\R,CF0C$D+(6,S0LE8E$WIVR-Q>(<GRT##\(5'
  M\235H6ZD`H`HA]7#PPQ+"@1H_$@9^A%56%?3$.<'8`!$,;[(*4+)</R,6KQ?
  MBMQB0(@KD<N<2"&^=TAJ$!F=&PFNDQ=R#1N2+!:1\74#CLASLQ;@=VQBX*AD
  M.486RR_"H6(<@$O!DU7^K%@(9=@7\>[Z!<K?N@P^UPT0'V_V`^3/!,BY"Y<L
  MSIR[(-JS=Y]Z+ZQ1#793Z7]\X(VT<\</??[9[F?(SL?:R&M/SB-'WGN9G/WF
  M$]Z^_W0W/K:`3!]23/*1="9X8(&ZQ()D8/UG.))1'U2V:*Z2A0TP@W,19H`,
  MUY`>3G+1"*/[O8.1R$8@F<>:GE_R8Z2?I\2$_A(>&D*\W"7$T<82&N:FQ`'K
  M.JT``G-4QZP@`.^`]6U>R(."L?4KT<V.Y``0)=AD7([-,K5@C#9B_]*P>!D9
  MD1A$!J.4.A">H`D'?7B\E'\<A,-?C^2Y%J^A!E6DZF"(S`>Y\E83CM<)0`U"
  M^96^782F70X2ZQPLU\K#ALL<>![JH2K0KZ!6@-^S$/O**_$SZV+]22-`-2X_
  MA@^OJ)?)]+1"1UQ$ZM,C3C4.R-MB:VU%-=EKF>>@5:E$+%V,T-75"3``Z0[>
  MQ8$EW$))<`UAP^L.:"QW<'!O@\)SAPY.`2#M%"`=_0#YTP""G>EJ>_:]J=XV
  MY;[29P^`?+A_=_JI8Q]__L/G;Y&3_X0=>I.<_OI]0CHN$W+G/-FWY3'2F"8C
  MH8C'71"WRT!1#D480VO^4NPX#+`7D1@<K@SL/,Q&XIJ.=:RQ.'#1$AM^@7TT
  M-DT'8R^Z)U;P61OI$2WD)_I8Q^UN(R+!`(X_P!4HMB+A'OA:+"&+Q<[T1'B?
  M-%3)LOU<D`2[D6+\[`H`L`;T[4&821@>AT9;4C`9!\\V`8N1QZ6%XOU`,I2"
  M(\*+-"!4JL>M7P=PU`'4U&KP?B6`4H;#7H+$6@X@9.%UYB+'*`(@2K`2L!R@
  MJL.,0V,B/`O`5@'@R;%B-MO'@>3A:_+P=CX/&.S,"A7S><C`!'\R!*%688BD
  M(\Q.=+LP0GIVYK"JKRIS4^<Q[Z%8../#<@T;YCGTE0H4*O?0O7^@H1Q+QW'[
  M`?+G`,3PYU/G##8]NU6MET:,^GMO[7']_HL/7GIG^]KV=;-'=JZ9-@R>8A%Y
  M:\LR\OKZ^63WTPO)J^OFDI=63>=SD>H$/Q+M9$1B<5O&N8E(BI<5#H685"%.
  MK\'GJA/]R<#L4%*`<"8`R;'$0@=+G,VQK`<W;U8XMB=Y$JD3MO'9&1-?S"?X
  M816B'QY]L-Z*`BT$GH:N9$_'KN-\J2LIEF&F`5:,Q3L%N-D+<4A+\+E2/`Y`
  MSE#H8<U;A;\CJ4'.4(;\J12'OAJ5I4;<_$WP+-0&H[HTA+Z-'<A#`*!ZVIL`
  M0$IPX,O@E>H!N"9XHCK,0Y1AEJ(A1@9:>2#R#'<DYA04%*1X/90S!8!6@EA(
  M<Y5").Z9\*8Y>-YJY#9#,\/)L*PH4HSG3H?':ZLKOO7$G-9WP)7*8!WO`-;+
  ML!=4\11T;?[_J/T66,"]F!`D_0#YS_1!>'"T3IJ@VMHR@2^9LB40^@=V[ZA\
  M?,:(KX?GA'6.R(D@DU&56=W:P(=:;P(LFQ>-(RT5*20?B6D\P)$O<R3UB7YD
  M1&X8&9P>1,H`@)((=Y*/I#4.AR78S0P>040B<'B2`U`.]K%#>52$-97&V((H
  M0N_$BD0A]`H!48]NTHW&RN-X>)ID@*``AZLV'GD%=NX,30W#80T@`^!!<O#U
  MF:[(/>"5!J`95P,OT(C;?A!N^%KD!)7H2E<B5*+OCT/>,4T>1Z87)I#QZ$U0
  M<#0@U&I`CC$8(!D$JX:GJT>I=B1"P6FEZ60V6++C4%!HB$78EA9)FK`I40Y@
  M)B.$S/2R)VGP;DGP<@G87Y>(QT07,S[W:(3W&)H6A)(O.%4H]5;#^S0D!Y-Z
  MT,Z+\)R#,V.O-0^LF<,(@Q$L.7=C95PS`2-5D2.JG/OA6XZWD]]P9[\_QM'5
  MG-?!$KZ.$(L^4D#T`^1/!,C-VW=5;MZ^IR($2DQ79U63YQ`UUMJ\]M+6U'=>
  MWKSAZ7D3SFV8-[;CQ35SR&,M#:0RWI^(#74(_@>)*Q:?)V'!>F&H*R@2;B3#
  MUX:$V.D3+SJ\@YF%:!=3[/!&615?$R>UP\HU!X#$"LU%$VR`U"8FVBK\@BOL
  M5R+A-.R"QXC$`4R%1RC`82^/P40;.OB5F&C+PAKH1!=+DNWE0/(1:J7"$V4!
  M4`.P#3D+)>9H=/&SL5.\'B'4(.01M4BR2Q`J50`D(W!HQR%1'XU$>AB2[@9X
  MKBKD'G4`R$@DW>-SHLAPA&,U`%,QPJI\W/9R6"YZ.P4!$E2N@GB`U@(LN=@'
  M&X=AI$`LYY)B@5>DLPW)1.$A%UXK![]_EA>J9;@$ZFF8A:2>]D'J874`21%"
  MPJ;<Q!O#ZJH6*7(15L'R921!:U;2U1>P4E7._7B<HW;^Q^_XPW?Y_"D>&#<8
  M0/BW,6=RZ^ZM?H#\!P`BY%UUYR'T/^JQ1^:'[']EZ\2=J^>_/G=$^;&<J.#C
  MWF+QJ2AOR;5D7Z=.?^00-AI=760$T,0>O0,7?17BA<,?`0\1!S`$.L-#(&G-
  MCT$/`OPC7\PWF.FH$GUUCM@::9,`+#R.0%@4+K$BWM:&"*LL2'&X#T*T(#(@
  MTI=DPUMD8`2T%*%,/0:`JO"Y7"P-BX'W2030B@&F<I1C"U%637,4D52$:&7P
  M/,T`\L3,,#(R,0`@<22Y&./,`U"K<;./3`DB$[,CR2B`HPHEWWR$9P.01Q0C
  M=,I!")4OI8T^K"0'^.+P>H(PI1>,L"\5VTUI-2[``CL<;4Q)&D";`<`DHXR=
  MC->?+#8E*;`,_-ZY>$Y*1BQ%96T`/%,IB@@#`,A)5?*;+6-'K02+H(3QJF(9
  METH8:AEROVZ44+V"`TOM&@[M38"`F@(8?=D-<,UN`A!_%"!?'_R`>VS24`X-
  MSO]MJ@G7<P.K#G/U(E9ZI"5(#ZR\#1A87Y6_8?4CT[<^L>2%=8NG_F/FZ(&?
  MCFX8\'%%5MPQ=,\ONYOK=YHAZ3:FH`$(S'14B`/FCZ7P)CXXP-;&6C!-(D%_
  M(@BA520(?!0D$NP4=L)LM`S]$GD(.$O8VIT?Y$F2:7G8%?D%WB['R&@:=EZ&
  MT@.*\FXDB@(I^!FI.)P)SJ8D&5XE$^_GN%F28K!EZU"&;415J0[`;$2_8GB2
  M%-4J'Y1W:=7*CZ]<E5&`P%L4@@60C\.>B\=R'&8:%F4!G`&HR$GAX:2X#+S,
  M#(@WGCL0U)H8%`Y2D!=EA@#X8`W$P_-%8[`IT=D$'@0KX)%WC2V(1WB:19HR
  MHQ!N2A"*BB&&D'_)S]MK)%@$%8R:'L_]NHS(45#-Z@ZS+F,Y$+6KUR_#4^#P
  MH__Q6P#I-N0K-^E\SRT`BRX`ITN(;ER&77F@W4#RWPXF]`_'CW"O;5X++S*"
  M6]Q<S<UJ+.;F#:_BED\:!H!,_9\!R*^A5DRTNE?7ND;%,B(C[M<=;A0H$E9]
  MD;%*#"70);A+W'*G31HS9<K(QGVI80&7;`T-B!$`8F>H@<5Z>L0:CZ;P'.9Z
  M(#G:&)$(Y!CQ2(JC$#+Y87Q40@\?^B>!]A;P/M8D0>*`4,N%9/JY@N6*Y#S,
  MA[=TW.()+M9\'I"+[\_%X8["-G<_D39)!C@J<4L7^CJ0;+$9\A,+4H0<J`R]
  MBBJ$@35A;F@4.B%,LR))\&S1V.9+I_6BX(D2$+ZE@#*3#&\6A5#/WQ(5.@/L
  MG]-1)XXH,;MB=L--I$]\K44D#!2;>-!I$O':XF&QZ/,D(6]*@Y=*<C'A/4@Q
  MP#DD(XR,*THF9=%^),'=&JR"L*MA4I\9/IX>(Q@9,8LU"@-9D]!!X$$4VQA5
  M_A!`>C/Z_;]E^+IK`,E=TL6&/GWJ!^ZM%[=PNS:MY5[;]C2W<?$,;C5(C)L?
  MG<[MV_8D]\D;+W/?'/K@[PN0VS<OPZX(PRUUP>R'8D^>B/MUI9H#BYMI:.`=
  M$A(27E55E5Y55E344)PY-C<V\"5W>[,S(EW-N\98XVF.0^9LJD?<<1-[H$+E
  M"9.Y4`^"O`0K/H.P>-?7QHQXF)E@D,B(R-"5CQ8C$::-1@"E`(H<I9'^8,8"
  M)(CYH[#8/0H\J&14N6+$:$KBL(?!0R5[VO!=[4I8+@YJ&HH#V0BMLM!)SW!%
  M(@UPT%PAQM&$R$QUD$N@1&UG1"(=S$@D/%FHO1%Q!BD3,28QA">TU-/"DG9U
  M8JJE0=R0<P0B_PAVL0$?34PRL,4Y,]R/9(;YDB(`LQP5O&(4+.0(KPKQ_(4H
  M(1<$28@<)>FJ!!FIS4U^R=K"?!AC[,H9;3V"$1$5Y5X1I[0;\`K8M5?^3(#\
  M2W:-!\HMS-.WLW-$'T]\^Q7WT3NO<X<_/<!]?>@?W*']KW-?OK>/^^'+S[BS
  M)[_]&P($RH!==J<G.S8VKIL06%E5;=#0T&#JZ^?+SQ6(Q:[F4FF`C;>WCWUU
  M3:W7S%FS(T$^Y*?4PH(#HZ9.&CLN.R'JL#8];/`FM/DGQ49JNK3>'G(S=`NU
  M%+MO`YVL>'`X&>D3>P,]X@F0A#O;DA0<PC0_-U!47$D>#F-1A#\IQ(%,0>P?
  M`(!YB'2('YC#,4CPLY%TIR./2$`?(PO5I"P)<AM++1)IJ4VR43TK#73B+<\'
  MMS\*!V&@HX13&HH$M[Z[)0E&&&6)UTC_GB)L*@VP-.BT@;?#34'T05]W%AGP
  M"Y03$(9E8(-U$O;)A[C#^\&;^,.C10.DN=[6*`N+>3K*H!09=*(\D+?8HH(5
  MVEDO3]WAXN@PFE%-BI7R#X7WL!#D']U5K/]?@-P/&+YR!L#<)>V\AZ'OGSO[
  M,W<&8+AX\0Q?9;OPTPGN_$\H+/Q\@K>_/D#N=?9J"K`4%!:IU=;5:6"^6JN\
  MO%Q;+B_0"9`%ZOKZ^NE)).X&B*F-V!R"&:O&.$+V,O+UYS>^/ZI63KP@0:.A
  MJ@)/HD7H@FD'Z#")L2C:$Y["%[04?WMTX*WP:&.%1-V>A#C9$IFM)0G#8SP(
  MD$G>8I((%8\XY"3)\"!R)+]1[G;$0EN-.!IJHBQL2[(`D@+<Y)7(,9J2?,CX
  M_'`R)C<4G"L/4B)%2.9%\Q4DTK!L'VN2!F!(+?7Y`@,%@H>IWMVZ@I1O!U84
  M/YD4%S,G,2KD$9FKU=LF.JH7]>%%@MWAS8*\29B[(T)$%Y*,7"E:YD%"D*0G
  M(I>BA,4&%"-HF7=H1@C&9\4D"CV>07DIW]G;6(\&2;%.V$T7-`N=6:ZGV"RK
  MV<-[/%0`Z:,H@(H:;^C)7(?'N7:]*\^AQ86+9W[BSJ!$??KD4>[GXU__O0!"
  M[4X[WV3$?]`-KI<&8V_CIGR";V-M93N\J3%PU>(YDV.DWB?HH)63D2:$PK3A
  M*32)B3K*O!IJ`(DQWVF/01P?CEQ`"@\C134J&"%/`!Y]<;N'P//$((Z/PXT<
  MXVY+HI`41Z+,&X%'"8!FJJD*^KD&_[6)R$5*486J0Q6L`;RL*O0YR@"H8H1I
  M%4P%4&9K3LS450E>*/((]]L3A@[Z*"D^;@9>-YW-H&S;&LJ=4E=3JW!QLMN)
  MMSL#H#^5"WI)`IJ*80!D$,*V"!0#DO%^)LJ\10BO&F+I4)0[B8,\3PJ\6'6\
  MWW<^[N(VY&C#V82@8BM\>"^AE3ZH_]HR60#O/2Y=O:!R^>H%36I7+I]7?9@!
  MTF>N0W,95,2H74<IFGJ8'[_]DOON\$?<MU]\_/<#R,5+*#E>A>+)K;NHNW=P
  MM]N)LLZ3(G?I7H[[Q-*%A<.*T[]TTE-!7*]"1*"52!!N.>AK\`?;4EL5N8<>
  M*D,V))4FW6[6./AH&*(Z)0-MQ0ME5@H4&DJEX/,):`P&XN/^"+,H9<41U2\\
  M(<"F2EQ0):.T>F<`3ZRI1OR07$>C6Y_EYTQR$!YYFAH1O#!BK<YUR".#3HUL
  MK-L2*)6.!S>J7FDV@][RF:C<942'!:Y"F-AA1_L[:$Y&^:)1B!)N-BIDD6AZ
  M!D"-I`C4E:$(JPJ1?\0Y&((6KT/&E:=?D/EX3,7/&/R`T$I8N=(5TDP4<DNW
  M:"4*APO`4(&IPM1P\*BI_B6`(O0T=ZBGN860["?N^%>?<4</O?_W!\@=?.XF
  MWE8J%W>#9,.JI2DKIS3_,Q7T#!'H\":(Z0/0Q_"U,B`.J&Z949"@6N0!,0,J
  M44GI)92W13V(#W(,"AY?]"%"H?Z1@.I7.OH>:<@W:,Z1`?IZ491/1TFL]*Y4
  M;'O#4%O[E$A;ZQM'/9TC;D:ZO_B:&=Z0V8KNQ+O9W2X,];TRMBS[Y-+)HS\L
  MRLV>JC3%E\?F,FB'.Q83C]&A0;*4@:6YDQ*#O#^W-]0B07AM4?`8`>B:AZ':
  ME8Y*52&H[R5@^A8@0<]&\I_C!R_CAW#/VXJ,+L_^4IZ9LM#>WG8X>ZY"1G&/
  M40*(I8#:WH/!V];:PIM"H>5&=_GVVF_;0PJ0F_=N<^>1IYS`..\Q@./O"9#;
  M]_B/WVMOY[5E][_V`C=[6!DWKB21$X"$_F?K-\J3$Q\9/_!04V$*\<:M[ZBO
  M1H)0FJ5>P8^&3[CAJ:>P0U+LB.8A#9L2$,*$(_$-`4BHM_"E?0AX$E\T$P-!
  M3XD`)242GX_'084FU&<IB?'SM+2T1N'Y:)5H,*.7TS"I0EM;J]S:VKH"0@;%
  M;$!)J!.5S'H1D6R*C_*C?(V-C7W7+5WP=$5*.)&BPB5!&)@$3E<V$N](5,J"
  MX$DH2&+A05)0;LZ"YRA`$:`RRAWBSJY(_B']B5)S/A@$P[(B;DT96/35I$'E
  MSS;7E<^N+LYK#`L*2`&+5\'%4J@#FCY@?)8'3'YVMMJD,:/YY/WJ+[]P5T]1
  M.\5=@]''*Z=^YB["+IW%QRZ>XZY##)N*5#PT=I4:K9C>X,4&SYW^D?OVRT_^
  M7@"Y=@.)&+JSE\Z=YC[9OX];-6TD-Z>IF%LY93CW^/21>+^98^$6[T5:AY3'
  MKY\W_M!(Z+IZHG)%QU7IH0]!:!*&GD,"9K4I]\K/AH)`GP<,I<4GH9--0ZI$
  M?#X2@*`?CZ)-07PM_1X:8MGHJ('+97LU(U+V+)Z+#B4-9.%,J6",5:$"$M.'
  M/I2WQ,V-'_^E"?.,Z=/#/WS_P*RV4<,^$=-J&\K3X:#8QX!_14,_^MHC$>YE
  MH8Q;`MF>,N0X`S!;4@!@9`>`0`DJ2S/H[RT5Z1!V3@0K0,KW5SR,0-L'?5]F
  MJ=N1[&%Y(49L^GY&@,N3J:$^92`P>K.RN7#>W%0@S*SW6R.VI[\[AA[$"916
  M?P(=Y0QW[=)Y*%P^9`!1LIM4?09`^5L`Y":_).8N_[,N8//1CK6/<HM'5G#K
  M9H_E-BQLY9Y>,*G;!-05W5FC&N*W+9MQ:"Q$#L1H"%IJJL`[H(^!9#H4_"D:
  M2E&CX540<@H:>@7A$";"BR2!2D(3<PH,"B:9G8@W^K4I2(SS4;4*MC?N<#/1
  M/!7DX[&`S5V4LI`I33"Q%Z"D!.+$J!W=^E!5E94NSV_=&OO>[E<WKIHY@:0$
  M^Q)S'4T0*RU))I3-*8DR%%XK#A1\JEI>`2TKVB&/P^^1Y$G+T@XD$N%7%"P#
  MS<KJ^`"L`8@E3:"UE",,H\`IQNNEWY,*%G(X^CBA\(;Q""=1#KZ;Y>MP;G1I
  M]J'I(P:NDXGMDS34U23L=2KFT<T$BB6]`:9;I>0:U.*O7;[PT`-$80\]0.YT
  MDCZMDZH1P@Y^]`&W>?6CW/;U*[G-CR_AYHRLX<8.2.8F5F5RDT!F$YH0((WY
  MB7'SFZL.#89"H!2'V]-<%Z5;6WXNA%+:(U@U*AAAES?R#3'X7%FA/E?'UQ5_
  MUUB0?#+>R_XJP'2/)NU\.(:?$82#17.5+-#3J?<)07Z2"@[5B/*L;^UMK.I8
  M&*5@S`8P*H>S0$E%)-"(X@70#GW\8>'%,Z>_V[!J&4F4>J`?`SJ,$P4RF,7H
  MO23#FU&O44RY51$^8.Q2.1\_).C>)-#:H!/7?0>EV.`4$PLT&9W1'/6U0.[D
  M2$%CSC<T(P"*`(25_LBM0G`))(-X68A&8QFH-<58,9`+QC#EGJ6!85`:);L^
  MKKKXDXD-Y8N3@_W2+4Q%G@(!!RL!8`P>-*_>#Y`_`2"7SO[2IUT]_PMW&4G5
  M)V_MXIY;,9?;LFP6MWW-(NZE]<NY5S:NXE[9L/(^$P)DYMBFF,D-A0<+P):E
  M7D,&:@<%11B\!_4$-(2BDX@B;4WB9*)/RI)"KD,_:YR6IN;HY-C(16F!;@=C
  M))97J">A;-]P?%\$#ELTRKXTU$H#,-)1:O4QUZ%Y3<?`XK2#_CX>-2RTBF0:
  MLO0VMM?3T[7L9=:;5T79_^8^WQ].'&]>NW3QRQ'N3NTB%!.LP5R6.ECB.<"[
  MPOQ',KWY<>#3P?1MSHOOF#]NZ`?Y&2E+Q,Z.K586YA.\).*IV0F16\K2$[Z-
  M]7;N<,9`F1%ME#(3`3@6J+;9HRCA:JA-/!#">2+O\D%?2(8\AXXERX.PBR/4
  M%]PM=Y*"DG8ZR)FED5(RLB3G\L3ZJNVMPP:/28J)C&(T>2?!"H"^Q!VZP[!^
  M@/R;`#GW_5?<V1,/MHL_?<-=/?W][S)!#J*W<]/:S(EUA8>CG$6\!Z#&]SS$
  M-)X'Y8/V.A!6V8#8F!$=]'6`K_=TE$9IY6=(<4[ZHUG![E]&B\UO1B(QYO,0
  M2E#$)!_-3R)!3$P`+XL"Q!\YC`3>*27`^5Y%7M)R5I6*9?F&L%O=/9@4#=TH
  M:@*2IN'KVY\;-VU()?$%)XR6CSTPZ9@)RD@:DO0X^KKAZ3+PG,.RHZZ49*<]
  MQ@H#0UC^PQ<&5%542DT,]2N\W-WJ&BH'S!M14[0_+S;P$'[7K^TTN0'$%SOH
  MDW!9%_"$5*6ODS(-;+0U`!)PO6#T,0KL@BPT1+/!]<J"T<=4$"3C<#DD8^JR
  M(,2[O2(M]K/JPIP)`&<P"QV=N?OW9>C\%8#RT`/D\_V[N"_>V_.GF***-;-E
  MC.C#-U_.WOG48ULK4B/.^IIK\]4G>L!I3X.&6.'P(-[H9OM:ZG>$.1K=R4L(
  MWV(F$M$LOQ&Z4?7UQ5G;X&GNA#N;=J8!%/3[XW`X*S&_4881V#B$610L16#@
  M!H`ZXHO$O:D\^YB'FTOC`SK6"@^B65=?KU'?M=!2G=VZ!EO6K4I_?=O&+54%
  MV2>IDJ0MJFL1$*!(P'0B+2OG(JQ+H+^#V.+ND-*\O6XN3F-8<[&2]3H4PF])
  M7,_=&+'L??J:4LQ$QO)`#Y=1<3XN6]`3.HR/G<()OHGPK(."!LD%<3#008X%
  MV@RX9]$0YXL#H3(5X5XZ6,?!:)Y*:!G<VOQ<?%C@9%T=G6#V>[JRRT"QJDPH
  MRO=0AEX//4!>?&(!MWOS*MC*/VR*AN$CT\:X''AQ_8[5<R;>C?9VZ72$"`.]
  M]5,P<T&]!V9*^/#(Q5B'V.EKWD,N<2$\P'N.Q-5E)+N)RQ.DKMMI*3@.5(["
  M2!_D+G8D%K<X?7LPM+J&R^.)'/E`F+-%!X#SH\S#:2'[WA)&)T]@Y5MO%HXH
  M0BQ=I0.CZ-WHN;FYF66DISO/GSII;0@Z^[88['(#'3\>8549[<PC^8Y'Z.,*
  MBDM6H/N])>,;+Q3G9LY@3<9<%MK%,&`&L($H;Z:=Z\4.L3]C1(>PKCH-F>+@
  M.9,<;"PA->8W'")[3_E9FWREQ3R-D;H:&JP&2.S1CT%7/PR`\0-(G!&>!8(3
  M5I$9^[F'LUT>\YB*>7?J4<Q0MKYOG+<?(/\"0-YZ81/WZ/@&;MFD0=RJJ2/^
  M;1-TU#5'UQ2X;E@P\=7)@TI!4#0GYABNXF?,T>BCN4,R*CTT.:>WI9VIZ'*5
  M//T52W/3X0[VMDW8?CK9Q5(TV\]"YU(&YBA2T6O@JUFXN:GGH:5>.7*::@C9
  M!3F:W3'15-D%"1T:YM0)JEC"'*37L59Y08%:6]<*`U6A%Z%?M^OY9Y:W#BDC
  M'N")T=L\`M6K2@Q;E<-[92!9#T6URA/"<J":W"O(2IO/0*GP6N%*6E>*BIEB
  M38`M^Y@3.\@25DCP8:\WB%7?HIT=';(J<Q-?\;(RN&N!Q-\4I6U7>(Y`>!4I
  MB@B:(%<:@^19DAI]H2P_8QR[%!14%E?![WT?$?+W;A/[3]M##Q#:O+F.?2!4
  MV;T3@S)T!<%O6]?J@+MWZ.J"KL4SPB;AYHWK)8_/G;1+#EH&3:JER!$H?XI6
  ML*@7\$'SSU9/C1B#?I(2Y'TA1":=+#(Q'FIBH#_4SUZT%KV&.[2A2`&1B5%8
  M=,Q)`3A5V<@':,XA13?>2IN[[FYGL5(@RE;*;O%D5L'J3M`%LQ8];E(EJHPB
  M%S':O7W]E%>W/74Q*3;R'OT[NV*NA2Z73`<X\E"RS8%0@Y>E+G$2:7?6Y*<>
  MCXD(&<F>.TEP0"DP[1WL[=&KM%(<4GZ=@$G7K6[,DFLSECM8LP/MQ`XW!8W_
  MTOG3FUM'#3X/3T`9I-`=@W"X-9JN\"A6\'#Q`1X=CTZ?>&58?>4<)>44ZKF<
  M34U-;:!D*5(F0_8#Y'<"Y"J:2K3Q1X'R^_<4WF";J``N,$[IVC5ZR`*D4OZ0
  M85^VS_B!97MDECIH])GS52?J`6C>$8A2K1,(B_;@8P6C9%N7&MHY<WC%SR,K
  M\\YY6!F?=3'2NIP5Y-;!YQT`%0W-*$"J<'O31SY_<3*][65OOISU/BI8_)\M
  MF/56W*"V2C>H9D_93M#\8?S`6&RL.NLMT(,D>GS%HTGU907[C-54B`F:?&Y0
  M;HS#2&\>2(NY4&2D(\6>^%A)0DC[S-%#WH#.50DK#L2P$.H^U1(JCL&&TC0$
  M)$^%M*IB]H;F#N9FIB8..6E1\5FQ_@?LS'0[].%!S$'S]\'?4X*)2C$VTWI8
  MZ)+Z@K33"7&Q8Y@7RQ40(GO,NYN9F?&$R'Z`_!<!0M<:W[AVJ3N\:AXQ3.^#
  M`V_+7MFZ<6I5=O(7CBAU^O'SYFB,P0)I,Q#)M!?"!,K:34#IE/88_'#0@C'T
  M5(R$F^88?)\#WJ(4<7\L<@]O?'TX]4#>#ATR1_/O_3W$LP1\*CE+C&/9"*LW
  M"VV$0@C:/<(+!@QF*K?NWE5M;6M3#P@(Z*YH-0\?*IDUH7FG%`-6)B!5F@/4
  M=!JR`(V_8N0BE,D;"8^8CSQHVHB&DU(_WR$"+]);<>!!WDNXT%.GO"#-:>WB
  MUG>;&TJ(I86(J*NHD`"$I%$H%OBCFJ4/P%J*C-IKBW./U9<7SV5LX<+>/$@?
  MN5<_0/ZS`!':-05`U`<.K-?_])W=6Q_!5M4DU/3M04@,05(9C>:7#"((GKCY
  MW`&00%J1`ITD`4S;!`@F4*Y36K`[R4;#+!NA5"9V=6>C8XT^"/'&]SB)]#HP
  MG'0VW$^R5EU=C7J-,D8TS&8'4J@UI2CI"DF`W:7.V_?N<4H`@1K('4Z);*DW
  MN:W%^:6-JW;5YL01*\B>TKD1=\RIR]'8:RI*(X40[@Z5V/'4DT%%&=]X>;A3
  M@!0PL$:Q$$_AQ4R[*.T.VG1-0U>B?)F[`CG1F]<NJ[R[_RV><V5E+M)<TCHB
  M;F%+<TM*B-]A4ZCJ.Z!7XHF0*@`YAQ@*DW;&NB02U)<)]46G):[B00+290[S
  M'I$"22%;0>ZE&.55?5C`\=<`"(AME\#?H2^6T*U,L([VNSQ8NA=BWF\JS'HH
  MHT"=W>#%9]8^T528S(/"#2Q=?^02X71-`MX/!EB\,8<>A`I1$CK'A3%2,@!"
  M;9D`0R*`DH*DG'X\%EUF@`(CKRKM$,,^'NSGN0;-PX',:RA"B33F-4*4*S>]
  MY1O4V]U![G2GO>,^@%"[V0421<*N,["^UO*CMW</7K-L_EXW-]?S'-\7,0%H
  MW1%F^?,3AG0W2A0`,G1`]BF9U'\$"_6$\^;",,O`UM96AWDI+/K!<E1(B3ZW
  M9;/:RR^]J`"Q]MQ1=4_581>YE:D)/^7H3+OZ8FOB@PJ6/AJ-M#]3EI=Q,#0P
  M8"C[6Q2RBR)9N3FJI)2B\;!YC[]&DHZ;[#Q(;M\?_8([_-%^[N.W7^>.?OX)
  M$O>+_"Z_V[UX%0H<15(O3,ZE_OY&RV:WK4M&_H#*"_&S1V.-2I!"F5`&#2M:
  MN_=!#A(/,)1@5KL,"B+%T-7-A>)A$LJ^$0BMZ#8K$U6NW4?L<%3JX_DH/,8@
  M01*>SV[H>.Y7972)@#INTIN,YWDZ)XWIMBNX#&XB/*0@H6"Y??<>[SW:>XI\
  M=WL1^O,>63@O,2<IYB,#]$7L498.P#Q]DM0-$X:>)`5@"45>59@8=C+`SZ=9
  MJ9H5PDJ[O2J6W+G5XW)1W[-C8]ZF%0N>*4R).F:",0!3=-R=,0OO8V>&A%R7
  MZ*%BY>YD=R<_+>Y5]#W*&!@5I,S$!Q0F'EIP_"4`0@_[V9]/<O_\X&WN]:U/
  M<MO6+.8.O+Z3/TR\;"E;I]P%%`J,F_S'J>?YXN-WNZDE;^_:$79@[\OSQC96
  M'I507A422@_,<GB@8B6E`F^@3=#0*1_3?EGP&,DTK`JD\CGN)`M$OA!TRRTT
  MN/9@#\<3\1'!J^`QAK`DO(R%+AF",J:4E5'I8DH;K!\SZZM[3$-'WNCF7A03
  MKN-"N`%O0A]O4Y#C=SG^[5%NVU,KN)6S)G+*9=_!%06ALYJK#^;%!A%3`UUB
  MIJ<)OI8K*85^%Q)T?I%.K-3CRI#:\O7LX"KRD+`^\A`-KN?Z,QZ0(\NS9H^I
  M*2!>KDZ\Y_#%J#(5MC#45B<F6'L7Z>5T.R5"N@0+/17+///9$)9R8:(WI<:'
  M$AQ_*8!0[[%W^P9NQY/+N/?WOM0K0.YA%1JE4Q_Y[!_<EUW@Z/8>`%7+XW-:
  M;F5$!'380#8G&+*<-)&ELJ)4`RL'.KA%"*GRD-3F(\](1$?8#1PD@Z[=A^UA
  M'H['4^.C'D/#['<!0S!'(5P9T&,5L')A@3Y2CWD-WO$:9KUIHXJ6J'_X[BCW
  MSJO/<[NVK+O/B[2,&BIY\^6MLQ;/:/O2R=;J%NV+A(/Z48#?I20A&-4L"Q+N
  MY=S9-J+A1%QDZ&C6ATE]@&J),%'O#NFP`F)*'9;^N$/%7A\>Q`7Z7UX(Z<PQ
  M(I`=%W9C^H3FK;@T%"%5GN#O$LHJ5D(Q;(/["A,/(3C^\@#A'KQYM(<R_,;'
  ME\X:@`/CC[#*W<J$CYN3(,"6!4VK5%#&(W`;)B/IED-.E+XMP7R(Q%3KGCPA
  M[&AJ8OQ"#77UP0)@R-D!4(124A;/_QO`Z`L@2@:*^`4H=)PZ^5T/+X+^@V%$
  M>)C-XTL7-R>'27\T@P**!Y:8)B#,*H8T:00$)"*@V=54EO-C=(AT@J"JIBCW
  M2I1N=6TEBKK&DH7S+);.FOQH"$:.[0W5(6ZA3731([(W-:"AW-VJO)05\!SY
  M#!@Y`CJ_HEKF(IQOI\\A0ZY3(,]7>YC!\9<`2!\'OWL/H%CLHL7$K;MK]J8B
  M$STLLS?P]?4Q'C]VC,/V+1M2QS4U;'=`A<41X@STAHT&=9O&Z'D`1#'"D0*(
  M3TN=K8FE@3:MR-RISDWZ`&2[%C8%2+O@Y4H>0Y%C*";OK`2WHZYR=8K:]0=6
  MXOH&2-<`SU7N9RP._4+),]);W\!`WW3]X\L;ZO.23[IBFZT]YMTC(!J']6K(
  MI\3\KL;\*+\K19G)"P7EUMZ4$WM(BRHNF8:Z6I,9+>,6V1GK=!BJJ'2:(HQ3
  M!4!<'.T[IHP>\D5B;%09`UTJ]^O66T5)NR]M7]6''1P/*T!4Z*RSLC+)A-$C
  MC.=,'F<[:](HI[;10US'#:V7-);EN\N3(SW"O9T]HZ3N7H/KJWR>W;PQ]O6=
  M6]N>?^JQ3YY9M9",'UB*4,H-.0?$&,!;"D;I,PFK"F30DJ(5*^HMDC"3GH2X
  MW1]JAC)GRYO)"7'+V!1@(TO`2P2-/L4<AR*4LF+_^0:"RE0/8%PX<QJEZK,X
  M[)?NJ[+U!1#:W&0-S@?U)'0?6[;4Z<-W]HY>-&7\>Y#_N6X-E<@H_$X9$*3.
  MAEXP_=T24=%*#1!WUI?D[$1.5"J821'V0RR5\A`U@1?6"0D.$FW;]%3"$XNF
  M/S6EJ>+K]4NF?__"AI7[$Z+"\EC9.)I5J4*91_44Y#=_27`\;``1)H7JD.2Q
  MG3-V4,2:1^9$[WYIAWS'IB?7/K%DUNG'YT\A*^>V$?JXJ+693!PX@`PN3"6%
  M\<%\"992RVU!/J12/APS$2HNP5!)S,,0$34*D"B4:J/@15)1[8GP=.(Y1'07
  MB#Q&=L;33=S&*.)5+.',9#=N:!\E6YV^@''Q[!EJJC"U\Z=/J5P\>Y:?IE-4
  MV[`WG0?,E,EMJGUX2N&V7)TYTUHMIXT9XC^\,C]NQ>(YB1O6KAY2FA'_G9.!
  M*K^P-`9JC[2"E0KOF$C7,4`W6`[O&.%JT9F?'/TJ`*(L\<-WM+%5RL;P?LJ'
  M(I13=/"-F:>Q8YZ!7A(^FIJ:?IBKE^+1EWU,L>C30J"II?U7`\?#!!"58U]_
  MI7/XX$>.[[^U-WKG<QOSE\^?\<J(ZD(TZ#!!AX$C&VQ_-0.IT!(WI(V>.J&[
  MT=U0C?*AM`8DC+:0V*$2G'[8C^X+&C9M7M$Q6A=X#3<<?C\('/A#1M0&WV<&
  MCA"41CHC?-PZW:&<:`O!.#O,.GA29?1@GQLI,>&/(J:N5BJ+]D81Z4XVHUF#
  MK2N4NHH<Z0)W$5X#DX`<@*()@.C"BZA?N7".NWKY`N\I^O(,SZQ;98>D.+&Y
  M-+TX,UA2VEB46;;^\:45VY_=.';9_)G/3!W5>*8\/1KYE(@G6CH8:Y,0"-?E
  MHTF8"T!$(N>@P,_#HATO)-7&^!HK#:XS*R[L!0A("#U(CTH6!0BE?(A=7+18
  MPU"U%Y!T2[U"W,%61UO;'D-DCO9V=B[(AY3WI!OV%F[RA^_?:OK^CP*$AE3?
  M'CMB?/[T+V&;5B_=3O>=4R8M3@R_[\,"JXXI(.P-D"#JJO)O.^-0.$%KBHI0
  MNT++U@.$/4=#]4Y'O(]>1B<.26>\'QI[09Z=B2%^[?&ATJLI42''XL*#U@3X
  M>HV)"`UNSLU(F9H>%;@7WW_!T]:TTQ&QNP\`-K2BX%;KR*9-N%45<CAQOZ/A
  M=Y]8`;4K%R_R7N3"V=-@!6`6^_HE`.B2T%NH;=GPI-'J^9.3!N?%CQK?6#YM
  M5NNX%X=4E][,B0\C65%2DBK#^"YH'&Y8WV"(?H,U_@8^"`_I:Y5A'H1ZBDS(
  MCM*<*@7>,07O!Z-ZY8Z_B<3"H"-.YGE=GAS]BK6E18U@)EXH\=,]L(4]\7HI
  M*<E:\OQ\M3YTQ7A-9!<79T,O+T\30T-#$^8EC)D9*JF?]%CV>8-YSWZ`_`L`
  MF=S6VIT0MHX988=9B]C4$._*"4VUK9.&#YP[:E#-G*%U%3/KRHHGE!7FCRHO
  MS&LIDV?/E&>E3J.'/#LU<5)\5/A0Z.XV(#RJ$>GK5($+5.WOXU7E[>%686IL
  M6*RIH:ZHL/0P>(K<,)GO7'S^".U+.IH;=09#P3W>WZW3TT+OO=A`[P5A(<%Y
  M+!P)8,VUOG:%*PY%GPH?K2T35:DIPLFCGW^<LOW)97LP@'75U<ZR.S2D(G*&
  M**?2LJTQ+:N"QD&])357<^H9H<D%UG`,2M096'60!^^1`W7&AKS$>Y,&5YZJ
  M+\E[(<#'<[R)L9%B!D4NZ&A',]JZES(OC';3A;<]#0-[\7(:+O`R(2'!.H+B
  MB.+WUNSK=[_&/*<PY^H'R.]?`RTLRRKB77-V6SNS:I$/.Z3!@F$>Q41<7!\6
  M*YB<4R22$>S[:8@1;F%A'EM5DK]<YNEZ&72)3E/HZOKB=J:W=$*@%QE<6G!L
  MW*#J-[!S?5]M5MSK-5GQ.]N&U3VQ<N&L<5/&CTH%,%T?((ESGV!!:\LDU0*Y
  MG$^"#W[\#Z^W7]O9M&1FZP<U1=DD&UXC&W/>\M@`/F1*"?&!%Y&1BHQ8,JPT
  MFXRM*R+(/VX-K2K\?MRPQN>+<C*F^+HYC7!UM&MP$[M4ZNOI%;(F79Y`9RN5
  M5=ZBF"?T4ZJ^=8.#L7G5%.`0FM`SMDR:J-HR:8(P#!-:C]+[KQ6Y?H#\$8`(
  MW;@.<]/&+)2Q$LPB"(=XO!EH>C-OP;2<)PLE)(PD)V9)I@M[FW[,(\S//:4H
  M(?0+.S-C?L["`,+0WG:0_`%](QI"T/'8!X+Y!A(+9?<8*+O'^+J1$&\D_$'2
  M2VF1@?NR4Q*2>Q$K$)9]^7!#GI^GIO3[ZBZ8.=ECQNA!F35Y27D9D0%%\8&>
  MY5'^DAK8P(00OR&I44%#(V0^]796YG)XO0Q6;E98.@N;4EAND<`N!455*9"!
  MPI/]O@Y*_9K[5CPK@P.FTF6TN'"5+S30`]]KSZ9/ZP?('ZUBJ0HJ-]KL8.DS
  MGI")8'C'DH'&NA>S$I@E^WH+YHW,V*$0L9]G(A@*LF0'VRDI-BJ\3I[R7*2[
  M_65C5:Y340W31?QO10L$1EI$1_77*AGB?%*3%=/QU".SW_+V\@QD@'/LI6FH
  MJ=2$Z]',9*]'N4KDJS0"&\D\@=`3AC*O*F.]&1\&!@G[.8Z0++73U=55EN01
  MY@D]*G"]`*2[ZM8/D/^_/DAO94Y-I<$=769Z#S!=@>DP$\;)6D)9'<%`D!$[
  MT/R:!)0M)<&!LK#ZJK*"V6T3VE8NG+%YV:Q)^Y=,'G5\^<SQEYY:-O>'%4OF
  MK4B,C2Y`)2>:'6*I($^Q4Z*V*R>MO7E-HUZ\I@L#G82%1@J3L*J:"_LZ!P9R
  M1;AGIJ2S)11UZ[6PT#<P^@'RL'72^Z*0_#NF\@`3WN3"4J8I.Z0.[+![LC!%
  M<9N'*>4RP5Q/E41G1J\P8P=4K[?N>B_/KP"K@6#LU91Y0'.!-Q1Z1!/V'(H*
  MTF\5#(3/W__O_^G?GT4U^6_\4^DEY-%EA]1$,)/MP`Z^*P.!I\#<V<<50@A6
  M2N#H07$7'$Z5W]$@U!9XT-X\HK!RU`^$?H#\5X"BO`O1@!UV42^YD##?$88U
  M^EQ/G5IA./-[^&?_BO7_ZP?(?Q4H*K]QH^OTD@OI"F[W/GLA_4>C_]]?'2"_
  M=:LKYSAJ2F&-:O_MWO_O3P-(O_7;_ZKU_Q'ZK=\>8/\'B6$!7;&1RA8`````
  M245.1*Y"8((*"*:Y81:8```?BP@````````#8V!H8&9@8.B8,_,NSY^$ZBT<
  MC,_#FV_O635M`Q,C(X]&06))<H9"2F))HB96%8P,#$`:`(SNJ=U%``````"8
  )>"581%HP,#0E
  `
  end
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jul 29 14:22:30 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id DABAD75297E; Sat, 29 Jul 2006 14:22:29 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/lib/js/ index.wml
Message-Id: <20060729122229.DABAD75297E@mail.ossp.org>
Date: Sat, 29 Jul 2006 14:22:29 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   29-Jul-2006 14:22:29
  Branch: HEAD                             Handle: 2006072913222900

  Modified files:
    ossp-web/pkg/lib/js     index.wml

  Log:
    add hyperlinks

  Summary:
    Revision    Changes     Path
    1.5         +15 -13     ossp-web/pkg/lib/js/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/js/index.wml
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 index.wml
  --- ossp-web/pkg/lib/js/index.wml	29 Jul 2006 12:18:54 -0000	1.4
  +++ ossp-web/pkg/lib/js/index.wml	29 Jul 2006 12:22:29 -0000	1.5
  @@ -9,19 +9,21 @@
   
   <h2>Abstract</h2>
   
  -OSSP js is a stand-alone distribution of the JavaScript (JS) programming
  -language reference implementation from Mozilla -- aka "JSRef" or
  -"SpiderMonkey". This distribution provides a smart, stand-alone and
  -portable distribution of Mozilla JavaScript through a build environment
  -based on GNU autoconf, GNU libtool and GNU shtool, including support
  -for easy JavaScript build-time feature set selection (ECMA-3, JS-1.5,
  -JS-1.6), optional CLI line editing support, optional "stdio" based File
  -object support and JS/Perl bindings. Additionally, the C API in "libjs"
  -contains both the JavaScript engine and the required Sun math library
  -("fdlibm") and with all internal symbols carefully protected under the
  -"js" namespace. Finally, a js-config(1) utility and a pkg-config(1)
  -specification is provided to allow applications to easily build with the
  -JavaScript C API.
  +OSSP js is a stand-alone distribution of the JavaScript
  +(JS) programming language reference implementation from <a
  +href="http://www.mozilla.org/">Mozilla</a> -- aka JSRef or <a
  +href="http://www.mozilla.org/js/spidermonkey/">SpiderMonkey</a>. This
  +distribution provides a smart, stand-alone and portable distribution of
  +Mozilla JavaScript through a build environment based on GNU autoconf,
  +GNU libtool and GNU shtool, including support for easy JavaScript
  +build-time feature set selection (ECMA-3, JS-1.5, JS-1.6), optional
  +CLI line editing support, optional "stdio" based File object support
  +and JS/Perl bindings. Additionally, the C API in "libjs" contains both
  +the JavaScript engine and the required Sun math library ("fdlibm") and
  +with all internal symbols carefully protected under the "js" namespace.
  +Finally, a js-config(1) utility and a pkg-config(1) specification is
  +provided to allow applications to easily build with the JavaScript C
  +API.
   
   <h2>Justification</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jul 29 22:02:57 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B8615752863; Sat, 29 Jul 2006 22:02:56 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ ChangeLog THANKS
Message-Id: <20060729200256.B8615752863@mail.ossp.org>
Date: Sat, 29 Jul 2006 22:02:56 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Jul-2006 22:02:56
  Branch: HEAD                             Handle: 2006072921025500

  Modified files:
    ossp-pkg/js             ChangeLog THANKS

  Log:
    change address on owner's request

  Summary:
    Revision    Changes     Path
    1.16        +1  -1      ossp-pkg/js/ChangeLog
    1.3         +1  -1      ossp-pkg/js/THANKS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 ChangeLog
  --- ossp-pkg/js/ChangeLog	29 Jul 2006 11:30:50 -0000	1.15
  +++ ossp-pkg/js/ChangeLog	29 Jul 2006 20:02:55 -0000	1.16
  @@ -23,7 +23,7 @@
      o Increase portability by gracefully downgrading the stat(2) use of
        st_birthtime to st_birthtimensec or even st_ctime.
        [Ralf S. Engelschall <rse@engelschall.com>,
  -      Andrew Vajoczki <vajoczki@rogers.com>]
  +      Andrew Vajoczki <vajoczki@yahoo.com>]
   
      o Apply a few more upstream fixes to jsfile.c.
        [Ralf S. Engelschall <rse@engelschall.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/THANKS
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 THANKS
  --- ossp-pkg/js/THANKS	29 Jul 2006 09:14:40 -0000	1.2
  +++ ossp-pkg/js/THANKS	29 Jul 2006 20:02:55 -0000	1.3
  @@ -14,5 +14,5 @@
   
       o  Thomas Lotterer             <thomas@lotterer.net>
       o  Alfred Reibenschuh          <alfred.reibenschuh@it-austria.com>
  -    o  Andrew Vajoczki             <vajoczki@rogers.com>
  +    o  Andrew Vajoczki             <vajoczki@yahoo.com>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jul 29 22:03:35 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id EF22D752863; Sat, 29 Jul 2006 22:03:34 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ LINKS
Message-Id: <20060729200334.EF22D752863@mail.ossp.org>
Date: Sat, 29 Jul 2006 22:03:34 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Jul-2006 22:03:34
  Branch: HEAD                             Handle: 2006072921033400

  Modified files:
    ossp-pkg/js             LINKS

  Log:
    one more link

  Summary:
    Revision    Changes     Path
    1.3         +1  -0      ossp-pkg/js/LINKS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/LINKS
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 LINKS
  --- ossp-pkg/js/LINKS	23 Jul 2006 17:54:52 -0000	1.2
  +++ ossp-pkg/js/LINKS	29 Jul 2006 20:03:34 -0000	1.3
  @@ -24,4 +24,5 @@
     o http://groups.google.com/group/netscape.public.mozilla.jseng
     o http://groups.google.com/group/comp.lang.javascript
     o http://burstproject.org/build/doc/shells.html
  +  o http://developer.mozilla.org/es4/
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jul 30 10:00:46 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id CF85C752909; Sun, 30 Jul 2006 10:00:45 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ ChangeLog configure.ac ossp-pkg/js/src/ js.c ...
Message-Id: <20060730080045.CF85C752909@mail.ossp.org>
Date: Sun, 30 Jul 2006 10:00:45 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Jul-2006 10:00:45
  Branch: HEAD                             Handle: 2006073009004401

  Modified files:
    ossp-pkg/js             ChangeLog configure.ac
    ossp-pkg/js/src         js.c jsapi.h jsfile.c

  Log:
    Add support for Windows CygWin and MinGW environments.

  Summary:
    Revision    Changes     Path
    1.17        +6  -0      ossp-pkg/js/ChangeLog
    1.16        +6  -1      ossp-pkg/js/configure.ac
    1.4         +9  -0      ossp-pkg/js/src/js.c
    1.3         +1  -1      ossp-pkg/js/src/jsapi.h
    1.10        +9  -0      ossp-pkg/js/src/jsfile.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 ChangeLog
  --- ossp-pkg/js/ChangeLog	29 Jul 2006 20:02:55 -0000	1.16
  +++ ossp-pkg/js/ChangeLog	30 Jul 2006 08:00:44 -0000	1.17
  @@ -11,6 +11,12 @@
   
     This is a list of all changes to OSSP js.
   
  +  Changes between 1.6.20060729 and 1.6.20060730 (2006-07-29 to 2006-07-30)
  +
  +   o Add support for Windows CygWin and MinGW environments.
  +     [Ralf S. Engelschall <rse@engelschall.com>,
  +      Andrew Vajoczki <vajoczki@yahoo.com>]
  +
     Changes between 1.6.20060724 and 1.6.20060729 (2006-07-24 to 2006-07-29)
   
      o Upgrade to upstream sources as of 2006-07-29.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/configure.ac
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 configure.ac
  --- ossp-pkg/js/configure.ac	29 Jul 2006 09:08:15 -0000	1.15
  +++ ossp-pkg/js/configure.ac	30 Jul 2006 08:00:44 -0000	1.16
  @@ -47,7 +47,12 @@
   
   AC_CHECK_MEMBERS([struct stat.st_birthtime, struct stat.st_birthtimensec],,, [#include <sys/stat.h>])
   
  -CPPFLAGS="$CPPFLAGS -DOSSP -DXP_UNIX -DEXPORT_JS_API"
  +CPPFLAGS="$CPPFLAGS -DOSSP"
  +case "${host}" in
  +    *mingw* | *windows* | *winnt* ) CPPFLAGS="$CPPFLAGS -DXP_WIN"  ;;
  +    *                             ) CPPFLAGS="$CPPFLAGS -DXP_UNIX" ;;
  +esac
  +CPPFLAGS="$CPPFLAGS -DEXPORT_JS_API"
   
   dnl #   configure option --with-version
   AC_ARG_WITH([version],
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/js.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 js.c
  --- ossp-pkg/js/src/js.c	24 Jul 2006 18:38:26 -0000	1.3
  +++ ossp-pkg/js/src/js.c	30 Jul 2006 08:00:45 -0000	1.4
  @@ -206,7 +206,11 @@
       }
       JS_SetThreadStackLimit(cx, stackLimit);
   
  +#if defined(OSSP) && defined(XP_WIN)
  +    if (filename) {
  +#else
       if (!isatty(fileno(file))) {
  +#endif
           /*
            * It's not interactive - just execute it.
            *
  @@ -2492,6 +2496,11 @@
       setbuf(stderr,0);
   #endif
   
  +#if defined(OSSP) && defined(XP_WIN)
  +    setvbuf(stderr, 0, _IONBF, 0);
  +    setvbuf(stdout, 0, _IONBF, 0);
  +#endif
  +
       gErrFile = stderr;
       gOutFile = stdout;
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsapi.h
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 jsapi.h
  --- ossp-pkg/js/src/jsapi.h	24 Jul 2006 19:53:01 -0000	1.2
  +++ ossp-pkg/js/src/jsapi.h	30 Jul 2006 08:00:45 -0000	1.3
  @@ -43,7 +43,7 @@
   #ifndef OSSP
   #define OSSP
   #endif
  -#ifndef XP_UNIX
  +#if !defined(XP_UNIX) && !defined(XP_WIN)
   #define XP_UNIX
   #endif
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsfile.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 jsfile.c
  --- ossp-pkg/js/src/jsfile.c	29 Jul 2006 09:15:10 -0000	1.9
  +++ ossp-pkg/js/src/jsfile.c	30 Jul 2006 08:00:45 -0000	1.10
  @@ -52,6 +52,11 @@
   /* ----------------- Platform-specific includes and defines ----------------- */
   #if defined(XP_WIN) || defined(XP_OS2)
   #   include <direct.h>
  +#ifdef OSSP
  +#   include <dirent.h>
  +#   include <fcntl.h>
  +#   include <time.h>
  +#endif
   #   include <io.h>
   #   include <sys/types.h>
   #   include <sys/stat.h>
  @@ -60,6 +65,10 @@
   #   define CURRENT_DIR          "c:\\"
   #   define POPEN                _popen
   #   define PCLOSE               _pclose
  +#ifdef OSSP
  +#   undef mkdir
  +#   define mkdir(file, mode)    _mkdir(file)
  +#endif
   #elif defined(XP_UNIX) || defined(XP_BEOS)
   #   include <strings.h>
   #   include <stdio.h>
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jul 30 10:02:41 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 9AF54752909; Sun, 30 Jul 2006 10:02:41 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: MOZILLA: ossp-pkg/js/src/ .cvsignore Makefile.in Makefile....
Message-Id: <20060730080241.9AF54752909@mail.ossp.org>
Date: Sun, 30 Jul 2006 10:02:41 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Jul-2006 10:02:41
  Branch: MOZILLA                          Handle: -NONE-

  Touched files:            (Branch: MOZILLA)
    ossp-pkg/js/src         .cvsignore Makefile.in Makefile.ref README.html
                            SpiderMonkey.rsp config.mk js.c js.mak js.mdp
                            js.msg js.pkg js3240.rc jsOS240.def jsapi.c
                            jsapi.h jsarena.c jsarena.h jsarray.c jsarray.h
                            jsatom.c jsatom.h jsbit.h jsbool.c jsbool.h
                            jsclist.h jscntxt.c jscntxt.h jscompat.h
                            jsconfig.h jsconfig.mk jscpucfg.c jscpucfg.h
                            jsdate.c jsdate.h jsdbgapi.c jsdbgapi.h jsdhash.c
                            jsdhash.h jsdtoa.c jsdtoa.h jsemit.c jsemit.h
                            jsexn.c jsexn.h jsfile.c jsfile.h jsfile.msg
                            jsfun.c jsfun.h jsgc.c jsgc.h jshash.h jsify.pl
                            jsinterp.c jsinterp.h jslibmath.h jslock.c
                            jslock.h jslocko.asm jslog2.c jslong.c jslong.h
                            jsmath.c jsmath.h jsnum.c jsnum.h jsobj.c jsobj.h
                            jsopcode.c jsopcode.h jsopcode.tbl jsosdep.h
                            jsotypes.h jsparse.c jsparse.h jsprf.c jsprf.h
                            jsprvtd.h jspubtd.h jsregexp.c jsregexp.h jsscan.c
                            jsscan.h jsscope.c jsscope.h jsscript.c jsscript.h
                            jsshell.msg jsstddef.h jsstr.c jsstr.h jstypes.h
                            jsutil.c jsutil.h jsxdrapi.c jsxdrapi.h jsxml.c
                            jsxml.h lock_SunOS.s perfect.js plify_jsdhash.sed
                            prmjtime.c prmjtime.h resource.h rules.mk
                            win32.order
    ossp-pkg/js/src/config  AIX4.1.mk AIX4.2.mk AIX4.3.mk Darwin.mk
                            Darwin1.3.mk Darwin1.4.mk Darwin5.2.mk
                            Darwin5.3.mk HP-UXB.10.10.mk HP-UXB.10.20.mk
                            HP-UXB.11.00.mk IRIX.mk IRIX5.3.mk IRIX6.1.mk
                            IRIX6.2.mk IRIX6.3.mk IRIX6.5.mk Linux_All.mk
                            Mac_OS10.0.mk OSF1V4.0.mk OSF1V5.0.mk
                            SunOS4.1.4.mk SunOS5.3.mk SunOS5.4.mk
                            SunOS5.5.1.mk SunOS5.5.mk SunOS5.6.mk SunOS5.7.mk
                            SunOS5.8.mk SunOS5.9.mk WINNT4.0.mk WINNT5.0.mk
                            WINNT5.1.mk WINNT5.2.mk dgux.mk
    ossp-pkg/js/src/editline
                            Makefile.ref README editline.3 editline.c
                            editline.h sysunix.c unix.h
    ossp-pkg/js/src/fdlibm  .cvsignore Makefile.in Makefile.ref e_acos.c
                            e_acosh.c e_asin.c e_atan2.c e_atanh.c e_cosh.c
                            e_exp.c e_fmod.c e_gamma.c e_gamma_r.c e_hypot.c
                            e_j0.c e_j1.c e_jn.c e_lgamma.c e_lgamma_r.c
                            e_log.c e_log10.c e_pow.c e_rem_pio2.c
                            e_remainder.c e_scalb.c e_sinh.c e_sqrt.c fdlibm.h
                            fdlibm.mak fdlibm.mdp k_cos.c k_rem_pio2.c k_sin.c
                            k_standard.c k_tan.c s_asinh.c s_atan.c s_cbrt.c
                            s_ceil.c s_copysign.c s_cos.c s_erf.c s_expm1.c
                            s_fabs.c s_finite.c s_floor.c s_frexp.c s_ilogb.c
                            s_isnan.c s_ldexp.c s_lib_version.c s_log1p.c
                            s_logb.c s_matherr.c s_modf.c s_nextafter.c
                            s_rint.c s_scalbn.c s_signgam.c s_significand.c
                            s_sin.c s_tan.c s_tanh.c w_acos.c w_acosh.c
                            w_asin.c w_atan2.c w_atanh.c w_cosh.c w_exp.c
                            w_fmod.c w_gamma.c w_gamma_r.c w_hypot.c w_j0.c
                            w_j1.c w_jn.c w_lgamma.c w_lgamma_r.c w_log.c
                            w_log10.c w_pow.c w_remainder.c w_scalb.c w_sinh.c
                            w_sqrt.c
    ossp-pkg/js/src/perlconnect
                            .cvsignore JS.def JS.dsp JS.pm JS.xs Makefile.PL
                            Makefile.ref PerlConnect.dsp PerlConnect.dsw
                            PerlConnect.pm PerlConnectShell.dsp README.html
                            bg.jpg jsperl.c jsperl.h jsperlbuild.pl
                            jsperlpvt.h test.js test.pl typemap

  Log:
    Import new upstream version: Mozilla JavaScript (SpiderMonkey) 1.6 as of 2006-07-30
    
    [Release Tag: MOZILLA_JS_1_6_20060730]

  Summary:
    Revision    Changes     Path
  ____________________________________________________________________________

From ossp-cvs-owner@ossp.org  Sun Jul 30 10:05:19 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id D6DED7528E8; Sun, 30 Jul 2006 10:05:17 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ ChangeLog
Message-Id: <20060730080517.D6DED7528E8@mail.ossp.org>
Date: Sun, 30 Jul 2006 10:05:17 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Jul-2006 10:05:17
  Branch: HEAD                             Handle: 2006073009051700

  Modified files:
    ossp-pkg/js             ChangeLog

  Log:
    remember the upgrade shift

  Summary:
    Revision    Changes     Path
    1.18        +3  -0      ossp-pkg/js/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 ChangeLog
  --- ossp-pkg/js/ChangeLog	30 Jul 2006 08:00:44 -0000	1.17
  +++ ossp-pkg/js/ChangeLog	30 Jul 2006 08:05:17 -0000	1.18
  @@ -17,6 +17,9 @@
        [Ralf S. Engelschall <rse@engelschall.com>,
         Andrew Vajoczki <vajoczki@yahoo.com>]
   
  +   o Upgrade to upstream sources as of 2006-07-30.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
     Changes between 1.6.20060724 and 1.6.20060729 (2006-07-24 to 2006-07-29)
   
      o Upgrade to upstream sources as of 2006-07-29.
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jul 30 10:08:19 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 29E4B752908; Sun, 30 Jul 2006 10:08:19 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/SHARE/ ossp_canvas.wml ossp_navbar.wml ossp_pkg.w...
Message-Id: <20060730080819.29E4B752908@mail.ossp.org>
Date: Sun, 30 Jul 2006 10:08:19 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   30-Jul-2006 10:08:19
  Branch: HEAD                             Handle: 2006073009081701

  Added files:
    ossp-web                imprint.wml
  Modified files:
    ossp-web/SHARE          ossp_canvas.wml ossp_navbar.wml ossp_pkg.wml
    ossp-web/com            sponsors.wml
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/js     index.wml

  Log:
    release OSSP js 1.6.20060730

  Summary:
    Revision    Changes     Path
    1.9         +21 -3      ossp-web/SHARE/ossp_canvas.wml
    1.14        +2  -0      ossp-web/SHARE/ossp_navbar.wml
    1.10        +68 -7      ossp-web/SHARE/ossp_pkg.wml
    1.13        +30 -17     ossp-web/com/sponsors.wml
    1.1         +70 -0      ossp-web/imprint.wml
    1.157       +1  -0      ossp-web/new/news.txt
    1.127       +1  -1      ossp-web/pkg/lib/index.wml
    1.6         +2  -2      ossp-web/pkg/lib/js/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/SHARE/ossp_canvas.wml
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 ossp_canvas.wml
  --- ossp-web/SHARE/ossp_canvas.wml	17 Jul 2003 13:50:43 -0000	1.8
  +++ ossp-web/SHARE/ossp_canvas.wml	30 Jul 2006 08:08:17 -0000	1.9
  @@ -106,6 +106,23 @@
         {#PAGE_CANVAS_NB1#}
         <br>
         <imgdot width=120>
  +	  <p>
  +      <script type="text/javascript"><!--
  +	  google_ad_client    = "pub-6080624771873565";
  +	  google_ad_channel   = "4327428957";
  +	  google_ad_width     = 120;
  +	  google_ad_height    = 240;
  +	  google_ad_format    = "120x240_as";
  +      google_color_border = "D5D5D0";
  +      google_color_bg     = "F5F5F0";
  +      google_color_link   = "993333";
  +      google_color_url    = "666699";
  +      google_color_text   = "333333";
  +	  //--></script>
  +	  <script type="text/javascript"
  +	      src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
  +      </script>
  +
       </td>
       <td width=20><imgdot width=20></td>
       <td width=1 background="$(IMG)/ossp-dashes.png"><imgdot width=1 height=500></td>
  @@ -118,9 +135,9 @@
       <td width=20><imgdot width=20></td>
       <td valign=top align=left>
         {#PAGE_CANVAS_NB2#}
  -	  <p>
  -      <a href="http://www.cw.com/"><img src="$(IMG)/cw.png" alt="Cable & Wireless" border=0></a><br>
  -	  <font size=-1>[ <a href="$(ROOT)/com/sponsors.html">gold sponsor</a> ]</font>
  +	  #<p>
  +      #<a href="http://www.cw.com/"><img src="$(IMG)/cw.png" alt="Cable & Wireless" border=0></a><br>
  +	  #<font size=-1>[ <a href="$(ROOT)/com/sponsors.html">gold sponsor</a> ]</font>
   	  <p>
   	  <table width=100% cellspacing=0 cellpadding=0 border=0>
   	  <tr><td>Home:</td><td align=right><span class=nb1n><a href="http://www.ossp.org/">www.ossp.org</a></span></td></tr>
  @@ -130,6 +147,7 @@
   	  </span>
         <br>
         <imgdot width=120>
  +      {#PAGE_CANVAS_NB3#}
       </td>
     </tr>
     <tr>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/SHARE/ossp_navbar.wml
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 ossp_navbar.wml
  --- ossp-web/SHARE/ossp_navbar.wml	26 Dec 2004 17:18:05 -0000	1.13
  +++ ossp-web/SHARE/ossp_navbar.wml	30 Jul 2006 08:08:17 -0000	1.14
  @@ -165,6 +165,7 @@
     <navbar:button txt="Community"        url=com/                     id=com  menu=com>
     <navbar:button txt="Related"          url=rel/                     id=rel  menu=rel>
     #TODO# <navbar:button txt="Website"          url=sit/                     id=sit  menu=sit>
  +  <navbar:button txt="Imprint"          url=imprint.html              id=imp>
   </nb:stage1>
   
   <nb:stage2 new>
  @@ -257,6 +258,7 @@
     <navbar:button txt="OSSP var"         url=pkg/lib/var/             id=pkg:lib:var>
     <navbar:button txt="OSSP val"         url=pkg/lib/val/             id=pkg:lib:val>
     <navbar:button txt="OSSP xds"         url=pkg/lib/xds/             id=pkg:lib:xds>
  +  <navbar:button txt="OSSP js"          url=pkg/lib/js/              id=pkg:lib:js>
     <navbar:button txt="OSSP str"         url=pkg/lib/str/             id=pkg:lib:str>
     <navbar:button txt="OSSP uuid"        url=pkg/lib/uuid/            id=pkg:lib:uuid>
     <navbar:button txt="OSSP l2"          url=pkg/lib/l2/              id=pkg:lib:l2>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/SHARE/ossp_pkg.wml
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 ossp_pkg.wml
  --- ossp-web/SHARE/ossp_pkg.wml	1 Nov 2002 08:59:13 -0000	1.9
  +++ ossp-web/SHARE/ossp_pkg.wml	30 Jul 2006 08:08:17 -0000	1.10
  @@ -54,17 +54,23 @@
   <table width=100% cellspacing=1 cellpadding=0 border=0>
   <tr>
     <td colspan=3>
  -    <b>Repository:</b> <a href="<get-var cvs>" class=plain><get-var cvs></a>
  +    ChangeLog: <a href="<get-var cvs>ChangeLog" class=plain><get-var cvs>ChangeLog</a>
     </td>
   </tr>
   <tr>
     <td colspan=3>
  -    <b>Distribution:</b> <a href="<get-var url>" class=plain><get-var url></a>
  +    Repository: <a href="<get-var cvs>" class=plain><get-var cvs></a>
     </td>
   </tr>
   <tr>
  -  <td><b>File:</b></td>
  +  <td colspan=3>
  +    Distribution: <a href="<get-var url>" class=plain><get-var url></a><br><br>
  +  </td>
  +</tr>
  +<tr>
  +  <td><b>Distribution Files:</b></td>
     <td align=right><b>Size:</b></td>
  +  # <td align=right><b>MD5:</b></td>
     <td align=right><b>Time:</b></td>
   </tr>
   <:
  @@ -91,10 +97,15 @@
   	$type = "S" if ($f =~ m|$stable|);
   	$type = "U" if ($f =~ m|$unstable|);
       my $class = "files${ncol}${type}";
  +	#my $md5 = `openssl md5 "$f"`;
  +	#$md5 =~ s|^MD5\(.+?\)\s*=\s*(\S+)|$1|s;
  +	##$md5 =~ s|^([a-zA-Z0-9]{16})([a-zA-Z0-9]{16})$|$1<br>$2|;
  +	#$md5 = "<font face=\"Courier,Monospace\" size=\"-6\">$md5</font>";
       $f = "<a href=\"".$url."/".$f."\" class=$class>$f</a>";
       my $e = "<tr class=$class>" .
   	        "  <td width=100%>".$f."&nbsp;&nbsp;</td>" .
   		    "  <td align=right>&nbsp;&nbsp;".$size."</td>" .
  +		    # "  <td align=right>&nbsp;&nbsp;".$md5."</td>" .
   	        "  <td align=right>&nbsp;&nbsp;".sprintf("%"."02d-%"."s-%"."04d", $T[3], $moy[$T[4]], 1900+$T[5]) . "</td>".
   			"</tr>";
       $O .= $e . "\n";
  @@ -151,7 +162,7 @@
   </define-tag>
   
   <define-tag pkg_status>
  -<preserve name assign stable unstable stable_date unstable_date done>
  +<preserve genesis name assign stable unstable stable_date unstable_date done>
   <set-var %attributes>
   <table cellspacing=0 cellpadding=0 border=0> 
     <tr>
  @@ -174,14 +185,19 @@
         </td>
       </tr>
     >>
  -  <ifeq "<get-var done>" "100" "" <group
  +  <ifeq "<get-var genesis>" "none" "" <group
       <tr>
  -      <td>Done:</td><td colspan=2><pbar width=100 pdone="<get-var done>" cdone="#b5b5b0" ctext="#f5f5f0" ctodo="#996666"></td>
  +      <td>Genesis:&nbsp;&nbsp;</td><td colspan=2><get-var genesis></td>
       </tr>
     >>
  +  # <ifeq "<get-var done>" "100" "" <group
  +    <tr>
  +      <td>Finished:</td><td colspan=2><pbar width=100 pdone="<get-var done>" cdone="#b5b5b0" ctext="#f5f5f0" ctodo="#996666"></td>
  +    </tr>
  +  # >>
   </table>
   #  <a href="ftp://ftp.ossp.org/pkg/<get-var type>/<get-var name>/<get-var name>-<get-var stable>.tar.gz"><get-var stable></a>
  -<restore name assign stable unstable stable_date unstable_date done>
  +<restore genesis name assign stable unstable stable_date unstable_date done>
   </define-tag>
   
   <define-tag pkg_author>
  @@ -233,3 +249,48 @@
   <restore name sect path>
   </define-tag>
   
  +##
  +##  Next-Generation Package Macros
  +##
  +
  +<define-tag pkg:see-also endtag=required>
  +<:
  +    my $ref = '%body';
  +    my $O = '';
  +    if ($ref =~ m/^((https?|ftp):\/\/\S+)$/) {
  +        $O = "<a href=\"$ref\">$ref</a>";
  +    }
  +    elsif ($ref =~ m|^(\S+)\(([1-9])\)@(/\S+)$|) {
  +       $O = "<a href=\"$(ROOT)/man/man.cgi$3\">$1</a>($2)";
  +	}
  +    elsif ($ref =~ m|^(\S+)\(([1-9])\)$|) {
  +       $O = "<a href=\"http://www.freebsd.org/cgi/man.cgi?" .
  +            "query=$1&sektion=$2&manpath=FreeBSD+5.0-current&format=html\">" .
  +            "$1</a>($2)";
  +    }
  +    elsif ($ref =~ m|^OSSP\s+(\S+)$|) {
  +        my $name = $1;
  +        foreach my $path (qw(.. ../../lib ../../tool)) {
  +            if (-d "$path/$name") {
  +                $O = "<a href=\"$path/$name/\">$ref</a>";
  +                last;
  +            }
  +        }
  +    }
  +    if ($O eq '') {
  +        $O = $ref;
  +    }
  +    print $O;
  +:>
  +</define-tag>
  +
  +<define-tag pkg:lookup endtag=required>
  +<preserve dict>
  +<set-var %attributes>
  +  <ifeq "<get-var dict>" "jargon"
  +    <a href="http://www.tf.hut.fi/cgi-bin/jargon?search=foo">foo</a>
  +	FIXME
  +  />
  +<restore dict>
  +</define-tag>
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/com/sponsors.wml
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 sponsors.wml
  --- ossp-web/com/sponsors.wml	2 Nov 2005 21:47:09 -0000	1.12
  +++ ossp-web/com/sponsors.wml	30 Jul 2006 08:08:17 -0000	1.13
  @@ -15,7 +15,7 @@
   You can <a href="donations.html">sponsor</a> the project by <a
   href="donations.html"><b>online donating money</b></a> the OSSP project.
   Every sponsor will be added to this page under one of the following
  -three cathegories.
  +three categories.
   
   <h2>Gold Sponsors</h2>
   
  @@ -23,27 +23,33 @@
   resources worth USD $10,000 and more.
   
   <ul>
  -  <li><a href="http://www.cw.com/"><img src="$(IMG)/cw.png" alt="Cable & Wireless" align=right border=0></a>
  -      <a href="http://www.cw.com/de"><b>Cable &amp; Wireless Telecommunication Services GmbH</b></a> (1999-2004)<br>
  +  # <li><a href="http://www.cw.com/"><img src="$(IMG)/cw.png" alt="Cable & Wireless" align=right border=0></a>
  +  #    <a href="http://www.cw.com/de"><b>Cable &amp; Wireless Telecommunication Services GmbH</b></a> (1999-2004)<br>
  +  #   (Hosting Rack-Space, Network Connectivity, Hardware, Manpower)
  +  <li><font color="#993333"><b>Cable &amp; Wireless Telecommunication Services GmbH</b></font> (1999-2004)<br>
         (Hosting Rack-Space, Network Connectivity, Hardware, Manpower)
   </ul>
   
   <h2>Silver Sponsors</h2>
   
  -Each of following individuals and companies donated (in total) money and/or
  +Each of the following individuals and companies donated (in total) money and/or
   resources worth USD $1,000 and more.
   
   <ul>
  -  <li><a href="http://www.engelschall.com/"><b>Ralf S. Engelschall</b></a> (1998-2005)<br>
  +  <li><a href="http://www.engelschall.com/"><b>Ralf S. Engelschall</b></a> (1998-2006)<br>
         (Domain Registration, System Administration, Hardware, Financial Sponsoring)
  -  <li><a href="http://www.lotterer.net/thomas/"><b>Thomas Lotterer</b></a> (2004-2005)<br>
  +  <li><a href="http://www.lotterer.net/thomas/"><b>Thomas Lotterer</b></a> (2004-2006)<br>
         (Hardware)
  -  <li><a href="http://www.sdm.de/"><b>sd&m software design & management AG</b></a> (1998)<br>
  -      (Computing Resources, Network Resources, Manpower) 
  -  <li><a href="http://www.bauernhofurlaub-ostallgaeu.de/"><b>Eva Lachenmayer, Bauernhofurlaub im Allgäu</b></a> (2004-2005)<br>
  +  <li><font color="#993333"><b>Tobias Honscha</b></font> <a href="http://pliant.cx/"><b>Münzen</b></a> (2006)<br>
  +      (Financial Sponsoring)
  +  <li><a href="http://www.nur-mietwagen.de/"><b>Oliver Bornhak</b></a> (2006)<br>
         (Financial Sponsoring)
  -  <li><a href="http://www.sco.com/"><b>The SCO Group</b></a> (2003)<br>
  +  <li><a href="http://www.bauernhofurlaub-ostallgaeu.de/"><b>Eva Lachenmayer, Bauernhofurlaub im Allgäu</b></a> (2004-2006)<br>
  +      (Financial Sponsoring)
  +  <li><font color="#993333"><b>The SCO Group</b></font> (2003)<br>
         (Porting Software Platform UnixWare v7.1.3 & SDK) 
  +  <li><font color="#993333"><b>sd&m software design & management AG</b></font> (1998)<br>
  +      (Computing Resources, Network Resources, Manpower) 
   </ul>
   
   <h2>Bronze Sponsors</h2>
  @@ -52,12 +58,19 @@
   resources worth USD $100 and more.
   
   <ul>
  -   <li><a href="http://www.agenturwinkler.com/"><b>Agentur Winkler, Werbeartikel</b></a> (2004)
  -   <li><a href="http://www.set-die-agentur.de/"><b>Markus Lenk, Set - Die Agentur</b></a> (2004)
  -   <li><a href="http://www.abakus-internet-marketing.de/"><b>ABAKUS Internet Marketing</b></a> (2003)
  -   <li><a href="http://www.southmedia.de/"><b>Jan Piotrowski, southmedia</b></a> (2003)
  -   <li><a href="mailto:will@webmaster-toolkit.com"><b>Will Board, Webmaster Toolkit</b></a> (2003)
  -   <li><a href="http://www.trendfish.de/"><b>Trendfish Marketing</b></a> (2003)
  -   <li><a href="mailto:alby@thirteen.net"><b>Albert Lash</b></a> (2002)
  +   #<li><a href="http://www.agenturwinkler.com/"><b>Agentur Winkler, Werbeartikel</b></a> (2004)
  +   #<li><a href="http://www.set-die-agentur.de/"><b>Markus Lenk, Set - Die Agentur</b></a> (2004)
  +   #<li><a href="http://www.abakus-internet-marketing.de/"><b>ABAKUS Internet Marketing</b></a> (2003)
  +   #<li><a href="http://www.southmedia.de/"><b>Jan Piotrowski, southmedia</b></a> (2003)
  +   #<li><a href="mailto:will@webmaster-toolkit.com"><b>Will Board, Webmaster Toolkit</b></a> (2003)
  +   #<li><a href="http://www.trendfish.de/"><b>Trendfish Marketing</b></a> (2003)
  +   #<li><a href="mailto:alby@thirteen.net"><b>Albert Lash</b></a> (2002)
  +   <li>Agentur Winkler, Werbeartikel (2004)
  +   <li>Markus Lenk, Set - Die Agentur (2004)
  +   <li>ABAKUS Internet Marketing (2003)
  +   <li>Jan Piotrowski, southmedia (2003)
  +   <li>Will Board, Webmaster Toolkit (2003)
  +   <li>Trendfish Marketing (2003)
  +   <li>Albert Lash (2002)
   </ul>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/imprint.wml
  ============================================================================
  $ cvs diff -u -r0 -r1.1 imprint.wml
  --- /dev/null	2006-07-30 10:06:55 +0200
  +++ imprint.wml	2006-07-30 10:08:17 +0200
  @@ -0,0 +1,70 @@
  +
  +#use wml::ossp area=tit
  +
  +<title>Imprint</title>
  +
  +<h1>Imprint</h1>
  +
  +<h2>Contact</h2>
  +
  +The OSSP Project<br>
  +c/o Ralf S. Engelschall<br>
  +Silnerstr. 28<br>
  +85221 Dachau<br>
  +GERMANY
  +
  +<p>
  +<a href="http://www.ossp.org/">www.ossp.org</a><br>
  +<a href="mailto:ossp@ossp.org">ossp@ossp.org</a>
  +
  +<p>
  +Copyright &copy; Ralf S. Engelschall.<br>
  +All Rights Reserved.<br>
  +
  +<p>
  +<h2>Responsibility Notice</h2>
  +
  +In this Internet presence, connections to the content of other vendors
  +and organisations, so-called links, are provided. These links serve
  +solely as a service to the user of this Internet presence. According to
  +§5 Abs. 1 TDG (Germany) we are only responsible for our own content.
  +For links to other content of third-party vendors we are, according to
  +§5 Abs. 2 TDG (Germany), only responsible if we are aware of unlawful
  +or criminal content and it is technically possible and reasonable
  +to prevent its use. Also we are not obligated to check at periodic
  +intervals the contents of services from third parties for their
  +illegality or culpability. As soon as we learn of the illegal content
  +of web sites of a third party, the corresponding link will be removed
  +from our site. Beyond this we would like to expressly emphasize that we
  +have no influence on the form and content of the linked pages. For this
  +reason we distance ourselves expressly from all content of all linked
  +sites on the entire web site including all sub sites. This declaration
  +applies for all links on the home page and for all content of the
  +pages to which links or banners link. If the content of these internet
  +products infringe upon applicable copyright or trademark laws, these
  +will be removed as quickly as possible after notification.
  +
  +<p>
  +<h2>Haftungshinweis</h2>
  +
  +In dieser Internet-Präsenz werden Verbindungen, sogenannte Links, zum
  +Inhalt von anderen Herstellern und Organisationen bereitgestellt.
  +Gemäß § 5 Abs.1 TDG sind wir ausschließlich nur für die eigenen
  +Inhalte verantwortlich. Für Links auf fremde Inhalte dritter Anbieter
  +sind wir gemäß § 5 Abs.2 TDG nur verantwortlich, wenn wir von einem
  +rechtswidrigen oder strafbaren Gehalt positive Kenntnis haben und es
  +technisch möglich und zumutbar ist, deren Nutzung zu verhindern. Auch
  +sind wir nicht verpflichtet, in periodischen Abständen den Inhalt von
  +Angeboten Dritter auf deren Rechtswidrigkeit oder Strafbarkeit zu
  +überprüfen. Sobald wir von dem rechtswidrigen Inhalt der Web-Seiten
  +Dritter erfahren, wird der entsprechende Link von unserer Seite
  +entfernt. Weiterhin möchten wir ausdrücklich betonen, dass wir keinerlei
  +Einfluss auf die Gestaltung und die Inhalte der gelinkten Seiten haben.
  +Deshalb distanzieren wir uns hiermit ausdrücklich von allen Inhalten
  +aller gelinkten Seiten auf der gesamten Website inklusive aller
  +Unterseiten. Diese Erklärung gilt für alle Links auf der Homepage und
  +für alle Inhalte der Seiten, zu denen Links oder Banner führen. Sollten
  +Inhalte dieser Internetangebote gegen geltendes Urheberrecht oder das
  +Markengesetz verstoßen, werden diese auf Hinweis schnellstmöglich
  +entfernt.
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.156 -r1.157 news.txt
  --- ossp-web/new/news.txt	29 Jul 2006 11:42:08 -0000	1.156
  +++ ossp-web/new/news.txt	30 Jul 2006 08:08:17 -0000	1.157
  @@ -1,3 +1,4 @@
  +30-Jul-2006: Released L<OSSP js> 1.6.20060730
   29-Jul-2006: Released L<OSSP js> 1.6.20060729
   28-Jul-2006: Released L<OSSP uuid> 1.5.0
   25-Jul-2006: Released T<OSSP shiela> 1.1.7
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.126 -r1.127 index.wml
  --- ossp-web/pkg/lib/index.wml	29 Jul 2006 11:42:08 -0000	1.126
  +++ ossp-web/pkg/lib/index.wml	30 Jul 2006 08:08:18 -0000	1.127
  @@ -42,7 +42,7 @@
   			done=95 stable=none unstable=0.9.3>
     <pkg_item name="js" longname="OSSP js" type="lib"
               desc="Mozilla JavaScript Engine"
  -			done=100 stable=none unstable=1.6.20060729>
  +			done=100 stable=none unstable=1.6.20060730>
     <pkg_item name="str" longname="OSSP str" type="lib"
               desc="String Handling"
   			done=95 stable=none unstable=0.9.12>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/js/index.wml
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 index.wml
  --- ossp-web/pkg/lib/js/index.wml	29 Jul 2006 12:22:29 -0000	1.5
  +++ ossp-web/pkg/lib/js/index.wml	30 Jul 2006 08:08:18 -0000	1.6
  @@ -63,7 +63,7 @@
   <pkg_status
       name="js" assign="rse"
   	genesis="Jul-2006"
  -    stable="1.6.20060729" stable_date="29-Jul-2006"
  +    stable="1.6.20060730" stable_date="30-Jul-2006"
       unstable="none"       unstable_date="none"
   	done=100>
   
  @@ -74,7 +74,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/js/
       directory=$(FTP_ROOT_DIR)/pkg/lib/js/
       files="js-*.tar.gz" 
  -	stable="js-1.6.20060729.tar.gz" unstable="none">
  +	stable="js-1.6.20060730.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jul 30 10:10:02 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id ECDE3752909; Sun, 30 Jul 2006 10:10:01 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ README VERSION devtool.conf ossp-pkg/js/src/ ...
Message-Id: <20060730081001.ECDE3752909@mail.ossp.org>
Date: Sun, 30 Jul 2006 10:10:01 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Jul-2006 10:10:01
  Branch: HEAD                             Handle: 2006073009100100

  Modified files:
    ossp-pkg/js             README VERSION devtool.conf
    ossp-pkg/js/src         jsapi.c

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.11        +1  -1      ossp-pkg/js/README
    1.5         +1  -1      ossp-pkg/js/VERSION
    1.8         +1  -0      ossp-pkg/js/devtool.conf
    1.10        +1  -1      ossp-pkg/js/src/jsapi.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/README
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 README
  --- ossp-pkg/js/README	29 Jul 2006 11:33:35 -0000	1.10
  +++ ossp-pkg/js/README	30 Jul 2006 08:10:01 -0000	1.11
  @@ -6,7 +6,7 @@
                                     |__/      
   
     OSSP js - Mozilla JavaScript Engine
  -  Version 1.6.20060729 (29-Jul-2006)
  +  Version 1.6.20060730 (30-Jul-2006)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/VERSION
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 VERSION
  --- ossp-pkg/js/VERSION	29 Jul 2006 11:33:35 -0000	1.4
  +++ ossp-pkg/js/VERSION	30 Jul 2006 08:10:01 -0000	1.5
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP js (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP js, Version 1.6.20060729 (29-Jul-2006)
  +  This is OSSP js, Version 1.6.20060730 (30-Jul-2006)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 devtool.conf
  --- ossp-pkg/js/devtool.conf	29 Jul 2006 11:33:35 -0000	1.7
  +++ ossp-pkg/js/devtool.conf	30 Jul 2006 08:10:01 -0000	1.8
  @@ -25,6 +25,7 @@
       ./shtool version -l txt -n "OSSP js" -e VERSION
       V=`./shtool version -l txt -d long VERSION`
       sed -e "s/Version .*/Version $V/g" <README >README.n
  +    mv README.n README
       V=`./shtool version -l txt -d short VERSION`
       sed -e "s/OSSP js 1.6........./OSSP js $V/g" <src/jsapi.c >src/jsapi.c.n
       mv src/jsapi.c.n src/jsapi.c
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsapi.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 jsapi.c
  --- ossp-pkg/js/src/jsapi.c	29 Jul 2006 11:33:35 -0000	1.9
  +++ ossp-pkg/js/src/jsapi.c	30 Jul 2006 08:10:01 -0000	1.10
  @@ -1085,7 +1085,7 @@
   JS_GetImplementationVersion(void)
   {
   #ifdef OSSP
  -    return "JavaScript-C 1.6 pre-release 1 2006-04-04 (OSSP js 1.6.20060729)";
  +    return "JavaScript-C 1.6 pre-release 1 2006-04-04 (OSSP js 1.6.20060730)";
   #else
       return "JavaScript-C 1.6 pre-release 1 2006-04-04";
   #endif
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jul 31 13:32:37 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 14C88752805; Mon, 31 Jul 2006 13:32:37 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog devtool.conf
Message-Id: <20060731113237.14C88752805@mail.ossp.org>
Date: Mon, 31 Jul 2006 13:32:37 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Jul-2006 13:32:37
  Branch: HEAD                             Handle: 2006073112323600

  Modified files:
    ossp-pkg/uuid           ChangeLog devtool.conf

  Log:
    Fix the tarball rolling procedure to make sure we
    do not distribute binary files again.

  Summary:
    Revision    Changes     Path
    1.126       +6  -0      ossp-pkg/uuid/ChangeLog
    1.29        +2  -0      ossp-pkg/uuid/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.125 -r1.126 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	28 Jul 2006 19:17:43 -0000	1.125
  +++ ossp-pkg/uuid/ChangeLog	31 Jul 2006 11:32:36 -0000	1.126
  @@ -11,6 +11,12 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 1.5.0 and 1.5.1 (28-Jul-2006 to 31-Jul-2006)
  +
  +   o Fix the tarball rolling procedure to make sure we
  +     do not distribute binary files again.
  +     [Ralf S. Engelschall]
  +
     Changes between 1.4.2 and 1.5.0 (13-Mar-2006 to 28-Jul-2006)
   
      o Fixed potential memory leak in uuid_create() as spotted by SPLINT.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 devtool.conf
  --- ossp-pkg/uuid/devtool.conf	20 Jul 2006 17:04:28 -0000	1.28
  +++ ossp-pkg/uuid/devtool.conf	31 Jul 2006 11:32:36 -0000	1.29
  @@ -37,6 +37,8 @@
       mv perl/uuid_compat.pm.n perl/uuid_compat.pm
   
   %dist
  +    echo "+++ dist cleaning"
  +    make distclean
       echo "+++ removing old tarballs"
       rm -f uuid-*.tar.gz
       echo "+++ generating"
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jul 31 13:33:05 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B4850752802; Mon, 31 Jul 2006 13:33:04 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ USERS
Message-Id: <20060731113304.B4850752802@mail.ossp.org>
Date: Mon, 31 Jul 2006 13:33:04 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Jul-2006 13:33:01
  Branch: HEAD                             Handle: 2006073112330000

  Modified files:
    ossp-pkg/uuid           USERS

  Log:
    one more known user

  Summary:
    Revision    Changes     Path
    1.5         +4  -1      ossp-pkg/uuid/USERS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/USERS
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 USERS
  --- ossp-pkg/uuid/USERS	31 Aug 2005 11:10:30 -0000	1.4
  +++ ossp-pkg/uuid/USERS	31 Jul 2006 11:33:00 -0000	1.5
  @@ -36,7 +36,10 @@
       http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/gauche/Gauche-uuid/
       http://www.shiro.dreamhost.com/scheme/gauche/
   
  -  o CGI::Session::ID::UUID
  +  o Guile Extension Examples (GEE)
  +    https://gna.org/projects/gee
  +
  +  o CGI::Session::ID::uuid
       UUID based ID generator backend for CGI::Session
       http://www.cpan.org/modules/by-authors/id/RSE/ 
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jul 31 13:37:56 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 75123752806; Mon, 31 Jul 2006 13:37:56 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ ChangeLog configure.ac
Message-Id: <20060731113756.75123752806@mail.ossp.org>
Date: Mon, 31 Jul 2006 13:37:56 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Jul-2006 13:37:56
  Branch: HEAD                             Handle: 2006073112375600

  Modified files:
    ossp-pkg/js             ChangeLog configure.ac

  Log:
    Use Autoconf macros AC_CANONICAL_BUILD and AC_CANONICAL_HOST to
    make sure that the host identification is really available.
    
    Submitted by: Alfred Reibenschuh <alfred.reibenschuh@it-austria.com>

  Summary:
    Revision    Changes     Path
    1.19        +6  -0      ossp-pkg/js/ChangeLog
    1.17        +3  -0      ossp-pkg/js/configure.ac
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 ChangeLog
  --- ossp-pkg/js/ChangeLog	30 Jul 2006 08:05:17 -0000	1.18
  +++ ossp-pkg/js/ChangeLog	31 Jul 2006 11:37:56 -0000	1.19
  @@ -11,6 +11,12 @@
   
     This is a list of all changes to OSSP js.
   
  +  Changes between 1.6.20060730 and 1.6.20060801 (2006-07-30 to 2006-08-01)
  +
  +   o Use Autoconf macros AC_CANONICAL_BUILD and AC_CANONICAL_HOST to
  +     make sure that the host identification is really available.
  +     [Alfred Reibenschuh <alfred.reibenschuh@it-austria.com>]
  +
     Changes between 1.6.20060729 and 1.6.20060730 (2006-07-29 to 2006-07-30)
   
      o Add support for Windows CygWin and MinGW environments.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/configure.ac
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 configure.ac
  --- ossp-pkg/js/configure.ac	30 Jul 2006 08:00:44 -0000	1.16
  +++ ossp-pkg/js/configure.ac	31 Jul 2006 11:37:56 -0000	1.17
  @@ -33,6 +33,9 @@
       "Configuring %BOSSP js%b (Mozilla JavaScript Engine), version %B${JS_VERSION}%b"
   AC_SUBST(JS_VERSION)
   
  +AC_CANONICAL_BUILD
  +AC_CANONICAL_HOST
  +
   AC_PROG_MAKE_SET
   AC_PROG_CC
   AC_CHECK_DEBUGGING
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jul 31 13:42:41 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 3E83B752806; Mon, 31 Jul 2006 13:42:41 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog ossp-pkg/uuid/php/ Makefile.local
Message-Id: <20060731114241.3E83B752806@mail.ossp.org>
Date: Mon, 31 Jul 2006 13:42:41 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Jul-2006 13:42:41
  Branch: HEAD                             Handle: 2006073112424000

  Modified files:
    ossp-pkg/uuid           ChangeLog
    ossp-pkg/uuid/php       Makefile.local

  Log:
    Fix the "make distclean" target of php/Makefile.local
    to make sure the ".deps" file is not left over.

  Summary:
    Revision    Changes     Path
    1.127       +4  -0      ossp-pkg/uuid/ChangeLog
    1.5         +1  -1      ossp-pkg/uuid/php/Makefile.local
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.126 -r1.127 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	31 Jul 2006 11:32:36 -0000	1.126
  +++ ossp-pkg/uuid/ChangeLog	31 Jul 2006 11:42:40 -0000	1.127
  @@ -13,6 +13,10 @@
   
     Changes between 1.5.0 and 1.5.1 (28-Jul-2006 to 31-Jul-2006)
   
  +   o Fix the "make distclean" target of php/Makefile.local
  +     to make sure the ".deps" file is not left over.
  +     [Ralf S. Engelschall]
  +
      o Fix the tarball rolling procedure to make sure we
        do not distribute binary files again.
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/php/Makefile.local
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 Makefile.local
  --- ossp-pkg/uuid/php/Makefile.local	4 Apr 2006 14:58:43 -0000	1.4
  +++ ossp-pkg/uuid/php/Makefile.local	31 Jul 2006 11:42:40 -0000	1.5
  @@ -55,7 +55,7 @@
   	@$(MAKE) $(MFLAGS) -f Makefile clean || true
   
   distclean: clean
  -	-rm -f Makefile
  +	-rm -f Makefile .deps
   	-rm -f config.status configure.lineno
   	-rm -f config.h config.log
   	-rm -f *.core *~
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jul 31 14:02:59 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 2CEBE75291E; Mon, 31 Jul 2006 14:02:58 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog MANIFEST devtool.conf
Message-Id: <20060731120258.2CEBE75291E@mail.ossp.org>
Date: Mon, 31 Jul 2006 14:02:58 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Jul-2006 14:02:58
  Branch: HEAD                             Handle: 2006073113025601

  Added files:
    ossp-pkg/uuid           MANIFEST
  Modified files:
    ossp-pkg/uuid           ChangeLog devtool.conf

  Log:
    Now especially use a MANIFEST file which explicitly lists all files
    which form the distribution tarball. We compare the tarball and the
    MANIFEST file for differences in the "devtool dist" now.

  Summary:
    Revision    Changes     Path
    1.128       +4  -1      ossp-pkg/uuid/ChangeLog
    1.1         +81 -0      ossp-pkg/uuid/MANIFEST
    1.30        +10 -1      ossp-pkg/uuid/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.127 -r1.128 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	31 Jul 2006 11:42:40 -0000	1.127
  +++ ossp-pkg/uuid/ChangeLog	31 Jul 2006 12:02:56 -0000	1.128
  @@ -18,7 +18,10 @@
        [Ralf S. Engelschall]
   
      o Fix the tarball rolling procedure to make sure we
  -     do not distribute binary files again.
  +     do not distribute binary files again. This now especially uses
  +     a MANIFEST file which explicitly lists all files which form the
  +     distribution tarball. We compare the tarball and the MANIFEST file
  +     for differences in the "devtool dist" now.
        [Ralf S. Engelschall]
   
     Changes between 1.4.2 and 1.5.0 (13-Mar-2006 to 28-Jul-2006)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/MANIFEST
  ============================================================================
  $ cvs diff -u -r0 -r1.1 MANIFEST
  --- /dev/null	2006-07-31 14:01:47 +0200
  +++ MANIFEST	2006-07-31 14:02:58 +0200
  @@ -0,0 +1,81 @@
  +AUTHORS
  +BINDINGS
  +ChangeLog
  +HISTORY
  +INSTALL
  +MANIFEST
  +Makefile.PL
  +Makefile.in
  +NEWS
  +OVERVIEW
  +PORTING
  +README
  +SEEALSO
  +THANKS
  +TODO
  +USERS
  +aclocal.m4
  +config.guess
  +config.h.in
  +config.sub
  +configure
  +configure.ac
  +libtool.m4
  +ltmain.sh
  +perl/MANIFEST
  +perl/Makefile.PL
  +perl/uuid.pm
  +perl/uuid.pod
  +perl/uuid.tm
  +perl/uuid.ts
  +perl/uuid.xs
  +perl/uuid_compat.pm
  +perl/uuid_compat.pod
  +perl/uuid_compat.ts
  +pgsql/Makefile
  +pgsql/uuid.c
  +pgsql/uuid.sql.in
  +pgsql/uuid.txt
  +php/Makefile.local
  +php/config.m4
  +php/package.xml
  +php/uuid.c
  +php/uuid.php4
  +php/uuid.php5
  +php/uuid.ts
  +shtool
  +uuid++.3
  +uuid++.cc
  +uuid++.hh
  +uuid++.pod
  +uuid-config.1
  +uuid-config.in
  +uuid-config.pod
  +uuid.1
  +uuid.3
  +uuid.ac
  +uuid.c
  +uuid.h.in
  +uuid.pc.in
  +uuid.pod
  +uuid_ac.h
  +uuid_bm.h
  +uuid_cli.c
  +uuid_cli.pod
  +uuid_dce.c
  +uuid_dce.h
  +uuid_mac.c
  +uuid_mac.h
  +uuid_md5.c
  +uuid_md5.h
  +uuid_prng.c
  +uuid_prng.h
  +uuid_sha1.c
  +uuid_sha1.h
  +uuid_str.c
  +uuid_str.h
  +uuid_ui128.c
  +uuid_ui128.h
  +uuid_ui64.c
  +uuid_ui64.h
  +uuid_vers.h
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 devtool.conf
  --- ossp-pkg/uuid/devtool.conf	31 Jul 2006 11:32:36 -0000	1.29
  +++ ossp-pkg/uuid/devtool.conf	31 Jul 2006 12:02:57 -0000	1.30
  @@ -64,8 +64,17 @@
       V=`./shtool version -l c -d short uuid_vers.h`
       ./shtool tarball -o uuid-${V}.tar.gz -d uuid-${V} -u ossp -g ossp \
                        -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*,*.tar.gz,^#.*,.*~$' -c 'gzip --best' .
  +    echo "+++ sanity checking"
  +    gunzip <uuid-${V}.tar.gz | tar tf - | sed -e "s;^uuid-${V}/;;" | sort >MANIFEST.tmp
  +    if ! cmp MANIFEST MANIFEST.tmp; then
  +        echo "devtool:sanity:ERROR: EXPECTED AND EXISTING DISTRIBUTION FILES DO NOT MATCH"
  +        diff -u3 MANIFEST MANIFEST.tmp
  +        rm -f MANIFEST.tmp
  +        exit 1
  +    fi
  +    rm -f MANIFEST.tmp
  +    echo "+++ result:"
       ls -l uuid-${V}.tar.gz
  -    echo "+++ testing"
       gunzip <uuid-${V}.tar.gz | tar tvf - | head -10
       echo "[...]"
       gunzip <uuid-${V}.tar.gz | tar tvf - | tail -10
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jul 31 14:22:16 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 0D91275287E; Mon, 31 Jul 2006 14:22:16 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog Makefile.in
Message-Id: <20060731122216.0D91275287E@mail.ossp.org>
Date: Mon, 31 Jul 2006 14:22:16 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Jul-2006 14:22:16
  Branch: HEAD                             Handle: 2006073113221500

  Modified files:
    ossp-pkg/uuid           ChangeLog Makefile.in

  Log:
    Use the available variables $(LIB_NAME), $(DCE_NAME) and
    $(CXX_NAME) more consistently in Makefile.in to allow packagers to
    override the library name with less patching.

  Summary:
    Revision    Changes     Path
    1.129       +5  -0      ossp-pkg/uuid/ChangeLog
    1.42        +6  -6      ossp-pkg/uuid/Makefile.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.128 -r1.129 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	31 Jul 2006 12:02:56 -0000	1.128
  +++ ossp-pkg/uuid/ChangeLog	31 Jul 2006 12:22:15 -0000	1.129
  @@ -13,6 +13,11 @@
   
     Changes between 1.5.0 and 1.5.1 (28-Jul-2006 to 31-Jul-2006)
   
  +   o Use the available variables $(LIB_NAME), $(DCE_NAME) and
  +     $(CXX_NAME) more consistently in Makefile.in to allow packagers to
  +     override the library name with less patching.
  +     [Piotr Roszatycki <dexter@debian.org>]
  +
      o Fix the "make distclean" target of php/Makefile.local
        to make sure the ".deps" file is not left over.
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.41 -r1.42 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	11 May 2006 09:37:27 -0000	1.41
  +++ ossp-pkg/uuid/Makefile.in	31 Jul 2006 12:22:15 -0000	1.42
  @@ -245,12 +245,12 @@
   	    echo "$(SHTOOL) install -c -m 644 $(S)/uuid++.3 $(DESTDIR)$(mandir)/man3/"; \
   	    $(SHTOOL) install -c -m 644 $(S)/uuid++.3 $(DESTDIR)$(mandir)/man3/; \
   	fi
  -	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libuuid.la $(DESTDIR)$(libdir)/
  +	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 $(LIB_NAME) $(DESTDIR)$(libdir)/
   	-@if [ ".$(WITH_DCE)" = .yes ]; then \
  -	    $(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libuuid_dce.la $(DESTDIR)$(libdir)/; \
  +	    $(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 $(DCE_NAME) $(DESTDIR)$(libdir)/; \
   	fi
   	-@if [ ".$(WITH_CXX)" = .yes ]; then \
  -	    $(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libuuid++.la $(DESTDIR)$(libdir)/; \
  +	    $(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 $(CXX_NAME) $(DESTDIR)$(libdir)/; \
   	fi
   	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -s -m 755 uuid $(DESTDIR)$(bindir)/
   	$(SHTOOL) install -c -m 644 $(S)/uuid.1 $(DESTDIR)$(mandir)/man1/
  @@ -268,12 +268,12 @@
   uninstall:
   	-$(RM) $(DESTDIR)$(mandir)/man1/uuid.1
   	-@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(bindir)/uuid
  -	-@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libuuid.la
  +	-@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/$(LIB_NAME)
   	-@if [ ".$(WITH_DCE)" = .yes ]; then \
  -	    $(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libuuid_dce.la; \
  +	    $(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/$(DCE_NAME); \
   	fi
   	-@if [ ".$(WITH_CXX)" = .yes ]; then \
  -	    $(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libuuid++.la; \
  +	    $(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/$(CXX_NAME); \
   	fi
   	-$(RM) $(DESTDIR)$(mandir)/man3/uuid.3
   	-@if [ ".$(WITH_CXX)" = .yes ]; then \
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jul 31 14:43:33 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 3A00E752878; Mon, 31 Jul 2006 14:43:33 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog ossp-pkg/uuid/pgsql/ Makefile uui...
Message-Id: <20060731124333.3A00E752878@mail.ossp.org>
Date: Mon, 31 Jul 2006 14:43:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Jul-2006 14:43:33
  Branch: HEAD                             Handle: 2006073113433200

  Modified files:
    ossp-pkg/uuid           ChangeLog
    ossp-pkg/uuid/pgsql     Makefile uuid.sql.in

  Log:
    Use "MODULE_PATHNAME" instead of "@MODULE_PATHNAME@" in
    uuid.sql.in to be more aligned to the PostgreSQL styles.
    
    Submitted by: Simon "janus" Dassow <janus@errornet.de>

  Summary:
    Revision    Changes     Path
    1.130       +4  -0      ossp-pkg/uuid/ChangeLog
    1.3         +1  -1      ossp-pkg/uuid/pgsql/Makefile
    1.5         +15 -15     ossp-pkg/uuid/pgsql/uuid.sql.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.129 -r1.130 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	31 Jul 2006 12:22:15 -0000	1.129
  +++ ossp-pkg/uuid/ChangeLog	31 Jul 2006 12:43:32 -0000	1.130
  @@ -13,6 +13,10 @@
   
     Changes between 1.5.0 and 1.5.1 (28-Jul-2006 to 31-Jul-2006)
   
  +   o Use "MODULE_PATHNAME" instead of "@MODULE_PATHNAME@" in
  +     uuid.sql.in to be more aligned to the PostgreSQL styles.
  +     [Simon "janus" Dassow <janus@errornet.de>]
  +
      o Use the available variables $(LIB_NAME), $(DCE_NAME) and
        $(CXX_NAME) more consistently in Makefile.in to allow packagers to
        override the library name with less patching.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/pgsql/Makefile
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 Makefile
  --- ossp-pkg/uuid/pgsql/Makefile	12 Jan 2006 20:31:51 -0000	1.2
  +++ ossp-pkg/uuid/pgsql/Makefile	31 Jul 2006 12:43:32 -0000	1.3
  @@ -33,7 +33,7 @@
   include           $(top_builddir)/src/Makefile.shlib
   
   uuid.sql: uuid.sql.in
  -	sed -e 's;@MODULE_PATHNAME@;$(DESTDIR)$(pkglibdir)/uuid$(DLSUFFIX);g' <uuid.sql.in >uuid.sql
  +	sed -e 's;MODULE_PATHNAME;$(DESTDIR)$(pkglibdir)/uuid$(DLSUFFIX);g' <uuid.sql.in >uuid.sql
   
   install: all
   	$(mkinstalldirs) $(DESTDIR)$(pkglibdir)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/pgsql/uuid.sql.in
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 uuid.sql.in
  --- ossp-pkg/uuid/pgsql/uuid.sql.in	11 May 2006 18:32:07 -0000	1.4
  +++ ossp-pkg/uuid/pgsql/uuid.sql.in	31 Jul 2006 12:43:32 -0000	1.5
  @@ -72,22 +72,22 @@
   CREATE FUNCTION
       uuid_in(CSTRING) RETURNS uuid
       STRICT
  -    LANGUAGE C AS '@MODULE_PATHNAME@', 'pg_uuid_in';
  +    LANGUAGE C AS 'MODULE_PATHNAME', 'pg_uuid_in';
   
   CREATE FUNCTION
       uuid_out(uuid) RETURNS CSTRING
       STRICT
  -    LANGUAGE C AS '@MODULE_PATHNAME@', 'pg_uuid_out';
  +    LANGUAGE C AS 'MODULE_PATHNAME', 'pg_uuid_out';
   
   CREATE FUNCTION
       uuid_recv(INTERNAL) RETURNS uuid
       STRICT
  -    LANGUAGE C AS '@MODULE_PATHNAME@', 'pg_uuid_in';
  +    LANGUAGE C AS 'MODULE_PATHNAME', 'pg_uuid_in';
   
   CREATE FUNCTION
       uuid_send(uuid) RETURNS BYTEA
       STRICT
  -    LANGUAGE C AS '@MODULE_PATHNAME@', 'pg_uuid_out';
  +    LANGUAGE C AS 'MODULE_PATHNAME', 'pg_uuid_out';
   
   CREATE TYPE uuid (
       INPUT   = uuid_in,   -- for SQL input
  @@ -115,17 +115,17 @@
   CREATE FUNCTION
       uuid(CSTRING) RETURNS uuid
       IMMUTABLE STRICT
  -    LANGUAGE C AS '@MODULE_PATHNAME@', 'pg_uuid_in';
  +    LANGUAGE C AS 'MODULE_PATHNAME', 'pg_uuid_in';
   
   CREATE FUNCTION
       uuid(INTEGER) RETURNS uuid
       VOLATILE CALLED ON NULL INPUT
  -    LANGUAGE C AS '@MODULE_PATHNAME@', 'pg_uuid_make';
  +    LANGUAGE C AS 'MODULE_PATHNAME', 'pg_uuid_make';
   
   CREATE FUNCTION
       uuid(INTEGER, CSTRING, CSTRING) RETURNS uuid
       VOLATILE CALLED ON NULL INPUT
  -    LANGUAGE C AS '@MODULE_PATHNAME@', 'pg_uuid_make';
  +    LANGUAGE C AS 'MODULE_PATHNAME', 'pg_uuid_make';
   
   --
   --  the UUID operators
  @@ -134,32 +134,32 @@
   CREATE FUNCTION
       uuid_eq(uuid, uuid) RETURNS BOOL
       IMMUTABLE STRICT
  -    LANGUAGE C AS '@MODULE_PATHNAME@', 'pg_uuid_eq';
  +    LANGUAGE C AS 'MODULE_PATHNAME', 'pg_uuid_eq';
   
   CREATE FUNCTION
       uuid_ne(uuid, uuid) RETURNS BOOL
       IMMUTABLE STRICT
  -    LANGUAGE C AS '@MODULE_PATHNAME@', 'pg_uuid_ne';
  +    LANGUAGE C AS 'MODULE_PATHNAME', 'pg_uuid_ne';
   
   CREATE FUNCTION
       uuid_lt(uuid, uuid) RETURNS BOOL
       IMMUTABLE STRICT
  -    LANGUAGE C AS '@MODULE_PATHNAME@', 'pg_uuid_lt';
  +    LANGUAGE C AS 'MODULE_PATHNAME', 'pg_uuid_lt';
   
   CREATE FUNCTION
       uuid_gt(uuid, uuid) RETURNS BOOL
       IMMUTABLE STRICT
  -    LANGUAGE C AS '@MODULE_PATHNAME@', 'pg_uuid_gt';
  +    LANGUAGE C AS 'MODULE_PATHNAME', 'pg_uuid_gt';
   
   CREATE FUNCTION
       uuid_le(uuid, uuid) RETURNS BOOL
       IMMUTABLE STRICT
  -    LANGUAGE C AS '@MODULE_PATHNAME@', 'pg_uuid_le';
  +    LANGUAGE C AS 'MODULE_PATHNAME', 'pg_uuid_le';
   
   CREATE FUNCTION
       uuid_ge(uuid, uuid) RETURNS BOOL
       IMMUTABLE STRICT
  -    LANGUAGE C AS '@MODULE_PATHNAME@', 'pg_uuid_ge';
  +    LANGUAGE C AS 'MODULE_PATHNAME', 'pg_uuid_ge';
   
   CREATE OPERATOR = (
       leftarg    = uuid,
  @@ -214,12 +214,12 @@
   CREATE FUNCTION
       uuid_hash(uuid) RETURNS INTEGER
       IMMUTABLE STRICT
  -    LANGUAGE C AS '@MODULE_PATHNAME@', 'pg_uuid_hash';
  +    LANGUAGE C AS 'MODULE_PATHNAME', 'pg_uuid_hash';
   
   CREATE FUNCTION
       uuid_cmp(uuid, uuid) RETURNS INTEGER
       IMMUTABLE STRICT
  -    LANGUAGE C AS '@MODULE_PATHNAME@', 'pg_uuid_cmp';
  +    LANGUAGE C AS 'MODULE_PATHNAME', 'pg_uuid_cmp';
   
   CREATE OPERATOR CLASS uuid_ops
       DEFAULT FOR TYPE uuid USING hash AS
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jul 31 14:44:03 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 8A99C752878; Mon, 31 Jul 2006 14:44:03 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ THANKS
Message-Id: <20060731124403.8A99C752878@mail.ossp.org>
Date: Mon, 31 Jul 2006 14:44:03 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Jul-2006 14:44:03
  Branch: HEAD                             Handle: 2006073113440300

  Modified files:
    ossp-pkg/uuid           THANKS

  Log:
    give credit

  Summary:
    Revision    Changes     Path
    1.11        +1  -0      ossp-pkg/uuid/THANKS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/THANKS
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 THANKS
  --- ossp-pkg/uuid/THANKS	20 Jul 2006 17:21:17 -0000	1.10
  +++ ossp-pkg/uuid/THANKS	31 Jul 2006 12:44:03 -0000	1.11
  @@ -14,6 +14,7 @@
       o  Matthias Andree             <matthias.andree@gmx.de>
       o  Neil Conway                 <neilc@samurai.com>
       o  M. Daniel                   <mdaniel@scdi.com>
  +    o  Simon "janus" Dassow        <janus@errornet.de>
       o  Fuyuki                      <fuyuki@nigredo.org>
       o  Thomas Lotterer             <thomas@lotterer.net>
       o  Roman Neuhauser             <neuhauser@sigpipe.cz>
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jul 31 14:45:09 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 8B6D4752878; Mon, 31 Jul 2006 14:45:09 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ README ossp-pkg/uuid/perl/ uuid.pm uuid_com...
Message-Id: <20060731124509.8B6D4752878@mail.ossp.org>
Date: Mon, 31 Jul 2006 14:45:09 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Jul-2006 14:45:09
  Branch: HEAD                             Handle: 2006073113450801

  Modified files:
    ossp-pkg/uuid           README uuid_vers.h
    ossp-pkg/uuid/perl      uuid.pm uuid_compat.pm

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.42        +1  -1      ossp-pkg/uuid/README
    1.20        +1  -1      ossp-pkg/uuid/perl/uuid.pm
    1.10        +1  -1      ossp-pkg/uuid/perl/uuid_compat.pm
    1.26        +9  -9      ossp-pkg/uuid/uuid_vers.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.41 -r1.42 README
  --- ossp-pkg/uuid/README	28 Jul 2006 19:17:44 -0000	1.41
  +++ ossp-pkg/uuid/README	31 Jul 2006 12:45:08 -0000	1.42
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
   
     OSSP uuid - Universally Unique Identifier
  -  Version 1.5.0 (28-Jul-2006)
  +  Version 1.5.1 (31-Jul-2006)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.pm
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 uuid.pm
  --- ossp-pkg/uuid/perl/uuid.pm	11 May 2006 18:42:54 -0000	1.19
  +++ ossp-pkg/uuid/perl/uuid.pm	31 Jul 2006 12:45:09 -0000	1.20
  @@ -118,7 +118,7 @@
   use Exporter;
   
   #   API version
  -our $VERSION = do { my @v = ('1.5.0' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
  +our $VERSION = do { my @v = ('1.5.1' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
   
   #   API inheritance
   our @ISA = qw(Exporter);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid_compat.pm
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 uuid_compat.pm
  --- ossp-pkg/uuid/perl/uuid_compat.pm	11 May 2006 18:42:54 -0000	1.9
  +++ ossp-pkg/uuid/perl/uuid_compat.pm	31 Jul 2006 12:45:09 -0000	1.10
  @@ -42,7 +42,7 @@
   our @ISA     = qw(Exporter);
   our @EXPORT  = qw(NameSpace_DNS NameSpace_OID NameSpace_URL NameSpace_X500);
   
  -our $VERSION = do { my @v = ('1.5.0' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
  +our $VERSION = do { my @v = ('1.5.1' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
   
   sub new {
       my $class = shift;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_vers.h
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 uuid_vers.h
  --- ossp-pkg/uuid/uuid_vers.h	28 Jul 2006 19:17:44 -0000	1.25
  +++ ossp-pkg/uuid/uuid_vers.h	31 Jul 2006 12:45:08 -0000	1.26
  @@ -8,7 +8,7 @@
   #ifndef _UUID_VERS_H_
   #define _UUID_VERS_H_
   
  -#define _UUID_VERSION 0x105200
  +#define _UUID_VERSION 0x105201
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _UUID_VERS_H_AS_HEADER_
   
   _uuid_version_t _uuid_version = {
  -    0x105200,
  -    "1.5.0",
  -    "1.5.0 (28-Jul-2006)",
  -    "This is OSSP uuid, Version 1.5.0 (28-Jul-2006)",
  -    "OSSP uuid 1.5.0 (28-Jul-2006)",
  -    "OSSP uuid/1.5.0",
  -    "@(#)OSSP uuid 1.5.0 (28-Jul-2006)",
  -    "$Id: OSSP uuid 1.5.0 (28-Jul-2006) $"
  +    0x105201,
  +    "1.5.1",
  +    "1.5.1 (31-Jul-2006)",
  +    "This is OSSP uuid, Version 1.5.1 (31-Jul-2006)",
  +    "OSSP uuid 1.5.1 (31-Jul-2006)",
  +    "OSSP uuid/1.5.1",
  +    "@(#)OSSP uuid 1.5.1 (31-Jul-2006)",
  +    "$Id: OSSP uuid 1.5.1 (31-Jul-2006) $"
   };
   
   #endif /* _UUID_VERS_H_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jul 31 14:47:57 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id DD740752878; Mon, 31 Jul 2006 14:47:56 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20060731124756.DD740752878@mail.ossp.org>
Date: Mon, 31 Jul 2006 14:47:56 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   31-Jul-2006 14:47:56
  Branch: HEAD                             Handle: 2006073113475501

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/uuid   index.wml

  Log:
    release OSSP uuid 1.5.1

  Summary:
    Revision    Changes     Path
    1.158       +1  -0      ossp-web/new/news.txt
    1.128       +1  -1      ossp-web/pkg/lib/index.wml
    1.31        +2  -2      ossp-web/pkg/lib/uuid/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.157 -r1.158 news.txt
  --- ossp-web/new/news.txt	30 Jul 2006 08:08:17 -0000	1.157
  +++ ossp-web/new/news.txt	31 Jul 2006 12:47:55 -0000	1.158
  @@ -1,3 +1,4 @@
  +31-Jul-2006: Released L<OSSP uuid> 1.5.1
   30-Jul-2006: Released L<OSSP js> 1.6.20060730
   29-Jul-2006: Released L<OSSP js> 1.6.20060729
   28-Jul-2006: Released L<OSSP uuid> 1.5.0
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.127 -r1.128 index.wml
  --- ossp-web/pkg/lib/index.wml	30 Jul 2006 08:08:18 -0000	1.127
  +++ ossp-web/pkg/lib/index.wml	31 Jul 2006 12:47:56 -0000	1.128
  @@ -33,7 +33,7 @@
   			done=100 stable=1.1.3 unstable=none>
     <pkg_item name="uuid" longname="OSSP uuid" type="lib"
               desc="Universally Unique Identifier"
  -			done=100 stable=1.5.0 unstable=none>
  +			done=100 stable=1.5.1 unstable=none>
     <pkg_item name="val" longname="OSSP val" type="lib"
               desc="Value Access"
   			done=95 stable=none unstable=0.9.4>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/uuid/index.wml
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 index.wml
  --- ossp-web/pkg/lib/uuid/index.wml	28 Jul 2006 19:24:42 -0000	1.30
  +++ ossp-web/pkg/lib/uuid/index.wml	31 Jul 2006 12:47:56 -0000	1.31
  @@ -48,7 +48,7 @@
   
   <pkg_status
       name="uuid" assign="rse"
  -    stable="1.5.0"    stable_date="28-Jul-2006"
  +    stable="1.5.1"    stable_date="31-Jul-2006"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -59,7 +59,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/uuid/
       directory=$(FTP_ROOT_DIR)/pkg/lib/uuid/
       files="uuid-[0-9.]*.tar.gz" 
  -	stable="uuid-1\.5\.0\.tar\.gz" unstable="none">
  +	stable="uuid-1\.5\.1\.tar\.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jul 31 19:22:13 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 0AD64752852; Mon, 31 Jul 2006 19:22:05 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ ChangeLog Makefile.in
Message-Id: <20060731172206.0AD64752852@mail.ossp.org>
Date: Mon, 31 Jul 2006 19:22:05 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Jul-2006 19:21:51
  Branch: HEAD                             Handle: 2006073118214701

  Modified files:
    ossp-pkg/js             ChangeLog Makefile.in

  Log:
    Fix "make install": js-config.1 was not installed.
    
    Submitted by: Alfred Reibenschuh <alfred.reibenschuh@it-austria.com>

  Summary:
    Revision    Changes     Path
    1.20        +3  -0      ossp-pkg/js/ChangeLog
    1.24        +1  -0      ossp-pkg/js/Makefile.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 ChangeLog
  --- ossp-pkg/js/ChangeLog	31 Jul 2006 11:37:56 -0000	1.19
  +++ ossp-pkg/js/ChangeLog	31 Jul 2006 17:21:47 -0000	1.20
  @@ -13,6 +13,9 @@
   
     Changes between 1.6.20060730 and 1.6.20060801 (2006-07-30 to 2006-08-01)
   
  +   o Fix "make install": js-config.1 was not installed.
  +     [Alfred Reibenschuh <alfred.reibenschuh@it-austria.com>]
  +
      o Use Autoconf macros AC_CANONICAL_BUILD and AC_CANONICAL_HOST to
        make sure that the host identification is really available.
        [Alfred Reibenschuh <alfred.reibenschuh@it-austria.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 Makefile.in
  --- ossp-pkg/js/Makefile.in	29 Jul 2006 09:14:40 -0000	1.23
  +++ ossp-pkg/js/Makefile.in	31 Jul 2006 17:21:48 -0000	1.24
  @@ -184,6 +184,7 @@
   	$(SHTOOL) install -c -m 755 js $(DESTDIR)$(bindir)/
   	$(SHTOOL) install -e 's;#!\./js;#!$(bindir)/js;' -c -m 755 jslint.js $(DESTDIR)$(bindir)/jslint
   	$(SHTOOL) install -c -m 644 js.1 $(DESTDIR)$(mandir)/man1/
  +	$(SHTOOL) install -c -m 644 js-config.1 $(DESTDIR)$(mandir)/man1/
   	$(SHTOOL) install -c -m 644 js.3 $(DESTDIR)$(mandir)/man3/
   	$(SHTOOL) install -c -m 644 src/js*.h $(DESTDIR)$(includedir)/js/
   	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 $(LIB_NAME) $(DESTDIR)$(libdir)/
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jul 31 19:31:32 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id D54A0752835; Mon, 31 Jul 2006 19:31:31 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ ChangeLog ossp-pkg/js/src/perlconnect/ MANIFE...
Message-Id: <20060731173131.D54A0752835@mail.ossp.org>
Date: Mon, 31 Jul 2006 19:31:31 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Jul-2006 19:31:31
  Branch: HEAD                             Handle: 2006073118313000

  Added files:
    ossp-pkg/js/src/perlconnect
                            MANIFEST
  Modified files:
    ossp-pkg/js             ChangeLog

  Log:
    Add a src/perlconnect/MANIFEST file to make ExtUtils::MakeMaker more
    happy.

  Summary:
    Revision    Changes     Path
    1.21        +3  -0      ossp-pkg/js/ChangeLog
    1.1         +11 -0      ossp-pkg/js/src/perlconnect/MANIFEST
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 ChangeLog
  --- ossp-pkg/js/ChangeLog	31 Jul 2006 17:21:47 -0000	1.20
  +++ ossp-pkg/js/ChangeLog	31 Jul 2006 17:31:30 -0000	1.21
  @@ -13,6 +13,9 @@
   
     Changes between 1.6.20060730 and 1.6.20060801 (2006-07-30 to 2006-08-01)
   
  +   o Add a src/perlconnect/MANIFEST file to make ExtUtils::MakeMaker more happy.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
      o Fix "make install": js-config.1 was not installed.
        [Alfred Reibenschuh <alfred.reibenschuh@it-austria.com>]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/perlconnect/MANIFEST
  ============================================================================
  $ cvs diff -u -r0 -r1.1 MANIFEST
  --- /dev/null	2006-07-31 19:31:30 +0200
  +++ MANIFEST	2006-07-31 19:31:30 +0200
  @@ -0,0 +1,11 @@
  +MANIFEST
  +.cvsignore
  +JS.pm
  +JS.xs
  +jsperl.c
  +jsperl.h
  +jsperlpvt.h
  +Makefile.PL
  +Makefile.PL.in
  +PerlConnect.pm
  +typemap
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jul 31 19:32:30 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id F3BE1752835; Mon, 31 Jul 2006 19:32:29 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ ChangeLog Makefile.in
Message-Id: <20060731173229.F3BE1752835@mail.ossp.org>
Date: Mon, 31 Jul 2006 19:32:29 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Jul-2006 19:32:29
  Branch: HEAD                             Handle: 2006073118322900

  Modified files:
    ossp-pkg/js             ChangeLog Makefile.in

  Log:
    Fix "make install": the executable "js" was not installed via GNU
    libtool and this way under --enable-shared the wrapper script was
    installed only.
    
    Submitted by: Alfred Reibenschuh <alfred.reibenschuh@it-austria.com>

  Summary:
    Revision    Changes     Path
    1.22        +5  -0      ossp-pkg/js/ChangeLog
    1.25        +3  -3      ossp-pkg/js/Makefile.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 ChangeLog
  --- ossp-pkg/js/ChangeLog	31 Jul 2006 17:31:30 -0000	1.21
  +++ ossp-pkg/js/ChangeLog	31 Jul 2006 17:32:29 -0000	1.22
  @@ -13,6 +13,11 @@
   
     Changes between 1.6.20060730 and 1.6.20060801 (2006-07-30 to 2006-08-01)
   
  +   o Fix "make install": the executable "js" was not installed via GNU
  +     libtool and this way under --enable-shared the wrapper script was
  +     installed only.
  +     [Alfred Reibenschuh <alfred.reibenschuh@it-austria.com>]
  +
      o Add a src/perlconnect/MANIFEST file to make ExtUtils::MakeMaker more happy.
        [Ralf S. Engelschall <rse@engelschall.com>]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 Makefile.in
  --- ossp-pkg/js/Makefile.in	31 Jul 2006 17:21:48 -0000	1.24
  +++ ossp-pkg/js/Makefile.in	31 Jul 2006 17:32:29 -0000	1.25
  @@ -181,15 +181,15 @@
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man3
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(includedir)/js
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libdir)/pkgconfig
  -	$(SHTOOL) install -c -m 755 js $(DESTDIR)$(bindir)/
  -	$(SHTOOL) install -e 's;#!\./js;#!$(bindir)/js;' -c -m 755 jslint.js $(DESTDIR)$(bindir)/jslint
   	$(SHTOOL) install -c -m 644 js.1 $(DESTDIR)$(mandir)/man1/
   	$(SHTOOL) install -c -m 644 js-config.1 $(DESTDIR)$(mandir)/man1/
   	$(SHTOOL) install -c -m 644 js.3 $(DESTDIR)$(mandir)/man3/
   	$(SHTOOL) install -c -m 644 src/js*.h $(DESTDIR)$(includedir)/js/
   	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 $(LIB_NAME) $(DESTDIR)$(libdir)/
  -	$(SHTOOL) install -c -m 755 js-config.sh $(DESTDIR)$(bindir)/js-config
   	$(SHTOOL) install -c -m 644 js.pc $(DESTDIR)$(libdir)/pkgconfig/
  +	$(SHTOOL) install -c -m 755 js-config.sh $(DESTDIR)$(bindir)/js-config
  +	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 755 js $(DESTDIR)$(bindir)/
  +	$(SHTOOL) install -e 's;#!\./js;#!$(bindir)/js;' -c -m 755 jslint.js $(DESTDIR)$(bindir)/jslint
   	@if [ ".$(WITH_PERL)" = ".yes" ]; then \
   	    (cd src/perlconnect; $(MAKE) $(MFLAGS) install DESTDIR=$(DESTDIR)); \
   	fi
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jul 31 19:34:39 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 923537529F3; Mon, 31 Jul 2006 19:34:39 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: MOZILLA: ossp-pkg/js/src/ .cvsignore Makefile.in Makefile....
Message-Id: <20060731173439.923537529F3@mail.ossp.org>
Date: Mon, 31 Jul 2006 19:34:39 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Jul-2006 19:34:39
  Branch: MOZILLA                          Handle: -NONE-

  Touched files:            (Branch: MOZILLA)
    ossp-pkg/js/src         .cvsignore Makefile.in Makefile.ref README.html
                            SpiderMonkey.rsp config.mk js.c js.mak js.mdp
                            js.msg js.pkg js3240.rc jsOS240.def jsapi.c
                            jsapi.h jsarena.c jsarena.h jsarray.c jsarray.h
                            jsatom.c jsatom.h jsbit.h jsbool.c jsbool.h
                            jsclist.h jscntxt.c jscntxt.h jscompat.h
                            jsconfig.h jsconfig.mk jscpucfg.c jscpucfg.h
                            jsdate.c jsdate.h jsdbgapi.c jsdbgapi.h jsdhash.c
                            jsdhash.h jsdtoa.c jsdtoa.h jsemit.c jsemit.h
                            jsexn.c jsexn.h jsfile.c jsfile.h jsfile.msg
                            jsfun.c jsfun.h jsgc.c jsgc.h jshash.h jsify.pl
                            jsinterp.c jsinterp.h jslibmath.h jslock.c
                            jslock.h jslocko.asm jslog2.c jslong.c jslong.h
                            jsmath.c jsmath.h jsnum.c jsnum.h jsobj.c jsobj.h
                            jsopcode.c jsopcode.h jsopcode.tbl jsosdep.h
                            jsotypes.h jsparse.c jsparse.h jsprf.c jsprf.h
                            jsprvtd.h jspubtd.h jsregexp.c jsregexp.h jsscan.c
                            jsscan.h jsscope.c jsscope.h jsscript.c jsscript.h
                            jsshell.msg jsstddef.h jsstr.c jsstr.h jstypes.h
                            jsutil.c jsutil.h jsxdrapi.c jsxdrapi.h jsxml.c
                            jsxml.h lock_SunOS.s perfect.js plify_jsdhash.sed
                            prmjtime.c prmjtime.h resource.h rules.mk
                            win32.order
    ossp-pkg/js/src/config  AIX4.1.mk AIX4.2.mk AIX4.3.mk Darwin.mk
                            Darwin1.3.mk Darwin1.4.mk Darwin5.2.mk
                            Darwin5.3.mk HP-UXB.10.10.mk HP-UXB.10.20.mk
                            HP-UXB.11.00.mk IRIX.mk IRIX5.3.mk IRIX6.1.mk
                            IRIX6.2.mk IRIX6.3.mk IRIX6.5.mk Linux_All.mk
                            Mac_OS10.0.mk OSF1V4.0.mk OSF1V5.0.mk
                            SunOS4.1.4.mk SunOS5.3.mk SunOS5.4.mk
                            SunOS5.5.1.mk SunOS5.5.mk SunOS5.6.mk SunOS5.7.mk
                            SunOS5.8.mk SunOS5.9.mk WINNT4.0.mk WINNT5.0.mk
                            WINNT5.1.mk WINNT5.2.mk dgux.mk
    ossp-pkg/js/src/editline
                            Makefile.ref README editline.3 editline.c
                            editline.h sysunix.c unix.h
    ossp-pkg/js/src/fdlibm  .cvsignore Makefile.in Makefile.ref e_acos.c
                            e_acosh.c e_asin.c e_atan2.c e_atanh.c e_cosh.c
                            e_exp.c e_fmod.c e_gamma.c e_gamma_r.c e_hypot.c
                            e_j0.c e_j1.c e_jn.c e_lgamma.c e_lgamma_r.c
                            e_log.c e_log10.c e_pow.c e_rem_pio2.c
                            e_remainder.c e_scalb.c e_sinh.c e_sqrt.c fdlibm.h
                            fdlibm.mak fdlibm.mdp k_cos.c k_rem_pio2.c k_sin.c
                            k_standard.c k_tan.c s_asinh.c s_atan.c s_cbrt.c
                            s_ceil.c s_copysign.c s_cos.c s_erf.c s_expm1.c
                            s_fabs.c s_finite.c s_floor.c s_frexp.c s_ilogb.c
                            s_isnan.c s_ldexp.c s_lib_version.c s_log1p.c
                            s_logb.c s_matherr.c s_modf.c s_nextafter.c
                            s_rint.c s_scalbn.c s_signgam.c s_significand.c
                            s_sin.c s_tan.c s_tanh.c w_acos.c w_acosh.c
                            w_asin.c w_atan2.c w_atanh.c w_cosh.c w_exp.c
                            w_fmod.c w_gamma.c w_gamma_r.c w_hypot.c w_j0.c
                            w_j1.c w_jn.c w_lgamma.c w_lgamma_r.c w_log.c
                            w_log10.c w_pow.c w_remainder.c w_scalb.c w_sinh.c
                            w_sqrt.c
    ossp-pkg/js/src/perlconnect
                            .cvsignore JS.def JS.dsp JS.pm JS.xs Makefile.PL
                            Makefile.ref PerlConnect.dsp PerlConnect.dsw
                            PerlConnect.pm PerlConnectShell.dsp README.html
                            bg.jpg jsperl.c jsperl.h jsperlbuild.pl
                            jsperlpvt.h test.js test.pl typemap

  Log:
    Import new upstream version: Mozilla JavaScript (SpiderMonkey) 1.6 as of 2006-07-31
    
    [Release Tag: MOZILLA_JS_1_6_20060731]

  Summary:
    Revision    Changes     Path
  ____________________________________________________________________________

From ossp-cvs-owner@ossp.org  Mon Jul 31 19:36:42 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 4BBE3752803; Mon, 31 Jul 2006 19:36:42 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ ChangeLog README VERSION ossp-pkg/js/src/ jsa...
Message-Id: <20060731173642.4BBE3752803@mail.ossp.org>
Date: Mon, 31 Jul 2006 19:36:42 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Jul-2006 19:36:42
  Branch: HEAD                             Handle: 2006073118364100

  Modified files:
    ossp-pkg/js             ChangeLog README VERSION
    ossp-pkg/js/src         jsapi.c

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.23        +4  -1      ossp-pkg/js/ChangeLog
    1.12        +1  -1      ossp-pkg/js/README
    1.6         +1  -1      ossp-pkg/js/VERSION
    1.11        +1  -1      ossp-pkg/js/src/jsapi.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 ChangeLog
  --- ossp-pkg/js/ChangeLog	31 Jul 2006 17:32:29 -0000	1.22
  +++ ossp-pkg/js/ChangeLog	31 Jul 2006 17:36:41 -0000	1.23
  @@ -11,7 +11,7 @@
   
     This is a list of all changes to OSSP js.
   
  -  Changes between 1.6.20060730 and 1.6.20060801 (2006-07-30 to 2006-08-01)
  +  Changes between 1.6.20060730 and 1.6.20060731 (2006-07-30 to 2006-07-31)
   
      o Fix "make install": the executable "js" was not installed via GNU
        libtool and this way under --enable-shared the wrapper script was
  @@ -28,6 +28,9 @@
        make sure that the host identification is really available.
        [Alfred Reibenschuh <alfred.reibenschuh@it-austria.com>]
   
  +   o Upgrade to upstream sources as of 2006-07-31.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
     Changes between 1.6.20060729 and 1.6.20060730 (2006-07-29 to 2006-07-30)
   
      o Add support for Windows CygWin and MinGW environments.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/README
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 README
  --- ossp-pkg/js/README	30 Jul 2006 08:10:01 -0000	1.11
  +++ ossp-pkg/js/README	31 Jul 2006 17:36:41 -0000	1.12
  @@ -6,7 +6,7 @@
                                     |__/      
   
     OSSP js - Mozilla JavaScript Engine
  -  Version 1.6.20060730 (30-Jul-2006)
  +  Version 1.6.20060731 (31-Jul-2006)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/VERSION
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 VERSION
  --- ossp-pkg/js/VERSION	30 Jul 2006 08:10:01 -0000	1.5
  +++ ossp-pkg/js/VERSION	31 Jul 2006 17:36:41 -0000	1.6
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP js (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP js, Version 1.6.20060730 (30-Jul-2006)
  +  This is OSSP js, Version 1.6.20060731 (31-Jul-2006)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsapi.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 jsapi.c
  --- ossp-pkg/js/src/jsapi.c	30 Jul 2006 08:10:01 -0000	1.10
  +++ ossp-pkg/js/src/jsapi.c	31 Jul 2006 17:36:41 -0000	1.11
  @@ -1085,7 +1085,7 @@
   JS_GetImplementationVersion(void)
   {
   #ifdef OSSP
  -    return "JavaScript-C 1.6 pre-release 1 2006-04-04 (OSSP js 1.6.20060730)";
  +    return "JavaScript-C 1.6 pre-release 1 2006-04-04 (OSSP js 1.6.20060731)";
   #else
       return "JavaScript-C 1.6 pre-release 1 2006-04-04";
   #endif
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jul 31 19:44:30 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 0247C7529DC; Mon, 31 Jul 2006 19:44:29 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ ChangeLog devtool.conf
Message-Id: <20060731174430.0247C7529DC@mail.ossp.org>
Date: Mon, 31 Jul 2006 19:44:29 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Jul-2006 19:44:29
  Branch: HEAD                             Handle: 2006073118442900

  Modified files:
    ossp-pkg/js             ChangeLog devtool.conf

  Log:
    Fix "devtool dist" command: "make man" does not exist.

  Summary:
    Revision    Changes     Path
    1.24        +3  -0      ossp-pkg/js/ChangeLog
    1.9         +3  -1      ossp-pkg/js/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 ChangeLog
  --- ossp-pkg/js/ChangeLog	31 Jul 2006 17:36:41 -0000	1.23
  +++ ossp-pkg/js/ChangeLog	31 Jul 2006 17:44:29 -0000	1.24
  @@ -13,6 +13,9 @@
   
     Changes between 1.6.20060730 and 1.6.20060731 (2006-07-30 to 2006-07-31)
   
  +   o Fix "devtool dist" command: "make man" does not exist.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
      o Fix "make install": the executable "js" was not installed via GNU
        libtool and this way under --enable-shared the wrapper script was
        installed only.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 devtool.conf
  --- ossp-pkg/js/devtool.conf	30 Jul 2006 08:10:01 -0000	1.8
  +++ ossp-pkg/js/devtool.conf	31 Jul 2006 17:44:29 -0000	1.9
  @@ -31,6 +31,8 @@
       mv src/jsapi.c.n src/jsapi.c
   
   %dist
  +    echo "+++ dist cleaning"
  +    make distclean
       echo "+++ removing old tarballs"
       rm -f js-*.tar.gz
       echo "+++ generating"
  @@ -46,7 +48,7 @@
       echo "+++ re-configuring"
       ./configure
       echo "+++ building"
  -    make all man
  +    make
       echo "+++ dist cleaning"
       make distclean
       echo "+++ fixing"
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jul 31 20:09:47 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 0B8997529DB; Mon, 31 Jul 2006 20:09:46 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ ChangeLog Makefile.in
Message-Id: <20060731180947.0B8997529DB@mail.ossp.org>
Date: Mon, 31 Jul 2006 20:09:46 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Jul-2006 20:09:46
  Branch: HEAD                             Handle: 2006073119094500

  Modified files:
    ossp-pkg/js             ChangeLog Makefile.in

  Log:
    Fix "make distclean": src/perlconnect/Makefile.PL is always generated
    and hence has to be always deleted.

  Summary:
    Revision    Changes     Path
    1.25        +4  -0      ossp-pkg/js/ChangeLog
    1.26        +9  -2      ossp-pkg/js/Makefile.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 ChangeLog
  --- ossp-pkg/js/ChangeLog	31 Jul 2006 17:44:29 -0000	1.24
  +++ ossp-pkg/js/ChangeLog	31 Jul 2006 18:09:45 -0000	1.25
  @@ -13,6 +13,10 @@
   
     Changes between 1.6.20060730 and 1.6.20060731 (2006-07-30 to 2006-07-31)
   
  +   o Fix "make distclean": src/perlconnect/Makefile.PL is always generated
  +     and hence has to be always deleted.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
      o Fix "devtool dist" command: "make man" does not exist.
        [Ralf S. Engelschall <rse@engelschall.com>]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 Makefile.in
  --- ossp-pkg/js/Makefile.in	31 Jul 2006 17:32:29 -0000	1.25
  +++ ossp-pkg/js/Makefile.in	31 Jul 2006 18:09:45 -0000	1.26
  @@ -202,15 +202,22 @@
   	-$(RM) -r src/.libs src/fdlibm/.libs >/dev/null 2>&1 || $(TRUE)
   	-$(RM) *.o *.lo
   	@if [ ".$(WITH_PERL)" = ".yes" ]; then \
  -	    (cd src/perlconnect; $(MAKE) $(MFLAGS) clean || $(TRUE); mv Makefile.old Makefile || $(TRUE)); \
  +	    ( cd src/perlconnect; \
  +	      if [ -f Makefile ]; then $(MAKE) $(MFLAGS) clean || $(TRUE); fi; \
  +	      if [ -f Makefile.old ]; then mv Makefile.old Makefile; fi; \
  +	    ); \
   	fi
   
   distclean: clean
   	-$(RM) config.log config.status config.cache
   	-$(RM) Makefile config.h js.pc js-config.sh
   	-$(RM) libtool
  +	-$(RM) src/perlconnect/Makefile.PL
   	@if [ ".$(WITH_PERL)" = ".yes" ]; then \
  -	    (cd src/perlconnect; $(MAKE) $(MFLAGS) distclean || $(TRUE); $(RM) -f Makefile.PL Makefile Makefile.old); \
  +	    ( cd src/perlconnect; \
  +	      if [ -f Makefile ]; then $(MAKE) $(MFLAGS) distclean || $(TRUE); fi; \
  +	      $(RM) -f Makefile Makefile.old || $(TRUE); \
  +	    ); \
   	fi
   
   realclean: distclean
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jul 31 20:16:25 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 1286075285B; Mon, 31 Jul 2006 20:16:25 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20060731181625.1286075285B@mail.ossp.org>
Date: Mon, 31 Jul 2006 20:16:25 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   31-Jul-2006 20:16:25
  Branch: HEAD                             Handle: 2006073119162301

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/js     index.wml

  Log:
    release OSSP js 1.6.20060731

  Summary:
    Revision    Changes     Path
    1.159       +1  -0      ossp-web/new/news.txt
    1.129       +1  -1      ossp-web/pkg/lib/index.wml
    1.7         +2  -2      ossp-web/pkg/lib/js/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.158 -r1.159 news.txt
  --- ossp-web/new/news.txt	31 Jul 2006 12:47:55 -0000	1.158
  +++ ossp-web/new/news.txt	31 Jul 2006 18:16:23 -0000	1.159
  @@ -1,3 +1,4 @@
  +31-Jul-2006: Released L<OSSP js> 1.6.20060731
   31-Jul-2006: Released L<OSSP uuid> 1.5.1
   30-Jul-2006: Released L<OSSP js> 1.6.20060730
   29-Jul-2006: Released L<OSSP js> 1.6.20060729
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.128 -r1.129 index.wml
  --- ossp-web/pkg/lib/index.wml	31 Jul 2006 12:47:56 -0000	1.128
  +++ ossp-web/pkg/lib/index.wml	31 Jul 2006 18:16:24 -0000	1.129
  @@ -42,7 +42,7 @@
   			done=95 stable=none unstable=0.9.3>
     <pkg_item name="js" longname="OSSP js" type="lib"
               desc="Mozilla JavaScript Engine"
  -			done=100 stable=none unstable=1.6.20060730>
  +			done=100 stable=none unstable=1.6.20060731>
     <pkg_item name="str" longname="OSSP str" type="lib"
               desc="String Handling"
   			done=95 stable=none unstable=0.9.12>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/js/index.wml
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 index.wml
  --- ossp-web/pkg/lib/js/index.wml	30 Jul 2006 08:08:18 -0000	1.6
  +++ ossp-web/pkg/lib/js/index.wml	31 Jul 2006 18:16:24 -0000	1.7
  @@ -63,7 +63,7 @@
   <pkg_status
       name="js" assign="rse"
   	genesis="Jul-2006"
  -    stable="1.6.20060730" stable_date="30-Jul-2006"
  +    stable="1.6.20060731" stable_date="31-Jul-2006"
       unstable="none"       unstable_date="none"
   	done=100>
   
  @@ -74,7 +74,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/js/
       directory=$(FTP_ROOT_DIR)/pkg/lib/js/
       files="js-*.tar.gz" 
  -	stable="js-1.6.20060730.tar.gz" unstable="none">
  +	stable="js-1.6.20060731.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Aug  1 21:35:07 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 9160875287E; Tue,  1 Aug 2006 21:35:07 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.pod
Message-Id: <20060801193507.9160875287E@mail.ossp.org>
Date: Tue,  1 Aug 2006 21:35:07 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Aug-2006 21:35:07
  Branch: HEAD                             Handle: 2006080120350700

  Modified files:
    ossp-pkg/uuid           uuid.pod

  Log:
    remove trailing whitespaces

  Summary:
    Revision    Changes     Path
    1.40        +3  -3      ossp-pkg/uuid/uuid.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.39 -r1.40 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	21 Jul 2006 19:01:37 -0000	1.39
  +++ ossp-pkg/uuid/uuid.pod	1 Aug 2006 19:35:07 -0000	1.40
  @@ -78,13 +78,13 @@
       |/                             ||              ||  |           |
   
       +------++------++------++------++------++------++------++------+~~
  -    |  15  ||  14  ||  13  ||  12  ||  11  ||  10  |####9  ||   8  | 
  +    |  15  ||  14  ||  13  ||  12  ||  11  ||  10  |####9  ||   8  |
       | MSO  ||      ||      ||      ||      ||      |####   ||      |
       +------++------++------++------++------++------++------++------+~~
       7654321076543210765432107654321076543210765432107654321076543210
   
     ~~+------++------++------++------++------++------++------++------+
  -    ##* 7  ||   6  ||   5  ||   4  ||   3  ||   2  ||   1  ||   0  | 
  +    ##* 7  ||   6  ||   5  ||   4  ||   3  ||   2  ||   1  ||   0  |
       ##*    ||      ||      ||      ||      ||      ||      ||  LSO |
     ~~+------++------++------++------++------++------++------++------+
       7654321076543210765432107654321076543210765432107654321076543210
  @@ -483,7 +483,7 @@
   August 2001, 570 pages, (CHF 340,00),
   http://www.iso.ch/cate/d2229.html
   
  -=item 
  +=item
   
   B<HTTP Extensions for Distributed Authoring (WebDAV)>,
   section B<6.4.1 Node Field Generation Without the IEEE 802 Address>,
  @@ .

From ossp-cvs-owner@ossp.org  Tue Aug  1 22:13:50 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 3D5D67528B9; Tue,  1 Aug 2006 22:13:50 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ ChangeLog cfg_syn_scan.l
Message-Id: <20060801201350.3D5D67528B9@mail.ossp.org>
Date: Tue,  1 Aug 2006 22:13:50 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Aug-2006 22:13:50
  Branch: HEAD                             Handle: 2006080121134900

  Modified files:
    ossp-pkg/cfg            ChangeLog cfg_syn_scan.l

  Log:
    Replace "return 0" with the official "yyterminate()"
    in cfg_syn_scan.l and fix quotation parsing by replacing
    two "yytext[1]" with the intended "yytext[0]".

  Summary:
    Revision    Changes     Path
    1.41        +15 -8      ossp-pkg/cfg/ChangeLog
    1.25        +9  -9      ossp-pkg/cfg/cfg_syn_scan.l
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.40 -r1.41 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	3 Oct 2005 07:51:37 -0000	1.40
  +++ ossp-pkg/cfg/ChangeLog	1 Aug 2006 20:13:49 -0000	1.41
  @@ -8,13 +8,20 @@
   
     CHANGELOG
   
  - Changes between 0.9.9 and 0.9.10 (18-Feb-2005 to 03-Oct-2005):
  +  Changes between 0.9.10 and 0.9.11 (03-Oct-2005 to 01-Aug-2006):
  +
  +   *) Replace "return 0" with the official "yyterminate()"
  +      in cfg_syn_scan.l and fix quotation parsing by replacing
  +      two "yytext[1]" with the intended "yytext[0]".
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +  Changes between 0.9.9 and 0.9.10 (18-Feb-2005 to 03-Oct-2005):
   
      *) Upgraded build environment to GNU libtool 1.5.20
         and GNU shtool 2.0.3
         [Ralf S. Engelschall <rse@engelschall.com>]
   
  - Changes between 0.9.8 and 0.9.9 (24-Jan-2005 to 18-Feb-2005):
  +  Changes between 0.9.8 and 0.9.9 (24-Jan-2005 to 18-Feb-2005):
   
      *) Add Autoconf checks for isnan() and isinf() for cfg_fmt.c
         [Thomas Lotterer <thomas@lotterer.net>]
  @@ -34,7 +41,7 @@
         in case a formatting error occurs.
         [Ralf S. Engelschall <rse@engelschall.com>]
   
  - Changes between 0.9.7 and 0.9.8 (19-Dec-2004 to 24-Jan-2005):
  +  Changes between 0.9.7 and 0.9.8 (19-Dec-2004 to 24-Jan-2005):
   
      *) Remove debugging fprintf's from (still broken) cfg_node_select() function.
         [Ralf S. Engelschall <rse@engelschall.com>]
  @@ -51,14 +58,14 @@
      *) Adjust copyright messages for new year 2005.
         [Ralf S. Engelschall <rse@engelschall.com>]
   
  - Changes between 0.9.6 and 0.9.7 (04-Dec-2004 to 19-Dec-2004):
  +  Changes between 0.9.6 and 0.9.7 (04-Dec-2004 to 19-Dec-2004):
   
      *) Fixed cfg_node_get() function after recent introduction
         of LOAN/GIFT/COPY  argument passing semantics. This
         unbreaks the Perl API's unpack() function.
         [Ralf S. Engelschall <rse@engelschall.com>]
   
  - Changes between 0.9.5 and 0.9.6 (27-Nov-2004 to 04-Dec-2004):
  +  Changes between 0.9.5 and 0.9.6 (27-Nov-2004 to 04-Dec-2004):
   
      *) Plug remaining memory leaks by introducing the usual
         LOAN/GIFT/COPY argument passing semantics to cfg_node_{set,get}
  @@ -83,7 +90,7 @@
      *) Cleanup and extend buffer handling sub-library (cfg_buf.[ch])
         [Ralf S. Engelschall <rse@engelschall.com>]
   
  - Changes between 0.9.4 and 0.9.5 (31-Oct-2004 to 27-Nov-2004):
  +  Changes between 0.9.4 and 0.9.5 (31-Oct-2004 to 27-Nov-2004):
   
      *) Add OSSP:::cfg::simple Perl convenience API which is an
         ultra high-level API allowing especially the bi-directional
  @@ -115,7 +122,7 @@
      *) Added initial cut for Perl bindings.
         [Ralf S. Engelschall <rse@engelschall.com>]
   
  - Changes between 0.9.3 and 0.9.4 (23-Apr-2003 to 31-Oct-2004):
  +  Changes between 0.9.3 and 0.9.4 (23-Apr-2003 to 31-Oct-2004):
   
      *) Upgrade to GNU bison 1.875d and GNU flex 2.5.31
         [Ralf S. Engelschall <rse@engelschall.com>]
  @@ -130,7 +137,7 @@
         and GNU shtool 2.0.1
         [Ralf S. Engelschall <rse@engelschall.com>]
   
  - Changes between 0.9.2 and 0.9.3 (10-Nov-2003 to 23-Apr-2004):
  +  Changes between 0.9.2 and 0.9.3 (10-Nov-2003 to 23-Apr-2004):
   
      *) Import change introduced in OSSP l2 0.9.7:
         Replace modf(3) calls in cfg_fmt.c with a hand-crafted
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_syn_scan.l
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 cfg_syn_scan.l
  --- ossp-pkg/cfg/cfg_syn_scan.l	31 Dec 2004 19:16:25 -0000	1.24
  +++ ossp-pkg/cfg/cfg_syn_scan.l	1 Aug 2006 20:13:49 -0000	1.25
  @@ -121,7 +121,7 @@
   }
   <SS_CO_C><<EOF>> {
       cfg_syn_error(CTX, CFG_ERR_SYN, yylloc, "unterminated C-style block comment");
  -    return 0;
  +    yyterminate();
   }
   
       /* C++-style EOL comment */
  @@ -152,17 +152,17 @@
       (void)sscanf(yytext+1, "%o", &result);
       if (result > 0xff) {
           cfg_syn_error(CTX, CFG_ERR_SYN, yylloc, "escape sequence out of bound");
  -        return 0;
  +        yyterminate();
       }
       cfg_buf_append(CTX->buf, NULL, 0, (char)result);
   }
   <SS_DQ>\\x\{[0-9a-fA-F]+\} {
       if (!hex_sequence(CTX, yytext+3, yyleng-3-1))
  -        return 0;
  +        yyterminate();
   }
   <SS_DQ>\\x[0-9a-fA-F]{2} {
       if (!hex_sequence(CTX, yytext+2, 2))
  -        return 0;
  +        yyterminate();
   }
   <SS_DQ>\\n { cfg_buf_append(CTX->buf, NULL, 0, '\n');   }
   <SS_DQ>\\r { cfg_buf_append(CTX->buf, NULL, 0, '\r');   }
  @@ -178,11 +178,11 @@
       cfg_buf_append(CTX->buf, yytext, yyleng, 0);
   }
   <SS_DQ>(.|\n) {
  -    cfg_buf_append(CTX->buf, NULL, 0, yytext[1]);
  +    cfg_buf_append(CTX->buf, NULL, 0, yytext[0]);
   }
   <SS_DQ><<EOF>> {
       cfg_syn_error(CTX, CFG_ERR_SYN, yylloc, "unterminated double-quoted string");
  -    return 0;
  +    yyterminate();
   }
   
       /* single-quoted word ('...') */
  @@ -208,11 +208,11 @@
       cfg_buf_append(CTX->buf, yytext, yyleng, 0);
   }
   <SS_SQ>(.|\n) {
  -    cfg_buf_append(CTX->buf, NULL, 0, yytext[1]);
  +    cfg_buf_append(CTX->buf, NULL, 0, yytext[0]);
   }
   <SS_SQ><<EOF>> {
       cfg_syn_error(CTX, CFG_ERR_SYN, yylloc, "unterminated single-quoted string");
  -    return 0;
  +    yyterminate();
   }
   
       /* flexible-quoted word (q(.)[^\1]\1) */
  @@ -252,7 +252,7 @@
   }
   <SS_FQ><<EOF>> {
       cfg_syn_error(CTX, CFG_ERR_SYN, yylloc, "unterminated flexible-quoted string");
  -    return 0;
  +    yyterminate();
   }
   
      /* special tokens */
  @@ .

From ossp-cvs-owner@ossp.org  Tue Aug  1 22:15:23 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 7E14F7528B9; Tue,  1 Aug 2006 22:15:23 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ ChangeLog devtool.conf
Message-Id: <20060801201523.7E14F7528B9@mail.ossp.org>
Date: Tue,  1 Aug 2006 22:15:23 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Aug-2006 22:15:23
  Branch: HEAD                             Handle: 2006080121152300

  Modified files:
    ossp-pkg/cfg            ChangeLog devtool.conf

  Log:
    Upgraded build environment to GNU libtool 1.5.22,
    GNU shtool 2.0.6 and GNU autoconf 2.60

  Summary:
    Revision    Changes     Path
    1.42        +4  -0      ossp-pkg/cfg/ChangeLog
    1.27        +3  -3      ossp-pkg/cfg/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.41 -r1.42 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	1 Aug 2006 20:13:49 -0000	1.41
  +++ ossp-pkg/cfg/ChangeLog	1 Aug 2006 20:15:23 -0000	1.42
  @@ -15,6 +15,10 @@
         two "yytext[1]" with the intended "yytext[0]".
         [Ralf S. Engelschall <rse@engelschall.com>]
   
  +   *) Upgraded build environment to GNU libtool 1.5.22,
  +      GNU shtool 2.0.6 and GNU autoconf 2.60
  +      [Ralf S. Engelschall <rse@engelschall.com>]
  +
     Changes between 0.9.9 and 0.9.10 (18-Feb-2005 to 03-Oct-2005):
   
      *) Upgraded build environment to GNU libtool 1.5.20
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 devtool.conf
  --- ossp-pkg/cfg/devtool.conf	3 Oct 2005 07:54:31 -0000	1.26
  +++ ossp-pkg/cfg/devtool.conf	1 Aug 2006 20:15:23 -0000	1.27
  @@ -29,9 +29,9 @@
   ##
   
   %autogen
  -    @autogen shtool   2.0.3  "2.0.*" echo fixperm install mkdir tarball version
  -    @autogen libtool  1.5.20 "1.5*"
  -    @autogen autoconf 2.59   "2.5[4-9]*"
  +    @autogen shtool   2.0.6  "2.0.*" echo fixperm install mkdir tarball version
  +    @autogen libtool  1.5.22 "1.5*"
  +    @autogen autoconf 2.60   "2.6[0-9]"
   
   %autoclean
       @autoclean shtool
  @@ .

From ossp-cvs-owner@ossp.org  Wed Aug  2 13:59:09 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 21D877529DA; Wed,  2 Aug 2006 13:59:09 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid_cli.c uuid_dce.c uuid_prng.c uuid_ui12...
Message-Id: <20060802115909.21D877529DA@mail.ossp.org>
Date: Wed,  2 Aug 2006 13:59:09 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Aug-2006 13:59:09
  Branch: HEAD                             Handle: 2006080212590800

  Modified files:
    ossp-pkg/uuid           uuid_cli.c uuid_dce.c uuid_prng.c uuid_ui128.c
                            uuid_ui64.c

  Log:
    Consistently include "config.h" in all source files.

  Summary:
    Revision    Changes     Path
    1.23        +1  -0      ossp-pkg/uuid/uuid_cli.c
    1.6         +1  -0      ossp-pkg/uuid/uuid_dce.c
    1.13        +1  -0      ossp-pkg/uuid/uuid_prng.c
    1.2         +1  -0      ossp-pkg/uuid/uuid_ui128.c
    1.5         +1  -0      ossp-pkg/uuid/uuid_ui64.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.c
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 uuid_cli.c
  --- ossp-pkg/uuid/uuid_cli.c	11 May 2006 09:37:28 -0000	1.22
  +++ ossp-pkg/uuid/uuid_cli.c	2 Aug 2006 11:59:08 -0000	1.23
  @@ -27,6 +27,7 @@
   **  uuid_cli.c: command line tool
   */
   
  +#include "config.h"
   #include "uuid.h"
   
   #include <stdio.h>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_dce.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 uuid_dce.c
  --- ossp-pkg/uuid/uuid_dce.c	28 Jul 2006 19:04:32 -0000	1.5
  +++ ossp-pkg/uuid/uuid_dce.c	2 Aug 2006 11:59:08 -0000	1.6
  @@ -41,6 +41,7 @@
   #undef uuid_hash
   
   /* include regular API */
  +#include "config.h"
   #include "uuid.h"
   
   /* helper macro */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_prng.c
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 uuid_prng.c
  --- ossp-pkg/uuid/uuid_prng.c	28 Jul 2006 19:16:03 -0000	1.12
  +++ ossp-pkg/uuid/uuid_prng.c	2 Aug 2006 11:59:08 -0000	1.13
  @@ -34,6 +34,7 @@
   #include <sys/time.h>
   #include <fcntl.h>
   
  +#include "config.h"
   #include "uuid_prng.h"
   #include "uuid_md5.h"
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_ui128.c
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid_ui128.c
  --- ossp-pkg/uuid/uuid_ui128.c	11 May 2006 09:37:28 -0000	1.1
  +++ ossp-pkg/uuid/uuid_ui128.c	2 Aug 2006 11:59:08 -0000	1.2
  @@ -30,6 +30,7 @@
   #include <string.h>
   #include <ctype.h>
   
  +#include "config.h"
   #include "uuid_ui128.h"
   
   #define UI128_BASE   256 /* 2^8 */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_ui64.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 uuid_ui64.c
  --- ossp-pkg/uuid/uuid_ui64.c	29 Mar 2005 19:01:41 -0000	1.4
  +++ ossp-pkg/uuid/uuid_ui64.c	2 Aug 2006 11:59:08 -0000	1.5
  @@ -30,6 +30,7 @@
   #include <string.h>
   #include <ctype.h>
   
  +#include "config.h"
   #include "uuid_ui64.h"
   
   #define UI64_BASE   256 /* 2^8 */
  @@ .

From ossp-cvs-owner@ossp.org  Wed Aug  2 13:59:34 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 7D0AE7529DA; Wed,  2 Aug 2006 13:59:34 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog
Message-Id: <20060802115934.7D0AE7529DA@mail.ossp.org>
Date: Wed,  2 Aug 2006 13:59:34 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Aug-2006 13:59:34
  Branch: HEAD                             Handle: 2006080212593400

  Modified files:
    ossp-pkg/uuid           ChangeLog

  Log:
    remember change

  Summary:
    Revision    Changes     Path
    1.131       +5  -0      ossp-pkg/uuid/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.130 -r1.131 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	31 Jul 2006 12:43:32 -0000	1.130
  +++ ossp-pkg/uuid/ChangeLog	2 Aug 2006 11:59:34 -0000	1.131
  @@ -11,6 +11,11 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 1.5.1 and 1.5.2 (31-Jul-2006 to xx-Aug-2006)
  +
  +   o Consistently include "config.h" in all source files.
  +     [Ralf S. Engelschall]
  +
     Changes between 1.5.0 and 1.5.1 (28-Jul-2006 to 31-Jul-2006)
   
      o Use "MODULE_PATHNAME" instead of "@MODULE_PATHNAME@" in
  @@ .

From ossp-cvs-owner@ossp.org  Wed Aug  2 15:11:11 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 59DF4752870; Wed,  2 Aug 2006 15:11:11 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog aclocal.m4 configure.ac devtool.c...
Message-Id: <20060802131111.59DF4752870@mail.ossp.org>
Date: Wed,  2 Aug 2006 15:11:11 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Aug-2006 15:11:11
  Branch: HEAD                             Handle: 2006080214110901

  Modified files:
    ossp-pkg/uuid           ChangeLog aclocal.m4 configure.ac devtool.conf
                            uuid.c uuid_ac.h uuid_cli.c uuid_dce.c uuid_mac.c
                            uuid_md5.c uuid_prng.c uuid_sha1.c uuid_str.c
                            uuid_ui128.c uuid_ui64.c

  Log:
    Optional DMALLOC based memory debugging support.

  Summary:
    Revision    Changes     Path
    1.132       +5  -1      ossp-pkg/uuid/ChangeLog
    1.3         +127 -0     ossp-pkg/uuid/aclocal.m4
    1.12        +1  -0      ossp-pkg/uuid/configure.ac
    1.31        +3  -0      ossp-pkg/uuid/devtool.conf
    1.62        +1  -1      ossp-pkg/uuid/uuid.c
    1.6         +14 -1      ossp-pkg/uuid/uuid_ac.h
    1.24        +3  -1      ossp-pkg/uuid/uuid_cli.c
    1.7         +0  -1      ossp-pkg/uuid/uuid_dce.c
    1.11        +6  -3      ossp-pkg/uuid/uuid_mac.c
    1.15        +5  -1      ossp-pkg/uuid/uuid_md5.c
    1.14        +5  -1      ossp-pkg/uuid/uuid_prng.c
    1.5         +5  -1      ossp-pkg/uuid/uuid_sha1.c
    1.9         +5  -1      ossp-pkg/uuid/uuid_str.c
    1.3         +5  -1      ossp-pkg/uuid/uuid_ui128.c
    1.6         +5  -1      ossp-pkg/uuid/uuid_ui64.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.131 -r1.132 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	2 Aug 2006 11:59:34 -0000	1.131
  +++ ossp-pkg/uuid/ChangeLog	2 Aug 2006 13:11:09 -0000	1.132
  @@ -13,7 +13,11 @@
   
     Changes between 1.5.1 and 1.5.2 (31-Jul-2006 to xx-Aug-2006)
   
  -   o Consistently include "config.h" in all source files.
  +   o Optional DMALLOC based memory debugging support.
  +     [Ralf S. Engelschall]
  +
  +   o Consistently include "uuid_ac.h" in all source files to have GNU
  +     autoconf results and standard system defines available everywhere.
        [Ralf S. Engelschall]
   
     Changes between 1.5.0 and 1.5.1 (28-Jul-2006 to 31-Jul-2006)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 aclocal.m4
  --- ossp-pkg/uuid/aclocal.m4	13 Mar 2006 09:39:11 -0000	1.2
  +++ ossp-pkg/uuid/aclocal.m4	2 Aug 2006 13:11:09 -0000	1.3
  @@ -223,3 +223,130 @@
     fi
   ])
   
  +dnl ##
  +dnl ##  Check for an external/extension library.
  +dnl ##  - is aware of <libname>-config style scripts
  +dnl ##  - searches under standard paths include, lib, etc.
  +dnl ##  - searches under subareas like .libs, etc.
  +dnl ##
  +dnl ##  configure.in:
  +dnl ##      AC_CHECK_EXTLIB(<realname>, <libname>, <func>, <header>,
  +dnl ##                      [<success-action> [, <fail-action>]])
  +dnl ##  Makefile.in:
  +dnl ##      CFLAGS  = @CFLAGS@
  +dnl ##      LDFLAGS = @LDFLAGS@
  +dnl ##      LIBS    = @LIBS@
  +dnl ##  shell:
  +dnl ##      $ ./configure --with-<libname>[=DIR]
  +dnl ##
  +
  +AC_DEFUN(AC_CHECK_EXTLIB,[dnl
  +AC_ARG_WITH($2, [dnl
  +[  --with-]m4_substr([$2[[=DIR]]                     ], 0, 19)[build with external $1 library (default=no)]], [dnl
  +    if test ".$with_$2" = .yes; then
  +        #   via config script in PATH
  +        $2_version=`($2-config --version) 2>/dev/null`
  +        if test ".$$2_version" != .; then
  +            CPPFLAGS="$CPPFLAGS `$2-config --cflags`"
  +            CFLAGS="$CFLAGS `$2-config --cflags`"
  +            LDFLAGS="$LDFLAGS `$2-config --ldflags`"
  +        fi
  +    else
  +        if test -d "$with_$2"; then
  +            found=0
  +            #   via config script
  +            for dir in $with_$2/bin $with_$2; do
  +                if test -f "$dir/$2-config" && test ! -f "$dir/$2-config.in"; then
  +                    $2_version=`($dir/$2-config --version) 2>/dev/null`
  +                    if test ".$$2_version" != .; then
  +                        CPPFLAGS="$CPPFLAGS `$dir/$2-config --cflags`"
  +                        CFLAGS="$CFLAGS `$dir/$2-config --cflags`"
  +                        LDFLAGS="$LDFLAGS `$dir/$2-config --ldflags`"
  +                        found=1
  +                        break
  +                    fi
  +                fi
  +            done
  +            #   in standard sub-areas
  +            if test ".$found" = .0; then
  +                for dir in $with_$2/include/$2 $with_$2/include $with_$2; do
  +                    if test -f "$dir/$4"; then
  +                        CPPFLAGS="$CPPFLAGS -I$dir"
  +                        CFLAGS="$CFLAGS -I$dir"
  +                        found=1
  +                        break
  +                    fi
  +                done
  +                for dir in $with_$2/lib/$2 $with_$2/lib $with_$2; do
  +                    if test -f "$dir/lib$2.la" && test -d "$dir/.libs"; then
  +                        LDFLAGS="$LDFLAGS -L$dir -L$dir/.libs"
  +                        found=1
  +                        break
  +                    elif test -f "$dir/lib$2.a" || test -f "$dir/lib$2.so"; then
  +                        LDFLAGS="$LDFLAGS -L$dir"
  +                        found=1
  +                        break
  +                    fi
  +                done
  +            fi
  +            #   in any sub-area
  +            if test ".$found" = .0; then
  +changequote(, )dnl
  +                for file in x `find $with_$2 -name "$4" -type f -print`; do
  +                    test .$file = .x && continue
  +                    dir=`echo $file | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;'`
  +                    CPPFLAGS="$CPPFLAGS -I$dir"
  +                    CFLAGS="$CFLAGS -I$dir"
  +                done
  +                for file in x `find $with_$2 -name "lib$2.[aso]" -type f -print`; do
  +                    test .$file = .x && continue
  +                    dir=`echo $file | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;'`
  +                    LDFLAGS="$LDFLAGS -L$dir"
  +                done
  +changequote([, ])dnl
  +            fi
  +        fi
  +    fi
  +    AC_HAVE_HEADERS($4)
  +    AC_CHECK_LIB($2, $3)
  +    with_$2=yes
  +    ac_var="ac_cv_header_`echo $4 | sed 'y%./+-%__p_%'`"
  +    eval "ac_val=\$$ac_var"
  +    if test ".$ac_val" != .yes; then
  +        with_$2=no
  +    fi
  +    if test ".$ac_cv_lib_$2_$3" != .yes; then
  +        with_$2=no
  +    fi
  +    if test ".$with_$2" = .no; then
  +        AC_ERROR([Unable to find $1 library])
  +    fi
  +    ], [dnl
  +if test ".$with_$2" = .; then
  +    with_$2=no
  +fi
  +    ])dnl
  +AC_MSG_CHECKING(whether to build against external $1 library)
  +if test ".$with_$2" = .yes; then
  +    ifelse([$5], , :, [$5])
  +else
  +    ifelse([$6], , :, [$6])
  +fi
  +AC_MSG_RESULT([$with_$2])
  +])dnl
  +
  +dnl ##
  +dnl ##  Check whether to activate Dmalloc
  +dnl ##
  +dnl ##  configure.in:
  +dnl ##    AC_CHECK_DMALLOC
  +dnl ##
  +
  +AC_DEFUN(AC_CHECK_DMALLOC,[dnl
  +AC_CHECK_EXTLIB(Dmalloc, dmalloc, dmalloc_debug, dmalloc.h,
  +                AC_DEFINE(WITH_DMALLOC, 1, [define if building with Dmalloc]))
  +if test ".$with_dmalloc" = .yes; then
  +    CFLAGS=`echo "X$CFLAGS" | sed -e 's;^X;;' -e 's; -Wredundant-decls;;'`
  +fi
  +])dnl
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/configure.ac
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 configure.ac
  --- ossp-pkg/uuid/configure.ac	13 Jan 2006 06:44:30 -0000	1.11
  +++ ossp-pkg/uuid/configure.ac	2 Aug 2006 13:11:09 -0000	1.12
  @@ -41,6 +41,7 @@
   AC_PROG_MAKE_SET
   AC_PROG_CC
   AC_CHECK_DEBUGGING
  +AC_CHECK_DMALLOC
   
   with_tags=""
   sinclude(libtool.m4)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 devtool.conf
  --- ossp-pkg/uuid/devtool.conf	31 Jul 2006 12:02:57 -0000	1.30
  +++ ossp-pkg/uuid/devtool.conf	2 Aug 2006 13:11:09 -0000	1.31
  @@ -13,10 +13,13 @@
       @autoclean autoconf
   
   %configure
  +    CPPFLAGS="-I/usr/opkg/include" \
  +    LDFLAGS="-L/usr/opkg/lib" \
       ./configure \
           --prefix=/tmp/uuid \
           --disable-shared \
           --enable-debug \
  +        --with-dmalloc \
           --with-dce \
           --with-cxx \
           --with-perl \
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.61 -r1.62 uuid.c
  --- ossp-pkg/uuid/uuid.c	28 Jul 2006 19:04:32 -0000	1.61
  +++ ossp-pkg/uuid/uuid.c	2 Aug 2006 13:11:09 -0000	1.62
  @@ -28,8 +28,8 @@
   */
   
   /* own headers (part 1/2) */
  -#include "config.h"
   #include "uuid.h"
  +#include "uuid_ac.h"
   
   /* system headers */
   #include <stdio.h>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_ac.h
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 uuid_ac.h
  --- ossp-pkg/uuid/uuid_ac.h	13 Jan 2006 06:44:30 -0000	1.5
  +++ ossp-pkg/uuid/uuid_ac.h	2 Aug 2006 13:11:09 -0000	1.6
  @@ -30,7 +30,20 @@
   #ifndef __UUID_AC_H__
   #define __UUID_AC_H__
   
  -#include "config.h"
  +/* include GNU autoconf results */
  +#include "config.h"           /* HAVE_xxx */
  +
  +/* include standard system headers */
  +#include <stdio.h>            /* NULL, etc. */
  +#include <stdlib.h>           /* malloc, NULL, etc. */
  +#include <stdarg.h>           /* va_list, etc. */
  +#include <string.h>           /* size_t, strlen, etc. */
  +#include <unistd.h>           /* dmalloc pre-loading */
  +
  +/* enable optional "dmalloc" support */
  +#ifdef WITH_DMALLOC
  +#include <dmalloc.h>          /* malloc override, etc */
  +#endif
   
   /* define boolean values */
   #define UUID_FALSE 0
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.c
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 uuid_cli.c
  --- ossp-pkg/uuid/uuid_cli.c	2 Aug 2006 11:59:08 -0000	1.23
  +++ ossp-pkg/uuid/uuid_cli.c	2 Aug 2006 13:11:09 -0000	1.24
  @@ -27,9 +27,11 @@
   **  uuid_cli.c: command line tool
   */
   
  -#include "config.h"
  +/* own headers */
   #include "uuid.h"
  +#include "uuid_ac.h"
   
  +/* system headers */
   #include <stdio.h>
   #include <stdlib.h>
   #include <stdarg.h>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_dce.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 uuid_dce.c
  --- ossp-pkg/uuid/uuid_dce.c	2 Aug 2006 11:59:08 -0000	1.6
  +++ ossp-pkg/uuid/uuid_dce.c	2 Aug 2006 13:11:09 -0000	1.7
  @@ -41,7 +41,6 @@
   #undef uuid_hash
   
   /* include regular API */
  -#include "config.h"
   #include "uuid.h"
   
   /* helper macro */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_mac.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 uuid_mac.c
  --- ossp-pkg/uuid/uuid_mac.c	28 Jul 2006 19:04:32 -0000	1.10
  +++ ossp-pkg/uuid/uuid_mac.c	2 Aug 2006 13:11:09 -0000	1.11
  @@ -27,16 +27,16 @@
   **  uuid_mac.c: Media Access Control (MAC) resolver implementation
   */
   
  -#include "config.h"
  -#include "uuid_mac.h"
  +/* own headers (part (1/2) */
  +#include "uuid_ac.h"
   
  +/* system headers */
   #include <stdio.h>
   #include <stdlib.h>
   #include <string.h>
   #include <unistd.h>
   #include <fcntl.h>
   #include <time.h>
  -
   #ifdef HAVE_SYS_TIME_H
   #include <sys/time.h>
   #endif
  @@ -77,6 +77,9 @@
   #include <ifaddrs.h>
   #endif
   
  +/* own headers (part (1/2) */
  +#include "uuid_mac.h"
  +
   #ifndef FALSE
   #define FALSE 0
   #endif
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_md5.c
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 uuid_md5.c
  --- ossp-pkg/uuid/uuid_md5.c	28 Jul 2006 19:16:03 -0000	1.14
  +++ ossp-pkg/uuid/uuid_md5.c	2 Aug 2006 13:11:09 -0000	1.15
  @@ -27,10 +27,14 @@
   **  uuid_md5.c: MD5 API implementation
   */
   
  +/* own headers (part 1/2) */
  +#include "uuid_ac.h"
  +
  +/* system headers */
   #include <stdlib.h>
   #include <string.h>
   
  -#include "config.h"
  +/* own headers (part 2/2) */
   #include "uuid_md5.h"
   
   /*
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_prng.c
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 uuid_prng.c
  --- ossp-pkg/uuid/uuid_prng.c	2 Aug 2006 11:59:08 -0000	1.13
  +++ ossp-pkg/uuid/uuid_prng.c	2 Aug 2006 13:11:09 -0000	1.14
  @@ -27,6 +27,10 @@
   **  uuid_prng.c: PRNG API implementation
   */
   
  +/* own headers (part 1/2) */
  +#include "uuid_ac.h"
  +
  +/* system headers */
   #include <stdlib.h>
   #include <string.h>
   #include <unistd.h>
  @@ -34,7 +38,7 @@
   #include <sys/time.h>
   #include <fcntl.h>
   
  -#include "config.h"
  +/* own headers (part 2/2) */
   #include "uuid_prng.h"
   #include "uuid_md5.h"
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_sha1.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 uuid_sha1.c
  --- ossp-pkg/uuid/uuid_sha1.c	28 Jul 2006 19:16:05 -0000	1.4
  +++ ossp-pkg/uuid/uuid_sha1.c	2 Aug 2006 13:11:10 -0000	1.5
  @@ -27,10 +27,14 @@
   **  uuid_sha1.c: SHA-1 API implementation
   */
   
  +/* own headers (part 1/2) */
  +#include "uuid_ac.h"
  +
  +/* system headers */
   #include <stdlib.h>
   #include <string.h>
   
  -#include "config.h"
  +/* own headers (part 2/2) */
   #include "uuid_sha1.h"
   
   /*
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_str.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 uuid_str.c
  --- ossp-pkg/uuid/uuid_str.c	17 Mar 2006 07:10:10 -0000	1.8
  +++ ossp-pkg/uuid/uuid_str.c	2 Aug 2006 13:11:10 -0000	1.9
  @@ -48,12 +48,16 @@
    * o Ralf S. Engelschall <rse@engelschall.com> (1999, for OSSP)
    */
   
  +/* own headers (part 1/2) */
  +#include "uuid_ac.h"
  +
  +/* system headers */
   #include <stdlib.h>
   #include <stdarg.h>
   #include <string.h>
   #include <ctype.h>
   
  -#include "config.h"
  +/* own headers (part 2/2) */
   #include "uuid_str.h"
   
   #if HAVE_LONG_LONG
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_ui128.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid_ui128.c
  --- ossp-pkg/uuid/uuid_ui128.c	2 Aug 2006 11:59:08 -0000	1.2
  +++ ossp-pkg/uuid/uuid_ui128.c	2 Aug 2006 13:11:10 -0000	1.3
  @@ -27,10 +27,14 @@
   **  ui128.c: implementation of 128-bit unsigned integer arithmetic
   */
   
  +/* own headers (part 1/2) */
  +#include "uuid_ac.h"
  +
  +/* system headers */
   #include <string.h>
   #include <ctype.h>
   
  -#include "config.h"
  +/* own headers (part 2/2) */
   #include "uuid_ui128.h"
   
   #define UI128_BASE   256 /* 2^8 */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_ui64.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 uuid_ui64.c
  --- ossp-pkg/uuid/uuid_ui64.c	2 Aug 2006 11:59:08 -0000	1.5
  +++ ossp-pkg/uuid/uuid_ui64.c	2 Aug 2006 13:11:10 -0000	1.6
  @@ -27,10 +27,14 @@
   **  ui64.c: implementation of 64-bit unsigned integer arithmetic
   */
   
  +/* own headers (part 1/2) */
  +#include "uuid_ac.h"
  +
  +/* system headers */
   #include <string.h>
   #include <ctype.h>
   
  -#include "config.h"
  +/* own headers (part 2/2) */
   #include "uuid_ui64.h"
   
   #define UI64_BASE   256 /* 2^8 */
  @@ .

From ossp-cvs-owner@ossp.org  Wed Aug  2 23:45:44 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 394DF752F53; Wed,  2 Aug 2006 23:45:44 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ devtool.conf
Message-Id: <20060802214544.394DF752F53@mail.ossp.org>
Date: Wed,  2 Aug 2006 23:45:44 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Aug-2006 23:45:43
  Branch: HEAD                             Handle: 2006080222454300

  Modified files:
    ossp-pkg/uuid           devtool.conf

  Log:
    do not always enable dmalloc for me

  Summary:
    Revision    Changes     Path
    1.32        +0  -3      ossp-pkg/uuid/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 devtool.conf
  --- ossp-pkg/uuid/devtool.conf	2 Aug 2006 13:11:09 -0000	1.31
  +++ ossp-pkg/uuid/devtool.conf	2 Aug 2006 21:45:43 -0000	1.32
  @@ -13,13 +13,10 @@
       @autoclean autoconf
   
   %configure
  -    CPPFLAGS="-I/usr/opkg/include" \
  -    LDFLAGS="-L/usr/opkg/lib" \
       ./configure \
           --prefix=/tmp/uuid \
           --disable-shared \
           --enable-debug \
  -        --with-dmalloc \
           --with-dce \
           --with-cxx \
           --with-perl \
  @@ .

From ossp-cvs-owner@ossp.org  Thu Aug  3 14:16:33 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 00DD47528B9; Thu,  3 Aug 2006 14:16:32 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ ChangeLog aclocal.m4
Message-Id: <20060803121633.00DD47528B9@mail.ossp.org>
Date: Thu,  3 Aug 2006 14:16:32 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Aug-2006 14:16:32
  Branch: HEAD                             Handle: 2006080313163200

  Modified files:
    ossp-pkg/js             ChangeLog aclocal.m4

  Log:
    Change from -O2 to -O0 and without -Wshadow under --enable-debug.

  Summary:
    Revision    Changes     Path
    1.26        +5  -0      ossp-pkg/js/ChangeLog
    1.5         +2  -2      ossp-pkg/js/aclocal.m4
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 ChangeLog
  --- ossp-pkg/js/ChangeLog	31 Jul 2006 18:09:45 -0000	1.25
  +++ ossp-pkg/js/ChangeLog	3 Aug 2006 12:16:32 -0000	1.26
  @@ -11,6 +11,11 @@
   
     This is a list of all changes to OSSP js.
   
  +  Changes between 1.6.20060731 and 1.6.200608xx (2006-07-31 to 2006-08-xx)
  +
  +   o Change from -O2 to -O0 and without -Wshadow under --enable-debug.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
     Changes between 1.6.20060730 and 1.6.20060731 (2006-07-30 to 2006-07-31)
   
      o Fix "make distclean": src/perlconnect/Makefile.PL is always generated
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 aclocal.m4
  --- ossp-pkg/js/aclocal.m4	22 Jul 2006 17:02:34 -0000	1.4
  +++ ossp-pkg/js/aclocal.m4	3 Aug 2006 12:16:32 -0000	1.5
  @@ -66,7 +66,7 @@
   if test ".$ac_cv_prog_gcc" = ".yes"; then
       case "$CFLAGS" in
           *-O* ) ;;
  -           * ) CFLAGS="$CFLAGS -O2" ;;
  +           * ) CFLAGS="$CFLAGS -O0" ;;
       esac
       case "$CFLAGS" in
           *-g* ) ;;
  @@ -79,7 +79,7 @@
       AC_COMPILER_OPTION(defdbg, -DDEBUG, -DDEBUG, CFLAGS="$CFLAGS -DDEBUG")
       CFLAGS="$CFLAGS -pedantic"
       CFLAGS="$CFLAGS -Wall"
  -    WMORE="-Wshadow -Wpointer-arith -Wcast-align -Winline"
  +    WMORE="-Wpointer-arith -Wcast-align -Winline"
       WMORE="$WMORE -Wmissing-prototypes -Wmissing-declarations -Wnested-externs"
       AC_COMPILER_OPTION(wmore, -W<xxx>, $WMORE, CFLAGS="$CFLAGS $WMORE")
       AC_COMPILER_OPTION(wnolonglong, -Wno-long-long, -Wno-long-long, CFLAGS="$CFLAGS -Wno-long-long")
  @@ .

From ossp-cvs-owner@ossp.org  Thu Aug  3 14:30:17 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id AEB227528AE; Thu,  3 Aug 2006 14:30:17 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ ChangeLog ossp-pkg/js/src/ js.c jscntxt.c jsf...
Message-Id: <20060803123017.AEB227528AE@mail.ossp.org>
Date: Thu,  3 Aug 2006 14:30:17 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Aug-2006 14:30:17
  Branch: HEAD                             Handle: 2006080313301501

  Modified files:
    ossp-pkg/js             ChangeLog
    ossp-pkg/js/src         js.c jscntxt.c jsfile.c jsobj.c jsstr.c

  Log:
    Fix a bunch of compiler warnings.

  Summary:
    Revision    Changes     Path
    1.27        +3  -0      ossp-pkg/js/ChangeLog
    1.5         +8  -0      ossp-pkg/js/src/js.c
    1.5         +4  -0      ossp-pkg/js/src/jscntxt.c
    1.11        +3  -0      ossp-pkg/js/src/jsfile.c
    1.2         +113 -288   ossp-pkg/js/src/jsobj.c
    1.3         +4  -0      ossp-pkg/js/src/jsstr.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 ChangeLog
  --- ossp-pkg/js/ChangeLog	3 Aug 2006 12:16:32 -0000	1.26
  +++ ossp-pkg/js/ChangeLog	3 Aug 2006 12:30:15 -0000	1.27
  @@ -13,6 +13,9 @@
   
     Changes between 1.6.20060731 and 1.6.200608xx (2006-07-31 to 2006-08-xx)
   
  +   o Fix a bunch of compiler warnings.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
      o Change from -O2 to -O0 and without -Wshadow under --enable-debug.
        [Ralf S. Engelschall <rse@engelschall.com>]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/js.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 js.c
  --- ossp-pkg/js/src/js.c	30 Jul 2006 08:00:45 -0000	1.4
  +++ ossp-pkg/js/src/js.c	3 Aug 2006 12:30:16 -0000	1.5
  @@ -1187,7 +1187,11 @@
       for (sprop = SCOPE_LAST_PROP(scope); sprop; sprop = sprop->parent) {
           if (SCOPE_HAD_MIDDLE_DELETE(scope) && !SCOPE_HAS_PROPERTY(scope, sprop))
               continue;
  +#ifdef OSSP
  +        fprintf(fp, "%3u %lx", i, (unsigned long)sprop);
  +#else
           fprintf(fp, "%3u %p", i, sprop);
  +#endif
           if (JSID_IS_INT(sprop->id)) {
               fprintf(fp, " [%ld]", (long)JSVAL_TO_INT(sprop->id));
           } else if (JSID_IS_ATOM(sprop->id)) {
  @@ -1208,7 +1212,11 @@
   #undef  DUMP_ATTR
   
           fprintf(fp, " slot %lu flags %x shortid %d\n",
  +#ifdef OSSP
  +                (unsigned long)sprop->slot, sprop->flags, sprop->shortid);
  +#else
                   sprop->slot, sprop->flags, sprop->shortid);
  +#endif
       }
   }
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jscntxt.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 jscntxt.c
  --- ossp-pkg/js/src/jscntxt.c	24 Jul 2006 19:04:50 -0000	1.4
  +++ ossp-pkg/js/src/jscntxt.c	3 Aug 2006 12:30:16 -0000	1.5
  @@ -1062,6 +1062,10 @@
   
   #if defined DEBUG && defined XP_UNIX
   /* For gdb usage. */
  +#ifdef OSSP
  +void js_traceon(JSContext *cx);
  +void js_traceoff(JSContext *cx);
  +#endif
   void js_traceon(JSContext *cx)  { cx->tracefp = stderr; }
   void js_traceoff(JSContext *cx) { cx->tracefp = NULL; }
   #endif
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsfile.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 jsfile.c
  --- ossp-pkg/js/src/jsfile.c	30 Jul 2006 08:00:45 -0000	1.10
  +++ ossp-pkg/js/src/jsfile.c	3 Aug 2006 12:30:16 -0000	1.11
  @@ -174,6 +174,9 @@
   #undef MSG_DEF
   };
   
  +#ifdef OSSP
  +static
  +#endif
   const JSErrorFormatString *
   JSFile_GetErrorMessage(void *userRef, const char *locale,
                                                           const uintN errorNumber)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsobj.c
  ============================================================================
  $ cvs diff -u -r1.1.1.2 -r1.2 jsobj.c
  --- ossp-pkg/js/src/jsobj.c	4 Apr 2006 14:09:45 -0000	1.1.1.2
  +++ ossp-pkg/js/src/jsobj.c	3 Aug 2006 12:30:16 -0000	1.2
  @@ -4342,6 +4342,15 @@
   
   /* Routines to print out values during debugging. */
   
  +#ifdef OSSP
  +void printChar(jschar *cp);
  +void printString(JSString *str);
  +void printVal(JSContext *cx, jsval val);
  +void printObj(JSContext *cx, JSObject *jsobj);
  +void printId(JSContext *cx, jsid id);
  +void printAtom(JSAtom *atom);
  +#endif
  +
   void printChar(jschar *cp) {
       fprintf(stderr, "jschar* (0x%p) \"", (void *)cp);
       while (*cp)
  @@ -4361,7 +4370,9 @@
       fputc('\n', stderr);
   }
   
  +#ifndef OSSP
   void printVal(JSContext *cx, jsval val);
  +#endif
   
   void printObj(JSContext *cx, JSObject *jsobj) {
       jsuint i;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsstr.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 jsstr.c
  --- ossp-pkg/js/src/jsstr.c	24 Jul 2006 19:53:01 -0000	1.2
  +++ ossp-pkg/js/src/jsstr.c	3 Aug 2006 12:30:16 -0000	1.3
  @@ -2585,6 +2585,10 @@
   #ifdef DEBUG
   #include <math.h>
   
  +#ifdef OSSP
  +void printJSStringStats(JSRuntime *rt);
  +#endif
  +
   void printJSStringStats(JSRuntime *rt) {
       double mean = 0., var = 0., sigma = 0.;
       jsrefcount count = rt->totalStrings;
  @@ .

From ossp-cvs-owner@ossp.org  Thu Aug  3 14:41:28 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id CAF4675285D; Thu,  3 Aug 2006 14:41:28 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ ChangeLog configure.ac ossp-pkg/js/src/ js.c ...
Message-Id: <20060803124128.CAF4675285D@mail.ossp.org>
Date: Thu,  3 Aug 2006 14:41:28 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Aug-2006 14:41:28
  Branch: HEAD                             Handle: 2006080313412701

  Modified files:
    ossp-pkg/js             ChangeLog configure.ac
    ossp-pkg/js/src         js.c jsapi.c jsfile.c jsfile.h

  Log:
    Be more clean and replace weak "#if JS_HAS_FILE_OBJECT" constructs
    with the stronger "#if defined(JS_HAS_FILE_OBJECT) && (JS_HAS_FILE_OBJECT - 0)"
    as the JS_HAS_FILE_OBJECT can be not defined at all (in contrast to
    other JS_HAS_XXXX defines which are all listed in src/jsconfig.h)

  Summary:
    Revision    Changes     Path
    1.28        +6  -0      ossp-pkg/js/ChangeLog
    1.18        +1  -1      ossp-pkg/js/configure.ac
    1.6         +2  -2      ossp-pkg/js/src/js.c
    1.12        +3  -3      ossp-pkg/js/src/jsapi.c
    1.12        +1  -1      ossp-pkg/js/src/jsfile.c
    1.2         +1  -1      ossp-pkg/js/src/jsfile.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 ChangeLog
  --- ossp-pkg/js/ChangeLog	3 Aug 2006 12:30:15 -0000	1.27
  +++ ossp-pkg/js/ChangeLog	3 Aug 2006 12:41:27 -0000	1.28
  @@ -13,6 +13,12 @@
   
     Changes between 1.6.20060731 and 1.6.200608xx (2006-07-31 to 2006-08-xx)
   
  +   o Be more clean and replace weak "#if JS_HAS_FILE_OBJECT" constructs
  +     with the stronger "#if defined(JS_HAS_FILE_OBJECT) && (JS_HAS_FILE_OBJECT - 0)"
  +     as the JS_HAS_FILE_OBJECT can be not defined at all (in contrast to
  +     other JS_HAS_XXXX defines which are all listed in src/jsconfig.h)
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
      o Fix a bunch of compiler warnings.
        [Ralf S. Engelschall <rse@engelschall.com>]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/configure.ac
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 configure.ac
  --- ossp-pkg/js/configure.ac	31 Jul 2006 11:37:56 -0000	1.17
  +++ ossp-pkg/js/configure.ac	3 Aug 2006 12:41:27 -0000	1.18
  @@ -135,7 +135,7 @@
   	[ac_cv_with_file=$withval], [ac_cv_with_file=yes])
   AC_CACHE_CHECK([whether to build with the File object], [ac_cv_with_file], [ac_cv_with_file=yes])
   if test ".$ac_cv_with_file" = ".yes"; then
  -	CPPFLAGS="$CPPFLAGS -DJS_HAS_FILE_OBJECT"
  +    CPPFLAGS="$CPPFLAGS -DJS_HAS_FILE_OBJECT"
   fi
   
   AC_SUBST(CLI_CFLAGS)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/js.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 js.c
  --- ossp-pkg/js/src/js.c	3 Aug 2006 12:30:16 -0000	1.5
  +++ ossp-pkg/js/src/js.c	3 Aug 2006 12:41:28 -0000	1.6
  @@ -64,7 +64,7 @@
   #include "jsscript.h"
   
   #ifdef OSSP
  -#if JS_HAS_FILE_OBJECT
  +#if defined(JS_HAS_FILE_OBJECT) && (JS_HAS_FILE_OBJECT - 0) /* OSSP BUGFIX */
   #include "jsfile.h"
   #endif
   #endif
  @@ -2533,7 +2533,7 @@
       if (!JS_InitStandardClasses(cx, glob))
           return 1;
   #ifdef OSSP
  -#if JS_HAS_FILE_OBJECT
  +#if defined(JS_HAS_FILE_OBJECT) && (JS_HAS_FILE_OBJECT - 0) /* OSSP BUGFIX */
       if (!js_InitFileClass(cx, glob))
           return 1;
   #endif
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsapi.c
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 jsapi.c
  --- ossp-pkg/js/src/jsapi.c	31 Jul 2006 17:36:41 -0000	1.11
  +++ ossp-pkg/js/src/jsapi.c	3 Aug 2006 12:41:28 -0000	1.12
  @@ -78,7 +78,7 @@
   #include "jsstr.h"
   #include "prmjtime.h"
   
  -#if JS_HAS_FILE_OBJECT
  +#if defined(JS_HAS_FILE_OBJECT) && (JS_HAS_FILE_OBJECT - 0) /* OSSP BUGFIX */
   #include "jsfile.h"
   #endif
   
  @@ -1212,7 +1212,7 @@
              js_InitXMLClasses(cx, obj) &&
   #endif
   #ifndef OSSP
  -#if JS_HAS_FILE_OBJECT
  +#if defined(JS_HAS_FILE_OBJECT) && (JS_HAS_FILE_OBJECT - 0) /* OSSP BUGFIX */
              js_InitFileClass(cx, obj) &&
   #endif
   #endif
  @@ -1255,7 +1255,7 @@
       {js_InitNamespaceClass,         ATOM_OFFSET(Namespace)},
       {js_InitQNameClass,             ATOM_OFFSET(QName)},
   #endif
  -#if JS_HAS_FILE_OBJECT
  +#if defined(JS_HAS_FILE_OBJECT) && (JS_HAS_FILE_OBJECT - 0) /* OSSP BUGFIX */
       {js_InitFileClass,              ATOM_OFFSET(File)},
   #endif
       {NULL,                          0}
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsfile.c
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 jsfile.c
  --- ossp-pkg/js/src/jsfile.c	3 Aug 2006 12:30:16 -0000	1.11
  +++ ossp-pkg/js/src/jsfile.c	3 Aug 2006 12:41:28 -0000	1.12
  @@ -41,7 +41,7 @@
   /*
    * JS File object
    */
  -#if JS_HAS_FILE_OBJECT
  +#if defined(JS_HAS_FILE_OBJECT) && (JS_HAS_FILE_OBJECT - 0) /* OSSP BUGFIX */
   
   #ifdef OSSP
   #include "../config.h"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsfile.h
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 jsfile.h
  --- ossp-pkg/js/src/jsfile.h	22 Aug 2005 17:36:57 -0000	1.1.1.1
  +++ ossp-pkg/js/src/jsfile.h	3 Aug 2006 12:41:28 -0000	1.2
  @@ -40,7 +40,7 @@
   #ifndef _jsfile_h__
   #define _jsfile_h__
   
  -#if JS_HAS_FILE_OBJECT
  +#if defined(JS_HAS_FILE_OBJECT) && (JS_HAS_FILE_OBJECT - 0) /* OSSP BUGFIX */
   extern JS_PUBLIC_API(JSObject*)
   js_InitFileClass(JSContext *cx, JSObject* obj);
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Aug  3 15:19:21 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id C0BD475286A; Thu,  3 Aug 2006 15:19:21 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ ChangeLog Makefile.in configure.ac devtool.co...
Message-Id: <20060803131921.C0BD475286A@mail.ossp.org>
Date: Thu,  3 Aug 2006 15:19:21 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Aug-2006 15:19:21
  Branch: HEAD                             Handle: 2006080314192001

  Added files:
    ossp-pkg/js/src         jsdso.c jsdso.h
  Modified files:
    ossp-pkg/js             ChangeLog Makefile.in configure.ac devtool.conf
    ossp-pkg/js/src         js.c jsapi.c jsatom.c jsatom.h

  Log:
    Add optional Dynamic Shared Object (DSO) support (see src/jsdso.[ch]).
    This comes in two flavors:
    
    1. Provide two public C API functions...
       JSBool JS_DSOLoad   (JSContext *cx, int *id, const char *filename);
       JSBool JS_DSOUnload (JSContext *cx, int  id);
       ...as an ultra-thin wrapper around the POSIX dlopen(3) API. It
       especially mimics the BSD RTLD behaviour of calling pre-defined
       functions (mandatory "js_DSO_load" and optional "js_DSO_unload")
       inside the DSO after/before the dlopen/dlclose calls. This
       allows the DSOs to perform their init/shutdown actions.
    
    2. Provide a small JavaScript global object "DSO" which binds
       the two public DSO C API functions into the JavaScript language
       as "DSO.load" and "DSO.unload". The "DSO" object can be created
       by the friend C API function js_InitDSOClass(). This function is
       used by the command-linne interface "js" by default.
    
    As a result the OSSP Mozilla JavaScript engine is now able to
    dynamically load C extensions similar to what other programming
    languages provide since a longer time.

  Summary:
    Revision    Changes     Path
    1.29        +23 -0      ossp-pkg/js/ChangeLog
    1.27        +1  -0      ossp-pkg/js/Makefile.in
    1.19        +13 -0      ossp-pkg/js/configure.ac
    1.10        +1  -0      ossp-pkg/js/devtool.conf
    1.7         +7  -0      ossp-pkg/js/src/js.c
    1.13        +10 -0      ossp-pkg/js/src/jsapi.c
    1.3         +8  -0      ossp-pkg/js/src/jsatom.c
    1.2         +3  -0      ossp-pkg/js/src/jsatom.h
    1.1         +247 -0     ossp-pkg/js/src/jsdso.c
    1.1         +51 -0      ossp-pkg/js/src/jsdso.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 ChangeLog
  --- ossp-pkg/js/ChangeLog	3 Aug 2006 12:41:27 -0000	1.28
  +++ ossp-pkg/js/ChangeLog	3 Aug 2006 13:19:20 -0000	1.29
  @@ -13,6 +13,29 @@
   
     Changes between 1.6.20060731 and 1.6.200608xx (2006-07-31 to 2006-08-xx)
   
  +   o Add optional Dynamic Shared Object (DSO) support (see src/jsdso.[ch]).
  +     This comes in two flavors:
  +
  +     1. Provide two public C API functions...
  +        JSBool JS_DSOLoad   (JSContext *cx, int *id, const char *filename);
  +        JSBool JS_DSOUnload (JSContext *cx, int  id);
  +        ...as an ultra-thin wrapper around the POSIX dlopen(3) API. It
  +        especially mimics the BSD RTLD behaviour of calling pre-defined
  +        functions (mandatory "js_DSO_load" and optional "js_DSO_unload")
  +        inside the DSO after/before the dlopen/dlclose calls. This
  +        allows the DSOs to perform their init/shutdown actions.
  +
  +     2. Provide a small JavaScript global object "DSO" which binds
  +        the two public DSO C API functions into the JavaScript language
  +        as "DSO.load" and "DSO.unload". The "DSO" object can be created
  +        by the friend C API function js_InitDSOClass(). This function is
  +        used by the command-linne interface "js" by default.
  +
  +     As a result the OSSP Mozilla JavaScript engine is now able to
  +     dynamically load C extensions similar to what other programming
  +     languages provide since a longer time.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
      o Be more clean and replace weak "#if JS_HAS_FILE_OBJECT" constructs
        with the stronger "#if defined(JS_HAS_FILE_OBJECT) && (JS_HAS_FILE_OBJECT - 0)"
        as the JS_HAS_FILE_OBJECT can be not defined at all (in contrast to
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 Makefile.in
  --- ossp-pkg/js/Makefile.in	31 Jul 2006 18:09:45 -0000	1.26
  +++ ossp-pkg/js/Makefile.in	3 Aug 2006 13:19:20 -0000	1.27
  @@ -95,6 +95,7 @@
                  src/jsxdrapi.lo             \
                  src/jsxml.lo                \
                  src/prmjtime.lo             \
  +               src/jsdso.lo                \
                  src/fdlibm/e_acos.lo        \
                  src/fdlibm/e_asin.lo        \
                  src/fdlibm/e_atan2.lo       \
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/configure.ac
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 configure.ac
  --- ossp-pkg/js/configure.ac	3 Aug 2006 12:41:27 -0000	1.18
  +++ ossp-pkg/js/configure.ac	3 Aug 2006 13:19:20 -0000	1.19
  @@ -138,6 +138,19 @@
       CPPFLAGS="$CPPFLAGS -DJS_HAS_FILE_OBJECT"
   fi
   
  +dnl #   configure option --with-dso
  +AC_ARG_WITH([dso],
  +	AS_HELP_STRING([--with-dso], [build without DSO object (allows run-time process extending)]),
  +	[ac_cv_with_dso=$withval], [ac_cv_with_dso=no])
  +AC_CACHE_CHECK([whether to build with the DSO object], [ac_cv_with_dso], [ac_cv_with_dso=no])
  +if test ".$ac_cv_with_dso" = ".yes"; then
  +    AC_CHECK_LIB(dl, dlopen)
  +    AC_CHECK_HEADER(dlfcn.h, , AC_ERROR([dlopen(3) header <dlfcn.h> required]))
  +    AC_CHECK_FUNCS(dlopen dlclose dlerror, , AC_ERROR([dlopen(3) API functions dlopen/dlclose/dlerror required]))
  +    CPPFLAGS="$CPPFLAGS -DJS_HAS_DSO_OBJECT"
  +    CLI_LDFLAGS="$CLI_LDFLAGS -export-dynamic"
  +fi
  +
   AC_SUBST(CLI_CFLAGS)
   AC_SUBST(CLI_CPPFLAGS)
   AC_SUBST(CLI_LDFLAGS)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 devtool.conf
  --- ossp-pkg/js/devtool.conf	31 Jul 2006 17:44:29 -0000	1.9
  +++ ossp-pkg/js/devtool.conf	3 Aug 2006 13:19:20 -0000	1.10
  @@ -18,6 +18,7 @@
           --with-editline=/usr/opkg/lib \
           --with-perl=/usr/opkg/bin/perl \
           --with-file \
  +        --with-dso \
           --disable-shared \
           "$@"
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/js.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 js.c
  --- ossp-pkg/js/src/js.c	3 Aug 2006 12:41:28 -0000	1.6
  +++ ossp-pkg/js/src/js.c	3 Aug 2006 13:19:20 -0000	1.7
  @@ -67,6 +67,9 @@
   #if defined(JS_HAS_FILE_OBJECT) && (JS_HAS_FILE_OBJECT - 0) /* OSSP BUGFIX */
   #include "jsfile.h"
   #endif
  +#if defined(JS_HAS_DSO_OBJECT) && (JS_HAS_DSO_OBJECT -0)
  +#include "jsdso.h"
  +#endif
   #endif
   
   #ifdef PERLCONNECT
  @@ -2537,6 +2540,10 @@
       if (!js_InitFileClass(cx, glob))
           return 1;
   #endif
  +#if defined(JS_HAS_DSO_OBJECT) && (JS_HAS_DSO_OBJECT - 0)
  +    if (!js_InitDSOClass(cx, glob))
  +        return 1;
  +#endif
   #endif
   #endif
       if (!JS_DefineFunctions(cx, glob, shell_functions))
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsapi.c
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 jsapi.c
  --- ossp-pkg/js/src/jsapi.c	3 Aug 2006 12:41:28 -0000	1.12
  +++ ossp-pkg/js/src/jsapi.c	3 Aug 2006 13:19:20 -0000	1.13
  @@ -82,6 +82,10 @@
   #include "jsfile.h"
   #endif
   
  +#if defined(OSSP) && defined(JS_HAS_DSO_OBJECT) && (JS_HAS_DSO_OBJECT - 0)
  +#include "jsdso.h"
  +#endif
  +
   #if JS_HAS_XML_SUPPORT
   #include "jsxml.h"
   #endif
  @@ -1215,6 +1219,9 @@
   #if defined(JS_HAS_FILE_OBJECT) && (JS_HAS_FILE_OBJECT - 0) /* OSSP BUGFIX */
              js_InitFileClass(cx, obj) &&
   #endif
  +#if defined(JS_HAS_DSO_OBJECT) && (JS_HAS_DSO_OBJECT - 0)
  +           js_InitDSOClass(cx, obj) &&
  +#endif
   #endif
              js_InitDateClass(cx, obj);
   }
  @@ -1258,6 +1265,9 @@
   #if defined(JS_HAS_FILE_OBJECT) && (JS_HAS_FILE_OBJECT - 0) /* OSSP BUGFIX */
       {js_InitFileClass,              ATOM_OFFSET(File)},
   #endif
  +#if defined(JS_HAS_DSO_OBJECT) && (JS_HAS_DSO_OBJECT - 0)
  +    {js_InitDSOClass,               ATOM_OFFSET(DSO)},
  +#endif
       {NULL,                          0}
   };
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsatom.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 jsatom.c
  --- ossp-pkg/js/src/jsatom.c	24 Jul 2006 19:53:01 -0000	1.2
  +++ ossp-pkg/js/src/jsatom.c	3 Aug 2006 13:19:20 -0000	1.3
  @@ -144,6 +144,10 @@
   const char js_xml_str[]             = "xml";
   #endif
   
  +#if defined(OSSP) && defined(JS_HAS_DSO_OBJECT) && (JS_HAS_DSO_OBJECT - 0)
  +const char js_DSO_str[]             = "DSO";
  +#endif
  +
   #ifdef NARCISSUS
   const char js_call_str[]             = "__call__";
   const char js_construct_str[]        = "__construct__";
  @@ -363,6 +367,10 @@
       FROB(tagcAtom,                js_tagc_str);
       FROB(xmlAtom,                 js_xml_str);
   #endif
  +    
  +#if defined(OSSP) && defined(JS_HAS_DSO_OBJECT) && (JS_HAS_DSO_OBJECT - 0)
  +    FROB(DSOAtom,                 js_DSO_str);
  +#endif
   
   #ifdef NARCISSUS
       FROB(callAtom,                js_call_str);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsatom.h
  ============================================================================
  $ cvs diff -u -r1.1.1.1 -r1.2 jsatom.h
  --- ossp-pkg/js/src/jsatom.h	22 Aug 2005 17:36:57 -0000	1.1.1.1
  +++ ossp-pkg/js/src/jsatom.h	3 Aug 2006 13:19:21 -0000	1.2
  @@ -216,6 +216,9 @@
       JSAtom              *toStringAtom;
       JSAtom              *valueOfAtom;
       JSAtom              *xmlAtom;
  +#ifdef OSSP
  +    JSAtom              *DSOAtom;
  +#endif
   
       /* Less frequently used atoms, pinned lazily by JS_ResolveStandardClass. */
       struct {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsdso.c
  ============================================================================
  $ cvs diff -u -r0 -r1.1 jsdso.c
  --- /dev/null	2006-08-03 15:19:18 +0200
  +++ jsdso.c	2006-08-03 15:19:21 +0200
  @@ -0,0 +1,247 @@
  +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
  + *
  + * ***** BEGIN LICENSE BLOCK *****
  + * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  + *
  + * The contents of this file are subject to the Mozilla Public License Version
  + * 1.1 (the "License"); you may not use this file except in compliance with
  + * the License. You may obtain a copy of the License at
  + * http://www.mozilla.org/MPL/
  + *
  + * Software distributed under the License is distributed on an "AS IS" basis,
  + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  + * for the specific language governing rights and limitations under the
  + * License.
  + *
  + * Contributor(s):
  + *
  + * Alternatively, the contents of this file may be used under the terms of
  + * either of the GNU General Public License Version 2 or later (the "GPL"),
  + * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  + * in which case the provisions of the GPL or the LGPL are applicable instead
  + * of those above. If you wish to allow use of your version of this file only
  + * under the terms of either the GPL or the LGPL, and not to allow others to
  + * use your version of this file under the terms of the MPL, indicate your
  + * decision by deleting the provisions above and replace them with the notice
  + * and other provisions required by the GPL or the LGPL. If you do not delete
  + * the provisions above, a recipient may use your version of this file under
  + * the terms of any one of the MPL, the GPL or the LGPL.
  + *
  + * ***** END LICENSE BLOCK ***** */
  +
  +/* ATTENTION: This is an OSSP js extension to the Mozilla JavaScript engine.
  +   It was implemented by Ralf S. Engelschall <rse@engelschall.com> for OSSP. */
  +
  +#if defined(OSSP) && defined(JS_HAS_DSO_OBJECT) && JS_HAS_DSO_OBJECT
  +
  +/* own headers (part 1/2) */
  +#include "jsstddef.h"
  +
  +/* system headers */
  +#include <stdio.h>
  +#include <stdlib.h>
  +#include <dlfcn.h>
  +
  +/* own headers (part 2/2) */
  +#include "jstypes.h"
  +#include "jsapi.h"
  +#include "jsatom.h"
  +#include "jscntxt.h"
  +#include "jsconfig.h"
  +#include "jsobj.h"
  +#include "jsdso.h"
  +
  +/* process local storage of DSO handles */
  +static void *dso_handle[10000];
  +
  +/* type of the DSO load/unload functions */
  +typedef JSBool (*dso_func_t)(JSContext *cx);
  +
  +/* ISO-C type coersion trick */
  +typedef union { void *vp; dso_func_t fp; } dso_func_ptr_t;
  +
  +/* public C API function: DSO loading */
  +JS_PUBLIC_API(JSBool)
  +JS_DSOLoad(JSContext *cx, int *idp, const char *filename)
  +{
  +    int id;
  +    void *handle;
  +    dso_func_ptr_t func;
  +    JSBool rc;
  +
  +    /* determine next free DSO handle slot */
  +    for (id = 0; dso_handle[id] != NULL && id < sizeof(dso_handle)/sizeof(dso_handle[0]); id++)
  +        ;
  +    if (id == sizeof(dso_handle)/sizeof(dso_handle[0])) {
  +        JS_ReportError(cx, "no more free DSO handle slots available");
  +        return JS_FALSE;
  +    }
  +
  +    /* load DSO into process */
  +    if ((handle = dlopen(filename, RTLD_NOW)) == NULL) {
  +        JS_ReportError(cx, "unable to load DSO \"%s\": %s", filename, dlerror());
  +        return JS_FALSE;
  +    }
  +
  +    /* resolve "js_DSO_load" function, call it and insist on a true return */
  +    if ((func.vp = dlsym(handle, "js_DSO_load")) == NULL) {
  +        JS_ReportError(cx, "unable to resolve symbol \"js_DSO_load\" in DSO \"%s\"", filename);
  +        dlclose(handle);
  +        return JS_FALSE;
  +    }
  +    rc = func.fp(cx);
  +    if (!rc) {
  +        JS_ReportError(cx, "function \"js_DSO_load\" in DSO \"%s\" returned error", filename);
  +        dlclose(handle);
  +        return JS_FALSE;
  +    }
  +
  +    /* store DSO handle into process local storage */
  +    dso_handle[id] = handle;
  +
  +    /* return DSO id to caller */
  +    if (idp != NULL)
  +        *idp = id;
  +
  +    return JS_TRUE;
  +}
  +
  +/* public C API function: DSO unloading */
  +JS_PUBLIC_API(JSBool)
  +JS_DSOUnload(JSContext *cx, int id)
  +{
  +    int idx;
  +    void *handle;
  +    dso_func_ptr_t func;
  +    JSBool rc;
  +
  +    /* sanity check DSO id */
  +    if (id < 0 || id >= sizeof(dso_handle)/sizeof(dso_handle[0])) {
  +        JS_ReportError(cx, "invalid argument: DSO id #%d out of range", id);
  +        return JS_FALSE;
  +    }
  +
  +    /* determine DSO handle */
  +    if ((handle = dso_handle[id]) == NULL) {
  +        JS_ReportError(cx, "invalid argument: DSO id #%d currently unused", id);
  +        return JS_FALSE;
  +    }
  +
  +    /* resolve "js_DSO_unload" function and (if available only)
  +       call it and insist on a true return */
  +    if ((func.vp = dlsym(handle, "js_DSO_unload")) != NULL) {
  +        rc = func.fp(cx);
  +        if (!rc) {
  +            JS_ReportError(cx, "function \"js_DSO_unload\" in DSO with id #%d returned error", idx);
  +            return JS_FALSE;
  +        }
  +    }
  +
  +    /* unload DSO from process */
  +    dlclose(handle);
  +
  +    /* free DSO handle slot */
  +    dso_handle[id] = NULL;
  +
  +    return JS_TRUE;
  +}
  +
  +/* global JavaScript language DSO object method: id = DSO.load("filename.so") */
  +static JSBool dso_load(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
  +{
  +    JSString *filename;
  +    char *c_filename;
  +    int id;
  +
  +    /* usage sanity checks */
  +    if (argc == 0) {
  +        JS_ReportError(cx, "usage: id = DSO.load(filename)");
  +        return JS_FALSE;
  +    }
  +    if (argc != 1) {
  +        JS_ReportError(cx, "invalid number of arguments: %d received, %d expected", argc, 1);
  +        return JS_FALSE;
  +    }
  +
  +    /* determine filename */
  +    if ((filename = js_ValueToString(cx, argv[0])) == NULL) {
  +        JS_ReportError(cx, "invalid argument");
  +        return JS_FALSE;
  +    }
  +    if ((c_filename = JS_GetStringBytes(filename)) == NULL) {
  +        JS_ReportError(cx, "invalid argument");
  +        return JS_FALSE;
  +    }
  +
  +    /* load DSO */
  +    if (!JS_DSOLoad(cx, &id, c_filename))
  +        return JS_FALSE;
  +
  +    /* return DSO handle id */
  +    *rval = INT_TO_JSVAL(id);
  +
  +    return JS_TRUE;
  +}
  +
  +/* global JavaScript language DSO object method: DSO.unload(id) */
  +static JSBool dso_unload(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
  +{
  +    int id;
  +    JSBool rc;
  +
  +    /* usage sanity checks */
  +    if (argc == 0) {
  +        JS_ReportError(cx, "usage: DSO.unload(id)");
  +        return JS_FALSE;
  +    }
  +    if (argc != 1) {
  +        JS_ReportError(cx, "invalid number of arguments: %d received, %d expected", argc, 1);
  +        return JS_FALSE;
  +    }
  +
  +    /* determine DSO id */
  +    id = JSVAL_TO_INT(argv[0]);
  +
  +    /* unload DSO */
  +    if (!JS_DSOUnload(cx, id))
  +        return JS_FALSE;
  +
  +    return JS_TRUE;
  +}
  +
  +/* JavaScript DSO class method definitions */
  +static JSFunctionSpec dso_methods[] = {
  +    { "load",   dso_load,   1, 0, 0 },
  +    { "unload", dso_unload, 1, 0, 0 },
  +    { NULL,     NULL,       0, 0, 0 }
  +};
  +
  +/* JavaScript DSO class definition */
  +static JSClass dso_class = {
  +    "DSO",
  +    0,
  +    JS_PropertyStub,
  +    JS_PropertyStub,
  +    JS_PropertyStub,
  +    JS_PropertyStub,
  +    JS_EnumerateStub,
  +    JS_ResolveStub,
  +    JS_ConvertStub,
  +    JS_FinalizeStub,
  +    JSCLASS_NO_OPTIONAL_MEMBERS
  +};
  +
  +/* JavaScript DSO class global initializer */
  +JSObject *js_InitDSOClass(JSContext *cx, JSObject *obj)
  +{
  +    JSObject *DSO;
  +
  +    if ((DSO = JS_DefineObject(cx, obj, "DSO", &dso_class, NULL, 0)) == NULL)
  +        return NULL;
  +    if (!JS_DefineFunctions(cx, DSO, dso_methods))
  +        return NULL;
  +    return DSO;
  +}
  +
  +#endif /* JS_HAS_DSO_OBJECT */
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsdso.h
  ============================================================================
  $ cvs diff -u -r0 -r1.1 jsdso.h
  --- /dev/null	2006-08-03 15:19:18 +0200
  +++ jsdso.h	2006-08-03 15:19:21 +0200
  @@ -0,0 +1,51 @@
  +/* ***** BEGIN LICENSE BLOCK *****
  + * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  + *
  + * The contents of this file are subject to the Mozilla Public License Version
  + * 1.1 (the "License"); you may not use this file except in compliance with
  + * the License. You may obtain a copy of the License at
  + * http://www.mozilla.org/MPL/
  + *
  + * Software distributed under the License is distributed on an "AS IS" basis,
  + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  + * for the specific language governing rights and limitations under the
  + * License.
  + *
  + * Contributor(s):
  + *
  + * Alternatively, the contents of this file may be used under the terms of
  + * either of the GNU General Public License Version 2 or later (the "GPL"),
  + * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  + * in which case the provisions of the GPL or the LGPL are applicable instead
  + * of those above. If you wish to allow use of your version of this file only
  + * under the terms of either the GPL or the LGPL, and not to allow others to
  + * use your version of this file under the terms of the MPL, indicate your
  + * decision by deleting the provisions above and replace them with the notice
  + * and other provisions required by the GPL or the LGPL. If you do not delete
  + * the provisions above, a recipient may use your version of this file under
  + * the terms of any one of the MPL, the GPL or the LGPL.
  + *
  + * ***** END LICENSE BLOCK ***** */
  +
  +/* ATTENTION: This is an OSSP js extension to the Mozilla JavaScript engine.
  +   It was implemented by Ralf S. Engelschall <rse@engelschall.com> for OSSP. */
  +
  +#ifndef jsdso_h___
  +#define jsdso_h___
  +
  +#if defined(OSSP) && defined(JS_HAS_DSO_OBJECT) && JS_HAS_DSO_OBJECT
  +
  +JS_BEGIN_EXTERN_C
  +
  +/* public API */
  +extern JSBool    JS_DSOLoad      (JSContext *cx, int *id, const char *filename);
  +extern JSBool    JS_DSOUnload    (JSContext *cx, int  id);
  +
  +/* friend API */
  +extern JSObject *js_InitDSOClass (JSContext *cx, JSObject *obj);
  +
  +JS_END_EXTERN_C
  +
  +#endif
  +
  +#endif /* jsdso_h___ */
  @@ .

From ossp-cvs-owner@ossp.org  Thu Aug  3 15:24:41 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 67FFC75286A; Thu,  3 Aug 2006 15:24:41 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: MOZILLA: ossp-pkg/js/src/ .cvsignore Makefile.in Makefile....
Message-Id: <20060803132441.67FFC75286A@mail.ossp.org>
Date: Thu,  3 Aug 2006 15:24:41 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Aug-2006 15:24:41
  Branch: MOZILLA                          Handle: -NONE-

  Touched files:            (Branch: MOZILLA)
    ossp-pkg/js/src         .cvsignore Makefile.in Makefile.ref README.html
                            SpiderMonkey.rsp config.mk js.c js.mak js.mdp
                            js.msg js.pkg js3240.rc jsOS240.def jsapi.c
                            jsapi.h jsarena.c jsarena.h jsarray.c jsarray.h
                            jsatom.c jsatom.h jsbit.h jsbool.c jsbool.h
                            jsclist.h jscntxt.c jscntxt.h jscompat.h
                            jsconfig.h jsconfig.mk jscpucfg.c jscpucfg.h
                            jsdate.c jsdate.h jsdbgapi.c jsdbgapi.h jsdhash.c
                            jsdhash.h jsdtoa.c jsdtoa.h jsemit.c jsemit.h
                            jsexn.c jsexn.h jsfile.c jsfile.h jsfile.msg
                            jsfun.c jsfun.h jsgc.c jsgc.h jshash.h jsify.pl
                            jsinterp.c jsinterp.h jslibmath.h jslock.c
                            jslock.h jslocko.asm jslog2.c jslong.c jslong.h
                            jsmath.c jsmath.h jsnum.c jsnum.h jsobj.c jsobj.h
                            jsopcode.c jsopcode.h jsopcode.tbl jsosdep.h
                            jsotypes.h jsparse.c jsparse.h jsprf.c jsprf.h
                            jsprvtd.h jspubtd.h jsregexp.c jsregexp.h jsscan.c
                            jsscan.h jsscope.c jsscope.h jsscript.c jsscript.h
                            jsshell.msg jsstddef.h jsstr.c jsstr.h jstypes.h
                            jsutil.c jsutil.h jsxdrapi.c jsxdrapi.h jsxml.c
                            jsxml.h lock_SunOS.s perfect.js plify_jsdhash.sed
                            prmjtime.c prmjtime.h resource.h rules.mk
                            win32.order
    ossp-pkg/js/src/config  AIX4.1.mk AIX4.2.mk AIX4.3.mk Darwin.mk
                            Darwin1.3.mk Darwin1.4.mk Darwin5.2.mk
                            Darwin5.3.mk HP-UXB.10.10.mk HP-UXB.10.20.mk
                            HP-UXB.11.00.mk IRIX.mk IRIX5.3.mk IRIX6.1.mk
                            IRIX6.2.mk IRIX6.3.mk IRIX6.5.mk Linux_All.mk
                            Mac_OS10.0.mk OSF1V4.0.mk OSF1V5.0.mk
                            SunOS4.1.4.mk SunOS5.3.mk SunOS5.4.mk
                            SunOS5.5.1.mk SunOS5.5.mk SunOS5.6.mk SunOS5.7.mk
                            SunOS5.8.mk SunOS5.9.mk WINNT4.0.mk WINNT5.0.mk
                            WINNT5.1.mk WINNT5.2.mk dgux.mk
    ossp-pkg/js/src/editline
                            Makefile.ref README editline.3 editline.c
                            editline.h sysunix.c unix.h
    ossp-pkg/js/src/fdlibm  .cvsignore Makefile.in Makefile.ref e_acos.c
                            e_acosh.c e_asin.c e_atan2.c e_atanh.c e_cosh.c
                            e_exp.c e_fmod.c e_gamma.c e_gamma_r.c e_hypot.c
                            e_j0.c e_j1.c e_jn.c e_lgamma.c e_lgamma_r.c
                            e_log.c e_log10.c e_pow.c e_rem_pio2.c
                            e_remainder.c e_scalb.c e_sinh.c e_sqrt.c fdlibm.h
                            fdlibm.mak fdlibm.mdp k_cos.c k_rem_pio2.c k_sin.c
                            k_standard.c k_tan.c s_asinh.c s_atan.c s_cbrt.c
                            s_ceil.c s_copysign.c s_cos.c s_erf.c s_expm1.c
                            s_fabs.c s_finite.c s_floor.c s_frexp.c s_ilogb.c
                            s_isnan.c s_ldexp.c s_lib_version.c s_log1p.c
                            s_logb.c s_matherr.c s_modf.c s_nextafter.c
                            s_rint.c s_scalbn.c s_signgam.c s_significand.c
                            s_sin.c s_tan.c s_tanh.c w_acos.c w_acosh.c
                            w_asin.c w_atan2.c w_atanh.c w_cosh.c w_exp.c
                            w_fmod.c w_gamma.c w_gamma_r.c w_hypot.c w_j0.c
                            w_j1.c w_jn.c w_lgamma.c w_lgamma_r.c w_log.c
                            w_log10.c w_pow.c w_remainder.c w_scalb.c w_sinh.c
                            w_sqrt.c
    ossp-pkg/js/src/perlconnect
                            .cvsignore JS.def JS.dsp JS.pm JS.xs Makefile.PL
                            Makefile.ref PerlConnect.dsp PerlConnect.dsw
                            PerlConnect.pm PerlConnectShell.dsp README.html
                            bg.jpg jsperl.c jsperl.h jsperlbuild.pl
                            jsperlpvt.h test.js test.pl typemap

  Log:
    Import new upstream version: Mozilla JavaScript (SpiderMonkey) 1.6 as of 2006-08-03
    
    [Release Tag: MOZILLA_JS_1_6_20060803]

  Summary:
    Revision    Changes     Path
  ____________________________________________________________________________

From ossp-cvs-owner@ossp.org  Thu Aug  3 15:25:32 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id A7B6A752809; Thu,  3 Aug 2006 15:25:32 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ ChangeLog README VERSION ossp-pkg/js/src/ jsa...
Message-Id: <20060803132532.A7B6A752809@mail.ossp.org>
Date: Thu,  3 Aug 2006 15:25:32 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Aug-2006 15:25:32
  Branch: HEAD                             Handle: 2006080314253101

  Modified files:
    ossp-pkg/js             ChangeLog README VERSION
    ossp-pkg/js/src         jsapi.c

  Log:
    bump version before release

  Summary:
    Revision    Changes     Path
    1.30        +1  -1      ossp-pkg/js/ChangeLog
    1.13        +1  -1      ossp-pkg/js/README
    1.7         +1  -1      ossp-pkg/js/VERSION
    1.14        +1  -1      ossp-pkg/js/src/jsapi.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 ChangeLog
  --- ossp-pkg/js/ChangeLog	3 Aug 2006 13:19:20 -0000	1.29
  +++ ossp-pkg/js/ChangeLog	3 Aug 2006 13:25:31 -0000	1.30
  @@ -11,7 +11,7 @@
   
     This is a list of all changes to OSSP js.
   
  -  Changes between 1.6.20060731 and 1.6.200608xx (2006-07-31 to 2006-08-xx)
  +  Changes between 1.6.20060731 and 1.6.20060803 (2006-07-31 to 2006-08-03)
   
      o Add optional Dynamic Shared Object (DSO) support (see src/jsdso.[ch]).
        This comes in two flavors:
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/README
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 README
  --- ossp-pkg/js/README	31 Jul 2006 17:36:41 -0000	1.12
  +++ ossp-pkg/js/README	3 Aug 2006 13:25:31 -0000	1.13
  @@ -6,7 +6,7 @@
                                     |__/      
   
     OSSP js - Mozilla JavaScript Engine
  -  Version 1.6.20060731 (31-Jul-2006)
  +  Version 1.6.20060803 (03-Aug-2006)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/VERSION
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 VERSION
  --- ossp-pkg/js/VERSION	31 Jul 2006 17:36:41 -0000	1.6
  +++ ossp-pkg/js/VERSION	3 Aug 2006 13:25:32 -0000	1.7
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP js (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP js, Version 1.6.20060731 (31-Jul-2006)
  +  This is OSSP js, Version 1.6.20060803 (03-Aug-2006)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsapi.c
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 jsapi.c
  --- ossp-pkg/js/src/jsapi.c	3 Aug 2006 13:19:20 -0000	1.13
  +++ ossp-pkg/js/src/jsapi.c	3 Aug 2006 13:25:32 -0000	1.14
  @@ -1089,7 +1089,7 @@
   JS_GetImplementationVersion(void)
   {
   #ifdef OSSP
  -    return "JavaScript-C 1.6 pre-release 1 2006-04-04 (OSSP js 1.6.20060731)";
  +    return "JavaScript-C 1.6 pre-release 1 2006-04-04 (OSSP js 1.6.20060803)";
   #else
       return "JavaScript-C 1.6 pre-release 1 2006-04-04";
   #endif
  @@ .

From ossp-cvs-owner@ossp.org  Thu Aug  3 15:30:51 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id DF4A47528CE; Thu,  3 Aug 2006 15:30:50 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20060803133050.DF4A47528CE@mail.ossp.org>
Date: Thu,  3 Aug 2006 15:30:50 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   03-Aug-2006 15:30:50
  Branch: HEAD                             Handle: 2006080314304901

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/js     index.wml

  Log:
    release OSSP js 1.6.20060803

  Summary:
    Revision    Changes     Path
    1.160       +1  -0      ossp-web/new/news.txt
    1.130       +1  -1      ossp-web/pkg/lib/index.wml
    1.8         +4  -3      ossp-web/pkg/lib/js/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.159 -r1.160 news.txt
  --- ossp-web/new/news.txt	31 Jul 2006 18:16:23 -0000	1.159
  +++ ossp-web/new/news.txt	3 Aug 2006 13:30:49 -0000	1.160
  @@ -1,3 +1,4 @@
  +03-Aug-2006: Released L<OSSP js> 1.6.20060803
   31-Jul-2006: Released L<OSSP js> 1.6.20060731
   31-Jul-2006: Released L<OSSP uuid> 1.5.1
   30-Jul-2006: Released L<OSSP js> 1.6.20060730
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.129 -r1.130 index.wml
  --- ossp-web/pkg/lib/index.wml	31 Jul 2006 18:16:24 -0000	1.129
  +++ ossp-web/pkg/lib/index.wml	3 Aug 2006 13:30:50 -0000	1.130
  @@ -42,7 +42,7 @@
   			done=95 stable=none unstable=0.9.3>
     <pkg_item name="js" longname="OSSP js" type="lib"
               desc="Mozilla JavaScript Engine"
  -			done=100 stable=none unstable=1.6.20060731>
  +			done=100 stable=none unstable=1.6.20060803>
     <pkg_item name="str" longname="OSSP str" type="lib"
               desc="String Handling"
   			done=95 stable=none unstable=0.9.12>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/js/index.wml
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 index.wml
  --- ossp-web/pkg/lib/js/index.wml	31 Jul 2006 18:16:24 -0000	1.7
  +++ ossp-web/pkg/lib/js/index.wml	3 Aug 2006 13:30:50 -0000	1.8
  @@ -17,7 +17,8 @@
   Mozilla JavaScript through a build environment based on GNU autoconf,
   GNU libtool and GNU shtool, including support for easy JavaScript
   build-time feature set selection (ECMA-3, JS-1.5, JS-1.6), optional
  -CLI line editing support, optional "stdio" based File object support
  +CLI line editing support, optional "stdio" based File object support,
  +optional Dynamic Shared Object (DSO) based C extension loading support
   and JS/Perl bindings. Additionally, the C API in "libjs" contains both
   the JavaScript engine and the required Sun math library ("fdlibm") and
   with all internal symbols carefully protected under the "js" namespace.
  @@ -63,7 +64,7 @@
   <pkg_status
       name="js" assign="rse"
   	genesis="Jul-2006"
  -    stable="1.6.20060731" stable_date="31-Jul-2006"
  +    stable="1.6.20060803" stable_date="03-Aug-2006"
       unstable="none"       unstable_date="none"
   	done=100>
   
  @@ -74,7 +75,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/js/
       directory=$(FTP_ROOT_DIR)/pkg/lib/js/
       files="js-*.tar.gz" 
  -	stable="js-1.6.20060731.tar.gz" unstable="none">
  +	stable="js-1.6.20060803.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Aug  3 17:37:49 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id E866B7528B9; Thu,  3 Aug 2006 17:37:48 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.enroll.pl
Message-Id: <20060803153748.E866B7528B9@mail.ossp.org>
Date: Thu,  3 Aug 2006 17:37:48 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   03-Aug-2006 17:37:48
  Branch: HEAD                             Handle: 2006080316374800

  Modified files:
    ossp-pkg/ase            ase.cgi.enroll.pl

  Log:
    flush some long-pending changes

  Summary:
    Revision    Changes     Path
    1.15        +9  -3      ossp-pkg/ase/ase.cgi.enroll.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	13 Apr 2006 18:05:59 -0000	1.14
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	3 Aug 2006 15:37:48 -0000	1.15
  @@ -237,14 +237,17 @@
       #   verify form parameters
       my $error = 0;
       if ($name !~ m/\S+\s+\S+/) {
  +        $self->logbook("invalid name: \"%s\"", $name);
           $cgi->param('name.error', 'Invalid Name: not <i>firstname lastname</i>');
           $error = 1;
       }
       if ($address !~ m/^[^@]+\@(?:[^.]+\.)+[^.]+$/) {
  +        $self->logbook("invalid address: \"%s\"", $address);
           $cgi->param('address.error', 'Invalid Email address: not <i>name</i>@<i>domain</i>');
           $error = 1;
       }
       if ($password !~ m/^.{6,}$/) {
  +        $self->logbook("invalid password: \"%s\"", $password);
           $cgi->param('password.error', 'Invalid Password: at least 6 characters required');
           $error = 1;
       }
  @@ -265,8 +268,9 @@
           $sth->execute($address) or die $dbi->errstr();
           my $rec = $sth->fetchrow_hashref();
           if (defined($rec)) {
  +            $self->logbook("address \"%s\" already in use for enrolling", $address);
               $cgi->param('address.error', "Email address already in use for enrolling since " .
  -                $self->datetime2str($rec->{'en_start'}));
  +                $self->datetime2str($rec->{'en_start'}) . " (new enrollments blocked for 8 hours)");
               $error = 1;
           }
           $sth = $dbi->prepare(
  @@ -275,8 +279,9 @@
           $sth->execute($address) or die $dbi->errstr();
           $rec = $sth->fetchrow_hashref();
           if (defined($rec)) {
  +            $self->logbook("address \"%s\" already in use", $address);
               $cgi->param('address.error', "Email address already in use since " .
  -                $self->datetime2str($rec->{'me_membership_start'}));
  +                $self->datetime2str($rec->{'me_membership_start'}) . " (enrollment already successful)");
               $error = 1;
           }
       }
  @@ -305,6 +310,7 @@
       );
       foreach my $re (@blacklist2) {
           if ($name =~ m/$re/s) {
  +            $self->logbook("name \"%s\" not valid", $name);
               $cgi->param('name.error', "Name is not valid");
               $error = 1;
           }
  @@ -328,7 +334,7 @@
       #   create membership record in database
       my $now = time();
       my $t_start  = $self->datetime($now);
  -    my $t_expiry = $self->datetime($now+1*60*60);
  +    my $t_expiry = $self->datetime($now+8*60*60);
       my $sth = $dbi->prepare(
           "INSERT INTO ase_enrollment" .
           " (en_uuid," .
  @@ .

From ossp-cvs-owner@ossp.org  Thu Aug 10 20:59:04 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 7F76575286E; Thu, 10 Aug 2006 20:59:04 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm/ ChangeLog devtool.conf
Message-Id: <20060810185904.7F76575286E@mail.ossp.org>
Date: Thu, 10 Aug 2006 20:59:04 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Aug-2006 20:59:04
  Branch: HEAD                             Handle: 2006081019590400

  Modified files:
    ossp-pkg/mm             ChangeLog devtool.conf

  Log:
    upgrade to GNU autoconf 2.60

  Summary:
    Revision    Changes     Path
    1.57        +3  -3      ossp-pkg/mm/ChangeLog
    1.11        +1  -1      ossp-pkg/mm/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.56 -r1.57 ChangeLog
  --- ossp-pkg/mm/ChangeLog	10 Jun 2006 21:25:54 -0000	1.56
  +++ ossp-pkg/mm/ChangeLog	10 Aug 2006 18:59:04 -0000	1.57
  @@ -9,13 +9,13 @@
    ChangeLog
    =========
   
  - Changes between 1.4.0 and 1.4.1 (02-Sep-2005 to 12-Oct-2005)
  + Changes between 1.4.0 and 1.4.1 (02-Sep-2005 to 10-Aug-2006)
   
     *) Add new API function MM_reset() and mm_reset().
        [Neil Conway <neilc@samurai.com>]
   
  -  *) Upgraded build environment to GNU shtool 2.0.6 and
  -     GNU libtool 1.5.22
  +  *) Upgraded build environment to GNU shtool 2.0.6,
  +     GNU libtool 1.5.22 and GNU autoconf 2.60.
        [Ralf S. Engelschall]
   
     *) Fix spelling errors in manual page mm(3) and corrected
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 devtool.conf
  --- ossp-pkg/mm/devtool.conf	10 Jun 2006 07:06:39 -0000	1.10
  +++ ossp-pkg/mm/devtool.conf	10 Aug 2006 18:59:04 -0000	1.11
  @@ -5,7 +5,7 @@
   %autogen
       @autogen shtool   2.0.6  "2.0.*" all
       @autogen libtool  1.5.22 "1.5*"
  -    @autogen autoconf 2.59   "2.5[3-9]*"
  +    @autogen autoconf 2.60   "2.6[0-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .

From ossp-cvs-owner@ossp.org  Thu Aug 10 21:00:34 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 8CCD67529DA; Thu, 10 Aug 2006 21:00:34 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm/ LICENSE Makefile.in README aclocal.m4 configu...
Message-Id: <20060810190034.8CCD67529DA@mail.ossp.org>
Date: Thu, 10 Aug 2006 21:00:34 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Aug-2006 21:00:34
  Branch: HEAD                             Handle: 2006081020003201

  Modified files:
    ossp-pkg/mm             LICENSE Makefile.in README aclocal.m4 configure.ac
                            mm-config.in mm-config.pod mm.h mm.pod mm_alloc.c
                            mm_core.c mm_global.c mm_lib.c mm_test.c

  Log:
    bump copyright for year 2006

  Summary:
    Revision    Changes     Path
    1.9         +2  -2      ossp-pkg/mm/LICENSE
    1.35        +2  -2      ossp-pkg/mm/Makefile.in
    1.83        +2  -2      ossp-pkg/mm/README
    1.31        +2  -2      ossp-pkg/mm/aclocal.m4
    1.8         +4  -4      ossp-pkg/mm/configure.ac
    1.13        +2  -2      ossp-pkg/mm/mm-config.in
    1.11        +2  -2      ossp-pkg/mm/mm-config.pod
    1.32        +2  -2      ossp-pkg/mm/mm.h
    1.30        +2  -2      ossp-pkg/mm/mm.pod
    1.25        +2  -2      ossp-pkg/mm/mm_alloc.c
    1.24        +2  -2      ossp-pkg/mm/mm_core.c
    1.16        +2  -2      ossp-pkg/mm/mm_global.c
    1.11        +2  -2      ossp-pkg/mm/mm_lib.c
    1.14        +2  -2      ossp-pkg/mm/mm_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/LICENSE
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 LICENSE
  --- ossp-pkg/mm/LICENSE	2 Sep 2005 20:00:46 -0000	1.8
  +++ ossp-pkg/mm/LICENSE	10 Aug 2006 19:00:32 -0000	1.9
  @@ -1,7 +1,7 @@
   
     ====================================================================
  -  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 1999-2006 The OSSP Project <http://www.ossp.org/>
   
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 Makefile.in
  --- ossp-pkg/mm/Makefile.in	2 Sep 2005 20:00:46 -0000	1.34
  +++ ossp-pkg/mm/Makefile.in	10 Aug 2006 19:00:32 -0000	1.35
  @@ -1,6 +1,6 @@
   ## ====================================================================
  -## Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  -## Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
  +## Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +## Copyright (c) 1999-2006 The OSSP Project <http://www.ossp.org/>
   ##
   ## Redistribution and use in source and binary forms, with or without
   ## modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/README
  ============================================================================
  $ cvs diff -u -r1.82 -r1.83 README
  --- ossp-pkg/mm/README	2 Sep 2005 20:00:46 -0000	1.82
  +++ ossp-pkg/mm/README	10 Aug 2006 19:00:33 -0000	1.83
  @@ -5,8 +5,8 @@
     |_|_|_|  \___/|____/____/|_|     |_| |_| |_|_| |_| |_|
   
     OSSP mm - Shared Memory Allocation
  -  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 1999-2006 The OSSP Project <http://www.ossp.org/>
     Version 1.4.0 (02-Sep-2005)
   
     OSSP mm is a 2-layer abstraction library which simplifies the usage of
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 aclocal.m4
  --- ossp-pkg/mm/aclocal.m4	2 Sep 2005 20:00:46 -0000	1.30
  +++ ossp-pkg/mm/aclocal.m4	10 Aug 2006 19:00:33 -0000	1.31
  @@ -1,6 +1,6 @@
   ## ====================================================================
  -## Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  -## Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
  +## Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +## Copyright (c) 1999-2006 The OSSP Project <http://www.ossp.org/>
   ##
   ## Redistribution and use in source and binary forms, with or without
   ## modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/configure.ac
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 configure.ac
  --- ossp-pkg/mm/configure.ac	2 Sep 2005 20:00:46 -0000	1.7
  +++ ossp-pkg/mm/configure.ac	10 Aug 2006 19:00:33 -0000	1.8
  @@ -1,6 +1,6 @@
   ## ====================================================================
  -## Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  -## Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
  +## Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +## Copyright (c) 1999-2006 The OSSP Project <http://www.ossp.org/>
   ##
   ## Redistribution and use in source and binary forms, with or without
   ## modification, are permitted provided that the following conditions
  @@ -64,8 +64,8 @@
   
   dnl #   friendly header ;-)
   echo "Configuring ${T_MD}OSSP mm${T_ME} (Shared Memory Allocation), Version ${T_MD}${MM_VERSION_STR}${T_ME}"
  -echo "Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>"
  -echo "Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>"
  +echo "Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>"
  +echo "Copyright (c) 1999-2006 The OSSP Project <http://www.ossp.org/>"
   echo "Platform: ${T_MD}${PLATFORM}${T_ME}"
   
   dnl #
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm-config.in
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 mm-config.in
  --- ossp-pkg/mm/mm-config.in	2 Sep 2005 20:00:46 -0000	1.12
  +++ ossp-pkg/mm/mm-config.in	10 Aug 2006 19:00:33 -0000	1.13
  @@ -3,8 +3,8 @@
   ## mm-config -- MM library build configuration utility
   ##
   ## ====================================================================
  -## Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  -## Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
  +## Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +## Copyright (c) 1999-2006 The OSSP Project <http://www.ossp.org/>
   ##
   ## Redistribution and use in source and binary forms, with or without
   ## modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm-config.pod
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 mm-config.pod
  --- ossp-pkg/mm/mm-config.pod	2 Sep 2005 20:00:46 -0000	1.10
  +++ ossp-pkg/mm/mm-config.pod	10 Aug 2006 19:00:33 -0000	1.11
  @@ -1,6 +1,6 @@
   ## ====================================================================
  -## Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  -## Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
  +## Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +## Copyright (c) 1999-2006 The OSSP Project <http://www.ossp.org/>
   ##
   ## Redistribution and use in source and binary forms, with or without
   ## modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm.h
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 mm.h
  --- ossp-pkg/mm/mm.h	10 Jun 2006 21:25:54 -0000	1.31
  +++ ossp-pkg/mm/mm.h	10 Aug 2006 19:00:33 -0000	1.32
  @@ -1,6 +1,6 @@
   /* ====================================================================
  - * Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  - * Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
  + * Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  + * Copyright (c) 1999-2006 The OSSP Project <http://www.ossp.org/>
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm.pod
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 mm.pod
  --- ossp-pkg/mm/mm.pod	10 Jun 2006 21:25:54 -0000	1.29
  +++ ossp-pkg/mm/mm.pod	10 Aug 2006 19:00:33 -0000	1.30
  @@ -1,6 +1,6 @@
   ## ====================================================================
  -## Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  -## Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
  +## Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +## Copyright (c) 1999-2006 The OSSP Project <http://www.ossp.org/>
   ##
   ## Redistribution and use in source and binary forms, with or without
   ## modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm_alloc.c
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 mm_alloc.c
  --- ossp-pkg/mm/mm_alloc.c	10 Jun 2006 21:25:54 -0000	1.24
  +++ ossp-pkg/mm/mm_alloc.c	10 Aug 2006 19:00:33 -0000	1.25
  @@ -1,6 +1,6 @@
   /* ====================================================================
  - * Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  - * Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
  + * Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  + * Copyright (c) 1999-2006 The OSSP Project <http://www.ossp.org/>
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm_core.c
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 mm_core.c
  --- ossp-pkg/mm/mm_core.c	2 Sep 2005 20:00:46 -0000	1.23
  +++ ossp-pkg/mm/mm_core.c	10 Aug 2006 19:00:33 -0000	1.24
  @@ -1,6 +1,6 @@
   /* ====================================================================
  - * Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  - * Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
  + * Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  + * Copyright (c) 1999-2006 The OSSP Project <http://www.ossp.org/>
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm_global.c
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 mm_global.c
  --- ossp-pkg/mm/mm_global.c	10 Jun 2006 21:25:55 -0000	1.15
  +++ ossp-pkg/mm/mm_global.c	10 Aug 2006 19:00:33 -0000	1.16
  @@ -1,6 +1,6 @@
   /* ====================================================================
  - * Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  - * Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
  + * Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  + * Copyright (c) 1999-2006 The OSSP Project <http://www.ossp.org/>
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm_lib.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 mm_lib.c
  --- ossp-pkg/mm/mm_lib.c	2 Sep 2005 20:00:46 -0000	1.10
  +++ ossp-pkg/mm/mm_lib.c	10 Aug 2006 19:00:33 -0000	1.11
  @@ -1,6 +1,6 @@
   /* ====================================================================
  - * Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  - * Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
  + * Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  + * Copyright (c) 1999-2006 The OSSP Project <http://www.ossp.org/>
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm_test.c
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 mm_test.c
  --- ossp-pkg/mm/mm_test.c	2 Sep 2005 20:00:46 -0000	1.13
  +++ ossp-pkg/mm/mm_test.c	10 Aug 2006 19:00:33 -0000	1.14
  @@ -1,6 +1,6 @@
   /* ====================================================================
  - * Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  - * Copyright (c) 1999-2005 The OSSP Project <http://www.ossp.org/>
  + * Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  + * Copyright (c) 1999-2006 The OSSP Project <http://www.ossp.org/>
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
  @@ .

From ossp-cvs-owner@ossp.org  Thu Aug 10 21:07:30 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id BE8F8752A0F; Thu, 10 Aug 2006 21:07:30 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm/ Makefile.in mm-config.in
Message-Id: <20060810190730.BE8F8752A0F@mail.ossp.org>
Date: Thu, 10 Aug 2006 21:07:30 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Aug-2006 21:07:30
  Branch: HEAD                             Handle: 2006081020073000

  Modified files:
    ossp-pkg/mm             Makefile.in mm-config.in

  Log:
    GNU autoconf 2.60 wishes datarootdir

  Summary:
    Revision    Changes     Path
    1.36        +1  -0      ossp-pkg/mm/Makefile.in
    1.14        +1  -0      ossp-pkg/mm/mm-config.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 Makefile.in
  --- ossp-pkg/mm/Makefile.in	10 Aug 2006 19:00:32 -0000	1.35
  +++ ossp-pkg/mm/Makefile.in	10 Aug 2006 19:07:30 -0000	1.36
  @@ -45,6 +45,7 @@
   DESTDIR     =
   prefix      = @prefix@
   exec_prefix = @exec_prefix@
  +datarootdir = @datarootdir@
   bindir      = @bindir@
   libdir      = @libdir@
   includedir  = @includedir@
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm-config.in
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 mm-config.in
  --- ossp-pkg/mm/mm-config.in	10 Aug 2006 19:00:33 -0000	1.13
  +++ ossp-pkg/mm/mm-config.in	10 Aug 2006 19:07:30 -0000	1.14
  @@ -47,6 +47,7 @@
   
   prefix="@prefix@"
   exec_prefix="@exec_prefix@"
  +datarootdir="@datarootdir@"
   
   mm_prefix="$prefix"
   mm_libdir="@libdir@"
  @@ .

From ossp-cvs-owner@ossp.org  Thu Aug 10 21:08:06 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id C66947529D4; Thu, 10 Aug 2006 21:08:06 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm/ README mm_vers.c
Message-Id: <20060810190806.C66947529D4@mail.ossp.org>
Date: Thu, 10 Aug 2006 21:08:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Aug-2006 21:08:06
  Branch: HEAD                             Handle: 2006081020080600

  Modified files:
    ossp-pkg/mm             README mm_vers.c

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.84        +1  -1      ossp-pkg/mm/README
    1.45        +9  -9      ossp-pkg/mm/mm_vers.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/README
  ============================================================================
  $ cvs diff -u -r1.83 -r1.84 README
  --- ossp-pkg/mm/README	10 Aug 2006 19:00:33 -0000	1.83
  +++ ossp-pkg/mm/README	10 Aug 2006 19:08:06 -0000	1.84
  @@ -7,7 +7,7 @@
     OSSP mm - Shared Memory Allocation
     Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
     Copyright (c) 1999-2006 The OSSP Project <http://www.ossp.org/>
  -  Version 1.4.0 (02-Sep-2005)
  +  Version 1.4.1 (10-Aug-2006)
   
     OSSP mm is a 2-layer abstraction library which simplifies the usage of
     shared memory between forked (and this way strongly related) processes
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm_vers.c
  ============================================================================
  $ cvs diff -u -r1.44 -r1.45 mm_vers.c
  --- ossp-pkg/mm/mm_vers.c	2 Sep 2005 19:57:14 -0000	1.44
  +++ ossp-pkg/mm/mm_vers.c	10 Aug 2006 19:08:06 -0000	1.45
  @@ -8,7 +8,7 @@
   #ifndef _MM_VERS_C_
   #define _MM_VERS_C_
   
  -#define MM_VERSION 0x104200
  +#define MM_VERSION 0x104201
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _MM_VERS_C_AS_HEADER_
   
   mm_version_t mm_version = {
  -    0x104200,
  -    "1.4.0",
  -    "1.4.0 (02-Sep-2005)",
  -    "This is OSSP mm, Version 1.4.0 (02-Sep-2005)",
  -    "OSSP mm 1.4.0 (02-Sep-2005)",
  -    "OSSP mm/1.4.0",
  -    "@(#)OSSP mm 1.4.0 (02-Sep-2005)",
  -    "$Id: OSSP mm 1.4.0 (02-Sep-2005) $"
  +    0x104201,
  +    "1.4.1",
  +    "1.4.1 (10-Aug-2006)",
  +    "This is OSSP mm, Version 1.4.1 (10-Aug-2006)",
  +    "OSSP mm 1.4.1 (10-Aug-2006)",
  +    "OSSP mm/1.4.1",
  +    "@(#)OSSP mm 1.4.1 (10-Aug-2006)",
  +    "$Id: OSSP mm 1.4.1 (10-Aug-2006) $"
   };
   
   #endif /* _MM_VERS_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Thu Aug 10 21:11:40 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 7F05A7529C3; Thu, 10 Aug 2006 21:11:40 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20060810191140.7F05A7529C3@mail.ossp.org>
Date: Thu, 10 Aug 2006 21:11:40 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   10-Aug-2006 21:11:40
  Branch: HEAD                             Handle: 2006081020113901

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/mm     index.wml

  Log:
    release OSSP mm 1.4.1

  Summary:
    Revision    Changes     Path
    1.161       +1  -0      ossp-web/new/news.txt
    1.131       +1  -1      ossp-web/pkg/lib/index.wml
    1.14        +2  -2      ossp-web/pkg/lib/mm/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.160 -r1.161 news.txt
  --- ossp-web/new/news.txt	3 Aug 2006 13:30:49 -0000	1.160
  +++ ossp-web/new/news.txt	10 Aug 2006 19:11:39 -0000	1.161
  @@ -1,3 +1,4 @@
  +10-Aug-2006: Released L<OSSP mm> 1.4.1
   03-Aug-2006: Released L<OSSP js> 1.6.20060803
   31-Jul-2006: Released L<OSSP js> 1.6.20060731
   31-Jul-2006: Released L<OSSP uuid> 1.5.1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.130 -r1.131 index.wml
  --- ossp-web/pkg/lib/index.wml	3 Aug 2006 13:30:50 -0000	1.130
  +++ ossp-web/pkg/lib/index.wml	10 Aug 2006 19:11:39 -0000	1.131
  @@ -18,7 +18,7 @@
   			done=100 stable=2.0.7 unstable=none>
     <pkg_item name="mm" longname="OSSP mm" type="lib"
               desc="Shared Memory Allocation"
  -			done=100 stable=1.4.0 unstable=none>
  +			done=100 stable=1.4.1 unstable=none>
     <pkg_item name="ex" longname="OSSP ex" type="lib"
               desc="Exception Handling"
   			done=100 stable=1.0.5 unstable=none>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/mm/index.wml
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 index.wml
  --- ossp-web/pkg/lib/mm/index.wml	2 Sep 2005 20:04:55 -0000	1.13
  +++ ossp-web/pkg/lib/mm/index.wml	10 Aug 2006 19:11:40 -0000	1.14
  @@ -30,7 +30,7 @@
   <pkg_status
       name="mm" assign="rse"
   	genesis="Mar-1999"
  -    stable="1.4.0"   stable_date="02-Sep-2005"
  +    stable="1.4.1"   stable_date="10-Aug-2006"
       unstable="none"  unstable_date="none"
   	done=100>
   
  @@ -41,7 +41,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/mm/
       directory=$(FTP_ROOT_DIR)/pkg/lib/mm/
       files="mm-*.tar.gz" 
  -	stable="mm-1.4.0.tar.gz" unstable="none">
  +	stable="mm-1.4.1.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Aug 10 21:32:58 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 7F33B7529C3; Thu, 10 Aug 2006 21:32:58 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ ChangeLog Makefile.in README cfg-config.in c...
Message-Id: <20060810193258.7F33B7529C3@mail.ossp.org>
Date: Thu, 10 Aug 2006 21:32:58 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Aug-2006 21:32:58
  Branch: HEAD                             Handle: 2006081020325601

  Modified files:
    ossp-pkg/cfg            ChangeLog Makefile.in README cfg-config.in
                            cfg_vers.c
    ossp-pkg/cfg/perl       cfg.pm

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.43        +1  -1      ossp-pkg/cfg/ChangeLog
    1.10        +1  -0      ossp-pkg/cfg/Makefile.in
    1.19        +1  -1      ossp-pkg/cfg/README
    1.7         +1  -0      ossp-pkg/cfg/cfg-config.in
    1.17        +9  -9      ossp-pkg/cfg/cfg_vers.c
    1.16        +1  -1      ossp-pkg/cfg/perl/cfg.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.42 -r1.43 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	1 Aug 2006 20:15:23 -0000	1.42
  +++ ossp-pkg/cfg/ChangeLog	10 Aug 2006 19:32:56 -0000	1.43
  @@ -8,7 +8,7 @@
   
     CHANGELOG
   
  -  Changes between 0.9.10 and 0.9.11 (03-Oct-2005 to 01-Aug-2006):
  +  Changes between 0.9.10 and 0.9.11 (03-Oct-2005 to 10-Aug-2006):
   
      *) Replace "return 0" with the official "yyterminate()"
         in cfg_syn_scan.l and fix quotation parsing by replacing
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 Makefile.in
  --- ossp-pkg/cfg/Makefile.in	31 Dec 2004 19:16:24 -0000	1.9
  +++ ossp-pkg/cfg/Makefile.in	10 Aug 2006 19:32:57 -0000	1.10
  @@ -34,6 +34,7 @@
   DESTDIR     =
   prefix      = @prefix@
   exec_prefix = @exec_prefix@
  +datarootdir = @datarootdir@
   bindir      = @bindir@
   libdir      = @libdir@
   includedir  = @includedir@
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/README
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 README
  --- ossp-pkg/cfg/README	3 Oct 2005 09:12:39 -0000	1.18
  +++ ossp-pkg/cfg/README	10 Aug 2006 19:32:57 -0000	1.19
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \___|_|  \__, |
                                                |___/
     OSSP cfg - Configuration Parsing
  -  Version 0.9.10 (03-Oct-2005)
  +  Version 0.9.11 (10-Aug-2006)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg-config.in
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 cfg-config.in
  --- ossp-pkg/cfg/cfg-config.in	31 Dec 2004 19:16:25 -0000	1.6
  +++ ossp-pkg/cfg/cfg-config.in	10 Aug 2006 19:32:57 -0000	1.7
  @@ -34,6 +34,7 @@
   
   prefix="@prefix@"
   exec_prefix="@exec_prefix@"
  +datarootdir="@datarootdir@"
   
   cfg_prefix="$prefix"
   cfg_exec_prefix="$exec_prefix"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_vers.c
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 cfg_vers.c
  --- ossp-pkg/cfg/cfg_vers.c	3 Oct 2005 09:12:39 -0000	1.16
  +++ ossp-pkg/cfg/cfg_vers.c	10 Aug 2006 19:32:57 -0000	1.17
  @@ -8,7 +8,7 @@
   #ifndef _CFG_VERS_C_
   #define _CFG_VERS_C_
   
  -#define __CFG_VERSION 0x00920A
  +#define __CFG_VERSION 0x00920B
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _CFG_VERS_C_AS_HEADER_
   
   __cfg_version_t __cfg_version = {
  -    0x00920A,
  -    "0.9.10",
  -    "0.9.10 (03-Oct-2005)",
  -    "This is OSSP cfg, Version 0.9.10 (03-Oct-2005)",
  -    "OSSP cfg 0.9.10 (03-Oct-2005)",
  -    "OSSP cfg/0.9.10",
  -    "@(#)OSSP cfg 0.9.10 (03-Oct-2005)",
  -    "$Id: cfg_vers.c,v 1.16 2005/10/03 09:12:39 rse Exp $"
  +    0x00920B,
  +    "0.9.11",
  +    "0.9.11 (10-Aug-2006)",
  +    "This is OSSP cfg, Version 0.9.11 (10-Aug-2006)",
  +    "OSSP cfg 0.9.11 (10-Aug-2006)",
  +    "OSSP cfg/0.9.11",
  +    "@(#)OSSP cfg 0.9.11 (10-Aug-2006)",
  +    "$Id: cfg_vers.c,v 1.17 2006/08/10 19:32:57 rse Exp $"
   };
   
   #endif /* _CFG_VERS_C_AS_HEADER_ */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/cfg.pm
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 cfg.pm
  --- ossp-pkg/cfg/perl/cfg.pm	3 Oct 2005 09:12:40 -0000	1.15
  +++ ossp-pkg/cfg/perl/cfg.pm	10 Aug 2006 19:32:57 -0000	1.16
  @@ -42,7 +42,7 @@
   ##
   
   #   API version
  -our $VERSION = do { my @v = ('0.9.10' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
  +our $VERSION = do { my @v = ('0.9.11' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
   
   #   API inheritance
   our @ISA = qw(Exporter);
  @@ .

From ossp-cvs-owner@ossp.org  Thu Aug 10 21:36:01 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id E5FC07529DB; Thu, 10 Aug 2006 21:36:00 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ Makefile.in README THANKS aclocal.m4 cfg-con...
Message-Id: <20060810193600.E5FC07529DB@mail.ossp.org>
Date: Thu, 10 Aug 2006 21:36:00 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Aug-2006 21:36:00
  Branch: HEAD                             Handle: 2006081020355604

  Modified files:
    ossp-pkg/cfg            Makefile.in README THANKS aclocal.m4 cfg-config.in
                            cfg.ac cfg.h cfg.pod cfg_buf.c cfg_buf.h
                            cfg_data.c cfg_data.h cfg_fmt.c cfg_fmt.h
                            cfg_global.h cfg_grid.c cfg_grid.h cfg_main.c
                            cfg_main.h cfg_node.c cfg_node.h cfg_syn.c
                            cfg_syn.h cfg_syn_parse.y cfg_syn_scan.l
                            cfg_test.c cfg_test.cfg cfg_util.c cfg_util.h
                            configure.ac devtool devtool.conf devtool.func
    ossp-pkg/cfg/perl       Makefile.PL cfg.pm cfg.pod cfg.tm cfg.ts cfg.xs

  Log:
    cleanup source tree for status as of 2006

  Summary:
    Revision    Changes     Path
    1.11        +2  -3      ossp-pkg/cfg/Makefile.in
    1.20        +2  -3      ossp-pkg/cfg/README
    1.5         +1  -1      ossp-pkg/cfg/THANKS
    1.8         +2  -3      ossp-pkg/cfg/aclocal.m4
    1.8         +2  -3      ossp-pkg/cfg/cfg-config.in
    1.8         +2  -3      ossp-pkg/cfg/cfg.ac
    1.18        +2  -3      ossp-pkg/cfg/cfg.h
    1.14        +2  -3      ossp-pkg/cfg/cfg.pod
    1.16        +2  -3      ossp-pkg/cfg/cfg_buf.c
    1.11        +2  -3      ossp-pkg/cfg/cfg_buf.h
    1.12        +2  -3      ossp-pkg/cfg/cfg_data.c
    1.8         +2  -3      ossp-pkg/cfg/cfg_data.h
    1.12        +0  -1      ossp-pkg/cfg/cfg_fmt.c
    1.9         +2  -3      ossp-pkg/cfg/cfg_fmt.h
    1.6         +2  -3      ossp-pkg/cfg/cfg_global.h
    1.9         +2  -3      ossp-pkg/cfg/cfg_grid.c
    1.6         +2  -3      ossp-pkg/cfg/cfg_grid.h
    1.16        +2  -3      ossp-pkg/cfg/cfg_main.c
    1.7         +2  -3      ossp-pkg/cfg/cfg_main.h
    1.27        +2  -3      ossp-pkg/cfg/cfg_node.c
    1.13        +2  -3      ossp-pkg/cfg/cfg_node.h
    1.26        +2  -3      ossp-pkg/cfg/cfg_syn.c
    1.10        +2  -3      ossp-pkg/cfg/cfg_syn.h
    1.13        +2  -3      ossp-pkg/cfg/cfg_syn_parse.y
    1.26        +2  -3      ossp-pkg/cfg/cfg_syn_scan.l
    1.19        +2  -3      ossp-pkg/cfg/cfg_test.c
    1.6         +2  -3      ossp-pkg/cfg/cfg_test.cfg
    1.8         +2  -3      ossp-pkg/cfg/cfg_util.c
    1.7         +2  -3      ossp-pkg/cfg/cfg_util.h
    1.17        +2  -3      ossp-pkg/cfg/configure.ac
    1.5         +1  -1      ossp-pkg/cfg/devtool
    1.28        +2  -3      ossp-pkg/cfg/devtool.conf
    1.7         +1  -1      ossp-pkg/cfg/devtool.func
    1.3         +2  -3      ossp-pkg/cfg/perl/Makefile.PL
    1.17        +2  -3      ossp-pkg/cfg/perl/cfg.pm
    1.7         +2  -3      ossp-pkg/cfg/perl/cfg.pod
    1.3         +2  -3      ossp-pkg/cfg/perl/cfg.tm
    1.4         +2  -3      ossp-pkg/cfg/perl/cfg.ts
    1.9         +2  -3      ossp-pkg/cfg/perl/cfg.xs
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 Makefile.in
  --- ossp-pkg/cfg/Makefile.in	10 Aug 2006 19:32:57 -0000	1.10
  +++ ossp-pkg/cfg/Makefile.in	10 Aug 2006 19:35:56 -0000	1.11
  @@ -1,8 +1,7 @@
   ##
   ##  OSSP cfg - Configuration Parsing
  -##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2006 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP cfg, a configuration parsing library which
   ##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/README
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 README
  --- ossp-pkg/cfg/README	10 Aug 2006 19:32:57 -0000	1.19
  +++ ossp-pkg/cfg/README	10 Aug 2006 19:35:56 -0000	1.20
  @@ -25,9 +25,8 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  -  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2002-2006 The OSSP Project <http://www.ossp.org/>
   
     This file is part of OSSP cfg, a configuration parsing library which
     can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/THANKS
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 THANKS
  --- ossp-pkg/cfg/THANKS	17 Jul 2004 07:37:55 -0000	1.4
  +++ ossp-pkg/cfg/THANKS	10 Aug 2006 19:35:56 -0000	1.5
  @@ -19,5 +19,5 @@
     bugfixes, hints, gave platform feedback, etc. (in alphabetical order):
   
       o  Thomas Lotterer             <thomas@lotterer.net>
  -    o  Michael van Elst            <mlelstv@dev.de.cw.net>
  +    o  Michael van Elst            <mlelstv@serpens.de>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 aclocal.m4
  --- ossp-pkg/cfg/aclocal.m4	24 Jan 2005 14:18:48 -0000	1.7
  +++ ossp-pkg/cfg/aclocal.m4	10 Aug 2006 19:35:56 -0000	1.8
  @@ -1,8 +1,7 @@
   dnl ##
   dnl ##  OSSP cfg - Configuration Parsing
  -dnl ##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +dnl ##  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2006 The OSSP Project <http://www.ossp.org/>
   dnl ##
   dnl ##  This file is part of OSSP cfg, a configuration parsing library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg-config.in
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 cfg-config.in
  --- ossp-pkg/cfg/cfg-config.in	10 Aug 2006 19:32:57 -0000	1.7
  +++ ossp-pkg/cfg/cfg-config.in	10 Aug 2006 19:35:56 -0000	1.8
  @@ -1,9 +1,8 @@
   #!/bin/sh
   ##
   ##  OSSP cfg - Configuration Parsing
  -##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2006 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP cfg, a configuration parsing library which
   ##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg.ac
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 cfg.ac
  --- ossp-pkg/cfg/cfg.ac	18 Feb 2005 10:05:35 -0000	1.7
  +++ ossp-pkg/cfg/cfg.ac	10 Aug 2006 19:35:56 -0000	1.8
  @@ -1,8 +1,7 @@
   dnl ##
   dnl ##  OSSP cfg - Configuration Parsing
  -dnl ##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +dnl ##  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2006 The OSSP Project <http://www.ossp.org/>
   dnl ##
   dnl ##  This file is part of OSSP cfg, a configuration parsing library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg.h
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 cfg.h
  --- ossp-pkg/cfg/cfg.h	31 Dec 2004 19:16:25 -0000	1.17
  +++ ossp-pkg/cfg/cfg.h	10 Aug 2006 19:35:56 -0000	1.18
  @@ -1,8 +1,7 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2005 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2005 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2006 The OSSP Project (http://www.ossp.org/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg.pod
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 cfg.pod
  --- ossp-pkg/cfg/cfg.pod	31 Dec 2004 19:16:25 -0000	1.13
  +++ ossp-pkg/cfg/cfg.pod	10 Aug 2006 19:35:56 -0000	1.14
  @@ -1,8 +1,7 @@
   ##
   ##  OSSP cfg - Configuration Parsing
  -##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2005 The OSSP Project (http://www.ossp.org/)
  -##  Copyright (c) 2002-2005 Cable & Wireless (http://www.cw.com/)
  +##  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2006 The OSSP Project (http://www.ossp.org/)
   ##
   ##  This file is part of OSSP cfg, a configuration parsing
   ##  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_buf.c
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 cfg_buf.c
  --- ossp-pkg/cfg/cfg_buf.c	31 Dec 2004 19:16:25 -0000	1.15
  +++ ossp-pkg/cfg/cfg_buf.c	10 Aug 2006 19:35:56 -0000	1.16
  @@ -1,8 +1,7 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2005 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2005 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2006 The OSSP Project (http://www.ossp.org/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_buf.h
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 cfg_buf.h
  --- ossp-pkg/cfg/cfg_buf.h	31 Dec 2004 19:16:25 -0000	1.10
  +++ ossp-pkg/cfg/cfg_buf.h	10 Aug 2006 19:35:56 -0000	1.11
  @@ -1,8 +1,7 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2005 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2005 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2006 The OSSP Project (http://www.ossp.org/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_data.c
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 cfg_data.c
  --- ossp-pkg/cfg/cfg_data.c	31 Dec 2004 19:16:25 -0000	1.11
  +++ ossp-pkg/cfg/cfg_data.c	10 Aug 2006 19:35:56 -0000	1.12
  @@ -1,8 +1,7 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2005 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2005 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2006 The OSSP Project (http://www.ossp.org/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_data.h
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 cfg_data.h
  --- ossp-pkg/cfg/cfg_data.h	31 Dec 2004 19:16:25 -0000	1.7
  +++ ossp-pkg/cfg/cfg_data.h	10 Aug 2006 19:35:56 -0000	1.8
  @@ -1,8 +1,7 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2005 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2005 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2006 The OSSP Project (http://www.ossp.org/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_fmt.c
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 cfg_fmt.c
  --- ossp-pkg/cfg/cfg_fmt.c	18 Feb 2005 09:58:32 -0000	1.11
  +++ ossp-pkg/cfg/cfg_fmt.c	10 Aug 2006 19:35:57 -0000	1.12
  @@ -2,7 +2,6 @@
   **  OSSP cfg - Configuration Parsing
   **  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
   **  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2003 Cable & Wireless (http://www.cw.com/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_fmt.h
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 cfg_fmt.h
  --- ossp-pkg/cfg/cfg_fmt.h	3 Feb 2005 10:40:14 -0000	1.8
  +++ ossp-pkg/cfg/cfg_fmt.h	10 Aug 2006 19:35:57 -0000	1.9
  @@ -1,8 +1,7 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2005 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2005 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2006 The OSSP Project (http://www.ossp.org/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_global.h
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 cfg_global.h
  --- ossp-pkg/cfg/cfg_global.h	31 Dec 2004 19:16:25 -0000	1.5
  +++ ossp-pkg/cfg/cfg_global.h	10 Aug 2006 19:35:57 -0000	1.6
  @@ -1,8 +1,7 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2005 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2005 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2006 The OSSP Project (http://www.ossp.org/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_grid.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 cfg_grid.c
  --- ossp-pkg/cfg/cfg_grid.c	24 Jan 2005 14:33:12 -0000	1.8
  +++ ossp-pkg/cfg/cfg_grid.c	10 Aug 2006 19:35:57 -0000	1.9
  @@ -1,8 +1,7 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2005 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2005 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2006 The OSSP Project (http://www.ossp.org/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_grid.h
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 cfg_grid.h
  --- ossp-pkg/cfg/cfg_grid.h	31 Dec 2004 19:16:25 -0000	1.5
  +++ ossp-pkg/cfg/cfg_grid.h	10 Aug 2006 19:35:57 -0000	1.6
  @@ -1,8 +1,7 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2005 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2005 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2006 The OSSP Project (http://www.ossp.org/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_main.c
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 cfg_main.c
  --- ossp-pkg/cfg/cfg_main.c	31 Dec 2004 19:16:25 -0000	1.15
  +++ ossp-pkg/cfg/cfg_main.c	10 Aug 2006 19:35:57 -0000	1.16
  @@ -1,8 +1,7 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2005 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2005 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2006 The OSSP Project (http://www.ossp.org/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_main.h
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 cfg_main.h
  --- ossp-pkg/cfg/cfg_main.h	31 Dec 2004 19:16:25 -0000	1.6
  +++ ossp-pkg/cfg/cfg_main.h	10 Aug 2006 19:35:57 -0000	1.7
  @@ -1,8 +1,7 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2005 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2005 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2006 The OSSP Project (http://www.ossp.org/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_node.c
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 cfg_node.c
  --- ossp-pkg/cfg/cfg_node.c	24 Jan 2005 14:25:21 -0000	1.26
  +++ ossp-pkg/cfg/cfg_node.c	10 Aug 2006 19:35:57 -0000	1.27
  @@ -1,8 +1,7 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2005 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2005 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2006 The OSSP Project (http://www.ossp.org/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_node.h
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 cfg_node.h
  --- ossp-pkg/cfg/cfg_node.h	31 Dec 2004 19:16:25 -0000	1.12
  +++ ossp-pkg/cfg/cfg_node.h	10 Aug 2006 19:35:57 -0000	1.13
  @@ -1,8 +1,7 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2005 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2005 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2006 The OSSP Project (http://www.ossp.org/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_syn.c
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 cfg_syn.c
  --- ossp-pkg/cfg/cfg_syn.c	31 Dec 2004 19:16:25 -0000	1.25
  +++ ossp-pkg/cfg/cfg_syn.c	10 Aug 2006 19:35:57 -0000	1.26
  @@ -1,8 +1,7 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2005 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2005 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2006 The OSSP Project (http://www.ossp.org/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_syn.h
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 cfg_syn.h
  --- ossp-pkg/cfg/cfg_syn.h	31 Dec 2004 19:16:25 -0000	1.9
  +++ ossp-pkg/cfg/cfg_syn.h	10 Aug 2006 19:35:57 -0000	1.10
  @@ -1,8 +1,7 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2005 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2005 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2006 The OSSP Project (http://www.ossp.org/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_syn_parse.y
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 cfg_syn_parse.y
  --- ossp-pkg/cfg/cfg_syn_parse.y	31 Dec 2004 19:16:25 -0000	1.12
  +++ ossp-pkg/cfg/cfg_syn_parse.y	10 Aug 2006 19:35:57 -0000	1.13
  @@ -1,9 +1,8 @@
   %{
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2005 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2005 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2006 The OSSP Project (http://www.ossp.org/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_syn_scan.l
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 cfg_syn_scan.l
  --- ossp-pkg/cfg/cfg_syn_scan.l	1 Aug 2006 20:13:49 -0000	1.25
  +++ ossp-pkg/cfg/cfg_syn_scan.l	10 Aug 2006 19:35:57 -0000	1.26
  @@ -1,9 +1,8 @@
   %{
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2005 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2005 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2006 The OSSP Project (http://www.ossp.org/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_test.c
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 cfg_test.c
  --- ossp-pkg/cfg/cfg_test.c	31 Dec 2004 19:16:25 -0000	1.18
  +++ ossp-pkg/cfg/cfg_test.c	10 Aug 2006 19:35:57 -0000	1.19
  @@ -1,8 +1,7 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2005 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2005 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2006 The OSSP Project (http://www.ossp.org/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_test.cfg
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 cfg_test.cfg
  --- ossp-pkg/cfg/cfg_test.cfg	31 Dec 2004 19:16:25 -0000	1.5
  +++ ossp-pkg/cfg/cfg_test.cfg	10 Aug 2006 19:35:57 -0000	1.6
  @@ -1,8 +1,7 @@
   ##
   ##  OSSP cfg - Configuration Parsing
  -##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2006 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP cfg, a configuration parsing library which
   ##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_util.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 cfg_util.c
  --- ossp-pkg/cfg/cfg_util.c	31 Dec 2004 19:16:25 -0000	1.7
  +++ ossp-pkg/cfg/cfg_util.c	10 Aug 2006 19:35:57 -0000	1.8
  @@ -1,8 +1,7 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2005 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2002-2005 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2006 The OSSP Project (http://www.ossp.org/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/cfg_util.h
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 cfg_util.h
  --- ossp-pkg/cfg/cfg_util.h	31 Dec 2004 19:16:25 -0000	1.6
  +++ ossp-pkg/cfg/cfg_util.h	10 Aug 2006 19:35:57 -0000	1.7
  @@ -1,8 +1,7 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2005 The OSSP Project (http://www.ossp.org/)
  -**  Copyright (c) 2003-2005 Cable & Wireless (http://www.cw.com/)
  +**  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2006 The OSSP Project (http://www.ossp.org/)
   **
   **  This file is part of OSSP cfg, a configuration parsing
   **  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/configure.ac
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 configure.ac
  --- ossp-pkg/cfg/configure.ac	18 Feb 2005 10:05:35 -0000	1.16
  +++ ossp-pkg/cfg/configure.ac	10 Aug 2006 19:35:57 -0000	1.17
  @@ -1,8 +1,7 @@
   dnl ##
   dnl ##  OSSP cfg - Configuration Parsing
  -dnl ##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +dnl ##  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2006 The OSSP Project <http://www.ossp.org/>
   dnl ##
   dnl ##  This file is part of OSSP cfg, a configuration parsing library which
   dnl ##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/devtool
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 devtool
  --- ossp-pkg/cfg/devtool	31 Dec 2004 19:16:25 -0000	1.4
  +++ ossp-pkg/cfg/devtool	10 Aug 2006 19:35:57 -0000	1.5
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  devtool -- Development Tool
  -##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2006 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   if [ $# -eq 0 ]; then
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 devtool.conf
  --- ossp-pkg/cfg/devtool.conf	1 Aug 2006 20:15:23 -0000	1.27
  +++ ossp-pkg/cfg/devtool.conf	10 Aug 2006 19:35:57 -0000	1.28
  @@ -1,8 +1,7 @@
   ##
   ##  OSSP cfg - Configuration Parsing
  -##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2006 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP cfg, a configuration parsing library which
   ##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/devtool.func
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 devtool.func
  --- ossp-pkg/cfg/devtool.func	31 Dec 2004 19:16:25 -0000	1.6
  +++ ossp-pkg/cfg/devtool.func	10 Aug 2006 19:35:57 -0000	1.7
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2006 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   devtool_require () {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/Makefile.PL
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 Makefile.PL
  --- ossp-pkg/cfg/perl/Makefile.PL	31 Dec 2004 19:16:34 -0000	1.2
  +++ ossp-pkg/cfg/perl/Makefile.PL	10 Aug 2006 19:36:00 -0000	1.3
  @@ -1,8 +1,7 @@
   ##
   ##  OSSP cfg - Configuration Parsing
  -##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2006 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP cfg, a configuration parsing library which
   ##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/cfg.pm
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 cfg.pm
  --- ossp-pkg/cfg/perl/cfg.pm	10 Aug 2006 19:32:57 -0000	1.16
  +++ ossp-pkg/cfg/perl/cfg.pm	10 Aug 2006 19:36:00 -0000	1.17
  @@ -1,8 +1,7 @@
   ##
   ##  OSSP cfg - Configuration Parsing
  -##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2006 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP cfg, a configuration parsing library which
   ##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/cfg.pod
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 cfg.pod
  --- ossp-pkg/cfg/perl/cfg.pod	31 Dec 2004 19:16:34 -0000	1.6
  +++ ossp-pkg/cfg/perl/cfg.pod	10 Aug 2006 19:36:00 -0000	1.7
  @@ -1,8 +1,7 @@
   ##
   ##  OSSP cfg - Configuration Parsing
  -##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2006 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP cfg, a configuration parsing library which
   ##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/cfg.tm
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 cfg.tm
  --- ossp-pkg/cfg/perl/cfg.tm	31 Dec 2004 19:16:34 -0000	1.2
  +++ ossp-pkg/cfg/perl/cfg.tm	10 Aug 2006 19:36:00 -0000	1.3
  @@ -1,8 +1,7 @@
   ##
   ##  OSSP cfg - Configuration Parsing
  -##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2006 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP cfg, a configuration parsing library which
   ##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/cfg.ts
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 cfg.ts
  --- ossp-pkg/cfg/perl/cfg.ts	31 Dec 2004 19:16:34 -0000	1.3
  +++ ossp-pkg/cfg/perl/cfg.ts	10 Aug 2006 19:36:00 -0000	1.4
  @@ -1,8 +1,7 @@
   ##
   ##  OSSP cfg - Configuration Parsing
  -##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2006 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP cfg, a configuration parsing library which
   ##  can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/perl/cfg.xs
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 cfg.xs
  --- ossp-pkg/cfg/perl/cfg.xs	31 Dec 2004 19:16:34 -0000	1.8
  +++ ossp-pkg/cfg/perl/cfg.xs	10 Aug 2006 19:36:00 -0000	1.9
  @@ -1,8 +1,7 @@
   /*
   **  OSSP cfg - Configuration Parsing
  -**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2006 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP cfg, a configuration parsing library which
   **  can be found at http://www.ossp.org/pkg/lib/cfg/.
  @@ .

From ossp-cvs-owner@ossp.org  Thu Aug 10 21:41:52 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 7C17D7529C3; Thu, 10 Aug 2006 21:41:52 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/cfg/ index.wml oss...
Message-Id: <20060810194152.7C17D7529C3@mail.ossp.org>
Date: Thu, 10 Aug 2006 21:41:52 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   10-Aug-2006 21:41:52
  Branch: HEAD                             Handle: 2006081020415101

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/cfg    index.wml

  Log:
    release OSSP cfg 0.9.11

  Summary:
    Revision    Changes     Path
    1.162       +1  -0      ossp-web/new/news.txt
    1.17        +2  -2      ossp-web/pkg/lib/cfg/index.wml
    1.132       +1  -1      ossp-web/pkg/lib/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.161 -r1.162 news.txt
  --- ossp-web/new/news.txt	10 Aug 2006 19:11:39 -0000	1.161
  +++ ossp-web/new/news.txt	10 Aug 2006 19:41:51 -0000	1.162
  @@ -1,3 +1,4 @@
  +10-Aug-2006: Released L<OSSP cfg> 0.9.11
   10-Aug-2006: Released L<OSSP mm> 1.4.1
   03-Aug-2006: Released L<OSSP js> 1.6.20060803
   31-Jul-2006: Released L<OSSP js> 1.6.20060731
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/cfg/index.wml
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 index.wml
  --- ossp-web/pkg/lib/cfg/index.wml	3 Oct 2005 09:39:09 -0000	1.16
  +++ ossp-web/pkg/lib/cfg/index.wml	10 Aug 2006 19:41:52 -0000	1.17
  @@ -36,7 +36,7 @@
   <pkg_status
       name="cfg" assign="rse"
       stable="none"    stable_date="none"
  -    unstable="0.9.10" unstable_date="03-Oct-2005"
  +    unstable="0.9.11" unstable_date="10-Aug-2006"
   	done=95>
   
   <h2>Source</h2>
  @@ -46,7 +46,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/cfg/
       directory=$(FTP_ROOT_DIR)/pkg/lib/cfg/
       files="cfg-*.tar.gz" 
  -	stable="none" unstable="cfg-0.9.10.tar.gz">
  +	stable="none" unstable="cfg-0.9.11.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.131 -r1.132 index.wml
  --- ossp-web/pkg/lib/index.wml	10 Aug 2006 19:11:39 -0000	1.131
  +++ ossp-web/pkg/lib/index.wml	10 Aug 2006 19:41:51 -0000	1.132
  @@ -57,7 +57,7 @@
   			done=95 stable=none unstable=0.9.3>
     <pkg_item name="cfg" longname="OSSP cfg" type="lib"
               desc="Configuration Parsing"
  -			done=95 stable=none unstable=0.9.10>
  +			done=95 stable=none unstable=0.9.11>
     <pkg_item name="act" longname="OSSP act" type="lib"
               desc="Abstract Container Types"
   			done=25 stable=none unstable=none>
  @@ .

From ossp-cvs-owner@ossp.org  Thu Aug 10 21:49:34 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 9D501752A08; Thu, 10 Aug 2006 21:49:34 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex/ ChangeLog Makefile.in README VERSION aclocal....
Message-Id: <20060810194934.9D501752A08@mail.ossp.org>
Date: Thu, 10 Aug 2006 21:49:34 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Aug-2006 21:49:34
  Branch: HEAD                             Handle: 2006081020493300

  Modified files:
    ossp-pkg/ex             ChangeLog Makefile.in README VERSION aclocal.m4
                            configure.ac devtool.conf ex-config.in ex.c ex.h
                            ex.pod ex_test.c ts.c ts.h

  Log:
    cleanup source tree

  Summary:
    Revision    Changes     Path
    1.16        +11 -0      ossp-pkg/ex/ChangeLog
    1.11        +3  -3      ossp-pkg/ex/Makefile.in
    1.17        +3  -4      ossp-pkg/ex/README
    1.10        +1  -1      ossp-pkg/ex/VERSION
    1.9         +2  -3      ossp-pkg/ex/aclocal.m4
    1.11        +2  -3      ossp-pkg/ex/configure.ac
    1.15        +4  -4      ossp-pkg/ex/devtool.conf
    1.8         +3  -3      ossp-pkg/ex/ex-config.in
    1.12        +2  -3      ossp-pkg/ex/ex.c
    1.27        +2  -3      ossp-pkg/ex/ex.h
    1.32        +2  -3      ossp-pkg/ex/ex.pod
    1.15        +2  -3      ossp-pkg/ex/ex_test.c
    1.10        +2  -3      ossp-pkg/ex/ts.c
    1.7         +2  -3      ossp-pkg/ex/ts.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 ChangeLog
  --- ossp-pkg/ex/ChangeLog	2 Oct 2005 16:31:49 -0000	1.15
  +++ ossp-pkg/ex/ChangeLog	10 Aug 2006 19:49:33 -0000	1.16
  @@ -11,6 +11,17 @@
   
     This is the list of all changes to the OSSP ex source tree.
   
  +  Changes between 1.0.5 and 1.0.6 (02-Oct-2005 to XX-xxx-2006)
  +
  +   *) ...
  +
  +   *) Upgrade build environment to GNU shtool 2.0.6,
  +      GNU libtool 1.5.22 and GNU autoconf 2.60.
  +      [Ralf S. Engelschall]
  +
  +   *) Adjusted copyright messages to include new year 2006.
  +      [Ralf S. Engelschall]
  +
     Changes between 1.0.4 and 1.0.5 (05-Apr-2004 to 02-Oct-2005)
   
      *) Upgrade build environment to GNU libtool 1.5.20 and
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 Makefile.in
  --- ossp-pkg/ex/Makefile.in	30 Jan 2005 13:39:07 -0000	1.10
  +++ ossp-pkg/ex/Makefile.in	10 Aug 2006 19:49:33 -0000	1.11
  @@ -1,8 +1,7 @@
   ##
   ##  OSSP ex - Exception Handling
  -##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2006 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP ex, an exception handling library
   ##  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ -33,6 +32,7 @@
   DESTDIR     =
   prefix      = @prefix@
   exec_prefix = @exec_prefix@
  +datarootdir = @datarootdir@
   bindir      = @bindir@
   libdir      = @libdir@
   includedir  = @includedir@
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/README
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 README
  --- ossp-pkg/ex/README	2 Oct 2005 16:31:49 -0000	1.16
  +++ ossp-pkg/ex/README	10 Aug 2006 19:49:33 -0000	1.17
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     \___/_/\_\
   
     OSSP ex - Exception Handling
  -  Version 1.0.5 (02-Oct-2005)
  +  Version 1.0.6 (10-Aug-2006)
   
     ABSTRACT
   
  @@ -31,9 +31,8 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  -  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2002-2006 The OSSP Project <http://www.ossp.org/>
   
     This file is part of OSSP ex, an exception handling library which
     can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/VERSION
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 VERSION
  --- ossp-pkg/ex/VERSION	2 Oct 2005 16:31:49 -0000	1.9
  +++ ossp-pkg/ex/VERSION	10 Aug 2006 19:49:33 -0000	1.10
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP ex (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP ex, Version 1.0.5 (02-Oct-2005)
  +  This is OSSP ex, Version 1.0.6 (10-Aug-2006)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 aclocal.m4
  --- ossp-pkg/ex/aclocal.m4	30 Jan 2005 13:41:11 -0000	1.8
  +++ ossp-pkg/ex/aclocal.m4	10 Aug 2006 19:49:33 -0000	1.9
  @@ -1,8 +1,7 @@
   dnl ##
   dnl ##  OSSP ex - Exception Handling
  -dnl ##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +dnl ##  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2006 The OSSP Project <http://www.ossp.org/>
   dnl ##
   dnl ##  This file is part of OSSP ex, an exception handling library
   dnl ##  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/configure.ac
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 configure.ac
  --- ossp-pkg/ex/configure.ac	30 Jan 2005 13:39:07 -0000	1.10
  +++ ossp-pkg/ex/configure.ac	10 Aug 2006 19:49:33 -0000	1.11
  @@ -1,8 +1,7 @@
   dnl ##
   dnl ##  OSSP ex - Exception Handling
  -dnl ##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  -dnl ##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +dnl ##  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2006 The OSSP Project <http://www.ossp.org/>
   dnl ##
   dnl ##  This file is part of OSSP ex, an exception handling library
   dnl ##  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 devtool.conf
  --- ossp-pkg/ex/devtool.conf	2 Oct 2005 16:31:50 -0000	1.14
  +++ ossp-pkg/ex/devtool.conf	10 Aug 2006 19:49:33 -0000	1.15
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   2.0.3  "2.0.*" all
  -    @autogen libtool  1.5.20 "1.5*"
  -    @autogen autoconf 2.59   "2.5[4-9]*"
  +    @autogen shtool   2.0.6  "2.0.*" all
  +    @autogen libtool  1.5.22 "1.5*"
  +    @autogen autoconf 2.60   "2.6[0-9]*"
   
   %autoclean
       @autoclean shtool
  @@ -47,5 +47,5 @@
   
   %release
       echo "+++ copying to ftp://ftp.ossp.org/pkg/lib/ex/"
  -    scp ex-*.tar.gz master.ossp.org:/e/ossp/ftp/pkg/lib/ex/
  +    scp ex-*.tar.gz ossp@master.ossp.org:/v/ossp/ftp/pkg/lib/ex/
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ex-config.in
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 ex-config.in
  --- ossp-pkg/ex/ex-config.in	30 Jan 2005 13:39:07 -0000	1.7
  +++ ossp-pkg/ex/ex-config.in	10 Aug 2006 19:49:33 -0000	1.8
  @@ -1,9 +1,8 @@
   #!/bin/sh
   ##
   ##  OSSP ex - Exception Handling
  -##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2006 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP ex, an exception handling library
   ##  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ -42,6 +41,7 @@
   #   build paths
   prefix="@prefix@"
   exec_prefix="@exec_prefix@"
  +datarootdir="@datarootdir@"
   bindir="@bindir@"
   libdir="@libdir@"
   includedir="@includedir@"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ex.c
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 ex.c
  --- ossp-pkg/ex/ex.c	30 Jan 2005 13:39:07 -0000	1.11
  +++ ossp-pkg/ex/ex.c	10 Aug 2006 19:49:33 -0000	1.12
  @@ -1,8 +1,7 @@
   /*
   **  OSSP ex - Exception Handling
  -**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2006 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP ex, an exception handling library
   **  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ex.h
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 ex.h
  --- ossp-pkg/ex/ex.h	30 Jan 2005 13:39:07 -0000	1.26
  +++ ossp-pkg/ex/ex.h	10 Aug 2006 19:49:33 -0000	1.27
  @@ -1,8 +1,7 @@
   /*
   **  OSSP ex - Exception Handling
  -**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2006 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP ex, an exception handling library
   **  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ex.pod
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 ex.pod
  --- ossp-pkg/ex/ex.pod	30 Jan 2005 13:58:18 -0000	1.31
  +++ ossp-pkg/ex/ex.pod	10 Aug 2006 19:49:33 -0000	1.32
  @@ -1,8 +1,7 @@
   ##
   ##  OSSP ex - Exception Handling
  -##  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +##  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2006 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP ex, an exception library
   ##  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ex_test.c
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 ex_test.c
  --- ossp-pkg/ex/ex_test.c	30 Jan 2005 13:39:07 -0000	1.14
  +++ ossp-pkg/ex/ex_test.c	10 Aug 2006 19:49:33 -0000	1.15
  @@ -1,8 +1,7 @@
   /*
   **  OSSP ex - Exception Handling
  -**  Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2006 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP ex, an exception handling library
   **  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ts.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 ts.c
  --- ossp-pkg/ex/ts.c	30 Jan 2005 13:41:11 -0000	1.9
  +++ ossp-pkg/ex/ts.c	10 Aug 2006 19:49:33 -0000	1.10
  @@ -1,8 +1,7 @@
   /*
   **  OSSP ts - Test Suite Library
  -**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2006 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP ts, a small test suite library which
   **  can be found at http://www.ossp.org/pkg/lib/ts/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ts.h
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ts.h
  --- ossp-pkg/ex/ts.h	30 Jan 2005 13:39:07 -0000	1.6
  +++ ossp-pkg/ex/ts.h	10 Aug 2006 19:49:33 -0000	1.7
  @@ -1,8 +1,7 @@
   /*
   **  OSSP ts - Test Suite Library
  -**  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
  -**  Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
  +**  Copyright (c) 2001-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2006 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP ts, a small test suite library which
   **  can be found at http://www.ossp.org/pkg/lib/ts/.
  @@ .

From ossp-cvs-owner@ossp.org  Thu Aug 10 21:55:51 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 60B327529C3; Thu, 10 Aug 2006 21:55:51 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ Makefile.in js-config.sh.in
Message-Id: <20060810195551.60B327529C3@mail.ossp.org>
Date: Thu, 10 Aug 2006 21:55:51 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Aug-2006 21:55:51
  Branch: HEAD                             Handle: 2006081020555100

  Modified files:
    ossp-pkg/js             Makefile.in js-config.sh.in

  Log:
    move to exec_prefix area

  Summary:
    Revision    Changes     Path
    1.28        +1  -1      ossp-pkg/js/Makefile.in
    1.3         +1  -1      ossp-pkg/js/js-config.sh.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 Makefile.in
  --- ossp-pkg/js/Makefile.in	3 Aug 2006 13:19:20 -0000	1.27
  +++ ossp-pkg/js/Makefile.in	10 Aug 2006 19:55:51 -0000	1.28
  @@ -35,11 +35,11 @@
   DESTDIR      =
   prefix       = @prefix@
   exec_prefix  = @exec_prefix@
  +datarootdir  = @datarootdir@
   bindir       = @bindir@
   libdir       = @libdir@
   includedir   = @includedir@
   mandir       = @mandir@
  -datarootdir  = @datarootdir@
   
   CC           = @CC@
   CPPFLAGS     = @CPPFLAGS@ @DEFS@ -Isrc
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/js-config.sh.in
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 js-config.sh.in
  --- ossp-pkg/js/js-config.sh.in	24 Jul 2006 19:53:00 -0000	1.2
  +++ ossp-pkg/js/js-config.sh.in	10 Aug 2006 19:55:51 -0000	1.3
  @@ -35,11 +35,11 @@
   
   js_prefix="$prefix"
   js_exec_prefix="$exec_prefix"
  +js_datarootdir="@datarootdir@"
   js_bindir="@bindir@"
   js_libdir="@libdir@"
   js_includedir="@includedir@"
   js_mandir="@mandir@"
  -js_datarootdir="@datarootdir@"
   js_datadir="@datadir@"
   js_acdir="@datadir@/aclocal"
   js_libs="@LIBS@"
  @@ .

From ossp-cvs-owner@ossp.org  Tue Aug 15 08:58:12 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 0127F7528AE; Tue, 15 Aug 2006 08:58:11 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm/ ChangeLog mm.pod
Message-Id: <20060815065812.0127F7528AE@mail.ossp.org>
Date: Tue, 15 Aug 2006 08:58:11 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Aug-2006 08:58:11
  Branch: HEAD                             Handle: 2006081507581100

  Modified files:
    ossp-pkg/mm             ChangeLog mm.pod

  Log:
    Remove a trailing whitespace in mm.pod which
    confused pod2html(1) and generated bad output.
    
    Submitted by: Neil Conway <neilc@samurai.com>

  Summary:
    Revision    Changes     Path
    1.58        +6  -0      ossp-pkg/mm/ChangeLog
    1.31        +1  -1      ossp-pkg/mm/mm.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.57 -r1.58 ChangeLog
  --- ossp-pkg/mm/ChangeLog	10 Aug 2006 18:59:04 -0000	1.57
  +++ ossp-pkg/mm/ChangeLog	15 Aug 2006 06:58:11 -0000	1.58
  @@ -9,6 +9,12 @@
    ChangeLog
    =========
   
  + Changes between 1.4.1 and 1.4.2 (10-Aug-2006 to 15-Aug-2006)
  +
  +  *) Remove a trailing whitespace in mm.pod which
  +     confused pod2html(1) and generated bad output.
  +     [Neil Conway <neilc@samurai.com>]
  +
    Changes between 1.4.0 and 1.4.1 (02-Sep-2005 to 10-Aug-2006)
   
     *) Add new API function MM_reset() and mm_reset().
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm.pod
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 mm.pod
  --- ossp-pkg/mm/mm.pod	10 Aug 2006 19:00:33 -0000	1.30
  +++ ossp-pkg/mm/mm.pod	15 Aug 2006 06:58:11 -0000	1.31
  @@ -314,7 +314,7 @@
   This resets the global shared memory pool: all chunks that have been
   allocated in the pool are marked as free and are eligible for reuse. The
   global memory pool itself is not destroyed.
  - 
  +
   =item void B<MM_destroy>(void);
   
   This destroys the global shared memory pool and should be called I<after> all
  @@ .

From ossp-cvs-owner@ossp.org  Tue Aug 15 09:04:23 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 6DA28752870; Tue, 15 Aug 2006 09:04:22 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm/ README mm_vers.c
Message-Id: <20060815070422.6DA28752870@mail.ossp.org>
Date: Tue, 15 Aug 2006 09:04:22 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-Aug-2006 09:04:22
  Branch: HEAD                             Handle: 2006081508041902

  Modified files:
    ossp-pkg/mm             README mm_vers.c

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.85        +1  -1      ossp-pkg/mm/README
    1.46        +9  -9      ossp-pkg/mm/mm_vers.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/README
  ============================================================================
  $ cvs diff -u -r1.84 -r1.85 README
  --- ossp-pkg/mm/README	10 Aug 2006 19:08:06 -0000	1.84
  +++ ossp-pkg/mm/README	15 Aug 2006 07:04:19 -0000	1.85
  @@ -7,7 +7,7 @@
     OSSP mm - Shared Memory Allocation
     Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
     Copyright (c) 1999-2006 The OSSP Project <http://www.ossp.org/>
  -  Version 1.4.1 (10-Aug-2006)
  +  Version 1.4.2 (15-Aug-2006)
   
     OSSP mm is a 2-layer abstraction library which simplifies the usage of
     shared memory between forked (and this way strongly related) processes
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm_vers.c
  ============================================================================
  $ cvs diff -u -r1.45 -r1.46 mm_vers.c
  --- ossp-pkg/mm/mm_vers.c	10 Aug 2006 19:08:06 -0000	1.45
  +++ ossp-pkg/mm/mm_vers.c	15 Aug 2006 07:04:21 -0000	1.46
  @@ -8,7 +8,7 @@
   #ifndef _MM_VERS_C_
   #define _MM_VERS_C_
   
  -#define MM_VERSION 0x104201
  +#define MM_VERSION 0x104202
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _MM_VERS_C_AS_HEADER_
   
   mm_version_t mm_version = {
  -    0x104201,
  -    "1.4.1",
  -    "1.4.1 (10-Aug-2006)",
  -    "This is OSSP mm, Version 1.4.1 (10-Aug-2006)",
  -    "OSSP mm 1.4.1 (10-Aug-2006)",
  -    "OSSP mm/1.4.1",
  -    "@(#)OSSP mm 1.4.1 (10-Aug-2006)",
  -    "$Id: OSSP mm 1.4.1 (10-Aug-2006) $"
  +    0x104202,
  +    "1.4.2",
  +    "1.4.2 (15-Aug-2006)",
  +    "This is OSSP mm, Version 1.4.2 (15-Aug-2006)",
  +    "OSSP mm 1.4.2 (15-Aug-2006)",
  +    "OSSP mm/1.4.2",
  +    "@(#)OSSP mm 1.4.2 (15-Aug-2006)",
  +    "$Id: OSSP mm 1.4.2 (15-Aug-2006) $"
   };
   
   #endif /* _MM_VERS_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Tue Aug 15 09:07:36 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B4BA47528D0; Tue, 15 Aug 2006 09:07:36 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20060815070736.B4BA47528D0@mail.ossp.org>
Date: Tue, 15 Aug 2006 09:07:36 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   15-Aug-2006 09:07:36
  Branch: HEAD                             Handle: 2006081508073501

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/mm     index.wml

  Log:
    release OSSP mm 1.4.2

  Summary:
    Revision    Changes     Path
    1.163       +1  -0      ossp-web/new/news.txt
    1.133       +1  -1      ossp-web/pkg/lib/index.wml
    1.15        +2  -2      ossp-web/pkg/lib/mm/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.162 -r1.163 news.txt
  --- ossp-web/new/news.txt	10 Aug 2006 19:41:51 -0000	1.162
  +++ ossp-web/new/news.txt	15 Aug 2006 07:07:35 -0000	1.163
  @@ -1,3 +1,4 @@
  +15-Aug-2006: Released L<OSSP mm> 1.4.2
   10-Aug-2006: Released L<OSSP cfg> 0.9.11
   10-Aug-2006: Released L<OSSP mm> 1.4.1
   03-Aug-2006: Released L<OSSP js> 1.6.20060803
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.132 -r1.133 index.wml
  --- ossp-web/pkg/lib/index.wml	10 Aug 2006 19:41:51 -0000	1.132
  +++ ossp-web/pkg/lib/index.wml	15 Aug 2006 07:07:35 -0000	1.133
  @@ -18,7 +18,7 @@
   			done=100 stable=2.0.7 unstable=none>
     <pkg_item name="mm" longname="OSSP mm" type="lib"
               desc="Shared Memory Allocation"
  -			done=100 stable=1.4.1 unstable=none>
  +			done=100 stable=1.4.2 unstable=none>
     <pkg_item name="ex" longname="OSSP ex" type="lib"
               desc="Exception Handling"
   			done=100 stable=1.0.5 unstable=none>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/mm/index.wml
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 index.wml
  --- ossp-web/pkg/lib/mm/index.wml	10 Aug 2006 19:11:40 -0000	1.14
  +++ ossp-web/pkg/lib/mm/index.wml	15 Aug 2006 07:07:36 -0000	1.15
  @@ -30,7 +30,7 @@
   <pkg_status
       name="mm" assign="rse"
   	genesis="Mar-1999"
  -    stable="1.4.1"   stable_date="10-Aug-2006"
  +    stable="1.4.2"   stable_date="15-Aug-2006"
       unstable="none"  unstable_date="none"
   	done=100>
   
  @@ -41,7 +41,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/mm/
       directory=$(FTP_ROOT_DIR)/pkg/lib/mm/
       files="mm-*.tar.gz" 
  -	stable="mm-1.4.1.tar.gz" unstable="none">
  +	stable="mm-1.4.2.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Aug 20 17:45:13 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 8252775282B; Sun, 20 Aug 2006 17:45:13 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ ChangeLog configure.ac
Message-Id: <20060820154513.8252775282B@mail.ossp.org>
Date: Sun, 20 Aug 2006 17:45:13 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Aug-2006 17:45:13
  Branch: HEAD                             Handle: 2006082016451300

  Modified files:
    ossp-pkg/js             ChangeLog configure.ac

  Log:
    Add support for UTF-8 C strings in the API and internally by
    adding a --with-utf8 build-time options which builds the code
    with JS_C_STRINGS_ARE_UTF8.

  Summary:
    Revision    Changes     Path
    1.31        +7  -0      ossp-pkg/js/ChangeLog
    1.20        +9  -0      ossp-pkg/js/configure.ac
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 ChangeLog
  --- ossp-pkg/js/ChangeLog	3 Aug 2006 13:25:31 -0000	1.30
  +++ ossp-pkg/js/ChangeLog	20 Aug 2006 15:45:13 -0000	1.31
  @@ -11,6 +11,13 @@
   
     This is a list of all changes to OSSP js.
   
  +  Changes between 1.6.20060803 and 1.6.20060820 (2006-08-03 to 2006-08-20)
  +
  +   o Add support for UTF-8 C strings in the API and internally by
  +     adding a --with-utf8 build-time options which builds the code
  +     with JS_C_STRINGS_ARE_UTF8.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
     Changes between 1.6.20060731 and 1.6.20060803 (2006-07-31 to 2006-08-03)
   
      o Add optional Dynamic Shared Object (DSO) support (see src/jsdso.[ch]).
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/configure.ac
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 configure.ac
  --- ossp-pkg/js/configure.ac	3 Aug 2006 13:19:20 -0000	1.19
  +++ ossp-pkg/js/configure.ac	20 Aug 2006 15:45:13 -0000	1.20
  @@ -151,6 +151,15 @@
       CLI_LDFLAGS="$CLI_LDFLAGS -export-dynamic"
   fi
   
  +dnl #   configure option --with-utf8
  +AC_ARG_WITH([utf8],
  +	AS_HELP_STRING([--with-utf8], [build with exclusive UTF-8 C strings (uses Unicode UTF-8 encoded C strings only)]),
  +	[ac_cv_with_utf8=$withval], [ac_cv_with_utf8=no])
  +AC_CACHE_CHECK([whether to build with exclusive UTF-8 C string], [ac_cv_with_utf8], [ac_cv_with_utf8=no])
  +if test ".$ac_cv_with_utf8" = ".yes"; then
  +    CPPFLAGS="$CPPFLAGS -DJS_C_STRINGS_ARE_UTF8"
  +fi
  +
   AC_SUBST(CLI_CFLAGS)
   AC_SUBST(CLI_CPPFLAGS)
   AC_SUBST(CLI_LDFLAGS)
  @@ .

From ossp-cvs-owner@ossp.org  Sun Aug 20 17:50:42 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 08EE9752853; Sun, 20 Aug 2006 17:50:42 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: MOZILLA: ossp-pkg/js/src/ .cvsignore Makefile.in Makefile....
Message-Id: <20060820155042.08EE9752853@mail.ossp.org>
Date: Sun, 20 Aug 2006 17:50:42 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Aug-2006 17:50:42
  Branch: MOZILLA                          Handle: -NONE-

  Touched files:            (Branch: MOZILLA)
    ossp-pkg/js/src         .cvsignore Makefile.in Makefile.ref README.html
                            SpiderMonkey.rsp config.mk js.c js.mak js.mdp
                            js.msg js.pkg js3240.rc jsOS240.def jsapi.c
                            jsapi.h jsarena.c jsarena.h jsarray.c jsarray.h
                            jsatom.c jsatom.h jsbit.h jsbool.c jsbool.h
                            jsclist.h jscntxt.c jscntxt.h jscompat.h
                            jsconfig.h jsconfig.mk jscpucfg.c jscpucfg.h
                            jsdate.c jsdate.h jsdbgapi.c jsdbgapi.h jsdhash.c
                            jsdhash.h jsdtoa.c jsdtoa.h jsemit.c jsemit.h
                            jsexn.c jsexn.h jsfile.c jsfile.h jsfile.msg
                            jsfun.c jsfun.h jsgc.c jsgc.h jshash.h jsify.pl
                            jsinterp.c jsinterp.h jslibmath.h jslock.c
                            jslock.h jslocko.asm jslog2.c jslong.c jslong.h
                            jsmath.c jsmath.h jsnum.c jsnum.h jsobj.c jsobj.h
                            jsopcode.c jsopcode.h jsopcode.tbl jsosdep.h
                            jsotypes.h jsparse.c jsparse.h jsprf.c jsprf.h
                            jsprvtd.h jspubtd.h jsregexp.c jsregexp.h jsscan.c
                            jsscan.h jsscope.c jsscope.h jsscript.c jsscript.h
                            jsshell.msg jsstddef.h jsstr.c jsstr.h jstypes.h
                            jsutil.c jsutil.h jsxdrapi.c jsxdrapi.h jsxml.c
                            jsxml.h lock_SunOS.s perfect.js plify_jsdhash.sed
                            prmjtime.c prmjtime.h resource.h rules.mk
                            win32.order
    ossp-pkg/js/src/config  AIX4.1.mk AIX4.2.mk AIX4.3.mk Darwin.mk
                            Darwin1.3.mk Darwin1.4.mk Darwin5.2.mk
                            Darwin5.3.mk HP-UXB.10.10.mk HP-UXB.10.20.mk
                            HP-UXB.11.00.mk IRIX.mk IRIX5.3.mk IRIX6.1.mk
                            IRIX6.2.mk IRIX6.3.mk IRIX6.5.mk Linux_All.mk
                            Mac_OS10.0.mk OSF1V4.0.mk OSF1V5.0.mk
                            SunOS4.1.4.mk SunOS5.3.mk SunOS5.4.mk
                            SunOS5.5.1.mk SunOS5.5.mk SunOS5.6.mk SunOS5.7.mk
                            SunOS5.8.mk SunOS5.9.mk WINNT4.0.mk WINNT5.0.mk
                            WINNT5.1.mk WINNT5.2.mk dgux.mk
    ossp-pkg/js/src/editline
                            Makefile.ref README editline.3 editline.c
                            editline.h sysunix.c unix.h
    ossp-pkg/js/src/fdlibm  .cvsignore Makefile.in Makefile.ref e_acos.c
                            e_acosh.c e_asin.c e_atan2.c e_atanh.c e_cosh.c
                            e_exp.c e_fmod.c e_gamma.c e_gamma_r.c e_hypot.c
                            e_j0.c e_j1.c e_jn.c e_lgamma.c e_lgamma_r.c
                            e_log.c e_log10.c e_pow.c e_rem_pio2.c
                            e_remainder.c e_scalb.c e_sinh.c e_sqrt.c fdlibm.h
                            fdlibm.mak fdlibm.mdp k_cos.c k_rem_pio2.c k_sin.c
                            k_standard.c k_tan.c s_asinh.c s_atan.c s_cbrt.c
                            s_ceil.c s_copysign.c s_cos.c s_erf.c s_expm1.c
                            s_fabs.c s_finite.c s_floor.c s_frexp.c s_ilogb.c
                            s_isnan.c s_ldexp.c s_lib_version.c s_log1p.c
                            s_logb.c s_matherr.c s_modf.c s_nextafter.c
                            s_rint.c s_scalbn.c s_signgam.c s_significand.c
                            s_sin.c s_tan.c s_tanh.c w_acos.c w_acosh.c
                            w_asin.c w_atan2.c w_atanh.c w_cosh.c w_exp.c
                            w_fmod.c w_gamma.c w_gamma_r.c w_hypot.c w_j0.c
                            w_j1.c w_jn.c w_lgamma.c w_lgamma_r.c w_log.c
                            w_log10.c w_pow.c w_remainder.c w_scalb.c w_sinh.c
                            w_sqrt.c
    ossp-pkg/js/src/perlconnect
                            .cvsignore JS.def JS.dsp JS.pm JS.xs Makefile.PL
                            Makefile.ref PerlConnect.dsp PerlConnect.dsw
                            PerlConnect.pm PerlConnectShell.dsp README.html
                            bg.jpg jsperl.c jsperl.h jsperlbuild.pl
                            jsperlpvt.h test.js test.pl typemap

  Log:
    Import new upstream version: Mozilla JavaScript (SpiderMonkey) 1.6 as of 2006-08-20
    
    [Release Tag: MOZILLA_JS_1_6_20060820]

  Summary:
    Revision    Changes     Path
  ____________________________________________________________________________

From ossp-cvs-owner@ossp.org  Sun Aug 20 17:51:55 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 048CE75282B; Sun, 20 Aug 2006 17:51:55 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ ChangeLog README VERSION ossp-pkg/js/src/ jsa...
Message-Id: <20060820155155.048CE75282B@mail.ossp.org>
Date: Sun, 20 Aug 2006 17:51:55 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Aug-2006 17:51:54
  Branch: HEAD                             Handle: 2006082016515400

  Modified files:
    ossp-pkg/js             ChangeLog README VERSION
    ossp-pkg/js/src         jsapi.c

  Log:
    Upgrade to upstream sources as of 2006-08-20.

  Summary:
    Revision    Changes     Path
    1.32        +3  -0      ossp-pkg/js/ChangeLog
    1.14        +1  -1      ossp-pkg/js/README
    1.8         +1  -1      ossp-pkg/js/VERSION
    1.15        +1  -1      ossp-pkg/js/src/jsapi.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 ChangeLog
  --- ossp-pkg/js/ChangeLog	20 Aug 2006 15:45:13 -0000	1.31
  +++ ossp-pkg/js/ChangeLog	20 Aug 2006 15:51:54 -0000	1.32
  @@ -18,6 +18,9 @@
        with JS_C_STRINGS_ARE_UTF8.
        [Ralf S. Engelschall <rse@engelschall.com>]
   
  +   o Upgrade to upstream sources as of 2006-08-20.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
     Changes between 1.6.20060731 and 1.6.20060803 (2006-07-31 to 2006-08-03)
   
      o Add optional Dynamic Shared Object (DSO) support (see src/jsdso.[ch]).
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/README
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 README
  --- ossp-pkg/js/README	3 Aug 2006 13:25:31 -0000	1.13
  +++ ossp-pkg/js/README	20 Aug 2006 15:51:54 -0000	1.14
  @@ -6,7 +6,7 @@
                                     |__/      
   
     OSSP js - Mozilla JavaScript Engine
  -  Version 1.6.20060803 (03-Aug-2006)
  +  Version 1.6.20060820 (20-Aug-2006)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/VERSION
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 VERSION
  --- ossp-pkg/js/VERSION	3 Aug 2006 13:25:32 -0000	1.7
  +++ ossp-pkg/js/VERSION	20 Aug 2006 15:51:54 -0000	1.8
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP js (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP js, Version 1.6.20060803 (03-Aug-2006)
  +  This is OSSP js, Version 1.6.20060820 (20-Aug-2006)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsapi.c
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 jsapi.c
  --- ossp-pkg/js/src/jsapi.c	3 Aug 2006 13:25:32 -0000	1.14
  +++ ossp-pkg/js/src/jsapi.c	20 Aug 2006 15:51:54 -0000	1.15
  @@ -1089,7 +1089,7 @@
   JS_GetImplementationVersion(void)
   {
   #ifdef OSSP
  -    return "JavaScript-C 1.6 pre-release 1 2006-04-04 (OSSP js 1.6.20060803)";
  +    return "JavaScript-C 1.6 pre-release 1 2006-04-04 (OSSP js 1.6.20060820)";
   #else
       return "JavaScript-C 1.6 pre-release 1 2006-04-04";
   #endif
  @@ .

From ossp-cvs-owner@ossp.org  Sun Aug 20 18:00:14 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B10A2752853; Sun, 20 Aug 2006 18:00:14 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20060820160014.B10A2752853@mail.ossp.org>
Date: Sun, 20 Aug 2006 18:00:14 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   20-Aug-2006 18:00:14
  Branch: HEAD                             Handle: 2006082017000606

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/js     index.wml

  Log:
    release OSSP js 1.6.20060820

  Summary:
    Revision    Changes     Path
    1.164       +1  -0      ossp-web/new/news.txt
    1.134       +1  -1      ossp-web/pkg/lib/index.wml
    1.9         +1  -1      ossp-web/pkg/lib/js/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.163 -r1.164 news.txt
  --- ossp-web/new/news.txt	15 Aug 2006 07:07:35 -0000	1.163
  +++ ossp-web/new/news.txt	20 Aug 2006 16:00:06 -0000	1.164
  @@ -1,3 +1,4 @@
  +20-Aug-2006: Released L<OSSP js> 1.6.20060820
   15-Aug-2006: Released L<OSSP mm> 1.4.2
   10-Aug-2006: Released L<OSSP cfg> 0.9.11
   10-Aug-2006: Released L<OSSP mm> 1.4.1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.133 -r1.134 index.wml
  --- ossp-web/pkg/lib/index.wml	15 Aug 2006 07:07:35 -0000	1.133
  +++ ossp-web/pkg/lib/index.wml	20 Aug 2006 16:00:08 -0000	1.134
  @@ -42,7 +42,7 @@
   			done=95 stable=none unstable=0.9.3>
     <pkg_item name="js" longname="OSSP js" type="lib"
               desc="Mozilla JavaScript Engine"
  -			done=100 stable=none unstable=1.6.20060803>
  +			done=100 stable=none unstable=1.6.20060820>
     <pkg_item name="str" longname="OSSP str" type="lib"
               desc="String Handling"
   			done=95 stable=none unstable=0.9.12>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/js/index.wml
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 index.wml
  --- ossp-web/pkg/lib/js/index.wml	3 Aug 2006 13:30:50 -0000	1.8
  +++ ossp-web/pkg/lib/js/index.wml	20 Aug 2006 16:00:12 -0000	1.9
  @@ -64,7 +64,7 @@
   <pkg_status
       name="js" assign="rse"
   	genesis="Jul-2006"
  -    stable="1.6.20060803" stable_date="03-Aug-2006"
  +    stable="1.6.20060820" stable_date="20-Aug-2006"
       unstable="none"       unstable_date="none"
   	done=100>
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Aug 23 11:13:24 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 5640175289E; Wed, 23 Aug 2006 11:13:24 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/path/ devtool.conf path_self.c
Message-Id: <20060823091324.5640175289E@mail.ossp.org>
Date: Wed, 23 Aug 2006 11:13:24 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Aug-2006 11:13:24
  Branch: HEAD                             Handle: 2006082310132400

  Modified files:
    ossp-pkg/path           devtool.conf path_self.c

  Log:
    implement some platform specifics after I got some hints on the
    FreeBSD mailing lists

  Summary:
    Revision    Changes     Path
    1.5         +3  -3      ossp-pkg/path/devtool.conf
    1.4         +34 -12     ossp-pkg/path/path_self.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/path/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 devtool.conf
  --- ossp-pkg/path/devtool.conf	16 Feb 2003 11:36:56 -0000	1.4
  +++ ossp-pkg/path/devtool.conf	23 Aug 2006 09:13:24 -0000	1.5
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   1.6.2 "1.6.*" all
  -    @autogen libtool  1.4.3 "1.4*"
  -    @autogen autoconf 2.57  "2.5.*"
  +    @autogen shtool   2.0.6  "2.0.*" all
  +    @autogen libtool  1.5.22 "1.5*"
  +    @autogen autoconf 2.60   "2.6*"
   
   %autoclean
       @autoclean shtool
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/path/path_self.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 path_self.c
  --- ossp-pkg/path/path_self.c	16 Feb 2003 11:39:23 -0000	1.3
  +++ ossp-pkg/path/path_self.c	23 Aug 2006 09:13:24 -0000	1.4
  @@ -32,6 +32,10 @@
   #include <string.h>
   #include <sys/types.h>
   #include <sys/stat.h>
  +#if defined(__FreeBSD__)
  +#include <sys/sysctl.h>
  +#include <limits.h>
  +#endif
   #include <unistd.h>
   
   #include "path.h"
  @@ -45,10 +49,40 @@
       struct stat sb;
       char *cpB, *cpE;
       size_t argv0_len;
  +#if defined(__FreeBSD__)
  +    int mib[4];
  +#endif
   
       if (res_buf == NULL || res_size == 0 || argv0 == NULL)
           return PATH_ERR_ARG;
   
  +#if defined(__FreeBSD__)
  +    /* retrieve path via sysctl(3) (FreeBSD only) */
  +    mib[0] = CTL_KERN;
  +    mib[1] = KERN_PROC;
  +    mib[2] = KERN_PROC_PATHNAME;
  +    mib[3] = -1;
  +    l = res_size - 1;
  +    if (sysctl(mib, 4, res_buf, &l, NULL, 0) == 0) {
  +        res_buf[l] = '\0';
  +        if (path_resolve(res_buf, res_size, res_buf) == NULL)
  +            return PATH_ERR_SYS;
  +    }
  +#endif
  +
  +    /* search for /proc entries (Linux only) */
  +    if ((l = readlink("/proc/self/exe" /* Linux */, res_buf, res_size-1)) == -1)
  +        if ((l = readlink("/proc/self/path/a.out" /* Solaris */, res_buf, res_size-1)) == -1)
  +            l = readlink("/proc/curproc/file" /* BSD */, res_buf, res_size-1);
  +    if (l > 0) {
  +        if (res_buf[l-1] == '\0')
  +           l--;
  +        res_buf[l] = '\0';
  +        if (strcmp(res_buf, "unknown") != 0)
  +            if (path_resolve(res_buf, res_size, res_buf) == NULL)
  +                return PATH_ERR_SYS;
  +    }
  +
       /* determine length of argv[0] */
       argv0_len = strlen(argv0);
   
  @@ -80,18 +114,6 @@
           return PATH_OK;
       }
   
  -    /* else search for /proc entries (at least possible under Linux and FreeBSD) */
  -    if ((l = readlink("/proc/self/exe", res_buf, res_size-1)) == -1)
  -        l = readlink("/proc/curproc/file", res_buf, res_size-1);
  -    if (l > 0) {
  -        if (res_buf[l-1] == '\0')
  -           l--;
  -        res_buf[l] = '\0';
  -        if (strcmp(res_buf, "unknown") != 0)
  -            if (path_resolve(res_buf, res_size, res_buf) == NULL)
  -                return PATH_ERR_SYS;
  -    }
  -
       /* else search argv[0] in $PATH */
       if ((path = getenv("PATH")) == NULL)
           path = PATH_DEFAULT;
  @@ .

From ossp-cvs-owner@ossp.org  Sat Sep 16 10:31:32 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 74E947528EB; Sat, 16 Sep 2006 10:31:32 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: MOZILLA: ossp-pkg/js/src/ .cvsignore Makefile.in Makefile....
Message-Id: <20060916083132.74E947528EB@mail.ossp.org>
Date: Sat, 16 Sep 2006 10:31:32 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Sep-2006 10:31:32
  Branch: MOZILLA                          Handle: -NONE-

  Touched files:            (Branch: MOZILLA)
    ossp-pkg/js/src         .cvsignore Makefile.in Makefile.ref README.html
                            SpiderMonkey.rsp config.mk js.c js.mak js.mdp
                            js.msg js.pkg js3240.rc jsOS240.def jsapi.c
                            jsapi.h jsarena.c jsarena.h jsarray.c jsarray.h
                            jsatom.c jsatom.h jsbit.h jsbool.c jsbool.h
                            jsclist.h jscntxt.c jscntxt.h jscompat.h
                            jsconfig.h jsconfig.mk jscpucfg.c jscpucfg.h
                            jsdate.c jsdate.h jsdbgapi.c jsdbgapi.h jsdhash.c
                            jsdhash.h jsdtoa.c jsdtoa.h jsemit.c jsemit.h
                            jsexn.c jsexn.h jsfile.c jsfile.h jsfile.msg
                            jsfun.c jsfun.h jsgc.c jsgc.h jshash.h jsify.pl
                            jsinterp.c jsinterp.h jslibmath.h jslock.c
                            jslock.h jslocko.asm jslog2.c jslong.c jslong.h
                            jsmath.c jsmath.h jsnum.c jsnum.h jsobj.c jsobj.h
                            jsopcode.c jsopcode.h jsopcode.tbl jsosdep.h
                            jsotypes.h jsparse.c jsparse.h jsprf.c jsprf.h
                            jsprvtd.h jspubtd.h jsregexp.c jsregexp.h jsscan.c
                            jsscan.h jsscope.c jsscope.h jsscript.c jsscript.h
                            jsshell.msg jsstddef.h jsstr.c jsstr.h jstypes.h
                            jsutil.c jsutil.h jsxdrapi.c jsxdrapi.h jsxml.c
                            jsxml.h lock_SunOS.s perfect.js plify_jsdhash.sed
                            prmjtime.c prmjtime.h resource.h rules.mk
                            win32.order
    ossp-pkg/js/src/config  AIX4.1.mk AIX4.2.mk AIX4.3.mk Darwin.mk
                            Darwin1.3.mk Darwin1.4.mk Darwin5.2.mk
                            Darwin5.3.mk HP-UXB.10.10.mk HP-UXB.10.20.mk
                            HP-UXB.11.00.mk IRIX.mk IRIX5.3.mk IRIX6.1.mk
                            IRIX6.2.mk IRIX6.3.mk IRIX6.5.mk Linux_All.mk
                            Mac_OS10.0.mk OSF1V4.0.mk OSF1V5.0.mk
                            SunOS4.1.4.mk SunOS5.3.mk SunOS5.4.mk
                            SunOS5.5.1.mk SunOS5.5.mk SunOS5.6.mk SunOS5.7.mk
                            SunOS5.8.mk SunOS5.9.mk WINNT4.0.mk WINNT5.0.mk
                            WINNT5.1.mk WINNT5.2.mk dgux.mk
    ossp-pkg/js/src/editline
                            Makefile.ref README editline.3 editline.c
                            editline.h sysunix.c unix.h
    ossp-pkg/js/src/fdlibm  .cvsignore Makefile.in Makefile.ref e_acos.c
                            e_acosh.c e_asin.c e_atan2.c e_atanh.c e_cosh.c
                            e_exp.c e_fmod.c e_gamma.c e_gamma_r.c e_hypot.c
                            e_j0.c e_j1.c e_jn.c e_lgamma.c e_lgamma_r.c
                            e_log.c e_log10.c e_pow.c e_rem_pio2.c
                            e_remainder.c e_scalb.c e_sinh.c e_sqrt.c fdlibm.h
                            fdlibm.mak fdlibm.mdp k_cos.c k_rem_pio2.c k_sin.c
                            k_standard.c k_tan.c s_asinh.c s_atan.c s_cbrt.c
                            s_ceil.c s_copysign.c s_cos.c s_erf.c s_expm1.c
                            s_fabs.c s_finite.c s_floor.c s_frexp.c s_ilogb.c
                            s_isnan.c s_ldexp.c s_lib_version.c s_log1p.c
                            s_logb.c s_matherr.c s_modf.c s_nextafter.c
                            s_rint.c s_scalbn.c s_signgam.c s_significand.c
                            s_sin.c s_tan.c s_tanh.c w_acos.c w_acosh.c
                            w_asin.c w_atan2.c w_atanh.c w_cosh.c w_exp.c
                            w_fmod.c w_gamma.c w_gamma_r.c w_hypot.c w_j0.c
                            w_j1.c w_jn.c w_lgamma.c w_lgamma_r.c w_log.c
                            w_log10.c w_pow.c w_remainder.c w_scalb.c w_sinh.c
                            w_sqrt.c
    ossp-pkg/js/src/perlconnect
                            .cvsignore JS.def JS.dsp JS.pm JS.xs Makefile.PL
                            Makefile.ref PerlConnect.dsp PerlConnect.dsw
                            PerlConnect.pm PerlConnectShell.dsp README.html
                            bg.jpg jsperl.c jsperl.h jsperlbuild.pl
                            jsperlpvt.h test.js test.pl typemap

  Log:
    Import new upstream version: Mozilla JavaScript (SpiderMonkey) 1.6 as of 2006-09-16
    
    [Release Tag: MOZILLA_JS_1_6_20060916]

  Summary:
    Revision    Changes     Path
  ____________________________________________________________________________

From ossp-cvs-owner@ossp.org  Sat Sep 16 10:32:24 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id A47F3752887; Sat, 16 Sep 2006 10:32:24 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ ChangeLog
Message-Id: <20060916083224.A47F3752887@mail.ossp.org>
Date: Sat, 16 Sep 2006 10:32:24 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Sep-2006 10:32:24
  Branch: HEAD                             Handle: 2006091609322400

  Modified files:
    ossp-pkg/js             ChangeLog

  Log:
    *** empty log message ***

  Summary:
    Revision    Changes     Path
    1.33        +5  -0      ossp-pkg/js/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 ChangeLog
  --- ossp-pkg/js/ChangeLog	20 Aug 2006 15:51:54 -0000	1.32
  +++ ossp-pkg/js/ChangeLog	16 Sep 2006 08:32:24 -0000	1.33
  @@ -11,6 +11,11 @@
   
     This is a list of all changes to OSSP js.
   
  +  Changes between 1.6.20060820 and 1.6.20060916 (2006-08-20 to 2006-09-16)
  +
  +   o Upgrade to upstream sources as of 2006-09-16.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
     Changes between 1.6.20060803 and 1.6.20060820 (2006-08-03 to 2006-08-20)
   
      o Add support for UTF-8 C strings in the API and internally by
  @@ .

From ossp-cvs-owner@ossp.org  Fri Sep 29 08:13:18 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 56543752843; Fri, 29 Sep 2006 08:13:18 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog sh.echo
Message-Id: <20060929061318.56543752843@mail.ossp.org>
Date: Fri, 29 Sep 2006 08:13:18 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Sep-2006 08:13:17
  Branch: HEAD                             Handle: 2006092907131601

  Modified files:
    ossp-pkg/shtool         ChangeLog sh.echo

  Log:
    Fix and enhance "shtool echo -e" command by adding a missing
    line-continuation and adding support for MacOS X via nidump(8).

  Summary:
    Revision    Changes     Path
    1.229       +6  -0      ossp-pkg/shtool/ChangeLog
    1.41        +18 -6      ossp-pkg/shtool/sh.echo
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.228 -r1.229 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	19 Apr 2006 16:35:17 -0000	1.228
  +++ ossp-pkg/shtool/ChangeLog	29 Sep 2006 06:13:16 -0000	1.229
  @@ -9,6 +9,12 @@
   
    ChangeLog
   
  + Changes between 2.0.6 and 2.0.7 (19-Apr-2006 to xx-Sep-2006):
  +
  +   *) Fix and enhance "shtool echo -e" command by adding a missing
  +      line-continuation and adding support for MacOS X via nidump(8).
  +      [Ralf S. Engelschall]
  +
    Changes between 2.0.5 and 2.0.6 (07-Feb-2006 to 19-Apr-2006):
   
      *) Add support for Sun Niagara (sun4v) architecture to
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.echo
  ============================================================================
  $ cvs diff -u -r1.40 -r1.41 sh.echo
  --- ossp-pkg/shtool/sh.echo	4 Feb 2006 09:43:25 -0000	1.40
  +++ ossp-pkg/shtool/sh.echo	29 Sep 2006 06:13:17 -0000	1.41
  @@ -146,11 +146,14 @@
                       userid=`grep "^${username}:" /etc/passwd 2>/dev/null | \
                               sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'`
                       if [ ".$userid" = . ]; then
  -                        userid=`(ypcat passwd) 2>/dev/null |
  -                                grep "^${username}:" | \
  +                        userid=`(ypmatch "${username}" passwd) 2>/dev/null | \
                                   sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'`
                           if [ ".$userid" = . ]; then
  -                            userid='?'
  +                            userid=`(nidump passwd . | grep "^${username}:") 2>/dev/null | \
  +                                    sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'`
  +                            if [ ".$userid" = . ]; then
  +                                userid='?'
  +                            fi
                           fi
                       fi
                   fi
  @@ -175,10 +178,14 @@
                   groupid=`grep "^${username}:" /etc/passwd 2>/dev/null | \
                            sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
                   if [ ".$groupid" = . ]; then
  -                    groupid=`(ypcat passwd) 2>/dev/null | grep "^${username}:" | \
  +                    groupid=`(ypmatch "${username}" passwd) 2>/dev/null | \
                                sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
                       if [ ".$groupid" = . ]; then
  -                        groupid='?'
  +                        groupid=`(nidump passwd . | grep "^${username}:") 2>/dev/null | \
  +                                 sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
  +                        if [ ".$groupid" = . ]; then
  +                            groupid='?'
  +                        fi
                       fi
                   fi
               fi
  @@ -207,7 +214,12 @@
                                  grep "^[^:]*:[^:]*:${groupid}:" | \
                                  sed -e 's/:.*$//'`
                       if [ ".$groupname" = . ]; then
  -                        groupname='?'
  +                        groupname=`(nidump group .) 2>/dev/null | \
  +                                   grep "^[^:]*:[^:]*:${groupid}:" | \
  +                                   sed -e 's/:.*$//'`
  +                        if [ ".$groupname" = . ]; then
  +                            groupname='?'
  +                        fi
                       fi
                   fi
               fi
  @@ .

From ossp-cvs-owner@ossp.org  Fri Sep 29 08:36:33 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id A39B7752843; Fri, 29 Sep 2006 08:36:32 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog sh.echo
Message-Id: <20060929063632.A39B7752843@mail.ossp.org>
Date: Fri, 29 Sep 2006 08:36:32 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Sep-2006 08:36:32
  Branch: HEAD                             Handle: 2006092907363100

  Modified files:
    ossp-pkg/shtool         ChangeLog sh.echo

  Log:
    add NIS+ support, too

  Summary:
    Revision    Changes     Path
    1.230       +2  -1      ossp-pkg/shtool/ChangeLog
    1.42        +6  -6      ossp-pkg/shtool/sh.echo
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.229 -r1.230 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	29 Sep 2006 06:13:16 -0000	1.229
  +++ ossp-pkg/shtool/ChangeLog	29 Sep 2006 06:36:31 -0000	1.230
  @@ -12,7 +12,8 @@
    Changes between 2.0.6 and 2.0.7 (19-Apr-2006 to xx-Sep-2006):
   
      *) Fix and enhance "shtool echo -e" command by adding a missing
  -      line-continuation and adding support for MacOS X via nidump(8).
  +      line-continuation and adding support for MacOS X via nidump(8)
  +      and NIS+ support via niscat(8) and nismatch(8).
         [Ralf S. Engelschall]
   
    Changes between 2.0.5 and 2.0.6 (07-Feb-2006 to 19-Apr-2006):
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.echo
  ============================================================================
  $ cvs diff -u -r1.41 -r1.42 sh.echo
  --- ossp-pkg/shtool/sh.echo	29 Sep 2006 06:13:17 -0000	1.41
  +++ ossp-pkg/shtool/sh.echo	29 Sep 2006 06:36:31 -0000	1.42
  @@ -146,8 +146,8 @@
                       userid=`grep "^${username}:" /etc/passwd 2>/dev/null | \
                               sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'`
                       if [ ".$userid" = . ]; then
  -                        userid=`(ypmatch "${username}" passwd) 2>/dev/null | \
  -                                sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'`
  +                        userid=`(ypmatch "${username}" passwd; nismatch "${username}" passwd) 2>/dev/null | \
  +                                sed -e 'q' | sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'`
                           if [ ".$userid" = . ]; then
                               userid=`(nidump passwd . | grep "^${username}:") 2>/dev/null | \
                                       sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'`
  @@ -178,8 +178,8 @@
                   groupid=`grep "^${username}:" /etc/passwd 2>/dev/null | \
                            sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
                   if [ ".$groupid" = . ]; then
  -                    groupid=`(ypmatch "${username}" passwd) 2>/dev/null | \
  -                             sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
  +                    groupid=`(ypmatch "${username}" passwd; nismatch "${username}" passwd) 2>/dev/null | \
  +                             sed -e 'q' | sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
                       if [ ".$groupid" = . ]; then
                           groupid=`(nidump passwd . | grep "^${username}:") 2>/dev/null | \
                                    sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
  @@ -210,8 +210,8 @@
                   groupname=`grep "^[^:]*:[^:]*:${groupid}:" /etc/group 2>/dev/null | \
                              sed -e 's/:.*$//'`
                   if [ ".$groupname" = . ]; then
  -                    groupname=`(ypcat group) 2>/dev/null | \
  -                               grep "^[^:]*:[^:]*:${groupid}:" | \
  +                    groupname=`(ypcat group; niscat group) 2>/dev/null | \
  +                               sed -e 'q' | grep "^[^:]*:[^:]*:${groupid}:" | \
                                  sed -e 's/:.*$//'`
                       if [ ".$groupname" = . ]; then
                           groupname=`(nidump group .) 2>/dev/null | \
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct  6 10:32:41 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 4E963752904; Fri,  6 Oct 2006 10:32:41 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog THANKS uuid.c uuid.h.in uuid.pod
Message-Id: <20061006083241.4E963752904@mail.ossp.org>
Date: Fri,  6 Oct 2006 10:32:41 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Oct-2006 10:32:41
  Branch: HEAD                             Handle: 2006100609324000

  Modified files:
    ossp-pkg/uuid           ChangeLog THANKS uuid.c uuid.h.in uuid.pod

  Log:
    Change type of "data_ptr" argument in uuid_export() API signature
    from "void **" to "void *" as there is unfortunately no
    "generic pointer to pointer type" in ISO C (see also
    http://c-faq.com/ptrs/genericpp.html) and "void **" is just a
    "pointer to a 'void *'".
    
    The "void **" especially had the nasty side-effect that it breaks
    strict pointer aliasing rules of ISO C and hence would require
    fiddling with temporary variables on all uuid_export() calls if
    one would be 100% correct and avoid aliasing related compiler
    warnings. Instead, as uuid_export() internally has to cast the
    "data_ptr" to the particular expected type anyway, it is better
    to have "data_ptr" just be a really generic "void *" in the API
    signature.
    
    Keep in mind that although this is an API change, it doesn't cause
    any incompatibilities as the function still expects the same
    "pointer to a pointer of a particular type". This expected pointer
    is just now passed the more correct although less intuitive way.
    
    Submitted by: Hrvoje Niksic <hniksic@xemacs.org>

  Summary:
    Revision    Changes     Path
    1.133       +22 -1      ossp-pkg/uuid/ChangeLog
    1.12        +1  -0      ossp-pkg/uuid/THANKS
    1.63        +23 -7      ossp-pkg/uuid/uuid.c
    1.13        +1  -1      ossp-pkg/uuid/uuid.h.in
    1.41        +29 -16     ossp-pkg/uuid/uuid.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.132 -r1.133 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	2 Aug 2006 13:11:09 -0000	1.132
  +++ ossp-pkg/uuid/ChangeLog	6 Oct 2006 08:32:40 -0000	1.133
  @@ -11,7 +11,28 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 1.5.1 and 1.5.2 (31-Jul-2006 to xx-Aug-2006)
  +  Changes between 1.5.1 and 1.6.0 (31-Jul-2006 to 05-Oct-2006)
  +
  +   o Change type of "data_ptr" argument in uuid_export() API signature
  +     from "void **" to "void *" as there is unfortunately no
  +     "generic pointer to pointer type" in ISO C (see also
  +     http://c-faq.com/ptrs/genericpp.html) and "void **" is just a
  +     "pointer to a 'void *'".
  +     
  +     The "void **" especially had the nasty side-effect that it breaks
  +     strict pointer aliasing rules of ISO C and hence would require
  +     fiddling with temporary variables on all uuid_export() calls if
  +     one would be 100% correct and avoid aliasing related compiler
  +     warnings. Instead, as uuid_export() internally has to cast the
  +     "data_ptr" to the particular expected type anyway, it is better
  +     to have "data_ptr" just be a really generic "void *" in the API
  +     signature.
  +     
  +     Keep in mind that although this is an API change, it doesn't cause
  +     any incompatibilities as the function still expects the same
  +     "pointer to a pointer of a particular type". This expected pointer
  +     is just now passed the more correct although less intuitive way.
  +     [Hrvoje Niksic <hniksic@xemacs.org>, Ralf S. Engelschall]
   
      o Optional DMALLOC based memory debugging support.
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/THANKS
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 THANKS
  --- ossp-pkg/uuid/THANKS	31 Jul 2006 12:44:03 -0000	1.11
  +++ ossp-pkg/uuid/THANKS	6 Oct 2006 08:32:40 -0000	1.12
  @@ -18,6 +18,7 @@
       o  Fuyuki                      <fuyuki@nigredo.org>
       o  Thomas Lotterer             <thomas@lotterer.net>
       o  Roman Neuhauser             <neuhauser@sigpipe.cz>
  +    o  Hrvoje Niksic               <hniksic@xemacs.org>
       o  Piotr Roszatycki            <dexter@debian.org>
       o  Michael Schloh              <michael@schloh.com>
       o  Guerry Semones              <guerry@tsunamiresearch.com>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.62 -r1.63 uuid.c
  --- ossp-pkg/uuid/uuid.c	2 Aug 2006 13:11:09 -0000	1.62
  +++ ossp-pkg/uuid/uuid.c	6 Oct 2006 08:32:40 -0000	1.63
  @@ -328,20 +328,24 @@
   
   /* INTERNAL: pack UUID object into binary representation
      (allows in-place operation for internal efficiency!) */
  -static uuid_rc_t uuid_export_bin(const uuid_t *uuid, void **data_ptr, size_t *data_len)
  +static uuid_rc_t uuid_export_bin(const uuid_t *uuid, void *_data_ptr, size_t *data_len)
   {
  +    uuid_uint8_t **data_ptr;
       uuid_uint8_t *out;
       uuid_uint32_t tmp32;
       uuid_uint16_t tmp16;
       unsigned int i;
   
  +    /* cast generic data pointer to particular pointer to pointer type */
  +    data_ptr = (uuid_uint8_t **)_data_ptr;
  +
       /* sanity check argument(s) */
       if (uuid == NULL || data_ptr == NULL)
           return UUID_RC_ARG;
   
       /* optionally allocate octet data buffer */
       if (*data_ptr == NULL) {
  -        if ((*data_ptr = malloc(sizeof(uuid_t))) == NULL)
  +        if ((*data_ptr = (uuid_uint8_t *)malloc(sizeof(uuid_t))) == NULL)
               return UUID_RC_MEM;
           if (data_len != NULL)
               *data_len = UUID_LEN_BIN;
  @@ -355,7 +359,7 @@
       }
   
       /* treat output data buffer as octet stream */
  -    out = (uuid_uint8_t *)(*data_ptr);
  +    out = *data_ptr;
   
       /* pack "time_low" field */
       tmp32 = uuid->obj.time_low;
  @@ -492,10 +496,14 @@
   }
   
   /* INTERNAL: export UUID object to string representation */
  -static uuid_rc_t uuid_export_str(const uuid_t *uuid, void **data_ptr, size_t *data_len)
  +static uuid_rc_t uuid_export_str(const uuid_t *uuid, void *_data_ptr, size_t *data_len)
   {
  +    char **data_ptr;
       char *data_buf;
   
  +    /* cast generic data pointer to particular pointer to pointer type */
  +    data_ptr = (char **)_data_ptr;
  +
       /* sanity check argument(s) */
       if (uuid == NULL || data_ptr == NULL)
           return UUID_RC_ARG;
  @@ -543,8 +551,9 @@
   }
   
   /* INTERNAL: export UUID object to single integer value representation */
  -static uuid_rc_t uuid_export_siv(const uuid_t *uuid, void **data_ptr, size_t *data_len)
  +static uuid_rc_t uuid_export_siv(const uuid_t *uuid, void *_data_ptr, size_t *data_len)
   {
  +    char **data_ptr;
       char *data_buf;
       void *tmp_ptr;
       size_t tmp_len;
  @@ -553,6 +562,9 @@
       uuid_rc_t rc;
       int i;
   
  +    /* cast generic data pointer to particular pointer to pointer type */
  +    data_ptr = (char **)_data_ptr;
  +
       /* sanity check argument(s) */
       if (uuid == NULL || data_ptr == NULL)
           return UUID_RC_ARG;
  @@ -621,8 +633,9 @@
   };
   
   /* INTERNAL: dump UUID object as descriptive text */
  -static uuid_rc_t uuid_export_txt(const uuid_t *uuid, void **data_ptr, size_t *data_len)
  +static uuid_rc_t uuid_export_txt(const uuid_t *uuid, void *_data_ptr, size_t *data_len)
   {
  +    char **data_ptr;
       uuid_rc_t rc;
       char **out;
       char *out_ptr;
  @@ -648,6 +661,9 @@
       struct tm *tm;
       int i;
   
  +    /* cast generic data pointer to particular pointer to pointer type */
  +    data_ptr = (char **)_data_ptr;
  +
       /* sanity check argument(s) */
       if (uuid == NULL || data_ptr == NULL)
           return UUID_RC_ARG;
  @@ -820,7 +836,7 @@
   }
   
   /* UUID exporting */
  -uuid_rc_t uuid_export(const uuid_t *uuid, uuid_fmt_t fmt, void **data_ptr, size_t *data_len)
  +uuid_rc_t uuid_export(const uuid_t *uuid, uuid_fmt_t fmt, void *data_ptr, size_t *data_len)
   {
       uuid_rc_t rc;
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.h.in
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 uuid.h.in
  --- ossp-pkg/uuid/uuid.h.in	11 May 2006 09:37:28 -0000	1.12
  +++ ossp-pkg/uuid/uuid.h.in	6 Oct 2006 08:32:40 -0000	1.13
  @@ -108,7 +108,7 @@
   
   /* UUID import/export */
   extern uuid_rc_t     uuid_import   (      uuid_t  *_uuid, uuid_fmt_t _fmt, const void  *_data_ptr, size_t  _data_len);
  -extern uuid_rc_t     uuid_export   (const uuid_t  *_uuid, uuid_fmt_t _fmt,       void **_data_ptr, size_t *_data_len);
  +extern uuid_rc_t     uuid_export   (const uuid_t  *_uuid, uuid_fmt_t _fmt,       void  *_data_ptr, size_t *_data_len);
   
   /* library utilities */
   extern char         *uuid_error    (uuid_rc_t _rc);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.40 -r1.41 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	1 Aug 2006 19:35:07 -0000	1.40
  +++ ossp-pkg/uuid/uuid.pod	6 Oct 2006 08:32:40 -0000	1.41
  @@ -328,21 +328,34 @@
   minimum expected length in I<data_len> depends on it. Valid values for
   I<fmt> are B<UUID_FMT_BIN>, B<UUID_FMT_STR> and B<UUID_FMT_SIV>.
   
  -=item uuid_rc_t B<uuid_export>(const uuid_t *I<uuid>, uuid_fmt_t I<fmt>, void **I<data_ptr>, size_t *I<data_len>);
  +=item uuid_rc_t B<uuid_export>(const uuid_t *I<uuid>, uuid_fmt_t I<fmt>, void *I<data_ptr>, size_t *I<data_len>);
   
  -Exports a UUID I<uuid> into an external representation of format I<fmt>.
  -The data is written to the buffer at C<*>I<data_ptr> which has to
  -be room for at least C<*>I<data_len> bytes. If C<*>I<data_ptr> is
  -C<NULL>, I<data_len> is ignored as input and a new buffer is allocated
  -and returned in C<*>I<data_ptr> (the caller has to free(3) it later
  -on). If I<data_len> is not C<NULL>, the number of available bytes at
  -C<*>I<data_ptr> has to be provided in C<*>I<data_len> and the number of
  -actually written bytes are returned in C<*>I<data_len> again.
  -
  -The format of the external representation is specified by I<fmt> and the
  -minimum required length in C<*>I<data_len> depends on it. Valid values
  -for I<fmt> are B<UUID_FMT_BIN>, B<UUID_FMT_STR>, B<UUID_FMT_SIV> and
  -B<UUID_FMT_TXT>.
  +Exports a UUID I<uuid> into an external representation of format
  +I<fmt>. Valid values for I<fmt> are B<UUID_FMT_BIN>, B<UUID_FMT_STR>,
  +B<UUID_FMT_SIV> and B<UUID_FMT_TXT>.
  +
  +The data is written to the buffer whose location is obtained
  +by dereferencing I<data_ptr> after a "cast" to the appropriate
  +pointer-to-pointer type. Hence the generic pointer argument I<data_ptr>
  +is expected to be a pointer to a "pointer of a particular type", i.e.,
  +it has to be of type "C<unsigned char **>" for B<UUID_FMT_BIN> and
  +"C<char **>" for B<UUID_FMT_STR>, B<UUID_FMT_SIV> and B<UUID_FMT_TXT>.
  +
  +The buffer has to be room for at least C<*>I<data_len> bytes. If the
  +value of the pointer after "casting" and dereferencing I<data_ptr>
  +is C<NULL>, I<data_len> is ignored as input and a new buffer is
  +allocated and returned in the pointer after "casting" and dereferencing
  +I<data_ptr> (the caller has to free(3) it later on).
  +
  +If I<data_len> is not C<NULL>, the number of available bytes in the
  +buffer has to be provided in C<*>I<data_len> and the number of actually
  +written bytes are returned in C<*>I<data_len> again. The minimum
  +required buffer length depends on the external representation as
  +specified by I<fmt> and is at least B<UUID_LEN_BIN> for B<UUID_FMT_BIN>,
  +B<UUID_LEN_STR> for B<UUID_FMT_STR> and B<UUID_LEN_SIV> for
  +B<UUID_FMT_SIV>. For B<UUID_FMT_TXT> a buffer of unspecified length is
  +required and hence it is recommended to allow B<OSSP uuid> to allocate
  +the buffer as necessary.
   
   =item uuid_rc_t B<uuid_load>(uuid_t *I<uuid>, const char *I<name>);
   
  @@ -418,7 +431,7 @@
        uuid_create(&uuid);
        uuid_make(uuid, UUID_MAKE_V1);
        str = NULL;
  -     uuid_export(uuid, UUID_FMT_STR, (void **)&str, NULL);
  +     uuid_export(uuid, UUID_FMT_STR, &str, NULL);
        uuid_destroy(uuid);
        return str;
    }
  @@ -435,7 +448,7 @@
        uuid_load(uuid_ns, "ns:URL");
        uuid_make(uuid, UUID_MAKE_V3, uuid_ns, url);
        str = NULL;
  -     uuid_export(uuid, UUID_FMT_STR, (void **)&str, NULL);
  +     uuid_export(uuid, UUID_FMT_STR, &str, NULL);
        uuid_destroy(uuid_ns);
        uuid_destroy(uuid);
        return str;
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 13 21:48:32 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id C834F752FE1; Fri, 13 Oct 2006 21:48:31 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shiela/ shiela.pl
Message-Id: <20061013194831.C834F752FE1@mail.ossp.org>
Date: Fri, 13 Oct 2006 21:48:31 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Oct-2006 21:48:31
  Branch: HEAD                             Handle: 2006101320483100

  Modified files:
    ossp-pkg/shiela         shiela.pl

  Log:
    fix typo

  Summary:
    Revision    Changes     Path
    1.73        +1  -1      ossp-pkg/shiela/shiela.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shiela/shiela.pl
  ============================================================================
  $ cvs diff -u -r1.72 -r1.73 shiela.pl
  --- ossp-pkg/shiela/shiela.pl	25 Jul 2006 13:00:52 -0000	1.72
  +++ ossp-pkg/shiela/shiela.pl	13 Oct 2006 19:48:31 -0000	1.73
  @@ -60,7 +60,7 @@
   $SIG{__DIE__} = sub {
       my ($text) = @_;
       $text =~ s|\s+at\s+.*||s;
  -    print STDERR "cvs:shiela::ERROR: ". $text . ($! ? " ($!)" : "") . "\n";
  +    print STDERR "cvs:shiela:ERROR: ". $text . ($! ? " ($!)" : "") . "\n";
       exit(1);
   };
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 20 19:17:37 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id A98CA753014; Mon, 20 Nov 2006 19:17:37 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog ossp-pkg/uuid/perl/ uuid_compat.p...
Message-Id: <20061120181737.A98CA753014@mail.ossp.org>
Date: Mon, 20 Nov 2006 19:17:37 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Nov-2006 19:17:37
  Branch: HEAD                             Handle: 2006112018173301

  Modified files:
    ossp-pkg/uuid           ChangeLog
    ossp-pkg/uuid/perl      uuid_compat.pm

  Log:
    Fix the Data::UUID::to_b64string() function of the Perl backward
    compatibility API: an empty string was not supplied as the EOL
    marker to MIME::Base64::encode_base64() and hence the returned
    string ended with a newline character (which in turn breaks many
    applications using Data::UUID).
    
    Submitted by: Piotr Roszatycki <dexter@debian.org>

  Summary:
    Revision    Changes     Path
    1.134       +7  -0      ossp-pkg/uuid/ChangeLog
    1.11        +1  -1      ossp-pkg/uuid/perl/uuid_compat.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.133 -r1.134 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	6 Oct 2006 08:32:40 -0000	1.133
  +++ ossp-pkg/uuid/ChangeLog	20 Nov 2006 18:17:33 -0000	1.134
  @@ -13,6 +13,13 @@
   
     Changes between 1.5.1 and 1.6.0 (31-Jul-2006 to 05-Oct-2006)
   
  +   o Fix the Data::UUID::to_b64string() function of the Perl backward
  +     compatibility API: an empty string was not supplied as the EOL
  +     marker to MIME::Base64::encode_base64() and hence the returned
  +     string ended with a newline character (which in turn breaks many
  +     applications using Data::UUID).
  +     [Piotr Roszatycki <dexter@debian.org>]
  +
      o Change type of "data_ptr" argument in uuid_export() API signature
        from "void **" to "void *" as there is unfortunately no
        "generic pointer to pointer type" in ISO C (see also
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid_compat.pm
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 uuid_compat.pm
  --- ossp-pkg/uuid/perl/uuid_compat.pm	31 Jul 2006 12:45:09 -0000	1.10
  +++ ossp-pkg/uuid/perl/uuid_compat.pm	20 Nov 2006 18:17:34 -0000	1.11
  @@ -84,7 +84,7 @@
   
   sub to_b64string {
       my ($self, $bin) = @_;
  -    return MIME::Base64::encode_base64($bin);
  +    return MIME::Base64::encode_base64($bin, '');
   }
   
   sub from_string {
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 20 20:21:47 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 688EB7529DB; Mon, 20 Nov 2006 20:21:47 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog ossp-pkg/uuid/pgsql/ uuid.c
Message-Id: <20061120192147.688EB7529DB@mail.ossp.org>
Date: Mon, 20 Nov 2006 20:21:47 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Nov-2006 20:21:47
  Branch: HEAD                             Handle: 2006112019214601

  Modified files:
    ossp-pkg/uuid           ChangeLog
    ossp-pkg/uuid/pgsql     uuid.c

  Log:
    Added PostgreSQL 8.2 PG_MODULE_MAGIC support.
    
    Submitted by: David Wheeler <david@kineticode.com>

  Summary:
    Revision    Changes     Path
    1.135       +3  -0      ossp-pkg/uuid/ChangeLog
    1.6         +6  -0      ossp-pkg/uuid/pgsql/uuid.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.134 -r1.135 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	20 Nov 2006 18:17:33 -0000	1.134
  +++ ossp-pkg/uuid/ChangeLog	20 Nov 2006 19:21:46 -0000	1.135
  @@ -13,6 +13,9 @@
   
     Changes between 1.5.1 and 1.6.0 (31-Jul-2006 to 05-Oct-2006)
   
  +   o Added PostgreSQL 8.2 PG_MODULE_MAGIC support.
  +     [David Wheeler <david@kineticode.com>]
  +
      o Fix the Data::UUID::to_b64string() function of the Perl backward
        compatibility API: an empty string was not supplied as the EOL
        marker to MIME::Base64::encode_base64() and hence the returned
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/pgsql/uuid.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 uuid.c
  --- ossp-pkg/uuid/pgsql/uuid.c	20 Jul 2006 17:21:17 -0000	1.5
  +++ ossp-pkg/uuid/pgsql/uuid.c	20 Nov 2006 19:21:47 -0000	1.6
  @@ -41,6 +41,12 @@
   #include "lib/stringinfo.h"
   #include "access/hash.h"
   
  +/*  PostgreSQL module magic cookie
  +    (PostgreSQL >= 8.2 only) */
  +#ifdef PG_MODULE_MAGIC
  +PG_MODULE_MAGIC;
  +#endif
  +
   /* internal UUID datum data structure */
   typedef struct {
       unsigned char uuid_bin[UUID_LEN_BIN];
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 20 20:24:12 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id D94AD753010; Mon, 20 Nov 2006 20:24:12 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/pgsql/ uuid.c
Message-Id: <20061120192412.D94AD753010@mail.ossp.org>
Date: Mon, 20 Nov 2006 20:24:12 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Nov-2006 20:24:12
  Branch: HEAD                             Handle: 2006112019241200

  Modified files:
    ossp-pkg/uuid/pgsql     uuid.c

  Log:
    silence warning

  Summary:
    Revision    Changes     Path
    1.7         +1  -1      ossp-pkg/uuid/pgsql/uuid.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/pgsql/uuid.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 uuid.c
  --- ossp-pkg/uuid/pgsql/uuid.c	20 Nov 2006 19:21:47 -0000	1.6
  +++ ossp-pkg/uuid/pgsql/uuid.c	20 Nov 2006 19:24:12 -0000	1.7
  @@ -84,7 +84,7 @@
                   errmsg("invalid UUID string")));
       if ((len = strlen(uuid_str)) != UUID_LEN_STR)
           ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
  -                errmsg("invalid UUID string length %d (expected %d)", len, UUID_LEN_STR)));
  +                errmsg("invalid UUID string length %d (expected %d)", (int)len, UUID_LEN_STR)));
   
       /* import as string representation */
       if ((rc = uuid_create(&uuid)) != UUID_RC_OK)
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 20 20:27:51 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id C879075295A; Mon, 20 Nov 2006 20:27:51 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog
Message-Id: <20061120192751.C879075295A@mail.ossp.org>
Date: Mon, 20 Nov 2006 20:27:51 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Nov-2006 20:27:51
  Branch: HEAD                             Handle: 2006112019275100

  Modified files:
    ossp-pkg/uuid           ChangeLog

  Log:
    remember fix

  Summary:
    Revision    Changes     Path
    1.136       +3  -0      ossp-pkg/uuid/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.135 -r1.136 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	20 Nov 2006 19:21:46 -0000	1.135
  +++ ossp-pkg/uuid/ChangeLog	20 Nov 2006 19:27:51 -0000	1.136
  @@ -13,6 +13,9 @@
   
     Changes between 1.5.1 and 1.6.0 (31-Jul-2006 to 05-Oct-2006)
   
  +   o Pass the correct type to PostgreSQL's errmsg().
  +     [David Wheeler <david@kineticode.com>, Ralf S. Engelschall]
  +
      o Added PostgreSQL 8.2 PG_MODULE_MAGIC support.
        [David Wheeler <david@kineticode.com>]
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 20 20:29:27 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 8519A7529DB; Mon, 20 Nov 2006 20:29:27 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog ossp-pkg/uuid/pgsql/ Makefile
Message-Id: <20061120192927.8519A7529DB@mail.ossp.org>
Date: Mon, 20 Nov 2006 20:29:27 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Nov-2006 20:29:27
  Branch: HEAD                             Handle: 2006112019292700

  Modified files:
    ossp-pkg/uuid           ChangeLog
    ossp-pkg/uuid/pgsql     Makefile

  Log:
    Support MacOS X (aka Darwin) in PostgreSQL bindings by passing
    a "-bundle_loader" option to the linker in order to resolve the
    "undefined symbols" problem.

  Summary:
    Revision    Changes     Path
    1.137       +5  -0      ossp-pkg/uuid/ChangeLog
    1.4         +2  -0      ossp-pkg/uuid/pgsql/Makefile
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.136 -r1.137 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	20 Nov 2006 19:27:51 -0000	1.136
  +++ ossp-pkg/uuid/ChangeLog	20 Nov 2006 19:29:27 -0000	1.137
  @@ -13,6 +13,11 @@
   
     Changes between 1.5.1 and 1.6.0 (31-Jul-2006 to 05-Oct-2006)
   
  +   o Support MacOS X (aka Darwin) in PostgreSQL bindings by passing
  +     a "-bundle_loader" option to the linker in order to resolve the
  +     "undefined symbols" problem.
  +     [David Wheeler <david@kineticode.com>, Ralf S. Engelschall]
  +
      o Pass the correct type to PostgreSQL's errmsg().
        [David Wheeler <david@kineticode.com>, Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/pgsql/Makefile
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 Makefile
  --- ossp-pkg/uuid/pgsql/Makefile	31 Jul 2006 12:43:32 -0000	1.3
  +++ ossp-pkg/uuid/pgsql/Makefile	20 Nov 2006 19:29:27 -0000	1.4
  @@ -14,6 +14,7 @@
   
   PG_CONFIG         ?= pg_config
   PGXS              := $(shell $(PG_CONFIG) --pgxs)
  +POSTGRES          := $(shell $(PG_CONFIG) --bindir)/postgres
   top_builddir      := $(dir $(PGXS))../..
   include           $(top_builddir)/src/Makefile.global
       
  @@ -25,6 +26,7 @@
   override CPPFLAGS := -I.. $(CPPFLAGS)
   SHLIB_LINK        := -L../.libs -luuid
   SHLIB_LINK        += $(shell test $(shell uname -s) = FreeBSD && echo "-Wl,-Bsymbolic")
  +SHLIB_LINK        += $(shell test $(shell uname -s) = Darwin && echo "-bundle_loader $(POSTGRES)")
   rpath             :=
   
   all: uuid.sql all-lib
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 20 20:50:11 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id F2D957529EE; Mon, 20 Nov 2006 20:50:10 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm/ ChangeLog devtool.conf
Message-Id: <20061120195010.F2D957529EE@mail.ossp.org>
Date: Mon, 20 Nov 2006 20:50:10 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Nov-2006 20:50:10
  Branch: HEAD                             Handle: 2006112019501000

  Modified files:
    ossp-pkg/mm             ChangeLog devtool.conf

  Log:
    Upgraded build environment to GNU autoconf 2.61

  Summary:
    Revision    Changes     Path
    1.59        +3  -0      ossp-pkg/mm/ChangeLog
    1.12        +1  -1      ossp-pkg/mm/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.58 -r1.59 ChangeLog
  --- ossp-pkg/mm/ChangeLog	15 Aug 2006 06:58:11 -0000	1.58
  +++ ossp-pkg/mm/ChangeLog	20 Nov 2006 19:50:10 -0000	1.59
  @@ -11,6 +11,9 @@
   
    Changes between 1.4.1 and 1.4.2 (10-Aug-2006 to 15-Aug-2006)
   
  +  *) Upgraded build environment to GNU autoconf 2.61
  +     [Ralf S. Engelschall]
  +
     *) Remove a trailing whitespace in mm.pod which
        confused pod2html(1) and generated bad output.
        [Neil Conway <neilc@samurai.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 devtool.conf
  --- ossp-pkg/mm/devtool.conf	10 Aug 2006 18:59:04 -0000	1.11
  +++ ossp-pkg/mm/devtool.conf	20 Nov 2006 19:50:10 -0000	1.12
  @@ -5,7 +5,7 @@
   %autogen
       @autogen shtool   2.0.6  "2.0.*" all
       @autogen libtool  1.5.22 "1.5*"
  -    @autogen autoconf 2.60   "2.6[0-9]*"
  +    @autogen autoconf 2.61   "2.6[0-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 20 20:52:15 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 0B24E752F82; Mon, 20 Nov 2006 20:52:15 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm/ ChangeLog Makefile.in THANKS
Message-Id: <20061120195215.0B24E752F82@mail.ossp.org>
Date: Mon, 20 Nov 2006 20:52:15 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Nov-2006 20:52:15
  Branch: HEAD                             Handle: 2006112019521400

  Modified files:
    ossp-pkg/mm             ChangeLog Makefile.in THANKS

  Log:
    Support the LDFLAGS and LIBS variables in Makefile.

  Summary:
    Revision    Changes     Path
    1.60        +3  -0      ossp-pkg/mm/ChangeLog
    1.37        +10 -10     ossp-pkg/mm/Makefile.in
    1.19        +1  -0      ossp-pkg/mm/THANKS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.59 -r1.60 ChangeLog
  --- ossp-pkg/mm/ChangeLog	20 Nov 2006 19:50:10 -0000	1.59
  +++ ossp-pkg/mm/ChangeLog	20 Nov 2006 19:52:14 -0000	1.60
  @@ -11,6 +11,9 @@
   
    Changes between 1.4.1 and 1.4.2 (10-Aug-2006 to 15-Aug-2006)
   
  +  *) Support the LDFLAGS and LIBS variables in Makefile.
  +     [Ralf S. Engelschall, Francois Laupretre <francois.laupretre@ratp.fr>]
  +
     *) Upgraded build environment to GNU autoconf 2.61
        [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.36 -r1.37 Makefile.in
  --- ossp-pkg/mm/Makefile.in	10 Aug 2006 19:07:30 -0000	1.36
  +++ ossp-pkg/mm/Makefile.in	20 Nov 2006 19:52:14 -0000	1.37
  @@ -60,10 +60,10 @@
   LIBTOOL     = ./libtool
   SHTOOL      = ./shtool
   
  -LIBS        = libmm.la
  -OBJS        = mm_global.lo mm_alloc.lo mm_core.lo mm_lib.lo mm_vers.lo
  -MANS        = mm.3 mm-config.1
  -TSTS        = mm_test
  +MM_LIBS     = libmm.la
  +MM_OBJS     = mm_global.lo mm_alloc.lo mm_core.lo mm_lib.lo mm_vers.lo
  +MM_MANS     = mm.3 mm-config.1
  +MM_TSTS     = mm_test
   
   .SUFFIXES: .o .lo
   
  @@ -72,10 +72,10 @@
   .c.lo:
   	$(LIBTOOL) --quiet --mode=compile $(CC) -c $(CFLAGS) $<
   
  -all: $(LIBS) $(MANS) $(TSTS)
  +all: $(MM_LIBS) $(MM_MANS) $(MM_TSTS)
   
  -libmm.la: $(OBJS)
  -	$(LIBTOOL) --quiet --mode=link $(CC) -o $@ $(OBJS) \
  +libmm.la: $(MM_OBJS)
  +	$(LIBTOOL) --quiet --mode=link $(CC) $(LDFLAGS) -o $@ $(MM_OBJS) $(LIBS) \
   	    -rpath $(libdir) -version-info `$(SHTOOL) version -l c -d libtool mm_vers.c`
   
   mm_alloc.c mm_core.c mm_global.c: mm.h mm_vers.c
  @@ -119,9 +119,9 @@
   	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 libmm.la $(DESTDIR)$(libdir)/libmm.la
   
   clean:
  -	-$(RM) $(TSTS)
  -	-$(RM) $(OBJS)
  -	-$(RM) $(LIBS)
  +	-$(RM) $(MM_TSTS)
  +	-$(RM) $(MM_OBJS)
  +	-$(RM) $(MM_LIBS)
   	-$(RM) core *.core *.bak *~
   	-$(RM) -r .libs >/dev/null 2>&1 || true
   	-$(RM) *.o *.lo
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/THANKS
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 THANKS
  --- ossp-pkg/mm/THANKS	10 Jun 2006 07:07:54 -0000	1.18
  +++ ossp-pkg/mm/THANKS	20 Nov 2006 19:52:14 -0000	1.19
  @@ -43,6 +43,7 @@
       o  Martin Kraemer              <Martin.Kraemer@Fujitsu-Siemens.com>
       o  Sebastian Krahmer           <??>
       o  Mike Latinovich             <mlatin@boing.skysys.org>
  +    o  Francois Laupretre          <francois.laupretre@ratp.fr>
       o  Rasmus Lerdorf              <rasmus@lerdorf.on.ca>
       o  Dave Malhotra               <davem@glue.umd.edu>
       o  Christophe Massiot          <massiot@via.ecp.fr>
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 20 20:58:22 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 9CB2E75286E; Mon, 20 Nov 2006 20:58:22 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog ossp-pkg/uuid/pgsql/ uuid.sql.in
Message-Id: <20061120195822.9CB2E75286E@mail.ossp.org>
Date: Mon, 20 Nov 2006 20:58:22 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Nov-2006 20:58:22
  Branch: HEAD                             Handle: 2006112019582200

  Modified files:
    ossp-pkg/uuid           ChangeLog
    ossp-pkg/uuid/pgsql     uuid.sql.in

  Log:
    Silence PostgreSQL processing messages
    
    Submitted by: David Wheeler <david@kineticode.com>

  Summary:
    Revision    Changes     Path
    1.138       +3  -0      ossp-pkg/uuid/ChangeLog
    1.6         +1  -0      ossp-pkg/uuid/pgsql/uuid.sql.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.137 -r1.138 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	20 Nov 2006 19:29:27 -0000	1.137
  +++ ossp-pkg/uuid/ChangeLog	20 Nov 2006 19:58:22 -0000	1.138
  @@ -13,6 +13,9 @@
   
     Changes between 1.5.1 and 1.6.0 (31-Jul-2006 to 05-Oct-2006)
   
  +   o Silence PostgreSQL processing messages
  +     [David Wheeler <david@kineticode.com>]
  +
      o Support MacOS X (aka Darwin) in PostgreSQL bindings by passing
        a "-bundle_loader" option to the linker in order to resolve the
        "undefined symbols" problem.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/pgsql/uuid.sql.in
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 uuid.sql.in
  --- ossp-pkg/uuid/pgsql/uuid.sql.in	31 Jul 2006 12:43:32 -0000	1.5
  +++ ossp-pkg/uuid/pgsql/uuid.sql.in	20 Nov 2006 19:58:22 -0000	1.6
  @@ -32,6 +32,7 @@
   --
   
   SET search_path TO public;
  +SET client_min_messages TO warning;
   
   DROP FUNCTION uuid_in(CSTRING)                    CASCADE;
   DROP FUNCTION uuid_out(uuid)                      CASCADE;
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 20 21:00:53 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 5B5C8752816; Mon, 20 Nov 2006 21:00:53 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog ossp-pkg/uuid/pgsql/ uuid.sql.in
Message-Id: <20061120200053.5B5C8752816@mail.ossp.org>
Date: Mon, 20 Nov 2006 21:00:53 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Nov-2006 21:00:53
  Branch: HEAD                             Handle: 2006112020005200

  Modified files:
    ossp-pkg/uuid           ChangeLog
    ossp-pkg/uuid/pgsql     uuid.sql.in

  Log:
    Fix PostgreSQL bindings by mapping the correct DSO symbol
    to the functions "uuid_send" and "uuid_recv".

  Summary:
    Revision    Changes     Path
    1.139       +4  -0      ossp-pkg/uuid/ChangeLog
    1.7         +2  -2      ossp-pkg/uuid/pgsql/uuid.sql.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.138 -r1.139 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	20 Nov 2006 19:58:22 -0000	1.138
  +++ ossp-pkg/uuid/ChangeLog	20 Nov 2006 20:00:52 -0000	1.139
  @@ -13,6 +13,10 @@
   
     Changes between 1.5.1 and 1.6.0 (31-Jul-2006 to 05-Oct-2006)
   
  +   o Fix PostgreSQL bindings by mapping the correct DSO symbol
  +     to the functions "uuid_send" and "uuid_recv".
  +     [Ralf S. Engelschall]
  +
      o Silence PostgreSQL processing messages
        [David Wheeler <david@kineticode.com>]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/pgsql/uuid.sql.in
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 uuid.sql.in
  --- ossp-pkg/uuid/pgsql/uuid.sql.in	20 Nov 2006 19:58:22 -0000	1.6
  +++ ossp-pkg/uuid/pgsql/uuid.sql.in	20 Nov 2006 20:00:52 -0000	1.7
  @@ -83,12 +83,12 @@
   CREATE FUNCTION
       uuid_recv(INTERNAL) RETURNS uuid
       STRICT
  -    LANGUAGE C AS 'MODULE_PATHNAME', 'pg_uuid_in';
  +    LANGUAGE C AS 'MODULE_PATHNAME', 'pg_uuid_recv';
   
   CREATE FUNCTION
       uuid_send(uuid) RETURNS BYTEA
       STRICT
  -    LANGUAGE C AS 'MODULE_PATHNAME', 'pg_uuid_out';
  +    LANGUAGE C AS 'MODULE_PATHNAME', 'pg_uuid_send';
   
   CREATE TYPE uuid (
       INPUT   = uuid_in,   -- for SQL input
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 20 21:10:28 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 6E8BE75286E; Mon, 20 Nov 2006 21:10:28 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog ossp-pkg/uuid/pgsql/ uuid.sql.in
Message-Id: <20061120201028.6E8BE75286E@mail.ossp.org>
Date: Mon, 20 Nov 2006 21:10:28 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Nov-2006 21:10:28
  Branch: HEAD                             Handle: 2006112020102701

  Modified files:
    ossp-pkg/uuid           ChangeLog
    ossp-pkg/uuid/pgsql     uuid.sql.in

  Log:
    Disable PostgreSQL "(CSTRING AS uuid)" and "(uuid AS CSTRING)"
    CASTS as PostgreSQL 8.2 and higher explicitly disallow this.
    
    Submitted by: David Wheeler <david@kineticode.com>

  Summary:
    Revision    Changes     Path
    1.140       +4  -0      ossp-pkg/uuid/ChangeLog
    1.8         +5  -5      ossp-pkg/uuid/pgsql/uuid.sql.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.139 -r1.140 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	20 Nov 2006 20:00:52 -0000	1.139
  +++ ossp-pkg/uuid/ChangeLog	20 Nov 2006 20:10:27 -0000	1.140
  @@ -13,6 +13,10 @@
   
     Changes between 1.5.1 and 1.6.0 (31-Jul-2006 to 05-Oct-2006)
   
  +   o Disable PostgreSQL "(CSTRING AS uuid)" and "(uuid AS CSTRING)"
  +     CASTS as PostgreSQL 8.2 and higher explicitly disallow this.
  +     [David Wheeler <david@kineticode.com>, Ralf S. Engelschall]
  +
      o Fix PostgreSQL bindings by mapping the correct DSO symbol
        to the functions "uuid_send" and "uuid_recv".
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/pgsql/uuid.sql.in
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 uuid.sql.in
  --- ossp-pkg/uuid/pgsql/uuid.sql.in	20 Nov 2006 20:00:52 -0000	1.7
  +++ ossp-pkg/uuid/pgsql/uuid.sql.in	20 Nov 2006 20:10:28 -0000	1.8
  @@ -103,11 +103,11 @@
   COMMENT ON TYPE uuid
       IS 'UUID type';
   
  -CREATE CAST (CSTRING AS uuid)
  -    WITH FUNCTION uuid_in(CSTRING) AS ASSIGNMENT;
  -
  -CREATE CAST (uuid AS CSTRING)
  -    WITH FUNCTION uuid_out(uuid)   AS ASSIGNMENT;
  +-- CREATE CAST (CSTRING AS uuid)
  +--     WITH FUNCTION uuid_in(CSTRING) AS ASSIGNMENT;
  +-- 
  +-- CREATE CAST (uuid AS CSTRING)
  +--     WITH FUNCTION uuid_out(uuid)   AS ASSIGNMENT;
   
   --
   --  the UUID constructor function
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 20 21:11:48 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id AAFD7752926; Mon, 20 Nov 2006 21:11:48 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog devtool.conf
Message-Id: <20061120201148.AAFD7752926@mail.ossp.org>
Date: Mon, 20 Nov 2006 21:11:48 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Nov-2006 21:11:48
  Branch: HEAD                             Handle: 2006112020114800

  Modified files:
    ossp-pkg/uuid           ChangeLog devtool.conf

  Log:
    Upgrade build environment to GNU autoconf 2.61

  Summary:
    Revision    Changes     Path
    1.141       +3  -0      ossp-pkg/uuid/ChangeLog
    1.33        +1  -1      ossp-pkg/uuid/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.140 -r1.141 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	20 Nov 2006 20:10:27 -0000	1.140
  +++ ossp-pkg/uuid/ChangeLog	20 Nov 2006 20:11:48 -0000	1.141
  @@ -13,6 +13,9 @@
   
     Changes between 1.5.1 and 1.6.0 (31-Jul-2006 to 05-Oct-2006)
   
  +   o Upgrade build environment to GNU autoconf 2.61
  +     [Ralf S. Engelschall]
  +
      o Disable PostgreSQL "(CSTRING AS uuid)" and "(uuid AS CSTRING)"
        CASTS as PostgreSQL 8.2 and higher explicitly disallow this.
        [David Wheeler <david@kineticode.com>, Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 devtool.conf
  --- ossp-pkg/uuid/devtool.conf	2 Aug 2006 21:45:43 -0000	1.32
  +++ ossp-pkg/uuid/devtool.conf	20 Nov 2006 20:11:48 -0000	1.33
  @@ -5,7 +5,7 @@
   %autogen
       @autogen shtool   2.0.6  "2.0.*" all
       @autogen libtool  1.5.22 "1.5*"
  -    @autogen autoconf 2.60   "2.6[0-9]*"
  +    @autogen autoconf 2.61   "2.6[0-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 27 09:14:12 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 4F0137528AA; Mon, 27 Nov 2006 09:14:12 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ pth_sched.c
Message-Id: <20061127081412.4F0137528AA@mail.ossp.org>
Date: Mon, 27 Nov 2006 09:14:12 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   27-Nov-2006 09:14:12
  Branch: HEAD                             Handle: 2006112708141100

  Modified files:
    ossp-pkg/pth            pth_sched.c

  Log:
    fix typo

  Summary:
    Revision    Changes     Path
    1.95        +1  -1      ossp-pkg/pth/pth_sched.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_sched.c
  ============================================================================
  $ cvs diff -u -r1.94 -r1.95 pth_sched.c
  --- ossp-pkg/pth/pth_sched.c	8 Jun 2006 17:54:53 -0000	1.94
  +++ ossp-pkg/pth/pth_sched.c	27 Nov 2006 08:14:11 -0000	1.95
  @@ -814,7 +814,7 @@
   
           /*
            * move last thread to ready queue if any events occurred for it.
  -         * we insert it with a slightly increased queue priority to it a
  +         * we insert it with a slightly increased queue priority to give it a
            * better chance to immediately get scheduled, else the last running
            * thread might immediately get again the CPU which is usually not
            * what we want, because we oven use pth_yield() calls to give others
  @@ .

From ossp-cvs-owner@ossp.org  Thu Dec 14 22:42:46 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id E315675287E; Thu, 14 Dec 2006 22:42:45 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi ase.cgi.enroll.pl
Message-Id: <20061214214245.E315675287E@mail.ossp.org>
Date: Thu, 14 Dec 2006 22:42:45 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   14-Dec-2006 22:42:45
  Branch: HEAD                             Handle: 2006121421424500

  Modified files:
    ossp-pkg/ase            ase.cgi ase.cgi.enroll.pl

  Log:
    flush pending changes

  Summary:
    Revision    Changes     Path
    1.13        +1  -1      ossp-pkg/ase/ase.cgi
    1.16        +16 -14     ossp-pkg/ase/ase.cgi.enroll.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 ase.cgi
  --- ossp-pkg/ase/ase.cgi	27 Nov 2005 19:28:24 -0000	1.12
  +++ ossp-pkg/ase/ase.cgi	14 Dec 2006 21:42:45 -0000	1.13
  @@ -55,7 +55,7 @@
   use CGI::Application;                   # from OpenPKG "perl-www"
   use CGI::Application::Plugin::Forward;  # from OpenPKG "perl-www"
   use CGI::Session;                       # from OpenPKG "perl-www"
  -use CGI::GuruMeditation ("OSSP ase");   # from OpenPKG "perl-www"
  +use CGI::GuruMeditation (-name => "OSSP ase", -debug => 1);   # from OpenPKG "perl-www"
   
   #   language extensions (loaded on-demand only)
   sub autouse { Class::Autouse->autouse($_) foreach (@_); }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	3 Aug 2006 15:37:48 -0000	1.15
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	14 Dec 2006 21:42:45 -0000	1.16
  @@ -287,18 +287,20 @@
       }
   
       #   make sure the Email address is not a "take and throw away" one
  -    #my @blacklist1 = (
  -    #    qr/\@gmail\.com$/,          # Google
  -    #    qr/\@hotmail\.com$/,        # Microsoft
  -    #    qr/\@yahoo\.(com|de)$/,     # Yahoo
  -    #    qr/\@lycos\.com$/,          # Lycos
  -    #);
  -    #foreach my $re (@blacklist1) {
  -    #    if ($address =~ m/$re/s) {
  -    #        $cgi->param('address.error', "Email address is on black-list of free mail account providers");
  -    #        $error = 1;
  -    #    }
  -    #}
  +    my @blacklist1 = (
  +         #qr/\@gmail\.com$/,          # Google
  +         #qr/\@hotmail\.com$/,        # Microsoft
  +         #qr/\@yahoo\.(com|de)$/,     # Yahoo
  +         #qr/\@lycos\.com$/,          # Lycos
  +         qr/\@(temporaryinbox\.com|put2\.net|senseless-entertainment\.com|afrobacon\.com|golfilla\.info|trashmail\.net)$/, # Temporary Inbox / Golfilla (temporary accounts)
  +    );
  +    foreach my $re (@blacklist1) {
  +        if ($address =~ m/$re/s) {
  +            $self->logbook("address \"%s\" is not valid", $address);
  +            $cgi->param('address.error', "Email address is on black-list of mail account providers");
  +            $error = 1;
  +        }
  +    }
   
       #   make sure the Name is not a dummy one
       my @blacklist2 = (
  @@ -352,14 +354,14 @@
       $self->use("Mail::Sendmail");
       my $url = $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "?mode=activation;uuid=$me_uuid";
       my $mail =
  -        "Thank you for your registering to OpenPKG.\n" .
  +        "Thank you for interest in registering with OpenPKG.\n" .
           "To finish your registration you have to activate your account\n" .
           "by going to the following URL until ".$self->datetime2str($t_expiry)." UTC:\n" .
           "\n" .
           "$url\n" .
           "\n" .
           "-- \n" .
  -        "Affiliation Service Environment\n" .
  +        "OpenPKG Affiliation Service Environment\n" .
           "" . $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "\n" .
           "\n";
       $Mail::Sendmail::mailcfg{"smtp"} = [qw(localhost mail)];
  @@ .

From ossp-cvs-owner@ossp.org  Thu Dec 14 22:52:16 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id CF50375289B; Thu, 14 Dec 2006 22:52:16 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.enroll.pl
Message-Id: <20061214215216.CF50375289B@mail.ossp.org>
Date: Thu, 14 Dec 2006 22:52:16 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   14-Dec-2006 22:52:16
  Branch: HEAD                             Handle: 2006121421521600

  Modified files:
    ossp-pkg/ase            ase.cgi.enroll.pl

  Log:
    fix layout

  Summary:
    Revision    Changes     Path
    1.17        +15 -15     ossp-pkg/ase/ase.cgi.enroll.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	14 Dec 2006 21:42:45 -0000	1.16
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	14 Dec 2006 21:52:16 -0000	1.17
  @@ -126,10 +126,10 @@
           -default   => '',
           -size      => 40,
           -maxlength => 80,
  -    ) . "<br>";
  -    $html .= "<span class=\"annotation\">(<i>firstname lastname</i>, e.g. \"John Doe\")</span>\n";
  +    ) . "<br/>";
  +    $html .= "<span class=\"annotation\">(<i>firstname lastname</i>, e.g. \"John Doe\")</span><br/>\n";
       if (defined(my $error = $cgi->param("name.error"))) {
  -        $html .= "<br><span class=\"error\">$error</span>\n";
  +        $html .= "<span class=\"error\">$error</span><br/>\n";
       }
       $html << 1;
       $html >> "field-address";
  @@ -140,10 +140,10 @@
           -default   => '',
           -size      => 40,
           -maxlength => 80,
  -    ) . "<br>";
  -    $html .= "<span class=\"annotation\">(<i>name</i>\@<i>domain</i>, e.g. \"foo\@$remote\")</span>\n";
  +    ) . "<br/>";
  +    $html .= "<span class=\"annotation\">(<i>name</i>\@<i>domain</i>, e.g. \"foo\@$remote\")</span><br/>\n";
       if (defined(my $error = $cgi->param("address.error"))) {
  -        $html .= "<br><span class=\"error\">$error</span>\n";
  +        $html .= "<span class=\"error\">$error</span><br/>\n";
       }
       $html << 1;
       $html >> "field-password";
  @@ -154,10 +154,10 @@
           -default   => '',
           -size      => 22,
           -maxlength => 20,
  -    ) . "<br>";
  -    $html .= "<span class=\"annotation\">(up to 20 characters, e.g. \"$pw\")</span>\n";
  +    ) . "<br/>";
  +    $html .= "<span class=\"annotation\">(up to 20 characters, e.g. \"$pw\")</span><br/>\n";
       if (defined(my $error = $cgi->param("password.error"))) {
  -        $html .= "<br><span class=\"error\">$error</span>\n";
  +        $html .= "<span class=\"error\">$error</span><br/>\n";
       }
       $html .= $cgi->password_field(
           -id        => 'field_password_verify',
  @@ -166,10 +166,10 @@
           -default   => '',
           -size      => 22,
           -maxlength => 20,
  -    ) . "<br>";
  -    $html .= "<span class=\"annotation\">(retype password here for verification)</span>\n";
  +    ) . "<br/>";
  +    $html .= "<span class=\"annotation\">(retype password here for verification)</span><br/>\n";
       if (defined(my $error = $cgi->param("password_verify.error"))) {
  -        $html .= "<br><span class=\"error\">$error</span>\n";
  +        $html .= "<span class=\"error\">$error</span><br/>\n";
       }
       $html << 1;
       $html >> "field-scode";
  @@ -181,10 +181,10 @@
           -default   => '',
           -size      => 7,
           -maxlength => 6,
  -    ) . "<br>";
  -    $html .= "<span class=\"annotation\">(repeat the shown 6 character security code)</span>\n";
  +    ) . "<br/>";
  +    $html .= "<span class=\"annotation\">(repeat the shown 6 character security code)</span><br/>\n";
       if (defined(my $error = $cgi->param("scode.error"))) {
  -        $html .= "<br><span class=\"error\">$error</span>\n";
  +        $html .= "<span class=\"error\">$error</span><br/>\n";
       }
       $html << 1;
       $html >> "button-enroll";
  @@ .

From ossp-cvs-owner@ossp.org  Thu Dec 14 22:53:54 2006
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 208DE7528A2; Thu, 14 Dec 2006 22:53:54 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.util.pl
Message-Id: <20061214215354.208DE7528A2@mail.ossp.org>
Date: Thu, 14 Dec 2006 22:53:54 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   14-Dec-2006 22:53:54
  Branch: HEAD                             Handle: 2006121421535300

  Modified files:
    ossp-pkg/ase            ase.cgi.util.pl

  Log:
    flush pending changes

  Summary:
    Revision    Changes     Path
    1.14        +6  -5      ossp-pkg/ase/ase.cgi.util.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.util.pl
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 ase.cgi.util.pl
  --- ossp-pkg/ase/ase.cgi.util.pl	5 Apr 2006 17:39:15 -0000	1.13
  +++ ossp-pkg/ase/ase.cgi.util.pl	14 Dec 2006 21:53:53 -0000	1.14
  @@ -147,11 +147,12 @@
           $self->use("IO::All");
           $content < IO::All::io($filename)
               or die "unable to load file \"$filename\"";
  -        if    ($url =~ m|\.html$|)  { $type = "text/html";  $expires = "+1m"; }
  -        elsif ($url =~ m|\.css$|)   { $type = "text/css";   $expires = "+1m"; }
  -        elsif ($url =~ m|\.png$|)   { $type = "image/png";  $expires = "+1h"; }
  -        elsif ($url =~ m|\.gif$|)   { $type = "image/gif";  $expires = "+1h"; }
  -        elsif ($url =~ m|\.jpe?g$|) { $type = "image/jpeg"; $expires = "+1h"; }
  +        if    ($url =~ m|\.html$|)  { $type = "text/html";       $expires = "+1m"; }
  +        elsif ($url =~ m|\.css$|)   { $type = "text/css";        $expires = "+1m"; }
  +        elsif ($url =~ m|\.js$|)    { $type = "text/javascript"; $expires = "+1m"; }
  +        elsif ($url =~ m|\.png$|)   { $type = "image/png";       $expires = "+1h"; }
  +        elsif ($url =~ m|\.gif$|)   { $type = "image/gif";       $expires = "+1h"; }
  +        elsif ($url =~ m|\.jpe?g$|) { $type = "image/jpeg";      $expires = "+1h"; }
       }
   
       #   return results
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan  1 19:14:59 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 25524752852; Mon,  1 Jan 2007 19:14:59 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog Makefile.PL Makefile.in README co...
Message-Id: <20070101181459.25524752852@mail.ossp.org>
Date: Mon,  1 Jan 2007 19:14:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Jan-2007 19:14:59
  Branch: HEAD                             Handle: 2007010118145404

  Modified files:
    ossp-pkg/uuid           ChangeLog Makefile.PL Makefile.in README
                            configure.ac uuid++.cc uuid++.hh uuid++.pod
                            uuid-config.in uuid-config.pod uuid.ac uuid.c
                            uuid.h.in uuid.pc.in uuid.pod uuid_ac.h uuid_bm.h
                            uuid_cli.c uuid_cli.pod uuid_dce.c uuid_dce.h
                            uuid_mac.c uuid_mac.h uuid_md5.c uuid_md5.h
                            uuid_prng.c uuid_prng.h uuid_sha1.c uuid_sha1.h
                            uuid_str.c uuid_str.h
    ossp-pkg/uuid/perl      Makefile.PL uuid.pm uuid.pod uuid.tm uuid.ts
                            uuid.xs uuid_compat.pm uuid_compat.pod
                            uuid_compat.ts
    ossp-pkg/uuid/pgsql     uuid.c uuid.sql.in
    ossp-pkg/uuid/php       Makefile.local config.m4 uuid.c uuid.php4
                            uuid.php5 uuid.ts

  Log:
    Adjust copyright messages for new year 2007.

  Summary:
    Revision    Changes     Path
    1.142       +3  -0      ossp-pkg/uuid/ChangeLog
    1.2         +2  -2      ossp-pkg/uuid/Makefile.PL
    1.43        +2  -2      ossp-pkg/uuid/Makefile.in
    1.43        +2  -2      ossp-pkg/uuid/README
    1.13        +2  -2      ossp-pkg/uuid/configure.ac
    1.11        +2  -2      ossp-pkg/uuid/perl/Makefile.PL
    1.21        +2  -2      ossp-pkg/uuid/perl/uuid.pm
    1.12        +2  -2      ossp-pkg/uuid/perl/uuid.pod
    1.5         +2  -2      ossp-pkg/uuid/perl/uuid.tm
    1.6         +2  -2      ossp-pkg/uuid/perl/uuid.ts
    1.9         +2  -2      ossp-pkg/uuid/perl/uuid.xs
    1.12        +2  -2      ossp-pkg/uuid/perl/uuid_compat.pm
    1.4         +2  -2      ossp-pkg/uuid/perl/uuid_compat.pod
    1.3         +2  -2      ossp-pkg/uuid/perl/uuid_compat.ts
    1.8         +2  -2      ossp-pkg/uuid/pgsql/uuid.c
    1.9         +2  -2      ossp-pkg/uuid/pgsql/uuid.sql.in
    1.6         +2  -2      ossp-pkg/uuid/php/Makefile.local
    1.3         +2  -2      ossp-pkg/uuid/php/config.m4
    1.9         +2  -2      ossp-pkg/uuid/php/uuid.c
    1.3         +2  -2      ossp-pkg/uuid/php/uuid.php4
    1.3         +2  -2      ossp-pkg/uuid/php/uuid.php5
    1.3         +2  -2      ossp-pkg/uuid/php/uuid.ts
    1.7         +2  -2      ossp-pkg/uuid/uuid++.cc
    1.5         +2  -2      ossp-pkg/uuid/uuid++.hh
    1.4         +2  -2      ossp-pkg/uuid/uuid++.pod
    1.6         +2  -2      ossp-pkg/uuid/uuid-config.in
    1.5         +2  -2      ossp-pkg/uuid/uuid-config.pod
    1.22        +2  -2      ossp-pkg/uuid/uuid.ac
    1.64        +2  -2      ossp-pkg/uuid/uuid.c
    1.14        +2  -2      ossp-pkg/uuid/uuid.h.in
    1.3         +2  -2      ossp-pkg/uuid/uuid.pc.in
    1.42        +2  -2      ossp-pkg/uuid/uuid.pod
    1.7         +2  -2      ossp-pkg/uuid/uuid_ac.h
    1.7         +2  -2      ossp-pkg/uuid/uuid_bm.h
    1.25        +2  -2      ossp-pkg/uuid/uuid_cli.c
    1.26        +2  -2      ossp-pkg/uuid/uuid_cli.pod
    1.8         +2  -2      ossp-pkg/uuid/uuid_dce.c
    1.4         +2  -2      ossp-pkg/uuid/uuid_dce.h
    1.12        +2  -2      ossp-pkg/uuid/uuid_mac.c
    1.6         +2  -2      ossp-pkg/uuid/uuid_mac.h
    1.16        +2  -2      ossp-pkg/uuid/uuid_md5.c
    1.6         +2  -2      ossp-pkg/uuid/uuid_md5.h
    1.15        +2  -2      ossp-pkg/uuid/uuid_prng.c
    1.5         +2  -2      ossp-pkg/uuid/uuid_prng.h
    1.6         +2  -2      ossp-pkg/uuid/uuid_sha1.c
    1.4         +2  -2      ossp-pkg/uuid/uuid_sha1.h
    1.10        +2  -2      ossp-pkg/uuid/uuid_str.c
    1.4         +2  -2      ossp-pkg/uuid/uuid_str.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.141 -r1.142 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	20 Nov 2006 20:11:48 -0000	1.141
  +++ ossp-pkg/uuid/ChangeLog	1 Jan 2007 18:14:54 -0000	1.142
  @@ -13,6 +13,9 @@
   
     Changes between 1.5.1 and 1.6.0 (31-Jul-2006 to 05-Oct-2006)
   
  +   o Adjust copyright messages for new year 2007.
  +     [Ralf S. Engelschall]
  +
      o Upgrade build environment to GNU autoconf 2.61
        [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.PL
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 Makefile.PL
  --- ossp-pkg/uuid/Makefile.PL	15 Jan 2006 18:37:43 -0000	1.1
  +++ ossp-pkg/uuid/Makefile.PL	1 Jan 2007 18:14:54 -0000	1.2
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.42 -r1.43 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	31 Jul 2006 12:22:15 -0000	1.42
  +++ ossp-pkg/uuid/Makefile.in	1 Jan 2007 18:14:54 -0000	1.43
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.42 -r1.43 README
  --- ossp-pkg/uuid/README	31 Jul 2006 12:45:08 -0000	1.42
  +++ ossp-pkg/uuid/README	1 Jan 2007 18:14:54 -0000	1.43
  @@ -29,8 +29,8 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   
     This file is part of OSSP uuid, a library for the generation
     of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/configure.ac
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 configure.ac
  --- ossp-pkg/uuid/configure.ac	2 Aug 2006 13:11:09 -0000	1.12
  +++ ossp-pkg/uuid/configure.ac	1 Jan 2007 18:14:54 -0000	1.13
  @@ -1,7 +1,7 @@
   dnl ##
   dnl ##  OSSP uuid - Universally Unique Identifier
  -dnl ##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   dnl ##
   dnl ##  This file is part of OSSP uuid, a library for the generation
   dnl ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/Makefile.PL
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 Makefile.PL
  --- ossp-pkg/uuid/perl/Makefile.PL	13 Jan 2006 06:44:33 -0000	1.10
  +++ ossp-pkg/uuid/perl/Makefile.PL	1 Jan 2007 18:14:57 -0000	1.11
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.pm
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 uuid.pm
  --- ossp-pkg/uuid/perl/uuid.pm	31 Jul 2006 12:45:09 -0000	1.20
  +++ ossp-pkg/uuid/perl/uuid.pm	1 Jan 2007 18:14:57 -0000	1.21
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 uuid.pod
  --- ossp-pkg/uuid/perl/uuid.pod	11 May 2006 09:37:30 -0000	1.11
  +++ ossp-pkg/uuid/perl/uuid.pod	1 Jan 2007 18:14:57 -0000	1.12
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.tm
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 uuid.tm
  --- ossp-pkg/uuid/perl/uuid.tm	13 Jan 2006 06:44:33 -0000	1.4
  +++ ossp-pkg/uuid/perl/uuid.tm	1 Jan 2007 18:14:57 -0000	1.5
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.ts
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 uuid.ts
  --- ossp-pkg/uuid/perl/uuid.ts	11 May 2006 09:37:30 -0000	1.5
  +++ ossp-pkg/uuid/perl/uuid.ts	1 Jan 2007 18:14:57 -0000	1.6
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.xs
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 uuid.xs
  --- ossp-pkg/uuid/perl/uuid.xs	11 May 2006 09:37:30 -0000	1.8
  +++ ossp-pkg/uuid/perl/uuid.xs	1 Jan 2007 18:14:57 -0000	1.9
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid_compat.pm
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 uuid_compat.pm
  --- ossp-pkg/uuid/perl/uuid_compat.pm	20 Nov 2006 18:17:34 -0000	1.11
  +++ ossp-pkg/uuid/perl/uuid_compat.pm	1 Jan 2007 18:14:57 -0000	1.12
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2004 Piotr Roszatycki <dexter@debian.org>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid_compat.pod
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 uuid_compat.pod
  --- ossp-pkg/uuid/perl/uuid_compat.pod	13 Jan 2006 06:44:33 -0000	1.3
  +++ ossp-pkg/uuid/perl/uuid_compat.pod	1 Jan 2007 18:14:57 -0000	1.4
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid_compat.ts
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid_compat.ts
  --- ossp-pkg/uuid/perl/uuid_compat.ts	13 Jan 2006 06:44:33 -0000	1.2
  +++ ossp-pkg/uuid/perl/uuid_compat.ts	1 Jan 2007 18:14:57 -0000	1.3
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2004 Piotr Roszatycki <dexter@debian.org>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/pgsql/uuid.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 uuid.c
  --- ossp-pkg/uuid/pgsql/uuid.c	20 Nov 2006 19:24:12 -0000	1.7
  +++ ossp-pkg/uuid/pgsql/uuid.c	1 Jan 2007 18:14:58 -0000	1.8
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/pgsql/uuid.sql.in
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 uuid.sql.in
  --- ossp-pkg/uuid/pgsql/uuid.sql.in	20 Nov 2006 20:10:28 -0000	1.8
  +++ ossp-pkg/uuid/pgsql/uuid.sql.in	1 Jan 2007 18:14:58 -0000	1.9
  @@ -1,7 +1,7 @@
   --
   --  OSSP uuid - Universally Unique Identifier
  ---  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  ---  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +--  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +--  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   --
   --  This file is part of OSSP uuid, a library for the generation
   --  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/php/Makefile.local
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 Makefile.local
  --- ossp-pkg/uuid/php/Makefile.local	31 Jul 2006 11:42:40 -0000	1.5
  +++ ossp-pkg/uuid/php/Makefile.local	1 Jan 2007 18:14:58 -0000	1.6
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/php/config.m4
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 config.m4
  --- ossp-pkg/uuid/php/config.m4	13 Jan 2006 06:44:34 -0000	1.2
  +++ ossp-pkg/uuid/php/config.m4	1 Jan 2007 18:14:58 -0000	1.3
  @@ -1,7 +1,7 @@
   dnl
   dnl  OSSP uuid - Universally Unique Identifier
  -dnl  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -dnl  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +dnl  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +dnl  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   dnl
   dnl  This file is part of OSSP uuid, a library for the generation
   dnl  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/php/uuid.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 uuid.c
  --- ossp-pkg/uuid/php/uuid.c	11 May 2006 18:39:13 -0000	1.8
  +++ ossp-pkg/uuid/php/uuid.c	1 Jan 2007 18:14:58 -0000	1.9
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/php/uuid.php4
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid.php4
  --- ossp-pkg/uuid/php/uuid.php4	13 Jan 2006 06:44:34 -0000	1.2
  +++ ossp-pkg/uuid/php/uuid.php4	1 Jan 2007 18:14:58 -0000	1.3
  @@ -1,8 +1,8 @@
   <?php
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/php/uuid.php5
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid.php5
  --- ossp-pkg/uuid/php/uuid.php5	13 Jan 2006 06:44:34 -0000	1.2
  +++ ossp-pkg/uuid/php/uuid.php5	1 Jan 2007 18:14:58 -0000	1.3
  @@ -1,8 +1,8 @@
   <?php
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/php/uuid.ts
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid.ts
  --- ossp-pkg/uuid/php/uuid.ts	13 Jan 2006 06:44:34 -0000	1.2
  +++ ossp-pkg/uuid/php/uuid.ts	1 Jan 2007 18:14:58 -0000	1.3
  @@ -1,8 +1,8 @@
   <?php
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid++.cc
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 uuid++.cc
  --- ossp-pkg/uuid/uuid++.cc	11 May 2006 09:37:27 -0000	1.6
  +++ ossp-pkg/uuid/uuid++.cc	1 Jan 2007 18:14:54 -0000	1.7
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid++.hh
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 uuid++.hh
  --- ossp-pkg/uuid/uuid++.hh	11 May 2006 09:37:27 -0000	1.4
  +++ ossp-pkg/uuid/uuid++.hh	1 Jan 2007 18:14:54 -0000	1.5
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid++.pod
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 uuid++.pod
  --- ossp-pkg/uuid/uuid++.pod	11 May 2006 09:37:28 -0000	1.3
  +++ ossp-pkg/uuid/uuid++.pod	1 Jan 2007 18:14:54 -0000	1.4
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid-config.in
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 uuid-config.in
  --- ossp-pkg/uuid/uuid-config.in	13 Jan 2006 06:44:30 -0000	1.5
  +++ ossp-pkg/uuid/uuid-config.in	1 Jan 2007 18:14:54 -0000	1.6
  @@ -1,8 +1,8 @@
   #!/bin/sh
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid-config.pod
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 uuid-config.pod
  --- ossp-pkg/uuid/uuid-config.pod	13 Jan 2006 06:44:30 -0000	1.4
  +++ ossp-pkg/uuid/uuid-config.pod	1 Jan 2007 18:14:54 -0000	1.5
  @@ -1,8 +1,8 @@
   #!/bin/sh
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.ac
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 uuid.ac
  --- ossp-pkg/uuid/uuid.ac	13 Mar 2006 09:39:11 -0000	1.21
  +++ ossp-pkg/uuid/uuid.ac	1 Jan 2007 18:14:54 -0000	1.22
  @@ -1,7 +1,7 @@
   dnl ##
   dnl ##  OSSP uuid - Universally Unique Identifier
  -dnl ##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   dnl ##
   dnl ##  This file is part of OSSP uuid, a library for the generation
   dnl ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.63 -r1.64 uuid.c
  --- ossp-pkg/uuid/uuid.c	6 Oct 2006 08:32:40 -0000	1.63
  +++ ossp-pkg/uuid/uuid.c	1 Jan 2007 18:14:54 -0000	1.64
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.h.in
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 uuid.h.in
  --- ossp-pkg/uuid/uuid.h.in	6 Oct 2006 08:32:40 -0000	1.13
  +++ ossp-pkg/uuid/uuid.h.in	1 Jan 2007 18:14:54 -0000	1.14
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pc.in
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid.pc.in
  --- ossp-pkg/uuid/uuid.pc.in	13 Jan 2006 06:44:30 -0000	1.2
  +++ ossp-pkg/uuid/uuid.pc.in	1 Jan 2007 18:14:54 -0000	1.3
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.41 -r1.42 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	6 Oct 2006 08:32:40 -0000	1.41
  +++ ossp-pkg/uuid/uuid.pod	1 Jan 2007 18:14:54 -0000	1.42
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_ac.h
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 uuid_ac.h
  --- ossp-pkg/uuid/uuid_ac.h	2 Aug 2006 13:11:09 -0000	1.6
  +++ ossp-pkg/uuid/uuid_ac.h	1 Jan 2007 18:14:54 -0000	1.7
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_bm.h
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 uuid_bm.h
  --- ossp-pkg/uuid/uuid_bm.h	13 Jan 2006 06:44:30 -0000	1.6
  +++ ossp-pkg/uuid/uuid_bm.h	1 Jan 2007 18:14:54 -0000	1.7
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.c
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 uuid_cli.c
  --- ossp-pkg/uuid/uuid_cli.c	2 Aug 2006 13:11:09 -0000	1.24
  +++ ossp-pkg/uuid/uuid_cli.c	1 Jan 2007 18:14:54 -0000	1.25
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.pod
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 uuid_cli.pod
  --- ossp-pkg/uuid/uuid_cli.pod	11 May 2006 09:37:28 -0000	1.25
  +++ ossp-pkg/uuid/uuid_cli.pod	1 Jan 2007 18:14:54 -0000	1.26
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_dce.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 uuid_dce.c
  --- ossp-pkg/uuid/uuid_dce.c	2 Aug 2006 13:11:09 -0000	1.7
  +++ ossp-pkg/uuid/uuid_dce.c	1 Jan 2007 18:14:54 -0000	1.8
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_dce.h
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 uuid_dce.h
  --- ossp-pkg/uuid/uuid_dce.h	13 Jan 2006 06:44:31 -0000	1.3
  +++ ossp-pkg/uuid/uuid_dce.h	1 Jan 2007 18:14:55 -0000	1.4
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_mac.c
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 uuid_mac.c
  --- ossp-pkg/uuid/uuid_mac.c	2 Aug 2006 13:11:09 -0000	1.11
  +++ ossp-pkg/uuid/uuid_mac.c	1 Jan 2007 18:14:55 -0000	1.12
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_mac.h
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 uuid_mac.h
  --- ossp-pkg/uuid/uuid_mac.h	28 Jul 2006 18:04:15 -0000	1.5
  +++ ossp-pkg/uuid/uuid_mac.h	1 Jan 2007 18:14:55 -0000	1.6
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_md5.c
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 uuid_md5.c
  --- ossp-pkg/uuid/uuid_md5.c	2 Aug 2006 13:11:09 -0000	1.15
  +++ ossp-pkg/uuid/uuid_md5.c	1 Jan 2007 18:14:55 -0000	1.16
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_md5.h
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 uuid_md5.h
  --- ossp-pkg/uuid/uuid_md5.h	13 Jan 2006 06:44:31 -0000	1.5
  +++ ossp-pkg/uuid/uuid_md5.h	1 Jan 2007 18:14:55 -0000	1.6
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_prng.c
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 uuid_prng.c
  --- ossp-pkg/uuid/uuid_prng.c	2 Aug 2006 13:11:09 -0000	1.14
  +++ ossp-pkg/uuid/uuid_prng.c	1 Jan 2007 18:14:55 -0000	1.15
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_prng.h
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 uuid_prng.h
  --- ossp-pkg/uuid/uuid_prng.h	13 Jan 2006 06:44:31 -0000	1.4
  +++ ossp-pkg/uuid/uuid_prng.h	1 Jan 2007 18:14:55 -0000	1.5
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_sha1.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 uuid_sha1.c
  --- ossp-pkg/uuid/uuid_sha1.c	2 Aug 2006 13:11:10 -0000	1.5
  +++ ossp-pkg/uuid/uuid_sha1.c	1 Jan 2007 18:14:55 -0000	1.6
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_sha1.h
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 uuid_sha1.h
  --- ossp-pkg/uuid/uuid_sha1.h	28 Jul 2006 19:16:05 -0000	1.3
  +++ ossp-pkg/uuid/uuid_sha1.h	1 Jan 2007 18:14:55 -0000	1.4
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_str.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 uuid_str.c
  --- ossp-pkg/uuid/uuid_str.c	2 Aug 2006 13:11:10 -0000	1.9
  +++ ossp-pkg/uuid/uuid_str.c	1 Jan 2007 18:14:55 -0000	1.10
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_str.h
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 uuid_str.h
  --- ossp-pkg/uuid/uuid_str.h	13 Jan 2006 06:44:31 -0000	1.3
  +++ ossp-pkg/uuid/uuid_str.h	1 Jan 2007 18:14:55 -0000	1.4
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2006 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2006 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan  1 19:23:57 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 6588F752896; Mon,  1 Jan 2007 19:23:57 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/pth/ ChangeLog Makefile.in README aclocal.m4 conf...
Message-Id: <20070101182357.6588F752896@mail.ossp.org>
Date: Mon,  1 Jan 2007 19:23:57 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Jan-2007 19:23:57
  Branch: HEAD                             Handle: 2007010118235201

  Modified files:
    ossp-pkg/pth            ChangeLog Makefile.in README aclocal.m4
                            config.param configure.ac devtool.func
                            pth-config.in pth-config.pod pth.h.in pth.m4
                            pth.pod pth.spec pth_acmac.h.in pth_attr.c
                            pth_cancel.c pth_clean.c pth_compat.c pth_data.c
                            pth_debug.c pth_errno.c pth_event.c pth_ext.c
                            pth_fork.c pth_high.c pth_lib.c pth_mctx.c
                            pth_msg.c pth_p.h.in pth_pqueue.c pth_ring.c
                            pth_sched.c pth_string.c pth_sync.c pth_syscall.c
                            pth_tcb.c pth_time.c pth_uctx.c pth_util.c
                            pthread-config.in pthread-config.pod pthread.c
                            pthread.h.in pthread.pod striptease.mk
                            striptease.pl test_common.c test_common.h
                            test_httpd.c test_misc.c test_mp.c test_philo.c
                            test_pthread.c test_select.c test_sfio.c
                            test_sig.c test_std.c test_uctx.c

  Log:
    Adjusted all copyright messages for new year 2007.

  Summary:
    Revision    Changes     Path
    1.648       +3  -0      ossp-pkg/pth/ChangeLog
    1.158       +1  -1      ossp-pkg/pth/Makefile.in
    1.213       +1  -1      ossp-pkg/pth/README
    1.106       +1  -1      ossp-pkg/pth/aclocal.m4
    1.25        +1  -1      ossp-pkg/pth/config.param
    1.17        +2  -2      ossp-pkg/pth/configure.ac
    1.8         +1  -1      ossp-pkg/pth/devtool.func
    1.29        +1  -1      ossp-pkg/pth/pth-config.in
    1.25        +1  -1      ossp-pkg/pth/pth-config.pod
    1.147       +1  -1      ossp-pkg/pth/pth.h.in
    1.19        +1  -1      ossp-pkg/pth/pth.m4
    1.168       +1  -1      ossp-pkg/pth/pth.pod
    1.15        +1  -1      ossp-pkg/pth/pth.spec
    1.13        +1  -1      ossp-pkg/pth/pth_acmac.h.in
    1.24        +1  -1      ossp-pkg/pth/pth_attr.c
    1.31        +1  -1      ossp-pkg/pth/pth_cancel.c
    1.22        +1  -1      ossp-pkg/pth/pth_clean.c
    1.14        +1  -1      ossp-pkg/pth/pth_compat.c
    1.35        +1  -1      ossp-pkg/pth/pth_data.c
    1.33        +1  -1      ossp-pkg/pth/pth_debug.c
    1.29        +1  -1      ossp-pkg/pth/pth_errno.c
    1.67        +1  -1      ossp-pkg/pth/pth_event.c
    1.16        +1  -1      ossp-pkg/pth/pth_ext.c
    1.19        +1  -1      ossp-pkg/pth/pth_fork.c
    1.111       +1  -1      ossp-pkg/pth/pth_high.c
    1.62        +1  -1      ossp-pkg/pth/pth_lib.c
    1.63        +1  -1      ossp-pkg/pth/pth_mctx.c
    1.31        +1  -1      ossp-pkg/pth/pth_msg.c
    1.40        +1  -1      ossp-pkg/pth/pth_p.h.in
    1.35        +1  -1      ossp-pkg/pth/pth_pqueue.c
    1.28        +1  -1      ossp-pkg/pth/pth_ring.c
    1.96        +1  -1      ossp-pkg/pth/pth_sched.c
    1.16        +1  -1      ossp-pkg/pth/pth_string.c
    1.43        +1  -1      ossp-pkg/pth/pth_sync.c
    1.35        +1  -1      ossp-pkg/pth/pth_syscall.c
    1.45        +1  -1      ossp-pkg/pth/pth_tcb.c
    1.32        +1  -1      ossp-pkg/pth/pth_time.c
    1.7         +1  -1      ossp-pkg/pth/pth_uctx.c
    1.27        +1  -1      ossp-pkg/pth/pth_util.c
    1.25        +1  -1      ossp-pkg/pth/pthread-config.in
    1.21        +1  -1      ossp-pkg/pth/pthread-config.pod
    1.69        +1  -1      ossp-pkg/pth/pthread.c
    1.72        +1  -1      ossp-pkg/pth/pthread.h.in
    1.28        +1  -1      ossp-pkg/pth/pthread.pod
    1.12        +1  -1      ossp-pkg/pth/striptease.mk
    1.20        +2  -2      ossp-pkg/pth/striptease.pl
    1.19        +1  -1      ossp-pkg/pth/test_common.c
    1.12        +1  -1      ossp-pkg/pth/test_common.h
    1.57        +1  -1      ossp-pkg/pth/test_httpd.c
    1.38        +1  -1      ossp-pkg/pth/test_misc.c
    1.47        +1  -1      ossp-pkg/pth/test_mp.c
    1.24        +1  -1      ossp-pkg/pth/test_philo.c
    1.19        +1  -1      ossp-pkg/pth/test_pthread.c
    1.20        +1  -1      ossp-pkg/pth/test_select.c
    1.16        +1  -1      ossp-pkg/pth/test_sfio.c
    1.24        +1  -1      ossp-pkg/pth/test_sig.c
    1.22        +1  -1      ossp-pkg/pth/test_std.c
    1.6         +1  -1      ossp-pkg/pth/test_uctx.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.647 -r1.648 ChangeLog
  --- ossp-pkg/pth/ChangeLog	12 Jun 2006 18:04:52 -0000	1.647
  +++ ossp-pkg/pth/ChangeLog	1 Jan 2007 18:23:52 -0000	1.648
  @@ -27,6 +27,9 @@
         is finally part of the same distribution.
         [Ralf S. Engelschall]
   
  +   *) Adjusted all copyright messages for new year 2007.
  +      [Ralf S. Engelschall]
  +
     Changes between 2.0.6 and 2.0.7 (22-Nov-2005 to 08-Jun-2006)
   
      *) Upgraded build environment from GNU shtool 2.0.3 to 2.0.6
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.157 -r1.158 Makefile.in
  --- ossp-pkg/pth/Makefile.in	12 Jun 2006 18:02:52 -0000	1.157
  +++ ossp-pkg/pth/Makefile.in	1 Jan 2007 18:23:52 -0000	1.158
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/README
  ============================================================================
  $ cvs diff -u -r1.212 -r1.213 README
  --- ossp-pkg/pth/README	8 Jun 2006 18:14:22 -0000	1.212
  +++ ossp-pkg/pth/README	1 Jan 2007 18:23:52 -0000	1.213
  @@ -54,7 +54,7 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   
     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.105 -r1.106 aclocal.m4
  --- ossp-pkg/pth/aclocal.m4	8 Jun 2006 17:54:51 -0000	1.105
  +++ ossp-pkg/pth/aclocal.m4	1 Jan 2007 18:23:52 -0000	1.106
  @@ -1,6 +1,6 @@
   dnl ##
   dnl ##  GNU Pth - The GNU Portable Threads
  -dnl ##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##
   dnl ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   dnl ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/config.param
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 config.param
  --- ossp-pkg/pth/config.param	8 Jun 2006 17:54:51 -0000	1.24
  +++ ossp-pkg/pth/config.param	1 Jan 2007 18:23:52 -0000	1.25
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/configure.ac
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 configure.ac
  --- ossp-pkg/pth/configure.ac	8 Jun 2006 17:54:51 -0000	1.16
  +++ ossp-pkg/pth/configure.ac	1 Jan 2007 18:23:52 -0000	1.17
  @@ -1,6 +1,6 @@
   dnl ##
   dnl ##  GNU Pth - The GNU Portable Threads
  -dnl ##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##
   dnl ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   dnl ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ -42,7 +42,7 @@
   AC_HEADLINE(dnl
   GNU Pth, Portable Threads, dnl
   PTH_VERSION, pth_vers.c, dnl
  -[Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>])
  +[Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>])
   AC_CONFIG_PARAM(config.param)
   AC_CONFIG_HEADER(pth_acdef.h)dnl
   AC_PREFIX_DEFAULT(/usr/local)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/devtool.func
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 devtool.func
  --- ossp-pkg/pth/devtool.func	8 Jun 2006 17:54:51 -0000	1.7
  +++ ossp-pkg/pth/devtool.func	1 Jan 2007 18:23:52 -0000	1.8
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   devtool_require () {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth-config.in
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 pth-config.in
  --- ossp-pkg/pth/pth-config.in	8 Jun 2006 17:54:51 -0000	1.28
  +++ ossp-pkg/pth/pth-config.in	1 Jan 2007 18:23:52 -0000	1.29
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth-config.pod
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 pth-config.pod
  --- ossp-pkg/pth/pth-config.pod	8 Jun 2006 17:54:51 -0000	1.24
  +++ ossp-pkg/pth/pth-config.pod	1 Jan 2007 18:23:52 -0000	1.25
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth.h.in
  ============================================================================
  $ cvs diff -u -r1.146 -r1.147 pth.h.in
  --- ossp-pkg/pth/pth.h.in	8 Jun 2006 17:54:52 -0000	1.146
  +++ ossp-pkg/pth/pth.h.in	1 Jan 2007 18:23:52 -0000	1.147
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth.m4
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 pth.m4
  --- ossp-pkg/pth/pth.m4	8 Jun 2006 17:54:52 -0000	1.18
  +++ ossp-pkg/pth/pth.m4	1 Jan 2007 18:23:52 -0000	1.19
  @@ -1,6 +1,6 @@
   dnl ##
   dnl ##  GNU Pth - The GNU Portable Threads
  -dnl ##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##
   dnl ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   dnl ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth.pod
  ============================================================================
  $ cvs diff -u -r1.167 -r1.168 pth.pod
  --- ossp-pkg/pth/pth.pod	8 Jun 2006 17:54:52 -0000	1.167
  +++ ossp-pkg/pth/pth.pod	1 Jan 2007 18:23:52 -0000	1.168
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth.spec
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 pth.spec
  --- ossp-pkg/pth/pth.spec	8 Jun 2006 17:54:52 -0000	1.14
  +++ ossp-pkg/pth/pth.spec	1 Jan 2007 18:23:52 -0000	1.15
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 2000-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_acmac.h.in
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 pth_acmac.h.in
  --- ossp-pkg/pth/pth_acmac.h.in	8 Jun 2006 17:54:52 -0000	1.12
  +++ ossp-pkg/pth/pth_acmac.h.in	1 Jan 2007 18:23:52 -0000	1.13
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_attr.c
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 pth_attr.c
  --- ossp-pkg/pth/pth_attr.c	8 Jun 2006 17:54:52 -0000	1.23
  +++ ossp-pkg/pth/pth_attr.c	1 Jan 2007 18:23:52 -0000	1.24
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_cancel.c
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 pth_cancel.c
  --- ossp-pkg/pth/pth_cancel.c	8 Jun 2006 17:54:52 -0000	1.30
  +++ ossp-pkg/pth/pth_cancel.c	1 Jan 2007 18:23:52 -0000	1.31
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_clean.c
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 pth_clean.c
  --- ossp-pkg/pth/pth_clean.c	8 Jun 2006 17:54:52 -0000	1.21
  +++ ossp-pkg/pth/pth_clean.c	1 Jan 2007 18:23:52 -0000	1.22
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_compat.c
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 pth_compat.c
  --- ossp-pkg/pth/pth_compat.c	8 Jun 2006 17:54:52 -0000	1.13
  +++ ossp-pkg/pth/pth_compat.c	1 Jan 2007 18:23:52 -0000	1.14
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_data.c
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 pth_data.c
  --- ossp-pkg/pth/pth_data.c	8 Jun 2006 17:54:52 -0000	1.34
  +++ ossp-pkg/pth/pth_data.c	1 Jan 2007 18:23:52 -0000	1.35
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_debug.c
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 pth_debug.c
  --- ossp-pkg/pth/pth_debug.c	8 Jun 2006 17:54:52 -0000	1.32
  +++ ossp-pkg/pth/pth_debug.c	1 Jan 2007 18:23:52 -0000	1.33
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_errno.c
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 pth_errno.c
  --- ossp-pkg/pth/pth_errno.c	8 Jun 2006 17:54:52 -0000	1.28
  +++ ossp-pkg/pth/pth_errno.c	1 Jan 2007 18:23:52 -0000	1.29
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_event.c
  ============================================================================
  $ cvs diff -u -r1.66 -r1.67 pth_event.c
  --- ossp-pkg/pth/pth_event.c	8 Jun 2006 17:54:52 -0000	1.66
  +++ ossp-pkg/pth/pth_event.c	1 Jan 2007 18:23:53 -0000	1.67
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_ext.c
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 pth_ext.c
  --- ossp-pkg/pth/pth_ext.c	8 Jun 2006 17:54:52 -0000	1.15
  +++ ossp-pkg/pth/pth_ext.c	1 Jan 2007 18:23:53 -0000	1.16
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_fork.c
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 pth_fork.c
  --- ossp-pkg/pth/pth_fork.c	8 Jun 2006 17:54:52 -0000	1.18
  +++ ossp-pkg/pth/pth_fork.c	1 Jan 2007 18:23:53 -0000	1.19
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_high.c
  ============================================================================
  $ cvs diff -u -r1.110 -r1.111 pth_high.c
  --- ossp-pkg/pth/pth_high.c	8 Jun 2006 17:54:53 -0000	1.110
  +++ ossp-pkg/pth/pth_high.c	1 Jan 2007 18:23:53 -0000	1.111
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_lib.c
  ============================================================================
  $ cvs diff -u -r1.61 -r1.62 pth_lib.c
  --- ossp-pkg/pth/pth_lib.c	8 Jun 2006 17:54:53 -0000	1.61
  +++ ossp-pkg/pth/pth_lib.c	1 Jan 2007 18:23:53 -0000	1.62
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_mctx.c
  ============================================================================
  $ cvs diff -u -r1.62 -r1.63 pth_mctx.c
  --- ossp-pkg/pth/pth_mctx.c	8 Jun 2006 17:54:53 -0000	1.62
  +++ ossp-pkg/pth/pth_mctx.c	1 Jan 2007 18:23:53 -0000	1.63
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_msg.c
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 pth_msg.c
  --- ossp-pkg/pth/pth_msg.c	8 Jun 2006 17:54:53 -0000	1.30
  +++ ossp-pkg/pth/pth_msg.c	1 Jan 2007 18:23:53 -0000	1.31
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_p.h.in
  ============================================================================
  $ cvs diff -u -r1.39 -r1.40 pth_p.h.in
  --- ossp-pkg/pth/pth_p.h.in	8 Jun 2006 17:54:53 -0000	1.39
  +++ ossp-pkg/pth/pth_p.h.in	1 Jan 2007 18:23:53 -0000	1.40
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_pqueue.c
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 pth_pqueue.c
  --- ossp-pkg/pth/pth_pqueue.c	8 Jun 2006 17:54:53 -0000	1.34
  +++ ossp-pkg/pth/pth_pqueue.c	1 Jan 2007 18:23:53 -0000	1.35
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_ring.c
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 pth_ring.c
  --- ossp-pkg/pth/pth_ring.c	8 Jun 2006 17:54:53 -0000	1.27
  +++ ossp-pkg/pth/pth_ring.c	1 Jan 2007 18:23:53 -0000	1.28
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_sched.c
  ============================================================================
  $ cvs diff -u -r1.95 -r1.96 pth_sched.c
  --- ossp-pkg/pth/pth_sched.c	27 Nov 2006 08:14:11 -0000	1.95
  +++ ossp-pkg/pth/pth_sched.c	1 Jan 2007 18:23:53 -0000	1.96
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_string.c
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 pth_string.c
  --- ossp-pkg/pth/pth_string.c	8 Jun 2006 17:54:53 -0000	1.15
  +++ ossp-pkg/pth/pth_string.c	1 Jan 2007 18:23:53 -0000	1.16
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_sync.c
  ============================================================================
  $ cvs diff -u -r1.42 -r1.43 pth_sync.c
  --- ossp-pkg/pth/pth_sync.c	8 Jun 2006 17:54:53 -0000	1.42
  +++ ossp-pkg/pth/pth_sync.c	1 Jan 2007 18:23:53 -0000	1.43
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_syscall.c
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 pth_syscall.c
  --- ossp-pkg/pth/pth_syscall.c	8 Jun 2006 17:54:53 -0000	1.34
  +++ ossp-pkg/pth/pth_syscall.c	1 Jan 2007 18:23:53 -0000	1.35
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_tcb.c
  ============================================================================
  $ cvs diff -u -r1.44 -r1.45 pth_tcb.c
  --- ossp-pkg/pth/pth_tcb.c	8 Jun 2006 17:54:53 -0000	1.44
  +++ ossp-pkg/pth/pth_tcb.c	1 Jan 2007 18:23:53 -0000	1.45
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_time.c
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 pth_time.c
  --- ossp-pkg/pth/pth_time.c	8 Jun 2006 17:54:53 -0000	1.31
  +++ ossp-pkg/pth/pth_time.c	1 Jan 2007 18:23:53 -0000	1.32
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_uctx.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 pth_uctx.c
  --- ossp-pkg/pth/pth_uctx.c	8 Jun 2006 17:54:53 -0000	1.6
  +++ ossp-pkg/pth/pth_uctx.c	1 Jan 2007 18:23:53 -0000	1.7
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pth_util.c
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 pth_util.c
  --- ossp-pkg/pth/pth_util.c	8 Jun 2006 17:54:53 -0000	1.26
  +++ ossp-pkg/pth/pth_util.c	1 Jan 2007 18:23:53 -0000	1.27
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pthread-config.in
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 pthread-config.in
  --- ossp-pkg/pth/pthread-config.in	8 Jun 2006 17:54:54 -0000	1.24
  +++ ossp-pkg/pth/pthread-config.in	1 Jan 2007 18:23:53 -0000	1.25
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pthread-config.pod
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 pthread-config.pod
  --- ossp-pkg/pth/pthread-config.pod	8 Jun 2006 17:54:54 -0000	1.20
  +++ ossp-pkg/pth/pthread-config.pod	1 Jan 2007 18:23:53 -0000	1.21
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pthread.c
  ============================================================================
  $ cvs diff -u -r1.68 -r1.69 pthread.c
  --- ossp-pkg/pth/pthread.c	8 Jun 2006 17:54:54 -0000	1.68
  +++ ossp-pkg/pth/pthread.c	1 Jan 2007 18:23:53 -0000	1.69
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pthread.h.in
  ============================================================================
  $ cvs diff -u -r1.71 -r1.72 pthread.h.in
  --- ossp-pkg/pth/pthread.h.in	8 Jun 2006 17:54:54 -0000	1.71
  +++ ossp-pkg/pth/pthread.h.in	1 Jan 2007 18:23:53 -0000	1.72
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/pthread.pod
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 pthread.pod
  --- ossp-pkg/pth/pthread.pod	8 Jun 2006 17:54:54 -0000	1.27
  +++ ossp-pkg/pth/pthread.pod	1 Jan 2007 18:23:53 -0000	1.28
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/striptease.mk
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 striptease.mk
  --- ossp-pkg/pth/striptease.mk	8 Jun 2006 17:54:54 -0000	1.11
  +++ ossp-pkg/pth/striptease.mk	1 Jan 2007 18:23:53 -0000	1.12
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/striptease.pl
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 striptease.pl
  --- ossp-pkg/pth/striptease.pl	8 Jun 2006 17:54:54 -0000	1.19
  +++ ossp-pkg/pth/striptease.pl	1 Jan 2007 18:23:53 -0000	1.20
  @@ -1,6 +1,6 @@
   ##
   ##  GNU Pth - The GNU Portable Threads
  -##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of GNU Pth, a non-preemptive thread scheduling
   ##  library which can be found at http://www.gnu.org/software/pth/.
  @@ -89,7 +89,7 @@
   $pth_c = <<'EOT';
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_common.c
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 test_common.c
  --- ossp-pkg/pth/test_common.c	8 Jun 2006 17:54:54 -0000	1.18
  +++ ossp-pkg/pth/test_common.c	1 Jan 2007 18:23:53 -0000	1.19
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_common.h
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 test_common.h
  --- ossp-pkg/pth/test_common.h	8 Jun 2006 17:54:54 -0000	1.11
  +++ ossp-pkg/pth/test_common.h	1 Jan 2007 18:23:53 -0000	1.12
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_httpd.c
  ============================================================================
  $ cvs diff -u -r1.56 -r1.57 test_httpd.c
  --- ossp-pkg/pth/test_httpd.c	8 Jun 2006 17:54:54 -0000	1.56
  +++ ossp-pkg/pth/test_httpd.c	1 Jan 2007 18:23:53 -0000	1.57
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_misc.c
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 test_misc.c
  --- ossp-pkg/pth/test_misc.c	8 Jun 2006 17:54:54 -0000	1.37
  +++ ossp-pkg/pth/test_misc.c	1 Jan 2007 18:23:53 -0000	1.38
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_mp.c
  ============================================================================
  $ cvs diff -u -r1.46 -r1.47 test_mp.c
  --- ossp-pkg/pth/test_mp.c	8 Jun 2006 17:54:54 -0000	1.46
  +++ ossp-pkg/pth/test_mp.c	1 Jan 2007 18:23:53 -0000	1.47
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_philo.c
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 test_philo.c
  --- ossp-pkg/pth/test_philo.c	8 Jun 2006 17:54:54 -0000	1.23
  +++ ossp-pkg/pth/test_philo.c	1 Jan 2007 18:23:53 -0000	1.24
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_pthread.c
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 test_pthread.c
  --- ossp-pkg/pth/test_pthread.c	8 Jun 2006 17:54:54 -0000	1.18
  +++ ossp-pkg/pth/test_pthread.c	1 Jan 2007 18:23:53 -0000	1.19
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_select.c
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 test_select.c
  --- ossp-pkg/pth/test_select.c	8 Jun 2006 17:54:54 -0000	1.19
  +++ ossp-pkg/pth/test_select.c	1 Jan 2007 18:23:53 -0000	1.20
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_sfio.c
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 test_sfio.c
  --- ossp-pkg/pth/test_sfio.c	8 Jun 2006 17:54:54 -0000	1.15
  +++ ossp-pkg/pth/test_sfio.c	1 Jan 2007 18:23:53 -0000	1.16
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_sig.c
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 test_sig.c
  --- ossp-pkg/pth/test_sig.c	8 Jun 2006 17:54:54 -0000	1.23
  +++ ossp-pkg/pth/test_sig.c	1 Jan 2007 18:23:53 -0000	1.24
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_std.c
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 test_std.c
  --- ossp-pkg/pth/test_std.c	8 Jun 2006 17:54:54 -0000	1.21
  +++ ossp-pkg/pth/test_std.c	1 Jan 2007 18:23:53 -0000	1.22
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/pth/test_uctx.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 test_uctx.c
  --- ossp-pkg/pth/test_uctx.c	8 Jun 2006 17:54:54 -0000	1.5
  +++ ossp-pkg/pth/test_uctx.c	1 Jan 2007 18:23:53 -0000	1.6
  @@ -1,6 +1,6 @@
   /*
   **  GNU Pth - The GNU Portable Threads
  -**  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   **
   **  This file is part of GNU Pth, a non-preemptive thread scheduling
   **  library which can be found at http://www.gnu.org/software/pth/.
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan  1 19:26:35 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B9BF87528D0; Mon,  1 Jan 2007 19:26:35 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm/ ChangeLog LICENSE Makefile.in README aclocal....
Message-Id: <20070101182635.B9BF87528D0@mail.ossp.org>
Date: Mon,  1 Jan 2007 19:26:35 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Jan-2007 19:26:35
  Branch: HEAD                             Handle: 2007010118263401

  Modified files:
    ossp-pkg/mm             ChangeLog LICENSE Makefile.in README aclocal.m4
                            configure.ac mm-config.in mm-config.pod mm.h
                            mm.pod mm_alloc.c mm_core.c mm_global.c mm_lib.c
                            mm_test.c

  Log:
    Updated all copyright messages for year 2007

  Summary:
    Revision    Changes     Path
    1.61        +5  -0      ossp-pkg/mm/ChangeLog
    1.10        +2  -2      ossp-pkg/mm/LICENSE
    1.38        +2  -2      ossp-pkg/mm/Makefile.in
    1.86        +2  -2      ossp-pkg/mm/README
    1.32        +2  -2      ossp-pkg/mm/aclocal.m4
    1.9         +4  -4      ossp-pkg/mm/configure.ac
    1.15        +2  -2      ossp-pkg/mm/mm-config.in
    1.12        +2  -2      ossp-pkg/mm/mm-config.pod
    1.33        +2  -2      ossp-pkg/mm/mm.h
    1.32        +2  -2      ossp-pkg/mm/mm.pod
    1.26        +2  -2      ossp-pkg/mm/mm_alloc.c
    1.25        +2  -2      ossp-pkg/mm/mm_core.c
    1.17        +2  -2      ossp-pkg/mm/mm_global.c
    1.12        +2  -2      ossp-pkg/mm/mm_lib.c
    1.15        +2  -2      ossp-pkg/mm/mm_test.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.60 -r1.61 ChangeLog
  --- ossp-pkg/mm/ChangeLog	20 Nov 2006 19:52:14 -0000	1.60
  +++ ossp-pkg/mm/ChangeLog	1 Jan 2007 18:26:34 -0000	1.61
  @@ -9,6 +9,11 @@
    ChangeLog
    =========
   
  + Changes between 1.4.2 and 1.4.3 (15-Aug-2006 to 01-Jan-2007)
  +
  +  *) Updated all copyright messages for year 2007.
  +     [Ralf S. Engelschall]
  +
    Changes between 1.4.1 and 1.4.2 (10-Aug-2006 to 15-Aug-2006)
   
     *) Support the LDFLAGS and LIBS variables in Makefile.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/LICENSE
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 LICENSE
  --- ossp-pkg/mm/LICENSE	10 Aug 2006 19:00:32 -0000	1.9
  +++ ossp-pkg/mm/LICENSE	1 Jan 2007 18:26:34 -0000	1.10
  @@ -1,7 +1,7 @@
   
     ====================================================================
  -  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 1999-2006 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 1999-2007 The OSSP Project <http://www.ossp.org/>
   
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 Makefile.in
  --- ossp-pkg/mm/Makefile.in	20 Nov 2006 19:52:14 -0000	1.37
  +++ ossp-pkg/mm/Makefile.in	1 Jan 2007 18:26:34 -0000	1.38
  @@ -1,6 +1,6 @@
   ## ====================================================================
  -## Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  -## Copyright (c) 1999-2006 The OSSP Project <http://www.ossp.org/>
  +## Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
  +## Copyright (c) 1999-2007 The OSSP Project <http://www.ossp.org/>
   ##
   ## Redistribution and use in source and binary forms, with or without
   ## modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/README
  ============================================================================
  $ cvs diff -u -r1.85 -r1.86 README
  --- ossp-pkg/mm/README	15 Aug 2006 07:04:19 -0000	1.85
  +++ ossp-pkg/mm/README	1 Jan 2007 18:26:34 -0000	1.86
  @@ -5,8 +5,8 @@
     |_|_|_|  \___/|____/____/|_|     |_| |_| |_|_| |_| |_|
   
     OSSP mm - Shared Memory Allocation
  -  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 1999-2006 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 1999-2007 The OSSP Project <http://www.ossp.org/>
     Version 1.4.2 (15-Aug-2006)
   
     OSSP mm is a 2-layer abstraction library which simplifies the usage of
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 aclocal.m4
  --- ossp-pkg/mm/aclocal.m4	10 Aug 2006 19:00:33 -0000	1.31
  +++ ossp-pkg/mm/aclocal.m4	1 Jan 2007 18:26:34 -0000	1.32
  @@ -1,6 +1,6 @@
   ## ====================================================================
  -## Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  -## Copyright (c) 1999-2006 The OSSP Project <http://www.ossp.org/>
  +## Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
  +## Copyright (c) 1999-2007 The OSSP Project <http://www.ossp.org/>
   ##
   ## Redistribution and use in source and binary forms, with or without
   ## modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/configure.ac
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 configure.ac
  --- ossp-pkg/mm/configure.ac	10 Aug 2006 19:00:33 -0000	1.8
  +++ ossp-pkg/mm/configure.ac	1 Jan 2007 18:26:34 -0000	1.9
  @@ -1,6 +1,6 @@
   ## ====================================================================
  -## Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  -## Copyright (c) 1999-2006 The OSSP Project <http://www.ossp.org/>
  +## Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
  +## Copyright (c) 1999-2007 The OSSP Project <http://www.ossp.org/>
   ##
   ## Redistribution and use in source and binary forms, with or without
   ## modification, are permitted provided that the following conditions
  @@ -64,8 +64,8 @@
   
   dnl #   friendly header ;-)
   echo "Configuring ${T_MD}OSSP mm${T_ME} (Shared Memory Allocation), Version ${T_MD}${MM_VERSION_STR}${T_ME}"
  -echo "Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>"
  -echo "Copyright (c) 1999-2006 The OSSP Project <http://www.ossp.org/>"
  +echo "Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>"
  +echo "Copyright (c) 1999-2007 The OSSP Project <http://www.ossp.org/>"
   echo "Platform: ${T_MD}${PLATFORM}${T_ME}"
   
   dnl #
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm-config.in
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 mm-config.in
  --- ossp-pkg/mm/mm-config.in	10 Aug 2006 19:07:30 -0000	1.14
  +++ ossp-pkg/mm/mm-config.in	1 Jan 2007 18:26:34 -0000	1.15
  @@ -3,8 +3,8 @@
   ## mm-config -- MM library build configuration utility
   ##
   ## ====================================================================
  -## Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  -## Copyright (c) 1999-2006 The OSSP Project <http://www.ossp.org/>
  +## Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
  +## Copyright (c) 1999-2007 The OSSP Project <http://www.ossp.org/>
   ##
   ## Redistribution and use in source and binary forms, with or without
   ## modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm-config.pod
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 mm-config.pod
  --- ossp-pkg/mm/mm-config.pod	10 Aug 2006 19:00:33 -0000	1.11
  +++ ossp-pkg/mm/mm-config.pod	1 Jan 2007 18:26:34 -0000	1.12
  @@ -1,6 +1,6 @@
   ## ====================================================================
  -## Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  -## Copyright (c) 1999-2006 The OSSP Project <http://www.ossp.org/>
  +## Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
  +## Copyright (c) 1999-2007 The OSSP Project <http://www.ossp.org/>
   ##
   ## Redistribution and use in source and binary forms, with or without
   ## modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm.h
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 mm.h
  --- ossp-pkg/mm/mm.h	10 Aug 2006 19:00:33 -0000	1.32
  +++ ossp-pkg/mm/mm.h	1 Jan 2007 18:26:34 -0000	1.33
  @@ -1,6 +1,6 @@
   /* ====================================================================
  - * Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  - * Copyright (c) 1999-2006 The OSSP Project <http://www.ossp.org/>
  + * Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
  + * Copyright (c) 1999-2007 The OSSP Project <http://www.ossp.org/>
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm.pod
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 mm.pod
  --- ossp-pkg/mm/mm.pod	15 Aug 2006 06:58:11 -0000	1.31
  +++ ossp-pkg/mm/mm.pod	1 Jan 2007 18:26:34 -0000	1.32
  @@ -1,6 +1,6 @@
   ## ====================================================================
  -## Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  -## Copyright (c) 1999-2006 The OSSP Project <http://www.ossp.org/>
  +## Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
  +## Copyright (c) 1999-2007 The OSSP Project <http://www.ossp.org/>
   ##
   ## Redistribution and use in source and binary forms, with or without
   ## modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm_alloc.c
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 mm_alloc.c
  --- ossp-pkg/mm/mm_alloc.c	10 Aug 2006 19:00:33 -0000	1.25
  +++ ossp-pkg/mm/mm_alloc.c	1 Jan 2007 18:26:34 -0000	1.26
  @@ -1,6 +1,6 @@
   /* ====================================================================
  - * Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  - * Copyright (c) 1999-2006 The OSSP Project <http://www.ossp.org/>
  + * Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
  + * Copyright (c) 1999-2007 The OSSP Project <http://www.ossp.org/>
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm_core.c
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 mm_core.c
  --- ossp-pkg/mm/mm_core.c	10 Aug 2006 19:00:33 -0000	1.24
  +++ ossp-pkg/mm/mm_core.c	1 Jan 2007 18:26:34 -0000	1.25
  @@ -1,6 +1,6 @@
   /* ====================================================================
  - * Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  - * Copyright (c) 1999-2006 The OSSP Project <http://www.ossp.org/>
  + * Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
  + * Copyright (c) 1999-2007 The OSSP Project <http://www.ossp.org/>
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm_global.c
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 mm_global.c
  --- ossp-pkg/mm/mm_global.c	10 Aug 2006 19:00:33 -0000	1.16
  +++ ossp-pkg/mm/mm_global.c	1 Jan 2007 18:26:34 -0000	1.17
  @@ -1,6 +1,6 @@
   /* ====================================================================
  - * Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  - * Copyright (c) 1999-2006 The OSSP Project <http://www.ossp.org/>
  + * Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
  + * Copyright (c) 1999-2007 The OSSP Project <http://www.ossp.org/>
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm_lib.c
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 mm_lib.c
  --- ossp-pkg/mm/mm_lib.c	10 Aug 2006 19:00:33 -0000	1.11
  +++ ossp-pkg/mm/mm_lib.c	1 Jan 2007 18:26:34 -0000	1.12
  @@ -1,6 +1,6 @@
   /* ====================================================================
  - * Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  - * Copyright (c) 1999-2006 The OSSP Project <http://www.ossp.org/>
  + * Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
  + * Copyright (c) 1999-2007 The OSSP Project <http://www.ossp.org/>
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm_test.c
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 mm_test.c
  --- ossp-pkg/mm/mm_test.c	10 Aug 2006 19:00:33 -0000	1.14
  +++ ossp-pkg/mm/mm_test.c	1 Jan 2007 18:26:35 -0000	1.15
  @@ -1,6 +1,6 @@
   /* ====================================================================
  - * Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  - * Copyright (c) 1999-2006 The OSSP Project <http://www.ossp.org/>
  + * Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
  + * Copyright (c) 1999-2007 The OSSP Project <http://www.ossp.org/>
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan  1 19:29:19 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 48003752896; Mon,  1 Jan 2007 19:29:19 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/mm/ ChangeLog THANKS mm_global.c
Message-Id: <20070101182919.48003752896@mail.ossp.org>
Date: Mon,  1 Jan 2007 19:29:19 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Jan-2007 19:29:19
  Branch: HEAD                             Handle: 2007010118291801

  Modified files:
    ossp-pkg/mm             ChangeLog THANKS mm_global.c

  Log:
    Fix sanity check on "mm_global" variable in MM_permission().
    
    Submitted by: Michael Durket <durket@hw-durket.stanford.edu>

  Summary:
    Revision    Changes     Path
    1.62        +3  -0      ossp-pkg/mm/ChangeLog
    1.20        +1  -0      ossp-pkg/mm/THANKS
    1.18        +1  -1      ossp-pkg/mm/mm_global.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.61 -r1.62 ChangeLog
  --- ossp-pkg/mm/ChangeLog	1 Jan 2007 18:26:34 -0000	1.61
  +++ ossp-pkg/mm/ChangeLog	1 Jan 2007 18:29:18 -0000	1.62
  @@ -11,6 +11,9 @@
   
    Changes between 1.4.2 and 1.4.3 (15-Aug-2006 to 01-Jan-2007)
   
  +  *) Fix sanity check on "mm_global" variable in MM_permission().
  +     [Michael Durket <durket@hw-durket.stanford.edu>]
  +
     *) Updated all copyright messages for year 2007.
        [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/THANKS
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 THANKS
  --- ossp-pkg/mm/THANKS	20 Nov 2006 19:52:14 -0000	1.19
  +++ ossp-pkg/mm/THANKS	1 Jan 2007 18:29:18 -0000	1.20
  @@ -24,6 +24,7 @@
       o  Neil Conway                 <neilc@samurai.com>
       o  Alexander Demenchuk         <alder@untech.com>
       o  Jason Dillon                <jason@planet57.com>
  +    o  Michael Durket              <durket@hw-durket.stanford.edu>
       o  Alexander Farber            <farber@cpan.org>
       o  Joe France                  <france@sysar.com>
       o  Richard Furda               <riso@best.ca>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/mm/mm_global.c
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 mm_global.c
  --- ossp-pkg/mm/mm_global.c	1 Jan 2007 18:26:34 -0000	1.17
  +++ ossp-pkg/mm/mm_global.c	1 Jan 2007 18:29:19 -0000	1.18
  @@ -61,7 +61,7 @@
   
   int MM_permission(mode_t mode, uid_t owner, gid_t group)
   {
  -    if (mm_global != NULL)
  +    if (mm_global == NULL)
           return -1;
       return mm_permission(mm_global, mode, owner, group);
   }
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jan  1 19:39:52 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 80044752806; Mon,  1 Jan 2007 19:39:52 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog THANKS ossp-pkg/uuid/php/ uuid.c
Message-Id: <20070101183952.80044752806@mail.ossp.org>
Date: Mon,  1 Jan 2007 19:39:52 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Jan-2007 19:39:52
  Branch: HEAD                             Handle: 2007010118395200

  Modified files:
    ossp-pkg/uuid           ChangeLog THANKS
    ossp-pkg/uuid/php       uuid.c

  Log:
    Fix "uuid_export" function in PHP bindings under
    UUID_FMT_SIV, UUID_FMT_STR and UUID_FMT_TXT where the
    NUL-termination character should be not passed back to PHP.

  Summary:
    Revision    Changes     Path
    1.143       +5  -0      ossp-pkg/uuid/ChangeLog
    1.13        +1  -0      ossp-pkg/uuid/THANKS
    1.10        +4  -0      ossp-pkg/uuid/php/uuid.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.142 -r1.143 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	1 Jan 2007 18:14:54 -0000	1.142
  +++ ossp-pkg/uuid/ChangeLog	1 Jan 2007 18:39:52 -0000	1.143
  @@ -13,6 +13,11 @@
   
     Changes between 1.5.1 and 1.6.0 (31-Jul-2006 to 05-Oct-2006)
   
  +   o Fix "uuid_export" function in PHP bindings under
  +     UUID_FMT_SIV, UUID_FMT_STR and UUID_FMT_TXT where the
  +     NUL-termination character should be not passed back to PHP.
  +     [Neil Caunt <retardis@gmail.com>, Ralf S. Engelschall]
  +
      o Adjust copyright messages for new year 2007.
        [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/THANKS
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 THANKS
  --- ossp-pkg/uuid/THANKS	6 Oct 2006 08:32:40 -0000	1.12
  +++ ossp-pkg/uuid/THANKS	1 Jan 2007 18:39:52 -0000	1.13
  @@ -12,6 +12,7 @@
     bugfixes, hints, gave platform feedback, etc. (in alphabetical order):
   
       o  Matthias Andree             <matthias.andree@gmx.de>
  +    o  Neil Caunt                  <retardis@gmail.com> 
       o  Neil Conway                 <neilc@samurai.com>
       o  M. Daniel                   <mdaniel@scdi.com>
       o  Simon "janus" Dassow        <janus@errornet.de>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/php/uuid.c
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 uuid.c
  --- ossp-pkg/uuid/php/uuid.c	1 Jan 2007 18:14:58 -0000	1.9
  +++ ossp-pkg/uuid/php/uuid.c	1 Jan 2007 18:39:52 -0000	1.10
  @@ -458,6 +458,10 @@
           php_error_docref(NULL TSRMLS_CC, E_WARNING, "uuid_export: %s", uuid_error(rc));
           RETURN_LONG((long)rc);
       }
  +    if (fmt == UUID_FMT_SIV)
  +        data_len = strlen((char *)data_ptr);
  +    else if (fmt == UUID_FMT_STR || fmt == UUID_FMT_TXT)
  +        data_len--; /* PHP doesn't wish NUL-termination on strings */
       ZVAL_STRINGL(z_data, data_ptr, data_len, 1);
       free(data_ptr);
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jan  2 10:02:49 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id BD6697528E8; Tue,  2 Jan 2007 10:02:48 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: MOZILLA: ossp-pkg/js/src/ .cvsignore Makefile.in Makefile....
Message-Id: <20070102090248.BD6697528E8@mail.ossp.org>
Date: Tue,  2 Jan 2007 10:02:48 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Jan-2007 10:02:48
  Branch: MOZILLA                          Handle: -NONE-

  Touched files:            (Branch: MOZILLA)
    ossp-pkg/js/src         .cvsignore Makefile.in Makefile.ref README.html
                            SpiderMonkey.rsp config.mk js.c js.mak js.mdp
                            js.msg js.pkg js3240.rc jsOS240.def jsapi.c
                            jsapi.h jsarena.c jsarena.h jsarray.c jsarray.h
                            jsatom.c jsatom.h jsbit.h jsbool.c jsbool.h
                            jsclist.h jscntxt.c jscntxt.h jscompat.h
                            jsconfig.h jsconfig.mk jscpucfg.c jscpucfg.h
                            jsdate.c jsdate.h jsdbgapi.c jsdbgapi.h jsdhash.c
                            jsdhash.h jsdtoa.c jsdtoa.h jsemit.c jsemit.h
                            jsexn.c jsexn.h jsfile.c jsfile.h jsfile.msg
                            jsfun.c jsfun.h jsgc.c jsgc.h jshash.h jsify.pl
                            jsinterp.c jsinterp.h jslibmath.h jslock.c
                            jslock.h jslocko.asm jslog2.c jslong.c jslong.h
                            jsmath.c jsmath.h jsnum.c jsnum.h jsobj.c jsobj.h
                            jsopcode.c jsopcode.h jsopcode.tbl jsosdep.h
                            jsotypes.h jsparse.c jsparse.h jsprf.c jsprf.h
                            jsprvtd.h jspubtd.h jsregexp.c jsregexp.h jsscan.c
                            jsscan.h jsscope.c jsscope.h jsscript.c jsscript.h
                            jsshell.msg jsstddef.h jsstr.c jsstr.h jstypes.h
                            jsutil.c jsutil.h jsxdrapi.c jsxdrapi.h jsxml.c
                            jsxml.h lock_SunOS.s perfect.js plify_jsdhash.sed
                            prmjtime.c prmjtime.h resource.h rules.mk
                            win32.order
    ossp-pkg/js/src/config  AIX4.1.mk AIX4.2.mk AIX4.3.mk Darwin.mk
                            Darwin1.3.mk Darwin1.4.mk Darwin5.2.mk
                            Darwin5.3.mk HP-UXB.10.10.mk HP-UXB.10.20.mk
                            HP-UXB.11.00.mk IRIX.mk IRIX5.3.mk IRIX6.1.mk
                            IRIX6.2.mk IRIX6.3.mk IRIX6.5.mk Linux_All.mk
                            Mac_OS10.0.mk OSF1V4.0.mk OSF1V5.0.mk
                            SunOS4.1.4.mk SunOS5.3.mk SunOS5.4.mk
                            SunOS5.5.1.mk SunOS5.5.mk SunOS5.6.mk SunOS5.7.mk
                            SunOS5.8.mk SunOS5.9.mk WINNT4.0.mk WINNT5.0.mk
                            WINNT5.1.mk WINNT5.2.mk dgux.mk
    ossp-pkg/js/src/editline
                            Makefile.ref README editline.3 editline.c
                            editline.h sysunix.c unix.h
    ossp-pkg/js/src/fdlibm  .cvsignore Makefile.in Makefile.ref e_acos.c
                            e_acosh.c e_asin.c e_atan2.c e_atanh.c e_cosh.c
                            e_exp.c e_fmod.c e_gamma.c e_gamma_r.c e_hypot.c
                            e_j0.c e_j1.c e_jn.c e_lgamma.c e_lgamma_r.c
                            e_log.c e_log10.c e_pow.c e_rem_pio2.c
                            e_remainder.c e_scalb.c e_sinh.c e_sqrt.c fdlibm.h
                            fdlibm.mak fdlibm.mdp k_cos.c k_rem_pio2.c k_sin.c
                            k_standard.c k_tan.c s_asinh.c s_atan.c s_cbrt.c
                            s_ceil.c s_copysign.c s_cos.c s_erf.c s_expm1.c
                            s_fabs.c s_finite.c s_floor.c s_frexp.c s_ilogb.c
                            s_isnan.c s_ldexp.c s_lib_version.c s_log1p.c
                            s_logb.c s_matherr.c s_modf.c s_nextafter.c
                            s_rint.c s_scalbn.c s_signgam.c s_significand.c
                            s_sin.c s_tan.c s_tanh.c w_acos.c w_acosh.c
                            w_asin.c w_atan2.c w_atanh.c w_cosh.c w_exp.c
                            w_fmod.c w_gamma.c w_gamma_r.c w_hypot.c w_j0.c
                            w_j1.c w_jn.c w_lgamma.c w_lgamma_r.c w_log.c
                            w_log10.c w_pow.c w_remainder.c w_scalb.c w_sinh.c
                            w_sqrt.c
    ossp-pkg/js/src/perlconnect
                            .cvsignore JS.def JS.dsp JS.pm JS.xs Makefile.PL
                            Makefile.ref PerlConnect.dsp PerlConnect.dsw
                            PerlConnect.pm PerlConnectShell.dsp README.html
                            bg.jpg jsperl.c jsperl.h jsperlbuild.pl
                            jsperlpvt.h test.js test.pl typemap

  Log:
    Import new upstream version: Mozilla JavaScript (SpiderMonkey) 1.6 as of 2007-01-02
    
    [Release Tag: MOZILLA_JS_1_6_20070102]

  Summary:
    Revision    Changes     Path
  ____________________________________________________________________________

From ossp-cvs-owner@ossp.org  Tue Jan  2 10:06:10 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id D090B75289B; Tue,  2 Jan 2007 10:06:09 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ ChangeLog
Message-Id: <20070102090609.D090B75289B@mail.ossp.org>
Date: Tue,  2 Jan 2007 10:06:09 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Jan-2007 10:06:09
  Branch: HEAD                             Handle: 2007010209060900

  Modified files:
    ossp-pkg/js             ChangeLog

  Log:
    remember upgrades

  Summary:
    Revision    Changes     Path
    1.34        +5  -2      ossp-pkg/js/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 ChangeLog
  --- ossp-pkg/js/ChangeLog	16 Sep 2006 08:32:24 -0000	1.33
  +++ ossp-pkg/js/ChangeLog	2 Jan 2007 09:06:09 -0000	1.34
  @@ -11,9 +11,12 @@
   
     This is a list of all changes to OSSP js.
   
  -  Changes between 1.6.20060820 and 1.6.20060916 (2006-08-20 to 2006-09-16)
  +  Changes between 1.6.20060820 and 1.6.20070102 (2006-08-20 to 2007-01-02)
   
  -   o Upgrade to upstream sources as of 2006-09-16.
  +   o Upgrade to JavaScript 1.6 upstream sources as of 2007-01-02.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +   o Upgrade to JavaScript 1.6 upstream sources as of 2006-09-16.
        [Ralf S. Engelschall <rse@engelschall.com>]
   
     Changes between 1.6.20060803 and 1.6.20060820 (2006-08-03 to 2006-08-20)
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  8 10:30:10 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 8EE7A7528A2; Thu,  8 Feb 2007 10:30:10 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ ChangeLog Makefile.in jslint.js jspack.js
Message-Id: <20070208093010.8EE7A7528A2@mail.ossp.org>
Date: Thu,  8 Feb 2007 10:30:10 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Feb-2007 10:30:10
  Branch: HEAD                             Handle: 2007020809300900

  Added files:
    ossp-pkg/js             jspack.js
  Modified files:
    ossp-pkg/js             ChangeLog Makefile.in jslint.js

  Log:
    add jslint copyright header and add jspack script

  Summary:
    Revision    Changes     Path
    1.35        +6  -0      ossp-pkg/js/ChangeLog
    1.29        +1  -0      ossp-pkg/js/Makefile.in
    1.2         +34 -0      ossp-pkg/js/jslint.js
    1.1         +514 -0     ossp-pkg/js/jspack.js
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 ChangeLog
  --- ossp-pkg/js/ChangeLog	2 Jan 2007 09:06:09 -0000	1.34
  +++ ossp-pkg/js/ChangeLog	8 Feb 2007 09:30:09 -0000	1.35
  @@ -13,6 +13,12 @@
   
     Changes between 1.6.20060820 and 1.6.20070102 (2006-08-20 to 2007-01-02)
   
  +   o Added jspack, an adaption of Dean Edwards JavaScript packer
  +     <http://dean.edwards.name/packer/>, version 2.0.2, for use as a
  +     stand-alone Unix tool under the CLI of the OSSP js JavaScript
  +     engine.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
      o Upgrade to JavaScript 1.6 upstream sources as of 2007-01-02.
        [Ralf S. Engelschall <rse@engelschall.com>]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 Makefile.in
  --- ossp-pkg/js/Makefile.in	10 Aug 2006 19:55:51 -0000	1.28
  +++ ossp-pkg/js/Makefile.in	8 Feb 2007 09:30:09 -0000	1.29
  @@ -191,6 +191,7 @@
   	$(SHTOOL) install -c -m 755 js-config.sh $(DESTDIR)$(bindir)/js-config
   	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 755 js $(DESTDIR)$(bindir)/
   	$(SHTOOL) install -e 's;#!\./js;#!$(bindir)/js;' -c -m 755 jslint.js $(DESTDIR)$(bindir)/jslint
  +	$(SHTOOL) install -e 's;#!\./js;#!$(bindir)/js;' -c -m 755 jspack.js $(DESTDIR)$(bindir)/jspack
   	@if [ ".$(WITH_PERL)" = ".yes" ]; then \
   	    (cd src/perlconnect; $(MAKE) $(MFLAGS) install DESTDIR=$(DESTDIR)); \
   	fi
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/jslint.js
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 jslint.js
  --- ossp-pkg/js/jslint.js	23 Jul 2006 19:11:49 -0000	1.1
  +++ ossp-pkg/js/jslint.js	8 Feb 2007 09:30:09 -0000	1.2
  @@ -1,4 +1,38 @@
   #!./js
  +/*
  +**  OSSP js - JavaScript Engine
  +**  Copyright (c) 1998-2006 Mozilla <http://www.mozilla.org/>
  +**
  +**  This file is part of OSSP js, a distribution of the Mozilla JavaScript
  +**  reference implementation, which can found at http://www.ossp.org/pkg/lib/js/
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  jslint.js: JavaScript Linter
  +**  Copyright (c) 2005 Douglas Crockford <http://www.jslint.com/>
  +**  Copyright (c) 2006 Ralf S. Engelschall <rse@engelschall.com> 
  +**
  +**  This is an adaption of Douglas Crockford's JavaScript linter
  +**  <http://www.jslint.com/>, version 2006-06-12, for use as a
  +**  stand-alone Unix tool under the CLI of the OSSP js JavaScript
  +**  engine.
  +*/
   
   /* ============================================================== */
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/jspack.js
  ============================================================================
  $ cvs diff -u -r0 -r1.1 jspack.js
  --- /dev/null	2007-02-08 10:30:07 +0100
  +++ jspack.js	2007-02-08 10:30:10 +0100
  @@ -0,0 +1,514 @@
  +#!./js
  +/*
  +**  OSSP js - JavaScript Engine
  +**  Copyright (c) 1998-2006 Mozilla <http://www.mozilla.org/>
  +**
  +**  This file is part of OSSP js, a distribution of the Mozilla JavaScript
  +**  reference implementation, which can found at http://www.ossp.org/pkg/lib/js/
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  jspack.js: JavaScript Packer
  +**  Copyright (c) 2005 Dean Edwards <http://dean.edwards.name/>
  +**  Copyright (c) 2007 Ralf S. Engelschall <rse@engelschall.com> 
  +**
  +**  This is an adaption of Dean Edwards' JavaScript packer
  +**  <http://dean.edwards.name/packer/>, version 2.0.2, for use as a
  +**  stand-alone Unix tool under the CLI of the OSSP js JavaScript
  +**  engine.
  +*/
  +
  +/*  ==============================================================  */
  +
  +/*
  +    ParseMaster, version 1.0.2 (2005-08-19)
  +    Copyright 2005, Dean Edwards
  +    License: http://creativecommons.org/licenses/LGPL/2.1/
  +*/
  +
  +/* a multi-pattern parser */
  +
  +// KNOWN BUG: erroneous behavior when using escapeChar with a replacement value that is a function
  +
  +function ParseMaster() {
  +    // constants
  +    var $EXPRESSION = 0, $REPLACEMENT = 1, $LENGTH = 2;
  +    // used to determine nesting levels
  +    var $GROUPS = /\(/g, $SUB_REPLACE = /\$\d/, $INDEXED = /^\$\d+$/,
  +        $TRIM = /(['"])\1\+(.*)\+\1\1$/, $$ESCAPE = /\\./g, $QUOTE = /'/,
  +        $$DELETED = /\x01[^\x01]*\x01/g;
  +    var self = this;
  +    // public
  +    this.add = function($expression, $replacement) {
  +        if (!$replacement) $replacement = "";
  +        // count the number of sub-expressions
  +        //  - add one because each pattern is itself a sub-expression
  +        var $length = (_internalEscape(String($expression)).match($GROUPS) || "").length + 1;
  +        // does the pattern deal with sub-expressions?
  +        if ($SUB_REPLACE.test($replacement)) {
  +            // a simple lookup? (e.g. "$2")
  +            if ($INDEXED.test($replacement)) {
  +                // store the index (used for fast retrieval of matched strings)
  +                $replacement = parseInt($replacement.slice(1)) - 1;
  +            } else { // a complicated lookup (e.g. "Hello $2 $1")
  +                // build a function to do the lookup
  +                var i = $length;
  +                var $quote = $QUOTE.test(_internalEscape($replacement)) ? '"' : "'";
  +                while (i) $replacement = $replacement.split("$" + i--).join($quote + "+a[o+" + i + "]+" + $quote);
  +                $replacement = new Function("a,o", "return" + $quote + $replacement.replace($TRIM, "$1") + $quote);
  +            }
  +        }
  +        // pass the modified arguments
  +        _add($expression || "/^$/", $replacement, $length);
  +    };
  +    // execute the global replacement
  +    this.exec = function($string) {
  +        _escaped.length = 0;
  +        return _unescape(_escape($string, this.escapeChar).replace(
  +            new RegExp(_patterns, this.ignoreCase ? "gi" : "g"), _replacement), this.escapeChar).replace($$DELETED, "");
  +    };
  +    // clear the patterns collection so that this object may be re-used
  +    this.reset = function() {
  +        _patterns.length = 0;
  +    };
  +
  +    // private
  +    var _escaped = [];  // escaped characters
  +    var _patterns = []; // patterns stored by index
  +    var _toString = function(){return "(" + String(this[$EXPRESSION]).slice(1, -1) + ")"};
  +    _patterns.toString = function(){return this.join("|")};
  +    // create and add a new pattern to the patterns collection
  +    function _add() {
  +        arguments.toString = _toString;
  +        // store the pattern - as an arguments object (i think this is quicker..?)
  +        _patterns[_patterns.length] = arguments;
  +    }
  +    // this is the global replace function (it's quite complicated)
  +    function _replacement() {
  +        if (!arguments[0]) return "";
  +        var i = 1, j = 0, $pattern;
  +        // loop through the patterns
  +        while ($pattern = _patterns[j++]) {
  +            // do we have a result?
  +            if (arguments[i]) {
  +                var $replacement = $pattern[$REPLACEMENT];
  +                switch (typeof $replacement) {
  +                    case "function": return $replacement(arguments, i);
  +                    case "number": return arguments[$replacement + i];
  +                }
  +                var $delete = (arguments[i].indexOf(self.escapeChar) == -1) ? "" :
  +                    "\x01" + arguments[i] + "\x01";
  +                return $delete + $replacement;
  +            // skip over references to sub-expressions
  +            } else i += $pattern[$LENGTH];
  +        }
  +    };
  +    // encode escaped characters
  +    function _escape($string, $escapeChar) {
  +        return $escapeChar ? $string.replace(new RegExp("\\" + $escapeChar + "(.)", "g"), function($match, $char) {
  +            _escaped[_escaped.length] = $char;
  +            return $escapeChar;
  +        }) : $string;
  +    };
  +    // decode escaped characters
  +    function _unescape($string, $escapeChar) {
  +        var i = 0;
  +        return $escapeChar ? $string.replace(new RegExp("\\" + $escapeChar, "g"), function() {
  +            return $escapeChar + (_escaped[i++] || "");
  +        }) : $string;
  +    };
  +    function _internalEscape($string) {
  +        return $string.replace($$ESCAPE, "");
  +    };
  +};
  +ParseMaster.prototype = {
  +    constructor: ParseMaster,
  +    ignoreCase: false,
  +    escapeChar: ""
  +};
  +
  +/*
  +    packer, version 2.0.2 (2005-08-19)
  +    Copyright 2004-2005, Dean Edwards
  +    License: http://creativecommons.org/licenses/LGPL/2.1/
  +*/
  +
  +function pack(_script, _encoding, _fastDecode, _specialChars) {
  +    // constants
  +    var $IGNORE = "$1";
  +
  +    // validate parameters
  +    _script += "\n";
  +    _encoding = Math.min(parseInt(_encoding), 95);
  +
  +    // apply all parsing routines
  +    function _pack($script) {
  +        var i, $parse;
  +        for (i = 0; ($parse = _parsers[i]); i++) {
  +            $script = $parse($script);
  +        }
  +        return $script;
  +    };
  +
  +    // unpacking function - this is the boot strap function
  +    //  data extracted from this packing routine is passed to
  +    //  this function when decoded in the target
  +    var _unpack = function($packed, $ascii, $count, $keywords, $encode, $decode) {
  +        while ($count--)
  +            if ($keywords[$count])
  +                $packed = $packed.replace(new RegExp('\\b' + $encode($count) + '\\b', 'g'), $keywords[$count]);
  +        return $packed;
  +    };
  +
  +    // code-snippet inserted into the unpacker to speed up decoding
  +    var _decode = function() {
  +        // does the browser support String.replace where the
  +        //  replacement value is a function?
  +        if (!''.replace(/^/, String)) {
  +            // decode all the values we need
  +            while ($count--) $decode[$encode($count)] = $keywords[$count] || $encode($count);
  +            // global replacement function
  +            $keywords = [function($encoded){return $decode[$encoded]}];
  +            // generic match
  +            $encode = function(){return'\\w+'};
  +            // reset the loop counter -  we are now doing a global replace
  +            $count = 1;
  +        }
  +    };
  +
  +    // keep a list of parsing functions, they'll be executed all at once
  +    var _parsers = [];
  +    function _addParser($parser) {
  +        _parsers[_parsers.length] = $parser;
  +    };
  +
  +    // zero encoding - just removal of white space and comments
  +    function _basicCompression($script) {
  +        var $parser = new ParseMaster;
  +        // make safe
  +        $parser.escapeChar = "\\";
  +        // protect strings
  +        $parser.add(/'[^'\n\r]*'/, $IGNORE);
  +        $parser.add(/"[^"\n\r]*"/, $IGNORE);
  +        // remove comments
  +        $parser.add(/\/\/[^\n\r]*[\n\r]/, " ");
  +        $parser.add(/\/\*[^*]*\*+([^\/][^*]*\*+)*\//, " ");
  +        // protect regular expressions
  +        $parser.add(/\s+(\/[^\/\n\r\*][^\/\n\r]*\/g?i?)/, "$2"); // IGNORE
  +        $parser.add(/[^\w\x24\/'"*)\?:]\/[^\/\n\r\*][^\/\n\r]*\/g?i?/, $IGNORE);
  +        // remove: ;;; doSomething();
  +        if (_specialChars) $parser.add(/;;;[^\n\r]+[\n\r]/);
  +        // remove redundant semi-colons
  +        $parser.add(/\(;;\)/, $IGNORE); // protect for (;;) loops
  +        $parser.add(/;+\s*([};])/, "$2");
  +        // apply the above
  +        $script = $parser.exec($script);
  +
  +        // remove white-space
  +        $parser.add(/(\b|\x24)\s+(\b|\x24)/, "$2 $3");
  +        $parser.add(/([+\-])\s+([+\-])/, "$2 $3");
  +        $parser.add(/\s+/, "");
  +        // done
  +        return $parser.exec($script);
  +    };
  +
  +    function _encodeSpecialChars($script) {
  +        var $parser = new ParseMaster;
  +        // replace: $name -> n, $$name -> na
  +        $parser.add(/((\x24+)([a-zA-Z$_]+))(\d*)/, function($match, $offset) {
  +            var $length = $match[$offset + 2].length;
  +            var $start = $length - Math.max($length - $match[$offset + 3].length, 0);
  +            return $match[$offset + 1].substr($start, $length) + $match[$offset + 4];
  +        });
  +        // replace: _name -> _0, double-underscore (__name) is ignored
  +        var $regexp = /\b_[A-Za-z\d]\w*/;
  +        // build the word list
  +        var $keywords = _analyze($script, _globalize($regexp), _encodePrivate);
  +        // quick ref
  +        var $encoded = $keywords.$encoded;
  +        $parser.add($regexp, function($match, $offset) {
  +            return $encoded[$match[$offset]];
  +        });
  +        return $parser.exec($script);
  +    };
  +
  +    function _encodeKeywords($script) {
  +        // escape high-ascii values already in the script (i.e. in strings)
  +        if (_encoding > 62) $script = _escape95($script);
  +        // create the parser
  +        var $parser = new ParseMaster;
  +        var $encode = _getEncoder(_encoding);
  +        // for high-ascii, don't encode single character low-ascii
  +        var $regexp = (_encoding > 62) ? /\w\w+/ : /\w+/;
  +        // build the word list
  +        $keywords = _analyze($script, _globalize($regexp), $encode);
  +        var $encoded = $keywords.$encoded;
  +        // encode
  +        $parser.add($regexp, function($match, $offset) {
  +        return $encoded[$match[$offset]];
  +        });
  +        // if encoded, wrap the script in a decoding function
  +        return $script && _bootStrap($parser.exec($script), $keywords);
  +    };
  +
  +    function _analyze($script, $regexp, $encode) {
  +        // analyse
  +        // retreive all words in the script
  +        var $all = $script.match($regexp);
  +        var $$sorted = []; // list of words sorted by frequency
  +        var $$encoded = {}; // dictionary of word->encoding
  +        var $$protected = {}; // instances of "protected" words
  +        if ($all) {
  +            var $unsorted = []; // same list, not sorted
  +            var $protected = {}; // "protected" words (dictionary of word->"word")
  +            var $values = {}; // dictionary of charCode->encoding (eg. 256->ff)
  +            var $count = {}; // word->count
  +            var i = $all.length, j = 0, $word;
  +            // count the occurrences - used for sorting later
  +            do {
  +                $word = "$" + $all[--i];
  +                if (!$count[$word]) {
  +                    $count[$word] = 0;
  +                    $unsorted[j] = $word;
  +                    // make a dictionary of all of the protected words in this script
  +                    //  these are words that might be mistaken for encoding
  +                    $protected["$" + ($values[j] = $encode(j))] = j++;
  +                }
  +                // increment the word counter
  +                $count[$word]++;
  +            } while (i);
  +            // prepare to sort the word list, first we must protect
  +            //  words that are also used as codes. we assign them a code
  +            //  equivalent to the word itself.
  +            // e.g. if "do" falls within our encoding range
  +            //      then we store keywords["do"] = "do";
  +            // this avoids problems when decoding
  +            i = $unsorted.length;
  +            do {
  +                $word = $unsorted[--i];
  +                if ($protected[$word] != null) {
  +                    $$sorted[$protected[$word]] = $word.slice(1);
  +                    $$protected[$protected[$word]] = true;
  +                    $count[$word] = 0;
  +                }
  +            } while (i);
  +            // sort the words by frequency
  +            $unsorted.sort(function($match1, $match2) {
  +                return $count[$match2] - $count[$match1];
  +            });
  +            j = 0;
  +            // because there are "protected" words in the list
  +            //  we must add the sorted words around them
  +            do {
  +                if ($$sorted[i] == null) $$sorted[i] = $unsorted[j++].slice(1);
  +                $$encoded[$$sorted[i]] = $values[i];
  +            } while (++i < $unsorted.length);
  +        }
  +        return {$sorted: $$sorted, $encoded: $$encoded, $protected: $$protected};
  +    };
  +
  +    // build the boot function used for loading and decoding
  +    function _bootStrap($packed, $keywords) {
  +        var $ENCODE = _safeRegExp("$encode\\($count\\)", "g");
  +
  +        // $packed: the packed script
  +        $packed = "'" + _escape($packed) + "'";
  +
  +        // $ascii: base for encoding
  +        var $ascii = Math.min($keywords.$sorted.length, _encoding) || 1;
  +
  +        // $count: number of words contained in the script
  +        var $count = $keywords.$sorted.length;
  +
  +        // $keywords: list of words contained in the script
  +        for (var i in $keywords.$protected) $keywords.$sorted[i] = "";
  +        // convert from a string to an array
  +        $keywords = "'" + $keywords.$sorted.join("|") + "'.split('|')";
  +
  +        // $encode: encoding function (used for decoding the script)
  +        var $encode = _encoding > 62 ? _encode95 : _getEncoder($ascii);
  +        $encode = String($encode).replace(/_encoding/g, "$ascii").replace(/arguments\.callee/g, "$encode");
  +        var $inline = "$count" + ($ascii > 10 ? ".toString($ascii)" : "");
  +
  +        // $decode: code snippet to speed up decoding
  +        if (_fastDecode) {
  +            // create the decoder
  +            var $decode = _getFunctionBody(_decode);
  +            if (_encoding > 62) $decode = $decode.replace(/\\\\w/g, "[\\xa1-\\xff]");
  +            // perform the encoding inline for lower ascii values
  +            else if ($ascii < 36) $decode = $decode.replace($ENCODE, $inline);
  +            // special case: when $count==0 there are no keywords. I want to keep
  +            //  the basic shape of the unpacking funcion so i'll frig the code...
  +            if (!$count) $decode = $decode.replace(_safeRegExp("($count)\\s*=\\s*1"), "$1=0");
  +        }
  +
  +        // boot function
  +        var $unpack = String(_unpack);
  +        if (_fastDecode) {
  +            // insert the decoder
  +            $unpack = $unpack.replace(/\{/, "{" + $decode + ";");
  +        }
  +        $unpack = $unpack.replace(/"/g, "'");
  +        if (_encoding > 62) { // high-ascii
  +            // get rid of the word-boundaries for regexp matches
  +            $unpack = $unpack.replace(/'\\\\b'\s*\+|\+\s*'\\\\b'/g, "");
  +        }
  +        if ($ascii > 36 || _encoding > 62 || _fastDecode) {
  +            // insert the encode function
  +            $unpack = $unpack.replace(/\{/, "{$encode=" + $encode + ";");
  +        } else {
  +            // perform the encoding inline
  +            $unpack = $unpack.replace($ENCODE, $inline);
  +        }
  +        // pack the boot function too
  +        $unpack = pack($unpack, 0, false, true);
  +
  +        // arguments
  +        var $params = [$packed, $ascii, $count, $keywords];
  +        if (_fastDecode) {
  +            // insert placeholders for the decoder
  +            $params = $params.concat(0, "{}");
  +        }
  +
  +        // the whole thing
  +        return "eval(" + $unpack + "(" + $params + "))\n";
  +    };
  +
  +    // mmm.. ..which one do i need ??
  +    function _getEncoder($ascii) {
  +        return $ascii > 10 ? $ascii > 36 ? $ascii > 62 ? _encode95 : _encode62 : _encode36 : _encode10;
  +    };
  +
  +    // zero encoding
  +    // characters: 0123456789
  +    var _encode10 = function($charCode) {
  +        return $charCode;
  +    };
  +
  +    // inherent base36 support
  +    // characters: 0123456789abcdefghijklmnopqrstuvwxyz
  +    var _encode36 = function($charCode) {
  +        return $charCode.toString(36);
  +    };
  +
  +    // hitch a ride on base36 and add the upper case alpha characters
  +    // characters: 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
  +    var _encode62 = function($charCode) {
  +        return ($charCode < _encoding ? '' : arguments.callee(parseInt($charCode / _encoding))) +
  +            (($charCode = $charCode % _encoding) > 35 ? String.fromCharCode($charCode + 29) : $charCode.toString(36));
  +    };
  +
  +    // use high-ascii values
  +    var _encode95 = function($charCode) {
  +        return ($charCode < _encoding ? '' : arguments.callee($charCode / _encoding)) +
  +            String.fromCharCode($charCode % _encoding + 161);
  +    };
  +
  +    // special _chars
  +    var _encodePrivate = function($charCode) {
  +        return "_" + $charCode;
  +    };
  +
  +    // protect characters used by the parser
  +    function _escape($script) {
  +        return $script.replace(/([\\'])/g, "\\$1");
  +    };
  +
  +    // protect high-ascii characters already in the script
  +    function _escape95($script) {
  +        return $script.replace(/[\xa1-\xff]/g, function($match) {
  +            return "\\x" + $match.charCodeAt(0).toString(16);
  +        });
  +    };
  +
  +    function _safeRegExp($string, $flags) {
  +        return new RegExp($string.replace(/\$/g, "\\$"), $flags);
  +    };
  +
  +    // extract the body of a function
  +    function _getFunctionBody($function) {
  +        with (String($function)) return slice(indexOf("{") + 1, lastIndexOf("}"));
  +    };
  +
  +    // set the global flag on a RegExp (you have to create a new one)
  +    function _globalize($regexp) {
  +        return new RegExp(String($regexp).slice(1, -1), "g");
  +    };
  +
  +    // build the parsing routine
  +    _addParser(_basicCompression);
  +    if (_specialChars) _addParser(_encodeSpecialChars);
  +    if (_encoding) _addParser(_encodeKeywords);
  +
  +    // go!
  +    return _pack(_script);
  +};
  +
  +/*  ==============================================================  */
  +
  +var options = {
  +    "encoding"     : 62,
  +    "fastdecode"   : false,
  +    "specialchars" : false
  +};
  +
  +function die(str) {
  +    print("jspack:ERROR: " + str);
  +    quit();
  +}
  +
  +function usage() {
  +    print("jspack:USAGE: jspack [--encoding=none|numeric|normal|highascii] [--fastdecode] [--specialchars] script.js script.packed.js");
  +    quit();
  +}
  +
  +var i;
  +for (i = 0; i < arguments.length; i++) {
  +    if (arguments[i].substring(0, 2) != '--')
  +        break;
  +    if (arguments[i].substring(2, 9) == "encoding=") {
  +        if      (arguments[i].substring(10) == "none")      { options["encoding"] = 0;  }
  +        else if (arguments[i].substring(10) == "numeric")   { options["encoding"] = 10; }
  +        else if (arguments[i].substring(10) == "normal")    { options["encoding"] = 62; }
  +        else if (arguments[i].substring(10) == "highascii") { options["encoding"] = 95; }
  +        else usage();
  +    }
  +    else if (arguments[i].substring(2) == "fastdecode")
  +        options["fastdecode"] = true;
  +    else if (arguments[i].substring(2) == "specialchars")
  +        options["specialchars"] = true;
  +    else
  +        usage();
  +}
  +if (arguments[i] == undefined || arguments[i+1] == undefined) {
  +    usage();
  +}
  +
  +var fpi = new File(arguments[i]);
  +fpi.open("read");
  +var script = fpi.readAll();
  +fpi.close();
  +
  +script = pack(script, options["encoding"], options["fastdecode"], options["specialchars"]);
  +
  +var fpo = new File(arguments[i+1]);
  +fpo.open("create,write");
  +fpo.write(script);
  +fpo.close();
  +
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  8 10:31:42 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 286277528A2; Thu,  8 Feb 2007 10:31:42 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: MOZILLA: ossp-pkg/js/src/ .cvsignore Makefile.in Makefile....
Message-Id: <20070208093142.286277528A2@mail.ossp.org>
Date: Thu,  8 Feb 2007 10:31:42 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Feb-2007 10:31:42
  Branch: MOZILLA                          Handle: -NONE-

  Touched files:            (Branch: MOZILLA)
    ossp-pkg/js/src         .cvsignore Makefile.in Makefile.ref README.html
                            SpiderMonkey.rsp config.mk js.c js.mak js.mdp
                            js.msg js.pkg js3240.rc jsOS240.def jsapi.c
                            jsapi.h jsarena.c jsarena.h jsarray.c jsarray.h
                            jsatom.c jsatom.h jsbit.h jsbool.c jsbool.h
                            jsclist.h jscntxt.c jscntxt.h jscompat.h
                            jsconfig.h jsconfig.mk jscpucfg.c jscpucfg.h
                            jsdate.c jsdate.h jsdbgapi.c jsdbgapi.h jsdhash.c
                            jsdhash.h jsdtoa.c jsdtoa.h jsemit.c jsemit.h
                            jsexn.c jsexn.h jsfile.c jsfile.h jsfile.msg
                            jsfun.c jsfun.h jsgc.c jsgc.h jshash.h jsify.pl
                            jsinterp.c jsinterp.h jslibmath.h jslock.c
                            jslock.h jslocko.asm jslog2.c jslong.c jslong.h
                            jsmath.c jsmath.h jsnum.c jsnum.h jsobj.c jsobj.h
                            jsopcode.c jsopcode.h jsopcode.tbl jsosdep.h
                            jsotypes.h jsparse.c jsparse.h jsprf.c jsprf.h
                            jsprvtd.h jspubtd.h jsregexp.c jsregexp.h jsscan.c
                            jsscan.h jsscope.c jsscope.h jsscript.c jsscript.h
                            jsshell.msg jsstddef.h jsstr.c jsstr.h jstypes.h
                            jsutil.c jsutil.h jsxdrapi.c jsxdrapi.h jsxml.c
                            jsxml.h lock_SunOS.s perfect.js plify_jsdhash.sed
                            prmjtime.c prmjtime.h resource.h rules.mk
                            win32.order
    ossp-pkg/js/src/config  AIX4.1.mk AIX4.2.mk AIX4.3.mk Darwin.mk
                            Darwin1.3.mk Darwin1.4.mk Darwin5.2.mk
                            Darwin5.3.mk HP-UXB.10.10.mk HP-UXB.10.20.mk
                            HP-UXB.11.00.mk IRIX.mk IRIX5.3.mk IRIX6.1.mk
                            IRIX6.2.mk IRIX6.3.mk IRIX6.5.mk Linux_All.mk
                            Mac_OS10.0.mk OSF1V4.0.mk OSF1V5.0.mk
                            SunOS4.1.4.mk SunOS5.3.mk SunOS5.4.mk
                            SunOS5.5.1.mk SunOS5.5.mk SunOS5.6.mk SunOS5.7.mk
                            SunOS5.8.mk SunOS5.9.mk WINNT4.0.mk WINNT5.0.mk
                            WINNT5.1.mk WINNT5.2.mk dgux.mk
    ossp-pkg/js/src/editline
                            Makefile.ref README editline.3 editline.c
                            editline.h sysunix.c unix.h
    ossp-pkg/js/src/fdlibm  .cvsignore Makefile.in Makefile.ref e_acos.c
                            e_acosh.c e_asin.c e_atan2.c e_atanh.c e_cosh.c
                            e_exp.c e_fmod.c e_gamma.c e_gamma_r.c e_hypot.c
                            e_j0.c e_j1.c e_jn.c e_lgamma.c e_lgamma_r.c
                            e_log.c e_log10.c e_pow.c e_rem_pio2.c
                            e_remainder.c e_scalb.c e_sinh.c e_sqrt.c fdlibm.h
                            fdlibm.mak fdlibm.mdp k_cos.c k_rem_pio2.c k_sin.c
                            k_standard.c k_tan.c s_asinh.c s_atan.c s_cbrt.c
                            s_ceil.c s_copysign.c s_cos.c s_erf.c s_expm1.c
                            s_fabs.c s_finite.c s_floor.c s_frexp.c s_ilogb.c
                            s_isnan.c s_ldexp.c s_lib_version.c s_log1p.c
                            s_logb.c s_matherr.c s_modf.c s_nextafter.c
                            s_rint.c s_scalbn.c s_signgam.c s_significand.c
                            s_sin.c s_tan.c s_tanh.c w_acos.c w_acosh.c
                            w_asin.c w_atan2.c w_atanh.c w_cosh.c w_exp.c
                            w_fmod.c w_gamma.c w_gamma_r.c w_hypot.c w_j0.c
                            w_j1.c w_jn.c w_lgamma.c w_lgamma_r.c w_log.c
                            w_log10.c w_pow.c w_remainder.c w_scalb.c w_sinh.c
                            w_sqrt.c
    ossp-pkg/js/src/perlconnect
                            .cvsignore JS.def JS.dsp JS.pm JS.xs Makefile.PL
                            Makefile.ref PerlConnect.dsp PerlConnect.dsw
                            PerlConnect.pm PerlConnectShell.dsp README.html
                            bg.jpg jsperl.c jsperl.h jsperlbuild.pl
                            jsperlpvt.h test.js test.pl typemap

  Log:
    Import new upstream version: Mozilla JavaScript (SpiderMonkey) 1.6 as of 2007-02-08
    
    [Release Tag: MOZILLA_JS_1_6_20070208]

  Summary:
    Revision    Changes     Path
  ____________________________________________________________________________

From ossp-cvs-owner@ossp.org  Thu Feb  8 10:32:38 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 8760175282B; Thu,  8 Feb 2007 10:32:38 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ ChangeLog
Message-Id: <20070208093238.8760175282B@mail.ossp.org>
Date: Thu,  8 Feb 2007 10:32:38 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Feb-2007 10:32:37
  Branch: HEAD                             Handle: 2007020809323700

  Modified files:
    ossp-pkg/js             ChangeLog

  Log:
    prepare for release

  Summary:
    Revision    Changes     Path
    1.36        +4  -1      ossp-pkg/js/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 ChangeLog
  --- ossp-pkg/js/ChangeLog	8 Feb 2007 09:30:09 -0000	1.35
  +++ ossp-pkg/js/ChangeLog	8 Feb 2007 09:32:37 -0000	1.36
  @@ -11,7 +11,7 @@
   
     This is a list of all changes to OSSP js.
   
  -  Changes between 1.6.20060820 and 1.6.20070102 (2006-08-20 to 2007-01-02)
  +  Changes between 1.6.20060820 and 1.6.20070208 (2006-08-20 to 2007-02-08)
   
      o Added jspack, an adaption of Dean Edwards JavaScript packer
        <http://dean.edwards.name/packer/>, version 2.0.2, for use as a
  @@ -19,6 +19,9 @@
        engine.
        [Ralf S. Engelschall <rse@engelschall.com>]
   
  +   o Upgrade to JavaScript 1.6 upstream sources as of 2007-02-08.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
      o Upgrade to JavaScript 1.6 upstream sources as of 2007-01-02.
        [Ralf S. Engelschall <rse@engelschall.com>]
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  8 10:38:41 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id A3F6975282B; Thu,  8 Feb 2007 10:38:41 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ ChangeLog devtool.conf
Message-Id: <20070208093841.A3F6975282B@mail.ossp.org>
Date: Thu,  8 Feb 2007 10:38:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Feb-2007 10:38:41
  Branch: HEAD                             Handle: 2007020809384100

  Modified files:
    ossp-pkg/js             ChangeLog devtool.conf

  Log:
    upgrade to autoconf 2.61

  Summary:
    Revision    Changes     Path
    1.37        +3  -0      ossp-pkg/js/ChangeLog
    1.11        +1  -1      ossp-pkg/js/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.36 -r1.37 ChangeLog
  --- ossp-pkg/js/ChangeLog	8 Feb 2007 09:32:37 -0000	1.36
  +++ ossp-pkg/js/ChangeLog	8 Feb 2007 09:38:41 -0000	1.37
  @@ -13,6 +13,9 @@
   
     Changes between 1.6.20060820 and 1.6.20070208 (2006-08-20 to 2007-02-08)
   
  +   o Upgrade build environment to GNU autoconf 2.61
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
      o Added jspack, an adaption of Dean Edwards JavaScript packer
        <http://dean.edwards.name/packer/>, version 2.0.2, for use as a
        stand-alone Unix tool under the CLI of the OSSP js JavaScript
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 devtool.conf
  --- ossp-pkg/js/devtool.conf	3 Aug 2006 13:19:20 -0000	1.10
  +++ ossp-pkg/js/devtool.conf	8 Feb 2007 09:38:41 -0000	1.11
  @@ -5,7 +5,7 @@
   %autogen
       @autogen shtool   2.0.6  "2.0.*" all
       @autogen libtool  1.5.22 "1.5*"
  -    @autogen autoconf 2.60   "2.6[0-9]*"
  +    @autogen autoconf 2.61   "2.6[0-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  8 10:38:46 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id E9FC675282B; Thu,  8 Feb 2007 10:38:45 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ jspack.js
Message-Id: <20070208093845.E9FC675282B@mail.ossp.org>
Date: Thu,  8 Feb 2007 10:38:45 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Feb-2007 10:38:45
  Branch: HEAD                             Handle: 2007020809384500

  Modified files:
    ossp-pkg/js             jspack.js

  Log:
    fix parsing

  Summary:
    Revision    Changes     Path
    1.2         +5  -5      ossp-pkg/js/jspack.js
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/jspack.js
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 jspack.js
  --- ossp-pkg/js/jspack.js	8 Feb 2007 09:30:09 -0000	1.1
  +++ ossp-pkg/js/jspack.js	8 Feb 2007 09:38:45 -0000	1.2
  @@ -482,11 +482,11 @@
   for (i = 0; i < arguments.length; i++) {
       if (arguments[i].substring(0, 2) != '--')
           break;
  -    if (arguments[i].substring(2, 9) == "encoding=") {
  -        if      (arguments[i].substring(10) == "none")      { options["encoding"] = 0;  }
  -        else if (arguments[i].substring(10) == "numeric")   { options["encoding"] = 10; }
  -        else if (arguments[i].substring(10) == "normal")    { options["encoding"] = 62; }
  -        else if (arguments[i].substring(10) == "highascii") { options["encoding"] = 95; }
  +    if (arguments[i].substring(2, 11) == "encoding=") {
  +        if      (arguments[i].substring(11) == "none")      { options["encoding"] = 0;  }
  +        else if (arguments[i].substring(11) == "numeric")   { options["encoding"] = 10; }
  +        else if (arguments[i].substring(11) == "normal")    { options["encoding"] = 62; }
  +        else if (arguments[i].substring(11) == "highascii") { options["encoding"] = 95; }
           else usage();
       }
       else if (arguments[i].substring(2) == "fastdecode")
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  8 10:39:50 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 0E29575282B; Thu,  8 Feb 2007 10:39:50 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ README VERSION ossp-pkg/js/src/ jsapi.c
Message-Id: <20070208093950.0E29575282B@mail.ossp.org>
Date: Thu,  8 Feb 2007 10:39:50 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Feb-2007 10:39:50
  Branch: HEAD                             Handle: 2007020809394900

  Modified files:
    ossp-pkg/js             README VERSION
    ossp-pkg/js/src         jsapi.c

  Log:
    prepare for release

  Summary:
    Revision    Changes     Path
    1.15        +1  -1      ossp-pkg/js/README
    1.9         +1  -1      ossp-pkg/js/VERSION
    1.16        +1  -1      ossp-pkg/js/src/jsapi.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/README
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 README
  --- ossp-pkg/js/README	20 Aug 2006 15:51:54 -0000	1.14
  +++ ossp-pkg/js/README	8 Feb 2007 09:39:49 -0000	1.15
  @@ -6,7 +6,7 @@
                                     |__/      
   
     OSSP js - Mozilla JavaScript Engine
  -  Version 1.6.20060820 (20-Aug-2006)
  +  Version 1.6.20070208 (08-Feb-2007)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/VERSION
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 VERSION
  --- ossp-pkg/js/VERSION	20 Aug 2006 15:51:54 -0000	1.8
  +++ ossp-pkg/js/VERSION	8 Feb 2007 09:39:49 -0000	1.9
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP js (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP js, Version 1.6.20060820 (20-Aug-2006)
  +  This is OSSP js, Version 1.6.20070208 (08-Feb-2007)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/src/jsapi.c
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 jsapi.c
  --- ossp-pkg/js/src/jsapi.c	20 Aug 2006 15:51:54 -0000	1.15
  +++ ossp-pkg/js/src/jsapi.c	8 Feb 2007 09:39:49 -0000	1.16
  @@ -1089,7 +1089,7 @@
   JS_GetImplementationVersion(void)
   {
   #ifdef OSSP
  -    return "JavaScript-C 1.6 pre-release 1 2006-04-04 (OSSP js 1.6.20060820)";
  +    return "JavaScript-C 1.6 pre-release 1 2006-04-04 (OSSP js 1.6.20070208)";
   #else
       return "JavaScript-C 1.6 pre-release 1 2006-04-04";
   #endif
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb  8 10:43:21 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B99FC75282B; Thu,  8 Feb 2007 10:43:21 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20070208094321.B99FC75282B@mail.ossp.org>
Date: Thu,  8 Feb 2007 10:43:21 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   08-Feb-2007 10:43:21
  Branch: HEAD                             Handle: 2007020809432001

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/js     index.wml

  Log:
    release OSSP js 1.6.20070208

  Summary:
    Revision    Changes     Path
    1.165       +1  -0      ossp-web/new/news.txt
    1.135       +1  -1      ossp-web/pkg/lib/index.wml
    1.10        +2  -2      ossp-web/pkg/lib/js/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.164 -r1.165 news.txt
  --- ossp-web/new/news.txt	20 Aug 2006 16:00:06 -0000	1.164
  +++ ossp-web/new/news.txt	8 Feb 2007 09:43:20 -0000	1.165
  @@ -1,3 +1,4 @@
  +08-Feb-2007: Released L<OSSP js> 1.6.20070208
   20-Aug-2006: Released L<OSSP js> 1.6.20060820
   15-Aug-2006: Released L<OSSP mm> 1.4.2
   10-Aug-2006: Released L<OSSP cfg> 0.9.11
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.134 -r1.135 index.wml
  --- ossp-web/pkg/lib/index.wml	20 Aug 2006 16:00:08 -0000	1.134
  +++ ossp-web/pkg/lib/index.wml	8 Feb 2007 09:43:21 -0000	1.135
  @@ -42,7 +42,7 @@
   			done=95 stable=none unstable=0.9.3>
     <pkg_item name="js" longname="OSSP js" type="lib"
               desc="Mozilla JavaScript Engine"
  -			done=100 stable=none unstable=1.6.20060820>
  +			done=100 stable=none unstable=1.6.20070208>
     <pkg_item name="str" longname="OSSP str" type="lib"
               desc="String Handling"
   			done=95 stable=none unstable=0.9.12>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/js/index.wml
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 index.wml
  --- ossp-web/pkg/lib/js/index.wml	20 Aug 2006 16:00:12 -0000	1.9
  +++ ossp-web/pkg/lib/js/index.wml	8 Feb 2007 09:43:21 -0000	1.10
  @@ -64,7 +64,7 @@
   <pkg_status
       name="js" assign="rse"
   	genesis="Jul-2006"
  -    stable="1.6.20060820" stable_date="20-Aug-2006"
  +    stable="1.6.20070208" stable_date="08-Feb-2007"
       unstable="none"       unstable_date="none"
   	done=100>
   
  @@ -75,7 +75,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/js/
       directory=$(FTP_ROOT_DIR)/pkg/lib/js/
       files="js-*.tar.gz" 
  -	stable="js-1.6.20060803.tar.gz" unstable="none">
  +	stable="js-1.6.20070208.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar  1 11:52:40 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id A4835753036; Thu,  1 Mar 2007 11:52:40 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ ChangeLog Makefile.in README configure.ac...
Message-Id: <20070301105240.A4835753036@mail.ossp.org>
Date: Thu,  1 Mar 2007 11:52:40 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Mar-2007 11:52:40
  Branch: HEAD                             Handle: 2007030110523802

  Modified files:
    ossp-pkg/snmpdx         ChangeLog Makefile.in README configure.ac
                            devtool.conf snmpdx.pl snmpdx.pod
    ossp-pkg/snmpdx/snmpdx.d
                            hwCpu.pm hwDisk.pm hwFan.pm hwProd.pm hwPs.pm
                            hwRam.pm swBind.pm swOp.pm swOs.pm sysFs.pm
                            sysLoad.pm sysProc.pm sysUptime.pm sysUser.pm
                            sysVM.pm
    ossp-pkg/snmpdx/snmpdx.mib
                            snmpdx.mib

  Log:
    Upgrade build environment to GNU shtool 2.0.6 and GNU autoconf 2.60

  Summary:
    Revision    Changes     Path
    1.18        +8  -0      ossp-pkg/snmpdx/ChangeLog
    1.15        +2  -2      ossp-pkg/snmpdx/Makefile.in
    1.19        +2  -2      ossp-pkg/snmpdx/README
    1.8         +5  -5      ossp-pkg/snmpdx/configure.ac
    1.10        +2  -2      ossp-pkg/snmpdx/devtool.conf
    1.11        +2  -2      ossp-pkg/snmpdx/snmpdx.d/hwCpu.pm
    1.8         +2  -2      ossp-pkg/snmpdx/snmpdx.d/hwDisk.pm
    1.7         +2  -2      ossp-pkg/snmpdx/snmpdx.d/hwFan.pm
    1.4         +2  -2      ossp-pkg/snmpdx/snmpdx.d/hwProd.pm
    1.7         +2  -2      ossp-pkg/snmpdx/snmpdx.d/hwPs.pm
    1.6         +2  -2      ossp-pkg/snmpdx/snmpdx.d/hwRam.pm
    1.3         +2  -2      ossp-pkg/snmpdx/snmpdx.d/swBind.pm
    1.11        +2  -2      ossp-pkg/snmpdx/snmpdx.d/swOp.pm
    1.4         +2  -2      ossp-pkg/snmpdx/snmpdx.d/swOs.pm
    1.8         +2  -2      ossp-pkg/snmpdx/snmpdx.d/sysFs.pm
    1.4         +2  -2      ossp-pkg/snmpdx/snmpdx.d/sysLoad.pm
    1.4         +2  -2      ossp-pkg/snmpdx/snmpdx.d/sysProc.pm
    1.4         +2  -2      ossp-pkg/snmpdx/snmpdx.d/sysUptime.pm
    1.4         +2  -2      ossp-pkg/snmpdx/snmpdx.d/sysUser.pm
    1.13        +2  -2      ossp-pkg/snmpdx/snmpdx.d/sysVM.pm
    1.17        +2  -2      ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib
    1.18        +2  -2      ossp-pkg/snmpdx/snmpdx.pl
    1.4         +2  -2      ossp-pkg/snmpdx/snmpdx.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 ChangeLog
  --- ossp-pkg/snmpdx/ChangeLog	5 Oct 2005 17:42:13 -0000	1.17
  +++ ossp-pkg/snmpdx/ChangeLog	1 Mar 2007 10:52:38 -0000	1.18
  @@ -10,6 +10,14 @@
     ChangeLog
     =========
   
  +  Changes between 0.2.11 and 0.3.0 (2005-10-05 to 2007-03-01):
  +
  +   *) Upgrade build environment to GNU shtool 2.0.6 and GNU autoconf 2.60
  +      [Ralf S. Engelschall]
  +
  +   *) Update copyright messages for year 2006/2007.
  +      [Ralf S. Engelschall]
  +
     Changes between 0.2.10 and 0.2.11 (30-Jul-2005 to 05-Oct-2005):
      
      *) Upgrade build environment to GNU shtool 2.0.3
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 Makefile.in
  --- ossp-pkg/snmpdx/Makefile.in	5 Oct 2005 17:42:13 -0000	1.14
  +++ ossp-pkg/snmpdx/Makefile.in	1 Mar 2007 10:52:38 -0000	1.15
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP snmpdx - SNMP Daemon Extension
  -##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2007 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP snmpdx, a SNMP daemon extension which
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/README
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 README
  --- ossp-pkg/snmpdx/README	5 Oct 2005 17:42:13 -0000	1.18
  +++ ossp-pkg/snmpdx/README	1 Mar 2007 10:52:38 -0000	1.19
  @@ -16,8 +16,8 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  -  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2003-2007 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2003-2007 Ralf S. Engelschall <rse@engelschall.com>
     Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>
   
     This file is part of OSSP snmpdx, a SNMP daemon extension which
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/configure.ac
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 configure.ac
  --- ossp-pkg/snmpdx/configure.ac	5 Oct 2005 17:42:13 -0000	1.7
  +++ ossp-pkg/snmpdx/configure.ac	1 Mar 2007 10:52:38 -0000	1.8
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP snmpdx - SNMP Daemon Extension
  -##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2007 The OSSP Project <http://www.ossp.org/>
   ##  Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP snmpd, a SNMP Daemon Extension which
  @@ -26,14 +26,14 @@
   ##
   
   dnl # standard Autoconf prolog
  -AC_PREREQ(2.53)
  +AC_PREREQ(2.61)
   AC_INIT
   
   dnl # standard OSSP style header
   V=`./shtool version -ltxt -dlong VERSION`
   ./shtool echo -e "Configuring %BOSSP snmpdx%b, Version %B${V}%b"
  -echo "Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>"
  -echo "Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>"
  +echo "Copyright (c) 2003-2007 Ralf S. Engelschall <rse@engelschall.com>"
  +echo "Copyright (c) 2003-2007 The OSSP Project <http://www.ossp.org/>"
   echo "Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>"
   
   dnl # check for OpenPKG
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 devtool.conf
  --- ossp-pkg/snmpdx/devtool.conf	5 Oct 2005 18:11:21 -0000	1.9
  +++ ossp-pkg/snmpdx/devtool.conf	1 Mar 2007 10:52:38 -0000	1.10
  @@ -3,8 +3,8 @@
   ##
   
   %autogen
  -    @autogen shtool   2.0.3 "2.0.*" all
  -    @autogen autoconf 2.59  "2.5[4-9]*"
  +    @autogen shtool   2.0.6 "2.0.*" all
  +    @autogen autoconf 2.61  "2.6*"
   
   %autoclean
       @autoclean shtool
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/hwCpu.pm
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 hwCpu.pm
  --- ossp-pkg/snmpdx/snmpdx.d/hwCpu.pm	5 Oct 2005 17:42:13 -0000	1.10
  +++ ossp-pkg/snmpdx/snmpdx.d/hwCpu.pm	1 Mar 2007 10:52:39 -0000	1.11
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP snmpdx - SNMP Daemon Extension
  -##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2007 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP snmpdx, a SNMP daemon extension which
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/hwDisk.pm
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 hwDisk.pm
  --- ossp-pkg/snmpdx/snmpdx.d/hwDisk.pm	5 Oct 2005 17:42:13 -0000	1.7
  +++ ossp-pkg/snmpdx/snmpdx.d/hwDisk.pm	1 Mar 2007 10:52:39 -0000	1.8
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP snmpdx - SNMP Daemon Extension
  -##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2007 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP snmpdx, a SNMP daemon extension which
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/hwFan.pm
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 hwFan.pm
  --- ossp-pkg/snmpdx/snmpdx.d/hwFan.pm	5 Oct 2005 17:42:13 -0000	1.6
  +++ ossp-pkg/snmpdx/snmpdx.d/hwFan.pm	1 Mar 2007 10:52:39 -0000	1.7
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP snmpdx - SNMP Daemon Extension
  -##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2007 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP snmpdx, a SNMP daemon extension which
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/hwProd.pm
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 hwProd.pm
  --- ossp-pkg/snmpdx/snmpdx.d/hwProd.pm	5 Oct 2005 17:42:13 -0000	1.3
  +++ ossp-pkg/snmpdx/snmpdx.d/hwProd.pm	1 Mar 2007 10:52:39 -0000	1.4
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP snmpdx - SNMP Daemon Extension
  -##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2007 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP snmpdx, a SNMP daemon extension which
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/hwPs.pm
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 hwPs.pm
  --- ossp-pkg/snmpdx/snmpdx.d/hwPs.pm	5 Oct 2005 17:42:13 -0000	1.6
  +++ ossp-pkg/snmpdx/snmpdx.d/hwPs.pm	1 Mar 2007 10:52:39 -0000	1.7
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP snmpdx - SNMP Daemon Extension
  -##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2007 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP snmpdx, a SNMP daemon extension which
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/hwRam.pm
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 hwRam.pm
  --- ossp-pkg/snmpdx/snmpdx.d/hwRam.pm	5 Oct 2005 17:42:13 -0000	1.5
  +++ ossp-pkg/snmpdx/snmpdx.d/hwRam.pm	1 Mar 2007 10:52:39 -0000	1.6
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP snmpdx - SNMP Daemon Extension
  -##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2007 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP snmpdx, a SNMP daemon extension which
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/swBind.pm
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 swBind.pm
  --- ossp-pkg/snmpdx/snmpdx.d/swBind.pm	5 Oct 2005 17:42:13 -0000	1.2
  +++ ossp-pkg/snmpdx/snmpdx.d/swBind.pm	1 Mar 2007 10:52:39 -0000	1.3
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP snmpdx - SNMP Daemon Extension
  -##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2007 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP snmpdx, a SNMP daemon extension which
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/swOp.pm
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 swOp.pm
  --- ossp-pkg/snmpdx/snmpdx.d/swOp.pm	5 Oct 2005 17:42:13 -0000	1.10
  +++ ossp-pkg/snmpdx/snmpdx.d/swOp.pm	1 Mar 2007 10:52:39 -0000	1.11
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP snmpdx - SNMP Daemon Extension
  -##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2007 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP snmpdx, a SNMP daemon extension which
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/swOs.pm
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 swOs.pm
  --- ossp-pkg/snmpdx/snmpdx.d/swOs.pm	5 Oct 2005 17:42:13 -0000	1.3
  +++ ossp-pkg/snmpdx/snmpdx.d/swOs.pm	1 Mar 2007 10:52:39 -0000	1.4
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP snmpdx - SNMP Daemon Extension
  -##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2007 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP snmpdx, a SNMP daemon extension which
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/sysFs.pm
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 sysFs.pm
  --- ossp-pkg/snmpdx/snmpdx.d/sysFs.pm	5 Oct 2005 17:42:13 -0000	1.7
  +++ ossp-pkg/snmpdx/snmpdx.d/sysFs.pm	1 Mar 2007 10:52:39 -0000	1.8
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP snmpdx - SNMP Daemon Extension
  -##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2007 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP snmpdx, a SNMP daemon extension which
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/sysLoad.pm
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 sysLoad.pm
  --- ossp-pkg/snmpdx/snmpdx.d/sysLoad.pm	5 Oct 2005 17:42:13 -0000	1.3
  +++ ossp-pkg/snmpdx/snmpdx.d/sysLoad.pm	1 Mar 2007 10:52:39 -0000	1.4
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP snmpdx - SNMP Daemon Extension
  -##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2007 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP snmpdx, a SNMP daemon extension which
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/sysProc.pm
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 sysProc.pm
  --- ossp-pkg/snmpdx/snmpdx.d/sysProc.pm	5 Oct 2005 17:42:13 -0000	1.3
  +++ ossp-pkg/snmpdx/snmpdx.d/sysProc.pm	1 Mar 2007 10:52:39 -0000	1.4
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP snmpdx - SNMP Daemon Extension
  -##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2007 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP snmpdx, a SNMP daemon extension which
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/sysUptime.pm
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 sysUptime.pm
  --- ossp-pkg/snmpdx/snmpdx.d/sysUptime.pm	5 Oct 2005 17:42:13 -0000	1.3
  +++ ossp-pkg/snmpdx/snmpdx.d/sysUptime.pm	1 Mar 2007 10:52:39 -0000	1.4
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP snmpdx - SNMP Daemon Extension
  -##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2007 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP snmpdx, a SNMP daemon extension which
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/sysUser.pm
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 sysUser.pm
  --- ossp-pkg/snmpdx/snmpdx.d/sysUser.pm	5 Oct 2005 17:42:13 -0000	1.3
  +++ ossp-pkg/snmpdx/snmpdx.d/sysUser.pm	1 Mar 2007 10:52:39 -0000	1.4
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP snmpdx - SNMP Daemon Extension
  -##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2007 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP snmpdx, a SNMP daemon extension which
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/sysVM.pm
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 sysVM.pm
  --- ossp-pkg/snmpdx/snmpdx.d/sysVM.pm	5 Oct 2005 17:42:13 -0000	1.12
  +++ ossp-pkg/snmpdx/snmpdx.d/sysVM.pm	1 Mar 2007 10:52:39 -0000	1.13
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP snmpdx - SNMP Daemon Extension
  -##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2007 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP snmpdx, a SNMP daemon extension which
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 snmpdx.mib
  --- ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib	5 Oct 2005 17:42:14 -0000	1.16
  +++ ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib	1 Mar 2007 10:52:40 -0000	1.17
  @@ -1,7 +1,7 @@
   --
   --  OSSP snmpdx - SNMP Daemon Extension
  ---  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  ---  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +--  Copyright (c) 2003-2007 The OSSP Project <http://www.ossp.org/>
  +--  Copyright (c) 2003-2007 Ralf S. Engelschall <rse@engelschall.com>
   --  Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>
   --
   --  This file is part of OSSP snmpdx, a SNMP daemon extension which
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.pl
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 snmpdx.pl
  --- ossp-pkg/snmpdx/snmpdx.pl	5 Oct 2005 17:42:13 -0000	1.17
  +++ ossp-pkg/snmpdx/snmpdx.pl	1 Mar 2007 10:52:38 -0000	1.18
  @@ -1,8 +1,8 @@
   #!@PERL@ -w
   ##
   ##  OSSP snmpdx - SNMP Daemon Extension
  -##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2007 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP snmpdx, a SNMP daemon extension which
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.pod
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 snmpdx.pod
  --- ossp-pkg/snmpdx/snmpdx.pod	5 Oct 2005 17:42:13 -0000	1.3
  +++ ossp-pkg/snmpdx/snmpdx.pod	1 Mar 2007 10:52:38 -0000	1.4
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP snmpdx - SNMP Daemon Extension
  -##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  -##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2007 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##  Copyright (c) 2003-2005 Cable & Wireless <http://www.cw.com/>
   ##
   ##  This file is part of OSSP snmpdx, a SNMP daemon extension which
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar  1 11:53:21 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 0BAEB752917; Thu,  1 Mar 2007 11:53:21 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ README VERSION
Message-Id: <20070301105321.0BAEB752917@mail.ossp.org>
Date: Thu,  1 Mar 2007 11:53:21 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Mar-2007 11:53:20
  Branch: HEAD                             Handle: 2007030110532000

  Modified files:
    ossp-pkg/snmpdx         README VERSION

  Log:
    bump version

  Summary:
    Revision    Changes     Path
    1.20        +1  -1      ossp-pkg/snmpdx/README
    1.14        +1  -1      ossp-pkg/snmpdx/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/README
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 README
  --- ossp-pkg/snmpdx/README	1 Mar 2007 10:52:38 -0000	1.19
  +++ ossp-pkg/snmpdx/README	1 Mar 2007 10:53:20 -0000	1.20
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/_| |_|_| |_| |_| .__/ \__,_/_/\_\
                                                          |_|
     OSSP snmpdx - SNMP Daemon Extension
  -  Version 0.2.11 (05-Oct-2005)
  +  Version 0.3.0 (01-Mar-2007)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/VERSION
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 VERSION
  --- ossp-pkg/snmpdx/VERSION	5 Oct 2005 17:42:13 -0000	1.13
  +++ ossp-pkg/snmpdx/VERSION	1 Mar 2007 10:53:20 -0000	1.14
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP snmpdx (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP snmpdx, Version 0.2.11 (05-Oct-2005)
  +  This is OSSP snmpdx, Version 0.3.0 (01-Mar-2007)
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar  1 11:54:58 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id EE34675290F; Thu,  1 Mar 2007 11:54:57 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ README
Message-Id: <20070301105457.EE34675290F@mail.ossp.org>
Date: Thu,  1 Mar 2007 11:54:57 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Mar-2007 11:54:57
  Branch: HEAD                             Handle: 2007030110545700

  Modified files:
    ossp-pkg/snmpdx         README

  Log:
    cleanup

  Summary:
    Revision    Changes     Path
    1.21        +15 -15     ossp-pkg/snmpdx/README
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/README
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 README
  --- ossp-pkg/snmpdx/README	1 Mar 2007 10:53:20 -0000	1.20
  +++ ossp-pkg/snmpdx/README	1 Mar 2007 10:54:57 -0000	1.21
  @@ -47,21 +47,21 @@
   
     QUICKSTART
   
  -    $ ./devtool autogen #optional
  -    $ PREFIX=/openpkg-dev; ./configure \
  -        --prefix=$PREFIX \
  -        --with-openpkg=$PREFIX \
  -        --with-snmp=$PREFIX \
  -        --with-perl=$PREFIX/bin/perl
  -    $ make
  +  $ ./devtool autogen #optional
  +  $ PREFIX=/openpkg-dev; ./configure \
  +      --prefix=$PREFIX \
  +      --with-openpkg=$PREFIX \
  +      --with-snmp=$PREFIX \
  +      --with-perl=$PREFIX/bin/perl
  +  $ make
   
  -    Standalone, emulate snmp/snmpdx communication
  -    $ ( echo "getnext"; echo ".1" ) | ./snmpdx --probedir=./snmpdx.d --mibdir=.
  +  # standalone: emulate snmp/snmpdx communication
  +  $ (echo "getnext"; echo ".1") | ./snmpdx --probedir=./snmpdx.d --mibdir=.
   
  -    Standalone, command line
  -    $ ./snmpdx -g .1.3.6.1.4.1.4007.42.1.1.2.1 #enterprises.cw.snmpdx.host.hardware.hwCpu.hwCpuNum
  -    
  -    If integrated into snmp, try
  -    # make install
  -    $ snmpwalk -Os -c public -v 2c 127.0.0.1 .1.3.6.1.4.1.4007.42
  +  # standalone: command line
  +  $ ./snmpdx -g .1.3.6.1.4.1.4007.42.1.1.2.1 #enterprises.cw.snmpdx.host.hardware.hwCpu.hwCpuNum
  +  
  +  # integrated:
  +  $ make install
  +  $ snmpwalk -Os -c public -v 2c 127.0.0.1 .1.3.6.1.4.1.4007.42
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar  1 12:16:17 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 476C875295A; Thu,  1 Mar 2007 12:16:16 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ ChangeLog ossp-pkg/snmpdx/snmpdx.d/ swBin...
Message-Id: <20070301111617.476C875295A@mail.ossp.org>
Date: Thu,  1 Mar 2007 12:16:16 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Mar-2007 12:16:15
  Branch: HEAD                             Handle: 2007030111161401

  Modified files:
    ossp-pkg/snmpdx         ChangeLog
    ossp-pkg/snmpdx/snmpdx.d
                            swBind.pm
    ossp-pkg/snmpdx/snmpdx.mib
                            snmpdx.mib

  Log:
    Add the four additional probe values swBindStatusRecClientsActive,
    swBindStatusRecClientsMax, swBindStatusTcpClientsActive and
    swBindStatusTcpClientsMax which correspond to the new information
    returned from newer BIND 9 "rndc status".

  Summary:
    Revision    Changes     Path
    1.19        +6  -0      ossp-pkg/snmpdx/ChangeLog
    1.4         +28 -20     ossp-pkg/snmpdx/snmpdx.d/swBind.pm
    1.18        +28 -0      ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 ChangeLog
  --- ossp-pkg/snmpdx/ChangeLog	1 Mar 2007 10:52:38 -0000	1.18
  +++ ossp-pkg/snmpdx/ChangeLog	1 Mar 2007 11:16:14 -0000	1.19
  @@ -12,6 +12,12 @@
   
     Changes between 0.2.11 and 0.3.0 (2005-10-05 to 2007-03-01):
   
  +   *) Add the four additional probe values swBindStatusRecClientsActive,
  +      swBindStatusRecClientsMax, swBindStatusTcpClientsActive and
  +      swBindStatusTcpClientsMax which correspond to the new information
  +      returned from newer BIND 9 "rndc status".
  +      [Ralf S. Engelschall]
  +
      *) Upgrade build environment to GNU shtool 2.0.6 and GNU autoconf 2.60
         [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.d/swBind.pm
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 swBind.pm
  --- ossp-pkg/snmpdx/snmpdx.d/swBind.pm	1 Mar 2007 10:52:39 -0000	1.3
  +++ ossp-pkg/snmpdx/snmpdx.d/swBind.pm	1 Mar 2007 11:16:15 -0000	1.4
  @@ -40,17 +40,21 @@
       #   local workspace
       my $out; my $raw;
       my $rndc = "$openpkg/sbin/rndc";
  -    my $file = "$openpkg/var/bind/named.stats"; #"statistics-file" setting in "option" section in named.conf
  +    my $file = "$openpkg/var/bind/named.stats"; # "statistics-file" setting in "option" section in named.conf
   
  -    ###   query status via rndc(8)
  +    #   query status via rndc(8)
       $out = $self->{-ctx}->{-sys}->run("$rndc status 2>/dev/null", "1m");
       $raw = $out->{-stdout};
  -    my $swBindStatusNumberOfZones = $1 if ($raw =~ m/number of zones: (\d+)/s        );
  -    my $swBindStatusDebugLevel    = $1 if ($raw =~ m/debug level: (\d+)/s            );
  -    my $swBindStatusXfersRunning  = $1 if ($raw =~ m/xfers running: (\d+)/s          );
  -    my $swBindStatusXfersDeferred = $1 if ($raw =~ m/xfers deferred: (\d+)/s         );
  -    my $swBindStatusSoaQueries    = $1 if ($raw =~ m/soa queries in progress: (\d+)/s);
  -    my $swBindStatusQueryLogging  = $1 if ($raw =~ m/query logging is (^\n)+/s       );
  +    my $swBindStatusNumberOfZones    = $1 if ($raw =~ m/number of zones: (\d+)/s         );
  +    my $swBindStatusDebugLevel       = $1 if ($raw =~ m/debug level: (\d+)/s             );
  +    my $swBindStatusXfersRunning     = $1 if ($raw =~ m/xfers running: (\d+)/s           );
  +    my $swBindStatusXfersDeferred    = $1 if ($raw =~ m/xfers deferred: (\d+)/s          );
  +    my $swBindStatusSoaQueries       = $1 if ($raw =~ m/soa queries in progress: (\d+)/s );
  +    my $swBindStatusQueryLogging     = $1 if ($raw =~ m/query logging is (^\n)+/s        );
  +    my $swBindStatusRecClientsActive = $1 if ($raw =~ m/recursive clients: (\d+)\/\d+/s  );
  +    my $swBindStatusRecClientsMax    = $1 if ($raw =~ m/recursive clients: \d+\/(\d+)/s  );
  +    my $swBindStatusTcpClientsActive = $1 if ($raw =~ m/tcp clients: (\d+)\/\d+/s        );
  +    my $swBindStatusTcpClientsMax    = $1 if ($raw =~ m/tcp clients: \d+\/(\d+)/s        );
   
       ##   query stats via rndc(8)
       $self->{-ctx}->{-sys}->run("$rndc stats 2>/dev/null", "1m");
  @@ -74,18 +78,22 @@
       my $swBindStatsFailure   = $1 if ($raw =~ m/failure (\d+)/s  );
   
       #   provide results
  -    if    ($obj->{-name} =~ m|\.swBindStatusNumberOfZones$|) { $obj->{-value} = $swBindStatusNumberOfZones ; }
  -    elsif ($obj->{-name} =~ m|\.swBindStatusDebugLevel$|   ) { $obj->{-value} = $swBindStatusDebugLevel    ; }
  -    elsif ($obj->{-name} =~ m|\.swBindStatusXfersRunning$| ) { $obj->{-value} = $swBindStatusXfersRunning  ; }
  -    elsif ($obj->{-name} =~ m|\.swBindStatusXfersDeferred$|) { $obj->{-value} = $swBindStatusXfersDeferred ; }
  -    elsif ($obj->{-name} =~ m|\.swBindStatusSoaQueries$|   ) { $obj->{-value} = $swBindStatusSoaQueries    ; }
  -    elsif ($obj->{-name} =~ m|\.swBindStatusQueryLogging$| ) { $obj->{-value} = $swBindStatusQueryLogging  ; }
  -    elsif ($obj->{-name} =~ m|\.swBindStatsSuccess$|       ) { $obj->{-value} = $swBindStatsSuccess        ; }
  -    elsif ($obj->{-name} =~ m|\.swBindStatsReferral$|      ) { $obj->{-value} = $swBindStatsReferral       ; }
  -    elsif ($obj->{-name} =~ m|\.swBindStatsNxrrset$|       ) { $obj->{-value} = $swBindStatsNxrrset        ; }
  -    elsif ($obj->{-name} =~ m|\.swBindStatsNxdomain$|      ) { $obj->{-value} = $swBindStatsNxdomain       ; }
  -    elsif ($obj->{-name} =~ m|\.swBindStatsRecursion$|     ) { $obj->{-value} = $swBindStatsRecursion      ; }
  -    elsif ($obj->{-name} =~ m|\.swBindStatsFailure$|       ) { $obj->{-value} = $swBindStatsFailure        ; }
  +    if    ($obj->{-name} =~ m|\.swBindStatusNumberOfZones$|   ) { $obj->{-value} = $swBindStatusNumberOfZones;    }
  +    elsif ($obj->{-name} =~ m|\.swBindStatusDebugLevel$|      ) { $obj->{-value} = $swBindStatusDebugLevel;       }
  +    elsif ($obj->{-name} =~ m|\.swBindStatusXfersRunning$|    ) { $obj->{-value} = $swBindStatusXfersRunning;     }
  +    elsif ($obj->{-name} =~ m|\.swBindStatusXfersDeferred$|   ) { $obj->{-value} = $swBindStatusXfersDeferred;    }
  +    elsif ($obj->{-name} =~ m|\.swBindStatusSoaQueries$|      ) { $obj->{-value} = $swBindStatusSoaQueries;       }
  +    elsif ($obj->{-name} =~ m|\.swBindStatusQueryLogging$|    ) { $obj->{-value} = $swBindStatusQueryLogging;     }
  +    elsif ($obj->{-name} =~ m|\.swBindStatusRecClientsActive$|) { $obj->{-value} = $swBindStatusRecClientsActive; }
  +    elsif ($obj->{-name} =~ m|\.swBindStatusRecClientsMax$|   ) { $obj->{-value} = $swBindStatusRecClientsMax;    }
  +    elsif ($obj->{-name} =~ m|\.swBindStatusTcpClientsActive$|) { $obj->{-value} = $swBindStatusTcpClientsActive; }
  +    elsif ($obj->{-name} =~ m|\.swBindStatusTcpClientsMax$|   ) { $obj->{-value} = $swBindStatusTcpClientsMax;    }
  +    elsif ($obj->{-name} =~ m|\.swBindStatsSuccess$|          ) { $obj->{-value} = $swBindStatsSuccess;           }
  +    elsif ($obj->{-name} =~ m|\.swBindStatsReferral$|         ) { $obj->{-value} = $swBindStatsReferral;          }
  +    elsif ($obj->{-name} =~ m|\.swBindStatsNxrrset$|          ) { $obj->{-value} = $swBindStatsNxrrset;           }
  +    elsif ($obj->{-name} =~ m|\.swBindStatsNxdomain$|         ) { $obj->{-value} = $swBindStatsNxdomain;          }
  +    elsif ($obj->{-name} =~ m|\.swBindStatsRecursion$|        ) { $obj->{-value} = $swBindStatsRecursion;         }
  +    elsif ($obj->{-name} =~ m|\.swBindStatsFailure$|          ) { $obj->{-value} = $swBindStatsFailure;           }
       return;
   }
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 snmpdx.mib
  --- ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib	1 Mar 2007 10:52:40 -0000	1.17
  +++ ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib	1 Mar 2007 11:16:15 -0000	1.18
  @@ -729,6 +729,34 @@
       DESCRIPTION "SOA query logging state"
       ::= { swBindStatus 6 }
   
  +swBindStatusRecClientsActive OBJECT-TYPE
  +    SYNTAX      Integer32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "active recursive clients"
  +    ::= { swBindStatus 7 }
  +
  +swBindStatusRecClientsMax OBJECT-TYPE
  +    SYNTAX      Integer32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "maximum recursive clients"
  +    ::= { swBindStatus 8 }
  +
  +swBindStatusTcpClientsActive OBJECT-TYPE
  +    SYNTAX      Integer32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "active TCP clients"
  +    ::= { swBindStatus 9 }
  +
  +swBindStatusTcpClientsMax OBJECT-TYPE
  +    SYNTAX      Integer32
  +    MAX-ACCESS  read-only
  +    STATUS      current
  +    DESCRIPTION "maximum TCP clients"
  +    ::= { swBindStatus 10 }
  +
   --
   --  BIND statistics ("rndc stats")
   --
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar  1 12:29:02 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id C548775292E; Thu,  1 Mar 2007 12:29:02 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ ChangeLog ossp-pkg/snmpdx/snmpdx.mib/ snm...
Message-Id: <20070301112902.C548775292E@mail.ossp.org>
Date: Thu,  1 Mar 2007 12:29:02 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Mar-2007 12:29:02
  Branch: HEAD                             Handle: 2007030111290200

  Modified files:
    ossp-pkg/snmpdx         ChangeLog
    ossp-pkg/snmpdx/snmpdx.mib
                            snmpdx.mib

  Log:
    Cleanup formatting of snmpdx.mib

  Summary:
    Revision    Changes     Path
    1.20        +3  -0      ossp-pkg/snmpdx/ChangeLog
    1.19        +241 -238   ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 ChangeLog
  --- ossp-pkg/snmpdx/ChangeLog	1 Mar 2007 11:16:14 -0000	1.19
  +++ ossp-pkg/snmpdx/ChangeLog	1 Mar 2007 11:29:02 -0000	1.20
  @@ -12,6 +12,9 @@
   
     Changes between 0.2.11 and 0.3.0 (2005-10-05 to 2007-03-01):
   
  +   *) Cleanup formatting of snmpdx.mib
  +      [Ralf S. Engelschall]
  +
      *) Add the four additional probe values swBindStatusRecClientsActive,
         swBindStatusRecClientsMax, swBindStatusTcpClientsActive and
         swBindStatusTcpClientsMax which correspond to the new information
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 snmpdx.mib
  --- ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib	1 Mar 2007 11:16:15 -0000	1.18
  +++ ossp-pkg/snmpdx/snmpdx.mib/snmpdx.mib	1 Mar 2007 11:29:02 -0000	1.19
  @@ -31,179 +31,177 @@
       MODULE-IDENTITY, OBJECT-TYPE, NOTIFICATION-TYPE,
       Integer32, Counter32, Gauge32, TimeTicks
           FROM SNMPv2-SMI
  -
       TEXTUAL-CONVENTION, DisplayString, DateAndTime
           FROM SNMPv2-TC
  -
       MODULE-COMPLIANCE, OBJECT-GROUP, NOTIFICATION-GROUP
           FROM SNMPv2-CONF;
   
  -org            OBJECT IDENTIFIER ::= { iso 3 } -- iso = 1
  -dod            OBJECT IDENTIFIER ::= { org 6 }
  -internet       OBJECT IDENTIFIER ::= { dod 1 }
  -private        OBJECT IDENTIFIER ::= { internet 4 }
  -enterprises    OBJECT IDENTIFIER ::= { private 1 }
  -
  -cw             OBJECT IDENTIFIER ::= { enterprises 4007 }
  -snmpdx         OBJECT IDENTIFIER ::= { cw 42 }
  -
  -host           OBJECT IDENTIFIER ::= { snmpdx 1 }
  -hardware       OBJECT IDENTIFIER ::= { host 1 }
  -system         OBJECT IDENTIFIER ::= { host 2 }
  -software       OBJECT IDENTIFIER ::= { host 3 }
  +org             OBJECT IDENTIFIER ::= { iso 3 } -- iso = 1
  +dod             OBJECT IDENTIFIER ::= { org 6 }
  +internet        OBJECT IDENTIFIER ::= { dod 1 }
  +private         OBJECT IDENTIFIER ::= { internet 4 }
  +enterprises     OBJECT IDENTIFIER ::= { private 1 }
  +
  +cw              OBJECT IDENTIFIER ::= { enterprises 4007 }
  +snmpdx          OBJECT IDENTIFIER ::= { cw 42 }
  +
  +host            OBJECT IDENTIFIER ::= { snmpdx 1 }
  +hardware        OBJECT IDENTIFIER ::= { host 1 }
  +system          OBJECT IDENTIFIER ::= { host 2 }
  +software        OBJECT IDENTIFIER ::= { host 3 }
   
   --
   --  System Identification
   --
   
   sysId OBJECT IDENTIFIER
  -    ::= { system 1 }
  +    ::=         { system 1 }
   
   sysIdHostid OBJECT-TYPE
       SYNTAX      DisplayString
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "unique host identification of system"
  -    ::= { sysId 1 }
  +    ::=         { sysId 1 }
   
   sysIdHostname OBJECT-TYPE
       SYNTAX      DisplayString
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "fully qualified host name of system"
  -    ::= { sysId 2 }
  +    ::=         { sysId 2 }
   
   --
   --  System Virtual Memory
   --
   
   sysVM OBJECT IDENTIFIER
  -    ::= { system 2 }
  +    ::=         { system 2 }
   
   sysVMRam OBJECT IDENTIFIER
  -    ::= { sysVM 1 }
  +    ::=         { sysVM 1 }
   
   sysVMRamMax OBJECT-TYPE
       SYNTAX      Gauge32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "maximum available RAM in MB"
  -    ::= { sysVMRam 1 }
  +    ::=         { sysVMRam 1 }
   
   sysVMRamUsed OBJECT-TYPE
       SYNTAX      Gauge32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "currently used RAM in MB"
  -    ::= { sysVMRam 2 }
  +    ::=         { sysVMRam 2 }
   
   sysVMRamFree OBJECT-TYPE
       SYNTAX      Gauge32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "currently free RAM in MB"
  -    ::= { sysVMRam 3 }
  +    ::=         { sysVMRam 3 }
   
   sysVMSwap OBJECT IDENTIFIER
  -    ::= { sysVM 2 }
  +    ::=         { sysVM 2 }
   
   sysVMSwapMax OBJECT-TYPE
       SYNTAX      Gauge32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "maximum available Swap in MB"
  -    ::= { sysVMSwap 1 }
  +    ::=         { sysVMSwap 1 }
   
   sysVMSwapUsed OBJECT-TYPE
       SYNTAX      Gauge32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "currently used Swap in MB"
  -    ::= { sysVMSwap 2 }
  +    ::=         { sysVMSwap 2 }
   
   sysVMSwapFree OBJECT-TYPE
       SYNTAX      Gauge32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "currently free Swap in MB"
  -    ::= { sysVMSwap 3 }
  +    ::=         { sysVMSwap 3 }
   
   sysVMActivity OBJECT-TYPE
       SYNTAX      Gauge32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "paging activity in units/time"
  -    ::= { sysVM 3 }
  +    ::=         { sysVM 3 }
   
   --
   --  System Load Average
   --
   
   sysLoad OBJECT IDENTIFIER
  -    ::= { system 3 }
  +    ::=         { system 3 }
   
   sysLoad5 OBJECT-TYPE
       SYNTAX      Gauge32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "load average during last 5 minutes"
  -    ::= { sysLoad 1 }
  +    ::=         { sysLoad 1 }
   
   sysLoad10 OBJECT-TYPE
       SYNTAX      Gauge32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "load average during last 10 minutes"
  -    ::= { sysLoad 2 }
  +    ::=         { sysLoad 2 }
   
   sysLoad15 OBJECT-TYPE
       SYNTAX      Gauge32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "load average during last 15 minutes"
  -    ::= { sysLoad 3 }
  +    ::=         { sysLoad 3 }
   
   --
   --  System Processes
   --
   
   sysProc OBJECT IDENTIFIER
  -    ::= { system 4 }
  +    ::=         { system 4 }
   
   sysProcMax OBJECT-TYPE
       SYNTAX      Integer32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "number of process contexts maximum possible"
  -    ::= { sysProc 1 }
  +    ::=         { sysProc 1 }
   
   sysProcActive OBJECT-TYPE
       SYNTAX      Gauge32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "number of process contexts currently active"
  -    ::= { sysProc 2 }
  +    ::=         { sysProc 2 }
   
   --
   --  System Users
   --
   
   sysUser OBJECT IDENTIFIER
  -    ::= { system 5 }
  +    ::=         { system 5 }
   
   sysUserMax OBJECT-TYPE
       SYNTAX      Integer32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "number of logged in users maximum possible"
  -    ::= { sysUser 1 }
  +    ::=         { sysUser 1 }
   
   sysUserLoggedIn OBJECT-TYPE
       SYNTAX      Gauge32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "number of currently logged in users"
  -    ::= { sysUser 2 }
  +    ::=         { sysUser 2 }
   
   --
   --  System Uptime
  @@ -214,595 +212,600 @@
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "time (in hundrets of a second) since the system was booted"
  -    ::= { system 6 }
  +    ::=         { system 6 }
   
   --
   --  System Filesystem
   --
   
   sysFs OBJECT IDENTIFIER
  -    ::= { system 7 }
  +    ::=         { system 7 }
   
   sysFsTABLE OBJECT-TYPE
  -    SYNTAX            SEQUENCE OF SysFsENTRY
  +    SYNTAX      SEQUENCE OF SysFsENTRY
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION "sysFsTABLE"
  -    ::= { sysFs 1 }
  +    ::=         { sysFs 1 }
   
   sysFsENTRY OBJECT-TYPE
  -    SYNTAX            SysFsENTRY
  -    MAX-ACCESS        not-accessible
  -    STATUS            current
  +    SYNTAX      SysFsENTRY
  +    MAX-ACCESS  not-accessible
  +    STATUS      current
       DESCRIPTION "sysFsENTRY"
  -    INDEX            { sysFsIndex }
  -    ::= { sysFsTABLE 1 }
  +    INDEX       { sysFsIndex }
  +    ::=         { sysFsTABLE 1 }
   
  -SysFsENTRY ::= SEQUENCE {
  -    sysFsIndex      Integer32,
  -    sysFsDevice     DisplayString,
  -    sysFsMountpoint DisplayString,
  -    sysFsMax        Integer32,
  -    sysFsUsed       Integer32,
  -    sysFsFree       Integer32
  -}
  +SysFsENTRY ::=
  +    SEQUENCE {
  +        sysFsIndex      Integer32,
  +        sysFsDevice     DisplayString,
  +        sysFsMountpoint DisplayString,
  +        sysFsMax        Integer32,
  +        sysFsUsed       Integer32,
  +        sysFsFree       Integer32
  +    }
   
   sysFsIndex OBJECT-TYPE
  -    SYNTAX            Integer32
  -    MAX-ACCESS        read-only
  -    STATUS            current
  +    SYNTAX      Integer32
  +    MAX-ACCESS  read-only
  +    STATUS      current
       DESCRIPTION "reference index/row number for each filesystem"
  -    ::= { sysFsENTRY 1 }
  +    ::=         { sysFsENTRY 1 }
   
   sysFsDevice OBJECT-TYPE
       SYNTAX      DisplayString
  -    MAX-ACCESS        read-only
  -    STATUS            current
  +    MAX-ACCESS  read-only
  +    STATUS      current
       DESCRIPTION "filesystem device"
  -    ::= { sysFsENTRY 2 }
  +    ::=         { sysFsENTRY 2 }
   
   sysFsMountpoint OBJECT-TYPE
       SYNTAX      DisplayString
  -    MAX-ACCESS        read-only
  -    STATUS            current
  +    MAX-ACCESS  read-only
  +    STATUS      current
       DESCRIPTION "filesystem mount point"
  -    ::= { sysFsENTRY 3 }
  +    ::=         { sysFsENTRY 3 }
   
   sysFsMax OBJECT-TYPE
       SYNTAX      Integer32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "maximum available filesystem space in MB"
  -    ::= { sysFsENTRY 4 }
  +    ::=         { sysFsENTRY 4 }
   
   sysFsUsed OBJECT-TYPE
       SYNTAX      Integer32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "currently used filesystem space in MB"
  -    ::= { sysFsENTRY 5 }
  +    ::=         { sysFsENTRY 5 }
   
   sysFsFree OBJECT-TYPE
       SYNTAX      Integer32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "currently free filesystem space in MB"
  -    ::= { sysFsENTRY 6 }
  +    ::=         { sysFsENTRY 6 }
   
   --
   --  Hardware: Product
   --
   
   hwProd OBJECT IDENTIFIER
  -    ::= { hardware 1 }
  +    ::=         { hardware 1 }
   
   hwProdArch OBJECT-TYPE
       SYNTAX      DisplayString
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "name of hardware architecture"
  -    ::= { hwProd 1 }
  +    ::=         { hwProd 1 }
   
   hwProdName OBJECT-TYPE
       SYNTAX      DisplayString
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "name of hardware product"
  -    ::= { hwProd 2 }
  +    ::=         { hwProd 2 }
   
   --
   --  Hardware: CPU
   --
   
   hwCpu OBJECT IDENTIFIER
  -    ::= { hardware 2 }
  +    ::=         { hardware 2 }
   
   hwCpuNum OBJECT-TYPE
       SYNTAX      Integer32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "number of CPUs"
  -    ::= { hwCpu 1 }
  +    ::=         { hwCpu 1 }
   
   hwCpuTABLE OBJECT-TYPE
  -    SYNTAX            SEQUENCE OF HwCpuENTRY
  +    SYNTAX      SEQUENCE OF HwCpuENTRY
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION "hwCpuTABLE"
  -    ::= { hwCpu 2 }
  +    ::=         { hwCpu 2 }
   
   hwCpuENTRY OBJECT-TYPE
  -    SYNTAX            HwCpuENTRY
  -    MAX-ACCESS        not-accessible
  -    STATUS            current
  +    SYNTAX      HwCpuENTRY
  +    MAX-ACCESS  not-accessible
  +    STATUS      current
       DESCRIPTION "hwCpuENTRY"
  -    INDEX            { hwCpuIndex }
  -    ::= { hwCpuTABLE 1 }
  +    INDEX       { hwCpuIndex }
  +    ::=         { hwCpuTABLE 1 }
   
  -HwCpuENTRY ::= SEQUENCE {
  -    hwCpuIndex Integer32,
  -    hwCpuId    DisplayString,
  -    hwCpuSpeed Integer32,
  -    hwCpuTemp  Integer32
  -}
  +HwCpuENTRY ::=
  +    SEQUENCE {
  +        hwCpuIndex Integer32,
  +        hwCpuId    DisplayString,
  +        hwCpuSpeed Integer32,
  +        hwCpuTemp  Integer32
  +    }
   
   hwCpuIndex OBJECT-TYPE
  -    SYNTAX            Integer32
  -    MAX-ACCESS        read-only
  -    STATUS            current
  +    SYNTAX      Integer32
  +    MAX-ACCESS  read-only
  +    STATUS      current
       DESCRIPTION "reference index/row number for each CPU"
  -    ::= { hwCpuENTRY 1 }
  +    ::=         { hwCpuENTRY 1 }
   
   hwCpuId OBJECT-TYPE
       SYNTAX      DisplayString
  -    MAX-ACCESS        read-only
  -    STATUS            current
  +    MAX-ACCESS  read-only
  +    STATUS      current
       DESCRIPTION "CPU identification"
  -    ::= { hwCpuENTRY 2 }
  -
  +    ::=         { hwCpuENTRY 2 }
   
   hwCpuSpeed OBJECT-TYPE
  -    SYNTAX            Integer32
  -    MAX-ACCESS        read-only
  -    STATUS            current
  +    SYNTAX      Integer32
  +    MAX-ACCESS  read-only
  +    STATUS      current
       DESCRIPTION "CPU speed [MHz]"
  -    ::= { hwCpuENTRY 3 }
  +    ::=         { hwCpuENTRY 3 }
   
   hwCpuTemp OBJECT-TYPE
       SYNTAX      Integer32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "CPU temperature [Celsius]"
  -    ::= { hwCpuENTRY 4 }
  +    ::=         { hwCpuENTRY 4 }
   
   --
   --  Hardware: RAM
   --
   
   hwRam OBJECT IDENTIFIER
  -    ::= { hardware 3 }
  +    ::=         { hardware 3 }
   
   hwRamMax OBJECT-TYPE
       SYNTAX      Gauge32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "installed RAM in MB"
  -    ::= { hwRam 1 }
  +    ::=         { hwRam 1 }
   
   hwRamStatus OBJECT-TYPE
       SYNTAX      Integer32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "boolean status of RAM banks"
  -    ::= { hwRam 2 }
  +    ::=         { hwRam 2 }
   
   --
   --  Hardware: Disk
   --
   
   hwDisk OBJECT IDENTIFIER
  -    ::= { hardware 4 }
  +    ::=         { hardware 4 }
   
   hwDiskTABLE OBJECT-TYPE
  -    SYNTAX            SEQUENCE OF HwDiskENTRY
  +    SYNTAX      SEQUENCE OF HwDiskENTRY
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION "hwDiskTABLE"
  -    ::= { hwDisk 1 }
  +    ::=         { hwDisk 1 }
   
   hwDiskENTRY OBJECT-TYPE
  -    SYNTAX            HwDiskENTRY
  -    MAX-ACCESS        not-accessible
  -    STATUS            current
  +    SYNTAX      HwDiskENTRY
  +    MAX-ACCESS  not-accessible
  +    STATUS      current
       DESCRIPTION "hwDiskENTRY"
  -    INDEX            { hwDiskIndex }
  -    ::= { hwDiskTABLE 1 }
  +    INDEX       { hwDiskIndex }
  +    ::=         { hwDiskTABLE 1 }
   
  -HwDiskENTRY ::= SEQUENCE {
  -    hwDiskIndex    Integer32,
  -    hwDiskId       DisplayString,
  -    hwDiskStatus   Integer32
  -}
  +HwDiskENTRY ::=
  +    SEQUENCE {
  +        hwDiskIndex    Integer32,
  +        hwDiskId       DisplayString,
  +        hwDiskStatus   Integer32
  +    }
   
   hwDiskIndex OBJECT-TYPE
  -    SYNTAX            Integer32
  -    MAX-ACCESS        read-only
  -    STATUS            current
  +    SYNTAX      Integer32
  +    MAX-ACCESS  read-only
  +    STATUS      current
       DESCRIPTION "reference index/row number for each Disk"
  -    ::= { hwDiskENTRY 1 }
  +    ::=         { hwDiskENTRY 1 }
   
   hwDiskId OBJECT-TYPE
       SYNTAX      DisplayString
  -    MAX-ACCESS        read-only
  -    STATUS            current
  +    MAX-ACCESS  read-only
  +    STATUS      current
       DESCRIPTION "Disk identification"
  -    ::= { hwDiskENTRY 2 }
  +    ::=         { hwDiskENTRY 2 }
   
   hwDiskStatus OBJECT-TYPE
       SYNTAX      Integer32
  -    MAX-ACCESS        read-only
  -    STATUS            current
  +    MAX-ACCESS  read-only
  +    STATUS      current
       DESCRIPTION "Disk status"
  -    ::= { hwDiskENTRY 3 }
  +    ::=         { hwDiskENTRY 3 }
   
   --
   --  Hardware: Fan
   --
   
   hwFan OBJECT IDENTIFIER
  -    ::= { hardware 5 }
  +    ::=         { hardware 5 }
   
   hwFanTABLE OBJECT-TYPE
  -    SYNTAX            SEQUENCE OF HwFanENTRY
  +    SYNTAX      SEQUENCE OF HwFanENTRY
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION "hwFanTABLE"
  -    ::= { hwFan 1 }
  +    ::=         { hwFan 1 }
   
   hwFanENTRY OBJECT-TYPE
  -    SYNTAX            HwFanENTRY
  -    MAX-ACCESS        not-accessible
  -    STATUS            current
  +    SYNTAX      HwFanENTRY
  +    MAX-ACCESS  not-accessible
  +    STATUS      current
       DESCRIPTION "hwFanENTRY"
  -    INDEX            { hwFanIndex }
  -    ::= { hwFanTABLE 1 }
  +    INDEX       { hwFanIndex }
  +    ::=         { hwFanTABLE 1 }
   
  -HwFanENTRY ::= SEQUENCE {
  -    hwFanIndex    Integer32,
  -    hwFanId       DisplayString,
  -    hwFanSpeed    Integer32,
  -    hwFanStatus   Integer32
  -}
  +HwFanENTRY ::=
  +    SEQUENCE {
  +        hwFanIndex    Integer32,
  +        hwFanId       DisplayString,
  +        hwFanSpeed    Integer32,
  +        hwFanStatus   Integer32
  +    }
   
   hwFanIndex OBJECT-TYPE
  -    SYNTAX            Integer32
  -    MAX-ACCESS        read-only
  -    STATUS            current
  +    SYNTAX      Integer32
  +    MAX-ACCESS  read-only
  +    STATUS      current
       DESCRIPTION "reference index/row number for each Fan"
  -    ::= { hwFanENTRY 1 }
  +    ::=         { hwFanENTRY 1 }
   
   hwFanId OBJECT-TYPE
       SYNTAX      DisplayString
  -    MAX-ACCESS        read-only
  -    STATUS            current
  +    MAX-ACCESS  read-only
  +    STATUS      current
       DESCRIPTION "Fan identification"
  -    ::= { hwFanENTRY 2 }
  +    ::=         { hwFanENTRY 2 }
   
   hwFanSpeed OBJECT-TYPE
       SYNTAX      Integer32
  -    MAX-ACCESS        read-only
  -    STATUS            current
  +    MAX-ACCESS  read-only
  +    STATUS      current
       DESCRIPTION "Fan speed"
  -    ::= { hwFanENTRY 3 }
  +    ::=         { hwFanENTRY 3 }
   
   hwFanStatus OBJECT-TYPE
       SYNTAX      Integer32
  -    MAX-ACCESS        read-only
  -    STATUS            current
  +    MAX-ACCESS  read-only
  +    STATUS      current
       DESCRIPTION "Fan status"
  -    ::= { hwFanENTRY 4 }
  +    ::=         { hwFanENTRY 4 }
   
   --
   --  Hardware: Powersupply
   --
   
   hwPs OBJECT IDENTIFIER
  -    ::= { hardware 6 }
  +    ::=         { hardware 6 }
   
   hwPsTABLE OBJECT-TYPE
  -    SYNTAX            SEQUENCE OF HwPsENTRY
  +    SYNTAX      SEQUENCE OF HwPsENTRY
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION "hwPsTABLE"
  -    ::= { hwPs 1 }
  +    ::=         { hwPs 1 }
   
   hwPsENTRY OBJECT-TYPE
  -    SYNTAX            HwPsENTRY
  -    MAX-ACCESS        not-accessible
  -    STATUS            current
  +    SYNTAX      HwPsENTRY
  +    MAX-ACCESS  not-accessible
  +    STATUS      current
       DESCRIPTION "hwPsENTRY"
  -    INDEX            { hwPsIndex }
  -    ::= { hwPsTABLE 1 }
  +    INDEX       { hwPsIndex }
  +    ::=         { hwPsTABLE 1 }
   
  -HwPsENTRY ::= SEQUENCE {
  -    hwPsIndex    Integer32,
  -    hwPsId       DisplayString,
  -    hwPsStatus   Integer32
  -}
  +HwPsENTRY ::=
  +    SEQUENCE {
  +        hwPsIndex    Integer32,
  +        hwPsId       DisplayString,
  +        hwPsStatus   Integer32
  +    }
   
   hwPsIndex OBJECT-TYPE
  -    SYNTAX            Integer32
  -    MAX-ACCESS        read-only
  -    STATUS            current
  +    SYNTAX      Integer32
  +    MAX-ACCESS  read-only
  +    STATUS      current
       DESCRIPTION "reference index/row number for each Powersupply"
  -    ::= { hwPsENTRY 1 }
  +    ::=         { hwPsENTRY 1 }
   
   hwPsId OBJECT-TYPE
       SYNTAX      DisplayString
  -    MAX-ACCESS        read-only
  -    STATUS            current
  +    MAX-ACCESS  read-only
  +    STATUS      current
       DESCRIPTION "Powersupply identification"
  -    ::= { hwPsENTRY 2 }
  +    ::=         { hwPsENTRY 2 }
   
   hwPsStatus OBJECT-TYPE
       SYNTAX      Integer32
  -    MAX-ACCESS        read-only
  -    STATUS            current
  +    MAX-ACCESS  read-only
  +    STATUS      current
       DESCRIPTION "Powersupply status"
  -    ::= { hwPsENTRY 3 }
  +    ::=         { hwPsENTRY 3 }
   
   --
   --  Hardware: Chassis
   --
   
   hwChassis OBJECT IDENTIFIER
  -    ::= { hardware 7 }
  +    ::=         { hardware 7 }
   
   hwChassisOpen OBJECT-TYPE
       SYNTAX      Integer32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "boolean open/close status of Chassis"
  -    ::= { hwChassis 1 }
  +    ::=         { hwChassis 1 }
   
   hwChassisTemp OBJECT-TYPE
       SYNTAX      Integer32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "temperature inside Chassis"
  -    ::= { hwChassis 2 }
  +    ::=         { hwChassis 2 }
   
   --
   --  Software: Operating System
   --
   
   swOs OBJECT IDENTIFIER
  -    ::= { software 1 }
  +    ::=         { software 1 }
   
   swOsName OBJECT-TYPE
       SYNTAX      DisplayString
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "name of operating system"
  -    ::= { swOs 1 }
  +    ::=         { swOs 1 }
   
   swOsVersion OBJECT-TYPE
       SYNTAX      DisplayString
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "version of operating system"
  -    ::= { swOs 2 }
  +    ::=         { swOs 2 }
   
   --
   --  Software: OpenPKG Instances
   --
   
   swOp OBJECT IDENTIFIER
  -    ::= { software 2 }
  +    ::=         { software 2 }
   
   swOpVersion OBJECT-TYPE
       SYNTAX      DisplayString
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "OpenPKG instance version"
  -    ::= { swOp 1 }
  +    ::=         { swOp 1 }
   
   swOpPkgTABLE OBJECT-TYPE
  -    SYNTAX            SEQUENCE OF SwOpPkgENTRY
  +    SYNTAX      SEQUENCE OF SwOpPkgENTRY
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION "OpenPKG package table"
  -    ::= { swOp 2 }
  +    ::=         { swOp 2 }
   
   swOpPkgENTRY OBJECT-TYPE
  -    SYNTAX            SwOpPkgENTRY
  -    MAX-ACCESS        not-accessible
  -    STATUS            current
  +    SYNTAX      SwOpPkgENTRY
  +    MAX-ACCESS  not-accessible
  +    STATUS      current
       DESCRIPTION "An entry containing a load average and its values."
  -    INDEX            { swOpPkgIndex }
  -    ::= { swOpPkgTABLE 1 }
  +    INDEX       { swOpPkgIndex }
  +    ::=         { swOpPkgTABLE 1 }
   
  -SwOpPkgENTRY ::= SEQUENCE {
  -    swOpPkgIndex     Integer32,
  -    swOpPkgName      DisplayString,
  -    swOpPkgVersion   DisplayString,
  -    swOpPkgRelease   DisplayString,
  -    swOpPkgBuilt     DateAndTime,
  -    swOpPkgInstalled DateAndTime,
  -}
  +SwOpPkgENTRY ::=
  +    SEQUENCE {
  +        swOpPkgIndex     Integer32,
  +        swOpPkgName      DisplayString,
  +        swOpPkgVersion   DisplayString,
  +        swOpPkgRelease   DisplayString,
  +        swOpPkgBuilt     DateAndTime,
  +        swOpPkgInstalled DateAndTime,
  +    }
   
   swOpPkgIndex OBJECT-TYPE
  -    SYNTAX            Integer32
  -    MAX-ACCESS        read-only
  -    STATUS            current
  +    SYNTAX      Integer32
  +    MAX-ACCESS  read-only
  +    STATUS      current
       DESCRIPTION "reference index/row number for each package"
  -    ::= { swOpPkgENTRY 1 }
  +    ::=         { swOpPkgENTRY 1 }
   
   swOpPkgName OBJECT-TYPE
       SYNTAX      DisplayString
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "name of package"
  -    ::= { swOpPkgENTRY 2 }
  +    ::=         { swOpPkgENTRY 2 }
   
   swOpPkgVersion OBJECT-TYPE
  -    SYNTAX            DisplayString
  -    MAX-ACCESS        read-only
  -    STATUS            current
  +    SYNTAX      DisplayString
  +    MAX-ACCESS  read-only
  +    STATUS      current
       DESCRIPTION "vendor version of package"
  -    ::= { swOpPkgENTRY 3 }
  +    ::=         { swOpPkgENTRY 3 }
   
   swOpPkgRelease OBJECT-TYPE
  -    SYNTAX            DisplayString
  -    MAX-ACCESS        read-only
  -    STATUS            current
  +    SYNTAX      DisplayString
  +    MAX-ACCESS  read-only
  +    STATUS      current
       DESCRIPTION "OpenPKG release of package"
  -    ::= { swOpPkgENTRY 4 }
  +    ::=         { swOpPkgENTRY 4 }
   
   swOpPkgBuilt OBJECT-TYPE
  -    SYNTAX            DateAndTime
  -    MAX-ACCESS        read-only
  -    STATUS            current
  +    SYNTAX      DateAndTime
  +    MAX-ACCESS  read-only
  +    STATUS      current
       DESCRIPTION "time package was built"
  -    ::= { swOpPkgENTRY 5 }
  +    ::=         { swOpPkgENTRY 5 }
   
   swOpPkgInstalled OBJECT-TYPE
  -    SYNTAX            DateAndTime
  -    MAX-ACCESS        read-only
  -    STATUS            current
  +    SYNTAX      DateAndTime
  +    MAX-ACCESS  read-only
  +    STATUS      current
       DESCRIPTION "time package was installed"
  -    ::= { swOpPkgENTRY 6 }
  +    ::=         { swOpPkgENTRY 6 }
   
   --
   --  BIND
   --
   
   swBind OBJECT IDENTIFIER
  -    ::= { software 3 }
  +    ::=         { software 3 }
   
   --
   --  BIND status ("rndc status")
   --
   
   swBindStatus OBJECT IDENTIFIER
  -    ::= { swBind 1 }
  +    ::=         { swBind 1 }
   
   swBindStatusNumberOfZones OBJECT-TYPE
       SYNTAX      Integer32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "number of zones"
  -    ::= { swBindStatus 1 }
  +    ::=         { swBindStatus 1 }
   
   swBindStatusDebugLevel OBJECT-TYPE
       SYNTAX      Integer32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "debug level"
  -    ::= { swBindStatus 2 }
  +    ::=         { swBindStatus 2 }
   
   swBindStatusXfersRunning OBJECT-TYPE
       SYNTAX      Integer32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "xfers running"
  -    ::= { swBindStatus 3 }
  +    ::=         { swBindStatus 3 }
   
   swBindStatusXfersDeferred OBJECT-TYPE
       SYNTAX      Integer32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "xfers deferred"
  -    ::= { swBindStatus 4 }
  +    ::=         { swBindStatus 4 }
   
   swBindStatusSoaQueries OBJECT-TYPE
       SYNTAX      Integer32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "SOA queries in progress"
  -    ::= { swBindStatus 5 }
  +    ::=         { swBindStatus 5 }
   
   swBindStatusQueryLogging OBJECT-TYPE
       SYNTAX      DisplayString
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "SOA query logging state"
  -    ::= { swBindStatus 6 }
  +    ::=         { swBindStatus 6 }
   
   swBindStatusRecClientsActive OBJECT-TYPE
       SYNTAX      Integer32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "active recursive clients"
  -    ::= { swBindStatus 7 }
  +    ::=         { swBindStatus 7 }
   
   swBindStatusRecClientsMax OBJECT-TYPE
       SYNTAX      Integer32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "maximum recursive clients"
  -    ::= { swBindStatus 8 }
  +    ::=         { swBindStatus 8 }
   
   swBindStatusTcpClientsActive OBJECT-TYPE
       SYNTAX      Integer32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "active TCP clients"
  -    ::= { swBindStatus 9 }
  +    ::=         { swBindStatus 9 }
   
   swBindStatusTcpClientsMax OBJECT-TYPE
       SYNTAX      Integer32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "maximum TCP clients"
  -    ::= { swBindStatus 10 }
  +    ::=         { swBindStatus 10 }
   
   --
   --  BIND statistics ("rndc stats")
   --
   swBindStats OBJECT IDENTIFIER
  -    ::= { swBind 2 }
  +    ::=         { swBind 2 }
   
   swBindStatsSuccess OBJECT-TYPE
       SYNTAX      Integer32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "Successful Queries"
  -    ::= { swBindStats 1 }
  +    ::=         { swBindStats 1 }
   
   swBindStatsReferral OBJECT-TYPE
       SYNTAX      Integer32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "Referrals"
  -    ::= { swBindStats 2 }
  +    ::=         { swBindStats 2 }
   
   swBindStatsNxrrset OBJECT-TYPE
       SYNTAX      Integer32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "Nx RR Set"
  -    ::= { swBindStats 3 }
  +    ::=         { swBindStats 3 }
   
   swBindStatsNxdomain OBJECT-TYPE
       SYNTAX      Integer32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "Nx Domain"
  -    ::= { swBindStats 4 }
  +    ::=         { swBindStats 4 }
   
   swBindStatsRecursion OBJECT-TYPE
       SYNTAX      Integer32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "Recursion"
  -    ::= { swBindStats 5 }
  +    ::=         { swBindStats 5 }
   
   swBindStatsFailure OBJECT-TYPE
       SYNTAX      Integer32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION "Failed Queries"
  -    ::= { swBindStats 6 }
  +    ::=         { swBindStats 6 }
   
   END
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar  1 12:29:33 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 6268E75292E; Thu,  1 Mar 2007 12:29:33 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ ChangeLog README VERSION
Message-Id: <20070301112933.6268E75292E@mail.ossp.org>
Date: Thu,  1 Mar 2007 12:29:33 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Mar-2007 12:29:33
  Branch: HEAD                             Handle: 2007030111293300

  Modified files:
    ossp-pkg/snmpdx         ChangeLog README VERSION

  Log:
    bump up to a version 1.0.0

  Summary:
    Revision    Changes     Path
    1.21        +1  -1      ossp-pkg/snmpdx/ChangeLog
    1.22        +1  -1      ossp-pkg/snmpdx/README
    1.15        +1  -1      ossp-pkg/snmpdx/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 ChangeLog
  --- ossp-pkg/snmpdx/ChangeLog	1 Mar 2007 11:29:02 -0000	1.20
  +++ ossp-pkg/snmpdx/ChangeLog	1 Mar 2007 11:29:33 -0000	1.21
  @@ -10,7 +10,7 @@
     ChangeLog
     =========
   
  -  Changes between 0.2.11 and 0.3.0 (2005-10-05 to 2007-03-01):
  +  Changes between 0.2.11 and 1.0.0 (2005-10-05 to 2007-03-01):
   
      *) Cleanup formatting of snmpdx.mib
         [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/README
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 README
  --- ossp-pkg/snmpdx/README	1 Mar 2007 10:54:57 -0000	1.21
  +++ ossp-pkg/snmpdx/README	1 Mar 2007 11:29:33 -0000	1.22
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/_| |_|_| |_| |_| .__/ \__,_/_/\_\
                                                          |_|
     OSSP snmpdx - SNMP Daemon Extension
  -  Version 0.3.0 (01-Mar-2007)
  +  Version 1.0.0 (01-Mar-2007)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/VERSION
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 VERSION
  --- ossp-pkg/snmpdx/VERSION	1 Mar 2007 10:53:20 -0000	1.14
  +++ ossp-pkg/snmpdx/VERSION	1 Mar 2007 11:29:33 -0000	1.15
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP snmpdx (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP snmpdx, Version 0.3.0 (01-Mar-2007)
  +  This is OSSP snmpdx, Version 1.0.0 (01-Mar-2007)
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar  1 12:30:07 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id A70D175290A; Thu,  1 Mar 2007 12:30:07 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/snmpdx/ 00TODO
Message-Id: <20070301113007.A70D175290A@mail.ossp.org>
Date: Thu,  1 Mar 2007 12:30:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   01-Mar-2007 12:30:07
  Branch: HEAD                             Handle: 2007030111300700

  Modified files:
    ossp-pkg/snmpdx         00TODO

  Log:
    nothing really has to be done for now

  Summary:
    Revision    Changes     Path
    1.15        +2  -3      ossp-pkg/snmpdx/00TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/snmpdx/00TODO
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 00TODO
  --- ossp-pkg/snmpdx/00TODO	10 Sep 2003 14:17:05 -0000	1.14
  +++ ossp-pkg/snmpdx/00TODO	1 Mar 2007 11:30:07 -0000	1.15
  @@ -9,12 +9,11 @@
     TODO
     ====
   
  -  - implement more probes [thl]
  -  - write snmpdx.pod documentation
  -
     CANDO
     =====
   
  +  - write more snmpdx.pod documentation
  +  - implement more probes [thl]
     - allow two modules to run and cache the same command with different
       expire times by using/enforcing the smaller expire time in the cache object.
     - speed up initial MIB processing by trying to consolidate snmptranslate calls?
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar  1 12:37:03 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 6B275752CA6; Thu,  1 Mar 2007 12:37:03 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/tool/ index.wml ossp-w...
Message-Id: <20070301113703.6B275752CA6@mail.ossp.org>
Date: Thu,  1 Mar 2007 12:37:03 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   01-Mar-2007 12:37:03
  Branch: HEAD                             Handle: 2007030111370201

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/snmpdx
                            index.wml

  Log:
    release OSSP snmpdx 1.0.0

  Summary:
    Revision    Changes     Path
    1.166       +1  -0      ossp-web/new/news.txt
    1.58        +3  -3      ossp-web/pkg/tool/index.wml
    1.9         +3  -3      ossp-web/pkg/tool/snmpdx/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.165 -r1.166 news.txt
  --- ossp-web/new/news.txt	8 Feb 2007 09:43:20 -0000	1.165
  +++ ossp-web/new/news.txt	1 Mar 2007 11:37:02 -0000	1.166
  @@ -1,3 +1,4 @@
  +01-Mar-2007: Released T<OSSP snmpdx> 1.0.0
   08-Feb-2007: Released L<OSSP js> 1.6.20070208
   20-Aug-2006: Released L<OSSP js> 1.6.20060820
   15-Aug-2006: Released L<OSSP mm> 1.4.2
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.57 -r1.58 index.wml
  --- ossp-web/pkg/tool/index.wml	25 Jul 2006 13:05:14 -0000	1.57
  +++ ossp-web/pkg/tool/index.wml	1 Mar 2007 11:37:03 -0000	1.58
  @@ -27,6 +27,9 @@
     <pkg_item name="eperl" longname="OSSP eperl" type="tool"
               desc="Embedded Perl Language"
   	        done=100 stable="2.2.14" unstable="none">
  +  <pkg_item name="snmpdx" longname="OSSP snmpdx" type="tool"
  +            desc="SNMP Daemon Extension"
  +	        done=100 stable="none" unstable="1.0.0">
     <pkg_item name="petidomo" longname="OSSP petidomo" type="tool" derived=yes
               desc="Mailing List Manager"
   	        done=95 stable="none" unstable="4.0b1">
  @@ -60,9 +63,6 @@
     <pkg_item name="mct" longname="OSSP mct" type="tool"
               desc="Multiple Choice Test Engine"
   	        done=90 stable="none" unstable="none">
  -  <pkg_item name="snmpdx" longname="OSSP snmpdx" type="tool"
  -            desc="SNMP Daemon Extension"
  -	        done=80 stable="none" unstable="0.2.11">
     <pkg_item name="quos" longname="OSSP quos" type="tool"
               desc="Query On Steroids"
   	        done=80 stable="none" unstable="0.2.0">
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/snmpdx/index.wml
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 index.wml
  --- ossp-web/pkg/tool/snmpdx/index.wml	5 Oct 2005 18:14:53 -0000	1.8
  +++ ossp-web/pkg/tool/snmpdx/index.wml	1 Mar 2007 11:37:03 -0000	1.9
  @@ -21,8 +21,8 @@
   
   <pkg_status
       stable="none" stable_date="none"
  -    unstable="0.2.11" unstable_date="05-Oct-2005"
  -	genesis="August 2003" done=80>
  +    unstable="1.0.0" unstable_date="01-Mar-2007"
  +	genesis="August 2003" done=100>
   
   <h2>Source</h2>
   
  @@ -31,7 +31,7 @@
       url=$(FTP_ROOT_URL)/pkg/tool/snmpdx/
       directory=$(FTP_ROOT_DIR)/pkg/tool/snmpdx/
       files="snmpdx-*.tar.gz" 
  -	stable="none" unstable="snmpdx-0.2.11.tar.gz">
  +	stable="none" unstable="snmpdx-1.0.0.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar  2 16:09:44 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 36853752929; Fri,  2 Mar 2007 16:09:44 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ ChangeLog devtool.conf
Message-Id: <20070302150944.36853752929@mail.ossp.org>
Date: Fri,  2 Mar 2007 16:09:44 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /v/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   02-Mar-2007 16:09:44
  Branch: HEAD                             Handle: 2007030215094300

  Modified files:
    ossp-pkg/l2             ChangeLog devtool.conf

  Log:
    Upgraded build environment

  Summary:
    Revision    Changes     Path
    1.32        +6  -0      ossp-pkg/l2/ChangeLog
    1.23        +3  -3      ossp-pkg/l2/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 ChangeLog
  --- ossp-pkg/l2/ChangeLog	3 Oct 2005 08:20:18 -0000	1.31
  +++ ossp-pkg/l2/ChangeLog	2 Mar 2007 15:09:43 -0000	1.32
  @@ -9,6 +9,12 @@
     ChangeLog
     =========
   
  +  Changes between 0.9.11 and ...
  +
  +    *) Upgraded build environment to
  +       GNU Shtool 2.0.6, GNU Libtool 1.5.22 and GNU Autoconf 2.61
  +       [http://thomas.lotterer.net]
  +
     Changes between 0.9.10 and 0.9.11 (18-Feb-2005 to 03-Oct-2005)
   
       *) Upgraded build environment to GNU shtool 2.0.3 and
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 devtool.conf
  --- ossp-pkg/l2/devtool.conf	3 Oct 2005 08:08:11 -0000	1.22
  +++ ossp-pkg/l2/devtool.conf	2 Mar 2007 15:09:43 -0000	1.23
  @@ -42,9 +42,9 @@
       shtool subst -e 's;#include "sa.h";#include "l2_ut_sa.h";' l2_ut_sa.c
   
   %autogen
  -    @autogen shtool   2.0.3  "2.0.*" echo fixperm install mkdir tarball version
  -    @autogen libtool  1.5.20 "1.5*"
  -    @autogen autoconf 2.59   "2.5[4-9]*"
  +    @autogen shtool   2.0.6  "2.0.*" echo fixperm install mkdir tarball version
  +    @autogen libtool  1.5.22 "1.5*"
  +    @autogen autoconf 2.61   "2.6[0-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar  2 16:13:29 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 635B3752934; Fri,  2 Mar 2007 16:13:29 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ ChangeLog configure.ac l2_ch_file.c
Message-Id: <20070302151329.635B3752934@mail.ossp.org>
Date: Fri,  2 Mar 2007 16:13:29 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /v/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   02-Mar-2007 16:13:29
  Branch: HEAD                             Handle: 2007030215132800

  Modified files:
    ossp-pkg/l2             ChangeLog configure.ac l2_ch_file.c

  Log:
    large file support for l2_ch_file, motivated by the Kolab-Konsortium

  Summary:
    Revision    Changes     Path
    1.33        +7  -1      ossp-pkg/l2/ChangeLog
    1.32        +19 -0      ossp-pkg/l2/configure.ac
    1.34        +8  -0      ossp-pkg/l2/l2_ch_file.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 ChangeLog
  --- ossp-pkg/l2/ChangeLog	2 Mar 2007 15:09:43 -0000	1.32
  +++ ossp-pkg/l2/ChangeLog	2 Mar 2007 15:13:28 -0000	1.33
  @@ -9,7 +9,13 @@
     ChangeLog
     =========
   
  -  Changes between 0.9.11 and ...
  +  Changes between 0.9.11 and 0.9.12 (03-Oct-2005 to 02-Mar-2007)
  +
  +    *) Support for 1996-03-20 addition to Single UNIX Specification for
  +       systems that still require the Transitional Extensions to System
  +       Interfaces to support arbitrary file sizes (LFS >2GiB).
  +       Motivated by the Kolab-Konsortium.
  +       [http://thomas.lotterer.net]
   
       *) Upgraded build environment to
          GNU Shtool 2.0.6, GNU Libtool 1.5.22 and GNU Autoconf 2.61
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/configure.ac
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 configure.ac
  --- ossp-pkg/l2/configure.ac	3 Oct 2005 08:08:11 -0000	1.31
  +++ ossp-pkg/l2/configure.ac	2 Mar 2007 15:13:28 -0000	1.32
  @@ -57,6 +57,25 @@
   
   AC_CHECK_HEADERS(sys/time.h)
   
  +AC_HAVE_HEADERS(features.h)
  +AC_MSG_CHECKING(whether _GNU_SOURCE is required under GNU glibc)
  +AC_TRY_RUN(
  +#define RETURN 1
  +#ifdef HAVE_FEATURES_H
  +#include <features.h>
  +#if (__GLIBC__+0) > 0
  +#undef  RETURN
  +#define RETURN 0
  +#endif
  +#endif
  +int main(int argc, char *argv[]) { return RETURN; }
  +,dnl
  +AC_MSG_RESULT(yes)
  +CFLAGS="$CFLAGS -D_GNU_SOURCE"
  +,dnl
  +AC_MSG_RESULT(no)
  +)
  +
   AC_CHECK_FUNCS(inet_aton inet_pton inet_ntoa inet_ntop snprintf vsnprintf setitimer isnan isinf)
   
   CHECK_VA_COPY
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ch_file.c
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 l2_ch_file.c
  --- ossp-pkg/l2/l2_ch_file.c	3 Oct 2005 08:08:11 -0000	1.33
  +++ ossp-pkg/l2/l2_ch_file.c	2 Mar 2007 15:13:28 -0000	1.34
  @@ -60,6 +60,14 @@
       struct timeval tv;
       struct stat st;
   
  +#ifdef O_LARGEFILE
  +    /* Support for 1996-03-20 addition to Single UNIX Specification for
  +     * systems that still require the Transitional Extensions to System
  +     * Interfaces to support arbitrary file sizes (LFS >2GiB)
  +     */
  +    mode |= O_LARGEFILE;
  +#endif
  +
       /* open channel file */
       mask = umask(0);
       cfg->fd = open(cfg->path, mode, cfg->perm);
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar  2 17:33:15 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id AEE6275292F; Fri,  2 Mar 2007 17:33:15 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ README l2_version.c
Message-Id: <20070302163315.AEE6275292F@mail.ossp.org>
Date: Fri,  2 Mar 2007 17:33:15 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /v/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   02-Mar-2007 17:33:15
  Branch: HEAD                             Handle: 2007030216331500

  Modified files:
    ossp-pkg/l2             README l2_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.24        +1  -1      ossp-pkg/l2/README
    1.21        +9  -9      ossp-pkg/l2/l2_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/README
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 README
  --- ossp-pkg/l2/README	3 Oct 2005 08:08:11 -0000	1.23
  +++ ossp-pkg/l2/README	2 Mar 2007 16:33:15 -0000	1.24
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_|_____|
   
     OSSP l2 -- Flexible Logging
  -  Version 0.9.11 (03-Oct-2005)
  +  Version 0.9.12 (02-Mar-2007)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_version.c
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 l2_version.c
  --- ossp-pkg/l2/l2_version.c	3 Oct 2005 08:01:28 -0000	1.20
  +++ ossp-pkg/l2/l2_version.c	2 Mar 2007 16:33:15 -0000	1.21
  @@ -8,7 +8,7 @@
   #ifndef _L2_VERSION_C_
   #define _L2_VERSION_C_
   
  -#define L2_VERSION 0x00920B
  +#define L2_VERSION 0x00920C
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _L2_VERSION_C_AS_HEADER_
   
   l2_version_t l2_version = {
  -    0x00920B,
  -    "0.9.11",
  -    "0.9.11 (03-Oct-2005)",
  -    "This is OSSP l2, Version 0.9.11 (03-Oct-2005)",
  -    "OSSP l2 0.9.11 (03-Oct-2005)",
  -    "OSSP l2/0.9.11",
  -    "@(#)OSSP l2 0.9.11 (03-Oct-2005)",
  -    "$Id: l2_version.c,v 1.20 2005/10/03 08:01:28 rse Exp $"
  +    0x00920C,
  +    "0.9.12",
  +    "0.9.12 (02-Mar-2007)",
  +    "This is OSSP l2, Version 0.9.12 (02-Mar-2007)",
  +    "OSSP l2 0.9.12 (02-Mar-2007)",
  +    "OSSP l2/0.9.12",
  +    "@(#)OSSP l2 0.9.12 (02-Mar-2007)",
  +    "$Id: l2_version.c,v 1.21 2007/03/02 16:33:15 thl Exp $"
   };
   
   #endif /* _L2_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar  2 17:40:28 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 79A73752929; Fri,  2 Mar 2007 17:40:28 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ ChangeLog devtool.conf
Message-Id: <20070302164028.79A73752929@mail.ossp.org>
Date: Fri,  2 Mar 2007 17:40:28 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /v/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   02-Mar-2007 17:40:28
  Branch: HEAD                             Handle: 2007030216402800

  Modified files:
    ossp-pkg/fsl            ChangeLog devtool.conf

  Log:
    Upgraded build environment

  Summary:
    Revision    Changes     Path
    1.41        +6  -0      ossp-pkg/fsl/ChangeLog
    1.30        +3  -3      ossp-pkg/fsl/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.40 -r1.41 ChangeLog
  --- ossp-pkg/fsl/ChangeLog	3 Oct 2005 09:28:53 -0000	1.40
  +++ ossp-pkg/fsl/ChangeLog	2 Mar 2007 16:40:28 -0000	1.41
  @@ -8,6 +8,12 @@
   
     CHANGELOG
   
  +  Changes between 1.6.1 and ...
  +
  +    *) Upgraded build environment to
  +       GNU Shtool 2.0.6, GNU Libtool 1.5.22 and GNU Autoconf 2.61
  +       [http://thomas.lotterer.net]
  +
     Changes between 1.6.0 and 1.6.1 (18-Feb-2005 to 03-Oct-2005)
   
       *) Apply OpenPKG cruel hack for HP/UX and _XOPEN_SOURCE_EXTENDED
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 devtool.conf
  --- ossp-pkg/fsl/devtool.conf	3 Oct 2005 09:26:14 -0000	1.29
  +++ ossp-pkg/fsl/devtool.conf	2 Mar 2007 16:40:28 -0000	1.30
  @@ -30,9 +30,9 @@
       done
   
   %autogen
  -    @autogen shtool   2.0.3  "2.0.*" echo fixperm install mkdir tarball version
  -    @autogen libtool  1.5.20 "1.5.*"
  -    @autogen autoconf 2.59   "2.5[4-9]*"
  +    @autogen shtool   2.0.6  "2.0.*" echo fixperm install mkdir tarball version
  +    @autogen libtool  1.5.22 "1.5*"
  +    @autogen autoconf 2.61   "2.6[0-9]*"
   
       for name in l2 cfg pcre; do
           echo "===> lib_${name} (devtool autogen)"
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar  2 17:42:03 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 692E275291F; Fri,  2 Mar 2007 17:42:03 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ ChangeLog devtool.conf
Message-Id: <20070302164203.692E275291F@mail.ossp.org>
Date: Fri,  2 Mar 2007 17:42:03 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /v/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   02-Mar-2007 17:42:03
  Branch: HEAD                             Handle: 2007030216420300

  Modified files:
    ossp-pkg/fsl            ChangeLog devtool.conf

  Log:
    lib_cfg 0.9.10 -> 0.9.11

  Summary:
    Revision    Changes     Path
    1.42        +6  -0      ossp-pkg/fsl/ChangeLog
    1.31        +1  -1      ossp-pkg/fsl/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.41 -r1.42 ChangeLog
  --- ossp-pkg/fsl/ChangeLog	2 Mar 2007 16:40:28 -0000	1.41
  +++ ossp-pkg/fsl/ChangeLog	2 Mar 2007 16:42:03 -0000	1.42
  @@ -10,6 +10,12 @@
   
     Changes between 1.6.1 and ...
   
  +    *) lib_cfg 0.9.10 -> 0.9.11
  +       Replace "return 0" with the official "yyterminate()"
  +       in cfg_syn_scan.l and fix quotation parsing by replacing
  +       two "yytext[1]" with the intended "yytext[0]".
  +       [Ralf S. Engelschall <rse@engelschall.com>]
  +    
       *) Upgraded build environment to
          GNU Shtool 2.0.6, GNU Libtool 1.5.22 and GNU Autoconf 2.61
          [http://thomas.lotterer.net]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 devtool.conf
  --- ossp-pkg/fsl/devtool.conf	2 Mar 2007 16:40:28 -0000	1.30
  +++ ossp-pkg/fsl/devtool.conf	2 Mar 2007 16:42:03 -0000	1.31
  @@ -4,7 +4,7 @@
   
   %checkout
       BRANCH_L2="L2_0_9_11"
  -    BRANCH_CFG="CFG_0_9_10"
  +    BRANCH_CFG="CFG_0_9_11"
       BRANCH_PCRE=""
       for name in l2 cfg pcre; do
           release=BRANCH_`echo ${name} | tr [a-z] [A-Z]`
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar  2 17:43:30 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 8334F75291F; Fri,  2 Mar 2007 17:43:30 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ ChangeLog devtool.conf
Message-Id: <20070302164330.8334F75291F@mail.ossp.org>
Date: Fri,  2 Mar 2007 17:43:30 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /v/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   02-Mar-2007 17:43:30
  Branch: HEAD                             Handle: 2007030216433000

  Modified files:
    ossp-pkg/fsl            ChangeLog devtool.conf

  Log:
    large file support for l2_ch_file, motivated by the Kolab-Konsortium

  Summary:
    Revision    Changes     Path
    1.43        +7  -1      ossp-pkg/fsl/ChangeLog
    1.32        +1  -1      ossp-pkg/fsl/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.42 -r1.43 ChangeLog
  --- ossp-pkg/fsl/ChangeLog	2 Mar 2007 16:42:03 -0000	1.42
  +++ ossp-pkg/fsl/ChangeLog	2 Mar 2007 16:43:30 -0000	1.43
  @@ -8,7 +8,13 @@
   
     CHANGELOG
   
  -  Changes between 1.6.1 and ...
  +  Changes between 1.6.1 and 1.7.0 (03-Oct-2005 02-Mar-2007)
  +
  +    *) Support for 1996-03-20 addition to Single UNIX Specification for
  +       systems that still require the Transitional Extensions to System
  +       Interfaces to support arbitrary file sizes (LFS >2GiB).
  +       Motivated by the Kolab-Konsortium.
  +       [http://thomas.lotterer.net]
   
       *) lib_cfg 0.9.10 -> 0.9.11
          Replace "return 0" with the official "yyterminate()"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 devtool.conf
  --- ossp-pkg/fsl/devtool.conf	2 Mar 2007 16:42:03 -0000	1.31
  +++ ossp-pkg/fsl/devtool.conf	2 Mar 2007 16:43:30 -0000	1.32
  @@ -3,7 +3,7 @@
   ##
   
   %checkout
  -    BRANCH_L2="L2_0_9_11"
  +    BRANCH_L2="L2_0_9_12"
       BRANCH_CFG="CFG_0_9_11"
       BRANCH_PCRE=""
       for name in l2 cfg pcre; do
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar  2 18:01:54 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 3D575752929; Fri,  2 Mar 2007 18:01:54 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ README fsl_version.c
Message-Id: <20070302170154.3D575752929@mail.ossp.org>
Date: Fri,  2 Mar 2007 18:01:54 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /v/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   02-Mar-2007 18:01:54
  Branch: HEAD                             Handle: 2007030217015300

  Modified files:
    ossp-pkg/fsl            README fsl_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.51        +1  -1      ossp-pkg/fsl/README
    1.37        +9  -9      ossp-pkg/fsl/fsl_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/README
  ============================================================================
  $ cvs diff -u -r1.50 -r1.51 README
  --- ossp-pkg/fsl/README	3 Oct 2005 09:28:53 -0000	1.50
  +++ ossp-pkg/fsl/README	2 Mar 2007 17:01:53 -0000	1.51
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_| |___/_|
    
     OSSP fsl - Faking/Flexible Syslog Library
  -  Version 1.6.1 (03-Oct-2005)
  +  Version 1.7.0 (02-Mar-2007)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl_version.c
  ============================================================================
  $ cvs diff -u -r1.36 -r1.37 fsl_version.c
  --- ossp-pkg/fsl/fsl_version.c	3 Oct 2005 09:27:54 -0000	1.36
  +++ ossp-pkg/fsl/fsl_version.c	2 Mar 2007 17:01:53 -0000	1.37
  @@ -8,7 +8,7 @@
   #ifndef _FSL_VERSION_C_
   #define _FSL_VERSION_C_
   
  -#define FSL_VERSION 0x106201
  +#define FSL_VERSION 0x107200
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _FSL_VERSION_C_AS_HEADER_
   
   fsl_version_t fsl_version = {
  -    0x106201,
  -    "1.6.1",
  -    "1.6.1 (03-Oct-2005)",
  -    "This is OSSP fsl, Version 1.6.1 (03-Oct-2005)",
  -    "OSSP fsl 1.6.1 (03-Oct-2005)",
  -    "OSSP fsl/1.6.1",
  -    "@(#)OSSP fsl 1.6.1 (03-Oct-2005)",
  -    "$Id: fsl_version.c,v 1.36 2005/10/03 09:27:54 rse Exp $"
  +    0x107200,
  +    "1.7.0",
  +    "1.7.0 (02-Mar-2007)",
  +    "This is OSSP fsl, Version 1.7.0 (02-Mar-2007)",
  +    "OSSP fsl 1.7.0 (02-Mar-2007)",
  +    "OSSP fsl/1.7.0",
  +    "@(#)OSSP fsl 1.7.0 (02-Mar-2007)",
  +    "$Id: fsl_version.c,v 1.37 2007/03/02 17:01:53 thl Exp $"
   };
   
   #endif /* _FSL_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar  2 18:02:09 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id EB02A752917; Fri,  2 Mar 2007 18:02:08 +0100 (CET)
From: "Thomas Lotterer" <thl@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/fsl/ fsl_version.c
Message-Id: <20070302170208.EB02A752917@mail.ossp.org>
Date: Fri,  2 Mar 2007 18:02:08 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Thomas Lotterer
  Root:   /v/ossp/cvs                      Email:  thl@ossp.org
  Module: ossp-pkg                         Date:   02-Mar-2007 18:02:08
  Branch: HEAD                             Handle: 2007030217020800

  Modified files:
    ossp-pkg/fsl            fsl_version.c

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.38        +0  -0      ossp-pkg/fsl/fsl_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/fsl/fsl_version.c
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 fsl_version.c
  --- ossp-pkg/fsl/fsl_version.c	2 Mar 2007 17:01:53 -0000	1.37
  +++ ossp-pkg/fsl/fsl_version.c	2 Mar 2007 17:02:08 -0000	1.38
  @@ -39,7 +39,7 @@
       "OSSP fsl 1.7.0 (02-Mar-2007)",
       "OSSP fsl/1.7.0",
       "@(#)OSSP fsl 1.7.0 (02-Mar-2007)",
  -    "$Id: fsl_version.c,v 1.37 2007/03/02 17:01:53 thl Exp $"
  +    "$Id: fsl_version.c,v 1.38 2007/03/02 17:02:08 thl Exp $"
   };
   
   #endif /* _FSL_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Mon Mar 19 21:13:32 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 25C147528EE; Mon, 19 Mar 2007 21:13:32 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ README ase.cgi ase.cgi.enroll.pl ase.cgi.loa...
Message-Id: <20070319201332.25C147528EE@mail.ossp.org>
Date: Mon, 19 Mar 2007 21:13:32 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-Mar-2007 21:13:31
  Branch: HEAD                             Handle: 2007031920133000

  Modified files:
    ossp-pkg/ase            README ase.cgi ase.cgi.enroll.pl ase.cgi.loader.pl
                            ase.cgi.login.pl ase.cgi.logout.pl ase.cgi.main.pl
                            ase.cgi.profile.pl ase.cgi.recover.pl
                            ase.cgi.rpc.pl ase.cgi.scode.pl ase.cgi.util.pl
                            ase.css ase.pl ase.pm ase.sql sample.cgi

  Log:
    bump year in copyright messages

  Summary:
    Revision    Changes     Path
    1.5         +2  -2      ossp-pkg/ase/README
    1.14        +2  -2      ossp-pkg/ase/ase.cgi
    1.18        +2  -2      ossp-pkg/ase/ase.cgi.enroll.pl
    1.6         +2  -2      ossp-pkg/ase/ase.cgi.loader.pl
    1.13        +2  -2      ossp-pkg/ase/ase.cgi.login.pl
    1.8         +2  -2      ossp-pkg/ase/ase.cgi.logout.pl
    1.20        +2  -2      ossp-pkg/ase/ase.cgi.main.pl
    1.8         +2  -2      ossp-pkg/ase/ase.cgi.profile.pl
    1.3         +2  -2      ossp-pkg/ase/ase.cgi.recover.pl
    1.9         +2  -2      ossp-pkg/ase/ase.cgi.rpc.pl
    1.7         +2  -2      ossp-pkg/ase/ase.cgi.scode.pl
    1.15        +2  -2      ossp-pkg/ase/ase.cgi.util.pl
    1.8         +2  -2      ossp-pkg/ase/ase.css
    1.4         +2  -2      ossp-pkg/ase/ase.pl
    1.14        +2  -2      ossp-pkg/ase/ase.pm
    1.6         +2  -2      ossp-pkg/ase/ase.sql
    1.12        +2  -2      ossp-pkg/ase/sample.cgi
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/README
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 README
  --- ossp-pkg/ase/README	29 Aug 2005 13:13:23 -0000	1.4
  +++ ossp-pkg/ase/README	19 Mar 2007 20:13:30 -0000	1.5
  @@ -13,8 +13,8 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2005 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2005 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2005-2007 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2005-2007 The OSSP Project <http://www.ossp.org/>
   
     This file is part of OSSP ase, a service environment for managing
     affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 ase.cgi
  --- ossp-pkg/ase/ase.cgi	14 Dec 2006 21:42:45 -0000	1.13
  +++ ossp-pkg/ase/ase.cgi	19 Mar 2007 20:13:30 -0000	1.14
  @@ -1,8 +1,8 @@
   #!/usr/bin/env perl
   ##
   ##  OSSP ase -- Affiliation Service Environment
  -##  Copyright (c) 2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2005-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2005-2007 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP ase, a service environment for managing
   ##  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	14 Dec 2006 21:52:16 -0000	1.17
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	19 Mar 2007 20:13:30 -0000	1.18
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP ase -- Affiliation Service Environment
  -##  Copyright (c) 2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2005-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2005-2007 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP ase, a service environment for managing
   ##  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.loader.pl
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ase.cgi.loader.pl
  --- ossp-pkg/ase/ase.cgi.loader.pl	21 Nov 2005 09:07:37 -0000	1.5
  +++ ossp-pkg/ase/ase.cgi.loader.pl	19 Mar 2007 20:13:30 -0000	1.6
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP ase -- Affiliation Service Environment
  -##  Copyright (c) 2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2005-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2005-2007 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP ase, a service environment for managing
   ##  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	5 Apr 2006 17:39:15 -0000	1.12
  +++ ossp-pkg/ase/ase.cgi.login.pl	19 Mar 2007 20:13:30 -0000	1.13
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP ase -- Affiliation Service Environment
  -##  Copyright (c) 2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2005-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2005-2007 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP ase, a service environment for managing
   ##  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.logout.pl
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 ase.cgi.logout.pl
  --- ossp-pkg/ase/ase.cgi.logout.pl	5 Apr 2006 17:39:15 -0000	1.7
  +++ ossp-pkg/ase/ase.cgi.logout.pl	19 Mar 2007 20:13:30 -0000	1.8
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP ase -- Affiliation Service Environment
  -##  Copyright (c) 2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2005-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2005-2007 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP ase, a service environment for managing
   ##  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	23 Nov 2005 17:56:41 -0000	1.19
  +++ ossp-pkg/ase/ase.cgi.main.pl	19 Mar 2007 20:13:30 -0000	1.20
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP ase -- Affiliation Service Environment
  -##  Copyright (c) 2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2005-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2005-2007 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP ase, a service environment for managing
   ##  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.profile.pl
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 ase.cgi.profile.pl
  --- ossp-pkg/ase/ase.cgi.profile.pl	5 Apr 2006 17:39:15 -0000	1.7
  +++ ossp-pkg/ase/ase.cgi.profile.pl	19 Mar 2007 20:13:30 -0000	1.8
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP ase -- Affiliation Service Environment
  -##  Copyright (c) 2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2005-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2005-2007 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP ase, a service environment for managing
   ##  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.recover.pl
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ase.cgi.recover.pl
  --- ossp-pkg/ase/ase.cgi.recover.pl	5 Apr 2006 17:39:15 -0000	1.2
  +++ ossp-pkg/ase/ase.cgi.recover.pl	19 Mar 2007 20:13:30 -0000	1.3
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP ase -- Affiliation Service Environment
  -##  Copyright (c) 2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2005-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2005-2007 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP ase, a service environment for managing
   ##  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.rpc.pl
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 ase.cgi.rpc.pl
  --- ossp-pkg/ase/ase.cgi.rpc.pl	23 Nov 2005 14:28:00 -0000	1.8
  +++ ossp-pkg/ase/ase.cgi.rpc.pl	19 Mar 2007 20:13:30 -0000	1.9
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP ase -- Affiliation Service Environment
  -##  Copyright (c) 2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2005-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2005-2007 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP ase, a service environment for managing
   ##  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.scode.pl
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ase.cgi.scode.pl
  --- ossp-pkg/ase/ase.cgi.scode.pl	30 Nov 2005 13:20:58 -0000	1.6
  +++ ossp-pkg/ase/ase.cgi.scode.pl	19 Mar 2007 20:13:30 -0000	1.7
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP ase -- Affiliation Service Environment
  -##  Copyright (c) 2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2005-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2005-2007 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP ase, a service environment for managing
   ##  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.util.pl
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 ase.cgi.util.pl
  --- ossp-pkg/ase/ase.cgi.util.pl	14 Dec 2006 21:53:53 -0000	1.14
  +++ ossp-pkg/ase/ase.cgi.util.pl	19 Mar 2007 20:13:30 -0000	1.15
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP ase -- Affiliation Service Environment
  -##  Copyright (c) 2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2005-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2005-2007 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP ase, a service environment for managing
   ##  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.css
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 ase.css
  --- ossp-pkg/ase/ase.css	5 Apr 2006 17:39:15 -0000	1.7
  +++ ossp-pkg/ase/ase.css	19 Mar 2007 20:13:30 -0000	1.8
  @@ -1,7 +1,7 @@
   /*
   **  OSSP ase -- Affiliation Service Environment
  -**  Copyright (c) 2005 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2005 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2005-2007 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2005-2007 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP ase, a service environment for managing
   **  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.pl
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ase.pl
  --- ossp-pkg/ase/ase.pl	5 Apr 2006 17:39:15 -0000	1.3
  +++ ossp-pkg/ase/ase.pl	19 Mar 2007 20:13:30 -0000	1.4
  @@ -1,8 +1,8 @@
   #!/usr/bin/env perl
   ##
   ##  OSSP ase -- Affiliation Service Environment
  -##  Copyright (c) 2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2005-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2005-2007 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP ase, a service environment for managing
   ##  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.pm
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 ase.pm
  --- ossp-pkg/ase/ase.pm	26 Nov 2005 13:05:07 -0000	1.13
  +++ ossp-pkg/ase/ase.pm	19 Mar 2007 20:13:30 -0000	1.14
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP ase -- Affiliation Service Environment
  -##  Copyright (c) 2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2005-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2005-2007 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP ase, a service environment for managing
   ##  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.sql
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ase.sql
  --- ossp-pkg/ase/ase.sql	28 Nov 2005 17:11:27 -0000	1.5
  +++ ossp-pkg/ase/ase.sql	19 Mar 2007 20:13:30 -0000	1.6
  @@ -1,7 +1,7 @@
   --
   --  OSSP ase -- Affiliation Service Environment
  ---  Copyright (c) 2005 Ralf S. Engelschall <rse@engelschall.com>
  ---  Copyright (c) 2005 The OSSP Project <http://www.ossp.org/>
  +--  Copyright (c) 2005-2007 Ralf S. Engelschall <rse@engelschall.com>
  +--  Copyright (c) 2005-2007 The OSSP Project <http://www.ossp.org/>
   --
   --  This file is part of OSSP ase, a service environment for managing
   --  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/sample.cgi
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 sample.cgi
  --- ossp-pkg/ase/sample.cgi	23 Nov 2005 17:56:41 -0000	1.11
  +++ ossp-pkg/ase/sample.cgi	19 Mar 2007 20:13:30 -0000	1.12
  @@ -1,8 +1,8 @@
   #!/usr/bin/env perl
   ##
   ##  OSSP ase -- Affiliation Service Environment
  -##  Copyright (c) 2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2005-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2005-2007 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP ase, a service environment for managing
   ##  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  @@ .

From ossp-cvs-owner@ossp.org  Mon Mar 19 22:07:32 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 19D5D7528EE; Mon, 19 Mar 2007 22:07:32 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cfg ase.cgi ase.cgi.login.pl ase.cgi.mai...
Message-Id: <20070319210732.19D5D7528EE@mail.ossp.org>
Date: Mon, 19 Mar 2007 22:07:32 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-Mar-2007 22:07:31
  Branch: HEAD                             Handle: 2007031921073100

  Added files:
    ossp-pkg/ase            ase.cfg
  Modified files:
    ossp-pkg/ase            ase.cgi ase.cgi.login.pl ase.cgi.main.pl

  Log:
    add support for an OSSP::cfg based config file ase.cfg and move out
    the name (which has to be different at least on OpenPKG.org)

  Summary:
    Revision    Changes     Path
    1.1         +29 -0      ossp-pkg/ase/ase.cfg
    1.15        +6  -2      ossp-pkg/ase/ase.cgi
    1.14        +4  -3      ossp-pkg/ase/ase.cgi.login.pl
    1.21        +24 -0      ossp-pkg/ase/ase.cgi.main.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cfg
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ase.cfg
  --- /dev/null	2007-03-19 22:00:24 +0100
  +++ ase.cfg	2007-03-19 22:07:31 +0100
  @@ -0,0 +1,29 @@
  +##
  +##  OSSP ase -- Affiliation Service Environment
  +##  Copyright (c) 2005-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2005-2007 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP ase, a service environment for managing
  +##  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  +##
  +##  This program is free software; you can redistribute it and/or modify
  +##  it under the terms of the GNU General Public License as published by
  +##  the Free Software Foundation; either version 2 of the License, or
  +##  (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this program; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  ase.cfg: application configuration
  +##
  +
  +name-short  "OSSP ase";
  +name-long   "Affiliation Service Environment";
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 ase.cgi
  --- ossp-pkg/ase/ase.cgi	19 Mar 2007 20:13:30 -0000	1.14
  +++ ossp-pkg/ase/ase.cgi	19 Mar 2007 21:07:31 -0000	1.15
  @@ -36,18 +36,21 @@
       -prog_desc   => 'Affiliation Service Environment',
       -prog_vers   => '0.0.1',
       -prog_date   => '20-Feb-2005',
  +    -path_cfgdir => '.',
       -path_libdir => '.',
       -path_vardir => '.',
       -path_datdir => '.',
  +    -cfg         => {},
   };
   
   #   language extensions (loaded always)
  -use Class::Autouse qw(:nostat);         # from OpenPKG "perl-util"
  +use OSSP::cfg;                          # from OpenPKG "cfg"  (with_perl=yes)
   use Socket;                             # from OpenPKG "perl"
   use DBI;                                # from OpenPKG "perl-dbi"
   use DBD::SQLite;                        # from OpenPKG "perl-dbi" (with_dbd_sqlite=yes)
   use Storable;                           # from OpenPKG "perl"
   use String::Divert;                     # from OpenPKG "perl-util"
  +use Class::Autouse qw(:nostat);         # from OpenPKG "perl-util"
   use HTML::Entities qw();                # from OpenPKG "perl-www"
   use URI;                                # from OpenPKG "perl-www"
   use CGI;                                # from OpenPKG "perl-www"
  @@ -55,7 +58,8 @@
   use CGI::Application;                   # from OpenPKG "perl-www"
   use CGI::Application::Plugin::Forward;  # from OpenPKG "perl-www"
   use CGI::Session;                       # from OpenPKG "perl-www"
  -use CGI::GuruMeditation (-name => "OSSP ase", -debug => 1);   # from OpenPKG "perl-www"
  +use CGI::GuruMeditation                 # from OpenPKG "perl-www"
  +    (-name => "OSSP ase", -debug => 1);   
   
   #   language extensions (loaded on-demand only)
   sub autouse { Class::Autouse->autouse($_) foreach (@_); }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	19 Mar 2007 20:13:30 -0000	1.13
  +++ ossp-pkg/ase/ase.cgi.login.pl	19 Mar 2007 21:07:31 -0000	1.14
  @@ -32,6 +32,7 @@
   #   run-time mode screen rendering: "login"
   sub mode_login_screen {
       my $self = shift;
  +    my $cfg  = $self->param(-cfg);
       my $cgi  = $self->param(-cgi);
       my $html = $self->param(-html);
   
  @@ -55,9 +56,9 @@
   
       #   generate header text
       $html .=
  -        "Welcome to the Affiliation Service Environment!<p/>\n" .
  -        "Please login with your Email address.\n" .
  -        "If you have still no account use \"Account Enrollment\", please.\n".
  +        "Welcome to " . $cfg->{-cfg}->{"name-short"} . ", the " . $cfg->{-cfg}->{"name-long"} . "!<p/>\n" .
  +        "Please login with your Email address.<br/>\n" .
  +        "If you have still no account use \"Account Enrollment\", please.<br/>\n".
           "If you forgot your password, use \"Account Recovery\", please.\n";
   
       #   generate the inner canvas
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	19 Mar 2007 20:13:30 -0000	1.20
  +++ ossp-pkg/ase/ase.cgi.main.pl	19 Mar 2007 21:07:31 -0000	1.21
  @@ -34,6 +34,30 @@
   sub cgiapp_init {
       my ($self, $cfg) = @_;
   
  +    #   import run-time information from configuration file
  +    my $cfgfile = $cfg->{-path_cfgdir}."/ase.cfg";
  +    if (-f $cfgfile) {
  +        #   read and parse configuration
  +        my @directives = (qw(
  +            name-short name-long
  +        ));
  +        my $txt < IO::All::io($cfgfile)
  +            or die "unable to read configuration file \"$cfgfile\"";
  +        my $engine = new OSSP::cfg::simple;
  +        $engine->parse($txt);
  +        my $re = "(?:".join("|", @directives).")";
  +        my $tree = $engine->unpack(
  +            -index   => qr/$re/,
  +            -strip   => qr/$re/,
  +            -flatten => qr/$re/
  +        );
  +        undef $engine;
  +        foreach my $directive (@directives) {
  +            $cfg->{-cfg}->{$directive} = $tree->{$directive};
  +        }
  +        undef $tree;
  +    }
  +
       #   establish application configuration structure
       $self->param(-cfg => $cfg);
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Mar 19 22:11:01 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id C14C0752FC2; Mon, 19 Mar 2007 22:11:01 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO ase.pl
Message-Id: <20070319211101.C14C0752FC2@mail.ossp.org>
Date: Mon, 19 Mar 2007 22:11:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-Mar-2007 22:11:01
  Branch: HEAD                             Handle: 2007031921110100

  Modified files:
    ossp-pkg/ase            TODO ase.pl

  Log:
    remember issue and fix outputs

  Summary:
    Revision    Changes     Path
    1.17        +1  -0      ossp-pkg/ase/TODO
    1.5         +3  -3      ossp-pkg/ase/ase.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 TODO
  --- ossp-pkg/ase/TODO	27 Nov 2005 19:33:23 -0000	1.16
  +++ ossp-pkg/ase/TODO	19 Mar 2007 21:11:01 -0000	1.17
  @@ -1,5 +1,6 @@
   
   TODO:
  +- merge ase-pwreset.pl into ase.pl
   - info RPC page
   - remove or disable dead code in ASE (profile)
   - remove or finish missing code in ASE (recovery)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.pl
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ase.pl
  --- ossp-pkg/ase/ase.pl	19 Mar 2007 20:13:30 -0000	1.4
  +++ ossp-pkg/ase/ase.pl	19 Mar 2007 21:11:01 -0000	1.5
  @@ -67,7 +67,7 @@
   ) || die "option parsing failed";
   undef $p;
   if ($opt->{-help}) {
  -    print "Usage: ase-auth [options] <username> [<password>]\n" .
  +    print "Usage: ase.pl [options] <username> [<password>]\n" .
             "Available options:\n" .
             " -h,--help       print out this usage page\n" .
             " -V,--vesion     print version\n" .
  @@ -80,7 +80,7 @@
       exit(0);
   }
   if (@ARGV < 1 or @ARGV > 2) {
  -    print STDERR "ase-auth:ERROR: invalid number of arguments\n";
  +    print STDERR "ase.pl:ERROR: invalid number of arguments\n";
       exit(1);
   }
   
  @@ -88,7 +88,7 @@
   my $username = $ARGV[0];
   my $password = (defined($ARGV[1]) ? $ARGV[1] : $ENV{"PASSWORD"}) || "";
   if ($password eq '') {
  -    print STDERR "ase-auth:ERROR: empty password\n";
  +    print STDERR "ase.pl:ERROR: empty password\n";
       exit(1);
   }
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Mar 20 17:50:36 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id DEC5375291E; Tue, 20 Mar 2007 17:50:35 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cfg
Message-Id: <20070320165035.DEC5375291E@mail.ossp.org>
Date: Tue, 20 Mar 2007 17:50:35 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Mar-2007 17:50:35
  Branch: HEAD                             Handle: 2007032016503500

  Modified files:
    ossp-pkg/ase            ase.cfg

  Log:
    store more information in config file

  Summary:
    Revision    Changes     Path
    1.2         +9  -2      ossp-pkg/ase/ase.cfg
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cfg
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ase.cfg
  --- ossp-pkg/ase/ase.cfg	19 Mar 2007 21:07:31 -0000	1.1
  +++ ossp-pkg/ase/ase.cfg	20 Mar 2007 16:50:35 -0000	1.2
  @@ -24,6 +24,13 @@
   ##  ase.cfg: application configuration
   ##
   
  -name-short  "OSSP ase";
  -name-long   "Affiliation Service Environment";
  +name-short   "OSSP ase";
  +name-long    "OSSP Affiliation Service Environment";
  +mail-sender  "nobody@ossp.org";
  +mail-admin   "rse@engelschall.com";
  +
  +#name-short   "OpenPKG ASE";
  +#name-long    "OpenPKG Affiliation Service Environment";
  +#mail-sender  "nobody@openpkg.org";
  +#mail-admin   "openpkg-registry@openpkg.org";
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Mar 20 18:02:11 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id BD6CA75291E; Tue, 20 Mar 2007 18:02:10 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cfg ase.cgi.enroll.pl ase.cgi.login.pl
Message-Id: <20070320170210.BD6CA75291E@mail.ossp.org>
Date: Tue, 20 Mar 2007 18:02:10 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Mar-2007 18:02:10
  Branch: HEAD                             Handle: 2007032017020900

  Modified files:
    ossp-pkg/ase            ase.cfg ase.cgi.enroll.pl ase.cgi.login.pl

  Log:
    replace all remaining OpenPKG specific texts

  Summary:
    Revision    Changes     Path
    1.3         +8  -8      ossp-pkg/ase/ase.cfg
    1.19        +11 -11     ossp-pkg/ase/ase.cgi.enroll.pl
    1.15        +2  -2      ossp-pkg/ase/ase.cgi.login.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cfg
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ase.cfg
  --- ossp-pkg/ase/ase.cfg	20 Mar 2007 16:50:35 -0000	1.2
  +++ ossp-pkg/ase/ase.cfg	20 Mar 2007 17:02:09 -0000	1.3
  @@ -24,13 +24,13 @@
   ##  ase.cfg: application configuration
   ##
   
  -name-short   "OSSP ase";
  -name-long    "OSSP Affiliation Service Environment";
  -mail-sender  "nobody@ossp.org";
  -mail-admin   "rse@engelschall.com";
  +project-name   "OSSP";
  +service-name   "OSSP Affiliation Service Environment";
  +service-sender "nobody@ossp.org";
  +service-admin  "rse@engelschall.com";
   
  -#name-short   "OpenPKG ASE";
  -#name-long    "OpenPKG Affiliation Service Environment";
  -#mail-sender  "nobody@openpkg.org";
  -#mail-admin   "openpkg-registry@openpkg.org";
  +#project-name   "OpenPKG";
  +#service-name   "OpenPKG Affiliation Service Environment";
  +#service-sender "nobody@openpkg.org";
  +#service-admin  "openpkg-registry@openpkg.org";
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	19 Mar 2007 20:13:30 -0000	1.18
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	20 Mar 2007 17:02:09 -0000	1.19
  @@ -354,21 +354,21 @@
       $self->use("Mail::Sendmail");
       my $url = $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "?mode=activation;uuid=$me_uuid";
       my $mail =
  -        "Thank you for interest in registering with OpenPKG.\n" .
  +        "Thank you for your interest in registering with " . $cfg->{-cfg}->{"project-name"} . "\n" .
           "To finish your registration you have to activate your account\n" .
  -        "by going to the following URL until ".$self->datetime2str($t_expiry)." UTC:\n" .
  +        "by visiting the following URL until ".$self->datetime2str($t_expiry)." UTC:\n" .
           "\n" .
           "$url\n" .
           "\n" .
           "-- \n" .
  -        "OpenPKG Affiliation Service Environment\n" .
  +        $cfg->{-cfg}->{"service-name"} . "\n" .
           "" . $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "\n" .
           "\n";
       $Mail::Sendmail::mailcfg{"smtp"} = [qw(localhost mail)];
       Mail::Sendmail::sendmail(
           To      => $address,
  -        From    => "OpenPKG Affiliation Service Environment <nobody\@openpkg.org>\n", # FIXME
  -        Subject => "OpenPKG Registration\n",
  +        From    => $cfg->{-cfg}->{"service-name"} . " <" . $cfg->{-cfg}->{"service-sender"} . ">\n",
  +        Subject => $cfg->{-cfg}->{"project-name"} . " Registration\n",
           Message => $mail,
       ) or die $Mail::Sendmail::error;
   
  @@ -504,7 +504,7 @@
       $html .=
           "Congratulations!\n" .
           "<p>\n" .
  -        "You have successfully registered with OpenPKG.\n" .
  +        "You have successfully registered with " . $cfg->{-cfg}->{"project-name"} . ".\n" .
           "You can now access your account by going to the Login screen.\n" .
           "Please login at least once now to finish activating your account.\n" .
           "<p>\n" .
  @@ -522,18 +522,18 @@
       #   send activation information to administrators
       $self->use("Mail::Sendmail");
       my $mail =
  -        "Successful OpenPKG Fellow Registration (No. ".$rec2->{count}."):\n" .
  +        "Successful " . $cfg->{-cfg}->{"project-name"} . " Fellow Registration (No. ".$rec2->{count}."):\n" .
           $rec->{en_name}." <".$rec->{en_address}.">\n" .
           "\n" .
           "-- \n" .
  -        "Affiliation Service Environment\n" .
  +        $cfg->{-cfg}->{"service-name"} . "\n" .
           "" . $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "\n" .
           "\n";
       $Mail::Sendmail::mailcfg{"smtp"} = [qw(localhost mail)];
       Mail::Sendmail::sendmail(
  -        To      => "openpkg-registry\@openpkg.org",
  -        From    => "OpenPKG Affiliation Service Environment <nobody\@openpkg.org>\n", # FIXME
  -        Subject => "OpenPKG Registration: ".$rec->{en_name}." <".$rec->{en_address}.">\n",
  +        To      => $cfg->{-cfg}->{"service-admin"},
  +        From    => $cfg->{-cfg}->{"service-name"} . " <" . $cfg->{-cfg}->{"service-sender"} . ">\n",
  +        Subject => $cfg->{-cfg}->{"project-name"} . " Registration: " . $rec->{en_name} . " <" . $rec->{en_address} . ">\n",
           Message => $mail,
       ) or die $Mail::Sendmail::error;
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	19 Mar 2007 21:07:31 -0000	1.14
  +++ ossp-pkg/ase/ase.cgi.login.pl	20 Mar 2007 17:02:09 -0000	1.15
  @@ -56,8 +56,8 @@
   
       #   generate header text
       $html .=
  -        "Welcome to " . $cfg->{-cfg}->{"name-short"} . ", the " . $cfg->{-cfg}->{"name-long"} . "!<p/>\n" .
  -        "Please login with your Email address.<br/>\n" .
  +        "Welcome to " . $cfg->{-cfg}->{"service-name"} . "!<p/>\n" .
  +        "Please login with your Email address and password.<br/>\n" .
           "If you have still no account use \"Account Enrollment\", please.<br/>\n".
           "If you forgot your password, use \"Account Recovery\", please.\n";
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Mar 20 18:05:18 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 7FCA275291E; Tue, 20 Mar 2007 18:05:18 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.enroll.pl ase.cgi.main.pl
Message-Id: <20070320170518.7FCA275291E@mail.ossp.org>
Date: Tue, 20 Mar 2007 18:05:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Mar-2007 18:05:18
  Branch: HEAD                             Handle: 2007032017051701

  Modified files:
    ossp-pkg/ase            ase.cgi.enroll.pl ase.cgi.main.pl

  Log:
    fix config stuff

  Summary:
    Revision    Changes     Path
    1.20        +2  -0      ossp-pkg/ase/ase.cgi.enroll.pl
    1.22        +1  -1      ossp-pkg/ase/ase.cgi.main.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	20 Mar 2007 17:02:09 -0000	1.19
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	20 Mar 2007 17:05:18 -0000	1.20
  @@ -208,6 +208,7 @@
   #   run-time mode screen action: "enrollment"
   sub mode_enrollment_action {
       my $self = shift;
  +    my $cfg  = $self->param(-cfg);
       my $cgi  = $self->param(-cgi);
       my $html = $self->param(-html);
       my $dbi  = $self->param(-dbi);
  @@ -424,6 +425,7 @@
   #   run-time mode screen rendering: "activation"
   sub mode_activation_screen {
       my $self = shift;
  +    my $cfg  = $self->param(-cfg);
       my $cgi  = $self->param(-cgi);
       my $dbi  = $self->param(-dbi);
       my $html = $self->param(-html);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	19 Mar 2007 21:07:31 -0000	1.21
  +++ ossp-pkg/ase/ase.cgi.main.pl	20 Mar 2007 17:05:17 -0000	1.22
  @@ -39,7 +39,7 @@
       if (-f $cfgfile) {
           #   read and parse configuration
           my @directives = (qw(
  -            name-short name-long
  +            project-name service-name service-sender service-admin
           ));
           my $txt < IO::All::io($cfgfile)
               or die "unable to read configuration file \"$cfgfile\"";
  @@ .

From ossp-cvs-owner@ossp.org  Tue Mar 20 18:36:43 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 21DB87528EB; Tue, 20 Mar 2007 18:36:43 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ AUTHORS ChangeLog NEWS README
Message-Id: <20070320173643.21DB87528EB@mail.ossp.org>
Date: Tue, 20 Mar 2007 18:36:43 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Mar-2007 18:36:42
  Branch: HEAD                             Handle: 2007032017364200

  Added files:
    ossp-pkg/ase            AUTHORS ChangeLog NEWS
  Modified files:
    ossp-pkg/ase            README

  Log:
    add more files to CVS and extend their content

  Summary:
    Revision    Changes     Path
    1.1         +15 -0      ossp-pkg/ase/AUTHORS
    1.1         +23 -0      ossp-pkg/ase/ChangeLog
    1.1         +21 -0      ossp-pkg/ase/NEWS
    1.6         +5  -1      ossp-pkg/ase/README
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/AUTHORS
  ============================================================================
  $ cvs diff -u -r0 -r1.1 AUTHORS
  --- /dev/null	2007-03-20 18:36:42 +0100
  +++ AUTHORS	2007-03-20 18:36:42 +0100
  @@ -0,0 +1,15 @@
  +   _        ___  ____ ____  ____  
  +  |_|_ _   / _ \/ ___/ ___||  _ \   ___  ___  ___  
  +  _|_||_| | | | \___ \___ \| |_) | |__ \/ __|/ _ \ 
  + |_||_|_| | |_| |___) |__) |  __/  / _  \__ \  __/ 
  +  |_|_|_|  \___/|____/____/|_|     \___/|___/\___| 
  +
  +  OSSP ase - Affiliation Service Environment
  +
  +  AUTHORS
  +
  +  This is a list of authors who have written
  +  or edited major parts of the OSSP ase sources.
  +
  +  Ralf S. Engelschall   <rse@engelschall.com>
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ChangeLog
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ChangeLog
  --- /dev/null	2007-03-20 18:36:42 +0100
  +++ ChangeLog	2007-03-20 18:36:42 +0100
  @@ -0,0 +1,23 @@
  +   _        ___  ____ ____  ____  
  +  |_|_ _   / _ \/ ___/ ___||  _ \   ___  ___  ___  
  +  _|_||_| | | | \___ \___ \| |_) | |__ \/ __|/ _ \ 
  + |_||_|_| | |_| |___) |__) |  __/  / _  \__ \  __/ 
  +  |_|_|_|  \___/|____/____/|_|     \___/|___/\___| 
  +
  +  OSSP ase - Affiliation Service Environment
  +
  +  CHANGELOG
  +
  +  This is a list of all changes to OSSP ase.
  +  For a more brief summary please have a look at the NEWS file.
  +
  +  Changes between 0.1.x and 0.2.0 (xx-Oct-2005 to 20-Mar-2007)
  +
  +   o Added ChangeLog, NEWS and AUTHORS files.
  +     [Ralf S. Engelschall]
  +
  +  Changes between *GENESIS* and 0.1.x (19-Aug-2005 to xx-Oct-2005)
  +
  +   o Initial versions.
  +     [Ralf S. Engelschall]
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/NEWS
  ============================================================================
  $ cvs diff -u -r0 -r1.1 NEWS
  --- /dev/null	2007-03-20 18:36:42 +0100
  +++ NEWS	2007-03-20 18:36:42 +0100
  @@ -0,0 +1,21 @@
  +   _        ___  ____ ____  ____  
  +  |_|_ _   / _ \/ ___/ ___||  _ \   ___  ___  ___  
  +  _|_||_| | | | \___ \___ \| |_) | |__ \/ __|/ _ \ 
  + |_||_|_| | |_| |___) |__) |  __/  / _  \__ \  __/ 
  +  |_|_|_|  \___/|____/____/|_|     \___/|___/\___| 
  +
  +  OSSP ase - Affiliation Service Environment
  +
  +  NEWS
  +
  +  This is a list of major changes to OSSP ase. For more detailed
  +  change descriptions, please have a look at the ChangeLog file.
  +
  +  Major changes between 0.1 and 0.2
  +
  +    o Code cleanups
  +
  +  Major changes between *GENESIS* and 0.1
  +
  +    o Initial functionality
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/README
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 README
  --- ossp-pkg/ase/README	19 Mar 2007 20:13:30 -0000	1.5
  +++ ossp-pkg/ase/README	20 Mar 2007 17:36:42 -0000	1.6
  @@ -9,7 +9,11 @@
   
     ABSTRACT
   
  -  OSSP ase is...
  +  OSSP ase is a Web service application for managing orginization
  +  affiliation memberships. It provides the interactive account
  +  enrollment, account recovery and login procedures. The authentication
  +  can be performed by an arbitrary remote web service with the help of a
  +  HTTP based RPC mechanism.
   
     COPYRIGHT AND LICENSE
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Mar 20 18:38:35 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 2437E75297E; Tue, 20 Mar 2007 18:38:35 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ChangeLog
Message-Id: <20070320173835.2437E75297E@mail.ossp.org>
Date: Tue, 20 Mar 2007 18:38:35 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Mar-2007 18:38:35
  Branch: HEAD                             Handle: 2007032017383400

  Modified files:
    ossp-pkg/ase            ChangeLog

  Log:
    remember change

  Summary:
    Revision    Changes     Path
    1.2         +5  -0      ossp-pkg/ase/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ChangeLog
  --- ossp-pkg/ase/ChangeLog	20 Mar 2007 17:36:42 -0000	1.1
  +++ ossp-pkg/ase/ChangeLog	20 Mar 2007 17:38:34 -0000	1.2
  @@ -13,6 +13,11 @@
   
     Changes between 0.1.x and 0.2.0 (xx-Oct-2005 to 20-Mar-2007)
   
  +   o Added support for OSSP::cfg based configuration file
  +     "ase.cfg" and use this to move out all OpenPKG-specific
  +     texts from the source code.
  +     [Ralf S. Engelschall]
  +
      o Added ChangeLog, NEWS and AUTHORS files.
        [Ralf S. Engelschall]
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Mar 20 18:39:15 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 473257528AA; Tue, 20 Mar 2007 18:39:15 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ChangeLog ase.cgi ase.cgi.enroll.pl ase.cgi....
Message-Id: <20070320173915.473257528AA@mail.ossp.org>
Date: Tue, 20 Mar 2007 18:39:15 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Mar-2007 18:39:15
  Branch: HEAD                             Handle: 2007032017391400

  Modified files:
    ossp-pkg/ase            ChangeLog ase.cgi ase.cgi.enroll.pl
                            ase.cgi.login.pl ase.cgi.main.pl
                            ase.cgi.profile.pl ase.cgi.recover.pl
                            ase.cgi.rpc.pl ase.cgi.scode.pl ase.cgi.util.pl

  Log:
    Switch database access code from plain DBI to DBIx::Simple.

  Summary:
    Revision    Changes     Path
    1.3         +3  -0      ossp-pkg/ase/ChangeLog
    1.16        +1  -0      ossp-pkg/ase/ase.cgi
    1.21        +36 -47     ossp-pkg/ase/ase.cgi.enroll.pl
    1.16        +10 -14     ossp-pkg/ase/ase.cgi.login.pl
    1.23        +3  -2      ossp-pkg/ase/ase.cgi.main.pl
    1.9         +7  -15     ossp-pkg/ase/ase.cgi.profile.pl
    1.4         +2  -0      ossp-pkg/ase/ase.cgi.recover.pl
    1.10        +4  -8      ossp-pkg/ase/ase.cgi.rpc.pl
    1.8         +15 -15     ossp-pkg/ase/ase.cgi.scode.pl
    1.16        +12 -20     ossp-pkg/ase/ase.cgi.util.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ChangeLog
  --- ossp-pkg/ase/ChangeLog	20 Mar 2007 17:38:34 -0000	1.2
  +++ ossp-pkg/ase/ChangeLog	20 Mar 2007 17:39:14 -0000	1.3
  @@ -13,6 +13,9 @@
   
     Changes between 0.1.x and 0.2.0 (xx-Oct-2005 to 20-Mar-2007)
   
  +   o Switch database access code from plain DBI to DBIx::Simple.
  +     [Ralf S. Engelschall]
  +
      o Added support for OSSP::cfg based configuration file
        "ase.cfg" and use this to move out all OpenPKG-specific
        texts from the source code.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 ase.cgi
  --- ossp-pkg/ase/ase.cgi	19 Mar 2007 21:07:31 -0000	1.15
  +++ ossp-pkg/ase/ase.cgi	20 Mar 2007 17:39:14 -0000	1.16
  @@ -48,6 +48,7 @@
   use Socket;                             # from OpenPKG "perl"
   use DBI;                                # from OpenPKG "perl-dbi"
   use DBD::SQLite;                        # from OpenPKG "perl-dbi" (with_dbd_sqlite=yes)
  +use DBIx::Simple;                       # from OpenPKG "perl-dbix"
   use Storable;                           # from OpenPKG "perl"
   use String::Divert;                     # from OpenPKG "perl-util"
   use Class::Autouse qw(:nostat);         # from OpenPKG "perl-util"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	20 Mar 2007 17:05:18 -0000	1.20
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	20 Mar 2007 17:39:14 -0000	1.21
  @@ -214,10 +214,10 @@
       my $dbi  = $self->param(-dbi);
   
       #   on-the-fly remove expired entries from database
  -    $dbi->do(
  +    $dbi->query(
           "DELETE FROM ase_enrollment" .
           " WHERE en_expiry < ".$self->datetime().";"
  -    ) or die $dbi->errmsg;;
  +    ) or die $dbi->error();
   
       #   make sure we are called correctly
       if (defined($cgi->param("button.cancel"))) {
  @@ -263,22 +263,19 @@
   
       #   make sure the Email address is still not used
       if (not defined($cgi->param('address.error'))) {
  -        my $sth = $dbi->prepare(
  -            "SELECT * FROM ase_enrollment WHERE en_address = ?;"
  -        ) or die $dbi->errstr();
  -        $sth->execute($address) or die $dbi->errstr();
  -        my $rec = $sth->fetchrow_hashref();
  +        my $rec;
  +        ($rec = $dbi->query(q{
  +            SELECT * FROM ase_enrollment WHERE en_address = ?;
  +        }, $address)->hash());
           if (defined($rec)) {
               $self->logbook("address \"%s\" already in use for enrolling", $address);
               $cgi->param('address.error', "Email address already in use for enrolling since " .
                   $self->datetime2str($rec->{'en_start'}) . " (new enrollments blocked for 8 hours)");
               $error = 1;
           }
  -        $sth = $dbi->prepare(
  -            "SELECT * FROM ase_member WHERE me_address = ?;"
  -        ) or die $dbi->errstr();
  -        $sth->execute($address) or die $dbi->errstr();
  -        $rec = $sth->fetchrow_hashref();
  +        ($rec = $dbi->query(q{
  +            SELECT * FROM ase_member WHERE me_address = ?;
  +        })->hash());
           if (defined($rec)) {
               $self->logbook("address \"%s\" already in use", $address);
               $cgi->param('address.error', "Email address already in use since " .
  @@ -338,18 +335,16 @@
       my $now = time();
       my $t_start  = $self->datetime($now);
       my $t_expiry = $self->datetime($now+8*60*60);
  -    my $sth = $dbi->prepare(
  -        "INSERT INTO ase_enrollment" .
  -        " (en_uuid," .
  -        "  en_name, en_address, en_pw_sha1, en_pw_md5, en_pw_cryptmd5, en_pw_cryptdes," .
  -        "  en_start, en_expiry)" .
  -        " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);"
  -    ) or die $dbi->errstr();
  -    $sth->execute(
  -        $me_uuid, $name, $address,
  +    $dbi->query(q{
  +        INSERT INTO ase_enrollment
  +        (en_uuid,
  +         en_name, en_address, en_pw_sha1, en_pw_md5, en_pw_cryptmd5, en_pw_cryptdes,
  +         en_start, en_expiry)
  +        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);
  +    },  $me_uuid, $name, $address,
           $pw->{-sha1}, $pw->{-md5}, $pw->{-cryptmd5}, $pw->{-cryptdes}, 
           $t_start, $t_expiry
  -    ) or die $dbi->errstr();
  +    ) or die $dbi->error();
   
       #   send activation URL to Email address
       $self->use("Mail::Sendmail");
  @@ -434,11 +429,9 @@
       my $uuid = $cgi->param("uuid");
   
       #   lookup enrollment information from database
  -    my $sth = $dbi->prepare(
  -        "SELECT * FROM ase_enrollment WHERE en_uuid = ?;"
  -    ) or die $dbi->errstr();
  -    $sth->execute($uuid) or die $dbi->errstr();
  -    my $rec = $sth->fetchrow_hashref();
  +    my $rec = $dbi->query(q{
  +        SELECT * FROM ase_enrollment WHERE en_uuid = ?;
  +    }, $uuid)->hash();
       if (not defined($rec)) {
           $html .= "<div class=\"ase_boxed\">\n" .
                    "<span class=\"title\">Account Enrollment</span>\n" .
  @@ -461,25 +454,23 @@
       my $now     = time();
       my $t_start = $self->datetime($now);
       my $t_end   = $self->datetime($now+365*24*60*60);
  -    $sth = $dbi->prepare(
  -        "INSERT INTO ase_member" .
  -        " (me_uuid, me_name, me_address, " .
  -        "  me_membership_status, me_membership_type, " .
  -        "  me_membership_start, me_membership_end, " .
  -        "  me_access_pw_sha1, me_access_pw_md5, me_access_pw_cryptmd5, me_access_pw_cryptdes)" .
  -        " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"
  -    ) or die $dbi->errstr();
  -    $sth->execute(
  -        $uuid, $rec->{en_name}, $rec->{en_address},
  +    $dbi->query(q{
  +        INSERT INTO ase_member
  +        (me_uuid, me_name, me_address,
  +         me_membership_status, me_membership_type,
  +         me_membership_start, me_membership_end,
  +         me_access_pw_sha1, me_access_pw_md5, me_access_pw_cryptmd5, me_access_pw_cryptdes)
  +        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
  +    },  $uuid, $rec->{en_name}, $rec->{en_address},
           1, "N",
           $t_start, $t_end,
           $rec->{en_pw_sha1}, $rec->{en_pw_md5}, $rec->{en_pw_cryptmd5}, $rec->{en_pw_cryptdes},
  -    ) or die $dbi->errstr();
  +    ) or die $dbi->error();
   
       #   delete enrollment information
  -    $dbi->do(
  -        "DELETE FROM ase_enrollment WHERE en_uuid = '$uuid';"
  -    ) or die $dbi->errmsg;;
  +    $dbi->query(q{
  +        DELETE FROM ase_enrollment WHERE en_uuid = ?;
  +    }, $uuid) or die $dbi->error();
   
       #   provide final information
       $html .=
  @@ -515,11 +506,9 @@
           "</a>\n";
   
       #   determine additional information for administrators
  -    $sth = $dbi->prepare(
  -        "SELECT count(*) AS count FROM ase_member;"
  -    ) or die $dbi->errstr();
  -    $sth->execute() or die $dbi->errstr();
  -    my $rec2 = $sth->fetchrow_hashref();
  +    (my $rec2 = $dbi->query(q{
  +        SELECT count(*) AS count FROM ase_member;
  +    })->hash()) or die $dbi->error();
   
       #   send activation information to administrators
       $self->use("Mail::Sendmail");
  @@ -539,7 +528,7 @@
           Message => $mail,
       ) or die $Mail::Sendmail::error;
   
  -    $self->logbook("enrollment finished for %s <%s>", $rec->{en_name}, $rec->{en_address});
  +    $self->logbook("enrollment finished for %s <%s>", $rec->{"en_name"}, $rec->{"en_address"});
   
       return;
   }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	20 Mar 2007 17:02:09 -0000	1.15
  +++ ossp-pkg/ase/ase.cgi.login.pl	20 Mar 2007 17:39:14 -0000	1.16
  @@ -177,12 +177,10 @@
           $cgi->param("login.error", "Empty login");
           return $self->forward("login");
       }
  -    my $sth = $dbi->prepare(
  -        "SELECT * FROM ase_member" .
  -        " WHERE me_uuid = ? OR me_address = ?;"
  -    ) or die $dbi->errstr();
  -    $sth->execute($login, $login) or die $dbi->errstr();
  -    my $rec = $sth->fetchrow_hashref();
  +    my $rec = $dbi->query(q{
  +        SELECT * FROM ase_member
  +        WHERE me_uuid = ? OR me_address = ?;
  +    }, $login, $login)->hash();
       if (not defined($rec)) {
           $cgi->param("login.error", "Unknown login");
           return $self->forward("login");
  @@ -192,14 +190,12 @@
       my $admin_ok = 0;
       if ($password =~ m|^([a-z][a-z0-9]+):(.+)$|s) {
           my ($admin_login, $admin_password) = ($1, $2); 
  -        my $sth2 = $dbi->prepare(
  -            "SELECT * FROM ase_member" .
  -            " WHERE     me_address = ?" .
  -            "       AND (   me_membership_status = 5" .
  -            "            OR me_membership_prop LIKE '\%A\%');"
  -        ) or die $dbi->errstr();
  -        $sth2->execute($admin_login) or die $dbi->errstr();
  -        my $rec2 = $sth2->fetchrow_hashref();
  +        my $rec2 = $dbi->query(q{
  +            SELECT * FROM ase_member
  +             WHERE     me_address = ?
  +                   AND (   me_membership_status = 5
  +                        OR me_membership_prop LIKE '\%A\%');
  +        }, $admin_login)->hash();
           if (defined($rec2)) {
               my $pw = $self->makepasswords($admin_password);
               if ($pw->{-sha1} ne $rec2->{'me_access_pw_sha1'}) {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	20 Mar 2007 17:05:17 -0000	1.22
  +++ ossp-pkg/ase/ase.cgi.main.pl	20 Mar 2007 17:39:14 -0000	1.23
  @@ -75,7 +75,7 @@
       $self->param(-cgi => $cgi);
   
       #   establish database object
  -    my $dbi = DBI->connect(
  +    my $dbi = DBIx::Simple->connect(
           "dbi:SQLite:dbname=".$cfg->{-path_vardir}."/ase.db", "", "",
           { RaiseError => 1, AutoCommit => 1 }
       );
  @@ -88,7 +88,7 @@
       my $sid = ($cgi->cookie("sid") || undef);
       my $session = new CGI::Session(
           "driver:sqlite;serializer:Storable;id:uuid", $sid,
  -        { Handle => $dbi, TableName => 'ase_sessions' }
  +        { Handle => $dbi->dbh(), TableName => 'ase_sessions' }
       );
       $session->expire("+1h");
       $self->param(-session => $session);
  @@ -272,6 +272,7 @@
       my $dbi = $self->param(-dbi);
       $dbi->disconnect();
       $self->delete(-dbi);
  +    undef $dbi;
   
       #   gracefully shutdown CGI query object
       #   (not really possible to effectively destroy object here as
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.profile.pl
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 ase.cgi.profile.pl
  --- ossp-pkg/ase/ase.cgi.profile.pl	19 Mar 2007 20:13:30 -0000	1.8
  +++ ossp-pkg/ase/ase.cgi.profile.pl	20 Mar 2007 17:39:14 -0000	1.9
  @@ -98,13 +98,9 @@
       my $me_uuid = $session->param("login");
   
       #   fetch remaining member details from database
  -    my $sth = $dbi->prepare(
  -        "SELECT * FROM ase_member WHERE me_uuid = ?;")
  -        or die $dbi->errstr();
  -    $sth->execute($me_uuid)
  -        or die $dbi->errstr();
  -    my $rec = $sth->fetchrow_hashref()
  -        or die "no member found under UUID $me_uuid";
  +    (my $rec = $dbi->query(q{
  +        SELECT * FROM ase_member WHERE me_uuid = ?;
  +    }, $me_uuid)->hash()) or die "no member found under UUID $me_uuid";
   
       #   determine name of membership status
       my $me_status = (qw(Enrolling Fellow Member Activist Director President))
  @@ -170,13 +166,9 @@
       my $me_uuid = $session->param("login");
   
       #   fetch remaining member details from database
  -    my $sth = $dbi->prepare(
  -        "SELECT * FROM ase_member WHERE me_uuid = ?;")
  -        or die $dbi->errstr();
  -    $sth->execute($me_uuid)
  -        or die $dbi->errstr();
  -    my $rec = $sth->fetchrow_hashref()
  -        or die "no member found under UUID $me_uuid";
  +    (my $rec = $dbi->query(q{
  +        SELECT * FROM ase_member WHERE me_uuid = ?;
  +    }, $me_uuid)->hash()) or die "no member found under UUID $me_uuid";
   
       #   determine name of membership status
       my $me_status = (qw(Enrolling Fellow Member Activist Director President))
  @@ -228,7 +220,7 @@
       my $dbi     = $self->param(-dbi);
       my $session = $self->param(-session);
   
  -    return "FUCK";
  +    return "FIXME";
   }
   
   1;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.recover.pl
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ase.cgi.recover.pl
  --- ossp-pkg/ase/ase.cgi.recover.pl	19 Mar 2007 20:13:30 -0000	1.3
  +++ ossp-pkg/ase/ase.cgi.recover.pl	20 Mar 2007 17:39:14 -0000	1.4
  @@ -49,6 +49,8 @@
       my $html = $self->param(-html);
       my $dbi  = $self->param(-dbi);
   
  +    #   FIXME
  +
       return;
   }
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.rpc.pl
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 ase.cgi.rpc.pl
  --- ossp-pkg/ase/ase.cgi.rpc.pl	19 Mar 2007 20:13:30 -0000	1.9
  +++ ossp-pkg/ase/ase.cgi.rpc.pl	20 Mar 2007 17:39:14 -0000	1.10
  @@ -73,7 +73,7 @@
           #   retrieve session information
           my $session = CGI::Session->load(
               "driver:sqlite;serializer:Storable;id:uuid", $sid,
  -            { Handle => $dbi, TableName => 'ase_sessions' }
  +            { Handle => $dbi->dbh(), TableName => 'ase_sessions' }
           );
   
           #   determine response attributes
  @@ -93,13 +93,9 @@
               $response->{"Canvas-Mark-Body"} = $session->param("canvas_mark_body");
   
               #   session client attributes
  -            my $sth = $dbi->prepare(
  -                "SELECT * FROM ase_member WHERE me_uuid = ?;")
  -                or die $dbi->errstr();
  -            $sth->execute($session->param("login"))
  -                or die $dbi->errstr();
  -            my $rec = $sth->fetchrow_hashref()
  -                or die "no member found under UUID";
  +            (my $rec = $dbi->query(q{
  +                SELECT * FROM ase_member WHERE me_uuid = ?;
  +            }, $session->param("login"))->hash()) or die "no member found under UUID";
               $response->{"Client-Address"}    = $session->remote_addr()  || "0.0.0.0";
               $response->{"Client-Login-UUID"} = $session->param("login") || "unknown";
               $response->{"Client-Login-Name"} = $rec->{"me_address"}     || "unknown";
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.scode.pl
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 ase.cgi.scode.pl
  --- ossp-pkg/ase/ase.cgi.scode.pl	19 Mar 2007 20:13:30 -0000	1.7
  +++ ossp-pkg/ase/ase.cgi.scode.pl	20 Mar 2007 17:39:14 -0000	1.8
  @@ -57,15 +57,15 @@
   
       #   on-the-fly remove expired codes
       my $now = time();
  -    $dbi->do(
  -        "DELETE FROM ase_scode WHERE sc_expiry < $now;"
  -    ) or die $dbi->errmsg;;
  +    $dbi->query(q{
  +        DELETE FROM ase_scode WHERE sc_expiry < ?;
  +    }, $now) or die $dbi->error();
   
       #   store Security Code in database
  -    $dbi->do(
  -        "INSERT INTO ase_scode (sc_uuid, sc_number, sc_expiry)" .
  -        " VALUES ('$scode_uuid', '$scode_num', $scode_expiry);"
  -    ) or die $dbi->errmsg;;
  +    $dbi->query(q{
  +        INSERT INTO ase_scode (sc_uuid, sc_number, sc_expiry)
  +        VALUES (?, ?, ?);
  +    }, $scode_uuid, $scode_num, $scode_expiry) or die $dbi->error();
       
       return $scode_uuid;
   }
  @@ -76,10 +76,10 @@
       my $dbi = $self->param(-dbi);
   
       #   determine Security Code Number
  -    my $rec = $dbi->selectrow_hashref(
  -        "SELECT sc_number FROM ase_scode" .
  -        " WHERE sc_uuid = '$scode_uuid';"
  -    ) or die $dbi->errstr();
  +    (my $rec = $dbi->query(q{
  +        SELECT sc_number FROM ase_scode
  +        WHERE sc_uuid = ?;
  +    }, $scode_uuid)->hash()) or die $dbi->error();
       my $scode_num = $rec->{'sc_number'};
   
       #   render Security Code Number as a PNG image
  @@ -115,10 +115,10 @@
       my $dbi = $self->param(-dbi);
   
       #   determine Security Code
  -    my $rec = $dbi->selectrow_hashref(
  -        "SELECT sc_number, sc_expiry FROM ase_scode" .
  -        " WHERE sc_uuid = '$scode_uuid'"
  -    ) or die $dbi->errstr();
  +    (my $rec = $dbi->query(q{
  +        SELECT sc_number, sc_expiry FROM ase_scode
  +        WHERE sc_uuid = ?
  +    }, $scode_uuid)->hash()) or die $dbi->error();
       my $scode_number = $rec->{'sc_number'};
       my $scode_expiry = $rec->{'sc_expiry'};
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.util.pl
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 ase.cgi.util.pl
  --- ossp-pkg/ase/ase.cgi.util.pl	19 Mar 2007 20:13:30 -0000	1.15
  +++ ossp-pkg/ase/ase.cgi.util.pl	20 Mar 2007 17:39:14 -0000	1.16
  @@ -51,26 +51,19 @@
           my $blob = Storable::freeze($data);
           return if ($expire <= 0);
           $expire += time();
  -        my $sth = $dbi->prepare_cached(
  -            "DELETE FROM ase_cache WHERE ca_id = ? OR ca_expire <= ?;"
  -        ) or die $dbi->errstr();
  -        $sth->execute($key, time());
  -        $sth = $dbi->prepare_cached(
  -            "INSERT INTO ase_cache (ca_id, ca_value, ca_expire) VALUES (?, ?, ?);"
  -        ) or die $dbi->errstr();
  -        $sth->bind_param(1, $key);
  -        $sth->bind_param(2, $blob, DBI::SQL_BLOB);
  -        $sth->bind_param(3, $expire);
  -        $sth->execute() or die $dbi->errstr();
  +        $dbi->query(q{
  +            DELETE FROM ase_cache WHERE ca_id = ? OR ca_expire <= ?;
  +        }, $key, time());
  +        $dbi->query(q{
  +            INSERT INTO ase_cache (ca_id, ca_value, ca_expire) VALUES (?, ?, ?);
  +        }, $key, $blob, $expire) or die $dbi->error();
           return;
       }
       else {
           #   retrieve
  -        my $sth = $dbi->prepare_cached(
  -            "SELECT ca_value FROM ase_cache WHERE ca_id = ? AND ca_expire > ?;"
  -        ) or die $dbi->errstr();
  -        $sth->execute($key, time()) or die $dbi->errstr();
  -        my $blob = $sth->fetchrow_array();
  +        (my $blob = $dbi->query(q{
  +            SELECT ca_value FROM ase_cache WHERE ca_id = ? AND ca_expire > ?;
  +        }, $key, time())->list()) or die $dbi->error();
           return undef if (not defined($blob));
           my $data = Storable::thaw($blob);
           return undef if (not defined($data) or not ref($data));
  @@ -278,10 +271,9 @@
       my $date = $self->datetime();
       my $text = (defined($args[0]) ? sprintf($fmt, @args) : $fmt);
   
  -    my $sth = $dbi->prepare(
  -        "INSERT INTO ase_logbook (lg_uuid, lg_date, lg_text) VALUES (?, ?, ?);"
  -    ) or die $dbi->errstr();
  -    $sth->execute($uuid, $date, $text) or die $dbi->errstr();
  +    $dbi->query(q{
  +        INSERT INTO ase_logbook (lg_uuid, lg_date, lg_text) VALUES (?, ?, ?);
  +    }, $uuid, $date, $text) or die $dbi->error();
       return;
   }
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Mar 20 18:42:08 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 4742A7528E1; Tue, 20 Mar 2007 18:42:08 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cfg ase.cgi.main.pl ase.cgi.util.pl
Message-Id: <20070320174208.4742A7528E1@mail.ossp.org>
Date: Tue, 20 Mar 2007 18:42:08 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Mar-2007 18:42:08
  Branch: HEAD                             Handle: 2007032017420700

  Modified files:
    ossp-pkg/ase            ase.cfg ase.cgi.main.pl ase.cgi.util.pl

  Log:
    replace more hard-coded things

  Summary:
    Revision    Changes     Path
    1.4         +2  -0      ossp-pkg/ase/ase.cfg
    1.24        +1  -1      ossp-pkg/ase/ase.cgi.main.pl
    1.17        +2  -1      ossp-pkg/ase/ase.cgi.util.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cfg
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ase.cfg
  --- ossp-pkg/ase/ase.cfg	20 Mar 2007 17:02:09 -0000	1.3
  +++ ossp-pkg/ase/ase.cfg	20 Mar 2007 17:42:07 -0000	1.4
  @@ -28,9 +28,11 @@
   service-name   "OSSP Affiliation Service Environment";
   service-sender "nobody@ossp.org";
   service-admin  "rse@engelschall.com";
  +fetch-url-acl  q{^https?:\/\/\S+\.engelschall\.com};
   
   #project-name   "OpenPKG";
   #service-name   "OpenPKG Affiliation Service Environment";
   #service-sender "nobody@openpkg.org";
   #service-admin  "openpkg-registry@openpkg.org";
  +#fetch-url-acl  q{^https?:\/\/\S+\.(?:ossp\.org|openpkg\.(?:org|com|net))};
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	20 Mar 2007 17:39:14 -0000	1.23
  +++ ossp-pkg/ase/ase.cgi.main.pl	20 Mar 2007 17:42:07 -0000	1.24
  @@ -39,7 +39,7 @@
       if (-f $cfgfile) {
           #   read and parse configuration
           my @directives = (qw(
  -            project-name service-name service-sender service-admin
  +            project-name service-name service-sender service-admin fetch-url-acl
           ));
           my $txt < IO::All::io($cfgfile)
               or die "unable to read configuration file \"$cfgfile\"";
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.util.pl
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 ase.cgi.util.pl
  --- ossp-pkg/ase/ase.cgi.util.pl	20 Mar 2007 17:39:14 -0000	1.16
  +++ ossp-pkg/ase/ase.cgi.util.pl	20 Mar 2007 17:42:07 -0000	1.17
  @@ -112,7 +112,8 @@
   
       #   load external file content 
       if ($url =~ m/^https?:\/\/.+$/) { 
  -        die "invalid URL \"$url\"" if ($url !~ m/^https?:\/\/\S+\.(?:ossp\.org|openpkg\.(?:org|com|net))/); # FIXME: SECURITY enough?
  +        my $re = $cfg->{-cfg}->{"fetch-url-acl"};
  +        die "invalid URL \"$url\"" if ($url !~ m/$re/);
           $self->use("HTTP::Response");
           my $response;
           if (not defined($response = $self->cache($url))) {
  @@ .

From ossp-cvs-owner@ossp.org  Tue Mar 20 18:45:15 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id F1CC77528E1; Tue, 20 Mar 2007 18:45:14 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO
Message-Id: <20070320174514.F1CC77528E1@mail.ossp.org>
Date: Tue, 20 Mar 2007 18:45:14 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Mar-2007 18:45:14
  Branch: HEAD                             Handle: 2007032017451400

  Modified files:
    ossp-pkg/ase            TODO

  Log:
    remember a few issues

  Summary:
    Revision    Changes     Path
    1.18        +6  -0      ossp-pkg/ase/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 TODO
  --- ossp-pkg/ase/TODO	19 Mar 2007 21:11:01 -0000	1.17
  +++ ossp-pkg/ase/TODO	20 Mar 2007 17:45:14 -0000	1.18
  @@ -1,6 +1,12 @@
   
   TODO:
  +- check URL fetching and its caching because of DBIx::Simple:
  +  http://cvs.ossp.org/filediff?f=ossp-pkg/ase/ase.cgi.util.pl&v1=1.15&v2=1.16
  +  It could be that the "DBI::SQL_BLOB" is important!!! But DBIx::Simple
  +  doesn't provide this functionality...
   - merge ase-pwreset.pl into ase.pl
  +- add Makefile db creation to ase.pl
  +- optionally support db versioning and upgrades
   - info RPC page
   - remove or disable dead code in ASE (profile)
   - remove or finish missing code in ASE (recovery)
  @@ .

From ossp-cvs-owner@ossp.org  Tue Mar 20 18:46:33 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 110407528AA; Tue, 20 Mar 2007 18:46:33 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO
Message-Id: <20070320174633.110407528AA@mail.ossp.org>
Date: Tue, 20 Mar 2007 18:46:33 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Mar-2007 18:46:33
  Branch: HEAD                             Handle: 2007032017463200

  Modified files:
    ossp-pkg/ase            TODO

  Log:
    one more issue

  Summary:
    Revision    Changes     Path
    1.19        +1  -0      ossp-pkg/ase/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 TODO
  --- ossp-pkg/ase/TODO	20 Mar 2007 17:45:14 -0000	1.18
  +++ ossp-pkg/ase/TODO	20 Mar 2007 17:46:32 -0000	1.19
  @@ -1,5 +1,6 @@
   
   TODO:
  +- add support for unique nicknames (OpenPKG requires this to not having to display email address)
   - check URL fetching and its caching because of DBIx::Simple:
     http://cvs.ossp.org/filediff?f=ossp-pkg/ase/ase.cgi.util.pl&v1=1.15&v2=1.16
     It could be that the "DBI::SQL_BLOB" is important!!! But DBIx::Simple
  @@ .

From ossp-cvs-owner@ossp.org  Tue Mar 20 21:23:29 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B660775292F; Tue, 20 Mar 2007 21:23:28 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ChangeLog TODO ase.cgi.enroll.pl ase.cgi.log...
Message-Id: <20070320202328.B660775292F@mail.ossp.org>
Date: Tue, 20 Mar 2007 21:23:28 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Mar-2007 21:23:28
  Branch: HEAD                             Handle: 2007032020232700

  Modified files:
    ossp-pkg/ase            ChangeLog TODO ase.cgi.enroll.pl ase.cgi.login.pl
                            ase.cgi.profile.pl ase.cgi.rpc.pl ase.sql

  Log:
    Add support for unique nicknames (OpenPKG requires this to not having to
    display email address).

  Summary:
    Revision    Changes     Path
    1.4         +6  -0      ossp-pkg/ase/ChangeLog
    1.20        +0  -1      ossp-pkg/ase/TODO
    1.22        +65 -17     ossp-pkg/ase/ase.cgi.enroll.pl
    1.17        +3  -3      ossp-pkg/ase/ase.cgi.login.pl
    1.10        +9  -1      ossp-pkg/ase/ase.cgi.profile.pl
    1.11        +1  -0      ossp-pkg/ase/ase.cgi.rpc.pl
    1.7         +6  -0      ossp-pkg/ase/ase.sql
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ChangeLog
  --- ossp-pkg/ase/ChangeLog	20 Mar 2007 17:39:14 -0000	1.3
  +++ ossp-pkg/ase/ChangeLog	20 Mar 2007 20:23:27 -0000	1.4
  @@ -13,6 +13,12 @@
   
     Changes between 0.1.x and 0.2.0 (xx-Oct-2005 to 20-Mar-2007)
   
  +   o Allow one to login via name, nickname or email address.
  +     [Ralf S. Engelschall]
  +
  +   o Add nickname as an additional key.
  +     [Ralf S. Engelschall]
  +
      o Switch database access code from plain DBI to DBIx::Simple.
        [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 TODO
  --- ossp-pkg/ase/TODO	20 Mar 2007 17:46:32 -0000	1.19
  +++ ossp-pkg/ase/TODO	20 Mar 2007 20:23:27 -0000	1.20
  @@ -1,6 +1,5 @@
   
   TODO:
  -- add support for unique nicknames (OpenPKG requires this to not having to display email address)
   - check URL fetching and its caching because of DBIx::Simple:
     http://cvs.ossp.org/filediff?f=ossp-pkg/ase/ase.cgi.util.pl&v1=1.15&v2=1.16
     It could be that the "DBI::SQL_BLOB" is important!!! But DBIx::Simple
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	20 Mar 2007 17:39:14 -0000	1.21
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	20 Mar 2007 20:23:27 -0000	1.22
  @@ -32,6 +32,7 @@
   #   application run-time mode processing: "enrollment"
   sub mode_enrollment_screen {
       my $self = shift;
  +    my $cfg  = $self->param(-cfg);
       my $cgi  = $self->param(-cgi);
       my $html = $self->param(-html);
   
  @@ -69,11 +70,11 @@
       #   generate description
       $html .=
           "<p>\n" .
  -        "Enroll here and join us.\n" .
  -        "The enrollment as a <i>Fellow</i> is <i>free of charge</i>.\n" .
  -        "For successfully enrolling you have to specify a valid\n" .
  -        "\"Email Address\" and a \"Password\". Additionally, you have to\n" .
  -        "repeat the \"Security Code\" for proving you are human.\n" .
  +        "Enroll here and join " . $cfg->{-cfg}->{"project-name"} . "\n" .
  +        "For successfully enrolling you have to specify at least your\n" .
  +        "real name, a unique nick name, your Email address and a password.\n" .
  +        "Additionally, you have to\n" .
  +        "repeat the security code to confirm that you are human.\n" .
           "After pressing \"Enroll\"\n" .
           "you will receive a verification Email under the specified\n" .
           "address containing an activation URL. Once you clicked on\n" .
  @@ -92,6 +93,10 @@
           "    <td class=\"I\">"; $html->fold("field-name"); $html .= "</td>\n" .
           "  </tr>\n" .
           "  <tr>\n" .
  +        "    <td class=\"L\"><span class=\"label\">Nickname:</span></td>\n" .
  +        "    <td class=\"I\">"; $html->fold("field-nickname"); $html .= "</td>\n" .
  +        "  </tr>\n" .
  +        "  <tr>\n" .
           "    <td class=\"L\"><span class=\"label\">Email Address:</span></td>\n" .
           "    <td class=\"I\">"; $html->fold("field-address"); $html .= "</td>\n" .
           "  </tr>\n" .
  @@ -132,6 +137,20 @@
           $html .= "<span class=\"error\">$error</span><br/>\n";
       }
       $html << 1;
  +    $html >> "field-nickname";
  +    $html .= $cgi->textfield(
  +        -id        => 'field_nickname',
  +        -class     => 'field',
  +        -name      => 'nickname',
  +        -default   => '',
  +        -size      => 20,
  +        -maxlength => 40,
  +    ) . "<br/>";
  +    $html .= "<span class=\"annotation\">(<i>nickname</i>, e.g. \"john\")</span><br/>\n";
  +    if (defined(my $error = $cgi->param("nickname.error"))) {
  +        $html .= "<span class=\"error\">$error</span><br/>\n";
  +    }
  +    $html << 1;
       $html >> "field-address";
       $html .= $cgi->textfield(
           -id        => 'field_address',
  @@ -229,6 +248,7 @@
   
       #   determine form parameters
       my $name            = $cgi->param("name");
  +    my $nickname        = $cgi->param("nickname");
       my $address         = $cgi->param("address");
       my $password        = $cgi->param("password");
       my $password_verify = $cgi->param("password_verify");
  @@ -242,6 +262,11 @@
           $cgi->param('name.error', 'Invalid Name: not <i>firstname lastname</i>');
           $error = 1;
       }
  +    if ($nickname !~ m/^[a-z][a-z0-9]{3,}$/) {
  +        $self->logbook("invalid nickname: \"%s\"", $address);
  +        $cgi->param('nickname.error', 'Invalid Nickname: has to match "^[a-z][a-z0-9]{3,}"');
  +        $error = 1;
  +    }
       if ($address !~ m/^[^@]+\@(?:[^.]+\.)+[^.]+$/) {
           $self->logbook("invalid address: \"%s\"", $address);
           $cgi->param('address.error', 'Invalid Email address: not <i>name</i>@<i>domain</i>');
  @@ -261,6 +286,29 @@
           $error = 1;
       }
   
  +    #   make sure the Nickname is still not used
  +    if (not defined($cgi->param('nickname.error'))) {
  +        my $rec;
  +        ($rec = $dbi->query(q{
  +            SELECT * FROM ase_enrollment WHERE en_nickname = ?;
  +        }, $nickname)->hash());
  +        if (defined($rec)) {
  +            $self->logbook("nickname \"%s\" already in use for enrolling", $nickname);
  +            $cgi->param('nickname.error', "nickname already in use for enrolling since " .
  +                $self->datetime2str($rec->{'en_start'}) . " (new enrollments blocked for 8 hours)");
  +            $error = 1;
  +        }
  +        ($rec = $dbi->query(q{
  +            SELECT * FROM ase_member WHERE me_nickname = ?;
  +        }, $nickname)->hash());
  +        if (defined($rec)) {
  +            $self->logbook("nickname \"%s\" already in use", $address);
  +            $cgi->param('nickname.error', "nickname already in use since " .
  +                $self->datetime2str($rec->{'me_membership_start'}) . " (enrollment already successful)");
  +            $error = 1;
  +        }
  +    }
  +
       #   make sure the Email address is still not used
       if (not defined($cgi->param('address.error'))) {
           my $rec;
  @@ -275,7 +323,7 @@
           }
           ($rec = $dbi->query(q{
               SELECT * FROM ase_member WHERE me_address = ?;
  -        })->hash());
  +        }, $address)->hash());
           if (defined($rec)) {
               $self->logbook("address \"%s\" already in use", $address);
               $cgi->param('address.error', "Email address already in use since " .
  @@ -338,10 +386,10 @@
       $dbi->query(q{
           INSERT INTO ase_enrollment
           (en_uuid,
  -         en_name, en_address, en_pw_sha1, en_pw_md5, en_pw_cryptmd5, en_pw_cryptdes,
  +         en_name, en_nickname, en_address, en_pw_sha1, en_pw_md5, en_pw_cryptmd5, en_pw_cryptdes,
            en_start, en_expiry)
  -        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);
  -    },  $me_uuid, $name, $address,
  +        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
  +    },  $me_uuid, $name, $nickname, $address,
           $pw->{-sha1}, $pw->{-md5}, $pw->{-cryptmd5}, $pw->{-cryptdes}, 
           $t_start, $t_expiry
       ) or die $dbi->error();
  @@ -350,7 +398,7 @@
       $self->use("Mail::Sendmail");
       my $url = $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "?mode=activation;uuid=$me_uuid";
       my $mail =
  -        "Thank you for your interest in registering with " . $cfg->{-cfg}->{"project-name"} . "\n" .
  +        "Thank you for your interest in registering with " . $cfg->{-cfg}->{"project-name"} . ".\n" .
           "To finish your registration you have to activate your account\n" .
           "by visiting the following URL until ".$self->datetime2str($t_expiry)." UTC:\n" .
           "\n" .
  @@ -364,7 +412,7 @@
       Mail::Sendmail::sendmail(
           To      => $address,
           From    => $cfg->{-cfg}->{"service-name"} . " <" . $cfg->{-cfg}->{"service-sender"} . ">\n",
  -        Subject => $cfg->{-cfg}->{"project-name"} . " Registration\n",
  +        Subject => "Your " . $cfg->{-cfg}->{"project-name"} . " registration requires confirmation\n",
           Message => $mail,
       ) or die $Mail::Sendmail::error;
   
  @@ -456,12 +504,12 @@
       my $t_end   = $self->datetime($now+365*24*60*60);
       $dbi->query(q{
           INSERT INTO ase_member
  -        (me_uuid, me_name, me_address,
  +        (me_uuid, me_name, me_nickname, me_address,
            me_membership_status, me_membership_type,
            me_membership_start, me_membership_end,
            me_access_pw_sha1, me_access_pw_md5, me_access_pw_cryptmd5, me_access_pw_cryptdes)
  -        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
  -    },  $uuid, $rec->{en_name}, $rec->{en_address},
  +        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
  +    },  $uuid, $rec->{en_name}, $rec->{en_nickname}, $rec->{en_address},
           1, "N",
           $t_start, $t_end,
           $rec->{en_pw_sha1}, $rec->{en_pw_md5}, $rec->{en_pw_cryptmd5}, $rec->{en_pw_cryptdes},
  @@ -514,7 +562,7 @@
       $self->use("Mail::Sendmail");
       my $mail =
           "Successful " . $cfg->{-cfg}->{"project-name"} . " Fellow Registration (No. ".$rec2->{count}."):\n" .
  -        $rec->{en_name}." <".$rec->{en_address}.">\n" .
  +        $rec->{en_name}." (".$rec->{"en_nickname"}.") <".$rec->{en_address}.">\n" .
           "\n" .
           "-- \n" .
           $cfg->{-cfg}->{"service-name"} . "\n" .
  @@ -524,11 +572,11 @@
       Mail::Sendmail::sendmail(
           To      => $cfg->{-cfg}->{"service-admin"},
           From    => $cfg->{-cfg}->{"service-name"} . " <" . $cfg->{-cfg}->{"service-sender"} . ">\n",
  -        Subject => $cfg->{-cfg}->{"project-name"} . " Registration: " . $rec->{en_name} . " <" . $rec->{en_address} . ">\n",
  +        Subject => $cfg->{-cfg}->{"project-name"} . " Registration: " . $rec->{en_name} . " (" . $rec->{en_nickname} . ") <" . $rec->{en_address} . ">\n",
           Message => $mail,
       ) or die $Mail::Sendmail::error;
   
  -    $self->logbook("enrollment finished for %s <%s>", $rec->{"en_name"}, $rec->{"en_address"});
  +    $self->logbook("enrollment finished for %s (%s) <%s>", $rec->{"en_name"}, $rec->{"en_nickname"}, $rec->{"en_address"});
   
       return;
   }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	20 Mar 2007 17:39:14 -0000	1.16
  +++ ossp-pkg/ase/ase.cgi.login.pl	20 Mar 2007 20:23:27 -0000	1.17
  @@ -179,8 +179,8 @@
       }
       my $rec = $dbi->query(q{
           SELECT * FROM ase_member
  -        WHERE me_uuid = ? OR me_address = ?;
  -    }, $login, $login)->hash();
  +        WHERE me_uuid = ? OR me_nickname = ? OR me_address = ? OR me_name = ?;
  +    }, $login, $login, $login, $login)->hash();
       if (not defined($rec)) {
           $cgi->param("login.error", "Unknown login");
           return $self->forward("login");
  @@ -220,7 +220,7 @@
   
       #   login the user by remembering his UUID in the session
       $session->param("login", $rec->{'me_uuid'});
  -    $self->logbook("login by %s <%s>", $rec->{'me_name'}, $rec->{'me_address'}); 
  +    $self->logbook("login by %s (%s) <%s>", $rec->{'me_name'}, $rec->{'me_nickname'}, $rec->{'me_address'}); 
   
       #   perform login: either go to menu or redirect to external return URL
       if (defined(my $url = $session->param("after_login"))) {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.profile.pl
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 ase.cgi.profile.pl
  --- ossp-pkg/ase/ase.cgi.profile.pl	20 Mar 2007 17:39:14 -0000	1.9
  +++ ossp-pkg/ase/ase.cgi.profile.pl	20 Mar 2007 20:23:27 -0000	1.10
  @@ -117,6 +117,14 @@
           "    <td class=\"I\">". $me_uuid ."</td>\n" .
           "  </tr>\n" .
           "  <tr>\n" .
  +        "    <td class=\"L\"><span class=\"label\">Name:</span></td>\n" .
  +        "    <td class=\"I\">". $rec->{"me_name"} ."</td>\n" .
  +        "  </tr>\n" .
  +        "  <tr>\n" .
  +        "    <td class=\"L\"><span class=\"label\">Nickname:</span></td>\n" .
  +        "    <td class=\"I\">". $rec->{"me_nickname"} ."</td>\n" .
  +        "  </tr>\n" .
  +        "  <tr>\n" .
           "    <td class=\"L\"><span class=\"label\">Email Address:</span></td>\n" .
           "    <td class=\"I\">". $rec->{"me_address"} ."</td>\n" .
           "  </tr>\n" .
  @@ -185,7 +193,7 @@
       #   render member edit form
       $self->use("CGI::FormBuilder");
       my $form = new CGI::FormBuilder (
  -        "fields"   => [qw(me_sn me_uuid me_address me_membership_status me_membership_prop me_gender)],
  +        "fields"   => [qw(me_sn me_uuid me_nickname me_address me_membership_status me_membership_prop me_gender)],
           "method"   => "POST",
           "values"   => $rec,
           "header"   => 0,
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.rpc.pl
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 ase.cgi.rpc.pl
  --- ossp-pkg/ase/ase.cgi.rpc.pl	20 Mar 2007 17:39:14 -0000	1.10
  +++ ossp-pkg/ase/ase.cgi.rpc.pl	20 Mar 2007 20:23:27 -0000	1.11
  @@ -99,6 +99,7 @@
               $response->{"Client-Address"}    = $session->remote_addr()  || "0.0.0.0";
               $response->{"Client-Login-UUID"} = $session->param("login") || "unknown";
               $response->{"Client-Login-Name"} = $rec->{"me_address"}     || "unknown";
  +            $response->{"Client-Login-Nick"} = $rec->{"me_nickname"}    || "unknown";
           }
   
           #   generate response
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.sql
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ase.sql
  --- ossp-pkg/ase/ase.sql	19 Mar 2007 20:13:30 -0000	1.6
  +++ ossp-pkg/ase/ase.sql	20 Mar 2007 20:23:27 -0000	1.7
  @@ -32,6 +32,9 @@
                                  -- [75468374-8721-11d9-bee4-0002a5489f14]
   
       -- Unique Keys (secondary)
  +    me_nickname                TEXT UNIQUE,
  +                               -- Nickname
  +                               -- [rse]
       me_address                 TEXT UNIQUE,
                                  -- Email-Address
                                  -- [rse@engelschall.com]
  @@ -74,6 +77,9 @@
       en_uuid                    TEXT UNIQUE NOT NULL PRIMARY KEY, 
                                  -- Membership UUID
                                  -- [75468374-8721-11d9-bee4-0002a5489f14]
  +    en_nickname                TEXT NOT NULL,
  +                               -- Nickname
  +                               -- [rse]
       en_address                 TEXT UNIQUE NOT NULL,
                                  -- Email-Address
                                  -- [rse@engelschall.com]
  @@ .

From ossp-cvs-owner@ossp.org  Tue Mar 20 21:37:41 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 225C07528E1; Tue, 20 Mar 2007 21:37:41 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.enroll.pl ase.cgi.login.pl ase.cgi.p...
Message-Id: <20070320203741.225C07528E1@mail.ossp.org>
Date: Tue, 20 Mar 2007 21:37:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Mar-2007 21:37:40
  Branch: HEAD                             Handle: 2007032020374000

  Modified files:
    ossp-pkg/ase            ase.cgi.enroll.pl ase.cgi.login.pl
                            ase.cgi.profile.pl ase.cgi.rpc.pl ase.cgi.scode.pl
                            ase.sql

  Log:
    make nickname an optional thing for now

  Summary:
    Revision    Changes     Path
    1.23        +8  -8      ossp-pkg/ase/ase.cgi.enroll.pl
    1.18        +1  -1      ossp-pkg/ase/ase.cgi.login.pl
    1.11        +1  -1      ossp-pkg/ase/ase.cgi.profile.pl
    1.12        +1  -1      ossp-pkg/ase/ase.cgi.rpc.pl
    1.9         +1  -1      ossp-pkg/ase/ase.cgi.scode.pl
    1.8         +3  -3      ossp-pkg/ase/ase.sql
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	20 Mar 2007 20:23:27 -0000	1.22
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	20 Mar 2007 20:37:40 -0000	1.23
  @@ -93,7 +93,7 @@
           "    <td class=\"I\">"; $html->fold("field-name"); $html .= "</td>\n" .
           "  </tr>\n" .
           "  <tr>\n" .
  -        "    <td class=\"L\"><span class=\"label\">Nickname:</span></td>\n" .
  +        "    <td class=\"L\"><span class=\"label\">Nickname:<br/>(optional)</span></td>\n" .
           "    <td class=\"I\">"; $html->fold("field-nickname"); $html .= "</td>\n" .
           "  </tr>\n" .
           "  <tr>\n" .
  @@ -262,9 +262,9 @@
           $cgi->param('name.error', 'Invalid Name: not <i>firstname lastname</i>');
           $error = 1;
       }
  -    if ($nickname !~ m/^[a-z][a-z0-9]{3,}$/) {
  +    if ($nickname !~ m/^(?:|[a-z][a-z0-9]{3,})$/) {
           $self->logbook("invalid nickname: \"%s\"", $address);
  -        $cgi->param('nickname.error', 'Invalid Nickname: has to match "^[a-z][a-z0-9]{3,}"');
  +        $cgi->param('nickname.error', 'Invalid Nickname: has to be empty or match "^[a-z][a-z0-9]{3,}"');
           $error = 1;
       }
       if ($address !~ m/^[^@]+\@(?:[^.]+\.)+[^.]+$/) {
  @@ -287,7 +287,7 @@
       }
   
       #   make sure the Nickname is still not used
  -    if (not defined($cgi->param('nickname.error'))) {
  +    if ($nickname ne '' && not defined($cgi->param('nickname.error'))) {
           my $rec;
           ($rec = $dbi->query(q{
               SELECT * FROM ase_enrollment WHERE en_nickname = ?;
  @@ -389,7 +389,7 @@
            en_name, en_nickname, en_address, en_pw_sha1, en_pw_md5, en_pw_cryptmd5, en_pw_cryptdes,
            en_start, en_expiry)
           VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
  -    },  $me_uuid, $name, $nickname, $address,
  +    },  $me_uuid, $name, $nickname ne '' ? $nickname : undef, $address,
           $pw->{-sha1}, $pw->{-md5}, $pw->{-cryptmd5}, $pw->{-cryptdes}, 
           $t_start, $t_expiry
       ) or die $dbi->error();
  @@ -562,7 +562,7 @@
       $self->use("Mail::Sendmail");
       my $mail =
           "Successful " . $cfg->{-cfg}->{"project-name"} . " Fellow Registration (No. ".$rec2->{count}."):\n" .
  -        $rec->{en_name}." (".$rec->{"en_nickname"}.") <".$rec->{en_address}.">\n" .
  +        $rec->{en_name}.(defined $rec->{"en_nickname"} ? " (".$rec->{"en_nickname"}.")" : "")." <".$rec->{en_address}.">\n" .
           "\n" .
           "-- \n" .
           $cfg->{-cfg}->{"service-name"} . "\n" .
  @@ -572,11 +572,11 @@
       Mail::Sendmail::sendmail(
           To      => $cfg->{-cfg}->{"service-admin"},
           From    => $cfg->{-cfg}->{"service-name"} . " <" . $cfg->{-cfg}->{"service-sender"} . ">\n",
  -        Subject => $cfg->{-cfg}->{"project-name"} . " Registration: " . $rec->{en_name} . " (" . $rec->{en_nickname} . ") <" . $rec->{en_address} . ">\n",
  +        Subject => $cfg->{-cfg}->{"project-name"} . " Registration: " . $rec->{en_name} . (defined $rec->{en_nickname} ? " (" . $rec->{en_nickname} . ")" : ""). " <" . $rec->{en_address} . ">\n",
           Message => $mail,
       ) or die $Mail::Sendmail::error;
   
  -    $self->logbook("enrollment finished for %s (%s) <%s>", $rec->{"en_name"}, $rec->{"en_nickname"}, $rec->{"en_address"});
  +    $self->logbook("enrollment finished for %s %s<%s>", $rec->{"en_name"}, (defined $rec->{"en_nickname"} ? " (" . $rec->{"en_nickname"} . ")" : ""), $rec->{"en_address"});
   
       return;
   }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	20 Mar 2007 20:23:27 -0000	1.17
  +++ ossp-pkg/ase/ase.cgi.login.pl	20 Mar 2007 20:37:40 -0000	1.18
  @@ -220,7 +220,7 @@
   
       #   login the user by remembering his UUID in the session
       $session->param("login", $rec->{'me_uuid'});
  -    $self->logbook("login by %s (%s) <%s>", $rec->{'me_name'}, $rec->{'me_nickname'}, $rec->{'me_address'}); 
  +    $self->logbook("login by %s %s<%s>", $rec->{'me_name'}, (defined $rec->{'me_nickname'} ? " (" . $rec->{'me_nickname'} . ")" : ""), $rec->{'me_address'}); 
   
       #   perform login: either go to menu or redirect to external return URL
       if (defined(my $url = $session->param("after_login"))) {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.profile.pl
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 ase.cgi.profile.pl
  --- ossp-pkg/ase/ase.cgi.profile.pl	20 Mar 2007 20:23:27 -0000	1.10
  +++ ossp-pkg/ase/ase.cgi.profile.pl	20 Mar 2007 20:37:40 -0000	1.11
  @@ -122,7 +122,7 @@
           "  </tr>\n" .
           "  <tr>\n" .
           "    <td class=\"L\"><span class=\"label\">Nickname:</span></td>\n" .
  -        "    <td class=\"I\">". $rec->{"me_nickname"} ."</td>\n" .
  +        "    <td class=\"I\">". (defined $rec->{"me_nickname"} ? $rec->{"me_nickname"} : "(none)") ."</td>\n" .
           "  </tr>\n" .
           "  <tr>\n" .
           "    <td class=\"L\"><span class=\"label\">Email Address:</span></td>\n" .
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.rpc.pl
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 ase.cgi.rpc.pl
  --- ossp-pkg/ase/ase.cgi.rpc.pl	20 Mar 2007 20:23:27 -0000	1.11
  +++ ossp-pkg/ase/ase.cgi.rpc.pl	20 Mar 2007 20:37:40 -0000	1.12
  @@ -99,7 +99,7 @@
               $response->{"Client-Address"}    = $session->remote_addr()  || "0.0.0.0";
               $response->{"Client-Login-UUID"} = $session->param("login") || "unknown";
               $response->{"Client-Login-Name"} = $rec->{"me_address"}     || "unknown";
  -            $response->{"Client-Login-Nick"} = $rec->{"me_nickname"}    || "unknown";
  +            $response->{"Client-Login-Nick"} = $rec->{"me_nickname"}    || "";
           }
   
           #   generate response
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.scode.pl
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 ase.cgi.scode.pl
  --- ossp-pkg/ase/ase.cgi.scode.pl	20 Mar 2007 17:39:14 -0000	1.8
  +++ ossp-pkg/ase/ase.cgi.scode.pl	20 Mar 2007 20:37:40 -0000	1.9
  @@ -118,7 +118,7 @@
       (my $rec = $dbi->query(q{
           SELECT sc_number, sc_expiry FROM ase_scode
           WHERE sc_uuid = ?
  -    }, $scode_uuid)->hash()) or die $dbi->error();
  +    }, $scode_uuid)->hash()) or die "unable to find scode";
       my $scode_number = $rec->{'sc_number'};
       my $scode_expiry = $rec->{'sc_expiry'};
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.sql
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 ase.sql
  --- ossp-pkg/ase/ase.sql	20 Mar 2007 20:23:27 -0000	1.7
  +++ ossp-pkg/ase/ase.sql	20 Mar 2007 20:37:40 -0000	1.8
  @@ -32,10 +32,10 @@
                                  -- [75468374-8721-11d9-bee4-0002a5489f14]
   
       -- Unique Keys (secondary)
  -    me_nickname                TEXT UNIQUE,
  +    me_nickname                TEXT,
                                  -- Nickname
                                  -- [rse]
  -    me_address                 TEXT UNIQUE,
  +    me_address                 TEXT UNIQUE NOT NULL,
                                  -- Email-Address
                                  -- [rse@engelschall.com]
   
  @@ -77,7 +77,7 @@
       en_uuid                    TEXT UNIQUE NOT NULL PRIMARY KEY, 
                                  -- Membership UUID
                                  -- [75468374-8721-11d9-bee4-0002a5489f14]
  -    en_nickname                TEXT NOT NULL,
  +    en_nickname                TEXT,
                                  -- Nickname
                                  -- [rse]
       en_address                 TEXT UNIQUE NOT NULL,
  @@ .

From ossp-cvs-owner@ossp.org  Tue Mar 20 21:39:18 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 373BB7528E1; Tue, 20 Mar 2007 21:39:18 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO
Message-Id: <20070320203918.373BB7528E1@mail.ossp.org>
Date: Tue, 20 Mar 2007 21:39:18 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Mar-2007 21:39:18
  Branch: HEAD                             Handle: 2007032020391800

  Modified files:
    ossp-pkg/ase            TODO

  Log:
    remember issue

  Summary:
    Revision    Changes     Path
    1.21        +1  -0      ossp-pkg/ase/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 TODO
  --- ossp-pkg/ase/TODO	20 Mar 2007 20:23:27 -0000	1.20
  +++ ossp-pkg/ase/TODO	20 Mar 2007 20:39:18 -0000	1.21
  @@ -1,5 +1,6 @@
   
   TODO:
  +- add profile editing support (especially to allow changing the nickname)
   - check URL fetching and its caching because of DBIx::Simple:
     http://cvs.ossp.org/filediff?f=ossp-pkg/ase/ase.cgi.util.pl&v1=1.15&v2=1.16
     It could be that the "DBI::SQL_BLOB" is important!!! But DBIx::Simple
  @@ .

From ossp-cvs-owner@ossp.org  Tue Mar 20 21:44:38 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 8C6867528EB; Tue, 20 Mar 2007 21:44:38 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.logout.pl
Message-Id: <20070320204438.8C6867528EB@mail.ossp.org>
Date: Tue, 20 Mar 2007 21:44:38 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Mar-2007 21:44:38
  Branch: HEAD                             Handle: 2007032020443800

  Modified files:
    ossp-pkg/ase            ase.cgi.logout.pl

  Log:
    use configurable service name when possible

  Summary:
    Revision    Changes     Path
    1.9         +3  -2      ossp-pkg/ase/ase.cgi.logout.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.logout.pl
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 ase.cgi.logout.pl
  --- ossp-pkg/ase/ase.cgi.logout.pl	19 Mar 2007 20:13:30 -0000	1.8
  +++ ossp-pkg/ase/ase.cgi.logout.pl	20 Mar 2007 20:44:38 -0000	1.9
  @@ -32,6 +32,7 @@
   #   application run-time mode processing: "logout"
   sub mode_logout_screen {
       my $self    = shift;
  +    my $cfg     = $self->param(-cfg);
       my $cgi     = $self->param(-cgi);
       my $html    = $self->param(-html);
       my $session = $self->param(-session);
  @@ -51,7 +52,7 @@
   
       #   generate description
       $html .=
  -        "Thank you for visiting the Affiliation Service Environment.<br>\n" .
  +        "Thank you for visiting " . $cfg->{-cfg}->{"service-name"} . ".</br>\n" .
           "Your session was terminated and you are now logged out.<br>\n" .
           "Please visit us again soon.";
   
  @@ -102,7 +103,7 @@
       $self->menu_tab("menu-logout");
   
       $html .=
  -        "Here you can logout from the Affiliation Service Environment. " .
  +        "Jere you can logout from " . $cfg->{-cfg}->{"service-name"} . ".</br>\n" .
           "Your current browser session will be destroyed and you will be redirected " .
           "to the Login screen again. Unless you explicitly logout, your session " .
           "will be kept active.";
  @@ .

From ossp-cvs-owner@ossp.org  Tue Mar 20 21:49:47 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id C219A7528EB; Tue, 20 Mar 2007 21:49:47 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.enroll.pl ase.cgi.logout.pl ase.cgi....
Message-Id: <20070320204947.C219A7528EB@mail.ossp.org>
Date: Tue, 20 Mar 2007 21:49:47 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Mar-2007 21:49:47
  Branch: HEAD                             Handle: 2007032020494700

  Modified files:
    ossp-pkg/ase            ase.cgi.enroll.pl ase.cgi.logout.pl
                            ase.cgi.main.pl ase.cgi.recover.pl sample.cgi

  Log:
    use strict XHTML, please

  Summary:
    Revision    Changes     Path
    1.24        +7  -7      ossp-pkg/ase/ase.cgi.enroll.pl
    1.10        +6  -6      ossp-pkg/ase/ase.cgi.logout.pl
    1.25        +2  -2      ossp-pkg/ase/ase.cgi.main.pl
    1.5         +1  -0      ossp-pkg/ase/ase.cgi.recover.pl
    1.13        +1  -1      ossp-pkg/ase/sample.cgi
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	20 Mar 2007 20:37:40 -0000	1.23
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	20 Mar 2007 20:49:47 -0000	1.24
  @@ -69,7 +69,7 @@
   
       #   generate description
       $html .=
  -        "<p>\n" .
  +        "<p/>\n" .
           "Enroll here and join " . $cfg->{-cfg}->{"project-name"} . "\n" .
           "For successfully enrolling you have to specify at least your\n" .
           "real name, a unique nick name, your Email address and a password.\n" .
  @@ -86,7 +86,7 @@
   
       #   generate the inner canvas
       $html .=
  -        "<p>\n" .
  +        "<p/>\n" .
           "<table class=\"F\">\n" .
           "  <tr>\n" .
           "    <td class=\"L\"><span class=\"label\">Name:</span></td>\n" .
  @@ -443,7 +443,7 @@
       #$html .=
       #    "<a class=\"button\" href=\"".$self->url(-mode => "login")."\">" .
       #    "&larr; Back to <b>Login</b>" .
  -    #    "</a><p>\n";
  +    #    "</a><p/>\n";
   
       #   generate step-by-step list
       $html .=
  @@ -455,7 +455,7 @@
   
       #   generate header text
       $html .=
  -        "<p>\n" .
  +        "<p/>\n" .
           "An Email was sent to you under &lt;<a href=\"mailto:$address\"><b>$address</b></a>&gt; containing\n" .
           "an URL. Please follow this URL for being directed to step 3\n" .
           "of this Enrollment procedure, the Account Activation.\n";
  @@ -490,7 +490,7 @@
                    "you already activated your account or " .
                    "the URL you followed was incorrect. Please start " .
                    "from scratch!" .
  -                 "<p>\n" .
  +                 "<p/>\n" .
                    "<a class=\"button\" href=\"".$self->url(-mode => "enrollment")."\">" .
                    "Go to <b>Enrollment</b> screen" .
                    "</a>\n" .
  @@ -544,11 +544,11 @@
       #   generate description
       $html .=
           "Congratulations!\n" .
  -        "<p>\n" .
  +        "<p/>\n" .
           "You have successfully registered with " . $cfg->{-cfg}->{"project-name"} . ".\n" .
           "You can now access your account by going to the Login screen.\n" .
           "Please login at least once now to finish activating your account.\n" .
  -        "<p>\n" .
  +        "<p/>\n" .
           "<a class=\"button\" href=\"".$self->url(-mode => "login")."\">" .
           "Go to <b>Login</b> screen" .
           "</a>\n";
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.logout.pl
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 ase.cgi.logout.pl
  --- ossp-pkg/ase/ase.cgi.logout.pl	20 Mar 2007 20:44:38 -0000	1.9
  +++ ossp-pkg/ase/ase.cgi.logout.pl	20 Mar 2007 20:49:47 -0000	1.10
  @@ -53,15 +53,15 @@
       #   generate description
       $html .=
           "Thank you for visiting " . $cfg->{-cfg}->{"service-name"} . ".</br>\n" .
  -        "Your session was terminated and you are now logged out.<br>\n" .
  +        "Your session was terminated and you are now logged out.<br/>\n" .
           "Please visit us again soon.";
   
       #   redirect to Login screen
       $html .=
  -        "<p>\n" .
  +        "<p/>\n" .
           "You should be redirected to the Login screen in 10 seconds automatically.\n" .
           "<meta http-equiv=\"refresh\" content=\"10;url=".$self->url(-mode => "login")."\">\n" .
  -        "<p>\n" .
  +        "<p/>\n" .
           "<a class=\"button\" href=\"".$self->url(-mode => "login")."\">" .
           "Go to <b>Login</b> screen" .
           "</a>\n";
  @@ -103,16 +103,16 @@
       $self->menu_tab("menu-logout");
   
       $html .=
  -        "Jere you can logout from " . $cfg->{-cfg}->{"service-name"} . ".</br>\n" .
  +        "Here you can logout from " . $cfg->{-cfg}->{"service-name"} . ".</br>\n" .
           "Your current browser session will be destroyed and you will be redirected " .
           "to the Login screen again. Unless you explicitly logout, your session " .
           "will be kept active.";
   
       $html .=
  -        "<p>\n" .
  +        "<p/>\n" .
           "<div align=center><a class=\"button\" href=\"".$self->url(-mode => "logout")."\">" .
           "<b>Logout!</b>" .
  -        "</a></div><p>\n";
  +        "</a></div><p/>\n";
   
       return;
   }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	20 Mar 2007 17:42:07 -0000	1.24
  +++ ossp-pkg/ase/ase.cgi.main.pl	20 Mar 2007 20:49:47 -0000	1.25
  @@ -287,7 +287,7 @@
       my ($self, $error) = @_;
       my $cfg = $self->param(-cfg);
   
  -    my $html = sprintf("%s ERROR:<br>%s\n", $cfg->{-prog_name}, HTML::Entities::encode_entities($error));
  +    my $html = sprintf("%s ERROR:<br/>%s\n", $cfg->{-prog_name}, HTML::Entities::encode_entities($error));
   
       return $html;
   }
  @@ -302,7 +302,7 @@
   
       #   establish fallback redirection HTML page
       my $html =
  -        "You are redirected to the following URL:<br>" .
  +        "You are redirected to the following URL:<br/>" .
           "<a href=\"$url\">".HTML::Entities::encode_entities($url)."</a>" .
           "If nothing happens within 10 seconds," .
           "please click the above URL manually.\n";
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.recover.pl
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ase.cgi.recover.pl
  --- ossp-pkg/ase/ase.cgi.recover.pl	20 Mar 2007 17:39:14 -0000	1.4
  +++ ossp-pkg/ase/ase.cgi.recover.pl	20 Mar 2007 20:49:47 -0000	1.5
  @@ -39,6 +39,7 @@
       $html .= "<div class=\"ase_boxed\">\n";
       $html .= "<span class=\"title\">Account Recovery</span>\n";
       $html .= "Sorry, Account Recovery still not implemented!";
  +    $html .= "</div>\n";
       return;
   }
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/sample.cgi
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 sample.cgi
  --- ossp-pkg/ase/sample.cgi	19 Mar 2007 20:13:30 -0000	1.12
  +++ ossp-pkg/ase/sample.cgi	20 Mar 2007 20:49:47 -0000	1.13
  @@ -120,7 +120,7 @@
   }
   
   $html .= "<h1>Sample Application</h1>\n";
  -$html .= sprintf("Session: SID %s<br>\n", $session->id());
  +$html .= sprintf("Session: SID %s<br/>\n", $session->id());
   
   $html .= "Navigation:\n";
   $html .= sprintf("<a href=\"%s\">Page 1</a>", $cgi->url(-relative => 1)."?mode=page1") . " | ";
  @@ .

From ossp-cvs-owner@ossp.org  Tue Mar 20 21:52:57 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id EF9927528EB; Tue, 20 Mar 2007 21:52:56 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.logout.pl
Message-Id: <20070320205256.EF9927528EB@mail.ossp.org>
Date: Tue, 20 Mar 2007 21:52:56 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Mar-2007 21:52:56
  Branch: HEAD                             Handle: 2007032020525600

  Modified files:
    ossp-pkg/ase            ase.cgi.logout.pl

  Log:
    fix logout

  Summary:
    Revision    Changes     Path
    1.11        +1  -0      ossp-pkg/ase/ase.cgi.logout.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.logout.pl
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 ase.cgi.logout.pl
  --- ossp-pkg/ase/ase.cgi.logout.pl	20 Mar 2007 20:49:47 -0000	1.10
  +++ ossp-pkg/ase/ase.cgi.logout.pl	20 Mar 2007 20:52:56 -0000	1.11
  @@ -77,6 +77,7 @@
   #   application run-time mode processing: "menu-logout"
   sub mode_menu_logout_screen {
       my $self    = shift;
  +    my $cfg     = $self->param(-cfg);
       my $cgi     = $self->param(-cgi);
       my $html    = $self->param(-html);
       my $session = $self->param(-session);
  @@ .

From ossp-cvs-owner@ossp.org  Tue Mar 20 22:21:44 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 7CE8175291E; Tue, 20 Mar 2007 22:21:44 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.logout.pl
Message-Id: <20070320212144.7CE8175291E@mail.ossp.org>
Date: Tue, 20 Mar 2007 22:21:44 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Mar-2007 22:21:44
  Branch: HEAD                             Handle: 2007032021214300

  Modified files:
    ossp-pkg/ase            ase.cgi.logout.pl

  Log:
    log the logout action, too

  Summary:
    Revision    Changes     Path
    1.12        +8  -0      ossp-pkg/ase/ase.cgi.logout.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.logout.pl
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 ase.cgi.logout.pl
  --- ossp-pkg/ase/ase.cgi.logout.pl	20 Mar 2007 20:52:56 -0000	1.11
  +++ ossp-pkg/ase/ase.cgi.logout.pl	20 Mar 2007 21:21:43 -0000	1.12
  @@ -36,6 +36,7 @@
       my $cgi     = $self->param(-cgi);
       my $html    = $self->param(-html);
       my $session = $self->param(-session);
  +    my $dbi     = $self->param(-dbi);
   
       #   remember optional external return URL
       my $url = $session->param("after_logout");
  @@ -66,6 +67,13 @@
           "Go to <b>Login</b> screen" .
           "</a>\n";
   
  +    #   log action
  +    my $me_uuid = $session->param("login");
  +    (my $rec = $dbi->query(q{
  +        SELECT * FROM ase_member WHERE me_uuid = ?; 
  +    }, $me_uuid)->hash()) or die $dbi->error();
  +    $self->logbook("logout by %s %s<%s>", $rec->{'me_name'}, (defined $rec->{'me_nickname'} ? " (" . $rec->{'me_nickname'} . ")" : ""), $rec->{'me_address'}); 
  +
       #   optionally redirect to external return URL
       if (defined($url)) {
           return $self->redirect(sprintf($url, "none"));
  @@ .

From ossp-cvs-owner@ossp.org  Tue Mar 20 22:22:36 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 4114A75291E; Tue, 20 Mar 2007 22:22:36 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ChangeLog ase.cgi ase.cgi.main.pl ase.cgi.pr...
Message-Id: <20070320212236.4114A75291E@mail.ossp.org>
Date: Tue, 20 Mar 2007 22:22:36 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   20-Mar-2007 22:22:36
  Branch: HEAD                             Handle: 2007032021223500

  Added files:
    ossp-pkg/ase            ase.cgi.resign.pl
  Modified files:
    ossp-pkg/ase            ChangeLog ase.cgi ase.cgi.main.pl
                            ase.cgi.profile.pl ase.css

  Log:
    Add resign functionality.

  Summary:
    Revision    Changes     Path
    1.5         +3  -0      ossp-pkg/ase/ChangeLog
    1.17        +1  -0      ossp-pkg/ase/ase.cgi
    1.26        +1  -0      ossp-pkg/ase/ase.cgi.main.pl
    1.12        +1  -0      ossp-pkg/ase/ase.cgi.profile.pl
    1.1         +134 -0     ossp-pkg/ase/ase.cgi.resign.pl
    1.9         +9  -0      ossp-pkg/ase/ase.css
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ChangeLog
  --- ossp-pkg/ase/ChangeLog	20 Mar 2007 20:23:27 -0000	1.4
  +++ ossp-pkg/ase/ChangeLog	20 Mar 2007 21:22:35 -0000	1.5
  @@ -13,6 +13,9 @@
   
     Changes between 0.1.x and 0.2.0 (xx-Oct-2005 to 20-Mar-2007)
   
  +   o Add resign functionality.
  +     [Ralf S. Engelschall]
  +
      o Allow one to login via name, nickname or email address.
        [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 ase.cgi
  --- ossp-pkg/ase/ase.cgi	20 Mar 2007 17:39:14 -0000	1.16
  +++ ossp-pkg/ase/ase.cgi	20 Mar 2007 21:22:35 -0000	1.17
  @@ -89,6 +89,7 @@
   require "$dir/ase.cgi.enroll.pl";       # application workflow: enrollment
   require "$dir/ase.cgi.recover.pl";      # application workflow: recovery
   require "$dir/ase.cgi.profile.pl";      # application workflow: profile
  +require "$dir/ase.cgi.resign.pl";       # application workflow: resign
   
   #   main procedure
   my $app = new OSSP::ase::server ($cfg);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	20 Mar 2007 20:49:47 -0000	1.25
  +++ ossp-pkg/ase/ase.cgi.main.pl	20 Mar 2007 21:22:35 -0000	1.26
  @@ -118,6 +118,7 @@
           'menu-account'       => { -login => 1, -canvas => 1, -method => \&mode_menu_account_screen  },
           'menu-action'        => { -login => 1, -canvas => 1, -method => \&mode_menu_action_screen   },
           'menu-logout'        => { -login => 1, -canvas => 1, -method => \&mode_menu_logout_screen   },
  +        'menu-resign'        => { -login => 1, -canvas => 1, -method => \&mode_menu_resign_screen   },
       };
       $self->param(-modes => $modes);
       my %run_modes = ();
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.profile.pl
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 ase.cgi.profile.pl
  --- ossp-pkg/ase/ase.cgi.profile.pl	20 Mar 2007 20:37:40 -0000	1.11
  +++ ossp-pkg/ase/ase.cgi.profile.pl	20 Mar 2007 21:22:35 -0000	1.12
  @@ -41,6 +41,7 @@
           # { -mode => "menu-member",   -name => "Member"   }, FIXME
           # { -mode => "menu-account",  -name => "Account"  }, FIXME
           # { -mode => "menu-action",   -name => "Action"   }, FIXME
  +        { -mode => "menu-resign",   -name => "Resign"   },
           { -mode => "menu-logout",   -name => "Logout"   },
       ];
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.resign.pl
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ase.cgi.resign.pl
  --- /dev/null	2007-03-20 22:22:00 +0100
  +++ ase.cgi.resign.pl	2007-03-20 22:22:36 +0100
  @@ -0,0 +1,134 @@
  +##
  +##  OSSP ase -- Affiliation Service Environment
  +##  Copyright (c) 2005-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2005-2007 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP ase, a service environment for managing
  +##  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  +##
  +##  This program is free software; you can redistribute it and/or modify
  +##  it under the terms of the GNU General Public License as published by
  +##  the Free Software Foundation; either version 2 of the License, or
  +##  (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this program; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  ase.cgi.resign.pl: resign workflow
  +##
  +
  +package OSSP::ase::server;
  +use base 'CGI::Application';
  +use strict;
  +use warnings;
  +
  +#   application run-time mode processing: "menu-resign"
  +sub mode_menu_resign_screen {
  +    my $self    = shift;
  +    my $cfg     = $self->param(-cfg);
  +    my $cgi     = $self->param(-cgi);
  +    my $html    = $self->param(-html);
  +    my $session = $self->param(-session);
  +    my $dbi     = $self->param(-dbi);
  +
  +    #   generate the outer canvas
  +    $html .= "<div class=\"ase_boxed\">\n";
  +    $html .= "<span class=\"title\">Main Menu</span>\n";
  +    $html .= $cgi->start_form(
  +        -method => 'POST',
  +        -action => $self->url(),
  +        -class  => 'menu',
  +    ) . "\n";
  +    $html .= $cgi->hidden(
  +        -name     => 'mode',
  +        -value    => 'menu-logout-action',
  +        -override => 1
  +    ) . "\n";
  +    $html->fold("canvas");
  +    $html .= $cgi->end_form() . "\n";
  +    $html .= "</div>\n";
  +    $html >> "canvas";
  +
  +    #   insert navigation tab
  +    $self->menu_tab("menu-resign");
  +
  +
  +    #   determine step
  +    my $step = $cgi->param("step") || "1";
  +
  +    #   dispatch according to workflow step
  +    if ($step eq "1") {
  +        #   initial hint
  +        $html .=
  +            "Here you can resign from " . $cfg->{-cfg}->{"service-name"} . ".<br/>\n" .
  +            "Your account will be deleted, your current browser session will\n" .
  +            "be destroyed and you will be redirected to the Login screen again.";
  +        $html .=
  +            "<p>\n" .
  +            "<div align=center><a class=\"button\" href=\"".$self->url(-mode => "menu-resign", -step => "2")."\">" .
  +            "<b>Resign!</b>" .
  +            "</a></div><p>\n";
  +    }
  +    elsif ($step eq "2") {
  +        #   extra confirmation
  +        $html .=
  +            "ATTENTION: You are intending to resign from " . $cfg->{-cfg}->{"service-name"} . ".<br/>\n" .
  +            "Once your confirmed, your account will be deleted, your current browser session will\n" .
  +            "be destroyed and you will be redirected to the Login screen again.";
  +        $html .=
  +            "<p/>\n" .
  +            "<div align=center>" .
  +            "<a class=\"button\" href=\"".$self->url(-mode => "menu-resign")."\"><b>Cancel</b></a>" .
  +            "&nbsp;" .
  +            "<a class=\"button_attention\" href=\"".$self->url(-mode => "menu-resign", -step => "3")."\"><b>Confirm Resign!</b></a>" .
  +            "</div>\n";
  +    }
  +    elsif ($step eq "3") {
  +        #   take membership UUID from session
  +        my $me_uuid = $session->param("login");
  +
  +        #   log action
  +        (my $rec = $dbi->query(q{
  +            SELECT * FROM ase_member WHERE me_uuid = ?; 
  +        }, $me_uuid)->hash()) or die $dbi->error();
  +        $self->logbook("resign by %s %s<%s>", $rec->{'me_name'}, (defined $rec->{'me_nickname'} ? " (" . $rec->{'me_nickname'} . ")" : ""), $rec->{'me_address'}); 
  +
  +        #   delete account
  +        $dbi->query(q{
  +            DELETE FROM ase_member WHERE me_uuid = ?;
  +        }, $me_uuid) or die $dbi->error();
  +
  +        #   remove the session from the database
  +        $session->delete();
  +
  +        #   final hint
  +        $html .=
  +            "Thank you for having joined " . $cfg->{-cfg}->{"service-name"} . ".</br>\n" .
  +            "Your account was deleted, your session was terminated and you are now logged out.<br/>\n" .
  +            "Please join us again soon.";
  +
  +        #   redirect to Login screen
  +        $html .=
  +            "<p/>\n" .
  +            "You should be redirected to the Login screen in 10 seconds automatically.\n" .
  +            "<meta http-equiv=\"refresh\" content=\"10;url=".$self->url(-mode => "login")."\">\n" .
  +            "<p/>\n" .
  +            "<a class=\"button\" href=\"".$self->url(-mode => "login")."\">" .
  +            "Go to <b>Login</b> screen" .
  +            "</a>\n";
  +    }
  +    else {
  +        die "invalid step";
  +    }
  +    return;
  +}
  +
  +1;
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.css
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 ase.css
  --- ossp-pkg/ase/ase.css	19 Mar 2007 20:13:30 -0000	1.8
  +++ ossp-pkg/ase/ase.css	20 Mar 2007 21:22:35 -0000	1.9
  @@ -46,6 +46,15 @@
       border-bottom:    1px solid #666666;
       padding:          1px 8px 1px 8px;
   }
  +.ase a.button_attention {
  +    color:            #ffffff;
  +    background:       #cc3333;
  +    border-top:       1px solid #f03333;
  +    border-left:      1px solid #f03333;
  +    border-right:     1px solid #990000;
  +    border-bottom:    1px solid #990000;
  +    padding:          1px 8px 1px 8px;
  +}
   
   /* General: Annotations */
   .ase span.annotation {
  @@ .

From ossp-cvs-owner@ossp.org  Wed Mar 21 08:26:46 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 13224753018; Wed, 21 Mar 2007 08:26:46 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.login.pl ase.cgi.logout.pl
Message-Id: <20070321072646.13224753018@mail.ossp.org>
Date: Wed, 21 Mar 2007 08:26:46 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Mar-2007 08:26:45
  Branch: HEAD                             Handle: 2007032107264500

  Modified files:
    ossp-pkg/ase            ase.cgi.login.pl ase.cgi.logout.pl

  Log:
    remember the login name after logout

  Summary:
    Revision    Changes     Path
    1.19        +2  -2      ossp-pkg/ase/ase.cgi.login.pl
    1.13        +16 -7      ossp-pkg/ase/ase.cgi.logout.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	20 Mar 2007 20:37:40 -0000	1.18
  +++ ossp-pkg/ase/ase.cgi.login.pl	21 Mar 2007 07:26:45 -0000	1.19
  @@ -57,7 +57,7 @@
       #   generate header text
       $html .=
           "Welcome to " . $cfg->{-cfg}->{"service-name"} . "!<p/>\n" .
  -        "Please login with your Email address and password.<br/>\n" .
  +        "Please login with your name, nickname, or email address.<br/>\n" .
           "If you have still no account use \"Account Enrollment\", please.<br/>\n".
           "If you forgot your password, use \"Account Recovery\", please.\n";
   
  @@ -99,7 +99,7 @@
           -id       => 'field_login',
           -class    => 'field',
           -name     => 'login',
  -        -default  => '',
  +        -default  => ($cgi->param("login") || ""),
           -tabindex => 1,
           -size     => 30,
       );
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.logout.pl
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 ase.cgi.logout.pl
  --- ossp-pkg/ase/ase.cgi.logout.pl	20 Mar 2007 21:21:43 -0000	1.12
  +++ ossp-pkg/ase/ase.cgi.logout.pl	21 Mar 2007 07:26:45 -0000	1.13
  @@ -38,6 +38,12 @@
       my $session = $self->param(-session);
       my $dbi     = $self->param(-dbi);
   
  +    #   determine user information
  +    my $me_uuid = $session->param("login");
  +    (my $rec = $dbi->query(q{
  +        SELECT * FROM ase_member WHERE me_uuid = ?; 
  +    }, $me_uuid)->hash()) or die $dbi->error();
  +
       #   remember optional external return URL
       my $url = $session->param("after_logout");
   
  @@ -61,18 +67,21 @@
       $html .=
           "<p/>\n" .
           "You should be redirected to the Login screen in 10 seconds automatically.\n" .
  -        "<meta http-equiv=\"refresh\" content=\"10;url=".$self->url(-mode => "login")."\">\n" .
  +        "<meta http-equiv=\"refresh\" content=\"10;url=" .
  +        $self->url(-mode => "login", -login => ($rec->{'me_nickname'} || $rec->{'me_address'})) .
  +        "\">\n" .
           "<p/>\n" .
  -        "<a class=\"button\" href=\"".$self->url(-mode => "login")."\">" .
  +        "<a class=\"button\" href=\"" . 
  +        $self->url(-mode => "login", -login => ($rec->{'me_nickname'} || $rec->{'me_address'})) .
  +        "\">" .
           "Go to <b>Login</b> screen" .
           "</a>\n";
   
       #   log action
  -    my $me_uuid = $session->param("login");
  -    (my $rec = $dbi->query(q{
  -        SELECT * FROM ase_member WHERE me_uuid = ?; 
  -    }, $me_uuid)->hash()) or die $dbi->error();
  -    $self->logbook("logout by %s %s<%s>", $rec->{'me_name'}, (defined $rec->{'me_nickname'} ? " (" . $rec->{'me_nickname'} . ")" : ""), $rec->{'me_address'}); 
  +    $self->logbook("logout by %s %s<%s>",
  +        $rec->{'me_name'},
  +        (defined $rec->{'me_nickname'} ? " (" . $rec->{'me_nickname'} . ")" : ""),
  +        $rec->{'me_address'});
   
       #   optionally redirect to external return URL
       if (defined($url)) {
  @@ .

From ossp-cvs-owner@ossp.org  Wed Mar 21 08:33:20 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id BF49C75292F; Wed, 21 Mar 2007 08:33:20 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.login.pl
Message-Id: <20070321073320.BF49C75292F@mail.ossp.org>
Date: Wed, 21 Mar 2007 08:33:20 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Mar-2007 08:33:20
  Branch: HEAD                             Handle: 2007032107332000

  Modified files:
    ossp-pkg/ase            ase.cgi.login.pl

  Log:
    we will do password recorvery only (if the login is unknown we cannot
    do anything at this time of thoughts), so rename the beast

  Summary:
    Revision    Changes     Path
    1.20        +2  -2      ossp-pkg/ase/ase.cgi.login.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	21 Mar 2007 07:26:45 -0000	1.19
  +++ ossp-pkg/ase/ase.cgi.login.pl	21 Mar 2007 07:33:20 -0000	1.20
  @@ -59,7 +59,7 @@
           "Welcome to " . $cfg->{-cfg}->{"service-name"} . "!<p/>\n" .
           "Please login with your name, nickname, or email address.<br/>\n" .
           "If you have still no account use \"Account Enrollment\", please.<br/>\n".
  -        "If you forgot your password, use \"Account Recovery\", please.\n";
  +        "If you forgot your password, use \"Password Recovery\", please.\n";
   
       #   generate the inner canvas
       $html .=
  @@ -128,7 +128,7 @@
           -class    => 'button',
           -id       => 'button_recovery',
           -name     => 'button.recovery',
  -        -value    => 'Account Recovery',
  +        -value    => 'Password Recovery',
           -tabindex => 5,
       );
       $html << 1;
  @@ .

From ossp-cvs-owner@ossp.org  Wed Mar 21 08:35:17 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 463DC75292F; Wed, 21 Mar 2007 08:35:17 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.main.pl ase.cgi.recover.pl
Message-Id: <20070321073517.463DC75292F@mail.ossp.org>
Date: Wed, 21 Mar 2007 08:35:17 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Mar-2007 08:35:17
  Branch: HEAD                             Handle: 2007032107351600

  Modified files:
    ossp-pkg/ase            ase.cgi.main.pl ase.cgi.recover.pl

  Log:
    cleanup recovery stub

  Summary:
    Revision    Changes     Path
    1.27        +1  -2      ossp-pkg/ase/ase.cgi.main.pl
    1.6         +6  -15     ossp-pkg/ase/ase.cgi.recover.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	20 Mar 2007 21:22:35 -0000	1.26
  +++ ossp-pkg/ase/ase.cgi.main.pl	21 Mar 2007 07:35:16 -0000	1.27
  @@ -108,8 +108,7 @@
           'enrollment'         => { -login => 0, -canvas => 1, -method => \&mode_enrollment_screen    },
           'enrollment-action'  => { -login => 0, -canvas => 1, -method => \&mode_enrollment_action    },
           'activation'         => { -login => 0, -canvas => 1, -method => \&mode_activation_screen    },
  -        'recovery'           => { -login => 0, -canvas => 1, -method => \&mode_recovery_screen      },
  -        'recovery-action'    => { -login => 0, -canvas => 1, -method => \&mode_recovery_action      },
  +        'recovery'           => { -login => 0, -canvas => 1, -method => \&mode_recovery             },
   
           #   application modes
           'menu-overview'      => { -login => 1, -canvas => 1, -method => \&mode_menu_overview_screen },
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.recover.pl
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ase.cgi.recover.pl
  --- ossp-pkg/ase/ase.cgi.recover.pl	20 Mar 2007 20:49:47 -0000	1.5
  +++ ossp-pkg/ase/ase.cgi.recover.pl	21 Mar 2007 07:35:16 -0000	1.6
  @@ -21,7 +21,7 @@
   ##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
   ##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
   ##
  -##  ase.cgi.recover.pl: recovery
  +##  ase.cgi.recover.pl: password recovery
   ##
   
   package OSSP::ase::server;
  @@ -30,27 +30,18 @@
   use warnings;
   
   #   application run-time mode processing: "recovery"
  -sub mode_recovery_screen {
  +sub mode_recovery {
       my $self = shift;
  +    my $cfg  = $self->param(-cfg);
       my $cgi  = $self->param(-cgi);
       my $html = $self->param(-html);
  +    my $dbi  = $self->param(-dbi);
   
       #   generate the outer canvas
       $html .= "<div class=\"ase_boxed\">\n";
  -    $html .= "<span class=\"title\">Account Recovery</span>\n";
  -    $html .= "Sorry, Account Recovery still not implemented!";
  +    $html .= "<span class=\"title\">Password Recovery</span>\n";
  +    $html .= "Sorry, Password Recovery still not implemented!";
       $html .= "</div>\n";
  -    return;
  -}
  -
  -#   run-time mode screen action: "recovery"
  -sub mode_recovery_action {
  -    my $self = shift;
  -    my $cgi  = $self->param(-cgi);
  -    my $html = $self->param(-html);
  -    my $dbi  = $self->param(-dbi);
  -
  -    #   FIXME
   
       return;
   }
  @@ .

From ossp-cvs-owner@ossp.org  Wed Mar 21 08:40:59 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 8C6C67528AA; Wed, 21 Mar 2007 08:40:59 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.resign.pl
Message-Id: <20070321074059.8C6C67528AA@mail.ossp.org>
Date: Wed, 21 Mar 2007 08:40:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Mar-2007 08:40:59
  Branch: HEAD                             Handle: 2007032107405900

  Modified files:
    ossp-pkg/ase            ase.cgi.resign.pl

  Log:
    remove blank line

  Summary:
    Revision    Changes     Path
    1.2         +0  -1      ossp-pkg/ase/ase.cgi.resign.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.resign.pl
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ase.cgi.resign.pl
  --- ossp-pkg/ase/ase.cgi.resign.pl	20 Mar 2007 21:22:35 -0000	1.1
  +++ ossp-pkg/ase/ase.cgi.resign.pl	21 Mar 2007 07:40:59 -0000	1.2
  @@ -59,7 +59,6 @@
       #   insert navigation tab
       $self->menu_tab("menu-resign");
   
  -
       #   determine step
       my $step = $cgi->param("step") || "1";
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Mar 21 11:02:34 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id A46AC752905; Wed, 21 Mar 2007 11:02:33 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.login.pl ase.css
Message-Id: <20070321100233.A46AC752905@mail.ossp.org>
Date: Wed, 21 Mar 2007 11:02:33 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Mar-2007 11:02:33
  Branch: HEAD                             Handle: 2007032110023200

  Modified files:
    ossp-pkg/ase            ase.cgi.login.pl ase.css

  Log:
    switch login buttons for enrollment and recovery from a form button to
    a visually identical hyperlink and this way allow RETURN key in login
    form to always trigger the login button

  Summary:
    Revision    Changes     Path
    1.21        +7  -23     ossp-pkg/ase/ase.cgi.login.pl
    1.10        +0  -6      ossp-pkg/ase/ase.css
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	21 Mar 2007 07:33:20 -0000	1.20
  +++ ossp-pkg/ase/ase.cgi.login.pl	21 Mar 2007 10:02:32 -0000	1.21
  @@ -115,22 +115,14 @@
       );
       $html << 1;
       $html >> "button-enrollment";
  -    $html .= $cgi->submit(
  -        -class    => 'button',
  -        -id       => 'button_enrollment',
  -        -name     => 'button.enrollment',
  -        -value    => 'Account Enrollment',
  -        -tabindex => 4,
  -    );
  +    $html .= "<a class=\"button\" id=\"button_enrollment\" href=\"" .
  +             $self->url(-mode => "enrollment") .
  +             "\">Account Enrollment</a>\n";
       $html << 1;
       $html >> "button-recovery";
  -    $html .= $cgi->submit(
  -        -class    => 'button',
  -        -id       => 'button_recovery',
  -        -name     => 'button.recovery',
  -        -value    => 'Password Recovery',
  -        -tabindex => 5,
  -    );
  +    $html .= "<a class=\"button\" id=\"button_recovery\" href=\"" . 
  +             $self->url(-mode => "recovery") .
  +             "\">Password Recovery</a>\n";
       $html << 1;
       $html >> "button-login";
       $html .= $cgi->submit(
  @@ -155,15 +147,7 @@
       my $dbi     = $self->param(-dbi);
       my $session = $self->param(-session);
   
  -    if (defined($cgi->param("button.enrollment"))) {
  -        #   go to enrollment screen
  -        return $self->forward("enrollment");
  -    }
  -    elsif (defined($cgi->param("button.recovery"))) {
  -        #   go to recovery screen
  -        return $self->forward("recovery");
  -    }
  -    elsif (not defined($cgi->param("button.login"))) {
  +    if (not defined($cgi->param("button.login"))) {
           #   unknown action
           die "unable to determine action";
       }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.css
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 ase.css
  --- ossp-pkg/ase/ase.css	20 Mar 2007 21:22:35 -0000	1.9
  +++ ossp-pkg/ase/ase.css	21 Mar 2007 10:02:32 -0000	1.10
  @@ -181,12 +181,6 @@
       font-weight:      bold;
       width:            100%;
   }
  -.ase form.login input#button_enrollment {
  -    width:            100%;
  -}
  -.ase form.login input#button_recovery {
  -    width:            100%;
  -}
   
   /* Screen "Enrollment" */
   .ase form.enrollment input.button {
  @@ .

From ossp-cvs-owner@ossp.org  Wed Mar 21 11:05:49 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B298D75297E; Wed, 21 Mar 2007 11:05:49 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.enroll.pl ase.css
Message-Id: <20070321100549.B298D75297E@mail.ossp.org>
Date: Wed, 21 Mar 2007 11:05:49 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Mar-2007 11:05:49
  Branch: HEAD                             Handle: 2007032110054900

  Modified files:
    ossp-pkg/ase            ase.cgi.enroll.pl ase.css

  Log:
    use strict XHTML and lighter step list display

  Summary:
    Revision    Changes     Path
    1.25        +2  -2      ossp-pkg/ase/ase.cgi.enroll.pl
    1.11        +1  -1      ossp-pkg/ase/ase.css
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	20 Mar 2007 20:49:47 -0000	1.24
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	21 Mar 2007 10:05:49 -0000	1.25
  @@ -61,8 +61,8 @@
   
       #   generate step-by-step list
       $html .=
  -        "<ol class=steps>\n" .
  -        "  <li class=this>Account Specification</li>\n" .
  +        "<ol class=\"steps\">\n" .
  +        "  <li class=\"this\">Account Specification</li>\n" .
           "  <li>Account Verification</li>\n" .
           "  <li>Account Activation</li>\n" .
           "</ol>\n";
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.css
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 ase.css
  --- ossp-pkg/ase/ase.css	21 Mar 2007 10:02:32 -0000	1.10
  +++ ossp-pkg/ase/ase.css	21 Mar 2007 10:05:49 -0000	1.11
  @@ -128,13 +128,13 @@
       border-left:      4px solid #e0e0e0;
       margin-left:      0px;
       padding-left:     30px;
  -    font-weight:      bold;
   }
   .ase ol.steps li {
       color:            #a0a0a0;
   }
   .ase ol.steps li.this {
       color:            #000000;
  +    font-weight:      bold;
   }
   
   /* Breadcrumb List */
  @@ .

From ossp-cvs-owner@ossp.org  Wed Mar 21 20:22:34 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 43DDE752928; Wed, 21 Mar 2007 20:22:34 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO
Message-Id: <20070321192234.43DDE752928@mail.ossp.org>
Date: Wed, 21 Mar 2007 20:22:34 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Mar-2007 20:22:34
  Branch: HEAD                             Handle: 2007032119223300

  Modified files:
    ossp-pkg/ase            TODO

  Log:
    remember issues

  Summary:
    Revision    Changes     Path
    1.22        +2  -0      ossp-pkg/ase/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 TODO
  --- ossp-pkg/ase/TODO	20 Mar 2007 20:39:18 -0000	1.21
  +++ ossp-pkg/ase/TODO	21 Mar 2007 19:22:33 -0000	1.22
  @@ -1,5 +1,7 @@
   
   TODO:
  +- make sure client has nickname and name available
  +- more precise login check by generating the WHERE clause
   - add profile editing support (especially to allow changing the nickname)
   - check URL fetching and its caching because of DBIx::Simple:
     http://cvs.ossp.org/filediff?f=ossp-pkg/ase/ase.cgi.util.pl&v1=1.15&v2=1.16
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar 22 12:09:01 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id D666F7529C6; Thu, 22 Mar 2007 12:09:01 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.enroll.pl
Message-Id: <20070322110901.D666F7529C6@mail.ossp.org>
Date: Thu, 22 Mar 2007 12:09:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Mar-2007 12:09:01
  Branch: HEAD                             Handle: 2007032211090100

  Modified files:
    ossp-pkg/ase            ase.cgi.enroll.pl

  Log:
    cleanup enrollment code

  Summary:
    Revision    Changes     Path
    1.26        +4  -6      ossp-pkg/ase/ase.cgi.enroll.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	21 Mar 2007 10:05:49 -0000	1.25
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	22 Mar 2007 11:09:01 -0000	1.26
  @@ -233,10 +233,9 @@
       my $dbi  = $self->param(-dbi);
   
       #   on-the-fly remove expired entries from database
  -    $dbi->query(
  -        "DELETE FROM ase_enrollment" .
  -        " WHERE en_expiry < ".$self->datetime().";"
  -    ) or die $dbi->error();
  +    $dbi->query(q{
  +        DELETE FROM ase_enrollment WHERE en_expiry < ?
  +    }, $self->datetime()) or die $dbi->error();
   
       #   make sure we are called correctly
       if (defined($cgi->param("button.cancel"))) {
  @@ -316,7 +315,7 @@
               SELECT * FROM ase_enrollment WHERE en_address = ?;
           }, $address)->hash());
           if (defined($rec)) {
  -            $self->logbook("address \"%s\" already in use for enrolling", $address);
  +            $self->logbook("address \"%s\" already in progress for enrolling", $address);
               $cgi->param('address.error', "Email address already in use for enrolling since " .
                   $self->datetime2str($rec->{'en_start'}) . " (new enrollments blocked for 8 hours)");
               $error = 1;
  @@ -547,7 +546,6 @@
           "<p/>\n" .
           "You have successfully registered with " . $cfg->{-cfg}->{"project-name"} . ".\n" .
           "You can now access your account by going to the Login screen.\n" .
  -        "Please login at least once now to finish activating your account.\n" .
           "<p/>\n" .
           "<a class=\"button\" href=\"".$self->url(-mode => "login")."\">" .
           "Go to <b>Login</b> screen" .
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar 22 12:09:38 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 63C9D7529C6; Thu, 22 Mar 2007 12:09:38 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ChangeLog ase.cgi.recover.pl ase.sql
Message-Id: <20070322110938.63C9D7529C6@mail.ossp.org>
Date: Thu, 22 Mar 2007 12:09:38 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Mar-2007 12:09:38
  Branch: HEAD                             Handle: 2007032211093700

  Modified files:
    ossp-pkg/ase            ChangeLog ase.cgi.recover.pl ase.sql

  Log:
    Add password recovery functionality (first cut, but already fully
    functional)

  Summary:
    Revision    Changes     Path
    1.6         +3  -0      ossp-pkg/ase/ChangeLog
    1.7         +527 -4     ossp-pkg/ase/ase.cgi.recover.pl
    1.9         +20 -0      ossp-pkg/ase/ase.sql
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ChangeLog
  --- ossp-pkg/ase/ChangeLog	20 Mar 2007 21:22:35 -0000	1.5
  +++ ossp-pkg/ase/ChangeLog	22 Mar 2007 11:09:37 -0000	1.6
  @@ -13,6 +13,9 @@
   
     Changes between 0.1.x and 0.2.0 (xx-Oct-2005 to 20-Mar-2007)
   
  +   o Add password recovery functionality.
  +     [Ralf S. Engelschall]
  +
      o Add resign functionality.
        [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.recover.pl
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ase.cgi.recover.pl
  --- ossp-pkg/ase/ase.cgi.recover.pl	21 Mar 2007 07:35:16 -0000	1.6
  +++ ossp-pkg/ase/ase.cgi.recover.pl	22 Mar 2007 11:09:37 -0000	1.7
  @@ -37,11 +37,534 @@
       my $html = $self->param(-html);
       my $dbi  = $self->param(-dbi);
   
  +    #   determine step
  +    my $step = $cgi->param("step") || ($cgi->param("uuid") ? "3" : "1");
  +
       #   generate the outer canvas
  -    $html .= "<div class=\"ase_boxed\">\n";
  -    $html .= "<span class=\"title\">Password Recovery</span>\n";
  -    $html .= "Sorry, Password Recovery still not implemented!";
  -    $html .= "</div>\n";
  +    sub canvas {
  +        my ($html, $step) = @_;
  +        $html .= "<div class=\"ase_boxed\">\n";
  +        $html .= "<span class=\"title\">Password Recovery</span>\n";
  +        $html .=
  +            "<ul class=\"breadcrumb\">\n" .
  +            "  <li><a href=\"".$self->url(-mode => "login")."\">Login &rarr;</a></li>\n" .
  +            "  <li>Password Recovery:</li>\n" .
  +            "</ul>\n";
  +        $html .= $cgi->start_form(
  +            -method => 'POST',
  +            -action => $self->url(),
  +            -class  => 'recovery',
  +        ) . "<div>\n";
  +        $html .= $cgi->hidden(
  +            -name     => 'mode',
  +            -default  => 'recovery',
  +            -override => 1
  +        ) . "\n";
  +        $html->fold("canvas");
  +        $html .= "</div>" . $cgi->end_form() . "\n";
  +        $html .= "</div>\n";
  +        $html >> "canvas";
  +        my $steps = [
  +            [ "1", "Specify Account Information" ],
  +            [ "2", "Confirm Account Ownership"   ],
  +            [ "3", "Recover Account Password"    ],
  +        ];
  +        $html .=
  +            "<ol class=\"steps\">\n";
  +        foreach my $s (@{$steps}) {
  +            $html .= "  <li" . ($s->[0] eq $step ? " class=\"this\"" : "") . ">" . $s->[1] . "</li>\n";
  +        }
  +        $html .=
  +            "</ol>\n";
  +    }
  +
  +    #   dispatch according to workflow step
  +    if ($step eq "1") {
  +        ##
  +        ##  STEP 1: REQUEST EMAIL ADDRESS TO IDENTIFY ACCOUNT
  +        ##
  +
  +        #   render outer canvas
  +        canvas($html, "1");
  +
  +        #   input form
  +        $html .=
  +            "In order to recover your Account, please specify " .
  +            "the unique Email address you have subscribed your Account " .
  +            "under in the past. Additionally, you have to " .
  +            "repeat the security code to confirm that you are human. " .
  +            "After pressing \"Recover\" you will receive a " .
  +            "verification Email under the specified address " .
  +            "containing a recovery URL. Once you clicked on this " .
  +            "URL, you will be able to recover your Account by setting a " .
  +            "new password.";
  +
  +        #   generate the inner canvas
  +        $html .=
  +            "<p/>\n" .
  +            "<table class=\"F\">\n" .
  +            "  <tr>\n" .
  +            "    <td class=\"L\"><span class=\"label\">Email Address:</span></td>\n" .
  +            "    <td class=\"I\">"; $html->fold("field-address"); $html .= "</td>\n" .
  +            "  </tr>\n" .
  +            "  <tr>\n" .
  +            "    <td class=\"L\"><span class=\"label\">Security Code:</span></td>\n" .
  +            "    <td class=\"I\">"; $html->fold("field-scode"); $html .= "</td>\n" .
  +            "  </tr>\n" .
  +            "  <tr>\n" .
  +            "    <td>&nbsp;</td>\n" .
  +            "    <td>"; $html->fold("button-recover"); $html .= "</td>\n" .
  +            "  </tr>\n" .
  +            "</table>\n";
  +
  +        #   generate the input field "address"
  +        $html >> "field-address";
  +        $html .= $cgi->textfield(
  +            -id        => 'field_address',
  +            -class     => 'field',
  +            -name      => 'address',
  +            -default   => '',
  +            -size      => 40,
  +            -maxlength => 80,
  +        ) . "<br/>";
  +        my $remote = $self->remotehostname();
  +        $html .= "<span class=\"annotation\">(<i>name</i>\@<i>domain</i>, e.g. \"foo\@$remote\")</span><br/>\n";
  +        if (defined(my $error = $cgi->param("address.error"))) {
  +            $html .= "<span class=\"error\">$error</span><br/>\n";
  +        }
  +        $html << 1;
  +
  +        #   generate the input field: "security code"
  +        $html >> "field-scode";
  +        my $scode_uuid = ($cgi->param("scode.uuid") || $self->scode_create());
  +        $html .= "<img align=top src=\"".$self->url(-mode => 'scode', -uuid => $scode_uuid)."\"> :\n";
  +        $html .= $cgi->hidden(
  +            -name     => 'scode.uuid',
  +            -value    => $scode_uuid,
  +            -override => 1
  +        ) . "\n";
  +        $html .= $cgi->textfield(
  +            -id        => 'field_scode',
  +            -class     => 'field',
  +            -name      => 'scode',
  +            -default   => '',
  +            -size      => 7,
  +            -maxlength => 6,
  +        ) . "<br/>";
  +        $html .= "<span class=\"annotation\">(repeat the shown 6 character security code)</span><br/>\n";
  +        if (defined(my $error = $cgi->param("scode.error"))) {
  +            $html .= "<span class=\"error\">$error</span><br/>\n";
  +        }
  +        $html << 1;
  +
  +        #   generate the buttons
  +        $html >> "button-recover";
  +        $html .= $cgi->submit(
  +            -class   => 'button',
  +            -id      => 'button_cancel',
  +            -name    => 'button.cancel',
  +            -value   => 'Cancel',
  +        );
  +        $html .= $cgi->submit(
  +            -class   => 'button',
  +            -id      => 'button_recover',
  +            -name    => 'button.recover',
  +            -value   => 'Recover',
  +        );
  +        $html .= $cgi->hidden(
  +            -name     => 'step',
  +            -default  => '2',
  +            -override => 1
  +        ) . "\n";
  +        $html << 1;
  +    }
  +    elsif ($step eq "2") {
  +        ##
  +        ##  STEP 2: SEND RECOVERY UUID TO ACCOUNT EMAIL ADDRESS
  +        ##
  +
  +        #   process workflow exist requests
  +        if ($cgi->param("button.cancel")) {
  +            return $self->redirect($cgi->url(-mode => "login"));
  +        }
  +        elsif (not defined($cgi->param("button.recover"))) {
  +            die "unable to determine action";
  +        }
  +
  +        #   on-the-fly remove expired entries from database
  +        $dbi->query(q{
  +            DELETE FROM ase_recovery WHERE re_expiry < ?
  +        }, $self->datetime()) or die $dbi->error();
  +
  +        #   determine form parameters
  +        my $address    = $cgi->param("address");
  +        my $scode_num  = $cgi->param("scode");
  +        my $scode_uuid = $cgi->param("scode.uuid");
  +
  +        #   verify form parameters
  +        my $error = 0;
  +        if ($address !~ m/^[^@]+\@(?:[^.]+\.)+[^.]+$/) {
  +            $self->logbook("invalid address: \"%s\"", $address);
  +            $cgi->param('address.error', 'Invalid Email address: not <i>name</i>@<i>domain</i>');
  +            $error = 1;
  +        }
  +        else {
  +            my $rec;
  +            ($rec = $dbi->query(q{
  +                SELECT * FROM ase_recovery WHERE re_address = ?;
  +            }, $address)->hash());
  +            if (defined($rec)) {
  +                $self->logbook("address \"%s\" already in progress for recovery", $address);
  +                $cgi->param('address.error', "Email address already in progress for recovery since " .
  +                    $self->datetime2str($rec->{'re_start'}) . " (new recovery blocked for 8 hours)");
  +                $error = 1;
  +            }
  +            ($rec = $dbi->query(q{
  +                SELECT * FROM ase_member WHERE me_address = ?;
  +            }, $address)->hash());
  +            if (not defined($rec)) {
  +                $self->logbook("address \"%s\" not registered to any account", $address);
  +                $cgi->param('address.error', "Email address not registered to any account");
  +                $error = 1;
  +            }
  +        }
  +        if (not $self->scode_verify($scode_uuid, $scode_num)) {
  +            $cgi->param('scode.error', 'Invalid Security Code');
  +            $error = 1;
  +        }
  +
  +        #   go back to form in case of error...
  +        if ($error) {
  +            $cgi->param("step", "1");
  +            return $self->forward("recovery");
  +        }
  +
  +        #   determine user information
  +        (my $me_uuid = $dbi->query(q{
  +            SELECT me_uuid FROM ase_member WHERE me_address = ?; 
  +        }, $address)->list()) or die $dbi->error();
  +
  +        #   generate recovery UUID code
  +        $self->use("OSSP::uuid");
  +        my $uuid = new OSSP::uuid;
  +        $uuid->make("v1");
  +        my $re_key = $uuid->export("str");
  +        undef $uuid;
  +
  +        #   create membership record in database
  +        my $now = time();
  +        my $t_start  = $self->datetime($now);
  +        my $t_expiry = $self->datetime($now+8*60*60);
  +        $dbi->query(q{
  +            INSERT INTO ase_recovery
  +            (re_uuid, re_address, re_key, re_start, re_expiry)
  +            VALUES (?, ?, ?, ?, ?);
  +        },  $me_uuid, $address, $re_key, $t_start, $t_expiry
  +        ) or die $dbi->error();
  +
  +        #   send recovery URL to Email address
  +        $self->use("Mail::Sendmail");
  +        my $url = $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "?mode=recovery;uuid=$re_key";
  +        my $mail =
  +            "You have requested password recovery on your registeration with\n" .
  +            $cfg->{-cfg}->{"project-name"} . ". You can recover your account\n" .
  +            "by visiting the following URL until ".$self->datetime2str($t_expiry)." UTC:\n" .
  +            "\n" .
  +            "$url\n" .
  +            "\n" .
  +            "-- \n" .
  +            $cfg->{-cfg}->{"service-name"} . "\n" .
  +            "" . $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "\n" .
  +            "\n";
  +        $Mail::Sendmail::mailcfg{"smtp"} = [qw(localhost mail)];
  +        Mail::Sendmail::sendmail(
  +            To      => $address,
  +            From    => $cfg->{-cfg}->{"service-name"} . " <" . $cfg->{-cfg}->{"service-sender"} . ">\n",
  +            Subject => $cfg->{-cfg}->{"project-name"} . ": account password recovery requested\n",
  +            Message => $mail,
  +        ) or die $Mail::Sendmail::error;
  +
  +        #   render outer canvas
  +        canvas($html, "2");
  +
  +        #   display hint
  +        $html .=
  +            "An Email was sent to you under &lt;<a href=\"mailto:$address\"><b>$address</b></a>&gt; containing\n" .
  +            "an URL. Please follow this URL for being directed to step 3\n" .
  +            "of this Recovery procedure, the Password Reset.\n";
  +
  +        #   log action
  +        (my $rec = $dbi->query(q{
  +            SELECT * FROM ase_member WHERE me_address = ?;
  +        }, $address)->hash());
  +        $self->logbook("recovery started for %s %s<%s>",
  +            $rec->{'me_name'},
  +            (defined $rec->{'me_nickname'} ? " (" . $rec->{'me_nickname'} . ")" : ""),
  +            $rec->{'me_address'});
  +    }
  +    elsif ($step eq "3") {
  +        ##
  +        ##  STEP 3: REQUEST NEW PASSWORD
  +        ##
  +
  +        #   render outer canvas
  +        canvas($html, "3");
  +
  +        #   determine UUID
  +        my $re_key = $cgi->param("uuid");
  +
  +        #   on-the-fly remove expired entries from database
  +        $dbi->query(q{
  +            DELETE FROM ase_recovery WHERE re_expiry < ?
  +        }, $self->datetime()) or die $dbi->error();
  +
  +        #   lookup recovery information in database
  +        my $rec = $dbi->query(q{
  +            SELECT me_uuid, me_name, me_nickname, me_address
  +            FROM   ase_recovery JOIN ase_member ON re_uuid = me_uuid
  +            WHERE  re_key = ?;
  +        }, $re_key)->hash();
  +        if (not defined($rec)) {
  +            $html .= "<h3 class=\"error\">ERROR: RECOVERY FAILED</h3>\n" .
  +                     "Sorry, no recovery information found under " .
  +                     "UUID $re_key. Either you waited too long for confirming " .
  +                     "(the recovery information already expired), or " .
  +                     "you already recovered your account or " .
  +                     "the URL you followed was incorrect. Please start " .
  +                     "from scratch!" .
  +                     "<p/>\n" .
  +                     "<a class=\"button\" href=\"".$self->url(-mode => "recovery")."\">" .
  +                     "Go to <b>Recovery</b> screen" .
  +                     "</a>\n";
  +            return;
  +        }
  +
  +        #   generate the inner canvas
  +        $html .=
  +            "<p/>\n" .
  +            "<table class=\"F\">\n" .
  +            "  <tr>\n" .
  +            "    <td class=\"L\"><span class=\"label\">Name:</span></td>\n" .
  +            "    <td class=\"I\">"; $html->fold("field-name"); $html .= "</td>\n" .
  +            "  </tr>\n" .
  +            "  <tr>\n" .
  +            "    <td class=\"L\"><span class=\"label\">Nickname:</span></td>\n" .
  +            "    <td class=\"I\">"; $html->fold("field-nickname"); $html .= "</td>\n" .
  +            "  </tr>\n" .
  +            "  <tr>\n" .
  +            "    <td class=\"L\"><span class=\"label\">Email Address:</span></td>\n" .
  +            "    <td class=\"I\">"; $html->fold("field-address"); $html .= "</td>\n" .
  +            "  </tr>\n" .
  +            "  <tr>\n" .
  +            "    <td class=\"L\"><span class=\"label\">Password:</span></td>\n" .
  +            "    <td class=\"I\">"; $html->fold("field-password"); $html .= "</td>\n" .
  +            "  </tr>\n" .
  +            "  <tr>\n" .
  +            "    <td class=\"L\"><span class=\"label\">Security Code:</span></td>\n" .
  +            "    <td class=\"I\">"; $html->fold("field-scode"); $html .= "</td>\n" .
  +            "  </tr>\n" .
  +            "  <tr>\n" .
  +            "    <td>&nbsp;</td>\n" .
  +            "    <td>"; $html->fold("button-recover"); $html .= "</td>\n" .
  +            "  </tr>\n" .
  +            "</table>\n";
  +
  +        #   generate the information fields
  +        $html .= $cgi->hidden(
  +            -name     => 'me_uuid',
  +            -default  => $rec->{"me_uuid"},
  +            -override => 1
  +        ) . "\n";
  +        $html .= $cgi->hidden(
  +            -name     => 'uuid',
  +            -default  => $re_key,
  +            -override => 1
  +        ) . "\n";
  +        $html >> "field-name";
  +        $html .= $rec->{"me_name"};
  +        $html << 1;
  +        $html >> "field-nickname";
  +        $html .= $rec->{"me_nickname"};
  +        $html << 1;
  +        $html >> "field-address";
  +        $html .= $rec->{"me_address"};
  +        $html << 1;
  +
  +        #   generate the input field: "password"
  +        $html >> "field-password";
  +        $html .= $cgi->password_field(
  +            -id        => 'field_password',
  +            -class     => 'field',
  +            -name      => 'password',
  +            -default   => '',
  +            -size      => 22,
  +            -maxlength => 20,
  +        ) . "<br/>";
  +        my $pw = $self->makerandom(8, "A-Za-z0-9");
  +        $html .= "<span class=\"annotation\">(up to 20 characters, e.g. \"$pw\")</span><br/>\n";
  +        if (defined(my $error = $cgi->param("password.error"))) {
  +            $html .= "<span class=\"error\">$error</span><br/>\n";
  +        }
  +        $html .= $cgi->password_field(
  +            -id        => 'field_password_verify',
  +            -class     => 'field',
  +            -name      => 'password_verify',
  +            -default   => '',
  +            -size      => 22,
  +            -maxlength => 20,
  +        ) . "<br/>";
  +        $html .= "<span class=\"annotation\">(retype password here for verification)</span><br/>\n";
  +        if (defined(my $error = $cgi->param("password_verify.error"))) {
  +            $html .= "<span class=\"error\">$error</span><br/>\n";
  +        }
  +        $html << 1;
  +
  +        #   generate the input field: "security code"
  +        $html >> "field-scode";
  +        my $scode_uuid = ($cgi->param("scode.uuid") || $self->scode_create());
  +        $html .= "<img align=top src=\"".$self->url(-mode => 'scode', -uuid => $scode_uuid)."\"> :\n";
  +        $html .= $cgi->hidden(
  +            -name     => 'scode.uuid',
  +            -value    => $scode_uuid,
  +            -override => 1
  +        ) . "\n";
  +        $html .= $cgi->textfield(
  +            -id        => 'field_scode',
  +            -class     => 'field',
  +            -name      => 'scode',
  +            -default   => '',
  +            -size      => 7,
  +            -maxlength => 6,
  +        ) . "<br/>";
  +        $html .= "<span class=\"annotation\">(repeat the shown 6 character security code)</span><br/>\n";
  +        if (defined(my $error = $cgi->param("scode.error"))) {
  +            $html .= "<span class=\"error\">$error</span><br/>\n";
  +        }
  +        $html << 1;
  +
  +        #   generate the form buttons
  +        $html >> "button-recover";
  +        $html .= $cgi->submit(
  +            -class   => 'button',
  +            -id      => 'button_cancel',
  +            -name    => 'button.cancel',
  +            -value   => 'Cancel',
  +        );
  +        $html .= $cgi->submit(
  +            -class   => 'button',
  +            -id      => 'button_recover',
  +            -name    => 'button.recover',
  +            -value   => 'Recover',
  +        );
  +        $html .= $cgi->hidden(
  +            -name     => 'step',
  +            -default  => '4',
  +            -override => 1
  +        ) . "\n";
  +        $html << 1;
  +    }
  +    elsif ($step eq "4") {
  +        ##
  +        ##  STEP 4: SET NEW PASSWORD
  +        ##
  +
  +        #   process workflow exist requests
  +        if ($cgi->param("button.cancel")) {
  +            return $self->redirect($cgi->url(-mode => "login"));
  +        }
  +        elsif (not defined($cgi->param("button.recover"))) {
  +            die "unable to determine action";
  +        }
  +
  +        #   determine form parameters
  +        my $me_uuid         = $cgi->param("me_uuid");
  +        my $re_key          = $cgi->param("uuid");
  +        my $password        = $cgi->param("password");
  +        my $password_verify = $cgi->param("password_verify");
  +        my $scode_num       = $cgi->param("scode");
  +        my $scode_uuid      = $cgi->param("scode.uuid");
  +
  +        #   verify form parameters
  +        my $error = 0;
  +        (my $rec = $dbi->query(q{
  +            SELECT * FROM ase_member WHERE me_uuid = ?;
  +        }, $me_uuid)->hash());
  +        if (not defined($rec)) {
  +            $html .= "<h3 class=\"error\">ERROR: RECOVERY FAILED</h3>\n" .
  +                     "Sorry, no recovery information found under " .
  +                     "UUID $me_uuid. Please start from scratch!" .
  +                     "<p/>\n" .
  +                     "<a class=\"button\" href=\"".$self->url(-mode => "recovery")."\">" .
  +                     "Go to <b>Recovery</b> screen" .
  +                     "</a>\n";
  +            return;
  +        }
  +        if ($password !~ m/^.{6,}$/) {
  +            $self->logbook("invalid password: \"%s\"", $password);
  +            $cgi->param('password.error', 'Invalid Password: at least 6 characters required');
  +            $error = 1;
  +        }
  +        if ($password_verify ne $password) {
  +            $cgi->param('password_verify.error', 'Invalid Verification Password: does not match Password');
  +            $error = 1;
  +        }
  +        if (not $self->scode_verify($scode_uuid, $scode_num)) {
  +            $cgi->param('scode.error', 'Invalid Security Code');
  +            $error = 1;
  +        }
  +
  +        #   go back to form in case of error...
  +        if ($error) {
  +            $cgi->param("step", "3");
  +            return $self->forward("recovery");
  +        }
  +
  +        #   generate encrypted password variants
  +        my $pw = $self->makepasswords($password);
  +
  +        #   update membership record in database
  +        $dbi->query(q{
  +            UPDATE ase_member
  +            SET me_access_pw_sha1     = ?,
  +                me_access_pw_md5      = ?,
  +                me_access_pw_cryptmd5 = ?,
  +                me_access_pw_cryptdes = ?
  +            WHERE me_uuid = ?
  +        }, $pw->{-sha1}, $pw->{-md5}, $pw->{-cryptmd5}, $pw->{-cryptdes},
  +           $me_uuid
  +        ) or die $dbi->error();
  +
  +        #   delete recovery information
  +        $dbi->query(q{
  +            DELETE FROM ase_recovery WHERE re_key = ?;
  +        }, $re_key) or die $dbi->error();
  +
  +        #   render outer canvas
  +        canvas($html, "4");
  +
  +        #   generate final hint
  +        $html .=
  +            "Congratulations!\n" .
  +            "<p/>\n" .
  +            "You have successfully recovered your account<br/>\n" .
  +            "You can now access your account again with your new password.<br/>\n" .
  +            "You should be redirected to the Login screen in 10 seconds automatically.<br/>\n" .
  +            "<meta http-equiv=\"refresh\" content=\"10;url=" .
  +            $self->url(-mode => "login", -login => ($rec->{'me_nickname'} || $rec->{'me_address'})) .
  +            "\">\n" .
  +            "<p/>\n" .
  +            "<a class=\"button\" href=\"" . 
  +            $self->url(-mode => "login", -login => ($rec->{'me_nickname'} || $rec->{'me_address'})) .
  +            "\">" .
  +            "Go to <b>Login</b> screen" .
  +            "</a>\n";
  +
  +        #   log action
  +        $self->logbook("recovery finished for %s %s<%s>",
  +            $rec->{'me_name'},
  +            (defined $rec->{'me_nickname'} ? " (" . $rec->{'me_nickname'} . ")" : ""),
  +            $rec->{'me_address'});
  +    }
   
       return;
   }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.sql
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 ase.sql
  --- ossp-pkg/ase/ase.sql	20 Mar 2007 20:37:40 -0000	1.8
  +++ ossp-pkg/ase/ase.sql	22 Mar 2007 11:09:37 -0000	1.9
  @@ -73,6 +73,7 @@
                                  -- [xxxxxxxxxx]
   );
   
  +-- Member Enrollment Information
   CREATE TABLE ase_enrollment (
       en_uuid                    TEXT UNIQUE NOT NULL PRIMARY KEY, 
                                  -- Membership UUID
  @@ -106,6 +107,25 @@
                                  -- [20050225000000]
   );
   
  +-- Member Recovery Information
  +CREATE TABLE ase_recovery (
  +    re_uuid                    TEXT UNIQUE NOT NULL PRIMARY KEY, 
  +                               -- Membership UUID
  +                               -- [75468374-8721-11d9-bee4-0002a5489f14]
  +    re_address                 TEXT UNIQUE NOT NULL,
  +                               -- Email-Address
  +                               -- [rse@engelschall.com]
  +    re_key                     TEXT UNIQUE NOT NULL, 
  +                               -- Recovery Key UUID (generated)
  +                               -- [75468374-8721-11d9-bee4-0002a5489f15]
  +    re_start                   INTEGER NOT NULL,
  +                               -- Recovery Start (generated, YYYYMMDDHHMMSS)
  +                               -- [20050225000000]
  +    re_expiry                  INTEGER NOT NULL
  +                               -- Recovery Expiry (generated, YYYYMMDDHHMMSS)
  +                               -- [20050225000000]
  +);
  +
   --  Temporary User Interface Security Codes
   CREATE TABLE ase_scode (
       sc_uuid                    TEXT NOT NULL,
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar 22 12:10:11 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 4A6D97529C6; Thu, 22 Mar 2007 12:10:11 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO
Message-Id: <20070322111011.4A6D97529C6@mail.ossp.org>
Date: Thu, 22 Mar 2007 12:10:11 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Mar-2007 12:10:11
  Branch: HEAD                             Handle: 2007032211101100

  Modified files:
    ossp-pkg/ase            TODO

  Log:
    remember an interesting point

  Summary:
    Revision    Changes     Path
    1.23        +1  -0      ossp-pkg/ase/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 TODO
  --- ossp-pkg/ase/TODO	21 Mar 2007 19:22:33 -0000	1.22
  +++ ossp-pkg/ase/TODO	22 Mar 2007 11:10:11 -0000	1.23
  @@ -3,6 +3,7 @@
   - make sure client has nickname and name available
   - more precise login check by generating the WHERE clause
   - add profile editing support (especially to allow changing the nickname)
  +  and use this as the step 4 of the recovery procedure
   - check URL fetching and its caching because of DBIx::Simple:
     http://cvs.ossp.org/filediff?f=ossp-pkg/ase/ase.cgi.util.pl&v1=1.15&v2=1.16
     It could be that the "DBI::SQL_BLOB" is important!!! But DBIx::Simple
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar 22 14:30:22 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 4E9F4753073; Thu, 22 Mar 2007 14:30:22 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO
Message-Id: <20070322133022.4E9F4753073@mail.ossp.org>
Date: Thu, 22 Mar 2007 14:30:22 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Mar-2007 14:30:22
  Branch: HEAD                             Handle: 2007032213302100

  Modified files:
    ossp-pkg/ase            TODO

  Log:
    recovery is done

  Summary:
    Revision    Changes     Path
    1.24        +0  -1      ossp-pkg/ase/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 TODO
  --- ossp-pkg/ase/TODO	22 Mar 2007 11:10:11 -0000	1.23
  +++ ossp-pkg/ase/TODO	22 Mar 2007 13:30:21 -0000	1.24
  @@ -13,7 +13,6 @@
   - optionally support db versioning and upgrades
   - info RPC page
   - remove or disable dead code in ASE (profile)
  -- remove or finish missing code in ASE (recovery)
   
   CANDO:
   - package ASE as OpenPKG package
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar 22 14:39:49 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id C0E71752FBE; Thu, 22 Mar 2007 14:39:49 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi ase.cgi.login.pl ase.cgi.main.pl ase...
Message-Id: <20070322133949.C0E71752FBE@mail.ossp.org>
Date: Thu, 22 Mar 2007 14:39:49 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Mar-2007 14:39:49
  Branch: HEAD                             Handle: 2007032213394900

  Added files:
    ossp-pkg/ase            ase.cgi.menu.pl
  Modified files:
    ossp-pkg/ase            ase.cgi ase.cgi.login.pl ase.cgi.main.pl
                            ase.cgi.profile.pl

  Log:
    move shared menu code into own file and rename overview to profile

  Summary:
    Revision    Changes     Path
    1.18        +1  -0      ossp-pkg/ase/ase.cgi
    1.22        +1  -1      ossp-pkg/ase/ase.cgi.login.pl
    1.28        +2  -6      ossp-pkg/ase/ase.cgi.main.pl
    1.1         +65 -0      ossp-pkg/ase/ase.cgi.menu.pl
    1.13        +3  -40     ossp-pkg/ase/ase.cgi.profile.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 ase.cgi
  --- ossp-pkg/ase/ase.cgi	20 Mar 2007 21:22:35 -0000	1.17
  +++ ossp-pkg/ase/ase.cgi	22 Mar 2007 13:39:49 -0000	1.18
  @@ -90,6 +90,7 @@
   require "$dir/ase.cgi.recover.pl";      # application workflow: recovery
   require "$dir/ase.cgi.profile.pl";      # application workflow: profile
   require "$dir/ase.cgi.resign.pl";       # application workflow: resign
  +require "$dir/ase.cgi.menu.pl";         # application workflow: menu
   
   #   main procedure
   my $app = new OSSP::ase::server ($cfg);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	21 Mar 2007 10:02:32 -0000	1.21
  +++ ossp-pkg/ase/ase.cgi.login.pl	22 Mar 2007 13:39:49 -0000	1.22
  @@ -211,7 +211,7 @@
           return $self->redirect(sprintf($url, $session->id()));
       }
       else {
  -        return $self->forward("menu-overview");
  +        return $self->forward("menu-profile");
       }
   }
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	21 Mar 2007 07:35:16 -0000	1.27
  +++ ossp-pkg/ase/ase.cgi.main.pl	22 Mar 2007 13:39:49 -0000	1.28
  @@ -111,11 +111,7 @@
           'recovery'           => { -login => 0, -canvas => 1, -method => \&mode_recovery             },
   
           #   application modes
  -        'menu-overview'      => { -login => 1, -canvas => 1, -method => \&mode_menu_overview_screen },
  -        'menu-member'        => { -login => 1, -canvas => 1, -method => \&mode_menu_member_screen   },
  -        'menu-member-action' => { -login => 1, -canvas => 1, -method => \&mode_menu_member_action   },
  -        'menu-account'       => { -login => 1, -canvas => 1, -method => \&mode_menu_account_screen  },
  -        'menu-action'        => { -login => 1, -canvas => 1, -method => \&mode_menu_action_screen   },
  +        'menu-profile'       => { -login => 1, -canvas => 1, -method => \&mode_menu_profile         },
           'menu-logout'        => { -login => 1, -canvas => 1, -method => \&mode_menu_logout_screen   },
           'menu-resign'        => { -login => 1, -canvas => 1, -method => \&mode_menu_resign_screen   },
       };
  @@ -125,7 +121,7 @@
           $run_modes{$mode} = $modes->{$mode}->{-method};
       }
       $self->run_modes(%run_modes);
  -    $self->start_mode('menu-overview');
  +    $self->start_mode('menu-profile');
       $self->error_mode('error');
       $self->mode_param(\&current_mode);
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.menu.pl
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ase.cgi.menu.pl
  --- /dev/null	2007-03-22 14:33:00 +0100
  +++ ase.cgi.menu.pl	2007-03-22 14:39:49 +0100
  @@ -0,0 +1,65 @@
  +##
  +##  OSSP ase -- Affiliation Service Environment
  +##  Copyright (c) 2005-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2005-2007 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP ase, a service environment for managing
  +##  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  +##
  +##  This program is free software; you can redistribute it and/or modify
  +##  it under the terms of the GNU General Public License as published by
  +##  the Free Software Foundation; either version 2 of the License, or
  +##  (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this program; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  ase.cgi.menu.pl: shared menu code
  +##
  +
  +package OSSP::ase::server;
  +use base 'CGI::Application';
  +use strict;
  +use warnings;
  +
  +#   render navigation tab
  +sub menu_tab {
  +    my $self    = shift;
  +    my $mode    = shift;
  +    my $html    = $self->param(-html);
  +
  +    #   define the menu
  +    my $menu = [
  +        { -mode => "menu-profile",  -name => "Profile"  },
  +        { -mode => "menu-resign",   -name => "Resign"   },
  +        { -mode => "menu-logout",   -name => "Logout"   },
  +    ];
  +
  +    #   render the menu
  +    $html .=
  +        "<ul class=\"tabs\">\n" .
  +        "  <li class=\"padding\">&nbsp;</li>\n";
  +    foreach my $entry (@{$menu}) {
  +        $html .= "  ";
  +        $html .= ($entry->{-mode} eq $mode ? "<li class=\"active\">": "<li>");
  +        $html .= "<a href=\"".$self->url(-mode => $entry->{-mode})."\">".$entry->{-name}."</a>";
  +        $html .= "</li>\n";
  +    }
  +    $html .=
  +        "  <li class=\"padding\">&nbsp;</li>\n" .
  +        "</ul>\n";
  +    $html .= "<div class=\"tabsframe\">\n";
  +    $html->fold("foo");
  +    $html .= "</div>\n";
  +    $html >> "foo";
  +
  +    return;
  +}
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.profile.pl
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 ase.cgi.profile.pl
  --- ossp-pkg/ase/ase.cgi.profile.pl	20 Mar 2007 21:22:35 -0000	1.12
  +++ ossp-pkg/ase/ase.cgi.profile.pl	22 Mar 2007 13:39:49 -0000	1.13
  @@ -29,45 +29,8 @@
   use strict;
   use warnings;
   
  -#   render navigation tab
  -sub menu_tab {
  -    my $self    = shift;
  -    my $mode    = shift;
  -    my $html    = $self->param(-html);
  -
  -    #   define the menu
  -    my $menu = [
  -        { -mode => "menu-overview", -name => "Overview" },
  -        # { -mode => "menu-member",   -name => "Member"   }, FIXME
  -        # { -mode => "menu-account",  -name => "Account"  }, FIXME
  -        # { -mode => "menu-action",   -name => "Action"   }, FIXME
  -        { -mode => "menu-resign",   -name => "Resign"   },
  -        { -mode => "menu-logout",   -name => "Logout"   },
  -    ];
  -
  -    #   render the menu
  -    $html .=
  -        "<ul class=\"tabs\">\n" .
  -        "  <li class=\"padding\">&nbsp;</li>\n";
  -    foreach my $entry (@{$menu}) {
  -        $html .= "  ";
  -        $html .= ($entry->{-mode} eq $mode ? "<li class=\"active\">": "<li>");
  -        $html .= "<a href=\"".$self->url(-mode => $entry->{-mode})."\">".$entry->{-name}."</a>";
  -        $html .= "</li>\n";
  -    }
  -    $html .=
  -        "  <li class=\"padding\">&nbsp;</li>\n" .
  -        "</ul>\n";
  -    $html .= "<div class=\"tabsframe\">\n";
  -    $html->fold("foo");
  -    $html .= "</div>\n";
  -    $html >> "foo";
  -
  -    return;
  -}
  -
  -#   application run-time mode processing: "menu-overview"
  -sub mode_menu_overview_screen {
  +#   application run-time mode processing: "menu-profile"
  +sub mode_menu_profile {
       my $self    = shift;
       my $cgi     = $self->param(-cgi);
       my $dbi     = $self->param(-dbi);
  @@ -93,7 +56,7 @@
       $html >> "canvas";
   
       #   insert navigation tab
  -    $self->menu_tab("menu-overview");
  +    $self->menu_tab("menu-profile");
   
       #   take membership UUID from session
       my $me_uuid = $session->param("login");
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar 22 14:40:44 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 1A7CC752FBE; Thu, 22 Mar 2007 14:40:44 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.menu.pl
Message-Id: <20070322134044.1A7CC752FBE@mail.ossp.org>
Date: Thu, 22 Mar 2007 14:40:44 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Mar-2007 14:40:44
  Branch: HEAD                             Handle: 2007032213404300

  Modified files:
    ossp-pkg/ase            ase.cgi.menu.pl

  Log:
    fix syntax

  Summary:
    Revision    Changes     Path
    1.2         +2  -0      ossp-pkg/ase/ase.cgi.menu.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.menu.pl
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ase.cgi.menu.pl
  --- ossp-pkg/ase/ase.cgi.menu.pl	22 Mar 2007 13:39:49 -0000	1.1
  +++ ossp-pkg/ase/ase.cgi.menu.pl	22 Mar 2007 13:40:43 -0000	1.2
  @@ -63,3 +63,5 @@
       return;
   }
   
  +1;
  +
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar 22 14:55:19 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 84C41752FBE; Thu, 22 Mar 2007 14:55:19 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.profile.pl
Message-Id: <20070322135519.84C41752FBE@mail.ossp.org>
Date: Thu, 22 Mar 2007 14:55:19 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Mar-2007 14:55:19
  Branch: HEAD                             Handle: 2007032213551900

  Modified files:
    ossp-pkg/ase            ase.cgi.profile.pl

  Log:
    display more profile details from database

  Summary:
    Revision    Changes     Path
    1.14        +17 -11     ossp-pkg/ase/ase.cgi.profile.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.profile.pl
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 ase.cgi.profile.pl
  --- ossp-pkg/ase/ase.cgi.profile.pl	22 Mar 2007 13:39:49 -0000	1.13
  +++ ossp-pkg/ase/ase.cgi.profile.pl	22 Mar 2007 13:55:19 -0000	1.14
  @@ -66,31 +66,37 @@
           SELECT * FROM ase_member WHERE me_uuid = ?;
       }, $me_uuid)->hash()) or die "no member found under UUID $me_uuid";
   
  -    #   determine name of membership status
  +    #   determine name of membership status and type
       my $me_status = (qw(Enrolling Fellow Member Activist Director President))
           [$rec->{'me_membership_status'} || 0];
  +    my $me_type = ("Natural Person", "Juristic Person")
  +        [$rec->{'me_membership_type'} || 0];
   
       $html .=
           "<table class=\"F\">\n" .
           "  <tr>\n" .
  -        "    <td class=\"L\"><span class=\"label\">Status:</span></td>\n" .
  -        "    <td class=\"I\">". $me_status ."</td>\n" .
  +        "    <td class=\"L\"><span class=\"label\">Your Name:</span></td>\n" .
  +        "    <td class=\"I\">". $rec->{"me_name"} ."</td>\n" .
           "  </tr>\n" .
           "  <tr>\n" .
  -        "    <td class=\"L\"><span class=\"label\">UUID:</span></td>\n" .
  -        "    <td class=\"I\">". $me_uuid ."</td>\n" .
  +        "    <td class=\"L\"><span class=\"label\">Your Nickname:</span></td>\n" .
  +        "    <td class=\"I\">". (defined $rec->{"me_nickname"} ? $rec->{"me_nickname"} : "(none)") ."</td>\n" .
           "  </tr>\n" .
           "  <tr>\n" .
  -        "    <td class=\"L\"><span class=\"label\">Name:</span></td>\n" .
  -        "    <td class=\"I\">". $rec->{"me_name"} ."</td>\n" .
  +        "    <td class=\"L\"><span class=\"label\">Your Email Address:</span></td>\n" .
  +        "    <td class=\"I\">". $rec->{"me_address"} ."</td>\n" .
           "  </tr>\n" .
           "  <tr>\n" .
  -        "    <td class=\"L\"><span class=\"label\">Nickname:</span></td>\n" .
  -        "    <td class=\"I\">". (defined $rec->{"me_nickname"} ? $rec->{"me_nickname"} : "(none)") ."</td>\n" .
  +        "    <td class=\"L\"><span class=\"label\">Membership UUID:</span></td>\n" .
  +        "    <td class=\"I\">". $me_uuid ."</td>\n" .
           "  </tr>\n" .
           "  <tr>\n" .
  -        "    <td class=\"L\"><span class=\"label\">Email Address:</span></td>\n" .
  -        "    <td class=\"I\">". $rec->{"me_address"} ."</td>\n" .
  +        "    <td class=\"L\"><span class=\"label\">Membership Status:</span></td>\n" .
  +        "    <td class=\"I\">". $me_status ."</td>\n" .
  +        "  </tr>\n" .
  +        "  <tr>\n" .
  +        "    <td class=\"L\"><span class=\"label\">Membership Type:</span></td>\n" .
  +        "    <td class=\"I\">". $me_type ."</td>\n" .
           "  </tr>\n" .
           "  <tr>\n" .
           "    <td class=\"L\"><span class=\"label\">Membership Start:</span></td>\n" .
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar 22 15:44:02 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id F3B7B753076; Thu, 22 Mar 2007 15:44:01 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO ase.cgi.login.pl
Message-Id: <20070322144401.F3B7B753076@mail.ossp.org>
Date: Thu, 22 Mar 2007 15:44:01 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Mar-2007 15:44:01
  Branch: HEAD                             Handle: 2007032214440100

  Modified files:
    ossp-pkg/ase            TODO ase.cgi.login.pl

  Log:
    be more precise on login lookup by generating the SQL WHERE clause
    field according to login string content

  Summary:
    Revision    Changes     Path
    1.25        +0  -1      ossp-pkg/ase/TODO
    1.23        +28 -5      ossp-pkg/ase/ase.cgi.login.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 TODO
  --- ossp-pkg/ase/TODO	22 Mar 2007 13:30:21 -0000	1.24
  +++ ossp-pkg/ase/TODO	22 Mar 2007 14:44:01 -0000	1.25
  @@ -1,7 +1,6 @@
   
   TODO:
   - make sure client has nickname and name available
  -- more precise login check by generating the WHERE clause
   - add profile editing support (especially to allow changing the nickname)
     and use this as the step 4 of the recovery procedure
   - check URL fetching and its caching because of DBIx::Simple:
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	22 Mar 2007 13:39:49 -0000	1.22
  +++ ossp-pkg/ase/ase.cgi.login.pl	22 Mar 2007 14:44:01 -0000	1.23
  @@ -157,18 +157,41 @@
       my $password = $cgi->param("password");
   
       #   lookup member in database 
  +    $login =~ s/^\s+//s;
  +    $login =~ s/\s+$//s;
       if ($login eq '') {
           $cgi->param("login.error", "Empty login");
           return $self->forward("login");
       }
  -    my $rec = $dbi->query(q{
  -        SELECT * FROM ase_member
  -        WHERE me_uuid = ? OR me_nickname = ? OR me_address = ? OR me_name = ?;
  -    }, $login, $login, $login, $login)->hash();
  -    if (not defined($rec)) {
  +    my $field = "";
  +    if ($login =~ m/^.+\@.+$/) {
  +        $field = "me_address";
  +    }
  +    elsif ($login =~ m/^[\da-fA-F]{8}-
  +                        [\da-fA-F]{4}-
  +                        [\da-fA-F]{4}-
  +                        [\da-fA-F]{4}-
  +                        [\da-fA-F]{12}$/x) {
  +        $field = "me_uuid";
  +    }
  +    elsif ($login =~ m/^[a-z][a-z0-9]{3,}$/) {
  +        $field = "me_nickname";
  +    }
  +    else {
  +        $field = "me_name";
  +    }
  +    my @rec = $dbi->query(qq{
  +        SELECT * FROM ase_member WHERE $field = ?;
  +    }, $login)->hashes();
  +    if (@rec == 0) {
           $cgi->param("login.error", "Unknown login");
           return $self->forward("login");
       }
  +    elsif (@rec > 1) {
  +        $cgi->param("login.error", "Ambiguous login");
  +        return $self->forward("login");
  +    }
  +    my $rec = $rec[0];
   
       #   detect special case of administrator login
       my $admin_ok = 0;
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar 22 19:35:24 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 5C43F752FBE; Thu, 22 Mar 2007 19:35:24 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO
Message-Id: <20070322183524.5C43F752FBE@mail.ossp.org>
Date: Thu, 22 Mar 2007 19:35:24 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Mar-2007 19:35:24
  Branch: HEAD                             Handle: 2007032218352400

  Modified files:
    ossp-pkg/ase            TODO

  Log:
    flush the new todo points for now

  Summary:
    Revision    Changes     Path
    1.26        +49 -0      ossp-pkg/ase/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 TODO
  --- ossp-pkg/ase/TODO	22 Mar 2007 14:44:01 -0000	1.25
  +++ ossp-pkg/ase/TODO	22 Mar 2007 18:35:24 -0000	1.26
  @@ -1,5 +1,54 @@
   
   TODO:
  +- resign: request password again
  +- recovery/enroll: 1 hours retry time: before as current, after retry accepted
  +- tell people how long to wait (delta time)
  +- tell people in mail trhat old tranaction was retried and old is cancelled
  +
  +- cron: active (on every login), mail, inactive (after n months), mail, deleted
  +- repeated incorrect logins N fehlversuche in X minuten -> Y minuten gesperrt
  +  me_locked = time
  +  ase_login {
  +      UUID
  +      TIME
  +      STATUS OK, !OK
  +  }
  +
  +  if (disabled) {
  +      error;
  +      exit;
  +  }
  +  if (locked > now()) {
  +      error locked for wait locked - now() 
  +      exit;
  +  }
  +  if (password == ok) {
  +      INSERT ok
  +      ok;
  +  }
  +  else {
  +      INSERT ok
  +      introduder detection:
  +      SELECT COUNT(*) FROM ase_login
  +      WHERE uuid = ? AND status != 'ok' AND time > now()-1 0 AND
  +      time > COERCE(SELECT MAX(time) FROM ase_login WHERE uuid = ? AND status = 'ok' AND time > now()-10, 0)
  +      if (count > N) {
  +          locked = now() + Y minuten
  +      }
  +      exit;
  +  }
  +
  +  disabled = text
  +  locked   = text, expires
  +
  +  - Instant notiofication http://regeistry?notify=%s (%s UUID of account)
  +
  +- disabled accounts
  +- login: ok
  +         !ok: inactive, incorrect pw, admin-disabled, tmp-disabled-N-logins-incorrect
  +
  +- 
  +
   - make sure client has nickname and name available
   - add profile editing support (especially to allow changing the nickname)
     and use this as the step 4 of the recovery procedure
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar 22 19:36:24 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 4663D752FBE; Thu, 22 Mar 2007 19:36:24 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cfg
Message-Id: <20070322183624.4663D752FBE@mail.ossp.org>
Date: Thu, 22 Mar 2007 19:36:24 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Mar-2007 19:36:24
  Branch: HEAD                             Handle: 2007032218362400

  Modified files:
    ossp-pkg/ase            ase.cfg

  Log:
    fix ACL for my environment

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-pkg/ase/ase.cfg
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cfg
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ase.cfg
  --- ossp-pkg/ase/ase.cfg	20 Mar 2007 17:42:07 -0000	1.4
  +++ ossp-pkg/ase/ase.cfg	22 Mar 2007 18:36:24 -0000	1.5
  @@ -28,7 +28,7 @@
   service-name   "OSSP Affiliation Service Environment";
   service-sender "nobody@ossp.org";
   service-admin  "rse@engelschall.com";
  -fetch-url-acl  q{^https?:\/\/\S+\.engelschall\.com};
  +fetch-url-acl  q{^https?:\/\/(?:localhost|\S+\.engelschall\.com)};
   
   #project-name   "OpenPKG";
   #service-name   "OpenPKG Affiliation Service Environment";
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar 22 19:36:38 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B24907530BA; Thu, 22 Mar 2007 19:36:38 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.util.pl
Message-Id: <20070322183638.B24907530BA@mail.ossp.org>
Date: Thu, 22 Mar 2007 19:36:38 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Mar-2007 19:36:38
  Branch: HEAD                             Handle: 2007032218363800

  Modified files:
    ossp-pkg/ase            ase.cgi.util.pl

  Log:
    fix caching

  Summary:
    Revision    Changes     Path
    1.18        +2  -2      ossp-pkg/ase/ase.cgi.util.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.util.pl
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 ase.cgi.util.pl
  --- ossp-pkg/ase/ase.cgi.util.pl	20 Mar 2007 17:42:07 -0000	1.17
  +++ ossp-pkg/ase/ase.cgi.util.pl	22 Mar 2007 18:36:38 -0000	1.18
  @@ -61,9 +61,9 @@
       }
       else {
           #   retrieve
  -        (my $blob = $dbi->query(q{
  +        my $blob = $dbi->query(q{
               SELECT ca_value FROM ase_cache WHERE ca_id = ? AND ca_expire > ?;
  -        }, $key, time())->list()) or die $dbi->error();
  +        }, $key, time())->list();
           return undef if (not defined($blob));
           my $data = Storable::thaw($blob);
           return undef if (not defined($data) or not ref($data));
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar 22 19:37:39 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id F2425753076; Thu, 22 Mar 2007 19:37:38 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.pm
Message-Id: <20070322183738.F2425753076@mail.ossp.org>
Date: Thu, 22 Mar 2007 19:37:38 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Mar-2007 19:37:38
  Branch: HEAD                             Handle: 2007032218373800

  Modified files:
    ossp-pkg/ase            ase.pm

  Log:
    allow asymmetric setups where the internal and external HTTP requests
    have to be different

  Summary:
    Revision    Changes     Path
    1.15        +22 -12     ossp-pkg/ase/ase.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.pm
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 ase.pm
  --- ossp-pkg/ase/ase.pm	19 Mar 2007 20:13:30 -0000	1.14
  +++ ossp-pkg/ase/ase.pm	22 Mar 2007 18:37:38 -0000	1.15
  @@ -48,6 +48,8 @@
       client-address
       client-login-uuid
       client-login-name
  +    client-login-nick
  +    client-login-addr
   );
   
   #   textual markers for canvas
  @@ -112,15 +114,18 @@
       bless ($self, $class);
   
       #   fill object with attributes
  -    $self->{-server}   = ($args{-server}  || die "no OSSP ase server URL specified with \"-server\"");
  -    $self->{-cgi}      = ($args{-cgi}     || new CGI);
  -    $self->{-session}  = ($args{-session} || new CGI::Session);
  -    $self->{-mode}     = ($args{-mode}    || "mode");
  -    $self->{-valid}    = ($args{-valid}   || 0);
  -    $self->{-debug}    = ($args{-debug}   || undef);
  -    $self->{-response} = "";
  -    $self->{-error}    = "";
  -    $self->{-use}      = {};
  +    $self->{-server_int} = ($args{-server_int} || $args{-server} ||
  +                           die "no OSSP ase internal server URL specified with \"-server[_int]\"");
  +    $self->{-server_ext} = ($args{-server_ext} || $args{-server} ||
  +                           die "no OSSP ase external server URL specified with \"-server[_ext]\"");
  +    $self->{-cgi}        = ($args{-cgi}     || new CGI);
  +    $self->{-session}    = ($args{-session} || new CGI::Session);
  +    $self->{-mode}       = ($args{-mode}    || "mode");
  +    $self->{-valid}      = ($args{-valid}   || 0);
  +    $self->{-debug}      = ($args{-debug}   || undef);
  +    $self->{-response}   = "";
  +    $self->{-error}      = "";
  +    $self->{-use}        = {};
   
       #   optionally open debug logfile
       if (defined($self->{-debug})) {
  @@ -199,7 +204,7 @@
           my $url = sprintf(
               "%s?mode=rpc;method=%s;" .
               "return=%s;canvas=%s;canvas_mark_head=%s;canvas_mark_body=%s",
  -            $self->{-server}, $action,
  +            $self->{-server_ext}, $action,
               URI::Escape::uri_escape($return),
               URI::Escape::uri_escape($canvas),
               URI::Escape::uri_escape($canvas_mark->{"head"}),
  @@ -292,7 +297,7 @@
   
       #   query server for session information
       $self->_use("IO::Socket::INET");
  -    my $server = $self->{-server};
  +    my $server = $self->{-server_int};
       my ($host, $port, $path) = ($server =~ m|^http://([^:/]+)((?::\d+)?)(.*)$|) or die;
       $port ||= 80;
       $port =~ s|^:||;
  @@ -327,6 +332,7 @@
       if (not (    $attribute->{"session-valid"} eq "yes"
                and $attribute->{"client-login-uuid"} ne ""
                and $attribute->{"client-login-name"} ne ""
  +             and $attribute->{"client-login-addr"} ne ""
                and $expires > 0                           )) {
           $attribute->{"session-valid"}   = "no";
           $attribute->{"session-expires"} = time()+1;
  @@ -428,10 +434,14 @@
   
   =over 4
   
  -=item B<-server> (default: I<none>)
  +=item B<-server>, B<-server_int>, B<-server_ext> (default: I<none>)
   
   Mandatory URL of the B<OSSP ase> server CGI.
   Usually something like C<http://ase.example.com/ase.cgi>".
  +Option B<-server> sets both internal (communication
  +between ase.pm and server) and external URL (communication between
  +browser and server). In case the URLs have to be different
  +the options B<-server_int> and B<-server_ext> can be used.
   
   =item B<-cgi> (default: C<new CGI>)
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar 22 19:38:44 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id BF9F2752928; Thu, 22 Mar 2007 19:38:44 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.rpc.pl sample.cgi
Message-Id: <20070322183844.BF9F2752928@mail.ossp.org>
Date: Thu, 22 Mar 2007 19:38:44 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Mar-2007 19:38:44
  Branch: HEAD                             Handle: 2007032218384400

  Modified files:
    ossp-pkg/ase            ase.cgi.rpc.pl sample.cgi

  Log:
    adjust for my environment and correctly pass name and nickname to
    application via RPC

  Summary:
    Revision    Changes     Path
    1.13        +2  -1      ossp-pkg/ase/ase.cgi.rpc.pl
    1.14        +10 -8      ossp-pkg/ase/sample.cgi
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.rpc.pl
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 ase.cgi.rpc.pl
  --- ossp-pkg/ase/ase.cgi.rpc.pl	20 Mar 2007 20:37:40 -0000	1.12
  +++ ossp-pkg/ase/ase.cgi.rpc.pl	22 Mar 2007 18:38:44 -0000	1.13
  @@ -98,8 +98,9 @@
               }, $session->param("login"))->hash()) or die "no member found under UUID";
               $response->{"Client-Address"}    = $session->remote_addr()  || "0.0.0.0";
               $response->{"Client-Login-UUID"} = $session->param("login") || "unknown";
  -            $response->{"Client-Login-Name"} = $rec->{"me_address"}     || "unknown";
  +            $response->{"Client-Login-Name"} = $rec->{"me_name"}        || "unknown";
               $response->{"Client-Login-Nick"} = $rec->{"me_nickname"}    || "";
  +            $response->{"Client-Login-Addr"} = $rec->{"me_address"}     || "";
           }
   
           #   generate response
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/sample.cgi
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 sample.cgi
  --- ossp-pkg/ase/sample.cgi	20 Mar 2007 20:49:47 -0000	1.13
  +++ ossp-pkg/ase/sample.cgi	22 Mar 2007 18:38:44 -0000	1.14
  @@ -35,7 +35,7 @@
   use CGI;
   use CGI::Cookie;
   use CGI::Session;
  -use CGI::GuruMeditation;
  +use CGI::GuruMeditation (-name => "sample", -debug => 1);
   use IO::All;
   use String::Divert;
   #use OSSP::ase::client;                                 # production
  @@ -68,12 +68,13 @@
   
   #   establish ASE object
   my $ase = new OSSP::ase::client(
  -    -server  => "http://registry.openpkg.org/ase",
  -    -cgi     => $cgi,
  -    -session => $session,
  -    -mode    => "mode",
  -    -valid   => 60,
  -    -debug   => "sample.log",
  +    -server_ext => "http://localhost/ase/ase.cgi",
  +    -server_int => "http://localhost/ase/ase.cgi",
  +    -cgi        => $cgi,
  +    -session    => $session,
  +    -mode       => "mode",
  +    -valid      => 60,
  +    -debug      => "sample.log",
   ) or die "$!";
   
   #   ASE runtime handling
  @@ -104,9 +105,10 @@
       my $html = '';
       if ($ase->login()) {
           $html .= sprintf(
  -            "Logged in as &lt;<a href=\"%s\">%s</a>&gt; [<a href=\"%s\">Logout</a>]\n",
  +            "Logged in as <a href=\"%s\">%s &lt;%s&gt;</a> [<a href=\"%s\">Logout</a>]\n",
               $ase->url(-action => "info", -mode_during => "login", -mode_after => "page1"),
               $ase->attr("client-login-name"),
  +            $ase->attr("client-login-addr"),
               $ase->url(-action => "logout", -mode_during => "login", -mode_after => $mode)
           );
       }
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar 22 19:39:16 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id BBC87752928; Thu, 22 Mar 2007 19:39:16 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ .cvsignore
Message-Id: <20070322183916.BBC87752928@mail.ossp.org>
Date: Thu, 22 Mar 2007 19:39:16 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Mar-2007 19:39:16
  Branch: HEAD                             Handle: 2007032218391600

  Modified files:
    ossp-pkg/ase            .cvsignore

  Log:
    ignore run-time logfile of sample application

  Summary:
    Revision    Changes     Path
    1.4         +1  -0      ossp-pkg/ase/.cvsignore
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/.cvsignore
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 .cvsignore
  --- ossp-pkg/ase/.cvsignore	16 Nov 2005 13:13:24 -0000	1.3
  +++ ossp-pkg/ase/.cvsignore	22 Mar 2007 18:39:16 -0000	1.4
  @@ -2,3 +2,4 @@
   ase-*.tar.gz
   ase.db
   sample.db
  +sample.log
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar 22 19:41:09 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 87672752928; Thu, 22 Mar 2007 19:41:09 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ChangeLog TODO
Message-Id: <20070322184109.87672752928@mail.ossp.org>
Date: Thu, 22 Mar 2007 19:41:09 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Mar-2007 19:41:09
  Branch: HEAD                             Handle: 2007032218410900

  Modified files:
    ossp-pkg/ase            ChangeLog TODO

  Log:
    update to latest status quo

  Summary:
    Revision    Changes     Path
    1.7         +8  -0      ossp-pkg/ase/ChangeLog
    1.27        +0  -1      ossp-pkg/ase/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ChangeLog
  --- ossp-pkg/ase/ChangeLog	22 Mar 2007 11:09:37 -0000	1.6
  +++ ossp-pkg/ase/ChangeLog	22 Mar 2007 18:41:09 -0000	1.7
  @@ -13,6 +13,14 @@
   
     Changes between 0.1.x and 0.2.0 (xx-Oct-2005 to 20-Mar-2007)
   
  +   o Support asymmetric setups where internal (communication between
  +     ase.pm and server) and external (communication between browser and
  +     server) HTTP requests could be different.
  +     [Ralf S. Engelschall]
  +
  +   o The nickname and real name are now passed to the application.
  +     [Ralf S. Engelschall]
  +
      o Add password recovery functionality.
        [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 TODO
  --- ossp-pkg/ase/TODO	22 Mar 2007 18:35:24 -0000	1.26
  +++ ossp-pkg/ase/TODO	22 Mar 2007 18:41:09 -0000	1.27
  @@ -49,7 +49,6 @@
   
   - 
   
  -- make sure client has nickname and name available
   - add profile editing support (especially to allow changing the nickname)
     and use this as the step 4 of the recovery procedure
   - check URL fetching and its caching because of DBIx::Simple:
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar 22 19:50:29 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id D09EB752893; Thu, 22 Mar 2007 19:50:29 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.pm
Message-Id: <20070322185029.D09EB752893@mail.ossp.org>
Date: Thu, 22 Mar 2007 19:50:29 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Mar-2007 19:50:29
  Branch: HEAD                             Handle: 2007032218502900

  Modified files:
    ossp-pkg/ase            ase.pm

  Log:
    try to fix info dialog

  Summary:
    Revision    Changes     Path
    1.16        +1  -0      ossp-pkg/ase/ase.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.pm
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 ase.pm
  --- ossp-pkg/ase/ase.pm	22 Mar 2007 18:37:38 -0000	1.15
  +++ ossp-pkg/ase/ase.pm	22 Mar 2007 18:50:29 -0000	1.16
  @@ -203,6 +203,7 @@
           $self->_use("URI::Escape");
           my $url = sprintf(
               "%s?mode=rpc;method=%s;" .
  +            ($action eq "info" ? "sid=" . ($self->attr("session-id") || "none") . ";" : "") .
               "return=%s;canvas=%s;canvas_mark_head=%s;canvas_mark_body=%s",
               $self->{-server_ext}, $action,
               URI::Escape::uri_escape($return),
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar 22 20:13:05 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 88E487529C6; Thu, 22 Mar 2007 20:13:05 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.css
Message-Id: <20070322191305.88E487529C6@mail.ossp.org>
Date: Thu, 22 Mar 2007 20:13:05 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Mar-2007 20:13:05
  Branch: HEAD                             Handle: 2007032219130500

  Modified files:
    ossp-pkg/ase            ase.css

  Log:
    allow better embedding

  Summary:
    Revision    Changes     Path
    1.12        +3  -5      ossp-pkg/ase/ase.css
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.css
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 ase.css
  --- ossp-pkg/ase/ase.css	21 Mar 2007 10:05:49 -0000	1.11
  +++ ossp-pkg/ase/ase.css	22 Mar 2007 19:13:05 -0000	1.12
  @@ -104,9 +104,10 @@
   
   /* General: Boxes */
   .ase div.ase_boxed {
  +    background-color: #ffffff;
       border:           1px solid #cccccc;
       margin-top:       24px;
  -    padding:          24px 16px 16px 16px;
  +    padding:          34px 16px 16px 16px;
       position:         relative;
   }   
   .ase div.ase_boxed span.title {
  @@ -121,6 +122,7 @@
       top:              -18px;
       left:             16px;
       padding:          1px 4px 1px 4px;
  +    border:           1px solid #cccccc;
   }
   
   /* Step List */
  @@ -194,9 +196,7 @@
   .ase table.F tr {
   }
   .ase table.F td.L {
  -    background-color:   #ffffff;
       border-bottom:      1px solid #cccccc;
  -    /*-moz-border-radius: 10px 0 0 10px;*/
       padding:            4px 10px 4px 20px;
   }
   .ase table.F td.I {
  @@ -230,8 +230,6 @@
   }
   .ase ul.tabs li a {
       margin:             0px;
  -    /*-moz-border-radius: 8px 8px 0 0;*/
  -    /*border-radius:      8px 8px 0 0;*/
       border-top:         1px solid #cccccc;
       border-left:        1px solid #cccccc;
       border-right:       1px solid #666666;
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar 22 20:13:40 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 5D3B27529C6; Thu, 22 Mar 2007 20:13:40 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.rpc.pl ase.pm sample.cgi
Message-Id: <20070322191340.5D3B27529C6@mail.ossp.org>
Date: Thu, 22 Mar 2007 20:13:40 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Mar-2007 20:13:40
  Branch: HEAD                             Handle: 2007032219134000

  Modified files:
    ossp-pkg/ase            ase.cgi.rpc.pl ase.pm sample.cgi

  Log:
    provide profile dialog for application

  Summary:
    Revision    Changes     Path
    1.14        +2  -2      ossp-pkg/ase/ase.cgi.rpc.pl
    1.17        +3  -3      ossp-pkg/ase/ase.pm
    1.15        +1  -1      ossp-pkg/ase/sample.cgi
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.rpc.pl
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 ase.cgi.rpc.pl
  --- ossp-pkg/ase/ase.cgi.rpc.pl	22 Mar 2007 18:38:44 -0000	1.13
  +++ ossp-pkg/ase/ase.cgi.rpc.pl	22 Mar 2007 19:13:40 -0000	1.14
  @@ -39,7 +39,7 @@
   
       my $method = $cgi->param("method") || "login";
   
  -    if ($method eq "login" or $method eq "logout") {
  +    if ($method eq "login" or $method eq "logout" or $method eq "profile") {
           #   parameter sanity checking
           my $return_url       = $cgi->param("return");
           my $canvas_url       = $cgi->param("canvas")           || "";
  @@ -56,7 +56,7 @@
   
           if (   ($method eq "login"  and     $session->param("login"))
               or ($method eq "logout" and not $session->param("login"))) {
  -            #   already logged or logged out, so redirect back immediately
  +            #   already logged in or logged out, so redirect back immediately
               return $self->redirect(sprintf($return_url, $session->id()));
           }
           else {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.pm
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 ase.pm
  --- ossp-pkg/ase/ase.pm	22 Mar 2007 18:50:29 -0000	1.16
  +++ ossp-pkg/ase/ase.pm	22 Mar 2007 19:13:40 -0000	1.17
  @@ -166,7 +166,7 @@
       my ($self) = @_;
   
       my $action = $self->{-cgi}->url_param("ase-action") || "";
  -    return $action =~ m/^(login|logout|info|comeback)$/;
  +    return $action =~ m/^(login|logout|profile|info|comeback)$/;
   }
   
   #   run-time action handler
  @@ -178,7 +178,7 @@
           $self->{-session}->id(), $self->attr("session-id") || "none");
   
       my $action = $self->{-cgi}->url_param("ase-action") || "";
  -    if ($action =~ m/^(login|logout|info)$/) {
  +    if ($action =~ m/^(login|logout|profile|info)$/) {
           #
           #   request ASE actions
           #
  @@ -203,7 +203,7 @@
           $self->_use("URI::Escape");
           my $url = sprintf(
               "%s?mode=rpc;method=%s;" .
  -            ($action eq "info" ? "sid=" . ($self->attr("session-id") || "none") . ";" : "") .
  +            ($action =~ m/^(profile|info)$/ ? "sid=" . ($self->attr("session-id") || "none") . ";" : "") .
               "return=%s;canvas=%s;canvas_mark_head=%s;canvas_mark_body=%s",
               $self->{-server_ext}, $action,
               URI::Escape::uri_escape($return),
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/sample.cgi
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 sample.cgi
  --- ossp-pkg/ase/sample.cgi	22 Mar 2007 18:38:44 -0000	1.14
  +++ ossp-pkg/ase/sample.cgi	22 Mar 2007 19:13:40 -0000	1.15
  @@ -106,7 +106,7 @@
       if ($ase->login()) {
           $html .= sprintf(
               "Logged in as <a href=\"%s\">%s &lt;%s&gt;</a> [<a href=\"%s\">Logout</a>]\n",
  -            $ase->url(-action => "info", -mode_during => "login", -mode_after => "page1"),
  +            $ase->url(-action => "profile", -mode_during => "login", -mode_after => "page1"),
               $ase->attr("client-login-name"),
               $ase->attr("client-login-addr"),
               $ase->url(-action => "logout", -mode_during => "login", -mode_after => $mode)
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar 22 20:16:39 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 1E2E6752FBE; Thu, 22 Mar 2007 20:16:39 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ sample.cgi
Message-Id: <20070322191639.1E2E6752FBE@mail.ossp.org>
Date: Thu, 22 Mar 2007 20:16:39 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Mar-2007 20:16:39
  Branch: HEAD                             Handle: 2007032219163800

  Modified files:
    ossp-pkg/ase            sample.cgi

  Log:
    cleanup sample

  Summary:
    Revision    Changes     Path
    1.16        +5  -5      ossp-pkg/ase/sample.cgi
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/sample.cgi
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 sample.cgi
  --- ossp-pkg/ase/sample.cgi	22 Mar 2007 19:13:40 -0000	1.15
  +++ ossp-pkg/ase/sample.cgi	22 Mar 2007 19:16:38 -0000	1.16
  @@ -106,16 +106,16 @@
       if ($ase->login()) {
           $html .= sprintf(
               "Logged in as <a href=\"%s\">%s &lt;%s&gt;</a> [<a href=\"%s\">Logout</a>]\n",
  -            $ase->url(-action => "profile", -mode_during => "login", -mode_after => "page1"),
  +            $ase->url(-action => "profile", -mode_during => "ase", -mode_after => $mode),
               $ase->attr("client-login-name"),
               $ase->attr("client-login-addr"),
  -            $ase->url(-action => "logout", -mode_during => "login", -mode_after => $mode)
  +            $ase->url(-action => "logout", -mode_during => "ase", -mode_after => $mode)
           );
       }
       else {
           $html .= sprintf(
               "Not logged in [<a href=\"%s\">Login</a>]\n",
  -            $ase->url(-action => "login", -mode_during => "login", -mode_after => $mode)
  +            $ase->url(-action => "login", -mode_during => "ase", -mode_after => $mode)
           );
       }
       return $html;
  @@ -130,8 +130,8 @@
   $html .= "<hr/>\n";
   $html .= "<p/>\n";
   
  -if ($mode eq "login") {
  -    $html .= "<h2>Login</h1>\n";
  +if ($mode eq "ase") {
  +    $html .= "<h2>ASE</h1>\n";
       $html->divert("head");
       $html .= $ase->canvas(-part => "head");
       $html->undivert();
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar 22 20:30:25 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 07AA4753075; Thu, 22 Mar 2007 20:30:25 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.css
Message-Id: <20070322193025.07AA4753075@mail.ossp.org>
Date: Thu, 22 Mar 2007 20:30:25 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Mar-2007 20:30:24
  Branch: HEAD                             Handle: 2007032219302400

  Modified files:
    ossp-pkg/ase            ase.css

  Log:
    provide better buttons

  Summary:
    Revision    Changes     Path
    1.13        +18 -2      ossp-pkg/ase/ase.css
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.css
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 ase.css
  --- ossp-pkg/ase/ase.css	22 Mar 2007 19:13:05 -0000	1.12
  +++ ossp-pkg/ase/ase.css	22 Mar 2007 19:30:24 -0000	1.13
  @@ -45,15 +45,19 @@
       border-right:     1px solid #999999;
       border-bottom:    1px solid #666666;
       padding:          1px 8px 1px 8px;
  +    margin:           0px 1px 0px 1px;
   }
   .ase a.button_attention {
  -    color:            #ffffff;
  -    background:       #cc3333;
  +    font-weight:      bold;
  +    color:            #cc3333;
  +    background:       #f8f8f8;
  +    background-image: url('ase.img.bar16.png');
       border-top:       1px solid #f03333;
       border-left:      1px solid #f03333;
       border-right:     1px solid #990000;
       border-bottom:    1px solid #990000;
       padding:          1px 8px 1px 8px;
  +    margin:           0px 1px 0px 1px;
   }
   
   /* General: Annotations */
  @@ -175,6 +179,18 @@
       border-left:      1px solid #cccccc;
       border-right:     1px solid #999999;
       border-bottom:    1px solid #666666;
  +    margin:           0px 1px 0px 1px;
  +}
  +.ase input.button_attention {
  +    font-weight:      bold;
  +    color:            #cc3333;
  +    background:       #f8f8f8;
  +    background-image: url('ase.img.bar16.png');
  +    border-top:       1px solid #f0f0f0;
  +    border-left:      1px solid #cccccc;
  +    border-right:     1px solid #999999;
  +    border-bottom:    1px solid #666666;
  +    margin:           0px 1px 0px 1px;
   }
   
   /* Screen "Login" */
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar 22 20:48:36 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 757B275297E; Thu, 22 Mar 2007 20:48:33 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.enroll.pl
Message-Id: <20070322194835.757B275297E@mail.ossp.org>
Date: Thu, 22 Mar 2007 20:48:33 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Mar-2007 20:48:33
  Branch: HEAD                             Handle: 2007032219483200

  Modified files:
    ossp-pkg/ase            ase.cgi.enroll.pl

  Log:
    keep the login name after enrollment

  Summary:
    Revision    Changes     Path
    1.27        +1  -1      ossp-pkg/ase/ase.cgi.enroll.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	22 Mar 2007 11:09:01 -0000	1.26
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	22 Mar 2007 19:48:32 -0000	1.27
  @@ -547,7 +547,7 @@
           "You have successfully registered with " . $cfg->{-cfg}->{"project-name"} . ".\n" .
           "You can now access your account by going to the Login screen.\n" .
           "<p/>\n" .
  -        "<a class=\"button\" href=\"".$self->url(-mode => "login")."\">" .
  +        "<a class=\"button\" href=\"".$self->url(-mode => "login", -login => ($rec->{'me_nickname'} || $rec->{'me_address'})."\">" .
           "Go to <b>Login</b> screen" .
           "</a>\n";
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar 22 20:49:07 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 74F9275297E; Thu, 22 Mar 2007 20:49:07 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO ase.cgi.resign.pl
Message-Id: <20070322194907.74F9275297E@mail.ossp.org>
Date: Thu, 22 Mar 2007 20:49:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Mar-2007 20:49:07
  Branch: HEAD                             Handle: 2007032219490700

  Modified files:
    ossp-pkg/ase            TODO ase.cgi.resign.pl

  Log:
    reimplement account resign procedure by requesting password

  Summary:
    Revision    Changes     Path
    1.28        +0  -1      ossp-pkg/ase/TODO
    1.3         +113 -52    ossp-pkg/ase/ase.cgi.resign.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 TODO
  --- ossp-pkg/ase/TODO	22 Mar 2007 18:41:09 -0000	1.27
  +++ ossp-pkg/ase/TODO	22 Mar 2007 19:49:07 -0000	1.28
  @@ -1,6 +1,5 @@
   
   TODO:
  -- resign: request password again
   - recovery/enroll: 1 hours retry time: before as current, after retry accepted
   - tell people how long to wait (delta time)
   - tell people in mail trhat old tranaction was retried and old is cancelled
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.resign.pl
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ase.cgi.resign.pl
  --- ossp-pkg/ase/ase.cgi.resign.pl	21 Mar 2007 07:40:59 -0000	1.2
  +++ ossp-pkg/ase/ase.cgi.resign.pl	22 Mar 2007 19:49:07 -0000	1.3
  @@ -39,64 +39,130 @@
       my $dbi     = $self->param(-dbi);
   
       #   generate the outer canvas
  -    $html .= "<div class=\"ase_boxed\">\n";
  -    $html .= "<span class=\"title\">Main Menu</span>\n";
  -    $html .= $cgi->start_form(
  -        -method => 'POST',
  -        -action => $self->url(),
  -        -class  => 'menu',
  -    ) . "\n";
  -    $html .= $cgi->hidden(
  -        -name     => 'mode',
  -        -value    => 'menu-logout-action',
  -        -override => 1
  -    ) . "\n";
  -    $html->fold("canvas");
  -    $html .= $cgi->end_form() . "\n";
  -    $html .= "</div>\n";
  -    $html >> "canvas";
  +    sub canvas {
  +        my ($html) = @_;
  +        $html .= "<div class=\"ase_boxed\">\n";
  +        $html .= "<span class=\"title\">Main Menu</span>\n";
  +        $html .= $cgi->start_form(
  +            -method => 'POST',
  +            -action => $self->url(),
  +            -class  => 'menu',
  +        ) . "\n";
  +        $html .= $cgi->hidden(
  +            -name     => 'mode',
  +            -value    => 'menu-resign',
  +            -override => 1
  +        ) . "\n";
  +        $html->fold("canvas");
  +        $html .= $cgi->end_form() . "\n";
  +        $html .= "</div>\n";
  +        $html >> "canvas";
   
  -    #   insert navigation tab
  -    $self->menu_tab("menu-resign");
  +        #   insert navigation tab
  +        $self->menu_tab("menu-resign");
  +    }
   
       #   determine step
       my $step = $cgi->param("step") || "1";
   
       #   dispatch according to workflow step
       if ($step eq "1") {
  +        #   take membership UUID from session
  +        my $me_uuid = $session->param("login");
  +
  +        #   display canvas
  +        canvas($html);
  +
           #   initial hint
           $html .=
  -            "Here you can resign from " . $cfg->{-cfg}->{"service-name"} . ".<br/>\n" .
  -            "Your account will be deleted, your current browser session will\n" .
  -            "be destroyed and you will be redirected to the Login screen again.";
  -        $html .=
  -            "<p>\n" .
  -            "<div align=center><a class=\"button\" href=\"".$self->url(-mode => "menu-resign", -step => "2")."\">" .
  -            "<b>Resign!</b>" .
  -            "</a></div><p>\n";
  -    }
  -    elsif ($step eq "2") {
  -        #   extra confirmation
  -        $html .=
  -            "ATTENTION: You are intending to resign from " . $cfg->{-cfg}->{"service-name"} . ".<br/>\n" .
  -            "Once your confirmed, your account will be deleted, your current browser session will\n" .
  -            "be destroyed and you will be redirected to the Login screen again.";
  +            "In case you no longer wish to be affiliated with " . $cfg->{-cfg}->{"project-name"} . " you can " .
  +            "resign from " . $cfg->{-cfg}->{"service-name"} . ".\n" .
  +            "But please notice that this means your account will be deleted.\n" .
  +            "No resurrection is possible afterwards, but you can enroll from scratch, of course.\n" .
  +            "<p/>\n" .
  +            "To prevent highjackers from deleting your account on a still open " .
  +            "browser session, you have to explicitly confirm the account deletion " .
  +            "by entering your password. In case you no longer know your password," .
  +            "you can perform a password recovery first.\n";
  +
  +        #   generate the inner canvas
           $html .=
               "<p/>\n" .
  -            "<div align=center>" .
  -            "<a class=\"button\" href=\"".$self->url(-mode => "menu-resign")."\"><b>Cancel</b></a>" .
  -            "&nbsp;" .
  -            "<a class=\"button_attention\" href=\"".$self->url(-mode => "menu-resign", -step => "3")."\"><b>Confirm Resign!</b></a>" .
  -            "</div>\n";
  +            "<table class=\"F\">\n" .
  +            "  <tr>\n" .
  +            "    <td class=\"L\"><span class=\"label\">Password:</span></td>\n" .
  +            "    <td class=\"I\">"; $html->fold("field-password"); $html .= "</td>\n" .
  +            "    <td class=\"I\">"; $html->fold("button-resign"); $html .= "</td>\n" .
  +            "  </tr>\n" .
  +            "</table>\n";
  +
  +        #   generate the input field: "password"
  +        $html >> "field-password";
  +        $html .= $cgi->password_field(
  +            -id        => 'field_password',
  +            -class     => 'field',
  +            -name      => 'password',
  +            -default   => '',
  +            -size      => 22,
  +            -maxlength => 20,
  +        ) . "<br/>";
  +        if (defined(my $error = $cgi->param("password.error"))) {
  +            $html .= "<span class=\"error\">$error</span><br/>\n";
  +        }
  +        $html << 1;
  +
  +        #   generate the form buttons
  +        $html >> "button-resign";
  +        $html .= $cgi->submit(
  +            -class   => 'button_attention',
  +            -id      => 'button_resign',
  +            -name    => 'button.resign',
  +            -value   => 'Resign',
  +        );
  +        $html .= $cgi->hidden(
  +            -name     => 'step',
  +            -default  => '2',
  +            -override => 1
  +        ) . "\n";
  +        $html .= $cgi->hidden(
  +            -name     => 'me_uuid',
  +            -default  => $me_uuid,
  +            -override => 1
  +        ) . "\n";
  +        $html << 1;
  +
       }
  -    elsif ($step eq "3") {
  +    elsif ($step eq "2") {
  +        #   process workflow exist requests
  +        if (not defined($cgi->param("button.resign"))) {
  +            die "unable to determine action";
  +        }
  +
           #   take membership UUID from session
           my $me_uuid = $session->param("login");
   
  -        #   log action
  +        #   determine user information
           (my $rec = $dbi->query(q{
               SELECT * FROM ase_member WHERE me_uuid = ?; 
           }, $me_uuid)->hash()) or die $dbi->error();
  +
  +        #   take password from form
  +        my $password = $cgi->param("password");
  +
  +        #   verify password
  +        if ($password eq '') {
  +            $cgi->param("password.error", "Empty password");
  +            $cgi->param("step", "1");
  +            return $self->forward("menu-resign");
  +        }
  +        my $pw = $self->makepasswords($password);
  +        if ($pw->{-sha1} ne $rec->{'me_access_pw_sha1'}) {
  +            $cgi->param("password.error", "Incorrect Password");
  +            $cgi->param("step", "1");
  +            return $self->forward("menu-resign");
  +        }
  +
  +        #   log action
           $self->logbook("resign by %s %s<%s>", $rec->{'me_name'}, (defined $rec->{'me_nickname'} ? " (" . $rec->{'me_nickname'} . ")" : ""), $rec->{'me_address'}); 
   
           #   delete account
  @@ -107,21 +173,16 @@
           #   remove the session from the database
           $session->delete();
   
  +        #   display canvas
  +        canvas($html);
  +
           #   final hint
           $html .=
  -            "Thank you for having joined " . $cfg->{-cfg}->{"service-name"} . ".</br>\n" .
  +            "Thank you for having joined " . $cfg->{-cfg}->{"service-name"} . " in the past.<br/>\n" .
               "Your account was deleted, your session was terminated and you are now logged out.<br/>\n" .
  -            "Please join us again soon.";
  -
  -        #   redirect to Login screen
  -        $html .=
  -            "<p/>\n" .
  -            "You should be redirected to the Login screen in 10 seconds automatically.\n" .
  -            "<meta http-equiv=\"refresh\" content=\"10;url=".$self->url(-mode => "login")."\">\n" .
  -            "<p/>\n" .
  -            "<a class=\"button\" href=\"".$self->url(-mode => "login")."\">" .
  -            "Go to <b>Login</b> screen" .
  -            "</a>\n";
  +            "We would be happy to see you joining us again in the future.<br/>" .
  +            "You will be redirected to the Login screen in 10 seconds.\n" .
  +            "<meta http-equiv=\"refresh\" content=\"10;url=".$self->url(-mode => "login")."\">\n";
       }
       else {
           die "invalid step";
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar 22 20:49:37 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 9849675297E; Thu, 22 Mar 2007 20:49:37 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.enroll.pl
Message-Id: <20070322194937.9849675297E@mail.ossp.org>
Date: Thu, 22 Mar 2007 20:49:37 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Mar-2007 20:49:37
  Branch: HEAD                             Handle: 2007032219493700

  Modified files:
    ossp-pkg/ase            ase.cgi.enroll.pl

  Log:
    fix syntax

  Summary:
    Revision    Changes     Path
    1.28        +1  -1      ossp-pkg/ase/ase.cgi.enroll.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	22 Mar 2007 19:48:32 -0000	1.27
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	22 Mar 2007 19:49:37 -0000	1.28
  @@ -547,7 +547,7 @@
           "You have successfully registered with " . $cfg->{-cfg}->{"project-name"} . ".\n" .
           "You can now access your account by going to the Login screen.\n" .
           "<p/>\n" .
  -        "<a class=\"button\" href=\"".$self->url(-mode => "login", -login => ($rec->{'me_nickname'} || $rec->{'me_address'})."\">" .
  +        "<a class=\"button\" href=\"".$self->url(-mode => "login", -login => ($rec->{'me_nickname'} || $rec->{'me_address'}))."\">" .
           "Go to <b>Login</b> screen" .
           "</a>\n";
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar 22 21:43:37 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id CE3BE752928; Thu, 22 Mar 2007 21:43:37 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.resign.pl
Message-Id: <20070322204337.CE3BE752928@mail.ossp.org>
Date: Thu, 22 Mar 2007 21:43:37 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Mar-2007 21:43:37
  Branch: HEAD                             Handle: 2007032220433700

  Modified files:
    ossp-pkg/ase            ase.cgi.resign.pl

  Log:
    fix resign workflow

  Summary:
    Revision    Changes     Path
    1.4         +5  -5      ossp-pkg/ase/ase.cgi.resign.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.resign.pl
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ase.cgi.resign.pl
  --- ossp-pkg/ase/ase.cgi.resign.pl	22 Mar 2007 19:49:07 -0000	1.3
  +++ ossp-pkg/ase/ase.cgi.resign.pl	22 Mar 2007 20:43:37 -0000	1.4
  @@ -39,8 +39,8 @@
       my $dbi     = $self->param(-dbi);
   
       #   generate the outer canvas
  -    sub canvas {
  -        my ($html) = @_;
  +    my $canvas = sub {
  +        my ($self, $cgi, $html) = @_;
           $html .= "<div class=\"ase_boxed\">\n";
           $html .= "<span class=\"title\">Main Menu</span>\n";
           $html .= $cgi->start_form(
  @@ -60,7 +60,7 @@
   
           #   insert navigation tab
           $self->menu_tab("menu-resign");
  -    }
  +    };
   
       #   determine step
       my $step = $cgi->param("step") || "1";
  @@ -71,7 +71,7 @@
           my $me_uuid = $session->param("login");
   
           #   display canvas
  -        canvas($html);
  +        $canvas->($self, $cgi, $html);
   
           #   initial hint
           $html .=
  @@ -174,7 +174,7 @@
           $session->delete();
   
           #   display canvas
  -        canvas($html);
  +        $canvas->($self, $cgi, $html);
   
           #   final hint
           $html .=
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar 22 21:44:55 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 2B4B8752928; Thu, 22 Mar 2007 21:44:55 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.recover.pl
Message-Id: <20070322204455.2B4B8752928@mail.ossp.org>
Date: Thu, 22 Mar 2007 21:44:55 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Mar-2007 21:44:55
  Branch: HEAD                             Handle: 2007032220445500

  Modified files:
    ossp-pkg/ase            ase.cgi.recover.pl

  Log:
    fix recover workflow

  Summary:
    Revision    Changes     Path
    1.8         +31 -20     ossp-pkg/ase/ase.cgi.recover.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.recover.pl
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 ase.cgi.recover.pl
  --- ossp-pkg/ase/ase.cgi.recover.pl	22 Mar 2007 11:09:37 -0000	1.7
  +++ ossp-pkg/ase/ase.cgi.recover.pl	22 Mar 2007 20:44:55 -0000	1.8
  @@ -41,7 +41,7 @@
       my $step = $cgi->param("step") || ($cgi->param("uuid") ? "3" : "1");
   
       #   generate the outer canvas
  -    sub canvas {
  +    my $canvas = sub {
           my ($html, $step) = @_;
           $html .= "<div class=\"ase_boxed\">\n";
           $html .= "<span class=\"title\">Password Recovery</span>\n";
  @@ -76,7 +76,7 @@
           }
           $html .=
               "</ol>\n";
  -    }
  +    };
   
       #   dispatch according to workflow step
       if ($step eq "1") {
  @@ -85,7 +85,7 @@
           ##
   
           #   render outer canvas
  -        canvas($html, "1");
  +        $canvas->($html, "1");
   
           #   input form
           $html .=
  @@ -202,6 +202,7 @@
           my $scode_uuid = $cgi->param("scode.uuid");
   
           #   verify form parameters
  +        my $retried = 0;
           my $error = 0;
           if ($address !~ m/^[^@]+\@(?:[^.]+\.)+[^.]+$/) {
               $self->logbook("invalid address: \"%s\"", $address);
  @@ -211,15 +212,6 @@
           else {
               my $rec;
               ($rec = $dbi->query(q{
  -                SELECT * FROM ase_recovery WHERE re_address = ?;
  -            }, $address)->hash());
  -            if (defined($rec)) {
  -                $self->logbook("address \"%s\" already in progress for recovery", $address);
  -                $cgi->param('address.error', "Email address already in progress for recovery since " .
  -                    $self->datetime2str($rec->{'re_start'}) . " (new recovery blocked for 8 hours)");
  -                $error = 1;
  -            }
  -            ($rec = $dbi->query(q{
                   SELECT * FROM ase_member WHERE me_address = ?;
               }, $address)->hash());
               if (not defined($rec)) {
  @@ -227,6 +219,24 @@
                   $cgi->param('address.error', "Email address not registered to any account");
                   $error = 1;
               }
  +            else {
  +                ($rec = $dbi->query(q{
  +                    SELECT * FROM ase_recovery WHERE re_address = ?;
  +                }, $address)->hash());
  +                if (defined($rec)) {
  +                    my $penalty = $self->datetime2time($rec->{'re_penalty'});
  +                    if ($penalty > time()) {
  +                        $self->logbook("address \"%s\" already in progress for recovery", $address);
  +                        $cgi->param('address.error', "Email address already in progress for recovery since " .
  +                            $self->datetime2str($rec->{'re_start'}) .
  +                            " (new recovery blocked for " . $self->time2human($self->datetime2time($rec->{'re_penalty'}) - time()) . ")");
  +                        $error = 1;
  +                    }
  +                    else {
  +                        $retried = 1;
  +                    }
  +                }
  +            }
           }
           if (not $self->scode_verify($scode_uuid, $scode_num)) {
               $cgi->param('scode.error', 'Invalid Security Code');
  @@ -253,20 +263,21 @@
   
           #   create membership record in database
           my $now = time();
  -        my $t_start  = $self->datetime($now);
  -        my $t_expiry = $self->datetime($now+8*60*60);
  +        my $t_start   = $self->datetime($now);
  +        my $t_penalty = $self->datetime($now+1*60*60);
  +        my $t_expiry  = $self->datetime($now+8*60*60);
           $dbi->query(q{
               INSERT INTO ase_recovery
  -            (re_uuid, re_address, re_key, re_start, re_expiry)
  +            (re_uuid, re_address, re_key, re_start, re_penalty, re_expiry)
               VALUES (?, ?, ?, ?, ?);
  -        },  $me_uuid, $address, $re_key, $t_start, $t_expiry
  +        },  $me_uuid, $address, $re_key, $t_start, $t_penalty, $t_expiry
           ) or die $dbi->error();
   
           #   send recovery URL to Email address
           $self->use("Mail::Sendmail");
           my $url = $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "?mode=recovery;uuid=$re_key";
           my $mail =
  -            "You have requested password recovery on your registeration with\n" .
  +            "You have requested password recovery ". ($retried ? "again " : "") . "on your registeration with\n" .
               $cfg->{-cfg}->{"project-name"} . ". You can recover your account\n" .
               "by visiting the following URL until ".$self->datetime2str($t_expiry)." UTC:\n" .
               "\n" .
  @@ -285,7 +296,7 @@
           ) or die $Mail::Sendmail::error;
   
           #   render outer canvas
  -        canvas($html, "2");
  +        $canvas->($html, "2");
   
           #   display hint
           $html .=
  @@ -308,7 +319,7 @@
           ##
   
           #   render outer canvas
  -        canvas($html, "3");
  +        $canvas->($html, "3");
   
           #   determine UUID
           my $re_key = $cgi->param("uuid");
  @@ -540,7 +551,7 @@
           }, $re_key) or die $dbi->error();
   
           #   render outer canvas
  -        canvas($html, "4");
  +        $canvas->($html, "4");
   
           #   generate final hint
           $html .=
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar 22 21:47:21 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 0BBAD75297E; Thu, 22 Mar 2007 21:47:21 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.enroll.pl
Message-Id: <20070322204721.0BBAD75297E@mail.ossp.org>
Date: Thu, 22 Mar 2007 21:47:21 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Mar-2007 21:47:21
  Branch: HEAD                             Handle: 2007032220472000

  Modified files:
    ossp-pkg/ase            ase.cgi.enroll.pl

  Log:
    fix login passing

  Summary:
    Revision    Changes     Path
    1.29        +1  -1      ossp-pkg/ase/ase.cgi.enroll.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	22 Mar 2007 19:49:37 -0000	1.28
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	22 Mar 2007 20:47:20 -0000	1.29
  @@ -547,7 +547,7 @@
           "You have successfully registered with " . $cfg->{-cfg}->{"project-name"} . ".\n" .
           "You can now access your account by going to the Login screen.\n" .
           "<p/>\n" .
  -        "<a class=\"button\" href=\"".$self->url(-mode => "login", -login => ($rec->{'me_nickname'} || $rec->{'me_address'}))."\">" .
  +        "<a class=\"button\" href=\"".$self->url(-mode => "login", -login => ($rec->{'en_nickname'} || $rec->{'en_address'}))."\">" .
           "Go to <b>Login</b> screen" .
           "</a>\n";
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar 22 23:21:07 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 96072753075; Thu, 22 Mar 2007 23:21:07 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO ase.cgi ase.cgi.enroll.pl ase.cgi.recov...
Message-Id: <20070322222107.96072753075@mail.ossp.org>
Date: Thu, 22 Mar 2007 23:21:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Mar-2007 23:21:07
  Branch: HEAD                             Handle: 2007032222210700

  Modified files:
    ossp-pkg/ase            TODO ase.cgi ase.cgi.enroll.pl ase.cgi.recover.pl
                            ase.cgi.util.pl ase.sql

  Log:
    support a penalty time during recovery instead of requiring the client
    to wait until the recovery is expired

  Summary:
    Revision    Changes     Path
    1.29        +0  -4      ossp-pkg/ase/TODO
    1.19        +1  -0      ossp-pkg/ase/ase.cgi
    1.30        +1  -1      ossp-pkg/ase/ase.cgi.enroll.pl
    1.9         +11 -7      ossp-pkg/ase/ase.cgi.recover.pl
    1.19        +34 -2      ossp-pkg/ase/ase.cgi.util.pl
    1.10        +6  -3      ossp-pkg/ase/ase.sql
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 TODO
  --- ossp-pkg/ase/TODO	22 Mar 2007 19:49:07 -0000	1.28
  +++ ossp-pkg/ase/TODO	22 Mar 2007 22:21:07 -0000	1.29
  @@ -1,9 +1,5 @@
   
   TODO:
  -- recovery/enroll: 1 hours retry time: before as current, after retry accepted
  -- tell people how long to wait (delta time)
  -- tell people in mail trhat old tranaction was retried and old is cancelled
  -
   - cron: active (on every login), mail, inactive (after n months), mail, deleted
   - repeated incorrect logins N fehlversuche in X minuten -> Y minuten gesperrt
     me_locked = time
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 ase.cgi
  --- ossp-pkg/ase/ase.cgi	22 Mar 2007 13:39:49 -0000	1.18
  +++ ossp-pkg/ase/ase.cgi	22 Mar 2007 22:21:07 -0000	1.19
  @@ -76,6 +76,7 @@
   autouse(qw(URI::Escape));               # from OpenPKG "perl-www"
   autouse(qw(LWP::UserAgent));            # from OpenPKG "perl-www"
   autouse(qw(CGI::FormBuilder));          # from OpenPKG "perl-www"
  +autouse(qw(Date::Parse));               # from OpenPKG "perl-time"
   
   #   application parts
   my $dir = $cfg->{-path_libdir};
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	22 Mar 2007 20:47:20 -0000	1.29
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	22 Mar 2007 22:21:07 -0000	1.30
  @@ -235,7 +235,7 @@
       #   on-the-fly remove expired entries from database
       $dbi->query(q{
           DELETE FROM ase_enrollment WHERE en_expiry < ?
  -    }, $self->datetime()) or die $dbi->error();
  +    }, $self->datetime(time())) or die $dbi->error();
   
       #   make sure we are called correctly
       if (defined($cgi->param("button.cancel"))) {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.recover.pl
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 ase.cgi.recover.pl
  --- ossp-pkg/ase/ase.cgi.recover.pl	22 Mar 2007 20:44:55 -0000	1.8
  +++ ossp-pkg/ase/ase.cgi.recover.pl	22 Mar 2007 22:21:07 -0000	1.9
  @@ -194,7 +194,7 @@
           #   on-the-fly remove expired entries from database
           $dbi->query(q{
               DELETE FROM ase_recovery WHERE re_expiry < ?
  -        }, $self->datetime()) or die $dbi->error();
  +        }, $self->datetime(time())) or die $dbi->error();
   
           #   determine form parameters
           my $address    = $cgi->param("address");
  @@ -221,15 +221,19 @@
               }
               else {
                   ($rec = $dbi->query(q{
  -                    SELECT * FROM ase_recovery WHERE re_address = ?;
  +                    SELECT *, MAX(re_start) FROM ase_recovery WHERE re_address = ?;
                   }, $address)->hash());
                   if (defined($rec)) {
                       my $penalty = $self->datetime2time($rec->{'re_penalty'});
  -                    if ($penalty > time()) {
  +                    if (time() < $penalty) {
                           $self->logbook("address \"%s\" already in progress for recovery", $address);
                           $cgi->param('address.error', "Email address already in progress for recovery since " .
                               $self->datetime2str($rec->{'re_start'}) .
  -                            " (new recovery blocked for " . $self->time2human($self->datetime2time($rec->{'re_penalty'}) - time()) . ")");
  +                            "<br/>" .
  +                            "(new recovery still blocked for " . 
  +                            $self->time2human($self->datetime2time($rec->{'re_penalty'}) - time()) .
  +                            ")"
  +                        );
                           $error = 1;
                       }
                       else {
  @@ -264,12 +268,12 @@
           #   create membership record in database
           my $now = time();
           my $t_start   = $self->datetime($now);
  -        my $t_penalty = $self->datetime($now+1*60*60);
  -        my $t_expiry  = $self->datetime($now+8*60*60);
  +        my $t_penalty = $self->datetime($now + 1*60*60);
  +        my $t_expiry  = $self->datetime($now + 8*60*60);
           $dbi->query(q{
               INSERT INTO ase_recovery
               (re_uuid, re_address, re_key, re_start, re_penalty, re_expiry)
  -            VALUES (?, ?, ?, ?, ?);
  +            VALUES (?, ?, ?, ?, ?, ?);
           },  $me_uuid, $address, $re_key, $t_start, $t_penalty, $t_expiry
           ) or die $dbi->error();
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.util.pl
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 ase.cgi.util.pl
  --- ossp-pkg/ase/ase.cgi.util.pl	22 Mar 2007 18:36:38 -0000	1.18
  +++ ossp-pkg/ase/ase.cgi.util.pl	22 Mar 2007 22:21:07 -0000	1.19
  @@ -246,7 +246,7 @@
   }
   
   #   helper function for current time in YYYYMMDDHHMMSS format
  -sub datetime {
  +sub datetime ($;$) {
       my ($self, $t) = @_;
       $t = time() if (not defined($t));
       my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday) = gmtime($t);
  @@ -262,6 +262,38 @@
       return $t;
   }
   
  +#   helper function for YYYYMMDDHHMMSS to time_t conversion
  +sub datetime2time {
  +    my ($self, $t) = @_;
  +    $self->use("Date::Parse");
  +    $t = Date::Parse::str2time($self->datetime2str($t) . " +0000", 0);
  +    return $t;
  +}
  +
  +#   helper function for converting time_t seconds to human representation
  +sub time2human {
  +    my ($self, $t) = @_;
  +    my $h = "";
  +    my $render = sub ($$$) {
  +        my ($h, $n, $unit) = @_;
  +        if ($n > 0) {
  +            $$h .= ", " if ($$h ne '');
  +            $$h .= sprintf("%d %s%s", $n, $unit, $n > 1 ? "s" : "");
  +        }
  +    };
  +    my $S = $t % 60; $t /= 60;
  +    my $M = $t % 60; $t /= 60;
  +    my $H = $t % 24; $t /= 24;
  +    my $D = $t % 7;  $t /= 7;
  +    my $W = int($t);
  +    $render->(\$h, $W, "week");
  +    $render->(\$h, $D, "day");
  +    $render->(\$h, $H, "hour");
  +    $render->(\$h, $M, "minute");
  +    $render->(\$h, $S, "second");
  +    return $h;
  +}
  +
   #   helper function for writing a logbook entry
   sub logbook ($$;@) {
       my ($self, $fmt, @args) = @_;
  @@ -269,7 +301,7 @@
       my $session = $self->param(-session);
       
       my $uuid = ($session->param("login") || undef);
  -    my $date = $self->datetime();
  +    my $date = $self->datetime(time());
       my $text = (defined($args[0]) ? sprintf($fmt, @args) : $fmt);
   
       $dbi->query(q{
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.sql
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 ase.sql
  --- ossp-pkg/ase/ase.sql	22 Mar 2007 11:09:37 -0000	1.9
  +++ ossp-pkg/ase/ase.sql	22 Mar 2007 22:21:07 -0000	1.10
  @@ -109,18 +109,21 @@
   
   -- Member Recovery Information
   CREATE TABLE ase_recovery (
  -    re_uuid                    TEXT UNIQUE NOT NULL PRIMARY KEY, 
  +    re_uuid                    TEXT NOT NULL, 
                                  -- Membership UUID
                                  -- [75468374-8721-11d9-bee4-0002a5489f14]
  -    re_address                 TEXT UNIQUE NOT NULL,
  +    re_address                 TEXT NOT NULL,
                                  -- Email-Address
                                  -- [rse@engelschall.com]
  -    re_key                     TEXT UNIQUE NOT NULL, 
  +    re_key                     TEXT NOT NULL, 
                                  -- Recovery Key UUID (generated)
                                  -- [75468374-8721-11d9-bee4-0002a5489f15]
       re_start                   INTEGER NOT NULL,
                                  -- Recovery Start (generated, YYYYMMDDHHMMSS)
                                  -- [20050225000000]
  +    re_penalty                 INTEGER NOT NULL,
  +                               -- Recovery Penalty (generated, YYYYMMDDHHMMSS)
  +                               -- [20050225000000]
       re_expiry                  INTEGER NOT NULL
                                  -- Recovery Expiry (generated, YYYYMMDDHHMMSS)
                                  -- [20050225000000]
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar 22 23:35:26 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B3919753071; Thu, 22 Mar 2007 23:35:26 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.enroll.pl ase.sql
Message-Id: <20070322223526.B3919753071@mail.ossp.org>
Date: Thu, 22 Mar 2007 23:35:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Mar-2007 23:35:26
  Branch: HEAD                             Handle: 2007032222352600

  Modified files:
    ossp-pkg/ase            ase.cgi.enroll.pl ase.sql

  Log:
    add penalty support also to enrollments and allow parallel enrollments

  Summary:
    Revision    Changes     Path
    1.31        +41 -39     ossp-pkg/ase/ase.cgi.enroll.pl
    1.11        +5  -2      ossp-pkg/ase/ase.sql
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	22 Mar 2007 22:21:07 -0000	1.30
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	22 Mar 2007 22:35:26 -0000	1.31
  @@ -70,7 +70,7 @@
       #   generate description
       $html .=
           "<p/>\n" .
  -        "Enroll here and join " . $cfg->{-cfg}->{"project-name"} . "\n" .
  +        "Enroll here and join " . $cfg->{-cfg}->{"project-name"} . ".\n" .
           "For successfully enrolling you have to specify at least your\n" .
           "real name, a unique nick name, your Email address and a password.\n" .
           "Additionally, you have to\n" .
  @@ -285,47 +285,48 @@
           $error = 1;
       }
   
  -    #   make sure the Nickname is still not used
  -    if ($nickname ne '' && not defined($cgi->param('nickname.error'))) {
  +    #   make sure the Email address is still not used
  +    if (not defined($cgi->param('address.error'))) {
           my $rec;
           ($rec = $dbi->query(q{
  -            SELECT * FROM ase_enrollment WHERE en_nickname = ?;
  -        }, $nickname)->hash());
  -        if (defined($rec)) {
  -            $self->logbook("nickname \"%s\" already in use for enrolling", $nickname);
  -            $cgi->param('nickname.error', "nickname already in use for enrolling since " .
  -                $self->datetime2str($rec->{'en_start'}) . " (new enrollments blocked for 8 hours)");
  -            $error = 1;
  -        }
  -        ($rec = $dbi->query(q{
  -            SELECT * FROM ase_member WHERE me_nickname = ?;
  -        }, $nickname)->hash());
  +            SELECT * FROM ase_member WHERE me_address = ?;
  +        }, $address)->hash());
           if (defined($rec)) {
  -            $self->logbook("nickname \"%s\" already in use", $address);
  -            $cgi->param('nickname.error', "nickname already in use since " .
  +            $self->logbook("address \"%s\" already in use", $address);
  +            $cgi->param('address.error', "Email address already in use since " .
                   $self->datetime2str($rec->{'me_membership_start'}) . " (enrollment already successful)");
               $error = 1;
           }
  +        else {
  +            ($rec = $dbi->query(q{
  +                SELECT *, MAX(en_start) FROM ase_enrollment WHERE en_address = ?;
  +            }, $address)->hash());
  +            if (defined($rec)) {
  +                my $penalty = $self->datetime2time($rec->{'en_penalty'});
  +                if (time() < $penalty) {
  +                    $self->logbook("address \"%s\" already in progress for enrolling", $address);
  +                    $cgi->param('address.error',
  +                        "Email address already in use for enrolling since " .
  +                        "<br/>" .
  +                        "(new enrollment still blocked for " . 
  +                        $self->time2human($self->datetime2time($rec->{'en_penalty'}) - time()) .
  +                        ")"
  +                    );
  +                    $error = 1;
  +                }
  +            }
  +        }
       }
   
  -    #   make sure the Email address is still not used
  -    if (not defined($cgi->param('address.error'))) {
  +    #   make sure the Nickname is still not used
  +    if ($nickname ne '' && not defined($cgi->param('nickname.error'))) {
           my $rec;
           ($rec = $dbi->query(q{
  -            SELECT * FROM ase_enrollment WHERE en_address = ?;
  -        }, $address)->hash());
  -        if (defined($rec)) {
  -            $self->logbook("address \"%s\" already in progress for enrolling", $address);
  -            $cgi->param('address.error', "Email address already in use for enrolling since " .
  -                $self->datetime2str($rec->{'en_start'}) . " (new enrollments blocked for 8 hours)");
  -            $error = 1;
  -        }
  -        ($rec = $dbi->query(q{
  -            SELECT * FROM ase_member WHERE me_address = ?;
  -        }, $address)->hash());
  +            SELECT * FROM ase_member WHERE me_nickname = ?;
  +        }, $nickname)->hash());
           if (defined($rec)) {
  -            $self->logbook("address \"%s\" already in use", $address);
  -            $cgi->param('address.error', "Email address already in use since " .
  +            $self->logbook("nickname \"%s\" already in use", $address);
  +            $cgi->param('nickname.error', "nickname already in use since " .
                   $self->datetime2str($rec->{'me_membership_start'}) . " (enrollment already successful)");
               $error = 1;
           }
  @@ -380,17 +381,18 @@
   
       #   create membership record in database
       my $now = time();
  -    my $t_start  = $self->datetime($now);
  -    my $t_expiry = $self->datetime($now+8*60*60);
  +    my $t_start   = $self->datetime($now);
  +    my $t_penalty = $self->datetime($now + 1*60*60);
  +    my $t_expiry  = $self->datetime($now + 8*60*60);
       $dbi->query(q{
           INSERT INTO ase_enrollment
           (en_uuid,
            en_name, en_nickname, en_address, en_pw_sha1, en_pw_md5, en_pw_cryptmd5, en_pw_cryptdes,
  -         en_start, en_expiry)
  -        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
  +         en_start, en_penalty, en_expiry)
  +        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
       },  $me_uuid, $name, $nickname ne '' ? $nickname : undef, $address,
           $pw->{-sha1}, $pw->{-md5}, $pw->{-cryptmd5}, $pw->{-cryptdes}, 
  -        $t_start, $t_expiry
  +        $t_start, $t_penalty, $t_expiry
       ) or die $dbi->error();
   
       #   send activation URL to Email address
  @@ -514,10 +516,10 @@
           $rec->{en_pw_sha1}, $rec->{en_pw_md5}, $rec->{en_pw_cryptmd5}, $rec->{en_pw_cryptdes},
       ) or die $dbi->error();
   
  -    #   delete enrollment information
  +    #   delete enrollment information (one or even more in case of retries)
       $dbi->query(q{
  -        DELETE FROM ase_enrollment WHERE en_uuid = ?;
  -    }, $uuid) or die $dbi->error();
  +        DELETE FROM ase_enrollment WHERE en_address = ?;
  +    }, $rec->{"en_address"}) or die $dbi->error();
   
       #   provide final information
       $html .=
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.sql
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 ase.sql
  --- ossp-pkg/ase/ase.sql	22 Mar 2007 22:21:07 -0000	1.10
  +++ ossp-pkg/ase/ase.sql	22 Mar 2007 22:35:26 -0000	1.11
  @@ -75,13 +75,13 @@
   
   -- Member Enrollment Information
   CREATE TABLE ase_enrollment (
  -    en_uuid                    TEXT UNIQUE NOT NULL PRIMARY KEY, 
  +    en_uuid                    TEXT NOT NULL, 
                                  -- Membership UUID
                                  -- [75468374-8721-11d9-bee4-0002a5489f14]
       en_nickname                TEXT,
                                  -- Nickname
                                  -- [rse]
  -    en_address                 TEXT UNIQUE NOT NULL,
  +    en_address                 TEXT NOT NULL,
                                  -- Email-Address
                                  -- [rse@engelschall.com]
       en_name                    TEXT,
  @@ -102,6 +102,9 @@
       en_start                   INTEGER NOT NULL,
                                  -- Enrollment Start (generated, YYYYMMDDHHMMSS)
                                  -- [20050225000000]
  +    en_penalty                 INTEGER NOT NULL,
  +                               -- Enrollment Penalty (generated, YYYYMMDDHHMMSS)
  +                               -- [20050225000000]
       en_expiry                  INTEGER NOT NULL
                                  -- Enrollment Expiry (generated, YYYYMMDDHHMMSS)
                                  -- [20050225000000]
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 23 08:32:52 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 3ED8975292F; Fri, 23 Mar 2007 08:32:52 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO ase.cgi.enroll.pl ase.cgi.login.pl ase....
Message-Id: <20070323073252.3ED8975292F@mail.ossp.org>
Date: Fri, 23 Mar 2007 08:32:52 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Mar-2007 08:32:52
  Branch: HEAD                             Handle: 2007032307325000

  Modified files:
    ossp-pkg/ase            TODO ase.cgi.enroll.pl ase.cgi.login.pl
                            ase.cgi.profile.pl ase.sql

  Log:
    rename status to karma; add new status (for active/inactive/disabled)
    and locking of account

  Summary:
    Revision    Changes     Path
    1.30        +1  -10     ossp-pkg/ase/TODO
    1.32        +3  -4      ossp-pkg/ase/ase.cgi.enroll.pl
    1.24        +27 -1      ossp-pkg/ase/ase.cgi.login.pl
    1.15        +17 -11     ossp-pkg/ase/ase.cgi.profile.pl
    1.12        +20 -3      ossp-pkg/ase/ase.sql
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 TODO
  --- ossp-pkg/ase/TODO	22 Mar 2007 22:21:07 -0000	1.29
  +++ ossp-pkg/ase/TODO	23 Mar 2007 07:32:50 -0000	1.30
  @@ -33,16 +33,7 @@
         exit;
     }
   
  -  disabled = text
  -  locked   = text, expires
  -
  -  - Instant notiofication http://regeistry?notify=%s (%s UUID of account)
  -
  -- disabled accounts
  -- login: ok
  -         !ok: inactive, incorrect pw, admin-disabled, tmp-disabled-N-logins-incorrect
  -
  -- 
  +- Instant notiofication http://regeistry?notify=%s (%s UUID of account)
   
   - add profile editing support (especially to allow changing the nickname)
     and use this as the step 4 of the recovery procedure
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	22 Mar 2007 22:35:26 -0000	1.31
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	23 Mar 2007 07:32:50 -0000	1.32
  @@ -506,13 +506,12 @@
       $dbi->query(q{
           INSERT INTO ase_member
           (me_uuid, me_name, me_nickname, me_address,
  -         me_membership_status, me_membership_type,
  +         me_account_status, me_membership_karma, me_membership_prop, me_membership_type,
            me_membership_start, me_membership_end,
            me_access_pw_sha1, me_access_pw_md5, me_access_pw_cryptmd5, me_access_pw_cryptdes)
  -        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
  +        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
       },  $uuid, $rec->{en_name}, $rec->{en_nickname}, $rec->{en_address},
  -        1, "N",
  -        $t_start, $t_end,
  +        1, 1, "", "N", $t_start, $t_end,
           $rec->{en_pw_sha1}, $rec->{en_pw_md5}, $rec->{en_pw_cryptmd5}, $rec->{en_pw_cryptdes},
       ) or die $dbi->error();
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	22 Mar 2007 14:44:01 -0000	1.23
  +++ ossp-pkg/ase/ase.cgi.login.pl	23 Mar 2007 07:32:50 -0000	1.24
  @@ -192,6 +192,24 @@
           return $self->forward("login");
       }
       my $rec = $rec[0];
  +    if ($rec->{"me_account_status"} == 3) {
  +        $cgi->param("login.error",
  +            "Account disabled" .
  +            ($rec->{"me_account_status_reason"} ? " (" . $rec->{"me_account_status_reason"} . ")" : "")
  +        );
  +        return $self->forward("login");
  +    }
  +    if ($rec->{"me_account_lock"}) {
  +        my $locked_until = $self->datetime2time($rec->{"me_account_lock"});
  +        if ($locked_until > time()) {
  +            $cgi->param("login.error",
  +                "Account temporarily locked for " .
  +                $self->time2human($locked_until - time()) .
  +                ($rec->{"me_account_lock_reason"} ? " (" . $rec->{"me_account_lock_reason"} . ")" : "")
  +            );
  +            return $self->forward("login");
  +        }
  +    }
   
       #   detect special case of administrator login
       my $admin_ok = 0;
  @@ -200,7 +218,7 @@
           my $rec2 = $dbi->query(q{
               SELECT * FROM ase_member
                WHERE     me_address = ?
  -                   AND (   me_membership_status = 5
  +                   AND (   me_membership_karma = 5
                           OR me_membership_prop LIKE '\%A\%');
           }, $admin_login)->hash();
           if (defined($rec2)) {
  @@ -225,6 +243,14 @@
           }
       }
   
  +    #   make account active in case it was inactive
  +    $dbi->query(q{
  +        UPDATE ase_member
  +        SET    me_account_status = 1
  +        WHERE  me_account_status = 2 AND
  +               me_uuid = ?
  +    }, $rec->{"me_uuid"}) or die $dbi->error();
  +
       #   login the user by remembering his UUID in the session
       $session->param("login", $rec->{'me_uuid'});
       $self->logbook("login by %s %s<%s>", $rec->{'me_name'}, (defined $rec->{'me_nickname'} ? " (" . $rec->{'me_nickname'} . ")" : ""), $rec->{'me_address'}); 
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.profile.pl
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 ase.cgi.profile.pl
  --- ossp-pkg/ase/ase.cgi.profile.pl	22 Mar 2007 13:55:19 -0000	1.14
  +++ ossp-pkg/ase/ase.cgi.profile.pl	23 Mar 2007 07:32:50 -0000	1.15
  @@ -66,9 +66,11 @@
           SELECT * FROM ase_member WHERE me_uuid = ?;
       }, $me_uuid)->hash()) or die "no member found under UUID $me_uuid";
   
  -    #   determine name of membership status and type
  -    my $me_status = (qw(Enrolling Fellow Member Activist Director President))
  -        [$rec->{'me_membership_status'} || 0];
  +    #   determine name of membership karma and type
  +    my $me_karma = (qw(Enrolling Fellow Member Activist Director President))
  +        [$rec->{'me_membership_karma'} || 0];
  +    my $me_prop = join(", ", map { { "A" => "Administrator", "F" => "Founding", "H" => "Honorary" }->{$_}; }
  +        split(//, ($rec->{'me_membership_prop'} || ""))) || "(none)";
       my $me_type = ("Natural Person", "Juristic Person")
           [$rec->{'me_membership_type'} || 0];
   
  @@ -91,8 +93,12 @@
           "    <td class=\"I\">". $me_uuid ."</td>\n" .
           "  </tr>\n" .
           "  <tr>\n" .
  -        "    <td class=\"L\"><span class=\"label\">Membership Status:</span></td>\n" .
  -        "    <td class=\"I\">". $me_status ."</td>\n" .
  +        "    <td class=\"L\"><span class=\"label\">Membership Karma:</span></td>\n" .
  +        "    <td class=\"I\">". $me_karma ."</td>\n" .
  +        "  </tr>\n" .
  +        "  <tr>\n" .
  +        "    <td class=\"L\"><span class=\"label\">Membership Properties:</span></td>\n" .
  +        "    <td class=\"I\">". $me_prop ."</td>\n" .
           "  </tr>\n" .
           "  <tr>\n" .
           "    <td class=\"L\"><span class=\"label\">Membership Type:</span></td>\n" .
  @@ -148,9 +154,9 @@
           SELECT * FROM ase_member WHERE me_uuid = ?;
       }, $me_uuid)->hash()) or die "no member found under UUID $me_uuid";
   
  -    #   determine name of membership status
  -    my $me_status = (qw(Enrolling Fellow Member Activist Director President))
  -        [$rec->{'me_membership_status'} || 0];
  +    #   determine name of membership karma
  +    my $me_karma = (qw(Enrolling Fellow Member Activist Director President))
  +        [$rec->{'me_membership_karma'} || 0];
   
       $html .= "<table class=\"F\">\n";
       $html .=
  @@ -163,7 +169,7 @@
       #   render member edit form
       $self->use("CGI::FormBuilder");
       my $form = new CGI::FormBuilder (
  -        "fields"   => [qw(me_sn me_uuid me_nickname me_address me_membership_status me_membership_prop me_gender)],
  +        "fields"   => [qw(me_sn me_uuid me_nickname me_address me_membership_karma me_membership_prop me_gender)],
           "method"   => "POST",
           "values"   => $rec,
           "header"   => 0,
  @@ -172,8 +178,8 @@
           "template" => &render,
       );
       $form->field(
  -        "name"     => "me_membership_status",
  -        "label"    => "Membership Status",
  +        "name"     => "me_membership_karma",
  +        "label"    => "Membership Karma",
           "options"  => [
               [ "0" => "enrolling" ],
               [ "1" => "fellow"    ],
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.sql
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 ase.sql
  --- ossp-pkg/ase/ase.sql	22 Mar 2007 22:35:26 -0000	1.11
  +++ ossp-pkg/ase/ase.sql	23 Mar 2007 07:32:50 -0000	1.12
  @@ -44,12 +44,29 @@
                                  -- Person Name
                                  -- [Ralf S. Engelschall]
   
  +    -- Account Details
  +    me_account_status          CHAR(1) NOT NULL,
  +                               -- Account Status Level: 1=active, 2=inactive, 3=disabled
  +                               -- [0]
  +    me_account_status_reason   TEXT,
  +                               -- Account Status Reason
  +                               -- [inactivity for N months]
  +    me_account_lock            INTEGER,
  +                               -- Account Temporary Lock Expiry Time
  +                               -- [20050225000000]
  +    me_account_lock_reason     TEXT,
  +                               -- Account Temporary Lock Reason
  +                               -- [N failed logins within M minutes]
  +
       -- Membership Details
  -    me_membership_status       CHAR(1) NOT NULL,
  -                               -- Membership Status/Karma: 0=enrolling, 1=fellow, 2=member, 3=activist, 4=director, 5=president
  +    me_membership_karma        INTEGER NOT NULL,
  +                               -- Membership Karma Level: (one of) 1=fellow, 2=member, 3=activist, 4=director, 5=president
                                  -- [5]
  +    me_membership_prop         CHAR(4) NOT NULL,
  +                               -- Membership Properties Set: (one or more of) A=admin, F=founding, H=honorary, ...
  +                               -- [F]
       me_membership_type         CHAR(1) NOT NULL,
  -                               -- Membership Type: N=natural, J=juristic
  +                               -- Membership Type Value: N=natural, J=juristic
                                  -- [N]
       me_membership_start        INTEGER,
                                  -- Membership Start Date
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 23 09:09:27 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B2FEF753071; Fri, 23 Mar 2007 09:09:27 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ ChangeLog Makefile.in l2-config.in
Message-Id: <20070323080927.B2FEF753071@mail.ossp.org>
Date: Fri, 23 Mar 2007 09:09:27 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Mar-2007 09:09:27
  Branch: HEAD                             Handle: 2007032308092700

  Modified files:
    ossp-pkg/l2             ChangeLog Makefile.in l2-config.in

  Log:
    - Make newer GNU autoconf happy by providing "datarootdir".
    - Fix installation by using GNU libtool for installing "l2-config".

  Summary:
    Revision    Changes     Path
    1.34        +9  -0      ossp-pkg/l2/ChangeLog
    1.50        +9  -6      ossp-pkg/l2/Makefile.in
    1.10        +1  -0      ossp-pkg/l2/l2-config.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 ChangeLog
  --- ossp-pkg/l2/ChangeLog	2 Mar 2007 15:13:28 -0000	1.33
  +++ ossp-pkg/l2/ChangeLog	23 Mar 2007 08:09:27 -0000	1.34
  @@ -9,6 +9,15 @@
     ChangeLog
     =========
   
  +  Changes between 0.9.12 and 0.9.13 (02-Mar-2005 to 23-Mar-2007)
  +
  +    *) Make newer GNU autoconf happy by providing "datarootdir".
  +       [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +    *) Fix installation by using GNU libtool for installing "l2-config".
  +       [Ralf S. Engelschall <rse@engelschall.com>,
  +        Christian Vogel <chris@obelix.hedonism.cx>]
  +
     Changes between 0.9.11 and 0.9.12 (03-Oct-2005 to 02-Mar-2007)
   
       *) Support for 1996-03-20 addition to Single UNIX Specification for
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.49 -r1.50 Makefile.in
  --- ossp-pkg/l2/Makefile.in	3 Oct 2005 08:08:11 -0000	1.49
  +++ ossp-pkg/l2/Makefile.in	23 Mar 2007 08:09:27 -0000	1.50
  @@ -36,6 +36,7 @@
   DESTDIR     =
   prefix      = @prefix@
   exec_prefix = @exec_prefix@
  +datarootdir = @datarootdir@
   bindir      = @bindir@
   libdir      = @libdir@
   includedir  = @includedir@
  @@ -188,21 +189,23 @@
   	$(SHTOOL) mkdir -p -f -m 755 $(DESTDIR)$(mandir)/man3
   	$(SHTOOL) install -c -m 755 l2-config $(DESTDIR)$(bindir)/l2-config
   	$(SHTOOL) install -c -m 644 l2-config.1 $(DESTDIR)$(mandir)/man1/l2-config.1
  -	$(SHTOOL) install -c -m 755 l2tool $(DESTDIR)$(bindir)/l2tool
  +	@$(LIBTOOL) --mode=install \
  +	    $(SHTOOL) install -c -m 755 l2tool $(DESTDIR)$(bindir)/l2tool
   	$(SHTOOL) install -c -m 644 l2tool.1 $(DESTDIR)$(mandir)/man1/l2tool.1
   	$(SHTOOL) install -c -m 644 l2.3 $(DESTDIR)$(mandir)/man3/l2.3
   	$(SHTOOL) install -c -m 644 l2.h $(DESTDIR)$(includedir)/l2.h
  -	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 \
  -	    libl2.la $(DESTDIR)$(libdir)/libl2.la
  +	@$(LIBTOOL) --mode=install \
  +	    $(SHTOOL) install -c -m 644 libl2.la $(DESTDIR)$(libdir)/libl2.la
   
   #   perform standard uninstallation procedure
   uninstall:
  -	$(MAKE) $(MFLAGS) uninstall-c uninstall-std
  -	@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libl2.la
  +	@$(LIBTOOL) --mode=uninstall \
  +	    $(RM) $(DESTDIR)$(libdir)/libl2.la
   	$(RM) $(DESTDIR)$(includedir)/l2.h
   	$(RM) $(DESTDIR)$(mandir)/man3/l2.3
   	$(RM) $(DESTDIR)$(mandir)/man1/l2tool.1
  -	$(RM) $(DESTDIR)$(bindir)/l2tool
  +	@$(LIBTOOL) --mode=uninstall \
  +	    $(RM) $(DESTDIR)$(bindir)/l2tool
   	$(RM) $(DESTDIR)$(mandir)/man1/l2-config.1
   	$(RM) $(DESTDIR)$(bindir)/l2-config
   	$(RMDIR) $(DESTDIR)$(mandir)/man3
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2-config.in
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 l2-config.in
  --- ossp-pkg/l2/l2-config.in	3 Oct 2005 08:08:11 -0000	1.9
  +++ ossp-pkg/l2/l2-config.in	23 Mar 2007 08:09:27 -0000	1.10
  @@ -34,6 +34,7 @@
   
   prefix="@prefix@"
   exec_prefix="@exec_prefix@"
  +datarootdir="@datarootdir@"
   
   l2_prefix="$prefix"
   l2_exec_prefix="$exec_prefix"
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 23 09:44:54 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B887C75297E; Fri, 23 Mar 2007 09:44:54 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ChangeLog TODO ase.cgi.login.pl ase.sql
Message-Id: <20070323084454.B887C75297E@mail.ossp.org>
Date: Fri, 23 Mar 2007 09:44:54 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Mar-2007 09:44:54
  Branch: HEAD                             Handle: 2007032308445400

  Modified files:
    ossp-pkg/ase            ChangeLog TODO ase.cgi.login.pl ase.sql

  Log:
    implement intruder detection and prevention

  Summary:
    Revision    Changes     Path
    1.8         +8  -0      ossp-pkg/ase/ChangeLog
    1.31        +0  -33     ossp-pkg/ase/TODO
    1.25        +78 -8      ossp-pkg/ase/ase.cgi.login.pl
    1.13        +13 -0      ossp-pkg/ase/ase.sql
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 ChangeLog
  --- ossp-pkg/ase/ChangeLog	22 Mar 2007 18:41:09 -0000	1.7
  +++ ossp-pkg/ase/ChangeLog	23 Mar 2007 08:44:54 -0000	1.8
  @@ -13,6 +13,14 @@
   
     Changes between 0.1.x and 0.2.0 (xx-Oct-2005 to 20-Mar-2007)
   
  +   o Add intruder detection and prevention by tracking logins and
  +     locking account for P (penalty) minutes after N failed logins within
  +     M minutes.
  +     [Ralf S. Engelschall]
  +
  +   o Allow accounts to be disabled at all.
  +     [Ralf S. Engelschall]
  +
      o Support asymmetric setups where internal (communication between
        ase.pm and server) and external (communication between browser and
        server) HTTP requests could be different.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 TODO
  --- ossp-pkg/ase/TODO	23 Mar 2007 07:32:50 -0000	1.30
  +++ ossp-pkg/ase/TODO	23 Mar 2007 08:44:54 -0000	1.31
  @@ -1,40 +1,7 @@
   
   TODO:
   - cron: active (on every login), mail, inactive (after n months), mail, deleted
  -- repeated incorrect logins N fehlversuche in X minuten -> Y minuten gesperrt
  -  me_locked = time
  -  ase_login {
  -      UUID
  -      TIME
  -      STATUS OK, !OK
  -  }
  -
  -  if (disabled) {
  -      error;
  -      exit;
  -  }
  -  if (locked > now()) {
  -      error locked for wait locked - now() 
  -      exit;
  -  }
  -  if (password == ok) {
  -      INSERT ok
  -      ok;
  -  }
  -  else {
  -      INSERT ok
  -      introduder detection:
  -      SELECT COUNT(*) FROM ase_login
  -      WHERE uuid = ? AND status != 'ok' AND time > now()-1 0 AND
  -      time > COERCE(SELECT MAX(time) FROM ase_login WHERE uuid = ? AND status = 'ok' AND time > now()-10, 0)
  -      if (count > N) {
  -          locked = now() + Y minuten
  -      }
  -      exit;
  -  }
  -
   - Instant notiofication http://regeistry?notify=%s (%s UUID of account)
  -
   - add profile editing support (especially to allow changing the nickname)
     and use this as the step 4 of the recovery procedure
   - check URL fetching and its caching because of DBIx::Simple:
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	23 Mar 2007 07:32:50 -0000	1.24
  +++ ossp-pkg/ase/ase.cgi.login.pl	23 Mar 2007 08:44:54 -0000	1.25
  @@ -156,12 +156,17 @@
       my $login    = $cgi->param("login");
       my $password = $cgi->param("password");
   
  +    #   error tracking
  +    my $error = 0;
  +    my $me_uuid = undef;
  +
       #   lookup member in database 
       $login =~ s/^\s+//s;
       $login =~ s/\s+$//s;
       if ($login eq '') {
           $cgi->param("login.error", "Empty login");
  -        return $self->forward("login");
  +        $error = 1;
  +        goto ERROR;
       }
       my $field = "";
       if ($login =~ m/^.+\@.+$/) {
  @@ -185,29 +190,46 @@
       }, $login)->hashes();
       if (@rec == 0) {
           $cgi->param("login.error", "Unknown login");
  -        return $self->forward("login");
  +        $error = 1;
  +        goto ERROR;
       }
       elsif (@rec > 1) {
           $cgi->param("login.error", "Ambiguous login");
  -        return $self->forward("login");
  +        $error = 1;
  +        goto ERROR;
       }
       my $rec = $rec[0];
  +    $me_uuid = $rec->{"me_uuid"};
       if ($rec->{"me_account_status"} == 3) {
  +        #   account is disabled
           $cgi->param("login.error",
               "Account disabled" .
               ($rec->{"me_account_status_reason"} ? " (" . $rec->{"me_account_status_reason"} . ")" : "")
           );
  -        return $self->forward("login");
  +        $error = 1;
  +        goto ERROR;
       }
       if ($rec->{"me_account_lock"}) {
           my $locked_until = $self->datetime2time($rec->{"me_account_lock"});
           if ($locked_until > time()) {
  +            #   account is still locked
               $cgi->param("login.error",
                   "Account temporarily locked for " .
                   $self->time2human($locked_until - time()) .
  +                "<br/>" .
                   ($rec->{"me_account_lock_reason"} ? " (" . $rec->{"me_account_lock_reason"} . ")" : "")
               );
  -            return $self->forward("login");
  +            $error = 1;
  +            goto ERROR;
  +        }
  +        else {
  +            #   clear expired locking
  +            $dbi->query(q{
  +                UPDATE ase_member
  +                SET    me_account_lock = NULL,
  +                       me_account_lock_reason = NULL
  +                WHERE  me_uuid = ?
  +            }, $me_uuid) or die $dbi->error();
           }
       }
   
  @@ -234,22 +256,70 @@
       if (not $admin_ok) {
           if ($password eq '') {
               $cgi->param("login.error", "Empty password");
  -            return $self->forward("login");
  +            $error = 1;
  +            goto ERROR;
           }
           my $pw = $self->makepasswords($password);
           if ($pw->{-sha1} ne $rec->{'me_access_pw_sha1'}) {
               $cgi->param("login.error", "Incorrect Password");
  -            return $self->forward("login");
  +            $error = 1;
  +            goto ERROR;
           }
       }
   
  +    #   error processing
  +    ERROR:
  +    if ($error) {
  +        #   record login as failed
  +        $dbi->query(q{
  +            INSERT INTO ase_login (lo_uuid, lo_time, lo_success) VALUES (?, ?, 0);
  +        }, $me_uuid, $self->datetime(time()));
  +
  +        #   intruder detection & prevention
  +        my $N = 3;   # N failed logins...
  +        my $M = 2;   # ...within M minutes...
  +        my $P = 10;  # ...cause P minutes penalty.
  +        my $t1 = $self->datetime(time() - $M * 60);
  +        my $t2 = $self->datetime(time() + $P * 60);
  +        my ($count) = $dbi->query(q{
  +            SELECT COUNT(*)
  +            FROM   ase_login
  +            WHERE  lo_uuid    = ? AND
  +                   lo_success = 0 AND
  +                   lo_time    > MAX(?, COALESCE((
  +                       SELECT MAX(lo_time)
  +                       FROM   ase_login
  +                       WHERE  lo_uuid    = ? AND
  +                              lo_success = 1 AND
  +                              lo_time    > ?
  +                   ), 0))
  +        }, $me_uuid, $t1, $me_uuid, $t1)->list();
  +        if (($count || 0) > $N) {
  +            $dbi->query(q{
  +                UPDATE ase_member
  +                SET    me_account_lock = ?,
  +                       me_account_lock_reason = ?
  +                WHERE  me_uuid = ?
  +            }, $t2, "$N failed logins within $M minutes", $me_uuid
  +            ) or die $dbi->error();
  +        }
  +
  +        #   go back to login form
  +        return $self->forward("login");
  +    }
  +
  +    #   record login as successful
  +    $dbi->query(q{
  +        INSERT INTO ase_login (lo_uuid, lo_time, lo_success) VALUES (?, ?, 1);
  +    }, $me_uuid, $self->datetime(time()));
  +
       #   make account active in case it was inactive
       $dbi->query(q{
           UPDATE ase_member
           SET    me_account_status = 1
           WHERE  me_account_status = 2 AND
                  me_uuid = ?
  -    }, $rec->{"me_uuid"}) or die $dbi->error();
  +    }, $me_uuid) or die $dbi->error();
   
       #   login the user by remembering his UUID in the session
       $session->param("login", $rec->{'me_uuid'});
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.sql
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 ase.sql
  --- ossp-pkg/ase/ase.sql	23 Mar 2007 07:32:50 -0000	1.12
  +++ ossp-pkg/ase/ase.sql	23 Mar 2007 08:44:54 -0000	1.13
  @@ -149,6 +149,19 @@
                                  -- [20050225000000]
   );
   
  +--  Login Tracking
  +CREATE TABLE ase_login (
  +    lo_uuid                    TEXT NOT NULL,
  +                               -- Membership UUID
  +                               -- [75468374-8721-11d9-bee4-0002a5489f14]
  +    lo_time                    INTEGER NOT NULL,
  +                               -- Login (Attempt) Time YYYYMMDDHHMMSS
  +                               -- [20050225000000]
  +    lo_success                 INTEGER NOT NULL
  +                               -- Login Success (boolean): 0=no, 1=yes
  +                               -- [1]
  +);
  +
   --  Temporary User Interface Security Codes
   CREATE TABLE ase_scode (
       sc_uuid                    TEXT NOT NULL,
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 23 09:48:47 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 36C00753011; Fri, 23 Mar 2007 09:48:47 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cfg ase.cgi.login.pl
Message-Id: <20070323084847.36C00753011@mail.ossp.org>
Date: Fri, 23 Mar 2007 09:48:47 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Mar-2007 09:48:47
  Branch: HEAD                             Handle: 2007032308484600

  Modified files:
    ossp-pkg/ase            ase.cfg ase.cgi.login.pl

  Log:
    make intrusion prevention parameters configurable

  Summary:
    Revision    Changes     Path
    1.6         +4  -0      ossp-pkg/ase/ase.cfg
    1.26        +4  -3      ossp-pkg/ase/ase.cgi.login.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cfg
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ase.cfg
  --- ossp-pkg/ase/ase.cfg	22 Mar 2007 18:36:24 -0000	1.5
  +++ ossp-pkg/ase/ase.cfg	23 Mar 2007 08:48:46 -0000	1.6
  @@ -36,3 +36,7 @@
   #service-admin  "openpkg-registry@openpkg.org";
   #fetch-url-acl  q{^https?:\/\/\S+\.(?:ossp\.org|openpkg\.(?:org|com|net))};
   
  +login-failures-max          3;
  +login-failures-time-range   2;
  +login-failures-time-penalty 10;
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	23 Mar 2007 08:44:54 -0000	1.25
  +++ ossp-pkg/ase/ase.cgi.login.pl	23 Mar 2007 08:48:46 -0000	1.26
  @@ -143,6 +143,7 @@
   #   run-time mode screen action: "login"
   sub mode_login_action {
       my $self    = shift;
  +    my $cfg     = $self->param(-cfg);
       my $cgi     = $self->param(-cgi);
       my $dbi     = $self->param(-dbi);
       my $session = $self->param(-session);
  @@ -276,9 +277,9 @@
           }, $me_uuid, $self->datetime(time()));
   
           #   intruder detection & prevention
  -        my $N = 3;   # N failed logins...
  -        my $M = 2;   # ...within M minutes...
  -        my $P = 10;  # ...cause P minutes penalty.
  +        my $N = $cfg->{-cfg}->{"login-failures-max"};          # N failed logins...
  +        my $M = $cfg->{-cfg}->{"login-failures-time-range"};   # ...within M minutes...
  +        my $P = $cfg->{-cfg}->{"login-failures-time-penalty"}; # ...cause P minutes penalty.
           my $t1 = $self->datetime(time() - $M * 60);
           my $t2 = $self->datetime(time() + $P * 60);
           my ($count) = $dbi->query(q{
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 23 09:49:30 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id C56A2753011; Fri, 23 Mar 2007 09:49:30 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi
Message-Id: <20070323084930.C56A2753011@mail.ossp.org>
Date: Fri, 23 Mar 2007 09:49:30 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Mar-2007 09:49:30
  Branch: HEAD                             Handle: 2007032308493000

  Modified files:
    ossp-pkg/ase            ase.cgi

  Log:
    update version

  Summary:
    Revision    Changes     Path
    1.20        +2  -2      ossp-pkg/ase/ase.cgi
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 ase.cgi
  --- ossp-pkg/ase/ase.cgi	22 Mar 2007 22:21:07 -0000	1.19
  +++ ossp-pkg/ase/ase.cgi	23 Mar 2007 08:49:30 -0000	1.20
  @@ -34,8 +34,8 @@
   our $cfg = {
       -prog_name   => 'OSSP ase',
       -prog_desc   => 'Affiliation Service Environment',
  -    -prog_vers   => '0.0.1',
  -    -prog_date   => '20-Feb-2005',
  +    -prog_vers   => '0.2.0',
  +    -prog_date   => '2007-03-23',
       -path_cfgdir => '.',
       -path_libdir => '.',
       -path_vardir => '.',
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 23 09:51:51 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id D07337529C6; Fri, 23 Mar 2007 09:51:51 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.util.pl
Message-Id: <20070323085151.D07337529C6@mail.ossp.org>
Date: Fri, 23 Mar 2007 09:51:51 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Mar-2007 09:51:51
  Branch: HEAD                             Handle: 2007032308515100

  Modified files:
    ossp-pkg/ase            ase.cgi.util.pl

  Log:
    fix comments

  Summary:
    Revision    Changes     Path
    1.20        +2  -1      ossp-pkg/ase/ase.cgi.util.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.util.pl
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 ase.cgi.util.pl
  --- ossp-pkg/ase/ase.cgi.util.pl	22 Mar 2007 22:21:07 -0000	1.19
  +++ ossp-pkg/ase/ase.cgi.util.pl	23 Mar 2007 08:51:51 -0000	1.20
  @@ -110,8 +110,8 @@
       my $expires = "+10s";
       my $content = "";
   
  -    #   load external file content 
       if ($url =~ m/^https?:\/\/.+$/) { 
  +        #   load remote file content 
           my $re = $cfg->{-cfg}->{"fetch-url-acl"};
           die "invalid URL \"$url\"" if ($url !~ m/$re/);
           $self->use("HTTP::Response");
  @@ -135,6 +135,7 @@
           $content = $response->content;
       }
       else {
  +        #   load local file content 
           die "invalid URL \"$url\"" if ($url =~ m|\.\.| or $url =~ m|^/|); # FIXME: SECURITY enough?
           my $filename = $cfg->{-path_datdir}."/".$url;
           die "file not found" if (not -f $filename);
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 23 09:53:35 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 1B98E75290A; Fri, 23 Mar 2007 09:53:35 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.util.pl
Message-Id: <20070323085335.1B98E75290A@mail.ossp.org>
Date: Fri, 23 Mar 2007 09:53:35 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Mar-2007 09:53:35
  Branch: HEAD                             Handle: 2007032308533400

  Modified files:
    ossp-pkg/ase            ase.cgi.util.pl

  Log:
    allow setting timeout and nocache options for URL fetching

  Summary:
    Revision    Changes     Path
    1.21        +4  -4      ossp-pkg/ase/ase.cgi.util.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.util.pl
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 ase.cgi.util.pl
  --- ossp-pkg/ase/ase.cgi.util.pl	23 Mar 2007 08:51:51 -0000	1.20
  +++ ossp-pkg/ase/ase.cgi.util.pl	23 Mar 2007 08:53:34 -0000	1.21
  @@ -102,7 +102,7 @@
   
   #   helper function for fetching an URL
   sub fetch {
  -    my ($self, $url) = @_;
  +    my ($self, $url, $timeout, $nocache) = @_;
       my $cfg = $self->param(-cfg);
   
       #   determine expire time and content type
  @@ -116,19 +116,19 @@
           die "invalid URL \"$url\"" if ($url !~ m/$re/);
           $self->use("HTTP::Response");
           my $response;
  -        if (not defined($response = $self->cache($url))) {
  +        if ($nocache or not defined($response = $self->cache($url))) {
               $self->use("Socket");
               $self->use("Net::HTTP");
               $self->use("LWP::UserAgent");
               my $ua = new LWP::UserAgent;
               $ua->agent($cfg->{-prog_name}."/".$cfg->{-prog_vers});
  -            $ua->timeout(20);
  +            $ua->timeout($timeout || 20);
               $ua->max_size(1*1024*1024);
               $ua->max_redirect(2);
               $ua->protocols_allowed([ 'http', 'https']);
               $response = $ua->get($url);
               die "unable to load URL \"$url\"" if (not $response->is_success);
  -            $self->cache($url, $response->fresh_until() - time(), $response);
  +            $self->cache($url, $response->fresh_until() - time(), $response) if (not $nocache);
           }
           $type    = $response->content_type;
           $expires = $response->expires;
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 23 10:11:28 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 78F39752F72; Fri, 23 Mar 2007 10:11:28 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.util.pl
Message-Id: <20070323091128.78F39752F72@mail.ossp.org>
Date: Fri, 23 Mar 2007 10:11:28 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Mar-2007 10:11:28
  Branch: HEAD                             Handle: 2007032309112800

  Modified files:
    ossp-pkg/ase            ase.cgi.util.pl

  Log:
    log which filename fails

  Summary:
    Revision    Changes     Path
    1.22        +1  -1      ossp-pkg/ase/ase.cgi.util.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.util.pl
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 ase.cgi.util.pl
  --- ossp-pkg/ase/ase.cgi.util.pl	23 Mar 2007 08:53:34 -0000	1.21
  +++ ossp-pkg/ase/ase.cgi.util.pl	23 Mar 2007 09:11:28 -0000	1.22
  @@ -138,7 +138,7 @@
           #   load local file content 
           die "invalid URL \"$url\"" if ($url =~ m|\.\.| or $url =~ m|^/|); # FIXME: SECURITY enough?
           my $filename = $cfg->{-path_datdir}."/".$url;
  -        die "file not found" if (not -f $filename);
  +        die "file \"$filename\" not found" if (not -f $filename);
           $self->use("IO::All");
           $content < IO::All::io($filename)
               or die "unable to load file \"$filename\"";
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 23 10:23:42 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id F0A3475297E; Fri, 23 Mar 2007 10:23:41 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ChangeLog TODO ase.cfg ase.cgi.enroll.pl ase...
Message-Id: <20070323092341.F0A3475297E@mail.ossp.org>
Date: Fri, 23 Mar 2007 10:23:41 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Mar-2007 10:23:41
  Branch: HEAD                             Handle: 2007032309234100

  Modified files:
    ossp-pkg/ase            ChangeLog TODO ase.cfg ase.cgi.enroll.pl
                            ase.cgi.main.pl ase.cgi.recover.pl
                            ase.cgi.resign.pl ase.cgi.util.pl

  Log:
    implement instant notifications

  Summary:
    Revision    Changes     Path
    1.9         +4  -0      ossp-pkg/ase/ChangeLog
    1.32        +0  -1      ossp-pkg/ase/TODO
    1.7         +2  -0      ossp-pkg/ase/ase.cfg
    1.33        +3  -0      ossp-pkg/ase/ase.cgi.enroll.pl
    1.29        +2  -0      ossp-pkg/ase/ase.cgi.main.pl
    1.10        +3  -0      ossp-pkg/ase/ase.cgi.recover.pl
    1.5         +3  -0      ossp-pkg/ase/ase.cgi.resign.pl
    1.23        +19 -3      ossp-pkg/ase/ase.cgi.util.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 ChangeLog
  --- ossp-pkg/ase/ChangeLog	23 Mar 2007 08:44:54 -0000	1.8
  +++ ossp-pkg/ase/ChangeLog	23 Mar 2007 09:23:41 -0000	1.9
  @@ -13,6 +13,10 @@
   
     Changes between 0.1.x and 0.2.0 (xx-Oct-2005 to 20-Mar-2007)
   
  +   o Send instant notifications on account changes to
  +     an arbitrary number of URLs.
  +     [Ralf S. Engelschall]
  +
      o Add intruder detection and prevention by tracking logins and
        locking account for P (penalty) minutes after N failed logins within
        M minutes.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 TODO
  --- ossp-pkg/ase/TODO	23 Mar 2007 08:44:54 -0000	1.31
  +++ ossp-pkg/ase/TODO	23 Mar 2007 09:23:41 -0000	1.32
  @@ -1,7 +1,6 @@
   
   TODO:
   - cron: active (on every login), mail, inactive (after n months), mail, deleted
  -- Instant notiofication http://regeistry?notify=%s (%s UUID of account)
   - add profile editing support (especially to allow changing the nickname)
     and use this as the step 4 of the recovery procedure
   - check URL fetching and its caching because of DBIx::Simple:
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cfg
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ase.cfg
  --- ossp-pkg/ase/ase.cfg	23 Mar 2007 08:48:46 -0000	1.6
  +++ ossp-pkg/ase/ase.cfg	23 Mar 2007 09:23:41 -0000	1.7
  @@ -40,3 +40,5 @@
   login-failures-time-range   2;
   login-failures-time-penalty 10;
   
  +instant-notification-urls   "http://localhost/ase/sample.cgi?mode=notify;uuid=%s";
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	23 Mar 2007 07:32:50 -0000	1.32
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	23 Mar 2007 09:23:41 -0000	1.33
  @@ -520,6 +520,9 @@
           DELETE FROM ase_enrollment WHERE en_address = ?;
       }, $rec->{"en_address"}) or die $dbi->error();
   
  +    #   send notifications
  +    $self->notify($uuid);
  +
       #   provide final information
       $html .=
            "<div class=\"ase_boxed\">\n" .
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	22 Mar 2007 13:39:49 -0000	1.28
  +++ ossp-pkg/ase/ase.cgi.main.pl	23 Mar 2007 09:23:41 -0000	1.29
  @@ -40,6 +40,8 @@
           #   read and parse configuration
           my @directives = (qw(
               project-name service-name service-sender service-admin fetch-url-acl
  +            login-failures-max login-failures-time-range login-failures-time-penalty 
  +            instant-notification-urls
           ));
           my $txt < IO::All::io($cfgfile)
               or die "unable to read configuration file \"$cfgfile\"";
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.recover.pl
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 ase.cgi.recover.pl
  --- ossp-pkg/ase/ase.cgi.recover.pl	22 Mar 2007 22:21:07 -0000	1.9
  +++ ossp-pkg/ase/ase.cgi.recover.pl	23 Mar 2007 09:23:41 -0000	1.10
  @@ -554,6 +554,9 @@
               DELETE FROM ase_recovery WHERE re_key = ?;
           }, $re_key) or die $dbi->error();
   
  +        #   send notifications
  +        $self->notify($me_uuid);
  +
           #   render outer canvas
           $canvas->($html, "4");
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.resign.pl
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ase.cgi.resign.pl
  --- ossp-pkg/ase/ase.cgi.resign.pl	22 Mar 2007 20:43:37 -0000	1.4
  +++ ossp-pkg/ase/ase.cgi.resign.pl	23 Mar 2007 09:23:41 -0000	1.5
  @@ -170,6 +170,9 @@
               DELETE FROM ase_member WHERE me_uuid = ?;
           }, $me_uuid) or die $dbi->error();
   
  +        #   send notifications
  +        $self->notify($me_uuid);
  +
           #   remove the session from the database
           $session->delete();
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.util.pl
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 ase.cgi.util.pl
  --- ossp-pkg/ase/ase.cgi.util.pl	23 Mar 2007 09:11:28 -0000	1.22
  +++ ossp-pkg/ase/ase.cgi.util.pl	23 Mar 2007 09:23:41 -0000	1.23
  @@ -102,7 +102,7 @@
   
   #   helper function for fetching an URL
   sub fetch {
  -    my ($self, $url, $timeout, $nocache) = @_;
  +    my ($self, $url, $timeout, $nocache, $noerror) = @_;
       my $cfg = $self->param(-cfg);
   
       #   determine expire time and content type
  @@ -127,8 +127,8 @@
               $ua->max_redirect(2);
               $ua->protocols_allowed([ 'http', 'https']);
               $response = $ua->get($url);
  -            die "unable to load URL \"$url\"" if (not $response->is_success);
  -            $self->cache($url, $response->fresh_until() - time(), $response) if (not $nocache);
  +            die "unable to load URL \"$url\"" if (not $response->is_success and not $noerror);
  +            $self->cache($url, $response->fresh_until() - time(), $response) if ($response->is_success and not $nocache);
           }
           $type    = $response->content_type;
           $expires = $response->expires;
  @@ -311,5 +311,21 @@
       return;
   }
   
  +#   helper function for sending instant notification
  +sub notify {
  +    my ($self, $uuid) = @_;
  +    my $cfg = $self->param(-cfg);
  +    foreach my $url_template (
  +        ref($cfg->{-cfg}->{"instant-notification-urls"})
  +        ? @{$cfg->{-cfg}->{"instant-notification-urls"}}
  +        :  ($cfg->{-cfg}->{"instant-notification-urls"})
  +    ) {
  +        my $url = $url_template;
  +        $url =~ s/\%s/$uuid/sg;
  +        $self->fetch($url, 4, 1, 1);
  +    }
  +    return;
  +}
  +
   1;
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 23 10:29:00 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id E985575290A; Fri, 23 Mar 2007 10:28:59 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO
Message-Id: <20070323092859.E985575290A@mail.ossp.org>
Date: Fri, 23 Mar 2007 10:28:59 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Mar-2007 10:28:59
  Branch: HEAD                             Handle: 2007032309285900

  Modified files:
    ossp-pkg/ase            TODO

  Log:
    some issues are obsolete

  Summary:
    Revision    Changes     Path
    1.33        +0  -2      ossp-pkg/ase/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 TODO
  --- ossp-pkg/ase/TODO	23 Mar 2007 09:23:41 -0000	1.32
  +++ ossp-pkg/ase/TODO	23 Mar 2007 09:28:59 -0000	1.33
  @@ -15,10 +15,8 @@
   
   CANDO:
   - package ASE as OpenPKG package
  -- add OSSP::cfg based ase.cfg for external file referencing & embedded texts & mailing
   - add support to ase CLI for initial creation of database (use in OpenPKG ase.spec:%post)
   - add INSTALL document which shows how to link with webserver
  -- CGI::GuruMeditation and CGI::Carp do not work under Apache/mod_perl
   - addon attributes
      - uuid internal
      - email verified
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 23 13:26:27 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id CEB36752F72; Fri, 23 Mar 2007 13:26:26 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.sql
Message-Id: <20070323122626.CEB36752F72@mail.ossp.org>
Date: Fri, 23 Mar 2007 13:26:26 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Mar-2007 13:26:26
  Branch: HEAD                             Handle: 2007032312262600

  Modified files:
    ossp-pkg/ase            ase.sql

  Log:
    provide config table

  Summary:
    Revision    Changes     Path
    1.14        +12 -1      ossp-pkg/ase/ase.sql
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.sql
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 ase.sql
  --- ossp-pkg/ase/ase.sql	23 Mar 2007 08:44:54 -0000	1.13
  +++ ossp-pkg/ase/ase.sql	23 Mar 2007 12:26:26 -0000	1.14
  @@ -21,9 +21,20 @@
   --  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
   --  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
   --
  ---  ase.sql: OSSP ase database schema
  +--  ase.sql: OSSP ase database schema (REVISION: 2)
   --
   
  +--  Database Information
  +CREATE TABLE ase_config (
  +    -- Unique Key (primary)
  +    cf_name                    TEXT UNIQUE NOT NULL PRIMARY KEY, 
  +                               -- Configuration Variable Name
  +                               -- [revision]
  +    cf_value                   TEXT NOT NULL
  +                               -- Configuration Variable Value
  +                               -- [2]
  +);
  +
   --  Member Information
   CREATE TABLE ase_member (
       -- Unique Key (primary)
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 23 18:12:07 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 6703F75307F; Fri, 23 Mar 2007 18:12:07 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO
Message-Id: <20070323171207.6703F75307F@mail.ossp.org>
Date: Fri, 23 Mar 2007 18:12:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Mar-2007 18:12:07
  Branch: HEAD                             Handle: 2007032317120700

  Modified files:
    ossp-pkg/ase            TODO

  Log:
    remember idea

  Summary:
    Revision    Changes     Path
    1.34        +1  -0      ossp-pkg/ase/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 TODO
  --- ossp-pkg/ase/TODO	23 Mar 2007 09:28:59 -0000	1.33
  +++ ossp-pkg/ase/TODO	23 Mar 2007 17:12:07 -0000	1.34
  @@ -1,5 +1,6 @@
   
   TODO:
  +- heartbeat -> disable
   - cron: active (on every login), mail, inactive (after n months), mail, deleted
   - add profile editing support (especially to allow changing the nickname)
     and use this as the step 4 of the recovery procedure
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 23 18:24:07 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 247497530BA; Fri, 23 Mar 2007 18:24:07 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.sql
Message-Id: <20070323172407.247497530BA@mail.ossp.org>
Date: Fri, 23 Mar 2007 18:24:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Mar-2007 18:24:07
  Branch: HEAD                             Handle: 2007032317240600

  Modified files:
    ossp-pkg/ase            ase.sql

  Log:
    there is no level 0

  Summary:
    Revision    Changes     Path
    1.15        +1  -1      ossp-pkg/ase/ase.sql
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.sql
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 ase.sql
  --- ossp-pkg/ase/ase.sql	23 Mar 2007 12:26:26 -0000	1.14
  +++ ossp-pkg/ase/ase.sql	23 Mar 2007 17:24:06 -0000	1.15
  @@ -58,7 +58,7 @@
       -- Account Details
       me_account_status          CHAR(1) NOT NULL,
                                  -- Account Status Level: 1=active, 2=inactive, 3=disabled
  -                               -- [0]
  +                               -- [1]
       me_account_status_reason   TEXT,
                                  -- Account Status Reason
                                  -- [inactivity for N months]
  @@ .

From ossp-cvs-owner@ossp.org  Tue Mar 27 13:06:34 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 9C4FD752861; Tue, 27 Mar 2007 13:06:32 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ChangeLog Makefile TODO ase.pl ase.sql
Message-Id: <20070327110632.9C4FD752861@mail.ossp.org>
Date: Tue, 27 Mar 2007 13:06:32 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   27-Mar-2007 13:06:32
  Branch: HEAD                             Handle: 2007032712063001

  Modified files:
    ossp-pkg/ase            ChangeLog Makefile TODO ase.pl ase.sql

  Log:
    Revamp ase.pl into a new CLI which now provides
    database creation, upgrade and downgrade functionality.

  Summary:
    Revision    Changes     Path
    1.10        +4  -0      ossp-pkg/ase/ChangeLog
    1.4         +1  -1      ossp-pkg/ase/Makefile
    1.35        +0  -3      ossp-pkg/ase/TODO
    1.6         +157 -85    ossp-pkg/ase/ase.pl
    1.16        +172 -1     ossp-pkg/ase/ase.sql
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 ChangeLog
  --- ossp-pkg/ase/ChangeLog	23 Mar 2007 09:23:41 -0000	1.9
  +++ ossp-pkg/ase/ChangeLog	27 Mar 2007 11:06:30 -0000	1.10
  @@ -13,6 +13,10 @@
   
     Changes between 0.1.x and 0.2.0 (xx-Oct-2005 to 20-Mar-2007)
   
  +   o Revamp ase.pl into a new CLI which now provides
  +     database creation, upgrade and downgrade functionality.
  +     [Ralf S. Engelschall]
  +
      o Send instant notifications on account changes to
        an arbitrary number of URLs.
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/Makefile
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 Makefile
  --- ossp-pkg/ase/Makefile	9 Nov 2005 16:46:10 -0000	1.3
  +++ ossp-pkg/ase/Makefile	27 Mar 2007 11:06:31 -0000	1.4
  @@ -1,7 +1,7 @@
   
   ase.db: ase.sql
   	rm -f ase.db
  -	sqlite3 ase.db <ase.sql
  +	./ase.pl db ase.db
   	chmod a+rw ase.db
   
   clean:
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 TODO
  --- ossp-pkg/ase/TODO	23 Mar 2007 17:12:07 -0000	1.34
  +++ ossp-pkg/ase/TODO	27 Mar 2007 11:06:31 -0000	1.35
  @@ -9,14 +9,11 @@
     It could be that the "DBI::SQL_BLOB" is important!!! But DBIx::Simple
     doesn't provide this functionality...
   - merge ase-pwreset.pl into ase.pl
  -- add Makefile db creation to ase.pl
  -- optionally support db versioning and upgrades
   - info RPC page
   - remove or disable dead code in ASE (profile)
   
   CANDO:
   - package ASE as OpenPKG package
  -- add support to ase CLI for initial creation of database (use in OpenPKG ase.spec:%post)
   - add INSTALL document which shows how to link with webserver
   - addon attributes
      - uuid internal
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.pl
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ase.pl
  --- ossp-pkg/ase/ase.pl	19 Mar 2007 21:11:01 -0000	1.5
  +++ ossp-pkg/ase/ase.pl	27 Mar 2007 11:06:31 -0000	1.6
  @@ -34,17 +34,21 @@
   our $cfg = {
       -prog_name   => 'OSSP ase',
       -prog_desc   => 'Affiliation Service Environment',
  -    -prog_vers   => '0.0.1',
  -    -prog_date   => '20-Feb-2005',
  +    -prog_vers   => '0.2.0',
  +    -prog_date   => '2007-03-23',
  +    -path_cfgdir => '.',
       -path_libdir => '.',
       -path_vardir => '.',
       -path_datdir => '.',
   };
   
   #   language extensions
  +use POSIX;                              # from OpenPKG "perl"
   use Getopt::Long;                       # from OpenPKG "perl"
  +use IO::All;                            # from OpenPKG "perl-sys"
   use DBI;                                # from OpenPKG "perl-dbi"
   use DBD::SQLite;                        # from OpenPKG "perl-dbi" (with_dbd_sqlite=yes)
  +use DBIx::Simple;                       # from OpenPKG "perl-dbix"
   use Crypt::UnixCrypt;                   # from OpenPKG "perl-crypto"
   use Crypt::PasswdMD5;                   # from OpenPKG "perl-crypto"
   use Digest::MD5;                        # from OpenPKG "perl-crypto"
  @@ -55,118 +59,186 @@
       -help    => 0,
       -version => 0,
       -quiet   => 0,
  -    -type    => 'md5',
   };
   my $p = new Getopt::Long::Parser;
   $p->configure("bundling");
  +$p->configure("require_order");
   $p->getoptions(
       'h|help'      => \$opt->{-help},
       'V|version'   => \$opt->{-version},
       'q|quiet'     => \$opt->{-quiet},
  -    't|type=s'    => \$opt->{-type},
   ) || die "option parsing failed";
   undef $p;
   if ($opt->{-help}) {
  -    print "Usage: ase.pl [options] <username> [<password>]\n" .
  -          "Available options:\n" .
  +    print "Usage: ase.pl [options] command [options] [arguments]\n" .
  +          "Available global options:\n" .
             " -h,--help       print out this usage page\n" .
  -          " -V,--vesion     print version\n" .
  +          " -V,--version    print version\n" .
             " -q,--quiet      quiet processing\n" .
  -          " -t,--type=TYPE  type of password\n";
  +          "Available commands:\n" .
  +          " db              database creation/update/downgrade\n";
       exit(0);
   }
   if ($opt->{-version}) {
       print "$cfg->{-prog_name} $cfg->{-prog_vers} ($cfg->{-prog_date})\n";
       exit(0);
   }
  -if (@ARGV < 1 or @ARGV > 2) {
  +if (@ARGV < 1) {
       print STDERR "ase.pl:ERROR: invalid number of arguments\n";
       exit(1);
   }
   
  -#   determine parameters
  -my $username = $ARGV[0];
  -my $password = (defined($ARGV[1]) ? $ARGV[1] : $ENV{"PASSWORD"}) || "";
  -if ($password eq '') {
  -    print STDERR "ase.pl:ERROR: empty password\n";
  +#   determine command and dispatch according to it
  +my $command = shift @ARGV;
  +my $func = "cmd_$command";
  +if (not defined &{$func}) {
  +    print STDERR "ase.pl:ERROR: command \"$command\" not found\n";
       exit(1);
   }
  +my $rc; eval("\$rc = &$func(\$cfg)"); 
  +print STDERR "ERROR: $@" if ($@);
  +$rc = 1 if (not defined $rc);
  +exit($rc);
  +
  +##  _________________________________________________________________________
  +##
  +##  COMMANDS
  +##  _________________________________________________________________________
  +##
  +
  +sub cmd_db {
  +    my ($cfg) = @_;
  +
  +    #   command line parsing
  +    my $opt = {
  +        -help => 0,
  +        -revision => 0,
  +    };
  +    my $p = new Getopt::Long::Parser;
  +    $p->configure("bundling");
  +    $p->getoptions(
  +        'h|help'       => \$opt->{-help},
  +        'r|revision=i' => \$opt->{-revision},
  +    ) || die "option parsing failed";
  +    undef $p;
  +    if ($opt->{-help}) {
  +        print "Usage: ase.pl db <database-file>\n" .
  +              "Available options:\n" .
  +              " -h,--help         print out this usage page\n" .
  +              " -r,--revision=NUM database revision\n";
  +        exit(0);
  +    }
  +    if (@ARGV != 1) {
  +        print STDERR "ase.pl:db:ERROR: invalid number of arguments\n";
  +        exit(1);
  +    }
  +    my $db_file = shift @ARGV;
  +
  +    #   determine current time
  +    my $now = POSIX::strftime("%Y%m%d%H%M%S", gmtime(time()));
   
  -#   helper function for generating random string
  -sub makerandom {
  -    my ($n, $set) = @_;
  -    my $rnd = '';
  -    $set =~ s/(.)-(.)/join('', $1..$2)/sge;
  -    for (my $i = 0; $i < $n; $i++) {
  -        $rnd .= substr($set, int(rand(length($set))), 1);
  +    #   read current database definition
  +    my $sql < io($cfg->{-path_libdir}."/ase.sql")
  +        or die "unable to read SQL data definition file \"ase.sql\"";
  +    my ($rev_latest) = ($sql =~ m/--\s+CREATE\s+(\d+)/s);
  +    $opt->{-revision} = $rev_latest if ($opt->{-revision} == 0);
  +    die "requested database revision \"".$opt->{-revision}."\" out of range"
  +        if ($opt->{-revision} < 1 or $opt->{-revision} > $rev_latest);
  +    
  +    #   read current database definition
  +    my $M = {};
  +    $sql =~ s/--[ \t]+(CREATE|UPGRADE|DOWNGRADE)\s+(\d+<-\d+|\d+->\d+|\d+)(.+?)(?:(?=--[ \t]+(CREATE|UPGRADE|DOWNGRADE))|$)/&parse_junk($M, $1, $2, $3), ''/sge;
  +    sub parse_junk {
  +        my ($M, $mode, $revision, $sql) = @_;
  +        $sql =~ s|^\s*--\s+.+?$||mg;
  +        $sql =~ s|\n+|\n|sg;
  +        $revision =~ s/^\d+->(\d+)$/$1/s;
  +        $revision =~ s/^(\d+)<-\d+$/$1/s;
  +        foreach my $cmd (split(/(?<=[^\\];)\s*/, $sql)) {
  +            $M->{$revision}->{"-".lc($mode)} = [] if (not exists $M->{$revision}->{"-".lc($mode)});
  +            push(@{$M->{$revision}->{"-".lc($mode)}}, $cmd);
  +        }
       }
  -    return $rnd;
  -}
   
  -#   helper function for generating encrypted passwords
  -sub makepasswords {
  -    my ($plaintext) = @_;
  -    my $pw = {};
  -
  -    #   Plain Text
  -    $pw->{-plaintext} = $plaintext;
  -
  -    #   generate random salt
  -    my $salt = &makerandom(8, "./0-9A-Za-z");
  -
  -    #   Unix crypt(3) (both salted DES and MD5)
  -    $pw->{-cryptdes} = Crypt::UnixCrypt::crypt($pw->{-plaintext}, substr($salt, 0, 2));
  -    $pw->{-cryptmd5} = Crypt::PasswdMD5::unix_md5_crypt($pw->{-plaintext}, $salt);
  -
  -    #   Plain MD5
  -    my $md5 = new Digest::MD5;
  -    $md5->add($pw->{-plaintext});
  -    $pw->{-md5} = $md5->hexdigest;
  -    undef $md5;
  -
  -    #   Plain SHA-1
  -    my $sha1 = new Digest::SHA1;
  -    $sha1->add($pw->{-plaintext});
  -    $pw->{-sha1} = $sha1->hexdigest;
  -    undef $sha1;
  +    #   connect to database
  +    my $db_init = (-f $db_file ? 0 : 1);
  +    my $db = DBIx::Simple->connect(
  +        "dbi:SQLite:dbname=$db_file", "", "",
  +        { RaiseError => 0, AutoCommit => 1 }
  +    );
  +
  +    #   create initial database (with latest revision)
  +    if ($db_init) {
  +        print STDERR "++ creating database (revision $rev_latest)\n";
  +        $db->begin_work() or die $db->error();
  +        foreach my $cmd (@{$M->{$rev_latest}->{-create}}) {
  +            $db->query($cmd) or die $db->error();
  +        }
  +        $db->commit() or die $db->error();
  +    }
   
  -    return $pw;
  -}
  +    #   determine new/requested revision
  +    my $rev_new = $opt->{-revision} || $rev_latest;
   
  -#   establish database object
  -my $dbi = DBI->connect(
  -    "dbi:SQLite:dbname=ase.db", "", "",
  -    { RaiseError => 1, AutoCommit => 1 }
  -);
  -die "failed to connect to database \"ase.db\""
  -    if (not defined($dbi));
  -
  -#   lookup member in database 
  -my $sth = $dbi->prepare(
  -    "SELECT * FROM ase_member" .
  -    " WHERE me_address = ?;")
  -    or die $dbi->errstr();
  -$sth->execute($username)
  -    or die $dbi->errstr();
  -my $rec = $sth->fetchrow_hashref();
  -if (not defined($rec)) {
  -    print STDERR "Unknown login\n";
  -    exit(1);
  -}
  +    #   determine old/existing revision
  +    my ($rev_old) = $db->query(q{
  +        SELECT cf_value FROM ase_config WHERE cf_name = 'revision'
  +    })->list() || ($db_init ? $rev_latest : "1");
  +
  +    #   upgrade or downgrade database accordingly
  +    $db->begin_work() or die $db->error();
  +    while (1) {
  +        if ($rev_old < $rev_new) {
  +            #   upgrade database
  +            print STDERR "++ upgrading database (revision $rev_old -> ".($rev_old+1).")\n";
  +            $rev_old++;
  +            foreach my $cmd (@{$M->{$rev_old}->{-upgrade}}) {
  +                $db->query($cmd) or die $db->error();
  +            }
  +        }
  +        elsif ($rev_old > $rev_new) {
  +            #   downgrade database
  +            print STDERR "++ downgrading database (revision $rev_old -> ".($rev_old-1).")\n";
  +            $rev_old--;
  +            foreach my $cmd (@{$M->{$rev_old}->{-downgrade}}) {
  +                $db->query($cmd) or die $db->error();
  +            }
  +        }
  +        else {
  +            last;
  +        }
  +    }
  +    my ($n) = $db->query(q{ SELECT COUNT(*) FROM ase_config; })->list();
  +    if (defined $n and $n > 0) {
  +        $db->query(q{
  +            UPDATE ase_config SET cf_value = ? WHERE cf_name = 'revision';
  +        }, $rev_new) or die $db->error();
  +        $db->query(q{
  +            UPDATE ase_config SET cf_value = ? WHERE cf_name = 'created' AND cf_value = '';
  +        }, $now) or die $db->error();
  +        $db->query(q{
  +            UPDATE ase_config SET cf_value = ? WHERE cf_name = 'modified';
  +        }, $now) or die $db->error();
  +    }
  +    elsif (defined $n and $n == 0) {
  +        $db->query(q{
  +            INSERT INTO ase_config (cf_name, cf_value) VALUES ('revision', ?);
  +        }, $rev_new) or die $db->error();
  +        $db->query(q{
  +            INSERT INTO ase_config (cf_name, cf_value) VALUES ('created', ?);
  +        }, $now) or die $db->error();
  +        $db->query(q{
  +            INSERT INTO ase_config (cf_name, cf_value) VALUES ('modified', ?);
  +        }, $now) or die $db->error();
  +    }
  +    $db->commit() or die $db->error();
  +
  +    #   perform database compactification
  +    $db->query(q{ VACUUM });
   
  -#   disconnect from database
  -undef $sth;
  -$dbi->disconnect();
  -
  -#   verify password
  -my $pw = &makepasswords($password);
  -my $type = $opt->{-type};
  -my $ok = 0;
  -eval "\$ok = \$pw->{-$type} eq \$rec->{'me_access_pw_$type'};";
  -
  -#   give results
  -if (not $opt->{-quiet}) {
  -    print STDOUT ($ok ? "OK" : "BAD")."\n";
  +    #   disconnect from database
  +    $db->disconnect();
  +    undef $db;
  +    return 0;
   }
  -exit($ok ? 0 : 1);
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.sql
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 ase.sql
  --- ossp-pkg/ase/ase.sql	23 Mar 2007 17:24:06 -0000	1.15
  +++ ossp-pkg/ase/ase.sql	27 Mar 2007 11:06:31 -0000	1.16
  @@ -21,9 +21,13 @@
   --  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
   --  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
   --
  ---  ase.sql: OSSP ase database schema (REVISION: 2)
  +--  ase.sql: OSSP ase database schema
   --
   
  +--  ----------------------------------------------------------------------- --
  +--                             CREATE 2
  +--  ----------------------------------------------------------------------- --
  +
   --  Database Information
   CREATE TABLE ase_config (
       -- Unique Key (primary)
  @@ -225,3 +229,170 @@
                                  -- [20050225000000]
   );
   
  +--  ----------------------------------------------------------------------- --
  +--                             UPGRADE 1->2
  +--  ----------------------------------------------------------------------- --
  +
  +CREATE TABLE ase_config (
  +    cf_name                    TEXT UNIQUE NOT NULL PRIMARY KEY, 
  +    cf_value                   TEXT NOT NULL
  +);
  +
  +CREATE TABLE ase_member_NEW (
  +    me_uuid                    TEXT UNIQUE NOT NULL PRIMARY KEY, 
  +    me_nickname                TEXT,
  +    me_address                 TEXT UNIQUE NOT NULL,
  +    me_name                    TEXT,
  +    me_account_status          CHAR(1) NOT NULL,
  +    me_account_status_reason   TEXT,
  +    me_account_lock            INTEGER,
  +    me_account_lock_reason     TEXT,
  +    me_membership_karma        INTEGER NOT NULL,
  +    me_membership_prop         CHAR(4) NOT NULL,
  +    me_membership_type         CHAR(1) NOT NULL,
  +    me_membership_start        INTEGER,
  +    me_membership_end          INTEGER,
  +    me_access_pw_sha1          TEXT NOT NULL,
  +    me_access_pw_md5           TEXT NOT NULL,
  +    me_access_pw_cryptmd5      TEXT NOT NULL,
  +    me_access_pw_cryptdes      TEXT NOT NULL
  +);
  +
  +INSERT INTO ase_member_NEW
  +    SELECT
  +    me_uuid,              
  +    "",                        -- me_nickname: added
  +    me_address,
  +    me_name,
  +    1,                         -- me_account_status: added
  +    NULL,                      -- me_account_status_reason: added
  +    NULL,                      -- me_account_lock: added
  +    NULL,                      -- me_account_lock_reason: added
  +    me_membership_status,      -- renamed to me_membership_karma
  +    "",                        -- me_membership_prop: added
  +    me_membership_type,
  +    me_membership_start,
  +    me_membership_end,
  +    me_access_pw_sha1,
  +    me_access_pw_md5,
  +    me_access_pw_cryptmd5,
  +    me_access_pw_cryptdes
  +    FROM ase_member;
  +DROP  TABLE ase_member;
  +ALTER TABLE ase_member_NEW
  +    RENAME TO ase_member;
  +
  +CREATE TABLE ase_enrollment_NEW (
  +    en_uuid                    TEXT NOT NULL, 
  +    en_nickname                TEXT,
  +    en_address                 TEXT NOT NULL,
  +    en_name                    TEXT,
  +    en_pw_sha1                 TEXT NOT NULL,
  +    en_pw_md5                  TEXT NOT NULL,
  +    en_pw_cryptmd5             TEXT NOT NULL,
  +    en_pw_cryptdes             TEXT NOT NULL,
  +    en_start                   INTEGER NOT NULL,
  +    en_penalty                 INTEGER NOT NULL,
  +    en_expiry                  INTEGER NOT NULL
  +);
  +INSERT INTO ase_enrollment_NEW
  +    SELECT
  +    en_uuid, 
  +    "",                        -- en_nickname: added 
  +    en_address,
  +    en_name,
  +    en_pw_sha1,
  +    en_pw_md5,
  +    en_pw_cryptmd5,
  +    en_pw_cryptdes,
  +    en_start,
  +    en_start + 100,            -- en_penalty: added
  +    en_expiry
  +    FROM ase_enrollment;
  +DROP  TABLE ase_enrollment;
  +ALTER TABLE ase_enrollment_NEW
  +    RENAME TO ase_enrollment;
  +
  +CREATE TABLE ase_recovery (
  +    re_uuid                    TEXT NOT NULL, 
  +    re_address                 TEXT NOT NULL,
  +    re_key                     TEXT NOT NULL, 
  +    re_start                   INTEGER NOT NULL,
  +    re_penalty                 INTEGER NOT NULL,
  +    re_expiry                  INTEGER NOT NULL
  +);
  +
  +CREATE TABLE ase_login (
  +    lo_uuid                    TEXT NOT NULL,
  +    lo_time                    INTEGER NOT NULL,
  +    lo_success                 INTEGER NOT NULL
  +);
  +
  +--  ----------------------------------------------------------------------- --
  +--                             DOWNGRADE 1<-2
  +--  ----------------------------------------------------------------------- --
  +
  +DROP TABLE ase_config;
  +
  +CREATE TABLE ase_member_NEW (
  +    me_uuid                    TEXT UNIQUE NOT NULL PRIMARY KEY, 
  +    me_address                 TEXT UNIQUE NOT NULL,
  +    me_name                    TEXT,
  +    me_membership_status       INTEGER NOT NULL,
  +    me_membership_type         CHAR(1) NOT NULL,
  +    me_membership_start        INTEGER,
  +    me_membership_end          INTEGER,
  +    me_access_pw_sha1          TEXT NOT NULL,
  +    me_access_pw_md5           TEXT NOT NULL,
  +    me_access_pw_cryptmd5      TEXT NOT NULL,
  +    me_access_pw_cryptdes      TEXT NOT NULL
  +);
  +INSERT INTO ase_member_NEW
  +    SELECT
  +    me_uuid,              
  +    me_address,
  +    me_name,
  +    me_membership_karma,       -- renamed from me_membership_status
  +    me_membership_type,
  +    me_membership_start,
  +    me_membership_end,
  +    me_access_pw_sha1,
  +    me_access_pw_md5,
  +    me_access_pw_cryptmd5,
  +    me_access_pw_cryptdes
  +    FROM ase_member;
  +DROP  TABLE ase_member;
  +ALTER TABLE ase_member_NEW
  +    RENAME TO ase_member;
  +
  +CREATE TABLE ase_enrollment_NEW (
  +    en_uuid                    TEXT NOT NULL, 
  +    en_address                 TEXT NOT NULL,
  +    en_name                    TEXT,
  +    en_pw_sha1                 TEXT NOT NULL,
  +    en_pw_md5                  TEXT NOT NULL,
  +    en_pw_cryptmd5             TEXT NOT NULL,
  +    en_pw_cryptdes             TEXT NOT NULL,
  +    en_start                   INTEGER NOT NULL,
  +    en_expiry                  INTEGER NOT NULL
  +);
  +INSERT INTO ase_enrollment_NEW
  +    SELECT
  +    en_uuid, 
  +    en_address,
  +    en_name,
  +    en_pw_sha1,
  +    en_pw_md5,
  +    en_pw_cryptmd5,
  +    en_pw_cryptdes,
  +    en_start,
  +    en_expiry
  +    FROM ase_enrollment;
  +DROP  TABLE ase_enrollment;
  +ALTER TABLE ase_enrollment_NEW
  +    RENAME TO ase_enrollment;
  +
  +DROP TABLE ase_recovery;
  +
  +DROP TABLE ase_login;
  +
  @@ .

From ossp-cvs-owner@ossp.org  Tue Mar 27 13:14:07 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 98146752861; Tue, 27 Mar 2007 13:14:07 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.resign.pl
Message-Id: <20070327111407.98146752861@mail.ossp.org>
Date: Tue, 27 Mar 2007 13:14:07 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   27-Mar-2007 13:14:07
  Branch: HEAD                             Handle: 2007032712140700

  Modified files:
    ossp-pkg/ase            ase.cgi.resign.pl

  Log:
    cosmetics

  Summary:
    Revision    Changes     Path
    1.6         +6  -6      ossp-pkg/ase/ase.cgi.resign.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.resign.pl
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ase.cgi.resign.pl
  --- ossp-pkg/ase/ase.cgi.resign.pl	23 Mar 2007 09:23:41 -0000	1.5
  +++ ossp-pkg/ase/ase.cgi.resign.pl	27 Mar 2007 11:14:07 -0000	1.6
  @@ -75,15 +75,15 @@
   
           #   initial hint
           $html .=
  -            "In case you no longer wish to be affiliated with " . $cfg->{-cfg}->{"project-name"} . " you can " .
  -            "resign from " . $cfg->{-cfg}->{"service-name"} . ".\n" .
  +            "In case you no longer wish to be affiliated with " . $cfg->{-cfg}->{"project-name"} . "\n" .
  +            "you can resign from " . $cfg->{-cfg}->{"service-name"} . ".\n" .
               "But please notice that this means your account will be deleted.\n" .
               "No resurrection is possible afterwards, but you can enroll from scratch, of course.\n" .
               "<p/>\n" .
  -            "To prevent highjackers from deleting your account on a still open " .
  -            "browser session, you have to explicitly confirm the account deletion " .
  -            "by entering your password. In case you no longer know your password," .
  -            "you can perform a password recovery first.\n";
  +            "To prevent highjackers from deleting your account on a still open\n" .
  +            "browser session, you have to explicitly confirm the account deletion\n" .
  +            "by entering your password. In case you no longer know your password,\n" .
  +            "you have to perform a password recovery first.\n";
   
           #   generate the inner canvas
           $html .=
  @@ .

From ossp-cvs-owner@ossp.org  Tue Mar 27 13:21:11 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 4835375291E; Tue, 27 Mar 2007 13:21:11 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.enroll.pl ase.cgi.profile.pl ase.sql
Message-Id: <20070327112111.4835375291E@mail.ossp.org>
Date: Tue, 27 Mar 2007 13:21:11 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   27-Mar-2007 13:21:11
  Branch: HEAD                             Handle: 2007032712211000

  Modified files:
    ossp-pkg/ase            ase.cgi.enroll.pl ase.cgi.profile.pl ase.sql

  Log:
    do not allow missing membership start date but use a not existing end
    date by default

  Summary:
    Revision    Changes     Path
    1.34        +1  -1      ossp-pkg/ase/ase.cgi.enroll.pl
    1.16        +1  -1      ossp-pkg/ase/ase.cgi.profile.pl
    1.17        +2  -2      ossp-pkg/ase/ase.sql
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	23 Mar 2007 09:23:41 -0000	1.33
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	27 Mar 2007 11:21:10 -0000	1.34
  @@ -502,7 +502,7 @@
       #   create new membership account
       my $now     = time();
       my $t_start = $self->datetime($now);
  -    my $t_end   = $self->datetime($now+365*24*60*60);
  +    my $t_end   = undef;
       $dbi->query(q{
           INSERT INTO ase_member
           (me_uuid, me_name, me_nickname, me_address,
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.profile.pl
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 ase.cgi.profile.pl
  --- ossp-pkg/ase/ase.cgi.profile.pl	23 Mar 2007 07:32:50 -0000	1.15
  +++ ossp-pkg/ase/ase.cgi.profile.pl	27 Mar 2007 11:21:10 -0000	1.16
  @@ -110,7 +110,7 @@
           "  </tr>\n" .
           "  <tr>\n" .
           "    <td class=\"L\"><span class=\"label\">Membership End:</span></td>\n" .
  -        "    <td class=\"I\">". $self->datetime2str($rec->{'me_membership_end'}) ."</td>\n" .
  +        "    <td class=\"I\">". (defined $rec->{'me_membership_end'} ? $self->datetime2str($rec->{'me_membership_end'}) : "(never)") ."</td>\n" .
           "  </tr>\n" .
           "</table>\n";
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.sql
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 ase.sql
  --- ossp-pkg/ase/ase.sql	27 Mar 2007 11:06:31 -0000	1.16
  +++ ossp-pkg/ase/ase.sql	27 Mar 2007 11:21:10 -0000	1.17
  @@ -83,7 +83,7 @@
       me_membership_type         CHAR(1) NOT NULL,
                                  -- Membership Type Value: N=natural, J=juristic
                                  -- [N]
  -    me_membership_start        INTEGER,
  +    me_membership_start        INTEGER NOT NULL,
                                  -- Membership Start Date
                                  -- [20050209]
       me_membership_end          INTEGER,
  @@ -250,7 +250,7 @@
       me_membership_karma        INTEGER NOT NULL,
       me_membership_prop         CHAR(4) NOT NULL,
       me_membership_type         CHAR(1) NOT NULL,
  -    me_membership_start        INTEGER,
  +    me_membership_start        INTEGER NOT NULL,
       me_membership_end          INTEGER,
       me_access_pw_sha1          TEXT NOT NULL,
       me_access_pw_md5           TEXT NOT NULL,
  @@ .

From ossp-cvs-owner@ossp.org  Tue Mar 27 14:54:47 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 0E80275292F; Tue, 27 Mar 2007 14:54:47 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.enroll.pl
Message-Id: <20070327125447.0E80275292F@mail.ossp.org>
Date: Tue, 27 Mar 2007 14:54:47 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   27-Mar-2007 14:54:46
  Branch: HEAD                             Handle: 2007032713544600

  Modified files:
    ossp-pkg/ase            ase.cgi.enroll.pl

  Log:
    cleanup and fix enrollment

  Summary:
    Revision    Changes     Path
    1.35        +3  -3      ossp-pkg/ase/ase.cgi.enroll.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	27 Mar 2007 11:21:10 -0000	1.34
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	27 Mar 2007 12:54:46 -0000	1.35
  @@ -262,7 +262,7 @@
           $error = 1;
       }
       if ($nickname !~ m/^(?:|[a-z][a-z0-9]{3,})$/) {
  -        $self->logbook("invalid nickname: \"%s\"", $address);
  +        $self->logbook("invalid nickname: \"%s\"", $nickname);
           $cgi->param('nickname.error', 'Invalid Nickname: has to be empty or match "^[a-z][a-z0-9]{3,}"');
           $error = 1;
       }
  @@ -325,7 +325,7 @@
               SELECT * FROM ase_member WHERE me_nickname = ?;
           }, $nickname)->hash());
           if (defined($rec)) {
  -            $self->logbook("nickname \"%s\" already in use", $address);
  +            $self->logbook("nickname \"%s\" already in use", $nickname);
               $cgi->param('nickname.error', "nickname already in use since " .
                   $self->datetime2str($rec->{'me_membership_start'}) . " (enrollment already successful)");
               $error = 1;
  @@ -390,7 +390,7 @@
            en_name, en_nickname, en_address, en_pw_sha1, en_pw_md5, en_pw_cryptmd5, en_pw_cryptdes,
            en_start, en_penalty, en_expiry)
           VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
  -    },  $me_uuid, $name, $nickname ne '' ? $nickname : undef, $address,
  +    },  $me_uuid, $name, ($nickname ne '' ? $nickname : undef), $address,
           $pw->{-sha1}, $pw->{-md5}, $pw->{-cryptmd5}, $pw->{-cryptdes}, 
           $t_start, $t_penalty, $t_expiry
       ) or die $dbi->error();
  @@ .

From ossp-cvs-owner@ossp.org  Tue Mar 27 14:56:03 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 9965675292F; Tue, 27 Mar 2007 14:56:03 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ChangeLog TODO ase.cgi.profile.pl
Message-Id: <20070327125603.9965675292F@mail.ossp.org>
Date: Tue, 27 Mar 2007 14:56:03 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   27-Mar-2007 14:56:03
  Branch: HEAD                             Handle: 2007032713560300

  Modified files:
    ossp-pkg/ase            ChangeLog TODO ase.cgi.profile.pl

  Log:
    Add profile editing support.

  Summary:
    Revision    Changes     Path
    1.11        +3  -0      ossp-pkg/ase/ChangeLog
    1.36        +1  -2      ossp-pkg/ase/TODO
    1.17        +314 -146   ossp-pkg/ase/ase.cgi.profile.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 ChangeLog
  --- ossp-pkg/ase/ChangeLog	27 Mar 2007 11:06:30 -0000	1.10
  +++ ossp-pkg/ase/ChangeLog	27 Mar 2007 12:56:03 -0000	1.11
  @@ -13,6 +13,9 @@
   
     Changes between 0.1.x and 0.2.0 (xx-Oct-2005 to 20-Mar-2007)
   
  +   o Add profile editing support.
  +     [Ralf S. Engelschall]
  +
      o Revamp ase.pl into a new CLI which now provides
        database creation, upgrade and downgrade functionality.
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 TODO
  --- ossp-pkg/ase/TODO	27 Mar 2007 11:06:31 -0000	1.35
  +++ ossp-pkg/ase/TODO	27 Mar 2007 12:56:03 -0000	1.36
  @@ -2,8 +2,7 @@
   TODO:
   - heartbeat -> disable
   - cron: active (on every login), mail, inactive (after n months), mail, deleted
  -- add profile editing support (especially to allow changing the nickname)
  -  and use this as the step 4 of the recovery procedure
  +- use edit profile for step 4 of the recovery procedure
   - check URL fetching and its caching because of DBIx::Simple:
     http://cvs.ossp.org/filediff?f=ossp-pkg/ase/ase.cgi.util.pl&v1=1.15&v2=1.16
     It could be that the "DBI::SQL_BLOB" is important!!! But DBIx::Simple
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.profile.pl
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 ase.cgi.profile.pl
  --- ossp-pkg/ase/ase.cgi.profile.pl	27 Mar 2007 11:21:10 -0000	1.16
  +++ ossp-pkg/ase/ase.cgi.profile.pl	27 Mar 2007 12:56:03 -0000	1.17
  @@ -38,25 +38,34 @@
       my $session = $self->param(-session);
   
       #   generate the outer canvas
  -    $html .= "<div class=\"ase_boxed\">\n";
  -    $html .= "<span class=\"title\">Main Menu</span>\n";
  -    $html .= $cgi->start_form(
  -        -method => 'POST',
  -        -action => $self->url(),
  -        -class  => 'menu',
  -    ) . "\n";
  -    $html .= $cgi->hidden(
  -        -name     => 'mode',
  -        -value    => 'menu-action',
  -        -override => 1
  -    ) . "\n";
  -    $html->fold("canvas");
  -    $html .= $cgi->end_form() . "\n";
  +    my $canvas = sub {
  +        my ($self, $cgi, $html) = @_;
  +        $html .= "<div class=\"ase_boxed\">\n";
  +        $html .= "<span class=\"title\">Main Menu</span>\n";
  +        $html .= $cgi->start_form(
  +            -method => 'POST',
  +            -action => $self->url(),
  +            -class  => 'menu',
  +        ) . "\n";
  +        $html .= $cgi->hidden(
  +            -name     => 'mode',
  +            -value    => 'menu-action',
  +            -override => 1
  +        ) . "\n";
  +        $html->fold("canvas");
  +        $html .= $cgi->end_form() . "\n";
  +        $html .= "</div>\n";
  +        $html >> "canvas";
  +
  +        #   insert navigation tab
  +        $self->menu_tab("menu-profile");
  +    };
  +
  +    #   insert style container
  +    $html .= "<div class=\"profile\">\n";
  +    $html->fold();
       $html .= "</div>\n";
  -    $html >> "canvas";
  -
  -    #   insert navigation tab
  -    $self->menu_tab("menu-profile");
  +    $html->divert();
   
       #   take membership UUID from session
       my $me_uuid = $session->param("login");
  @@ -74,138 +83,297 @@
       my $me_type = ("Natural Person", "Juristic Person")
           [$rec->{'me_membership_type'} || 0];
   
  -    $html .=
  -        "<table class=\"F\">\n" .
  -        "  <tr>\n" .
  -        "    <td class=\"L\"><span class=\"label\">Your Name:</span></td>\n" .
  -        "    <td class=\"I\">". $rec->{"me_name"} ."</td>\n" .
  -        "  </tr>\n" .
  -        "  <tr>\n" .
  -        "    <td class=\"L\"><span class=\"label\">Your Nickname:</span></td>\n" .
  -        "    <td class=\"I\">". (defined $rec->{"me_nickname"} ? $rec->{"me_nickname"} : "(none)") ."</td>\n" .
  -        "  </tr>\n" .
  -        "  <tr>\n" .
  -        "    <td class=\"L\"><span class=\"label\">Your Email Address:</span></td>\n" .
  -        "    <td class=\"I\">". $rec->{"me_address"} ."</td>\n" .
  -        "  </tr>\n" .
  -        "  <tr>\n" .
  -        "    <td class=\"L\"><span class=\"label\">Membership UUID:</span></td>\n" .
  -        "    <td class=\"I\">". $me_uuid ."</td>\n" .
  -        "  </tr>\n" .
  -        "  <tr>\n" .
  -        "    <td class=\"L\"><span class=\"label\">Membership Karma:</span></td>\n" .
  -        "    <td class=\"I\">". $me_karma ."</td>\n" .
  -        "  </tr>\n" .
  -        "  <tr>\n" .
  -        "    <td class=\"L\"><span class=\"label\">Membership Properties:</span></td>\n" .
  -        "    <td class=\"I\">". $me_prop ."</td>\n" .
  -        "  </tr>\n" .
  -        "  <tr>\n" .
  -        "    <td class=\"L\"><span class=\"label\">Membership Type:</span></td>\n" .
  -        "    <td class=\"I\">". $me_type ."</td>\n" .
  -        "  </tr>\n" .
  -        "  <tr>\n" .
  -        "    <td class=\"L\"><span class=\"label\">Membership Start:</span></td>\n" .
  -        "    <td class=\"I\">". $self->datetime2str($rec->{'me_membership_start'}) ."</td>\n" .
  -        "  </tr>\n" .
  -        "  <tr>\n" .
  -        "    <td class=\"L\"><span class=\"label\">Membership End:</span></td>\n" .
  -        "    <td class=\"I\">". (defined $rec->{'me_membership_end'} ? $self->datetime2str($rec->{'me_membership_end'}) : "(never)") ."</td>\n" .
  -        "  </tr>\n" .
  -        "</table>\n";
  -
  -    return;
  -}
  -
  -#   application run-time mode processing: "menu-member"
  -sub mode_menu_member_screen {
  -    my $self    = shift;
  -    my $cgi     = $self->param(-cgi);
  -    my $dbi     = $self->param(-dbi);
  -    my $html    = $self->param(-html);
  -    my $session = $self->param(-session);
  -
  -    #   generate the outer canvas
  -    $html .= "<div class=\"ase_boxed\">\n";
  -    $html .= "<span class=\"title\">Main Menu</span>\n";
  -    $html .= $cgi->start_form(
  -        -method => 'POST',
  -        -action => $self->url(),
  -        -class  => 'menu',
  -    ) . "\n";
  -    $html .= $cgi->hidden(
  -        -name     => 'mode',
  -        -value    => 'menu-member-action',
  -        -override => 1
  -    ) . "\n";
  -    $html->fold("canvas");
  -    $html .= $cgi->end_form() . "\n";
  -    $html .= "</div>\n";
  -    $html >> "canvas";
  -
  -    #   insert navigation tab
  -    $self->menu_tab("menu-member");
  -
  -    #   take membership UUID from session
  -    my $me_uuid = $session->param("login");
  -
  -    #   fetch remaining member details from database
  -    (my $rec = $dbi->query(q{
  -        SELECT * FROM ase_member WHERE me_uuid = ?;
  -    }, $me_uuid)->hash()) or die "no member found under UUID $me_uuid";
  -
  -    #   determine name of membership karma
  -    my $me_karma = (qw(Enrolling Fellow Member Activist Director President))
  -        [$rec->{'me_membership_karma'} || 0];
  -
  -    $html .= "<table class=\"F\">\n";
  -    $html .=
  -        "  <tr>\n" .
  -        "    <td class=\"L\"><span class=\"label\">"."foo".":</span></td>\n" .
  -        "    <td class=\"I\">"."foo"."</td>\n" .
  -        "  </tr>\n";
  -    $html .= "</table>\n";
  -
  -    #   render member edit form
  -    $self->use("CGI::FormBuilder");
  -    my $form = new CGI::FormBuilder (
  -        "fields"   => [qw(me_sn me_uuid me_nickname me_address me_membership_karma me_membership_prop me_gender)],
  -        "method"   => "POST",
  -        "values"   => $rec,
  -        "header"   => 0,
  -        "action"   => $self->url(),
  -        "class"    => "menu",
  -        "template" => &render,
  -    );
  -    $form->field(
  -        "name"     => "me_membership_karma",
  -        "label"    => "Membership Karma",
  -        "options"  => [
  -            [ "0" => "enrolling" ],
  -            [ "1" => "fellow"    ],
  -            [ "2" => "member"    ],
  -            [ "3" => "activist"  ],
  -            [ "4" => "director"  ],
  -            [ "5" => "president" ],
  -        ],
  -    );
  -    sub render {
  -        my ($form) = @_;
  +    #   determine action and dispatch accordingly
  +    my $action = ($cgi->param("action") || "view");
  +    if ($action eq "view") {
  +        ##
  +        ##  view profile details
  +        ##
  +        
  +        #   generate canvas
  +        $canvas->($self, $cgi, $html);
  +
  +        #   generate layout table
  +        $html .=
  +            "<table class=\"F\">\n" .
  +            "  <tr>\n" .
  +            "    <td class=\"L\"><span class=\"label\">Your Name:</span></td>\n" .
  +            "    <td class=\"I\">". $rec->{"me_name"} ."</td>\n" .
  +            "  </tr>\n" .
  +            "  <tr>\n" .
  +            "    <td class=\"L\"><span class=\"label\">Your Nickname:</span></td>\n" .
  +            "    <td class=\"I\">". (defined $rec->{"me_nickname"} ? $rec->{"me_nickname"} : "(none)") ."</td>\n" .
  +            "  </tr>\n" .
  +            "  <tr>\n" .
  +            "    <td class=\"L\"><span class=\"label\">Your Email Address:</span></td>\n" .
  +            "    <td class=\"I\">". $rec->{"me_address"} ."</td>\n" .
  +            "  </tr>\n" .
  +            "  <tr>\n" .
  +            "    <td class=\"L\"><span class=\"label\">Your Password:</span></td>\n" .
  +            "    <td class=\"I\">". "(one-way hashes hidden)" ."</td>\n" .
  +            "  </tr>\n" .
  +            "  <tr>\n" .
  +            "    <td class=\"L\"><span class=\"label\">Membership UUID:</span></td>\n" .
  +            "    <td class=\"I\">". $me_uuid ."</td>\n" .
  +            "  </tr>\n" .
  +            "  <tr>\n" .
  +            "    <td class=\"L\"><span class=\"label\">Membership Karma:</span></td>\n" .
  +            "    <td class=\"I\">". $me_karma ."</td>\n" .
  +            "  </tr>\n" .
  +            "  <tr>\n" .
  +            "    <td class=\"L\"><span class=\"label\">Membership Properties:</span></td>\n" .
  +            "    <td class=\"I\">". $me_prop ."</td>\n" .
  +            "  </tr>\n" .
  +            "  <tr>\n" .
  +            "    <td class=\"L\"><span class=\"label\">Membership Type:</span></td>\n" .
  +            "    <td class=\"I\">". $me_type ."</td>\n" .
  +            "  </tr>\n" .
  +            "  <tr>\n" .
  +            "    <td class=\"L\"><span class=\"label\">Membership Start:</span></td>\n" .
  +            "    <td class=\"I\">". $self->datetime2str($rec->{'me_membership_start'}) ."</td>\n" .
  +            "  </tr>\n" .
  +            "  <tr>\n" .
  +            "    <td class=\"L\"><span class=\"label\">Membership End:</span></td>\n" .
  +            "    <td class=\"I\">". (defined $rec->{'me_membership_end'} ? $self->datetime2str($rec->{'me_membership_end'}) : "(never)") ."</td>\n" .
  +            "  </tr>\n" .
  +            "</table>\n";
  +
  +        #   generate edit button
  +        $html .= "<p/>";
  +        $html .= "<a class=\"button\" href=\"".$self->url(-mode => "menu-profile", -action => "edit")."\">Edit Profile</a>\n";
  +    }
  +    elsif ($action eq "edit") {
  +        ##
  +        ##  edit profile details
  +        ##
  +
  +        #   generate canvas
  +        $canvas->($self, $cgi, $html);
  +
  +        #   generate the outer canvas
  +        $html .= $cgi->start_form(
  +            -method => 'POST',
  +            -action => $self->url(),
  +            -class  => 'menu',
  +        ) . "\n";
  +        $html .= $cgi->hidden(
  +            -name     => 'mode',
  +            -value    => 'menu-profile',
  +            -override => 1
  +        ) . "\n";
  +        $html .= $cgi->hidden(
  +            -name     => 'action',
  +            -value    => 'save',
  +            -override => 1
  +        ) . "\n";
  +        $html->fold();
  +        $html .= $cgi->end_form() . "\n";
  +        $html->divert();
  +
  +        #   generate layout table
  +        $html .=
  +            "<table class=\"F\">\n" .
  +            "  <tr>\n" .
  +            "    <td class=\"L\"><span class=\"label\">Your Name:</span></td>\n" .
  +            "    <td class=\"I\">"; $html->fold("field-name"); $html .= "</td>\n" .
  +            "  </tr>\n" .
  +            "  <tr>\n" .
  +            "    <td class=\"L\"><span class=\"label\">Your Nickname:</span></td>\n" .
  +            "    <td class=\"I\">"; $html->fold("field-nickname"); $html .= "</td>\n" .
  +            "  </tr>\n" .
  +            "  <tr>\n" .
  +            "    <td class=\"L\"><span class=\"label\">Your Email Address:</span></td>\n" .
  +            "    <td class=\"I\">". $rec->{"me_address"} ."</td>\n" .
  +            "  </tr>\n" .
  +            "  <tr>\n" .
  +            "    <td class=\"L\"><span class=\"label\">Your NEW Password:</span></td>\n" .
  +            "    <td class=\"I\">"; $html->fold("field-password"); $html .= "</td>\n" .
  +            "  </tr>\n" .
  +            "  <tr>\n" .
  +            "    <td class=\"L\"><span class=\"label\">Membership UUID:</span></td>\n" .
  +            "    <td class=\"I\">". $me_uuid ."</td>\n" .
  +            "  </tr>\n" .
  +            "  <tr>\n" .
  +            "    <td class=\"L\"><span class=\"label\">Membership Karma:</span></td>\n" .
  +            "    <td class=\"I\">". $me_karma ."</td>\n" .
  +            "  </tr>\n" .
  +            "  <tr>\n" .
  +            "    <td class=\"L\"><span class=\"label\">Membership Properties:</span></td>\n" .
  +            "    <td class=\"I\">". $me_prop ."</td>\n" .
  +            "  </tr>\n" .
  +            "  <tr>\n" .
  +            "    <td class=\"L\"><span class=\"label\">Membership Type:</span></td>\n" .
  +            "    <td class=\"I\">". $me_type ."</td>\n" .
  +            "  </tr>\n" .
  +            "  <tr>\n" .
  +            "    <td class=\"L\"><span class=\"label\">Membership Start:</span></td>\n" .
  +            "    <td class=\"I\">". $self->datetime2str($rec->{'me_membership_start'}) ."</td>\n" .
  +            "  </tr>\n" .
  +            "  <tr>\n" .
  +            "    <td class=\"L\"><span class=\"label\">Membership End:</span></td>\n" .
  +            "    <td class=\"I\">". (defined $rec->{'me_membership_end'} ? $self->datetime2str($rec->{'me_membership_end'}) : "(never)") ."</td>\n" .
  +            "  </tr>\n" .
  +            "  <tr>\n" .
  +            "    <td>&nbsp;</td>\n" .
  +            "    <td>"; $html->fold("button-edit"); $html .= "</td>\n" .
  +            "  </tr>\n" .
  +            "</table>\n";
  +
  +        #   generate the input fields
  +        $html >> "field-name";
  +        $html .= $cgi->textfield(
  +            -id        => 'field_name',
  +            -class     => 'field',
  +            -name      => 'name',
  +            -default   => $rec->{"me_name"} || '',
  +            -size      => 40,
  +            -maxlength => 80,
  +        ) . "<br/>";
  +        $html .= "<span class=\"annotation\">(<i>firstname lastname</i>, e.g. \"John Doe\")</span><br/>\n";
  +        if (defined(my $error = $cgi->param("name.error"))) {
  +            $html .= "<span class=\"error\">$error</span><br/>\n";
  +        }
  +        $html << 1;
  +        $html >> "field-nickname";
  +        $html .= $cgi->textfield(
  +            -id        => 'field_nickname',
  +            -class     => 'field',
  +            -name      => 'nickname',
  +            -default   => $rec->{"me_nickname"} || '',
  +            -size      => 20,
  +            -maxlength => 40,
  +        ) . "<br/>";
  +        $html .= "<span class=\"annotation\">(<i>nickname</i>, e.g. \"john\")</span><br/>\n";
  +        if (defined(my $error = $cgi->param("nickname.error"))) {
  +            $html .= "<span class=\"error\">$error</span><br/>\n";
  +        }
  +        $html << 1;
  +        $html >> "field-password";
  +        $html .= $cgi->password_field(
  +            -id        => 'field_password',
  +            -class     => 'field',
  +            -name      => 'password',
  +            -default   => '',
  +            -size      => 22,
  +            -maxlength => 20,
  +        ) . "<br/>";
  +        $html .= "<span class=\"annotation\">(up to 20 characters)</span><br/>\n";
  +        if (defined(my $error = $cgi->param("password.error"))) {
  +            $html .= "<span class=\"error\">$error</span><br/>\n";
  +        }
  +        $html .= $cgi->password_field(
  +            -id        => 'field_password_verify',
  +            -class     => 'field',
  +            -name      => 'password_verify',
  +            -default   => '',
  +            -size      => 22,
  +            -maxlength => 20,
  +        ) . "<br/>";
  +        $html .= "<span class=\"annotation\">(retype password here for verification)</span><br/>\n";
  +        if (defined(my $error = $cgi->param("password_verify.error"))) {
  +            $html .= "<span class=\"error\">$error</span><br/>\n";
  +        }
  +        $html << 1;
  +        $html >> "button-edit";
  +        $html .= $cgi->submit(
  +            -class   => 'button',
  +            -id      => 'button_cancel',
  +            -name    => 'button.cancel',
  +            -value   => 'Cancel',
  +        );
  +        $html .= $cgi->submit(
  +            -class   => 'button',
  +            -id      => 'button_save',
  +            -name    => 'button.save',
  +            -value   => 'Save',
  +        );
  +        $html << 1;
  +    }
  +    elsif ($action eq "save") {
  +        ##
  +        ##  save updated profile details
  +        ##
  +
  +        #   determine form parameters
  +        my $name            = $cgi->param("name");
  +        my $nickname        = $cgi->param("nickname");
  +        my $password        = $cgi->param("password");
  +        my $password_verify = $cgi->param("password_verify");
  +
  +        #   verify form parameters
  +        my $error = 0;
  +        if ($name !~ m/\S+\s+\S+/) {
  +            $self->logbook("invalid name: \"%s\"", $name);
  +            $cgi->param('name.error', 'Invalid Name: not <i>firstname lastname</i>');
  +            $error = 1;
  +        }
  +        if ($nickname !~ m/^(?:|[a-z][a-z0-9]{3,})$/) {
  +            $self->logbook("invalid nickname: \"%s\"", $nickname);
  +            $cgi->param('nickname.error', 'Invalid Nickname: has to be empty or match "^[a-z][a-z0-9]{3,}"');
  +            $error = 1;
  +        }
  +        if ($password ne '' and $password !~ m/^.{6,}$/) {
  +            $self->logbook("invalid password: \"%s\"", $password);
  +            $cgi->param('password.error', 'Invalid Password: at least 6 characters required');
  +            $error = 1;
  +        }
  +        if ($password ne '' and $password_verify ne $password) {
  +            $cgi->param('password_verify.error', 'Invalid Verification Password: does not match Password');
  +            $error = 1;
  +        }
  +
  +        #   make sure the Nickname is still not used
  +        if ($nickname ne '' && not defined($cgi->param('nickname.error'))) {
  +            (my $rec2 = $dbi->query(q{
  +                SELECT * FROM ase_member WHERE me_nickname = ? AND me_uuid != ?;
  +            }, $nickname, $rec->{"me_uuid"})->hash());
  +            if (defined($rec2)) {
  +                $self->logbook("nickname \"%s\" already in use", $nickname);
  +                $cgi->param('nickname.error', "nickname already in use");
  +                $error = 1;
  +            }
  +        }
  +
  +        #   redirect to edit screen if errors occurred
  +        if ($error) {
  +            $cgi->param("action", "edit");
  +            return $self->forward("menu-profile");
  +        }
  +
  +        #   update profile
  +        if ($name ne $rec->{"me_name"}) {
  +            $dbi->query(q{
  +                UPDATE ase_member
  +                SET    me_name = ?
  +                WHERE  me_uuid = ?
  +            }, $name, $me_uuid);
  +        }
  +        if ($nickname ne $rec->{"me_nickname"}) {
  +            $dbi->query(q{
  +                UPDATE ase_member
  +                SET    me_nickname = ?
  +                WHERE  me_uuid     = ?
  +            }, ($nickname ne '' ? $nickname : undef), $me_uuid);
  +        }
  +        if ($password ne '') {
  +            my $pw = $self->makepasswords($password);
  +            $dbi->query(q{
  +                UPDATE ase_member
  +                SET    me_access_pw_sha1     = ?,
  +                       me_access_pw_md5      = ?,
  +                       me_access_pw_cryptmd5 = ?,
  +                       me_access_pw_cryptdes = ?
  +                WHERE  me_uuid               = ?
  +            }, $pw->{-sha1}, $pw->{-md5}, $pw->{-cryptmd5}, $pw->{-cryptdes}, $me_uuid);
  +        }
  +
  +        #   redirect to view screen
  +        $cgi->param("action", "view");
  +        return $self->forward("menu-profile");
       }
  -    $html .= $form->render();
   
       return;
   }
   
  -#   run-time mode screen action: "menu-member-action"
  -sub mode_menu_member_action {
  -    my $self    = shift;
  -    my $cgi     = $self->param(-cgi);
  -    my $dbi     = $self->param(-dbi);
  -    my $session = $self->param(-session);
  -
  -    return "FIXME";
  -}
  -
   1;
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Mar 27 14:59:42 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 7C72B75292F; Tue, 27 Mar 2007 14:59:42 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO
Message-Id: <20070327125942.7C72B75292F@mail.ossp.org>
Date: Tue, 27 Mar 2007 14:59:42 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   27-Mar-2007 14:59:42
  Branch: HEAD                             Handle: 2007032713594200

  Modified files:
    ossp-pkg/ase            TODO

  Log:
    cleanup todo

  Summary:
    Revision    Changes     Path
    1.37        +1  -3      ossp-pkg/ase/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.36 -r1.37 TODO
  --- ossp-pkg/ase/TODO	27 Mar 2007 12:56:03 -0000	1.36
  +++ ossp-pkg/ase/TODO	27 Mar 2007 12:59:42 -0000	1.37
  @@ -2,16 +2,14 @@
   TODO:
   - heartbeat -> disable
   - cron: active (on every login), mail, inactive (after n months), mail, deleted
  -- use edit profile for step 4 of the recovery procedure
   - check URL fetching and its caching because of DBIx::Simple:
     http://cvs.ossp.org/filediff?f=ossp-pkg/ase/ase.cgi.util.pl&v1=1.15&v2=1.16
     It could be that the "DBI::SQL_BLOB" is important!!! But DBIx::Simple
     doesn't provide this functionality...
  -- merge ase-pwreset.pl into ase.pl
   - info RPC page
  -- remove or disable dead code in ASE (profile)
   
   CANDO:
  +- use edit profile for step 3/4 of the recovery procedure
   - package ASE as OpenPKG package
   - add INSTALL document which shows how to link with webserver
   - addon attributes
  @@ .

From ossp-cvs-owner@ossp.org  Tue Mar 27 15:37:40 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id F27A775290D; Tue, 27 Mar 2007 15:37:39 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cfg ase.cgi.login.pl ase.cgi.util.pl
Message-Id: <20070327133739.F27A775290D@mail.ossp.org>
Date: Tue, 27 Mar 2007 15:37:39 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   27-Mar-2007 15:37:39
  Branch: HEAD                             Handle: 2007032714373900

  Modified files:
    ossp-pkg/ase            ase.cfg ase.cgi.login.pl ase.cgi.util.pl

  Log:
    allow abbreviated time specs

  Summary:
    Revision    Changes     Path
    1.8         +2  -2      ossp-pkg/ase/ase.cfg
    1.27        +5  -5      ossp-pkg/ase/ase.cgi.login.pl
    1.24        +21 -0      ossp-pkg/ase/ase.cgi.util.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cfg
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 ase.cfg
  --- ossp-pkg/ase/ase.cfg	23 Mar 2007 09:23:41 -0000	1.7
  +++ ossp-pkg/ase/ase.cfg	27 Mar 2007 13:37:39 -0000	1.8
  @@ -37,8 +37,8 @@
   #fetch-url-acl  q{^https?:\/\/\S+\.(?:ossp\.org|openpkg\.(?:org|com|net))};
   
   login-failures-max          3;
  -login-failures-time-range   2;
  -login-failures-time-penalty 10;
  +login-failures-time-range   2h;
  +login-failures-time-penalty 10h;
   
   instant-notification-urls   "http://localhost/ase/sample.cgi?mode=notify;uuid=%s";
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	23 Mar 2007 08:48:46 -0000	1.26
  +++ ossp-pkg/ase/ase.cgi.login.pl	27 Mar 2007 13:37:39 -0000	1.27
  @@ -277,11 +277,11 @@
           }, $me_uuid, $self->datetime(time()));
   
           #   intruder detection & prevention
  -        my $N = $cfg->{-cfg}->{"login-failures-max"};          # N failed logins...
  -        my $M = $cfg->{-cfg}->{"login-failures-time-range"};   # ...within M minutes...
  -        my $P = $cfg->{-cfg}->{"login-failures-time-penalty"}; # ...cause P minutes penalty.
  -        my $t1 = $self->datetime(time() - $M * 60);
  -        my $t2 = $self->datetime(time() + $P * 60);
  +        my $N = $cfg->{-cfg}->{"login-failures-max"};                            # N failed logins...
  +        my $M = $self->human2sec($cfg->{-cfg}->{"login-failures-time-range"});   # ...within M minutes...
  +        my $P = $self->human2sec($cfg->{-cfg}->{"login-failures-time-penalty"}); # ...cause P minutes penalty.
  +        my $t1 = $self->datetime(time() - $M);
  +        my $t2 = $self->datetime(time() + $P);
           my ($count) = $dbi->query(q{
               SELECT COUNT(*)
               FROM   ase_login
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.util.pl
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 ase.cgi.util.pl
  --- ossp-pkg/ase/ase.cgi.util.pl	23 Mar 2007 09:23:41 -0000	1.23
  +++ ossp-pkg/ase/ase.cgi.util.pl	27 Mar 2007 13:37:39 -0000	1.24
  @@ -295,6 +295,27 @@
       return $h;
   }
   
  +#   helper function for converting N<unit> representations to seconds
  +sub human2sec {
  +    my ($self, $h) = @_;
  +    my $s = 0;
  +    if ($h =~ m/^(\d+)([smhdwMy])$/) {
  +        $s = int($1) * {
  +            's' => 1,
  +            'm' => 60,
  +            'h' => 60*60,
  +            'd' => 60*60*24,
  +            'w' => 60*60*24*7,
  +            'M' => 60*60*24*(30.5),
  +            'y' => 60*60*24*365
  +        }->{$2};
  +    }
  +    else {
  +        $s = int($h);
  +    }
  +    return $s;
  +}
  +
   #   helper function for writing a logbook entry
   sub logbook ($$;@) {
       my ($self, $fmt, @args) = @_;
  @@ .

From ossp-cvs-owner@ossp.org  Tue Mar 27 15:58:21 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id F3D37752905; Tue, 27 Mar 2007 15:58:20 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.scode.pl
Message-Id: <20070327135820.F3D37752905@mail.ossp.org>
Date: Tue, 27 Mar 2007 15:58:20 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   27-Mar-2007 15:58:20
  Branch: HEAD                             Handle: 2007032714582000

  Modified files:
    ossp-pkg/ase            ase.cgi.scode.pl

  Log:
    use the datetime representation also for the scode expiry time

  Summary:
    Revision    Changes     Path
    1.10        +3  -4      ossp-pkg/ase/ase.cgi.scode.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.scode.pl
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 ase.cgi.scode.pl
  --- ossp-pkg/ase/ase.cgi.scode.pl	20 Mar 2007 20:37:40 -0000	1.9
  +++ ossp-pkg/ase/ase.cgi.scode.pl	27 Mar 2007 13:58:20 -0000	1.10
  @@ -53,13 +53,12 @@
       my $scode_num = $self->makerandom(6, "1-9A-NP-Z");
   
       #   determine expiry time
  -    my $scode_expiry = time() + 4*60*60;
  +    my $scode_expiry = $self->datetime(time() + 4*60*60);
   
       #   on-the-fly remove expired codes
  -    my $now = time();
       $dbi->query(q{
           DELETE FROM ase_scode WHERE sc_expiry < ?;
  -    }, $now) or die $dbi->error();
  +    }, $self->datetime(time())) or die $dbi->error();
   
       #   store Security Code in database
       $dbi->query(q{
  @@ -123,7 +122,7 @@
       my $scode_expiry = $rec->{'sc_expiry'};
   
       #   verify Security Code
  -    my $ok = ($scode_num eq $scode_number and time() < $scode_expiry);
  +    my $ok = ($scode_num eq $scode_number and $self->datetime(time()) < $scode_expiry);
   
       return $ok;
   }
  @@ .

From ossp-cvs-owner@ossp.org  Tue Mar 27 15:59:44 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id A5677752905; Tue, 27 Mar 2007 15:59:44 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.pl
Message-Id: <20070327135944.A5677752905@mail.ossp.org>
Date: Tue, 27 Mar 2007 15:59:44 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   27-Mar-2007 15:59:44
  Branch: HEAD                             Handle: 2007032714594400

  Modified files:
    ossp-pkg/ase            ase.pl

  Log:
    provide a cron task which at least (faster) expires data

  Summary:
    Revision    Changes     Path
    1.7         +71 -1      ossp-pkg/ase/ase.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.pl
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ase.pl
  --- ossp-pkg/ase/ase.pl	27 Mar 2007 11:06:31 -0000	1.6
  +++ ossp-pkg/ase/ase.pl	27 Mar 2007 13:59:44 -0000	1.7
  @@ -76,7 +76,8 @@
             " -V,--version    print version\n" .
             " -q,--quiet      quiet processing\n" .
             "Available commands:\n" .
  -          " db              database creation/update/downgrade\n";
  +          " db              database creation/update/downgrade\n" .
  +          " cron            daily cron tasks\n";
       exit(0);
   }
   if ($opt->{-version}) {
  @@ -242,3 +243,72 @@
       return 0;
   }
   
  +sub cmd_db {
  +    my ($cfg) = @_;
  +
  +    #   command line parsing
  +    my $opt = {
  +        -help => 0,
  +        -timerange => '',
  +    };
  +    my $p = new Getopt::Long::Parser;
  +    $p->configure("bundling");
  +    $p->getoptions(
  +        'h|help'        => \$opt->{-help},
  +        't|timerange=s' => \$opt->{-timerange},
  +    ) || die "option parsing failed";
  +    undef $p;
  +    if ($opt->{-help}) {
  +        print "Usage: ase.pl cron -t <timerange> <database-file>\n" .
  +              "Available options:\n" .
  +              " -h,--help          print out this usage page\n" .
  +              " -t,--timerange=STR timerange ('hourly' or 'daily')\n";
  +        exit(0);
  +    }
  +    if (@ARGV != 1) {
  +        print STDERR "ase.pl:db:ERROR: invalid number of arguments\n";
  +        exit(1);
  +    }
  +    if ($opt->{-timerange} eq '') {
  +        print STDERR "ase.pl:db:ERROR: timerange not specified\n";
  +        exit(1);
  +    }
  +    my $db_file = shift @ARGV;
  +
  +    #   connect to database
  +    my $db = DBIx::Simple->connect(
  +        "dbi:SQLite:dbname=$db_file", "", "",
  +        { RaiseError => 0, AutoCommit => 1 }
  +    );
  +
  +    #   helper function
  +    sub datetime {
  +        my ($t) = @_;
  +        $t = time() if (not defined($t));
  +        my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday) = gmtime($t);
  +        return sprintf("%04d%02d%02d%02d%02d%02d", $year+1900, $mon+1, $mday, $hour, $min, $sec);
  +    }
  +
  +    #   perform tasks
  +    if ($opt->{-timerange} eq 'hourly') {
  +        #   remove expired data
  +        $dbi->query(q{
  +            DELETE FROM ase_scode WHERE sc_expiry < ?
  +        }, datetime(time())) or die $dbi->error();
  +        $db->query(q{
  +            DELETE FROM ase_enrollment WHERE en_expiry < ?
  +        }, datetime(time())) or die $db->error();
  +        $db->query(q{
  +            DELETE FROM ase_recovery WHERE re_expiry < ?
  +        }, datetime(time())) or die $db->error();
  +    }
  +    elsif ($opt->{-timerange} eq 'daily') {
  +        #   FIXME
  +    }
  +
  +    #   disconnect from database
  +    $db->disconnect();
  +    undef $db;
  +    return 0;
  +}
  +
  @@ .

From ossp-cvs-owner@ossp.org  Wed Mar 28 12:48:02 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id C01A175290D; Wed, 28 Mar 2007 12:48:01 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.pl
Message-Id: <20070328104801.C01A175290D@mail.ossp.org>
Date: Wed, 28 Mar 2007 12:48:01 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Mar-2007 12:48:01
  Branch: HEAD                             Handle: 2007032811480000

  Modified files:
    ossp-pkg/ase            ase.pl

  Log:
    fix command line tool

  Summary:
    Revision    Changes     Path
    1.8         +3  -3      ossp-pkg/ase/ase.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.pl
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 ase.pl
  --- ossp-pkg/ase/ase.pl	27 Mar 2007 13:59:44 -0000	1.7
  +++ ossp-pkg/ase/ase.pl	28 Mar 2007 10:48:00 -0000	1.8
  @@ -243,7 +243,7 @@
       return 0;
   }
   
  -sub cmd_db {
  +sub cmd_cron {
       my ($cfg) = @_;
   
       #   command line parsing
  @@ -292,9 +292,9 @@
       #   perform tasks
       if ($opt->{-timerange} eq 'hourly') {
           #   remove expired data
  -        $dbi->query(q{
  +        $db->query(q{
               DELETE FROM ase_scode WHERE sc_expiry < ?
  -        }, datetime(time())) or die $dbi->error();
  +        }, datetime(time())) or die $db->error();
           $db->query(q{
               DELETE FROM ase_enrollment WHERE en_expiry < ?
           }, datetime(time())) or die $db->error();
  @@ .

From ossp-cvs-owner@ossp.org  Wed Mar 28 21:44:09 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id F077F752926; Wed, 28 Mar 2007 21:44:08 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ChangeLog ase.cgi.login.pl ase.cgi.main.pl a...
Message-Id: <20070328194408.F077F752926@mail.ossp.org>
Date: Wed, 28 Mar 2007 21:44:08 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Mar-2007 21:44:08
  Branch: HEAD                             Handle: 2007032820440700

  Added files:
    ossp-pkg/ase            ase.ui.jquery.js ase.ui.jscrypto.js
                            ase.ui.lock.gif ase.ui.lock.psd
  Modified files:
    ossp-pkg/ase            ChangeLog ase.cgi.login.pl ase.cgi.main.pl ase.css

  Log:
    o Add some JavaScript based user-interface experience improvement
      by rendering a open/close black/red/green lock at the right side of
      the password login field to on-the-fly indicate to the user whether
      the password field content is (already or still not) secure for
      transmission.
    
    o Add support for secure password transaction via plain HTTP by
      calculating the SHA-1 digest "sha1(pw)" of the password "pw" on the
      client-side with JavaScript and sending "SHA1:"+sha1(pw) instead of
      "pw" to the server via HTTP.
    
    The JavaScript code is based on jQuery and a subset of RSE's forthcoming
    jscrypto library.

  Summary:
    Revision    Changes     Path
    1.12        +13 -0      ossp-pkg/ase/ChangeLog
    1.28        +79 -5      ossp-pkg/ase/ase.cgi.login.pl
    1.30        +6  -0      ossp-pkg/ase/ase.cgi.main.pl
    1.14        +16 -0      ossp-pkg/ase/ase.css
    1.1         +1  -0      ossp-pkg/ase/ase.ui.jquery.js
    1.1         +39 -0      ossp-pkg/ase/ase.ui.jscrypto.js
    1.1         BLOB        ossp-pkg/ase/ase.ui.lock.gif
    1.1         BLOB        ossp-pkg/ase/ase.ui.lock.psd
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 ChangeLog
  --- ossp-pkg/ase/ChangeLog	27 Mar 2007 12:56:03 -0000	1.11
  +++ ossp-pkg/ase/ChangeLog	28 Mar 2007 19:44:07 -0000	1.12
  @@ -13,6 +13,19 @@
   
     Changes between 0.1.x and 0.2.0 (xx-Oct-2005 to 20-Mar-2007)
   
  +   o Add some JavaScript based user-interface experience improvement
  +     by rendering a open/close black/red/green lock at the right side of
  +     the password login field to on-the-fly indicate to the user whether
  +     the password field content is (already or still not) secure for
  +     transmission.
  +     [Ralf S. Engelschall]
  +
  +   o Add support for secure password transaction via plain HTTP by
  +     calculating the SHA-1 digest "sha1(pw)" of the password "pw" on the
  +     client-side with JavaScript and sending "SHA1:"+sha1(pw) instead of
  +     "pw" to the server via HTTP.
  +     [Ralf S. Engelschall]
  +
      o Add profile editing support.
        [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	27 Mar 2007 13:37:39 -0000	1.27
  +++ ossp-pkg/ase/ase.cgi.login.pl	28 Mar 2007 19:44:07 -0000	1.28
  @@ -87,11 +87,13 @@
           "</table>\n";
   
       #   optionally print screen-global errror
  +    $html >> "error";
  +    $html .= "<span class=\"error\">";
       if (defined(my $error = $cgi->param("login.error"))) {
  -        $html >> "error";
  -        $html .= "<span class=\"error\">Login Error: $error</span>\n";
  -        $html << 1;
  +        $html .= "Login Error: $error";
       }
  +    $html .= "</span>\n";
  +    $html << 1;
   
       #   generate the input fields
       $html >> "field-login";
  @@ -105,6 +107,7 @@
       );
       $html << 1;
       $html >> "field-password";
  +    $html .= "<div class=\"field_password\">\n";
       $html .= $cgi->password_field(
           -class    => 'field',
           -id       => 'field_password',
  @@ -113,6 +116,8 @@
           -tabindex => 2,
           -size     => 30,
       );
  +    $html .= "<div id=\"lock\"></div>";
  +    $html .= "</div>\n";
       $html << 1;
       $html >> "button-enrollment";
       $html .= "<a class=\"button\" id=\"button_enrollment\" href=\"" .
  @@ -134,6 +139,68 @@
       );
       $html << 1;
   
  +    #   add (optional) client-side user-interface behaviours
  +    $html .= "<script type=\"text/javascript\">\n";
  +    $html->fold();
  +    $html .= "</script>";
  +    $html->divert();
  +    $html .= q{
  +        $(document).ready(function () {
  +            var lock_map = {
  +                "open-black":  [ 0, 0 ],
  +                "open-red":    [ 0, 9 ],
  +                "close-black": [ 9, 0 ],
  +                "close-green": [ 9, 9 ]
  +            };
  +            function lock_render (type) {
  +                if (type == "none")
  +                    $('#lock').css("display", "none");
  +                else {
  +                    var x = lock_map[type][0];
  +                    var y = lock_map[type][1];
  +                    $('#lock')
  +                        .css("background-position", "-"+x+"px -"+y+"px")
  +                        .css("display", "block");
  +                }
  +            };
  +            function lock_update () {
  +                /* determine status */
  +                var connection_secured = false;
  +                if (document.location.protocol)
  +                    if (document.location.protocol == 'https')
  +                        connection_secured = true;
  +                var field_value = $('#field_password').val();
  +                var field_value_hashed = (field_value != "" && field_value.match(/^SHA1:[0-9a-fA-F]{40}$/));
  +
  +                /* update lock accordingly */
  +                if (connection_secured && field_value == "")
  +                    lock_render("close-black");
  +                else if (connection_secured || field_value_hashed)
  +                    lock_render("close-green");
  +                else if (!connection_secured && field_value == "")
  +                    lock_render("open-black");
  +                else
  +                    lock_render("open-red");
  +            };
  +            lock_update();
  +            $('#field_password').blur(function () {
  +                var value = $(this).val();
  +                if (value != "" && value.substr(0, 5) != "SHA1:") {
  +                    value = "SHA1:" + jscrypto.base16.encode(jscrypto.md.sha1(value));
  +                    $(this).val(value);
  +                    $('span.error').html("");
  +                }
  +                else if (value != "" && value.substr(0, 5) == "SHA1:" && !value.match(/^SHA1:[0-9a-fA-F]{40}$/)) {
  +                    $(this).val("");
  +                    $('span.error').html("Invalid password SHA1 digest found -- cleared");
  +                }
  +                lock_update();
  +            }).keypress(function () {
  +                lock_update();
  +            });
  +        });
  +    };
  +
       #   undivert
       $html << 0;
   
  @@ -260,8 +327,15 @@
               $error = 1;
               goto ERROR;
           }
  -        my $pw = $self->makepasswords($password);
  -        if ($pw->{-sha1} ne $rec->{'me_access_pw_sha1'}) {
  +        my $ok = 0;
  +        if ($password =~ m/^SHA1:([0-9a-fA-F]{40})$/) {
  +            $ok = ($1 eq $rec->{'me_access_pw_sha1'});
  +        }
  +        else {
  +            my $pw = $self->makepasswords($password);
  +            $ok = ($pw->{-sha1} eq $rec->{'me_access_pw_sha1'});
  +        }
  +        if (not $ok) {
               $cgi->param("login.error", "Incorrect Password");
               $error = 1;
               goto ERROR;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	23 Mar 2007 09:23:41 -0000	1.29
  +++ ossp-pkg/ase/ase.cgi.main.pl	28 Mar 2007 19:44:07 -0000	1.30
  @@ -160,6 +160,12 @@
           $html->divert("head");
           $html .= "<link rel=\"stylesheet\" type=\"text/css\"" .
                    " href=\"".$self->url(-mode => "loader", -name => "ase.css")."\"/>\n";
  +        $html .= "<script type=\"text/javascript\"" .
  +                 " src=\"".$self->url(-mode => "loader", -name => "ase.ui.jquery.js")."\"/>" .
  +                 "</script>\n";
  +        $html .= "<script type=\"text/javascript\"" .
  +                 " src=\"".$self->url(-mode => "loader", -name => "ase.ui.jscrypto.js")."\"/>" .
  +                 "</script>\n";
           $html->undivert();
           $html->divert("body");
           $html .= "<div class=\"ase\">\n";
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.css
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 ase.css
  --- ossp-pkg/ase/ase.css	22 Mar 2007 19:30:24 -0000	1.13
  +++ ossp-pkg/ase/ase.css	28 Mar 2007 19:44:07 -0000	1.14
  @@ -275,3 +275,19 @@
       color:              inherit;
   }
   
  +.ase div.field_password {
  +    position:              relative;
  +}
  +.ase div.field_password div#lock {
  +    display:               none;
  +    position:              absolute;
  +    top:                   4px;
  +    right:                 4px;
  +    z-index:               100;
  +    width:                 9px;
  +    height:                9px;
  +    background-image:      url('ase.ui.lock.gif');
  +    background-repeat:     no-repeat;
  +    background-position:   -0px -0px;
  +}
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.ui.jquery.js
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ase.ui.jquery.js
  --- /dev/null	2007-03-28 21:44:00 +0200
  +++ ase.ui.jquery.js	2007-03-28 21:44:08 +0200
  @@ -0,0 +1 @@
  +eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('u(T 1h.l=="1e"){1h.1e=1h.1e;C l=q(a,c){u(1h==6)B 1Q l(a,c);a=a||11;u(l.2G(a))B 1Q l(11)[l.fn.37?"37":"4z"](a);u(T a=="1V"){C m=/^[^<]*(<(.|\\s)+>)[^>]*$/.59(a);u(m)a=l.3I([m[1]]);L B 1Q l(c).3p(a)}B 6.7f(a.22==3L&&a||(a.7B||a.I&&a!=1h&&!a.33&&a[0]!=1e&&a[0].33)&&l.5h(a)||[a])};u(T $!="1e")l.5K$=$;C $=l;l.fn=l.5B={7B:"1.1.2+cI",4N:q(){B 6.I},I:0,2O:q(2Q){B 2Q==1e?l.5h(6):6[2Q]},43:q(a){C 1f=l(a);1f.ab=6;B 1f},7f:q(a){6.I=0;[].1y.1A(6,a);B 6},19:q(fn,28){B l.19(6,fn,28)},2Z:q(17){C 8t=-1;6.19(q(i){u(6==17)8t=i});B 8t},1v:q(2S,G,H){C 17=2S;u(2S.22==2I)u(G==1e)B 6.I&&l[H||"1v"](6[0],2S)||1e;L{17={};17[2S]=G}B 6.19(q(2Z){U(C 16 29 17)l.1v(H?6.1E:6,16,l.16(6,17[16],H,2Z,16))})},K:q(2S,G){B 6.1v(2S,G,"68")},1M:q(e){u(T e=="1V")B 6.6r().3H(11.cJ(e));C t="";l.19(e||6,q(){l.19(6.5P,q(){u(6.33!=8)t+=6.33!=1?6.6n:l.fn.1M([6])})});B t},4i:q(){C a,28=18;B 6.19(q(){u(!a)a=l.3I(28,6.6e);C b=a[0].7F(14);6.1o.5A(b,6);2M(b.25)b=b.25;b.8w(6)})},3H:q(){B 6.6v(18,14,1,q(a){6.8w(a)})},aq:q(){B 6.6v(18,14,-1,q(a){6.5A(a,6.25)})},ar:q(){B 6.6v(18,1c,1,q(a){6.1o.5A(a,6)})},as:q(){B 6.6v(18,1c,-1,q(a){6.1o.5A(a,6.47)})},3g:q(){B 6.ab||l([])},3p:q(t){B 6.43(l.8A(l.4E(6,q(a){B l.3p(t,a)})),t)},8x:q(8u){B 6.43(l.4E(6,q(a){C a=a.7F(8u!=1e?8u:14);a.$2l=1b;B a}))},1z:q(t){B 6.43(l.2G(t)&&l.53(6,q(el,2Z){B t.1A(el,[2Z])})||l.5S(t,6))},2o:q(t){B 6.43(t.22==2I&&l.5S(t,6,14)||l.53(6,q(a){B(t.22==3L||t.7B)?l.6P(a,t)<0:a!=t}))},2e:q(t){B 6.43(l.3Y(6.2O(),t.22==2I?l(t).2O():t.I!=1e&&(!t.1J||t.1J=="cK")?t:[t]))},3a:q(2p){B 2p?l.5S(2p,6).I>0:1c},9Q:q(){B 6.43(l.5h([].9Q.1A(6,18)))},8v:q(){B 6.43(6.2O().8v(),18)},1W:q(1W){B 1W==1e?(6.I?6[0].G:1b):6.1v("G",1W)},2i:q(1W){B 1W==1e?(6.I?6[0].3R:1b):6.6r().3H(1W)},6v:q(28,3l,6l,fn){C 8x=6.I>1,a;B 6.19(q(){u(!a){a=l.3I(28,6.6e);u(6l<0)a.8v()}C 17=6;u(3l&&l.1J(6,"3l")&&l.1J(a[0],"6W"))17=6.bn("3w")[0]||6.8w(11.9K("3w"));l.19(a,q(){fn.1A(17,[8x?6.7F(14):6])})})}};l.1k=l.fn.1k=q(){C 3h=18[0],a=1;u(18.I==1){3h=6;a=0}C 16;2M(16=18[a++])U(C i 29 16)3h[i]=16[i];B 3h};l.1k({eW:q(){u(l.5K$)$=l.5K$;B l},2G:q(fn){B!!fn&&T fn!="1V"&&!fn.1J&&fn.22!=3L&&/q/i.1q(fn+"")},8D:q(J){B J.7T&&J.6e&&!J.6e.1K},1J:q(J,1g){B J.1J&&J.1J.6C()==1g.6C()},19:q(17,fn,28){u(17.I==1e)U(C i 29 17)fn.1A(17[i],28||[i,17[i]]);L U(C i=0,4B=17.I;i<4B;i++)u(fn.1A(17[i],28||[i,17[i]])===1c)34;B 17},16:q(J,G,H,2Z,16){u(l.2G(G))G=G.3Z(J,[2Z]);C ad=/z-?2Z|9S-?cL|1L|ak|cM-?1i/i;B G&&G.22==5O&&H=="68"&&!ad.1q(16)?G+"2s":G},2j:{2e:q(J,c){l.19(c.4C(/\\s+/),q(i,1u){u(!l.2j.6g(J.2j,1u))J.2j+=(J.2j?" ":"")+1u})},4o:q(J,c){J.2j=c?l.53(J.2j.4C(/\\s+/),q(1u){B!l.2j.6g(c,1u)}).9v(" "):""},6g:q(t,c){B l.6P(c,(t.2j||t).5F().4C(/\\s+/))>-1}},8z:q(e,o,f){U(C i 29 o){e.1E["3b"+i]=e.1E[i];e.1E[i]=o[i]}f.1A(e,[]);U(C i 29 o)e.1E[i]=e.1E["3b"+i]},K:q(e,p){u(p=="1i"||p=="2d"){C 3b={},7P,7y,d=["f4","cN","cO","cP"];l.19(d,q(){3b["6w"+6]=0;3b["64"+6+"eO"]=0});l.8z(e,3b,q(){u(l.K(e,"1G")!="2n"){7P=e.2W;7y=e.45}L{e=l(e.7F(14)).3p(":3U").au("4O").3g().K({8a:"2E",2z:"4l",1G:"41",cR:"0",2x:"0"}).5N(e.1o)[0];C 6d=l.K(e.1o,"2z");u(6d==""||6d=="6m")e.1o.1E.2z="7i";7P=e.4n;7y=e.62;u(6d==""||6d=="6m")e.1o.1E.2z="6m";e.1o.61(e)}});B p=="1i"?7P:7y}B l.68(e,p)},68:q(J,16,ae){C 1f;u(16=="1L"&&l.1a.1C){1f=l.1v(J.1E,"1L");B 1f==""?"1":1f}u(16=="8K"||16=="5z")16=l.1a.1C?"6K":"5z";u(!ae&&J.1E[16])1f=J.1E[16];L u(11.7d&&11.7d.9c){u(16=="5z"||16=="6K")16="8K";16=16.1N(/([A-Z])/g,"-$1").2t();C 1u=11.7d.9c(J,1b);u(1u)1f=1u.af(16);L u(16=="1G")1f="2n";L l.8z(J,{1G:"41"},q(){C c=11.7d.9c(6,"");1f=c&&c.af(16)||""})}L u(J.4K){C ah=16.1N(/\\-(\\w)/g,q(m,c){B c.6C()});1f=J.4K[16]||J.4K[ah]}B 1f},3I:q(a,6Z){C r=[];6Z=6Z||11;l.19(a,q(i,2K){u(!2K)B;u(2K.22==5O)2K=2K.5F();u(T 2K=="1V"){C s=l.39(2K),26=6Z.9K("26"),4a=[];C 4i=!s.1O("<2H")&&[1,"<3D>","</3D>"]||(!s.1O("<cV")||!s.1O("<3w")||!s.1O("<cW"))&&[1,"<3l>","</3l>"]||!s.1O("<6W")&&[2,"<3l><3w>","</3w></3l>"]||(!s.1O("<cY")||!s.1O("<cZ"))&&[3,"<3l><3w><6W>","</6W></3w></3l>"]||[0,"",""];26.3R=4i[1]+2K+4i[2];2M(4i[0]--)26=26.25;u(l.1a.1C){u(!s.1O("<3l")&&s.1O("<3w")<0)4a=26.25&&26.25.5P;L u(4i[1]=="<3l>"&&s.1O("<3w")<0)4a=26.5P;U(C n=4a.I-1;n>=0;--n)u(l.1J(4a[n],"3w")&&!4a[n].5P.I)4a[n].1o.61(4a[n])}2K=l.5h(26.5P)}u(2K.I===0&&!l.1J(2K,"1X"))B;u(2K[0]==1e||l.1J(2K,"1X"))r.1y(2K);L r=l.3Y(r,2K)});B r},1v:q(J,1g,G){C 4P=l.8D(J)?{}:{"U":"dx","4F":"2j","8K":l.1a.1C?"6K":"5z",5z:l.1a.1C?"6K":"5z",3R:"3R",2j:"2j",G:"G",3q:"3q",4O:"4O",dA:"d2",3J:"3J"};u(1g=="1L"&&l.1a.1C){u(G!=1e){J.ak=1;J.1z=(J.1z||"").1N(/aj\\([^)]*\\)/,"")+(79(G).5F()=="8R"?"":"aj(1L="+G*ac+")")}B J.1z?(79(J.1z.2y(/1L=([^)]*)/)[1])/ac).5F():""}u(4P[1g]){u(G!=1e)J[4P[1g]]=G;B J[4P[1g]]}L u(G==1e&&l.1a.1C&&l.1J(J,"1X")&&(1g=="cu"||1g=="2c"))B J.d5(1g).6n;L u(J.7T){u(G!=1e)J.d6(1g,G);u(l.1a.1C&&/46|3B/.1q(1g)&&!l.8D(J))B J.7E(1g,2);B J.7E(1g)}L{1g=1g.1N(/-([a-z])/d7,q(z,b){B b.6C()});u(G!=1e)J[1g]=G;B J[1g]}},39:q(t){B t.1N(/^\\s+|\\s+$/g,"")},5h:q(a){C r=[];u(T a!="8B")U(C i=0,al=a.I;i<al;i++)r.1y(a[i]);L r=a.8O(0);B r},6P:q(b,a){U(C i=0,al=a.I;i<al;i++)u(a[i]==b)B i;B-1},3Y:q(2D,8E){U(C i=0;8E[i];i++)2D.1y(8E[i]);B 2D},8A:q(2D){C r=[],2Q=l.74++;U(C i=0,fl=2D.I;i<fl;i++)u(2D[i].74!=2Q){2D[i].74=2Q;r.1y(2D[i])}B r},74:0,53:q(3n,fn,9O){u(T fn=="1V")fn=1Q 73("a","i","B "+fn);C 2b=[];U(C i=0,el=3n.I;i<el;i++)u(!9O&&fn(3n[i],i)||9O&&!fn(3n[i],i))2b.1y(3n[i]);B 2b},4E:q(3n,fn){u(T fn=="1V")fn=1Q 73("a","B "+fn);C 2b=[],r=[];U(C i=0,el=3n.I;i<el;i++){C 1W=fn(3n[i],i);u(1W!==1b&&1W!=1e){u(1W.22!=3L)1W=[1W];2b=2b.d9(1W)}}B 2b}});1Q q(){C b=da.db.2t();l.1a={38:/ap/.1q(b),3K:/3K/.1q(b),1C:/1C/.1q(b)&&!/3K/.1q(b),4d:/4d/.1q(b)&&!/(dc|ap)/.1q(b)};l.56=!l.1a.1C||11.dd=="fe"};l.19({1s:"a.1o",6t:"l.6t(a)",de:"l.3N(a,2,\'47\')",df:"l.3N(a,2,\'av\')",cA:"l.5s(a.1o.25,a)",5k:"l.5s(a.25)"},q(i,n){l.fn[i]=q(a){C 1f=l.4E(6,n);u(a&&T a=="1V")1f=l.5S(a,1f);B 6.43(1f)}});l.19({5N:"3H",dg:"aq",5A:"ar",8n:"as"},q(i,n){l.fn[i]=q(){C a=18;B 6.19(q(){U(C j=0,al=a.I;j<al;j++)l(a[j])[n](6)})}});l.19({au:q(2S){l.1v(6,2S,"");6.di(2S)},2L:q(c){l.2j.2e(6,c)},3i:q(c){l.2j.4o(6,c)},dj:q(c){l.2j[l.2j.6g(6,c)?"4o":"2e"](6,c)},4o:q(a){u(!a||l.1z(a,[6]).r.I)6.1o.61(6)},6r:q(){2M(6.25)6.61(6.25)}},q(i,n){l.fn[i]=q(){B 6.19(n,18)}});l.19(["eq","9n","9t","aw"],q(i,n){l.fn[n]=q(2Q,fn){B 6.1z(":"+n+"("+2Q+")",fn)}});l.19(["1i","2d"],q(i,n){l.fn[n]=q(h){B h==1e?(6.I?l.K(6[0],n):1b):6.K(n,h.22==2I?h:h+"2s")}});l.1k({2p:{"":"m[2]==\'*\'||l.1J(a,m[2])","#":"a.7E(\'Q\')==m[2]",":":{9n:"i<m[3]-0",9t:"i>m[3]-0",3N:"m[3]-0==i",eq:"m[3]-0==i",2D:"i==0",2u:"i==r.I-1",aF:"i%2==0",aG:"i%2","3N-70":"l.3N(a.1o.25,m[3],\'47\',a)==a","2D-70":"l.3N(a.1o.25,1,\'47\')==a","2u-70":"l.3N(a.1o.dk,1,\'av\')==a","9o-70":"l.5s(a.1o.25).I==1",1s:"a.25",6r:"!a.25",aw:"l.fn.1M.1A([a]).1O(m[3])>=0",3t:\'a.H!="2E"&&l.K(a,"1G")!="2n"&&l.K(a,"8a")!="2E"\',2E:\'a.H=="2E"||l.K(a,"1G")=="2n"||l.K(a,"8a")=="2E"\',aB:"!a.3q",3q:"a.3q",4O:"a.4O",3J:"a.3J||l.1v(a,\'3J\')",1M:"a.H==\'1M\'",3U:"a.H==\'3U\'",4c:"a.H==\'4c\'",9k:"a.H==\'9k\'",ax:"a.H==\'ax\'",3S:"a.H==\'3S\'",4J:"a.H==\'4J\'",2R:"a.H==\'2R\'",7G:\'a.H=="7G"||l.1J(a,"7G")\',44:"/44|3D|dm|7G/i.1q(a.1J)"},".":"l.2j.6g(a,m[2])","@":{"=":"z==m[4]","!=":"z!=m[4]","=~":"z.2y(4u(m[4]))!=1b","!~":"z.2y(4u(m[4]))==1b","^=":"z&&!z.1O(m[4])","$=":"z&&z.6i(z.I - m[4].I,m[4].I)==m[4]","*=":"z&&z.1O(m[4])>=0","":"z",9e:q(m){B["",m[1],m[3],m[2],m[5]]},aE:"z=a[m[3]];u(!z||/46|3B/.1q(m[3]))z=l.1v(a,m[3]);"},"[":"1d(m[2])?l.3N(a.1o.25,1d(m[2]),\'47\',a)==a:l.3p(m[2],a).I"},aD:[/^\\[ *(@)([\\w-]+) *([!*$^~=]*) *(\'?"?)(.*?)\\4 *\\]/,/^(\\[)\\s*(.*?(\\[.*?\\])?[^[]*?)\\s*\\]/,/^(:)([\\w-]+)\\("?\'?(.*?(\\(.*?\\))?[^(]*?)"?\'?\\)/,1Q 4u("^([:.#]*)("+(l.9f="(?:[\\\\w\\dp-\\dq*-]|\\\\\\\\.)")+"+)")],7o:[/^(\\/?\\.\\.)/,"a.1o",/^(>|\\/)/,"l.5s(a.25)",/^(\\+)/,"l.3N(a,2,\'47\')",/^(~)/,q(a){C s=l.5s(a.1o.25);B s.8O(l.6P(a,s)+1)}],5S:q(2p,3n,2o){C 3b,1u=[];2M(2p&&2p!=3b){3b=2p;C f=l.1z(2p,3n,2o);2p=f.t.1N(/^\\s*,\\s*/,"");1u=2o?3n=f.r:l.3Y(1u,f.r)}B 1u},3p:q(t,2J){u(T t!="1V")B[t];u(2J&&!2J.33)2J=1b;2J=2J||11;u(!t.1O("//")){2J=2J.3d;t=t.6i(2,t.I)}L u(!t.1O("/")&&!2J.6e){2J=2J.3d;t=t.6i(1,t.I);u(t.1O("/")>=1)t=t.6i(t.1O("/"),t.I)}C 1f=[2J],3P=[],2u;2M(t&&2u!=t){C r=[];2u=t;t=l.39(t).1N(/^\\/\\//,"");C 6S=1c;C 5q=/^[\\/>]\\s*([\\w*-]+)/;C m=5q.59(t);u(m){U(C i=0;1f[i];i++)U(C c=1f[i].25;c;c=c.47)u(c.33==1&&(m[1]=="*"||l.1J(c,m[1])))r.1y(c);1f=r;t=t.1N(5q,"");u(t.1O(" ")==0)dr;6S=14}L{U(C i=0,ay=l.7o.I;i<ay;i+=2){C 5q=l.7o[i],fn=l.7o[i+1];C m=5q.59(t);u(m){r=1f=l.4E(1f,l.2G(fn)?fn:1Q 73("a","B "+fn));t=l.39(t.1N(5q,""));6S=14;34}}}u(t&&!6S){u(!t.1O(",")){u(1f[0]==2J)1f.7W();3P=l.3Y(3P,1f);r=1f=[2J];t=" "+t.6i(1,t.I)}L{C 6a=1Q 4u("^(\\\\w+)(#)("+l.9f+"+)");C m=6a.59(t);u(m){m=[0,m[2],m[3],m[1]]}L{6a=1Q 4u("^([#.]?)("+l.9f+"*)");m=6a.59(t)}m[2]=m[2].1N(/\\\\/g,"");C J=1f[1f.I-1];u(m[1]=="#"&&J&&J.8V){C 4L=J.8V(m[2]);u((l.1a.1C||l.1a.3K)&&4L&&4L.Q!=m[2])4L=l(\'[@Q="\'+m[2]+\'"]\',J)[0];1f=r=4L&&(!m[3]||l.1J(4L,m[3]))?[4L]:[]}L{U(C i=0;1f[i];i++){C 7s=m[1]!=""||m[0]==""?"*":m[2];u(7s=="*"&&1f[i].1J.2t()=="40")7s="O";r=l.3Y(r,1f[i].bn(7s))}u(m[1]==".")r=l.8I(r,m[2]);u(m[1]=="#"){C 5n=[];U(C i=0;r[i];i++)u(r[i].7E("Q")==m[2]){5n=[r[i]];34}r=5n}1f=r}t=t.1N(6a,"")}}u(t){C 1W=l.1z(t,r);1f=r=1W.r;t=l.39(1W.t)}}u(t)1f=[];u(1f&&1f[0]==2J)1f.7W();3P=l.3Y(3P,1f);B 3P},8I:q(r,m,2o){m=" "+m+" ";C 5n=[];U(C i=0;r[i];i++){C 8H=(" "+r[i].2j+" ").1O(m)>=0;u(!2o&&8H||2o&&!8H)5n.1y(r[i])}B 5n},1z:q(t,r,2o){C 2u;2M(t&&t!=2u){2u=t;C p=l.aD,m;U(C i=0;p[i];i++){m=p[i].59(t);u(m){t=t.6R(m[0].I);u(l.2p[m[1]].9e)m=l.2p[m[1]].9e(m);m[2]=m[2].1N(/\\\\/g,"");34}}u(!m)34;u(m[1]==":"&&m[2]=="2o")r=l.1z(m[3],r,14).r;L u(m[1]==".")r=l.8I(r,m[2],2o);L{C f=l.2p[m[1]];u(T f!="1V")f=l.2p[m[1]][m[2]];6G("f = q(a,i){"+(l.2p[m[1]].aE||"")+"B "+f+"}");r=l.53(r,f,2o)}}B{r:r,t:t}},6t:q(J){C 99=[];C 1u=J.1o;2M(1u&&1u!=11){99.1y(1u);1u=1u.1o}B 99},3N:q(1u,2b,6l,J){2b=2b||1;C 2Q=0;U(;1u;1u=1u[6l]){u(1u.33==1)2Q++;u(2Q==2b||2b=="aF"&&2Q%2==0&&2Q>1&&1u==J||2b=="aG"&&2Q%2==1&&1u==J)B 1u}},5s:q(n,J){C r=[];U(;n;n=n.47){u(n.33==1&&(!J||n!=J))r.1y(n)}B r}});l.S={2e:q(E,H,1B,R){u(l.1a.1C&&E.6u!=1e)E=1h;u(R)1B.R=R;u(!1B.5a)1B.5a=6.5a++;u(!E.$2l)E.$2l={};C 5X=E.$2l[H];u(!5X){5X=E.$2l[H]={};u(E["5Y"+H])5X[0]=E["5Y"+H]}5X[1B.5a]=1B;E["5Y"+H]=6.6L;u(!6.2A[H])6.2A[H]=[];6.2A[H].1y(E)},5a:1,2A:{},4o:q(E,H,1B){C 2l=E.$2l,1f;u(2l){u(H&&H.H){1B=H.1B;H=H.H}u(!H){U(H 29 2l)6.4o(E,H)}L u(2l[H]){u(1B)66 2l[H][1B.5a];L U(1B 29 E.$2l[H])66 2l[H][1B];U(1f 29 2l[H])34;u(!1f){1f=E["5Y"+H]=1b;66 2l[H]}}U(1f 29 2l)34;u(!1f)E.$2l=1b}},2f:q(H,R,E){R=l.5h(R||[]);u(!E)l.19(6.2A[H]||[],q(){l.S.2f(H,R,6)});L{C 1B=E["5Y"+H],1W,fn=l.2G(E[H]);u(1B){R.aI(6.4P({H:H,3h:E}));u((1W=1B.1A(E,R))!==1c)6.8N=14}u(fn&&1W!==1c)E[H]();6.8N=1c}},6L:q(S){u(T l=="1e"||l.S.8N)B;S=l.S.4P(S||1h.S||{});C 4Q;C c=6.$2l[S.H];C 28=[].8O.3Z(18,1);28.aI(S);U(C j 29 c){28[0].1B=c[j];28[0].R=c[j].R;u(c[j].1A(6,28)===1c){S.3W();S.57();4Q=1c}}u(l.1a.1C)S.3h=S.3W=S.57=S.1B=S.R=1b;B 4Q},4P:q(S){u(!S.3h&&S.aJ)S.3h=S.aJ;u(S.8L==1e&&S.a2!=1e){C e=11.3d,b=11.1K;S.8L=S.a2+(e.31||b.31);S.aH=S.dB+(e.2Y||b.2Y)}u(l.1a.38&&S.3h.33==3){C 5Z=S;S=l.1k({},5Z);S.3h=5Z.3h.1o;S.3W=q(){B 5Z.3W()};S.57=q(){B 5Z.57()}}u(!S.3W)S.3W=q(){6.4Q=1c};u(!S.57)S.57=q(){6.dC=14};B S}};l.fn.1k({2P:q(H,R,fn){B 6.19(q(){l.S.2e(6,H,fn||R,R)})},aN:q(H,R,fn){B 6.19(q(){l.S.2e(6,H,q(S){l(6).75(S);B(fn||R).1A(6,18)},R)})},75:q(H,fn){B 6.19(q(){l.S.4o(6,H,fn)})},2f:q(H,R){B 6.19(q(){l.S.2f(H,R,6)})},3c:q(){C a=18;B 6.49(q(e){6.8Q=6.8Q==0?1:0;e.3W();B a[6.8Q].1A(6,[e])||1c})},e2:q(f,g){q 8S(e){C p=(e.H=="51"?e.dD:e.dE)||e.dF;2M(p&&p!=6)3G{p=p.1o}3F(e){p=6};u(p==6)B 1c;B(e.H=="51"?f:g).1A(6,[e])}B 6.51(8S).76(8S)},37:q(f){u(l.6Y)f.1A(11,[l]);L{l.67.1y(q(){B f.1A(6,[l])})}B 6}});l.1k({6Y:1c,67:[],37:q(){u(!l.6Y){l.6Y=14;u(l.67){l.19(l.67,q(){6.1A(11)});l.67=1b}u(l.1a.4d||l.1a.3K)11.dH("aL",l.37,1c)}}});1Q q(){l.19(("8r,4R,4z,dU,6o,8Y,49,dT,"+"dJ,dK,9b,51,76,dL,3D,"+"3S,dM,dN,dO,1n").4C(","),q(i,o){l.fn[o]=q(d,f){B(f||d)?6.2P(o,d,f):6.2f(o)}});u(l.1a.4d||l.1a.3K)11.dP("aL",l.37,1c);L u(l.1a.1C){11.dQ("<dR"+"dS Q=aM dV=14 "+"3B=//:><\\/4m>");C 4m=11.8V("aM");u(4m)4m.6f=q(){u(6.7M!="3E")B;6.1o.61(6);l.37()};4m=1b}L u(l.1a.38)l.8W=6u(q(){u(11.7M=="dW"||11.7M=="3E"){9y(l.8W);l.8W=1b;l.37()}},10);l.S.2e(1h,"4z",l.37)};u(l.1a.1C)l(1h).aN("8Y",q(){C 2A=l.S.2A;U(C H 29 2A){C 8Z=2A[H],i=8Z.I;u(i&&H!=\'8Y\')do l.S.4o(8Z[i-1],H);2M(--i)}});l.fn.1k({1F:q(1r,1j){C 2E=6.1z(":2E");1r?2E.30({1i:"1F",2d:"1F",1L:"1F"},1r,1j):2E.19(q(){6.1E.1G=6.58?6.58:"";u(l.K(6,"1G")=="2n")6.1E.1G="41"});B 6},1D:q(1r,1j){C 3t=6.1z(":3t");1r?3t.30({1i:"1D",2d:"1D",1L:"1D"},1r,1j):3t.19(q(){6.58=6.58||l.K(6,"1G");u(6.58=="2n")6.58="41";6.1E.1G="2n"});B 6},aP:l.fn.3c,3c:q(fn,8G){C 28=18;B l.2G(fn)&&l.2G(8G)?6.aP(fn,8G):6.19(q(){l(6)[l(6).3a(":2E")?"1F":"1D"].1A(l(6),28)})},bD:q(1r,1j){B 6.1z(":2E").30({1i:"1F"},1r,1j).3g()},bA:q(1r,1j){B 6.1z(":3t").30({1i:"1D"},1r,1j).3g()},dX:q(1r,1j){B 6.19(q(){C aQ=l(6).3a(":2E")?"1F":"1D";l(6).30({1i:aQ},1r,1j)})},bM:q(1r,1j){B 6.1z(":2E").30({1L:"1F"},1r,1j).3g()},bH:q(1r,1j){B 6.1z(":3t").30({1L:"1D"},1r,1j).3g()},dY:q(1r,3M,1j){B 6.30({1L:3M},1r,1j)},30:q(16,1r,3e,1j){B 6.2X(q(){6.55=l.1k({},16);C 2H=l.1r(1r,3e,1j);U(C p 29 16){C e=1Q l.5W(6,2H,p);u(16[p].22==5O)e.5f(e.1u(),16[p]);L e[16[p]](16)}})},2X:q(H,fn){u(!fn){fn=H;H="5W"}B 6.19(q(){u(!6.2X)6.2X={};u(!6.2X[H])6.2X[H]=[];6.2X[H].1y(fn);u(6.2X[H].I==1)fn.1A(6)})}});l.1k({1r:q(1r,3e,fn){C 2H=1r&&1r.22==dZ?1r:{3E:fn||!fn&&3e||l.2G(1r)&&1r,3T:1r,3e:fn&&3e||3e&&3e.22!=73&&3e||"aT"};2H.3T=(2H.3T&&2H.3T.22==5O?2H.3T:{e0:e1,e3:bC}[2H.3T])||e4;2H.3b=2H.3E;2H.3E=q(){l.aW(6,"5W");u(l.2G(2H.3b))2H.3b.1A(6)};B 2H},3e:{e5:q(p,n,4I,78){B 4I+78*p},aT:q(p,n,4I,78){B((-4k.e6(p*4k.e8)/2)+0.5)*78+4I}},2X:{},aW:q(J,H){H=H||"5W";u(J.2X&&J.2X[H]){J.2X[H].7W();C f=J.2X[H][0];u(f)f.1A(J)}},54:[],5W:q(J,V,16){C z=6;C y=J.1E;u(16=="1i"||16=="2d"){C 7c=l.K(J,"1G");C aZ=y.4y;y.4y="2E"}z.a=q(){u(V.7b)V.7b.1A(J,[z.4Z]);u(16=="1L")l.1v(y,"1L",z.4Z);L{y[16]=1d(z.4Z)+"2s";y.1G="41"}};z.7Q=q(){B 79(l.K(J,16))};z.1u=q(){C r=79(l.68(J,16));B r&&r>-e9?r:z.7Q()};z.5f=q(93,3M){z.8y=(1Q 5m()).7e();z.4Z=93;z.a();l.54.1y(q(){B z.7b(93,3M)});u(l.54.I==1){C aY=6u(q(){l.54=l.53(l.54,q(fn){B fn()});u(!l.54.I)9y(aY)},13)}};z.1F=q(){u(!J.3O)J.3O={};J.3O[16]=l.1v(J.1E,16);V.1F=14;z.5f(0,6.1u());u(16!="1L")y[16]="52"};z.1D=q(){u(!J.3O)J.3O={};J.3O[16]=l.1v(J.1E,16);V.1D=14;z.5f(6.1u(),0)};z.3c=q(){u(!J.3O)J.3O={};J.3O[16]=l.1v(J.1E,16);u(7c=="2n"){V.1F=14;u(16!="1L")y[16]="52";z.5f(0,6.1u())}L{V.1D=14;z.5f(6.1u(),0)}};z.7b=q(4I,96){C t=(1Q 5m()).7e();u(t>V.3T+z.8y){z.4Z=96;z.a();u(J.55)J.55[16]=14;C 3P=14;U(C i 29 J.55)u(J.55[i]!==14)3P=1c;u(3P){u(7c){y.4y=aZ;y.1G=7c;u(l.K(J,"1G")=="2n")y.1G="41"}u(V.1D)y.1G="2n";u(V.1D||V.1F)U(C p 29 J.55)l.1v(y,p,J.3O[p])}u(3P&&l.2G(V.3E))V.3E.1A(J);B 1c}L{C n=t-6.8y;C p=n/V.3T;z.4Z=l.3e[V.3e](p,n,4I,(96-4I),V.3T);z.a()}B 14}}});l.fn.1k({eb:q(1t,3u,1j){6.4z(1t,3u,1j,1)},4z:q(1t,3u,1j,3v){u(l.2G(1t))B 6.2P("4z",1t);1j=1j||q(){};C H="9a";u(3u)u(l.2G(3u)){1j=3u;3u=1b}L{3u=l.O(3u);H="b6"}C 3k=6;l.7h({1t:1t,H:H,R:3u,3v:3v,3E:q(5i,1U){u(1U=="5p"||!3v&&1U=="bj")3k.1v("3R",5i.7A).9p().19(1j,[5i.7A,1U,5i]);L 1j.1A(3k,[5i.7A,1U,5i])}});B 6},ed:q(){B l.O(6)},9p:q(){B 6.3p("4m").19(q(){u(6.3B)l.b4(6.3B);L l.9q(6.1M||6.ee||6.3R||"")}).3g()}});u(!1h.5E)5E=q(){B 1Q ef("az.eg")};l.19("b9,bp,bT,bw,bU,bh".4C(","),q(i,o){l.fn[o]=q(f){B 6.2P(o,f)}});l.1k({2O:q(1t,R,1j,H,3v){u(l.2G(R)){1j=R;R=1b}B l.7h({H:"9a",1t:1t,R:R,5p:1j,9h:H,3v:3v})},eh:q(1t,R,1j,H){B l.2O(1t,R,1j,H,1)},b4:q(1t,1j){B l.2O(1t,1b,1j,"4m")},ei:q(1t,R,1j){B l.2O(1t,R,1j,"bO")},ej:q(1t,R,1j,H){u(l.2G(R)){1j=R;R={}}B l.7h({H:"b6",1t:1t,R:R,5p:1j,9h:H})},ek:q(32){l.84.32=32},em:q(F){l.1k(l.84,F)},84:{2A:14,H:"9a",32:0,bb:"en/x-eo-1X-ep",b7:14,7u:14,R:1b},7x:{},7h:q(s){s=l.1k({},l.84,s);u(s.R){u(s.b7&&T s.R!="1V")s.R=l.O(s.R);u(s.H.2t()=="2O"){s.1t+=((s.1t.1O("?")>-1)?"&":"?")+s.R;s.R=1b}}u(s.2A&&!l.9j++)l.S.2f("b9");C 9i=1c;C 1p=1Q 5E();1p.es(s.H,s.1t,s.7u);u(s.R)1p.7S("et-eu",s.bb);u(s.3v)1p.7S("ev-9l-ew",l.7x[s.1t]||"ex, ey ez eA 9d:9d:9d eB");1p.7S("X-eC-eD","5E");u(1p.eE)1p.7S("eF","eG");u(s.bg)s.bg(1p);u(s.2A)l.S.2f("bh",[1p,s]);C 6f=q(9C){u(1p&&(1p.7M==4||9C=="32")){9i=14;u(7w){9y(7w);7w=1b}C 1U;3G{1U=l.by(1p)&&9C!="32"?s.3v&&l.bE(1p,s.1t)?"bj":"5p":"1n";u(1U!="1n"){C 7n;3G{7n=1p.9m("bF-9l")}3F(e){}u(s.3v&&7n)l.7x[s.1t]=7n;C R=l.bK(1p,s.9h);u(s.5p)s.5p(R,1U);u(s.2A)l.S.2f("bU",[1p,s])}L l.7q(s,1p,1U)}3F(e){1U="1n";l.7q(s,1p,1U,e)}u(s.2A)l.S.2f("bT",[1p,s]);u(s.2A&&!--l.9j)l.S.2f("bp");u(s.3E)s.3E(1p,1U);u(s.7u)1p=1b}};C 7w=6u(6f,13);u(s.32>0)3j(q(){u(1p){1p.eH();u(!9i)6f("32")}},s.32);3G{1p.eJ(s.R)}3F(e){l.7q(s,1p,1b,e)}u(!s.7u)6f();B 1p},7q:q(s,1p,1U,e){u(s.1n)s.1n(1p,1U,e);u(s.2A)l.S.2f("bw",[1p,s,e])},9j:0,by:q(r){3G{B!r.1U&&5l.eK=="9k:"||(r.1U>=bC&&r.1U<eL)||r.1U==bG||l.1a.38&&r.1U==1e}3F(e){}B 1c},bE:q(1p,1t){3G{C bI=1p.9m("bF-9l");B 1p.1U==bG||bI==l.7x[1t]||l.1a.38&&1p.1U==1e}3F(e){}B 1c},bK:q(r,H){C ct=r.9m("eM-H");C R=!H&&ct&&ct.1O("1p")>=0;R=H=="1p"||R?r.eP:r.7A;u(H=="4m")l.9q(R);u(H=="bO")6G("R = "+R);u(H=="2i")l("<26>").2i(R).9p();B R},O:q(a){C s=[];u(a.22==3L||a.7B)l.19(a,q(){s.1y(4T(6.1g)+"="+4T(6.G))});L U(C j 29 a)u(a[j]&&a[j].22==3L)l.19(a[j],q(){s.1y(4T(j)+"="+4T(6))});L s.1y(4T(j)+"="+4T(a[j]));B s.9v("&")},9q:q(R){u(1h.bR)1h.bR(R);L u(l.1a.38)1h.3j(R,0);L 6G.3Z(1h,R)}})}l.fn.eR=q(f){B 6.19(q(){C p=6.1o;u(l.K(p,"2z")==\'6m\')p.1E.2z=\'7i\';C s=6.1E;s.2z=\'4l\';u(!f||f=="eS"){u(((1d(l.K(p,"2d"))-1d(l.K(6,"2d")))/2)>0)s.2x=((1d(l.K(p,"2d"))-1d(l.K(6,"2d")))/2)+"2s";L s.2x="0"}u(!f||f=="eT"){u(((1d(l.K(p,"1i"))-1d(l.K(6,"1i")))/2)>0){s.2F=((1d(l.K(p,"1i"))-1d(l.K(6,"1i")))/2)+"2s"}L{u(p.1J.2t()=="1K"){u(1h.65)C 4n=1h.65;L u(11.1K&&11.1K.2W)C 4n=11.1K.2W;s.2F=((4n-1d(l.K(6,"1i")))/2)+"2s"}L{s.2F="0"}}}})};l.4f=q(1g,G,V){u(T G!=\'1e\'){V=V||{};u(G===1b){G="";V.2w=-1}C 2w=\'\';u(V.2w){C 2q;u(T V.2w==\'1V\'&&V.2w.2y(/^[+-]?[0-9]+[eU]$/)!==1b){C 2y=V.2w.2y(/^([+-]?[0-9]+)([eV])$/);V.2w=1d(2y[0],10)*(({"Y":(60*60*24*bX),"M":(60*60*24*bX/12),"W":(60*60*24*7),"D":(60*60*24),"h":(60*60),"m":(60),"s":(1)}[2y[1]])||0);2q=1Q 5m();2q.bY(2q.7e()+V.2w*4w)}L u(T V.2w==\'3m\'){2q=1Q 5m();2q.bY(2q.7e()+V.2w*24*60*60*4w)}L u(T V.2w.bZ!=\'1e\')2q=V.2w;L 9F"eX \\"2w\\" 2k";2w=\'; 2w=\'+2q.bZ()}C 6h=V.6h?\'; 6h=\'+V.6h:\'\';C 63=V.63?\'; 63=\'+V.63:\'\';C 7O=V.7O?\'; 7O\':\'\';11.4f=[1g,\'=\',4T(G),2w,6h,63,7O].9v(\'\')}L{C 9A=1b;u(11.4f&&11.4f!=\'\'){C 9w=11.4f.4C(\';\');U(C i=0;i<9w.I;i++){C 4f=l.39(9w[i]);u(4f.6R(0,1g.I+1)==(1g+\'=\')){9A=eZ(4f.6R(1g.I+1));34}}}B 9A}};l.fn.c0=l.fn.1i;l.fn.c1=l.fn.2d;l.fn.1i=q(){u(6[0]==1h)B 3k.65||l.56&&11.3d.4n||11.1K.4n;u(6[0]==11)B 4k.7Q(11.1K.f0,11.1K.2W);B 6.c0(18[0])};l.fn.2d=q(){u(6[0]==1h)B 3k.8X||l.56&&11.3d.62||11.1K.62;u(6[0]==11)B 4k.7Q(11.1K.f1,11.1K.45);B 6.c1(18[0])};l.fn.65=q(){B 6[0]==1h||6[0]==11?6.1i():6.K(\'1G\')!=\'2n\'?6[0].2W-(1d(6.K("4q"))||0)-(1d(6.K("c2"))||0):6.1i()+(1d(6.K("9H"))||0)+(1d(6.K("c3"))||0)};l.fn.8X=q(){B 6[0]==1h||6[0]==11?6.2d():6.K(\'1G\')!=\'2n\'?6[0].45-(1d(6.K("4r"))||0)-(1d(6.K("c4"))||0):6.1i()+(1d(6.K("9G"))||0)+(1d(6.K("98"))||0)};l.fn.f2=q(){B 6[0]==1h||6[0]==11?6.1i():6.K(\'1G\')!=\'2n\'?6[0].2W:6.1i()+(1d(6.K("4q"))||0)+(1d(6.K("c2"))||0)+(1d(6.K("9H"))||0)+(1d(6.K("c3"))||0)};l.fn.f3=q(){B 6[0]==1h||6[0]==11?6.2d():6.K(\'1G\')!=\'2n\'?6[0].45:6.1i()+(1d(6.K("4r"))||0)+(1d(6.K("c4"))||0)+(1d(6.K("9G"))||0)+(1d(6.K("98"))||0)};l.fn.31=q(){u(6[0]==1h||6[0]==11)B 3k.8T||l.56&&11.3d.31||11.1K.31;B 6[0].31};l.fn.2Y=q(){u(6[0]==1h||6[0]==11)B 3k.8U||l.56&&11.3d.2Y||11.1K.2Y;B 6[0].2Y};l.fn.92=q(V,9I){C x=0,y=0,J=6[0],1s=6[0],6Q=1c,9D=1c,5R,6q=0,6p=0,V=l.1k({77:14,64:14,6w:1c,6o:14},V||{});do{x+=1s.8M||0;y+=1s.8P||0;u(l.1a.4d||l.1a.1C){C bt=1d(l.K(1s,\'4q\'))||0;C bl=1d(l.K(1s,\'4r\'))||0;x+=bl;y+=bt;u(l.1a.4d&&1s!=J&&l.K(1s,\'4y\')!=\'3t\'){x+=bl;y+=bt}u(l.K(1s,\'2z\')==\'4l\')6Q=14;u(l.K(1s,\'2z\')==\'7i\')9D=14}u(V.6o){5R=1s.c7;do{6q+=1s.31||0;6p+=1s.2Y||0;1s=1s.1o;u(l.1a.4d&&1s!=J&&1s!=5R&&l.K(1s,\'4y\')!=\'3t\'){x+=1d(l.K(1s,\'4r\'))||0;y+=1d(l.K(1s,\'4q\'))||0}}2M(5R&&1s!=5R)}L 1s=1s.c7;u(1s&&(1s.7T.2t()==\'1K\'||1s.7T.2t()==\'2i\')){u((l.1a.38||(l.1a.1C&&l.56))&&l.K(J,\'2z\')!=\'4l\'){x+=1d(l.K(1s,\'ca\'))||0;y+=1d(l.K(1s,\'cb\'))||0}u((l.1a.4d&&!6Q)||(l.1a.1C&&l.K(J,\'2z\')==\'6m\'&&(!9D||!6Q))){x+=1d(l.K(1s,\'4r\'))||0;y+=1d(l.K(1s,\'4q\'))||0}34}}2M(1s);u(!V.77){x-=1d(l.K(J,\'ca\'))||0;y-=1d(l.K(J,\'cb\'))||0}u(V.64&&(l.1a.38||l.1a.3K)){x+=1d(l.K(J,\'4r\'))||0;y+=1d(l.K(J,\'4q\'))||0}L u(!V.64&&!(l.1a.38||l.1a.3K)){x-=1d(l.K(J,\'4r\'))||0;y-=1d(l.K(J,\'4q\'))||0}u(V.6w){x+=1d(l.K(J,\'9G\'))||0;y+=1d(l.K(J,\'9H\'))||0}u(V.6o&&l.1a.3K&&l.K(J,\'1G\')==\'f6\'){6q-=J.31||0;6p-=J.2Y||0}C 4Q=V.6o?{2F:y-6p,2x:x-6q,2Y:6p,31:6q}:{2F:y,2x:x};u(9I){l.1k(9I,4Q);B 6}L{B 4Q}};(q($){$.fn.f7=l.fn.9J=q(s){u(!($.1a.1C&&T 5E==\'q\'))B 6;s=$.1k({2F:\'3X\',2x:\'3X\',2d:\'3X\',1i:\'3X\',1L:14,3B:\'f8:1c;\'},s||{});C 16=q(n){B n&&n.22==5O?n+\'2s\':n},2i=\'<ch 4F="9J"f9="0"fa="-1"3B="\'+s.3B+\'"\'+\'1E="1G:41;2z:4l;z-2Z:-1;\'+(s.1L!==1c?\'1z:fb(fc=\\\'0\\\');\':\'\')+\'2F:\'+(s.2F==\'3X\'?\'7Z(((1d(6.1o.4K.4q)||0)*-1)+\\\'2s\\\')\':16(s.2F))+\';\'+\'2x:\'+(s.2x==\'3X\'?\'7Z(((1d(6.1o.4K.4r)||0)*-1)+\\\'2s\\\')\':16(s.2x))+\';\'+\'2d:\'+(s.2d==\'3X\'?\'7Z(6.1o.45+\\\'2s\\\')\':16(s.2d))+\';\'+\'1i:\'+(s.1i==\'3X\'?\'7Z(6.1o.2W+\\\'2s\\\')\':16(s.1i))+\';\'+\'"/>\';B 6.19(q(){u(!$(\'ch.9J\',6)[0])6.5A(11.9K(2i),6.25)})}})(l);(q($){$.1k({1T:{cj:0}});$.fn.1T=q(2N,F){u(T 2N==\'40\')F=2N;F=$.1k({2N:(2N&&T 2N==\'3m\'&&2N>0)?--2N:0,3q:1b,3y:$.5M?14:1c,4D:1c,ci:\'4D-3V-\',9Z:1b,9Y:1b,a0:1b,a1:1b,9X:\'b3\',cr:1b,cs:1b,cm:1c,6x:1b,6z:1b,5J:1b,83:\'1T-2m\',4h:\'1T-3J\',6y:\'1T-3q\',6s:\'1T-1R\',8l:\'1T-1D\',8q:\'1T-ff\',ck:\'26\'},F||{});$.1a.85=$.1a.85||$.1a.1C&&T 5E==\'q\';q 9M(){a4(0,0)}B 6.19(q(){C 1R=6;C 2m=$(\'88.\'+F.83,1R);2m=2m.4N()&&2m||$(\'>88:eq(0)\',1R);C 1T=$(\'a\',2m);u(F.4D){C 8o={};1T.19(q(){$(6).2i(\'<3Q>\'+$(6).2i()+\'</3Q>\');C Q=F.ci+(++$.1T.cj);C 1Z=\'#\'+Q;8o[1Z]=6.46;6.46=1Z;$(\'<26 Q="\'+Q+\'" 4F="\'+F.6s+\'"></26>\').5N(1R)})}C 2C=$(\'26.\'+F.6s,1R);2C=2C.4N()&&2C||$(\'>\'+F.ck,1R);2m.3a(\'.\'+F.83)||2m.2L(F.83);2C.19(q(){C $$=$(6);$$.3a(\'.\'+F.6s)||$$.2L(F.6s)});C 9L=$(\'1Y\',2m).2Z($(\'1Y.\'+F.4h,2m)[0]);u(9L>=0){F.2N=9L}u(5l.1Z){1T.19(q(i){u(6.1Z==5l.1Z){F.2N=i;u(($.1a.1C||$.1a.3K)&&!F.4D){C 1S=$(5l.1Z);C 8j=1S.1v(\'Q\');1S.1v(\'Q\',\'\');3j(q(){1S.1v(\'Q\',8j)},fg)}9M();B 1c}})}u($.1a.1C){9M()}2C.1z(\':eq(\'+F.2N+\')\').1F().3g().2o(\':eq(\'+F.2N+\')\').2L(F.8l);u(!F.4D){$(\'1Y\',2m).3i(F.4h).eq(F.2N).2L(F.4h)}u(F.cm){C 9U=q(2R){C 9R=$.4E(2C.2O(),q(el){C h,9P=$(el);u(2R){u($.1a.85){el.1E.fh(\'co\');el.1E.1i=\'\';el.87=1b}h=9P.K({\'4G-1i\':\'\'}).1i()}L{h=9P.1i()}B h}).9Q(q(a,b){B b-a});u($.1a.85){2C.19(q(){6.87=9R[0]+\'2s\';6.1E.fj(\'co\',\'6.1E.1i = 6.87 ? 6.87 : "52"\')})}L{2C.K({\'4G-1i\':9R[0]+\'2s\'})}};9U();C 8b=1R.45;C 9V=1R.2W;C 9T=$(\'#1T-cp-9S-4N\').2O(0)||$(\'<3Q Q="1T-cp-9S-4N">M</3Q>\').K({1G:\'41\',2z:\'4l\',8a:\'2E\'}).5N(11.1K).2O(0);C 8d=9T.2W;6u(q(){C 8c=1R.45;C 9W=1R.2W;C 8e=9T.2W;u(9W>9V||8c!=8b||8e!=8d){9U((8c>8b||8e<8d));8b=8c;9V=9W;8d=8e}},50)}C 4V={},5H={},8m=F.cr||F.9X,a3=F.cs||F.9X;u(F.9Y||F.9Z){u(F.9Y){4V[\'1i\']=\'1F\';5H[\'1i\']=\'1D\'}u(F.9Z){4V[\'1L\']=\'1F\';5H[\'1L\']=\'1D\'}}L{u(F.a0){4V=F.a0}L{4V[\'4G-2d\']=0;8m=F.3y?50:1}u(F.a1){5H=F.a1}L{5H[\'4G-2d\']=0;a3=F.3y?50:1}}C 6x=F.6x,6z=F.6z,5J=F.5J;1T.2P(\'a9\',q(){C 1Y=$(6.1o);u(1R.6B||1Y.3a(\'.\'+F.4h)||1Y.3a(\'.\'+F.6y)){B 1c}C 1Z=6.1Z;u($.1a.1C){$(6).2f(\'49\');u(F.3y){$.5M.4s(1Z);5l.1Z=1Z.1N(\'#\',\'\')}}L u($.1a.38){C cv=$(\'<1X cu="\'+1Z+\'"><26><44 H="3S" G="h" /></26></1X>\').2O(0);cv.3S();$(6).2f(\'49\');u(F.3y){$.5M.4s(1Z)}}L{u(F.3y){5l.1Z=1Z.1N(\'#\',\'\')}L{$(6).2f(\'49\')}}});1T.2P(\'8s\',q(){C 1Y=$(6.1o);u($.1a.38){1Y.30({1L:0},1,q(){1Y.K({1L:\'\'})})}1Y.2L(F.6y)});u(F.3q&&F.3q.I){U(C i=0,k=F.3q.I;i<k;i++){1T.eq(--F.3q[i]).2f(\'8s\').3g()}};1T.2P(\'aa\',q(){C 1Y=$(6.1o);1Y.3i(F.6y);u($.1a.38){1Y.30({1L:1},1,q(){1Y.K({1L:\'\'})})}});1T.2P(\'49\',q(e){C 6F=e.a2;C 4A=6,1Y=$(6.1o),1S=$(6.1Z),2r=2C.1z(\':3t\');u((T 6x==\'q\'&&6x(6,1S[0],2r[0])==1c&&6F)||1R.6B||1Y.3a(\'.\'+F.4h)||1Y.3a(\'.\'+F.6y)){6.8r();B 1c}1R[\'6B\']=14;u(1S.4N()){u($.1a.1C&&F.3y){C 8j=6.1Z.1N(\'#\',\'\');1S.1v(\'Q\',\'\');3j(q(){1S.1v(\'Q\',8j)},0)}q 8p(){u(F.3y&&6F){$.5M.4s(4A.1Z)}2r.30(5H,a3,q(){$(4A.1o).2L(F.4h).cA().3i(F.4h);u(T 6z==\'q\'){6z(4A,1S[0],2r[0])}2r.2L(F.8l).K({1G:\'\',4y:\'\',1i:\'\',1L:\'\'});1S.3i(F.8l).30(4V,8m,q(){1S.K({4y:\'\',1i:\'\',1L:\'\'});u($.1a.1C){2r[0].1E.1z=\'\';1S[0].1E.1z=\'\'}u(T 5J==\'q\'){5J(4A,1S[0],2r[0])}1R.6B=1b})})}u(!F.4D){8p()}L{C $$=$(6),3Q=$(\'3Q\',6)[0],1M=3Q.3R;$$.2L(F.8q);3Q.3R=\'cB&#cC;\';3j(q(){$(4A.1Z).4z(8o[4A.1Z],q(){8p();3Q.3R=1M;$$.3i(F.8q)})},0)}}L{7K(\'cE 3a 9g cF 1R.\')}C a5=1h.8T||11.3d&&11.3d.31||11.1K.31||0;C a6=1h.8U||11.3d&&11.3d.2Y||11.1K.2Y||0;3j(q(){1h.a4(a5,a6)},0);6.8r();B F.3y&&!!6F});u(F.4D){1T.eq(F.2N).2f(\'49\').3g()}u(F.3y){$.5M.cG(q(){1T.eq(F.2N).2f(\'49\').3g()})}})};C 7H=[\'a9\',\'8s\',\'aa\'];U(C i=0;i<7H.I;i++){$.fn[7H[i]]=(q(cf){B q(3V){B 6.19(q(){C 2m=$(\'88.1T-2m\',6);2m=2m.4N()&&2m||$(\'>88:eq(0)\',6);C a;u(!3V||T 3V==\'3m\'){a=$(\'1Y>a\',2m).eq((3V&&3V>0&&3V-1||0))}L u(T 3V==\'1V\'){a=$(\'1Y>a[@46$="#\'+3V+\'"]\',2m)}a.2f(cf)})}})(7H[i])}})(l);l.1k(l.fn,{b2:q(V){C N=1Q l.N(V,6);N.1w=6.3p(":44:2o(:3S):2o(:2R)").4R(q(){N.4t=6});u(N.F.7l){6.3S(q(S){u(N.F.3o)S.3W();B N.1X()})}u(N.F.S){N.1w.2P(N.F.S,q(){N.E(6)})}B N},1y:q(t){B 6.7f(l.3Y(6.2O(),t))},5G:q(Q){B 6.1z("[@U=\'"+Q+"\']")}});l.1k(l.2p[":"],{b8:"!l.39(a.G)",ba:"!!l.39(a.G)"});l.N=q(V,1X){6.F=l.1k({},l.N.4b,V);6.5I=1X[0];6.4g=6.F.5y;6.7N=6.4g.I&&6.4g||1X;6.2C=6.F.7k.2e(6.F.5y);6.2R()};l.1k(l.N,{4b:{3z:{},3f:"1n",80:14,7k:l([]),5y:l([]),7l:14},bc:q(F){l.1k(l.N.4b,F)},3z:{1m:"bd bf 3a 1m.",6M:"1H 1I a G 9g bi bk {0} 5r.",7Y:"1H 1I a G bm at bo {0} 5r.",7R:"1H 1I a G 7p {0} 7C {1} 5r bq.",5t:"1H 1I a 2U 5t bs.",1t:"1H 1I a 2U bu.",2q:"1H 1I a 2U 2q.",6U:"1H 1I a 2U 2q (bv).",6X:"7t 7r 7v 5o bx¿½bz bB 5o.",3m:"1H 1I a 2U 3m.",7g:"7t 7r 7v bJ bL 5o.",5b:"1H 1I 9o 5b",6T:"1H 1I 7U bN G bP.",7D:"1H 1I a G 7p {0} 7C {1}.",6N:"1H 1I a G bS 7I 4M 7J 3M {0}.",7L:"1H 1I a G bW 7I 4M 7J 3M {0}."},5B:{1X:q(){6.5d();U(C i=0,E;E=6.1w[i++];){6.4e(E)}B 6.2U()},E:q(E){6.72(E);6.4e(E);6.3A()},3A:q(2T){u(2T)l.1k(6.2B,2T);6.F.3A?6.F.3A(6.2B,6):6.86()},5e:q(){u(l.fn.5e)l(6.5I).5e();6.5d();6.5C();6.1w.3i(6.F.3f)},3I:q(7m){B l(7m)[0]},2T:q(){B l("8h."+6.F.3f,6.7N)},2R:q(E){6.2B={};6.1S=$([]);6.2r=$([])},5d:q(){6.2R();6.2r=6.2T().1y(6.2C);6.1S.1y(6.2C)},72:q(E){6.2R();6.2r=6.2T().5G(6.48(6.3I(E)))},4e:q(E){E=6.3I(E);l(E).3i(6.F.3f);C 2a=6.2a(E);U(C i=0,1P;1P=2a[i++];){3G{C 2b=l.N.1l[1P.2c](l.39(E.G),E,1P.4W);u(2b===-1)34;u(!2b){l(E).2L(6.F.3f);6.7V(1P,E);34}}3F(e){6.F.3o&&1h.2V&&2V.1n("c5 c6 c8 c9 E "+E.Q+", 4e 7U \'"+1P.2c+"\' 2c");9F e}}},21:q(Q,1P){C m=6.F.3z[Q];B m&&(m.22==2I?m:m[1P.2c])},7V:q(1P,E){C Q=6.48(E),O=1P.4W;6.2B[Q]=(E.3x||6.21(Q,1P)||l.N.3z[1P.2c]||"<7X>cc: cd 21 ce U "+Q+"</7X>").1N("{0}",(O.22==3L?O[0]:O)||"").1N("{1}",O[1]||"")},2U:q(){u(6.82()){6.3A();B 1c}L{6.5C();u(6.F.81){6.F.81(6.5I);B 1c}B 14}},82:q(){C 4U=0;l.19(6.2B,q(){4U++});B 4U},5C:q(){6.3c("8f")},3c:q(5x){C 3k=6;q 4p(){B 3k["3M"+5x]}u(6.F.4x){4p().1y(4p().6t(6.F.4x))}4p()[5x.2t()]();B 6},86:q(){C 2D=14;U(C 4v 29 6.2B){u(2D&&6.F.80){u(6.4t&&6.2B[6.4t.Q])6.4t.4R();L{3G{C E=l("#"+4v);u(E.I)E[0].4R()}3F(e){6.F.3o&&1h.2V&&2V.1n(e)}}2D=1c}6.8g(4v,6.2B[4v])}6.2r=6.2r.2o(6.1S);6.3c("8f").3c("cw")},8g:q(Q,21){C 1n=6.2T().5G(Q);u(1n.I){u(1n.1v("8k")){1n.2i(21)}}L{1n=l("<8h>").1v({"U":Q,8k:14}).2L(6.F.3f).2i(21);u(6.F.4x){1n=1n.1D().1F().4i("<"+6.F.4x+">").1s()}u(!6.4g.3H(1n).I)6.F.6A?6.F.6A(1n,l("#"+Q)):1n.8n("#"+Q)}6.1S.1y(1n)},2a:q(E){u(!6.R(E))B[];C 2a=[];l.19(6.R(E),q(2S,G){2a[2a.I]={2c:2S,4W:G}});B 2a},R:q(E){B 6.F.2a?6.F.2a[6.48(E)]:6.F.6D?l(E).R()[6.F.6D]:l(E).R()},48:q(E){C Q=(/3U|4c/i.1q(E.H))?E.1g:E.Q;u(!Q){C 4X=E.1X.Q,4Y=/[^a-a7-2v-9\\-5K]/g;Q=E.Q=(4X?4X.1N(4Y,""):"")+E.1g.1N(4Y,"")}B Q}},3C:q(G,E){5c(E.1J.2t()){35\'3D\':B l("2k:3J",E).I;35\'44\':u(/3U|4c/i.1q(E.H))B l(E.1X||11).3p(\'[@1g="\'+E.1g+\'"]:4O\').I}B G.I},8i:q(O,E){B 6.5v[T O]?6.5v[T O](O,E):14},5v:{"6c":q(O,E){B O},"1V":q(O,E){B!!l(O,E.1X).I},"q":q(O,E){B O(E)}},1l:{1m:q(G,E,O){u(!l.N.8i(O,E))B-1;5c(E.1J.2t()){35\'3D\':C V=l("2k:3J",E);B V.I>0&&(E.H=="3D-ag"||V[0].G.I>0);35\'44\':5c(E.H.2t()){35\'4c\':35\'3U\':B l.N.3C(G,E)>0}an:B G.I>0}},cl:q(G,E,O){B!l.N.1l.1m(G,E)||O.1q(G)},7Y:q(G,E,O){C I=l.N.3C(G,E);B!l.N.1l.1m(G,E)||I>=O},6M:q(G,E,O){C I=l.N.3C(G,E);B!l.N.1l.1m(G,E)||I<=O},7R:q(G,E,O){C I=l.N.3C(G,E);B!l.N.1l.1m(G,E)||(I>=O[0]&&I<=O[1])},7L:q(G,E,O){B!l.N.1l.1m(G,E)||G>=O},6N:q(G,E,O){B!l.N.1l.1m(G,E)||G<=O},7D:q(G,E,O){B!l.N.1l.1m(G,E)||(G>=O[0]&&G<=O[1])},5t:q(G,E){B!l.N.1l.1m(G,E)||/^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$/i.1q(G)},1t:q(G,E){B!l.N.1l.1m(G,E)||/^(aA?|aC):\\/\\/[A-2v-9](\\.?[A-2v-5D„1xœ1x–][A-2v-5j\\-1x„1xœ1x–]*)*(\\/([A-2v-5D„1xœ1x–][A-2v-5j\\-\\.1x„1xœ1x–]*)?)*(\\?([A-2v-5D„1xœ1x–][A-2v-5j\\-\\.%\\+=&1x„1xœ1x–]*)?)?$/i.1q(G)},2q:q(G,E){B!l.N.1l.1m(G,E)||!/aK|8R/.1q(1Q 5m(G))},6U:q(G,E){B!l.N.1l.1m(G,E)||/^\\d{4}[/-]\\d{1,2}[/-]\\d{1,2}$/.1q(G)},6X:q(G,E){B!l.N.1l.1m(G,E)||/^\\d\\d?\\.\\d\\d?\\.\\d\\d\\d?\\d?$/.1q(G)},3m:q(G,E){B!l.N.1l.1m(G,E)||/^-?[,0-9]+(\\.\\d+)?$/.1q(G)},7g:q(G,E){B!l.N.1l.1m(G,E)||/^-?[\\.0-9]+(,\\d+)?$/.1q(G)},5b:q(G,E){B!l.N.1l.1m(G,E)||/^\\d+$/.1q(G)},6T:q(G,E,O){B G==l(""+O).1W()}},aV:q(1g,2c,21){l.N.1l[1g]=2c;l.N.3z[1g]=21}});(q(){q 2e(1g,2c){u(!3L.5B[1g]){3L.5B[1g]=2c}};2e("cQ",q(1B,27){27=27||1h;U(C i=0;i<6.I;i++)1B.3Z(27,6[i],i,6)});2e("cS",q(1B,27){27=27||1h;U(C i=0;i<6.I;i++)u(!1B.3Z(27,6[i],i,6))B 1c;B 14});2e("cT",q(1B,27){27=27||1h;U(C i=0;i<6.I;i++)u(1B.3Z(27,6[i],i,6))B 14;B 1c});2e("4E",q(1B,27){27=27||1h;C r=[];U(C i=0;i<6.I;i++)r[r.I]=1B.3Z(27,6[i],i,6);B r});2e("1z",q(1B,27){27=27||1h;C r=[];U(C i=0;i<6.I;i++)u(1B.3Z(27,6[i],i,6))r[r.I]=6[i];B r});2e("1O",q(ai,92){U(C i=92||0;i<6.I;i++)u(6[i]===ai)B i;B-1});2e("8A",q(){B 6.1z(q(E,2Z,8B){B 8B.1O(E)>=2Z})})})();(q($){C 2h,5U,3s,6O,23,91,5Q;$.fn.aX=q(F){F=$.1k({},18.d0.4b,F);u(!2h){2h=$(\'<26 Q="d1"><8C></8C><p 4F="1K"></p><p 4F="1t"></p></26>\').1D().K({2z:\'4l\',d3:"d4"}).5N(\'1K\');5U=$(\'8C\',2h);3s=$(\'p.1K\',2h);6O=$(\'p.1t\',2h)}$(6).1z(\'[@3x]\').19(q(){6.4j=F}).2P("51",ao).2P(F.S,6L);B 6};q 6L(S){u(6.4j.94)5Q=3j(1F,6.4j.94);L 1F();u(6.4j.b0)$(\'1K\').2P(\'9b\',4s);4s(S);$(6).2P(\'76\',1D)}q ao(){u(6==23||!6.3x)B;23=6;C 6k=$(6),F=6.4j;C 3x=91=6k.1v(\'3x\');6k.1v(\'3x\',\'\');u(F.cn){5U.1D();3s.2i(F.cn.3Z(6)).1F()}L u(F.95){C 9E=3x.4C(F.95);5U.2i(9E.7W()).1F();3s.6r();U(C i=0,9z;9z=9E[i];i++){u(i>0)3s.3H("<br/>");3s.3H(9z)}u(3s.2i())3s.1F();L 3s.1D()}L{5U.2i(3x);3s.1D()}C 46=(6k.1v(\'46\')||6k.1v(\'3B\'));u(F.b1&&46)6O.2i(46.1N(\'dn://\',\'\')).1F();L 6O.1D();u(F.69){2h.2L(F.69)}u(F.97&&$.1a.1C){2h.19(q(){u(6.4K.7a!=\'2n\'){C 4J=6.4K.7a;4J=4J.6R(5,4J.I-2);$(6).K({\'7a\':\'2n\',\'1z\':"ds:dt.az.dv(aB=14, dw=dy, 3B=\'"+4J+"\')"})}})}}q 1F(){5Q=1b;2h.1F();4s()}q 4s(S){u(23==1b){$(\'1K\').75(\'9b\',4s);B}C 2x=2h[0].8M;C 2F=2h[0].8P;u(S){2x=S.8L+15;2F=S.aH+15;2h.K({2x:2x+\'2s\',2F:2F+\'2s\'})}C v=aU(),h=2h[0];u(v.x+v.cx<h.8M+h.45){2x-=h.45+20;2h.K({2x:2x+\'2s\'})}u(v.y+v.cy<h.8P+h.2W){2F-=h.2W+20;2h.K({2F:2F+\'2s\'})}}q aU(){C e=11.3d||{},b=11.1K||{},w=1h;q 4G(){C v=dG;U(C i=0;i<18.I;i++){C n=18[i];u(n&&n<v)v=n}B v}B{x:w.8T||e.31||b.31||0,y:w.8U||e.2Y||b.2Y||0,cx:4G(e.62,b.62,w.8X),cy:4G(e.4n,b.4n,w.65)}}q 1D(){u(5Q)am(5Q);23=1b;2h.1D();u(6.4j.69){2h.3i(6.4j.69)}$(6).1v(\'3x\',91).75(\'76\',1D);u(6.4j.97&&$.1a.1C){2h.19(q(){$(6).K({\'1z\':\'\',7a:\'\'})})}}$.fn.aX.4b={94:ea,S:"51",b0:1c,b1:14,95:1b,69:1b,97:1c}})(l);l.1k(l.fn,{b2:q(V){C N=1Q l.N(V,6);N.1w=6.3p(":44:2o(:3S):2o(:2R)").4R(q(){N.4t=6});u(N.F.7l){6.3S(q(S){u(N.F.3o)S.3W();B N.1X()})}u(N.F.S){N.1w.2P(N.F.S,q(){N.E(6)})}B N},1y:q(t){B 6.7f(l.3Y(6.2O(),t))},5G:q(Q){B 6.1z("[@U=\'"+Q+"\']")}});l.1k(l.2p[":"],{b8:"!l.39(a.G)",ba:"!!l.39(a.G)"});l.N=q(V,1X){6.F=l.1k({},l.N.4b,V);6.5I=1X[0];6.4g=6.F.5y;6.7N=6.4g.I&&6.4g||1X;6.2C=6.F.7k.2e(6.F.5y);6.2R()};l.1k(l.N,{4b:{3z:{},3f:"1n",80:14,7k:l([]),5y:l([]),7l:14},bc:q(F){l.1k(l.N.4b,F)},3z:{1m:"bd bf 3a 1m.",6M:"1H 1I a G 9g bi bk {0} 5r.",7Y:"1H 1I a G bm at bo {0} 5r.",7R:"1H 1I a G 7p {0} 7C {1} 5r bq.",5t:"1H 1I a 2U 5t bs.",1t:"1H 1I a 2U bu.",2q:"1H 1I a 2U 2q.",6U:"1H 1I a 2U 2q (bv).",6X:"7t 7r 7v 5o bx¿½bz bB 5o.",3m:"1H 1I a 2U 3m.",7g:"7t 7r 7v bJ bL 5o.",5b:"1H 1I 9o 5b",6T:"1H 1I 7U bN G bP.",7D:"1H 1I a G 7p {0} 7C {1}.",6N:"1H 1I a G bS 7I 4M 7J 3M {0}.",7L:"1H 1I a G bW 7I 4M 7J 3M {0}."},5B:{1X:q(){6.5d();U(C i=0,E;E=6.1w[i++];){6.4e(E)}B 6.2U()},E:q(E){6.72(E);6.4e(E);6.3A()},3A:q(2T){u(2T)l.1k(6.2B,2T);6.F.3A?6.F.3A(6.2B,6):6.86()},5e:q(){u(l.fn.5e)l(6.5I).5e();6.5d();6.5C();6.1w.3i(6.F.3f)},3I:q(7m){B l(7m)[0]},2T:q(){B l("8h."+6.F.3f,6.7N)},2R:q(E){6.2B={};6.1S=$([]);6.2r=$([])},5d:q(){6.2R();6.2r=6.2T().1y(6.2C);6.1S.1y(6.2C)},72:q(E){6.2R();6.2r=6.2T().5G(6.48(6.3I(E)))},4e:q(E){E=6.3I(E);l(E).3i(6.F.3f);C 2a=6.2a(E);U(C i=0,1P;1P=2a[i++];){3G{C 2b=l.N.1l[1P.2c](l.39(E.G),E,1P.4W);u(2b===-1)34;u(!2b){l(E).2L(6.F.3f);6.7V(1P,E);34}}3F(e){6.F.3o&&1h.2V&&2V.1n("c5 c6 c8 c9 E "+E.Q+", 4e 7U \'"+1P.2c+"\' 2c");9F e}}},21:q(Q,1P){C m=6.F.3z[Q];B m&&(m.22==2I?m:m[1P.2c])},7V:q(1P,E){C Q=6.48(E),O=1P.4W;6.2B[Q]=(E.3x||6.21(Q,1P)||l.N.3z[1P.2c]||"<7X>cc: cd 21 ce U "+Q+"</7X>").1N("{0}",(O.22==3L?O[0]:O)||"").1N("{1}",O[1]||"")},2U:q(){u(6.82()){6.3A();B 1c}L{6.5C();u(6.F.81){6.F.81(6.5I);B 1c}B 14}},82:q(){C 4U=0;l.19(6.2B,q(){4U++});B 4U},5C:q(){6.3c("8f")},3c:q(5x){C 3k=6;q 4p(){B 3k["3M"+5x]}u(6.F.4x){4p().1y(4p().6t(6.F.4x))}4p()[5x.2t()]();B 6},86:q(){C 2D=14;U(C 4v 29 6.2B){u(2D&&6.F.80){u(6.4t&&6.2B[6.4t.Q])6.4t.4R();L{3G{C E=l("#"+4v);u(E.I)E[0].4R()}3F(e){6.F.3o&&1h.2V&&2V.1n(e)}}2D=1c}6.8g(4v,6.2B[4v])}6.2r=6.2r.2o(6.1S);6.3c("8f").3c("cw")},8g:q(Q,21){C 1n=6.2T().5G(Q);u(1n.I){u(1n.1v("8k")){1n.2i(21)}}L{1n=l("<8h>").1v({"U":Q,8k:14}).2L(6.F.3f).2i(21);u(6.F.4x){1n=1n.1D().1F().4i("<"+6.F.4x+">").1s()}u(!6.4g.3H(1n).I)6.F.6A?6.F.6A(1n,l("#"+Q)):1n.8n("#"+Q)}6.1S.1y(1n)},2a:q(E){u(!6.R(E))B[];C 2a=[];l.19(6.R(E),q(2S,G){2a[2a.I]={2c:2S,4W:G}});B 2a},R:q(E){B 6.F.2a?6.F.2a[6.48(E)]:6.F.6D?l(E).R()[6.F.6D]:l(E).R()},48:q(E){C Q=(/3U|4c/i.1q(E.H))?E.1g:E.Q;u(!Q){C 4X=E.1X.Q,4Y=/[^a-a7-2v-9\\-5K]/g;Q=E.Q=(4X?4X.1N(4Y,""):"")+E.1g.1N(4Y,"")}B Q}},3C:q(G,E){5c(E.1J.2t()){35\'3D\':B l("2k:3J",E).I;35\'44\':u(/3U|4c/i.1q(E.H))B l(E.1X||11).3p(\'[@1g="\'+E.1g+\'"]:4O\').I}B G.I},8i:q(O,E){B 6.5v[T O]?6.5v[T O](O,E):14},5v:{"6c":q(O,E){B O},"1V":q(O,E){B!!l(O,E.1X).I},"q":q(O,E){B O(E)}},1l:{1m:q(G,E,O){u(!l.N.8i(O,E))B-1;5c(E.1J.2t()){35\'3D\':C V=l("2k:3J",E);B V.I>0&&(E.H=="3D-ag"||V[0].G.I>0);35\'44\':5c(E.H.2t()){35\'4c\':35\'3U\':B l.N.3C(G,E)>0}an:B G.I>0}},cl:q(G,E,O){B!l.N.1l.1m(G,E)||O.1q(G)},7Y:q(G,E,O){C I=l.N.3C(G,E);B!l.N.1l.1m(G,E)||I>=O},6M:q(G,E,O){C I=l.N.3C(G,E);B!l.N.1l.1m(G,E)||I<=O},7R:q(G,E,O){C I=l.N.3C(G,E);B!l.N.1l.1m(G,E)||(I>=O[0]&&I<=O[1])},7L:q(G,E,O){B!l.N.1l.1m(G,E)||G>=O},6N:q(G,E,O){B!l.N.1l.1m(G,E)||G<=O},7D:q(G,E,O){B!l.N.1l.1m(G,E)||(G>=O[0]&&G<=O[1])},5t:q(G,E){B!l.N.1l.1m(G,E)||/^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$/i.1q(G)},1t:q(G,E){B!l.N.1l.1m(G,E)||/^(aA?|aC):\\/\\/[A-2v-9](\\.?[A-2v-5D„1xœ1x–][A-2v-5j\\-1x„1xœ1x–]*)*(\\/([A-2v-5D„1xœ1x–][A-2v-5j\\-\\.1x„1xœ1x–]*)?)*(\\?([A-2v-5D„1xœ1x–][A-2v-5j\\-\\.%\\+=&1x„1xœ1x–]*)?)?$/i.1q(G)},2q:q(G,E){B!l.N.1l.1m(G,E)||!/aK|8R/.1q(1Q 5m(G))},6U:q(G,E){B!l.N.1l.1m(G,E)||/^\\d{4}[/-]\\d{1,2}[/-]\\d{1,2}$/.1q(G)},6X:q(G,E){B!l.N.1l.1m(G,E)||/^\\d\\d?\\.\\d\\d?\\.\\d\\d\\d?\\d?$/.1q(G)},3m:q(G,E){B!l.N.1l.1m(G,E)||/^-?[,0-9]+(\\.\\d+)?$/.1q(G)},7g:q(G,E){B!l.N.1l.1m(G,E)||/^-?[\\.0-9]+(,\\d+)?$/.1q(G)},5b:q(G,E){B!l.N.1l.1m(G,E)||/^\\d+$/.1q(G)},6T:q(G,E,O){B G==l(""+O).1W()}},aV:q(1g,2c,21){l.N.1l[1g]=2c;l.N.3z[1g]=21}});(q($){$.fn.2g=q(V){B 6.19(q(){$.2g(6,V)})};$.2g=q(1R,V){C F={\'5k\':1b,\'2g\':\'6j\',\'32\':ec,\'7z\':\'9r\',\'1r\':\'b3\',\'4F\':\'2g\',\'1i\':\'3X\'};u(V)$.1k(F,V);u(F.5k===1b)C 1w=$(1R).5k();L C 1w=$(1R).5k(F.5k);u(1w.I>1){$(1R).K(\'2z\',\'7i\');$(1R).K(\'1i\',F["1i"]);$(1R).2L(F["4F"]);U(C i=0;i<1w.I;i++){$(1w[i]).K(\'z-2Z\',2I(1w.I-i));$(1w[i]).K(\'2z\',\'4l\');$(1w[i]).1D()};u(F["2g"]=="6j"){3j(q(){$.2g.6J(1w,F,1,0)},F.32);$(1w[0]).1F()}L u(F["2g"]=="5w"){3j(q(){do{23=4k.bV(4k.5w()*1w.I)}2M(23==0)$.2g.6J(1w,F,23,0)},F.32);$(1w[0]).1F()}L 7K(\'l: 2g: 9u "2g" 9x 9B be "6j" 4M "5w"\')}};$.2g.6J=q(1w,F,23,2u){u(F["7z"]==\'bQ\'){$(1w[2u]).bA(F.1r,$(1w[23]).bD(F.1r))}L u(F["7z"]==\'9r\'){$(1w[2u]).bH(F.1r);$(1w[23]).bM(F.1r)}L 7K(\'l: 2g: 9u "7z" 9x 9B be "bQ" 4M "9r"\');u(F["2g"]=="6j"){u((23+1)<1w.I){23=23+1;2u=23-1}L{23=0;2u=1w.I-1}}L u(F["2g"]=="5w"){2u=23;2M(23==2u)23=4k.bV(4k.5w()*1w.I)}L 7K(\'l: 2g: 9u "2g" 9x 9B be "6j" 4M "5w"\');3j((q(){$.2g.6J(1w,F,23,2u)}),F.32)}})(l);(q($){$.3r=q(){6.42={};B};$.3r.5B={5V:q(){C P={"Q":1b,"4S":4w,"6H":1c,"6E":1c,"17":1b,"36":q(){},"28":[]};q 5L(fn){B(!!fn&&T fn!="1V"&&T fn[0]=="1e"&&4u("q","i").1q(fn+""))};C i=0;C 9N=1c;u(T 18[i]=="40"&&18.I>1){9N=14;i++}u(T 18[i]=="40"){U(C 2k 29 18[i])u(T P[2k]!="1e")P[2k]=18[i][2k];i++}u(T 18[i]=="3m"||(T 18[i]=="1V"&&18[i].2y(4u("^[0-9]+[cq]$"))))P["4S"]=18[i++];u(T 18[i]=="6c")P["6H"]=18[i++];u(T 18[i]=="6c")P["6E"]=18[i++];u(T 18[i]=="40"&&T 18[i+1]=="1V"&&5L(18[i][18[i+1]])){P["17"]=18[i++];P["36"]=18[i++]}L u(T 18[i]!="1e"&&(5L(18[i])||T 18[i]=="1V"))P["36"]=18[i++];2M(T 18[i]!="1e")P["28"].1y(18[i++]);u(9N){u(T 18[1]=="40"){U(C 2k 29 18[0])u(T P[2k]!="1e"&&T 18[1][2k]=="1e")P[2k]=18[0][2k]}L{U(C 2k 29 18[0])u(T P[2k]!="1e")P[2k]=18[0][2k]}i++}P["71"]=6;P["89"]=1b;C 2y=2I(P["4S"]).2y(4u("^([0-9]+)([cq])$"));u(2y&&2y[0]!="1e"&&2y[1]!="1e")P["4S"]=2I(1d(2y[1])*{s:4w,m:4w*60,h:4w*60*60,d:4w*60*60*24,w:4w*60*60*24*7}[2y[2]]);u(P["Q"]==1b)P["Q"]=(2I(P["6H"])+":"+2I(P["6E"])+":"+2I(P["4S"])+":"+2I(P["17"])+":"+2I(P["36"])+":"+2I(P["28"]));u(P["6E"])u(T 6.42[P["Q"]]!="1e")B 6.42[P["Q"]];u(!5L(P["36"])){u(P["17"]!=1b&&T P["17"]=="40"&&T P["36"]=="1V"&&5L(P["17"][P["36"]]))P["36"]=P["17"][P["36"]];L P["36"]=6G("q () { "+P["36"]+" }")}P["89"]=6.6I(P);6.42[P["Q"]]=P;B P},8F:q(P){u(T P=="1V")P=6.42[P];P["89"]=6.6I(P);B P},6I:q(P){C aS=q(){C 17=(P["17"]!=1b?P["17"]:P);(P["36"]).1A(17,P["28"]);u(T(P["71"]).42[P["Q"]]!="1e"&&P["6H"])(P["71"]).6I(P);L 66(P["71"]).42[P["Q"]]};B 3j(aS,P["4S"])},8J:q(P){u(T P=="1V")P=6.42[P];u(T P=="40"){am(P["89"]);66 6.42[P["Q"]]}}};$.1k({3r$:1Q $.3r(),5V:q(){B $.3r$.5V.1A($.3r$,18)},8F:q(){B $.3r$.8F.1A($.3r$,18)},8J:q(){B $.3r$.8J.1A($.3r$,18)}});$.fn.1k({5V:q(){C a=[{}];U(C i=0;i<18.I;i++)a.1y(18[i]);B 6.19(q(){a[0]={"Q":6,"17":6};B $.5V.1A($,a)})}})})(l);(q($){$.1k({5u$:1b,3o:q(aO){C aR=($.5u$==14?14:1c);$.5u$=(aO?14:1c);B aR},6b:q(21){u($.5u$==14)2V.3o(21)}});$.fn.1k({6b:q(21){u($.5u$==14){B 6.19(q(){u(T 21!=="1e")$.6b(21);$.6b(6)})}}});$(11).37(q(){C 7j=$("2i").1v("3o");u(7j=="14"||7j=="1c")$.3o(7j=="14"?14:1c)});$(11).37(q(){u(T 1h.2V==="1e"){q cz(17){C 1M=1b;u(T 17==="1e")1M="[1e]";L u(T 17==="6c")1M=(17?"14":"1c");L u(T 17==="3m")1M=""+17;L u(T 17==="1V")1M=17;L u(T 17==="q")1M=17;L u(T 17==="40"){u(T 17.33!=="1e"){u(17.33==1){1M=\'&9n;\';1M+=17.1J.2t();U(C i=0;i<17.9s.I;i++)1M+=\' \'+17.9s[i].1J.2t()+\'="\'+17.9s[i].6n+\'"\';1M+=\'&9t;\'}L u(17.33==2)1M=17.1J+\'="\'+17.6n;L u(17.33==3)1M=17.6n}L u(T 17.cg!=="1e")1M=17.cg();L u(T 17.5F!=="1e")1M=17.5F()}u(1M==1b)1M="[fm]";B 1M};$(11).37(q(){$("1K").3H(\'<26 Q="4H"><4B></4B></26>\');$("#4H").K("1G","2n").K("cX","d8").K("dh","#dl").K("du","#dz").K("6w","6V 5g 6V 5g").K("64","5T b5 #dI").K("77","5T 5T 5T 5T");$("#4H 4B").K("77","5g 5g 5g 5g").K("98","er")});C 90=["6b","3o","eI","eN","1n","eY","6l","f5","fd","fi","4S","fk","4U","cD","cH","cU"];1h.2V={};U(C i=0;i<90.I;i++){1h.2V[90[i]]=q(a8){$(\'#4H\').K("1G",$.5u$==14?"41":"2n");$(\'#4H 4B\').3H(\'<1Y>\'+cz(a8)+\'</1Y>\').K;$("#4H 4B 1Y").K("e7","52 b5 #eQ").K("6w","52 6V 52 6V")}}1h.2V["4H"]=14}})})(l);',62,954,'||||||this|||||||||||||||jQuery|||||function||||if|||||||return|var||element|settings|value|type|length|elem|css|else||validator|param|ctx|id|data|event|typeof|for|options||||||document|||true||prop|obj|arguments|each|browser|null|false|parseInt|undefined|ret|name|window|height|callback|extend|methods|required|error|parentNode|xml|test|speed|parent|url|cur|attr|elements|Ã|push|filter|apply|handler|msie|hide|style|show|display|Please|enter|nodeName|body|opacity|text|replace|indexOf|rule|new|container|toShow|tabs|status|string|val|form|li|hash||message|constructor|current||firstChild|div|scope|args|in|rules|result|method|width|add|trigger|alternation|helper|html|className|option|events|nav|none|not|expr|date|toHide|px|toLowerCase|last|Z0|expires|left|match|position|global|errorList|containers|first|hidden|top|isFunction|opt|String|context|arg|addClass|while|initial|get|bind|num|reset|key|errors|valid|console|offsetHeight|queue|scrollTop|index|animate|scrollLeft|timeout|nodeType|break|case|func|ready|safari|trim|is|old|toggle|documentElement|easing|errorClass|end|target|removeClass|setTimeout|self|table|number|elems|debug|find|disabled|scheduler|tBody|visible|params|ifModified|tbody|title|bookmarkable|messages|showErrors|src|getLength|select|complete|catch|try|append|clean|selected|opera|Array|to|nth|orig|done|span|innerHTML|submit|duration|radio|tab|preventDefault|auto|merge|call|object|block|bucket|pushStack|input|offsetWidth|href|nextSibling|findId|click|tb|defaults|checkbox|mozilla|check|cookie|labelContainer|selectedClass|wrap|tSettings|Math|absolute|script|clientHeight|remove|which|borderTopWidth|borderLeftWidth|update|lastActive|RegExp|elementID|1000|wrapper|overflow|load|clicked|ol|split|remote|map|class|min|jQueryDebug|firstNum|image|currentStyle|oid|or|size|checked|fix|returnValue|focus|time|encodeURIComponent|count|showAnim|parameters|formId|idcleanup|now||mouseover|1px|grep|timers|curAnim|boxModel|stopPropagation|oldblock|exec|guid|digits|switch|prepareForm|resetForm|custom|0px|makeArray|res|9_|children|location|Date|tmp|ein|success|re|characters|sibling|email|_debug|dependTypes|random|that|errorLabelContainer|cssFloat|insertBefore|prototype|hideErrors|9Ã|XMLHttpRequest|toString|forId|hideAnim|currentForm|onShow|_|_isfn|ajaxHistory|appendTo|Number|childNodes|tID|op|multiFilter|4px|tTitle|schedule|fx|handlers|on|originalEvent||removeChild|clientWidth|domain|border|innerHeight|delete|readyList|curCSS|extraClass|re2|log|boolean|parPos|ownerDocument|onreadystatechange|has|path|substr|sequence|source|dir|static|nodeValue|scroll|st|sl|empty|containerClass|parents|setInterval|domManip|padding|onClick|disabledClass|onHide|errorPlacement|locked|toUpperCase|meta|protect|trueClick|eval|repeat|_schedule|_next|styleFloat|handle|maxLength|maxValue|tUrl|inArray|absparent|substring|foundToken|equalTo|dateISO|10px|tr|dateDE|isReady|doc|child|_scheduler|prepareElement|Function|mergeNum|unbind|mouseout|margin|diff|parseFloat|backgroundImage|step|oldDisplay|defaultView|getTime|setArray|numberDE|ajax|relative|req|errorContainer|onsubmit|selector|modRes|token|between|handleError|geben|tag|Bitte|async|Sie|ival|lastModified|oWidth|animation|responseText|jquery|and|rangeValue|getAttribute|cloneNode|button|tabEvents|than|equal|alert|minValue|readyState|errorContext|secure|oHeight|max|rangeLength|setRequestHeader|tagName|the|formatAndAdd|shift|strong|minLength|expression|focusInvalid|submitHandler|countErrors|navClass|ajaxSettings|msie6|defaultShowErrors|minHeight|ul|_handle|visibility|cachedWidth|currentWidth|cachedFontSize|currentFontSize|Hide|showError|label|depend|toShowId|generated|hideClass|showSpeed|insertAfter|remoteUrls|switchTab|loadingClass|blur|disableTab|pos|deep|reverse|appendChild|clone|startTime|swap|unique|array|h3|isXMLDoc|second|reschedule|fn2|pass|classFilter|cancel|float|pageX|offsetLeft|triggered|slice|offsetTop|lastToggle|NaN|handleHover|pageXOffset|pageYOffset|getElementById|safariTimer|innerWidth|unload|els|names|oldTitle|offset|from|delay|showBody|lastNum|fixPNG|paddingRight|matched|GET|mousemove|getComputedStyle|00|_resort|chars|no|dataType|requestDone|active|file|Modified|getResponseHeader|lt|only|evalScripts|globalEval|fade|attributes|gt|parameter|join|cookies|must|clearInterval|part|cookieValue|either|isTimeout|relparent|parts|throw|paddingLeft|paddingTop|returnObject|bgiframe|createElement|hasSelectedClass|unFocus|override|inv|jq|sort|heights|font|watchFontSize|_setAutoHeight|cachedHeight|currentHeight|fxSpeed|fxSlide|fxFade|fxShow|fxHide|clientX|hideSpeed|scrollTo|scrollX|scrollY|zA|msg|triggerTab|enableTab|prevObject|100|exclude|force|getPropertyValue|multiple|newProp|subject|alpha|zoom||clearTimeout|default|save|webkit|prepend|before|after||removeAttr|previousSibling|contains|password|tl|Microsoft|https|enabled|ftp|parse|_prefix|even|odd|pageY|unshift|srcElement|Invalid|DOMContentLoaded|__ie_init|one|onoff|_toggle|state|old_value|trampoline|swing|viewport|addMethod|dequeue|Tooltip|timer|oldOverflow|track|showURL|validate|normal|getScript|solid|POST|processData|blank|ajaxStart|filled|contentType|setDefaults|This||field|beforeSend|ajaxSend|longer|notmodified|then||of|getElementsByTagName|least|ajaxStop|long||address||URL|ISO|ajaxError|gï|httpSuccess|ltiges|slideUp|Datum|200|slideDown|httpNotModified|Last|304|fadeOut|xmlRes|eine|httpData|Nummer|fadeIn|same|json|again|slide|execScript|less|ajaxComplete|ajaxSuccess|floor|greater|365|setTime|toGMTString|_height|_width|borderBottomWidth|paddingBottom|borderRightWidth|exception|occured|offsetParent|when|checking|marginLeft|marginTop|Warning|No|defined|tabEvent|toJSONString|iframe|hashPrefix|remoteCount|tabStruct|regex|fxAutoHeight|bodyHandler|behaviour|watch|smhdw|fxShowSpeed|fxHideSpeed||action|tempForm|Show|||object2text|siblings|Loading|8230|trace|There|such|initialize|profile|RSE|createTextNode|FORM|weight|line|Bottom|Right|Left|forEach|right|every|some|profileEnd|thead|tfoot|fontFamily|td|th|callee|tooltip|readOnly|zIndex|3000|getAttributeNode|setAttribute|ig|monospace|concat|navigator|userAgent|compatible|compatMode|next|prev|prependTo|backgroundColor|removeAttribute|toggleClass|lastChild|ffffff|textarea|http||u0128|uFFFF|continue|progid|DXImageTransform|color|AlphaImageLoader|sizingMethod|htmlFor|crop|000000|readonly|clientY|cancelBubble|fromElement|toElement|relatedTarget|Infinity|removeEventListener|666699|mousedown|mouseup|change|keydown|keypress|keyup|addEventListener|write|scr|ipt|dblclick|resize|defer|loaded|slideToggle|fadeTo|Object|slow|600|hover|fast|400|linear|cos|borderBottom|PI|10000|250|loadIfModified|2000|serialize|textContent|ActiveXObject|XMLHTTP|getIfModified|getJSON|post|ajaxTimeout||ajaxSetup|application|www|urlencoded||20px|open|Content|Type|If|Since|Thu|01|Jan|1970|GMT|Requested|With|overrideMimeType|Connection|close|abort|info|send|protocol|300|content|warn|Width|responseXML|cccccc|center|horizontal|vertical|YMWDhms|YMDWhms|noConflict|invalid|assert|decodeURIComponent|scrollHeight|scrollWidth|outerHeight|outerWidth|Top|dirxml|inline|bgIframe|javascript|frameborder|tabindex|Alpha|Opacity|group|CSS1Compat|loading|500|removeExpression|groupEnd|setExpression|timeEnd||unknown|'.split('|'),0,{}))
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.ui.jscrypto.js
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ase.ui.jscrypto.js
  --- /dev/null	2007-03-28 21:44:00 +0200
  +++ ase.ui.jscrypto.js	2007-03-28 21:44:08 +0200
  @@ -0,0 +1,39 @@
  +
  +if(typeof jscrypto==='undefined')
  +jscrypto={};if(typeof jscrypto.base16==='undefined')
  +jscrypto.base16={};(function(){var _base16tab={lower:"0123456789abcdef",upper:"0123456789ABCDEF"};jscrypto.base16.encode=function(octet,upper_case){var base16="";var base16tab=_base16tab[upper_case?"upper":"lower"];var l=octet.length;for(var i=0;i<l;i++)
  +base16+=(base16tab.charAt((octet.charCodeAt(i)>>4)&0x0F)
  ++base16tab.charAt((octet.charCodeAt(i))&0x0F));return base16;};jscrypto.base16.decode=function(base16){var octet="";var base16tab=_base16tab["lower"];base16=base16.toLowerCase();var l=base16.length;if(l%2!=0){base16="0"+base16;l++;}
  +for(var i=0;i<l;i+=2)
  +octet+=String.fromCharCode((base16tab.indexOf(base16.charAt(i))<<4)|base16tab.indexOf(base16.charAt(i+1)));return octet;};})();if(typeof jscrypto==='undefined')
  +jscrypto={};if(typeof jscrypto.ui32==='undefined')
  +jscrypto.ui32={};(function(){jscrypto.ui32.add=function(x,y){var lsw=(x&0xFFFF)+(y&0xFFFF);var msw=(x>>16)+(y>>16)+(lsw>>16);return(msw<<16)|(lsw&0xFFFF);};jscrypto.ui32.rol=function(num,cnt){return(((num<<cnt)&0xFFFFFFFF)|((num>>>(32-cnt))&0xFFFFFFFF));};jscrypto.ui32.ror=function(num,cnt){return Math.abs(((num&0xFFFFFFFF)>>>cnt)|((num&0xFFFFFFFF)<<(32-cnt)));};})();if(typeof jscrypto==='undefined')
  +jscrypto={};if(typeof jscrypto.bin==='undefined')
  +jscrypto.bin={};(function(){jscrypto.bin.s2a=function(s,_options){var options={ibits:8,obits:8,obigendian:true};for(var opt in _options)
  +if(typeof options[opt]!=='undefined')
  +options[opt]=_options[opt];if(!(options.ibits==8||options.ibits==16||options.ibits==32))
  +throw SyntaxError("invalid 'ibits'");if(!(options.obits==8||options.obits==16||options.obits==32))
  +throw SyntaxError("invalid 'obits'");var a=[];var i=0;var c,C;var ck=0;var w;var wk=0;var sl=s.length;while(1){if(ck==0)
  +C=s.charCodeAt(i++);c=(C>>(options.ibits-(ck+8)))&0xFF;ck=(ck+8)%options.ibits;if(options.obigendian){if(wk==0)w=(c<<(options.obits-8));else w|=(c<<((options.obits-8)-wk));}
  +else{if(wk==0)w=c;else w|=(c<<wk);}
  +wk=(wk+8)%options.obits;if(wk==0){a.push(w);if(i>=sl)
  +break;}}
  +return a;};jscrypto.bin.a2s=function(a,_options){var options={ibits:32,ibigendian:true};for(var opt in _options)
  +if(typeof options[opt]!=='undefined')
  +options[opt]=_options[opt];if(!(options.ibits==8||options.ibits==16||options.ibits==32))
  +throw SyntaxError("invalid 'ibits'");var s="";var imask=0xFFFFFFFF;if(options.ibits<32)
  +imask=(1<<options.ibits)-1;var al=a.length;for(var i=0;i<al;i++){var w=a[i]&imask;for(var j=0;j<options.ibits;j+=8){if(options.ibigendian)
  +s+=String.fromCharCode((w>>((options.ibits-8)-j))&0xFF);else
  +s+=String.fromCharCode((w>>j)&0xFF);}}
  +return s;};})();if(typeof jscrypto==='undefined')
  +jscrypto={};if(typeof jscrypto.md==='undefined')
  +jscrypto.md={};(function(){jscrypto.md.sha1_core=function(x,len){function sha1_ft(t,b,c,d){if(t<20)
  +return(b&c)|((~b)&d);if(t<40)
  +return b^c^d;if(t<60)
  +return(b&c)|(b&d)|(c&d);return b^c^d;}
  +function sha1_kt(t){return(t<20)?1518500249:(t<40)?1859775393:(t<60)?-1894007588:-899497514;}
  +x[len>>5]|=0x80<<(24-len%32);x[((len+64>>9)<<4)+15]=len;var w=Array(80);var a=1732584193;var b=-271733879;var c=-1732584194;var d=271733878;var e=-1009589776;for(var i=0;i<x.length;i+=16){var olda=a;var oldb=b;var oldc=c;var oldd=d;var olde=e;for(var j=0;j<80;j++){if(j<16)
  +w[j]=x[i+j];else
  +w[j]=jscrypto.ui32.rol(w[j-3]^w[j-8]^w[j-14]^w[j-16],1);var t=jscrypto.ui32.add(jscrypto.ui32.add(jscrypto.ui32.rol(a,5),sha1_ft(j,b,c,d)),jscrypto.ui32.add(jscrypto.ui32.add(e,w[j]),sha1_kt(j)));e=d;d=c;c=jscrypto.ui32.rol(b,30);b=a;a=t;}
  +a=jscrypto.ui32.add(a,olda);b=jscrypto.ui32.add(b,oldb);c=jscrypto.ui32.add(c,oldc);d=jscrypto.ui32.add(d,oldd);e=jscrypto.ui32.add(e,olde);}
  +return[a,b,c,d,e];};jscrypto.md.sha1=function(s){return jscrypto.bin.a2s(jscrypto.md.sha1_core(jscrypto.bin.s2a(s,{ibits:8,obits:32,obigendian:true}),s.length*8),{ibits:32,ibigendian:true});};})();
  @@ .
  (cd ossp-pkg/ase && \
   uudecode <<'@@ .' && \
   xdelta patch ase.ui.lock.gif.xdelta /dev/null ase.ui.lock.gif && \
   rm -f ase.ui.lock.gif.xdelta)
  Index: ossp-pkg/ase/ase.ui.lock.gif
  ============================================================================
  begin 664 ase.ui.lock.gif.xdelta
  M)5A$6C`P-"4````(`!$`$`````````````````````!S:&EE;&$N,C0P-S(N
  M;G5L;'-H:65L82XR-#`W,BYA;&P?BP@````````#`P```````````!^+"```
  M``````-C8&A@9F!@,+@BVW.SGV$3R\L&SAEO?CC5`<48`#W@_+\<````````
  )52581%HP,#0E
  `
  end
  @@ .
  (cd ossp-pkg/ase && \
   uudecode <<'@@ .' && \
   xdelta patch ase.ui.lock.psd.xdelta /dev/null ase.ui.lock.psd && \
   rm -f ase.ui.lock.psd.xdelta)
  Index: ossp-pkg/ase/ase.ui.lock.psd
  ============================================================================
  begin 664 ase.ui.lock.psd.xdelta
  M)5A$6C`P-"4````(`!$`$`````````````````````!S:&EE;&$N,C0P-S(N
  M;G5L;'-H:65L82XR-#`W,BYA;&P?BP@````````#`P```````````!^+"```
  M``````-C8&A@9F!@,+@BVW.SGV$3R\L&SAEO?CC5`<48`#W@_+\<````````
  )52581%HP,#0E
  `
  end
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar 29 09:43:05 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 09CEB752926; Thu, 29 Mar 2007 09:43:04 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.logout.pl
Message-Id: <20070329074305.09CEB752926@mail.ossp.org>
Date: Thu, 29 Mar 2007 09:43:04 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Mar-2007 09:43:04
  Branch: HEAD                             Handle: 2007032908430400

  Modified files:
    ossp-pkg/ase            ase.cgi.logout.pl

  Log:
    be more XHTML strict

  Summary:
    Revision    Changes     Path
    1.14        +1  -1      ossp-pkg/ase/ase.cgi.logout.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.logout.pl
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 ase.cgi.logout.pl
  --- ossp-pkg/ase/ase.cgi.logout.pl	21 Mar 2007 07:26:45 -0000	1.13
  +++ ossp-pkg/ase/ase.cgi.logout.pl	29 Mar 2007 07:43:04 -0000	1.14
  @@ -128,7 +128,7 @@
   
       $html .=
           "<p/>\n" .
  -        "<div align=center><a class=\"button\" href=\"".$self->url(-mode => "logout")."\">" .
  +        "<div style=\"text-align: center\"><a class=\"button\" href=\"".$self->url(-mode => "logout")."\">" .
           "<b>Logout!</b>" .
           "</a></div><p/>\n";
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar 29 09:47:21 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 9DBF2752926; Thu, 29 Mar 2007 09:47:21 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.enroll.pl ase.cgi.logout.pl ase.cgi....
Message-Id: <20070329074721.9DBF2752926@mail.ossp.org>
Date: Thu, 29 Mar 2007 09:47:21 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Mar-2007 09:47:21
  Branch: HEAD                             Handle: 2007032908471901

  Added files:
    ossp-pkg/ase            ase.ui.bar.green.png ase.ui.bar.grey.png
                            ase.ui.bar.psd ase.ui.bar.red.png
  Modified files:
    ossp-pkg/ase            ase.cgi.enroll.pl ase.cgi.logout.pl
                            ase.cgi.profile.pl ase.cgi.recover.pl
                            ase.cgi.resign.pl ase.css
  Removed files:
    ossp-pkg/ase            ase.img.bar16.png

  Log:
    provide green and red buttons, too

  Summary:
    Revision    Changes     Path
    1.36        +2  -2      ossp-pkg/ase/ase.cgi.enroll.pl
    1.15        +1  -1      ossp-pkg/ase/ase.cgi.logout.pl
    1.18        +2  -2      ossp-pkg/ase/ase.cgi.profile.pl
    1.11        +4  -4      ossp-pkg/ase/ase.cgi.recover.pl
    1.7         +1  -1      ossp-pkg/ase/ase.cgi.resign.pl
    1.15        +39 -20     ossp-pkg/ase/ase.css
    1.2         BLOB        ossp-pkg/ase/ase.img.bar16.png
    1.1         BLOB        ossp-pkg/ase/ase.ui.bar.green.png
    1.1         BLOB        ossp-pkg/ase/ase.ui.bar.grey.png
    1.1         BLOB        ossp-pkg/ase/ase.ui.bar.psd
    1.1         BLOB        ossp-pkg/ase/ase.ui.bar.red.png
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	27 Mar 2007 12:54:46 -0000	1.35
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	29 Mar 2007 07:47:19 -0000	1.36
  @@ -208,13 +208,13 @@
       $html << 1;
       $html >> "button-enroll";
       $html .= $cgi->submit(
  -        -class   => 'button',
  +        -class   => 'button_red',
           -id      => 'button_cancel',
           -name    => 'button.cancel',
           -value   => 'Cancel',
       );
       $html .= $cgi->submit(
  -        -class   => 'button',
  +        -class   => 'button_green',
           -id      => 'button_enroll',
           -name    => 'button.enroll',
           -value   => 'Enroll',
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.logout.pl
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 ase.cgi.logout.pl
  --- ossp-pkg/ase/ase.cgi.logout.pl	29 Mar 2007 07:43:04 -0000	1.14
  +++ ossp-pkg/ase/ase.cgi.logout.pl	29 Mar 2007 07:47:19 -0000	1.15
  @@ -129,7 +129,7 @@
       $html .=
           "<p/>\n" .
           "<div style=\"text-align: center\"><a class=\"button\" href=\"".$self->url(-mode => "logout")."\">" .
  -        "<b>Logout!</b>" .
  +        "Logout!" .
           "</a></div><p/>\n";
   
       return;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.profile.pl
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 ase.cgi.profile.pl
  --- ossp-pkg/ase/ase.cgi.profile.pl	27 Mar 2007 12:56:03 -0000	1.17
  +++ ossp-pkg/ase/ase.cgi.profile.pl	29 Mar 2007 07:47:20 -0000	1.18
  @@ -276,13 +276,13 @@
           $html << 1;
           $html >> "button-edit";
           $html .= $cgi->submit(
  -            -class   => 'button',
  +            -class   => 'button_red',
               -id      => 'button_cancel',
               -name    => 'button.cancel',
               -value   => 'Cancel',
           );
           $html .= $cgi->submit(
  -            -class   => 'button',
  +            -class   => 'button_green',
               -id      => 'button_save',
               -name    => 'button.save',
               -value   => 'Save',
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.recover.pl
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 ase.cgi.recover.pl
  --- ossp-pkg/ase/ase.cgi.recover.pl	23 Mar 2007 09:23:41 -0000	1.10
  +++ ossp-pkg/ase/ase.cgi.recover.pl	29 Mar 2007 07:47:20 -0000	1.11
  @@ -160,13 +160,13 @@
           #   generate the buttons
           $html >> "button-recover";
           $html .= $cgi->submit(
  -            -class   => 'button',
  +            -class   => 'button_red',
               -id      => 'button_cancel',
               -name    => 'button.cancel',
               -value   => 'Cancel',
           );
           $html .= $cgi->submit(
  -            -class   => 'button',
  +            -class   => 'button_green',
               -id      => 'button_recover',
               -name    => 'button.recover',
               -value   => 'Recover',
  @@ -460,13 +460,13 @@
           #   generate the form buttons
           $html >> "button-recover";
           $html .= $cgi->submit(
  -            -class   => 'button',
  +            -class   => 'button_red',
               -id      => 'button_cancel',
               -name    => 'button.cancel',
               -value   => 'Cancel',
           );
           $html .= $cgi->submit(
  -            -class   => 'button',
  +            -class   => 'button_green',
               -id      => 'button_recover',
               -name    => 'button.recover',
               -value   => 'Recover',
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.resign.pl
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ase.cgi.resign.pl
  --- ossp-pkg/ase/ase.cgi.resign.pl	27 Mar 2007 11:14:07 -0000	1.6
  +++ ossp-pkg/ase/ase.cgi.resign.pl	29 Mar 2007 07:47:20 -0000	1.7
  @@ -114,7 +114,7 @@
           #   generate the form buttons
           $html >> "button-resign";
           $html .= $cgi->submit(
  -            -class   => 'button_attention',
  +            -class   => 'button_red',
               -id      => 'button_resign',
               -name    => 'button.resign',
               -value   => 'Resign',
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.css
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 ase.css
  --- ossp-pkg/ase/ase.css	28 Mar 2007 19:44:07 -0000	1.14
  +++ ossp-pkg/ase/ase.css	29 Mar 2007 07:47:20 -0000	1.15
  @@ -39,7 +39,7 @@
   .ase a.button {
       color:            #444444;
       background:       #f8f8f8;
  -    background-image: url('ase.img.bar16.png');
  +    background-image: url('ase.ui.bar.grey.png');
       border-top:       1px solid #f0f0f0;
       border-left:      1px solid #cccccc;
       border-right:     1px solid #999999;
  @@ -47,15 +47,25 @@
       padding:          1px 8px 1px 8px;
       margin:           0px 1px 0px 1px;
   }
  -.ase a.button_attention {
  -    font-weight:      bold;
  -    color:            #cc3333;
  -    background:       #f8f8f8;
  -    background-image: url('ase.img.bar16.png');
  -    border-top:       1px solid #f03333;
  -    border-left:      1px solid #f03333;
  -    border-right:     1px solid #990000;
  -    border-bottom:    1px solid #990000;
  +.ase a.button_red {
  +    color:            #993333;
  +    background:       #fff8f8;
  +    background-image: url('ase.ui.bar.red.png');
  +    border-top:       1px solid #f09999;
  +    border-left:      1px solid #f09999;
  +    border-right:     1px solid #993333;
  +    border-bottom:    1px solid #993333;
  +    padding:          1px 8px 1px 8px;
  +    margin:           0px 1px 0px 1px;
  +}
  +.ase a.button_green {
  +    color:            #339933;
  +    background:       #f8fff8;
  +    background-image: url('ase.ui.bar.green.png');
  +    border-top:       1px solid #99f099;
  +    border-left:      1px solid #99f099;
  +    border-right:     1px solid #339933;
  +    border-bottom:    1px solid #339933;
       padding:          1px 8px 1px 8px;
       margin:           0px 1px 0px 1px;
   }
  @@ -174,22 +184,31 @@
   .ase input.button {
       color:            #444444;
       background:       #f8f8f8;
  -    background-image: url('ase.img.bar16.png');
  +    background-image: url('ase.ui.bar.grey.png');
       border-top:       1px solid #f0f0f0;
       border-left:      1px solid #cccccc;
       border-right:     1px solid #999999;
       border-bottom:    1px solid #666666;
       margin:           0px 1px 0px 1px;
   }
  -.ase input.button_attention {
  -    font-weight:      bold;
  -    color:            #cc3333;
  -    background:       #f8f8f8;
  -    background-image: url('ase.img.bar16.png');
  -    border-top:       1px solid #f0f0f0;
  -    border-left:      1px solid #cccccc;
  -    border-right:     1px solid #999999;
  -    border-bottom:    1px solid #666666;
  +.ase input.button_red {
  +    color:            #993333;
  +    background:       #fff8f8;
  +    background-image: url('ase.ui.bar.red.png');
  +    border-top:       1px solid #f09999;
  +    border-left:      1px solid #f09999;
  +    border-right:     1px solid #993333;
  +    border-bottom:    1px solid #993333;
  +    margin:           0px 1px 0px 1px;
  +}
  +.ase input.button_green {
  +    color:            #339933;
  +    background:       #f8fff8;
  +    background-image: url('ase.ui.bar.green.png');
  +    border-top:       1px solid #99f099;
  +    border-left:      1px solid #99f099;
  +    border-right:     1px solid #339933;
  +    border-bottom:    1px solid #339933;
       margin:           0px 1px 0px 1px;
   }
   
  @@ .
  rm -f ossp-pkg/ase/ase.img.bar16.png <<'@@ .'
  Index: ossp-pkg/ase/ase.img.bar16.png
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  (cd ossp-pkg/ase && \
   uudecode <<'@@ .' && \
   xdelta patch ase.ui.bar.green.png.xdelta /dev/null ase.ui.bar.green.png && \
   rm -f ase.ui.bar.green.png.xdelta)
  Index: ossp-pkg/ase/ase.ui.bar.green.png
  ============================================================================
  begin 664 ase.ui.bar.green.png.xdelta
  M)5A$6C`P-"4````(`!$`$`````````````````````!S:&EE;&$N,3$W-S0N
  M;G5L;'-H:65L82XQ,3<W-"YA;&P?BP@````````#`P```````````!^+"```
  M``````-C8&A@9F!@,+@BVW.SGV$3R\L&SAEO?CC5`<48`#W@_+\<````````
  )52581%HP,#0E
  `
  end
  @@ .
  (cd ossp-pkg/ase && \
   uudecode <<'@@ .' && \
   xdelta patch ase.ui.bar.grey.png.xdelta /dev/null ase.ui.bar.grey.png && \
   rm -f ase.ui.bar.grey.png.xdelta)
  Index: ossp-pkg/ase/ase.ui.bar.grey.png
  ============================================================================
  begin 664 ase.ui.bar.grey.png.xdelta
  M)5A$6C`P-"4````(`!$`$`````````````````````!S:&EE;&$N,3$W-S0N
  M;G5L;'-H:65L82XQ,3<W-"YA;&P?BP@````````#`P```````````!^+"```
  M``````-C8&A@9F!@,+@BVW.SGV$3R\L&SAEO?CC5`<48`#W@_+\<````````
  )52581%HP,#0E
  `
  end
  @@ .
  (cd ossp-pkg/ase && \
   uudecode <<'@@ .' && \
   xdelta patch ase.ui.bar.psd.xdelta /dev/null ase.ui.bar.psd && \
   rm -f ase.ui.bar.psd.xdelta)
  Index: ossp-pkg/ase/ase.ui.bar.psd
  ============================================================================
  begin 664 ase.ui.bar.psd.xdelta
  M)5A$6C`P-"4````(`!$`$`````````````````````!S:&EE;&$N,3$W-S0N
  M;G5L;'-H:65L82XQ,3<W-"YA;&P?BP@````````#`P```````````!^+"```
  M``````-C8&A@9F!@,+@BVW.SGV$3R\L&SAEO?CC5`<48`#W@_+\<````````
  )52581%HP,#0E
  `
  end
  @@ .
  (cd ossp-pkg/ase && \
   uudecode <<'@@ .' && \
   xdelta patch ase.ui.bar.red.png.xdelta /dev/null ase.ui.bar.red.png && \
   rm -f ase.ui.bar.red.png.xdelta)
  Index: ossp-pkg/ase/ase.ui.bar.red.png
  ============================================================================
  begin 664 ase.ui.bar.red.png.xdelta
  M)5A$6C`P-"4````(`!$`$`````````````````````!S:&EE;&$N,3$W-S0N
  M;G5L;'-H:65L82XQ,3<W-"YA;&P?BP@````````#`P```````````!^+"```
  M``````-C8&A@9F!@,+@BVW.SGV$3R\L&SAEO?CC5`<48`#W@_+\<````````
  )52581%HP,#0E
  `
  end
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar 29 10:42:18 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id A2B38752861; Thu, 29 Mar 2007 10:42:18 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.enroll.pl ase.cgi.login.pl ase.cgi.l...
Message-Id: <20070329084218.A2B38752861@mail.ossp.org>
Date: Thu, 29 Mar 2007 10:42:18 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Mar-2007 10:42:18
  Branch: HEAD                             Handle: 2007032909421601

  Added files:
    ossp-pkg/ase            ase.ui.bg.jpg ase.ui.bg.psd
  Modified files:
    ossp-pkg/ase            ase.cgi.enroll.pl ase.cgi.login.pl
                            ase.cgi.logout.pl ase.cgi.main.pl
                            ase.cgi.profile.pl ase.cgi.recover.pl
                            ase.cgi.resign.pl ase.css ase.html
  Removed files:
    ossp-pkg/ase            ase.img.logo.png

  Log:
    polish the canvas style

  Summary:
    Revision    Changes     Path
    1.37        +7  -13     ossp-pkg/ase/ase.cgi.enroll.pl
    1.29        +3  -3      ossp-pkg/ase/ase.cgi.login.pl
    1.16        +2  -8      ossp-pkg/ase/ase.cgi.logout.pl
    1.31        +7  -2      ossp-pkg/ase/ase.cgi.main.pl
    1.19        +1  -3      ossp-pkg/ase/ase.cgi.profile.pl
    1.12        +1  -3      ossp-pkg/ase/ase.cgi.recover.pl
    1.8         +1  -3      ossp-pkg/ase/ase.cgi.resign.pl
    1.16        +26 -25     ossp-pkg/ase/ase.css
    1.6         +4  -1      ossp-pkg/ase/ase.html
    1.2         BLOB        ossp-pkg/ase/ase.img.logo.png
    1.1         BLOB        ossp-pkg/ase/ase.ui.bg.jpg
    1.1         BLOB        ossp-pkg/ase/ase.ui.bg.psd
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.36 -r1.37 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	29 Mar 2007 07:47:19 -0000	1.36
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	29 Mar 2007 08:42:16 -0000	1.37
  @@ -36,9 +36,10 @@
       my $cgi  = $self->param(-cgi);
       my $html = $self->param(-html);
   
  +    #   generate title
  +    $html .= "<h1>Account Enrollment</h1>\n";
  +
       #   generate the outer canvas
  -    $html .= "<div class=\"ase_boxed\">\n";
  -    $html .= "<span class=\"title\">Account Enrollment</span>\n";
       $html .=
           "<ul class=\"breadcrumb\">\n" .
           "  <li><a href=\"".$self->url(-mode => "login")."\">Login &rarr;</a></li>\n" .
  @@ -56,7 +57,6 @@
       ) . "\n";
       $html->fold("canvas");
       $html .= "</div>" . $cgi->end_form() . "\n";
  -    $html .= "</div>\n";
       $html >> "canvas";
   
       #   generate step-by-step list
  @@ -418,8 +418,7 @@
       ) or die $Mail::Sendmail::error;
   
       #   generate the outer canvas
  -    $html .= "<div class=\"ase_boxed\">\n";
  -    $html .= "<span class=\"title\">Account Enrollment</span>\n";
  +    $html .= "<h1>Account Enrollment</h1>\n";
       $html .=
           "<ul class=\"breadcrumb\">\n" .
           "  <li><a href=\"".$self->url(-mode => "login")."\">Login &rarr;</a></li>\n" .
  @@ -437,7 +436,6 @@
       ) . "\n";
       $html->fold("canvas");
       $html .= $cgi->end_form() . "\n";
  -    $html .= "</div>\n";
       $html >> "canvas";
   
       #   back
  @@ -482,8 +480,7 @@
           SELECT * FROM ase_enrollment WHERE en_uuid = ?;
       }, $uuid)->hash();
       if (not defined($rec)) {
  -        $html .= "<div class=\"ase_boxed\">\n" .
  -                 "<span class=\"title\">Account Enrollment</span>\n" .
  +        $html .= "<h1>Account Enrollment</h1>\n" .
                    "<h3 class=\"error\">ERROR: ACTIVATION FAILED</h3>\n" .
                    "Sorry, no enrollment information found under " .
                    "UUID $uuid. Either you waited too long for activating " .
  @@ -494,8 +491,7 @@
                    "<p/>\n" .
                    "<a class=\"button\" href=\"".$self->url(-mode => "enrollment")."\">" .
                    "Go to <b>Enrollment</b> screen" .
  -                 "</a>\n" .
  -                 "</div>\n";
  +                 "</a>\n";
           return;
       }
   
  @@ -525,15 +521,13 @@
   
       #   provide final information
       $html .=
  -         "<div class=\"ase_boxed\">\n" .
  -         "<span class=\"title\">Account Enrollment</span>\n";
  +         "<h1>Account Enrollment</h1>\n";
       $html .=
           "<ul class=\"breadcrumb\">\n" .
           "  <li><a href=\"".$self->url(-mode => "login")."\">Login &rarr;</a></li>\n" .
           "  <li>Enrollment:</li>\n" .
           "</ul>\n";
       $html->fold("canvas");
  -    $html .= "</div>\n";
       $html >> "canvas";
   
       #   generate step-by-step list
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	28 Mar 2007 19:44:07 -0000	1.28
  +++ ossp-pkg/ase/ase.cgi.login.pl	29 Mar 2007 08:42:16 -0000	1.29
  @@ -36,9 +36,10 @@
       my $cgi  = $self->param(-cgi);
       my $html = $self->param(-html);
   
  +    #   generate title
  +    $html .= "<h1>Login</h1>\n";
  +
       #   generate the outer canvas
  -    $html .= "<div class=\"ase_boxed\">\n";
  -    $html .= "<span class=\"title\">Login</span>\n";
       $html .= $cgi->start_form(
           -method => 'POST',
           -action => $self->url(),
  @@ -51,7 +52,6 @@
       ) . "\n";
       $html->fold("canvas");
       $html .= "</div>" . $cgi->end_form() . "\n";
  -    $html .= "</div>\n";
       $html >> "canvas";
   
       #   generate header text
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.logout.pl
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 ase.cgi.logout.pl
  --- ossp-pkg/ase/ase.cgi.logout.pl	29 Mar 2007 07:47:19 -0000	1.15
  +++ ossp-pkg/ase/ase.cgi.logout.pl	29 Mar 2007 08:42:16 -0000	1.16
  @@ -51,11 +51,7 @@
       $session->delete();
   
       #   generate canvas
  -    $html .= "<div class=\"ase_boxed\">\n";
  -    $html .= "<span class=\"title\">Logout</span>\n";
  -    $html->fold("canvas");
  -    $html .= "</div>\n";
  -    $html >> "canvas";
  +    $html .= "<h1>Logout</h1>\n";
   
       #   generate description
       $html .=
  @@ -100,8 +96,7 @@
       my $session = $self->param(-session);
   
       #   generate the outer canvas
  -    $html .= "<div class=\"ase_boxed\">\n";
  -    $html .= "<span class=\"title\">Main Menu</span>\n";
  +    $html .= "<h1>Main Menu</h1>\n";
       $html .= $cgi->start_form(
           -method => 'POST',
           -action => $self->url(),
  @@ -114,7 +109,6 @@
       ) . "\n";
       $html->fold("canvas");
       $html .= $cgi->end_form() . "\n";
  -    $html .= "</div>\n";
       $html >> "canvas";
   
       #   insert navigation tab
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	28 Mar 2007 19:44:07 -0000	1.30
  +++ ossp-pkg/ase/ase.cgi.main.pl	29 Mar 2007 08:42:17 -0000	1.31
  @@ -169,8 +169,13 @@
           $html->undivert();
           $html->divert("body");
           $html .= "<div class=\"ase\">\n";
  -        $html .= "  "; $html->fold();
  -        $html .= "<\/div>\n";
  +        $html .= "  <div class=\"box\">\n";
  +        $html .= "    "; $html->fold();
  +        $html .= "    <div class=\"footer\">\n";
  +        $html .= "      " . sprintf("%s %s (%s)", $cfg->{-prog_name}, $cfg->{-prog_vers}, $cfg->{-prog_date}) . "\n";
  +        $html .= "    </div>\n";
  +        $html .= "  </div>\n";
  +        $html .= "</div>\n";
           $html->divert();
   
           #   store HTML canvas output object
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.profile.pl
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 ase.cgi.profile.pl
  --- ossp-pkg/ase/ase.cgi.profile.pl	29 Mar 2007 07:47:20 -0000	1.18
  +++ ossp-pkg/ase/ase.cgi.profile.pl	29 Mar 2007 08:42:17 -0000	1.19
  @@ -40,8 +40,7 @@
       #   generate the outer canvas
       my $canvas = sub {
           my ($self, $cgi, $html) = @_;
  -        $html .= "<div class=\"ase_boxed\">\n";
  -        $html .= "<span class=\"title\">Main Menu</span>\n";
  +        $html .= "<h1>Main Menu</h1>\n";
           $html .= $cgi->start_form(
               -method => 'POST',
               -action => $self->url(),
  @@ -54,7 +53,6 @@
           ) . "\n";
           $html->fold("canvas");
           $html .= $cgi->end_form() . "\n";
  -        $html .= "</div>\n";
           $html >> "canvas";
   
           #   insert navigation tab
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.recover.pl
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 ase.cgi.recover.pl
  --- ossp-pkg/ase/ase.cgi.recover.pl	29 Mar 2007 07:47:20 -0000	1.11
  +++ ossp-pkg/ase/ase.cgi.recover.pl	29 Mar 2007 08:42:17 -0000	1.12
  @@ -43,8 +43,7 @@
       #   generate the outer canvas
       my $canvas = sub {
           my ($html, $step) = @_;
  -        $html .= "<div class=\"ase_boxed\">\n";
  -        $html .= "<span class=\"title\">Password Recovery</span>\n";
  +        $html .= "<h1>Password Recovery</h1>\n";
           $html .=
               "<ul class=\"breadcrumb\">\n" .
               "  <li><a href=\"".$self->url(-mode => "login")."\">Login &rarr;</a></li>\n" .
  @@ -62,7 +61,6 @@
           ) . "\n";
           $html->fold("canvas");
           $html .= "</div>" . $cgi->end_form() . "\n";
  -        $html .= "</div>\n";
           $html >> "canvas";
           my $steps = [
               [ "1", "Specify Account Information" ],
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.resign.pl
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 ase.cgi.resign.pl
  --- ossp-pkg/ase/ase.cgi.resign.pl	29 Mar 2007 07:47:20 -0000	1.7
  +++ ossp-pkg/ase/ase.cgi.resign.pl	29 Mar 2007 08:42:17 -0000	1.8
  @@ -41,8 +41,7 @@
       #   generate the outer canvas
       my $canvas = sub {
           my ($self, $cgi, $html) = @_;
  -        $html .= "<div class=\"ase_boxed\">\n";
  -        $html .= "<span class=\"title\">Main Menu</span>\n";
  +        $html .= "<h1>Main Menu</h1>\n";
           $html .= $cgi->start_form(
               -method => 'POST',
               -action => $self->url(),
  @@ -55,7 +54,6 @@
           ) . "\n";
           $html->fold("canvas");
           $html .= $cgi->end_form() . "\n";
  -        $html .= "</div>\n";
           $html >> "canvas";
   
           #   insert navigation tab
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.css
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 ase.css
  --- ossp-pkg/ase/ase.css	29 Mar 2007 07:47:20 -0000	1.15
  +++ ossp-pkg/ase/ase.css	29 Mar 2007 08:42:17 -0000	1.16
  @@ -26,9 +26,30 @@
   
   /* General: Outer Canvas */
   DIV.ase {
  -    padding:          10px 0px 10px 0px;
       width:            600px;
  +    margin-top:       3px;
  +    margin-left:      3px;
       font-family:      sans-serif, helvetica, arial;
  +    background:       #f0f0f0;
  +}
  +.ase div.box {
  +    border-top:       1px solid #e0e0e0;
  +    border-left:      1px solid #e0e0e0;
  +    border-right:     1px solid #cccccc;
  +    border-bottom:    1px solid #cccccc;
  +    padding:          16px 16px 16px 16px;
  +    position:         relative;
  +    left:             -3px;
  +    top:              -3px;
  +    background-image: url('ase.ui.bg.jpg');
  +}   
  +.ase div.box div.footer {
  +    position:         absolute;
  +    bottom:           6px;
  +    right:            16px;
  +    font-family:      sans-serif, helvetica, arial;
  +    font-size:        8pt;
  +    color:            #cccccc;
   }
   .ase a {
       color:            #666699;
  @@ -91,8 +112,9 @@
   .ase h1 {
       font-family:      tahoma, arial, helvetica, sans-serif;
       font-weight:      bold;
  -    font-size:        32px;
  +    font-size:        28px;
       margin:           0px 0px 8px 0px;
  +    color:            #666666;
   }
   .ase h1.error {
       color:            #cc3333;
  @@ -102,6 +124,7 @@
       font-weight:      bold;
       font-size:        24px;
       margin:           0px 0px 8px 0px;
  +    color:            #666666;
   }
   .ase h2.error {
       color:            #cc3333;
  @@ -111,34 +134,12 @@
       font-weight:      bold;
       font-size:        16px;
       margin:           0px 0px 8px 0px;
  +    color:            #666666;
   }
   .ase h3.error {
       color:            #cc3333;
   }
   
  -/* General: Boxes */
  -.ase div.ase_boxed {
  -    background-color: #ffffff;
  -    border:           1px solid #cccccc;
  -    margin-top:       24px;
  -    padding:          34px 16px 16px 16px;
  -    position:         relative;
  -}   
  -.ase div.ase_boxed span.title {
  -    display:          inline;
  -    position:         absolute;
  -    color:            #999999;
  -    font-family:      tahoma, arial, helvetica, sans-serif;
  -    font-weight:      bold;
  -    font-size:        24px;
  -    height:           32px;
  -    background:       #ffffff;
  -    top:              -18px;
  -    left:             16px;
  -    padding:          1px 4px 1px 4px;
  -    border:           1px solid #cccccc;
  -}
  -
   /* Step List */
   .ase ol.steps {
       border-left:      4px solid #e0e0e0;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.html
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ase.html
  --- ossp-pkg/ase/ase.html	28 Nov 2005 21:00:43 -0000	1.5
  +++ ossp-pkg/ase/ase.html	29 Mar 2007 08:42:17 -0000	1.6
  @@ -5,7 +5,10 @@
       <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
       <title>ASE</title>
       <style type="text/css">
  -      body { margin-left: 50px; }
  +      body {
  +          margin-top:  50px;
  +          margin-left: 50px;
  +      }
       </style>
       <!-- ASE: HEAD -->
     </head>
  @@ .
  rm -f ossp-pkg/ase/ase.img.logo.png <<'@@ .'
  Index: ossp-pkg/ase/ase.img.logo.png
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  (cd ossp-pkg/ase && \
   uudecode <<'@@ .' && \
   xdelta patch ase.ui.bg.jpg.xdelta /dev/null ase.ui.bg.jpg && \
   rm -f ase.ui.bg.jpg.xdelta)
  Index: ossp-pkg/ase/ase.ui.bg.jpg
  ============================================================================
  begin 664 ase.ui.bg.jpg.xdelta
  M)5A$6C`P-"4````(`!$`$`````````````````````!S:&EE;&$N-#$Y-34N
  M;G5L;'-H:65L82XT,3DU-2YA;&P?BP@````````#`P```````````!^+"```
  M``````-C8&A@9F!@,+@BVW.SGV$3R\L&SAEO?CC5`<48`#W@_+\<````````
  )52581%HP,#0E
  `
  end
  @@ .
  (cd ossp-pkg/ase && \
   uudecode <<'@@ .' && \
   xdelta patch ase.ui.bg.psd.xdelta /dev/null ase.ui.bg.psd && \
   rm -f ase.ui.bg.psd.xdelta)
  Index: ossp-pkg/ase/ase.ui.bg.psd
  ============================================================================
  begin 664 ase.ui.bg.psd.xdelta
  M)5A$6C`P-"4````(`!$`$`````````````````````!S:&EE;&$N-#$Y-34N
  M;G5L;'-H:65L82XT,3DU-2YA;&P?BP@````````#`P```````````!^+"```
  M``````-C8&A@9F!@,+@BVW.SGV$3R\L&SAEO?CC5`<48`#W@_+\<````````
  )52581%HP,#0E
  `
  end
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar 29 10:43:42 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 12696752861; Thu, 29 Mar 2007 10:43:42 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.css
Message-Id: <20070329084342.12696752861@mail.ossp.org>
Date: Thu, 29 Mar 2007 10:43:42 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Mar-2007 10:43:42
  Branch: HEAD                             Handle: 2007032909434100

  Modified files:
    ossp-pkg/ase            ase.css

  Log:
    fix bottom padding

  Summary:
    Revision    Changes     Path
    1.17        +1  -1      ossp-pkg/ase/ase.css
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.css
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 ase.css
  --- ossp-pkg/ase/ase.css	29 Mar 2007 08:42:17 -0000	1.16
  +++ ossp-pkg/ase/ase.css	29 Mar 2007 08:43:41 -0000	1.17
  @@ -37,7 +37,7 @@
       border-left:      1px solid #e0e0e0;
       border-right:     1px solid #cccccc;
       border-bottom:    1px solid #cccccc;
  -    padding:          16px 16px 16px 16px;
  +    padding:          16px 16px 32px 16px;
       position:         relative;
       left:             -3px;
       top:              -3px;
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar 29 12:05:14 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 808C3752893; Thu, 29 Mar 2007 12:05:14 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.login.pl
Message-Id: <20070329100514.808C3752893@mail.ossp.org>
Date: Thu, 29 Mar 2007 12:05:14 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Mar-2007 12:05:14
  Branch: HEAD                             Handle: 2007032911051300

  Modified files:
    ossp-pkg/ase            ase.cgi.login.pl

  Log:
    fix login failures

  Summary:
    Revision    Changes     Path
    1.30        +34 -32     ossp-pkg/ase/ase.cgi.login.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	29 Mar 2007 08:42:16 -0000	1.29
  +++ ossp-pkg/ase/ase.cgi.login.pl	29 Mar 2007 10:05:13 -0000	1.30
  @@ -345,38 +345,40 @@
       #   error processing
       ERROR:
       if ($error) {
  -        #   record login as failed
  -        $dbi->query(q{
  -            INSERT INTO ase_login (lo_uuid, lo_time, lo_success) VALUES (?, ?, 0);
  -        }, $me_uuid, $self->datetime(time()));
  -
  -        #   intruder detection & prevention
  -        my $N = $cfg->{-cfg}->{"login-failures-max"};                            # N failed logins...
  -        my $M = $self->human2sec($cfg->{-cfg}->{"login-failures-time-range"});   # ...within M minutes...
  -        my $P = $self->human2sec($cfg->{-cfg}->{"login-failures-time-penalty"}); # ...cause P minutes penalty.
  -        my $t1 = $self->datetime(time() - $M);
  -        my $t2 = $self->datetime(time() + $P);
  -        my ($count) = $dbi->query(q{
  -            SELECT COUNT(*)
  -            FROM   ase_login
  -            WHERE  lo_uuid    = ? AND
  -                   lo_success = 0 AND
  -                   lo_time    > MAX(?, COALESCE((
  -                       SELECT MAX(lo_time)
  -                       FROM   ase_login
  -                       WHERE  lo_uuid    = ? AND
  -                              lo_success = 1 AND
  -                              lo_time    > ?
  -                   ), 0))
  -        }, $me_uuid, $t1, $me_uuid, $t1)->list();
  -        if (($count || 0) > $N) {
  +        if (defined $me_uuid) {
  +            #   record login as failed
               $dbi->query(q{
  -                UPDATE ase_member
  -                SET    me_account_lock = ?,
  -                       me_account_lock_reason = ?
  -                WHERE  me_uuid = ?
  -            }, $t2, "$N failed logins within $M minutes", $me_uuid
  -            ) or die $dbi->error();
  +                INSERT INTO ase_login (lo_uuid, lo_time, lo_success) VALUES (?, ?, 0);
  +            }, $me_uuid, $self->datetime(time())) or die $dbi->error();
  +
  +            #   intruder detection & prevention
  +            my $N = $cfg->{-cfg}->{"login-failures-max"};                            # N failed logins...
  +            my $M = $self->human2sec($cfg->{-cfg}->{"login-failures-time-range"});   # ...within M minutes...
  +            my $P = $self->human2sec($cfg->{-cfg}->{"login-failures-time-penalty"}); # ...cause P minutes penalty.
  +            my $t1 = $self->datetime(time() - $M);
  +            my $t2 = $self->datetime(time() + $P);
  +            my ($count) = $dbi->query(q{
  +                SELECT COUNT(*)
  +                FROM   ase_login
  +                WHERE  lo_uuid    = ? AND
  +                       lo_success = 0 AND
  +                       lo_time    > MAX(?, COALESCE((
  +                           SELECT MAX(lo_time)
  +                           FROM   ase_login
  +                           WHERE  lo_uuid    = ? AND
  +                                  lo_success = 1 AND
  +                                  lo_time    > ?
  +                       ), 0))
  +            }, $me_uuid, $t1, $me_uuid, $t1)->list();
  +            if (($count || 0) > $N) {
  +                $dbi->query(q{
  +                    UPDATE ase_member
  +                    SET    me_account_lock = ?,
  +                           me_account_lock_reason = ?
  +                    WHERE  me_uuid = ?
  +                }, $t2, "$N failed logins within $M minutes", $me_uuid
  +                ) or die $dbi->error();
  +            }
           }
   
           #   go back to login form
  @@ -386,7 +388,7 @@
       #   record login as successful
       $dbi->query(q{
           INSERT INTO ase_login (lo_uuid, lo_time, lo_success) VALUES (?, ?, 1);
  -    }, $me_uuid, $self->datetime(time()));
  +    }, $me_uuid, $self->datetime(time())) or die $dbi->error();
   
       #   make account active in case it was inactive
       $dbi->query(q{
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar 29 12:06:43 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 08F5A752FC1; Thu, 29 Mar 2007 12:06:42 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.login.pl
Message-Id: <20070329100643.08F5A752FC1@mail.ossp.org>
Date: Thu, 29 Mar 2007 12:06:42 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Mar-2007 12:06:42
  Branch: HEAD                             Handle: 2007032911064100

  Modified files:
    ossp-pkg/ase            ase.cgi.login.pl

  Log:
    give more space for SHA-1 sum

  Summary:
    Revision    Changes     Path
    1.31        +2  -2      ossp-pkg/ase/ase.cgi.login.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	29 Mar 2007 10:05:13 -0000	1.30
  +++ ossp-pkg/ase/ase.cgi.login.pl	29 Mar 2007 10:06:41 -0000	1.31
  @@ -103,7 +103,7 @@
           -name     => 'login',
           -default  => ($cgi->param("login") || ""),
           -tabindex => 1,
  -        -size     => 30,
  +        -size     => 40,
       );
       $html << 1;
       $html >> "field-password";
  @@ -114,7 +114,7 @@
           -name     => 'password',
           -default  => '',
           -tabindex => 2,
  -        -size     => 30,
  +        -size     => 40,
       );
       $html .= "<div id=\"lock\"></div>";
       $html .= "</div>\n";
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar 29 13:13:24 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 852337528EC; Thu, 29 Mar 2007 13:13:24 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.css ase.html
Message-Id: <20070329111324.852337528EC@mail.ossp.org>
Date: Thu, 29 Mar 2007 13:13:24 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Mar-2007 13:13:24
  Branch: HEAD                             Handle: 2007032912132400

  Modified files:
    ossp-pkg/ase            ase.css ase.html

  Log:
    polish style

  Summary:
    Revision    Changes     Path
    1.18        +4  -6      ossp-pkg/ase/ase.css
    1.7         +1  -0      ossp-pkg/ase/ase.html
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.css
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 ase.css
  --- ossp-pkg/ase/ase.css	29 Mar 2007 08:43:41 -0000	1.17
  +++ ossp-pkg/ase/ase.css	29 Mar 2007 11:13:24 -0000	1.18
  @@ -27,20 +27,18 @@
   /* General: Outer Canvas */
   DIV.ase {
       width:            600px;
  -    margin-top:       3px;
  -    margin-left:      3px;
  +    padding:          2px 2px 2px 2px;
       font-family:      sans-serif, helvetica, arial;
  -    background:       #f0f0f0;
  +    background:       #f8f8f8;
   }
   .ase div.box {
  +    background:       #f8f8f8;
  +    position:         relative;
       border-top:       1px solid #e0e0e0;
       border-left:      1px solid #e0e0e0;
       border-right:     1px solid #cccccc;
       border-bottom:    1px solid #cccccc;
       padding:          16px 16px 32px 16px;
  -    position:         relative;
  -    left:             -3px;
  -    top:              -3px;
       background-image: url('ase.ui.bg.jpg');
   }   
   .ase div.box div.footer {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.html
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ase.html
  --- ossp-pkg/ase/ase.html	29 Mar 2007 08:42:17 -0000	1.6
  +++ ossp-pkg/ase/ase.html	29 Mar 2007 11:13:24 -0000	1.7
  @@ -8,6 +8,7 @@
         body {
             margin-top:  50px;
             margin-left: 50px;
  +          background-color: #ffffff;
         }
       </style>
       <!-- ASE: HEAD -->
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar 29 13:46:22 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 44F407528B9; Thu, 29 Mar 2007 13:46:22 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO
Message-Id: <20070329114622.44F407528B9@mail.ossp.org>
Date: Thu, 29 Mar 2007 13:46:22 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   29-Mar-2007 13:46:22
  Branch: HEAD                             Handle: 2007032912462100

  Modified files:
    ossp-pkg/ase            TODO

  Log:
    remember that THL needs one more feature

  Summary:
    Revision    Changes     Path
    1.38        +1  -0      ossp-pkg/ase/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 TODO
  --- ossp-pkg/ase/TODO	27 Mar 2007 12:59:42 -0000	1.37
  +++ ossp-pkg/ase/TODO	29 Mar 2007 11:46:21 -0000	1.38
  @@ -1,5 +1,6 @@
   
   TODO:
  +- RPC for verifying login & password -> ok+uuid or not ok
   - heartbeat -> disable
   - cron: active (on every login), mail, inactive (after n months), mail, deleted
   - check URL fetching and its caching because of DBIx::Simple:
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 30 09:58:12 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 3ED4B7528ED; Fri, 30 Mar 2007 09:58:12 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ChangeLog ase.cgi.login.pl ase.cgi.rpc.pl as...
Message-Id: <20070330075812.3ED4B7528ED@mail.ossp.org>
Date: Fri, 30 Mar 2007 09:58:12 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Mar-2007 09:58:12
  Branch: HEAD                             Handle: 2007033008581000

  Modified files:
    ossp-pkg/ase            ChangeLog ase.cgi.login.pl ase.cgi.rpc.pl ase.pm

  Log:
    Support "authenticate" RPC method for explicitly validating
    a login and password pair under remote batch operation.

  Summary:
    Revision    Changes     Path
    1.13        +4  -0      ossp-pkg/ase/ChangeLog
    1.32        +102 -126   ossp-pkg/ase/ase.cgi.login.pl
    1.15        +19 -1      ossp-pkg/ase/ase.cgi.rpc.pl
    1.18        +85 -22     ossp-pkg/ase/ase.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 ChangeLog
  --- ossp-pkg/ase/ChangeLog	28 Mar 2007 19:44:07 -0000	1.12
  +++ ossp-pkg/ase/ChangeLog	30 Mar 2007 07:58:10 -0000	1.13
  @@ -13,6 +13,10 @@
   
     Changes between 0.1.x and 0.2.0 (xx-Oct-2005 to 20-Mar-2007)
   
  +   o Support "authenticate" RPC method for explicitly validating
  +     a login and password pair under remote batch operation.
  +     [Ralf S. Engelschall]
  +
      o Add some JavaScript based user-interface experience improvement
        by rendering a open/close black/red/green lock at the right side of
        the password login field to on-the-fly indicate to the user whether
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	29 Mar 2007 10:06:41 -0000	1.31
  +++ ossp-pkg/ase/ase.cgi.login.pl	30 Mar 2007 07:58:10 -0000	1.32
  @@ -224,132 +224,19 @@
       my $login    = $cgi->param("login");
       my $password = $cgi->param("password");
   
  -    #   error tracking
  -    my $error = 0;
  -    my $me_uuid = undef;
  -
  -    #   lookup member in database 
  -    $login =~ s/^\s+//s;
  -    $login =~ s/\s+$//s;
  -    if ($login eq '') {
  -        $cgi->param("login.error", "Empty login");
  -        $error = 1;
  -        goto ERROR;
  -    }
  -    my $field = "";
  -    if ($login =~ m/^.+\@.+$/) {
  -        $field = "me_address";
  -    }
  -    elsif ($login =~ m/^[\da-fA-F]{8}-
  -                        [\da-fA-F]{4}-
  -                        [\da-fA-F]{4}-
  -                        [\da-fA-F]{4}-
  -                        [\da-fA-F]{12}$/x) {
  -        $field = "me_uuid";
  -    }
  -    elsif ($login =~ m/^[a-z][a-z0-9]{3,}$/) {
  -        $field = "me_nickname";
  -    }
  -    else {
  -        $field = "me_name";
  -    }
  -    my @rec = $dbi->query(qq{
  -        SELECT * FROM ase_member WHERE $field = ?;
  -    }, $login)->hashes();
  -    if (@rec == 0) {
  -        $cgi->param("login.error", "Unknown login");
  -        $error = 1;
  -        goto ERROR;
  -    }
  -    elsif (@rec > 1) {
  -        $cgi->param("login.error", "Ambiguous login");
  -        $error = 1;
  -        goto ERROR;
  -    }
  -    my $rec = $rec[0];
  -    $me_uuid = $rec->{"me_uuid"};
  -    if ($rec->{"me_account_status"} == 3) {
  -        #   account is disabled
  -        $cgi->param("login.error",
  -            "Account disabled" .
  -            ($rec->{"me_account_status_reason"} ? " (" . $rec->{"me_account_status_reason"} . ")" : "")
  -        );
  -        $error = 1;
  -        goto ERROR;
  -    }
  -    if ($rec->{"me_account_lock"}) {
  -        my $locked_until = $self->datetime2time($rec->{"me_account_lock"});
  -        if ($locked_until > time()) {
  -            #   account is still locked
  -            $cgi->param("login.error",
  -                "Account temporarily locked for " .
  -                $self->time2human($locked_until - time()) .
  -                "<br/>" .
  -                ($rec->{"me_account_lock_reason"} ? " (" . $rec->{"me_account_lock_reason"} . ")" : "")
  -            );
  -            $error = 1;
  -            goto ERROR;
  -        }
  -        else {
  -            #   clear expired locking
  -            $dbi->query(q{
  -                UPDATE ase_member
  -                SET    me_account_lock = NULL,
  -                       me_account_lock_reason = NULL
  -                WHERE  me_uuid = ?
  -            }, $me_uuid) or die $dbi->error();
  -        }
  -    }
  -
  -    #   detect special case of administrator login
  -    my $admin_ok = 0;
  -    if ($password =~ m|^([a-z][a-z0-9]+):(.+)$|s) {
  -        my ($admin_login, $admin_password) = ($1, $2); 
  -        my $rec2 = $dbi->query(q{
  -            SELECT * FROM ase_member
  -             WHERE     me_address = ?
  -                   AND (   me_membership_karma = 5
  -                        OR me_membership_prop LIKE '\%A\%');
  -        }, $admin_login)->hash();
  -        if (defined($rec2)) {
  -            my $pw = $self->makepasswords($admin_password);
  -            if ($pw->{-sha1} ne $rec2->{'me_access_pw_sha1'}) {
  -                $admin_ok = 1;
  -                $session->param("admin", $rec2->{"me_uuid"});
  -            }
  -        }
  -    }
  -    
  -    #   verify password
  -    if (not $admin_ok) {
  -        if ($password eq '') {
  -            $cgi->param("login.error", "Empty password");
  -            $error = 1;
  -            goto ERROR;
  -        }
  -        my $ok = 0;
  -        if ($password =~ m/^SHA1:([0-9a-fA-F]{40})$/) {
  -            $ok = ($1 eq $rec->{'me_access_pw_sha1'});
  -        }
  -        else {
  -            my $pw = $self->makepasswords($password);
  -            $ok = ($pw->{-sha1} eq $rec->{'me_access_pw_sha1'});
  -        }
  -        if (not $ok) {
  -            $cgi->param("login.error", "Incorrect Password");
  -            $error = 1;
  -            goto ERROR;
  -        }
  -    }
  +    #   authenticate login
  +    my ($authenticated, $rec, $error) = $self->authenticate($login, $password);
   
       #   error processing
  -    ERROR:
  -    if ($error) {
  -        if (defined $me_uuid) {
  +    if (defined $error and $error ne '') {
  +        #   set error message
  +        $cgi->param("login.error", $error);
  +
  +        if (defined $rec) {
               #   record login as failed
               $dbi->query(q{
                   INSERT INTO ase_login (lo_uuid, lo_time, lo_success) VALUES (?, ?, 0);
  -            }, $me_uuid, $self->datetime(time())) or die $dbi->error();
  +            }, $rec->{"me_uuid"}, $self->datetime(time())) or die $dbi->error();
   
               #   intruder detection & prevention
               my $N = $cfg->{-cfg}->{"login-failures-max"};                            # N failed logins...
  @@ -369,14 +256,14 @@
                                     lo_success = 1 AND
                                     lo_time    > ?
                          ), 0))
  -            }, $me_uuid, $t1, $me_uuid, $t1)->list();
  +            }, $rec->{"me_uuid"}, $t1, $rec->{"me_uuid"}, $t1)->list();
               if (($count || 0) > $N) {
                   $dbi->query(q{
                       UPDATE ase_member
                       SET    me_account_lock = ?,
                              me_account_lock_reason = ?
                       WHERE  me_uuid = ?
  -                }, $t2, "$N failed logins within $M minutes", $me_uuid
  +                }, $t2, "$N failed logins within $M minutes", $rec->{"me_uuid"}
                   ) or die $dbi->error();
               }
           }
  @@ -388,7 +275,7 @@
       #   record login as successful
       $dbi->query(q{
           INSERT INTO ase_login (lo_uuid, lo_time, lo_success) VALUES (?, ?, 1);
  -    }, $me_uuid, $self->datetime(time())) or die $dbi->error();
  +    }, $rec->{"me_uuid"}, $self->datetime(time())) or die $dbi->error();
   
       #   make account active in case it was inactive
       $dbi->query(q{
  @@ -396,10 +283,10 @@
           SET    me_account_status = 1
           WHERE  me_account_status = 2 AND
                  me_uuid = ?
  -    }, $me_uuid) or die $dbi->error();
  +    }, $rec->{"me_uuid"}) or die $dbi->error();
   
       #   login the user by remembering his UUID in the session
  -    $session->param("login", $rec->{'me_uuid'});
  +    $session->param("login", $rec->{"me_uuid"});
       $self->logbook("login by %s %s<%s>", $rec->{'me_name'}, (defined $rec->{'me_nickname'} ? " (" . $rec->{'me_nickname'} . ")" : ""), $rec->{'me_address'}); 
   
       #   perform login: either go to menu or redirect to external return URL
  @@ -411,5 +298,94 @@
       }
   }
   
  +#   perform login authentication
  +sub authenticate {
  +    my ($self, $login, $password) = @_;
  +    my $cfg     = $self->param(-cfg);
  +    my $cgi     = $self->param(-cgi);
  +    my $dbi     = $self->param(-dbi);
  +    my $session = $self->param(-session);
  +
  +    #   error tracking
  +    my $authenticated = 0;
  +    my $rec = undef;
  +    my $error = undef;
  +
  +    #   lookup member in database 
  +    $login =~ s/^\s+//s;
  +    $login =~ s/\s+$//s;
  +    if ($login eq '') {
  +        $error = "Empty login";
  +        goto RETURN;
  +    }
  +    my $field = "";
  +    if ($login =~ m/^.+\@.+$/) {
  +        $field = "me_address";
  +    }
  +    elsif ($login =~ m/^[\da-fA-F]{8}-
  +                        [\da-fA-F]{4}-
  +                        [\da-fA-F]{4}-
  +                        [\da-fA-F]{4}-
  +                        [\da-fA-F]{12}$/x) {
  +        $field = "me_uuid";
  +    }
  +    elsif ($login =~ m/^[a-z][a-z0-9]{3,}$/) {
  +        $field = "me_nickname";
  +    }
  +    else {
  +        $field = "me_name";
  +    }
  +    my @rec = $dbi->query(qq{
  +        SELECT * FROM ase_member WHERE $field = ?;
  +    }, $login)->hashes();
  +    if (@rec == 0) {
  +        $error = "Unknown login";
  +        goto RETURN;
  +    }
  +    elsif (@rec > 1) {
  +        $error = "Ambiguous login";
  +        goto RETURN;
  +    }
  +    $rec = $rec[0];
  +
  +    #   check account status
  +    if ($rec->{"me_account_status"} == 3) {
  +        #   account is disabled
  +        $error = "Account disabled" .
  +            ($rec->{"me_account_status_reason"} ? " (" . $rec->{"me_account_status_reason"} . ")" : "");
  +        goto RETURN;
  +    }
  +    if ($rec->{"me_account_lock"}) {
  +        my $locked_until = $self->datetime2time($rec->{"me_account_lock"});
  +        if ($locked_until > time()) {
  +            #   account is still locked
  +            $error = "Account temporarily locked for " .
  +                $self->time2human($locked_until - time()) .
  +                ($rec->{"me_account_lock_reason"} ? " (" . $rec->{"me_account_lock_reason"} . ")" : "");
  +            goto RETURN;
  +        }
  +    }
  +
  +    #   verify password
  +    if ($password eq '') {
  +        $error = "Empty password";
  +        goto RETURN;
  +    }
  +    if ($password =~ m/^SHA1:([0-9a-fA-F]{40})$/) {
  +        $authenticated = ($1 eq $rec->{'me_access_pw_sha1'});
  +    }
  +    else {
  +        my $pw = $self->makepasswords($password);
  +        $authenticated = ($pw->{-sha1} eq $rec->{'me_access_pw_sha1'});
  +    }
  +    if (not $authenticated) {
  +        $error = "Incorrect Password";
  +    }
  +
  +    #   return result
  +    RETURN:
  +    return ($authenticated, $rec, $error);
  +}
  +
   1;
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.rpc.pl
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 ase.cgi.rpc.pl
  --- ossp-pkg/ase/ase.cgi.rpc.pl	22 Mar 2007 19:13:40 -0000	1.14
  +++ ossp-pkg/ase/ase.cgi.rpc.pl	30 Mar 2007 07:58:10 -0000	1.15
  @@ -64,7 +64,6 @@
               return $self->redirect($self->url(-mode => $method));
           }
       }
  -
       elsif ($method eq "info") {
           #   parameter sanity checking
           my $sid = $cgi->param("sid");
  @@ -113,6 +112,25 @@
           $self->header_props(-type => "text/plain", -expires => "+1m");
           return $content;
       }
  +    elsif ($method eq "authenticate") {
  +        #   determine parameters
  +        my $login    = $cgi->param("login");
  +        my $password = $cgi->param("password");
  +
  +        #   authenticate login
  +        my ($authenticated, $rec, $error) = $self->authenticate($login, $password);
  +
  +        #   generate response
  +        my $response = '';
  +        $response .= "Client-Login-Auth: " . ($authenticated ? "yes" : "no") . "\n";
  +        $response .= "Client-Login-Name: " . (defined $rec ? $rec->{"me_name"} : "none"). "\n";
  +        $response .= "Client-Login-Nick: " . (defined $rec ? ($rec->{"me_nickname"} || "none") : "none"). "\n";
  +        $response .= "Client-Login-Addr: " . (defined $rec ? $rec->{"me_address"} : "none"). "\n";
  +        $response .= "Client-Login-UUID: " . (defined $rec ? $rec->{"me_uuid"} : "none"). "\n";
  +        $response .= "Client-Login-Error: " . (defined $error ? $error : "none") . "\n";
  +        $self->header_props(-type => "text/plain", -expires => "+1m");
  +        return $response;
  +    }
   }
   
   1;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.pm
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 ase.pm
  --- ossp-pkg/ase/ase.pm	22 Mar 2007 19:13:40 -0000	1.17
  +++ ossp-pkg/ase/ase.pm	30 Mar 2007 07:58:10 -0000	1.18
  @@ -36,22 +36,6 @@
   our @EXPORT_OK = ();
   our @EXPORT    = ();
   
  -#   names of valid ASE session attributes
  -my @valid_attributes = qw(
  -    session-id
  -    session-valid
  -    session-created
  -    session-expires
  -    canvas-url
  -    canvas-mark-head
  -    canvas-mark-body
  -    client-address
  -    client-login-uuid
  -    client-login-name
  -    client-login-nick
  -    client-login-addr
  -);
  -
   #   textual markers for canvas
   my $canvas_mark = {
       head => "<!-- ASE: HEAD -->",
  @@ -113,6 +97,11 @@
       my $self = {};
       bless ($self, $class);
   
  +    #   pre-load essentials
  +    $self->{-use} = {};
  +    $self->_use("CGI");
  +    $self->_use("CGI::Session");
  +
       #   fill object with attributes
       $self->{-server_int} = ($args{-server_int} || $args{-server} ||
                              die "no OSSP ase internal server URL specified with \"-server[_int]\"");
  @@ -125,7 +114,6 @@
       $self->{-debug}      = ($args{-debug}   || undef);
       $self->{-response}   = "";
       $self->{-error}      = "";
  -    $self->{-use}        = {};
   
       #   optionally open debug logfile
       if (defined($self->{-debug})) {
  @@ -183,9 +171,9 @@
           #   request ASE actions
           #
           my $mode_during = $self->{-cgi}->url_param("ase-mode-during")
  -            or { $self->error("CGI parameter \"ase-mode-during\" missing or empty"), return 0 };
  +            or do { $self->error("CGI parameter \"ase-mode-during\" missing or empty"), return 0 };
           my $mode_after  = $self->{-cgi}->url_param("ase-mode-after")
  -            or { $self->error("CGI parameter \"ase-mode-after\" missing or empty"), return 0 };
  +            or do { $self->error("CGI parameter \"ase-mode-after\" missing or empty"), return 0 };
   
           #   debugging
           $self->_debug("action: action=%s mode-during=%s mode-after=%s", $action, $mode_during, $mode_after);
  @@ -220,9 +208,9 @@
           #   respond to ASE actions
           #
           my $action_old = $self->{-cgi}->url_param("ase-action-old")
  -            or { $self->error("CGI parameter \"ase-action-old\" missing or empty"), return 0 };
  +            or do { $self->error("CGI parameter \"ase-action-old\" missing or empty"), return 0 };
           my $sid = $self->{-cgi}->url_param("ase-sid")
  -            or { $self->error("CGI parameter \"ase-sid\" missing or empty"), return 0 };
  +            or do { $self->error("CGI parameter \"ase-sid\" missing or empty"), return 0 };
   
           $self->_debug("action: action=%s action-old=%s sid=%s", $action, $action_old, $sid);
   
  @@ -277,6 +265,22 @@
   sub validate ($) {
       my ($self, $forced) = @_;
   
  +    #   names of valid ASE session attributes
  +    my @valid_attributes = qw(
  +        session-id
  +        session-valid
  +        session-created
  +        session-expires
  +        canvas-url
  +        canvas-mark-head
  +        canvas-mark-body
  +        client-address
  +        client-login-uuid
  +        client-login-name
  +        client-login-nick
  +        client-login-addr
  +    );
  +
       #   make sure there is a session to be validated
       my $sid = $self->attr("session-id");
       return if (not defined($sid));
  @@ -328,7 +332,7 @@
           $response =~ s|${key}:[ \t]+([^\r\n]+)\r?\n|$attribute->{$key} = $1, ''|sei;
       }
   
  -    #   check validatity of session
  +    #   check validity of session
       my $expires = ($attribute->{"session-expires"} || 0) - time();
       if (not (    $attribute->{"session-valid"} eq "yes"
                and $attribute->{"client-login-uuid"} ne ""
  @@ -351,6 +355,65 @@
       return;
   }
   
  +#   login authentication
  +sub authenticate ($$$) {
  +    my ($self, $login, $password) = @_;
  +
  +    #   debugging
  +    $self->_debug("METHOD: authenticate: login=%s password=%s", $login, $password);
  +
  +    #   optionally hash password if still not hashed
  +    #   and the SHA1 Perl API is available to us
  +    if ($password !~ m/^SHA1:[0-9a-fA-F]{40}$/) {
  +        $self->_use("Digest::SHA1");
  +        if (defined $Digest::SHA1::VERSION) {
  +            my $sha1 = new Digest::SHA1;
  +            $sha1->add($password);
  +            $password = "SHA1:" . $sha1->hexdigest;
  +            undef $sha1;
  +        }
  +    }
  +
  +    #   query server for authentication information
  +    $self->_use("IO::Socket::INET");
  +    my $server = $self->{-server_int};
  +    my ($host, $port, $path) = ($server =~ m|^http://([^:/]+)((?::\d+)?)(.*)$|) or die;
  +    $port ||= 80;
  +    $port =~ s|^:||;
  +    $path .= "?mode=rpc;method=authenticate;login=$login;password=$password";
  +    my $sock = IO::Socket::INET->new (
  +        PeerAddr => $host,
  +        PeerPort => $port,
  +        Proto    => "tcp",
  +        Timeout  => 10
  +    ) or die "failed to connect to $host:$port: $@";
  +    $sock->autoflush(1);
  +    $sock->printf(
  +        "GET $path HTTP/1.0\n" .
  +        "Host: $host:$port\n" .
  +        "\n"
  +    );
  +    my $response = '';
  +    $response .= $_ while (<$sock>);
  +    $sock->close();
  +    $self->_debug("METHOD: authenticate: response from %s", $server);
  +
  +    #   parse session information response
  +    my $attribute = {};
  +    $response =~ s|^HTTP/1.[01x]\s+200\s+.+?\r?\n\r?\n||s;
  +    foreach my $key (qw(client-login-auth client-login-uuid client-login-error)) {
  +        $attribute->{$key} = "";
  +        $response =~ s|${key}:[ \t]+([^\r\n]+)\r?\n|$attribute->{$key} = $1, ''|sei;
  +    }
  +
  +    #   provide results
  +    return (
  +        $attribute->{"client-login-auth"} eq "yes" ? 1 : 0, 
  +        $attribute->{"client-login-uuid"}  || "",
  +        $attribute->{"client-login-error"} || ""
  +    );
  +}
  +
   #   self-referencing URL generator
   sub url ($%) {
       my ($self, %args) = @_;
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 30 09:59:50 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 3D0BB7528ED; Fri, 30 Mar 2007 09:59:50 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.pm
Message-Id: <20070330075950.3D0BB7528ED@mail.ossp.org>
Date: Fri, 30 Mar 2007 09:59:50 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Mar-2007 09:59:50
  Branch: HEAD                             Handle: 2007033008594900

  Modified files:
    ossp-pkg/ase            ase.pm

  Log:
    remember new method

  Summary:
    Revision    Changes     Path
    1.19        +4  -0      ossp-pkg/ase/ase.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.pm
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 ase.pm
  --- ossp-pkg/ase/ase.pm	30 Mar 2007 07:58:10 -0000	1.18
  +++ ossp-pkg/ase/ase.pm	30 Mar 2007 07:59:49 -0000	1.19
  @@ -559,6 +559,10 @@
   
   FIXME
   
  +=item C<($authenticated, $uuid, $error) = $ase-E<gt>authenticate($login, $password);>
  +
  +FIXME
  +
   =item C<$ase-E<gt>url();>
   
   FIXME
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 30 10:00:09 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 89DFD752843; Fri, 30 Mar 2007 10:00:09 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO
Message-Id: <20070330080009.89DFD752843@mail.ossp.org>
Date: Fri, 30 Mar 2007 10:00:09 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Mar-2007 10:00:09
  Branch: HEAD                             Handle: 2007033009000500

  Modified files:
    ossp-pkg/ase            TODO

  Log:
    done

  Summary:
    Revision    Changes     Path
    1.39        +0  -1      ossp-pkg/ase/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.38 -r1.39 TODO
  --- ossp-pkg/ase/TODO	29 Mar 2007 11:46:21 -0000	1.38
  +++ ossp-pkg/ase/TODO	30 Mar 2007 08:00:05 -0000	1.39
  @@ -1,6 +1,5 @@
   
   TODO:
  -- RPC for verifying login & password -> ok+uuid or not ok
   - heartbeat -> disable
   - cron: active (on every login), mail, inactive (after n months), mail, deleted
   - check URL fetching and its caching because of DBIx::Simple:
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 30 10:00:40 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 55F807528ED; Fri, 30 Mar 2007 10:00:40 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO
Message-Id: <20070330080040.55F807528ED@mail.ossp.org>
Date: Fri, 30 Mar 2007 10:00:40 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Mar-2007 10:00:40
  Branch: HEAD                             Handle: 2007033009003900

  Modified files:
    ossp-pkg/ase            TODO

  Log:
    remember an improvement

  Summary:
    Revision    Changes     Path
    1.40        +1  -0      ossp-pkg/ase/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.39 -r1.40 TODO
  --- ossp-pkg/ase/TODO	30 Mar 2007 08:00:05 -0000	1.39
  +++ ossp-pkg/ase/TODO	30 Mar 2007 08:00:39 -0000	1.40
  @@ -1,5 +1,6 @@
   
   TODO:
  +- ase.pm: fill in "attr" stuff from results instead of returning pieces
   - heartbeat -> disable
   - cron: active (on every login), mail, inactive (after n months), mail, deleted
   - check URL fetching and its caching because of DBIx::Simple:
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 30 10:16:43 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 2AA77752893; Fri, 30 Mar 2007 10:16:43 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cfg ase.cgi.login.pl ase.sql
Message-Id: <20070330081643.2AA77752893@mail.ossp.org>
Date: Fri, 30 Mar 2007 10:16:43 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Mar-2007 10:16:43
  Branch: HEAD                             Handle: 2007033009164200

  Modified files:
    ossp-pkg/ase            ase.cfg ase.cgi.login.pl ase.sql

  Log:
    cleanup authentication processing again

  Summary:
    Revision    Changes     Path
    1.9         +2  -2      ossp-pkg/ase/ase.cfg
    1.33        +70 -58     ossp-pkg/ase/ase.cgi.login.pl
    1.18        +12 -12     ossp-pkg/ase/ase.sql
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cfg
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 ase.cfg
  --- ossp-pkg/ase/ase.cfg	27 Mar 2007 13:37:39 -0000	1.8
  +++ ossp-pkg/ase/ase.cfg	30 Mar 2007 08:16:42 -0000	1.9
  @@ -37,8 +37,8 @@
   #fetch-url-acl  q{^https?:\/\/\S+\.(?:ossp\.org|openpkg\.(?:org|com|net))};
   
   login-failures-max          3;
  -login-failures-time-range   2h;
  -login-failures-time-penalty 10h;
  +login-failures-time-range   2m;
  +login-failures-time-penalty 10m;
   
   instant-notification-urls   "http://localhost/ase/sample.cgi?mode=notify;uuid=%s";
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	30 Mar 2007 07:58:10 -0000	1.32
  +++ ossp-pkg/ase/ase.cgi.login.pl	30 Mar 2007 08:16:42 -0000	1.33
  @@ -228,63 +228,14 @@
       my ($authenticated, $rec, $error) = $self->authenticate($login, $password);
   
       #   error processing
  -    if (defined $error and $error ne '') {
  +    if (not $authenticated) {
           #   set error message
           $cgi->param("login.error", $error);
   
  -        if (defined $rec) {
  -            #   record login as failed
  -            $dbi->query(q{
  -                INSERT INTO ase_login (lo_uuid, lo_time, lo_success) VALUES (?, ?, 0);
  -            }, $rec->{"me_uuid"}, $self->datetime(time())) or die $dbi->error();
  -
  -            #   intruder detection & prevention
  -            my $N = $cfg->{-cfg}->{"login-failures-max"};                            # N failed logins...
  -            my $M = $self->human2sec($cfg->{-cfg}->{"login-failures-time-range"});   # ...within M minutes...
  -            my $P = $self->human2sec($cfg->{-cfg}->{"login-failures-time-penalty"}); # ...cause P minutes penalty.
  -            my $t1 = $self->datetime(time() - $M);
  -            my $t2 = $self->datetime(time() + $P);
  -            my ($count) = $dbi->query(q{
  -                SELECT COUNT(*)
  -                FROM   ase_login
  -                WHERE  lo_uuid    = ? AND
  -                       lo_success = 0 AND
  -                       lo_time    > MAX(?, COALESCE((
  -                           SELECT MAX(lo_time)
  -                           FROM   ase_login
  -                           WHERE  lo_uuid    = ? AND
  -                                  lo_success = 1 AND
  -                                  lo_time    > ?
  -                       ), 0))
  -            }, $rec->{"me_uuid"}, $t1, $rec->{"me_uuid"}, $t1)->list();
  -            if (($count || 0) > $N) {
  -                $dbi->query(q{
  -                    UPDATE ase_member
  -                    SET    me_account_lock = ?,
  -                           me_account_lock_reason = ?
  -                    WHERE  me_uuid = ?
  -                }, $t2, "$N failed logins within $M minutes", $rec->{"me_uuid"}
  -                ) or die $dbi->error();
  -            }
  -        }
  -
           #   go back to login form
           return $self->forward("login");
       }
   
  -    #   record login as successful
  -    $dbi->query(q{
  -        INSERT INTO ase_login (lo_uuid, lo_time, lo_success) VALUES (?, ?, 1);
  -    }, $rec->{"me_uuid"}, $self->datetime(time())) or die $dbi->error();
  -
  -    #   make account active in case it was inactive
  -    $dbi->query(q{
  -        UPDATE ase_member
  -        SET    me_account_status = 1
  -        WHERE  me_account_status = 2 AND
  -               me_uuid = ?
  -    }, $rec->{"me_uuid"}) or die $dbi->error();
  -
       #   login the user by remembering his UUID in the session
       $session->param("login", $rec->{"me_uuid"});
       $self->logbook("login by %s %s<%s>", $rec->{'me_name'}, (defined $rec->{'me_nickname'} ? " (" . $rec->{'me_nickname'} . ")" : ""), $rec->{'me_address'}); 
  @@ -316,7 +267,7 @@
       $login =~ s/\s+$//s;
       if ($login eq '') {
           $error = "Empty login";
  -        goto RETURN;
  +        goto CLEANUP;
       }
       my $field = "";
       if ($login =~ m/^.+\@.+$/) {
  @@ -340,11 +291,11 @@
       }, $login)->hashes();
       if (@rec == 0) {
           $error = "Unknown login";
  -        goto RETURN;
  +        goto CLEANUP;
       }
       elsif (@rec > 1) {
           $error = "Ambiguous login";
  -        goto RETURN;
  +        goto CLEANUP;
       }
       $rec = $rec[0];
   
  @@ -353,7 +304,7 @@
           #   account is disabled
           $error = "Account disabled" .
               ($rec->{"me_account_status_reason"} ? " (" . $rec->{"me_account_status_reason"} . ")" : "");
  -        goto RETURN;
  +        goto CLEANUP;
       }
       if ($rec->{"me_account_lock"}) {
           my $locked_until = $self->datetime2time($rec->{"me_account_lock"});
  @@ -362,14 +313,14 @@
               $error = "Account temporarily locked for " .
                   $self->time2human($locked_until - time()) .
                   ($rec->{"me_account_lock_reason"} ? " (" . $rec->{"me_account_lock_reason"} . ")" : "");
  -            goto RETURN;
  +            goto CLEANUP;
           }
       }
   
       #   verify password
       if ($password eq '') {
           $error = "Empty password";
  -        goto RETURN;
  +        goto CLEANUP;
       }
       if ($password =~ m/^SHA1:([0-9a-fA-F]{40})$/) {
           $authenticated = ($1 eq $rec->{'me_access_pw_sha1'});
  @@ -382,8 +333,69 @@
           $error = "Incorrect Password";
       }
   
  -    #   return result
  -    RETURN:
  +    #   account post-processing
  +    CLEANUP:
  +    if (defined $rec) {
  +        if ($error) {
  +            #   record authentication as failed
  +            $dbi->query(q{
  +                INSERT INTO ase_auth (au_uuid, au_time, au_success) VALUES (?, ?, 0);
  +            }, $rec->{"me_uuid"}, $self->datetime(time())) or die $dbi->error();
  +
  +            #   intruder detection & prevention
  +            my $N = $cfg->{-cfg}->{"login-failures-max"};                            # N failed logins...
  +            my $M = $self->human2sec($cfg->{-cfg}->{"login-failures-time-range"});   # ...within M minutes...
  +            my $P = $self->human2sec($cfg->{-cfg}->{"login-failures-time-penalty"}); # ...cause P minutes penalty.
  +            my $t1 = $self->datetime(time() - $M);
  +            my $t2 = $self->datetime(time() + $P);
  +            my ($count) = $dbi->query(q{
  +                SELECT COUNT(*)
  +                FROM   ase_auth
  +                WHERE  au_uuid    = ? AND
  +                       au_success = 0 AND
  +                       au_time    > MAX(?, COALESCE((
  +                           SELECT MAX(au_time)
  +                           FROM   ase_auth
  +                           WHERE  au_uuid    = ? AND
  +                                  au_success = 1 AND
  +                                  au_time    > ?
  +                       ), 0))
  +            }, $rec->{"me_uuid"}, $t1, $rec->{"me_uuid"}, $t1)->list();
  +            if (($count || 0) > $N) {
  +                $dbi->query(q{
  +                    UPDATE ase_member
  +                    SET    me_account_lock = ?,
  +                           me_account_lock_reason = ?
  +                    WHERE  me_uuid = ?
  +                }, $t2, "$N failed authentications within $M minutes", $rec->{"me_uuid"}
  +                ) or die $dbi->error();
  +            }
  +        }
  +        else {
  +            #   record authentication as successful
  +            $dbi->query(q{
  +                INSERT INTO ase_auth (au_uuid, au_time, au_success) VALUES (?, ?, 1);
  +            }, $rec->{"me_uuid"}, $self->datetime(time())) or die $dbi->error();
  +
  +            #   clear locking
  +            $dbi->query(q{
  +                UPDATE ase_member
  +                SET    me_account_lock = NULL,
  +                       me_account_lock_reason = NULL
  +                WHERE  me_uuid = ?
  +            }, $rec->{"me_uuid"}) or die $dbi->error();
  +
  +            #   make account active in case it was inactive
  +            $dbi->query(q{
  +                UPDATE ase_member
  +                SET    me_account_status = 1
  +                WHERE  me_account_status = 2 AND
  +                       me_uuid = ?
  +            }, $rec->{"me_uuid"}) or die $dbi->error();
  +        }
  +    }
  +
  +    #   return results
       return ($authenticated, $rec, $error);
   }
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.sql
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 ase.sql
  --- ossp-pkg/ase/ase.sql	27 Mar 2007 11:21:10 -0000	1.17
  +++ ossp-pkg/ase/ase.sql	30 Mar 2007 08:16:42 -0000	1.18
  @@ -164,16 +164,16 @@
                                  -- [20050225000000]
   );
   
  ---  Login Tracking
  -CREATE TABLE ase_login (
  -    lo_uuid                    TEXT NOT NULL,
  +--  Authentication Tracking
  +CREATE TABLE ase_auth (
  +    au_uuid                    TEXT NOT NULL,
                                  -- Membership UUID
                                  -- [75468374-8721-11d9-bee4-0002a5489f14]
  -    lo_time                    INTEGER NOT NULL,
  -                               -- Login (Attempt) Time YYYYMMDDHHMMSS
  +    au_time                    INTEGER NOT NULL,
  +                               -- Authentication (Attempt) Time YYYYMMDDHHMMSS
                                  -- [20050225000000]
  -    lo_success                 INTEGER NOT NULL
  -                               -- Login Success (boolean): 0=no, 1=yes
  +    au_success                 INTEGER NOT NULL
  +                               -- Authentication Success (boolean): 0=no, 1=yes
                                  -- [1]
   );
   
  @@ -322,10 +322,10 @@
       re_expiry                  INTEGER NOT NULL
   );
   
  -CREATE TABLE ase_login (
  -    lo_uuid                    TEXT NOT NULL,
  -    lo_time                    INTEGER NOT NULL,
  -    lo_success                 INTEGER NOT NULL
  +CREATE TABLE ase_auth (
  +    au_uuid                    TEXT NOT NULL,
  +    au_time                    INTEGER NOT NULL,
  +    au_success                 INTEGER NOT NULL
   );
   
   --  ----------------------------------------------------------------------- --
  @@ -394,5 +394,5 @@
   
   DROP TABLE ase_recovery;
   
  -DROP TABLE ase_login;
  +DROP TABLE ase_auth;
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 30 10:22:22 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 6201B7528EB; Fri, 30 Mar 2007 10:22:22 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO
Message-Id: <20070330082222.6201B7528EB@mail.ossp.org>
Date: Fri, 30 Mar 2007 10:22:22 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Mar-2007 10:22:22
  Branch: HEAD                             Handle: 2007033009222100

  Modified files:
    ossp-pkg/ase            TODO

  Log:
    we have the profile for info now

  Summary:
    Revision    Changes     Path
    1.41        +0  -1      ossp-pkg/ase/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.40 -r1.41 TODO
  --- ossp-pkg/ase/TODO	30 Mar 2007 08:00:39 -0000	1.40
  +++ ossp-pkg/ase/TODO	30 Mar 2007 08:22:21 -0000	1.41
  @@ -7,7 +7,6 @@
     http://cvs.ossp.org/filediff?f=ossp-pkg/ase/ase.cgi.util.pl&v1=1.15&v2=1.16
     It could be that the "DBI::SQL_BLOB" is important!!! But DBIx::Simple
     doesn't provide this functionality...
  -- info RPC page
   
   CANDO:
   - use edit profile for step 3/4 of the recovery procedure
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 30 10:22:43 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 7E31A7528EB; Fri, 30 Mar 2007 10:22:43 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO
Message-Id: <20070330082243.7E31A7528EB@mail.ossp.org>
Date: Fri, 30 Mar 2007 10:22:43 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Mar-2007 10:22:43
  Branch: HEAD                             Handle: 2007033009224300

  Modified files:
    ossp-pkg/ase            TODO

  Log:
    remember issue

  Summary:
    Revision    Changes     Path
    1.42        +1  -0      ossp-pkg/ase/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.41 -r1.42 TODO
  --- ossp-pkg/ase/TODO	30 Mar 2007 08:22:21 -0000	1.41
  +++ ossp-pkg/ase/TODO	30 Mar 2007 08:22:43 -0000	1.42
  @@ -1,5 +1,6 @@
   
   TODO:
  +- DBIx::Simple error cases review
   - ase.pm: fill in "attr" stuff from results instead of returning pieces
   - heartbeat -> disable
   - cron: active (on every login), mail, inactive (after n months), mail, deleted
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 30 10:25:45 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 9CEEE752905; Fri, 30 Mar 2007 10:25:45 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cfg
Message-Id: <20070330082545.9CEEE752905@mail.ossp.org>
Date: Fri, 30 Mar 2007 10:25:45 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Mar-2007 10:25:45
  Branch: HEAD                             Handle: 2007033009254500

  Modified files:
    ossp-pkg/ase            ase.cfg

  Log:
    cleanup config

  Summary:
    Revision    Changes     Path
    1.10        +10 -11     ossp-pkg/ase/ase.cfg
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cfg
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 ase.cfg
  --- ossp-pkg/ase/ase.cfg	30 Mar 2007 08:16:42 -0000	1.9
  +++ ossp-pkg/ase/ase.cfg	30 Mar 2007 08:25:45 -0000	1.10
  @@ -24,17 +24,16 @@
   ##  ase.cfg: application configuration
   ##
   
  -project-name   "OSSP";
  -service-name   "OSSP Affiliation Service Environment";
  -service-sender "nobody@ossp.org";
  -service-admin  "rse@engelschall.com";
  -fetch-url-acl  q{^https?:\/\/(?:localhost|\S+\.engelschall\.com)};
  -
  -#project-name   "OpenPKG";
  -#service-name   "OpenPKG Affiliation Service Environment";
  -#service-sender "nobody@openpkg.org";
  -#service-admin  "openpkg-registry@openpkg.org";
  -#fetch-url-acl  q{^https?:\/\/\S+\.(?:ossp\.org|openpkg\.(?:org|com|net))};
  +project-name                "OSSP";
  +service-name                "OSSP Affiliation Service Environment";
  +service-sender              "nobody@ossp.org";
  +service-admin               "rse@engelschall.com";
  +fetch-url-acl               q{^https?:\/\/(?:localhost|\S+\.engelschall\.com)};
  +#project-name               "OpenPKG";
  +#service-name               "OpenPKG Affiliation Service Environment";
  +#service-sender             "nobody@openpkg.org";
  +#service-admin              "openpkg-registry@openpkg.org";
  +#fetch-url-acl              q{^https?:\/\/\S+\.(?:ossp\.org|openpkg\.(?:org|com|net))};
   
   login-failures-max          3;
   login-failures-time-range   2m;
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 30 10:26:06 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 9B0457528ED; Fri, 30 Mar 2007 10:26:06 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cfg
Message-Id: <20070330082606.9B0457528ED@mail.ossp.org>
Date: Fri, 30 Mar 2007 10:26:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Mar-2007 10:26:06
  Branch: HEAD                             Handle: 2007033009260600

  Modified files:
    ossp-pkg/ase            ase.cfg

  Log:
    cleanup config

  Summary:
    Revision    Changes     Path
    1.11        +0  -7      ossp-pkg/ase/ase.cfg
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cfg
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 ase.cfg
  --- ossp-pkg/ase/ase.cfg	30 Mar 2007 08:25:45 -0000	1.10
  +++ ossp-pkg/ase/ase.cfg	30 Mar 2007 08:26:06 -0000	1.11
  @@ -29,15 +29,8 @@
   service-sender              "nobody@ossp.org";
   service-admin               "rse@engelschall.com";
   fetch-url-acl               q{^https?:\/\/(?:localhost|\S+\.engelschall\.com)};
  -#project-name               "OpenPKG";
  -#service-name               "OpenPKG Affiliation Service Environment";
  -#service-sender             "nobody@openpkg.org";
  -#service-admin              "openpkg-registry@openpkg.org";
  -#fetch-url-acl              q{^https?:\/\/\S+\.(?:ossp\.org|openpkg\.(?:org|com|net))};
  -
   login-failures-max          3;
   login-failures-time-range   2m;
   login-failures-time-penalty 10m;
  -
   instant-notification-urls   "http://localhost/ase/sample.cgi?mode=notify;uuid=%s";
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 30 10:26:32 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 39D2E752926; Fri, 30 Mar 2007 10:26:32 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO
Message-Id: <20070330082632.39D2E752926@mail.ossp.org>
Date: Fri, 30 Mar 2007 10:26:32 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Mar-2007 10:26:32
  Branch: HEAD                             Handle: 2007033009263200

  Modified files:
    ossp-pkg/ase            TODO

  Log:
    we have some parameter chaos

  Summary:
    Revision    Changes     Path
    1.43        +1  -0      ossp-pkg/ase/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.42 -r1.43 TODO
  --- ossp-pkg/ase/TODO	30 Mar 2007 08:22:43 -0000	1.42
  +++ ossp-pkg/ase/TODO	30 Mar 2007 08:26:32 -0000	1.43
  @@ -1,6 +1,7 @@
   
   TODO:
   - DBIx::Simple error cases review
  +- move more hard-coded parameters into ase.cfg
   - ase.pm: fill in "attr" stuff from results instead of returning pieces
   - heartbeat -> disable
   - cron: active (on every login), mail, inactive (after n months), mail, deleted
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 30 10:32:47 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 6A3C27528EB; Fri, 30 Mar 2007 10:32:47 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.enroll.pl ase.cgi.login.pl ase.cgi.p...
Message-Id: <20070330083247.6A3C27528EB@mail.ossp.org>
Date: Fri, 30 Mar 2007 10:32:47 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Mar-2007 10:32:47
  Branch: HEAD                             Handle: 2007033009324600

  Modified files:
    ossp-pkg/ase            ase.cgi.enroll.pl ase.cgi.login.pl
                            ase.cgi.profile.pl ase.cgi.recover.pl
                            ase.cgi.scode.pl ase.cgi.util.pl

  Log:
    consistently use a terminating semicolon in SQL

  Summary:
    Revision    Changes     Path
    1.38        +1  -1      ossp-pkg/ase/ase.cgi.enroll.pl
    1.34        +4  -4      ossp-pkg/ase/ase.cgi.login.pl
    1.20        +3  -3      ossp-pkg/ase/ase.cgi.profile.pl
    1.13        +3  -3      ossp-pkg/ase/ase.cgi.recover.pl
    1.11        +1  -1      ossp-pkg/ase/ase.cgi.scode.pl
    1.25        +1  -1      ossp-pkg/ase/ase.cgi.util.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	29 Mar 2007 08:42:16 -0000	1.37
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	30 Mar 2007 08:32:46 -0000	1.38
  @@ -234,7 +234,7 @@
   
       #   on-the-fly remove expired entries from database
       $dbi->query(q{
  -        DELETE FROM ase_enrollment WHERE en_expiry < ?
  +        DELETE FROM ase_enrollment WHERE en_expiry < ?;
       }, $self->datetime(time())) or die $dbi->error();
   
       #   make sure we are called correctly
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	30 Mar 2007 08:16:42 -0000	1.33
  +++ ossp-pkg/ase/ase.cgi.login.pl	30 Mar 2007 08:32:46 -0000	1.34
  @@ -359,14 +359,14 @@
                              WHERE  au_uuid    = ? AND
                                     au_success = 1 AND
                                     au_time    > ?
  -                       ), 0))
  +                       ), 0));
               }, $rec->{"me_uuid"}, $t1, $rec->{"me_uuid"}, $t1)->list();
               if (($count || 0) > $N) {
                   $dbi->query(q{
                       UPDATE ase_member
                       SET    me_account_lock = ?,
                              me_account_lock_reason = ?
  -                    WHERE  me_uuid = ?
  +                    WHERE  me_uuid = ?;
                   }, $t2, "$N failed authentications within $M minutes", $rec->{"me_uuid"}
                   ) or die $dbi->error();
               }
  @@ -382,7 +382,7 @@
                   UPDATE ase_member
                   SET    me_account_lock = NULL,
                          me_account_lock_reason = NULL
  -                WHERE  me_uuid = ?
  +                WHERE  me_uuid = ?;
               }, $rec->{"me_uuid"}) or die $dbi->error();
   
               #   make account active in case it was inactive
  @@ -390,7 +390,7 @@
                   UPDATE ase_member
                   SET    me_account_status = 1
                   WHERE  me_account_status = 2 AND
  -                       me_uuid = ?
  +                       me_uuid = ?;
               }, $rec->{"me_uuid"}) or die $dbi->error();
           }
       }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.profile.pl
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 ase.cgi.profile.pl
  --- ossp-pkg/ase/ase.cgi.profile.pl	29 Mar 2007 08:42:17 -0000	1.19
  +++ ossp-pkg/ase/ase.cgi.profile.pl	30 Mar 2007 08:32:46 -0000	1.20
  @@ -343,14 +343,14 @@
               $dbi->query(q{
                   UPDATE ase_member
                   SET    me_name = ?
  -                WHERE  me_uuid = ?
  +                WHERE  me_uuid = ?;
               }, $name, $me_uuid);
           }
           if ($nickname ne $rec->{"me_nickname"}) {
               $dbi->query(q{
                   UPDATE ase_member
                   SET    me_nickname = ?
  -                WHERE  me_uuid     = ?
  +                WHERE  me_uuid     = ?;
               }, ($nickname ne '' ? $nickname : undef), $me_uuid);
           }
           if ($password ne '') {
  @@ -361,7 +361,7 @@
                          me_access_pw_md5      = ?,
                          me_access_pw_cryptmd5 = ?,
                          me_access_pw_cryptdes = ?
  -                WHERE  me_uuid               = ?
  +                WHERE  me_uuid               = ?;
               }, $pw->{-sha1}, $pw->{-md5}, $pw->{-cryptmd5}, $pw->{-cryptdes}, $me_uuid);
           }
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.recover.pl
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 ase.cgi.recover.pl
  --- ossp-pkg/ase/ase.cgi.recover.pl	29 Mar 2007 08:42:17 -0000	1.12
  +++ ossp-pkg/ase/ase.cgi.recover.pl	30 Mar 2007 08:32:46 -0000	1.13
  @@ -191,7 +191,7 @@
   
           #   on-the-fly remove expired entries from database
           $dbi->query(q{
  -            DELETE FROM ase_recovery WHERE re_expiry < ?
  +            DELETE FROM ase_recovery WHERE re_expiry < ?;
           }, $self->datetime(time())) or die $dbi->error();
   
           #   determine form parameters
  @@ -328,7 +328,7 @@
   
           #   on-the-fly remove expired entries from database
           $dbi->query(q{
  -            DELETE FROM ase_recovery WHERE re_expiry < ?
  +            DELETE FROM ase_recovery WHERE re_expiry < ?;
           }, $self->datetime()) or die $dbi->error();
   
           #   lookup recovery information in database
  @@ -542,7 +542,7 @@
                   me_access_pw_md5      = ?,
                   me_access_pw_cryptmd5 = ?,
                   me_access_pw_cryptdes = ?
  -            WHERE me_uuid = ?
  +            WHERE me_uuid = ?;
           }, $pw->{-sha1}, $pw->{-md5}, $pw->{-cryptmd5}, $pw->{-cryptdes},
              $me_uuid
           ) or die $dbi->error();
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.scode.pl
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 ase.cgi.scode.pl
  --- ossp-pkg/ase/ase.cgi.scode.pl	27 Mar 2007 13:58:20 -0000	1.10
  +++ ossp-pkg/ase/ase.cgi.scode.pl	30 Mar 2007 08:32:46 -0000	1.11
  @@ -116,7 +116,7 @@
       #   determine Security Code
       (my $rec = $dbi->query(q{
           SELECT sc_number, sc_expiry FROM ase_scode
  -        WHERE sc_uuid = ?
  +        WHERE sc_uuid = ?;
       }, $scode_uuid)->hash()) or die "unable to find scode";
       my $scode_number = $rec->{'sc_number'};
       my $scode_expiry = $rec->{'sc_expiry'};
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.util.pl
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 ase.cgi.util.pl
  --- ossp-pkg/ase/ase.cgi.util.pl	27 Mar 2007 13:37:39 -0000	1.24
  +++ ossp-pkg/ase/ase.cgi.util.pl	30 Mar 2007 08:32:46 -0000	1.25
  @@ -53,7 +53,7 @@
           $expire += time();
           $dbi->query(q{
               DELETE FROM ase_cache WHERE ca_id = ? OR ca_expire <= ?;
  -        }, $key, time());
  +        }, $key, time()) or die $dbi->error();
           $dbi->query(q{
               INSERT INTO ase_cache (ca_id, ca_value, ca_expire) VALUES (?, ?, ?);
           }, $key, $blob, $expire) or die $dbi->error();
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 30 10:45:29 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 506AB752893; Fri, 30 Mar 2007 10:45:29 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.scode.pl
Message-Id: <20070330084529.506AB752893@mail.ossp.org>
Date: Fri, 30 Mar 2007 10:45:29 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Mar-2007 10:45:29
  Branch: HEAD                             Handle: 2007033009452900

  Modified files:
    ossp-pkg/ase            ase.cgi.scode.pl

  Log:
    improve readability of scode a little bit and at the same time obscure
    it further

  Summary:
    Revision    Changes     Path
    1.12        +6  -4      ossp-pkg/ase/ase.cgi.scode.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.scode.pl
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 ase.cgi.scode.pl
  --- ossp-pkg/ase/ase.cgi.scode.pl	30 Mar 2007 08:32:46 -0000	1.11
  +++ ossp-pkg/ase/ase.cgi.scode.pl	30 Mar 2007 08:45:29 -0000	1.12
  @@ -84,13 +84,13 @@
       #   render Security Code Number as a PNG image
       $self->use("GD");
       $self->use("GD::Image");
  -    my $im_length = (length($scode_num)+1)*10;
  +    my $im_length = 8+length($scode_num)*11+8;
       my $im = new GD::Image($im_length, 25);
       my $c_bg  = $im->colorAllocate(&hex2rgb("ffffff"));
       my $c_bd1 = $im->colorAllocate(&hex2rgb("999999"));
       my $c_bd2 = $im->colorAllocate(&hex2rgb("cccccc"));
  -    my $c_ln  = $im->colorAllocate(&hex2rgb("dddddd"));
  -    my $c_tx  = $im->colorAllocate(&hex2rgb("666666"));
  +    my $c_ln  = $im->colorAllocate(&hex2rgb("e0e0e0"));
  +    my $c_tx  = [ $im->colorAllocate(&hex2rgb("333333")), $im->colorAllocate(&hex2rgb("666666")) ];
       $im->fill(0, 0, $c_bg);
       for (my $i = 5; $i < $im_length; $i += 5) {
           $im->line($i, 0, $i, 24, $c_ln);
  @@ -102,7 +102,9 @@
       $im->line(0, 0, 0, 24, $c_bd1);
       $im->line($im_length-1, 0, $im_length-1, 24, $c_bd2);
       $im->line(0, 24, $im_length-1, 24, $c_bd2);
  -    $im->string(GD::gdGiantFont(), 8, 5, $scode_num, $c_tx);
  +    for (my $i = 0; $i < length($scode_num); $i++) {
  +        $im->string(GD::gdGiantFont(), 8+($i*11), 5, substr($scode_num, $i, 1), $c_tx->[$i % 2]);
  +    }
       my $scode_img = $im->png;
   
       return $scode_img;
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 30 10:51:29 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 099E07528ED; Fri, 30 Mar 2007 10:51:29 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cfg ase.cgi.enroll.pl ase.cgi.main.pl
Message-Id: <20070330085129.099E07528ED@mail.ossp.org>
Date: Fri, 30 Mar 2007 10:51:29 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Mar-2007 10:51:29
  Branch: HEAD                             Handle: 2007033009512800

  Modified files:
    ossp-pkg/ase            ase.cfg ase.cgi.enroll.pl ase.cgi.main.pl

  Log:
    move blacklist into config file

  Summary:
    Revision    Changes     Path
    1.12        +6  -0      ossp-pkg/ase/ase.cfg
    1.39        +1  -7      ossp-pkg/ase/ase.cgi.enroll.pl
    1.32        +1  -1      ossp-pkg/ase/ase.cgi.main.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cfg
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 ase.cfg
  --- ossp-pkg/ase/ase.cfg	30 Mar 2007 08:26:06 -0000	1.11
  +++ ossp-pkg/ase/ase.cfg	30 Mar 2007 08:51:28 -0000	1.12
  @@ -33,4 +33,10 @@
   login-failures-time-range   2m;
   login-failures-time-penalty 10m;
   instant-notification-urls   "http://localhost/ase/sample.cgi?mode=notify;uuid=%s";
  +blacklist-email             q{\@temporaryinbox\.com$}
  +                            q{\@put2\.net$}
  +                            q{\@senseless-entertainment\.com$}
  +                            q{\@afrobacon\.com$}
  +                            q{\@golfilla\.info$}
  +                            q{\@trashmail\.net$};
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.38 -r1.39 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	30 Mar 2007 08:32:46 -0000	1.38
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	30 Mar 2007 08:51:28 -0000	1.39
  @@ -333,13 +333,7 @@
       }
   
       #   make sure the Email address is not a "take and throw away" one
  -    my @blacklist1 = (
  -         #qr/\@gmail\.com$/,          # Google
  -         #qr/\@hotmail\.com$/,        # Microsoft
  -         #qr/\@yahoo\.(com|de)$/,     # Yahoo
  -         #qr/\@lycos\.com$/,          # Lycos
  -         qr/\@(temporaryinbox\.com|put2\.net|senseless-entertainment\.com|afrobacon\.com|golfilla\.info|trashmail\.net)$/, # Temporary Inbox / Golfilla (temporary accounts)
  -    );
  +    my @blacklist1 = @{$cfg->{-cfg}->{"blacklist-email"}};
       foreach my $re (@blacklist1) {
           if ($address =~ m/$re/s) {
               $self->logbook("address \"%s\" is not valid", $address);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	29 Mar 2007 08:42:17 -0000	1.31
  +++ ossp-pkg/ase/ase.cgi.main.pl	30 Mar 2007 08:51:28 -0000	1.32
  @@ -41,7 +41,7 @@
           my @directives = (qw(
               project-name service-name service-sender service-admin fetch-url-acl
               login-failures-max login-failures-time-range login-failures-time-penalty 
  -            instant-notification-urls
  +            instant-notification-urls blacklist-email
           ));
           my $txt < IO::All::io($cfgfile)
               or die "unable to read configuration file \"$cfgfile\"";
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 30 10:52:28 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id D16FE752843; Fri, 30 Mar 2007 10:52:28 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO
Message-Id: <20070330085228.D16FE752843@mail.ossp.org>
Date: Fri, 30 Mar 2007 10:52:28 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Mar-2007 10:52:28
  Branch: HEAD                             Handle: 2007033009522800

  Modified files:
    ossp-pkg/ase            TODO

  Log:
    move from TODO to CANDO

  Summary:
    Revision    Changes     Path
    1.44        +3  -3      ossp-pkg/ase/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.43 -r1.44 TODO
  --- ossp-pkg/ase/TODO	30 Mar 2007 08:26:32 -0000	1.43
  +++ ossp-pkg/ase/TODO	30 Mar 2007 08:52:28 -0000	1.44
  @@ -1,16 +1,16 @@
   
   TODO:
   - DBIx::Simple error cases review
  -- move more hard-coded parameters into ase.cfg
   - ase.pm: fill in "attr" stuff from results instead of returning pieces
   - heartbeat -> disable
   - cron: active (on every login), mail, inactive (after n months), mail, deleted
  +
  +CANDO:
   - check URL fetching and its caching because of DBIx::Simple:
     http://cvs.ossp.org/filediff?f=ossp-pkg/ase/ase.cgi.util.pl&v1=1.15&v2=1.16
     It could be that the "DBI::SQL_BLOB" is important!!! But DBIx::Simple
     doesn't provide this functionality...
  -
  -CANDO:
  +- move more hard-coded parameters into ase.cfg
   - use edit profile for step 3/4 of the recovery procedure
   - package ASE as OpenPKG package
   - add INSTALL document which shows how to link with webserver
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 30 11:03:16 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B6C287528EB; Fri, 30 Mar 2007 11:03:16 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.enroll.pl
Message-Id: <20070330090316.B6C287528EB@mail.ossp.org>
Date: Fri, 30 Mar 2007 11:03:16 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Mar-2007 11:03:16
  Branch: HEAD                             Handle: 2007033010031600

  Modified files:
    ossp-pkg/ase            ase.cgi.enroll.pl

  Log:
    automatically fill in a suggestion for the nickname once the realname
    was entered

  Summary:
    Revision    Changes     Path
    1.40        +21 -3      ossp-pkg/ase/ase.cgi.enroll.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.39 -r1.40 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	30 Mar 2007 08:51:28 -0000	1.39
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	30 Mar 2007 09:03:16 -0000	1.40
  @@ -132,7 +132,7 @@
           -size      => 40,
           -maxlength => 80,
       ) . "<br/>";
  -    $html .= "<span class=\"annotation\">(<i>firstname lastname</i>, e.g. \"John Doe\")</span><br/>\n";
  +    $html .= "<span class=\"annotation\">(<i>firstname lastname</i>, e.g. \"John Doe\"; can be changed later)</span><br/>\n";
       if (defined(my $error = $cgi->param("name.error"))) {
           $html .= "<span class=\"error\">$error</span><br/>\n";
       }
  @@ -146,7 +146,7 @@
           -size      => 20,
           -maxlength => 40,
       ) . "<br/>";
  -    $html .= "<span class=\"annotation\">(<i>nickname</i>, e.g. \"john\")</span><br/>\n";
  +    $html .= "<span class=\"annotation\">(<i>nickname</i>, e.g. \"john\"; can be changed later)</span><br/>\n";
       if (defined(my $error = $cgi->param("nickname.error"))) {
           $html .= "<span class=\"error\">$error</span><br/>\n";
       }
  @@ -174,7 +174,7 @@
           -size      => 22,
           -maxlength => 20,
       ) . "<br/>";
  -    $html .= "<span class=\"annotation\">(up to 20 characters, e.g. \"$pw\")</span><br/>\n";
  +    $html .= "<span class=\"annotation\">(up to 20 characters, e.g. \"$pw\"; can be changed later)</span><br/>\n";
       if (defined(my $error = $cgi->param("password.error"))) {
           $html .= "<span class=\"error\">$error</span><br/>\n";
       }
  @@ -221,6 +221,24 @@
       );
       $html << 1;
   
  +    #   add (optional) client-side user-interface behaviours
  +    $html .= "<script type=\"text/javascript\">\n";
  +    $html->fold();
  +    $html .= "</script>";
  +    $html->divert();
  +    $html .= q{
  +        $(document).ready(function () {
  +            $('#field_name').blur(function () {
  +                var name = $(this).val();
  +                var nick = $('#field_nickname').val();
  +                if (name != "" && nick == "") {
  +                    nick = name.toLowerCase().replace(/(\S)\S*\s+/g, "$1").replace(/[\s.-]/, "");
  +                    $('#field_nickname').val(nick);
  +                }
  +            });
  +        });
  +    };
  +
       return;
   }
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 30 11:17:01 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id EA3487528B9; Fri, 30 Mar 2007 11:17:00 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.css
Message-Id: <20070330091700.EA3487528B9@mail.ossp.org>
Date: Fri, 30 Mar 2007 11:17:00 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Mar-2007 11:17:00
  Branch: HEAD                             Handle: 2007033010170000

  Modified files:
    ossp-pkg/ase            ase.css

  Log:
    style header

  Summary:
    Revision    Changes     Path
    1.19        +4  -2      ossp-pkg/ase/ase.css
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.css
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 ase.css
  --- ossp-pkg/ase/ase.css	29 Mar 2007 11:13:24 -0000	1.18
  +++ ossp-pkg/ase/ase.css	30 Mar 2007 09:17:00 -0000	1.19
  @@ -110,9 +110,11 @@
   .ase h1 {
       font-family:      tahoma, arial, helvetica, sans-serif;
       font-weight:      bold;
  -    font-size:        28px;
  -    margin:           0px 0px 8px 0px;
  +    font-size:        22pt;
  +    margin:           0px 0px 16px 0px;
       color:            #666666;
  +    border-left:      23pt solid #999999;
  +    padding-left:     10px;
   }
   .ase h1.error {
       color:            #cc3333;
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 30 11:23:38 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 83C1C7528EB; Fri, 30 Mar 2007 11:23:38 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.enroll.pl ase.cgi.login.pl ase.cgi.r...
Message-Id: <20070330092338.83C1C7528EB@mail.ossp.org>
Date: Fri, 30 Mar 2007 11:23:38 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Mar-2007 11:23:38
  Branch: HEAD                             Handle: 2007033010233700

  Modified files:
    ossp-pkg/ase            ase.cgi.enroll.pl ase.cgi.login.pl
                            ase.cgi.recover.pl ase.css

  Log:
    polish user interface

  Summary:
    Revision    Changes     Path
    1.41        +2  -2      ossp-pkg/ase/ase.cgi.enroll.pl
    1.35        +2  -2      ossp-pkg/ase/ase.cgi.login.pl
    1.14        +5  -5      ossp-pkg/ase/ase.cgi.recover.pl
    1.20        +11 -5      ossp-pkg/ase/ase.css
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.40 -r1.41 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	30 Mar 2007 09:03:16 -0000	1.40
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	30 Mar 2007 09:23:37 -0000	1.41
  @@ -208,13 +208,13 @@
       $html << 1;
       $html >> "button-enroll";
       $html .= $cgi->submit(
  -        -class   => 'button_red',
  +        -class   => 'button',
           -id      => 'button_cancel',
           -name    => 'button.cancel',
           -value   => 'Cancel',
       );
       $html .= $cgi->submit(
  -        -class   => 'button_green',
  +        -class   => 'button',
           -id      => 'button_enroll',
           -name    => 'button.enroll',
           -value   => 'Enroll',
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	30 Mar 2007 08:32:46 -0000	1.34
  +++ ossp-pkg/ase/ase.cgi.login.pl	30 Mar 2007 09:23:37 -0000	1.35
  @@ -59,7 +59,7 @@
           "Welcome to " . $cfg->{-cfg}->{"service-name"} . "!<p/>\n" .
           "Please login with your name, nickname, or email address.<br/>\n" .
           "If you have still no account use \"Account Enrollment\", please.<br/>\n".
  -        "If you forgot your password, use \"Password Recovery\", please.\n";
  +        "If you forgot your password, use \"Account Recovery\", please.\n";
   
       #   generate the inner canvas
       $html .=
  @@ -127,7 +127,7 @@
       $html >> "button-recovery";
       $html .= "<a class=\"button\" id=\"button_recovery\" href=\"" . 
                $self->url(-mode => "recovery") .
  -             "\">Password Recovery</a>\n";
  +             "\">Account Recovery</a>\n";
       $html << 1;
       $html >> "button-login";
       $html .= $cgi->submit(
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.recover.pl
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 ase.cgi.recover.pl
  --- ossp-pkg/ase/ase.cgi.recover.pl	30 Mar 2007 08:32:46 -0000	1.13
  +++ ossp-pkg/ase/ase.cgi.recover.pl	30 Mar 2007 09:23:37 -0000	1.14
  @@ -43,11 +43,11 @@
       #   generate the outer canvas
       my $canvas = sub {
           my ($html, $step) = @_;
  -        $html .= "<h1>Password Recovery</h1>\n";
  +        $html .= "<h1>Account Recovery</h1>\n";
           $html .=
               "<ul class=\"breadcrumb\">\n" .
               "  <li><a href=\"".$self->url(-mode => "login")."\">Login &rarr;</a></li>\n" .
  -            "  <li>Password Recovery:</li>\n" .
  +            "  <li>Account Recovery:</li>\n" .
               "</ul>\n";
           $html .= $cgi->start_form(
               -method => 'POST',
  @@ -65,7 +65,7 @@
           my $steps = [
               [ "1", "Specify Account Information" ],
               [ "2", "Confirm Account Ownership"   ],
  -            [ "3", "Recover Account Password"    ],
  +            [ "3", "Reset Account Password"      ],
           ];
           $html .=
               "<ol class=\"steps\">\n";
  @@ -158,13 +158,13 @@
           #   generate the buttons
           $html >> "button-recover";
           $html .= $cgi->submit(
  -            -class   => 'button_red',
  +            -class   => 'button',
               -id      => 'button_cancel',
               -name    => 'button.cancel',
               -value   => 'Cancel',
           );
           $html .= $cgi->submit(
  -            -class   => 'button_green',
  +            -class   => 'button',
               -id      => 'button_recover',
               -name    => 'button.recover',
               -value   => 'Recover',
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.css
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 ase.css
  --- ossp-pkg/ase/ase.css	30 Mar 2007 09:17:00 -0000	1.19
  +++ ossp-pkg/ase/ase.css	30 Mar 2007 09:23:37 -0000	1.20
  @@ -142,12 +142,12 @@
   
   /* Step List */
   .ase ol.steps {
  -    border-left:      4px solid #e0e0e0;
  +    border-left:      4px solid #999999;
       margin-left:      0px;
       padding-left:     30px;
   }
   .ase ol.steps li {
  -    color:            #a0a0a0;
  +    color:            #000000;
   }
   .ase ol.steps li.this {
       color:            #000000;
  @@ -170,7 +170,7 @@
       list-style:       none;
   }
   .ase ul.breadcrumb li a {
  -    color:            #a0a0a0;
  +    color:            #999999;
       text-decoration:  none;
   }
   
  @@ -223,8 +223,14 @@
   /* Screen "Enrollment" */
   .ase form.enrollment input.button {
       color:            #000000;
  -    font-weight:      bold;
  -    width:            50%;
  +    width:            100px;
  +    margin-top:       4px;
  +}
  +
  +/* Screen "Recovery" */
  +.ase form.recovery input.button {
  +    color:            #000000;
  +    width:            100px;
       margin-top:       4px;
   }
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 30 11:36:34 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 875F17528EC; Fri, 30 Mar 2007 11:36:34 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.main.pl ase.css ase.html ase.ui.css ...
Message-Id: <20070330093634.875F17528EC@mail.ossp.org>
Date: Fri, 30 Mar 2007 11:36:34 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Mar-2007 11:36:34
  Branch: HEAD                             Handle: 2007033010363201

  Added files:
    ossp-pkg/ase            ase.ui.css ase.ui.html
  Modified files:
    ossp-pkg/ase            ase.cgi.main.pl
  Removed files:
    ossp-pkg/ase            ase.css ase.html

  Log:
    rename ase.css to ase.ui.css and ase.html to ase.ui.html to bundle all
    user interface stuff together in the same filesystem prefix namespace

  Summary:
    Revision    Changes     Path
    1.33        +2  -2      ossp-pkg/ase/ase.cgi.main.pl
    1.21        +0  -319    ossp-pkg/ase/ase.css
    1.8         +0  -19     ossp-pkg/ase/ase.html
    1.1         +319 -0     ossp-pkg/ase/ase.ui.css
    1.1         +19 -0      ossp-pkg/ase/ase.ui.html
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	30 Mar 2007 08:51:28 -0000	1.32
  +++ ossp-pkg/ase/ase.cgi.main.pl	30 Mar 2007 09:36:32 -0000	1.33
  @@ -135,7 +135,7 @@
           $html->folder('{#%s#}', '\{#([a-zA-Z_][a-zA-Z0-9_-]*)#\}');
   
           #   provide outer HTML canvas
  -        my $canvas_url       = $session->param("canvas_url")       || $cgi->param("canvas_url")       || "ase.html";
  +        my $canvas_url       = $session->param("canvas_url")       || $cgi->param("canvas_url")       || "ase.ui.html";
           my $canvas_mark_head = $session->param("canvas_mark_head") || $cgi->param("canvas_mark_head") || "<!-- ASE: HEAD -->";
           my $canvas_mark_body = $session->param("canvas_mark_body") || $cgi->param("canvas_mark_body") || "<!-- ASE: BODY -->";
           my ($canvas_type, undef, $canvas) = $self->fetch($canvas_url);
  @@ -159,7 +159,7 @@
           #   provide inner HTML canvas
           $html->divert("head");
           $html .= "<link rel=\"stylesheet\" type=\"text/css\"" .
  -                 " href=\"".$self->url(-mode => "loader", -name => "ase.css")."\"/>\n";
  +                 " href=\"".$self->url(-mode => "loader", -name => "ase.ui.css")."\"/>\n";
           $html .= "<script type=\"text/javascript\"" .
                    " src=\"".$self->url(-mode => "loader", -name => "ase.ui.jquery.js")."\"/>" .
                    "</script>\n";
  @@ .
  rm -f ossp-pkg/ase/ase.css <<'@@ .'
  Index: ossp-pkg/ase/ase.css
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/ase/ase.html <<'@@ .'
  Index: ossp-pkg/ase/ase.html
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.ui.css
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ase.ui.css
  --- /dev/null	2007-03-30 11:33:52 +0200
  +++ ase.ui.css	2007-03-30 11:36:34 +0200
  @@ -0,0 +1,319 @@
  +/*
  +**  OSSP ase -- Affiliation Service Environment
  +**  Copyright (c) 2005-2007 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2005-2007 The OSSP Project <http://www.ossp.org/>
  +**
  +**  This file is part of OSSP ase, a service environment for managing
  +**  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  +**
  +**  This program is free software; you can redistribute it and/or modify
  +**  it under the terms of the GNU General Public License as published by
  +**  the Free Software Foundation; either version 2 of the License, or
  +**  (at your option) any later version.
  +**
  +**  This program is distributed in the hope that it will be useful,
  +**  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +**  General Public License for more details.
  +**
  +**  You should have received a copy of the GNU General Public License
  +**  along with this program; if not, write to the Free Software
  +**  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +**  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +**
  +**  ase.ui.css: Cascading Style Sheet (CSS)
  +*/
  +
  +/* General: Outer Canvas */
  +DIV.ase {
  +    width:            600px;
  +    padding:          2px 2px 2px 2px;
  +    font-family:      sans-serif, helvetica, arial;
  +    background:       #f8f8f8;
  +}
  +.ase div.box {
  +    background:       #f8f8f8;
  +    position:         relative;
  +    border-top:       1px solid #e0e0e0;
  +    border-left:      1px solid #e0e0e0;
  +    border-right:     1px solid #cccccc;
  +    border-bottom:    1px solid #cccccc;
  +    padding:          16px 16px 32px 16px;
  +    background-image: url('ase.ui.bg.jpg');
  +}   
  +.ase div.box div.footer {
  +    position:         absolute;
  +    bottom:           6px;
  +    right:            16px;
  +    font-family:      sans-serif, helvetica, arial;
  +    font-size:        8pt;
  +    color:            #cccccc;
  +}
  +.ase a {
  +    color:            #666699;
  +    text-decoration:  none;
  +}
  +
  +/* General: Hyperlink Buttons */
  +.ase a.button {
  +    color:            #444444;
  +    background:       #f8f8f8;
  +    background-image: url('ase.ui.bar.grey.png');
  +    border-top:       1px solid #f0f0f0;
  +    border-left:      1px solid #cccccc;
  +    border-right:     1px solid #999999;
  +    border-bottom:    1px solid #666666;
  +    padding:          1px 8px 1px 8px;
  +    margin:           0px 1px 0px 1px;
  +}
  +.ase a.button_red {
  +    color:            #993333;
  +    background:       #fff8f8;
  +    background-image: url('ase.ui.bar.red.png');
  +    border-top:       1px solid #f09999;
  +    border-left:      1px solid #f09999;
  +    border-right:     1px solid #993333;
  +    border-bottom:    1px solid #993333;
  +    padding:          1px 8px 1px 8px;
  +    margin:           0px 1px 0px 1px;
  +}
  +.ase a.button_green {
  +    color:            #339933;
  +    background:       #f8fff8;
  +    background-image: url('ase.ui.bar.green.png');
  +    border-top:       1px solid #99f099;
  +    border-left:      1px solid #99f099;
  +    border-right:     1px solid #339933;
  +    border-bottom:    1px solid #339933;
  +    padding:          1px 8px 1px 8px;
  +    margin:           0px 1px 0px 1px;
  +}
  +
  +/* General: Annotations */
  +.ase span.annotation {
  +    font-size:        80%;
  +    color:            #999999;
  +}
  +.ase span.error {
  +    font-size:        80%;
  +    font-weight:      bold;
  +    color:            #cc3333;
  +}
  +.ase div.errorbox {
  +    font-weight:      bold;
  +    background:       #aa3333;
  +    color:            #ffffff;
  +    padding:          4px 8px 4px 8px;
  +}
  +
  +/* General: Headlines */
  +.ase h1 {
  +    font-family:      tahoma, arial, helvetica, sans-serif;
  +    font-weight:      bold;
  +    font-size:        22pt;
  +    margin:           0px 0px 16px 0px;
  +    color:            #666666;
  +    border-left:      23pt solid #999999;
  +    padding-left:     10px;
  +}
  +.ase h1.error {
  +    color:            #cc3333;
  +}
  +.ase h2 {
  +    font-family:      tahoma, arial, helvetica, sans-serif;
  +    font-weight:      bold;
  +    font-size:        24px;
  +    margin:           0px 0px 8px 0px;
  +    color:            #666666;
  +}
  +.ase h2.error {
  +    color:            #cc3333;
  +}
  +.ase h3 {
  +    font-family:      tahoma, arial, helvetica, sans-serif;
  +    font-weight:      bold;
  +    font-size:        16px;
  +    margin:           0px 0px 8px 0px;
  +    color:            #666666;
  +}
  +.ase h3.error {
  +    color:            #cc3333;
  +}
  +
  +/* Step List */
  +.ase ol.steps {
  +    border-left:      4px solid #999999;
  +    margin-left:      0px;
  +    padding-left:     30px;
  +}
  +.ase ol.steps li {
  +    color:            #000000;
  +}
  +.ase ol.steps li.this {
  +    color:            #000000;
  +    font-weight:      bold;
  +}
  +
  +/* Breadcrumb List */
  +.ase ul.breadcrumb {
  +    margin-top:       0px;
  +    margin-left:      0px;
  +    margin-right:     0px;
  +    margin-bottom:    10px;
  +    padding:          0px;
  +    white-space:      nowrap;
  +    font-weight:      bold;
  +}
  +.ase ul.breadcrumb li {
  +    color:            #000000;
  +    display:          inline;
  +    list-style:       none;
  +}
  +.ase ul.breadcrumb li a {
  +    color:            #999999;
  +    text-decoration:  none;
  +}
  +
  +/* General: Input Fields */
  +.ase input.field {
  +    background:       #fafafa;
  +    border-top:       1px solid #999999;
  +    border-right:     1px solid #cccccc;
  +    border-bottom:    1px solid #cccccc;
  +    border-left:      1px solid #999999;
  +}
  +.ase input.button {
  +    color:            #444444;
  +    background:       #f8f8f8;
  +    background-image: url('ase.ui.bar.grey.png');
  +    border-top:       1px solid #f0f0f0;
  +    border-left:      1px solid #cccccc;
  +    border-right:     1px solid #999999;
  +    border-bottom:    1px solid #666666;
  +    margin:           0px 1px 0px 1px;
  +}
  +.ase input.button_red {
  +    color:            #993333;
  +    background:       #fff8f8;
  +    background-image: url('ase.ui.bar.red.png');
  +    border-top:       1px solid #f09999;
  +    border-left:      1px solid #f09999;
  +    border-right:     1px solid #993333;
  +    border-bottom:    1px solid #993333;
  +    margin:           0px 1px 0px 1px;
  +}
  +.ase input.button_green {
  +    color:            #339933;
  +    background:       #f8fff8;
  +    background-image: url('ase.ui.bar.green.png');
  +    border-top:       1px solid #99f099;
  +    border-left:      1px solid #99f099;
  +    border-right:     1px solid #339933;
  +    border-bottom:    1px solid #339933;
  +    margin:           0px 1px 0px 1px;
  +}
  +
  +/* Screen "Login" */
  +.ase form.login input#button_login {
  +    color:            #000000;
  +    font-weight:      bold;
  +    width:            100%;
  +}
  +
  +/* Screen "Enrollment" */
  +.ase form.enrollment input.button {
  +    color:            #000000;
  +    width:            100px;
  +    margin-top:       4px;
  +}
  +
  +/* Screen "Recovery" */
  +.ase form.recovery input.button {
  +    color:            #000000;
  +    width:            100px;
  +    margin-top:       4px;
  +}
  +
  +/* General: Form Table */
  +.ase table.F tr {
  +}
  +.ase table.F td.L {
  +    border-bottom:      1px solid #cccccc;
  +    padding:            4px 10px 4px 20px;
  +}
  +.ase table.F td.I {
  +    border-bottom:      1px solid #cccccc;
  +    padding:            4px 0px 4px 4px;
  +}
  +
  +/* navigation tabs */
  +.ase div.tabsframe {
  +    border:             1px solid #cccccc;
  +    padding:            10px 10px 10px 10px;
  +}
  +.ase ul.tabs {
  +    margin-top:         0px;
  +    margin-bottom:      0px;
  +    margin-right:       0px;
  +    margin-left:        4px;     /* compensate gap reduction (see below) */
  +    padding:            0px;
  +    white-space:        nowrap;
  +    font-family:        sans-serif,helvetica,lucida,verdana,arial;
  +    font-size:          12px;
  +}
  +.ase ul.tabs li {
  +    display:            inline;
  +    margin-left:        -4px;    /* gap reduction between inline elements */
  +    list-style:         none;
  +}
  +.ase ul.tabs li.padding {
  +    border-bottom:      1px solid #bbbbbb;
  +    padding-left:       10px;
  +}
  +.ase ul.tabs li a {
  +    margin:             0px;
  +    border-top:         1px solid #cccccc;
  +    border-left:        1px solid #cccccc;
  +    border-right:       1px solid #666666;
  +    border-bottom:      1px solid #999999;
  +    padding:            0px 10px 0px 10px;
  +    background-color:   #f8f8f8;
  +    color:              #666666;
  +    text-decoration:    none;
  +}
  +.ase ul.tabs li.active a {
  +    border-top:         1px solid #cccccc;
  +    border-left:        1px solid #cccccc;
  +    border-right:       1px solid #666666;
  +    border-bottom:      1px solid #ffffff;
  +    padding-top:        4px;
  +    background-color:   #ffffff;
  +    color:              #000000;
  +    font-weight:        bold;
  +}
  +.ase ul.tabs li a:hover {
  +    background-color:   #f0f0f0;
  +    color:              #666666;
  +    text-decoration:    none !important;
  +}
  +.ase ul.tabs li.active a:hover {
  +    background-color:   inherit;
  +    color:              inherit;
  +}
  +
  +.ase div.field_password {
  +    position:              relative;
  +}
  +.ase div.field_password div#lock {
  +    display:               none;
  +    position:              absolute;
  +    top:                   4px;
  +    right:                 4px;
  +    z-index:               100;
  +    width:                 9px;
  +    height:                9px;
  +    background-image:      url('ase.ui.lock.gif');
  +    background-repeat:     no-repeat;
  +    background-position:   -0px -0px;
  +}
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.ui.html
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ase.ui.html
  --- /dev/null	2007-03-30 11:33:52 +0200
  +++ ase.ui.html	2007-03-30 11:36:34 +0200
  @@ -0,0 +1,19 @@
  +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  +  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  +<html>
  +  <head>
  +    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
  +    <title>ASE</title>
  +    <style type="text/css">
  +      body {
  +          margin-top:  50px;
  +          margin-left: 50px;
  +          background-color: #ffffff;
  +      }
  +    </style>
  +    <!-- ASE: HEAD -->
  +  </head>
  +  <body>
  +    <!-- ASE: BODY -->
  +  </body>
  +</html>
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 30 11:45:13 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 8F26C7528EC; Fri, 30 Mar 2007 11:45:12 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ Makefile ase.cli ase.cli.cron.pl ase.cli.db....
Message-Id: <20070330094512.8F26C7528EC@mail.ossp.org>
Date: Fri, 30 Mar 2007 11:45:12 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Mar-2007 11:45:12
  Branch: HEAD                             Handle: 2007033010451001

  Added files:
    ossp-pkg/ase            ase.cli ase.cli.cron.pl ase.cli.db.pl
                            ase.cli.db.sql
  Modified files:
    ossp-pkg/ase            Makefile
  Removed files:
    ossp-pkg/ase            ase.pl ase.sql

  Log:
    move all CLI stuff into its own namespace

  Summary:
    Revision    Changes     Path
    1.5         +2  -2      ossp-pkg/ase/Makefile
    1.1         +108 -0     ossp-pkg/ase/ase.cli
    1.1         +97 -0      ossp-pkg/ase/ase.cli.cron.pl
    1.1         +164 -0     ossp-pkg/ase/ase.cli.db.pl
    1.1         +398 -0     ossp-pkg/ase/ase.cli.db.sql
    1.9         +0  -314    ossp-pkg/ase/ase.pl
    1.19        +0  -398    ossp-pkg/ase/ase.sql
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/Makefile
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 Makefile
  --- ossp-pkg/ase/Makefile	27 Mar 2007 11:06:31 -0000	1.4
  +++ ossp-pkg/ase/Makefile	30 Mar 2007 09:45:10 -0000	1.5
  @@ -1,7 +1,7 @@
   
  -ase.db: ase.sql
  +ase.db: ase.cli ase.cli.db.pl ase.cli.db.sql
   	rm -f ase.db
  -	./ase.pl db ase.db
  +	./ase.cli db ase.db
   	chmod a+rw ase.db
   
   clean:
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cli
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ase.cli
  --- /dev/null	2007-03-30 11:45:09 +0200
  +++ ase.cli	2007-03-30 11:45:11 +0200
  @@ -0,0 +1,108 @@
  +#!/usr/bin/env perl
  +##
  +##  OSSP ase -- Affiliation Service Environment
  +##  Copyright (c) 2005-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2005-2007 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP ase, a service environment for managing
  +##  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  +##
  +##  This program is free software; you can redistribute it and/or modify
  +##  it under the terms of the GNU General Public License as published by
  +##  the Free Software Foundation; either version 2 of the License, or
  +##  (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this program; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  ase.cli: command line interface
  +##
  +
  +#   language requirements
  +require 5.008;
  +use strict;
  +use warnings;
  +
  +#   program configuration
  +our $cfg = {
  +    -prog_name   => 'OSSP ase',
  +    -prog_desc   => 'Affiliation Service Environment',
  +    -prog_vers   => '0.2.0',
  +    -prog_date   => '2007-03-23',
  +    -path_cfgdir => '.',
  +    -path_libdir => '.',
  +    -path_vardir => '.',
  +    -path_datdir => '.',
  +};
  +
  +#   language extensions
  +use POSIX;                         # from OpenPKG "perl"
  +use Getopt::Long;                  # from OpenPKG "perl"
  +use IO::All;                       # from OpenPKG "perl-sys"
  +use DBI;                           # from OpenPKG "perl-dbi"
  +use DBD::SQLite;                   # from OpenPKG "perl-dbi" (with_dbd_sqlite=yes)
  +use DBIx::Simple;                  # from OpenPKG "perl-dbix"
  +use Crypt::UnixCrypt;              # from OpenPKG "perl-crypto"
  +use Crypt::PasswdMD5;              # from OpenPKG "perl-crypto"
  +use Digest::MD5;                   # from OpenPKG "perl-crypto"
  +use Digest::SHA1;                  # from OpenPKG "perl-crypto"
  +
  +#   application parts
  +my $dir = $cfg->{-path_libdir};
  +require "$dir/ase.cli.db.pl";      # database management
  +require "$dir/ase.cli.cron.pl";    # cron tasks
  +
  +#   command line parsing
  +my $opt = {
  +    -help    => 0,
  +    -version => 0,
  +    -quiet   => 0,
  +};
  +my $p = new Getopt::Long::Parser;
  +$p->configure("bundling");
  +$p->configure("require_order");
  +$p->getoptions(
  +    'h|help'      => \$opt->{-help},
  +    'V|version'   => \$opt->{-version},
  +    'q|quiet'     => \$opt->{-quiet},
  +) || die "option parsing failed";
  +undef $p;
  +if ($opt->{-help}) {
  +    print "Usage: ase.pl [options] command [options] [arguments]\n" .
  +          "Available global options:\n" .
  +          " -h,--help       print out this usage page\n" .
  +          " -V,--version    print version\n" .
  +          " -q,--quiet      quiet processing\n" .
  +          "Available commands:\n" .
  +          " db              database creation/update/downgrade\n" .
  +          " cron            daily cron tasks\n";
  +    exit(0);
  +}
  +if ($opt->{-version}) {
  +    print "$cfg->{-prog_name} $cfg->{-prog_vers} ($cfg->{-prog_date})\n";
  +    exit(0);
  +}
  +if (@ARGV < 1) {
  +    print STDERR "ase.pl:ERROR: invalid number of arguments\n";
  +    exit(1);
  +}
  +
  +#   determine command and dispatch according to it
  +my $command = shift @ARGV;
  +my $func = "cmd_$command";
  +if (not defined &{$func}) {
  +    print STDERR "ase.pl:ERROR: command \"$command\" not found\n";
  +    exit(1);
  +}
  +my $rc; eval("\$rc = &$func(\$cfg)"); 
  +print STDERR "ERROR: $@" if ($@);
  +$rc = 1 if (not defined $rc);
  +exit($rc);
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cli.cron.pl
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ase.cli.cron.pl
  --- /dev/null	2007-03-30 11:45:09 +0200
  +++ ase.cli.cron.pl	2007-03-30 11:45:11 +0200
  @@ -0,0 +1,97 @@
  +##
  +##  OSSP ase -- Affiliation Service Environment
  +##  Copyright (c) 2005-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2005-2007 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP ase, a service environment for managing
  +##  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  +##
  +##  This program is free software; you can redistribute it and/or modify
  +##  it under the terms of the GNU General Public License as published by
  +##  the Free Software Foundation; either version 2 of the License, or
  +##  (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this program; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  ase.cli.cron.pl: cron tasks
  +##
  +
  +sub cmd_cron {
  +    my ($cfg) = @_;
  +
  +    #   command line parsing
  +    my $opt = {
  +        -help => 0,
  +        -timerange => '',
  +    };
  +    my $p = new Getopt::Long::Parser;
  +    $p->configure("bundling");
  +    $p->getoptions(
  +        'h|help'        => \$opt->{-help},
  +        't|timerange=s' => \$opt->{-timerange},
  +    ) || die "option parsing failed";
  +    undef $p;
  +    if ($opt->{-help}) {
  +        print "Usage: ase.pl cron -t <timerange> <database-file>\n" .
  +              "Available options:\n" .
  +              " -h,--help          print out this usage page\n" .
  +              " -t,--timerange=STR timerange ('hourly' or 'daily')\n";
  +        exit(0);
  +    }
  +    if (@ARGV != 1) {
  +        print STDERR "ase.pl:db:ERROR: invalid number of arguments\n";
  +        exit(1);
  +    }
  +    if ($opt->{-timerange} eq '') {
  +        print STDERR "ase.pl:db:ERROR: timerange not specified\n";
  +        exit(1);
  +    }
  +    my $db_file = shift @ARGV;
  +
  +    #   connect to database
  +    my $db = DBIx::Simple->connect(
  +        "dbi:SQLite:dbname=$db_file", "", "",
  +        { RaiseError => 0, AutoCommit => 1 }
  +    );
  +
  +    #   helper function
  +    sub datetime {
  +        my ($t) = @_;
  +        $t = time() if (not defined($t));
  +        my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday) = gmtime($t);
  +        return sprintf("%04d%02d%02d%02d%02d%02d", $year+1900, $mon+1, $mday, $hour, $min, $sec);
  +    }
  +
  +    #   perform tasks
  +    if ($opt->{-timerange} eq 'hourly') {
  +        #   remove expired data
  +        $db->query(q{
  +            DELETE FROM ase_scode WHERE sc_expiry < ?
  +        }, datetime(time())) or die $db->error();
  +        $db->query(q{
  +            DELETE FROM ase_enrollment WHERE en_expiry < ?
  +        }, datetime(time())) or die $db->error();
  +        $db->query(q{
  +            DELETE FROM ase_recovery WHERE re_expiry < ?
  +        }, datetime(time())) or die $db->error();
  +    }
  +    elsif ($opt->{-timerange} eq 'daily') {
  +        #   FIXME
  +    }
  +
  +    #   disconnect from database
  +    $db->disconnect();
  +    undef $db;
  +    return 0;
  +}
  +
  +1;
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cli.db.pl
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ase.cli.db.pl
  --- /dev/null	2007-03-30 11:45:09 +0200
  +++ ase.cli.db.pl	2007-03-30 11:45:11 +0200
  @@ -0,0 +1,164 @@
  +##
  +##  OSSP ase -- Affiliation Service Environment
  +##  Copyright (c) 2005-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2005-2007 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP ase, a service environment for managing
  +##  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  +##
  +##  This program is free software; you can redistribute it and/or modify
  +##  it under the terms of the GNU General Public License as published by
  +##  the Free Software Foundation; either version 2 of the License, or
  +##  (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this program; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  ase.cli.db.pl: database management
  +##
  +
  +sub cmd_db {
  +    my ($cfg) = @_;
  +
  +    #   command line parsing
  +    my $opt = {
  +        -help => 0,
  +        -revision => 0,
  +    };
  +    my $p = new Getopt::Long::Parser;
  +    $p->configure("bundling");
  +    $p->getoptions(
  +        'h|help'       => \$opt->{-help},
  +        'r|revision=i' => \$opt->{-revision},
  +    ) || die "option parsing failed";
  +    undef $p;
  +    if ($opt->{-help}) {
  +        print "Usage: ase.pl db <database-file>\n" .
  +              "Available options:\n" .
  +              " -h,--help         print out this usage page\n" .
  +              " -r,--revision=NUM database revision\n";
  +        exit(0);
  +    }
  +    if (@ARGV != 1) {
  +        print STDERR "ase.pl:db:ERROR: invalid number of arguments\n";
  +        exit(1);
  +    }
  +    my $db_file = shift @ARGV;
  +
  +    #   determine current time
  +    my $now = POSIX::strftime("%Y%m%d%H%M%S", gmtime(time()));
  +
  +    #   read current database definition
  +    my $sql < io($cfg->{-path_libdir}."/ase.cli.db.sql")
  +        or die "unable to read SQL data definition file \"ase.sql\"";
  +    my ($rev_latest) = ($sql =~ m/--\s+CREATE\s+(\d+)/s);
  +    $opt->{-revision} = $rev_latest if ($opt->{-revision} == 0);
  +    die "requested database revision \"".$opt->{-revision}."\" out of range"
  +        if ($opt->{-revision} < 1 or $opt->{-revision} > $rev_latest);
  +    
  +    #   read current database definition
  +    my $M = {};
  +    $sql =~ s/--[ \t]+(CREATE|UPGRADE|DOWNGRADE)\s+(\d+<-\d+|\d+->\d+|\d+)(.+?)(?:(?=--[ \t]+(CREATE|UPGRADE|DOWNGRADE))|$)/&parse_junk($M, $1, $2, $3), ''/sge;
  +    sub parse_junk {
  +        my ($M, $mode, $revision, $sql) = @_;
  +        $sql =~ s|^\s*--\s+.+?$||mg;
  +        $sql =~ s|\n+|\n|sg;
  +        $revision =~ s/^\d+->(\d+)$/$1/s;
  +        $revision =~ s/^(\d+)<-\d+$/$1/s;
  +        foreach my $cmd (split(/(?<=[^\\];)\s*/, $sql)) {
  +            $M->{$revision}->{"-".lc($mode)} = [] if (not exists $M->{$revision}->{"-".lc($mode)});
  +            push(@{$M->{$revision}->{"-".lc($mode)}}, $cmd);
  +        }
  +    }
  +
  +    #   connect to database
  +    my $db_init = (-f $db_file ? 0 : 1);
  +    my $db = DBIx::Simple->connect(
  +        "dbi:SQLite:dbname=$db_file", "", "",
  +        { RaiseError => 0, AutoCommit => 1 }
  +    );
  +
  +    #   create initial database (with latest revision)
  +    if ($db_init) {
  +        print STDERR "++ creating database (revision $rev_latest)\n";
  +        $db->begin_work() or die $db->error();
  +        foreach my $cmd (@{$M->{$rev_latest}->{-create}}) {
  +            $db->query($cmd) or die $db->error();
  +        }
  +        $db->commit() or die $db->error();
  +    }
  +
  +    #   determine new/requested revision
  +    my $rev_new = $opt->{-revision} || $rev_latest;
  +
  +    #   determine old/existing revision
  +    my ($rev_old) = $db->query(q{
  +        SELECT cf_value FROM ase_config WHERE cf_name = 'revision'
  +    })->list() || ($db_init ? $rev_latest : "1");
  +
  +    #   upgrade or downgrade database accordingly
  +    $db->begin_work() or die $db->error();
  +    while (1) {
  +        if ($rev_old < $rev_new) {
  +            #   upgrade database
  +            print STDERR "++ upgrading database (revision $rev_old -> ".($rev_old+1).")\n";
  +            $rev_old++;
  +            foreach my $cmd (@{$M->{$rev_old}->{-upgrade}}) {
  +                $db->query($cmd) or die $db->error();
  +            }
  +        }
  +        elsif ($rev_old > $rev_new) {
  +            #   downgrade database
  +            print STDERR "++ downgrading database (revision $rev_old -> ".($rev_old-1).")\n";
  +            $rev_old--;
  +            foreach my $cmd (@{$M->{$rev_old}->{-downgrade}}) {
  +                $db->query($cmd) or die $db->error();
  +            }
  +        }
  +        else {
  +            last;
  +        }
  +    }
  +    my ($n) = $db->query(q{ SELECT COUNT(*) FROM ase_config; })->list();
  +    if (defined $n and $n > 0) {
  +        $db->query(q{
  +            UPDATE ase_config SET cf_value = ? WHERE cf_name = 'revision';
  +        }, $rev_new) or die $db->error();
  +        $db->query(q{
  +            UPDATE ase_config SET cf_value = ? WHERE cf_name = 'created' AND cf_value = '';
  +        }, $now) or die $db->error();
  +        $db->query(q{
  +            UPDATE ase_config SET cf_value = ? WHERE cf_name = 'modified';
  +        }, $now) or die $db->error();
  +    }
  +    elsif (defined $n and $n == 0) {
  +        $db->query(q{
  +            INSERT INTO ase_config (cf_name, cf_value) VALUES ('revision', ?);
  +        }, $rev_new) or die $db->error();
  +        $db->query(q{
  +            INSERT INTO ase_config (cf_name, cf_value) VALUES ('created', ?);
  +        }, $now) or die $db->error();
  +        $db->query(q{
  +            INSERT INTO ase_config (cf_name, cf_value) VALUES ('modified', ?);
  +        }, $now) or die $db->error();
  +    }
  +    $db->commit() or die $db->error();
  +
  +    #   perform database compactification
  +    $db->query(q{ VACUUM });
  +
  +    #   disconnect from database
  +    $db->disconnect();
  +    undef $db;
  +    return 0;
  +}
  +
  +1;
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cli.db.sql
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ase.cli.db.sql
  --- /dev/null	2007-03-30 11:45:09 +0200
  +++ ase.cli.db.sql	2007-03-30 11:45:11 +0200
  @@ -0,0 +1,398 @@
  +--
  +--  OSSP ase -- Affiliation Service Environment
  +--  Copyright (c) 2005-2007 Ralf S. Engelschall <rse@engelschall.com>
  +--  Copyright (c) 2005-2007 The OSSP Project <http://www.ossp.org/>
  +--
  +--  This file is part of OSSP ase, a service environment for managing
  +--  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  +--
  +--  This program is free software; you can redistribute it and/or modify
  +--  it under the terms of the GNU General Public License as published by
  +--  the Free Software Foundation; either version 2 of the License, or
  +--  (at your option) any later version.
  +--
  +--  This program is distributed in the hope that it will be useful,
  +--  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +--  General Public License for more details.
  +--
  +--  You should have received a copy of the GNU General Public License
  +--  along with this program; if not, write to the Free Software
  +--  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +--  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +--
  +--  ase.sql: OSSP ase database schema
  +--
  +
  +--  ----------------------------------------------------------------------- --
  +--                             CREATE 2
  +--  ----------------------------------------------------------------------- --
  +
  +--  Database Information
  +CREATE TABLE ase_config (
  +    -- Unique Key (primary)
  +    cf_name                    TEXT UNIQUE NOT NULL PRIMARY KEY, 
  +                               -- Configuration Variable Name
  +                               -- [revision]
  +    cf_value                   TEXT NOT NULL
  +                               -- Configuration Variable Value
  +                               -- [2]
  +);
  +
  +--  Member Information
  +CREATE TABLE ase_member (
  +    -- Unique Key (primary)
  +    me_uuid                    TEXT UNIQUE NOT NULL PRIMARY KEY, 
  +                               -- Membership UUID
  +                               -- [75468374-8721-11d9-bee4-0002a5489f14]
  +
  +    -- Unique Keys (secondary)
  +    me_nickname                TEXT,
  +                               -- Nickname
  +                               -- [rse]
  +    me_address                 TEXT UNIQUE NOT NULL,
  +                               -- Email-Address
  +                               -- [rse@engelschall.com]
  +
  +    -- Person Details
  +    me_name                    TEXT,
  +                               -- Person Name
  +                               -- [Ralf S. Engelschall]
  +
  +    -- Account Details
  +    me_account_status          CHAR(1) NOT NULL,
  +                               -- Account Status Level: 1=active, 2=inactive, 3=disabled
  +                               -- [1]
  +    me_account_status_reason   TEXT,
  +                               -- Account Status Reason
  +                               -- [inactivity for N months]
  +    me_account_lock            INTEGER,
  +                               -- Account Temporary Lock Expiry Time
  +                               -- [20050225000000]
  +    me_account_lock_reason     TEXT,
  +                               -- Account Temporary Lock Reason
  +                               -- [N failed logins within M minutes]
  +
  +    -- Membership Details
  +    me_membership_karma        INTEGER NOT NULL,
  +                               -- Membership Karma Level: (one of) 1=fellow, 2=member, 3=activist, 4=director, 5=president
  +                               -- [5]
  +    me_membership_prop         CHAR(4) NOT NULL,
  +                               -- Membership Properties Set: (one or more of) A=admin, F=founding, H=honorary, ...
  +                               -- [F]
  +    me_membership_type         CHAR(1) NOT NULL,
  +                               -- Membership Type Value: N=natural, J=juristic
  +                               -- [N]
  +    me_membership_start        INTEGER NOT NULL,
  +                               -- Membership Start Date
  +                               -- [20050209]
  +    me_membership_end          INTEGER,
  +                               -- Membership End Date
  +                               -- [20060209]
  +
  +    -- Access
  +    me_access_pw_sha1          TEXT NOT NULL,
  +                               -- Access, Password, plain SHA1
  +                               -- [HHHHHHHH...]
  +    me_access_pw_md5           TEXT NOT NULL,
  +                               -- Access, Password, plain MD5
  +                               -- [HHHHHHHH...]
  +    me_access_pw_cryptmd5      TEXT NOT NULL,
  +                               -- Access, Password, crypt(3) salted MD5
  +                               -- [$1$5OnRPADJ$NOwJzToVtRRFngRxTM21g/]
  +    me_access_pw_cryptdes      TEXT NOT NULL
  +                               -- Access, Password, crypt(3) salted DES
  +                               -- [xxxxxxxxxx]
  +);
  +
  +-- Member Enrollment Information
  +CREATE TABLE ase_enrollment (
  +    en_uuid                    TEXT NOT NULL, 
  +                               -- Membership UUID
  +                               -- [75468374-8721-11d9-bee4-0002a5489f14]
  +    en_nickname                TEXT,
  +                               -- Nickname
  +                               -- [rse]
  +    en_address                 TEXT NOT NULL,
  +                               -- Email-Address
  +                               -- [rse@engelschall.com]
  +    en_name                    TEXT,
  +                               -- Person Name
  +                               -- [Ralf S. Engelschall]
  +    en_pw_sha1                 TEXT NOT NULL,
  +                               -- Access, Password, plain SHA1
  +                               -- [HHHHHHHH...]
  +    en_pw_md5                  TEXT NOT NULL,
  +                               -- Access, Password, plain MD5
  +                               -- [HHHHHHHH...]
  +    en_pw_cryptmd5             TEXT NOT NULL,
  +                               -- Access, Password, crypt(3) salted MD5
  +                               -- [$1$5OnRPADJ$NOwJzToVtRRFngRxTM21g/]
  +    en_pw_cryptdes             TEXT NOT NULL,
  +                               -- Access, Password, crypt(3) salted DES
  +                               -- [xxxxxxxxxx]
  +    en_start                   INTEGER NOT NULL,
  +                               -- Enrollment Start (generated, YYYYMMDDHHMMSS)
  +                               -- [20050225000000]
  +    en_penalty                 INTEGER NOT NULL,
  +                               -- Enrollment Penalty (generated, YYYYMMDDHHMMSS)
  +                               -- [20050225000000]
  +    en_expiry                  INTEGER NOT NULL
  +                               -- Enrollment Expiry (generated, YYYYMMDDHHMMSS)
  +                               -- [20050225000000]
  +);
  +
  +-- Member Recovery Information
  +CREATE TABLE ase_recovery (
  +    re_uuid                    TEXT NOT NULL, 
  +                               -- Membership UUID
  +                               -- [75468374-8721-11d9-bee4-0002a5489f14]
  +    re_address                 TEXT NOT NULL,
  +                               -- Email-Address
  +                               -- [rse@engelschall.com]
  +    re_key                     TEXT NOT NULL, 
  +                               -- Recovery Key UUID (generated)
  +                               -- [75468374-8721-11d9-bee4-0002a5489f15]
  +    re_start                   INTEGER NOT NULL,
  +                               -- Recovery Start (generated, YYYYMMDDHHMMSS)
  +                               -- [20050225000000]
  +    re_penalty                 INTEGER NOT NULL,
  +                               -- Recovery Penalty (generated, YYYYMMDDHHMMSS)
  +                               -- [20050225000000]
  +    re_expiry                  INTEGER NOT NULL
  +                               -- Recovery Expiry (generated, YYYYMMDDHHMMSS)
  +                               -- [20050225000000]
  +);
  +
  +--  Authentication Tracking
  +CREATE TABLE ase_auth (
  +    au_uuid                    TEXT NOT NULL,
  +                               -- Membership UUID
  +                               -- [75468374-8721-11d9-bee4-0002a5489f14]
  +    au_time                    INTEGER NOT NULL,
  +                               -- Authentication (Attempt) Time YYYYMMDDHHMMSS
  +                               -- [20050225000000]
  +    au_success                 INTEGER NOT NULL
  +                               -- Authentication Success (boolean): 0=no, 1=yes
  +                               -- [1]
  +);
  +
  +--  Temporary User Interface Security Codes
  +CREATE TABLE ase_scode (
  +    sc_uuid                    TEXT NOT NULL,
  +                               -- Scode UUID
  +                               -- [75468374-8721-11d9-bee4-0002a5489f14]
  +    sc_number                  TEXT NOT NULL,
  +                               -- Scode Number (4 chars)
  +                               -- [xxxx]
  +    sc_expiry                  INTEGER NOT NULL
  +                               -- Scode Expiry Date/Time YYYYMMDDHHMMSS
  +                               -- [20050225000000]
  +);
  +
  +--  Action Logbook
  +CREATE TABLE ase_logbook (
  +    -- Unique Key (primary)
  +    lg_uuid                    TEXT, 
  +                               -- Membership UUID
  +                               -- [75468374-8721-11d9-bee4-0002a5489f14]
  +
  +    -- Log Entry
  +    lg_date                    INTEGER NOT NULL,
  +                               -- Log Entry Date YYYYMMDDHHMMSS
  +                               -- [20050225000000]
  +    lg_text                    TEXT NOT NULL
  +                               -- Log Entry Text
  +                               -- [...]
  +);
  +
  +-- Temporary User Interface Sessions
  +CREATE TABLE ase_sessions (
  +    id                         CHAR(36) NOT NULL PRIMARY KEY,
  +                               -- Session Identifier (OSSP::uuid based)
  +                               -- [75468374-8721-11d9-bee4-0002a5489f14]
  +    a_session                  BLOB NOT NULL
  +                               -- Session Data (Storage based)
  +                               -- [XXXXXXX...]
  +);
  +
  +-- Temporary User Interface Sessions
  +CREATE TABLE ase_cache (
  +    ca_id                      TEXT NOT NULL PRIMARY KEY,
  +                               -- Cache Identifier
  +                               -- [XXXXXXX...]
  +    ca_value                   BLOB NOT NULL,
  +                               -- Cache Data
  +                               -- [XXXXXXX...]
  +    ca_expire                  INTEGER NOT NULL
  +                               -- Cache Expire Time YYYYMMDDHHMMSS
  +                               -- [20050225000000]
  +);
  +
  +--  ----------------------------------------------------------------------- --
  +--                             UPGRADE 1->2
  +--  ----------------------------------------------------------------------- --
  +
  +CREATE TABLE ase_config (
  +    cf_name                    TEXT UNIQUE NOT NULL PRIMARY KEY, 
  +    cf_value                   TEXT NOT NULL
  +);
  +
  +CREATE TABLE ase_member_NEW (
  +    me_uuid                    TEXT UNIQUE NOT NULL PRIMARY KEY, 
  +    me_nickname                TEXT,
  +    me_address                 TEXT UNIQUE NOT NULL,
  +    me_name                    TEXT,
  +    me_account_status          CHAR(1) NOT NULL,
  +    me_account_status_reason   TEXT,
  +    me_account_lock            INTEGER,
  +    me_account_lock_reason     TEXT,
  +    me_membership_karma        INTEGER NOT NULL,
  +    me_membership_prop         CHAR(4) NOT NULL,
  +    me_membership_type         CHAR(1) NOT NULL,
  +    me_membership_start        INTEGER NOT NULL,
  +    me_membership_end          INTEGER,
  +    me_access_pw_sha1          TEXT NOT NULL,
  +    me_access_pw_md5           TEXT NOT NULL,
  +    me_access_pw_cryptmd5      TEXT NOT NULL,
  +    me_access_pw_cryptdes      TEXT NOT NULL
  +);
  +
  +INSERT INTO ase_member_NEW
  +    SELECT
  +    me_uuid,              
  +    "",                        -- me_nickname: added
  +    me_address,
  +    me_name,
  +    1,                         -- me_account_status: added
  +    NULL,                      -- me_account_status_reason: added
  +    NULL,                      -- me_account_lock: added
  +    NULL,                      -- me_account_lock_reason: added
  +    me_membership_status,      -- renamed to me_membership_karma
  +    "",                        -- me_membership_prop: added
  +    me_membership_type,
  +    me_membership_start,
  +    me_membership_end,
  +    me_access_pw_sha1,
  +    me_access_pw_md5,
  +    me_access_pw_cryptmd5,
  +    me_access_pw_cryptdes
  +    FROM ase_member;
  +DROP  TABLE ase_member;
  +ALTER TABLE ase_member_NEW
  +    RENAME TO ase_member;
  +
  +CREATE TABLE ase_enrollment_NEW (
  +    en_uuid                    TEXT NOT NULL, 
  +    en_nickname                TEXT,
  +    en_address                 TEXT NOT NULL,
  +    en_name                    TEXT,
  +    en_pw_sha1                 TEXT NOT NULL,
  +    en_pw_md5                  TEXT NOT NULL,
  +    en_pw_cryptmd5             TEXT NOT NULL,
  +    en_pw_cryptdes             TEXT NOT NULL,
  +    en_start                   INTEGER NOT NULL,
  +    en_penalty                 INTEGER NOT NULL,
  +    en_expiry                  INTEGER NOT NULL
  +);
  +INSERT INTO ase_enrollment_NEW
  +    SELECT
  +    en_uuid, 
  +    "",                        -- en_nickname: added 
  +    en_address,
  +    en_name,
  +    en_pw_sha1,
  +    en_pw_md5,
  +    en_pw_cryptmd5,
  +    en_pw_cryptdes,
  +    en_start,
  +    en_start + 100,            -- en_penalty: added
  +    en_expiry
  +    FROM ase_enrollment;
  +DROP  TABLE ase_enrollment;
  +ALTER TABLE ase_enrollment_NEW
  +    RENAME TO ase_enrollment;
  +
  +CREATE TABLE ase_recovery (
  +    re_uuid                    TEXT NOT NULL, 
  +    re_address                 TEXT NOT NULL,
  +    re_key                     TEXT NOT NULL, 
  +    re_start                   INTEGER NOT NULL,
  +    re_penalty                 INTEGER NOT NULL,
  +    re_expiry                  INTEGER NOT NULL
  +);
  +
  +CREATE TABLE ase_auth (
  +    au_uuid                    TEXT NOT NULL,
  +    au_time                    INTEGER NOT NULL,
  +    au_success                 INTEGER NOT NULL
  +);
  +
  +--  ----------------------------------------------------------------------- --
  +--                             DOWNGRADE 1<-2
  +--  ----------------------------------------------------------------------- --
  +
  +DROP TABLE ase_config;
  +
  +CREATE TABLE ase_member_NEW (
  +    me_uuid                    TEXT UNIQUE NOT NULL PRIMARY KEY, 
  +    me_address                 TEXT UNIQUE NOT NULL,
  +    me_name                    TEXT,
  +    me_membership_status       INTEGER NOT NULL,
  +    me_membership_type         CHAR(1) NOT NULL,
  +    me_membership_start        INTEGER,
  +    me_membership_end          INTEGER,
  +    me_access_pw_sha1          TEXT NOT NULL,
  +    me_access_pw_md5           TEXT NOT NULL,
  +    me_access_pw_cryptmd5      TEXT NOT NULL,
  +    me_access_pw_cryptdes      TEXT NOT NULL
  +);
  +INSERT INTO ase_member_NEW
  +    SELECT
  +    me_uuid,              
  +    me_address,
  +    me_name,
  +    me_membership_karma,       -- renamed from me_membership_status
  +    me_membership_type,
  +    me_membership_start,
  +    me_membership_end,
  +    me_access_pw_sha1,
  +    me_access_pw_md5,
  +    me_access_pw_cryptmd5,
  +    me_access_pw_cryptdes
  +    FROM ase_member;
  +DROP  TABLE ase_member;
  +ALTER TABLE ase_member_NEW
  +    RENAME TO ase_member;
  +
  +CREATE TABLE ase_enrollment_NEW (
  +    en_uuid                    TEXT NOT NULL, 
  +    en_address                 TEXT NOT NULL,
  +    en_name                    TEXT,
  +    en_pw_sha1                 TEXT NOT NULL,
  +    en_pw_md5                  TEXT NOT NULL,
  +    en_pw_cryptmd5             TEXT NOT NULL,
  +    en_pw_cryptdes             TEXT NOT NULL,
  +    en_start                   INTEGER NOT NULL,
  +    en_expiry                  INTEGER NOT NULL
  +);
  +INSERT INTO ase_enrollment_NEW
  +    SELECT
  +    en_uuid, 
  +    en_address,
  +    en_name,
  +    en_pw_sha1,
  +    en_pw_md5,
  +    en_pw_cryptmd5,
  +    en_pw_cryptdes,
  +    en_start,
  +    en_expiry
  +    FROM ase_enrollment;
  +DROP  TABLE ase_enrollment;
  +ALTER TABLE ase_enrollment_NEW
  +    RENAME TO ase_enrollment;
  +
  +DROP TABLE ase_recovery;
  +
  +DROP TABLE ase_auth;
  +
  @@ .
  rm -f ossp-pkg/ase/ase.pl <<'@@ .'
  Index: ossp-pkg/ase/ase.pl
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/ase/ase.sql <<'@@ .'
  Index: ossp-pkg/ase/ase.sql
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 30 11:48:18 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id F21727528ED; Fri, 30 Mar 2007 11:48:17 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ChangeLog TODO ase.api.pm ase.pm sample.cgi
Message-Id: <20070330094817.F21727528ED@mail.ossp.org>
Date: Fri, 30 Mar 2007 11:48:17 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Mar-2007 11:48:17
  Branch: HEAD                             Handle: 2007033010481700

  Added files:
    ossp-pkg/ase            ase.api.pm
  Modified files:
    ossp-pkg/ase            ChangeLog TODO sample.cgi
  Removed files:
    ossp-pkg/ase            ase.pm

  Log:
    rename API stuff, too

  Summary:
    Revision    Changes     Path
    1.14        +4  -0      ossp-pkg/ase/ChangeLog
    1.45        +1  -1      ossp-pkg/ase/TODO
    1.1         +581 -0     ossp-pkg/ase/ase.api.pm
    1.20        +0  -581    ossp-pkg/ase/ase.pm
    1.17        +2  -2      ossp-pkg/ase/sample.cgi
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 ChangeLog
  --- ossp-pkg/ase/ChangeLog	30 Mar 2007 07:58:10 -0000	1.13
  +++ ossp-pkg/ase/ChangeLog	30 Mar 2007 09:48:17 -0000	1.14
  @@ -13,6 +13,10 @@
   
     Changes between 0.1.x and 0.2.0 (xx-Oct-2005 to 20-Mar-2007)
   
  +   o Reorganized filesystem structure by bundling related parts
  +     together into their own ase.XXX.* namespace.
  +     [Ralf S. Engelschall]
  +
      o Support "authenticate" RPC method for explicitly validating
        a login and password pair under remote batch operation.
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.44 -r1.45 TODO
  --- ossp-pkg/ase/TODO	30 Mar 2007 08:52:28 -0000	1.44
  +++ ossp-pkg/ase/TODO	30 Mar 2007 09:48:17 -0000	1.45
  @@ -1,7 +1,7 @@
   
   TODO:
   - DBIx::Simple error cases review
  -- ase.pm: fill in "attr" stuff from results instead of returning pieces
  +- ase.api.pm: fill in "attr" stuff from results instead of returning pieces
   - heartbeat -> disable
   - cron: active (on every login), mail, inactive (after n months), mail, deleted
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.api.pm
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ase.api.pm
  --- /dev/null	2007-03-30 11:47:17 +0200
  +++ ase.api.pm	2007-03-30 11:48:17 +0200
  @@ -0,0 +1,581 @@
  +##
  +##  OSSP ase -- Affiliation Service Environment
  +##  Copyright (c) 2005-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2005-2007 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP ase, a service environment for managing
  +##  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  +##
  +##  This program is free software; you can redistribute it and/or modify
  +##  it under the terms of the GNU General Public License as published by
  +##  the Free Software Foundation; either version 2 of the License, or
  +##  (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this program; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  ase.api.pm: client API
  +##
  +
  +package OSSP::ase::client;
  +
  +use 5.008;
  +use strict;
  +use warnings;
  +use base 'Exporter';
  +
  +our $VERSION = do { my @v = ('0.0.1' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
  +
  +our @EXPORT_OK = ();
  +our @EXPORT    = ();
  +
  +#   textual markers for canvas
  +my $canvas_mark = {
  +    head => "<!-- ASE: HEAD -->",
  +    body => "<!-- ASE: BODY -->"
  +};
  +
  +#   lazy loading of modules
  +sub _use ($$) {
  +    my ($self, $name) = @_;
  +    if (not defined($self->{-use}->{$name})) {
  +        eval "require $name; import $name;";
  +        $self->{-use}->{$name} = 1;
  +    }
  +    return;
  +}
  +
  +#   debugging: time identification
  +sub _time () {
  +    my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time());
  +    return sprintf("%04d-%02d-%02d %02d:%02d:%02d", $year, $mon+1, $mday, $hour, $min, $sec);
  +}
  +
  +#   debugging: message formatting
  +sub _debug ($$;@) {
  +    my ($self, $fmt, @args) = @_;
  +
  +    return if (not defined($self->{-debug}));
  +    if (defined($args[0])) {
  +        $self->{-debug}->printf("%s $fmt\n", $self->_time(), @args);
  +    }
  +    else {
  +        $self->{-debug}->printf("%s %s\n", $self->_time(), $fmt);
  +    }
  +    return;
  +}
  +
  +#   debugging: structure dumping
  +sub _dump ($;@) {
  +    my ($self, $prefix, @args) = @_;
  +
  +    return if (not defined($self->{-debug}));
  +    $self->_use("Data::Dumper");
  +    my $d = Data::Dumper->new([@args]);
  +    $d->Purity(0);
  +    $d->Indent(1);
  +    $d->Terse(1);
  +    $d->Pad(sprintf("%s %s| ", $self->_time()), $prefix);
  +    $self->{-debug}->print($d->Dump());
  +    return;
  +}
  +
  +#   object constructor
  +sub new {
  +    my $proto = shift;
  +    my %args = @_;
  +
  +    #   create new object
  +    my $class = ref($proto) || $proto;
  +    my $self = {};
  +    bless ($self, $class);
  +
  +    #   pre-load essentials
  +    $self->{-use} = {};
  +    $self->_use("CGI");
  +    $self->_use("CGI::Session");
  +
  +    #   fill object with attributes
  +    $self->{-server_int} = ($args{-server_int} || $args{-server} ||
  +                           die "no OSSP ase internal server URL specified with \"-server[_int]\"");
  +    $self->{-server_ext} = ($args{-server_ext} || $args{-server} ||
  +                           die "no OSSP ase external server URL specified with \"-server[_ext]\"");
  +    $self->{-cgi}        = ($args{-cgi}     || new CGI);
  +    $self->{-session}    = ($args{-session} || new CGI::Session);
  +    $self->{-mode}       = ($args{-mode}    || "mode");
  +    $self->{-valid}      = ($args{-valid}   || 0);
  +    $self->{-debug}      = ($args{-debug}   || undef);
  +    $self->{-response}   = "";
  +    $self->{-error}      = "";
  +
  +    #   optionally open debug logfile
  +    if (defined($self->{-debug})) {
  +        $self->_use("IO::File");
  +        $self->{-debug} = IO::File->new(">>" . $self->{-debug})
  +            or die "failed to open debug logfile: $!";
  +    }
  +
  +    #   return object
  +    return $self;
  +}
  +
  +#   object destructor (explicit)
  +sub destroy ($) {
  +    my ($self) = @_;
  +
  +    #   shutdown sub-objects
  +    $self->{-session}->flush() if (defined($self->{-session}));
  +    $self->{-debug}->close()   if (defined($self->{-debug}));
  +
  +    #   destroy sub-objects
  +    delete $self->{-cgi};
  +    delete $self->{-session};
  +    delete $self->{-debug};
  +
  +    return;
  +}
  +
  +#   object destructor (implicit)
  +sub DESTROY ($) {
  +    my ($self) = @_;
  +    $self->destroy();
  +    return;
  +}
  +
  +#   run-time responsibility check
  +sub responsible ($) {
  +    my ($self) = @_;
  +
  +    my $action = $self->{-cgi}->url_param("ase-action") || "";
  +    return $action =~ m/^(login|logout|profile|info|comeback)$/;
  +}
  +
  +#   run-time action handler
  +sub action ($;%) {
  +    my ($self, %args) = @_;
  +
  +    #   debugging
  +    $self->_debug("action: client-sid=%s server-sid=%s",
  +        $self->{-session}->id(), $self->attr("session-id") || "none");
  +
  +    my $action = $self->{-cgi}->url_param("ase-action") || "";
  +    if ($action =~ m/^(login|logout|profile|info)$/) {
  +        #
  +        #   request ASE actions
  +        #
  +        my $mode_during = $self->{-cgi}->url_param("ase-mode-during")
  +            or do { $self->error("CGI parameter \"ase-mode-during\" missing or empty"), return 0 };
  +        my $mode_after  = $self->{-cgi}->url_param("ase-mode-after")
  +            or do { $self->error("CGI parameter \"ase-mode-after\" missing or empty"), return 0 };
  +
  +        #   debugging
  +        $self->_debug("action: action=%s mode-during=%s mode-after=%s", $action, $mode_during, $mode_after);
  +
  +        #   remember mode after action
  +        $self->attr("mode-after", $mode_after);
  +
  +        #   determine URLs for canvas and return
  +        my $canvas = sprintf("%s?%s=%s",
  +            $self->{-cgi}->url(-full => 1), $self->{-mode}, $mode_during);
  +        my $return = sprintf("%s?ase-action=comeback;ase-action-old=%s;ase-sid=%%s",
  +            $self->{-cgi}->url(-full => 1), $action);
  +
  +        #   determine URL for server request
  +        $self->_use("URI::Escape");
  +        my $url = sprintf(
  +            "%s?mode=rpc;method=%s;" .
  +            ($action =~ m/^(profile|info)$/ ? "sid=" . ($self->attr("session-id") || "none") . ";" : "") .
  +            "return=%s;canvas=%s;canvas_mark_head=%s;canvas_mark_body=%s",
  +            $self->{-server_ext}, $action,
  +            URI::Escape::uri_escape($return),
  +            URI::Escape::uri_escape($canvas),
  +            URI::Escape::uri_escape($canvas_mark->{"head"}),
  +            URI::Escape::uri_escape($canvas_mark->{"body"}));
  +
  +        #   redirect to server request URL
  +        $self->response($self->{-cgi}->redirect(-url => $url, -status => 302));
  +        return 1;
  +    }
  +    elsif ($action eq 'comeback') {
  +        #
  +        #   respond to ASE actions
  +        #
  +        my $action_old = $self->{-cgi}->url_param("ase-action-old")
  +            or do { $self->error("CGI parameter \"ase-action-old\" missing or empty"), return 0 };
  +        my $sid = $self->{-cgi}->url_param("ase-sid")
  +            or do { $self->error("CGI parameter \"ase-sid\" missing or empty"), return 0 };
  +
  +        $self->_debug("action: action=%s action-old=%s sid=%s", $action, $action_old, $sid);
  +
  +        #   sanity check remote server session
  +        $self->attr("session-id", $sid);
  +        $self->validate(1);
  +        if ($action_old eq "login" and $self->attr("session-valid") ne "yes") {
  +            $self->error("server session still invalid after login: \"%s\"", $sid);
  +            return 0;
  +        }
  +        elsif ($action_old eq "logout" and $self->attr("session-valid") ne "no") {
  +            $self->error("server session still valid after logout: \"%s\"", $sid);
  +            return 0;
  +        }
  +
  +        #   redirect to own following URL
  +        my $mode_after = $self->attr("mode-after");
  +        my $url = sprintf("%s?%s=%s", $self->{-cgi}->url(-relative => 1), $self->{-mode}, $mode_after);
  +        $self->response($self->{-cgi}->redirect(-url => $url, -status => 302));
  +        return 1;
  +    }
  +    else {
  +        $self->error("unable to determine action");
  +        return 0;
  +    }
  +}
  +
  +sub response ($;$) {
  +    my ($self, $response) = @_;
  +
  +    my $rv = $self->{-response};
  +    if (not $rv and $self->error()) {
  +        $rv = $self->{-cgi}->header(
  +            -status  => "500 Internal Server Error",
  +            -type    => "text/plain",
  +            -expires => "+0s",
  +        ) . "ASE ERROR: " . $self->error() . "\n";
  +    }
  +    $self->{-response} = $response if (@_ == 2);
  +    return $rv;
  +}
  +
  +sub error ($;$@) {
  +    my ($self, $fmt, @args) = @_;
  +
  +    my $rv = $self->{-error};
  +    $self->{-error} = (@_ >= 3 ? sprintf($fmt, @args) : sprintf("%s", $fmt)) if (@_ >= 2);
  +    return $rv;
  +}
  +
  +#   session validation
  +sub validate ($) {
  +    my ($self, $forced) = @_;
  +
  +    #   names of valid ASE session attributes
  +    my @valid_attributes = qw(
  +        session-id
  +        session-valid
  +        session-created
  +        session-expires
  +        canvas-url
  +        canvas-mark-head
  +        canvas-mark-body
  +        client-address
  +        client-login-uuid
  +        client-login-name
  +        client-login-nick
  +        client-login-addr
  +    );
  +
  +    #   make sure there is a session to be validated
  +    my $sid = $self->attr("session-id");
  +    return if (not defined($sid));
  +
  +    #   debugging
  +    $self->_debug("METHOD: validate: forced=%s sid=%s", $forced ? "yes" : "no", $sid);
  +
  +    #   short-circuit if still no (re-)validation is necessary
  +    my $valid_since = $self->attr("session-valid-since");
  +    return if (    not $forced
  +               and defined($valid_since)
  +               and (   $self->{-valid} == 0
  +                    or ($valid_since + $self->{-valid}) > time()));
  +
  +    #   clear all remembered session attributes
  +    foreach my $key (@valid_attributes) {
  +        $self->attr($key, undef);
  +    }
  +
  +    #   query server for session information
  +    $self->_use("IO::Socket::INET");
  +    my $server = $self->{-server_int};
  +    my ($host, $port, $path) = ($server =~ m|^http://([^:/]+)((?::\d+)?)(.*)$|) or die;
  +    $port ||= 80;
  +    $port =~ s|^:||;
  +    $path .= "?mode=rpc;method=info;sid=$sid";
  +    my $sock = IO::Socket::INET->new (
  +        PeerAddr => $host,
  +        PeerPort => $port,
  +        Proto    => "tcp",
  +        Timeout  => 10
  +    ) or die "failed to connect to $host:$port: $@";
  +    $sock->autoflush(1);
  +    $sock->printf(
  +        "GET $path HTTP/1.0\n" .
  +        "Host: $host:$port\n" .
  +        "\n"
  +    );
  +    my $response = '';
  +    $response .= $_ while (<$sock>);
  +    $sock->close();
  +    $self->_debug("METHOD: validate: response from %s", $server);
  +
  +    #   parse session information response
  +    my $attribute = {};
  +    $response =~ s|^HTTP/1.[01x]\s+200\s+.+?\r?\n\r?\n||s;
  +    foreach my $key (@valid_attributes) {
  +        $attribute->{$key} = "";
  +        $response =~ s|${key}:[ \t]+([^\r\n]+)\r?\n|$attribute->{$key} = $1, ''|sei;
  +    }
  +
  +    #   check validity of session
  +    my $expires = ($attribute->{"session-expires"} || 0) - time();
  +    if (not (    $attribute->{"session-valid"} eq "yes"
  +             and $attribute->{"client-login-uuid"} ne ""
  +             and $attribute->{"client-login-name"} ne ""
  +             and $attribute->{"client-login-addr"} ne ""
  +             and $expires > 0                           )) {
  +        $attribute->{"session-valid"}   = "no";
  +        $attribute->{"session-expires"} = time()+1;
  +        $expires = 1;
  +    }
  +
  +    #   take over session attributes
  +    foreach my $key (@valid_attributes) {
  +        $self->attr($key, $attribute->{$key}, sprintf("+%ds", $expires));
  +    }
  +
  +    #   remember time of this validation
  +    $self->attr("session-valid-since", time());
  +    $self->_dump("validate: ", $self->{-session});
  +    return;
  +}
  +
  +#   login authentication
  +sub authenticate ($$$) {
  +    my ($self, $login, $password) = @_;
  +
  +    #   debugging
  +    $self->_debug("METHOD: authenticate: login=%s password=%s", $login, $password);
  +
  +    #   optionally hash password if still not hashed
  +    #   and the SHA1 Perl API is available to us
  +    if ($password !~ m/^SHA1:[0-9a-fA-F]{40}$/) {
  +        $self->_use("Digest::SHA1");
  +        if (defined $Digest::SHA1::VERSION) {
  +            my $sha1 = new Digest::SHA1;
  +            $sha1->add($password);
  +            $password = "SHA1:" . $sha1->hexdigest;
  +            undef $sha1;
  +        }
  +    }
  +
  +    #   query server for authentication information
  +    $self->_use("IO::Socket::INET");
  +    my $server = $self->{-server_int};
  +    my ($host, $port, $path) = ($server =~ m|^http://([^:/]+)((?::\d+)?)(.*)$|) or die;
  +    $port ||= 80;
  +    $port =~ s|^:||;
  +    $path .= "?mode=rpc;method=authenticate;login=$login;password=$password";
  +    my $sock = IO::Socket::INET->new (
  +        PeerAddr => $host,
  +        PeerPort => $port,
  +        Proto    => "tcp",
  +        Timeout  => 10
  +    ) or die "failed to connect to $host:$port: $@";
  +    $sock->autoflush(1);
  +    $sock->printf(
  +        "GET $path HTTP/1.0\n" .
  +        "Host: $host:$port\n" .
  +        "\n"
  +    );
  +    my $response = '';
  +    $response .= $_ while (<$sock>);
  +    $sock->close();
  +    $self->_debug("METHOD: authenticate: response from %s", $server);
  +
  +    #   parse session information response
  +    my $attribute = {};
  +    $response =~ s|^HTTP/1.[01x]\s+200\s+.+?\r?\n\r?\n||s;
  +    foreach my $key (qw(client-login-auth client-login-uuid client-login-error)) {
  +        $attribute->{$key} = "";
  +        $response =~ s|${key}:[ \t]+([^\r\n]+)\r?\n|$attribute->{$key} = $1, ''|sei;
  +    }
  +
  +    #   provide results
  +    return (
  +        $attribute->{"client-login-auth"} eq "yes" ? 1 : 0, 
  +        $attribute->{"client-login-uuid"}  || "",
  +        $attribute->{"client-login-error"} || ""
  +    );
  +}
  +
  +#   self-referencing URL generator
  +sub url ($%) {
  +    my ($self, %args) = @_;
  +
  +    #   create self-referencing URL
  +    my $base = $self->{-cgi}->url(-relative => 1);
  +    $base = '.' if ($base eq '');
  +    my $mode =    $self->{-cgi}->url_param($self->{-mode})
  +               || $self->{-cgi}->param($self->{-mode})
  +               || "";
  +    my $url = sprintf(
  +        "%s?ase-action=%s;ase-mode-during=%s;ase-mode-after=%s",
  +        $base, $args{-action},
  +        $args{-mode_during} || $mode,
  +        $args{-mode_after}  || $mode
  +    );
  +
  +    return $url;
  +}
  +
  +#   return arbitrary ASE session attributes
  +sub attr ($$;$$) {
  +    my ($self, $name, $value, $expire) = @_;
  +
  +    my $value_old = $self->{-session}->param("ase-$name");
  +    if (@_ >= 3) {
  +        if (defined($value)) {
  +            $self->{-session}->param("ase-$name", $value);
  +            if (defined($expire)) {
  +                $self->{-session}->expire("ase-$name", $expire);
  +            }
  +        }
  +        else {
  +            $self->{-session}->clear("ase-$name");
  +        }
  +    }
  +    return $value_old;
  +}
  +
  +#   return current login
  +sub login ($) {
  +    my ($self) = @_;
  +
  +    return (($self->attr("session-valid") || "no") eq "yes");
  +}
  +
  +#   return ASE canvas marker for head and body
  +sub canvas ($%) {
  +    my ($self, %args) = @_;
  +
  +    return ( $args{-part} eq 'head'
  +            ? $canvas_mark->{"head"}
  +            : $canvas_mark->{"body"});
  +}
  +
  +1;
  +
  +__END__
  +
  +=pod
  +
  +=head1 NAME
  +
  +OSSP::ase::client -- OSSP ase Client API
  +
  +=head1 DESCRIPTION
  +
  +B<OSSP::ase::client> is the client Perl API of B<OSSP ase>.
  +It allows an arbitrary CGI written in Perl to leverage from
  +B<OSSP ase> authentication.
  +
  +=head1 APPLICATION PROGRAMMING INTERFACE (API)
  +
  +The following API methods are provided:
  +
  +=over 4
  +
  +=item C<my $ase = >B<new OSSP::ase::client>C<(>I<options>C<);>
  +
  +This creates a new B<OSSP ase> client object.
  +The available I<options> are:
  +
  +=over 4
  +
  +=item B<-server>, B<-server_int>, B<-server_ext> (default: I<none>)
  +
  +Mandatory URL of the B<OSSP ase> server CGI.
  +Usually something like C<http://ase.example.com/ase.cgi>".
  +Option B<-server> sets both internal (communication
  +between OSSP::ase::client and server) and external URL (communication between
  +browser and server). In case the URLs have to be different
  +the options B<-server_int> and B<-server_ext> can be used.
  +
  +=item B<-cgi> (default: C<new CGI>)
  +
  +Optional but strongly recommended reference to a B<CGI> query object.
  +
  +=item B<-session> (default: C<new CGI::Session>)
  +
  +Optional but strongly recommended reference to a B<CGI::Session> session
  +handling object.
  +
  +=item B<-mode> (default: C<"mode">)
  +
  +Optional name of B<CGI> parameter holding the run-time mode
  +dispatching information, i.e., the parameter your application
  +uses to decide which application screen/page to display.
  +
  +=item B<-valid> (default: C<0>)
  +
  +Optional number of seconds a B<OSSP ase> server session information is
  +valid before it is forced to be revalidated. A value of C<0> indicates
  +that no revalidation is enforced at all. Nevertheless the B<OSSP ase>
  +server session information is automatically expiring after the time
  +the server indicated. The revalidated is intended for intermediate
  +revalidation.
  +
  +=back
  +
  +=item C<$ase-E<gt>destroy();>
  +
  +=item C<undef $ase;>
  +
  +This destroys the B<OSSP ase> client object.
  +
  +=item C<$ase-E<gt>responsible();>
  +
  +FIXME
  +
  +=item C<$ase-E<gt>action();>
  +
  +FIXME
  +
  +=item C<$ase-E<gt>error();>
  +
  +FIXME
  +
  +=item C<$ase-E<gt>response();>
  +
  +FIXME
  +
  +=item C<$ase-E<gt>validate($forced);>
  +
  +FIXME
  +
  +=item C<($authenticated, $uuid, $error) = $ase-E<gt>authenticate($login, $password);>
  +
  +FIXME
  +
  +=item C<$ase-E<gt>url();>
  +
  +FIXME
  +
  +=item C<$ase-E<gt>attr($name>[C<, $value>[C<, $expire>]]C<);>
  +
  +FIXME
  +
  +=item C<$ase-E<gt>canvas();>
  +
  +FIXME
  +
  +=back
  +
  +=cut
  +
  @@ .
  rm -f ossp-pkg/ase/ase.pm <<'@@ .'
  Index: ossp-pkg/ase/ase.pm
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/sample.cgi
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 sample.cgi
  --- ossp-pkg/ase/sample.cgi	22 Mar 2007 19:16:38 -0000	1.16
  +++ ossp-pkg/ase/sample.cgi	30 Mar 2007 09:48:17 -0000	1.17
  @@ -38,8 +38,8 @@
   use CGI::GuruMeditation (-name => "sample", -debug => 1);
   use IO::All;
   use String::Divert;
  -#use OSSP::ase::client;                                 # production
  -BEGIN { require "./ase.pm"; import OSSP::ase::client; } # development
  +#use OSSP::ase::client;                                     # production
  +BEGIN { require "./ase.api.pm"; import OSSP::ase::client; } # development
   
   ##
   ##  PROLOG
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 30 11:51:21 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 684C47528B9; Fri, 30 Mar 2007 11:51:21 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.profile.pl
Message-Id: <20070330095121.684C47528B9@mail.ossp.org>
Date: Fri, 30 Mar 2007 11:51:21 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Mar-2007 11:51:21
  Branch: HEAD                             Handle: 2007033010512100

  Modified files:
    ossp-pkg/ase            ase.cgi.profile.pl

  Log:
    remove colors

  Summary:
    Revision    Changes     Path
    1.21        +2  -2      ossp-pkg/ase/ase.cgi.profile.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.profile.pl
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 ase.cgi.profile.pl
  --- ossp-pkg/ase/ase.cgi.profile.pl	30 Mar 2007 08:32:46 -0000	1.20
  +++ ossp-pkg/ase/ase.cgi.profile.pl	30 Mar 2007 09:51:21 -0000	1.21
  @@ -274,13 +274,13 @@
           $html << 1;
           $html >> "button-edit";
           $html .= $cgi->submit(
  -            -class   => 'button_red',
  +            -class   => 'button',
               -id      => 'button_cancel',
               -name    => 'button.cancel',
               -value   => 'Cancel',
           );
           $html .= $cgi->submit(
  -            -class   => 'button_green',
  +            -class   => 'button',
               -id      => 'button_save',
               -name    => 'button.save',
               -value   => 'Save',
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 30 11:53:10 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id CAEE37528B9; Fri, 30 Mar 2007 11:53:09 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.ui.jquery.js
Message-Id: <20070330095309.CAEE37528B9@mail.ossp.org>
Date: Fri, 30 Mar 2007 11:53:09 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Mar-2007 11:53:09
  Branch: HEAD                             Handle: 2007033010530900

  Modified files:
    ossp-pkg/ase            ase.ui.jquery.js

  Log:
    upgrade to latest jQuery

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/ase/ase.ui.jquery.js
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.ui.jquery.js
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ase.ui.jquery.js
  --- ossp-pkg/ase/ase.ui.jquery.js	28 Mar 2007 19:44:07 -0000	1.1
  +++ ossp-pkg/ase/ase.ui.jquery.js	30 Mar 2007 09:53:09 -0000	1.2
  @@ -1 +1 @@
  -eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('u(T 1h.l=="1e"){1h.1e=1h.1e;C l=q(a,c){u(1h==6)B 1Q l(a,c);a=a||11;u(l.2G(a))B 1Q l(11)[l.fn.37?"37":"4z"](a);u(T a=="1V"){C m=/^[^<]*(<(.|\\s)+>)[^>]*$/.59(a);u(m)a=l.3I([m[1]]);L B 1Q l(c).3p(a)}B 6.7f(a.22==3L&&a||(a.7B||a.I&&a!=1h&&!a.33&&a[0]!=1e&&a[0].33)&&l.5h(a)||[a])};u(T $!="1e")l.5K$=$;C $=l;l.fn=l.5B={7B:"1.1.2+cI",4N:q(){B 6.I},I:0,2O:q(2Q){B 2Q==1e?l.5h(6):6[2Q]},43:q(a){C 1f=l(a);1f.ab=6;B 1f},7f:q(a){6.I=0;[].1y.1A(6,a);B 6},19:q(fn,28){B l.19(6,fn,28)},2Z:q(17){C 8t=-1;6.19(q(i){u(6==17)8t=i});B 8t},1v:q(2S,G,H){C 17=2S;u(2S.22==2I)u(G==1e)B 6.I&&l[H||"1v"](6[0],2S)||1e;L{17={};17[2S]=G}B 6.19(q(2Z){U(C 16 29 17)l.1v(H?6.1E:6,16,l.16(6,17[16],H,2Z,16))})},K:q(2S,G){B 6.1v(2S,G,"68")},1M:q(e){u(T e=="1V")B 6.6r().3H(11.cJ(e));C t="";l.19(e||6,q(){l.19(6.5P,q(){u(6.33!=8)t+=6.33!=1?6.6n:l.fn.1M([6])})});B t},4i:q(){C a,28=18;B 6.19(q(){u(!a)a=l.3I(28,6.6e);C b=a[0].7F(14);6.1o.5A(b,6);2M(b.25)b=b.25;b.8w(6)})},3H:q(){B 6.6v(18,14,1,q(a){6.8w(a)})},aq:q(){B 6.6v(18,14,-1,q(a){6.5A(a,6.25)})},ar:q(){B 6.6v(18,1c,1,q(a){6.1o.5A(a,6)})},as:q(){B 6.6v(18,1c,-1,q(a){6.1o.5A(a,6.47)})},3g:q(){B 6.ab||l([])},3p:q(t){B 6.43(l.8A(l.4E(6,q(a){B l.3p(t,a)})),t)},8x:q(8u){B 6.43(l.4E(6,q(a){C a=a.7F(8u!=1e?8u:14);a.$2l=1b;B a}))},1z:q(t){B 6.43(l.2G(t)&&l.53(6,q(el,2Z){B t.1A(el,[2Z])})||l.5S(t,6))},2o:q(t){B 6.43(t.22==2I&&l.5S(t,6,14)||l.53(6,q(a){B(t.22==3L||t.7B)?l.6P(a,t)<0:a!=t}))},2e:q(t){B 6.43(l.3Y(6.2O(),t.22==2I?l(t).2O():t.I!=1e&&(!t.1J||t.1J=="cK")?t:[t]))},3a:q(2p){B 2p?l.5S(2p,6).I>0:1c},9Q:q(){B 6.43(l.5h([].9Q.1A(6,18)))},8v:q(){B 6.43(6.2O().8v(),18)},1W:q(1W){B 1W==1e?(6.I?6[0].G:1b):6.1v("G",1W)},2i:q(1W){B 1W==1e?(6.I?6[0].3R:1b):6.6r().3H(1W)},6v:q(28,3l,6l,fn){C 8x=6.I>1,a;B 6.19(q(){u(!a){a=l.3I(28,6.6e);u(6l<0)a.8v()}C 17=6;u(3l&&l.1J(6,"3l")&&l.1J(a[0],"6W"))17=6.bn("3w")[0]||6.8w(11.9K("3w"));l.19(a,q(){fn.1A(17,[8x?6.7F(14):6])})})}};l.1k=l.fn.1k=q(){C 3h=18[0],a=1;u(18.I==1){3h=6;a=0}C 16;2M(16=18[a++])U(C i 29 16)3h[i]=16[i];B 3h};l.1k({eW:q(){u(l.5K$)$=l.5K$;B l},2G:q(fn){B!!fn&&T fn!="1V"&&!fn.1J&&fn.22!=3L&&/q/i.1q(fn+"")},8D:q(J){B J.7T&&J.6e&&!J.6e.1K},1J:q(J,1g){B J.1J&&J.1J.6C()==1g.6C()},19:q(17,fn,28){u(17.I==1e)U(C i 29 17)fn.1A(17[i],28||[i,17[i]]);L U(C i=0,4B=17.I;i<4B;i++)u(fn.1A(17[i],28||[i,17[i]])===1c)34;B 17},16:q(J,G,H,2Z,16){u(l.2G(G))G=G.3Z(J,[2Z]);C ad=/z-?2Z|9S-?cL|1L|ak|cM-?1i/i;B G&&G.22==5O&&H=="68"&&!ad.1q(16)?G+"2s":G},2j:{2e:q(J,c){l.19(c.4C(/\\s+/),q(i,1u){u(!l.2j.6g(J.2j,1u))J.2j+=(J.2j?" ":"")+1u})},4o:q(J,c){J.2j=c?l.53(J.2j.4C(/\\s+/),q(1u){B!l.2j.6g(c,1u)}).9v(" "):""},6g:q(t,c){B l.6P(c,(t.2j||t).5F().4C(/\\s+/))>-1}},8z:q(e,o,f){U(C i 29 o){e.1E["3b"+i]=e.1E[i];e.1E[i]=o[i]}f.1A(e,[]);U(C i 29 o)e.1E[i]=e.1E["3b"+i]},K:q(e,p){u(p=="1i"||p=="2d"){C 3b={},7P,7y,d=["f4","cN","cO","cP"];l.19(d,q(){3b["6w"+6]=0;3b["64"+6+"eO"]=0});l.8z(e,3b,q(){u(l.K(e,"1G")!="2n"){7P=e.2W;7y=e.45}L{e=l(e.7F(14)).3p(":3U").au("4O").3g().K({8a:"2E",2z:"4l",1G:"41",cR:"0",2x:"0"}).5N(e.1o)[0];C 6d=l.K(e.1o,"2z");u(6d==""||6d=="6m")e.1o.1E.2z="7i";7P=e.4n;7y=e.62;u(6d==""||6d=="6m")e.1o.1E.2z="6m";e.1o.61(e)}});B p=="1i"?7P:7y}B l.68(e,p)},68:q(J,16,ae){C 1f;u(16=="1L"&&l.1a.1C){1f=l.1v(J.1E,"1L");B 1f==""?"1":1f}u(16=="8K"||16=="5z")16=l.1a.1C?"6K":"5z";u(!ae&&J.1E[16])1f=J.1E[16];L u(11.7d&&11.7d.9c){u(16=="5z"||16=="6K")16="8K";16=16.1N(/([A-Z])/g,"-$1").2t();C 1u=11.7d.9c(J,1b);u(1u)1f=1u.af(16);L u(16=="1G")1f="2n";L l.8z(J,{1G:"41"},q(){C c=11.7d.9c(6,"");1f=c&&c.af(16)||""})}L u(J.4K){C ah=16.1N(/\\-(\\w)/g,q(m,c){B c.6C()});1f=J.4K[16]||J.4K[ah]}B 1f},3I:q(a,6Z){C r=[];6Z=6Z||11;l.19(a,q(i,2K){u(!2K)B;u(2K.22==5O)2K=2K.5F();u(T 2K=="1V"){C s=l.39(2K),26=6Z.9K("26"),4a=[];C 4i=!s.1O("<2H")&&[1,"<3D>","</3D>"]||(!s.1O("<cV")||!s.1O("<3w")||!s.1O("<cW"))&&[1,"<3l>","</3l>"]||!s.1O("<6W")&&[2,"<3l><3w>","</3w></3l>"]||(!s.1O("<cY")||!s.1O("<cZ"))&&[3,"<3l><3w><6W>","</6W></3w></3l>"]||[0,"",""];26.3R=4i[1]+2K+4i[2];2M(4i[0]--)26=26.25;u(l.1a.1C){u(!s.1O("<3l")&&s.1O("<3w")<0)4a=26.25&&26.25.5P;L u(4i[1]=="<3l>"&&s.1O("<3w")<0)4a=26.5P;U(C n=4a.I-1;n>=0;--n)u(l.1J(4a[n],"3w")&&!4a[n].5P.I)4a[n].1o.61(4a[n])}2K=l.5h(26.5P)}u(2K.I===0&&!l.1J(2K,"1X"))B;u(2K[0]==1e||l.1J(2K,"1X"))r.1y(2K);L r=l.3Y(r,2K)});B r},1v:q(J,1g,G){C 4P=l.8D(J)?{}:{"U":"dx","4F":"2j","8K":l.1a.1C?"6K":"5z",5z:l.1a.1C?"6K":"5z",3R:"3R",2j:"2j",G:"G",3q:"3q",4O:"4O",dA:"d2",3J:"3J"};u(1g=="1L"&&l.1a.1C){u(G!=1e){J.ak=1;J.1z=(J.1z||"").1N(/aj\\([^)]*\\)/,"")+(79(G).5F()=="8R"?"":"aj(1L="+G*ac+")")}B J.1z?(79(J.1z.2y(/1L=([^)]*)/)[1])/ac).5F():""}u(4P[1g]){u(G!=1e)J[4P[1g]]=G;B J[4P[1g]]}L u(G==1e&&l.1a.1C&&l.1J(J,"1X")&&(1g=="cu"||1g=="2c"))B J.d5(1g).6n;L u(J.7T){u(G!=1e)J.d6(1g,G);u(l.1a.1C&&/46|3B/.1q(1g)&&!l.8D(J))B J.7E(1g,2);B J.7E(1g)}L{1g=1g.1N(/-([a-z])/d7,q(z,b){B b.6C()});u(G!=1e)J[1g]=G;B J[1g]}},39:q(t){B t.1N(/^\\s+|\\s+$/g,"")},5h:q(a){C r=[];u(T a!="8B")U(C i=0,al=a.I;i<al;i++)r.1y(a[i]);L r=a.8O(0);B r},6P:q(b,a){U(C i=0,al=a.I;i<al;i++)u(a[i]==b)B i;B-1},3Y:q(2D,8E){U(C i=0;8E[i];i++)2D.1y(8E[i]);B 2D},8A:q(2D){C r=[],2Q=l.74++;U(C i=0,fl=2D.I;i<fl;i++)u(2D[i].74!=2Q){2D[i].74=2Q;r.1y(2D[i])}B r},74:0,53:q(3n,fn,9O){u(T fn=="1V")fn=1Q 73("a","i","B "+fn);C 2b=[];U(C i=0,el=3n.I;i<el;i++)u(!9O&&fn(3n[i],i)||9O&&!fn(3n[i],i))2b.1y(3n[i]);B 2b},4E:q(3n,fn){u(T fn=="1V")fn=1Q 73("a","B "+fn);C 2b=[],r=[];U(C i=0,el=3n.I;i<el;i++){C 1W=fn(3n[i],i);u(1W!==1b&&1W!=1e){u(1W.22!=3L)1W=[1W];2b=2b.d9(1W)}}B 2b}});1Q q(){C b=da.db.2t();l.1a={38:/ap/.1q(b),3K:/3K/.1q(b),1C:/1C/.1q(b)&&!/3K/.1q(b),4d:/4d/.1q(b)&&!/(dc|ap)/.1q(b)};l.56=!l.1a.1C||11.dd=="fe"};l.19({1s:"a.1o",6t:"l.6t(a)",de:"l.3N(a,2,\'47\')",df:"l.3N(a,2,\'av\')",cA:"l.5s(a.1o.25,a)",5k:"l.5s(a.25)"},q(i,n){l.fn[i]=q(a){C 1f=l.4E(6,n);u(a&&T a=="1V")1f=l.5S(a,1f);B 6.43(1f)}});l.19({5N:"3H",dg:"aq",5A:"ar",8n:"as"},q(i,n){l.fn[i]=q(){C a=18;B 6.19(q(){U(C j=0,al=a.I;j<al;j++)l(a[j])[n](6)})}});l.19({au:q(2S){l.1v(6,2S,"");6.di(2S)},2L:q(c){l.2j.2e(6,c)},3i:q(c){l.2j.4o(6,c)},dj:q(c){l.2j[l.2j.6g(6,c)?"4o":"2e"](6,c)},4o:q(a){u(!a||l.1z(a,[6]).r.I)6.1o.61(6)},6r:q(){2M(6.25)6.61(6.25)}},q(i,n){l.fn[i]=q(){B 6.19(n,18)}});l.19(["eq","9n","9t","aw"],q(i,n){l.fn[n]=q(2Q,fn){B 6.1z(":"+n+"("+2Q+")",fn)}});l.19(["1i","2d"],q(i,n){l.fn[n]=q(h){B h==1e?(6.I?l.K(6[0],n):1b):6.K(n,h.22==2I?h:h+"2s")}});l.1k({2p:{"":"m[2]==\'*\'||l.1J(a,m[2])","#":"a.7E(\'Q\')==m[2]",":":{9n:"i<m[3]-0",9t:"i>m[3]-0",3N:"m[3]-0==i",eq:"m[3]-0==i",2D:"i==0",2u:"i==r.I-1",aF:"i%2==0",aG:"i%2","3N-70":"l.3N(a.1o.25,m[3],\'47\',a)==a","2D-70":"l.3N(a.1o.25,1,\'47\')==a","2u-70":"l.3N(a.1o.dk,1,\'av\')==a","9o-70":"l.5s(a.1o.25).I==1",1s:"a.25",6r:"!a.25",aw:"l.fn.1M.1A([a]).1O(m[3])>=0",3t:\'a.H!="2E"&&l.K(a,"1G")!="2n"&&l.K(a,"8a")!="2E"\',2E:\'a.H=="2E"||l.K(a,"1G")=="2n"||l.K(a,"8a")=="2E"\',aB:"!a.3q",3q:"a.3q",4O:"a.4O",3J:"a.3J||l.1v(a,\'3J\')",1M:"a.H==\'1M\'",3U:"a.H==\'3U\'",4c:"a.H==\'4c\'",9k:"a.H==\'9k\'",ax:"a.H==\'ax\'",3S:"a.H==\'3S\'",4J:"a.H==\'4J\'",2R:"a.H==\'2R\'",7G:\'a.H=="7G"||l.1J(a,"7G")\',44:"/44|3D|dm|7G/i.1q(a.1J)"},".":"l.2j.6g(a,m[2])","@":{"=":"z==m[4]","!=":"z!=m[4]","=~":"z.2y(4u(m[4]))!=1b","!~":"z.2y(4u(m[4]))==1b","^=":"z&&!z.1O(m[4])","$=":"z&&z.6i(z.I - m[4].I,m[4].I)==m[4]","*=":"z&&z.1O(m[4])>=0","":"z",9e:q(m){B["",m[1],m[3],m[2],m[5]]},aE:"z=a[m[3]];u(!z||/46|3B/.1q(m[3]))z=l.1v(a,m[3]);"},"[":"1d(m[2])?l.3N(a.1o.25,1d(m[2]),\'47\',a)==a:l.3p(m[2],a).I"},aD:[/^\\[ *(@)([\\w-]+) *([!*$^~=]*) *(\'?"?)(.*?)\\4 *\\]/,/^(\\[)\\s*(.*?(\\[.*?\\])?[^[]*?)\\s*\\]/,/^(:)([\\w-]+)\\("?\'?(.*?(\\(.*?\\))?[^(]*?)"?\'?\\)/,1Q 4u("^([:.#]*)("+(l.9f="(?:[\\\\w\\dp-\\dq*-]|\\\\\\\\.)")+"+)")],7o:[/^(\\/?\\.\\.)/,"a.1o",/^(>|\\/)/,"l.5s(a.25)",/^(\\+)/,"l.3N(a,2,\'47\')",/^(~)/,q(a){C s=l.5s(a.1o.25);B s.8O(l.6P(a,s)+1)}],5S:q(2p,3n,2o){C 3b,1u=[];2M(2p&&2p!=3b){3b=2p;C f=l.1z(2p,3n,2o);2p=f.t.1N(/^\\s*,\\s*/,"");1u=2o?3n=f.r:l.3Y(1u,f.r)}B 1u},3p:q(t,2J){u(T t!="1V")B[t];u(2J&&!2J.33)2J=1b;2J=2J||11;u(!t.1O("//")){2J=2J.3d;t=t.6i(2,t.I)}L u(!t.1O("/")&&!2J.6e){2J=2J.3d;t=t.6i(1,t.I);u(t.1O("/")>=1)t=t.6i(t.1O("/"),t.I)}C 1f=[2J],3P=[],2u;2M(t&&2u!=t){C r=[];2u=t;t=l.39(t).1N(/^\\/\\//,"");C 6S=1c;C 5q=/^[\\/>]\\s*([\\w*-]+)/;C m=5q.59(t);u(m){U(C i=0;1f[i];i++)U(C c=1f[i].25;c;c=c.47)u(c.33==1&&(m[1]=="*"||l.1J(c,m[1])))r.1y(c);1f=r;t=t.1N(5q,"");u(t.1O(" ")==0)dr;6S=14}L{U(C i=0,ay=l.7o.I;i<ay;i+=2){C 5q=l.7o[i],fn=l.7o[i+1];C m=5q.59(t);u(m){r=1f=l.4E(1f,l.2G(fn)?fn:1Q 73("a","B "+fn));t=l.39(t.1N(5q,""));6S=14;34}}}u(t&&!6S){u(!t.1O(",")){u(1f[0]==2J)1f.7W();3P=l.3Y(3P,1f);r=1f=[2J];t=" "+t.6i(1,t.I)}L{C 6a=1Q 4u("^(\\\\w+)(#)("+l.9f+"+)");C m=6a.59(t);u(m){m=[0,m[2],m[3],m[1]]}L{6a=1Q 4u("^([#.]?)("+l.9f+"*)");m=6a.59(t)}m[2]=m[2].1N(/\\\\/g,"");C J=1f[1f.I-1];u(m[1]=="#"&&J&&J.8V){C 4L=J.8V(m[2]);u((l.1a.1C||l.1a.3K)&&4L&&4L.Q!=m[2])4L=l(\'[@Q="\'+m[2]+\'"]\',J)[0];1f=r=4L&&(!m[3]||l.1J(4L,m[3]))?[4L]:[]}L{U(C i=0;1f[i];i++){C 7s=m[1]!=""||m[0]==""?"*":m[2];u(7s=="*"&&1f[i].1J.2t()=="40")7s="O";r=l.3Y(r,1f[i].bn(7s))}u(m[1]==".")r=l.8I(r,m[2]);u(m[1]=="#"){C 5n=[];U(C i=0;r[i];i++)u(r[i].7E("Q")==m[2]){5n=[r[i]];34}r=5n}1f=r}t=t.1N(6a,"")}}u(t){C 1W=l.1z(t,r);1f=r=1W.r;t=l.39(1W.t)}}u(t)1f=[];u(1f&&1f[0]==2J)1f.7W();3P=l.3Y(3P,1f);B 3P},8I:q(r,m,2o){m=" "+m+" ";C 5n=[];U(C i=0;r[i];i++){C 8H=(" "+r[i].2j+" ").1O(m)>=0;u(!2o&&8H||2o&&!8H)5n.1y(r[i])}B 5n},1z:q(t,r,2o){C 2u;2M(t&&t!=2u){2u=t;C p=l.aD,m;U(C i=0;p[i];i++){m=p[i].59(t);u(m){t=t.6R(m[0].I);u(l.2p[m[1]].9e)m=l.2p[m[1]].9e(m);m[2]=m[2].1N(/\\\\/g,"");34}}u(!m)34;u(m[1]==":"&&m[2]=="2o")r=l.1z(m[3],r,14).r;L u(m[1]==".")r=l.8I(r,m[2],2o);L{C f=l.2p[m[1]];u(T f!="1V")f=l.2p[m[1]][m[2]];6G("f = q(a,i){"+(l.2p[m[1]].aE||"")+"B "+f+"}");r=l.53(r,f,2o)}}B{r:r,t:t}},6t:q(J){C 99=[];C 1u=J.1o;2M(1u&&1u!=11){99.1y(1u);1u=1u.1o}B 99},3N:q(1u,2b,6l,J){2b=2b||1;C 2Q=0;U(;1u;1u=1u[6l]){u(1u.33==1)2Q++;u(2Q==2b||2b=="aF"&&2Q%2==0&&2Q>1&&1u==J||2b=="aG"&&2Q%2==1&&1u==J)B 1u}},5s:q(n,J){C r=[];U(;n;n=n.47){u(n.33==1&&(!J||n!=J))r.1y(n)}B r}});l.S={2e:q(E,H,1B,R){u(l.1a.1C&&E.6u!=1e)E=1h;u(R)1B.R=R;u(!1B.5a)1B.5a=6.5a++;u(!E.$2l)E.$2l={};C 5X=E.$2l[H];u(!5X){5X=E.$2l[H]={};u(E["5Y"+H])5X[0]=E["5Y"+H]}5X[1B.5a]=1B;E["5Y"+H]=6.6L;u(!6.2A[H])6.2A[H]=[];6.2A[H].1y(E)},5a:1,2A:{},4o:q(E,H,1B){C 2l=E.$2l,1f;u(2l){u(H&&H.H){1B=H.1B;H=H.H}u(!H){U(H 29 2l)6.4o(E,H)}L u(2l[H]){u(1B)66 2l[H][1B.5a];L U(1B 29 E.$2l[H])66 2l[H][1B];U(1f 29 2l[H])34;u(!1f){1f=E["5Y"+H]=1b;66 2l[H]}}U(1f 29 2l)34;u(!1f)E.$2l=1b}},2f:q(H,R,E){R=l.5h(R||[]);u(!E)l.19(6.2A[H]||[],q(){l.S.2f(H,R,6)});L{C 1B=E["5Y"+H],1W,fn=l.2G(E[H]);u(1B){R.aI(6.4P({H:H,3h:E}));u((1W=1B.1A(E,R))!==1c)6.8N=14}u(fn&&1W!==1c)E[H]();6.8N=1c}},6L:q(S){u(T l=="1e"||l.S.8N)B;S=l.S.4P(S||1h.S||{});C 4Q;C c=6.$2l[S.H];C 28=[].8O.3Z(18,1);28.aI(S);U(C j 29 c){28[0].1B=c[j];28[0].R=c[j].R;u(c[j].1A(6,28)===1c){S.3W();S.57();4Q=1c}}u(l.1a.1C)S.3h=S.3W=S.57=S.1B=S.R=1b;B 4Q},4P:q(S){u(!S.3h&&S.aJ)S.3h=S.aJ;u(S.8L==1e&&S.a2!=1e){C e=11.3d,b=11.1K;S.8L=S.a2+(e.31||b.31);S.aH=S.dB+(e.2Y||b.2Y)}u(l.1a.38&&S.3h.33==3){C 5Z=S;S=l.1k({},5Z);S.3h=5Z.3h.1o;S.3W=q(){B 5Z.3W()};S.57=q(){B 5Z.57()}}u(!S.3W)S.3W=q(){6.4Q=1c};u(!S.57)S.57=q(){6.dC=14};B S}};l.fn.1k({2P:q(H,R,fn){B 6.19(q(){l.S.2e(6,H,fn||R,R)})},aN:q(H,R,fn){B 6.19(q(){l.S.2e(6,H,q(S){l(6).75(S);B(fn||R).1A(6,18)},R)})},75:q(H,fn){B 6.19(q(){l.S.4o(6,H,fn)})},2f:q(H,R){B 6.19(q(){l.S.2f(H,R,6)})},3c:q(){C a=18;B 6.49(q(e){6.8Q=6.8Q==0?1:0;e.3W();B a[6.8Q].1A(6,[e])||1c})},e2:q(f,g){q 8S(e){C p=(e.H=="51"?e.dD:e.dE)||e.dF;2M(p&&p!=6)3G{p=p.1o}3F(e){p=6};u(p==6)B 1c;B(e.H=="51"?f:g).1A(6,[e])}B 6.51(8S).76(8S)},37:q(f){u(l.6Y)f.1A(11,[l]);L{l.67.1y(q(){B f.1A(6,[l])})}B 6}});l.1k({6Y:1c,67:[],37:q(){u(!l.6Y){l.6Y=14;u(l.67){l.19(l.67,q(){6.1A(11)});l.67=1b}u(l.1a.4d||l.1a.3K)11.dH("aL",l.37,1c)}}});1Q q(){l.19(("8r,4R,4z,dU,6o,8Y,49,dT,"+"dJ,dK,9b,51,76,dL,3D,"+"3S,dM,dN,dO,1n").4C(","),q(i,o){l.fn[o]=q(d,f){B(f||d)?6.2P(o,d,f):6.2f(o)}});u(l.1a.4d||l.1a.3K)11.dP("aL",l.37,1c);L u(l.1a.1C){11.dQ("<dR"+"dS Q=aM dV=14 "+"3B=//:><\\/4m>");C 4m=11.8V("aM");u(4m)4m.6f=q(){u(6.7M!="3E")B;6.1o.61(6);l.37()};4m=1b}L u(l.1a.38)l.8W=6u(q(){u(11.7M=="dW"||11.7M=="3E"){9y(l.8W);l.8W=1b;l.37()}},10);l.S.2e(1h,"4z",l.37)};u(l.1a.1C)l(1h).aN("8Y",q(){C 2A=l.S.2A;U(C H 29 2A){C 8Z=2A[H],i=8Z.I;u(i&&H!=\'8Y\')do l.S.4o(8Z[i-1],H);2M(--i)}});l.fn.1k({1F:q(1r,1j){C 2E=6.1z(":2E");1r?2E.30({1i:"1F",2d:"1F",1L:"1F"},1r,1j):2E.19(q(){6.1E.1G=6.58?6.58:"";u(l.K(6,"1G")=="2n")6.1E.1G="41"});B 6},1D:q(1r,1j){C 3t=6.1z(":3t");1r?3t.30({1i:"1D",2d:"1D",1L:"1D"},1r,1j):3t.19(q(){6.58=6.58||l.K(6,"1G");u(6.58=="2n")6.58="41";6.1E.1G="2n"});B 6},aP:l.fn.3c,3c:q(fn,8G){C 28=18;B l.2G(fn)&&l.2G(8G)?6.aP(fn,8G):6.19(q(){l(6)[l(6).3a(":2E")?"1F":"1D"].1A(l(6),28)})},bD:q(1r,1j){B 6.1z(":2E").30({1i:"1F"},1r,1j).3g()},bA:q(1r,1j){B 6.1z(":3t").30({1i:"1D"},1r,1j).3g()},dX:q(1r,1j){B 6.19(q(){C aQ=l(6).3a(":2E")?"1F":"1D";l(6).30({1i:aQ},1r,1j)})},bM:q(1r,1j){B 6.1z(":2E").30({1L:"1F"},1r,1j).3g()},bH:q(1r,1j){B 6.1z(":3t").30({1L:"1D"},1r,1j).3g()},dY:q(1r,3M,1j){B 6.30({1L:3M},1r,1j)},30:q(16,1r,3e,1j){B 6.2X(q(){6.55=l.1k({},16);C 2H=l.1r(1r,3e,1j);U(C p 29 16){C e=1Q l.5W(6,2H,p);u(16[p].22==5O)e.5f(e.1u(),16[p]);L e[16[p]](16)}})},2X:q(H,fn){u(!fn){fn=H;H="5W"}B 6.19(q(){u(!6.2X)6.2X={};u(!6.2X[H])6.2X[H]=[];6.2X[H].1y(fn);u(6.2X[H].I==1)fn.1A(6)})}});l.1k({1r:q(1r,3e,fn){C 2H=1r&&1r.22==dZ?1r:{3E:fn||!fn&&3e||l.2G(1r)&&1r,3T:1r,3e:fn&&3e||3e&&3e.22!=73&&3e||"aT"};2H.3T=(2H.3T&&2H.3T.22==5O?2H.3T:{e0:e1,e3:bC}[2H.3T])||e4;2H.3b=2H.3E;2H.3E=q(){l.aW(6,"5W");u(l.2G(2H.3b))2H.3b.1A(6)};B 2H},3e:{e5:q(p,n,4I,78){B 4I+78*p},aT:q(p,n,4I,78){B((-4k.e6(p*4k.e8)/2)+0.5)*78+4I}},2X:{},aW:q(J,H){H=H||"5W";u(J.2X&&J.2X[H]){J.2X[H].7W();C f=J.2X[H][0];u(f)f.1A(J)}},54:[],5W:q(J,V,16){C z=6;C y=J.1E;u(16=="1i"||16=="2d"){C 7c=l.K(J,"1G");C aZ=y.4y;y.4y="2E"}z.a=q(){u(V.7b)V.7b.1A(J,[z.4Z]);u(16=="1L")l.1v(y,"1L",z.4Z);L{y[16]=1d(z.4Z)+"2s";y.1G="41"}};z.7Q=q(){B 79(l.K(J,16))};z.1u=q(){C r=79(l.68(J,16));B r&&r>-e9?r:z.7Q()};z.5f=q(93,3M){z.8y=(1Q 5m()).7e();z.4Z=93;z.a();l.54.1y(q(){B z.7b(93,3M)});u(l.54.I==1){C aY=6u(q(){l.54=l.53(l.54,q(fn){B fn()});u(!l.54.I)9y(aY)},13)}};z.1F=q(){u(!J.3O)J.3O={};J.3O[16]=l.1v(J.1E,16);V.1F=14;z.5f(0,6.1u());u(16!="1L")y[16]="52"};z.1D=q(){u(!J.3O)J.3O={};J.3O[16]=l.1v(J.1E,16);V.1D=14;z.5f(6.1u(),0)};z.3c=q(){u(!J.3O)J.3O={};J.3O[16]=l.1v(J.1E,16);u(7c=="2n"){V.1F=14;u(16!="1L")y[16]="52";z.5f(0,6.1u())}L{V.1D=14;z.5f(6.1u(),0)}};z.7b=q(4I,96){C t=(1Q 5m()).7e();u(t>V.3T+z.8y){z.4Z=96;z.a();u(J.55)J.55[16]=14;C 3P=14;U(C i 29 J.55)u(J.55[i]!==14)3P=1c;u(3P){u(7c){y.4y=aZ;y.1G=7c;u(l.K(J,"1G")=="2n")y.1G="41"}u(V.1D)y.1G="2n";u(V.1D||V.1F)U(C p 29 J.55)l.1v(y,p,J.3O[p])}u(3P&&l.2G(V.3E))V.3E.1A(J);B 1c}L{C n=t-6.8y;C p=n/V.3T;z.4Z=l.3e[V.3e](p,n,4I,(96-4I),V.3T);z.a()}B 14}}});l.fn.1k({eb:q(1t,3u,1j){6.4z(1t,3u,1j,1)},4z:q(1t,3u,1j,3v){u(l.2G(1t))B 6.2P("4z",1t);1j=1j||q(){};C H="9a";u(3u)u(l.2G(3u)){1j=3u;3u=1b}L{3u=l.O(3u);H="b6"}C 3k=6;l.7h({1t:1t,H:H,R:3u,3v:3v,3E:q(5i,1U){u(1U=="5p"||!3v&&1U=="bj")3k.1v("3R",5i.7A).9p().19(1j,[5i.7A,1U,5i]);L 1j.1A(3k,[5i.7A,1U,5i])}});B 6},ed:q(){B l.O(6)},9p:q(){B 6.3p("4m").19(q(){u(6.3B)l.b4(6.3B);L l.9q(6.1M||6.ee||6.3R||"")}).3g()}});u(!1h.5E)5E=q(){B 1Q ef("az.eg")};l.19("b9,bp,bT,bw,bU,bh".4C(","),q(i,o){l.fn[o]=q(f){B 6.2P(o,f)}});l.1k({2O:q(1t,R,1j,H,3v){u(l.2G(R)){1j=R;R=1b}B l.7h({H:"9a",1t:1t,R:R,5p:1j,9h:H,3v:3v})},eh:q(1t,R,1j,H){B l.2O(1t,R,1j,H,1)},b4:q(1t,1j){B l.2O(1t,1b,1j,"4m")},ei:q(1t,R,1j){B l.2O(1t,R,1j,"bO")},ej:q(1t,R,1j,H){u(l.2G(R)){1j=R;R={}}B l.7h({H:"b6",1t:1t,R:R,5p:1j,9h:H})},ek:q(32){l.84.32=32},em:q(F){l.1k(l.84,F)},84:{2A:14,H:"9a",32:0,bb:"en/x-eo-1X-ep",b7:14,7u:14,R:1b},7x:{},7h:q(s){s=l.1k({},l.84,s);u(s.R){u(s.b7&&T s.R!="1V")s.R=l.O(s.R);u(s.H.2t()=="2O"){s.1t+=((s.1t.1O("?")>-1)?"&":"?")+s.R;s.R=1b}}u(s.2A&&!l.9j++)l.S.2f("b9");C 9i=1c;C 1p=1Q 5E();1p.es(s.H,s.1t,s.7u);u(s.R)1p.7S("et-eu",s.bb);u(s.3v)1p.7S("ev-9l-ew",l.7x[s.1t]||"ex, ey ez eA 9d:9d:9d eB");1p.7S("X-eC-eD","5E");u(1p.eE)1p.7S("eF","eG");u(s.bg)s.bg(1p);u(s.2A)l.S.2f("bh",[1p,s]);C 6f=q(9C){u(1p&&(1p.7M==4||9C=="32")){9i=14;u(7w){9y(7w);7w=1b}C 1U;3G{1U=l.by(1p)&&9C!="32"?s.3v&&l.bE(1p,s.1t)?"bj":"5p":"1n";u(1U!="1n"){C 7n;3G{7n=1p.9m("bF-9l")}3F(e){}u(s.3v&&7n)l.7x[s.1t]=7n;C R=l.bK(1p,s.9h);u(s.5p)s.5p(R,1U);u(s.2A)l.S.2f("bU",[1p,s])}L l.7q(s,1p,1U)}3F(e){1U="1n";l.7q(s,1p,1U,e)}u(s.2A)l.S.2f("bT",[1p,s]);u(s.2A&&!--l.9j)l.S.2f("bp");u(s.3E)s.3E(1p,1U);u(s.7u)1p=1b}};C 7w=6u(6f,13);u(s.32>0)3j(q(){u(1p){1p.eH();u(!9i)6f("32")}},s.32);3G{1p.eJ(s.R)}3F(e){l.7q(s,1p,1b,e)}u(!s.7u)6f();B 1p},7q:q(s,1p,1U,e){u(s.1n)s.1n(1p,1U,e);u(s.2A)l.S.2f("bw",[1p,s,e])},9j:0,by:q(r){3G{B!r.1U&&5l.eK=="9k:"||(r.1U>=bC&&r.1U<eL)||r.1U==bG||l.1a.38&&r.1U==1e}3F(e){}B 1c},bE:q(1p,1t){3G{C bI=1p.9m("bF-9l");B 1p.1U==bG||bI==l.7x[1t]||l.1a.38&&1p.1U==1e}3F(e){}B 1c},bK:q(r,H){C ct=r.9m("eM-H");C R=!H&&ct&&ct.1O("1p")>=0;R=H=="1p"||R?r.eP:r.7A;u(H=="4m")l.9q(R);u(H=="bO")6G("R = "+R);u(H=="2i")l("<26>").2i(R).9p();B R},O:q(a){C s=[];u(a.22==3L||a.7B)l.19(a,q(){s.1y(4T(6.1g)+"="+4T(6.G))});L U(C j 29 a)u(a[j]&&a[j].22==3L)l.19(a[j],q(){s.1y(4T(j)+"="+4T(6))});L s.1y(4T(j)+"="+4T(a[j]));B s.9v("&")},9q:q(R){u(1h.bR)1h.bR(R);L u(l.1a.38)1h.3j(R,0);L 6G.3Z(1h,R)}})}l.fn.eR=q(f){B 6.19(q(){C p=6.1o;u(l.K(p,"2z")==\'6m\')p.1E.2z=\'7i\';C s=6.1E;s.2z=\'4l\';u(!f||f=="eS"){u(((1d(l.K(p,"2d"))-1d(l.K(6,"2d")))/2)>0)s.2x=((1d(l.K(p,"2d"))-1d(l.K(6,"2d")))/2)+"2s";L s.2x="0"}u(!f||f=="eT"){u(((1d(l.K(p,"1i"))-1d(l.K(6,"1i")))/2)>0){s.2F=((1d(l.K(p,"1i"))-1d(l.K(6,"1i")))/2)+"2s"}L{u(p.1J.2t()=="1K"){u(1h.65)C 4n=1h.65;L u(11.1K&&11.1K.2W)C 4n=11.1K.2W;s.2F=((4n-1d(l.K(6,"1i")))/2)+"2s"}L{s.2F="0"}}}})};l.4f=q(1g,G,V){u(T G!=\'1e\'){V=V||{};u(G===1b){G="";V.2w=-1}C 2w=\'\';u(V.2w){C 2q;u(T V.2w==\'1V\'&&V.2w.2y(/^[+-]?[0-9]+[eU]$/)!==1b){C 2y=V.2w.2y(/^([+-]?[0-9]+)([eV])$/);V.2w=1d(2y[0],10)*(({"Y":(60*60*24*bX),"M":(60*60*24*bX/12),"W":(60*60*24*7),"D":(60*60*24),"h":(60*60),"m":(60),"s":(1)}[2y[1]])||0);2q=1Q 5m();2q.bY(2q.7e()+V.2w*4w)}L u(T V.2w==\'3m\'){2q=1Q 5m();2q.bY(2q.7e()+V.2w*24*60*60*4w)}L u(T V.2w.bZ!=\'1e\')2q=V.2w;L 9F"eX \\"2w\\" 2k";2w=\'; 2w=\'+2q.bZ()}C 6h=V.6h?\'; 6h=\'+V.6h:\'\';C 63=V.63?\'; 63=\'+V.63:\'\';C 7O=V.7O?\'; 7O\':\'\';11.4f=[1g,\'=\',4T(G),2w,6h,63,7O].9v(\'\')}L{C 9A=1b;u(11.4f&&11.4f!=\'\'){C 9w=11.4f.4C(\';\');U(C i=0;i<9w.I;i++){C 4f=l.39(9w[i]);u(4f.6R(0,1g.I+1)==(1g+\'=\')){9A=eZ(4f.6R(1g.I+1));34}}}B 9A}};l.fn.c0=l.fn.1i;l.fn.c1=l.fn.2d;l.fn.1i=q(){u(6[0]==1h)B 3k.65||l.56&&11.3d.4n||11.1K.4n;u(6[0]==11)B 4k.7Q(11.1K.f0,11.1K.2W);B 6.c0(18[0])};l.fn.2d=q(){u(6[0]==1h)B 3k.8X||l.56&&11.3d.62||11.1K.62;u(6[0]==11)B 4k.7Q(11.1K.f1,11.1K.45);B 6.c1(18[0])};l.fn.65=q(){B 6[0]==1h||6[0]==11?6.1i():6.K(\'1G\')!=\'2n\'?6[0].2W-(1d(6.K("4q"))||0)-(1d(6.K("c2"))||0):6.1i()+(1d(6.K("9H"))||0)+(1d(6.K("c3"))||0)};l.fn.8X=q(){B 6[0]==1h||6[0]==11?6.2d():6.K(\'1G\')!=\'2n\'?6[0].45-(1d(6.K("4r"))||0)-(1d(6.K("c4"))||0):6.1i()+(1d(6.K("9G"))||0)+(1d(6.K("98"))||0)};l.fn.f2=q(){B 6[0]==1h||6[0]==11?6.1i():6.K(\'1G\')!=\'2n\'?6[0].2W:6.1i()+(1d(6.K("4q"))||0)+(1d(6.K("c2"))||0)+(1d(6.K("9H"))||0)+(1d(6.K("c3"))||0)};l.fn.f3=q(){B 6[0]==1h||6[0]==11?6.2d():6.K(\'1G\')!=\'2n\'?6[0].45:6.1i()+(1d(6.K("4r"))||0)+(1d(6.K("c4"))||0)+(1d(6.K("9G"))||0)+(1d(6.K("98"))||0)};l.fn.31=q(){u(6[0]==1h||6[0]==11)B 3k.8T||l.56&&11.3d.31||11.1K.31;B 6[0].31};l.fn.2Y=q(){u(6[0]==1h||6[0]==11)B 3k.8U||l.56&&11.3d.2Y||11.1K.2Y;B 6[0].2Y};l.fn.92=q(V,9I){C x=0,y=0,J=6[0],1s=6[0],6Q=1c,9D=1c,5R,6q=0,6p=0,V=l.1k({77:14,64:14,6w:1c,6o:14},V||{});do{x+=1s.8M||0;y+=1s.8P||0;u(l.1a.4d||l.1a.1C){C bt=1d(l.K(1s,\'4q\'))||0;C bl=1d(l.K(1s,\'4r\'))||0;x+=bl;y+=bt;u(l.1a.4d&&1s!=J&&l.K(1s,\'4y\')!=\'3t\'){x+=bl;y+=bt}u(l.K(1s,\'2z\')==\'4l\')6Q=14;u(l.K(1s,\'2z\')==\'7i\')9D=14}u(V.6o){5R=1s.c7;do{6q+=1s.31||0;6p+=1s.2Y||0;1s=1s.1o;u(l.1a.4d&&1s!=J&&1s!=5R&&l.K(1s,\'4y\')!=\'3t\'){x+=1d(l.K(1s,\'4r\'))||0;y+=1d(l.K(1s,\'4q\'))||0}}2M(5R&&1s!=5R)}L 1s=1s.c7;u(1s&&(1s.7T.2t()==\'1K\'||1s.7T.2t()==\'2i\')){u((l.1a.38||(l.1a.1C&&l.56))&&l.K(J,\'2z\')!=\'4l\'){x+=1d(l.K(1s,\'ca\'))||0;y+=1d(l.K(1s,\'cb\'))||0}u((l.1a.4d&&!6Q)||(l.1a.1C&&l.K(J,\'2z\')==\'6m\'&&(!9D||!6Q))){x+=1d(l.K(1s,\'4r\'))||0;y+=1d(l.K(1s,\'4q\'))||0}34}}2M(1s);u(!V.77){x-=1d(l.K(J,\'ca\'))||0;y-=1d(l.K(J,\'cb\'))||0}u(V.64&&(l.1a.38||l.1a.3K)){x+=1d(l.K(J,\'4r\'))||0;y+=1d(l.K(J,\'4q\'))||0}L u(!V.64&&!(l.1a.38||l.1a.3K)){x-=1d(l.K(J,\'4r\'))||0;y-=1d(l.K(J,\'4q\'))||0}u(V.6w){x+=1d(l.K(J,\'9G\'))||0;y+=1d(l.K(J,\'9H\'))||0}u(V.6o&&l.1a.3K&&l.K(J,\'1G\')==\'f6\'){6q-=J.31||0;6p-=J.2Y||0}C 4Q=V.6o?{2F:y-6p,2x:x-6q,2Y:6p,31:6q}:{2F:y,2x:x};u(9I){l.1k(9I,4Q);B 6}L{B 4Q}};(q($){$.fn.f7=l.fn.9J=q(s){u(!($.1a.1C&&T 5E==\'q\'))B 6;s=$.1k({2F:\'3X\',2x:\'3X\',2d:\'3X\',1i:\'3X\',1L:14,3B:\'f8:1c;\'},s||{});C 16=q(n){B n&&n.22==5O?n+\'2s\':n},2i=\'<ch 4F="9J"f9="0"fa="-1"3B="\'+s.3B+\'"\'+\'1E="1G:41;2z:4l;z-2Z:-1;\'+(s.1L!==1c?\'1z:fb(fc=\\\'0\\\');\':\'\')+\'2F:\'+(s.2F==\'3X\'?\'7Z(((1d(6.1o.4K.4q)||0)*-1)+\\\'2s\\\')\':16(s.2F))+\';\'+\'2x:\'+(s.2x==\'3X\'?\'7Z(((1d(6.1o.4K.4r)||0)*-1)+\\\'2s\\\')\':16(s.2x))+\';\'+\'2d:\'+(s.2d==\'3X\'?\'7Z(6.1o.45+\\\'2s\\\')\':16(s.2d))+\';\'+\'1i:\'+(s.1i==\'3X\'?\'7Z(6.1o.2W+\\\'2s\\\')\':16(s.1i))+\';\'+\'"/>\';B 6.19(q(){u(!$(\'ch.9J\',6)[0])6.5A(11.9K(2i),6.25)})}})(l);(q($){$.1k({1T:{cj:0}});$.fn.1T=q(2N,F){u(T 2N==\'40\')F=2N;F=$.1k({2N:(2N&&T 2N==\'3m\'&&2N>0)?--2N:0,3q:1b,3y:$.5M?14:1c,4D:1c,ci:\'4D-3V-\',9Z:1b,9Y:1b,a0:1b,a1:1b,9X:\'b3\',cr:1b,cs:1b,cm:1c,6x:1b,6z:1b,5J:1b,83:\'1T-2m\',4h:\'1T-3J\',6y:\'1T-3q\',6s:\'1T-1R\',8l:\'1T-1D\',8q:\'1T-ff\',ck:\'26\'},F||{});$.1a.85=$.1a.85||$.1a.1C&&T 5E==\'q\';q 9M(){a4(0,0)}B 6.19(q(){C 1R=6;C 2m=$(\'88.\'+F.83,1R);2m=2m.4N()&&2m||$(\'>88:eq(0)\',1R);C 1T=$(\'a\',2m);u(F.4D){C 8o={};1T.19(q(){$(6).2i(\'<3Q>\'+$(6).2i()+\'</3Q>\');C Q=F.ci+(++$.1T.cj);C 1Z=\'#\'+Q;8o[1Z]=6.46;6.46=1Z;$(\'<26 Q="\'+Q+\'" 4F="\'+F.6s+\'"></26>\').5N(1R)})}C 2C=$(\'26.\'+F.6s,1R);2C=2C.4N()&&2C||$(\'>\'+F.ck,1R);2m.3a(\'.\'+F.83)||2m.2L(F.83);2C.19(q(){C $$=$(6);$$.3a(\'.\'+F.6s)||$$.2L(F.6s)});C 9L=$(\'1Y\',2m).2Z($(\'1Y.\'+F.4h,2m)[0]);u(9L>=0){F.2N=9L}u(5l.1Z){1T.19(q(i){u(6.1Z==5l.1Z){F.2N=i;u(($.1a.1C||$.1a.3K)&&!F.4D){C 1S=$(5l.1Z);C 8j=1S.1v(\'Q\');1S.1v(\'Q\',\'\');3j(q(){1S.1v(\'Q\',8j)},fg)}9M();B 1c}})}u($.1a.1C){9M()}2C.1z(\':eq(\'+F.2N+\')\').1F().3g().2o(\':eq(\'+F.2N+\')\').2L(F.8l);u(!F.4D){$(\'1Y\',2m).3i(F.4h).eq(F.2N).2L(F.4h)}u(F.cm){C 9U=q(2R){C 9R=$.4E(2C.2O(),q(el){C h,9P=$(el);u(2R){u($.1a.85){el.1E.fh(\'co\');el.1E.1i=\'\';el.87=1b}h=9P.K({\'4G-1i\':\'\'}).1i()}L{h=9P.1i()}B h}).9Q(q(a,b){B b-a});u($.1a.85){2C.19(q(){6.87=9R[0]+\'2s\';6.1E.fj(\'co\',\'6.1E.1i = 6.87 ? 6.87 : "52"\')})}L{2C.K({\'4G-1i\':9R[0]+\'2s\'})}};9U();C 8b=1R.45;C 9V=1R.2W;C 9T=$(\'#1T-cp-9S-4N\').2O(0)||$(\'<3Q Q="1T-cp-9S-4N">M</3Q>\').K({1G:\'41\',2z:\'4l\',8a:\'2E\'}).5N(11.1K).2O(0);C 8d=9T.2W;6u(q(){C 8c=1R.45;C 9W=1R.2W;C 8e=9T.2W;u(9W>9V||8c!=8b||8e!=8d){9U((8c>8b||8e<8d));8b=8c;9V=9W;8d=8e}},50)}C 4V={},5H={},8m=F.cr||F.9X,a3=F.cs||F.9X;u(F.9Y||F.9Z){u(F.9Y){4V[\'1i\']=\'1F\';5H[\'1i\']=\'1D\'}u(F.9Z){4V[\'1L\']=\'1F\';5H[\'1L\']=\'1D\'}}L{u(F.a0){4V=F.a0}L{4V[\'4G-2d\']=0;8m=F.3y?50:1}u(F.a1){5H=F.a1}L{5H[\'4G-2d\']=0;a3=F.3y?50:1}}C 6x=F.6x,6z=F.6z,5J=F.5J;1T.2P(\'a9\',q(){C 1Y=$(6.1o);u(1R.6B||1Y.3a(\'.\'+F.4h)||1Y.3a(\'.\'+F.6y)){B 1c}C 1Z=6.1Z;u($.1a.1C){$(6).2f(\'49\');u(F.3y){$.5M.4s(1Z);5l.1Z=1Z.1N(\'#\',\'\')}}L u($.1a.38){C cv=$(\'<1X cu="\'+1Z+\'"><26><44 H="3S" G="h" /></26></1X>\').2O(0);cv.3S();$(6).2f(\'49\');u(F.3y){$.5M.4s(1Z)}}L{u(F.3y){5l.1Z=1Z.1N(\'#\',\'\')}L{$(6).2f(\'49\')}}});1T.2P(\'8s\',q(){C 1Y=$(6.1o);u($.1a.38){1Y.30({1L:0},1,q(){1Y.K({1L:\'\'})})}1Y.2L(F.6y)});u(F.3q&&F.3q.I){U(C i=0,k=F.3q.I;i<k;i++){1T.eq(--F.3q[i]).2f(\'8s\').3g()}};1T.2P(\'aa\',q(){C 1Y=$(6.1o);1Y.3i(F.6y);u($.1a.38){1Y.30({1L:1},1,q(){1Y.K({1L:\'\'})})}});1T.2P(\'49\',q(e){C 6F=e.a2;C 4A=6,1Y=$(6.1o),1S=$(6.1Z),2r=2C.1z(\':3t\');u((T 6x==\'q\'&&6x(6,1S[0],2r[0])==1c&&6F)||1R.6B||1Y.3a(\'.\'+F.4h)||1Y.3a(\'.\'+F.6y)){6.8r();B 1c}1R[\'6B\']=14;u(1S.4N()){u($.1a.1C&&F.3y){C 8j=6.1Z.1N(\'#\',\'\');1S.1v(\'Q\',\'\');3j(q(){1S.1v(\'Q\',8j)},0)}q 8p(){u(F.3y&&6F){$.5M.4s(4A.1Z)}2r.30(5H,a3,q(){$(4A.1o).2L(F.4h).cA().3i(F.4h);u(T 6z==\'q\'){6z(4A,1S[0],2r[0])}2r.2L(F.8l).K({1G:\'\',4y:\'\',1i:\'\',1L:\'\'});1S.3i(F.8l).30(4V,8m,q(){1S.K({4y:\'\',1i:\'\',1L:\'\'});u($.1a.1C){2r[0].1E.1z=\'\';1S[0].1E.1z=\'\'}u(T 5J==\'q\'){5J(4A,1S[0],2r[0])}1R.6B=1b})})}u(!F.4D){8p()}L{C $$=$(6),3Q=$(\'3Q\',6)[0],1M=3Q.3R;$$.2L(F.8q);3Q.3R=\'cB&#cC;\';3j(q(){$(4A.1Z).4z(8o[4A.1Z],q(){8p();3Q.3R=1M;$$.3i(F.8q)})},0)}}L{7K(\'cE 3a 9g cF 1R.\')}C a5=1h.8T||11.3d&&11.3d.31||11.1K.31||0;C a6=1h.8U||11.3d&&11.3d.2Y||11.1K.2Y||0;3j(q(){1h.a4(a5,a6)},0);6.8r();B F.3y&&!!6F});u(F.4D){1T.eq(F.2N).2f(\'49\').3g()}u(F.3y){$.5M.cG(q(){1T.eq(F.2N).2f(\'49\').3g()})}})};C 7H=[\'a9\',\'8s\',\'aa\'];U(C i=0;i<7H.I;i++){$.fn[7H[i]]=(q(cf){B q(3V){B 6.19(q(){C 2m=$(\'88.1T-2m\',6);2m=2m.4N()&&2m||$(\'>88:eq(0)\',6);C a;u(!3V||T 3V==\'3m\'){a=$(\'1Y>a\',2m).eq((3V&&3V>0&&3V-1||0))}L u(T 3V==\'1V\'){a=$(\'1Y>a[@46$="#\'+3V+\'"]\',2m)}a.2f(cf)})}})(7H[i])}})(l);l.1k(l.fn,{b2:q(V){C N=1Q l.N(V,6);N.1w=6.3p(":44:2o(:3S):2o(:2R)").4R(q(){N.4t=6});u(N.F.7l){6.3S(q(S){u(N.F.3o)S.3W();B N.1X()})}u(N.F.S){N.1w.2P(N.F.S,q(){N.E(6)})}B N},1y:q(t){B 6.7f(l.3Y(6.2O(),t))},5G:q(Q){B 6.1z("[@U=\'"+Q+"\']")}});l.1k(l.2p[":"],{b8:"!l.39(a.G)",ba:"!!l.39(a.G)"});l.N=q(V,1X){6.F=l.1k({},l.N.4b,V);6.5I=1X[0];6.4g=6.F.5y;6.7N=6.4g.I&&6.4g||1X;6.2C=6.F.7k.2e(6.F.5y);6.2R()};l.1k(l.N,{4b:{3z:{},3f:"1n",80:14,7k:l([]),5y:l([]),7l:14},bc:q(F){l.1k(l.N.4b,F)},3z:{1m:"bd bf 3a 1m.",6M:"1H 1I a G 9g bi bk {0} 5r.",7Y:"1H 1I a G bm at bo {0} 5r.",7R:"1H 1I a G 7p {0} 7C {1} 5r bq.",5t:"1H 1I a 2U 5t bs.",1t:"1H 1I a 2U bu.",2q:"1H 1I a 2U 2q.",6U:"1H 1I a 2U 2q (bv).",6X:"7t 7r 7v 5o bx¿½bz bB 5o.",3m:"1H 1I a 2U 3m.",7g:"7t 7r 7v bJ bL 5o.",5b:"1H 1I 9o 5b",6T:"1H 1I 7U bN G bP.",7D:"1H 1I a G 7p {0} 7C {1}.",6N:"1H 1I a G bS 7I 4M 7J 3M {0}.",7L:"1H 1I a G bW 7I 4M 7J 3M {0}."},5B:{1X:q(){6.5d();U(C i=0,E;E=6.1w[i++];){6.4e(E)}B 6.2U()},E:q(E){6.72(E);6.4e(E);6.3A()},3A:q(2T){u(2T)l.1k(6.2B,2T);6.F.3A?6.F.3A(6.2B,6):6.86()},5e:q(){u(l.fn.5e)l(6.5I).5e();6.5d();6.5C();6.1w.3i(6.F.3f)},3I:q(7m){B l(7m)[0]},2T:q(){B l("8h."+6.F.3f,6.7N)},2R:q(E){6.2B={};6.1S=$([]);6.2r=$([])},5d:q(){6.2R();6.2r=6.2T().1y(6.2C);6.1S.1y(6.2C)},72:q(E){6.2R();6.2r=6.2T().5G(6.48(6.3I(E)))},4e:q(E){E=6.3I(E);l(E).3i(6.F.3f);C 2a=6.2a(E);U(C i=0,1P;1P=2a[i++];){3G{C 2b=l.N.1l[1P.2c](l.39(E.G),E,1P.4W);u(2b===-1)34;u(!2b){l(E).2L(6.F.3f);6.7V(1P,E);34}}3F(e){6.F.3o&&1h.2V&&2V.1n("c5 c6 c8 c9 E "+E.Q+", 4e 7U \'"+1P.2c+"\' 2c");9F e}}},21:q(Q,1P){C m=6.F.3z[Q];B m&&(m.22==2I?m:m[1P.2c])},7V:q(1P,E){C Q=6.48(E),O=1P.4W;6.2B[Q]=(E.3x||6.21(Q,1P)||l.N.3z[1P.2c]||"<7X>cc: cd 21 ce U "+Q+"</7X>").1N("{0}",(O.22==3L?O[0]:O)||"").1N("{1}",O[1]||"")},2U:q(){u(6.82()){6.3A();B 1c}L{6.5C();u(6.F.81){6.F.81(6.5I);B 1c}B 14}},82:q(){C 4U=0;l.19(6.2B,q(){4U++});B 4U},5C:q(){6.3c("8f")},3c:q(5x){C 3k=6;q 4p(){B 3k["3M"+5x]}u(6.F.4x){4p().1y(4p().6t(6.F.4x))}4p()[5x.2t()]();B 6},86:q(){C 2D=14;U(C 4v 29 6.2B){u(2D&&6.F.80){u(6.4t&&6.2B[6.4t.Q])6.4t.4R();L{3G{C E=l("#"+4v);u(E.I)E[0].4R()}3F(e){6.F.3o&&1h.2V&&2V.1n(e)}}2D=1c}6.8g(4v,6.2B[4v])}6.2r=6.2r.2o(6.1S);6.3c("8f").3c("cw")},8g:q(Q,21){C 1n=6.2T().5G(Q);u(1n.I){u(1n.1v("8k")){1n.2i(21)}}L{1n=l("<8h>").1v({"U":Q,8k:14}).2L(6.F.3f).2i(21);u(6.F.4x){1n=1n.1D().1F().4i("<"+6.F.4x+">").1s()}u(!6.4g.3H(1n).I)6.F.6A?6.F.6A(1n,l("#"+Q)):1n.8n("#"+Q)}6.1S.1y(1n)},2a:q(E){u(!6.R(E))B[];C 2a=[];l.19(6.R(E),q(2S,G){2a[2a.I]={2c:2S,4W:G}});B 2a},R:q(E){B 6.F.2a?6.F.2a[6.48(E)]:6.F.6D?l(E).R()[6.F.6D]:l(E).R()},48:q(E){C Q=(/3U|4c/i.1q(E.H))?E.1g:E.Q;u(!Q){C 4X=E.1X.Q,4Y=/[^a-a7-2v-9\\-5K]/g;Q=E.Q=(4X?4X.1N(4Y,""):"")+E.1g.1N(4Y,"")}B Q}},3C:q(G,E){5c(E.1J.2t()){35\'3D\':B l("2k:3J",E).I;35\'44\':u(/3U|4c/i.1q(E.H))B l(E.1X||11).3p(\'[@1g="\'+E.1g+\'"]:4O\').I}B G.I},8i:q(O,E){B 6.5v[T O]?6.5v[T O](O,E):14},5v:{"6c":q(O,E){B O},"1V":q(O,E){B!!l(O,E.1X).I},"q":q(O,E){B O(E)}},1l:{1m:q(G,E,O){u(!l.N.8i(O,E))B-1;5c(E.1J.2t()){35\'3D\':C V=l("2k:3J",E);B V.I>0&&(E.H=="3D-ag"||V[0].G.I>0);35\'44\':5c(E.H.2t()){35\'4c\':35\'3U\':B l.N.3C(G,E)>0}an:B G.I>0}},cl:q(G,E,O){B!l.N.1l.1m(G,E)||O.1q(G)},7Y:q(G,E,O){C I=l.N.3C(G,E);B!l.N.1l.1m(G,E)||I>=O},6M:q(G,E,O){C I=l.N.3C(G,E);B!l.N.1l.1m(G,E)||I<=O},7R:q(G,E,O){C I=l.N.3C(G,E);B!l.N.1l.1m(G,E)||(I>=O[0]&&I<=O[1])},7L:q(G,E,O){B!l.N.1l.1m(G,E)||G>=O},6N:q(G,E,O){B!l.N.1l.1m(G,E)||G<=O},7D:q(G,E,O){B!l.N.1l.1m(G,E)||(G>=O[0]&&G<=O[1])},5t:q(G,E){B!l.N.1l.1m(G,E)||/^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$/i.1q(G)},1t:q(G,E){B!l.N.1l.1m(G,E)||/^(aA?|aC):\\/\\/[A-2v-9](\\.?[A-2v-5D„1xœ1x–][A-2v-5j\\-1x„1xœ1x–]*)*(\\/([A-2v-5D„1xœ1x–][A-2v-5j\\-\\.1x„1xœ1x–]*)?)*(\\?([A-2v-5D„1xœ1x–][A-2v-5j\\-\\.%\\+=&1x„1xœ1x–]*)?)?$/i.1q(G)},2q:q(G,E){B!l.N.1l.1m(G,E)||!/aK|8R/.1q(1Q 5m(G))},6U:q(G,E){B!l.N.1l.1m(G,E)||/^\\d{4}[/-]\\d{1,2}[/-]\\d{1,2}$/.1q(G)},6X:q(G,E){B!l.N.1l.1m(G,E)||/^\\d\\d?\\.\\d\\d?\\.\\d\\d\\d?\\d?$/.1q(G)},3m:q(G,E){B!l.N.1l.1m(G,E)||/^-?[,0-9]+(\\.\\d+)?$/.1q(G)},7g:q(G,E){B!l.N.1l.1m(G,E)||/^-?[\\.0-9]+(,\\d+)?$/.1q(G)},5b:q(G,E){B!l.N.1l.1m(G,E)||/^\\d+$/.1q(G)},6T:q(G,E,O){B G==l(""+O).1W()}},aV:q(1g,2c,21){l.N.1l[1g]=2c;l.N.3z[1g]=21}});(q(){q 2e(1g,2c){u(!3L.5B[1g]){3L.5B[1g]=2c}};2e("cQ",q(1B,27){27=27||1h;U(C i=0;i<6.I;i++)1B.3Z(27,6[i],i,6)});2e("cS",q(1B,27){27=27||1h;U(C i=0;i<6.I;i++)u(!1B.3Z(27,6[i],i,6))B 1c;B 14});2e("cT",q(1B,27){27=27||1h;U(C i=0;i<6.I;i++)u(1B.3Z(27,6[i],i,6))B 14;B 1c});2e("4E",q(1B,27){27=27||1h;C r=[];U(C i=0;i<6.I;i++)r[r.I]=1B.3Z(27,6[i],i,6);B r});2e("1z",q(1B,27){27=27||1h;C r=[];U(C i=0;i<6.I;i++)u(1B.3Z(27,6[i],i,6))r[r.I]=6[i];B r});2e("1O",q(ai,92){U(C i=92||0;i<6.I;i++)u(6[i]===ai)B i;B-1});2e("8A",q(){B 6.1z(q(E,2Z,8B){B 8B.1O(E)>=2Z})})})();(q($){C 2h,5U,3s,6O,23,91,5Q;$.fn.aX=q(F){F=$.1k({},18.d0.4b,F);u(!2h){2h=$(\'<26 Q="d1"><8C></8C><p 4F="1K"></p><p 4F="1t"></p></26>\').1D().K({2z:\'4l\',d3:"d4"}).5N(\'1K\');5U=$(\'8C\',2h);3s=$(\'p.1K\',2h);6O=$(\'p.1t\',2h)}$(6).1z(\'[@3x]\').19(q(){6.4j=F}).2P("51",ao).2P(F.S,6L);B 6};q 6L(S){u(6.4j.94)5Q=3j(1F,6.4j.94);L 1F();u(6.4j.b0)$(\'1K\').2P(\'9b\',4s);4s(S);$(6).2P(\'76\',1D)}q ao(){u(6==23||!6.3x)B;23=6;C 6k=$(6),F=6.4j;C 3x=91=6k.1v(\'3x\');6k.1v(\'3x\',\'\');u(F.cn){5U.1D();3s.2i(F.cn.3Z(6)).1F()}L u(F.95){C 9E=3x.4C(F.95);5U.2i(9E.7W()).1F();3s.6r();U(C i=0,9z;9z=9E[i];i++){u(i>0)3s.3H("<br/>");3s.3H(9z)}u(3s.2i())3s.1F();L 3s.1D()}L{5U.2i(3x);3s.1D()}C 46=(6k.1v(\'46\')||6k.1v(\'3B\'));u(F.b1&&46)6O.2i(46.1N(\'dn://\',\'\')).1F();L 6O.1D();u(F.69){2h.2L(F.69)}u(F.97&&$.1a.1C){2h.19(q(){u(6.4K.7a!=\'2n\'){C 4J=6.4K.7a;4J=4J.6R(5,4J.I-2);$(6).K({\'7a\':\'2n\',\'1z\':"ds:dt.az.dv(aB=14, dw=dy, 3B=\'"+4J+"\')"})}})}}q 1F(){5Q=1b;2h.1F();4s()}q 4s(S){u(23==1b){$(\'1K\').75(\'9b\',4s);B}C 2x=2h[0].8M;C 2F=2h[0].8P;u(S){2x=S.8L+15;2F=S.aH+15;2h.K({2x:2x+\'2s\',2F:2F+\'2s\'})}C v=aU(),h=2h[0];u(v.x+v.cx<h.8M+h.45){2x-=h.45+20;2h.K({2x:2x+\'2s\'})}u(v.y+v.cy<h.8P+h.2W){2F-=h.2W+20;2h.K({2F:2F+\'2s\'})}}q aU(){C e=11.3d||{},b=11.1K||{},w=1h;q 4G(){C v=dG;U(C i=0;i<18.I;i++){C n=18[i];u(n&&n<v)v=n}B v}B{x:w.8T||e.31||b.31||0,y:w.8U||e.2Y||b.2Y||0,cx:4G(e.62,b.62,w.8X),cy:4G(e.4n,b.4n,w.65)}}q 1D(){u(5Q)am(5Q);23=1b;2h.1D();u(6.4j.69){2h.3i(6.4j.69)}$(6).1v(\'3x\',91).75(\'76\',1D);u(6.4j.97&&$.1a.1C){2h.19(q(){$(6).K({\'1z\':\'\',7a:\'\'})})}}$.fn.aX.4b={94:ea,S:"51",b0:1c,b1:14,95:1b,69:1b,97:1c}})(l);l.1k(l.fn,{b2:q(V){C N=1Q l.N(V,6);N.1w=6.3p(":44:2o(:3S):2o(:2R)").4R(q(){N.4t=6});u(N.F.7l){6.3S(q(S){u(N.F.3o)S.3W();B N.1X()})}u(N.F.S){N.1w.2P(N.F.S,q(){N.E(6)})}B N},1y:q(t){B 6.7f(l.3Y(6.2O(),t))},5G:q(Q){B 6.1z("[@U=\'"+Q+"\']")}});l.1k(l.2p[":"],{b8:"!l.39(a.G)",ba:"!!l.39(a.G)"});l.N=q(V,1X){6.F=l.1k({},l.N.4b,V);6.5I=1X[0];6.4g=6.F.5y;6.7N=6.4g.I&&6.4g||1X;6.2C=6.F.7k.2e(6.F.5y);6.2R()};l.1k(l.N,{4b:{3z:{},3f:"1n",80:14,7k:l([]),5y:l([]),7l:14},bc:q(F){l.1k(l.N.4b,F)},3z:{1m:"bd bf 3a 1m.",6M:"1H 1I a G 9g bi bk {0} 5r.",7Y:"1H 1I a G bm at bo {0} 5r.",7R:"1H 1I a G 7p {0} 7C {1} 5r bq.",5t:"1H 1I a 2U 5t bs.",1t:"1H 1I a 2U bu.",2q:"1H 1I a 2U 2q.",6U:"1H 1I a 2U 2q (bv).",6X:"7t 7r 7v 5o bx¿½bz bB 5o.",3m:"1H 1I a 2U 3m.",7g:"7t 7r 7v bJ bL 5o.",5b:"1H 1I 9o 5b",6T:"1H 1I 7U bN G bP.",7D:"1H 1I a G 7p {0} 7C {1}.",6N:"1H 1I a G bS 7I 4M 7J 3M {0}.",7L:"1H 1I a G bW 7I 4M 7J 3M {0}."},5B:{1X:q(){6.5d();U(C i=0,E;E=6.1w[i++];){6.4e(E)}B 6.2U()},E:q(E){6.72(E);6.4e(E);6.3A()},3A:q(2T){u(2T)l.1k(6.2B,2T);6.F.3A?6.F.3A(6.2B,6):6.86()},5e:q(){u(l.fn.5e)l(6.5I).5e();6.5d();6.5C();6.1w.3i(6.F.3f)},3I:q(7m){B l(7m)[0]},2T:q(){B l("8h."+6.F.3f,6.7N)},2R:q(E){6.2B={};6.1S=$([]);6.2r=$([])},5d:q(){6.2R();6.2r=6.2T().1y(6.2C);6.1S.1y(6.2C)},72:q(E){6.2R();6.2r=6.2T().5G(6.48(6.3I(E)))},4e:q(E){E=6.3I(E);l(E).3i(6.F.3f);C 2a=6.2a(E);U(C i=0,1P;1P=2a[i++];){3G{C 2b=l.N.1l[1P.2c](l.39(E.G),E,1P.4W);u(2b===-1)34;u(!2b){l(E).2L(6.F.3f);6.7V(1P,E);34}}3F(e){6.F.3o&&1h.2V&&2V.1n("c5 c6 c8 c9 E "+E.Q+", 4e 7U \'"+1P.2c+"\' 2c");9F e}}},21:q(Q,1P){C m=6.F.3z[Q];B m&&(m.22==2I?m:m[1P.2c])},7V:q(1P,E){C Q=6.48(E),O=1P.4W;6.2B[Q]=(E.3x||6.21(Q,1P)||l.N.3z[1P.2c]||"<7X>cc: cd 21 ce U "+Q+"</7X>").1N("{0}",(O.22==3L?O[0]:O)||"").1N("{1}",O[1]||"")},2U:q(){u(6.82()){6.3A();B 1c}L{6.5C();u(6.F.81){6.F.81(6.5I);B 1c}B 14}},82:q(){C 4U=0;l.19(6.2B,q(){4U++});B 4U},5C:q(){6.3c("8f")},3c:q(5x){C 3k=6;q 4p(){B 3k["3M"+5x]}u(6.F.4x){4p().1y(4p().6t(6.F.4x))}4p()[5x.2t()]();B 6},86:q(){C 2D=14;U(C 4v 29 6.2B){u(2D&&6.F.80){u(6.4t&&6.2B[6.4t.Q])6.4t.4R();L{3G{C E=l("#"+4v);u(E.I)E[0].4R()}3F(e){6.F.3o&&1h.2V&&2V.1n(e)}}2D=1c}6.8g(4v,6.2B[4v])}6.2r=6.2r.2o(6.1S);6.3c("8f").3c("cw")},8g:q(Q,21){C 1n=6.2T().5G(Q);u(1n.I){u(1n.1v("8k")){1n.2i(21)}}L{1n=l("<8h>").1v({"U":Q,8k:14}).2L(6.F.3f).2i(21);u(6.F.4x){1n=1n.1D().1F().4i("<"+6.F.4x+">").1s()}u(!6.4g.3H(1n).I)6.F.6A?6.F.6A(1n,l("#"+Q)):1n.8n("#"+Q)}6.1S.1y(1n)},2a:q(E){u(!6.R(E))B[];C 2a=[];l.19(6.R(E),q(2S,G){2a[2a.I]={2c:2S,4W:G}});B 2a},R:q(E){B 6.F.2a?6.F.2a[6.48(E)]:6.F.6D?l(E).R()[6.F.6D]:l(E).R()},48:q(E){C Q=(/3U|4c/i.1q(E.H))?E.1g:E.Q;u(!Q){C 4X=E.1X.Q,4Y=/[^a-a7-2v-9\\-5K]/g;Q=E.Q=(4X?4X.1N(4Y,""):"")+E.1g.1N(4Y,"")}B Q}},3C:q(G,E){5c(E.1J.2t()){35\'3D\':B l("2k:3J",E).I;35\'44\':u(/3U|4c/i.1q(E.H))B l(E.1X||11).3p(\'[@1g="\'+E.1g+\'"]:4O\').I}B G.I},8i:q(O,E){B 6.5v[T O]?6.5v[T O](O,E):14},5v:{"6c":q(O,E){B O},"1V":q(O,E){B!!l(O,E.1X).I},"q":q(O,E){B O(E)}},1l:{1m:q(G,E,O){u(!l.N.8i(O,E))B-1;5c(E.1J.2t()){35\'3D\':C V=l("2k:3J",E);B V.I>0&&(E.H=="3D-ag"||V[0].G.I>0);35\'44\':5c(E.H.2t()){35\'4c\':35\'3U\':B l.N.3C(G,E)>0}an:B G.I>0}},cl:q(G,E,O){B!l.N.1l.1m(G,E)||O.1q(G)},7Y:q(G,E,O){C I=l.N.3C(G,E);B!l.N.1l.1m(G,E)||I>=O},6M:q(G,E,O){C I=l.N.3C(G,E);B!l.N.1l.1m(G,E)||I<=O},7R:q(G,E,O){C I=l.N.3C(G,E);B!l.N.1l.1m(G,E)||(I>=O[0]&&I<=O[1])},7L:q(G,E,O){B!l.N.1l.1m(G,E)||G>=O},6N:q(G,E,O){B!l.N.1l.1m(G,E)||G<=O},7D:q(G,E,O){B!l.N.1l.1m(G,E)||(G>=O[0]&&G<=O[1])},5t:q(G,E){B!l.N.1l.1m(G,E)||/^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$/i.1q(G)},1t:q(G,E){B!l.N.1l.1m(G,E)||/^(aA?|aC):\\/\\/[A-2v-9](\\.?[A-2v-5D„1xœ1x–][A-2v-5j\\-1x„1xœ1x–]*)*(\\/([A-2v-5D„1xœ1x–][A-2v-5j\\-\\.1x„1xœ1x–]*)?)*(\\?([A-2v-5D„1xœ1x–][A-2v-5j\\-\\.%\\+=&1x„1xœ1x–]*)?)?$/i.1q(G)},2q:q(G,E){B!l.N.1l.1m(G,E)||!/aK|8R/.1q(1Q 5m(G))},6U:q(G,E){B!l.N.1l.1m(G,E)||/^\\d{4}[/-]\\d{1,2}[/-]\\d{1,2}$/.1q(G)},6X:q(G,E){B!l.N.1l.1m(G,E)||/^\\d\\d?\\.\\d\\d?\\.\\d\\d\\d?\\d?$/.1q(G)},3m:q(G,E){B!l.N.1l.1m(G,E)||/^-?[,0-9]+(\\.\\d+)?$/.1q(G)},7g:q(G,E){B!l.N.1l.1m(G,E)||/^-?[\\.0-9]+(,\\d+)?$/.1q(G)},5b:q(G,E){B!l.N.1l.1m(G,E)||/^\\d+$/.1q(G)},6T:q(G,E,O){B G==l(""+O).1W()}},aV:q(1g,2c,21){l.N.1l[1g]=2c;l.N.3z[1g]=21}});(q($){$.fn.2g=q(V){B 6.19(q(){$.2g(6,V)})};$.2g=q(1R,V){C F={\'5k\':1b,\'2g\':\'6j\',\'32\':ec,\'7z\':\'9r\',\'1r\':\'b3\',\'4F\':\'2g\',\'1i\':\'3X\'};u(V)$.1k(F,V);u(F.5k===1b)C 1w=$(1R).5k();L C 1w=$(1R).5k(F.5k);u(1w.I>1){$(1R).K(\'2z\',\'7i\');$(1R).K(\'1i\',F["1i"]);$(1R).2L(F["4F"]);U(C i=0;i<1w.I;i++){$(1w[i]).K(\'z-2Z\',2I(1w.I-i));$(1w[i]).K(\'2z\',\'4l\');$(1w[i]).1D()};u(F["2g"]=="6j"){3j(q(){$.2g.6J(1w,F,1,0)},F.32);$(1w[0]).1F()}L u(F["2g"]=="5w"){3j(q(){do{23=4k.bV(4k.5w()*1w.I)}2M(23==0)$.2g.6J(1w,F,23,0)},F.32);$(1w[0]).1F()}L 7K(\'l: 2g: 9u "2g" 9x 9B be "6j" 4M "5w"\')}};$.2g.6J=q(1w,F,23,2u){u(F["7z"]==\'bQ\'){$(1w[2u]).bA(F.1r,$(1w[23]).bD(F.1r))}L u(F["7z"]==\'9r\'){$(1w[2u]).bH(F.1r);$(1w[23]).bM(F.1r)}L 7K(\'l: 2g: 9u "7z" 9x 9B be "bQ" 4M "9r"\');u(F["2g"]=="6j"){u((23+1)<1w.I){23=23+1;2u=23-1}L{23=0;2u=1w.I-1}}L u(F["2g"]=="5w"){2u=23;2M(23==2u)23=4k.bV(4k.5w()*1w.I)}L 7K(\'l: 2g: 9u "2g" 9x 9B be "6j" 4M "5w"\');3j((q(){$.2g.6J(1w,F,23,2u)}),F.32)}})(l);(q($){$.3r=q(){6.42={};B};$.3r.5B={5V:q(){C P={"Q":1b,"4S":4w,"6H":1c,"6E":1c,"17":1b,"36":q(){},"28":[]};q 5L(fn){B(!!fn&&T fn!="1V"&&T fn[0]=="1e"&&4u("q","i").1q(fn+""))};C i=0;C 9N=1c;u(T 18[i]=="40"&&18.I>1){9N=14;i++}u(T 18[i]=="40"){U(C 2k 29 18[i])u(T P[2k]!="1e")P[2k]=18[i][2k];i++}u(T 18[i]=="3m"||(T 18[i]=="1V"&&18[i].2y(4u("^[0-9]+[cq]$"))))P["4S"]=18[i++];u(T 18[i]=="6c")P["6H"]=18[i++];u(T 18[i]=="6c")P["6E"]=18[i++];u(T 18[i]=="40"&&T 18[i+1]=="1V"&&5L(18[i][18[i+1]])){P["17"]=18[i++];P["36"]=18[i++]}L u(T 18[i]!="1e"&&(5L(18[i])||T 18[i]=="1V"))P["36"]=18[i++];2M(T 18[i]!="1e")P["28"].1y(18[i++]);u(9N){u(T 18[1]=="40"){U(C 2k 29 18[0])u(T P[2k]!="1e"&&T 18[1][2k]=="1e")P[2k]=18[0][2k]}L{U(C 2k 29 18[0])u(T P[2k]!="1e")P[2k]=18[0][2k]}i++}P["71"]=6;P["89"]=1b;C 2y=2I(P["4S"]).2y(4u("^([0-9]+)([cq])$"));u(2y&&2y[0]!="1e"&&2y[1]!="1e")P["4S"]=2I(1d(2y[1])*{s:4w,m:4w*60,h:4w*60*60,d:4w*60*60*24,w:4w*60*60*24*7}[2y[2]]);u(P["Q"]==1b)P["Q"]=(2I(P["6H"])+":"+2I(P["6E"])+":"+2I(P["4S"])+":"+2I(P["17"])+":"+2I(P["36"])+":"+2I(P["28"]));u(P["6E"])u(T 6.42[P["Q"]]!="1e")B 6.42[P["Q"]];u(!5L(P["36"])){u(P["17"]!=1b&&T P["17"]=="40"&&T P["36"]=="1V"&&5L(P["17"][P["36"]]))P["36"]=P["17"][P["36"]];L P["36"]=6G("q () { "+P["36"]+" }")}P["89"]=6.6I(P);6.42[P["Q"]]=P;B P},8F:q(P){u(T P=="1V")P=6.42[P];P["89"]=6.6I(P);B P},6I:q(P){C aS=q(){C 17=(P["17"]!=1b?P["17"]:P);(P["36"]).1A(17,P["28"]);u(T(P["71"]).42[P["Q"]]!="1e"&&P["6H"])(P["71"]).6I(P);L 66(P["71"]).42[P["Q"]]};B 3j(aS,P["4S"])},8J:q(P){u(T P=="1V")P=6.42[P];u(T P=="40"){am(P["89"]);66 6.42[P["Q"]]}}};$.1k({3r$:1Q $.3r(),5V:q(){B $.3r$.5V.1A($.3r$,18)},8F:q(){B $.3r$.8F.1A($.3r$,18)},8J:q(){B $.3r$.8J.1A($.3r$,18)}});$.fn.1k({5V:q(){C a=[{}];U(C i=0;i<18.I;i++)a.1y(18[i]);B 6.19(q(){a[0]={"Q":6,"17":6};B $.5V.1A($,a)})}})})(l);(q($){$.1k({5u$:1b,3o:q(aO){C aR=($.5u$==14?14:1c);$.5u$=(aO?14:1c);B aR},6b:q(21){u($.5u$==14)2V.3o(21)}});$.fn.1k({6b:q(21){u($.5u$==14){B 6.19(q(){u(T 21!=="1e")$.6b(21);$.6b(6)})}}});$(11).37(q(){C 7j=$("2i").1v("3o");u(7j=="14"||7j=="1c")$.3o(7j=="14"?14:1c)});$(11).37(q(){u(T 1h.2V==="1e"){q cz(17){C 1M=1b;u(T 17==="1e")1M="[1e]";L u(T 17==="6c")1M=(17?"14":"1c");L u(T 17==="3m")1M=""+17;L u(T 17==="1V")1M=17;L u(T 17==="q")1M=17;L u(T 17==="40"){u(T 17.33!=="1e"){u(17.33==1){1M=\'&9n;\';1M+=17.1J.2t();U(C i=0;i<17.9s.I;i++)1M+=\' \'+17.9s[i].1J.2t()+\'="\'+17.9s[i].6n+\'"\';1M+=\'&9t;\'}L u(17.33==2)1M=17.1J+\'="\'+17.6n;L u(17.33==3)1M=17.6n}L u(T 17.cg!=="1e")1M=17.cg();L u(T 17.5F!=="1e")1M=17.5F()}u(1M==1b)1M="[fm]";B 1M};$(11).37(q(){$("1K").3H(\'<26 Q="4H"><4B></4B></26>\');$("#4H").K("1G","2n").K("cX","d8").K("dh","#dl").K("du","#dz").K("6w","6V 5g 6V 5g").K("64","5T b5 #dI").K("77","5T 5T 5T 5T");$("#4H 4B").K("77","5g 5g 5g 5g").K("98","er")});C 90=["6b","3o","eI","eN","1n","eY","6l","f5","fd","fi","4S","fk","4U","cD","cH","cU"];1h.2V={};U(C i=0;i<90.I;i++){1h.2V[90[i]]=q(a8){$(\'#4H\').K("1G",$.5u$==14?"41":"2n");$(\'#4H 4B\').3H(\'<1Y>\'+cz(a8)+\'</1Y>\').K;$("#4H 4B 1Y").K("e7","52 b5 #eQ").K("6w","52 6V 52 6V")}}1h.2V["4H"]=14}})})(l);',62,954,'||||||this|||||||||||||||jQuery|||||function||||if|||||||return|var||element|settings|value|type|length|elem|css|else||validator|param|ctx|id|data|event|typeof|for|options||||||document|||true||prop|obj|arguments|each|browser|null|false|parseInt|undefined|ret|name|window|height|callback|extend|methods|required|error|parentNode|xml|test|speed|parent|url|cur|attr|elements|Ã|push|filter|apply|handler|msie|hide|style|show|display|Please|enter|nodeName|body|opacity|text|replace|indexOf|rule|new|container|toShow|tabs|status|string|val|form|li|hash||message|constructor|current||firstChild|div|scope|args|in|rules|result|method|width|add|trigger|alternation|helper|html|className|option|events|nav|none|not|expr|date|toHide|px|toLowerCase|last|Z0|expires|left|match|position|global|errorList|containers|first|hidden|top|isFunction|opt|String|context|arg|addClass|while|initial|get|bind|num|reset|key|errors|valid|console|offsetHeight|queue|scrollTop|index|animate|scrollLeft|timeout|nodeType|break|case|func|ready|safari|trim|is|old|toggle|documentElement|easing|errorClass|end|target|removeClass|setTimeout|self|table|number|elems|debug|find|disabled|scheduler|tBody|visible|params|ifModified|tbody|title|bookmarkable|messages|showErrors|src|getLength|select|complete|catch|try|append|clean|selected|opera|Array|to|nth|orig|done|span|innerHTML|submit|duration|radio|tab|preventDefault|auto|merge|call|object|block|bucket|pushStack|input|offsetWidth|href|nextSibling|findId|click|tb|defaults|checkbox|mozilla|check|cookie|labelContainer|selectedClass|wrap|tSettings|Math|absolute|script|clientHeight|remove|which|borderTopWidth|borderLeftWidth|update|lastActive|RegExp|elementID|1000|wrapper|overflow|load|clicked|ol|split|remote|map|class|min|jQueryDebug|firstNum|image|currentStyle|oid|or|size|checked|fix|returnValue|focus|time|encodeURIComponent|count|showAnim|parameters|formId|idcleanup|now||mouseover|1px|grep|timers|curAnim|boxModel|stopPropagation|oldblock|exec|guid|digits|switch|prepareForm|resetForm|custom|0px|makeArray|res|9_|children|location|Date|tmp|ein|success|re|characters|sibling|email|_debug|dependTypes|random|that|errorLabelContainer|cssFloat|insertBefore|prototype|hideErrors|9Ã|XMLHttpRequest|toString|forId|hideAnim|currentForm|onShow|_|_isfn|ajaxHistory|appendTo|Number|childNodes|tID|op|multiFilter|4px|tTitle|schedule|fx|handlers|on|originalEvent||removeChild|clientWidth|domain|border|innerHeight|delete|readyList|curCSS|extraClass|re2|log|boolean|parPos|ownerDocument|onreadystatechange|has|path|substr|sequence|source|dir|static|nodeValue|scroll|st|sl|empty|containerClass|parents|setInterval|domManip|padding|onClick|disabledClass|onHide|errorPlacement|locked|toUpperCase|meta|protect|trueClick|eval|repeat|_schedule|_next|styleFloat|handle|maxLength|maxValue|tUrl|inArray|absparent|substring|foundToken|equalTo|dateISO|10px|tr|dateDE|isReady|doc|child|_scheduler|prepareElement|Function|mergeNum|unbind|mouseout|margin|diff|parseFloat|backgroundImage|step|oldDisplay|defaultView|getTime|setArray|numberDE|ajax|relative|req|errorContainer|onsubmit|selector|modRes|token|between|handleError|geben|tag|Bitte|async|Sie|ival|lastModified|oWidth|animation|responseText|jquery|and|rangeValue|getAttribute|cloneNode|button|tabEvents|than|equal|alert|minValue|readyState|errorContext|secure|oHeight|max|rangeLength|setRequestHeader|tagName|the|formatAndAdd|shift|strong|minLength|expression|focusInvalid|submitHandler|countErrors|navClass|ajaxSettings|msie6|defaultShowErrors|minHeight|ul|_handle|visibility|cachedWidth|currentWidth|cachedFontSize|currentFontSize|Hide|showError|label|depend|toShowId|generated|hideClass|showSpeed|insertAfter|remoteUrls|switchTab|loadingClass|blur|disableTab|pos|deep|reverse|appendChild|clone|startTime|swap|unique|array|h3|isXMLDoc|second|reschedule|fn2|pass|classFilter|cancel|float|pageX|offsetLeft|triggered|slice|offsetTop|lastToggle|NaN|handleHover|pageXOffset|pageYOffset|getElementById|safariTimer|innerWidth|unload|els|names|oldTitle|offset|from|delay|showBody|lastNum|fixPNG|paddingRight|matched|GET|mousemove|getComputedStyle|00|_resort|chars|no|dataType|requestDone|active|file|Modified|getResponseHeader|lt|only|evalScripts|globalEval|fade|attributes|gt|parameter|join|cookies|must|clearInterval|part|cookieValue|either|isTimeout|relparent|parts|throw|paddingLeft|paddingTop|returnObject|bgiframe|createElement|hasSelectedClass|unFocus|override|inv|jq|sort|heights|font|watchFontSize|_setAutoHeight|cachedHeight|currentHeight|fxSpeed|fxSlide|fxFade|fxShow|fxHide|clientX|hideSpeed|scrollTo|scrollX|scrollY|zA|msg|triggerTab|enableTab|prevObject|100|exclude|force|getPropertyValue|multiple|newProp|subject|alpha|zoom||clearTimeout|default|save|webkit|prepend|before|after||removeAttr|previousSibling|contains|password|tl|Microsoft|https|enabled|ftp|parse|_prefix|even|odd|pageY|unshift|srcElement|Invalid|DOMContentLoaded|__ie_init|one|onoff|_toggle|state|old_value|trampoline|swing|viewport|addMethod|dequeue|Tooltip|timer|oldOverflow|track|showURL|validate|normal|getScript|solid|POST|processData|blank|ajaxStart|filled|contentType|setDefaults|This||field|beforeSend|ajaxSend|longer|notmodified|then||of|getElementsByTagName|least|ajaxStop|long||address||URL|ISO|ajaxError|gï|httpSuccess|ltiges|slideUp|Datum|200|slideDown|httpNotModified|Last|304|fadeOut|xmlRes|eine|httpData|Nummer|fadeIn|same|json|again|slide|execScript|less|ajaxComplete|ajaxSuccess|floor|greater|365|setTime|toGMTString|_height|_width|borderBottomWidth|paddingBottom|borderRightWidth|exception|occured|offsetParent|when|checking|marginLeft|marginTop|Warning|No|defined|tabEvent|toJSONString|iframe|hashPrefix|remoteCount|tabStruct|regex|fxAutoHeight|bodyHandler|behaviour|watch|smhdw|fxShowSpeed|fxHideSpeed||action|tempForm|Show|||object2text|siblings|Loading|8230|trace|There|such|initialize|profile|RSE|createTextNode|FORM|weight|line|Bottom|Right|Left|forEach|right|every|some|profileEnd|thead|tfoot|fontFamily|td|th|callee|tooltip|readOnly|zIndex|3000|getAttributeNode|setAttribute|ig|monospace|concat|navigator|userAgent|compatible|compatMode|next|prev|prependTo|backgroundColor|removeAttribute|toggleClass|lastChild|ffffff|textarea|http||u0128|uFFFF|continue|progid|DXImageTransform|color|AlphaImageLoader|sizingMethod|htmlFor|crop|000000|readonly|clientY|cancelBubble|fromElement|toElement|relatedTarget|Infinity|removeEventListener|666699|mousedown|mouseup|change|keydown|keypress|keyup|addEventListener|write|scr|ipt|dblclick|resize|defer|loaded|slideToggle|fadeTo|Object|slow|600|hover|fast|400|linear|cos|borderBottom|PI|10000|250|loadIfModified|2000|serialize|textContent|ActiveXObject|XMLHTTP|getIfModified|getJSON|post|ajaxTimeout||ajaxSetup|application|www|urlencoded||20px|open|Content|Type|If|Since|Thu|01|Jan|1970|GMT|Requested|With|overrideMimeType|Connection|close|abort|info|send|protocol|300|content|warn|Width|responseXML|cccccc|center|horizontal|vertical|YMWDhms|YMDWhms|noConflict|invalid|assert|decodeURIComponent|scrollHeight|scrollWidth|outerHeight|outerWidth|Top|dirxml|inline|bgIframe|javascript|frameborder|tabindex|Alpha|Opacity|group|CSS1Compat|loading|500|removeExpression|groupEnd|setExpression|timeEnd||unknown|'.split('|'),0,{}))
  +eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('u(T 1h.l=="1e"){1h.1e=1h.1e;C l=q(a,c){u(1h==6)B 1Q l(a,c);a=a||11;u(l.2G(a))B 1Q l(11)[l.fn.37?"37":"4z"](a);u(T a=="1V"){C m=/^[^<]*(<(.|\\s)+>)[^>]*$/.59(a);u(m)a=l.3I([m[1]]);L B 1Q l(c).3p(a)}B 6.7f(a.22==3L&&a||(a.7B||a.I&&a!=1h&&!a.33&&a[0]!=1e&&a[0].33)&&l.5h(a)||[a])};u(T $!="1e")l.5K$=$;C $=l;l.fn=l.5B={7B:"1.1.2+cI",4N:q(){B 6.I},I:0,2O:q(2Q){B 2Q==1e?l.5h(6):6[2Q]},43:q(a){C 1f=l(a);1f.ab=6;B 1f},7f:q(a){6.I=0;[].1y.1A(6,a);B 6},19:q(fn,28){B l.19(6,fn,28)},2Z:q(17){C 8t=-1;6.19(q(i){u(6==17)8t=i});B 8t},1v:q(2S,G,H){C 17=2S;u(2S.22==2I)u(G==1e)B 6.I&&l[H||"1v"](6[0],2S)||1e;L{17={};17[2S]=G}B 6.19(q(2Z){U(C 16 29 17)l.1v(H?6.1E:6,16,l.16(6,17[16],H,2Z,16))})},K:q(2S,G){B 6.1v(2S,G,"68")},1M:q(e){u(T e=="1V")B 6.6r().3H(11.cJ(e));C t="";l.19(e||6,q(){l.19(6.5P,q(){u(6.33!=8)t+=6.33!=1?6.6n:l.fn.1M([6])})});B t},4i:q(){C a,28=18;B 6.19(q(){u(!a)a=l.3I(28,6.6e);C b=a[0].7F(14);6.1o.5A(b,6);2M(b.25)b=b.25;b.8w(6)})},3H:q(){B 6.6v(18,14,1,q(a){6.8w(a)})},aq:q(){B 6.6v(18,14,-1,q(a){6.5A(a,6.25)})},ar:q(){B 6.6v(18,1c,1,q(a){6.1o.5A(a,6)})},as:q(){B 6.6v(18,1c,-1,q(a){6.1o.5A(a,6.47)})},3g:q(){B 6.ab||l([])},3p:q(t){B 6.43(l.8A(l.4E(6,q(a){B l.3p(t,a)})),t)},8x:q(8u){B 6.43(l.4E(6,q(a){C a=a.7F(8u!=1e?8u:14);a.$2l=1b;B a}))},1z:q(t){B 6.43(l.2G(t)&&l.53(6,q(el,2Z){B t.1A(el,[2Z])})||l.5S(t,6))},2o:q(t){B 6.43(t.22==2I&&l.5S(t,6,14)||l.53(6,q(a){B(t.22==3L||t.7B)?l.6P(a,t)<0:a!=t}))},2e:q(t){B 6.43(l.3Y(6.2O(),t.22==2I?l(t).2O():t.I!=1e&&(!t.1J||t.1J=="cK")?t:[t]))},3a:q(2p){B 2p?l.5S(2p,6).I>0:1c},9Q:q(){B 6.43(l.5h([].9Q.1A(6,18)))},8v:q(){B 6.43(6.2O().8v(),18)},1W:q(1W){B 1W==1e?(6.I?6[0].G:1b):6.1v("G",1W)},2i:q(1W){B 1W==1e?(6.I?6[0].3R:1b):6.6r().3H(1W)},6v:q(28,3l,6l,fn){C 8x=6.I>1,a;B 6.19(q(){u(!a){a=l.3I(28,6.6e);u(6l<0)a.8v()}C 17=6;u(3l&&l.1J(6,"3l")&&l.1J(a[0],"6W"))17=6.bn("3w")[0]||6.8w(11.9K("3w"));l.19(a,q(){fn.1A(17,[8x?6.7F(14):6])})})}};l.1k=l.fn.1k=q(){C 3h=18[0],a=1;u(18.I==1){3h=6;a=0}C 16;2M(16=18[a++])U(C i 29 16)3h[i]=16[i];B 3h};l.1k({eW:q(){u(l.5K$)$=l.5K$;B l},2G:q(fn){B!!fn&&T fn!="1V"&&!fn.1J&&fn.22!=3L&&/q/i.1q(fn+"")},8D:q(J){B J.7T&&J.6e&&!J.6e.1K},1J:q(J,1g){B J.1J&&J.1J.6C()==1g.6C()},19:q(17,fn,28){u(17.I==1e)U(C i 29 17)fn.1A(17[i],28||[i,17[i]]);L U(C i=0,4B=17.I;i<4B;i++)u(fn.1A(17[i],28||[i,17[i]])===1c)34;B 17},16:q(J,G,H,2Z,16){u(l.2G(G))G=G.3Z(J,[2Z]);C ad=/z-?2Z|9S-?cL|1L|ak|cM-?1i/i;B G&&G.22==5O&&H=="68"&&!ad.1q(16)?G+"2s":G},2j:{2e:q(J,c){l.19(c.4C(/\\s+/),q(i,1u){u(!l.2j.6g(J.2j,1u))J.2j+=(J.2j?" ":"")+1u})},4o:q(J,c){J.2j=c?l.53(J.2j.4C(/\\s+/),q(1u){B!l.2j.6g(c,1u)}).9v(" "):""},6g:q(t,c){B l.6P(c,(t.2j||t).5F().4C(/\\s+/))>-1}},8z:q(e,o,f){U(C i 29 o){e.1E["3b"+i]=e.1E[i];e.1E[i]=o[i]}f.1A(e,[]);U(C i 29 o)e.1E[i]=e.1E["3b"+i]},K:q(e,p){u(p=="1i"||p=="2d"){C 3b={},7P,7y,d=["f4","cN","cO","cP"];l.19(d,q(){3b["6w"+6]=0;3b["64"+6+"eO"]=0});l.8z(e,3b,q(){u(l.K(e,"1G")!="2n"){7P=e.2W;7y=e.45}L{e=l(e.7F(14)).3p(":3U").au("4O").3g().K({8a:"2E",2z:"4l",1G:"41",cR:"0",2x:"0"}).5N(e.1o)[0];C 6d=l.K(e.1o,"2z");u(6d==""||6d=="6m")e.1o.1E.2z="7i";7P=e.4n;7y=e.62;u(6d==""||6d=="6m")e.1o.1E.2z="6m";e.1o.61(e)}});B p=="1i"?7P:7y}B l.68(e,p)},68:q(J,16,ae){C 1f;u(16=="1L"&&l.1a.1C){1f=l.1v(J.1E,"1L");B 1f==""?"1":1f}u(16=="8K"||16=="5z")16=l.1a.1C?"6K":"5z";u(!ae&&J.1E[16])1f=J.1E[16];L u(11.7d&&11.7d.9c){u(16=="5z"||16=="6K")16="8K";16=16.1N(/([A-Z])/g,"-$1").2t();C 1u=11.7d.9c(J,1b);u(1u)1f=1u.af(16);L u(16=="1G")1f="2n";L l.8z(J,{1G:"41"},q(){C c=11.7d.9c(6,"");1f=c&&c.af(16)||""})}L u(J.4K){C ah=16.1N(/\\-(\\w)/g,q(m,c){B c.6C()});1f=J.4K[16]||J.4K[ah]}B 1f},3I:q(a,6Z){C r=[];6Z=6Z||11;l.19(a,q(i,2K){u(!2K)B;u(2K.22==5O)2K=2K.5F();u(T 2K=="1V"){C s=l.39(2K),26=6Z.9K("26"),4a=[];C 4i=!s.1O("<2H")&&[1,"<3D>","</3D>"]||(!s.1O("<cV")||!s.1O("<3w")||!s.1O("<cW"))&&[1,"<3l>","</3l>"]||!s.1O("<6W")&&[2,"<3l><3w>","</3w></3l>"]||(!s.1O("<cY")||!s.1O("<cZ"))&&[3,"<3l><3w><6W>","</6W></3w></3l>"]||[0,"",""];26.3R=4i[1]+2K+4i[2];2M(4i[0]--)26=26.25;u(l.1a.1C){u(!s.1O("<3l")&&s.1O("<3w")<0)4a=26.25&&26.25.5P;L u(4i[1]=="<3l>"&&s.1O("<3w")<0)4a=26.5P;U(C n=4a.I-1;n>=0;--n)u(l.1J(4a[n],"3w")&&!4a[n].5P.I)4a[n].1o.61(4a[n])}2K=l.5h(26.5P)}u(2K.I===0&&!l.1J(2K,"1X"))B;u(2K[0]==1e||l.1J(2K,"1X"))r.1y(2K);L r=l.3Y(r,2K)});B r},1v:q(J,1g,G){C 4P=l.8D(J)?{}:{"U":"dx","4F":"2j","8K":l.1a.1C?"6K":"5z",5z:l.1a.1C?"6K":"5z",3R:"3R",2j:"2j",G:"G",3q:"3q",4O:"4O",dA:"d2",3J:"3J"};u(1g=="1L"&&l.1a.1C){u(G!=1e){J.ak=1;J.1z=(J.1z||"").1N(/aj\\([^)]*\\)/,"")+(79(G).5F()=="8R"?"":"aj(1L="+G*ac+")")}B J.1z?(79(J.1z.2y(/1L=([^)]*)/)[1])/ac).5F():""}u(4P[1g]){u(G!=1e)J[4P[1g]]=G;B J[4P[1g]]}L u(G==1e&&l.1a.1C&&l.1J(J,"1X")&&(1g=="cu"||1g=="2c"))B J.d5(1g).6n;L u(J.7T){u(G!=1e)J.d6(1g,G);u(l.1a.1C&&/46|3B/.1q(1g)&&!l.8D(J))B J.7E(1g,2);B J.7E(1g)}L{1g=1g.1N(/-([a-z])/d7,q(z,b){B b.6C()});u(G!=1e)J[1g]=G;B J[1g]}},39:q(t){B t.1N(/^\\s+|\\s+$/g,"")},5h:q(a){C r=[];u(T a!="8B")U(C i=0,al=a.I;i<al;i++)r.1y(a[i]);L r=a.8O(0);B r},6P:q(b,a){U(C i=0,al=a.I;i<al;i++)u(a[i]==b)B i;B-1},3Y:q(2D,8E){U(C i=0;8E[i];i++)2D.1y(8E[i]);B 2D},8A:q(2D){C r=[],2Q=l.74++;U(C i=0,fl=2D.I;i<fl;i++)u(2D[i].74!=2Q){2D[i].74=2Q;r.1y(2D[i])}B r},74:0,53:q(3n,fn,9O){u(T fn=="1V")fn=1Q 73("a","i","B "+fn);C 2b=[];U(C i=0,el=3n.I;i<el;i++)u(!9O&&fn(3n[i],i)||9O&&!fn(3n[i],i))2b.1y(3n[i]);B 2b},4E:q(3n,fn){u(T fn=="1V")fn=1Q 73("a","B "+fn);C 2b=[],r=[];U(C i=0,el=3n.I;i<el;i++){C 1W=fn(3n[i],i);u(1W!==1b&&1W!=1e){u(1W.22!=3L)1W=[1W];2b=2b.d9(1W)}}B 2b}});1Q q(){C b=da.db.2t();l.1a={38:/ap/.1q(b),3K:/3K/.1q(b),1C:/1C/.1q(b)&&!/3K/.1q(b),4d:/4d/.1q(b)&&!/(dc|ap)/.1q(b)};l.56=!l.1a.1C||11.dd=="fe"};l.19({1s:"a.1o",6t:"l.6t(a)",de:"l.3N(a,2,\'47\')",df:"l.3N(a,2,\'av\')",cA:"l.5s(a.1o.25,a)",5k:"l.5s(a.25)"},q(i,n){l.fn[i]=q(a){C 1f=l.4E(6,n);u(a&&T a=="1V")1f=l.5S(a,1f);B 6.43(1f)}});l.19({5N:"3H",dg:"aq",5A:"ar",8n:"as"},q(i,n){l.fn[i]=q(){C a=18;B 6.19(q(){U(C j=0,al=a.I;j<al;j++)l(a[j])[n](6)})}});l.19({au:q(2S){l.1v(6,2S,"");6.di(2S)},2L:q(c){l.2j.2e(6,c)},3i:q(c){l.2j.4o(6,c)},dj:q(c){l.2j[l.2j.6g(6,c)?"4o":"2e"](6,c)},4o:q(a){u(!a||l.1z(a,[6]).r.I)6.1o.61(6)},6r:q(){2M(6.25)6.61(6.25)}},q(i,n){l.fn[i]=q(){B 6.19(n,18)}});l.19(["eq","9n","9t","aw"],q(i,n){l.fn[n]=q(2Q,fn){B 6.1z(":"+n+"("+2Q+")",fn)}});l.19(["1i","2d"],q(i,n){l.fn[n]=q(h){B h==1e?(6.I?l.K(6[0],n):1b):6.K(n,h.22==2I?h:h+"2s")}});l.1k({2p:{"":"m[2]==\'*\'||l.1J(a,m[2])","#":"a.7E(\'Q\')==m[2]",":":{9n:"i<m[3]-0",9t:"i>m[3]-0",3N:"m[3]-0==i",eq:"m[3]-0==i",2D:"i==0",2u:"i==r.I-1",aF:"i%2==0",aG:"i%2","3N-70":"l.3N(a.1o.25,m[3],\'47\',a)==a","2D-70":"l.3N(a.1o.25,1,\'47\')==a","2u-70":"l.3N(a.1o.dk,1,\'av\')==a","9o-70":"l.5s(a.1o.25).I==1",1s:"a.25",6r:"!a.25",aw:"l.fn.1M.1A([a]).1O(m[3])>=0",3t:\'a.H!="2E"&&l.K(a,"1G")!="2n"&&l.K(a,"8a")!="2E"\',2E:\'a.H=="2E"||l.K(a,"1G")=="2n"||l.K(a,"8a")=="2E"\',aB:"!a.3q",3q:"a.3q",4O:"a.4O",3J:"a.3J||l.1v(a,\'3J\')",1M:"a.H==\'1M\'",3U:"a.H==\'3U\'",4c:"a.H==\'4c\'",9k:"a.H==\'9k\'",ax:"a.H==\'ax\'",3S:"a.H==\'3S\'",4J:"a.H==\'4J\'",2R:"a.H==\'2R\'",7G:\'a.H=="7G"||l.1J(a,"7G")\',44:"/44|3D|dm|7G/i.1q(a.1J)"},".":"l.2j.6g(a,m[2])","@":{"=":"z==m[4]","!=":"z!=m[4]","=~":"z.2y(4u(m[4]))!=1b","!~":"z.2y(4u(m[4]))==1b","^=":"z&&!z.1O(m[4])","$=":"z&&z.6i(z.I - m[4].I,m[4].I)==m[4]","*=":"z&&z.1O(m[4])>=0","":"z",9e:q(m){B["",m[1],m[3],m[2],m[5]]},aE:"z=a[m[3]];u(!z||/46|3B/.1q(m[3]))z=l.1v(a,m[3]);"},"[":"1d(m[2])?l.3N(a.1o.25,1d(m[2]),\'47\',a)==a:l.3p(m[2],a).I"},aD:[/^\\[ *(@)([\\w-]+) *([!*$^~=]*) *(\'?"?)(.*?)\\4 *\\]/,/^(\\[)\\s*(.*?(\\[.*?\\])?[^[]*?)\\s*\\]/,/^(:)([\\w-]+)\\("?\'?(.*?(\\(.*?\\))?[^(]*?)"?\'?\\)/,1Q 4u("^([:.#]*)("+(l.9f="(?:[\\\\w\\dp-\\dq*-]|\\\\\\\\.)")+"+)")],7o:[/^(\\/?\\.\\.)/,"a.1o",/^(>|\\/)/,"l.5s(a.25)",/^(\\+)/,"l.3N(a,2,\'47\')",/^(~)/,q(a){C s=l.5s(a.1o.25);B s.8O(l.6P(a,s)+1)}],5S:q(2p,3n,2o){C 3b,1u=[];2M(2p&&2p!=3b){3b=2p;C f=l.1z(2p,3n,2o);2p=f.t.1N(/^\\s*,\\s*/,"");1u=2o?3n=f.r:l.3Y(1u,f.r)}B 1u},3p:q(t,2J){u(T t!="1V")B[t];u(2J&&!2J.33)2J=1b;2J=2J||11;u(!t.1O("//")){2J=2J.3d;t=t.6i(2,t.I)}L u(!t.1O("/")&&!2J.6e){2J=2J.3d;t=t.6i(1,t.I);u(t.1O("/")>=1)t=t.6i(t.1O("/"),t.I)}C 1f=[2J],3P=[],2u;2M(t&&2u!=t){C r=[];2u=t;t=l.39(t).1N(/^\\/\\//,"");C 6S=1c;C 5q=/^[\\/>]\\s*([\\w*-]+)/;C m=5q.59(t);u(m){U(C i=0;1f[i];i++)U(C c=1f[i].25;c;c=c.47)u(c.33==1&&(m[1]=="*"||l.1J(c,m[1])))r.1y(c);1f=r;t=t.1N(5q,"");u(t.1O(" ")==0)dr;6S=14}L{U(C i=0,ay=l.7o.I;i<ay;i+=2){C 5q=l.7o[i],fn=l.7o[i+1];C m=5q.59(t);u(m){r=1f=l.4E(1f,l.2G(fn)?fn:1Q 73("a","B "+fn));t=l.39(t.1N(5q,""));6S=14;34}}}u(t&&!6S){u(!t.1O(",")){u(1f[0]==2J)1f.7W();3P=l.3Y(3P,1f);r=1f=[2J];t=" "+t.6i(1,t.I)}L{C 6a=1Q 4u("^(\\\\w+)(#)("+l.9f+"+)");C m=6a.59(t);u(m){m=[0,m[2],m[3],m[1]]}L{6a=1Q 4u("^([#.]?)("+l.9f+"*)");m=6a.59(t)}m[2]=m[2].1N(/\\\\/g,"");C J=1f[1f.I-1];u(m[1]=="#"&&J&&J.8V){C 4L=J.8V(m[2]);u((l.1a.1C||l.1a.3K)&&4L&&4L.Q!=m[2])4L=l(\'[@Q="\'+m[2]+\'"]\',J)[0];1f=r=4L&&(!m[3]||l.1J(4L,m[3]))?[4L]:[]}L{U(C i=0;1f[i];i++){C 7s=m[1]!=""||m[0]==""?"*":m[2];u(7s=="*"&&1f[i].1J.2t()=="40")7s="O";r=l.3Y(r,1f[i].bn(7s))}u(m[1]==".")r=l.8I(r,m[2]);u(m[1]=="#"){C 5n=[];U(C i=0;r[i];i++)u(r[i].7E("Q")==m[2]){5n=[r[i]];34}r=5n}1f=r}t=t.1N(6a,"")}}u(t){C 1W=l.1z(t,r);1f=r=1W.r;t=l.39(1W.t)}}u(t)1f=[];u(1f&&1f[0]==2J)1f.7W();3P=l.3Y(3P,1f);B 3P},8I:q(r,m,2o){m=" "+m+" ";C 5n=[];U(C i=0;r[i];i++){C 8H=(" "+r[i].2j+" ").1O(m)>=0;u(!2o&&8H||2o&&!8H)5n.1y(r[i])}B 5n},1z:q(t,r,2o){C 2u;2M(t&&t!=2u){2u=t;C p=l.aD,m;U(C i=0;p[i];i++){m=p[i].59(t);u(m){t=t.6R(m[0].I);u(l.2p[m[1]].9e)m=l.2p[m[1]].9e(m);m[2]=m[2].1N(/\\\\/g,"");34}}u(!m)34;u(m[1]==":"&&m[2]=="2o")r=l.1z(m[3],r,14).r;L u(m[1]==".")r=l.8I(r,m[2],2o);L{C f=l.2p[m[1]];u(T f!="1V")f=l.2p[m[1]][m[2]];6G("f = q(a,i){"+(l.2p[m[1]].aE||"")+"B "+f+"}");r=l.53(r,f,2o)}}B{r:r,t:t}},6t:q(J){C 99=[];C 1u=J.1o;2M(1u&&1u!=11){99.1y(1u);1u=1u.1o}B 99},3N:q(1u,2b,6l,J){2b=2b||1;C 2Q=0;U(;1u;1u=1u[6l]){u(1u.33==1)2Q++;u(2Q==2b||2b=="aF"&&2Q%2==0&&2Q>1&&1u==J||2b=="aG"&&2Q%2==1&&1u==J)B 1u}},5s:q(n,J){C r=[];U(;n;n=n.47){u(n.33==1&&(!J||n!=J))r.1y(n)}B r}});l.S={2e:q(E,H,1B,R){u(l.1a.1C&&E.6u!=1e)E=1h;u(R)1B.R=R;u(!1B.5a)1B.5a=6.5a++;u(!E.$2l)E.$2l={};C 5X=E.$2l[H];u(!5X){5X=E.$2l[H]={};u(E["5Y"+H])5X[0]=E["5Y"+H]}5X[1B.5a]=1B;E["5Y"+H]=6.6L;u(!6.2A[H])6.2A[H]=[];6.2A[H].1y(E)},5a:1,2A:{},4o:q(E,H,1B){C 2l=E.$2l,1f;u(2l){u(H&&H.H){1B=H.1B;H=H.H}u(!H){U(H 29 2l)6.4o(E,H)}L u(2l[H]){u(1B)66 2l[H][1B.5a];L U(1B 29 E.$2l[H])66 2l[H][1B];U(1f 29 2l[H])34;u(!1f){1f=E["5Y"+H]=1b;66 2l[H]}}U(1f 29 2l)34;u(!1f)E.$2l=1b}},2f:q(H,R,E){R=l.5h(R||[]);u(!E)l.19(6.2A[H]||[],q(){l.S.2f(H,R,6)});L{C 1B=E["5Y"+H],1W,fn=l.2G(E[H]);u(1B){R.aI(6.4P({H:H,3h:E}));u((1W=1B.1A(E,R))!==1c)6.8N=14}u(fn&&1W!==1c)E[H]();6.8N=1c}},6L:q(S){u(T l=="1e"||l.S.8N)B;S=l.S.4P(S||1h.S||{});C 4Q;C c=6.$2l[S.H];C 28=[].8O.3Z(18,1);28.aI(S);U(C j 29 c){28[0].1B=c[j];28[0].R=c[j].R;u(c[j].1A(6,28)===1c){S.3W();S.57();4Q=1c}}u(l.1a.1C)S.3h=S.3W=S.57=S.1B=S.R=1b;B 4Q},4P:q(S){u(!S.3h&&S.aJ)S.3h=S.aJ;u(S.8L==1e&&S.a2!=1e){C e=11.3d,b=11.1K;S.8L=S.a2+(e.31||b.31);S.aH=S.dB+(e.2Y||b.2Y)}u(l.1a.38&&S.3h.33==3){C 5Z=S;S=l.1k({},5Z);S.3h=5Z.3h.1o;S.3W=q(){B 5Z.3W()};S.57=q(){B 5Z.57()}}u(!S.3W)S.3W=q(){6.4Q=1c};u(!S.57)S.57=q(){6.dC=14};B S}};l.fn.1k({2P:q(H,R,fn){B 6.19(q(){l.S.2e(6,H,fn||R,R)})},aN:q(H,R,fn){B 6.19(q(){l.S.2e(6,H,q(S){l(6).75(S);B(fn||R).1A(6,18)},R)})},75:q(H,fn){B 6.19(q(){l.S.4o(6,H,fn)})},2f:q(H,R){B 6.19(q(){l.S.2f(H,R,6)})},3c:q(){C a=18;B 6.49(q(e){6.8Q=6.8Q==0?1:0;e.3W();B a[6.8Q].1A(6,[e])||1c})},e2:q(f,g){q 8S(e){C p=(e.H=="51"?e.dD:e.dE)||e.dF;2M(p&&p!=6)3G{p=p.1o}3F(e){p=6};u(p==6)B 1c;B(e.H=="51"?f:g).1A(6,[e])}B 6.51(8S).76(8S)},37:q(f){u(l.6Y)f.1A(11,[l]);L{l.67.1y(q(){B f.1A(6,[l])})}B 6}});l.1k({6Y:1c,67:[],37:q(){u(!l.6Y){l.6Y=14;u(l.67){l.19(l.67,q(){6.1A(11)});l.67=1b}u(l.1a.4d||l.1a.3K)11.dH("aL",l.37,1c)}}});1Q q(){l.19(("8r,4R,4z,dU,6o,8Y,49,dT,"+"dJ,dK,9b,51,76,dL,3D,"+"3S,dM,dN,dO,1n").4C(","),q(i,o){l.fn[o]=q(d,f){B(f||d)?6.2P(o,d,f):6.2f(o)}});u(l.1a.4d||l.1a.3K)11.dP("aL",l.37,1c);L u(l.1a.1C){11.dQ("<dR"+"dS Q=aM dV=14 "+"3B=//:><\\/4m>");C 4m=11.8V("aM");u(4m)4m.6f=q(){u(6.7M!="3E")B;6.1o.61(6);l.37()};4m=1b}L u(l.1a.38)l.8W=6u(q(){u(11.7M=="dW"||11.7M=="3E"){9y(l.8W);l.8W=1b;l.37()}},10);l.S.2e(1h,"4z",l.37)};u(l.1a.1C)l(1h).aN("8Y",q(){C 2A=l.S.2A;U(C H 29 2A){C 8Z=2A[H],i=8Z.I;u(i&&H!=\'8Y\')do l.S.4o(8Z[i-1],H);2M(--i)}});l.fn.1k({1F:q(1r,1j){C 2E=6.1z(":2E");1r?2E.30({1i:"1F",2d:"1F",1L:"1F"},1r,1j):2E.19(q(){6.1E.1G=6.58?6.58:"";u(l.K(6,"1G")=="2n")6.1E.1G="41"});B 6},1D:q(1r,1j){C 3t=6.1z(":3t");1r?3t.30({1i:"1D",2d:"1D",1L:"1D"},1r,1j):3t.19(q(){6.58=6.58||l.K(6,"1G");u(6.58=="2n")6.58="41";6.1E.1G="2n"});B 6},aP:l.fn.3c,3c:q(fn,8G){C 28=18;B l.2G(fn)&&l.2G(8G)?6.aP(fn,8G):6.19(q(){l(6)[l(6).3a(":2E")?"1F":"1D"].1A(l(6),28)})},bD:q(1r,1j){B 6.1z(":2E").30({1i:"1F"},1r,1j).3g()},bA:q(1r,1j){B 6.1z(":3t").30({1i:"1D"},1r,1j).3g()},dX:q(1r,1j){B 6.19(q(){C aQ=l(6).3a(":2E")?"1F":"1D";l(6).30({1i:aQ},1r,1j)})},bM:q(1r,1j){B 6.1z(":2E").30({1L:"1F"},1r,1j).3g()},bH:q(1r,1j){B 6.1z(":3t").30({1L:"1D"},1r,1j).3g()},dY:q(1r,3M,1j){B 6.30({1L:3M},1r,1j)},30:q(16,1r,3e,1j){B 6.2X(q(){6.55=l.1k({},16);C 2H=l.1r(1r,3e,1j);U(C p 29 16){C e=1Q l.5W(6,2H,p);u(16[p].22==5O)e.5f(e.1u(),16[p]);L e[16[p]](16)}})},2X:q(H,fn){u(!fn){fn=H;H="5W"}B 6.19(q(){u(!6.2X)6.2X={};u(!6.2X[H])6.2X[H]=[];6.2X[H].1y(fn);u(6.2X[H].I==1)fn.1A(6)})}});l.1k({1r:q(1r,3e,fn){C 2H=1r&&1r.22==dZ?1r:{3E:fn||!fn&&3e||l.2G(1r)&&1r,3T:1r,3e:fn&&3e||3e&&3e.22!=73&&3e||"aT"};2H.3T=(2H.3T&&2H.3T.22==5O?2H.3T:{e0:e1,e3:bC}[2H.3T])||e4;2H.3b=2H.3E;2H.3E=q(){l.aW(6,"5W");u(l.2G(2H.3b))2H.3b.1A(6)};B 2H},3e:{e5:q(p,n,4I,78){B 4I+78*p},aT:q(p,n,4I,78){B((-4k.e6(p*4k.e8)/2)+0.5)*78+4I}},2X:{},aW:q(J,H){H=H||"5W";u(J.2X&&J.2X[H]){J.2X[H].7W();C f=J.2X[H][0];u(f)f.1A(J)}},54:[],5W:q(J,V,16){C z=6;C y=J.1E;u(16=="1i"||16=="2d"){C 7c=l.K(J,"1G");C aZ=y.4y;y.4y="2E"}z.a=q(){u(V.7b)V.7b.1A(J,[z.4Z]);u(16=="1L")l.1v(y,"1L",z.4Z);L{y[16]=1d(z.4Z)+"2s";y.1G="41"}};z.7Q=q(){B 79(l.K(J,16))};z.1u=q(){C r=79(l.68(J,16));B r&&r>-e9?r:z.7Q()};z.5f=q(93,3M){z.8y=(1Q 5m()).7e();z.4Z=93;z.a();l.54.1y(q(){B z.7b(93,3M)});u(l.54.I==1){C aY=6u(q(){l.54=l.53(l.54,q(fn){B fn()});u(!l.54.I)9y(aY)},13)}};z.1F=q(){u(!J.3O)J.3O={};J.3O[16]=l.1v(J.1E,16);V.1F=14;z.5f(0,6.1u());u(16!="1L")y[16]="52"};z.1D=q(){u(!J.3O)J.3O={};J.3O[16]=l.1v(J.1E,16);V.1D=14;z.5f(6.1u(),0)};z.3c=q(){u(!J.3O)J.3O={};J.3O[16]=l.1v(J.1E,16);u(7c=="2n"){V.1F=14;u(16!="1L")y[16]="52";z.5f(0,6.1u())}L{V.1D=14;z.5f(6.1u(),0)}};z.7b=q(4I,96){C t=(1Q 5m()).7e();u(t>V.3T+z.8y){z.4Z=96;z.a();u(J.55)J.55[16]=14;C 3P=14;U(C i 29 J.55)u(J.55[i]!==14)3P=1c;u(3P){u(7c){y.4y=aZ;y.1G=7c;u(l.K(J,"1G")=="2n")y.1G="41"}u(V.1D)y.1G="2n";u(V.1D||V.1F)U(C p 29 J.55)l.1v(y,p,J.3O[p])}u(3P&&l.2G(V.3E))V.3E.1A(J);B 1c}L{C n=t-6.8y;C p=n/V.3T;z.4Z=l.3e[V.3e](p,n,4I,(96-4I),V.3T);z.a()}B 14}}});l.fn.1k({eb:q(1t,3u,1j){6.4z(1t,3u,1j,1)},4z:q(1t,3u,1j,3v){u(l.2G(1t))B 6.2P("4z",1t);1j=1j||q(){};C H="9a";u(3u)u(l.2G(3u)){1j=3u;3u=1b}L{3u=l.O(3u);H="b6"}C 3k=6;l.7h({1t:1t,H:H,R:3u,3v:3v,3E:q(5i,1U){u(1U=="5p"||!3v&&1U=="bj")3k.1v("3R",5i.7A).9p().19(1j,[5i.7A,1U,5i]);L 1j.1A(3k,[5i.7A,1U,5i])}});B 6},ed:q(){B l.O(6)},9p:q(){B 6.3p("4m").19(q(){u(6.3B)l.b4(6.3B);L l.9q(6.1M||6.ee||6.3R||"")}).3g()}});u(!1h.5E)5E=q(){B 1Q ef("az.eg")};l.19("b9,bp,bT,bw,bU,bh".4C(","),q(i,o){l.fn[o]=q(f){B 6.2P(o,f)}});l.1k({2O:q(1t,R,1j,H,3v){u(l.2G(R)){1j=R;R=1b}B l.7h({H:"9a",1t:1t,R:R,5p:1j,9h:H,3v:3v})},eh:q(1t,R,1j,H){B l.2O(1t,R,1j,H,1)},b4:q(1t,1j){B l.2O(1t,1b,1j,"4m")},ei:q(1t,R,1j){B l.2O(1t,R,1j,"bO")},ej:q(1t,R,1j,H){u(l.2G(R)){1j=R;R={}}B l.7h({H:"b6",1t:1t,R:R,5p:1j,9h:H})},ek:q(32){l.84.32=32},em:q(F){l.1k(l.84,F)},84:{2A:14,H:"9a",32:0,bb:"en/x-eo-1X-ep",b7:14,7u:14,R:1b},7x:{},7h:q(s){s=l.1k({},l.84,s);u(s.R){u(s.b7&&T s.R!="1V")s.R=l.O(s.R);u(s.H.2t()=="2O"){s.1t+=((s.1t.1O("?")>-1)?"&":"?")+s.R;s.R=1b}}u(s.2A&&!l.9j++)l.S.2f("b9");C 9i=1c;C 1p=1Q 5E();1p.es(s.H,s.1t,s.7u);u(s.R)1p.7S("et-eu",s.bb);u(s.3v)1p.7S("ev-9l-ew",l.7x[s.1t]||"ex, ey ez eA 9d:9d:9d eB");1p.7S("X-eC-eD","5E");u(1p.eE)1p.7S("eF","eG");u(s.bg)s.bg(1p);u(s.2A)l.S.2f("bh",[1p,s]);C 6f=q(9C){u(1p&&(1p.7M==4||9C=="32")){9i=14;u(7w){9y(7w);7w=1b}C 1U;3G{1U=l.by(1p)&&9C!="32"?s.3v&&l.bE(1p,s.1t)?"bj":"5p":"1n";u(1U!="1n"){C 7n;3G{7n=1p.9m("bF-9l")}3F(e){}u(s.3v&&7n)l.7x[s.1t]=7n;C R=l.bK(1p,s.9h);u(s.5p)s.5p(R,1U);u(s.2A)l.S.2f("bU",[1p,s])}L l.7q(s,1p,1U)}3F(e){1U="1n";l.7q(s,1p,1U,e)}u(s.2A)l.S.2f("bT",[1p,s]);u(s.2A&&!--l.9j)l.S.2f("bp");u(s.3E)s.3E(1p,1U);u(s.7u)1p=1b}};C 7w=6u(6f,13);u(s.32>0)3j(q(){u(1p){1p.eH();u(!9i)6f("32")}},s.32);3G{1p.eJ(s.R)}3F(e){l.7q(s,1p,1b,e)}u(!s.7u)6f();B 1p},7q:q(s,1p,1U,e){u(s.1n)s.1n(1p,1U,e);u(s.2A)l.S.2f("bw",[1p,s,e])},9j:0,by:q(r){3G{B!r.1U&&5l.eK=="9k:"||(r.1U>=bC&&r.1U<eL)||r.1U==bG||l.1a.38&&r.1U==1e}3F(e){}B 1c},bE:q(1p,1t){3G{C bI=1p.9m("bF-9l");B 1p.1U==bG||bI==l.7x[1t]||l.1a.38&&1p.1U==1e}3F(e){}B 1c},bK:q(r,H){C ct=r.9m("eM-H");C R=!H&&ct&&ct.1O("1p")>=0;R=H=="1p"||R?r.eP:r.7A;u(H=="4m")l.9q(R);u(H=="bO")6G("R = "+R);u(H=="2i")l("<26>").2i(R).9p();B R},O:q(a){C s=[];u(a.22==3L||a.7B)l.19(a,q(){s.1y(4T(6.1g)+"="+4T(6.G))});L U(C j 29 a)u(a[j]&&a[j].22==3L)l.19(a[j],q(){s.1y(4T(j)+"="+4T(6))});L s.1y(4T(j)+"="+4T(a[j]));B s.9v("&")},9q:q(R){u(1h.bR)1h.bR(R);L u(l.1a.38)1h.3j(R,0);L 6G.3Z(1h,R)}})}l.fn.eR=q(f){B 6.19(q(){C p=6.1o;u(l.K(p,"2z")==\'6m\')p.1E.2z=\'7i\';C s=6.1E;s.2z=\'4l\';u(!f||f=="eS"){u(((1d(l.K(p,"2d"))-1d(l.K(6,"2d")))/2)>0)s.2x=((1d(l.K(p,"2d"))-1d(l.K(6,"2d")))/2)+"2s";L s.2x="0"}u(!f||f=="eT"){u(((1d(l.K(p,"1i"))-1d(l.K(6,"1i")))/2)>0){s.2F=((1d(l.K(p,"1i"))-1d(l.K(6,"1i")))/2)+"2s"}L{u(p.1J.2t()=="1K"){u(1h.65)C 4n=1h.65;L u(11.1K&&11.1K.2W)C 4n=11.1K.2W;s.2F=((4n-1d(l.K(6,"1i")))/2)+"2s"}L{s.2F="0"}}}})};l.4f=q(1g,G,V){u(T G!=\'1e\'){V=V||{};u(G===1b){G="";V.2w=-1}C 2w=\'\';u(V.2w){C 2q;u(T V.2w==\'1V\'&&V.2w.2y(/^[+-]?[0-9]+[eU]$/)!==1b){C 2y=V.2w.2y(/^([+-]?[0-9]+)([eV])$/);V.2w=1d(2y[0],10)*(({"Y":(60*60*24*bX),"M":(60*60*24*bX/12),"W":(60*60*24*7),"D":(60*60*24),"h":(60*60),"m":(60),"s":(1)}[2y[1]])||0);2q=1Q 5m();2q.bY(2q.7e()+V.2w*4w)}L u(T V.2w==\'3m\'){2q=1Q 5m();2q.bY(2q.7e()+V.2w*24*60*60*4w)}L u(T V.2w.bZ!=\'1e\')2q=V.2w;L 9F"eX \\"2w\\" 2k";2w=\'; 2w=\'+2q.bZ()}C 6h=V.6h?\'; 6h=\'+V.6h:\'\';C 63=V.63?\'; 63=\'+V.63:\'\';C 7O=V.7O?\'; 7O\':\'\';11.4f=[1g,\'=\',4T(G),2w,6h,63,7O].9v(\'\')}L{C 9A=1b;u(11.4f&&11.4f!=\'\'){C 9w=11.4f.4C(\';\');U(C i=0;i<9w.I;i++){C 4f=l.39(9w[i]);u(4f.6R(0,1g.I+1)==(1g+\'=\')){9A=eZ(4f.6R(1g.I+1));34}}}B 9A}};l.fn.c0=l.fn.1i;l.fn.c1=l.fn.2d;l.fn.1i=q(){u(6[0]==1h)B 3k.65||l.56&&11.3d.4n||11.1K.4n;u(6[0]==11)B 4k.7Q(11.1K.f0,11.1K.2W);B 6.c0(18[0])};l.fn.2d=q(){u(6[0]==1h)B 3k.8X||l.56&&11.3d.62||11.1K.62;u(6[0]==11)B 4k.7Q(11.1K.f1,11.1K.45);B 6.c1(18[0])};l.fn.65=q(){B 6[0]==1h||6[0]==11?6.1i():6.K(\'1G\')!=\'2n\'?6[0].2W-(1d(6.K("4q"))||0)-(1d(6.K("c2"))||0):6.1i()+(1d(6.K("9H"))||0)+(1d(6.K("c3"))||0)};l.fn.8X=q(){B 6[0]==1h||6[0]==11?6.2d():6.K(\'1G\')!=\'2n\'?6[0].45-(1d(6.K("4r"))||0)-(1d(6.K("c4"))||0):6.1i()+(1d(6.K("9G"))||0)+(1d(6.K("98"))||0)};l.fn.f2=q(){B 6[0]==1h||6[0]==11?6.1i():6.K(\'1G\')!=\'2n\'?6[0].2W:6.1i()+(1d(6.K("4q"))||0)+(1d(6.K("c2"))||0)+(1d(6.K("9H"))||0)+(1d(6.K("c3"))||0)};l.fn.f3=q(){B 6[0]==1h||6[0]==11?6.2d():6.K(\'1G\')!=\'2n\'?6[0].45:6.1i()+(1d(6.K("4r"))||0)+(1d(6.K("c4"))||0)+(1d(6.K("9G"))||0)+(1d(6.K("98"))||0)};l.fn.31=q(){u(6[0]==1h||6[0]==11)B 3k.8T||l.56&&11.3d.31||11.1K.31;B 6[0].31};l.fn.2Y=q(){u(6[0]==1h||6[0]==11)B 3k.8U||l.56&&11.3d.2Y||11.1K.2Y;B 6[0].2Y};l.fn.92=q(V,9I){C x=0,y=0,J=6[0],1s=6[0],6Q=1c,9D=1c,5R,6q=0,6p=0,V=l.1k({77:14,64:14,6w:1c,6o:14},V||{});do{x+=1s.8M||0;y+=1s.8P||0;u(l.1a.4d||l.1a.1C){C bt=1d(l.K(1s,\'4q\'))||0;C bl=1d(l.K(1s,\'4r\'))||0;x+=bl;y+=bt;u(l.1a.4d&&1s!=J&&l.K(1s,\'4y\')!=\'3t\'){x+=bl;y+=bt}u(l.K(1s,\'2z\')==\'4l\')6Q=14;u(l.K(1s,\'2z\')==\'7i\')9D=14}u(V.6o){5R=1s.c7;do{6q+=1s.31||0;6p+=1s.2Y||0;1s=1s.1o;u(l.1a.4d&&1s!=J&&1s!=5R&&l.K(1s,\'4y\')!=\'3t\'){x+=1d(l.K(1s,\'4r\'))||0;y+=1d(l.K(1s,\'4q\'))||0}}2M(5R&&1s!=5R)}L 1s=1s.c7;u(1s&&(1s.7T.2t()==\'1K\'||1s.7T.2t()==\'2i\')){u((l.1a.38||(l.1a.1C&&l.56))&&l.K(J,\'2z\')!=\'4l\'){x+=1d(l.K(1s,\'ca\'))||0;y+=1d(l.K(1s,\'cb\'))||0}u((l.1a.4d&&!6Q)||(l.1a.1C&&l.K(J,\'2z\')==\'6m\'&&(!9D||!6Q))){x+=1d(l.K(1s,\'4r\'))||0;y+=1d(l.K(1s,\'4q\'))||0}34}}2M(1s);u(!V.77){x-=1d(l.K(J,\'ca\'))||0;y-=1d(l.K(J,\'cb\'))||0}u(V.64&&(l.1a.38||l.1a.3K)){x+=1d(l.K(J,\'4r\'))||0;y+=1d(l.K(J,\'4q\'))||0}L u(!V.64&&!(l.1a.38||l.1a.3K)){x-=1d(l.K(J,\'4r\'))||0;y-=1d(l.K(J,\'4q\'))||0}u(V.6w){x+=1d(l.K(J,\'9G\'))||0;y+=1d(l.K(J,\'9H\'))||0}u(V.6o&&l.1a.3K&&l.K(J,\'1G\')==\'f6\'){6q-=J.31||0;6p-=J.2Y||0}C 4Q=V.6o?{2F:y-6p,2x:x-6q,2Y:6p,31:6q}:{2F:y,2x:x};u(9I){l.1k(9I,4Q);B 6}L{B 4Q}};(q($){$.fn.f7=l.fn.9J=q(s){u(!($.1a.1C&&T 5E==\'q\'))B 6;s=$.1k({2F:\'3X\',2x:\'3X\',2d:\'3X\',1i:\'3X\',1L:14,3B:\'f8:1c;\'},s||{});C 16=q(n){B n&&n.22==5O?n+\'2s\':n},2i=\'<ch 4F="9J"f9="0"fa="-1"3B="\'+s.3B+\'"\'+\'1E="1G:41;2z:4l;z-2Z:-1;\'+(s.1L!==1c?\'1z:fb(fc=\\\'0\\\');\':\'\')+\'2F:\'+(s.2F==\'3X\'?\'7Z(((1d(6.1o.4K.4q)||0)*-1)+\\\'2s\\\')\':16(s.2F))+\';\'+\'2x:\'+(s.2x==\'3X\'?\'7Z(((1d(6.1o.4K.4r)||0)*-1)+\\\'2s\\\')\':16(s.2x))+\';\'+\'2d:\'+(s.2d==\'3X\'?\'7Z(6.1o.45+\\\'2s\\\')\':16(s.2d))+\';\'+\'1i:\'+(s.1i==\'3X\'?\'7Z(6.1o.2W+\\\'2s\\\')\':16(s.1i))+\';\'+\'"/>\';B 6.19(q(){u(!$(\'ch.9J\',6)[0])6.5A(11.9K(2i),6.25)})}})(l);(q($){$.1k({1T:{cj:0}});$.fn.1T=q(2N,F){u(T 2N==\'40\')F=2N;F=$.1k({2N:(2N&&T 2N==\'3m\'&&2N>0)?--2N:0,3q:1b,3y:$.5M?14:1c,4D:1c,ci:\'4D-3V-\',9Z:1b,9Y:1b,a0:1b,a1:1b,9X:\'b3\',cr:1b,cs:1b,cm:1c,6x:1b,6z:1b,5J:1b,83:\'1T-2m\',4h:\'1T-3J\',6y:\'1T-3q\',6s:\'1T-1R\',8l:\'1T-1D\',8q:\'1T-ff\',ck:\'26\'},F||{});$.1a.85=$.1a.85||$.1a.1C&&T 5E==\'q\';q 9M(){a4(0,0)}B 6.19(q(){C 1R=6;C 2m=$(\'88.\'+F.83,1R);2m=2m.4N()&&2m||$(\'>88:eq(0)\',1R);C 1T=$(\'a\',2m);u(F.4D){C 8o={};1T.19(q(){$(6).2i(\'<3Q>\'+$(6).2i()+\'</3Q>\');C Q=F.ci+(++$.1T.cj);C 1Z=\'#\'+Q;8o[1Z]=6.46;6.46=1Z;$(\'<26 Q="\'+Q+\'" 4F="\'+F.6s+\'"></26>\').5N(1R)})}C 2C=$(\'26.\'+F.6s,1R);2C=2C.4N()&&2C||$(\'>\'+F.ck,1R);2m.3a(\'.\'+F.83)||2m.2L(F.83);2C.19(q(){C $$=$(6);$$.3a(\'.\'+F.6s)||$$.2L(F.6s)});C 9L=$(\'1Y\',2m).2Z($(\'1Y.\'+F.4h,2m)[0]);u(9L>=0){F.2N=9L}u(5l.1Z){1T.19(q(i){u(6.1Z==5l.1Z){F.2N=i;u(($.1a.1C||$.1a.3K)&&!F.4D){C 1S=$(5l.1Z);C 8j=1S.1v(\'Q\');1S.1v(\'Q\',\'\');3j(q(){1S.1v(\'Q\',8j)},fg)}9M();B 1c}})}u($.1a.1C){9M()}2C.1z(\':eq(\'+F.2N+\')\').1F().3g().2o(\':eq(\'+F.2N+\')\').2L(F.8l);u(!F.4D){$(\'1Y\',2m).3i(F.4h).eq(F.2N).2L(F.4h)}u(F.cm){C 9U=q(2R){C 9R=$.4E(2C.2O(),q(el){C h,9P=$(el);u(2R){u($.1a.85){el.1E.fh(\'co\');el.1E.1i=\'\';el.87=1b}h=9P.K({\'4G-1i\':\'\'}).1i()}L{h=9P.1i()}B h}).9Q(q(a,b){B b-a});u($.1a.85){2C.19(q(){6.87=9R[0]+\'2s\';6.1E.fj(\'co\',\'6.1E.1i = 6.87 ? 6.87 : "52"\')})}L{2C.K({\'4G-1i\':9R[0]+\'2s\'})}};9U();C 8b=1R.45;C 9V=1R.2W;C 9T=$(\'#1T-cp-9S-4N\').2O(0)||$(\'<3Q Q="1T-cp-9S-4N">M</3Q>\').K({1G:\'41\',2z:\'4l\',8a:\'2E\'}).5N(11.1K).2O(0);C 8d=9T.2W;6u(q(){C 8c=1R.45;C 9W=1R.2W;C 8e=9T.2W;u(9W>9V||8c!=8b||8e!=8d){9U((8c>8b||8e<8d));8b=8c;9V=9W;8d=8e}},50)}C 4V={},5H={},8m=F.cr||F.9X,a3=F.cs||F.9X;u(F.9Y||F.9Z){u(F.9Y){4V[\'1i\']=\'1F\';5H[\'1i\']=\'1D\'}u(F.9Z){4V[\'1L\']=\'1F\';5H[\'1L\']=\'1D\'}}L{u(F.a0){4V=F.a0}L{4V[\'4G-2d\']=0;8m=F.3y?50:1}u(F.a1){5H=F.a1}L{5H[\'4G-2d\']=0;a3=F.3y?50:1}}C 6x=F.6x,6z=F.6z,5J=F.5J;1T.2P(\'a9\',q(){C 1Y=$(6.1o);u(1R.6B||1Y.3a(\'.\'+F.4h)||1Y.3a(\'.\'+F.6y)){B 1c}C 1Z=6.1Z;u($.1a.1C){$(6).2f(\'49\');u(F.3y){$.5M.4s(1Z);5l.1Z=1Z.1N(\'#\',\'\')}}L u($.1a.38){C cv=$(\'<1X cu="\'+1Z+\'"><26><44 H="3S" G="h" /></26></1X>\').2O(0);cv.3S();$(6).2f(\'49\');u(F.3y){$.5M.4s(1Z)}}L{u(F.3y){5l.1Z=1Z.1N(\'#\',\'\')}L{$(6).2f(\'49\')}}});1T.2P(\'8s\',q(){C 1Y=$(6.1o);u($.1a.38){1Y.30({1L:0},1,q(){1Y.K({1L:\'\'})})}1Y.2L(F.6y)});u(F.3q&&F.3q.I){U(C i=0,k=F.3q.I;i<k;i++){1T.eq(--F.3q[i]).2f(\'8s\').3g()}};1T.2P(\'aa\',q(){C 1Y=$(6.1o);1Y.3i(F.6y);u($.1a.38){1Y.30({1L:1},1,q(){1Y.K({1L:\'\'})})}});1T.2P(\'49\',q(e){C 6F=e.a2;C 4A=6,1Y=$(6.1o),1S=$(6.1Z),2r=2C.1z(\':3t\');u((T 6x==\'q\'&&6x(6,1S[0],2r[0])==1c&&6F)||1R.6B||1Y.3a(\'.\'+F.4h)||1Y.3a(\'.\'+F.6y)){6.8r();B 1c}1R[\'6B\']=14;u(1S.4N()){u($.1a.1C&&F.3y){C 8j=6.1Z.1N(\'#\',\'\');1S.1v(\'Q\',\'\');3j(q(){1S.1v(\'Q\',8j)},0)}q 8p(){u(F.3y&&6F){$.5M.4s(4A.1Z)}2r.30(5H,a3,q(){$(4A.1o).2L(F.4h).cA().3i(F.4h);u(T 6z==\'q\'){6z(4A,1S[0],2r[0])}2r.2L(F.8l).K({1G:\'\',4y:\'\',1i:\'\',1L:\'\'});1S.3i(F.8l).30(4V,8m,q(){1S.K({4y:\'\',1i:\'\',1L:\'\'});u($.1a.1C){2r[0].1E.1z=\'\';1S[0].1E.1z=\'\'}u(T 5J==\'q\'){5J(4A,1S[0],2r[0])}1R.6B=1b})})}u(!F.4D){8p()}L{C $$=$(6),3Q=$(\'3Q\',6)[0],1M=3Q.3R;$$.2L(F.8q);3Q.3R=\'cB&#cC;\';3j(q(){$(4A.1Z).4z(8o[4A.1Z],q(){8p();3Q.3R=1M;$$.3i(F.8q)})},0)}}L{7K(\'cE 3a 9g cF 1R.\')}C a5=1h.8T||11.3d&&11.3d.31||11.1K.31||0;C a6=1h.8U||11.3d&&11.3d.2Y||11.1K.2Y||0;3j(q(){1h.a4(a5,a6)},0);6.8r();B F.3y&&!!6F});u(F.4D){1T.eq(F.2N).2f(\'49\').3g()}u(F.3y){$.5M.cG(q(){1T.eq(F.2N).2f(\'49\').3g()})}})};C 7H=[\'a9\',\'8s\',\'aa\'];U(C i=0;i<7H.I;i++){$.fn[7H[i]]=(q(cf){B q(3V){B 6.19(q(){C 2m=$(\'88.1T-2m\',6);2m=2m.4N()&&2m||$(\'>88:eq(0)\',6);C a;u(!3V||T 3V==\'3m\'){a=$(\'1Y>a\',2m).eq((3V&&3V>0&&3V-1||0))}L u(T 3V==\'1V\'){a=$(\'1Y>a[@46$="#\'+3V+\'"]\',2m)}a.2f(cf)})}})(7H[i])}})(l);l.1k(l.fn,{b2:q(V){C N=1Q l.N(V,6);N.1w=6.3p(":44:2o(:3S):2o(:2R)").4R(q(){N.4t=6});u(N.F.7l){6.3S(q(S){u(N.F.3o)S.3W();B N.1X()})}u(N.F.S){N.1w.2P(N.F.S,q(){N.E(6)})}B N},1y:q(t){B 6.7f(l.3Y(6.2O(),t))},5G:q(Q){B 6.1z("[@U=\'"+Q+"\']")}});l.1k(l.2p[":"],{b8:"!l.39(a.G)",ba:"!!l.39(a.G)"});l.N=q(V,1X){6.F=l.1k({},l.N.4b,V);6.5I=1X[0];6.4g=6.F.5y;6.7N=6.4g.I&&6.4g||1X;6.2C=6.F.7k.2e(6.F.5y);6.2R()};l.1k(l.N,{4b:{3z:{},3f:"1n",80:14,7k:l([]),5y:l([]),7l:14},bc:q(F){l.1k(l.N.4b,F)},3z:{1m:"bd bf 3a 1m.",6M:"1H 1I a G 9g bi bk {0} 5r.",7Y:"1H 1I a G bm at bo {0} 5r.",7R:"1H 1I a G 7p {0} 7C {1} 5r bq.",5t:"1H 1I a 2U 5t bs.",1t:"1H 1I a 2U bu.",2q:"1H 1I a 2U 2q.",6U:"1H 1I a 2U 2q (bv).",6X:"7t 7r 7v 5o bx¼bz bB 5o.",3m:"1H 1I a 2U 3m.",7g:"7t 7r 7v bJ bL 5o.",5b:"1H 1I 9o 5b",6T:"1H 1I 7U bN G bP.",7D:"1H 1I a G 7p {0} 7C {1}.",6N:"1H 1I a G bS 7I 4M 7J 3M {0}.",7L:"1H 1I a G bW 7I 4M 7J 3M {0}."},5B:{1X:q(){6.5d();U(C i=0,E;E=6.1w[i++];){6.4e(E)}B 6.2U()},E:q(E){6.72(E);6.4e(E);6.3A()},3A:q(2T){u(2T)l.1k(6.2B,2T);6.F.3A?6.F.3A(6.2B,6):6.86()},5e:q(){u(l.fn.5e)l(6.5I).5e();6.5d();6.5C();6.1w.3i(6.F.3f)},3I:q(7m){B l(7m)[0]},2T:q(){B l("8h."+6.F.3f,6.7N)},2R:q(E){6.2B={};6.1S=$([]);6.2r=$([])},5d:q(){6.2R();6.2r=6.2T().1y(6.2C);6.1S.1y(6.2C)},72:q(E){6.2R();6.2r=6.2T().5G(6.48(6.3I(E)))},4e:q(E){E=6.3I(E);l(E).3i(6.F.3f);C 2a=6.2a(E);U(C i=0,1P;1P=2a[i++];){3G{C 2b=l.N.1l[1P.2c](l.39(E.G),E,1P.4W);u(2b===-1)34;u(!2b){l(E).2L(6.F.3f);6.7V(1P,E);34}}3F(e){6.F.3o&&1h.2V&&2V.1n("c5 c6 c8 c9 E "+E.Q+", 4e 7U \'"+1P.2c+"\' 2c");9F e}}},21:q(Q,1P){C m=6.F.3z[Q];B m&&(m.22==2I?m:m[1P.2c])},7V:q(1P,E){C Q=6.48(E),O=1P.4W;6.2B[Q]=(E.3x||6.21(Q,1P)||l.N.3z[1P.2c]||"<7X>cc: cd 21 ce U "+Q+"</7X>").1N("{0}",(O.22==3L?O[0]:O)||"").1N("{1}",O[1]||"")},2U:q(){u(6.82()){6.3A();B 1c}L{6.5C();u(6.F.81){6.F.81(6.5I);B 1c}B 14}},82:q(){C 4U=0;l.19(6.2B,q(){4U++});B 4U},5C:q(){6.3c("8f")},3c:q(5x){C 3k=6;q 4p(){B 3k["3M"+5x]}u(6.F.4x){4p().1y(4p().6t(6.F.4x))}4p()[5x.2t()]();B 6},86:q(){C 2D=14;U(C 4v 29 6.2B){u(2D&&6.F.80){u(6.4t&&6.2B[6.4t.Q])6.4t.4R();L{3G{C E=l("#"+4v);u(E.I)E[0].4R()}3F(e){6.F.3o&&1h.2V&&2V.1n(e)}}2D=1c}6.8g(4v,6.2B[4v])}6.2r=6.2r.2o(6.1S);6.3c("8f").3c("cw")},8g:q(Q,21){C 1n=6.2T().5G(Q);u(1n.I){u(1n.1v("8k")){1n.2i(21)}}L{1n=l("<8h>").1v({"U":Q,8k:14}).2L(6.F.3f).2i(21);u(6.F.4x){1n=1n.1D().1F().4i("<"+6.F.4x+">").1s()}u(!6.4g.3H(1n).I)6.F.6A?6.F.6A(1n,l("#"+Q)):1n.8n("#"+Q)}6.1S.1y(1n)},2a:q(E){u(!6.R(E))B[];C 2a=[];l.19(6.R(E),q(2S,G){2a[2a.I]={2c:2S,4W:G}});B 2a},R:q(E){B 6.F.2a?6.F.2a[6.48(E)]:6.F.6D?l(E).R()[6.F.6D]:l(E).R()},48:q(E){C Q=(/3U|4c/i.1q(E.H))?E.1g:E.Q;u(!Q){C 4X=E.1X.Q,4Y=/[^a-a7-2v-9\\-5K]/g;Q=E.Q=(4X?4X.1N(4Y,""):"")+E.1g.1N(4Y,"")}B Q}},3C:q(G,E){5c(E.1J.2t()){35\'3D\':B l("2k:3J",E).I;35\'44\':u(/3U|4c/i.1q(E.H))B l(E.1X||11).3p(\'[@1g="\'+E.1g+\'"]:4O\').I}B G.I},8i:q(O,E){B 6.5v[T O]?6.5v[T O](O,E):14},5v:{"6c":q(O,E){B O},"1V":q(O,E){B!!l(O,E.1X).I},"q":q(O,E){B O(E)}},1l:{1m:q(G,E,O){u(!l.N.8i(O,E))B-1;5c(E.1J.2t()){35\'3D\':C V=l("2k:3J",E);B V.I>0&&(E.H=="3D-ag"||V[0].G.I>0);35\'44\':5c(E.H.2t()){35\'4c\':35\'3U\':B l.N.3C(G,E)>0}an:B G.I>0}},cl:q(G,E,O){B!l.N.1l.1m(G,E)||O.1q(G)},7Y:q(G,E,O){C I=l.N.3C(G,E);B!l.N.1l.1m(G,E)||I>=O},6M:q(G,E,O){C I=l.N.3C(G,E);B!l.N.1l.1m(G,E)||I<=O},7R:q(G,E,O){C I=l.N.3C(G,E);B!l.N.1l.1m(G,E)||(I>=O[0]&&I<=O[1])},7L:q(G,E,O){B!l.N.1l.1m(G,E)||G>=O},6N:q(G,E,O){B!l.N.1l.1m(G,E)||G<=O},7D:q(G,E,O){B!l.N.1l.1m(G,E)||(G>=O[0]&&G<=O[1])},5t:q(G,E){B!l.N.1l.1m(G,E)||/^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$/i.1q(G)},1t:q(G,E){B!l.N.1l.1m(G,E)||/^(aA?|aC):\\/\\/[A-2v-9](\\.?[A-2v-5D„1xœ1x–][A-2v-5j\\-1x„1xœ1x–]*)*(\\/([A-2v-5D„1xœ1x–][A-2v-5j\\-\\.1x„1xœ1x–]*)?)*(\\?([A-2v-5D„1xœ1x–][A-2v-5j\\-\\.%\\+=&1x„1xœ1x–]*)?)?$/i.1q(G)},2q:q(G,E){B!l.N.1l.1m(G,E)||!/aK|8R/.1q(1Q 5m(G))},6U:q(G,E){B!l.N.1l.1m(G,E)||/^\\d{4}[/-]\\d{1,2}[/-]\\d{1,2}$/.1q(G)},6X:q(G,E){B!l.N.1l.1m(G,E)||/^\\d\\d?\\.\\d\\d?\\.\\d\\d\\d?\\d?$/.1q(G)},3m:q(G,E){B!l.N.1l.1m(G,E)||/^-?[,0-9]+(\\.\\d+)?$/.1q(G)},7g:q(G,E){B!l.N.1l.1m(G,E)||/^-?[\\.0-9]+(,\\d+)?$/.1q(G)},5b:q(G,E){B!l.N.1l.1m(G,E)||/^\\d+$/.1q(G)},6T:q(G,E,O){B G==l(""+O).1W()}},aV:q(1g,2c,21){l.N.1l[1g]=2c;l.N.3z[1g]=21}});(q(){q 2e(1g,2c){u(!3L.5B[1g]){3L.5B[1g]=2c}};2e("cQ",q(1B,27){27=27||1h;U(C i=0;i<6.I;i++)1B.3Z(27,6[i],i,6)});2e("cS",q(1B,27){27=27||1h;U(C i=0;i<6.I;i++)u(!1B.3Z(27,6[i],i,6))B 1c;B 14});2e("cT",q(1B,27){27=27||1h;U(C i=0;i<6.I;i++)u(1B.3Z(27,6[i],i,6))B 14;B 1c});2e("4E",q(1B,27){27=27||1h;C r=[];U(C i=0;i<6.I;i++)r[r.I]=1B.3Z(27,6[i],i,6);B r});2e("1z",q(1B,27){27=27||1h;C r=[];U(C i=0;i<6.I;i++)u(1B.3Z(27,6[i],i,6))r[r.I]=6[i];B r});2e("1O",q(ai,92){U(C i=92||0;i<6.I;i++)u(6[i]===ai)B i;B-1});2e("8A",q(){B 6.1z(q(E,2Z,8B){B 8B.1O(E)>=2Z})})})();(q($){C 2h,5U,3s,6O,23,91,5Q;$.fn.aX=q(F){F=$.1k({},18.d0.4b,F);u(!2h){2h=$(\'<26 Q="d1"><8C></8C><p 4F="1K"></p><p 4F="1t"></p></26>\').1D().K({2z:\'4l\',d3:"d4"}).5N(\'1K\');5U=$(\'8C\',2h);3s=$(\'p.1K\',2h);6O=$(\'p.1t\',2h)}$(6).1z(\'[@3x]\').19(q(){6.4j=F}).2P("51",ao).2P(F.S,6L);B 6};q 6L(S){u(6.4j.94)5Q=3j(1F,6.4j.94);L 1F();u(6.4j.b0)$(\'1K\').2P(\'9b\',4s);4s(S);$(6).2P(\'76\',1D)}q ao(){u(6==23||!6.3x)B;23=6;C 6k=$(6),F=6.4j;C 3x=91=6k.1v(\'3x\');6k.1v(\'3x\',\'\');u(F.cn){5U.1D();3s.2i(F.cn.3Z(6)).1F()}L u(F.95){C 9E=3x.4C(F.95);5U.2i(9E.7W()).1F();3s.6r();U(C i=0,9z;9z=9E[i];i++){u(i>0)3s.3H("<br/>");3s.3H(9z)}u(3s.2i())3s.1F();L 3s.1D()}L{5U.2i(3x);3s.1D()}C 46=(6k.1v(\'46\')||6k.1v(\'3B\'));u(F.b1&&46)6O.2i(46.1N(\'dn://\',\'\')).1F();L 6O.1D();u(F.69){2h.2L(F.69)}u(F.97&&$.1a.1C){2h.19(q(){u(6.4K.7a!=\'2n\'){C 4J=6.4K.7a;4J=4J.6R(5,4J.I-2);$(6).K({\'7a\':\'2n\',\'1z\':"ds:dt.az.dv(aB=14, dw=dy, 3B=\'"+4J+"\')"})}})}}q 1F(){5Q=1b;2h.1F();4s()}q 4s(S){u(23==1b){$(\'1K\').75(\'9b\',4s);B}C 2x=2h[0].8M;C 2F=2h[0].8P;u(S){2x=S.8L+15;2F=S.aH+15;2h.K({2x:2x+\'2s\',2F:2F+\'2s\'})}C v=aU(),h=2h[0];u(v.x+v.cx<h.8M+h.45){2x-=h.45+20;2h.K({2x:2x+\'2s\'})}u(v.y+v.cy<h.8P+h.2W){2F-=h.2W+20;2h.K({2F:2F+\'2s\'})}}q aU(){C e=11.3d||{},b=11.1K||{},w=1h;q 4G(){C v=dG;U(C i=0;i<18.I;i++){C n=18[i];u(n&&n<v)v=n}B v}B{x:w.8T||e.31||b.31||0,y:w.8U||e.2Y||b.2Y||0,cx:4G(e.62,b.62,w.8X),cy:4G(e.4n,b.4n,w.65)}}q 1D(){u(5Q)am(5Q);23=1b;2h.1D();u(6.4j.69){2h.3i(6.4j.69)}$(6).1v(\'3x\',91).75(\'76\',1D);u(6.4j.97&&$.1a.1C){2h.19(q(){$(6).K({\'1z\':\'\',7a:\'\'})})}}$.fn.aX.4b={94:ea,S:"51",b0:1c,b1:14,95:1b,69:1b,97:1c}})(l);l.1k(l.fn,{b2:q(V){C N=1Q l.N(V,6);N.1w=6.3p(":44:2o(:3S):2o(:2R)").4R(q(){N.4t=6});u(N.F.7l){6.3S(q(S){u(N.F.3o)S.3W();B N.1X()})}u(N.F.S){N.1w.2P(N.F.S,q(){N.E(6)})}B N},1y:q(t){B 6.7f(l.3Y(6.2O(),t))},5G:q(Q){B 6.1z("[@U=\'"+Q+"\']")}});l.1k(l.2p[":"],{b8:"!l.39(a.G)",ba:"!!l.39(a.G)"});l.N=q(V,1X){6.F=l.1k({},l.N.4b,V);6.5I=1X[0];6.4g=6.F.5y;6.7N=6.4g.I&&6.4g||1X;6.2C=6.F.7k.2e(6.F.5y);6.2R()};l.1k(l.N,{4b:{3z:{},3f:"1n",80:14,7k:l([]),5y:l([]),7l:14},bc:q(F){l.1k(l.N.4b,F)},3z:{1m:"bd bf 3a 1m.",6M:"1H 1I a G 9g bi bk {0} 5r.",7Y:"1H 1I a G bm at bo {0} 5r.",7R:"1H 1I a G 7p {0} 7C {1} 5r bq.",5t:"1H 1I a 2U 5t bs.",1t:"1H 1I a 2U bu.",2q:"1H 1I a 2U 2q.",6U:"1H 1I a 2U 2q (bv).",6X:"7t 7r 7v 5o bx¼bz bB 5o.",3m:"1H 1I a 2U 3m.",7g:"7t 7r 7v bJ bL 5o.",5b:"1H 1I 9o 5b",6T:"1H 1I 7U bN G bP.",7D:"1H 1I a G 7p {0} 7C {1}.",6N:"1H 1I a G bS 7I 4M 7J 3M {0}.",7L:"1H 1I a G bW 7I 4M 7J 3M {0}."},5B:{1X:q(){6.5d();U(C i=0,E;E=6.1w[i++];){6.4e(E)}B 6.2U()},E:q(E){6.72(E);6.4e(E);6.3A()},3A:q(2T){u(2T)l.1k(6.2B,2T);6.F.3A?6.F.3A(6.2B,6):6.86()},5e:q(){u(l.fn.5e)l(6.5I).5e();6.5d();6.5C();6.1w.3i(6.F.3f)},3I:q(7m){B l(7m)[0]},2T:q(){B l("8h."+6.F.3f,6.7N)},2R:q(E){6.2B={};6.1S=$([]);6.2r=$([])},5d:q(){6.2R();6.2r=6.2T().1y(6.2C);6.1S.1y(6.2C)},72:q(E){6.2R();6.2r=6.2T().5G(6.48(6.3I(E)))},4e:q(E){E=6.3I(E);l(E).3i(6.F.3f);C 2a=6.2a(E);U(C i=0,1P;1P=2a[i++];){3G{C 2b=l.N.1l[1P.2c](l.39(E.G),E,1P.4W);u(2b===-1)34;u(!2b){l(E).2L(6.F.3f);6.7V(1P,E);34}}3F(e){6.F.3o&&1h.2V&&2V.1n("c5 c6 c8 c9 E "+E.Q+", 4e 7U \'"+1P.2c+"\' 2c");9F e}}},21:q(Q,1P){C m=6.F.3z[Q];B m&&(m.22==2I?m:m[1P.2c])},7V:q(1P,E){C Q=6.48(E),O=1P.4W;6.2B[Q]=(E.3x||6.21(Q,1P)||l.N.3z[1P.2c]||"<7X>cc: cd 21 ce U "+Q+"</7X>").1N("{0}",(O.22==3L?O[0]:O)||"").1N("{1}",O[1]||"")},2U:q(){u(6.82()){6.3A();B 1c}L{6.5C();u(6.F.81){6.F.81(6.5I);B 1c}B 14}},82:q(){C 4U=0;l.19(6.2B,q(){4U++});B 4U},5C:q(){6.3c("8f")},3c:q(5x){C 3k=6;q 4p(){B 3k["3M"+5x]}u(6.F.4x){4p().1y(4p().6t(6.F.4x))}4p()[5x.2t()]();B 6},86:q(){C 2D=14;U(C 4v 29 6.2B){u(2D&&6.F.80){u(6.4t&&6.2B[6.4t.Q])6.4t.4R();L{3G{C E=l("#"+4v);u(E.I)E[0].4R()}3F(e){6.F.3o&&1h.2V&&2V.1n(e)}}2D=1c}6.8g(4v,6.2B[4v])}6.2r=6.2r.2o(6.1S);6.3c("8f").3c("cw")},8g:q(Q,21){C 1n=6.2T().5G(Q);u(1n.I){u(1n.1v("8k")){1n.2i(21)}}L{1n=l("<8h>").1v({"U":Q,8k:14}).2L(6.F.3f).2i(21);u(6.F.4x){1n=1n.1D().1F().4i("<"+6.F.4x+">").1s()}u(!6.4g.3H(1n).I)6.F.6A?6.F.6A(1n,l("#"+Q)):1n.8n("#"+Q)}6.1S.1y(1n)},2a:q(E){u(!6.R(E))B[];C 2a=[];l.19(6.R(E),q(2S,G){2a[2a.I]={2c:2S,4W:G}});B 2a},R:q(E){B 6.F.2a?6.F.2a[6.48(E)]:6.F.6D?l(E).R()[6.F.6D]:l(E).R()},48:q(E){C Q=(/3U|4c/i.1q(E.H))?E.1g:E.Q;u(!Q){C 4X=E.1X.Q,4Y=/[^a-a7-2v-9\\-5K]/g;Q=E.Q=(4X?4X.1N(4Y,""):"")+E.1g.1N(4Y,"")}B Q}},3C:q(G,E){5c(E.1J.2t()){35\'3D\':B l("2k:3J",E).I;35\'44\':u(/3U|4c/i.1q(E.H))B l(E.1X||11).3p(\'[@1g="\'+E.1g+\'"]:4O\').I}B G.I},8i:q(O,E){B 6.5v[T O]?6.5v[T O](O,E):14},5v:{"6c":q(O,E){B O},"1V":q(O,E){B!!l(O,E.1X).I},"q":q(O,E){B O(E)}},1l:{1m:q(G,E,O){u(!l.N.8i(O,E))B-1;5c(E.1J.2t()){35\'3D\':C V=l("2k:3J",E);B V.I>0&&(E.H=="3D-ag"||V[0].G.I>0);35\'44\':5c(E.H.2t()){35\'4c\':35\'3U\':B l.N.3C(G,E)>0}an:B G.I>0}},cl:q(G,E,O){B!l.N.1l.1m(G,E)||O.1q(G)},7Y:q(G,E,O){C I=l.N.3C(G,E);B!l.N.1l.1m(G,E)||I>=O},6M:q(G,E,O){C I=l.N.3C(G,E);B!l.N.1l.1m(G,E)||I<=O},7R:q(G,E,O){C I=l.N.3C(G,E);B!l.N.1l.1m(G,E)||(I>=O[0]&&I<=O[1])},7L:q(G,E,O){B!l.N.1l.1m(G,E)||G>=O},6N:q(G,E,O){B!l.N.1l.1m(G,E)||G<=O},7D:q(G,E,O){B!l.N.1l.1m(G,E)||(G>=O[0]&&G<=O[1])},5t:q(G,E){B!l.N.1l.1m(G,E)||/^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$/i.1q(G)},1t:q(G,E){B!l.N.1l.1m(G,E)||/^(aA?|aC):\\/\\/[A-2v-9](\\.?[A-2v-5D„1xœ1x–][A-2v-5j\\-1x„1xœ1x–]*)*(\\/([A-2v-5D„1xœ1x–][A-2v-5j\\-\\.1x„1xœ1x–]*)?)*(\\?([A-2v-5D„1xœ1x–][A-2v-5j\\-\\.%\\+=&1x„1xœ1x–]*)?)?$/i.1q(G)},2q:q(G,E){B!l.N.1l.1m(G,E)||!/aK|8R/.1q(1Q 5m(G))},6U:q(G,E){B!l.N.1l.1m(G,E)||/^\\d{4}[/-]\\d{1,2}[/-]\\d{1,2}$/.1q(G)},6X:q(G,E){B!l.N.1l.1m(G,E)||/^\\d\\d?\\.\\d\\d?\\.\\d\\d\\d?\\d?$/.1q(G)},3m:q(G,E){B!l.N.1l.1m(G,E)||/^-?[,0-9]+(\\.\\d+)?$/.1q(G)},7g:q(G,E){B!l.N.1l.1m(G,E)||/^-?[\\.0-9]+(,\\d+)?$/.1q(G)},5b:q(G,E){B!l.N.1l.1m(G,E)||/^\\d+$/.1q(G)},6T:q(G,E,O){B G==l(""+O).1W()}},aV:q(1g,2c,21){l.N.1l[1g]=2c;l.N.3z[1g]=21}});(q($){$.fn.2g=q(V){B 6.19(q(){$.2g(6,V)})};$.2g=q(1R,V){C F={\'5k\':1b,\'2g\':\'6j\',\'32\':ec,\'7z\':\'9r\',\'1r\':\'b3\',\'4F\':\'2g\',\'1i\':\'3X\'};u(V)$.1k(F,V);u(F.5k===1b)C 1w=$(1R).5k();L C 1w=$(1R).5k(F.5k);u(1w.I>1){$(1R).K(\'2z\',\'7i\');$(1R).K(\'1i\',F["1i"]);$(1R).2L(F["4F"]);U(C i=0;i<1w.I;i++){$(1w[i]).K(\'z-2Z\',2I(1w.I-i));$(1w[i]).K(\'2z\',\'4l\');$(1w[i]).1D()};u(F["2g"]=="6j"){3j(q(){$.2g.6J(1w,F,1,0)},F.32);$(1w[0]).1F()}L u(F["2g"]=="5w"){3j(q(){do{23=4k.bV(4k.5w()*1w.I)}2M(23==0)$.2g.6J(1w,F,23,0)},F.32);$(1w[0]).1F()}L 7K(\'l: 2g: 9u "2g" 9x 9B be "6j" 4M "5w"\')}};$.2g.6J=q(1w,F,23,2u){u(F["7z"]==\'bQ\'){$(1w[2u]).bA(F.1r,$(1w[23]).bD(F.1r))}L u(F["7z"]==\'9r\'){$(1w[2u]).bH(F.1r);$(1w[23]).bM(F.1r)}L 7K(\'l: 2g: 9u "7z" 9x 9B be "bQ" 4M "9r"\');u(F["2g"]=="6j"){u((23+1)<1w.I){23=23+1;2u=23-1}L{23=0;2u=1w.I-1}}L u(F["2g"]=="5w"){2u=23;2M(23==2u)23=4k.bV(4k.5w()*1w.I)}L 7K(\'l: 2g: 9u "2g" 9x 9B be "6j" 4M "5w"\');3j((q(){$.2g.6J(1w,F,23,2u)}),F.32)}})(l);(q($){$.3r=q(){6.42={};B};$.3r.5B={5V:q(){C P={"Q":1b,"4S":4w,"6H":1c,"6E":1c,"17":1b,"36":q(){},"28":[]};q 5L(fn){B(!!fn&&T fn!="1V"&&T fn[0]=="1e"&&4u("q","i").1q(fn+""))};C i=0;C 9N=1c;u(T 18[i]=="40"&&18.I>1){9N=14;i++}u(T 18[i]=="40"){U(C 2k 29 18[i])u(T P[2k]!="1e")P[2k]=18[i][2k];i++}u(T 18[i]=="3m"||(T 18[i]=="1V"&&18[i].2y(4u("^[0-9]+[cq]$"))))P["4S"]=18[i++];u(T 18[i]=="6c")P["6H"]=18[i++];u(T 18[i]=="6c")P["6E"]=18[i++];u(T 18[i]=="40"&&T 18[i+1]=="1V"&&5L(18[i][18[i+1]])){P["17"]=18[i++];P["36"]=18[i++]}L u(T 18[i]!="1e"&&(5L(18[i])||T 18[i]=="1V"))P["36"]=18[i++];2M(T 18[i]!="1e")P["28"].1y(18[i++]);u(9N){u(T 18[1]=="40"){U(C 2k 29 18[0])u(T P[2k]!="1e"&&T 18[1][2k]=="1e")P[2k]=18[0][2k]}L{U(C 2k 29 18[0])u(T P[2k]!="1e")P[2k]=18[0][2k]}i++}P["71"]=6;P["89"]=1b;C 2y=2I(P["4S"]).2y(4u("^([0-9]+)([cq])$"));u(2y&&2y[0]!="1e"&&2y[1]!="1e")P["4S"]=2I(1d(2y[1])*{s:4w,m:4w*60,h:4w*60*60,d:4w*60*60*24,w:4w*60*60*24*7}[2y[2]]);u(P["Q"]==1b)P["Q"]=(2I(P["6H"])+":"+2I(P["6E"])+":"+2I(P["4S"])+":"+2I(P["17"])+":"+2I(P["36"])+":"+2I(P["28"]));u(P["6E"])u(T 6.42[P["Q"]]!="1e")B 6.42[P["Q"]];u(!5L(P["36"])){u(P["17"]!=1b&&T P["17"]=="40"&&T P["36"]=="1V"&&5L(P["17"][P["36"]]))P["36"]=P["17"][P["36"]];L P["36"]=6G("q () { "+P["36"]+" }")}P["89"]=6.6I(P);6.42[P["Q"]]=P;B P},8F:q(P){u(T P=="1V")P=6.42[P];P["89"]=6.6I(P);B P},6I:q(P){C aS=q(){C 17=(P["17"]!=1b?P["17"]:P);(P["36"]).1A(17,P["28"]);u(T(P["71"]).42[P["Q"]]!="1e"&&P["6H"])(P["71"]).6I(P);L 66(P["71"]).42[P["Q"]]};B 3j(aS,P["4S"])},8J:q(P){u(T P=="1V")P=6.42[P];u(T P=="40"){am(P["89"]);66 6.42[P["Q"]]}}};$.1k({3r$:1Q $.3r(),5V:q(){B $.3r$.5V.1A($.3r$,18)},8F:q(){B $.3r$.8F.1A($.3r$,18)},8J:q(){B $.3r$.8J.1A($.3r$,18)}});$.fn.1k({5V:q(){C a=[{}];U(C i=0;i<18.I;i++)a.1y(18[i]);B 6.19(q(){a[0]={"Q":6,"17":6};B $.5V.1A($,a)})}})})(l);(q($){$.1k({5u$:1b,3o:q(aO){C aR=($.5u$==14?14:1c);$.5u$=(aO?14:1c);B aR},6b:q(21){u($.5u$==14)2V.3o(21)}});$.fn.1k({6b:q(21){u($.5u$==14){B 6.19(q(){u(T 21!=="1e")$.6b(21);$.6b(6)})}}});$(11).37(q(){C 7j=$("2i").1v("3o");u(7j=="14"||7j=="1c")$.3o(7j=="14"?14:1c)});$(11).37(q(){u(T 1h.2V==="1e"){q cz(17){C 1M=1b;u(T 17==="1e")1M="[1e]";L u(T 17==="6c")1M=(17?"14":"1c");L u(T 17==="3m")1M=""+17;L u(T 17==="1V")1M=17;L u(T 17==="q")1M=17;L u(T 17==="40"){u(T 17.33!=="1e"){u(17.33==1){1M=\'&9n;\';1M+=17.1J.2t();U(C i=0;i<17.9s.I;i++)1M+=\' \'+17.9s[i].1J.2t()+\'="\'+17.9s[i].6n+\'"\';1M+=\'&9t;\'}L u(17.33==2)1M=17.1J+\'="\'+17.6n;L u(17.33==3)1M=17.6n}L u(T 17.cg!=="1e")1M=17.cg();L u(T 17.5F!=="1e")1M=17.5F()}u(1M==1b)1M="[fm]";B 1M};$(11).37(q(){$("1K").3H(\'<26 Q="4H"><4B></4B></26>\');$("#4H").K("1G","2n").K("cX","d8").K("dh","#dl").K("du","#dz").K("6w","6V 5g 6V 5g").K("64","5T b5 #dI").K("77","5T 5T 5T 5T");$("#4H 4B").K("77","5g 5g 5g 5g").K("98","er")});C 90=["6b","3o","eI","eN","1n","eY","6l","f5","fd","fi","4S","fk","4U","cD","cH","cU"];1h.2V={};U(C i=0;i<90.I;i++){1h.2V[90[i]]=q(a8){$(\'#4H\').K("1G",$.5u$==14?"41":"2n");$(\'#4H 4B\').3H(\'<1Y>\'+cz(a8)+\'</1Y>\').K;$("#4H 4B 1Y").K("e7","52 b5 #eQ").K("6w","52 6V 52 6V")}}1h.2V["4H"]=14}})})(l);',62,954,'||||||this|||||||||||||||jQuery|||||function||||if|||||||return|var||element|settings|value|type|length|elem|css|else||validator|param|ctx|id|data|event|typeof|for|options||||||document|||true||prop|obj|arguments|each|browser|null|false|parseInt|undefined|ret|name|window|height|callback|extend|methods|required|error|parentNode|xml|test|speed|parent|url|cur|attr|elements|Ã|push|filter|apply|handler|msie|hide|style|show|display|Please|enter|nodeName|body|opacity|text|replace|indexOf|rule|new|container|toShow|tabs|status|string|val|form|li|hash||message|constructor|current||firstChild|div|scope|args|in|rules|result|method|width|add|trigger|alternation|helper|html|className|option|events|nav|none|not|expr|date|toHide|px|toLowerCase|last|Z0|expires|left|match|position|global|errorList|containers|first|hidden|top|isFunction|opt|String|context|arg|addClass|while|initial|get|bind|num|reset|key|errors|valid|console|offsetHeight|queue|scrollTop|index|animate|scrollLeft|timeout|nodeType|break|case|func|ready|safari|trim|is|old|toggle|documentElement|easing|errorClass|end|target|removeClass|setTimeout|self|table|number|elems|debug|find|disabled|scheduler|tBody|visible|params|ifModified|tbody|title|bookmarkable|messages|showErrors|src|getLength|select|complete|catch|try|append|clean|selected|opera|Array|to|nth|orig|done|span|innerHTML|submit|duration|radio|tab|preventDefault|auto|merge|call|object|block|bucket|pushStack|input|offsetWidth|href|nextSibling|findId|click|tb|defaults|checkbox|mozilla|check|cookie|labelContainer|selectedClass|wrap|tSettings|Math|absolute|script|clientHeight|remove|which|borderTopWidth|borderLeftWidth|update|lastActive|RegExp|elementID|1000|wrapper|overflow|load|clicked|ol|split|remote|map|class|min|jQueryDebug|firstNum|image|currentStyle|oid|or|size|checked|fix|returnValue|focus|time|encodeURIComponent|count|showAnim|parameters|formId|idcleanup|now||mouseover|1px|grep|timers|curAnim|boxModel|stopPropagation|oldblock|exec|guid|digits|switch|prepareForm|resetForm|custom|0px|makeArray|res|9_|children|location|Date|tmp|ein|success|re|characters|sibling|email|_debug|dependTypes|random|that|errorLabelContainer|cssFloat|insertBefore|prototype|hideErrors|9Ã|XMLHttpRequest|toString|forId|hideAnim|currentForm|onShow|_|_isfn|ajaxHistory|appendTo|Number|childNodes|tID|op|multiFilter|4px|tTitle|schedule|fx|handlers|on|originalEvent||removeChild|clientWidth|domain|border|innerHeight|delete|readyList|curCSS|extraClass|re2|log|boolean|parPos|ownerDocument|onreadystatechange|has|path|substr|sequence|source|dir|static|nodeValue|scroll|st|sl|empty|containerClass|parents|setInterval|domManip|padding|onClick|disabledClass|onHide|errorPlacement|locked|toUpperCase|meta|protect|trueClick|eval|repeat|_schedule|_next|styleFloat|handle|maxLength|maxValue|tUrl|inArray|absparent|substring|foundToken|equalTo|dateISO|10px|tr|dateDE|isReady|doc|child|_scheduler|prepareElement|Function|mergeNum|unbind|mouseout|margin|diff|parseFloat|backgroundImage|step|oldDisplay|defaultView|getTime|setArray|numberDE|ajax|relative|req|errorContainer|onsubmit|selector|modRes|token|between|handleError|geben|tag|Bitte|async|Sie|ival|lastModified|oWidth|animation|responseText|jquery|and|rangeValue|getAttribute|cloneNode|button|tabEvents|than|equal|alert|minValue|readyState|errorContext|secure|oHeight|max|rangeLength|setRequestHeader|tagName|the|formatAndAdd|shift|strong|minLength|expression|focusInvalid|submitHandler|countErrors|navClass|ajaxSettings|msie6|defaultShowErrors|minHeight|ul|_handle|visibility|cachedWidth|currentWidth|cachedFontSize|currentFontSize|Hide|showError|label|depend|toShowId|generated|hideClass|showSpeed|insertAfter|remoteUrls|switchTab|loadingClass|blur|disableTab|pos|deep|reverse|appendChild|clone|startTime|swap|unique|array|h3|isXMLDoc|second|reschedule|fn2|pass|classFilter|cancel|float|pageX|offsetLeft|triggered|slice|offsetTop|lastToggle|NaN|handleHover|pageXOffset|pageYOffset|getElementById|safariTimer|innerWidth|unload|els|names|oldTitle|offset|from|delay|showBody|lastNum|fixPNG|paddingRight|matched|GET|mousemove|getComputedStyle|00|_resort|chars|no|dataType|requestDone|active|file|Modified|getResponseHeader|lt|only|evalScripts|globalEval|fade|attributes|gt|parameter|join|cookies|must|clearInterval|part|cookieValue|either|isTimeout|relparent|parts|throw|paddingLeft|paddingTop|returnObject|bgiframe|createElement|hasSelectedClass|unFocus|override|inv|jq|sort|heights|font|watchFontSize|_setAutoHeight|cachedHeight|currentHeight|fxSpeed|fxSlide|fxFade|fxShow|fxHide|clientX|hideSpeed|scrollTo|scrollX|scrollY|zA|msg|triggerTab|enableTab|prevObject|100|exclude|force|getPropertyValue|multiple|newProp|subject|alpha|zoom||clearTimeout|default|save|webkit|prepend|before|after||removeAttr|previousSibling|contains|password|tl|Microsoft|https|enabled|ftp|parse|_prefix|even|odd|pageY|unshift|srcElement|Invalid|DOMContentLoaded|__ie_init|one|onoff|_toggle|state|old_value|trampoline|swing|viewport|addMethod|dequeue|Tooltip|timer|oldOverflow|track|showURL|validate|normal|getScript|solid|POST|processData|blank|ajaxStart|filled|contentType|setDefaults|This||field|beforeSend|ajaxSend|longer|notmodified|then||of|getElementsByTagName|least|ajaxStop|long||address||URL|ISO|ajaxError|gÃ|httpSuccess|ltiges|slideUp|Datum|200|slideDown|httpNotModified|Last|304|fadeOut|xmlRes|eine|httpData|Nummer|fadeIn|same|json|again|slide|execScript|less|ajaxComplete|ajaxSuccess|floor|greater|365|setTime|toGMTString|_height|_width|borderBottomWidth|paddingBottom|borderRightWidth|exception|occured|offsetParent|when|checking|marginLeft|marginTop|Warning|No|defined|tabEvent|toJSONString|iframe|hashPrefix|remoteCount|tabStruct|regex|fxAutoHeight|bodyHandler|behaviour|watch|smhdw|fxShowSpeed|fxHideSpeed||action|tempForm|Show|||object2text|siblings|Loading|8230|trace|There|such|initialize|profile|RSE|createTextNode|FORM|weight|line|Bottom|Right|Left|forEach|right|every|some|profileEnd|thead|tfoot|fontFamily|td|th|callee|tooltip|readOnly|zIndex|3000|getAttributeNode|setAttribute|ig|monospace|concat|navigator|userAgent|compatible|compatMode|next|prev|prependTo|backgroundColor|removeAttribute|toggleClass|lastChild|ffffff|textarea|http||u0128|uFFFF|continue|progid|DXImageTransform|color|AlphaImageLoader|sizingMethod|htmlFor|crop|000000|readonly|clientY|cancelBubble|fromElement|toElement|relatedTarget|Infinity|removeEventListener|666699|mousedown|mouseup|change|keydown|keypress|keyup|addEventListener|write|scr|ipt|dblclick|resize|defer|loaded|slideToggle|fadeTo|Object|slow|600|hover|fast|400|linear|cos|borderBottom|PI|10000|250|loadIfModified|2000|serialize|textContent|ActiveXObject|XMLHTTP|getIfModified|getJSON|post|ajaxTimeout||ajaxSetup|application|www|urlencoded||20px|open|Content|Type|If|Since|Thu|01|Jan|1970|GMT|Requested|With|overrideMimeType|Connection|close|abort|info|send|protocol|300|content|warn|Width|responseXML|cccccc|center|horizontal|vertical|YMWDhms|YMDWhms|noConflict|invalid|assert|decodeURIComponent|scrollHeight|scrollWidth|outerHeight|outerWidth|Top|dirxml|inline|bgIframe|javascript|frameborder|tabindex|Alpha|Opacity|group|CSS1Compat|loading|500|removeExpression|groupEnd|setExpression|timeEnd||unknown|'.split('|'),0,{}))
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 30 12:09:13 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 0D7DF7528EC; Fri, 30 Mar 2007 12:09:12 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ .cvsignore Makefile ase.cgi.main.pl devtool....
Message-Id: <20070330100913.0D7DF7528EC@mail.ossp.org>
Date: Fri, 30 Mar 2007 12:09:12 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Mar-2007 12:09:12
  Branch: HEAD                             Handle: 2007033011091200

  Modified files:
    ossp-pkg/ase            .cvsignore Makefile ase.cgi.main.pl devtool.conf

  Log:
    provide minimum installation procedure

  Summary:
    Revision    Changes     Path
    1.5         +1  -0      ossp-pkg/ase/.cvsignore
    1.6         +35 -0      ossp-pkg/ase/Makefile
    1.34        +1  -1      ossp-pkg/ase/ase.cgi.main.pl
    1.2         +6  -2      ossp-pkg/ase/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/.cvsignore
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 .cvsignore
  --- ossp-pkg/ase/.cvsignore	22 Mar 2007 18:39:16 -0000	1.4
  +++ ossp-pkg/ase/.cvsignore	30 Mar 2007 10:09:12 -0000	1.5
  @@ -3,3 +3,4 @@
   ase.db
   sample.db
   sample.log
  +shtool
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/Makefile
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 Makefile
  --- ossp-pkg/ase/Makefile	30 Mar 2007 09:45:10 -0000	1.5
  +++ ossp-pkg/ase/Makefile	30 Mar 2007 10:09:12 -0000	1.6
  @@ -1,4 +1,19 @@
   
  +DESTDIR =
  +PREFIX  = /tmp/ase
  +CGIDIR  = $(PREFIX)/cgi
  +BINDIR  = $(PREFIX)/bin
  +CFGDIR  = $(PREFIX)/etc/ase
  +LIBDIR  = $(PREFIX)/lib/ase
  +VARDIR  = $(PREFIX)/var/ase
  +DATDIR  = $(PREFIX)/share/ase
  +
  +SHTOOL  = ./shtool
  +SUBST   = -e 's;\(-path_cfgdir => .\)\.\(.\);\1$(CFGDIR)\2;' \
  +          -e 's;\(-path_libdir => .\)\.\(.\);\1$(LIBDIR)\2;' \
  +          -e 's;\(-path_datdir => .\)\.\(.\);\1$(DATDIR)\2;' \
  +          -e 's;\(-path_vardir => .\)\.\(.\);\1$(VARDIR)\2;'
  +
   ase.db: ase.cli ase.cli.db.pl ase.cli.db.sql
   	rm -f ase.db
   	./ase.cli db ase.db
  @@ -7,3 +22,23 @@
   clean:
   	-rm -f ase.db
   
  +install:
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(BINDIR)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(CGIDIR)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(CFGDIR)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(LIBDIR)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(DATDIR)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(VARDIR)
  +	$(SHTOOL) install -c -m 755 $(SUBST) ase.cgi $(DESTDIR)$(CGIDIR)/
  +	$(SHTOOL) install -c -m 755 $(SUBST) ase.cli $(DESTDIR)$(BINDIR)/ase
  +	$(SHTOOL) install -c -m 644 ase.cgi.* $(DESTDIR)$(LIBDIR)/
  +	$(SHTOOL) install -c -m 644 ase.cli.* $(DESTDIR)$(LIBDIR)/
  +	$(SHTOOL) install -c -m 644 ase.cfg $(DESTDIR)$(CFGDIR)/
  +	$(SHTOOL) install -c -m 644 ase.ui.*.gif $(DESTDIR)$(DATDIR)/
  +	$(SHTOOL) install -c -m 644 ase.ui.*.png $(DESTDIR)$(DATDIR)/
  +	$(SHTOOL) install -c -m 644 ase.ui.*.jpg $(DESTDIR)$(DATDIR)/
  +	$(SHTOOL) install -c -m 644 ase.ui.*.js $(DESTDIR)$(DATDIR)/
  +	$(SHTOOL) install -c -m 644 ase.ui.css $(DESTDIR)$(DATDIR)/
  +	$(SHTOOL) install -c -m 644 ase.ui.html $(DESTDIR)$(DATDIR)/
  +	$(SHTOOL) install -c -m 644 ase.api.pm $(DESTDIR)$(LIBDIR)/
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	30 Mar 2007 09:36:32 -0000	1.33
  +++ ossp-pkg/ase/ase.cgi.main.pl	30 Mar 2007 10:09:12 -0000	1.34
  @@ -135,7 +135,7 @@
           $html->folder('{#%s#}', '\{#([a-zA-Z_][a-zA-Z0-9_-]*)#\}');
   
           #   provide outer HTML canvas
  -        my $canvas_url       = $session->param("canvas_url")       || $cgi->param("canvas_url")       || "ase.ui.html";
  +        my $canvas_url       = $session->param("canvas_url")       || $cgi->param("canvas_url")       || $cfg->{-path_datdir} . "/ase.ui.html";
           my $canvas_mark_head = $session->param("canvas_mark_head") || $cgi->param("canvas_mark_head") || "<!-- ASE: HEAD -->";
           my $canvas_mark_body = $session->param("canvas_mark_body") || $cgi->param("canvas_mark_body") || "<!-- ASE: BODY -->";
           my ($canvas_type, undef, $canvas) = $self->fetch($canvas_url);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 devtool.conf
  --- ossp-pkg/ase/devtool.conf	29 Aug 2005 13:13:09 -0000	1.1
  +++ ossp-pkg/ase/devtool.conf	30 Mar 2007 10:09:12 -0000	1.2
  @@ -2,6 +2,12 @@
   ##  devtool.conf -- Development Tool Configuration
   ##
   
  +%autogen
  +    @autogen shtool 2.0.6  "2.0.*" all
  +
  +%autoclean
  +    @autoclean shtool
  +
   %release
       ./devtool version
       ./devtool tag
  @@ -30,8 +36,6 @@
   %dist
       echo "+++ removing old tarballs"
       rm -f ase-*.tar.gz
  -    echo "+++ changelog"
  -    cvs2cl --revisions --branches --tags --window 10 --utc --log-opts "-l"
       echo "+++ fixing"
       shtool fixperm -v .
       echo "+++ rolling"
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 30 12:12:26 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id ED8E27528EC; Fri, 30 Mar 2007 12:12:25 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ README VERSION ase.cgi ase.cli devtool.conf
Message-Id: <20070330101225.ED8E27528EC@mail.ossp.org>
Date: Fri, 30 Mar 2007 12:12:25 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Mar-2007 12:12:25
  Branch: HEAD                             Handle: 2007033011122500

  Modified files:
    ossp-pkg/ase            README VERSION ase.cgi ase.cli devtool.conf

  Log:
    update version

  Summary:
    Revision    Changes     Path
    1.7         +1  -1      ossp-pkg/ase/README
    1.3         +1  -1      ossp-pkg/ase/VERSION
    1.21        +1  -1      ossp-pkg/ase/ase.cgi
    1.2         +1  -1      ossp-pkg/ase/ase.cli
    1.3         +5  -5      ossp-pkg/ase/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/README
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 README
  --- ossp-pkg/ase/README	20 Mar 2007 17:36:42 -0000	1.6
  +++ ossp-pkg/ase/README	30 Mar 2007 10:12:25 -0000	1.7
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     \___/|___/\___| 
   
     OSSP ase - Affiliation Service Environment
  -  Version 0.1.8 (29-Aug-2005)
  +  Version 0.2.0 (30-Mar-2007)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/VERSION
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 VERSION
  --- ossp-pkg/ase/VERSION	29 Aug 2005 13:13:23 -0000	1.2
  +++ ossp-pkg/ase/VERSION	30 Mar 2007 10:12:25 -0000	1.3
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP ase (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP ase, Version 0.1.8 (29-Aug-2005)
  +  This is OSSP ase, Version 0.2.0 (30-Mar-2007)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 ase.cgi
  --- ossp-pkg/ase/ase.cgi	23 Mar 2007 08:49:30 -0000	1.20
  +++ ossp-pkg/ase/ase.cgi	30 Mar 2007 10:12:25 -0000	1.21
  @@ -35,7 +35,7 @@
       -prog_name   => 'OSSP ase',
       -prog_desc   => 'Affiliation Service Environment',
       -prog_vers   => '0.2.0',
  -    -prog_date   => '2007-03-23',
  +    -prog_date   => '30-Mar-2007',
       -path_cfgdir => '.',
       -path_libdir => '.',
       -path_vardir => '.',
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cli
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ase.cli
  --- ossp-pkg/ase/ase.cli	30 Mar 2007 09:45:10 -0000	1.1
  +++ ossp-pkg/ase/ase.cli	30 Mar 2007 10:12:25 -0000	1.2
  @@ -35,7 +35,7 @@
       -prog_name   => 'OSSP ase',
       -prog_desc   => 'Affiliation Service Environment',
       -prog_vers   => '0.2.0',
  -    -prog_date   => '2007-03-23',
  +    -prog_date   => '30-Mar-2007',
       -path_cfgdir => '.',
       -path_libdir => '.',
       -path_vardir => '.',
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.conf
  --- ossp-pkg/ase/devtool.conf	30 Mar 2007 10:09:12 -0000	1.2
  +++ ossp-pkg/ase/devtool.conf	30 Mar 2007 10:12:25 -0000	1.3
  @@ -20,12 +20,12 @@
   	sed -e "s/Version .*/Version $V/g" <README >README.n && mv README.n README
       V=`shtool version -l txt -dlong VERSION | sed -e 's/ .*$//'`
       D=`shtool version -l txt -dlong VERSION | sed -e 's/^.*(//' -e 's/).*$//'`
  -    sed -e "s/-prog_vers => '.*',/-prog_vers => '$V',/" \
  -        -e "s/-prog_date => '.*',/-prog_date => '$D',/" \
  +    sed -e "s/-prog_vers   => '.*',/-prog_vers   => '$V',/" \
  +        -e "s/-prog_date   => '.*',/-prog_date   => '$D',/" \
              <ase.cgi >ase.cgi.n && mv ase.cgi.n ase.cgi
  -    sed -e "s/-prog_vers => '.*',/-prog_vers => '$V',/" \
  -        -e "s/-prog_date => '.*',/-prog_date => '$D',/" \
  -           <ase.pl >ase.pl.n && mv ase.pl.n ase.pl
  +    sed -e "s/-prog_vers   => '.*',/-prog_vers   => '$V',/" \
  +        -e "s/-prog_date   => '.*',/-prog_date   => '$D',/" \
  +           <ase.cli >ase.cli.n && mv ase.cli.n ase.cli
   
   %tag
   	V=`shtool version -l txt -dshort VERSION | sed -e 's;\.;_;g'`
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 30 12:15:44 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id D559E7528EC; Fri, 30 Mar 2007 12:15:43 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ devtool.conf
Message-Id: <20070330101543.D559E7528EC@mail.ossp.org>
Date: Fri, 30 Mar 2007 12:15:43 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Mar-2007 12:15:43
  Branch: HEAD                             Handle: 2007033011154200

  Modified files:
    ossp-pkg/ase            devtool.conf

  Log:
    ignore log and database files

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/ase/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.conf
  --- ossp-pkg/ase/devtool.conf	30 Mar 2007 10:12:25 -0000	1.3
  +++ ossp-pkg/ase/devtool.conf	30 Mar 2007 10:15:42 -0000	1.4
  @@ -41,7 +41,7 @@
       echo "+++ rolling"
       V=`shtool version -l txt -dshort VERSION`
       shtool tarball -o ase-${V}.tar.gz -d ase-${V} -u ossp -g ossp \
  -                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*,*.tar.gz,^#.*,.*~$,*.bak,00TODO,autom4te\.cache,^[0-9]\.*' \
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*,*.tar.gz,^#.*,.*~$,*.bak,*.log,*.db,00TODO,autom4te\.cache,^[0-9]\.*' \
                        -c 'gzip --best' .
       ls -l ase-${V}.tar.gz
       echo "+++ testing"
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 30 12:17:53 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 09F6A7528ED; Fri, 30 Mar 2007 12:17:53 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ devtool.conf
Message-Id: <20070330101753.09F6A7528ED@mail.ossp.org>
Date: Fri, 30 Mar 2007 12:17:53 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Mar-2007 12:17:53
  Branch: HEAD                             Handle: 2007033011175200

  Modified files:
    ossp-pkg/ase            devtool.conf

  Log:
    fix permissions

  Summary:
    Revision    Changes     Path
    1.5         +2  -2      ossp-pkg/ase/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 devtool.conf
  --- ossp-pkg/ase/devtool.conf	30 Mar 2007 10:15:42 -0000	1.4
  +++ ossp-pkg/ase/devtool.conf	30 Mar 2007 10:17:52 -0000	1.5
  @@ -22,10 +22,10 @@
       D=`shtool version -l txt -dlong VERSION | sed -e 's/^.*(//' -e 's/).*$//'`
       sed -e "s/-prog_vers   => '.*',/-prog_vers   => '$V',/" \
           -e "s/-prog_date   => '.*',/-prog_date   => '$D',/" \
  -           <ase.cgi >ase.cgi.n && mv ase.cgi.n ase.cgi
  +           <ase.cgi >ase.cgi.n && mv ase.cgi.n ase.cgi && chmod a+x ase.cgi
       sed -e "s/-prog_vers   => '.*',/-prog_vers   => '$V',/" \
           -e "s/-prog_date   => '.*',/-prog_date   => '$D',/" \
  -           <ase.cli >ase.cli.n && mv ase.cli.n ase.cli
  +           <ase.cli >ase.cli.n && mv ase.cli.n ase.cli && chmod a+x ase.cli
   
   %tag
   	V=`shtool version -l txt -dshort VERSION | sed -e 's;\.;_;g'`
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 30 12:26:01 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id A314F7528EC; Fri, 30 Mar 2007 12:26:01 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.scode.pl
Message-Id: <20070330102601.A314F7528EC@mail.ossp.org>
Date: Fri, 30 Mar 2007 12:26:01 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Mar-2007 12:26:01
  Branch: HEAD                             Handle: 2007033011260100

  Modified files:
    ossp-pkg/ase            ase.cgi.scode.pl

  Log:
    leave out a few very hard to distinguish combinations

  Summary:
    Revision    Changes     Path
    1.13        +2  -2      ossp-pkg/ase/ase.cgi.scode.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.scode.pl
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 ase.cgi.scode.pl
  --- ossp-pkg/ase/ase.cgi.scode.pl	30 Mar 2007 08:45:29 -0000	1.12
  +++ ossp-pkg/ase/ase.cgi.scode.pl	30 Mar 2007 10:26:01 -0000	1.13
  @@ -49,8 +49,8 @@
       undef $uuid;
   
       #   generate new Security Code Number
  -    #   (notice: "0" and "O" are too hard to distinguish, so left out)
  -    my $scode_num = $self->makerandom(6, "1-9A-NP-Z");
  +    #   (notice: "0"/"O", "2"/"Z", and "5"/"S" are too hard to quickly distinguish, so left out)
  +    my $scode_num = $self->makerandom(6, "1346-9A-NP-RT-Y");
   
       #   determine expiry time
       my $scode_expiry = $self->datetime(time() + 4*60*60);
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 30 12:42:25 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 501F57528EC; Fri, 30 Mar 2007 12:42:25 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO ase.api.pm ase.cgi.rpc.pl
Message-Id: <20070330104225.501F57528EC@mail.ossp.org>
Date: Fri, 30 Mar 2007 12:42:25 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Mar-2007 12:42:25
  Branch: HEAD                             Handle: 2007033011422400

  Modified files:
    ossp-pkg/ase            TODO ase.api.pm ase.cgi.rpc.pl

  Log:
    ok, fill attributes

  Summary:
    Revision    Changes     Path
    1.46        +1  -2      ossp-pkg/ase/TODO
    1.2         +27 -24     ossp-pkg/ase/ase.api.pm
    1.16        +19 -8      ossp-pkg/ase/ase.cgi.rpc.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.45 -r1.46 TODO
  --- ossp-pkg/ase/TODO	30 Mar 2007 09:48:17 -0000	1.45
  +++ ossp-pkg/ase/TODO	30 Mar 2007 10:42:24 -0000	1.46
  @@ -1,11 +1,10 @@
   
   TODO:
  -- DBIx::Simple error cases review
  -- ase.api.pm: fill in "attr" stuff from results instead of returning pieces
   - heartbeat -> disable
   - cron: active (on every login), mail, inactive (after n months), mail, deleted
   
   CANDO:
  +- DBIx::Simple error cases review
   - check URL fetching and its caching because of DBIx::Simple:
     http://cvs.ossp.org/filediff?f=ossp-pkg/ase/ase.cgi.util.pl&v1=1.15&v2=1.16
     It could be that the "DBI::SQL_BLOB" is important!!! But DBIx::Simple
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.api.pm
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ase.api.pm
  --- ossp-pkg/ase/ase.api.pm	30 Mar 2007 09:48:17 -0000	1.1
  +++ ossp-pkg/ase/ase.api.pm	30 Mar 2007 10:42:24 -0000	1.2
  @@ -36,6 +36,24 @@
   our @EXPORT_OK = ();
   our @EXPORT    = ();
   
  +#   names of valid ASE session attributes
  +my @valid_attributes = qw(
  +    session-id
  +    session-valid
  +    session-created
  +    session-expires
  +    canvas-url
  +    canvas-mark-head
  +    canvas-mark-body
  +    client-address
  +    client-login-uuid
  +    client-login-name
  +    client-login-nick
  +    client-login-addr
  +    authentication-success
  +    authentication-error
  +);
  +
   #   textual markers for canvas
   my $canvas_mark = {
       head => "<!-- ASE: HEAD -->",
  @@ -265,22 +283,6 @@
   sub validate ($) {
       my ($self, $forced) = @_;
   
  -    #   names of valid ASE session attributes
  -    my @valid_attributes = qw(
  -        session-id
  -        session-valid
  -        session-created
  -        session-expires
  -        canvas-url
  -        canvas-mark-head
  -        canvas-mark-body
  -        client-address
  -        client-login-uuid
  -        client-login-name
  -        client-login-nick
  -        client-login-addr
  -    );
  -
       #   make sure there is a session to be validated
       my $sid = $self->attr("session-id");
       return if (not defined($sid));
  @@ -401,17 +403,18 @@
       #   parse session information response
       my $attribute = {};
       $response =~ s|^HTTP/1.[01x]\s+200\s+.+?\r?\n\r?\n||s;
  -    foreach my $key (qw(client-login-auth client-login-uuid client-login-error)) {
  +    foreach my $key (@valid_attributes) {
           $attribute->{$key} = "";
           $response =~ s|${key}:[ \t]+([^\r\n]+)\r?\n|$attribute->{$key} = $1, ''|sei;
       }
   
  -    #   provide results
  -    return (
  -        $attribute->{"client-login-auth"} eq "yes" ? 1 : 0, 
  -        $attribute->{"client-login-uuid"}  || "",
  -        $attribute->{"client-login-error"} || ""
  -    );
  +    #   take over session attributes
  +    foreach my $key (@valid_attributes) {
  +        $self->attr($key, $attribute->{$key});
  +    }
  +
  +    #   return authentication result
  +    return ($attribute->{"authentication-success"} eq "yes" ? 1 : 0);
   }
   
   #   self-referencing URL generator
  @@ -559,7 +562,7 @@
   
   FIXME
   
  -=item C<($authenticated, $uuid, $error) = $ase-E<gt>authenticate($login, $password);>
  +=item C<$ase-E<gt>authenticate($login, $password);>
   
   FIXME
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.rpc.pl
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 ase.cgi.rpc.pl
  --- ossp-pkg/ase/ase.cgi.rpc.pl	30 Mar 2007 07:58:10 -0000	1.15
  +++ ossp-pkg/ase/ase.cgi.rpc.pl	30 Mar 2007 10:42:24 -0000	1.16
  @@ -100,6 +100,8 @@
               $response->{"Client-Login-Name"} = $rec->{"me_name"}        || "unknown";
               $response->{"Client-Login-Nick"} = $rec->{"me_nickname"}    || "";
               $response->{"Client-Login-Addr"} = $rec->{"me_address"}     || "";
  +            $response->{"Authentication-Success"} = "yes";
  +            $response->{"Authentication-Error"} = "";
           }
   
           #   generate response
  @@ -121,15 +123,24 @@
           my ($authenticated, $rec, $error) = $self->authenticate($login, $password);
   
           #   generate response
  -        my $response = '';
  -        $response .= "Client-Login-Auth: " . ($authenticated ? "yes" : "no") . "\n";
  -        $response .= "Client-Login-Name: " . (defined $rec ? $rec->{"me_name"} : "none"). "\n";
  -        $response .= "Client-Login-Nick: " . (defined $rec ? ($rec->{"me_nickname"} || "none") : "none"). "\n";
  -        $response .= "Client-Login-Addr: " . (defined $rec ? $rec->{"me_address"} : "none"). "\n";
  -        $response .= "Client-Login-UUID: " . (defined $rec ? $rec->{"me_uuid"} : "none"). "\n";
  -        $response .= "Client-Login-Error: " . (defined $error ? $error : "none") . "\n";
  +        my $response = {};
  +        $response->{"Session-Valid"} = "no";
  +        $response->{"Authentication-Success"} = ($authenticated ? "yes" : "no");
  +        $response->{"Authentication-Error"} = (defined $error ? $error : "none");
  +        $response->{"Client-Login-UUID"} = (defined $rec ? $rec->{"me_uuid"} : "unknown");
  +        $response->{"Client-Login-Name"} = (defined $rec ? $rec->{"me_name"} : "unknown");
  +        $response->{"Client-Login-Nick"} = (defined $rec ? ($rec->{"me_nickname"} || "") : "");
  +        $response->{"Client-Login-Addr"} = (defined $rec ? $rec->{"me_address"} : "");
  +
  +        #   generate response
  +        my $content = '';
  +        foreach my $key (sort keys %{$response}) {
  +            if (defined($response->{$key})) {
  +                $content .= sprintf("%s: %s\n", $key, $response->{$key});
  +            }
  +        }
           $self->header_props(-type => "text/plain", -expires => "+1m");
  -        return $response;
  +        return $content;
       }
   }
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 30 13:48:54 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 78F3C7528ED; Fri, 30 Mar 2007 13:48:54 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.enroll.pl ase.cgi.login.pl ase.cgi.r...
Message-Id: <20070330114854.78F3C7528ED@mail.ossp.org>
Date: Fri, 30 Mar 2007 13:48:54 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Mar-2007 13:48:54
  Branch: HEAD                             Handle: 2007033012485300

  Modified files:
    ossp-pkg/ase            ase.cgi.enroll.pl ase.cgi.login.pl
                            ase.cgi.recover.pl ase.cli.db.sql

  Log:
    cleanup the account locking

  Summary:
    Revision    Changes     Path
    1.42        +3  -3      ossp-pkg/ase/ase.cgi.enroll.pl
    1.36        +10 -21     ossp-pkg/ase/ase.cgi.login.pl
    1.15        +11 -2      ossp-pkg/ase/ase.cgi.recover.pl
    1.2         +10 -15     ossp-pkg/ase/ase.cli.db.sql
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.41 -r1.42 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	30 Mar 2007 09:23:37 -0000	1.41
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	30 Mar 2007 11:48:53 -0000	1.42
  @@ -514,12 +514,12 @@
       $dbi->query(q{
           INSERT INTO ase_member
           (me_uuid, me_name, me_nickname, me_address,
  -         me_account_status, me_membership_karma, me_membership_prop, me_membership_type,
  +         me_membership_karma, me_membership_prop, me_membership_type,
            me_membership_start, me_membership_end,
            me_access_pw_sha1, me_access_pw_md5, me_access_pw_cryptmd5, me_access_pw_cryptdes)
  -        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
  +        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
       },  $uuid, $rec->{en_name}, $rec->{en_nickname}, $rec->{en_address},
  -        1, 1, "", "N", $t_start, $t_end,
  +        1, "", "N", $t_start, $t_end,
           $rec->{en_pw_sha1}, $rec->{en_pw_md5}, $rec->{en_pw_cryptmd5}, $rec->{en_pw_cryptdes},
       ) or die $dbi->error();
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	30 Mar 2007 09:23:37 -0000	1.35
  +++ ossp-pkg/ase/ase.cgi.login.pl	30 Mar 2007 11:48:53 -0000	1.36
  @@ -299,17 +299,10 @@
       }
       $rec = $rec[0];
   
  -    #   check account status
  -    if ($rec->{"me_account_status"} == 3) {
  -        #   account is disabled
  -        $error = "Account disabled" .
  -            ($rec->{"me_account_status_reason"} ? " (" . $rec->{"me_account_status_reason"} . ")" : "");
  -        goto CLEANUP;
  -    }
  -    if ($rec->{"me_account_lock"}) {
  -        my $locked_until = $self->datetime2time($rec->{"me_account_lock"});
  +    #   check for locked account status
  +    if (defined $rec->{"me_account_lock_expiry"} and defined $rec->{"me_account_lock_reason"}) {
  +        my $locked_until = $self->datetime2time($rec->{"me_account_lock_expiry"});
           if ($locked_until > time()) {
  -            #   account is still locked
               $error = "Account temporarily locked for " .
                   $self->time2human($locked_until - time()) .
                   ($rec->{"me_account_lock_reason"} ? " (" . $rec->{"me_account_lock_reason"} . ")" : "");
  @@ -364,7 +357,8 @@
               if (($count || 0) > $N) {
                   $dbi->query(q{
                       UPDATE ase_member
  -                    SET    me_account_lock = ?,
  +                    SET    me_account_lock_expiry = ?,
  +                           me_account_lock_origin = 'intrusion',
                              me_account_lock_reason = ?
                       WHERE  me_uuid = ?;
                   }, $t2, "$N failed authentications within $M minutes", $rec->{"me_uuid"}
  @@ -380,17 +374,12 @@
               #   clear locking
               $dbi->query(q{
                   UPDATE ase_member
  -                SET    me_account_lock = NULL,
  +                SET    me_account_lock_expiry = NULL,
  +                       me_account_lock_origin = NULL,
                          me_account_lock_reason = NULL
  -                WHERE  me_uuid = ?;
  -            }, $rec->{"me_uuid"}) or die $dbi->error();
  -
  -            #   make account active in case it was inactive
  -            $dbi->query(q{
  -                UPDATE ase_member
  -                SET    me_account_status = 1
  -                WHERE  me_account_status = 2 AND
  -                       me_uuid = ?;
  +                WHERE  me_uuid = ? AND
  +                       me_account_lock_expiry NOT NULL AND
  +                       me_account_lock_origin = 'intrusion';
               }, $rec->{"me_uuid"}) or die $dbi->error();
           }
       }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.recover.pl
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 ase.cgi.recover.pl
  --- ossp-pkg/ase/ase.cgi.recover.pl	30 Mar 2007 09:23:37 -0000	1.14
  +++ ossp-pkg/ase/ase.cgi.recover.pl	30 Mar 2007 11:48:53 -0000	1.15
  @@ -458,13 +458,13 @@
           #   generate the form buttons
           $html >> "button-recover";
           $html .= $cgi->submit(
  -            -class   => 'button_red',
  +            -class   => 'button',
               -id      => 'button_cancel',
               -name    => 'button.cancel',
               -value   => 'Cancel',
           );
           $html .= $cgi->submit(
  -            -class   => 'button_green',
  +            -class   => 'button',
               -id      => 'button_recover',
               -name    => 'button.recover',
               -value   => 'Recover',
  @@ -552,6 +552,15 @@
               DELETE FROM ase_recovery WHERE re_key = ?;
           }, $re_key) or die $dbi->error();
   
  +        #   clear locking
  +        $dbi->query(q{
  +            UPDATE ase_member
  +            SET    me_account_lock_expiry = NULL,
  +                   me_account_lock_origin = NULL,
  +                   me_account_lock_reason = NULL
  +            WHERE  me_uuid = ?;
  +        }, $me_uuid) or die $dbi->error();
  +
           #   send notifications
           $self->notify($me_uuid);
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cli.db.sql
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ase.cli.db.sql
  --- ossp-pkg/ase/ase.cli.db.sql	30 Mar 2007 09:45:11 -0000	1.1
  +++ ossp-pkg/ase/ase.cli.db.sql	30 Mar 2007 11:48:53 -0000	1.2
  @@ -60,18 +60,15 @@
                                  -- [Ralf S. Engelschall]
   
       -- Account Details
  -    me_account_status          CHAR(1) NOT NULL,
  -                               -- Account Status Level: 1=active, 2=inactive, 3=disabled
  -                               -- [1]
  -    me_account_status_reason   TEXT,
  -                               -- Account Status Reason
  -                               -- [inactivity for N months]
  -    me_account_lock            INTEGER,
  -                               -- Account Temporary Lock Expiry Time
  -                               -- [20050225000000]
  +    me_account_lock_origin     TEXT,
  +                               -- Account Temporary Lock Origin
  +                               -- [heartbeat]
       me_account_lock_reason     TEXT,
                                  -- Account Temporary Lock Reason
                                  -- [N failed logins within M minutes]
  +    me_account_lock_expiry     INTEGER,
  +                               -- Account Temporary Lock Expiry Time
  +                               -- [20050225000000]
   
       -- Membership Details
       me_membership_karma        INTEGER NOT NULL,
  @@ -243,10 +240,9 @@
       me_nickname                TEXT,
       me_address                 TEXT UNIQUE NOT NULL,
       me_name                    TEXT,
  -    me_account_status          CHAR(1) NOT NULL,
  -    me_account_status_reason   TEXT,
  -    me_account_lock            INTEGER,
  +    me_account_lock_origin     TEXT,
       me_account_lock_reason     TEXT,
  +    me_account_lock_expiry     INTEGER,
       me_membership_karma        INTEGER NOT NULL,
       me_membership_prop         CHAR(4) NOT NULL,
       me_membership_type         CHAR(1) NOT NULL,
  @@ -264,10 +260,9 @@
       "",                        -- me_nickname: added
       me_address,
       me_name,
  -    1,                         -- me_account_status: added
  -    NULL,                      -- me_account_status_reason: added
  -    NULL,                      -- me_account_lock: added
  +    NULL,                      -- me_account_lock_origin: added
       NULL,                      -- me_account_lock_reason: added
  +    NULL,                      -- me_account_lock_expiry: added
       me_membership_status,      -- renamed to me_membership_karma
       "",                        -- me_membership_prop: added
       me_membership_type,
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 30 20:24:30 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 7A5BE7528ED; Fri, 30 Mar 2007 20:24:30 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ChangeLog TODO ase.cfg ase.cgi ase.cgi.cron....
Message-Id: <20070330182430.7A5BE7528ED@mail.ossp.org>
Date: Fri, 30 Mar 2007 20:24:30 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Mar-2007 20:24:30
  Branch: HEAD                             Handle: 2007033019242801

  Added files:
    ossp-pkg/ase            ase.cgi.cron.pl ase.cgi.heartbeat.pl
  Modified files:
    ossp-pkg/ase            ChangeLog TODO ase.cfg ase.cgi ase.cgi.enroll.pl
                            ase.cgi.login.pl ase.cgi.main.pl
                            ase.cgi.recover.pl ase.cli ase.cli.db.sql
                            ase.ui.css
  Removed files:
    ossp-pkg/ase            ase.cli.cron.pl

  Log:
    Add first cut for "heartbeat" functionality which allows us to
    automatically get rid of ancient accounts.

  Summary:
    Revision    Changes     Path
    1.15        +4  -0      ossp-pkg/ase/ChangeLog
    1.47        +0  -2      ossp-pkg/ase/TODO
    1.13        +6  -0      ossp-pkg/ase/ase.cfg
    1.22        +2  -0      ossp-pkg/ase/ase.cgi
    1.1         +63 -0      ossp-pkg/ase/ase.cgi.cron.pl
    1.43        +8  -6      ossp-pkg/ase/ase.cgi.enroll.pl
    1.1         +307 -0     ossp-pkg/ase/ase.cgi.heartbeat.pl
    1.37        +2  -2      ossp-pkg/ase/ase.cgi.login.pl
    1.35        +4  -1      ossp-pkg/ase/ase.cgi.main.pl
    1.16        +6  -2      ossp-pkg/ase/ase.cgi.recover.pl
    1.3         +1  -3      ossp-pkg/ase/ase.cli
    1.2         +0  -97     ossp-pkg/ase/ase.cli.cron.pl
    1.3         +15 -0      ossp-pkg/ase/ase.cli.db.sql
    1.2         +1  -1      ossp-pkg/ase/ase.ui.css
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 ChangeLog
  --- ossp-pkg/ase/ChangeLog	30 Mar 2007 09:48:17 -0000	1.14
  +++ ossp-pkg/ase/ChangeLog	30 Mar 2007 18:24:28 -0000	1.15
  @@ -13,6 +13,10 @@
   
     Changes between 0.1.x and 0.2.0 (xx-Oct-2005 to 20-Mar-2007)
   
  +   o Add "heartbeat" functionality which allows us to
  +     automatically get rid of ancient accounts.
  +     [Ralf S. Engelschall]
  +
      o Reorganized filesystem structure by bundling related parts
        together into their own ase.XXX.* namespace.
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.46 -r1.47 TODO
  --- ossp-pkg/ase/TODO	30 Mar 2007 10:42:24 -0000	1.46
  +++ ossp-pkg/ase/TODO	30 Mar 2007 18:24:28 -0000	1.47
  @@ -1,7 +1,5 @@
   
   TODO:
  -- heartbeat -> disable
  -- cron: active (on every login), mail, inactive (after n months), mail, deleted
   
   CANDO:
   - DBIx::Simple error cases review
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cfg
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 ase.cfg
  --- ossp-pkg/ase/ase.cfg	30 Mar 2007 08:51:28 -0000	1.12
  +++ ossp-pkg/ase/ase.cfg	30 Mar 2007 18:24:28 -0000	1.13
  @@ -32,6 +32,12 @@
   login-failures-max          3;
   login-failures-time-range   2m;
   login-failures-time-penalty 10m;
  +#heartbeat-interval          6M;
  +#heartbeat-reminders         28d 14d 7d 1d;
  +#heartbeat-graceperiod       14d;
  +heartbeat-interval          15m;
  +heartbeat-reminders         8m 4m 2m 1m;
  +heartbeat-graceperiod       2m;
   instant-notification-urls   "http://localhost/ase/sample.cgi?mode=notify;uuid=%s";
   blacklist-email             q{\@temporaryinbox\.com$}
                               q{\@put2\.net$}
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 ase.cgi
  --- ossp-pkg/ase/ase.cgi	30 Mar 2007 10:12:25 -0000	1.21
  +++ ossp-pkg/ase/ase.cgi	30 Mar 2007 18:24:28 -0000	1.22
  @@ -92,6 +92,8 @@
   require "$dir/ase.cgi.profile.pl";      # application workflow: profile
   require "$dir/ase.cgi.resign.pl";       # application workflow: resign
   require "$dir/ase.cgi.menu.pl";         # application workflow: menu
  +require "$dir/ase.cgi.cron.pl";         # application workflow: cron
  +require "$dir/ase.cgi.heartbeat.pl";    # application workflow: heartbeat
   
   #   main procedure
   my $app = new OSSP::ase::server ($cfg);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.cron.pl
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ase.cgi.cron.pl
  --- /dev/null	2007-03-30 20:23:29 +0200
  +++ ase.cgi.cron.pl	2007-03-30 20:24:29 +0200
  @@ -0,0 +1,63 @@
  +##
  +##  OSSP ase -- Affiliation Service Environment
  +##  Copyright (c) 2005-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2005-2007 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP ase, a service environment for managing
  +##  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  +##
  +##  This program is free software; you can redistribute it and/or modify
  +##  it under the terms of the GNU General Public License as published by
  +##  the Free Software Foundation; either version 2 of the License, or
  +##  (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this program; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  ase.cgi.cron.pl: cron tasks
  +##
  +
  +package OSSP::ase::server;
  +use base 'CGI::Application';
  +use strict;
  +use warnings;
  +
  +sub mode_cron {
  +    my $self = shift;
  +    my $cfg  = $self->param(-cfg);
  +    my $cgi  = $self->param(-cgi);
  +    my $html = $self->param(-html);
  +    my $dbi  = $self->param(-dbi);
  +
  +    my $period = $cgi->param("period") || "daily";
  +
  +    #   perform periodic tasks
  +    if ($period eq 'hourly') {
  +        #   remove expired data
  +        $dbi->query(q{
  +            DELETE FROM ase_scode WHERE sc_expiry < ?;
  +        }, $self->datetime(time())) or die $dbi->error();
  +        $dbi->query(q{
  +            DELETE FROM ase_enrollment WHERE en_expiry < ?;
  +        }, $self->datetime(time())) or die $dbi->error();
  +        $dbi->query(q{
  +            DELETE FROM ase_recovery WHERE re_expiry < ?;
  +        }, $self->datetime(time())) or die $dbi->error();
  +    }
  +    elsif ($period eq 'daily') {
  +        #   perform heartbeat workflow
  +        $self->cron_heartbeat();
  +    }
  +
  +    return;
  +}
  +
  +1;
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.42 -r1.43 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	30 Mar 2007 11:48:53 -0000	1.42
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	30 Mar 2007 18:24:28 -0000	1.43
  @@ -511,16 +511,18 @@
       my $now     = time();
       my $t_start = $self->datetime($now);
       my $t_end   = undef;
  +    my $t_heartbeat = $self->datetime($now + $self->human2sec($cfg->{-cfg}->{"heartbeat-interval"}));
       $dbi->query(q{
           INSERT INTO ase_member
           (me_uuid, me_name, me_nickname, me_address,
            me_membership_karma, me_membership_prop, me_membership_type,
            me_membership_start, me_membership_end,
  +         me_account_heartbeat_time, me_account_heartbeat_count, me_account_heartbeat_uuid,
            me_access_pw_sha1, me_access_pw_md5, me_access_pw_cryptmd5, me_access_pw_cryptdes)
  -        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
  -    },  $uuid, $rec->{en_name}, $rec->{en_nickname}, $rec->{en_address},
  -        1, "", "N", $t_start, $t_end,
  -        $rec->{en_pw_sha1}, $rec->{en_pw_md5}, $rec->{en_pw_cryptmd5}, $rec->{en_pw_cryptdes},
  +        VALUES (??);
  +    },  $uuid, $rec->{"en_name"}, $rec->{"en_nickname"}, $rec->{"en_address"},
  +        1, "", "N", $t_start, $t_end, $t_heartbeat, 0, undef,
  +        $rec->{"en_pw_sha1"}, $rec->{"en_pw_md5"}, $rec->{"en_pw_cryptmd5"}, $rec->{"en_pw_cryptdes"},
       ) or die $dbi->error();
   
       #   delete enrollment information (one or even more in case of retries)
  @@ -570,7 +572,7 @@
       $self->use("Mail::Sendmail");
       my $mail =
           "Successful " . $cfg->{-cfg}->{"project-name"} . " Fellow Registration (No. ".$rec2->{count}."):\n" .
  -        $rec->{en_name}.(defined $rec->{"en_nickname"} ? " (".$rec->{"en_nickname"}.")" : "")." <".$rec->{en_address}.">\n" .
  +        $rec->{"en_name"}.(defined $rec->{"en_nickname"} ? " (".$rec->{"en_nickname"}.")" : "")." <".$rec->{"en_address"}.">\n" .
           "\n" .
           "-- \n" .
           $cfg->{-cfg}->{"service-name"} . "\n" .
  @@ -580,7 +582,7 @@
       Mail::Sendmail::sendmail(
           To      => $cfg->{-cfg}->{"service-admin"},
           From    => $cfg->{-cfg}->{"service-name"} . " <" . $cfg->{-cfg}->{"service-sender"} . ">\n",
  -        Subject => $cfg->{-cfg}->{"project-name"} . " Registration: " . $rec->{en_name} . (defined $rec->{en_nickname} ? " (" . $rec->{en_nickname} . ")" : ""). " <" . $rec->{en_address} . ">\n",
  +        Subject => $cfg->{-cfg}->{"project-name"} . " Registration: " . $rec->{"en_name"} . (defined $rec->{"en_nickname"} ? " (" . $rec->{"en_nickname"} . ")" : ""). " <" . $rec->{"en_address"} . ">\n",
           Message => $mail,
       ) or die $Mail::Sendmail::error;
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.heartbeat.pl
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ase.cgi.heartbeat.pl
  --- /dev/null	2007-03-30 20:23:29 +0200
  +++ ase.cgi.heartbeat.pl	2007-03-30 20:24:29 +0200
  @@ -0,0 +1,307 @@
  +##
  +##  OSSP ase -- Affiliation Service Environment
  +##  Copyright (c) 2005-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2005-2007 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP ase, a service environment for managing
  +##  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  +##
  +##  This program is free software; you can redistribute it and/or modify
  +##  it under the terms of the GNU General Public License as published by
  +##  the Free Software Foundation; either version 2 of the License, or
  +##  (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this program; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  ase.cgi.heartbeat.pl: heartbeat workflow
  +##
  +
  +package OSSP::ase::server;
  +use base 'CGI::Application';
  +use strict;
  +use warnings;
  +
  +#   cron job
  +sub cron_heartbeat {
  +    my $self = shift;
  +    my $cfg  = $self->param(-cfg);
  +    my $cgi  = $self->param(-cgi);
  +    my $dbi  = $self->param(-dbi);
  +
  +    #   database upgrade support
  +    $dbi->query(q{
  +        UPDATE ase_member
  +        SET    me_account_heartbeat_time = ?
  +        WHERE  me_account_heartbeat_time IS NULL;
  +    }, $self->datetime(time() + $self->human2sec($cfg->{-cfg}->{"heartbeat-interval"}))) or die $dbi->error();
  +
  +    #   notify accounts which are in the heartbeat deadline notification intervals
  +    foreach my $rec ($dbi->query(q{
  +        SELECT *
  +        FROM   ase_member
  +        WHERE  me_account_heartbeat_time > ?;
  +    }, $self->datetime(time()))->hashes()) {
  +        my @reminder_times = map { $self->human2sec($_) } @{$cfg->{-cfg}->{"heartbeat-reminders"}};
  +        my $reminder_count = $rec->{"me_account_heartbeat_count"} || 0;
  +        my $t_heartbeat = $self->datetime2time($rec->{"me_account_heartbeat_time"});
  +        my $t_now = time();
  +
  +        while (    ($reminder_count <= $#reminder_times)
  +               and ($t_now >= ($t_heartbeat - $reminder_times[$reminder_count]))) {
  +            #   generate heartbeat UUID
  +            my $heartbeat_uuid;
  +            if ($reminder_count == 0) {
  +                $self->use("OSSP::uuid");
  +                my $uuid = new OSSP::uuid;
  +                $uuid->make("v1");
  +                $heartbeat_uuid = $uuid->export("str");
  +                undef $uuid;
  +                $dbi->query(q{
  +                    UPDATE ase_member
  +                    SET    me_account_heartbeat_uuid = ?
  +                    WHERE  me_uuid = ?;
  +                }, $heartbeat_uuid, $rec->{"me_uuid"}) or die $dbi->error();
  +            }
  +            else {
  +                $heartbeat_uuid = $rec->{"me_account_heartbeat_uuid"};
  +            }
  +
  +            #   increase counter
  +            $reminder_count++;
  +
  +            #   send notification mail
  +            $self->use("Mail::Sendmail");
  +            my $url = $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "?mode=heartbeat;uuid=$heartbeat_uuid";
  +            my $mail =
  +                "Your " . $cfg->{-cfg}->{"project-name"} . " account requires regular re-validation of the\n" .
  +                "Email address it was registered under. This is notification " . $reminder_count . " of " . scalar(@reminder_times) . ".\n" .
  +                "Just click onto the following URL within " . $self->time2human($t_heartbeat - $t_now) . "\n" .
  +                "to provide the required \"heartbeat\" for your Email address:\n" .
  +                "\n" .
  +                $url . "\n" .
  +                "\n" .
  +                "If you you miss the \"heartbeat\" deadline, your account will be locked and after\n" .
  +                "a following grace period finally deleted. Please understand that this \"heartbeat\"\n" .
  +                "for your Email address is an important to regularily free allocated names and nicknames\n" .
  +                "and to prevent people from registering under dummy one-time Email addresses.\n" .
  +                "\n" .
  +                "-- \n" .
  +                $cfg->{-cfg}->{"service-name"} . "\n" .
  +                "" . $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "\n" .
  +                "\n";
  +            $Mail::Sendmail::mailcfg{"smtp"} = [qw(localhost mail)];
  +            Mail::Sendmail::sendmail(
  +                To      => $rec->{"me_address"},
  +                From    => $cfg->{-cfg}->{"service-name"} . " <" . $cfg->{-cfg}->{"service-sender"} . ">\n",
  +                Subject => "Your " . $cfg->{-cfg}->{"project-name"} . " account requires re-validation of your Email address\n",
  +                Message => $mail,
  +            ) or die $Mail::Sendmail::error;
  +
  +            #   update counter in database
  +            $dbi->query(q{
  +                UPDATE ase_member
  +                SET    me_account_heartbeat_count = ?
  +                WHERE  me_uuid = ?;
  +            }, $reminder_count, $rec->{"me_uuid"}) or die $dbi->error();
  +
  +            #   log action
  +            $self->logbook("heartbeat notification #%d sent to %s%s <%s>",
  +                $reminder_count, $rec->{'me_name'},
  +                (defined $rec->{'me_nickname'} ? " (" . $rec->{'me_nickname'} . ")" : ""),
  +                $rec->{'me_address'});
  +        }
  +    }
  +
  +    #   lock accounts which missed the heartbeat deadline
  +    foreach my $rec ($dbi->query(q{
  +        SELECT *
  +        FROM   ase_member
  +        WHERE  me_account_heartbeat_time <= ?;
  +    }, $self->datetime(time()))->hashes()) {
  +        #   lock account
  +        $dbi->query(q{
  +            UPDATE ase_member
  +            SET    me_membership_lock_expiry = 0,
  +                   me_membership_lock_origin = 'heartbeat',
  +                   me_membership_lock_reason =
  +                   'no response to Email address re-validation ("heartbeat"). Use account recovery to resurrect account.' 
  +            WHERE  me_uuid = ?;
  +        }, $rec->{"me_uuid"}) or die $dbi->error();
  +
  +        #   send final notice to account holder
  +        $self->use("Mail::Sendmail");
  +        my $mail =
  +            "Sorry, you missed the heartbeat deadline for your " . $cfg->{-cfg}->{"project-name"} . " account.\n" .
  +            "Your account was now locked. Resurrection is still possible, but you have to\n" .
  +            "perform an account recovery within " . $self->time2human($cfg->{-cfg}->{"heartbeat-graceperiod"}) . ".\n" .
  +            "\n" .
  +            "-- \n" .
  +            $cfg->{-cfg}->{"service-name"} . "\n" .
  +            "" . $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "\n" .
  +            "\n";
  +        $Mail::Sendmail::mailcfg{"smtp"} = [qw(localhost mail)];
  +        Mail::Sendmail::sendmail(
  +            To      => $rec->{"me_address"},
  +            From    => $cfg->{-cfg}->{"service-name"} . " <" . $cfg->{-cfg}->{"service-sender"} . ">\n",
  +            Subject => "Your " . $cfg->{-cfg}->{"project-name"} . " account was locked\n",
  +            Message => $mail,
  +        ) or die $Mail::Sendmail::error;
  +
  +        #   send notice to administrator
  +        my $mail =
  +            "Account locked after missing heartbeat deadline:\n" .
  +            $rec->{"en_name"}.(defined $rec->{"en_nickname"} ? " (".$rec->{"en_nickname"}.")" : "")." <".$rec->{"en_address"}.">\n" .
  +            "\n" .
  +            "-- \n" .
  +            $cfg->{-cfg}->{"service-name"} . "\n" .
  +            "" . $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "\n" .
  +            "\n";
  +        $Mail::Sendmail::mailcfg{"smtp"} = [qw(localhost mail)];
  +        Mail::Sendmail::sendmail(
  +            To      => $cfg->{-cfg}->{"service-admin"},
  +            From    => $cfg->{-cfg}->{"service-name"} . " <" . $cfg->{-cfg}->{"service-sender"} . ">\n",
  +            Subject => $cfg->{-cfg}->{"project-name"} . " Account Locking: " .
  +                       $rec->{"en_name"} . (defined $rec->{"en_nickname"} ? " (" . $rec->{"en_nickname"} . ")" : "") .
  +                       " <" . $rec->{"en_address"} . ">\n",
  +            Message => $mail,
  +        ) or die $Mail::Sendmail::error;
  +
  +        #   log action
  +        $self->logbook("heartbeat deadline miss for %s%s <%s>",
  +            $rec->{'me_name'},
  +            (defined $rec->{'me_nickname'} ? " (" . $rec->{'me_nickname'} . ")" : ""),
  +            $rec->{'me_address'});
  +        $self->logbook("account locked for %s%s <%s>",
  +            $rec->{'me_name'},
  +            (defined $rec->{'me_nickname'} ? " (" . $rec->{'me_nickname'} . ")" : ""),
  +            $rec->{'me_address'});
  +    }
  +
  +    #   delete accounts which even missed the heartbeat grace-period
  +    foreach my $rec ($dbi->query(q{
  +        SELECT *
  +        FROM   ase_member
  +        WHERE  me_account_heartbeat_time <= ?;
  +    }, $self->datetime(time() - $self->human2sec($cfg->{-cfg}->{"heartbeat-graceperiod"})))->hashes()) {
  +        #   delete account
  +        $dbi->query(q{
  +            DELETE FROM ase_member WHERE me_uuid = ?;
  +        }, $rec->{"me_uuid"}) or die $dbi->error();
  +
  +        #   send final notice to account holder
  +        $self->use("Mail::Sendmail");
  +        my $mail =
  +            "Sorry, you missed the heartbeat grace period for your " . $cfg->{-cfg}->{"project-name"} . " account.\n" .
  +            "Your account was now finally deleted. No resurrection is possible, but\n" .
  +            "feel free to perform a new account enrollment from scratch in case you wish\n" .
  +            "an account in the future again.\n" .
  +            "\n" .
  +            "-- \n" .
  +            $cfg->{-cfg}->{"service-name"} . "\n" .
  +            "" . $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "\n" .
  +            "\n";
  +        $Mail::Sendmail::mailcfg{"smtp"} = [qw(localhost mail)];
  +        Mail::Sendmail::sendmail(
  +            To      => $rec->{"me_address"},
  +            From    => $cfg->{-cfg}->{"service-name"} . " <" . $cfg->{-cfg}->{"service-sender"} . ">\n",
  +            Subject => "Your " . $cfg->{-cfg}->{"project-name"} . " account was deleted\n",
  +            Message => $mail,
  +        ) or die $Mail::Sendmail::error;
  +
  +        #   send notice to administrator
  +        my $mail =
  +            "Account deleted after missing heartbeat grace period:\n" .
  +            $rec->{"en_name"}.(defined $rec->{"en_nickname"} ? " (".$rec->{"en_nickname"}.")" : "")." <".$rec->{"en_address"}.">\n" .
  +            "\n" .
  +            "-- \n" .
  +            $cfg->{-cfg}->{"service-name"} . "\n" .
  +            "" . $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "\n" .
  +            "\n";
  +        $Mail::Sendmail::mailcfg{"smtp"} = [qw(localhost mail)];
  +        Mail::Sendmail::sendmail(
  +            To      => $cfg->{-cfg}->{"service-admin"},
  +            From    => $cfg->{-cfg}->{"service-name"} . " <" . $cfg->{-cfg}->{"service-sender"} . ">\n",
  +            Subject => $cfg->{-cfg}->{"project-name"} . " Account Deletion: " .
  +                       $rec->{"en_name"} . (defined $rec->{"en_nickname"} ? " (" . $rec->{"en_nickname"} . ")" : "") .
  +                       " <" . $rec->{"en_address"} . ">\n",
  +            Message => $mail,
  +        ) or die $Mail::Sendmail::error;
  +
  +        #   log action
  +        $self->logbook("heartbeat grace-period miss for %s%s <%s>",
  +            $rec->{'me_name'},
  +            (defined $rec->{'me_nickname'} ? " (" . $rec->{'me_nickname'} . ")" : ""),
  +            $rec->{'me_address'});
  +        $self->logbook("account deleted for %s%s <%s>",
  +            $rec->{'me_name'},
  +            (defined $rec->{'me_nickname'} ? " (" . $rec->{'me_nickname'} . ")" : ""),
  +            $rec->{'me_address'});
  +    }
  +
  +    return;
  +}
  +
  +#   heartbeat receiver
  +sub mode_heartbeat {
  +    my $self = shift;
  +    my $cfg  = $self->param(-cfg);
  +    my $cgi  = $self->param(-cgi);
  +    my $html = $self->param(-html);
  +    my $dbi  = $self->param(-dbi);
  +
  +    #   determine heartbeat UUID
  +    my $heartbeat_uuid = $cgi->param("uuid");
  +
  +    #   lookup corresponding account
  +    my $rec = $dbi->query(q{
  +        SELECT *
  +        FROM   ase_member
  +        WHERE  me_account_heartbeat_uuid = ?;
  +    }, $heartbeat_uuid)->hash();
  +    if (not defined($rec)) {
  +        $html .= "<h1>Account Heartbeat</h1>\n";
  +        $html .= "<h2 class=\"error\">ERROR: HEARTBEAT FAILED</h2>\n" .
  +                 "Sorry, no heartbeat information found under UUID $heartbeat_uuid.\n" .
  +                 "Either you have already provided the heartbeat for this time period\n" .
  +                 "or you already missed both the deadline and the grace period and hence\n" .
  +                 "your account was already deleted in the meantime.\n";
  +        return;
  +    }
  +
  +    #   update account heartbeat information
  +    my $t_heartbeat = $self->datetime2time($rec->{"me_account_heartbeat_time"}) +
  +                      $self->human2sec($cfg->{-cfg}->{"heartbeat-interval"});
  +    $dbi->query(q{
  +        UPDATE ase_member
  +        SET    me_account_heartbeat_time  = ?,
  +               me_account_heartbeat_count = 0,
  +               me_account_heartbeat_uuid  = NULL
  +        WHERE  me_account_heartbeat_uuid  = ?;
  +    }, $self->datetime($t_heartbeat), $heartbeat_uuid)->hash();
  +
  +    #   log action
  +    $self->logbook("heartbeat received for %s%s <%s>",
  +        $rec->{'me_name'},
  +        (defined $rec->{'me_nickname'} ? " (" . $rec->{'me_nickname'} . ")" : ""),
  +        $rec->{'me_address'});
  +
  +    #   display thanks
  +    $html .= "<h1>Account Heartbeat</h1>\n";
  +    $html .= "Thanks for re-confirming the validity of the Email address\n" .
  +             "under which your account is registered. The next heartbeat\n" .
  +             "has to be provided in " . $self->time2human($t_heartbeat) . ".\n" .
  +             "As usual, you will be notified prematurely again, of course.\n";
  +    die "FUCK";
  +    return;
  +}
  +
  +1;
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.36 -r1.37 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	30 Mar 2007 11:48:53 -0000	1.36
  +++ ossp-pkg/ase/ase.cgi.login.pl	30 Mar 2007 18:24:28 -0000	1.37
  @@ -302,9 +302,9 @@
       #   check for locked account status
       if (defined $rec->{"me_account_lock_expiry"} and defined $rec->{"me_account_lock_reason"}) {
           my $locked_until = $self->datetime2time($rec->{"me_account_lock_expiry"});
  -        if ($locked_until > time()) {
  +        if ($locked_until == 0 or $locked_until > time()) {
               $error = "Account temporarily locked for " .
  -                $self->time2human($locked_until - time()) .
  +                ($locked_until == 0 ? "unlimited time" : $self->time2human($locked_until - time())) .
                   ($rec->{"me_account_lock_reason"} ? " (" . $rec->{"me_account_lock_reason"} . ")" : "");
               goto CLEANUP;
           }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	30 Mar 2007 10:09:12 -0000	1.34
  +++ ossp-pkg/ase/ase.cgi.main.pl	30 Mar 2007 18:24:29 -0000	1.35
  @@ -41,7 +41,8 @@
           my @directives = (qw(
               project-name service-name service-sender service-admin fetch-url-acl
               login-failures-max login-failures-time-range login-failures-time-penalty 
  -            instant-notification-urls blacklist-email
  +            instant-notification-urls blacklist-email 
  +            heartbeat-interval heartbeat-reminders heartbeat-graceperiod
           ));
           my $txt < IO::All::io($cfgfile)
               or die "unable to read configuration file \"$cfgfile\"";
  @@ -102,6 +103,7 @@
           'scode'              => { -login => 0, -canvas => 0, -method => \&mode_scode_render         },
           'loader'             => { -login => 0, -canvas => 0, -method => \&mode_loader               },
           'rpc'                => { -login => 0, -canvas => 0, -method => \&mode_rpc                  },
  +        'cron'               => { -login => 0, -canvas => 0, -method => \&mode_cron                 },
   
           #   login modes
           'login'              => { -login => 0, -canvas => 1, -method => \&mode_login_screen         },
  @@ -111,6 +113,7 @@
           'enrollment-action'  => { -login => 0, -canvas => 1, -method => \&mode_enrollment_action    },
           'activation'         => { -login => 0, -canvas => 1, -method => \&mode_activation_screen    },
           'recovery'           => { -login => 0, -canvas => 1, -method => \&mode_recovery             },
  +        'heartbeat'          => { -login => 0, -canvas => 1, -method => \&mode_heartbeat            },
   
           #   application modes
           'menu-profile'       => { -login => 1, -canvas => 1, -method => \&mode_menu_profile         },
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.recover.pl
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 ase.cgi.recover.pl
  --- ossp-pkg/ase/ase.cgi.recover.pl	30 Mar 2007 11:48:53 -0000	1.15
  +++ ossp-pkg/ase/ase.cgi.recover.pl	30 Mar 2007 18:24:29 -0000	1.16
  @@ -536,15 +536,19 @@
           my $pw = $self->makepasswords($password);
   
           #   update membership record in database
  +        my $t_heartbeat = $self->datetime(time() + $self->human2sec($cfg->{-cfg}->{"heartbeat-interval"}));
           $dbi->query(q{
               UPDATE ase_member
               SET me_access_pw_sha1     = ?,
                   me_access_pw_md5      = ?,
                   me_access_pw_cryptmd5 = ?,
  -                me_access_pw_cryptdes = ?
  +                me_access_pw_cryptdes = ?,
  +                me_membership_heartbeat_time = ?,
  +                me_membership_heartbeat_count = 0,
  +                me_membership_heartbeat_uuid = NULL,
               WHERE me_uuid = ?;
           }, $pw->{-sha1}, $pw->{-md5}, $pw->{-cryptmd5}, $pw->{-cryptdes},
  -           $me_uuid
  +           $t_heartbeat, $me_uuid
           ) or die $dbi->error();
   
           #   delete recovery information
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cli
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ase.cli
  --- ossp-pkg/ase/ase.cli	30 Mar 2007 10:12:25 -0000	1.2
  +++ ossp-pkg/ase/ase.cli	30 Mar 2007 18:24:29 -0000	1.3
  @@ -57,7 +57,6 @@
   #   application parts
   my $dir = $cfg->{-path_libdir};
   require "$dir/ase.cli.db.pl";      # database management
  -require "$dir/ase.cli.cron.pl";    # cron tasks
   
   #   command line parsing
   my $opt = {
  @@ -81,8 +80,7 @@
             " -V,--version    print version\n" .
             " -q,--quiet      quiet processing\n" .
             "Available commands:\n" .
  -          " db              database creation/update/downgrade\n" .
  -          " cron            daily cron tasks\n";
  +          " db              database creation/update/downgrade\n";
       exit(0);
   }
   if ($opt->{-version}) {
  @@ .
  rm -f ossp-pkg/ase/ase.cli.cron.pl <<'@@ .'
  Index: ossp-pkg/ase/ase.cli.cron.pl
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cli.db.sql
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ase.cli.db.sql
  --- ossp-pkg/ase/ase.cli.db.sql	30 Mar 2007 11:48:53 -0000	1.2
  +++ ossp-pkg/ase/ase.cli.db.sql	30 Mar 2007 18:24:29 -0000	1.3
  @@ -69,6 +69,15 @@
       me_account_lock_expiry     INTEGER,
                                  -- Account Temporary Lock Expiry Time
                                  -- [20050225000000]
  +    me_account_heartbeat_time  INTEGER,
  +                               -- Membership Heartbeat Time of Deadline
  +                               -- [20060209]
  +    me_account_heartbeat_count INTEGER,
  +                               -- Membership Heartbeat Counter for Reminding Intervals
  +                               -- [0]
  +    me_account_heartbeat_uuid  TEXT, 
  +                               -- Membership Heartbeat UUID for Validation Proof
  +                               -- [75468374-8721-11d9-bee4-0002a5489f14]
   
       -- Membership Details
       me_membership_karma        INTEGER NOT NULL,
  @@ -243,6 +252,9 @@
       me_account_lock_origin     TEXT,
       me_account_lock_reason     TEXT,
       me_account_lock_expiry     INTEGER,
  +    me_account_heartbeat_time  INTEGER,
  +    me_account_heartbeat_count INTEGER,
  +    me_account_heartbeat_uuid  TEXT,
       me_membership_karma        INTEGER NOT NULL,
       me_membership_prop         CHAR(4) NOT NULL,
       me_membership_type         CHAR(1) NOT NULL,
  @@ -263,6 +275,9 @@
       NULL,                      -- me_account_lock_origin: added
       NULL,                      -- me_account_lock_reason: added
       NULL,                      -- me_account_lock_expiry: added
  +    NULL,                      -- me_account_heartbeat_time: added
  +    0,                         -- me_account_heartbeat_count: added
  +    NULL,                      -- me_account_heartbeat_uuid: added
       me_membership_status,      -- renamed to me_membership_karma
       "",                        -- me_membership_prop: added
       me_membership_type,
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.ui.css
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ase.ui.css
  --- ossp-pkg/ase/ase.ui.css	30 Mar 2007 09:36:33 -0000	1.1
  +++ ossp-pkg/ase/ase.ui.css	30 Mar 2007 18:24:29 -0000	1.2
  @@ -50,7 +50,7 @@
       color:            #cccccc;
   }
   .ase a {
  -    color:            #666699;
  +    color:            #999999;
       text-decoration:  none;
   }
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 30 20:41:56 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B48AA752905; Fri, 30 Mar 2007 20:41:56 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.heartbeat.pl
Message-Id: <20070330184156.B48AA752905@mail.ossp.org>
Date: Fri, 30 Mar 2007 20:41:56 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Mar-2007 20:41:56
  Branch: HEAD                             Handle: 2007033019415600

  Modified files:
    ossp-pkg/ase            ase.cgi.heartbeat.pl

  Log:
    bugfix heartbeat functionality

  Summary:
    Revision    Changes     Path
    1.2         +20 -11     ossp-pkg/ase/ase.cgi.heartbeat.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.heartbeat.pl
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ase.cgi.heartbeat.pl
  --- ossp-pkg/ase/ase.cgi.heartbeat.pl	30 Mar 2007 18:24:28 -0000	1.1
  +++ ossp-pkg/ase/ase.cgi.heartbeat.pl	30 Mar 2007 18:41:56 -0000	1.2
  @@ -121,17 +121,26 @@
       }
   
       #   lock accounts which missed the heartbeat deadline
  +    my @reminder_times = map { $self->human2sec($_) } @{$cfg->{-cfg}->{"heartbeat-reminders"}};
       foreach my $rec ($dbi->query(q{
           SELECT *
           FROM   ase_member
  -        WHERE  me_account_heartbeat_time <= ?;
  -    }, $self->datetime(time()))->hashes()) {
  +        WHERE  me_account_heartbeat_count > ? AND
  +               me_account_heartbeat_time <= ?;
  +    }, scalar(@reminder_times), $self->datetime(time()))->hashes()) {
  +        #   update counter in database
  +        $dbi->query(q{
  +            UPDATE ase_member
  +            SET    me_account_heartbeat_count = ?
  +            WHERE  me_uuid = ?;
  +        }, scalar(@reminder_times)+1, $rec->{"me_uuid"}) or die $dbi->error();
  +
           #   lock account
           $dbi->query(q{
               UPDATE ase_member
  -            SET    me_membership_lock_expiry = 0,
  -                   me_membership_lock_origin = 'heartbeat',
  -                   me_membership_lock_reason =
  +            SET    me_account_lock_expiry = 0,
  +                   me_account_lock_origin = 'heartbeat',
  +                   me_account_lock_reason =
                      'no response to Email address re-validation ("heartbeat"). Use account recovery to resurrect account.' 
               WHERE  me_uuid = ?;
           }, $rec->{"me_uuid"}) or die $dbi->error();
  @@ -158,7 +167,7 @@
           #   send notice to administrator
           my $mail =
               "Account locked after missing heartbeat deadline:\n" .
  -            $rec->{"en_name"}.(defined $rec->{"en_nickname"} ? " (".$rec->{"en_nickname"}.")" : "")." <".$rec->{"en_address"}.">\n" .
  +            $rec->{"me_name"}.(defined $rec->{"me_nickname"} ? " (".$rec->{"me_nickname"}.")" : "")." <".$rec->{"me_address"}.">\n" .
               "\n" .
               "-- \n" .
               $cfg->{-cfg}->{"service-name"} . "\n" .
  @@ -169,8 +178,8 @@
               To      => $cfg->{-cfg}->{"service-admin"},
               From    => $cfg->{-cfg}->{"service-name"} . " <" . $cfg->{-cfg}->{"service-sender"} . ">\n",
               Subject => $cfg->{-cfg}->{"project-name"} . " Account Locking: " .
  -                       $rec->{"en_name"} . (defined $rec->{"en_nickname"} ? " (" . $rec->{"en_nickname"} . ")" : "") .
  -                       " <" . $rec->{"en_address"} . ">\n",
  +                       $rec->{"me_name"} . (defined $rec->{"me_nickname"} ? " (" . $rec->{"me_nickname"} . ")" : "") .
  +                       " <" . $rec->{"me_address"} . ">\n",
               Message => $mail,
           ) or die $Mail::Sendmail::error;
   
  @@ -219,7 +228,7 @@
           #   send notice to administrator
           my $mail =
               "Account deleted after missing heartbeat grace period:\n" .
  -            $rec->{"en_name"}.(defined $rec->{"en_nickname"} ? " (".$rec->{"en_nickname"}.")" : "")." <".$rec->{"en_address"}.">\n" .
  +            $rec->{"me_name"}.(defined $rec->{"me_nickname"} ? " (".$rec->{"me_nickname"}.")" : "")." <".$rec->{"me_address"}.">\n" .
               "\n" .
               "-- \n" .
               $cfg->{-cfg}->{"service-name"} . "\n" .
  @@ -230,8 +239,8 @@
               To      => $cfg->{-cfg}->{"service-admin"},
               From    => $cfg->{-cfg}->{"service-name"} . " <" . $cfg->{-cfg}->{"service-sender"} . ">\n",
               Subject => $cfg->{-cfg}->{"project-name"} . " Account Deletion: " .
  -                       $rec->{"en_name"} . (defined $rec->{"en_nickname"} ? " (" . $rec->{"en_nickname"} . ")" : "") .
  -                       " <" . $rec->{"en_address"} . ">\n",
  +                       $rec->{"me_name"} . (defined $rec->{"me_nickname"} ? " (" . $rec->{"me_nickname"} . ")" : "") .
  +                       " <" . $rec->{"me_address"} . ">\n",
               Message => $mail,
           ) or die $Mail::Sendmail::error;
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 30 20:44:47 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id BB8CE7529FD; Fri, 30 Mar 2007 20:44:47 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.profile.pl
Message-Id: <20070330184447.BB8CE7529FD@mail.ossp.org>
Date: Fri, 30 Mar 2007 20:44:47 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Mar-2007 20:44:47
  Branch: HEAD                             Handle: 2007033019444700

  Modified files:
    ossp-pkg/ase            ase.cgi.profile.pl

  Log:
    remove never-used OpenPKG Foundation e.V. stuff

  Summary:
    Revision    Changes     Path
    1.22        +1  -1      ossp-pkg/ase/ase.cgi.profile.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.profile.pl
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 ase.cgi.profile.pl
  --- ossp-pkg/ase/ase.cgi.profile.pl	30 Mar 2007 09:51:21 -0000	1.21
  +++ ossp-pkg/ase/ase.cgi.profile.pl	30 Mar 2007 18:44:47 -0000	1.22
  @@ -74,7 +74,7 @@
       }, $me_uuid)->hash()) or die "no member found under UUID $me_uuid";
   
       #   determine name of membership karma and type
  -    my $me_karma = (qw(Enrolling Fellow Member Activist Director President))
  +    my $me_karma = (qw(Enrolling Fellow Member))
           [$rec->{'me_membership_karma'} || 0];
       my $me_prop = join(", ", map { { "A" => "Administrator", "F" => "Founding", "H" => "Honorary" }->{$_}; }
           split(//, ($rec->{'me_membership_prop'} || ""))) || "(none)";
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 30 20:45:12 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id BBD847529FD; Fri, 30 Mar 2007 20:45:11 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cfg
Message-Id: <20070330184511.BBD847529FD@mail.ossp.org>
Date: Fri, 30 Mar 2007 20:45:11 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Mar-2007 20:45:11
  Branch: HEAD                             Handle: 2007033019451100

  Modified files:
    ossp-pkg/ase            ase.cfg

  Log:
    switch to real values

  Summary:
    Revision    Changes     Path
    1.14        +3  -6      ossp-pkg/ase/ase.cfg
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cfg
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 ase.cfg
  --- ossp-pkg/ase/ase.cfg	30 Mar 2007 18:24:28 -0000	1.13
  +++ ossp-pkg/ase/ase.cfg	30 Mar 2007 18:45:11 -0000	1.14
  @@ -32,12 +32,9 @@
   login-failures-max          3;
   login-failures-time-range   2m;
   login-failures-time-penalty 10m;
  -#heartbeat-interval          6M;
  -#heartbeat-reminders         28d 14d 7d 1d;
  -#heartbeat-graceperiod       14d;
  -heartbeat-interval          15m;
  -heartbeat-reminders         8m 4m 2m 1m;
  -heartbeat-graceperiod       2m;
  +heartbeat-interval          6M;
  +heartbeat-reminders         28d 14d 7d 1d;
  +heartbeat-graceperiod       14d;
   instant-notification-urls   "http://localhost/ase/sample.cgi?mode=notify;uuid=%s";
   blacklist-email             q{\@temporaryinbox\.com$}
                               q{\@put2\.net$}
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 30 20:47:08 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 8AC8D7529FD; Fri, 30 Mar 2007 20:47:08 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO
Message-Id: <20070330184708.8AC8D7529FD@mail.ossp.org>
Date: Fri, 30 Mar 2007 20:47:08 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Mar-2007 20:47:08
  Branch: HEAD                             Handle: 2007033019470800

  Modified files:
    ossp-pkg/ase            TODO

  Log:
    clear old stuff

  Summary:
    Revision    Changes     Path
    1.48        +8  -24     ossp-pkg/ase/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.47 -r1.48 TODO
  --- ossp-pkg/ase/TODO	30 Mar 2007 18:24:28 -0000	1.47
  +++ ossp-pkg/ase/TODO	30 Mar 2007 18:47:08 -0000	1.48
  @@ -1,27 +1,11 @@
  +   _        ___  ____ ____  ____  
  +  |_|_ _   / _ \/ ___/ ___||  _ \   ___  ___  ___  
  +  _|_||_| | | | \___ \___ \| |_) | |__ \/ __|/ _ \ 
  + |_||_|_| | |_| |___) |__) |  __/  / _  \__ \  __/ 
  +  |_|_|_|  \___/|____/____/|_|     \___/|___/\___| 
   
  -TODO:
  -
  -CANDO:
  -- DBIx::Simple error cases review
  -- check URL fetching and its caching because of DBIx::Simple:
  -  http://cvs.ossp.org/filediff?f=ossp-pkg/ase/ase.cgi.util.pl&v1=1.15&v2=1.16
  -  It could be that the "DBI::SQL_BLOB" is important!!! But DBIx::Simple
  -  doesn't provide this functionality...
  -- move more hard-coded parameters into ase.cfg
  -- use edit profile for step 3/4 of the recovery procedure
  -- package ASE as OpenPKG package
  -- add INSTALL document which shows how to link with webserver
  -- addon attributes
  -   - uuid internal
  -   - email verified
  -   - password 
  -   - telefonnummer
  -   - business area
  -   - company name
  -   - snail mail address
  -   - country code
  -   - number of platforms
  -   - number of servers
  -   - number of instances
  +  OSSP ase - Affiliation Service Environment
   
  +  TODO
  +  ====
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 30 20:49:46 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 9EACF7529FD; Fri, 30 Mar 2007 20:49:46 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ChangeLog NEWS
Message-Id: <20070330184946.9EACF7529FD@mail.ossp.org>
Date: Fri, 30 Mar 2007 20:49:46 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Mar-2007 20:49:45
  Branch: HEAD                             Handle: 2007033019494500

  Modified files:
    ossp-pkg/ase            ChangeLog NEWS

  Log:
    polish

  Summary:
    Revision    Changes     Path
    1.16        +0  -3      ossp-pkg/ase/ChangeLog
    1.2         +13 -0      ossp-pkg/ase/NEWS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 ChangeLog
  --- ossp-pkg/ase/ChangeLog	30 Mar 2007 18:24:28 -0000	1.15
  +++ ossp-pkg/ase/ChangeLog	30 Mar 2007 18:49:45 -0000	1.16
  @@ -54,9 +54,6 @@
        M minutes.
        [Ralf S. Engelschall]
   
  -   o Allow accounts to be disabled at all.
  -     [Ralf S. Engelschall]
  -
      o Support asymmetric setups where internal (communication between
        ase.pm and server) and external (communication between browser and
        server) HTTP requests could be different.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/NEWS
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 NEWS
  --- ossp-pkg/ase/NEWS	20 Mar 2007 17:36:42 -0000	1.1
  +++ ossp-pkg/ase/NEWS	30 Mar 2007 18:49:45 -0000	1.2
  @@ -13,6 +13,19 @@
   
     Major changes between 0.1 and 0.2
   
  +    o "Heartbeat" functionality
  +    o Reorganized filesystem structure
  +    o "authenticate" RPC method
  +    o JavaScript based user-interface experiences
  +    o SHA-1 password transmission
  +    o Add profile editing
  +    o Instant notifications
  +    o Intruder detection and prevention
  +    o Support for nickname
  +    o Account recovery
  +    o Account resign
  +    o Allow login via name, nickname or email address
  +    o Config file
       o Code cleanups
   
     Major changes between *GENESIS* and 0.1
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar 30 21:09:06 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id D7DF67528ED; Fri, 30 Mar 2007 21:09:05 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.main.pl
Message-Id: <20070330190905.D7DF67528ED@mail.ossp.org>
Date: Fri, 30 Mar 2007 21:09:05 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Mar-2007 21:09:05
  Branch: HEAD                             Handle: 2007033020090500

  Modified files:
    ossp-pkg/ase            ase.cgi.main.pl

  Log:
    fix HTML page loading

  Summary:
    Revision    Changes     Path
    1.36        +1  -1      ossp-pkg/ase/ase.cgi.main.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	30 Mar 2007 18:24:29 -0000	1.35
  +++ ossp-pkg/ase/ase.cgi.main.pl	30 Mar 2007 19:09:05 -0000	1.36
  @@ -138,7 +138,7 @@
           $html->folder('{#%s#}', '\{#([a-zA-Z_][a-zA-Z0-9_-]*)#\}');
   
           #   provide outer HTML canvas
  -        my $canvas_url       = $session->param("canvas_url")       || $cgi->param("canvas_url")       || $cfg->{-path_datdir} . "/ase.ui.html";
  +        my $canvas_url       = $session->param("canvas_url")       || $cgi->param("canvas_url")       || "ase.ui.html";
           my $canvas_mark_head = $session->param("canvas_mark_head") || $cgi->param("canvas_mark_head") || "<!-- ASE: HEAD -->";
           my $canvas_mark_body = $session->param("canvas_mark_body") || $cgi->param("canvas_mark_body") || "<!-- ASE: BODY -->";
           my ($canvas_type, undef, $canvas) = $self->fetch($canvas_url);
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr  4 14:54:36 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 2A449753018; Wed,  4 Apr 2007 14:54:36 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ Makefile
Message-Id: <20070404125436.2A449753018@mail.ossp.org>
Date: Wed,  4 Apr 2007 14:54:36 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Apr-2007 14:54:36
  Branch: HEAD                             Handle: 2007040413543500

  Modified files:
    ossp-pkg/ase            Makefile

  Log:
    split 'make install' into two targets

  Summary:
    Revision    Changes     Path
    1.7         +7  -2      ossp-pkg/ase/Makefile
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/Makefile
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 Makefile
  --- ossp-pkg/ase/Makefile	30 Mar 2007 10:09:12 -0000	1.6
  +++ ossp-pkg/ase/Makefile	4 Apr 2007 12:54:35 -0000	1.7
  @@ -22,7 +22,13 @@
   clean:
   	-rm -f ase.db
   
  -install:
  +install: install-client install-server
  +
  +install-client:
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(LIBDIR)
  +	$(SHTOOL) install -c -m 644 ase.api.pm $(DESTDIR)$(LIBDIR)/
  +
  +install-server:
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(BINDIR)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(CGIDIR)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(CFGDIR)
  @@ -40,5 +46,4 @@
   	$(SHTOOL) install -c -m 644 ase.ui.*.js $(DESTDIR)$(DATDIR)/
   	$(SHTOOL) install -c -m 644 ase.ui.css $(DESTDIR)$(DATDIR)/
   	$(SHTOOL) install -c -m 644 ase.ui.html $(DESTDIR)$(DATDIR)/
  -	$(SHTOOL) install -c -m 644 ase.api.pm $(DESTDIR)$(LIBDIR)/
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr  4 15:03:09 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 9610B7528B9; Wed,  4 Apr 2007 15:03:08 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ Makefile
Message-Id: <20070404130308.9610B7528B9@mail.ossp.org>
Date: Wed,  4 Apr 2007 15:03:08 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Apr-2007 15:03:08
  Branch: HEAD                             Handle: 2007040414030800

  Modified files:
    ossp-pkg/ase            Makefile

  Log:
    install client API directly into Perl areas

  Summary:
    Revision    Changes     Path
    1.8         +3  -2      ossp-pkg/ase/Makefile
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/Makefile
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 Makefile
  --- ossp-pkg/ase/Makefile	4 Apr 2007 12:54:35 -0000	1.7
  +++ ossp-pkg/ase/Makefile	4 Apr 2007 13:03:08 -0000	1.8
  @@ -7,6 +7,7 @@
   LIBDIR  = $(PREFIX)/lib/ase
   VARDIR  = $(PREFIX)/var/ase
   DATDIR  = $(PREFIX)/share/ase
  +PERLDIR = `perl -V:installvendorlib | sed -e 's/^installvendorlib=.//' -e 's/.;$$//'`
   
   SHTOOL  = ./shtool
   SUBST   = -e 's;\(-path_cfgdir => .\)\.\(.\);\1$(CFGDIR)\2;' \
  @@ -25,8 +26,8 @@
   install: install-client install-server
   
   install-client:
  -	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(LIBDIR)
  -	$(SHTOOL) install -c -m 644 ase.api.pm $(DESTDIR)$(LIBDIR)/
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(PERLDIR)/OSSP/ase
  +	$(SHTOOL) install -c -m 644 ase.api.pm $(DESTDIR)$(PERLDIR)/OSSP/ase/client.pm
   
   install-server:
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(BINDIR)
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr  4 16:13:38 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 70760753036; Wed,  4 Apr 2007 16:13:36 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ChangeLog TODO ase.cfg ase.cgi.enroll.pl ase...
Message-Id: <20070404141336.70760753036@mail.ossp.org>
Date: Wed,  4 Apr 2007 16:13:36 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Apr-2007 16:13:36
  Branch: HEAD                             Handle: 2007040415133500

  Modified files:
    ossp-pkg/ase            ChangeLog TODO ase.cfg ase.cgi.enroll.pl
                            ase.cgi.login.pl ase.cgi.main.pl
                            ase.cgi.profile.pl ase.cgi.resign.pl

  Log:
    o Move requirement regular expressions from code to configuration.
    o Allow arbitrary configured notice messages to be displayed
      on entitlement and resign pages.
    o Small markup and text cleanups.
    o Put button for reaching login page onto entitlement page
      where the user waits for the email.

  Summary:
    Revision    Changes     Path
    1.17        +14 -0      ossp-pkg/ase/ChangeLog
    1.49        +5  -0      ossp-pkg/ase/TODO
    1.15        +6  -1      ossp-pkg/ase/ase.cfg
    1.44        +34 -9      ossp-pkg/ase/ase.cgi.enroll.pl
    1.38        +2  -2      ossp-pkg/ase/ase.cgi.login.pl
    1.37        +2  -0      ossp-pkg/ase/ase.cgi.main.pl
    1.23        +9  -5      ossp-pkg/ase/ase.cgi.profile.pl
    1.9         +8  -1      ossp-pkg/ase/ase.cgi.resign.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 ChangeLog
  --- ossp-pkg/ase/ChangeLog	30 Mar 2007 18:49:45 -0000	1.16
  +++ ossp-pkg/ase/ChangeLog	4 Apr 2007 14:13:35 -0000	1.17
  @@ -13,6 +13,20 @@
   
     Changes between 0.1.x and 0.2.0 (xx-Oct-2005 to 20-Mar-2007)
   
  +   o Move requirement regular expressions from code to configuration.
  +     [Ralf S. Engelschall, Thomas Lotterer]
  +
  +   o Allow arbitrary configured notice messages to be displayed
  +     on entitlement and resign pages.
  +     [Ralf S. Engelschall, Thomas Lotterer]
  +
  +   o Small markup and text cleanups.
  +     [Ralf S. Engelschall, Thomas Lotterer]
  +
  +   o Put button for reaching login page onto entitlement page
  +     where the user waits for the email.
  +     [Ralf S. Engelschall, Thomas Lotterer]
  +
      o Add "heartbeat" functionality which allows us to
        automatically get rid of ancient accounts.
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.48 -r1.49 TODO
  --- ossp-pkg/ase/TODO	30 Mar 2007 18:47:08 -0000	1.48
  +++ ossp-pkg/ase/TODO	4 Apr 2007 14:13:35 -0000	1.49
  @@ -8,4 +8,9 @@
   
     TODO
     ====
  +  - optionally add tooltips to form elements and lock, etc. on mouse over
  +  - switch enrollment workflow to steps similar to recovery workflow
  +  - enrollment workflow middle part ("email was sent"): allow resending
  +    of mail and give a few intermediate hints while waiting for mail, etc.
  +  - authenticate RPC should now give out too much information on error
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cfg
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 ase.cfg
  --- ossp-pkg/ase/ase.cfg	30 Mar 2007 18:45:11 -0000	1.14
  +++ ossp-pkg/ase/ase.cfg	4 Apr 2007 14:13:35 -0000	1.15
  @@ -25,7 +25,7 @@
   ##
   
   project-name                "OSSP";
  -service-name                "OSSP Affiliation Service Environment";
  +service-name                "OSSP Affiliation Service Environment (ASE)";
   service-sender              "nobody@ossp.org";
   service-admin               "rse@engelschall.com";
   fetch-url-acl               q{^https?:\/\/(?:localhost|\S+\.engelschall\.com)};
  @@ -36,10 +36,15 @@
   heartbeat-reminders         28d 14d 7d 1d;
   heartbeat-graceperiod       14d;
   instant-notification-urls   "http://localhost/ase/sample.cgi?mode=notify;uuid=%s";
  +requirement-realname        "^.*\S+\s+\S+.*$";
  +requirement-nickname        "^[a-z][a-z0-9]{3,}$";
  +requirement-password        "^.{6,}$";
   blacklist-email             q{\@temporaryinbox\.com$}
                               q{\@put2\.net$}
                               q{\@senseless-entertainment\.com$}
                               q{\@afrobacon\.com$}
                               q{\@golfilla\.info$}
                               q{\@trashmail\.net$};
  +notice-enrollment           q{ENROLLMENT NOTICE};
  +notice-resign               q{RESIGN NOTICE};
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.43 -r1.44 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	30 Mar 2007 18:24:28 -0000	1.43
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	4 Apr 2007 14:13:35 -0000	1.44
  @@ -113,6 +113,13 @@
           "    <td>"; $html->fold("button-enroll"); $html .= "</td>\n" .
           "  </tr>\n" .
           "</table>\n";
  +   
  +    #   generate optional notice text
  +    if ($cfg->{-cfg}->{"notice-enrollment"} ne '') {
  +        $html .= "<p>\n";
  +        $html .= $cfg->{-cfg}->{"notice-enrollment"};
  +        $html .= "</p>\n";
  +    }
   
       #   generate a security code
       my $scode_uuid = ($cgi->param("scode.uuid") || $self->scode_create());
  @@ -274,14 +281,16 @@
   
       #   verify form parameters
       my $error = 0;
  -    if ($name !~ m/\S+\s+\S+/) {
  +    my $re = $cfg->{-cfg}->{"requirement-realname"};
  +    if ($name !~ m/${re}/) {
           $self->logbook("invalid name: \"%s\"", $name);
           $cgi->param('name.error', 'Invalid Name: not <i>firstname lastname</i>');
           $error = 1;
       }
  -    if ($nickname !~ m/^(?:|[a-z][a-z0-9]{3,})$/) {
  +    $re = $cfg->{-cfg}->{"requirement-nickname"};
  +    if ($nickname !~ m/(?:|${re})/) {
           $self->logbook("invalid nickname: \"%s\"", $nickname);
  -        $cgi->param('nickname.error', 'Invalid Nickname: has to be empty or match "^[a-z][a-z0-9]{3,}"');
  +        $cgi->param('nickname.error', 'Invalid Nickname: has to be empty or match "$re"');
           $error = 1;
       }
       if ($address !~ m/^[^@]+\@(?:[^.]+\.)+[^.]+$/) {
  @@ -289,9 +298,10 @@
           $cgi->param('address.error', 'Invalid Email address: not <i>name</i>@<i>domain</i>');
           $error = 1;
       }
  -    if ($password !~ m/^.{6,}$/) {
  +    $re = $cfg->{-cfg}->{"requirement-password"};
  +    if ($password !~ m/${re}/) {
           $self->logbook("invalid password: \"%s\"", $password);
  -        $cgi->param('password.error', 'Invalid Password: at least 6 characters required');
  +        $cgi->param('password.error', 'Invalid Password: has to match "$re"');
           $error = 1;
       }
       if ($password_verify ne $password) {
  @@ -458,9 +468,9 @@
   
       #   generate step-by-step list
       $html .=
  -        "<ol class=steps>\n" .
  +        "<ol class=\"steps\">\n" .
           "  <li>Account Specification</li>\n" .
  -        "  <li class=this>Account Verification</li>\n" .
  +        "  <li class=\"this\">Account Verification</li>\n" .
           "  <li>Account Activation</li>\n" .
           "</ol>\n";
   
  @@ -469,7 +479,16 @@
           "<p/>\n" .
           "An Email was sent to you under &lt;<a href=\"mailto:$address\"><b>$address</b></a>&gt; containing\n" .
           "an URL. Please follow this URL for being directed to step 3\n" .
  -        "of this Enrollment procedure, the Account Activation.\n";
  +        "of this Enrollment procedure, the Account Activation.\n" .
  +        "<p/>\n" .
  +        "After successful activation " .
  +        "you can access your account by going to the Login screen.\n" .
  +        "<p/>\n" .
  +        "<a class=\"button\" href=\"" . 
  +        $self->url(-mode => "login", -login => ($nickname || $address)) .
  +        "\">" .
  +        "Go to <b>Login</b> screen" .
  +        "</a>\n";
   
       $self->logbook("enrollment started for %s <%s>", $name, $address);
   
  @@ -558,8 +577,14 @@
           "<p/>\n" .
           "You have successfully registered with " . $cfg->{-cfg}->{"project-name"} . ".\n" .
           "You can now access your account by going to the Login screen.\n" .
  +        "You should be redirected to the Login screen in 10 seconds automatically.<br/>\n" .
  +        "<meta http-equiv=\"refresh\" content=\"10;url=" .
  +        $self->url(-mode => "login", -login => ($rec->{'en_nickname'} || $rec->{'en_address'})) .
  +        "\">\n" .
           "<p/>\n" .
  -        "<a class=\"button\" href=\"".$self->url(-mode => "login", -login => ($rec->{'en_nickname'} || $rec->{'en_address'}))."\">" .
  +        "<a class=\"button\" href=\"" . 
  +        $self->url(-mode => "login", -login => ($rec->{'en_nickname'} || $rec->{'en_address'})) .
  +        "\">" .
           "Go to <b>Login</b> screen" .
           "</a>\n";
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	30 Mar 2007 18:24:28 -0000	1.37
  +++ ossp-pkg/ase/ase.cgi.login.pl	4 Apr 2007 14:13:35 -0000	1.38
  @@ -58,8 +58,8 @@
       $html .=
           "Welcome to " . $cfg->{-cfg}->{"service-name"} . "!<p/>\n" .
           "Please login with your name, nickname, or email address.<br/>\n" .
  -        "If you have still no account use \"Account Enrollment\", please.<br/>\n".
  -        "If you forgot your password, use \"Account Recovery\", please.\n";
  +        "If you have still no account, sign up by using \"Account Enrollment\", please.<br/>\n".
  +        "If you forgot your password, recover by using \"Account Recovery\", please.\n";
   
       #   generate the inner canvas
       $html .=
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.36 -r1.37 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	30 Mar 2007 19:09:05 -0000	1.36
  +++ ossp-pkg/ase/ase.cgi.main.pl	4 Apr 2007 14:13:35 -0000	1.37
  @@ -43,6 +43,8 @@
               login-failures-max login-failures-time-range login-failures-time-penalty 
               instant-notification-urls blacklist-email 
               heartbeat-interval heartbeat-reminders heartbeat-graceperiod
  +            requirement-realname requirement-nickname requirement-password
  +            notice-enrollment notice-resign
           ));
           my $txt < IO::All::io($cfgfile)
               or die "unable to read configuration file \"$cfgfile\"";
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.profile.pl
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 ase.cgi.profile.pl
  --- ossp-pkg/ase/ase.cgi.profile.pl	30 Mar 2007 18:44:47 -0000	1.22
  +++ ossp-pkg/ase/ase.cgi.profile.pl	4 Apr 2007 14:13:35 -0000	1.23
  @@ -32,6 +32,7 @@
   #   application run-time mode processing: "menu-profile"
   sub mode_menu_profile {
       my $self    = shift;
  +    my $cfg     = $self->param(-cfg);
       my $cgi     = $self->param(-cgi);
       my $dbi     = $self->param(-dbi);
       my $html    = $self->param(-html);
  @@ -300,19 +301,22 @@
   
           #   verify form parameters
           my $error = 0;
  -        if ($name !~ m/\S+\s+\S+/) {
  +        my $re = $cfg->{-cfg}->{"requirement-realname"};
  +        if ($name !~ m/${re}/) {
               $self->logbook("invalid name: \"%s\"", $name);
               $cgi->param('name.error', 'Invalid Name: not <i>firstname lastname</i>');
               $error = 1;
           }
  -        if ($nickname !~ m/^(?:|[a-z][a-z0-9]{3,})$/) {
  +        $re = $cfg->{-cfg}->{"requirement-nickname"};
  +        if ($nickname !~ m/(?:|${re})/) {
               $self->logbook("invalid nickname: \"%s\"", $nickname);
  -            $cgi->param('nickname.error', 'Invalid Nickname: has to be empty or match "^[a-z][a-z0-9]{3,}"');
  +            $cgi->param('nickname.error', 'Invalid Nickname: has to be empty or match "$re"');
               $error = 1;
           }
  -        if ($password ne '' and $password !~ m/^.{6,}$/) {
  +        $re = $cfg->{-cfg}->{"requirement-password"};
  +        if ($password ne '' and $password !~ m/^${re}$/) {
               $self->logbook("invalid password: \"%s\"", $password);
  -            $cgi->param('password.error', 'Invalid Password: at least 6 characters required');
  +            $cgi->param('password.error', 'Invalid Password: has to match "$re"');
               $error = 1;
           }
           if ($password ne '' and $password_verify ne $password) {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.resign.pl
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 ase.cgi.resign.pl
  --- ossp-pkg/ase/ase.cgi.resign.pl	29 Mar 2007 08:42:17 -0000	1.8
  +++ ossp-pkg/ase/ase.cgi.resign.pl	4 Apr 2007 14:13:35 -0000	1.9
  @@ -81,7 +81,7 @@
               "To prevent highjackers from deleting your account on a still open\n" .
               "browser session, you have to explicitly confirm the account deletion\n" .
               "by entering your password. In case you no longer know your password,\n" .
  -            "you have to perform a password recovery first.\n";
  +            "please logout and perform a password recovery first.\n";
   
           #   generate the inner canvas
           $html .=
  @@ -94,6 +94,13 @@
               "  </tr>\n" .
               "</table>\n";
   
  +        #   generate optional notice text
  +        if ($cfg->{-cfg}->{"notice-resign"} ne '') {
  +            $html .= "<p>\n";
  +            $html .= $cfg->{-cfg}->{"notice-resign"};
  +            $html .= "</p>\n";
  +        }
  +
           #   generate the input field: "password"
           $html >> "field-password";
           $html .= $cgi->password_field(
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr  4 16:18:48 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 74CA0752FBE; Wed,  4 Apr 2007 16:18:48 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ChangeLog TODO ase.cgi.rpc.pl
Message-Id: <20070404141848.74CA0752FBE@mail.ossp.org>
Date: Wed,  4 Apr 2007 16:18:48 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Apr-2007 16:18:48
  Branch: HEAD                             Handle: 2007040415184700

  Modified files:
    ossp-pkg/ase            ChangeLog TODO ase.cgi.rpc.pl

  Log:
    Do not pass account information via RPC "authenticate" method
    if authentication was not successful.

  Summary:
    Revision    Changes     Path
    1.18        +4  -0      ossp-pkg/ase/ChangeLog
    1.50        +0  -1      ossp-pkg/ase/TODO
    1.17        +6  -4      ossp-pkg/ase/ase.cgi.rpc.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 ChangeLog
  --- ossp-pkg/ase/ChangeLog	4 Apr 2007 14:13:35 -0000	1.17
  +++ ossp-pkg/ase/ChangeLog	4 Apr 2007 14:18:47 -0000	1.18
  @@ -13,6 +13,10 @@
   
     Changes between 0.1.x and 0.2.0 (xx-Oct-2005 to 20-Mar-2007)
   
  +   o Do not pass account information via RPC "authenticate" method
  +     if authentication was not successful.
  +     [Ralf S. Engelschall, Thomas Lotterer]
  +
      o Move requirement regular expressions from code to configuration.
        [Ralf S. Engelschall, Thomas Lotterer]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.49 -r1.50 TODO
  --- ossp-pkg/ase/TODO	4 Apr 2007 14:13:35 -0000	1.49
  +++ ossp-pkg/ase/TODO	4 Apr 2007 14:18:47 -0000	1.50
  @@ -12,5 +12,4 @@
     - switch enrollment workflow to steps similar to recovery workflow
     - enrollment workflow middle part ("email was sent"): allow resending
       of mail and give a few intermediate hints while waiting for mail, etc.
  -  - authenticate RPC should now give out too much information on error
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.rpc.pl
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 ase.cgi.rpc.pl
  --- ossp-pkg/ase/ase.cgi.rpc.pl	30 Mar 2007 10:42:24 -0000	1.16
  +++ ossp-pkg/ase/ase.cgi.rpc.pl	4 Apr 2007 14:18:47 -0000	1.17
  @@ -127,10 +127,12 @@
           $response->{"Session-Valid"} = "no";
           $response->{"Authentication-Success"} = ($authenticated ? "yes" : "no");
           $response->{"Authentication-Error"} = (defined $error ? $error : "none");
  -        $response->{"Client-Login-UUID"} = (defined $rec ? $rec->{"me_uuid"} : "unknown");
  -        $response->{"Client-Login-Name"} = (defined $rec ? $rec->{"me_name"} : "unknown");
  -        $response->{"Client-Login-Nick"} = (defined $rec ? ($rec->{"me_nickname"} || "") : "");
  -        $response->{"Client-Login-Addr"} = (defined $rec ? $rec->{"me_address"} : "");
  +        if ($authenticated) {
  +            $response->{"Client-Login-UUID"} = $rec->{"me_uuid"};
  +            $response->{"Client-Login-Name"} = $rec->{"me_name"} || "";
  +            $response->{"Client-Login-Nick"} = $rec->{"me_nickname"} || "";
  +            $response->{"Client-Login-Addr"} = $rec->{"me_address"};
  +        }
   
           #   generate response
           my $content = '';
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr  4 16:51:59 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 13DA87528EB; Wed,  4 Apr 2007 16:51:59 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cfg
Message-Id: <20070404145159.13DA87528EB@mail.ossp.org>
Date: Wed,  4 Apr 2007 16:51:59 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Apr-2007 16:51:59
  Branch: HEAD                             Handle: 2007040415515800

  Modified files:
    ossp-pkg/ase            ase.cfg

  Log:
    remove example

  Summary:
    Revision    Changes     Path
    1.16        +2  -2      ossp-pkg/ase/ase.cfg
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cfg
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 ase.cfg
  --- ossp-pkg/ase/ase.cfg	4 Apr 2007 14:13:35 -0000	1.15
  +++ ossp-pkg/ase/ase.cfg	4 Apr 2007 14:51:58 -0000	1.16
  @@ -45,6 +45,6 @@
                               q{\@afrobacon\.com$}
                               q{\@golfilla\.info$}
                               q{\@trashmail\.net$};
  -notice-enrollment           q{ENROLLMENT NOTICE};
  -notice-resign               q{RESIGN NOTICE};
  +notice-enrollment           q{};
  +notice-resign               q{};
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr  4 16:52:14 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 0CF407528EB; Wed,  4 Apr 2007 16:52:14 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.util.pl
Message-Id: <20070404145214.0CF407528EB@mail.ossp.org>
Date: Wed,  4 Apr 2007 16:52:14 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Apr-2007 16:52:14
  Branch: HEAD                             Handle: 2007040415521300

  Modified files:
    ossp-pkg/ase            ase.cgi.util.pl

  Log:
    add two helper functions

  Summary:
    Revision    Changes     Path
    1.26        +27 -0      ossp-pkg/ase/ase.cgi.util.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.util.pl
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 ase.cgi.util.pl
  --- ossp-pkg/ase/ase.cgi.util.pl	30 Mar 2007 08:32:46 -0000	1.25
  +++ ossp-pkg/ase/ase.cgi.util.pl	4 Apr 2007 14:52:13 -0000	1.26
  @@ -348,5 +348,32 @@
       return;
   }
   
  +#   helper function for expanding ASCII TAB characters
  +sub expand_tabs {
  +    my ($self, $ts, $str) = @_;
  +    my $i = 0;
  +    my $k;
  +    $str =~ s|(.)
  +             |($1 eq "\t"
  +               ? ($k = $i % $ts,
  +                  $i += ($ts - $k),
  +                  "*" x ($ts - $k) )
  +               : ($i++, $1)
  +              )
  +             |sgex;
  +    return $str;
  +}
  +
  +#   helper function for removing indenting
  +sub unindent {
  +    my ($self, $txt) = @_;
  +    $txt = $self->expand_tabs($txt);
  +    my $n = 999999;
  +    my $k;
  +    $txt =~ s/^(\s+)/$k = length($1), $n = ($k < $n ? $k : $n), $1/mge;
  +    $txt =~ s/^\s{$n}//mg;
  +    return $txt;
  +}
  +
   1;
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr  4 17:05:32 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 996467529C6; Wed,  4 Apr 2007 17:05:32 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.util.pl
Message-Id: <20070404150532.996467529C6@mail.ossp.org>
Date: Wed,  4 Apr 2007 17:05:32 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Apr-2007 17:05:32
  Branch: HEAD                             Handle: 2007040416053200

  Modified files:
    ossp-pkg/ase            ase.cgi.util.pl

  Log:
    fix helper function

  Summary:
    Revision    Changes     Path
    1.27        +2  -2      ossp-pkg/ase/ase.cgi.util.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.util.pl
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 ase.cgi.util.pl
  --- ossp-pkg/ase/ase.cgi.util.pl	4 Apr 2007 14:52:13 -0000	1.26
  +++ ossp-pkg/ase/ase.cgi.util.pl	4 Apr 2007 15:05:32 -0000	1.27
  @@ -367,8 +367,8 @@
   #   helper function for removing indenting
   sub unindent {
       my ($self, $txt) = @_;
  -    $txt = $self->expand_tabs($txt);
  -    my $n = 999999;
  +    $txt = $self->expand_tabs(8, $txt);
  +    my $n = 999;
       my $k;
       $txt =~ s/^(\s+)/$k = length($1), $n = ($k < $n ? $k : $n), $1/mge;
       $txt =~ s/^\s{$n}//mg;
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr  4 17:06:53 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 6E7487529C6; Wed,  4 Apr 2007 17:06:53 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ChangeLog ase.cgi.recover.pl ase.cli.db.sql
Message-Id: <20070404150653.6E7487529C6@mail.ossp.org>
Date: Wed,  4 Apr 2007 17:06:53 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Apr-2007 17:06:53
  Branch: HEAD                             Handle: 2007040416065201

  Modified files:
    ossp-pkg/ase            ChangeLog ase.cgi.recover.pl ase.cli.db.sql

  Log:
    Allow recovery through name, nickname or email address
    instead of just email address.

  Summary:
    Revision    Changes     Path
    1.19        +4  -0      ossp-pkg/ase/ChangeLog
    1.17        +61 -66     ossp-pkg/ase/ase.cgi.recover.pl
    1.4         +0  -4      ossp-pkg/ase/ase.cli.db.sql
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 ChangeLog
  --- ossp-pkg/ase/ChangeLog	4 Apr 2007 14:18:47 -0000	1.18
  +++ ossp-pkg/ase/ChangeLog	4 Apr 2007 15:06:52 -0000	1.19
  @@ -13,6 +13,10 @@
   
     Changes between 0.1.x and 0.2.0 (xx-Oct-2005 to 20-Mar-2007)
   
  +   o Allow recovery through name, nickname or email address
  +     instead of just email address.
  +     [Ralf S. Engelschall, Thomas Lotterer]
  +
      o Do not pass account information via RPC "authenticate" method
        if authentication was not successful.
        [Ralf S. Engelschall, Thomas Lotterer]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.recover.pl
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 ase.cgi.recover.pl
  --- ossp-pkg/ase/ase.cgi.recover.pl	30 Mar 2007 18:24:29 -0000	1.16
  +++ ossp-pkg/ase/ase.cgi.recover.pl	4 Apr 2007 15:06:52 -0000	1.17
  @@ -86,24 +86,25 @@
           $canvas->($html, "1");
   
           #   input form
  -        $html .=
  -            "In order to recover your Account, please specify " .
  -            "the unique Email address you have subscribed your Account " .
  -            "under in the past. Additionally, you have to " .
  -            "repeat the security code to confirm that you are human. " .
  -            "After pressing \"Recover\" you will receive a " .
  -            "verification Email under the specified address " .
  -            "containing a recovery URL. Once you clicked on this " .
  -            "URL, you will be able to recover your Account by setting a " .
  -            "new password.";
  +        $html .= $self->unindent(q{
  +            In order to recover your Account, please specify the
  +            unique name, nickname or Email address you have subscribed
  +            your Account under in the past. Additionally, you have to
  +            repeat the security code to confirm that you are human.
  +            After pressing "Recover" you will receive a verification
  +            Email containing a recovery URL under the address you have
  +            subscribed your Account under in the past. Once you clicked
  +            on this URL, you will be able to recover your Account by
  +            setting a new password.
  +        });
   
           #   generate the inner canvas
           $html .=
               "<p/>\n" .
               "<table class=\"F\">\n" .
               "  <tr>\n" .
  -            "    <td class=\"L\"><span class=\"label\">Email Address:</span></td>\n" .
  -            "    <td class=\"I\">"; $html->fold("field-address"); $html .= "</td>\n" .
  +            "    <td class=\"L\"><span class=\"label\">Login:</span></td>\n" .
  +            "    <td class=\"I\">"; $html->fold("field-login"); $html .= "</td>\n" .
               "  </tr>\n" .
               "  <tr>\n" .
               "    <td class=\"L\"><span class=\"label\">Security Code:</span></td>\n" .
  @@ -115,19 +116,19 @@
               "  </tr>\n" .
               "</table>\n";
   
  -        #   generate the input field "address"
  -        $html >> "field-address";
  +        #   generate the input field "login"
  +        $html >> "field-login";
           $html .= $cgi->textfield(
  -            -id        => 'field_address',
  +            -id        => 'field_login',
               -class     => 'field',
  -            -name      => 'address',
  +            -name      => 'login',
               -default   => '',
               -size      => 40,
               -maxlength => 80,
           ) . "<br/>";
           my $remote = $self->remotehostname();
  -        $html .= "<span class=\"annotation\">(<i>name</i>\@<i>domain</i>, e.g. \"foo\@$remote\")</span><br/>\n";
  -        if (defined(my $error = $cgi->param("address.error"))) {
  +        $html .= "<span class=\"annotation\">(<i>name</i>, <i>nickname</i> or <i>name</i>\@<i>domain</i>, e.g. \"foo\@$remote\")</span><br/>\n";
  +        if (defined(my $error = $cgi->param("login.error"))) {
               $html .= "<span class=\"error\">$error</span><br/>\n";
           }
           $html << 1;
  @@ -195,48 +196,40 @@
           }, $self->datetime(time())) or die $dbi->error();
   
           #   determine form parameters
  -        my $address    = $cgi->param("address");
  +        my $login      = $cgi->param("login");
           my $scode_num  = $cgi->param("scode");
           my $scode_uuid = $cgi->param("scode.uuid");
   
           #   verify form parameters
           my $retried = 0;
           my $error = 0;
  -        if ($address !~ m/^[^@]+\@(?:[^.]+\.)+[^.]+$/) {
  -            $self->logbook("invalid address: \"%s\"", $address);
  -            $cgi->param('address.error', 'Invalid Email address: not <i>name</i>@<i>domain</i>');
  +
  +        #   authenticate login (with dummy password to just determine account)
  +        my (undef, $rec, undef) = $self->authenticate($login, "dummy");
  +        if (not (defined $rec and exists $rec->{"me_uuid"})) {
  +            $self->logbook("invalid login: \"%s\"", $login);
  +            $cgi->param('login.error', "Invalid login");
               $error = 1;
           }
           else {
  -            my $rec;
  -            ($rec = $dbi->query(q{
  -                SELECT * FROM ase_member WHERE me_address = ?;
  -            }, $address)->hash());
  -            if (not defined($rec)) {
  -                $self->logbook("address \"%s\" not registered to any account", $address);
  -                $cgi->param('address.error', "Email address not registered to any account");
  -                $error = 1;
  -            }
  -            else {
  -                ($rec = $dbi->query(q{
  -                    SELECT *, MAX(re_start) FROM ase_recovery WHERE re_address = ?;
  -                }, $address)->hash());
  -                if (defined($rec)) {
  -                    my $penalty = $self->datetime2time($rec->{'re_penalty'});
  -                    if (time() < $penalty) {
  -                        $self->logbook("address \"%s\" already in progress for recovery", $address);
  -                        $cgi->param('address.error', "Email address already in progress for recovery since " .
  -                            $self->datetime2str($rec->{'re_start'}) .
  -                            "<br/>" .
  -                            "(new recovery still blocked for " . 
  -                            $self->time2human($self->datetime2time($rec->{'re_penalty'}) - time()) .
  -                            ")"
  -                        );
  -                        $error = 1;
  -                    }
  -                    else {
  -                        $retried = 1;
  -                    }
  +            (my $rec2 = $dbi->query(q{
  +                SELECT *, MAX(re_start) FROM ase_recovery WHERE re_uuid = ?;
  +            }, $rec->{"me_uuid"})->hash());
  +            if (defined($rec2)) {
  +                my $penalty = $self->datetime2time($rec2->{'re_penalty'});
  +                if (time() < $penalty) {
  +                    $self->logbook("account \"%s\" already in progress for recovery", $rec->{"me_uuid"});
  +                    $cgi->param('login.error', "Account already in progress for recovery since " .
  +                        $self->datetime2str($rec2->{'re_start'}) .
  +                        "<br/>" .
  +                        "(new recovery still blocked for " . 
  +                        $self->time2human($self->datetime2time($rec2->{'re_penalty'}) - time()) .
  +                        ")"
  +                    );
  +                    $error = 1;
  +                }
  +                else {
  +                    $retried = 1;
                   }
               }
           }
  @@ -251,11 +244,6 @@
               return $self->forward("recovery");
           }
   
  -        #   determine user information
  -        (my $me_uuid = $dbi->query(q{
  -            SELECT me_uuid FROM ase_member WHERE me_address = ?; 
  -        }, $address)->list()) or die $dbi->error();
  -
           #   generate recovery UUID code
           $self->use("OSSP::uuid");
           my $uuid = new OSSP::uuid;
  @@ -270,9 +258,9 @@
           my $t_expiry  = $self->datetime($now + 8*60*60);
           $dbi->query(q{
               INSERT INTO ase_recovery
  -            (re_uuid, re_address, re_key, re_start, re_penalty, re_expiry)
  -            VALUES (?, ?, ?, ?, ?, ?);
  -        },  $me_uuid, $address, $re_key, $t_start, $t_penalty, $t_expiry
  +            (re_uuid, re_key, re_start, re_penalty, re_expiry)
  +            VALUES (??);
  +        }, $rec->{"me_uuid"}, $re_key, $t_start, $t_penalty, $t_expiry
           ) or die $dbi->error();
   
           #   send recovery URL to Email address
  @@ -291,9 +279,9 @@
               "\n";
           $Mail::Sendmail::mailcfg{"smtp"} = [qw(localhost mail)];
           Mail::Sendmail::sendmail(
  -            To      => $address,
  +            To      => $rec->{"me_address"},
               From    => $cfg->{-cfg}->{"service-name"} . " <" . $cfg->{-cfg}->{"service-sender"} . ">\n",
  -            Subject => $cfg->{-cfg}->{"project-name"} . ": account password recovery requested\n",
  +            Subject => "Your " . $cfg->{-cfg}->{"project-name"} . " account recovery requires confirmation\n",
               Message => $mail,
           ) or die $Mail::Sendmail::error;
   
  @@ -302,14 +290,21 @@
   
           #   display hint
           $html .=
  -            "An Email was sent to you under &lt;<a href=\"mailto:$address\"><b>$address</b></a>&gt; containing\n" .
  +            "An Email was sent to you under &lt;<a href=\"mailto:" .
  +            $rec->{"me_address"} . "\"><b>" . $rec->{"me_address"} . "</b></a>&gt; containing\n" .
               "an URL. Please follow this URL for being directed to step 3\n" .
  -            "of this Recovery procedure, the Password Reset.\n";
  +            "of this Recovery procedure, the Password Reset.\n" .
  +            "<p/>\n" .
  +            "After successful confirmation " .
  +            "you can access your account by going to the Login screen.\n" .
  +            "<p/>\n" .
  +            "<a class=\"button\" href=\"" . 
  +            $self->url(-mode => "login", -login => ($rec->{"me_nickname"} || $rec->{"me_address"})) .
  +            "\">" .
  +            "Go to <b>Login</b> screen" .
  +            "</a>\n";
   
           #   log action
  -        (my $rec = $dbi->query(q{
  -            SELECT * FROM ase_member WHERE me_address = ?;
  -        }, $address)->hash());
           $self->logbook("recovery started for %s %s<%s>",
               $rec->{'me_name'},
               (defined $rec->{'me_nickname'} ? " (" . $rec->{'me_nickname'} . ")" : ""),
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cli.db.sql
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ase.cli.db.sql
  --- ossp-pkg/ase/ase.cli.db.sql	30 Mar 2007 18:24:29 -0000	1.3
  +++ ossp-pkg/ase/ase.cli.db.sql	4 Apr 2007 15:06:53 -0000	1.4
  @@ -153,9 +153,6 @@
       re_uuid                    TEXT NOT NULL, 
                                  -- Membership UUID
                                  -- [75468374-8721-11d9-bee4-0002a5489f14]
  -    re_address                 TEXT NOT NULL,
  -                               -- Email-Address
  -                               -- [rse@engelschall.com]
       re_key                     TEXT NOT NULL, 
                                  -- Recovery Key UUID (generated)
                                  -- [75468374-8721-11d9-bee4-0002a5489f15]
  @@ -325,7 +322,6 @@
   
   CREATE TABLE ase_recovery (
       re_uuid                    TEXT NOT NULL, 
  -    re_address                 TEXT NOT NULL,
       re_key                     TEXT NOT NULL, 
       re_start                   INTEGER NOT NULL,
       re_penalty                 INTEGER NOT NULL,
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr  4 17:07:17 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 8ED4275289B; Wed,  4 Apr 2007 17:07:17 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cfg
Message-Id: <20070404150717.8ED4275289B@mail.ossp.org>
Date: Wed,  4 Apr 2007 17:07:17 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Apr-2007 17:07:17
  Branch: HEAD                             Handle: 2007040416071700

  Modified files:
    ossp-pkg/ase            ase.cfg

  Log:
    fix quoting in config

  Summary:
    Revision    Changes     Path
    1.17        +3  -3      ossp-pkg/ase/ase.cfg
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cfg
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 ase.cfg
  --- ossp-pkg/ase/ase.cfg	4 Apr 2007 14:51:58 -0000	1.16
  +++ ossp-pkg/ase/ase.cfg	4 Apr 2007 15:07:17 -0000	1.17
  @@ -36,9 +36,9 @@
   heartbeat-reminders         28d 14d 7d 1d;
   heartbeat-graceperiod       14d;
   instant-notification-urls   "http://localhost/ase/sample.cgi?mode=notify;uuid=%s";
  -requirement-realname        "^.*\S+\s+\S+.*$";
  -requirement-nickname        "^[a-z][a-z0-9]{3,}$";
  -requirement-password        "^.{6,}$";
  +requirement-realname        q{^.*\S+\s+\S+.*$};
  +requirement-nickname        q{^[a-z][a-z0-9]{3,}$};
  +requirement-password        q{^.{6,}$};
   blacklist-email             q{\@temporaryinbox\.com$}
                               q{\@put2\.net$}
                               q{\@senseless-entertainment\.com$}
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr  4 17:07:48 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 9FF7F7529C6; Wed,  4 Apr 2007 17:07:48 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.enroll.pl
Message-Id: <20070404150748.9FF7F7529C6@mail.ossp.org>
Date: Wed,  4 Apr 2007 17:07:48 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Apr-2007 17:07:48
  Branch: HEAD                             Handle: 2007040416074800

  Modified files:
    ossp-pkg/ase            ase.cgi.enroll.pl

  Log:
    cosmetics only

  Summary:
    Revision    Changes     Path
    1.45        +2  -2      ossp-pkg/ase/ase.cgi.enroll.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.44 -r1.45 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	4 Apr 2007 14:13:35 -0000	1.44
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	4 Apr 2007 15:07:48 -0000	1.45
  @@ -435,7 +435,7 @@
       Mail::Sendmail::sendmail(
           To      => $address,
           From    => $cfg->{-cfg}->{"service-name"} . " <" . $cfg->{-cfg}->{"service-sender"} . ">\n",
  -        Subject => "Your " . $cfg->{-cfg}->{"project-name"} . " registration requires confirmation\n",
  +        Subject => "Your " . $cfg->{-cfg}->{"project-name"} . " account enrollment requires confirmation\n",
           Message => $mail,
       ) or die $Mail::Sendmail::error;
   
  @@ -481,7 +481,7 @@
           "an URL. Please follow this URL for being directed to step 3\n" .
           "of this Enrollment procedure, the Account Activation.\n" .
           "<p/>\n" .
  -        "After successful activation " .
  +        "After successful confirmation " .
           "you can access your account by going to the Login screen.\n" .
           "<p/>\n" .
           "<a class=\"button\" href=\"" . 
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr  4 17:08:23 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 641AF75289B; Wed,  4 Apr 2007 17:08:23 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.recover.pl
Message-Id: <20070404150823.641AF75289B@mail.ossp.org>
Date: Wed,  4 Apr 2007 17:08:23 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Apr-2007 17:08:23
  Branch: HEAD                             Handle: 2007040416082200

  Modified files:
    ossp-pkg/ase            ase.cgi.recover.pl

  Log:
    fix recovery database update after recent heartbeat workflow addition

  Summary:
    Revision    Changes     Path
    1.18        +3  -3      ossp-pkg/ase/ase.cgi.recover.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.recover.pl
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 ase.cgi.recover.pl
  --- ossp-pkg/ase/ase.cgi.recover.pl	4 Apr 2007 15:06:52 -0000	1.17
  +++ ossp-pkg/ase/ase.cgi.recover.pl	4 Apr 2007 15:08:22 -0000	1.18
  @@ -538,9 +538,9 @@
                   me_access_pw_md5      = ?,
                   me_access_pw_cryptmd5 = ?,
                   me_access_pw_cryptdes = ?,
  -                me_membership_heartbeat_time = ?,
  -                me_membership_heartbeat_count = 0,
  -                me_membership_heartbeat_uuid = NULL,
  +                me_account_heartbeat_time = ?,
  +                me_account_heartbeat_count = 0,
  +                me_account_heartbeat_uuid = NULL
               WHERE me_uuid = ?;
           }, $pw->{-sha1}, $pw->{-md5}, $pw->{-cryptmd5}, $pw->{-cryptdes},
              $t_heartbeat, $me_uuid
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr  4 17:44:56 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id E78CE752928; Wed,  4 Apr 2007 17:44:55 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ChangeLog ase.cgi.main.pl
Message-Id: <20070404154455.E78CE752928@mail.ossp.org>
Date: Wed,  4 Apr 2007 17:44:55 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Apr-2007 17:44:55
  Branch: HEAD                             Handle: 2007040416445500

  Modified files:
    ossp-pkg/ase            ChangeLog ase.cgi.main.pl

  Log:
    Perform session validation check to make sure that after
    an account is deleted from the database ("resign"), any
    still open browser sessions immediately become "logged out".

  Summary:
    Revision    Changes     Path
    1.20        +5  -0      ossp-pkg/ase/ChangeLog
    1.38        +10 -0      ossp-pkg/ase/ase.cgi.main.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 ChangeLog
  --- ossp-pkg/ase/ChangeLog	4 Apr 2007 15:06:52 -0000	1.19
  +++ ossp-pkg/ase/ChangeLog	4 Apr 2007 15:44:55 -0000	1.20
  @@ -13,6 +13,11 @@
   
     Changes between 0.1.x and 0.2.0 (xx-Oct-2005 to 20-Mar-2007)
   
  +   o Perform session validation check to make sure that after
  +     an account is deleted from the database ("resign"), any
  +     still open browser sessions immediately become "logged out".
  +     [Ralf S. Engelschall, Thomas Lotterer]
  +
      o Allow recovery through name, nickname or email address
        instead of just email address.
        [Ralf S. Engelschall, Thomas Lotterer]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	4 Apr 2007 14:13:35 -0000	1.37
  +++ ossp-pkg/ase/ase.cgi.main.pl	4 Apr 2007 15:44:55 -0000	1.38
  @@ -98,6 +98,16 @@
       $session->expire("+1h");
       $self->param(-session => $session);
   
  +    #   session validation check
  +    my $me_uuid = $session->param("login");
  +    if (defined $me_uuid and $me_uuid ne '') {
  +        if (($dbi->query(q{
  +            SELECT 1 FROM ase_member WHERE me_uuid = ?;
  +        }, $me_uuid)->list() || "") ne "1") {
  +            $session->clear("login");
  +        }
  +    }
  +
       #   configure run-time modes
       my $modes = {
           #   global modes
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr  4 17:45:21 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 5C5A2752928; Wed,  4 Apr 2007 17:45:21 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.login.pl
Message-Id: <20070404154521.5C5A2752928@mail.ossp.org>
Date: Wed,  4 Apr 2007 17:45:21 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Apr-2007 17:45:21
  Branch: HEAD                             Handle: 2007040416452100

  Modified files:
    ossp-pkg/ase            ase.cgi.login.pl

  Log:
    Cosmetics

  Summary:
    Revision    Changes     Path
    1.39        +2  -2      ossp-pkg/ase/ase.cgi.login.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.38 -r1.39 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	4 Apr 2007 14:13:35 -0000	1.38
  +++ ossp-pkg/ase/ase.cgi.login.pl	4 Apr 2007 15:45:21 -0000	1.39
  @@ -122,12 +122,12 @@
       $html >> "button-enrollment";
       $html .= "<a class=\"button\" id=\"button_enrollment\" href=\"" .
                $self->url(-mode => "enrollment") .
  -             "\">Account Enrollment</a>\n";
  +             "\">Account&nbsp;Enrollment</a>\n";
       $html << 1;
       $html >> "button-recovery";
       $html .= "<a class=\"button\" id=\"button_recovery\" href=\"" . 
                $self->url(-mode => "recovery") .
  -             "\">Account Recovery</a>\n";
  +             "\">Account&nbsp;Recovery</a>\n";
       $html << 1;
       $html >> "button-login";
       $html .= $cgi->submit(
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr  4 22:28:39 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 2FF8175289B; Wed,  4 Apr 2007 22:28:39 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.recover.pl
Message-Id: <20070404202839.2FF8175289B@mail.ossp.org>
Date: Wed,  4 Apr 2007 22:28:39 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Apr-2007 22:28:38
  Branch: HEAD                             Handle: 2007040421283800

  Modified files:
    ossp-pkg/ase            ase.cgi.recover.pl

  Log:
    sync with enrollment code

  Summary:
    Revision    Changes     Path
    1.19        +6  -1      ossp-pkg/ase/ase.cgi.recover.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.recover.pl
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 ase.cgi.recover.pl
  --- ossp-pkg/ase/ase.cgi.recover.pl	4 Apr 2007 15:08:22 -0000	1.18
  +++ ossp-pkg/ase/ase.cgi.recover.pl	4 Apr 2007 20:28:38 -0000	1.19
  @@ -43,7 +43,10 @@
       #   generate the outer canvas
       my $canvas = sub {
           my ($html, $step) = @_;
  +        #   generate title
           $html .= "<h1>Account Recovery</h1>\n";
  +
  +        #   generate the outer canvas
           $html .=
               "<ul class=\"breadcrumb\">\n" .
               "  <li><a href=\"".$self->url(-mode => "login")."\">Login &rarr;</a></li>\n" .
  @@ -62,6 +65,8 @@
           $html->fold("canvas");
           $html .= "</div>" . $cgi->end_form() . "\n";
           $html >> "canvas";
  +
  +        #   generate step-by-step list
           my $steps = [
               [ "1", "Specify Account Information" ],
               [ "2", "Confirm Account Ownership"   ],
  @@ -182,7 +187,7 @@
           ##  STEP 2: SEND RECOVERY UUID TO ACCOUNT EMAIL ADDRESS
           ##
   
  -        #   process workflow exist requests
  +        #   process workflow exit requests
           if ($cgi->param("button.cancel")) {
               return $self->redirect($cgi->url(-mode => "login"));
           }
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr  4 22:38:02 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id E7E337528EC; Wed,  4 Apr 2007 22:38:01 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ChangeLog TODO ase.cgi.enroll.pl ase.cgi.mai...
Message-Id: <20070404203801.E7E337528EC@mail.ossp.org>
Date: Wed,  4 Apr 2007 22:38:01 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Apr-2007 22:38:01
  Branch: HEAD                             Handle: 2007040421380100

  Modified files:
    ossp-pkg/ase            ChangeLog TODO ase.cgi.enroll.pl ase.cgi.main.pl

  Log:
    Switch the enrollment workflow implementation from
    multiple dispatch functions to a single dispatch function.

  Summary:
    Revision    Changes     Path
    1.21        +4  -0      ossp-pkg/ase/ChangeLog
    1.51        +0  -1      ossp-pkg/ase/TODO
    1.46        +525 -552   ossp-pkg/ase/ase.cgi.enroll.pl
    1.39        +1  -3      ossp-pkg/ase/ase.cgi.main.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 ChangeLog
  --- ossp-pkg/ase/ChangeLog	4 Apr 2007 15:44:55 -0000	1.20
  +++ ossp-pkg/ase/ChangeLog	4 Apr 2007 20:38:01 -0000	1.21
  @@ -13,6 +13,10 @@
   
     Changes between 0.1.x and 0.2.0 (xx-Oct-2005 to 20-Mar-2007)
   
  +   o Switch the enrollment workflow implementation from
  +     multiple dispatch functions to a single dispatch function.
  +     [Ralf S. Engelschall]
  +
      o Perform session validation check to make sure that after
        an account is deleted from the database ("resign"), any
        still open browser sessions immediately become "logged out".
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.50 -r1.51 TODO
  --- ossp-pkg/ase/TODO	4 Apr 2007 14:18:47 -0000	1.50
  +++ ossp-pkg/ase/TODO	4 Apr 2007 20:38:01 -0000	1.51
  @@ -9,7 +9,6 @@
     TODO
     ====
     - optionally add tooltips to form elements and lock, etc. on mouse over
  -  - switch enrollment workflow to steps similar to recovery workflow
     - enrollment workflow middle part ("email was sent"): allow resending
       of mail and give a few intermediate hints while waiting for mail, etc.
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.45 -r1.46 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	4 Apr 2007 15:07:48 -0000	1.45
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	4 Apr 2007 20:38:01 -0000	1.46
  @@ -30,589 +30,562 @@
   use warnings;
   
   #   application run-time mode processing: "enrollment"
  -sub mode_enrollment_screen {
  +sub mode_enrollment {
       my $self = shift;
       my $cfg  = $self->param(-cfg);
       my $cgi  = $self->param(-cgi);
  +    my $dbi  = $self->param(-dbi);
       my $html = $self->param(-html);
   
  -    #   generate title
  -    $html .= "<h1>Account Enrollment</h1>\n";
  +    #   determine step
  +    my $step = $cgi->param("step") || ($cgi->param("uuid") ? "3" : "1");
   
       #   generate the outer canvas
  -    $html .=
  -        "<ul class=\"breadcrumb\">\n" .
  -        "  <li><a href=\"".$self->url(-mode => "login")."\">Login &rarr;</a></li>\n" .
  -        "  <li>Enrollment:</li>\n" .
  -        "</ul>\n";
  -    $html .= $cgi->start_form(
  -        -method => 'POST',
  -        -action => $self->url(),
  -        -class  => 'enrollment',
  -    ) . "<div>\n";
  -    $html .= $cgi->hidden(
  -        -name     => 'mode',
  -        -default  => 'enrollment-action',
  -        -override => 1
  -    ) . "\n";
  -    $html->fold("canvas");
  -    $html .= "</div>" . $cgi->end_form() . "\n";
  -    $html >> "canvas";
  -
  -    #   generate step-by-step list
  -    $html .=
  -        "<ol class=\"steps\">\n" .
  -        "  <li class=\"this\">Account Specification</li>\n" .
  -        "  <li>Account Verification</li>\n" .
  -        "  <li>Account Activation</li>\n" .
  -        "</ol>\n";
  -
  -    #   generate description
  -    $html .=
  -        "<p/>\n" .
  -        "Enroll here and join " . $cfg->{-cfg}->{"project-name"} . ".\n" .
  -        "For successfully enrolling you have to specify at least your\n" .
  -        "real name, a unique nick name, your Email address and a password.\n" .
  -        "Additionally, you have to\n" .
  -        "repeat the security code to confirm that you are human.\n" .
  -        "After pressing \"Enroll\"\n" .
  -        "you will receive a verification Email under the specified\n" .
  -        "address containing an activation URL. Once you clicked on\n" .
  -        "this URL, you are successfully enrolled.\n";
  -
  -    #   determine some information
  -    my $pw = $self->makerandom(8, "A-Za-z0-9");
  -    my $remote = $self->remotehostname();
  -
  -    #   generate the inner canvas
  -    $html .=
  -        "<p/>\n" .
  -        "<table class=\"F\">\n" .
  -        "  <tr>\n" .
  -        "    <td class=\"L\"><span class=\"label\">Name:</span></td>\n" .
  -        "    <td class=\"I\">"; $html->fold("field-name"); $html .= "</td>\n" .
  -        "  </tr>\n" .
  -        "  <tr>\n" .
  -        "    <td class=\"L\"><span class=\"label\">Nickname:<br/>(optional)</span></td>\n" .
  -        "    <td class=\"I\">"; $html->fold("field-nickname"); $html .= "</td>\n" .
  -        "  </tr>\n" .
  -        "  <tr>\n" .
  -        "    <td class=\"L\"><span class=\"label\">Email Address:</span></td>\n" .
  -        "    <td class=\"I\">"; $html->fold("field-address"); $html .= "</td>\n" .
  -        "  </tr>\n" .
  -        "  <tr>\n" .
  -        "    <td class=\"L\"><span class=\"label\">Password:</span></td>\n" .
  -        "    <td class=\"I\">"; $html->fold("field-password"); $html .= "</td>\n" .
  -        "  </tr>\n" .
  -        "  <tr>\n" .
  -        "    <td class=\"L\"><span class=\"label\">Security Code:</span></td>\n" .
  -        "    <td class=\"I\">"; $html->fold("field-scode"); $html .= "</td>\n" .
  -        "  </tr>\n" .
  -        "  <tr>\n" .
  -        "    <td>&nbsp;</td>\n" .
  -        "    <td>"; $html->fold("button-enroll"); $html .= "</td>\n" .
  -        "  </tr>\n" .
  -        "</table>\n";
  -   
  -    #   generate optional notice text
  -    if ($cfg->{-cfg}->{"notice-enrollment"} ne '') {
  -        $html .= "<p>\n";
  -        $html .= $cfg->{-cfg}->{"notice-enrollment"};
  -        $html .= "</p>\n";
  -    }
  -
  -    #   generate a security code
  -    my $scode_uuid = ($cgi->param("scode.uuid") || $self->scode_create());
  -    $html .= $cgi->hidden(
  -        -name     => 'scode.uuid',
  -        -value    => $scode_uuid,
  -        -override => 1
  -    ) . "\n";
  -
  -    #   generate the input fields
  -    $html >> "field-name";
  -    $html .= $cgi->textfield(
  -        -id        => 'field_name',
  -        -class     => 'field',
  -        -name      => 'name',
  -        -default   => '',
  -        -size      => 40,
  -        -maxlength => 80,
  -    ) . "<br/>";
  -    $html .= "<span class=\"annotation\">(<i>firstname lastname</i>, e.g. \"John Doe\"; can be changed later)</span><br/>\n";
  -    if (defined(my $error = $cgi->param("name.error"))) {
  -        $html .= "<span class=\"error\">$error</span><br/>\n";
  -    }
  -    $html << 1;
  -    $html >> "field-nickname";
  -    $html .= $cgi->textfield(
  -        -id        => 'field_nickname',
  -        -class     => 'field',
  -        -name      => 'nickname',
  -        -default   => '',
  -        -size      => 20,
  -        -maxlength => 40,
  -    ) . "<br/>";
  -    $html .= "<span class=\"annotation\">(<i>nickname</i>, e.g. \"john\"; can be changed later)</span><br/>\n";
  -    if (defined(my $error = $cgi->param("nickname.error"))) {
  -        $html .= "<span class=\"error\">$error</span><br/>\n";
  -    }
  -    $html << 1;
  -    $html >> "field-address";
  -    $html .= $cgi->textfield(
  -        -id        => 'field_address',
  -        -class     => 'field',
  -        -name      => 'address',
  -        -default   => '',
  -        -size      => 40,
  -        -maxlength => 80,
  -    ) . "<br/>";
  -    $html .= "<span class=\"annotation\">(<i>name</i>\@<i>domain</i>, e.g. \"foo\@$remote\")</span><br/>\n";
  -    if (defined(my $error = $cgi->param("address.error"))) {
  -        $html .= "<span class=\"error\">$error</span><br/>\n";
  -    }
  -    $html << 1;
  -    $html >> "field-password";
  -    $html .= $cgi->password_field(
  -        -id        => 'field_password',
  -        -class     => 'field',
  -        -name      => 'password',
  -        -default   => '',
  -        -size      => 22,
  -        -maxlength => 20,
  -    ) . "<br/>";
  -    $html .= "<span class=\"annotation\">(up to 20 characters, e.g. \"$pw\"; can be changed later)</span><br/>\n";
  -    if (defined(my $error = $cgi->param("password.error"))) {
  -        $html .= "<span class=\"error\">$error</span><br/>\n";
  -    }
  -    $html .= $cgi->password_field(
  -        -id        => 'field_password_verify',
  -        -class     => 'field',
  -        -name      => 'password_verify',
  -        -default   => '',
  -        -size      => 22,
  -        -maxlength => 20,
  -    ) . "<br/>";
  -    $html .= "<span class=\"annotation\">(retype password here for verification)</span><br/>\n";
  -    if (defined(my $error = $cgi->param("password_verify.error"))) {
  -        $html .= "<span class=\"error\">$error</span><br/>\n";
  -    }
  -    $html << 1;
  -    $html >> "field-scode";
  -    $html .= "<img align=top src=\"".$self->url(-mode => 'scode', -uuid => $scode_uuid)."\"> :\n";
  -    $html .= $cgi->textfield(
  -        -id        => 'field_scode',
  -        -class     => 'field',
  -        -name      => 'scode',
  -        -default   => '',
  -        -size      => 7,
  -        -maxlength => 6,
  -    ) . "<br/>";
  -    $html .= "<span class=\"annotation\">(repeat the shown 6 character security code)</span><br/>\n";
  -    if (defined(my $error = $cgi->param("scode.error"))) {
  -        $html .= "<span class=\"error\">$error</span><br/>\n";
  -    }
  -    $html << 1;
  -    $html >> "button-enroll";
  -    $html .= $cgi->submit(
  -        -class   => 'button',
  -        -id      => 'button_cancel',
  -        -name    => 'button.cancel',
  -        -value   => 'Cancel',
  -    );
  -    $html .= $cgi->submit(
  -        -class   => 'button',
  -        -id      => 'button_enroll',
  -        -name    => 'button.enroll',
  -        -value   => 'Enroll',
  -    );
  -    $html << 1;
  -
  -    #   add (optional) client-side user-interface behaviours
  -    $html .= "<script type=\"text/javascript\">\n";
  -    $html->fold();
  -    $html .= "</script>";
  -    $html->divert();
  -    $html .= q{
  -        $(document).ready(function () {
  -            $('#field_name').blur(function () {
  -                var name = $(this).val();
  -                var nick = $('#field_nickname').val();
  -                if (name != "" && nick == "") {
  -                    nick = name.toLowerCase().replace(/(\S)\S*\s+/g, "$1").replace(/[\s.-]/, "");
  -                    $('#field_nickname').val(nick);
  -                }
  -            });
  -        });
  +    my $canvas = sub {
  +        my ($html, $step) = @_;
  +        #   generate title
  +        $html .= "<h1>Account Enrollment</h1>\n";
  +
  +        #   generate the outer canvas
  +        $html .=
  +            "<ul class=\"breadcrumb\">\n" .
  +            "  <li><a href=\"".$self->url(-mode => "login")."\">Login &rarr;</a></li>\n" .
  +            "  <li>Enrollment:</li>\n" .
  +            "</ul>\n";
  +        $html .= $cgi->start_form(
  +            -method => 'POST',
  +            -action => $self->url(),
  +            -class  => 'enrollment',
  +        ) . "<div>\n";
  +        $html .= $cgi->hidden(
  +            -name     => 'mode',
  +            -default  => 'enrollment',
  +            -override => 1
  +        ) . "\n";
  +        $html->fold("canvas");
  +        $html .= "</div>" . $cgi->end_form() . "\n";
  +        $html >> "canvas";
  +
  +        #   generate step-by-step list
  +        my $steps = [
  +            [ "1", "Account Specification" ],
  +            [ "2", "Account Verfification" ],
  +            [ "3", "Account Activiation"   ],
  +        ];
  +        $html .=
  +            "<ol class=\"steps\">\n";
  +        foreach my $s (@{$steps}) {
  +            $html .= "  <li" . ($s->[0] eq $step ? " class=\"this\"" : "") . ">" . $s->[1] . "</li>\n";
  +        }
  +        $html .=
  +            "</ol>\n";
       };
   
  -    return;
  -}
  -
  -#   run-time mode screen action: "enrollment"
  -sub mode_enrollment_action {
  -    my $self = shift;
  -    my $cfg  = $self->param(-cfg);
  -    my $cgi  = $self->param(-cgi);
  -    my $html = $self->param(-html);
  -    my $dbi  = $self->param(-dbi);
  -
  -    #   on-the-fly remove expired entries from database
  -    $dbi->query(q{
  -        DELETE FROM ase_enrollment WHERE en_expiry < ?;
  -    }, $self->datetime(time())) or die $dbi->error();
  -
  -    #   make sure we are called correctly
  -    if (defined($cgi->param("button.cancel"))) {
  -        return $self->forward("login");
  -    }
  -    elsif (not defined($cgi->param("button.enroll"))) {
  -        die "unable to determine action";
  -    }
  +    #   dispatch according to workflow step
  +    if ($step eq "1") {
  +        ##
  +        ##  STEP 1: ACCOUNT SPECIFICATION
  +        ##
  +
  +        #   render outer canvas
  +        $canvas->($html, "1");
  +
  +        #   generate description
  +        $html .=
  +            "<p/>\n" .
  +            "Enroll here and join " . $cfg->{-cfg}->{"project-name"} . ".\n" .
  +            "For successfully enrolling you have to specify at least your\n" .
  +            "real name, a unique nick name, your Email address and a password.\n" .
  +            "Additionally, you have to\n" .
  +            "repeat the security code to confirm that you are human.\n" .
  +            "After pressing \"Enroll\"\n" .
  +            "you will receive a verification Email under the specified\n" .
  +            "address containing an activation URL. Once you clicked on\n" .
  +            "this URL, you are successfully enrolled.\n";
  +
  +        #   determine some information
  +        my $pw = $self->makerandom(8, "A-Za-z0-9");
  +        my $remote = $self->remotehostname();
  +
  +        #   generate the inner canvas
  +        $html .=
  +            "<p/>\n" .
  +            "<table class=\"F\">\n" .
  +            "  <tr>\n" .
  +            "    <td class=\"L\"><span class=\"label\">Name:</span></td>\n" .
  +            "    <td class=\"I\">"; $html->fold("field-name"); $html .= "</td>\n" .
  +            "  </tr>\n" .
  +            "  <tr>\n" .
  +            "    <td class=\"L\"><span class=\"label\">Nickname:<br/>(optional)</span></td>\n" .
  +            "    <td class=\"I\">"; $html->fold("field-nickname"); $html .= "</td>\n" .
  +            "  </tr>\n" .
  +            "  <tr>\n" .
  +            "    <td class=\"L\"><span class=\"label\">Email Address:</span></td>\n" .
  +            "    <td class=\"I\">"; $html->fold("field-address"); $html .= "</td>\n" .
  +            "  </tr>\n" .
  +            "  <tr>\n" .
  +            "    <td class=\"L\"><span class=\"label\">Password:</span></td>\n" .
  +            "    <td class=\"I\">"; $html->fold("field-password"); $html .= "</td>\n" .
  +            "  </tr>\n" .
  +            "  <tr>\n" .
  +            "    <td class=\"L\"><span class=\"label\">Security Code:</span></td>\n" .
  +            "    <td class=\"I\">"; $html->fold("field-scode"); $html .= "</td>\n" .
  +            "  </tr>\n" .
  +            "  <tr>\n" .
  +            "    <td>&nbsp;</td>\n" .
  +            "    <td>"; $html->fold("button-enroll"); $html .= "</td>\n" .
  +            "  </tr>\n" .
  +            "</table>\n";
  +       
  +        #   generate optional notice text
  +        if ($cfg->{-cfg}->{"notice-enrollment"} ne '') {
  +            $html .= "<p>\n";
  +            $html .= $cfg->{-cfg}->{"notice-enrollment"};
  +            $html .= "</p>\n";
  +        }
   
  -    #   determine form parameters
  -    my $name            = $cgi->param("name");
  -    my $nickname        = $cgi->param("nickname");
  -    my $address         = $cgi->param("address");
  -    my $password        = $cgi->param("password");
  -    my $password_verify = $cgi->param("password_verify");
  -    my $scode_num       = $cgi->param("scode");
  -    my $scode_uuid      = $cgi->param("scode.uuid");
  -
  -    #   verify form parameters
  -    my $error = 0;
  -    my $re = $cfg->{-cfg}->{"requirement-realname"};
  -    if ($name !~ m/${re}/) {
  -        $self->logbook("invalid name: \"%s\"", $name);
  -        $cgi->param('name.error', 'Invalid Name: not <i>firstname lastname</i>');
  -        $error = 1;
  -    }
  -    $re = $cfg->{-cfg}->{"requirement-nickname"};
  -    if ($nickname !~ m/(?:|${re})/) {
  -        $self->logbook("invalid nickname: \"%s\"", $nickname);
  -        $cgi->param('nickname.error', 'Invalid Nickname: has to be empty or match "$re"');
  -        $error = 1;
  -    }
  -    if ($address !~ m/^[^@]+\@(?:[^.]+\.)+[^.]+$/) {
  -        $self->logbook("invalid address: \"%s\"", $address);
  -        $cgi->param('address.error', 'Invalid Email address: not <i>name</i>@<i>domain</i>');
  -        $error = 1;
  -    }
  -    $re = $cfg->{-cfg}->{"requirement-password"};
  -    if ($password !~ m/${re}/) {
  -        $self->logbook("invalid password: \"%s\"", $password);
  -        $cgi->param('password.error', 'Invalid Password: has to match "$re"');
  -        $error = 1;
  -    }
  -    if ($password_verify ne $password) {
  -        $cgi->param('password_verify.error', 'Invalid Verification Password: does not match Password');
  -        $error = 1;
  -    }
  -    if (not $self->scode_verify($scode_uuid, $scode_num)) {
  -        $cgi->param('scode.error', 'Invalid Security Code');
  -        $error = 1;
  +        #   generate a security code
  +        my $scode_uuid = ($cgi->param("scode.uuid") || $self->scode_create());
  +        $html .= $cgi->hidden(
  +            -name     => 'scode.uuid',
  +            -value    => $scode_uuid,
  +            -override => 1
  +        ) . "\n";
  +
  +        #   generate the input fields
  +        $html >> "field-name";
  +        $html .= $cgi->textfield(
  +            -id        => 'field_name',
  +            -class     => 'field',
  +            -name      => 'name',
  +            -default   => '',
  +            -size      => 40,
  +            -maxlength => 80,
  +        ) . "<br/>";
  +        $html .= "<span class=\"annotation\">(<i>firstname lastname</i>, e.g. \"John Doe\"; can be changed later)</span><br/>\n";
  +        if (defined(my $error = $cgi->param("name.error"))) {
  +            $html .= "<span class=\"error\">$error</span><br/>\n";
  +        }
  +        $html << 1;
  +        $html >> "field-nickname";
  +        $html .= $cgi->textfield(
  +            -id        => 'field_nickname',
  +            -class     => 'field',
  +            -name      => 'nickname',
  +            -default   => '',
  +            -size      => 20,
  +            -maxlength => 40,
  +        ) . "<br/>";
  +        $html .= "<span class=\"annotation\">(<i>nickname</i>, e.g. \"john\"; can be changed later)</span><br/>\n";
  +        if (defined(my $error = $cgi->param("nickname.error"))) {
  +            $html .= "<span class=\"error\">$error</span><br/>\n";
  +        }
  +        $html << 1;
  +        $html >> "field-address";
  +        $html .= $cgi->textfield(
  +            -id        => 'field_address',
  +            -class     => 'field',
  +            -name      => 'address',
  +            -default   => '',
  +            -size      => 40,
  +            -maxlength => 80,
  +        ) . "<br/>";
  +        $html .= "<span class=\"annotation\">(<i>name</i>\@<i>domain</i>, e.g. \"foo\@$remote\")</span><br/>\n";
  +        if (defined(my $error = $cgi->param("address.error"))) {
  +            $html .= "<span class=\"error\">$error</span><br/>\n";
  +        }
  +        $html << 1;
  +        $html >> "field-password";
  +        $html .= $cgi->password_field(
  +            -id        => 'field_password',
  +            -class     => 'field',
  +            -name      => 'password',
  +            -default   => '',
  +            -size      => 22,
  +            -maxlength => 20,
  +        ) . "<br/>";
  +        $html .= "<span class=\"annotation\">(up to 20 characters, e.g. \"$pw\"; can be changed later)</span><br/>\n";
  +        if (defined(my $error = $cgi->param("password.error"))) {
  +            $html .= "<span class=\"error\">$error</span><br/>\n";
  +        }
  +        $html .= $cgi->password_field(
  +            -id        => 'field_password_verify',
  +            -class     => 'field',
  +            -name      => 'password_verify',
  +            -default   => '',
  +            -size      => 22,
  +            -maxlength => 20,
  +        ) . "<br/>";
  +        $html .= "<span class=\"annotation\">(retype password here for verification)</span><br/>\n";
  +        if (defined(my $error = $cgi->param("password_verify.error"))) {
  +            $html .= "<span class=\"error\">$error</span><br/>\n";
  +        }
  +        $html << 1;
  +        $html >> "field-scode";
  +        $html .= "<img align=top src=\"".$self->url(-mode => 'scode', -uuid => $scode_uuid)."\"> :\n";
  +        $html .= $cgi->textfield(
  +            -id        => 'field_scode',
  +            -class     => 'field',
  +            -name      => 'scode',
  +            -default   => '',
  +            -size      => 7,
  +            -maxlength => 6,
  +        ) . "<br/>";
  +        $html .= "<span class=\"annotation\">(repeat the shown 6 character security code)</span><br/>\n";
  +        if (defined(my $error = $cgi->param("scode.error"))) {
  +            $html .= "<span class=\"error\">$error</span><br/>\n";
  +        }
  +        $html << 1;
  +        $html >> "button-enroll";
  +        $html .= $cgi->submit(
  +            -class   => 'button',
  +            -id      => 'button_cancel',
  +            -name    => 'button.cancel',
  +            -value   => 'Cancel',
  +        );
  +        $html .= $cgi->submit(
  +            -class   => 'button',
  +            -id      => 'button_enroll',
  +            -name    => 'button.enroll',
  +            -value   => 'Enroll',
  +        );
  +        $html .= $cgi->hidden(
  +            -name     => 'step',
  +            -default  => '2',
  +            -override => 1
  +        ) . "\n";
  +        $html << 1;
  +
  +        #   add (optional) client-side user-interface behaviours
  +        $html .= "<script type=\"text/javascript\">\n";
  +        $html->fold();
  +        $html .= "</script>";
  +        $html->divert();
  +        $html .= q{
  +            $(document).ready(function () {
  +                $('#field_name').blur(function () {
  +                    var name = $(this).val();
  +                    var nick = $('#field_nickname').val();
  +                    if (name != "" && nick == "") {
  +                        nick = name.toLowerCase().replace(/(\S)\S*\s+/g, "$1").replace(/[\s.-]/, "");
  +                        $('#field_nickname').val(nick);
  +                    }
  +                });
  +            });
  +        };
       }
  +    elsif ($step eq "2") {
  +        ##
  +        ##  STEP 2: SEND ENROLLMENT UUID TO EMAIL ADDRESS
  +        ##
  +
  +        #   process workflow exit requests
  +        if (defined($cgi->param("button.cancel"))) {
  +            return $self->redirect($cgi->url(-mode => "login"));
  +        }
  +        elsif (not defined($cgi->param("button.enroll"))) {
  +            die "unable to determine action";
  +        }
   
  -    #   make sure the Email address is still not used
  -    if (not defined($cgi->param('address.error'))) {
  -        my $rec;
  -        ($rec = $dbi->query(q{
  -            SELECT * FROM ase_member WHERE me_address = ?;
  -        }, $address)->hash());
  -        if (defined($rec)) {
  -            $self->logbook("address \"%s\" already in use", $address);
  -            $cgi->param('address.error', "Email address already in use since " .
  -                $self->datetime2str($rec->{'me_membership_start'}) . " (enrollment already successful)");
  +        #   on-the-fly remove expired entries from database
  +        $dbi->query(q{
  +            DELETE FROM ase_enrollment WHERE en_expiry < ?;
  +        }, $self->datetime(time())) or die $dbi->error();
  +
  +        #   determine form parameters
  +        my $name            = $cgi->param("name");
  +        my $nickname        = $cgi->param("nickname");
  +        my $address         = $cgi->param("address");
  +        my $password        = $cgi->param("password");
  +        my $password_verify = $cgi->param("password_verify");
  +        my $scode_num       = $cgi->param("scode");
  +        my $scode_uuid      = $cgi->param("scode.uuid");
  +
  +        #   verify form parameters
  +        my $error = 0;
  +        my $re = $cfg->{-cfg}->{"requirement-realname"};
  +        if ($name !~ m/${re}/) {
  +            $self->logbook("invalid name: \"%s\"", $name);
  +            $cgi->param('name.error', 'Invalid Name: not <i>firstname lastname</i>');
  +            $error = 1;
  +        }
  +        $re = $cfg->{-cfg}->{"requirement-nickname"};
  +        if ($nickname !~ m/(?:|${re})/) {
  +            $self->logbook("invalid nickname: \"%s\"", $nickname);
  +            $cgi->param('nickname.error', 'Invalid Nickname: has to be empty or match "$re"');
               $error = 1;
           }
  -        else {
  +        if ($address !~ m/^[^@]+\@(?:[^.]+\.)+[^.]+$/) {
  +            $self->logbook("invalid address: \"%s\"", $address);
  +            $cgi->param('address.error', 'Invalid Email address: not <i>name</i>@<i>domain</i>');
  +            $error = 1;
  +        }
  +        $re = $cfg->{-cfg}->{"requirement-password"};
  +        if ($password !~ m/${re}/) {
  +            $self->logbook("invalid password: \"%s\"", $password);
  +            $cgi->param('password.error', 'Invalid Password: has to match "$re"');
  +            $error = 1;
  +        }
  +        if ($password_verify ne $password) {
  +            $cgi->param('password_verify.error', 'Invalid Verification Password: does not match Password');
  +            $error = 1;
  +        }
  +        if (not $self->scode_verify($scode_uuid, $scode_num)) {
  +            $cgi->param('scode.error', 'Invalid Security Code');
  +            $error = 1;
  +        }
  +
  +        #   make sure the Email address is still not used
  +        if (not defined($cgi->param('address.error'))) {
  +            my $rec;
               ($rec = $dbi->query(q{
  -                SELECT *, MAX(en_start) FROM ase_enrollment WHERE en_address = ?;
  +                SELECT * FROM ase_member WHERE me_address = ?;
               }, $address)->hash());
               if (defined($rec)) {
  -                my $penalty = $self->datetime2time($rec->{'en_penalty'});
  -                if (time() < $penalty) {
  -                    $self->logbook("address \"%s\" already in progress for enrolling", $address);
  -                    $cgi->param('address.error',
  -                        "Email address already in use for enrolling since " .
  -                        "<br/>" .
  -                        "(new enrollment still blocked for " . 
  -                        $self->time2human($self->datetime2time($rec->{'en_penalty'}) - time()) .
  -                        ")"
  -                    );
  -                    $error = 1;
  +                $self->logbook("address \"%s\" already in use", $address);
  +                $cgi->param('address.error', "Email address already in use since " .
  +                    $self->datetime2str($rec->{'me_membership_start'}) . " (enrollment already successful)");
  +                $error = 1;
  +            }
  +            else {
  +                ($rec = $dbi->query(q{
  +                    SELECT *, MAX(en_start) FROM ase_enrollment WHERE en_address = ?;
  +                }, $address)->hash());
  +                if (defined($rec)) {
  +                    my $penalty = $self->datetime2time($rec->{'en_penalty'});
  +                    if (time() < $penalty) {
  +                        $self->logbook("address \"%s\" already in progress for enrolling", $address);
  +                        $cgi->param('address.error',
  +                            "Email address already in use for enrolling since " .
  +                            "<br/>" .
  +                            "(new enrollment still blocked for " . 
  +                            $self->time2human($self->datetime2time($rec->{'en_penalty'}) - time()) .
  +                            ")"
  +                        );
  +                        $error = 1;
  +                    }
                   }
               }
           }
  -    }
   
  -    #   make sure the Nickname is still not used
  -    if ($nickname ne '' && not defined($cgi->param('nickname.error'))) {
  -        my $rec;
  -        ($rec = $dbi->query(q{
  -            SELECT * FROM ase_member WHERE me_nickname = ?;
  -        }, $nickname)->hash());
  -        if (defined($rec)) {
  -            $self->logbook("nickname \"%s\" already in use", $nickname);
  -            $cgi->param('nickname.error', "nickname already in use since " .
  -                $self->datetime2str($rec->{'me_membership_start'}) . " (enrollment already successful)");
  -            $error = 1;
  +        #   make sure the Nickname is still not used
  +        if ($nickname ne '' && not defined($cgi->param('nickname.error'))) {
  +            my $rec;
  +            ($rec = $dbi->query(q{
  +                SELECT * FROM ase_member WHERE me_nickname = ?;
  +            }, $nickname)->hash());
  +            if (defined($rec)) {
  +                $self->logbook("nickname \"%s\" already in use", $nickname);
  +                $cgi->param('nickname.error', "nickname already in use since " .
  +                    $self->datetime2str($rec->{'me_membership_start'}) . " (enrollment already successful)");
  +                $error = 1;
  +            }
           }
  -    }
   
  -    #   make sure the Email address is not a "take and throw away" one
  -    my @blacklist1 = @{$cfg->{-cfg}->{"blacklist-email"}};
  -    foreach my $re (@blacklist1) {
  -        if ($address =~ m/$re/s) {
  -            $self->logbook("address \"%s\" is not valid", $address);
  -            $cgi->param('address.error', "Email address is on black-list of mail account providers");
  -            $error = 1;
  +        #   make sure the Email address is not a "take and throw away" one
  +        my @blacklist1 = @{$cfg->{-cfg}->{"blacklist-email"}};
  +        foreach my $re (@blacklist1) {
  +            if ($address =~ m/$re/s) {
  +                $self->logbook("address \"%s\" is not valid", $address);
  +                $cgi->param('address.error', "Email address is on black-list of mail account providers");
  +                $error = 1;
  +            }
           }
  -    }
   
  -    #   make sure the Name is not a dummy one
  -    my @blacklist2 = (
  -        qr/(?:John\s+)?Doe/i,
  -        qr/\bAnon(?:ymous)?\b/i,
  -        qr/\b(?:foo|bar|baz|quux)\b/i,
  -        qr/(?:firstname|lastname)/i,
  -        qr/^\S+$/i,
  -    );
  -    foreach my $re (@blacklist2) {
  -        if ($name =~ m/$re/s) {
  -            $self->logbook("name \"%s\" not valid", $name);
  -            $cgi->param('name.error', "Name is not valid");
  -            $error = 1;
  +        #   make sure the Name is not a dummy one
  +        my @blacklist2 = (
  +            qr/(?:John\s+)?Doe/i,
  +            qr/\bAnon(?:ymous)?\b/i,
  +            qr/\b(?:foo|bar|baz|quux)\b/i,
  +            qr/(?:firstname|lastname)/i,
  +            qr/^\S+$/i,
  +        );
  +        foreach my $re (@blacklist2) {
  +            if ($name =~ m/$re/s) {
  +                $self->logbook("name \"%s\" not valid", $name);
  +                $cgi->param('name.error', "Name is not valid");
  +                $error = 1;
  +            }
           }
  -    }
  -
  -    #   redirect to enrollment screen if errors occurred
  -    if ($error) {
  -        return $self->forward("enrollment");
  -    }
  -
  -    #   generate membership UUID
  -    $self->use("OSSP::uuid");
  -    my $uuid = new OSSP::uuid;
  -    $uuid->make("v1");
  -    my $me_uuid = $uuid->export("str");
  -    undef $uuid;
  -
  -    #   generate encrypted password variants
  -    my $pw = $self->makepasswords($password);
  -
  -    #   create membership record in database
  -    my $now = time();
  -    my $t_start   = $self->datetime($now);
  -    my $t_penalty = $self->datetime($now + 1*60*60);
  -    my $t_expiry  = $self->datetime($now + 8*60*60);
  -    $dbi->query(q{
  -        INSERT INTO ase_enrollment
  -        (en_uuid,
  -         en_name, en_nickname, en_address, en_pw_sha1, en_pw_md5, en_pw_cryptmd5, en_pw_cryptdes,
  -         en_start, en_penalty, en_expiry)
  -        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
  -    },  $me_uuid, $name, ($nickname ne '' ? $nickname : undef), $address,
  -        $pw->{-sha1}, $pw->{-md5}, $pw->{-cryptmd5}, $pw->{-cryptdes}, 
  -        $t_start, $t_penalty, $t_expiry
  -    ) or die $dbi->error();
  -
  -    #   send activation URL to Email address
  -    $self->use("Mail::Sendmail");
  -    my $url = $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "?mode=activation;uuid=$me_uuid";
  -    my $mail =
  -        "Thank you for your interest in registering with " . $cfg->{-cfg}->{"project-name"} . ".\n" .
  -        "To finish your registration you have to activate your account\n" .
  -        "by visiting the following URL until ".$self->datetime2str($t_expiry)." UTC:\n" .
  -        "\n" .
  -        "$url\n" .
  -        "\n" .
  -        "-- \n" .
  -        $cfg->{-cfg}->{"service-name"} . "\n" .
  -        "" . $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "\n" .
  -        "\n";
  -    $Mail::Sendmail::mailcfg{"smtp"} = [qw(localhost mail)];
  -    Mail::Sendmail::sendmail(
  -        To      => $address,
  -        From    => $cfg->{-cfg}->{"service-name"} . " <" . $cfg->{-cfg}->{"service-sender"} . ">\n",
  -        Subject => "Your " . $cfg->{-cfg}->{"project-name"} . " account enrollment requires confirmation\n",
  -        Message => $mail,
  -    ) or die $Mail::Sendmail::error;
  -
  -    #   generate the outer canvas
  -    $html .= "<h1>Account Enrollment</h1>\n";
  -    $html .=
  -        "<ul class=\"breadcrumb\">\n" .
  -        "  <li><a href=\"".$self->url(-mode => "login")."\">Login &rarr;</a></li>\n" .
  -        "  <li>Enrollment:</li>\n" .
  -        "</ul>\n";
  -    $html .= $cgi->start_form(
  -        -method => 'POST',
  -        -action => $self->url(),
  -        -class  => 'enrollment',
  -    ) . "\n";
  -    $html .= $cgi->hidden(
  -        -name     => 'mode',
  -        -default  => 'enrollment-action',
  -        -override => 1
  -    ) . "\n";
  -    $html->fold("canvas");
  -    $html .= $cgi->end_form() . "\n";
  -    $html >> "canvas";
  -
  -    #   back
  -    #$html .=
  -    #    "<a class=\"button\" href=\"".$self->url(-mode => "login")."\">" .
  -    #    "&larr; Back to <b>Login</b>" .
  -    #    "</a><p/>\n";
  -
  -    #   generate step-by-step list
  -    $html .=
  -        "<ol class=\"steps\">\n" .
  -        "  <li>Account Specification</li>\n" .
  -        "  <li class=\"this\">Account Verification</li>\n" .
  -        "  <li>Account Activation</li>\n" .
  -        "</ol>\n";
  -
  -    #   generate header text
  -    $html .=
  -        "<p/>\n" .
  -        "An Email was sent to you under &lt;<a href=\"mailto:$address\"><b>$address</b></a>&gt; containing\n" .
  -        "an URL. Please follow this URL for being directed to step 3\n" .
  -        "of this Enrollment procedure, the Account Activation.\n" .
  -        "<p/>\n" .
  -        "After successful confirmation " .
  -        "you can access your account by going to the Login screen.\n" .
  -        "<p/>\n" .
  -        "<a class=\"button\" href=\"" . 
  -        $self->url(-mode => "login", -login => ($nickname || $address)) .
  -        "\">" .
  -        "Go to <b>Login</b> screen" .
  -        "</a>\n";
  -
  -    $self->logbook("enrollment started for %s <%s>", $name, $address);
  -
  -    return;
  -}
   
  -#   run-time mode screen rendering: "activation"
  -sub mode_activation_screen {
  -    my $self = shift;
  -    my $cfg  = $self->param(-cfg);
  -    my $cgi  = $self->param(-cgi);
  -    my $dbi  = $self->param(-dbi);
  -    my $html = $self->param(-html);
  +        #   redirect to enrollment screen if errors occurred
  +        if ($error) {
  +            $cgi->param("step", "1");
  +            return $self->forward("enrollment");
  +        }
   
  -    #   determine UUID
  -    my $uuid = $cgi->param("uuid");
  +        #   generate membership UUID
  +        $self->use("OSSP::uuid");
  +        my $uuid = new OSSP::uuid;
  +        $uuid->make("v1");
  +        my $me_uuid = $uuid->export("str");
  +        undef $uuid;
  +
  +        #   generate encrypted password variants
  +        my $pw = $self->makepasswords($password);
  +
  +        #   create membership record in database
  +        my $now = time();
  +        my $t_start   = $self->datetime($now);
  +        my $t_penalty = $self->datetime($now + 1*60*60);
  +        my $t_expiry  = $self->datetime($now + 8*60*60);
  +        $dbi->query(q{
  +            INSERT INTO ase_enrollment
  +            (en_uuid,
  +             en_name, en_nickname, en_address, en_pw_sha1, en_pw_md5, en_pw_cryptmd5, en_pw_cryptdes,
  +             en_start, en_penalty, en_expiry)
  +            VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
  +        },  $me_uuid, $name, ($nickname ne '' ? $nickname : undef), $address,
  +            $pw->{-sha1}, $pw->{-md5}, $pw->{-cryptmd5}, $pw->{-cryptdes}, 
  +            $t_start, $t_penalty, $t_expiry
  +        ) or die $dbi->error();
  +
  +        #   send activation URL to Email address
  +        $self->use("Mail::Sendmail");
  +        my $url = $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "?mode=enrollment;uuid=$me_uuid";
  +        my $mail =
  +            "Thank you for your interest in registering with " . $cfg->{-cfg}->{"project-name"} . ".\n" .
  +            "To finish your registration you have to activate your account\n" .
  +            "by visiting the following URL until ".$self->datetime2str($t_expiry)." UTC:\n" .
  +            "\n" .
  +            "$url\n" .
  +            "\n" .
  +            "-- \n" .
  +            $cfg->{-cfg}->{"service-name"} . "\n" .
  +            "" . $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "\n" .
  +            "\n";
  +        $Mail::Sendmail::mailcfg{"smtp"} = [qw(localhost mail)];
  +        Mail::Sendmail::sendmail(
  +            To      => $address,
  +            From    => $cfg->{-cfg}->{"service-name"} . " <" . $cfg->{-cfg}->{"service-sender"} . ">\n",
  +            Subject => "Your " . $cfg->{-cfg}->{"project-name"} . " account enrollment requires confirmation\n",
  +            Message => $mail,
  +        ) or die $Mail::Sendmail::error;
  +
  +        #   render outer canvas
  +        $canvas->($html, "2");
  +
  +        #   display hint
  +        $html .=
  +            "<p/>\n" .
  +            "An Email was sent to you under &lt;<a href=\"mailto:$address\"><b>$address</b></a>&gt; containing\n" .
  +            "an URL. Please visit this URL for being directed to step 3\n" .
  +            "of this Enrollment procedure, the Account Activation.\n" .
  +            "<p/>\n" .
  +            "After successful confirmation " .
  +            "you can access your account by going to the Login screen.\n" .
  +            "<p/>\n" .
  +            "<a class=\"button\" href=\"" . 
  +            $self->url(-mode => "login", -login => ($nickname || $address)) .
  +            "\">" .
  +            "Go to <b>Login</b> screen" .
  +            "</a>\n";
  +
  +        #   log action
  +        $self->logbook("enrollment started for %s <%s>", $name, $address);
  +    }
  +    elsif ($step eq "3") {
  +        ##
  +        ##  STEP 3: 
  +        ##
  +
  +        #   render outer canvas
  +        $canvas->($html, "3");
  +
  +        #   determine UUID
  +        my $uuid = $cgi->param("uuid");
  +
  +        #   lookup enrollment information from database
  +        my $rec = $dbi->query(q{
  +            SELECT * FROM ase_enrollment WHERE en_uuid = ?;
  +        }, $uuid)->hash();
  +        if (not defined($rec)) {
  +            $html .= "<h1>Account Enrollment</h1>\n" .
  +                     "<h3 class=\"error\">ERROR: ACTIVATION FAILED</h3>\n" .
  +                     "Sorry, no enrollment information found under " .
  +                     "UUID $uuid. Either you waited too long for activating " .
  +                     "(the enrollment information already expired), or " .
  +                     "you already activated your account or " .
  +                     "the URL you followed was incorrect. Please start " .
  +                     "from scratch!" .
  +                     "<p/>\n" .
  +                     "<a class=\"button\" href=\"".$self->url(-mode => "enrollment")."\">" .
  +                     "Go to <b>Enrollment</b> screen" .
  +                     "</a>\n";
  +            return;
  +        }
   
  -    #   lookup enrollment information from database
  -    my $rec = $dbi->query(q{
  -        SELECT * FROM ase_enrollment WHERE en_uuid = ?;
  -    }, $uuid)->hash();
  -    if (not defined($rec)) {
  -        $html .= "<h1>Account Enrollment</h1>\n" .
  -                 "<h3 class=\"error\">ERROR: ACTIVATION FAILED</h3>\n" .
  -                 "Sorry, no enrollment information found under " .
  -                 "UUID $uuid. Either you waited too long for activating " .
  -                 "(the enrollment information already expired), or " .
  -                 "you already activated your account or " .
  -                 "the URL you followed was incorrect. Please start " .
  -                 "from scratch!" .
  -                 "<p/>\n" .
  -                 "<a class=\"button\" href=\"".$self->url(-mode => "enrollment")."\">" .
  -                 "Go to <b>Enrollment</b> screen" .
  -                 "</a>\n";
  -        return;
  +        #   create new membership account
  +        my $now     = time();
  +        my $t_start = $self->datetime($now);
  +        my $t_end   = undef;
  +        my $t_heartbeat = $self->datetime($now + $self->human2sec($cfg->{-cfg}->{"heartbeat-interval"}));
  +        $dbi->query(q{
  +            INSERT INTO ase_member
  +            (me_uuid, me_name, me_nickname, me_address,
  +             me_membership_karma, me_membership_prop, me_membership_type,
  +             me_membership_start, me_membership_end,
  +             me_account_heartbeat_time, me_account_heartbeat_count, me_account_heartbeat_uuid,
  +             me_access_pw_sha1, me_access_pw_md5, me_access_pw_cryptmd5, me_access_pw_cryptdes)
  +            VALUES (??);
  +        },  $uuid, $rec->{"en_name"}, $rec->{"en_nickname"}, $rec->{"en_address"},
  +            1, "", "N", $t_start, $t_end, $t_heartbeat, 0, undef,
  +            $rec->{"en_pw_sha1"}, $rec->{"en_pw_md5"}, $rec->{"en_pw_cryptmd5"}, $rec->{"en_pw_cryptdes"},
  +        ) or die $dbi->error();
  +
  +        #   delete enrollment information (one or even more in case of retries)
  +        $dbi->query(q{
  +            DELETE FROM ase_enrollment WHERE en_address = ?;
  +        }, $rec->{"en_address"}) or die $dbi->error();
  +
  +        #   send notifications
  +        $self->notify($uuid);
  +
  +        #   generate description
  +        $html .=
  +            "Congratulations!\n" .
  +            "<p/>\n" .
  +            "You have successfully registered with " . $cfg->{-cfg}->{"project-name"} . ".\n" .
  +            "You can now access your account by going to the Login screen.\n" .
  +            "You should be redirected to the Login screen in 10 seconds automatically.<br/>\n" .
  +            "<meta http-equiv=\"refresh\" content=\"10;url=" .
  +            $self->url(-mode => "login", -login => ($rec->{'en_nickname'} || $rec->{'en_address'})) .
  +            "\">\n" .
  +            "<p/>\n" .
  +            "<a class=\"button\" href=\"" . 
  +            $self->url(-mode => "login", -login => ($rec->{'en_nickname'} || $rec->{'en_address'})) .
  +            "\">" .
  +            "Go to <b>Login</b> screen" .
  +            "</a>\n";
  +
  +        #   determine additional information for administrators
  +        (my $rec2 = $dbi->query(q{
  +            SELECT count(*) AS count FROM ase_member;
  +        })->hash()) or die $dbi->error();
  +
  +        #   send activation information to administrators
  +        $self->use("Mail::Sendmail");
  +        my $mail =
  +            "Successful " . $cfg->{-cfg}->{"project-name"} . " Fellow Registration (No. ".$rec2->{count}."):\n" .
  +            $rec->{"en_name"}.(defined $rec->{"en_nickname"} ? " (".$rec->{"en_nickname"}.")" : "")." <".$rec->{"en_address"}.">\n" .
  +            "\n" .
  +            "-- \n" .
  +            $cfg->{-cfg}->{"service-name"} . "\n" .
  +            "" . $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "\n" .
  +            "\n";
  +        $Mail::Sendmail::mailcfg{"smtp"} = [qw(localhost mail)];
  +        Mail::Sendmail::sendmail(
  +            To      => $cfg->{-cfg}->{"service-admin"},
  +            From    => $cfg->{-cfg}->{"service-name"} . " <" . $cfg->{-cfg}->{"service-sender"} . ">\n",
  +            Subject => $cfg->{-cfg}->{"project-name"} . " Registration: " . $rec->{"en_name"} . (defined $rec->{"en_nickname"} ? " (" . $rec->{"en_nickname"} . ")" : ""). " <" . $rec->{"en_address"} . ">\n",
  +            Message => $mail,
  +        ) or die $Mail::Sendmail::error;
  +
  +        #   log action
  +        $self->logbook("enrollment finished for %s %s<%s>",
  +            $rec->{"en_name"}, (defined $rec->{"en_nickname"} ? " (" . $rec->{"en_nickname"} . ")" : ""), $rec->{"en_address"});
       }
   
  -    #   create new membership account
  -    my $now     = time();
  -    my $t_start = $self->datetime($now);
  -    my $t_end   = undef;
  -    my $t_heartbeat = $self->datetime($now + $self->human2sec($cfg->{-cfg}->{"heartbeat-interval"}));
  -    $dbi->query(q{
  -        INSERT INTO ase_member
  -        (me_uuid, me_name, me_nickname, me_address,
  -         me_membership_karma, me_membership_prop, me_membership_type,
  -         me_membership_start, me_membership_end,
  -         me_account_heartbeat_time, me_account_heartbeat_count, me_account_heartbeat_uuid,
  -         me_access_pw_sha1, me_access_pw_md5, me_access_pw_cryptmd5, me_access_pw_cryptdes)
  -        VALUES (??);
  -    },  $uuid, $rec->{"en_name"}, $rec->{"en_nickname"}, $rec->{"en_address"},
  -        1, "", "N", $t_start, $t_end, $t_heartbeat, 0, undef,
  -        $rec->{"en_pw_sha1"}, $rec->{"en_pw_md5"}, $rec->{"en_pw_cryptmd5"}, $rec->{"en_pw_cryptdes"},
  -    ) or die $dbi->error();
  -
  -    #   delete enrollment information (one or even more in case of retries)
  -    $dbi->query(q{
  -        DELETE FROM ase_enrollment WHERE en_address = ?;
  -    }, $rec->{"en_address"}) or die $dbi->error();
  -
  -    #   send notifications
  -    $self->notify($uuid);
  -
  -    #   provide final information
  -    $html .=
  -         "<h1>Account Enrollment</h1>\n";
  -    $html .=
  -        "<ul class=\"breadcrumb\">\n" .
  -        "  <li><a href=\"".$self->url(-mode => "login")."\">Login &rarr;</a></li>\n" .
  -        "  <li>Enrollment:</li>\n" .
  -        "</ul>\n";
  -    $html->fold("canvas");
  -    $html >> "canvas";
  -
  -    #   generate step-by-step list
  -    $html .=
  -        "<ol class=steps>\n" .
  -        "  <li>Account Specification</li>\n" .
  -        "  <li>Account Verification</li>\n" .
  -        "  <li class=this>Account Activation</li>\n" .
  -        "</ol>\n";
  -
  -    #   generate description
  -    $html .=
  -        "Congratulations!\n" .
  -        "<p/>\n" .
  -        "You have successfully registered with " . $cfg->{-cfg}->{"project-name"} . ".\n" .
  -        "You can now access your account by going to the Login screen.\n" .
  -        "You should be redirected to the Login screen in 10 seconds automatically.<br/>\n" .
  -        "<meta http-equiv=\"refresh\" content=\"10;url=" .
  -        $self->url(-mode => "login", -login => ($rec->{'en_nickname'} || $rec->{'en_address'})) .
  -        "\">\n" .
  -        "<p/>\n" .
  -        "<a class=\"button\" href=\"" . 
  -        $self->url(-mode => "login", -login => ($rec->{'en_nickname'} || $rec->{'en_address'})) .
  -        "\">" .
  -        "Go to <b>Login</b> screen" .
  -        "</a>\n";
  -
  -    #   determine additional information for administrators
  -    (my $rec2 = $dbi->query(q{
  -        SELECT count(*) AS count FROM ase_member;
  -    })->hash()) or die $dbi->error();
  -
  -    #   send activation information to administrators
  -    $self->use("Mail::Sendmail");
  -    my $mail =
  -        "Successful " . $cfg->{-cfg}->{"project-name"} . " Fellow Registration (No. ".$rec2->{count}."):\n" .
  -        $rec->{"en_name"}.(defined $rec->{"en_nickname"} ? " (".$rec->{"en_nickname"}.")" : "")." <".$rec->{"en_address"}.">\n" .
  -        "\n" .
  -        "-- \n" .
  -        $cfg->{-cfg}->{"service-name"} . "\n" .
  -        "" . $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "\n" .
  -        "\n";
  -    $Mail::Sendmail::mailcfg{"smtp"} = [qw(localhost mail)];
  -    Mail::Sendmail::sendmail(
  -        To      => $cfg->{-cfg}->{"service-admin"},
  -        From    => $cfg->{-cfg}->{"service-name"} . " <" . $cfg->{-cfg}->{"service-sender"} . ">\n",
  -        Subject => $cfg->{-cfg}->{"project-name"} . " Registration: " . $rec->{"en_name"} . (defined $rec->{"en_nickname"} ? " (" . $rec->{"en_nickname"} . ")" : ""). " <" . $rec->{"en_address"} . ">\n",
  -        Message => $mail,
  -    ) or die $Mail::Sendmail::error;
  -
  -    $self->logbook("enrollment finished for %s %s<%s>", $rec->{"en_name"}, (defined $rec->{"en_nickname"} ? " (" . $rec->{"en_nickname"} . ")" : ""), $rec->{"en_address"});
  -
       return;
   }
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.38 -r1.39 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	4 Apr 2007 15:44:55 -0000	1.38
  +++ ossp-pkg/ase/ase.cgi.main.pl	4 Apr 2007 20:38:01 -0000	1.39
  @@ -121,9 +121,7 @@
           'login'              => { -login => 0, -canvas => 1, -method => \&mode_login_screen         },
           'login-action'       => { -login => 0, -canvas => 1, -method => \&mode_login_action         },
           'logout'             => { -login => 1, -canvas => 1, -method => \&mode_logout_screen        },
  -        'enrollment'         => { -login => 0, -canvas => 1, -method => \&mode_enrollment_screen    },
  -        'enrollment-action'  => { -login => 0, -canvas => 1, -method => \&mode_enrollment_action    },
  -        'activation'         => { -login => 0, -canvas => 1, -method => \&mode_activation_screen    },
  +        'enrollment'         => { -login => 0, -canvas => 1, -method => \&mode_enrollment           },
           'recovery'           => { -login => 0, -canvas => 1, -method => \&mode_recovery             },
           'heartbeat'          => { -login => 0, -canvas => 1, -method => \&mode_heartbeat            },
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr  4 22:40:04 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 217DA752A08; Wed,  4 Apr 2007 22:40:04 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.main.pl ase.cgi.scode.pl ase.cgi.uti...
Message-Id: <20070404204004.217DA752A08@mail.ossp.org>
Date: Wed,  4 Apr 2007 22:40:04 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Apr-2007 22:40:04
  Branch: HEAD                             Handle: 2007040421400300

  Modified files:
    ossp-pkg/ase            ase.cgi.main.pl ase.cgi.scode.pl ase.cgi.util.pl

  Log:
    cleanup scode code

  Summary:
    Revision    Changes     Path
    1.40        +1  -1      ossp-pkg/ase/ase.cgi.main.pl
    1.14        +1  -8      ossp-pkg/ase/ase.cgi.scode.pl
    1.28        +7  -0      ossp-pkg/ase/ase.cgi.util.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.39 -r1.40 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	4 Apr 2007 20:38:01 -0000	1.39
  +++ ossp-pkg/ase/ase.cgi.main.pl	4 Apr 2007 20:40:03 -0000	1.40
  @@ -112,7 +112,7 @@
       my $modes = {
           #   global modes
           'error'              => { -login => 0, -canvas => 0, -method => \&error                     },
  -        'scode'              => { -login => 0, -canvas => 0, -method => \&mode_scode_render         },
  +        'scode'              => { -login => 0, -canvas => 0, -method => \&mode_scode                },
           'loader'             => { -login => 0, -canvas => 0, -method => \&mode_loader               },
           'rpc'                => { -login => 0, -canvas => 0, -method => \&mode_rpc                  },
           'cron'               => { -login => 0, -canvas => 0, -method => \&mode_cron                 },
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.scode.pl
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 ase.cgi.scode.pl
  --- ossp-pkg/ase/ase.cgi.scode.pl	30 Mar 2007 10:26:01 -0000	1.13
  +++ ossp-pkg/ase/ase.cgi.scode.pl	4 Apr 2007 20:40:03 -0000	1.14
  @@ -29,13 +29,6 @@
   use strict;
   use warnings;
   
  -#   helper function for converting hex "RRGGBB" into decimal (R,G,B)
  -sub hex2rgb {
  -    my ($hex) = @_;
  -    return map { hex($_) }
  -        ($hex =~ m/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/);
  -}
  -
   #   Security Code: creation
   sub scode_create {
       my ($self) = @_;
  @@ -130,7 +123,7 @@
   }
   
   #   run-time mode image rendering: "scode"
  -sub mode_scode_render {
  +sub mode_scode {
       my $self = shift;
       my $cgi  = $self->param(-cgi);
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.util.pl
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 ase.cgi.util.pl
  --- ossp-pkg/ase/ase.cgi.util.pl	4 Apr 2007 15:05:32 -0000	1.27
  +++ ossp-pkg/ase/ase.cgi.util.pl	4 Apr 2007 20:40:03 -0000	1.28
  @@ -375,5 +375,12 @@
       return $txt;
   }
   
  +#   helper function for converting hex "RRGGBB" into decimal (R,G,B)
  +sub hex2rgb {
  +    my ($hex) = @_;
  +    return map { hex($_) }
  +        ($hex =~ m/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/);
  +}
  +
   1;
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr  4 22:46:41 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id EBD097529C6; Wed,  4 Apr 2007 22:46:40 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ChangeLog ase.cgi.login.pl ase.cgi.main.pl
Message-Id: <20070404204640.EBD097529C6@mail.ossp.org>
Date: Wed,  4 Apr 2007 22:46:40 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Apr-2007 22:46:38
  Branch: HEAD                             Handle: 2007040421463800

  Modified files:
    ossp-pkg/ase            ChangeLog ase.cgi.login.pl ase.cgi.main.pl

  Log:
    Switch the login workflow implementation from
    multiple dispatch functions to a single dispatch function.

  Summary:
    Revision    Changes     Path
    1.22        +4  -0      ossp-pkg/ase/ChangeLog
    1.40        +218 -204   ossp-pkg/ase/ase.cgi.login.pl
    1.41        +1  -2      ossp-pkg/ase/ase.cgi.main.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 ChangeLog
  --- ossp-pkg/ase/ChangeLog	4 Apr 2007 20:38:01 -0000	1.21
  +++ ossp-pkg/ase/ChangeLog	4 Apr 2007 20:46:38 -0000	1.22
  @@ -13,6 +13,10 @@
   
     Changes between 0.1.x and 0.2.0 (xx-Oct-2005 to 20-Mar-2007)
   
  +   o Switch the login workflow implementation from
  +     multiple dispatch functions to a single dispatch function.
  +     [Ralf S. Engelschall]
  +
      o Switch the enrollment workflow implementation from
        multiple dispatch functions to a single dispatch function.
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.39 -r1.40 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	4 Apr 2007 15:45:21 -0000	1.39
  +++ ossp-pkg/ase/ase.cgi.login.pl	4 Apr 2007 20:46:38 -0000	1.40
  @@ -30,223 +30,237 @@
   use warnings;
   
   #   run-time mode screen rendering: "login"
  -sub mode_login_screen {
  +sub mode_login {
       my $self = shift;
  -    my $cfg  = $self->param(-cfg);
  -    my $cgi  = $self->param(-cgi);
  -    my $html = $self->param(-html);
  -
  -    #   generate title
  -    $html .= "<h1>Login</h1>\n";
  -
  -    #   generate the outer canvas
  -    $html .= $cgi->start_form(
  -        -method => 'POST',
  -        -action => $self->url(),
  -        -class  => 'login',
  -    ) . "<div>\n";
  -    $html .= $cgi->hidden(
  -        -name     => 'mode',
  -        -value    => 'login-action',
  -        -override => 1
  -    ) . "\n";
  -    $html->fold("canvas");
  -    $html .= "</div>" . $cgi->end_form() . "\n";
  -    $html >> "canvas";
  -
  -    #   generate header text
  -    $html .=
  -        "Welcome to " . $cfg->{-cfg}->{"service-name"} . "!<p/>\n" .
  -        "Please login with your name, nickname, or email address.<br/>\n" .
  -        "If you have still no account, sign up by using \"Account Enrollment\", please.<br/>\n".
  -        "If you forgot your password, recover by using \"Account Recovery\", please.\n";
  -
  -    #   generate the inner canvas
  -    $html .=
  -        "<p/>\n" .
  -        "<table>\n" .
  -        "  <tr>\n" .
  -        "    <td><span class=\"label\">Login:</span></td>\n" .
  -        "    <td>"; $html->fold("field-login"); $html .= "</td>\n" .
  -        "    <td>"; $html->fold("button-enrollment"); $html .= "</td>\n" .
  -        "  </tr>\n" .
  -        "  <tr>\n" .
  -        "    <td><span class=\"label\">Password:</span></td>\n" .
  -        "    <td>"; $html->fold("field-password"); $html .= "</td>\n" .
  -        "    <td>"; $html->fold("button-recovery"); $html .= "</td>\n" .
  -        "  </tr>\n" .
  -        "  <tr>\n" .
  -        "    <td>&nbsp;</td>\n" .
  -        "    <td>"; $html->fold("button-login"); $html .= "</td>\n" .
  -        "    <td>&nbsp;</td>\n" .
  -        "  </tr>\n" .
  -        "  <tr>\n" .
  -        "    <td>&nbsp;</td>\n" .
  -        "    <td colspan=\"2\">"; $html->fold("error"); $html .= "</td>\n" .
  -        "  </tr>\n" .
  -        "</table>\n";
  -
  -    #   optionally print screen-global errror
  -    $html >> "error";
  -    $html .= "<span class=\"error\">";
  -    if (defined(my $error = $cgi->param("login.error"))) {
  -        $html .= "Login Error: $error";
  -    }
  -    $html .= "</span>\n";
  -    $html << 1;
  -
  -    #   generate the input fields
  -    $html >> "field-login";
  -    $html .= $cgi->textfield(
  -        -id       => 'field_login',
  -        -class    => 'field',
  -        -name     => 'login',
  -        -default  => ($cgi->param("login") || ""),
  -        -tabindex => 1,
  -        -size     => 40,
  -    );
  -    $html << 1;
  -    $html >> "field-password";
  -    $html .= "<div class=\"field_password\">\n";
  -    $html .= $cgi->password_field(
  -        -class    => 'field',
  -        -id       => 'field_password',
  -        -name     => 'password',
  -        -default  => '',
  -        -tabindex => 2,
  -        -size     => 40,
  -    );
  -    $html .= "<div id=\"lock\"></div>";
  -    $html .= "</div>\n";
  -    $html << 1;
  -    $html >> "button-enrollment";
  -    $html .= "<a class=\"button\" id=\"button_enrollment\" href=\"" .
  -             $self->url(-mode => "enrollment") .
  -             "\">Account&nbsp;Enrollment</a>\n";
  -    $html << 1;
  -    $html >> "button-recovery";
  -    $html .= "<a class=\"button\" id=\"button_recovery\" href=\"" . 
  -             $self->url(-mode => "recovery") .
  -             "\">Account&nbsp;Recovery</a>\n";
  -    $html << 1;
  -    $html >> "button-login";
  -    $html .= $cgi->submit(
  -        -class    => 'button',
  -        -id       => 'button_login',
  -        -name     => 'button.login',
  -        -tabindex => 3,
  -        -value    => 'Login',
  -    );
  -    $html << 1;
  -
  -    #   add (optional) client-side user-interface behaviours
  -    $html .= "<script type=\"text/javascript\">\n";
  -    $html->fold();
  -    $html .= "</script>";
  -    $html->divert();
  -    $html .= q{
  -        $(document).ready(function () {
  -            var lock_map = {
  -                "open-black":  [ 0, 0 ],
  -                "open-red":    [ 0, 9 ],
  -                "close-black": [ 9, 0 ],
  -                "close-green": [ 9, 9 ]
  -            };
  -            function lock_render (type) {
  -                if (type == "none")
  -                    $('#lock').css("display", "none");
  -                else {
  -                    var x = lock_map[type][0];
  -                    var y = lock_map[type][1];
  -                    $('#lock')
  -                        .css("background-position", "-"+x+"px -"+y+"px")
  -                        .css("display", "block");
  -                }
  -            };
  -            function lock_update () {
  -                /* determine status */
  -                var connection_secured = false;
  -                if (document.location.protocol)
  -                    if (document.location.protocol == 'https')
  -                        connection_secured = true;
  -                var field_value = $('#field_password').val();
  -                var field_value_hashed = (field_value != "" && field_value.match(/^SHA1:[0-9a-fA-F]{40}$/));
  -
  -                /* update lock accordingly */
  -                if (connection_secured && field_value == "")
  -                    lock_render("close-black");
  -                else if (connection_secured || field_value_hashed)
  -                    lock_render("close-green");
  -                else if (!connection_secured && field_value == "")
  -                    lock_render("open-black");
  -                else
  -                    lock_render("open-red");
  -            };
  -            lock_update();
  -            $('#field_password').blur(function () {
  -                var value = $(this).val();
  -                if (value != "" && value.substr(0, 5) != "SHA1:") {
  -                    value = "SHA1:" + jscrypto.base16.encode(jscrypto.md.sha1(value));
  -                    $(this).val(value);
  -                    $('span.error').html("");
  -                }
  -                else if (value != "" && value.substr(0, 5) == "SHA1:" && !value.match(/^SHA1:[0-9a-fA-F]{40}$/)) {
  -                    $(this).val("");
  -                    $('span.error').html("Invalid password SHA1 digest found -- cleared");
  -                }
  -                lock_update();
  -            }).keypress(function () {
  -                lock_update();
  -            });
  -        });
  -    };
  -
  -    #   undivert
  -    $html << 0;
  -
  -    return;
  -}
  -
  -#   run-time mode screen action: "login"
  -sub mode_login_action {
  -    my $self    = shift;
       my $cfg     = $self->param(-cfg);
       my $cgi     = $self->param(-cgi);
  +    my $html    = $self->param(-html);
       my $dbi     = $self->param(-dbi);
       my $session = $self->param(-session);
   
  -    if (not defined($cgi->param("button.login"))) {
  -        #   unknown action
  -        die "unable to determine action";
  -    }
  -
  -    #   determine login parameters
  -    my $login    = $cgi->param("login");
  -    my $password = $cgi->param("password");
  +    my $step = $cgi->param("step") || "1";
   
  -    #   authenticate login
  -    my ($authenticated, $rec, $error) = $self->authenticate($login, $password);
  +    #   dispatch according to workflow step
  +    if ($step eq "1") {
  +        ##
  +        ##  STEP 1: DISPLAY LOGIN FORM
  +        ##
  +
  +        #   generate title
  +        $html .= "<h1>Login</h1>\n";
  +
  +        #   generate the outer canvas
  +        $html .= $cgi->start_form(
  +            -method => 'POST',
  +            -action => $self->url(),
  +            -class  => 'login',
  +        ) . "<div>\n";
  +        $html .= $cgi->hidden(
  +            -name     => 'mode',
  +            -value    => 'login',
  +            -override => 1
  +        ) . "\n";
  +        $html .= $cgi->hidden(
  +            -name     => 'step',
  +            -value    => '2',
  +            -override => 1
  +        ) . "\n";
  +        $html->fold("canvas");
  +        $html .= "</div>" . $cgi->end_form() . "\n";
  +        $html >> "canvas";
  +
  +        #   generate header text
  +        $html .=
  +            "Welcome to " . $cfg->{-cfg}->{"service-name"} . "!<p/>\n" .
  +            "Please login with your name, nickname, or email address.<br/>\n" .
  +            "If you have still no account, sign up by using \"Account Enrollment\", please.<br/>\n".
  +            "If you forgot your password, recover by using \"Account Recovery\", please.\n";
  +
  +        #   generate the inner canvas
  +        $html .=
  +            "<p/>\n" .
  +            "<table>\n" .
  +            "  <tr>\n" .
  +            "    <td><span class=\"label\">Login:</span></td>\n" .
  +            "    <td>"; $html->fold("field-login"); $html .= "</td>\n" .
  +            "    <td>"; $html->fold("button-enrollment"); $html .= "</td>\n" .
  +            "  </tr>\n" .
  +            "  <tr>\n" .
  +            "    <td><span class=\"label\">Password:</span></td>\n" .
  +            "    <td>"; $html->fold("field-password"); $html .= "</td>\n" .
  +            "    <td>"; $html->fold("button-recovery"); $html .= "</td>\n" .
  +            "  </tr>\n" .
  +            "  <tr>\n" .
  +            "    <td>&nbsp;</td>\n" .
  +            "    <td>"; $html->fold("button-login"); $html .= "</td>\n" .
  +            "    <td>&nbsp;</td>\n" .
  +            "  </tr>\n" .
  +            "  <tr>\n" .
  +            "    <td>&nbsp;</td>\n" .
  +            "    <td colspan=\"2\">"; $html->fold("error"); $html .= "</td>\n" .
  +            "  </tr>\n" .
  +            "</table>\n";
  +
  +        #   optionally print screen-global errror
  +        $html >> "error";
  +        $html .= "<span class=\"error\">";
  +        if (defined(my $error = $cgi->param("login.error"))) {
  +            $html .= "Login Error: $error";
  +        }
  +        $html .= "</span>\n";
  +        $html << 1;
   
  -    #   error processing
  -    if (not $authenticated) {
  -        #   set error message
  -        $cgi->param("login.error", $error);
  +        #   generate the input fields
  +        $html >> "field-login";
  +        $html .= $cgi->textfield(
  +            -id       => 'field_login',
  +            -class    => 'field',
  +            -name     => 'login',
  +            -default  => ($cgi->param("login") || ""),
  +            -tabindex => 1,
  +            -size     => 40,
  +        );
  +        $html << 1;
  +        $html >> "field-password";
  +        $html .= "<div class=\"field_password\">\n";
  +        $html .= $cgi->password_field(
  +            -class    => 'field',
  +            -id       => 'field_password',
  +            -name     => 'password',
  +            -default  => '',
  +            -tabindex => 2,
  +            -size     => 40,
  +        );
  +        $html .= "<div id=\"lock\"></div>";
  +        $html .= "</div>\n";
  +        $html << 1;
  +        $html >> "button-enrollment";
  +        $html .= "<a class=\"button\" id=\"button_enrollment\" href=\"" .
  +                 $self->url(-mode => "enrollment") .
  +                 "\">Account&nbsp;Enrollment</a>\n";
  +        $html << 1;
  +        $html >> "button-recovery";
  +        $html .= "<a class=\"button\" id=\"button_recovery\" href=\"" . 
  +                 $self->url(-mode => "recovery") .
  +                 "\">Account&nbsp;Recovery</a>\n";
  +        $html << 1;
  +        $html >> "button-login";
  +        $html .= $cgi->submit(
  +            -class    => 'button',
  +            -id       => 'button_login',
  +            -name     => 'button.login',
  +            -tabindex => 3,
  +            -value    => 'Login',
  +        );
  +        $html << 1;
  +
  +        #   add (optional) client-side user-interface behaviours
  +        $html .= "<script type=\"text/javascript\">\n";
  +        $html->fold();
  +        $html .= "</script>";
  +        $html->divert();
  +        $html .= q{
  +            $(document).ready(function () {
  +                var lock_map = {
  +                    "open-black":  [ 0, 0 ],
  +                    "open-red":    [ 0, 9 ],
  +                    "close-black": [ 9, 0 ],
  +                    "close-green": [ 9, 9 ]
  +                };
  +                function lock_render (type) {
  +                    if (type == "none")
  +                        $('#lock').css("display", "none");
  +                    else {
  +                        var x = lock_map[type][0];
  +                        var y = lock_map[type][1];
  +                        $('#lock')
  +                            .css("background-position", "-"+x+"px -"+y+"px")
  +                            .css("display", "block");
  +                    }
  +                };
  +                function lock_update () {
  +                    /* determine status */
  +                    var connection_secured = false;
  +                    if (document.location.protocol)
  +                        if (document.location.protocol == 'https')
  +                            connection_secured = true;
  +                    var field_value = $('#field_password').val();
  +                    var field_value_hashed = (field_value != "" && field_value.match(/^SHA1:[0-9a-fA-F]{40}$/));
  +
  +                    /* update lock accordingly */
  +                    if (connection_secured && field_value == "")
  +                        lock_render("close-black");
  +                    else if (connection_secured || field_value_hashed)
  +                        lock_render("close-green");
  +                    else if (!connection_secured && field_value == "")
  +                        lock_render("open-black");
  +                    else
  +                        lock_render("open-red");
  +                };
  +                lock_update();
  +                $('#field_password').blur(function () {
  +                    var value = $(this).val();
  +                    if (value != "" && value.substr(0, 5) != "SHA1:") {
  +                        value = "SHA1:" + jscrypto.base16.encode(jscrypto.md.sha1(value));
  +                        $(this).val(value);
  +                        $('span.error').html("");
  +                    }
  +                    else if (value != "" && value.substr(0, 5) == "SHA1:" && !value.match(/^SHA1:[0-9a-fA-F]{40}$/)) {
  +                        $(this).val("");
  +                        $('span.error').html("Invalid password SHA1 digest found -- cleared");
  +                    }
  +                    lock_update();
  +                }).keypress(function () {
  +                    lock_update();
  +                });
  +            });
  +        };
   
  -        #   go back to login form
  -        return $self->forward("login");
  +        #   undivert
  +        $html << 0;
       }
  +    elsif ($step eq "2") {
  +        ##
  +        ##  STEP 2: SEND ENROLLMENT UUID TO EMAIL ADDRESS
  +        ##
  +
  +        if (not defined($cgi->param("button.login"))) {
  +            #   unknown action
  +            die "unable to determine action";
  +        }
   
  -    #   login the user by remembering his UUID in the session
  -    $session->param("login", $rec->{"me_uuid"});
  -    $self->logbook("login by %s %s<%s>", $rec->{'me_name'}, (defined $rec->{'me_nickname'} ? " (" . $rec->{'me_nickname'} . ")" : ""), $rec->{'me_address'}); 
  +        #   determine login parameters
  +        my $login    = $cgi->param("login");
  +        my $password = $cgi->param("password");
  +
  +        #   authenticate login
  +        my ($authenticated, $rec, $error) = $self->authenticate($login, $password);
  +
  +        #   error processing
  +        if (not $authenticated) {
  +            #   set error message
  +            $cgi->param("login.error", $error);
  +
  +            #   go back to login form
  +            $cgi->param("step", "1");
  +            return $self->forward("login");
  +        }
   
  -    #   perform login: either go to menu or redirect to external return URL
  -    if (defined(my $url = $session->param("after_login"))) {
  -        return $self->redirect(sprintf($url, $session->id()));
  -    }
  -    else {
  -        return $self->forward("menu-profile");
  +        #   login the user by remembering his UUID in the session
  +        $session->param("login", $rec->{"me_uuid"});
  +        $self->logbook("login by %s %s<%s>",
  +            $rec->{'me_name'}, (defined $rec->{'me_nickname'} ? " (" . $rec->{'me_nickname'} . ")" : ""), $rec->{'me_address'}); 
  +
  +        #   perform login: either go to menu or redirect to external return URL
  +        if (defined(my $url = $session->param("after_login"))) {
  +            return $self->redirect(sprintf($url, $session->id()));
  +        }
  +        else {
  +            return $self->forward("menu-profile");
  +        }
       }
  +
  +    return;
   }
   
   #   perform login authentication
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.40 -r1.41 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	4 Apr 2007 20:40:03 -0000	1.40
  +++ ossp-pkg/ase/ase.cgi.main.pl	4 Apr 2007 20:46:38 -0000	1.41
  @@ -118,8 +118,7 @@
           'cron'               => { -login => 0, -canvas => 0, -method => \&mode_cron                 },
   
           #   login modes
  -        'login'              => { -login => 0, -canvas => 1, -method => \&mode_login_screen         },
  -        'login-action'       => { -login => 0, -canvas => 1, -method => \&mode_login_action         },
  +        'login'              => { -login => 0, -canvas => 1, -method => \&mode_login                },
           'logout'             => { -login => 1, -canvas => 1, -method => \&mode_logout_screen        },
           'enrollment'         => { -login => 0, -canvas => 1, -method => \&mode_enrollment           },
           'recovery'           => { -login => 0, -canvas => 1, -method => \&mode_recovery             },
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr  5 10:47:27 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B64D97528B9; Thu,  5 Apr 2007 10:47:26 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO
Message-Id: <20070405084726.B64D97528B9@mail.ossp.org>
Date: Thu,  5 Apr 2007 10:47:26 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Apr-2007 10:47:23
  Branch: HEAD                             Handle: 2007040509472300

  Modified files:
    ossp-pkg/ase            TODO

  Log:
    remember issue

  Summary:
    Revision    Changes     Path
    1.52        +1  -0      ossp-pkg/ase/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.51 -r1.52 TODO
  --- ossp-pkg/ase/TODO	4 Apr 2007 20:38:01 -0000	1.51
  +++ ossp-pkg/ase/TODO	5 Apr 2007 08:47:23 -0000	1.52
  @@ -8,6 +8,7 @@
   
     TODO
     ====
  +  - sample seems to be broken!?
     - optionally add tooltips to form elements and lock, etc. on mouse over
     - enrollment workflow middle part ("email was sent"): allow resending
       of mail and give a few intermediate hints while waiting for mail, etc.
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr  5 11:41:07 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 8FB2D7528ED; Thu,  5 Apr 2007 11:41:06 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ChangeLog TODO ase.cgi.enroll.pl ase.cgi.log...
Message-Id: <20070405094106.8FB2D7528ED@mail.ossp.org>
Date: Thu,  5 Apr 2007 11:41:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Apr-2007 11:41:06
  Branch: HEAD                             Handle: 2007040510410500

  Modified files:
    ossp-pkg/ase            ChangeLog TODO ase.cgi.enroll.pl ase.cgi.login.pl
                            ase.cgi.main.pl ase.cgi.recover.pl ase.cgi.util.pl
                            ase.ui.css ase.ui.jquery.js

  Log:
    Add tooltips to Login, Enrollment and Recovery workflow.

  Summary:
    Revision    Changes     Path
    1.23        +3  -0      ossp-pkg/ase/ChangeLog
    1.53        +1  -1      ossp-pkg/ase/TODO
    1.47        +65 -0      ossp-pkg/ase/ase.cgi.enroll.pl
    1.41        +56 -10     ossp-pkg/ase/ase.cgi.login.pl
    1.42        +12 -0      ossp-pkg/ase/ase.cgi.main.pl
    1.20        +65 -1      ossp-pkg/ase/ase.cgi.recover.pl
    1.29        +15 -0      ossp-pkg/ase/ase.cgi.util.pl
    1.3         +24 -0      ossp-pkg/ase/ase.ui.css
    1.3         +1  -1      ossp-pkg/ase/ase.ui.jquery.js
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 ChangeLog
  --- ossp-pkg/ase/ChangeLog	4 Apr 2007 20:46:38 -0000	1.22
  +++ ossp-pkg/ase/ChangeLog	5 Apr 2007 09:41:05 -0000	1.23
  @@ -13,6 +13,9 @@
   
     Changes between 0.1.x and 0.2.0 (xx-Oct-2005 to 20-Mar-2007)
   
  +   o Add tooltips to Login, Enrollment and Recovery workflow.
  +     [Ralf S. Engelschall]
  +
      o Switch the login workflow implementation from
        multiple dispatch functions to a single dispatch function.
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.52 -r1.53 TODO
  --- ossp-pkg/ase/TODO	5 Apr 2007 08:47:23 -0000	1.52
  +++ ossp-pkg/ase/TODO	5 Apr 2007 09:41:05 -0000	1.53
  @@ -8,8 +8,8 @@
   
     TODO
     ====
  +  - XSS checks
     - sample seems to be broken!?
  -  - optionally add tooltips to form elements and lock, etc. on mouse over
     - enrollment workflow middle part ("email was sent"): allow resending
       of mail and give a few intermediate hints while waiting for mail, etc.
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.46 -r1.47 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	4 Apr 2007 20:38:01 -0000	1.46
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	5 Apr 2007 09:41:05 -0000	1.47
  @@ -154,6 +154,13 @@
   
           #   generate the input fields
           $html >> "field-name";
  +        my $title = $self->streamline(q{
  +             Name Field ::
  +             Enter here your real name here, i.e., first name,
  +             optionally your middle initial, and last name. You can
  +             change this at any time later after logging in to your
  +             account profile. Example: John Doe
  +        });
           $html .= $cgi->textfield(
               -id        => 'field_name',
               -class     => 'field',
  @@ -161,6 +168,7 @@
               -default   => '',
               -size      => 40,
               -maxlength => 80,
  +            -title     => $title,
           ) . "<br/>";
           $html .= "<span class=\"annotation\">(<i>firstname lastname</i>, e.g. \"John Doe\"; can be changed later)</span><br/>\n";
           if (defined(my $error = $cgi->param("name.error"))) {
  @@ -168,6 +176,15 @@
           }
           $html << 1;
           $html >> "field-nickname";
  +        $title = $self->streamline(q{
  +             Nickname Field ::
  +             Optionally enter a nickname here. This can be used as a
  +             short-hand for logging in to your account and might be
  +             displayed instead of your Email address as a form of spam
  +             prevention. You can leave this field empty now if you wish.
  +             You can change this at any time later after logging in to
  +             your account profile. Example: jdoe
  +        });
           $html .= $cgi->textfield(
               -id        => 'field_nickname',
               -class     => 'field',
  @@ -175,6 +192,7 @@
               -default   => '',
               -size      => 20,
               -maxlength => 40,
  +            -title     => $title,
           ) . "<br/>";
           $html .= "<span class=\"annotation\">(<i>nickname</i>, e.g. \"john\"; can be changed later)</span><br/>\n";
           if (defined(my $error = $cgi->param("nickname.error"))) {
  @@ -182,6 +200,15 @@
           }
           $html << 1;
           $html >> "field-address";
  +        $title = $self->streamline(q{
  +             Email Address Field ::
  +             Enter your Email address here. This address has to
  +             be confirmed ("initial proof") and even re-confirmed
  +             ("heartbeat") regularily. So, do not enter one-time, dummy
  +             or even foreign Email addresses here. You have to use your
  +             real primary Email address, but you can be certain that we
  +             do not share it others.
  +        });
           $html .= $cgi->textfield(
               -id        => 'field_address',
               -class     => 'field',
  @@ -189,6 +216,7 @@
               -default   => '',
               -size      => 40,
               -maxlength => 80,
  +            -title     => $title,
           ) . "<br/>";
           $html .= "<span class=\"annotation\">(<i>name</i>\@<i>domain</i>, e.g. \"foo\@$remote\")</span><br/>\n";
           if (defined(my $error = $cgi->param("address.error"))) {
  @@ -196,6 +224,16 @@
           }
           $html << 1;
           $html >> "field-password";
  +        $title = $self->streamline(qq{
  +             Password Field ::
  +             Enter a reasonable password here to protect your account.
  +             The field input is done in blinded mode, so nobody can
  +             gather your password while looking over your shoulders. On
  +             the server side your password is stored in the database in
  +             hashed form only, so you can be certain that nobody is able
  +             to lookup your password in plain text on the server side.
  +             Example: $pw (freshly generated for you)
  +        });
           $html .= $cgi->password_field(
               -id        => 'field_password',
               -class     => 'field',
  @@ -203,11 +241,17 @@
               -default   => '',
               -size      => 22,
               -maxlength => 20,
  +            -title     => $title,
           ) . "<br/>";
           $html .= "<span class=\"annotation\">(up to 20 characters, e.g. \"$pw\"; can be changed later)</span><br/>\n";
           if (defined(my $error = $cgi->param("password.error"))) {
               $html .= "<span class=\"error\">$error</span><br/>\n";
           }
  +        $title = $self->streamline(q{
  +             Password Verification Field ::
  +             Enter the password here again to make sure no error occurs
  +             during the blinded input above.
  +        });
           $html .= $cgi->password_field(
               -id        => 'field_password_verify',
               -class     => 'field',
  @@ -215,6 +259,7 @@
               -default   => '',
               -size      => 22,
               -maxlength => 20,
  +            -title     => $title,
           ) . "<br/>";
           $html .= "<span class=\"annotation\">(retype password here for verification)</span><br/>\n";
           if (defined(my $error = $cgi->param("password_verify.error"))) {
  @@ -223,6 +268,13 @@
           $html << 1;
           $html >> "field-scode";
           $html .= "<img align=top src=\"".$self->url(-mode => 'scode', -uuid => $scode_uuid)."\"> :\n";
  +        $title = $self->streamline(q{
  +             Security Code Field ::
  +             To prevent robots to submit this form and this way cause
  +             unrequested Emails to be sent out, you have to proof you
  +             are human by repeating the visually hampered security code
  +             on the left.
  +        });
           $html .= $cgi->textfield(
               -id        => 'field_scode',
               -class     => 'field',
  @@ -230,6 +282,7 @@
               -default   => '',
               -size      => 7,
               -maxlength => 6,
  +            -title     => $title,
           ) . "<br/>";
           $html .= "<span class=\"annotation\">(repeat the shown 6 character security code)</span><br/>\n";
           if (defined(my $error = $cgi->param("scode.error"))) {
  @@ -237,17 +290,29 @@
           }
           $html << 1;
           $html >> "button-enroll";
  +        $title = $self->streamline(q{
  +             Cancel ::
  +             Use this button to cancel the enrollment workflow and go
  +             back to the login page.
  +        });
           $html .= $cgi->submit(
               -class   => 'button',
               -id      => 'button_cancel',
               -name    => 'button.cancel',
               -value   => 'Cancel',
  +            -title   => $title,
           );
  +        $title = $self->streamline(q{
  +             Enroll ::
  +             Use this button to submit the form and proceed to the next
  +             step in the enrollment workflow.
  +        });
           $html .= $cgi->submit(
               -class   => 'button',
               -id      => 'button_enroll',
               -name    => 'button.enroll',
               -value   => 'Enroll',
  +            -title   => $title,
           );
           $html .= $cgi->hidden(
               -name     => 'step',
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.40 -r1.41 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	4 Apr 2007 20:46:38 -0000	1.40
  +++ ossp-pkg/ase/ase.cgi.login.pl	5 Apr 2007 09:41:05 -0000	1.41
  @@ -72,7 +72,7 @@
           #   generate header text
           $html .=
               "Welcome to " . $cfg->{-cfg}->{"service-name"} . "!<p/>\n" .
  -            "Please login with your name, nickname, or email address.<br/>\n" .
  +            "Please login with your name, nickname, or Email address.<br/>\n" .
               "If you have still no account, sign up by using \"Account Enrollment\", please.<br/>\n".
               "If you forgot your password, recover by using \"Account Recovery\", please.\n";
   
  @@ -112,6 +112,12 @@
   
           #   generate the input fields
           $html >> "field-login";
  +        my $title = $self->streamline(q{
  +             Login Field ::
  +             Enter here your account login, i.e., either your
  +             name (in case it is unique), your nickname or your
  +             Email address.
  +        });
           $html .= $cgi->textfield(
               -id       => 'field_login',
               -class    => 'field',
  @@ -119,10 +125,17 @@
               -default  => ($cgi->param("login") || ""),
               -tabindex => 1,
               -size     => 40,
  +            -title    => $title,
           );
           $html << 1;
           $html >> "field-password";
           $html .= "<div class=\"field_password\">\n";
  +        $title = $self->streamline(q{
  +             Password Field ::
  +             Enter here your account password. In case you have
  +             forgotten your password, you can reset it by pressing
  +             "Account Recovery" to the right and follow its workflow.
  +        });
           $html .= $cgi->password_field(
               -class    => 'field',
               -id       => 'field_password',
  @@ -130,27 +143,56 @@
               -default  => '',
               -tabindex => 2,
               -size     => 40,
  +            -title    => $title,
           );
  -        $html .= "<div id=\"lock\"></div>";
  +        $html .= "<div title=\"\" id=\"lock\"></div>";
           $html .= "</div>\n";
           $html << 1;
           $html >> "button-enrollment";
  -        $html .= "<a class=\"button\" id=\"button_enrollment\" href=\"" .
  +        $title = $self->streamline(q{
  +             Account Enrollment ::
  +             This is the workflow to sign up for a new account. You
  +             submit your name, (optional) nickname, Email address and
  +             password. To confirm your Email address, you will receive
  +             a short Email containing an URL you have to visit to proof
  +             that you actually own the Email address your account will
  +             be registered to. Once you have provided this confirmation
  +             your account will be activated.
  +        });
  +        $html .= "<a title=\"$title\" class=\"button\" id=\"button_enrollment\" href=\"" .
                    $self->url(-mode => "enrollment") .
                    "\">Account&nbsp;Enrollment</a>\n";
           $html << 1;
           $html >> "button-recovery";
  -        $html .= "<a class=\"button\" id=\"button_recovery\" href=\"" . 
  +        $title = $self->streamline(q{
  +             Account Recovery ::
  +             This is the workflow to recover your account in case you
  +             have forgotten your password. You submit your login (name,
  +             nickname, or Email address). To re-confirm your Email
  +             address, you will receive a short Email containing an
  +             URL you have to visit to proof that you actually own the
  +             Email address (and this way the account) your account was
  +             registered under in the past. Once you have provided this
  +             confirmation you can reset your account password.
  +        });
  +        $html .= "<a title=\"$title\" class=\"button\" id=\"button_recovery\" href=\"" . 
                    $self->url(-mode => "recovery") .
                    "\">Account&nbsp;Recovery</a>\n";
           $html << 1;
           $html >> "button-login";
  +        $title = $self->streamline(q{
  +             Login ::
  +             Press this button to login to your account profile once you
  +             have entered your account login (name, nickname or Email
  +             address) and password into the fields above.
  +        });
           $html .= $cgi->submit(
               -class    => 'button',
               -id       => 'button_login',
               -name     => 'button.login',
               -tabindex => 3,
               -value    => 'Login',
  +            -title    => $title,
           );
           $html << 1;
   
  @@ -162,20 +204,24 @@
           $html .= q{
               $(document).ready(function () {
                   var lock_map = {
  -                    "open-black":  [ 0, 0 ],
  -                    "open-red":    [ 0, 9 ],
  -                    "close-black": [ 9, 0 ],
  -                    "close-green": [ 9, 9 ]
  +                    "open-black":  [ 0, 0, "password field content is still empty" ],
  +                    "open-red":    [ 0, 9, "password field content is still NOT secure" ],
  +                    "close-black": [ 9, 0, "password field content will be secure" ],
  +                    "close-green": [ 9, 9, "password field content is secure" ]
                   };
                   function lock_render (type) {
                       if (type == "none")
  -                        $('#lock').css("display", "none");
  +                        $('#lock')
  +                            .css("display", "none")
  +                            .attr("title", "");
                       else {
                           var x = lock_map[type][0];
                           var y = lock_map[type][1];
  +                        var t = lock_map[type][2];
                           $('#lock')
                               .css("background-position", "-"+x+"px -"+y+"px")
  -                            .css("display", "block");
  +                            .css("display", "block")
  +                            .attr("title", t);
                       }
                   };
                   function lock_update () {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.41 -r1.42 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	4 Apr 2007 20:46:38 -0000	1.41
  +++ ossp-pkg/ase/ase.cgi.main.pl	5 Apr 2007 09:41:05 -0000	1.42
  @@ -188,6 +188,18 @@
           $html .= "    </div>\n";
           $html .= "  </div>\n";
           $html .= "</div>\n";
  +        $html .= "<script type=\"text/javascript\">\n" .
  +                 "    \$(document).ready(function () {\n" .
  +                 "         \$('div.ase *').Tooltip({\n" .
  +                 "             delay:      800,\n" .
  +                 "             event:      'mouseover',\n" .
  +                 "             track:      false,\n" .
  +                 "             showURL:    false,\n" .
  +                 "             showBody:   '::',\n" .
  +                 "             extraClass: 'tooltip'\n" .
  +                 "         });\n" .
  +                 "    });\n" .
  +                 "</script>\n";
           $html->divert();
   
           #   store HTML canvas output object
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.recover.pl
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 ase.cgi.recover.pl
  --- ossp-pkg/ase/ase.cgi.recover.pl	4 Apr 2007 20:28:38 -0000	1.19
  +++ ossp-pkg/ase/ase.cgi.recover.pl	5 Apr 2007 09:41:05 -0000	1.20
  @@ -123,6 +123,12 @@
   
           #   generate the input field "login"
           $html >> "field-login";
  +        my $title = $self->streamline(q{
  +             Login Field ::
  +             Enter here your account login, i.e., either your
  +             name (in case it is unique), your nickname or your
  +             Email address.
  +        });
           $html .= $cgi->textfield(
               -id        => 'field_login',
               -class     => 'field',
  @@ -130,6 +136,7 @@
               -default   => '',
               -size      => 40,
               -maxlength => 80,
  +            -title     => $title,
           ) . "<br/>";
           my $remote = $self->remotehostname();
           $html .= "<span class=\"annotation\">(<i>name</i>, <i>nickname</i> or <i>name</i>\@<i>domain</i>, e.g. \"foo\@$remote\")</span><br/>\n";
  @@ -147,6 +154,13 @@
               -value    => $scode_uuid,
               -override => 1
           ) . "\n";
  +        $title = $self->streamline(q{
  +             Security Code Field ::
  +             To prevent robots to submit this form and this way cause
  +             unrequested Emails to be sent out, you have to proof you
  +             are human by repeating the visually hampered security code
  +             on the left.
  +        });
           $html .= $cgi->textfield(
               -id        => 'field_scode',
               -class     => 'field',
  @@ -154,6 +168,7 @@
               -default   => '',
               -size      => 7,
               -maxlength => 6,
  +            -title     => $title,
           ) . "<br/>";
           $html .= "<span class=\"annotation\">(repeat the shown 6 character security code)</span><br/>\n";
           if (defined(my $error = $cgi->param("scode.error"))) {
  @@ -163,17 +178,29 @@
   
           #   generate the buttons
           $html >> "button-recover";
  +        $title = $self->streamline(q{
  +             Cancel ::
  +             Use this button to cancel the enrollment workflow and go
  +             back to the login page.
  +        });
           $html .= $cgi->submit(
               -class   => 'button',
               -id      => 'button_cancel',
               -name    => 'button.cancel',
               -value   => 'Cancel',
  +            -title   => $title,
           );
  +        $title = $self->streamline(q{
  +             Recover ::
  +             Use this button to submit the form and proceed to the next
  +             step in the recovery workflow.
  +        });
           $html .= $cgi->submit(
               -class   => 'button',
               -id      => 'button_recover',
               -name    => 'button.recover',
               -value   => 'Recover',
  +            -title   => $title,
           );
           $html .= $cgi->hidden(
               -name     => 'step',
  @@ -405,6 +432,17 @@
   
           #   generate the input field: "password"
           $html >> "field-password";
  +        my $pw = $self->makerandom(8, "A-Za-z0-9");
  +        my $title = $self->streamline(qq{
  +             Password Field ::
  +             Enter a reasonable password here to protect your account.
  +             The field input is done in blinded mode, so nobody can
  +             gather your password while looking over your shoulders. On
  +             the server side your password is stored in the database in
  +             hashed form only, so you can be certain that nobody is able
  +             to lookup your password in plain text on the server side.
  +             Example: $pw (freshly generated for you)
  +        });
           $html .= $cgi->password_field(
               -id        => 'field_password',
               -class     => 'field',
  @@ -412,12 +450,17 @@
               -default   => '',
               -size      => 22,
               -maxlength => 20,
  +            -title     => $title,
           ) . "<br/>";
  -        my $pw = $self->makerandom(8, "A-Za-z0-9");
           $html .= "<span class=\"annotation\">(up to 20 characters, e.g. \"$pw\")</span><br/>\n";
           if (defined(my $error = $cgi->param("password.error"))) {
               $html .= "<span class=\"error\">$error</span><br/>\n";
           }
  +        $title = $self->streamline(q{
  +             Password Verification Field ::
  +             Enter the password here again to make sure no error occurs
  +             during the blinded input above.
  +        });
           $html .= $cgi->password_field(
               -id        => 'field_password_verify',
               -class     => 'field',
  @@ -425,6 +468,7 @@
               -default   => '',
               -size      => 22,
               -maxlength => 20,
  +            -title     => $title,
           ) . "<br/>";
           $html .= "<span class=\"annotation\">(retype password here for verification)</span><br/>\n";
           if (defined(my $error = $cgi->param("password_verify.error"))) {
  @@ -441,6 +485,13 @@
               -value    => $scode_uuid,
               -override => 1
           ) . "\n";
  +        $title = $self->streamline(q{
  +             Security Code Field ::
  +             To prevent robots to submit this form and this way cause
  +             unrequested Emails to be sent out, you have to proof you
  +             are human by repeating the visually hampered security code
  +             on the left.
  +        });
           $html .= $cgi->textfield(
               -id        => 'field_scode',
               -class     => 'field',
  @@ -448,6 +499,7 @@
               -default   => '',
               -size      => 7,
               -maxlength => 6,
  +            -title     => $title,
           ) . "<br/>";
           $html .= "<span class=\"annotation\">(repeat the shown 6 character security code)</span><br/>\n";
           if (defined(my $error = $cgi->param("scode.error"))) {
  @@ -457,17 +509,29 @@
   
           #   generate the form buttons
           $html >> "button-recover";
  +        $title = $self->streamline(q{
  +             Cancel ::
  +             Use this button to cancel the enrollment workflow and go
  +             back to the login page.
  +        });
           $html .= $cgi->submit(
               -class   => 'button',
               -id      => 'button_cancel',
               -name    => 'button.cancel',
               -value   => 'Cancel',
  +            -title   => $title,
           );
  +        $title = $self->streamline(q{
  +             Recover ::
  +             Use this button to submit the form and proceed to the next
  +             step in the recovery workflow.
  +        });
           $html .= $cgi->submit(
               -class   => 'button',
               -id      => 'button_recover',
               -name    => 'button.recover',
               -value   => 'Recover',
  +            -title   => $title,
           );
           $html .= $cgi->hidden(
               -name     => 'step',
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.util.pl
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 ase.cgi.util.pl
  --- ossp-pkg/ase/ase.cgi.util.pl	4 Apr 2007 20:40:03 -0000	1.28
  +++ ossp-pkg/ase/ase.cgi.util.pl	5 Apr 2007 09:41:05 -0000	1.29
  @@ -341,6 +341,7 @@
           ? @{$cfg->{-cfg}->{"instant-notification-urls"}}
           :  ($cfg->{-cfg}->{"instant-notification-urls"})
       ) {
  +        next if ($url_template eq '');
           my $url = $url_template;
           $url =~ s/\%s/$uuid/sg;
           $self->fetch($url, 4, 1, 1);
  @@ -375,6 +376,20 @@
       return $txt;
   }
   
  +#   helper function for streamlining text
  +sub streamline {
  +    my ($self, $txt) = @_;
  +    $txt =~ s/^\s+//s;
  +    $txt =~ s/\s+$//s;
  +    $txt =~ s/^[ \t]+//mg;
  +    $txt =~ s/[ \t]+$//mg;
  +    $txt =~ s/[ \t]+/ /sg;
  +    $txt =~ s/\n\n/<p\/>/sg;
  +    $txt =~ s/\n/ /sg;
  +    $txt =~ s/"/&quot;/sg;
  +    return $txt;
  +}
  +
   #   helper function for converting hex "RRGGBB" into decimal (R,G,B)
   sub hex2rgb {
       my ($hex) = @_;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.ui.css
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ase.ui.css
  --- ossp-pkg/ase/ase.ui.css	30 Mar 2007 18:24:29 -0000	1.2
  +++ ossp-pkg/ase/ase.ui.css	5 Apr 2007 09:41:05 -0000	1.3
  @@ -317,3 +317,27 @@
       background-position:   -0px -0px;
   }
   
  +/* tooltip style */
  +div#tooltip {
  +    border-top:            1px solid #9999cc;
  +    border-left:           1px solid #9999cc;
  +    border-right:          1px solid #9999cc;
  +    border-bottom:         1px solid #9999cc;
  +    background-color:      #f0f0ff;
  +    padding:               4px 6px 4px 6px;
  +    font-family:           sans-serif, helvetica, arial;
  +    font-size:             75%;
  +    width:                 200px;
  +}
  +div#tooltip h3 {
  +    margin:                0px;
  +    font-family:           sans-serif, helvetica, arial;
  +    font-size:             100%;
  +    font-weight:           bold;
  +    color:                 #666699;
  +}
  +div#tooltip p { 
  +    margin:                0px;
  +    color:                 #333366;
  +}
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.ui.jquery.js
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ase.ui.jquery.js
  --- ossp-pkg/ase/ase.ui.jquery.js	30 Mar 2007 09:53:09 -0000	1.2
  +++ ossp-pkg/ase/ase.ui.jquery.js	5 Apr 2007 09:41:05 -0000	1.3
  @@ -1 +1 @@
  -eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('u(T 1h.l=="1e"){1h.1e=1h.1e;C l=q(a,c){u(1h==6)B 1Q l(a,c);a=a||11;u(l.2G(a))B 1Q l(11)[l.fn.37?"37":"4z"](a);u(T a=="1V"){C m=/^[^<]*(<(.|\\s)+>)[^>]*$/.59(a);u(m)a=l.3I([m[1]]);L B 1Q l(c).3p(a)}B 6.7f(a.22==3L&&a||(a.7B||a.I&&a!=1h&&!a.33&&a[0]!=1e&&a[0].33)&&l.5h(a)||[a])};u(T $!="1e")l.5K$=$;C $=l;l.fn=l.5B={7B:"1.1.2+cI",4N:q(){B 6.I},I:0,2O:q(2Q){B 2Q==1e?l.5h(6):6[2Q]},43:q(a){C 1f=l(a);1f.ab=6;B 1f},7f:q(a){6.I=0;[].1y.1A(6,a);B 6},19:q(fn,28){B l.19(6,fn,28)},2Z:q(17){C 8t=-1;6.19(q(i){u(6==17)8t=i});B 8t},1v:q(2S,G,H){C 17=2S;u(2S.22==2I)u(G==1e)B 6.I&&l[H||"1v"](6[0],2S)||1e;L{17={};17[2S]=G}B 6.19(q(2Z){U(C 16 29 17)l.1v(H?6.1E:6,16,l.16(6,17[16],H,2Z,16))})},K:q(2S,G){B 6.1v(2S,G,"68")},1M:q(e){u(T e=="1V")B 6.6r().3H(11.cJ(e));C t="";l.19(e||6,q(){l.19(6.5P,q(){u(6.33!=8)t+=6.33!=1?6.6n:l.fn.1M([6])})});B t},4i:q(){C a,28=18;B 6.19(q(){u(!a)a=l.3I(28,6.6e);C b=a[0].7F(14);6.1o.5A(b,6);2M(b.25)b=b.25;b.8w(6)})},3H:q(){B 6.6v(18,14,1,q(a){6.8w(a)})},aq:q(){B 6.6v(18,14,-1,q(a){6.5A(a,6.25)})},ar:q(){B 6.6v(18,1c,1,q(a){6.1o.5A(a,6)})},as:q(){B 6.6v(18,1c,-1,q(a){6.1o.5A(a,6.47)})},3g:q(){B 6.ab||l([])},3p:q(t){B 6.43(l.8A(l.4E(6,q(a){B l.3p(t,a)})),t)},8x:q(8u){B 6.43(l.4E(6,q(a){C a=a.7F(8u!=1e?8u:14);a.$2l=1b;B a}))},1z:q(t){B 6.43(l.2G(t)&&l.53(6,q(el,2Z){B t.1A(el,[2Z])})||l.5S(t,6))},2o:q(t){B 6.43(t.22==2I&&l.5S(t,6,14)||l.53(6,q(a){B(t.22==3L||t.7B)?l.6P(a,t)<0:a!=t}))},2e:q(t){B 6.43(l.3Y(6.2O(),t.22==2I?l(t).2O():t.I!=1e&&(!t.1J||t.1J=="cK")?t:[t]))},3a:q(2p){B 2p?l.5S(2p,6).I>0:1c},9Q:q(){B 6.43(l.5h([].9Q.1A(6,18)))},8v:q(){B 6.43(6.2O().8v(),18)},1W:q(1W){B 1W==1e?(6.I?6[0].G:1b):6.1v("G",1W)},2i:q(1W){B 1W==1e?(6.I?6[0].3R:1b):6.6r().3H(1W)},6v:q(28,3l,6l,fn){C 8x=6.I>1,a;B 6.19(q(){u(!a){a=l.3I(28,6.6e);u(6l<0)a.8v()}C 17=6;u(3l&&l.1J(6,"3l")&&l.1J(a[0],"6W"))17=6.bn("3w")[0]||6.8w(11.9K("3w"));l.19(a,q(){fn.1A(17,[8x?6.7F(14):6])})})}};l.1k=l.fn.1k=q(){C 3h=18[0],a=1;u(18.I==1){3h=6;a=0}C 16;2M(16=18[a++])U(C i 29 16)3h[i]=16[i];B 3h};l.1k({eW:q(){u(l.5K$)$=l.5K$;B l},2G:q(fn){B!!fn&&T fn!="1V"&&!fn.1J&&fn.22!=3L&&/q/i.1q(fn+"")},8D:q(J){B J.7T&&J.6e&&!J.6e.1K},1J:q(J,1g){B J.1J&&J.1J.6C()==1g.6C()},19:q(17,fn,28){u(17.I==1e)U(C i 29 17)fn.1A(17[i],28||[i,17[i]]);L U(C i=0,4B=17.I;i<4B;i++)u(fn.1A(17[i],28||[i,17[i]])===1c)34;B 17},16:q(J,G,H,2Z,16){u(l.2G(G))G=G.3Z(J,[2Z]);C ad=/z-?2Z|9S-?cL|1L|ak|cM-?1i/i;B G&&G.22==5O&&H=="68"&&!ad.1q(16)?G+"2s":G},2j:{2e:q(J,c){l.19(c.4C(/\\s+/),q(i,1u){u(!l.2j.6g(J.2j,1u))J.2j+=(J.2j?" ":"")+1u})},4o:q(J,c){J.2j=c?l.53(J.2j.4C(/\\s+/),q(1u){B!l.2j.6g(c,1u)}).9v(" "):""},6g:q(t,c){B l.6P(c,(t.2j||t).5F().4C(/\\s+/))>-1}},8z:q(e,o,f){U(C i 29 o){e.1E["3b"+i]=e.1E[i];e.1E[i]=o[i]}f.1A(e,[]);U(C i 29 o)e.1E[i]=e.1E["3b"+i]},K:q(e,p){u(p=="1i"||p=="2d"){C 3b={},7P,7y,d=["f4","cN","cO","cP"];l.19(d,q(){3b["6w"+6]=0;3b["64"+6+"eO"]=0});l.8z(e,3b,q(){u(l.K(e,"1G")!="2n"){7P=e.2W;7y=e.45}L{e=l(e.7F(14)).3p(":3U").au("4O").3g().K({8a:"2E",2z:"4l",1G:"41",cR:"0",2x:"0"}).5N(e.1o)[0];C 6d=l.K(e.1o,"2z");u(6d==""||6d=="6m")e.1o.1E.2z="7i";7P=e.4n;7y=e.62;u(6d==""||6d=="6m")e.1o.1E.2z="6m";e.1o.61(e)}});B p=="1i"?7P:7y}B l.68(e,p)},68:q(J,16,ae){C 1f;u(16=="1L"&&l.1a.1C){1f=l.1v(J.1E,"1L");B 1f==""?"1":1f}u(16=="8K"||16=="5z")16=l.1a.1C?"6K":"5z";u(!ae&&J.1E[16])1f=J.1E[16];L u(11.7d&&11.7d.9c){u(16=="5z"||16=="6K")16="8K";16=16.1N(/([A-Z])/g,"-$1").2t();C 1u=11.7d.9c(J,1b);u(1u)1f=1u.af(16);L u(16=="1G")1f="2n";L l.8z(J,{1G:"41"},q(){C c=11.7d.9c(6,"");1f=c&&c.af(16)||""})}L u(J.4K){C ah=16.1N(/\\-(\\w)/g,q(m,c){B c.6C()});1f=J.4K[16]||J.4K[ah]}B 1f},3I:q(a,6Z){C r=[];6Z=6Z||11;l.19(a,q(i,2K){u(!2K)B;u(2K.22==5O)2K=2K.5F();u(T 2K=="1V"){C s=l.39(2K),26=6Z.9K("26"),4a=[];C 4i=!s.1O("<2H")&&[1,"<3D>","</3D>"]||(!s.1O("<cV")||!s.1O("<3w")||!s.1O("<cW"))&&[1,"<3l>","</3l>"]||!s.1O("<6W")&&[2,"<3l><3w>","</3w></3l>"]||(!s.1O("<cY")||!s.1O("<cZ"))&&[3,"<3l><3w><6W>","</6W></3w></3l>"]||[0,"",""];26.3R=4i[1]+2K+4i[2];2M(4i[0]--)26=26.25;u(l.1a.1C){u(!s.1O("<3l")&&s.1O("<3w")<0)4a=26.25&&26.25.5P;L u(4i[1]=="<3l>"&&s.1O("<3w")<0)4a=26.5P;U(C n=4a.I-1;n>=0;--n)u(l.1J(4a[n],"3w")&&!4a[n].5P.I)4a[n].1o.61(4a[n])}2K=l.5h(26.5P)}u(2K.I===0&&!l.1J(2K,"1X"))B;u(2K[0]==1e||l.1J(2K,"1X"))r.1y(2K);L r=l.3Y(r,2K)});B r},1v:q(J,1g,G){C 4P=l.8D(J)?{}:{"U":"dx","4F":"2j","8K":l.1a.1C?"6K":"5z",5z:l.1a.1C?"6K":"5z",3R:"3R",2j:"2j",G:"G",3q:"3q",4O:"4O",dA:"d2",3J:"3J"};u(1g=="1L"&&l.1a.1C){u(G!=1e){J.ak=1;J.1z=(J.1z||"").1N(/aj\\([^)]*\\)/,"")+(79(G).5F()=="8R"?"":"aj(1L="+G*ac+")")}B J.1z?(79(J.1z.2y(/1L=([^)]*)/)[1])/ac).5F():""}u(4P[1g]){u(G!=1e)J[4P[1g]]=G;B J[4P[1g]]}L u(G==1e&&l.1a.1C&&l.1J(J,"1X")&&(1g=="cu"||1g=="2c"))B J.d5(1g).6n;L u(J.7T){u(G!=1e)J.d6(1g,G);u(l.1a.1C&&/46|3B/.1q(1g)&&!l.8D(J))B J.7E(1g,2);B J.7E(1g)}L{1g=1g.1N(/-([a-z])/d7,q(z,b){B b.6C()});u(G!=1e)J[1g]=G;B J[1g]}},39:q(t){B t.1N(/^\\s+|\\s+$/g,"")},5h:q(a){C r=[];u(T a!="8B")U(C i=0,al=a.I;i<al;i++)r.1y(a[i]);L r=a.8O(0);B r},6P:q(b,a){U(C i=0,al=a.I;i<al;i++)u(a[i]==b)B i;B-1},3Y:q(2D,8E){U(C i=0;8E[i];i++)2D.1y(8E[i]);B 2D},8A:q(2D){C r=[],2Q=l.74++;U(C i=0,fl=2D.I;i<fl;i++)u(2D[i].74!=2Q){2D[i].74=2Q;r.1y(2D[i])}B r},74:0,53:q(3n,fn,9O){u(T fn=="1V")fn=1Q 73("a","i","B "+fn);C 2b=[];U(C i=0,el=3n.I;i<el;i++)u(!9O&&fn(3n[i],i)||9O&&!fn(3n[i],i))2b.1y(3n[i]);B 2b},4E:q(3n,fn){u(T fn=="1V")fn=1Q 73("a","B "+fn);C 2b=[],r=[];U(C i=0,el=3n.I;i<el;i++){C 1W=fn(3n[i],i);u(1W!==1b&&1W!=1e){u(1W.22!=3L)1W=[1W];2b=2b.d9(1W)}}B 2b}});1Q q(){C b=da.db.2t();l.1a={38:/ap/.1q(b),3K:/3K/.1q(b),1C:/1C/.1q(b)&&!/3K/.1q(b),4d:/4d/.1q(b)&&!/(dc|ap)/.1q(b)};l.56=!l.1a.1C||11.dd=="fe"};l.19({1s:"a.1o",6t:"l.6t(a)",de:"l.3N(a,2,\'47\')",df:"l.3N(a,2,\'av\')",cA:"l.5s(a.1o.25,a)",5k:"l.5s(a.25)"},q(i,n){l.fn[i]=q(a){C 1f=l.4E(6,n);u(a&&T a=="1V")1f=l.5S(a,1f);B 6.43(1f)}});l.19({5N:"3H",dg:"aq",5A:"ar",8n:"as"},q(i,n){l.fn[i]=q(){C a=18;B 6.19(q(){U(C j=0,al=a.I;j<al;j++)l(a[j])[n](6)})}});l.19({au:q(2S){l.1v(6,2S,"");6.di(2S)},2L:q(c){l.2j.2e(6,c)},3i:q(c){l.2j.4o(6,c)},dj:q(c){l.2j[l.2j.6g(6,c)?"4o":"2e"](6,c)},4o:q(a){u(!a||l.1z(a,[6]).r.I)6.1o.61(6)},6r:q(){2M(6.25)6.61(6.25)}},q(i,n){l.fn[i]=q(){B 6.19(n,18)}});l.19(["eq","9n","9t","aw"],q(i,n){l.fn[n]=q(2Q,fn){B 6.1z(":"+n+"("+2Q+")",fn)}});l.19(["1i","2d"],q(i,n){l.fn[n]=q(h){B h==1e?(6.I?l.K(6[0],n):1b):6.K(n,h.22==2I?h:h+"2s")}});l.1k({2p:{"":"m[2]==\'*\'||l.1J(a,m[2])","#":"a.7E(\'Q\')==m[2]",":":{9n:"i<m[3]-0",9t:"i>m[3]-0",3N:"m[3]-0==i",eq:"m[3]-0==i",2D:"i==0",2u:"i==r.I-1",aF:"i%2==0",aG:"i%2","3N-70":"l.3N(a.1o.25,m[3],\'47\',a)==a","2D-70":"l.3N(a.1o.25,1,\'47\')==a","2u-70":"l.3N(a.1o.dk,1,\'av\')==a","9o-70":"l.5s(a.1o.25).I==1",1s:"a.25",6r:"!a.25",aw:"l.fn.1M.1A([a]).1O(m[3])>=0",3t:\'a.H!="2E"&&l.K(a,"1G")!="2n"&&l.K(a,"8a")!="2E"\',2E:\'a.H=="2E"||l.K(a,"1G")=="2n"||l.K(a,"8a")=="2E"\',aB:"!a.3q",3q:"a.3q",4O:"a.4O",3J:"a.3J||l.1v(a,\'3J\')",1M:"a.H==\'1M\'",3U:"a.H==\'3U\'",4c:"a.H==\'4c\'",9k:"a.H==\'9k\'",ax:"a.H==\'ax\'",3S:"a.H==\'3S\'",4J:"a.H==\'4J\'",2R:"a.H==\'2R\'",7G:\'a.H=="7G"||l.1J(a,"7G")\',44:"/44|3D|dm|7G/i.1q(a.1J)"},".":"l.2j.6g(a,m[2])","@":{"=":"z==m[4]","!=":"z!=m[4]","=~":"z.2y(4u(m[4]))!=1b","!~":"z.2y(4u(m[4]))==1b","^=":"z&&!z.1O(m[4])","$=":"z&&z.6i(z.I - m[4].I,m[4].I)==m[4]","*=":"z&&z.1O(m[4])>=0","":"z",9e:q(m){B["",m[1],m[3],m[2],m[5]]},aE:"z=a[m[3]];u(!z||/46|3B/.1q(m[3]))z=l.1v(a,m[3]);"},"[":"1d(m[2])?l.3N(a.1o.25,1d(m[2]),\'47\',a)==a:l.3p(m[2],a).I"},aD:[/^\\[ *(@)([\\w-]+) *([!*$^~=]*) *(\'?"?)(.*?)\\4 *\\]/,/^(\\[)\\s*(.*?(\\[.*?\\])?[^[]*?)\\s*\\]/,/^(:)([\\w-]+)\\("?\'?(.*?(\\(.*?\\))?[^(]*?)"?\'?\\)/,1Q 4u("^([:.#]*)("+(l.9f="(?:[\\\\w\\dp-\\dq*-]|\\\\\\\\.)")+"+)")],7o:[/^(\\/?\\.\\.)/,"a.1o",/^(>|\\/)/,"l.5s(a.25)",/^(\\+)/,"l.3N(a,2,\'47\')",/^(~)/,q(a){C s=l.5s(a.1o.25);B s.8O(l.6P(a,s)+1)}],5S:q(2p,3n,2o){C 3b,1u=[];2M(2p&&2p!=3b){3b=2p;C f=l.1z(2p,3n,2o);2p=f.t.1N(/^\\s*,\\s*/,"");1u=2o?3n=f.r:l.3Y(1u,f.r)}B 1u},3p:q(t,2J){u(T t!="1V")B[t];u(2J&&!2J.33)2J=1b;2J=2J||11;u(!t.1O("//")){2J=2J.3d;t=t.6i(2,t.I)}L u(!t.1O("/")&&!2J.6e){2J=2J.3d;t=t.6i(1,t.I);u(t.1O("/")>=1)t=t.6i(t.1O("/"),t.I)}C 1f=[2J],3P=[],2u;2M(t&&2u!=t){C r=[];2u=t;t=l.39(t).1N(/^\\/\\//,"");C 6S=1c;C 5q=/^[\\/>]\\s*([\\w*-]+)/;C m=5q.59(t);u(m){U(C i=0;1f[i];i++)U(C c=1f[i].25;c;c=c.47)u(c.33==1&&(m[1]=="*"||l.1J(c,m[1])))r.1y(c);1f=r;t=t.1N(5q,"");u(t.1O(" ")==0)dr;6S=14}L{U(C i=0,ay=l.7o.I;i<ay;i+=2){C 5q=l.7o[i],fn=l.7o[i+1];C m=5q.59(t);u(m){r=1f=l.4E(1f,l.2G(fn)?fn:1Q 73("a","B "+fn));t=l.39(t.1N(5q,""));6S=14;34}}}u(t&&!6S){u(!t.1O(",")){u(1f[0]==2J)1f.7W();3P=l.3Y(3P,1f);r=1f=[2J];t=" "+t.6i(1,t.I)}L{C 6a=1Q 4u("^(\\\\w+)(#)("+l.9f+"+)");C m=6a.59(t);u(m){m=[0,m[2],m[3],m[1]]}L{6a=1Q 4u("^([#.]?)("+l.9f+"*)");m=6a.59(t)}m[2]=m[2].1N(/\\\\/g,"");C J=1f[1f.I-1];u(m[1]=="#"&&J&&J.8V){C 4L=J.8V(m[2]);u((l.1a.1C||l.1a.3K)&&4L&&4L.Q!=m[2])4L=l(\'[@Q="\'+m[2]+\'"]\',J)[0];1f=r=4L&&(!m[3]||l.1J(4L,m[3]))?[4L]:[]}L{U(C i=0;1f[i];i++){C 7s=m[1]!=""||m[0]==""?"*":m[2];u(7s=="*"&&1f[i].1J.2t()=="40")7s="O";r=l.3Y(r,1f[i].bn(7s))}u(m[1]==".")r=l.8I(r,m[2]);u(m[1]=="#"){C 5n=[];U(C i=0;r[i];i++)u(r[i].7E("Q")==m[2]){5n=[r[i]];34}r=5n}1f=r}t=t.1N(6a,"")}}u(t){C 1W=l.1z(t,r);1f=r=1W.r;t=l.39(1W.t)}}u(t)1f=[];u(1f&&1f[0]==2J)1f.7W();3P=l.3Y(3P,1f);B 3P},8I:q(r,m,2o){m=" "+m+" ";C 5n=[];U(C i=0;r[i];i++){C 8H=(" "+r[i].2j+" ").1O(m)>=0;u(!2o&&8H||2o&&!8H)5n.1y(r[i])}B 5n},1z:q(t,r,2o){C 2u;2M(t&&t!=2u){2u=t;C p=l.aD,m;U(C i=0;p[i];i++){m=p[i].59(t);u(m){t=t.6R(m[0].I);u(l.2p[m[1]].9e)m=l.2p[m[1]].9e(m);m[2]=m[2].1N(/\\\\/g,"");34}}u(!m)34;u(m[1]==":"&&m[2]=="2o")r=l.1z(m[3],r,14).r;L u(m[1]==".")r=l.8I(r,m[2],2o);L{C f=l.2p[m[1]];u(T f!="1V")f=l.2p[m[1]][m[2]];6G("f = q(a,i){"+(l.2p[m[1]].aE||"")+"B "+f+"}");r=l.53(r,f,2o)}}B{r:r,t:t}},6t:q(J){C 99=[];C 1u=J.1o;2M(1u&&1u!=11){99.1y(1u);1u=1u.1o}B 99},3N:q(1u,2b,6l,J){2b=2b||1;C 2Q=0;U(;1u;1u=1u[6l]){u(1u.33==1)2Q++;u(2Q==2b||2b=="aF"&&2Q%2==0&&2Q>1&&1u==J||2b=="aG"&&2Q%2==1&&1u==J)B 1u}},5s:q(n,J){C r=[];U(;n;n=n.47){u(n.33==1&&(!J||n!=J))r.1y(n)}B r}});l.S={2e:q(E,H,1B,R){u(l.1a.1C&&E.6u!=1e)E=1h;u(R)1B.R=R;u(!1B.5a)1B.5a=6.5a++;u(!E.$2l)E.$2l={};C 5X=E.$2l[H];u(!5X){5X=E.$2l[H]={};u(E["5Y"+H])5X[0]=E["5Y"+H]}5X[1B.5a]=1B;E["5Y"+H]=6.6L;u(!6.2A[H])6.2A[H]=[];6.2A[H].1y(E)},5a:1,2A:{},4o:q(E,H,1B){C 2l=E.$2l,1f;u(2l){u(H&&H.H){1B=H.1B;H=H.H}u(!H){U(H 29 2l)6.4o(E,H)}L u(2l[H]){u(1B)66 2l[H][1B.5a];L U(1B 29 E.$2l[H])66 2l[H][1B];U(1f 29 2l[H])34;u(!1f){1f=E["5Y"+H]=1b;66 2l[H]}}U(1f 29 2l)34;u(!1f)E.$2l=1b}},2f:q(H,R,E){R=l.5h(R||[]);u(!E)l.19(6.2A[H]||[],q(){l.S.2f(H,R,6)});L{C 1B=E["5Y"+H],1W,fn=l.2G(E[H]);u(1B){R.aI(6.4P({H:H,3h:E}));u((1W=1B.1A(E,R))!==1c)6.8N=14}u(fn&&1W!==1c)E[H]();6.8N=1c}},6L:q(S){u(T l=="1e"||l.S.8N)B;S=l.S.4P(S||1h.S||{});C 4Q;C c=6.$2l[S.H];C 28=[].8O.3Z(18,1);28.aI(S);U(C j 29 c){28[0].1B=c[j];28[0].R=c[j].R;u(c[j].1A(6,28)===1c){S.3W();S.57();4Q=1c}}u(l.1a.1C)S.3h=S.3W=S.57=S.1B=S.R=1b;B 4Q},4P:q(S){u(!S.3h&&S.aJ)S.3h=S.aJ;u(S.8L==1e&&S.a2!=1e){C e=11.3d,b=11.1K;S.8L=S.a2+(e.31||b.31);S.aH=S.dB+(e.2Y||b.2Y)}u(l.1a.38&&S.3h.33==3){C 5Z=S;S=l.1k({},5Z);S.3h=5Z.3h.1o;S.3W=q(){B 5Z.3W()};S.57=q(){B 5Z.57()}}u(!S.3W)S.3W=q(){6.4Q=1c};u(!S.57)S.57=q(){6.dC=14};B S}};l.fn.1k({2P:q(H,R,fn){B 6.19(q(){l.S.2e(6,H,fn||R,R)})},aN:q(H,R,fn){B 6.19(q(){l.S.2e(6,H,q(S){l(6).75(S);B(fn||R).1A(6,18)},R)})},75:q(H,fn){B 6.19(q(){l.S.4o(6,H,fn)})},2f:q(H,R){B 6.19(q(){l.S.2f(H,R,6)})},3c:q(){C a=18;B 6.49(q(e){6.8Q=6.8Q==0?1:0;e.3W();B a[6.8Q].1A(6,[e])||1c})},e2:q(f,g){q 8S(e){C p=(e.H=="51"?e.dD:e.dE)||e.dF;2M(p&&p!=6)3G{p=p.1o}3F(e){p=6};u(p==6)B 1c;B(e.H=="51"?f:g).1A(6,[e])}B 6.51(8S).76(8S)},37:q(f){u(l.6Y)f.1A(11,[l]);L{l.67.1y(q(){B f.1A(6,[l])})}B 6}});l.1k({6Y:1c,67:[],37:q(){u(!l.6Y){l.6Y=14;u(l.67){l.19(l.67,q(){6.1A(11)});l.67=1b}u(l.1a.4d||l.1a.3K)11.dH("aL",l.37,1c)}}});1Q q(){l.19(("8r,4R,4z,dU,6o,8Y,49,dT,"+"dJ,dK,9b,51,76,dL,3D,"+"3S,dM,dN,dO,1n").4C(","),q(i,o){l.fn[o]=q(d,f){B(f||d)?6.2P(o,d,f):6.2f(o)}});u(l.1a.4d||l.1a.3K)11.dP("aL",l.37,1c);L u(l.1a.1C){11.dQ("<dR"+"dS Q=aM dV=14 "+"3B=//:><\\/4m>");C 4m=11.8V("aM");u(4m)4m.6f=q(){u(6.7M!="3E")B;6.1o.61(6);l.37()};4m=1b}L u(l.1a.38)l.8W=6u(q(){u(11.7M=="dW"||11.7M=="3E"){9y(l.8W);l.8W=1b;l.37()}},10);l.S.2e(1h,"4z",l.37)};u(l.1a.1C)l(1h).aN("8Y",q(){C 2A=l.S.2A;U(C H 29 2A){C 8Z=2A[H],i=8Z.I;u(i&&H!=\'8Y\')do l.S.4o(8Z[i-1],H);2M(--i)}});l.fn.1k({1F:q(1r,1j){C 2E=6.1z(":2E");1r?2E.30({1i:"1F",2d:"1F",1L:"1F"},1r,1j):2E.19(q(){6.1E.1G=6.58?6.58:"";u(l.K(6,"1G")=="2n")6.1E.1G="41"});B 6},1D:q(1r,1j){C 3t=6.1z(":3t");1r?3t.30({1i:"1D",2d:"1D",1L:"1D"},1r,1j):3t.19(q(){6.58=6.58||l.K(6,"1G");u(6.58=="2n")6.58="41";6.1E.1G="2n"});B 6},aP:l.fn.3c,3c:q(fn,8G){C 28=18;B l.2G(fn)&&l.2G(8G)?6.aP(fn,8G):6.19(q(){l(6)[l(6).3a(":2E")?"1F":"1D"].1A(l(6),28)})},bD:q(1r,1j){B 6.1z(":2E").30({1i:"1F"},1r,1j).3g()},bA:q(1r,1j){B 6.1z(":3t").30({1i:"1D"},1r,1j).3g()},dX:q(1r,1j){B 6.19(q(){C aQ=l(6).3a(":2E")?"1F":"1D";l(6).30({1i:aQ},1r,1j)})},bM:q(1r,1j){B 6.1z(":2E").30({1L:"1F"},1r,1j).3g()},bH:q(1r,1j){B 6.1z(":3t").30({1L:"1D"},1r,1j).3g()},dY:q(1r,3M,1j){B 6.30({1L:3M},1r,1j)},30:q(16,1r,3e,1j){B 6.2X(q(){6.55=l.1k({},16);C 2H=l.1r(1r,3e,1j);U(C p 29 16){C e=1Q l.5W(6,2H,p);u(16[p].22==5O)e.5f(e.1u(),16[p]);L e[16[p]](16)}})},2X:q(H,fn){u(!fn){fn=H;H="5W"}B 6.19(q(){u(!6.2X)6.2X={};u(!6.2X[H])6.2X[H]=[];6.2X[H].1y(fn);u(6.2X[H].I==1)fn.1A(6)})}});l.1k({1r:q(1r,3e,fn){C 2H=1r&&1r.22==dZ?1r:{3E:fn||!fn&&3e||l.2G(1r)&&1r,3T:1r,3e:fn&&3e||3e&&3e.22!=73&&3e||"aT"};2H.3T=(2H.3T&&2H.3T.22==5O?2H.3T:{e0:e1,e3:bC}[2H.3T])||e4;2H.3b=2H.3E;2H.3E=q(){l.aW(6,"5W");u(l.2G(2H.3b))2H.3b.1A(6)};B 2H},3e:{e5:q(p,n,4I,78){B 4I+78*p},aT:q(p,n,4I,78){B((-4k.e6(p*4k.e8)/2)+0.5)*78+4I}},2X:{},aW:q(J,H){H=H||"5W";u(J.2X&&J.2X[H]){J.2X[H].7W();C f=J.2X[H][0];u(f)f.1A(J)}},54:[],5W:q(J,V,16){C z=6;C y=J.1E;u(16=="1i"||16=="2d"){C 7c=l.K(J,"1G");C aZ=y.4y;y.4y="2E"}z.a=q(){u(V.7b)V.7b.1A(J,[z.4Z]);u(16=="1L")l.1v(y,"1L",z.4Z);L{y[16]=1d(z.4Z)+"2s";y.1G="41"}};z.7Q=q(){B 79(l.K(J,16))};z.1u=q(){C r=79(l.68(J,16));B r&&r>-e9?r:z.7Q()};z.5f=q(93,3M){z.8y=(1Q 5m()).7e();z.4Z=93;z.a();l.54.1y(q(){B z.7b(93,3M)});u(l.54.I==1){C aY=6u(q(){l.54=l.53(l.54,q(fn){B fn()});u(!l.54.I)9y(aY)},13)}};z.1F=q(){u(!J.3O)J.3O={};J.3O[16]=l.1v(J.1E,16);V.1F=14;z.5f(0,6.1u());u(16!="1L")y[16]="52"};z.1D=q(){u(!J.3O)J.3O={};J.3O[16]=l.1v(J.1E,16);V.1D=14;z.5f(6.1u(),0)};z.3c=q(){u(!J.3O)J.3O={};J.3O[16]=l.1v(J.1E,16);u(7c=="2n"){V.1F=14;u(16!="1L")y[16]="52";z.5f(0,6.1u())}L{V.1D=14;z.5f(6.1u(),0)}};z.7b=q(4I,96){C t=(1Q 5m()).7e();u(t>V.3T+z.8y){z.4Z=96;z.a();u(J.55)J.55[16]=14;C 3P=14;U(C i 29 J.55)u(J.55[i]!==14)3P=1c;u(3P){u(7c){y.4y=aZ;y.1G=7c;u(l.K(J,"1G")=="2n")y.1G="41"}u(V.1D)y.1G="2n";u(V.1D||V.1F)U(C p 29 J.55)l.1v(y,p,J.3O[p])}u(3P&&l.2G(V.3E))V.3E.1A(J);B 1c}L{C n=t-6.8y;C p=n/V.3T;z.4Z=l.3e[V.3e](p,n,4I,(96-4I),V.3T);z.a()}B 14}}});l.fn.1k({eb:q(1t,3u,1j){6.4z(1t,3u,1j,1)},4z:q(1t,3u,1j,3v){u(l.2G(1t))B 6.2P("4z",1t);1j=1j||q(){};C H="9a";u(3u)u(l.2G(3u)){1j=3u;3u=1b}L{3u=l.O(3u);H="b6"}C 3k=6;l.7h({1t:1t,H:H,R:3u,3v:3v,3E:q(5i,1U){u(1U=="5p"||!3v&&1U=="bj")3k.1v("3R",5i.7A).9p().19(1j,[5i.7A,1U,5i]);L 1j.1A(3k,[5i.7A,1U,5i])}});B 6},ed:q(){B l.O(6)},9p:q(){B 6.3p("4m").19(q(){u(6.3B)l.b4(6.3B);L l.9q(6.1M||6.ee||6.3R||"")}).3g()}});u(!1h.5E)5E=q(){B 1Q ef("az.eg")};l.19("b9,bp,bT,bw,bU,bh".4C(","),q(i,o){l.fn[o]=q(f){B 6.2P(o,f)}});l.1k({2O:q(1t,R,1j,H,3v){u(l.2G(R)){1j=R;R=1b}B l.7h({H:"9a",1t:1t,R:R,5p:1j,9h:H,3v:3v})},eh:q(1t,R,1j,H){B l.2O(1t,R,1j,H,1)},b4:q(1t,1j){B l.2O(1t,1b,1j,"4m")},ei:q(1t,R,1j){B l.2O(1t,R,1j,"bO")},ej:q(1t,R,1j,H){u(l.2G(R)){1j=R;R={}}B l.7h({H:"b6",1t:1t,R:R,5p:1j,9h:H})},ek:q(32){l.84.32=32},em:q(F){l.1k(l.84,F)},84:{2A:14,H:"9a",32:0,bb:"en/x-eo-1X-ep",b7:14,7u:14,R:1b},7x:{},7h:q(s){s=l.1k({},l.84,s);u(s.R){u(s.b7&&T s.R!="1V")s.R=l.O(s.R);u(s.H.2t()=="2O"){s.1t+=((s.1t.1O("?")>-1)?"&":"?")+s.R;s.R=1b}}u(s.2A&&!l.9j++)l.S.2f("b9");C 9i=1c;C 1p=1Q 5E();1p.es(s.H,s.1t,s.7u);u(s.R)1p.7S("et-eu",s.bb);u(s.3v)1p.7S("ev-9l-ew",l.7x[s.1t]||"ex, ey ez eA 9d:9d:9d eB");1p.7S("X-eC-eD","5E");u(1p.eE)1p.7S("eF","eG");u(s.bg)s.bg(1p);u(s.2A)l.S.2f("bh",[1p,s]);C 6f=q(9C){u(1p&&(1p.7M==4||9C=="32")){9i=14;u(7w){9y(7w);7w=1b}C 1U;3G{1U=l.by(1p)&&9C!="32"?s.3v&&l.bE(1p,s.1t)?"bj":"5p":"1n";u(1U!="1n"){C 7n;3G{7n=1p.9m("bF-9l")}3F(e){}u(s.3v&&7n)l.7x[s.1t]=7n;C R=l.bK(1p,s.9h);u(s.5p)s.5p(R,1U);u(s.2A)l.S.2f("bU",[1p,s])}L l.7q(s,1p,1U)}3F(e){1U="1n";l.7q(s,1p,1U,e)}u(s.2A)l.S.2f("bT",[1p,s]);u(s.2A&&!--l.9j)l.S.2f("bp");u(s.3E)s.3E(1p,1U);u(s.7u)1p=1b}};C 7w=6u(6f,13);u(s.32>0)3j(q(){u(1p){1p.eH();u(!9i)6f("32")}},s.32);3G{1p.eJ(s.R)}3F(e){l.7q(s,1p,1b,e)}u(!s.7u)6f();B 1p},7q:q(s,1p,1U,e){u(s.1n)s.1n(1p,1U,e);u(s.2A)l.S.2f("bw",[1p,s,e])},9j:0,by:q(r){3G{B!r.1U&&5l.eK=="9k:"||(r.1U>=bC&&r.1U<eL)||r.1U==bG||l.1a.38&&r.1U==1e}3F(e){}B 1c},bE:q(1p,1t){3G{C bI=1p.9m("bF-9l");B 1p.1U==bG||bI==l.7x[1t]||l.1a.38&&1p.1U==1e}3F(e){}B 1c},bK:q(r,H){C ct=r.9m("eM-H");C R=!H&&ct&&ct.1O("1p")>=0;R=H=="1p"||R?r.eP:r.7A;u(H=="4m")l.9q(R);u(H=="bO")6G("R = "+R);u(H=="2i")l("<26>").2i(R).9p();B R},O:q(a){C s=[];u(a.22==3L||a.7B)l.19(a,q(){s.1y(4T(6.1g)+"="+4T(6.G))});L U(C j 29 a)u(a[j]&&a[j].22==3L)l.19(a[j],q(){s.1y(4T(j)+"="+4T(6))});L s.1y(4T(j)+"="+4T(a[j]));B s.9v("&")},9q:q(R){u(1h.bR)1h.bR(R);L u(l.1a.38)1h.3j(R,0);L 6G.3Z(1h,R)}})}l.fn.eR=q(f){B 6.19(q(){C p=6.1o;u(l.K(p,"2z")==\'6m\')p.1E.2z=\'7i\';C s=6.1E;s.2z=\'4l\';u(!f||f=="eS"){u(((1d(l.K(p,"2d"))-1d(l.K(6,"2d")))/2)>0)s.2x=((1d(l.K(p,"2d"))-1d(l.K(6,"2d")))/2)+"2s";L s.2x="0"}u(!f||f=="eT"){u(((1d(l.K(p,"1i"))-1d(l.K(6,"1i")))/2)>0){s.2F=((1d(l.K(p,"1i"))-1d(l.K(6,"1i")))/2)+"2s"}L{u(p.1J.2t()=="1K"){u(1h.65)C 4n=1h.65;L u(11.1K&&11.1K.2W)C 4n=11.1K.2W;s.2F=((4n-1d(l.K(6,"1i")))/2)+"2s"}L{s.2F="0"}}}})};l.4f=q(1g,G,V){u(T G!=\'1e\'){V=V||{};u(G===1b){G="";V.2w=-1}C 2w=\'\';u(V.2w){C 2q;u(T V.2w==\'1V\'&&V.2w.2y(/^[+-]?[0-9]+[eU]$/)!==1b){C 2y=V.2w.2y(/^([+-]?[0-9]+)([eV])$/);V.2w=1d(2y[0],10)*(({"Y":(60*60*24*bX),"M":(60*60*24*bX/12),"W":(60*60*24*7),"D":(60*60*24),"h":(60*60),"m":(60),"s":(1)}[2y[1]])||0);2q=1Q 5m();2q.bY(2q.7e()+V.2w*4w)}L u(T V.2w==\'3m\'){2q=1Q 5m();2q.bY(2q.7e()+V.2w*24*60*60*4w)}L u(T V.2w.bZ!=\'1e\')2q=V.2w;L 9F"eX \\"2w\\" 2k";2w=\'; 2w=\'+2q.bZ()}C 6h=V.6h?\'; 6h=\'+V.6h:\'\';C 63=V.63?\'; 63=\'+V.63:\'\';C 7O=V.7O?\'; 7O\':\'\';11.4f=[1g,\'=\',4T(G),2w,6h,63,7O].9v(\'\')}L{C 9A=1b;u(11.4f&&11.4f!=\'\'){C 9w=11.4f.4C(\';\');U(C i=0;i<9w.I;i++){C 4f=l.39(9w[i]);u(4f.6R(0,1g.I+1)==(1g+\'=\')){9A=eZ(4f.6R(1g.I+1));34}}}B 9A}};l.fn.c0=l.fn.1i;l.fn.c1=l.fn.2d;l.fn.1i=q(){u(6[0]==1h)B 3k.65||l.56&&11.3d.4n||11.1K.4n;u(6[0]==11)B 4k.7Q(11.1K.f0,11.1K.2W);B 6.c0(18[0])};l.fn.2d=q(){u(6[0]==1h)B 3k.8X||l.56&&11.3d.62||11.1K.62;u(6[0]==11)B 4k.7Q(11.1K.f1,11.1K.45);B 6.c1(18[0])};l.fn.65=q(){B 6[0]==1h||6[0]==11?6.1i():6.K(\'1G\')!=\'2n\'?6[0].2W-(1d(6.K("4q"))||0)-(1d(6.K("c2"))||0):6.1i()+(1d(6.K("9H"))||0)+(1d(6.K("c3"))||0)};l.fn.8X=q(){B 6[0]==1h||6[0]==11?6.2d():6.K(\'1G\')!=\'2n\'?6[0].45-(1d(6.K("4r"))||0)-(1d(6.K("c4"))||0):6.1i()+(1d(6.K("9G"))||0)+(1d(6.K("98"))||0)};l.fn.f2=q(){B 6[0]==1h||6[0]==11?6.1i():6.K(\'1G\')!=\'2n\'?6[0].2W:6.1i()+(1d(6.K("4q"))||0)+(1d(6.K("c2"))||0)+(1d(6.K("9H"))||0)+(1d(6.K("c3"))||0)};l.fn.f3=q(){B 6[0]==1h||6[0]==11?6.2d():6.K(\'1G\')!=\'2n\'?6[0].45:6.1i()+(1d(6.K("4r"))||0)+(1d(6.K("c4"))||0)+(1d(6.K("9G"))||0)+(1d(6.K("98"))||0)};l.fn.31=q(){u(6[0]==1h||6[0]==11)B 3k.8T||l.56&&11.3d.31||11.1K.31;B 6[0].31};l.fn.2Y=q(){u(6[0]==1h||6[0]==11)B 3k.8U||l.56&&11.3d.2Y||11.1K.2Y;B 6[0].2Y};l.fn.92=q(V,9I){C x=0,y=0,J=6[0],1s=6[0],6Q=1c,9D=1c,5R,6q=0,6p=0,V=l.1k({77:14,64:14,6w:1c,6o:14},V||{});do{x+=1s.8M||0;y+=1s.8P||0;u(l.1a.4d||l.1a.1C){C bt=1d(l.K(1s,\'4q\'))||0;C bl=1d(l.K(1s,\'4r\'))||0;x+=bl;y+=bt;u(l.1a.4d&&1s!=J&&l.K(1s,\'4y\')!=\'3t\'){x+=bl;y+=bt}u(l.K(1s,\'2z\')==\'4l\')6Q=14;u(l.K(1s,\'2z\')==\'7i\')9D=14}u(V.6o){5R=1s.c7;do{6q+=1s.31||0;6p+=1s.2Y||0;1s=1s.1o;u(l.1a.4d&&1s!=J&&1s!=5R&&l.K(1s,\'4y\')!=\'3t\'){x+=1d(l.K(1s,\'4r\'))||0;y+=1d(l.K(1s,\'4q\'))||0}}2M(5R&&1s!=5R)}L 1s=1s.c7;u(1s&&(1s.7T.2t()==\'1K\'||1s.7T.2t()==\'2i\')){u((l.1a.38||(l.1a.1C&&l.56))&&l.K(J,\'2z\')!=\'4l\'){x+=1d(l.K(1s,\'ca\'))||0;y+=1d(l.K(1s,\'cb\'))||0}u((l.1a.4d&&!6Q)||(l.1a.1C&&l.K(J,\'2z\')==\'6m\'&&(!9D||!6Q))){x+=1d(l.K(1s,\'4r\'))||0;y+=1d(l.K(1s,\'4q\'))||0}34}}2M(1s);u(!V.77){x-=1d(l.K(J,\'ca\'))||0;y-=1d(l.K(J,\'cb\'))||0}u(V.64&&(l.1a.38||l.1a.3K)){x+=1d(l.K(J,\'4r\'))||0;y+=1d(l.K(J,\'4q\'))||0}L u(!V.64&&!(l.1a.38||l.1a.3K)){x-=1d(l.K(J,\'4r\'))||0;y-=1d(l.K(J,\'4q\'))||0}u(V.6w){x+=1d(l.K(J,\'9G\'))||0;y+=1d(l.K(J,\'9H\'))||0}u(V.6o&&l.1a.3K&&l.K(J,\'1G\')==\'f6\'){6q-=J.31||0;6p-=J.2Y||0}C 4Q=V.6o?{2F:y-6p,2x:x-6q,2Y:6p,31:6q}:{2F:y,2x:x};u(9I){l.1k(9I,4Q);B 6}L{B 4Q}};(q($){$.fn.f7=l.fn.9J=q(s){u(!($.1a.1C&&T 5E==\'q\'))B 6;s=$.1k({2F:\'3X\',2x:\'3X\',2d:\'3X\',1i:\'3X\',1L:14,3B:\'f8:1c;\'},s||{});C 16=q(n){B n&&n.22==5O?n+\'2s\':n},2i=\'<ch 4F="9J"f9="0"fa="-1"3B="\'+s.3B+\'"\'+\'1E="1G:41;2z:4l;z-2Z:-1;\'+(s.1L!==1c?\'1z:fb(fc=\\\'0\\\');\':\'\')+\'2F:\'+(s.2F==\'3X\'?\'7Z(((1d(6.1o.4K.4q)||0)*-1)+\\\'2s\\\')\':16(s.2F))+\';\'+\'2x:\'+(s.2x==\'3X\'?\'7Z(((1d(6.1o.4K.4r)||0)*-1)+\\\'2s\\\')\':16(s.2x))+\';\'+\'2d:\'+(s.2d==\'3X\'?\'7Z(6.1o.45+\\\'2s\\\')\':16(s.2d))+\';\'+\'1i:\'+(s.1i==\'3X\'?\'7Z(6.1o.2W+\\\'2s\\\')\':16(s.1i))+\';\'+\'"/>\';B 6.19(q(){u(!$(\'ch.9J\',6)[0])6.5A(11.9K(2i),6.25)})}})(l);(q($){$.1k({1T:{cj:0}});$.fn.1T=q(2N,F){u(T 2N==\'40\')F=2N;F=$.1k({2N:(2N&&T 2N==\'3m\'&&2N>0)?--2N:0,3q:1b,3y:$.5M?14:1c,4D:1c,ci:\'4D-3V-\',9Z:1b,9Y:1b,a0:1b,a1:1b,9X:\'b3\',cr:1b,cs:1b,cm:1c,6x:1b,6z:1b,5J:1b,83:\'1T-2m\',4h:\'1T-3J\',6y:\'1T-3q\',6s:\'1T-1R\',8l:\'1T-1D\',8q:\'1T-ff\',ck:\'26\'},F||{});$.1a.85=$.1a.85||$.1a.1C&&T 5E==\'q\';q 9M(){a4(0,0)}B 6.19(q(){C 1R=6;C 2m=$(\'88.\'+F.83,1R);2m=2m.4N()&&2m||$(\'>88:eq(0)\',1R);C 1T=$(\'a\',2m);u(F.4D){C 8o={};1T.19(q(){$(6).2i(\'<3Q>\'+$(6).2i()+\'</3Q>\');C Q=F.ci+(++$.1T.cj);C 1Z=\'#\'+Q;8o[1Z]=6.46;6.46=1Z;$(\'<26 Q="\'+Q+\'" 4F="\'+F.6s+\'"></26>\').5N(1R)})}C 2C=$(\'26.\'+F.6s,1R);2C=2C.4N()&&2C||$(\'>\'+F.ck,1R);2m.3a(\'.\'+F.83)||2m.2L(F.83);2C.19(q(){C $$=$(6);$$.3a(\'.\'+F.6s)||$$.2L(F.6s)});C 9L=$(\'1Y\',2m).2Z($(\'1Y.\'+F.4h,2m)[0]);u(9L>=0){F.2N=9L}u(5l.1Z){1T.19(q(i){u(6.1Z==5l.1Z){F.2N=i;u(($.1a.1C||$.1a.3K)&&!F.4D){C 1S=$(5l.1Z);C 8j=1S.1v(\'Q\');1S.1v(\'Q\',\'\');3j(q(){1S.1v(\'Q\',8j)},fg)}9M();B 1c}})}u($.1a.1C){9M()}2C.1z(\':eq(\'+F.2N+\')\').1F().3g().2o(\':eq(\'+F.2N+\')\').2L(F.8l);u(!F.4D){$(\'1Y\',2m).3i(F.4h).eq(F.2N).2L(F.4h)}u(F.cm){C 9U=q(2R){C 9R=$.4E(2C.2O(),q(el){C h,9P=$(el);u(2R){u($.1a.85){el.1E.fh(\'co\');el.1E.1i=\'\';el.87=1b}h=9P.K({\'4G-1i\':\'\'}).1i()}L{h=9P.1i()}B h}).9Q(q(a,b){B b-a});u($.1a.85){2C.19(q(){6.87=9R[0]+\'2s\';6.1E.fj(\'co\',\'6.1E.1i = 6.87 ? 6.87 : "52"\')})}L{2C.K({\'4G-1i\':9R[0]+\'2s\'})}};9U();C 8b=1R.45;C 9V=1R.2W;C 9T=$(\'#1T-cp-9S-4N\').2O(0)||$(\'<3Q Q="1T-cp-9S-4N">M</3Q>\').K({1G:\'41\',2z:\'4l\',8a:\'2E\'}).5N(11.1K).2O(0);C 8d=9T.2W;6u(q(){C 8c=1R.45;C 9W=1R.2W;C 8e=9T.2W;u(9W>9V||8c!=8b||8e!=8d){9U((8c>8b||8e<8d));8b=8c;9V=9W;8d=8e}},50)}C 4V={},5H={},8m=F.cr||F.9X,a3=F.cs||F.9X;u(F.9Y||F.9Z){u(F.9Y){4V[\'1i\']=\'1F\';5H[\'1i\']=\'1D\'}u(F.9Z){4V[\'1L\']=\'1F\';5H[\'1L\']=\'1D\'}}L{u(F.a0){4V=F.a0}L{4V[\'4G-2d\']=0;8m=F.3y?50:1}u(F.a1){5H=F.a1}L{5H[\'4G-2d\']=0;a3=F.3y?50:1}}C 6x=F.6x,6z=F.6z,5J=F.5J;1T.2P(\'a9\',q(){C 1Y=$(6.1o);u(1R.6B||1Y.3a(\'.\'+F.4h)||1Y.3a(\'.\'+F.6y)){B 1c}C 1Z=6.1Z;u($.1a.1C){$(6).2f(\'49\');u(F.3y){$.5M.4s(1Z);5l.1Z=1Z.1N(\'#\',\'\')}}L u($.1a.38){C cv=$(\'<1X cu="\'+1Z+\'"><26><44 H="3S" G="h" /></26></1X>\').2O(0);cv.3S();$(6).2f(\'49\');u(F.3y){$.5M.4s(1Z)}}L{u(F.3y){5l.1Z=1Z.1N(\'#\',\'\')}L{$(6).2f(\'49\')}}});1T.2P(\'8s\',q(){C 1Y=$(6.1o);u($.1a.38){1Y.30({1L:0},1,q(){1Y.K({1L:\'\'})})}1Y.2L(F.6y)});u(F.3q&&F.3q.I){U(C i=0,k=F.3q.I;i<k;i++){1T.eq(--F.3q[i]).2f(\'8s\').3g()}};1T.2P(\'aa\',q(){C 1Y=$(6.1o);1Y.3i(F.6y);u($.1a.38){1Y.30({1L:1},1,q(){1Y.K({1L:\'\'})})}});1T.2P(\'49\',q(e){C 6F=e.a2;C 4A=6,1Y=$(6.1o),1S=$(6.1Z),2r=2C.1z(\':3t\');u((T 6x==\'q\'&&6x(6,1S[0],2r[0])==1c&&6F)||1R.6B||1Y.3a(\'.\'+F.4h)||1Y.3a(\'.\'+F.6y)){6.8r();B 1c}1R[\'6B\']=14;u(1S.4N()){u($.1a.1C&&F.3y){C 8j=6.1Z.1N(\'#\',\'\');1S.1v(\'Q\',\'\');3j(q(){1S.1v(\'Q\',8j)},0)}q 8p(){u(F.3y&&6F){$.5M.4s(4A.1Z)}2r.30(5H,a3,q(){$(4A.1o).2L(F.4h).cA().3i(F.4h);u(T 6z==\'q\'){6z(4A,1S[0],2r[0])}2r.2L(F.8l).K({1G:\'\',4y:\'\',1i:\'\',1L:\'\'});1S.3i(F.8l).30(4V,8m,q(){1S.K({4y:\'\',1i:\'\',1L:\'\'});u($.1a.1C){2r[0].1E.1z=\'\';1S[0].1E.1z=\'\'}u(T 5J==\'q\'){5J(4A,1S[0],2r[0])}1R.6B=1b})})}u(!F.4D){8p()}L{C $$=$(6),3Q=$(\'3Q\',6)[0],1M=3Q.3R;$$.2L(F.8q);3Q.3R=\'cB&#cC;\';3j(q(){$(4A.1Z).4z(8o[4A.1Z],q(){8p();3Q.3R=1M;$$.3i(F.8q)})},0)}}L{7K(\'cE 3a 9g cF 1R.\')}C a5=1h.8T||11.3d&&11.3d.31||11.1K.31||0;C a6=1h.8U||11.3d&&11.3d.2Y||11.1K.2Y||0;3j(q(){1h.a4(a5,a6)},0);6.8r();B F.3y&&!!6F});u(F.4D){1T.eq(F.2N).2f(\'49\').3g()}u(F.3y){$.5M.cG(q(){1T.eq(F.2N).2f(\'49\').3g()})}})};C 7H=[\'a9\',\'8s\',\'aa\'];U(C i=0;i<7H.I;i++){$.fn[7H[i]]=(q(cf){B q(3V){B 6.19(q(){C 2m=$(\'88.1T-2m\',6);2m=2m.4N()&&2m||$(\'>88:eq(0)\',6);C a;u(!3V||T 3V==\'3m\'){a=$(\'1Y>a\',2m).eq((3V&&3V>0&&3V-1||0))}L u(T 3V==\'1V\'){a=$(\'1Y>a[@46$="#\'+3V+\'"]\',2m)}a.2f(cf)})}})(7H[i])}})(l);l.1k(l.fn,{b2:q(V){C N=1Q l.N(V,6);N.1w=6.3p(":44:2o(:3S):2o(:2R)").4R(q(){N.4t=6});u(N.F.7l){6.3S(q(S){u(N.F.3o)S.3W();B N.1X()})}u(N.F.S){N.1w.2P(N.F.S,q(){N.E(6)})}B N},1y:q(t){B 6.7f(l.3Y(6.2O(),t))},5G:q(Q){B 6.1z("[@U=\'"+Q+"\']")}});l.1k(l.2p[":"],{b8:"!l.39(a.G)",ba:"!!l.39(a.G)"});l.N=q(V,1X){6.F=l.1k({},l.N.4b,V);6.5I=1X[0];6.4g=6.F.5y;6.7N=6.4g.I&&6.4g||1X;6.2C=6.F.7k.2e(6.F.5y);6.2R()};l.1k(l.N,{4b:{3z:{},3f:"1n",80:14,7k:l([]),5y:l([]),7l:14},bc:q(F){l.1k(l.N.4b,F)},3z:{1m:"bd bf 3a 1m.",6M:"1H 1I a G 9g bi bk {0} 5r.",7Y:"1H 1I a G bm at bo {0} 5r.",7R:"1H 1I a G 7p {0} 7C {1} 5r bq.",5t:"1H 1I a 2U 5t bs.",1t:"1H 1I a 2U bu.",2q:"1H 1I a 2U 2q.",6U:"1H 1I a 2U 2q (bv).",6X:"7t 7r 7v 5o bx¼bz bB 5o.",3m:"1H 1I a 2U 3m.",7g:"7t 7r 7v bJ bL 5o.",5b:"1H 1I 9o 5b",6T:"1H 1I 7U bN G bP.",7D:"1H 1I a G 7p {0} 7C {1}.",6N:"1H 1I a G bS 7I 4M 7J 3M {0}.",7L:"1H 1I a G bW 7I 4M 7J 3M {0}."},5B:{1X:q(){6.5d();U(C i=0,E;E=6.1w[i++];){6.4e(E)}B 6.2U()},E:q(E){6.72(E);6.4e(E);6.3A()},3A:q(2T){u(2T)l.1k(6.2B,2T);6.F.3A?6.F.3A(6.2B,6):6.86()},5e:q(){u(l.fn.5e)l(6.5I).5e();6.5d();6.5C();6.1w.3i(6.F.3f)},3I:q(7m){B l(7m)[0]},2T:q(){B l("8h."+6.F.3f,6.7N)},2R:q(E){6.2B={};6.1S=$([]);6.2r=$([])},5d:q(){6.2R();6.2r=6.2T().1y(6.2C);6.1S.1y(6.2C)},72:q(E){6.2R();6.2r=6.2T().5G(6.48(6.3I(E)))},4e:q(E){E=6.3I(E);l(E).3i(6.F.3f);C 2a=6.2a(E);U(C i=0,1P;1P=2a[i++];){3G{C 2b=l.N.1l[1P.2c](l.39(E.G),E,1P.4W);u(2b===-1)34;u(!2b){l(E).2L(6.F.3f);6.7V(1P,E);34}}3F(e){6.F.3o&&1h.2V&&2V.1n("c5 c6 c8 c9 E "+E.Q+", 4e 7U \'"+1P.2c+"\' 2c");9F e}}},21:q(Q,1P){C m=6.F.3z[Q];B m&&(m.22==2I?m:m[1P.2c])},7V:q(1P,E){C Q=6.48(E),O=1P.4W;6.2B[Q]=(E.3x||6.21(Q,1P)||l.N.3z[1P.2c]||"<7X>cc: cd 21 ce U "+Q+"</7X>").1N("{0}",(O.22==3L?O[0]:O)||"").1N("{1}",O[1]||"")},2U:q(){u(6.82()){6.3A();B 1c}L{6.5C();u(6.F.81){6.F.81(6.5I);B 1c}B 14}},82:q(){C 4U=0;l.19(6.2B,q(){4U++});B 4U},5C:q(){6.3c("8f")},3c:q(5x){C 3k=6;q 4p(){B 3k["3M"+5x]}u(6.F.4x){4p().1y(4p().6t(6.F.4x))}4p()[5x.2t()]();B 6},86:q(){C 2D=14;U(C 4v 29 6.2B){u(2D&&6.F.80){u(6.4t&&6.2B[6.4t.Q])6.4t.4R();L{3G{C E=l("#"+4v);u(E.I)E[0].4R()}3F(e){6.F.3o&&1h.2V&&2V.1n(e)}}2D=1c}6.8g(4v,6.2B[4v])}6.2r=6.2r.2o(6.1S);6.3c("8f").3c("cw")},8g:q(Q,21){C 1n=6.2T().5G(Q);u(1n.I){u(1n.1v("8k")){1n.2i(21)}}L{1n=l("<8h>").1v({"U":Q,8k:14}).2L(6.F.3f).2i(21);u(6.F.4x){1n=1n.1D().1F().4i("<"+6.F.4x+">").1s()}u(!6.4g.3H(1n).I)6.F.6A?6.F.6A(1n,l("#"+Q)):1n.8n("#"+Q)}6.1S.1y(1n)},2a:q(E){u(!6.R(E))B[];C 2a=[];l.19(6.R(E),q(2S,G){2a[2a.I]={2c:2S,4W:G}});B 2a},R:q(E){B 6.F.2a?6.F.2a[6.48(E)]:6.F.6D?l(E).R()[6.F.6D]:l(E).R()},48:q(E){C Q=(/3U|4c/i.1q(E.H))?E.1g:E.Q;u(!Q){C 4X=E.1X.Q,4Y=/[^a-a7-2v-9\\-5K]/g;Q=E.Q=(4X?4X.1N(4Y,""):"")+E.1g.1N(4Y,"")}B Q}},3C:q(G,E){5c(E.1J.2t()){35\'3D\':B l("2k:3J",E).I;35\'44\':u(/3U|4c/i.1q(E.H))B l(E.1X||11).3p(\'[@1g="\'+E.1g+\'"]:4O\').I}B G.I},8i:q(O,E){B 6.5v[T O]?6.5v[T O](O,E):14},5v:{"6c":q(O,E){B O},"1V":q(O,E){B!!l(O,E.1X).I},"q":q(O,E){B O(E)}},1l:{1m:q(G,E,O){u(!l.N.8i(O,E))B-1;5c(E.1J.2t()){35\'3D\':C V=l("2k:3J",E);B V.I>0&&(E.H=="3D-ag"||V[0].G.I>0);35\'44\':5c(E.H.2t()){35\'4c\':35\'3U\':B l.N.3C(G,E)>0}an:B G.I>0}},cl:q(G,E,O){B!l.N.1l.1m(G,E)||O.1q(G)},7Y:q(G,E,O){C I=l.N.3C(G,E);B!l.N.1l.1m(G,E)||I>=O},6M:q(G,E,O){C I=l.N.3C(G,E);B!l.N.1l.1m(G,E)||I<=O},7R:q(G,E,O){C I=l.N.3C(G,E);B!l.N.1l.1m(G,E)||(I>=O[0]&&I<=O[1])},7L:q(G,E,O){B!l.N.1l.1m(G,E)||G>=O},6N:q(G,E,O){B!l.N.1l.1m(G,E)||G<=O},7D:q(G,E,O){B!l.N.1l.1m(G,E)||(G>=O[0]&&G<=O[1])},5t:q(G,E){B!l.N.1l.1m(G,E)||/^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$/i.1q(G)},1t:q(G,E){B!l.N.1l.1m(G,E)||/^(aA?|aC):\\/\\/[A-2v-9](\\.?[A-2v-5D„1xœ1x–][A-2v-5j\\-1x„1xœ1x–]*)*(\\/([A-2v-5D„1xœ1x–][A-2v-5j\\-\\.1x„1xœ1x–]*)?)*(\\?([A-2v-5D„1xœ1x–][A-2v-5j\\-\\.%\\+=&1x„1xœ1x–]*)?)?$/i.1q(G)},2q:q(G,E){B!l.N.1l.1m(G,E)||!/aK|8R/.1q(1Q 5m(G))},6U:q(G,E){B!l.N.1l.1m(G,E)||/^\\d{4}[/-]\\d{1,2}[/-]\\d{1,2}$/.1q(G)},6X:q(G,E){B!l.N.1l.1m(G,E)||/^\\d\\d?\\.\\d\\d?\\.\\d\\d\\d?\\d?$/.1q(G)},3m:q(G,E){B!l.N.1l.1m(G,E)||/^-?[,0-9]+(\\.\\d+)?$/.1q(G)},7g:q(G,E){B!l.N.1l.1m(G,E)||/^-?[\\.0-9]+(,\\d+)?$/.1q(G)},5b:q(G,E){B!l.N.1l.1m(G,E)||/^\\d+$/.1q(G)},6T:q(G,E,O){B G==l(""+O).1W()}},aV:q(1g,2c,21){l.N.1l[1g]=2c;l.N.3z[1g]=21}});(q(){q 2e(1g,2c){u(!3L.5B[1g]){3L.5B[1g]=2c}};2e("cQ",q(1B,27){27=27||1h;U(C i=0;i<6.I;i++)1B.3Z(27,6[i],i,6)});2e("cS",q(1B,27){27=27||1h;U(C i=0;i<6.I;i++)u(!1B.3Z(27,6[i],i,6))B 1c;B 14});2e("cT",q(1B,27){27=27||1h;U(C i=0;i<6.I;i++)u(1B.3Z(27,6[i],i,6))B 14;B 1c});2e("4E",q(1B,27){27=27||1h;C r=[];U(C i=0;i<6.I;i++)r[r.I]=1B.3Z(27,6[i],i,6);B r});2e("1z",q(1B,27){27=27||1h;C r=[];U(C i=0;i<6.I;i++)u(1B.3Z(27,6[i],i,6))r[r.I]=6[i];B r});2e("1O",q(ai,92){U(C i=92||0;i<6.I;i++)u(6[i]===ai)B i;B-1});2e("8A",q(){B 6.1z(q(E,2Z,8B){B 8B.1O(E)>=2Z})})})();(q($){C 2h,5U,3s,6O,23,91,5Q;$.fn.aX=q(F){F=$.1k({},18.d0.4b,F);u(!2h){2h=$(\'<26 Q="d1"><8C></8C><p 4F="1K"></p><p 4F="1t"></p></26>\').1D().K({2z:\'4l\',d3:"d4"}).5N(\'1K\');5U=$(\'8C\',2h);3s=$(\'p.1K\',2h);6O=$(\'p.1t\',2h)}$(6).1z(\'[@3x]\').19(q(){6.4j=F}).2P("51",ao).2P(F.S,6L);B 6};q 6L(S){u(6.4j.94)5Q=3j(1F,6.4j.94);L 1F();u(6.4j.b0)$(\'1K\').2P(\'9b\',4s);4s(S);$(6).2P(\'76\',1D)}q ao(){u(6==23||!6.3x)B;23=6;C 6k=$(6),F=6.4j;C 3x=91=6k.1v(\'3x\');6k.1v(\'3x\',\'\');u(F.cn){5U.1D();3s.2i(F.cn.3Z(6)).1F()}L u(F.95){C 9E=3x.4C(F.95);5U.2i(9E.7W()).1F();3s.6r();U(C i=0,9z;9z=9E[i];i++){u(i>0)3s.3H("<br/>");3s.3H(9z)}u(3s.2i())3s.1F();L 3s.1D()}L{5U.2i(3x);3s.1D()}C 46=(6k.1v(\'46\')||6k.1v(\'3B\'));u(F.b1&&46)6O.2i(46.1N(\'dn://\',\'\')).1F();L 6O.1D();u(F.69){2h.2L(F.69)}u(F.97&&$.1a.1C){2h.19(q(){u(6.4K.7a!=\'2n\'){C 4J=6.4K.7a;4J=4J.6R(5,4J.I-2);$(6).K({\'7a\':\'2n\',\'1z\':"ds:dt.az.dv(aB=14, dw=dy, 3B=\'"+4J+"\')"})}})}}q 1F(){5Q=1b;2h.1F();4s()}q 4s(S){u(23==1b){$(\'1K\').75(\'9b\',4s);B}C 2x=2h[0].8M;C 2F=2h[0].8P;u(S){2x=S.8L+15;2F=S.aH+15;2h.K({2x:2x+\'2s\',2F:2F+\'2s\'})}C v=aU(),h=2h[0];u(v.x+v.cx<h.8M+h.45){2x-=h.45+20;2h.K({2x:2x+\'2s\'})}u(v.y+v.cy<h.8P+h.2W){2F-=h.2W+20;2h.K({2F:2F+\'2s\'})}}q aU(){C e=11.3d||{},b=11.1K||{},w=1h;q 4G(){C v=dG;U(C i=0;i<18.I;i++){C n=18[i];u(n&&n<v)v=n}B v}B{x:w.8T||e.31||b.31||0,y:w.8U||e.2Y||b.2Y||0,cx:4G(e.62,b.62,w.8X),cy:4G(e.4n,b.4n,w.65)}}q 1D(){u(5Q)am(5Q);23=1b;2h.1D();u(6.4j.69){2h.3i(6.4j.69)}$(6).1v(\'3x\',91).75(\'76\',1D);u(6.4j.97&&$.1a.1C){2h.19(q(){$(6).K({\'1z\':\'\',7a:\'\'})})}}$.fn.aX.4b={94:ea,S:"51",b0:1c,b1:14,95:1b,69:1b,97:1c}})(l);l.1k(l.fn,{b2:q(V){C N=1Q l.N(V,6);N.1w=6.3p(":44:2o(:3S):2o(:2R)").4R(q(){N.4t=6});u(N.F.7l){6.3S(q(S){u(N.F.3o)S.3W();B N.1X()})}u(N.F.S){N.1w.2P(N.F.S,q(){N.E(6)})}B N},1y:q(t){B 6.7f(l.3Y(6.2O(),t))},5G:q(Q){B 6.1z("[@U=\'"+Q+"\']")}});l.1k(l.2p[":"],{b8:"!l.39(a.G)",ba:"!!l.39(a.G)"});l.N=q(V,1X){6.F=l.1k({},l.N.4b,V);6.5I=1X[0];6.4g=6.F.5y;6.7N=6.4g.I&&6.4g||1X;6.2C=6.F.7k.2e(6.F.5y);6.2R()};l.1k(l.N,{4b:{3z:{},3f:"1n",80:14,7k:l([]),5y:l([]),7l:14},bc:q(F){l.1k(l.N.4b,F)},3z:{1m:"bd bf 3a 1m.",6M:"1H 1I a G 9g bi bk {0} 5r.",7Y:"1H 1I a G bm at bo {0} 5r.",7R:"1H 1I a G 7p {0} 7C {1} 5r bq.",5t:"1H 1I a 2U 5t bs.",1t:"1H 1I a 2U bu.",2q:"1H 1I a 2U 2q.",6U:"1H 1I a 2U 2q (bv).",6X:"7t 7r 7v 5o bx¼bz bB 5o.",3m:"1H 1I a 2U 3m.",7g:"7t 7r 7v bJ bL 5o.",5b:"1H 1I 9o 5b",6T:"1H 1I 7U bN G bP.",7D:"1H 1I a G 7p {0} 7C {1}.",6N:"1H 1I a G bS 7I 4M 7J 3M {0}.",7L:"1H 1I a G bW 7I 4M 7J 3M {0}."},5B:{1X:q(){6.5d();U(C i=0,E;E=6.1w[i++];){6.4e(E)}B 6.2U()},E:q(E){6.72(E);6.4e(E);6.3A()},3A:q(2T){u(2T)l.1k(6.2B,2T);6.F.3A?6.F.3A(6.2B,6):6.86()},5e:q(){u(l.fn.5e)l(6.5I).5e();6.5d();6.5C();6.1w.3i(6.F.3f)},3I:q(7m){B l(7m)[0]},2T:q(){B l("8h."+6.F.3f,6.7N)},2R:q(E){6.2B={};6.1S=$([]);6.2r=$([])},5d:q(){6.2R();6.2r=6.2T().1y(6.2C);6.1S.1y(6.2C)},72:q(E){6.2R();6.2r=6.2T().5G(6.48(6.3I(E)))},4e:q(E){E=6.3I(E);l(E).3i(6.F.3f);C 2a=6.2a(E);U(C i=0,1P;1P=2a[i++];){3G{C 2b=l.N.1l[1P.2c](l.39(E.G),E,1P.4W);u(2b===-1)34;u(!2b){l(E).2L(6.F.3f);6.7V(1P,E);34}}3F(e){6.F.3o&&1h.2V&&2V.1n("c5 c6 c8 c9 E "+E.Q+", 4e 7U \'"+1P.2c+"\' 2c");9F e}}},21:q(Q,1P){C m=6.F.3z[Q];B m&&(m.22==2I?m:m[1P.2c])},7V:q(1P,E){C Q=6.48(E),O=1P.4W;6.2B[Q]=(E.3x||6.21(Q,1P)||l.N.3z[1P.2c]||"<7X>cc: cd 21 ce U "+Q+"</7X>").1N("{0}",(O.22==3L?O[0]:O)||"").1N("{1}",O[1]||"")},2U:q(){u(6.82()){6.3A();B 1c}L{6.5C();u(6.F.81){6.F.81(6.5I);B 1c}B 14}},82:q(){C 4U=0;l.19(6.2B,q(){4U++});B 4U},5C:q(){6.3c("8f")},3c:q(5x){C 3k=6;q 4p(){B 3k["3M"+5x]}u(6.F.4x){4p().1y(4p().6t(6.F.4x))}4p()[5x.2t()]();B 6},86:q(){C 2D=14;U(C 4v 29 6.2B){u(2D&&6.F.80){u(6.4t&&6.2B[6.4t.Q])6.4t.4R();L{3G{C E=l("#"+4v);u(E.I)E[0].4R()}3F(e){6.F.3o&&1h.2V&&2V.1n(e)}}2D=1c}6.8g(4v,6.2B[4v])}6.2r=6.2r.2o(6.1S);6.3c("8f").3c("cw")},8g:q(Q,21){C 1n=6.2T().5G(Q);u(1n.I){u(1n.1v("8k")){1n.2i(21)}}L{1n=l("<8h>").1v({"U":Q,8k:14}).2L(6.F.3f).2i(21);u(6.F.4x){1n=1n.1D().1F().4i("<"+6.F.4x+">").1s()}u(!6.4g.3H(1n).I)6.F.6A?6.F.6A(1n,l("#"+Q)):1n.8n("#"+Q)}6.1S.1y(1n)},2a:q(E){u(!6.R(E))B[];C 2a=[];l.19(6.R(E),q(2S,G){2a[2a.I]={2c:2S,4W:G}});B 2a},R:q(E){B 6.F.2a?6.F.2a[6.48(E)]:6.F.6D?l(E).R()[6.F.6D]:l(E).R()},48:q(E){C Q=(/3U|4c/i.1q(E.H))?E.1g:E.Q;u(!Q){C 4X=E.1X.Q,4Y=/[^a-a7-2v-9\\-5K]/g;Q=E.Q=(4X?4X.1N(4Y,""):"")+E.1g.1N(4Y,"")}B Q}},3C:q(G,E){5c(E.1J.2t()){35\'3D\':B l("2k:3J",E).I;35\'44\':u(/3U|4c/i.1q(E.H))B l(E.1X||11).3p(\'[@1g="\'+E.1g+\'"]:4O\').I}B G.I},8i:q(O,E){B 6.5v[T O]?6.5v[T O](O,E):14},5v:{"6c":q(O,E){B O},"1V":q(O,E){B!!l(O,E.1X).I},"q":q(O,E){B O(E)}},1l:{1m:q(G,E,O){u(!l.N.8i(O,E))B-1;5c(E.1J.2t()){35\'3D\':C V=l("2k:3J",E);B V.I>0&&(E.H=="3D-ag"||V[0].G.I>0);35\'44\':5c(E.H.2t()){35\'4c\':35\'3U\':B l.N.3C(G,E)>0}an:B G.I>0}},cl:q(G,E,O){B!l.N.1l.1m(G,E)||O.1q(G)},7Y:q(G,E,O){C I=l.N.3C(G,E);B!l.N.1l.1m(G,E)||I>=O},6M:q(G,E,O){C I=l.N.3C(G,E);B!l.N.1l.1m(G,E)||I<=O},7R:q(G,E,O){C I=l.N.3C(G,E);B!l.N.1l.1m(G,E)||(I>=O[0]&&I<=O[1])},7L:q(G,E,O){B!l.N.1l.1m(G,E)||G>=O},6N:q(G,E,O){B!l.N.1l.1m(G,E)||G<=O},7D:q(G,E,O){B!l.N.1l.1m(G,E)||(G>=O[0]&&G<=O[1])},5t:q(G,E){B!l.N.1l.1m(G,E)||/^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$/i.1q(G)},1t:q(G,E){B!l.N.1l.1m(G,E)||/^(aA?|aC):\\/\\/[A-2v-9](\\.?[A-2v-5D„1xœ1x–][A-2v-5j\\-1x„1xœ1x–]*)*(\\/([A-2v-5D„1xœ1x–][A-2v-5j\\-\\.1x„1xœ1x–]*)?)*(\\?([A-2v-5D„1xœ1x–][A-2v-5j\\-\\.%\\+=&1x„1xœ1x–]*)?)?$/i.1q(G)},2q:q(G,E){B!l.N.1l.1m(G,E)||!/aK|8R/.1q(1Q 5m(G))},6U:q(G,E){B!l.N.1l.1m(G,E)||/^\\d{4}[/-]\\d{1,2}[/-]\\d{1,2}$/.1q(G)},6X:q(G,E){B!l.N.1l.1m(G,E)||/^\\d\\d?\\.\\d\\d?\\.\\d\\d\\d?\\d?$/.1q(G)},3m:q(G,E){B!l.N.1l.1m(G,E)||/^-?[,0-9]+(\\.\\d+)?$/.1q(G)},7g:q(G,E){B!l.N.1l.1m(G,E)||/^-?[\\.0-9]+(,\\d+)?$/.1q(G)},5b:q(G,E){B!l.N.1l.1m(G,E)||/^\\d+$/.1q(G)},6T:q(G,E,O){B G==l(""+O).1W()}},aV:q(1g,2c,21){l.N.1l[1g]=2c;l.N.3z[1g]=21}});(q($){$.fn.2g=q(V){B 6.19(q(){$.2g(6,V)})};$.2g=q(1R,V){C F={\'5k\':1b,\'2g\':\'6j\',\'32\':ec,\'7z\':\'9r\',\'1r\':\'b3\',\'4F\':\'2g\',\'1i\':\'3X\'};u(V)$.1k(F,V);u(F.5k===1b)C 1w=$(1R).5k();L C 1w=$(1R).5k(F.5k);u(1w.I>1){$(1R).K(\'2z\',\'7i\');$(1R).K(\'1i\',F["1i"]);$(1R).2L(F["4F"]);U(C i=0;i<1w.I;i++){$(1w[i]).K(\'z-2Z\',2I(1w.I-i));$(1w[i]).K(\'2z\',\'4l\');$(1w[i]).1D()};u(F["2g"]=="6j"){3j(q(){$.2g.6J(1w,F,1,0)},F.32);$(1w[0]).1F()}L u(F["2g"]=="5w"){3j(q(){do{23=4k.bV(4k.5w()*1w.I)}2M(23==0)$.2g.6J(1w,F,23,0)},F.32);$(1w[0]).1F()}L 7K(\'l: 2g: 9u "2g" 9x 9B be "6j" 4M "5w"\')}};$.2g.6J=q(1w,F,23,2u){u(F["7z"]==\'bQ\'){$(1w[2u]).bA(F.1r,$(1w[23]).bD(F.1r))}L u(F["7z"]==\'9r\'){$(1w[2u]).bH(F.1r);$(1w[23]).bM(F.1r)}L 7K(\'l: 2g: 9u "7z" 9x 9B be "bQ" 4M "9r"\');u(F["2g"]=="6j"){u((23+1)<1w.I){23=23+1;2u=23-1}L{23=0;2u=1w.I-1}}L u(F["2g"]=="5w"){2u=23;2M(23==2u)23=4k.bV(4k.5w()*1w.I)}L 7K(\'l: 2g: 9u "2g" 9x 9B be "6j" 4M "5w"\');3j((q(){$.2g.6J(1w,F,23,2u)}),F.32)}})(l);(q($){$.3r=q(){6.42={};B};$.3r.5B={5V:q(){C P={"Q":1b,"4S":4w,"6H":1c,"6E":1c,"17":1b,"36":q(){},"28":[]};q 5L(fn){B(!!fn&&T fn!="1V"&&T fn[0]=="1e"&&4u("q","i").1q(fn+""))};C i=0;C 9N=1c;u(T 18[i]=="40"&&18.I>1){9N=14;i++}u(T 18[i]=="40"){U(C 2k 29 18[i])u(T P[2k]!="1e")P[2k]=18[i][2k];i++}u(T 18[i]=="3m"||(T 18[i]=="1V"&&18[i].2y(4u("^[0-9]+[cq]$"))))P["4S"]=18[i++];u(T 18[i]=="6c")P["6H"]=18[i++];u(T 18[i]=="6c")P["6E"]=18[i++];u(T 18[i]=="40"&&T 18[i+1]=="1V"&&5L(18[i][18[i+1]])){P["17"]=18[i++];P["36"]=18[i++]}L u(T 18[i]!="1e"&&(5L(18[i])||T 18[i]=="1V"))P["36"]=18[i++];2M(T 18[i]!="1e")P["28"].1y(18[i++]);u(9N){u(T 18[1]=="40"){U(C 2k 29 18[0])u(T P[2k]!="1e"&&T 18[1][2k]=="1e")P[2k]=18[0][2k]}L{U(C 2k 29 18[0])u(T P[2k]!="1e")P[2k]=18[0][2k]}i++}P["71"]=6;P["89"]=1b;C 2y=2I(P["4S"]).2y(4u("^([0-9]+)([cq])$"));u(2y&&2y[0]!="1e"&&2y[1]!="1e")P["4S"]=2I(1d(2y[1])*{s:4w,m:4w*60,h:4w*60*60,d:4w*60*60*24,w:4w*60*60*24*7}[2y[2]]);u(P["Q"]==1b)P["Q"]=(2I(P["6H"])+":"+2I(P["6E"])+":"+2I(P["4S"])+":"+2I(P["17"])+":"+2I(P["36"])+":"+2I(P["28"]));u(P["6E"])u(T 6.42[P["Q"]]!="1e")B 6.42[P["Q"]];u(!5L(P["36"])){u(P["17"]!=1b&&T P["17"]=="40"&&T P["36"]=="1V"&&5L(P["17"][P["36"]]))P["36"]=P["17"][P["36"]];L P["36"]=6G("q () { "+P["36"]+" }")}P["89"]=6.6I(P);6.42[P["Q"]]=P;B P},8F:q(P){u(T P=="1V")P=6.42[P];P["89"]=6.6I(P);B P},6I:q(P){C aS=q(){C 17=(P["17"]!=1b?P["17"]:P);(P["36"]).1A(17,P["28"]);u(T(P["71"]).42[P["Q"]]!="1e"&&P["6H"])(P["71"]).6I(P);L 66(P["71"]).42[P["Q"]]};B 3j(aS,P["4S"])},8J:q(P){u(T P=="1V")P=6.42[P];u(T P=="40"){am(P["89"]);66 6.42[P["Q"]]}}};$.1k({3r$:1Q $.3r(),5V:q(){B $.3r$.5V.1A($.3r$,18)},8F:q(){B $.3r$.8F.1A($.3r$,18)},8J:q(){B $.3r$.8J.1A($.3r$,18)}});$.fn.1k({5V:q(){C a=[{}];U(C i=0;i<18.I;i++)a.1y(18[i]);B 6.19(q(){a[0]={"Q":6,"17":6};B $.5V.1A($,a)})}})})(l);(q($){$.1k({5u$:1b,3o:q(aO){C aR=($.5u$==14?14:1c);$.5u$=(aO?14:1c);B aR},6b:q(21){u($.5u$==14)2V.3o(21)}});$.fn.1k({6b:q(21){u($.5u$==14){B 6.19(q(){u(T 21!=="1e")$.6b(21);$.6b(6)})}}});$(11).37(q(){C 7j=$("2i").1v("3o");u(7j=="14"||7j=="1c")$.3o(7j=="14"?14:1c)});$(11).37(q(){u(T 1h.2V==="1e"){q cz(17){C 1M=1b;u(T 17==="1e")1M="[1e]";L u(T 17==="6c")1M=(17?"14":"1c");L u(T 17==="3m")1M=""+17;L u(T 17==="1V")1M=17;L u(T 17==="q")1M=17;L u(T 17==="40"){u(T 17.33!=="1e"){u(17.33==1){1M=\'&9n;\';1M+=17.1J.2t();U(C i=0;i<17.9s.I;i++)1M+=\' \'+17.9s[i].1J.2t()+\'="\'+17.9s[i].6n+\'"\';1M+=\'&9t;\'}L u(17.33==2)1M=17.1J+\'="\'+17.6n;L u(17.33==3)1M=17.6n}L u(T 17.cg!=="1e")1M=17.cg();L u(T 17.5F!=="1e")1M=17.5F()}u(1M==1b)1M="[fm]";B 1M};$(11).37(q(){$("1K").3H(\'<26 Q="4H"><4B></4B></26>\');$("#4H").K("1G","2n").K("cX","d8").K("dh","#dl").K("du","#dz").K("6w","6V 5g 6V 5g").K("64","5T b5 #dI").K("77","5T 5T 5T 5T");$("#4H 4B").K("77","5g 5g 5g 5g").K("98","er")});C 90=["6b","3o","eI","eN","1n","eY","6l","f5","fd","fi","4S","fk","4U","cD","cH","cU"];1h.2V={};U(C i=0;i<90.I;i++){1h.2V[90[i]]=q(a8){$(\'#4H\').K("1G",$.5u$==14?"41":"2n");$(\'#4H 4B\').3H(\'<1Y>\'+cz(a8)+\'</1Y>\').K;$("#4H 4B 1Y").K("e7","52 b5 #eQ").K("6w","52 6V 52 6V")}}1h.2V["4H"]=14}})})(l);',62,954,'||||||this|||||||||||||||jQuery|||||function||||if|||||||return|var||element|settings|value|type|length|elem|css|else||validator|param|ctx|id|data|event|typeof|for|options||||||document|||true||prop|obj|arguments|each|browser|null|false|parseInt|undefined|ret|name|window|height|callback|extend|methods|required|error|parentNode|xml|test|speed|parent|url|cur|attr|elements|Ã|push|filter|apply|handler|msie|hide|style|show|display|Please|enter|nodeName|body|opacity|text|replace|indexOf|rule|new|container|toShow|tabs|status|string|val|form|li|hash||message|constructor|current||firstChild|div|scope|args|in|rules|result|method|width|add|trigger|alternation|helper|html|className|option|events|nav|none|not|expr|date|toHide|px|toLowerCase|last|Z0|expires|left|match|position|global|errorList|containers|first|hidden|top|isFunction|opt|String|context|arg|addClass|while|initial|get|bind|num|reset|key|errors|valid|console|offsetHeight|queue|scrollTop|index|animate|scrollLeft|timeout|nodeType|break|case|func|ready|safari|trim|is|old|toggle|documentElement|easing|errorClass|end|target|removeClass|setTimeout|self|table|number|elems|debug|find|disabled|scheduler|tBody|visible|params|ifModified|tbody|title|bookmarkable|messages|showErrors|src|getLength|select|complete|catch|try|append|clean|selected|opera|Array|to|nth|orig|done|span|innerHTML|submit|duration|radio|tab|preventDefault|auto|merge|call|object|block|bucket|pushStack|input|offsetWidth|href|nextSibling|findId|click|tb|defaults|checkbox|mozilla|check|cookie|labelContainer|selectedClass|wrap|tSettings|Math|absolute|script|clientHeight|remove|which|borderTopWidth|borderLeftWidth|update|lastActive|RegExp|elementID|1000|wrapper|overflow|load|clicked|ol|split|remote|map|class|min|jQueryDebug|firstNum|image|currentStyle|oid|or|size|checked|fix|returnValue|focus|time|encodeURIComponent|count|showAnim|parameters|formId|idcleanup|now||mouseover|1px|grep|timers|curAnim|boxModel|stopPropagation|oldblock|exec|guid|digits|switch|prepareForm|resetForm|custom|0px|makeArray|res|9_|children|location|Date|tmp|ein|success|re|characters|sibling|email|_debug|dependTypes|random|that|errorLabelContainer|cssFloat|insertBefore|prototype|hideErrors|9Ã|XMLHttpRequest|toString|forId|hideAnim|currentForm|onShow|_|_isfn|ajaxHistory|appendTo|Number|childNodes|tID|op|multiFilter|4px|tTitle|schedule|fx|handlers|on|originalEvent||removeChild|clientWidth|domain|border|innerHeight|delete|readyList|curCSS|extraClass|re2|log|boolean|parPos|ownerDocument|onreadystatechange|has|path|substr|sequence|source|dir|static|nodeValue|scroll|st|sl|empty|containerClass|parents|setInterval|domManip|padding|onClick|disabledClass|onHide|errorPlacement|locked|toUpperCase|meta|protect|trueClick|eval|repeat|_schedule|_next|styleFloat|handle|maxLength|maxValue|tUrl|inArray|absparent|substring|foundToken|equalTo|dateISO|10px|tr|dateDE|isReady|doc|child|_scheduler|prepareElement|Function|mergeNum|unbind|mouseout|margin|diff|parseFloat|backgroundImage|step|oldDisplay|defaultView|getTime|setArray|numberDE|ajax|relative|req|errorContainer|onsubmit|selector|modRes|token|between|handleError|geben|tag|Bitte|async|Sie|ival|lastModified|oWidth|animation|responseText|jquery|and|rangeValue|getAttribute|cloneNode|button|tabEvents|than|equal|alert|minValue|readyState|errorContext|secure|oHeight|max|rangeLength|setRequestHeader|tagName|the|formatAndAdd|shift|strong|minLength|expression|focusInvalid|submitHandler|countErrors|navClass|ajaxSettings|msie6|defaultShowErrors|minHeight|ul|_handle|visibility|cachedWidth|currentWidth|cachedFontSize|currentFontSize|Hide|showError|label|depend|toShowId|generated|hideClass|showSpeed|insertAfter|remoteUrls|switchTab|loadingClass|blur|disableTab|pos|deep|reverse|appendChild|clone|startTime|swap|unique|array|h3|isXMLDoc|second|reschedule|fn2|pass|classFilter|cancel|float|pageX|offsetLeft|triggered|slice|offsetTop|lastToggle|NaN|handleHover|pageXOffset|pageYOffset|getElementById|safariTimer|innerWidth|unload|els|names|oldTitle|offset|from|delay|showBody|lastNum|fixPNG|paddingRight|matched|GET|mousemove|getComputedStyle|00|_resort|chars|no|dataType|requestDone|active|file|Modified|getResponseHeader|lt|only|evalScripts|globalEval|fade|attributes|gt|parameter|join|cookies|must|clearInterval|part|cookieValue|either|isTimeout|relparent|parts|throw|paddingLeft|paddingTop|returnObject|bgiframe|createElement|hasSelectedClass|unFocus|override|inv|jq|sort|heights|font|watchFontSize|_setAutoHeight|cachedHeight|currentHeight|fxSpeed|fxSlide|fxFade|fxShow|fxHide|clientX|hideSpeed|scrollTo|scrollX|scrollY|zA|msg|triggerTab|enableTab|prevObject|100|exclude|force|getPropertyValue|multiple|newProp|subject|alpha|zoom||clearTimeout|default|save|webkit|prepend|before|after||removeAttr|previousSibling|contains|password|tl|Microsoft|https|enabled|ftp|parse|_prefix|even|odd|pageY|unshift|srcElement|Invalid|DOMContentLoaded|__ie_init|one|onoff|_toggle|state|old_value|trampoline|swing|viewport|addMethod|dequeue|Tooltip|timer|oldOverflow|track|showURL|validate|normal|getScript|solid|POST|processData|blank|ajaxStart|filled|contentType|setDefaults|This||field|beforeSend|ajaxSend|longer|notmodified|then||of|getElementsByTagName|least|ajaxStop|long||address||URL|ISO|ajaxError|gÃ|httpSuccess|ltiges|slideUp|Datum|200|slideDown|httpNotModified|Last|304|fadeOut|xmlRes|eine|httpData|Nummer|fadeIn|same|json|again|slide|execScript|less|ajaxComplete|ajaxSuccess|floor|greater|365|setTime|toGMTString|_height|_width|borderBottomWidth|paddingBottom|borderRightWidth|exception|occured|offsetParent|when|checking|marginLeft|marginTop|Warning|No|defined|tabEvent|toJSONString|iframe|hashPrefix|remoteCount|tabStruct|regex|fxAutoHeight|bodyHandler|behaviour|watch|smhdw|fxShowSpeed|fxHideSpeed||action|tempForm|Show|||object2text|siblings|Loading|8230|trace|There|such|initialize|profile|RSE|createTextNode|FORM|weight|line|Bottom|Right|Left|forEach|right|every|some|profileEnd|thead|tfoot|fontFamily|td|th|callee|tooltip|readOnly|zIndex|3000|getAttributeNode|setAttribute|ig|monospace|concat|navigator|userAgent|compatible|compatMode|next|prev|prependTo|backgroundColor|removeAttribute|toggleClass|lastChild|ffffff|textarea|http||u0128|uFFFF|continue|progid|DXImageTransform|color|AlphaImageLoader|sizingMethod|htmlFor|crop|000000|readonly|clientY|cancelBubble|fromElement|toElement|relatedTarget|Infinity|removeEventListener|666699|mousedown|mouseup|change|keydown|keypress|keyup|addEventListener|write|scr|ipt|dblclick|resize|defer|loaded|slideToggle|fadeTo|Object|slow|600|hover|fast|400|linear|cos|borderBottom|PI|10000|250|loadIfModified|2000|serialize|textContent|ActiveXObject|XMLHTTP|getIfModified|getJSON|post|ajaxTimeout||ajaxSetup|application|www|urlencoded||20px|open|Content|Type|If|Since|Thu|01|Jan|1970|GMT|Requested|With|overrideMimeType|Connection|close|abort|info|send|protocol|300|content|warn|Width|responseXML|cccccc|center|horizontal|vertical|YMWDhms|YMDWhms|noConflict|invalid|assert|decodeURIComponent|scrollHeight|scrollWidth|outerHeight|outerWidth|Top|dirxml|inline|bgIframe|javascript|frameborder|tabindex|Alpha|Opacity|group|CSS1Compat|loading|500|removeExpression|groupEnd|setExpression|timeEnd||unknown|'.split('|'),0,{}))
  +eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('B(U 1e.q=="1c"){1e.1c=1e.1c;D q=u(a,c){B(1e==l)C 1P q(a,c);a=a||W;B(q.2D(a))C 1P q(W)[q.L.34?"34":"4w"](a);B(U a=="1T"){D m=/^[^<]*(<(.|\\s)+>)[^>]*$/.5u(a);B(m)a=q.3t([m[1]]);N C 1P q(c).3e(a)}C l.7a(a.1Z==3w&&a||(a.7v||a.I&&a!=1e&&!a.31&&a[0]!=1c&&a[0].31)&&q.5W(a)||[a])};B(U $!="1c")q.5I$=$;D $=q;q.L=q.5F={7v:"1.1.2",4y:u(){C l.I},I:0,2O:u(2R){C 2R==1c?q.5W(l):l[2R]},4E:u(a){D 1d=q(a);1d.aa=l;C 1d},7a:u(a){l.I=0;[].1w.1C(l,a);C l},16:u(L,25){C q.16(l,L,25)},2X:u(14){D 8o=-1;l.16(u(i){B(l==14)8o=i});C 8o},1s:u(2M,G,H){D 14=2M;B(2M.1Z==2G)B(G==1c)C l.I&&q[H||"1s"](l[0],2M)||1c;N{14={};14[2M]=G}C l.16(u(2X){Y(D 12 27 14)q.1s(H?l.1E:l,12,q.12(l,14[12],H,2X,12))})},K:u(2M,G){C l.1s(2M,G,"65")},1L:u(e){B(U e=="1T")C l.5P().3K(W.cJ(e));D t="";q.16(e||l,u(){q.16(l.5U,u(){B(l.31!=8)t+=l.31!=1?l.6l:q.L.1L([l])})});C t},4t:u(){D a,25=17;C l.16(u(){B(!a)a=q.3t(25,l.6d);D b=a[0].6F(11);l.1t.5x(b,l);2J(b.28)b=b.28;b.9B(l)})},3K:u(){C l.6o(17,11,1,u(a){l.9B(a)})},ar:u(){C l.6o(17,11,-1,u(a){l.5x(a,l.28)})},as:u(){C l.6o(17,1a,1,u(a){l.1t.5x(a,l)})},au:u(){C l.6o(17,1a,-1,u(a){l.1t.5x(a,l.4h)})},3f:u(){C l.aa||q([])},3e:u(t){C l.4E(q.8Y(q.4J(l,u(a){C q.3e(t,a)})),t)},8q:u(8p){C l.4E(q.4J(l,u(a){D a=a.6F(8p!=1c?8p:11);a.$2e=19;C a}))},1x:u(t){C l.4E(q.2D(t)&&q.51(l,u(el,2X){C t.1C(el,[2X])})||q.6c(t,l))},2l:u(t){C l.4E(t.1Z==2G&&q.6c(t,l,11)||q.51(l,u(a){C(t.1Z==3w||t.7v)?q.6O(a,t)<0:a!=t}))},2g:u(t){C l.4E(q.3Z(l.2O(),t.1Z==2G?q(t).2O():t.I!=1c&&(!t.1H||t.1H=="cK")?t:[t]))},2Z:u(2r){C 2r?q.6c(2r,l).I>0:1a},1R:u(1R){C 1R==1c?(l.I?l[0].G:19):l.1s("G",1R)},2m:u(1R){C 1R==1c?(l.I?l[0].45:19):l.5P().3K(1R)},6o:u(25,3h,6g,L){D 8q=l.I>1,a;C l.16(u(){B(!a){a=q.3t(25,l.6d);B(6g<0)a.cL()}D 14=l;B(3h&&q.1H(l,"3h")&&q.1H(a[0],"6I"))14=l.az("3u")[0]||l.9B(W.9I("3u"));q.16(a,u(){L.1C(14,[8q?l.6F(11):l])})})}};q.1i=q.L.1i=u(){D 3i=17[0],a=1;B(17.I==1){3i=l;a=0}D 12;2J(12=17[a++])Y(D i 27 12)3i[i]=12[i];C 3i};q.1i({eY:u(){B(q.5I$)$=q.5I$;C q},2D:u(L){C!!L&&U L!="1T"&&!L.1H&&L.1Z!=3w&&/u/i.1j(L+"")},8x:u(J){C J.7J&&J.6d&&!J.6d.1K},1H:u(J,1f){C J.1H&&J.1H.6J()==1f.6J()},16:u(14,L,25){B(14.I==1c)Y(D i 27 14)L.1C(14[i],25||[i,14[i]]);N Y(D i=0,4B=14.I;i<4B;i++)B(L.1C(14[i],25||[i,14[i]])===1a)30;C 14},12:u(J,G,H,2X,12){B(q.2D(G))G=G.3S(J,[2X]);D cA=/z-?2X|9P-?cM|1J|an|fc-?1g/i;C G&&G.1Z==5K&&H=="65"&&!cA.1j(12)?G+"2q":G},2k:{2g:u(J,c){q.16(c.4O(/\\s+/),u(i,1r){B(!q.2k.6e(J.2k,1r))J.2k+=(J.2k?" ":"")+1r})},49:u(J,c){J.2k=c?q.51(J.2k.4O(/\\s+/),u(1r){C!q.2k.6e(c,1r)}).9u(" "):""},6e:u(t,c){C q.6O(c,(t.2k||t).5B().4O(/\\s+/))>-1}},8t:u(e,o,f){Y(D i 27 o){e.1E["36"+i]=e.1E[i];e.1E[i]=o[i]}f.1C(e,[]);Y(D i 27 o)e.1E[i]=e.1E["36"+i]},K:u(e,p){B(p=="1g"||p=="2c"){D 36={},7h,6H,d=["cP","cQ","eS","cS"];q.16(d,u(){36["6u"+l]=0;36["62"+l+"cT"]=0});q.8t(e,36,u(){B(q(e).2Z(\':3p\')){7h=e.2T;6H=e.3U}N{e=q(e.6F(11)).3e(":3P").av("4M").3f().K({86:"2A",1Y:"43",1G:"44",cU:"0",2u:"0"}).6a(e.1t)[0];D 8s=q.K(e.1t,"1Y")||"54";B(8s=="54")e.1t.1E.1Y="5y";7h=e.48;6H=e.61;B(8s=="54")e.1t.1E.1Y="54";e.1t.63(e)}});C p=="1g"?7h:6H}C q.65(e,p)},65:u(J,12,b2){D 1d;B(12=="1J"&&q.18.1y){1d=q.1s(J.1E,"1J");C 1d==""?"1":1d}B(12=="8v"||12=="4V")12=q.18.1y?"72":"4V";B(!b2&&J.1E[12])1d=J.1E[12];N B(W.80&&W.80.8S){B(12=="4V"||12=="72")12="8v";12=12.1N(/([A-Z])/g,"-$1").2n();D 1r=W.80.8S(J,19);B(1r)1d=1r.af(12);N B(12=="1G")1d="2x";N q.8t(J,{1G:"44"},u(){D c=W.80.8S(l,"");1d=c&&c.af(12)||""})}N B(J.6n){D ag=12.1N(/\\-(\\w)/g,u(m,c){C c.6J()});1d=J.6n[12]||J.6n[ag]}C 1d},3t:u(a,6T){D r=[];6T=6T||W;q.16(a,u(i,2E){B(!2E)C;B(2E.1Z==5K)2E=2E.5B();B(U 2E=="1T"){D s=q.3d(2E),23=6T.9I("23"),4n=[];D 4t=!s.1M("<2I")&&[1,"<3x>","</3x>"]||(!s.1M("<dN")||!s.1M("<3u")||!s.1M("<cX"))&&[1,"<3h>","</3h>"]||!s.1M("<6I")&&[2,"<3h><3u>","</3u></3h>"]||(!s.1M("<dy")||!s.1M("<cY"))&&[3,"<3h><3u><6I>","</6I></3u></3h>"]||[0,"",""];23.45=4t[1]+2E+4t[2];2J(4t[0]--)23=23.28;B(q.18.1y){B(!s.1M("<3h")&&s.1M("<3u")<0)4n=23.28&&23.28.5U;N B(4t[1]=="<3h>"&&s.1M("<3u")<0)4n=23.5U;Y(D n=4n.I-1;n>=0;--n)B(q.1H(4n[n],"3u")&&!4n[n].5U.I)4n[n].1t.63(4n[n])}2E=q.5W(23.5U)}B(2E.I===0&&!q.1H(2E,"1S"))C;B(2E[0]==1c||q.1H(2E,"1S"))r.1w(2E);N r=q.3Z(r,2E)});C r},1s:u(J,1f,G){D 4R=q.8x(J)?{}:{"Y":"d3","4L":"2k","8v":q.18.1y?"72":"4V",4V:q.18.1y?"72":"4V",45:"45",2k:"2k",G:"G",3o:"3o",4M:"4M",d4:"d5",3D:"3D"};B(1f=="1J"&&q.18.1y){B(G!=1c){J.an=1;J.1x=(J.1x||"").1N(/ah\\([^)]*\\)/,"")+(76(G).5B()=="8K"?"":"ah(1J="+G*ai+")")}C J.1x?(76(J.1x.2F(/1J=([^)]*)/)[1])/ai).5B():""}B(4R[1f]){B(G!=1c)J[4R[1f]]=G;C J[4R[1f]]}N B(G==1c&&q.18.1y&&q.1H(J,"1S")&&(1f=="cs"||1f=="2b"))C J.d7(1f).6l;N B(J.7J){B(G!=1c)J.d8(1f,G);B(q.18.1y&&/3V|3F/.1j(1f)&&!q.8x(J))C J.7g(1f,2);C J.7g(1f)}N{1f=1f.1N(/-([a-z])/d9,u(z,b){C b.6J()});B(G!=1c)J[1f]=G;C J[1f]}},3d:u(t){C t.1N(/^\\s+|\\s+$/g,"")},5W:u(a){D r=[];B(U a!="8u")Y(D i=0,al=a.I;i<al;i++)r.1w(a[i]);N r=a.8J(0);C r},6O:u(b,a){Y(D i=0,al=a.I;i<al;i++)B(a[i]==b)C i;C-1},3Z:u(2t,9L){Y(D i=0;9L[i];i++)2t.1w(9L[i]);C 2t},8Y:u(2t){D r=[],2R=q.7Z++;Y(D i=0,ao=2t.I;i<ao;i++)B(2t[i].7Z!=2R){2t[i].7Z=2R;r.1w(2t[i])}C r},7Z:0,51:u(3m,L,8y){B(U L=="1T")L=1P 71("a","i","C "+L);D 2a=[];Y(D i=0,el=3m.I;i<el;i++)B(!8y&&L(3m[i],i)||8y&&!L(3m[i],i))2a.1w(3m[i]);C 2a},4J:u(3m,L){B(U L=="1T")L=1P 71("a","C "+L);D 2a=[];Y(D i=0,el=3m.I;i<el;i++){D 1R=L(3m[i],i);B(1R!==19&&1R!=1c){B(1R.1Z!=3w)1R=[1R];2a=2a.da(1R)}}C 2a}});1P u(){D b=8Z.90.2n();q.18={3a:/aq/.1j(b),3G:/3G/.1j(b),1y:/1y/.1j(b)&&!/3G/.1j(b),4m:/4m/.1j(b)&&!/(db|aq)/.1j(b)};q.5t=!q.18.1y||W.dc=="fb"};q.16({1q:"a.1t",3H:"q.3H(a)",dd:"q.3N(a,2,\'4h\')",de:"q.3N(a,2,\'c1\')",cz:"q.5h(a.1t.28,a)",5i:"q.5h(a.28)"},u(i,n){q.L[i]=u(a){D 1d=q.4J(l,n);B(a&&U a=="1T")1d=q.6c(a,1d);C l.4E(1d)}});q.16({6a:"3K",df:"ar",5x:"as",8i:"au"},u(i,n){q.L[i]=u(){D a=17;C l.16(u(){Y(D j=0,al=a.I;j<al;j++)q(a[j])[n](l)})}});q.16({av:u(2M){q.1s(l,2M,"");l.dh(2M)},2K:u(c){q.2k.2g(l,c)},3j:u(c){q.2k.49(l,c)},di:u(c){q.2k[q.2k.6e(l,c)?"49":"2g"](l,c)},49:u(a){B(!a||q.1x(a,[l]).r.I)l.1t.63(l)},5P:u(){2J(l.28)l.63(l.28)}},u(i,n){q.L[i]=u(){C l.16(n,17)}});q.16(["eq","9m","9t","aw"],u(i,n){q.L[n]=u(2R,L){C l.1x(":"+n+"("+2R+")",L)}});q.16(["1g","2c"],u(i,n){q.L[n]=u(h){C h==1c?(l.I?q.K(l[0],n):19):l.K(n,h.1Z==2G?h:h+"2q")}});q.1i({2r:{"":"m[2]==\'*\'||q.1H(a,m[2])","#":"a.7g(\'S\')==m[2]",":":{9m:"i<m[3]-0",9t:"i>m[3]-0",3N:"m[3]-0==i",eq:"m[3]-0==i",2t:"i==0",2z:"i==r.I-1",aF:"i%2==0",aG:"i%2","3N-7K":"q.3N(a.1t.28,m[3],\'4h\',a)==a","2t-7K":"q.3N(a.1t.28,1,\'4h\')==a","2z-7K":"q.3N(a.1t.dj,1,\'c1\')==a","9n-7K":"q.5h(a.1t.28).I==1",1q:"a.28",5P:"!a.28",aw:"q.L.1L.1C([a]).1M(m[3])>=0",3p:\'a.H!="2A"&&q.K(a,"1G")!="2x"&&q.K(a,"86")!="2A"\',2A:\'a.H=="2A"||q.K(a,"1G")=="2x"||q.K(a,"86")=="2A"\',bY:"!a.3o",3o:"a.3o",4M:"a.4M",3D:"a.3D||q.1s(a,\'3D\')",1L:"a.H==\'1L\'",3P:"a.H==\'3P\'",4i:"a.H==\'4i\'",9j:"a.H==\'9j\'",cB:"a.H==\'cB\'",3Q:"a.H==\'3Q\'",5o:"a.H==\'5o\'",2P:"a.H==\'2P\'",7z:\'a.H=="7z"||q.1H(a,"7z")\',3W:"/3W|3x|eU|7z/i.1j(a.1H)"},".":"q.2k.6e(a,m[2])","@":{"=":"z==m[4]","!=":"z!=m[4]","^=":"z&&!z.1M(m[4])","$=":"z&&z.5T(z.I - m[4].I,m[4].I)==m[4]","*=":"z&&z.1M(m[4])>=0","":"z",9d:u(m){C["",m[1],m[3],m[2],m[5]]},aE:"z=a[m[3]];B(!z||/3V|3F/.1j(m[3]))z=q.1s(a,m[3]);"},"[":"1b(m[2])?q.3N(a.1t.28,1b(m[2]),\'4h\',a)==a:q.3e(m[2],a).I"},aC:[/^\\[ *(@)([\\w-]+) *([!*$^=]*) *(\'?"?)(.*?)\\4 *\\]/,/^(\\[)\\s*(.*?(\\[.*?\\])?[^[]*?)\\s*\\]/,/^(:)([\\w-]+)\\("?\'?(.*?(\\(.*?\\))?[^(]*?)"?\'?\\)/,1P 4K("^([:.#]*)("+(q.8A="(?:[\\\\w\\dp-\\dq*-]|\\\\\\\\.)")+"+)")],6Q:[/^(\\/?\\.\\.)/,"a.1t",/^(>|\\/)/,"q.5h(a.28)",/^(\\+)/,"q.3N(a,2,\'4h\')",/^(~)/,u(a){D s=q.5h(a.1t.28);C s.8J(q.6O(a,s)+1)}],6c:u(2r,3m,2l){D 36,1r=[];2J(2r&&2r!=36){36=2r;D f=q.1x(2r,3m,2l);2r=f.t.1N(/^\\s*,\\s*/,"");1r=2l?3m=f.r:q.3Z(1r,f.r)}C 1r},3e:u(t,2H){B(U t!="1T")C[t];B(2H&&!2H.31)2H=19;2H=2H||W;B(!t.1M("//")){2H=2H.37;t=t.5T(2,t.I)}N B(!t.1M("/")&&!2H.6d){2H=2H.37;t=t.5T(1,t.I);B(t.1M("/")>=1)t=t.5T(t.1M("/"),t.I)}D 1d=[2H],3O=[],2z;2J(t&&2z!=t){D r=[];2z=t;t=q.3d(t).1N(/^\\/\\//,"");D 6R=1a;D 5s=/^[\\/>]\\s*([\\w*-]+)/;D m=5s.5u(t);B(m){Y(D i=0;1d[i];i++)Y(D c=1d[i].28;c;c=c.4h)B(c.31==1&&(m[1]=="*"||q.1H(c,m[1])))r.1w(c);1d=r;t=t.1N(5s,"");B(t.1M(" ")==0)dt;6R=11}N{Y(D i=0,ay=q.6Q.I;i<ay;i+=2){D 5s=q.6Q[i],L=q.6Q[i+1];D m=5s.5u(t);B(m){r=1d=q.4J(1d,q.2D(L)?L:1P 71("a","C "+L));t=q.3d(t.1N(5s,""));6R=11;30}}}B(t&&!6R){B(!t.1M(",")){B(1d[0]==2H)1d.85();3O=q.3Z(3O,1d);r=1d=[2H];t=" "+t.5T(1,t.I)}N{D 6j=1P 4K("^(\\\\w+)(#)("+q.8A+"+)");D m=6j.5u(t);B(m){m=[0,m[2],m[3],m[1]]}N{6j=1P 4K("^([#.]?)("+q.8A+"*)");m=6j.5u(t)}m[2]=m[2].1N(/\\\\/g,"");D J=1d[1d.I-1];B(m[1]=="#"&&J&&J.8Q){D 4H=J.8Q(m[2]);B((q.18.1y||q.18.3G)&&4H&&4H.S!=m[2])4H=q(\'[@S="\'+m[2]+\'"]\',J)[0];1d=r=4H&&(!m[3]||q.1H(4H,m[3]))?[4H]:[]}N{Y(D i=0;1d[i];i++){D 7A=m[1]!=""||m[0]==""?"*":m[2];B(7A=="*"&&1d[i].1H.2n()=="42")7A="P";r=q.3Z(r,1d[i].az(7A))}B(m[1]==".")r=q.99(r,m[2]);B(m[1]=="#"){D 5w=[];Y(D i=0;r[i];i++)B(r[i].7g("S")==m[2]){5w=[r[i]];30}r=5w}1d=r}t=t.1N(6j,"")}}B(t){D 1R=q.1x(t,r);1d=r=1R.r;t=q.3d(1R.t)}}B(t)1d=[];B(1d&&1d[0]==2H)1d.85();3O=q.3Z(3O,1d);C 3O},99:u(r,m,2l){m=" "+m+" ";D 5w=[];Y(D i=0;r[i];i++){D 9a=(" "+r[i].2k+" ").1M(m)>=0;B(!2l&&9a||2l&&!9a)5w.1w(r[i])}C 5w},1x:u(t,r,2l){D 2z;2J(t&&t!=2z){2z=t;D p=q.aC,m;Y(D i=0;p[i];i++){m=p[i].5u(t);B(m){t=t.9x(m[0].I);B(q.2r[m[1]].9d)m=q.2r[m[1]].9d(m);m[2]=m[2].1N(/\\\\/g,"");30}}B(!m)30;B(m[1]==":"&&m[2]=="2l")r=q.1x(m[3],r,11).r;N B(m[1]==".")r=q.99(r,m[2],2l);N{D f=q.2r[m[1]];B(U f!="1T")f=q.2r[m[1]][m[2]];6D("f = u(a,i){"+(q.2r[m[1]].aE||"")+"C "+f+"}");r=q.51(r,f,2l)}}C{r:r,t:t}},3H:u(J){D 8G=[];D 1r=J.1t;2J(1r&&1r!=W){8G.1w(1r);1r=1r.1t}C 8G},3N:u(1r,2a,6g,J){2a=2a||1;D 2R=0;Y(;1r;1r=1r[6g]){B(1r.31==1)2R++;B(2R==2a||2a=="aF"&&2R%2==0&&2R>1&&1r==J||2a=="aG"&&2R%2==1&&1r==J)C 1r}},5h:u(n,J){D r=[];Y(;n;n=n.4h){B(n.31==1&&(!J||n!=J))r.1w(n)}C r}});q.T={2g:u(E,H,1z,R){B(q.18.1y&&E.6r!=1c)E=1e;B(R)1z.R=R;B(!1z.5e)1z.5e=l.5e++;B(!E.$2e)E.$2e={};D 5V=E.$2e[H];B(!5V){5V=E.$2e[H]={};B(E["5X"+H])5V[0]=E["5X"+H]}5V[1z.5e]=1z;E["5X"+H]=l.6x;B(!l.2B[H])l.2B[H]=[];l.2B[H].1w(E)},5e:1,2B:{},49:u(E,H,1z){D 2e=E.$2e,1d;B(2e){B(H&&H.H){1z=H.1z;H=H.H}B(!H){Y(H 27 2e)l.49(E,H)}N B(2e[H]){B(1z)6m 2e[H][1z.5e];N Y(1z 27 E.$2e[H])6m 2e[H][1z];Y(1d 27 2e[H])30;B(!1d){1d=E["5X"+H]=19;6m 2e[H]}}Y(1d 27 2e)30;B(!1d)E.$2e=19}},2d:u(H,R,E){R=q.5W(R||[]);B(!E)q.16(l.2B[H]||[],u(){q.T.2d(H,R,l)});N{D 1z=E["5X"+H],1R,L=q.2D(E[H]);B(1z){R.aH(l.4R({H:H,3i:E}));B((1R=1z.1C(E,R))!==1a)l.8I=11}B(L&&1R!==1a)E[H]();l.8I=1a}},6x:u(T){B(U q=="1c"||q.T.8I)C;T=q.T.4R(T||1e.T||{});D 4N;D c=l.$2e[T.H];D 25=[].8J.3S(17,1);25.aH(T);Y(D j 27 c){25[0].1z=c[j];25[0].R=c[j].R;B(c[j].1C(l,25)===1a){T.40();T.59();4N=1a}}B(q.18.1y)T.3i=T.40=T.59=T.1z=T.R=19;C 4N},4R:u(T){B(!T.3i&&T.aJ)T.3i=T.aJ;B(T.8D==1c&&T.9Z!=1c){D e=W.37,b=W.1K;T.8D=T.9Z+(e.32||b.32);T.aD=T.dz+(e.2Y||b.2Y)}B(q.18.3a&&T.3i.31==3){D 5Y=T;T=q.1i({},5Y);T.3i=5Y.3i.1t;T.40=u(){C 5Y.40()};T.59=u(){C 5Y.59()}}B(!T.40)T.40=u(){l.4N=1a};B(!T.59)T.59=u(){l.dB=11};C T}};q.L.1i({2S:u(H,R,L){C l.16(u(){q.T.2g(l,H,L||R,R)})},aN:u(H,R,L){C l.16(u(){q.T.2g(l,H,u(T){q(l).6M(T);C(L||R).1C(l,17)},R)})},6M:u(H,L){C l.16(u(){q.T.49(l,H,L)})},2d:u(H,R){C l.16(u(){q.T.2d(H,R,l)})},3b:u(){D a=17;C l.47(u(e){l.8L=l.8L==0?1:0;e.40();C a[l.8L].1C(l,[e])||1a})},dZ:u(f,g){u 8N(e){D p=(e.H=="4Y"?e.dC:e.dD)||e.dE;2J(p&&p!=l)3J{p=p.1t}3C(e){p=l};B(p==l)C 1a;C(e.H=="4Y"?f:g).1C(l,[e])}C l.4Y(8N).70(8N)},34:u(f){B(q.6P)f.1C(W,[q]);N{q.64.1w(u(){C f.1C(l,[q])})}C l}});q.1i({6P:1a,64:[],34:u(){B(!q.6P){q.6P=11;B(q.64){q.16(q.64,u(){l.1C(W)});q.64=19}B(q.18.4m||q.18.3G)W.dF("aL",q.34,1a)}}});1P u(){q.16(("8m,4P,4w,dR,5L,8T,47,dG,"+"dP,dH,8B,4Y,70,dJ,3x,"+"3Q,dK,dL,dM,1m").4O(","),u(i,o){q.L[o]=u(f){C f?l.2S(o,f):l.2d(o)}});B(q.18.4m||q.18.3G)W.dO("aL",q.34,1a);N B(q.18.1y){W.dQ("<dS"+"dT S=aM dU=11 "+"3F=//:><\\/4q>");D 4q=W.8Q("aM");B(4q)4q.6b=u(){B(l.7y!="3A")C;l.1t.63(l);q.34()};4q=19}N B(q.18.3a)q.8R=6r(u(){B(W.7y=="dV"||W.7y=="3A"){9s(q.8R);q.8R=19;q.34()}},10);q.T.2g(1e,"4w",q.34)};B(q.18.1y)q(1e).aN("8T",u(){D 2B=q.T.2B;Y(D H 27 2B){D 8U=2B[H],i=8U.I;B(i&&H!=\'8T\')do q.T.49(8U[i-1],H);2J(--i)}});q.L.1i({1D:u(1o,1h){D 2A=l.1x(":2A");1o?2A.2W({1g:"1D",2c:"1D",1J:"1D"},1o,1h):2A.16(u(){l.1E.1G=l.5q?l.5q:"";B(q.K(l,"1G")=="2x")l.1E.1G="44"});C l},1A:u(1o,1h){D 3p=l.1x(":3p");1o?3p.2W({1g:"1A",2c:"1A",1J:"1A"},1o,1h):3p.16(u(){l.5q=l.5q||q.K(l,"1G");B(l.5q=="2x")l.5q="44";l.1E.1G="2x"});C l},aP:q.L.3b,3b:u(L,8W){D 25=17;C q.2D(L)&&q.2D(8W)?l.aP(L,8W):l.16(u(){q(l)[q(l).2Z(":2A")?"1D":"1A"].1C(q(l),25)})},bD:u(1o,1h){C l.1x(":2A").2W({1g:"1D"},1o,1h).3f()},bA:u(1o,1h){C l.1x(":3p").2W({1g:"1A"},1o,1h).3f()},dW:u(1o,1h){C l.16(u(){D aQ=q(l).2Z(":2A")?"1D":"1A";q(l).2W({1g:aQ},1o,1h)})},bM:u(1o,1h){C l.1x(":2A").2W({1J:"1D"},1o,1h).3f()},bH:u(1o,1h){C l.1x(":3p").2W({1J:"1A"},1o,1h).3f()},dX:u(1o,3L,1h){C l.2W({1J:3L},1o,1h)},2W:u(12,1o,39,1h){C l.2U(u(){l.4X=q.1i({},12);D 2I=q.1o(1o,39,1h);Y(D p 27 12){D e=1P q.5O(l,2I,p);B(12[p].1Z==5K)e.5c(e.1r(),12[p]);N e[12[p]](12)}})},2U:u(H,L){B(!L){L=H;H="5O"}C l.16(u(){B(!l.2U)l.2U={};B(!l.2U[H])l.2U[H]=[];l.2U[H].1w(L);B(l.2U[H].I==1)L.1C(l)})}});q.1i({1o:u(1o,39,L){D 2I=1o&&1o.1Z==dY?1o:{3A:L||!L&&39||q.2D(1o)&&1o,3R:1o,39:L&&39||39&&39.1Z!=71&&39||"aT"};2I.3R=(2I.3R&&2I.3R.1Z==5K?2I.3R:{e0:e1,e2:bC}[2I.3R])||e3;2I.36=2I.3A;2I.3A=u(){q.aV(l,"5O");B(q.2D(2I.36))2I.36.1C(l)};C 2I},39:{e4:u(p,n,4z,6Z){C 4z+6Z*p},aT:u(p,n,4z,6Z){C((-4g.e5(p*4g.e7)/2)+0.5)*6Z+4z}},2U:{},aV:u(J,H){H=H||"5O";B(J.2U&&J.2U[H]){J.2U[H].85();D f=J.2U[H][0];B(f)f.1C(J)}},52:[],5O:u(J,V,12){D z=l;D y=J.1E;B(12=="1g"||12=="2c"){D 79=q.K(J,"1G");D aY=y.4v;y.4v="2A"}z.a=u(){B(V.78)V.78.1C(J,[z.4W]);B(12=="1J")q.1s(y,"1J",z.4W);N{y[12]=1b(z.4W)+"2q";y.1G="44"}};z.7G=u(){C 76(q.K(J,12))};z.1r=u(){D r=76(q.65(J,12));C r&&r>-e8?r:z.7G()};z.5c=u(92,3L){z.8r=(1P 5g()).75();z.4W=92;z.a();q.52.1w(u(){C z.78(92,3L)});B(q.52.I==1){D aX=6r(u(){q.52=q.51(q.52,u(L){C L()});B(!q.52.I)9s(aX)},13)}};z.1D=u(){B(!J.3M)J.3M={};J.3M[12]=q.1s(J.1E,12);V.1D=11;z.5c(0,l.1r());B(12!="1J")y[12]="58"};z.1A=u(){B(!J.3M)J.3M={};J.3M[12]=q.1s(J.1E,12);V.1A=11;z.5c(l.1r(),0)};z.3b=u(){B(!J.3M)J.3M={};J.3M[12]=q.1s(J.1E,12);B(79=="2x"){V.1D=11;B(12!="1J")y[12]="58";z.5c(0,l.1r())}N{V.1A=11;z.5c(l.1r(),0)}};z.78=u(4z,95){D t=(1P 5g()).75();B(t>V.3R+z.8r){z.4W=95;z.a();B(J.4X)J.4X[12]=11;D 3O=11;Y(D i 27 J.4X)B(J.4X[i]!==11)3O=1a;B(3O){B(79){y.4v=aY;y.1G=79;B(q.K(J,"1G")=="2x")y.1G="44"}B(V.1A)y.1G="2x";B(V.1A||V.1D)Y(D p 27 J.4X)q.1s(y,p,J.3M[p])}B(3O&&q.2D(V.3A))V.3A.1C(J);C 1a}N{D n=t-l.8r;D p=n/V.3R;z.4W=q.39[V.39](p,n,4z,(95-4z),V.3R);z.a()}C 11}}});q.L.1i({ea:u(1p,3r,1h){l.4w(1p,3r,1h,1)},4w:u(1p,3r,1h,3y){B(q.2D(1p))C l.2S("4w",1p);1h=1h||u(){};D H="98";B(3r)B(q.2D(3r)){1h=3r;3r=19}N{3r=q.P(3r);H="b5"}D 3n=l;q.7b({1p:1p,H:H,R:3r,3y:3y,3A:u(5f,1U){B(1U=="5l"||!3y&&1U=="bk")3n.1s("45",5f.7u).9o().16(1h,[5f.7u,1U,5f]);N 1h.1C(3n,[5f.7u,1U,5f])}});C l},ec:u(){C q.P(l)},9o:u(){C l.3e("4q").16(u(){B(l.3F)q.b4(l.3F);N q.9p(l.1L||l.ed||l.45||"")}).3f()}});q.16("b8,bp,bQ,bw,bR,bi".4O(","),u(i,o){q.L[o]=u(f){C l.2S(o,f)}});q.1i({2O:u(1p,R,1h,H,3y){B(q.2D(R)){1h=R;R=19}C q.7b({H:"98",1p:1p,R:R,5l:1h,9g:H,3y:3y})},ee:u(1p,R,1h,H){C q.2O(1p,R,1h,H,1)},b4:u(1p,1h){C q.2O(1p,19,1h,"4q")},ef:u(1p,R,1h){C q.2O(1p,R,1h,"bO")},eg:u(1p,R,1h,H){B(q.2D(R)){1h=R;R={}}C q.7b({H:"b5",1p:1p,R:R,5l:1h,9g:H})},eh:u(33){q.7c.33=33},ei:u(F){q.1i(q.7c,F)},7c:{2B:11,H:"98",33:0,bc:"ej/x-ek-1S-em",b6:11,7n:11,R:19},7r:{},7b:u(s){s=q.1i({},q.7c,s);B(s.R){B(s.b6&&U s.R!="1T")s.R=q.P(s.R);B(s.H.2n()=="2O"){s.1p+=((s.1p.1M("?")>-1)?"&":"?")+s.R;s.R=19}}B(s.2B&&!q.9i++)q.T.2d("b8");D 9h=1a;D 1n=1e.b9?1P b9("ax.eo"):1P 7W();1n.ep(s.H,s.1p,s.7n);B(s.R)1n.7i("er-es",s.bc);B(s.3y)1n.7i("et-9k-eu",q.7r[s.1p]||"ev, ew ex ey 9c:9c:9c ez");1n.7i("X-eA-eB","7W");B(1n.eC)1n.7i("eD","eE");B(s.bh)s.bh(1n);B(s.2B)q.T.2d("bi",[1n,s]);D 6b=u(9f){B(1n&&(1n.7y==4||9f=="33")){9h=11;B(7k){9s(7k);7k=19}D 1U;3J{1U=q.by(1n)&&9f!="33"?s.3y&&q.bE(1n,s.1p)?"bk":"5l":"1m";B(1U!="1m"){D 7j;3J{7j=1n.9l("bF-9k")}3C(e){}B(s.3y&&7j)q.7r[s.1p]=7j;D R=q.bK(1n,s.9g);B(s.5l)s.5l(R,1U);B(s.2B)q.T.2d("bR",[1n,s])}N q.7m(s,1n,1U)}3C(e){1U="1m";q.7m(s,1n,1U,e)}B(s.2B)q.T.2d("bQ",[1n,s]);B(s.2B&&!--q.9i)q.T.2d("bp");B(s.3A)s.3A(1n,1U);B(s.7n)1n=19}};D 7k=6r(6b,13);B(s.33>0)3g(u(){B(1n){1n.eF();B(!9h)6b("33")}},s.33);3J{1n.eH(s.R)}3C(e){q.7m(s,1n,19,e)}B(!s.7n)6b();C 1n},7m:u(s,1n,1U,e){B(s.1m)s.1m(1n,1U,e);B(s.2B)q.T.2d("bw",[1n,s,e])},9i:0,by:u(r){3J{C!r.1U&&5D.eI=="9j:"||(r.1U>=bC&&r.1U<eJ)||r.1U==bG||q.18.3a&&r.1U==1c}3C(e){}C 1a},bE:u(1n,1p){3J{D bI=1n.9l("bF-9k");C 1n.1U==bG||bI==q.7r[1p]||q.18.3a&&1n.1U==1c}3C(e){}C 1a},bK:u(r,H){D ct=r.9l("eK-H");D R=!H&&ct&&ct.1M("1n")>=0;R=H=="1n"||R?r.eM:r.7u;B(H=="4q")q.9p(R);B(H=="bO")6D("R = "+R);B(H=="2m")q("<23>").2m(R).9o();C R},P:u(a){D s=[];B(a.1Z==3w||a.7v)q.16(a,u(){s.1w(4G(l.1f)+"="+4G(l.G))});N Y(D j 27 a)B(a[j]&&a[j].1Z==3w)q.16(a[j],u(){s.1w(4G(j)+"="+4G(l))});N s.1w(4G(j)+"="+4G(a[j]));C s.9u("&")},9p:u(R){B(1e.bT)1e.bT(R);N B(q.18.3a)1e.3g(R,0);N 6D.3S(1e,R)}})}q.L.eO=u(f){C l.16(u(){D p=l.1t;B(q.K(p,"1Y")==\'54\')p.1E.1Y=\'5y\';D s=l.1E;s.1Y=\'43\';B(!f||f=="eP"){B(((1b(q.K(p,"2c"))-1b(q.K(l,"2c")))/2)>0)s.2u=((1b(q.K(p,"2c"))-1b(q.K(l,"2c")))/2)+"2q";N s.2u="0"}B(!f||f=="eQ"){B(((1b(q.K(p,"1g"))-1b(q.K(l,"1g")))/2)>0){s.2v=((1b(q.K(p,"1g"))-1b(q.K(l,"1g")))/2)+"2q"}N{B(p.1H.2n()=="1K"){B(1e.5S)D 48=1e.5S;N B(W.1K&&W.1K.2T)D 48=W.1K.2T;s.2v=((48-1b(q.K(l,"1g")))/2)+"2q"}N{s.2v="0"}}}})};q.4j=u(1f,G,V){B(U G!=\'1c\'){V=V||{};B(G===19){G=\'\';V.2C=-1}D 2C=\'\';B(V.2C){D 2o;B(U V.2C==\'1T\'&&V.2C.2F(/^[+-]?[0-9]+[bV]$/)!==19){D 2F=V.2C.2F(/^([+-]?[0-9]+)([bV])$/);V.2C=1b(2F[0],10)*(({"y":(60*60*24*eR),"w":(60*60*24*7),"d":(60*60*24),"h":(60*60),"m":(60),"s":(1)}[2F[1]])||0);2o=1P 5g();2o.bZ(2o.75()+V.2C*4c)}N B(U V.2C==\'3k\'){2o=1P 5g();2o.bZ(2o.75()+V.2C*24*60*60*4c)}N B(U V.2C.c0!=\'1c\')2o=V.2C;N 9F"eT \\"2C\\" 2j";2C=\'; 2C=\'+2o.c0()}D 6f=V.6f?\'; 6f=\'+V.6f:\'\';D 6s=V.6s?\'; 6s=\'+V.6s:\'\';D 74=V.74?\'; 74\':\'\';W.4j=[1f,\'=\',4G(G),2C,6f,6s,74].9u(\'\')}N{D 9y=19;B(W.4j&&W.4j!=\'\'){D 9v=W.4j.4O(\';\');Y(D i=0;i<9v.I;i++){D 4j=q.3d(9v[i]);B(4j.9x(0,1f.I+1)==(1f+\'=\')){9y=eV(4j.9x(1f.I+1));30}}}C 9y}};q.L.c2=q.L.1g;q.L.c3=q.L.2c;q.L.1g=u(){B(l[0]==1e)C 3n.5S||q.5t&&W.37.48||W.1K.48;B(l[0]==W)C 4g.7G(W.1K.eW,W.1K.2T);C l.c2(17[0])};q.L.2c=u(){B(l[0]==1e)C 3n.8M||q.5t&&W.37.61||W.1K.61;B(l[0]==W)C 4g.7G(W.1K.eZ,W.1K.3U);C l.c3(17[0])};q.L.5S=u(){C l[0]==1e||l[0]==W?l.1g():l.K(\'1G\')!=\'2x\'?l[0].2T-(1b(l.K("4l"))||0)-(1b(l.K("c4"))||0):l.1g()+(1b(l.K("9E"))||0)+(1b(l.K("c5"))||0)};q.L.8M=u(){C l[0]==1e||l[0]==W?l.2c():l.K(\'1G\')!=\'2x\'?l[0].3U-(1b(l.K("4d"))||0)-(1b(l.K("c6"))||0):l.1g()+(1b(l.K("9D"))||0)+(1b(l.K("97"))||0)};q.L.f0=u(){C l[0]==1e||l[0]==W?l.1g():l.K(\'1G\')!=\'2x\'?l[0].2T:l.1g()+(1b(l.K("4l"))||0)+(1b(l.K("c4"))||0)+(1b(l.K("9E"))||0)+(1b(l.K("c5"))||0)};q.L.f1=u(){C l[0]==1e||l[0]==W?l.2c():l.K(\'1G\')!=\'2x\'?l[0].3U:l.1g()+(1b(l.K("4d"))||0)+(1b(l.K("c6"))||0)+(1b(l.K("9D"))||0)+(1b(l.K("97"))||0)};q.L.32=u(){B(l[0]==1e||l[0]==W)C 3n.8P||q.5t&&W.37.32||W.1K.32;C l[0].32};q.L.2Y=u(){B(l[0]==1e||l[0]==W)C 3n.8O||q.5t&&W.37.2Y||W.1K.2Y;C l[0].2Y};q.L.9b=u(V,9G){D x=0,y=0,J=l[0],1q=l[0],6K=1a,9C=1a,5R,6k=0,5M=0,V=q.1i({73:11,62:11,6u:1a,5L:11},V||{});do{x+=1q.8F||0;y+=1q.8H||0;B(q.18.4m||q.18.1y){D bt=1b(q.K(1q,\'4l\'))||0;D bl=1b(q.K(1q,\'4d\'))||0;x+=bl;y+=bt;B(q.18.4m&&1q!=J&&q.K(1q,\'4v\')!=\'3p\'){x+=bl;y+=bt}B(q.K(1q,\'1Y\')==\'43\')6K=11;B(q.K(1q,\'1Y\')==\'5y\')9C=11}B(V.5L){5R=1q.c7;do{6k+=1q.32||0;5M+=1q.2Y||0;1q=1q.1t;B(q.18.4m&&1q!=J&&1q!=5R&&q.K(1q,\'4v\')!=\'3p\'){x+=1b(q.K(1q,\'4d\'))||0;y+=1b(q.K(1q,\'4l\'))||0}}2J(5R&&1q!=5R)}N 1q=1q.c7;B(1q&&(1q.7J.2n()==\'1K\'||1q.7J.2n()==\'2m\')){B((q.18.3a||(q.18.1y&&q.5t))&&q.K(J,\'1Y\')!=\'43\'){x+=1b(q.K(1q,\'cb\'))||0;y+=1b(q.K(1q,\'cd\'))||0}B((q.18.4m&&!6K)||(q.18.1y&&q.K(J,\'1Y\')==\'54\'&&(!9C||!6K))){x+=1b(q.K(1q,\'4d\'))||0;y+=1b(q.K(1q,\'4l\'))||0}30}}2J(1q);B(!V.73){x-=1b(q.K(J,\'cb\'))||0;y-=1b(q.K(J,\'cd\'))||0}B(V.62&&(q.18.3a||q.18.3G)){x+=1b(q.K(J,\'4d\'))||0;y+=1b(q.K(J,\'4l\'))||0}N B(!V.62&&!(q.18.3a||q.18.3G)){x-=1b(q.K(J,\'4d\'))||0;y-=1b(q.K(J,\'4l\'))||0}B(V.6u){x+=1b(q.K(J,\'9D\'))||0;y+=1b(q.K(J,\'9E\'))||0}B(V.5L&&q.18.3G&&q.K(J,\'1G\')==\'f2\'){6k-=J.32||0;5M-=J.2Y||0}D 4N=V.5L?{2v:y-5M,2u:x-6k,2Y:5M,32:6k}:{2v:y,2u:x};B(9G){q.1i(9G,4N);C l}N{C 4N}};(u($){$.L.f4=q.L.9H=u(s){B(!($.18.1y&&U 7W==\'u\'))C l;s=$.1i({2v:\'3Y\',2u:\'3Y\',2c:\'3Y\',1g:\'3Y\',1J:11,3F:\'f5:1a;\'},s||{});D 12=u(n){C n&&n.1Z==5K?n+\'2q\':n},2m=\'<ci 4L="9H"f6="0"f7="-1"3F="\'+s.3F+\'"\'+\'1E="1G:44;1Y:43;z-2X:-1;\'+(s.1J!==1a?\'1x:f8(f9=\\\'0\\\');\':\'\')+\'2v:\'+(s.2v==\'3Y\'?\'7T(((1b(l.1t.6n.4l)||0)*-1)+\\\'2q\\\')\':12(s.2v))+\';\'+\'2u:\'+(s.2u==\'3Y\'?\'7T(((1b(l.1t.6n.4d)||0)*-1)+\\\'2q\\\')\':12(s.2u))+\';\'+\'2c:\'+(s.2c==\'3Y\'?\'7T(l.1t.3U+\\\'2q\\\')\':12(s.2c))+\';\'+\'1g:\'+(s.1g==\'3Y\'?\'7T(l.1t.2T+\\\'2q\\\')\':12(s.1g))+\';\'+\'"/>\';C l.16(u(){B(!$(\'ci.9H\',l)[0])l.5x(W.9I(2m),l.28)})}})(q);(u($){$.1i({1Q:{ck:0}});$.L.1Q=u(2L,F){B(U 2L==\'42\')F=2L;F=$.1i({2L:(2L&&U 2L==\'3k\'&&2L>0)?--2L:0,3o:19,3I:$.5N?11:1a,4A:1a,cj:\'4A-41-\',9W:19,9V:19,9X:19,9Y:19,9U:\'b3\',cp:19,cr:19,cm:1a,66:19,6v:19,5H:19,7Y:\'1Q-2h\',4s:\'1Q-3D\',6t:\'1Q-3o\',6q:\'1Q-1V\',8h:\'1Q-1A\',8l:\'1Q-fd\',cl:\'23\'},F||{});$.18.81=$.18.81||$.18.1y&&U 7W==\'u\';u 9K(){a2(0,0)}C l.16(u(){D 1V=l;D 2h=$(\'6E.\'+F.7Y,1V);2h=2h.4y()&&2h||$(\'>6E:eq(0)\',1V);D 1Q=$(\'a\',2h);B(F.4A){D 8j={};1Q.16(u(){$(l).2m(\'<3T>\'+$(l).2m()+\'</3T>\');D S=F.cj+(++$.1Q.ck);D 1X=\'#\'+S;8j[1X]=l.3V;l.3V=1X;$(\'<23 S="\'+S+\'" 4L="\'+F.6q+\'"></23>\').6a(1V)})}D 2w=$(\'23.\'+F.6q,1V);2w=2w.4y()&&2w||$(\'>\'+F.cl,1V);2h.2Z(\'.\'+F.7Y)||2h.2K(F.7Y);2w.16(u(){D $$=$(l);$$.2Z(\'.\'+F.6q)||$$.2K(F.6q)});D 9J=$(\'1B\',2h).2X($(\'1B.\'+F.4s,2h)[0]);B(9J>=0){F.2L=9J}B(5D.1X){1Q.16(u(i){B(l.1X==5D.1X){F.2L=i;B(($.18.1y||$.18.3G)&&!F.4A){D 1W=$(5D.1X);D 8e=1W.1s(\'S\');1W.1s(\'S\',\'\');3g(u(){1W.1s(\'S\',8e)},fe)}9K();C 1a}})}B($.18.1y){9K()}2w.1x(\':eq(\'+F.2L+\')\').1D().3f().2l(\':eq(\'+F.2L+\')\').2K(F.8h);B(!F.4A){$(\'1B\',2h).3j(F.4s).eq(F.2L).2K(F.4s)}B(F.cm){D 9R=u(2P){D 9O=$.4J(2w.2O(),u(el){D h,9N=$(el);B(2P){B($.18.81){el.1E.ff(\'cn\');el.1E.1g=\'\';el.83=19}h=9N.K({\'4I-1g\':\'\'}).1g()}N{h=9N.1g()}C h}).fg(u(a,b){C b-a});B($.18.81){2w.16(u(){l.83=9O[0]+\'2q\';l.1E.fi(\'cn\',\'l.1E.1g = l.83 ? l.83 : "58"\')})}N{2w.K({\'4I-1g\':9O[0]+\'2q\'})}};9R();D 87=1V.3U;D 9S=1V.2T;D 9Q=$(\'#1Q-co-9P-4y\').2O(0)||$(\'<3T S="1Q-co-9P-4y">M</3T>\').K({1G:\'44\',1Y:\'43\',86:\'2A\'}).6a(W.1K).2O(0);D 89=9Q.2T;6r(u(){D 88=1V.3U;D 9T=1V.2T;D 8a=9Q.2T;B(9T>9S||88!=87||8a!=89){9R((88>87||8a<89));87=88;9S=9T;89=8a}},50)}D 5G={},5E={},a1=F.cp||F.9U,a0=F.cr||F.9U;B(F.9V||F.9W){B(F.9V){5G[\'1g\']=\'1D\';5E[\'1g\']=\'1A\'}B(F.9W){5G[\'1J\']=\'1D\';5E[\'1J\']=\'1A\'}}N{B(F.9X){5G=F.9X}N{5G[\'4I-2c\']=0;a1=F.3I?50:1}B(F.9Y){5E=F.9Y}N{5E[\'4I-2c\']=0;a0=F.3I?50:1}}D 66=F.66,6v=F.6v,5H=F.5H;1Q.2S(\'a7\',u(){D 1B=$(l).3H(\'1B:eq(0)\');B(1V.6y||1B.2Z(\'.\'+F.4s)||1B.2Z(\'.\'+F.6t)){C 1a}D 1X=l.1X;B($.18.1y){$(l).2d(\'47\');B(F.3I){$.5N.4a(1X);5D.1X=1X.1N(\'#\',\'\')}}N B($.18.3a){D cu=$(\'<1S cs="\'+1X+\'"><23><3W H="3Q" G="h" /></23></1S>\').2O(0);cu.3Q();$(l).2d(\'47\');B(F.3I){$.5N.4a(1X)}}N{B(F.3I){5D.1X=1X.1N(\'#\',\'\')}N{$(l).2d(\'47\')}}});1Q.2S(\'8n\',u(){D 1B=$(l).3H(\'1B:eq(0)\');B($.18.3a){1B.2W({1J:0},1,u(){1B.K({1J:\'\'})})}1B.2K(F.6t)});B(F.3o&&F.3o.I){Y(D i=0,k=F.3o.I;i<k;i++){1Q.eq(--F.3o[i]).2d(\'8n\').3f()}};1Q.2S(\'a8\',u(){D 1B=$(l).3H(\'1B:eq(0)\');1B.3j(F.6t);B($.18.3a){1B.2W({1J:1},1,u(){1B.K({1J:\'\'})})}});1Q.2S(\'47\',u(e){D 6B=e.9Z;D 4x=l,1B=$(l).3H(\'1B:eq(0)\'),1W=$(l.1X),2p=2w.1x(\':3p\');B((U 66==\'u\'&&66(l,1W[0],2p[0])==1a&&6B)||1V.6y||1B.2Z(\'.\'+F.4s)||1B.2Z(\'.\'+F.6t)){l.8m();C 1a}1V[\'6y\']=11;B(1W.4y()){B($.18.1y&&F.3I){D 8e=l.1X.1N(\'#\',\'\');1W.1s(\'S\',\'\');3g(u(){1W.1s(\'S\',8e)},0)}u 8k(){B(F.3I&&6B){$.5N.4a(4x.1X)}2p.2W(5E,a0,u(){$(4x).3H(\'1B:eq(0)\').2K(F.4s).cz().3j(F.4s);B(U 6v==\'u\'){6v(4x,1W[0],2p[0])}2p.2K(F.8h).K({1G:\'\',4v:\'\',1g:\'\',1J:\'\'});1W.3j(F.8h).2W(5G,a1,u(){1W.K({4v:\'\',1g:\'\',1J:\'\'});B($.18.1y){2p[0].1E.1x=\'\';1W[0].1E.1x=\'\'}B(U 5H==\'u\'){5H(4x,1W[0],2p[0])}1V.6y=19})})}B(!F.4A){8k()}N{D $$=$(l),3T=$(\'3T\',l)[0],1L=3T.45;$$.2K(F.8l);3T.45=\'cC&#cD;\';3g(u(){$(4x.1X).4w(8j[4x.1X],u(){8k();3T.45=1L;$$.3j(F.8l)})},0)}}N{7E(\'cE 2Z 9e cG 1V.\')}D a3=1e.8P||W.37&&W.37.32||W.1K.32||0;D a4=1e.8O||W.37&&W.37.2Y||W.1K.2Y||0;3g(u(){1e.a2(a3,a4)},0);l.8m();C F.3I&&!!6B});B(F.4A){1Q.eq(F.2L).2d(\'47\').3f()}B(F.3I){$.5N.cH(u(){1Q.eq(F.2L).2d(\'47\').3f()})}})};D 7H=[\'a7\',\'8n\',\'a8\'];Y(D i=0;i<7H.I;i++){$.L[7H[i]]=(u(ab){C u(41){C l.16(u(){D 2h=$(\'6E.1Q-2h\',l);2h=2h.4y()&&2h||$(\'>6E:eq(0)\',l);D a;B(!41||U 41==\'3k\'){a=$(\'1B a\',2h).eq((41&&41>0&&41-1||0))}N B(U 41==\'1T\'){a=$(\'1B a[@3V$="#\'+41+\'"]\',2h)}a.2d(ab)})}})(7H[i])}})(q);q.1i(q.L,{b1:u(V){D O=1P q.O(V,l[0]);O.1u=l.3e(":3W:2l(:3Q):2l(:2P)").4P(u(){O.4p=l});B(O.F.7I){l.3Q(u(T){B(O.F.3l)T.40();C O.1S()})}B(O.F.T){O.1u.2S(O.F.T,u(){O.E(l)})}C O},1w:u(t){C l.7a(q.3Z(l.2O(),t))},5b:u(S){C l.1x("[@Y=\'"+S+"\']")}});q.1i(q.2r[":"],{ba:"!q.3d(a.G)",bb:"!!q.3d(a.G)"});q.O=u(V,1S){l.F=q.1i({},q.O.4k,V);l.5A=1S;l.4f=l.F.4Z;l.6Y=l.4f.I&&l.4f||q(1S);l.2w=l.F.7e.2g(l.F.4Z);l.2P()};q.1i(q.O,{4k:{3v:{},3c:"1m",84:11,7e:q([]),4Z:q([]),7I:11},bd:u(F){q.1i(q.O.4k,F)},3v:{1k:"bf bg 2Z 1k.",7U:"1F 1I a G 9e bj bm {0} 5m.",7Q:"1F 1I a G bn at bo {0} 5m.",7L:"1F 1I a G 7f {0} 7w {1} 5m bq.",5k:"1F 1I a 2Q 5k bs.",1p:"1F 1I a 2Q bu.",2o:"1F 1I a 2Q 2o.",6U:"1F 1I a 2Q 2o (bv).",6W:"7o 7p 7q 5n bx¼bz bB 5n.",3k:"1F 1I a 2Q 3k.",6X:"7o 7p 7q bJ bL 5n.",57:"1F 1I 9n 57",6S:"1F 1I 7M bN G bP.",6N:"1F 1I a G 7f {0} 7w {1}.",6L:"1F 1I a G bU 77 4C 7C 3L {0}.",7B:"1F 1I a G bW 77 4C 7C 3L {0}."},5F:{1S:u(){l.5a();Y(D i=0,E;E=l.1u[i++];){l.4b(E)}C l.2Q()},E:u(E){l.7F(E);l.4b(E);l.3E()},3E:u(2N){B(2N)q.1i(l.2y,2N);l.F.3E?l.F.3E(l.2y,l):l.82()},5r:u(){B(q.L.5r)q(l.5A).5r();l.5a();l.5z();l.1u.3j(l.F.3c)},3t:u(7D){C q(7D)[0]},2N:u(){C q("8f."+l.F.3c,l.6Y)},2P:u(E){l.2y={};l.1W=$([]);l.2p=$([])},5a:u(){l.2P();l.2p=l.2N().1w(l.2w);l.1W.1w(l.2w)},7F:u(E){l.2P();l.2p=l.2N().5b(l.46(l.3t(E)))},4b:u(E){E=l.3t(E);q(E).3j(l.F.3c);D 22=l.22(E);Y(D i=0,1O;1O=22[i++];){3J{D 2a=q.O.1l[1O.2b](q.3d(E.G),E,1O.4S);B(2a===-1)30;B(!2a){q(E).2K(l.F.3c);l.7O(1O,E);30}}3C(e){l.F.3l&&1e.2V&&2V.1m("c8 c9 ca cc E "+E.S+", 4b 7M \'"+1O.2b+"\' 2b");9F e}}},21:u(S,1O){D m=l.F.3v[S];C m&&(m.1Z==2G?m:m[1O.2b])},7O:u(1O,E){D S=l.46(E),P=1O.4S;l.2y[S]=(E.3s||l.21(S,1O)||q.O.3v[1O.2b]||"<7S>ce: cf 21 cg Y "+S+"</7S>").1N("{0}",(P.1Z==3w?P[0]:P)||"").1N("{1}",P[1]||"")},2Q:u(){B(l.7X()){l.3E();C 1a}N{l.5z();B(l.F.7V){l.F.7V(l.5A);C 1a}C 11}},7X:u(){D 4F=0;q.16(l.2y,u(){4F++});C 4F},5z:u(){l.3b("8b")},3b:u(5v){D 3n=l;u 4o(){C 3n["3L"+5v]}B(l.F.4u){4o().1w(4o().3H(l.F.4u))}4o()[5v.2n()]();C l},82:u(){D 2t=11;Y(D 4r 27 l.2y){B(2t&&l.F.84){B(l.4p&&l.2y[l.4p.S])l.4p.4P();N{3J{D E=q("#"+4r);B(E.I)E[0].4P()}3C(e){l.F.3l&&1e.2V&&2V.1m(e)}}2t=1a}l.8c(4r,l.2y[4r])}l.2p=l.2p.2l(l.1W);l.3b("8b").3b("cv")},8c:u(S,21){D 1m=l.2N().5b(S);B(1m.I){B(1m.1s("8g")){1m.2m(21)}}N{1m=q("<8f>").1s({"Y":S,8g:11}).2K(l.F.3c).2m(21);B(l.F.4u){1m=1m.1A().1D().4t("<"+l.F.4u+">").1q()}B(!l.4f.3K(1m).I)l.F.6z?l.F.6z(1m,q("#"+S)):1m.8i("#"+S)}l.1W.1w(1m)},22:u(E){B(!l.R(E))C[];D 22=[];q.16(l.R(E),u(2M,G){22[22.I]={2b:2M,4S:G}});C 22},R:u(E){C l.F.22?l.F.22[l.46(E)]:l.F.6A?q(E).R()[l.F.6A]:q(E).R()},46:u(E){D S=(/3P|4i/i.1j(E.H))?E.1f:E.S;B(!S){D 4T=E.1S.S,4U=/[^a-a5-2s-9\\-5I]/g;S=E.S=(4T?4T.1N(4U,""):"")+E.1f.1N(4U,"")}C S}},3z:u(G,E){53(E.1H.2n()){35\'3x\':C q("2j:3D",E).I;35\'3W\':B(/3P|4i/i.1j(E.H))C q(E.1S||W).3e(\'[@1f="\'+E.1f+\'"]:4M\').I}C G.I},7s:u(P,E){C l.5C[U P]?l.5C[U P](P,E):11},5C:{"69":u(P,E){C P},"1T":u(P,E){C!!q(P,E.1S).I},"u":u(P,E){C P(E)}},1l:{1k:u(G,E,P){B(!q.O.7s(P,E))C-1;53(E.1H.2n()){35\'3x\':D V=q("2j:3D",E);C V.I>0&&(E.H=="3x-ad"||V[0].G.I>0);35\'3W\':53(E.H.2n()){35\'4i\':35\'3P\':C q.O.3z(G,E)>0}am:C G.I>0}},ap:u(G,E,P){C!q.O.1l.1k(G,E)||P.1j(G)},7Q:u(G,E,P){D I=q.O.3z(G,E);C!q.O.1l.1k(G,E)||I>=P},7U:u(G,E,P){D I=q.O.3z(G,E);C!q.O.1l.1k(G,E)||I<=P},7L:u(G,E,P){D I=q.O.3z(G,E);C!q.O.1l.1k(G,E)||(I>=P[0]&&I<=P[1])},7B:u(G,E,P){C!q.O.1l.1k(G,E)||G>=P},6L:u(G,E,P){C!q.O.1l.1k(G,E)||G<=P},6N:u(G,E,P){C!q.O.1l.1k(G,E)||(G>=P[0]&&G<=P[1])},5k:u(G,E){C!q.O.1l.1k(G,E)||/^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$/i.1j(G)},1p:u(G,E){C!q.O.1l.1k(G,E)||/^(aA?|aB):\\/\\/[A-2s-9](\\.?[A-2s-5j„1vœ1v–][A-2s-56\\-1v„1vœ1v–]*)*(\\/([A-2s-5j„1vœ1v–][A-2s-56\\-\\.1v„1vœ1v–]*)?)*(\\?([A-2s-5j„1vœ1v–][A-2s-56\\-\\.%\\+=&1v„1vœ1v–]*)?)?$/i.1j(G)},2o:u(G,E){C!q.O.1l.1k(G,E)||!/aK|8K/.1j(1P 5g(G))},6U:u(G,E){C!q.O.1l.1k(G,E)||/^\\d{4}[/-]\\d{1,2}[/-]\\d{1,2}$/.1j(G)},6W:u(G,E){C!q.O.1l.1k(G,E)||/^\\d\\d?\\.\\d\\d?\\.\\d\\d\\d?\\d?$/.1j(G)},3k:u(G,E){C!q.O.1l.1k(G,E)||/^-?[,0-9]+(\\.\\d+)?$/.1j(G)},6X:u(G,E){C!q.O.1l.1k(G,E)||/^-?[\\.0-9]+(,\\d+)?$/.1j(G)},57:u(G,E){C!q.O.1l.1k(G,E)||/^\\d+$/.1j(G)},6S:u(G,E,P){C G==q(""+P).1R()}},aU:u(1f,2b,21){q.O.1l[1f]=2b;q.O.3v[1f]=21}});(u(){u 2g(1f,2b){B(!3w.5F[1f]){3w.5F[1f]=2b}};2g("cN",u(1z,26){26=26||1e;Y(D i=0;i<l.I;i++)1z.3S(26,l[i],i,l)});2g("cO",u(1z,26){26=26||1e;Y(D i=0;i<l.I;i++)B(!1z.3S(26,l[i],i,l))C 1a;C 11});2g("cR",u(1z,26){26=26||1e;Y(D i=0;i<l.I;i++)B(1z.3S(26,l[i],i,l))C 11;C 1a});2g("4J",u(1z,26){26=26||1e;D r=[];Y(D i=0;i<l.I;i++)r[r.I]=1z.3S(26,l[i],i,l);C r});2g("1x",u(1z,26){26=26||1e;D r=[];Y(D i=0;i<l.I;i++)B(1z.3S(26,l[i],i,l))r[r.I]=l[i];C r});2g("1M",u(ae,9b){Y(D i=9b||0;i<l.I;i++)B(l[i]===ae)C i;C-1});2g("8Y",u(){C l.1x(u(E,2X,8u){C 8u.1M(E)>=2X})})})();(u($){D 2i,5Q,3B,7P,29,8V,6p;$.L.aW=u(F){F=$.1i({},17.cZ.4k,F);B(!2i){2i=$(\'<23 S="d0"><8w></8w><p 4L="1K"></p><p 4L="1p"></p></23>\').1A().K({1Y:\'43\',d1:"d2"}).6a(\'1K\');5Q=$(\'8w\',2i);3B=$(\'p.1K\',2i);7P=$(\'p.1p\',2i)}$(l).1x(\'[@3s]\').16(u(){l.4e=F}).2S("4Y",aj).2S(F.T,6x);C l};u 6x(T){B(l.4e.93)6p=3g(1D,l.4e.93);N 1D();B(l.4e.aZ)$(\'1K\').2S(\'8B\',4a);4a(T);$(l).2S(\'70\',1A)}u aj(){B(l==29||!l.3s)C;29=l;D 6i=$(l),F=l.4e;D 3s=8V=6i.1s(\'3s\');6i.1s(\'3s\',\'\');B(F.a9){5Q.1A();3B.2m(F.a9.3S(l)).1D()}N B(F.94){D 7R=3s.4O(F.94);B(7R.I>1)5Q.2m(7R.85()).1D();3B.5P();Y(D i=0,8z;8z=7R[i];i++){B(i>0)3B.3K("<br/>");3B.3K(8z)}B(3B.2m())3B.1D();N 3B.1A()}N{5Q.2m(3s);3B.1A()}D 3V=(6i.1s(\'3V\')||6i.1s(\'3F\'));B(F.b0&&3V)7P.2m(3V.1N(\'dk://\',\'\')).1D();N 7P.1A();B(F.67){2i.2K(F.67)}B(F.96&&$.18.1y&&/aS\\s(5\\.5|6\\.)/.1j(8Z.90)){2i.16(u(){D 5o=$(l).K(\'91\');B(5o.2F(/^1p\\(["\'](.*\\.dm)["\']\\)$/i)){5o=4K.$1;$(l).K({\'91\':\'2x\',\'1x\':"dn:dr.ax.ds(bY=11, du=dv, 3F=\'"+5o+"\')"});$(l).16(u(){D 1Y=$(l).K(\'1Y\');B(1Y!=\'43\'&&1Y!=\'5y\')$(l).K(\'1Y\',\'5y\')})}})}}u 1D(){6p=19;2i.1D();4a()}u 4a(T){B(29==19){$(\'1K\').6M(\'8B\',4a);C}D 2u=2i[0].8F;D 2v=2i[0].8H;B(T){2u=T.8D+15;2v=T.aD+15;2i.K({2u:2u+\'2q\',2v:2v+\'2q\'})}D v=aI(),h=2i[0];B(v.x+v.cx<h.8F+h.3U){2u-=h.3U+20;2i.K({2u:2u+\'2q\'})}B(v.y+v.cy<h.8H+h.2T){2v-=h.2T+20;2i.K({2v:2v+\'2q\'})}}u aI(){D e=W.37||{},b=W.1K||{},w=1e;u 4I(){D v=dA;Y(D i=0;i<17.I;i++){D n=17[i];B(n&&n<v)v=n}C v}C{x:w.8P||e.32||b.32||0,y:w.8O||e.2Y||b.2Y||0,cx:4I(e.61,b.61,w.8M),cy:4I(e.48,b.48,w.5S)}}u 1A(){B(6p)ak(6p);29=19;2i.1A();B(l.4e.67){2i.3j(l.4e.67)}$(l).1s(\'3s\',8V).6M(\'70\',1A);B(l.4e.96&&$.18.1y&&/aS\\s(5\\.5|6\\.)/.1j(8Z.90)){2i.16(u(){$(l).K({\'1x\':\'\',91:\'\'})})}}$.L.aW.4k={93:e9,T:"4Y",aZ:1a,b0:11,94:19,67:19,96:1a}})(q);q.1i(q.L,{b1:u(V){D O=1P q.O(V,l[0]);O.1u=l.3e(":3W:2l(:3Q):2l(:2P)").4P(u(){O.4p=l});B(O.F.7I){l.3Q(u(T){B(O.F.3l)T.40();C O.1S()})}B(O.F.T){O.1u.2S(O.F.T,u(){O.E(l)})}C O},1w:u(t){C l.7a(q.3Z(l.2O(),t))},5b:u(S){C l.1x("[@Y=\'"+S+"\']")}});q.1i(q.2r[":"],{ba:"!q.3d(a.G)",bb:"!!q.3d(a.G)"});q.O=u(V,1S){l.F=q.1i({},q.O.4k,V);l.5A=1S;l.4f=l.F.4Z;l.6Y=l.4f.I&&l.4f||q(1S);l.2w=l.F.7e.2g(l.F.4Z);l.2P()};q.1i(q.O,{4k:{3v:{},3c:"1m",84:11,7e:q([]),4Z:q([]),7I:11},bd:u(F){q.1i(q.O.4k,F)},3v:{1k:"bf bg 2Z 1k.",7U:"1F 1I a G 9e bj bm {0} 5m.",7Q:"1F 1I a G bn at bo {0} 5m.",7L:"1F 1I a G 7f {0} 7w {1} 5m bq.",5k:"1F 1I a 2Q 5k bs.",1p:"1F 1I a 2Q bu.",2o:"1F 1I a 2Q 2o.",6U:"1F 1I a 2Q 2o (bv).",6W:"7o 7p 7q 5n bx¼bz bB 5n.",3k:"1F 1I a 2Q 3k.",6X:"7o 7p 7q bJ bL 5n.",57:"1F 1I 9n 57",6S:"1F 1I 7M bN G bP.",6N:"1F 1I a G 7f {0} 7w {1}.",6L:"1F 1I a G bU 77 4C 7C 3L {0}.",7B:"1F 1I a G bW 77 4C 7C 3L {0}."},5F:{1S:u(){l.5a();Y(D i=0,E;E=l.1u[i++];){l.4b(E)}C l.2Q()},E:u(E){l.7F(E);l.4b(E);l.3E()},3E:u(2N){B(2N)q.1i(l.2y,2N);l.F.3E?l.F.3E(l.2y,l):l.82()},5r:u(){B(q.L.5r)q(l.5A).5r();l.5a();l.5z();l.1u.3j(l.F.3c)},3t:u(7D){C q(7D)[0]},2N:u(){C q("8f."+l.F.3c,l.6Y)},2P:u(E){l.2y={};l.1W=$([]);l.2p=$([])},5a:u(){l.2P();l.2p=l.2N().1w(l.2w);l.1W.1w(l.2w)},7F:u(E){l.2P();l.2p=l.2N().5b(l.46(l.3t(E)))},4b:u(E){E=l.3t(E);q(E).3j(l.F.3c);D 22=l.22(E);Y(D i=0,1O;1O=22[i++];){3J{D 2a=q.O.1l[1O.2b](q.3d(E.G),E,1O.4S);B(2a===-1)30;B(!2a){q(E).2K(l.F.3c);l.7O(1O,E);30}}3C(e){l.F.3l&&1e.2V&&2V.1m("c8 c9 ca cc E "+E.S+", 4b 7M \'"+1O.2b+"\' 2b");9F e}}},21:u(S,1O){D m=l.F.3v[S];C m&&(m.1Z==2G?m:m[1O.2b])},7O:u(1O,E){D S=l.46(E),P=1O.4S;l.2y[S]=(E.3s||l.21(S,1O)||q.O.3v[1O.2b]||"<7S>ce: cf 21 cg Y "+S+"</7S>").1N("{0}",(P.1Z==3w?P[0]:P)||"").1N("{1}",P[1]||"")},2Q:u(){B(l.7X()){l.3E();C 1a}N{l.5z();B(l.F.7V){l.F.7V(l.5A);C 1a}C 11}},7X:u(){D 4F=0;q.16(l.2y,u(){4F++});C 4F},5z:u(){l.3b("8b")},3b:u(5v){D 3n=l;u 4o(){C 3n["3L"+5v]}B(l.F.4u){4o().1w(4o().3H(l.F.4u))}4o()[5v.2n()]();C l},82:u(){D 2t=11;Y(D 4r 27 l.2y){B(2t&&l.F.84){B(l.4p&&l.2y[l.4p.S])l.4p.4P();N{3J{D E=q("#"+4r);B(E.I)E[0].4P()}3C(e){l.F.3l&&1e.2V&&2V.1m(e)}}2t=1a}l.8c(4r,l.2y[4r])}l.2p=l.2p.2l(l.1W);l.3b("8b").3b("cv")},8c:u(S,21){D 1m=l.2N().5b(S);B(1m.I){B(1m.1s("8g")){1m.2m(21)}}N{1m=q("<8f>").1s({"Y":S,8g:11}).2K(l.F.3c).2m(21);B(l.F.4u){1m=1m.1A().1D().4t("<"+l.F.4u+">").1q()}B(!l.4f.3K(1m).I)l.F.6z?l.F.6z(1m,q("#"+S)):1m.8i("#"+S)}l.1W.1w(1m)},22:u(E){B(!l.R(E))C[];D 22=[];q.16(l.R(E),u(2M,G){22[22.I]={2b:2M,4S:G}});C 22},R:u(E){C l.F.22?l.F.22[l.46(E)]:l.F.6A?q(E).R()[l.F.6A]:q(E).R()},46:u(E){D S=(/3P|4i/i.1j(E.H))?E.1f:E.S;B(!S){D 4T=E.1S.S,4U=/[^a-a5-2s-9\\-5I]/g;S=E.S=(4T?4T.1N(4U,""):"")+E.1f.1N(4U,"")}C S}},3z:u(G,E){53(E.1H.2n()){35\'3x\':C q("2j:3D",E).I;35\'3W\':B(/3P|4i/i.1j(E.H))C q(E.1S||W).3e(\'[@1f="\'+E.1f+\'"]:4M\').I}C G.I},7s:u(P,E){C l.5C[U P]?l.5C[U P](P,E):11},5C:{"69":u(P,E){C P},"1T":u(P,E){C!!q(P,E.1S).I},"u":u(P,E){C P(E)}},1l:{1k:u(G,E,P){B(!q.O.7s(P,E))C-1;53(E.1H.2n()){35\'3x\':D V=q("2j:3D",E);C V.I>0&&(E.H=="3x-ad"||V[0].G.I>0);35\'3W\':53(E.H.2n()){35\'4i\':35\'3P\':C q.O.3z(G,E)>0}am:C G.I>0}},ap:u(G,E,P){C!q.O.1l.1k(G,E)||P.1j(G)},7Q:u(G,E,P){D I=q.O.3z(G,E);C!q.O.1l.1k(G,E)||I>=P},7U:u(G,E,P){D I=q.O.3z(G,E);C!q.O.1l.1k(G,E)||I<=P},7L:u(G,E,P){D I=q.O.3z(G,E);C!q.O.1l.1k(G,E)||(I>=P[0]&&I<=P[1])},7B:u(G,E,P){C!q.O.1l.1k(G,E)||G>=P},6L:u(G,E,P){C!q.O.1l.1k(G,E)||G<=P},6N:u(G,E,P){C!q.O.1l.1k(G,E)||(G>=P[0]&&G<=P[1])},5k:u(G,E){C!q.O.1l.1k(G,E)||/^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$/i.1j(G)},1p:u(G,E){C!q.O.1l.1k(G,E)||/^(aA?|aB):\\/\\/[A-2s-9](\\.?[A-2s-5j„1vœ1v–][A-2s-56\\-1v„1vœ1v–]*)*(\\/([A-2s-5j„1vœ1v–][A-2s-56\\-\\.1v„1vœ1v–]*)?)*(\\?([A-2s-5j„1vœ1v–][A-2s-56\\-\\.%\\+=&1v„1vœ1v–]*)?)?$/i.1j(G)},2o:u(G,E){C!q.O.1l.1k(G,E)||!/aK|8K/.1j(1P 5g(G))},6U:u(G,E){C!q.O.1l.1k(G,E)||/^\\d{4}[/-]\\d{1,2}[/-]\\d{1,2}$/.1j(G)},6W:u(G,E){C!q.O.1l.1k(G,E)||/^\\d\\d?\\.\\d\\d?\\.\\d\\d\\d?\\d?$/.1j(G)},3k:u(G,E){C!q.O.1l.1k(G,E)||/^-?[,0-9]+(\\.\\d+)?$/.1j(G)},6X:u(G,E){C!q.O.1l.1k(G,E)||/^-?[\\.0-9]+(,\\d+)?$/.1j(G)},57:u(G,E){C!q.O.1l.1k(G,E)||/^\\d+$/.1j(G)},6S:u(G,E,P){C G==q(""+P).1R()}},aU:u(1f,2b,21){q.O.1l[1f]=2b;q.O.3v[1f]=21}});(u($){$.L.2f=u(V){C l.16(u(){$.2f(l,V)})};$.2f=u(1V,V){D F={\'5i\':19,\'2f\':\'6h\',\'33\':eb,\'7t\':\'9q\',\'1o\':\'b3\',\'4L\':\'2f\',\'1g\':\'3Y\'};B(V)$.1i(F,V);B(F.5i===19)D 1u=$(1V).5i();N D 1u=$(1V).5i(F.5i);B(1u.I>1){$(1V).K(\'1Y\',\'5y\');$(1V).K(\'1g\',F["1g"]);$(1V).2K(F["4L"]);Y(D i=0;i<1u.I;i++){$(1u[i]).K(\'z-2X\',2G(1u.I-i));$(1u[i]).K(\'1Y\',\'43\');$(1u[i]).1A()};B(F["2f"]=="6h"){3g(u(){$.2f.7N(1u,F,1,0)},F.33);$(1u[0]).1D()}N B(F["2f"]=="55"){3g(u(){do{29=4g.bX(4g.55()*1u.I)}2J(29==0)$.2f.7N(1u,F,29,0)},F.33);$(1u[0]).1D()}N 7E(\'q: 2f: 9w "2f" 9z 9A be "6h" 4C "55"\')}};$.2f.7N=u(1u,F,29,2z){B(F["7t"]==\'bS\'){$(1u[2z]).bA(F.1o,$(1u[29]).bD(F.1o))}N B(F["7t"]==\'9q\'){$(1u[2z]).bH(F.1o);$(1u[29]).bM(F.1o)}N 7E(\'q: 2f: 9w "7t" 9z 9A be "bS" 4C "9q"\');B(F["2f"]=="6h"){B((29+1)<1u.I){29=29+1;2z=29-1}N{29=0;2z=1u.I-1}}N B(F["2f"]=="55"){2z=29;2J(29==2z)29=4g.bX(4g.55()*1u.I)}N 7E(\'q: 2f: 9w "2f" 9z 9A be "6h" 4C "55"\');3g((u(){$.2f.7N(1u,F,29,2z)}),F.33)}})(q);(u($){$.3q=u(){l.3X={};C};$.3q.5F={5Z:u(){D Q={"S":19,"4Q":4c,"7l":1a,"6C":1a,"14":19,"38":u(){},"25":[]};u 5J(L){C(!!L&&U L!="1T"&&U L[0]=="1c"&&4K("u","i").1j(L+""))};D i=0;D 9M=1a;B(U 17[i]=="42"&&17.I>1){9M=11;i++}B(U 17[i]=="42"){Y(D 2j 27 17[i])B(U Q[2j]!="1c")Q[2j]=17[i][2j];i++}B(U 17[i]=="3k"||(U 17[i]=="1T"&&17[i].2F(4K("^[0-9]+[cq]$"))))Q["4Q"]=17[i++];B(U 17[i]=="69")Q["7l"]=17[i++];B(U 17[i]=="69")Q["6C"]=17[i++];B(U 17[i]=="42"&&U 17[i+1]=="1T"&&5J(17[i][17[i+1]])){Q["14"]=17[i++];Q["38"]=17[i++]}N B(U 17[i]!="1c"&&(5J(17[i])||U 17[i]=="1T"))Q["38"]=17[i++];2J(U 17[i]!="1c")Q["25"].1w(17[i++]);B(9M){B(U 17[1]=="42"){Y(D 2j 27 17[0])B(U Q[2j]!="1c"&&U 17[1][2j]=="1c")Q[2j]=17[0][2j]}N{Y(D 2j 27 17[0])B(U Q[2j]!="1c")Q[2j]=17[0][2j]}i++}Q["7x"]=l;Q["8d"]=19;D 2F=2G(Q["4Q"]).2F(4K("^([0-9]+)([cq])$"));B(2F&&2F[0]!="1c"&&2F[1]!="1c")Q["4Q"]=2G(1b(2F[1])*{s:4c,m:4c*60,h:4c*60*60,d:4c*60*60*24,w:4c*60*60*24*7}[2F[2]]);B(Q["S"]==19)Q["S"]=(2G(Q["7l"])+":"+2G(Q["6C"])+":"+2G(Q["4Q"])+":"+2G(Q["14"])+":"+2G(Q["38"])+":"+2G(Q["25"]));B(Q["6C"])B(U l.3X[Q["S"]]!="1c")C l.3X[Q["S"]];B(!5J(Q["38"])){B(Q["14"]!=19&&U Q["14"]=="42"&&U Q["38"]=="1T"&&5J(Q["14"][Q["38"]]))Q["38"]=Q["14"][Q["38"]];N Q["38"]=6D("u () { "+Q["38"]+" }")}Q["8d"]=l.6G(Q);l.3X[Q["S"]]=Q;C Q},8C:u(Q){B(U Q=="1T")Q=l.3X[Q];Q["8d"]=l.6G(Q);C Q},6G:u(Q){D ac=u(){D 14=(Q["14"]!=19?Q["14"]:Q);(Q["38"]).1C(14,Q["25"]);B(U(Q["7x"]).3X[Q["S"]]!="1c"&&Q["7l"])(Q["7x"]).6G(Q);N 6m(Q["7x"]).3X[Q["S"]]};C 3g(ac,Q["4Q"])},8E:u(Q){B(U Q=="1T")Q=l.3X[Q];B(U Q=="42"){ak(Q["8d"]);6m l.3X[Q["S"]]}}};$.1i({3q$:1P $.3q(),5Z:u(){C $.3q$.5Z.1C($.3q$,17)},8C:u(){C $.3q$.8C.1C($.3q$,17)},8E:u(){C $.3q$.8E.1C($.3q$,17)}});$.L.1i({5Z:u(){D a=[{}];Y(D i=0;i<17.I;i++)a.1w(17[i]);C l.16(u(){a[0]={"S":l,"14":l};C $.5Z.1C($,a)})}})})(q);(u($){$.1i({5p$:19,3l:u(aO){D aR=($.5p$==11?11:1a);$.5p$=(aO?11:1a);C aR},68:u(21){B($.5p$==11)2V.3l(21)}});$.L.1i({68:u(21){B($.5p$==11){C l.16(u(){B(U 21!=="1c")$.68(21);$.68(l)})}}});$(W).34(u(){D 7d=$("2m").1s("3l");B(7d=="11"||7d=="1a")$.3l(7d=="11"?11:1a)});$(W).34(u(){B(U 1e.2V==="1c"){u cw(14){D 1L=19;B(U 14==="1c")1L="[1c]";N B(U 14==="69")1L=(14?"11":"1a");N B(U 14==="3k")1L=""+14;N B(U 14==="1T")1L=14;N B(U 14==="u")1L=14;N B(U 14==="42"){B(U 14.31!=="1c"){B(14.31==1){1L=\'&9m;\';1L+=14.1H.2n();Y(D i=0;i<14.9r.I;i++)1L+=\' \'+14.9r[i].1H.2n()+\'="\'+14.9r[i].6l+\'"\';1L+=\'&9t;\'}N B(14.31==2)1L=14.1H+\'="\'+14.6l;N B(14.31==3)1L=14.6l}N B(U 14.ch!=="1c")1L=14.ch();N B(U 14.5B!=="1c")1L=14.5B()}B(1L==19)1L="[fk]";C 1L};$(W).34(u(){$("1K").3K(\'<23 S="4D"><4B></4B></23>\');$("#4D").K("1G","2x").K("cW","d6").K("dg","#dl").K("dw","#dx").K("6u","6V 5d 6V 5d").K("62","6w b7 #dI").K("73","6w 6w 6w 6w");$("#4D 4B").K("73","5d 5d 5d 5d").K("97","en")});D 8X=["68","3l","eG","eL","1m","eX","6g","f3","fa","fh","4Q","fj","4F","cF","cI","cV"];1e.2V={};Y(D i=0;i<8X.I;i++){1e.2V[8X[i]]=u(a6){$(\'#4D\').K("1G",$.5p$==11?"44":"2x");$(\'#4D 4B\').3K(\'<1B>\'+cw(a6)+\'</1B>\').K;$("#4D 4B 1B").K("e6","58 b7 #eN").K("6u","58 6V 58 6V")}}1e.2V["4D"]=11}})})(q);',62,951,'|||||||||||||||||||||this|||||jQuery||||function|||||||if|return|var|element|settings|value|type|length|elem|css|fn||else|validator|param|ctx|data|id|event|typeof|options|document||for|||true|prop||obj||each|arguments|browser|null|false|parseInt|undefined|ret|window|name|height|callback|extend|test|required|methods|error|xml|speed|url|parent|cur|attr|parentNode|elements|Ã|push|filter|msie|handler|hide|li|apply|show|style|Please|display|nodeName|enter|opacity|body|text|indexOf|replace|rule|new|tabs|val|form|string|status|container|toShow|hash|position|constructor||message|rules|div||args|scope|in|firstChild|current|result|method|width|trigger|events|alternation|add|nav|helper|option|className|not|html|toLowerCase|date|toHide|px|expr|Z0|first|left|top|containers|none|errorList|last|hidden|global|expires|isFunction|arg|match|String|context|opt|while|addClass|initial|key|errors|get|reset|valid|num|bind|offsetHeight|queue|console|animate|index|scrollTop|is|break|nodeType|scrollLeft|timeout|ready|case|old|documentElement|func|easing|safari|toggle|errorClass|trim|find|end|setTimeout|table|target|removeClass|number|debug|elems|self|disabled|visible|scheduler|params|title|clean|tbody|messages|Array|select|ifModified|getLength|complete|tBody|catch|selected|showErrors|src|opera|parents|bookmarkable|try|append|to|orig|nth|done|radio|submit|duration|call|span|offsetWidth|href|input|bucket|auto|merge|preventDefault|tab|object|absolute|block|innerHTML|findId|click|clientHeight|remove|update|check|1000|borderLeftWidth|tSettings|labelContainer|Math|nextSibling|checkbox|cookie|defaults|borderTopWidth|mozilla|tb|which|lastActive|script|elementID|selectedClass|wrap|wrapper|overflow|load|clicked|size|firstNum|remote|ol|or|jQueryDebug|pushStack|count|encodeURIComponent|oid|min|map|RegExp|class|checked|returnValue|split|focus|time|fix|parameters|formId|idcleanup|cssFloat|now|curAnim|mouseover|errorLabelContainer||grep|timers|switch|static|random|9_|digits|1px|stopPropagation|prepareForm|forId|custom|0px|guid|res|Date|sibling|children|9Ã|email|success|characters|ein|image|_debug|oldblock|resetForm|re|boxModel|exec|that|tmp|insertBefore|relative|hideErrors|currentForm|toString|dependTypes|location|hideAnim|prototype|showAnim|onShow|_|_isfn|Number|scroll|st|ajaxHistory|fx|empty|tTitle|op|innerHeight|substr|childNodes|handlers|makeArray|on|originalEvent|schedule||clientWidth|border|removeChild|readyList|curCSS|onClick|extraClass|log|boolean|appendTo|onreadystatechange|multiFilter|ownerDocument|has|path|dir|sequence|source|re2|sl|nodeValue|delete|currentStyle|domManip|tID|containerClass|setInterval|domain|disabledClass|padding|onHide|4px|handle|locked|errorPlacement|meta|trueClick|protect|eval|ul|cloneNode|_schedule|oWidth|tr|toUpperCase|absparent|maxValue|unbind|rangeValue|inArray|isReady|token|foundToken|equalTo|doc|dateISO|10px|dateDE|numberDE|errorContext|diff|mouseout|Function|styleFloat|margin|secure|getTime|parseFloat|than|step|oldDisplay|setArray|ajax|ajaxSettings|req|errorContainer|between|getAttribute|oHeight|setRequestHeader|modRes|ival|repeat|handleError|async|Bitte|geben|Sie|lastModified|depend|animation|responseText|jquery|and|_scheduler|readyState|button|tag|minValue|equal|selector|alert|prepareElement|max|tabEvents|onsubmit|tagName|child|rangeLength|the|_next|formatAndAdd|tUrl|minLength|parts|strong|expression|maxLength|submitHandler|XMLHttpRequest|countErrors|navClass|mergeNum|defaultView|msie6|defaultShowErrors|minHeight|focusInvalid|shift|visibility|cachedWidth|currentWidth|cachedFontSize|currentFontSize|Hide|showError|_handle|toShowId|label|generated|hideClass|insertAfter|remoteUrls|switchTab|loadingClass|blur|disableTab|pos|deep|clone|startTime|parPos|swap|array|float|h3|isXMLDoc|inv|part|chars|mousemove|reschedule|pageX|cancel|offsetLeft|matched|offsetTop|triggered|slice|NaN|lastToggle|innerWidth|handleHover|pageYOffset|pageXOffset|getElementById|safariTimer|getComputedStyle|unload|els|oldTitle|fn2|names|unique|navigator|userAgent|backgroundImage|from|delay|showBody|lastNum|fixPNG|paddingRight|GET|classFilter|pass|offset|00|_resort|no|isTimeout|dataType|requestDone|active|file|Modified|getResponseHeader|lt|only|evalScripts|globalEval|fade|attributes|clearInterval|gt|join|cookies|parameter|substring|cookieValue|must|either|appendChild|relparent|paddingLeft|paddingTop|throw|returnObject|bgiframe|createElement|hasSelectedClass|unFocus|second|override|jq|heights|font|watchFontSize|_setAutoHeight|cachedHeight|currentHeight|fxSpeed|fxSlide|fxFade|fxShow|fxHide|clientX|hideSpeed|showSpeed|scrollTo|scrollX|scrollY|zA|msg|triggerTab|enableTab|bodyHandler|prevObject|tabEvent|trampoline|multiple|subject|getPropertyValue|newProp|alpha|100|save|clearTimeout||default|zoom|fl|regex|webkit|prepend|before||after|removeAttr|contains|Microsoft|tl|getElementsByTagName|https|ftp|parse|pageY|_prefix|even|odd|unshift|viewport|srcElement|Invalid|DOMContentLoaded|__ie_init|one|onoff|_toggle|state|old_value|MSIE|swing|addMethod|dequeue|Tooltip|timer|oldOverflow|track|showURL|validate|force|normal|getScript|POST|processData|solid|ajaxStart|ActiveXObject|blank|filled|contentType|setDefaults||This|field|beforeSend|ajaxSend|longer|notmodified||then|of|least|ajaxStop|long||address||URL|ISO|ajaxError|gÃ|httpSuccess|ltiges|slideUp|Datum|200|slideDown|httpNotModified|Last|304|fadeOut|xmlRes|eine|httpData|Nummer|fadeIn|same|json|again|ajaxComplete|ajaxSuccess|slide|execScript|less|ywdhms|greater|floor|enabled|setTime|toUTCString|previousSibling|_height|_width|borderBottomWidth|paddingBottom|borderRightWidth|offsetParent|exception|occured|when|marginLeft|checking|marginTop|Warning|No|defined|toJSONString|iframe|hashPrefix|remoteCount|tabStruct|fxAutoHeight|behaviour|watch|fxShowSpeed|smhdw|fxHideSpeed|action||tempForm|Show|object2text|||siblings|exclude|password|Loading|8230|There|trace|such|initialize|profile|createTextNode|FORM|reverse|weight|forEach|every|Top|Bottom|some|Left|Width|right|profileEnd|fontFamily|tfoot|th|callee|tooltip|zIndex|3000|htmlFor|readonly|readOnly|monospace|getAttributeNode|setAttribute|ig|concat|compatible|compatMode|next|prev|prependTo|backgroundColor|removeAttribute|toggleClass|lastChild|http|ffffff|png|progid||u0128|uFFFF|DXImageTransform|AlphaImageLoader|continue|sizingMethod|crop|color|000000|td|clientY|Infinity|cancelBubble|fromElement|toElement|relatedTarget|removeEventListener|dblclick|mouseup|666699|change|keydown|keypress|keyup|thead|addEventListener|mousedown|write|resize|scr|ipt|defer|loaded|slideToggle|fadeTo|Object|hover|slow|600|fast|400|linear|cos|borderBottom|PI|10000|250|loadIfModified|2000|serialize|textContent|getIfModified|getJSON|post|ajaxTimeout|ajaxSetup|application|www||urlencoded|20px|XMLHTTP|open||Content|Type|If|Since|Thu|01|Jan|1970|GMT|Requested|With|overrideMimeType|Connection|close|abort|info|send|protocol|300|content|warn|responseXML|cccccc|center|horizontal|vertical|365|Right|invalid|textarea|decodeURIComponent|scrollHeight|assert|noConflict|scrollWidth|outerHeight|outerWidth|inline|dirxml|bgIframe|javascript|frameborder|tabindex|Alpha|Opacity|group|CSS1Compat|line|loading|500|removeExpression|sort|groupEnd|setExpression|timeEnd|unknown'.split('|'),0,{}))
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr  5 11:56:33 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 336447528ED; Thu,  5 Apr 2007 11:56:33 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ChangeLog ase.cgi.profile.pl ase.cgi.resign....
Message-Id: <20070405095633.336447528ED@mail.ossp.org>
Date: Thu,  5 Apr 2007 11:56:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Apr-2007 11:56:33
  Branch: HEAD                             Handle: 2007040510563200

  Modified files:
    ossp-pkg/ase            ChangeLog ase.cgi.profile.pl ase.cgi.resign.pl

  Log:
    add more tooltips

  Summary:
    Revision    Changes     Path
    1.24        +1  -1      ossp-pkg/ase/ChangeLog
    1.24        +48 -1      ossp-pkg/ase/ase.cgi.profile.pl
    1.10        +5  -0      ossp-pkg/ase/ase.cgi.resign.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 ChangeLog
  --- ossp-pkg/ase/ChangeLog	5 Apr 2007 09:41:05 -0000	1.23
  +++ ossp-pkg/ase/ChangeLog	5 Apr 2007 09:56:32 -0000	1.24
  @@ -13,7 +13,7 @@
   
     Changes between 0.1.x and 0.2.0 (xx-Oct-2005 to 20-Mar-2007)
   
  -   o Add tooltips to Login, Enrollment and Recovery workflow.
  +   o Add tooltips to Login, Enrollment, Recovery and Profile workflow.
        [Ralf S. Engelschall]
   
      o Switch the login workflow implementation from
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.profile.pl
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 ase.cgi.profile.pl
  --- ossp-pkg/ase/ase.cgi.profile.pl	4 Apr 2007 14:13:35 -0000	1.23
  +++ ossp-pkg/ase/ase.cgi.profile.pl	5 Apr 2007 09:56:32 -0000	1.24
  @@ -139,7 +139,12 @@
   
           #   generate edit button
           $html .= "<p/>";
  -        $html .= "<a class=\"button\" href=\"".$self->url(-mode => "menu-profile", -action => "edit")."\">Edit Profile</a>\n";
  +        my $title = $self->streamline(q{
  +            Edit Profile ::
  +            Use this button to switch to the profile editing form where
  +            you can edit the name, nickname and password.
  +        });
  +        $html .= "<a title=\"$title\" class=\"button\" href=\"".$self->url(-mode => "menu-profile", -action => "edit")."\">Edit Profile</a>\n";
       }
       elsif ($action eq "edit") {
           ##
  @@ -220,6 +225,11 @@
   
           #   generate the input fields
           $html >> "field-name";
  +        my $title = $self->streamline(q{
  +             Name Field ::
  +             Change your real name here, i.e., first name,
  +             optionally your middle initial, and last name.
  +        });
           $html .= $cgi->textfield(
               -id        => 'field_name',
               -class     => 'field',
  @@ -227,6 +237,7 @@
               -default   => $rec->{"me_name"} || '',
               -size      => 40,
               -maxlength => 80,
  +            -title     => $title,
           ) . "<br/>";
           $html .= "<span class=\"annotation\">(<i>firstname lastname</i>, e.g. \"John Doe\")</span><br/>\n";
           if (defined(my $error = $cgi->param("name.error"))) {
  @@ -234,6 +245,13 @@
           }
           $html << 1;
           $html >> "field-nickname";
  +        my $title = $self->streamline(q{
  +             Nickname Field ::
  +             Change or enter a nickname here. This can be used as a
  +             short-hand for logging in to your account and might be
  +             displayed instead of your Email address as a form of spam
  +             prevention. You can leave this field empty if you wish.
  +        });
           $html .= $cgi->textfield(
               -id        => 'field_nickname',
               -class     => 'field',
  @@ -241,6 +259,7 @@
               -default   => $rec->{"me_nickname"} || '',
               -size      => 20,
               -maxlength => 40,
  +            -title     => $title,
           ) . "<br/>";
           $html .= "<span class=\"annotation\">(<i>nickname</i>, e.g. \"john\")</span><br/>\n";
           if (defined(my $error = $cgi->param("nickname.error"))) {
  @@ -248,6 +267,15 @@
           }
           $html << 1;
           $html >> "field-password";
  +        $title = $self->streamline(q{
  +             Password Field ::
  +             Enter a reasonable new password here to protect your account.
  +             The field input is done in blinded mode, so nobody can
  +             gather your password while looking over your shoulders. On
  +             the server side your password is stored in the database in
  +             hashed form only, so you can be certain that nobody is able
  +             to lookup your password in plain text on the server side.
  +        });
           $html .= $cgi->password_field(
               -id        => 'field_password',
               -class     => 'field',
  @@ -255,11 +283,17 @@
               -default   => '',
               -size      => 22,
               -maxlength => 20,
  +            -title     => $title,
           ) . "<br/>";
           $html .= "<span class=\"annotation\">(up to 20 characters)</span><br/>\n";
           if (defined(my $error = $cgi->param("password.error"))) {
               $html .= "<span class=\"error\">$error</span><br/>\n";
           }
  +        $title = $self->streamline(q{
  +             Password Verification Field ::
  +             Enter the new password here again to make sure no error occurs
  +             during the blinded input above.
  +        });
           $html .= $cgi->password_field(
               -id        => 'field_password_verify',
               -class     => 'field',
  @@ -267,6 +301,7 @@
               -default   => '',
               -size      => 22,
               -maxlength => 20,
  +            -title     => $title,
           ) . "<br/>";
           $html .= "<span class=\"annotation\">(retype password here for verification)</span><br/>\n";
           if (defined(my $error = $cgi->param("password_verify.error"))) {
  @@ -274,17 +309,29 @@
           }
           $html << 1;
           $html >> "button-edit";
  +        $title = $self->streamline(q{
  +             Cancel ::
  +             Use this button to cancel the profile edit page and go back
  +             to the profile display page.
  +        });
           $html .= $cgi->submit(
               -class   => 'button',
               -id      => 'button_cancel',
               -name    => 'button.cancel',
               -value   => 'Cancel',
  +            -title   => $title,
           );
  +        $title = $self->streamline(q{
  +             Save ::
  +             Use this button to save the changes to your profile and go
  +             back to the profile display page.
  +        });
           $html .= $cgi->submit(
               -class   => 'button',
               -id      => 'button_save',
               -name    => 'button.save',
               -value   => 'Save',
  +            -title   => $title,
           );
           $html << 1;
       }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.resign.pl
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 ase.cgi.resign.pl
  --- ossp-pkg/ase/ase.cgi.resign.pl	4 Apr 2007 14:13:35 -0000	1.9
  +++ ossp-pkg/ase/ase.cgi.resign.pl	5 Apr 2007 09:56:32 -0000	1.10
  @@ -103,6 +103,10 @@
   
           #   generate the input field: "password"
           $html >> "field-password";
  +        my $title = $self->streamline(q{
  +             Password Field ::
  +             Enter here your account password again.
  +        });
           $html .= $cgi->password_field(
               -id        => 'field_password',
               -class     => 'field',
  @@ -110,6 +114,7 @@
               -default   => '',
               -size      => 22,
               -maxlength => 20,
  +            -title     => $title,
           ) . "<br/>";
           if (defined(my $error = $cgi->param("password.error"))) {
               $html .= "<span class=\"error\">$error</span><br/>\n";
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr  5 12:30:57 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id DC399752FE1; Thu,  5 Apr 2007 12:30:56 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.ui.jquery.js
Message-Id: <20070405103056.DC399752FE1@mail.ossp.org>
Date: Thu,  5 Apr 2007 12:30:56 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Apr-2007 12:30:56
  Branch: HEAD                             Handle: 2007040511305600

  Modified files:
    ossp-pkg/ase            ase.ui.jquery.js

  Log:
    upgrade to a patched jQuery tooltip plugin which handles click better

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/ase/ase.ui.jquery.js
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.ui.jquery.js
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ase.ui.jquery.js
  --- ossp-pkg/ase/ase.ui.jquery.js	5 Apr 2007 09:41:05 -0000	1.3
  +++ ossp-pkg/ase/ase.ui.jquery.js	5 Apr 2007 10:30:56 -0000	1.4
  @@ -1 +1 @@
  -eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('B(U 1e.q=="1c"){1e.1c=1e.1c;D q=u(a,c){B(1e==l)C 1P q(a,c);a=a||W;B(q.2D(a))C 1P q(W)[q.L.34?"34":"4w"](a);B(U a=="1T"){D m=/^[^<]*(<(.|\\s)+>)[^>]*$/.5u(a);B(m)a=q.3t([m[1]]);N C 1P q(c).3e(a)}C l.7a(a.1Z==3w&&a||(a.7v||a.I&&a!=1e&&!a.31&&a[0]!=1c&&a[0].31)&&q.5W(a)||[a])};B(U $!="1c")q.5I$=$;D $=q;q.L=q.5F={7v:"1.1.2",4y:u(){C l.I},I:0,2O:u(2R){C 2R==1c?q.5W(l):l[2R]},4E:u(a){D 1d=q(a);1d.aa=l;C 1d},7a:u(a){l.I=0;[].1w.1C(l,a);C l},16:u(L,25){C q.16(l,L,25)},2X:u(14){D 8o=-1;l.16(u(i){B(l==14)8o=i});C 8o},1s:u(2M,G,H){D 14=2M;B(2M.1Z==2G)B(G==1c)C l.I&&q[H||"1s"](l[0],2M)||1c;N{14={};14[2M]=G}C l.16(u(2X){Y(D 12 27 14)q.1s(H?l.1E:l,12,q.12(l,14[12],H,2X,12))})},K:u(2M,G){C l.1s(2M,G,"65")},1L:u(e){B(U e=="1T")C l.5P().3K(W.cJ(e));D t="";q.16(e||l,u(){q.16(l.5U,u(){B(l.31!=8)t+=l.31!=1?l.6l:q.L.1L([l])})});C t},4t:u(){D a,25=17;C l.16(u(){B(!a)a=q.3t(25,l.6d);D b=a[0].6F(11);l.1t.5x(b,l);2J(b.28)b=b.28;b.9B(l)})},3K:u(){C l.6o(17,11,1,u(a){l.9B(a)})},ar:u(){C l.6o(17,11,-1,u(a){l.5x(a,l.28)})},as:u(){C l.6o(17,1a,1,u(a){l.1t.5x(a,l)})},au:u(){C l.6o(17,1a,-1,u(a){l.1t.5x(a,l.4h)})},3f:u(){C l.aa||q([])},3e:u(t){C l.4E(q.8Y(q.4J(l,u(a){C q.3e(t,a)})),t)},8q:u(8p){C l.4E(q.4J(l,u(a){D a=a.6F(8p!=1c?8p:11);a.$2e=19;C a}))},1x:u(t){C l.4E(q.2D(t)&&q.51(l,u(el,2X){C t.1C(el,[2X])})||q.6c(t,l))},2l:u(t){C l.4E(t.1Z==2G&&q.6c(t,l,11)||q.51(l,u(a){C(t.1Z==3w||t.7v)?q.6O(a,t)<0:a!=t}))},2g:u(t){C l.4E(q.3Z(l.2O(),t.1Z==2G?q(t).2O():t.I!=1c&&(!t.1H||t.1H=="cK")?t:[t]))},2Z:u(2r){C 2r?q.6c(2r,l).I>0:1a},1R:u(1R){C 1R==1c?(l.I?l[0].G:19):l.1s("G",1R)},2m:u(1R){C 1R==1c?(l.I?l[0].45:19):l.5P().3K(1R)},6o:u(25,3h,6g,L){D 8q=l.I>1,a;C l.16(u(){B(!a){a=q.3t(25,l.6d);B(6g<0)a.cL()}D 14=l;B(3h&&q.1H(l,"3h")&&q.1H(a[0],"6I"))14=l.az("3u")[0]||l.9B(W.9I("3u"));q.16(a,u(){L.1C(14,[8q?l.6F(11):l])})})}};q.1i=q.L.1i=u(){D 3i=17[0],a=1;B(17.I==1){3i=l;a=0}D 12;2J(12=17[a++])Y(D i 27 12)3i[i]=12[i];C 3i};q.1i({eY:u(){B(q.5I$)$=q.5I$;C q},2D:u(L){C!!L&&U L!="1T"&&!L.1H&&L.1Z!=3w&&/u/i.1j(L+"")},8x:u(J){C J.7J&&J.6d&&!J.6d.1K},1H:u(J,1f){C J.1H&&J.1H.6J()==1f.6J()},16:u(14,L,25){B(14.I==1c)Y(D i 27 14)L.1C(14[i],25||[i,14[i]]);N Y(D i=0,4B=14.I;i<4B;i++)B(L.1C(14[i],25||[i,14[i]])===1a)30;C 14},12:u(J,G,H,2X,12){B(q.2D(G))G=G.3S(J,[2X]);D cA=/z-?2X|9P-?cM|1J|an|fc-?1g/i;C G&&G.1Z==5K&&H=="65"&&!cA.1j(12)?G+"2q":G},2k:{2g:u(J,c){q.16(c.4O(/\\s+/),u(i,1r){B(!q.2k.6e(J.2k,1r))J.2k+=(J.2k?" ":"")+1r})},49:u(J,c){J.2k=c?q.51(J.2k.4O(/\\s+/),u(1r){C!q.2k.6e(c,1r)}).9u(" "):""},6e:u(t,c){C q.6O(c,(t.2k||t).5B().4O(/\\s+/))>-1}},8t:u(e,o,f){Y(D i 27 o){e.1E["36"+i]=e.1E[i];e.1E[i]=o[i]}f.1C(e,[]);Y(D i 27 o)e.1E[i]=e.1E["36"+i]},K:u(e,p){B(p=="1g"||p=="2c"){D 36={},7h,6H,d=["cP","cQ","eS","cS"];q.16(d,u(){36["6u"+l]=0;36["62"+l+"cT"]=0});q.8t(e,36,u(){B(q(e).2Z(\':3p\')){7h=e.2T;6H=e.3U}N{e=q(e.6F(11)).3e(":3P").av("4M").3f().K({86:"2A",1Y:"43",1G:"44",cU:"0",2u:"0"}).6a(e.1t)[0];D 8s=q.K(e.1t,"1Y")||"54";B(8s=="54")e.1t.1E.1Y="5y";7h=e.48;6H=e.61;B(8s=="54")e.1t.1E.1Y="54";e.1t.63(e)}});C p=="1g"?7h:6H}C q.65(e,p)},65:u(J,12,b2){D 1d;B(12=="1J"&&q.18.1y){1d=q.1s(J.1E,"1J");C 1d==""?"1":1d}B(12=="8v"||12=="4V")12=q.18.1y?"72":"4V";B(!b2&&J.1E[12])1d=J.1E[12];N B(W.80&&W.80.8S){B(12=="4V"||12=="72")12="8v";12=12.1N(/([A-Z])/g,"-$1").2n();D 1r=W.80.8S(J,19);B(1r)1d=1r.af(12);N B(12=="1G")1d="2x";N q.8t(J,{1G:"44"},u(){D c=W.80.8S(l,"");1d=c&&c.af(12)||""})}N B(J.6n){D ag=12.1N(/\\-(\\w)/g,u(m,c){C c.6J()});1d=J.6n[12]||J.6n[ag]}C 1d},3t:u(a,6T){D r=[];6T=6T||W;q.16(a,u(i,2E){B(!2E)C;B(2E.1Z==5K)2E=2E.5B();B(U 2E=="1T"){D s=q.3d(2E),23=6T.9I("23"),4n=[];D 4t=!s.1M("<2I")&&[1,"<3x>","</3x>"]||(!s.1M("<dN")||!s.1M("<3u")||!s.1M("<cX"))&&[1,"<3h>","</3h>"]||!s.1M("<6I")&&[2,"<3h><3u>","</3u></3h>"]||(!s.1M("<dy")||!s.1M("<cY"))&&[3,"<3h><3u><6I>","</6I></3u></3h>"]||[0,"",""];23.45=4t[1]+2E+4t[2];2J(4t[0]--)23=23.28;B(q.18.1y){B(!s.1M("<3h")&&s.1M("<3u")<0)4n=23.28&&23.28.5U;N B(4t[1]=="<3h>"&&s.1M("<3u")<0)4n=23.5U;Y(D n=4n.I-1;n>=0;--n)B(q.1H(4n[n],"3u")&&!4n[n].5U.I)4n[n].1t.63(4n[n])}2E=q.5W(23.5U)}B(2E.I===0&&!q.1H(2E,"1S"))C;B(2E[0]==1c||q.1H(2E,"1S"))r.1w(2E);N r=q.3Z(r,2E)});C r},1s:u(J,1f,G){D 4R=q.8x(J)?{}:{"Y":"d3","4L":"2k","8v":q.18.1y?"72":"4V",4V:q.18.1y?"72":"4V",45:"45",2k:"2k",G:"G",3o:"3o",4M:"4M",d4:"d5",3D:"3D"};B(1f=="1J"&&q.18.1y){B(G!=1c){J.an=1;J.1x=(J.1x||"").1N(/ah\\([^)]*\\)/,"")+(76(G).5B()=="8K"?"":"ah(1J="+G*ai+")")}C J.1x?(76(J.1x.2F(/1J=([^)]*)/)[1])/ai).5B():""}B(4R[1f]){B(G!=1c)J[4R[1f]]=G;C J[4R[1f]]}N B(G==1c&&q.18.1y&&q.1H(J,"1S")&&(1f=="cs"||1f=="2b"))C J.d7(1f).6l;N B(J.7J){B(G!=1c)J.d8(1f,G);B(q.18.1y&&/3V|3F/.1j(1f)&&!q.8x(J))C J.7g(1f,2);C J.7g(1f)}N{1f=1f.1N(/-([a-z])/d9,u(z,b){C b.6J()});B(G!=1c)J[1f]=G;C J[1f]}},3d:u(t){C t.1N(/^\\s+|\\s+$/g,"")},5W:u(a){D r=[];B(U a!="8u")Y(D i=0,al=a.I;i<al;i++)r.1w(a[i]);N r=a.8J(0);C r},6O:u(b,a){Y(D i=0,al=a.I;i<al;i++)B(a[i]==b)C i;C-1},3Z:u(2t,9L){Y(D i=0;9L[i];i++)2t.1w(9L[i]);C 2t},8Y:u(2t){D r=[],2R=q.7Z++;Y(D i=0,ao=2t.I;i<ao;i++)B(2t[i].7Z!=2R){2t[i].7Z=2R;r.1w(2t[i])}C r},7Z:0,51:u(3m,L,8y){B(U L=="1T")L=1P 71("a","i","C "+L);D 2a=[];Y(D i=0,el=3m.I;i<el;i++)B(!8y&&L(3m[i],i)||8y&&!L(3m[i],i))2a.1w(3m[i]);C 2a},4J:u(3m,L){B(U L=="1T")L=1P 71("a","C "+L);D 2a=[];Y(D i=0,el=3m.I;i<el;i++){D 1R=L(3m[i],i);B(1R!==19&&1R!=1c){B(1R.1Z!=3w)1R=[1R];2a=2a.da(1R)}}C 2a}});1P u(){D b=8Z.90.2n();q.18={3a:/aq/.1j(b),3G:/3G/.1j(b),1y:/1y/.1j(b)&&!/3G/.1j(b),4m:/4m/.1j(b)&&!/(db|aq)/.1j(b)};q.5t=!q.18.1y||W.dc=="fb"};q.16({1q:"a.1t",3H:"q.3H(a)",dd:"q.3N(a,2,\'4h\')",de:"q.3N(a,2,\'c1\')",cz:"q.5h(a.1t.28,a)",5i:"q.5h(a.28)"},u(i,n){q.L[i]=u(a){D 1d=q.4J(l,n);B(a&&U a=="1T")1d=q.6c(a,1d);C l.4E(1d)}});q.16({6a:"3K",df:"ar",5x:"as",8i:"au"},u(i,n){q.L[i]=u(){D a=17;C l.16(u(){Y(D j=0,al=a.I;j<al;j++)q(a[j])[n](l)})}});q.16({av:u(2M){q.1s(l,2M,"");l.dh(2M)},2K:u(c){q.2k.2g(l,c)},3j:u(c){q.2k.49(l,c)},di:u(c){q.2k[q.2k.6e(l,c)?"49":"2g"](l,c)},49:u(a){B(!a||q.1x(a,[l]).r.I)l.1t.63(l)},5P:u(){2J(l.28)l.63(l.28)}},u(i,n){q.L[i]=u(){C l.16(n,17)}});q.16(["eq","9m","9t","aw"],u(i,n){q.L[n]=u(2R,L){C l.1x(":"+n+"("+2R+")",L)}});q.16(["1g","2c"],u(i,n){q.L[n]=u(h){C h==1c?(l.I?q.K(l[0],n):19):l.K(n,h.1Z==2G?h:h+"2q")}});q.1i({2r:{"":"m[2]==\'*\'||q.1H(a,m[2])","#":"a.7g(\'S\')==m[2]",":":{9m:"i<m[3]-0",9t:"i>m[3]-0",3N:"m[3]-0==i",eq:"m[3]-0==i",2t:"i==0",2z:"i==r.I-1",aF:"i%2==0",aG:"i%2","3N-7K":"q.3N(a.1t.28,m[3],\'4h\',a)==a","2t-7K":"q.3N(a.1t.28,1,\'4h\')==a","2z-7K":"q.3N(a.1t.dj,1,\'c1\')==a","9n-7K":"q.5h(a.1t.28).I==1",1q:"a.28",5P:"!a.28",aw:"q.L.1L.1C([a]).1M(m[3])>=0",3p:\'a.H!="2A"&&q.K(a,"1G")!="2x"&&q.K(a,"86")!="2A"\',2A:\'a.H=="2A"||q.K(a,"1G")=="2x"||q.K(a,"86")=="2A"\',bY:"!a.3o",3o:"a.3o",4M:"a.4M",3D:"a.3D||q.1s(a,\'3D\')",1L:"a.H==\'1L\'",3P:"a.H==\'3P\'",4i:"a.H==\'4i\'",9j:"a.H==\'9j\'",cB:"a.H==\'cB\'",3Q:"a.H==\'3Q\'",5o:"a.H==\'5o\'",2P:"a.H==\'2P\'",7z:\'a.H=="7z"||q.1H(a,"7z")\',3W:"/3W|3x|eU|7z/i.1j(a.1H)"},".":"q.2k.6e(a,m[2])","@":{"=":"z==m[4]","!=":"z!=m[4]","^=":"z&&!z.1M(m[4])","$=":"z&&z.5T(z.I - m[4].I,m[4].I)==m[4]","*=":"z&&z.1M(m[4])>=0","":"z",9d:u(m){C["",m[1],m[3],m[2],m[5]]},aE:"z=a[m[3]];B(!z||/3V|3F/.1j(m[3]))z=q.1s(a,m[3]);"},"[":"1b(m[2])?q.3N(a.1t.28,1b(m[2]),\'4h\',a)==a:q.3e(m[2],a).I"},aC:[/^\\[ *(@)([\\w-]+) *([!*$^=]*) *(\'?"?)(.*?)\\4 *\\]/,/^(\\[)\\s*(.*?(\\[.*?\\])?[^[]*?)\\s*\\]/,/^(:)([\\w-]+)\\("?\'?(.*?(\\(.*?\\))?[^(]*?)"?\'?\\)/,1P 4K("^([:.#]*)("+(q.8A="(?:[\\\\w\\dp-\\dq*-]|\\\\\\\\.)")+"+)")],6Q:[/^(\\/?\\.\\.)/,"a.1t",/^(>|\\/)/,"q.5h(a.28)",/^(\\+)/,"q.3N(a,2,\'4h\')",/^(~)/,u(a){D s=q.5h(a.1t.28);C s.8J(q.6O(a,s)+1)}],6c:u(2r,3m,2l){D 36,1r=[];2J(2r&&2r!=36){36=2r;D f=q.1x(2r,3m,2l);2r=f.t.1N(/^\\s*,\\s*/,"");1r=2l?3m=f.r:q.3Z(1r,f.r)}C 1r},3e:u(t,2H){B(U t!="1T")C[t];B(2H&&!2H.31)2H=19;2H=2H||W;B(!t.1M("//")){2H=2H.37;t=t.5T(2,t.I)}N B(!t.1M("/")&&!2H.6d){2H=2H.37;t=t.5T(1,t.I);B(t.1M("/")>=1)t=t.5T(t.1M("/"),t.I)}D 1d=[2H],3O=[],2z;2J(t&&2z!=t){D r=[];2z=t;t=q.3d(t).1N(/^\\/\\//,"");D 6R=1a;D 5s=/^[\\/>]\\s*([\\w*-]+)/;D m=5s.5u(t);B(m){Y(D i=0;1d[i];i++)Y(D c=1d[i].28;c;c=c.4h)B(c.31==1&&(m[1]=="*"||q.1H(c,m[1])))r.1w(c);1d=r;t=t.1N(5s,"");B(t.1M(" ")==0)dt;6R=11}N{Y(D i=0,ay=q.6Q.I;i<ay;i+=2){D 5s=q.6Q[i],L=q.6Q[i+1];D m=5s.5u(t);B(m){r=1d=q.4J(1d,q.2D(L)?L:1P 71("a","C "+L));t=q.3d(t.1N(5s,""));6R=11;30}}}B(t&&!6R){B(!t.1M(",")){B(1d[0]==2H)1d.85();3O=q.3Z(3O,1d);r=1d=[2H];t=" "+t.5T(1,t.I)}N{D 6j=1P 4K("^(\\\\w+)(#)("+q.8A+"+)");D m=6j.5u(t);B(m){m=[0,m[2],m[3],m[1]]}N{6j=1P 4K("^([#.]?)("+q.8A+"*)");m=6j.5u(t)}m[2]=m[2].1N(/\\\\/g,"");D J=1d[1d.I-1];B(m[1]=="#"&&J&&J.8Q){D 4H=J.8Q(m[2]);B((q.18.1y||q.18.3G)&&4H&&4H.S!=m[2])4H=q(\'[@S="\'+m[2]+\'"]\',J)[0];1d=r=4H&&(!m[3]||q.1H(4H,m[3]))?[4H]:[]}N{Y(D i=0;1d[i];i++){D 7A=m[1]!=""||m[0]==""?"*":m[2];B(7A=="*"&&1d[i].1H.2n()=="42")7A="P";r=q.3Z(r,1d[i].az(7A))}B(m[1]==".")r=q.99(r,m[2]);B(m[1]=="#"){D 5w=[];Y(D i=0;r[i];i++)B(r[i].7g("S")==m[2]){5w=[r[i]];30}r=5w}1d=r}t=t.1N(6j,"")}}B(t){D 1R=q.1x(t,r);1d=r=1R.r;t=q.3d(1R.t)}}B(t)1d=[];B(1d&&1d[0]==2H)1d.85();3O=q.3Z(3O,1d);C 3O},99:u(r,m,2l){m=" "+m+" ";D 5w=[];Y(D i=0;r[i];i++){D 9a=(" "+r[i].2k+" ").1M(m)>=0;B(!2l&&9a||2l&&!9a)5w.1w(r[i])}C 5w},1x:u(t,r,2l){D 2z;2J(t&&t!=2z){2z=t;D p=q.aC,m;Y(D i=0;p[i];i++){m=p[i].5u(t);B(m){t=t.9x(m[0].I);B(q.2r[m[1]].9d)m=q.2r[m[1]].9d(m);m[2]=m[2].1N(/\\\\/g,"");30}}B(!m)30;B(m[1]==":"&&m[2]=="2l")r=q.1x(m[3],r,11).r;N B(m[1]==".")r=q.99(r,m[2],2l);N{D f=q.2r[m[1]];B(U f!="1T")f=q.2r[m[1]][m[2]];6D("f = u(a,i){"+(q.2r[m[1]].aE||"")+"C "+f+"}");r=q.51(r,f,2l)}}C{r:r,t:t}},3H:u(J){D 8G=[];D 1r=J.1t;2J(1r&&1r!=W){8G.1w(1r);1r=1r.1t}C 8G},3N:u(1r,2a,6g,J){2a=2a||1;D 2R=0;Y(;1r;1r=1r[6g]){B(1r.31==1)2R++;B(2R==2a||2a=="aF"&&2R%2==0&&2R>1&&1r==J||2a=="aG"&&2R%2==1&&1r==J)C 1r}},5h:u(n,J){D r=[];Y(;n;n=n.4h){B(n.31==1&&(!J||n!=J))r.1w(n)}C r}});q.T={2g:u(E,H,1z,R){B(q.18.1y&&E.6r!=1c)E=1e;B(R)1z.R=R;B(!1z.5e)1z.5e=l.5e++;B(!E.$2e)E.$2e={};D 5V=E.$2e[H];B(!5V){5V=E.$2e[H]={};B(E["5X"+H])5V[0]=E["5X"+H]}5V[1z.5e]=1z;E["5X"+H]=l.6x;B(!l.2B[H])l.2B[H]=[];l.2B[H].1w(E)},5e:1,2B:{},49:u(E,H,1z){D 2e=E.$2e,1d;B(2e){B(H&&H.H){1z=H.1z;H=H.H}B(!H){Y(H 27 2e)l.49(E,H)}N B(2e[H]){B(1z)6m 2e[H][1z.5e];N Y(1z 27 E.$2e[H])6m 2e[H][1z];Y(1d 27 2e[H])30;B(!1d){1d=E["5X"+H]=19;6m 2e[H]}}Y(1d 27 2e)30;B(!1d)E.$2e=19}},2d:u(H,R,E){R=q.5W(R||[]);B(!E)q.16(l.2B[H]||[],u(){q.T.2d(H,R,l)});N{D 1z=E["5X"+H],1R,L=q.2D(E[H]);B(1z){R.aH(l.4R({H:H,3i:E}));B((1R=1z.1C(E,R))!==1a)l.8I=11}B(L&&1R!==1a)E[H]();l.8I=1a}},6x:u(T){B(U q=="1c"||q.T.8I)C;T=q.T.4R(T||1e.T||{});D 4N;D c=l.$2e[T.H];D 25=[].8J.3S(17,1);25.aH(T);Y(D j 27 c){25[0].1z=c[j];25[0].R=c[j].R;B(c[j].1C(l,25)===1a){T.40();T.59();4N=1a}}B(q.18.1y)T.3i=T.40=T.59=T.1z=T.R=19;C 4N},4R:u(T){B(!T.3i&&T.aJ)T.3i=T.aJ;B(T.8D==1c&&T.9Z!=1c){D e=W.37,b=W.1K;T.8D=T.9Z+(e.32||b.32);T.aD=T.dz+(e.2Y||b.2Y)}B(q.18.3a&&T.3i.31==3){D 5Y=T;T=q.1i({},5Y);T.3i=5Y.3i.1t;T.40=u(){C 5Y.40()};T.59=u(){C 5Y.59()}}B(!T.40)T.40=u(){l.4N=1a};B(!T.59)T.59=u(){l.dB=11};C T}};q.L.1i({2S:u(H,R,L){C l.16(u(){q.T.2g(l,H,L||R,R)})},aN:u(H,R,L){C l.16(u(){q.T.2g(l,H,u(T){q(l).6M(T);C(L||R).1C(l,17)},R)})},6M:u(H,L){C l.16(u(){q.T.49(l,H,L)})},2d:u(H,R){C l.16(u(){q.T.2d(H,R,l)})},3b:u(){D a=17;C l.47(u(e){l.8L=l.8L==0?1:0;e.40();C a[l.8L].1C(l,[e])||1a})},dZ:u(f,g){u 8N(e){D p=(e.H=="4Y"?e.dC:e.dD)||e.dE;2J(p&&p!=l)3J{p=p.1t}3C(e){p=l};B(p==l)C 1a;C(e.H=="4Y"?f:g).1C(l,[e])}C l.4Y(8N).70(8N)},34:u(f){B(q.6P)f.1C(W,[q]);N{q.64.1w(u(){C f.1C(l,[q])})}C l}});q.1i({6P:1a,64:[],34:u(){B(!q.6P){q.6P=11;B(q.64){q.16(q.64,u(){l.1C(W)});q.64=19}B(q.18.4m||q.18.3G)W.dF("aL",q.34,1a)}}});1P u(){q.16(("8m,4P,4w,dR,5L,8T,47,dG,"+"dP,dH,8B,4Y,70,dJ,3x,"+"3Q,dK,dL,dM,1m").4O(","),u(i,o){q.L[o]=u(f){C f?l.2S(o,f):l.2d(o)}});B(q.18.4m||q.18.3G)W.dO("aL",q.34,1a);N B(q.18.1y){W.dQ("<dS"+"dT S=aM dU=11 "+"3F=//:><\\/4q>");D 4q=W.8Q("aM");B(4q)4q.6b=u(){B(l.7y!="3A")C;l.1t.63(l);q.34()};4q=19}N B(q.18.3a)q.8R=6r(u(){B(W.7y=="dV"||W.7y=="3A"){9s(q.8R);q.8R=19;q.34()}},10);q.T.2g(1e,"4w",q.34)};B(q.18.1y)q(1e).aN("8T",u(){D 2B=q.T.2B;Y(D H 27 2B){D 8U=2B[H],i=8U.I;B(i&&H!=\'8T\')do q.T.49(8U[i-1],H);2J(--i)}});q.L.1i({1D:u(1o,1h){D 2A=l.1x(":2A");1o?2A.2W({1g:"1D",2c:"1D",1J:"1D"},1o,1h):2A.16(u(){l.1E.1G=l.5q?l.5q:"";B(q.K(l,"1G")=="2x")l.1E.1G="44"});C l},1A:u(1o,1h){D 3p=l.1x(":3p");1o?3p.2W({1g:"1A",2c:"1A",1J:"1A"},1o,1h):3p.16(u(){l.5q=l.5q||q.K(l,"1G");B(l.5q=="2x")l.5q="44";l.1E.1G="2x"});C l},aP:q.L.3b,3b:u(L,8W){D 25=17;C q.2D(L)&&q.2D(8W)?l.aP(L,8W):l.16(u(){q(l)[q(l).2Z(":2A")?"1D":"1A"].1C(q(l),25)})},bD:u(1o,1h){C l.1x(":2A").2W({1g:"1D"},1o,1h).3f()},bA:u(1o,1h){C l.1x(":3p").2W({1g:"1A"},1o,1h).3f()},dW:u(1o,1h){C l.16(u(){D aQ=q(l).2Z(":2A")?"1D":"1A";q(l).2W({1g:aQ},1o,1h)})},bM:u(1o,1h){C l.1x(":2A").2W({1J:"1D"},1o,1h).3f()},bH:u(1o,1h){C l.1x(":3p").2W({1J:"1A"},1o,1h).3f()},dX:u(1o,3L,1h){C l.2W({1J:3L},1o,1h)},2W:u(12,1o,39,1h){C l.2U(u(){l.4X=q.1i({},12);D 2I=q.1o(1o,39,1h);Y(D p 27 12){D e=1P q.5O(l,2I,p);B(12[p].1Z==5K)e.5c(e.1r(),12[p]);N e[12[p]](12)}})},2U:u(H,L){B(!L){L=H;H="5O"}C l.16(u(){B(!l.2U)l.2U={};B(!l.2U[H])l.2U[H]=[];l.2U[H].1w(L);B(l.2U[H].I==1)L.1C(l)})}});q.1i({1o:u(1o,39,L){D 2I=1o&&1o.1Z==dY?1o:{3A:L||!L&&39||q.2D(1o)&&1o,3R:1o,39:L&&39||39&&39.1Z!=71&&39||"aT"};2I.3R=(2I.3R&&2I.3R.1Z==5K?2I.3R:{e0:e1,e2:bC}[2I.3R])||e3;2I.36=2I.3A;2I.3A=u(){q.aV(l,"5O");B(q.2D(2I.36))2I.36.1C(l)};C 2I},39:{e4:u(p,n,4z,6Z){C 4z+6Z*p},aT:u(p,n,4z,6Z){C((-4g.e5(p*4g.e7)/2)+0.5)*6Z+4z}},2U:{},aV:u(J,H){H=H||"5O";B(J.2U&&J.2U[H]){J.2U[H].85();D f=J.2U[H][0];B(f)f.1C(J)}},52:[],5O:u(J,V,12){D z=l;D y=J.1E;B(12=="1g"||12=="2c"){D 79=q.K(J,"1G");D aY=y.4v;y.4v="2A"}z.a=u(){B(V.78)V.78.1C(J,[z.4W]);B(12=="1J")q.1s(y,"1J",z.4W);N{y[12]=1b(z.4W)+"2q";y.1G="44"}};z.7G=u(){C 76(q.K(J,12))};z.1r=u(){D r=76(q.65(J,12));C r&&r>-e8?r:z.7G()};z.5c=u(92,3L){z.8r=(1P 5g()).75();z.4W=92;z.a();q.52.1w(u(){C z.78(92,3L)});B(q.52.I==1){D aX=6r(u(){q.52=q.51(q.52,u(L){C L()});B(!q.52.I)9s(aX)},13)}};z.1D=u(){B(!J.3M)J.3M={};J.3M[12]=q.1s(J.1E,12);V.1D=11;z.5c(0,l.1r());B(12!="1J")y[12]="58"};z.1A=u(){B(!J.3M)J.3M={};J.3M[12]=q.1s(J.1E,12);V.1A=11;z.5c(l.1r(),0)};z.3b=u(){B(!J.3M)J.3M={};J.3M[12]=q.1s(J.1E,12);B(79=="2x"){V.1D=11;B(12!="1J")y[12]="58";z.5c(0,l.1r())}N{V.1A=11;z.5c(l.1r(),0)}};z.78=u(4z,95){D t=(1P 5g()).75();B(t>V.3R+z.8r){z.4W=95;z.a();B(J.4X)J.4X[12]=11;D 3O=11;Y(D i 27 J.4X)B(J.4X[i]!==11)3O=1a;B(3O){B(79){y.4v=aY;y.1G=79;B(q.K(J,"1G")=="2x")y.1G="44"}B(V.1A)y.1G="2x";B(V.1A||V.1D)Y(D p 27 J.4X)q.1s(y,p,J.3M[p])}B(3O&&q.2D(V.3A))V.3A.1C(J);C 1a}N{D n=t-l.8r;D p=n/V.3R;z.4W=q.39[V.39](p,n,4z,(95-4z),V.3R);z.a()}C 11}}});q.L.1i({ea:u(1p,3r,1h){l.4w(1p,3r,1h,1)},4w:u(1p,3r,1h,3y){B(q.2D(1p))C l.2S("4w",1p);1h=1h||u(){};D H="98";B(3r)B(q.2D(3r)){1h=3r;3r=19}N{3r=q.P(3r);H="b5"}D 3n=l;q.7b({1p:1p,H:H,R:3r,3y:3y,3A:u(5f,1U){B(1U=="5l"||!3y&&1U=="bk")3n.1s("45",5f.7u).9o().16(1h,[5f.7u,1U,5f]);N 1h.1C(3n,[5f.7u,1U,5f])}});C l},ec:u(){C q.P(l)},9o:u(){C l.3e("4q").16(u(){B(l.3F)q.b4(l.3F);N q.9p(l.1L||l.ed||l.45||"")}).3f()}});q.16("b8,bp,bQ,bw,bR,bi".4O(","),u(i,o){q.L[o]=u(f){C l.2S(o,f)}});q.1i({2O:u(1p,R,1h,H,3y){B(q.2D(R)){1h=R;R=19}C q.7b({H:"98",1p:1p,R:R,5l:1h,9g:H,3y:3y})},ee:u(1p,R,1h,H){C q.2O(1p,R,1h,H,1)},b4:u(1p,1h){C q.2O(1p,19,1h,"4q")},ef:u(1p,R,1h){C q.2O(1p,R,1h,"bO")},eg:u(1p,R,1h,H){B(q.2D(R)){1h=R;R={}}C q.7b({H:"b5",1p:1p,R:R,5l:1h,9g:H})},eh:u(33){q.7c.33=33},ei:u(F){q.1i(q.7c,F)},7c:{2B:11,H:"98",33:0,bc:"ej/x-ek-1S-em",b6:11,7n:11,R:19},7r:{},7b:u(s){s=q.1i({},q.7c,s);B(s.R){B(s.b6&&U s.R!="1T")s.R=q.P(s.R);B(s.H.2n()=="2O"){s.1p+=((s.1p.1M("?")>-1)?"&":"?")+s.R;s.R=19}}B(s.2B&&!q.9i++)q.T.2d("b8");D 9h=1a;D 1n=1e.b9?1P b9("ax.eo"):1P 7W();1n.ep(s.H,s.1p,s.7n);B(s.R)1n.7i("er-es",s.bc);B(s.3y)1n.7i("et-9k-eu",q.7r[s.1p]||"ev, ew ex ey 9c:9c:9c ez");1n.7i("X-eA-eB","7W");B(1n.eC)1n.7i("eD","eE");B(s.bh)s.bh(1n);B(s.2B)q.T.2d("bi",[1n,s]);D 6b=u(9f){B(1n&&(1n.7y==4||9f=="33")){9h=11;B(7k){9s(7k);7k=19}D 1U;3J{1U=q.by(1n)&&9f!="33"?s.3y&&q.bE(1n,s.1p)?"bk":"5l":"1m";B(1U!="1m"){D 7j;3J{7j=1n.9l("bF-9k")}3C(e){}B(s.3y&&7j)q.7r[s.1p]=7j;D R=q.bK(1n,s.9g);B(s.5l)s.5l(R,1U);B(s.2B)q.T.2d("bR",[1n,s])}N q.7m(s,1n,1U)}3C(e){1U="1m";q.7m(s,1n,1U,e)}B(s.2B)q.T.2d("bQ",[1n,s]);B(s.2B&&!--q.9i)q.T.2d("bp");B(s.3A)s.3A(1n,1U);B(s.7n)1n=19}};D 7k=6r(6b,13);B(s.33>0)3g(u(){B(1n){1n.eF();B(!9h)6b("33")}},s.33);3J{1n.eH(s.R)}3C(e){q.7m(s,1n,19,e)}B(!s.7n)6b();C 1n},7m:u(s,1n,1U,e){B(s.1m)s.1m(1n,1U,e);B(s.2B)q.T.2d("bw",[1n,s,e])},9i:0,by:u(r){3J{C!r.1U&&5D.eI=="9j:"||(r.1U>=bC&&r.1U<eJ)||r.1U==bG||q.18.3a&&r.1U==1c}3C(e){}C 1a},bE:u(1n,1p){3J{D bI=1n.9l("bF-9k");C 1n.1U==bG||bI==q.7r[1p]||q.18.3a&&1n.1U==1c}3C(e){}C 1a},bK:u(r,H){D ct=r.9l("eK-H");D R=!H&&ct&&ct.1M("1n")>=0;R=H=="1n"||R?r.eM:r.7u;B(H=="4q")q.9p(R);B(H=="bO")6D("R = "+R);B(H=="2m")q("<23>").2m(R).9o();C R},P:u(a){D s=[];B(a.1Z==3w||a.7v)q.16(a,u(){s.1w(4G(l.1f)+"="+4G(l.G))});N Y(D j 27 a)B(a[j]&&a[j].1Z==3w)q.16(a[j],u(){s.1w(4G(j)+"="+4G(l))});N s.1w(4G(j)+"="+4G(a[j]));C s.9u("&")},9p:u(R){B(1e.bT)1e.bT(R);N B(q.18.3a)1e.3g(R,0);N 6D.3S(1e,R)}})}q.L.eO=u(f){C l.16(u(){D p=l.1t;B(q.K(p,"1Y")==\'54\')p.1E.1Y=\'5y\';D s=l.1E;s.1Y=\'43\';B(!f||f=="eP"){B(((1b(q.K(p,"2c"))-1b(q.K(l,"2c")))/2)>0)s.2u=((1b(q.K(p,"2c"))-1b(q.K(l,"2c")))/2)+"2q";N s.2u="0"}B(!f||f=="eQ"){B(((1b(q.K(p,"1g"))-1b(q.K(l,"1g")))/2)>0){s.2v=((1b(q.K(p,"1g"))-1b(q.K(l,"1g")))/2)+"2q"}N{B(p.1H.2n()=="1K"){B(1e.5S)D 48=1e.5S;N B(W.1K&&W.1K.2T)D 48=W.1K.2T;s.2v=((48-1b(q.K(l,"1g")))/2)+"2q"}N{s.2v="0"}}}})};q.4j=u(1f,G,V){B(U G!=\'1c\'){V=V||{};B(G===19){G=\'\';V.2C=-1}D 2C=\'\';B(V.2C){D 2o;B(U V.2C==\'1T\'&&V.2C.2F(/^[+-]?[0-9]+[bV]$/)!==19){D 2F=V.2C.2F(/^([+-]?[0-9]+)([bV])$/);V.2C=1b(2F[0],10)*(({"y":(60*60*24*eR),"w":(60*60*24*7),"d":(60*60*24),"h":(60*60),"m":(60),"s":(1)}[2F[1]])||0);2o=1P 5g();2o.bZ(2o.75()+V.2C*4c)}N B(U V.2C==\'3k\'){2o=1P 5g();2o.bZ(2o.75()+V.2C*24*60*60*4c)}N B(U V.2C.c0!=\'1c\')2o=V.2C;N 9F"eT \\"2C\\" 2j";2C=\'; 2C=\'+2o.c0()}D 6f=V.6f?\'; 6f=\'+V.6f:\'\';D 6s=V.6s?\'; 6s=\'+V.6s:\'\';D 74=V.74?\'; 74\':\'\';W.4j=[1f,\'=\',4G(G),2C,6f,6s,74].9u(\'\')}N{D 9y=19;B(W.4j&&W.4j!=\'\'){D 9v=W.4j.4O(\';\');Y(D i=0;i<9v.I;i++){D 4j=q.3d(9v[i]);B(4j.9x(0,1f.I+1)==(1f+\'=\')){9y=eV(4j.9x(1f.I+1));30}}}C 9y}};q.L.c2=q.L.1g;q.L.c3=q.L.2c;q.L.1g=u(){B(l[0]==1e)C 3n.5S||q.5t&&W.37.48||W.1K.48;B(l[0]==W)C 4g.7G(W.1K.eW,W.1K.2T);C l.c2(17[0])};q.L.2c=u(){B(l[0]==1e)C 3n.8M||q.5t&&W.37.61||W.1K.61;B(l[0]==W)C 4g.7G(W.1K.eZ,W.1K.3U);C l.c3(17[0])};q.L.5S=u(){C l[0]==1e||l[0]==W?l.1g():l.K(\'1G\')!=\'2x\'?l[0].2T-(1b(l.K("4l"))||0)-(1b(l.K("c4"))||0):l.1g()+(1b(l.K("9E"))||0)+(1b(l.K("c5"))||0)};q.L.8M=u(){C l[0]==1e||l[0]==W?l.2c():l.K(\'1G\')!=\'2x\'?l[0].3U-(1b(l.K("4d"))||0)-(1b(l.K("c6"))||0):l.1g()+(1b(l.K("9D"))||0)+(1b(l.K("97"))||0)};q.L.f0=u(){C l[0]==1e||l[0]==W?l.1g():l.K(\'1G\')!=\'2x\'?l[0].2T:l.1g()+(1b(l.K("4l"))||0)+(1b(l.K("c4"))||0)+(1b(l.K("9E"))||0)+(1b(l.K("c5"))||0)};q.L.f1=u(){C l[0]==1e||l[0]==W?l.2c():l.K(\'1G\')!=\'2x\'?l[0].3U:l.1g()+(1b(l.K("4d"))||0)+(1b(l.K("c6"))||0)+(1b(l.K("9D"))||0)+(1b(l.K("97"))||0)};q.L.32=u(){B(l[0]==1e||l[0]==W)C 3n.8P||q.5t&&W.37.32||W.1K.32;C l[0].32};q.L.2Y=u(){B(l[0]==1e||l[0]==W)C 3n.8O||q.5t&&W.37.2Y||W.1K.2Y;C l[0].2Y};q.L.9b=u(V,9G){D x=0,y=0,J=l[0],1q=l[0],6K=1a,9C=1a,5R,6k=0,5M=0,V=q.1i({73:11,62:11,6u:1a,5L:11},V||{});do{x+=1q.8F||0;y+=1q.8H||0;B(q.18.4m||q.18.1y){D bt=1b(q.K(1q,\'4l\'))||0;D bl=1b(q.K(1q,\'4d\'))||0;x+=bl;y+=bt;B(q.18.4m&&1q!=J&&q.K(1q,\'4v\')!=\'3p\'){x+=bl;y+=bt}B(q.K(1q,\'1Y\')==\'43\')6K=11;B(q.K(1q,\'1Y\')==\'5y\')9C=11}B(V.5L){5R=1q.c7;do{6k+=1q.32||0;5M+=1q.2Y||0;1q=1q.1t;B(q.18.4m&&1q!=J&&1q!=5R&&q.K(1q,\'4v\')!=\'3p\'){x+=1b(q.K(1q,\'4d\'))||0;y+=1b(q.K(1q,\'4l\'))||0}}2J(5R&&1q!=5R)}N 1q=1q.c7;B(1q&&(1q.7J.2n()==\'1K\'||1q.7J.2n()==\'2m\')){B((q.18.3a||(q.18.1y&&q.5t))&&q.K(J,\'1Y\')!=\'43\'){x+=1b(q.K(1q,\'cb\'))||0;y+=1b(q.K(1q,\'cd\'))||0}B((q.18.4m&&!6K)||(q.18.1y&&q.K(J,\'1Y\')==\'54\'&&(!9C||!6K))){x+=1b(q.K(1q,\'4d\'))||0;y+=1b(q.K(1q,\'4l\'))||0}30}}2J(1q);B(!V.73){x-=1b(q.K(J,\'cb\'))||0;y-=1b(q.K(J,\'cd\'))||0}B(V.62&&(q.18.3a||q.18.3G)){x+=1b(q.K(J,\'4d\'))||0;y+=1b(q.K(J,\'4l\'))||0}N B(!V.62&&!(q.18.3a||q.18.3G)){x-=1b(q.K(J,\'4d\'))||0;y-=1b(q.K(J,\'4l\'))||0}B(V.6u){x+=1b(q.K(J,\'9D\'))||0;y+=1b(q.K(J,\'9E\'))||0}B(V.5L&&q.18.3G&&q.K(J,\'1G\')==\'f2\'){6k-=J.32||0;5M-=J.2Y||0}D 4N=V.5L?{2v:y-5M,2u:x-6k,2Y:5M,32:6k}:{2v:y,2u:x};B(9G){q.1i(9G,4N);C l}N{C 4N}};(u($){$.L.f4=q.L.9H=u(s){B(!($.18.1y&&U 7W==\'u\'))C l;s=$.1i({2v:\'3Y\',2u:\'3Y\',2c:\'3Y\',1g:\'3Y\',1J:11,3F:\'f5:1a;\'},s||{});D 12=u(n){C n&&n.1Z==5K?n+\'2q\':n},2m=\'<ci 4L="9H"f6="0"f7="-1"3F="\'+s.3F+\'"\'+\'1E="1G:44;1Y:43;z-2X:-1;\'+(s.1J!==1a?\'1x:f8(f9=\\\'0\\\');\':\'\')+\'2v:\'+(s.2v==\'3Y\'?\'7T(((1b(l.1t.6n.4l)||0)*-1)+\\\'2q\\\')\':12(s.2v))+\';\'+\'2u:\'+(s.2u==\'3Y\'?\'7T(((1b(l.1t.6n.4d)||0)*-1)+\\\'2q\\\')\':12(s.2u))+\';\'+\'2c:\'+(s.2c==\'3Y\'?\'7T(l.1t.3U+\\\'2q\\\')\':12(s.2c))+\';\'+\'1g:\'+(s.1g==\'3Y\'?\'7T(l.1t.2T+\\\'2q\\\')\':12(s.1g))+\';\'+\'"/>\';C l.16(u(){B(!$(\'ci.9H\',l)[0])l.5x(W.9I(2m),l.28)})}})(q);(u($){$.1i({1Q:{ck:0}});$.L.1Q=u(2L,F){B(U 2L==\'42\')F=2L;F=$.1i({2L:(2L&&U 2L==\'3k\'&&2L>0)?--2L:0,3o:19,3I:$.5N?11:1a,4A:1a,cj:\'4A-41-\',9W:19,9V:19,9X:19,9Y:19,9U:\'b3\',cp:19,cr:19,cm:1a,66:19,6v:19,5H:19,7Y:\'1Q-2h\',4s:\'1Q-3D\',6t:\'1Q-3o\',6q:\'1Q-1V\',8h:\'1Q-1A\',8l:\'1Q-fd\',cl:\'23\'},F||{});$.18.81=$.18.81||$.18.1y&&U 7W==\'u\';u 9K(){a2(0,0)}C l.16(u(){D 1V=l;D 2h=$(\'6E.\'+F.7Y,1V);2h=2h.4y()&&2h||$(\'>6E:eq(0)\',1V);D 1Q=$(\'a\',2h);B(F.4A){D 8j={};1Q.16(u(){$(l).2m(\'<3T>\'+$(l).2m()+\'</3T>\');D S=F.cj+(++$.1Q.ck);D 1X=\'#\'+S;8j[1X]=l.3V;l.3V=1X;$(\'<23 S="\'+S+\'" 4L="\'+F.6q+\'"></23>\').6a(1V)})}D 2w=$(\'23.\'+F.6q,1V);2w=2w.4y()&&2w||$(\'>\'+F.cl,1V);2h.2Z(\'.\'+F.7Y)||2h.2K(F.7Y);2w.16(u(){D $$=$(l);$$.2Z(\'.\'+F.6q)||$$.2K(F.6q)});D 9J=$(\'1B\',2h).2X($(\'1B.\'+F.4s,2h)[0]);B(9J>=0){F.2L=9J}B(5D.1X){1Q.16(u(i){B(l.1X==5D.1X){F.2L=i;B(($.18.1y||$.18.3G)&&!F.4A){D 1W=$(5D.1X);D 8e=1W.1s(\'S\');1W.1s(\'S\',\'\');3g(u(){1W.1s(\'S\',8e)},fe)}9K();C 1a}})}B($.18.1y){9K()}2w.1x(\':eq(\'+F.2L+\')\').1D().3f().2l(\':eq(\'+F.2L+\')\').2K(F.8h);B(!F.4A){$(\'1B\',2h).3j(F.4s).eq(F.2L).2K(F.4s)}B(F.cm){D 9R=u(2P){D 9O=$.4J(2w.2O(),u(el){D h,9N=$(el);B(2P){B($.18.81){el.1E.ff(\'cn\');el.1E.1g=\'\';el.83=19}h=9N.K({\'4I-1g\':\'\'}).1g()}N{h=9N.1g()}C h}).fg(u(a,b){C b-a});B($.18.81){2w.16(u(){l.83=9O[0]+\'2q\';l.1E.fi(\'cn\',\'l.1E.1g = l.83 ? l.83 : "58"\')})}N{2w.K({\'4I-1g\':9O[0]+\'2q\'})}};9R();D 87=1V.3U;D 9S=1V.2T;D 9Q=$(\'#1Q-co-9P-4y\').2O(0)||$(\'<3T S="1Q-co-9P-4y">M</3T>\').K({1G:\'44\',1Y:\'43\',86:\'2A\'}).6a(W.1K).2O(0);D 89=9Q.2T;6r(u(){D 88=1V.3U;D 9T=1V.2T;D 8a=9Q.2T;B(9T>9S||88!=87||8a!=89){9R((88>87||8a<89));87=88;9S=9T;89=8a}},50)}D 5G={},5E={},a1=F.cp||F.9U,a0=F.cr||F.9U;B(F.9V||F.9W){B(F.9V){5G[\'1g\']=\'1D\';5E[\'1g\']=\'1A\'}B(F.9W){5G[\'1J\']=\'1D\';5E[\'1J\']=\'1A\'}}N{B(F.9X){5G=F.9X}N{5G[\'4I-2c\']=0;a1=F.3I?50:1}B(F.9Y){5E=F.9Y}N{5E[\'4I-2c\']=0;a0=F.3I?50:1}}D 66=F.66,6v=F.6v,5H=F.5H;1Q.2S(\'a7\',u(){D 1B=$(l).3H(\'1B:eq(0)\');B(1V.6y||1B.2Z(\'.\'+F.4s)||1B.2Z(\'.\'+F.6t)){C 1a}D 1X=l.1X;B($.18.1y){$(l).2d(\'47\');B(F.3I){$.5N.4a(1X);5D.1X=1X.1N(\'#\',\'\')}}N B($.18.3a){D cu=$(\'<1S cs="\'+1X+\'"><23><3W H="3Q" G="h" /></23></1S>\').2O(0);cu.3Q();$(l).2d(\'47\');B(F.3I){$.5N.4a(1X)}}N{B(F.3I){5D.1X=1X.1N(\'#\',\'\')}N{$(l).2d(\'47\')}}});1Q.2S(\'8n\',u(){D 1B=$(l).3H(\'1B:eq(0)\');B($.18.3a){1B.2W({1J:0},1,u(){1B.K({1J:\'\'})})}1B.2K(F.6t)});B(F.3o&&F.3o.I){Y(D i=0,k=F.3o.I;i<k;i++){1Q.eq(--F.3o[i]).2d(\'8n\').3f()}};1Q.2S(\'a8\',u(){D 1B=$(l).3H(\'1B:eq(0)\');1B.3j(F.6t);B($.18.3a){1B.2W({1J:1},1,u(){1B.K({1J:\'\'})})}});1Q.2S(\'47\',u(e){D 6B=e.9Z;D 4x=l,1B=$(l).3H(\'1B:eq(0)\'),1W=$(l.1X),2p=2w.1x(\':3p\');B((U 66==\'u\'&&66(l,1W[0],2p[0])==1a&&6B)||1V.6y||1B.2Z(\'.\'+F.4s)||1B.2Z(\'.\'+F.6t)){l.8m();C 1a}1V[\'6y\']=11;B(1W.4y()){B($.18.1y&&F.3I){D 8e=l.1X.1N(\'#\',\'\');1W.1s(\'S\',\'\');3g(u(){1W.1s(\'S\',8e)},0)}u 8k(){B(F.3I&&6B){$.5N.4a(4x.1X)}2p.2W(5E,a0,u(){$(4x).3H(\'1B:eq(0)\').2K(F.4s).cz().3j(F.4s);B(U 6v==\'u\'){6v(4x,1W[0],2p[0])}2p.2K(F.8h).K({1G:\'\',4v:\'\',1g:\'\',1J:\'\'});1W.3j(F.8h).2W(5G,a1,u(){1W.K({4v:\'\',1g:\'\',1J:\'\'});B($.18.1y){2p[0].1E.1x=\'\';1W[0].1E.1x=\'\'}B(U 5H==\'u\'){5H(4x,1W[0],2p[0])}1V.6y=19})})}B(!F.4A){8k()}N{D $$=$(l),3T=$(\'3T\',l)[0],1L=3T.45;$$.2K(F.8l);3T.45=\'cC&#cD;\';3g(u(){$(4x.1X).4w(8j[4x.1X],u(){8k();3T.45=1L;$$.3j(F.8l)})},0)}}N{7E(\'cE 2Z 9e cG 1V.\')}D a3=1e.8P||W.37&&W.37.32||W.1K.32||0;D a4=1e.8O||W.37&&W.37.2Y||W.1K.2Y||0;3g(u(){1e.a2(a3,a4)},0);l.8m();C F.3I&&!!6B});B(F.4A){1Q.eq(F.2L).2d(\'47\').3f()}B(F.3I){$.5N.cH(u(){1Q.eq(F.2L).2d(\'47\').3f()})}})};D 7H=[\'a7\',\'8n\',\'a8\'];Y(D i=0;i<7H.I;i++){$.L[7H[i]]=(u(ab){C u(41){C l.16(u(){D 2h=$(\'6E.1Q-2h\',l);2h=2h.4y()&&2h||$(\'>6E:eq(0)\',l);D a;B(!41||U 41==\'3k\'){a=$(\'1B a\',2h).eq((41&&41>0&&41-1||0))}N B(U 41==\'1T\'){a=$(\'1B a[@3V$="#\'+41+\'"]\',2h)}a.2d(ab)})}})(7H[i])}})(q);q.1i(q.L,{b1:u(V){D O=1P q.O(V,l[0]);O.1u=l.3e(":3W:2l(:3Q):2l(:2P)").4P(u(){O.4p=l});B(O.F.7I){l.3Q(u(T){B(O.F.3l)T.40();C O.1S()})}B(O.F.T){O.1u.2S(O.F.T,u(){O.E(l)})}C O},1w:u(t){C l.7a(q.3Z(l.2O(),t))},5b:u(S){C l.1x("[@Y=\'"+S+"\']")}});q.1i(q.2r[":"],{ba:"!q.3d(a.G)",bb:"!!q.3d(a.G)"});q.O=u(V,1S){l.F=q.1i({},q.O.4k,V);l.5A=1S;l.4f=l.F.4Z;l.6Y=l.4f.I&&l.4f||q(1S);l.2w=l.F.7e.2g(l.F.4Z);l.2P()};q.1i(q.O,{4k:{3v:{},3c:"1m",84:11,7e:q([]),4Z:q([]),7I:11},bd:u(F){q.1i(q.O.4k,F)},3v:{1k:"bf bg 2Z 1k.",7U:"1F 1I a G 9e bj bm {0} 5m.",7Q:"1F 1I a G bn at bo {0} 5m.",7L:"1F 1I a G 7f {0} 7w {1} 5m bq.",5k:"1F 1I a 2Q 5k bs.",1p:"1F 1I a 2Q bu.",2o:"1F 1I a 2Q 2o.",6U:"1F 1I a 2Q 2o (bv).",6W:"7o 7p 7q 5n bx¼bz bB 5n.",3k:"1F 1I a 2Q 3k.",6X:"7o 7p 7q bJ bL 5n.",57:"1F 1I 9n 57",6S:"1F 1I 7M bN G bP.",6N:"1F 1I a G 7f {0} 7w {1}.",6L:"1F 1I a G bU 77 4C 7C 3L {0}.",7B:"1F 1I a G bW 77 4C 7C 3L {0}."},5F:{1S:u(){l.5a();Y(D i=0,E;E=l.1u[i++];){l.4b(E)}C l.2Q()},E:u(E){l.7F(E);l.4b(E);l.3E()},3E:u(2N){B(2N)q.1i(l.2y,2N);l.F.3E?l.F.3E(l.2y,l):l.82()},5r:u(){B(q.L.5r)q(l.5A).5r();l.5a();l.5z();l.1u.3j(l.F.3c)},3t:u(7D){C q(7D)[0]},2N:u(){C q("8f."+l.F.3c,l.6Y)},2P:u(E){l.2y={};l.1W=$([]);l.2p=$([])},5a:u(){l.2P();l.2p=l.2N().1w(l.2w);l.1W.1w(l.2w)},7F:u(E){l.2P();l.2p=l.2N().5b(l.46(l.3t(E)))},4b:u(E){E=l.3t(E);q(E).3j(l.F.3c);D 22=l.22(E);Y(D i=0,1O;1O=22[i++];){3J{D 2a=q.O.1l[1O.2b](q.3d(E.G),E,1O.4S);B(2a===-1)30;B(!2a){q(E).2K(l.F.3c);l.7O(1O,E);30}}3C(e){l.F.3l&&1e.2V&&2V.1m("c8 c9 ca cc E "+E.S+", 4b 7M \'"+1O.2b+"\' 2b");9F e}}},21:u(S,1O){D m=l.F.3v[S];C m&&(m.1Z==2G?m:m[1O.2b])},7O:u(1O,E){D S=l.46(E),P=1O.4S;l.2y[S]=(E.3s||l.21(S,1O)||q.O.3v[1O.2b]||"<7S>ce: cf 21 cg Y "+S+"</7S>").1N("{0}",(P.1Z==3w?P[0]:P)||"").1N("{1}",P[1]||"")},2Q:u(){B(l.7X()){l.3E();C 1a}N{l.5z();B(l.F.7V){l.F.7V(l.5A);C 1a}C 11}},7X:u(){D 4F=0;q.16(l.2y,u(){4F++});C 4F},5z:u(){l.3b("8b")},3b:u(5v){D 3n=l;u 4o(){C 3n["3L"+5v]}B(l.F.4u){4o().1w(4o().3H(l.F.4u))}4o()[5v.2n()]();C l},82:u(){D 2t=11;Y(D 4r 27 l.2y){B(2t&&l.F.84){B(l.4p&&l.2y[l.4p.S])l.4p.4P();N{3J{D E=q("#"+4r);B(E.I)E[0].4P()}3C(e){l.F.3l&&1e.2V&&2V.1m(e)}}2t=1a}l.8c(4r,l.2y[4r])}l.2p=l.2p.2l(l.1W);l.3b("8b").3b("cv")},8c:u(S,21){D 1m=l.2N().5b(S);B(1m.I){B(1m.1s("8g")){1m.2m(21)}}N{1m=q("<8f>").1s({"Y":S,8g:11}).2K(l.F.3c).2m(21);B(l.F.4u){1m=1m.1A().1D().4t("<"+l.F.4u+">").1q()}B(!l.4f.3K(1m).I)l.F.6z?l.F.6z(1m,q("#"+S)):1m.8i("#"+S)}l.1W.1w(1m)},22:u(E){B(!l.R(E))C[];D 22=[];q.16(l.R(E),u(2M,G){22[22.I]={2b:2M,4S:G}});C 22},R:u(E){C l.F.22?l.F.22[l.46(E)]:l.F.6A?q(E).R()[l.F.6A]:q(E).R()},46:u(E){D S=(/3P|4i/i.1j(E.H))?E.1f:E.S;B(!S){D 4T=E.1S.S,4U=/[^a-a5-2s-9\\-5I]/g;S=E.S=(4T?4T.1N(4U,""):"")+E.1f.1N(4U,"")}C S}},3z:u(G,E){53(E.1H.2n()){35\'3x\':C q("2j:3D",E).I;35\'3W\':B(/3P|4i/i.1j(E.H))C q(E.1S||W).3e(\'[@1f="\'+E.1f+\'"]:4M\').I}C G.I},7s:u(P,E){C l.5C[U P]?l.5C[U P](P,E):11},5C:{"69":u(P,E){C P},"1T":u(P,E){C!!q(P,E.1S).I},"u":u(P,E){C P(E)}},1l:{1k:u(G,E,P){B(!q.O.7s(P,E))C-1;53(E.1H.2n()){35\'3x\':D V=q("2j:3D",E);C V.I>0&&(E.H=="3x-ad"||V[0].G.I>0);35\'3W\':53(E.H.2n()){35\'4i\':35\'3P\':C q.O.3z(G,E)>0}am:C G.I>0}},ap:u(G,E,P){C!q.O.1l.1k(G,E)||P.1j(G)},7Q:u(G,E,P){D I=q.O.3z(G,E);C!q.O.1l.1k(G,E)||I>=P},7U:u(G,E,P){D I=q.O.3z(G,E);C!q.O.1l.1k(G,E)||I<=P},7L:u(G,E,P){D I=q.O.3z(G,E);C!q.O.1l.1k(G,E)||(I>=P[0]&&I<=P[1])},7B:u(G,E,P){C!q.O.1l.1k(G,E)||G>=P},6L:u(G,E,P){C!q.O.1l.1k(G,E)||G<=P},6N:u(G,E,P){C!q.O.1l.1k(G,E)||(G>=P[0]&&G<=P[1])},5k:u(G,E){C!q.O.1l.1k(G,E)||/^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$/i.1j(G)},1p:u(G,E){C!q.O.1l.1k(G,E)||/^(aA?|aB):\\/\\/[A-2s-9](\\.?[A-2s-5j„1vœ1v–][A-2s-56\\-1v„1vœ1v–]*)*(\\/([A-2s-5j„1vœ1v–][A-2s-56\\-\\.1v„1vœ1v–]*)?)*(\\?([A-2s-5j„1vœ1v–][A-2s-56\\-\\.%\\+=&1v„1vœ1v–]*)?)?$/i.1j(G)},2o:u(G,E){C!q.O.1l.1k(G,E)||!/aK|8K/.1j(1P 5g(G))},6U:u(G,E){C!q.O.1l.1k(G,E)||/^\\d{4}[/-]\\d{1,2}[/-]\\d{1,2}$/.1j(G)},6W:u(G,E){C!q.O.1l.1k(G,E)||/^\\d\\d?\\.\\d\\d?\\.\\d\\d\\d?\\d?$/.1j(G)},3k:u(G,E){C!q.O.1l.1k(G,E)||/^-?[,0-9]+(\\.\\d+)?$/.1j(G)},6X:u(G,E){C!q.O.1l.1k(G,E)||/^-?[\\.0-9]+(,\\d+)?$/.1j(G)},57:u(G,E){C!q.O.1l.1k(G,E)||/^\\d+$/.1j(G)},6S:u(G,E,P){C G==q(""+P).1R()}},aU:u(1f,2b,21){q.O.1l[1f]=2b;q.O.3v[1f]=21}});(u(){u 2g(1f,2b){B(!3w.5F[1f]){3w.5F[1f]=2b}};2g("cN",u(1z,26){26=26||1e;Y(D i=0;i<l.I;i++)1z.3S(26,l[i],i,l)});2g("cO",u(1z,26){26=26||1e;Y(D i=0;i<l.I;i++)B(!1z.3S(26,l[i],i,l))C 1a;C 11});2g("cR",u(1z,26){26=26||1e;Y(D i=0;i<l.I;i++)B(1z.3S(26,l[i],i,l))C 11;C 1a});2g("4J",u(1z,26){26=26||1e;D r=[];Y(D i=0;i<l.I;i++)r[r.I]=1z.3S(26,l[i],i,l);C r});2g("1x",u(1z,26){26=26||1e;D r=[];Y(D i=0;i<l.I;i++)B(1z.3S(26,l[i],i,l))r[r.I]=l[i];C r});2g("1M",u(ae,9b){Y(D i=9b||0;i<l.I;i++)B(l[i]===ae)C i;C-1});2g("8Y",u(){C l.1x(u(E,2X,8u){C 8u.1M(E)>=2X})})})();(u($){D 2i,5Q,3B,7P,29,8V,6p;$.L.aW=u(F){F=$.1i({},17.cZ.4k,F);B(!2i){2i=$(\'<23 S="d0"><8w></8w><p 4L="1K"></p><p 4L="1p"></p></23>\').1A().K({1Y:\'43\',d1:"d2"}).6a(\'1K\');5Q=$(\'8w\',2i);3B=$(\'p.1K\',2i);7P=$(\'p.1p\',2i)}$(l).1x(\'[@3s]\').16(u(){l.4e=F}).2S("4Y",aj).2S(F.T,6x);C l};u 6x(T){B(l.4e.93)6p=3g(1D,l.4e.93);N 1D();B(l.4e.aZ)$(\'1K\').2S(\'8B\',4a);4a(T);$(l).2S(\'70\',1A)}u aj(){B(l==29||!l.3s)C;29=l;D 6i=$(l),F=l.4e;D 3s=8V=6i.1s(\'3s\');6i.1s(\'3s\',\'\');B(F.a9){5Q.1A();3B.2m(F.a9.3S(l)).1D()}N B(F.94){D 7R=3s.4O(F.94);B(7R.I>1)5Q.2m(7R.85()).1D();3B.5P();Y(D i=0,8z;8z=7R[i];i++){B(i>0)3B.3K("<br/>");3B.3K(8z)}B(3B.2m())3B.1D();N 3B.1A()}N{5Q.2m(3s);3B.1A()}D 3V=(6i.1s(\'3V\')||6i.1s(\'3F\'));B(F.b0&&3V)7P.2m(3V.1N(\'dk://\',\'\')).1D();N 7P.1A();B(F.67){2i.2K(F.67)}B(F.96&&$.18.1y&&/aS\\s(5\\.5|6\\.)/.1j(8Z.90)){2i.16(u(){D 5o=$(l).K(\'91\');B(5o.2F(/^1p\\(["\'](.*\\.dm)["\']\\)$/i)){5o=4K.$1;$(l).K({\'91\':\'2x\',\'1x\':"dn:dr.ax.ds(bY=11, du=dv, 3F=\'"+5o+"\')"});$(l).16(u(){D 1Y=$(l).K(\'1Y\');B(1Y!=\'43\'&&1Y!=\'5y\')$(l).K(\'1Y\',\'5y\')})}})}}u 1D(){6p=19;2i.1D();4a()}u 4a(T){B(29==19){$(\'1K\').6M(\'8B\',4a);C}D 2u=2i[0].8F;D 2v=2i[0].8H;B(T){2u=T.8D+15;2v=T.aD+15;2i.K({2u:2u+\'2q\',2v:2v+\'2q\'})}D v=aI(),h=2i[0];B(v.x+v.cx<h.8F+h.3U){2u-=h.3U+20;2i.K({2u:2u+\'2q\'})}B(v.y+v.cy<h.8H+h.2T){2v-=h.2T+20;2i.K({2v:2v+\'2q\'})}}u aI(){D e=W.37||{},b=W.1K||{},w=1e;u 4I(){D v=dA;Y(D i=0;i<17.I;i++){D n=17[i];B(n&&n<v)v=n}C v}C{x:w.8P||e.32||b.32||0,y:w.8O||e.2Y||b.2Y||0,cx:4I(e.61,b.61,w.8M),cy:4I(e.48,b.48,w.5S)}}u 1A(){B(6p)ak(6p);29=19;2i.1A();B(l.4e.67){2i.3j(l.4e.67)}$(l).1s(\'3s\',8V).6M(\'70\',1A);B(l.4e.96&&$.18.1y&&/aS\\s(5\\.5|6\\.)/.1j(8Z.90)){2i.16(u(){$(l).K({\'1x\':\'\',91:\'\'})})}}$.L.aW.4k={93:e9,T:"4Y",aZ:1a,b0:11,94:19,67:19,96:1a}})(q);q.1i(q.L,{b1:u(V){D O=1P q.O(V,l[0]);O.1u=l.3e(":3W:2l(:3Q):2l(:2P)").4P(u(){O.4p=l});B(O.F.7I){l.3Q(u(T){B(O.F.3l)T.40();C O.1S()})}B(O.F.T){O.1u.2S(O.F.T,u(){O.E(l)})}C O},1w:u(t){C l.7a(q.3Z(l.2O(),t))},5b:u(S){C l.1x("[@Y=\'"+S+"\']")}});q.1i(q.2r[":"],{ba:"!q.3d(a.G)",bb:"!!q.3d(a.G)"});q.O=u(V,1S){l.F=q.1i({},q.O.4k,V);l.5A=1S;l.4f=l.F.4Z;l.6Y=l.4f.I&&l.4f||q(1S);l.2w=l.F.7e.2g(l.F.4Z);l.2P()};q.1i(q.O,{4k:{3v:{},3c:"1m",84:11,7e:q([]),4Z:q([]),7I:11},bd:u(F){q.1i(q.O.4k,F)},3v:{1k:"bf bg 2Z 1k.",7U:"1F 1I a G 9e bj bm {0} 5m.",7Q:"1F 1I a G bn at bo {0} 5m.",7L:"1F 1I a G 7f {0} 7w {1} 5m bq.",5k:"1F 1I a 2Q 5k bs.",1p:"1F 1I a 2Q bu.",2o:"1F 1I a 2Q 2o.",6U:"1F 1I a 2Q 2o (bv).",6W:"7o 7p 7q 5n bx¼bz bB 5n.",3k:"1F 1I a 2Q 3k.",6X:"7o 7p 7q bJ bL 5n.",57:"1F 1I 9n 57",6S:"1F 1I 7M bN G bP.",6N:"1F 1I a G 7f {0} 7w {1}.",6L:"1F 1I a G bU 77 4C 7C 3L {0}.",7B:"1F 1I a G bW 77 4C 7C 3L {0}."},5F:{1S:u(){l.5a();Y(D i=0,E;E=l.1u[i++];){l.4b(E)}C l.2Q()},E:u(E){l.7F(E);l.4b(E);l.3E()},3E:u(2N){B(2N)q.1i(l.2y,2N);l.F.3E?l.F.3E(l.2y,l):l.82()},5r:u(){B(q.L.5r)q(l.5A).5r();l.5a();l.5z();l.1u.3j(l.F.3c)},3t:u(7D){C q(7D)[0]},2N:u(){C q("8f."+l.F.3c,l.6Y)},2P:u(E){l.2y={};l.1W=$([]);l.2p=$([])},5a:u(){l.2P();l.2p=l.2N().1w(l.2w);l.1W.1w(l.2w)},7F:u(E){l.2P();l.2p=l.2N().5b(l.46(l.3t(E)))},4b:u(E){E=l.3t(E);q(E).3j(l.F.3c);D 22=l.22(E);Y(D i=0,1O;1O=22[i++];){3J{D 2a=q.O.1l[1O.2b](q.3d(E.G),E,1O.4S);B(2a===-1)30;B(!2a){q(E).2K(l.F.3c);l.7O(1O,E);30}}3C(e){l.F.3l&&1e.2V&&2V.1m("c8 c9 ca cc E "+E.S+", 4b 7M \'"+1O.2b+"\' 2b");9F e}}},21:u(S,1O){D m=l.F.3v[S];C m&&(m.1Z==2G?m:m[1O.2b])},7O:u(1O,E){D S=l.46(E),P=1O.4S;l.2y[S]=(E.3s||l.21(S,1O)||q.O.3v[1O.2b]||"<7S>ce: cf 21 cg Y "+S+"</7S>").1N("{0}",(P.1Z==3w?P[0]:P)||"").1N("{1}",P[1]||"")},2Q:u(){B(l.7X()){l.3E();C 1a}N{l.5z();B(l.F.7V){l.F.7V(l.5A);C 1a}C 11}},7X:u(){D 4F=0;q.16(l.2y,u(){4F++});C 4F},5z:u(){l.3b("8b")},3b:u(5v){D 3n=l;u 4o(){C 3n["3L"+5v]}B(l.F.4u){4o().1w(4o().3H(l.F.4u))}4o()[5v.2n()]();C l},82:u(){D 2t=11;Y(D 4r 27 l.2y){B(2t&&l.F.84){B(l.4p&&l.2y[l.4p.S])l.4p.4P();N{3J{D E=q("#"+4r);B(E.I)E[0].4P()}3C(e){l.F.3l&&1e.2V&&2V.1m(e)}}2t=1a}l.8c(4r,l.2y[4r])}l.2p=l.2p.2l(l.1W);l.3b("8b").3b("cv")},8c:u(S,21){D 1m=l.2N().5b(S);B(1m.I){B(1m.1s("8g")){1m.2m(21)}}N{1m=q("<8f>").1s({"Y":S,8g:11}).2K(l.F.3c).2m(21);B(l.F.4u){1m=1m.1A().1D().4t("<"+l.F.4u+">").1q()}B(!l.4f.3K(1m).I)l.F.6z?l.F.6z(1m,q("#"+S)):1m.8i("#"+S)}l.1W.1w(1m)},22:u(E){B(!l.R(E))C[];D 22=[];q.16(l.R(E),u(2M,G){22[22.I]={2b:2M,4S:G}});C 22},R:u(E){C l.F.22?l.F.22[l.46(E)]:l.F.6A?q(E).R()[l.F.6A]:q(E).R()},46:u(E){D S=(/3P|4i/i.1j(E.H))?E.1f:E.S;B(!S){D 4T=E.1S.S,4U=/[^a-a5-2s-9\\-5I]/g;S=E.S=(4T?4T.1N(4U,""):"")+E.1f.1N(4U,"")}C S}},3z:u(G,E){53(E.1H.2n()){35\'3x\':C q("2j:3D",E).I;35\'3W\':B(/3P|4i/i.1j(E.H))C q(E.1S||W).3e(\'[@1f="\'+E.1f+\'"]:4M\').I}C G.I},7s:u(P,E){C l.5C[U P]?l.5C[U P](P,E):11},5C:{"69":u(P,E){C P},"1T":u(P,E){C!!q(P,E.1S).I},"u":u(P,E){C P(E)}},1l:{1k:u(G,E,P){B(!q.O.7s(P,E))C-1;53(E.1H.2n()){35\'3x\':D V=q("2j:3D",E);C V.I>0&&(E.H=="3x-ad"||V[0].G.I>0);35\'3W\':53(E.H.2n()){35\'4i\':35\'3P\':C q.O.3z(G,E)>0}am:C G.I>0}},ap:u(G,E,P){C!q.O.1l.1k(G,E)||P.1j(G)},7Q:u(G,E,P){D I=q.O.3z(G,E);C!q.O.1l.1k(G,E)||I>=P},7U:u(G,E,P){D I=q.O.3z(G,E);C!q.O.1l.1k(G,E)||I<=P},7L:u(G,E,P){D I=q.O.3z(G,E);C!q.O.1l.1k(G,E)||(I>=P[0]&&I<=P[1])},7B:u(G,E,P){C!q.O.1l.1k(G,E)||G>=P},6L:u(G,E,P){C!q.O.1l.1k(G,E)||G<=P},6N:u(G,E,P){C!q.O.1l.1k(G,E)||(G>=P[0]&&G<=P[1])},5k:u(G,E){C!q.O.1l.1k(G,E)||/^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$/i.1j(G)},1p:u(G,E){C!q.O.1l.1k(G,E)||/^(aA?|aB):\\/\\/[A-2s-9](\\.?[A-2s-5j„1vœ1v–][A-2s-56\\-1v„1vœ1v–]*)*(\\/([A-2s-5j„1vœ1v–][A-2s-56\\-\\.1v„1vœ1v–]*)?)*(\\?([A-2s-5j„1vœ1v–][A-2s-56\\-\\.%\\+=&1v„1vœ1v–]*)?)?$/i.1j(G)},2o:u(G,E){C!q.O.1l.1k(G,E)||!/aK|8K/.1j(1P 5g(G))},6U:u(G,E){C!q.O.1l.1k(G,E)||/^\\d{4}[/-]\\d{1,2}[/-]\\d{1,2}$/.1j(G)},6W:u(G,E){C!q.O.1l.1k(G,E)||/^\\d\\d?\\.\\d\\d?\\.\\d\\d\\d?\\d?$/.1j(G)},3k:u(G,E){C!q.O.1l.1k(G,E)||/^-?[,0-9]+(\\.\\d+)?$/.1j(G)},6X:u(G,E){C!q.O.1l.1k(G,E)||/^-?[\\.0-9]+(,\\d+)?$/.1j(G)},57:u(G,E){C!q.O.1l.1k(G,E)||/^\\d+$/.1j(G)},6S:u(G,E,P){C G==q(""+P).1R()}},aU:u(1f,2b,21){q.O.1l[1f]=2b;q.O.3v[1f]=21}});(u($){$.L.2f=u(V){C l.16(u(){$.2f(l,V)})};$.2f=u(1V,V){D F={\'5i\':19,\'2f\':\'6h\',\'33\':eb,\'7t\':\'9q\',\'1o\':\'b3\',\'4L\':\'2f\',\'1g\':\'3Y\'};B(V)$.1i(F,V);B(F.5i===19)D 1u=$(1V).5i();N D 1u=$(1V).5i(F.5i);B(1u.I>1){$(1V).K(\'1Y\',\'5y\');$(1V).K(\'1g\',F["1g"]);$(1V).2K(F["4L"]);Y(D i=0;i<1u.I;i++){$(1u[i]).K(\'z-2X\',2G(1u.I-i));$(1u[i]).K(\'1Y\',\'43\');$(1u[i]).1A()};B(F["2f"]=="6h"){3g(u(){$.2f.7N(1u,F,1,0)},F.33);$(1u[0]).1D()}N B(F["2f"]=="55"){3g(u(){do{29=4g.bX(4g.55()*1u.I)}2J(29==0)$.2f.7N(1u,F,29,0)},F.33);$(1u[0]).1D()}N 7E(\'q: 2f: 9w "2f" 9z 9A be "6h" 4C "55"\')}};$.2f.7N=u(1u,F,29,2z){B(F["7t"]==\'bS\'){$(1u[2z]).bA(F.1o,$(1u[29]).bD(F.1o))}N B(F["7t"]==\'9q\'){$(1u[2z]).bH(F.1o);$(1u[29]).bM(F.1o)}N 7E(\'q: 2f: 9w "7t" 9z 9A be "bS" 4C "9q"\');B(F["2f"]=="6h"){B((29+1)<1u.I){29=29+1;2z=29-1}N{29=0;2z=1u.I-1}}N B(F["2f"]=="55"){2z=29;2J(29==2z)29=4g.bX(4g.55()*1u.I)}N 7E(\'q: 2f: 9w "2f" 9z 9A be "6h" 4C "55"\');3g((u(){$.2f.7N(1u,F,29,2z)}),F.33)}})(q);(u($){$.3q=u(){l.3X={};C};$.3q.5F={5Z:u(){D Q={"S":19,"4Q":4c,"7l":1a,"6C":1a,"14":19,"38":u(){},"25":[]};u 5J(L){C(!!L&&U L!="1T"&&U L[0]=="1c"&&4K("u","i").1j(L+""))};D i=0;D 9M=1a;B(U 17[i]=="42"&&17.I>1){9M=11;i++}B(U 17[i]=="42"){Y(D 2j 27 17[i])B(U Q[2j]!="1c")Q[2j]=17[i][2j];i++}B(U 17[i]=="3k"||(U 17[i]=="1T"&&17[i].2F(4K("^[0-9]+[cq]$"))))Q["4Q"]=17[i++];B(U 17[i]=="69")Q["7l"]=17[i++];B(U 17[i]=="69")Q["6C"]=17[i++];B(U 17[i]=="42"&&U 17[i+1]=="1T"&&5J(17[i][17[i+1]])){Q["14"]=17[i++];Q["38"]=17[i++]}N B(U 17[i]!="1c"&&(5J(17[i])||U 17[i]=="1T"))Q["38"]=17[i++];2J(U 17[i]!="1c")Q["25"].1w(17[i++]);B(9M){B(U 17[1]=="42"){Y(D 2j 27 17[0])B(U Q[2j]!="1c"&&U 17[1][2j]=="1c")Q[2j]=17[0][2j]}N{Y(D 2j 27 17[0])B(U Q[2j]!="1c")Q[2j]=17[0][2j]}i++}Q["7x"]=l;Q["8d"]=19;D 2F=2G(Q["4Q"]).2F(4K("^([0-9]+)([cq])$"));B(2F&&2F[0]!="1c"&&2F[1]!="1c")Q["4Q"]=2G(1b(2F[1])*{s:4c,m:4c*60,h:4c*60*60,d:4c*60*60*24,w:4c*60*60*24*7}[2F[2]]);B(Q["S"]==19)Q["S"]=(2G(Q["7l"])+":"+2G(Q["6C"])+":"+2G(Q["4Q"])+":"+2G(Q["14"])+":"+2G(Q["38"])+":"+2G(Q["25"]));B(Q["6C"])B(U l.3X[Q["S"]]!="1c")C l.3X[Q["S"]];B(!5J(Q["38"])){B(Q["14"]!=19&&U Q["14"]=="42"&&U Q["38"]=="1T"&&5J(Q["14"][Q["38"]]))Q["38"]=Q["14"][Q["38"]];N Q["38"]=6D("u () { "+Q["38"]+" }")}Q["8d"]=l.6G(Q);l.3X[Q["S"]]=Q;C Q},8C:u(Q){B(U Q=="1T")Q=l.3X[Q];Q["8d"]=l.6G(Q);C Q},6G:u(Q){D ac=u(){D 14=(Q["14"]!=19?Q["14"]:Q);(Q["38"]).1C(14,Q["25"]);B(U(Q["7x"]).3X[Q["S"]]!="1c"&&Q["7l"])(Q["7x"]).6G(Q);N 6m(Q["7x"]).3X[Q["S"]]};C 3g(ac,Q["4Q"])},8E:u(Q){B(U Q=="1T")Q=l.3X[Q];B(U Q=="42"){ak(Q["8d"]);6m l.3X[Q["S"]]}}};$.1i({3q$:1P $.3q(),5Z:u(){C $.3q$.5Z.1C($.3q$,17)},8C:u(){C $.3q$.8C.1C($.3q$,17)},8E:u(){C $.3q$.8E.1C($.3q$,17)}});$.L.1i({5Z:u(){D a=[{}];Y(D i=0;i<17.I;i++)a.1w(17[i]);C l.16(u(){a[0]={"S":l,"14":l};C $.5Z.1C($,a)})}})})(q);(u($){$.1i({5p$:19,3l:u(aO){D aR=($.5p$==11?11:1a);$.5p$=(aO?11:1a);C aR},68:u(21){B($.5p$==11)2V.3l(21)}});$.L.1i({68:u(21){B($.5p$==11){C l.16(u(){B(U 21!=="1c")$.68(21);$.68(l)})}}});$(W).34(u(){D 7d=$("2m").1s("3l");B(7d=="11"||7d=="1a")$.3l(7d=="11"?11:1a)});$(W).34(u(){B(U 1e.2V==="1c"){u cw(14){D 1L=19;B(U 14==="1c")1L="[1c]";N B(U 14==="69")1L=(14?"11":"1a");N B(U 14==="3k")1L=""+14;N B(U 14==="1T")1L=14;N B(U 14==="u")1L=14;N B(U 14==="42"){B(U 14.31!=="1c"){B(14.31==1){1L=\'&9m;\';1L+=14.1H.2n();Y(D i=0;i<14.9r.I;i++)1L+=\' \'+14.9r[i].1H.2n()+\'="\'+14.9r[i].6l+\'"\';1L+=\'&9t;\'}N B(14.31==2)1L=14.1H+\'="\'+14.6l;N B(14.31==3)1L=14.6l}N B(U 14.ch!=="1c")1L=14.ch();N B(U 14.5B!=="1c")1L=14.5B()}B(1L==19)1L="[fk]";C 1L};$(W).34(u(){$("1K").3K(\'<23 S="4D"><4B></4B></23>\');$("#4D").K("1G","2x").K("cW","d6").K("dg","#dl").K("dw","#dx").K("6u","6V 5d 6V 5d").K("62","6w b7 #dI").K("73","6w 6w 6w 6w");$("#4D 4B").K("73","5d 5d 5d 5d").K("97","en")});D 8X=["68","3l","eG","eL","1m","eX","6g","f3","fa","fh","4Q","fj","4F","cF","cI","cV"];1e.2V={};Y(D i=0;i<8X.I;i++){1e.2V[8X[i]]=u(a6){$(\'#4D\').K("1G",$.5p$==11?"44":"2x");$(\'#4D 4B\').3K(\'<1B>\'+cw(a6)+\'</1B>\').K;$("#4D 4B 1B").K("e6","58 b7 #eN").K("6u","58 6V 58 6V")}}1e.2V["4D"]=11}})})(q);',62,951,'|||||||||||||||||||||this|||||jQuery||||function|||||||if|return|var|element|settings|value|type|length|elem|css|fn||else|validator|param|ctx|data|id|event|typeof|options|document||for|||true|prop||obj||each|arguments|browser|null|false|parseInt|undefined|ret|window|name|height|callback|extend|test|required|methods|error|xml|speed|url|parent|cur|attr|parentNode|elements|Ã|push|filter|msie|handler|hide|li|apply|show|style|Please|display|nodeName|enter|opacity|body|text|indexOf|replace|rule|new|tabs|val|form|string|status|container|toShow|hash|position|constructor||message|rules|div||args|scope|in|firstChild|current|result|method|width|trigger|events|alternation|add|nav|helper|option|className|not|html|toLowerCase|date|toHide|px|expr|Z0|first|left|top|containers|none|errorList|last|hidden|global|expires|isFunction|arg|match|String|context|opt|while|addClass|initial|key|errors|get|reset|valid|num|bind|offsetHeight|queue|console|animate|index|scrollTop|is|break|nodeType|scrollLeft|timeout|ready|case|old|documentElement|func|easing|safari|toggle|errorClass|trim|find|end|setTimeout|table|target|removeClass|number|debug|elems|self|disabled|visible|scheduler|params|title|clean|tbody|messages|Array|select|ifModified|getLength|complete|tBody|catch|selected|showErrors|src|opera|parents|bookmarkable|try|append|to|orig|nth|done|radio|submit|duration|call|span|offsetWidth|href|input|bucket|auto|merge|preventDefault|tab|object|absolute|block|innerHTML|findId|click|clientHeight|remove|update|check|1000|borderLeftWidth|tSettings|labelContainer|Math|nextSibling|checkbox|cookie|defaults|borderTopWidth|mozilla|tb|which|lastActive|script|elementID|selectedClass|wrap|wrapper|overflow|load|clicked|size|firstNum|remote|ol|or|jQueryDebug|pushStack|count|encodeURIComponent|oid|min|map|RegExp|class|checked|returnValue|split|focus|time|fix|parameters|formId|idcleanup|cssFloat|now|curAnim|mouseover|errorLabelContainer||grep|timers|switch|static|random|9_|digits|1px|stopPropagation|prepareForm|forId|custom|0px|guid|res|Date|sibling|children|9Ã|email|success|characters|ein|image|_debug|oldblock|resetForm|re|boxModel|exec|that|tmp|insertBefore|relative|hideErrors|currentForm|toString|dependTypes|location|hideAnim|prototype|showAnim|onShow|_|_isfn|Number|scroll|st|ajaxHistory|fx|empty|tTitle|op|innerHeight|substr|childNodes|handlers|makeArray|on|originalEvent|schedule||clientWidth|border|removeChild|readyList|curCSS|onClick|extraClass|log|boolean|appendTo|onreadystatechange|multiFilter|ownerDocument|has|path|dir|sequence|source|re2|sl|nodeValue|delete|currentStyle|domManip|tID|containerClass|setInterval|domain|disabledClass|padding|onHide|4px|handle|locked|errorPlacement|meta|trueClick|protect|eval|ul|cloneNode|_schedule|oWidth|tr|toUpperCase|absparent|maxValue|unbind|rangeValue|inArray|isReady|token|foundToken|equalTo|doc|dateISO|10px|dateDE|numberDE|errorContext|diff|mouseout|Function|styleFloat|margin|secure|getTime|parseFloat|than|step|oldDisplay|setArray|ajax|ajaxSettings|req|errorContainer|between|getAttribute|oHeight|setRequestHeader|modRes|ival|repeat|handleError|async|Bitte|geben|Sie|lastModified|depend|animation|responseText|jquery|and|_scheduler|readyState|button|tag|minValue|equal|selector|alert|prepareElement|max|tabEvents|onsubmit|tagName|child|rangeLength|the|_next|formatAndAdd|tUrl|minLength|parts|strong|expression|maxLength|submitHandler|XMLHttpRequest|countErrors|navClass|mergeNum|defaultView|msie6|defaultShowErrors|minHeight|focusInvalid|shift|visibility|cachedWidth|currentWidth|cachedFontSize|currentFontSize|Hide|showError|_handle|toShowId|label|generated|hideClass|insertAfter|remoteUrls|switchTab|loadingClass|blur|disableTab|pos|deep|clone|startTime|parPos|swap|array|float|h3|isXMLDoc|inv|part|chars|mousemove|reschedule|pageX|cancel|offsetLeft|matched|offsetTop|triggered|slice|NaN|lastToggle|innerWidth|handleHover|pageYOffset|pageXOffset|getElementById|safariTimer|getComputedStyle|unload|els|oldTitle|fn2|names|unique|navigator|userAgent|backgroundImage|from|delay|showBody|lastNum|fixPNG|paddingRight|GET|classFilter|pass|offset|00|_resort|no|isTimeout|dataType|requestDone|active|file|Modified|getResponseHeader|lt|only|evalScripts|globalEval|fade|attributes|clearInterval|gt|join|cookies|parameter|substring|cookieValue|must|either|appendChild|relparent|paddingLeft|paddingTop|throw|returnObject|bgiframe|createElement|hasSelectedClass|unFocus|second|override|jq|heights|font|watchFontSize|_setAutoHeight|cachedHeight|currentHeight|fxSpeed|fxSlide|fxFade|fxShow|fxHide|clientX|hideSpeed|showSpeed|scrollTo|scrollX|scrollY|zA|msg|triggerTab|enableTab|bodyHandler|prevObject|tabEvent|trampoline|multiple|subject|getPropertyValue|newProp|alpha|100|save|clearTimeout||default|zoom|fl|regex|webkit|prepend|before||after|removeAttr|contains|Microsoft|tl|getElementsByTagName|https|ftp|parse|pageY|_prefix|even|odd|unshift|viewport|srcElement|Invalid|DOMContentLoaded|__ie_init|one|onoff|_toggle|state|old_value|MSIE|swing|addMethod|dequeue|Tooltip|timer|oldOverflow|track|showURL|validate|force|normal|getScript|POST|processData|solid|ajaxStart|ActiveXObject|blank|filled|contentType|setDefaults||This|field|beforeSend|ajaxSend|longer|notmodified||then|of|least|ajaxStop|long||address||URL|ISO|ajaxError|gÃ|httpSuccess|ltiges|slideUp|Datum|200|slideDown|httpNotModified|Last|304|fadeOut|xmlRes|eine|httpData|Nummer|fadeIn|same|json|again|ajaxComplete|ajaxSuccess|slide|execScript|less|ywdhms|greater|floor|enabled|setTime|toUTCString|previousSibling|_height|_width|borderBottomWidth|paddingBottom|borderRightWidth|offsetParent|exception|occured|when|marginLeft|checking|marginTop|Warning|No|defined|toJSONString|iframe|hashPrefix|remoteCount|tabStruct|fxAutoHeight|behaviour|watch|fxShowSpeed|smhdw|fxHideSpeed|action||tempForm|Show|object2text|||siblings|exclude|password|Loading|8230|There|trace|such|initialize|profile|createTextNode|FORM|reverse|weight|forEach|every|Top|Bottom|some|Left|Width|right|profileEnd|fontFamily|tfoot|th|callee|tooltip|zIndex|3000|htmlFor|readonly|readOnly|monospace|getAttributeNode|setAttribute|ig|concat|compatible|compatMode|next|prev|prependTo|backgroundColor|removeAttribute|toggleClass|lastChild|http|ffffff|png|progid||u0128|uFFFF|DXImageTransform|AlphaImageLoader|continue|sizingMethod|crop|color|000000|td|clientY|Infinity|cancelBubble|fromElement|toElement|relatedTarget|removeEventListener|dblclick|mouseup|666699|change|keydown|keypress|keyup|thead|addEventListener|mousedown|write|resize|scr|ipt|defer|loaded|slideToggle|fadeTo|Object|hover|slow|600|fast|400|linear|cos|borderBottom|PI|10000|250|loadIfModified|2000|serialize|textContent|getIfModified|getJSON|post|ajaxTimeout|ajaxSetup|application|www||urlencoded|20px|XMLHTTP|open||Content|Type|If|Since|Thu|01|Jan|1970|GMT|Requested|With|overrideMimeType|Connection|close|abort|info|send|protocol|300|content|warn|responseXML|cccccc|center|horizontal|vertical|365|Right|invalid|textarea|decodeURIComponent|scrollHeight|assert|noConflict|scrollWidth|outerHeight|outerWidth|inline|dirxml|bgIframe|javascript|frameborder|tabindex|Alpha|Opacity|group|CSS1Compat|line|loading|500|removeExpression|sort|groupEnd|setExpression|timeEnd|unknown'.split('|'),0,{}))
  +eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('B(U 1e.q=="1c"){1e.1c=1e.1c;D q=u(a,c){B(1e==l)C 1P q(a,c);a=a||V;B(q.2G(a))C 1P q(V)[q.L.36?"36":"4w"](a);B(U a=="1R"){D m=/^[^<]*(<(.|\\s)+>)[^>]*$/.53(a);B(m)a=q.3w([m[1]]);N C 1P q(c).3i(a)}C l.7d(a.1Y==3H&&a||(a.7x||a.I&&a!=1e&&!a.34&&a[0]!=1c&&a[0].34)&&q.6f(a)||[a])};B(U $!="1c")q.5I$=$;D $=q;q.L=q.5F={7x:"1.1.2",4z:u(){C l.I},I:0,2S:u(2O){C 2O==1c?q.6f(l):l[2O]},4D:u(a){D 1d=q(a);1d.aa=l;C 1d},7d:u(a){l.I=0;[].1y.1E(l,a);C l},16:u(L,23){C q.16(l,L,23)},2V:u(14){D 8o=-1;l.16(u(i){B(l==14)8o=i});C 8o},1s:u(2N,G,H){D 14=2N;B(2N.1Y==2F)B(G==1c)C l.I&&q[H||"1s"](l[0],2N)||1c;N{14={};14[2N]=G}C l.16(u(2V){W(D 12 28 14)q.1s(H?l.1D:l,12,q.12(l,14[12],H,2V,12))})},K:u(2N,G){C l.1s(2N,G,"63")},1L:u(e){B(U e=="1R")C l.6s().3M(V.cJ(e));D t="";q.16(e||l,u(){q.16(l.5R,u(){B(l.34!=8)t+=l.34!=1?l.6n:q.L.1L([l])})});C t},4t:u(){D a,23=17;C l.16(u(){B(!a)a=q.3w(23,l.6a);D b=a[0].6I(11);l.1t.5x(b,l);2K(b.22)b=b.22;b.9y(l)})},3M:u(){C l.6l(17,11,1,u(a){l.9y(a)})},ar:u(){C l.6l(17,11,-1,u(a){l.5x(a,l.22)})},as:u(){C l.6l(17,1a,1,u(a){l.1t.5x(a,l)})},au:u(){C l.6l(17,1a,-1,u(a){l.1t.5x(a,l.4a)})},3f:u(){C l.aa||q([])},3i:u(t){C l.4D(q.8s(q.4I(l,u(a){C q.3i(t,a)})),t)},9z:u(9P){C l.4D(q.4I(l,u(a){D a=a.6I(9P!=1c?9P:11);a.$2d=19;C a}))},1x:u(t){C l.4D(q.2G(t)&&q.4Y(l,u(el,2V){C t.1E(el,[2V])})||q.6b(t,l))},2f:u(t){C l.4D(t.1Y==2F&&q.6b(t,l,11)||q.4Y(l,u(a){C(t.1Y==3H||t.7x)?q.7B(a,t)<0:a!=t}))},2k:u(t){C l.4D(q.40(l.2S(),t.1Y==2F?q(t).2S():t.I!=1c&&(!t.1I||t.1I=="cK")?t:[t]))},2Z:u(2r){C 2r?q.6b(2r,l).I>0:1a},1Q:u(1Q){C 1Q==1c?(l.I?l[0].G:19):l.1s("G",1Q)},2m:u(1Q){C 1Q==1c?(l.I?l[0].3R:19):l.6s().3M(1Q)},6l:u(23,3j,6h,L){D 9z=l.I>1,a;C l.16(u(){B(!a){a=q.3w(23,l.6a);B(6h<0)a.cL()}D 14=l;B(3j&&q.1I(l,"3j")&&q.1I(a[0],"6L"))14=l.aA("3z")[0]||l.9y(V.9G("3z"));q.16(a,u(){L.1E(14,[9z?l.6I(11):l])})})}};q.1i=q.L.1i=u(){D 3g=17[0],a=1;B(17.I==1){3g=l;a=0}D 12;2K(12=17[a++])W(D i 28 12)3g[i]=12[i];C 3g};q.1i({eX:u(){B(q.5I$)$=q.5I$;C q},2G:u(L){C!!L&&U L!="1R"&&!L.1I&&L.1Y!=3H&&/u/i.1j(L+"")},8v:u(J){C J.7I&&J.6a&&!J.6a.1K},1I:u(J,1f){C J.1I&&J.1I.6N()==1f.6N()},16:u(14,L,23){B(14.I==1c)W(D i 28 14)L.1E(14[i],23||[i,14[i]]);N W(D i=0,4A=14.I;i<4A;i++)B(L.1E(14[i],23||[i,14[i]])===1a)30;C 14},12:u(J,G,H,2V,12){B(q.2G(G))G=G.3V(J,[2V]);D cA=/z-?2V|9O-?cN|1J|an|fb-?1g/i;C G&&G.1Y==5K&&H=="63"&&!cA.1j(12)?G+"2q":G},2g:{2k:u(J,c){q.16(c.4E(/\\s+/),u(i,1r){B(!q.2g.6c(J.2g,1r))J.2g+=(J.2g?" ":"")+1r})},4d:u(J,c){J.2g=c?q.4Y(J.2g.4E(/\\s+/),u(1r){C!q.2g.6c(c,1r)}).9r(" "):""},6c:u(t,c){C q.7B(c,(t.2g||t).5B().4E(/\\s+/))>-1}},9m:u(e,o,f){W(D i 28 o){e.1D["37"+i]=e.1D[i];e.1D[i]=o[i]}f.1E(e,[]);W(D i 28 o)e.1D[i]=e.1D["37"+i]},K:u(e,p){B(p=="1g"||p=="2c"){D 37={},7k,6J,d=["cQ","cR","eR","cS"];q.16(d,u(){37["6w"+l]=0;37["5P"+l+"cT"]=0});q.9m(e,37,u(){B(q(e).2Z(\':3h\')){7k=e.2X;6J=e.46}N{e=q(e.6I(11)).3i(":3S").av("4M").3f().K({84:"2v",1X:"3W",1H:"3Y",cU:"0",2B:"0"}).5N(e.1t)[0];D 8q=q.K(e.1t,"1X")||"5w";B(8q=="5w")e.1t.1D.1X="5y";7k=e.4h;6J=e.5X;B(8q=="5w")e.1t.1D.1X="5w";e.1t.5U(e)}});C p=="1g"?7k:6J}C q.63(e,p)},63:u(J,12,b2){D 1d;B(12=="1J"&&q.18.1z){1d=q.1s(J.1D,"1J");C 1d==""?"1":1d}B(12=="8u"||12=="4V")12=q.18.1z?"6M":"4V";B(!b2&&J.1D[12])1d=J.1D[12];N B(V.7Y&&V.7Y.8Q){B(12=="4V"||12=="6M")12="8u";12=12.1N(/([A-Z])/g,"-$1").2n();D 1r=V.7Y.8Q(J,19);B(1r)1d=1r.af(12);N B(12=="1H")1d="2A";N q.9m(J,{1H:"3Y"},u(){D c=V.7Y.8Q(l,"");1d=c&&c.af(12)||""})}N B(J.6p){D ag=12.1N(/\\-(\\w)/g,u(m,c){C c.6N()});1d=J.6p[12]||J.6p[ag]}C 1d},3w:u(a,6K){D r=[];6K=6K||V;q.16(a,u(i,2D){B(!2D)C;B(2D.1Y==5K)2D=2D.5B();B(U 2D=="1R"){D s=q.3d(2D),26=6K.9G("26"),4p=[];D 4t=!s.1M("<2J")&&[1,"<3B>","</3B>"]||(!s.1M("<dz")||!s.1M("<3z")||!s.1M("<dB"))&&[1,"<3j>","</3j>"]||!s.1M("<6L")&&[2,"<3j><3z>","</3z></3j>"]||(!s.1M("<dw")||!s.1M("<cY"))&&[3,"<3j><3z><6L>","</6L></3z></3j>"]||[0,"",""];26.3R=4t[1]+2D+4t[2];2K(4t[0]--)26=26.22;B(q.18.1z){B(!s.1M("<3j")&&s.1M("<3z")<0)4p=26.22&&26.22.5R;N B(4t[1]=="<3j>"&&s.1M("<3z")<0)4p=26.5R;W(D n=4p.I-1;n>=0;--n)B(q.1I(4p[n],"3z")&&!4p[n].5R.I)4p[n].1t.5U(4p[n])}2D=q.6f(26.5R)}B(2D.I===0&&!q.1I(2D,"1U"))C;B(2D[0]==1c||q.1I(2D,"1U"))r.1y(2D);N r=q.40(r,2D)});C r},1s:u(J,1f,G){D 4J=q.8v(J)?{}:{"W":"d2","4L":"2g","8u":q.18.1z?"6M":"4V",4V:q.18.1z?"6M":"4V",3R:"3R",2g:"2g",G:"G",3o:"3o",4M:"4M",d3:"d4",3t:"3t"};B(1f=="1J"&&q.18.1z){B(G!=1c){J.an=1;J.1x=(J.1x||"").1N(/a2\\([^)]*\\)/,"")+(79(G).5B()=="8I"?"":"a2(1J="+G*ai+")")}C J.1x?(79(J.1x.2H(/1J=([^)]*)/)[1])/ai).5B():""}B(4J[1f]){B(G!=1c)J[4J[1f]]=G;C J[4J[1f]]}N B(G==1c&&q.18.1z&&q.1I(J,"1U")&&(1f=="cs"||1f=="2a"))C J.d6(1f).6n;N B(J.7I){B(G!=1c)J.d7(1f,G);B(q.18.1z&&/47|3G/.1j(1f)&&!q.8v(J))C J.6V(1f,2);C J.6V(1f)}N{1f=1f.1N(/-([a-z])/d8,u(z,b){C b.6N()});B(G!=1c)J[1f]=G;C J[1f]}},3d:u(t){C t.1N(/^\\s+|\\s+$/g,"")},6f:u(a){D r=[];B(U a!="8U")W(D i=0,al=a.I;i<al;i++)r.1y(a[i]);N r=a.8Y(0);C r},7B:u(b,a){W(D i=0,al=a.I;i<al;i++)B(a[i]==b)C i;C-1},40:u(2s,9K){W(D i=0;9K[i];i++)2s.1y(9K[i]);C 2s},8s:u(2s){D r=[],2O=q.7X++;W(D i=0,ao=2s.I;i<ao;i++)B(2s[i].7X!=2O){2s[i].7X=2O;r.1y(2s[i])}C r},7X:0,4Y:u(3n,L,8w){B(U L=="1R")L=1P 74("a","i","C "+L);D 2b=[];W(D i=0,el=3n.I;i<el;i++)B(!8w&&L(3n[i],i)||8w&&!L(3n[i],i))2b.1y(3n[i]);C 2b},4I:u(3n,L){B(U L=="1R")L=1P 74("a","C "+L);D 2b=[];W(D i=0,el=3n.I;i<el;i++){D 1Q=L(3n[i],i);B(1Q!==19&&1Q!=1c){B(1Q.1Y!=3H)1Q=[1Q];2b=2b.ff(1Q)}}C 2b}});1P u(){D b=8V.8W.2n();q.18={3b:/aq/.1j(b),3A:/3A/.1j(b),1z:/1z/.1j(b)&&!/3A/.1j(b),4o:/4o/.1j(b)&&!/(d9|aq)/.1j(b)};q.5t=!q.18.1z||V.da=="dc"};q.16({1o:"a.1t",3K:"q.3K(a)",dd:"q.3C(a,2,\'4a\')",de:"q.3C(a,2,\'c0\')",cz:"q.5m(a.1t.22,a)",5h:"q.5m(a.22)"},u(i,n){q.L[i]=u(a){D 1d=q.4I(l,n);B(a&&U a=="1R")1d=q.6b(a,1d);C l.4D(1d)}});q.16({5N:"3M",df:"ar",5x:"as",8i:"au"},u(i,n){q.L[i]=u(){D a=17;C l.16(u(){W(D j=0,al=a.I;j<al;j++)q(a[j])[n](l)})}});q.16({av:u(2N){q.1s(l,2N,"");l.f1(2N)},2L:u(c){q.2g.2k(l,c)},3p:u(c){q.2g.4d(l,c)},dg:u(c){q.2g[q.2g.6c(l,c)?"4d":"2k"](l,c)},4d:u(a){B(!a||q.1x(a,[l]).r.I)l.1t.5U(l)},6s:u(){2K(l.22)l.5U(l.22)}},u(i,n){q.L[i]=u(){C l.16(n,17)}});q.16(["eq","9h","9q","aw"],u(i,n){q.L[n]=u(2O,L){C l.1x(":"+n+"("+2O+")",L)}});q.16(["1g","2c"],u(i,n){q.L[n]=u(h){C h==1c?(l.I?q.K(l[0],n):19):l.K(n,h.1Y==2F?h:h+"2q")}});q.1i({2r:{"":"m[2]==\'*\'||q.1I(a,m[2])","#":"a.6V(\'T\')==m[2]",":":{9h:"i<m[3]-0",9q:"i>m[3]-0",3C:"m[3]-0==i",eq:"m[3]-0==i",2s:"i==0",2w:"i==r.I-1",aG:"i%2==0",aH:"i%2","3C-7C":"q.3C(a.1t.22,m[3],\'4a\',a)==a","2s-7C":"q.3C(a.1t.22,1,\'4a\')==a","2w-7C":"q.3C(a.1t.di,1,\'c0\')==a","9i-7C":"q.5m(a.1t.22).I==1",1o:"a.22",6s:"!a.22",aw:"q.L.1L.1E([a]).1M(m[3])>=0",3h:\'a.H!="2v"&&q.K(a,"1H")!="2A"&&q.K(a,"84")!="2v"\',2v:\'a.H=="2v"||q.K(a,"1H")=="2A"||q.K(a,"84")=="2v"\',ay:"!a.3o",3o:"a.3o",4M:"a.4M",3t:"a.3t||q.1s(a,\'3t\')",1L:"a.H==\'1L\'",3S:"a.H==\'3S\'",4f:"a.H==\'4f\'",9e:"a.H==\'9e\'",ci:"a.H==\'ci\'",3X:"a.H==\'3X\'",5r:"a.H==\'5r\'",2P:"a.H==\'2P\'",8f:\'a.H=="8f"||q.1I(a,"8f")\',3Z:"/3Z|3B|eU|8f/i.1j(a.1I)"},".":"q.2g.6c(a,m[2])","@":{"=":"z==m[4]","!=":"z!=m[4]","^=":"z&&!z.1M(m[4])","$=":"z&&z.6e(z.I - m[4].I,m[4].I)==m[4]","*=":"z&&z.1M(m[4])>=0","":"z",96:u(m){C["",m[1],m[3],m[2],m[5]]},aF:"z=a[m[3]];B(!z||/47|3G/.1j(m[3]))z=q.1s(a,m[3]);"},"[":"1b(m[2])?q.3C(a.1t.22,1b(m[2]),\'4a\',a)==a:q.3i(m[2],a).I"},aE:[/^\\[ *(@)([\\w-]+) *([!*$^=]*) *(\'?"?)(.*?)\\4 *\\]/,/^(\\[)\\s*(.*?(\\[.*?\\])?[^[]*?)\\s*\\]/,/^(:)([\\w-]+)\\("?\'?(.*?(\\(.*?\\))?[^(]*?)"?\'?\\)/,1P 4K("^([:.#]*)("+(q.8A="(?:[\\\\w\\dn-\\dp*-]|\\\\\\\\.)")+"+)")],6S:[/^(\\/?\\.\\.)/,"a.1t",/^(>|\\/)/,"q.5m(a.22)",/^(\\+)/,"q.3C(a,2,\'4a\')",/^(~)/,u(a){D s=q.5m(a.1t.22);C s.8Y(q.7B(a,s)+1)}],6b:u(2r,3n,2f){D 37,1r=[];2K(2r&&2r!=37){37=2r;D f=q.1x(2r,3n,2f);2r=f.t.1N(/^\\s*,\\s*/,"");1r=2f?3n=f.r:q.40(1r,f.r)}C 1r},3i:u(t,2M){B(U t!="1R")C[t];B(2M&&!2M.34)2M=19;2M=2M||V;B(!t.1M("//")){2M=2M.38;t=t.6e(2,t.I)}N B(!t.1M("/")&&!2M.6a){2M=2M.38;t=t.6e(1,t.I);B(t.1M("/")>=1)t=t.6e(t.1M("/"),t.I)}D 1d=[2M],3O=[],2w;2K(t&&2w!=t){D r=[];2w=t;t=q.3d(t).1N(/^\\/\\//,"");D 6T=1a;D 5o=/^[\\/>]\\s*([\\w*-]+)/;D m=5o.53(t);B(m){W(D i=0;1d[i];i++)W(D c=1d[i].22;c;c=c.4a)B(c.34==1&&(m[1]=="*"||q.1I(c,m[1])))r.1y(c);1d=r;t=t.1N(5o,"");B(t.1M(" ")==0)dr;6T=11}N{W(D i=0,az=q.6S.I;i<az;i+=2){D 5o=q.6S[i],L=q.6S[i+1];D m=5o.53(t);B(m){r=1d=q.4I(1d,q.2G(L)?L:1P 74("a","C "+L));t=q.3d(t.1N(5o,""));6T=11;30}}}B(t&&!6T){B(!t.1M(",")){B(1d[0]==2M)1d.7W();3O=q.40(3O,1d);r=1d=[2M];t=" "+t.6e(1,t.I)}N{D 6k=1P 4K("^(\\\\w+)(#)("+q.8A+"+)");D m=6k.53(t);B(m){m=[0,m[2],m[3],m[1]]}N{6k=1P 4K("^([#.]?)("+q.8A+"*)");m=6k.53(t)}m[2]=m[2].1N(/\\\\/g,"");D J=1d[1d.I-1];B(m[1]=="#"&&J&&J.8N){D 4O=J.8N(m[2]);B((q.18.1z||q.18.3A)&&4O&&4O.T!=m[2])4O=q(\'[@T="\'+m[2]+\'"]\',J)[0];1d=r=4O&&(!m[3]||q.1I(4O,m[3]))?[4O]:[]}N{W(D i=0;1d[i];i++){D 7A=m[1]!=""||m[0]==""?"*":m[2];B(7A=="*"&&1d[i].1I.2n()=="45")7A="P";r=q.40(r,1d[i].aA(7A))}B(m[1]==".")r=q.98(r,m[2]);B(m[1]=="#"){D 51=[];W(D i=0;r[i];i++)B(r[i].6V("T")==m[2]){51=[r[i]];30}r=51}1d=r}t=t.1N(6k,"")}}B(t){D 1Q=q.1x(t,r);1d=r=1Q.r;t=q.3d(1Q.t)}}B(t)1d=[];B(1d&&1d[0]==2M)1d.7W();3O=q.40(3O,1d);C 3O},98:u(r,m,2f){m=" "+m+" ";D 51=[];W(D i=0;r[i];i++){D 95=(" "+r[i].2g+" ").1M(m)>=0;B(!2f&&95||2f&&!95)51.1y(r[i])}C 51},1x:u(t,r,2f){D 2w;2K(t&&t!=2w){2w=t;D p=q.aE,m;W(D i=0;p[i];i++){m=p[i].53(t);B(m){t=t.9u(m[0].I);B(q.2r[m[1]].96)m=q.2r[m[1]].96(m);m[2]=m[2].1N(/\\\\/g,"");30}}B(!m)30;B(m[1]==":"&&m[2]=="2f")r=q.1x(m[3],r,11).r;N B(m[1]==".")r=q.98(r,m[2],2f);N{D f=q.2r[m[1]];B(U f!="1R")f=q.2r[m[1]][m[2]];6D("f = u(a,i){"+(q.2r[m[1]].aF||"")+"C "+f+"}");r=q.4Y(r,f,2f)}}C{r:r,t:t}},3K:u(J){D 8E=[];D 1r=J.1t;2K(1r&&1r!=V){8E.1y(1r);1r=1r.1t}C 8E},3C:u(1r,2b,6h,J){2b=2b||1;D 2O=0;W(;1r;1r=1r[6h]){B(1r.34==1)2O++;B(2O==2b||2b=="aG"&&2O%2==0&&2O>1&&1r==J||2b=="aH"&&2O%2==1&&1r==J)C 1r}},5m:u(n,J){D r=[];W(;n;n=n.4a){B(n.34==1&&(!J||n!=J))r.1y(n)}C r}});q.Q={2k:u(E,H,1A,S){B(q.18.1z&&E.6t!=1c)E=1e;B(S)1A.S=S;B(!1A.55)1A.55=l.55++;B(!E.$2d)E.$2d={};D 5S=E.$2d[H];B(!5S){5S=E.$2d[H]={};B(E["65"+H])5S[0]=E["65"+H]}5S[1A.55]=1A;E["65"+H]=l.6H;B(!l.2y[H])l.2y[H]=[];l.2y[H].1y(E)},55:1,2y:{},4d:u(E,H,1A){D 2d=E.$2d,1d;B(2d){B(H&&H.H){1A=H.1A;H=H.H}B(!H){W(H 28 2d)l.4d(E,H)}N B(2d[H]){B(1A)6q 2d[H][1A.55];N W(1A 28 E.$2d[H])6q 2d[H][1A];W(1d 28 2d[H])30;B(!1d){1d=E["65"+H]=19;6q 2d[H]}}W(1d 28 2d)30;B(!1d)E.$2d=19}},2e:u(H,S,E){S=q.6f(S||[]);B(!E)q.16(l.2y[H]||[],u(){q.Q.2e(H,S,l)});N{D 1A=E["65"+H],1Q,L=q.2G(E[H]);B(1A){S.aJ(l.4J({H:H,3g:E}));B((1Q=1A.1E(E,S))!==1a)l.8H=11}B(L&&1Q!==1a)E[H]();l.8H=1a}},6H:u(Q){B(U q=="1c"||q.Q.8H)C;Q=q.Q.4J(Q||1e.Q||{});D 4N;D c=l.$2d[Q.H];D 23=[].8Y.3V(17,1);23.aJ(Q);W(D j 28 c){23[0].1A=c[j];23[0].S=c[j].S;B(c[j].1E(l,23)===1a){Q.43();Q.59();4N=1a}}B(q.18.1z)Q.3g=Q.43=Q.59=Q.1A=Q.S=19;C 4N},4J:u(Q){B(!Q.3g&&Q.cB)Q.3g=Q.cB;B(Q.8B==1c&&Q.9Z!=1c){D e=V.38,b=V.1K;Q.8B=Q.9Z+(e.2U||b.2U);Q.aD=Q.dy+(e.33||b.33)}B(q.18.3b&&Q.3g.34==3){D 5V=Q;Q=q.1i({},5V);Q.3g=5V.3g.1t;Q.43=u(){C 5V.43()};Q.59=u(){C 5V.59()}}B(!Q.43)Q.43=u(){l.4N=1a};B(!Q.59)Q.59=u(){l.dA=11};C Q}};q.L.1i({2E:u(H,S,L){C l.16(u(){q.Q.2k(l,H,L||S,S)})},aM:u(H,S,L){C l.16(u(){q.Q.2k(l,H,u(Q){q(l).5Q(Q);C(L||S).1E(l,17)},S)})},5Q:u(H,L){C l.16(u(){q.Q.4d(l,H,L)})},2e:u(H,S){C l.16(u(){q.Q.2e(H,S,l)})},3c:u(){D a=17;C l.31(u(e){l.8J=l.8J==0?1:0;e.43();C a[l.8J].1E(l,[e])||1a})},dZ:u(f,g){u 8K(e){D p=(e.H=="5E"?e.dC:e.dD)||e.dE;2K(p&&p!=l)3F{p=p.1t}3E(e){p=l};B(p==l)C 1a;C(e.H=="5E"?f:g).1E(l,[e])}C l.5E(8K).6U(8K)},36:u(f){B(q.6X)f.1E(V,[q]);N{q.5T.1y(u(){C f.1E(l,[q])})}C l}});q.1i({6X:1a,5T:[],36:u(){B(!q.6X){q.6X=11;B(q.5T){q.16(q.5T,u(){l.1E(V)});q.5T=19}B(q.18.4o||q.18.3A)V.dF("aK",q.36,1a)}}});1P u(){q.16(("8m,4P,4w,dR,5L,8z,31,dG,"+"dP,dH,9a,5E,6U,dJ,3B,"+"3X,dK,dL,dM,1m").4E(","),u(i,o){q.L[o]=u(f){C f?l.2E(o,f):l.2e(o)}});B(q.18.4o||q.18.3A)V.dN("aK",q.36,1a);N B(q.18.1z){V.dO("<dQ"+"dS T=aL dT=11 "+"3G=//:><\\/4j>");D 4j=V.8N("aL");B(4j)4j.69=u(){B(l.8h!="3D")C;l.1t.5U(l);q.36()};4j=19}N B(q.18.3b)q.8P=6t(u(){B(V.8h=="dU"||V.8h=="3D"){9p(q.8P);q.8P=19;q.36()}},10);q.Q.2k(1e,"4w",q.36)};B(q.18.1z)q(1e).aM("8z",u(){D 2y=q.Q.2y;W(D H 28 2y){D 8S=2y[H],i=8S.I;B(i&&H!=\'8z\')do q.Q.4d(8S[i-1],H);2K(--i)}});q.L.1i({1B:u(1p,1h){D 2v=l.1x(":2v");1p?2v.2T({1g:"1B",2c:"1B",1J:"1B"},1p,1h):2v.16(u(){l.1D.1H=l.54?l.54:"";B(q.K(l,"1H")=="2A")l.1D.1H="3Y"});C l},1w:u(1p,1h){D 3h=l.1x(":3h");1p?3h.2T({1g:"1w",2c:"1w",1J:"1w"},1p,1h):3h.16(u(){l.54=l.54||q.K(l,"1H");B(l.54=="2A")l.54="3Y";l.1D.1H="2A"});C l},aO:q.L.3c,3c:u(L,8x){D 23=17;C q.2G(L)&&q.2G(8x)?l.aO(L,8x):l.16(u(){q(l)[q(l).2Z(":2v")?"1B":"1w"].1E(q(l),23)})},bD:u(1p,1h){C l.1x(":2v").2T({1g:"1B"},1p,1h).3f()},bA:u(1p,1h){C l.1x(":3h").2T({1g:"1w"},1p,1h).3f()},dV:u(1p,1h){C l.16(u(){D aP=q(l).2Z(":2v")?"1B":"1w";q(l).2T({1g:aP},1p,1h)})},bM:u(1p,1h){C l.1x(":2v").2T({1J:"1B"},1p,1h).3f()},bH:u(1p,1h){C l.1x(":3h").2T({1J:"1w"},1p,1h).3f()},dW:u(1p,3J,1h){C l.2T({1J:3J},1p,1h)},2T:u(12,1p,3e,1h){C l.2W(u(){l.4X=q.1i({},12);D 2J=q.1p(1p,3e,1h);W(D p 28 12){D e=1P q.5O(l,2J,p);B(12[p].1Y==5K)e.5c(e.1r(),12[p]);N e[12[p]](12)}})},2W:u(H,L){B(!L){L=H;H="5O"}C l.16(u(){B(!l.2W)l.2W={};B(!l.2W[H])l.2W[H]=[];l.2W[H].1y(L);B(l.2W[H].I==1)L.1E(l)})}});q.1i({1p:u(1p,3e,L){D 2J=1p&&1p.1Y==dX?1p:{3D:L||!L&&3e||q.2G(1p)&&1p,3U:1p,3e:L&&3e||3e&&3e.1Y!=74&&3e||"aS"};2J.3U=(2J.3U&&2J.3U.1Y==5K?2J.3U:{dY:e0,e1:bC}[2J.3U])||e2;2J.37=2J.3D;2J.3D=u(){q.aV(l,"5O");B(q.2G(2J.37))2J.37.1E(l)};C 2J},3e:{e3:u(p,n,4F,6W){C 4F+6W*p},aS:u(p,n,4F,6W){C((-4c.e4(p*4c.e6)/2)+0.5)*6W+4F}},2W:{},aV:u(J,H){H=H||"5O";B(J.2W&&J.2W[H]){J.2W[H].7W();D f=J.2W[H][0];B(f)f.1E(J)}},4Z:[],5O:u(J,Y,12){D z=l;D y=J.1D;B(12=="1g"||12=="2c"){D 7c=q.K(J,"1H");D aY=y.4v;y.4v="2v"}z.a=u(){B(Y.7b)Y.7b.1E(J,[z.4W]);B(12=="1J")q.1s(y,"1J",z.4W);N{y[12]=1b(z.4W)+"2q";y.1H="3Y"}};z.7H=u(){C 79(q.K(J,12))};z.1r=u(){D r=79(q.63(J,12));C r&&r>-e7?r:z.7H()};z.5c=u(8t,3J){z.8p=(1P 57()).78();z.4W=8t;z.a();q.4Z.1y(u(){C z.7b(8t,3J)});B(q.4Z.I==1){D aX=6t(u(){q.4Z=q.4Y(q.4Z,u(L){C L()});B(!q.4Z.I)9p(aX)},13)}};z.1B=u(){B(!J.3P)J.3P={};J.3P[12]=q.1s(J.1D,12);Y.1B=11;z.5c(0,l.1r());B(12!="1J")y[12]="5b"};z.1w=u(){B(!J.3P)J.3P={};J.3P[12]=q.1s(J.1D,12);Y.1w=11;z.5c(l.1r(),0)};z.3c=u(){B(!J.3P)J.3P={};J.3P[12]=q.1s(J.1D,12);B(7c=="2A"){Y.1B=11;B(12!="1J")y[12]="5b";z.5c(0,l.1r())}N{Y.1w=11;z.5c(l.1r(),0)}};z.7b=u(4F,91){D t=(1P 57()).78();B(t>Y.3U+z.8p){z.4W=91;z.a();B(J.4X)J.4X[12]=11;D 3O=11;W(D i 28 J.4X)B(J.4X[i]!==11)3O=1a;B(3O){B(7c){y.4v=aY;y.1H=7c;B(q.K(J,"1H")=="2A")y.1H="3Y"}B(Y.1w)y.1H="2A";B(Y.1w||Y.1B)W(D p 28 J.4X)q.1s(y,p,J.3P[p])}B(3O&&q.2G(Y.3D))Y.3D.1E(J);C 1a}N{D n=t-l.8p;D p=n/Y.3U;z.4W=q.3e[Y.3e](p,n,4F,(91-4F),Y.3U);z.a()}C 11}}});q.L.1i({e9:u(1q,3r,1h){l.4w(1q,3r,1h,1)},4w:u(1q,3r,1h,3Q){B(q.2G(1q))C l.2E("4w",1q);1h=1h||u(){};D H="94";B(3r)B(q.2G(3r)){1h=3r;3r=19}N{3r=q.P(3r);H="b5"}D 3k=l;q.7e({1q:1q,H:H,S:3r,3Q:3Q,3D:u(5g,1V){B(1V=="5l"||!3Q&&1V=="bk")3k.1s("3R",5g.7w).9k().16(1h,[5g.7w,1V,5g]);N 1h.1E(3k,[5g.7w,1V,5g])}});C l},eb:u(){C q.P(l)},9k:u(){C l.3i("4j").16(u(){B(l.3G)q.b4(l.3G);N q.9l(l.1L||l.ec||l.3R||"")}).3f()}});q.16("b8,bp,bQ,bw,bR,bi".4E(","),u(i,o){q.L[o]=u(f){C l.2E(o,f)}});q.1i({2S:u(1q,S,1h,H,3Q){B(q.2G(S)){1h=S;S=19}C q.7e({H:"94",1q:1q,S:S,5l:1h,9b:H,3Q:3Q})},ed:u(1q,S,1h,H){C q.2S(1q,S,1h,H,1)},b4:u(1q,1h){C q.2S(1q,19,1h,"4j")},ee:u(1q,S,1h){C q.2S(1q,S,1h,"bO")},ef:u(1q,S,1h,H){B(q.2G(S)){1h=S;S={}}C q.7e({H:"b5",1q:1q,S:S,5l:1h,9b:H})},eg:u(32){q.7f.32=32},eh:u(F){q.1i(q.7f,F)},7f:{2y:11,H:"94",32:0,bc:"ei/x-ej-1U-ek",b6:11,7r:11,S:19},7v:{},7e:u(s){s=q.1i({},q.7f,s);B(s.S){B(s.b6&&U s.S!="1R")s.S=q.P(s.S);B(s.H.2n()=="2S"){s.1q+=((s.1q.1M("?")>-1)?"&":"?")+s.S;s.S=19}}B(s.2y&&!q.9d++)q.Q.2e("b8");D 9c=1a;D 1n=1e.b9?1P b9("ax.en"):1P 7U();1n.eo(s.H,s.1q,s.7r);B(s.S)1n.7l("ep-er",s.bc);B(s.3Q)1n.7l("es-9f-et",q.7v[s.1q]||"eu, ev ew ex 97:97:97 ey");1n.7l("X-ez-eA","7U");B(1n.eB)1n.7l("eC","eD");B(s.bh)s.bh(1n);B(s.2y)q.Q.2e("bi",[1n,s]);D 69=u(9j){B(1n&&(1n.8h==4||9j=="32")){9c=11;B(7n){9p(7n);7n=19}D 1V;3F{1V=q.by(1n)&&9j!="32"?s.3Q&&q.bE(1n,s.1q)?"bk":"5l":"1m";B(1V!="1m"){D 7m;3F{7m=1n.9g("bF-9f")}3E(e){}B(s.3Q&&7m)q.7v[s.1q]=7m;D S=q.bK(1n,s.9b);B(s.5l)s.5l(S,1V);B(s.2y)q.Q.2e("bR",[1n,s])}N q.7q(s,1n,1V)}3E(e){1V="1m";q.7q(s,1n,1V,e)}B(s.2y)q.Q.2e("bQ",[1n,s]);B(s.2y&&!--q.9d)q.Q.2e("bp");B(s.3D)s.3D(1n,1V);B(s.7r)1n=19}};D 7n=6t(69,13);B(s.32>0)3q(u(){B(1n){1n.eE();B(!9c)69("32")}},s.32);3F{1n.eG(s.S)}3E(e){q.7q(s,1n,19,e)}B(!s.7r)69();C 1n},7q:u(s,1n,1V,e){B(s.1m)s.1m(1n,1V,e);B(s.2y)q.Q.2e("bw",[1n,s,e])},9d:0,by:u(r){3F{C!r.1V&&5D.eH=="9e:"||(r.1V>=bC&&r.1V<eI)||r.1V==bG||q.18.3b&&r.1V==1c}3E(e){}C 1a},bE:u(1n,1q){3F{D bI=1n.9g("bF-9f");C 1n.1V==bG||bI==q.7v[1q]||q.18.3b&&1n.1V==1c}3E(e){}C 1a},bK:u(r,H){D ct=r.9g("eJ-H");D S=!H&&ct&&ct.1M("1n")>=0;S=H=="1n"||S?r.eL:r.7w;B(H=="4j")q.9l(S);B(H=="bO")6D("S = "+S);B(H=="2m")q("<26>").2m(S).9k();C S},P:u(a){D s=[];B(a.1Y==3H||a.7x)q.16(a,u(){s.1y(4G(l.1f)+"="+4G(l.G))});N W(D j 28 a)B(a[j]&&a[j].1Y==3H)q.16(a[j],u(){s.1y(4G(j)+"="+4G(l))});N s.1y(4G(j)+"="+4G(a[j]));C s.9r("&")},9l:u(S){B(1e.bT)1e.bT(S);N B(q.18.3b)1e.3q(S,0);N 6D.3V(1e,S)}})}q.L.eN=u(f){C l.16(u(){D p=l.1t;B(q.K(p,"1X")==\'5w\')p.1D.1X=\'5y\';D s=l.1D;s.1X=\'3W\';B(!f||f=="eO"){B(((1b(q.K(p,"2c"))-1b(q.K(l,"2c")))/2)>0)s.2B=((1b(q.K(p,"2c"))-1b(q.K(l,"2c")))/2)+"2q";N s.2B="0"}B(!f||f=="eP"){B(((1b(q.K(p,"1g"))-1b(q.K(l,"1g")))/2)>0){s.2t=((1b(q.K(p,"1g"))-1b(q.K(l,"1g")))/2)+"2q"}N{B(p.1I.2n()=="1K"){B(1e.5Z)D 4h=1e.5Z;N B(V.1K&&V.1K.2X)D 4h=V.1K.2X;s.2t=((4h-1b(q.K(l,"1g")))/2)+"2q"}N{s.2t="0"}}}})};q.4b=u(1f,G,Y){B(U G!=\'1c\'){Y=Y||{};B(G===19){G=\'\';Y.2z=-1}D 2z=\'\';B(Y.2z){D 2p;B(U Y.2z==\'1R\'&&Y.2z.2H(/^[+-]?[0-9]+[bV]$/)!==19){D 2H=Y.2z.2H(/^([+-]?[0-9]+)([bV])$/);Y.2z=1b(2H[0],10)*(({"y":(60*60*24*eQ),"w":(60*60*24*7),"d":(60*60*24),"h":(60*60),"m":(60),"s":(1)}[2H[1]])||0);2p=1P 57();2p.bY(2p.78()+Y.2z*4i)}N B(U Y.2z==\'3l\'){2p=1P 57();2p.bY(2p.78()+Y.2z*24*60*60*4i)}N B(U Y.2z.bZ!=\'1c\')2p=Y.2z;N 9D"eS \\"2z\\" 2l";2z=\'; 2z=\'+2p.bZ()}D 6d=Y.6d?\'; 6d=\'+Y.6d:\'\';D 6u=Y.6u?\'; 6u=\'+Y.6u:\'\';D 75=Y.75?\'; 75\':\'\';V.4b=[1f,\'=\',4G(G),2z,6d,6u,75].9r(\'\')}N{D 9v=19;B(V.4b&&V.4b!=\'\'){D 9s=V.4b.4E(\';\');W(D i=0;i<9s.I;i++){D 4b=q.3d(9s[i]);B(4b.9u(0,1f.I+1)==(1f+\'=\')){9v=eT(4b.9u(1f.I+1));30}}}C 9v}};q.L.c1=q.L.1g;q.L.c2=q.L.2c;q.L.1g=u(){B(l[0]==1e)C 3k.5Z||q.5t&&V.38.4h||V.1K.4h;B(l[0]==V)C 4c.7H(V.1K.eV,V.1K.2X);C l.c1(17[0])};q.L.2c=u(){B(l[0]==1e)C 3k.8M||q.5t&&V.38.5X||V.1K.5X;B(l[0]==V)C 4c.7H(V.1K.eY,V.1K.46);C l.c2(17[0])};q.L.5Z=u(){C l[0]==1e||l[0]==V?l.1g():l.K(\'1H\')!=\'2A\'?l[0].2X-(1b(l.K("4n"))||0)-(1b(l.K("c3"))||0):l.1g()+(1b(l.K("9C"))||0)+(1b(l.K("c4"))||0)};q.L.8M=u(){C l[0]==1e||l[0]==V?l.2c():l.K(\'1H\')!=\'2A\'?l[0].46-(1b(l.K("49"))||0)-(1b(l.K("c5"))||0):l.1g()+(1b(l.K("9B"))||0)+(1b(l.K("93"))||0)};q.L.eZ=u(){C l[0]==1e||l[0]==V?l.1g():l.K(\'1H\')!=\'2A\'?l[0].2X:l.1g()+(1b(l.K("4n"))||0)+(1b(l.K("c3"))||0)+(1b(l.K("9C"))||0)+(1b(l.K("c4"))||0)};q.L.f0=u(){C l[0]==1e||l[0]==V?l.2c():l.K(\'1H\')!=\'2A\'?l[0].46:l.1g()+(1b(l.K("49"))||0)+(1b(l.K("c5"))||0)+(1b(l.K("9B"))||0)+(1b(l.K("93"))||0)};q.L.2U=u(){B(l[0]==1e||l[0]==V)C 3k.8O||q.5t&&V.38.2U||V.1K.2U;C l[0].2U};q.L.33=u(){B(l[0]==1e||l[0]==V)C 3k.8L||q.5t&&V.38.33||V.1K.33;C l[0].33};q.L.8r=u(Y,9E){D x=0,y=0,J=l[0],1o=l[0],6O=1a,9A=1a,6i,6m=0,5M=0,Y=q.1i({76:11,5P:11,6w:1a,5L:11},Y||{});do{x+=1o.8D||0;y+=1o.8G||0;B(q.18.4o||q.18.1z){D bt=1b(q.K(1o,\'4n\'))||0;D bl=1b(q.K(1o,\'49\'))||0;x+=bl;y+=bt;B(q.18.4o&&1o!=J&&q.K(1o,\'4v\')!=\'3h\'){x+=bl;y+=bt}B(q.K(1o,\'1X\')==\'3W\')6O=11;B(q.K(1o,\'1X\')==\'5y\')9A=11}B(Y.5L){6i=1o.c6;do{6m+=1o.2U||0;5M+=1o.33||0;1o=1o.1t;B(q.18.4o&&1o!=J&&1o!=6i&&q.K(1o,\'4v\')!=\'3h\'){x+=1b(q.K(1o,\'49\'))||0;y+=1b(q.K(1o,\'4n\'))||0}}2K(6i&&1o!=6i)}N 1o=1o.c6;B(1o&&(1o.7I.2n()==\'1K\'||1o.7I.2n()==\'2m\')){B((q.18.3b||(q.18.1z&&q.5t))&&q.K(J,\'1X\')!=\'3W\'){x+=1b(q.K(1o,\'ca\'))||0;y+=1b(q.K(1o,\'cc\'))||0}B((q.18.4o&&!6O)||(q.18.1z&&q.K(J,\'1X\')==\'5w\'&&(!9A||!6O))){x+=1b(q.K(1o,\'49\'))||0;y+=1b(q.K(1o,\'4n\'))||0}30}}2K(1o);B(!Y.76){x-=1b(q.K(J,\'ca\'))||0;y-=1b(q.K(J,\'cc\'))||0}B(Y.5P&&(q.18.3b||q.18.3A)){x+=1b(q.K(J,\'49\'))||0;y+=1b(q.K(J,\'4n\'))||0}N B(!Y.5P&&!(q.18.3b||q.18.3A)){x-=1b(q.K(J,\'49\'))||0;y-=1b(q.K(J,\'4n\'))||0}B(Y.6w){x+=1b(q.K(J,\'9B\'))||0;y+=1b(q.K(J,\'9C\'))||0}B(Y.5L&&q.18.3A&&q.K(J,\'1H\')==\'f2\'){6m-=J.2U||0;5M-=J.33||0}D 4N=Y.5L?{2t:y-5M,2B:x-6m,33:5M,2U:6m}:{2t:y,2B:x};B(9E){q.1i(9E,4N);C l}N{C 4N}};(u($){$.L.f4=q.L.9F=u(s){B(!($.18.1z&&U 7U==\'u\'))C l;s=$.1i({2t:\'44\',2B:\'44\',2c:\'44\',1g:\'44\',1J:11,3G:\'f5:1a;\'},s||{});D 12=u(n){C n&&n.1Y==5K?n+\'2q\':n},2m=\'<ch 4L="9F"f6="0"f7="-1"3G="\'+s.3G+\'"\'+\'1D="1H:3Y;1X:3W;z-2V:-1;\'+(s.1J!==1a?\'1x:f8(f9=\\\'0\\\');\':\'\')+\'2t:\'+(s.2t==\'44\'?\'7S(((1b(l.1t.6p.4n)||0)*-1)+\\\'2q\\\')\':12(s.2t))+\';\'+\'2B:\'+(s.2B==\'44\'?\'7S(((1b(l.1t.6p.49)||0)*-1)+\\\'2q\\\')\':12(s.2B))+\';\'+\'2c:\'+(s.2c==\'44\'?\'7S(l.1t.46+\\\'2q\\\')\':12(s.2c))+\';\'+\'1g:\'+(s.1g==\'44\'?\'7S(l.1t.2X+\\\'2q\\\')\':12(s.1g))+\';\'+\'"/>\';C l.16(u(){B(!$(\'ch.9F\',l)[0])l.5x(V.9G(2m),l.22)})}})(q);(u($){$.1i({1W:{ck:0}});$.L.1W=u(2I,F){B(U 2I==\'45\')F=2I;F=$.1i({2I:(2I&&U 2I==\'3l\'&&2I>0)?--2I:0,3o:19,3v:$.61?11:1a,4y:1a,cj:\'4y-3T-\',9W:19,9V:19,9X:19,9Y:19,9U:\'b3\',cp:19,cr:19,cm:1a,66:19,6x:19,5H:19,7V:\'1W-2i\',4s:\'1W-3t\',6v:\'1W-3o\',6r:\'1W-1S\',8g:\'1W-1w\',8l:\'1W-fc\',cl:\'26\'},F||{});$.18.7Z=$.18.7Z||$.18.1z&&U 7U==\'u\';u 9J(){a3(0,0)}C l.16(u(){D 1S=l;D 2i=$(\'6E.\'+F.7V,1S);2i=2i.4z()&&2i||$(\'>6E:eq(0)\',1S);D 1W=$(\'a\',2i);B(F.4y){D 8j={};1W.16(u(){$(l).2m(\'<42>\'+$(l).2m()+\'</42>\');D T=F.cj+(++$.1W.ck);D 21=\'#\'+T;8j[21]=l.47;l.47=21;$(\'<26 T="\'+T+\'" 4L="\'+F.6r+\'"></26>\').5N(1S)})}D 2u=$(\'26.\'+F.6r,1S);2u=2u.4z()&&2u||$(\'>\'+F.cl,1S);2i.2Z(\'.\'+F.7V)||2i.2L(F.7V);2u.16(u(){D $$=$(l);$$.2Z(\'.\'+F.6r)||$$.2L(F.6r)});D 9I=$(\'1C\',2i).2V($(\'1C.\'+F.4s,2i)[0]);B(9I>=0){F.2I=9I}B(5D.21){1W.16(u(i){B(l.21==5D.21){F.2I=i;B(($.18.1z||$.18.3A)&&!F.4y){D 1T=$(5D.21);D 8c=1T.1s(\'T\');1T.1s(\'T\',\'\');3q(u(){1T.1s(\'T\',8c)},fd)}9J();C 1a}})}B($.18.1z){9J()}2u.1x(\':eq(\'+F.2I+\')\').1B().3f().2f(\':eq(\'+F.2I+\')\').2L(F.8g);B(!F.4y){$(\'1C\',2i).3p(F.4s).eq(F.2I).2L(F.4s)}B(F.cm){D 9R=u(2P){D 9N=$.4I(2u.2S(),u(el){D h,9M=$(el);B(2P){B($.18.7Z){el.1D.fe(\'cn\');el.1D.1g=\'\';el.81=19}h=9M.K({\'4C-1g\':\'\'}).1g()}N{h=9M.1g()}C h}).fg(u(a,b){C b-a});B($.18.7Z){2u.16(u(){l.81=9N[0]+\'2q\';l.1D.fi(\'cn\',\'l.1D.1g = l.81 ? l.81 : "5b"\')})}N{2u.K({\'4C-1g\':9N[0]+\'2q\'})}};9R();D 85=1S.46;D 9S=1S.2X;D 9Q=$(\'#1W-co-9O-4z\').2S(0)||$(\'<42 T="1W-co-9O-4z">M</42>\').K({1H:\'3Y\',1X:\'3W\',84:\'2v\'}).5N(V.1K).2S(0);D 87=9Q.2X;6t(u(){D 86=1S.46;D 9T=1S.2X;D 88=9Q.2X;B(9T>9S||86!=85||88!=87){9R((86>85||88<87));85=86;9S=9T;87=88}},50)}D 5G={},5f={},a1=F.cp||F.9U,a0=F.cr||F.9U;B(F.9V||F.9W){B(F.9V){5G[\'1g\']=\'1B\';5f[\'1g\']=\'1w\'}B(F.9W){5G[\'1J\']=\'1B\';5f[\'1J\']=\'1w\'}}N{B(F.9X){5G=F.9X}N{5G[\'4C-2c\']=0;a1=F.3v?50:1}B(F.9Y){5f=F.9Y}N{5f[\'4C-2c\']=0;a0=F.3v?50:1}}D 66=F.66,6x=F.6x,5H=F.5H;1W.2E(\'a8\',u(){D 1C=$(l).3K(\'1C:eq(0)\');B(1S.6y||1C.2Z(\'.\'+F.4s)||1C.2Z(\'.\'+F.6v)){C 1a}D 21=l.21;B($.18.1z){$(l).2e(\'31\');B(F.3v){$.61.4g(21);5D.21=21.1N(\'#\',\'\')}}N B($.18.3b){D cu=$(\'<1U cs="\'+21+\'"><26><3Z H="3X" G="h" /></26></1U>\').2S(0);cu.3X();$(l).2e(\'31\');B(F.3v){$.61.4g(21)}}N{B(F.3v){5D.21=21.1N(\'#\',\'\')}N{$(l).2e(\'31\')}}});1W.2E(\'8n\',u(){D 1C=$(l).3K(\'1C:eq(0)\');B($.18.3b){1C.2T({1J:0},1,u(){1C.K({1J:\'\'})})}1C.2L(F.6v)});B(F.3o&&F.3o.I){W(D i=0,k=F.3o.I;i<k;i++){1W.eq(--F.3o[i]).2e(\'8n\').3f()}};1W.2E(\'a9\',u(){D 1C=$(l).3K(\'1C:eq(0)\');1C.3p(F.6v);B($.18.3b){1C.2T({1J:1},1,u(){1C.K({1J:\'\'})})}});1W.2E(\'31\',u(e){D 6B=e.9Z;D 4x=l,1C=$(l).3K(\'1C:eq(0)\'),1T=$(l.21),2o=2u.1x(\':3h\');B((U 66==\'u\'&&66(l,1T[0],2o[0])==1a&&6B)||1S.6y||1C.2Z(\'.\'+F.4s)||1C.2Z(\'.\'+F.6v)){l.8m();C 1a}1S[\'6y\']=11;B(1T.4z()){B($.18.1z&&F.3v){D 8c=l.21.1N(\'#\',\'\');1T.1s(\'T\',\'\');3q(u(){1T.1s(\'T\',8c)},0)}u 8k(){B(F.3v&&6B){$.61.4g(4x.21)}2o.2T(5f,a0,u(){$(4x).3K(\'1C:eq(0)\').2L(F.4s).cz().3p(F.4s);B(U 6x==\'u\'){6x(4x,1T[0],2o[0])}2o.2L(F.8g).K({1H:\'\',4v:\'\',1g:\'\',1J:\'\'});1T.3p(F.8g).2T(5G,a1,u(){1T.K({4v:\'\',1g:\'\',1J:\'\'});B($.18.1z){2o[0].1D.1x=\'\';1T[0].1D.1x=\'\'}B(U 5H==\'u\'){5H(4x,1T[0],2o[0])}1S.6y=19})})}B(!F.4y){8k()}N{D $$=$(l),42=$(\'42\',l)[0],1L=42.3R;$$.2L(F.8l);42.3R=\'cC&#cD;\';3q(u(){$(4x.21).4w(8j[4x.21],u(){8k();42.3R=1L;$$.3p(F.8l)})},0)}}N{7F(\'cE 2Z 99 cG 1S.\')}D a4=1e.8O||V.38&&V.38.2U||V.1K.2U||0;D a5=1e.8L||V.38&&V.38.33||V.1K.33||0;3q(u(){1e.a3(a4,a5)},0);l.8m();C F.3v&&!!6B});B(F.4y){1W.eq(F.2I).2e(\'31\').3f()}B(F.3v){$.61.cH(u(){1W.eq(F.2I).2e(\'31\').3f()})}})};D 6F=[\'a8\',\'8n\',\'a9\'];W(D i=0;i<6F.I;i++){$.L[6F[i]]=(u(ab){C u(3T){C l.16(u(){D 2i=$(\'6E.1W-2i\',l);2i=2i.4z()&&2i||$(\'>6E:eq(0)\',l);D a;B(!3T||U 3T==\'3l\'){a=$(\'1C a\',2i).eq((3T&&3T>0&&3T-1||0))}N B(U 3T==\'1R\'){a=$(\'1C a[@47$="#\'+3T+\'"]\',2i)}a.2e(ab)})}})(6F[i])}})(q);q.1i(q.L,{b1:u(Y){D O=1P q.O(Y,l[0]);O.1v=l.3i(":3Z:2f(:3X):2f(:2P)").4P(u(){O.4l=l});B(O.F.7j){l.3X(u(Q){B(O.F.3m)Q.43();C O.1U()})}B(O.F.Q){O.1v.2E(O.F.Q,u(){O.E(l)})}C O},1y:u(t){C l.7d(q.40(l.2S(),t))},5e:u(T){C l.1x("[@W=\'"+T+"\']")}});q.1i(q.2r[":"],{ba:"!q.3d(a.G)",bb:"!!q.3d(a.G)"});q.O=u(Y,1U){l.F=q.1i({},q.O.4m,Y);l.5A=1U;l.4k=l.F.5v;l.77=l.4k.I&&l.4k||q(1U);l.2u=l.F.7h.2k(l.F.5v);l.2P()};q.1i(q.O,{4m:{3y:{},39:"1m",82:11,7h:q([]),5v:q([]),7j:11},bd:u(F){q.1i(q.O.4m,F)},3y:{1l:"bf bg 2Z 1l.",6P:"1F 1G a G 99 bj bm {0} 5n.",7P:"1F 1G a G bn at bo {0} 5n.",7K:"1F 1G a G 7g {0} 7y {1} 5n bq.",5k:"1F 1G a 2R 5k bs.",1q:"1F 1G a 2R bu.",2p:"1F 1G a 2R 2p.",71:"1F 1G a 2R 2p (bv).",70:"7s 7t 7u 5p bx¼bz bB 5p.",3l:"1F 1G a 2R 3l.",6Z:"7s 7t 7u bJ bL 5p.",56:"1F 1G 9i 56",73:"1F 1G 7L bN G bP.",6R:"1F 1G a G 7g {0} 7y {1}.",6Q:"1F 1G a G bU 7a 4B 7D 3J {0}.",7J:"1F 1G a G bW 7a 4B 7D 3J {0}."},5F:{1U:u(){l.58();W(D i=0,E;E=l.1v[i++];){l.4e(E)}C l.2R()},E:u(E){l.6Y(E);l.4e(E);l.3I()},3I:u(2Q){B(2Q)q.1i(l.2x,2Q);l.F.3I?l.F.3I(l.2x,l):l.80()},5s:u(){B(q.L.5s)q(l.5A).5s();l.58();l.5z();l.1v.3p(l.F.39)},3w:u(7E){C q(7E)[0]},2Q:u(){C q("8d."+l.F.39,l.77)},2P:u(E){l.2x={};l.1T=$([]);l.2o=$([])},58:u(){l.2P();l.2o=l.2Q().1y(l.2u);l.1T.1y(l.2u)},6Y:u(E){l.2P();l.2o=l.2Q().5e(l.48(l.3w(E)))},4e:u(E){E=l.3w(E);q(E).3p(l.F.39);D 25=l.25(E);W(D i=0,1O;1O=25[i++];){3F{D 2b=q.O.1k[1O.2a](q.3d(E.G),E,1O.4T);B(2b===-1)30;B(!2b){q(E).2L(l.F.39);l.7N(1O,E);30}}3E(e){l.F.3m&&1e.2Y&&2Y.1m("c7 c8 c9 cb E "+E.T+", 4e 7L \'"+1O.2a+"\' 2a");9D e}}},1Z:u(T,1O){D m=l.F.3y[T];C m&&(m.1Y==2F?m:m[1O.2a])},7N:u(1O,E){D T=l.48(E),P=1O.4T;l.2x[T]=(E.3N||l.1Z(T,1O)||q.O.3y[1O.2a]||"<7R>cd: ce 1Z cf W "+T+"</7R>").1N("{0}",(P.1Y==3H?P[0]:P)||"").1N("{1}",P[1]||"")},2R:u(){B(l.83()){l.3I();C 1a}N{l.5z();B(l.F.7T){l.F.7T(l.5A);C 1a}C 11}},83:u(){D 4R=0;q.16(l.2x,u(){4R++});C 4R},5z:u(){l.3c("89")},3c:u(5u){D 3k=l;u 4q(){C 3k["3J"+5u]}B(l.F.4u){4q().1y(4q().3K(l.F.4u))}4q()[5u.2n()]();C l},80:u(){D 2s=11;W(D 4r 28 l.2x){B(2s&&l.F.82){B(l.4l&&l.2x[l.4l.T])l.4l.4P();N{3F{D E=q("#"+4r);B(E.I)E[0].4P()}3E(e){l.F.3m&&1e.2Y&&2Y.1m(e)}}2s=1a}l.8a(4r,l.2x[4r])}l.2o=l.2o.2f(l.1T);l.3c("89").3c("cv")},8a:u(T,1Z){D 1m=l.2Q().5e(T);B(1m.I){B(1m.1s("8e")){1m.2m(1Z)}}N{1m=q("<8d>").1s({"W":T,8e:11}).2L(l.F.39).2m(1Z);B(l.F.4u){1m=1m.1w().1B().4t("<"+l.F.4u+">").1o()}B(!l.4k.3M(1m).I)l.F.6z?l.F.6z(1m,q("#"+T)):1m.8i("#"+T)}l.1T.1y(1m)},25:u(E){B(!l.S(E))C[];D 25=[];q.16(l.S(E),u(2N,G){25[25.I]={2a:2N,4T:G}});C 25},S:u(E){C l.F.25?l.F.25[l.48(E)]:l.F.6A?q(E).S()[l.F.6A]:q(E).S()},48:u(E){D T=(/3S|4f/i.1j(E.H))?E.1f:E.T;B(!T){D 4U=E.1U.T,4S=/[^a-a6-2C-9\\-5I]/g;T=E.T=(4U?4U.1N(4S,""):"")+E.1f.1N(4S,"")}C T}},3x:u(G,E){5a(E.1I.2n()){3a\'3B\':C q("2l:3t",E).I;3a\'3Z\':B(/3S|4f/i.1j(E.H))C q(E.1U||V).3i(\'[@1f="\'+E.1f+\'"]:4M\').I}C G.I},7p:u(P,E){C l.5C[U P]?l.5C[U P](P,E):11},5C:{"68":u(P,E){C P},"1R":u(P,E){C!!q(P,E.1U).I},"u":u(P,E){C P(E)}},1k:{1l:u(G,E,P){B(!q.O.7p(P,E))C-1;5a(E.1I.2n()){3a\'3B\':D Y=q("2l:3t",E);C Y.I>0&&(E.H=="3B-ae"||Y[0].G.I>0);3a\'3Z\':5a(E.H.2n()){3a\'4f\':3a\'3S\':C q.O.3x(G,E)>0}am:C G.I>0}},ap:u(G,E,P){C!q.O.1k.1l(G,E)||P.1j(G)},7P:u(G,E,P){D I=q.O.3x(G,E);C!q.O.1k.1l(G,E)||I>=P},6P:u(G,E,P){D I=q.O.3x(G,E);C!q.O.1k.1l(G,E)||I<=P},7K:u(G,E,P){D I=q.O.3x(G,E);C!q.O.1k.1l(G,E)||(I>=P[0]&&I<=P[1])},7J:u(G,E,P){C!q.O.1k.1l(G,E)||G>=P},6Q:u(G,E,P){C!q.O.1k.1l(G,E)||G<=P},6R:u(G,E,P){C!q.O.1k.1l(G,E)||(G>=P[0]&&G<=P[1])},5k:u(G,E){C!q.O.1k.1l(G,E)||/^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$/i.1j(G)},1q:u(G,E){C!q.O.1k.1l(G,E)||/^(aB?|aC):\\/\\/[A-2C-9](\\.?[A-2C-5j„1uœ1u–][A-2C-5i\\-1u„1uœ1u–]*)*(\\/([A-2C-5j„1uœ1u–][A-2C-5i\\-\\.1u„1uœ1u–]*)?)*(\\?([A-2C-5j„1uœ1u–][A-2C-5i\\-\\.%\\+=&1u„1uœ1u–]*)?)?$/i.1j(G)},2p:u(G,E){C!q.O.1k.1l(G,E)||!/aT|8I/.1j(1P 57(G))},71:u(G,E){C!q.O.1k.1l(G,E)||/^\\d{4}[/-]\\d{1,2}[/-]\\d{1,2}$/.1j(G)},70:u(G,E){C!q.O.1k.1l(G,E)||/^\\d\\d?\\.\\d\\d?\\.\\d\\d\\d?\\d?$/.1j(G)},3l:u(G,E){C!q.O.1k.1l(G,E)||/^-?[,0-9]+(\\.\\d+)?$/.1j(G)},6Z:u(G,E){C!q.O.1k.1l(G,E)||/^-?[\\.0-9]+(,\\d+)?$/.1j(G)},56:u(G,E){C!q.O.1k.1l(G,E)||/^\\d+$/.1j(G)},73:u(G,E,P){C G==q(""+P).1Q()}},aU:u(1f,2a,1Z){q.O.1k[1f]=2a;q.O.3y[1f]=1Z}});(u(){u 2k(1f,2a){B(!3H.5F[1f]){3H.5F[1f]=2a}};2k("cM",u(1A,27){27=27||1e;W(D i=0;i<l.I;i++)1A.3V(27,l[i],i,l)});2k("cO",u(1A,27){27=27||1e;W(D i=0;i<l.I;i++)B(!1A.3V(27,l[i],i,l))C 1a;C 11});2k("cP",u(1A,27){27=27||1e;W(D i=0;i<l.I;i++)B(1A.3V(27,l[i],i,l))C 11;C 1a});2k("4I",u(1A,27){27=27||1e;D r=[];W(D i=0;i<l.I;i++)r[r.I]=1A.3V(27,l[i],i,l);C r});2k("1x",u(1A,27){27=27||1e;D r=[];W(D i=0;i<l.I;i++)B(1A.3V(27,l[i],i,l))r[r.I]=l[i];C r});2k("1M",u(ad,8r){W(D i=8r||0;i<l.I;i++)B(l[i]===ad)C i;C-1});2k("8s",u(){C l.1x(u(E,2V,8U){C 8U.1M(E)>=2V})})})();(u($){D 2j,6o,3s,7G,29,8R,62;$.L.aW=u(F){F=$.1i({},17.cX.4m,F);B(!2j){2j=$(\'<26 T="cZ"><8y></8y><p 4L="1K"></p><p 4L="1q"></p></26>\').1w().K({1X:\'3W\',d0:"d1"}).5N(\'1K\');6o=$(\'8y\',2j);3s=$(\'p.1K\',2j);7G=$(\'p.1q\',2j)}$(l).1x(\'[@3N]\').16(u(){l.3u=F}).2E("5E",ah).2E(F.Q,6H);C l};u 6H(Q){B(l.3u.8Z)62=3q(1B,l.3u.8Z);N 1B();B(l.3u.aZ)$(\'1K\').2E(\'9a\',4g);4g(Q);B(l.3u.Q!="31")$(l).2E(\'31\',1w);$(l).2E(\'6U\',1w)}u ah(){B(l==29||!l.3N)C;29=l;D 6g=$(l),F=l.3u;D 3N=8R=6g.1s(\'3N\');6g.1s(\'3N\',\'\');B(F.aj){6o.1w();3s.2m(F.aj.3V(l)).1B()}N B(F.90){D 8b=3N.4E(F.90);B(8b.I>1)6o.2m(8b.7W()).1B();3s.6s();W(D i=0,9H;9H=8b[i];i++){B(i>0)3s.3M("<br/>");3s.3M(9H)}B(3s.2m())3s.1B();N 3s.1w()}N{6o.2m(3N);3s.1w()}D 47=(6g.1s(\'47\')||6g.1s(\'3G\'));B(F.b0&&47)7G.2m(47.1N(\'dh://\',\'\')).1B();N 7G.1w();B(F.64){2j.2L(F.64)}B(F.92&&$.18.1z&&/aR\\s(?:5\\.5|6\\.)/.1j(8V.8W)){2j.16(u(){D 5r=$(l).K(\'8X\');B(5r.2H(/^1q\\(["\'](.*\\.dj)["\']\\)$/i)){5r=4K.$1;$(l).K({\'8X\':\'2A\',\'1x\':"dl:dm.ax.dq(ay=11, ds=dt, 3G=\'"+5r+"\')"});$(l).16(u(){D 1X=$(l).K(\'1X\');B(1X!=\'3W\'&&1X!=\'5y\')$(l).K(\'1X\',\'5y\')})}})}}u 1B(){62=19;2j.1B();4g()}u 4g(Q){B(29==19){$(\'1K\').5Q(\'9a\',4g);C}D 2B=2j[0].8D;D 2t=2j[0].8G;B(Q){2B=Q.8B+15;2t=Q.aD+15;2j.K({2B:2B+\'2q\',2t:2t+\'2q\'})}D v=aI(),h=2j[0];B(v.x+v.cx<h.8D+h.46){2B-=h.46+20;2j.K({2B:2B+\'2q\'})}B(v.y+v.cy<h.8G+h.2X){2t-=h.2X+20;2j.K({2t:2t+\'2q\'})}}u aI(){D e=V.38||{},b=V.1K||{},w=1e;u 4C(){D v=dx;W(D i=0;i<17.I;i++){D n=17[i];B(n&&n<v)v=n}C v}C{x:w.8O||e.2U||b.2U||0,y:w.8L||e.33||b.33||0,cx:4C(e.5X,b.5X,w.8M),cy:4C(e.4h,b.4h,w.5Z)}}u 1w(Q){B(62)ak(62);29=19;2j.1w();B(l.3u.64){2j.3p(l.3u.64)}B(Q.H!="31"){$(l).1s(\'3N\',8R);$(l).5Q(\'6U\',1w)}B(l.3u.Q!="31")$(l).5Q(\'31\',1w);B(l.3u.92&&$.18.1z&&/aR\\s(5\\.5|6\\.)/.1j(8V.8W)){2j.16(u(){$(l).K({\'1x\':\'\',8X:\'\'})})}}$.L.aW.4m={8Z:e8,Q:"5E",aZ:1a,b0:11,90:19,64:19,92:1a}})(q);q.1i(q.L,{b1:u(Y){D O=1P q.O(Y,l[0]);O.1v=l.3i(":3Z:2f(:3X):2f(:2P)").4P(u(){O.4l=l});B(O.F.7j){l.3X(u(Q){B(O.F.3m)Q.43();C O.1U()})}B(O.F.Q){O.1v.2E(O.F.Q,u(){O.E(l)})}C O},1y:u(t){C l.7d(q.40(l.2S(),t))},5e:u(T){C l.1x("[@W=\'"+T+"\']")}});q.1i(q.2r[":"],{ba:"!q.3d(a.G)",bb:"!!q.3d(a.G)"});q.O=u(Y,1U){l.F=q.1i({},q.O.4m,Y);l.5A=1U;l.4k=l.F.5v;l.77=l.4k.I&&l.4k||q(1U);l.2u=l.F.7h.2k(l.F.5v);l.2P()};q.1i(q.O,{4m:{3y:{},39:"1m",82:11,7h:q([]),5v:q([]),7j:11},bd:u(F){q.1i(q.O.4m,F)},3y:{1l:"bf bg 2Z 1l.",6P:"1F 1G a G 99 bj bm {0} 5n.",7P:"1F 1G a G bn at bo {0} 5n.",7K:"1F 1G a G 7g {0} 7y {1} 5n bq.",5k:"1F 1G a 2R 5k bs.",1q:"1F 1G a 2R bu.",2p:"1F 1G a 2R 2p.",71:"1F 1G a 2R 2p (bv).",70:"7s 7t 7u 5p bx¼bz bB 5p.",3l:"1F 1G a 2R 3l.",6Z:"7s 7t 7u bJ bL 5p.",56:"1F 1G 9i 56",73:"1F 1G 7L bN G bP.",6R:"1F 1G a G 7g {0} 7y {1}.",6Q:"1F 1G a G bU 7a 4B 7D 3J {0}.",7J:"1F 1G a G bW 7a 4B 7D 3J {0}."},5F:{1U:u(){l.58();W(D i=0,E;E=l.1v[i++];){l.4e(E)}C l.2R()},E:u(E){l.6Y(E);l.4e(E);l.3I()},3I:u(2Q){B(2Q)q.1i(l.2x,2Q);l.F.3I?l.F.3I(l.2x,l):l.80()},5s:u(){B(q.L.5s)q(l.5A).5s();l.58();l.5z();l.1v.3p(l.F.39)},3w:u(7E){C q(7E)[0]},2Q:u(){C q("8d."+l.F.39,l.77)},2P:u(E){l.2x={};l.1T=$([]);l.2o=$([])},58:u(){l.2P();l.2o=l.2Q().1y(l.2u);l.1T.1y(l.2u)},6Y:u(E){l.2P();l.2o=l.2Q().5e(l.48(l.3w(E)))},4e:u(E){E=l.3w(E);q(E).3p(l.F.39);D 25=l.25(E);W(D i=0,1O;1O=25[i++];){3F{D 2b=q.O.1k[1O.2a](q.3d(E.G),E,1O.4T);B(2b===-1)30;B(!2b){q(E).2L(l.F.39);l.7N(1O,E);30}}3E(e){l.F.3m&&1e.2Y&&2Y.1m("c7 c8 c9 cb E "+E.T+", 4e 7L \'"+1O.2a+"\' 2a");9D e}}},1Z:u(T,1O){D m=l.F.3y[T];C m&&(m.1Y==2F?m:m[1O.2a])},7N:u(1O,E){D T=l.48(E),P=1O.4T;l.2x[T]=(E.3N||l.1Z(T,1O)||q.O.3y[1O.2a]||"<7R>cd: ce 1Z cf W "+T+"</7R>").1N("{0}",(P.1Y==3H?P[0]:P)||"").1N("{1}",P[1]||"")},2R:u(){B(l.83()){l.3I();C 1a}N{l.5z();B(l.F.7T){l.F.7T(l.5A);C 1a}C 11}},83:u(){D 4R=0;q.16(l.2x,u(){4R++});C 4R},5z:u(){l.3c("89")},3c:u(5u){D 3k=l;u 4q(){C 3k["3J"+5u]}B(l.F.4u){4q().1y(4q().3K(l.F.4u))}4q()[5u.2n()]();C l},80:u(){D 2s=11;W(D 4r 28 l.2x){B(2s&&l.F.82){B(l.4l&&l.2x[l.4l.T])l.4l.4P();N{3F{D E=q("#"+4r);B(E.I)E[0].4P()}3E(e){l.F.3m&&1e.2Y&&2Y.1m(e)}}2s=1a}l.8a(4r,l.2x[4r])}l.2o=l.2o.2f(l.1T);l.3c("89").3c("cv")},8a:u(T,1Z){D 1m=l.2Q().5e(T);B(1m.I){B(1m.1s("8e")){1m.2m(1Z)}}N{1m=q("<8d>").1s({"W":T,8e:11}).2L(l.F.39).2m(1Z);B(l.F.4u){1m=1m.1w().1B().4t("<"+l.F.4u+">").1o()}B(!l.4k.3M(1m).I)l.F.6z?l.F.6z(1m,q("#"+T)):1m.8i("#"+T)}l.1T.1y(1m)},25:u(E){B(!l.S(E))C[];D 25=[];q.16(l.S(E),u(2N,G){25[25.I]={2a:2N,4T:G}});C 25},S:u(E){C l.F.25?l.F.25[l.48(E)]:l.F.6A?q(E).S()[l.F.6A]:q(E).S()},48:u(E){D T=(/3S|4f/i.1j(E.H))?E.1f:E.T;B(!T){D 4U=E.1U.T,4S=/[^a-a6-2C-9\\-5I]/g;T=E.T=(4U?4U.1N(4S,""):"")+E.1f.1N(4S,"")}C T}},3x:u(G,E){5a(E.1I.2n()){3a\'3B\':C q("2l:3t",E).I;3a\'3Z\':B(/3S|4f/i.1j(E.H))C q(E.1U||V).3i(\'[@1f="\'+E.1f+\'"]:4M\').I}C G.I},7p:u(P,E){C l.5C[U P]?l.5C[U P](P,E):11},5C:{"68":u(P,E){C P},"1R":u(P,E){C!!q(P,E.1U).I},"u":u(P,E){C P(E)}},1k:{1l:u(G,E,P){B(!q.O.7p(P,E))C-1;5a(E.1I.2n()){3a\'3B\':D Y=q("2l:3t",E);C Y.I>0&&(E.H=="3B-ae"||Y[0].G.I>0);3a\'3Z\':5a(E.H.2n()){3a\'4f\':3a\'3S\':C q.O.3x(G,E)>0}am:C G.I>0}},ap:u(G,E,P){C!q.O.1k.1l(G,E)||P.1j(G)},7P:u(G,E,P){D I=q.O.3x(G,E);C!q.O.1k.1l(G,E)||I>=P},6P:u(G,E,P){D I=q.O.3x(G,E);C!q.O.1k.1l(G,E)||I<=P},7K:u(G,E,P){D I=q.O.3x(G,E);C!q.O.1k.1l(G,E)||(I>=P[0]&&I<=P[1])},7J:u(G,E,P){C!q.O.1k.1l(G,E)||G>=P},6Q:u(G,E,P){C!q.O.1k.1l(G,E)||G<=P},6R:u(G,E,P){C!q.O.1k.1l(G,E)||(G>=P[0]&&G<=P[1])},5k:u(G,E){C!q.O.1k.1l(G,E)||/^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$/i.1j(G)},1q:u(G,E){C!q.O.1k.1l(G,E)||/^(aB?|aC):\\/\\/[A-2C-9](\\.?[A-2C-5j„1uœ1u–][A-2C-5i\\-1u„1uœ1u–]*)*(\\/([A-2C-5j„1uœ1u–][A-2C-5i\\-\\.1u„1uœ1u–]*)?)*(\\?([A-2C-5j„1uœ1u–][A-2C-5i\\-\\.%\\+=&1u„1uœ1u–]*)?)?$/i.1j(G)},2p:u(G,E){C!q.O.1k.1l(G,E)||!/aT|8I/.1j(1P 57(G))},71:u(G,E){C!q.O.1k.1l(G,E)||/^\\d{4}[/-]\\d{1,2}[/-]\\d{1,2}$/.1j(G)},70:u(G,E){C!q.O.1k.1l(G,E)||/^\\d\\d?\\.\\d\\d?\\.\\d\\d\\d?\\d?$/.1j(G)},3l:u(G,E){C!q.O.1k.1l(G,E)||/^-?[,0-9]+(\\.\\d+)?$/.1j(G)},6Z:u(G,E){C!q.O.1k.1l(G,E)||/^-?[\\.0-9]+(,\\d+)?$/.1j(G)},56:u(G,E){C!q.O.1k.1l(G,E)||/^\\d+$/.1j(G)},73:u(G,E,P){C G==q(""+P).1Q()}},aU:u(1f,2a,1Z){q.O.1k[1f]=2a;q.O.3y[1f]=1Z}});(u($){$.L.2h=u(Y){C l.16(u(){$.2h(l,Y)})};$.2h=u(1S,Y){D F={\'5h\':19,\'2h\':\'6j\',\'32\':ea,\'7o\':\'9n\',\'1p\':\'b3\',\'4L\':\'2h\',\'1g\':\'44\'};B(Y)$.1i(F,Y);B(F.5h===19)D 1v=$(1S).5h();N D 1v=$(1S).5h(F.5h);B(1v.I>1){$(1S).K(\'1X\',\'5y\');$(1S).K(\'1g\',F["1g"]);$(1S).2L(F["4L"]);W(D i=0;i<1v.I;i++){$(1v[i]).K(\'z-2V\',2F(1v.I-i));$(1v[i]).K(\'1X\',\'3W\');$(1v[i]).1w()};B(F["2h"]=="6j"){3q(u(){$.2h.7M(1v,F,1,0)},F.32);$(1v[0]).1B()}N B(F["2h"]=="52"){3q(u(){do{29=4c.bX(4c.52()*1v.I)}2K(29==0)$.2h.7M(1v,F,29,0)},F.32);$(1v[0]).1B()}N 7F(\'q: 2h: 9t "2h" 9w 9x be "6j" 4B "52"\')}};$.2h.7M=u(1v,F,29,2w){B(F["7o"]==\'bS\'){$(1v[2w]).bA(F.1p,$(1v[29]).bD(F.1p))}N B(F["7o"]==\'9n\'){$(1v[2w]).bH(F.1p);$(1v[29]).bM(F.1p)}N 7F(\'q: 2h: 9t "7o" 9w 9x be "bS" 4B "9n"\');B(F["2h"]=="6j"){B((29+1)<1v.I){29=29+1;2w=29-1}N{29=0;2w=1v.I-1}}N B(F["2h"]=="52"){2w=29;2K(29==2w)29=4c.bX(4c.52()*1v.I)}N 7F(\'q: 2h: 9t "2h" 9w 9x be "6j" 4B "52"\');3q((u(){$.2h.7M(1v,F,29,2w)}),F.32)}})(q);(u($){$.3L=u(){l.41={};C};$.3L.5F={5W:u(){D R={"T":19,"4Q":4i,"6G":1a,"6C":1a,"14":19,"35":u(){},"23":[]};u 5J(L){C(!!L&&U L!="1R"&&U L[0]=="1c"&&4K("u","i").1j(L+""))};D i=0;D 9L=1a;B(U 17[i]=="45"&&17.I>1){9L=11;i++}B(U 17[i]=="45"){W(D 2l 28 17[i])B(U R[2l]!="1c")R[2l]=17[i][2l];i++}B(U 17[i]=="3l"||(U 17[i]=="1R"&&17[i].2H(4K("^[0-9]+[cq]$"))))R["4Q"]=17[i++];B(U 17[i]=="68")R["6G"]=17[i++];B(U 17[i]=="68")R["6C"]=17[i++];B(U 17[i]=="45"&&U 17[i+1]=="1R"&&5J(17[i][17[i+1]])){R["14"]=17[i++];R["35"]=17[i++]}N B(U 17[i]!="1c"&&(5J(17[i])||U 17[i]=="1R"))R["35"]=17[i++];2K(U 17[i]!="1c")R["23"].1y(17[i++]);B(9L){B(U 17[1]=="45"){W(D 2l 28 17[0])B(U R[2l]!="1c"&&U 17[1][2l]=="1c")R[2l]=17[0][2l]}N{W(D 2l 28 17[0])B(U R[2l]!="1c")R[2l]=17[0][2l]}i++}R["7i"]=l;R["7O"]=19;D 2H=2F(R["4Q"]).2H(4K("^([0-9]+)([cq])$"));B(2H&&2H[0]!="1c"&&2H[1]!="1c")R["4Q"]=2F(1b(2H[1])*{s:4i,m:4i*60,h:4i*60*60,d:4i*60*60*24,w:4i*60*60*24*7}[2H[2]]);B(R["T"]==19)R["T"]=(2F(R["6G"])+":"+2F(R["6C"])+":"+2F(R["4Q"])+":"+2F(R["14"])+":"+2F(R["35"])+":"+2F(R["23"]));B(R["6C"])B(U l.41[R["T"]]!="1c")C l.41[R["T"]];B(!5J(R["35"])){B(R["14"]!=19&&U R["14"]=="45"&&U R["35"]=="1R"&&5J(R["14"][R["35"]]))R["35"]=R["14"][R["35"]];N R["35"]=6D("u () { "+R["35"]+" }")}R["7O"]=l.7z(R);l.41[R["T"]]=R;C R},8C:u(R){B(U R=="1R")R=l.41[R];R["7O"]=l.7z(R);C R},7z:u(R){D ac=u(){D 14=(R["14"]!=19?R["14"]:R);(R["35"]).1E(14,R["23"]);B(U(R["7i"]).41[R["T"]]!="1c"&&R["6G"])(R["7i"]).7z(R);N 6q(R["7i"]).41[R["T"]]};C 3q(ac,R["4Q"])},8F:u(R){B(U R=="1R")R=l.41[R];B(U R=="45"){ak(R["7O"]);6q l.41[R["T"]]}}};$.1i({3L$:1P $.3L(),5W:u(){C $.3L$.5W.1E($.3L$,17)},8C:u(){C $.3L$.8C.1E($.3L$,17)},8F:u(){C $.3L$.8F.1E($.3L$,17)}});$.L.1i({5W:u(){D a=[{}];W(D i=0;i<17.I;i++)a.1y(17[i]);C l.16(u(){a[0]={"T":l,"14":l};C $.5W.1E($,a)})}})})(q);(u($){$.1i({5q$:19,3m:u(aN){D aQ=($.5q$==11?11:1a);$.5q$=(aN?11:1a);C aQ},67:u(1Z){B($.5q$==11)2Y.3m(1Z)}});$.L.1i({67:u(1Z){B($.5q$==11){C l.16(u(){B(U 1Z!=="1c")$.67(1Z);$.67(l)})}}});$(V).36(u(){D 7Q=$("2m").1s("3m");B(7Q=="11"||7Q=="1a")$.3m(7Q=="11"?11:1a)});$(V).36(u(){B(U 1e.2Y==="1c"){u cw(14){D 1L=19;B(U 14==="1c")1L="[1c]";N B(U 14==="68")1L=(14?"11":"1a");N B(U 14==="3l")1L=""+14;N B(U 14==="1R")1L=14;N B(U 14==="u")1L=14;N B(U 14==="45"){B(U 14.34!=="1c"){B(14.34==1){1L=\'&9h;\';1L+=14.1I.2n();W(D i=0;i<14.9o.I;i++)1L+=\' \'+14.9o[i].1I.2n()+\'="\'+14.9o[i].6n+\'"\';1L+=\'&9q;\'}N B(14.34==2)1L=14.1I+\'="\'+14.6n;N B(14.34==3)1L=14.6n}N B(U 14.cg!=="1c")1L=14.cg();N B(U 14.5B!=="1c")1L=14.5B()}B(1L==19)1L="[fk]";C 1L};$(V).36(u(){$("1K").3M(\'<26 T="4H"><4A></4A></26>\');$("#4H").K("1H","2A").K("cW","d5").K("db","#dk").K("du","#dv").K("6w","72 5d 72 5d").K("5P","5Y b7 #dI").K("76","5Y 5Y 5Y 5Y");$("#4H 4A").K("76","5d 5d 5d 5d").K("93","em")});D 8T=["67","3m","eF","eK","1m","eW","6h","f3","fa","fh","4Q","fj","4R","cF","cI","cV"];1e.2Y={};W(D i=0;i<8T.I;i++){1e.2Y[8T[i]]=u(a7){$(\'#4H\').K("1H",$.5q$==11?"3Y":"2A");$(\'#4H 4A\').3M(\'<1C>\'+cw(a7)+\'</1C>\').K;$("#4H 4A 1C").K("e5","5b b7 #eM").K("6w","5b 72 5b 72")}}1e.2Y["4H"]=11}})})(q);',62,951,'|||||||||||||||||||||this|||||jQuery||||function|||||||if|return|var|element|settings|value|type|length|elem|css|fn||else|validator|param|event|ctx|data|id|typeof|document|for||options|||true|prop||obj||each|arguments|browser|null|false|parseInt|undefined|ret|window|name|height|callback|extend|test|methods|required|error|xml|parent|speed|url|cur|attr|parentNode|Ã|elements|hide|filter|push|msie|handler|show|li|style|apply|Please|enter|display|nodeName|opacity|body|text|indexOf|replace|rule|new|val|string|container|toShow|form|status|tabs|position|constructor|message||hash|firstChild|args||rules|div|scope|in|current|method|result|width|events|trigger|not|className|alternation|nav|helper|add|option|html|toLowerCase|toHide|date|px|expr|first|top|containers|hidden|last|errorList|global|expires|none|left|Z0|arg|bind|String|isFunction|match|initial|opt|while|addClass|context|key|num|reset|errors|valid|get|animate|scrollLeft|index|queue|offsetHeight|console|is|break|click|timeout|scrollTop|nodeType|func|ready|old|documentElement|errorClass|case|safari|toggle|trim|easing|end|target|visible|find|table|self|number|debug|elems|disabled|removeClass|setTimeout|params|tBody|selected|tSettings|bookmarkable|clean|getLength|messages|tbody|opera|select|nth|complete|catch|try|src|Array|showErrors|to|parents|scheduler|append|title|done|orig|ifModified|innerHTML|radio|tab|duration|call|absolute|submit|block|input|merge|bucket|span|preventDefault|auto|object|offsetWidth|href|findId|borderLeftWidth|nextSibling|cookie|Math|remove|check|checkbox|update|clientHeight|1000|script|labelContainer|lastActive|defaults|borderTopWidth|mozilla|tb|which|elementID|selectedClass|wrap|wrapper|overflow|load|clicked|remote|size|ol|or|min|pushStack|split|firstNum|encodeURIComponent|jQueryDebug|map|fix|RegExp|class|checked|returnValue|oid|focus|time|count|idcleanup|parameters|formId|cssFloat|now|curAnim|grep|timers||tmp|random|exec|oldblock|guid|digits|Date|prepareForm|stopPropagation|switch|1px|custom|0px|forId|hideAnim|res|children|9_|9Ã|email|success|sibling|characters|re|ein|_debug|image|resetForm|boxModel|that|errorLabelContainer|static|insertBefore|relative|hideErrors|currentForm|toString|dependTypes|location|mouseover|prototype|showAnim|onShow|_|_isfn|Number|scroll|st|appendTo|fx|border|unbind|childNodes|handlers|readyList|removeChild|originalEvent|schedule|clientWidth|4px|innerHeight||ajaxHistory|tID|curCSS|extraClass|on|onClick|log|boolean|onreadystatechange|ownerDocument|multiFilter|has|path|substr|makeArray|source|dir|op|sequence|re2|domManip|sl|nodeValue|tTitle|currentStyle|delete|containerClass|empty|setInterval|domain|disabledClass|padding|onHide|locked|errorPlacement|meta|trueClick|protect|eval|ul|tabEvents|repeat|handle|cloneNode|oWidth|doc|tr|styleFloat|toUpperCase|absparent|maxLength|maxValue|rangeValue|token|foundToken|mouseout|getAttribute|diff|isReady|prepareElement|numberDE|dateDE|dateISO|10px|equalTo|Function|secure|margin|errorContext|getTime|parseFloat|than|step|oldDisplay|setArray|ajax|ajaxSettings|between|errorContainer|_scheduler|onsubmit|oHeight|setRequestHeader|modRes|ival|animation|depend|handleError|async|Bitte|geben|Sie|lastModified|responseText|jquery|and|_schedule|tag|inArray|child|equal|selector|alert|tUrl|max|tagName|minValue|rangeLength|the|_next|formatAndAdd|_handle|minLength|req|strong|expression|submitHandler|XMLHttpRequest|navClass|shift|mergeNum|defaultView|msie6|defaultShowErrors|minHeight|focusInvalid|countErrors|visibility|cachedWidth|currentWidth|cachedFontSize|currentFontSize|Hide|showError|parts|toShowId|label|generated|button|hideClass|readyState|insertAfter|remoteUrls|switchTab|loadingClass|blur|disableTab|pos|startTime|parPos|offset|unique|from|float|isXMLDoc|inv|fn2|h3|unload|chars|pageX|reschedule|offsetLeft|matched|cancel|offsetTop|triggered|NaN|lastToggle|handleHover|pageYOffset|innerWidth|getElementById|pageXOffset|safariTimer|getComputedStyle|oldTitle|els|names|array|navigator|userAgent|backgroundImage|slice|delay|showBody|lastNum|fixPNG|paddingRight|GET|pass|_resort|00|classFilter|no|mousemove|dataType|requestDone|active|file|Modified|getResponseHeader|lt|only|isTimeout|evalScripts|globalEval|swap|fade|attributes|clearInterval|gt|join|cookies|parameter|substring|cookieValue|must|either|appendChild|clone|relparent|paddingLeft|paddingTop|throw|returnObject|bgiframe|createElement|part|hasSelectedClass|unFocus|second|override|jq|heights|font|deep|watchFontSize|_setAutoHeight|cachedHeight|currentHeight|fxSpeed|fxSlide|fxFade|fxShow|fxHide|clientX|hideSpeed|showSpeed|alpha|scrollTo|scrollX|scrollY|zA|msg|triggerTab|enableTab|prevObject|tabEvent|trampoline|subject|multiple|getPropertyValue|newProp|save|100|bodyHandler|clearTimeout||default|zoom|fl|regex|webkit|prepend|before||after|removeAttr|contains|Microsoft|enabled|tl|getElementsByTagName|https|ftp|pageY|parse|_prefix|even|odd|viewport|unshift|DOMContentLoaded|__ie_init|one|onoff|_toggle|state|old_value|MSIE|swing|Invalid|addMethod|dequeue|Tooltip|timer|oldOverflow|track|showURL|validate|force|normal|getScript|POST|processData|solid|ajaxStart|ActiveXObject|blank|filled|contentType|setDefaults||This|field|beforeSend|ajaxSend|longer|notmodified||then|of|least|ajaxStop|long||address||URL|ISO|ajaxError|gÃ|httpSuccess|ltiges|slideUp|Datum|200|slideDown|httpNotModified|Last|304|fadeOut|xmlRes|eine|httpData|Nummer|fadeIn|same|json|again|ajaxComplete|ajaxSuccess|slide|execScript|less|ywdhms|greater|floor|setTime|toUTCString|previousSibling|_height|_width|borderBottomWidth|paddingBottom|borderRightWidth|offsetParent|exception|occured|when|marginLeft|checking|marginTop|Warning|No|defined|toJSONString|iframe|password|hashPrefix|remoteCount|tabStruct|fxAutoHeight|behaviour|watch|fxShowSpeed|smhdw|fxHideSpeed|action||tempForm|Show|object2text|||siblings|exclude|srcElement|Loading|8230|There|trace|such|initialize|profile|createTextNode|FORM|reverse|forEach|weight|every|some|Top|Bottom|Left|Width|right|profileEnd|fontFamily|callee|th|tooltip|zIndex|3000|htmlFor|readonly|readOnly|monospace|getAttributeNode|setAttribute|ig|compatible|compatMode|backgroundColor|CSS1Compat|next|prev|prependTo|toggleClass|http|lastChild|png|ffffff|progid|DXImageTransform|u0128||uFFFF|AlphaImageLoader|continue|sizingMethod|crop|color|000000|td|Infinity|clientY|thead|cancelBubble|tfoot|fromElement|toElement|relatedTarget|removeEventListener|dblclick|mouseup|666699|change|keydown|keypress|keyup|addEventListener|write|mousedown|scr|resize|ipt|defer|loaded|slideToggle|fadeTo|Object|slow|hover|600|fast|400|linear|cos|borderBottom|PI|10000|250|loadIfModified|2000|serialize|textContent|getIfModified|getJSON|post|ajaxTimeout|ajaxSetup|application|www|urlencoded||20px|XMLHTTP|open|Content||Type|If|Since|Thu|01|Jan|1970|GMT|Requested|With|overrideMimeType|Connection|close|abort|info|send|protocol|300|content|warn|responseXML|cccccc|center|horizontal|vertical|365|Right|invalid|decodeURIComponent|textarea|scrollHeight|assert|noConflict|scrollWidth|outerHeight|outerWidth|removeAttribute|inline|dirxml|bgIframe|javascript|frameborder|tabindex|Alpha|Opacity|group|line|loading|500|removeExpression|concat|sort|groupEnd|setExpression|timeEnd|unknown'.split('|'),0,{}))
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr  5 12:33:28 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id D1E2C752FE1; Thu,  5 Apr 2007 12:33:27 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.profile.pl
Message-Id: <20070405103327.D1E2C752FE1@mail.ossp.org>
Date: Thu,  5 Apr 2007 12:33:27 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Apr-2007 12:33:27
  Branch: HEAD                             Handle: 2007040511332700

  Modified files:
    ossp-pkg/ase            ase.cgi.profile.pl

  Log:
    allow cancel button on edit to work as intended

  Summary:
    Revision    Changes     Path
    1.25        +8  -0      ossp-pkg/ase/ase.cgi.profile.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.profile.pl
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 ase.cgi.profile.pl
  --- ossp-pkg/ase/ase.cgi.profile.pl	5 Apr 2007 09:56:32 -0000	1.24
  +++ ossp-pkg/ase/ase.cgi.profile.pl	5 Apr 2007 10:33:27 -0000	1.25
  @@ -340,6 +340,14 @@
           ##  save updated profile details
           ##
   
  +        #   process workflow exit requests
  +        if (defined($cgi->param("button.cancel"))) {
  +            return $self->redirect($cgi->url(-mode => "menu-profile"));
  +        }
  +        elsif (not defined($cgi->param("button.save"))) {
  +            die "unable to determine action";
  +        }
  +
           #   determine form parameters
           my $name            = $cgi->param("name");
           my $nickname        = $cgi->param("nickname");
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr  5 12:34:53 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 3291A752FE1; Thu,  5 Apr 2007 12:34:53 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.main.pl
Message-Id: <20070405103453.3291A752FE1@mail.ossp.org>
Date: Thu,  5 Apr 2007 12:34:53 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Apr-2007 12:34:53
  Branch: HEAD                             Handle: 2007040511345200

  Modified files:
    ossp-pkg/ase            ase.cgi.main.pl

  Log:
    be more harmless by waiting longer before popping up tooltips

  Summary:
    Revision    Changes     Path
    1.43        +1  -1      ossp-pkg/ase/ase.cgi.main.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.42 -r1.43 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	5 Apr 2007 09:41:05 -0000	1.42
  +++ ossp-pkg/ase/ase.cgi.main.pl	5 Apr 2007 10:34:52 -0000	1.43
  @@ -191,7 +191,7 @@
           $html .= "<script type=\"text/javascript\">\n" .
                    "    \$(document).ready(function () {\n" .
                    "         \$('div.ase *').Tooltip({\n" .
  -                 "             delay:      800,\n" .
  +                 "             delay:      1500,\n" .
                    "             event:      'mouseover',\n" .
                    "             track:      false,\n" .
                    "             showURL:    false,\n" .
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr  5 12:39:08 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 3C649752FBE; Thu,  5 Apr 2007 12:39:08 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO
Message-Id: <20070405103908.3C649752FBE@mail.ossp.org>
Date: Thu,  5 Apr 2007 12:39:08 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Apr-2007 12:39:08
  Branch: HEAD                             Handle: 2007040511390700

  Modified files:
    ossp-pkg/ase            TODO

  Log:
    false alarm

  Summary:
    Revision    Changes     Path
    1.54        +0  -1      ossp-pkg/ase/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.53 -r1.54 TODO
  --- ossp-pkg/ase/TODO	5 Apr 2007 09:41:05 -0000	1.53
  +++ ossp-pkg/ase/TODO	5 Apr 2007 10:39:07 -0000	1.54
  @@ -9,7 +9,6 @@
     TODO
     ====
     - XSS checks
  -  - sample seems to be broken!?
     - enrollment workflow middle part ("email was sent"): allow resending
       of mail and give a few intermediate hints while waiting for mail, etc.
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr  5 12:39:29 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id C51DC753075; Thu,  5 Apr 2007 12:39:29 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO
Message-Id: <20070405103929.C51DC753075@mail.ossp.org>
Date: Thu,  5 Apr 2007 12:39:29 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Apr-2007 12:39:29
  Branch: HEAD                             Handle: 2007040511392900

  Modified files:
    ossp-pkg/ase            TODO

  Log:
    remove this for now

  Summary:
    Revision    Changes     Path
    1.55        +0  -3      ossp-pkg/ase/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.54 -r1.55 TODO
  --- ossp-pkg/ase/TODO	5 Apr 2007 10:39:07 -0000	1.54
  +++ ossp-pkg/ase/TODO	5 Apr 2007 10:39:29 -0000	1.55
  @@ -8,7 +8,4 @@
   
     TODO
     ====
  -  - XSS checks
  -  - enrollment workflow middle part ("email was sent"): allow resending
  -    of mail and give a few intermediate hints while waiting for mail, etc.
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr  5 12:46:36 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B114D752FBE; Thu,  5 Apr 2007 12:46:36 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.recover.pl
Message-Id: <20070405104636.B114D752FBE@mail.ossp.org>
Date: Thu,  5 Apr 2007 12:46:36 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Apr-2007 12:46:36
  Branch: HEAD                             Handle: 2007040511463600

  Modified files:
    ossp-pkg/ase            ase.cgi.recover.pl

  Log:
    cosmetics

  Summary:
    Revision    Changes     Path
    1.21        +3  -2      ossp-pkg/ase/ase.cgi.recover.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.recover.pl
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 ase.cgi.recover.pl
  --- ossp-pkg/ase/ase.cgi.recover.pl	5 Apr 2007 09:41:05 -0000	1.20
  +++ ossp-pkg/ase/ase.cgi.recover.pl	5 Apr 2007 10:46:36 -0000	1.21
  @@ -299,8 +299,9 @@
           $self->use("Mail::Sendmail");
           my $url = $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "?mode=recovery;uuid=$re_key";
           my $mail =
  -            "You have requested password recovery ". ($retried ? "again " : "") . "on your registeration with\n" .
  -            $cfg->{-cfg}->{"project-name"} . ". You can recover your account\n" .
  +            "You have requested password recovery ". ($retried ? "again " : "") . "on your " .
  +            $cfg->{-cfg}->{"project-name"} . "account.\n" .
  +            "You can recover your account through resetting your password\n" .
               "by visiting the following URL until ".$self->datetime2str($t_expiry)." UTC:\n" .
               "\n" .
               "$url\n" .
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr  5 16:39:34 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 0CB997528EE; Thu,  5 Apr 2007 16:39:34 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.heartbeat.pl
Message-Id: <20070405143934.0CB997528EE@mail.ossp.org>
Date: Thu,  5 Apr 2007 16:39:34 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Apr-2007 16:39:33
  Branch: HEAD                             Handle: 2007040515393300

  Modified files:
    ossp-pkg/ase            ase.cgi.heartbeat.pl

  Log:
    cleanup code

  Summary:
    Revision    Changes     Path
    1.3         +7  -7      ossp-pkg/ase/ase.cgi.heartbeat.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.heartbeat.pl
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ase.cgi.heartbeat.pl
  --- ossp-pkg/ase/ase.cgi.heartbeat.pl	30 Mar 2007 18:41:56 -0000	1.2
  +++ ossp-pkg/ase/ase.cgi.heartbeat.pl	5 Apr 2007 14:39:33 -0000	1.3
  @@ -88,10 +88,11 @@
                   "\n" .
                   $url . "\n" .
                   "\n" .
  -                "If you you miss the \"heartbeat\" deadline, your account will be locked and after\n" .
  -                "a following grace period finally deleted. Please understand that this \"heartbeat\"\n" .
  -                "for your Email address is an important to regularily free allocated names and nicknames\n" .
  -                "and to prevent people from registering under dummy one-time Email addresses.\n" .
  +                "If you you miss the \"heartbeat\" deadline, your account will be locked and\n" .
  +                "after a following grace period finally deleted. Please understand that this\n" .
  +                "\"heartbeat\" for your Email address is important to regularily free allocated\n" .
  +                "names and nicknames and to prevent people from registering under dummy or\n" .
  +                "one-time Email addresses.\n" .
                   "\n" .
                   "-- \n" .
                   $cfg->{-cfg}->{"service-name"} . "\n" .
  @@ -210,8 +211,8 @@
           my $mail =
               "Sorry, you missed the heartbeat grace period for your " . $cfg->{-cfg}->{"project-name"} . " account.\n" .
               "Your account was now finally deleted. No resurrection is possible, but\n" .
  -            "feel free to perform a new account enrollment from scratch in case you wish\n" .
  -            "an account in the future again.\n" .
  +            "feel free to perform a new account enrollment from scratch in case you\n" .
  +            "wish an account in the future again.\n" .
               "\n" .
               "-- \n" .
               $cfg->{-cfg}->{"service-name"} . "\n" .
  @@ -308,7 +309,6 @@
                "under which your account is registered. The next heartbeat\n" .
                "has to be provided in " . $self->time2human($t_heartbeat) . ".\n" .
                "As usual, you will be notified prematurely again, of course.\n";
  -    die "FUCK";
       return;
   }
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr  5 17:22:56 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id C978E752928; Thu,  5 Apr 2007 17:22:56 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cfg ase.cgi.cron.pl ase.cgi.enroll.pl as...
Message-Id: <20070405152256.C978E752928@mail.ossp.org>
Date: Thu,  5 Apr 2007 17:22:56 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Apr-2007 17:22:56
  Branch: HEAD                             Handle: 2007040516225501

  Modified files:
    ossp-pkg/ase            ase.cfg ase.cgi.cron.pl ase.cgi.enroll.pl
                            ase.cgi.login.pl ase.cgi.profile.pl
                            ase.cgi.util.pl

  Log:
    many small improvements and cleanups

  Summary:
    Revision    Changes     Path
    1.18        +3  -3      ossp-pkg/ase/ase.cfg
    1.2         +3  -2      ossp-pkg/ase/ase.cgi.cron.pl
    1.48        +27 -9      ossp-pkg/ase/ase.cgi.enroll.pl
    1.42        +7  -5      ossp-pkg/ase/ase.cgi.login.pl
    1.26        +6  -6      ossp-pkg/ase/ase.cgi.profile.pl
    1.30        +4  -4      ossp-pkg/ase/ase.cgi.util.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cfg
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 ase.cfg
  --- ossp-pkg/ase/ase.cfg	4 Apr 2007 15:07:17 -0000	1.17
  +++ ossp-pkg/ase/ase.cfg	5 Apr 2007 15:22:55 -0000	1.18
  @@ -36,9 +36,9 @@
   heartbeat-reminders         28d 14d 7d 1d;
   heartbeat-graceperiod       14d;
   instant-notification-urls   "http://localhost/ase/sample.cgi?mode=notify;uuid=%s";
  -requirement-realname        q{^.*\S+\s+\S+.*$};
  -requirement-nickname        q{^[a-z][a-z0-9]{3,}$};
  -requirement-password        q{^.{6,}$};
  +requirement-realname        q{^.*\S+\s+\S+.*$}     "at least 2 words";
  +requirement-nickname        q{^[a-z][a-z0-9]{3,}$} "empty or at least 4 lower-case characters";
  +requirement-password        q{^.{6,}$}             "at least 6 characters";
   blacklist-email             q{\@temporaryinbox\.com$}
                               q{\@put2\.net$}
                               q{\@senseless-entertainment\.com$}
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.cron.pl
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ase.cgi.cron.pl
  --- ossp-pkg/ase/ase.cgi.cron.pl	30 Mar 2007 18:24:28 -0000	1.1
  +++ ossp-pkg/ase/ase.cgi.cron.pl	5 Apr 2007 15:22:55 -0000	1.2
  @@ -50,11 +50,12 @@
           $dbi->query(q{
               DELETE FROM ase_recovery WHERE re_expiry < ?;
           }, $self->datetime(time())) or die $dbi->error();
  -    }
  -    elsif ($period eq 'daily') {
  +
           #   perform heartbeat workflow
           $self->cron_heartbeat();
       }
  +    elsif ($period eq 'daily') {
  +    }
   
       return;
   }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.47 -r1.48 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	5 Apr 2007 09:41:05 -0000	1.47
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	5 Apr 2007 15:22:55 -0000	1.48
  @@ -206,8 +206,7 @@
                be confirmed ("initial proof") and even re-confirmed
                ("heartbeat") regularily. So, do not enter one-time, dummy
                or even foreign Email addresses here. You have to use your
  -             real primary Email address, but you can be certain that we
  -             do not share it others.
  +             permanent Email address.
           });
           $html .= $cgi->textfield(
               -id        => 'field_address',
  @@ -368,16 +367,16 @@
   
           #   verify form parameters
           my $error = 0;
  -        my $re = $cfg->{-cfg}->{"requirement-realname"};
  +        my ($re, $req) = @{$cfg->{-cfg}->{"requirement-realname"}};
           if ($name !~ m/${re}/) {
               $self->logbook("invalid name: \"%s\"", $name);
  -            $cgi->param('name.error', 'Invalid Name: not <i>firstname lastname</i>');
  +            $cgi->param('name.error', "Invalid Name: has to be $req");
               $error = 1;
           }
  -        $re = $cfg->{-cfg}->{"requirement-nickname"};
  +        ($re, $req) = @{$cfg->{-cfg}->{"requirement-nickname"}};
           if ($nickname !~ m/(?:|${re})/) {
               $self->logbook("invalid nickname: \"%s\"", $nickname);
  -            $cgi->param('nickname.error', 'Invalid Nickname: has to be empty or match "$re"');
  +            $cgi->param('nickname.error', "Invalid Nickname: has to be $req");
               $error = 1;
           }
           if ($address !~ m/^[^@]+\@(?:[^.]+\.)+[^.]+$/) {
  @@ -385,10 +384,10 @@
               $cgi->param('address.error', 'Invalid Email address: not <i>name</i>@<i>domain</i>');
               $error = 1;
           }
  -        $re = $cfg->{-cfg}->{"requirement-password"};
  +        ($re, $req) = @{$cfg->{-cfg}->{"requirement-password"}};
           if ($password !~ m/${re}/) {
               $self->logbook("invalid password: \"%s\"", $password);
  -            $cgi->param('password.error', 'Invalid Password: has to match "$re"');
  +            $cgi->param('password.error', "Invalid Password: has to be $req");
               $error = 1;
           }
           if ($password_verify ne $password) {
  @@ -445,6 +444,25 @@
                       $self->datetime2str($rec->{'me_membership_start'}) . " (enrollment already successful)");
                   $error = 1;
               }
  +            else {
  +                ($rec = $dbi->query(q{
  +                    SELECT *, MAX(en_start) FROM ase_enrollment WHERE en_nickname = ?;
  +                }, $nickname)->hash());
  +                if (defined($rec)) {
  +                    my $penalty = $self->datetime2time($rec->{'en_penalty'});
  +                    if (time() < $penalty) {
  +                        $self->logbook("nickname \"%s\" already in progress for enrolling", $nickname);
  +                        $cgi->param('nickname.error',
  +                            "Nickname already in use for enrolling since " .
  +                            "<br/>" .
  +                            "(new enrollment still blocked for " . 
  +                            $self->time2human($self->datetime2time($rec->{'en_penalty'}) - time()) .
  +                            ")"
  +                        );
  +                        $error = 1;
  +                    }
  +                }
  +            }
           }
   
           #   make sure the Email address is not a "take and throw away" one
  @@ -642,7 +660,7 @@
           Mail::Sendmail::sendmail(
               To      => $cfg->{-cfg}->{"service-admin"},
               From    => $cfg->{-cfg}->{"service-name"} . " <" . $cfg->{-cfg}->{"service-sender"} . ">\n",
  -            Subject => $cfg->{-cfg}->{"project-name"} . " Registration: " . $rec->{"en_name"} . (defined $rec->{"en_nickname"} ? " (" . $rec->{"en_nickname"} . ")" : ""). " <" . $rec->{"en_address"} . ">\n",
  +            Subject => $cfg->{-cfg}->{"project-name"} . " Account Enrollment: " . $rec->{"en_name"} . (defined $rec->{"en_nickname"} ? " (" . $rec->{"en_nickname"} . ")" : ""). " <" . $rec->{"en_address"} . ">\n",
               Message => $mail,
           ) or die $Mail::Sendmail::error;
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.41 -r1.42 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	5 Apr 2007 09:41:05 -0000	1.41
  +++ ossp-pkg/ase/ase.cgi.login.pl	5 Apr 2007 15:22:55 -0000	1.42
  @@ -70,11 +70,13 @@
           $html >> "canvas";
   
           #   generate header text
  -        $html .=
  -            "Welcome to " . $cfg->{-cfg}->{"service-name"} . "!<p/>\n" .
  -            "Please login with your name, nickname, or Email address.<br/>\n" .
  -            "If you have still no account, sign up by using \"Account Enrollment\", please.<br/>\n".
  -            "If you forgot your password, recover by using \"Account Recovery\", please.\n";
  +        $html .= $self->unindent(q{
  +            Welcome to %s!
  +            <p/>
  +            Please login with your name, nickname, or Email address.<br/>
  +            If you have still no account, sign up by using "Account Enrollment", please.<br/>
  +            If you forgot your password, recover by using "Account Recovery", please.
  +        }, $cfg->{-cfg}->{"service-name"});
   
           #   generate the inner canvas
           $html .=
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.profile.pl
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 ase.cgi.profile.pl
  --- ossp-pkg/ase/ase.cgi.profile.pl	5 Apr 2007 10:33:27 -0000	1.25
  +++ ossp-pkg/ase/ase.cgi.profile.pl	5 Apr 2007 15:22:55 -0000	1.26
  @@ -356,22 +356,22 @@
   
           #   verify form parameters
           my $error = 0;
  -        my $re = $cfg->{-cfg}->{"requirement-realname"};
  +        my ($re, $req) = @{$cfg->{-cfg}->{"requirement-realname"}};
           if ($name !~ m/${re}/) {
               $self->logbook("invalid name: \"%s\"", $name);
  -            $cgi->param('name.error', 'Invalid Name: not <i>firstname lastname</i>');
  +            $cgi->param('name.error', "Invalid Name: has to be $req");
               $error = 1;
           }
  -        $re = $cfg->{-cfg}->{"requirement-nickname"};
  +        ($re, $req) = @{$cfg->{-cfg}->{"requirement-nickname"}};
           if ($nickname !~ m/(?:|${re})/) {
               $self->logbook("invalid nickname: \"%s\"", $nickname);
  -            $cgi->param('nickname.error', 'Invalid Nickname: has to be empty or match "$re"');
  +            $cgi->param('nickname.error', "Invalid Nickname: has to be $req");
               $error = 1;
           }
  -        $re = $cfg->{-cfg}->{"requirement-password"};
  +        ($re, $req) = @{$cfg->{-cfg}->{"requirement-password"}};
           if ($password ne '' and $password !~ m/^${re}$/) {
               $self->logbook("invalid password: \"%s\"", $password);
  -            $cgi->param('password.error', 'Invalid Password: has to match "$re"');
  +            $cgi->param('password.error', "Invalid Password: has to be $req");
               $error = 1;
           }
           if ($password ne '' and $password_verify ne $password) {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.util.pl
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 ase.cgi.util.pl
  --- ossp-pkg/ase/ase.cgi.util.pl	5 Apr 2007 09:41:05 -0000	1.29
  +++ ossp-pkg/ase/ase.cgi.util.pl	5 Apr 2007 15:22:56 -0000	1.30
  @@ -367,18 +367,18 @@
   
   #   helper function for removing indenting
   sub unindent {
  -    my ($self, $txt) = @_;
  +    my ($self, $txt, @args) = @_;
       $txt = $self->expand_tabs(8, $txt);
       my $n = 999;
       my $k;
       $txt =~ s/^(\s+)/$k = length($1), $n = ($k < $n ? $k : $n), $1/mge;
       $txt =~ s/^\s{$n}//mg;
  -    return $txt;
  +    return sprintf($txt, @args);
   }
   
   #   helper function for streamlining text
   sub streamline {
  -    my ($self, $txt) = @_;
  +    my ($self, $txt, @args) = @_;
       $txt =~ s/^\s+//s;
       $txt =~ s/\s+$//s;
       $txt =~ s/^[ \t]+//mg;
  @@ -387,7 +387,7 @@
       $txt =~ s/\n\n/<p\/>/sg;
       $txt =~ s/\n/ /sg;
       $txt =~ s/"/&quot;/sg;
  -    return $txt;
  +    return sprintf($txt, @args);
   }
   
   #   helper function for converting hex "RRGGBB" into decimal (R,G,B)
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr  5 17:47:24 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 61F4A7529C6; Thu,  5 Apr 2007 17:47:24 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.scode.pl
Message-Id: <20070405154724.61F4A7529C6@mail.ossp.org>
Date: Thu,  5 Apr 2007 17:47:24 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Apr-2007 17:47:24
  Branch: HEAD                             Handle: 2007040516472400

  Modified files:
    ossp-pkg/ase            ase.cgi.scode.pl

  Log:
    improve scode graphic once again

  Summary:
    Revision    Changes     Path
    1.15        +3  -1      ossp-pkg/ase/ase.cgi.scode.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.scode.pl
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 ase.cgi.scode.pl
  --- ossp-pkg/ase/ase.cgi.scode.pl	4 Apr 2007 20:40:03 -0000	1.14
  +++ ossp-pkg/ase/ase.cgi.scode.pl	5 Apr 2007 15:47:24 -0000	1.15
  @@ -95,8 +95,10 @@
       $im->line(0, 0, 0, 24, $c_bd1);
       $im->line($im_length-1, 0, $im_length-1, 24, $c_bd2);
       $im->line(0, 24, $im_length-1, 24, $c_bd2);
  +    srand();
       for (my $i = 0; $i < length($scode_num); $i++) {
  -        $im->string(GD::gdGiantFont(), 8+($i*11), 5, substr($scode_num, $i, 1), $c_tx->[$i % 2]);
  +        my $k = [-2, -1, 0, 1, 2]->[rand()*5];
  +        $im->string(GD::gdGiantFont(), 8+($i*11), 5+$k, substr($scode_num, $i, 1), $c_tx->[$i % 2]);
       }
       my $scode_img = $im->png;
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr  5 17:51:38 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 03C2F752FC2; Thu,  5 Apr 2007 17:51:38 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.enroll.pl ase.cgi.recover.pl
Message-Id: <20070405155138.03C2F752FC2@mail.ossp.org>
Date: Thu,  5 Apr 2007 17:51:38 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Apr-2007 17:51:37
  Branch: HEAD                             Handle: 2007040516513700

  Modified files:
    ossp-pkg/ase            ase.cgi.enroll.pl ase.cgi.recover.pl

  Log:
    more cosmetics and code cleanups

  Summary:
    Revision    Changes     Path
    1.49        +46 -53     ossp-pkg/ase/ase.cgi.enroll.pl
    1.22        +2  -2      ossp-pkg/ase/ase.cgi.recover.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.48 -r1.49 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	5 Apr 2007 15:22:55 -0000	1.48
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	5 Apr 2007 15:51:37 -0000	1.49
  @@ -91,17 +91,16 @@
           $canvas->($html, "1");
   
           #   generate description
  -        $html .=
  -            "<p/>\n" .
  -            "Enroll here and join " . $cfg->{-cfg}->{"project-name"} . ".\n" .
  -            "For successfully enrolling you have to specify at least your\n" .
  -            "real name, a unique nick name, your Email address and a password.\n" .
  -            "Additionally, you have to\n" .
  -            "repeat the security code to confirm that you are human.\n" .
  -            "After pressing \"Enroll\"\n" .
  -            "you will receive a verification Email under the specified\n" .
  -            "address containing an activation URL. Once you clicked on\n" .
  -            "this URL, you are successfully enrolled.\n";
  +        $html .= $self->unindent(q{
  +            Enroll here and join %s.
  +            For successfully enrolling you have to specify at least
  +            your real name, a unique nickname, your permanent Email
  +            address and a password. Additionally, you have to repeat the
  +            security code to confirm that you are human. After pressing
  +            "Enroll" you will receive a verification Email under the
  +            specified address containing an activation URL. Once you
  +            clicked on this URL, you are successfully enrolled.
  +        }, $cfg->{-cfg}->{"project-name"});
   
           #   determine some information
           my $pw = $self->makerandom(8, "A-Za-z0-9");
  @@ -283,7 +282,7 @@
               -maxlength => 6,
               -title     => $title,
           ) . "<br/>";
  -        $html .= "<span class=\"annotation\">(repeat the shown 6 character security code)</span><br/>\n";
  +        $html .= "<span class=\"annotation\">(repeat the shown security code consisting of 6 digits and upper case letters)</span><br/>\n";
           if (defined(my $error = $cgi->param("scode.error"))) {
               $html .= "<span class=\"error\">$error</span><br/>\n";
           }
  @@ -549,20 +548,17 @@
           $canvas->($html, "2");
   
           #   display hint
  -        $html .=
  -            "<p/>\n" .
  -            "An Email was sent to you under &lt;<a href=\"mailto:$address\"><b>$address</b></a>&gt; containing\n" .
  -            "an URL. Please visit this URL for being directed to step 3\n" .
  -            "of this Enrollment procedure, the Account Activation.\n" .
  -            "<p/>\n" .
  -            "After successful confirmation " .
  -            "you can access your account by going to the Login screen.\n" .
  -            "<p/>\n" .
  -            "<a class=\"button\" href=\"" . 
  -            $self->url(-mode => "login", -login => ($nickname || $address)) .
  -            "\">" .
  -            "Go to <b>Login</b> screen" .
  -            "</a>\n";
  +        $html .= $self->unindent(q{
  +            An Email was sent to you under
  +            &lt;<a href="mailto:%s"><b>%s</b></a>&gt;
  +            containing an URL. Please visit this URL for being directed
  +            to step 3. of this Enrollment procedure, the Account Activation.
  +            <p/>
  +            After successful confirmation you can access your account by
  +            going to the Login screen.
  +            <p/>
  +            <a class="button" href="%s">Go to <b>Login</b> screen</a>
  +        }, $address, $address, $self->url(-mode => "login", -login => ($nickname || $address)));
   
           #   log action
           $self->logbook("enrollment started for %s <%s>", $name, $address);
  @@ -583,18 +579,17 @@
               SELECT * FROM ase_enrollment WHERE en_uuid = ?;
           }, $uuid)->hash();
           if (not defined($rec)) {
  -            $html .= "<h1>Account Enrollment</h1>\n" .
  -                     "<h3 class=\"error\">ERROR: ACTIVATION FAILED</h3>\n" .
  -                     "Sorry, no enrollment information found under " .
  -                     "UUID $uuid. Either you waited too long for activating " .
  -                     "(the enrollment information already expired), or " .
  -                     "you already activated your account or " .
  -                     "the URL you followed was incorrect. Please start " .
  -                     "from scratch!" .
  -                     "<p/>\n" .
  -                     "<a class=\"button\" href=\"".$self->url(-mode => "enrollment")."\">" .
  -                     "Go to <b>Enrollment</b> screen" .
  -                     "</a>\n";
  +            $html .= $self->unindent(q{
  +                <h1>Account Enrollment</h1>
  +                <h3 class="error">ERROR: ACTIVATION FAILED</h3>
  +                Sorry, no enrollment information found under UUID
  +                %s. Either you waited too long for activating (the
  +                enrollment information already expired), or you already
  +                activated your account or the URL you followed was
  +                incorrect. Please start from scratch!
  +                <p/>
  +                <a class="button" href="%s">Go to <b>Enrollment</b> screen</a>
  +            }, $uuid, $self->url(-mode => "enrollment"));
               return;
           }
   
  @@ -625,21 +620,19 @@
           $self->notify($uuid);
   
           #   generate description
  -        $html .=
  -            "Congratulations!\n" .
  -            "<p/>\n" .
  -            "You have successfully registered with " . $cfg->{-cfg}->{"project-name"} . ".\n" .
  -            "You can now access your account by going to the Login screen.\n" .
  -            "You should be redirected to the Login screen in 10 seconds automatically.<br/>\n" .
  -            "<meta http-equiv=\"refresh\" content=\"10;url=" .
  -            $self->url(-mode => "login", -login => ($rec->{'en_nickname'} || $rec->{'en_address'})) .
  -            "\">\n" .
  -            "<p/>\n" .
  -            "<a class=\"button\" href=\"" . 
  -            $self->url(-mode => "login", -login => ($rec->{'en_nickname'} || $rec->{'en_address'})) .
  -            "\">" .
  -            "Go to <b>Login</b> screen" .
  -            "</a>\n";
  +        $html .= $self->unindent(q{
  +            Congratulations!
  +            <p/>
  +            You have successfully registered with %s.
  +            You can now access your account by going to the Login screen.
  +            You should be redirected to the Login screen in 10 seconds automatically.
  +            <meta http-equiv="refresh" content="10;url=%s"/>
  +            <p/>
  +            <a class="button" href="%s">Go to <b>Login</b> screen</a>
  +        }, $cfg->{-cfg}->{"project-name"},
  +           $self->url(-mode => "login", -login => ($rec->{'en_nickname'} || $rec->{'en_address'})),
  +           $self->url(-mode => "login", -login => ($rec->{'en_nickname'} || $rec->{'en_address'}))
  +        );
   
           #   determine additional information for administrators
           (my $rec2 = $dbi->query(q{
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.recover.pl
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 ase.cgi.recover.pl
  --- ossp-pkg/ase/ase.cgi.recover.pl	5 Apr 2007 10:46:36 -0000	1.21
  +++ ossp-pkg/ase/ase.cgi.recover.pl	5 Apr 2007 15:51:37 -0000	1.22
  @@ -170,7 +170,7 @@
               -maxlength => 6,
               -title     => $title,
           ) . "<br/>";
  -        $html .= "<span class=\"annotation\">(repeat the shown 6 character security code)</span><br/>\n";
  +        $html .= "<span class=\"annotation\">(repeat the shown security code consisting of 6 digits and upper case letters)</span><br/>\n";
           if (defined(my $error = $cgi->param("scode.error"))) {
               $html .= "<span class=\"error\">$error</span><br/>\n";
           }
  @@ -502,7 +502,7 @@
               -maxlength => 6,
               -title     => $title,
           ) . "<br/>";
  -        $html .= "<span class=\"annotation\">(repeat the shown 6 character security code)</span><br/>\n";
  +        $html .= "<span class=\"annotation\">(repeat the shown security code consisting of 6 digits and upper case letters)</span><br/>\n";
           if (defined(my $error = $cgi->param("scode.error"))) {
               $html .= "<span class=\"error\">$error</span><br/>\n";
           }
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr  5 17:53:22 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 9A2227529C6; Thu,  5 Apr 2007 17:53:22 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.scode.pl
Message-Id: <20070405155322.9A2227529C6@mail.ossp.org>
Date: Thu,  5 Apr 2007 17:53:22 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Apr-2007 17:53:22
  Branch: HEAD                             Handle: 2007040516532200

  Modified files:
    ossp-pkg/ase            ase.cgi.scode.pl

  Log:
    leave out U and V as those two are also extremely hard to distinguish
    with the GD font

  Summary:
    Revision    Changes     Path
    1.16        +2  -2      ossp-pkg/ase/ase.cgi.scode.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.scode.pl
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 ase.cgi.scode.pl
  --- ossp-pkg/ase/ase.cgi.scode.pl	5 Apr 2007 15:47:24 -0000	1.15
  +++ ossp-pkg/ase/ase.cgi.scode.pl	5 Apr 2007 15:53:22 -0000	1.16
  @@ -42,8 +42,8 @@
       undef $uuid;
   
       #   generate new Security Code Number
  -    #   (notice: "0"/"O", "2"/"Z", and "5"/"S" are too hard to quickly distinguish, so left out)
  -    my $scode_num = $self->makerandom(6, "1346-9A-NP-RT-Y");
  +    #   (notice: "0"/"O", "2"/"Z", "5"/"S" and "U"/"V" are too hard to quickly distinguish, so left out)
  +    my $scode_num = $self->makerandom(6, "1346-9A-NP-RTW-Y");
   
       #   determine expiry time
       my $scode_expiry = $self->datetime(time() + 4*60*60);
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr  5 18:20:57 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id C195F7529C6; Thu,  5 Apr 2007 18:20:57 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.enroll.pl
Message-Id: <20070405162057.C195F7529C6@mail.ossp.org>
Date: Thu,  5 Apr 2007 18:20:57 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Apr-2007 18:20:57
  Branch: HEAD                             Handle: 2007040517205700

  Modified files:
    ossp-pkg/ase            ase.cgi.enroll.pl

  Log:
    cosmetics

  Summary:
    Revision    Changes     Path
    1.50        +3  -3      ossp-pkg/ase/ase.cgi.enroll.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.49 -r1.50 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	5 Apr 2007 15:51:37 -0000	1.49
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	5 Apr 2007 16:20:57 -0000	1.50
  @@ -68,9 +68,9 @@
   
           #   generate step-by-step list
           my $steps = [
  -            [ "1", "Account Specification" ],
  -            [ "2", "Account Verfification" ],
  -            [ "3", "Account Activiation"   ],
  +            [ "1", "Specify Account Information"     ],
  +            [ "2", "Confirm Email Address Ownership" ],
  +            [ "3", "Activate Account"                ],
           ];
           $html .=
               "<ol class=\"steps\">\n";
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr  5 19:35:28 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 3A1B3753018; Thu,  5 Apr 2007 19:35:28 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.enroll.pl
Message-Id: <20070405173528.3A1B3753018@mail.ossp.org>
Date: Thu,  5 Apr 2007 19:35:28 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Apr-2007 19:35:28
  Branch: HEAD                             Handle: 2007040518352700

  Modified files:
    ossp-pkg/ase            ase.cgi.enroll.pl

  Log:
    add Login button

  Summary:
    Revision    Changes     Path
    1.51        +2  -1      ossp-pkg/ase/ase.cgi.enroll.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.50 -r1.51 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	5 Apr 2007 16:20:57 -0000	1.50
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	5 Apr 2007 17:35:27 -0000	1.51
  @@ -589,7 +589,8 @@
                   incorrect. Please start from scratch!
                   <p/>
                   <a class="button" href="%s">Go to <b>Enrollment</b> screen</a>
  -            }, $uuid, $self->url(-mode => "enrollment"));
  +                <a class="button" href="%s">Go to <b>Login</b> screen</a>
  +            }, $uuid, $self->url(-mode => "enrollment"), $self->url(-mode => "login"));
               return;
           }
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr  5 21:06:22 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 3BC5B752FE1; Thu,  5 Apr 2007 21:06:22 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.heartbeat.pl
Message-Id: <20070405190622.3BC5B752FE1@mail.ossp.org>
Date: Thu,  5 Apr 2007 21:06:22 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Apr-2007 21:06:22
  Branch: HEAD                             Handle: 2007040520062100

  Modified files:
    ossp-pkg/ase            ase.cgi.heartbeat.pl

  Log:
    fix heartbeat workflow

  Summary:
    Revision    Changes     Path
    1.4         +2  -2      ossp-pkg/ase/ase.cgi.heartbeat.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.heartbeat.pl
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ase.cgi.heartbeat.pl
  --- ossp-pkg/ase/ase.cgi.heartbeat.pl	5 Apr 2007 14:39:33 -0000	1.3
  +++ ossp-pkg/ase/ase.cgi.heartbeat.pl	5 Apr 2007 19:06:21 -0000	1.4
  @@ -126,7 +126,7 @@
       foreach my $rec ($dbi->query(q{
           SELECT *
           FROM   ase_member
  -        WHERE  me_account_heartbeat_count > ? AND
  +        WHERE  me_account_heartbeat_count == ? AND
                  me_account_heartbeat_time <= ?;
       }, scalar(@reminder_times), $self->datetime(time()))->hashes()) {
           #   update counter in database
  @@ -307,7 +307,7 @@
       $html .= "<h1>Account Heartbeat</h1>\n";
       $html .= "Thanks for re-confirming the validity of the Email address\n" .
                "under which your account is registered. The next heartbeat\n" .
  -             "has to be provided in " . $self->time2human($t_heartbeat) . ".\n" .
  +             "has to be provided in " . $self->time2human($t_heartbeat - time()) . ".\n" .
                "As usual, you will be notified prematurely again, of course.\n";
       return;
   }
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr  5 21:44:57 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id A8CDD752FE3; Thu,  5 Apr 2007 21:44:57 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.heartbeat.pl ase.cgi.login.pl
Message-Id: <20070405194457.A8CDD752FE3@mail.ossp.org>
Date: Thu,  5 Apr 2007 21:44:57 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Apr-2007 21:44:57
  Branch: HEAD                             Handle: 2007040520445700

  Modified files:
    ossp-pkg/ase            ase.cgi.heartbeat.pl ase.cgi.login.pl

  Log:
    fix heartbeat workflow again

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-pkg/ase/ase.cgi.heartbeat.pl
    1.43        +10 -4      ossp-pkg/ase/ase.cgi.login.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.heartbeat.pl
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ase.cgi.heartbeat.pl
  --- ossp-pkg/ase/ase.cgi.heartbeat.pl	5 Apr 2007 19:06:21 -0000	1.4
  +++ ossp-pkg/ase/ase.cgi.heartbeat.pl	5 Apr 2007 19:44:57 -0000	1.5
  @@ -151,7 +151,7 @@
           my $mail =
               "Sorry, you missed the heartbeat deadline for your " . $cfg->{-cfg}->{"project-name"} . " account.\n" .
               "Your account was now locked. Resurrection is still possible, but you have to\n" .
  -            "perform an account recovery within " . $self->time2human($cfg->{-cfg}->{"heartbeat-graceperiod"}) . ".\n" .
  +            "perform an account recovery within " . $self->time2human($self->human2sec($cfg->{-cfg}->{"heartbeat-graceperiod"})) . ".\n" .
               "\n" .
               "-- \n" .
               $cfg->{-cfg}->{"service-name"} . "\n" .
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.42 -r1.43 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	5 Apr 2007 15:22:55 -0000	1.42
  +++ ossp-pkg/ase/ase.cgi.login.pl	5 Apr 2007 19:44:57 -0000	1.43
  @@ -363,13 +363,19 @@
   
       #   check for locked account status
       if (defined $rec->{"me_account_lock_expiry"} and defined $rec->{"me_account_lock_reason"}) {
  -        my $locked_until = $self->datetime2time($rec->{"me_account_lock_expiry"});
  -        if ($locked_until == 0 or $locked_until > time()) {
  -            $error = "Account temporarily locked for " .
  -                ($locked_until == 0 ? "unlimited time" : $self->time2human($locked_until - time())) .
  +        if ($rec->{"me_account_lock_expiry"} == 0) {
  +            $error = "Account permanently locked " . 
                   ($rec->{"me_account_lock_reason"} ? " (" . $rec->{"me_account_lock_reason"} . ")" : "");
               goto CLEANUP;
           }
  +        else {
  +            my $locked_until = $self->datetime2time($rec->{"me_account_lock_expiry"});
  +            if ($locked_until > time()) {
  +                $error = "Account temporarily locked for " . $self->time2human($locked_until - time())) .
  +                    ($rec->{"me_account_lock_reason"} ? " (" . $rec->{"me_account_lock_reason"} . ")" : "");
  +                goto CLEANUP;
  +            }
  +        }
       }
   
       #   verify password
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr  5 21:46:53 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 143667529C6; Thu,  5 Apr 2007 21:46:53 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.login.pl
Message-Id: <20070405194653.143667529C6@mail.ossp.org>
Date: Thu,  5 Apr 2007 21:46:53 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Apr-2007 21:46:53
  Branch: HEAD                             Handle: 2007040520465200

  Modified files:
    ossp-pkg/ase            ase.cgi.login.pl

  Log:
    fix syntax

  Summary:
    Revision    Changes     Path
    1.44        +1  -1      ossp-pkg/ase/ase.cgi.login.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.43 -r1.44 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	5 Apr 2007 19:44:57 -0000	1.43
  +++ ossp-pkg/ase/ase.cgi.login.pl	5 Apr 2007 19:46:52 -0000	1.44
  @@ -371,7 +371,7 @@
           else {
               my $locked_until = $self->datetime2time($rec->{"me_account_lock_expiry"});
               if ($locked_until > time()) {
  -                $error = "Account temporarily locked for " . $self->time2human($locked_until - time())) .
  +                $error = "Account temporarily locked for " . $self->time2human($locked_until - time()) .
                       ($rec->{"me_account_lock_reason"} ? " (" . $rec->{"me_account_lock_reason"} . ")" : "");
                   goto CLEANUP;
               }
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr  6 15:44:40 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 4966E7528ED; Fri,  6 Apr 2007 15:44:40 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cfg ase.cgi.enroll.pl ase.cgi.heartbeat....
Message-Id: <20070406134440.4966E7528ED@mail.ossp.org>
Date: Fri,  6 Apr 2007 15:44:40 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Apr-2007 15:44:40
  Branch: HEAD                             Handle: 2007040614443900

  Modified files:
    ossp-pkg/ase            ase.cfg ase.cgi.enroll.pl ase.cgi.heartbeat.pl
                            ase.cgi.profile.pl ase.cgi.recover.pl

  Log:
    adjust email messages according to THL's wishes and remove the logbook
    calls for the form validations to now fill up the database with
    useless log entries

  Summary:
    Revision    Changes     Path
    1.19        +2  -2      ossp-pkg/ase/ase.cfg
    1.52        +8  -14     ossp-pkg/ase/ase.cgi.enroll.pl
    1.6         +37 -19     ossp-pkg/ase/ase.cgi.heartbeat.pl
    1.27        +0  -4      ossp-pkg/ase/ase.cgi.profile.pl
    1.23        +9  -9      ossp-pkg/ase/ase.cgi.recover.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cfg
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 ase.cfg
  --- ossp-pkg/ase/ase.cfg	5 Apr 2007 15:22:55 -0000	1.18
  +++ ossp-pkg/ase/ase.cfg	6 Apr 2007 13:44:39 -0000	1.19
  @@ -33,8 +33,8 @@
   login-failures-time-range   2m;
   login-failures-time-penalty 10m;
   heartbeat-interval          6M;
  -heartbeat-reminders         28d 14d 7d 1d;
  -heartbeat-graceperiod       14d;
  +heartbeat-reminders         4w 2w 1w 1d;
  +heartbeat-graceperiod       2w;
   instant-notification-urls   "http://localhost/ase/sample.cgi?mode=notify;uuid=%s";
   requirement-realname        q{^.*\S+\s+\S+.*$}     "at least 2 words";
   requirement-nickname        q{^[a-z][a-z0-9]{3,}$} "empty or at least 4 lower-case characters";
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.51 -r1.52 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	5 Apr 2007 17:35:27 -0000	1.51
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	6 Apr 2007 13:44:39 -0000	1.52
  @@ -368,24 +368,20 @@
           my $error = 0;
           my ($re, $req) = @{$cfg->{-cfg}->{"requirement-realname"}};
           if ($name !~ m/${re}/) {
  -            $self->logbook("invalid name: \"%s\"", $name);
               $cgi->param('name.error', "Invalid Name: has to be $req");
               $error = 1;
           }
           ($re, $req) = @{$cfg->{-cfg}->{"requirement-nickname"}};
           if ($nickname !~ m/(?:|${re})/) {
  -            $self->logbook("invalid nickname: \"%s\"", $nickname);
               $cgi->param('nickname.error', "Invalid Nickname: has to be $req");
               $error = 1;
           }
           if ($address !~ m/^[^@]+\@(?:[^.]+\.)+[^.]+$/) {
  -            $self->logbook("invalid address: \"%s\"", $address);
               $cgi->param('address.error', 'Invalid Email address: not <i>name</i>@<i>domain</i>');
               $error = 1;
           }
           ($re, $req) = @{$cfg->{-cfg}->{"requirement-password"}};
           if ($password !~ m/${re}/) {
  -            $self->logbook("invalid password: \"%s\"", $password);
               $cgi->param('password.error', "Invalid Password: has to be $req");
               $error = 1;
           }
  @@ -405,7 +401,6 @@
                   SELECT * FROM ase_member WHERE me_address = ?;
               }, $address)->hash());
               if (defined($rec)) {
  -                $self->logbook("address \"%s\" already in use", $address);
                   $cgi->param('address.error', "Email address already in use since " .
                       $self->datetime2str($rec->{'me_membership_start'}) . " (enrollment already successful)");
                   $error = 1;
  @@ -417,7 +412,6 @@
                   if (defined($rec)) {
                       my $penalty = $self->datetime2time($rec->{'en_penalty'});
                       if (time() < $penalty) {
  -                        $self->logbook("address \"%s\" already in progress for enrolling", $address);
                           $cgi->param('address.error',
                               "Email address already in use for enrolling since " .
                               "<br/>" .
  @@ -438,7 +432,6 @@
                   SELECT * FROM ase_member WHERE me_nickname = ?;
               }, $nickname)->hash());
               if (defined($rec)) {
  -                $self->logbook("nickname \"%s\" already in use", $nickname);
                   $cgi->param('nickname.error', "nickname already in use since " .
                       $self->datetime2str($rec->{'me_membership_start'}) . " (enrollment already successful)");
                   $error = 1;
  @@ -450,7 +443,6 @@
                   if (defined($rec)) {
                       my $penalty = $self->datetime2time($rec->{'en_penalty'});
                       if (time() < $penalty) {
  -                        $self->logbook("nickname \"%s\" already in progress for enrolling", $nickname);
                           $cgi->param('nickname.error',
                               "Nickname already in use for enrolling since " .
                               "<br/>" .
  @@ -468,7 +460,6 @@
           my @blacklist1 = @{$cfg->{-cfg}->{"blacklist-email"}};
           foreach my $re (@blacklist1) {
               if ($address =~ m/$re/s) {
  -                $self->logbook("address \"%s\" is not valid", $address);
                   $cgi->param('address.error', "Email address is on black-list of mail account providers");
                   $error = 1;
               }
  @@ -484,7 +475,6 @@
           );
           foreach my $re (@blacklist2) {
               if ($name =~ m/$re/s) {
  -                $self->logbook("name \"%s\" not valid", $name);
                   $cgi->param('name.error', "Name is not valid");
                   $error = 1;
               }
  @@ -526,15 +516,19 @@
           $self->use("Mail::Sendmail");
           my $url = $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "?mode=enrollment;uuid=$me_uuid";
           my $mail =
  -            "Thank you for your interest in registering with " . $cfg->{-cfg}->{"project-name"} . ".\n" .
  -            "To finish your registration you have to activate your account\n" .
  -            "by visiting the following URL until ".$self->datetime2str($t_expiry)." UTC:\n" .
  +            "Dear " . ($name || $nickname || $address) . ",\n" .
  +            "\n" .
  +            "we are delighted at your interest in " . $cfg->{-cfg}->{"project-name"} . " fellowship.\n" .
  +            "To confirm the account enrollment and activate your account please\n" .
  +            "visit the following URL before ". $self->datetime2str($t_expiry) . " UTC:\n" .
               "\n" .
               "$url\n" .
               "\n" .
  +            "Yours faithfully,\n" .
  +            "\n" .
               "-- \n" .
               $cfg->{-cfg}->{"service-name"} . "\n" .
  -            "" . $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "\n" .
  +            $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "\n" .
               "\n";
           $Mail::Sendmail::mailcfg{"smtp"} = [qw(localhost mail)];
           Mail::Sendmail::sendmail(
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.heartbeat.pl
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ase.cgi.heartbeat.pl
  --- ossp-pkg/ase/ase.cgi.heartbeat.pl	5 Apr 2007 19:44:57 -0000	1.5
  +++ ossp-pkg/ase/ase.cgi.heartbeat.pl	6 Apr 2007 13:44:39 -0000	1.6
  @@ -81,22 +81,25 @@
               $self->use("Mail::Sendmail");
               my $url = $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "?mode=heartbeat;uuid=$heartbeat_uuid";
               my $mail =
  -                "Your " . $cfg->{-cfg}->{"project-name"} . " account requires regular re-validation of the\n" .
  -                "Email address it was registered under. This is notification " . $reminder_count . " of " . scalar(@reminder_times) . ".\n" .
  -                "Just click onto the following URL within " . $self->time2human($t_heartbeat - $t_now) . "\n" .
  -                "to provide the required \"heartbeat\" for your Email address:\n" .
  +                "Dear " . ($rec->{"me_name"} || $rec->{"me_nickname"} || $rec->{"me_address"}) . ",\n" .
  +                "\n" .
  +                "we regularly check whether our dear fellows are still with us.\n" .
  +                "This keeps the " . $cfg->{-cfg}->{"project-name"} . " membership roster clean from renegades.\n" .
  +                "To trigger a heartbeat and re-validate your account please visit\n" .
  +                "the following URL within " . $self->time2human($t_heartbeat - $t_now) . ".\n" .
                   "\n" .
                   $url . "\n" .
                   "\n" .
  -                "If you you miss the \"heartbeat\" deadline, your account will be locked and\n" .
  -                "after a following grace period finally deleted. Please understand that this\n" .
  -                "\"heartbeat\" for your Email address is important to regularily free allocated\n" .
  -                "names and nicknames and to prevent people from registering under dummy or\n" .
  -                "one-time Email addresses.\n" .
  +                "This is notification " . $reminder_count . " of " . scalar(@reminder_times) . ".\n" .
  +                "\n" .
  +                "If you miss the deadline, your account will be locked\n" .
  +                "and after a grace period it will be finally deleted.\n" .
  +                "\n" .
  +                "Greetings,\n" .
                   "\n" .
                   "-- \n" .
                   $cfg->{-cfg}->{"service-name"} . "\n" .
  -                "" . $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "\n" .
  +                $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "\n" .
                   "\n";
               $Mail::Sendmail::mailcfg{"smtp"} = [qw(localhost mail)];
               Mail::Sendmail::sendmail(
  @@ -148,14 +151,22 @@
   
           #   send final notice to account holder
           $self->use("Mail::Sendmail");
  +        my $url = $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "?mode=recovery";
           my $mail =
  -            "Sorry, you missed the heartbeat deadline for your " . $cfg->{-cfg}->{"project-name"} . " account.\n" .
  -            "Your account was now locked. Resurrection is still possible, but you have to\n" .
  -            "perform an account recovery within " . $self->time2human($self->human2sec($cfg->{-cfg}->{"heartbeat-graceperiod"})) . ".\n" .
  +            "Dear " . ($rec->{"me_name"} || $rec->{"me_nickname"} || $rec->{"me_address"}) . ",\n" .
  +            "\n" .
  +            "you missed the deadline for your " . $cfg->{-cfg}->{"project-name"} . " account heartbeat.\n" .
  +            "The account has been locked. Access to our resources has been revoked.\n" .
  +            "Resurrection is still possible, if you perform an account recovery.\n" .
  +            "Just visit the following URL within " . $self->time2human($self->human2sec($cfg->{-cfg}->{"heartbeat-graceperiod"})) . ".\n" .
  +            "\n" .
  +            $url . "\n" .
  +            "\n" .
  +            "We hope you are still with us,\n" .
               "\n" .
               "-- \n" .
               $cfg->{-cfg}->{"service-name"} . "\n" .
  -            "" . $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "\n" .
  +            $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "\n" .
               "\n";
           $Mail::Sendmail::mailcfg{"smtp"} = [qw(localhost mail)];
           Mail::Sendmail::sendmail(
  @@ -208,15 +219,22 @@
   
           #   send final notice to account holder
           $self->use("Mail::Sendmail");
  +        my $url = $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "?mode=enrollment";
           my $mail =
  -            "Sorry, you missed the heartbeat grace period for your " . $cfg->{-cfg}->{"project-name"} . " account.\n" .
  -            "Your account was now finally deleted. No resurrection is possible, but\n" .
  -            "feel free to perform a new account enrollment from scratch in case you\n" .
  -            "wish an account in the future again.\n" .
  +            "Dear " . ($rec->{"me_name"} || $rec->{"me_nickname"} || $rec->{"me_address"}) . ",\n" .
  +            "\n" .
  +            "you missed the heartbeat grace period for your " . $cfg->{-cfg}->{"project-name"} . " account.\n" .
  +            "Your account has been finally deleted. No resurrection is possible.\n" .
  +            "If one day you change your mind, feel free to perform a new\n" .
  +            "account enrollment by visiting the URL:\n" .
  +            "\n" .
  +            $url . "\n" .
  +            "\n" .
  +            "Last salutation from your former fellows,\n" .
               "\n" .
               "-- \n" .
               $cfg->{-cfg}->{"service-name"} . "\n" .
  -            "" . $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "\n" .
  +            $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "\n" .
               "\n";
           $Mail::Sendmail::mailcfg{"smtp"} = [qw(localhost mail)];
           Mail::Sendmail::sendmail(
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.profile.pl
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 ase.cgi.profile.pl
  --- ossp-pkg/ase/ase.cgi.profile.pl	5 Apr 2007 15:22:55 -0000	1.26
  +++ ossp-pkg/ase/ase.cgi.profile.pl	6 Apr 2007 13:44:39 -0000	1.27
  @@ -358,19 +358,16 @@
           my $error = 0;
           my ($re, $req) = @{$cfg->{-cfg}->{"requirement-realname"}};
           if ($name !~ m/${re}/) {
  -            $self->logbook("invalid name: \"%s\"", $name);
               $cgi->param('name.error', "Invalid Name: has to be $req");
               $error = 1;
           }
           ($re, $req) = @{$cfg->{-cfg}->{"requirement-nickname"}};
           if ($nickname !~ m/(?:|${re})/) {
  -            $self->logbook("invalid nickname: \"%s\"", $nickname);
               $cgi->param('nickname.error', "Invalid Nickname: has to be $req");
               $error = 1;
           }
           ($re, $req) = @{$cfg->{-cfg}->{"requirement-password"}};
           if ($password ne '' and $password !~ m/^${re}$/) {
  -            $self->logbook("invalid password: \"%s\"", $password);
               $cgi->param('password.error', "Invalid Password: has to be $req");
               $error = 1;
           }
  @@ -385,7 +382,6 @@
                   SELECT * FROM ase_member WHERE me_nickname = ? AND me_uuid != ?;
               }, $nickname, $rec->{"me_uuid"})->hash());
               if (defined($rec2)) {
  -                $self->logbook("nickname \"%s\" already in use", $nickname);
                   $cgi->param('nickname.error', "nickname already in use");
                   $error = 1;
               }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.recover.pl
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 ase.cgi.recover.pl
  --- ossp-pkg/ase/ase.cgi.recover.pl	5 Apr 2007 15:51:37 -0000	1.22
  +++ ossp-pkg/ase/ase.cgi.recover.pl	6 Apr 2007 13:44:39 -0000	1.23
  @@ -239,7 +239,6 @@
           #   authenticate login (with dummy password to just determine account)
           my (undef, $rec, undef) = $self->authenticate($login, "dummy");
           if (not (defined $rec and exists $rec->{"me_uuid"})) {
  -            $self->logbook("invalid login: \"%s\"", $login);
               $cgi->param('login.error', "Invalid login");
               $error = 1;
           }
  @@ -250,7 +249,6 @@
               if (defined($rec2)) {
                   my $penalty = $self->datetime2time($rec2->{'re_penalty'});
                   if (time() < $penalty) {
  -                    $self->logbook("account \"%s\" already in progress for recovery", $rec->{"me_uuid"});
                       $cgi->param('login.error', "Account already in progress for recovery since " .
                           $self->datetime2str($rec2->{'re_start'}) .
                           "<br/>" .
  @@ -299,16 +297,19 @@
           $self->use("Mail::Sendmail");
           my $url = $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "?mode=recovery;uuid=$re_key";
           my $mail =
  -            "You have requested password recovery ". ($retried ? "again " : "") . "on your " .
  -            $cfg->{-cfg}->{"project-name"} . "account.\n" .
  -            "You can recover your account through resetting your password\n" .
  -            "by visiting the following URL until ".$self->datetime2str($t_expiry)." UTC:\n" .
  +            "Dear " . ($rec->{"me_name"} || $rec->{"me_nickname"} || $rec->{"me_address"}) . ",\n" .
               "\n" .
  -            "$url\n" .
  +            "we are glad to assist you in resolving the lost password issue" . ($retried ? " again" : "") . ".\n" .
  +            "To recover your account and reset the password please visit\n" .
  +            "the following URL before ". $self->datetime2str($t_expiry) . " UTC:\n" .
  +            "\n" .
  +            $url ."\n" .
  +            "\n" .
  +            "Welcome back on board,\n" .
               "\n" .
               "-- \n" .
               $cfg->{-cfg}->{"service-name"} . "\n" .
  -            "" . $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "\n" .
  +            $cgi->url(-base => 1) . $cgi->url(-absolute => 1) . "\n" .
               "\n";
           $Mail::Sendmail::mailcfg{"smtp"} = [qw(localhost mail)];
           Mail::Sendmail::sendmail(
  @@ -578,7 +579,6 @@
               return;
           }
           if ($password !~ m/^.{6,}$/) {
  -            $self->logbook("invalid password: \"%s\"", $password);
               $cgi->param('password.error', 'Invalid Password: at least 6 characters required');
               $error = 1;
           }
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr  6 15:46:35 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id D217D752928; Fri,  6 Apr 2007 15:46:34 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ README VERSION ase.cgi ase.cli
Message-Id: <20070406134634.D217D752928@mail.ossp.org>
Date: Fri,  6 Apr 2007 15:46:34 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Apr-2007 15:46:34
  Branch: HEAD                             Handle: 2007040614463400

  Modified files:
    ossp-pkg/ase            README VERSION ase.cgi ase.cli

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.8         +1  -1      ossp-pkg/ase/README
    1.4         +1  -1      ossp-pkg/ase/VERSION
    1.23        +1  -1      ossp-pkg/ase/ase.cgi
    1.4         +1  -1      ossp-pkg/ase/ase.cli
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/README
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 README
  --- ossp-pkg/ase/README	30 Mar 2007 10:12:25 -0000	1.7
  +++ ossp-pkg/ase/README	6 Apr 2007 13:46:34 -0000	1.8
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     \___/|___/\___| 
   
     OSSP ase - Affiliation Service Environment
  -  Version 0.2.0 (30-Mar-2007)
  +  Version 0.2.0 (06-Apr-2007)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/VERSION
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 VERSION
  --- ossp-pkg/ase/VERSION	30 Mar 2007 10:12:25 -0000	1.3
  +++ ossp-pkg/ase/VERSION	6 Apr 2007 13:46:34 -0000	1.4
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP ase (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP ase, Version 0.2.0 (30-Mar-2007)
  +  This is OSSP ase, Version 0.2.0 (06-Apr-2007)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 ase.cgi
  --- ossp-pkg/ase/ase.cgi	30 Mar 2007 18:24:28 -0000	1.22
  +++ ossp-pkg/ase/ase.cgi	6 Apr 2007 13:46:34 -0000	1.23
  @@ -35,7 +35,7 @@
       -prog_name   => 'OSSP ase',
       -prog_desc   => 'Affiliation Service Environment',
       -prog_vers   => '0.2.0',
  -    -prog_date   => '30-Mar-2007',
  +    -prog_date   => '06-Apr-2007',
       -path_cfgdir => '.',
       -path_libdir => '.',
       -path_vardir => '.',
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cli
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ase.cli
  --- ossp-pkg/ase/ase.cli	30 Mar 2007 18:24:29 -0000	1.3
  +++ ossp-pkg/ase/ase.cli	6 Apr 2007 13:46:34 -0000	1.4
  @@ -35,7 +35,7 @@
       -prog_name   => 'OSSP ase',
       -prog_desc   => 'Affiliation Service Environment',
       -prog_vers   => '0.2.0',
  -    -prog_date   => '30-Mar-2007',
  +    -prog_date   => '06-Apr-2007',
       -path_cfgdir => '.',
       -path_libdir => '.',
       -path_vardir => '.',
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr  6 15:46:59 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 4AEF8752928; Fri,  6 Apr 2007 15:46:59 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ChangeLog
Message-Id: <20070406134659.4AEF8752928@mail.ossp.org>
Date: Fri,  6 Apr 2007 15:46:59 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Apr-2007 15:46:59
  Branch: HEAD                             Handle: 2007040614465800

  Modified files:
    ossp-pkg/ase            ChangeLog

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.25        +1  -1      ossp-pkg/ase/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 ChangeLog
  --- ossp-pkg/ase/ChangeLog	5 Apr 2007 09:56:32 -0000	1.24
  +++ ossp-pkg/ase/ChangeLog	6 Apr 2007 13:46:58 -0000	1.25
  @@ -11,7 +11,7 @@
     This is a list of all changes to OSSP ase.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 0.1.x and 0.2.0 (xx-Oct-2005 to 20-Mar-2007)
  +  Changes between 0.1.x and 0.2.0 (xx-Oct-2005 to 07-Apr-2007)
   
      o Add tooltips to Login, Enrollment, Recovery and Profile workflow.
        [Ralf S. Engelschall]
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr  6 15:56:02 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 1B67F752FE1; Fri,  6 Apr 2007 15:56:02 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/tool/ase/ index.wml os...
Message-Id: <20070406135602.1B67F752FE1@mail.ossp.org>
Date: Fri,  6 Apr 2007 15:56:02 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   06-Apr-2007 15:56:02
  Branch: HEAD                             Handle: 2007040614560001

  Added files:
    ossp-web/pkg/tool/ase   index.wml
  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml

  Log:
    release OSSP ase 0.2.0

  Summary:
    Revision    Changes     Path
    1.167       +1  -0      ossp-web/new/news.txt
    1.1         +39 -0      ossp-web/pkg/tool/ase/index.wml
    1.59        +3  -0      ossp-web/pkg/tool/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.166 -r1.167 news.txt
  --- ossp-web/new/news.txt	1 Mar 2007 11:37:02 -0000	1.166
  +++ ossp-web/new/news.txt	6 Apr 2007 13:56:00 -0000	1.167
  @@ -1,3 +1,4 @@
  +06-Apr-2007: Released T<OSSP ase> 0.2.0
   01-Mar-2007: Released T<OSSP snmpdx> 1.0.0
   08-Feb-2007: Released L<OSSP js> 1.6.20070208
   20-Aug-2006: Released L<OSSP js> 1.6.20060820
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/ase/index.wml
  ============================================================================
  $ cvs diff -u -r0 -r1.1 index.wml
  --- /dev/null	2007-04-06 15:55:00 +0200
  +++ index.wml	2007-04-06 15:56:01 +0200
  @@ -0,0 +1,39 @@
  +
  +#use wml::ossp area=pkg:tool subarea=ase
  +
  +<title>OSSP ase</title>
  +
  +<h1>Affiliation Service Environment</h1>
  +
  +<h2>Abstract</h2>
  +
  +OSSP ase is a Web service application for managing orginization
  +affiliation memberships. It provides the interactive account enrollment,
  +account recovery and login procedures. The authentication can be
  +performed by an arbitrary remote web service with the help of a HTTP
  +based RPC mechanism.
  +
  +<h2>Authors</h2>
  +
  +<pkg_author name="Ralf S. Engelschall" mail="rse@engelschall.com">
  +
  +<h2>Status</h2>
  +
  +<pkg_status
  +    stable="none" stable_date="none"
  +    unstable="0.2.0" unstable_date="06-Apr-2007"
  +	done=100>
  +
  +<h2>Source</h2>
  +
  +<pkg_files 
  +    cvs=$(CVS_ROOT_URL)/pkg/tool/ase/
  +    url=$(FTP_ROOT_URL)/pkg/tool/ase/
  +    directory=$(FTP_ROOT_DIR)/pkg/tool/ase/
  +    files="ase-*.tar.gz" 
  +	stable="ase-0.2.0.tar.gz" unstable="none">
  +	
  +<h2>Donation</h2>
  +
  +<pkg_donation name="svs" return="$(BASE_URL)/pkg/tool/ase/">
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.58 -r1.59 index.wml
  --- ossp-web/pkg/tool/index.wml	1 Mar 2007 11:37:03 -0000	1.58
  +++ ossp-web/pkg/tool/index.wml	6 Apr 2007 13:56:01 -0000	1.59
  @@ -36,6 +36,9 @@
     <pkg_item name="flow2rrd" longname="OSSP flow2rrd" type="tool"
               desc="NetFlow to Round-Robin Database"
   	        done=90 stable="none" unstable="0.9.0">
  +  <pkg_item name="ase" longname="OSSP ase" type="tool"
  +            desc="Affiliation Service Environment"
  +		    done=100 stable="none" unstable="0.2.0">
     <pkg_item name="xenia" longname="OSSP xenia" type="tool"
               desc="CVS Browsing Server"
   	        done=20 stable="none" unstable="none">
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr  6 15:56:53 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 86E85752FE3; Fri,  6 Apr 2007 15:56:53 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/tool/ase/ index.wml ossp-web/pkg/tool/ index....
Message-Id: <20070406135653.86E85752FE3@mail.ossp.org>
Date: Fri,  6 Apr 2007 15:56:53 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   06-Apr-2007 15:56:53
  Branch: HEAD                             Handle: 2007040614565300

  Modified files:
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/ase   index.wml

  Log:
    fix typo

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-web/pkg/tool/ase/index.wml
    1.60        +1  -1      ossp-web/pkg/tool/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/ase/index.wml
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 index.wml
  --- ossp-web/pkg/tool/ase/index.wml	6 Apr 2007 13:56:01 -0000	1.1
  +++ ossp-web/pkg/tool/ase/index.wml	6 Apr 2007 13:56:53 -0000	1.2
  @@ -3,7 +3,7 @@
   
   <title>OSSP ase</title>
   
  -<h1>Affiliation Service Environment</h1>
  +<h1>Affiliation Services Environment</h1>
   
   <h2>Abstract</h2>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.59 -r1.60 index.wml
  --- ossp-web/pkg/tool/index.wml	6 Apr 2007 13:56:01 -0000	1.59
  +++ ossp-web/pkg/tool/index.wml	6 Apr 2007 13:56:53 -0000	1.60
  @@ -37,7 +37,7 @@
               desc="NetFlow to Round-Robin Database"
   	        done=90 stable="none" unstable="0.9.0">
     <pkg_item name="ase" longname="OSSP ase" type="tool"
  -            desc="Affiliation Service Environment"
  +            desc="Affiliation Services Environment"
   		    done=100 stable="none" unstable="0.2.0">
     <pkg_item name="xenia" longname="OSSP xenia" type="tool"
               desc="CVS Browsing Server"
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr  6 16:51:37 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 055EF75289B; Fri,  6 Apr 2007 16:51:36 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ChangeLog ase.cgi.login.pl ase.cgi.logout.pl...
Message-Id: <20070406145137.055EF75289B@mail.ossp.org>
Date: Fri,  6 Apr 2007 16:51:36 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Apr-2007 16:51:36
  Branch: HEAD                             Handle: 2007040615513600

  Modified files:
    ossp-pkg/ase            ChangeLog ase.cgi.login.pl ase.cgi.logout.pl
                            ase.cgi.resign.pl ase.ui.css

  Log:
    Fix style sheet for situation under OpenPKG meta.
    Fix style of logbook entries.

  Summary:
    Revision    Changes     Path
    1.26        +8  -0      ossp-pkg/ase/ChangeLog
    1.45        +1  -1      ossp-pkg/ase/ase.cgi.login.pl
    1.17        +1  -1      ossp-pkg/ase/ase.cgi.logout.pl
    1.11        +1  -1      ossp-pkg/ase/ase.cgi.resign.pl
    1.4         +7  -1      ossp-pkg/ase/ase.ui.css
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 ChangeLog
  --- ossp-pkg/ase/ChangeLog	6 Apr 2007 13:46:58 -0000	1.25
  +++ ossp-pkg/ase/ChangeLog	6 Apr 2007 14:51:36 -0000	1.26
  @@ -11,6 +11,14 @@
     This is a list of all changes to OSSP ase.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 0.2.0 and 0.2.1 (07-Apr-2007 to xx-Apr-2007)
  +
  +   o Fix style sheet for situation under OpenPKG meta.
  +     [Ralf S. Engelschall]
  +
  +   o Fix style of logbook entries.
  +     [Ralf S. Engelschall]
  +
     Changes between 0.1.x and 0.2.0 (xx-Oct-2005 to 07-Apr-2007)
   
      o Add tooltips to Login, Enrollment, Recovery and Profile workflow.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.44 -r1.45 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	5 Apr 2007 19:46:52 -0000	1.44
  +++ ossp-pkg/ase/ase.cgi.login.pl	6 Apr 2007 14:51:36 -0000	1.45
  @@ -296,7 +296,7 @@
   
           #   login the user by remembering his UUID in the session
           $session->param("login", $rec->{"me_uuid"});
  -        $self->logbook("login by %s %s<%s>",
  +        $self->logbook("login by %s%s <%s>",
               $rec->{'me_name'}, (defined $rec->{'me_nickname'} ? " (" . $rec->{'me_nickname'} . ")" : ""), $rec->{'me_address'}); 
   
           #   perform login: either go to menu or redirect to external return URL
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.logout.pl
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 ase.cgi.logout.pl
  --- ossp-pkg/ase/ase.cgi.logout.pl	29 Mar 2007 08:42:16 -0000	1.16
  +++ ossp-pkg/ase/ase.cgi.logout.pl	6 Apr 2007 14:51:36 -0000	1.17
  @@ -74,7 +74,7 @@
           "</a>\n";
   
       #   log action
  -    $self->logbook("logout by %s %s<%s>",
  +    $self->logbook("logout by %s%s <%s>",
           $rec->{'me_name'},
           (defined $rec->{'me_nickname'} ? " (" . $rec->{'me_nickname'} . ")" : ""),
           $rec->{'me_address'});
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.resign.pl
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 ase.cgi.resign.pl
  --- ossp-pkg/ase/ase.cgi.resign.pl	5 Apr 2007 09:56:32 -0000	1.10
  +++ ossp-pkg/ase/ase.cgi.resign.pl	6 Apr 2007 14:51:36 -0000	1.11
  @@ -173,7 +173,7 @@
           }
   
           #   log action
  -        $self->logbook("resign by %s %s<%s>", $rec->{'me_name'}, (defined $rec->{'me_nickname'} ? " (" . $rec->{'me_nickname'} . ")" : ""), $rec->{'me_address'}); 
  +        $self->logbook("resign by %s%s <%s>", $rec->{'me_name'}, (defined $rec->{'me_nickname'} ? " (" . $rec->{'me_nickname'} . ")" : ""), $rec->{'me_address'}); 
   
           #   delete account
           $dbi->query(q{
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.ui.css
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ase.ui.css
  --- ossp-pkg/ase/ase.ui.css	5 Apr 2007 09:41:05 -0000	1.3
  +++ ossp-pkg/ase/ase.ui.css	6 Apr 2007 14:51:36 -0000	1.4
  @@ -65,6 +65,7 @@
       border-bottom:    1px solid #666666;
       padding:          1px 8px 1px 8px;
       margin:           0px 1px 0px 1px;
  +    font-weight:      normal !important;
   }
   .ase a.button_red {
       color:            #993333;
  @@ -76,6 +77,7 @@
       border-bottom:    1px solid #993333;
       padding:          1px 8px 1px 8px;
       margin:           0px 1px 0px 1px;
  +    font-weight:      normal !important;
   }
   .ase a.button_green {
       color:            #339933;
  @@ -87,6 +89,7 @@
       border-bottom:    1px solid #339933;
       padding:          1px 8px 1px 8px;
       margin:           0px 1px 0px 1px;
  +    font-weight:      normal !important;
   }
   
   /* General: Annotations */
  @@ -110,11 +113,14 @@
   .ase h1 {
       font-family:      tahoma, arial, helvetica, sans-serif;
       font-weight:      bold;
  -    font-size:        22pt;
  +    font-size:        22pt !important;
       margin:           0px 0px 16px 0px;
       color:            #666666;
       border-left:      23pt solid #999999;
       padding-left:     10px;
  +    position:         relative !important;
  +    top:              0px !important;
  +    height:           22pt !important;
   }
   .ase h1.error {
       color:            #cc3333;
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr  6 22:37:38 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 68D33753018; Fri,  6 Apr 2007 22:37:37 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.enroll.pl ase.cgi.heartbeat.pl ase.c...
Message-Id: <20070406203737.68D33753018@mail.ossp.org>
Date: Fri,  6 Apr 2007 22:37:37 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Apr-2007 22:37:36
  Branch: HEAD                             Handle: 2007040621373501

  Modified files:
    ossp-pkg/ase            ase.cgi.enroll.pl ase.cgi.heartbeat.pl
                            ase.cgi.login.pl ase.cgi.logout.pl
                            ase.cgi.recover.pl ase.cgi.resign.pl

  Log:
    fix style of logbook entries again

  Summary:
    Revision    Changes     Path
    1.53        +4  -3      ossp-pkg/ase/ase.cgi.enroll.pl
    1.7         +6  -6      ossp-pkg/ase/ase.cgi.heartbeat.pl
    1.46        +1  -1      ossp-pkg/ase/ase.cgi.login.pl
    1.18        +1  -1      ossp-pkg/ase/ase.cgi.logout.pl
    1.24        +4  -4      ossp-pkg/ase/ase.cgi.recover.pl
    1.12        +1  -1      ossp-pkg/ase/ase.cgi.resign.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.52 -r1.53 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	6 Apr 2007 13:44:39 -0000	1.52
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	6 Apr 2007 20:37:35 -0000	1.53
  @@ -555,7 +555,8 @@
           }, $address, $address, $self->url(-mode => "login", -login => ($nickname || $address)));
   
           #   log action
  -        $self->logbook("enrollment started for %s <%s>", $name, $address);
  +        $self->logbook("enrollment started for %s%s <%s>",
  +            $name, (defined $nickname and $nickname ne '' ? " ($nickname)" : ""), $address);
       }
       elsif ($step eq "3") {
           ##
  @@ -653,8 +654,8 @@
           ) or die $Mail::Sendmail::error;
   
           #   log action
  -        $self->logbook("enrollment finished for %s %s<%s>",
  -            $rec->{"en_name"}, (defined $rec->{"en_nickname"} ? " (" . $rec->{"en_nickname"} . ")" : ""), $rec->{"en_address"});
  +        $self->logbook("enrollment finished for %s%s <%s>",
  +            $rec->{"en_name"}, (defined $rec->{"en_nickname"} and $rec->{"en_nickname"} ne '' ? " (" . $rec->{"en_nickname"} . ")" : ""), $rec->{"en_address"});
       }
   
       return;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.heartbeat.pl
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ase.cgi.heartbeat.pl
  --- ossp-pkg/ase/ase.cgi.heartbeat.pl	6 Apr 2007 13:44:39 -0000	1.6
  +++ ossp-pkg/ase/ase.cgi.heartbeat.pl	6 Apr 2007 20:37:35 -0000	1.7
  @@ -119,7 +119,7 @@
               #   log action
               $self->logbook("heartbeat notification #%d sent to %s%s <%s>",
                   $reminder_count, $rec->{'me_name'},
  -                (defined $rec->{'me_nickname'} ? " (" . $rec->{'me_nickname'} . ")" : ""),
  +                (defined $rec->{'me_nickname'} and $rec->{'me_nickname'} ne '' ? " (" . $rec->{'me_nickname'} . ")" : ""),
                   $rec->{'me_address'});
           }
       }
  @@ -198,11 +198,11 @@
           #   log action
           $self->logbook("heartbeat deadline miss for %s%s <%s>",
               $rec->{'me_name'},
  -            (defined $rec->{'me_nickname'} ? " (" . $rec->{'me_nickname'} . ")" : ""),
  +            (defined $rec->{'me_nickname'} and $rec->{'me_nickname'} ne '' ? " (" . $rec->{'me_nickname'} . ")" : ""),
               $rec->{'me_address'});
           $self->logbook("account locked for %s%s <%s>",
               $rec->{'me_name'},
  -            (defined $rec->{'me_nickname'} ? " (" . $rec->{'me_nickname'} . ")" : ""),
  +            (defined $rec->{'me_nickname'} and $rec->{'me_nickname'} ne '' ? " (" . $rec->{'me_nickname'} . ")" : ""),
               $rec->{'me_address'});
       }
   
  @@ -266,11 +266,11 @@
           #   log action
           $self->logbook("heartbeat grace-period miss for %s%s <%s>",
               $rec->{'me_name'},
  -            (defined $rec->{'me_nickname'} ? " (" . $rec->{'me_nickname'} . ")" : ""),
  +            (defined $rec->{'me_nickname'} and $rec->{'me_nickname'} ne '' ? " (" . $rec->{'me_nickname'} . ")" : ""),
               $rec->{'me_address'});
           $self->logbook("account deleted for %s%s <%s>",
               $rec->{'me_name'},
  -            (defined $rec->{'me_nickname'} ? " (" . $rec->{'me_nickname'} . ")" : ""),
  +            (defined $rec->{'me_nickname'} and $rec->{'me_nickname'} ne '' ? " (" . $rec->{'me_nickname'} . ")" : ""),
               $rec->{'me_address'});
       }
   
  @@ -318,7 +318,7 @@
       #   log action
       $self->logbook("heartbeat received for %s%s <%s>",
           $rec->{'me_name'},
  -        (defined $rec->{'me_nickname'} ? " (" . $rec->{'me_nickname'} . ")" : ""),
  +        (defined $rec->{'me_nickname'} and $rec->{'me_nickname'} ne '' ? " (" . $rec->{'me_nickname'} . ")" : ""),
           $rec->{'me_address'});
   
       #   display thanks
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.45 -r1.46 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	6 Apr 2007 14:51:36 -0000	1.45
  +++ ossp-pkg/ase/ase.cgi.login.pl	6 Apr 2007 20:37:35 -0000	1.46
  @@ -297,7 +297,7 @@
           #   login the user by remembering his UUID in the session
           $session->param("login", $rec->{"me_uuid"});
           $self->logbook("login by %s%s <%s>",
  -            $rec->{'me_name'}, (defined $rec->{'me_nickname'} ? " (" . $rec->{'me_nickname'} . ")" : ""), $rec->{'me_address'}); 
  +            $rec->{'me_name'}, (defined $rec->{'me_nickname'} and $rec->{'me_nickname'} ne '' ? " (" . $rec->{'me_nickname'} . ")" : ""), $rec->{'me_address'}); 
   
           #   perform login: either go to menu or redirect to external return URL
           if (defined(my $url = $session->param("after_login"))) {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.logout.pl
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 ase.cgi.logout.pl
  --- ossp-pkg/ase/ase.cgi.logout.pl	6 Apr 2007 14:51:36 -0000	1.17
  +++ ossp-pkg/ase/ase.cgi.logout.pl	6 Apr 2007 20:37:36 -0000	1.18
  @@ -76,7 +76,7 @@
       #   log action
       $self->logbook("logout by %s%s <%s>",
           $rec->{'me_name'},
  -        (defined $rec->{'me_nickname'} ? " (" . $rec->{'me_nickname'} . ")" : ""),
  +        (defined $rec->{'me_nickname'} and $rec->{'me_nickname'} ne '' ? " (" . $rec->{'me_nickname'} . ")" : ""),
           $rec->{'me_address'});
   
       #   optionally redirect to external return URL
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.recover.pl
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 ase.cgi.recover.pl
  --- ossp-pkg/ase/ase.cgi.recover.pl	6 Apr 2007 13:44:39 -0000	1.23
  +++ ossp-pkg/ase/ase.cgi.recover.pl	6 Apr 2007 20:37:36 -0000	1.24
  @@ -339,9 +339,9 @@
               "</a>\n";
   
           #   log action
  -        $self->logbook("recovery started for %s %s<%s>",
  +        $self->logbook("recovery started for %s%s <%s>",
               $rec->{'me_name'},
  -            (defined $rec->{'me_nickname'} ? " (" . $rec->{'me_nickname'} . ")" : ""),
  +            (defined $rec->{'me_nickname'} and $rec->{'me_nickname'} ne '' ? " (" . $rec->{'me_nickname'} . ")" : ""),
               $rec->{'me_address'});
       }
       elsif ($step eq "3") {
  @@ -654,9 +654,9 @@
               "</a>\n";
   
           #   log action
  -        $self->logbook("recovery finished for %s %s<%s>",
  +        $self->logbook("recovery finished for %s%s <%s>",
               $rec->{'me_name'},
  -            (defined $rec->{'me_nickname'} ? " (" . $rec->{'me_nickname'} . ")" : ""),
  +            (defined $rec->{'me_nickname'} and $rec->{'me_nickname'} ne '' ? " (" . $rec->{'me_nickname'} . ")" : ""),
               $rec->{'me_address'});
       }
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.resign.pl
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 ase.cgi.resign.pl
  --- ossp-pkg/ase/ase.cgi.resign.pl	6 Apr 2007 14:51:36 -0000	1.11
  +++ ossp-pkg/ase/ase.cgi.resign.pl	6 Apr 2007 20:37:36 -0000	1.12
  @@ -173,7 +173,7 @@
           }
   
           #   log action
  -        $self->logbook("resign by %s%s <%s>", $rec->{'me_name'}, (defined $rec->{'me_nickname'} ? " (" . $rec->{'me_nickname'} . ")" : ""), $rec->{'me_address'}); 
  +        $self->logbook("resign by %s%s <%s>", $rec->{'me_name'}, (defined $rec->{'me_nickname'} and $rec->{'me_nickname'} ne '' ? " (" . $rec->{'me_nickname'} . ")" : ""), $rec->{'me_address'}); 
   
           #   delete account
           $dbi->query(q{
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr  6 22:45:11 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 16D6175290B; Fri,  6 Apr 2007 22:45:11 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.main.pl
Message-Id: <20070406204511.16D6175290B@mail.ossp.org>
Date: Fri,  6 Apr 2007 22:45:11 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Apr-2007 22:45:11
  Branch: HEAD                             Handle: 2007040621451000

  Modified files:
    ossp-pkg/ase            ase.cgi.main.pl

  Log:
    fix XHTML

  Summary:
    Revision    Changes     Path
    1.44        +2  -2      ossp-pkg/ase/ase.cgi.main.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.43 -r1.44 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	5 Apr 2007 10:34:52 -0000	1.43
  +++ ossp-pkg/ase/ase.cgi.main.pl	6 Apr 2007 20:45:10 -0000	1.44
  @@ -173,10 +173,10 @@
           $html .= "<link rel=\"stylesheet\" type=\"text/css\"" .
                    " href=\"".$self->url(-mode => "loader", -name => "ase.ui.css")."\"/>\n";
           $html .= "<script type=\"text/javascript\"" .
  -                 " src=\"".$self->url(-mode => "loader", -name => "ase.ui.jquery.js")."\"/>" .
  +                 " src=\"".$self->url(-mode => "loader", -name => "ase.ui.jquery.js")."\">" .
                    "</script>\n";
           $html .= "<script type=\"text/javascript\"" .
  -                 " src=\"".$self->url(-mode => "loader", -name => "ase.ui.jscrypto.js")."\"/>" .
  +                 " src=\"".$self->url(-mode => "loader", -name => "ase.ui.jscrypto.js")."\">" .
                    "</script>\n";
           $html->undivert();
           $html->divert("body");
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr  6 22:46:34 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id E5DD475306F; Fri,  6 Apr 2007 22:46:33 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ChangeLog README VERSION ase.cgi ase.cli
Message-Id: <20070406204633.E5DD475306F@mail.ossp.org>
Date: Fri,  6 Apr 2007 22:46:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Apr-2007 22:46:33
  Branch: HEAD                             Handle: 2007040621463300

  Modified files:
    ossp-pkg/ase            ChangeLog README VERSION ase.cgi ase.cli

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.27        +2  -2      ossp-pkg/ase/ChangeLog
    1.9         +1  -1      ossp-pkg/ase/README
    1.5         +1  -1      ossp-pkg/ase/VERSION
    1.24        +1  -1      ossp-pkg/ase/ase.cgi
    1.5         +1  -1      ossp-pkg/ase/ase.cli
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 ChangeLog
  --- ossp-pkg/ase/ChangeLog	6 Apr 2007 14:51:36 -0000	1.26
  +++ ossp-pkg/ase/ChangeLog	6 Apr 2007 20:46:33 -0000	1.27
  @@ -11,7 +11,7 @@
     This is a list of all changes to OSSP ase.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 0.2.0 and 0.2.1 (07-Apr-2007 to xx-Apr-2007)
  +  Changes between 0.2.0 and 0.2.1 (06-Apr-2007 to 06-Apr-2007)
   
      o Fix style sheet for situation under OpenPKG meta.
        [Ralf S. Engelschall]
  @@ -19,7 +19,7 @@
      o Fix style of logbook entries.
        [Ralf S. Engelschall]
   
  -  Changes between 0.1.x and 0.2.0 (xx-Oct-2005 to 07-Apr-2007)
  +  Changes between 0.1.x and 0.2.0 (xx-Oct-2005 to 06-Apr-2007)
   
      o Add tooltips to Login, Enrollment, Recovery and Profile workflow.
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/README
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 README
  --- ossp-pkg/ase/README	6 Apr 2007 13:46:34 -0000	1.8
  +++ ossp-pkg/ase/README	6 Apr 2007 20:46:33 -0000	1.9
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     \___/|___/\___| 
   
     OSSP ase - Affiliation Service Environment
  -  Version 0.2.0 (06-Apr-2007)
  +  Version 0.2.1 (06-Apr-2007)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/VERSION
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 VERSION
  --- ossp-pkg/ase/VERSION	6 Apr 2007 13:46:34 -0000	1.4
  +++ ossp-pkg/ase/VERSION	6 Apr 2007 20:46:33 -0000	1.5
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP ase (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP ase, Version 0.2.0 (06-Apr-2007)
  +  This is OSSP ase, Version 0.2.1 (06-Apr-2007)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 ase.cgi
  --- ossp-pkg/ase/ase.cgi	6 Apr 2007 13:46:34 -0000	1.23
  +++ ossp-pkg/ase/ase.cgi	6 Apr 2007 20:46:33 -0000	1.24
  @@ -34,7 +34,7 @@
   our $cfg = {
       -prog_name   => 'OSSP ase',
       -prog_desc   => 'Affiliation Service Environment',
  -    -prog_vers   => '0.2.0',
  +    -prog_vers   => '0.2.1',
       -prog_date   => '06-Apr-2007',
       -path_cfgdir => '.',
       -path_libdir => '.',
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cli
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ase.cli
  --- ossp-pkg/ase/ase.cli	6 Apr 2007 13:46:34 -0000	1.4
  +++ ossp-pkg/ase/ase.cli	6 Apr 2007 20:46:33 -0000	1.5
  @@ -34,7 +34,7 @@
   our $cfg = {
       -prog_name   => 'OSSP ase',
       -prog_desc   => 'Affiliation Service Environment',
  -    -prog_vers   => '0.2.0',
  +    -prog_vers   => '0.2.1',
       -prog_date   => '06-Apr-2007',
       -path_cfgdir => '.',
       -path_libdir => '.',
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr  6 22:48:24 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 319B9753018; Fri,  6 Apr 2007 22:48:24 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/tool/ase/ index.wml os...
Message-Id: <20070406204824.319B9753018@mail.ossp.org>
Date: Fri,  6 Apr 2007 22:48:24 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   06-Apr-2007 22:48:24
  Branch: HEAD                             Handle: 2007040621482102

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/ase   index.wml

  Log:
    release OSSP ase 0.2.1

  Summary:
    Revision    Changes     Path
    1.168       +1  -0      ossp-web/new/news.txt
    1.3         +2  -2      ossp-web/pkg/tool/ase/index.wml
    1.61        +1  -1      ossp-web/pkg/tool/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.167 -r1.168 news.txt
  --- ossp-web/new/news.txt	6 Apr 2007 13:56:00 -0000	1.167
  +++ ossp-web/new/news.txt	6 Apr 2007 20:48:21 -0000	1.168
  @@ -1,3 +1,4 @@
  +06-Apr-2007: Released T<OSSP ase> 0.2.1
   06-Apr-2007: Released T<OSSP ase> 0.2.0
   01-Mar-2007: Released T<OSSP snmpdx> 1.0.0
   08-Feb-2007: Released L<OSSP js> 1.6.20070208
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/ase/index.wml
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 index.wml
  --- ossp-web/pkg/tool/ase/index.wml	6 Apr 2007 13:56:53 -0000	1.2
  +++ ossp-web/pkg/tool/ase/index.wml	6 Apr 2007 20:48:23 -0000	1.3
  @@ -21,7 +21,7 @@
   
   <pkg_status
       stable="none" stable_date="none"
  -    unstable="0.2.0" unstable_date="06-Apr-2007"
  +    unstable="0.2.1" unstable_date="06-Apr-2007"
   	done=100>
   
   <h2>Source</h2>
  @@ -31,7 +31,7 @@
       url=$(FTP_ROOT_URL)/pkg/tool/ase/
       directory=$(FTP_ROOT_DIR)/pkg/tool/ase/
       files="ase-*.tar.gz" 
  -	stable="ase-0.2.0.tar.gz" unstable="none">
  +	stable="ase-0.2.1.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.60 -r1.61 index.wml
  --- ossp-web/pkg/tool/index.wml	6 Apr 2007 13:56:53 -0000	1.60
  +++ ossp-web/pkg/tool/index.wml	6 Apr 2007 20:48:21 -0000	1.61
  @@ -38,7 +38,7 @@
   	        done=90 stable="none" unstable="0.9.0">
     <pkg_item name="ase" longname="OSSP ase" type="tool"
               desc="Affiliation Services Environment"
  -		    done=100 stable="none" unstable="0.2.0">
  +		    done=95 stable="none" unstable="0.2.1">
     <pkg_item name="xenia" longname="OSSP xenia" type="tool"
               desc="CVS Browsing Server"
   	        done=20 stable="none" unstable="none">
  @@ .

From ossp-cvs-owner@ossp.org  Mon Apr  9 20:16:18 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id E239275307B; Mon,  9 Apr 2007 20:16:17 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ChangeLog ase.cgi.enroll.pl ase.cgi.login.pl
Message-Id: <20070409181617.E239275307B@mail.ossp.org>
Date: Mon,  9 Apr 2007 20:16:17 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Apr-2007 20:16:17
  Branch: HEAD                             Handle: 2007040919161601

  Modified files:
    ossp-pkg/ase            ChangeLog ase.cgi.enroll.pl ase.cgi.login.pl

  Log:
    Use <![CDATA[ ... ]]> sections to enclose embedded JavaScript code
    to allow generated XHTML to pass strict validation.

  Summary:
    Revision    Changes     Path
    1.28        +4  -0      ossp-pkg/ase/ChangeLog
    1.54        +2  -0      ossp-pkg/ase/ase.cgi.enroll.pl
    1.47        +2  -0      ossp-pkg/ase/ase.cgi.login.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 ChangeLog
  --- ossp-pkg/ase/ChangeLog	6 Apr 2007 20:46:33 -0000	1.27
  +++ ossp-pkg/ase/ChangeLog	9 Apr 2007 18:16:16 -0000	1.28
  @@ -13,6 +13,10 @@
   
     Changes between 0.2.0 and 0.2.1 (06-Apr-2007 to 06-Apr-2007)
   
  +   o Use <![CDATA[ ... ]]> sections to enclose embedded JavaScript code
  +     to allow generated XHTML to pass strict validation.
  +     [Ralf S. Engelschall]
  +
      o Fix style sheet for situation under OpenPKG meta.
        [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.53 -r1.54 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	6 Apr 2007 20:37:35 -0000	1.53
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	9 Apr 2007 18:16:17 -0000	1.54
  @@ -321,7 +321,9 @@
   
           #   add (optional) client-side user-interface behaviours
           $html .= "<script type=\"text/javascript\">\n";
  +        $html .= "  /* <![CDATA[ */\n";
           $html->fold();
  +        $html .= "  /* ]]> */\n";
           $html .= "</script>";
           $html->divert();
           $html .= q{
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.46 -r1.47 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	6 Apr 2007 20:37:35 -0000	1.46
  +++ ossp-pkg/ase/ase.cgi.login.pl	9 Apr 2007 18:16:17 -0000	1.47
  @@ -200,7 +200,9 @@
   
           #   add (optional) client-side user-interface behaviours
           $html .= "<script type=\"text/javascript\">\n";
  +        $html .= "  /* <![CDATA[ */\n";
           $html->fold();
  +        $html .= "  /* ]]> */\n";
           $html .= "</script>";
           $html->divert();
           $html .= q{
  @@ .

From ossp-cvs-owner@ossp.org  Mon Apr  9 20:17:46 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 92FE175307B; Mon,  9 Apr 2007 20:17:46 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.enroll.pl ase.cgi.recover.pl
Message-Id: <20070409181746.92FE175307B@mail.ossp.org>
Date: Mon,  9 Apr 2007 20:17:46 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   09-Apr-2007 20:17:46
  Branch: HEAD                             Handle: 2007040919174600

  Modified files:
    ossp-pkg/ase            ase.cgi.enroll.pl ase.cgi.recover.pl

  Log:
    be more strict XHTML

  Summary:
    Revision    Changes     Path
    1.55        +1  -1      ossp-pkg/ase/ase.cgi.enroll.pl
    1.25        +2  -2      ossp-pkg/ase/ase.cgi.recover.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.54 -r1.55 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	9 Apr 2007 18:16:17 -0000	1.54
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	9 Apr 2007 18:17:46 -0000	1.55
  @@ -265,7 +265,7 @@
           }
           $html << 1;
           $html >> "field-scode";
  -        $html .= "<img align=top src=\"".$self->url(-mode => 'scode', -uuid => $scode_uuid)."\"> :\n";
  +        $html .= "<img align=top src=\"".$self->url(-mode => 'scode', -uuid => $scode_uuid)."\"/> :\n";
           $title = $self->streamline(q{
                Security Code Field ::
                To prevent robots to submit this form and this way cause
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.recover.pl
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 ase.cgi.recover.pl
  --- ossp-pkg/ase/ase.cgi.recover.pl	6 Apr 2007 20:37:36 -0000	1.24
  +++ ossp-pkg/ase/ase.cgi.recover.pl	9 Apr 2007 18:17:46 -0000	1.25
  @@ -148,7 +148,7 @@
           #   generate the input field: "security code"
           $html >> "field-scode";
           my $scode_uuid = ($cgi->param("scode.uuid") || $self->scode_create());
  -        $html .= "<img align=top src=\"".$self->url(-mode => 'scode', -uuid => $scode_uuid)."\"> :\n";
  +        $html .= "<img align=top src=\"".$self->url(-mode => 'scode', -uuid => $scode_uuid)."\"/> :\n";
           $html .= $cgi->hidden(
               -name     => 'scode.uuid',
               -value    => $scode_uuid,
  @@ -481,7 +481,7 @@
           #   generate the input field: "security code"
           $html >> "field-scode";
           my $scode_uuid = ($cgi->param("scode.uuid") || $self->scode_create());
  -        $html .= "<img align=top src=\"".$self->url(-mode => 'scode', -uuid => $scode_uuid)."\"> :\n";
  +        $html .= "<img align=top src=\"".$self->url(-mode => 'scode', -uuid => $scode_uuid)."\"/> :\n";
           $html .= $cgi->hidden(
               -name     => 'scode.uuid',
               -value    => $scode_uuid,
  @@ .

From ossp-cvs-owner@ossp.org  Tue Apr 10 18:48:37 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 39573752F72; Tue, 10 Apr 2007 18:48:36 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.login.pl
Message-Id: <20070410164836.39573752F72@mail.ossp.org>
Date: Tue, 10 Apr 2007 18:48:36 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Apr-2007 18:48:36
  Branch: HEAD                             Handle: 2007041017483500

  Modified files:
    ossp-pkg/ase            ase.cgi.login.pl

  Log:
    fix comment

  Summary:
    Revision    Changes     Path
    1.48        +1  -1      ossp-pkg/ase/ase.cgi.login.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.47 -r1.48 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	9 Apr 2007 18:16:17 -0000	1.47
  +++ ossp-pkg/ase/ase.cgi.login.pl	10 Apr 2007 16:48:35 -0000	1.48
  @@ -271,7 +271,7 @@
       }
       elsif ($step eq "2") {
           ##
  -        ##  STEP 2: SEND ENROLLMENT UUID TO EMAIL ADDRESS
  +        ##  STEP 2: AUTHENTICATE LOGIN
           ##
   
           if (not defined($cgi->param("button.login"))) {
  @@ .

From ossp-cvs-owner@ossp.org  Tue Apr 10 21:49:33 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id EDE2B752934; Tue, 10 Apr 2007 21:49:32 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ChangeLog ase.cgi.main.pl ase.cgi.util.pl sa...
Message-Id: <20070410194932.EDE2B752934@mail.ossp.org>
Date: Tue, 10 Apr 2007 21:49:32 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Apr-2007 21:49:32
  Branch: HEAD                             Handle: 2007041020493101

  Modified files:
    ossp-pkg/ase            ChangeLog ase.cgi.main.pl ase.cgi.util.pl
                            sample.cgi

  Log:
    Fix IO::All usage under newer versions of IO::All (>= 0.37)
    where IO::All::io() has to be called without package prefix.

  Summary:
    Revision    Changes     Path
    1.29        +6  -0      ossp-pkg/ase/ChangeLog
    1.45        +2  -1      ossp-pkg/ase/ase.cgi.main.pl
    1.31        +2  -1      ossp-pkg/ase/ase.cgi.util.pl
    1.18        +1  -1      ossp-pkg/ase/sample.cgi
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 ChangeLog
  --- ossp-pkg/ase/ChangeLog	9 Apr 2007 18:16:16 -0000	1.28
  +++ ossp-pkg/ase/ChangeLog	10 Apr 2007 19:49:31 -0000	1.29
  @@ -11,6 +11,12 @@
     This is a list of all changes to OSSP ase.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 0.2.1 and 0.2.2 (06-Apr-2007 to 10-Apr-2007)
  +
  +   o Fix IO::All usage under newer versions of IO::All (>= 0.37)
  +     where IO::All::io() has to be called without package prefix.
  +     [Ralf S. Engelschall]
  +
     Changes between 0.2.0 and 0.2.1 (06-Apr-2007 to 06-Apr-2007)
   
      o Use <![CDATA[ ... ]]> sections to enclose embedded JavaScript code
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.44 -r1.45 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	6 Apr 2007 20:45:10 -0000	1.44
  +++ ossp-pkg/ase/ase.cgi.main.pl	10 Apr 2007 19:49:32 -0000	1.45
  @@ -46,7 +46,8 @@
               requirement-realname requirement-nickname requirement-password
               notice-enrollment notice-resign
           ));
  -        my $txt < IO::All::io($cfgfile)
  +        $self->use("IO::All");
  +        my $txt < io($cfgfile)
               or die "unable to read configuration file \"$cfgfile\"";
           my $engine = new OSSP::cfg::simple;
           $engine->parse($txt);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.util.pl
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 ase.cgi.util.pl
  --- ossp-pkg/ase/ase.cgi.util.pl	5 Apr 2007 15:22:56 -0000	1.30
  +++ ossp-pkg/ase/ase.cgi.util.pl	10 Apr 2007 19:49:32 -0000	1.31
  @@ -36,6 +36,7 @@
       #   load module
       foreach my $module (@modules) {
           Class::Autouse->load($module);
  +        import $module;
       }
       return;
   }
  @@ -140,7 +141,7 @@
           my $filename = $cfg->{-path_datdir}."/".$url;
           die "file \"$filename\" not found" if (not -f $filename);
           $self->use("IO::All");
  -        $content < IO::All::io($filename)
  +        $content < io($filename)
               or die "unable to load file \"$filename\"";
           if    ($url =~ m|\.html$|)  { $type = "text/html";       $expires = "+1m"; }
           elsif ($url =~ m|\.css$|)   { $type = "text/css";        $expires = "+1m"; }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/sample.cgi
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 sample.cgi
  --- ossp-pkg/ase/sample.cgi	30 Mar 2007 09:48:17 -0000	1.17
  +++ ossp-pkg/ase/sample.cgi	10 Apr 2007 19:49:32 -0000	1.18
  @@ -87,7 +87,7 @@
   #   establish HTML output object
   my $html = new String::Divert or die "$!";
   $html->folder('{#%s#}', '\{#([a-zA-Z_][a-zA-Z0-9_-]*)#\}');
  -my $txt < IO::All::io("sample.html")
  +my $txt < io("sample.html")
       or die "unable to read HTML skeleton file \"sample.html"."\"";
   $txt =~ s/<!-- HEAD -->/$html->folder("head")/se;
   $txt =~ s/<!-- BODY -->/"<div class=\"sample\">\n".$html->folder("body")."<\/div>\n"/se;
  @@ .

From ossp-cvs-owner@ossp.org  Tue Apr 10 21:50:00 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id BE853752934; Tue, 10 Apr 2007 21:50:00 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ChangeLog
Message-Id: <20070410195000.BE853752934@mail.ossp.org>
Date: Tue, 10 Apr 2007 21:50:00 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Apr-2007 21:50:00
  Branch: HEAD                             Handle: 2007041020500000

  Modified files:
    ossp-pkg/ase            ChangeLog

  Log:
    fix ChangeLog

  Summary:
    Revision    Changes     Path
    1.30        +2  -2      ossp-pkg/ase/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 ChangeLog
  --- ossp-pkg/ase/ChangeLog	10 Apr 2007 19:49:31 -0000	1.29
  +++ ossp-pkg/ase/ChangeLog	10 Apr 2007 19:50:00 -0000	1.30
  @@ -17,12 +17,12 @@
        where IO::All::io() has to be called without package prefix.
        [Ralf S. Engelschall]
   
  -  Changes between 0.2.0 and 0.2.1 (06-Apr-2007 to 06-Apr-2007)
  -
      o Use <![CDATA[ ... ]]> sections to enclose embedded JavaScript code
        to allow generated XHTML to pass strict validation.
        [Ralf S. Engelschall]
   
  +  Changes between 0.2.0 and 0.2.1 (06-Apr-2007 to 06-Apr-2007)
  +
      o Fix style sheet for situation under OpenPKG meta.
        [Ralf S. Engelschall]
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr 11 13:38:13 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id CC9AD752FB8; Wed, 11 Apr 2007 13:38:12 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO
Message-Id: <20070411113812.CC9AD752FB8@mail.ossp.org>
Date: Wed, 11 Apr 2007 13:38:12 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Apr-2007 13:38:12
  Branch: HEAD                             Handle: 2007041112381200

  Modified files:
    ossp-pkg/ase            TODO

  Log:
    remember new todo items

  Summary:
    Revision    Changes     Path
    1.56        +9  -0      ossp-pkg/ase/TODO
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.55 -r1.56 TODO
  --- ossp-pkg/ase/TODO	5 Apr 2007 10:39:29 -0000	1.55
  +++ ossp-pkg/ase/TODO	11 Apr 2007 11:38:12 -0000	1.56
  @@ -9,3 +9,12 @@
     TODO
     ====
   
  +  - ASE remote database dumping
  +    - ase.cfg: pre-shared secret
  +    - "dump" RPC with uuid, name, nickname, address, pw1, pw2, pw3, pw4, etc.
  +    - ase.api.pm
  +      $result = $ase->dump($key[, $uuid, ...]);
  +      ERROR:    $result = undefined
  +      DELETED:  $result = {}
  +      EXISTING: $result = { $uuid => {"Client-Attr" => ..., "..." => ...} }
  +
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr 11 13:39:44 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 963BE752FC2; Wed, 11 Apr 2007 13:39:44 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.util.pl
Message-Id: <20070411113944.963BE752FC2@mail.ossp.org>
Date: Wed, 11 Apr 2007 13:39:44 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Apr-2007 13:39:44
  Branch: HEAD                             Handle: 2007041112394400

  Modified files:
    ossp-pkg/ase            ase.cgi.util.pl

  Log:
    full qualification should be no longer required because of the
    recently introduced 'import' in 'use'

  Summary:
    Revision    Changes     Path
    1.32        +2  -2      ossp-pkg/ase/ase.cgi.util.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.util.pl
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 ase.cgi.util.pl
  --- ossp-pkg/ase/ase.cgi.util.pl	10 Apr 2007 19:49:32 -0000	1.31
  +++ ossp-pkg/ase/ase.cgi.util.pl	11 Apr 2007 11:39:44 -0000	1.32
  @@ -94,8 +94,8 @@
           $var =~ s/^-//s;
           $var =~ s/-/_/sg;
           $url .= ($first ? "?" : ";") . 
  -            URI::Escape::uri_escape($var) . "=" .
  -            URI::Escape::uri_escape($val);
  +            uri_escape($var) . "=" .
  +            uri_escape($val);
           $first = 0;
       }
       return $url;
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr 11 18:18:15 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id BF9C37529F2; Wed, 11 Apr 2007 18:18:14 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.enroll.pl ase.cgi.recover.pl
Message-Id: <20070411161814.BF9C37529F2@mail.ossp.org>
Date: Wed, 11 Apr 2007 18:18:14 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Apr-2007 18:18:14
  Branch: HEAD                             Handle: 2007041117181301

  Modified files:
    ossp-pkg/ase            ase.cgi.enroll.pl ase.cgi.recover.pl

  Log:
    fix more XHTML stuff

  Summary:
    Revision    Changes     Path
    1.56        +1  -1      ossp-pkg/ase/ase.cgi.enroll.pl
    1.26        +2  -2      ossp-pkg/ase/ase.cgi.recover.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.55 -r1.56 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	9 Apr 2007 18:17:46 -0000	1.55
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	11 Apr 2007 16:18:13 -0000	1.56
  @@ -265,7 +265,7 @@
           }
           $html << 1;
           $html >> "field-scode";
  -        $html .= "<img align=top src=\"".$self->url(-mode => 'scode', -uuid => $scode_uuid)."\"/> :\n";
  +        $html .= "<img align=\"top\" src=\"".$self->url(-mode => 'scode', -uuid => $scode_uuid)."\"/> :\n";
           $title = $self->streamline(q{
                Security Code Field ::
                To prevent robots to submit this form and this way cause
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.recover.pl
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 ase.cgi.recover.pl
  --- ossp-pkg/ase/ase.cgi.recover.pl	9 Apr 2007 18:17:46 -0000	1.25
  +++ ossp-pkg/ase/ase.cgi.recover.pl	11 Apr 2007 16:18:14 -0000	1.26
  @@ -148,7 +148,7 @@
           #   generate the input field: "security code"
           $html >> "field-scode";
           my $scode_uuid = ($cgi->param("scode.uuid") || $self->scode_create());
  -        $html .= "<img align=top src=\"".$self->url(-mode => 'scode', -uuid => $scode_uuid)."\"/> :\n";
  +        $html .= "<img align=\"top\" src=\"".$self->url(-mode => 'scode', -uuid => $scode_uuid)."\"/> :\n";
           $html .= $cgi->hidden(
               -name     => 'scode.uuid',
               -value    => $scode_uuid,
  @@ -481,7 +481,7 @@
           #   generate the input field: "security code"
           $html >> "field-scode";
           my $scode_uuid = ($cgi->param("scode.uuid") || $self->scode_create());
  -        $html .= "<img align=top src=\"".$self->url(-mode => 'scode', -uuid => $scode_uuid)."\"/> :\n";
  +        $html .= "<img align=\"top\" src=\"".$self->url(-mode => 'scode', -uuid => $scode_uuid)."\"/> :\n";
           $html .= $cgi->hidden(
               -name     => 'scode.uuid',
               -value    => $scode_uuid,
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr 11 18:18:50 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id A3BF875290B; Wed, 11 Apr 2007 18:18:50 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.logout.pl
Message-Id: <20070411161850.A3BF875290B@mail.ossp.org>
Date: Wed, 11 Apr 2007 18:18:50 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Apr-2007 18:18:50
  Branch: HEAD                             Handle: 2007041117185000

  Modified files:
    ossp-pkg/ase            ase.cgi.logout.pl

  Log:
    fix more XHTML stuff

  Summary:
    Revision    Changes     Path
    1.19        +1  -1      ossp-pkg/ase/ase.cgi.logout.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.logout.pl
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 ase.cgi.logout.pl
  --- ossp-pkg/ase/ase.cgi.logout.pl	6 Apr 2007 20:37:36 -0000	1.18
  +++ ossp-pkg/ase/ase.cgi.logout.pl	11 Apr 2007 16:18:50 -0000	1.19
  @@ -55,7 +55,7 @@
   
       #   generate description
       $html .=
  -        "Thank you for visiting " . $cfg->{-cfg}->{"service-name"} . ".</br>\n" .
  +        "Thank you for visiting " . $cfg->{-cfg}->{"service-name"} . ".<br/>\n" .
           "Your session was terminated and you are now logged out.<br/>\n" .
           "Please visit us again soon.";
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr 11 18:19:16 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 7ED22752FB8; Wed, 11 Apr 2007 18:19:16 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.util.pl
Message-Id: <20070411161916.7ED22752FB8@mail.ossp.org>
Date: Wed, 11 Apr 2007 18:19:16 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Apr-2007 18:19:16
  Branch: HEAD                             Handle: 2007041117191500

  Modified files:
    ossp-pkg/ase            ase.cgi.util.pl

  Log:
    support generation of fully qualified URLs

  Summary:
    Revision    Changes     Path
    1.33        +6  -1      ossp-pkg/ase/ase.cgi.util.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.util.pl
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 ase.cgi.util.pl
  --- ossp-pkg/ase/ase.cgi.util.pl	11 Apr 2007 11:39:44 -0000	1.32
  +++ ossp-pkg/ase/ase.cgi.util.pl	11 Apr 2007 16:19:15 -0000	1.33
  @@ -83,7 +83,12 @@
   sub url {
       my ($self, %attr) = @_;
       $self->use("URI::Escape");
  -    my $url = $self->param(-cgi)->url(-relative => 1);
  +    my $url = (
  +          $attr{-fullyqualified} eq 'yes'
  +        ? $self->param(-cgi)->url(-full => 1) 
  +        : $self->param(-cgi)->url(-relative => 1)
  +    );
  +    delete $attr{-fullyqualified};
       $url = "." if ($url eq '');
       my $first = 1;
       my @keys = ();
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr 11 18:21:25 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 62A7B7528E7; Wed, 11 Apr 2007 18:21:25 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.enroll.pl ase.cgi.logout.pl ase.cgi....
Message-Id: <20070411162125.62A7B7528E7@mail.ossp.org>
Date: Wed, 11 Apr 2007 18:21:25 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Apr-2007 18:21:25
  Branch: HEAD                             Handle: 2007041117212401

  Modified files:
    ossp-pkg/ase            ase.cgi.enroll.pl ase.cgi.logout.pl
                            ase.cgi.recover.pl ase.cgi.resign.pl

  Log:
    use fully qualified URLs in redirections

  Summary:
    Revision    Changes     Path
    1.57        +1  -1      ossp-pkg/ase/ase.cgi.enroll.pl
    1.20        +1  -1      ossp-pkg/ase/ase.cgi.logout.pl
    1.27        +1  -1      ossp-pkg/ase/ase.cgi.recover.pl
    1.13        +1  -1      ossp-pkg/ase/ase.cgi.resign.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.56 -r1.57 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	11 Apr 2007 16:18:13 -0000	1.56
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	11 Apr 2007 16:21:24 -0000	1.57
  @@ -628,7 +628,7 @@
               <p/>
               <a class="button" href="%s">Go to <b>Login</b> screen</a>
           }, $cfg->{-cfg}->{"project-name"},
  -           $self->url(-mode => "login", -login => ($rec->{'en_nickname'} || $rec->{'en_address'})),
  +           $self->url(-mode => "login", -login => ($rec->{'en_nickname'} || $rec->{'en_address'}), -fullyqualified => "yes"),
              $self->url(-mode => "login", -login => ($rec->{'en_nickname'} || $rec->{'en_address'}))
           );
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.logout.pl
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 ase.cgi.logout.pl
  --- ossp-pkg/ase/ase.cgi.logout.pl	11 Apr 2007 16:18:50 -0000	1.19
  +++ ossp-pkg/ase/ase.cgi.logout.pl	11 Apr 2007 16:21:24 -0000	1.20
  @@ -64,7 +64,7 @@
           "<p/>\n" .
           "You should be redirected to the Login screen in 10 seconds automatically.\n" .
           "<meta http-equiv=\"refresh\" content=\"10;url=" .
  -        $self->url(-mode => "login", -login => ($rec->{'me_nickname'} || $rec->{'me_address'})) .
  +        $self->url(-mode => "login", -login => ($rec->{'me_nickname'} || $rec->{'me_address'}), -fullyqualified => "yes") .
           "\">\n" .
           "<p/>\n" .
           "<a class=\"button\" href=\"" . 
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.recover.pl
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 ase.cgi.recover.pl
  --- ossp-pkg/ase/ase.cgi.recover.pl	11 Apr 2007 16:18:14 -0000	1.26
  +++ ossp-pkg/ase/ase.cgi.recover.pl	11 Apr 2007 16:21:25 -0000	1.27
  @@ -644,7 +644,7 @@
               "You can now access your account again with your new password.<br/>\n" .
               "You should be redirected to the Login screen in 10 seconds automatically.<br/>\n" .
               "<meta http-equiv=\"refresh\" content=\"10;url=" .
  -            $self->url(-mode => "login", -login => ($rec->{'me_nickname'} || $rec->{'me_address'})) .
  +            $self->url(-mode => "login", -login => ($rec->{'me_nickname'} || $rec->{'me_address'}), -fullyqualified => "yes") .
               "\">\n" .
               "<p/>\n" .
               "<a class=\"button\" href=\"" . 
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.resign.pl
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 ase.cgi.resign.pl
  --- ossp-pkg/ase/ase.cgi.resign.pl	6 Apr 2007 20:37:36 -0000	1.12
  +++ ossp-pkg/ase/ase.cgi.resign.pl	11 Apr 2007 16:21:25 -0000	1.13
  @@ -195,7 +195,7 @@
               "Your account was deleted, your session was terminated and you are now logged out.<br/>\n" .
               "We would be happy to see you joining us again in the future.<br/>" .
               "You will be redirected to the Login screen in 10 seconds.\n" .
  -            "<meta http-equiv=\"refresh\" content=\"10;url=".$self->url(-mode => "login")."\">\n";
  +            "<meta http-equiv=\"refresh\" content=\"10;url=".$self->url(-mode => "login", -fullyqualified => "yes")."\">\n";
       }
       else {
           die "invalid step";
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr 11 18:27:37 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 59E017528E7; Wed, 11 Apr 2007 18:27:37 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ devtool.conf
Message-Id: <20070411162737.59E017528E7@mail.ossp.org>
Date: Wed, 11 Apr 2007 18:27:37 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Apr-2007 18:27:37
  Branch: HEAD                             Handle: 2007041117273700

  Modified files:
    ossp-pkg/ase            devtool.conf

  Log:
    support rolling snapshot versions

  Summary:
    Revision    Changes     Path
    1.6         +16 -0      ossp-pkg/ase/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 devtool.conf
  --- ossp-pkg/ase/devtool.conf	30 Mar 2007 10:17:52 -0000	1.5
  +++ ossp-pkg/ase/devtool.conf	11 Apr 2007 16:27:37 -0000	1.6
  @@ -49,6 +49,22 @@
       echo "[...]"
       gunzip <ase-${V}.tar.gz | tar tvf - | tail -10
   
  +%snap
  +    echo "+++ removing old tarballs"
  +    rm -f ase-*.tar.gz
  +    echo "+++ fixing"
  +    shtool fixperm -v .
  +    echo "+++ rolling"
  +    V="SNAP-`date '+%Y%m%d%H%M'`"
  +    shtool tarball -o ase-${V}.tar.gz -d ase-${V} -u ossp -g ossp \
  +                     -e 'CVS,\.cvsignore,\.[ao]$,^\.,devtool*,*.tar.gz,^#.*,.*~$,*.bak,*.log,*.db,00TODO,autom4te\.cache,^[0-9]\.*' \
  +                     -c 'gzip --best' .
  +    ls -l ase-${V}.tar.gz
  +    echo "+++ testing"
  +    gunzip <ase-${V}.tar.gz | tar tvf - | head -10
  +    echo "[...]"
  +    gunzip <ase-${V}.tar.gz | tar tvf - | tail -10
  +
   %upload
       echo "+++ copying to ftp://ftp.ossp.org/pkg/tool/ase/"
   	V=`shtool version -l txt -dshort VERSION`
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr 11 18:34:57 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 23CC875290A; Wed, 11 Apr 2007 18:34:57 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ Makefile
Message-Id: <20070411163457.23CC875290A@mail.ossp.org>
Date: Wed, 11 Apr 2007 18:34:57 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Apr-2007 18:34:57
  Branch: HEAD                             Handle: 2007041117345600

  Modified files:
    ossp-pkg/ase            Makefile

  Log:
    allow one to override the name

  Summary:
    Revision    Changes     Path
    1.9         +9  -7      ossp-pkg/ase/Makefile
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/Makefile
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 Makefile
  --- ossp-pkg/ase/Makefile	4 Apr 2007 13:03:08 -0000	1.8
  +++ ossp-pkg/ase/Makefile	11 Apr 2007 16:34:56 -0000	1.9
  @@ -1,12 +1,14 @@
   
   DESTDIR =
  +NAME    = ase
  +
   PREFIX  = /tmp/ase
   CGIDIR  = $(PREFIX)/cgi
   BINDIR  = $(PREFIX)/bin
  -CFGDIR  = $(PREFIX)/etc/ase
  -LIBDIR  = $(PREFIX)/lib/ase
  -VARDIR  = $(PREFIX)/var/ase
  -DATDIR  = $(PREFIX)/share/ase
  +CFGDIR  = $(PREFIX)/etc/$(NAME)
  +LIBDIR  = $(PREFIX)/lib/$(NAME)
  +VARDIR  = $(PREFIX)/var/$(NAME)
  +DATDIR  = $(PREFIX)/share/$(NAME)
   PERLDIR = `perl -V:installvendorlib | sed -e 's/^installvendorlib=.//' -e 's/.;$$//'`
   
   SHTOOL  = ./shtool
  @@ -26,8 +28,8 @@
   install: install-client install-server
   
   install-client:
  -	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(PERLDIR)/OSSP/ase
  -	$(SHTOOL) install -c -m 644 ase.api.pm $(DESTDIR)$(PERLDIR)/OSSP/ase/client.pm
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(PERLDIR)/OSSP/$(NAME)
  +	$(SHTOOL) install -c -m 644 ase.api.pm $(DESTDIR)$(PERLDIR)/OSSP/$(NAME)/client.pm
   
   install-server:
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(BINDIR)
  @@ -37,7 +39,7 @@
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(DATDIR)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(VARDIR)
   	$(SHTOOL) install -c -m 755 $(SUBST) ase.cgi $(DESTDIR)$(CGIDIR)/
  -	$(SHTOOL) install -c -m 755 $(SUBST) ase.cli $(DESTDIR)$(BINDIR)/ase
  +	$(SHTOOL) install -c -m 755 $(SUBST) ase.cli $(DESTDIR)$(BINDIR)/$(NAME)
   	$(SHTOOL) install -c -m 644 ase.cgi.* $(DESTDIR)$(LIBDIR)/
   	$(SHTOOL) install -c -m 644 ase.cli.* $(DESTDIR)$(LIBDIR)/
   	$(SHTOOL) install -c -m 644 ase.cfg $(DESTDIR)$(CFGDIR)/
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr 11 19:34:33 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id BB1EA75290A; Wed, 11 Apr 2007 19:34:33 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ Makefile
Message-Id: <20070411173433.BB1EA75290A@mail.ossp.org>
Date: Wed, 11 Apr 2007 19:34:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Apr-2007 19:34:33
  Branch: HEAD                             Handle: 2007041118343300

  Modified files:
    ossp-pkg/ase            Makefile

  Log:
    allow CGI name to be overrridden, too

  Summary:
    Revision    Changes     Path
    1.10        +1  -1      ossp-pkg/ase/Makefile
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/Makefile
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 Makefile
  --- ossp-pkg/ase/Makefile	11 Apr 2007 16:34:56 -0000	1.9
  +++ ossp-pkg/ase/Makefile	11 Apr 2007 17:34:33 -0000	1.10
  @@ -38,7 +38,7 @@
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(LIBDIR)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(DATDIR)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(VARDIR)
  -	$(SHTOOL) install -c -m 755 $(SUBST) ase.cgi $(DESTDIR)$(CGIDIR)/
  +	$(SHTOOL) install -c -m 755 $(SUBST) ase.cgi $(DESTDIR)$(CGIDIR)/$(NAME).cgi
   	$(SHTOOL) install -c -m 755 $(SUBST) ase.cli $(DESTDIR)$(BINDIR)/$(NAME)
   	$(SHTOOL) install -c -m 644 ase.cgi.* $(DESTDIR)$(LIBDIR)/
   	$(SHTOOL) install -c -m 644 ase.cli.* $(DESTDIR)$(LIBDIR)/
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr 11 19:48:31 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 8AB1A752FB8; Wed, 11 Apr 2007 19:48:31 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.enroll.pl
Message-Id: <20070411174831.8AB1A752FB8@mail.ossp.org>
Date: Wed, 11 Apr 2007 19:48:31 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   11-Apr-2007 19:48:31
  Branch: HEAD                             Handle: 2007041118483100

  Modified files:
    ossp-pkg/ase            ase.cgi.enroll.pl

  Log:
    remove doubled header

  Summary:
    Revision    Changes     Path
    1.58        +0  -1      ossp-pkg/ase/ase.cgi.enroll.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.57 -r1.58 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	11 Apr 2007 16:21:24 -0000	1.57
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	11 Apr 2007 17:48:31 -0000	1.58
  @@ -577,7 +577,6 @@
           }, $uuid)->hash();
           if (not defined($rec)) {
               $html .= $self->unindent(q{
  -                <h1>Account Enrollment</h1>
                   <h3 class="error">ERROR: ACTIVATION FAILED</h3>
                   Sorry, no enrollment information found under UUID
                   %s. Either you waited too long for activating (the
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr 12 15:33:45 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 459EB75300D; Thu, 12 Apr 2007 15:33:44 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ Makefile
Message-Id: <20070412133344.459EB75300D@mail.ossp.org>
Date: Thu, 12 Apr 2007 15:33:44 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Apr-2007 15:33:44
  Branch: HEAD                             Handle: 2007041214334300

  Modified files:
    ossp-pkg/ase            Makefile

  Log:
    change shebang on installation

  Summary:
    Revision    Changes     Path
    1.11        +3  -1      ossp-pkg/ase/Makefile
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/Makefile
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 Makefile
  --- ossp-pkg/ase/Makefile	11 Apr 2007 17:34:33 -0000	1.10
  +++ ossp-pkg/ase/Makefile	12 Apr 2007 13:33:43 -0000	1.11
  @@ -9,13 +9,15 @@
   LIBDIR  = $(PREFIX)/lib/$(NAME)
   VARDIR  = $(PREFIX)/var/$(NAME)
   DATDIR  = $(PREFIX)/share/$(NAME)
  +PERLEXE = $(PREFIX)/bin/perl
   PERLDIR = `perl -V:installvendorlib | sed -e 's/^installvendorlib=.//' -e 's/.;$$//'`
   
   SHTOOL  = ./shtool
   SUBST   = -e 's;\(-path_cfgdir => .\)\.\(.\);\1$(CFGDIR)\2;' \
             -e 's;\(-path_libdir => .\)\.\(.\);\1$(LIBDIR)\2;' \
             -e 's;\(-path_datdir => .\)\.\(.\);\1$(DATDIR)\2;' \
  -          -e 's;\(-path_vardir => .\)\.\(.\);\1$(VARDIR)\2;'
  +          -e 's;\(-path_vardir => .\)\.\(.\);\1$(VARDIR)\2;' \
  +          -e 's;#!/usr/bin/env perl;#!$(PERLEXE);'
   
   ase.db: ase.cli ase.cli.db.pl ase.cli.db.sql
   	rm -f ase.db
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr 12 15:36:14 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B50EC752FC2; Thu, 12 Apr 2007 15:36:14 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ Makefile
Message-Id: <20070412133614.B50EC752FC2@mail.ossp.org>
Date: Thu, 12 Apr 2007 15:36:14 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Apr-2007 15:36:14
  Branch: HEAD                             Handle: 2007041214361400

  Modified files:
    ossp-pkg/ase            Makefile

  Log:
    avoid subst problems

  Summary:
    Revision    Changes     Path
    1.12        +1  -1      ossp-pkg/ase/Makefile
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/Makefile
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 Makefile
  --- ossp-pkg/ase/Makefile	12 Apr 2007 13:33:43 -0000	1.11
  +++ ossp-pkg/ase/Makefile	12 Apr 2007 13:36:14 -0000	1.12
  @@ -17,7 +17,7 @@
             -e 's;\(-path_libdir => .\)\.\(.\);\1$(LIBDIR)\2;' \
             -e 's;\(-path_datdir => .\)\.\(.\);\1$(DATDIR)\2;' \
             -e 's;\(-path_vardir => .\)\.\(.\);\1$(VARDIR)\2;' \
  -          -e 's;#!/usr/bin/env perl;#!$(PERLEXE);'
  +          -e 's;/usr/bin/env perl;$(PERLEXE);'
   
   ase.db: ase.cli ase.cli.db.pl ase.cli.db.sql
   	rm -f ase.db
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr 12 16:00:30 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 1CE8E753036; Thu, 12 Apr 2007 16:00:30 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ChangeLog Makefile TODO ase-reflect.cgi ase....
Message-Id: <20070412140030.1CE8E753036@mail.ossp.org>
Date: Thu, 12 Apr 2007 16:00:30 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Apr-2007 16:00:30
  Branch: HEAD                             Handle: 2007041215002601

  Added files:
    ossp-pkg/ase            ase-reflect.cgi ase.cgi.cert.pl ase.ui.idle.gif
  Modified files:
    ossp-pkg/ase            ChangeLog Makefile TODO ase.cfg ase.cgi
                            ase.cgi.login.pl ase.cgi.main.pl ase.ui.jquery.js

  Log:
    Allow ASE-CERT cookies to be set for local and third-party
    websites, containing a certificate for the authenticated user.

  Summary:
    Revision    Changes     Path
    1.31        +4  -0      ossp-pkg/ase/ChangeLog
    1.13        +2  -0      ossp-pkg/ase/Makefile
    1.57        +2  -0      ossp-pkg/ase/TODO
    1.1         +120 -0     ossp-pkg/ase/ase-reflect.cgi
    1.20        +8  -0      ossp-pkg/ase/ase.cfg
    1.25        +1  -0      ossp-pkg/ase/ase.cgi
    1.1         +92 -0      ossp-pkg/ase/ase.cgi.cert.pl
    1.49        +92 -0      ossp-pkg/ase/ase.cgi.login.pl
    1.46        +18 -1      ossp-pkg/ase/ase.cgi.main.pl
    1.1         BLOB        ossp-pkg/ase/ase.ui.idle.gif
    1.5         +1  -1      ossp-pkg/ase/ase.ui.jquery.js
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 ChangeLog
  --- ossp-pkg/ase/ChangeLog	10 Apr 2007 19:50:00 -0000	1.30
  +++ ossp-pkg/ase/ChangeLog	12 Apr 2007 14:00:26 -0000	1.31
  @@ -13,6 +13,10 @@
   
     Changes between 0.2.1 and 0.2.2 (06-Apr-2007 to 10-Apr-2007)
   
  +   o Allow ASE-CERT cookies to be set for local and third-party
  +     websites, containing a certificate for the authenticated user.
  +     [Ralf S. Engelschall]
  +
      o Fix IO::All usage under newer versions of IO::All (>= 0.37)
        where IO::All::io() has to be called without package prefix.
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/Makefile
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 Makefile
  --- ossp-pkg/ase/Makefile	12 Apr 2007 13:36:14 -0000	1.12
  +++ ossp-pkg/ase/Makefile	12 Apr 2007 14:00:26 -0000	1.13
  @@ -30,7 +30,9 @@
   install: install-client install-server
   
   install-client:
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(CGIDIR)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(PERLDIR)/OSSP/$(NAME)
  +	$(SHTOOL) install -c -m 755 $(SUBST) ase-reflect.cgi $(DESTDIR)$(CGIDIR)/$(NAME)-reflect.cgi
   	$(SHTOOL) install -c -m 644 ase.api.pm $(DESTDIR)$(PERLDIR)/OSSP/$(NAME)/client.pm
   
   install-server:
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.56 -r1.57 TODO
  --- ossp-pkg/ase/TODO	11 Apr 2007 11:38:12 -0000	1.56
  +++ ossp-pkg/ase/TODO	12 Apr 2007 14:00:26 -0000	1.57
  @@ -18,3 +18,5 @@
         DELETED:  $result = {}
         EXISTING: $result = { $uuid => {"Client-Attr" => ..., "..." => ...} }
   
  +  - ASE-CERT drop on logout
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase-reflect.cgi
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ase-reflect.cgi
  --- /dev/null	2007-04-12 16:00:16 +0200
  +++ ase-reflect.cgi	2007-04-12 16:00:29 +0200
  @@ -0,0 +1,120 @@
  +#!/usr/bin/env perl
  +##
  +##  OSSP ase -- Affiliation Service Environment
  +##  Copyright (c) 2005-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2005-2007 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP ase, a service environment for managing
  +##  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  +##
  +##  This program is free software; you can redistribute it and/or modify
  +##  it under the terms of the GNU General Public License as published by
  +##  the Free Software Foundation; either version 2 of the License, or
  +##  (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this program; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  ase-reflect.cgi: certificate reflector
  +##
  +
  +#   language requirements
  +require 5.008;
  +use strict;
  +use warnings;
  +
  +#   language extensions
  +use CGI;
  +use CGI::Cookie;
  +use CGI::GuruMeditation;
  +use MIME::Base64;
  +use URI::Escape;
  +use Date::Parse;
  +
  +#   determine parameters
  +my $cgi = new CGI;
  +my $name   = $cgi->param("name");
  +my $cert   = $cgi->param("certificate");
  +my $domain = $cgi->param("domain");
  +my $path   = $cgi->param("path");
  +my $type   = $cgi->param("type");
  +
  +#   parse certificate
  +die "no certificate given"
  +    if (not defined $cert);
  +my $cert_raw = decode_base64($cert)
  +    or die "unable to Base64 decode certificate";
  +my $cert_unpack = { map {
  +    m/^([^=]+)=(.*)$/;
  +    $1 => uri_unescape($2) 
  +} split(/;/, $cert_raw) };
  +
  +#   convert certificate expiry time into suitable cookie expiry format
  +my ($y, $m, $d, $H, $M, $S) =
  +    ( $cert_unpack->{"expiry"} =~
  +      m/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/ );
  +my $expiry = str2time("$y-$m-$d $H:$M:$S +0000", 0);
  +
  +#   determine optional parameters
  +if (not defined $name) {
  +    $name = "ASE-CERT";
  +}
  +if (not defined $domain) {
  +    $domain = $cgi->virtual_host();
  +    $domain =~ s/^.+(\.[^.]+\.[^.])$/$1/s;
  +}
  +if (not defined $path) {
  +    $path = "/";
  +}
  +if (not defined $type) {
  +    $type = "text/javascript";
  +}
  +
  +#   generate HTTP response cookie
  +my $cookie = new CGI::Cookie(
  +    -name    => $name,
  +    -value   => $cert,
  +    -expires => $expiry,
  +    -domain  => $domain,
  +    -path    => $path
  +);
  +
  +my $content = {
  +    "text/javascript" => 
  +        #   no operation JavaScript script
  +        "/* no operation */",
  +    "image/gif" =>
  +        #   the 43-byte 1x1px transparent image in GIF89 format
  +        "\x47\x49\x46\x38\x39\x61\x01\x00\x01\x00" .
  +        "\x80\x00\x00\xc2\x74\x22\x00\x00\x00\x21" .
  +        "\xf9\x04\x01\x00\x00\x00\x00\x2c\x00\x00" .
  +        "\x00\x00\x01\x00\x01\x00\x00\x02\x02\x44" .
  +        "\x01\x00\x3b"
  +};
  +die "invalid content type"
  +    if (not exists $content->{$type});
  +
  +#   determine HTTP response header
  +my $header = $cgi->header(
  +    -type           => $type,
  +    -Content_Length => length($content->{$type}),
  +    -P3P            => 'NOI OUR FUC KMS IEa',
  +    -cookie         => [ $cookie ],
  +    -expires        => "+0s",
  +);
  +$header =~ s/policyref="\/w3c\/p3p\.xml"[ \t]*,[ \t]*//s;
  +
  +#   send HTTP response
  +$|++;
  +print $header . $content->{$type};
  +
  +#   die gracefully
  +exit(0);
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cfg
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 ase.cfg
  --- ossp-pkg/ase/ase.cfg	6 Apr 2007 13:44:39 -0000	1.19
  +++ ossp-pkg/ase/ase.cfg	12 Apr 2007 14:00:27 -0000	1.20
  @@ -48,3 +48,11 @@
   notice-enrollment           q{};
   notice-resign               q{};
   
  +#   HTTP cookie based authentication tokens
  +certificates {
  +    token secret "my secret" name "ASE-CERT" domain .ossp.org path /;
  +    # token secret "my secret" name "ASE-CERT" domain .openpkg.org path / reflector "http://www.openpkg.org/ase-reflect.cgi";
  +    # token secret "my secret" name "ASE-CERT" domain .openpkg.com path / reflector "http://www.openpkg.com/ase-reflect.cgi";
  +    # token secret "my secret" name "ASE-CERT" domain .openpkg.net path / reflector "http://www.openpkg.net/ase-reflect.cgi";
  +};
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 ase.cgi
  --- ossp-pkg/ase/ase.cgi	6 Apr 2007 20:46:33 -0000	1.24
  +++ ossp-pkg/ase/ase.cgi	12 Apr 2007 14:00:27 -0000	1.25
  @@ -85,6 +85,7 @@
   require "$dir/ase.cgi.rpc.pl";          # application remote procedure call
   require "$dir/ase.cgi.util.pl";         # application utility functions
   require "$dir/ase.cgi.scode.pl";        # application security code functions
  +require "$dir/ase.cgi.cert.pl";         # application certificate handling
   require "$dir/ase.cgi.login.pl";        # application workflow: login
   require "$dir/ase.cgi.logout.pl";       # application workflow: logout
   require "$dir/ase.cgi.enroll.pl";       # application workflow: enrollment
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.cert.pl
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ase.cgi.cert.pl
  --- /dev/null	2007-04-12 16:00:16 +0200
  +++ ase.cgi.cert.pl	2007-04-12 16:00:29 +0200
  @@ -0,0 +1,92 @@
  +##
  +##  OSSP ase -- Affiliation Service Environment
  +##  Copyright (c) 2005-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2005-2007 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP ase, a service environment for managing
  +##  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  +##
  +##  This program is free software; you can redistribute it and/or modify
  +##  it under the terms of the GNU General Public License as published by
  +##  the Free Software Foundation; either version 2 of the License, or
  +##  (at your option) any later version.
  +##
  +##  This program is distributed in the hope that it will be useful,
  +##  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +##  General Public License for more details.
  +##
  +##  You should have received a copy of the GNU General Public License
  +##  along with this program; if not, write to the Free Software
  +##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +##
  +##  ase.cgi.cert.pl: certificate generation
  +##
  +
  +package OSSP::ase::server;
  +use base 'CGI::Application';
  +use strict;
  +use warnings;
  +
  +#   generate certification cookies
  +sub certification_cookies {
  +    my ($self, $rec, $expires) = @_;
  +    my $cfg     = $self->param(-cfg);
  +    my $cgi     = $self->param(-cgi);
  +    my $session = $self->param(-session);
  +
  +    $self->use("Digest::SHA1");
  +    $self->use("URI::Escape");
  +    $self->use("MIME::Base64");
  +
  +    my $version = "1.0";
  +
  +    my $cookies = [];
  +    if (exists $cfg->{-cfg}->{"certificates"}) {
  +        foreach my $token (@{$cfg->{-cfg}->{"certificates"}}) {
  +            #   determine expiry date (in two formats)
  +            my $expiry1 = $self->datetime(time() + $expires);
  +            my $expiry2 = sprintf("+%ds", $expires);
  +
  +            #   generate certification signature
  +            my $sha1 = new Digest::SHA1;
  +            $sha1->add($version);                    # certificate information "version"  (to prevent certificate modification)
  +            $sha1->add($rec->{"me_uuid"});           # certificate information "uuid"     (to prevent certificate modification)
  +            $sha1->add($rec->{"me_name"}     || ""); # certificate information "name"     (to prevent certificate modification)
  +            $sha1->add($rec->{"me_nickname"} || ""); # certificate information "nickname" (to prevent certificate modification)
  +            $sha1->add($rec->{"me_address"});        # certificate information "address"  (to prevent certificate modification)
  +            $sha1->add($expiry1);                    # certificate information "expiry"   (to prevent certificate modification and replay)
  +            #$sha1->add($cgi->remote_addr() || "");   # connection  information            (to prevent certificate                  replay)
  +            $sha1->add($token->{"secret"});          # private     information            (to prevent signature re-generation)
  +            my $sig = $sha1->hexdigest;
  +            undef $sha1;
  +
  +            #   generate certificate
  +            my $cert = encode_base64(sprintf(
  +                "version=%s;uuid=%s;name=%s;nickname=%s;address=%s;expiry=%s;signature=%s",
  +                uri_escape($version),
  +                uri_escape($rec->{"me_uuid"}),
  +                uri_escape($rec->{"me_name"} || ""),
  +                uri_escape($rec->{"me_nickname"} || ""),
  +                uri_escape($rec->{"me_address"}),
  +                uri_escape($expiry1),
  +                uri_escape($sig),
  +            ));
  +            
  +            #   generate cookie
  +            my $cookie = new CGI::Cookie(
  +                -name    => $token->{"name"} || "ASE-CERT",
  +                -value   => $cert,
  +                -expires => $expiry2,
  +                -domain  => $token->{"domain"} || "localhost",
  +                -path    => $token->{"path"}   || "/",
  +            );
  +            push(@{$cookies}, { -reflector => $token->{"reflector"} || "", -cookie => $cookie });
  +        }
  +    }
  +    return $cookies;
  +}
  +
  +1;
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.48 -r1.49 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	10 Apr 2007 16:48:35 -0000	1.48
  +++ ossp-pkg/ase/ase.cgi.login.pl	12 Apr 2007 14:00:27 -0000	1.49
  @@ -301,6 +301,98 @@
           $self->logbook("login by %s%s <%s>",
               $rec->{'me_name'}, (defined $rec->{'me_nickname'} and $rec->{'me_nickname'} ne '' ? " (" . $rec->{'me_nickname'} . ")" : ""), $rec->{'me_address'}); 
   
  +        #   set certificate cookie(s)
  +        if (exists $cfg->{-cfg}->{"certificates"}) {
  +            #   generate certificate cookie(s)
  +            my $cookies = $self->certification_cookies($rec, $session->expires());
  +
  +            #   set certificate cookie(s)
  +            if (scalar(grep { $_->{-reflector} ne '' } @{$cookies}) == 0) {
  +                #   simple case
  +                #   - local certificates only
  +                #   - set cookies fast and invisibly
  +                $self->param(-cookies => [ map { $_->{-cookie} } @{$cookies} ]);
  +            }
  +            else {
  +                #   complex case:
  +                #   - at least one foreign certificate
  +                #   - set cookies slow and more visibly via reflectors
  +
  +                #   determine following URL
  +                my $url;
  +                if (defined($url = $session->param("after_login"))) {
  +                    $url = sprintf($url, $session->id())
  +                }
  +                else {
  +                    $url = $self->url(-fullyqualified => "yes", -mode => "menu-profile");
  +                }
  +
  +                #   render a short information page
  +                $html .= $self->unindent(q{
  +                    <h1>Login...</h1>
  +                    You sucessfully passed authentication and local authorization.<br/>
  +                    Your global authorization on sibling domains is still in progress.<br/>
  +                    <p/>
  +                    Global Authorization Progression:&nbsp;<b><span class="progress">N.A.</span></b>&nbsp;<img src="%s" alt=""/>
  +                    <p/>
  +                    This requires a few seconds, so be patient, please.<br/>
  +                    If you are not automatically forwarded after about %d seconds,<br/>
  +                    please proceed manually by pressing the following "Proceed" button.
  +                    <p/>
  +                    <a class="button" href="%s">Proceed Manually</a><br/>
  +                    <meta http-equiv="refresh" content="%d;url=%s"/>
  +                }, $self->url(-mode => 'loader', -name => 'ase.ui.idle.gif'), 10, $url, 10, $url);
  +
  +                #   set local cookies directly
  +                $self->param(-cookies => [
  +                    map { $_->{-cookie} } grep { $_->{-reflector} eq '' } @{$cookies}
  +                ]);
  +
  +                #   set foreign cookies indirectly via reflectors
  +                $self->use("URI::Escape");
  +                my $todo = scalar (grep { $_->{-reflector} ne '' } @{$cookies});
  +                $html .= "<script type=\"text/javascript\">\n";
  +                $html .= "  /* <![CDATA[ */\n";
  +                $html .= "  \$(document).ready(function () {\n";
  +                $html->fold();
  +                $html .= "  });\n";
  +                $html .= "  /* ]]> */\n";
  +                $html .= "</script>";
  +                $html->divert();
  +                $html .= $self->unindent(q{
  +                    var todo = %d;
  +                    var done = 0;
  +                    var show_progress = function () {
  +                        var p = (done / todo) * 100;
  +                        $('.ase span.progress').html(p.toFixed(0) + "%");
  +                    };
  +                    var after_loading = function () {
  +                        done++;
  +                        show_progress();
  +                        if (done == todo)
  +                            window.document.location = '%s';
  +                    };
  +                    show_progress();
  +                }, $todo, $url);
  +                foreach my $cookie (grep { $_->{-reflector} ne '' } @{$cookies}) {
  +                    $html .= $self->unindent(q{
  +                        jQuery.getScriptXS({
  +                            url: '%s?name=%s&certificate=%s&domain=%s&path=%s',
  +                            cb:  after_loading
  +                        });
  +                    }, $cookie->{-reflector},
  +                       uri_escape($cookie->{-cookie}->name()),
  +                       uri_escape($cookie->{-cookie}->value()),
  +                       uri_escape($cookie->{-cookie}->domain()),
  +                       uri_escape($cookie->{-cookie}->path())
  +                    );
  +                }
  +
  +                #   stop processing (to output page)
  +                return;
  +            }
  +        }
  +
           #   perform login: either go to menu or redirect to external return URL
           if (defined(my $url = $session->param("after_login"))) {
               return $self->redirect(sprintf($url, $session->id()));
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.45 -r1.46 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	10 Apr 2007 19:49:32 -0000	1.45
  +++ ossp-pkg/ase/ase.cgi.main.pl	12 Apr 2007 14:00:27 -0000	1.46
  @@ -45,6 +45,7 @@
               heartbeat-interval heartbeat-reminders heartbeat-graceperiod
               requirement-realname requirement-nickname requirement-password
               notice-enrollment notice-resign
  +            certificates
           ));
           $self->use("IO::All");
           my $txt < io($cfgfile)
  @@ -61,6 +62,17 @@
           foreach my $directive (@directives) {
               $cfg->{-cfg}->{$directive} = $tree->{$directive};
           }
  +        $cfg->{-cfg}->{"certificates"} = [];
  +        my $servername = $ENV{"SERVER_NAME"} || "localhost";
  +        foreach my $dir (@{$tree->{"certificates"}}) {
  +            next if (ref($dir) ne "ARRAY");
  +            next if ($dir->[0] ne "token");
  +            shift @{$dir};
  +            my $token = { @{$dir} };
  +            my $domain = $token->{"domain"} || "localhost";
  +            $token->{-islocal} = ($servername =~ m/(^|.+?\.)${domain}$/ ? 1 : 0);
  +            push(@{$cfg->{-cfg}->{"certificates"}}, $token);
  +        }
           undef $tree;
       }
   
  @@ -268,13 +280,18 @@
       #   set the session cookie
       my $cgi     = $self->param(-cgi);
       my $session = $self->param(-session);
  +    my $cookies = [];
       my $cookie = new CGI::Cookie(
           -name    => $session->name(),
           -value   => $session->id,
           -expires => sprintf("+%ds", $session->expires()),
           -path    => $cgi->url(-absolute => 1),
       );
  -    $self->header_add(-cookie => [$cookie]);
  +    push(@${cookies}, $cookie);
  +    foreach my $cookie (@{$self->param(-cookies) || []}) {
  +        push(@${cookies}, $cookie);
  +    }
  +    $self->header_add(-cookie => $cookies);
   
       #   set a custom HTTP header for identification
       my $cfg = $self->param(-cfg);
  @@ .
  (cd ossp-pkg/ase && \
   uudecode <<'@@ .' && \
   xdelta patch ase.ui.idle.gif.xdelta /dev/null ase.ui.idle.gif && \
   rm -f ase.ui.idle.gif.xdelta)
  Index: ossp-pkg/ase/ase.ui.idle.gif
  ============================================================================
  begin 664 ase.ui.idle.gif.xdelta
  M)5A$6C`P-"4````(`!$`$`````````````````````!S:&EE;&$N.#DT,#@N
  M;G5L;'-H:65L82XX.30P."YA;&P?BP@````````#`P```````````!^+"```
  M``````-C8&A@9F!@,+@BVW.SGV$3R\L&SAEO?CC5`<48`#W@_+\<````````
  )52581%HP,#0E
  `
  end
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.ui.jquery.js
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ase.ui.jquery.js
  --- ossp-pkg/ase/ase.ui.jquery.js	5 Apr 2007 10:30:56 -0000	1.4
  +++ ossp-pkg/ase/ase.ui.jquery.js	12 Apr 2007 14:00:27 -0000	1.5
  @@ -1 +1 @@
  -eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('B(U 1e.q=="1c"){1e.1c=1e.1c;D q=u(a,c){B(1e==l)C 1P q(a,c);a=a||V;B(q.2G(a))C 1P q(V)[q.L.36?"36":"4w"](a);B(U a=="1R"){D m=/^[^<]*(<(.|\\s)+>)[^>]*$/.53(a);B(m)a=q.3w([m[1]]);N C 1P q(c).3i(a)}C l.7d(a.1Y==3H&&a||(a.7x||a.I&&a!=1e&&!a.34&&a[0]!=1c&&a[0].34)&&q.6f(a)||[a])};B(U $!="1c")q.5I$=$;D $=q;q.L=q.5F={7x:"1.1.2",4z:u(){C l.I},I:0,2S:u(2O){C 2O==1c?q.6f(l):l[2O]},4D:u(a){D 1d=q(a);1d.aa=l;C 1d},7d:u(a){l.I=0;[].1y.1E(l,a);C l},16:u(L,23){C q.16(l,L,23)},2V:u(14){D 8o=-1;l.16(u(i){B(l==14)8o=i});C 8o},1s:u(2N,G,H){D 14=2N;B(2N.1Y==2F)B(G==1c)C l.I&&q[H||"1s"](l[0],2N)||1c;N{14={};14[2N]=G}C l.16(u(2V){W(D 12 28 14)q.1s(H?l.1D:l,12,q.12(l,14[12],H,2V,12))})},K:u(2N,G){C l.1s(2N,G,"63")},1L:u(e){B(U e=="1R")C l.6s().3M(V.cJ(e));D t="";q.16(e||l,u(){q.16(l.5R,u(){B(l.34!=8)t+=l.34!=1?l.6n:q.L.1L([l])})});C t},4t:u(){D a,23=17;C l.16(u(){B(!a)a=q.3w(23,l.6a);D b=a[0].6I(11);l.1t.5x(b,l);2K(b.22)b=b.22;b.9y(l)})},3M:u(){C l.6l(17,11,1,u(a){l.9y(a)})},ar:u(){C l.6l(17,11,-1,u(a){l.5x(a,l.22)})},as:u(){C l.6l(17,1a,1,u(a){l.1t.5x(a,l)})},au:u(){C l.6l(17,1a,-1,u(a){l.1t.5x(a,l.4a)})},3f:u(){C l.aa||q([])},3i:u(t){C l.4D(q.8s(q.4I(l,u(a){C q.3i(t,a)})),t)},9z:u(9P){C l.4D(q.4I(l,u(a){D a=a.6I(9P!=1c?9P:11);a.$2d=19;C a}))},1x:u(t){C l.4D(q.2G(t)&&q.4Y(l,u(el,2V){C t.1E(el,[2V])})||q.6b(t,l))},2f:u(t){C l.4D(t.1Y==2F&&q.6b(t,l,11)||q.4Y(l,u(a){C(t.1Y==3H||t.7x)?q.7B(a,t)<0:a!=t}))},2k:u(t){C l.4D(q.40(l.2S(),t.1Y==2F?q(t).2S():t.I!=1c&&(!t.1I||t.1I=="cK")?t:[t]))},2Z:u(2r){C 2r?q.6b(2r,l).I>0:1a},1Q:u(1Q){C 1Q==1c?(l.I?l[0].G:19):l.1s("G",1Q)},2m:u(1Q){C 1Q==1c?(l.I?l[0].3R:19):l.6s().3M(1Q)},6l:u(23,3j,6h,L){D 9z=l.I>1,a;C l.16(u(){B(!a){a=q.3w(23,l.6a);B(6h<0)a.cL()}D 14=l;B(3j&&q.1I(l,"3j")&&q.1I(a[0],"6L"))14=l.aA("3z")[0]||l.9y(V.9G("3z"));q.16(a,u(){L.1E(14,[9z?l.6I(11):l])})})}};q.1i=q.L.1i=u(){D 3g=17[0],a=1;B(17.I==1){3g=l;a=0}D 12;2K(12=17[a++])W(D i 28 12)3g[i]=12[i];C 3g};q.1i({eX:u(){B(q.5I$)$=q.5I$;C q},2G:u(L){C!!L&&U L!="1R"&&!L.1I&&L.1Y!=3H&&/u/i.1j(L+"")},8v:u(J){C J.7I&&J.6a&&!J.6a.1K},1I:u(J,1f){C J.1I&&J.1I.6N()==1f.6N()},16:u(14,L,23){B(14.I==1c)W(D i 28 14)L.1E(14[i],23||[i,14[i]]);N W(D i=0,4A=14.I;i<4A;i++)B(L.1E(14[i],23||[i,14[i]])===1a)30;C 14},12:u(J,G,H,2V,12){B(q.2G(G))G=G.3V(J,[2V]);D cA=/z-?2V|9O-?cN|1J|an|fb-?1g/i;C G&&G.1Y==5K&&H=="63"&&!cA.1j(12)?G+"2q":G},2g:{2k:u(J,c){q.16(c.4E(/\\s+/),u(i,1r){B(!q.2g.6c(J.2g,1r))J.2g+=(J.2g?" ":"")+1r})},4d:u(J,c){J.2g=c?q.4Y(J.2g.4E(/\\s+/),u(1r){C!q.2g.6c(c,1r)}).9r(" "):""},6c:u(t,c){C q.7B(c,(t.2g||t).5B().4E(/\\s+/))>-1}},9m:u(e,o,f){W(D i 28 o){e.1D["37"+i]=e.1D[i];e.1D[i]=o[i]}f.1E(e,[]);W(D i 28 o)e.1D[i]=e.1D["37"+i]},K:u(e,p){B(p=="1g"||p=="2c"){D 37={},7k,6J,d=["cQ","cR","eR","cS"];q.16(d,u(){37["6w"+l]=0;37["5P"+l+"cT"]=0});q.9m(e,37,u(){B(q(e).2Z(\':3h\')){7k=e.2X;6J=e.46}N{e=q(e.6I(11)).3i(":3S").av("4M").3f().K({84:"2v",1X:"3W",1H:"3Y",cU:"0",2B:"0"}).5N(e.1t)[0];D 8q=q.K(e.1t,"1X")||"5w";B(8q=="5w")e.1t.1D.1X="5y";7k=e.4h;6J=e.5X;B(8q=="5w")e.1t.1D.1X="5w";e.1t.5U(e)}});C p=="1g"?7k:6J}C q.63(e,p)},63:u(J,12,b2){D 1d;B(12=="1J"&&q.18.1z){1d=q.1s(J.1D,"1J");C 1d==""?"1":1d}B(12=="8u"||12=="4V")12=q.18.1z?"6M":"4V";B(!b2&&J.1D[12])1d=J.1D[12];N B(V.7Y&&V.7Y.8Q){B(12=="4V"||12=="6M")12="8u";12=12.1N(/([A-Z])/g,"-$1").2n();D 1r=V.7Y.8Q(J,19);B(1r)1d=1r.af(12);N B(12=="1H")1d="2A";N q.9m(J,{1H:"3Y"},u(){D c=V.7Y.8Q(l,"");1d=c&&c.af(12)||""})}N B(J.6p){D ag=12.1N(/\\-(\\w)/g,u(m,c){C c.6N()});1d=J.6p[12]||J.6p[ag]}C 1d},3w:u(a,6K){D r=[];6K=6K||V;q.16(a,u(i,2D){B(!2D)C;B(2D.1Y==5K)2D=2D.5B();B(U 2D=="1R"){D s=q.3d(2D),26=6K.9G("26"),4p=[];D 4t=!s.1M("<2J")&&[1,"<3B>","</3B>"]||(!s.1M("<dz")||!s.1M("<3z")||!s.1M("<dB"))&&[1,"<3j>","</3j>"]||!s.1M("<6L")&&[2,"<3j><3z>","</3z></3j>"]||(!s.1M("<dw")||!s.1M("<cY"))&&[3,"<3j><3z><6L>","</6L></3z></3j>"]||[0,"",""];26.3R=4t[1]+2D+4t[2];2K(4t[0]--)26=26.22;B(q.18.1z){B(!s.1M("<3j")&&s.1M("<3z")<0)4p=26.22&&26.22.5R;N B(4t[1]=="<3j>"&&s.1M("<3z")<0)4p=26.5R;W(D n=4p.I-1;n>=0;--n)B(q.1I(4p[n],"3z")&&!4p[n].5R.I)4p[n].1t.5U(4p[n])}2D=q.6f(26.5R)}B(2D.I===0&&!q.1I(2D,"1U"))C;B(2D[0]==1c||q.1I(2D,"1U"))r.1y(2D);N r=q.40(r,2D)});C r},1s:u(J,1f,G){D 4J=q.8v(J)?{}:{"W":"d2","4L":"2g","8u":q.18.1z?"6M":"4V",4V:q.18.1z?"6M":"4V",3R:"3R",2g:"2g",G:"G",3o:"3o",4M:"4M",d3:"d4",3t:"3t"};B(1f=="1J"&&q.18.1z){B(G!=1c){J.an=1;J.1x=(J.1x||"").1N(/a2\\([^)]*\\)/,"")+(79(G).5B()=="8I"?"":"a2(1J="+G*ai+")")}C J.1x?(79(J.1x.2H(/1J=([^)]*)/)[1])/ai).5B():""}B(4J[1f]){B(G!=1c)J[4J[1f]]=G;C J[4J[1f]]}N B(G==1c&&q.18.1z&&q.1I(J,"1U")&&(1f=="cs"||1f=="2a"))C J.d6(1f).6n;N B(J.7I){B(G!=1c)J.d7(1f,G);B(q.18.1z&&/47|3G/.1j(1f)&&!q.8v(J))C J.6V(1f,2);C J.6V(1f)}N{1f=1f.1N(/-([a-z])/d8,u(z,b){C b.6N()});B(G!=1c)J[1f]=G;C J[1f]}},3d:u(t){C t.1N(/^\\s+|\\s+$/g,"")},6f:u(a){D r=[];B(U a!="8U")W(D i=0,al=a.I;i<al;i++)r.1y(a[i]);N r=a.8Y(0);C r},7B:u(b,a){W(D i=0,al=a.I;i<al;i++)B(a[i]==b)C i;C-1},40:u(2s,9K){W(D i=0;9K[i];i++)2s.1y(9K[i]);C 2s},8s:u(2s){D r=[],2O=q.7X++;W(D i=0,ao=2s.I;i<ao;i++)B(2s[i].7X!=2O){2s[i].7X=2O;r.1y(2s[i])}C r},7X:0,4Y:u(3n,L,8w){B(U L=="1R")L=1P 74("a","i","C "+L);D 2b=[];W(D i=0,el=3n.I;i<el;i++)B(!8w&&L(3n[i],i)||8w&&!L(3n[i],i))2b.1y(3n[i]);C 2b},4I:u(3n,L){B(U L=="1R")L=1P 74("a","C "+L);D 2b=[];W(D i=0,el=3n.I;i<el;i++){D 1Q=L(3n[i],i);B(1Q!==19&&1Q!=1c){B(1Q.1Y!=3H)1Q=[1Q];2b=2b.ff(1Q)}}C 2b}});1P u(){D b=8V.8W.2n();q.18={3b:/aq/.1j(b),3A:/3A/.1j(b),1z:/1z/.1j(b)&&!/3A/.1j(b),4o:/4o/.1j(b)&&!/(d9|aq)/.1j(b)};q.5t=!q.18.1z||V.da=="dc"};q.16({1o:"a.1t",3K:"q.3K(a)",dd:"q.3C(a,2,\'4a\')",de:"q.3C(a,2,\'c0\')",cz:"q.5m(a.1t.22,a)",5h:"q.5m(a.22)"},u(i,n){q.L[i]=u(a){D 1d=q.4I(l,n);B(a&&U a=="1R")1d=q.6b(a,1d);C l.4D(1d)}});q.16({5N:"3M",df:"ar",5x:"as",8i:"au"},u(i,n){q.L[i]=u(){D a=17;C l.16(u(){W(D j=0,al=a.I;j<al;j++)q(a[j])[n](l)})}});q.16({av:u(2N){q.1s(l,2N,"");l.f1(2N)},2L:u(c){q.2g.2k(l,c)},3p:u(c){q.2g.4d(l,c)},dg:u(c){q.2g[q.2g.6c(l,c)?"4d":"2k"](l,c)},4d:u(a){B(!a||q.1x(a,[l]).r.I)l.1t.5U(l)},6s:u(){2K(l.22)l.5U(l.22)}},u(i,n){q.L[i]=u(){C l.16(n,17)}});q.16(["eq","9h","9q","aw"],u(i,n){q.L[n]=u(2O,L){C l.1x(":"+n+"("+2O+")",L)}});q.16(["1g","2c"],u(i,n){q.L[n]=u(h){C h==1c?(l.I?q.K(l[0],n):19):l.K(n,h.1Y==2F?h:h+"2q")}});q.1i({2r:{"":"m[2]==\'*\'||q.1I(a,m[2])","#":"a.6V(\'T\')==m[2]",":":{9h:"i<m[3]-0",9q:"i>m[3]-0",3C:"m[3]-0==i",eq:"m[3]-0==i",2s:"i==0",2w:"i==r.I-1",aG:"i%2==0",aH:"i%2","3C-7C":"q.3C(a.1t.22,m[3],\'4a\',a)==a","2s-7C":"q.3C(a.1t.22,1,\'4a\')==a","2w-7C":"q.3C(a.1t.di,1,\'c0\')==a","9i-7C":"q.5m(a.1t.22).I==1",1o:"a.22",6s:"!a.22",aw:"q.L.1L.1E([a]).1M(m[3])>=0",3h:\'a.H!="2v"&&q.K(a,"1H")!="2A"&&q.K(a,"84")!="2v"\',2v:\'a.H=="2v"||q.K(a,"1H")=="2A"||q.K(a,"84")=="2v"\',ay:"!a.3o",3o:"a.3o",4M:"a.4M",3t:"a.3t||q.1s(a,\'3t\')",1L:"a.H==\'1L\'",3S:"a.H==\'3S\'",4f:"a.H==\'4f\'",9e:"a.H==\'9e\'",ci:"a.H==\'ci\'",3X:"a.H==\'3X\'",5r:"a.H==\'5r\'",2P:"a.H==\'2P\'",8f:\'a.H=="8f"||q.1I(a,"8f")\',3Z:"/3Z|3B|eU|8f/i.1j(a.1I)"},".":"q.2g.6c(a,m[2])","@":{"=":"z==m[4]","!=":"z!=m[4]","^=":"z&&!z.1M(m[4])","$=":"z&&z.6e(z.I - m[4].I,m[4].I)==m[4]","*=":"z&&z.1M(m[4])>=0","":"z",96:u(m){C["",m[1],m[3],m[2],m[5]]},aF:"z=a[m[3]];B(!z||/47|3G/.1j(m[3]))z=q.1s(a,m[3]);"},"[":"1b(m[2])?q.3C(a.1t.22,1b(m[2]),\'4a\',a)==a:q.3i(m[2],a).I"},aE:[/^\\[ *(@)([\\w-]+) *([!*$^=]*) *(\'?"?)(.*?)\\4 *\\]/,/^(\\[)\\s*(.*?(\\[.*?\\])?[^[]*?)\\s*\\]/,/^(:)([\\w-]+)\\("?\'?(.*?(\\(.*?\\))?[^(]*?)"?\'?\\)/,1P 4K("^([:.#]*)("+(q.8A="(?:[\\\\w\\dn-\\dp*-]|\\\\\\\\.)")+"+)")],6S:[/^(\\/?\\.\\.)/,"a.1t",/^(>|\\/)/,"q.5m(a.22)",/^(\\+)/,"q.3C(a,2,\'4a\')",/^(~)/,u(a){D s=q.5m(a.1t.22);C s.8Y(q.7B(a,s)+1)}],6b:u(2r,3n,2f){D 37,1r=[];2K(2r&&2r!=37){37=2r;D f=q.1x(2r,3n,2f);2r=f.t.1N(/^\\s*,\\s*/,"");1r=2f?3n=f.r:q.40(1r,f.r)}C 1r},3i:u(t,2M){B(U t!="1R")C[t];B(2M&&!2M.34)2M=19;2M=2M||V;B(!t.1M("//")){2M=2M.38;t=t.6e(2,t.I)}N B(!t.1M("/")&&!2M.6a){2M=2M.38;t=t.6e(1,t.I);B(t.1M("/")>=1)t=t.6e(t.1M("/"),t.I)}D 1d=[2M],3O=[],2w;2K(t&&2w!=t){D r=[];2w=t;t=q.3d(t).1N(/^\\/\\//,"");D 6T=1a;D 5o=/^[\\/>]\\s*([\\w*-]+)/;D m=5o.53(t);B(m){W(D i=0;1d[i];i++)W(D c=1d[i].22;c;c=c.4a)B(c.34==1&&(m[1]=="*"||q.1I(c,m[1])))r.1y(c);1d=r;t=t.1N(5o,"");B(t.1M(" ")==0)dr;6T=11}N{W(D i=0,az=q.6S.I;i<az;i+=2){D 5o=q.6S[i],L=q.6S[i+1];D m=5o.53(t);B(m){r=1d=q.4I(1d,q.2G(L)?L:1P 74("a","C "+L));t=q.3d(t.1N(5o,""));6T=11;30}}}B(t&&!6T){B(!t.1M(",")){B(1d[0]==2M)1d.7W();3O=q.40(3O,1d);r=1d=[2M];t=" "+t.6e(1,t.I)}N{D 6k=1P 4K("^(\\\\w+)(#)("+q.8A+"+)");D m=6k.53(t);B(m){m=[0,m[2],m[3],m[1]]}N{6k=1P 4K("^([#.]?)("+q.8A+"*)");m=6k.53(t)}m[2]=m[2].1N(/\\\\/g,"");D J=1d[1d.I-1];B(m[1]=="#"&&J&&J.8N){D 4O=J.8N(m[2]);B((q.18.1z||q.18.3A)&&4O&&4O.T!=m[2])4O=q(\'[@T="\'+m[2]+\'"]\',J)[0];1d=r=4O&&(!m[3]||q.1I(4O,m[3]))?[4O]:[]}N{W(D i=0;1d[i];i++){D 7A=m[1]!=""||m[0]==""?"*":m[2];B(7A=="*"&&1d[i].1I.2n()=="45")7A="P";r=q.40(r,1d[i].aA(7A))}B(m[1]==".")r=q.98(r,m[2]);B(m[1]=="#"){D 51=[];W(D i=0;r[i];i++)B(r[i].6V("T")==m[2]){51=[r[i]];30}r=51}1d=r}t=t.1N(6k,"")}}B(t){D 1Q=q.1x(t,r);1d=r=1Q.r;t=q.3d(1Q.t)}}B(t)1d=[];B(1d&&1d[0]==2M)1d.7W();3O=q.40(3O,1d);C 3O},98:u(r,m,2f){m=" "+m+" ";D 51=[];W(D i=0;r[i];i++){D 95=(" "+r[i].2g+" ").1M(m)>=0;B(!2f&&95||2f&&!95)51.1y(r[i])}C 51},1x:u(t,r,2f){D 2w;2K(t&&t!=2w){2w=t;D p=q.aE,m;W(D i=0;p[i];i++){m=p[i].53(t);B(m){t=t.9u(m[0].I);B(q.2r[m[1]].96)m=q.2r[m[1]].96(m);m[2]=m[2].1N(/\\\\/g,"");30}}B(!m)30;B(m[1]==":"&&m[2]=="2f")r=q.1x(m[3],r,11).r;N B(m[1]==".")r=q.98(r,m[2],2f);N{D f=q.2r[m[1]];B(U f!="1R")f=q.2r[m[1]][m[2]];6D("f = u(a,i){"+(q.2r[m[1]].aF||"")+"C "+f+"}");r=q.4Y(r,f,2f)}}C{r:r,t:t}},3K:u(J){D 8E=[];D 1r=J.1t;2K(1r&&1r!=V){8E.1y(1r);1r=1r.1t}C 8E},3C:u(1r,2b,6h,J){2b=2b||1;D 2O=0;W(;1r;1r=1r[6h]){B(1r.34==1)2O++;B(2O==2b||2b=="aG"&&2O%2==0&&2O>1&&1r==J||2b=="aH"&&2O%2==1&&1r==J)C 1r}},5m:u(n,J){D r=[];W(;n;n=n.4a){B(n.34==1&&(!J||n!=J))r.1y(n)}C r}});q.Q={2k:u(E,H,1A,S){B(q.18.1z&&E.6t!=1c)E=1e;B(S)1A.S=S;B(!1A.55)1A.55=l.55++;B(!E.$2d)E.$2d={};D 5S=E.$2d[H];B(!5S){5S=E.$2d[H]={};B(E["65"+H])5S[0]=E["65"+H]}5S[1A.55]=1A;E["65"+H]=l.6H;B(!l.2y[H])l.2y[H]=[];l.2y[H].1y(E)},55:1,2y:{},4d:u(E,H,1A){D 2d=E.$2d,1d;B(2d){B(H&&H.H){1A=H.1A;H=H.H}B(!H){W(H 28 2d)l.4d(E,H)}N B(2d[H]){B(1A)6q 2d[H][1A.55];N W(1A 28 E.$2d[H])6q 2d[H][1A];W(1d 28 2d[H])30;B(!1d){1d=E["65"+H]=19;6q 2d[H]}}W(1d 28 2d)30;B(!1d)E.$2d=19}},2e:u(H,S,E){S=q.6f(S||[]);B(!E)q.16(l.2y[H]||[],u(){q.Q.2e(H,S,l)});N{D 1A=E["65"+H],1Q,L=q.2G(E[H]);B(1A){S.aJ(l.4J({H:H,3g:E}));B((1Q=1A.1E(E,S))!==1a)l.8H=11}B(L&&1Q!==1a)E[H]();l.8H=1a}},6H:u(Q){B(U q=="1c"||q.Q.8H)C;Q=q.Q.4J(Q||1e.Q||{});D 4N;D c=l.$2d[Q.H];D 23=[].8Y.3V(17,1);23.aJ(Q);W(D j 28 c){23[0].1A=c[j];23[0].S=c[j].S;B(c[j].1E(l,23)===1a){Q.43();Q.59();4N=1a}}B(q.18.1z)Q.3g=Q.43=Q.59=Q.1A=Q.S=19;C 4N},4J:u(Q){B(!Q.3g&&Q.cB)Q.3g=Q.cB;B(Q.8B==1c&&Q.9Z!=1c){D e=V.38,b=V.1K;Q.8B=Q.9Z+(e.2U||b.2U);Q.aD=Q.dy+(e.33||b.33)}B(q.18.3b&&Q.3g.34==3){D 5V=Q;Q=q.1i({},5V);Q.3g=5V.3g.1t;Q.43=u(){C 5V.43()};Q.59=u(){C 5V.59()}}B(!Q.43)Q.43=u(){l.4N=1a};B(!Q.59)Q.59=u(){l.dA=11};C Q}};q.L.1i({2E:u(H,S,L){C l.16(u(){q.Q.2k(l,H,L||S,S)})},aM:u(H,S,L){C l.16(u(){q.Q.2k(l,H,u(Q){q(l).5Q(Q);C(L||S).1E(l,17)},S)})},5Q:u(H,L){C l.16(u(){q.Q.4d(l,H,L)})},2e:u(H,S){C l.16(u(){q.Q.2e(H,S,l)})},3c:u(){D a=17;C l.31(u(e){l.8J=l.8J==0?1:0;e.43();C a[l.8J].1E(l,[e])||1a})},dZ:u(f,g){u 8K(e){D p=(e.H=="5E"?e.dC:e.dD)||e.dE;2K(p&&p!=l)3F{p=p.1t}3E(e){p=l};B(p==l)C 1a;C(e.H=="5E"?f:g).1E(l,[e])}C l.5E(8K).6U(8K)},36:u(f){B(q.6X)f.1E(V,[q]);N{q.5T.1y(u(){C f.1E(l,[q])})}C l}});q.1i({6X:1a,5T:[],36:u(){B(!q.6X){q.6X=11;B(q.5T){q.16(q.5T,u(){l.1E(V)});q.5T=19}B(q.18.4o||q.18.3A)V.dF("aK",q.36,1a)}}});1P u(){q.16(("8m,4P,4w,dR,5L,8z,31,dG,"+"dP,dH,9a,5E,6U,dJ,3B,"+"3X,dK,dL,dM,1m").4E(","),u(i,o){q.L[o]=u(f){C f?l.2E(o,f):l.2e(o)}});B(q.18.4o||q.18.3A)V.dN("aK",q.36,1a);N B(q.18.1z){V.dO("<dQ"+"dS T=aL dT=11 "+"3G=//:><\\/4j>");D 4j=V.8N("aL");B(4j)4j.69=u(){B(l.8h!="3D")C;l.1t.5U(l);q.36()};4j=19}N B(q.18.3b)q.8P=6t(u(){B(V.8h=="dU"||V.8h=="3D"){9p(q.8P);q.8P=19;q.36()}},10);q.Q.2k(1e,"4w",q.36)};B(q.18.1z)q(1e).aM("8z",u(){D 2y=q.Q.2y;W(D H 28 2y){D 8S=2y[H],i=8S.I;B(i&&H!=\'8z\')do q.Q.4d(8S[i-1],H);2K(--i)}});q.L.1i({1B:u(1p,1h){D 2v=l.1x(":2v");1p?2v.2T({1g:"1B",2c:"1B",1J:"1B"},1p,1h):2v.16(u(){l.1D.1H=l.54?l.54:"";B(q.K(l,"1H")=="2A")l.1D.1H="3Y"});C l},1w:u(1p,1h){D 3h=l.1x(":3h");1p?3h.2T({1g:"1w",2c:"1w",1J:"1w"},1p,1h):3h.16(u(){l.54=l.54||q.K(l,"1H");B(l.54=="2A")l.54="3Y";l.1D.1H="2A"});C l},aO:q.L.3c,3c:u(L,8x){D 23=17;C q.2G(L)&&q.2G(8x)?l.aO(L,8x):l.16(u(){q(l)[q(l).2Z(":2v")?"1B":"1w"].1E(q(l),23)})},bD:u(1p,1h){C l.1x(":2v").2T({1g:"1B"},1p,1h).3f()},bA:u(1p,1h){C l.1x(":3h").2T({1g:"1w"},1p,1h).3f()},dV:u(1p,1h){C l.16(u(){D aP=q(l).2Z(":2v")?"1B":"1w";q(l).2T({1g:aP},1p,1h)})},bM:u(1p,1h){C l.1x(":2v").2T({1J:"1B"},1p,1h).3f()},bH:u(1p,1h){C l.1x(":3h").2T({1J:"1w"},1p,1h).3f()},dW:u(1p,3J,1h){C l.2T({1J:3J},1p,1h)},2T:u(12,1p,3e,1h){C l.2W(u(){l.4X=q.1i({},12);D 2J=q.1p(1p,3e,1h);W(D p 28 12){D e=1P q.5O(l,2J,p);B(12[p].1Y==5K)e.5c(e.1r(),12[p]);N e[12[p]](12)}})},2W:u(H,L){B(!L){L=H;H="5O"}C l.16(u(){B(!l.2W)l.2W={};B(!l.2W[H])l.2W[H]=[];l.2W[H].1y(L);B(l.2W[H].I==1)L.1E(l)})}});q.1i({1p:u(1p,3e,L){D 2J=1p&&1p.1Y==dX?1p:{3D:L||!L&&3e||q.2G(1p)&&1p,3U:1p,3e:L&&3e||3e&&3e.1Y!=74&&3e||"aS"};2J.3U=(2J.3U&&2J.3U.1Y==5K?2J.3U:{dY:e0,e1:bC}[2J.3U])||e2;2J.37=2J.3D;2J.3D=u(){q.aV(l,"5O");B(q.2G(2J.37))2J.37.1E(l)};C 2J},3e:{e3:u(p,n,4F,6W){C 4F+6W*p},aS:u(p,n,4F,6W){C((-4c.e4(p*4c.e6)/2)+0.5)*6W+4F}},2W:{},aV:u(J,H){H=H||"5O";B(J.2W&&J.2W[H]){J.2W[H].7W();D f=J.2W[H][0];B(f)f.1E(J)}},4Z:[],5O:u(J,Y,12){D z=l;D y=J.1D;B(12=="1g"||12=="2c"){D 7c=q.K(J,"1H");D aY=y.4v;y.4v="2v"}z.a=u(){B(Y.7b)Y.7b.1E(J,[z.4W]);B(12=="1J")q.1s(y,"1J",z.4W);N{y[12]=1b(z.4W)+"2q";y.1H="3Y"}};z.7H=u(){C 79(q.K(J,12))};z.1r=u(){D r=79(q.63(J,12));C r&&r>-e7?r:z.7H()};z.5c=u(8t,3J){z.8p=(1P 57()).78();z.4W=8t;z.a();q.4Z.1y(u(){C z.7b(8t,3J)});B(q.4Z.I==1){D aX=6t(u(){q.4Z=q.4Y(q.4Z,u(L){C L()});B(!q.4Z.I)9p(aX)},13)}};z.1B=u(){B(!J.3P)J.3P={};J.3P[12]=q.1s(J.1D,12);Y.1B=11;z.5c(0,l.1r());B(12!="1J")y[12]="5b"};z.1w=u(){B(!J.3P)J.3P={};J.3P[12]=q.1s(J.1D,12);Y.1w=11;z.5c(l.1r(),0)};z.3c=u(){B(!J.3P)J.3P={};J.3P[12]=q.1s(J.1D,12);B(7c=="2A"){Y.1B=11;B(12!="1J")y[12]="5b";z.5c(0,l.1r())}N{Y.1w=11;z.5c(l.1r(),0)}};z.7b=u(4F,91){D t=(1P 57()).78();B(t>Y.3U+z.8p){z.4W=91;z.a();B(J.4X)J.4X[12]=11;D 3O=11;W(D i 28 J.4X)B(J.4X[i]!==11)3O=1a;B(3O){B(7c){y.4v=aY;y.1H=7c;B(q.K(J,"1H")=="2A")y.1H="3Y"}B(Y.1w)y.1H="2A";B(Y.1w||Y.1B)W(D p 28 J.4X)q.1s(y,p,J.3P[p])}B(3O&&q.2G(Y.3D))Y.3D.1E(J);C 1a}N{D n=t-l.8p;D p=n/Y.3U;z.4W=q.3e[Y.3e](p,n,4F,(91-4F),Y.3U);z.a()}C 11}}});q.L.1i({e9:u(1q,3r,1h){l.4w(1q,3r,1h,1)},4w:u(1q,3r,1h,3Q){B(q.2G(1q))C l.2E("4w",1q);1h=1h||u(){};D H="94";B(3r)B(q.2G(3r)){1h=3r;3r=19}N{3r=q.P(3r);H="b5"}D 3k=l;q.7e({1q:1q,H:H,S:3r,3Q:3Q,3D:u(5g,1V){B(1V=="5l"||!3Q&&1V=="bk")3k.1s("3R",5g.7w).9k().16(1h,[5g.7w,1V,5g]);N 1h.1E(3k,[5g.7w,1V,5g])}});C l},eb:u(){C q.P(l)},9k:u(){C l.3i("4j").16(u(){B(l.3G)q.b4(l.3G);N q.9l(l.1L||l.ec||l.3R||"")}).3f()}});q.16("b8,bp,bQ,bw,bR,bi".4E(","),u(i,o){q.L[o]=u(f){C l.2E(o,f)}});q.1i({2S:u(1q,S,1h,H,3Q){B(q.2G(S)){1h=S;S=19}C q.7e({H:"94",1q:1q,S:S,5l:1h,9b:H,3Q:3Q})},ed:u(1q,S,1h,H){C q.2S(1q,S,1h,H,1)},b4:u(1q,1h){C q.2S(1q,19,1h,"4j")},ee:u(1q,S,1h){C q.2S(1q,S,1h,"bO")},ef:u(1q,S,1h,H){B(q.2G(S)){1h=S;S={}}C q.7e({H:"b5",1q:1q,S:S,5l:1h,9b:H})},eg:u(32){q.7f.32=32},eh:u(F){q.1i(q.7f,F)},7f:{2y:11,H:"94",32:0,bc:"ei/x-ej-1U-ek",b6:11,7r:11,S:19},7v:{},7e:u(s){s=q.1i({},q.7f,s);B(s.S){B(s.b6&&U s.S!="1R")s.S=q.P(s.S);B(s.H.2n()=="2S"){s.1q+=((s.1q.1M("?")>-1)?"&":"?")+s.S;s.S=19}}B(s.2y&&!q.9d++)q.Q.2e("b8");D 9c=1a;D 1n=1e.b9?1P b9("ax.en"):1P 7U();1n.eo(s.H,s.1q,s.7r);B(s.S)1n.7l("ep-er",s.bc);B(s.3Q)1n.7l("es-9f-et",q.7v[s.1q]||"eu, ev ew ex 97:97:97 ey");1n.7l("X-ez-eA","7U");B(1n.eB)1n.7l("eC","eD");B(s.bh)s.bh(1n);B(s.2y)q.Q.2e("bi",[1n,s]);D 69=u(9j){B(1n&&(1n.8h==4||9j=="32")){9c=11;B(7n){9p(7n);7n=19}D 1V;3F{1V=q.by(1n)&&9j!="32"?s.3Q&&q.bE(1n,s.1q)?"bk":"5l":"1m";B(1V!="1m"){D 7m;3F{7m=1n.9g("bF-9f")}3E(e){}B(s.3Q&&7m)q.7v[s.1q]=7m;D S=q.bK(1n,s.9b);B(s.5l)s.5l(S,1V);B(s.2y)q.Q.2e("bR",[1n,s])}N q.7q(s,1n,1V)}3E(e){1V="1m";q.7q(s,1n,1V,e)}B(s.2y)q.Q.2e("bQ",[1n,s]);B(s.2y&&!--q.9d)q.Q.2e("bp");B(s.3D)s.3D(1n,1V);B(s.7r)1n=19}};D 7n=6t(69,13);B(s.32>0)3q(u(){B(1n){1n.eE();B(!9c)69("32")}},s.32);3F{1n.eG(s.S)}3E(e){q.7q(s,1n,19,e)}B(!s.7r)69();C 1n},7q:u(s,1n,1V,e){B(s.1m)s.1m(1n,1V,e);B(s.2y)q.Q.2e("bw",[1n,s,e])},9d:0,by:u(r){3F{C!r.1V&&5D.eH=="9e:"||(r.1V>=bC&&r.1V<eI)||r.1V==bG||q.18.3b&&r.1V==1c}3E(e){}C 1a},bE:u(1n,1q){3F{D bI=1n.9g("bF-9f");C 1n.1V==bG||bI==q.7v[1q]||q.18.3b&&1n.1V==1c}3E(e){}C 1a},bK:u(r,H){D ct=r.9g("eJ-H");D S=!H&&ct&&ct.1M("1n")>=0;S=H=="1n"||S?r.eL:r.7w;B(H=="4j")q.9l(S);B(H=="bO")6D("S = "+S);B(H=="2m")q("<26>").2m(S).9k();C S},P:u(a){D s=[];B(a.1Y==3H||a.7x)q.16(a,u(){s.1y(4G(l.1f)+"="+4G(l.G))});N W(D j 28 a)B(a[j]&&a[j].1Y==3H)q.16(a[j],u(){s.1y(4G(j)+"="+4G(l))});N s.1y(4G(j)+"="+4G(a[j]));C s.9r("&")},9l:u(S){B(1e.bT)1e.bT(S);N B(q.18.3b)1e.3q(S,0);N 6D.3V(1e,S)}})}q.L.eN=u(f){C l.16(u(){D p=l.1t;B(q.K(p,"1X")==\'5w\')p.1D.1X=\'5y\';D s=l.1D;s.1X=\'3W\';B(!f||f=="eO"){B(((1b(q.K(p,"2c"))-1b(q.K(l,"2c")))/2)>0)s.2B=((1b(q.K(p,"2c"))-1b(q.K(l,"2c")))/2)+"2q";N s.2B="0"}B(!f||f=="eP"){B(((1b(q.K(p,"1g"))-1b(q.K(l,"1g")))/2)>0){s.2t=((1b(q.K(p,"1g"))-1b(q.K(l,"1g")))/2)+"2q"}N{B(p.1I.2n()=="1K"){B(1e.5Z)D 4h=1e.5Z;N B(V.1K&&V.1K.2X)D 4h=V.1K.2X;s.2t=((4h-1b(q.K(l,"1g")))/2)+"2q"}N{s.2t="0"}}}})};q.4b=u(1f,G,Y){B(U G!=\'1c\'){Y=Y||{};B(G===19){G=\'\';Y.2z=-1}D 2z=\'\';B(Y.2z){D 2p;B(U Y.2z==\'1R\'&&Y.2z.2H(/^[+-]?[0-9]+[bV]$/)!==19){D 2H=Y.2z.2H(/^([+-]?[0-9]+)([bV])$/);Y.2z=1b(2H[0],10)*(({"y":(60*60*24*eQ),"w":(60*60*24*7),"d":(60*60*24),"h":(60*60),"m":(60),"s":(1)}[2H[1]])||0);2p=1P 57();2p.bY(2p.78()+Y.2z*4i)}N B(U Y.2z==\'3l\'){2p=1P 57();2p.bY(2p.78()+Y.2z*24*60*60*4i)}N B(U Y.2z.bZ!=\'1c\')2p=Y.2z;N 9D"eS \\"2z\\" 2l";2z=\'; 2z=\'+2p.bZ()}D 6d=Y.6d?\'; 6d=\'+Y.6d:\'\';D 6u=Y.6u?\'; 6u=\'+Y.6u:\'\';D 75=Y.75?\'; 75\':\'\';V.4b=[1f,\'=\',4G(G),2z,6d,6u,75].9r(\'\')}N{D 9v=19;B(V.4b&&V.4b!=\'\'){D 9s=V.4b.4E(\';\');W(D i=0;i<9s.I;i++){D 4b=q.3d(9s[i]);B(4b.9u(0,1f.I+1)==(1f+\'=\')){9v=eT(4b.9u(1f.I+1));30}}}C 9v}};q.L.c1=q.L.1g;q.L.c2=q.L.2c;q.L.1g=u(){B(l[0]==1e)C 3k.5Z||q.5t&&V.38.4h||V.1K.4h;B(l[0]==V)C 4c.7H(V.1K.eV,V.1K.2X);C l.c1(17[0])};q.L.2c=u(){B(l[0]==1e)C 3k.8M||q.5t&&V.38.5X||V.1K.5X;B(l[0]==V)C 4c.7H(V.1K.eY,V.1K.46);C l.c2(17[0])};q.L.5Z=u(){C l[0]==1e||l[0]==V?l.1g():l.K(\'1H\')!=\'2A\'?l[0].2X-(1b(l.K("4n"))||0)-(1b(l.K("c3"))||0):l.1g()+(1b(l.K("9C"))||0)+(1b(l.K("c4"))||0)};q.L.8M=u(){C l[0]==1e||l[0]==V?l.2c():l.K(\'1H\')!=\'2A\'?l[0].46-(1b(l.K("49"))||0)-(1b(l.K("c5"))||0):l.1g()+(1b(l.K("9B"))||0)+(1b(l.K("93"))||0)};q.L.eZ=u(){C l[0]==1e||l[0]==V?l.1g():l.K(\'1H\')!=\'2A\'?l[0].2X:l.1g()+(1b(l.K("4n"))||0)+(1b(l.K("c3"))||0)+(1b(l.K("9C"))||0)+(1b(l.K("c4"))||0)};q.L.f0=u(){C l[0]==1e||l[0]==V?l.2c():l.K(\'1H\')!=\'2A\'?l[0].46:l.1g()+(1b(l.K("49"))||0)+(1b(l.K("c5"))||0)+(1b(l.K("9B"))||0)+(1b(l.K("93"))||0)};q.L.2U=u(){B(l[0]==1e||l[0]==V)C 3k.8O||q.5t&&V.38.2U||V.1K.2U;C l[0].2U};q.L.33=u(){B(l[0]==1e||l[0]==V)C 3k.8L||q.5t&&V.38.33||V.1K.33;C l[0].33};q.L.8r=u(Y,9E){D x=0,y=0,J=l[0],1o=l[0],6O=1a,9A=1a,6i,6m=0,5M=0,Y=q.1i({76:11,5P:11,6w:1a,5L:11},Y||{});do{x+=1o.8D||0;y+=1o.8G||0;B(q.18.4o||q.18.1z){D bt=1b(q.K(1o,\'4n\'))||0;D bl=1b(q.K(1o,\'49\'))||0;x+=bl;y+=bt;B(q.18.4o&&1o!=J&&q.K(1o,\'4v\')!=\'3h\'){x+=bl;y+=bt}B(q.K(1o,\'1X\')==\'3W\')6O=11;B(q.K(1o,\'1X\')==\'5y\')9A=11}B(Y.5L){6i=1o.c6;do{6m+=1o.2U||0;5M+=1o.33||0;1o=1o.1t;B(q.18.4o&&1o!=J&&1o!=6i&&q.K(1o,\'4v\')!=\'3h\'){x+=1b(q.K(1o,\'49\'))||0;y+=1b(q.K(1o,\'4n\'))||0}}2K(6i&&1o!=6i)}N 1o=1o.c6;B(1o&&(1o.7I.2n()==\'1K\'||1o.7I.2n()==\'2m\')){B((q.18.3b||(q.18.1z&&q.5t))&&q.K(J,\'1X\')!=\'3W\'){x+=1b(q.K(1o,\'ca\'))||0;y+=1b(q.K(1o,\'cc\'))||0}B((q.18.4o&&!6O)||(q.18.1z&&q.K(J,\'1X\')==\'5w\'&&(!9A||!6O))){x+=1b(q.K(1o,\'49\'))||0;y+=1b(q.K(1o,\'4n\'))||0}30}}2K(1o);B(!Y.76){x-=1b(q.K(J,\'ca\'))||0;y-=1b(q.K(J,\'cc\'))||0}B(Y.5P&&(q.18.3b||q.18.3A)){x+=1b(q.K(J,\'49\'))||0;y+=1b(q.K(J,\'4n\'))||0}N B(!Y.5P&&!(q.18.3b||q.18.3A)){x-=1b(q.K(J,\'49\'))||0;y-=1b(q.K(J,\'4n\'))||0}B(Y.6w){x+=1b(q.K(J,\'9B\'))||0;y+=1b(q.K(J,\'9C\'))||0}B(Y.5L&&q.18.3A&&q.K(J,\'1H\')==\'f2\'){6m-=J.2U||0;5M-=J.33||0}D 4N=Y.5L?{2t:y-5M,2B:x-6m,33:5M,2U:6m}:{2t:y,2B:x};B(9E){q.1i(9E,4N);C l}N{C 4N}};(u($){$.L.f4=q.L.9F=u(s){B(!($.18.1z&&U 7U==\'u\'))C l;s=$.1i({2t:\'44\',2B:\'44\',2c:\'44\',1g:\'44\',1J:11,3G:\'f5:1a;\'},s||{});D 12=u(n){C n&&n.1Y==5K?n+\'2q\':n},2m=\'<ch 4L="9F"f6="0"f7="-1"3G="\'+s.3G+\'"\'+\'1D="1H:3Y;1X:3W;z-2V:-1;\'+(s.1J!==1a?\'1x:f8(f9=\\\'0\\\');\':\'\')+\'2t:\'+(s.2t==\'44\'?\'7S(((1b(l.1t.6p.4n)||0)*-1)+\\\'2q\\\')\':12(s.2t))+\';\'+\'2B:\'+(s.2B==\'44\'?\'7S(((1b(l.1t.6p.49)||0)*-1)+\\\'2q\\\')\':12(s.2B))+\';\'+\'2c:\'+(s.2c==\'44\'?\'7S(l.1t.46+\\\'2q\\\')\':12(s.2c))+\';\'+\'1g:\'+(s.1g==\'44\'?\'7S(l.1t.2X+\\\'2q\\\')\':12(s.1g))+\';\'+\'"/>\';C l.16(u(){B(!$(\'ch.9F\',l)[0])l.5x(V.9G(2m),l.22)})}})(q);(u($){$.1i({1W:{ck:0}});$.L.1W=u(2I,F){B(U 2I==\'45\')F=2I;F=$.1i({2I:(2I&&U 2I==\'3l\'&&2I>0)?--2I:0,3o:19,3v:$.61?11:1a,4y:1a,cj:\'4y-3T-\',9W:19,9V:19,9X:19,9Y:19,9U:\'b3\',cp:19,cr:19,cm:1a,66:19,6x:19,5H:19,7V:\'1W-2i\',4s:\'1W-3t\',6v:\'1W-3o\',6r:\'1W-1S\',8g:\'1W-1w\',8l:\'1W-fc\',cl:\'26\'},F||{});$.18.7Z=$.18.7Z||$.18.1z&&U 7U==\'u\';u 9J(){a3(0,0)}C l.16(u(){D 1S=l;D 2i=$(\'6E.\'+F.7V,1S);2i=2i.4z()&&2i||$(\'>6E:eq(0)\',1S);D 1W=$(\'a\',2i);B(F.4y){D 8j={};1W.16(u(){$(l).2m(\'<42>\'+$(l).2m()+\'</42>\');D T=F.cj+(++$.1W.ck);D 21=\'#\'+T;8j[21]=l.47;l.47=21;$(\'<26 T="\'+T+\'" 4L="\'+F.6r+\'"></26>\').5N(1S)})}D 2u=$(\'26.\'+F.6r,1S);2u=2u.4z()&&2u||$(\'>\'+F.cl,1S);2i.2Z(\'.\'+F.7V)||2i.2L(F.7V);2u.16(u(){D $$=$(l);$$.2Z(\'.\'+F.6r)||$$.2L(F.6r)});D 9I=$(\'1C\',2i).2V($(\'1C.\'+F.4s,2i)[0]);B(9I>=0){F.2I=9I}B(5D.21){1W.16(u(i){B(l.21==5D.21){F.2I=i;B(($.18.1z||$.18.3A)&&!F.4y){D 1T=$(5D.21);D 8c=1T.1s(\'T\');1T.1s(\'T\',\'\');3q(u(){1T.1s(\'T\',8c)},fd)}9J();C 1a}})}B($.18.1z){9J()}2u.1x(\':eq(\'+F.2I+\')\').1B().3f().2f(\':eq(\'+F.2I+\')\').2L(F.8g);B(!F.4y){$(\'1C\',2i).3p(F.4s).eq(F.2I).2L(F.4s)}B(F.cm){D 9R=u(2P){D 9N=$.4I(2u.2S(),u(el){D h,9M=$(el);B(2P){B($.18.7Z){el.1D.fe(\'cn\');el.1D.1g=\'\';el.81=19}h=9M.K({\'4C-1g\':\'\'}).1g()}N{h=9M.1g()}C h}).fg(u(a,b){C b-a});B($.18.7Z){2u.16(u(){l.81=9N[0]+\'2q\';l.1D.fi(\'cn\',\'l.1D.1g = l.81 ? l.81 : "5b"\')})}N{2u.K({\'4C-1g\':9N[0]+\'2q\'})}};9R();D 85=1S.46;D 9S=1S.2X;D 9Q=$(\'#1W-co-9O-4z\').2S(0)||$(\'<42 T="1W-co-9O-4z">M</42>\').K({1H:\'3Y\',1X:\'3W\',84:\'2v\'}).5N(V.1K).2S(0);D 87=9Q.2X;6t(u(){D 86=1S.46;D 9T=1S.2X;D 88=9Q.2X;B(9T>9S||86!=85||88!=87){9R((86>85||88<87));85=86;9S=9T;87=88}},50)}D 5G={},5f={},a1=F.cp||F.9U,a0=F.cr||F.9U;B(F.9V||F.9W){B(F.9V){5G[\'1g\']=\'1B\';5f[\'1g\']=\'1w\'}B(F.9W){5G[\'1J\']=\'1B\';5f[\'1J\']=\'1w\'}}N{B(F.9X){5G=F.9X}N{5G[\'4C-2c\']=0;a1=F.3v?50:1}B(F.9Y){5f=F.9Y}N{5f[\'4C-2c\']=0;a0=F.3v?50:1}}D 66=F.66,6x=F.6x,5H=F.5H;1W.2E(\'a8\',u(){D 1C=$(l).3K(\'1C:eq(0)\');B(1S.6y||1C.2Z(\'.\'+F.4s)||1C.2Z(\'.\'+F.6v)){C 1a}D 21=l.21;B($.18.1z){$(l).2e(\'31\');B(F.3v){$.61.4g(21);5D.21=21.1N(\'#\',\'\')}}N B($.18.3b){D cu=$(\'<1U cs="\'+21+\'"><26><3Z H="3X" G="h" /></26></1U>\').2S(0);cu.3X();$(l).2e(\'31\');B(F.3v){$.61.4g(21)}}N{B(F.3v){5D.21=21.1N(\'#\',\'\')}N{$(l).2e(\'31\')}}});1W.2E(\'8n\',u(){D 1C=$(l).3K(\'1C:eq(0)\');B($.18.3b){1C.2T({1J:0},1,u(){1C.K({1J:\'\'})})}1C.2L(F.6v)});B(F.3o&&F.3o.I){W(D i=0,k=F.3o.I;i<k;i++){1W.eq(--F.3o[i]).2e(\'8n\').3f()}};1W.2E(\'a9\',u(){D 1C=$(l).3K(\'1C:eq(0)\');1C.3p(F.6v);B($.18.3b){1C.2T({1J:1},1,u(){1C.K({1J:\'\'})})}});1W.2E(\'31\',u(e){D 6B=e.9Z;D 4x=l,1C=$(l).3K(\'1C:eq(0)\'),1T=$(l.21),2o=2u.1x(\':3h\');B((U 66==\'u\'&&66(l,1T[0],2o[0])==1a&&6B)||1S.6y||1C.2Z(\'.\'+F.4s)||1C.2Z(\'.\'+F.6v)){l.8m();C 1a}1S[\'6y\']=11;B(1T.4z()){B($.18.1z&&F.3v){D 8c=l.21.1N(\'#\',\'\');1T.1s(\'T\',\'\');3q(u(){1T.1s(\'T\',8c)},0)}u 8k(){B(F.3v&&6B){$.61.4g(4x.21)}2o.2T(5f,a0,u(){$(4x).3K(\'1C:eq(0)\').2L(F.4s).cz().3p(F.4s);B(U 6x==\'u\'){6x(4x,1T[0],2o[0])}2o.2L(F.8g).K({1H:\'\',4v:\'\',1g:\'\',1J:\'\'});1T.3p(F.8g).2T(5G,a1,u(){1T.K({4v:\'\',1g:\'\',1J:\'\'});B($.18.1z){2o[0].1D.1x=\'\';1T[0].1D.1x=\'\'}B(U 5H==\'u\'){5H(4x,1T[0],2o[0])}1S.6y=19})})}B(!F.4y){8k()}N{D $$=$(l),42=$(\'42\',l)[0],1L=42.3R;$$.2L(F.8l);42.3R=\'cC&#cD;\';3q(u(){$(4x.21).4w(8j[4x.21],u(){8k();42.3R=1L;$$.3p(F.8l)})},0)}}N{7F(\'cE 2Z 99 cG 1S.\')}D a4=1e.8O||V.38&&V.38.2U||V.1K.2U||0;D a5=1e.8L||V.38&&V.38.33||V.1K.33||0;3q(u(){1e.a3(a4,a5)},0);l.8m();C F.3v&&!!6B});B(F.4y){1W.eq(F.2I).2e(\'31\').3f()}B(F.3v){$.61.cH(u(){1W.eq(F.2I).2e(\'31\').3f()})}})};D 6F=[\'a8\',\'8n\',\'a9\'];W(D i=0;i<6F.I;i++){$.L[6F[i]]=(u(ab){C u(3T){C l.16(u(){D 2i=$(\'6E.1W-2i\',l);2i=2i.4z()&&2i||$(\'>6E:eq(0)\',l);D a;B(!3T||U 3T==\'3l\'){a=$(\'1C a\',2i).eq((3T&&3T>0&&3T-1||0))}N B(U 3T==\'1R\'){a=$(\'1C a[@47$="#\'+3T+\'"]\',2i)}a.2e(ab)})}})(6F[i])}})(q);q.1i(q.L,{b1:u(Y){D O=1P q.O(Y,l[0]);O.1v=l.3i(":3Z:2f(:3X):2f(:2P)").4P(u(){O.4l=l});B(O.F.7j){l.3X(u(Q){B(O.F.3m)Q.43();C O.1U()})}B(O.F.Q){O.1v.2E(O.F.Q,u(){O.E(l)})}C O},1y:u(t){C l.7d(q.40(l.2S(),t))},5e:u(T){C l.1x("[@W=\'"+T+"\']")}});q.1i(q.2r[":"],{ba:"!q.3d(a.G)",bb:"!!q.3d(a.G)"});q.O=u(Y,1U){l.F=q.1i({},q.O.4m,Y);l.5A=1U;l.4k=l.F.5v;l.77=l.4k.I&&l.4k||q(1U);l.2u=l.F.7h.2k(l.F.5v);l.2P()};q.1i(q.O,{4m:{3y:{},39:"1m",82:11,7h:q([]),5v:q([]),7j:11},bd:u(F){q.1i(q.O.4m,F)},3y:{1l:"bf bg 2Z 1l.",6P:"1F 1G a G 99 bj bm {0} 5n.",7P:"1F 1G a G bn at bo {0} 5n.",7K:"1F 1G a G 7g {0} 7y {1} 5n bq.",5k:"1F 1G a 2R 5k bs.",1q:"1F 1G a 2R bu.",2p:"1F 1G a 2R 2p.",71:"1F 1G a 2R 2p (bv).",70:"7s 7t 7u 5p bx¼bz bB 5p.",3l:"1F 1G a 2R 3l.",6Z:"7s 7t 7u bJ bL 5p.",56:"1F 1G 9i 56",73:"1F 1G 7L bN G bP.",6R:"1F 1G a G 7g {0} 7y {1}.",6Q:"1F 1G a G bU 7a 4B 7D 3J {0}.",7J:"1F 1G a G bW 7a 4B 7D 3J {0}."},5F:{1U:u(){l.58();W(D i=0,E;E=l.1v[i++];){l.4e(E)}C l.2R()},E:u(E){l.6Y(E);l.4e(E);l.3I()},3I:u(2Q){B(2Q)q.1i(l.2x,2Q);l.F.3I?l.F.3I(l.2x,l):l.80()},5s:u(){B(q.L.5s)q(l.5A).5s();l.58();l.5z();l.1v.3p(l.F.39)},3w:u(7E){C q(7E)[0]},2Q:u(){C q("8d."+l.F.39,l.77)},2P:u(E){l.2x={};l.1T=$([]);l.2o=$([])},58:u(){l.2P();l.2o=l.2Q().1y(l.2u);l.1T.1y(l.2u)},6Y:u(E){l.2P();l.2o=l.2Q().5e(l.48(l.3w(E)))},4e:u(E){E=l.3w(E);q(E).3p(l.F.39);D 25=l.25(E);W(D i=0,1O;1O=25[i++];){3F{D 2b=q.O.1k[1O.2a](q.3d(E.G),E,1O.4T);B(2b===-1)30;B(!2b){q(E).2L(l.F.39);l.7N(1O,E);30}}3E(e){l.F.3m&&1e.2Y&&2Y.1m("c7 c8 c9 cb E "+E.T+", 4e 7L \'"+1O.2a+"\' 2a");9D e}}},1Z:u(T,1O){D m=l.F.3y[T];C m&&(m.1Y==2F?m:m[1O.2a])},7N:u(1O,E){D T=l.48(E),P=1O.4T;l.2x[T]=(E.3N||l.1Z(T,1O)||q.O.3y[1O.2a]||"<7R>cd: ce 1Z cf W "+T+"</7R>").1N("{0}",(P.1Y==3H?P[0]:P)||"").1N("{1}",P[1]||"")},2R:u(){B(l.83()){l.3I();C 1a}N{l.5z();B(l.F.7T){l.F.7T(l.5A);C 1a}C 11}},83:u(){D 4R=0;q.16(l.2x,u(){4R++});C 4R},5z:u(){l.3c("89")},3c:u(5u){D 3k=l;u 4q(){C 3k["3J"+5u]}B(l.F.4u){4q().1y(4q().3K(l.F.4u))}4q()[5u.2n()]();C l},80:u(){D 2s=11;W(D 4r 28 l.2x){B(2s&&l.F.82){B(l.4l&&l.2x[l.4l.T])l.4l.4P();N{3F{D E=q("#"+4r);B(E.I)E[0].4P()}3E(e){l.F.3m&&1e.2Y&&2Y.1m(e)}}2s=1a}l.8a(4r,l.2x[4r])}l.2o=l.2o.2f(l.1T);l.3c("89").3c("cv")},8a:u(T,1Z){D 1m=l.2Q().5e(T);B(1m.I){B(1m.1s("8e")){1m.2m(1Z)}}N{1m=q("<8d>").1s({"W":T,8e:11}).2L(l.F.39).2m(1Z);B(l.F.4u){1m=1m.1w().1B().4t("<"+l.F.4u+">").1o()}B(!l.4k.3M(1m).I)l.F.6z?l.F.6z(1m,q("#"+T)):1m.8i("#"+T)}l.1T.1y(1m)},25:u(E){B(!l.S(E))C[];D 25=[];q.16(l.S(E),u(2N,G){25[25.I]={2a:2N,4T:G}});C 25},S:u(E){C l.F.25?l.F.25[l.48(E)]:l.F.6A?q(E).S()[l.F.6A]:q(E).S()},48:u(E){D T=(/3S|4f/i.1j(E.H))?E.1f:E.T;B(!T){D 4U=E.1U.T,4S=/[^a-a6-2C-9\\-5I]/g;T=E.T=(4U?4U.1N(4S,""):"")+E.1f.1N(4S,"")}C T}},3x:u(G,E){5a(E.1I.2n()){3a\'3B\':C q("2l:3t",E).I;3a\'3Z\':B(/3S|4f/i.1j(E.H))C q(E.1U||V).3i(\'[@1f="\'+E.1f+\'"]:4M\').I}C G.I},7p:u(P,E){C l.5C[U P]?l.5C[U P](P,E):11},5C:{"68":u(P,E){C P},"1R":u(P,E){C!!q(P,E.1U).I},"u":u(P,E){C P(E)}},1k:{1l:u(G,E,P){B(!q.O.7p(P,E))C-1;5a(E.1I.2n()){3a\'3B\':D Y=q("2l:3t",E);C Y.I>0&&(E.H=="3B-ae"||Y[0].G.I>0);3a\'3Z\':5a(E.H.2n()){3a\'4f\':3a\'3S\':C q.O.3x(G,E)>0}am:C G.I>0}},ap:u(G,E,P){C!q.O.1k.1l(G,E)||P.1j(G)},7P:u(G,E,P){D I=q.O.3x(G,E);C!q.O.1k.1l(G,E)||I>=P},6P:u(G,E,P){D I=q.O.3x(G,E);C!q.O.1k.1l(G,E)||I<=P},7K:u(G,E,P){D I=q.O.3x(G,E);C!q.O.1k.1l(G,E)||(I>=P[0]&&I<=P[1])},7J:u(G,E,P){C!q.O.1k.1l(G,E)||G>=P},6Q:u(G,E,P){C!q.O.1k.1l(G,E)||G<=P},6R:u(G,E,P){C!q.O.1k.1l(G,E)||(G>=P[0]&&G<=P[1])},5k:u(G,E){C!q.O.1k.1l(G,E)||/^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$/i.1j(G)},1q:u(G,E){C!q.O.1k.1l(G,E)||/^(aB?|aC):\\/\\/[A-2C-9](\\.?[A-2C-5j„1uœ1u–][A-2C-5i\\-1u„1uœ1u–]*)*(\\/([A-2C-5j„1uœ1u–][A-2C-5i\\-\\.1u„1uœ1u–]*)?)*(\\?([A-2C-5j„1uœ1u–][A-2C-5i\\-\\.%\\+=&1u„1uœ1u–]*)?)?$/i.1j(G)},2p:u(G,E){C!q.O.1k.1l(G,E)||!/aT|8I/.1j(1P 57(G))},71:u(G,E){C!q.O.1k.1l(G,E)||/^\\d{4}[/-]\\d{1,2}[/-]\\d{1,2}$/.1j(G)},70:u(G,E){C!q.O.1k.1l(G,E)||/^\\d\\d?\\.\\d\\d?\\.\\d\\d\\d?\\d?$/.1j(G)},3l:u(G,E){C!q.O.1k.1l(G,E)||/^-?[,0-9]+(\\.\\d+)?$/.1j(G)},6Z:u(G,E){C!q.O.1k.1l(G,E)||/^-?[\\.0-9]+(,\\d+)?$/.1j(G)},56:u(G,E){C!q.O.1k.1l(G,E)||/^\\d+$/.1j(G)},73:u(G,E,P){C G==q(""+P).1Q()}},aU:u(1f,2a,1Z){q.O.1k[1f]=2a;q.O.3y[1f]=1Z}});(u(){u 2k(1f,2a){B(!3H.5F[1f]){3H.5F[1f]=2a}};2k("cM",u(1A,27){27=27||1e;W(D i=0;i<l.I;i++)1A.3V(27,l[i],i,l)});2k("cO",u(1A,27){27=27||1e;W(D i=0;i<l.I;i++)B(!1A.3V(27,l[i],i,l))C 1a;C 11});2k("cP",u(1A,27){27=27||1e;W(D i=0;i<l.I;i++)B(1A.3V(27,l[i],i,l))C 11;C 1a});2k("4I",u(1A,27){27=27||1e;D r=[];W(D i=0;i<l.I;i++)r[r.I]=1A.3V(27,l[i],i,l);C r});2k("1x",u(1A,27){27=27||1e;D r=[];W(D i=0;i<l.I;i++)B(1A.3V(27,l[i],i,l))r[r.I]=l[i];C r});2k("1M",u(ad,8r){W(D i=8r||0;i<l.I;i++)B(l[i]===ad)C i;C-1});2k("8s",u(){C l.1x(u(E,2V,8U){C 8U.1M(E)>=2V})})})();(u($){D 2j,6o,3s,7G,29,8R,62;$.L.aW=u(F){F=$.1i({},17.cX.4m,F);B(!2j){2j=$(\'<26 T="cZ"><8y></8y><p 4L="1K"></p><p 4L="1q"></p></26>\').1w().K({1X:\'3W\',d0:"d1"}).5N(\'1K\');6o=$(\'8y\',2j);3s=$(\'p.1K\',2j);7G=$(\'p.1q\',2j)}$(l).1x(\'[@3N]\').16(u(){l.3u=F}).2E("5E",ah).2E(F.Q,6H);C l};u 6H(Q){B(l.3u.8Z)62=3q(1B,l.3u.8Z);N 1B();B(l.3u.aZ)$(\'1K\').2E(\'9a\',4g);4g(Q);B(l.3u.Q!="31")$(l).2E(\'31\',1w);$(l).2E(\'6U\',1w)}u ah(){B(l==29||!l.3N)C;29=l;D 6g=$(l),F=l.3u;D 3N=8R=6g.1s(\'3N\');6g.1s(\'3N\',\'\');B(F.aj){6o.1w();3s.2m(F.aj.3V(l)).1B()}N B(F.90){D 8b=3N.4E(F.90);B(8b.I>1)6o.2m(8b.7W()).1B();3s.6s();W(D i=0,9H;9H=8b[i];i++){B(i>0)3s.3M("<br/>");3s.3M(9H)}B(3s.2m())3s.1B();N 3s.1w()}N{6o.2m(3N);3s.1w()}D 47=(6g.1s(\'47\')||6g.1s(\'3G\'));B(F.b0&&47)7G.2m(47.1N(\'dh://\',\'\')).1B();N 7G.1w();B(F.64){2j.2L(F.64)}B(F.92&&$.18.1z&&/aR\\s(?:5\\.5|6\\.)/.1j(8V.8W)){2j.16(u(){D 5r=$(l).K(\'8X\');B(5r.2H(/^1q\\(["\'](.*\\.dj)["\']\\)$/i)){5r=4K.$1;$(l).K({\'8X\':\'2A\',\'1x\':"dl:dm.ax.dq(ay=11, ds=dt, 3G=\'"+5r+"\')"});$(l).16(u(){D 1X=$(l).K(\'1X\');B(1X!=\'3W\'&&1X!=\'5y\')$(l).K(\'1X\',\'5y\')})}})}}u 1B(){62=19;2j.1B();4g()}u 4g(Q){B(29==19){$(\'1K\').5Q(\'9a\',4g);C}D 2B=2j[0].8D;D 2t=2j[0].8G;B(Q){2B=Q.8B+15;2t=Q.aD+15;2j.K({2B:2B+\'2q\',2t:2t+\'2q\'})}D v=aI(),h=2j[0];B(v.x+v.cx<h.8D+h.46){2B-=h.46+20;2j.K({2B:2B+\'2q\'})}B(v.y+v.cy<h.8G+h.2X){2t-=h.2X+20;2j.K({2t:2t+\'2q\'})}}u aI(){D e=V.38||{},b=V.1K||{},w=1e;u 4C(){D v=dx;W(D i=0;i<17.I;i++){D n=17[i];B(n&&n<v)v=n}C v}C{x:w.8O||e.2U||b.2U||0,y:w.8L||e.33||b.33||0,cx:4C(e.5X,b.5X,w.8M),cy:4C(e.4h,b.4h,w.5Z)}}u 1w(Q){B(62)ak(62);29=19;2j.1w();B(l.3u.64){2j.3p(l.3u.64)}B(Q.H!="31"){$(l).1s(\'3N\',8R);$(l).5Q(\'6U\',1w)}B(l.3u.Q!="31")$(l).5Q(\'31\',1w);B(l.3u.92&&$.18.1z&&/aR\\s(5\\.5|6\\.)/.1j(8V.8W)){2j.16(u(){$(l).K({\'1x\':\'\',8X:\'\'})})}}$.L.aW.4m={8Z:e8,Q:"5E",aZ:1a,b0:11,90:19,64:19,92:1a}})(q);q.1i(q.L,{b1:u(Y){D O=1P q.O(Y,l[0]);O.1v=l.3i(":3Z:2f(:3X):2f(:2P)").4P(u(){O.4l=l});B(O.F.7j){l.3X(u(Q){B(O.F.3m)Q.43();C O.1U()})}B(O.F.Q){O.1v.2E(O.F.Q,u(){O.E(l)})}C O},1y:u(t){C l.7d(q.40(l.2S(),t))},5e:u(T){C l.1x("[@W=\'"+T+"\']")}});q.1i(q.2r[":"],{ba:"!q.3d(a.G)",bb:"!!q.3d(a.G)"});q.O=u(Y,1U){l.F=q.1i({},q.O.4m,Y);l.5A=1U;l.4k=l.F.5v;l.77=l.4k.I&&l.4k||q(1U);l.2u=l.F.7h.2k(l.F.5v);l.2P()};q.1i(q.O,{4m:{3y:{},39:"1m",82:11,7h:q([]),5v:q([]),7j:11},bd:u(F){q.1i(q.O.4m,F)},3y:{1l:"bf bg 2Z 1l.",6P:"1F 1G a G 99 bj bm {0} 5n.",7P:"1F 1G a G bn at bo {0} 5n.",7K:"1F 1G a G 7g {0} 7y {1} 5n bq.",5k:"1F 1G a 2R 5k bs.",1q:"1F 1G a 2R bu.",2p:"1F 1G a 2R 2p.",71:"1F 1G a 2R 2p (bv).",70:"7s 7t 7u 5p bx¼bz bB 5p.",3l:"1F 1G a 2R 3l.",6Z:"7s 7t 7u bJ bL 5p.",56:"1F 1G 9i 56",73:"1F 1G 7L bN G bP.",6R:"1F 1G a G 7g {0} 7y {1}.",6Q:"1F 1G a G bU 7a 4B 7D 3J {0}.",7J:"1F 1G a G bW 7a 4B 7D 3J {0}."},5F:{1U:u(){l.58();W(D i=0,E;E=l.1v[i++];){l.4e(E)}C l.2R()},E:u(E){l.6Y(E);l.4e(E);l.3I()},3I:u(2Q){B(2Q)q.1i(l.2x,2Q);l.F.3I?l.F.3I(l.2x,l):l.80()},5s:u(){B(q.L.5s)q(l.5A).5s();l.58();l.5z();l.1v.3p(l.F.39)},3w:u(7E){C q(7E)[0]},2Q:u(){C q("8d."+l.F.39,l.77)},2P:u(E){l.2x={};l.1T=$([]);l.2o=$([])},58:u(){l.2P();l.2o=l.2Q().1y(l.2u);l.1T.1y(l.2u)},6Y:u(E){l.2P();l.2o=l.2Q().5e(l.48(l.3w(E)))},4e:u(E){E=l.3w(E);q(E).3p(l.F.39);D 25=l.25(E);W(D i=0,1O;1O=25[i++];){3F{D 2b=q.O.1k[1O.2a](q.3d(E.G),E,1O.4T);B(2b===-1)30;B(!2b){q(E).2L(l.F.39);l.7N(1O,E);30}}3E(e){l.F.3m&&1e.2Y&&2Y.1m("c7 c8 c9 cb E "+E.T+", 4e 7L \'"+1O.2a+"\' 2a");9D e}}},1Z:u(T,1O){D m=l.F.3y[T];C m&&(m.1Y==2F?m:m[1O.2a])},7N:u(1O,E){D T=l.48(E),P=1O.4T;l.2x[T]=(E.3N||l.1Z(T,1O)||q.O.3y[1O.2a]||"<7R>cd: ce 1Z cf W "+T+"</7R>").1N("{0}",(P.1Y==3H?P[0]:P)||"").1N("{1}",P[1]||"")},2R:u(){B(l.83()){l.3I();C 1a}N{l.5z();B(l.F.7T){l.F.7T(l.5A);C 1a}C 11}},83:u(){D 4R=0;q.16(l.2x,u(){4R++});C 4R},5z:u(){l.3c("89")},3c:u(5u){D 3k=l;u 4q(){C 3k["3J"+5u]}B(l.F.4u){4q().1y(4q().3K(l.F.4u))}4q()[5u.2n()]();C l},80:u(){D 2s=11;W(D 4r 28 l.2x){B(2s&&l.F.82){B(l.4l&&l.2x[l.4l.T])l.4l.4P();N{3F{D E=q("#"+4r);B(E.I)E[0].4P()}3E(e){l.F.3m&&1e.2Y&&2Y.1m(e)}}2s=1a}l.8a(4r,l.2x[4r])}l.2o=l.2o.2f(l.1T);l.3c("89").3c("cv")},8a:u(T,1Z){D 1m=l.2Q().5e(T);B(1m.I){B(1m.1s("8e")){1m.2m(1Z)}}N{1m=q("<8d>").1s({"W":T,8e:11}).2L(l.F.39).2m(1Z);B(l.F.4u){1m=1m.1w().1B().4t("<"+l.F.4u+">").1o()}B(!l.4k.3M(1m).I)l.F.6z?l.F.6z(1m,q("#"+T)):1m.8i("#"+T)}l.1T.1y(1m)},25:u(E){B(!l.S(E))C[];D 25=[];q.16(l.S(E),u(2N,G){25[25.I]={2a:2N,4T:G}});C 25},S:u(E){C l.F.25?l.F.25[l.48(E)]:l.F.6A?q(E).S()[l.F.6A]:q(E).S()},48:u(E){D T=(/3S|4f/i.1j(E.H))?E.1f:E.T;B(!T){D 4U=E.1U.T,4S=/[^a-a6-2C-9\\-5I]/g;T=E.T=(4U?4U.1N(4S,""):"")+E.1f.1N(4S,"")}C T}},3x:u(G,E){5a(E.1I.2n()){3a\'3B\':C q("2l:3t",E).I;3a\'3Z\':B(/3S|4f/i.1j(E.H))C q(E.1U||V).3i(\'[@1f="\'+E.1f+\'"]:4M\').I}C G.I},7p:u(P,E){C l.5C[U P]?l.5C[U P](P,E):11},5C:{"68":u(P,E){C P},"1R":u(P,E){C!!q(P,E.1U).I},"u":u(P,E){C P(E)}},1k:{1l:u(G,E,P){B(!q.O.7p(P,E))C-1;5a(E.1I.2n()){3a\'3B\':D Y=q("2l:3t",E);C Y.I>0&&(E.H=="3B-ae"||Y[0].G.I>0);3a\'3Z\':5a(E.H.2n()){3a\'4f\':3a\'3S\':C q.O.3x(G,E)>0}am:C G.I>0}},ap:u(G,E,P){C!q.O.1k.1l(G,E)||P.1j(G)},7P:u(G,E,P){D I=q.O.3x(G,E);C!q.O.1k.1l(G,E)||I>=P},6P:u(G,E,P){D I=q.O.3x(G,E);C!q.O.1k.1l(G,E)||I<=P},7K:u(G,E,P){D I=q.O.3x(G,E);C!q.O.1k.1l(G,E)||(I>=P[0]&&I<=P[1])},7J:u(G,E,P){C!q.O.1k.1l(G,E)||G>=P},6Q:u(G,E,P){C!q.O.1k.1l(G,E)||G<=P},6R:u(G,E,P){C!q.O.1k.1l(G,E)||(G>=P[0]&&G<=P[1])},5k:u(G,E){C!q.O.1k.1l(G,E)||/^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$/i.1j(G)},1q:u(G,E){C!q.O.1k.1l(G,E)||/^(aB?|aC):\\/\\/[A-2C-9](\\.?[A-2C-5j„1uœ1u–][A-2C-5i\\-1u„1uœ1u–]*)*(\\/([A-2C-5j„1uœ1u–][A-2C-5i\\-\\.1u„1uœ1u–]*)?)*(\\?([A-2C-5j„1uœ1u–][A-2C-5i\\-\\.%\\+=&1u„1uœ1u–]*)?)?$/i.1j(G)},2p:u(G,E){C!q.O.1k.1l(G,E)||!/aT|8I/.1j(1P 57(G))},71:u(G,E){C!q.O.1k.1l(G,E)||/^\\d{4}[/-]\\d{1,2}[/-]\\d{1,2}$/.1j(G)},70:u(G,E){C!q.O.1k.1l(G,E)||/^\\d\\d?\\.\\d\\d?\\.\\d\\d\\d?\\d?$/.1j(G)},3l:u(G,E){C!q.O.1k.1l(G,E)||/^-?[,0-9]+(\\.\\d+)?$/.1j(G)},6Z:u(G,E){C!q.O.1k.1l(G,E)||/^-?[\\.0-9]+(,\\d+)?$/.1j(G)},56:u(G,E){C!q.O.1k.1l(G,E)||/^\\d+$/.1j(G)},73:u(G,E,P){C G==q(""+P).1Q()}},aU:u(1f,2a,1Z){q.O.1k[1f]=2a;q.O.3y[1f]=1Z}});(u($){$.L.2h=u(Y){C l.16(u(){$.2h(l,Y)})};$.2h=u(1S,Y){D F={\'5h\':19,\'2h\':\'6j\',\'32\':ea,\'7o\':\'9n\',\'1p\':\'b3\',\'4L\':\'2h\',\'1g\':\'44\'};B(Y)$.1i(F,Y);B(F.5h===19)D 1v=$(1S).5h();N D 1v=$(1S).5h(F.5h);B(1v.I>1){$(1S).K(\'1X\',\'5y\');$(1S).K(\'1g\',F["1g"]);$(1S).2L(F["4L"]);W(D i=0;i<1v.I;i++){$(1v[i]).K(\'z-2V\',2F(1v.I-i));$(1v[i]).K(\'1X\',\'3W\');$(1v[i]).1w()};B(F["2h"]=="6j"){3q(u(){$.2h.7M(1v,F,1,0)},F.32);$(1v[0]).1B()}N B(F["2h"]=="52"){3q(u(){do{29=4c.bX(4c.52()*1v.I)}2K(29==0)$.2h.7M(1v,F,29,0)},F.32);$(1v[0]).1B()}N 7F(\'q: 2h: 9t "2h" 9w 9x be "6j" 4B "52"\')}};$.2h.7M=u(1v,F,29,2w){B(F["7o"]==\'bS\'){$(1v[2w]).bA(F.1p,$(1v[29]).bD(F.1p))}N B(F["7o"]==\'9n\'){$(1v[2w]).bH(F.1p);$(1v[29]).bM(F.1p)}N 7F(\'q: 2h: 9t "7o" 9w 9x be "bS" 4B "9n"\');B(F["2h"]=="6j"){B((29+1)<1v.I){29=29+1;2w=29-1}N{29=0;2w=1v.I-1}}N B(F["2h"]=="52"){2w=29;2K(29==2w)29=4c.bX(4c.52()*1v.I)}N 7F(\'q: 2h: 9t "2h" 9w 9x be "6j" 4B "52"\');3q((u(){$.2h.7M(1v,F,29,2w)}),F.32)}})(q);(u($){$.3L=u(){l.41={};C};$.3L.5F={5W:u(){D R={"T":19,"4Q":4i,"6G":1a,"6C":1a,"14":19,"35":u(){},"23":[]};u 5J(L){C(!!L&&U L!="1R"&&U L[0]=="1c"&&4K("u","i").1j(L+""))};D i=0;D 9L=1a;B(U 17[i]=="45"&&17.I>1){9L=11;i++}B(U 17[i]=="45"){W(D 2l 28 17[i])B(U R[2l]!="1c")R[2l]=17[i][2l];i++}B(U 17[i]=="3l"||(U 17[i]=="1R"&&17[i].2H(4K("^[0-9]+[cq]$"))))R["4Q"]=17[i++];B(U 17[i]=="68")R["6G"]=17[i++];B(U 17[i]=="68")R["6C"]=17[i++];B(U 17[i]=="45"&&U 17[i+1]=="1R"&&5J(17[i][17[i+1]])){R["14"]=17[i++];R["35"]=17[i++]}N B(U 17[i]!="1c"&&(5J(17[i])||U 17[i]=="1R"))R["35"]=17[i++];2K(U 17[i]!="1c")R["23"].1y(17[i++]);B(9L){B(U 17[1]=="45"){W(D 2l 28 17[0])B(U R[2l]!="1c"&&U 17[1][2l]=="1c")R[2l]=17[0][2l]}N{W(D 2l 28 17[0])B(U R[2l]!="1c")R[2l]=17[0][2l]}i++}R["7i"]=l;R["7O"]=19;D 2H=2F(R["4Q"]).2H(4K("^([0-9]+)([cq])$"));B(2H&&2H[0]!="1c"&&2H[1]!="1c")R["4Q"]=2F(1b(2H[1])*{s:4i,m:4i*60,h:4i*60*60,d:4i*60*60*24,w:4i*60*60*24*7}[2H[2]]);B(R["T"]==19)R["T"]=(2F(R["6G"])+":"+2F(R["6C"])+":"+2F(R["4Q"])+":"+2F(R["14"])+":"+2F(R["35"])+":"+2F(R["23"]));B(R["6C"])B(U l.41[R["T"]]!="1c")C l.41[R["T"]];B(!5J(R["35"])){B(R["14"]!=19&&U R["14"]=="45"&&U R["35"]=="1R"&&5J(R["14"][R["35"]]))R["35"]=R["14"][R["35"]];N R["35"]=6D("u () { "+R["35"]+" }")}R["7O"]=l.7z(R);l.41[R["T"]]=R;C R},8C:u(R){B(U R=="1R")R=l.41[R];R["7O"]=l.7z(R);C R},7z:u(R){D ac=u(){D 14=(R["14"]!=19?R["14"]:R);(R["35"]).1E(14,R["23"]);B(U(R["7i"]).41[R["T"]]!="1c"&&R["6G"])(R["7i"]).7z(R);N 6q(R["7i"]).41[R["T"]]};C 3q(ac,R["4Q"])},8F:u(R){B(U R=="1R")R=l.41[R];B(U R=="45"){ak(R["7O"]);6q l.41[R["T"]]}}};$.1i({3L$:1P $.3L(),5W:u(){C $.3L$.5W.1E($.3L$,17)},8C:u(){C $.3L$.8C.1E($.3L$,17)},8F:u(){C $.3L$.8F.1E($.3L$,17)}});$.L.1i({5W:u(){D a=[{}];W(D i=0;i<17.I;i++)a.1y(17[i]);C l.16(u(){a[0]={"T":l,"14":l};C $.5W.1E($,a)})}})})(q);(u($){$.1i({5q$:19,3m:u(aN){D aQ=($.5q$==11?11:1a);$.5q$=(aN?11:1a);C aQ},67:u(1Z){B($.5q$==11)2Y.3m(1Z)}});$.L.1i({67:u(1Z){B($.5q$==11){C l.16(u(){B(U 1Z!=="1c")$.67(1Z);$.67(l)})}}});$(V).36(u(){D 7Q=$("2m").1s("3m");B(7Q=="11"||7Q=="1a")$.3m(7Q=="11"?11:1a)});$(V).36(u(){B(U 1e.2Y==="1c"){u cw(14){D 1L=19;B(U 14==="1c")1L="[1c]";N B(U 14==="68")1L=(14?"11":"1a");N B(U 14==="3l")1L=""+14;N B(U 14==="1R")1L=14;N B(U 14==="u")1L=14;N B(U 14==="45"){B(U 14.34!=="1c"){B(14.34==1){1L=\'&9h;\';1L+=14.1I.2n();W(D i=0;i<14.9o.I;i++)1L+=\' \'+14.9o[i].1I.2n()+\'="\'+14.9o[i].6n+\'"\';1L+=\'&9q;\'}N B(14.34==2)1L=14.1I+\'="\'+14.6n;N B(14.34==3)1L=14.6n}N B(U 14.cg!=="1c")1L=14.cg();N B(U 14.5B!=="1c")1L=14.5B()}B(1L==19)1L="[fk]";C 1L};$(V).36(u(){$("1K").3M(\'<26 T="4H"><4A></4A></26>\');$("#4H").K("1H","2A").K("cW","d5").K("db","#dk").K("du","#dv").K("6w","72 5d 72 5d").K("5P","5Y b7 #dI").K("76","5Y 5Y 5Y 5Y");$("#4H 4A").K("76","5d 5d 5d 5d").K("93","em")});D 8T=["67","3m","eF","eK","1m","eW","6h","f3","fa","fh","4Q","fj","4R","cF","cI","cV"];1e.2Y={};W(D i=0;i<8T.I;i++){1e.2Y[8T[i]]=u(a7){$(\'#4H\').K("1H",$.5q$==11?"3Y":"2A");$(\'#4H 4A\').3M(\'<1C>\'+cw(a7)+\'</1C>\').K;$("#4H 4A 1C").K("e5","5b b7 #eM").K("6w","5b 72 5b 72")}}1e.2Y["4H"]=11}})})(q);',62,951,'|||||||||||||||||||||this|||||jQuery||||function|||||||if|return|var|element|settings|value|type|length|elem|css|fn||else|validator|param|event|ctx|data|id|typeof|document|for||options|||true|prop||obj||each|arguments|browser|null|false|parseInt|undefined|ret|window|name|height|callback|extend|test|methods|required|error|xml|parent|speed|url|cur|attr|parentNode|Ã|elements|hide|filter|push|msie|handler|show|li|style|apply|Please|enter|display|nodeName|opacity|body|text|indexOf|replace|rule|new|val|string|container|toShow|form|status|tabs|position|constructor|message||hash|firstChild|args||rules|div|scope|in|current|method|result|width|events|trigger|not|className|alternation|nav|helper|add|option|html|toLowerCase|toHide|date|px|expr|first|top|containers|hidden|last|errorList|global|expires|none|left|Z0|arg|bind|String|isFunction|match|initial|opt|while|addClass|context|key|num|reset|errors|valid|get|animate|scrollLeft|index|queue|offsetHeight|console|is|break|click|timeout|scrollTop|nodeType|func|ready|old|documentElement|errorClass|case|safari|toggle|trim|easing|end|target|visible|find|table|self|number|debug|elems|disabled|removeClass|setTimeout|params|tBody|selected|tSettings|bookmarkable|clean|getLength|messages|tbody|opera|select|nth|complete|catch|try|src|Array|showErrors|to|parents|scheduler|append|title|done|orig|ifModified|innerHTML|radio|tab|duration|call|absolute|submit|block|input|merge|bucket|span|preventDefault|auto|object|offsetWidth|href|findId|borderLeftWidth|nextSibling|cookie|Math|remove|check|checkbox|update|clientHeight|1000|script|labelContainer|lastActive|defaults|borderTopWidth|mozilla|tb|which|elementID|selectedClass|wrap|wrapper|overflow|load|clicked|remote|size|ol|or|min|pushStack|split|firstNum|encodeURIComponent|jQueryDebug|map|fix|RegExp|class|checked|returnValue|oid|focus|time|count|idcleanup|parameters|formId|cssFloat|now|curAnim|grep|timers||tmp|random|exec|oldblock|guid|digits|Date|prepareForm|stopPropagation|switch|1px|custom|0px|forId|hideAnim|res|children|9_|9Ã|email|success|sibling|characters|re|ein|_debug|image|resetForm|boxModel|that|errorLabelContainer|static|insertBefore|relative|hideErrors|currentForm|toString|dependTypes|location|mouseover|prototype|showAnim|onShow|_|_isfn|Number|scroll|st|appendTo|fx|border|unbind|childNodes|handlers|readyList|removeChild|originalEvent|schedule|clientWidth|4px|innerHeight||ajaxHistory|tID|curCSS|extraClass|on|onClick|log|boolean|onreadystatechange|ownerDocument|multiFilter|has|path|substr|makeArray|source|dir|op|sequence|re2|domManip|sl|nodeValue|tTitle|currentStyle|delete|containerClass|empty|setInterval|domain|disabledClass|padding|onHide|locked|errorPlacement|meta|trueClick|protect|eval|ul|tabEvents|repeat|handle|cloneNode|oWidth|doc|tr|styleFloat|toUpperCase|absparent|maxLength|maxValue|rangeValue|token|foundToken|mouseout|getAttribute|diff|isReady|prepareElement|numberDE|dateDE|dateISO|10px|equalTo|Function|secure|margin|errorContext|getTime|parseFloat|than|step|oldDisplay|setArray|ajax|ajaxSettings|between|errorContainer|_scheduler|onsubmit|oHeight|setRequestHeader|modRes|ival|animation|depend|handleError|async|Bitte|geben|Sie|lastModified|responseText|jquery|and|_schedule|tag|inArray|child|equal|selector|alert|tUrl|max|tagName|minValue|rangeLength|the|_next|formatAndAdd|_handle|minLength|req|strong|expression|submitHandler|XMLHttpRequest|navClass|shift|mergeNum|defaultView|msie6|defaultShowErrors|minHeight|focusInvalid|countErrors|visibility|cachedWidth|currentWidth|cachedFontSize|currentFontSize|Hide|showError|parts|toShowId|label|generated|button|hideClass|readyState|insertAfter|remoteUrls|switchTab|loadingClass|blur|disableTab|pos|startTime|parPos|offset|unique|from|float|isXMLDoc|inv|fn2|h3|unload|chars|pageX|reschedule|offsetLeft|matched|cancel|offsetTop|triggered|NaN|lastToggle|handleHover|pageYOffset|innerWidth|getElementById|pageXOffset|safariTimer|getComputedStyle|oldTitle|els|names|array|navigator|userAgent|backgroundImage|slice|delay|showBody|lastNum|fixPNG|paddingRight|GET|pass|_resort|00|classFilter|no|mousemove|dataType|requestDone|active|file|Modified|getResponseHeader|lt|only|isTimeout|evalScripts|globalEval|swap|fade|attributes|clearInterval|gt|join|cookies|parameter|substring|cookieValue|must|either|appendChild|clone|relparent|paddingLeft|paddingTop|throw|returnObject|bgiframe|createElement|part|hasSelectedClass|unFocus|second|override|jq|heights|font|deep|watchFontSize|_setAutoHeight|cachedHeight|currentHeight|fxSpeed|fxSlide|fxFade|fxShow|fxHide|clientX|hideSpeed|showSpeed|alpha|scrollTo|scrollX|scrollY|zA|msg|triggerTab|enableTab|prevObject|tabEvent|trampoline|subject|multiple|getPropertyValue|newProp|save|100|bodyHandler|clearTimeout||default|zoom|fl|regex|webkit|prepend|before||after|removeAttr|contains|Microsoft|enabled|tl|getElementsByTagName|https|ftp|pageY|parse|_prefix|even|odd|viewport|unshift|DOMContentLoaded|__ie_init|one|onoff|_toggle|state|old_value|MSIE|swing|Invalid|addMethod|dequeue|Tooltip|timer|oldOverflow|track|showURL|validate|force|normal|getScript|POST|processData|solid|ajaxStart|ActiveXObject|blank|filled|contentType|setDefaults||This|field|beforeSend|ajaxSend|longer|notmodified||then|of|least|ajaxStop|long||address||URL|ISO|ajaxError|gÃ|httpSuccess|ltiges|slideUp|Datum|200|slideDown|httpNotModified|Last|304|fadeOut|xmlRes|eine|httpData|Nummer|fadeIn|same|json|again|ajaxComplete|ajaxSuccess|slide|execScript|less|ywdhms|greater|floor|setTime|toUTCString|previousSibling|_height|_width|borderBottomWidth|paddingBottom|borderRightWidth|offsetParent|exception|occured|when|marginLeft|checking|marginTop|Warning|No|defined|toJSONString|iframe|password|hashPrefix|remoteCount|tabStruct|fxAutoHeight|behaviour|watch|fxShowSpeed|smhdw|fxHideSpeed|action||tempForm|Show|object2text|||siblings|exclude|srcElement|Loading|8230|There|trace|such|initialize|profile|createTextNode|FORM|reverse|forEach|weight|every|some|Top|Bottom|Left|Width|right|profileEnd|fontFamily|callee|th|tooltip|zIndex|3000|htmlFor|readonly|readOnly|monospace|getAttributeNode|setAttribute|ig|compatible|compatMode|backgroundColor|CSS1Compat|next|prev|prependTo|toggleClass|http|lastChild|png|ffffff|progid|DXImageTransform|u0128||uFFFF|AlphaImageLoader|continue|sizingMethod|crop|color|000000|td|Infinity|clientY|thead|cancelBubble|tfoot|fromElement|toElement|relatedTarget|removeEventListener|dblclick|mouseup|666699|change|keydown|keypress|keyup|addEventListener|write|mousedown|scr|resize|ipt|defer|loaded|slideToggle|fadeTo|Object|slow|hover|600|fast|400|linear|cos|borderBottom|PI|10000|250|loadIfModified|2000|serialize|textContent|getIfModified|getJSON|post|ajaxTimeout|ajaxSetup|application|www|urlencoded||20px|XMLHTTP|open|Content||Type|If|Since|Thu|01|Jan|1970|GMT|Requested|With|overrideMimeType|Connection|close|abort|info|send|protocol|300|content|warn|responseXML|cccccc|center|horizontal|vertical|365|Right|invalid|decodeURIComponent|textarea|scrollHeight|assert|noConflict|scrollWidth|outerHeight|outerWidth|removeAttribute|inline|dirxml|bgIframe|javascript|frameborder|tabindex|Alpha|Opacity|group|line|loading|500|removeExpression|concat|sort|groupEnd|setExpression|timeEnd|unknown'.split('|'),0,{}))
  +eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('B(R 1g.q=="1c"){1g.1c=1g.1c;D q=u(a,c){B(1g==l)C 1R q(a,c);a=a||U;B(q.2F(a))C 1R q(U)[q.fn.3f?"3f":"4l"](a);B(R a=="1S"){D m=/^[^<]*(<(.|\\s)+>)[^>]*$/.4X(a);B(m)a=q.3H([m[1]]);L C 1R q(c).3q(a)}C l.71(a.28==3x&&a||(a.7r||a.I&&a!=1g&&!a.2Y&&a[0]!=1c&&a[0].2Y)&&q.5W(a)||[a])};B(R $!="1c")q.6p$=$;D $=q;q.fn=q.57={7r:"1.1.2",4A:u(){C l.I},I:0,2j:u(2T){C 2T==1c?q.5W(l):l[2T]},4M:u(a){D 1d=q(a);1d.a8=l;C 1d},71:u(a){l.I=0;[].1y.1D(l,a);C l},17:u(fn,1B){C q.17(l,fn,1B)},2X:u(16){D 9R=-1;l.17(u(i){B(l==16)9R=i});C 9R},1q:u(2R,F,H){D 16=2R;B(2R.28==2H)B(F==1c)C l.I&&q[H||"1q"](l[0],2R)||1c;L{16={};16[2R]=F}C l.17(u(2X){V(D 12 23 16)q.1q(H?l.1H:l,12,q.12(l,16[12],H,2X,12))})},K:u(2R,F){C l.1q(2R,F,"66")},1J:u(e){B(R e=="1S")C l.6s().3s(U.cJ(e));D t="";q.17(e||l,u(){q.17(l.5P,u(){B(l.2Y!=8)t+=l.2Y!=1?l.6u:q.fn.1J([l])})});C t},4n:u(){D a,1B=11;C l.17(u(){B(!a)a=q.3H(1B,l.6b);D b=a[0].7z(Y);l.1w.51(b,l);2N(b.29)b=b.29;b.9n(l)})},3s:u(){C l.6f(11,Y,1,u(a){l.9n(a)})},ak:u(){C l.6f(11,Y,-1,u(a){l.51(a,l.29)})},c4:u(){C l.6f(11,1a,1,u(a){l.1w.51(a,l)})},c6:u(){C l.6f(11,1a,-1,u(a){l.1w.51(a,l.4d)})},3n:u(){C l.a8||q([])},3q:u(t){C l.4M(q.8m(q.4L(l,u(a){C q.3q(t,a)})),t)},8p:u(9w){C l.4M(q.4L(l,u(a){D a=a.7z(9w!=1c?9w:Y);a.$2m=14;C a}))},1z:u(t){C l.4M(q.2F(t)&&q.58(l,u(el,2X){C t.1D(el,[2X])})||q.6c(t,l))},2g:u(t){C l.4M(t.28==2H&&q.6c(t,l,Y)||q.58(l,u(a){C(t.28==3x||t.7r)?q.6Q(a,t)<0:a!=t}))},2k:u(t){C l.4M(q.3Y(l.2j(),t.28==2H?q(t).2j():t.I!=1c&&(!t.1I||t.1I=="cK")?t:[t]))},35:u(2p){C 2p?q.6c(2p,l).I>0:1a},1W:u(1W){C 1W==1c?(l.I?l[0].F:14):l.1q("F",1W)},2h:u(1W){C 1W==1c?(l.I?l[0].45:14):l.6s().3s(1W)},6f:u(1B,3w,6a,fn){D 8p=l.I>1,a;C l.17(u(){B(!a){a=q.3H(1B,l.6b);B(6a<0)a.f3()}D 16=l;B(3w&&q.1I(l,"3w")&&q.1I(a[0],"6G"))16=l.bA("3C")[0]||l.9n(U.7b("3C"));q.17(a,u(){fn.1D(16,[8p?l.7z(Y):l])})})}};q.1j=q.fn.1j=u(){D 3i=11[0],a=1;B(11.I==1){3i=l;a=0}D 12;2N(12=11[a++])V(D i 23 12)3i[i]=12[i];C 3i};q.1j({fg:u(){B(q.6p$)$=q.6p$;C q},2F:u(fn){C!!fn&&R fn!="1S"&&!fn.1I&&fn.28!=3x&&/u/i.1m(fn+"")},8n:u(J){C J.7H&&J.6b&&!J.6b.1s},1I:u(J,1e){C J.1I&&J.1I.6J()==1e.6J()},17:u(16,fn,1B){B(16.I==1c)V(D i 23 16)fn.1D(16[i],1B||[i,16[i]]);L V(D i=0,4N=16.I;i<4N;i++)B(fn.1D(16[i],1B||[i,16[i]])===1a)2Z;C 16},12:u(J,F,H,2X,12){B(q.2F(F))F=F.3c(J,[2X]);D ab=/z-?2X|9C-?cO|1N|a9|cP-?1i/i;C F&&F.28==6j&&H=="66"&&!ab.1m(12)?F+"2o":F},2i:{2k:u(J,c){q.17(c.4w(/\\s+/),u(i,1r){B(!q.2i.6l(J.2i,1r))J.2i+=(J.2i?" ":"")+1r})},3T:u(J,c){J.2i=c?q.58(J.2i.4w(/\\s+/),u(1r){C!q.2i.6l(c,1r)}).9i(" "):""},6l:u(t,c){C q.6Q(c,(t.2i||t).4R().4w(/\\s+/))>-1}},8t:u(e,o,f){V(D i 23 o){e.1H["3d"+i]=e.1H[i];e.1H[i]=o[i]}f.1D(e,[]);V(D i 23 o)e.1H[i]=e.1H["3d"+i]},K:u(e,p){B(p=="1i"||p=="2e"){D 3d={},7p,7C,d=["eQ","cR","eM","cS"];q.17(d,u(){3d["5M"+l]=0;3d["62"+l+"eT"]=0});q.8t(e,3d,u(){B(q(e).35(\':3t\')){7p=e.2V;7C=e.42}L{e=q(e.7z(Y)).3q(":40").an("4I").3n().K({82:"2A",26:"3Z",1L:"43",cV:"0",2D:"0"}).69(e.1w)[0];D 8q=q.K(e.1w,"26")||"5x";B(8q=="5x")e.1w.1H.26="5C";7p=e.4c;7C=e.5X;B(8q=="5x")e.1w.1H.26="5x";e.1w.63(e)}});C p=="1i"?7p:7C}C q.66(e,p)},66:u(J,12,ad){D 1d;B(12=="1N"&&q.18.1E){1d=q.1q(J.1H,"1N");C 1d==""?"1":1d}B(12=="8w"||12=="53")12=q.18.1E?"6I":"53";B(!ad&&J.1H[12])1d=J.1H[12];L B(U.7h&&U.7h.8u){B(12=="53"||12=="6I")12="8w";12=12.1O(/([A-Z])/g,"-$1").2q();D 1r=U.7h.8u(J,14);B(1r)1d=1r.ae(12);L B(12=="1L")1d="2x";L q.8t(J,{1L:"43"},u(){D c=U.7h.8u(l,"");1d=c&&c.ae(12)||""})}L B(J.5R){D aH=12.1O(/\\-(\\w)/g,u(m,c){C c.6J()});1d=J.5R[12]||J.5R[aH]}C 1d},3H:u(a,72){D r=[];72=72||U;q.17(a,u(i,1F){B(!1F)C;B(1F.28==6j)1F=1F.4R();B(R 1F=="1S"){D s=q.38(1F),2b=72.7b("2b"),49=[];D 4n=!s.1Q("<2L")&&[1,"<3Q>","</3Q>"]||(!s.1Q("<dv")||!s.1Q("<3C")||!s.1Q("<cX"))&&[1,"<3w>","</3w>"]||!s.1Q("<6G")&&[2,"<3w><3C>","</3C></3w>"]||(!s.1Q("<cZ")||!s.1Q("<d0"))&&[3,"<3w><3C><6G>","</6G></3C></3w>"]||[0,"",""];2b.45=4n[1]+1F+4n[2];2N(4n[0]--)2b=2b.29;B(q.18.1E){B(!s.1Q("<3w")&&s.1Q("<3C")<0)49=2b.29&&2b.29.5P;L B(4n[1]=="<3w>"&&s.1Q("<3C")<0)49=2b.5P;V(D n=49.I-1;n>=0;--n)B(q.1I(49[n],"3C")&&!49[n].5P.I)49[n].1w.63(49[n])}1F=q.5W(2b.5P)}B(1F.I===0&&!q.1I(1F,"1Z"))C;B(1F[0]==1c||q.1I(1F,"1Z"))r.1y(1F);L r=q.3Y(r,1F)});C r},1q:u(J,1e,F){D 4x=q.8n(J)?{}:{"V":"d2","4B":"2i","8w":q.18.1E?"6I":"53",53:q.18.1E?"6I":"53",45:"45",2i:"2i",F:"F",3v:"3v",4I:"4I",d3:"d5",3G:"3G"};B(1e=="1N"&&q.18.1E){B(F!=1c){J.a9=1;J.1z=(J.1z||"").1O(/aa\\([^)]*\\)/,"")+(76(F).4R()=="9f"?"":"aa(1N="+F*9t+")")}C J.1z?(76(J.1z.2I(/1N=([^)]*)/)[1])/9t).4R():""}B(4x[1e]){B(F!=1c)J[4x[1e]]=F;C J[4x[1e]]}L B(F==1c&&q.18.1E&&q.1I(J,"1Z")&&(1e=="cn"||1e=="2d"))C J.d6(1e).6u;L B(J.7H){B(F!=1c)J.d7(1e,F);B(q.18.1E&&/4V|3l/.1m(1e)&&!q.8n(J))C J.6U(1e,2);C J.6U(1e)}L{1e=1e.1O(/-([a-z])/d8,u(z,b){C b.6J()});B(F!=1c)J[1e]=F;C J[1e]}},38:u(t){C t.1O(/^\\s+|\\s+$/g,"")},5W:u(a){D r=[];B(R a!="8o")V(D i=0,al=a.I;i<al;i++)r.1y(a[i]);L r=a.93(0);C r},6Q:u(b,a){V(D i=0,al=a.I;i<al;i++)B(a[i]==b)C i;C-1},3Y:u(2z,8x){V(D i=0;8x[i];i++)2z.1y(8x[i]);C 2z},8m:u(2z){D r=[],2T=q.6M++;V(D i=0,fl=2z.I;i<fl;i++)B(2z[i].6M!=2T){2z[i].6M=2T;r.1y(2z[i])}C r},6M:0,58:u(3r,fn,8y){B(R fn=="1S")fn=1R 70("a","i","C "+fn);D 25=[];V(D i=0,el=3r.I;i<el;i++)B(!8y&&fn(3r[i],i)||8y&&!fn(3r[i],i))25.1y(3r[i]);C 25},4L:u(3r,fn){B(R fn=="1S")fn=1R 70("a","C "+fn);D 25=[];V(D i=0,el=3r.I;i<el;i++){D 1W=fn(3r[i],i);B(1W!==14&&1W!=1c){B(1W.28!=3x)1W=[1W];25=25.da(1W)}}C 25}});1R u(){D b=a7.cq.2q();q.18={33:/aj/.1m(b),3y:/3y/.1m(b),1E:/1E/.1m(b)&&!/3y/.1m(b),4i:/4i/.1m(b)&&!/(db|aj)/.1m(b)};q.5w=!q.18.1E||U.dc=="fk"};q.17({19:"a.1w",3D:"q.3D(a)",dd:"q.3K(a,2,\'4d\')",de:"q.3K(a,2,\'ao\')",cr:"q.5t(a.1w.29,a)",5k:"q.5t(a.29)"},u(i,n){q.fn[i]=u(a){D 1d=q.4L(l,n);B(a&&R a=="1S")1d=q.6c(a,1d);C l.4M(1d)}});q.17({69:"3s",df:"ak",51:"c4",9H:"c6"},u(i,n){q.fn[i]=u(){D a=11;C l.17(u(){V(D j=0,al=a.I;j<al;j++)q(a[j])[n](l)})}});q.17({an:u(2R){q.1q(l,2R,"");l.dh(2R)},2M:u(c){q.2i.2k(l,c)},3o:u(c){q.2i.3T(l,c)},di:u(c){q.2i[q.2i.6l(l,c)?"3T":"2k"](l,c)},3T:u(a){B(!a||q.1z(a,[l]).r.I)l.1w.63(l)},6s:u(){2N(l.29)l.63(l.29)}},u(i,n){q.fn[i]=u(){C l.17(n,11)}});q.17(["eq","8i","8k","ap"],u(i,n){q.fn[n]=u(2T,fn){C l.1z(":"+n+"("+2T+")",fn)}});q.17(["1i","2e"],u(i,n){q.fn[n]=u(h){C h==1c?(l.I?q.K(l[0],n):14):l.K(n,h.28==2H?h:h+"2o")}});q.1j({2p:{"":"m[2]==\'*\'||q.1I(a,m[2])","#":"a.6U(\'S\')==m[2]",":":{8i:"i<m[3]-0",8k:"i>m[3]-0",3K:"m[3]-0==i",eq:"m[3]-0==i",2z:"i==0",2v:"i==r.I-1",ay:"i%2==0",az:"i%2","3K-7E":"q.3K(a.1w.29,m[3],\'4d\',a)==a","2z-7E":"q.3K(a.1w.29,1,\'4d\')==a","2v-7E":"q.3K(a.1w.dj,1,\'ao\')==a","96-7E":"q.5t(a.1w.29).I==1",19:"a.29",6s:"!a.29",ap:"q.fn.1J.1D([a]).1Q(m[3])>=0",3t:\'a.H!="2A"&&q.K(a,"1L")!="2x"&&q.K(a,"82")!="2A"\',2A:\'a.H=="2A"||q.K(a,"1L")=="2x"||q.K(a,"82")=="2A"\',bP:"!a.3v",3v:"a.3v",4I:"a.4I",3G:"a.3G||q.1q(a,\'3G\')",1J:"a.H==\'1J\'",40:"a.H==\'40\'",4t:"a.H==\'4t\'",9a:"a.H==\'9a\'",ar:"a.H==\'ar\'",3V:"a.H==\'3V\'",5p:"a.H==\'5p\'",2S:"a.H==\'2S\'",7K:\'a.H=="7K"||q.1I(a,"7K")\',46:"/46|3Q|dl|7K/i.1m(a.1I)"},".":"q.2i.6l(a,m[2])","@":{"=":"z==m[4]","!=":"z!=m[4]","^=":"z&&!z.1Q(m[4])","$=":"z&&z.5S(z.I - m[4].I,m[4].I)==m[4]","*=":"z&&z.1Q(m[4])>=0","":"z",9J:u(m){C["",m[1],m[3],m[2],m[5]]},ax:"z=a[m[3]];B(!z||/4V|3l/.1m(m[3]))z=q.1q(a,m[3]);"},"[":"1b(m[2])?q.3K(a.1w.29,1b(m[2]),\'4d\',a)==a:q.3q(m[2],a).I"},aw:[/^\\[ *(@)([\\w-]+) *([!*$^=]*) *(\'?"?)(.*?)\\4 *\\]/,/^(\\[)\\s*(.*?(\\[.*?\\])?[^[]*?)\\s*\\]/,/^(:)([\\w-]+)\\("?\'?(.*?(\\(.*?\\))?[^(]*?)"?\'?\\)/,1R 4D("^([:.#]*)("+(q.8E="(?:[\\\\w\\dm-\\dn*-]|\\\\\\\\.)")+"+)")],6S:[/^(\\/?\\.\\.)/,"a.1w",/^(>|\\/)/,"q.5t(a.29)",/^(\\+)/,"q.3K(a,2,\'4d\')",/^(~)/,u(a){D s=q.5t(a.1w.29);C s.93(q.6Q(a,s)+1)}],6c:u(2p,3r,2g){D 3d,1r=[];2N(2p&&2p!=3d){3d=2p;D f=q.1z(2p,3r,2g);2p=f.t.1O(/^\\s*,\\s*/,"");1r=2g?3r=f.r:q.3Y(1r,f.r)}C 1r},3q:u(t,2G){B(R t!="1S")C[t];B(2G&&!2G.2Y)2G=14;2G=2G||U;B(!t.1Q("//")){2G=2G.3b;t=t.5S(2,t.I)}L B(!t.1Q("/")&&!2G.6b){2G=2G.3b;t=t.5S(1,t.I);B(t.1Q("/")>=1)t=t.5S(t.1Q("/"),t.I)}D 1d=[2G],3z=[],2v;2N(t&&2v!=t){D r=[];2v=t;t=q.38(t).1O(/^\\/\\//,"");D 6T=1a;D 5m=/^[\\/>]\\s*([\\w*-]+)/;D m=5m.4X(t);B(m){V(D i=0;1d[i];i++)V(D c=1d[i].29;c;c=c.4d)B(c.2Y==1&&(m[1]=="*"||q.1I(c,m[1])))r.1y(c);1d=r;t=t.1O(5m,"");B(t.1Q(" ")==0)dp;6T=Y}L{V(D i=0,as=q.6S.I;i<as;i+=2){D 5m=q.6S[i],fn=q.6S[i+1];D m=5m.4X(t);B(m){r=1d=q.4L(1d,q.2F(fn)?fn:1R 70("a","C "+fn));t=q.38(t.1O(5m,""));6T=Y;2Z}}}B(t&&!6T){B(!t.1Q(",")){B(1d[0]==2G)1d.75();3z=q.3Y(3z,1d);r=1d=[2G];t=" "+t.5S(1,t.I)}L{D 5T=1R 4D("^(\\\\w+)(#)("+q.8E+"+)");D m=5T.4X(t);B(m){m=[0,m[2],m[3],m[1]]}L{5T=1R 4D("^([#.]?)("+q.8E+"*)");m=5T.4X(t)}m[2]=m[2].1O(/\\\\/g,"");D J=1d[1d.I-1];B(m[1]=="#"&&J&&J.8Q){D 4G=J.8Q(m[2]);B((q.18.1E||q.18.3y)&&4G&&4G.S!=m[2])4G=q(\'[@S="\'+m[2]+\'"]\',J)[0];1d=r=4G&&(!m[3]||q.1I(4G,m[3]))?[4G]:[]}L{V(D i=0;1d[i];i++){D 7s=m[1]!=""||m[0]==""?"*":m[2];B(7s=="*"&&1d[i].1I.2q()=="3m")7s="O";r=q.3Y(r,1d[i].bA(7s))}B(m[1]==".")r=q.8G(r,m[2]);B(m[1]=="#"){D 5u=[];V(D i=0;r[i];i++)B(r[i].6U("S")==m[2]){5u=[r[i]];2Z}r=5u}1d=r}t=t.1O(5T,"")}}B(t){D 1W=q.1z(t,r);1d=r=1W.r;t=q.38(1W.t)}}B(t)1d=[];B(1d&&1d[0]==2G)1d.75();3z=q.3Y(3z,1d);C 3z},8G:u(r,m,2g){m=" "+m+" ";D 5u=[];V(D i=0;r[i];i++){D 8F=(" "+r[i].2i+" ").1Q(m)>=0;B(!2g&&8F||2g&&!8F)5u.1y(r[i])}C 5u},1z:u(t,r,2g){D 2v;2N(t&&t!=2v){2v=t;D p=q.aw,m;V(D i=0;p[i];i++){m=p[i].4X(t);B(m){t=t.9k(m[0].I);B(q.2p[m[1]].9J)m=q.2p[m[1]].9J(m);m[2]=m[2].1O(/\\\\/g,"");2Z}}B(!m)2Z;B(m[1]==":"&&m[2]=="2g")r=q.1z(m[3],r,Y).r;L B(m[1]==".")r=q.8G(r,m[2],2g);L{D f=q.2p[m[1]];B(R f!="1S")f=q.2p[m[1]][m[2]];7N("f = u(a,i){"+(q.2p[m[1]].ax||"")+"C "+f+"}");r=q.58(r,f,2g)}}C{r:r,t:t}},3D:u(J){D 8I=[];D 1r=J.1w;2N(1r&&1r!=U){8I.1y(1r);1r=1r.1w}C 8I},3K:u(1r,25,6a,J){25=25||1;D 2T=0;V(;1r;1r=1r[6a]){B(1r.2Y==1)2T++;B(2T==25||25=="ay"&&2T%2==0&&2T>1&&1r==J||25=="az"&&2T%2==1&&1r==J)C 1r}},5t:u(n,J){D r=[];V(;n;n=n.4d){B(n.2Y==1&&(!J||n!=J))r.1y(n)}C r}});q.P={2k:u(E,H,1A,T){B(q.18.1E&&E.5o!=1c)E=1g;B(T)1A.T=T;B(!1A.5j)1A.5j=l.5j++;B(!E.$2m)E.$2m={};D 5U=E.$2m[H];B(!5U){5U=E.$2m[H]={};B(E["6v"+H])5U[0]=E["6v"+H]}5U[1A.5j]=1A;E["6v"+H]=l.6R;B(!l.2y[H])l.2y[H]=[];l.2y[H].1y(E)},5j:1,2y:{},3T:u(E,H,1A){D 2m=E.$2m,1d;B(2m){B(H&&H.H){1A=H.1A;H=H.H}B(!H){V(H 23 2m)l.3T(E,H)}L B(2m[H]){B(1A)6m 2m[H][1A.5j];L V(1A 23 E.$2m[H])6m 2m[H][1A];V(1d 23 2m[H])2Z;B(!1d){1d=E["6v"+H]=14;6m 2m[H]}}V(1d 23 2m)2Z;B(!1d)E.$2m=14}},2f:u(H,T,E){T=q.5W(T||[]);B(!E)q.17(l.2y[H]||[],u(){q.P.2f(H,T,l)});L{D 1A=E["6v"+H],1W,fn=q.2F(E[H]);B(1A){T.aA(l.4x({H:H,3i:E}));B((1W=1A.1D(E,T))!==1a)l.8K=Y}B(fn&&1W!==1a)E[H]();l.8K=1a}},6R:u(P){B(R q=="1c"||q.P.8K)C;P=q.P.4x(P||1g.P||{});D 4K;D c=l.$2m[P.H];D 1B=[].93.3c(11,1);1B.aA(P);V(D j 23 c){1B[0].1A=c[j];1B[0].T=c[j].T;B(c[j].1D(l,1B)===1a){P.3X();P.52();4K=1a}}B(q.18.1E)P.3i=P.3X=P.52=P.1A=P.T=14;C 4K},4x:u(P){B(!P.3i&&P.aC)P.3i=P.aC;B(P.9m==1c&&P.9Q!=1c){D e=U.3b,b=U.1s;P.9m=P.9Q+(e.36||b.36);P.aq=P.dw+(e.2U||b.2U)}B(q.18.33&&P.3i.2Y==3){D 5Z=P;P=q.1j({},5Z);P.3i=5Z.3i.1w;P.3X=u(){C 5Z.3X()};P.52=u(){C 5Z.52()}}B(!P.3X)P.3X=u(){l.4K=1a};B(!P.52)P.52=u(){l.dx=Y};C P}};q.fn.1j({2E:u(H,T,fn){C l.17(u(){q.P.2k(l,H,fn||T,T)})},aD:u(H,T,fn){C l.17(u(){q.P.2k(l,H,u(P){q(l).64(P);C(fn||T).1D(l,11)},T)})},64:u(H,fn){C l.17(u(){q.P.3T(l,H,fn)})},2f:u(H,T){C l.17(u(){q.P.2f(H,T,l)})},37:u(){D a=11;C l.2W(u(e){l.8M=l.8M==0?1:0;e.3X();C a[l.8M].1D(l,[e])||1a})},e8:u(f,g){u 8O(e){D p=(e.H=="5a"?e.dz:e.dA)||e.dB;2N(p&&p!=l)3L{p=p.1w}3B(e){p=l};B(p==l)C 1a;C(e.H=="5a"?f:g).1D(l,[e])}C l.5a(8O).8e(8O)},3f:u(f){B(q.6Y)f.1D(U,[q]);L{q.61.1y(u(){C f.1D(l,[q])})}C l}});q.1j({6Y:1a,61:[],3f:u(){B(!q.6Y){q.6Y=Y;B(q.61){q.17(q.61,u(){l.1D(U)});q.61=14}B(q.18.4i||q.18.3y)U.dC("aE",q.3f,1a)}}});1R u(){q.17(("9Y,4z,4l,e0,5V,8R,2W,dE,"+"dF,dG,9v,5a,8e,dW,3Q,"+"3V,dH,dI,dJ,1n").4w(","),u(i,o){q.fn[o]=u(f){C f?l.2E(o,f):l.2f(o)}});B(q.18.4i||q.18.3y)U.dL("aE",q.3f,1a);L B(q.18.1E){U.dM("<dN"+"dO S=aG dP=Y "+"3l=//:><\\/44>");D 44=U.8Q("aG");B(44)44.5c=u(){B(l.4p!="39")C;l.1w.63(l);q.3f()};44=14}L B(q.18.33)q.5s=5o(u(){B(U.4p=="9X"||U.4p=="39"){6D(q.5s);q.5s=14;q.3f()}},10);q.P.2k(1g,"4l",q.3f)};B(q.18.1E)q(1g).aD("8R",u(){D 2y=q.P.2y;V(D H 23 2y){D 8N=2y[H],i=8N.I;B(i&&H!=\'8R\')do q.P.3T(8N[i-1],H);2N(--i)}});q.fn.1j({1C:u(1p,1h){D 2A=l.1z(":2A");1p?2A.30({1i:"1C",2e:"1C",1N:"1C"},1p,1h):2A.17(u(){l.1H.1L=l.59?l.59:"";B(q.K(l,"1L")=="2x")l.1H.1L="43"});C l},1u:u(1p,1h){D 3t=l.1z(":3t");1p?3t.30({1i:"1u",2e:"1u",1N:"1u"},1p,1h):3t.17(u(){l.59=l.59||q.K(l,"1L");B(l.59=="2x")l.59="43";l.1H.1L="2x"});C l},aK:q.fn.37,37:u(fn,8T){D 1B=11;C q.2F(fn)&&q.2F(8T)?l.aK(fn,8T):l.17(u(){q(l)[q(l).35(":2A")?"1C":"1u"].1D(q(l),1B)})},aM:u(1p,1h){C l.1z(":2A").30({1i:"1C"},1p,1h).3n()},aJ:u(1p,1h){C l.1z(":3t").30({1i:"1u"},1p,1h).3n()},dR:u(1p,1h){C l.17(u(){D aN=q(l).35(":2A")?"1C":"1u";q(l).30({1i:aN},1p,1h)})},aP:u(1p,1h){C l.1z(":2A").30({1N:"1C"},1p,1h).3n()},aO:u(1p,1h){C l.1z(":3t").30({1N:"1u"},1p,1h).3n()},dT:u(1p,3F,1h){C l.30({1N:3F},1p,1h)},30:u(12,1p,3e,1h){C l.32(u(){l.5g=q.1j({},12);D 2L=q.1p(1p,3e,1h);V(D p 23 12){D e=1R q.5Q(l,2L,p);B(12[p].28==6j)e.54(e.1r(),12[p]);L e[12[p]](12)}})},32:u(H,fn){B(!fn){fn=H;H="5Q"}C l.17(u(){B(!l.32)l.32={};B(!l.32[H])l.32[H]=[];l.32[H].1y(fn);B(l.32[H].I==1)fn.1D(l)})}});q.1j({1p:u(1p,3e,fn){D 2L=1p&&1p.28==dU?1p:{39:fn||!fn&&3e||q.2F(1p)&&1p,3S:1p,3e:fn&&3e||3e&&3e.28!=70&&3e||"aQ"};2L.3S=(2L.3S&&2L.3S.28==6j?2L.3S:{dV:dX,dY:bz}[2L.3S])||dZ;2L.3d=2L.39;2L.39=u(){q.aR(l,"5Q");B(q.2F(2L.3d))2L.3d.1D(l)};C 2L},3e:{e1:u(p,n,4O,74){C 4O+74*p},aQ:u(p,n,4O,74){C((-48.e2(p*48.e3)/2)+0.5)*74+4O}},32:{},aR:u(J,H){H=H||"5Q";B(J.32&&J.32[H]){J.32[H].75();D f=J.32[H][0];B(f)f.1D(J)}},5e:[],5Q:u(J,W,12){D z=l;D y=J.1H;B(12=="1i"||12=="2e"){D 6H=q.K(J,"1L");D aX=y.4J;y.4J="2A"}z.a=u(){B(W.6K)W.6K.1D(J,[z.5A]);B(12=="1N")q.1q(y,"1N",z.5A);L{y[12]=1b(z.5A)+"2o";y.1L="43"}};z.7D=u(){C 76(q.K(J,12))};z.1r=u(){D r=76(q.66(J,12));C r&&r>-e4?r:z.7D()};z.54=u(8U,3F){z.8X=(1R 5H()).7v();z.5A=8U;z.a();q.5e.1y(u(){C z.6K(8U,3F)});B(q.5e.I==1){D aV=5o(u(){q.5e=q.58(q.5e,u(fn){C fn()});B(!q.5e.I)6D(aV)},13)}};z.1C=u(){B(!J.3N)J.3N={};J.3N[12]=q.1q(J.1H,12);W.1C=Y;z.54(0,l.1r());B(12!="1N")y[12]="4U"};z.1u=u(){B(!J.3N)J.3N={};J.3N[12]=q.1q(J.1H,12);W.1u=Y;z.54(l.1r(),0)};z.37=u(){B(!J.3N)J.3N={};J.3N[12]=q.1q(J.1H,12);B(6H=="2x"){W.1C=Y;B(12!="1N")y[12]="4U";z.54(0,l.1r())}L{W.1u=Y;z.54(l.1r(),0)}};z.6K=u(4O,8Y){D t=(1R 5H()).7v();B(t>W.3S+z.8X){z.5A=8Y;z.a();B(J.5g)J.5g[12]=Y;D 3z=Y;V(D i 23 J.5g)B(J.5g[i]!==Y)3z=1a;B(3z){B(6H){y.4J=aX;y.1L=6H;B(q.K(J,"1L")=="2x")y.1L="43"}B(W.1u)y.1L="2x";B(W.1u||W.1C)V(D p 23 J.5g)q.1q(y,p,J.3N[p])}B(3z&&q.2F(W.39))W.39.1D(J);C 1a}L{D n=t-l.8X;D p=n/W.3S;z.5A=q.3e[W.3e](p,n,4O,(8Y-4O),W.3S);z.a()}C Y}}});q.fn.1j({e5:u(1f,3O,1h){l.4l(1f,3O,1h,1)},4l:u(1f,3O,1h,3A){B(q.2F(1f))C l.2E("4l",1f);1h=1h||u(){};D H="94";B(3O)B(q.2F(3O)){1h=3O;3O=14}L{3O=q.O(3O);H="b6"}D 3k=l;q.6E({1f:1f,H:H,T:3O,3A:3A,39:u(4Z,1Y){B(1Y=="56"||!3A&&1Y=="bp")3k.1q("45",4Z.7q).9d().17(1h,[4Z.7q,1Y,4Z]);L 1h.1D(3k,[4Z.7q,1Y,4Z])}});C l},e7:u(){C q.O(l)},9d:u(){C l.3q("44").17(u(){B(l.3l)q.b4(l.3l);L q.9e(l.1J||l.e9||l.45||"")}).3n()}});q.17("cD,bv,bu,bx,bs,bn".4w(","),u(i,o){q.fn[o]=u(f){C l.2E(o,f)}});q.1j({2j:u(1f,T,1h,H,3A){B(q.2F(T)){1h=T;T=14}C q.6E({H:"94",1f:1f,T:T,56:1h,9A:H,3A:3A})},ea:u(1f,T,1h,H){C q.2j(1f,T,1h,H,1)},b4:u(1f,1h){C q.2j(1f,14,1h,"44")},eb:u(1f,T,1h){C q.2j(1f,T,1h,"bI")},ec:u(1f,T,1h,H){B(q.2F(T)){1h=T;T={}}C q.6E({H:"b6",1f:1f,T:T,56:1h,9A:H})},ed:u(31){q.6L.31=31},ee:u(G){q.1j(q.6L,G)},6L:{2y:Y,H:"94",31:0,bh:"ef/x-eg-1Z-eh",ba:Y,7A:Y,21:14,T:14},7n:{},6E:u(s){s=q.1j({},q.6L,s);B(s.T){B(s.ba&&R s.T!="1S")s.T=q.O(s.T);B(s.H.2q()=="2j"){s.1f+=((s.1f.1Q("?")>-1)?"&":"?")+s.T;s.T=14}}B(s.2y&&!q.99++)q.P.2f("cD");D 98=1a;D 1o=1g.bc?1R bc("cw.ei"):1R 7U();1o.ej(s.H,s.1f,s.7A);B(s.T)1o.7g("em-en",s.bh);B(s.3A)1o.7g("eo-9b-ep",q.7n[s.1f]||"er, es et ev 95:95:95 ew");1o.7g("X-ex-ey","7U");B(1o.ez)1o.7g("eA","eB");B(s.bm)s.bm(1o);B(s.2y)q.P.2f("bn",[1o,s]);D 5c=u(97){B(1o&&(1o.4p==4||97=="31")){98=Y;B(7j){6D(7j);7j=14}D 1Y;3L{1Y=q.by(1o)&&97!="31"?s.3A&&q.bB(1o,s.1f)?"bp":"56":"1n";B(1Y!="1n"){D 7T;3L{7T=1o.9c("bC-9b")}3B(e){}B(s.3A&&7T)q.7n[s.1f]=7T;D T=q.bF(1o,s.9A);B(s.56)s.56.3c(s.21||1g,T,1Y);B(s.2y)q.P.2f("bs",[1o,s])}L q.7x(s,1o,1Y)}3B(e){1Y="1n";q.7x(s,1o,1Y,e)}B(s.2y)q.P.2f("bu",[1o,s]);B(s.2y&&!--q.99)q.P.2f("bv");B(s.39)s.39(1o,1Y);B(s.7A)1o=14}};D 7j=5o(5c,13);B(s.31>0)3u(u(){B(1o){1o.eD();B(!98)5c("31")}},s.31);3L{1o.eE(s.T)}3B(e){q.7x(s,1o,14,e)}B(!s.7A)5c();C 1o},7x:u(s,1o,1Y,e){B(s.1n)s.1n(1o,1Y,e);B(s.2y)q.P.2f("bx",[1o,s,e])},99:0,by:u(r){3L{C!r.1Y&&5D.eG=="9a:"||(r.1Y>=bz&&r.1Y<eH)||r.1Y==bD||q.18.33&&r.1Y==1c}3B(e){}C 1a},bB:u(1o,1f){3L{D bE=1o.9c("bC-9b");C 1o.1Y==bD||bE==q.7n[1f]||q.18.33&&1o.1Y==1c}3B(e){}C 1a},bF:u(r,H){D ct=r.9c("eJ-H");D T=!H&&ct&&ct.1Q("1o")>=0;T=H=="1o"||T?r.eL:r.7q;B(H=="44")q.9e(T);B(H=="bI")7N("T = "+T);B(H=="2h")q("<2b>").2h(T).9d();C T},O:u(a){D s=[];B(a.28==3x||a.7r)q.17(a,u(){s.1y(4F(l.1e)+"="+4F(l.F))});L V(D j 23 a)B(a[j]&&a[j].28==3x)q.17(a[j],u(){s.1y(4F(j)+"="+4F(l))});L s.1y(4F(j)+"="+4F(a[j]));C s.9i("&")},9e:u(T){B(1g.bK)1g.bK(T);L B(q.18.33)1g.3u(T,0);L 7N.3c(1g,T)}})}q.fn.eN=u(f){C l.17(u(){D p=l.1w;B(q.K(p,"26")==\'5x\')p.1H.26=\'5C\';D s=l.1H;s.26=\'3Z\';B(!f||f=="eO"){B(((1b(q.K(p,"2e"))-1b(q.K(l,"2e")))/2)>0)s.2D=((1b(q.K(p,"2e"))-1b(q.K(l,"2e")))/2)+"2o";L s.2D="0"}B(!f||f=="eP"){B(((1b(q.K(p,"1i"))-1b(q.K(l,"1i")))/2)>0){s.2w=((1b(q.K(p,"1i"))-1b(q.K(l,"1i")))/2)+"2o"}L{B(p.1I.2q()=="1s"){B(1g.67)D 4c=1g.67;L B(U.1s&&U.1s.2V)D 4c=U.1s.2V;s.2w=((4c-1b(q.K(l,"1i")))/2)+"2o"}L{s.2w="0"}}}})};q.4h=u(1e,F,W){B(R F!=\'1c\'){W=W||{};B(F===14){F=\'\';W.2u=-1}D 2u=\'\';B(W.2u){D 2r;B(R W.2u==\'1S\'&&W.2u.2I(/^[+-]?[0-9]+[bO]$/)!==14){D 2I=W.2u.2I(/^([+-]?[0-9]+)([bO])$/);W.2u=1b(2I[0],10)*(({"y":(60*60*24*eS),"w":(60*60*24*7),"d":(60*60*24),"h":(60*60),"m":(60),"s":(1)}[2I[1]])||0);2r=1R 5H();2r.bQ(2r.7v()+W.2u*4b)}L B(R W.2u==\'3p\'){2r=1R 5H();2r.bQ(2r.7v()+W.2u*24*60*60*4b)}L B(R W.2u.bR!=\'1c\')2r=W.2u;L 9h"eU \\"2u\\" 1T";2u=\'; 2u=\'+2r.bR()}D 6d=W.6d?\'; 6d=\'+W.6d:\'\';D 6e=W.6e?\'; 6e=\'+W.6e:\'\';D 7y=W.7y?\'; 7y\':\'\';U.4h=[1e,\'=\',4F(F),2u,6d,6e,7y].9i(\'\')}L{D 9l=14;B(U.4h&&U.4h!=\'\'){D 9j=U.4h.4w(\';\');V(D i=0;i<9j.I;i++){D 4h=q.38(9j[i]);B(4h.9k(0,1e.I+1)==(1e+\'=\')){9l=eW(4h.9k(1e.I+1));2Z}}}C 9l}};q.fn.bV=q.fn.1i;q.fn.bX=q.fn.2e;q.fn.1i=u(){B(l[0]==1g)C 3k.67||q.5w&&U.3b.4c||U.1s.4c;B(l[0]==U)C 48.7D(U.1s.eX,U.1s.2V);C l.bV(11[0])};q.fn.2e=u(){B(l[0]==1g)C 3k.8L||q.5w&&U.3b.5X||U.1s.5X;B(l[0]==U)C 48.7D(U.1s.eZ,U.1s.42);C l.bX(11[0])};q.fn.67=u(){C l[0]==1g||l[0]==U?l.1i():l.K(\'1L\')!=\'2x\'?l[0].2V-(1b(l.K("4j"))||0)-(1b(l.K("bY"))||0):l.1i()+(1b(l.K("9q"))||0)+(1b(l.K("bZ"))||0)};q.fn.8L=u(){C l[0]==1g||l[0]==U?l.2e():l.K(\'1L\')!=\'2x\'?l[0].42-(1b(l.K("4k"))||0)-(1b(l.K("c0"))||0):l.1i()+(1b(l.K("9p"))||0)+(1b(l.K("8W"))||0)};q.fn.f0=u(){C l[0]==1g||l[0]==U?l.1i():l.K(\'1L\')!=\'2x\'?l[0].2V:l.1i()+(1b(l.K("4j"))||0)+(1b(l.K("bY"))||0)+(1b(l.K("9q"))||0)+(1b(l.K("bZ"))||0)};q.fn.f1=u(){C l[0]==1g||l[0]==U?l.2e():l.K(\'1L\')!=\'2x\'?l[0].42:l.1i()+(1b(l.K("4k"))||0)+(1b(l.K("c0"))||0)+(1b(l.K("9p"))||0)+(1b(l.K("8W"))||0)};q.fn.36=u(){B(l[0]==1g||l[0]==U)C 3k.8H||q.5w&&U.3b.36||U.1s.36;C l[0].36};q.fn.2U=u(){B(l[0]==1g||l[0]==U)C 3k.8J||q.5w&&U.3b.2U||U.1s.2U;C l[0].2U};q.fn.8l=u(W,9r){D x=0,y=0,J=l[0],19=l[0],7I=1a,9o=1a,6g,6i=0,5Y=0,W=q.1j({6P:Y,62:Y,5M:1a,5V:Y},W||{});do{x+=19.8C||0;y+=19.8D||0;B(q.18.4i||q.18.1E){D bt=1b(q.K(19,\'4j\'))||0;D bl=1b(q.K(19,\'4k\'))||0;x+=bl;y+=bt;B(q.18.4i&&19!=J&&q.K(19,\'4J\')!=\'3t\'){x+=bl;y+=bt}B(q.K(19,\'26\')==\'3Z\')7I=Y;B(q.K(19,\'26\')==\'5C\')9o=Y}B(W.5V){6g=19.c1;do{6i+=19.36||0;5Y+=19.2U||0;19=19.1w;B(q.18.4i&&19!=J&&19!=6g&&q.K(19,\'4J\')!=\'3t\'){x+=1b(q.K(19,\'4k\'))||0;y+=1b(q.K(19,\'4j\'))||0}}2N(6g&&19!=6g)}L 19=19.c1;B(19&&(19.7H.2q()==\'1s\'||19.7H.2q()==\'2h\')){B((q.18.33||(q.18.1E&&q.5w))&&q.K(J,\'26\')!=\'3Z\'){x+=1b(q.K(19,\'c2\'))||0;y+=1b(q.K(19,\'c3\'))||0}B((q.18.4i&&!7I)||(q.18.1E&&q.K(J,\'26\')==\'5x\'&&(!9o||!7I))){x+=1b(q.K(19,\'4k\'))||0;y+=1b(q.K(19,\'4j\'))||0}2Z}}2N(19);B(!W.6P){x-=1b(q.K(J,\'c2\'))||0;y-=1b(q.K(J,\'c3\'))||0}B(W.62&&(q.18.33||q.18.3y)){x+=1b(q.K(J,\'4k\'))||0;y+=1b(q.K(J,\'4j\'))||0}L B(!W.62&&!(q.18.33||q.18.3y)){x-=1b(q.K(J,\'4k\'))||0;y-=1b(q.K(J,\'4j\'))||0}B(W.5M){x+=1b(q.K(J,\'9p\'))||0;y+=1b(q.K(J,\'9q\'))||0}B(W.5V&&q.18.3y&&q.K(J,\'1L\')==\'f5\'){6i-=J.36||0;5Y-=J.2U||0}D 4K=W.5V?{2w:y-5Y,2D:x-6i,2U:5Y,36:6i}:{2w:y,2D:x};B(9r){q.1j(9r,4K);C l}L{C 4K}};(u($){$.fn.f6=q.fn.9u=u(s){B(!($.18.1E&&R 7U==\'u\'))C l;s=$.1j({2w:\'3U\',2D:\'3U\',2e:\'3U\',1i:\'3U\',1N:Y,3l:\'bG:1a;\'},s||{});D 12=u(n){C n&&n.28==6j?n+\'2o\':n},2h=\'<c7 4B="9u"f7="0"f8="-1"3l="\'+s.3l+\'"\'+\'1H="1L:43;26:3Z;z-2X:-1;\'+(s.1N!==1a?\'1z:f9(fa=\\\'0\\\');\':\'\')+\'2w:\'+(s.2w==\'3U\'?\'7R(((1b(l.1w.5R.4j)||0)*-1)+\\\'2o\\\')\':12(s.2w))+\';\'+\'2D:\'+(s.2D==\'3U\'?\'7R(((1b(l.1w.5R.4k)||0)*-1)+\\\'2o\\\')\':12(s.2D))+\';\'+\'2e:\'+(s.2e==\'3U\'?\'7R(l.1w.42+\\\'2o\\\')\':12(s.2e))+\';\'+\'1i:\'+(s.1i==\'3U\'?\'7R(l.1w.2V+\\\'2o\\\')\':12(s.1i))+\';\'+\'"/>\';C l.17(u(){B(!$(\'c7.9u\',l)[0])l.51(U.7b(2h),l.29)})}})(q);(u($){$.1j({1V:{c9:0}});$.fn.1V=u(2J,G){B(R 2J==\'3m\')G=2J;G=$.1j({2J:(2J&&R 2J==\'3p\'&&2J>0)?--2J:0,3v:14,3E:$.5K?Y:1a,4u:1a,c8:\'4u-3R-\',9N:14,9M:14,9O:14,9P:14,9K:\'av\',cj:14,cl:14,cf:1a,6o:14,6r:14,6t:14,7W:\'1V-2l\',4s:\'1V-3G\',6q:\'1V-3v\',6k:\'1V-1U\',8a:\'1V-1u\',9W:\'1V-fb\',ca:\'2b\'},G||{});$.18.80=$.18.80||$.18.1E&&R 7U==\'u\';u 9y(){cA(0,0)}C l.17(u(){D 1U=l;D 2l=$(\'6y.\'+G.7W,1U);2l=2l.4A()&&2l||$(\'>6y:eq(0)\',1U);D 1V=$(\'a\',2l);B(G.4u){D 9U={};1V.17(u(){$(l).2h(\'<41>\'+$(l).2h()+\'</41>\');D S=G.c8+(++$.1V.c9);D 22=\'#\'+S;9U[22]=l.4V;l.4V=22;$(\'<2b S="\'+S+\'" 4B="\'+G.6k+\'"></2b>\').69(1U)})}D 2B=$(\'2b.\'+G.6k,1U);2B=2B.4A()&&2B||$(\'>\'+G.ca,1U);2l.35(\'.\'+G.7W)||2l.2M(G.7W);2B.17(u(){D $$=$(l);$$.35(\'.\'+G.6k)||$$.2M(G.6k)});D 9x=$(\'1G\',2l).2X($(\'1G.\'+G.4s,2l)[0]);B(9x>=0){G.2J=9x}B(5D.22){1V.17(u(i){B(l.22==5D.22){G.2J=i;B(($.18.1E||$.18.3y)&&!G.4u){D 1X=$(5D.22);D 89=1X.1q(\'S\');1X.1q(\'S\',\'\');3u(u(){1X.1q(\'S\',89)},fc)}9y();C 1a}})}B($.18.1E){9y()}2B.1z(\':eq(\'+G.2J+\')\').1C().3n().2g(\':eq(\'+G.2J+\')\').2M(G.8a);B(!G.4u){$(\'1G\',2l).3o(G.4s).eq(G.2J).2M(G.4s)}B(G.cf){D 9E=u(2S){D 9B=$.4L(2B.2j(),u(el){D h,9z=$(el);B(2S){B($.18.80){el.1H.fd(\'cg\');el.1H.1i=\'\';el.8b=14}h=9z.K({\'4y-1i\':\'\'}).1i()}L{h=9z.1i()}C h}).fe(u(a,b){C b-a});B($.18.80){2B.17(u(){l.8b=9B[0]+\'2o\';l.1H.ff(\'cg\',\'l.1H.1i = l.8b ? l.8b : "4U"\')})}L{2B.K({\'4y-1i\':9B[0]+\'2o\'})}};9E();D 88=1U.42;D 9F=1U.2V;D 9D=$(\'#1V-ci-9C-4A\').2j(0)||$(\'<41 S="1V-ci-9C-4A">M</41>\').K({1L:\'43\',26:\'3Z\',82:\'2A\'}).69(U.1s).2j(0);D 84=9D.2V;5o(u(){D 85=1U.42;D 9G=1U.2V;D 86=9D.2V;B(9G>9F||85!=88||86!=84){9E((85>88||86<84));88=85;9F=9G;84=86}},50)}D 5F={},5y={},9T=G.cj||G.9K,9S=G.cl||G.9K;B(G.9M||G.9N){B(G.9M){5F[\'1i\']=\'1C\';5y[\'1i\']=\'1u\'}B(G.9N){5F[\'1N\']=\'1C\';5y[\'1N\']=\'1u\'}}L{B(G.9O){5F=G.9O}L{5F[\'4y-2e\']=0;9T=G.3E?50:1}B(G.9P){5y=G.9P}L{5y[\'4y-2e\']=0;9S=G.3E?50:1}}D 6o=G.6o,6r=G.6r,6t=G.6t;1V.2E(\'a1\',u(){D 1G=$(l).3D(\'1G:eq(0)\');B(1U.8c||1G.35(\'.\'+G.4s)||1G.35(\'.\'+G.6q)){C 1a}D 22=l.22;B($.18.1E){$(l).2f(\'2W\');B(G.3E){$.5K.4f(22);5D.22=22.1O(\'#\',\'\')}}L B($.18.33){D co=$(\'<1Z cn="\'+22+\'"><2b><46 H="3V" F="h" /></2b></1Z>\').2j(0);co.3V();$(l).2f(\'2W\');B(G.3E){$.5K.4f(22)}}L{B(G.3E){5D.22=22.1O(\'#\',\'\')}L{$(l).2f(\'2W\')}}});1V.2E(\'8h\',u(){D 1G=$(l).3D(\'1G:eq(0)\');B($.18.33){1G.30({1N:0},1,u(){1G.K({1N:\'\'})})}1G.2M(G.6q)});B(G.3v&&G.3v.I){V(D i=0,k=G.3v.I;i<k;i++){1V.eq(--G.3v[i]).2f(\'8h\').3n()}};1V.2E(\'a2\',u(){D 1G=$(l).3D(\'1G:eq(0)\');1G.3o(G.6q);B($.18.33){1G.30({1N:1},1,u(){1G.K({1N:\'\'})})}});1V.2E(\'2W\',u(e){D 8g=e.9Q;D 4Q=l,1G=$(l).3D(\'1G:eq(0)\'),1X=$(l.22),2s=2B.1z(\':3t\');B((R 6o==\'u\'&&6o(l,1X[0],2s[0])==1a&&8g)||1U.8c||1G.35(\'.\'+G.4s)||1G.35(\'.\'+G.6q)){l.9Y();C 1a}1U[\'8c\']=Y;B(1X.4A()){B($.18.1E&&G.3E){D 89=l.22.1O(\'#\',\'\');1X.1q(\'S\',\'\');3u(u(){1X.1q(\'S\',89)},0)}u 9V(){B(G.3E&&8g){$.5K.4f(4Q.22)}2s.30(5y,9S,u(){$(4Q).3D(\'1G:eq(0)\').2M(G.4s).cr().3o(G.4s);B(R 6r==\'u\'){6r(4Q,1X[0],2s[0])}2s.2M(G.8a).K({1L:\'\',4J:\'\',1i:\'\',1N:\'\'});1X.3o(G.8a).30(5F,9T,u(){1X.K({4J:\'\',1i:\'\',1N:\'\'});B($.18.1E){2s[0].1H.1z=\'\';1X[0].1H.1z=\'\'}B(R 6t==\'u\'){6t(4Q,1X[0],2s[0])}1U.8c=14})})}B(!G.4u){9V()}L{D $$=$(l),41=$(\'41\',l)[0],1J=41.45;$$.2M(G.9W);41.45=\'fj&#fm;\';3u(u(){$(4Q.22).4l(9U[4Q.22],u(){9V();41.45=1J;$$.3o(G.9W)})},0)}}L{79(\'fo 35 8Z fp 1U.\')}D cB=1g.8H||U.3b&&U.3b.36||U.1s.36||0;D cC=1g.8J||U.3b&&U.3b.2U||U.1s.2U||0;3u(u(){1g.cA(cB,cC)},0);l.9Y();C G.3E&&!!8g});B(G.4u){1V.eq(G.2J).2f(\'2W\').3n()}B(G.3E){$.5K.cE(u(){1V.eq(G.2J).2f(\'2W\').3n()})}})};D 6B=[\'a1\',\'8h\',\'a2\'];V(D i=0;i<6B.I;i++){$.fn[6B[i]]=(u(a3){C u(3R){C l.17(u(){D 2l=$(\'6y.1V-2l\',l);2l=2l.4A()&&2l||$(\'>6y:eq(0)\',l);D a;B(!3R||R 3R==\'3p\'){a=$(\'1G a\',2l).eq((3R&&3R>0&&3R-1||0))}L B(R 3R==\'1S\'){a=$(\'1G a[@4V$="#\'+3R+\'"]\',2l)}a.2f(a3)})}})(6B[i])}})(q);q.1j(q.fn,{aL:u(W){D N=1R q.N(W,l[0]);N.1v=l.3q(":46:2g(:3V):2g(:2S)").4z(u(){N.4a=l});B(N.G.78){l.3V(u(P){B(N.G.3j)P.3X();C N.1Z()})}B(N.G.P){N.1v.2E(N.G.P,u(){N.E(l)})}C N},1y:u(t){C l.71(q.3Y(l.2j(),t))},4S:u(S){C l.1z("[@V=\'"+S+"\']")}});q.1j(q.2p[":"],{aS:"!q.38(a.F)",aT:"!!q.38(a.F)"});q.N=u(W,1Z){l.G=q.1j({},q.N.4m,W);l.5v=1Z;l.4q=l.G.55;l.7u=l.4q.I&&l.4q||q(1Z);l.2B=l.G.77.2k(l.G.55);l.2S()};q.1j(q.N,{4m:{3P:{},3g:"1n",7M:Y,77:q([]),55:q([]),78:Y},aY:u(G){q.1j(q.N.4m,G)},3P:{1l:"aZ b0 35 1l.",6x:"1M 1K a F 8Z b1 b2 {0} 5i.",6w:"1M 1K a F b3 at b5 {0} 5i.",6z:"1M 1K a F 7O {0} 7i {1} 5i b7.",4T:"1M 1K a 2P 4T b8.",1f:"1M 1K a 2P b9.",2r:"1M 1K a 2P 2r.",7a:"1M 1K a 2P 2r (bb).",6W:"7c 7d 7f 5l bd¼bf bg 5l.",3p:"1M 1K a 2P 3p.",6V:"7c 7d 7f bi bj 5l.",5h:"1M 1K 96 5h",6F:"1M 1K 7t bk F bo.",6C:"1M 1K a F 7O {0} 7i {1}.",6O:"1M 1K a F bq 7k 4v 7l 3F {0}.",6A:"1M 1K a F bw 7k 4v 7l 3F {0}."},57:{1Z:u(){l.5q();V(D i=0,E;E=l.1v[i++];){l.4g(E)}C l.2P()},E:u(E){l.7o(E);l.4g(E);l.3J()},3J:u(2Q){B(2Q)q.1j(l.2C,2Q);l.G.3J?l.G.3J(l.2C,l):l.7L()},5n:u(){B(q.fn.5n)q(l.5v).5n();l.5q();l.5d();l.1v.3o(l.G.3g)},3H:u(7m){C q(7m)[0]},2Q:u(){C q("7Z."+l.G.3g,l.7u)},2S:u(E){l.2C={};l.1X=$([]);l.2s=$([])},5q:u(){l.2S();l.2s=l.2Q().1y(l.2B);l.1X.1y(l.2B)},7o:u(E){l.2S();l.2s=l.2Q().4S(l.4r(l.3H(E)))},4g:u(E){E=l.3H(E);q(E).3o(l.G.3g);D 2a=l.2a(E);V(D i=0,1P;1P=2a[i++];){3L{D 25=q.N.1k[1P.2d](q.38(E.F),E,1P.5B);B(25===-1)2Z;B(!25){q(E).2M(l.G.3g);l.7w(1P,E);2Z}}3B(e){l.G.3j&&1g.34&&34.1n("bJ bL bM bN E "+E.S+", 4g 7t \'"+1P.2d+"\' 2d");9h e}}},27:u(S,1P){D m=l.G.3P[S];C m&&(m.28==2H?m:m[1P.2d])},7w:u(1P,E){D S=l.4r(E),O=1P.5B;l.2C[S]=(E.2O||l.27(S,1P)||q.N.3P[1P.2d]||"<7B>bS: bT 27 bU V "+S+"</7B>").1O("{0}",(O.28==3x?O[0]:O)||"").1O("{1}",O[1]||"")},2P:u(){B(l.7G()){l.3J();C 1a}L{l.5d();B(l.G.7F){l.G.7F(l.5v);C 1a}C Y}},7G:u(){D 4E=0;q.17(l.2C,u(){4E++});C 4E},5d:u(){l.37("7V")},37:u(5b){D 3k=l;u 4e(){C 3k["3F"+5b]}B(l.G.4o){4e().1y(4e().3D(l.G.4o))}4e()[5b.2q()]();C l},7L:u(){D 2z=Y;V(D 47 23 l.2C){B(2z&&l.G.7M){B(l.4a&&l.2C[l.4a.S])l.4a.4z();L{3L{D E=q("#"+47);B(E.I)E[0].4z()}3B(e){l.G.3j&&1g.34&&34.1n(e)}}2z=1a}l.7X(47,l.2C[47])}l.2s=l.2s.2g(l.1X);l.37("7V").37("cd")},7X:u(S,27){D 1n=l.2Q().4S(S);B(1n.I){B(1n.1q("81")){1n.2h(27)}}L{1n=q("<7Z>").1q({"V":S,81:Y}).2M(l.G.3g).2h(27);B(l.G.4o){1n=1n.1u().1C().4n("<"+l.G.4o+">").19()}B(!l.4q.3s(1n).I)l.G.83?l.G.83(1n,q("#"+S)):1n.9H("#"+S)}l.1X.1y(1n)},2a:u(E){B(!l.T(E))C[];D 2a=[];q.17(l.T(E),u(2R,F){2a[2a.I]={2d:2R,5B:F}});C 2a},T:u(E){C l.G.2a?l.G.2a[l.4r(E)]:l.G.87?q(E).T()[l.G.87]:q(E).T()},4r:u(E){D S=(/40|4t/i.1m(E.H))?E.1e:E.S;B(!S){D 5E=E.1Z.S,5r=/[^a-cp-2t-9\\-6p]/g;S=E.S=(5E?5E.1O(5r,""):"")+E.1e.1O(5r,"")}C S}},3I:u(F,E){5J(E.1I.2q()){3h\'3Q\':C q("1T:3G",E).I;3h\'46\':B(/40|4t/i.1m(E.H))C q(E.1Z||U).3q(\'[@1e="\'+E.1e+\'"]:4I\').I}C F.I},8d:u(O,E){C l.5G[R O]?l.5G[R O](O,E):Y},5G:{"5L":u(O,E){C O},"1S":u(O,E){C!!q(O,E.1Z).I},"u":u(O,E){C O(E)}},1k:{1l:u(F,E,O){B(!q.N.8d(O,E))C-1;5J(E.1I.2q()){3h\'3Q\':D W=q("1T:3G",E);C W.I>0&&(E.H=="3Q-cz"||W[0].F.I>0);3h\'46\':5J(E.H.2q()){3h\'4t\':3h\'40\':C q.N.3I(F,E)>0}9Z:C F.I>0}},a0:u(F,E,O){C!q.N.1k.1l(F,E)||O.1m(F)},6w:u(F,E,O){D I=q.N.3I(F,E);C!q.N.1k.1l(F,E)||I>=O},6x:u(F,E,O){D I=q.N.3I(F,E);C!q.N.1k.1l(F,E)||I<=O},6z:u(F,E,O){D I=q.N.3I(F,E);C!q.N.1k.1l(F,E)||(I>=O[0]&&I<=O[1])},6A:u(F,E,O){C!q.N.1k.1l(F,E)||F>=O},6O:u(F,E,O){C!q.N.1k.1l(F,E)||F<=O},6C:u(F,E,O){C!q.N.1k.1l(F,E)||(F>=O[0]&&F<=O[1])},4T:u(F,E){C!q.N.1k.1l(F,E)||/^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$/i.1m(F)},1f:u(F,E){C!q.N.1k.1l(F,E)||/^(a4?|a5):\\/\\/[A-2t-9](\\.?[A-2t-4Y„1xœ1x–][A-2t-4W\\-1x„1xœ1x–]*)*(\\/([A-2t-4Y„1xœ1x–][A-2t-4W\\-\\.1x„1xœ1x–]*)?)*(\\?([A-2t-4Y„1xœ1x–][A-2t-4W\\-\\.%\\+=&1x„1xœ1x–]*)?)?$/i.1m(F)},2r:u(F,E){C!q.N.1k.1l(F,E)||!/bW|9f/.1m(1R 5H(F))},7a:u(F,E){C!q.N.1k.1l(F,E)||/^\\d{4}[/-]\\d{1,2}[/-]\\d{1,2}$/.1m(F)},6W:u(F,E){C!q.N.1k.1l(F,E)||/^\\d\\d?\\.\\d\\d?\\.\\d\\d\\d?\\d?$/.1m(F)},3p:u(F,E){C!q.N.1k.1l(F,E)||/^-?[,0-9]+(\\.\\d+)?$/.1m(F)},6V:u(F,E){C!q.N.1k.1l(F,E)||/^-?[\\.0-9]+(,\\d+)?$/.1m(F)},5h:u(F,E){C!q.N.1k.1l(F,E)||/^\\d+$/.1m(F)},6F:u(F,E,O){C F==q(""+O).1W()}},am:u(1e,2d,27){q.N.1k[1e]=2d;q.N.3P[1e]=27}});(u(){u 2k(1e,2d){B(!3x.57[1e]){3x.57[1e]=2d}};2k("cF",u(1A,21){21=21||1g;V(D i=0;i<l.I;i++)1A.3c(21,l[i],i,l)});2k("cG",u(1A,21){21=21||1g;V(D i=0;i<l.I;i++)B(!1A.3c(21,l[i],i,l))C 1a;C Y});2k("cH",u(1A,21){21=21||1g;V(D i=0;i<l.I;i++)B(1A.3c(21,l[i],i,l))C Y;C 1a});2k("4L",u(1A,21){21=21||1g;D r=[];V(D i=0;i<l.I;i++)r[r.I]=1A.3c(21,l[i],i,l);C r});2k("1z",u(1A,21){21=21||1g;D r=[];V(D i=0;i<l.I;i++)B(1A.3c(21,l[i],i,l))r[r.I]=l[i];C r});2k("1Q",u(a6,8l){V(D i=8l||0;i<l.I;i++)B(l[i]===a6)C i;C-1});2k("8m",u(){C l.1z(u(E,2X,8o){C 8o.1Q(E)>=2X})})})();(u($){D 1t={},2c,2O,68,8r=$.18.1E&&/cI\\s(5\\.5|6\\.)/.1m(a7.cq);$.fn.1j({6Z:u(G){G=$.1j({},$.6Z.4m,G);af();l.1z(\'[@2O]\').17(u(){l.2K=G}).2E("5a",ac).2E(G.P,6R);C l},6X:8r?u(){C l.17(u(){D 5p=$(l).K(\'8s\');B(5p.2I(/^1f\\(["\'](.*\\.cL)["\']\\)$/i)){5p=4D.$1;$(l).K({\'8s\':\'2x\',\'1z\':"cM:cN.cw.cQ(bP=Y, cT=cU, 3l=\'"+5p+"\')"}).17(u(){D 26=$(l).K(\'26\');B(26!=\'3Z\'&&26!=\'5C\')$(l).K(\'26\',\'5C\')})}})}:u(){C l},aF:8r?u(){C l.17(u(){$(l).K({\'1z\':\'\',8s:\'\'})})}:u(){C l},ag:u(1e,F){D 25=l.1q(1e);l.1q(1e,F);C 25},ch:u(){C l.17(u(){$(l)[$(l).2h()?"1C":"1u"]()})},1f:u(){C l.1q(\'4V\')||l.1q(\'3l\')}});u af(){B(1t.19)C;1t.19=$(\'<2b S="cW"><8v></8v><p 4B="1s"></p><p 4B="1f"></p></2b>\').1u().K({26:\'3Z\',cY:"d1"}).69(\'1s\');1t.2O=$(\'8v\',1t.19);1t.1s=$(\'p.1s\',1t.19);1t.1f=$(\'p.1f\',1t.19)}u 6R(P){B(l.2K.8P)68=3u(1C,l.2K.8P);L 1C();B(l.2K.d4)$(\'1s\').2E(\'9v\',4f);4f(P);B(l.2K.P!="2W")$(l).2E(\'2W\',1u);$(l).2E(\'8e\',1u)}u ac(){B(l==2c||!l.2O)C;2c=l;2O=$(l).ag(\'2O\',\'\');B(l.2K.ah){1t.2O.1u();1t.1s.2h(l.2K.ah.3c(l)).1C()}L B(l.2K.ai){D 8A=2O.4w(l.2K.ai);1t.2O.2h(8A.75()).1C();1t.1s.6s();V(D i=0,8B;8B=8A[i];i++){B(i>0)1t.1s.3s("<br/>");1t.1s.3s(8B)}1t.1s.ch()}L{1t.2O.2h(2O).1C();1t.1s.1u()}B(l.2K.aI&&$(l).1f())1t.1f.2h($(l).1f().1O(\'dg://\',\'\')).1C();L 1t.1f.1u();1t.19.2M(l.2K.8S);B(l.2K.6X)1t.19.6X()}u 1C(){68=14;1t.19.1C();4f()}u 4f(P){B(2c==14){$(\'1s\').64(\'9v\',4f);C}D 2D=1t.19[0].8C;D 2w=1t.19[0].8D;B(P){2D=P.9m+15;2w=P.aq+15;1t.19.K({2D:2D+\'2o\',2w:2w+\'2o\'})}D v=au(),h=1t.19[0];B(v.x+v.cx<h.8C+h.42){2D-=h.42+20;1t.19.K({2D:2D+\'2o\'})}B(v.y+v.cy<h.8D+h.2V){2w-=h.2V+20;1t.19.K({2w:2w+\'2o\'})}}u au(){D e=U.3b||{},b=U.1s||{},w=1g;u 4y(){D v=dr;V(D i=0;i<11.I;i++){D n=11[i];B(n&&n<v)v=n}C v}C{x:w.8H||e.36||b.36||0,y:w.8J||e.2U||b.2U||0,cx:4y(e.5X,b.5X,w.8L),cy:4y(e.4c,b.4c,w.67)}}u 1u(P){B(68)ce(68);2c=14;1t.19.1u().3o(l.2K.8S);B(P.H!="2W"){$(l).1q(\'2O\',2O).64(\'8e\',1u)}B(l.2K.P!="2W")$(l).64(\'2W\',1u);B(l.2K.6X)1t.19.aF()}$.6Z={};$.6Z.4m={8P:dQ,P:"5a",aI:Y,8S:""}})(q);q.1j(q.fn,{aL:u(W){D N=1R q.N(W,l[0]);N.1v=l.3q(":46:2g(:3V):2g(:2S)").4z(u(){N.4a=l});B(N.G.78){l.3V(u(P){B(N.G.3j)P.3X();C N.1Z()})}B(N.G.P){N.1v.2E(N.G.P,u(){N.E(l)})}C N},1y:u(t){C l.71(q.3Y(l.2j(),t))},4S:u(S){C l.1z("[@V=\'"+S+"\']")}});q.1j(q.2p[":"],{aS:"!q.38(a.F)",aT:"!!q.38(a.F)"});q.N=u(W,1Z){l.G=q.1j({},q.N.4m,W);l.5v=1Z;l.4q=l.G.55;l.7u=l.4q.I&&l.4q||q(1Z);l.2B=l.G.77.2k(l.G.55);l.2S()};q.1j(q.N,{4m:{3P:{},3g:"1n",7M:Y,77:q([]),55:q([]),78:Y},aY:u(G){q.1j(q.N.4m,G)},3P:{1l:"aZ b0 35 1l.",6x:"1M 1K a F 8Z b1 b2 {0} 5i.",6w:"1M 1K a F b3 at b5 {0} 5i.",6z:"1M 1K a F 7O {0} 7i {1} 5i b7.",4T:"1M 1K a 2P 4T b8.",1f:"1M 1K a 2P b9.",2r:"1M 1K a 2P 2r.",7a:"1M 1K a 2P 2r (bb).",6W:"7c 7d 7f 5l bd¼bf bg 5l.",3p:"1M 1K a 2P 3p.",6V:"7c 7d 7f bi bj 5l.",5h:"1M 1K 96 5h",6F:"1M 1K 7t bk F bo.",6C:"1M 1K a F 7O {0} 7i {1}.",6O:"1M 1K a F bq 7k 4v 7l 3F {0}.",6A:"1M 1K a F bw 7k 4v 7l 3F {0}."},57:{1Z:u(){l.5q();V(D i=0,E;E=l.1v[i++];){l.4g(E)}C l.2P()},E:u(E){l.7o(E);l.4g(E);l.3J()},3J:u(2Q){B(2Q)q.1j(l.2C,2Q);l.G.3J?l.G.3J(l.2C,l):l.7L()},5n:u(){B(q.fn.5n)q(l.5v).5n();l.5q();l.5d();l.1v.3o(l.G.3g)},3H:u(7m){C q(7m)[0]},2Q:u(){C q("7Z."+l.G.3g,l.7u)},2S:u(E){l.2C={};l.1X=$([]);l.2s=$([])},5q:u(){l.2S();l.2s=l.2Q().1y(l.2B);l.1X.1y(l.2B)},7o:u(E){l.2S();l.2s=l.2Q().4S(l.4r(l.3H(E)))},4g:u(E){E=l.3H(E);q(E).3o(l.G.3g);D 2a=l.2a(E);V(D i=0,1P;1P=2a[i++];){3L{D 25=q.N.1k[1P.2d](q.38(E.F),E,1P.5B);B(25===-1)2Z;B(!25){q(E).2M(l.G.3g);l.7w(1P,E);2Z}}3B(e){l.G.3j&&1g.34&&34.1n("bJ bL bM bN E "+E.S+", 4g 7t \'"+1P.2d+"\' 2d");9h e}}},27:u(S,1P){D m=l.G.3P[S];C m&&(m.28==2H?m:m[1P.2d])},7w:u(1P,E){D S=l.4r(E),O=1P.5B;l.2C[S]=(E.2O||l.27(S,1P)||q.N.3P[1P.2d]||"<7B>bS: bT 27 bU V "+S+"</7B>").1O("{0}",(O.28==3x?O[0]:O)||"").1O("{1}",O[1]||"")},2P:u(){B(l.7G()){l.3J();C 1a}L{l.5d();B(l.G.7F){l.G.7F(l.5v);C 1a}C Y}},7G:u(){D 4E=0;q.17(l.2C,u(){4E++});C 4E},5d:u(){l.37("7V")},37:u(5b){D 3k=l;u 4e(){C 3k["3F"+5b]}B(l.G.4o){4e().1y(4e().3D(l.G.4o))}4e()[5b.2q()]();C l},7L:u(){D 2z=Y;V(D 47 23 l.2C){B(2z&&l.G.7M){B(l.4a&&l.2C[l.4a.S])l.4a.4z();L{3L{D E=q("#"+47);B(E.I)E[0].4z()}3B(e){l.G.3j&&1g.34&&34.1n(e)}}2z=1a}l.7X(47,l.2C[47])}l.2s=l.2s.2g(l.1X);l.37("7V").37("cd")},7X:u(S,27){D 1n=l.2Q().4S(S);B(1n.I){B(1n.1q("81")){1n.2h(27)}}L{1n=q("<7Z>").1q({"V":S,81:Y}).2M(l.G.3g).2h(27);B(l.G.4o){1n=1n.1u().1C().4n("<"+l.G.4o+">").19()}B(!l.4q.3s(1n).I)l.G.83?l.G.83(1n,q("#"+S)):1n.9H("#"+S)}l.1X.1y(1n)},2a:u(E){B(!l.T(E))C[];D 2a=[];q.17(l.T(E),u(2R,F){2a[2a.I]={2d:2R,5B:F}});C 2a},T:u(E){C l.G.2a?l.G.2a[l.4r(E)]:l.G.87?q(E).T()[l.G.87]:q(E).T()},4r:u(E){D S=(/40|4t/i.1m(E.H))?E.1e:E.S;B(!S){D 5E=E.1Z.S,5r=/[^a-cp-2t-9\\-6p]/g;S=E.S=(5E?5E.1O(5r,""):"")+E.1e.1O(5r,"")}C S}},3I:u(F,E){5J(E.1I.2q()){3h\'3Q\':C q("1T:3G",E).I;3h\'46\':B(/40|4t/i.1m(E.H))C q(E.1Z||U).3q(\'[@1e="\'+E.1e+\'"]:4I\').I}C F.I},8d:u(O,E){C l.5G[R O]?l.5G[R O](O,E):Y},5G:{"5L":u(O,E){C O},"1S":u(O,E){C!!q(O,E.1Z).I},"u":u(O,E){C O(E)}},1k:{1l:u(F,E,O){B(!q.N.8d(O,E))C-1;5J(E.1I.2q()){3h\'3Q\':D W=q("1T:3G",E);C W.I>0&&(E.H=="3Q-cz"||W[0].F.I>0);3h\'46\':5J(E.H.2q()){3h\'4t\':3h\'40\':C q.N.3I(F,E)>0}9Z:C F.I>0}},a0:u(F,E,O){C!q.N.1k.1l(F,E)||O.1m(F)},6w:u(F,E,O){D I=q.N.3I(F,E);C!q.N.1k.1l(F,E)||I>=O},6x:u(F,E,O){D I=q.N.3I(F,E);C!q.N.1k.1l(F,E)||I<=O},6z:u(F,E,O){D I=q.N.3I(F,E);C!q.N.1k.1l(F,E)||(I>=O[0]&&I<=O[1])},6A:u(F,E,O){C!q.N.1k.1l(F,E)||F>=O},6O:u(F,E,O){C!q.N.1k.1l(F,E)||F<=O},6C:u(F,E,O){C!q.N.1k.1l(F,E)||(F>=O[0]&&F<=O[1])},4T:u(F,E){C!q.N.1k.1l(F,E)||/^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$/i.1m(F)},1f:u(F,E){C!q.N.1k.1l(F,E)||/^(a4?|a5):\\/\\/[A-2t-9](\\.?[A-2t-4Y„1xœ1x–][A-2t-4W\\-1x„1xœ1x–]*)*(\\/([A-2t-4Y„1xœ1x–][A-2t-4W\\-\\.1x„1xœ1x–]*)?)*(\\?([A-2t-4Y„1xœ1x–][A-2t-4W\\-\\.%\\+=&1x„1xœ1x–]*)?)?$/i.1m(F)},2r:u(F,E){C!q.N.1k.1l(F,E)||!/bW|9f/.1m(1R 5H(F))},7a:u(F,E){C!q.N.1k.1l(F,E)||/^\\d{4}[/-]\\d{1,2}[/-]\\d{1,2}$/.1m(F)},6W:u(F,E){C!q.N.1k.1l(F,E)||/^\\d\\d?\\.\\d\\d?\\.\\d\\d\\d?\\d?$/.1m(F)},3p:u(F,E){C!q.N.1k.1l(F,E)||/^-?[,0-9]+(\\.\\d+)?$/.1m(F)},6V:u(F,E){C!q.N.1k.1l(F,E)||/^-?[\\.0-9]+(,\\d+)?$/.1m(F)},5h:u(F,E){C!q.N.1k.1l(F,E)||/^\\d+$/.1m(F)},6F:u(F,E,O){C F==q(""+O).1W()}},am:u(1e,2d,27){q.N.1k[1e]=2d;q.N.3P[1e]=27}});(u($){$.fn.2n=u(W){C l.17(u(){$.2n(l,W)})};$.2n=u(1U,W){D G={\'5k\':14,\'2n\':\'5N\',\'31\':dq,\'73\':\'8V\',\'1p\':\'av\',\'4B\':\'2n\',\'1i\':\'3U\'};B(W)$.1j(G,W);B(G.5k===14)D 1v=$(1U).5k();L D 1v=$(1U).5k(G.5k);B(1v.I>1){$(1U).K(\'26\',\'5C\');$(1U).K(\'1i\',G["1i"]);$(1U).2M(G["4B"]);V(D i=0;i<1v.I;i++){$(1v[i]).K(\'z-2X\',2H(1v.I-i));$(1v[i]).K(\'26\',\'3Z\');$(1v[i]).1u()};B(G["2n"]=="5N"){3u(u(){$.2n.7e(1v,G,1,0)},G.31);$(1v[0]).1C()}L B(G["2n"]=="5I"){3u(u(){do{2c=48.aW(48.5I()*1v.I)}2N(2c==0)$.2n.7e(1v,G,2c,0)},G.31);$(1v[0]).1C()}L 79(\'q: 2n: 90 "2n" 91 92 be "5N" 4v "5I"\')}};$.2n.7e=u(1v,G,2c,2v){B(G["73"]==\'aU\'){$(1v[2v]).aJ(G.1p,$(1v[2c]).aM(G.1p))}L B(G["73"]==\'8V\'){$(1v[2v]).aO(G.1p);$(1v[2c]).aP(G.1p)}L 79(\'q: 2n: 90 "73" 91 92 be "aU" 4v "8V"\');B(G["2n"]=="5N"){B((2c+1)<1v.I){2c=2c+1;2v=2c-1}L{2c=0;2v=1v.I-1}}L B(G["2n"]=="5I"){2v=2c;2N(2c==2v)2c=48.aW(48.5I()*1v.I)}L 79(\'q: 2n: 90 "2n" 91 92 be "5N" 4v "5I"\');3u((u(){$.2n.7e(1v,G,2c,2v)}),G.31)}})(q);(u($){$.3M=u(){l.3W={};C};$.3M.57={6n:u(){D Q={"S":14,"4H":4b,"7P":1a,"7J":1a,"16":14,"3a":u(){},"1B":[]};u 6h(fn){C(!!fn&&R fn!="1S"&&R fn[0]=="1c"&&4D("u","i").1m(fn+""))};D i=0;D 9g=1a;B(R 11[i]=="3m"&&11.I>1){9g=Y;i++}B(R 11[i]=="3m"){V(D 1T 23 11[i])B(R Q[1T]!="1c")Q[1T]=11[i][1T];i++}B(R 11[i]=="3p"||(R 11[i]=="1S"&&11[i].2I(4D("^[0-9]+[bH]$"))))Q["4H"]=11[i++];B(R 11[i]=="5L")Q["7P"]=11[i++];B(R 11[i]=="5L")Q["7J"]=11[i++];B(R 11[i]=="3m"&&R 11[i+1]=="1S"&&6h(11[i][11[i+1]])){Q["16"]=11[i++];Q["3a"]=11[i++]}L B(R 11[i]!="1c"&&(6h(11[i])||R 11[i]=="1S"))Q["3a"]=11[i++];2N(R 11[i]!="1c")Q["1B"].1y(11[i++]);B(9g){B(R 11[1]=="3m"){V(D 1T 23 11[0])B(R Q[1T]!="1c"&&R 11[1][1T]=="1c")Q[1T]=11[0][1T]}L{V(D 1T 23 11[0])B(R Q[1T]!="1c")Q[1T]=11[0][1T]}i++}Q["7S"]=l;Q["7Y"]=14;D 2I=2H(Q["4H"]).2I(4D("^([0-9]+)([bH])$"));B(2I&&2I[0]!="1c"&&2I[1]!="1c")Q["4H"]=2H(1b(2I[1])*{s:4b,m:4b*60,h:4b*60*60,d:4b*60*60*24,w:4b*60*60*24*7}[2I[2]]);B(Q["S"]==14)Q["S"]=(2H(Q["7P"])+":"+2H(Q["7J"])+":"+2H(Q["4H"])+":"+2H(Q["16"])+":"+2H(Q["3a"])+":"+2H(Q["1B"]));B(Q["7J"])B(R l.3W[Q["S"]]!="1c")C l.3W[Q["S"]];B(!6h(Q["3a"])){B(Q["16"]!=14&&R Q["16"]=="3m"&&R Q["3a"]=="1S"&&6h(Q["16"][Q["3a"]]))Q["3a"]=Q["16"][Q["3a"]];L Q["3a"]=7N("u () { "+Q["3a"]+" }")}Q["7Y"]=l.7Q(Q);l.3W[Q["S"]]=Q;C Q},9I:u(Q){B(R Q=="1S")Q=l.3W[Q];Q["7Y"]=l.7Q(Q);C Q},7Q:u(Q){D cc=u(){D 16=(Q["16"]!=14?Q["16"]:Q);(Q["3a"]).1D(16,Q["1B"]);B(R(Q["7S"]).3W[Q["S"]]!="1c"&&Q["7P"])(Q["7S"]).7Q(Q);L 6m(Q["7S"]).3W[Q["S"]]};C 3u(cc,Q["4H"])},9L:u(Q){B(R Q=="1S")Q=l.3W[Q];B(R Q=="3m"){ce(Q["7Y"]);6m l.3W[Q["S"]]}}};$.1j({3M$:1R $.3M(),6n:u(){C $.3M$.6n.1D($.3M$,11)},9I:u(){C $.3M$.9I.1D($.3M$,11)},9L:u(){C $.3M$.9L.1D($.3M$,11)}});$.fn.1j({6n:u(){D a=[{}];V(D i=0;i<11.I;i++)a.1y(11[i]);C l.17(u(){a[0]={"S":l,"16":l};C $.6n.1D($,a)})}})})(q);(u($){$.1j({5z$:14,3j:u(cs){D cu=($.5z$==Y?Y:1a);$.5z$=(cs?Y:1a);C cu},5O:u(27){B($.5z$==Y)34.3j(27)}});$.fn.1j({5O:u(27){B($.5z$==Y){C l.17(u(){B(R 27!=="1c")$.5O(27);$.5O(l)})}}});$(U).3f(u(){D 8f=$("2h").1q("3j");B(8f=="Y"||8f=="1a")$.3j(8f=="Y"?Y:1a)});$(U).3f(u(){B(R 1g.34==="1c"){u ck(16){D 1J=14;B(R 16==="1c")1J="[1c]";L B(R 16==="5L")1J=(16?"Y":"1a");L B(R 16==="3p")1J=""+16;L B(R 16==="1S")1J=16;L B(R 16==="u")1J=16;L B(R 16==="3m"){B(R 16.2Y!=="1c"){B(16.2Y==1){1J=\'&8i;\';1J+=16.1I.2q();V(D i=0;i<16.8j.I;i++)1J+=\' \'+16.8j[i].1I.2q()+\'="\'+16.8j[i].6u+\'"\';1J+=\'&8k;\'}L B(16.2Y==2)1J=16.1I+\'="\'+16.6u;L B(16.2Y==3)1J=16.6u}L B(R 16.aB!=="1c")1J=16.aB();L B(R 16.4R!=="1c")1J=16.4R()}B(1J==14)1J="[d9]";C 1J};$(U).3f(u(){$("1s").3s(\'<2b S="4C"><4N></4N></2b>\');$("#4C").K("1L","2x").K("ds","dt").K("du","#dy").K("dD","#dK").K("5M","6N 5f 6N 5f").K("62","65 cv #dS").K("6P","65 65 65 65");$("#4C 4N").K("6P","5f 5f 5f 5f").K("8W","e6")});D 9s=["5O","3j","ek","eu","1n","eC","6a","eF","eI","eK","4H","eR","4E","eY","f2","f4"];1g.34={};V(D i=0;i<9s.I;i++){1g.34[9s[i]]=u(cm){$(\'#4C\').K("1L",$.5z$==Y?"43":"2x");$(\'#4C 4N\').3s(\'<1G>\'+ck(cm)+\'</1G>\').K;$("#4C 4N 1G").K("fi","4U cv #fq").K("5M","4U 6N 4U 6N")}}1g.34["4C"]=Y}})})(q);(u($){$.1j({dk:u(){D 1F={\'1f\':14,\'8z\':Y,\'cb\':14,\'c5\':14};B(R 11[0]=="1S"){1F.1f=11[0];B(R 11[1]=="u")1F.cb=11[1]}L B(R 11[0]=="3m"){V(D 1T 23 11[0])B(R 1F[1T]!="1c")1F[1T]=11[0][1T]}D 4P=$(U.7b(\'44\')).1q(\'H\',\'1J/bG\').1q(\'3l\',1F.1f);B(1F.8z||1F.cb!==14){D 1h=u(){B(1F.cb!==14){D 1B=1F.c5;B(1B===14)1B=[];L B(!(R 1B==="3m"&&1B fh 3x))1B=[1B];1F.cb.1D(l,1B)}B(1F.8z)$(l).3T()};B($.18.1E){4P.2j(0).5c=u(){B(l.4p=="39"||l.4p=="9X")1h.3c(l)}}L B($.18.33){$.5s=5o(u(){B(4P.2j(0).4p=="39"||4P.2j(0).4p=="9X"){6D($.5s);$.5s=14;1h.3c(4P.2j(0))}},9t)}L{$(4P).4l(1h)}}$(\'eV\',U).3s(4P)}})})(q);',62,957,'|||||||||||||||||||||this|||||jQuery||||function|||||||if|return|var|element|value|settings|type|length|elem|css|else||validator|param|event|ctx|typeof|id|data|document|for|options||true|||arguments|prop||null||obj|each|browser|parent|false|parseInt|undefined|ret|name|url|window|callback|height|extend|methods|required|test|error|xml|speed|attr|cur|body|helper|hide|elements|parentNode|Ã|push|filter|handler|args|show|apply|msie|arg|li|style|nodeName|text|enter|display|Please|opacity|replace|rule|indexOf|new|string|option|container|tabs|val|toShow|status|form||scope|hash|in||result|position|message|constructor|firstChild|rules|div|current|method|width|trigger|not|html|className|get|add|nav|events|alternation|px|expr|toLowerCase|date|toHide|Z0|expires|last|top|none|global|first|hidden|containers|errorList|left|bind|isFunction|context|String|match|initial|tSettings|opt|addClass|while|title|valid|errors|key|reset|num|scrollTop|offsetHeight|click|index|nodeType|break|animate|timeout|queue|safari|console|is|scrollLeft|toggle|trim|complete|func|documentElement|call|old|easing|ready|errorClass|case|target|debug|self|src|object|end|removeClass|number|find|elems|append|visible|setTimeout|disabled|table|Array|opera|done|ifModified|catch|tbody|parents|bookmarkable|to|selected|clean|getLength|showErrors|nth|try|scheduler|orig|params|messages|select|tab|duration|remove|auto|submit|bucket|preventDefault|merge|absolute|radio|span|offsetWidth|block|script|innerHTML|input|elementID|Math|tb|lastActive|1000|clientHeight|nextSibling|which|update|check|cookie|mozilla|borderTopWidth|borderLeftWidth|load|defaults|wrap|wrapper|readyState|labelContainer|findId|selectedClass|checkbox|remote|or|split|fix|min|focus|size|class|jQueryDebug|RegExp|count|encodeURIComponent|oid|time|checked|overflow|returnValue|map|pushStack|ol|firstNum|node|clicked|toString|forId|email|1px|href|9_|exec|9Ã|res||insertBefore|stopPropagation|cssFloat|custom|errorLabelContainer|success|prototype|grep|oldblock|mouseover|that|onreadystatechange|hideErrors|timers|0px|curAnim|digits|characters|guid|children|ein|re|resetForm|setInterval|image|prepareForm|idcleanup|safariTimer|sibling|tmp|currentForm|boxModel|static|hideAnim|_debug|now|parameters|relative|location|formId|showAnim|dependTypes|Date|random|switch|ajaxHistory|boolean|padding|sequence|log|childNodes|fx|currentStyle|substr|re2|handlers|scroll|makeArray|clientWidth|st|originalEvent||readyList|border|removeChild|unbind|4px|curCSS|innerHeight|tID|appendTo|dir|ownerDocument|multiFilter|path|domain|domManip|op|_isfn|sl|Number|containerClass|has|delete|schedule|onClick|_|disabledClass|onHide|empty|onShow|nodeValue|on|minLength|maxLength|ul|rangeLength|minValue|tabEvents|rangeValue|clearInterval|ajax|equalTo|tr|oldDisplay|styleFloat|toUpperCase|step|ajaxSettings|mergeNum|10px|maxValue|margin|inArray|handle|token|foundToken|getAttribute|numberDE|dateDE|fixPNG|isReady|Tooltip|Function|setArray|doc|animation|diff|shift|parseFloat|errorContainer|onsubmit|alert|dateISO|createElement|Bitte|geben|_next|Sie|setRequestHeader|defaultView|and|ival|than|equal|selector|lastModified|prepareElement|oHeight|responseText|jquery|tag|the|errorContext|getTime|formatAndAdd|handleError|secure|cloneNode|async|strong|oWidth|max|child|submitHandler|countErrors|tagName|absparent|protect|button|defaultShowErrors|focusInvalid|eval|between|repeat|_schedule|expression|_scheduler|modRes|XMLHttpRequest|Hide|navClass|showError|_handle|label|msie6|generated|visibility|errorPlacement|cachedFontSize|currentWidth|currentFontSize|meta|cachedWidth|toShowId|hideClass|minHeight|locked|depend|mouseout|req|trueClick|disableTab|lt|attributes|gt|offset|unique|isXMLDoc|array|clone|parPos|IE|backgroundImage|swap|getComputedStyle|h3|float|second|inv|gc|parts|part|offsetLeft|offsetTop|chars|pass|classFilter|pageXOffset|matched|pageYOffset|triggered|innerWidth|lastToggle|els|handleHover|delay|getElementById|unload|extraClass|fn2|from|fade|paddingRight|startTime|lastNum|no|parameter|must|either|slice|GET|00|only|isTimeout|requestDone|active|file|Modified|getResponseHeader|evalScripts|globalEval|NaN|override|throw|join|cookies|substring|cookieValue|pageX|appendChild|relparent|paddingLeft|paddingTop|returnObject|names|100|bgiframe|mousemove|deep|hasSelectedClass|unFocus|jq|dataType|heights|font|watchFontSize|_setAutoHeight|cachedHeight|currentHeight|insertAfter|reschedule|_resort|fxSpeed|cancel|fxSlide|fxFade|fxShow|fxHide|clientX|pos|hideSpeed|showSpeed|remoteUrls|switchTab|loadingClass|loaded|blur|default|regex|triggerTab|enableTab|tabEvent|https|ftp|subject|navigator|prevObject|zoom|alpha|exclude|save|force|getPropertyValue|createHelper|getAndSetAttr|bodyHandler|showBody|webkit|prepend||addMethod|removeAttr|previousSibling|contains|pageY|password|tl||viewport|normal|parse|_prefix|even|odd|unshift|toJSONString|srcElement|one|DOMContentLoaded|unfixPNG|__ie_init|newProp|showURL|slideUp|_toggle|validate|slideDown|state|fadeOut|fadeIn|swing|dequeue|blank|filled|slide|timer|floor|oldOverflow|setDefaults|This|field|longer|then|of|getScript|least|POST|long|address|URL|processData|ISO|ActiveXObject|gÃ||ltiges|Datum|contentType|eine|Nummer|same||beforeSend|ajaxSend|again|notmodified|less||ajaxSuccess||ajaxComplete|ajaxStop|greater|ajaxError|httpSuccess|200|getElementsByTagName|httpNotModified|Last|304|xmlRes|httpData|javascript|smhdw|json|exception|execScript|occured|when|checking|ywdhms|enabled|setTime|toUTCString|Warning|No|defined|_height|Invalid|_width|borderBottomWidth|paddingBottom|borderRightWidth|offsetParent|marginLeft|marginTop|before|cb_args|after|iframe|hashPrefix|remoteCount|tabStruct||trampoline|Show|clearTimeout|fxAutoHeight|behaviour|hideWhenEmpty|watch|fxShowSpeed|object2text|fxHideSpeed|msg|action|tempForm|zA|userAgent|siblings|onoff||old_value|solid|Microsoft|||multiple|scrollTo|scrollX|scrollY|ajaxStart|initialize|forEach|every|some|MSIE|createTextNode|FORM|png|progid|DXImageTransform|weight|line|AlphaImageLoader|Bottom|Left|sizingMethod|crop|right|tooltip|tfoot|zIndex|td|th|3000|htmlFor|readonly|track|readOnly|getAttributeNode|setAttribute|ig|unknown|concat|compatible|compatMode|next|prev|prependTo|http|removeAttribute|toggleClass|lastChild|getScriptXS|textarea|u0128|uFFFF||continue|2000|Infinity|fontFamily|monospace|backgroundColor|thead|clientY|cancelBubble|ffffff|fromElement|toElement|relatedTarget|removeEventListener|color|dblclick|mousedown|mouseup|keydown|keypress|keyup|000000|addEventListener|write|scr|ipt|defer|250|slideToggle|666699|fadeTo|Object|slow|change|600|fast|400|resize|linear|cos|PI|10000|loadIfModified|20px|serialize|hover|textContent|getIfModified|getJSON|post|ajaxTimeout|ajaxSetup|application|www|urlencoded|XMLHTTP|open|info||Content|Type|If|Since||Thu|01|Jan|warn|1970|GMT|Requested|With|overrideMimeType|Connection|close|assert|abort|send|dirxml|protocol|300|group|content|groupEnd|responseXML|Right|center|horizontal|vertical|Top|timeEnd|365|Width|invalid|head|decodeURIComponent|scrollHeight|trace|scrollWidth|outerHeight|outerWidth|profile|reverse|profileEnd|inline|bgIframe|frameborder|tabindex|Alpha|Opacity|loading|500|removeExpression|sort|setExpression|noConflict|instanceof|borderBottom|Loading|CSS1Compat||8230||There|such|cccccc'.split('|'),0,{}))
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr 12 16:03:30 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 3C90B75306C; Thu, 12 Apr 2007 16:03:30 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cfg
Message-Id: <20070412140330.3C90B75306C@mail.ossp.org>
Date: Thu, 12 Apr 2007 16:03:30 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Apr-2007 16:03:30
  Branch: HEAD                             Handle: 2007041215032900

  Modified files:
    ossp-pkg/ase            ase.cfg

  Log:
    cleanup configuration

  Summary:
    Revision    Changes     Path
    1.21        +19 -10     ossp-pkg/ase/ase.cfg
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cfg
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 ase.cfg
  --- ossp-pkg/ase/ase.cfg	12 Apr 2007 14:00:27 -0000	1.20
  +++ ossp-pkg/ase/ase.cfg	12 Apr 2007 14:03:29 -0000	1.21
  @@ -24,31 +24,40 @@
   ##  ase.cfg: application configuration
   ##
   
  +#   project and service information
   project-name                "OSSP";
   service-name                "OSSP Affiliation Service Environment (ASE)";
   service-sender              "nobody@ossp.org";
   service-admin               "rse@engelschall.com";
  +
  +#   input field requirements
  +requirement-realname        q{^.*\S+\s+\S+.*$}     "at least 2 words";
  +requirement-nickname        q{^[a-z][a-z0-9]{3,}$} "empty or at least 4 lower-case characters";
  +requirement-password        q{^.{6,}$}             "at least 6 characters";
  +
  +#   access control and black-listing
   fetch-url-acl               q{^https?:\/\/(?:localhost|\S+\.engelschall\.com)};
  +blacklist-email             q{\@temporaryinbox\.com$} q{\@put2\.net$} q{\@senseless-entertainment\.com$}
  +                            q{\@afrobacon\.com$} q{\@golfilla\.info$} q{\@trashmail\.net$};
  +
  +#   login contstraints
   login-failures-max          3;
   login-failures-time-range   2m;
   login-failures-time-penalty 10m;
  +
  +#   heartbeat parameters
   heartbeat-interval          6M;
   heartbeat-reminders         4w 2w 1w 1d;
   heartbeat-graceperiod       2w;
  +
  +#   notifications
   instant-notification-urls   "http://localhost/ase/sample.cgi?mode=notify;uuid=%s";
  -requirement-realname        q{^.*\S+\s+\S+.*$}     "at least 2 words";
  -requirement-nickname        q{^[a-z][a-z0-9]{3,}$} "empty or at least 4 lower-case characters";
  -requirement-password        q{^.{6,}$}             "at least 6 characters";
  -blacklist-email             q{\@temporaryinbox\.com$}
  -                            q{\@put2\.net$}
  -                            q{\@senseless-entertainment\.com$}
  -                            q{\@afrobacon\.com$}
  -                            q{\@golfilla\.info$}
  -                            q{\@trashmail\.net$};
  +
  +#   additional display notices
   notice-enrollment           q{};
   notice-resign               q{};
   
  -#   HTTP cookie based authentication tokens
  +#   authentication certificates
   certificates {
       token secret "my secret" name "ASE-CERT" domain .ossp.org path /;
       # token secret "my secret" name "ASE-CERT" domain .openpkg.org path / reflector "http://www.openpkg.org/ase-reflect.cgi";
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr 12 16:04:48 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id C9D0475292F; Thu, 12 Apr 2007 16:04:47 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.main.pl
Message-Id: <20070412140447.C9D0475292F@mail.ossp.org>
Date: Thu, 12 Apr 2007 16:04:47 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Apr-2007 16:04:47
  Branch: HEAD                             Handle: 2007041215044600

  Modified files:
    ossp-pkg/ase            ase.cgi.main.pl

  Log:
    use ASE-SID in companion to ASE-CERT for the session id

  Summary:
    Revision    Changes     Path
    1.47        +2  -2      ossp-pkg/ase/ase.cgi.main.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.46 -r1.47 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	12 Apr 2007 14:00:27 -0000	1.46
  +++ ossp-pkg/ase/ase.cgi.main.pl	12 Apr 2007 14:04:46 -0000	1.47
  @@ -102,8 +102,8 @@
       $self->param(-dbi => $dbi);
   
       #   establish session object
  -    CGI::Session->name("sid");
  -    my $sid = ($cgi->cookie("sid") || undef);
  +    CGI::Session->name("ASE-SID");
  +    my $sid = ($cgi->cookie("ASE-SID") || undef);
       my $session = new CGI::Session(
           "driver:sqlite;serializer:Storable;id:uuid", $sid,
           { Handle => $dbi->dbh(), TableName => 'ase_sessions' }
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr 12 22:48:11 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id EC8A675292F; Thu, 12 Apr 2007 22:48:10 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.ui.jquery.js
Message-Id: <20070412204810.EC8A675292F@mail.ossp.org>
Date: Thu, 12 Apr 2007 22:48:10 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Apr-2007 22:48:10
  Branch: HEAD                             Handle: 2007041221480900

  Modified files:
    ossp-pkg/ase            ase.ui.jquery.js

  Log:
    upgrade to latest version of JavaScript stuff

  Summary:
    Revision    Changes     Path
    1.6         +1  -1      ossp-pkg/ase/ase.ui.jquery.js
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.ui.jquery.js
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ase.ui.jquery.js
  --- ossp-pkg/ase/ase.ui.jquery.js	12 Apr 2007 14:00:27 -0000	1.5
  +++ ossp-pkg/ase/ase.ui.jquery.js	12 Apr 2007 20:48:09 -0000	1.6
  @@ -1 +1 @@
  -eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('B(R 1g.q=="1c"){1g.1c=1g.1c;D q=u(a,c){B(1g==l)C 1R q(a,c);a=a||U;B(q.2F(a))C 1R q(U)[q.fn.3f?"3f":"4l"](a);B(R a=="1S"){D m=/^[^<]*(<(.|\\s)+>)[^>]*$/.4X(a);B(m)a=q.3H([m[1]]);L C 1R q(c).3q(a)}C l.71(a.28==3x&&a||(a.7r||a.I&&a!=1g&&!a.2Y&&a[0]!=1c&&a[0].2Y)&&q.5W(a)||[a])};B(R $!="1c")q.6p$=$;D $=q;q.fn=q.57={7r:"1.1.2",4A:u(){C l.I},I:0,2j:u(2T){C 2T==1c?q.5W(l):l[2T]},4M:u(a){D 1d=q(a);1d.a8=l;C 1d},71:u(a){l.I=0;[].1y.1D(l,a);C l},17:u(fn,1B){C q.17(l,fn,1B)},2X:u(16){D 9R=-1;l.17(u(i){B(l==16)9R=i});C 9R},1q:u(2R,F,H){D 16=2R;B(2R.28==2H)B(F==1c)C l.I&&q[H||"1q"](l[0],2R)||1c;L{16={};16[2R]=F}C l.17(u(2X){V(D 12 23 16)q.1q(H?l.1H:l,12,q.12(l,16[12],H,2X,12))})},K:u(2R,F){C l.1q(2R,F,"66")},1J:u(e){B(R e=="1S")C l.6s().3s(U.cJ(e));D t="";q.17(e||l,u(){q.17(l.5P,u(){B(l.2Y!=8)t+=l.2Y!=1?l.6u:q.fn.1J([l])})});C t},4n:u(){D a,1B=11;C l.17(u(){B(!a)a=q.3H(1B,l.6b);D b=a[0].7z(Y);l.1w.51(b,l);2N(b.29)b=b.29;b.9n(l)})},3s:u(){C l.6f(11,Y,1,u(a){l.9n(a)})},ak:u(){C l.6f(11,Y,-1,u(a){l.51(a,l.29)})},c4:u(){C l.6f(11,1a,1,u(a){l.1w.51(a,l)})},c6:u(){C l.6f(11,1a,-1,u(a){l.1w.51(a,l.4d)})},3n:u(){C l.a8||q([])},3q:u(t){C l.4M(q.8m(q.4L(l,u(a){C q.3q(t,a)})),t)},8p:u(9w){C l.4M(q.4L(l,u(a){D a=a.7z(9w!=1c?9w:Y);a.$2m=14;C a}))},1z:u(t){C l.4M(q.2F(t)&&q.58(l,u(el,2X){C t.1D(el,[2X])})||q.6c(t,l))},2g:u(t){C l.4M(t.28==2H&&q.6c(t,l,Y)||q.58(l,u(a){C(t.28==3x||t.7r)?q.6Q(a,t)<0:a!=t}))},2k:u(t){C l.4M(q.3Y(l.2j(),t.28==2H?q(t).2j():t.I!=1c&&(!t.1I||t.1I=="cK")?t:[t]))},35:u(2p){C 2p?q.6c(2p,l).I>0:1a},1W:u(1W){C 1W==1c?(l.I?l[0].F:14):l.1q("F",1W)},2h:u(1W){C 1W==1c?(l.I?l[0].45:14):l.6s().3s(1W)},6f:u(1B,3w,6a,fn){D 8p=l.I>1,a;C l.17(u(){B(!a){a=q.3H(1B,l.6b);B(6a<0)a.f3()}D 16=l;B(3w&&q.1I(l,"3w")&&q.1I(a[0],"6G"))16=l.bA("3C")[0]||l.9n(U.7b("3C"));q.17(a,u(){fn.1D(16,[8p?l.7z(Y):l])})})}};q.1j=q.fn.1j=u(){D 3i=11[0],a=1;B(11.I==1){3i=l;a=0}D 12;2N(12=11[a++])V(D i 23 12)3i[i]=12[i];C 3i};q.1j({fg:u(){B(q.6p$)$=q.6p$;C q},2F:u(fn){C!!fn&&R fn!="1S"&&!fn.1I&&fn.28!=3x&&/u/i.1m(fn+"")},8n:u(J){C J.7H&&J.6b&&!J.6b.1s},1I:u(J,1e){C J.1I&&J.1I.6J()==1e.6J()},17:u(16,fn,1B){B(16.I==1c)V(D i 23 16)fn.1D(16[i],1B||[i,16[i]]);L V(D i=0,4N=16.I;i<4N;i++)B(fn.1D(16[i],1B||[i,16[i]])===1a)2Z;C 16},12:u(J,F,H,2X,12){B(q.2F(F))F=F.3c(J,[2X]);D ab=/z-?2X|9C-?cO|1N|a9|cP-?1i/i;C F&&F.28==6j&&H=="66"&&!ab.1m(12)?F+"2o":F},2i:{2k:u(J,c){q.17(c.4w(/\\s+/),u(i,1r){B(!q.2i.6l(J.2i,1r))J.2i+=(J.2i?" ":"")+1r})},3T:u(J,c){J.2i=c?q.58(J.2i.4w(/\\s+/),u(1r){C!q.2i.6l(c,1r)}).9i(" "):""},6l:u(t,c){C q.6Q(c,(t.2i||t).4R().4w(/\\s+/))>-1}},8t:u(e,o,f){V(D i 23 o){e.1H["3d"+i]=e.1H[i];e.1H[i]=o[i]}f.1D(e,[]);V(D i 23 o)e.1H[i]=e.1H["3d"+i]},K:u(e,p){B(p=="1i"||p=="2e"){D 3d={},7p,7C,d=["eQ","cR","eM","cS"];q.17(d,u(){3d["5M"+l]=0;3d["62"+l+"eT"]=0});q.8t(e,3d,u(){B(q(e).35(\':3t\')){7p=e.2V;7C=e.42}L{e=q(e.7z(Y)).3q(":40").an("4I").3n().K({82:"2A",26:"3Z",1L:"43",cV:"0",2D:"0"}).69(e.1w)[0];D 8q=q.K(e.1w,"26")||"5x";B(8q=="5x")e.1w.1H.26="5C";7p=e.4c;7C=e.5X;B(8q=="5x")e.1w.1H.26="5x";e.1w.63(e)}});C p=="1i"?7p:7C}C q.66(e,p)},66:u(J,12,ad){D 1d;B(12=="1N"&&q.18.1E){1d=q.1q(J.1H,"1N");C 1d==""?"1":1d}B(12=="8w"||12=="53")12=q.18.1E?"6I":"53";B(!ad&&J.1H[12])1d=J.1H[12];L B(U.7h&&U.7h.8u){B(12=="53"||12=="6I")12="8w";12=12.1O(/([A-Z])/g,"-$1").2q();D 1r=U.7h.8u(J,14);B(1r)1d=1r.ae(12);L B(12=="1L")1d="2x";L q.8t(J,{1L:"43"},u(){D c=U.7h.8u(l,"");1d=c&&c.ae(12)||""})}L B(J.5R){D aH=12.1O(/\\-(\\w)/g,u(m,c){C c.6J()});1d=J.5R[12]||J.5R[aH]}C 1d},3H:u(a,72){D r=[];72=72||U;q.17(a,u(i,1F){B(!1F)C;B(1F.28==6j)1F=1F.4R();B(R 1F=="1S"){D s=q.38(1F),2b=72.7b("2b"),49=[];D 4n=!s.1Q("<2L")&&[1,"<3Q>","</3Q>"]||(!s.1Q("<dv")||!s.1Q("<3C")||!s.1Q("<cX"))&&[1,"<3w>","</3w>"]||!s.1Q("<6G")&&[2,"<3w><3C>","</3C></3w>"]||(!s.1Q("<cZ")||!s.1Q("<d0"))&&[3,"<3w><3C><6G>","</6G></3C></3w>"]||[0,"",""];2b.45=4n[1]+1F+4n[2];2N(4n[0]--)2b=2b.29;B(q.18.1E){B(!s.1Q("<3w")&&s.1Q("<3C")<0)49=2b.29&&2b.29.5P;L B(4n[1]=="<3w>"&&s.1Q("<3C")<0)49=2b.5P;V(D n=49.I-1;n>=0;--n)B(q.1I(49[n],"3C")&&!49[n].5P.I)49[n].1w.63(49[n])}1F=q.5W(2b.5P)}B(1F.I===0&&!q.1I(1F,"1Z"))C;B(1F[0]==1c||q.1I(1F,"1Z"))r.1y(1F);L r=q.3Y(r,1F)});C r},1q:u(J,1e,F){D 4x=q.8n(J)?{}:{"V":"d2","4B":"2i","8w":q.18.1E?"6I":"53",53:q.18.1E?"6I":"53",45:"45",2i:"2i",F:"F",3v:"3v",4I:"4I",d3:"d5",3G:"3G"};B(1e=="1N"&&q.18.1E){B(F!=1c){J.a9=1;J.1z=(J.1z||"").1O(/aa\\([^)]*\\)/,"")+(76(F).4R()=="9f"?"":"aa(1N="+F*9t+")")}C J.1z?(76(J.1z.2I(/1N=([^)]*)/)[1])/9t).4R():""}B(4x[1e]){B(F!=1c)J[4x[1e]]=F;C J[4x[1e]]}L B(F==1c&&q.18.1E&&q.1I(J,"1Z")&&(1e=="cn"||1e=="2d"))C J.d6(1e).6u;L B(J.7H){B(F!=1c)J.d7(1e,F);B(q.18.1E&&/4V|3l/.1m(1e)&&!q.8n(J))C J.6U(1e,2);C J.6U(1e)}L{1e=1e.1O(/-([a-z])/d8,u(z,b){C b.6J()});B(F!=1c)J[1e]=F;C J[1e]}},38:u(t){C t.1O(/^\\s+|\\s+$/g,"")},5W:u(a){D r=[];B(R a!="8o")V(D i=0,al=a.I;i<al;i++)r.1y(a[i]);L r=a.93(0);C r},6Q:u(b,a){V(D i=0,al=a.I;i<al;i++)B(a[i]==b)C i;C-1},3Y:u(2z,8x){V(D i=0;8x[i];i++)2z.1y(8x[i]);C 2z},8m:u(2z){D r=[],2T=q.6M++;V(D i=0,fl=2z.I;i<fl;i++)B(2z[i].6M!=2T){2z[i].6M=2T;r.1y(2z[i])}C r},6M:0,58:u(3r,fn,8y){B(R fn=="1S")fn=1R 70("a","i","C "+fn);D 25=[];V(D i=0,el=3r.I;i<el;i++)B(!8y&&fn(3r[i],i)||8y&&!fn(3r[i],i))25.1y(3r[i]);C 25},4L:u(3r,fn){B(R fn=="1S")fn=1R 70("a","C "+fn);D 25=[];V(D i=0,el=3r.I;i<el;i++){D 1W=fn(3r[i],i);B(1W!==14&&1W!=1c){B(1W.28!=3x)1W=[1W];25=25.da(1W)}}C 25}});1R u(){D b=a7.cq.2q();q.18={33:/aj/.1m(b),3y:/3y/.1m(b),1E:/1E/.1m(b)&&!/3y/.1m(b),4i:/4i/.1m(b)&&!/(db|aj)/.1m(b)};q.5w=!q.18.1E||U.dc=="fk"};q.17({19:"a.1w",3D:"q.3D(a)",dd:"q.3K(a,2,\'4d\')",de:"q.3K(a,2,\'ao\')",cr:"q.5t(a.1w.29,a)",5k:"q.5t(a.29)"},u(i,n){q.fn[i]=u(a){D 1d=q.4L(l,n);B(a&&R a=="1S")1d=q.6c(a,1d);C l.4M(1d)}});q.17({69:"3s",df:"ak",51:"c4",9H:"c6"},u(i,n){q.fn[i]=u(){D a=11;C l.17(u(){V(D j=0,al=a.I;j<al;j++)q(a[j])[n](l)})}});q.17({an:u(2R){q.1q(l,2R,"");l.dh(2R)},2M:u(c){q.2i.2k(l,c)},3o:u(c){q.2i.3T(l,c)},di:u(c){q.2i[q.2i.6l(l,c)?"3T":"2k"](l,c)},3T:u(a){B(!a||q.1z(a,[l]).r.I)l.1w.63(l)},6s:u(){2N(l.29)l.63(l.29)}},u(i,n){q.fn[i]=u(){C l.17(n,11)}});q.17(["eq","8i","8k","ap"],u(i,n){q.fn[n]=u(2T,fn){C l.1z(":"+n+"("+2T+")",fn)}});q.17(["1i","2e"],u(i,n){q.fn[n]=u(h){C h==1c?(l.I?q.K(l[0],n):14):l.K(n,h.28==2H?h:h+"2o")}});q.1j({2p:{"":"m[2]==\'*\'||q.1I(a,m[2])","#":"a.6U(\'S\')==m[2]",":":{8i:"i<m[3]-0",8k:"i>m[3]-0",3K:"m[3]-0==i",eq:"m[3]-0==i",2z:"i==0",2v:"i==r.I-1",ay:"i%2==0",az:"i%2","3K-7E":"q.3K(a.1w.29,m[3],\'4d\',a)==a","2z-7E":"q.3K(a.1w.29,1,\'4d\')==a","2v-7E":"q.3K(a.1w.dj,1,\'ao\')==a","96-7E":"q.5t(a.1w.29).I==1",19:"a.29",6s:"!a.29",ap:"q.fn.1J.1D([a]).1Q(m[3])>=0",3t:\'a.H!="2A"&&q.K(a,"1L")!="2x"&&q.K(a,"82")!="2A"\',2A:\'a.H=="2A"||q.K(a,"1L")=="2x"||q.K(a,"82")=="2A"\',bP:"!a.3v",3v:"a.3v",4I:"a.4I",3G:"a.3G||q.1q(a,\'3G\')",1J:"a.H==\'1J\'",40:"a.H==\'40\'",4t:"a.H==\'4t\'",9a:"a.H==\'9a\'",ar:"a.H==\'ar\'",3V:"a.H==\'3V\'",5p:"a.H==\'5p\'",2S:"a.H==\'2S\'",7K:\'a.H=="7K"||q.1I(a,"7K")\',46:"/46|3Q|dl|7K/i.1m(a.1I)"},".":"q.2i.6l(a,m[2])","@":{"=":"z==m[4]","!=":"z!=m[4]","^=":"z&&!z.1Q(m[4])","$=":"z&&z.5S(z.I - m[4].I,m[4].I)==m[4]","*=":"z&&z.1Q(m[4])>=0","":"z",9J:u(m){C["",m[1],m[3],m[2],m[5]]},ax:"z=a[m[3]];B(!z||/4V|3l/.1m(m[3]))z=q.1q(a,m[3]);"},"[":"1b(m[2])?q.3K(a.1w.29,1b(m[2]),\'4d\',a)==a:q.3q(m[2],a).I"},aw:[/^\\[ *(@)([\\w-]+) *([!*$^=]*) *(\'?"?)(.*?)\\4 *\\]/,/^(\\[)\\s*(.*?(\\[.*?\\])?[^[]*?)\\s*\\]/,/^(:)([\\w-]+)\\("?\'?(.*?(\\(.*?\\))?[^(]*?)"?\'?\\)/,1R 4D("^([:.#]*)("+(q.8E="(?:[\\\\w\\dm-\\dn*-]|\\\\\\\\.)")+"+)")],6S:[/^(\\/?\\.\\.)/,"a.1w",/^(>|\\/)/,"q.5t(a.29)",/^(\\+)/,"q.3K(a,2,\'4d\')",/^(~)/,u(a){D s=q.5t(a.1w.29);C s.93(q.6Q(a,s)+1)}],6c:u(2p,3r,2g){D 3d,1r=[];2N(2p&&2p!=3d){3d=2p;D f=q.1z(2p,3r,2g);2p=f.t.1O(/^\\s*,\\s*/,"");1r=2g?3r=f.r:q.3Y(1r,f.r)}C 1r},3q:u(t,2G){B(R t!="1S")C[t];B(2G&&!2G.2Y)2G=14;2G=2G||U;B(!t.1Q("//")){2G=2G.3b;t=t.5S(2,t.I)}L B(!t.1Q("/")&&!2G.6b){2G=2G.3b;t=t.5S(1,t.I);B(t.1Q("/")>=1)t=t.5S(t.1Q("/"),t.I)}D 1d=[2G],3z=[],2v;2N(t&&2v!=t){D r=[];2v=t;t=q.38(t).1O(/^\\/\\//,"");D 6T=1a;D 5m=/^[\\/>]\\s*([\\w*-]+)/;D m=5m.4X(t);B(m){V(D i=0;1d[i];i++)V(D c=1d[i].29;c;c=c.4d)B(c.2Y==1&&(m[1]=="*"||q.1I(c,m[1])))r.1y(c);1d=r;t=t.1O(5m,"");B(t.1Q(" ")==0)dp;6T=Y}L{V(D i=0,as=q.6S.I;i<as;i+=2){D 5m=q.6S[i],fn=q.6S[i+1];D m=5m.4X(t);B(m){r=1d=q.4L(1d,q.2F(fn)?fn:1R 70("a","C "+fn));t=q.38(t.1O(5m,""));6T=Y;2Z}}}B(t&&!6T){B(!t.1Q(",")){B(1d[0]==2G)1d.75();3z=q.3Y(3z,1d);r=1d=[2G];t=" "+t.5S(1,t.I)}L{D 5T=1R 4D("^(\\\\w+)(#)("+q.8E+"+)");D m=5T.4X(t);B(m){m=[0,m[2],m[3],m[1]]}L{5T=1R 4D("^([#.]?)("+q.8E+"*)");m=5T.4X(t)}m[2]=m[2].1O(/\\\\/g,"");D J=1d[1d.I-1];B(m[1]=="#"&&J&&J.8Q){D 4G=J.8Q(m[2]);B((q.18.1E||q.18.3y)&&4G&&4G.S!=m[2])4G=q(\'[@S="\'+m[2]+\'"]\',J)[0];1d=r=4G&&(!m[3]||q.1I(4G,m[3]))?[4G]:[]}L{V(D i=0;1d[i];i++){D 7s=m[1]!=""||m[0]==""?"*":m[2];B(7s=="*"&&1d[i].1I.2q()=="3m")7s="O";r=q.3Y(r,1d[i].bA(7s))}B(m[1]==".")r=q.8G(r,m[2]);B(m[1]=="#"){D 5u=[];V(D i=0;r[i];i++)B(r[i].6U("S")==m[2]){5u=[r[i]];2Z}r=5u}1d=r}t=t.1O(5T,"")}}B(t){D 1W=q.1z(t,r);1d=r=1W.r;t=q.38(1W.t)}}B(t)1d=[];B(1d&&1d[0]==2G)1d.75();3z=q.3Y(3z,1d);C 3z},8G:u(r,m,2g){m=" "+m+" ";D 5u=[];V(D i=0;r[i];i++){D 8F=(" "+r[i].2i+" ").1Q(m)>=0;B(!2g&&8F||2g&&!8F)5u.1y(r[i])}C 5u},1z:u(t,r,2g){D 2v;2N(t&&t!=2v){2v=t;D p=q.aw,m;V(D i=0;p[i];i++){m=p[i].4X(t);B(m){t=t.9k(m[0].I);B(q.2p[m[1]].9J)m=q.2p[m[1]].9J(m);m[2]=m[2].1O(/\\\\/g,"");2Z}}B(!m)2Z;B(m[1]==":"&&m[2]=="2g")r=q.1z(m[3],r,Y).r;L B(m[1]==".")r=q.8G(r,m[2],2g);L{D f=q.2p[m[1]];B(R f!="1S")f=q.2p[m[1]][m[2]];7N("f = u(a,i){"+(q.2p[m[1]].ax||"")+"C "+f+"}");r=q.58(r,f,2g)}}C{r:r,t:t}},3D:u(J){D 8I=[];D 1r=J.1w;2N(1r&&1r!=U){8I.1y(1r);1r=1r.1w}C 8I},3K:u(1r,25,6a,J){25=25||1;D 2T=0;V(;1r;1r=1r[6a]){B(1r.2Y==1)2T++;B(2T==25||25=="ay"&&2T%2==0&&2T>1&&1r==J||25=="az"&&2T%2==1&&1r==J)C 1r}},5t:u(n,J){D r=[];V(;n;n=n.4d){B(n.2Y==1&&(!J||n!=J))r.1y(n)}C r}});q.P={2k:u(E,H,1A,T){B(q.18.1E&&E.5o!=1c)E=1g;B(T)1A.T=T;B(!1A.5j)1A.5j=l.5j++;B(!E.$2m)E.$2m={};D 5U=E.$2m[H];B(!5U){5U=E.$2m[H]={};B(E["6v"+H])5U[0]=E["6v"+H]}5U[1A.5j]=1A;E["6v"+H]=l.6R;B(!l.2y[H])l.2y[H]=[];l.2y[H].1y(E)},5j:1,2y:{},3T:u(E,H,1A){D 2m=E.$2m,1d;B(2m){B(H&&H.H){1A=H.1A;H=H.H}B(!H){V(H 23 2m)l.3T(E,H)}L B(2m[H]){B(1A)6m 2m[H][1A.5j];L V(1A 23 E.$2m[H])6m 2m[H][1A];V(1d 23 2m[H])2Z;B(!1d){1d=E["6v"+H]=14;6m 2m[H]}}V(1d 23 2m)2Z;B(!1d)E.$2m=14}},2f:u(H,T,E){T=q.5W(T||[]);B(!E)q.17(l.2y[H]||[],u(){q.P.2f(H,T,l)});L{D 1A=E["6v"+H],1W,fn=q.2F(E[H]);B(1A){T.aA(l.4x({H:H,3i:E}));B((1W=1A.1D(E,T))!==1a)l.8K=Y}B(fn&&1W!==1a)E[H]();l.8K=1a}},6R:u(P){B(R q=="1c"||q.P.8K)C;P=q.P.4x(P||1g.P||{});D 4K;D c=l.$2m[P.H];D 1B=[].93.3c(11,1);1B.aA(P);V(D j 23 c){1B[0].1A=c[j];1B[0].T=c[j].T;B(c[j].1D(l,1B)===1a){P.3X();P.52();4K=1a}}B(q.18.1E)P.3i=P.3X=P.52=P.1A=P.T=14;C 4K},4x:u(P){B(!P.3i&&P.aC)P.3i=P.aC;B(P.9m==1c&&P.9Q!=1c){D e=U.3b,b=U.1s;P.9m=P.9Q+(e.36||b.36);P.aq=P.dw+(e.2U||b.2U)}B(q.18.33&&P.3i.2Y==3){D 5Z=P;P=q.1j({},5Z);P.3i=5Z.3i.1w;P.3X=u(){C 5Z.3X()};P.52=u(){C 5Z.52()}}B(!P.3X)P.3X=u(){l.4K=1a};B(!P.52)P.52=u(){l.dx=Y};C P}};q.fn.1j({2E:u(H,T,fn){C l.17(u(){q.P.2k(l,H,fn||T,T)})},aD:u(H,T,fn){C l.17(u(){q.P.2k(l,H,u(P){q(l).64(P);C(fn||T).1D(l,11)},T)})},64:u(H,fn){C l.17(u(){q.P.3T(l,H,fn)})},2f:u(H,T){C l.17(u(){q.P.2f(H,T,l)})},37:u(){D a=11;C l.2W(u(e){l.8M=l.8M==0?1:0;e.3X();C a[l.8M].1D(l,[e])||1a})},e8:u(f,g){u 8O(e){D p=(e.H=="5a"?e.dz:e.dA)||e.dB;2N(p&&p!=l)3L{p=p.1w}3B(e){p=l};B(p==l)C 1a;C(e.H=="5a"?f:g).1D(l,[e])}C l.5a(8O).8e(8O)},3f:u(f){B(q.6Y)f.1D(U,[q]);L{q.61.1y(u(){C f.1D(l,[q])})}C l}});q.1j({6Y:1a,61:[],3f:u(){B(!q.6Y){q.6Y=Y;B(q.61){q.17(q.61,u(){l.1D(U)});q.61=14}B(q.18.4i||q.18.3y)U.dC("aE",q.3f,1a)}}});1R u(){q.17(("9Y,4z,4l,e0,5V,8R,2W,dE,"+"dF,dG,9v,5a,8e,dW,3Q,"+"3V,dH,dI,dJ,1n").4w(","),u(i,o){q.fn[o]=u(f){C f?l.2E(o,f):l.2f(o)}});B(q.18.4i||q.18.3y)U.dL("aE",q.3f,1a);L B(q.18.1E){U.dM("<dN"+"dO S=aG dP=Y "+"3l=//:><\\/44>");D 44=U.8Q("aG");B(44)44.5c=u(){B(l.4p!="39")C;l.1w.63(l);q.3f()};44=14}L B(q.18.33)q.5s=5o(u(){B(U.4p=="9X"||U.4p=="39"){6D(q.5s);q.5s=14;q.3f()}},10);q.P.2k(1g,"4l",q.3f)};B(q.18.1E)q(1g).aD("8R",u(){D 2y=q.P.2y;V(D H 23 2y){D 8N=2y[H],i=8N.I;B(i&&H!=\'8R\')do q.P.3T(8N[i-1],H);2N(--i)}});q.fn.1j({1C:u(1p,1h){D 2A=l.1z(":2A");1p?2A.30({1i:"1C",2e:"1C",1N:"1C"},1p,1h):2A.17(u(){l.1H.1L=l.59?l.59:"";B(q.K(l,"1L")=="2x")l.1H.1L="43"});C l},1u:u(1p,1h){D 3t=l.1z(":3t");1p?3t.30({1i:"1u",2e:"1u",1N:"1u"},1p,1h):3t.17(u(){l.59=l.59||q.K(l,"1L");B(l.59=="2x")l.59="43";l.1H.1L="2x"});C l},aK:q.fn.37,37:u(fn,8T){D 1B=11;C q.2F(fn)&&q.2F(8T)?l.aK(fn,8T):l.17(u(){q(l)[q(l).35(":2A")?"1C":"1u"].1D(q(l),1B)})},aM:u(1p,1h){C l.1z(":2A").30({1i:"1C"},1p,1h).3n()},aJ:u(1p,1h){C l.1z(":3t").30({1i:"1u"},1p,1h).3n()},dR:u(1p,1h){C l.17(u(){D aN=q(l).35(":2A")?"1C":"1u";q(l).30({1i:aN},1p,1h)})},aP:u(1p,1h){C l.1z(":2A").30({1N:"1C"},1p,1h).3n()},aO:u(1p,1h){C l.1z(":3t").30({1N:"1u"},1p,1h).3n()},dT:u(1p,3F,1h){C l.30({1N:3F},1p,1h)},30:u(12,1p,3e,1h){C l.32(u(){l.5g=q.1j({},12);D 2L=q.1p(1p,3e,1h);V(D p 23 12){D e=1R q.5Q(l,2L,p);B(12[p].28==6j)e.54(e.1r(),12[p]);L e[12[p]](12)}})},32:u(H,fn){B(!fn){fn=H;H="5Q"}C l.17(u(){B(!l.32)l.32={};B(!l.32[H])l.32[H]=[];l.32[H].1y(fn);B(l.32[H].I==1)fn.1D(l)})}});q.1j({1p:u(1p,3e,fn){D 2L=1p&&1p.28==dU?1p:{39:fn||!fn&&3e||q.2F(1p)&&1p,3S:1p,3e:fn&&3e||3e&&3e.28!=70&&3e||"aQ"};2L.3S=(2L.3S&&2L.3S.28==6j?2L.3S:{dV:dX,dY:bz}[2L.3S])||dZ;2L.3d=2L.39;2L.39=u(){q.aR(l,"5Q");B(q.2F(2L.3d))2L.3d.1D(l)};C 2L},3e:{e1:u(p,n,4O,74){C 4O+74*p},aQ:u(p,n,4O,74){C((-48.e2(p*48.e3)/2)+0.5)*74+4O}},32:{},aR:u(J,H){H=H||"5Q";B(J.32&&J.32[H]){J.32[H].75();D f=J.32[H][0];B(f)f.1D(J)}},5e:[],5Q:u(J,W,12){D z=l;D y=J.1H;B(12=="1i"||12=="2e"){D 6H=q.K(J,"1L");D aX=y.4J;y.4J="2A"}z.a=u(){B(W.6K)W.6K.1D(J,[z.5A]);B(12=="1N")q.1q(y,"1N",z.5A);L{y[12]=1b(z.5A)+"2o";y.1L="43"}};z.7D=u(){C 76(q.K(J,12))};z.1r=u(){D r=76(q.66(J,12));C r&&r>-e4?r:z.7D()};z.54=u(8U,3F){z.8X=(1R 5H()).7v();z.5A=8U;z.a();q.5e.1y(u(){C z.6K(8U,3F)});B(q.5e.I==1){D aV=5o(u(){q.5e=q.58(q.5e,u(fn){C fn()});B(!q.5e.I)6D(aV)},13)}};z.1C=u(){B(!J.3N)J.3N={};J.3N[12]=q.1q(J.1H,12);W.1C=Y;z.54(0,l.1r());B(12!="1N")y[12]="4U"};z.1u=u(){B(!J.3N)J.3N={};J.3N[12]=q.1q(J.1H,12);W.1u=Y;z.54(l.1r(),0)};z.37=u(){B(!J.3N)J.3N={};J.3N[12]=q.1q(J.1H,12);B(6H=="2x"){W.1C=Y;B(12!="1N")y[12]="4U";z.54(0,l.1r())}L{W.1u=Y;z.54(l.1r(),0)}};z.6K=u(4O,8Y){D t=(1R 5H()).7v();B(t>W.3S+z.8X){z.5A=8Y;z.a();B(J.5g)J.5g[12]=Y;D 3z=Y;V(D i 23 J.5g)B(J.5g[i]!==Y)3z=1a;B(3z){B(6H){y.4J=aX;y.1L=6H;B(q.K(J,"1L")=="2x")y.1L="43"}B(W.1u)y.1L="2x";B(W.1u||W.1C)V(D p 23 J.5g)q.1q(y,p,J.3N[p])}B(3z&&q.2F(W.39))W.39.1D(J);C 1a}L{D n=t-l.8X;D p=n/W.3S;z.5A=q.3e[W.3e](p,n,4O,(8Y-4O),W.3S);z.a()}C Y}}});q.fn.1j({e5:u(1f,3O,1h){l.4l(1f,3O,1h,1)},4l:u(1f,3O,1h,3A){B(q.2F(1f))C l.2E("4l",1f);1h=1h||u(){};D H="94";B(3O)B(q.2F(3O)){1h=3O;3O=14}L{3O=q.O(3O);H="b6"}D 3k=l;q.6E({1f:1f,H:H,T:3O,3A:3A,39:u(4Z,1Y){B(1Y=="56"||!3A&&1Y=="bp")3k.1q("45",4Z.7q).9d().17(1h,[4Z.7q,1Y,4Z]);L 1h.1D(3k,[4Z.7q,1Y,4Z])}});C l},e7:u(){C q.O(l)},9d:u(){C l.3q("44").17(u(){B(l.3l)q.b4(l.3l);L q.9e(l.1J||l.e9||l.45||"")}).3n()}});q.17("cD,bv,bu,bx,bs,bn".4w(","),u(i,o){q.fn[o]=u(f){C l.2E(o,f)}});q.1j({2j:u(1f,T,1h,H,3A){B(q.2F(T)){1h=T;T=14}C q.6E({H:"94",1f:1f,T:T,56:1h,9A:H,3A:3A})},ea:u(1f,T,1h,H){C q.2j(1f,T,1h,H,1)},b4:u(1f,1h){C q.2j(1f,14,1h,"44")},eb:u(1f,T,1h){C q.2j(1f,T,1h,"bI")},ec:u(1f,T,1h,H){B(q.2F(T)){1h=T;T={}}C q.6E({H:"b6",1f:1f,T:T,56:1h,9A:H})},ed:u(31){q.6L.31=31},ee:u(G){q.1j(q.6L,G)},6L:{2y:Y,H:"94",31:0,bh:"ef/x-eg-1Z-eh",ba:Y,7A:Y,21:14,T:14},7n:{},6E:u(s){s=q.1j({},q.6L,s);B(s.T){B(s.ba&&R s.T!="1S")s.T=q.O(s.T);B(s.H.2q()=="2j"){s.1f+=((s.1f.1Q("?")>-1)?"&":"?")+s.T;s.T=14}}B(s.2y&&!q.99++)q.P.2f("cD");D 98=1a;D 1o=1g.bc?1R bc("cw.ei"):1R 7U();1o.ej(s.H,s.1f,s.7A);B(s.T)1o.7g("em-en",s.bh);B(s.3A)1o.7g("eo-9b-ep",q.7n[s.1f]||"er, es et ev 95:95:95 ew");1o.7g("X-ex-ey","7U");B(1o.ez)1o.7g("eA","eB");B(s.bm)s.bm(1o);B(s.2y)q.P.2f("bn",[1o,s]);D 5c=u(97){B(1o&&(1o.4p==4||97=="31")){98=Y;B(7j){6D(7j);7j=14}D 1Y;3L{1Y=q.by(1o)&&97!="31"?s.3A&&q.bB(1o,s.1f)?"bp":"56":"1n";B(1Y!="1n"){D 7T;3L{7T=1o.9c("bC-9b")}3B(e){}B(s.3A&&7T)q.7n[s.1f]=7T;D T=q.bF(1o,s.9A);B(s.56)s.56.3c(s.21||1g,T,1Y);B(s.2y)q.P.2f("bs",[1o,s])}L q.7x(s,1o,1Y)}3B(e){1Y="1n";q.7x(s,1o,1Y,e)}B(s.2y)q.P.2f("bu",[1o,s]);B(s.2y&&!--q.99)q.P.2f("bv");B(s.39)s.39(1o,1Y);B(s.7A)1o=14}};D 7j=5o(5c,13);B(s.31>0)3u(u(){B(1o){1o.eD();B(!98)5c("31")}},s.31);3L{1o.eE(s.T)}3B(e){q.7x(s,1o,14,e)}B(!s.7A)5c();C 1o},7x:u(s,1o,1Y,e){B(s.1n)s.1n(1o,1Y,e);B(s.2y)q.P.2f("bx",[1o,s,e])},99:0,by:u(r){3L{C!r.1Y&&5D.eG=="9a:"||(r.1Y>=bz&&r.1Y<eH)||r.1Y==bD||q.18.33&&r.1Y==1c}3B(e){}C 1a},bB:u(1o,1f){3L{D bE=1o.9c("bC-9b");C 1o.1Y==bD||bE==q.7n[1f]||q.18.33&&1o.1Y==1c}3B(e){}C 1a},bF:u(r,H){D ct=r.9c("eJ-H");D T=!H&&ct&&ct.1Q("1o")>=0;T=H=="1o"||T?r.eL:r.7q;B(H=="44")q.9e(T);B(H=="bI")7N("T = "+T);B(H=="2h")q("<2b>").2h(T).9d();C T},O:u(a){D s=[];B(a.28==3x||a.7r)q.17(a,u(){s.1y(4F(l.1e)+"="+4F(l.F))});L V(D j 23 a)B(a[j]&&a[j].28==3x)q.17(a[j],u(){s.1y(4F(j)+"="+4F(l))});L s.1y(4F(j)+"="+4F(a[j]));C s.9i("&")},9e:u(T){B(1g.bK)1g.bK(T);L B(q.18.33)1g.3u(T,0);L 7N.3c(1g,T)}})}q.fn.eN=u(f){C l.17(u(){D p=l.1w;B(q.K(p,"26")==\'5x\')p.1H.26=\'5C\';D s=l.1H;s.26=\'3Z\';B(!f||f=="eO"){B(((1b(q.K(p,"2e"))-1b(q.K(l,"2e")))/2)>0)s.2D=((1b(q.K(p,"2e"))-1b(q.K(l,"2e")))/2)+"2o";L s.2D="0"}B(!f||f=="eP"){B(((1b(q.K(p,"1i"))-1b(q.K(l,"1i")))/2)>0){s.2w=((1b(q.K(p,"1i"))-1b(q.K(l,"1i")))/2)+"2o"}L{B(p.1I.2q()=="1s"){B(1g.67)D 4c=1g.67;L B(U.1s&&U.1s.2V)D 4c=U.1s.2V;s.2w=((4c-1b(q.K(l,"1i")))/2)+"2o"}L{s.2w="0"}}}})};q.4h=u(1e,F,W){B(R F!=\'1c\'){W=W||{};B(F===14){F=\'\';W.2u=-1}D 2u=\'\';B(W.2u){D 2r;B(R W.2u==\'1S\'&&W.2u.2I(/^[+-]?[0-9]+[bO]$/)!==14){D 2I=W.2u.2I(/^([+-]?[0-9]+)([bO])$/);W.2u=1b(2I[0],10)*(({"y":(60*60*24*eS),"w":(60*60*24*7),"d":(60*60*24),"h":(60*60),"m":(60),"s":(1)}[2I[1]])||0);2r=1R 5H();2r.bQ(2r.7v()+W.2u*4b)}L B(R W.2u==\'3p\'){2r=1R 5H();2r.bQ(2r.7v()+W.2u*24*60*60*4b)}L B(R W.2u.bR!=\'1c\')2r=W.2u;L 9h"eU \\"2u\\" 1T";2u=\'; 2u=\'+2r.bR()}D 6d=W.6d?\'; 6d=\'+W.6d:\'\';D 6e=W.6e?\'; 6e=\'+W.6e:\'\';D 7y=W.7y?\'; 7y\':\'\';U.4h=[1e,\'=\',4F(F),2u,6d,6e,7y].9i(\'\')}L{D 9l=14;B(U.4h&&U.4h!=\'\'){D 9j=U.4h.4w(\';\');V(D i=0;i<9j.I;i++){D 4h=q.38(9j[i]);B(4h.9k(0,1e.I+1)==(1e+\'=\')){9l=eW(4h.9k(1e.I+1));2Z}}}C 9l}};q.fn.bV=q.fn.1i;q.fn.bX=q.fn.2e;q.fn.1i=u(){B(l[0]==1g)C 3k.67||q.5w&&U.3b.4c||U.1s.4c;B(l[0]==U)C 48.7D(U.1s.eX,U.1s.2V);C l.bV(11[0])};q.fn.2e=u(){B(l[0]==1g)C 3k.8L||q.5w&&U.3b.5X||U.1s.5X;B(l[0]==U)C 48.7D(U.1s.eZ,U.1s.42);C l.bX(11[0])};q.fn.67=u(){C l[0]==1g||l[0]==U?l.1i():l.K(\'1L\')!=\'2x\'?l[0].2V-(1b(l.K("4j"))||0)-(1b(l.K("bY"))||0):l.1i()+(1b(l.K("9q"))||0)+(1b(l.K("bZ"))||0)};q.fn.8L=u(){C l[0]==1g||l[0]==U?l.2e():l.K(\'1L\')!=\'2x\'?l[0].42-(1b(l.K("4k"))||0)-(1b(l.K("c0"))||0):l.1i()+(1b(l.K("9p"))||0)+(1b(l.K("8W"))||0)};q.fn.f0=u(){C l[0]==1g||l[0]==U?l.1i():l.K(\'1L\')!=\'2x\'?l[0].2V:l.1i()+(1b(l.K("4j"))||0)+(1b(l.K("bY"))||0)+(1b(l.K("9q"))||0)+(1b(l.K("bZ"))||0)};q.fn.f1=u(){C l[0]==1g||l[0]==U?l.2e():l.K(\'1L\')!=\'2x\'?l[0].42:l.1i()+(1b(l.K("4k"))||0)+(1b(l.K("c0"))||0)+(1b(l.K("9p"))||0)+(1b(l.K("8W"))||0)};q.fn.36=u(){B(l[0]==1g||l[0]==U)C 3k.8H||q.5w&&U.3b.36||U.1s.36;C l[0].36};q.fn.2U=u(){B(l[0]==1g||l[0]==U)C 3k.8J||q.5w&&U.3b.2U||U.1s.2U;C l[0].2U};q.fn.8l=u(W,9r){D x=0,y=0,J=l[0],19=l[0],7I=1a,9o=1a,6g,6i=0,5Y=0,W=q.1j({6P:Y,62:Y,5M:1a,5V:Y},W||{});do{x+=19.8C||0;y+=19.8D||0;B(q.18.4i||q.18.1E){D bt=1b(q.K(19,\'4j\'))||0;D bl=1b(q.K(19,\'4k\'))||0;x+=bl;y+=bt;B(q.18.4i&&19!=J&&q.K(19,\'4J\')!=\'3t\'){x+=bl;y+=bt}B(q.K(19,\'26\')==\'3Z\')7I=Y;B(q.K(19,\'26\')==\'5C\')9o=Y}B(W.5V){6g=19.c1;do{6i+=19.36||0;5Y+=19.2U||0;19=19.1w;B(q.18.4i&&19!=J&&19!=6g&&q.K(19,\'4J\')!=\'3t\'){x+=1b(q.K(19,\'4k\'))||0;y+=1b(q.K(19,\'4j\'))||0}}2N(6g&&19!=6g)}L 19=19.c1;B(19&&(19.7H.2q()==\'1s\'||19.7H.2q()==\'2h\')){B((q.18.33||(q.18.1E&&q.5w))&&q.K(J,\'26\')!=\'3Z\'){x+=1b(q.K(19,\'c2\'))||0;y+=1b(q.K(19,\'c3\'))||0}B((q.18.4i&&!7I)||(q.18.1E&&q.K(J,\'26\')==\'5x\'&&(!9o||!7I))){x+=1b(q.K(19,\'4k\'))||0;y+=1b(q.K(19,\'4j\'))||0}2Z}}2N(19);B(!W.6P){x-=1b(q.K(J,\'c2\'))||0;y-=1b(q.K(J,\'c3\'))||0}B(W.62&&(q.18.33||q.18.3y)){x+=1b(q.K(J,\'4k\'))||0;y+=1b(q.K(J,\'4j\'))||0}L B(!W.62&&!(q.18.33||q.18.3y)){x-=1b(q.K(J,\'4k\'))||0;y-=1b(q.K(J,\'4j\'))||0}B(W.5M){x+=1b(q.K(J,\'9p\'))||0;y+=1b(q.K(J,\'9q\'))||0}B(W.5V&&q.18.3y&&q.K(J,\'1L\')==\'f5\'){6i-=J.36||0;5Y-=J.2U||0}D 4K=W.5V?{2w:y-5Y,2D:x-6i,2U:5Y,36:6i}:{2w:y,2D:x};B(9r){q.1j(9r,4K);C l}L{C 4K}};(u($){$.fn.f6=q.fn.9u=u(s){B(!($.18.1E&&R 7U==\'u\'))C l;s=$.1j({2w:\'3U\',2D:\'3U\',2e:\'3U\',1i:\'3U\',1N:Y,3l:\'bG:1a;\'},s||{});D 12=u(n){C n&&n.28==6j?n+\'2o\':n},2h=\'<c7 4B="9u"f7="0"f8="-1"3l="\'+s.3l+\'"\'+\'1H="1L:43;26:3Z;z-2X:-1;\'+(s.1N!==1a?\'1z:f9(fa=\\\'0\\\');\':\'\')+\'2w:\'+(s.2w==\'3U\'?\'7R(((1b(l.1w.5R.4j)||0)*-1)+\\\'2o\\\')\':12(s.2w))+\';\'+\'2D:\'+(s.2D==\'3U\'?\'7R(((1b(l.1w.5R.4k)||0)*-1)+\\\'2o\\\')\':12(s.2D))+\';\'+\'2e:\'+(s.2e==\'3U\'?\'7R(l.1w.42+\\\'2o\\\')\':12(s.2e))+\';\'+\'1i:\'+(s.1i==\'3U\'?\'7R(l.1w.2V+\\\'2o\\\')\':12(s.1i))+\';\'+\'"/>\';C l.17(u(){B(!$(\'c7.9u\',l)[0])l.51(U.7b(2h),l.29)})}})(q);(u($){$.1j({1V:{c9:0}});$.fn.1V=u(2J,G){B(R 2J==\'3m\')G=2J;G=$.1j({2J:(2J&&R 2J==\'3p\'&&2J>0)?--2J:0,3v:14,3E:$.5K?Y:1a,4u:1a,c8:\'4u-3R-\',9N:14,9M:14,9O:14,9P:14,9K:\'av\',cj:14,cl:14,cf:1a,6o:14,6r:14,6t:14,7W:\'1V-2l\',4s:\'1V-3G\',6q:\'1V-3v\',6k:\'1V-1U\',8a:\'1V-1u\',9W:\'1V-fb\',ca:\'2b\'},G||{});$.18.80=$.18.80||$.18.1E&&R 7U==\'u\';u 9y(){cA(0,0)}C l.17(u(){D 1U=l;D 2l=$(\'6y.\'+G.7W,1U);2l=2l.4A()&&2l||$(\'>6y:eq(0)\',1U);D 1V=$(\'a\',2l);B(G.4u){D 9U={};1V.17(u(){$(l).2h(\'<41>\'+$(l).2h()+\'</41>\');D S=G.c8+(++$.1V.c9);D 22=\'#\'+S;9U[22]=l.4V;l.4V=22;$(\'<2b S="\'+S+\'" 4B="\'+G.6k+\'"></2b>\').69(1U)})}D 2B=$(\'2b.\'+G.6k,1U);2B=2B.4A()&&2B||$(\'>\'+G.ca,1U);2l.35(\'.\'+G.7W)||2l.2M(G.7W);2B.17(u(){D $$=$(l);$$.35(\'.\'+G.6k)||$$.2M(G.6k)});D 9x=$(\'1G\',2l).2X($(\'1G.\'+G.4s,2l)[0]);B(9x>=0){G.2J=9x}B(5D.22){1V.17(u(i){B(l.22==5D.22){G.2J=i;B(($.18.1E||$.18.3y)&&!G.4u){D 1X=$(5D.22);D 89=1X.1q(\'S\');1X.1q(\'S\',\'\');3u(u(){1X.1q(\'S\',89)},fc)}9y();C 1a}})}B($.18.1E){9y()}2B.1z(\':eq(\'+G.2J+\')\').1C().3n().2g(\':eq(\'+G.2J+\')\').2M(G.8a);B(!G.4u){$(\'1G\',2l).3o(G.4s).eq(G.2J).2M(G.4s)}B(G.cf){D 9E=u(2S){D 9B=$.4L(2B.2j(),u(el){D h,9z=$(el);B(2S){B($.18.80){el.1H.fd(\'cg\');el.1H.1i=\'\';el.8b=14}h=9z.K({\'4y-1i\':\'\'}).1i()}L{h=9z.1i()}C h}).fe(u(a,b){C b-a});B($.18.80){2B.17(u(){l.8b=9B[0]+\'2o\';l.1H.ff(\'cg\',\'l.1H.1i = l.8b ? l.8b : "4U"\')})}L{2B.K({\'4y-1i\':9B[0]+\'2o\'})}};9E();D 88=1U.42;D 9F=1U.2V;D 9D=$(\'#1V-ci-9C-4A\').2j(0)||$(\'<41 S="1V-ci-9C-4A">M</41>\').K({1L:\'43\',26:\'3Z\',82:\'2A\'}).69(U.1s).2j(0);D 84=9D.2V;5o(u(){D 85=1U.42;D 9G=1U.2V;D 86=9D.2V;B(9G>9F||85!=88||86!=84){9E((85>88||86<84));88=85;9F=9G;84=86}},50)}D 5F={},5y={},9T=G.cj||G.9K,9S=G.cl||G.9K;B(G.9M||G.9N){B(G.9M){5F[\'1i\']=\'1C\';5y[\'1i\']=\'1u\'}B(G.9N){5F[\'1N\']=\'1C\';5y[\'1N\']=\'1u\'}}L{B(G.9O){5F=G.9O}L{5F[\'4y-2e\']=0;9T=G.3E?50:1}B(G.9P){5y=G.9P}L{5y[\'4y-2e\']=0;9S=G.3E?50:1}}D 6o=G.6o,6r=G.6r,6t=G.6t;1V.2E(\'a1\',u(){D 1G=$(l).3D(\'1G:eq(0)\');B(1U.8c||1G.35(\'.\'+G.4s)||1G.35(\'.\'+G.6q)){C 1a}D 22=l.22;B($.18.1E){$(l).2f(\'2W\');B(G.3E){$.5K.4f(22);5D.22=22.1O(\'#\',\'\')}}L B($.18.33){D co=$(\'<1Z cn="\'+22+\'"><2b><46 H="3V" F="h" /></2b></1Z>\').2j(0);co.3V();$(l).2f(\'2W\');B(G.3E){$.5K.4f(22)}}L{B(G.3E){5D.22=22.1O(\'#\',\'\')}L{$(l).2f(\'2W\')}}});1V.2E(\'8h\',u(){D 1G=$(l).3D(\'1G:eq(0)\');B($.18.33){1G.30({1N:0},1,u(){1G.K({1N:\'\'})})}1G.2M(G.6q)});B(G.3v&&G.3v.I){V(D i=0,k=G.3v.I;i<k;i++){1V.eq(--G.3v[i]).2f(\'8h\').3n()}};1V.2E(\'a2\',u(){D 1G=$(l).3D(\'1G:eq(0)\');1G.3o(G.6q);B($.18.33){1G.30({1N:1},1,u(){1G.K({1N:\'\'})})}});1V.2E(\'2W\',u(e){D 8g=e.9Q;D 4Q=l,1G=$(l).3D(\'1G:eq(0)\'),1X=$(l.22),2s=2B.1z(\':3t\');B((R 6o==\'u\'&&6o(l,1X[0],2s[0])==1a&&8g)||1U.8c||1G.35(\'.\'+G.4s)||1G.35(\'.\'+G.6q)){l.9Y();C 1a}1U[\'8c\']=Y;B(1X.4A()){B($.18.1E&&G.3E){D 89=l.22.1O(\'#\',\'\');1X.1q(\'S\',\'\');3u(u(){1X.1q(\'S\',89)},0)}u 9V(){B(G.3E&&8g){$.5K.4f(4Q.22)}2s.30(5y,9S,u(){$(4Q).3D(\'1G:eq(0)\').2M(G.4s).cr().3o(G.4s);B(R 6r==\'u\'){6r(4Q,1X[0],2s[0])}2s.2M(G.8a).K({1L:\'\',4J:\'\',1i:\'\',1N:\'\'});1X.3o(G.8a).30(5F,9T,u(){1X.K({4J:\'\',1i:\'\',1N:\'\'});B($.18.1E){2s[0].1H.1z=\'\';1X[0].1H.1z=\'\'}B(R 6t==\'u\'){6t(4Q,1X[0],2s[0])}1U.8c=14})})}B(!G.4u){9V()}L{D $$=$(l),41=$(\'41\',l)[0],1J=41.45;$$.2M(G.9W);41.45=\'fj&#fm;\';3u(u(){$(4Q.22).4l(9U[4Q.22],u(){9V();41.45=1J;$$.3o(G.9W)})},0)}}L{79(\'fo 35 8Z fp 1U.\')}D cB=1g.8H||U.3b&&U.3b.36||U.1s.36||0;D cC=1g.8J||U.3b&&U.3b.2U||U.1s.2U||0;3u(u(){1g.cA(cB,cC)},0);l.9Y();C G.3E&&!!8g});B(G.4u){1V.eq(G.2J).2f(\'2W\').3n()}B(G.3E){$.5K.cE(u(){1V.eq(G.2J).2f(\'2W\').3n()})}})};D 6B=[\'a1\',\'8h\',\'a2\'];V(D i=0;i<6B.I;i++){$.fn[6B[i]]=(u(a3){C u(3R){C l.17(u(){D 2l=$(\'6y.1V-2l\',l);2l=2l.4A()&&2l||$(\'>6y:eq(0)\',l);D a;B(!3R||R 3R==\'3p\'){a=$(\'1G a\',2l).eq((3R&&3R>0&&3R-1||0))}L B(R 3R==\'1S\'){a=$(\'1G a[@4V$="#\'+3R+\'"]\',2l)}a.2f(a3)})}})(6B[i])}})(q);q.1j(q.fn,{aL:u(W){D N=1R q.N(W,l[0]);N.1v=l.3q(":46:2g(:3V):2g(:2S)").4z(u(){N.4a=l});B(N.G.78){l.3V(u(P){B(N.G.3j)P.3X();C N.1Z()})}B(N.G.P){N.1v.2E(N.G.P,u(){N.E(l)})}C N},1y:u(t){C l.71(q.3Y(l.2j(),t))},4S:u(S){C l.1z("[@V=\'"+S+"\']")}});q.1j(q.2p[":"],{aS:"!q.38(a.F)",aT:"!!q.38(a.F)"});q.N=u(W,1Z){l.G=q.1j({},q.N.4m,W);l.5v=1Z;l.4q=l.G.55;l.7u=l.4q.I&&l.4q||q(1Z);l.2B=l.G.77.2k(l.G.55);l.2S()};q.1j(q.N,{4m:{3P:{},3g:"1n",7M:Y,77:q([]),55:q([]),78:Y},aY:u(G){q.1j(q.N.4m,G)},3P:{1l:"aZ b0 35 1l.",6x:"1M 1K a F 8Z b1 b2 {0} 5i.",6w:"1M 1K a F b3 at b5 {0} 5i.",6z:"1M 1K a F 7O {0} 7i {1} 5i b7.",4T:"1M 1K a 2P 4T b8.",1f:"1M 1K a 2P b9.",2r:"1M 1K a 2P 2r.",7a:"1M 1K a 2P 2r (bb).",6W:"7c 7d 7f 5l bd¼bf bg 5l.",3p:"1M 1K a 2P 3p.",6V:"7c 7d 7f bi bj 5l.",5h:"1M 1K 96 5h",6F:"1M 1K 7t bk F bo.",6C:"1M 1K a F 7O {0} 7i {1}.",6O:"1M 1K a F bq 7k 4v 7l 3F {0}.",6A:"1M 1K a F bw 7k 4v 7l 3F {0}."},57:{1Z:u(){l.5q();V(D i=0,E;E=l.1v[i++];){l.4g(E)}C l.2P()},E:u(E){l.7o(E);l.4g(E);l.3J()},3J:u(2Q){B(2Q)q.1j(l.2C,2Q);l.G.3J?l.G.3J(l.2C,l):l.7L()},5n:u(){B(q.fn.5n)q(l.5v).5n();l.5q();l.5d();l.1v.3o(l.G.3g)},3H:u(7m){C q(7m)[0]},2Q:u(){C q("7Z."+l.G.3g,l.7u)},2S:u(E){l.2C={};l.1X=$([]);l.2s=$([])},5q:u(){l.2S();l.2s=l.2Q().1y(l.2B);l.1X.1y(l.2B)},7o:u(E){l.2S();l.2s=l.2Q().4S(l.4r(l.3H(E)))},4g:u(E){E=l.3H(E);q(E).3o(l.G.3g);D 2a=l.2a(E);V(D i=0,1P;1P=2a[i++];){3L{D 25=q.N.1k[1P.2d](q.38(E.F),E,1P.5B);B(25===-1)2Z;B(!25){q(E).2M(l.G.3g);l.7w(1P,E);2Z}}3B(e){l.G.3j&&1g.34&&34.1n("bJ bL bM bN E "+E.S+", 4g 7t \'"+1P.2d+"\' 2d");9h e}}},27:u(S,1P){D m=l.G.3P[S];C m&&(m.28==2H?m:m[1P.2d])},7w:u(1P,E){D S=l.4r(E),O=1P.5B;l.2C[S]=(E.2O||l.27(S,1P)||q.N.3P[1P.2d]||"<7B>bS: bT 27 bU V "+S+"</7B>").1O("{0}",(O.28==3x?O[0]:O)||"").1O("{1}",O[1]||"")},2P:u(){B(l.7G()){l.3J();C 1a}L{l.5d();B(l.G.7F){l.G.7F(l.5v);C 1a}C Y}},7G:u(){D 4E=0;q.17(l.2C,u(){4E++});C 4E},5d:u(){l.37("7V")},37:u(5b){D 3k=l;u 4e(){C 3k["3F"+5b]}B(l.G.4o){4e().1y(4e().3D(l.G.4o))}4e()[5b.2q()]();C l},7L:u(){D 2z=Y;V(D 47 23 l.2C){B(2z&&l.G.7M){B(l.4a&&l.2C[l.4a.S])l.4a.4z();L{3L{D E=q("#"+47);B(E.I)E[0].4z()}3B(e){l.G.3j&&1g.34&&34.1n(e)}}2z=1a}l.7X(47,l.2C[47])}l.2s=l.2s.2g(l.1X);l.37("7V").37("cd")},7X:u(S,27){D 1n=l.2Q().4S(S);B(1n.I){B(1n.1q("81")){1n.2h(27)}}L{1n=q("<7Z>").1q({"V":S,81:Y}).2M(l.G.3g).2h(27);B(l.G.4o){1n=1n.1u().1C().4n("<"+l.G.4o+">").19()}B(!l.4q.3s(1n).I)l.G.83?l.G.83(1n,q("#"+S)):1n.9H("#"+S)}l.1X.1y(1n)},2a:u(E){B(!l.T(E))C[];D 2a=[];q.17(l.T(E),u(2R,F){2a[2a.I]={2d:2R,5B:F}});C 2a},T:u(E){C l.G.2a?l.G.2a[l.4r(E)]:l.G.87?q(E).T()[l.G.87]:q(E).T()},4r:u(E){D S=(/40|4t/i.1m(E.H))?E.1e:E.S;B(!S){D 5E=E.1Z.S,5r=/[^a-cp-2t-9\\-6p]/g;S=E.S=(5E?5E.1O(5r,""):"")+E.1e.1O(5r,"")}C S}},3I:u(F,E){5J(E.1I.2q()){3h\'3Q\':C q("1T:3G",E).I;3h\'46\':B(/40|4t/i.1m(E.H))C q(E.1Z||U).3q(\'[@1e="\'+E.1e+\'"]:4I\').I}C F.I},8d:u(O,E){C l.5G[R O]?l.5G[R O](O,E):Y},5G:{"5L":u(O,E){C O},"1S":u(O,E){C!!q(O,E.1Z).I},"u":u(O,E){C O(E)}},1k:{1l:u(F,E,O){B(!q.N.8d(O,E))C-1;5J(E.1I.2q()){3h\'3Q\':D W=q("1T:3G",E);C W.I>0&&(E.H=="3Q-cz"||W[0].F.I>0);3h\'46\':5J(E.H.2q()){3h\'4t\':3h\'40\':C q.N.3I(F,E)>0}9Z:C F.I>0}},a0:u(F,E,O){C!q.N.1k.1l(F,E)||O.1m(F)},6w:u(F,E,O){D I=q.N.3I(F,E);C!q.N.1k.1l(F,E)||I>=O},6x:u(F,E,O){D I=q.N.3I(F,E);C!q.N.1k.1l(F,E)||I<=O},6z:u(F,E,O){D I=q.N.3I(F,E);C!q.N.1k.1l(F,E)||(I>=O[0]&&I<=O[1])},6A:u(F,E,O){C!q.N.1k.1l(F,E)||F>=O},6O:u(F,E,O){C!q.N.1k.1l(F,E)||F<=O},6C:u(F,E,O){C!q.N.1k.1l(F,E)||(F>=O[0]&&F<=O[1])},4T:u(F,E){C!q.N.1k.1l(F,E)||/^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$/i.1m(F)},1f:u(F,E){C!q.N.1k.1l(F,E)||/^(a4?|a5):\\/\\/[A-2t-9](\\.?[A-2t-4Y„1xœ1x–][A-2t-4W\\-1x„1xœ1x–]*)*(\\/([A-2t-4Y„1xœ1x–][A-2t-4W\\-\\.1x„1xœ1x–]*)?)*(\\?([A-2t-4Y„1xœ1x–][A-2t-4W\\-\\.%\\+=&1x„1xœ1x–]*)?)?$/i.1m(F)},2r:u(F,E){C!q.N.1k.1l(F,E)||!/bW|9f/.1m(1R 5H(F))},7a:u(F,E){C!q.N.1k.1l(F,E)||/^\\d{4}[/-]\\d{1,2}[/-]\\d{1,2}$/.1m(F)},6W:u(F,E){C!q.N.1k.1l(F,E)||/^\\d\\d?\\.\\d\\d?\\.\\d\\d\\d?\\d?$/.1m(F)},3p:u(F,E){C!q.N.1k.1l(F,E)||/^-?[,0-9]+(\\.\\d+)?$/.1m(F)},6V:u(F,E){C!q.N.1k.1l(F,E)||/^-?[\\.0-9]+(,\\d+)?$/.1m(F)},5h:u(F,E){C!q.N.1k.1l(F,E)||/^\\d+$/.1m(F)},6F:u(F,E,O){C F==q(""+O).1W()}},am:u(1e,2d,27){q.N.1k[1e]=2d;q.N.3P[1e]=27}});(u(){u 2k(1e,2d){B(!3x.57[1e]){3x.57[1e]=2d}};2k("cF",u(1A,21){21=21||1g;V(D i=0;i<l.I;i++)1A.3c(21,l[i],i,l)});2k("cG",u(1A,21){21=21||1g;V(D i=0;i<l.I;i++)B(!1A.3c(21,l[i],i,l))C 1a;C Y});2k("cH",u(1A,21){21=21||1g;V(D i=0;i<l.I;i++)B(1A.3c(21,l[i],i,l))C Y;C 1a});2k("4L",u(1A,21){21=21||1g;D r=[];V(D i=0;i<l.I;i++)r[r.I]=1A.3c(21,l[i],i,l);C r});2k("1z",u(1A,21){21=21||1g;D r=[];V(D i=0;i<l.I;i++)B(1A.3c(21,l[i],i,l))r[r.I]=l[i];C r});2k("1Q",u(a6,8l){V(D i=8l||0;i<l.I;i++)B(l[i]===a6)C i;C-1});2k("8m",u(){C l.1z(u(E,2X,8o){C 8o.1Q(E)>=2X})})})();(u($){D 1t={},2c,2O,68,8r=$.18.1E&&/cI\\s(5\\.5|6\\.)/.1m(a7.cq);$.fn.1j({6Z:u(G){G=$.1j({},$.6Z.4m,G);af();l.1z(\'[@2O]\').17(u(){l.2K=G}).2E("5a",ac).2E(G.P,6R);C l},6X:8r?u(){C l.17(u(){D 5p=$(l).K(\'8s\');B(5p.2I(/^1f\\(["\'](.*\\.cL)["\']\\)$/i)){5p=4D.$1;$(l).K({\'8s\':\'2x\',\'1z\':"cM:cN.cw.cQ(bP=Y, cT=cU, 3l=\'"+5p+"\')"}).17(u(){D 26=$(l).K(\'26\');B(26!=\'3Z\'&&26!=\'5C\')$(l).K(\'26\',\'5C\')})}})}:u(){C l},aF:8r?u(){C l.17(u(){$(l).K({\'1z\':\'\',8s:\'\'})})}:u(){C l},ag:u(1e,F){D 25=l.1q(1e);l.1q(1e,F);C 25},ch:u(){C l.17(u(){$(l)[$(l).2h()?"1C":"1u"]()})},1f:u(){C l.1q(\'4V\')||l.1q(\'3l\')}});u af(){B(1t.19)C;1t.19=$(\'<2b S="cW"><8v></8v><p 4B="1s"></p><p 4B="1f"></p></2b>\').1u().K({26:\'3Z\',cY:"d1"}).69(\'1s\');1t.2O=$(\'8v\',1t.19);1t.1s=$(\'p.1s\',1t.19);1t.1f=$(\'p.1f\',1t.19)}u 6R(P){B(l.2K.8P)68=3u(1C,l.2K.8P);L 1C();B(l.2K.d4)$(\'1s\').2E(\'9v\',4f);4f(P);B(l.2K.P!="2W")$(l).2E(\'2W\',1u);$(l).2E(\'8e\',1u)}u ac(){B(l==2c||!l.2O)C;2c=l;2O=$(l).ag(\'2O\',\'\');B(l.2K.ah){1t.2O.1u();1t.1s.2h(l.2K.ah.3c(l)).1C()}L B(l.2K.ai){D 8A=2O.4w(l.2K.ai);1t.2O.2h(8A.75()).1C();1t.1s.6s();V(D i=0,8B;8B=8A[i];i++){B(i>0)1t.1s.3s("<br/>");1t.1s.3s(8B)}1t.1s.ch()}L{1t.2O.2h(2O).1C();1t.1s.1u()}B(l.2K.aI&&$(l).1f())1t.1f.2h($(l).1f().1O(\'dg://\',\'\')).1C();L 1t.1f.1u();1t.19.2M(l.2K.8S);B(l.2K.6X)1t.19.6X()}u 1C(){68=14;1t.19.1C();4f()}u 4f(P){B(2c==14){$(\'1s\').64(\'9v\',4f);C}D 2D=1t.19[0].8C;D 2w=1t.19[0].8D;B(P){2D=P.9m+15;2w=P.aq+15;1t.19.K({2D:2D+\'2o\',2w:2w+\'2o\'})}D v=au(),h=1t.19[0];B(v.x+v.cx<h.8C+h.42){2D-=h.42+20;1t.19.K({2D:2D+\'2o\'})}B(v.y+v.cy<h.8D+h.2V){2w-=h.2V+20;1t.19.K({2w:2w+\'2o\'})}}u au(){D e=U.3b||{},b=U.1s||{},w=1g;u 4y(){D v=dr;V(D i=0;i<11.I;i++){D n=11[i];B(n&&n<v)v=n}C v}C{x:w.8H||e.36||b.36||0,y:w.8J||e.2U||b.2U||0,cx:4y(e.5X,b.5X,w.8L),cy:4y(e.4c,b.4c,w.67)}}u 1u(P){B(68)ce(68);2c=14;1t.19.1u().3o(l.2K.8S);B(P.H!="2W"){$(l).1q(\'2O\',2O).64(\'8e\',1u)}B(l.2K.P!="2W")$(l).64(\'2W\',1u);B(l.2K.6X)1t.19.aF()}$.6Z={};$.6Z.4m={8P:dQ,P:"5a",aI:Y,8S:""}})(q);q.1j(q.fn,{aL:u(W){D N=1R q.N(W,l[0]);N.1v=l.3q(":46:2g(:3V):2g(:2S)").4z(u(){N.4a=l});B(N.G.78){l.3V(u(P){B(N.G.3j)P.3X();C N.1Z()})}B(N.G.P){N.1v.2E(N.G.P,u(){N.E(l)})}C N},1y:u(t){C l.71(q.3Y(l.2j(),t))},4S:u(S){C l.1z("[@V=\'"+S+"\']")}});q.1j(q.2p[":"],{aS:"!q.38(a.F)",aT:"!!q.38(a.F)"});q.N=u(W,1Z){l.G=q.1j({},q.N.4m,W);l.5v=1Z;l.4q=l.G.55;l.7u=l.4q.I&&l.4q||q(1Z);l.2B=l.G.77.2k(l.G.55);l.2S()};q.1j(q.N,{4m:{3P:{},3g:"1n",7M:Y,77:q([]),55:q([]),78:Y},aY:u(G){q.1j(q.N.4m,G)},3P:{1l:"aZ b0 35 1l.",6x:"1M 1K a F 8Z b1 b2 {0} 5i.",6w:"1M 1K a F b3 at b5 {0} 5i.",6z:"1M 1K a F 7O {0} 7i {1} 5i b7.",4T:"1M 1K a 2P 4T b8.",1f:"1M 1K a 2P b9.",2r:"1M 1K a 2P 2r.",7a:"1M 1K a 2P 2r (bb).",6W:"7c 7d 7f 5l bd¼bf bg 5l.",3p:"1M 1K a 2P 3p.",6V:"7c 7d 7f bi bj 5l.",5h:"1M 1K 96 5h",6F:"1M 1K 7t bk F bo.",6C:"1M 1K a F 7O {0} 7i {1}.",6O:"1M 1K a F bq 7k 4v 7l 3F {0}.",6A:"1M 1K a F bw 7k 4v 7l 3F {0}."},57:{1Z:u(){l.5q();V(D i=0,E;E=l.1v[i++];){l.4g(E)}C l.2P()},E:u(E){l.7o(E);l.4g(E);l.3J()},3J:u(2Q){B(2Q)q.1j(l.2C,2Q);l.G.3J?l.G.3J(l.2C,l):l.7L()},5n:u(){B(q.fn.5n)q(l.5v).5n();l.5q();l.5d();l.1v.3o(l.G.3g)},3H:u(7m){C q(7m)[0]},2Q:u(){C q("7Z."+l.G.3g,l.7u)},2S:u(E){l.2C={};l.1X=$([]);l.2s=$([])},5q:u(){l.2S();l.2s=l.2Q().1y(l.2B);l.1X.1y(l.2B)},7o:u(E){l.2S();l.2s=l.2Q().4S(l.4r(l.3H(E)))},4g:u(E){E=l.3H(E);q(E).3o(l.G.3g);D 2a=l.2a(E);V(D i=0,1P;1P=2a[i++];){3L{D 25=q.N.1k[1P.2d](q.38(E.F),E,1P.5B);B(25===-1)2Z;B(!25){q(E).2M(l.G.3g);l.7w(1P,E);2Z}}3B(e){l.G.3j&&1g.34&&34.1n("bJ bL bM bN E "+E.S+", 4g 7t \'"+1P.2d+"\' 2d");9h e}}},27:u(S,1P){D m=l.G.3P[S];C m&&(m.28==2H?m:m[1P.2d])},7w:u(1P,E){D S=l.4r(E),O=1P.5B;l.2C[S]=(E.2O||l.27(S,1P)||q.N.3P[1P.2d]||"<7B>bS: bT 27 bU V "+S+"</7B>").1O("{0}",(O.28==3x?O[0]:O)||"").1O("{1}",O[1]||"")},2P:u(){B(l.7G()){l.3J();C 1a}L{l.5d();B(l.G.7F){l.G.7F(l.5v);C 1a}C Y}},7G:u(){D 4E=0;q.17(l.2C,u(){4E++});C 4E},5d:u(){l.37("7V")},37:u(5b){D 3k=l;u 4e(){C 3k["3F"+5b]}B(l.G.4o){4e().1y(4e().3D(l.G.4o))}4e()[5b.2q()]();C l},7L:u(){D 2z=Y;V(D 47 23 l.2C){B(2z&&l.G.7M){B(l.4a&&l.2C[l.4a.S])l.4a.4z();L{3L{D E=q("#"+47);B(E.I)E[0].4z()}3B(e){l.G.3j&&1g.34&&34.1n(e)}}2z=1a}l.7X(47,l.2C[47])}l.2s=l.2s.2g(l.1X);l.37("7V").37("cd")},7X:u(S,27){D 1n=l.2Q().4S(S);B(1n.I){B(1n.1q("81")){1n.2h(27)}}L{1n=q("<7Z>").1q({"V":S,81:Y}).2M(l.G.3g).2h(27);B(l.G.4o){1n=1n.1u().1C().4n("<"+l.G.4o+">").19()}B(!l.4q.3s(1n).I)l.G.83?l.G.83(1n,q("#"+S)):1n.9H("#"+S)}l.1X.1y(1n)},2a:u(E){B(!l.T(E))C[];D 2a=[];q.17(l.T(E),u(2R,F){2a[2a.I]={2d:2R,5B:F}});C 2a},T:u(E){C l.G.2a?l.G.2a[l.4r(E)]:l.G.87?q(E).T()[l.G.87]:q(E).T()},4r:u(E){D S=(/40|4t/i.1m(E.H))?E.1e:E.S;B(!S){D 5E=E.1Z.S,5r=/[^a-cp-2t-9\\-6p]/g;S=E.S=(5E?5E.1O(5r,""):"")+E.1e.1O(5r,"")}C S}},3I:u(F,E){5J(E.1I.2q()){3h\'3Q\':C q("1T:3G",E).I;3h\'46\':B(/40|4t/i.1m(E.H))C q(E.1Z||U).3q(\'[@1e="\'+E.1e+\'"]:4I\').I}C F.I},8d:u(O,E){C l.5G[R O]?l.5G[R O](O,E):Y},5G:{"5L":u(O,E){C O},"1S":u(O,E){C!!q(O,E.1Z).I},"u":u(O,E){C O(E)}},1k:{1l:u(F,E,O){B(!q.N.8d(O,E))C-1;5J(E.1I.2q()){3h\'3Q\':D W=q("1T:3G",E);C W.I>0&&(E.H=="3Q-cz"||W[0].F.I>0);3h\'46\':5J(E.H.2q()){3h\'4t\':3h\'40\':C q.N.3I(F,E)>0}9Z:C F.I>0}},a0:u(F,E,O){C!q.N.1k.1l(F,E)||O.1m(F)},6w:u(F,E,O){D I=q.N.3I(F,E);C!q.N.1k.1l(F,E)||I>=O},6x:u(F,E,O){D I=q.N.3I(F,E);C!q.N.1k.1l(F,E)||I<=O},6z:u(F,E,O){D I=q.N.3I(F,E);C!q.N.1k.1l(F,E)||(I>=O[0]&&I<=O[1])},6A:u(F,E,O){C!q.N.1k.1l(F,E)||F>=O},6O:u(F,E,O){C!q.N.1k.1l(F,E)||F<=O},6C:u(F,E,O){C!q.N.1k.1l(F,E)||(F>=O[0]&&F<=O[1])},4T:u(F,E){C!q.N.1k.1l(F,E)||/^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$/i.1m(F)},1f:u(F,E){C!q.N.1k.1l(F,E)||/^(a4?|a5):\\/\\/[A-2t-9](\\.?[A-2t-4Y„1xœ1x–][A-2t-4W\\-1x„1xœ1x–]*)*(\\/([A-2t-4Y„1xœ1x–][A-2t-4W\\-\\.1x„1xœ1x–]*)?)*(\\?([A-2t-4Y„1xœ1x–][A-2t-4W\\-\\.%\\+=&1x„1xœ1x–]*)?)?$/i.1m(F)},2r:u(F,E){C!q.N.1k.1l(F,E)||!/bW|9f/.1m(1R 5H(F))},7a:u(F,E){C!q.N.1k.1l(F,E)||/^\\d{4}[/-]\\d{1,2}[/-]\\d{1,2}$/.1m(F)},6W:u(F,E){C!q.N.1k.1l(F,E)||/^\\d\\d?\\.\\d\\d?\\.\\d\\d\\d?\\d?$/.1m(F)},3p:u(F,E){C!q.N.1k.1l(F,E)||/^-?[,0-9]+(\\.\\d+)?$/.1m(F)},6V:u(F,E){C!q.N.1k.1l(F,E)||/^-?[\\.0-9]+(,\\d+)?$/.1m(F)},5h:u(F,E){C!q.N.1k.1l(F,E)||/^\\d+$/.1m(F)},6F:u(F,E,O){C F==q(""+O).1W()}},am:u(1e,2d,27){q.N.1k[1e]=2d;q.N.3P[1e]=27}});(u($){$.fn.2n=u(W){C l.17(u(){$.2n(l,W)})};$.2n=u(1U,W){D G={\'5k\':14,\'2n\':\'5N\',\'31\':dq,\'73\':\'8V\',\'1p\':\'av\',\'4B\':\'2n\',\'1i\':\'3U\'};B(W)$.1j(G,W);B(G.5k===14)D 1v=$(1U).5k();L D 1v=$(1U).5k(G.5k);B(1v.I>1){$(1U).K(\'26\',\'5C\');$(1U).K(\'1i\',G["1i"]);$(1U).2M(G["4B"]);V(D i=0;i<1v.I;i++){$(1v[i]).K(\'z-2X\',2H(1v.I-i));$(1v[i]).K(\'26\',\'3Z\');$(1v[i]).1u()};B(G["2n"]=="5N"){3u(u(){$.2n.7e(1v,G,1,0)},G.31);$(1v[0]).1C()}L B(G["2n"]=="5I"){3u(u(){do{2c=48.aW(48.5I()*1v.I)}2N(2c==0)$.2n.7e(1v,G,2c,0)},G.31);$(1v[0]).1C()}L 79(\'q: 2n: 90 "2n" 91 92 be "5N" 4v "5I"\')}};$.2n.7e=u(1v,G,2c,2v){B(G["73"]==\'aU\'){$(1v[2v]).aJ(G.1p,$(1v[2c]).aM(G.1p))}L B(G["73"]==\'8V\'){$(1v[2v]).aO(G.1p);$(1v[2c]).aP(G.1p)}L 79(\'q: 2n: 90 "73" 91 92 be "aU" 4v "8V"\');B(G["2n"]=="5N"){B((2c+1)<1v.I){2c=2c+1;2v=2c-1}L{2c=0;2v=1v.I-1}}L B(G["2n"]=="5I"){2v=2c;2N(2c==2v)2c=48.aW(48.5I()*1v.I)}L 79(\'q: 2n: 90 "2n" 91 92 be "5N" 4v "5I"\');3u((u(){$.2n.7e(1v,G,2c,2v)}),G.31)}})(q);(u($){$.3M=u(){l.3W={};C};$.3M.57={6n:u(){D Q={"S":14,"4H":4b,"7P":1a,"7J":1a,"16":14,"3a":u(){},"1B":[]};u 6h(fn){C(!!fn&&R fn!="1S"&&R fn[0]=="1c"&&4D("u","i").1m(fn+""))};D i=0;D 9g=1a;B(R 11[i]=="3m"&&11.I>1){9g=Y;i++}B(R 11[i]=="3m"){V(D 1T 23 11[i])B(R Q[1T]!="1c")Q[1T]=11[i][1T];i++}B(R 11[i]=="3p"||(R 11[i]=="1S"&&11[i].2I(4D("^[0-9]+[bH]$"))))Q["4H"]=11[i++];B(R 11[i]=="5L")Q["7P"]=11[i++];B(R 11[i]=="5L")Q["7J"]=11[i++];B(R 11[i]=="3m"&&R 11[i+1]=="1S"&&6h(11[i][11[i+1]])){Q["16"]=11[i++];Q["3a"]=11[i++]}L B(R 11[i]!="1c"&&(6h(11[i])||R 11[i]=="1S"))Q["3a"]=11[i++];2N(R 11[i]!="1c")Q["1B"].1y(11[i++]);B(9g){B(R 11[1]=="3m"){V(D 1T 23 11[0])B(R Q[1T]!="1c"&&R 11[1][1T]=="1c")Q[1T]=11[0][1T]}L{V(D 1T 23 11[0])B(R Q[1T]!="1c")Q[1T]=11[0][1T]}i++}Q["7S"]=l;Q["7Y"]=14;D 2I=2H(Q["4H"]).2I(4D("^([0-9]+)([bH])$"));B(2I&&2I[0]!="1c"&&2I[1]!="1c")Q["4H"]=2H(1b(2I[1])*{s:4b,m:4b*60,h:4b*60*60,d:4b*60*60*24,w:4b*60*60*24*7}[2I[2]]);B(Q["S"]==14)Q["S"]=(2H(Q["7P"])+":"+2H(Q["7J"])+":"+2H(Q["4H"])+":"+2H(Q["16"])+":"+2H(Q["3a"])+":"+2H(Q["1B"]));B(Q["7J"])B(R l.3W[Q["S"]]!="1c")C l.3W[Q["S"]];B(!6h(Q["3a"])){B(Q["16"]!=14&&R Q["16"]=="3m"&&R Q["3a"]=="1S"&&6h(Q["16"][Q["3a"]]))Q["3a"]=Q["16"][Q["3a"]];L Q["3a"]=7N("u () { "+Q["3a"]+" }")}Q["7Y"]=l.7Q(Q);l.3W[Q["S"]]=Q;C Q},9I:u(Q){B(R Q=="1S")Q=l.3W[Q];Q["7Y"]=l.7Q(Q);C Q},7Q:u(Q){D cc=u(){D 16=(Q["16"]!=14?Q["16"]:Q);(Q["3a"]).1D(16,Q["1B"]);B(R(Q["7S"]).3W[Q["S"]]!="1c"&&Q["7P"])(Q["7S"]).7Q(Q);L 6m(Q["7S"]).3W[Q["S"]]};C 3u(cc,Q["4H"])},9L:u(Q){B(R Q=="1S")Q=l.3W[Q];B(R Q=="3m"){ce(Q["7Y"]);6m l.3W[Q["S"]]}}};$.1j({3M$:1R $.3M(),6n:u(){C $.3M$.6n.1D($.3M$,11)},9I:u(){C $.3M$.9I.1D($.3M$,11)},9L:u(){C $.3M$.9L.1D($.3M$,11)}});$.fn.1j({6n:u(){D a=[{}];V(D i=0;i<11.I;i++)a.1y(11[i]);C l.17(u(){a[0]={"S":l,"16":l};C $.6n.1D($,a)})}})})(q);(u($){$.1j({5z$:14,3j:u(cs){D cu=($.5z$==Y?Y:1a);$.5z$=(cs?Y:1a);C cu},5O:u(27){B($.5z$==Y)34.3j(27)}});$.fn.1j({5O:u(27){B($.5z$==Y){C l.17(u(){B(R 27!=="1c")$.5O(27);$.5O(l)})}}});$(U).3f(u(){D 8f=$("2h").1q("3j");B(8f=="Y"||8f=="1a")$.3j(8f=="Y"?Y:1a)});$(U).3f(u(){B(R 1g.34==="1c"){u ck(16){D 1J=14;B(R 16==="1c")1J="[1c]";L B(R 16==="5L")1J=(16?"Y":"1a");L B(R 16==="3p")1J=""+16;L B(R 16==="1S")1J=16;L B(R 16==="u")1J=16;L B(R 16==="3m"){B(R 16.2Y!=="1c"){B(16.2Y==1){1J=\'&8i;\';1J+=16.1I.2q();V(D i=0;i<16.8j.I;i++)1J+=\' \'+16.8j[i].1I.2q()+\'="\'+16.8j[i].6u+\'"\';1J+=\'&8k;\'}L B(16.2Y==2)1J=16.1I+\'="\'+16.6u;L B(16.2Y==3)1J=16.6u}L B(R 16.aB!=="1c")1J=16.aB();L B(R 16.4R!=="1c")1J=16.4R()}B(1J==14)1J="[d9]";C 1J};$(U).3f(u(){$("1s").3s(\'<2b S="4C"><4N></4N></2b>\');$("#4C").K("1L","2x").K("ds","dt").K("du","#dy").K("dD","#dK").K("5M","6N 5f 6N 5f").K("62","65 cv #dS").K("6P","65 65 65 65");$("#4C 4N").K("6P","5f 5f 5f 5f").K("8W","e6")});D 9s=["5O","3j","ek","eu","1n","eC","6a","eF","eI","eK","4H","eR","4E","eY","f2","f4"];1g.34={};V(D i=0;i<9s.I;i++){1g.34[9s[i]]=u(cm){$(\'#4C\').K("1L",$.5z$==Y?"43":"2x");$(\'#4C 4N\').3s(\'<1G>\'+ck(cm)+\'</1G>\').K;$("#4C 4N 1G").K("fi","4U cv #fq").K("5M","4U 6N 4U 6N")}}1g.34["4C"]=Y}})})(q);(u($){$.1j({dk:u(){D 1F={\'1f\':14,\'8z\':Y,\'cb\':14,\'c5\':14};B(R 11[0]=="1S"){1F.1f=11[0];B(R 11[1]=="u")1F.cb=11[1]}L B(R 11[0]=="3m"){V(D 1T 23 11[0])B(R 1F[1T]!="1c")1F[1T]=11[0][1T]}D 4P=$(U.7b(\'44\')).1q(\'H\',\'1J/bG\').1q(\'3l\',1F.1f);B(1F.8z||1F.cb!==14){D 1h=u(){B(1F.cb!==14){D 1B=1F.c5;B(1B===14)1B=[];L B(!(R 1B==="3m"&&1B fh 3x))1B=[1B];1F.cb.1D(l,1B)}B(1F.8z)$(l).3T()};B($.18.1E){4P.2j(0).5c=u(){B(l.4p=="39"||l.4p=="9X")1h.3c(l)}}L B($.18.33){$.5s=5o(u(){B(4P.2j(0).4p=="39"||4P.2j(0).4p=="9X"){6D($.5s);$.5s=14;1h.3c(4P.2j(0))}},9t)}L{$(4P).4l(1h)}}$(\'eV\',U).3s(4P)}})})(q);',62,957,'|||||||||||||||||||||this|||||jQuery||||function|||||||if|return|var|element|value|settings|type|length|elem|css|else||validator|param|event|ctx|typeof|id|data|document|for|options||true|||arguments|prop||null||obj|each|browser|parent|false|parseInt|undefined|ret|name|url|window|callback|height|extend|methods|required|test|error|xml|speed|attr|cur|body|helper|hide|elements|parentNode|Ã|push|filter|handler|args|show|apply|msie|arg|li|style|nodeName|text|enter|display|Please|opacity|replace|rule|indexOf|new|string|option|container|tabs|val|toShow|status|form||scope|hash|in||result|position|message|constructor|firstChild|rules|div|current|method|width|trigger|not|html|className|get|add|nav|events|alternation|px|expr|toLowerCase|date|toHide|Z0|expires|last|top|none|global|first|hidden|containers|errorList|left|bind|isFunction|context|String|match|initial|tSettings|opt|addClass|while|title|valid|errors|key|reset|num|scrollTop|offsetHeight|click|index|nodeType|break|animate|timeout|queue|safari|console|is|scrollLeft|toggle|trim|complete|func|documentElement|call|old|easing|ready|errorClass|case|target|debug|self|src|object|end|removeClass|number|find|elems|append|visible|setTimeout|disabled|table|Array|opera|done|ifModified|catch|tbody|parents|bookmarkable|to|selected|clean|getLength|showErrors|nth|try|scheduler|orig|params|messages|select|tab|duration|remove|auto|submit|bucket|preventDefault|merge|absolute|radio|span|offsetWidth|block|script|innerHTML|input|elementID|Math|tb|lastActive|1000|clientHeight|nextSibling|which|update|check|cookie|mozilla|borderTopWidth|borderLeftWidth|load|defaults|wrap|wrapper|readyState|labelContainer|findId|selectedClass|checkbox|remote|or|split|fix|min|focus|size|class|jQueryDebug|RegExp|count|encodeURIComponent|oid|time|checked|overflow|returnValue|map|pushStack|ol|firstNum|node|clicked|toString|forId|email|1px|href|9_|exec|9Ã|res||insertBefore|stopPropagation|cssFloat|custom|errorLabelContainer|success|prototype|grep|oldblock|mouseover|that|onreadystatechange|hideErrors|timers|0px|curAnim|digits|characters|guid|children|ein|re|resetForm|setInterval|image|prepareForm|idcleanup|safariTimer|sibling|tmp|currentForm|boxModel|static|hideAnim|_debug|now|parameters|relative|location|formId|showAnim|dependTypes|Date|random|switch|ajaxHistory|boolean|padding|sequence|log|childNodes|fx|currentStyle|substr|re2|handlers|scroll|makeArray|clientWidth|st|originalEvent||readyList|border|removeChild|unbind|4px|curCSS|innerHeight|tID|appendTo|dir|ownerDocument|multiFilter|path|domain|domManip|op|_isfn|sl|Number|containerClass|has|delete|schedule|onClick|_|disabledClass|onHide|empty|onShow|nodeValue|on|minLength|maxLength|ul|rangeLength|minValue|tabEvents|rangeValue|clearInterval|ajax|equalTo|tr|oldDisplay|styleFloat|toUpperCase|step|ajaxSettings|mergeNum|10px|maxValue|margin|inArray|handle|token|foundToken|getAttribute|numberDE|dateDE|fixPNG|isReady|Tooltip|Function|setArray|doc|animation|diff|shift|parseFloat|errorContainer|onsubmit|alert|dateISO|createElement|Bitte|geben|_next|Sie|setRequestHeader|defaultView|and|ival|than|equal|selector|lastModified|prepareElement|oHeight|responseText|jquery|tag|the|errorContext|getTime|formatAndAdd|handleError|secure|cloneNode|async|strong|oWidth|max|child|submitHandler|countErrors|tagName|absparent|protect|button|defaultShowErrors|focusInvalid|eval|between|repeat|_schedule|expression|_scheduler|modRes|XMLHttpRequest|Hide|navClass|showError|_handle|label|msie6|generated|visibility|errorPlacement|cachedFontSize|currentWidth|currentFontSize|meta|cachedWidth|toShowId|hideClass|minHeight|locked|depend|mouseout|req|trueClick|disableTab|lt|attributes|gt|offset|unique|isXMLDoc|array|clone|parPos|IE|backgroundImage|swap|getComputedStyle|h3|float|second|inv|gc|parts|part|offsetLeft|offsetTop|chars|pass|classFilter|pageXOffset|matched|pageYOffset|triggered|innerWidth|lastToggle|els|handleHover|delay|getElementById|unload|extraClass|fn2|from|fade|paddingRight|startTime|lastNum|no|parameter|must|either|slice|GET|00|only|isTimeout|requestDone|active|file|Modified|getResponseHeader|evalScripts|globalEval|NaN|override|throw|join|cookies|substring|cookieValue|pageX|appendChild|relparent|paddingLeft|paddingTop|returnObject|names|100|bgiframe|mousemove|deep|hasSelectedClass|unFocus|jq|dataType|heights|font|watchFontSize|_setAutoHeight|cachedHeight|currentHeight|insertAfter|reschedule|_resort|fxSpeed|cancel|fxSlide|fxFade|fxShow|fxHide|clientX|pos|hideSpeed|showSpeed|remoteUrls|switchTab|loadingClass|loaded|blur|default|regex|triggerTab|enableTab|tabEvent|https|ftp|subject|navigator|prevObject|zoom|alpha|exclude|save|force|getPropertyValue|createHelper|getAndSetAttr|bodyHandler|showBody|webkit|prepend||addMethod|removeAttr|previousSibling|contains|pageY|password|tl||viewport|normal|parse|_prefix|even|odd|unshift|toJSONString|srcElement|one|DOMContentLoaded|unfixPNG|__ie_init|newProp|showURL|slideUp|_toggle|validate|slideDown|state|fadeOut|fadeIn|swing|dequeue|blank|filled|slide|timer|floor|oldOverflow|setDefaults|This|field|longer|then|of|getScript|least|POST|long|address|URL|processData|ISO|ActiveXObject|gÃ||ltiges|Datum|contentType|eine|Nummer|same||beforeSend|ajaxSend|again|notmodified|less||ajaxSuccess||ajaxComplete|ajaxStop|greater|ajaxError|httpSuccess|200|getElementsByTagName|httpNotModified|Last|304|xmlRes|httpData|javascript|smhdw|json|exception|execScript|occured|when|checking|ywdhms|enabled|setTime|toUTCString|Warning|No|defined|_height|Invalid|_width|borderBottomWidth|paddingBottom|borderRightWidth|offsetParent|marginLeft|marginTop|before|cb_args|after|iframe|hashPrefix|remoteCount|tabStruct||trampoline|Show|clearTimeout|fxAutoHeight|behaviour|hideWhenEmpty|watch|fxShowSpeed|object2text|fxHideSpeed|msg|action|tempForm|zA|userAgent|siblings|onoff||old_value|solid|Microsoft|||multiple|scrollTo|scrollX|scrollY|ajaxStart|initialize|forEach|every|some|MSIE|createTextNode|FORM|png|progid|DXImageTransform|weight|line|AlphaImageLoader|Bottom|Left|sizingMethod|crop|right|tooltip|tfoot|zIndex|td|th|3000|htmlFor|readonly|track|readOnly|getAttributeNode|setAttribute|ig|unknown|concat|compatible|compatMode|next|prev|prependTo|http|removeAttribute|toggleClass|lastChild|getScriptXS|textarea|u0128|uFFFF||continue|2000|Infinity|fontFamily|monospace|backgroundColor|thead|clientY|cancelBubble|ffffff|fromElement|toElement|relatedTarget|removeEventListener|color|dblclick|mousedown|mouseup|keydown|keypress|keyup|000000|addEventListener|write|scr|ipt|defer|250|slideToggle|666699|fadeTo|Object|slow|change|600|fast|400|resize|linear|cos|PI|10000|loadIfModified|20px|serialize|hover|textContent|getIfModified|getJSON|post|ajaxTimeout|ajaxSetup|application|www|urlencoded|XMLHTTP|open|info||Content|Type|If|Since||Thu|01|Jan|warn|1970|GMT|Requested|With|overrideMimeType|Connection|close|assert|abort|send|dirxml|protocol|300|group|content|groupEnd|responseXML|Right|center|horizontal|vertical|Top|timeEnd|365|Width|invalid|head|decodeURIComponent|scrollHeight|trace|scrollWidth|outerHeight|outerWidth|profile|reverse|profileEnd|inline|bgIframe|frameborder|tabindex|Alpha|Opacity|loading|500|removeExpression|sort|setExpression|noConflict|instanceof|borderBottom|Loading|CSS1Compat||8230||There|such|cccccc'.split('|'),0,{}))
  +eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('B(R 1g.q=="1c"){1g.1c=1g.1c;D q=u(a,c){B(1g==l)C 1S q(a,c);a=a||U;B(q.2O(a))C 1S q(U)[q.fn.3f?"3f":"48"](a);B(R a=="1R"){D m=/^[^<]*(<(.|\\s)+>)[^>]*$/.5d(a);B(m)a=q.3I([m[1]]);L C 1S q(c).3w(a)}C l.72(a.23==3k&&a||(a.7u||a.I&&a!=1g&&!a.2W&&a[0]!=1c&&a[0].2W)&&q.6p(a)||[a])};B(R $!="1c")q.6q$=$;D $=q;q.fn=q.5g={7u:"1.1.2",4u:u(){C l.I},I:0,2M:u(2Q){C 2Q==1c?q.6p(l):l[2Q]},4y:u(a){D 1d=q(a);1d.cA=l;C 1d},72:u(a){l.I=0;[].1y.1A(l,a);C l},16:u(fn,1E){C q.16(l,fn,1E)},2V:u(17){D 9w=-1;l.16(u(i){B(l==17)9w=i});C 9w},1q:u(2P,F,H){D 17=2P;B(2P.23==2D)B(F==1c)C l.I&&q[H||"1q"](l[0],2P)||1c;L{17={};17[2P]=F}C l.16(u(2V){V(D 12 25 17)q.1q(H?l.1F:l,12,q.12(l,17[12],H,2V,12))})},K:u(2P,F){C l.1q(2P,F,"5W")},1L:u(e){B(R e=="1R")C l.6f().3l(U.cJ(e));D t="";q.16(e||l,u(){q.16(l.67,u(){B(l.2W!=8)t+=l.2W!=1?l.6g:q.fn.1L([l])})});C t},4q:u(){D a,1E=11;C l.16(u(){B(!a)a=q.3I(1E,l.5N);D b=a[0].7B(Y);l.1w.5r(b,l);2I(b.29)b=b.29;b.9k(l)})},3l:u(){C l.6e(11,Y,1,u(a){l.9k(a)})},ap:u(){C l.6e(11,Y,-1,u(a){l.5r(a,l.29)})},aq:u(){C l.6e(11,1a,1,u(a){l.1w.5r(a,l)})},cc:u(){C l.6e(11,1a,-1,u(a){l.1w.5r(a,l.4i)})},3p:u(){C l.cA||q([])},3w:u(t){C l.4y(q.8j(q.4C(l,u(a){C q.3w(t,a)})),t)},8m:u(9u){C l.4y(q.4C(l,u(a){D a=a.7B(9u!=1c?9u:Y);a.$2i=14;C a}))},1z:u(t){C l.4y(q.2O(t)&&q.4V(l,u(el,2V){C t.1A(el,[2V])})||q.64(t,l))},2l:u(t){C l.4y(t.23==2D&&q.64(t,l,Y)||q.4V(l,u(a){C(t.23==3k||t.7u)?q.6K(a,t)<0:a!=t}))},2m:u(t){C l.4y(q.3V(l.2M(),t.23==2D?q(t).2M():t.I!=1c&&(!t.1I||t.1I=="cK")?t:[t]))},34:u(2r){C 2r?q.64(2r,l).I>0:1a},1Y:u(1Y){C 1Y==1c?(l.I?l[0].F:14):l.1q("F",1Y)},2f:u(1Y){C 1Y==1c?(l.I?l[0].3Z:14):l.6f().3l(1Y)},6e:u(1E,3m,63,fn){D 8m=l.I>1,a;C l.16(u(){B(!a){a=q.3I(1E,l.5N);B(63<0)a.f3()}D 17=l;B(3m&&q.1I(l,"3m")&&q.1I(a[0],"6F"))17=l.az("3O")[0]||l.9k(U.7v("3O"));q.16(a,u(){fn.1A(17,[8m?l.7B(Y):l])})})}};q.1j=q.fn.1j=u(){D 3j=11[0],a=1;B(11.I==1){3j=l;a=0}D 12;2I(12=11[a++])V(D i 25 12)3j[i]=12[i];C 3j};q.1j({f1:u(){B(q.6q$)$=q.6q$;C q},2O:u(fn){C!!fn&&R fn!="1R"&&!fn.1I&&fn.23!=3k&&/u/i.1o(fn+"")},8r:u(J){C J.7H&&J.5N&&!J.5N.1r},1I:u(J,1e){C J.1I&&J.1I.6v()==1e.6v()},16:u(17,fn,1E){B(17.I==1c)V(D i 25 17)fn.1A(17[i],1E||[i,17[i]]);L V(D i=0,4t=17.I;i<4t;i++)B(fn.1A(17[i],1E||[i,17[i]])===1a)2Z;C 17},12:u(J,F,H,2V,12){B(q.2O(F))F=F.3h(J,[2V]);D ab=/z-?2V|9y-?cN|1N|ah|cO-?1i/i;C F&&F.23==5L&&H=="5W"&&!ab.1o(12)?F+"2o":F},2h:{2m:u(J,c){q.16(c.4x(/\\s+/),u(i,1s){B(!q.2h.68(J.2h,1s))J.2h+=(J.2h?" ":"")+1s})},41:u(J,c){J.2h=c?q.4V(J.2h.4x(/\\s+/),u(1s){C!q.2h.68(c,1s)}).9d(" "):""},68:u(t,c){C q.6K(c,(t.2h||t).5j().4x(/\\s+/))>-1}},8o:u(e,o,f){V(D i 25 o){e.1F["37"+i]=e.1F[i];e.1F[i]=o[i]}f.1A(e,[]);V(D i 25 o)e.1F[i]=e.1F["37"+i]},K:u(e,p){B(p=="1i"||p=="2e"){D 37={},7d,7h,d=["fq","eN","eQ","cQ"];q.16(d,u(){37["61"+l]=0;37["5J"+l+"cS"]=0});q.8o(e,37,u(){B(q(e).34(\':3q\')){7d=e.2X;7h=e.42}L{e=q(e.7B(Y)).3w(":3S").as("4N").3p().K({8b:"2z",28:"40",1K:"44",cU:"0",2s:"0"}).6n(e.1w)[0];D 9h=q.K(e.1w,"28")||"59";B(9h=="59")e.1w.1F.28="5l";7d=e.4c;7h=e.5Q;B(9h=="59")e.1w.1F.28="59";e.1w.5S(e)}});C p=="1i"?7d:7h}C q.5W(e,p)},5W:u(J,12,b2){D 1d;B(12=="1N"&&q.18.1C){1d=q.1q(J.1F,"1N");C 1d==""?"1":1d}B(12=="8H"||12=="5D")12=q.18.1C?"70":"5D";B(!b2&&J.1F[12])1d=J.1F[12];L B(U.7w&&U.7w.8p){B(12=="5D"||12=="70")12="8H";12=12.1P(/([A-Z])/g,"-$1").2q();D 1s=U.7w.8p(J,14);B(1s)1d=1s.ae(12);L B(12=="1K")1d="2y";L q.8o(J,{1K:"44"},u(){D c=U.7w.8p(l,"");1d=c&&c.ae(12)||""})}L B(J.6h){D af=12.1P(/\\-(\\w)/g,u(m,c){C c.6v()});1d=J.6h[12]||J.6h[af]}C 1d},3I:u(a,6S){D r=[];6S=6S||U;q.16(a,u(i,1H){B(!1H)C;B(1H.23==5L)1H=1H.5j();B(R 1H=="1R"){D s=q.38(1H),2a=6S.7v("2a"),4e=[];D 4q=!s.1O("<2J")&&[1,"<3Q>","</3Q>"]||(!s.1O("<cY")||!s.1O("<3O")||!s.1O("<cZ"))&&[1,"<3m>","</3m>"]||!s.1O("<6F")&&[2,"<3m><3O>","</3O></3m>"]||(!s.1O("<d0")||!s.1O("<d1"))&&[3,"<3m><3O><6F>","</6F></3O></3m>"]||[0,"",""];2a.3Z=4q[1]+1H+4q[2];2I(4q[0]--)2a=2a.29;B(q.18.1C){B(!s.1O("<3m")&&s.1O("<3O")<0)4e=2a.29&&2a.29.67;L B(4q[1]=="<3m>"&&s.1O("<3O")<0)4e=2a.67;V(D n=4e.I-1;n>=0;--n)B(q.1I(4e[n],"3O")&&!4e[n].67.I)4e[n].1w.5S(4e[n])}1H=q.6p(2a.67)}B(1H.I===0&&!q.1I(1H,"1T"))C;B(1H[0]==1c||q.1I(1H,"1T"))r.1y(1H);L r=q.3V(r,1H)});C r},1q:u(J,1e,F){D 4E=q.8r(J)?{}:{"V":"d2","4F":"2h","8H":q.18.1C?"70":"5D",5D:q.18.1C?"70":"5D",3Z:"3Z",2h:"2h",F:"F",3r:"3r",4N:"4N",d5:"d7",3H:"3H"};B(1e=="1N"&&q.18.1C){B(F!=1c){J.ah=1;J.1z=(J.1z||"").1P(/aa\\([^)]*\\)/,"")+(73(F).5j()=="8X"?"":"aa(1N="+F*ai+")")}C J.1z?(73(J.1z.2K(/1N=([^)]*)/)[1])/ai).5j():""}B(4E[1e]){B(F!=1c)J[4E[1e]]=F;C J[4E[1e]]}L B(F==1c&&q.18.1C&&q.1I(J,"1T")&&(1e=="cr"||1e=="2d"))C J.d8(1e).6g;L B(J.7H){B(F!=1c)J.d9(1e,F);B(q.18.1C&&/5y|3s/.1o(1e)&&!q.8r(J))C J.6O(1e,2);C J.6O(1e)}L{1e=1e.1P(/-([a-z])/da,u(z,b){C b.6v()});B(F!=1c)J[1e]=F;C J[1e]}},38:u(t){C t.1P(/^\\s+|\\s+$/g,"")},6p:u(a){D r=[];B(R a!="9x")V(D i=0,al=a.I;i<al;i++)r.1y(a[i]);L r=a.8F(0);C r},6K:u(b,a){V(D i=0,al=a.I;i<al;i++)B(a[i]==b)C i;C-1},3V:u(2w,8s){V(D i=0;8s[i];i++)2w.1y(8s[i]);C 2w},8j:u(2w){D r=[],2Q=q.6H++;V(D i=0,fl=2w.I;i<fl;i++)B(2w[i].6H!=2Q){2w[i].6H=2Q;r.1y(2w[i])}C r},6H:0,4V:u(3o,fn,9W){B(R fn=="1R")fn=1S 6Y("a","i","C "+fn);D 22=[];V(D i=0,el=3o.I;i<el;i++)B(!9W&&fn(3o[i],i)||9W&&!fn(3o[i],i))22.1y(3o[i]);C 22},4C:u(3o,fn){B(R fn=="1R")fn=1S 6Y("a","C "+fn);D 22=[];V(D i=0,el=3o.I;i<el;i++){D 1Y=fn(3o[i],i);B(1Y!==14&&1Y!=1c){B(1Y.23!=3k)1Y=[1Y];22=22.dc(1Y)}}C 22}});1S u(){D b=c6.ca.2q();q.18={3b:/an/.1o(b),3D:/3D/.1o(b),1C:/1C/.1o(b)&&!/3D/.1o(b),4f:/4f/.1o(b)&&!/(dd|an)/.1o(b)};q.5c=!q.18.1C||U.fk=="df"};q.16({19:"a.1w",3B:"q.3B(a)",dg:"q.3J(a,2,\'4i\')",dh:"q.3J(a,2,\'au\')",cv:"q.52(a.1w.29,a)",4Q:"q.52(a.29)"},u(i,n){q.fn[i]=u(a){D 1d=q.4C(l,n);B(a&&R a=="1R")1d=q.64(a,1d);C l.4y(1d)}});q.16({6n:"3l",di:"ap",5r:"aq",9H:"cc"},u(i,n){q.fn[i]=u(){D a=11;C l.16(u(){V(D j=0,al=a.I;j<al;j++)q(a[j])[n](l)})}});q.16({as:u(2P){q.1q(l,2P,"");l.dj(2P)},2E:u(c){q.2h.2m(l,c)},3u:u(c){q.2h.41(l,c)},dk:u(c){q.2h[q.2h.68(l,c)?"41":"2m"](l,c)},41:u(a){B(!a||q.1z(a,[l]).r.I)l.1w.5S(l)},6f:u(){2I(l.29)l.5S(l.29)}},u(i,n){q.fn[i]=u(){C l.16(n,11)}});q.16(["eq","9n","8n","c3"],u(i,n){q.fn[n]=u(2Q,fn){C l.1z(":"+n+"("+2Q+")",fn)}});q.16(["1i","2e"],u(i,n){q.fn[n]=u(h){C h==1c?(l.I?q.K(l[0],n):14):l.K(n,h.23==2D?h:h+"2o")}});q.1j({2r:{"":"m[2]==\'*\'||q.1I(a,m[2])","#":"a.6O(\'T\')==m[2]",":":{9n:"i<m[3]-0",8n:"i>m[3]-0",3J:"m[3]-0==i",eq:"m[3]-0==i",2w:"i==0",2t:"i==r.I-1",aD:"i%2==0",aE:"i%2","3J-7D":"q.3J(a.1w.29,m[3],\'4i\',a)==a","2w-7D":"q.3J(a.1w.29,1,\'4i\')==a","2t-7D":"q.3J(a.1w.dl,1,\'au\')==a","9j-7D":"q.52(a.1w.29).I==1",19:"a.29",6f:"!a.29",c3:"q.fn.1L.1A([a]).1O(m[3])>=0",3q:\'a.H!="2z"&&q.K(a,"1K")!="2y"&&q.K(a,"8b")!="2z"\',2z:\'a.H=="2z"||q.K(a,"1K")=="2y"||q.K(a,"8b")=="2z"\',ad:"!a.3r",3r:"a.3r",4N:"a.4N",3H:"a.3H||q.1q(a,\'3H\')",1L:"a.H==\'1L\'",3S:"a.H==\'3S\'",4d:"a.H==\'4d\'",95:"a.H==\'95\'",bX:"a.H==\'bX\'",3W:"a.H==\'3W\'",55:"a.H==\'55\'",2S:"a.H==\'2S\'",7G:\'a.H=="7G"||q.1I(a,"7G")\',3R:"/3R|3Q|dn|7G/i.1o(a.1I)"},".":"q.2h.68(a,m[2])","@":{"=":"z==m[4]","!=":"z!=m[4]","^=":"z&&!z.1O(m[4])","$=":"z&&z.62(z.I - m[4].I,m[4].I)==m[4]","*=":"z&&z.1O(m[4])>=0","":"z",8A:u(m){C["",m[1],m[3],m[2],m[5]]},aC:"z=a[m[3]];B(!z||/5y|3s/.1o(m[3]))z=q.1q(a,m[3]);"},"[":"1b(m[2])?q.3J(a.1w.29,1b(m[2]),\'4i\',a)==a:q.3w(m[2],a).I"},aA:[/^\\[ *(@)([\\w-]+) *([!*$^=]*) *(\'?"?)(.*?)\\4 *\\]/,/^(\\[)\\s*(.*?(\\[.*?\\])?[^[]*?)\\s*\\]/,/^(:)([\\w-]+)\\("?\'?(.*?(\\(.*?\\))?[^(]*?)"?\'?\\)/,1S 4G("^([:.#]*)("+(q.8x="(?:[\\\\w\\dp-\\dq*-]|\\\\\\\\.)")+"+)")],6L:[/^(\\/?\\.\\.)/,"a.1w",/^(>|\\/)/,"q.52(a.29)",/^(\\+)/,"q.3J(a,2,\'4i\')",/^(~)/,u(a){D s=q.52(a.1w.29);C s.8F(q.6K(a,s)+1)}],64:u(2r,3o,2l){D 37,1s=[];2I(2r&&2r!=37){37=2r;D f=q.1z(2r,3o,2l);2r=f.t.1P(/^\\s*,\\s*/,"");1s=2l?3o=f.r:q.3V(1s,f.r)}C 1s},3w:u(t,2G){B(R t!="1R")C[t];B(2G&&!2G.2W)2G=14;2G=2G||U;B(!t.1O("//")){2G=2G.3c;t=t.62(2,t.I)}L B(!t.1O("/")&&!2G.5N){2G=2G.3c;t=t.62(1,t.I);B(t.1O("/")>=1)t=t.62(t.1O("/"),t.I)}D 1d=[2G],3P=[],2t;2I(t&&2t!=t){D r=[];2t=t;t=q.38(t).1P(/^\\/\\//,"");D 6M=1a;D 5i=/^[\\/>]\\s*([\\w*-]+)/;D m=5i.5d(t);B(m){V(D i=0;1d[i];i++)V(D c=1d[i].29;c;c=c.4i)B(c.2W==1&&(m[1]=="*"||q.1I(c,m[1])))r.1y(c);1d=r;t=t.1P(5i,"");B(t.1O(" ")==0)dr;6M=Y}L{V(D i=0,ay=q.6L.I;i<ay;i+=2){D 5i=q.6L[i],fn=q.6L[i+1];D m=5i.5d(t);B(m){r=1d=q.4C(1d,q.2O(fn)?fn:1S 6Y("a","C "+fn));t=q.38(t.1P(5i,""));6M=Y;2Z}}}B(t&&!6M){B(!t.1O(",")){B(1d[0]==2G)1d.7M();3P=q.3V(3P,1d);r=1d=[2G];t=" "+t.62(1,t.I)}L{D 65=1S 4G("^(\\\\w+)(#)("+q.8x+"+)");D m=65.5d(t);B(m){m=[0,m[2],m[3],m[1]]}L{65=1S 4G("^([#.]?)("+q.8x+"*)");m=65.5d(t)}m[2]=m[2].1P(/\\\\/g,"");D J=1d[1d.I-1];B(m[1]=="#"&&J&&J.8L){D 4B=J.8L(m[2]);B((q.18.1C||q.18.3D)&&4B&&4B.T!=m[2])4B=q(\'[@T="\'+m[2]+\'"]\',J)[0];1d=r=4B&&(!m[3]||q.1I(4B,m[3]))?[4B]:[]}L{V(D i=0;1d[i];i++){D 6N=m[1]!=""||m[0]==""?"*":m[2];B(6N=="*"&&1d[i].1I.2q()=="3x")6N="O";r=q.3V(r,1d[i].az(6N))}B(m[1]==".")r=q.8B(r,m[2]);B(m[1]=="#"){D 4Z=[];V(D i=0;r[i];i++)B(r[i].6O("T")==m[2]){4Z=[r[i]];2Z}r=4Z}1d=r}t=t.1P(65,"")}}B(t){D 1Y=q.1z(t,r);1d=r=1Y.r;t=q.38(1Y.t)}}B(t)1d=[];B(1d&&1d[0]==2G)1d.7M();3P=q.3V(3P,1d);C 3P},8B:u(r,m,2l){m=" "+m+" ";D 4Z=[];V(D i=0;r[i];i++){D 8z=(" "+r[i].2h+" ").1O(m)>=0;B(!2l&&8z||2l&&!8z)4Z.1y(r[i])}C 4Z},1z:u(t,r,2l){D 2t;2I(t&&t!=2t){2t=t;D p=q.aA,m;V(D i=0;p[i];i++){m=p[i].5d(t);B(m){t=t.9g(m[0].I);B(q.2r[m[1]].8A)m=q.2r[m[1]].8A(m);m[2]=m[2].1P(/\\\\/g,"");2Z}}B(!m)2Z;B(m[1]==":"&&m[2]=="2l")r=q.1z(m[3],r,Y).r;L B(m[1]==".")r=q.8B(r,m[2],2l);L{D f=q.2r[m[1]];B(R f!="1R")f=q.2r[m[1]][m[2]];7P("f = u(a,i){"+(q.2r[m[1]].aC||"")+"C "+f+"}");r=q.4V(r,f,2l)}}C{r:r,t:t}},3B:u(J){D 8C=[];D 1s=J.1w;2I(1s&&1s!=U){8C.1y(1s);1s=1s.1w}C 8C},3J:u(1s,22,63,J){22=22||1;D 2Q=0;V(;1s;1s=1s[63]){B(1s.2W==1)2Q++;B(2Q==22||22=="aD"&&2Q%2==0&&2Q>1&&1s==J||22=="aE"&&2Q%2==1&&1s==J)C 1s}},52:u(n,J){D r=[];V(;n;n=n.4i){B(n.2W==1&&(!J||n!=J))r.1y(n)}C r}});q.P={2m:u(E,H,1D,S){B(q.18.1C&&E.6l!=1c)E=1g;B(S)1D.S=S;B(!1D.53)1D.53=l.53++;B(!E.$2i)E.$2i={};D 5O=E.$2i[H];B(!5O){5O=E.$2i[H]={};B(E["5P"+H])5O[0]=E["5P"+H]}5O[1D.53]=1D;E["5P"+H]=l.6C;B(!l.2A[H])l.2A[H]=[];l.2A[H].1y(E)},53:1,2A:{},41:u(E,H,1D){D 2i=E.$2i,1d;B(2i){B(H&&H.H){1D=H.1D;H=H.H}B(!H){V(H 25 2i)l.41(E,H)}L B(2i[H]){B(1D)6m 2i[H][1D.53];L V(1D 25 E.$2i[H])6m 2i[H][1D];V(1d 25 2i[H])2Z;B(!1d){1d=E["5P"+H]=14;6m 2i[H]}}V(1d 25 2i)2Z;B(!1d)E.$2i=14}},2j:u(H,S,E){S=q.6p(S||[]);B(!E)q.16(l.2A[H]||[],u(){q.P.2j(H,S,l)});L{D 1D=E["5P"+H],1Y,fn=q.2O(E[H]);B(1D){S.aG(l.4E({H:H,3j:E}));B((1Y=1D.1A(E,S))!==1a)l.8E=Y}B(fn&&1Y!==1a)E[H]();l.8E=1a}},6C:u(P){B(R q=="1c"||q.P.8E)C;P=q.P.4E(P||1g.P||{});D 4K;D c=l.$2i[P.H];D 1E=[].8F.3h(11,1);1E.aG(P);V(D j 25 c){1E[0].1D=c[j];1E[0].S=c[j].S;B(c[j].1A(l,1E)===1a){P.3X();P.5s();4K=1a}}B(q.18.1C)P.3j=P.3X=P.5s=P.1D=P.S=14;C 4K},4E:u(P){B(!P.3j&&P.aH)P.3j=P.aH;B(P.8v==1c&&P.9L!=1c){D e=U.3c,b=U.1r;P.8v=P.9L+(e.35||b.35);P.aw=P.dv+(e.2U||b.2U)}B(q.18.3b&&P.3j.2W==3){D 5I=P;P=q.1j({},5I);P.3j=5I.3j.1w;P.3X=u(){C 5I.3X()};P.5s=u(){C 5I.5s()}}B(!P.3X)P.3X=u(){l.4K=1a};B(!P.5s)P.5s=u(){l.dw=Y};C P}};q.fn.1j({2L:u(H,S,fn){C l.16(u(){q.P.2m(l,H,fn||S,S)})},aM:u(H,S,fn){C l.16(u(){q.P.2m(l,H,u(P){q(l).5K(P);C(fn||S).1A(l,11)},S)})},5K:u(H,fn){C l.16(u(){q.P.41(l,H,fn)})},2j:u(H,S){C l.16(u(){q.P.2j(H,S,l)})},3d:u(){D a=11;C l.2Y(u(e){l.9S=l.9S==0?1:0;e.3X();C a[l.9S].1A(l,[e])||1a})},dx:u(f,g){u 8J(e){D p=(e.H=="54"?e.dy:e.dz)||e.dA;2I(p&&p!=l)3A{p=p.1w}3z(e){p=l};B(p==l)C 1a;C(e.H=="54"?f:g).1A(l,[e])}C l.54(8J).6V(8J)},3f:u(f){B(q.6T)f.1A(U,[q]);L{q.5R.1y(u(){C f.1A(l,[q])})}C l}});q.1j({6T:1a,5R:[],3f:u(){B(!q.6T){q.6T=Y;B(q.5R){q.16(q.5R,u(){l.1A(U)});q.5R=14}B(q.18.4f||q.18.3D)U.e0("aJ",q.3f,1a)}}});1S u(){q.16(("8f,4L,48,dB,6a,8K,2Y,dC,"+"dD,dW,8u,54,6V,dE,3Q,"+"3W,dF,dG,dS,1m").4x(","),u(i,o){q.fn[o]=u(f){C f?l.2L(o,f):l.2j(o)}});B(q.18.4f||q.18.3D)U.dI("aJ",q.3f,1a);L B(q.18.1C){U.dJ("<dL"+"dM T=aI dN=Y "+"3s=//:><\\/3Y>");D 3Y=U.8L("aI");B(3Y)3Y.5F=u(){B(l.58!="3t")C;l.1w.5S(l);q.3f()};3Y=14}L B(q.18.3b)q.8M=6l(u(){B(U.58=="bb"||U.58=="3t"){91(q.8M);q.8M=14;q.3f()}},10);q.P.2m(1g,"48",q.3f)};B(q.18.1C)q(1g).aM("8K",u(){D 2A=q.P.2A;V(D H 25 2A){D 8N=2A[H],i=8N.I;B(i&&H!=\'8K\')do q.P.41(8N[i-1],H);2I(--i)}});q.fn.1j({1B:u(1p,1h){D 2z=l.1z(":2z");1p?2z.31({1i:"1B",2e:"1B",1N:"1B"},1p,1h):2z.16(u(){l.1F.1K=l.56?l.56:"";B(q.K(l,"1K")=="2y")l.1F.1K="44"});C l},1u:u(1p,1h){D 3q=l.1z(":3q");1p?3q.31({1i:"1u",2e:"1u",1N:"1u"},1p,1h):3q.16(u(){l.56=l.56||q.K(l,"1K");B(l.56=="2y")l.56="44";l.1F.1K="2y"});C l},aN:q.fn.3d,3d:u(fn,8P){D 1E=11;C q.2O(fn)&&q.2O(8P)?l.aN(fn,8P):l.16(u(){q(l)[q(l).34(":2z")?"1B":"1u"].1A(q(l),1E)})},aU:u(1p,1h){C l.1z(":2z").31({1i:"1B"},1p,1h).3p()},aS:u(1p,1h){C l.1z(":3q").31({1i:"1u"},1p,1h).3p()},dR:u(1p,1h){C l.16(u(){D aO=q(l).34(":2z")?"1B":"1u";q(l).31({1i:aO},1p,1h)})},aX:u(1p,1h){C l.1z(":2z").31({1N:"1B"},1p,1h).3p()},aV:u(1p,1h){C l.1z(":3q").31({1N:"1u"},1p,1h).3p()},dT:u(1p,3N,1h){C l.31({1N:3N},1p,1h)},31:u(12,1p,3a,1h){C l.33(u(){l.4T=q.1j({},12);D 2J=q.1p(1p,3a,1h);V(D p 25 12){D e=1S q.5V(l,2J,p);B(12[p].23==5L)e.5u(e.1s(),12[p]);L e[12[p]](12)}})},33:u(H,fn){B(!fn){fn=H;H="5V"}C l.16(u(){B(!l.33)l.33={};B(!l.33[H])l.33[H]=[];l.33[H].1y(fn);B(l.33[H].I==1)fn.1A(l)})}});q.1j({1p:u(1p,3a,fn){D 2J=1p&&1p.23==dU?1p:{3t:fn||!fn&&3a||q.2O(1p)&&1p,3U:1p,3a:fn&&3a||3a&&3a.23!=6Y&&3a||"aR"};2J.3U=(2J.3U&&2J.3U.23==5L?2J.3U:{dV:dX,dZ:bE}[2J.3U])||e1;2J.37=2J.3t;2J.3t=u(){q.aT(l,"5V");B(q.2O(2J.37))2J.37.1A(l)};C 2J},3a:{e2:u(p,n,4w,71){C 4w+71*p},aR:u(p,n,4w,71){C((-4g.e3(p*4g.e4)/2)+0.5)*71+4w}},33:{},aT:u(J,H){H=H||"5V";B(J.33&&J.33[H]){J.33[H].7M();D f=J.33[H][0];B(f)f.1A(J)}},5a:[],5V:u(J,W,12){D z=l;D y=J.1F;B(12=="1i"||12=="2e"){D 75=q.K(J,"1K");D aZ=y.4M;y.4M="2z"}z.a=u(){B(W.74)W.74.1A(J,[z.4X]);B(12=="1N")q.1q(y,"1N",z.4X);L{y[12]=1b(z.4X)+"2o";y.1K="44"}};z.7C=u(){C 73(q.K(J,12))};z.1s=u(){D r=73(q.5W(J,12));C r&&r>-e6?r:z.7C()};z.5u=u(8S,3N){z.8T=(1S 5m()).7x();z.4X=8S;z.a();q.5a.1y(u(){C z.74(8S,3N)});B(q.5a.I==1){D ao=6l(u(){q.5a=q.4V(q.5a,u(fn){C fn()});B(!q.5a.I)91(ao)},13)}};z.1B=u(){B(!J.3M)J.3M={};J.3M[12]=q.1q(J.1F,12);W.1B=Y;z.5u(0,l.1s());B(12!="1N")y[12]="4R"};z.1u=u(){B(!J.3M)J.3M={};J.3M[12]=q.1q(J.1F,12);W.1u=Y;z.5u(l.1s(),0)};z.3d=u(){B(!J.3M)J.3M={};J.3M[12]=q.1q(J.1F,12);B(75=="2y"){W.1B=Y;B(12!="1N")y[12]="4R";z.5u(0,l.1s())}L{W.1u=Y;z.5u(l.1s(),0)}};z.74=u(4w,8U){D t=(1S 5m()).7x();B(t>W.3U+z.8T){z.4X=8U;z.a();B(J.4T)J.4T[12]=Y;D 3P=Y;V(D i 25 J.4T)B(J.4T[i]!==Y)3P=1a;B(3P){B(75){y.4M=aZ;y.1K=75;B(q.K(J,"1K")=="2y")y.1K="44"}B(W.1u)y.1K="2y";B(W.1u||W.1B)V(D p 25 J.4T)q.1q(y,p,J.3M[p])}B(3P&&q.2O(W.3t))W.3t.1A(J);C 1a}L{D n=t-l.8T;D p=n/W.3U;z.4X=q.3a[W.3a](p,n,4w,(8U-4w),W.3U);z.a()}C Y}}});q.fn.1j({e9:u(1f,3y,1h){l.48(1f,3y,1h,1)},48:u(1f,3y,1h,3L){B(q.2O(1f))C l.2L("48",1f);1h=1h||u(){};D H="8W";B(3y)B(q.2O(3y)){1h=3y;3y=14}L{3y=q.O(3y);H="b8"}D 3v=l;q.7c({1f:1f,H:H,S:3y,3L:3L,3t:u(5b,1V){B(1V=="5e"||!3L&&1V=="bw")3v.1q("3Z",5b.7t).99().16(1h,[5b.7t,1V,5b]);L 1h.1A(3v,[5b.7t,1V,5b])}});C l},ea:u(){C q.O(l)},99:u(){C l.3w("3Y").16(u(){B(l.3s)q.b6(l.3s);L q.9a(l.1L||l.eb||l.3Z||"")}).3p()}});q.16("bf,bA,bz,bR,c2,bu".4x(","),u(i,o){q.fn[o]=u(f){C l.2L(o,f)}});q.1j({2M:u(1f,S,1h,H,3L){B(q.2O(S)){1h=S;S=14}C q.7c({H:"8W",1f:1f,S:S,5e:1h,93:H,3L:3L})},ec:u(1f,S,1h,H){C q.2M(1f,S,1h,H,1)},b6:u(1f,1h){C q.2M(1f,14,1h,"3Y")},ed:u(1f,S,1h){C q.2M(1f,S,1h,"bK")},ee:u(1f,S,1h,H){B(q.2O(S)){1h=S;S={}}C q.7c({H:"b8",1f:1f,S:S,5e:1h,93:H})},ef:u(32){q.8d.32=32},eg:u(G){q.1j(q.8d,G)},8d:{2A:Y,H:"8W",32:0,bk:"eh/x-ei-1T-ej",bd:Y,7l:Y,1X:14,S:14},7r:{},7c:u(s){s=q.1j({},q.8d,s);B(s.S){B(s.bd&&R s.S!="1R")s.S=q.O(s.S);B(s.H.2q()=="2M"){s.1f+=((s.1f.1O("?")>-1)?"&":"?")+s.S;s.S=14}}B(s.2A&&!q.9c++)q.P.2j("bf");D 94=1a;D 1n=1g.bg?1S bg("ac.ek"):1S 7R();1n.em(s.H,s.1f,s.7l);B(s.S)1n.7g("en-eo",s.bk);B(s.3L)1n.7g("ep-96-er",q.7r[s.1f]||"es, et eu ev 8Z:8Z:8Z ew");1n.7g("X-ex-ey","7R");B(1n.eA)1n.7g("eB","eC");B(s.bs)s.bs(1n);B(s.2A)q.P.2j("bu",[1n,s]);D 5F=u(92){B(1n&&(1n.58==4||92=="32")){94=Y;B(7j){91(7j);7j=14}D 1V;3A{1V=q.bD(1n)&&92!="32"?s.3L&&q.bF(1n,s.1f)?"bw":"5e":"1m";B(1V!="1m"){D 7E;3A{7E=1n.97("bG-96")}3z(e){}B(s.3L&&7E)q.7r[s.1f]=7E;D S=q.bJ(1n,s.93);B(s.5e)s.5e.3h(s.1X||1g,S,1V);B(s.2A)q.P.2j("c2",[1n,s])}L q.7m(s,1n,1V)}3z(e){1V="1m";q.7m(s,1n,1V,e)}B(s.2A)q.P.2j("bz",[1n,s]);B(s.2A&&!--q.9c)q.P.2j("bA");B(s.3t)s.3t(1n,1V);B(s.7l)1n=14}};D 7j=6l(5F,13);B(s.32>0)3g(u(){B(1n){1n.eD();B(!94)5F("32")}},s.32);3A{1n.eF(s.S)}3z(e){q.7m(s,1n,14,e)}B(!s.7l)5F();C 1n},7m:u(s,1n,1V,e){B(s.1m)s.1m(1n,1V,e);B(s.2A)q.P.2j("bR",[1n,s,e])},9c:0,bD:u(r){3A{C!r.1V&&5w.eG=="95:"||(r.1V>=bE&&r.1V<eH)||r.1V==bH||q.18.3b&&r.1V==1c}3z(e){}C 1a},bF:u(1n,1f){3A{D bI=1n.97("bG-96");C 1n.1V==bH||bI==q.7r[1f]||q.18.3b&&1n.1V==1c}3z(e){}C 1a},bJ:u(r,H){D ct=r.97("eJ-H");D S=!H&&ct&&ct.1O("1n")>=0;S=H=="1n"||S?r.eK:r.7t;B(H=="3Y")q.9a(S);B(H=="bK")7P("S = "+S);B(H=="2f")q("<2a>").2f(S).99();C S},O:u(a){D s=[];B(a.23==3k||a.7u)q.16(a,u(){s.1y(4H(l.1e)+"="+4H(l.F))});L V(D j 25 a)B(a[j]&&a[j].23==3k)q.16(a[j],u(){s.1y(4H(j)+"="+4H(l))});L s.1y(4H(j)+"="+4H(a[j]));C s.9d("&")},9a:u(S){B(1g.bL)1g.bL(S);L B(q.18.3b)1g.3g(S,0);L 7P.3h(1g,S)}})}q.fn.eM=u(f){C l.16(u(){D p=l.1w;B(q.K(p,"28")==\'59\')p.1F.28=\'5l\';D s=l.1F;s.28=\'40\';B(!f||f=="eO"){B(((1b(q.K(p,"2e"))-1b(q.K(l,"2e")))/2)>0)s.2s=((1b(q.K(p,"2e"))-1b(q.K(l,"2e")))/2)+"2o";L s.2s="0"}B(!f||f=="eP"){B(((1b(q.K(p,"1i"))-1b(q.K(l,"1i")))/2)>0){s.2v=((1b(q.K(p,"1i"))-1b(q.K(l,"1i")))/2)+"2o"}L{B(p.1I.2q()=="1r"){B(1g.5U)D 4c=1g.5U;L B(U.1r&&U.1r.2X)D 4c=U.1r.2X;s.2v=((4c-1b(q.K(l,"1i")))/2)+"2o"}L{s.2v="0"}}}})};q.4j=u(1e,F,W){B(R F!=\'1c\'){W=W||{};B(F===14){F=\'\';W.2x=-1}D 2x=\'\';B(W.2x){D 2n;B(R W.2x==\'1R\'&&W.2x.2K(/^[+-]?[0-9]+[bN]$/)!==14){D 2K=W.2x.2K(/^([+-]?[0-9]+)([bN])$/);W.2x=1b(2K[0],10)*(({"y":(60*60*24*eR),"w":(60*60*24*7),"d":(60*60*24),"h":(60*60),"m":(60),"s":(1)}[2K[1]])||0);2n=1S 5m();2n.bQ(2n.7x()+W.2x*4l)}L B(R W.2x==\'3i\'){2n=1S 5m();2n.bQ(2n.7x()+W.2x*24*60*60*4l)}L B(R W.2x.bU!=\'1c\')2n=W.2x;L 9e"eT \\"2x\\" 21";2x=\'; 2x=\'+2n.bU()}D 5X=W.5X?\'; 5X=\'+W.5X:\'\';D 5Y=W.5Y?\'; 5Y=\'+W.5Y:\'\';D 7z=W.7z?\'; 7z\':\'\';U.4j=[1e,\'=\',4H(F),2x,5X,5Y,7z].9d(\'\')}L{D 9i=14;B(U.4j&&U.4j!=\'\'){D 9f=U.4j.4x(\';\');V(D i=0;i<9f.I;i++){D 4j=q.38(9f[i]);B(4j.9g(0,1e.I+1)==(1e+\'=\')){9i=eU(4j.9g(1e.I+1));2Z}}}C 9i}};q.fn.bV=q.fn.1i;q.fn.bZ=q.fn.2e;q.fn.1i=u(){B(l[0]==1g)C 3v.5U||q.5c&&U.3c.4c||U.1r.4c;B(l[0]==U)C 4g.7C(U.1r.eX,U.1r.2X);C l.bV(11[0])};q.fn.2e=u(){B(l[0]==1g)C 3v.8I||q.5c&&U.3c.5Q||U.1r.5Q;B(l[0]==U)C 4g.7C(U.1r.eY,U.1r.42);C l.bZ(11[0])};q.fn.5U=u(){C l[0]==1g||l[0]==U?l.1i():l.K(\'1K\')!=\'2y\'?l[0].2X-(1b(l.K("4a"))||0)-(1b(l.K("c1"))||0):l.1i()+(1b(l.K("9o"))||0)+(1b(l.K("c4"))||0)};q.fn.8I=u(){C l[0]==1g||l[0]==U?l.2e():l.K(\'1K\')!=\'2y\'?l[0].42-(1b(l.K("4n"))||0)-(1b(l.K("c5"))||0):l.1i()+(1b(l.K("9m"))||0)+(1b(l.K("8Y"))||0)};q.fn.eZ=u(){C l[0]==1g||l[0]==U?l.1i():l.K(\'1K\')!=\'2y\'?l[0].2X:l.1i()+(1b(l.K("4a"))||0)+(1b(l.K("c1"))||0)+(1b(l.K("9o"))||0)+(1b(l.K("c4"))||0)};q.fn.f2=u(){C l[0]==1g||l[0]==U?l.2e():l.K(\'1K\')!=\'2y\'?l[0].42:l.1i()+(1b(l.K("4n"))||0)+(1b(l.K("c5"))||0)+(1b(l.K("9m"))||0)+(1b(l.K("8Y"))||0)};q.fn.35=u(){B(l[0]==1g||l[0]==U)C 3v.8D||q.5c&&U.3c.35||U.1r.35;C l[0].35};q.fn.2U=u(){B(l[0]==1g||l[0]==U)C 3v.8G||q.5c&&U.3c.2U||U.1r.2U;C l[0].2U};q.fn.8h=u(W,9p){D x=0,y=0,J=l[0],19=l[0],6R=1a,9l=1a,69,6d=0,6c=0,W=q.1j({7a:Y,5J:Y,61:1a,6a:Y},W||{});do{x+=19.8w||0;y+=19.8y||0;B(q.18.4f||q.18.1C){D bt=1b(q.K(19,\'4a\'))||0;D bl=1b(q.K(19,\'4n\'))||0;x+=bl;y+=bt;B(q.18.4f&&19!=J&&q.K(19,\'4M\')!=\'3q\'){x+=bl;y+=bt}B(q.K(19,\'28\')==\'40\')6R=Y;B(q.K(19,\'28\')==\'5l\')9l=Y}B(W.6a){69=19.c7;do{6d+=19.35||0;6c+=19.2U||0;19=19.1w;B(q.18.4f&&19!=J&&19!=69&&q.K(19,\'4M\')!=\'3q\'){x+=1b(q.K(19,\'4n\'))||0;y+=1b(q.K(19,\'4a\'))||0}}2I(69&&19!=69)}L 19=19.c7;B(19&&(19.7H.2q()==\'1r\'||19.7H.2q()==\'2f\')){B((q.18.3b||(q.18.1C&&q.5c))&&q.K(J,\'28\')!=\'40\'){x+=1b(q.K(19,\'c8\'))||0;y+=1b(q.K(19,\'c9\'))||0}B((q.18.4f&&!6R)||(q.18.1C&&q.K(J,\'28\')==\'59\'&&(!9l||!6R))){x+=1b(q.K(19,\'4n\'))||0;y+=1b(q.K(19,\'4a\'))||0}2Z}}2I(19);B(!W.7a){x-=1b(q.K(J,\'c8\'))||0;y-=1b(q.K(J,\'c9\'))||0}B(W.5J&&(q.18.3b||q.18.3D)){x+=1b(q.K(J,\'4n\'))||0;y+=1b(q.K(J,\'4a\'))||0}L B(!W.5J&&!(q.18.3b||q.18.3D)){x-=1b(q.K(J,\'4n\'))||0;y-=1b(q.K(J,\'4a\'))||0}B(W.61){x+=1b(q.K(J,\'9m\'))||0;y+=1b(q.K(J,\'9o\'))||0}B(W.6a&&q.18.3D&&q.K(J,\'1K\')==\'f5\'){6d-=J.35||0;6c-=J.2U||0}D 4K=W.6a?{2v:y-6c,2s:x-6d,2U:6c,35:6d}:{2v:y,2s:x};B(9p){q.1j(9p,4K);C l}L{C 4K}};(u($){$.fn.f6=q.fn.9r=u(s){B(!($.18.1C&&R 7R==\'u\'))C l;s=$.1j({2v:\'3T\',2s:\'3T\',2e:\'3T\',1i:\'3T\',1N:Y,3s:\'ce:1a;\'},s||{});D 12=u(n){C n&&n.23==5L?n+\'2o\':n},2f=\'<cd 4F="9r"f7="0"f8="-1"3s="\'+s.3s+\'"\'+\'1F="1K:44;28:40;z-2V:-1;\'+(s.1N!==1a?\'1z:f9(fa=\\\'0\\\');\':\'\')+\'2v:\'+(s.2v==\'3T\'?\'7N(((1b(l.1w.6h.4a)||0)*-1)+\\\'2o\\\')\':12(s.2v))+\';\'+\'2s:\'+(s.2s==\'3T\'?\'7N(((1b(l.1w.6h.4n)||0)*-1)+\\\'2o\\\')\':12(s.2s))+\';\'+\'2e:\'+(s.2e==\'3T\'?\'7N(l.1w.42+\\\'2o\\\')\':12(s.2e))+\';\'+\'1i:\'+(s.1i==\'3T\'?\'7N(l.1w.2X+\\\'2o\\\')\':12(s.1i))+\';\'+\'"/>\';C l.16(u(){B(!$(\'cd.9r\',l)[0])l.5r(U.7v(2f),l.29)})}})(q);(u($){$.1j({1Z:{cg:0}});$.fn.1Z=u(2N,G){B(R 2N==\'3x\')G=2N;G=$.1j({2N:(2N&&R 2N==\'3i\'&&2N>0)?--2N:0,3r:14,3G:$.5H?Y:1a,4D:1a,cf:\'4D-43-\',9G:14,9F:14,9J:14,9K:14,9E:\'aF\',cp:14,cq:14,ci:1a,66:14,6r:14,6s:14,7S:\'1Z-2g\',4s:\'1Z-3H\',6o:\'1Z-3r\',6k:\'1Z-1W\',8a:\'1Z-1u\',9V:\'1Z-fd\',ch:\'2a\'},G||{});$.18.6X=$.18.6X||$.18.1C&&R 7R==\'u\';u 9t(){9X(0,0)}C l.16(u(){D 1W=l;D 2g=$(\'6P.\'+G.7S,1W);2g=2g.4u()&&2g||$(\'>6P:eq(0)\',1W);D 1Z=$(\'a\',2g);B(G.4D){D 9R={};1Z.16(u(){$(l).2f(\'<46>\'+$(l).2f()+\'</46>\');D T=G.cf+(++$.1Z.cg);D 27=\'#\'+T;9R[27]=l.5y;l.5y=27;$(\'<2a T="\'+T+\'" 4F="\'+G.6k+\'"></2a>\').6n(1W)})}D 2B=$(\'2a.\'+G.6k,1W);2B=2B.4u()&&2B||$(\'>\'+G.ch,1W);2g.34(\'.\'+G.7S)||2g.2E(G.7S);2B.16(u(){D $$=$(l);$$.34(\'.\'+G.6k)||$$.2E(G.6k)});D 9s=$(\'1G\',2g).2V($(\'1G.\'+G.4s,2g)[0]);B(9s>=0){G.2N=9s}B(5w.27){1Z.16(u(i){B(l.27==5w.27){G.2N=i;B(($.18.1C||$.18.3D)&&!G.4D){D 1U=$(5w.27);D 89=1U.1q(\'T\');1U.1q(\'T\',\'\');3g(u(){1U.1q(\'T\',89)},ff)}9t();C 1a}})}B($.18.1C){9t()}2B.1z(\':eq(\'+G.2N+\')\').1B().3p().2l(\':eq(\'+G.2N+\')\').2E(G.8a);B(!G.4D){$(\'1G\',2g).3u(G.4s).eq(G.2N).2E(G.4s)}B(G.ci){D 9B=u(2S){D 9T=$.4C(2B.2M(),u(el){D h,9v=$(el);B(2S){B($.18.6X){el.1F.fg(\'cl\');el.1F.1i=\'\';el.7Y=14}h=9v.K({\'4A-1i\':\'\'}).1i()}L{h=9v.1i()}C h}).fh(u(a,b){C b-a});B($.18.6X){2B.16(u(){l.7Y=9T[0]+\'2o\';l.1F.fi(\'cl\',\'l.1F.1i = l.7Y ? l.7Y : "4R"\')})}L{2B.K({\'4A-1i\':9T[0]+\'2o\'})}};9B();D 81=1W.42;D 9C=1W.2X;D 9A=$(\'#1Z-cm-9y-4u\').2M(0)||$(\'<46 T="1Z-cm-9y-4u">M</46>\').K({1K:\'44\',28:\'40\',8b:\'2z\'}).6n(U.1r).2M(0);D 84=9A.2X;6l(u(){D 82=1W.42;D 9D=1W.2X;D 85=9A.2X;B(9D>9C||82!=81||85!=84){9B((82>81||85<84));81=82;9C=9D;84=85}},50)}D 5A={},5t={},9P=G.cp||G.9E,9O=G.cq||G.9E;B(G.9F||G.9G){B(G.9F){5A[\'1i\']=\'1B\';5t[\'1i\']=\'1u\'}B(G.9G){5A[\'1N\']=\'1B\';5t[\'1N\']=\'1u\'}}L{B(G.9J){5A=G.9J}L{5A[\'4A-2e\']=0;9P=G.3G?50:1}B(G.9K){5t=G.9K}L{5t[\'4A-2e\']=0;9O=G.3G?50:1}}D 66=G.66,6r=G.6r,6s=G.6s;1Z.2L(\'a1\',u(){D 1G=$(l).3B(\'1G:eq(0)\');B(1W.8c||1G.34(\'.\'+G.4s)||1G.34(\'.\'+G.6o)){C 1a}D 27=l.27;B($.18.1C){$(l).2j(\'2Y\');B(G.3G){$.5H.4o(27);5w.27=27.1P(\'#\',\'\')}}L B($.18.3b){D cs=$(\'<1T cr="\'+27+\'"><2a><3R H="3W" F="h" /></2a></1T>\').2M(0);cs.3W();$(l).2j(\'2Y\');B(G.3G){$.5H.4o(27)}}L{B(G.3G){5w.27=27.1P(\'#\',\'\')}L{$(l).2j(\'2Y\')}}});1Z.2L(\'8g\',u(){D 1G=$(l).3B(\'1G:eq(0)\');B($.18.3b){1G.31({1N:0},1,u(){1G.K({1N:\'\'})})}1G.2E(G.6o)});B(G.3r&&G.3r.I){V(D i=0,k=G.3r.I;i<k;i++){1Z.eq(--G.3r[i]).2j(\'8g\').3p()}};1Z.2L(\'a2\',u(){D 1G=$(l).3B(\'1G:eq(0)\');1G.3u(G.6o);B($.18.3b){1G.31({1N:1},1,u(){1G.K({1N:\'\'})})}});1Z.2L(\'2Y\',u(e){D 6u=e.9L;D 4O=l,1G=$(l).3B(\'1G:eq(0)\'),1U=$(l.27),2p=2B.1z(\':3q\');B((R 66==\'u\'&&66(l,1U[0],2p[0])==1a&&6u)||1W.8c||1G.34(\'.\'+G.4s)||1G.34(\'.\'+G.6o)){l.8f();C 1a}1W[\'8c\']=Y;B(1U.4u()){B($.18.1C&&G.3G){D 89=l.27.1P(\'#\',\'\');1U.1q(\'T\',\'\');3g(u(){1U.1q(\'T\',89)},0)}u 9U(){B(G.3G&&6u){$.5H.4o(4O.27)}2p.31(5t,9O,u(){$(4O).3B(\'1G:eq(0)\').2E(G.4s).cv().3u(G.4s);B(R 6r==\'u\'){6r(4O,1U[0],2p[0])}2p.2E(G.8a).K({1K:\'\',4M:\'\',1i:\'\',1N:\'\'});1U.3u(G.8a).31(5A,9P,u(){1U.K({4M:\'\',1i:\'\',1N:\'\'});B($.18.1C){2p[0].1F.1z=\'\';1U[0].1F.1z=\'\'}B(R 6s==\'u\'){6s(4O,1U[0],2p[0])}1W.8c=14})})}B(!G.4D){9U()}L{D $$=$(l),46=$(\'46\',l)[0],1L=46.3Z;$$.2E(G.9V);46.3Z=\'fj&#fm;\';3g(u(){$(4O.27).48(9R[4O.27],u(){9U();46.3Z=1L;$$.3u(G.9V)})},0)}}L{7b(\'fo 34 8l fp 1W.\')}D 9Y=1g.8D||U.3c&&U.3c.35||U.1r.35||0;D a0=1g.8G||U.3c&&U.3c.2U||U.1r.2U||0;3g(u(){1g.9X(9Y,a0)},0);l.8f();C G.3G&&!!6u});B(G.4D){1Z.eq(G.2N).2j(\'2Y\').3p()}B(G.3G){$.5H.cE(u(){1Z.eq(G.2N).2j(\'2Y\').3p()})}})};D 6z=[\'a1\',\'8g\',\'a2\'];V(D i=0;i<6z.I;i++){$.fn[6z[i]]=(u(a5){C u(43){C l.16(u(){D 2g=$(\'6P.1Z-2g\',l);2g=2g.4u()&&2g||$(\'>6P:eq(0)\',l);D a;B(!43||R 43==\'3i\'){a=$(\'1G a\',2g).eq((43&&43>0&&43-1||0))}L B(R 43==\'1R\'){a=$(\'1G a[@5y$="#\'+43+\'"]\',2g)}a.2j(a5)})}})(6z[i])}})(q);q.1j(q.fn,{aQ:u(W){D N=1S q.N(W,l[0]);N.1v=l.3w(":3R:2l(:3W):2l(:2S)").4L(u(){N.4b=l});B(N.G.78){l.3W(u(P){B(N.G.3n)P.3X();C N.1T()})}B(N.G.P){N.1v.2L(N.G.P,u(){N.E(l)})}C N},1y:u(t){C l.72(q.3V(l.2M(),t))},5x:u(T){C l.1z("[@V=\'"+T+"\']")}});q.1j(q.2r[":"],{aW:"!q.38(a.F)",aY:"!!q.38(a.F)"});q.N=u(W,1T){l.G=q.1j({},q.N.49,W);l.5o=1T;l.4p=l.G.4U;l.7q=l.4p.I&&l.4p||q(1T);l.2B=l.G.76.2m(l.G.4U);l.2S()};q.1j(q.N,{49:{3E:{},3e:"1m",7L:Y,76:q([]),4U:q([]),78:Y},b0:u(G){q.1j(q.N.49,G)},3E:{1l:"b3 b4 34 1l.",6x:"1M 1J a F 8l b7 b9 {0} 5G.",6Q:"1M 1J a F ba at bc {0} 5G.",6y:"1M 1J a F 7i {0} 7k {1} 5G bh.",4S:"1M 1J a 2R 4S bi.",1f:"1M 1J a 2R bj.",2n:"1M 1J a 2R 2n.",6G:"1M 1J a 2R 2n (bm).",6E:"7e 7f 7Q 57 bn¼bo bp 57.",3i:"1M 1J a 2R 3i.",6I:"7e 7f 7Q bq bv 57.",5E:"1M 1J 9j 5E",6J:"1M 1J 7y bx F by.",6D:"1M 1J a F 7i {0} 7k {1}.",6B:"1M 1J a F bB 7o 4v 7p 3N {0}.",6A:"1M 1J a F bC 7o 4v 7p 3N {0}."},5g:{1T:u(){l.5h();V(D i=0,E;E=l.1v[i++];){l.4h(E)}C l.2R()},E:u(E){l.7s(E);l.4h(E);l.3F()},3F:u(2T){B(2T)q.1j(l.2C,2T);l.G.3F?l.G.3F(l.2C,l):l.7K()},5f:u(){B(q.fn.5f)q(l.5o).5f();l.5h();l.51();l.1v.3u(l.G.3e)},3I:u(7n){C q(7n)[0]},2T:u(){C q("7Z."+l.G.3e,l.7q)},2S:u(E){l.2C={};l.1U=$([]);l.2p=$([])},5h:u(){l.2S();l.2p=l.2T().1y(l.2B);l.1U.1y(l.2B)},7s:u(E){l.2S();l.2p=l.2T().5x(l.4k(l.3I(E)))},4h:u(E){E=l.3I(E);q(E).3u(l.G.3e);D 2c=l.2c(E);V(D i=0,1Q;1Q=2c[i++];){3A{D 22=q.N.1k[1Q.2d](q.38(E.F),E,1Q.5v);B(22===-1)2Z;B(!22){q(E).2E(l.G.3e);l.7A(1Q,E);2Z}}3z(e){l.G.3n&&1g.30&&30.1m("bM bO bS bT E "+E.T+", 4h 7y \'"+1Q.2d+"\' 2d");9e e}}},26:u(T,1Q){D m=l.G.3E[T];C m&&(m.23==2D?m:m[1Q.2d])},7A:u(1Q,E){D T=l.4k(E),O=1Q.5v;l.2C[T]=(E.2H||l.26(T,1Q)||q.N.3E[1Q.2d]||"<7F>bW: bY 26 c0 V "+T+"</7F>").1P("{0}",(O.23==3k?O[0]:O)||"").1P("{1}",O[1]||"")},2R:u(){B(l.7J()){l.3F();C 1a}L{l.51();B(l.G.7I){l.G.7I(l.5o);C 1a}C Y}},7J:u(){D 4J=0;q.16(l.2C,u(){4J++});C 4J},51:u(){l.3d("7V")},3d:u(4Y){D 3v=l;u 4m(){C 3v["3N"+4Y]}B(l.G.4r){4m().1y(4m().3B(l.G.4r))}4m()[4Y.2q()]();C l},7K:u(){D 2w=Y;V(D 47 25 l.2C){B(2w&&l.G.7L){B(l.4b&&l.2C[l.4b.T])l.4b.4L();L{3A{D E=q("#"+47);B(E.I)E[0].4L()}3z(e){l.G.3n&&1g.30&&30.1m(e)}}2w=1a}l.7X(47,l.2C[47])}l.2p=l.2p.2l(l.1U);l.3d("7V").3d("cj")},7X:u(T,26){D 1m=l.2T().5x(T);B(1m.I){B(1m.1q("80")){1m.2f(26)}}L{1m=q("<7Z>").1q({"V":T,80:Y}).2E(l.G.3e).2f(26);B(l.G.4r){1m=1m.1u().1B().4q("<"+l.G.4r+">").19()}B(!l.4p.3l(1m).I)l.G.86?l.G.86(1m,q("#"+T)):1m.9H("#"+T)}l.1U.1y(1m)},2c:u(E){B(!l.S(E))C[];D 2c=[];q.16(l.S(E),u(2P,F){2c[2c.I]={2d:2P,5v:F}});C 2c},S:u(E){C l.G.2c?l.G.2c[l.4k(E)]:l.G.88?q(E).S()[l.G.88]:q(E).S()},4k:u(E){D T=(/3S|4d/i.1o(E.H))?E.1e:E.T;B(!T){D 5z=E.1T.T,5B=/[^a-cu-2u-9\\-6q]/g;T=E.T=(5z?5z.1P(5B,""):"")+E.1e.1P(5B,"")}C T}},3C:u(F,E){4P(E.1I.2q()){39\'3Q\':C q("21:3H",E).I;39\'3R\':B(/3S|4d/i.1o(E.H))C q(E.1T||U).3w(\'[@1e="\'+E.1e+\'"]:4N\').I}C F.I},8e:u(O,E){C l.5C[R O]?l.5C[R O](O,E):Y},5C:{"5M":u(O,E){C O},"1R":u(O,E){C!!q(O,E.1T).I},"u":u(O,E){C O(E)}},1k:{1l:u(F,E,O){B(!q.N.8e(O,E))C-1;4P(E.1I.2q()){39\'3Q\':D W=q("21:3H",E);C W.I>0&&(E.H=="3Q-9Z"||W[0].F.I>0);39\'3R\':4P(E.H.2q()){39\'4d\':39\'3S\':C q.N.3C(F,E)>0}a3:C F.I>0}},a4:u(F,E,O){C!q.N.1k.1l(F,E)||O.1o(F)},6Q:u(F,E,O){D I=q.N.3C(F,E);C!q.N.1k.1l(F,E)||I>=O},6x:u(F,E,O){D I=q.N.3C(F,E);C!q.N.1k.1l(F,E)||I<=O},6y:u(F,E,O){D I=q.N.3C(F,E);C!q.N.1k.1l(F,E)||(I>=O[0]&&I<=O[1])},6A:u(F,E,O){C!q.N.1k.1l(F,E)||F>=O},6B:u(F,E,O){C!q.N.1k.1l(F,E)||F<=O},6D:u(F,E,O){C!q.N.1k.1l(F,E)||(F>=O[0]&&F<=O[1])},4S:u(F,E){C!q.N.1k.1l(F,E)||/^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$/i.1o(F)},1f:u(F,E){C!q.N.1k.1l(F,E)||/^(a8?|a9):\\/\\/[A-2u-9](\\.?[A-2u-5n„1xœ1x–][A-2u-5k\\-1x„1xœ1x–]*)*(\\/([A-2u-5n„1xœ1x–][A-2u-5k\\-\\.1x„1xœ1x–]*)?)*(\\?([A-2u-5n„1xœ1x–][A-2u-5k\\-\\.%\\+=&1x„1xœ1x–]*)?)?$/i.1o(F)},2n:u(F,E){C!q.N.1k.1l(F,E)||!/aK|8X/.1o(1S 5m(F))},6G:u(F,E){C!q.N.1k.1l(F,E)||/^\\d{4}[/-]\\d{1,2}[/-]\\d{1,2}$/.1o(F)},6E:u(F,E){C!q.N.1k.1l(F,E)||/^\\d\\d?\\.\\d\\d?\\.\\d\\d\\d?\\d?$/.1o(F)},3i:u(F,E){C!q.N.1k.1l(F,E)||/^-?[,0-9]+(\\.\\d+)?$/.1o(F)},6I:u(F,E){C!q.N.1k.1l(F,E)||/^-?[\\.0-9]+(,\\d+)?$/.1o(F)},5E:u(F,E){C!q.N.1k.1l(F,E)||/^\\d+$/.1o(F)},6J:u(F,E,O){C F==q(""+O).1Y()}},ax:u(1e,2d,26){q.N.1k[1e]=2d;q.N.3E[1e]=26}});(u(){u 2m(1e,2d){B(!3k.5g[1e]){3k.5g[1e]=2d}};2m("cG",u(1D,1X){1X=1X||1g;V(D i=0;i<l.I;i++)1D.3h(1X,l[i],i,l)});2m("cH",u(1D,1X){1X=1X||1g;V(D i=0;i<l.I;i++)B(!1D.3h(1X,l[i],i,l))C 1a;C Y});2m("cI",u(1D,1X){1X=1X||1g;V(D i=0;i<l.I;i++)B(1D.3h(1X,l[i],i,l))C Y;C 1a});2m("4C",u(1D,1X){1X=1X||1g;D r=[];V(D i=0;i<l.I;i++)r[r.I]=1D.3h(1X,l[i],i,l);C r});2m("1z",u(1D,1X){1X=1X||1g;D r=[];V(D i=0;i<l.I;i++)B(1D.3h(1X,l[i],i,l))r[r.I]=l[i];C r});2m("1O",u(a6,8h){V(D i=8h||0;i<l.I;i++)B(l[i]===a6)C i;C-1});2m("8j",u(){C l.1z(u(E,2V,9x){C 9x.1O(E)>=2V})})})();(u($){D 1t={},2b,2H,5T,8R=$.18.1C&&/cL\\s(5\\.5|6\\.)/.1o(c6.ca);$.fn.1j({6U:u(G){G=$.1j({},$.6U.49,G);ag();l.1z(\'[@2H]\').16(u(){l.2F=G}).2L("54",aj).2L(G.P,6C);C l},6W:8R?u(){C l.16(u(){D 55=$(l).K(\'8q\');B(55.2K(/^1f\\(["\'](.*\\.cP)["\']\\)$/i)){55=4G.$1;$(l).K({\'8q\':\'2y\',\'1z\':"cR:cT.ac.cV(ad=Y, cW=cX, 3s=\'"+55+"\')"}).16(u(){D 28=$(l).K(\'28\');B(28!=\'40\'&&28!=\'5l\')$(l).K(\'28\',\'5l\')})}})}:u(){C l},aL:8R?u(){C l.16(u(){$(l).K({\'1z\':\'\',8q:\'\'})})}:u(){C l},ak:u(1e,F){D 22=l.1q(1e);l.1q(1e,F);C 22},av:u(){C l.16(u(){$(l)[$(l).2f()?"1B":"1u"]()})},1f:u(){C l.1q(\'5y\')||l.1q(\'3s\')}});u ag(){B(1t.19)C;1t.19=$(\'<2a T="d3"><8k></8k><p 4F="1r"></p><p 4F="1f"></p></2a>\').1u().K({28:\'40\',d4:"d6"}).6n(\'1r\');1t.2H=$(\'8k\',1t.19);1t.1r=$(\'p.1r\',1t.19);1t.1f=$(\'p.1f\',1t.19)}u 6C(P){B(l.2F.8O)5T=3g(1B,l.2F.8O);L 1B();B(l.2F.db)$(\'1r\').2L(\'8u\',4o);4o(P);B(l.2F.P!="2Y")$(l).2L(\'2Y\',1u);$(l).2L(\'6V\',1u)}u aj(){B(l==2b||!l.2H)C;2b=l;2H=$(l).ak(\'2H\',\'\');B(l.2F.am){1t.2H.1u();1t.1r.2f(l.2F.am.3h(l)).1B()}L B(l.2F.ck){D 9q=2H.4x(l.2F.ck);1t.2H.2f(9q.7M()).1B();1t.1r.6f();V(D i=0,8t;8t=9q[i];i++){B(i>0)1t.1r.3l("<br/>");1t.1r.3l(8t)}1t.1r.av()}L{1t.2H.2f(2H).1B();1t.1r.1u()}B(l.2F.aP&&$(l).1f())1t.1f.2f($(l).1f().1P(\'dm://\',\'\')).1B();L 1t.1f.1u();1t.19.2E(l.2F.8Q);B(l.2F.6W)1t.19.6W()}u 1B(){5T=14;1t.19.1B();4o()}u 4o(P){B(2b==14){$(\'1r\').5K(\'8u\',4o);C}D 2s=1t.19[0].8w;D 2v=1t.19[0].8y;B(P){2s=P.8v+15;2v=P.aw+15;1t.19.K({2s:2s+\'2o\',2v:2v+\'2o\'})}D v=aB(),h=1t.19[0];B(v.x+v.cx<h.8w+h.42){2s-=h.42+20;1t.19.K({2s:2s+\'2o\'})}B(v.y+v.cy<h.8y+h.2X){2v-=h.2X+20;1t.19.K({2v:2v+\'2o\'})}}u aB(){D e=U.3c||{},b=U.1r||{},w=1g;u 4A(){D v=dt;V(D i=0;i<11.I;i++){D n=11[i];B(n&&n<v)v=n}C v}C{x:w.8D||e.35||b.35||0,y:w.8G||e.2U||b.2U||0,cx:4A(e.5Q,b.5Q,w.8I),cy:4A(e.4c,b.4c,w.5U)}}u 1u(P){B(5T)co(5T);2b=14;1t.19.1u().3u(l.2F.8Q);B(P.H!="2Y"){$(l).1q(\'2H\',2H).5K(\'6V\',1u)}B(l.2F.P!="2Y")$(l).5K(\'2Y\',1u);B(l.2F.6W)1t.19.aL()}$.6U={};$.6U.49={8O:dP,P:"54",aP:Y,8Q:""}})(q);q.1j(q.fn,{aQ:u(W){D N=1S q.N(W,l[0]);N.1v=l.3w(":3R:2l(:3W):2l(:2S)").4L(u(){N.4b=l});B(N.G.78){l.3W(u(P){B(N.G.3n)P.3X();C N.1T()})}B(N.G.P){N.1v.2L(N.G.P,u(){N.E(l)})}C N},1y:u(t){C l.72(q.3V(l.2M(),t))},5x:u(T){C l.1z("[@V=\'"+T+"\']")}});q.1j(q.2r[":"],{aW:"!q.38(a.F)",aY:"!!q.38(a.F)"});q.N=u(W,1T){l.G=q.1j({},q.N.49,W);l.5o=1T;l.4p=l.G.4U;l.7q=l.4p.I&&l.4p||q(1T);l.2B=l.G.76.2m(l.G.4U);l.2S()};q.1j(q.N,{49:{3E:{},3e:"1m",7L:Y,76:q([]),4U:q([]),78:Y},b0:u(G){q.1j(q.N.49,G)},3E:{1l:"b3 b4 34 1l.",6x:"1M 1J a F 8l b7 b9 {0} 5G.",6Q:"1M 1J a F ba at bc {0} 5G.",6y:"1M 1J a F 7i {0} 7k {1} 5G bh.",4S:"1M 1J a 2R 4S bi.",1f:"1M 1J a 2R bj.",2n:"1M 1J a 2R 2n.",6G:"1M 1J a 2R 2n (bm).",6E:"7e 7f 7Q 57 bn¼bo bp 57.",3i:"1M 1J a 2R 3i.",6I:"7e 7f 7Q bq bv 57.",5E:"1M 1J 9j 5E",6J:"1M 1J 7y bx F by.",6D:"1M 1J a F 7i {0} 7k {1}.",6B:"1M 1J a F bB 7o 4v 7p 3N {0}.",6A:"1M 1J a F bC 7o 4v 7p 3N {0}."},5g:{1T:u(){l.5h();V(D i=0,E;E=l.1v[i++];){l.4h(E)}C l.2R()},E:u(E){l.7s(E);l.4h(E);l.3F()},3F:u(2T){B(2T)q.1j(l.2C,2T);l.G.3F?l.G.3F(l.2C,l):l.7K()},5f:u(){B(q.fn.5f)q(l.5o).5f();l.5h();l.51();l.1v.3u(l.G.3e)},3I:u(7n){C q(7n)[0]},2T:u(){C q("7Z."+l.G.3e,l.7q)},2S:u(E){l.2C={};l.1U=$([]);l.2p=$([])},5h:u(){l.2S();l.2p=l.2T().1y(l.2B);l.1U.1y(l.2B)},7s:u(E){l.2S();l.2p=l.2T().5x(l.4k(l.3I(E)))},4h:u(E){E=l.3I(E);q(E).3u(l.G.3e);D 2c=l.2c(E);V(D i=0,1Q;1Q=2c[i++];){3A{D 22=q.N.1k[1Q.2d](q.38(E.F),E,1Q.5v);B(22===-1)2Z;B(!22){q(E).2E(l.G.3e);l.7A(1Q,E);2Z}}3z(e){l.G.3n&&1g.30&&30.1m("bM bO bS bT E "+E.T+", 4h 7y \'"+1Q.2d+"\' 2d");9e e}}},26:u(T,1Q){D m=l.G.3E[T];C m&&(m.23==2D?m:m[1Q.2d])},7A:u(1Q,E){D T=l.4k(E),O=1Q.5v;l.2C[T]=(E.2H||l.26(T,1Q)||q.N.3E[1Q.2d]||"<7F>bW: bY 26 c0 V "+T+"</7F>").1P("{0}",(O.23==3k?O[0]:O)||"").1P("{1}",O[1]||"")},2R:u(){B(l.7J()){l.3F();C 1a}L{l.51();B(l.G.7I){l.G.7I(l.5o);C 1a}C Y}},7J:u(){D 4J=0;q.16(l.2C,u(){4J++});C 4J},51:u(){l.3d("7V")},3d:u(4Y){D 3v=l;u 4m(){C 3v["3N"+4Y]}B(l.G.4r){4m().1y(4m().3B(l.G.4r))}4m()[4Y.2q()]();C l},7K:u(){D 2w=Y;V(D 47 25 l.2C){B(2w&&l.G.7L){B(l.4b&&l.2C[l.4b.T])l.4b.4L();L{3A{D E=q("#"+47);B(E.I)E[0].4L()}3z(e){l.G.3n&&1g.30&&30.1m(e)}}2w=1a}l.7X(47,l.2C[47])}l.2p=l.2p.2l(l.1U);l.3d("7V").3d("cj")},7X:u(T,26){D 1m=l.2T().5x(T);B(1m.I){B(1m.1q("80")){1m.2f(26)}}L{1m=q("<7Z>").1q({"V":T,80:Y}).2E(l.G.3e).2f(26);B(l.G.4r){1m=1m.1u().1B().4q("<"+l.G.4r+">").19()}B(!l.4p.3l(1m).I)l.G.86?l.G.86(1m,q("#"+T)):1m.9H("#"+T)}l.1U.1y(1m)},2c:u(E){B(!l.S(E))C[];D 2c=[];q.16(l.S(E),u(2P,F){2c[2c.I]={2d:2P,5v:F}});C 2c},S:u(E){C l.G.2c?l.G.2c[l.4k(E)]:l.G.88?q(E).S()[l.G.88]:q(E).S()},4k:u(E){D T=(/3S|4d/i.1o(E.H))?E.1e:E.T;B(!T){D 5z=E.1T.T,5B=/[^a-cu-2u-9\\-6q]/g;T=E.T=(5z?5z.1P(5B,""):"")+E.1e.1P(5B,"")}C T}},3C:u(F,E){4P(E.1I.2q()){39\'3Q\':C q("21:3H",E).I;39\'3R\':B(/3S|4d/i.1o(E.H))C q(E.1T||U).3w(\'[@1e="\'+E.1e+\'"]:4N\').I}C F.I},8e:u(O,E){C l.5C[R O]?l.5C[R O](O,E):Y},5C:{"5M":u(O,E){C O},"1R":u(O,E){C!!q(O,E.1T).I},"u":u(O,E){C O(E)}},1k:{1l:u(F,E,O){B(!q.N.8e(O,E))C-1;4P(E.1I.2q()){39\'3Q\':D W=q("21:3H",E);C W.I>0&&(E.H=="3Q-9Z"||W[0].F.I>0);39\'3R\':4P(E.H.2q()){39\'4d\':39\'3S\':C q.N.3C(F,E)>0}a3:C F.I>0}},a4:u(F,E,O){C!q.N.1k.1l(F,E)||O.1o(F)},6Q:u(F,E,O){D I=q.N.3C(F,E);C!q.N.1k.1l(F,E)||I>=O},6x:u(F,E,O){D I=q.N.3C(F,E);C!q.N.1k.1l(F,E)||I<=O},6y:u(F,E,O){D I=q.N.3C(F,E);C!q.N.1k.1l(F,E)||(I>=O[0]&&I<=O[1])},6A:u(F,E,O){C!q.N.1k.1l(F,E)||F>=O},6B:u(F,E,O){C!q.N.1k.1l(F,E)||F<=O},6D:u(F,E,O){C!q.N.1k.1l(F,E)||(F>=O[0]&&F<=O[1])},4S:u(F,E){C!q.N.1k.1l(F,E)||/^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$/i.1o(F)},1f:u(F,E){C!q.N.1k.1l(F,E)||/^(a8?|a9):\\/\\/[A-2u-9](\\.?[A-2u-5n„1xœ1x–][A-2u-5k\\-1x„1xœ1x–]*)*(\\/([A-2u-5n„1xœ1x–][A-2u-5k\\-\\.1x„1xœ1x–]*)?)*(\\?([A-2u-5n„1xœ1x–][A-2u-5k\\-\\.%\\+=&1x„1xœ1x–]*)?)?$/i.1o(F)},2n:u(F,E){C!q.N.1k.1l(F,E)||!/aK|8X/.1o(1S 5m(F))},6G:u(F,E){C!q.N.1k.1l(F,E)||/^\\d{4}[/-]\\d{1,2}[/-]\\d{1,2}$/.1o(F)},6E:u(F,E){C!q.N.1k.1l(F,E)||/^\\d\\d?\\.\\d\\d?\\.\\d\\d\\d?\\d?$/.1o(F)},3i:u(F,E){C!q.N.1k.1l(F,E)||/^-?[,0-9]+(\\.\\d+)?$/.1o(F)},6I:u(F,E){C!q.N.1k.1l(F,E)||/^-?[\\.0-9]+(,\\d+)?$/.1o(F)},5E:u(F,E){C!q.N.1k.1l(F,E)||/^\\d+$/.1o(F)},6J:u(F,E,O){C F==q(""+O).1Y()}},ax:u(1e,2d,26){q.N.1k[1e]=2d;q.N.3E[1e]=26}});(u($){$.fn.2k=u(W){C l.16(u(){$.2k(l,W)})};$.2k=u(1W,W){D G={\'4Q\':14,\'2k\':\'6j\',\'32\':du,\'77\':\'8V\',\'1p\':\'aF\',\'4F\':\'2k\',\'1i\':\'3T\'};B(W)$.1j(G,W);B(G.4Q===14)D 1v=$(1W).4Q();L D 1v=$(1W).4Q(G.4Q);B(1v.I>1){$(1W).K(\'28\',\'5l\');$(1W).K(\'1i\',G["1i"]);$(1W).2E(G["4F"]);V(D i=0;i<1v.I;i++){$(1v[i]).K(\'z-2V\',2D(1v.I-i));$(1v[i]).K(\'28\',\'40\');$(1v[i]).1u()};B(G["2k"]=="6j"){3g(u(){$.2k.79(1v,G,1,0)},G.32);$(1v[0]).1B()}L B(G["2k"]=="5p"){3g(u(){do{2b=4g.b5(4g.5p()*1v.I)}2I(2b==0)$.2k.79(1v,G,2b,0)},G.32);$(1v[0]).1B()}L 7b(\'q: 2k: 8i "2k" 9Q 9I be "6j" 4v "5p"\')}};$.2k.79=u(1v,G,2b,2t){B(G["77"]==\'b1\'){$(1v[2t]).aS(G.1p,$(1v[2b]).aU(G.1p))}L B(G["77"]==\'8V\'){$(1v[2t]).aV(G.1p);$(1v[2b]).aX(G.1p)}L 7b(\'q: 2k: 8i "77" 9Q 9I be "b1" 4v "8V"\');B(G["2k"]=="6j"){B((2b+1)<1v.I){2b=2b+1;2t=2b-1}L{2b=0;2t=1v.I-1}}L B(G["2k"]=="5p"){2t=2b;2I(2b==2t)2b=4g.b5(4g.5p()*1v.I)}L 7b(\'q: 2k: 8i "2k" 9Q 9I be "6j" 4v "5p"\');3g((u(){$.2k.79(1v,G,2b,2t)}),G.32)}})(q);(u($){$.3K=u(){l.45={};C};$.3K.5g={6t:u(){D Q={"T":14,"4I":4l,"7T":1a,"6Z":1a,"17":14,"36":u(){},"1E":[]};u 6i(fn){C(!!fn&&R fn!="1R"&&R fn[0]=="1c"&&4G("u","i").1o(fn+""))};D i=0;D 98=1a;B(R 11[i]=="3x"&&11.I>1){98=Y;i++}B(R 11[i]=="3x"){V(D 21 25 11[i])B(R Q[21]!="1c")Q[21]=11[i][21];i++}B(R 11[i]=="3i"||(R 11[i]=="1R"&&11[i].2K(4G("^[0-9]+[bP]$"))))Q["4I"]=11[i++];B(R 11[i]=="5M")Q["7T"]=11[i++];B(R 11[i]=="5M")Q["6Z"]=11[i++];B(R 11[i]=="3x"&&R 11[i+1]=="1R"&&6i(11[i][11[i+1]])){Q["17"]=11[i++];Q["36"]=11[i++]}L B(R 11[i]!="1c"&&(6i(11[i])||R 11[i]=="1R"))Q["36"]=11[i++];2I(R 11[i]!="1c")Q["1E"].1y(11[i++]);B(98){B(R 11[1]=="3x"){V(D 21 25 11[0])B(R Q[21]!="1c"&&R 11[1][21]=="1c")Q[21]=11[0][21]}L{V(D 21 25 11[0])B(R Q[21]!="1c")Q[21]=11[0][21]}i++}Q["7W"]=l;Q["83"]=14;D 2K=2D(Q["4I"]).2K(4G("^([0-9]+)([bP])$"));B(2K&&2K[0]!="1c"&&2K[1]!="1c")Q["4I"]=2D(1b(2K[1])*{s:4l,m:4l*60,h:4l*60*60,d:4l*60*60*24,w:4l*60*60*24*7}[2K[2]]);B(Q["T"]==14)Q["T"]=(2D(Q["7T"])+":"+2D(Q["6Z"])+":"+2D(Q["4I"])+":"+2D(Q["17"])+":"+2D(Q["36"])+":"+2D(Q["1E"]));B(Q["6Z"])B(R l.45[Q["T"]]!="1c")C l.45[Q["T"]];B(!6i(Q["36"])){B(Q["17"]!=14&&R Q["17"]=="3x"&&R Q["36"]=="1R"&&6i(Q["17"][Q["36"]]))Q["36"]=Q["17"][Q["36"]];L Q["36"]=7P("u () { "+Q["36"]+" }")}Q["83"]=l.7U(Q);l.45[Q["T"]]=Q;C Q},9M:u(Q){B(R Q=="1R")Q=l.45[Q];Q["83"]=l.7U(Q);C Q},7U:u(Q){D cn=u(){D 17=(Q["17"]!=14?Q["17"]:Q);(Q["36"]).1A(17,Q["1E"]);B(R(Q["7W"]).45[Q["T"]]!="1c"&&Q["7T"])(Q["7W"]).7U(Q);L 6m(Q["7W"]).45[Q["T"]]};C 3g(cn,Q["4I"])},9N:u(Q){B(R Q=="1R")Q=l.45[Q];B(R Q=="3x"){co(Q["83"]);6m l.45[Q["T"]]}}};$.1j({3K$:1S $.3K(),6t:u(){C $.3K$.6t.1A($.3K$,11)},9M:u(){C $.3K$.9M.1A($.3K$,11)},9N:u(){C $.3K$.9N.1A($.3K$,11)}});$.fn.1j({6t:u(){D a=[{}];V(D i=0;i<11.I;i++)a.1y(11[i]);C l.16(u(){a[0]={"T":l,"17":l};C $.6t.1A($,a)})}})})(q);(u($){$.1j({5q$:14,3n:u(cB){D cC=($.5q$==Y?Y:1a);$.5q$=(cB?Y:1a);C cC},6b:u(26){B($.5q$==Y)30.3n(26)}});$.fn.1j({6b:u(26){B($.5q$==Y){C l.16(u(){B(R 26!=="1c")$.6b(26);$.6b(l)})}}});$(U).3f(u(){D 6w=$("2f").1q("3n");B(6w=="Y"||6w=="1a")$.3n(6w=="Y"?Y:1a)});$(U).3f(u(){B(R 1g.30==="1c"){u cz(17){D 1L=14;B(R 17==="1c")1L="[1c]";L B(R 17==="5M")1L=(17?"Y":"1a");L B(R 17==="3i")1L=""+17;L B(R 17==="1R")1L=17;L B(R 17==="u")1L=17;L B(R 17==="3x"){B(R 17.2W!=="1c"){B(17.2W==1){1L=\'&9n;\';1L+=17.1I.2q();V(D i=0;i<17.9b.I;i++)1L+=\' \'+17.9b[i].1I.2q()+\'="\'+17.9b[i].6g+\'"\';1L+=\'&8n;\'}L B(17.2W==2)1L=17.1I+\'="\'+17.6g;L B(17.2W==3)1L=17.6g}L B(R 17.ar!=="1c")1L=17.ar();L B(R 17.5j!=="1c")1L=17.5j()}B(1L==14)1L="[ds]";C 1L};$(U).3f(u(){$("1r").3l(\'<2a T="4z"><4t></4t></2a>\');$("#4z").K("1K","2y").K("dH","dK").K("dQ","#dY").K("e5","#e7").K("61","7O 4W 7O 4W").K("5J","5Z a7 #e8").K("7a","5Z 5Z 5Z 5Z");$("#4z 4t").K("7a","4W 4W 4W 4W").K("8Y","ez")});D 9z=["6b","3n","eE","eI","1m","eL","63","eS","eV","f0","4I","f4","4J","fb","fc","fe"];1g.30={};V(D i=0;i<9z.I;i++){1g.30[9z[i]]=u(cD){$(\'#4z\').K("1K",$.5q$==Y?"44":"2y");$(\'#4z 4t\').3l(\'<1G>\'+cz(cD)+\'</1G>\').K;$("#4z 4t 1G").K("cF","4R a7 #cM").K("61","4R 7O 4R 7O")}}1g.30["4z"]=Y}})})(q);(u($){$.1j({dO:u(){D 1H={\'1f\':14,\'90\':Y,\'cb\':14,\'cw\':14};B(R 11[0]=="1R"){1H.1f=11[0];B(R 11[1]=="u")1H.cb=11[1]}L B(R 11[0]=="3x"){V(D 21 25 11[0])B(R 1H[21]!="1c")1H[21]=11[0][21]}D 87=$(U.7v(\'3Y\')).1q(\'H\',\'1L/ce\').1q(\'3s\',1H.1f);B(1H.90||1H.cb!==14){D 1h=u(){B(1H.cb!==14){D 1E=1H.cw;B(1E===14)1E=[];L B(!(R 1E==="3x"&&1E de 3k))1E=[1E];1H.cb.1A(l,1E)}B(1H.90)$(l).41()};B($.18.1C){87.2M(0).5F=u(){B(l.58=="3t"||l.58=="bb")1h.3h(l)}}L{$(87).48(1h)}}$(\'eW\',U).3l(87)}})})(q);',62,957,'|||||||||||||||||||||this|||||jQuery||||function|||||||if|return|var|element|value|settings|type|length|elem|css|else||validator|param|event|ctx|typeof|data|id|document|for|options||true|||arguments|prop||null||each|obj|browser|parent|false|parseInt|undefined|ret|name|url|window|callback|height|extend|methods|required|error|xml|test|speed|attr|body|cur|helper|hide|elements|parentNode|Ã|push|filter|apply|show|msie|handler|args|style|li|arg|nodeName|enter|display|text|Please|opacity|indexOf|replace|rule|string|new|form|toShow|status|container|scope|val|tabs||option|result|constructor||in|message|hash|position|firstChild|div|current|rules|method|width|html|nav|className|events|trigger|alternation|not|add|date|px|toHide|toLowerCase|expr|left|last|Z0|top|first|expires|none|hidden|global|containers|errorList|String|addClass|tSettings|context|title|while|opt|match|bind|get|initial|isFunction|key|num|valid|reset|errors|scrollTop|index|nodeType|offsetHeight|click|break|console|animate|timeout|queue|is|scrollLeft|func|old|trim|case|easing|safari|documentElement|toggle|errorClass|ready|setTimeout|call|number|target|Array|append|table|debug|elems|end|visible|disabled|src|complete|removeClass|self|find|object|params|catch|try|parents|getLength|opera|messages|showErrors|bookmarkable|selected|clean|nth|scheduler|ifModified|orig|to|tbody|done|select|input|radio|auto|duration|merge|submit|preventDefault|script|innerHTML|absolute|remove|offsetWidth|tab|block|bucket|span|elementID|load|defaults|borderTopWidth|lastActive|clientHeight|checkbox|tb|mozilla|Math|check|nextSibling|cookie|findId|1000|which|borderLeftWidth|update|labelContainer|wrap|wrapper|selectedClass|ol|size|or|firstNum|split|pushStack|jQueryDebug|min|oid|map|remote|fix|class|RegExp|encodeURIComponent|time|count|returnValue|focus|overflow|checked|clicked|switch|children|1px|email|curAnim|errorLabelContainer|grep|0px|now|that|tmp||hideErrors|sibling|guid|mouseover|image|oldblock|ein|readyState|static|timers|res|boxModel|exec|success|resetForm|prototype|prepareForm|re|toString|9_|relative|Date|9Ã|currentForm|random|_debug|insertBefore|stopPropagation|hideAnim|custom|parameters|location|forId|href|formId|showAnim|idcleanup|dependTypes|cssFloat|digits|onreadystatechange|characters|ajaxHistory|originalEvent|border|unbind|Number|boolean|ownerDocument|handlers|on|clientWidth|readyList|removeChild|tID|innerHeight|fx|curCSS|path|domain|4px||padding|substr|dir|multiFilter|re2|onClick|childNodes|has|op|scroll|log|st|sl|domManip|empty|nodeValue|currentStyle|_isfn|sequence|containerClass|setInterval|delete|appendTo|disabledClass|makeArray|_|onHide|onShow|schedule|trueClick|toUpperCase|req|maxLength|rangeLength|tabEvents|minValue|maxValue|handle|rangeValue|dateDE|tr|dateISO|mergeNum|numberDE|equalTo|inArray|token|foundToken|tag|getAttribute|ul|minLength|absparent|doc|isReady|Tooltip|mouseout|fixPNG|msie6|Function|protect|styleFloat|diff|setArray|parseFloat|step|oldDisplay|errorContainer|animation|onsubmit|_next|margin|alert|ajax|oHeight|Bitte|geben|setRequestHeader|oWidth|between|ival|and|async|handleError|selector|than|equal|errorContext|lastModified|prepareElement|responseText|jquery|createElement|defaultView|getTime|the|secure|formatAndAdd|cloneNode|max|child|modRes|strong|button|tagName|submitHandler|countErrors|defaultShowErrors|focusInvalid|shift|expression|10px|eval|Sie|XMLHttpRequest|navClass|repeat|_schedule|Hide|_scheduler|showError|minHeight|label|generated|cachedWidth|currentWidth|_handle|cachedFontSize|currentFontSize|errorPlacement|node|meta|toShowId|hideClass|visibility|locked|ajaxSettings|depend|blur|disableTab|offset|parameter|unique|h3|no|clone|gt|swap|getComputedStyle|backgroundImage|isXMLDoc|second|part|mousemove|pageX|offsetLeft|chars|offsetTop|pass|_resort|classFilter|matched|pageXOffset|triggered|slice|pageYOffset|float|innerWidth|handleHover|unload|getElementById|safariTimer|els|delay|fn2|extraClass|IE|from|startTime|lastNum|fade|GET|NaN|paddingRight|00|gc|clearInterval|isTimeout|dataType|requestDone|file|Modified|getResponseHeader|override|evalScripts|globalEval|attributes|active|join|throw|cookies|substring|parPos|cookieValue|only|appendChild|relparent|paddingLeft|lt|paddingTop|returnObject|parts|bgiframe|hasSelectedClass|unFocus|deep|jq|pos|array|font|names|watchFontSize|_setAutoHeight|cachedHeight|currentHeight|fxSpeed|fxSlide|fxFade|insertAfter|either|fxShow|fxHide|clientX|reschedule|cancel|hideSpeed|showSpeed|must|remoteUrls|lastToggle|heights|switchTab|loadingClass|inv|scrollTo|scrollX|multiple|scrollY|triggerTab|enableTab|default|regex|tabEvent|subject|solid|https|ftp|alpha|exclude|Microsoft|enabled|getPropertyValue|newProp|createHelper|zoom|100|save|getAndSetAttr||bodyHandler|webkit|timer|prepend|before|toJSONString|removeAttr||previousSibling|hideWhenEmpty|pageY|addMethod|tl|getElementsByTagName|parse|viewport|_prefix|even|odd|normal|unshift|srcElement|__ie_init|DOMContentLoaded|Invalid|unfixPNG|one|_toggle|state|showURL|validate|swing|slideUp|dequeue|slideDown|fadeOut|blank|fadeIn|filled|oldOverflow|setDefaults|slide|force|This|field|floor|getScript|longer|POST|then|of|loaded|least|processData||ajaxStart|ActiveXObject|long|address|URL|contentType||ISO|gÃ|ltiges|Datum|eine||beforeSend||ajaxSend|Nummer|notmodified|same|again|ajaxComplete|ajaxStop|less|greater|httpSuccess|200|httpNotModified|Last|304|xmlRes|httpData|json|execScript|exception|ywdhms|occured|smhdw|setTime|ajaxError|when|checking|toUTCString|_height|Warning|password|No|_width|defined|borderBottomWidth|ajaxSuccess|contains|paddingBottom|borderRightWidth|navigator|offsetParent|marginLeft|marginTop|userAgent||after|iframe|javascript|hashPrefix|remoteCount|tabStruct|fxAutoHeight|Show|showBody|behaviour|watch|trampoline|clearTimeout|fxShowSpeed|fxHideSpeed|action|tempForm||zA|siblings|cb_args|||object2text|prevObject|onoff|old_value|msg|initialize|borderBottom|forEach|every|some|createTextNode|FORM|MSIE|cccccc|weight|line|png|Left|progid|Width|DXImageTransform|right|AlphaImageLoader|sizingMethod|crop|thead|tfoot|td|th|htmlFor|tooltip|zIndex|readonly|3000|readOnly|getAttributeNode|setAttribute|ig|track|concat|compatible|instanceof|CSS1Compat|next|prev|prependTo|removeAttribute|toggleClass|lastChild|http|textarea||u0128|uFFFF|continue|unknown|Infinity|2000|clientY|cancelBubble|hover|fromElement|toElement|relatedTarget|resize|dblclick|mousedown|change|keydown|keypress|fontFamily|addEventListener|write|monospace|scr|ipt|defer|getScriptXS|250|backgroundColor|slideToggle|keyup|fadeTo|Object|slow|mouseup|600|ffffff|fast|removeEventListener|400|linear|cos|PI|color|10000|000000|666699|loadIfModified|serialize|textContent|getIfModified|getJSON|post|ajaxTimeout|ajaxSetup|application|www|urlencoded|XMLHTTP||open|Content|Type|If||Since|Thu|01|Jan|1970|GMT|Requested|With|20px|overrideMimeType|Connection|close|abort|info|send|protocol|300|warn|content|responseXML|assert|center|Bottom|horizontal|vertical|Right|365|dirxml|invalid|decodeURIComponent|group|head|scrollHeight|scrollWidth|outerHeight|groupEnd|noConflict|outerWidth|reverse|timeEnd|inline|bgIframe|frameborder|tabindex|Alpha|Opacity|trace|profile|loading|profileEnd|500|removeExpression|sort|setExpression|Loading|compatMode||8230||There|such|Top'.split('|'),0,{}))
  @@ .

From ossp-cvs-owner@ossp.org  Thu Apr 12 23:28:43 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 4CDD1752852; Thu, 12 Apr 2007 23:28:43 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ChangeLog TODO ase.api.pm ase.cfg ase.cgi.ma...
Message-Id: <20070412212843.4CDD1752852@mail.ossp.org>
Date: Thu, 12 Apr 2007 23:28:43 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Apr-2007 23:28:43
  Branch: HEAD                             Handle: 2007041222284200

  Modified files:
    ossp-pkg/ase            ChangeLog TODO ase.api.pm ase.cfg ase.cgi.main.pl
                            ase.cgi.rpc.pl

  Log:
    Provide a low-level "dump" RPC for remote dumping the membership
    records of the database. Authentication is done via simple
    pre-shared secret.

  Summary:
    Revision    Changes     Path
    1.32        +5  -0      ossp-pkg/ase/ChangeLog
    1.58        +0  -9      ossp-pkg/ase/TODO
    1.3         +56 -2      ossp-pkg/ase/ase.api.pm
    1.22        +3  -0      ossp-pkg/ase/ase.cfg
    1.48        +1  -1      ossp-pkg/ase/ase.cgi.main.pl
    1.18        +52 -0      ossp-pkg/ase/ase.cgi.rpc.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 ChangeLog
  --- ossp-pkg/ase/ChangeLog	12 Apr 2007 14:00:26 -0000	1.31
  +++ ossp-pkg/ase/ChangeLog	12 Apr 2007 21:28:42 -0000	1.32
  @@ -12,6 +12,11 @@
     For a more brief summary please have a look at the NEWS file.
   
     Changes between 0.2.1 and 0.2.2 (06-Apr-2007 to 10-Apr-2007)
  +   
  +   o Provide a low-level "dump" RPC for remote dumping the membership
  +     records of the database. Authentication is done via simple
  +     pre-shared secret.
  +     [Ralf S. Engelschall]
   
      o Allow ASE-CERT cookies to be set for local and third-party
        websites, containing a certificate for the authenticated user.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.57 -r1.58 TODO
  --- ossp-pkg/ase/TODO	12 Apr 2007 14:00:26 -0000	1.57
  +++ ossp-pkg/ase/TODO	12 Apr 2007 21:28:42 -0000	1.58
  @@ -9,14 +9,5 @@
     TODO
     ====
   
  -  - ASE remote database dumping
  -    - ase.cfg: pre-shared secret
  -    - "dump" RPC with uuid, name, nickname, address, pw1, pw2, pw3, pw4, etc.
  -    - ase.api.pm
  -      $result = $ase->dump($key[, $uuid, ...]);
  -      ERROR:    $result = undefined
  -      DELETED:  $result = {}
  -      EXISTING: $result = { $uuid => {"Client-Attr" => ..., "..." => ...} }
  -
     - ASE-CERT drop on logout
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.api.pm
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ase.api.pm
  --- ossp-pkg/ase/ase.api.pm	30 Mar 2007 10:42:24 -0000	1.2
  +++ ossp-pkg/ase/ase.api.pm	12 Apr 2007 21:28:42 -0000	1.3
  @@ -316,7 +316,7 @@
           Timeout  => 10
       ) or die "failed to connect to $host:$port: $@";
       $sock->autoflush(1);
  -    $sock->printf(
  +    $sock->print(
           "GET $path HTTP/1.0\n" .
           "Host: $host:$port\n" .
           "\n"
  @@ -390,7 +390,7 @@
           Timeout  => 10
       ) or die "failed to connect to $host:$port: $@";
       $sock->autoflush(1);
  -    $sock->printf(
  +    $sock->print(
           "GET $path HTTP/1.0\n" .
           "Host: $host:$port\n" .
           "\n"
  @@ -417,6 +417,56 @@
       return ($attribute->{"authentication-success"} eq "yes" ? 1 : 0);
   }
   
  +#   remote database dump
  +sub dump ($$$) {
  +    my ($self, $secret, @uuids) = @_;
  +
  +    #   debugging
  +    $self->_debug("METHOD: dump: secret=%s uuids=%s", $secret, join(",", @uuids));
  +
  +    #   query server for database information
  +    $self->_use("IO::Socket::INET");
  +    my $server = $self->{-server_int};
  +    my ($host, $port, $path) = ($server =~ m|^http://([^:/]+)((?::\d+)?)(.*)$|) or die;
  +    $port ||= 80;
  +    $port =~ s|^:||;
  +    $secret =~ s/([^a-zA-Z0-9-])/sprintf("%%%02x", ord($1))/sge;
  +    $path .= "?mode=rpc;method=dump;secret=$secret;uuids=".join(",", @uuids);
  +    my $sock = IO::Socket::INET->new (
  +        PeerAddr => $host,
  +        PeerPort => $port,
  +        Proto    => "tcp",
  +        Timeout  => 10
  +    ) or die "failed to connect to $host:$port: $@";
  +    $sock->autoflush(1);
  +    $sock->print(
  +        "GET $path HTTP/1.0\n" .
  +        "Host: $host:$port\n" .
  +        "\n"
  +    );
  +    my $response = '';
  +    $response .= $_ while (<$sock>);
  +    $sock->close();
  +    $self->_debug("METHOD: dump: response from %s", $server);
  +
  +    #   parse dump response
  +    my $recs = undef;
  +    if ($response =~ m|^HTTP/1.[01x]\s+200\s+|s) {
  +        $recs = {};
  +        $response =~ s|^HTTP/1.[01x]\s+200\s+.+?\r?\n\r?\n||s;
  +        foreach my $chunk (split(/(?<=\n)\n/, $response)) {
  +            my $rec = {};
  +            $chunk =~ s|(me_[a-z0-9_]+):[ \t]+([^\r\n]+)\r?\n|$rec->{$1} = $2, ''|sgei;
  +            if (exists $rec->{"me_uuid"}) {
  +                $recs->{$rec->{"me_uuid"}} = $rec;
  +            }
  +        }
  +    }
  +
  +    #   return dump records
  +    return $recs;
  +}
  +
   #   self-referencing URL generator
   sub url ($%) {
       my ($self, %args) = @_;
  @@ -566,6 +616,10 @@
   
   FIXME
   
  +=item C<$recs = $ase-E<gt>dump($secret[, $uuid, ...]);>
  +
  +FIXME
  +
   =item C<$ase-E<gt>url();>
   
   FIXME
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cfg
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 ase.cfg
  --- ossp-pkg/ase/ase.cfg	12 Apr 2007 14:03:29 -0000	1.21
  +++ ossp-pkg/ase/ase.cfg	12 Apr 2007 21:28:42 -0000	1.22
  @@ -57,6 +57,9 @@
   notice-enrollment           q{};
   notice-resign               q{};
   
  +#   pre-shared RPC secret
  +rpc-secret                  "my secret";
  +
   #   authentication certificates
   certificates {
       token secret "my secret" name "ASE-CERT" domain .ossp.org path /;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.47 -r1.48 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	12 Apr 2007 14:04:46 -0000	1.47
  +++ ossp-pkg/ase/ase.cgi.main.pl	12 Apr 2007 21:28:42 -0000	1.48
  @@ -45,7 +45,7 @@
               heartbeat-interval heartbeat-reminders heartbeat-graceperiod
               requirement-realname requirement-nickname requirement-password
               notice-enrollment notice-resign
  -            certificates
  +            rpc-secret certificates
           ));
           $self->use("IO::All");
           my $txt < io($cfgfile)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.rpc.pl
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 ase.cgi.rpc.pl
  --- ossp-pkg/ase/ase.cgi.rpc.pl	4 Apr 2007 14:18:47 -0000	1.17
  +++ ossp-pkg/ase/ase.cgi.rpc.pl	12 Apr 2007 21:28:42 -0000	1.18
  @@ -144,6 +144,58 @@
           $self->header_props(-type => "text/plain", -expires => "+1m");
           return $content;
       }
  +    elsif ($method eq "dump") {
  +        #   determine parameters
  +        my $secret = $cgi->param("secret");
  +        my $uuids  = $cgi->param("uuids");
  +        my $fields = $cgi->param("fields");
  +        if ($secret ne $cfg->{-cfg}->{"rpc-secret"}) {
  +            die "invalid RPC authentication secret";
  +        }
  +
  +        #   lookup information in database
  +        my @fields = ();
  +        if (defined $fields and $fields ne '') {
  +            if ($fields !~ m/^(?:me_[a-z0-9_]+,?)+$/s) {
  +                die "invalid fields request";
  +            }
  +            @fields = split(/,/, $fields);
  +        }
  +        my $selector = join(", ", @fields);
  +        $selector = "*" if ($selector eq '');
  +        my @uuids = ();
  +        if (defined $uuids and $uuids ne '') {
  +            if ($uuids !~ m/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12},?)+$/s) {
  +                die "invalid UUID request";
  +            }
  +            @uuids = split(/,/, $uuids);
  +        }
  +        my $where = "";
  +        if (@uuids > 0) {
  +            foreach my $uuid (@uuids) {
  +                if ($uuid =~ m/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/) {
  +                    $where .= ($where ? " OR " : "") . " me_uuid = '$uuid'";
  +                }
  +            }
  +            $where = " WHERE $where";
  +        }
  +        my $recs = $dbi->query(qq{
  +            SELECT $selector FROM ase_member $where;
  +        })->hashes();
  +
  +        #   generate response
  +        my $content = '';
  +        if (defined $recs) {
  +            foreach my $rec (@{$recs}) {
  +                foreach my $field (sort keys %{$rec}) {
  +                    $content .= sprintf("%s: %s\n", $field, $rec->{$field});
  +                }
  +                $content .= "\n";
  +            }
  +        }
  +        $self->header_props(-type => "text/plain", -expires => "+1m");
  +        return $content;
  +    }
   }
   
   1;
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 13 11:53:34 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 8C34175290D; Fri, 13 Apr 2007 11:53:33 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.api.pm
Message-Id: <20070413095333.8C34175290D@mail.ossp.org>
Date: Fri, 13 Apr 2007 11:53:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Apr-2007 11:53:33
  Branch: HEAD                             Handle: 2007041310533300

  Modified files:
    ossp-pkg/ase            ase.api.pm

  Log:
    detect ASE errors

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/ase/ase.api.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.api.pm
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ase.api.pm
  --- ossp-pkg/ase/ase.api.pm	12 Apr 2007 21:28:42 -0000	1.3
  +++ ossp-pkg/ase/ase.api.pm	13 Apr 2007 09:53:33 -0000	1.4
  @@ -451,7 +451,7 @@
   
       #   parse dump response
       my $recs = undef;
  -    if ($response =~ m|^HTTP/1.[01x]\s+200\s+|s) {
  +    if ($response =~ m|^HTTP/1.[01x]\s+200\s+|s and $response !~ m/OSSP\s+ase\s+ERROR:/s) {
           $recs = {};
           $response =~ s|^HTTP/1.[01x]\s+200\s+.+?\r?\n\r?\n||s;
           foreach my $chunk (split(/(?<=\n)\n/, $response)) {
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 13 11:56:23 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id D2EFD75290B; Fri, 13 Apr 2007 11:56:22 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.api.pm
Message-Id: <20070413095622.D2EFD75290B@mail.ossp.org>
Date: Fri, 13 Apr 2007 11:56:22 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Apr-2007 11:56:22
  Branch: HEAD                             Handle: 2007041310562200

  Modified files:
    ossp-pkg/ase            ase.api.pm

  Log:
    fix prototype

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-pkg/ase/ase.api.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.api.pm
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ase.api.pm
  --- ossp-pkg/ase/ase.api.pm	13 Apr 2007 09:53:33 -0000	1.4
  +++ ossp-pkg/ase/ase.api.pm	13 Apr 2007 09:56:22 -0000	1.5
  @@ -418,7 +418,7 @@
   }
   
   #   remote database dump
  -sub dump ($$$) {
  +sub dump ($$;@) {
       my ($self, $secret, @uuids) = @_;
   
       #   debugging
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 13 12:09:33 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 340A475291C; Fri, 13 Apr 2007 12:09:33 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.ui.jquery.js
Message-Id: <20070413100933.340A475291C@mail.ossp.org>
Date: Fri, 13 Apr 2007 12:09:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Apr-2007 12:09:33
  Branch: HEAD                             Handle: 2007041311093200

  Modified files:
    ossp-pkg/ase            ase.ui.jquery.js

  Log:
    update to latest xsajax plugin

  Summary:
    Revision    Changes     Path
    1.7         +1  -1      ossp-pkg/ase/ase.ui.jquery.js
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.ui.jquery.js
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ase.ui.jquery.js
  --- ossp-pkg/ase/ase.ui.jquery.js	12 Apr 2007 20:48:09 -0000	1.6
  +++ ossp-pkg/ase/ase.ui.jquery.js	13 Apr 2007 10:09:32 -0000	1.7
  @@ -1 +1 @@
  -eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('B(R 1g.q=="1c"){1g.1c=1g.1c;D q=u(a,c){B(1g==l)C 1S q(a,c);a=a||U;B(q.2O(a))C 1S q(U)[q.fn.3f?"3f":"48"](a);B(R a=="1R"){D m=/^[^<]*(<(.|\\s)+>)[^>]*$/.5d(a);B(m)a=q.3I([m[1]]);L C 1S q(c).3w(a)}C l.72(a.23==3k&&a||(a.7u||a.I&&a!=1g&&!a.2W&&a[0]!=1c&&a[0].2W)&&q.6p(a)||[a])};B(R $!="1c")q.6q$=$;D $=q;q.fn=q.5g={7u:"1.1.2",4u:u(){C l.I},I:0,2M:u(2Q){C 2Q==1c?q.6p(l):l[2Q]},4y:u(a){D 1d=q(a);1d.cA=l;C 1d},72:u(a){l.I=0;[].1y.1A(l,a);C l},16:u(fn,1E){C q.16(l,fn,1E)},2V:u(17){D 9w=-1;l.16(u(i){B(l==17)9w=i});C 9w},1q:u(2P,F,H){D 17=2P;B(2P.23==2D)B(F==1c)C l.I&&q[H||"1q"](l[0],2P)||1c;L{17={};17[2P]=F}C l.16(u(2V){V(D 12 25 17)q.1q(H?l.1F:l,12,q.12(l,17[12],H,2V,12))})},K:u(2P,F){C l.1q(2P,F,"5W")},1L:u(e){B(R e=="1R")C l.6f().3l(U.cJ(e));D t="";q.16(e||l,u(){q.16(l.67,u(){B(l.2W!=8)t+=l.2W!=1?l.6g:q.fn.1L([l])})});C t},4q:u(){D a,1E=11;C l.16(u(){B(!a)a=q.3I(1E,l.5N);D b=a[0].7B(Y);l.1w.5r(b,l);2I(b.29)b=b.29;b.9k(l)})},3l:u(){C l.6e(11,Y,1,u(a){l.9k(a)})},ap:u(){C l.6e(11,Y,-1,u(a){l.5r(a,l.29)})},aq:u(){C l.6e(11,1a,1,u(a){l.1w.5r(a,l)})},cc:u(){C l.6e(11,1a,-1,u(a){l.1w.5r(a,l.4i)})},3p:u(){C l.cA||q([])},3w:u(t){C l.4y(q.8j(q.4C(l,u(a){C q.3w(t,a)})),t)},8m:u(9u){C l.4y(q.4C(l,u(a){D a=a.7B(9u!=1c?9u:Y);a.$2i=14;C a}))},1z:u(t){C l.4y(q.2O(t)&&q.4V(l,u(el,2V){C t.1A(el,[2V])})||q.64(t,l))},2l:u(t){C l.4y(t.23==2D&&q.64(t,l,Y)||q.4V(l,u(a){C(t.23==3k||t.7u)?q.6K(a,t)<0:a!=t}))},2m:u(t){C l.4y(q.3V(l.2M(),t.23==2D?q(t).2M():t.I!=1c&&(!t.1I||t.1I=="cK")?t:[t]))},34:u(2r){C 2r?q.64(2r,l).I>0:1a},1Y:u(1Y){C 1Y==1c?(l.I?l[0].F:14):l.1q("F",1Y)},2f:u(1Y){C 1Y==1c?(l.I?l[0].3Z:14):l.6f().3l(1Y)},6e:u(1E,3m,63,fn){D 8m=l.I>1,a;C l.16(u(){B(!a){a=q.3I(1E,l.5N);B(63<0)a.f3()}D 17=l;B(3m&&q.1I(l,"3m")&&q.1I(a[0],"6F"))17=l.az("3O")[0]||l.9k(U.7v("3O"));q.16(a,u(){fn.1A(17,[8m?l.7B(Y):l])})})}};q.1j=q.fn.1j=u(){D 3j=11[0],a=1;B(11.I==1){3j=l;a=0}D 12;2I(12=11[a++])V(D i 25 12)3j[i]=12[i];C 3j};q.1j({f1:u(){B(q.6q$)$=q.6q$;C q},2O:u(fn){C!!fn&&R fn!="1R"&&!fn.1I&&fn.23!=3k&&/u/i.1o(fn+"")},8r:u(J){C J.7H&&J.5N&&!J.5N.1r},1I:u(J,1e){C J.1I&&J.1I.6v()==1e.6v()},16:u(17,fn,1E){B(17.I==1c)V(D i 25 17)fn.1A(17[i],1E||[i,17[i]]);L V(D i=0,4t=17.I;i<4t;i++)B(fn.1A(17[i],1E||[i,17[i]])===1a)2Z;C 17},12:u(J,F,H,2V,12){B(q.2O(F))F=F.3h(J,[2V]);D ab=/z-?2V|9y-?cN|1N|ah|cO-?1i/i;C F&&F.23==5L&&H=="5W"&&!ab.1o(12)?F+"2o":F},2h:{2m:u(J,c){q.16(c.4x(/\\s+/),u(i,1s){B(!q.2h.68(J.2h,1s))J.2h+=(J.2h?" ":"")+1s})},41:u(J,c){J.2h=c?q.4V(J.2h.4x(/\\s+/),u(1s){C!q.2h.68(c,1s)}).9d(" "):""},68:u(t,c){C q.6K(c,(t.2h||t).5j().4x(/\\s+/))>-1}},8o:u(e,o,f){V(D i 25 o){e.1F["37"+i]=e.1F[i];e.1F[i]=o[i]}f.1A(e,[]);V(D i 25 o)e.1F[i]=e.1F["37"+i]},K:u(e,p){B(p=="1i"||p=="2e"){D 37={},7d,7h,d=["fq","eN","eQ","cQ"];q.16(d,u(){37["61"+l]=0;37["5J"+l+"cS"]=0});q.8o(e,37,u(){B(q(e).34(\':3q\')){7d=e.2X;7h=e.42}L{e=q(e.7B(Y)).3w(":3S").as("4N").3p().K({8b:"2z",28:"40",1K:"44",cU:"0",2s:"0"}).6n(e.1w)[0];D 9h=q.K(e.1w,"28")||"59";B(9h=="59")e.1w.1F.28="5l";7d=e.4c;7h=e.5Q;B(9h=="59")e.1w.1F.28="59";e.1w.5S(e)}});C p=="1i"?7d:7h}C q.5W(e,p)},5W:u(J,12,b2){D 1d;B(12=="1N"&&q.18.1C){1d=q.1q(J.1F,"1N");C 1d==""?"1":1d}B(12=="8H"||12=="5D")12=q.18.1C?"70":"5D";B(!b2&&J.1F[12])1d=J.1F[12];L B(U.7w&&U.7w.8p){B(12=="5D"||12=="70")12="8H";12=12.1P(/([A-Z])/g,"-$1").2q();D 1s=U.7w.8p(J,14);B(1s)1d=1s.ae(12);L B(12=="1K")1d="2y";L q.8o(J,{1K:"44"},u(){D c=U.7w.8p(l,"");1d=c&&c.ae(12)||""})}L B(J.6h){D af=12.1P(/\\-(\\w)/g,u(m,c){C c.6v()});1d=J.6h[12]||J.6h[af]}C 1d},3I:u(a,6S){D r=[];6S=6S||U;q.16(a,u(i,1H){B(!1H)C;B(1H.23==5L)1H=1H.5j();B(R 1H=="1R"){D s=q.38(1H),2a=6S.7v("2a"),4e=[];D 4q=!s.1O("<2J")&&[1,"<3Q>","</3Q>"]||(!s.1O("<cY")||!s.1O("<3O")||!s.1O("<cZ"))&&[1,"<3m>","</3m>"]||!s.1O("<6F")&&[2,"<3m><3O>","</3O></3m>"]||(!s.1O("<d0")||!s.1O("<d1"))&&[3,"<3m><3O><6F>","</6F></3O></3m>"]||[0,"",""];2a.3Z=4q[1]+1H+4q[2];2I(4q[0]--)2a=2a.29;B(q.18.1C){B(!s.1O("<3m")&&s.1O("<3O")<0)4e=2a.29&&2a.29.67;L B(4q[1]=="<3m>"&&s.1O("<3O")<0)4e=2a.67;V(D n=4e.I-1;n>=0;--n)B(q.1I(4e[n],"3O")&&!4e[n].67.I)4e[n].1w.5S(4e[n])}1H=q.6p(2a.67)}B(1H.I===0&&!q.1I(1H,"1T"))C;B(1H[0]==1c||q.1I(1H,"1T"))r.1y(1H);L r=q.3V(r,1H)});C r},1q:u(J,1e,F){D 4E=q.8r(J)?{}:{"V":"d2","4F":"2h","8H":q.18.1C?"70":"5D",5D:q.18.1C?"70":"5D",3Z:"3Z",2h:"2h",F:"F",3r:"3r",4N:"4N",d5:"d7",3H:"3H"};B(1e=="1N"&&q.18.1C){B(F!=1c){J.ah=1;J.1z=(J.1z||"").1P(/aa\\([^)]*\\)/,"")+(73(F).5j()=="8X"?"":"aa(1N="+F*ai+")")}C J.1z?(73(J.1z.2K(/1N=([^)]*)/)[1])/ai).5j():""}B(4E[1e]){B(F!=1c)J[4E[1e]]=F;C J[4E[1e]]}L B(F==1c&&q.18.1C&&q.1I(J,"1T")&&(1e=="cr"||1e=="2d"))C J.d8(1e).6g;L B(J.7H){B(F!=1c)J.d9(1e,F);B(q.18.1C&&/5y|3s/.1o(1e)&&!q.8r(J))C J.6O(1e,2);C J.6O(1e)}L{1e=1e.1P(/-([a-z])/da,u(z,b){C b.6v()});B(F!=1c)J[1e]=F;C J[1e]}},38:u(t){C t.1P(/^\\s+|\\s+$/g,"")},6p:u(a){D r=[];B(R a!="9x")V(D i=0,al=a.I;i<al;i++)r.1y(a[i]);L r=a.8F(0);C r},6K:u(b,a){V(D i=0,al=a.I;i<al;i++)B(a[i]==b)C i;C-1},3V:u(2w,8s){V(D i=0;8s[i];i++)2w.1y(8s[i]);C 2w},8j:u(2w){D r=[],2Q=q.6H++;V(D i=0,fl=2w.I;i<fl;i++)B(2w[i].6H!=2Q){2w[i].6H=2Q;r.1y(2w[i])}C r},6H:0,4V:u(3o,fn,9W){B(R fn=="1R")fn=1S 6Y("a","i","C "+fn);D 22=[];V(D i=0,el=3o.I;i<el;i++)B(!9W&&fn(3o[i],i)||9W&&!fn(3o[i],i))22.1y(3o[i]);C 22},4C:u(3o,fn){B(R fn=="1R")fn=1S 6Y("a","C "+fn);D 22=[];V(D i=0,el=3o.I;i<el;i++){D 1Y=fn(3o[i],i);B(1Y!==14&&1Y!=1c){B(1Y.23!=3k)1Y=[1Y];22=22.dc(1Y)}}C 22}});1S u(){D b=c6.ca.2q();q.18={3b:/an/.1o(b),3D:/3D/.1o(b),1C:/1C/.1o(b)&&!/3D/.1o(b),4f:/4f/.1o(b)&&!/(dd|an)/.1o(b)};q.5c=!q.18.1C||U.fk=="df"};q.16({19:"a.1w",3B:"q.3B(a)",dg:"q.3J(a,2,\'4i\')",dh:"q.3J(a,2,\'au\')",cv:"q.52(a.1w.29,a)",4Q:"q.52(a.29)"},u(i,n){q.fn[i]=u(a){D 1d=q.4C(l,n);B(a&&R a=="1R")1d=q.64(a,1d);C l.4y(1d)}});q.16({6n:"3l",di:"ap",5r:"aq",9H:"cc"},u(i,n){q.fn[i]=u(){D a=11;C l.16(u(){V(D j=0,al=a.I;j<al;j++)q(a[j])[n](l)})}});q.16({as:u(2P){q.1q(l,2P,"");l.dj(2P)},2E:u(c){q.2h.2m(l,c)},3u:u(c){q.2h.41(l,c)},dk:u(c){q.2h[q.2h.68(l,c)?"41":"2m"](l,c)},41:u(a){B(!a||q.1z(a,[l]).r.I)l.1w.5S(l)},6f:u(){2I(l.29)l.5S(l.29)}},u(i,n){q.fn[i]=u(){C l.16(n,11)}});q.16(["eq","9n","8n","c3"],u(i,n){q.fn[n]=u(2Q,fn){C l.1z(":"+n+"("+2Q+")",fn)}});q.16(["1i","2e"],u(i,n){q.fn[n]=u(h){C h==1c?(l.I?q.K(l[0],n):14):l.K(n,h.23==2D?h:h+"2o")}});q.1j({2r:{"":"m[2]==\'*\'||q.1I(a,m[2])","#":"a.6O(\'T\')==m[2]",":":{9n:"i<m[3]-0",8n:"i>m[3]-0",3J:"m[3]-0==i",eq:"m[3]-0==i",2w:"i==0",2t:"i==r.I-1",aD:"i%2==0",aE:"i%2","3J-7D":"q.3J(a.1w.29,m[3],\'4i\',a)==a","2w-7D":"q.3J(a.1w.29,1,\'4i\')==a","2t-7D":"q.3J(a.1w.dl,1,\'au\')==a","9j-7D":"q.52(a.1w.29).I==1",19:"a.29",6f:"!a.29",c3:"q.fn.1L.1A([a]).1O(m[3])>=0",3q:\'a.H!="2z"&&q.K(a,"1K")!="2y"&&q.K(a,"8b")!="2z"\',2z:\'a.H=="2z"||q.K(a,"1K")=="2y"||q.K(a,"8b")=="2z"\',ad:"!a.3r",3r:"a.3r",4N:"a.4N",3H:"a.3H||q.1q(a,\'3H\')",1L:"a.H==\'1L\'",3S:"a.H==\'3S\'",4d:"a.H==\'4d\'",95:"a.H==\'95\'",bX:"a.H==\'bX\'",3W:"a.H==\'3W\'",55:"a.H==\'55\'",2S:"a.H==\'2S\'",7G:\'a.H=="7G"||q.1I(a,"7G")\',3R:"/3R|3Q|dn|7G/i.1o(a.1I)"},".":"q.2h.68(a,m[2])","@":{"=":"z==m[4]","!=":"z!=m[4]","^=":"z&&!z.1O(m[4])","$=":"z&&z.62(z.I - m[4].I,m[4].I)==m[4]","*=":"z&&z.1O(m[4])>=0","":"z",8A:u(m){C["",m[1],m[3],m[2],m[5]]},aC:"z=a[m[3]];B(!z||/5y|3s/.1o(m[3]))z=q.1q(a,m[3]);"},"[":"1b(m[2])?q.3J(a.1w.29,1b(m[2]),\'4i\',a)==a:q.3w(m[2],a).I"},aA:[/^\\[ *(@)([\\w-]+) *([!*$^=]*) *(\'?"?)(.*?)\\4 *\\]/,/^(\\[)\\s*(.*?(\\[.*?\\])?[^[]*?)\\s*\\]/,/^(:)([\\w-]+)\\("?\'?(.*?(\\(.*?\\))?[^(]*?)"?\'?\\)/,1S 4G("^([:.#]*)("+(q.8x="(?:[\\\\w\\dp-\\dq*-]|\\\\\\\\.)")+"+)")],6L:[/^(\\/?\\.\\.)/,"a.1w",/^(>|\\/)/,"q.52(a.29)",/^(\\+)/,"q.3J(a,2,\'4i\')",/^(~)/,u(a){D s=q.52(a.1w.29);C s.8F(q.6K(a,s)+1)}],64:u(2r,3o,2l){D 37,1s=[];2I(2r&&2r!=37){37=2r;D f=q.1z(2r,3o,2l);2r=f.t.1P(/^\\s*,\\s*/,"");1s=2l?3o=f.r:q.3V(1s,f.r)}C 1s},3w:u(t,2G){B(R t!="1R")C[t];B(2G&&!2G.2W)2G=14;2G=2G||U;B(!t.1O("//")){2G=2G.3c;t=t.62(2,t.I)}L B(!t.1O("/")&&!2G.5N){2G=2G.3c;t=t.62(1,t.I);B(t.1O("/")>=1)t=t.62(t.1O("/"),t.I)}D 1d=[2G],3P=[],2t;2I(t&&2t!=t){D r=[];2t=t;t=q.38(t).1P(/^\\/\\//,"");D 6M=1a;D 5i=/^[\\/>]\\s*([\\w*-]+)/;D m=5i.5d(t);B(m){V(D i=0;1d[i];i++)V(D c=1d[i].29;c;c=c.4i)B(c.2W==1&&(m[1]=="*"||q.1I(c,m[1])))r.1y(c);1d=r;t=t.1P(5i,"");B(t.1O(" ")==0)dr;6M=Y}L{V(D i=0,ay=q.6L.I;i<ay;i+=2){D 5i=q.6L[i],fn=q.6L[i+1];D m=5i.5d(t);B(m){r=1d=q.4C(1d,q.2O(fn)?fn:1S 6Y("a","C "+fn));t=q.38(t.1P(5i,""));6M=Y;2Z}}}B(t&&!6M){B(!t.1O(",")){B(1d[0]==2G)1d.7M();3P=q.3V(3P,1d);r=1d=[2G];t=" "+t.62(1,t.I)}L{D 65=1S 4G("^(\\\\w+)(#)("+q.8x+"+)");D m=65.5d(t);B(m){m=[0,m[2],m[3],m[1]]}L{65=1S 4G("^([#.]?)("+q.8x+"*)");m=65.5d(t)}m[2]=m[2].1P(/\\\\/g,"");D J=1d[1d.I-1];B(m[1]=="#"&&J&&J.8L){D 4B=J.8L(m[2]);B((q.18.1C||q.18.3D)&&4B&&4B.T!=m[2])4B=q(\'[@T="\'+m[2]+\'"]\',J)[0];1d=r=4B&&(!m[3]||q.1I(4B,m[3]))?[4B]:[]}L{V(D i=0;1d[i];i++){D 6N=m[1]!=""||m[0]==""?"*":m[2];B(6N=="*"&&1d[i].1I.2q()=="3x")6N="O";r=q.3V(r,1d[i].az(6N))}B(m[1]==".")r=q.8B(r,m[2]);B(m[1]=="#"){D 4Z=[];V(D i=0;r[i];i++)B(r[i].6O("T")==m[2]){4Z=[r[i]];2Z}r=4Z}1d=r}t=t.1P(65,"")}}B(t){D 1Y=q.1z(t,r);1d=r=1Y.r;t=q.38(1Y.t)}}B(t)1d=[];B(1d&&1d[0]==2G)1d.7M();3P=q.3V(3P,1d);C 3P},8B:u(r,m,2l){m=" "+m+" ";D 4Z=[];V(D i=0;r[i];i++){D 8z=(" "+r[i].2h+" ").1O(m)>=0;B(!2l&&8z||2l&&!8z)4Z.1y(r[i])}C 4Z},1z:u(t,r,2l){D 2t;2I(t&&t!=2t){2t=t;D p=q.aA,m;V(D i=0;p[i];i++){m=p[i].5d(t);B(m){t=t.9g(m[0].I);B(q.2r[m[1]].8A)m=q.2r[m[1]].8A(m);m[2]=m[2].1P(/\\\\/g,"");2Z}}B(!m)2Z;B(m[1]==":"&&m[2]=="2l")r=q.1z(m[3],r,Y).r;L B(m[1]==".")r=q.8B(r,m[2],2l);L{D f=q.2r[m[1]];B(R f!="1R")f=q.2r[m[1]][m[2]];7P("f = u(a,i){"+(q.2r[m[1]].aC||"")+"C "+f+"}");r=q.4V(r,f,2l)}}C{r:r,t:t}},3B:u(J){D 8C=[];D 1s=J.1w;2I(1s&&1s!=U){8C.1y(1s);1s=1s.1w}C 8C},3J:u(1s,22,63,J){22=22||1;D 2Q=0;V(;1s;1s=1s[63]){B(1s.2W==1)2Q++;B(2Q==22||22=="aD"&&2Q%2==0&&2Q>1&&1s==J||22=="aE"&&2Q%2==1&&1s==J)C 1s}},52:u(n,J){D r=[];V(;n;n=n.4i){B(n.2W==1&&(!J||n!=J))r.1y(n)}C r}});q.P={2m:u(E,H,1D,S){B(q.18.1C&&E.6l!=1c)E=1g;B(S)1D.S=S;B(!1D.53)1D.53=l.53++;B(!E.$2i)E.$2i={};D 5O=E.$2i[H];B(!5O){5O=E.$2i[H]={};B(E["5P"+H])5O[0]=E["5P"+H]}5O[1D.53]=1D;E["5P"+H]=l.6C;B(!l.2A[H])l.2A[H]=[];l.2A[H].1y(E)},53:1,2A:{},41:u(E,H,1D){D 2i=E.$2i,1d;B(2i){B(H&&H.H){1D=H.1D;H=H.H}B(!H){V(H 25 2i)l.41(E,H)}L B(2i[H]){B(1D)6m 2i[H][1D.53];L V(1D 25 E.$2i[H])6m 2i[H][1D];V(1d 25 2i[H])2Z;B(!1d){1d=E["5P"+H]=14;6m 2i[H]}}V(1d 25 2i)2Z;B(!1d)E.$2i=14}},2j:u(H,S,E){S=q.6p(S||[]);B(!E)q.16(l.2A[H]||[],u(){q.P.2j(H,S,l)});L{D 1D=E["5P"+H],1Y,fn=q.2O(E[H]);B(1D){S.aG(l.4E({H:H,3j:E}));B((1Y=1D.1A(E,S))!==1a)l.8E=Y}B(fn&&1Y!==1a)E[H]();l.8E=1a}},6C:u(P){B(R q=="1c"||q.P.8E)C;P=q.P.4E(P||1g.P||{});D 4K;D c=l.$2i[P.H];D 1E=[].8F.3h(11,1);1E.aG(P);V(D j 25 c){1E[0].1D=c[j];1E[0].S=c[j].S;B(c[j].1A(l,1E)===1a){P.3X();P.5s();4K=1a}}B(q.18.1C)P.3j=P.3X=P.5s=P.1D=P.S=14;C 4K},4E:u(P){B(!P.3j&&P.aH)P.3j=P.aH;B(P.8v==1c&&P.9L!=1c){D e=U.3c,b=U.1r;P.8v=P.9L+(e.35||b.35);P.aw=P.dv+(e.2U||b.2U)}B(q.18.3b&&P.3j.2W==3){D 5I=P;P=q.1j({},5I);P.3j=5I.3j.1w;P.3X=u(){C 5I.3X()};P.5s=u(){C 5I.5s()}}B(!P.3X)P.3X=u(){l.4K=1a};B(!P.5s)P.5s=u(){l.dw=Y};C P}};q.fn.1j({2L:u(H,S,fn){C l.16(u(){q.P.2m(l,H,fn||S,S)})},aM:u(H,S,fn){C l.16(u(){q.P.2m(l,H,u(P){q(l).5K(P);C(fn||S).1A(l,11)},S)})},5K:u(H,fn){C l.16(u(){q.P.41(l,H,fn)})},2j:u(H,S){C l.16(u(){q.P.2j(H,S,l)})},3d:u(){D a=11;C l.2Y(u(e){l.9S=l.9S==0?1:0;e.3X();C a[l.9S].1A(l,[e])||1a})},dx:u(f,g){u 8J(e){D p=(e.H=="54"?e.dy:e.dz)||e.dA;2I(p&&p!=l)3A{p=p.1w}3z(e){p=l};B(p==l)C 1a;C(e.H=="54"?f:g).1A(l,[e])}C l.54(8J).6V(8J)},3f:u(f){B(q.6T)f.1A(U,[q]);L{q.5R.1y(u(){C f.1A(l,[q])})}C l}});q.1j({6T:1a,5R:[],3f:u(){B(!q.6T){q.6T=Y;B(q.5R){q.16(q.5R,u(){l.1A(U)});q.5R=14}B(q.18.4f||q.18.3D)U.e0("aJ",q.3f,1a)}}});1S u(){q.16(("8f,4L,48,dB,6a,8K,2Y,dC,"+"dD,dW,8u,54,6V,dE,3Q,"+"3W,dF,dG,dS,1m").4x(","),u(i,o){q.fn[o]=u(f){C f?l.2L(o,f):l.2j(o)}});B(q.18.4f||q.18.3D)U.dI("aJ",q.3f,1a);L B(q.18.1C){U.dJ("<dL"+"dM T=aI dN=Y "+"3s=//:><\\/3Y>");D 3Y=U.8L("aI");B(3Y)3Y.5F=u(){B(l.58!="3t")C;l.1w.5S(l);q.3f()};3Y=14}L B(q.18.3b)q.8M=6l(u(){B(U.58=="bb"||U.58=="3t"){91(q.8M);q.8M=14;q.3f()}},10);q.P.2m(1g,"48",q.3f)};B(q.18.1C)q(1g).aM("8K",u(){D 2A=q.P.2A;V(D H 25 2A){D 8N=2A[H],i=8N.I;B(i&&H!=\'8K\')do q.P.41(8N[i-1],H);2I(--i)}});q.fn.1j({1B:u(1p,1h){D 2z=l.1z(":2z");1p?2z.31({1i:"1B",2e:"1B",1N:"1B"},1p,1h):2z.16(u(){l.1F.1K=l.56?l.56:"";B(q.K(l,"1K")=="2y")l.1F.1K="44"});C l},1u:u(1p,1h){D 3q=l.1z(":3q");1p?3q.31({1i:"1u",2e:"1u",1N:"1u"},1p,1h):3q.16(u(){l.56=l.56||q.K(l,"1K");B(l.56=="2y")l.56="44";l.1F.1K="2y"});C l},aN:q.fn.3d,3d:u(fn,8P){D 1E=11;C q.2O(fn)&&q.2O(8P)?l.aN(fn,8P):l.16(u(){q(l)[q(l).34(":2z")?"1B":"1u"].1A(q(l),1E)})},aU:u(1p,1h){C l.1z(":2z").31({1i:"1B"},1p,1h).3p()},aS:u(1p,1h){C l.1z(":3q").31({1i:"1u"},1p,1h).3p()},dR:u(1p,1h){C l.16(u(){D aO=q(l).34(":2z")?"1B":"1u";q(l).31({1i:aO},1p,1h)})},aX:u(1p,1h){C l.1z(":2z").31({1N:"1B"},1p,1h).3p()},aV:u(1p,1h){C l.1z(":3q").31({1N:"1u"},1p,1h).3p()},dT:u(1p,3N,1h){C l.31({1N:3N},1p,1h)},31:u(12,1p,3a,1h){C l.33(u(){l.4T=q.1j({},12);D 2J=q.1p(1p,3a,1h);V(D p 25 12){D e=1S q.5V(l,2J,p);B(12[p].23==5L)e.5u(e.1s(),12[p]);L e[12[p]](12)}})},33:u(H,fn){B(!fn){fn=H;H="5V"}C l.16(u(){B(!l.33)l.33={};B(!l.33[H])l.33[H]=[];l.33[H].1y(fn);B(l.33[H].I==1)fn.1A(l)})}});q.1j({1p:u(1p,3a,fn){D 2J=1p&&1p.23==dU?1p:{3t:fn||!fn&&3a||q.2O(1p)&&1p,3U:1p,3a:fn&&3a||3a&&3a.23!=6Y&&3a||"aR"};2J.3U=(2J.3U&&2J.3U.23==5L?2J.3U:{dV:dX,dZ:bE}[2J.3U])||e1;2J.37=2J.3t;2J.3t=u(){q.aT(l,"5V");B(q.2O(2J.37))2J.37.1A(l)};C 2J},3a:{e2:u(p,n,4w,71){C 4w+71*p},aR:u(p,n,4w,71){C((-4g.e3(p*4g.e4)/2)+0.5)*71+4w}},33:{},aT:u(J,H){H=H||"5V";B(J.33&&J.33[H]){J.33[H].7M();D f=J.33[H][0];B(f)f.1A(J)}},5a:[],5V:u(J,W,12){D z=l;D y=J.1F;B(12=="1i"||12=="2e"){D 75=q.K(J,"1K");D aZ=y.4M;y.4M="2z"}z.a=u(){B(W.74)W.74.1A(J,[z.4X]);B(12=="1N")q.1q(y,"1N",z.4X);L{y[12]=1b(z.4X)+"2o";y.1K="44"}};z.7C=u(){C 73(q.K(J,12))};z.1s=u(){D r=73(q.5W(J,12));C r&&r>-e6?r:z.7C()};z.5u=u(8S,3N){z.8T=(1S 5m()).7x();z.4X=8S;z.a();q.5a.1y(u(){C z.74(8S,3N)});B(q.5a.I==1){D ao=6l(u(){q.5a=q.4V(q.5a,u(fn){C fn()});B(!q.5a.I)91(ao)},13)}};z.1B=u(){B(!J.3M)J.3M={};J.3M[12]=q.1q(J.1F,12);W.1B=Y;z.5u(0,l.1s());B(12!="1N")y[12]="4R"};z.1u=u(){B(!J.3M)J.3M={};J.3M[12]=q.1q(J.1F,12);W.1u=Y;z.5u(l.1s(),0)};z.3d=u(){B(!J.3M)J.3M={};J.3M[12]=q.1q(J.1F,12);B(75=="2y"){W.1B=Y;B(12!="1N")y[12]="4R";z.5u(0,l.1s())}L{W.1u=Y;z.5u(l.1s(),0)}};z.74=u(4w,8U){D t=(1S 5m()).7x();B(t>W.3U+z.8T){z.4X=8U;z.a();B(J.4T)J.4T[12]=Y;D 3P=Y;V(D i 25 J.4T)B(J.4T[i]!==Y)3P=1a;B(3P){B(75){y.4M=aZ;y.1K=75;B(q.K(J,"1K")=="2y")y.1K="44"}B(W.1u)y.1K="2y";B(W.1u||W.1B)V(D p 25 J.4T)q.1q(y,p,J.3M[p])}B(3P&&q.2O(W.3t))W.3t.1A(J);C 1a}L{D n=t-l.8T;D p=n/W.3U;z.4X=q.3a[W.3a](p,n,4w,(8U-4w),W.3U);z.a()}C Y}}});q.fn.1j({e9:u(1f,3y,1h){l.48(1f,3y,1h,1)},48:u(1f,3y,1h,3L){B(q.2O(1f))C l.2L("48",1f);1h=1h||u(){};D H="8W";B(3y)B(q.2O(3y)){1h=3y;3y=14}L{3y=q.O(3y);H="b8"}D 3v=l;q.7c({1f:1f,H:H,S:3y,3L:3L,3t:u(5b,1V){B(1V=="5e"||!3L&&1V=="bw")3v.1q("3Z",5b.7t).99().16(1h,[5b.7t,1V,5b]);L 1h.1A(3v,[5b.7t,1V,5b])}});C l},ea:u(){C q.O(l)},99:u(){C l.3w("3Y").16(u(){B(l.3s)q.b6(l.3s);L q.9a(l.1L||l.eb||l.3Z||"")}).3p()}});q.16("bf,bA,bz,bR,c2,bu".4x(","),u(i,o){q.fn[o]=u(f){C l.2L(o,f)}});q.1j({2M:u(1f,S,1h,H,3L){B(q.2O(S)){1h=S;S=14}C q.7c({H:"8W",1f:1f,S:S,5e:1h,93:H,3L:3L})},ec:u(1f,S,1h,H){C q.2M(1f,S,1h,H,1)},b6:u(1f,1h){C q.2M(1f,14,1h,"3Y")},ed:u(1f,S,1h){C q.2M(1f,S,1h,"bK")},ee:u(1f,S,1h,H){B(q.2O(S)){1h=S;S={}}C q.7c({H:"b8",1f:1f,S:S,5e:1h,93:H})},ef:u(32){q.8d.32=32},eg:u(G){q.1j(q.8d,G)},8d:{2A:Y,H:"8W",32:0,bk:"eh/x-ei-1T-ej",bd:Y,7l:Y,1X:14,S:14},7r:{},7c:u(s){s=q.1j({},q.8d,s);B(s.S){B(s.bd&&R s.S!="1R")s.S=q.O(s.S);B(s.H.2q()=="2M"){s.1f+=((s.1f.1O("?")>-1)?"&":"?")+s.S;s.S=14}}B(s.2A&&!q.9c++)q.P.2j("bf");D 94=1a;D 1n=1g.bg?1S bg("ac.ek"):1S 7R();1n.em(s.H,s.1f,s.7l);B(s.S)1n.7g("en-eo",s.bk);B(s.3L)1n.7g("ep-96-er",q.7r[s.1f]||"es, et eu ev 8Z:8Z:8Z ew");1n.7g("X-ex-ey","7R");B(1n.eA)1n.7g("eB","eC");B(s.bs)s.bs(1n);B(s.2A)q.P.2j("bu",[1n,s]);D 5F=u(92){B(1n&&(1n.58==4||92=="32")){94=Y;B(7j){91(7j);7j=14}D 1V;3A{1V=q.bD(1n)&&92!="32"?s.3L&&q.bF(1n,s.1f)?"bw":"5e":"1m";B(1V!="1m"){D 7E;3A{7E=1n.97("bG-96")}3z(e){}B(s.3L&&7E)q.7r[s.1f]=7E;D S=q.bJ(1n,s.93);B(s.5e)s.5e.3h(s.1X||1g,S,1V);B(s.2A)q.P.2j("c2",[1n,s])}L q.7m(s,1n,1V)}3z(e){1V="1m";q.7m(s,1n,1V,e)}B(s.2A)q.P.2j("bz",[1n,s]);B(s.2A&&!--q.9c)q.P.2j("bA");B(s.3t)s.3t(1n,1V);B(s.7l)1n=14}};D 7j=6l(5F,13);B(s.32>0)3g(u(){B(1n){1n.eD();B(!94)5F("32")}},s.32);3A{1n.eF(s.S)}3z(e){q.7m(s,1n,14,e)}B(!s.7l)5F();C 1n},7m:u(s,1n,1V,e){B(s.1m)s.1m(1n,1V,e);B(s.2A)q.P.2j("bR",[1n,s,e])},9c:0,bD:u(r){3A{C!r.1V&&5w.eG=="95:"||(r.1V>=bE&&r.1V<eH)||r.1V==bH||q.18.3b&&r.1V==1c}3z(e){}C 1a},bF:u(1n,1f){3A{D bI=1n.97("bG-96");C 1n.1V==bH||bI==q.7r[1f]||q.18.3b&&1n.1V==1c}3z(e){}C 1a},bJ:u(r,H){D ct=r.97("eJ-H");D S=!H&&ct&&ct.1O("1n")>=0;S=H=="1n"||S?r.eK:r.7t;B(H=="3Y")q.9a(S);B(H=="bK")7P("S = "+S);B(H=="2f")q("<2a>").2f(S).99();C S},O:u(a){D s=[];B(a.23==3k||a.7u)q.16(a,u(){s.1y(4H(l.1e)+"="+4H(l.F))});L V(D j 25 a)B(a[j]&&a[j].23==3k)q.16(a[j],u(){s.1y(4H(j)+"="+4H(l))});L s.1y(4H(j)+"="+4H(a[j]));C s.9d("&")},9a:u(S){B(1g.bL)1g.bL(S);L B(q.18.3b)1g.3g(S,0);L 7P.3h(1g,S)}})}q.fn.eM=u(f){C l.16(u(){D p=l.1w;B(q.K(p,"28")==\'59\')p.1F.28=\'5l\';D s=l.1F;s.28=\'40\';B(!f||f=="eO"){B(((1b(q.K(p,"2e"))-1b(q.K(l,"2e")))/2)>0)s.2s=((1b(q.K(p,"2e"))-1b(q.K(l,"2e")))/2)+"2o";L s.2s="0"}B(!f||f=="eP"){B(((1b(q.K(p,"1i"))-1b(q.K(l,"1i")))/2)>0){s.2v=((1b(q.K(p,"1i"))-1b(q.K(l,"1i")))/2)+"2o"}L{B(p.1I.2q()=="1r"){B(1g.5U)D 4c=1g.5U;L B(U.1r&&U.1r.2X)D 4c=U.1r.2X;s.2v=((4c-1b(q.K(l,"1i")))/2)+"2o"}L{s.2v="0"}}}})};q.4j=u(1e,F,W){B(R F!=\'1c\'){W=W||{};B(F===14){F=\'\';W.2x=-1}D 2x=\'\';B(W.2x){D 2n;B(R W.2x==\'1R\'&&W.2x.2K(/^[+-]?[0-9]+[bN]$/)!==14){D 2K=W.2x.2K(/^([+-]?[0-9]+)([bN])$/);W.2x=1b(2K[0],10)*(({"y":(60*60*24*eR),"w":(60*60*24*7),"d":(60*60*24),"h":(60*60),"m":(60),"s":(1)}[2K[1]])||0);2n=1S 5m();2n.bQ(2n.7x()+W.2x*4l)}L B(R W.2x==\'3i\'){2n=1S 5m();2n.bQ(2n.7x()+W.2x*24*60*60*4l)}L B(R W.2x.bU!=\'1c\')2n=W.2x;L 9e"eT \\"2x\\" 21";2x=\'; 2x=\'+2n.bU()}D 5X=W.5X?\'; 5X=\'+W.5X:\'\';D 5Y=W.5Y?\'; 5Y=\'+W.5Y:\'\';D 7z=W.7z?\'; 7z\':\'\';U.4j=[1e,\'=\',4H(F),2x,5X,5Y,7z].9d(\'\')}L{D 9i=14;B(U.4j&&U.4j!=\'\'){D 9f=U.4j.4x(\';\');V(D i=0;i<9f.I;i++){D 4j=q.38(9f[i]);B(4j.9g(0,1e.I+1)==(1e+\'=\')){9i=eU(4j.9g(1e.I+1));2Z}}}C 9i}};q.fn.bV=q.fn.1i;q.fn.bZ=q.fn.2e;q.fn.1i=u(){B(l[0]==1g)C 3v.5U||q.5c&&U.3c.4c||U.1r.4c;B(l[0]==U)C 4g.7C(U.1r.eX,U.1r.2X);C l.bV(11[0])};q.fn.2e=u(){B(l[0]==1g)C 3v.8I||q.5c&&U.3c.5Q||U.1r.5Q;B(l[0]==U)C 4g.7C(U.1r.eY,U.1r.42);C l.bZ(11[0])};q.fn.5U=u(){C l[0]==1g||l[0]==U?l.1i():l.K(\'1K\')!=\'2y\'?l[0].2X-(1b(l.K("4a"))||0)-(1b(l.K("c1"))||0):l.1i()+(1b(l.K("9o"))||0)+(1b(l.K("c4"))||0)};q.fn.8I=u(){C l[0]==1g||l[0]==U?l.2e():l.K(\'1K\')!=\'2y\'?l[0].42-(1b(l.K("4n"))||0)-(1b(l.K("c5"))||0):l.1i()+(1b(l.K("9m"))||0)+(1b(l.K("8Y"))||0)};q.fn.eZ=u(){C l[0]==1g||l[0]==U?l.1i():l.K(\'1K\')!=\'2y\'?l[0].2X:l.1i()+(1b(l.K("4a"))||0)+(1b(l.K("c1"))||0)+(1b(l.K("9o"))||0)+(1b(l.K("c4"))||0)};q.fn.f2=u(){C l[0]==1g||l[0]==U?l.2e():l.K(\'1K\')!=\'2y\'?l[0].42:l.1i()+(1b(l.K("4n"))||0)+(1b(l.K("c5"))||0)+(1b(l.K("9m"))||0)+(1b(l.K("8Y"))||0)};q.fn.35=u(){B(l[0]==1g||l[0]==U)C 3v.8D||q.5c&&U.3c.35||U.1r.35;C l[0].35};q.fn.2U=u(){B(l[0]==1g||l[0]==U)C 3v.8G||q.5c&&U.3c.2U||U.1r.2U;C l[0].2U};q.fn.8h=u(W,9p){D x=0,y=0,J=l[0],19=l[0],6R=1a,9l=1a,69,6d=0,6c=0,W=q.1j({7a:Y,5J:Y,61:1a,6a:Y},W||{});do{x+=19.8w||0;y+=19.8y||0;B(q.18.4f||q.18.1C){D bt=1b(q.K(19,\'4a\'))||0;D bl=1b(q.K(19,\'4n\'))||0;x+=bl;y+=bt;B(q.18.4f&&19!=J&&q.K(19,\'4M\')!=\'3q\'){x+=bl;y+=bt}B(q.K(19,\'28\')==\'40\')6R=Y;B(q.K(19,\'28\')==\'5l\')9l=Y}B(W.6a){69=19.c7;do{6d+=19.35||0;6c+=19.2U||0;19=19.1w;B(q.18.4f&&19!=J&&19!=69&&q.K(19,\'4M\')!=\'3q\'){x+=1b(q.K(19,\'4n\'))||0;y+=1b(q.K(19,\'4a\'))||0}}2I(69&&19!=69)}L 19=19.c7;B(19&&(19.7H.2q()==\'1r\'||19.7H.2q()==\'2f\')){B((q.18.3b||(q.18.1C&&q.5c))&&q.K(J,\'28\')!=\'40\'){x+=1b(q.K(19,\'c8\'))||0;y+=1b(q.K(19,\'c9\'))||0}B((q.18.4f&&!6R)||(q.18.1C&&q.K(J,\'28\')==\'59\'&&(!9l||!6R))){x+=1b(q.K(19,\'4n\'))||0;y+=1b(q.K(19,\'4a\'))||0}2Z}}2I(19);B(!W.7a){x-=1b(q.K(J,\'c8\'))||0;y-=1b(q.K(J,\'c9\'))||0}B(W.5J&&(q.18.3b||q.18.3D)){x+=1b(q.K(J,\'4n\'))||0;y+=1b(q.K(J,\'4a\'))||0}L B(!W.5J&&!(q.18.3b||q.18.3D)){x-=1b(q.K(J,\'4n\'))||0;y-=1b(q.K(J,\'4a\'))||0}B(W.61){x+=1b(q.K(J,\'9m\'))||0;y+=1b(q.K(J,\'9o\'))||0}B(W.6a&&q.18.3D&&q.K(J,\'1K\')==\'f5\'){6d-=J.35||0;6c-=J.2U||0}D 4K=W.6a?{2v:y-6c,2s:x-6d,2U:6c,35:6d}:{2v:y,2s:x};B(9p){q.1j(9p,4K);C l}L{C 4K}};(u($){$.fn.f6=q.fn.9r=u(s){B(!($.18.1C&&R 7R==\'u\'))C l;s=$.1j({2v:\'3T\',2s:\'3T\',2e:\'3T\',1i:\'3T\',1N:Y,3s:\'ce:1a;\'},s||{});D 12=u(n){C n&&n.23==5L?n+\'2o\':n},2f=\'<cd 4F="9r"f7="0"f8="-1"3s="\'+s.3s+\'"\'+\'1F="1K:44;28:40;z-2V:-1;\'+(s.1N!==1a?\'1z:f9(fa=\\\'0\\\');\':\'\')+\'2v:\'+(s.2v==\'3T\'?\'7N(((1b(l.1w.6h.4a)||0)*-1)+\\\'2o\\\')\':12(s.2v))+\';\'+\'2s:\'+(s.2s==\'3T\'?\'7N(((1b(l.1w.6h.4n)||0)*-1)+\\\'2o\\\')\':12(s.2s))+\';\'+\'2e:\'+(s.2e==\'3T\'?\'7N(l.1w.42+\\\'2o\\\')\':12(s.2e))+\';\'+\'1i:\'+(s.1i==\'3T\'?\'7N(l.1w.2X+\\\'2o\\\')\':12(s.1i))+\';\'+\'"/>\';C l.16(u(){B(!$(\'cd.9r\',l)[0])l.5r(U.7v(2f),l.29)})}})(q);(u($){$.1j({1Z:{cg:0}});$.fn.1Z=u(2N,G){B(R 2N==\'3x\')G=2N;G=$.1j({2N:(2N&&R 2N==\'3i\'&&2N>0)?--2N:0,3r:14,3G:$.5H?Y:1a,4D:1a,cf:\'4D-43-\',9G:14,9F:14,9J:14,9K:14,9E:\'aF\',cp:14,cq:14,ci:1a,66:14,6r:14,6s:14,7S:\'1Z-2g\',4s:\'1Z-3H\',6o:\'1Z-3r\',6k:\'1Z-1W\',8a:\'1Z-1u\',9V:\'1Z-fd\',ch:\'2a\'},G||{});$.18.6X=$.18.6X||$.18.1C&&R 7R==\'u\';u 9t(){9X(0,0)}C l.16(u(){D 1W=l;D 2g=$(\'6P.\'+G.7S,1W);2g=2g.4u()&&2g||$(\'>6P:eq(0)\',1W);D 1Z=$(\'a\',2g);B(G.4D){D 9R={};1Z.16(u(){$(l).2f(\'<46>\'+$(l).2f()+\'</46>\');D T=G.cf+(++$.1Z.cg);D 27=\'#\'+T;9R[27]=l.5y;l.5y=27;$(\'<2a T="\'+T+\'" 4F="\'+G.6k+\'"></2a>\').6n(1W)})}D 2B=$(\'2a.\'+G.6k,1W);2B=2B.4u()&&2B||$(\'>\'+G.ch,1W);2g.34(\'.\'+G.7S)||2g.2E(G.7S);2B.16(u(){D $$=$(l);$$.34(\'.\'+G.6k)||$$.2E(G.6k)});D 9s=$(\'1G\',2g).2V($(\'1G.\'+G.4s,2g)[0]);B(9s>=0){G.2N=9s}B(5w.27){1Z.16(u(i){B(l.27==5w.27){G.2N=i;B(($.18.1C||$.18.3D)&&!G.4D){D 1U=$(5w.27);D 89=1U.1q(\'T\');1U.1q(\'T\',\'\');3g(u(){1U.1q(\'T\',89)},ff)}9t();C 1a}})}B($.18.1C){9t()}2B.1z(\':eq(\'+G.2N+\')\').1B().3p().2l(\':eq(\'+G.2N+\')\').2E(G.8a);B(!G.4D){$(\'1G\',2g).3u(G.4s).eq(G.2N).2E(G.4s)}B(G.ci){D 9B=u(2S){D 9T=$.4C(2B.2M(),u(el){D h,9v=$(el);B(2S){B($.18.6X){el.1F.fg(\'cl\');el.1F.1i=\'\';el.7Y=14}h=9v.K({\'4A-1i\':\'\'}).1i()}L{h=9v.1i()}C h}).fh(u(a,b){C b-a});B($.18.6X){2B.16(u(){l.7Y=9T[0]+\'2o\';l.1F.fi(\'cl\',\'l.1F.1i = l.7Y ? l.7Y : "4R"\')})}L{2B.K({\'4A-1i\':9T[0]+\'2o\'})}};9B();D 81=1W.42;D 9C=1W.2X;D 9A=$(\'#1Z-cm-9y-4u\').2M(0)||$(\'<46 T="1Z-cm-9y-4u">M</46>\').K({1K:\'44\',28:\'40\',8b:\'2z\'}).6n(U.1r).2M(0);D 84=9A.2X;6l(u(){D 82=1W.42;D 9D=1W.2X;D 85=9A.2X;B(9D>9C||82!=81||85!=84){9B((82>81||85<84));81=82;9C=9D;84=85}},50)}D 5A={},5t={},9P=G.cp||G.9E,9O=G.cq||G.9E;B(G.9F||G.9G){B(G.9F){5A[\'1i\']=\'1B\';5t[\'1i\']=\'1u\'}B(G.9G){5A[\'1N\']=\'1B\';5t[\'1N\']=\'1u\'}}L{B(G.9J){5A=G.9J}L{5A[\'4A-2e\']=0;9P=G.3G?50:1}B(G.9K){5t=G.9K}L{5t[\'4A-2e\']=0;9O=G.3G?50:1}}D 66=G.66,6r=G.6r,6s=G.6s;1Z.2L(\'a1\',u(){D 1G=$(l).3B(\'1G:eq(0)\');B(1W.8c||1G.34(\'.\'+G.4s)||1G.34(\'.\'+G.6o)){C 1a}D 27=l.27;B($.18.1C){$(l).2j(\'2Y\');B(G.3G){$.5H.4o(27);5w.27=27.1P(\'#\',\'\')}}L B($.18.3b){D cs=$(\'<1T cr="\'+27+\'"><2a><3R H="3W" F="h" /></2a></1T>\').2M(0);cs.3W();$(l).2j(\'2Y\');B(G.3G){$.5H.4o(27)}}L{B(G.3G){5w.27=27.1P(\'#\',\'\')}L{$(l).2j(\'2Y\')}}});1Z.2L(\'8g\',u(){D 1G=$(l).3B(\'1G:eq(0)\');B($.18.3b){1G.31({1N:0},1,u(){1G.K({1N:\'\'})})}1G.2E(G.6o)});B(G.3r&&G.3r.I){V(D i=0,k=G.3r.I;i<k;i++){1Z.eq(--G.3r[i]).2j(\'8g\').3p()}};1Z.2L(\'a2\',u(){D 1G=$(l).3B(\'1G:eq(0)\');1G.3u(G.6o);B($.18.3b){1G.31({1N:1},1,u(){1G.K({1N:\'\'})})}});1Z.2L(\'2Y\',u(e){D 6u=e.9L;D 4O=l,1G=$(l).3B(\'1G:eq(0)\'),1U=$(l.27),2p=2B.1z(\':3q\');B((R 66==\'u\'&&66(l,1U[0],2p[0])==1a&&6u)||1W.8c||1G.34(\'.\'+G.4s)||1G.34(\'.\'+G.6o)){l.8f();C 1a}1W[\'8c\']=Y;B(1U.4u()){B($.18.1C&&G.3G){D 89=l.27.1P(\'#\',\'\');1U.1q(\'T\',\'\');3g(u(){1U.1q(\'T\',89)},0)}u 9U(){B(G.3G&&6u){$.5H.4o(4O.27)}2p.31(5t,9O,u(){$(4O).3B(\'1G:eq(0)\').2E(G.4s).cv().3u(G.4s);B(R 6r==\'u\'){6r(4O,1U[0],2p[0])}2p.2E(G.8a).K({1K:\'\',4M:\'\',1i:\'\',1N:\'\'});1U.3u(G.8a).31(5A,9P,u(){1U.K({4M:\'\',1i:\'\',1N:\'\'});B($.18.1C){2p[0].1F.1z=\'\';1U[0].1F.1z=\'\'}B(R 6s==\'u\'){6s(4O,1U[0],2p[0])}1W.8c=14})})}B(!G.4D){9U()}L{D $$=$(l),46=$(\'46\',l)[0],1L=46.3Z;$$.2E(G.9V);46.3Z=\'fj&#fm;\';3g(u(){$(4O.27).48(9R[4O.27],u(){9U();46.3Z=1L;$$.3u(G.9V)})},0)}}L{7b(\'fo 34 8l fp 1W.\')}D 9Y=1g.8D||U.3c&&U.3c.35||U.1r.35||0;D a0=1g.8G||U.3c&&U.3c.2U||U.1r.2U||0;3g(u(){1g.9X(9Y,a0)},0);l.8f();C G.3G&&!!6u});B(G.4D){1Z.eq(G.2N).2j(\'2Y\').3p()}B(G.3G){$.5H.cE(u(){1Z.eq(G.2N).2j(\'2Y\').3p()})}})};D 6z=[\'a1\',\'8g\',\'a2\'];V(D i=0;i<6z.I;i++){$.fn[6z[i]]=(u(a5){C u(43){C l.16(u(){D 2g=$(\'6P.1Z-2g\',l);2g=2g.4u()&&2g||$(\'>6P:eq(0)\',l);D a;B(!43||R 43==\'3i\'){a=$(\'1G a\',2g).eq((43&&43>0&&43-1||0))}L B(R 43==\'1R\'){a=$(\'1G a[@5y$="#\'+43+\'"]\',2g)}a.2j(a5)})}})(6z[i])}})(q);q.1j(q.fn,{aQ:u(W){D N=1S q.N(W,l[0]);N.1v=l.3w(":3R:2l(:3W):2l(:2S)").4L(u(){N.4b=l});B(N.G.78){l.3W(u(P){B(N.G.3n)P.3X();C N.1T()})}B(N.G.P){N.1v.2L(N.G.P,u(){N.E(l)})}C N},1y:u(t){C l.72(q.3V(l.2M(),t))},5x:u(T){C l.1z("[@V=\'"+T+"\']")}});q.1j(q.2r[":"],{aW:"!q.38(a.F)",aY:"!!q.38(a.F)"});q.N=u(W,1T){l.G=q.1j({},q.N.49,W);l.5o=1T;l.4p=l.G.4U;l.7q=l.4p.I&&l.4p||q(1T);l.2B=l.G.76.2m(l.G.4U);l.2S()};q.1j(q.N,{49:{3E:{},3e:"1m",7L:Y,76:q([]),4U:q([]),78:Y},b0:u(G){q.1j(q.N.49,G)},3E:{1l:"b3 b4 34 1l.",6x:"1M 1J a F 8l b7 b9 {0} 5G.",6Q:"1M 1J a F ba at bc {0} 5G.",6y:"1M 1J a F 7i {0} 7k {1} 5G bh.",4S:"1M 1J a 2R 4S bi.",1f:"1M 1J a 2R bj.",2n:"1M 1J a 2R 2n.",6G:"1M 1J a 2R 2n (bm).",6E:"7e 7f 7Q 57 bn¼bo bp 57.",3i:"1M 1J a 2R 3i.",6I:"7e 7f 7Q bq bv 57.",5E:"1M 1J 9j 5E",6J:"1M 1J 7y bx F by.",6D:"1M 1J a F 7i {0} 7k {1}.",6B:"1M 1J a F bB 7o 4v 7p 3N {0}.",6A:"1M 1J a F bC 7o 4v 7p 3N {0}."},5g:{1T:u(){l.5h();V(D i=0,E;E=l.1v[i++];){l.4h(E)}C l.2R()},E:u(E){l.7s(E);l.4h(E);l.3F()},3F:u(2T){B(2T)q.1j(l.2C,2T);l.G.3F?l.G.3F(l.2C,l):l.7K()},5f:u(){B(q.fn.5f)q(l.5o).5f();l.5h();l.51();l.1v.3u(l.G.3e)},3I:u(7n){C q(7n)[0]},2T:u(){C q("7Z."+l.G.3e,l.7q)},2S:u(E){l.2C={};l.1U=$([]);l.2p=$([])},5h:u(){l.2S();l.2p=l.2T().1y(l.2B);l.1U.1y(l.2B)},7s:u(E){l.2S();l.2p=l.2T().5x(l.4k(l.3I(E)))},4h:u(E){E=l.3I(E);q(E).3u(l.G.3e);D 2c=l.2c(E);V(D i=0,1Q;1Q=2c[i++];){3A{D 22=q.N.1k[1Q.2d](q.38(E.F),E,1Q.5v);B(22===-1)2Z;B(!22){q(E).2E(l.G.3e);l.7A(1Q,E);2Z}}3z(e){l.G.3n&&1g.30&&30.1m("bM bO bS bT E "+E.T+", 4h 7y \'"+1Q.2d+"\' 2d");9e e}}},26:u(T,1Q){D m=l.G.3E[T];C m&&(m.23==2D?m:m[1Q.2d])},7A:u(1Q,E){D T=l.4k(E),O=1Q.5v;l.2C[T]=(E.2H||l.26(T,1Q)||q.N.3E[1Q.2d]||"<7F>bW: bY 26 c0 V "+T+"</7F>").1P("{0}",(O.23==3k?O[0]:O)||"").1P("{1}",O[1]||"")},2R:u(){B(l.7J()){l.3F();C 1a}L{l.51();B(l.G.7I){l.G.7I(l.5o);C 1a}C Y}},7J:u(){D 4J=0;q.16(l.2C,u(){4J++});C 4J},51:u(){l.3d("7V")},3d:u(4Y){D 3v=l;u 4m(){C 3v["3N"+4Y]}B(l.G.4r){4m().1y(4m().3B(l.G.4r))}4m()[4Y.2q()]();C l},7K:u(){D 2w=Y;V(D 47 25 l.2C){B(2w&&l.G.7L){B(l.4b&&l.2C[l.4b.T])l.4b.4L();L{3A{D E=q("#"+47);B(E.I)E[0].4L()}3z(e){l.G.3n&&1g.30&&30.1m(e)}}2w=1a}l.7X(47,l.2C[47])}l.2p=l.2p.2l(l.1U);l.3d("7V").3d("cj")},7X:u(T,26){D 1m=l.2T().5x(T);B(1m.I){B(1m.1q("80")){1m.2f(26)}}L{1m=q("<7Z>").1q({"V":T,80:Y}).2E(l.G.3e).2f(26);B(l.G.4r){1m=1m.1u().1B().4q("<"+l.G.4r+">").19()}B(!l.4p.3l(1m).I)l.G.86?l.G.86(1m,q("#"+T)):1m.9H("#"+T)}l.1U.1y(1m)},2c:u(E){B(!l.S(E))C[];D 2c=[];q.16(l.S(E),u(2P,F){2c[2c.I]={2d:2P,5v:F}});C 2c},S:u(E){C l.G.2c?l.G.2c[l.4k(E)]:l.G.88?q(E).S()[l.G.88]:q(E).S()},4k:u(E){D T=(/3S|4d/i.1o(E.H))?E.1e:E.T;B(!T){D 5z=E.1T.T,5B=/[^a-cu-2u-9\\-6q]/g;T=E.T=(5z?5z.1P(5B,""):"")+E.1e.1P(5B,"")}C T}},3C:u(F,E){4P(E.1I.2q()){39\'3Q\':C q("21:3H",E).I;39\'3R\':B(/3S|4d/i.1o(E.H))C q(E.1T||U).3w(\'[@1e="\'+E.1e+\'"]:4N\').I}C F.I},8e:u(O,E){C l.5C[R O]?l.5C[R O](O,E):Y},5C:{"5M":u(O,E){C O},"1R":u(O,E){C!!q(O,E.1T).I},"u":u(O,E){C O(E)}},1k:{1l:u(F,E,O){B(!q.N.8e(O,E))C-1;4P(E.1I.2q()){39\'3Q\':D W=q("21:3H",E);C W.I>0&&(E.H=="3Q-9Z"||W[0].F.I>0);39\'3R\':4P(E.H.2q()){39\'4d\':39\'3S\':C q.N.3C(F,E)>0}a3:C F.I>0}},a4:u(F,E,O){C!q.N.1k.1l(F,E)||O.1o(F)},6Q:u(F,E,O){D I=q.N.3C(F,E);C!q.N.1k.1l(F,E)||I>=O},6x:u(F,E,O){D I=q.N.3C(F,E);C!q.N.1k.1l(F,E)||I<=O},6y:u(F,E,O){D I=q.N.3C(F,E);C!q.N.1k.1l(F,E)||(I>=O[0]&&I<=O[1])},6A:u(F,E,O){C!q.N.1k.1l(F,E)||F>=O},6B:u(F,E,O){C!q.N.1k.1l(F,E)||F<=O},6D:u(F,E,O){C!q.N.1k.1l(F,E)||(F>=O[0]&&F<=O[1])},4S:u(F,E){C!q.N.1k.1l(F,E)||/^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$/i.1o(F)},1f:u(F,E){C!q.N.1k.1l(F,E)||/^(a8?|a9):\\/\\/[A-2u-9](\\.?[A-2u-5n„1xœ1x–][A-2u-5k\\-1x„1xœ1x–]*)*(\\/([A-2u-5n„1xœ1x–][A-2u-5k\\-\\.1x„1xœ1x–]*)?)*(\\?([A-2u-5n„1xœ1x–][A-2u-5k\\-\\.%\\+=&1x„1xœ1x–]*)?)?$/i.1o(F)},2n:u(F,E){C!q.N.1k.1l(F,E)||!/aK|8X/.1o(1S 5m(F))},6G:u(F,E){C!q.N.1k.1l(F,E)||/^\\d{4}[/-]\\d{1,2}[/-]\\d{1,2}$/.1o(F)},6E:u(F,E){C!q.N.1k.1l(F,E)||/^\\d\\d?\\.\\d\\d?\\.\\d\\d\\d?\\d?$/.1o(F)},3i:u(F,E){C!q.N.1k.1l(F,E)||/^-?[,0-9]+(\\.\\d+)?$/.1o(F)},6I:u(F,E){C!q.N.1k.1l(F,E)||/^-?[\\.0-9]+(,\\d+)?$/.1o(F)},5E:u(F,E){C!q.N.1k.1l(F,E)||/^\\d+$/.1o(F)},6J:u(F,E,O){C F==q(""+O).1Y()}},ax:u(1e,2d,26){q.N.1k[1e]=2d;q.N.3E[1e]=26}});(u(){u 2m(1e,2d){B(!3k.5g[1e]){3k.5g[1e]=2d}};2m("cG",u(1D,1X){1X=1X||1g;V(D i=0;i<l.I;i++)1D.3h(1X,l[i],i,l)});2m("cH",u(1D,1X){1X=1X||1g;V(D i=0;i<l.I;i++)B(!1D.3h(1X,l[i],i,l))C 1a;C Y});2m("cI",u(1D,1X){1X=1X||1g;V(D i=0;i<l.I;i++)B(1D.3h(1X,l[i],i,l))C Y;C 1a});2m("4C",u(1D,1X){1X=1X||1g;D r=[];V(D i=0;i<l.I;i++)r[r.I]=1D.3h(1X,l[i],i,l);C r});2m("1z",u(1D,1X){1X=1X||1g;D r=[];V(D i=0;i<l.I;i++)B(1D.3h(1X,l[i],i,l))r[r.I]=l[i];C r});2m("1O",u(a6,8h){V(D i=8h||0;i<l.I;i++)B(l[i]===a6)C i;C-1});2m("8j",u(){C l.1z(u(E,2V,9x){C 9x.1O(E)>=2V})})})();(u($){D 1t={},2b,2H,5T,8R=$.18.1C&&/cL\\s(5\\.5|6\\.)/.1o(c6.ca);$.fn.1j({6U:u(G){G=$.1j({},$.6U.49,G);ag();l.1z(\'[@2H]\').16(u(){l.2F=G}).2L("54",aj).2L(G.P,6C);C l},6W:8R?u(){C l.16(u(){D 55=$(l).K(\'8q\');B(55.2K(/^1f\\(["\'](.*\\.cP)["\']\\)$/i)){55=4G.$1;$(l).K({\'8q\':\'2y\',\'1z\':"cR:cT.ac.cV(ad=Y, cW=cX, 3s=\'"+55+"\')"}).16(u(){D 28=$(l).K(\'28\');B(28!=\'40\'&&28!=\'5l\')$(l).K(\'28\',\'5l\')})}})}:u(){C l},aL:8R?u(){C l.16(u(){$(l).K({\'1z\':\'\',8q:\'\'})})}:u(){C l},ak:u(1e,F){D 22=l.1q(1e);l.1q(1e,F);C 22},av:u(){C l.16(u(){$(l)[$(l).2f()?"1B":"1u"]()})},1f:u(){C l.1q(\'5y\')||l.1q(\'3s\')}});u ag(){B(1t.19)C;1t.19=$(\'<2a T="d3"><8k></8k><p 4F="1r"></p><p 4F="1f"></p></2a>\').1u().K({28:\'40\',d4:"d6"}).6n(\'1r\');1t.2H=$(\'8k\',1t.19);1t.1r=$(\'p.1r\',1t.19);1t.1f=$(\'p.1f\',1t.19)}u 6C(P){B(l.2F.8O)5T=3g(1B,l.2F.8O);L 1B();B(l.2F.db)$(\'1r\').2L(\'8u\',4o);4o(P);B(l.2F.P!="2Y")$(l).2L(\'2Y\',1u);$(l).2L(\'6V\',1u)}u aj(){B(l==2b||!l.2H)C;2b=l;2H=$(l).ak(\'2H\',\'\');B(l.2F.am){1t.2H.1u();1t.1r.2f(l.2F.am.3h(l)).1B()}L B(l.2F.ck){D 9q=2H.4x(l.2F.ck);1t.2H.2f(9q.7M()).1B();1t.1r.6f();V(D i=0,8t;8t=9q[i];i++){B(i>0)1t.1r.3l("<br/>");1t.1r.3l(8t)}1t.1r.av()}L{1t.2H.2f(2H).1B();1t.1r.1u()}B(l.2F.aP&&$(l).1f())1t.1f.2f($(l).1f().1P(\'dm://\',\'\')).1B();L 1t.1f.1u();1t.19.2E(l.2F.8Q);B(l.2F.6W)1t.19.6W()}u 1B(){5T=14;1t.19.1B();4o()}u 4o(P){B(2b==14){$(\'1r\').5K(\'8u\',4o);C}D 2s=1t.19[0].8w;D 2v=1t.19[0].8y;B(P){2s=P.8v+15;2v=P.aw+15;1t.19.K({2s:2s+\'2o\',2v:2v+\'2o\'})}D v=aB(),h=1t.19[0];B(v.x+v.cx<h.8w+h.42){2s-=h.42+20;1t.19.K({2s:2s+\'2o\'})}B(v.y+v.cy<h.8y+h.2X){2v-=h.2X+20;1t.19.K({2v:2v+\'2o\'})}}u aB(){D e=U.3c||{},b=U.1r||{},w=1g;u 4A(){D v=dt;V(D i=0;i<11.I;i++){D n=11[i];B(n&&n<v)v=n}C v}C{x:w.8D||e.35||b.35||0,y:w.8G||e.2U||b.2U||0,cx:4A(e.5Q,b.5Q,w.8I),cy:4A(e.4c,b.4c,w.5U)}}u 1u(P){B(5T)co(5T);2b=14;1t.19.1u().3u(l.2F.8Q);B(P.H!="2Y"){$(l).1q(\'2H\',2H).5K(\'6V\',1u)}B(l.2F.P!="2Y")$(l).5K(\'2Y\',1u);B(l.2F.6W)1t.19.aL()}$.6U={};$.6U.49={8O:dP,P:"54",aP:Y,8Q:""}})(q);q.1j(q.fn,{aQ:u(W){D N=1S q.N(W,l[0]);N.1v=l.3w(":3R:2l(:3W):2l(:2S)").4L(u(){N.4b=l});B(N.G.78){l.3W(u(P){B(N.G.3n)P.3X();C N.1T()})}B(N.G.P){N.1v.2L(N.G.P,u(){N.E(l)})}C N},1y:u(t){C l.72(q.3V(l.2M(),t))},5x:u(T){C l.1z("[@V=\'"+T+"\']")}});q.1j(q.2r[":"],{aW:"!q.38(a.F)",aY:"!!q.38(a.F)"});q.N=u(W,1T){l.G=q.1j({},q.N.49,W);l.5o=1T;l.4p=l.G.4U;l.7q=l.4p.I&&l.4p||q(1T);l.2B=l.G.76.2m(l.G.4U);l.2S()};q.1j(q.N,{49:{3E:{},3e:"1m",7L:Y,76:q([]),4U:q([]),78:Y},b0:u(G){q.1j(q.N.49,G)},3E:{1l:"b3 b4 34 1l.",6x:"1M 1J a F 8l b7 b9 {0} 5G.",6Q:"1M 1J a F ba at bc {0} 5G.",6y:"1M 1J a F 7i {0} 7k {1} 5G bh.",4S:"1M 1J a 2R 4S bi.",1f:"1M 1J a 2R bj.",2n:"1M 1J a 2R 2n.",6G:"1M 1J a 2R 2n (bm).",6E:"7e 7f 7Q 57 bn¼bo bp 57.",3i:"1M 1J a 2R 3i.",6I:"7e 7f 7Q bq bv 57.",5E:"1M 1J 9j 5E",6J:"1M 1J 7y bx F by.",6D:"1M 1J a F 7i {0} 7k {1}.",6B:"1M 1J a F bB 7o 4v 7p 3N {0}.",6A:"1M 1J a F bC 7o 4v 7p 3N {0}."},5g:{1T:u(){l.5h();V(D i=0,E;E=l.1v[i++];){l.4h(E)}C l.2R()},E:u(E){l.7s(E);l.4h(E);l.3F()},3F:u(2T){B(2T)q.1j(l.2C,2T);l.G.3F?l.G.3F(l.2C,l):l.7K()},5f:u(){B(q.fn.5f)q(l.5o).5f();l.5h();l.51();l.1v.3u(l.G.3e)},3I:u(7n){C q(7n)[0]},2T:u(){C q("7Z."+l.G.3e,l.7q)},2S:u(E){l.2C={};l.1U=$([]);l.2p=$([])},5h:u(){l.2S();l.2p=l.2T().1y(l.2B);l.1U.1y(l.2B)},7s:u(E){l.2S();l.2p=l.2T().5x(l.4k(l.3I(E)))},4h:u(E){E=l.3I(E);q(E).3u(l.G.3e);D 2c=l.2c(E);V(D i=0,1Q;1Q=2c[i++];){3A{D 22=q.N.1k[1Q.2d](q.38(E.F),E,1Q.5v);B(22===-1)2Z;B(!22){q(E).2E(l.G.3e);l.7A(1Q,E);2Z}}3z(e){l.G.3n&&1g.30&&30.1m("bM bO bS bT E "+E.T+", 4h 7y \'"+1Q.2d+"\' 2d");9e e}}},26:u(T,1Q){D m=l.G.3E[T];C m&&(m.23==2D?m:m[1Q.2d])},7A:u(1Q,E){D T=l.4k(E),O=1Q.5v;l.2C[T]=(E.2H||l.26(T,1Q)||q.N.3E[1Q.2d]||"<7F>bW: bY 26 c0 V "+T+"</7F>").1P("{0}",(O.23==3k?O[0]:O)||"").1P("{1}",O[1]||"")},2R:u(){B(l.7J()){l.3F();C 1a}L{l.51();B(l.G.7I){l.G.7I(l.5o);C 1a}C Y}},7J:u(){D 4J=0;q.16(l.2C,u(){4J++});C 4J},51:u(){l.3d("7V")},3d:u(4Y){D 3v=l;u 4m(){C 3v["3N"+4Y]}B(l.G.4r){4m().1y(4m().3B(l.G.4r))}4m()[4Y.2q()]();C l},7K:u(){D 2w=Y;V(D 47 25 l.2C){B(2w&&l.G.7L){B(l.4b&&l.2C[l.4b.T])l.4b.4L();L{3A{D E=q("#"+47);B(E.I)E[0].4L()}3z(e){l.G.3n&&1g.30&&30.1m(e)}}2w=1a}l.7X(47,l.2C[47])}l.2p=l.2p.2l(l.1U);l.3d("7V").3d("cj")},7X:u(T,26){D 1m=l.2T().5x(T);B(1m.I){B(1m.1q("80")){1m.2f(26)}}L{1m=q("<7Z>").1q({"V":T,80:Y}).2E(l.G.3e).2f(26);B(l.G.4r){1m=1m.1u().1B().4q("<"+l.G.4r+">").19()}B(!l.4p.3l(1m).I)l.G.86?l.G.86(1m,q("#"+T)):1m.9H("#"+T)}l.1U.1y(1m)},2c:u(E){B(!l.S(E))C[];D 2c=[];q.16(l.S(E),u(2P,F){2c[2c.I]={2d:2P,5v:F}});C 2c},S:u(E){C l.G.2c?l.G.2c[l.4k(E)]:l.G.88?q(E).S()[l.G.88]:q(E).S()},4k:u(E){D T=(/3S|4d/i.1o(E.H))?E.1e:E.T;B(!T){D 5z=E.1T.T,5B=/[^a-cu-2u-9\\-6q]/g;T=E.T=(5z?5z.1P(5B,""):"")+E.1e.1P(5B,"")}C T}},3C:u(F,E){4P(E.1I.2q()){39\'3Q\':C q("21:3H",E).I;39\'3R\':B(/3S|4d/i.1o(E.H))C q(E.1T||U).3w(\'[@1e="\'+E.1e+\'"]:4N\').I}C F.I},8e:u(O,E){C l.5C[R O]?l.5C[R O](O,E):Y},5C:{"5M":u(O,E){C O},"1R":u(O,E){C!!q(O,E.1T).I},"u":u(O,E){C O(E)}},1k:{1l:u(F,E,O){B(!q.N.8e(O,E))C-1;4P(E.1I.2q()){39\'3Q\':D W=q("21:3H",E);C W.I>0&&(E.H=="3Q-9Z"||W[0].F.I>0);39\'3R\':4P(E.H.2q()){39\'4d\':39\'3S\':C q.N.3C(F,E)>0}a3:C F.I>0}},a4:u(F,E,O){C!q.N.1k.1l(F,E)||O.1o(F)},6Q:u(F,E,O){D I=q.N.3C(F,E);C!q.N.1k.1l(F,E)||I>=O},6x:u(F,E,O){D I=q.N.3C(F,E);C!q.N.1k.1l(F,E)||I<=O},6y:u(F,E,O){D I=q.N.3C(F,E);C!q.N.1k.1l(F,E)||(I>=O[0]&&I<=O[1])},6A:u(F,E,O){C!q.N.1k.1l(F,E)||F>=O},6B:u(F,E,O){C!q.N.1k.1l(F,E)||F<=O},6D:u(F,E,O){C!q.N.1k.1l(F,E)||(F>=O[0]&&F<=O[1])},4S:u(F,E){C!q.N.1k.1l(F,E)||/^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$/i.1o(F)},1f:u(F,E){C!q.N.1k.1l(F,E)||/^(a8?|a9):\\/\\/[A-2u-9](\\.?[A-2u-5n„1xœ1x–][A-2u-5k\\-1x„1xœ1x–]*)*(\\/([A-2u-5n„1xœ1x–][A-2u-5k\\-\\.1x„1xœ1x–]*)?)*(\\?([A-2u-5n„1xœ1x–][A-2u-5k\\-\\.%\\+=&1x„1xœ1x–]*)?)?$/i.1o(F)},2n:u(F,E){C!q.N.1k.1l(F,E)||!/aK|8X/.1o(1S 5m(F))},6G:u(F,E){C!q.N.1k.1l(F,E)||/^\\d{4}[/-]\\d{1,2}[/-]\\d{1,2}$/.1o(F)},6E:u(F,E){C!q.N.1k.1l(F,E)||/^\\d\\d?\\.\\d\\d?\\.\\d\\d\\d?\\d?$/.1o(F)},3i:u(F,E){C!q.N.1k.1l(F,E)||/^-?[,0-9]+(\\.\\d+)?$/.1o(F)},6I:u(F,E){C!q.N.1k.1l(F,E)||/^-?[\\.0-9]+(,\\d+)?$/.1o(F)},5E:u(F,E){C!q.N.1k.1l(F,E)||/^\\d+$/.1o(F)},6J:u(F,E,O){C F==q(""+O).1Y()}},ax:u(1e,2d,26){q.N.1k[1e]=2d;q.N.3E[1e]=26}});(u($){$.fn.2k=u(W){C l.16(u(){$.2k(l,W)})};$.2k=u(1W,W){D G={\'4Q\':14,\'2k\':\'6j\',\'32\':du,\'77\':\'8V\',\'1p\':\'aF\',\'4F\':\'2k\',\'1i\':\'3T\'};B(W)$.1j(G,W);B(G.4Q===14)D 1v=$(1W).4Q();L D 1v=$(1W).4Q(G.4Q);B(1v.I>1){$(1W).K(\'28\',\'5l\');$(1W).K(\'1i\',G["1i"]);$(1W).2E(G["4F"]);V(D i=0;i<1v.I;i++){$(1v[i]).K(\'z-2V\',2D(1v.I-i));$(1v[i]).K(\'28\',\'40\');$(1v[i]).1u()};B(G["2k"]=="6j"){3g(u(){$.2k.79(1v,G,1,0)},G.32);$(1v[0]).1B()}L B(G["2k"]=="5p"){3g(u(){do{2b=4g.b5(4g.5p()*1v.I)}2I(2b==0)$.2k.79(1v,G,2b,0)},G.32);$(1v[0]).1B()}L 7b(\'q: 2k: 8i "2k" 9Q 9I be "6j" 4v "5p"\')}};$.2k.79=u(1v,G,2b,2t){B(G["77"]==\'b1\'){$(1v[2t]).aS(G.1p,$(1v[2b]).aU(G.1p))}L B(G["77"]==\'8V\'){$(1v[2t]).aV(G.1p);$(1v[2b]).aX(G.1p)}L 7b(\'q: 2k: 8i "77" 9Q 9I be "b1" 4v "8V"\');B(G["2k"]=="6j"){B((2b+1)<1v.I){2b=2b+1;2t=2b-1}L{2b=0;2t=1v.I-1}}L B(G["2k"]=="5p"){2t=2b;2I(2b==2t)2b=4g.b5(4g.5p()*1v.I)}L 7b(\'q: 2k: 8i "2k" 9Q 9I be "6j" 4v "5p"\');3g((u(){$.2k.79(1v,G,2b,2t)}),G.32)}})(q);(u($){$.3K=u(){l.45={};C};$.3K.5g={6t:u(){D Q={"T":14,"4I":4l,"7T":1a,"6Z":1a,"17":14,"36":u(){},"1E":[]};u 6i(fn){C(!!fn&&R fn!="1R"&&R fn[0]=="1c"&&4G("u","i").1o(fn+""))};D i=0;D 98=1a;B(R 11[i]=="3x"&&11.I>1){98=Y;i++}B(R 11[i]=="3x"){V(D 21 25 11[i])B(R Q[21]!="1c")Q[21]=11[i][21];i++}B(R 11[i]=="3i"||(R 11[i]=="1R"&&11[i].2K(4G("^[0-9]+[bP]$"))))Q["4I"]=11[i++];B(R 11[i]=="5M")Q["7T"]=11[i++];B(R 11[i]=="5M")Q["6Z"]=11[i++];B(R 11[i]=="3x"&&R 11[i+1]=="1R"&&6i(11[i][11[i+1]])){Q["17"]=11[i++];Q["36"]=11[i++]}L B(R 11[i]!="1c"&&(6i(11[i])||R 11[i]=="1R"))Q["36"]=11[i++];2I(R 11[i]!="1c")Q["1E"].1y(11[i++]);B(98){B(R 11[1]=="3x"){V(D 21 25 11[0])B(R Q[21]!="1c"&&R 11[1][21]=="1c")Q[21]=11[0][21]}L{V(D 21 25 11[0])B(R Q[21]!="1c")Q[21]=11[0][21]}i++}Q["7W"]=l;Q["83"]=14;D 2K=2D(Q["4I"]).2K(4G("^([0-9]+)([bP])$"));B(2K&&2K[0]!="1c"&&2K[1]!="1c")Q["4I"]=2D(1b(2K[1])*{s:4l,m:4l*60,h:4l*60*60,d:4l*60*60*24,w:4l*60*60*24*7}[2K[2]]);B(Q["T"]==14)Q["T"]=(2D(Q["7T"])+":"+2D(Q["6Z"])+":"+2D(Q["4I"])+":"+2D(Q["17"])+":"+2D(Q["36"])+":"+2D(Q["1E"]));B(Q["6Z"])B(R l.45[Q["T"]]!="1c")C l.45[Q["T"]];B(!6i(Q["36"])){B(Q["17"]!=14&&R Q["17"]=="3x"&&R Q["36"]=="1R"&&6i(Q["17"][Q["36"]]))Q["36"]=Q["17"][Q["36"]];L Q["36"]=7P("u () { "+Q["36"]+" }")}Q["83"]=l.7U(Q);l.45[Q["T"]]=Q;C Q},9M:u(Q){B(R Q=="1R")Q=l.45[Q];Q["83"]=l.7U(Q);C Q},7U:u(Q){D cn=u(){D 17=(Q["17"]!=14?Q["17"]:Q);(Q["36"]).1A(17,Q["1E"]);B(R(Q["7W"]).45[Q["T"]]!="1c"&&Q["7T"])(Q["7W"]).7U(Q);L 6m(Q["7W"]).45[Q["T"]]};C 3g(cn,Q["4I"])},9N:u(Q){B(R Q=="1R")Q=l.45[Q];B(R Q=="3x"){co(Q["83"]);6m l.45[Q["T"]]}}};$.1j({3K$:1S $.3K(),6t:u(){C $.3K$.6t.1A($.3K$,11)},9M:u(){C $.3K$.9M.1A($.3K$,11)},9N:u(){C $.3K$.9N.1A($.3K$,11)}});$.fn.1j({6t:u(){D a=[{}];V(D i=0;i<11.I;i++)a.1y(11[i]);C l.16(u(){a[0]={"T":l,"17":l};C $.6t.1A($,a)})}})})(q);(u($){$.1j({5q$:14,3n:u(cB){D cC=($.5q$==Y?Y:1a);$.5q$=(cB?Y:1a);C cC},6b:u(26){B($.5q$==Y)30.3n(26)}});$.fn.1j({6b:u(26){B($.5q$==Y){C l.16(u(){B(R 26!=="1c")$.6b(26);$.6b(l)})}}});$(U).3f(u(){D 6w=$("2f").1q("3n");B(6w=="Y"||6w=="1a")$.3n(6w=="Y"?Y:1a)});$(U).3f(u(){B(R 1g.30==="1c"){u cz(17){D 1L=14;B(R 17==="1c")1L="[1c]";L B(R 17==="5M")1L=(17?"Y":"1a");L B(R 17==="3i")1L=""+17;L B(R 17==="1R")1L=17;L B(R 17==="u")1L=17;L B(R 17==="3x"){B(R 17.2W!=="1c"){B(17.2W==1){1L=\'&9n;\';1L+=17.1I.2q();V(D i=0;i<17.9b.I;i++)1L+=\' \'+17.9b[i].1I.2q()+\'="\'+17.9b[i].6g+\'"\';1L+=\'&8n;\'}L B(17.2W==2)1L=17.1I+\'="\'+17.6g;L B(17.2W==3)1L=17.6g}L B(R 17.ar!=="1c")1L=17.ar();L B(R 17.5j!=="1c")1L=17.5j()}B(1L==14)1L="[ds]";C 1L};$(U).3f(u(){$("1r").3l(\'<2a T="4z"><4t></4t></2a>\');$("#4z").K("1K","2y").K("dH","dK").K("dQ","#dY").K("e5","#e7").K("61","7O 4W 7O 4W").K("5J","5Z a7 #e8").K("7a","5Z 5Z 5Z 5Z");$("#4z 4t").K("7a","4W 4W 4W 4W").K("8Y","ez")});D 9z=["6b","3n","eE","eI","1m","eL","63","eS","eV","f0","4I","f4","4J","fb","fc","fe"];1g.30={};V(D i=0;i<9z.I;i++){1g.30[9z[i]]=u(cD){$(\'#4z\').K("1K",$.5q$==Y?"44":"2y");$(\'#4z 4t\').3l(\'<1G>\'+cz(cD)+\'</1G>\').K;$("#4z 4t 1G").K("cF","4R a7 #cM").K("61","4R 7O 4R 7O")}}1g.30["4z"]=Y}})})(q);(u($){$.1j({dO:u(){D 1H={\'1f\':14,\'90\':Y,\'cb\':14,\'cw\':14};B(R 11[0]=="1R"){1H.1f=11[0];B(R 11[1]=="u")1H.cb=11[1]}L B(R 11[0]=="3x"){V(D 21 25 11[0])B(R 1H[21]!="1c")1H[21]=11[0][21]}D 87=$(U.7v(\'3Y\')).1q(\'H\',\'1L/ce\').1q(\'3s\',1H.1f);B(1H.90||1H.cb!==14){D 1h=u(){B(1H.cb!==14){D 1E=1H.cw;B(1E===14)1E=[];L B(!(R 1E==="3x"&&1E de 3k))1E=[1E];1H.cb.1A(l,1E)}B(1H.90)$(l).41()};B($.18.1C){87.2M(0).5F=u(){B(l.58=="3t"||l.58=="bb")1h.3h(l)}}L{$(87).48(1h)}}$(\'eW\',U).3l(87)}})})(q);',62,957,'|||||||||||||||||||||this|||||jQuery||||function|||||||if|return|var|element|value|settings|type|length|elem|css|else||validator|param|event|ctx|typeof|data|id|document|for|options||true|||arguments|prop||null||each|obj|browser|parent|false|parseInt|undefined|ret|name|url|window|callback|height|extend|methods|required|error|xml|test|speed|attr|body|cur|helper|hide|elements|parentNode|Ã|push|filter|apply|show|msie|handler|args|style|li|arg|nodeName|enter|display|text|Please|opacity|indexOf|replace|rule|string|new|form|toShow|status|container|scope|val|tabs||option|result|constructor||in|message|hash|position|firstChild|div|current|rules|method|width|html|nav|className|events|trigger|alternation|not|add|date|px|toHide|toLowerCase|expr|left|last|Z0|top|first|expires|none|hidden|global|containers|errorList|String|addClass|tSettings|context|title|while|opt|match|bind|get|initial|isFunction|key|num|valid|reset|errors|scrollTop|index|nodeType|offsetHeight|click|break|console|animate|timeout|queue|is|scrollLeft|func|old|trim|case|easing|safari|documentElement|toggle|errorClass|ready|setTimeout|call|number|target|Array|append|table|debug|elems|end|visible|disabled|src|complete|removeClass|self|find|object|params|catch|try|parents|getLength|opera|messages|showErrors|bookmarkable|selected|clean|nth|scheduler|ifModified|orig|to|tbody|done|select|input|radio|auto|duration|merge|submit|preventDefault|script|innerHTML|absolute|remove|offsetWidth|tab|block|bucket|span|elementID|load|defaults|borderTopWidth|lastActive|clientHeight|checkbox|tb|mozilla|Math|check|nextSibling|cookie|findId|1000|which|borderLeftWidth|update|labelContainer|wrap|wrapper|selectedClass|ol|size|or|firstNum|split|pushStack|jQueryDebug|min|oid|map|remote|fix|class|RegExp|encodeURIComponent|time|count|returnValue|focus|overflow|checked|clicked|switch|children|1px|email|curAnim|errorLabelContainer|grep|0px|now|that|tmp||hideErrors|sibling|guid|mouseover|image|oldblock|ein|readyState|static|timers|res|boxModel|exec|success|resetForm|prototype|prepareForm|re|toString|9_|relative|Date|9Ã|currentForm|random|_debug|insertBefore|stopPropagation|hideAnim|custom|parameters|location|forId|href|formId|showAnim|idcleanup|dependTypes|cssFloat|digits|onreadystatechange|characters|ajaxHistory|originalEvent|border|unbind|Number|boolean|ownerDocument|handlers|on|clientWidth|readyList|removeChild|tID|innerHeight|fx|curCSS|path|domain|4px||padding|substr|dir|multiFilter|re2|onClick|childNodes|has|op|scroll|log|st|sl|domManip|empty|nodeValue|currentStyle|_isfn|sequence|containerClass|setInterval|delete|appendTo|disabledClass|makeArray|_|onHide|onShow|schedule|trueClick|toUpperCase|req|maxLength|rangeLength|tabEvents|minValue|maxValue|handle|rangeValue|dateDE|tr|dateISO|mergeNum|numberDE|equalTo|inArray|token|foundToken|tag|getAttribute|ul|minLength|absparent|doc|isReady|Tooltip|mouseout|fixPNG|msie6|Function|protect|styleFloat|diff|setArray|parseFloat|step|oldDisplay|errorContainer|animation|onsubmit|_next|margin|alert|ajax|oHeight|Bitte|geben|setRequestHeader|oWidth|between|ival|and|async|handleError|selector|than|equal|errorContext|lastModified|prepareElement|responseText|jquery|createElement|defaultView|getTime|the|secure|formatAndAdd|cloneNode|max|child|modRes|strong|button|tagName|submitHandler|countErrors|defaultShowErrors|focusInvalid|shift|expression|10px|eval|Sie|XMLHttpRequest|navClass|repeat|_schedule|Hide|_scheduler|showError|minHeight|label|generated|cachedWidth|currentWidth|_handle|cachedFontSize|currentFontSize|errorPlacement|node|meta|toShowId|hideClass|visibility|locked|ajaxSettings|depend|blur|disableTab|offset|parameter|unique|h3|no|clone|gt|swap|getComputedStyle|backgroundImage|isXMLDoc|second|part|mousemove|pageX|offsetLeft|chars|offsetTop|pass|_resort|classFilter|matched|pageXOffset|triggered|slice|pageYOffset|float|innerWidth|handleHover|unload|getElementById|safariTimer|els|delay|fn2|extraClass|IE|from|startTime|lastNum|fade|GET|NaN|paddingRight|00|gc|clearInterval|isTimeout|dataType|requestDone|file|Modified|getResponseHeader|override|evalScripts|globalEval|attributes|active|join|throw|cookies|substring|parPos|cookieValue|only|appendChild|relparent|paddingLeft|lt|paddingTop|returnObject|parts|bgiframe|hasSelectedClass|unFocus|deep|jq|pos|array|font|names|watchFontSize|_setAutoHeight|cachedHeight|currentHeight|fxSpeed|fxSlide|fxFade|insertAfter|either|fxShow|fxHide|clientX|reschedule|cancel|hideSpeed|showSpeed|must|remoteUrls|lastToggle|heights|switchTab|loadingClass|inv|scrollTo|scrollX|multiple|scrollY|triggerTab|enableTab|default|regex|tabEvent|subject|solid|https|ftp|alpha|exclude|Microsoft|enabled|getPropertyValue|newProp|createHelper|zoom|100|save|getAndSetAttr||bodyHandler|webkit|timer|prepend|before|toJSONString|removeAttr||previousSibling|hideWhenEmpty|pageY|addMethod|tl|getElementsByTagName|parse|viewport|_prefix|even|odd|normal|unshift|srcElement|__ie_init|DOMContentLoaded|Invalid|unfixPNG|one|_toggle|state|showURL|validate|swing|slideUp|dequeue|slideDown|fadeOut|blank|fadeIn|filled|oldOverflow|setDefaults|slide|force|This|field|floor|getScript|longer|POST|then|of|loaded|least|processData||ajaxStart|ActiveXObject|long|address|URL|contentType||ISO|gÃ|ltiges|Datum|eine||beforeSend||ajaxSend|Nummer|notmodified|same|again|ajaxComplete|ajaxStop|less|greater|httpSuccess|200|httpNotModified|Last|304|xmlRes|httpData|json|execScript|exception|ywdhms|occured|smhdw|setTime|ajaxError|when|checking|toUTCString|_height|Warning|password|No|_width|defined|borderBottomWidth|ajaxSuccess|contains|paddingBottom|borderRightWidth|navigator|offsetParent|marginLeft|marginTop|userAgent||after|iframe|javascript|hashPrefix|remoteCount|tabStruct|fxAutoHeight|Show|showBody|behaviour|watch|trampoline|clearTimeout|fxShowSpeed|fxHideSpeed|action|tempForm||zA|siblings|cb_args|||object2text|prevObject|onoff|old_value|msg|initialize|borderBottom|forEach|every|some|createTextNode|FORM|MSIE|cccccc|weight|line|png|Left|progid|Width|DXImageTransform|right|AlphaImageLoader|sizingMethod|crop|thead|tfoot|td|th|htmlFor|tooltip|zIndex|readonly|3000|readOnly|getAttributeNode|setAttribute|ig|track|concat|compatible|instanceof|CSS1Compat|next|prev|prependTo|removeAttribute|toggleClass|lastChild|http|textarea||u0128|uFFFF|continue|unknown|Infinity|2000|clientY|cancelBubble|hover|fromElement|toElement|relatedTarget|resize|dblclick|mousedown|change|keydown|keypress|fontFamily|addEventListener|write|monospace|scr|ipt|defer|getScriptXS|250|backgroundColor|slideToggle|keyup|fadeTo|Object|slow|mouseup|600|ffffff|fast|removeEventListener|400|linear|cos|PI|color|10000|000000|666699|loadIfModified|serialize|textContent|getIfModified|getJSON|post|ajaxTimeout|ajaxSetup|application|www|urlencoded|XMLHTTP||open|Content|Type|If||Since|Thu|01|Jan|1970|GMT|Requested|With|20px|overrideMimeType|Connection|close|abort|info|send|protocol|300|warn|content|responseXML|assert|center|Bottom|horizontal|vertical|Right|365|dirxml|invalid|decodeURIComponent|group|head|scrollHeight|scrollWidth|outerHeight|groupEnd|noConflict|outerWidth|reverse|timeEnd|inline|bgIframe|frameborder|tabindex|Alpha|Opacity|trace|profile|loading|profileEnd|500|removeExpression|sort|setExpression|Loading|compatMode||8230||There|such|Top'.split('|'),0,{}))
  +eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('B(R 1h.q=="1c"){1h.1c=1h.1c;D q=u(a,c){B(1h==l)C 1R q(a,c);a=a||U;B(q.2F(a))C 1R q(U)[q.fn.3f?"3f":"4r"](a);B(R a=="1S"){D m=/^[^<]*(<(.|\\s)+>)[^>]*$/.5l(a);B(m)a=q.3C([m[1]]);L C 1R q(c).3t(a)}C l.71(a.22==3w&&a||(a.7r||a.I&&a!=1h&&!a.30&&a[0]!=1c&&a[0].30)&&q.6b(a)||[a])};B(R $!="1c")q.6r$=$;D $=q;q.fn=q.5o={7r:"1.1.2",4B:u(){C l.I},I:0,2n:u(2R){C 2R==1c?q.6b(l):l[2R]},4y:u(a){D 1d=q(a);1d.c2=l;C 1d},71:u(a){l.I=0;[].1y.1F(l,a);C l},16:u(fn,1C){C q.16(l,fn,1C)},34:u(17){D 9M=-1;l.16(u(i){B(l==17)9M=i});C 9M},1p:u(2T,F,H){D 17=2T;B(2T.22==2K)B(F==1c)C l.I&&q[H||"1p"](l[0],2T)||1c;L{17={};17[2T]=F}C l.16(u(34){V(D 14 23 17)q.1p(H?l.1I:l,14,q.14(l,17[14],H,34,14))})},K:u(2T,F){C l.1p(2T,F,"5P")},1A:u(e){B(R e=="1S")C l.68().3e(U.cP(e));D t="";q.16(e||l,u(){q.16(l.5O,u(){B(l.30!=8)t+=l.30!=1?l.5K:q.fn.1A([l])})});C t},4t:u(){D a,1C=11;C l.16(u(){B(!a)a=q.3C(1C,l.5R);D b=a[0].6I(Y);l.1u.5B(b,l);2G(b.2a)b=b.2a;b.9l(l)})},3e:u(){C l.6n(11,Y,1,u(a){l.9l(a)})},cd:u(){C l.6n(11,Y,-1,u(a){l.5B(a,l.2a)})},c9:u(){C l.6n(11,1a,1,u(a){l.1u.5B(a,l)})},ar:u(){C l.6n(11,1a,-1,u(a){l.1u.5B(a,l.4g)})},3l:u(){C l.c2||q([])},3t:u(t){C l.4y(q.8n(q.4v(l,u(a){C q.3t(t,a)})),t)},9h:u(9s){C l.4y(q.4v(l,u(a){D a=a.6I(9s!=1c?9s:Y);a.$2m=12;C a}))},1z:u(t){C l.4y(q.2F(t)&&q.55(l,u(el,34){C t.1F(el,[34])})||q.6e(t,l))},2i:u(t){C l.4y(t.22==2K&&q.6e(t,l,Y)||q.55(l,u(a){C(t.22==3w||t.7r)?q.7v(a,t)<0:a!=t}))},2l:u(t){C l.4y(q.3X(l.2n(),t.22==2K?q(t).2n():t.I!=1c&&(!t.1L||t.1L=="fg")?t:[t]))},2X:u(2p){C 2p?q.6e(2p,l).I>0:1a},1W:u(1W){C 1W==1c?(l.I?l[0].F:12):l.1p("F",1W)},2j:u(1W){C 1W==1c?(l.I?l[0].46:12):l.68().3e(1W)},6n:u(1C,3o,6a,fn){D 9h=l.I>1,a;C l.16(u(){B(!a){a=q.3C(1C,l.5R);B(6a<0)a.cT()}D 17=l;B(3o&&q.1L(l,"3o")&&q.1L(a[0],"7F"))17=l.az("3M")[0]||l.9l(U.69("3M"));q.16(a,u(){fn.1F(17,[9h?l.6I(Y):l])})})}};q.1j=q.fn.1j=u(){D 3n=11[0],a=1;B(11.I==1){3n=l;a=0}D 14;2G(14=11[a++])V(D i 23 14)3n[i]=14[i];C 3n};q.1j({eZ:u(){B(q.6r$)$=q.6r$;C q},2F:u(fn){C!!fn&&R fn!="1S"&&!fn.1L&&fn.22!=3w&&/u/i.1o(fn+"")},8p:u(J){C J.7H&&J.5R&&!J.5R.1t},1L:u(J,1f){C J.1L&&J.1L.6A()==1f.6A()},16:u(17,fn,1C){B(17.I==1c)V(D i 23 17)fn.1F(17[i],1C||[i,17[i]]);L V(D i=0,4L=17.I;i<4L;i++)B(fn.1F(17[i],1C||[i,17[i]])===1a)32;C 17},14:u(J,F,H,34,14){B(q.2F(F))F=F.3a(J,[34]);D ae=/z-?34|9G-?f2|1N|aj|cW-?1i/i;C F&&F.22==6k&&H=="5P"&&!ae.1o(14)?F+"2t":F},2f:{2l:u(J,c){q.16(c.4I(/\\s+/),u(i,1s){B(!q.2f.6d(J.2f,1s))J.2f+=(J.2f?" ":"")+1s})},3B:u(J,c){J.2f=c?q.55(J.2f.4I(/\\s+/),u(1s){C!q.2f.6d(c,1s)}).9m(" "):""},6d:u(t,c){C q.7v(c,(t.2f||t).4X().4I(/\\s+/))>-1}},9r:u(e,o,f){V(D i 23 o){e.1I["39"+i]=e.1I[i];e.1I[i]=o[i]}f.1F(e,[]);V(D i 23 o)e.1I[i]=e.1I["39"+i]},K:u(e,p){B(p=="1i"||p=="2d"){D 39={},7c,7d,d=["eY","eV","cY","cZ"];q.16(d,u(){39["6o"+l]=0;39["6g"+l+"d1"]=0});q.9r(e,39,u(){B(q(e).2X(\':3x\')){7c=e.2V;7d=e.41}L{e=q(e.6I(Y)).3t(":47").as("4N").3l().K({7Y:"2C",27:"3W",1M:"43",d2:"0",2D:"0"}).5Z(e.1u)[0];D 8r=q.K(e.1u,"27")||"5A";B(8r=="5A")e.1u.1I.27="5w";7c=e.4h;7d=e.5X;B(8r=="5A")e.1u.1I.27="5A";e.1u.63(e)}});C p=="1i"?7c:7d}C q.5P(e,p)},5P:u(J,14,af){D 1d;B(14=="1N"&&q.18.1D){1d=q.1p(J.1I,"1N");C 1d==""?"1":1d}B(14=="8q"||14=="5H")14=q.18.1D?"6H":"5H";B(!af&&J.1I[14])1d=J.1I[14];L B(U.8d&&U.8d.8F){B(14=="5H"||14=="6H")14="8q";14=14.1Q(/([A-Z])/g,"-$1").2r();D 1s=U.8d.8F(J,12);B(1s)1d=1s.ah(14);L B(14=="1M")1d="2x";L q.9r(J,{1M:"43"},u(){D c=U.8d.8F(l,"");1d=c&&c.ah(14)||""})}L B(J.6l){D aH=14.1Q(/\\-(\\w)/g,u(m,c){C c.6A()});1d=J.6l[14]||J.6l[aH]}C 1d},3C:u(a,6S){D r=[];6S=6S||U;q.16(a,u(i,1H){B(!1H)C;B(1H.22==6k)1H=1H.4X();B(R 1H=="1S"){D s=q.3c(1H),29=6S.69("29"),49=[];D 4t=!s.1P("<2O")&&[1,"<3z>","</3z>"]||(!s.1P("<d5")||!s.1P("<3M")||!s.1P("<d6"))&&[1,"<3o>","</3o>"]||!s.1P("<7F")&&[2,"<3o><3M>","</3M></3o>"]||(!s.1P("<d8")||!s.1P("<d9"))&&[3,"<3o><3M><7F>","</7F></3M></3o>"]||[0,"",""];29.46=4t[1]+1H+4t[2];2G(4t[0]--)29=29.2a;B(q.18.1D){B(!s.1P("<3o")&&s.1P("<3M")<0)49=29.2a&&29.2a.5O;L B(4t[1]=="<3o>"&&s.1P("<3M")<0)49=29.5O;V(D n=49.I-1;n>=0;--n)B(q.1L(49[n],"3M")&&!49[n].5O.I)49[n].1u.63(49[n])}1H=q.6b(29.5O)}B(1H.I===0&&!q.1L(1H,"1X"))C;B(1H[0]==1c||q.1L(1H,"1X"))r.1y(1H);L r=q.3X(r,1H)});C r},1p:u(J,1f,F){D 4A=q.8p(J)?{}:{"V":"da","4u":"2f","8q":q.18.1D?"6H":"5H",5H:q.18.1D?"6H":"5H",46:"46",2f:"2f",F:"F",3v:"3v",4N:"4N",dc:"dd",3N:"3N"};B(1f=="1N"&&q.18.1D){B(F!=1c){J.aj=1;J.1z=(J.1z||"").1Q(/ak\\([^)]*\\)/,"")+(76(F).4X()=="9Z"?"":"ak(1N="+F*88+")")}C J.1z?(76(J.1z.2s(/1N=([^)]*)/)[1])/88).4X():""}B(4A[1f]){B(F!=1c)J[4A[1f]]=F;C J[4A[1f]]}L B(F==1c&&q.18.1D&&q.1L(J,"1X")&&(1f=="cv"||1f=="2e"))C J.de(1f).5K;L B(J.7H){B(F!=1c)J.df(1f,F);B(q.18.1D&&/5n|3s/.1o(1f)&&!q.8p(J))C J.6R(1f,2);C J.6R(1f)}L{1f=1f.1Q(/-([a-z])/dg,u(z,b){C b.6A()});B(F!=1c)J[1f]=F;C J[1f]}},3c:u(t){C t.1Q(/^\\s+|\\s+$/g,"")},6b:u(a){D r=[];B(R a!="8o")V(D i=0,al=a.I;i<al;i++)r.1y(a[i]);L r=a.90(0);C r},7v:u(b,a){V(D i=0,al=a.I;i<al;i++)B(a[i]==b)C i;C-1},3X:u(2z,8v){V(D i=0;8v[i];i++)2z.1y(8v[i]);C 2z},8n:u(2z){D r=[],2R=q.8g++;V(D i=0,fl=2z.I;i<fl;i++)B(2z[i].8g!=2R){2z[i].8g=2R;r.1y(2z[i])}C r},8g:0,55:u(3q,fn,8w){B(R fn=="1S")fn=1R 72("a","i","C "+fn);D 26=[];V(D i=0,el=3q.I;i<el;i++)B(!8w&&fn(3q[i],i)||8w&&!fn(3q[i],i))26.1y(3q[i]);C 26},4v:u(3q,fn){B(R fn=="1S")fn=1R 72("a","C "+fn);D 26=[];V(D i=0,el=3q.I;i<el;i++){D 1W=fn(3q[i],i);B(1W!==12&&1W!=1c){B(1W.22!=3w)1W=[1W];26=26.di(1W)}}C 26}});1R u(){D b=86.8f.2r();q.18={2Q:/ap/.1o(b),3K:/3K/.1o(b),1D:/1D/.1o(b)&&!/3K/.1o(b),4c:/4c/.1o(b)&&!/(dj|ap)/.1o(b)};q.5z=!q.18.1D||U.dk=="dm"};q.16({19:"a.1u",3G:"q.3G(a)",dn:"q.3S(a,2,\'4g\')",dp:"q.3S(a,2,\'cn\')",cA:"q.5u(a.1u.2a,a)",5C:"q.5u(a.2a)"},u(i,n){q.fn[i]=u(a){D 1d=q.4v(l,n);B(a&&R a=="1S")1d=q.6e(a,1d);C l.4y(1d)}});q.16({5Z:"3e",dq:"cd",5B:"c9",9H:"ar"},u(i,n){q.fn[i]=u(){D a=11;C l.16(u(){V(D j=0,al=a.I;j<al;j++)q(a[j])[n](l)})}});q.16({as:u(2T){q.1p(l,2T,"");l.ds(2T)},2L:u(c){q.2f.2l(l,c)},3r:u(c){q.2f.3B(l,c)},dt:u(c){q.2f[q.2f.6d(l,c)?"3B":"2l"](l,c)},3B:u(a){B(!a||q.1z(a,[l]).r.I)l.1u.63(l)},68:u(){2G(l.2a)l.63(l.2a)}},u(i,n){q.fn[i]=u(){C l.16(n,11)}});q.16(["eq","9W","a2","au"],u(i,n){q.fn[n]=u(2R,fn){C l.1z(":"+n+"("+2R+")",fn)}});q.16(["1i","2d"],u(i,n){q.fn[n]=u(h){C h==1c?(l.I?q.K(l[0],n):12):l.K(n,h.22==2K?h:h+"2t")}});q.1j({2p:{"":"m[2]==\'*\'||q.1L(a,m[2])","#":"a.6R(\'T\')==m[2]",":":{9W:"i<m[3]-0",a2:"i>m[3]-0",3S:"m[3]-0==i",eq:"m[3]-0==i",2z:"i==0",2A:"i==r.I-1",aC:"i%2==0",aD:"i%2","3S-8h":"q.3S(a.1u.2a,m[3],\'4g\',a)==a","2z-8h":"q.3S(a.1u.2a,1,\'4g\')==a","2A-8h":"q.3S(a.1u.dv,1,\'cn\')==a","94-8h":"q.5u(a.1u.2a).I==1",19:"a.2a",68:"!a.2a",au:"q.fn.1A.1F([a]).1P(m[3])>=0",3x:\'a.H!="2C"&&q.K(a,"1M")!="2x"&&q.K(a,"7Y")!="2C"\',2C:\'a.H=="2C"||q.K(a,"1M")=="2x"||q.K(a,"7Y")=="2C"\',bS:"!a.3v",3v:"a.3v",4N:"a.4N",3N:"a.3N||q.1p(a,\'3N\')",1A:"a.H==\'1A\'",47:"a.H==\'47\'",4s:"a.H==\'4s\'",9b:"a.H==\'9b\'",av:"a.H==\'av\'",3Z:"a.H==\'3Z\'",5r:"a.H==\'5r\'",2U:"a.H==\'2U\'",6N:\'a.H=="6N"||q.1L(a,"6N")\',42:"/42|3z|dx|6N/i.1o(a.1L)"},".":"q.2f.6d(a,m[2])","@":{"=":"z==m[4]","!=":"z!=m[4]","^=":"z&&!z.1P(m[4])","$=":"z&&z.5T(z.I - m[4].I,m[4].I)==m[4]","*=":"z&&z.1P(m[4])>=0","":"z",92:u(m){C["",m[1],m[3],m[2],m[5]]},aB:"z=a[m[3]];B(!z||/5n|3s/.1o(m[3]))z=q.1p(a,m[3]);"},"[":"1b(m[2])?q.3S(a.1u.2a,1b(m[2]),\'4g\',a)==a:q.3t(m[2],a).I"},aA:[/^\\[ *(@)([\\w-]+) *([!*$^=]*) *(\'?"?)(.*?)\\4 *\\]/,/^(\\[)\\s*(.*?(\\[.*?\\])?[^[]*?)\\s*\\]/,/^(:)([\\w-]+)\\("?\'?(.*?(\\(.*?\\))?[^(]*?)"?\'?\\)/,1R 4C("^([:.#]*)("+(q.8A="(?:[\\\\w\\dz-\\dA*-]|\\\\\\\\.)")+"+)")],6O:[/^(\\/?\\.\\.)/,"a.1u",/^(>|\\/)/,"q.5u(a.2a)",/^(\\+)/,"q.3S(a,2,\'4g\')",/^(~)/,u(a){D s=q.5u(a.1u.2a);C s.90(q.7v(a,s)+1)}],6e:u(2p,3q,2i){D 39,1s=[];2G(2p&&2p!=39){39=2p;D f=q.1z(2p,3q,2i);2p=f.t.1Q(/^\\s*,\\s*/,"");1s=2i?3q=f.r:q.3X(1s,f.r)}C 1s},3t:u(t,2N){B(R t!="1S")C[t];B(2N&&!2N.30)2N=12;2N=2N||U;B(!t.1P("//")){2N=2N.3b;t=t.5T(2,t.I)}L B(!t.1P("/")&&!2N.5R){2N=2N.3b;t=t.5T(1,t.I);B(t.1P("/")>=1)t=t.5T(t.1P("/"),t.I)}D 1d=[2N],3J=[],2A;2G(t&&2A!=t){D r=[];2A=t;t=q.3c(t).1Q(/^\\/\\//,"");D 6P=1a;D 5q=/^[\\/>]\\s*([\\w*-]+)/;D m=5q.5l(t);B(m){V(D i=0;1d[i];i++)V(D c=1d[i].2a;c;c=c.4g)B(c.30==1&&(m[1]=="*"||q.1L(c,m[1])))r.1y(c);1d=r;t=t.1Q(5q,"");B(t.1P(" ")==0)dB;6P=Y}L{V(D i=0,ax=q.6O.I;i<ax;i+=2){D 5q=q.6O[i],fn=q.6O[i+1];D m=5q.5l(t);B(m){r=1d=q.4v(1d,q.2F(fn)?fn:1R 72("a","C "+fn));t=q.3c(t.1Q(5q,""));6P=Y;32}}}B(t&&!6P){B(!t.1P(",")){B(1d[0]==2N)1d.6G();3J=q.3X(3J,1d);r=1d=[2N];t=" "+t.5T(1,t.I)}L{D 5U=1R 4C("^(\\\\w+)(#)("+q.8A+"+)");D m=5U.5l(t);B(m){m=[0,m[2],m[3],m[1]]}L{5U=1R 4C("^([#.]?)("+q.8A+"*)");m=5U.5l(t)}m[2]=m[2].1Q(/\\\\/g,"");D J=1d[1d.I-1];B(m[1]=="#"&&J&&J.8M){D 4F=J.8M(m[2]);B((q.18.1D||q.18.3K)&&4F&&4F.T!=m[2])4F=q(\'[@T="\'+m[2]+\'"]\',J)[0];1d=r=4F&&(!m[3]||q.1L(4F,m[3]))?[4F]:[]}L{V(D i=0;1d[i];i++){D 6Q=m[1]!=""||m[0]==""?"*":m[2];B(6Q=="*"&&1d[i].1L.2r()=="3j")6Q="P";r=q.3X(r,1d[i].az(6Q))}B(m[1]==".")r=q.91(r,m[2]);B(m[1]=="#"){D 5k=[];V(D i=0;r[i];i++)B(r[i].6R("T")==m[2]){5k=[r[i]];32}r=5k}1d=r}t=t.1Q(5U,"")}}B(t){D 1W=q.1z(t,r);1d=r=1W.r;t=q.3c(1W.t)}}B(t)1d=[];B(1d&&1d[0]==2N)1d.6G();3J=q.3X(3J,1d);C 3J},91:u(r,m,2i){m=" "+m+" ";D 5k=[];V(D i=0;r[i];i++){D 8B=(" "+r[i].2f+" ").1P(m)>=0;B(!2i&&8B||2i&&!8B)5k.1y(r[i])}C 5k},1z:u(t,r,2i){D 2A;2G(t&&t!=2A){2A=t;D p=q.aA,m;V(D i=0;p[i];i++){m=p[i].5l(t);B(m){t=t.9o(m[0].I);B(q.2p[m[1]].92)m=q.2p[m[1]].92(m);m[2]=m[2].1Q(/\\\\/g,"");32}}B(!m)32;B(m[1]==":"&&m[2]=="2i")r=q.1z(m[3],r,Y).r;L B(m[1]==".")r=q.91(r,m[2],2i);L{D f=q.2p[m[1]];B(R f!="1S")f=q.2p[m[1]][m[2]];7G("f = u(a,i){"+(q.2p[m[1]].aB||"")+"C "+f+"}");r=q.55(r,f,2i)}}C{r:r,t:t}},3G:u(J){D 8D=[];D 1s=J.1u;2G(1s&&1s!=U){8D.1y(1s);1s=1s.1u}C 8D},3S:u(1s,26,6a,J){26=26||1;D 2R=0;V(;1s;1s=1s[6a]){B(1s.30==1)2R++;B(2R==26||26=="aC"&&2R%2==0&&2R>1&&1s==J||26=="aD"&&2R%2==1&&1s==J)C 1s}},5u:u(n,J){D r=[];V(;n;n=n.4g){B(n.30==1&&(!J||n!=J))r.1y(n)}C r}});q.Q={2l:u(E,H,1E,S){B(q.18.1D&&E.6q!=1c)E=1h;B(S)1E.S=S;B(!1E.4Y)1E.4Y=l.4Y++;B(!E.$2m)E.$2m={};D 5W=E.$2m[H];B(!5W){5W=E.$2m[H]={};B(E["5N"+H])5W[0]=E["5N"+H]}5W[1E.4Y]=1E;E["5N"+H]=l.6L;B(!l.2y[H])l.2y[H]=[];l.2y[H].1y(E)},4Y:1,2y:{},3B:u(E,H,1E){D 2m=E.$2m,1d;B(2m){B(H&&H.H){1E=H.1E;H=H.H}B(!H){V(H 23 2m)l.3B(E,H)}L B(2m[H]){B(1E)6m 2m[H][1E.4Y];L V(1E 23 E.$2m[H])6m 2m[H][1E];V(1d 23 2m[H])32;B(!1d){1d=E["5N"+H]=12;6m 2m[H]}}V(1d 23 2m)32;B(!1d)E.$2m=12}},2k:u(H,S,E){S=q.6b(S||[]);B(!E)q.16(l.2y[H]||[],u(){q.Q.2k(H,S,l)});L{D 1E=E["5N"+H],1W,fn=q.2F(E[H]);B(1E){S.aF(l.4A({H:H,3n:E}));B((1W=1E.1F(E,S))!==1a)l.8G=Y}B(fn&&1W!==1a)E[H]();l.8G=1a}},6L:u(Q){B(R q=="1c"||q.Q.8G)C;Q=q.Q.4A(Q||1h.Q||{});D 4K;D c=l.$2m[Q.H];D 1C=[].90.3a(11,1);1C.aF(Q);V(D j 23 c){1C[0].1E=c[j];1C[0].S=c[j].S;B(c[j].1F(l,1C)===1a){Q.3Y();Q.5d();4K=1a}}B(q.18.1D)Q.3n=Q.3Y=Q.5d=Q.1E=Q.S=12;C 4K},4A:u(Q){B(!Q.3n&&Q.aG)Q.3n=Q.aG;B(Q.9t==1c&&Q.9S!=1c){D e=U.3b,b=U.1t;Q.9t=Q.9S+(e.36||b.36);Q.ce=Q.dG+(e.2W||b.2W)}B(q.18.2Q&&Q.3n.30==3){D 6x=Q;Q=q.1j({},6x);Q.3n=6x.3n.1u;Q.3Y=u(){C 6x.3Y()};Q.5d=u(){C 6x.5d()}}B(!Q.3Y)Q.3Y=u(){l.4K=1a};B(!Q.5d)Q.5d=u(){l.dH=Y};C Q}};q.fn.1j({2I:u(H,S,fn){C l.16(u(){q.Q.2l(l,H,fn||S,S)})},aQ:u(H,S,fn){C l.16(u(){q.Q.2l(l,H,u(Q){q(l).62(Q);C(fn||S).1F(l,11)},S)})},62:u(H,fn){C l.16(u(){q.Q.3B(l,H,fn)})},2k:u(H,S){C l.16(u(){q.Q.2k(H,S,l)})},38:u(){D a=11;C l.2Z(u(e){l.8I=l.8I==0?1:0;e.3Y();C a[l.8I].1F(l,[e])||1a})},ec:u(f,g){u 8K(e){D p=(e.H=="5h"?e.dI:e.dJ)||e.dK;2G(p&&p!=l)3D{p=p.1u}3O(e){p=l};B(p==l)C 1a;C(e.H=="5h"?f:g).1F(l,[e])}C l.5h(8K).73(8K)},3f:u(f){B(q.6Z)f.1F(U,[q]);L{q.5S.1y(u(){C f.1F(l,[q])})}C l}});q.1j({6Z:1a,5S:[],3f:u(){B(!q.6Z){q.6Z=Y;B(q.5S){q.16(q.5S,u(){l.1F(U)});q.5S=12}B(q.18.4c||q.18.3K)U.dL("aL",q.3f,1a)}}});1R u(){q.16(("a3,4J,4r,dM,5V,8P,2Z,dN,"+"dO,dP,9y,5h,73,e0,3z,"+"3Z,dQ,dR,dS,1n").4I(","),u(i,o){q.fn[o]=u(f){C f?l.2I(o,f):l.2k(o)}});B(q.18.4c||q.18.3K)U.dT("aL",q.3f,1a);L B(q.18.1D){U.dV("<dW"+"dY T=aO dZ=Y "+"3s=//:><\\/3I>");D 3I=U.8M("aO");B(3I)3I.5j=u(){B(l.59!="3m")C;l.1u.63(l);q.3f()};3I=12}L B(q.18.2Q)q.8J=6q(u(){B(U.59=="cc"||U.59=="3m"){95(q.8J);q.8J=12;q.3f()}},10);q.Q.2l(1h,"4r",q.3f)};B(q.18.1D)q(1h).aQ("8P",u(){D 2y=q.Q.2y;V(D H 23 2y){D 8Q=2y[H],i=8Q.I;B(i&&H!=\'8P\')do q.Q.3B(8Q[i-1],H);2G(--i)}});q.fn.1j({1B:u(1q,1e){D 2C=l.1z(":2C");1q?2C.37({1i:"1B",2d:"1B",1N:"1B"},1q,1e):2C.16(u(){l.1I.1M=l.5e?l.5e:"";B(q.K(l,"1M")=="2x")l.1I.1M="43"});C l},1v:u(1q,1e){D 3x=l.1z(":3x");1q?3x.37({1i:"1v",2d:"1v",1N:"1v"},1q,1e):3x.16(u(){l.5e=l.5e||q.K(l,"1M");B(l.5e=="2x")l.5e="43";l.1I.1M="2x"});C l},aT:q.fn.38,38:u(fn,8R){D 1C=11;C q.2F(fn)&&q.2F(8R)?l.aT(fn,8R):l.16(u(){q(l)[q(l).2X(":2C")?"1B":"1v"].1F(q(l),1C)})},aM:u(1q,1e){C l.1z(":2C").37({1i:"1B"},1q,1e).3l()},aK:u(1q,1e){C l.1z(":3x").37({1i:"1v"},1q,1e).3l()},e1:u(1q,1e){C l.16(u(){D aU=q(l).2X(":2C")?"1B":"1v";q(l).37({1i:aU},1q,1e)})},aR:u(1q,1e){C l.1z(":2C").37({1N:"1B"},1q,1e).3l()},aJ:u(1q,1e){C l.1z(":3x").37({1N:"1v"},1q,1e).3l()},e2:u(1q,3H,1e){C l.37({1N:3H},1q,1e)},37:u(14,1q,3i,1e){C l.2Y(u(){l.53=q.1j({},14);D 2O=q.1q(1q,3i,1e);V(D p 23 14){D e=1R q.5Q(l,2O,p);B(14[p].22==6k)e.5g(e.1s(),14[p]);L e[14[p]](14)}})},2Y:u(H,fn){B(!fn){fn=H;H="5Q"}C l.16(u(){B(!l.2Y)l.2Y={};B(!l.2Y[H])l.2Y[H]=[];l.2Y[H].1y(fn);B(l.2Y[H].I==1)fn.1F(l)})}});q.1j({1q:u(1q,3i,fn){D 2O=1q&&1q.22==e3?1q:{3m:fn||!fn&&3i||q.2F(1q)&&1q,3V:1q,3i:fn&&3i||3i&&3i.22!=72&&3i||"aw"};2O.3V=(2O.3V&&2O.3V.22==6k?2O.3V:{e4:e5,e6:bD}[2O.3V])||e8;2O.39=2O.3m;2O.3m=u(){q.aZ(l,"5Q");B(q.2F(2O.39))2O.39.1F(l)};C 2O},3i:{e9:u(p,n,4x,74){C 4x+74*p},aw:u(p,n,4x,74){C((-4f.eb(p*4f.ed)/2)+0.5)*74+4x}},2Y:{},aZ:u(J,H){H=H||"5Q";B(J.2Y&&J.2Y[H]){J.2Y[H].6G();D f=J.2Y[H][0];B(f)f.1F(J)}},56:[],5Q:u(J,W,14){D z=l;D y=J.1I;B(14=="1i"||14=="2d"){D 6M=q.K(J,"1M");D b2=y.4O;y.4O="2C"}z.a=u(){B(W.6K)W.6K.1F(J,[z.52]);B(14=="1N")q.1p(y,"1N",z.52);L{y[14]=1b(z.52)+"2t";y.1M="43"}};z.7B=u(){C 76(q.K(J,14))};z.1s=u(){D r=76(q.5P(J,14));C r&&r>-ef?r:z.7B()};z.5g=u(8T,3H){z.8s=(1R 5J()).7u();z.52=8T;z.a();q.56.1y(u(){C z.6K(8T,3H)});B(q.56.I==1){D b0=6q(u(){q.56=q.55(q.56,u(fn){C fn()});B(!q.56.I)95(b0)},13)}};z.1B=u(){B(!J.3A)J.3A={};J.3A[14]=q.1p(J.1I,14);W.1B=Y;z.5g(0,l.1s());B(14!="1N")y[14]="5E"};z.1v=u(){B(!J.3A)J.3A={};J.3A[14]=q.1p(J.1I,14);W.1v=Y;z.5g(l.1s(),0)};z.38=u(){B(!J.3A)J.3A={};J.3A[14]=q.1p(J.1I,14);B(6M=="2x"){W.1B=Y;B(14!="1N")y[14]="5E";z.5g(0,l.1s())}L{W.1v=Y;z.5g(l.1s(),0)}};z.6K=u(4x,8Y){D t=(1R 5J()).7u();B(t>W.3V+z.8s){z.52=8Y;z.a();B(J.53)J.53[14]=Y;D 3J=Y;V(D i 23 J.53)B(J.53[i]!==Y)3J=1a;B(3J){B(6M){y.4O=b2;y.1M=6M;B(q.K(J,"1M")=="2x")y.1M="43"}B(W.1v)y.1M="2x";B(W.1v||W.1B)V(D p 23 J.53)q.1p(y,p,J.3A[p])}B(3J&&q.2F(W.3m))W.3m.1F(J);C 1a}L{D n=t-l.8s;D p=n/W.3V;z.52=q.3i[W.3i](p,n,4x,(8Y-4x),W.3V);z.a()}C Y}}});q.fn.1j({eh:u(1g,3F,1e){l.4r(1g,3F,1e,1)},4r:u(1g,3F,1e,3E){B(q.2F(1g))C l.2I("4r",1g);1e=1e||u(){};D H="8Z";B(3F)B(q.2F(3F)){1e=3F;3F=12}L{3F=q.P(3F);H="bb"}D 3u=l;q.75({1g:1g,H:H,S:3F,3E:3E,3m:u(4Z,1Y){B(1Y=="5p"||!3E&&1Y=="bv")3u.1p("46",4Z.7q).9g().16(1e,[4Z.7q,1Y,4Z]);L 1e.1F(3u,[4Z.7q,1Y,4Z])}});C l},ei:u(){C q.P(l)},9g:u(){C l.3t("3I").16(u(){B(l.3s)q.b9(l.3s);L q.9i(l.1A||l.ej||l.46||"")}).3l()}});q.16("cG,bz,by,bA,bx,bs".4I(","),u(i,o){q.fn[o]=u(f){C l.2I(o,f)}});q.1j({2n:u(1g,S,1e,H,3E){B(q.2F(S)){1e=S;S=12}C q.75({H:"8Z",1g:1g,S:S,5p:1e,97:H,3E:3E})},ek:u(1g,S,1e,H){C q.2n(1g,S,1e,H,1)},b9:u(1g,1e){C q.2n(1g,12,1e,"3I")},en:u(1g,S,1e){C q.2n(1g,S,1e,"bL")},eo:u(1g,S,1e,H){B(q.2F(S)){1e=S;S={}}C q.75({H:"bb",1g:1g,S:S,5p:1e,97:H})},ep:u(33){q.7f.33=33},er:u(G){q.1j(q.7f,G)},7f:{2y:Y,H:"8Z",33:0,bk:"es/x-et-1X-eu",cH:Y,8k:Y,1V:12,S:12},7p:{},75:u(s){s=q.1j({},q.7f,s);B(s.S){B(s.cH&&R s.S!="1S")s.S=q.P(s.S);B(s.H.2r()=="2n"){s.1g+=((s.1g.1P("?")>-1)?"&":"?")+s.S;s.S=12}}B(s.2y&&!q.9a++)q.Q.2k("cG");D 99=1a;D 1m=1h.bj?1R bj("ad.ew"):1R 7R();1m.ex(s.H,s.1g,s.8k);B(s.S)1m.7P("ey-ez",s.bk);B(s.3E)1m.7P("eB-9d-eC",q.7p[s.1g]||"eD, eE eF eG 93:93:93 eH");1m.7P("X-eI-eJ","7R");B(1m.eK)1m.7P("eM","eN");B(s.bq)s.bq(1m);B(s.2y)q.Q.2k("bs",[1m,s]);D 5j=u(96){B(1m&&(1m.59==4||96=="33")){99=Y;B(7E){95(7E);7E=12}D 1Y;3D{1Y=q.bB(1m)&&96!="33"?s.3E&&q.bE(1m,s.1g)?"bv":"5p":"1n";B(1Y!="1n"){D 7l;3D{7l=1m.9e("bF-9d")}3O(e){}B(s.3E&&7l)q.7p[s.1g]=7l;D S=q.bI(1m,s.97);B(s.5p)s.5p.3a(s.1V||1h,S,1Y);B(s.2y)q.Q.2k("bx",[1m,s])}L q.7x(s,1m,1Y)}3O(e){1Y="1n";q.7x(s,1m,1Y,e)}B(s.2y)q.Q.2k("by",[1m,s]);B(s.2y&&!--q.9a)q.Q.2k("bz");B(s.3m)s.3m(1m,1Y);B(s.8k)1m=12}};D 7E=6q(5j,13);B(s.33>0)35(u(){B(1m){1m.eO();B(!99)5j("33")}},s.33);3D{1m.eP(s.S)}3O(e){q.7x(s,1m,12,e)}B(!s.8k)5j();C 1m},7x:u(s,1m,1Y,e){B(s.1n)s.1n(1m,1Y,e);B(s.2y)q.Q.2k("bA",[1m,s,e])},9a:0,bB:u(r){3D{C!r.1Y&&5F.eS=="9b:"||(r.1Y>=bD&&r.1Y<eT)||r.1Y==bG||q.18.2Q&&r.1Y==1c}3O(e){}C 1a},bE:u(1m,1g){3D{D bH=1m.9e("bF-9d");C 1m.1Y==bG||bH==q.7p[1g]||q.18.2Q&&1m.1Y==1c}3O(e){}C 1a},bI:u(r,H){D ct=r.9e("eW-H");D S=!H&&ct&&ct.1P("1m")>=0;S=H=="1m"||S?r.eX:r.7q;B(H=="3I")q.9i(S);B(H=="bL")7G("S = "+S);B(H=="2j")q("<29>").2j(S).9g();C S},P:u(a){D s=[];B(a.22==3w||a.7r)q.16(a,u(){s.1y(4G(l.1f)+"="+4G(l.F))});L V(D j 23 a)B(a[j]&&a[j].22==3w)q.16(a[j],u(){s.1y(4G(j)+"="+4G(l))});L s.1y(4G(j)+"="+4G(a[j]));C s.9m("&")},9i:u(S){B(1h.bO)1h.bO(S);L B(q.18.2Q)1h.35(S,0);L 7G.3a(1h,S)}})}q.fn.f0=u(f){C l.16(u(){D p=l.1u;B(q.K(p,"27")==\'5A\')p.1I.27=\'5w\';D s=l.1I;s.27=\'3W\';B(!f||f=="f1"){B(((1b(q.K(p,"2d"))-1b(q.K(l,"2d")))/2)>0)s.2D=((1b(q.K(p,"2d"))-1b(q.K(l,"2d")))/2)+"2t";L s.2D="0"}B(!f||f=="f3"){B(((1b(q.K(p,"1i"))-1b(q.K(l,"1i")))/2)>0){s.2E=((1b(q.K(p,"1i"))-1b(q.K(l,"1i")))/2)+"2t"}L{B(p.1L.2r()=="1t"){B(1h.61)D 4h=1h.61;L B(U.1t&&U.1t.2V)D 4h=U.1t.2V;s.2E=((4h-1b(q.K(l,"1i")))/2)+"2t"}L{s.2E="0"}}}})};q.4l=u(1f,F,W){B(R F!=\'1c\'){W=W||{};B(F===12){F=\'\';W.2w=-1}D 2w=\'\';B(W.2w){D 2o;B(R W.2w==\'1S\'&&W.2w.2s(/^[+-]?[0-9]+[bQ]$/)!==12){D 2s=W.2w.2s(/^([+-]?[0-9]+)([bQ])$/);W.2w=1b(2s[0],10)*(({"y":(60*60*24*f4),"w":(60*60*24*7),"d":(60*60*24),"h":(60*60),"m":(60),"s":(1)}[2s[1]])||0);2o=1R 5J();2o.bR(2o.7u()+W.2w*4k)}L B(R W.2w==\'3p\'){2o=1R 5J();2o.bR(2o.7u()+W.2w*24*60*60*4k)}L B(R W.2w.bT!=\'1c\')2o=W.2w;L 9k"f5 \\"2w\\" 1T";2w=\'; 2w=\'+2o.bT()}D 6f=W.6f?\'; 6f=\'+W.6f:\'\';D 6c=W.6c?\'; 6c=\'+W.6c:\'\';D 7w=W.7w?\'; 7w\':\'\';U.4l=[1f,\'=\',4G(F),2w,6f,6c,7w].9m(\'\')}L{D 9p=12;B(U.4l&&U.4l!=\'\'){D 9n=U.4l.4I(\';\');V(D i=0;i<9n.I;i++){D 4l=q.3c(9n[i]);B(4l.9o(0,1f.I+1)==(1f+\'=\')){9p=f6(4l.9o(1f.I+1));32}}}C 9p}};q.fn.bX=q.fn.1i;q.fn.bY=q.fn.2d;q.fn.1i=u(){B(l[0]==1h)C 3u.61||q.5z&&U.3b.4h||U.1t.4h;B(l[0]==U)C 4f.7B(U.1t.f7,U.1t.2V);C l.bX(11[0])};q.fn.2d=u(){B(l[0]==1h)C 3u.8H||q.5z&&U.3b.5X||U.1t.5X;B(l[0]==U)C 4f.7B(U.1t.f8,U.1t.41);C l.bY(11[0])};q.fn.61=u(){C l[0]==1h||l[0]==U?l.1i():l.K(\'1M\')!=\'2x\'?l[0].2V-(1b(l.K("4n"))||0)-(1b(l.K("bZ"))||0):l.1i()+(1b(l.K("9w"))||0)+(1b(l.K("c0"))||0)};q.fn.8H=u(){C l[0]==1h||l[0]==U?l.2d():l.K(\'1M\')!=\'2x\'?l[0].41-(1b(l.K("4a"))||0)-(1b(l.K("c1"))||0):l.1i()+(1b(l.K("9v"))||0)+(1b(l.K("8L"))||0)};q.fn.f9=u(){C l[0]==1h||l[0]==U?l.1i():l.K(\'1M\')!=\'2x\'?l[0].2V:l.1i()+(1b(l.K("4n"))||0)+(1b(l.K("bZ"))||0)+(1b(l.K("9w"))||0)+(1b(l.K("c0"))||0)};q.fn.fa=u(){C l[0]==1h||l[0]==U?l.2d():l.K(\'1M\')!=\'2x\'?l[0].41:l.1i()+(1b(l.K("4a"))||0)+(1b(l.K("c1"))||0)+(1b(l.K("9v"))||0)+(1b(l.K("8L"))||0)};q.fn.36=u(){B(l[0]==1h||l[0]==U)C 3u.8C||q.5z&&U.3b.36||U.1t.36;C l[0].36};q.fn.2W=u(){B(l[0]==1h||l[0]==U)C 3u.8E||q.5z&&U.3b.2W||U.1t.2W;C l[0].2W};q.fn.8m=u(W,9x){D x=0,y=0,J=l[0],19=l[0],7I=1a,9u=1a,6h,6j=0,6i=0,W=q.1j({6U:Y,6g:Y,6o:1a,5V:Y},W||{});do{x+=19.8y||0;y+=19.8z||0;B(q.18.4c||q.18.1D){D bt=1b(q.K(19,\'4n\'))||0;D bl=1b(q.K(19,\'4a\'))||0;x+=bl;y+=bt;B(q.18.4c&&19!=J&&q.K(19,\'4O\')!=\'3x\'){x+=bl;y+=bt}B(q.K(19,\'27\')==\'3W\')7I=Y;B(q.K(19,\'27\')==\'5w\')9u=Y}B(W.5V){6h=19.c3;do{6j+=19.36||0;6i+=19.2W||0;19=19.1u;B(q.18.4c&&19!=J&&19!=6h&&q.K(19,\'4O\')!=\'3x\'){x+=1b(q.K(19,\'4a\'))||0;y+=1b(q.K(19,\'4n\'))||0}}2G(6h&&19!=6h)}L 19=19.c3;B(19&&(19.7H.2r()==\'1t\'||19.7H.2r()==\'2j\')){B((q.18.2Q||(q.18.1D&&q.5z))&&q.K(J,\'27\')!=\'3W\'){x+=1b(q.K(19,\'c5\'))||0;y+=1b(q.K(19,\'c6\'))||0}B((q.18.4c&&!7I)||(q.18.1D&&q.K(J,\'27\')==\'5A\'&&(!9u||!7I))){x+=1b(q.K(19,\'4a\'))||0;y+=1b(q.K(19,\'4n\'))||0}32}}2G(19);B(!W.6U){x-=1b(q.K(J,\'c5\'))||0;y-=1b(q.K(J,\'c6\'))||0}B(W.6g&&(q.18.2Q||q.18.3K)){x+=1b(q.K(J,\'4a\'))||0;y+=1b(q.K(J,\'4n\'))||0}L B(!W.6g&&!(q.18.2Q||q.18.3K)){x-=1b(q.K(J,\'4a\'))||0;y-=1b(q.K(J,\'4n\'))||0}B(W.6o){x+=1b(q.K(J,\'9v\'))||0;y+=1b(q.K(J,\'9w\'))||0}B(W.5V&&q.18.3K&&q.K(J,\'1M\')==\'fb\'){6j-=J.36||0;6i-=J.2W||0}D 4K=W.5V?{2E:y-6i,2D:x-6j,2W:6i,36:6j}:{2E:y,2D:x};B(9x){q.1j(9x,4K);C l}L{C 4K}};(u($){$.fn.fc=q.fn.9z=u(s){B(!($.18.1D&&R 7R==\'u\'))C l;s=$.1j({2E:\'44\',2D:\'44\',2d:\'44\',1i:\'44\',1N:Y,3s:\'9f:1a;\'},s||{});D 14=u(n){C n&&n.22==6k?n+\'2t\':n},2j=\'<cf 4u="9z"fd="0"fe="-1"3s="\'+s.3s+\'"\'+\'1I="1M:43;27:3W;z-34:-1;\'+(s.1N!==1a?\'1z:ff(fh=\\\'0\\\');\':\'\')+\'2E:\'+(s.2E==\'44\'?\'7O(((1b(l.1u.6l.4n)||0)*-1)+\\\'2t\\\')\':14(s.2E))+\';\'+\'2D:\'+(s.2D==\'44\'?\'7O(((1b(l.1u.6l.4a)||0)*-1)+\\\'2t\\\')\':14(s.2D))+\';\'+\'2d:\'+(s.2d==\'44\'?\'7O(l.1u.41+\\\'2t\\\')\':14(s.2d))+\';\'+\'1i:\'+(s.1i==\'44\'?\'7O(l.1u.2V+\\\'2t\\\')\':14(s.1i))+\';\'+\'"/>\';C l.16(u(){B(!$(\'cf.9z\',l)[0])l.5B(U.69(2j),l.2a)})}})(q);(u($){$.1j({1Z:{ci:0}});$.fn.1Z=u(2H,G){B(R 2H==\'3j\')G=2H;G=$.1j({2H:(2H&&R 2H==\'3p\'&&2H>0)?--2H:0,3v:12,3T:$.66?Y:1a,4R:1a,cg:\'4R-3U-\',9P:12,9O:12,9Q:12,9R:12,9N:\'bP\',cq:12,cr:12,cl:1a,6s:12,6u:12,6w:12,7T:\'1Z-2g\',4i:\'1Z-3N\',6t:\'1Z-3v\',5L:\'1Z-1U\',8b:\'1Z-1v\',9Y:\'1Z-fi\',cj:\'29\'},G||{});$.18.7W=$.18.7W||$.18.1D&&R 7R==\'u\';u 9C(){cC(0,0)}C l.16(u(){D 1U=l;D 2g=$(\'6D.\'+G.7T,1U);2g=2g.4B()&&2g||$(\'>6D:eq(0)\',1U);D 1Z=$(\'a\',2g);B(G.4R){D 9V={};1Z.16(u(){$(l).2j(\'<40>\'+$(l).2j()+\'</40>\');D T=G.cg+(++$.1Z.ci);D 28=\'#\'+T;9V[28]=l.5n;l.5n=28;$(\'<29 T="\'+T+\'" 4u="\'+G.5L+\'"></29>\').5Z(1U)})}D 2B=$(\'29.\'+G.5L,1U);2B=2B.4B()&&2B||$(\'>\'+G.cj,1U);2g.2X(\'.\'+G.7T)||2g.2L(G.7T);2B.16(u(){D $$=$(l);$$.2X(\'.\'+G.5L)||$$.2L(G.5L)});D 9A=$(\'1G\',2g).34($(\'1G.\'+G.4i,2g)[0]);B(9A>=0){G.2H=9A}B(5F.28){1Z.16(u(i){B(l.28==5F.28){G.2H=i;B(($.18.1D||$.18.3K)&&!G.4R){D 21=$(5F.28);D 89=21.1p(\'T\');21.1p(\'T\',\'\');35(u(){21.1p(\'T\',89)},fk)}9C();C 1a}})}B($.18.1D){9C()}2B.1z(\':eq(\'+G.2H+\')\').1B().3l().2i(\':eq(\'+G.2H+\')\').2L(G.8b);B(!G.4R){$(\'1G\',2g).3r(G.4i).eq(G.2H).2L(G.4i)}B(G.cl){D 9J=u(2U){D 9F=$.4v(2B.2n(),u(el){D h,9E=$(el);B(2U){B($.18.7W){el.1I.fm(\'cm\');el.1I.1i=\'\';el.7X=12}h=9E.K({\'4E-1i\':\'\'}).1i()}L{h=9E.1i()}C h}).fo(u(a,b){C b-a});B($.18.7W){2B.16(u(){l.7X=9F[0]+\'2t\';l.1I.fq(\'cm\',\'l.1I.1i = l.7X ? l.7X : "5E"\')})}L{2B.K({\'4E-1i\':9F[0]+\'2t\'})}};9J();D 7Z=1U.41;D 9K=1U.2V;D 9I=$(\'#1Z-co-9G-4B\').2n(0)||$(\'<40 T="1Z-co-9G-4B">M</40>\').K({1M:\'43\',27:\'3W\',7Y:\'2C\'}).5Z(U.1t).2n(0);D 81=9I.2V;6q(u(){D 80=1U.41;D 9L=1U.2V;D 82=9I.2V;B(9L>9K||80!=7Z||82!=81){9J((80>7Z||82<81));7Z=80;9K=9L;81=82}},50)}D 5y={},5x={},9U=G.cq||G.9N,9T=G.cr||G.9N;B(G.9O||G.9P){B(G.9O){5y[\'1i\']=\'1B\';5x[\'1i\']=\'1v\'}B(G.9P){5y[\'1N\']=\'1B\';5x[\'1N\']=\'1v\'}}L{B(G.9Q){5y=G.9Q}L{5y[\'4E-2d\']=0;9U=G.3T?50:1}B(G.9R){5x=G.9R}L{5x[\'4E-2d\']=0;9T=G.3T?50:1}}D 6s=G.6s,6u=G.6u,6w=G.6w;1Z.2I(\'a4\',u(){D 1G=$(l).3G(\'1G:eq(0)\');B(1U.8e||1G.2X(\'.\'+G.4i)||1G.2X(\'.\'+G.6t)){C 1a}D 28=l.28;B($.18.1D){$(l).2k(\'2Z\');B(G.3T){$.66.4m(28);5F.28=28.1Q(\'#\',\'\')}}L B($.18.2Q){D cw=$(\'<1X cv="\'+28+\'"><29><42 H="3Z" F="h" /></29></1X>\').2n(0);cw.3Z();$(l).2k(\'2Z\');B(G.3T){$.66.4m(28)}}L{B(G.3T){5F.28=28.1Q(\'#\',\'\')}L{$(l).2k(\'2Z\')}}});1Z.2I(\'8l\',u(){D 1G=$(l).3G(\'1G:eq(0)\');B($.18.2Q){1G.37({1N:0},1,u(){1G.K({1N:\'\'})})}1G.2L(G.6t)});B(G.3v&&G.3v.I){V(D i=0,k=G.3v.I;i<k;i++){1Z.eq(--G.3v[i]).2k(\'8l\').3l()}};1Z.2I(\'a5\',u(){D 1G=$(l).3G(\'1G:eq(0)\');1G.3r(G.6t);B($.18.2Q){1G.37({1N:1},1,u(){1G.K({1N:\'\'})})}});1Z.2I(\'2Z\',u(e){D 8i=e.9S;D 4Q=l,1G=$(l).3G(\'1G:eq(0)\'),21=$(l.28),2q=2B.1z(\':3x\');B((R 6s==\'u\'&&6s(l,21[0],2q[0])==1a&&8i)||1U.8e||1G.2X(\'.\'+G.4i)||1G.2X(\'.\'+G.6t)){l.a3();C 1a}1U[\'8e\']=Y;B(21.4B()){B($.18.1D&&G.3T){D 89=l.28.1Q(\'#\',\'\');21.1p(\'T\',\'\');35(u(){21.1p(\'T\',89)},0)}u 9X(){B(G.3T&&8i){$.66.4m(4Q.28)}2q.37(5x,9T,u(){$(4Q).3G(\'1G:eq(0)\').2L(G.4i).cA().3r(G.4i);B(R 6u==\'u\'){6u(4Q,21[0],2q[0])}2q.2L(G.8b).K({1M:\'\',4O:\'\',1i:\'\',1N:\'\'});21.3r(G.8b).37(5y,9U,u(){21.K({4O:\'\',1i:\'\',1N:\'\'});B($.18.1D){2q[0].1I.1z=\'\';21[0].1I.1z=\'\'}B(R 6w==\'u\'){6w(4Q,21[0],2q[0])}1U.8e=12})})}B(!G.4R){9X()}L{D $$=$(l),40=$(\'40\',l)[0],1A=40.46;$$.2L(G.9Y);40.46=\'fr&#fs;\';35(u(){$(4Q.28).4r(9V[4Q.28],u(){9X();40.46=1A;$$.3r(G.9Y)})},0)}}L{78(\'ft 2X 8W fu 1U.\')}D cD=1h.8C||U.3b&&U.3b.36||U.1t.36||0;D cF=1h.8E||U.3b&&U.3b.2W||U.1t.2W||0;35(u(){1h.cC(cD,cF)},0);l.a3();C G.3T&&!!8i});B(G.4R){1Z.eq(G.2H).2k(\'2Z\').3l()}B(G.3T){$.66.cJ(u(){1Z.eq(G.2H).2k(\'2Z\').3l()})}})};D 6F=[\'a4\',\'8l\',\'a5\'];V(D i=0;i<6F.I;i++){$.fn[6F[i]]=(u(a7){C u(3U){C l.16(u(){D 2g=$(\'6D.1Z-2g\',l);2g=2g.4B()&&2g||$(\'>6D:eq(0)\',l);D a;B(!3U||R 3U==\'3p\'){a=$(\'1G a\',2g).eq((3U&&3U>0&&3U-1||0))}L B(R 3U==\'1S\'){a=$(\'1G a[@5n$="#\'+3U+\'"]\',2g)}a.2k(a7)})}})(6F[i])}})(q);q.1j(q.fn,{aP:u(W){D N=1R q.N(W,l[0]);N.1w=l.3t(":42:2i(:3Z):2i(:2U)").4J(u(){N.4b=l});B(N.G.79){l.3Z(u(Q){B(N.G.3k)Q.3Y();C N.1X()})}B(N.G.Q){N.1w.2I(N.G.Q,u(){N.E(l)})}C N},1y:u(t){C l.71(q.3X(l.2n(),t))},4S:u(T){C l.1z("[@V=\'"+T+"\']")}});q.1j(q.2p[":"],{aW:"!q.3c(a.F)",aX:"!!q.3c(a.F)"});q.N=u(W,1X){l.G=q.1j({},q.N.48,W);l.5f=1X;l.4p=l.G.57;l.7n=l.4p.I&&l.4p||q(1X);l.2B=l.G.77.2l(l.G.57);l.2U()};q.1j(q.N,{48:{3P:{},3d:"1n",7L:Y,77:q([]),57:q([]),79:Y},b1:u(G){q.1j(q.N.48,G)},3P:{1k:"b3 b4 2X 1k.",6y:"1K 1J a F 8W b5 b6 {0} 4V.",8j:"1K 1J a F b7 at b8 {0} 4V.",6z:"1K 1J a F 7j {0} 7k {1} 4V ba.",4T:"1K 1J a 2P 4T bc.",1g:"1K 1J a 2P bd.",2o:"1K 1J a 2P 2o.",7y:"1K 1J a 2P 2o (bf).",7a:"7g 7h 7i 5m bg¼bh bi 5m.",3p:"1K 1J a 2P 3p.",6J:"7g 7h 7i bm bn 5m.",51:"1K 1J 94 51",6T:"1K 1J 7s bo F bp.",6E:"1K 1J a F 7j {0} 7k {1}.",6C:"1K 1J a F bu 6Y 4w 7C 3H {0}.",6B:"1K 1J a F bw 6Y 4w 7C 3H {0}."},5o:{1X:u(){l.5t();V(D i=0,E;E=l.1w[i++];){l.4j(E)}C l.2P()},E:u(E){l.7o(E);l.4j(E);l.3L()},3L:u(2S){B(2S)q.1j(l.2v,2S);l.G.3L?l.G.3L(l.2v,l):l.7K()},5c:u(){B(q.fn.5c)q(l.5f).5c();l.5t();l.5b();l.1w.3r(l.G.3d)},3C:u(7m){C q(7m)[0]},2S:u(){C q("7U."+l.G.3d,l.7n)},2U:u(E){l.2v={};l.21=$([]);l.2q=$([])},5t:u(){l.2U();l.2q=l.2S().1y(l.2B);l.21.1y(l.2B)},7o:u(E){l.2U();l.2q=l.2S().4S(l.4q(l.3C(E)))},4j:u(E){E=l.3C(E);q(E).3r(l.G.3d);D 2c=l.2c(E);V(D i=0,1O;1O=2c[i++];){3D{D 26=q.N.1l[1O.2e](q.3c(E.F),E,1O.5D);B(26===-1)32;B(!26){q(E).2L(l.G.3d);l.7t(1O,E);32}}3O(e){l.G.3k&&1h.31&&31.1n("bJ bK bM bN E "+E.T+", 4j 7s \'"+1O.2e+"\' 2e");9k e}}},25:u(T,1O){D m=l.G.3P[T];C m&&(m.22==2K?m:m[1O.2e])},7t:u(1O,E){D T=l.4q(E),P=1O.5D;l.2v[T]=(E.2M||l.25(T,1O)||q.N.3P[1O.2e]||"<7b>bU: bV 25 bW V "+T+"</7b>").1Q("{0}",(P.22==3w?P[0]:P)||"").1Q("{1}",P[1]||"")},2P:u(){B(l.7D()){l.3L();C 1a}L{l.5b();B(l.G.7z){l.G.7z(l.5f);C 1a}C Y}},7D:u(){D 4D=0;q.16(l.2v,u(){4D++});C 4D},5b:u(){l.38("7Q")},38:u(5a){D 3u=l;u 4d(){C 3u["3H"+5a]}B(l.G.4o){4d().1y(4d().3G(l.G.4o))}4d()[5a.2r()]();C l},7K:u(){D 2z=Y;V(D 4e 23 l.2v){B(2z&&l.G.7L){B(l.4b&&l.2v[l.4b.T])l.4b.4J();L{3D{D E=q("#"+4e);B(E.I)E[0].4J()}3O(e){l.G.3k&&1h.31&&31.1n(e)}}2z=1a}l.7S(4e,l.2v[4e])}l.2q=l.2q.2i(l.21);l.38("7Q").38("ch")},7S:u(T,25){D 1n=l.2S().4S(T);B(1n.I){B(1n.1p("7V")){1n.2j(25)}}L{1n=q("<7U>").1p({"V":T,7V:Y}).2L(l.G.3d).2j(25);B(l.G.4o){1n=1n.1v().1B().4t("<"+l.G.4o+">").19()}B(!l.4p.3e(1n).I)l.G.84?l.G.84(1n,q("#"+T)):1n.9H("#"+T)}l.21.1y(1n)},2c:u(E){B(!l.S(E))C[];D 2c=[];q.16(l.S(E),u(2T,F){2c[2c.I]={2e:2T,5D:F}});C 2c},S:u(E){C l.G.2c?l.G.2c[l.4q(E)]:l.G.83?q(E).S()[l.G.83]:q(E).S()},4q:u(E){D T=(/47|4s/i.1o(E.H))?E.1f:E.T;B(!T){D 5G=E.1X.T,5v=/[^a-cu-2u-9\\-6r]/g;T=E.T=(5G?5G.1Q(5v,""):"")+E.1f.1Q(5v,"")}C T}},3y:u(F,E){5I(E.1L.2r()){3h\'3z\':C q("1T:3N",E).I;3h\'42\':B(/47|4s/i.1o(E.H))C q(E.1X||U).3t(\'[@1f="\'+E.1f+\'"]:4N\').I}C F.I},8c:u(P,E){C l.5s[R P]?l.5s[R P](P,E):Y},5s:{"6v":u(P,E){C P},"1S":u(P,E){C!!q(P,E.1X).I},"u":u(P,E){C P(E)}},1l:{1k:u(F,E,P){B(!q.N.8c(P,E))C-1;5I(E.1L.2r()){3h\'3z\':D W=q("1T:3N",E);C W.I>0&&(E.H=="3z-cB"||W[0].F.I>0);3h\'42\':5I(E.H.2r()){3h\'4s\':3h\'47\':C q.N.3y(F,E)>0}cE:C F.I>0}},cI:u(F,E,P){C!q.N.1l.1k(F,E)||P.1o(F)},8j:u(F,E,P){D I=q.N.3y(F,E);C!q.N.1l.1k(F,E)||I>=P},6y:u(F,E,P){D I=q.N.3y(F,E);C!q.N.1l.1k(F,E)||I<=P},6z:u(F,E,P){D I=q.N.3y(F,E);C!q.N.1l.1k(F,E)||(I>=P[0]&&I<=P[1])},6B:u(F,E,P){C!q.N.1l.1k(F,E)||F>=P},6C:u(F,E,P){C!q.N.1l.1k(F,E)||F<=P},6E:u(F,E,P){C!q.N.1l.1k(F,E)||(F>=P[0]&&F<=P[1])},4T:u(F,E){C!q.N.1l.1k(F,E)||/^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$/i.1o(F)},1g:u(F,E){C!q.N.1l.1k(F,E)||/^(a8?|a9):\\/\\/[A-2u-9](\\.?[A-2u-4U„1xœ1x–][A-2u-4W\\-1x„1xœ1x–]*)*(\\/([A-2u-4U„1xœ1x–][A-2u-4W\\-\\.1x„1xœ1x–]*)?)*(\\?([A-2u-4U„1xœ1x–][A-2u-4W\\-\\.%\\+=&1x„1xœ1x–]*)?)?$/i.1o(F)},2o:u(F,E){C!q.N.1l.1k(F,E)||!/cz|9Z/.1o(1R 5J(F))},7y:u(F,E){C!q.N.1l.1k(F,E)||/^\\d{4}[/-]\\d{1,2}[/-]\\d{1,2}$/.1o(F)},7a:u(F,E){C!q.N.1l.1k(F,E)||/^\\d\\d?\\.\\d\\d?\\.\\d\\d\\d?\\d?$/.1o(F)},3p:u(F,E){C!q.N.1l.1k(F,E)||/^-?[,0-9]+(\\.\\d+)?$/.1o(F)},6J:u(F,E){C!q.N.1l.1k(F,E)||/^-?[\\.0-9]+(,\\d+)?$/.1o(F)},51:u(F,E){C!q.N.1l.1k(F,E)||/^\\d+$/.1o(F)},6T:u(F,E,P){C F==q(""+P).1W()}},ao:u(1f,2e,25){q.N.1l[1f]=2e;q.N.3P[1f]=25}});(u(){u 2l(1f,2e){B(!3w.5o[1f]){3w.5o[1f]=2e}};2l("cL",u(1E,1V){1V=1V||1h;V(D i=0;i<l.I;i++)1E.3a(1V,l[i],i,l)});2l("cM",u(1E,1V){1V=1V||1h;V(D i=0;i<l.I;i++)B(!1E.3a(1V,l[i],i,l))C 1a;C Y});2l("cN",u(1E,1V){1V=1V||1h;V(D i=0;i<l.I;i++)B(1E.3a(1V,l[i],i,l))C Y;C 1a});2l("4v",u(1E,1V){1V=1V||1h;D r=[];V(D i=0;i<l.I;i++)r[r.I]=1E.3a(1V,l[i],i,l);C r});2l("1z",u(1E,1V){1V=1V||1h;D r=[];V(D i=0;i<l.I;i++)B(1E.3a(1V,l[i],i,l))r[r.I]=l[i];C r});2l("1P",u(ab,8m){V(D i=8m||0;i<l.I;i++)B(l[i]===ab)C i;C-1});2l("8n",u(){C l.1z(u(E,34,8o){C 8o.1P(E)>=34})})})();(u($){D 1r={},2b,2M,65,9q=$.18.1D&&/cO\\s(5\\.5|6\\.)/.1o(86.8f);$.fn.1j({6W:u(G){G=$.1j({},$.6W.48,G);ag();l.1z(\'[@2M]\').16(u(){l.2J=G}).2I("5h",ai).2I(G.Q,6L);C l},6V:9q?u(){C l.16(u(){D 5r=$(l).K(\'8t\');B(5r.2s(/^1g\\(["\'](.*\\.cQ)["\']\\)$/i)){5r=4C.$1;$(l).K({\'8t\':\'2x\',\'1z\':"cR:cU.ad.cV(bS=Y, cX=d0, 3s=\'"+5r+"\')"}).16(u(){D 27=$(l).K(\'27\');B(27!=\'3W\'&&27!=\'5w\')$(l).K(\'27\',\'5w\')})}})}:u(){C l},aI:9q?u(){C l.16(u(){$(l).K({\'1z\':\'\',8t:\'\'})})}:u(){C l},ac:u(1f,F){D 26=l.1p(1f);l.1p(1f,F);C 26},aq:u(){C l.16(u(){$(l)[$(l).2j()?"1B":"1v"]()})},1g:u(){C l.1p(\'5n\')||l.1p(\'3s\')}});u ag(){B(1r.19)C;1r.19=$(\'<29 T="d3"><8u></8u><p 4u="1t"></p><p 4u="1g"></p></29>\').1v().K({27:\'3W\',d4:"d7"}).5Z(\'1t\');1r.2M=$(\'8u\',1r.19);1r.1t=$(\'p.1t\',1r.19);1r.1g=$(\'p.1g\',1r.19)}u 6L(Q){B(l.2J.8N)65=35(1B,l.2J.8N);L 1B();B(l.2J.db)$(\'1t\').2I(\'9y\',4m);4m(Q);B(l.2J.Q!="2Z")$(l).2I(\'2Z\',1v);$(l).2I(\'73\',1v)}u ai(){B(l==2b||!l.2M)C;2b=l;2M=$(l).ac(\'2M\',\'\');B(l.2J.am){1r.2M.1v();1r.1t.2j(l.2J.am.3a(l)).1B()}L B(l.2J.an){D a1=2M.4I(l.2J.an);1r.2M.2j(a1.6G()).1B();1r.1t.68();V(D i=0,8x;8x=a1[i];i++){B(i>0)1r.1t.3e("<br/>");1r.1t.3e(8x)}1r.1t.aq()}L{1r.2M.2j(2M).1B();1r.1t.1v()}B(l.2J.aN&&$(l).1g())1r.1g.2j($(l).1g().1Q(\'dr://\',\'\')).1B();L 1r.1g.1v();1r.19.2L(l.2J.8O);B(l.2J.6V)1r.19.6V()}u 1B(){65=12;1r.19.1B();4m()}u 4m(Q){B(2b==12){$(\'1t\').62(\'9y\',4m);C}D 2D=1r.19[0].8y;D 2E=1r.19[0].8z;B(Q){2D=Q.9t+15;2E=Q.ce+15;1r.19.K({2D:2D+\'2t\',2E:2E+\'2t\'})}D v=ay(),h=1r.19[0];B(v.x+v.cx<h.8y+h.41){2D-=h.41+20;1r.19.K({2D:2D+\'2t\'})}B(v.y+v.cy<h.8z+h.2V){2E-=h.2V+20;1r.19.K({2E:2E+\'2t\'})}}u ay(){D e=U.3b||{},b=U.1t||{},w=1h;u 4E(){D v=dE;V(D i=0;i<11.I;i++){D n=11[i];B(n&&n<v)v=n}C v}C{x:w.8C||e.36||b.36||0,y:w.8E||e.2W||b.2W||0,cx:4E(e.5X,b.5X,w.8H),cy:4E(e.4h,b.4h,w.61)}}u 1v(Q){B(65)ca(65);2b=12;1r.19.1v().3r(l.2J.8O);B(Q.H!="2Z"){$(l).1p(\'2M\',2M).62(\'73\',1v)}B(l.2J.Q!="2Z")$(l).62(\'2Z\',1v);B(l.2J.6V)1r.19.aI()}$.6W={};$.6W.48={8N:dU,Q:"5h",aN:Y,8O:""}})(q);q.1j(q.fn,{aP:u(W){D N=1R q.N(W,l[0]);N.1w=l.3t(":42:2i(:3Z):2i(:2U)").4J(u(){N.4b=l});B(N.G.79){l.3Z(u(Q){B(N.G.3k)Q.3Y();C N.1X()})}B(N.G.Q){N.1w.2I(N.G.Q,u(){N.E(l)})}C N},1y:u(t){C l.71(q.3X(l.2n(),t))},4S:u(T){C l.1z("[@V=\'"+T+"\']")}});q.1j(q.2p[":"],{aW:"!q.3c(a.F)",aX:"!!q.3c(a.F)"});q.N=u(W,1X){l.G=q.1j({},q.N.48,W);l.5f=1X;l.4p=l.G.57;l.7n=l.4p.I&&l.4p||q(1X);l.2B=l.G.77.2l(l.G.57);l.2U()};q.1j(q.N,{48:{3P:{},3d:"1n",7L:Y,77:q([]),57:q([]),79:Y},b1:u(G){q.1j(q.N.48,G)},3P:{1k:"b3 b4 2X 1k.",6y:"1K 1J a F 8W b5 b6 {0} 4V.",8j:"1K 1J a F b7 at b8 {0} 4V.",6z:"1K 1J a F 7j {0} 7k {1} 4V ba.",4T:"1K 1J a 2P 4T bc.",1g:"1K 1J a 2P bd.",2o:"1K 1J a 2P 2o.",7y:"1K 1J a 2P 2o (bf).",7a:"7g 7h 7i 5m bg¼bh bi 5m.",3p:"1K 1J a 2P 3p.",6J:"7g 7h 7i bm bn 5m.",51:"1K 1J 94 51",6T:"1K 1J 7s bo F bp.",6E:"1K 1J a F 7j {0} 7k {1}.",6C:"1K 1J a F bu 6Y 4w 7C 3H {0}.",6B:"1K 1J a F bw 6Y 4w 7C 3H {0}."},5o:{1X:u(){l.5t();V(D i=0,E;E=l.1w[i++];){l.4j(E)}C l.2P()},E:u(E){l.7o(E);l.4j(E);l.3L()},3L:u(2S){B(2S)q.1j(l.2v,2S);l.G.3L?l.G.3L(l.2v,l):l.7K()},5c:u(){B(q.fn.5c)q(l.5f).5c();l.5t();l.5b();l.1w.3r(l.G.3d)},3C:u(7m){C q(7m)[0]},2S:u(){C q("7U."+l.G.3d,l.7n)},2U:u(E){l.2v={};l.21=$([]);l.2q=$([])},5t:u(){l.2U();l.2q=l.2S().1y(l.2B);l.21.1y(l.2B)},7o:u(E){l.2U();l.2q=l.2S().4S(l.4q(l.3C(E)))},4j:u(E){E=l.3C(E);q(E).3r(l.G.3d);D 2c=l.2c(E);V(D i=0,1O;1O=2c[i++];){3D{D 26=q.N.1l[1O.2e](q.3c(E.F),E,1O.5D);B(26===-1)32;B(!26){q(E).2L(l.G.3d);l.7t(1O,E);32}}3O(e){l.G.3k&&1h.31&&31.1n("bJ bK bM bN E "+E.T+", 4j 7s \'"+1O.2e+"\' 2e");9k e}}},25:u(T,1O){D m=l.G.3P[T];C m&&(m.22==2K?m:m[1O.2e])},7t:u(1O,E){D T=l.4q(E),P=1O.5D;l.2v[T]=(E.2M||l.25(T,1O)||q.N.3P[1O.2e]||"<7b>bU: bV 25 bW V "+T+"</7b>").1Q("{0}",(P.22==3w?P[0]:P)||"").1Q("{1}",P[1]||"")},2P:u(){B(l.7D()){l.3L();C 1a}L{l.5b();B(l.G.7z){l.G.7z(l.5f);C 1a}C Y}},7D:u(){D 4D=0;q.16(l.2v,u(){4D++});C 4D},5b:u(){l.38("7Q")},38:u(5a){D 3u=l;u 4d(){C 3u["3H"+5a]}B(l.G.4o){4d().1y(4d().3G(l.G.4o))}4d()[5a.2r()]();C l},7K:u(){D 2z=Y;V(D 4e 23 l.2v){B(2z&&l.G.7L){B(l.4b&&l.2v[l.4b.T])l.4b.4J();L{3D{D E=q("#"+4e);B(E.I)E[0].4J()}3O(e){l.G.3k&&1h.31&&31.1n(e)}}2z=1a}l.7S(4e,l.2v[4e])}l.2q=l.2q.2i(l.21);l.38("7Q").38("ch")},7S:u(T,25){D 1n=l.2S().4S(T);B(1n.I){B(1n.1p("7V")){1n.2j(25)}}L{1n=q("<7U>").1p({"V":T,7V:Y}).2L(l.G.3d).2j(25);B(l.G.4o){1n=1n.1v().1B().4t("<"+l.G.4o+">").19()}B(!l.4p.3e(1n).I)l.G.84?l.G.84(1n,q("#"+T)):1n.9H("#"+T)}l.21.1y(1n)},2c:u(E){B(!l.S(E))C[];D 2c=[];q.16(l.S(E),u(2T,F){2c[2c.I]={2e:2T,5D:F}});C 2c},S:u(E){C l.G.2c?l.G.2c[l.4q(E)]:l.G.83?q(E).S()[l.G.83]:q(E).S()},4q:u(E){D T=(/47|4s/i.1o(E.H))?E.1f:E.T;B(!T){D 5G=E.1X.T,5v=/[^a-cu-2u-9\\-6r]/g;T=E.T=(5G?5G.1Q(5v,""):"")+E.1f.1Q(5v,"")}C T}},3y:u(F,E){5I(E.1L.2r()){3h\'3z\':C q("1T:3N",E).I;3h\'42\':B(/47|4s/i.1o(E.H))C q(E.1X||U).3t(\'[@1f="\'+E.1f+\'"]:4N\').I}C F.I},8c:u(P,E){C l.5s[R P]?l.5s[R P](P,E):Y},5s:{"6v":u(P,E){C P},"1S":u(P,E){C!!q(P,E.1X).I},"u":u(P,E){C P(E)}},1l:{1k:u(F,E,P){B(!q.N.8c(P,E))C-1;5I(E.1L.2r()){3h\'3z\':D W=q("1T:3N",E);C W.I>0&&(E.H=="3z-cB"||W[0].F.I>0);3h\'42\':5I(E.H.2r()){3h\'4s\':3h\'47\':C q.N.3y(F,E)>0}cE:C F.I>0}},cI:u(F,E,P){C!q.N.1l.1k(F,E)||P.1o(F)},8j:u(F,E,P){D I=q.N.3y(F,E);C!q.N.1l.1k(F,E)||I>=P},6y:u(F,E,P){D I=q.N.3y(F,E);C!q.N.1l.1k(F,E)||I<=P},6z:u(F,E,P){D I=q.N.3y(F,E);C!q.N.1l.1k(F,E)||(I>=P[0]&&I<=P[1])},6B:u(F,E,P){C!q.N.1l.1k(F,E)||F>=P},6C:u(F,E,P){C!q.N.1l.1k(F,E)||F<=P},6E:u(F,E,P){C!q.N.1l.1k(F,E)||(F>=P[0]&&F<=P[1])},4T:u(F,E){C!q.N.1l.1k(F,E)||/^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$/i.1o(F)},1g:u(F,E){C!q.N.1l.1k(F,E)||/^(a8?|a9):\\/\\/[A-2u-9](\\.?[A-2u-4U„1xœ1x–][A-2u-4W\\-1x„1xœ1x–]*)*(\\/([A-2u-4U„1xœ1x–][A-2u-4W\\-\\.1x„1xœ1x–]*)?)*(\\?([A-2u-4U„1xœ1x–][A-2u-4W\\-\\.%\\+=&1x„1xœ1x–]*)?)?$/i.1o(F)},2o:u(F,E){C!q.N.1l.1k(F,E)||!/cz|9Z/.1o(1R 5J(F))},7y:u(F,E){C!q.N.1l.1k(F,E)||/^\\d{4}[/-]\\d{1,2}[/-]\\d{1,2}$/.1o(F)},7a:u(F,E){C!q.N.1l.1k(F,E)||/^\\d\\d?\\.\\d\\d?\\.\\d\\d\\d?\\d?$/.1o(F)},3p:u(F,E){C!q.N.1l.1k(F,E)||/^-?[,0-9]+(\\.\\d+)?$/.1o(F)},6J:u(F,E){C!q.N.1l.1k(F,E)||/^-?[\\.0-9]+(,\\d+)?$/.1o(F)},51:u(F,E){C!q.N.1l.1k(F,E)||/^\\d+$/.1o(F)},6T:u(F,E,P){C F==q(""+P).1W()}},ao:u(1f,2e,25){q.N.1l[1f]=2e;q.N.3P[1f]=25}});(u($){$.fn.2h=u(W){C l.16(u(){$.2h(l,W)})};$.2h=u(1U,W){D G={\'5C\':12,\'2h\':\'5M\',\'33\':dy,\'70\':\'8S\',\'1q\':\'bP\',\'4u\':\'2h\',\'1i\':\'44\'};B(W)$.1j(G,W);B(G.5C===12)D 1w=$(1U).5C();L D 1w=$(1U).5C(G.5C);B(1w.I>1){$(1U).K(\'27\',\'5w\');$(1U).K(\'1i\',G["1i"]);$(1U).2L(G["4u"]);V(D i=0;i<1w.I;i++){$(1w[i]).K(\'z-34\',2K(1w.I-i));$(1w[i]).K(\'27\',\'3W\');$(1w[i]).1v()};B(G["2h"]=="5M"){35(u(){$.2h.7e(1w,G,1,0)},G.33);$(1w[0]).1B()}L B(G["2h"]=="54"){35(u(){do{2b=4f.aY(4f.54()*1w.I)}2G(2b==0)$.2h.7e(1w,G,2b,0)},G.33);$(1w[0]).1B()}L 78(\'q: 2h: 8U "2h" 8V 8X be "5M" 4w "54"\')}};$.2h.7e=u(1w,G,2b,2A){B(G["70"]==\'aV\'){$(1w[2A]).aK(G.1q,$(1w[2b]).aM(G.1q))}L B(G["70"]==\'8S\'){$(1w[2A]).aJ(G.1q);$(1w[2b]).aR(G.1q)}L 78(\'q: 2h: 8U "70" 8V 8X be "aV" 4w "8S"\');B(G["2h"]=="5M"){B((2b+1)<1w.I){2b=2b+1;2A=2b-1}L{2b=0;2A=1w.I-1}}L B(G["2h"]=="54"){2A=2b;2G(2b==2A)2b=4f.aY(4f.54()*1w.I)}L 78(\'q: 2h: 8U "2h" 8V 8X be "5M" 4w "54"\');35((u(){$.2h.7e(1w,G,2b,2A)}),G.33)}})(q);(u($){$.3R=u(){l.45={};C};$.3R.5o={6p:u(){D O={"T":12,"4M":4k,"7J":1a,"7A":1a,"17":12,"3g":u(){},"1C":[]};u 67(fn){C(!!fn&&R fn!="1S"&&R fn[0]=="1c"&&4C("u","i").1o(fn+""))};D i=0;D 98=1a;B(R 11[i]=="3j"&&11.I>1){98=Y;i++}B(R 11[i]=="3j"){V(D 1T 23 11[i])B(R O[1T]!="1c")O[1T]=11[i][1T];i++}B(R 11[i]=="3p"||(R 11[i]=="1S"&&11[i].2s(4C("^[0-9]+[bC]$"))))O["4M"]=11[i++];B(R 11[i]=="6v")O["7J"]=11[i++];B(R 11[i]=="6v")O["7A"]=11[i++];B(R 11[i]=="3j"&&R 11[i+1]=="1S"&&67(11[i][11[i+1]])){O["17"]=11[i++];O["3g"]=11[i++]}L B(R 11[i]!="1c"&&(67(11[i])||R 11[i]=="1S"))O["3g"]=11[i++];2G(R 11[i]!="1c")O["1C"].1y(11[i++]);B(98){B(R 11[1]=="3j"){V(D 1T 23 11[0])B(R O[1T]!="1c"&&R 11[1][1T]=="1c")O[1T]=11[0][1T]}L{V(D 1T 23 11[0])B(R O[1T]!="1c")O[1T]=11[0][1T]}i++}O["7M"]=l;O["7N"]=12;D 2s=2K(O["4M"]).2s(4C("^([0-9]+)([bC])$"));B(2s&&2s[0]!="1c"&&2s[1]!="1c")O["4M"]=2K(1b(2s[1])*{s:4k,m:4k*60,h:4k*60*60,d:4k*60*60*24,w:4k*60*60*24*7}[2s[2]]);B(O["T"]==12)O["T"]=(2K(O["7J"])+":"+2K(O["7A"])+":"+2K(O["4M"])+":"+2K(O["17"])+":"+2K(O["3g"])+":"+2K(O["1C"]));B(O["7A"])B(R l.45[O["T"]]!="1c")C l.45[O["T"]];B(!67(O["3g"])){B(O["17"]!=12&&R O["17"]=="3j"&&R O["3g"]=="1S"&&67(O["17"][O["3g"]]))O["3g"]=O["17"][O["3g"]];L O["3g"]=7G("u () { "+O["3g"]+" }")}O["7N"]=l.6X(O);l.45[O["T"]]=O;C O},9B:u(O){B(R O=="1S")O=l.45[O];O["7N"]=l.6X(O);C O},6X:u(O){D c8=u(){D 17=(O["17"]!=12?O["17"]:O);(O["3g"]).1F(17,O["1C"]);B(R(O["7M"]).45[O["T"]]!="1c"&&O["7J"])(O["7M"]).6X(O);L 6m(O["7M"]).45[O["T"]]};C 35(c8,O["4M"])},9D:u(O){B(R O=="1S")O=l.45[O];B(R O=="3j"){ca(O["7N"]);6m l.45[O["T"]]}}};$.1j({3R$:1R $.3R(),6p:u(){C $.3R$.6p.1F($.3R$,11)},9B:u(){C $.3R$.9B.1F($.3R$,11)},9D:u(){C $.3R$.9D.1F($.3R$,11)}});$.fn.1j({6p:u(){D a=[{}];V(D i=0;i<11.I;i++)a.1y(11[i]);C l.16(u(){a[0]={"T":l,"17":l};C $.6p.1F($,a)})}})})(q);(u($){$.1j({5i$:12,3k:u(cp){D cs=($.5i$==Y?Y:1a);$.5i$=(cp?Y:1a);C cs},64:u(25){B($.5i$==Y)31.3k(25)}});$.fn.1j({64:u(25){B($.5i$==Y){C l.16(u(){B(R 25!=="1c")$.64(25);$.64(l)})}}});$(U).3f(u(){D 8a=$("2j").1p("3k");B(8a=="Y"||8a=="1a")$.3k(8a=="Y"?Y:1a)});$(U).3f(u(){B(R 1h.31==="1c"){u c4(17){D 1A=12;B(R 17==="1c")1A="[1c]";L B(R 17==="6v")1A=(17?"Y":"1a");L B(R 17==="3p")1A=""+17;L B(R 17==="1S")1A=17;L B(R 17==="u")1A=17;L B(R 17==="3j"){B(R 17.30!=="1c"){B(17.30==1){1A=\'&9W;\';1A+=17.1L.2r();V(D i=0;i<17.a0.I;i++)1A+=\' \'+17.a0[i].1L.2r()+\'="\'+17.a0[i].5K+\'"\';1A+=\'&a2;\'}L B(17.30==2)1A=17.1L+\'="\'+17.5K;L B(17.30==3)1A=17.5K}L B(R 17.aa!=="1c")1A=17.aa();L B(R 17.4X!=="1c")1A=17.4X()}B(1A==12)1A="[cS]";C 1A};$(U).3f(u(){$("1t").3e(\'<29 T="4H"><4L></4L></29>\');$("#4H").K("1M","2x").K("dh","dl").K("du","#dw").K("dC","#dD").K("6o","85 58 85 58").K("6g","5Y ck #dF").K("6U","5Y 5Y 5Y 5Y");$("#4H 4L").K("6U","58 58 58 58").K("8L","dX")});D 9j=["64","3k","e7","ee","1n","eg","6a","em","ev","eA","4M","eL","4D","eQ","eR","eU"];1h.31={};V(D i=0;i<9j.I;i++){1h.31[9j[i]]=u(c7){$(\'#4H\').K("1M",$.5i$==Y?"43":"2x");$(\'#4H 4L\').3e(\'<1G>\'+c4(c7)+\'</1G>\').K;$("#4H 4L 1G").K("fj","5E ck #fp").K("6o","5E 85 5E 85")}}1h.31["4H"]=Y}})})(q);(u($){B($.18.2Q||86.8f.2s(/a6/i)){$.1j({4P$3Q:[],4P$87:0})}$.1j({cK:u(){D 1H={\'1g\':12,\'9c\':Y,\'cb\':12,\'aE\':12};B(R 11[0]=="1S"){1H.1g=11[0];B(R 11[1]=="u")1H.cb=11[1]}L B(R 11[0]=="3j"){V(D 1T 23 11[0])B(R 1H[1T]!="1c")1H[1T]=11[0][1T]}D 3Q=$(U.69(\'3I\')).1p(\'H\',\'1A/9f\').1p(\'3s\',1H.1g);D 4z=12;B(1H.9c||1H.cb!==12){D 1e=u(){B(1H.cb!==12){D 1C=1H.aE;B(1C===12)1C=[];L B(!(R 1C==="3j"&&1C ea 3w))1C=[1C];1H.cb.1F(l,1C)}B(1H.9c)$(l).3B()};B($.18.1D){3Q.2n(0).5j=u(){B(l.59=="3m"||l.59=="cc")1e.3a(l)}}L B($.18.2Q||86.8f.2s(/a6/i)){$.4P$87++;D 1r=\'D O = q.4P$3Q[\'+$.4P$87+\'];\'+\'O.1e.3a(O.3Q);\'+\'35(u () {\'+\'    q(O.4z).3B();\'+\'}, 88);\';4z=$(U.69(\'3I\')).1p(\'H\',\'1A/9f\').1A(1r);$.4P$3Q[$.4P$87]={1e:1e,3Q:3Q.2n(0),4z:4z.2n(0)}}L{$(3Q).4r(1e)}}$(\'aS\',U).3e(3Q);B(4z!==12){35(u(){$(\'aS\',U).3e(4z)},88)}}})})(q);',62,961,'|||||||||||||||||||||this|||||jQuery||||function|||||||if|return|var|element|value|settings|type|length|elem|css|else||validator|ctx|param|event|typeof|data|id|document|for|options||true|||arguments|null||prop||each|obj|browser|parent|false|parseInt|undefined|ret|callback|name|url|window|height|extend|required|methods|xml|error|test|attr|speed|helper|cur|body|parentNode|hide|elements|Ã|push|filter|text|show|args|msie|handler|apply|li|arg|style|enter|Please|nodeName|display|opacity|rule|indexOf|replace|new|string|option|container|scope|val|form|status|tabs||toShow|constructor|in||message|result|position|hash|div|firstChild|current|rules|width|method|className|nav|alternation|not|html|trigger|add|events|get|date|expr|toHide|toLowerCase|match|px|Z0|errorList|expires|none|global|first|last|containers|hidden|left|top|isFunction|while|initial|bind|tSettings|String|addClass|title|context|opt|valid|safari|num|errors|key|reset|offsetHeight|scrollTop|is|queue|click|nodeType|console|break|timeout|index|setTimeout|scrollLeft|animate|toggle|old|call|documentElement|trim|errorClass|append|ready|func|case|easing|object|debug|end|complete|target|table|number|elems|removeClass|src|find|self|disabled|Array|visible|getLength|select|orig|remove|clean|try|ifModified|params|parents|to|script|done|opera|showErrors|tbody|selected|catch|messages|node|scheduler|nth|bookmarkable|tab|duration|absolute|merge|preventDefault|submit|span|offsetWidth|input|block|auto|bucket|innerHTML|radio|defaults|tb|borderLeftWidth|lastActive|mozilla|which|elementID|Math|nextSibling|clientHeight|selectedClass|check|1000|cookie|update|borderTopWidth|wrapper|labelContainer|findId|load|checkbox|wrap|class|map|or|firstNum|pushStack|node_helper|fix|size|RegExp|count|min|oid|encodeURIComponent|jQueryDebug|split|focus|returnValue|ol|time|checked|overflow|_xsajax|clicked|remote|forId|email|9Ã|characters|9_|toString|guid|res||digits|now|curAnim|random|grep|timers|errorLabelContainer|0px|readyState|that|hideErrors|resetForm|stopPropagation|oldblock|currentForm|custom|mouseover|_debug|onreadystatechange|tmp|exec|ein|href|prototype|success|re|image|dependTypes|prepareForm|sibling|idcleanup|relative|hideAnim|showAnim|boxModel|static|insertBefore|children|parameters|1px|location|formId|cssFloat|switch|Date|nodeValue|containerClass|sequence|on|childNodes|curCSS|fx|ownerDocument|readyList|substr|re2|scroll|handlers|clientWidth|4px|appendTo||innerHeight|unbind|removeChild|log|tID|ajaxHistory|_isfn|empty|createElement|dir|makeArray|domain|has|multiFilter|path|border|op|st|sl|Number|currentStyle|delete|domManip|padding|schedule|setInterval|_|onClick|disabledClass|onHide|boolean|onShow|originalEvent|maxLength|rangeLength|toUpperCase|minValue|maxValue|ul|rangeValue|tabEvents|shift|styleFloat|cloneNode|numberDE|step|handle|oldDisplay|button|token|foundToken|tag|getAttribute|doc|equalTo|margin|fixPNG|Tooltip|_schedule|than|isReady|animation|setArray|Function|mouseout|diff|ajax|parseFloat|errorContainer|alert|onsubmit|dateDE|strong|oHeight|oWidth|_next|ajaxSettings|Bitte|geben|Sie|between|and|modRes|selector|errorContext|prepareElement|lastModified|responseText|jquery|the|formatAndAdd|getTime|inArray|secure|handleError|dateISO|submitHandler|protect|max|equal|countErrors|ival|tr|eval|tagName|absparent|repeat|defaultShowErrors|focusInvalid|_scheduler|_handle|expression|setRequestHeader|Hide|XMLHttpRequest|showError|navClass|label|generated|msie6|minHeight|visibility|cachedWidth|currentWidth|cachedFontSize|currentFontSize|meta|errorPlacement|10px|navigator|nodes|100|toShowId|req|hideClass|depend|defaultView|locked|userAgent|mergeNum|child|trueClick|minLength|async|disableTab|offset|unique|array|isXMLDoc|float|parPos|startTime|backgroundImage|h3|second|inv|part|offsetLeft|offsetTop|chars|pass|pageXOffset|matched|pageYOffset|getComputedStyle|triggered|innerWidth|lastToggle|safariTimer|handleHover|paddingRight|getElementById|delay|extraClass|unload|els|fn2|fade|from|parameter|must|no|either|lastNum|GET|slice|classFilter|_resort|00|only|clearInterval|isTimeout|dataType|override|requestDone|active|file|gc|Modified|getResponseHeader|javascript|evalScripts|clone|globalEval|names|throw|appendChild|join|cookies|substring|cookieValue|IE|swap|deep|pageX|relparent|paddingLeft|paddingTop|returnObject|mousemove|bgiframe|hasSelectedClass|reschedule|unFocus|cancel|jq|heights|font|insertAfter|watchFontSize|_setAutoHeight|cachedHeight|currentHeight|pos|fxSpeed|fxSlide|fxFade|fxShow|fxHide|clientX|hideSpeed|showSpeed|remoteUrls|lt|switchTab|loadingClass|NaN|attributes|parts|gt|blur|triggerTab|enableTab|Konqueror|tabEvent|https|ftp|toJSONString|subject|getAndSetAttr|Microsoft|exclude|force|createHelper|getPropertyValue|save|zoom|alpha||bodyHandler|showBody|addMethod|webkit|hideWhenEmpty|after|removeAttr||contains|password|swing|tl|viewport|getElementsByTagName|parse|_prefix|even|odd|cb_args|unshift|srcElement|newProp|unfixPNG|fadeOut|slideUp|DOMContentLoaded|slideDown|showURL|__ie_init|validate|one|fadeIn|head|_toggle|state|slide|blank|filled|floor|dequeue|timer|setDefaults|oldOverflow|This|field|longer|then|of|least|getScript|long|POST|address|URL||ISO|gÃ|ltiges|Datum|ActiveXObject|contentType||eine|Nummer|same|again|beforeSend||ajaxSend||less|notmodified|greater|ajaxSuccess|ajaxComplete|ajaxStop|ajaxError|httpSuccess|smhdw|200|httpNotModified|Last|304|xmlRes|httpData|exception|occured|json|when|checking|execScript|normal|ywdhms|setTime|enabled|toUTCString|Warning|No|defined|_height|_width|borderBottomWidth|paddingBottom|borderRightWidth|prevObject|offsetParent|object2text|marginLeft|marginTop|msg|trampoline|before|clearTimeout||loaded|prepend|pageY|iframe|hashPrefix|Show|remoteCount|tabStruct|solid|fxAutoHeight|behaviour|previousSibling|watch|onoff|fxShowSpeed|fxHideSpeed|old_value||zA|action|tempForm|||Invalid|siblings|multiple|scrollTo|scrollX|default|scrollY|ajaxStart|processData|regex|initialize|getScriptXS|forEach|every|some|MSIE|createTextNode|png|progid|unknown|reverse|DXImageTransform|AlphaImageLoader|line|sizingMethod|Right|Left|crop|Width|right|tooltip|zIndex|thead|tfoot|3000|td|th|htmlFor|track|readonly|readOnly|getAttributeNode|setAttribute|ig|fontFamily|concat|compatible|compatMode|monospace|CSS1Compat|next||prev|prependTo|http|removeAttribute|toggleClass|backgroundColor|lastChild|ffffff|textarea|2000|u0128|uFFFF|continue|color|000000|Infinity|666699|clientY|cancelBubble|fromElement|toElement|relatedTarget|removeEventListener|resize|dblclick|mousedown|mouseup|keydown|keypress|keyup|addEventListener|250|write|scr|20px|ipt|defer|change|slideToggle|fadeTo|Object|slow|600|fast|info|400|linear|instanceof|cos|hover|PI|warn|10000|assert|loadIfModified|serialize|textContent|getIfModified||dirxml|getJSON|post|ajaxTimeout||ajaxSetup|application|www|urlencoded|group|XMLHTTP|open|Content|Type|groupEnd|If|Since|Thu|01|Jan|1970|GMT|Requested|With|overrideMimeType|timeEnd|Connection|close|abort|send|trace|profile|protocol|300|profileEnd|Bottom|content|responseXML|Top|noConflict|center|horizontal|weight|vertical|365|invalid|decodeURIComponent|scrollHeight|scrollWidth|outerHeight|outerWidth|inline|bgIframe|frameborder|tabindex|Alpha|FORM|Opacity|loading|borderBottom|500||removeExpression||sort|cccccc|setExpression|Loading|8230|There|such'.split('|'),0,{}))
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 13 12:34:52 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 2A70F752926; Fri, 13 Apr 2007 12:34:52 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.rpc.pl
Message-Id: <20070413103452.2A70F752926@mail.ossp.org>
Date: Fri, 13 Apr 2007 12:34:52 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Apr-2007 12:34:52
  Branch: HEAD                             Handle: 2007041311345100

  Modified files:
    ossp-pkg/ase            ase.cgi.rpc.pl

  Log:
    do not output undef

  Summary:
    Revision    Changes     Path
    1.19        +1  -1      ossp-pkg/ase/ase.cgi.rpc.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.rpc.pl
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 ase.cgi.rpc.pl
  --- ossp-pkg/ase/ase.cgi.rpc.pl	12 Apr 2007 21:28:42 -0000	1.18
  +++ ossp-pkg/ase/ase.cgi.rpc.pl	13 Apr 2007 10:34:51 -0000	1.19
  @@ -188,7 +188,7 @@
           if (defined $recs) {
               foreach my $rec (@{$recs}) {
                   foreach my $field (sort keys %{$rec}) {
  -                    $content .= sprintf("%s: %s\n", $field, $rec->{$field});
  +                    $content .= sprintf("%s: %s\n", $field, $rec->{$field} || "");
                   }
                   $content .= "\n";
               }
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 13 12:43:01 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id E765A752926; Fri, 13 Apr 2007 12:43:00 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ChangeLog NEWS README VERSION ase.cgi ase.cl...
Message-Id: <20070413104300.E765A752926@mail.ossp.org>
Date: Fri, 13 Apr 2007 12:43:00 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Apr-2007 12:43:00
  Branch: HEAD                             Handle: 2007041311430000

  Modified files:
    ossp-pkg/ase            ChangeLog NEWS README VERSION ase.cgi ase.cli

  Log:
    bump for release

  Summary:
    Revision    Changes     Path
    1.33        +1  -1      ossp-pkg/ase/ChangeLog
    1.3         +5  -0      ossp-pkg/ase/NEWS
    1.10        +1  -1      ossp-pkg/ase/README
    1.6         +1  -1      ossp-pkg/ase/VERSION
    1.26        +2  -2      ossp-pkg/ase/ase.cgi
    1.6         +2  -2      ossp-pkg/ase/ase.cli
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 ChangeLog
  --- ossp-pkg/ase/ChangeLog	12 Apr 2007 21:28:42 -0000	1.32
  +++ ossp-pkg/ase/ChangeLog	13 Apr 2007 10:43:00 -0000	1.33
  @@ -11,7 +11,7 @@
     This is a list of all changes to OSSP ase.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 0.2.1 and 0.2.2 (06-Apr-2007 to 10-Apr-2007)
  +  Changes between 0.2.1 and 0.3.0 (06-Apr-2007 to 13-Apr-2007)
      
      o Provide a low-level "dump" RPC for remote dumping the membership
        records of the database. Authentication is done via simple
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/NEWS
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 NEWS
  --- ossp-pkg/ase/NEWS	30 Mar 2007 18:49:45 -0000	1.2
  +++ ossp-pkg/ase/NEWS	13 Apr 2007 10:43:00 -0000	1.3
  @@ -11,6 +11,11 @@
     This is a list of major changes to OSSP ase. For more detailed
     change descriptions, please have a look at the ChangeLog file.
   
  +  Major changes between 0.2 and 0.3
  +
  +    o cross-site ASE-CERT functionality
  +    o dump RPC method
  +
     Major changes between 0.1 and 0.2
   
       o "Heartbeat" functionality
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/README
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 README
  --- ossp-pkg/ase/README	6 Apr 2007 20:46:33 -0000	1.9
  +++ ossp-pkg/ase/README	13 Apr 2007 10:43:00 -0000	1.10
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     \___/|___/\___| 
   
     OSSP ase - Affiliation Service Environment
  -  Version 0.2.1 (06-Apr-2007)
  +  Version 0.3.0 (13-Apr-2007)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/VERSION
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 VERSION
  --- ossp-pkg/ase/VERSION	6 Apr 2007 20:46:33 -0000	1.5
  +++ ossp-pkg/ase/VERSION	13 Apr 2007 10:43:00 -0000	1.6
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP ase (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP ase, Version 0.2.1 (06-Apr-2007)
  +  This is OSSP ase, Version 0.3.0 (13-Apr-2007)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 ase.cgi
  --- ossp-pkg/ase/ase.cgi	12 Apr 2007 14:00:27 -0000	1.25
  +++ ossp-pkg/ase/ase.cgi	13 Apr 2007 10:43:00 -0000	1.26
  @@ -34,8 +34,8 @@
   our $cfg = {
       -prog_name   => 'OSSP ase',
       -prog_desc   => 'Affiliation Service Environment',
  -    -prog_vers   => '0.2.1',
  -    -prog_date   => '06-Apr-2007',
  +    -prog_vers   => '0.3.0',
  +    -prog_date   => '13-Apr-2007',
       -path_cfgdir => '.',
       -path_libdir => '.',
       -path_vardir => '.',
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cli
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ase.cli
  --- ossp-pkg/ase/ase.cli	6 Apr 2007 20:46:33 -0000	1.5
  +++ ossp-pkg/ase/ase.cli	13 Apr 2007 10:43:00 -0000	1.6
  @@ -34,8 +34,8 @@
   our $cfg = {
       -prog_name   => 'OSSP ase',
       -prog_desc   => 'Affiliation Service Environment',
  -    -prog_vers   => '0.2.1',
  -    -prog_date   => '06-Apr-2007',
  +    -prog_vers   => '0.3.0',
  +    -prog_date   => '13-Apr-2007',
       -path_cfgdir => '.',
       -path_libdir => '.',
       -path_vardir => '.',
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 13 12:47:24 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 8920C752926; Fri, 13 Apr 2007 12:47:23 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/tool/ase/ index.wml os...
Message-Id: <20070413104723.8920C752926@mail.ossp.org>
Date: Fri, 13 Apr 2007 12:47:23 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   13-Apr-2007 12:47:23
  Branch: HEAD                             Handle: 2007041311472101

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/ase   index.wml

  Log:
    release OSSP ase 0.3.0

  Summary:
    Revision    Changes     Path
    1.169       +1  -0      ossp-web/new/news.txt
    1.4         +2  -2      ossp-web/pkg/tool/ase/index.wml
    1.62        +1  -1      ossp-web/pkg/tool/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.168 -r1.169 news.txt
  --- ossp-web/new/news.txt	6 Apr 2007 20:48:21 -0000	1.168
  +++ ossp-web/new/news.txt	13 Apr 2007 10:47:21 -0000	1.169
  @@ -1,3 +1,4 @@
  +13-Apr-2007: Released T<OSSP ase> 0.3.0
   06-Apr-2007: Released T<OSSP ase> 0.2.1
   06-Apr-2007: Released T<OSSP ase> 0.2.0
   01-Mar-2007: Released T<OSSP snmpdx> 1.0.0
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/ase/index.wml
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 index.wml
  --- ossp-web/pkg/tool/ase/index.wml	6 Apr 2007 20:48:23 -0000	1.3
  +++ ossp-web/pkg/tool/ase/index.wml	13 Apr 2007 10:47:22 -0000	1.4
  @@ -21,7 +21,7 @@
   
   <pkg_status
       stable="none" stable_date="none"
  -    unstable="0.2.1" unstable_date="06-Apr-2007"
  +    unstable="0.3.0" unstable_date="13-Apr-2007"
   	done=100>
   
   <h2>Source</h2>
  @@ -31,7 +31,7 @@
       url=$(FTP_ROOT_URL)/pkg/tool/ase/
       directory=$(FTP_ROOT_DIR)/pkg/tool/ase/
       files="ase-*.tar.gz" 
  -	stable="ase-0.2.1.tar.gz" unstable="none">
  +	stable="ase-0.3.0.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.61 -r1.62 index.wml
  --- ossp-web/pkg/tool/index.wml	6 Apr 2007 20:48:21 -0000	1.61
  +++ ossp-web/pkg/tool/index.wml	13 Apr 2007 10:47:22 -0000	1.62
  @@ -38,7 +38,7 @@
   	        done=90 stable="none" unstable="0.9.0">
     <pkg_item name="ase" longname="OSSP ase" type="tool"
               desc="Affiliation Services Environment"
  -		    done=95 stable="none" unstable="0.2.1">
  +		    done=95 stable="none" unstable="0.3.0">
     <pkg_item name="xenia" longname="OSSP xenia" type="tool"
               desc="CVS Browsing Server"
   	        done=20 stable="none" unstable="none">
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 13 13:11:10 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 50EEC75290B; Fri, 13 Apr 2007 13:11:10 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.login.pl
Message-Id: <20070413111110.50EEC75290B@mail.ossp.org>
Date: Fri, 13 Apr 2007 13:11:10 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Apr-2007 13:11:10
  Branch: HEAD                             Handle: 2007041312110900

  Modified files:
    ossp-pkg/ase            ase.cgi.login.pl

  Log:
    allow shorter nicknames

  Summary:
    Revision    Changes     Path
    1.50        +1  -1      ossp-pkg/ase/ase.cgi.login.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.49 -r1.50 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	12 Apr 2007 14:00:27 -0000	1.49
  +++ ossp-pkg/ase/ase.cgi.login.pl	13 Apr 2007 11:11:09 -0000	1.50
  @@ -436,7 +436,7 @@
                           [\da-fA-F]{12}$/x) {
           $field = "me_uuid";
       }
  -    elsif ($login =~ m/^[a-z][a-z0-9]{3,}$/) {
  +    elsif ($login =~ m/^[a-z][a-z0-9]{2,}$/) {
           $field = "me_nickname";
       }
       else {
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 13 13:58:16 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id D660575290B; Fri, 13 Apr 2007 13:58:16 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ChangeLog ase.cgi.main.pl
Message-Id: <20070413115816.D660575290B@mail.ossp.org>
Date: Fri, 13 Apr 2007 13:58:16 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Apr-2007 13:58:16
  Branch: HEAD                             Handle: 2007041312581501

  Modified files:
    ossp-pkg/ase            ChangeLog ase.cgi.main.pl

  Log:
    Disable Tooltips for MSIE as it causes some fields to
    disappear (seems to be a bug related to z-index).

  Summary:
    Revision    Changes     Path
    1.34        +6  -0      ossp-pkg/ase/ChangeLog
    1.49        +10 -8      ossp-pkg/ase/ase.cgi.main.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 ChangeLog
  --- ossp-pkg/ase/ChangeLog	13 Apr 2007 10:43:00 -0000	1.33
  +++ ossp-pkg/ase/ChangeLog	13 Apr 2007 11:58:15 -0000	1.34
  @@ -11,6 +11,12 @@
     This is a list of all changes to OSSP ase.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 0.3.0 and 0.3.1 (13-Apr-2007 to xx-Apr-2007)
  +
  +   o Disable Tooltips for MSIE as it causes some fields to
  +     disappear (seems to be a bug related to z-index).
  +     [Ralf S. Engelschall]
  +
     Changes between 0.2.1 and 0.3.0 (06-Apr-2007 to 13-Apr-2007)
      
      o Provide a low-level "dump" RPC for remote dumping the membership
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.48 -r1.49 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	12 Apr 2007 21:28:42 -0000	1.48
  +++ ossp-pkg/ase/ase.cgi.main.pl	13 Apr 2007 11:58:16 -0000	1.49
  @@ -203,14 +203,16 @@
           $html .= "</div>\n";
           $html .= "<script type=\"text/javascript\">\n" .
                    "    \$(document).ready(function () {\n" .
  -                 "         \$('div.ase *').Tooltip({\n" .
  -                 "             delay:      1500,\n" .
  -                 "             event:      'mouseover',\n" .
  -                 "             track:      false,\n" .
  -                 "             showURL:    false,\n" .
  -                 "             showBody:   '::',\n" .
  -                 "             extraClass: 'tooltip'\n" .
  -                 "         });\n" .
  +                 "        if (!\$.browser.msie) {\n" .
  +                 "            \$('div.ase *').Tooltip({\n" .
  +                 "                delay:      1500,\n" .
  +                 "                event:      'mouseover',\n" .
  +                 "                track:      false,\n" .
  +                 "                showURL:    false,\n" .
  +                 "                showBody:   '::',\n" .
  +                 "                extraClass: 'tooltip'\n" .
  +                 "            });\n" .
  +                 "        }\n" .
                    "    });\n" .
                    "</script>\n";
           $html->divert();
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 13 14:45:03 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 747A1753036; Fri, 13 Apr 2007 14:45:03 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.ui.css
Message-Id: <20070413124503.747A1753036@mail.ossp.org>
Date: Fri, 13 Apr 2007 14:45:03 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Apr-2007 14:45:03
  Branch: HEAD                             Handle: 2007041313450300

  Modified files:
    ossp-pkg/ase            ase.ui.css

  Log:
    increase z-index

  Summary:
    Revision    Changes     Path
    1.5         +1  -1      ossp-pkg/ase/ase.ui.css
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.ui.css
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ase.ui.css
  --- ossp-pkg/ase/ase.ui.css	6 Apr 2007 14:51:36 -0000	1.4
  +++ ossp-pkg/ase/ase.ui.css	13 Apr 2007 12:45:03 -0000	1.5
  @@ -315,7 +315,7 @@
       position:              absolute;
       top:                   4px;
       right:                 4px;
  -    z-index:               100;
  +    z-index:               10000;
       width:                 9px;
       height:                9px;
       background-image:      url('ase.ui.lock.gif');
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 13 14:58:51 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id C6199752926; Fri, 13 Apr 2007 14:58:50 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.ui.css
Message-Id: <20070413125850.C6199752926@mail.ossp.org>
Date: Fri, 13 Apr 2007 14:58:50 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Apr-2007 14:58:50
  Branch: HEAD                             Handle: 2007041313585000

  Modified files:
    ossp-pkg/ase            ase.ui.css

  Log:
    remove z-index as it should be not required anyway but causes trouble
    with brain-dead buggy MSUE

  Summary:
    Revision    Changes     Path
    1.6         +0  -1      ossp-pkg/ase/ase.ui.css
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.ui.css
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ase.ui.css
  --- ossp-pkg/ase/ase.ui.css	13 Apr 2007 12:45:03 -0000	1.5
  +++ ossp-pkg/ase/ase.ui.css	13 Apr 2007 12:58:50 -0000	1.6
  @@ -315,7 +315,6 @@
       position:              absolute;
       top:                   4px;
       right:                 4px;
  -    z-index:               10000;
       width:                 9px;
       height:                9px;
       background-image:      url('ase.ui.lock.gif');
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 13 15:23:41 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 9FE377528B9; Fri, 13 Apr 2007 15:23:41 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.ui.css
Message-Id: <20070413132341.9FE377528B9@mail.ossp.org>
Date: Fri, 13 Apr 2007 15:23:41 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Apr-2007 15:23:41
  Branch: HEAD                             Handle: 2007041314234100

  Modified files:
    ossp-pkg/ase            ase.ui.css

  Log:
    fixate width of login field

  Summary:
    Revision    Changes     Path
    1.7         +7  -1      ossp-pkg/ase/ase.ui.css
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.ui.css
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ase.ui.css
  --- ossp-pkg/ase/ase.ui.css	13 Apr 2007 12:58:50 -0000	1.6
  +++ ossp-pkg/ase/ase.ui.css	13 Apr 2007 13:23:41 -0000	1.7
  @@ -223,7 +223,13 @@
   .ase form.login input#button_login {
       color:            #000000;
       font-weight:      bold;
  -    width:            100%;
  +    width:            250px !important;
  +}
  +.ase form.login #field_login {
  +    width:            250px !important;
  +}
  +.ase form.login #field_password {
  +    width:            250px !important;
   }
   
   /* Screen "Enrollment" */
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 13 15:28:53 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 975D175289B; Fri, 13 Apr 2007 15:28:53 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.ui.css
Message-Id: <20070413132853.975D175289B@mail.ossp.org>
Date: Fri, 13 Apr 2007 15:28:53 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Apr-2007 15:28:53
  Branch: HEAD                             Handle: 2007041314285300

  Modified files:
    ossp-pkg/ase            ase.ui.css

  Log:
    fixate font size

  Summary:
    Revision    Changes     Path
    1.8         +1  -0      ossp-pkg/ase/ase.ui.css
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.ui.css
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 ase.ui.css
  --- ossp-pkg/ase/ase.ui.css	13 Apr 2007 13:23:41 -0000	1.7
  +++ ossp-pkg/ase/ase.ui.css	13 Apr 2007 13:28:53 -0000	1.8
  @@ -29,6 +29,7 @@
       width:            600px;
       padding:          2px 2px 2px 2px;
       font-family:      sans-serif, helvetica, arial;
  +    font-size:        9pt;
       background:       #f8f8f8;
   }
   .ase div.box {
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 13 17:33:18 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 585637528EC; Fri, 13 Apr 2007 17:33:18 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.enroll.pl ase.cgi.profile.pl
Message-Id: <20070413153318.585637528EC@mail.ossp.org>
Date: Fri, 13 Apr 2007 17:33:18 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Apr-2007 17:33:18
  Branch: HEAD                             Handle: 2007041316331700

  Modified files:
    ossp-pkg/ase            ase.cgi.enroll.pl ase.cgi.profile.pl

  Log:
    fix nickname checks

  Summary:
    Revision    Changes     Path
    1.59        +1  -1      ossp-pkg/ase/ase.cgi.enroll.pl
    1.28        +1  -1      ossp-pkg/ase/ase.cgi.profile.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.58 -r1.59 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	11 Apr 2007 17:48:31 -0000	1.58
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	13 Apr 2007 15:33:17 -0000	1.59
  @@ -374,7 +374,7 @@
               $error = 1;
           }
           ($re, $req) = @{$cfg->{-cfg}->{"requirement-nickname"}};
  -        if ($nickname !~ m/(?:|${re})/) {
  +        if ($nickname !~ m/(?:^$|${re})/) {
               $cgi->param('nickname.error', "Invalid Nickname: has to be $req");
               $error = 1;
           }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.profile.pl
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 ase.cgi.profile.pl
  --- ossp-pkg/ase/ase.cgi.profile.pl	6 Apr 2007 13:44:39 -0000	1.27
  +++ ossp-pkg/ase/ase.cgi.profile.pl	13 Apr 2007 15:33:17 -0000	1.28
  @@ -362,7 +362,7 @@
               $error = 1;
           }
           ($re, $req) = @{$cfg->{-cfg}->{"requirement-nickname"}};
  -        if ($nickname !~ m/(?:|${re})/) {
  +        if ($nickname !~ m/(?:^$|${re})/) {
               $cgi->param('nickname.error', "Invalid Nickname: has to be $req");
               $error = 1;
           }
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 13 18:13:39 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 9171E7529F2; Fri, 13 Apr 2007 18:13:39 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ Makefile
Message-Id: <20070413161339.9171E7529F2@mail.ossp.org>
Date: Fri, 13 Apr 2007 18:13:39 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Apr-2007 18:13:39
  Branch: HEAD                             Handle: 2007041317133800

  Modified files:
    ossp-pkg/ase            Makefile

  Log:
    fix my dev environment

  Summary:
    Revision    Changes     Path
    1.14        +1  -0      ossp-pkg/ase/Makefile
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/Makefile
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 Makefile
  --- ossp-pkg/ase/Makefile	12 Apr 2007 14:00:26 -0000	1.13
  +++ ossp-pkg/ase/Makefile	13 Apr 2007 16:13:38 -0000	1.14
  @@ -23,6 +23,7 @@
   	rm -f ase.db
   	./ase.cli db ase.db
   	chmod a+rw ase.db
  +	chmod a+w .
   
   clean:
   	-rm -f ase.db
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 13 18:15:58 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 58E047529F2; Fri, 13 Apr 2007 18:15:58 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ChangeLog ase.cgi.enroll.pl ase.cgi.login.pl
Message-Id: <20070413161558.58E047529F2@mail.ossp.org>
Date: Fri, 13 Apr 2007 18:15:58 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Apr-2007 18:15:58
  Branch: HEAD                             Handle: 2007041317155700

  Modified files:
    ossp-pkg/ase            ChangeLog ase.cgi.enroll.pl ase.cgi.login.pl

  Log:
    Correctly match email address case-sensitive on the local
    part and case-insensitive on the FQDN part.

  Summary:
    Revision    Changes     Path
    1.35        +4  -0      ossp-pkg/ase/ChangeLog
    1.60        +21 -4      ossp-pkg/ase/ase.cgi.enroll.pl
    1.51        +35 -14     ossp-pkg/ase/ase.cgi.login.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 ChangeLog
  --- ossp-pkg/ase/ChangeLog	13 Apr 2007 11:58:15 -0000	1.34
  +++ ossp-pkg/ase/ChangeLog	13 Apr 2007 16:15:57 -0000	1.35
  @@ -13,6 +13,10 @@
   
     Changes between 0.3.0 and 0.3.1 (13-Apr-2007 to xx-Apr-2007)
   
  +   o Correctly match email address case-sensitive on the local
  +     part and case-insensitive on the FQDN part.
  +     [Ralf S. Engelschall]
  +
      o Disable Tooltips for MSIE as it causes some fields to
        disappear (seems to be a bug related to z-index).
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.59 -r1.60 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	13 Apr 2007 15:33:17 -0000	1.59
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	13 Apr 2007 16:15:57 -0000	1.60
  @@ -399,9 +399,19 @@
           #   make sure the Email address is still not used
           if (not defined($cgi->param('address.error'))) {
               my $rec;
  +            my ($user, $fqdn) = ($address =~ m/^(.+)(\@.+)$/);
  +            my $user_len = length($user);
  +            my $fqdn_len = length($fqdn);
               ($rec = $dbi->query(q{
  -                SELECT * FROM ase_member WHERE me_address = ?;
  -            }, $address)->hash());
  +                SELECT *
  +                FROM   ase_member
  +                WHERE  SUBSTR(me_address, 1, 0+?)          = ? AND
  +                       LOWER(SUBSTR(me_address, 0+?, 0+?)) = ? AND
  +                       LENGTH(me_address)                  = 0+?;
  +            }, $user_len, $user,
  +               $user_len + 1, $fqdn_len, lc($fqdn),
  +               $user_len + $fqdn_len
  +            )->hash());
               if (defined($rec)) {
                   $cgi->param('address.error', "Email address already in use since " .
                       $self->datetime2str($rec->{'me_membership_start'}) . " (enrollment already successful)");
  @@ -409,8 +419,15 @@
               }
               else {
                   ($rec = $dbi->query(q{
  -                    SELECT *, MAX(en_start) FROM ase_enrollment WHERE en_address = ?;
  -                }, $address)->hash());
  +                    SELECT *, MAX(en_start)
  +                    FROM   ase_enrollment
  +                    WHERE  SUBSTR(en_address, 1, 0+?)          = ? AND
  +                           LOWER(SUBSTR(en_address, 0+?, 0+?)) = ? AND
  +                           LENGTH(en_address)                  = 0+?;
  +                }, $user_len, $user,
  +                   $user_len + 1, $fqdn_len, lc($fqdn),
  +                   $user_len + $fqdn_len
  +                )->hash());
                   if (defined($rec)) {
                       my $penalty = $self->datetime2time($rec->{'en_penalty'});
                       if (time() < $penalty) {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.login.pl
  ============================================================================
  $ cvs diff -u -r1.50 -r1.51 ase.cgi.login.pl
  --- ossp-pkg/ase/ase.cgi.login.pl	13 Apr 2007 11:11:09 -0000	1.50
  +++ ossp-pkg/ase/ase.cgi.login.pl	13 Apr 2007 16:15:57 -0000	1.51
  @@ -425,26 +425,47 @@
           $error = "Empty login";
           goto CLEANUP;
       }
  -    my $field = "";
  +    my @rec;
       if ($login =~ m/^.+\@.+$/) {
  -        $field = "me_address";
  -    }
  -    elsif ($login =~ m/^[\da-fA-F]{8}-
  -                        [\da-fA-F]{4}-
  -                        [\da-fA-F]{4}-
  -                        [\da-fA-F]{4}-
  -                        [\da-fA-F]{12}$/x) {
  -        $field = "me_uuid";
  +        #   lookup record by email address
  +        my ($user, $fqdn) = ($login =~ m/^(.+)(\@.+)$/);
  +        my $user_len = length($user);
  +        my $fqdn_len = length($fqdn);
  +        @rec = $dbi->query(q{
  +            SELECT *
  +            FROM   ase_member
  +            WHERE  SUBSTR(me_address, 1, 0+?)          = ? AND
  +                   LOWER(SUBSTR(me_address, 0+?, 0+?)) = ? AND
  +                   LENGTH(me_address)                  = 0+?;
  +        },  $user_len, $user,
  +            $user_len + 1, $fqdn_len, lc($fqdn),
  +            $user_len + $fqdn_len
  +        )->hashes();
  +    }
  +    elsif ($login =~ m/^[\da-fA-F]{8}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{12}$/x) {
  +        #   lookup record by membership UUID
  +        @rec = $dbi->query(q{
  +            SELECT *
  +            FROM   ase_member
  +            WHERE  me_uuid = ?;
  +        }, $login)->hashes();
       }
       elsif ($login =~ m/^[a-z][a-z0-9]{2,}$/) {
  -        $field = "me_nickname";
  +        #   lookup record by nickname
  +        @rec = $dbi->query(q{
  +            SELECT *
  +            FROM   ase_member
  +            WHERE  me_nickname = ?;
  +        }, $login)->hashes();
       }
       else {
  -        $field = "me_name";
  +        #   lookup record by name
  +        @rec = $dbi->query(q{
  +            SELECT *
  +            FROM   ase_member
  +            WHERE  me_name = ?;
  +        }, $login)->hashes();
       }
  -    my @rec = $dbi->query(qq{
  -        SELECT * FROM ase_member WHERE $field = ?;
  -    }, $login)->hashes();
       if (@rec == 0) {
           $error = "Unknown login";
           goto CLEANUP;
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 13 19:20:41 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 0696C752926; Fri, 13 Apr 2007 19:20:41 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.ui.html
Message-Id: <20070413172041.0696C752926@mail.ossp.org>
Date: Fri, 13 Apr 2007 19:20:41 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Apr-2007 19:20:40
  Branch: HEAD                             Handle: 2007041318204000

  Modified files:
    ossp-pkg/ase            ase.ui.html

  Log:
    use canonical form of name

  Summary:
    Revision    Changes     Path
    1.2         +1  -1      ossp-pkg/ase/ase.ui.html
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.ui.html
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ase.ui.html
  --- ossp-pkg/ase/ase.ui.html	30 Mar 2007 09:36:33 -0000	1.1
  +++ ossp-pkg/ase/ase.ui.html	13 Apr 2007 17:20:40 -0000	1.2
  @@ -3,7 +3,7 @@
   <html>
     <head>
       <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
  -    <title>ASE</title>
  +    <title>OSSP ase</title>
       <style type="text/css">
         body {
             margin-top:  50px;
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 13 19:24:17 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 66C9475300E; Fri, 13 Apr 2007 19:24:17 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.logout.pl ase.cgi.main.pl ase.cgi.re...
Message-Id: <20070413172417.66C9475300E@mail.ossp.org>
Date: Fri, 13 Apr 2007 19:24:17 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Apr-2007 19:24:17
  Branch: HEAD                             Handle: 2007041318241601

  Modified files:
    ossp-pkg/ase            ase.cgi.logout.pl ase.cgi.main.pl
                            ase.cgi.resign.pl

  Log:
    cleanup naming of functions

  Summary:
    Revision    Changes     Path
    1.21        +1  -1      ossp-pkg/ase/ase.cgi.logout.pl
    1.50        +2  -2      ossp-pkg/ase/ase.cgi.main.pl
    1.14        +1  -1      ossp-pkg/ase/ase.cgi.resign.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.logout.pl
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 ase.cgi.logout.pl
  --- ossp-pkg/ase/ase.cgi.logout.pl	11 Apr 2007 16:21:24 -0000	1.20
  +++ ossp-pkg/ase/ase.cgi.logout.pl	13 Apr 2007 17:24:16 -0000	1.21
  @@ -88,7 +88,7 @@
   }
   
   #   application run-time mode processing: "menu-logout"
  -sub mode_menu_logout_screen {
  +sub mode_menu_logout {
       my $self    = shift;
       my $cfg     = $self->param(-cfg);
       my $cgi     = $self->param(-cgi);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.49 -r1.50 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	13 Apr 2007 11:58:16 -0000	1.49
  +++ ossp-pkg/ase/ase.cgi.main.pl	13 Apr 2007 17:24:16 -0000	1.50
  @@ -139,8 +139,8 @@
   
           #   application modes
           'menu-profile'       => { -login => 1, -canvas => 1, -method => \&mode_menu_profile         },
  -        'menu-logout'        => { -login => 1, -canvas => 1, -method => \&mode_menu_logout_screen   },
  -        'menu-resign'        => { -login => 1, -canvas => 1, -method => \&mode_menu_resign_screen   },
  +        'menu-logout'        => { -login => 1, -canvas => 1, -method => \&mode_menu_logout          },
  +        'menu-resign'        => { -login => 1, -canvas => 1, -method => \&mode_menu_resign          },
       };
       $self->param(-modes => $modes);
       my %run_modes = ();
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.resign.pl
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 ase.cgi.resign.pl
  --- ossp-pkg/ase/ase.cgi.resign.pl	11 Apr 2007 16:21:25 -0000	1.13
  +++ ossp-pkg/ase/ase.cgi.resign.pl	13 Apr 2007 17:24:17 -0000	1.14
  @@ -30,7 +30,7 @@
   use warnings;
   
   #   application run-time mode processing: "menu-resign"
  -sub mode_menu_resign_screen {
  +sub mode_menu_resign {
       my $self    = shift;
       my $cfg     = $self->param(-cfg);
       my $cgi     = $self->param(-cgi);
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 13 19:27:24 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 74CF9752FE3; Fri, 13 Apr 2007 19:27:24 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.logout.pl ase.cgi.main.pl
Message-Id: <20070413172724.74CF9752FE3@mail.ossp.org>
Date: Fri, 13 Apr 2007 19:27:24 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Apr-2007 19:27:24
  Branch: HEAD                             Handle: 2007041318272400

  Modified files:
    ossp-pkg/ase            ase.cgi.logout.pl ase.cgi.main.pl

  Log:
    cleanup logout function naming and source code order

  Summary:
    Revision    Changes     Path
    1.22        +43 -43     ossp-pkg/ase/ase.cgi.logout.pl
    1.51        +1  -1      ossp-pkg/ase/ase.cgi.main.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.logout.pl
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 ase.cgi.logout.pl
  --- ossp-pkg/ase/ase.cgi.logout.pl	13 Apr 2007 17:24:16 -0000	1.21
  +++ ossp-pkg/ase/ase.cgi.logout.pl	13 Apr 2007 17:27:24 -0000	1.22
  @@ -29,8 +29,50 @@
   use strict;
   use warnings;
   
  +#   application run-time mode processing: "menu-logout"
  +sub mode_menu_logout {
  +    my $self    = shift;
  +    my $cfg     = $self->param(-cfg);
  +    my $cgi     = $self->param(-cgi);
  +    my $html    = $self->param(-html);
  +    my $session = $self->param(-session);
  +
  +    #   generate the outer canvas
  +    $html .= "<h1>Main Menu</h1>\n";
  +    $html .= $cgi->start_form(
  +        -method => 'POST',
  +        -action => $self->url(),
  +        -class  => 'menu',
  +    ) . "\n";
  +    $html .= $cgi->hidden(
  +        -name     => 'mode',
  +        -value    => 'menu-logout-action',
  +        -override => 1
  +    ) . "\n";
  +    $html->fold("canvas");
  +    $html .= $cgi->end_form() . "\n";
  +    $html >> "canvas";
  +
  +    #   insert navigation tab
  +    $self->menu_tab("menu-logout");
  +
  +    $html .=
  +        "Here you can logout from " . $cfg->{-cfg}->{"service-name"} . ".</br>\n" .
  +        "Your current browser session will be destroyed and you will be redirected " .
  +        "to the Login screen again. Unless you explicitly logout, your session " .
  +        "will be kept active.";
  +
  +    $html .=
  +        "<p/>\n" .
  +        "<div style=\"text-align: center\"><a class=\"button\" href=\"".$self->url(-mode => "logout")."\">" .
  +        "Logout!" .
  +        "</a></div><p/>\n";
  +
  +    return;
  +}
  +
   #   application run-time mode processing: "logout"
  -sub mode_logout_screen {
  +sub mode_logout {
       my $self    = shift;
       my $cfg     = $self->param(-cfg);
       my $cgi     = $self->param(-cgi);
  @@ -87,47 +129,5 @@
       return;
   }
   
  -#   application run-time mode processing: "menu-logout"
  -sub mode_menu_logout {
  -    my $self    = shift;
  -    my $cfg     = $self->param(-cfg);
  -    my $cgi     = $self->param(-cgi);
  -    my $html    = $self->param(-html);
  -    my $session = $self->param(-session);
  -
  -    #   generate the outer canvas
  -    $html .= "<h1>Main Menu</h1>\n";
  -    $html .= $cgi->start_form(
  -        -method => 'POST',
  -        -action => $self->url(),
  -        -class  => 'menu',
  -    ) . "\n";
  -    $html .= $cgi->hidden(
  -        -name     => 'mode',
  -        -value    => 'menu-logout-action',
  -        -override => 1
  -    ) . "\n";
  -    $html->fold("canvas");
  -    $html .= $cgi->end_form() . "\n";
  -    $html >> "canvas";
  -
  -    #   insert navigation tab
  -    $self->menu_tab("menu-logout");
  -
  -    $html .=
  -        "Here you can logout from " . $cfg->{-cfg}->{"service-name"} . ".</br>\n" .
  -        "Your current browser session will be destroyed and you will be redirected " .
  -        "to the Login screen again. Unless you explicitly logout, your session " .
  -        "will be kept active.";
  -
  -    $html .=
  -        "<p/>\n" .
  -        "<div style=\"text-align: center\"><a class=\"button\" href=\"".$self->url(-mode => "logout")."\">" .
  -        "Logout!" .
  -        "</a></div><p/>\n";
  -
  -    return;
  -}
  -
   1;
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.50 -r1.51 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	13 Apr 2007 17:24:16 -0000	1.50
  +++ ossp-pkg/ase/ase.cgi.main.pl	13 Apr 2007 17:27:24 -0000	1.51
  @@ -132,10 +132,10 @@
   
           #   login modes
           'login'              => { -login => 0, -canvas => 1, -method => \&mode_login                },
  -        'logout'             => { -login => 1, -canvas => 1, -method => \&mode_logout_screen        },
           'enrollment'         => { -login => 0, -canvas => 1, -method => \&mode_enrollment           },
           'recovery'           => { -login => 0, -canvas => 1, -method => \&mode_recovery             },
           'heartbeat'          => { -login => 0, -canvas => 1, -method => \&mode_heartbeat            },
  +        'logout'             => { -login => 1, -canvas => 1, -method => \&mode_logout               },
   
           #   application modes
           'menu-profile'       => { -login => 1, -canvas => 1, -method => \&mode_menu_profile         },
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 13 19:29:57 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id BF247752926; Fri, 13 Apr 2007 19:29:57 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.logout.pl
Message-Id: <20070413172957.BF247752926@mail.ossp.org>
Date: Fri, 13 Apr 2007 19:29:57 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Apr-2007 19:29:57
  Branch: HEAD                             Handle: 2007041318295700

  Modified files:
    ossp-pkg/ase            ase.cgi.logout.pl

  Log:
    remove obsolete code

  Summary:
    Revision    Changes     Path
    1.23        +3  -16     ossp-pkg/ase/ase.cgi.logout.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.logout.pl
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 ase.cgi.logout.pl
  --- ossp-pkg/ase/ase.cgi.logout.pl	13 Apr 2007 17:27:24 -0000	1.22
  +++ ossp-pkg/ase/ase.cgi.logout.pl	13 Apr 2007 17:29:57 -0000	1.23
  @@ -33,35 +33,22 @@
   sub mode_menu_logout {
       my $self    = shift;
       my $cfg     = $self->param(-cfg);
  -    my $cgi     = $self->param(-cgi);
       my $html    = $self->param(-html);
  -    my $session = $self->param(-session);
   
       #   generate the outer canvas
       $html .= "<h1>Main Menu</h1>\n";
  -    $html .= $cgi->start_form(
  -        -method => 'POST',
  -        -action => $self->url(),
  -        -class  => 'menu',
  -    ) . "\n";
  -    $html .= $cgi->hidden(
  -        -name     => 'mode',
  -        -value    => 'menu-logout-action',
  -        -override => 1
  -    ) . "\n";
  -    $html->fold("canvas");
  -    $html .= $cgi->end_form() . "\n";
  -    $html >> "canvas";
   
  -    #   insert navigation tab
  +    #   generate navigation tab
       $self->menu_tab("menu-logout");
   
  +    #   generate hint about operation
       $html .=
           "Here you can logout from " . $cfg->{-cfg}->{"service-name"} . ".</br>\n" .
           "Your current browser session will be destroyed and you will be redirected " .
           "to the Login screen again. Unless you explicitly logout, your session " .
           "will be kept active.";
   
  +    #   generate logout button
       $html .=
           "<p/>\n" .
           "<div style=\"text-align: center\"><a class=\"button\" href=\"".$self->url(-mode => "logout")."\">" .
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 13 19:36:47 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 27FE875292F; Fri, 13 Apr 2007 19:36:47 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cfg ase.cgi.logout.pl ase.cgi.main.pl
Message-Id: <20070413173647.27FE875292F@mail.ossp.org>
Date: Fri, 13 Apr 2007 19:36:47 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Apr-2007 19:36:47
  Branch: HEAD                             Handle: 2007041318364600

  Modified files:
    ossp-pkg/ase            ase.cfg ase.cgi.logout.pl ase.cgi.main.pl

  Log:
    make session expiry configurable and display it on logout

  Summary:
    Revision    Changes     Path
    1.23        +3  -0      ossp-pkg/ase/ase.cfg
    1.24        +15 -13     ossp-pkg/ase/ase.cgi.logout.pl
    1.52        +2  -1      ossp-pkg/ase/ase.cgi.main.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cfg
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 ase.cfg
  --- ossp-pkg/ase/ase.cfg	12 Apr 2007 21:28:42 -0000	1.22
  +++ ossp-pkg/ase/ase.cfg	13 Apr 2007 17:36:46 -0000	1.23
  @@ -40,6 +40,9 @@
   blacklist-email             q{\@temporaryinbox\.com$} q{\@put2\.net$} q{\@senseless-entertainment\.com$}
                               q{\@afrobacon\.com$} q{\@golfilla\.info$} q{\@trashmail\.net$};
   
  +#   session expiry
  +session-expiry              1h;
  +
   #   login contstraints
   login-failures-max          3;
   login-failures-time-range   2m;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.logout.pl
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 ase.cgi.logout.pl
  --- ossp-pkg/ase/ase.cgi.logout.pl	13 Apr 2007 17:29:57 -0000	1.23
  +++ ossp-pkg/ase/ase.cgi.logout.pl	13 Apr 2007 17:36:46 -0000	1.24
  @@ -34,6 +34,7 @@
       my $self    = shift;
       my $cfg     = $self->param(-cfg);
       my $html    = $self->param(-html);
  +    my $session = $self->param(-session);
   
       #   generate the outer canvas
       $html .= "<h1>Main Menu</h1>\n";
  @@ -41,19 +42,20 @@
       #   generate navigation tab
       $self->menu_tab("menu-logout");
   
  -    #   generate hint about operation
  -    $html .=
  -        "Here you can logout from " . $cfg->{-cfg}->{"service-name"} . ".</br>\n" .
  -        "Your current browser session will be destroyed and you will be redirected " .
  -        "to the Login screen again. Unless you explicitly logout, your session " .
  -        "will be kept active.";
  -
  -    #   generate logout button
  -    $html .=
  -        "<p/>\n" .
  -        "<div style=\"text-align: center\"><a class=\"button\" href=\"".$self->url(-mode => "logout")."\">" .
  -        "Logout!" .
  -        "</a></div><p/>\n";
  +    #   generate hint about operation together with logout button
  +    $html .= $self->unindent(q{
  +        Here you can logout from %s.<br/>
  +        Your current browser session will be destroyed and you will be
  +        redirected to the Login screen again. Unless you explicitly
  +        logout, your session will be still kept active for %s.
  +        <p/>
  +        <div style="text-align: center">
  +            <a class="button" href="%s">Logout!</a>
  +        </div>
  +    }, $cfg->{-cfg}->{"service-name"}, 
  +       $self->time2human($session->expire()),
  +       $self->url(-mode => "logout")
  +    );
   
       return;
   }
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.51 -r1.52 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	13 Apr 2007 17:27:24 -0000	1.51
  +++ ossp-pkg/ase/ase.cgi.main.pl	13 Apr 2007 17:36:46 -0000	1.52
  @@ -40,6 +40,7 @@
           #   read and parse configuration
           my @directives = (qw(
               project-name service-name service-sender service-admin fetch-url-acl
  +            session-expiry
               login-failures-max login-failures-time-range login-failures-time-penalty 
               instant-notification-urls blacklist-email 
               heartbeat-interval heartbeat-reminders heartbeat-graceperiod
  @@ -108,7 +109,7 @@
           "driver:sqlite;serializer:Storable;id:uuid", $sid,
           { Handle => $dbi->dbh(), TableName => 'ase_sessions' }
       );
  -    $session->expire("+1h");
  +    $session->expire("+" . ($cfg->{-cfg}->{"session-expiry"} || "1h"));
       $self->param(-session => $session);
   
       #   session validation check
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 13 19:47:42 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 59623752926; Fri, 13 Apr 2007 19:47:41 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cfg
Message-Id: <20070413174741.59623752926@mail.ossp.org>
Date: Fri, 13 Apr 2007 19:47:41 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Apr-2007 19:47:41
  Branch: HEAD                             Handle: 2007041318474100

  Modified files:
    ossp-pkg/ase            ase.cfg

  Log:
    fix URL in example

  Summary:
    Revision    Changes     Path
    1.24        +3  -3      ossp-pkg/ase/ase.cfg
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cfg
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 ase.cfg
  --- ossp-pkg/ase/ase.cfg	13 Apr 2007 17:36:46 -0000	1.23
  +++ ossp-pkg/ase/ase.cfg	13 Apr 2007 17:47:41 -0000	1.24
  @@ -66,8 +66,8 @@
   #   authentication certificates
   certificates {
       token secret "my secret" name "ASE-CERT" domain .ossp.org path /;
  -    # token secret "my secret" name "ASE-CERT" domain .openpkg.org path / reflector "http://www.openpkg.org/ase-reflect.cgi";
  -    # token secret "my secret" name "ASE-CERT" domain .openpkg.com path / reflector "http://www.openpkg.com/ase-reflect.cgi";
  -    # token secret "my secret" name "ASE-CERT" domain .openpkg.net path / reflector "http://www.openpkg.net/ase-reflect.cgi";
  +    # token secret "my secret" name "ASE-CERT" domain .openpkg.org path / reflector "http://www.openpkg.org/openpkg-cgi/ase-reflect.cgi";
  +    # token secret "my secret" name "ASE-CERT" domain .openpkg.com path / reflector "http://www.openpkg.com/openpkg-cgi/ase-reflect.cgi";
  +    # token secret "my secret" name "ASE-CERT" domain .openpkg.net path / reflector "http://www.openpkg.net/openpkg-cgi/ase-reflect.cgi";
   };
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 13 19:54:43 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id AB08C75290D; Fri, 13 Apr 2007 19:54:43 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ TODO ase.cgi.logout.pl
Message-Id: <20070413175443.AB08C75290D@mail.ossp.org>
Date: Fri, 13 Apr 2007 19:54:43 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Apr-2007 19:54:43
  Branch: HEAD                             Handle: 2007041318544300

  Modified files:
    ossp-pkg/ase            TODO ase.cgi.logout.pl

  Log:
    remove cookies on logout, too

  Summary:
    Revision    Changes     Path
    1.59        +0  -2      ossp-pkg/ase/TODO
    1.25        +95 -24     ossp-pkg/ase/ase.cgi.logout.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/TODO
  ============================================================================
  $ cvs diff -u -r1.58 -r1.59 TODO
  --- ossp-pkg/ase/TODO	12 Apr 2007 21:28:42 -0000	1.58
  +++ ossp-pkg/ase/TODO	13 Apr 2007 17:54:43 -0000	1.59
  @@ -9,5 +9,3 @@
     TODO
     ====
   
  -  - ASE-CERT drop on logout
  -
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.logout.pl
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 ase.cgi.logout.pl
  --- ossp-pkg/ase/ase.cgi.logout.pl	13 Apr 2007 17:36:46 -0000	1.24
  +++ ossp-pkg/ase/ase.cgi.logout.pl	13 Apr 2007 17:54:43 -0000	1.25
  @@ -81,39 +81,110 @@
       #   remove the session from the database
       $session->delete();
   
  -    #   generate canvas
  -    $html .= "<h1>Logout</h1>\n";
  -
  -    #   generate description
  -    $html .=
  -        "Thank you for visiting " . $cfg->{-cfg}->{"service-name"} . ".<br/>\n" .
  -        "Your session was terminated and you are now logged out.<br/>\n" .
  -        "Please visit us again soon.";
  -
  -    #   redirect to Login screen
  -    $html .=
  -        "<p/>\n" .
  -        "You should be redirected to the Login screen in 10 seconds automatically.\n" .
  -        "<meta http-equiv=\"refresh\" content=\"10;url=" .
  -        $self->url(-mode => "login", -login => ($rec->{'me_nickname'} || $rec->{'me_address'}), -fullyqualified => "yes") .
  -        "\">\n" .
  -        "<p/>\n" .
  -        "<a class=\"button\" href=\"" . 
  -        $self->url(-mode => "login", -login => ($rec->{'me_nickname'} || $rec->{'me_address'})) .
  -        "\">" .
  -        "Go to <b>Login</b> screen" .
  -        "</a>\n";
  -
       #   log action
       $self->logbook("logout by %s%s <%s>",
           $rec->{'me_name'},
           (defined $rec->{'me_nickname'} and $rec->{'me_nickname'} ne '' ? " (" . $rec->{'me_nickname'} . ")" : ""),
           $rec->{'me_address'});
   
  -    #   optionally redirect to external return URL
  +    #   set certificate cookie(s)
  +    if (exists $cfg->{-cfg}->{"certificates"}) {
  +        #   generate certificate cookie(s)
  +        my $cookies = $self->certification_cookies($rec, 0); # 0 = EXPIRE IMMEDIATELY
  +
  +        #   set certificate cookie(s)
  +        if (scalar(grep { $_->{-reflector} ne '' } @{$cookies}) == 0) {
  +            #   simple case
  +            #   - local certificates only
  +            #   - set cookies fast and invisibly
  +            $self->param(-cookies => [ map { $_->{-cookie} } @{$cookies} ]);
  +        }
  +        else {
  +            #   complex case:
  +            #   - at least one foreign certificate
  +            #   - set cookies slow and more visibly via reflectors
  +
  +            #   determine following URL
  +            if (defined($url)) {
  +                $url = sprintf($url, "none");
  +            }
  +            else {
  +                $url = $self->url(-fullyqualified => "yes", -mode => "login");
  +            }
  +
  +            #   render a short information page
  +            $html .= $self->unindent(q{
  +                <h1>Logout...</h1>
  +                Your local authorization was successfully revoked.<br/>
  +                Revokation of your global authorization on sibling domains is still in progress.<br/>
  +                <p/>
  +                Global Authorization Revokation Progression:&nbsp;<b><span class="progress">N.A.</span></b>&nbsp;<img src="%s" alt=""/>
  +                <p/>
  +                This requires a few seconds, so be patient, please.<br/>
  +                If you are not automatically forwarded after about %d seconds,<br/>
  +                please proceed manually by pressing the following "Proceed" button.
  +                <p/>
  +                <a class="button" href="%s">Proceed Manually</a><br/>
  +                <meta http-equiv="refresh" content="%d;url=%s"/>
  +            }, $self->url(-mode => 'loader', -name => 'ase.ui.idle.gif'), 10, $url, 10, $url);
  +
  +            #   set local cookies directly
  +            $self->param(-cookies => [
  +                map { $_->{-cookie} } grep { $_->{-reflector} eq '' } @{$cookies}
  +            ]);
  +
  +            #   set foreign cookies indirectly via reflectors
  +            $self->use("URI::Escape");
  +            my $todo = scalar (grep { $_->{-reflector} ne '' } @{$cookies});
  +            $html .= "<script type=\"text/javascript\">\n";
  +            $html .= "  /* <![CDATA[ */\n";
  +            $html .= "  \$(document).ready(function () {\n";
  +            $html->fold();
  +            $html .= "  });\n";
  +            $html .= "  /* ]]> */\n";
  +            $html .= "</script>";
  +            $html->divert();
  +            $html .= $self->unindent(q{
  +                var todo = %d;
  +                var done = 0;
  +                var show_progress = function () {
  +                    var p = (done / todo) * 100;
  +                    $('.ase span.progress').html(p.toFixed(0) + "%");
  +                };
  +                var after_loading = function () {
  +                    done++;
  +                    show_progress();
  +                    if (done == todo)
  +                        window.document.location = '%s';
  +                };
  +                show_progress();
  +            }, $todo, $url);
  +            foreach my $cookie (grep { $_->{-reflector} ne '' } @{$cookies}) {
  +                $html .= $self->unindent(q{
  +                    jQuery.getScriptXS({
  +                        url: '%s?name=%s&certificate=%s&domain=%s&path=%s',
  +                        cb:  after_loading
  +                    });
  +                }, $cookie->{-reflector},
  +                   uri_escape($cookie->{-cookie}->name()),
  +                   uri_escape($cookie->{-cookie}->value()),
  +                   uri_escape($cookie->{-cookie}->domain()),
  +                   uri_escape($cookie->{-cookie}->path())
  +                );
  +            }
  +
  +            #   stop processing (to output page)
  +            return;
  +        }
  +    }
  +
  +    #   perform logout: either go to login screen or redirect to external return URL
       if (defined($url)) {
           return $self->redirect(sprintf($url, "none"));
       }
  +    else {
  +        return $self->forward("login");
  +    }
   
       return;
   }
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 13 19:56:45 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 0072975290D; Fri, 13 Apr 2007 19:56:44 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ChangeLog
Message-Id: <20070413175645.0072975290D@mail.ossp.org>
Date: Fri, 13 Apr 2007 19:56:44 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Apr-2007 19:56:44
  Branch: HEAD                             Handle: 2007041318564400

  Modified files:
    ossp-pkg/ase            ChangeLog

  Log:
    remember change

  Summary:
    Revision    Changes     Path
    1.36        +4  -0      ossp-pkg/ase/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 ChangeLog
  --- ossp-pkg/ase/ChangeLog	13 Apr 2007 16:15:57 -0000	1.35
  +++ ossp-pkg/ase/ChangeLog	13 Apr 2007 17:56:44 -0000	1.36
  @@ -13,6 +13,10 @@
   
     Changes between 0.3.0 and 0.3.1 (13-Apr-2007 to xx-Apr-2007)
   
  +   o Correctly remove the ASE-CERT cookies on logout and forward to
  +     login page without intermediate steps if possible.
  +     [Ralf S. Engelschall]
  +
      o Correctly match email address case-sensitive on the local
        part and case-insensitive on the FQDN part.
        [Ralf S. Engelschall]
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 13 20:04:03 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B6031752852; Fri, 13 Apr 2007 20:04:02 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.cert.pl
Message-Id: <20070413180402.B6031752852@mail.ossp.org>
Date: Fri, 13 Apr 2007 20:04:02 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Apr-2007 20:04:02
  Branch: HEAD                             Handle: 2007041319040200

  Modified files:
    ossp-pkg/ase            ase.cgi.cert.pl

  Log:
    add ASE URL to certificate

  Summary:
    Revision    Changes     Path
    1.2         +7  -3      ossp-pkg/ase/ase.cgi.cert.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.cert.pl
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ase.cgi.cert.pl
  --- ossp-pkg/ase/ase.cgi.cert.pl	12 Apr 2007 14:00:27 -0000	1.1
  +++ ossp-pkg/ase/ase.cgi.cert.pl	13 Apr 2007 18:04:02 -0000	1.2
  @@ -40,7 +40,7 @@
       $self->use("URI::Escape");
       $self->use("MIME::Base64");
   
  -    my $version = "1.0";
  +    my $version = "1.1";
   
       my $cookies = [];
       if (exists $cfg->{-cfg}->{"certificates"}) {
  @@ -49,23 +49,27 @@
               my $expiry1 = $self->datetime(time() + $expires);
               my $expiry2 = sprintf("+%ds", $expires);
   
  +            #   determine fully qualified URL of ourself
  +            my $url = $self->url(-fullyqualified => "yes");
  +
               #   generate certification signature
               my $sha1 = new Digest::SHA1;
               $sha1->add($version);                    # certificate information "version"  (to prevent certificate modification)
  +            $sha1->add($url);                        # certificate information "url"      (to prevent certificate modification)
               $sha1->add($rec->{"me_uuid"});           # certificate information "uuid"     (to prevent certificate modification)
               $sha1->add($rec->{"me_name"}     || ""); # certificate information "name"     (to prevent certificate modification)
               $sha1->add($rec->{"me_nickname"} || ""); # certificate information "nickname" (to prevent certificate modification)
               $sha1->add($rec->{"me_address"});        # certificate information "address"  (to prevent certificate modification)
               $sha1->add($expiry1);                    # certificate information "expiry"   (to prevent certificate modification and replay)
  -            #$sha1->add($cgi->remote_addr() || "");   # connection  information            (to prevent certificate                  replay)
               $sha1->add($token->{"secret"});          # private     information            (to prevent signature re-generation)
               my $sig = $sha1->hexdigest;
               undef $sha1;
   
               #   generate certificate
               my $cert = encode_base64(sprintf(
  -                "version=%s;uuid=%s;name=%s;nickname=%s;address=%s;expiry=%s;signature=%s",
  +                "version=%s;url=%s;uuid=%s;name=%s;nickname=%s;address=%s;expiry=%s;signature=%s",
                   uri_escape($version),
  +                uri_escape($url),
                   uri_escape($rec->{"me_uuid"}),
                   uri_escape($rec->{"me_name"} || ""),
                   uri_escape($rec->{"me_nickname"} || ""),
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 13 20:04:25 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 3D7F57529F2; Fri, 13 Apr 2007 20:04:25 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ChangeLog
Message-Id: <20070413180425.3D7F57529F2@mail.ossp.org>
Date: Fri, 13 Apr 2007 20:04:25 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Apr-2007 20:04:25
  Branch: HEAD                             Handle: 2007041319042400

  Modified files:
    ossp-pkg/ase            ChangeLog

  Log:
    remember change

  Summary:
    Revision    Changes     Path
    1.37        +3  -0      ossp-pkg/ase/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.36 -r1.37 ChangeLog
  --- ossp-pkg/ase/ChangeLog	13 Apr 2007 17:56:44 -0000	1.36
  +++ ossp-pkg/ase/ChangeLog	13 Apr 2007 18:04:24 -0000	1.37
  @@ -13,6 +13,9 @@
   
     Changes between 0.3.0 and 0.3.1 (13-Apr-2007 to xx-Apr-2007)
   
  +   o Add the fully qualified URL of ASE to the certificate.
  +     [Ralf S. Engelschall]
  +
      o Correctly remove the ASE-CERT cookies on logout and forward to
        login page without intermediate steps if possible.
        [Ralf S. Engelschall]
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 13 20:05:58 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 374807529F2; Fri, 13 Apr 2007 20:05:58 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ README VERSION ase.cgi ase.cli
Message-Id: <20070413180558.374807529F2@mail.ossp.org>
Date: Fri, 13 Apr 2007 20:05:58 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Apr-2007 20:05:58
  Branch: HEAD                             Handle: 2007041319055601

  Modified files:
    ossp-pkg/ase            README VERSION ase.cgi ase.cli

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.11        +1  -1      ossp-pkg/ase/README
    1.7         +1  -1      ossp-pkg/ase/VERSION
    1.27        +1  -1      ossp-pkg/ase/ase.cgi
    1.7         +1  -1      ossp-pkg/ase/ase.cli
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/README
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 README
  --- ossp-pkg/ase/README	13 Apr 2007 10:43:00 -0000	1.10
  +++ ossp-pkg/ase/README	13 Apr 2007 18:05:56 -0000	1.11
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     \___/|___/\___| 
   
     OSSP ase - Affiliation Service Environment
  -  Version 0.3.0 (13-Apr-2007)
  +  Version 0.3.1 (13-Apr-2007)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/VERSION
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 VERSION
  --- ossp-pkg/ase/VERSION	13 Apr 2007 10:43:00 -0000	1.6
  +++ ossp-pkg/ase/VERSION	13 Apr 2007 18:05:57 -0000	1.7
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP ase (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP ase, Version 0.3.0 (13-Apr-2007)
  +  This is OSSP ase, Version 0.3.1 (13-Apr-2007)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 ase.cgi
  --- ossp-pkg/ase/ase.cgi	13 Apr 2007 10:43:00 -0000	1.26
  +++ ossp-pkg/ase/ase.cgi	13 Apr 2007 18:05:57 -0000	1.27
  @@ -34,7 +34,7 @@
   our $cfg = {
       -prog_name   => 'OSSP ase',
       -prog_desc   => 'Affiliation Service Environment',
  -    -prog_vers   => '0.3.0',
  +    -prog_vers   => '0.3.1',
       -prog_date   => '13-Apr-2007',
       -path_cfgdir => '.',
       -path_libdir => '.',
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cli
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ase.cli
  --- ossp-pkg/ase/ase.cli	13 Apr 2007 10:43:00 -0000	1.6
  +++ ossp-pkg/ase/ase.cli	13 Apr 2007 18:05:57 -0000	1.7
  @@ -34,7 +34,7 @@
   our $cfg = {
       -prog_name   => 'OSSP ase',
       -prog_desc   => 'Affiliation Service Environment',
  -    -prog_vers   => '0.3.0',
  +    -prog_vers   => '0.3.1',
       -prog_date   => '13-Apr-2007',
       -path_cfgdir => '.',
       -path_libdir => '.',
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 13 20:06:59 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 8CEAB75290B; Fri, 13 Apr 2007 20:06:59 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/tool/ase/ index.wml os...
Message-Id: <20070413180659.8CEAB75290B@mail.ossp.org>
Date: Fri, 13 Apr 2007 20:06:59 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   13-Apr-2007 20:06:59
  Branch: HEAD                             Handle: 2007041319065701

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/ase   index.wml

  Log:
    release OSSP ase 0.3.1

  Summary:
    Revision    Changes     Path
    1.170       +1  -0      ossp-web/new/news.txt
    1.5         +2  -2      ossp-web/pkg/tool/ase/index.wml
    1.63        +1  -1      ossp-web/pkg/tool/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.169 -r1.170 news.txt
  --- ossp-web/new/news.txt	13 Apr 2007 10:47:21 -0000	1.169
  +++ ossp-web/new/news.txt	13 Apr 2007 18:06:57 -0000	1.170
  @@ -1,3 +1,4 @@
  +13-Apr-2007: Released T<OSSP ase> 0.3.1
   13-Apr-2007: Released T<OSSP ase> 0.3.0
   06-Apr-2007: Released T<OSSP ase> 0.2.1
   06-Apr-2007: Released T<OSSP ase> 0.2.0
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/ase/index.wml
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 index.wml
  --- ossp-web/pkg/tool/ase/index.wml	13 Apr 2007 10:47:22 -0000	1.4
  +++ ossp-web/pkg/tool/ase/index.wml	13 Apr 2007 18:06:57 -0000	1.5
  @@ -21,7 +21,7 @@
   
   <pkg_status
       stable="none" stable_date="none"
  -    unstable="0.3.0" unstable_date="13-Apr-2007"
  +    unstable="0.3.1" unstable_date="13-Apr-2007"
   	done=100>
   
   <h2>Source</h2>
  @@ -31,7 +31,7 @@
       url=$(FTP_ROOT_URL)/pkg/tool/ase/
       directory=$(FTP_ROOT_DIR)/pkg/tool/ase/
       files="ase-*.tar.gz" 
  -	stable="ase-0.3.0.tar.gz" unstable="none">
  +	stable="ase-0.3.1.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.62 -r1.63 index.wml
  --- ossp-web/pkg/tool/index.wml	13 Apr 2007 10:47:22 -0000	1.62
  +++ ossp-web/pkg/tool/index.wml	13 Apr 2007 18:06:58 -0000	1.63
  @@ -38,7 +38,7 @@
   	        done=90 stable="none" unstable="0.9.0">
     <pkg_item name="ase" longname="OSSP ase" type="tool"
               desc="Affiliation Services Environment"
  -		    done=95 stable="none" unstable="0.3.0">
  +		    done=95 stable="none" unstable="0.3.1">
     <pkg_item name="xenia" longname="OSSP xenia" type="tool"
               desc="CVS Browsing Server"
   	        done=20 stable="none" unstable="none">
  @@ .

From ossp-cvs-owner@ossp.org  Fri Apr 13 20:17:12 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 4060F7529F2; Fri, 13 Apr 2007 20:17:12 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.cert.pl
Message-Id: <20070413181712.4060F7529F2@mail.ossp.org>
Date: Fri, 13 Apr 2007 20:17:12 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   13-Apr-2007 20:17:12
  Branch: HEAD                             Handle: 2007041319171100

  Modified files:
    ossp-pkg/ase            ase.cgi.cert.pl

  Log:
    use start of epoch

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/ase/ase.cgi.cert.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.cert.pl
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ase.cgi.cert.pl
  --- ossp-pkg/ase/ase.cgi.cert.pl	13 Apr 2007 18:04:02 -0000	1.2
  +++ ossp-pkg/ase/ase.cgi.cert.pl	13 Apr 2007 18:17:11 -0000	1.3
  @@ -46,7 +46,7 @@
       if (exists $cfg->{-cfg}->{"certificates"}) {
           foreach my $token (@{$cfg->{-cfg}->{"certificates"}}) {
               #   determine expiry date (in two formats)
  -            my $expiry1 = $self->datetime(time() + $expires);
  +            my $expiry1 = $self->datetime($expires > 0 ? time() + $expires : 0);
               my $expiry2 = sprintf("+%ds", $expires);
   
               #   determine fully qualified URL of ourself
  @@ .

From ossp-cvs-owner@ossp.org  Sat Apr 14 19:59:17 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B1A217528E7; Sat, 14 Apr 2007 19:59:17 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.enroll.pl
Message-Id: <20070414175917.B1A217528E7@mail.ossp.org>
Date: Sat, 14 Apr 2007 19:59:17 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   14-Apr-2007 19:59:17
  Branch: HEAD                             Handle: 2007041418591700

  Modified files:
    ossp-pkg/ase            ase.cgi.enroll.pl

  Log:
    use consistent terminology across ASE

  Summary:
    Revision    Changes     Path
    1.61        +1  -1      ossp-pkg/ase/ase.cgi.enroll.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.enroll.pl
  ============================================================================
  $ cvs diff -u -r1.60 -r1.61 ase.cgi.enroll.pl
  --- ossp-pkg/ase/ase.cgi.enroll.pl	13 Apr 2007 16:15:57 -0000	1.60
  +++ ossp-pkg/ase/ase.cgi.enroll.pl	14 Apr 2007 17:59:17 -0000	1.61
  @@ -656,7 +656,7 @@
           #   send activation information to administrators
           $self->use("Mail::Sendmail");
           my $mail =
  -            "Successful " . $cfg->{-cfg}->{"project-name"} . " Fellow Registration (No. ".$rec2->{count}."):\n" .
  +            "Successful " . $cfg->{-cfg}->{"project-name"} . " Account Enrollment (No. ".$rec2->{count}."):\n" .
               $rec->{"en_name"}.(defined $rec->{"en_nickname"} ? " (".$rec->{"en_nickname"}.")" : "")." <".$rec->{"en_address"}.">\n" .
               "\n" .
               "-- \n" .
  @@ .

From ossp-cvs-owner@ossp.org  Sat Apr 14 20:59:54 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 40BCA75289B; Sat, 14 Apr 2007 20:59:54 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.heartbeat.pl ase.cgi.profile.pl
Message-Id: <20070414185954.40BCA75289B@mail.ossp.org>
Date: Sat, 14 Apr 2007 20:59:54 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   14-Apr-2007 20:59:54
  Branch: HEAD                             Handle: 2007041419595300

  Modified files:
    ossp-pkg/ase            ase.cgi.heartbeat.pl ase.cgi.profile.pl

  Log:
    remove Perl warnings

  Summary:
    Revision    Changes     Path
    1.8         +2  -2      ossp-pkg/ase/ase.cgi.heartbeat.pl
    1.29        +1  -1      ossp-pkg/ase/ase.cgi.profile.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.heartbeat.pl
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 ase.cgi.heartbeat.pl
  --- ossp-pkg/ase/ase.cgi.heartbeat.pl	6 Apr 2007 20:37:35 -0000	1.7
  +++ ossp-pkg/ase/ase.cgi.heartbeat.pl	14 Apr 2007 18:59:53 -0000	1.8
  @@ -177,7 +177,7 @@
           ) or die $Mail::Sendmail::error;
   
           #   send notice to administrator
  -        my $mail =
  +        $mail =
               "Account locked after missing heartbeat deadline:\n" .
               $rec->{"me_name"}.(defined $rec->{"me_nickname"} ? " (".$rec->{"me_nickname"}.")" : "")." <".$rec->{"me_address"}.">\n" .
               "\n" .
  @@ -245,7 +245,7 @@
           ) or die $Mail::Sendmail::error;
   
           #   send notice to administrator
  -        my $mail =
  +        $mail =
               "Account deleted after missing heartbeat grace period:\n" .
               $rec->{"me_name"}.(defined $rec->{"me_nickname"} ? " (".$rec->{"me_nickname"}.")" : "")." <".$rec->{"me_address"}.">\n" .
               "\n" .
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.profile.pl
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 ase.cgi.profile.pl
  --- ossp-pkg/ase/ase.cgi.profile.pl	13 Apr 2007 15:33:17 -0000	1.28
  +++ ossp-pkg/ase/ase.cgi.profile.pl	14 Apr 2007 18:59:53 -0000	1.29
  @@ -245,7 +245,7 @@
           }
           $html << 1;
           $html >> "field-nickname";
  -        my $title = $self->streamline(q{
  +        $title = $self->streamline(q{
                Nickname Field ::
                Change or enter a nickname here. This can be used as a
                short-hand for logging in to your account and might be
  @@ .

From ossp-cvs-owner@ossp.org  Sat Apr 14 21:02:14 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id D23567528E7; Sat, 14 Apr 2007 21:02:13 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.main.pl
Message-Id: <20070414190213.D23567528E7@mail.ossp.org>
Date: Sat, 14 Apr 2007 21:02:13 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   14-Apr-2007 21:02:13
  Branch: HEAD                             Handle: 2007041420021200

  Modified files:
    ossp-pkg/ase            ase.cgi.main.pl

  Log:
    remove more warnings

  Summary:
    Revision    Changes     Path
    1.53        +15 -13     ossp-pkg/ase/ase.cgi.main.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.52 -r1.53 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	13 Apr 2007 17:36:46 -0000	1.52
  +++ ossp-pkg/ase/ase.cgi.main.pl	14 Apr 2007 19:02:12 -0000	1.53
  @@ -60,19 +60,21 @@
               -flatten => qr/$re/
           );
           undef $engine;
  -        foreach my $directive (@directives) {
  -            $cfg->{-cfg}->{$directive} = $tree->{$directive};
  -        }
  -        $cfg->{-cfg}->{"certificates"} = [];
  -        my $servername = $ENV{"SERVER_NAME"} || "localhost";
  -        foreach my $dir (@{$tree->{"certificates"}}) {
  -            next if (ref($dir) ne "ARRAY");
  -            next if ($dir->[0] ne "token");
  -            shift @{$dir};
  -            my $token = { @{$dir} };
  -            my $domain = $token->{"domain"} || "localhost";
  -            $token->{-islocal} = ($servername =~ m/(^|.+?\.)${domain}$/ ? 1 : 0);
  -            push(@{$cfg->{-cfg}->{"certificates"}}, $token);
  +        {   no warnings;
  +            foreach my $directive (@directives) {
  +                $cfg->{-cfg}->{$directive} = $tree->{$directive};
  +            }
  +            $cfg->{-cfg}->{"certificates"} = [];
  +            my $servername = $ENV{"SERVER_NAME"} || "localhost";
  +            foreach my $dir (@{$tree->{"certificates"}}) {
  +                next if (ref($dir) ne "ARRAY");
  +                next if ($dir->[0] ne "token");
  +                shift @{$dir};
  +                my $token = { @{$dir} };
  +                my $domain = $token->{"domain"} || "localhost";
  +                $token->{-islocal} = ($servername =~ m/(^|.+?\.)${domain}$/ ? 1 : 0);
  +                push(@{$cfg->{-cfg}->{"certificates"}}, $token);
  +            }
           }
           undef $tree;
       }
  @@ .

From ossp-cvs-owner@ossp.org  Sat Apr 14 21:29:40 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 344DC7528E7; Sat, 14 Apr 2007 21:29:40 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi ase.cgi.profile.pl ase.cgi.util.pl
Message-Id: <20070414192940.344DC7528E7@mail.ossp.org>
Date: Sat, 14 Apr 2007 21:29:40 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   14-Apr-2007 21:29:40
  Branch: HEAD                             Handle: 2007041420293900

  Modified files:
    ossp-pkg/ase            ase.cgi ase.cgi.profile.pl ase.cgi.util.pl

  Log:
    Silence all remaining warnings.

  Summary:
    Revision    Changes     Path
    1.28        +25 -17     ossp-pkg/ase/ase.cgi
    1.30        +2  -2      ossp-pkg/ase/ase.cgi.profile.pl
    1.34        +7  -3      ossp-pkg/ase/ase.cgi.util.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 ase.cgi
  --- ossp-pkg/ase/ase.cgi	13 Apr 2007 18:05:57 -0000	1.27
  +++ ossp-pkg/ase/ase.cgi	14 Apr 2007 19:29:39 -0000	1.28
  @@ -78,23 +78,31 @@
   autouse(qw(CGI::FormBuilder));          # from OpenPKG "perl-www"
   autouse(qw(Date::Parse));               # from OpenPKG "perl-time"
   
  -#   application parts
  -my $dir = $cfg->{-path_libdir};
  -require "$dir/ase.cgi.main.pl";         # application main framework
  -require "$dir/ase.cgi.loader.pl";       # application file loader
  -require "$dir/ase.cgi.rpc.pl";          # application remote procedure call
  -require "$dir/ase.cgi.util.pl";         # application utility functions
  -require "$dir/ase.cgi.scode.pl";        # application security code functions
  -require "$dir/ase.cgi.cert.pl";         # application certificate handling
  -require "$dir/ase.cgi.login.pl";        # application workflow: login
  -require "$dir/ase.cgi.logout.pl";       # application workflow: logout
  -require "$dir/ase.cgi.enroll.pl";       # application workflow: enrollment
  -require "$dir/ase.cgi.recover.pl";      # application workflow: recovery
  -require "$dir/ase.cgi.profile.pl";      # application workflow: profile
  -require "$dir/ase.cgi.resign.pl";       # application workflow: resign
  -require "$dir/ase.cgi.menu.pl";         # application workflow: menu
  -require "$dir/ase.cgi.cron.pl";         # application workflow: cron
  -require "$dir/ase.cgi.heartbeat.pl";    # application workflow: heartbeat
  +#   application modules (loaded immediately)
  +sub loadmodule {
  +    #   catch useless warnings produced by the operator overloading functionality of String::Divert
  +    local $SIG{__WARN__} = sub {
  +        return if ($_[0] =~ m/Useless use of (?:right|left) bitshift \((?:>>|<<)\) in void context/s);
  +        warn $_[0];
  +    };
  +    my $dir = $cfg->{-path_libdir};
  +    require "$dir/ase.cgi.$_[0].pl";
  +}
  +loadmodule("main");                     # application main framework
  +loadmodule("loader");                   # application file loader
  +loadmodule("rpc");                      # application remote procedure call
  +loadmodule("util");                     # application utility functions
  +loadmodule("scode");                    # application security code functions
  +loadmodule("cert");                     # application certificate handling
  +loadmodule("login");                    # application workflow: login
  +loadmodule("logout");                   # application workflow: logout
  +loadmodule("enroll");                   # application workflow: enrollment
  +loadmodule("recover");                  # application workflow: recovery
  +loadmodule("profile");                  # application workflow: profile
  +loadmodule("resign");                   # application workflow: resign
  +loadmodule("menu");                     # application workflow: menu
  +loadmodule("cron");                     # application workflow: cron
  +loadmodule("heartbeat");                # application workflow: heartbeat
   
   #   main procedure
   my $app = new OSSP::ase::server ($cfg);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.profile.pl
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 ase.cgi.profile.pl
  --- ossp-pkg/ase/ase.cgi.profile.pl	14 Apr 2007 18:59:53 -0000	1.29
  +++ ossp-pkg/ase/ase.cgi.profile.pl	14 Apr 2007 19:29:39 -0000	1.30
  @@ -79,8 +79,8 @@
           [$rec->{'me_membership_karma'} || 0];
       my $me_prop = join(", ", map { { "A" => "Administrator", "F" => "Founding", "H" => "Honorary" }->{$_}; }
           split(//, ($rec->{'me_membership_prop'} || ""))) || "(none)";
  -    my $me_type = ("Natural Person", "Juristic Person")
  -        [$rec->{'me_membership_type'} || 0];
  +    my $me_type = {"N" => "Natural Person", "J" => "Juristic Person"}
  +        ->{$rec->{'me_membership_type'} || 'N'};
   
       #   determine action and dispatch accordingly
       my $action = ($cgi->param("action") || "view");
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.util.pl
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 ase.cgi.util.pl
  --- ossp-pkg/ase/ase.cgi.util.pl	11 Apr 2007 16:19:15 -0000	1.33
  +++ ossp-pkg/ase/ase.cgi.util.pl	14 Apr 2007 19:29:39 -0000	1.34
  @@ -35,8 +35,12 @@
   
       #   load module
       foreach my $module (@modules) {
  -        Class::Autouse->load($module);
  -        import $module;
  +        {   no strict;
  +            no warnings;
  +            Class::Autouse->load($module);
  +            undef *io if ($module eq 'IO::All'); # cruel hack
  +            eval "import $module";
  +        }
       }
       return;
   }
  @@ -84,7 +88,7 @@
       my ($self, %attr) = @_;
       $self->use("URI::Escape");
       my $url = (
  -          $attr{-fullyqualified} eq 'yes'
  +          ($attr{-fullyqualified} || 'no') eq 'yes'
           ? $self->param(-cgi)->url(-full => 1) 
           : $self->param(-cgi)->url(-relative => 1)
       );
  @@ .

From ossp-cvs-owner@ossp.org  Sat Apr 14 21:30:39 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id D6D637528E7; Sat, 14 Apr 2007 21:30:39 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ChangeLog
Message-Id: <20070414193039.D6D637528E7@mail.ossp.org>
Date: Sat, 14 Apr 2007 21:30:39 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   14-Apr-2007 21:30:39
  Branch: HEAD                             Handle: 2007041420303900

  Modified files:
    ossp-pkg/ase            ChangeLog

  Log:
    remember changes

  Summary:
    Revision    Changes     Path
    1.38        +6  -1      ossp-pkg/ase/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 ChangeLog
  --- ossp-pkg/ase/ChangeLog	13 Apr 2007 18:04:24 -0000	1.37
  +++ ossp-pkg/ase/ChangeLog	14 Apr 2007 19:30:39 -0000	1.38
  @@ -11,7 +11,12 @@
     This is a list of all changes to OSSP ase.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 0.3.0 and 0.3.1 (13-Apr-2007 to xx-Apr-2007)
  +  Changes between 0.3.1 and 0.3.2 (13-Apr-2007 to 14-Apr-2007)
  +
  +   o Remove all run-time warnings which filled the Apache error log.
  +     [Ralf S. Engelschall]
  +
  +  Changes between 0.3.0 and 0.3.1 (13-Apr-2007 to 13-Apr-2007)
   
      o Add the fully qualified URL of ASE to the certificate.
        [Ralf S. Engelschall]
  @@ .

From ossp-cvs-owner@ossp.org  Sat Apr 14 21:40:47 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 93755752887; Sat, 14 Apr 2007 21:40:47 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.main.pl
Message-Id: <20070414194047.93755752887@mail.ossp.org>
Date: Sat, 14 Apr 2007 21:40:47 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   14-Apr-2007 21:40:47
  Branch: HEAD                             Handle: 2007041420404700

  Modified files:
    ossp-pkg/ase            ase.cgi.main.pl

  Log:
    use HTTP Host header first

  Summary:
    Revision    Changes     Path
    1.54        +1  -1      ossp-pkg/ase/ase.cgi.main.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.53 -r1.54 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	14 Apr 2007 19:02:12 -0000	1.53
  +++ ossp-pkg/ase/ase.cgi.main.pl	14 Apr 2007 19:40:47 -0000	1.54
  @@ -65,7 +65,7 @@
                   $cfg->{-cfg}->{$directive} = $tree->{$directive};
               }
               $cfg->{-cfg}->{"certificates"} = [];
  -            my $servername = $ENV{"SERVER_NAME"} || "localhost";
  +            my $servername = $ENV{"HTTP_HOST"} || $ENV{"SERVER_NAME"} || "localhost";
               foreach my $dir (@{$tree->{"certificates"}}) {
                   next if (ref($dir) ne "ARRAY");
                   next if ($dir->[0] ne "token");
  @@ .

From ossp-cvs-owner@ossp.org  Sat Apr 14 21:58:25 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 625427528B9; Sat, 14 Apr 2007 21:58:25 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.logout.pl
Message-Id: <20070414195825.625427528B9@mail.ossp.org>
Date: Sat, 14 Apr 2007 21:58:25 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   14-Apr-2007 21:58:25
  Branch: HEAD                             Handle: 2007041420582500

  Modified files:
    ossp-pkg/ase            ase.cgi.logout.pl

  Log:
    remove one final warning related to using the session after deleting
    it

  Summary:
    Revision    Changes     Path
    1.26        +6  -6      ossp-pkg/ase/ase.cgi.logout.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.logout.pl
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 ase.cgi.logout.pl
  --- ossp-pkg/ase/ase.cgi.logout.pl	13 Apr 2007 17:54:43 -0000	1.25
  +++ ossp-pkg/ase/ase.cgi.logout.pl	14 Apr 2007 19:58:25 -0000	1.26
  @@ -75,18 +75,18 @@
           SELECT * FROM ase_member WHERE me_uuid = ?; 
       }, $me_uuid)->hash()) or die $dbi->error();
   
  -    #   remember optional external return URL
  -    my $url = $session->param("after_logout");
  -
  -    #   remove the session from the database
  -    $session->delete();
  -
       #   log action
       $self->logbook("logout by %s%s <%s>",
           $rec->{'me_name'},
           (defined $rec->{'me_nickname'} and $rec->{'me_nickname'} ne '' ? " (" . $rec->{'me_nickname'} . ")" : ""),
           $rec->{'me_address'});
   
  +    #   remember optional external return URL
  +    my $url = $session->param("after_logout");
  +
  +    #   remove the session from the database
  +    $session->delete();
  +
       #   set certificate cookie(s)
       if (exists $cfg->{-cfg}->{"certificates"}) {
           #   generate certificate cookie(s)
  @@ .

From ossp-cvs-owner@ossp.org  Sat Apr 14 22:36:24 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 8C62C752887; Sat, 14 Apr 2007 22:36:24 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.cert.pl
Message-Id: <20070414203624.8C62C752887@mail.ossp.org>
Date: Sat, 14 Apr 2007 22:36:24 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   14-Apr-2007 22:36:24
  Branch: HEAD                             Handle: 2007041421362400

  Modified files:
    ossp-pkg/ase            ase.cgi.cert.pl

  Log:
    do not encode with newlines

  Summary:
    Revision    Changes     Path
    1.4         +1  -1      ossp-pkg/ase/ase.cgi.cert.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.cert.pl
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 ase.cgi.cert.pl
  --- ossp-pkg/ase/ase.cgi.cert.pl	13 Apr 2007 18:17:11 -0000	1.3
  +++ ossp-pkg/ase/ase.cgi.cert.pl	14 Apr 2007 20:36:24 -0000	1.4
  @@ -76,7 +76,7 @@
                   uri_escape($rec->{"me_address"}),
                   uri_escape($expiry1),
                   uri_escape($sig),
  -            ));
  +            ), "");
               
               #   generate cookie
               my $cookie = new CGI::Cookie(
  @@ .

From ossp-cvs-owner@ossp.org  Sat Apr 14 22:55:54 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id F01577528B9; Sat, 14 Apr 2007 22:55:53 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ChangeLog Makefile ase.cfg ase.cgi.main.pl a...
Message-Id: <20070414205553.F01577528B9@mail.ossp.org>
Date: Sat, 14 Apr 2007 22:55:53 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   14-Apr-2007 22:55:53
  Branch: HEAD                             Handle: 2007041421555300

  Added files:
    ossp-pkg/ase            ase.mod.c
  Modified files:
    ossp-pkg/ase            ChangeLog Makefile ase.cfg ase.cgi.main.pl

  Log:
    Provide a first cut for an Apache 1.3.x mod_ase module which
    on-the-fly parses the ASE-CERT cookie, validates its signature and
    in case it is valid converts the certificate information into CGI
    environment variables.

  Summary:
    Revision    Changes     Path
    1.39        +7  -1      ossp-pkg/ase/ChangeLog
    1.15        +28 -18     ossp-pkg/ase/Makefile
    1.25        +1  -1      ossp-pkg/ase/ase.cfg
    1.55        +2  -0      ossp-pkg/ase/ase.cgi.main.pl
    1.1         +300 -0     ossp-pkg/ase/ase.mod.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.38 -r1.39 ChangeLog
  --- ossp-pkg/ase/ChangeLog	14 Apr 2007 19:30:39 -0000	1.38
  +++ ossp-pkg/ase/ChangeLog	14 Apr 2007 20:55:53 -0000	1.39
  @@ -11,7 +11,13 @@
     This is a list of all changes to OSSP ase.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 0.3.1 and 0.3.2 (13-Apr-2007 to 14-Apr-2007)
  +  Changes between 0.3.1 and 0.4.0 (13-Apr-2007 to 14-Apr-2007)
  +
  +   o Provide a first cut for an Apache 1.3.x mod_ase module which
  +     on-the-fly parses the ASE-CERT cookie, validates its signature and
  +     in case it is valid converts the certificate information into CGI
  +     environment variables.
  +     [Ralf S. Engelschall]
   
      o Remove all run-time warnings which filled the Apache error log.
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/Makefile
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 Makefile
  --- ossp-pkg/ase/Makefile	13 Apr 2007 16:13:38 -0000	1.14
  +++ ossp-pkg/ase/Makefile	14 Apr 2007 20:55:53 -0000	1.15
  @@ -1,23 +1,30 @@
   
  -DESTDIR =
  -NAME    = ase
  +DESTDIR     =
  +NAME        = ase
   
  -PREFIX  = /tmp/ase
  -CGIDIR  = $(PREFIX)/cgi
  -BINDIR  = $(PREFIX)/bin
  -CFGDIR  = $(PREFIX)/etc/$(NAME)
  -LIBDIR  = $(PREFIX)/lib/$(NAME)
  -VARDIR  = $(PREFIX)/var/$(NAME)
  -DATDIR  = $(PREFIX)/share/$(NAME)
  -PERLEXE = $(PREFIX)/bin/perl
  -PERLDIR = `perl -V:installvendorlib | sed -e 's/^installvendorlib=.//' -e 's/.;$$//'`
  -
  -SHTOOL  = ./shtool
  -SUBST   = -e 's;\(-path_cfgdir => .\)\.\(.\);\1$(CFGDIR)\2;' \
  -          -e 's;\(-path_libdir => .\)\.\(.\);\1$(LIBDIR)\2;' \
  -          -e 's;\(-path_datdir => .\)\.\(.\);\1$(DATDIR)\2;' \
  -          -e 's;\(-path_vardir => .\)\.\(.\);\1$(VARDIR)\2;' \
  -          -e 's;/usr/bin/env perl;$(PERLEXE);'
  +PREFIX      = /usr/opkg
  +CGIDIR      = $(PREFIX)/cgi
  +BINDIR      = $(PREFIX)/bin
  +CFGDIR      = $(PREFIX)/etc/$(NAME)
  +LIBDIR      = $(PREFIX)/lib/$(NAME)
  +LIBEXECDIR  = $(PREFIX)/libexec/$(NAME)
  +VARDIR      = $(PREFIX)/var/$(NAME)
  +DATDIR      = $(PREFIX)/share/$(NAME)
  +PERLEXE     = $(PREFIX)/bin/perl
  +PERLDIR     = `perl -V:installvendorlib | sed -e 's/^installvendorlib=.//' -e 's/.;$$//'`
  +APXS        = $(PREFIX)/sbin/apxs
  +
  +SHTOOL      = ./shtool
  +SUBST       = -e 's;\(-path_cfgdir => .\)\.\(.\);\1$(CFGDIR)\2;' \
  +              -e 's;\(-path_libdir => .\)\.\(.\);\1$(LIBDIR)\2;' \
  +              -e 's;\(-path_datdir => .\)\.\(.\);\1$(DATDIR)\2;' \
  +              -e 's;\(-path_vardir => .\)\.\(.\);\1$(VARDIR)\2;' \
  +              -e 's;/usr/bin/env perl;$(PERLEXE);'
  +
  +all: ase.mod.so
  +
  +ase.mod.so: ase.mod.c
  +	$(APXS) -c ase.mod.c
   
   ase.db: ase.cli ase.cli.db.pl ase.cli.db.sql
   	rm -f ase.db
  @@ -26,6 +33,7 @@
   	chmod a+w .
   
   clean:
  +	-rm -f ase.mod.o ase.mod.so
   	-rm -f ase.db
   
   install: install-client install-server
  @@ -33,8 +41,10 @@
   install-client:
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(CGIDIR)
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(PERLDIR)/OSSP/$(NAME)
  +	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(LIBEXECDIR)
   	$(SHTOOL) install -c -m 755 $(SUBST) ase-reflect.cgi $(DESTDIR)$(CGIDIR)/$(NAME)-reflect.cgi
   	$(SHTOOL) install -c -m 644 ase.api.pm $(DESTDIR)$(PERLDIR)/OSSP/$(NAME)/client.pm
  +	$(SHTOOL) install -c -m 755 ase.mod.so $(DESTDIR)$(LIBEXECDIR)/mod_$(NAME).so
   
   install-server:
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(BINDIR)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cfg
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 ase.cfg
  --- ossp-pkg/ase/ase.cfg	13 Apr 2007 17:47:41 -0000	1.24
  +++ ossp-pkg/ase/ase.cfg	14 Apr 2007 20:55:53 -0000	1.25
  @@ -65,7 +65,7 @@
   
   #   authentication certificates
   certificates {
  -    token secret "my secret" name "ASE-CERT" domain .ossp.org path /;
  +    token secret "my secret" name "ASE-CERT" domain home.engelschall.com path /;
       # token secret "my secret" name "ASE-CERT" domain .openpkg.org path / reflector "http://www.openpkg.org/openpkg-cgi/ase-reflect.cgi";
       # token secret "my secret" name "ASE-CERT" domain .openpkg.com path / reflector "http://www.openpkg.com/openpkg-cgi/ase-reflect.cgi";
       # token secret "my secret" name "ASE-CERT" domain .openpkg.net path / reflector "http://www.openpkg.net/openpkg-cgi/ase-reflect.cgi";
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.54 -r1.55 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	14 Apr 2007 19:40:47 -0000	1.54
  +++ ossp-pkg/ase/ase.cgi.main.pl	14 Apr 2007 20:55:53 -0000	1.55
  @@ -34,6 +34,8 @@
   sub cgiapp_init {
       my ($self, $cfg) = @_;
   
  +    die "TEST";
  +
       #   import run-time information from configuration file
       my $cfgfile = $cfg->{-path_cfgdir}."/ase.cfg";
       if (-f $cfgfile) {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.mod.c
  ============================================================================
  $ cvs diff -u -r0 -r1.1 ase.mod.c
  --- /dev/null	2007-04-14 22:55:00 +0200
  +++ ase.mod.c	2007-04-14 22:55:53 +0200
  @@ -0,0 +1,300 @@
  +/*
  +**  ase.mod.c -- Apache seamless support for OSSP ase certificates
  +**  Copyright (c) 2007 Ralf S. Engelschall <rse@engelschall.com>
  +*/
  +
  +#include "httpd.h"
  +#include "http_config.h"
  +#include "http_protocol.h"
  +#include "http_core.h"
  +#include "http_log.h"
  +#include "ap_config.h"
  +#include "ap_sha1.h"
  +
  +module MODULE_VAR_EXPORT ase_module;
  +
  +/*
  +**  CONFIGURATION
  +*/
  +
  +/*  the module configuration */
  +typedef struct {
  +    char    *cookie_name;           /* name of cookie */
  +    char    *cookie_regex_string;   /* cookie parsing regex (string) */
  +    regex_t *cookie_regex_compile;  /* cookie parsing regex (compiled) */
  +    char    *secret;                /* secret for certificate signature validation */
  +    char    *prefix;                /* prefix of variables */
  +} config_t;
  +
  +/*  create module configuration */
  +static void *ase_config(pool *p, char *d)
  +{
  +    config_t *cfg;
  +    if ((cfg = (config_t *)ap_pcalloc(p, sizeof(config_t))) == NULL)
  +        return NULL;
  +    cfg->cookie_name = NULL;
  +    cfg->cookie_regex_string = NULL;
  +    cfg->cookie_regex_compile = NULL;
  +    cfg->secret = NULL;
  +    cfg->prefix = NULL;
  +    return cfg;
  +}
  +
  +/*  handle ASECookie directive */
  +static const char *ase_cmd_cookie(cmd_parms *cmd, config_t *cfg, char *arg)
  +{
  +    /*  argument sanity check */
  +    if (arg == NULL || *arg == '\0')
  +        return "ASECookie argument empty";
  +
  +    /*  pre-compile cookie parsing regex */
  +    cfg->cookie_name = ap_pstrdup(cmd->pool, arg);
  +    cfg->cookie_regex_string = ap_pstrcat(cmd->pool,
  +        "^", cfg->cookie_name, "=([^;]+)|;[ \t]+",
  +        cfg->cookie_name, "=([^;]+)", NULL);
  +    cfg->cookie_regex_compile = ap_pregcomp(cmd->pool,
  +        cfg->cookie_regex_string, REG_EXTENDED);
  +    return NULL;
  +}
  +
  +/*  handle ASESecret directive */
  +static const char *ase_cmd_secret(cmd_parms *cmd, config_t *cfg, char *arg)
  +{
  +    /*  argument sanity check */
  +    if (arg == NULL || *arg == '\0')
  +        return "ASESecret argument empty";
  +
  +    /*  store secret */
  +    cfg->secret = ap_pstrdup(cmd->pool, arg);
  +    return NULL;
  +}
  +
  +/*  handle ASEPrefix directive */
  +static const char *ase_cmd_prefix(cmd_parms *cmd, config_t *cfg, char *arg)
  +{
  +    /*  argument sanity check */
  +    if (arg == NULL || *arg == '\0')
  +        return "ASEPrefix argument empty";
  +
  +    /*  store secret */
  +    cfg->prefix = ap_pstrdup(cmd->pool, arg);
  +    return NULL;
  +}
  +
  +/*  list of module directives */
  +static const command_rec ase_cmds[] = {
  +    { "ASECookie",  ase_cmd_cookie, NULL, RSRC_CONF, TAKE1,
  +      "OSSP ase name of the cookie" },
  +    { "ASESecret",  ase_cmd_secret, NULL, RSRC_CONF, TAKE1,
  +      "OSSP ase pre-shared secret used for certificate signature validation" },
  +    { "ASEPrefix",  ase_cmd_prefix, NULL, RSRC_CONF, TAKE1,
  +      "OSSP ase prefix of the variables" },
  +    { NULL }
  +};
  +
  +/*  decode an URI-escaped string (in place) */
  +static int uri_decode(request_rec *r, char *x)
  +{
  +    int i, j, ch;
  +    unsigned int c;
  +
  +    if (x[0] == '\0')
  +        return 0;
  +    for (i = 0, j = 0; x[i] != '\0'; i++, j++) {
  +        ch = (int)x[i];
  +        if (ch == '%' && ap_isxdigit(x[i+1]) && ap_isxdigit(x[i+2])) {
  +            if (sscanf(&x[i+1], "%2x", &c) == 1) {
  +                ch = (int)c;
  +                i += 2;
  +            }
  +        }
  +        x[j] = (char)ch;
  +    }
  +    x[j] = '\0';
  +    return j;
  +}
  +
  +/*  parse the ASE certificate */
  +static table *ase_certificate_parse(request_rec *r, const char *certificate)
  +{
  +    table *tab;
  +    char *name;
  +    char *value;
  +    char *cp;
  +    int eos;
  +
  +    /*  Base64 decode certificate envelope */
  +    cp = ap_pstrdup(r->pool, certificate);
  +    uri_decode(r, cp);
  +    cp = ap_pbase64decode(r->pool, cp);
  +
  +    /*  decode certificate name=value;name=value;... structure */
  +    tab = ap_make_table(r->pool, 20);
  +    eos = 0;
  +    while (!eos) {
  +        /* find name */
  +        name = cp;
  +        while (*cp != '=' && *cp != '\0')
  +            cp++;
  +        if (*cp == '\0')
  +            break;
  +        *cp++ = '\0';
  +        uri_decode(r, name);
  +
  +        /* find value and URL-decode it */
  +        value = cp;
  +        while (*cp != ';' && *cp != '\0')
  +            cp++;
  +        if (*cp == '\0')
  +            eos = 1;
  +        *cp++ = '\0';
  +        uri_decode(r, value);
  +
  +        /* store into table */
  +        ap_table_setn(tab, name, value);
  +    }
  +
  +    return tab;
  +}
  +
  +/*  validate ASE certificate signature */
  +static int ase_certificate_valid(request_rec *r, table *certificate)
  +{
  +    config_t *cfg = (config_t *)ap_get_module_config(r->per_dir_config, &ase_module);
  +    AP_SHA1_CTX sha1;
  +    unsigned char sig_bin[SHA_DIGESTSIZE];
  +    char sig_hex[SHA_DIGESTSIZE*2+1];
  +    char *cp;
  +    int i, j, ch;
  +
  +    /*  re-generate certificate signature */
  +    ap_SHA1Init(&sha1);
  +#define SHA1_UPDATE(name) \
  +    if ((cp = (char *)ap_table_get(certificate, name)) == NULL) \
  +        cp = ""; \
  +    ap_SHA1Update(&sha1, cp, strlen(cp))
  +    SHA1_UPDATE("version");
  +    SHA1_UPDATE("url");
  +    SHA1_UPDATE("uuid");
  +    SHA1_UPDATE("name");
  +    SHA1_UPDATE("nickname");
  +    SHA1_UPDATE("address");
  +    SHA1_UPDATE("expiry");
  +    ap_SHA1Update(&sha1, cfg->secret, strlen(cfg->secret));
  +
  +    /*  convert signature to Base16 format for comparison */
  +    ap_SHA1Final(sig_bin, &sha1);
  +    for (i = 0, j = 0; i < sizeof(sig_bin); i++) {
  +        ch = ((sig_bin[i] & 0xF0) >> 4);
  +        sig_hex[j++] = (ch < 10 ? ('0' + ch) : ('a' + (ch - 10)));
  +        ch = (sig_bin[i] & 0x0F);
  +        sig_hex[j++] = (ch < 10 ? ('0' + ch) : ('a' + (ch - 10)));
  +    }
  +    sig_hex[j] = '\0';
  +
  +    /*  compare signatures */
  +    if ((cp = (char *)ap_table_get(certificate, "signature")) == NULL)
  +        cp = "";
  +    return (strcmp(sig_hex, cp) == 0);
  +}
  +
  +/*  export ASE certificate */
  +static void ase_certificate_export(request_rec *r, table *certificate)
  +{
  +    config_t *cfg = (config_t *)ap_get_module_config(r->per_dir_config, &ase_module);
  +    char *cp;
  +    char *cp2;
  +
  +    /*  export certificate fields to subprocess environment */
  +#define SET_VARIABLE(variable, field) \
  +    cp2 = ap_psprintf(r->pool, "%s_%s", cfg->prefix, variable); \
  +    if ((cp = (char *)ap_table_get(certificate, field)) == NULL) \
  +        cp = ""; \
  +    ap_table_set(r->subprocess_env, cp2, cp);
  +    SET_VARIABLE("VERSION",   "version");
  +    SET_VARIABLE("URL",       "url");
  +    SET_VARIABLE("UUID",      "uuid");
  +    SET_VARIABLE("NAME",      "name");
  +    SET_VARIABLE("NICKNAME",  "nickname");
  +    SET_VARIABLE("ADDRESS",   "address");
  +    SET_VARIABLE("EXPIRY",    "expiry");
  +    SET_VARIABLE("SIGNATURE", "signature");
  +
  +    /*  fake a "Basic" authentication for logging purposes */
  +    if (ap_table_get(r->headers_in, "Aithorization") == NULL) {
  +        if ((cp = (char *)ap_table_get(certificate, "address")) != NULL) {
  +            cp = ap_pstrcat(r->pool, "Basic ", ap_pbase64encode(r->pool,
  +                ap_pstrcat(r->pool, cp, ":password", NULL)), NULL);
  +            ap_table_set(r->headers_in, "Authorization", cp);
  +        }
  +    }
  +    return;
  +}
  +
  +/*  Apache processing hook */
  +static int ase_hook(request_rec *r)
  +{
  +    config_t *cfg = (config_t *)ap_get_module_config(r->per_dir_config, &ase_module);
  +    const char *cookie_header;
  +    regmatch_t regmatch[3];
  +    table *certificate;
  +
  +    /*  seek a received ASE cookie */
  +    if ((cookie_header = ap_table_get(r->headers_in, "Cookie"))) {
  +        if (ap_regexec(cfg->cookie_regex_compile, cookie_header,
  +                       sizeof(regmatch)/sizeof(regmatch[0]), regmatch, 0) == 0) {
  +            char *cookie_value = NULL;
  +            if (regmatch[1].rm_so != -1)
  +                cookie_value = ap_pregsub(r->pool, "$1", cookie_header,
  +                                          sizeof(regmatch)/sizeof(regmatch[0]), regmatch);
  +            if (regmatch[2].rm_so != -1)
  +                cookie_value = ap_pregsub(r->pool, "$2", cookie_header,
  +                                          sizeof(regmatch)/sizeof(regmatch[0]), regmatch);
  +            if (cookie_value != NULL) {
  +                /*  parse certificate in cookie */
  +                if ((certificate = ase_certificate_parse(r, cookie_value)) == NULL)
  +                    ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, r,
  +                                  "unparsable OSSP ase certificate cookie received: %s",
  +                                  cookie_value);
  +                else {
  +                    /*  validate certificate signature */
  +                    if (!ase_certificate_valid(r, certificate))
  +                        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, r,
  +                                      "invalid OSSP ase certificate received: %s",
  +                                      cookie_value);
  +                    else {
  +                        /*  export certificate */
  +                        ap_table_setn(r->notes, cfg->prefix, cookie_value);
  +                        ap_table_set(r->subprocess_env, cfg->prefix, cookie_value);
  +                        ase_certificate_export(r, certificate);
  +                    }
  +                }
  +            }
  +        }
  +    }
  +    return DECLINED;
  +}
  +
  +/* dispatch list for API hooks */
  +module MODULE_VAR_EXPORT ase_module = {
  +    STANDARD_MODULE_STUFF,
  +    NULL,                  /* module initializer                  */
  +    ase_config,            /* create per-dir    config structures */
  +    NULL,                  /* merge  per-dir    config structures */
  +    NULL,                  /* create per-server config structures */
  +    NULL,                  /* merge  per-server config structures */
  +    ase_cmds,              /* table of config file commands       */
  +    NULL,                  /* [#8] MIME-typed-dispatched handlers */
  +    NULL,                  /* [#1] URI to filename translation    */
  +    NULL,                  /* [#4] validate user id from request  */
  +    NULL,                  /* [#5] check if the user is ok _here_ */
  +    ase_hook,              /* [#3] check access by host address   */
  +    NULL,                  /* [#6] determine MIME type            */
  +    NULL,                  /* [#7] pre-run fixups                 */
  +    NULL,                  /* [#9] log a transaction              */
  +    NULL,                  /* [#2] header parser                  */
  +    NULL,                  /* child_init                          */
  +    NULL,                  /* child_exit                          */
  +    NULL                   /* [#0] post read-request              */
  +};
  +
  @@ .

From ossp-cvs-owner@ossp.org  Sat Apr 14 22:56:42 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 9D5297528B9; Sat, 14 Apr 2007 22:56:42 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.mod.c
Message-Id: <20070414205642.9D5297528B9@mail.ossp.org>
Date: Sat, 14 Apr 2007 22:56:42 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   14-Apr-2007 22:56:42
  Branch: HEAD                             Handle: 2007041421564200

  Modified files:
    ossp-pkg/ase            ase.mod.c

  Log:
    use the usual OSSP ase header, please

  Summary:
    Revision    Changes     Path
    1.2         +22 -1      ossp-pkg/ase/ase.mod.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.mod.c
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ase.mod.c
  --- ossp-pkg/ase/ase.mod.c	14 Apr 2007 20:55:53 -0000	1.1
  +++ ossp-pkg/ase/ase.mod.c	14 Apr 2007 20:56:42 -0000	1.2
  @@ -1,6 +1,27 @@
   /*
  -**  ase.mod.c -- Apache seamless support for OSSP ase certificates
  +**  OSSP ase -- Affiliation Service Environment
   **  Copyright (c) 2007 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2007 The OSSP Project <http://www.ossp.org/>
  +**
  +**  This file is part of OSSP ase, a service environment for managing
  +**  affiliations which can be found at http://www.ossp.org/pkg/tool/ase/.
  +**
  +**  This program is free software; you can redistribute it and/or modify
  +**  it under the terms of the GNU General Public License as published by
  +**  the Free Software Foundation; either version 2 of the License, or
  +**  (at your option) any later version.
  +**
  +**  This program is distributed in the hope that it will be useful,
  +**  but WITHOUT ANY WARRANTY; without even the implied warranty of
  +**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  +**  General Public License for more details.
  +**
  +**  You should have received a copy of the GNU General Public License
  +**  along with this program; if not, write to the Free Software
  +**  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  +**  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  +**
  +**  ase.mod.c: Apache 1.3.x extension module
   */
   
   #include "httpd.h"
  @@ .

From ossp-cvs-owner@ossp.org  Sat Apr 14 22:59:02 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 2F1157528B9; Sat, 14 Apr 2007 22:59:02 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.main.pl
Message-Id: <20070414205902.2F1157528B9@mail.ossp.org>
Date: Sat, 14 Apr 2007 22:59:02 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   14-Apr-2007 22:59:02
  Branch: HEAD                             Handle: 2007041421590100

  Modified files:
    ossp-pkg/ase            ase.cgi.main.pl

  Log:
    ops, this should have been not committed, of course

  Summary:
    Revision    Changes     Path
    1.56        +0  -2      ossp-pkg/ase/ase.cgi.main.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.main.pl
  ============================================================================
  $ cvs diff -u -r1.55 -r1.56 ase.cgi.main.pl
  --- ossp-pkg/ase/ase.cgi.main.pl	14 Apr 2007 20:55:53 -0000	1.55
  +++ ossp-pkg/ase/ase.cgi.main.pl	14 Apr 2007 20:59:01 -0000	1.56
  @@ -34,8 +34,6 @@
   sub cgiapp_init {
       my ($self, $cfg) = @_;
   
  -    die "TEST";
  -
       #   import run-time information from configuration file
       my $cfgfile = $cfg->{-path_cfgdir}."/ase.cfg";
       if (-f $cfgfile) {
  @@ .

From ossp-cvs-owner@ossp.org  Mon Apr 16 11:47:58 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 0386B752887; Mon, 16 Apr 2007 11:47:57 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.util.pl
Message-Id: <20070416094758.0386B752887@mail.ossp.org>
Date: Mon, 16 Apr 2007 11:47:57 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Apr-2007 11:47:57
  Branch: HEAD                             Handle: 2007041610475700

  Modified files:
    ossp-pkg/ase            ase.cgi.util.pl

  Log:
    cosmetic

  Summary:
    Revision    Changes     Path
    1.35        +1  -1      ossp-pkg/ase/ase.cgi.util.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.util.pl
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 ase.cgi.util.pl
  --- ossp-pkg/ase/ase.cgi.util.pl	14 Apr 2007 19:29:39 -0000	1.34
  +++ ossp-pkg/ase/ase.cgi.util.pl	16 Apr 2007 09:47:57 -0000	1.35
  @@ -135,7 +135,7 @@
               $ua->timeout($timeout || 20);
               $ua->max_size(1*1024*1024);
               $ua->max_redirect(2);
  -            $ua->protocols_allowed([ 'http', 'https']);
  +            $ua->protocols_allowed(['http', 'https']);
               $response = $ua->get($url);
               die "unable to load URL \"$url\"" if (not $response->is_success and not $noerror);
               $self->cache($url, $response->fresh_until() - time(), $response) if ($response->is_success and not $nocache);
  @@ .

From ossp-cvs-owner@ossp.org  Mon Apr 16 11:52:59 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 1B5277528EC; Mon, 16 Apr 2007 11:52:59 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.cert.pl ase.mod.c
Message-Id: <20070416095259.1B5277528EC@mail.ossp.org>
Date: Mon, 16 Apr 2007 11:52:59 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Apr-2007 11:52:59
  Branch: HEAD                             Handle: 2007041610525800

  Modified files:
    ossp-pkg/ase            ase.cgi.cert.pl ase.mod.c

  Log:
    add karma and properties to certificate

  Summary:
    Revision    Changes     Path
    1.5         +13 -9      ossp-pkg/ase/ase.cgi.cert.pl
    1.3         +4  -0      ossp-pkg/ase/ase.mod.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.cert.pl
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 ase.cgi.cert.pl
  --- ossp-pkg/ase/ase.cgi.cert.pl	14 Apr 2007 20:36:24 -0000	1.4
  +++ ossp-pkg/ase/ase.cgi.cert.pl	16 Apr 2007 09:52:58 -0000	1.5
  @@ -54,26 +54,30 @@
   
               #   generate certification signature
               my $sha1 = new Digest::SHA1;
  -            $sha1->add($version);                    # certificate information "version"  (to prevent certificate modification)
  -            $sha1->add($url);                        # certificate information "url"      (to prevent certificate modification)
  -            $sha1->add($rec->{"me_uuid"});           # certificate information "uuid"     (to prevent certificate modification)
  -            $sha1->add($rec->{"me_name"}     || ""); # certificate information "name"     (to prevent certificate modification)
  -            $sha1->add($rec->{"me_nickname"} || ""); # certificate information "nickname" (to prevent certificate modification)
  -            $sha1->add($rec->{"me_address"});        # certificate information "address"  (to prevent certificate modification)
  -            $sha1->add($expiry1);                    # certificate information "expiry"   (to prevent certificate modification and replay)
  -            $sha1->add($token->{"secret"});          # private     information            (to prevent signature re-generation)
  +            $sha1->add($version);                           # certificate information "version"    (to prevent certificate modification)
  +            $sha1->add($url);                               # certificate information "url"        (to prevent certificate modification)
  +            $sha1->add($rec->{"me_uuid"});                  # certificate information "uuid"       (to prevent certificate modification)
  +            $sha1->add($rec->{"me_name"}     || "");        # certificate information "name"       (to prevent certificate modification)
  +            $sha1->add($rec->{"me_nickname"} || "");        # certificate information "nickname"   (to prevent certificate modification)
  +            $sha1->add($rec->{"me_address"});               # certificate information "address"    (to prevent certificate modification)
  +            $sha1->add($rec->{"me_membership_karma"});      # certificate information "karma"      (to prevent certificate modification)
  +            $sha1->add($rec->{"me_membership_prop"} || ""); # certificate information "properties" (to prevent certificate modification)
  +            $sha1->add($expiry1);                           # certificate information "expiry"     (to prevent certificate modification and replay)
  +            $sha1->add($token->{"secret"});                 # private     information              (to prevent signature re-generation)
               my $sig = $sha1->hexdigest;
               undef $sha1;
   
               #   generate certificate
               my $cert = encode_base64(sprintf(
  -                "version=%s;url=%s;uuid=%s;name=%s;nickname=%s;address=%s;expiry=%s;signature=%s",
  +                "version=%s;url=%s;uuid=%s;name=%s;nickname=%s;address=%s;karma=%s;prop=%s;expiry=%s;signature=%s",
                   uri_escape($version),
                   uri_escape($url),
                   uri_escape($rec->{"me_uuid"}),
                   uri_escape($rec->{"me_name"} || ""),
                   uri_escape($rec->{"me_nickname"} || ""),
                   uri_escape($rec->{"me_address"}),
  +                uri_escape($rec->{"me_membership_karma"}),
  +                uri_escape($rec->{"me_membership_prop"}),
                   uri_escape($expiry1),
                   uri_escape($sig),
               ), "");
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.mod.c
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 ase.mod.c
  --- ossp-pkg/ase/ase.mod.c	14 Apr 2007 20:56:42 -0000	1.2
  +++ ossp-pkg/ase/ase.mod.c	16 Apr 2007 09:52:58 -0000	1.3
  @@ -200,6 +200,8 @@
       SHA1_UPDATE("name");
       SHA1_UPDATE("nickname");
       SHA1_UPDATE("address");
  +    SHA1_UPDATE("karma");
  +    SHA1_UPDATE("prop");
       SHA1_UPDATE("expiry");
       ap_SHA1Update(&sha1, cfg->secret, strlen(cfg->secret));
   
  @@ -238,6 +240,8 @@
       SET_VARIABLE("NAME",      "name");
       SET_VARIABLE("NICKNAME",  "nickname");
       SET_VARIABLE("ADDRESS",   "address");
  +    SET_VARIABLE("KARMA",     "karma");
  +    SET_VARIABLE("PROP",      "prop");
       SET_VARIABLE("EXPIRY",    "expiry");
       SET_VARIABLE("SIGNATURE", "signature");
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Apr 16 12:07:07 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 1BAE5752861; Mon, 16 Apr 2007 12:07:06 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ Makefile
Message-Id: <20070416100707.1BAE5752861@mail.ossp.org>
Date: Mon, 16 Apr 2007 12:07:06 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Apr-2007 12:07:06
  Branch: HEAD                             Handle: 2007041611070600

  Modified files:
    ossp-pkg/ase            Makefile

  Log:
    install Apache module always as mod_ase.so

  Summary:
    Revision    Changes     Path
    1.16        +1  -1      ossp-pkg/ase/Makefile
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/Makefile
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 Makefile
  --- ossp-pkg/ase/Makefile	14 Apr 2007 20:55:53 -0000	1.15
  +++ ossp-pkg/ase/Makefile	16 Apr 2007 10:07:06 -0000	1.16
  @@ -44,7 +44,7 @@
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(LIBEXECDIR)
   	$(SHTOOL) install -c -m 755 $(SUBST) ase-reflect.cgi $(DESTDIR)$(CGIDIR)/$(NAME)-reflect.cgi
   	$(SHTOOL) install -c -m 644 ase.api.pm $(DESTDIR)$(PERLDIR)/OSSP/$(NAME)/client.pm
  -	$(SHTOOL) install -c -m 755 ase.mod.so $(DESTDIR)$(LIBEXECDIR)/mod_$(NAME).so
  +	$(SHTOOL) install -c -m 755 ase.mod.so $(DESTDIR)$(LIBEXECDIR)/mod_ase.so
   
   install-server:
   	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(BINDIR)
  @@ .

From ossp-cvs-owner@ossp.org  Mon Apr 16 12:36:23 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 0F8F0752887; Mon, 16 Apr 2007 12:36:23 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.profile.pl
Message-Id: <20070416103623.0F8F0752887@mail.ossp.org>
Date: Mon, 16 Apr 2007 12:36:23 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Apr-2007 12:36:23
  Branch: HEAD                             Handle: 2007041611362200

  Modified files:
    ossp-pkg/ase            ase.cgi.profile.pl

  Log:
    send notifies also on profile edits

  Summary:
    Revision    Changes     Path
    1.31        +3  -0      ossp-pkg/ase/ase.cgi.profile.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.profile.pl
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 ase.cgi.profile.pl
  --- ossp-pkg/ase/ase.cgi.profile.pl	14 Apr 2007 19:29:39 -0000	1.30
  +++ ossp-pkg/ase/ase.cgi.profile.pl	16 Apr 2007 10:36:22 -0000	1.31
  @@ -420,6 +420,9 @@
               }, $pw->{-sha1}, $pw->{-md5}, $pw->{-cryptmd5}, $pw->{-cryptdes}, $me_uuid);
           }
   
  +        #   send notifications
  +        $self->notify($me_uuid);
  +
           #   redirect to view screen
           $cgi->param("action", "view");
           return $self->forward("menu-profile");
  @@ .

From ossp-cvs-owner@ossp.org  Mon Apr 16 13:32:59 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B17047528EC; Mon, 16 Apr 2007 13:32:59 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ChangeLog
Message-Id: <20070416113259.B17047528EC@mail.ossp.org>
Date: Mon, 16 Apr 2007 13:32:59 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Apr-2007 13:32:59
  Branch: HEAD                             Handle: 2007041612325900

  Modified files:
    ossp-pkg/ase            ChangeLog

  Log:
    final polishing

  Summary:
    Revision    Changes     Path
    1.40        +4  -5      ossp-pkg/ase/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.39 -r1.40 ChangeLog
  --- ossp-pkg/ase/ChangeLog	14 Apr 2007 20:55:53 -0000	1.39
  +++ ossp-pkg/ase/ChangeLog	16 Apr 2007 11:32:59 -0000	1.40
  @@ -11,12 +11,11 @@
     This is a list of all changes to OSSP ase.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 0.3.1 and 0.4.0 (13-Apr-2007 to 14-Apr-2007)
  +  Changes between 0.3.1 and 0.4.0 (13-Apr-2007 to 16-Apr-2007)
   
  -   o Provide a first cut for an Apache 1.3.x mod_ase module which
  -     on-the-fly parses the ASE-CERT cookie, validates its signature and
  -     in case it is valid converts the certificate information into CGI
  -     environment variables.
  +   o Provide an Apache 1.3.x mod_ase module which on-the-fly parses the
  +     ASE-CERT cookie, validates its signature and in case it is valid
  +     converts the certificate information into CGI environment variables.
        [Ralf S. Engelschall]
   
      o Remove all run-time warnings which filled the Apache error log.
  @@ .

From ossp-cvs-owner@ossp.org  Mon Apr 16 13:33:22 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id A97A77528E7; Mon, 16 Apr 2007 13:33:22 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ README VERSION ase.cgi ase.cli
Message-Id: <20070416113322.A97A77528E7@mail.ossp.org>
Date: Mon, 16 Apr 2007 13:33:22 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   16-Apr-2007 13:33:22
  Branch: HEAD                             Handle: 2007041612332101

  Modified files:
    ossp-pkg/ase            README VERSION ase.cgi ase.cli

  Log:
    flush pending changes before tagging

  Summary:
    Revision    Changes     Path
    1.12        +1  -1      ossp-pkg/ase/README
    1.8         +1  -1      ossp-pkg/ase/VERSION
    1.29        +2  -2      ossp-pkg/ase/ase.cgi
    1.8         +2  -2      ossp-pkg/ase/ase.cli
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/README
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 README
  --- ossp-pkg/ase/README	13 Apr 2007 18:05:56 -0000	1.11
  +++ ossp-pkg/ase/README	16 Apr 2007 11:33:21 -0000	1.12
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     \___/|___/\___| 
   
     OSSP ase - Affiliation Service Environment
  -  Version 0.3.1 (13-Apr-2007)
  +  Version 0.4.0 (16-Apr-2007)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/VERSION
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 VERSION
  --- ossp-pkg/ase/VERSION	13 Apr 2007 18:05:57 -0000	1.7
  +++ ossp-pkg/ase/VERSION	16 Apr 2007 11:33:21 -0000	1.8
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP ase (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP ase, Version 0.3.1 (13-Apr-2007)
  +  This is OSSP ase, Version 0.4.0 (16-Apr-2007)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 ase.cgi
  --- ossp-pkg/ase/ase.cgi	14 Apr 2007 19:29:39 -0000	1.28
  +++ ossp-pkg/ase/ase.cgi	16 Apr 2007 11:33:21 -0000	1.29
  @@ -34,8 +34,8 @@
   our $cfg = {
       -prog_name   => 'OSSP ase',
       -prog_desc   => 'Affiliation Service Environment',
  -    -prog_vers   => '0.3.1',
  -    -prog_date   => '13-Apr-2007',
  +    -prog_vers   => '0.4.0',
  +    -prog_date   => '16-Apr-2007',
       -path_cfgdir => '.',
       -path_libdir => '.',
       -path_vardir => '.',
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cli
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 ase.cli
  --- ossp-pkg/ase/ase.cli	13 Apr 2007 18:05:57 -0000	1.7
  +++ ossp-pkg/ase/ase.cli	16 Apr 2007 11:33:22 -0000	1.8
  @@ -34,8 +34,8 @@
   our $cfg = {
       -prog_name   => 'OSSP ase',
       -prog_desc   => 'Affiliation Service Environment',
  -    -prog_vers   => '0.3.1',
  -    -prog_date   => '13-Apr-2007',
  +    -prog_vers   => '0.4.0',
  +    -prog_date   => '16-Apr-2007',
       -path_cfgdir => '.',
       -path_libdir => '.',
       -path_vardir => '.',
  @@ .

From ossp-cvs-owner@ossp.org  Tue May 15 21:35:49 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id EDF7A7529C6; Tue, 15 May 2007 21:35:48 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog sh.install sh.mkln
Message-Id: <20070515193548.EDF7A7529C6@mail.ossp.org>
Date: Tue, 15 May 2007 21:35:48 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   15-May-2007 21:35:48
  Branch: HEAD                             Handle: 2007051520354800

  Modified files:
    ossp-pkg/shtool         ChangeLog sh.install sh.mkln

  Log:
    1. Fix "shtool mkln" by fixing the determination whether
       relative source paths can be used or not.
    2. Make "shtool install" more robust by quoting arguments.

  Summary:
    Revision    Changes     Path
    1.231       +7  -0      ossp-pkg/shtool/ChangeLog
    1.34        +4  -4      ossp-pkg/shtool/sh.install
    1.21        +11 -6      ossp-pkg/shtool/sh.mkln
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.230 -r1.231 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	29 Sep 2006 06:36:31 -0000	1.230
  +++ ossp-pkg/shtool/ChangeLog	15 May 2007 19:35:48 -0000	1.231
  @@ -11,6 +11,13 @@
   
    Changes between 2.0.6 and 2.0.7 (19-Apr-2006 to xx-Sep-2006):
   
  +   *) Fix "shtool mkln" by fixing the determination whether
  +      relative source paths can be used or not.
  +      [Ralf S. Engelschall]
  +
  +   *) Make "shtool install" more robust by quoting arguments.
  +      [Ralf S. Engelschall]
  +
      *) Fix and enhance "shtool echo -e" command by adding a missing
         line-continuation and adding support for MacOS X via nidump(8)
         and NIS+ support via niscat(8) and nismatch(8).
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.install
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 sh.install
  --- ossp-pkg/shtool/sh.install	4 Feb 2006 09:43:25 -0000	1.33
  +++ ossp-pkg/shtool/sh.install	15 May 2007 19:35:48 -0000	1.34
  @@ -119,12 +119,12 @@
           if [ ".$opt_t" = .yes ]; then
               echo "cp $src $dsttmp" 1>&2
           fi
  -        cp $src $dsttmp || shtool_exit $?
  +        cp "$src" "$dsttmp" || shtool_exit $?
       else
           if [ ".$opt_t" = .yes ]; then
               echo "mv $src $dsttmp" 1>&2
           fi
  -        mv $src $dsttmp || shtool_exit $?
  +        mv "$src" "$dsttmp" || shtool_exit $?
       fi
   
       #   adjust the target file
  @@ -135,7 +135,7 @@
           do
               sed="$sed -e '$e'"
           done
  -        cp $dsttmp $dsttmp.old
  +        cp "$dsttmp" "$dsttmp.old"
           chmod u+w $dsttmp
           eval "$sed <$dsttmp.old >$dsttmp" || shtool_exit $?
           rm -f $dsttmp.old
  @@ -170,7 +170,7 @@
       quick=no
       if [ ".$opt_C" = .yes ]; then
           if [ -r $dst ]; then
  -            if cmp -s $src $dst; then
  +            if cmp -s "$src" "$dst"; then
                   quick=yes
               fi
           fi
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.mkln
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 sh.mkln
  --- ossp-pkg/shtool/sh.mkln	4 Feb 2006 09:43:25 -0000	1.20
  +++ ossp-pkg/shtool/sh.mkln	15 May 2007 19:35:48 -0000	1.21
  @@ -131,12 +131,17 @@
       #   determine source prefix which is the reverse directory
       #   step-up corresponding to the destination directory
       srcpre=""
  -
  -    isroot=0
  -    if [ ".$prefix" = . ] || [ ".$prefix" = ./ ]; then
  -        isroot=1
  -    fi
  -    if [ $oneisabs = 0 ] || [ $isroot = 0 ]; then
  +    allow_relative_srcpre=no
  +    if [ ".$prefix" != . ] && [ ".$prefix" != ./ ]; then
  +        allow_relative_srcpre=yes
  +    fi  
  +    if [ $oneisabs = 0 ]; then
  +        allow_relative_srcpre=yes
  +    fi  
  +    if [ ".$opt_s" != .yes ]; then
  +        allow_relative_srcpre=no
  +    fi  
  +    if [ ".$allow_relative_srcpre" = .yes ]; then
           pl="$dstdir/"
           OIFS="$IFS"; IFS='/'
           for pe in $pl; do
  @@ .

From ossp-cvs-owner@ossp.org  Sat May 19 21:06:09 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id E2E21752928; Sat, 19 May 2007 21:06:08 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog Makefile.in devtool.conf shtool...
Message-Id: <20070519190608.E2E21752928@mail.ossp.org>
Date: Sat, 19 May 2007 21:06:08 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-May-2007 21:06:08
  Branch: HEAD                             Handle: 2007051920060701

  Modified files:
    ossp-pkg/shtool         ChangeLog Makefile.in devtool.conf shtoolize.in

  Log:
    Upgrade build environment to GNU autoconf 2.61

  Summary:
    Revision    Changes     Path
    1.232       +4  -1      ossp-pkg/shtool/ChangeLog
    1.53        +1  -0      ossp-pkg/shtool/Makefile.in
    1.8         +1  -1      ossp-pkg/shtool/devtool.conf
    1.39        +5  -4      ossp-pkg/shtool/shtoolize.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.231 -r1.232 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	15 May 2007 19:35:48 -0000	1.231
  +++ ossp-pkg/shtool/ChangeLog	19 May 2007 19:06:07 -0000	1.232
  @@ -9,7 +9,10 @@
   
    ChangeLog
   
  - Changes between 2.0.6 and 2.0.7 (19-Apr-2006 to xx-Sep-2006):
  + Changes between 2.0.6 and 2.0.7 (19-Apr-2006 to 19-May-2007):
  +
  +   *) Upgrade build environment to GNU autoconf 2.61
  +      [Ralf S. Engelschall]
   
      *) Fix "shtool mkln" by fixing the determination whether
         relative source paths can be used or not.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.52 -r1.53 Makefile.in
  --- ossp-pkg/shtool/Makefile.in	4 Feb 2006 09:43:25 -0000	1.52
  +++ ossp-pkg/shtool/Makefile.in	19 May 2007 19:06:08 -0000	1.53
  @@ -25,6 +25,7 @@
   exec_prefix = @exec_prefix@
   bindir      = @bindir@
   mandir      = @mandir@
  +datarootdir = @datarootdir@
   datadir     = @datadir@
   aclocaldir  = $(datadir)/aclocal
   pkgdatadir  = $(datadir)/shtool
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 devtool.conf
  --- ossp-pkg/shtool/devtool.conf	1 Jan 2004 16:56:33 -0000	1.7
  +++ ossp-pkg/shtool/devtool.conf	19 May 2007 19:06:08 -0000	1.8
  @@ -3,7 +3,7 @@
   ##
   
   %autogen
  -    @autogen autoconf 2.59 "2.5*"
  +    @autogen autoconf 2.61 "2.6*"
   
   %autoclean
       @autoclean autoconf
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtoolize.in
  ============================================================================
  $ cvs diff -u -r1.38 -r1.39 shtoolize.in
  --- ossp-pkg/shtool/shtoolize.in	4 Feb 2006 09:43:26 -0000	1.38
  +++ ossp-pkg/shtool/shtoolize.in	19 May 2007 19:06:08 -0000	1.39
  @@ -27,10 +27,11 @@
   ##
   
   #   General configuration
  -my $version   = "@SHTOOL_VERSION_STR@";
  -my $prefix    = "@prefix@";
  -my $datadir   = "@datadir@";
  -my $scriptdir = "$datadir/shtool";
  +my $version     = "@SHTOOL_VERSION_STR@";
  +my $prefix      = "@prefix@";
  +my $datarootdir = "@datarootdir@";
  +my $datadir     = "@datadir@";
  +my $scriptdir   = "$datadir/shtool";
   
   #   Available modules
   my @available = qw(
  @@ .

From ossp-cvs-owner@ossp.org  Sat May 19 21:09:45 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id BD8837528EE; Sat, 19 May 2007 21:09:44 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog Makefile.in README configure.ac...
Message-Id: <20070519190944.BD8837528EE@mail.ossp.org>
Date: Sat, 19 May 2007 21:09:44 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-May-2007 21:09:44
  Branch: HEAD                             Handle: 2007051920093801

  Modified files:
    ossp-pkg/shtool         ChangeLog Makefile.in README configure.ac
                            devtool.func sh.arx sh.echo sh.fixperm sh.install
                            sh.mdate sh.mkdir sh.mkln sh.mkshadow sh.move
                            sh.path sh.platform sh.prop sh.rotate sh.scpp
                            sh.slo sh.subst sh.table sh.tarball sh.version
                            shtool.m4 shtool.pod shtool.spec shtoolize.in
                            shtoolize.pod test.db test.sh

  Log:
    Adjust copyright for year 2007.

  Summary:
    Revision    Changes     Path
    1.233       +3  -0      ossp-pkg/shtool/ChangeLog
    1.54        +1  -1      ossp-pkg/shtool/Makefile.in
    1.115       +1  -1      ossp-pkg/shtool/README
    1.8         +2  -2      ossp-pkg/shtool/configure.ac
    1.8         +1  -1      ossp-pkg/shtool/devtool.func
    1.25        +1  -1      ossp-pkg/shtool/sh.arx
    1.43        +1  -1      ossp-pkg/shtool/sh.echo
    1.21        +1  -1      ossp-pkg/shtool/sh.fixperm
    1.35        +1  -1      ossp-pkg/shtool/sh.install
    1.19        +1  -1      ossp-pkg/shtool/sh.mdate
    1.27        +1  -1      ossp-pkg/shtool/sh.mkdir
    1.22        +1  -1      ossp-pkg/shtool/sh.mkln
    1.27        +1  -1      ossp-pkg/shtool/sh.mkshadow
    1.23        +1  -1      ossp-pkg/shtool/sh.move
    1.30        +1  -1      ossp-pkg/shtool/sh.path
    1.18        +1  -1      ossp-pkg/shtool/sh.platform
    1.21        +1  -1      ossp-pkg/shtool/sh.prop
    1.13        +1  -1      ossp-pkg/shtool/sh.rotate
    1.29        +1  -1      ossp-pkg/shtool/sh.scpp
    1.27        +1  -1      ossp-pkg/shtool/sh.slo
    1.17        +1  -1      ossp-pkg/shtool/sh.subst
    1.23        +1  -1      ossp-pkg/shtool/sh.table
    1.26        +1  -1      ossp-pkg/shtool/sh.tarball
    1.43        +1  -1      ossp-pkg/shtool/sh.version
    1.10        +1  -1      ossp-pkg/shtool/shtool.m4
    1.70        +1  -1      ossp-pkg/shtool/shtool.pod
    1.32        +1  -1      ossp-pkg/shtool/shtool.spec
    1.40        +3  -3      ossp-pkg/shtool/shtoolize.in
    1.15        +1  -1      ossp-pkg/shtool/shtoolize.pod
    1.25        +1  -1      ossp-pkg/shtool/test.db
    1.14        +1  -1      ossp-pkg/shtool/test.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.232 -r1.233 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	19 May 2007 19:06:07 -0000	1.232
  +++ ossp-pkg/shtool/ChangeLog	19 May 2007 19:09:38 -0000	1.233
  @@ -26,6 +26,9 @@
         and NIS+ support via niscat(8) and nismatch(8).
         [Ralf S. Engelschall]
   
  +   *) Adjust copyright for year 2007.
  +      [Ralf S. Engelschall]
  +
    Changes between 2.0.5 and 2.0.6 (07-Feb-2006 to 19-Apr-2006):
   
      *) Add support for Sun Niagara (sun4v) architecture to
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.53 -r1.54 Makefile.in
  --- ossp-pkg/shtool/Makefile.in	19 May 2007 19:06:08 -0000	1.53
  +++ ossp-pkg/shtool/Makefile.in	19 May 2007 19:09:39 -0000	1.54
  @@ -1,6 +1,6 @@
   ##
   ##  Makefile for GNU shtool
  -##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/README
  ============================================================================
  $ cvs diff -u -r1.114 -r1.115 README
  --- ossp-pkg/shtool/README	19 Apr 2006 16:35:22 -0000	1.114
  +++ ossp-pkg/shtool/README	19 May 2007 19:09:39 -0000	1.115
  @@ -5,7 +5,7 @@
     |___/_| |_|\__\___/ \___/|_|
   
     GNU shtool -- The GNU Portable Shell Tool
  -  Copyright (c) 1994-2006 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 1994-2007 Ralf S. Engelschall <rse@engelschall.com>
   
     http://www.gnu.org/software/shtool/
     ftp://ftp.gnu.org/gnu/shtool/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/configure.ac
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 configure.ac
  --- ossp-pkg/shtool/configure.ac	4 Feb 2006 09:43:25 -0000	1.7
  +++ ossp-pkg/shtool/configure.ac	19 May 2007 19:09:39 -0000	1.8
  @@ -1,6 +1,6 @@
   dnl ##
   dnl ##  configure.ac -- Autoconf source for GNU shtool
  -dnl ##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##
   dnl ##  This file is part of shtool and free software; you can redistribute
   dnl ##  it and/or modify it under the terms of the GNU General Public
  @@ -24,7 +24,7 @@
   
   SHTOOL_VERSION_STR="`sh sh.version -l txt -d long VERSION`"
   sh sh.echo -e "Configuring %BGNU shtool%b (Portable Shell Tool), version %B${SHTOOL_VERSION_STR}%b"
  -echo "Copyright (c) 1994-2006 Ralf S. Engelschall <rse@engelschall.com>"
  +echo "Copyright (c) 1994-2007 Ralf S. Engelschall <rse@engelschall.com>"
   AC_SUBST(SHTOOL_VERSION_STR)
   
   AC_PREFIX_DEFAULT(/usr/local)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/devtool.func
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 devtool.func
  --- ossp-pkg/shtool/devtool.func	4 Feb 2006 09:43:25 -0000	1.7
  +++ ossp-pkg/shtool/devtool.func	19 May 2007 19:09:39 -0000	1.8
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2006 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2007 Ralf S. Engelschall <rse@engelschall.com> 
   ##
   
   devtool_require () {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.arx
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 sh.arx
  --- ossp-pkg/shtool/sh.arx	4 Feb 2006 09:43:25 -0000	1.24
  +++ ossp-pkg/shtool/sh.arx	19 May 2007 19:09:39 -0000	1.25
  @@ -1,6 +1,6 @@
   ##
   ##  arx -- Extended archive command
  -##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.echo
  ============================================================================
  $ cvs diff -u -r1.42 -r1.43 sh.echo
  --- ossp-pkg/shtool/sh.echo	29 Sep 2006 06:36:31 -0000	1.42
  +++ ossp-pkg/shtool/sh.echo	19 May 2007 19:09:39 -0000	1.43
  @@ -1,6 +1,6 @@
   ##
   ##  echo -- Print string with optional construct expansion
  -##  Copyright (c) 1998-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.fixperm
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 sh.fixperm
  --- ossp-pkg/shtool/sh.fixperm	4 Feb 2006 09:43:25 -0000	1.20
  +++ ossp-pkg/shtool/sh.fixperm	19 May 2007 19:09:39 -0000	1.21
  @@ -1,6 +1,6 @@
   ##
   ##  fixperm -- Fix file permissions inside a source tree
  -##  Copyright (c) 1996-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1996-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.install
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 sh.install
  --- ossp-pkg/shtool/sh.install	15 May 2007 19:35:48 -0000	1.34
  +++ ossp-pkg/shtool/sh.install	19 May 2007 19:09:39 -0000	1.35
  @@ -1,6 +1,6 @@
   ##
   ##  install -- Install a program, script or datafile
  -##  Copyright (c) 1997-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1997-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.mdate
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 sh.mdate
  --- ossp-pkg/shtool/sh.mdate	4 Feb 2006 09:59:16 -0000	1.18
  +++ ossp-pkg/shtool/sh.mdate	19 May 2007 19:09:39 -0000	1.19
  @@ -1,7 +1,7 @@
   ##
   ##  mdate -- Pretty-print modification time of a file or dir
   ##  Copyright (c) 1995-1997 Free Software Foundation, Inc.
  -##  Copyright (c) 1998-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.mkdir
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 sh.mkdir
  --- ossp-pkg/shtool/sh.mkdir	4 Feb 2006 09:43:25 -0000	1.26
  +++ ossp-pkg/shtool/sh.mkdir	19 May 2007 19:09:39 -0000	1.27
  @@ -1,6 +1,6 @@
   ##
   ##  mkdir -- Make one or more directories
  -##  Copyright (c) 1996-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1996-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.mkln
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 sh.mkln
  --- ossp-pkg/shtool/sh.mkln	15 May 2007 19:35:48 -0000	1.21
  +++ ossp-pkg/shtool/sh.mkln	19 May 2007 19:09:39 -0000	1.22
  @@ -1,6 +1,6 @@
   ##
   ##  mkln -- Make link with calculation of relative paths
  -##  Copyright (c) 1998-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.mkshadow
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 sh.mkshadow
  --- ossp-pkg/shtool/sh.mkshadow	4 Feb 2006 09:43:25 -0000	1.26
  +++ ossp-pkg/shtool/sh.mkshadow	19 May 2007 19:09:39 -0000	1.27
  @@ -1,6 +1,6 @@
   ##
   ##  mkshadow -- Make a shadow tree through symbolic links
  -##  Copyright (c) 1998-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.move
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 sh.move
  --- ossp-pkg/shtool/sh.move	4 Feb 2006 09:43:25 -0000	1.22
  +++ ossp-pkg/shtool/sh.move	19 May 2007 19:09:39 -0000	1.23
  @@ -1,6 +1,6 @@
   ##
   ##  move -- Move files with simultaneous substitution
  -##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.path
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 sh.path
  --- ossp-pkg/shtool/sh.path	4 Feb 2006 09:43:25 -0000	1.29
  +++ ossp-pkg/shtool/sh.path	19 May 2007 19:09:39 -0000	1.30
  @@ -1,6 +1,6 @@
   ##
   ##  path -- Deal with program paths
  -##  Copyright (c) 1998-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.platform
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 sh.platform
  --- ossp-pkg/shtool/sh.platform	19 Apr 2006 16:28:56 -0000	1.17
  +++ ossp-pkg/shtool/sh.platform	19 May 2007 19:09:39 -0000	1.18
  @@ -1,6 +1,6 @@
   ##
   ##  platform -- Platform Identification Utility
  -##  Copyright (c) 2003-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.prop
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 sh.prop
  --- ossp-pkg/shtool/sh.prop	4 Feb 2006 09:43:25 -0000	1.20
  +++ ossp-pkg/shtool/sh.prop	19 May 2007 19:09:39 -0000	1.21
  @@ -1,6 +1,6 @@
   ##
   ##  prop -- Display progress with a running propeller
  -##  Copyright (c) 1998-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.rotate
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 sh.rotate
  --- ossp-pkg/shtool/sh.rotate	4 Feb 2006 09:43:25 -0000	1.12
  +++ ossp-pkg/shtool/sh.rotate	19 May 2007 19:09:39 -0000	1.13
  @@ -1,6 +1,6 @@
   ##
   ##  rotate -- Logfile rotation
  -##  Copyright (c) 2001-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.scpp
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 sh.scpp
  --- ossp-pkg/shtool/sh.scpp	4 Feb 2006 09:43:25 -0000	1.28
  +++ ossp-pkg/shtool/sh.scpp	19 May 2007 19:09:39 -0000	1.29
  @@ -1,6 +1,6 @@
   ##
   ##  scpp -- Sharing C Pre-Processor
  -##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.slo
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 sh.slo
  --- ossp-pkg/shtool/sh.slo	4 Feb 2006 09:43:25 -0000	1.26
  +++ ossp-pkg/shtool/sh.slo	19 May 2007 19:09:39 -0000	1.27
  @@ -1,6 +1,6 @@
   ##
   ##  slo -- Separate linker options by library class
  -##  Copyright (c) 1998-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.subst
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 sh.subst
  --- ossp-pkg/shtool/sh.subst	4 Feb 2006 09:43:25 -0000	1.16
  +++ ossp-pkg/shtool/sh.subst	19 May 2007 19:09:39 -0000	1.17
  @@ -1,6 +1,6 @@
   ##
   ##  subst -- Apply sed(1) substitution operations
  -##  Copyright (c) 2001-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.table
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 sh.table
  --- ossp-pkg/shtool/sh.table	4 Feb 2006 09:43:25 -0000	1.22
  +++ ossp-pkg/shtool/sh.table	19 May 2007 19:09:39 -0000	1.23
  @@ -1,6 +1,6 @@
   ##
   ##  table -- Pretty-print a field-separated list as a table
  -##  Copyright (c) 1998-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.tarball
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 sh.tarball
  --- ossp-pkg/shtool/sh.tarball	4 Feb 2006 09:54:07 -0000	1.25
  +++ ossp-pkg/shtool/sh.tarball	19 May 2007 19:09:39 -0000	1.26
  @@ -1,6 +1,6 @@
   ##
   ##  tarball -- Roll distribution tarballs
  -##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.version
  ============================================================================
  $ cvs diff -u -r1.42 -r1.43 sh.version
  --- ossp-pkg/shtool/sh.version	7 Feb 2006 08:31:44 -0000	1.42
  +++ ossp-pkg/shtool/sh.version	19 May 2007 19:09:39 -0000	1.43
  @@ -1,6 +1,6 @@
   ##
   ##  version -- Maintain a version information file
  -##  Copyright (c) 1994-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1994-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtool.m4
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 shtool.m4
  --- ossp-pkg/shtool/shtool.m4	4 Feb 2006 09:43:26 -0000	1.9
  +++ ossp-pkg/shtool/shtool.m4	19 May 2007 19:09:39 -0000	1.10
  @@ -1,6 +1,6 @@
   ##
   ##  shtool.m4 -- GNU shtool Autoconf macros
  -##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtool.pod
  ============================================================================
  $ cvs diff -u -r1.69 -r1.70 shtool.pod
  --- ossp-pkg/shtool/shtool.pod	4 Feb 2006 09:43:26 -0000	1.69
  +++ ossp-pkg/shtool/shtool.pod	19 May 2007 19:09:39 -0000	1.70
  @@ -1,6 +1,6 @@
   ##
   ##  shtool.pod -- Manual Page for shtool in POD format
  -##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtool.spec
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 shtool.spec
  --- ossp-pkg/shtool/shtool.spec	19 Apr 2006 16:35:26 -0000	1.31
  +++ ossp-pkg/shtool/shtool.spec	19 May 2007 19:09:39 -0000	1.32
  @@ -1,6 +1,6 @@
   ##
   ##  shtool.spec -- RPM specification for shtool package
  -##  Copyright (c) 2000-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtoolize.in
  ============================================================================
  $ cvs diff -u -r1.39 -r1.40 shtoolize.in
  --- ossp-pkg/shtool/shtoolize.in	19 May 2007 19:06:08 -0000	1.39
  +++ ossp-pkg/shtool/shtoolize.in	19 May 2007 19:09:39 -0000	1.40
  @@ -1,7 +1,7 @@
   #!@PERL@
   ##
   ##  shtoolize -- Build shtool script out of ingredient scripts
  -##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ -351,7 +351,7 @@
   #!/bin/sh
   ##
   ##  GNU shtool -- The GNU Portable Shell Tool
  -##  Copyright (c) 1994-2006 Ralf S. Engelschall <rse\@engelschall.com>
  +##  Copyright (c) 1994-2007 Ralf S. Engelschall <rse\@engelschall.com>
   ##
   ##  See http://www.gnu.org/software/shtool/ for more information.
   ##  See ftp://ftp.gnu.org/gnu/shtool/ for latest version.
  @@ -422,7 +422,7 @@
   fi
   if [ ".\$1" = ".-h" ] || [ ".\$1" = ".--help" ]; then
       echo "This is GNU shtool, version ${version}"
  -    echo 'Copyright (c) 1994-2006 Ralf S. Engelschall <rse\@engelschall.com>'
  +    echo 'Copyright (c) 1994-2007 Ralf S. Engelschall <rse\@engelschall.com>'
       echo 'Report bugs to <bug-shtool\@gnu.org>'
       echo ''
       echo 'Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]'
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtoolize.pod
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 shtoolize.pod
  --- ossp-pkg/shtool/shtoolize.pod	4 Feb 2006 09:43:26 -0000	1.14
  +++ ossp-pkg/shtool/shtoolize.pod	19 May 2007 19:09:39 -0000	1.15
  @@ -1,6 +1,6 @@
   ##
   ##  shtoolize.pod -- Manual Page for shtoolize in POD format
  -##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/test.db
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 test.db
  --- ossp-pkg/shtool/test.db	4 Feb 2006 09:43:26 -0000	1.24
  +++ ossp-pkg/shtool/test.db	19 May 2007 19:09:39 -0000	1.25
  @@ -1,6 +1,6 @@
   ##
   ##  test.db -- GNU shtool test suite (minimalistic)
  -##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   @begin{echo}
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/test.sh
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 test.sh
  --- ossp-pkg/shtool/test.sh	4 Feb 2006 09:43:26 -0000	1.13
  +++ ossp-pkg/shtool/test.sh	19 May 2007 19:09:39 -0000	1.14
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  test.sh -- GNU shtool test suite driver
  -##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .

From ossp-cvs-owner@ossp.org  Sat May 19 21:30:35 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 58FD8753079; Sat, 19 May 2007 21:30:35 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog ossp-pkg/uuid/php/ config.m4
Message-Id: <20070519193035.58FD8753079@mail.ossp.org>
Date: Sat, 19 May 2007 21:30:35 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-May-2007 21:30:35
  Branch: HEAD                             Handle: 2007051920303401

  Modified files:
    ossp-pkg/uuid           ChangeLog
    ossp-pkg/uuid/php       config.m4

  Log:
    Make GNU autoconf procedure of PHP binding more robust by using
    -Wl,-Bsymbolic only on platforms where uuid_create(3) actually
    exists and where -Wl,-Bsymbolic is really accepted by the tool
    chain. This especially unbreaks MacOS X.

  Summary:
    Revision    Changes     Path
    1.144       +6  -0      ossp-pkg/uuid/ChangeLog
    1.4         +7  -2      ossp-pkg/uuid/php/config.m4
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.143 -r1.144 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	1 Jan 2007 18:39:52 -0000	1.143
  +++ ossp-pkg/uuid/ChangeLog	19 May 2007 19:30:34 -0000	1.144
  @@ -13,6 +13,12 @@
   
     Changes between 1.5.1 and 1.6.0 (31-Jul-2006 to 05-Oct-2006)
   
  +   o Make GNU autoconf procedure of PHP binding more robust by using
  +     -Wl,-Bsymbolic only on platforms where uuid_create(3) actually
  +     exists and where -Wl,-Bsymbolic is really accepted by the tool
  +     chain. This especially unbreaks MacOS X.
  +     [Ralf S. Engelschall]
  +
      o Fix "uuid_export" function in PHP bindings under
        UUID_FMT_SIV, UUID_FMT_STR and UUID_FMT_TXT where the
        NUL-termination character should be not passed back to PHP.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/php/config.m4
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 config.m4
  --- ossp-pkg/uuid/php/config.m4	1 Jan 2007 18:14:58 -0000	1.3
  +++ ossp-pkg/uuid/php/config.m4	19 May 2007 19:30:35 -0000	1.4
  @@ -37,7 +37,12 @@
       PHP_ADD_LIBRARY([uuid],, UUID_SHARED_LIBADD)
       PHP_ADD_INCLUDE([..])
       PHP_SUBST(UUID_SHARED_LIBADD)
  -    dnl  avoid conflict with libc's uuid_create(3)
  -    EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-Bsymbolic"
  +
  +    dnl  avoid linking conflict with a potentially existing uuid_create(3) in libc
  +    AC_CHECK_FUNC(uuid_create,[
  +        SAVE_LDFLAGS="$LDFLAGS"
  +        LDFLAGS="$LDFLAGS -Wl,-Bsymbolic"
  +        AC_TRY_LINK([],[], [EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-Bsymbolic"])
  +        LDFLAGS="$SAVE_LDFLAGS"])
   fi
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat May 19 21:34:21 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 08BF3752FE3; Sat, 19 May 2007 21:34:20 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ README VERSION shtool.spec
Message-Id: <20070519193421.08BF3752FE3@mail.ossp.org>
Date: Sat, 19 May 2007 21:34:20 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-May-2007 21:34:20
  Branch: HEAD                             Handle: 2007051920341800

  Modified files:
    ossp-pkg/shtool         README VERSION shtool.spec

  Log:
    bump version before release

  Summary:
    Revision    Changes     Path
    1.116       +1  -1      ossp-pkg/shtool/README
    1.88        +1  -1      ossp-pkg/shtool/VERSION
    1.33        +1  -1      ossp-pkg/shtool/shtool.spec
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/README
  ============================================================================
  $ cvs diff -u -r1.115 -r1.116 README
  --- ossp-pkg/shtool/README	19 May 2007 19:09:39 -0000	1.115
  +++ ossp-pkg/shtool/README	19 May 2007 19:34:18 -0000	1.116
  @@ -10,7 +10,7 @@
     http://www.gnu.org/software/shtool/
     ftp://ftp.gnu.org/gnu/shtool/
   
  -  Version 2.0.6 (19-Apr-2006)
  +  Version 2.0.7 (19-May-2007)
   
     The GNU shtool program is a compilation of small but very stable and
     portable shell scripts into a single shell tool. All ingredients
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/VERSION
  ============================================================================
  $ cvs diff -u -r1.87 -r1.88 VERSION
  --- ossp-pkg/shtool/VERSION	19 Apr 2006 16:35:24 -0000	1.87
  +++ ossp-pkg/shtool/VERSION	19 May 2007 19:34:18 -0000	1.88
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for GNU shtool (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is GNU shtool, Version 2.0.6 (19-Apr-2006)
  +  This is GNU shtool, Version 2.0.7 (19-May-2007)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtool.spec
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 shtool.spec
  --- ossp-pkg/shtool/shtool.spec	19 May 2007 19:09:39 -0000	1.32
  +++ ossp-pkg/shtool/shtool.spec	19 May 2007 19:34:18 -0000	1.33
  @@ -30,7 +30,7 @@
   %define prefix /usr/local
   %endif
   
  -%define ver 2.0.6
  +%define ver 2.0.7
   %define rel 0
   
   Name:       shtool
  @@ .

From ossp-cvs-owner@ossp.org  Sat May 19 21:39:48 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id C25BD75307B; Sat, 19 May 2007 21:39:48 +0200 (CEST)
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/tool/ index.wml ossp-w...
Message-Id: <20070519193948.C25BD75307B@mail.ossp.org>
Date: Sat, 19 May 2007 21:39:48 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   OSSP Project Master
  Root:   /v/ossp/cvs                      Email:  ossp@ossp.org
  Module: ossp-web                         Date:   19-May-2007 21:39:48
  Branch: HEAD                             Handle: 2007051920394701

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/shtool
                            index.wml

  Log:
    release GNU shtool 2.0.7

  Summary:
    Revision    Changes     Path
    1.171       +1  -0      ossp-web/new/news.txt
    1.64        +1  -1      ossp-web/pkg/tool/index.wml
    1.17        +2  -2      ossp-web/pkg/tool/shtool/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.170 -r1.171 news.txt
  --- ossp-web/new/news.txt	13 Apr 2007 18:06:57 -0000	1.170
  +++ ossp-web/new/news.txt	19 May 2007 19:39:47 -0000	1.171
  @@ -1,3 +1,4 @@
  +19-May-2007: Released T<OSSP shtool> 2.0.7
   13-Apr-2007: Released T<OSSP ase> 0.3.1
   13-Apr-2007: Released T<OSSP ase> 0.3.0
   06-Apr-2007: Released T<OSSP ase> 0.2.1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.63 -r1.64 index.wml
  --- ossp-web/pkg/tool/index.wml	13 Apr 2007 18:06:58 -0000	1.63
  +++ ossp-web/pkg/tool/index.wml	19 May 2007 19:39:48 -0000	1.64
  @@ -14,7 +14,7 @@
   <pkg_list>
     <pkg_item name="shtool" longname="GNU shtool" type="tool"
               desc="Portable Shell Tool"
  -		    done=100 stable="2.0.6" unstable=none>
  +		    done=100 stable="2.0.7" unstable=none>
     <pkg_item name="lmtp2nntp" longname="OSSP lmtp2nntp" type="tool"
               desc="Real-Time Mail to News Gateway"
               done=100 stable="1.4.1" unstable=none>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/shtool/index.wml
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 index.wml
  --- ossp-web/pkg/tool/shtool/index.wml	19 Apr 2006 16:40:44 -0000	1.16
  +++ ossp-web/pkg/tool/shtool/index.wml	19 May 2007 19:39:48 -0000	1.17
  @@ -40,7 +40,7 @@
   
   <pkg_status
       name="shtool" assign="rse"
  -    stable="2.0.5"   stable_date="07-Feb-2006"
  +    stable="2.0.7"   stable_date="19-May-2007"
       unstable="none"  unstable_date="none"
   	done=100>
   
  @@ -51,7 +51,7 @@
       url=$(FTP_ROOT_URL)/pkg/tool/shtool/
       directory=$(FTP_ROOT_DIR)/pkg/tool/shtool/
       files="shtool-*.tar.gz" 
  -	stable="shtool-2.0.6.tar.gz" unstable="none">
  +	stable="shtool-2.0.7.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat May 19 21:56:19 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 44C66753075; Sat, 19 May 2007 21:56:19 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog devtool.conf
Message-Id: <20070519195619.44C66753075@mail.ossp.org>
Date: Sat, 19 May 2007 21:56:19 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-May-2007 21:56:19
  Branch: HEAD                             Handle: 2007051920561800

  Modified files:
    ossp-pkg/uuid           ChangeLog devtool.conf

  Log:
    Upgrade build environment to GNU shtool 2.0.7

  Summary:
    Revision    Changes     Path
    1.145       +4  -1      ossp-pkg/uuid/ChangeLog
    1.34        +1  -1      ossp-pkg/uuid/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.144 -r1.145 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	19 May 2007 19:30:34 -0000	1.144
  +++ ossp-pkg/uuid/ChangeLog	19 May 2007 19:56:18 -0000	1.145
  @@ -11,7 +11,10 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 1.5.1 and 1.6.0 (31-Jul-2006 to 05-Oct-2006)
  +  Changes between 1.5.1 and 1.6.0 (31-Jul-2006 to 19-May-2006)
  +
  +   o Upgrade build environment to GNU shtool 2.0.7
  +     [Ralf S. Engelschall]
   
      o Make GNU autoconf procedure of PHP binding more robust by using
        -Wl,-Bsymbolic only on platforms where uuid_create(3) actually
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 devtool.conf
  --- ossp-pkg/uuid/devtool.conf	20 Nov 2006 20:11:48 -0000	1.33
  +++ ossp-pkg/uuid/devtool.conf	19 May 2007 19:56:18 -0000	1.34
  @@ -3,7 +3,7 @@
   ##
   
   %autogen
  -    @autogen shtool   2.0.6  "2.0.*" all
  +    @autogen shtool   2.0.7  "2.0.*" all
       @autogen libtool  1.5.22 "1.5*"
       @autogen autoconf 2.61   "2.6[0-9]*"
   
  @@ .

From ossp-cvs-owner@ossp.org  Sat May 19 21:59:57 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id E883F752905; Sat, 19 May 2007 21:59:56 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog Makefile.in uuid-config.in
Message-Id: <20070519195956.E883F752905@mail.ossp.org>
Date: Sat, 19 May 2007 21:59:56 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-May-2007 21:59:56
  Branch: HEAD                             Handle: 2007051920595600

  Modified files:
    ossp-pkg/uuid           ChangeLog Makefile.in uuid-config.in

  Log:
    Expand unused "datarootdir" in Makefile.in and uuid-config.in to
    make newer GNU autoconf versions happy.

  Summary:
    Revision    Changes     Path
    1.146       +4  -0      ossp-pkg/uuid/ChangeLog
    1.44        +1  -0      ossp-pkg/uuid/Makefile.in
    1.7         +1  -0      ossp-pkg/uuid/uuid-config.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.145 -r1.146 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	19 May 2007 19:56:18 -0000	1.145
  +++ ossp-pkg/uuid/ChangeLog	19 May 2007 19:59:56 -0000	1.146
  @@ -13,6 +13,10 @@
   
     Changes between 1.5.1 and 1.6.0 (31-Jul-2006 to 19-May-2006)
   
  +   o Expand unused "datarootdir" in Makefile.in and uuid-config.in to
  +     make newer GNU autoconf versions happy.
  +     [Ralf S. Engelschall]
  +
      o Upgrade build environment to GNU shtool 2.0.7
        [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.43 -r1.44 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	1 Jan 2007 18:14:54 -0000	1.43
  +++ ossp-pkg/uuid/Makefile.in	19 May 2007 19:59:56 -0000	1.44
  @@ -38,6 +38,7 @@
   DESTDIR     =
   prefix      = @prefix@
   exec_prefix = @exec_prefix@
  +datarootdir = @datarootdir@
   bindir      = @bindir@
   libdir      = @libdir@
   includedir  = @includedir@
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid-config.in
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 uuid-config.in
  --- ossp-pkg/uuid/uuid-config.in	1 Jan 2007 18:14:54 -0000	1.6
  +++ ossp-pkg/uuid/uuid-config.in	19 May 2007 19:59:56 -0000	1.7
  @@ -33,6 +33,7 @@
   
   prefix="@prefix@"
   exec_prefix="@exec_prefix@"
  +datarootdir="@datarootdir@"
   
   uuid_prefix="$prefix"
   uuid_exec_prefix="$exec_prefix"
  @@ .

From ossp-cvs-owner@ossp.org  Sat May 19 22:00:48 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 7CC6D753079; Sat, 19 May 2007 22:00:48 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog README ossp-pkg/uuid/perl/ uuid.p...
Message-Id: <20070519200048.7CC6D753079@mail.ossp.org>
Date: Sat, 19 May 2007 22:00:48 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   19-May-2007 22:00:48
  Branch: HEAD                             Handle: 2007051921004601

  Modified files:
    ossp-pkg/uuid           ChangeLog README uuid_vers.h
    ossp-pkg/uuid/perl      uuid.pm uuid_compat.pm

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.147       +1  -1      ossp-pkg/uuid/ChangeLog
    1.44        +1  -1      ossp-pkg/uuid/README
    1.22        +1  -1      ossp-pkg/uuid/perl/uuid.pm
    1.13        +1  -1      ossp-pkg/uuid/perl/uuid_compat.pm
    1.27        +9  -9      ossp-pkg/uuid/uuid_vers.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.146 -r1.147 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	19 May 2007 19:59:56 -0000	1.146
  +++ ossp-pkg/uuid/ChangeLog	19 May 2007 20:00:46 -0000	1.147
  @@ -11,7 +11,7 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 1.5.1 and 1.6.0 (31-Jul-2006 to 19-May-2006)
  +  Changes between 1.5.1 and 1.6.0 (31-Jul-2006 to 19-May-2007)
   
      o Expand unused "datarootdir" in Makefile.in and uuid-config.in to
        make newer GNU autoconf versions happy.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.43 -r1.44 README
  --- ossp-pkg/uuid/README	1 Jan 2007 18:14:54 -0000	1.43
  +++ ossp-pkg/uuid/README	19 May 2007 20:00:46 -0000	1.44
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
   
     OSSP uuid - Universally Unique Identifier
  -  Version 1.5.1 (31-Jul-2006)
  +  Version 1.6.0 (19-May-2007)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.pm
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 uuid.pm
  --- ossp-pkg/uuid/perl/uuid.pm	1 Jan 2007 18:14:57 -0000	1.21
  +++ ossp-pkg/uuid/perl/uuid.pm	19 May 2007 20:00:47 -0000	1.22
  @@ -118,7 +118,7 @@
   use Exporter;
   
   #   API version
  -our $VERSION = do { my @v = ('1.5.1' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
  +our $VERSION = do { my @v = ('1.6.0' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
   
   #   API inheritance
   our @ISA = qw(Exporter);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid_compat.pm
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 uuid_compat.pm
  --- ossp-pkg/uuid/perl/uuid_compat.pm	1 Jan 2007 18:14:57 -0000	1.12
  +++ ossp-pkg/uuid/perl/uuid_compat.pm	19 May 2007 20:00:47 -0000	1.13
  @@ -42,7 +42,7 @@
   our @ISA     = qw(Exporter);
   our @EXPORT  = qw(NameSpace_DNS NameSpace_OID NameSpace_URL NameSpace_X500);
   
  -our $VERSION = do { my @v = ('1.5.1' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
  +our $VERSION = do { my @v = ('1.6.0' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
   
   sub new {
       my $class = shift;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_vers.h
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 uuid_vers.h
  --- ossp-pkg/uuid/uuid_vers.h	31 Jul 2006 12:45:08 -0000	1.26
  +++ ossp-pkg/uuid/uuid_vers.h	19 May 2007 20:00:47 -0000	1.27
  @@ -8,7 +8,7 @@
   #ifndef _UUID_VERS_H_
   #define _UUID_VERS_H_
   
  -#define _UUID_VERSION 0x105201
  +#define _UUID_VERSION 0x106200
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _UUID_VERS_H_AS_HEADER_
   
   _uuid_version_t _uuid_version = {
  -    0x105201,
  -    "1.5.1",
  -    "1.5.1 (31-Jul-2006)",
  -    "This is OSSP uuid, Version 1.5.1 (31-Jul-2006)",
  -    "OSSP uuid 1.5.1 (31-Jul-2006)",
  -    "OSSP uuid/1.5.1",
  -    "@(#)OSSP uuid 1.5.1 (31-Jul-2006)",
  -    "$Id: OSSP uuid 1.5.1 (31-Jul-2006) $"
  +    0x106200,
  +    "1.6.0",
  +    "1.6.0 (19-May-2007)",
  +    "This is OSSP uuid, Version 1.6.0 (19-May-2007)",
  +    "OSSP uuid 1.6.0 (19-May-2007)",
  +    "OSSP uuid/1.6.0",
  +    "@(#)OSSP uuid 1.6.0 (19-May-2007)",
  +    "$Id: OSSP uuid 1.6.0 (19-May-2007) $"
   };
   
   #endif /* _UUID_VERS_H_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Sat May 19 22:05:39 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 87F0B753075; Sat, 19 May 2007 22:05:38 +0200 (CEST)
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20070519200538.87F0B753075@mail.ossp.org>
Date: Sat, 19 May 2007 22:05:38 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   OSSP Project Master
  Root:   /v/ossp/cvs                      Email:  ossp@ossp.org
  Module: ossp-web                         Date:   19-May-2007 22:05:37
  Branch: HEAD                             Handle: 2007051921053502

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/uuid   index.wml

  Log:
    release OSSP uuid 1.6.0

  Summary:
    Revision    Changes     Path
    1.172       +2  -1      ossp-web/new/news.txt
    1.136       +1  -1      ossp-web/pkg/lib/index.wml
    1.32        +2  -2      ossp-web/pkg/lib/uuid/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.171 -r1.172 news.txt
  --- ossp-web/new/news.txt	19 May 2007 19:39:47 -0000	1.171
  +++ ossp-web/new/news.txt	19 May 2007 20:05:35 -0000	1.172
  @@ -1,4 +1,5 @@
  -19-May-2007: Released T<OSSP shtool> 2.0.7
  +19-May-2007: Released L<OSSP uuid> 1.6.0
  +19-May-2007: Released T<GNU shtool> 2.0.7
   13-Apr-2007: Released T<OSSP ase> 0.3.1
   13-Apr-2007: Released T<OSSP ase> 0.3.0
   06-Apr-2007: Released T<OSSP ase> 0.2.1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.135 -r1.136 index.wml
  --- ossp-web/pkg/lib/index.wml	8 Feb 2007 09:43:21 -0000	1.135
  +++ ossp-web/pkg/lib/index.wml	19 May 2007 20:05:37 -0000	1.136
  @@ -33,7 +33,7 @@
   			done=100 stable=1.1.3 unstable=none>
     <pkg_item name="uuid" longname="OSSP uuid" type="lib"
               desc="Universally Unique Identifier"
  -			done=100 stable=1.5.1 unstable=none>
  +			done=100 stable=1.6.0 unstable=none>
     <pkg_item name="val" longname="OSSP val" type="lib"
               desc="Value Access"
   			done=95 stable=none unstable=0.9.4>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/uuid/index.wml
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 index.wml
  --- ossp-web/pkg/lib/uuid/index.wml	31 Jul 2006 12:47:56 -0000	1.31
  +++ ossp-web/pkg/lib/uuid/index.wml	19 May 2007 20:05:37 -0000	1.32
  @@ -48,7 +48,7 @@
   
   <pkg_status
       name="uuid" assign="rse"
  -    stable="1.5.1"    stable_date="31-Jul-2006"
  +    stable="1.6.0"    stable_date="19-May-2007"
       unstable="none" unstable_date="none"
   	done=100>
   
  @@ -59,7 +59,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/uuid/
       directory=$(FTP_ROOT_DIR)/pkg/lib/uuid/
       files="uuid-[0-9.]*.tar.gz" 
  -	stable="uuid-1\.5\.1\.tar\.gz" unstable="none">
  +	stable="uuid-1\.6\.0\.tar\.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu May 24 19:18:32 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id DA34F752FE1; Thu, 24 May 2007 19:18:31 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/due/.due/ due.calc.sh due.fs.sh due.recue.sh due....
Message-Id: <20070524171831.DA34F752FE1@mail.ossp.org>
Date: Thu, 24 May 2007 19:18:31 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   24-May-2007 19:18:31
  Branch: HEAD                             Handle: 2007052418183000

  Added files:
    ossp-pkg/due/.due       due.calc.sh due.rescue.sh
  Modified files:
    ossp-pkg/due/.due       due.fs.sh
  Removed files:
    ossp-pkg/due/.due       due.recue.sh

  Log:
    flush all pending changes

  Summary:
    Revision    Changes     Path
    1.1         +41 -0      ossp-pkg/due/.due/due.calc.sh
    1.3         +11 -0      ossp-pkg/due/.due/due.fs.sh
    1.3         +0  -84     ossp-pkg/due/.due/due.recue.sh
    1.1         +84 -0      ossp-pkg/due/.due/due.rescue.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.due/due.calc.sh
  ============================================================================
  $ cvs diff -u -r0 -r1.1 due.calc.sh
  --- /dev/null	2007-05-24 19:16:12 +0200
  +++ due.calc.sh	2007-05-24 19:18:30 +0200
  @@ -0,0 +1,41 @@
  +##
  +##  OSSP due - Dynamic User Environment
  +##  Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1994-2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP due, a dynamic user environment
  +##  which can found at http://www.ossp.org/pkg/tool/due/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  due.calc.sh: DUE module for command line calculations
  +##
  +
  +#   define {bin,oct,dec,hex}2{bin,oct,dec,hex} commands
  +_bases="bin:02 oct:08 dec:10 hex:16"
  +for _i in $_bases; do
  +    for _o in $_bases; do
  +        [ ".$_i" = ".$_o" ] && continue
  +        eval "${_i/:*/}2${_o/:*/} () {
  +            echo \"obase=${_o/*:/}; ibase=${_i/*:/}; \$1\" | bc -q
  +        }"
  +    done
  +done
  +unset _bases _i _o
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.due/due.fs.sh
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 due.fs.sh
  --- ossp-pkg/due/.due/due.fs.sh	24 Oct 2004 19:10:38 -0000	1.2
  +++ ossp-pkg/due/.due/due.fs.sh	24 May 2007 17:18:30 -0000	1.3
  @@ -45,3 +45,14 @@
   #   canonicalization of df(1) output
   alias df='command df -k'
   
  +#   convert between Unix/LF and Windows/CRLF
  +if type -P recode 2>/dev/null; then
  +    #   full charset conversion
  +    alias unix2win="recode ISO-8859-1..CP1252/CR-LF"
  +    alias win2unix="recode CP1252/CR-LF..ISO-8859-1"
  +elif type -P perl 2>/dev/null; then
  +    #   sufficient for at least CR/LF conversion
  +    alias unix2win="perl -p -i.orig -e 's/\r?\n/\r\n/sg;'"
  +    alias win2unix="perl -p -i.orig -e 's/\r\n/\n/sg;'"
  +fi
  +
  @@ .
  rm -f ossp-pkg/due/.due/due.recue.sh <<'@@ .'
  Index: ossp-pkg/due/.due/due.recue.sh
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/due/.due/due.rescue.sh
  ============================================================================
  $ cvs diff -u -r0 -r1.1 due.rescue.sh
  --- /dev/null	2007-05-24 19:16:12 +0200
  +++ due.rescue.sh	2007-05-24 19:18:30 +0200
  @@ -0,0 +1,84 @@
  +##
  +##  OSSP due - Dynamic User Environment
  +##  Copyright (c) 1994-2004 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1994-2004 The OSSP Project <http://www.ossp.org/>
  +##
  +##  This file is part of OSSP due, a dynamic user environment
  +##  which can found at http://www.ossp.org/pkg/tool/due/
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +##  SUCH DAMAGE.
  +##
  +##  due.rescue.sh: DUE module for rescue command
  +##
  +
  +#   system rescue facility
  +function rescue () {
  +    local cmd="$1"
  +    shift
  +    case "$cmd" in
  +        on )
  +            rescue_time="${1:-10}"
  +            echo "++ scheduling rescue through system reboot in ${rescue_time} minutes"
  +            case $OSTYPE in
  +                FreeBSD* )
  +                    echo "/sbin/shutdown -r now" | at -q r +${rescue_time} minutes >/dev/null
  +                    ;;
  +                Linux* )
  +                    echo "/sbin/shutdown -r now" | at -q r +${rescue_time} minutes >/dev/null
  +                    ;;
  +                SunOS* )
  +                    echo "/usr/sbin/shutdown -i6 -g0 -y" | at -q r now "+ ${rescue_time}minutes" >/dev/null
  +                    ;;
  +            esac
  +            ;;
  +        off )
  +            echo "++ cancelling rescue through system reboot"
  +            case $OSTYPE in
  +                FreeBSD* )
  +                    for id in `at -q r -l | grep -v "^Date" | awk '{ print $5; }'`; do
  +                        at -q r -d $id >/dev/null
  +                    done
  +                    ;;
  +                Linux* )
  +                    for id in `at -q r -l | awk '{ print $1; }'`; do
  +                        at -q r -d $id >/dev/null
  +                    done
  +                    ;;
  +                SunOS* )
  +                    for id in `at -q r -l | awk '{ print $1; }'`; do
  +                        at -r $id >/dev/null
  +                    done
  +                    ;;
  +            esac
  +            unset rescue_time
  +            ;;
  +        renew|new )
  +            echo "++ rescheduling rescue through system reboot in ${rescue_time} minutes"
  +            x=${rescue_time}
  +            rescue off >/dev/null || true
  +            rescue on ${x} >/dev/null
  +            ;;
  +        * )
  +            echo "Usage: rescue on [<minutes>]" 2>&1
  +            echo "Usage: rescue [re]new" 2>&1
  +            echo "Usage: rescue off" 2>&1
  +            ;;
  +    esac
  +}
  +
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jun  4 09:58:52 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 849D475291C; Mon,  4 Jun 2007 09:58:51 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog sh.platform
Message-Id: <20070604075851.849D475291C@mail.ossp.org>
Date: Mon,  4 Jun 2007 09:58:51 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Jun-2007 09:58:51
  Branch: HEAD                             Handle: 2007060408585000

  Modified files:
    ossp-pkg/shtool         ChangeLog sh.platform

  Log:
    Improve Mac OS X detection in "shtool plaform"

  Summary:
    Revision    Changes     Path
    1.234       +5  -0      ossp-pkg/shtool/ChangeLog
    1.19        +30 -5      ossp-pkg/shtool/sh.platform
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.233 -r1.234 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	19 May 2007 19:09:38 -0000	1.233
  +++ ossp-pkg/shtool/ChangeLog	4 Jun 2007 07:58:50 -0000	1.234
  @@ -9,6 +9,11 @@
   
    ChangeLog
   
  + Changes between 2.0.7 and 2.0.8 (19-May-2007 to xx-XXX-2007):
  +
  +   *) Improved Mac OS X detection in "shtool plaform".
  +      [Ralf S. Engelschall]
  +
    Changes between 2.0.6 and 2.0.7 (19-Apr-2006 to 19-May-2007):
   
      *) Upgrade build environment to GNU autoconf 2.61
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.platform
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 sh.platform
  --- ossp-pkg/shtool/sh.platform	19 May 2007 19:09:39 -0000	1.18
  +++ ossp-pkg/shtool/sh.platform	4 Jun 2007 07:58:50 -0000	1.19
  @@ -398,6 +398,7 @@
   
       #   IBM AIX
       *:AIX:* )
  +        #   determine architecture
           cpu_arch=rs6000
           if [ -x /usr/sbin/lsdev -a -x /usr/sbin/lsattr ]; then
               cpu_id=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
  @@ -419,6 +420,7 @@
           AT="${cpu_arch}"
           AP="${AT}"
           AC="${AP}"
  +        #   determine system
           ST="[IBM ]<AIX >${os_level}"
           SP="${ST}"
           case "${os_level}" in
  @@ -427,9 +429,10 @@
           esac
           ;;
   
  -    #   Apple MacOS X Darwin
  +    #   Apple Mac OS X (Darwin)
       *:Darwin:* )
  -        AT=`uname -p`
  +        #   determine architecture
  +        AT="`uname -p`"
           case "${AT}" in
               powerpc ) AT="PPC" ;;
           esac
  @@ -438,9 +441,31 @@
           case "${AC}" in
               i?86 ) AC="iX86" ;;
           esac
  -        ST="[Apple ]${UNAME_SYSTEM} ${UNAME_RELEASE}"
  -        SP="${ST}"
  -        SC="4.4BSD/Mach3"
  +        #   determine system
  +        eval `echo "${UNAME_RELEASE}" |\
  +              sed -e 's/^/#/' \
  +                  -e 's/^#\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*$/v1="\1"; v2="\2"; v3="\3"/' \
  +                  -e 's/^#\([0-9][0-9]*\)\.\([0-9][0-9]*\).*$/v1="\1"; v2="\2"/' \
  +                  -e 's/^#\([0-9][0-9]*\).*$/v1="\1"/' \
  +                  -e 's/^#.*$/v1="0"/'`
  +        ST="[Apple ]${UNAME_SYSTEM} <${v1}>${v2+.$v2}${v3+[.$v3]}"
  +        SP="$ST"
  +        v="`(sw_vers) 2>/dev/null | grep 'ProductVersion:' | sed -e 's/^ProductVersion: *//'`"
  +        if [ ".$v" != . ]; then
  +            #   use given Mac OS X product information
  +            SP="[Apple ]Mac OS X ${v}"
  +        else
  +            #   fetch Mac OS X product information manually
  +            for name in System Server; do
  +                if [ -f /System/Library/CoreServices/${name}Version.plist ]; then
  +                    v=`(defaults read "/System/Library/CoreServices/${name}Version" "ProductVersion") 2>/dev/null`
  +                    if [ ".$v" != . ]; then
  +                        SP="[Apple ]Mac OS X ${v}"
  +                    fi
  +                fi
  +            done
  +        fi
  +        SC="4.4BSD/Mach3.0"
           ;;
   
       #   TODO ...ADD YOUR NEW PLATFORM CHECK HERE... TODO
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jun  4 17:14:09 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id CDFCC752905; Mon,  4 Jun 2007 17:14:08 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ sh.platform
Message-Id: <20070604151408.CDFCC752905@mail.ossp.org>
Date: Mon,  4 Jun 2007 17:14:08 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Jun-2007 17:14:08
  Branch: HEAD                             Handle: 2007060416140800

  Modified files:
    ossp-pkg/shtool         sh.platform

  Log:
    improve Mac OS X detection again

  Summary:
    Revision    Changes     Path
    1.20        +15 -10     ossp-pkg/shtool/sh.platform
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.platform
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 sh.platform
  --- ossp-pkg/shtool/sh.platform	4 Jun 2007 07:58:50 -0000	1.19
  +++ ossp-pkg/shtool/sh.platform	4 Jun 2007 15:14:08 -0000	1.20
  @@ -442,29 +442,34 @@
               i?86 ) AC="iX86" ;;
           esac
           #   determine system
  +        unset v1; unset v2; unset v3
           eval `echo "${UNAME_RELEASE}" |\
                 sed -e 's/^/#/' \
                     -e 's/^#\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*$/v1="\1"; v2="\2"; v3="\3"/' \
                     -e 's/^#\([0-9][0-9]*\)\.\([0-9][0-9]*\).*$/v1="\1"; v2="\2"/' \
                     -e 's/^#\([0-9][0-9]*\).*$/v1="\1"/' \
                     -e 's/^#.*$/v1="0"/'`
  -        ST="[Apple ]${UNAME_SYSTEM} <${v1}>${v2+.$v2}${v3+[.$v3]}"
  +        ST="[Apple ]<${UNAME_SYSTEM} ${v1}>${v2+.$v2}${v3+[.$v3]}"
           SP="$ST"
  -        v="`(sw_vers) 2>/dev/null | grep 'ProductVersion:' | sed -e 's/^ProductVersion: *//'`"
  -        if [ ".$v" != . ]; then
  -            #   use given Mac OS X product information
  -            SP="[Apple ]Mac OS X ${v}"
  -        else
  -            #   fetch Mac OS X product information manually
  +        v="`(sw_vers) 2>/dev/null | grep 'ProductVersion:' | sed -e 's/^ProductVersion:[^0-9]*\([0-9][0-9.]*\).*$/\1/'`"
  +        if [ ".$v" = . ]; then
               for name in System Server; do
                   if [ -f /System/Library/CoreServices/${name}Version.plist ]; then
                       v=`(defaults read "/System/Library/CoreServices/${name}Version" "ProductVersion") 2>/dev/null`
  -                    if [ ".$v" != . ]; then
  -                        SP="[Apple ]Mac OS X ${v}"
  -                    fi
  +                    [ ".$v" != . ] && break
                   fi
               done
           fi
  +        if [ ".$v" != . ]; then
  +            unset v1; unset v2; unset v3
  +            eval `echo "${v}" |\
  +                  sed -e 's/^/#/' \
  +                      -e 's/^#\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*$/v1="\1"; v2="\2"; v3="\3"/' \
  +                      -e 's/^#\([0-9][0-9]*\)\.\([0-9][0-9]*\).*$/v1="\1"; v2="\2"/' \
  +                      -e 's/^#\([0-9][0-9]*\).*$/v1="\1"/' \
  +                      -e 's/^#.*$/v1="0"/'`
  +            SP="[Apple ]<Mac OS X ${v1}>${v2+.$v2}${v3+[.$v3]}"
  +        fi
           SC="4.4BSD/Mach3.0"
           ;;
   
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jun  4 18:22:41 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 2A0CC75292F; Mon,  4 Jun 2007 18:22:41 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ sh.platform
Message-Id: <20070604162241.2A0CC75292F@mail.ossp.org>
Date: Mon,  4 Jun 2007 18:22:41 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Jun-2007 18:22:41
  Branch: HEAD                             Handle: 2007060417224000

  Modified files:
    ossp-pkg/shtool         sh.platform

  Log:
    show a two-digits version for MacOS X, so concise and regular product
    is now the same

  Summary:
    Revision    Changes     Path
    1.21        +1  -1      ossp-pkg/shtool/sh.platform
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.platform
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 sh.platform
  --- ossp-pkg/shtool/sh.platform	4 Jun 2007 15:14:08 -0000	1.20
  +++ ossp-pkg/shtool/sh.platform	4 Jun 2007 16:22:40 -0000	1.21
  @@ -468,7 +468,7 @@
                         -e 's/^#\([0-9][0-9]*\)\.\([0-9][0-9]*\).*$/v1="\1"; v2="\2"/' \
                         -e 's/^#\([0-9][0-9]*\).*$/v1="\1"/' \
                         -e 's/^#.*$/v1="0"/'`
  -            SP="[Apple ]<Mac OS X ${v1}>${v2+.$v2}${v3+[.$v3]}"
  +            SP="[Apple ]Mac OS X ${v1}${v2+.$v2}${v3+[.$v3]}"
           fi
           SC="4.4BSD/Mach3.0"
           ;;
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jun  4 21:42:12 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 9C39D7529C6; Mon,  4 Jun 2007 21:42:11 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog sh.platform
Message-Id: <20070604194211.9C39D7529C6@mail.ossp.org>
Date: Mon,  4 Jun 2007 21:42:11 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Jun-2007 21:42:11
  Branch: HEAD                             Handle: 2007060420421100

  Modified files:
    ossp-pkg/shtool         ChangeLog sh.platform

  Log:
    Detect CentOS as a RHEL clone instead of a RHL clone.

  Summary:
    Revision    Changes     Path
    1.235       +3  -0      ossp-pkg/shtool/ChangeLog
    1.22        +1  -1      ossp-pkg/shtool/sh.platform
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.234 -r1.235 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	4 Jun 2007 07:58:50 -0000	1.234
  +++ ossp-pkg/shtool/ChangeLog	4 Jun 2007 19:42:11 -0000	1.235
  @@ -11,6 +11,9 @@
   
    Changes between 2.0.7 and 2.0.8 (19-May-2007 to xx-XXX-2007):
   
  +   *) Detect CentOS as a RHEL clone instead of a RHL clone.
  +      [Ralf S. Engelschall]
  +
      *) Improved Mac OS X detection in "shtool plaform".
         [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.platform
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 sh.platform
  --- ossp-pkg/shtool/sh.platform	4 Jun 2007 16:22:40 -0000	1.21
  +++ ossp-pkg/shtool/sh.platform	4 Jun 2007 19:42:11 -0000	1.22
  @@ -229,7 +229,7 @@
                          -e 's/^#.*$//'`
                   case "`util_lower ${n}`" in
                       redhat )
  -                        if [ ".`grep 'Red Hat Enterprise Linux' /etc/${tagfile}`" != . ]; then
  +                        if [ ".`egrep '(Red Hat Enterprise Linux|CentOS)' /etc/${tagfile}`" != . ]; then
                               n="<R>ed <H>at <E>nterprise <L>inux"
                           else
                               n="<R>ed <H>at <L>inux"
  @@ .

From ossp-cvs-owner@ossp.org  Mon Jun  4 21:45:58 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 68A3B752FE1; Mon,  4 Jun 2007 21:45:58 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ sh.platform
Message-Id: <20070604194558.68A3B752FE1@mail.ossp.org>
Date: Mon,  4 Jun 2007 21:45:58 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Jun-2007 21:45:58
  Branch: HEAD                             Handle: 2007060420455800

  Modified files:
    ossp-pkg/shtool         sh.platform

  Log:
    use latest Novell SUSE branding

  Summary:
    Revision    Changes     Path
    1.23        +1  -1      ossp-pkg/shtool/sh.platform
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.platform
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 sh.platform
  --- ossp-pkg/shtool/sh.platform	4 Jun 2007 19:42:11 -0000	1.22
  +++ ossp-pkg/shtool/sh.platform	4 Jun 2007 19:45:58 -0000	1.23
  @@ -238,7 +238,7 @@
                       debian             ) n="Debian[ GNU/Linux]"        ;;
                       ubuntu             ) n="Ubuntu[ GNU/Linux]"        ;;
                       fedora             ) n="<Fedora> Core[ GNU/Linux]" ;;
  -                    suse               ) n="SuSE[ Linux]"              ;;
  +                    suse               ) n="[Novell ]SUSE[ Linux]"     ;;
                       mandrake*|mandriva ) n="Mandriva[ Linux]"          ;;
                       gentoo             ) n="Gentoo[ GNU/Linux]"        ;;
                       slackware          ) n="Slackware[ Linux]"         ;;
  @@ .

From ossp-cvs-owner@ossp.org  Tue Jun  5 18:52:34 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id D2A1275292F; Tue,  5 Jun 2007 18:52:33 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ sh.platform
Message-Id: <20070605165233.D2A1275292F@mail.ossp.org>
Date: Tue,  5 Jun 2007 18:52:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Jun-2007 18:52:33
  Branch: HEAD                             Handle: 2007060517523300

  Modified files:
    ossp-pkg/shtool         sh.platform

  Log:
    already map product to iX86, not just class

  Summary:
    Revision    Changes     Path
    1.24        +3  -3      ossp-pkg/shtool/sh.platform
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.platform
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 sh.platform
  --- ossp-pkg/shtool/sh.platform	4 Jun 2007 19:45:58 -0000	1.23
  +++ ossp-pkg/shtool/sh.platform	5 Jun 2007 16:52:33 -0000	1.24
  @@ -437,10 +437,10 @@
               powerpc ) AT="PPC" ;;
           esac
           AP="${AT}"
  -        AC="${AP}"
  -        case "${AC}" in
  -            i?86 ) AC="iX86" ;;
  +        case "${AP}" in
  +            i?86 ) AP="iX86" ;;
           esac
  +        AC="${AP}"
           #   determine system
           unset v1; unset v2; unset v3
           eval `echo "${UNAME_RELEASE}" |\
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jun  8 15:55:13 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 590B9752FC1; Fri,  8 Jun 2007 15:55:12 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ ChangeLog devtool.conf l2_ut_format.c
Message-Id: <20070608135512.590B9752FC1@mail.ossp.org>
Date: Fri,  8 Jun 2007 15:55:12 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Jun-2007 15:55:12
  Branch: HEAD                             Handle: 2007060814551100

  Modified files:
    ossp-pkg/l2             ChangeLog devtool.conf l2_ut_format.c

  Log:
    - Upgraded build environment to GNU shtool 2.0.7
    - Do not use literal "(NULL)" on pointer comparisons.

  Summary:
    Revision    Changes     Path
    1.35        +7  -1      ossp-pkg/l2/ChangeLog
    1.24        +1  -1      ossp-pkg/l2/devtool.conf
    1.14        +2  -1      ossp-pkg/l2/l2_ut_format.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 ChangeLog
  --- ossp-pkg/l2/ChangeLog	23 Mar 2007 08:09:27 -0000	1.34
  +++ ossp-pkg/l2/ChangeLog	8 Jun 2007 13:55:11 -0000	1.35
  @@ -9,7 +9,13 @@
     ChangeLog
     =========
   
  -  Changes between 0.9.12 and 0.9.13 (02-Mar-2005 to 23-Mar-2007)
  +  Changes between 0.9.12 and 0.9.13 (02-Mar-2005 to 08-Jun-2007)
  +
  +    *) Upgraded build environment to GNU shtool 2.0.7
  +       [Ralf S. Engelschall <rse@engelschall.com>]
  +
  +    *) Do not use literal "(NULL)" on pointer comparisons.
  +       [Ralf S. Engelschall <rse@engelschall.com>]
   
       *) Make newer GNU autoconf happy by providing "datarootdir".
          [Ralf S. Engelschall <rse@engelschall.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 devtool.conf
  --- ossp-pkg/l2/devtool.conf	2 Mar 2007 15:09:43 -0000	1.23
  +++ ossp-pkg/l2/devtool.conf	8 Jun 2007 13:55:11 -0000	1.24
  @@ -42,7 +42,7 @@
       shtool subst -e 's;#include "sa.h";#include "l2_ut_sa.h";' l2_ut_sa.c
   
   %autogen
  -    @autogen shtool   2.0.6  "2.0.*" echo fixperm install mkdir tarball version
  +    @autogen shtool   2.0.7  "2.0.*" echo fixperm install mkdir tarball version
       @autogen libtool  1.5.22 "1.5*"
       @autogen autoconf 2.61   "2.6[0-9]*"
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_ut_format.c
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 l2_ut_format.c
  --- ossp-pkg/l2/l2_ut_format.c	3 Feb 2005 09:54:30 -0000	1.13
  +++ ossp-pkg/l2/l2_ut_format.c	8 Jun 2007 13:55:11 -0000	1.14
  @@ -125,7 +125,8 @@
   #ifndef TRUE
   #define TRUE (!FALSE)
   #endif
  -#define S_NULL          "(NULL)"
  +static char l2_util_fmt_null[] = "(NULL)";
  +#define S_NULL          l2_util_fmt_null
   #define S_NULL_LEN      6
   #define FLOAT_DIGITS    6
   #define EXPONENT_LENGTH 10
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jun  8 16:03:35 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id C7C48752FE1; Fri,  8 Jun 2007 16:03:34 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ README l2_version.c
Message-Id: <20070608140334.C7C48752FE1@mail.ossp.org>
Date: Fri,  8 Jun 2007 16:03:34 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Jun-2007 16:03:34
  Branch: HEAD                             Handle: 2007060815033400

  Modified files:
    ossp-pkg/l2             README l2_version.c

  Log:
    bump before release

  Summary:
    Revision    Changes     Path
    1.25        +1  -1      ossp-pkg/l2/README
    1.22        +9  -9      ossp-pkg/l2/l2_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/README
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 README
  --- ossp-pkg/l2/README	2 Mar 2007 16:33:15 -0000	1.24
  +++ ossp-pkg/l2/README	8 Jun 2007 14:03:34 -0000	1.25
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |_|_____|
   
     OSSP l2 -- Flexible Logging
  -  Version 0.9.12 (02-Mar-2007)
  +  Version 0.9.13 (08-Jun-2007)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/l2_version.c
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 l2_version.c
  --- ossp-pkg/l2/l2_version.c	2 Mar 2007 16:33:15 -0000	1.21
  +++ ossp-pkg/l2/l2_version.c	8 Jun 2007 14:03:34 -0000	1.22
  @@ -8,7 +8,7 @@
   #ifndef _L2_VERSION_C_
   #define _L2_VERSION_C_
   
  -#define L2_VERSION 0x00920C
  +#define L2_VERSION 0x00920D
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _L2_VERSION_C_AS_HEADER_
   
   l2_version_t l2_version = {
  -    0x00920C,
  -    "0.9.12",
  -    "0.9.12 (02-Mar-2007)",
  -    "This is OSSP l2, Version 0.9.12 (02-Mar-2007)",
  -    "OSSP l2 0.9.12 (02-Mar-2007)",
  -    "OSSP l2/0.9.12",
  -    "@(#)OSSP l2 0.9.12 (02-Mar-2007)",
  -    "$Id: l2_version.c,v 1.21 2007/03/02 16:33:15 thl Exp $"
  +    0x00920D,
  +    "0.9.13",
  +    "0.9.13 (08-Jun-2007)",
  +    "This is OSSP l2, Version 0.9.13 (08-Jun-2007)",
  +    "OSSP l2 0.9.13 (08-Jun-2007)",
  +    "OSSP l2/0.9.13",
  +    "@(#)OSSP l2 0.9.13 (08-Jun-2007)",
  +    "$Id: l2_version.c,v 1.22 2007/06/08 14:03:34 rse Exp $"
   };
   
   #endif /* _L2_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jun  8 16:11:26 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 0A278752FE1; Fri,  8 Jun 2007 16:11:26 +0200 (CEST)
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ index.wml ossp-we...
Message-Id: <20070608141126.0A278752FE1@mail.ossp.org>
Date: Fri,  8 Jun 2007 16:11:26 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   OSSP Project Master
  Root:   /v/ossp/cvs                      Email:  ossp@ossp.org
  Module: ossp-web                         Date:   08-Jun-2007 16:11:25
  Branch: HEAD                             Handle: 2007060815112401

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/l2     index.wml

  Log:
    release OSSP l2 0.9.13

  Summary:
    Revision    Changes     Path
    1.173       +1  -0      ossp-web/new/news.txt
    1.137       +1  -1      ossp-web/pkg/lib/index.wml
    1.15        +2  -2      ossp-web/pkg/lib/l2/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.172 -r1.173 news.txt
  --- ossp-web/new/news.txt	19 May 2007 20:05:35 -0000	1.172
  +++ ossp-web/new/news.txt	8 Jun 2007 14:11:24 -0000	1.173
  @@ -1,3 +1,4 @@
  +08-Jun-2007: Released L<OSSP l2> 0.9.13
   19-May-2007: Released L<OSSP uuid> 1.6.0
   19-May-2007: Released T<GNU shtool> 2.0.7
   13-Apr-2007: Released T<OSSP ase> 0.3.1
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.136 -r1.137 index.wml
  --- ossp-web/pkg/lib/index.wml	19 May 2007 20:05:37 -0000	1.136
  +++ ossp-web/pkg/lib/index.wml	8 Jun 2007 14:11:25 -0000	1.137
  @@ -48,7 +48,7 @@
   			done=95 stable=none unstable=0.9.12>
     <pkg_item name="l2" longname="OSSP l2" type="lib"
               desc="Flexible Logging"
  -			done=95 stable=none unstable=0.9.11>
  +			done=95 stable=none unstable=0.9.13>
     <pkg_item name="al" longname="OSSP al" type="lib"
               desc="Assembly Line"
   			done=95 stable=none unstable=0.9.3>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/l2/index.wml
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 index.wml
  --- ossp-web/pkg/lib/l2/index.wml	3 Oct 2005 09:39:10 -0000	1.14
  +++ ossp-web/pkg/lib/l2/index.wml	8 Jun 2007 14:11:25 -0000	1.15
  @@ -40,7 +40,7 @@
   <pkg_status
       name="l2" assign="rse"
       stable="none"    stable_date="none"
  -    unstable="0.9.11" unstable_date="03-Oct-2005"
  +    unstable="0.9.13" unstable_date="08-Jun-2007"
   	done=95>
   
   <h2>Source</h2>
  @@ -50,7 +50,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/l2/
       directory=$(FTP_ROOT_DIR)/pkg/lib/l2/
       files="l2-*.tar.gz" 
  -	stable="none" unstable="l2-0.9.11.tar.gz">
  +	stable="none" unstable="l2-0.9.13.tar.gz">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jul  8 11:24:30 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 2BCCC752A0D; Sun,  8 Jul 2007 11:24:30 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/iselect/ ChangeLog VERSIONS
Message-Id: <20070708092430.2BCCC752A0D@mail.ossp.org>
Date: Sun,  8 Jul 2007 11:24:30 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Jul-2007 11:24:30
  Branch: HEAD                             Handle: 2007070810242900

  Modified files:
    ossp-pkg/iselect        ChangeLog VERSIONS

  Log:
    flush pending changes

  Summary:
    Revision    Changes     Path
    1.6         +1  -1      ossp-pkg/iselect/ChangeLog
    1.3         +1  -0      ossp-pkg/iselect/VERSIONS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ChangeLog
  --- ossp-pkg/iselect/ChangeLog	5 Oct 2005 18:19:42 -0000	1.5
  +++ ossp-pkg/iselect/ChangeLog	8 Jul 2007 09:24:29 -0000	1.6
  @@ -2,7 +2,7 @@
     C h a n g e L o g   o f   i S e l e c t
     ___________________________________________________________________________
   
  -  Changes between 1.3.0 and 1.4.0
  +  Changes between 1.3.0 and 1.3.1
     -------------------------------
     051005 o upgraded GNU shtool from 2.0.1 to 2.0.3
            o adjusted year range in copyright messages
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/VERSIONS
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 VERSIONS
  --- ossp-pkg/iselect/VERSIONS	11 Sep 2004 15:18:49 -0000	1.2
  +++ ossp-pkg/iselect/VERSIONS	8 Jul 2007 09:24:29 -0000	1.3
  @@ -10,4 +10,5 @@
     1.1.0  19980419
     1.2.0  19990331
     1.3.0  20040406
  +  1.3.1  20051005
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jul  8 11:25:30 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id C1C7F752A0D; Sun,  8 Jul 2007 11:25:30 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/iselect/etc/ shtool
Message-Id: <20070708092530.C1C7F752A0D@mail.ossp.org>
Date: Sun,  8 Jul 2007 11:25:30 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Jul-2007 11:25:30
  Branch: HEAD                             Handle: 2007070810252900

  Modified files:
    ossp-pkg/iselect/etc    shtool

  Log:
    upgrade shtool

  Summary:
    Revision    Changes     Path
    1.4         +98 -59     ossp-pkg/iselect/etc/shtool
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/etc/shtool
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 shtool
  --- ossp-pkg/iselect/etc/shtool	5 Oct 2005 18:04:52 -0000	1.3
  +++ ossp-pkg/iselect/etc/shtool	8 Jul 2007 09:25:29 -0000	1.4
  @@ -1,12 +1,12 @@
   #!/bin/sh
   ##
   ##  GNU shtool -- The GNU Portable Shell Tool
  -##  Copyright (c) 1994-2005 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1994-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  See http://www.gnu.org/software/shtool/ for more information.
   ##  See ftp://ftp.gnu.org/gnu/shtool/ for latest version.
   ##
  -##  Version:  2.0.3 (02-Oct-2005)
  +##  Version:  2.0.7 (19-May-2007)
   ##  Contents: all available modules
   ##
   
  @@ -59,17 +59,42 @@
   ##    path       Deal with program paths
   ##
   
  +#   maximum Bourne-Shell compatibility
  +if [ ".$ZSH_VERSION" != . ] && (emulate sh) >/dev/null 2>&1; then
  +    #   reconfigure zsh(1)
  +    emulate sh
  +    NULLCMD=:
  +    alias -g '${1+"$@"}'='"$@"'
  +elif [ ".$BASH_VERSION" != . ] && (set -o posix) >/dev/null 2>&1; then
  +    #   reconfigure bash(1)
  +    set -o posix
  +fi
  +
  +#   maximum independence of NLS nuisances
  +for var in \
  +    LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
  +    LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
  +    LC_TELEPHONE LC_TIME
  +do
  +    if (set +x; test -z "`(eval $var=C; export $var) 2>&1`"); then
  +        eval $var=C; export $var
  +    else
  +        unset $var
  +    fi
  +done
  +
  +#   initial command line handling
   if [ $# -eq 0 ]; then
       echo "$0:Error: invalid command line" 1>&2
       echo "$0:Hint:  run \`$0 -h' for usage" 1>&2
       exit 1
   fi
   if [ ".$1" = ".-h" ] || [ ".$1" = ".--help" ]; then
  -    echo "This is GNU shtool, version 2.0.3 (02-Oct-2005)"
  -    echo "Copyright (c) 1994-2005 Ralf S. Engelschall <rse@engelschall.com>"
  -    echo "Report bugs to <bug-shtool@gnu.org>"
  +    echo "This is GNU shtool, version 2.0.7 (19-May-2007)"
  +    echo 'Copyright (c) 1994-2007 Ralf S. Engelschall <rse@engelschall.com>'
  +    echo 'Report bugs to <bug-shtool@gnu.org>'
       echo ''
  -    echo "Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]"
  +    echo 'Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]'
       echo ''
       echo 'Available global <options>:'
       echo '  -v, --version   display shtool version information'
  @@ -132,7 +157,7 @@
       exit 0
   fi
   if [ ".$1" = ".-v" ] || [ ".$1" = ".--version" ]; then
  -    echo "GNU shtool 2.0.3 (02-Oct-2005)"
  +    echo "GNU shtool 2.0.7 (19-May-2007)"
       exit 0
   fi
   if [ ".$1" = ".-r" ] || [ ".$1" = ".--recreate" ]; then
  @@ -314,7 +339,7 @@
           opt_d=""
           opt_u=""
           opt_g=""
  -        opt_e="CVS,\\.cvsignore,\\.[oa]\$"
  +        opt_e="CVS,\\.cvsignore,\\.svn,\\.[oa]\$"
           ;;
       subst )
           str_tool="subst"
  @@ -622,7 +647,7 @@
   echo )
       ##
       ##  echo -- Print string with optional construct expansion
  -    ##  Copyright (c) 1998-2005 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1998-2007 Ralf S. Engelschall <rse@engelschall.com>
       ##
   
       text="$*"
  @@ -743,11 +768,14 @@
                           userid=`grep "^${username}:" /etc/passwd 2>/dev/null | \
                                   sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'`
                           if [ ".$userid" = . ]; then
  -                            userid=`(ypcat passwd) 2>/dev/null |
  -                                    grep "^${username}:" | \
  -                                    sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'`
  +                            userid=`(ypmatch "${username}" passwd; nismatch "${username}" passwd) 2>/dev/null | \
  +                                    sed -e 'q' | sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'`
                               if [ ".$userid" = . ]; then
  -                                userid='?'
  +                                userid=`(nidump passwd . | grep "^${username}:") 2>/dev/null | \
  +                                        sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'`
  +                                if [ ".$userid" = . ]; then
  +                                    userid='?'
  +                                fi
                               fi
                           fi
                       fi
  @@ -772,10 +800,14 @@
                       groupid=`grep "^${username}:" /etc/passwd 2>/dev/null | \
                                sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
                       if [ ".$groupid" = . ]; then
  -                        groupid=`(ypcat passwd) 2>/dev/null | grep "^${username}:" | \
  -                                 sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
  +                        groupid=`(ypmatch "${username}" passwd; nismatch "${username}" passwd) 2>/dev/null | \
  +                                 sed -e 'q' | sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
                           if [ ".$groupid" = . ]; then
  -                            groupid='?'
  +                            groupid=`(nidump passwd . | grep "^${username}:") 2>/dev/null | \
  +                                     sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
  +                            if [ ".$groupid" = . ]; then
  +                                groupid='?'
  +                            fi
                           fi
                       fi
                   fi
  @@ -800,11 +832,16 @@
                       groupname=`grep "^[^:]*:[^:]*:${groupid}:" /etc/group 2>/dev/null | \
                                  sed -e 's/:.*$//'`
                       if [ ".$groupname" = . ]; then
  -                        groupname=`(ypcat group) 2>/dev/null | \
  -                                   grep "^[^:]*:[^:]*:${groupid}:" | \
  +                        groupname=`(ypcat group; niscat group) 2>/dev/null | \
  +                                   sed -e 'q' | grep "^[^:]*:[^:]*:${groupid}:" | \
                                      sed -e 's/:.*$//'`
                           if [ ".$groupname" = . ]; then
  -                            groupname='?'
  +                            groupname=`(nidump group .) 2>/dev/null | \
  +                                       grep "^[^:]*:[^:]*:${groupid}:" | \
  +                                       sed -e 's/:.*$//'`
  +                            if [ ".$groupname" = . ]; then
  +                                groupname='?'
  +                            fi
                           fi
                       fi
                   fi
  @@ -921,7 +958,7 @@
       ##
       ##  mdate -- Pretty-print modification time of a file or dir
       ##  Copyright (c) 1995-1997 Free Software Foundation, Inc.
  -    ##  Copyright (c) 1998-2005 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1998-2007 Ralf S. Engelschall <rse@engelschall.com>
       ##
   
       fod="$1"
  @@ -937,11 +974,6 @@
           shtool_exit 1
       fi
   
  -    #   prevent "date" giving response in another language
  -    LANG=C;    export LANG
  -    LC_ALL=C;  export LC_ALL
  -    LC_TIME=C; export LC_TIME
  -
       #   GNU ls changes its time format in response to the TIME_STYLE
       #   variable. Since we cannot assume "unset" works, revert this
       #   variable to its documented default.
  @@ -1054,7 +1086,7 @@
   table )
       ##
       ##  table -- Pretty-print a field-separated list as a table
  -    ##  Copyright (c) 1998-2005 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1998-2007 Ralf S. Engelschall <rse@engelschall.com>
       ##
   
       if [ $opt_c -gt 4 ]; then
  @@ -1119,7 +1151,7 @@
   prop )
       ##
       ##  prop -- Display progress with a running propeller
  -    ##  Copyright (c) 1998-2005 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1998-2007 Ralf S. Engelschall <rse@engelschall.com>
       ##
   
       perl=''
  @@ -1165,7 +1197,7 @@
   move )
       ##
       ##  move -- Move files with simultaneous substitution
  -    ##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
       ##
   
       src="$1"
  @@ -1257,7 +1289,7 @@
   install )
       ##
       ##  install -- Install a program, script or datafile
  -    ##  Copyright (c) 1997-2005 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1997-2007 Ralf S. Engelschall <rse@engelschall.com>
       ##
   
       #   special case: "shtool install -d <dir> [...]" internally
  @@ -1343,12 +1375,12 @@
               if [ ".$opt_t" = .yes ]; then
                   echo "cp $src $dsttmp" 1>&2
               fi
  -            cp $src $dsttmp || shtool_exit $?
  +            cp "$src" "$dsttmp" || shtool_exit $?
           else
               if [ ".$opt_t" = .yes ]; then
                   echo "mv $src $dsttmp" 1>&2
               fi
  -            mv $src $dsttmp || shtool_exit $?
  +            mv "$src" "$dsttmp" || shtool_exit $?
           fi
   
           #   adjust the target file
  @@ -1359,7 +1391,7 @@
               do
                   sed="$sed -e '$e'"
               done
  -            cp $dsttmp $dsttmp.old
  +            cp "$dsttmp" "$dsttmp.old"
               chmod u+w $dsttmp
               eval "$sed <$dsttmp.old >$dsttmp" || shtool_exit $?
               rm -f $dsttmp.old
  @@ -1394,7 +1426,7 @@
           quick=no
           if [ ".$opt_C" = .yes ]; then
               if [ -r $dst ]; then
  -                if cmp -s $src $dst; then
  +                if cmp -s "$src" "$dst"; then
                       quick=yes
                   fi
               fi
  @@ -1420,7 +1452,7 @@
   mkdir )
       ##
       ##  mkdir -- Make one or more directories
  -    ##  Copyright (c) 1996-2005 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1996-2007 Ralf S. Engelschall <rse@engelschall.com>
       ##
   
       errstatus=0
  @@ -1508,7 +1540,7 @@
   mkln )
       ##
       ##  mkln -- Make link with calculation of relative paths
  -    ##  Copyright (c) 1998-2005 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1998-2007 Ralf S. Engelschall <rse@engelschall.com>
       ##
   
       #   determine source(s) and destination
  @@ -1613,12 +1645,17 @@
           #   determine source prefix which is the reverse directory
           #   step-up corresponding to the destination directory
           srcpre=""
  -
  -        isroot=0
  -        if [ ".$prefix" = . ] || [ ".$prefix" = ./ ]; then
  -            isroot=1
  -        fi
  -        if [ $oneisabs = 0 ] || [ $isroot = 0 ]; then
  +        allow_relative_srcpre=no
  +        if [ ".$prefix" != . ] && [ ".$prefix" != ./ ]; then
  +            allow_relative_srcpre=yes
  +        fi  
  +        if [ $oneisabs = 0 ]; then
  +            allow_relative_srcpre=yes
  +        fi  
  +        if [ ".$opt_s" != .yes ]; then
  +            allow_relative_srcpre=no
  +        fi  
  +        if [ ".$allow_relative_srcpre" = .yes ]; then
               pl="$dstdir/"
               OIFS="$IFS"; IFS='/'
               for pe in $pl; do
  @@ -1659,7 +1696,7 @@
   mkshadow )
       ##
       ##  mkshadow -- Make a shadow tree through symbolic links
  -    ##  Copyright (c) 1998-2005 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1998-2007 Ralf S. Engelschall <rse@engelschall.com>
       ##
   
       #   source and destination directory
  @@ -1777,7 +1814,7 @@
   fixperm )
       ##
       ##  fixperm -- Fix file permissions inside a source tree
  -    ##  Copyright (c) 1996-2005 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1996-2007 Ralf S. Engelschall <rse@engelschall.com>
       ##
   
       paths="$*"
  @@ -1834,7 +1871,7 @@
   rotate )
       ##
       ##  rotate -- Logfile rotation
  -    ##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 2001-2007 Ralf S. Engelschall <rse@engelschall.com>
       ##
   
       #   make sure we have at least one file to rotate
  @@ -2198,7 +2235,7 @@
   tarball )
       ##
       ##  tarball -- Roll distribution tarballs
  -    ##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
       ##
   
       srcs="$*"
  @@ -2362,7 +2399,7 @@
   subst )
       ##
       ##  subst -- Apply sed(1) substitution operations
  -    ##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 2001-2007 Ralf S. Engelschall <rse@engelschall.com>
       ##
   
       #   remember optional list of file(s)
  @@ -2523,7 +2560,7 @@
   platform )
       ##
       ##  platform -- Platform Identification Utility
  -    ##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 2003-2007 Ralf S. Engelschall <rse@engelschall.com>
       ##
   
       #   option post-processing
  @@ -2751,12 +2788,17 @@
               #   determine architecture
               AT="${UNAME_MACHINE}"
               case "${AT}" in
  -                i86pc ) AT="iX86" ;;
  +                i86pc )
  +                    AT="iX86"
  +                    case "`(/bin/isainfo -k) 2>&1`" in
  +                        amd64 ) AT="AMD64" ;;
  +                    esac
  +                    ;;
               esac
               AP="${AT}"
               case "${AP}" in
                   sun4[cdm] ) AP="SPARC32" ;;
  -                sun4u     ) AP="SPARC64" ;;
  +                sun4[uv]  ) AP="SPARC64" ;;
                   sun4*     ) AP="SPARC"   ;;
               esac
               AC="${AP}"
  @@ -3071,7 +3113,7 @@
   arx )
       ##
       ##  arx -- Extended archive command
  -    ##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
       ##
   
       ar_prg="$opt_C"
  @@ -3150,7 +3192,7 @@
   slo )
       ##
       ##  slo -- Separate linker options by library class
  -    ##  Copyright (c) 1998-2005 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1998-2007 Ralf S. Engelschall <rse@engelschall.com>
       ##
   
       DIFS="$IFS"
  @@ -3309,7 +3351,7 @@
   scpp )
       ##
       ##  scpp -- Sharing C Pre-Processor
  -    ##  Copyright (c) 1999-2005 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
       ##
   
       srcs="$*"
  @@ -3529,7 +3571,7 @@
   version )
       ##
       ##  version -- Maintain a version information file
  -    ##  Copyright (c) 1994-2005 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1994-2007 Ralf S. Engelschall <rse@engelschall.com>
       ##
   
       file="$1"
  @@ -3686,17 +3728,14 @@
           vGNU="${name} ${triple} (${tim})"
           vWeb="${name}/${triple}"
           vSCCS="@(#)${name} ${triple} (${tim})"
  -        vRCS="\$Id: shtool,v 1.3 2005/10/05 18:04:52 rse Exp ${name} ${triple} (${tim}) \$"
  +        vRCS="\$Id: shtool,v 1.4 2007/07/08 09:25:29 rse Exp ${name} ${triple} (${tim}) \$"
   
           #   determine string out of filename
           #   (do NOT try to optimize this in any way because of portability)
  -        filestr=`echo $file |\
  -                 tr 'abcdefghijklmnopqrstuvwxyz./%+' \
  -                    'ABCDEFGHIJKLMNOPQRSTUVWXYZ____' | sed -e 's/-/_/g'`
  +        filestr=`util_upper "$file" | tr './%+' '____' | sed -e 's/-/_/g'`
   
           #   generate uppercase prefix
  -        prefixupper=`echo $prefix |\
  -                     tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
  +        prefixupper=`util_upper "$prefix"`
   
           #   create the version file according the the selected language
           echo "new version: ${vLong}"
  @@ -3824,7 +3863,7 @@
   path )
       ##
       ##  path -- Deal with program paths
  -    ##  Copyright (c) 1998-2005 Ralf S. Engelschall <rse@engelschall.com>
  +    ##  Copyright (c) 1998-2007 Ralf S. Engelschall <rse@engelschall.com>
       ##
   
       namelist="$*"
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jul  8 11:28:12 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id BB253752A0D; Sun,  8 Jul 2007 11:28:12 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/iselect/ ChangeLog README configure configure.in ...
Message-Id: <20070708092812.BB253752A0D@mail.ossp.org>
Date: Sun,  8 Jul 2007 11:28:12 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Jul-2007 11:28:12
  Branch: HEAD                             Handle: 2007070810281100

  Modified files:
    ossp-pkg/iselect        ChangeLog README configure configure.in
                            iselect.pod iselect_browse.c iselect_browse.h
                            iselect_getopt.c iselect_getopt.h iselect_global.h
                            iselect_keys.c iselect_keys.h iselect_main.c
                            iselect_readme.c iselect_readme.txt
                            iselect_version.c

  Log:
    bump up version and copyright information

  Summary:
    Revision    Changes     Path
    1.7         +5  -0      ossp-pkg/iselect/ChangeLog
    1.6         +2  -2      ossp-pkg/iselect/README
    1.6         +1  -1      ossp-pkg/iselect/configure
    1.6         +1  -1      ossp-pkg/iselect/configure.in
    1.6         +1  -1      ossp-pkg/iselect/iselect.pod
    1.4         +1  -1      ossp-pkg/iselect/iselect_browse.c
    1.4         +1  -1      ossp-pkg/iselect/iselect_browse.h
    1.4         +1  -1      ossp-pkg/iselect/iselect_getopt.c
    1.4         +1  -1      ossp-pkg/iselect/iselect_getopt.h
    1.4         +1  -1      ossp-pkg/iselect/iselect_global.h
    1.5         +1  -1      ossp-pkg/iselect/iselect_keys.c
    1.4         +1  -1      ossp-pkg/iselect/iselect_keys.h
    1.4         +1  -1      ossp-pkg/iselect/iselect_main.c
    1.6         +1  -1      ossp-pkg/iselect/iselect_readme.c
    1.5         +2  -2      ossp-pkg/iselect/iselect_readme.txt
    1.6         +9  -9      ossp-pkg/iselect/iselect_version.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ChangeLog
  --- ossp-pkg/iselect/ChangeLog	8 Jul 2007 09:24:29 -0000	1.6
  +++ ossp-pkg/iselect/ChangeLog	8 Jul 2007 09:28:11 -0000	1.7
  @@ -2,6 +2,11 @@
     C h a n g e L o g   o f   i S e l e c t
     ___________________________________________________________________________
   
  +  Changes between 1.3.1 and 1.4.0
  +  -------------------------------
  +  070708 o upgraded GNU shtool from 2.0.3 to 2.0.7
  +         o adjusted year range in copyright messages
  +
     Changes between 1.3.0 and 1.3.1
     -------------------------------
     051005 o upgraded GNU shtool from 2.0.1 to 2.0.3
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/README
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 README
  --- ossp-pkg/iselect/README	5 Oct 2005 18:37:19 -0000	1.5
  +++ ossp-pkg/iselect/README	8 Jul 2007 09:28:11 -0000	1.6
  @@ -12,12 +12,12 @@
     as its control script or in batch mode as a pipeline filter (usually
     between grep and the final executing command).   
   
  -  Version 1.3.1 (05-Oct-2005)
  +  Version 1.4.0 (08-Jul-2007)
   
     The latest release can be found on
     http://www.ossp.org/pkg/tool/iselect/
   
  -  Copyright (c) 1997-2005 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 1997-2007 Ralf S. Engelschall <rse@engelschall.com>
   
     This program is free software; it may be redistributed and/or modified only
     under the terms of the GNU General Public License, which may be found in the
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/configure
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 configure
  --- ossp-pkg/iselect/configure	5 Oct 2005 18:19:42 -0000	1.5
  +++ ossp-pkg/iselect/configure	8 Jul 2007 09:28:11 -0000	1.6
  @@ -1301,7 +1301,7 @@
   T_MD=`$SHTOOL echo -e %B 2>/dev/null`
   T_ME=`$SHTOOL echo -e %b 2>/dev/null`
   echo "${T_MD}Configuring for iSelect `./etc/shtool version -lc -dlong iselect_version.c`${T_ME}"
  -echo "Copyright (c) 1997-2005 Ralf S. Engelschall <rse@engelschall.com>"
  +echo "Copyright (c) 1997-2007 Ralf S. Engelschall <rse@engelschall.com>"
   
             ac_config_headers="$ac_config_headers config_ac.h"
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/configure.in
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 configure.in
  --- ossp-pkg/iselect/configure.in	5 Oct 2005 18:19:42 -0000	1.5
  +++ ossp-pkg/iselect/configure.in	8 Jul 2007 09:28:11 -0000	1.6
  @@ -10,7 +10,7 @@
   T_MD=`$SHTOOL echo -e %B 2>/dev/null`
   T_ME=`$SHTOOL echo -e %b 2>/dev/null`
   echo "${T_MD}Configuring for iSelect `./etc/shtool version -lc -dlong iselect_version.c`${T_ME}"
  -echo "Copyright (c) 1997-2005 Ralf S. Engelschall <rse@engelschall.com>"
  +echo "Copyright (c) 1997-2007 Ralf S. Engelschall <rse@engelschall.com>"
   
   AC_CONFIG_HEADER(config_ac.h)dnl
   AC_PREFIX_DEFAULT(/usr/local)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect.pod
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 iselect.pod
  --- ossp-pkg/iselect/iselect.pod	5 Oct 2005 18:19:42 -0000	1.5
  +++ ossp-pkg/iselect/iselect.pod	8 Jul 2007 09:28:11 -0000	1.6
  @@ -11,7 +11,7 @@
   ##  
   ##  ======================================================================
   ##
  -##  Copyright (c) 1997-2005 Ralf S. Engelschall.
  +##  Copyright (c) 1997-2007 Ralf S. Engelschall.
   ##
   ##  This program is free software; it may be redistributed and/or
   ##  modified only under the terms of the GNU General Public License, 
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect_browse.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 iselect_browse.c
  --- ossp-pkg/iselect/iselect_browse.c	5 Oct 2005 18:19:42 -0000	1.3
  +++ ossp-pkg/iselect/iselect_browse.c	8 Jul 2007 09:28:11 -0000	1.4
  @@ -11,7 +11,7 @@
   **  
   **  ======================================================================
   **
  -**  Copyright (c) 1997-2005 Ralf S. Engelschall.
  +**  Copyright (c) 1997-2007 Ralf S. Engelschall.
   **
   **  This program is free software; it may be redistributed and/or
   **  modified only under the terms of the GNU General Public License, 
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect_browse.h
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 iselect_browse.h
  --- ossp-pkg/iselect/iselect_browse.h	5 Oct 2005 18:19:42 -0000	1.3
  +++ ossp-pkg/iselect/iselect_browse.h	8 Jul 2007 09:28:11 -0000	1.4
  @@ -11,7 +11,7 @@
   **  
   **  ======================================================================
   **
  -**  Copyright (c) 1997-2005 Ralf S. Engelschall.
  +**  Copyright (c) 1997-2007 Ralf S. Engelschall.
   **
   **  This program is free software; it may be redistributed and/or
   **  modified only under the terms of the GNU General Public License, 
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect_getopt.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 iselect_getopt.c
  --- ossp-pkg/iselect/iselect_getopt.c	5 Oct 2005 18:19:42 -0000	1.3
  +++ ossp-pkg/iselect/iselect_getopt.c	8 Jul 2007 09:28:11 -0000	1.4
  @@ -11,7 +11,7 @@
   **  
   **  ======================================================================
   **
  -**  Copyright (c) 1997-2005 Ralf S. Engelschall.
  +**  Copyright (c) 1997-2007 Ralf S. Engelschall.
   **
   **  This program is free software; it may be redistributed and/or
   **  modified only under the terms of the GNU General Public License, 
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect_getopt.h
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 iselect_getopt.h
  --- ossp-pkg/iselect/iselect_getopt.h	5 Oct 2005 18:19:42 -0000	1.3
  +++ ossp-pkg/iselect/iselect_getopt.h	8 Jul 2007 09:28:11 -0000	1.4
  @@ -11,7 +11,7 @@
   **  
   **  ======================================================================
   **
  -**  Copyright (c) 1997-2005 Ralf S. Engelschall.
  +**  Copyright (c) 1997-2007 Ralf S. Engelschall.
   **
   **  This program is free software; it may be redistributed and/or
   **  modified only under the terms of the GNU General Public License, 
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect_global.h
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 iselect_global.h
  --- ossp-pkg/iselect/iselect_global.h	5 Oct 2005 18:19:42 -0000	1.3
  +++ ossp-pkg/iselect/iselect_global.h	8 Jul 2007 09:28:11 -0000	1.4
  @@ -11,7 +11,7 @@
   **  
   **  ======================================================================
   **
  -**  Copyright (c) 1997-2005 Ralf S. Engelschall.
  +**  Copyright (c) 1997-2007 Ralf S. Engelschall.
   **
   **  This program is free software; it may be redistributed and/or
   **  modified only under the terms of the GNU General Public License, 
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect_keys.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 iselect_keys.c
  --- ossp-pkg/iselect/iselect_keys.c	5 Oct 2005 18:19:42 -0000	1.4
  +++ ossp-pkg/iselect/iselect_keys.c	8 Jul 2007 09:28:11 -0000	1.5
  @@ -11,7 +11,7 @@
   **  
   **  ======================================================================
   **
  -**  Copyright (c) 1997-2005 Ralf S. Engelschall.
  +**  Copyright (c) 1997-2007 Ralf S. Engelschall.
   **
   **  This program is free software; it may be redistributed and/or
   **  modified only under the terms of the GNU General Public License, 
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect_keys.h
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 iselect_keys.h
  --- ossp-pkg/iselect/iselect_keys.h	5 Oct 2005 18:19:42 -0000	1.3
  +++ ossp-pkg/iselect/iselect_keys.h	8 Jul 2007 09:28:11 -0000	1.4
  @@ -11,7 +11,7 @@
   **  
   **  ======================================================================
   **
  -**  Copyright (c) 1997-2005 Ralf S. Engelschall.
  +**  Copyright (c) 1997-2007 Ralf S. Engelschall.
   **
   **  This program is free software; it may be redistributed and/or
   **  modified only under the terms of the GNU General Public License, 
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect_main.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 iselect_main.c
  --- ossp-pkg/iselect/iselect_main.c	5 Oct 2005 18:19:42 -0000	1.3
  +++ ossp-pkg/iselect/iselect_main.c	8 Jul 2007 09:28:11 -0000	1.4
  @@ -11,7 +11,7 @@
   **  
   **  ======================================================================
   **
  -**  Copyright (c) 1997-2005 Ralf S. Engelschall.
  +**  Copyright (c) 1997-2007 Ralf S. Engelschall.
   **
   **  This program is free software; it may be redistributed and/or
   **  modified only under the terms of the GNU General Public License, 
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect_readme.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 iselect_readme.c
  --- ossp-pkg/iselect/iselect_readme.c	5 Oct 2005 18:37:19 -0000	1.5
  +++ ossp-pkg/iselect/iselect_readme.c	8 Jul 2007 09:28:11 -0000	1.6
  @@ -22,7 +22,7 @@
   "  The latest release can be found on",
   "  http://www.ossp.org/pkg/tool/iselect/",
   "",
  -"  Copyright (c) 1997-2005 Ralf S. Engelschall <rse@engelschall.com>",
  +"  Copyright (c) 1997-2007 Ralf S. Engelschall <rse@engelschall.com>",
   "",
   "  This program is free software; it may be redistributed and/or modified ",
   "  only under the terms of the GNU General Public License, which may be found ",
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect_readme.txt
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 iselect_readme.txt
  --- ossp-pkg/iselect/iselect_readme.txt	5 Oct 2005 18:37:19 -0000	1.4
  +++ ossp-pkg/iselect/iselect_readme.txt	8 Jul 2007 09:28:11 -0000	1.5
  @@ -12,12 +12,12 @@
     as its control script or in batch mode as a pipeline filter (usually
     between grep and the final executing command).   
     
  -  Version 1.3.1 (05-Oct-2005)
  +  Version 1.4.0 (08-Jul-2007)
   
     The latest release can be found on
     http://www.ossp.org/pkg/tool/iselect/
   
  -  Copyright (c) 1997-2005 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 1997-2007 Ralf S. Engelschall <rse@engelschall.com>
   
     This program is free software; it may be redistributed and/or modified 
     only under the terms of the GNU General Public License, which may be found 
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect_version.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 iselect_version.c
  --- ossp-pkg/iselect/iselect_version.c	5 Oct 2005 18:37:19 -0000	1.5
  +++ ossp-pkg/iselect/iselect_version.c	8 Jul 2007 09:28:11 -0000	1.6
  @@ -8,7 +8,7 @@
   #ifndef _ISELECT_VERSION_C_
   #define _ISELECT_VERSION_C_
   
  -#define ISELECT_VERSION 0x103201
  +#define ISELECT_VERSION 0x104200
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _ISELECT_VERSION_C_AS_HEADER_
   
   iselect_version_t iselect_version = {
  -    0x103201,
  -    "1.3.1",
  -    "1.3.1 (05-Oct-2005)",
  -    "This is iSelect, Version 1.3.1 (05-Oct-2005)",
  -    "iSelect 1.3.1 (05-Oct-2005)",
  -    "iSelect/1.3.1",
  -    "@(#)iSelect 1.3.1 (05-Oct-2005)",
  -    "$Id: iselect_version.c,v 1.5 2005/10/05 18:37:19 rse Exp $"
  +    0x104200,
  +    "1.4.0",
  +    "1.4.0 (08-Jul-2007)",
  +    "This is iSelect, Version 1.4.0 (08-Jul-2007)",
  +    "iSelect 1.4.0 (08-Jul-2007)",
  +    "iSelect/1.4.0",
  +    "@(#)iSelect 1.4.0 (08-Jul-2007)",
  +    "$Id: iselect_version.c,v 1.6 2007/07/08 09:28:11 rse Exp $"
   };
   
   #endif /* _ISELECT_VERSION_C_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jul  8 11:30:00 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B9332753015; Sun,  8 Jul 2007 11:29:59 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/iselect/ ChangeLog configure configure.in
Message-Id: <20070708092959.B9332753015@mail.ossp.org>
Date: Sun,  8 Jul 2007 11:29:59 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Jul-2007 11:29:59
  Branch: HEAD                             Handle: 2007070810295800

  Modified files:
    ossp-pkg/iselect        ChangeLog configure configure.in

  Log:
    upgrade to GNU autoconf 2.61

  Summary:
    Revision    Changes     Path
    1.8         +1  -0      ossp-pkg/iselect/ChangeLog
    1.7         +2451 -1974 ossp-pkg/iselect/configure
    1.7         +1  -1      ossp-pkg/iselect/configure.in
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 ChangeLog
  --- ossp-pkg/iselect/ChangeLog	8 Jul 2007 09:28:11 -0000	1.7
  +++ ossp-pkg/iselect/ChangeLog	8 Jul 2007 09:29:58 -0000	1.8
  @@ -6,6 +6,7 @@
     -------------------------------
     070708 o upgraded GNU shtool from 2.0.3 to 2.0.7
            o adjusted year range in copyright messages
  +         o upgraded build environment to GNU autoconf 2.61
   
     Changes between 1.3.0 and 1.3.1
     -------------------------------
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/configure
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 configure
  --- ossp-pkg/iselect/configure	8 Jul 2007 09:28:11 -0000	1.6
  +++ ossp-pkg/iselect/configure	8 Jul 2007 09:29:58 -0000	1.7
  @@ -1,26 +1,55 @@
   #! /bin/sh
   # From configure.in 1.0.
   # Guess values for system-dependent variables and create Makefiles.
  -# Generated by GNU Autoconf 2.59 (OpenPKG-CURRENT).
  +# Generated by GNU Autoconf 2.61 (OpenPKG-CURRENT).
   #
  -# Copyright (C) 2003 Free Software Foundation, Inc.
  +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
  +# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
   # This configure script is free software; the Free Software Foundation
   # gives unlimited permission to copy, distribute and modify it.
   ## --------------------- ##
   ## M4sh Initialization.  ##
   ## --------------------- ##
   
  -# Be Bourne compatible
  +# Be more Bourne compatible
  +DUALCASE=1; export DUALCASE # for MKS sh
   if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
     emulate sh
     NULLCMD=:
     # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
     # is contrary to our usage.  Disable this feature.
     alias -g '${1+"$@"}'='"$@"'
  -elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
  -  set -o posix
  +  setopt NO_GLOB_SUBST
  +else
  +  case `(set -o) 2>/dev/null` in
  +  *posix*) set -o posix ;;
  +esac
  +
  +fi
  +
  +
  +
  +
  +# PATH needs CR
  +# Avoid depending upon Character Ranges.
  +as_cr_letters='abcdefghijklmnopqrstuvwxyz'
  +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  +as_cr_Letters=$as_cr_letters$as_cr_LETTERS
  +as_cr_digits='0123456789'
  +as_cr_alnum=$as_cr_Letters$as_cr_digits
  +
  +# The user is always right.
  +if test "${PATH_SEPARATOR+set}" != set; then
  +  echo "#! /bin/sh" >conf$$.sh
  +  echo  "exit 0"   >>conf$$.sh
  +  chmod +x conf$$.sh
  +  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
  +    PATH_SEPARATOR=';'
  +  else
  +    PATH_SEPARATOR=:
  +  fi
  +  rm -f conf$$.sh
   fi
  -DUALCASE=1; export DUALCASE # for MKS sh
   
   # Support unset when possible.
   if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
  @@ -30,8 +59,43 @@
   fi
   
   
  +# IFS
  +# We need space, tab and new line, in precisely that order.  Quoting is
  +# there to prevent editors from complaining about space-tab.
  +# (If _AS_PATH_WALK were called with IFS unset, it would disable word
  +# splitting by setting IFS to empty value.)
  +as_nl='
  +'
  +IFS=" ""	$as_nl"
  +
  +# Find who we are.  Look in the path if we contain no directory separator.
  +case $0 in
  +  *[\\/]* ) as_myself=$0 ;;
  +  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  +for as_dir in $PATH
  +do
  +  IFS=$as_save_IFS
  +  test -z "$as_dir" && as_dir=.
  +  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
  +done
  +IFS=$as_save_IFS
  +
  +     ;;
  +esac
  +# We did not find ourselves, most probably we were run as `sh COMMAND'
  +# in which case we are not to be found in the path.
  +if test "x$as_myself" = x; then
  +  as_myself=$0
  +fi
  +if test ! -f "$as_myself"; then
  +  echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
  +  { (exit 1); exit 1; }
  +fi
  +
   # Work around bugs in pre-3.0 UWIN ksh.
  -$as_unset ENV MAIL MAILPATH
  +for as_var in ENV MAIL MAILPATH
  +do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
  +done
   PS1='$ '
   PS2='> '
   PS4='+ '
  @@ -45,18 +109,19 @@
     if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
       eval $as_var=C; export $as_var
     else
  -    $as_unset $as_var
  +    ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
     fi
   done
   
   # Required to use basename.
  -if expr a : '\(a\)' >/dev/null 2>&1; then
  +if expr a : '\(a\)' >/dev/null 2>&1 &&
  +   test "X`expr 00001 : '.*\(...\)'`" = X001; then
     as_expr=expr
   else
     as_expr=false
   fi
   
  -if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
  +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
     as_basename=basename
   else
     as_basename=false
  @@ -64,157 +129,388 @@
   
   
   # Name of the executable.
  -as_me=`$as_basename "$0" ||
  +as_me=`$as_basename -- "$0" ||
   $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
   	 X"$0" : 'X\(//\)$' \| \
  -	 X"$0" : 'X\(/\)$' \| \
  -	 .     : '\(.\)' 2>/dev/null ||
  +	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
   echo X/"$0" |
  -    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
  -  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
  -  	  /^X\/\(\/\).*/{ s//\1/; q; }
  -  	  s/.*/./; q'`
  +    sed '/^.*\/\([^/][^/]*\)\/*$/{
  +	    s//\1/
  +	    q
  +	  }
  +	  /^X\/\(\/\/\)$/{
  +	    s//\1/
  +	    q
  +	  }
  +	  /^X\/\(\/\).*/{
  +	    s//\1/
  +	    q
  +	  }
  +	  s/.*/./; q'`
   
  +# CDPATH.
  +$as_unset CDPATH
   
  -# PATH needs CR, and LINENO needs CR and PATH.
  -# Avoid depending upon Character Ranges.
  -as_cr_letters='abcdefghijklmnopqrstuvwxyz'
  -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  -as_cr_Letters=$as_cr_letters$as_cr_LETTERS
  -as_cr_digits='0123456789'
  -as_cr_alnum=$as_cr_Letters$as_cr_digits
   
  -# The user is always right.
  -if test "${PATH_SEPARATOR+set}" != set; then
  -  echo "#! /bin/sh" >conf$$.sh
  -  echo  "exit 0"   >>conf$$.sh
  -  chmod +x conf$$.sh
  -  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
  -    PATH_SEPARATOR=';'
  -  else
  -    PATH_SEPARATOR=:
  -  fi
  -  rm -f conf$$.sh
  +if test "x$CONFIG_SHELL" = x; then
  +  if (eval ":") 2>/dev/null; then
  +  as_have_required=yes
  +else
  +  as_have_required=no
  +fi
  +
  +  if test $as_have_required = yes && 	 (eval ":
  +(as_func_return () {
  +  (exit \$1)
  +}
  +as_func_success () {
  +  as_func_return 0
  +}
  +as_func_failure () {
  +  as_func_return 1
  +}
  +as_func_ret_success () {
  +  return 0
  +}
  +as_func_ret_failure () {
  +  return 1
  +}
  +
  +exitcode=0
  +if as_func_success; then
  +  :
  +else
  +  exitcode=1
  +  echo as_func_success failed.
   fi
   
  +if as_func_failure; then
  +  exitcode=1
  +  echo as_func_failure succeeded.
  +fi
   
  -  as_lineno_1=$LINENO
  -  as_lineno_2=$LINENO
  -  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
  -  test "x$as_lineno_1" != "x$as_lineno_2" &&
  -  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
  -  # Find who we are.  Look in the path if we contain no path at all
  -  # relative or not.
  -  case $0 in
  -    *[\\/]* ) as_myself=$0 ;;
  -    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  -for as_dir in $PATH
  -do
  -  IFS=$as_save_IFS
  -  test -z "$as_dir" && as_dir=.
  -  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
  -done
  +if as_func_ret_success; then
  +  :
  +else
  +  exitcode=1
  +  echo as_func_ret_success failed.
  +fi
   
  -       ;;
  -  esac
  -  # We did not find ourselves, most probably we were run as `sh COMMAND'
  -  # in which case we are not to be found in the path.
  -  if test "x$as_myself" = x; then
  -    as_myself=$0
  -  fi
  -  if test ! -f "$as_myself"; then
  -    { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
  -   { (exit 1); exit 1; }; }
  -  fi
  -  case $CONFIG_SHELL in
  -  '')
  +if as_func_ret_failure; then
  +  exitcode=1
  +  echo as_func_ret_failure succeeded.
  +fi
  +
  +if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
  +  :
  +else
  +  exitcode=1
  +  echo positional parameters were not saved.
  +fi
  +
  +test \$exitcode = 0) || { (exit 1); exit 1; }
  +
  +(
  +  as_lineno_1=\$LINENO
  +  as_lineno_2=\$LINENO
  +  test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" &&
  +  test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; }
  +") 2> /dev/null; then
  +  :
  +else
  +  as_candidate_shells=
       as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
   for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
   do
     IFS=$as_save_IFS
     test -z "$as_dir" && as_dir=.
  -  for as_base in sh bash ksh sh5; do
  -	 case $as_dir in
  +  case $as_dir in
   	 /*)
  -	   if ("$as_dir/$as_base" -c '
  +	   for as_base in sh bash ksh sh5; do
  +	     as_candidate_shells="$as_candidate_shells $as_dir/$as_base"
  +	   done;;
  +       esac
  +done
  +IFS=$as_save_IFS
  +
  +
  +      for as_shell in $as_candidate_shells $SHELL; do
  +	 # Try only shells that exist, to save several forks.
  +	 if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
  +		{ ("$as_shell") 2> /dev/null <<\_ASEOF
  +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
  +  emulate sh
  +  NULLCMD=:
  +  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
  +  # is contrary to our usage.  Disable this feature.
  +  alias -g '${1+"$@"}'='"$@"'
  +  setopt NO_GLOB_SUBST
  +else
  +  case `(set -o) 2>/dev/null` in
  +  *posix*) set -o posix ;;
  +esac
  +
  +fi
  +
  +
  +:
  +_ASEOF
  +}; then
  +  CONFIG_SHELL=$as_shell
  +	       as_have_required=yes
  +	       if { "$as_shell" 2> /dev/null <<\_ASEOF
  +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
  +  emulate sh
  +  NULLCMD=:
  +  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
  +  # is contrary to our usage.  Disable this feature.
  +  alias -g '${1+"$@"}'='"$@"'
  +  setopt NO_GLOB_SUBST
  +else
  +  case `(set -o) 2>/dev/null` in
  +  *posix*) set -o posix ;;
  +esac
  +
  +fi
  +
  +
  +:
  +(as_func_return () {
  +  (exit $1)
  +}
  +as_func_success () {
  +  as_func_return 0
  +}
  +as_func_failure () {
  +  as_func_return 1
  +}
  +as_func_ret_success () {
  +  return 0
  +}
  +as_func_ret_failure () {
  +  return 1
  +}
  +
  +exitcode=0
  +if as_func_success; then
  +  :
  +else
  +  exitcode=1
  +  echo as_func_success failed.
  +fi
  +
  +if as_func_failure; then
  +  exitcode=1
  +  echo as_func_failure succeeded.
  +fi
  +
  +if as_func_ret_success; then
  +  :
  +else
  +  exitcode=1
  +  echo as_func_ret_success failed.
  +fi
  +
  +if as_func_ret_failure; then
  +  exitcode=1
  +  echo as_func_ret_failure succeeded.
  +fi
  +
  +if ( set x; as_func_ret_success y && test x = "$1" ); then
  +  :
  +else
  +  exitcode=1
  +  echo positional parameters were not saved.
  +fi
  +
  +test $exitcode = 0) || { (exit 1); exit 1; }
  +
  +(
     as_lineno_1=$LINENO
     as_lineno_2=$LINENO
  -  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
     test "x$as_lineno_1" != "x$as_lineno_2" &&
  -  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
  -	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
  -	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
  -	     CONFIG_SHELL=$as_dir/$as_base
  -	     export CONFIG_SHELL
  -	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
  -	   fi;;
  -	 esac
  -       done
  -done
  -;;
  -  esac
  +  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; }
  +
  +_ASEOF
  +}; then
  +  break
  +fi
  +
  +fi
  +
  +      done
  +
  +      if test "x$CONFIG_SHELL" != x; then
  +  for as_var in BASH_ENV ENV
  +        do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
  +        done
  +        export CONFIG_SHELL
  +        exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
  +fi
  +
  +
  +    if test $as_have_required = no; then
  +  echo This script requires a shell more modern than all the
  +      echo shells that I found on your system.  Please install a
  +      echo modern shell, or manually run the script under such a
  +      echo shell if you do have one.
  +      { (exit 1); exit 1; }
  +fi
  +
  +
  +fi
  +
  +fi
  +
  +
  +
  +(eval "as_func_return () {
  +  (exit \$1)
  +}
  +as_func_success () {
  +  as_func_return 0
  +}
  +as_func_failure () {
  +  as_func_return 1
  +}
  +as_func_ret_success () {
  +  return 0
  +}
  +as_func_ret_failure () {
  +  return 1
  +}
  +
  +exitcode=0
  +if as_func_success; then
  +  :
  +else
  +  exitcode=1
  +  echo as_func_success failed.
  +fi
  +
  +if as_func_failure; then
  +  exitcode=1
  +  echo as_func_failure succeeded.
  +fi
  +
  +if as_func_ret_success; then
  +  :
  +else
  +  exitcode=1
  +  echo as_func_ret_success failed.
  +fi
  +
  +if as_func_ret_failure; then
  +  exitcode=1
  +  echo as_func_ret_failure succeeded.
  +fi
  +
  +if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
  +  :
  +else
  +  exitcode=1
  +  echo positional parameters were not saved.
  +fi
  +
  +test \$exitcode = 0") || {
  +  echo No shell found that supports shell functions.
  +  echo Please tell autoconf@gnu.org about your system,
  +  echo including any error possibly output before this
  +  echo message
  +}
  +
  +
  +
  +  as_lineno_1=$LINENO
  +  as_lineno_2=$LINENO
  +  test "x$as_lineno_1" != "x$as_lineno_2" &&
  +  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
   
     # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
     # uniformly replaced by the line number.  The first 'sed' inserts a
  -  # line-number line before each line; the second 'sed' does the real
  -  # work.  The second script uses 'N' to pair each line-number line
  -  # with the numbered line, and appends trailing '-' during
  -  # substitution so that $LINENO is not a special case at line end.
  +  # line-number line after each line using $LINENO; the second 'sed'
  +  # does the real work.  The second script uses 'N' to pair each
  +  # line-number line with the line containing $LINENO, and appends
  +  # trailing '-' during substitution so that $LINENO is not a special
  +  # case at line end.
     # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
  -  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
  -  sed '=' <$as_myself |
  +  # scripts with optimization help from Paolo Bonzini.  Blame Lee
  +  # E. McMahon (1931-1989) for sed's syntax.  :-)
  +  sed -n '
  +    p
  +    /[$]LINENO/=
  +  ' <$as_myself |
       sed '
  +      s/[$]LINENO.*/&-/
  +      t lineno
  +      b
  +      :lineno
         N
  -      s,$,-,
  -      : loop
  -      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
  +      :loop
  +      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
         t loop
  -      s,-$,,
  -      s,^['$as_cr_digits']*\n,,
  +      s/-\n.*//
       ' >$as_me.lineno &&
  -  chmod +x $as_me.lineno ||
  +  chmod +x "$as_me.lineno" ||
       { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
      { (exit 1); exit 1; }; }
   
     # Don't try to exec as it changes $[0], causing all sort of problems
     # (the dirname of $[0] is not the place where we might find the
  -  # original and so on.  Autoconf is especially sensible to this).
  -  . ./$as_me.lineno
  +  # original and so on.  Autoconf is especially sensitive to this).
  +  . "./$as_me.lineno"
     # Exit status is that of the last command.
     exit
   }
   
   
  -case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
  -  *c*,-n*) ECHO_N= ECHO_C='
  -' ECHO_T='	' ;;
  -  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
  -  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
  +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
  +  as_dirname=dirname
  +else
  +  as_dirname=false
  +fi
  +
  +ECHO_C= ECHO_N= ECHO_T=
  +case `echo -n x` in
  +-n*)
  +  case `echo 'x\c'` in
  +  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
  +  *)   ECHO_C='\c';;
  +  esac;;
  +*)
  +  ECHO_N='-n';;
   esac
   
  -if expr a : '\(a\)' >/dev/null 2>&1; then
  +if expr a : '\(a\)' >/dev/null 2>&1 &&
  +   test "X`expr 00001 : '.*\(...\)'`" = X001; then
     as_expr=expr
   else
     as_expr=false
   fi
   
   rm -f conf$$ conf$$.exe conf$$.file
  +if test -d conf$$.dir; then
  +  rm -f conf$$.dir/conf$$.file
  +else
  +  rm -f conf$$.dir
  +  mkdir conf$$.dir
  +fi
   echo >conf$$.file
   if ln -s conf$$.file conf$$ 2>/dev/null; then
  -  # We could just check for DJGPP; but this test a) works b) is more generic
  -  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
  -  if test -f conf$$.exe; then
  -    # Don't use ln at all; we don't have any links
  +  as_ln_s='ln -s'
  +  # ... but there are two gotchas:
  +  # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
  +  # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
  +  # In both cases, we have to default to `cp -p'.
  +  ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
       as_ln_s='cp -p'
  -  else
  -    as_ln_s='ln -s'
  -  fi
   elif ln conf$$.file conf$$ 2>/dev/null; then
     as_ln_s=ln
   else
     as_ln_s='cp -p'
   fi
  -rm -f conf$$ conf$$.exe conf$$.file
  +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
  +rmdir conf$$.dir 2>/dev/null
   
   if mkdir -p . 2>/dev/null; then
     as_mkdir_p=:
  @@ -223,7 +519,28 @@
     as_mkdir_p=false
   fi
   
  -as_executable_p="test -f"
  +if test -x / >/dev/null 2>&1; then
  +  as_test_x='test -x'
  +else
  +  if ls -dL / >/dev/null 2>&1; then
  +    as_ls_L_option=L
  +  else
  +    as_ls_L_option=
  +  fi
  +  as_test_x='
  +    eval sh -c '\''
  +      if test -d "$1"; then
  +        test -d "$1/.";
  +      else
  +	case $1 in
  +        -*)set "./$1";;
  +	esac;
  +	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
  +	???[sx]*):;;*)false;;esac;fi
  +    '\'' sh
  +  '
  +fi
  +as_executable_p=$as_test_x
   
   # Sed expression to map a string onto a valid CPP name.
   as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
  @@ -232,39 +549,27 @@
   as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
   
   
  -# IFS
  -# We need space, tab and new line, in precisely that order.
  -as_nl='
  -'
  -IFS=" 	$as_nl"
  -
  -# CDPATH.
  -$as_unset CDPATH
   
  +exec 7<&0 </dev/null 6>&1
   
   # Name of the host.
   # hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
   # so uname gets run too.
   ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
   
  -exec 6>&1
  -
   #
   # Initializations.
   #
   ac_default_prefix=/usr/local
  +ac_clean_files=
   ac_config_libobj_dir=.
  +LIBOBJS=
   cross_compiling=no
   subdirs=
   MFLAGS=
   MAKEFLAGS=
   SHELL=${CONFIG_SHELL-/bin/sh}
   
  -# Maximum number of lines to put in a shell here document.
  -# This variable seems obsolete.  It should probably be removed, and
  -# only ac_max_sed_lines should be used.
  -: ${ac_max_here_lines=38}
  -
   # Identity of this package.
   PACKAGE_NAME=
   PACKAGE_TARNAME=
  @@ -277,42 +582,102 @@
   # Factoring default headers for most tests.
   ac_includes_default="\
   #include <stdio.h>
  -#if HAVE_SYS_TYPES_H
  +#ifdef HAVE_SYS_TYPES_H
   # include <sys/types.h>
   #endif
  -#if HAVE_SYS_STAT_H
  +#ifdef HAVE_SYS_STAT_H
   # include <sys/stat.h>
   #endif
  -#if STDC_HEADERS
  +#ifdef STDC_HEADERS
   # include <stdlib.h>
   # include <stddef.h>
   #else
  -# if HAVE_STDLIB_H
  +# ifdef HAVE_STDLIB_H
   #  include <stdlib.h>
   # endif
   #endif
  -#if HAVE_STRING_H
  -# if !STDC_HEADERS && HAVE_MEMORY_H
  +#ifdef HAVE_STRING_H
  +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
   #  include <memory.h>
   # endif
   # include <string.h>
   #endif
  -#if HAVE_STRINGS_H
  +#ifdef HAVE_STRINGS_H
   # include <strings.h>
   #endif
  -#if HAVE_INTTYPES_H
  +#ifdef HAVE_INTTYPES_H
   # include <inttypes.h>
  -#else
  -# if HAVE_STDINT_H
  -#  include <stdint.h>
  -# endif
   #endif
  -#if HAVE_UNISTD_H
  +#ifdef HAVE_STDINT_H
  +# include <stdint.h>
  +#endif
  +#ifdef HAVE_UNISTD_H
   # include <unistd.h>
   #endif"
   
  -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP debug SET_MAKE SHTOOL EGREP LIBOBJS LTLIBOBJS'
  +ac_subst_vars='SHELL
  +PATH_SEPARATOR
  +PACKAGE_NAME
  +PACKAGE_TARNAME
  +PACKAGE_VERSION
  +PACKAGE_STRING
  +PACKAGE_BUGREPORT
  +exec_prefix
  +prefix
  +program_transform_name
  +bindir
  +sbindir
  +libexecdir
  +datarootdir
  +datadir
  +sysconfdir
  +sharedstatedir
  +localstatedir
  +includedir
  +oldincludedir
  +docdir
  +infodir
  +htmldir
  +dvidir
  +pdfdir
  +psdir
  +libdir
  +localedir
  +mandir
  +DEFS
  +ECHO_C
  +ECHO_N
  +ECHO_T
  +LIBS
  +build_alias
  +host_alias
  +target_alias
  +CC
  +CFLAGS
  +LDFLAGS
  +CPPFLAGS
  +ac_ct_CC
  +EXEEXT
  +OBJEXT
  +CPP
  +debug
  +SET_MAKE
  +SHTOOL
  +GREP
  +EGREP
  +LIBOBJS
  +LTLIBOBJS'
   ac_subst_files=''
  +      ac_precious_vars='build_alias
  +host_alias
  +target_alias
  +CC
  +CFLAGS
  +LDFLAGS
  +LIBS
  +CPPFLAGS
  +CPP'
  +
   
   # Initialize some variables set by options.
   ac_init_help=
  @@ -339,34 +704,48 @@
   # and all the variables that are supposed to be based on exec_prefix
   # by default will actually change.
   # Use braces instead of parens because sh, perl, etc. also accept them.
  +# (The list follows the same order as the GNU Coding Standards.)
   bindir='${exec_prefix}/bin'
   sbindir='${exec_prefix}/sbin'
   libexecdir='${exec_prefix}/libexec'
  -datadir='${prefix}/share'
  +datarootdir='${prefix}/share'
  +datadir='${datarootdir}'
   sysconfdir='${prefix}/etc'
   sharedstatedir='${prefix}/com'
   localstatedir='${prefix}/var'
  -libdir='${exec_prefix}/lib'
   includedir='${prefix}/include'
   oldincludedir='/usr/include'
  -infodir='${prefix}/info'
  -mandir='${prefix}/man'
  +docdir='${datarootdir}/doc/${PACKAGE}'
  +infodir='${datarootdir}/info'
  +htmldir='${docdir}'
  +dvidir='${docdir}'
  +pdfdir='${docdir}'
  +psdir='${docdir}'
  +libdir='${exec_prefix}/lib'
  +localedir='${datarootdir}/locale'
  +mandir='${datarootdir}/man'
   
   ac_prev=
  +ac_dashdash=
   for ac_option
   do
     # If the previous option needs an argument, assign it.
     if test -n "$ac_prev"; then
  -    eval "$ac_prev=\$ac_option"
  +    eval $ac_prev=\$ac_option
       ac_prev=
       continue
     fi
   
  -  ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
  +  case $ac_option in
  +  *=*)	ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
  +  *)	ac_optarg=yes ;;
  +  esac
   
     # Accept the important Cygnus configure options, so we can diagnose typos.
   
  -  case $ac_option in
  +  case $ac_dashdash$ac_option in
  +  --)
  +    ac_dashdash=yes ;;
   
     -bindir | --bindir | --bindi | --bind | --bin | --bi)
       ac_prev=bindir ;;
  @@ -388,33 +767,45 @@
     --config-cache | -C)
       cache_file=config.cache ;;
   
  -  -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
  +  -datadir | --datadir | --datadi | --datad)
       ac_prev=datadir ;;
  -  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
  -  | --da=*)
  +  -datadir=* | --datadir=* | --datadi=* | --datad=*)
       datadir=$ac_optarg ;;
   
  +  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
  +  | --dataroo | --dataro | --datar)
  +    ac_prev=datarootdir ;;
  +  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
  +  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
  +    datarootdir=$ac_optarg ;;
  +
     -disable-* | --disable-*)
       ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
       # Reject names that are not valid shell variable names.
  -    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
  +    expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
         { echo "$as_me: error: invalid feature name: $ac_feature" >&2
      { (exit 1); exit 1; }; }
  -    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
  -    eval "enable_$ac_feature=no" ;;
  +    ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
  +    eval enable_$ac_feature=no ;;
  +
  +  -docdir | --docdir | --docdi | --doc | --do)
  +    ac_prev=docdir ;;
  +  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
  +    docdir=$ac_optarg ;;
  +
  +  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
  +    ac_prev=dvidir ;;
  +  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
  +    dvidir=$ac_optarg ;;
   
     -enable-* | --enable-*)
       ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
       # Reject names that are not valid shell variable names.
  -    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
  +    expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
         { echo "$as_me: error: invalid feature name: $ac_feature" >&2
      { (exit 1); exit 1; }; }
  -    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
  -    case $ac_option in
  -      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
  -      *) ac_optarg=yes ;;
  -    esac
  -    eval "enable_$ac_feature='$ac_optarg'" ;;
  +    ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
  +    eval enable_$ac_feature=\$ac_optarg ;;
   
     -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
     | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
  @@ -441,6 +832,12 @@
     -host=* | --host=* | --hos=* | --ho=*)
       host_alias=$ac_optarg ;;
   
  +  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
  +    ac_prev=htmldir ;;
  +  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
  +  | --ht=*)
  +    htmldir=$ac_optarg ;;
  +
     -includedir | --includedir | --includedi | --included | --include \
     | --includ | --inclu | --incl | --inc)
       ac_prev=includedir ;;
  @@ -465,13 +862,16 @@
     | --libexe=* | --libex=* | --libe=*)
       libexecdir=$ac_optarg ;;
   
  +  -localedir | --localedir | --localedi | --localed | --locale)
  +    ac_prev=localedir ;;
  +  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
  +    localedir=$ac_optarg ;;
  +
     -localstatedir | --localstatedir | --localstatedi | --localstated \
  -  | --localstate | --localstat | --localsta | --localst \
  -  | --locals | --local | --loca | --loc | --lo)
  +  | --localstate | --localstat | --localsta | --localst | --locals)
       ac_prev=localstatedir ;;
     -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
  -  | --localstate=* | --localstat=* | --localsta=* | --localst=* \
  -  | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
  +  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
       localstatedir=$ac_optarg ;;
   
     -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
  @@ -536,6 +936,16 @@
     | --progr-tra=* | --program-tr=* | --program-t=*)
       program_transform_name=$ac_optarg ;;
   
  +  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
  +    ac_prev=pdfdir ;;
  +  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
  +    pdfdir=$ac_optarg ;;
  +
  +  -psdir | --psdir | --psdi | --psd | --ps)
  +    ac_prev=psdir ;;
  +  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
  +    psdir=$ac_optarg ;;
  +
     -q | -quiet | --quiet | --quie | --qui | --qu | --q \
     | -silent | --silent | --silen | --sile | --sil)
       silent=yes ;;
  @@ -588,24 +998,20 @@
     -with-* | --with-*)
       ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
       # Reject names that are not valid shell variable names.
  -    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
  +    expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
         { echo "$as_me: error: invalid package name: $ac_package" >&2
      { (exit 1); exit 1; }; }
  -    ac_package=`echo $ac_package| sed 's/-/_/g'`
  -    case $ac_option in
  -      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
  -      *) ac_optarg=yes ;;
  -    esac
  -    eval "with_$ac_package='$ac_optarg'" ;;
  +    ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
  +    eval with_$ac_package=\$ac_optarg ;;
   
     -without-* | --without-*)
       ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
       # Reject names that are not valid shell variable names.
  -    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
  +    expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
         { echo "$as_me: error: invalid package name: $ac_package" >&2
      { (exit 1); exit 1; }; }
  -    ac_package=`echo $ac_package | sed 's/-/_/g'`
  -    eval "with_$ac_package=no" ;;
  +    ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
  +    eval with_$ac_package=no ;;
   
     --x)
       # Obsolete; use --with-x.
  @@ -636,8 +1042,7 @@
       expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
         { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
      { (exit 1); exit 1; }; }
  -    ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
  -    eval "$ac_envvar='$ac_optarg'"
  +    eval $ac_envvar=\$ac_optarg
       export $ac_envvar ;;
   
     *)
  @@ -657,27 +1062,19 @@
      { (exit 1); exit 1; }; }
   fi
   
  -# Be sure to have absolute paths.
  -for ac_var in exec_prefix prefix
  -do
  -  eval ac_val=$`echo $ac_var`
  -  case $ac_val in
  -    [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
  -    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
  -   { (exit 1); exit 1; }; };;
  -  esac
  -done
  -
  -# Be sure to have absolute paths.
  -for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
  -	      localstatedir libdir includedir oldincludedir infodir mandir
  +# Be sure to have absolute directory names.
  +for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
  +		datadir sysconfdir sharedstatedir localstatedir includedir \
  +		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
  +		libdir localedir mandir
   do
  -  eval ac_val=$`echo $ac_var`
  +  eval ac_val=\$$ac_var
     case $ac_val in
  -    [\\/$]* | ?:[\\/]* ) ;;
  -    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
  -   { (exit 1); exit 1; }; };;
  +    [\\/$]* | ?:[\\/]* )  continue;;
  +    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
     esac
  +  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
  +   { (exit 1); exit 1; }; }
   done
   
   # There might be people who depend on the old broken behavior: `$host'
  @@ -704,74 +1101,76 @@
   test "$silent" = yes && exec 6>/dev/null
   
   
  +ac_pwd=`pwd` && test -n "$ac_pwd" &&
  +ac_ls_di=`ls -di .` &&
  +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
  +  { echo "$as_me: error: Working directory cannot be determined" >&2
  +   { (exit 1); exit 1; }; }
  +test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
  +  { echo "$as_me: error: pwd does not report name of working directory" >&2
  +   { (exit 1); exit 1; }; }
  +
  +
   # Find the source files, if location was not specified.
   if test -z "$srcdir"; then
     ac_srcdir_defaulted=yes
  -  # Try the directory containing this script, then its parent.
  -  ac_confdir=`(dirname "$0") 2>/dev/null ||
  +  # Try the directory containing this script, then the parent directory.
  +  ac_confdir=`$as_dirname -- "$0" ||
   $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
   	 X"$0" : 'X\(//\)[^/]' \| \
   	 X"$0" : 'X\(//\)$' \| \
  -	 X"$0" : 'X\(/\)' \| \
  -	 .     : '\(.\)' 2>/dev/null ||
  +	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
   echo X"$0" |
  -    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
  -  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
  -  	  /^X\(\/\/\)$/{ s//\1/; q; }
  -  	  /^X\(\/\).*/{ s//\1/; q; }
  -  	  s/.*/./; q'`
  +    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
  +	    s//\1/
  +	    q
  +	  }
  +	  /^X\(\/\/\)[^/].*/{
  +	    s//\1/
  +	    q
  +	  }
  +	  /^X\(\/\/\)$/{
  +	    s//\1/
  +	    q
  +	  }
  +	  /^X\(\/\).*/{
  +	    s//\1/
  +	    q
  +	  }
  +	  s/.*/./; q'`
     srcdir=$ac_confdir
  -  if test ! -r $srcdir/$ac_unique_file; then
  +  if test ! -r "$srcdir/$ac_unique_file"; then
       srcdir=..
     fi
   else
     ac_srcdir_defaulted=no
   fi
  -if test ! -r $srcdir/$ac_unique_file; then
  -  if test "$ac_srcdir_defaulted" = yes; then
  -    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
  -   { (exit 1); exit 1; }; }
  -  else
  -    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
  +if test ! -r "$srcdir/$ac_unique_file"; then
  +  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
  +  { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
      { (exit 1); exit 1; }; }
  -  fi
   fi
  -(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
  -  { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
  +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
  +ac_abs_confdir=`(
  +	cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2
      { (exit 1); exit 1; }; }
  -srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
  -ac_env_build_alias_set=${build_alias+set}
  -ac_env_build_alias_value=$build_alias
  -ac_cv_env_build_alias_set=${build_alias+set}
  -ac_cv_env_build_alias_value=$build_alias
  -ac_env_host_alias_set=${host_alias+set}
  -ac_env_host_alias_value=$host_alias
  -ac_cv_env_host_alias_set=${host_alias+set}
  -ac_cv_env_host_alias_value=$host_alias
  -ac_env_target_alias_set=${target_alias+set}
  -ac_env_target_alias_value=$target_alias
  -ac_cv_env_target_alias_set=${target_alias+set}
  -ac_cv_env_target_alias_value=$target_alias
  -ac_env_CC_set=${CC+set}
  -ac_env_CC_value=$CC
  -ac_cv_env_CC_set=${CC+set}
  -ac_cv_env_CC_value=$CC
  -ac_env_CFLAGS_set=${CFLAGS+set}
  -ac_env_CFLAGS_value=$CFLAGS
  -ac_cv_env_CFLAGS_set=${CFLAGS+set}
  -ac_cv_env_CFLAGS_value=$CFLAGS
  -ac_env_LDFLAGS_set=${LDFLAGS+set}
  -ac_env_LDFLAGS_value=$LDFLAGS
  -ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
  -ac_cv_env_LDFLAGS_value=$LDFLAGS
  -ac_env_CPPFLAGS_set=${CPPFLAGS+set}
  -ac_env_CPPFLAGS_value=$CPPFLAGS
  -ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
  -ac_cv_env_CPPFLAGS_value=$CPPFLAGS
  -ac_env_CPP_set=${CPP+set}
  -ac_env_CPP_value=$CPP
  -ac_cv_env_CPP_set=${CPP+set}
  -ac_cv_env_CPP_value=$CPP
  +	pwd)`
  +# When building in place, set srcdir=.
  +if test "$ac_abs_confdir" = "$ac_pwd"; then
  +  srcdir=.
  +fi
  +# Remove unnecessary trailing slashes from srcdir.
  +# Double slashes in file names in object file debugging info
  +# mess up M-x gdb in Emacs.
  +case $srcdir in
  +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
  +esac
  +for ac_var in $ac_precious_vars; do
  +  eval ac_env_${ac_var}_set=\${${ac_var}+set}
  +  eval ac_env_${ac_var}_value=\$${ac_var}
  +  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
  +  eval ac_cv_env_${ac_var}_value=\$${ac_var}
  +done
   
   #
   # Report the --help message.
  @@ -800,9 +1199,6 @@
     -n, --no-create         do not create output files
         --srcdir=DIR        find the sources in DIR [configure dir or \`..']
   
  -_ACEOF
  -
  -  cat <<_ACEOF
   Installation directories:
     --prefix=PREFIX         install architecture-independent files in PREFIX
   			  [$ac_default_prefix]
  @@ -820,15 +1216,22 @@
     --bindir=DIR           user executables [EPREFIX/bin]
     --sbindir=DIR          system admin executables [EPREFIX/sbin]
     --libexecdir=DIR       program executables [EPREFIX/libexec]
  -  --datadir=DIR          read-only architecture-independent data [PREFIX/share]
     --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
     --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
     --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
     --libdir=DIR           object code libraries [EPREFIX/lib]
     --includedir=DIR       C header files [PREFIX/include]
     --oldincludedir=DIR    C header files for non-gcc [/usr/include]
  -  --infodir=DIR          info documentation [PREFIX/info]
  -  --mandir=DIR           man documentation [PREFIX/man]
  +  --datarootdir=DIR      read-only arch.-independent data root [PREFIX/share]
  +  --datadir=DIR          read-only architecture-independent data [DATAROOTDIR]
  +  --infodir=DIR          info documentation [DATAROOTDIR/info]
  +  --localedir=DIR        locale-dependent data [DATAROOTDIR/locale]
  +  --mandir=DIR           man documentation [DATAROOTDIR/man]
  +  --docdir=DIR           documentation root [DATAROOTDIR/doc/PACKAGE]
  +  --htmldir=DIR          html documentation [DOCDIR]
  +  --dvidir=DIR           dvi documentation [DOCDIR]
  +  --pdfdir=DIR           pdf documentation [DOCDIR]
  +  --psdir=DIR            ps documentation [DOCDIR]
   _ACEOF
   
     cat <<\_ACEOF
  @@ -855,126 +1258,95 @@
     CFLAGS      C compiler flags
     LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
                 nonstandard directory <lib dir>
  -  CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
  -              headers in a nonstandard directory <include dir>
  +  LIBS        libraries to pass to the linker, e.g. -l<library>
  +  CPPFLAGS    C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
  +              you have headers in a nonstandard directory <include dir>
     CPP         C preprocessor
   
   Use these variables to override the choices made by `configure' or to help
   it to find libraries and programs with nonstandard names/locations.
   
   _ACEOF
  +ac_status=$?
   fi
   
   if test "$ac_init_help" = "recursive"; then
     # If there are subdirs, report their specific --help.
  -  ac_popdir=`pwd`
     for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
  -    test -d $ac_dir || continue
  +    test -d "$ac_dir" || continue
       ac_builddir=.
   
  -if test "$ac_dir" != .; then
  +case "$ac_dir" in
  +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
  +*)
     ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
  -  # A "../" for each directory in $ac_dir_suffix.
  -  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
  -else
  -  ac_dir_suffix= ac_top_builddir=
  -fi
  +  # A ".." for each directory in $ac_dir_suffix.
  +  ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
  +  case $ac_top_builddir_sub in
  +  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
  +  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
  +  esac ;;
  +esac
  +ac_abs_top_builddir=$ac_pwd
  +ac_abs_builddir=$ac_pwd$ac_dir_suffix
  +# for backward compatibility:
  +ac_top_builddir=$ac_top_build_prefix
   
   case $srcdir in
  -  .)  # No --srcdir option.  We are building in place.
  +  .)  # We are building in place.
       ac_srcdir=.
  -    if test -z "$ac_top_builddir"; then
  -       ac_top_srcdir=.
  -    else
  -       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
  -    fi ;;
  -  [\\/]* | ?:[\\/]* )  # Absolute path.
  +    ac_top_srcdir=$ac_top_builddir_sub
  +    ac_abs_top_srcdir=$ac_pwd ;;
  +  [\\/]* | ?:[\\/]* )  # Absolute name.
       ac_srcdir=$srcdir$ac_dir_suffix;
  -    ac_top_srcdir=$srcdir ;;
  -  *) # Relative path.
  -    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
  -    ac_top_srcdir=$ac_top_builddir$srcdir ;;
  -esac
  -
  -# Do not use `cd foo && pwd` to compute absolute paths, because
  -# the directories may not exist.
  -case `pwd` in
  -.) ac_abs_builddir="$ac_dir";;
  -*)
  -  case "$ac_dir" in
  -  .) ac_abs_builddir=`pwd`;;
  -  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
  -  *) ac_abs_builddir=`pwd`/"$ac_dir";;
  -  esac;;
  -esac
  -case $ac_abs_builddir in
  -.) ac_abs_top_builddir=${ac_top_builddir}.;;
  -*)
  -  case ${ac_top_builddir}. in
  -  .) ac_abs_top_builddir=$ac_abs_builddir;;
  -  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
  -  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
  -  esac;;
  -esac
  -case $ac_abs_builddir in
  -.) ac_abs_srcdir=$ac_srcdir;;
  -*)
  -  case $ac_srcdir in
  -  .) ac_abs_srcdir=$ac_abs_builddir;;
  -  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
  -  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
  -  esac;;
  -esac
  -case $ac_abs_builddir in
  -.) ac_abs_top_srcdir=$ac_top_srcdir;;
  -*)
  -  case $ac_top_srcdir in
  -  .) ac_abs_top_srcdir=$ac_abs_builddir;;
  -  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
  -  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
  -  esac;;
  +    ac_top_srcdir=$srcdir
  +    ac_abs_top_srcdir=$srcdir ;;
  +  *) # Relative name.
  +    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
  +    ac_top_srcdir=$ac_top_build_prefix$srcdir
  +    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
   esac
  +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
   
  -    cd $ac_dir
  -    # Check for guested configure; otherwise get Cygnus style configure.
  -    if test -f $ac_srcdir/configure.gnu; then
  -      echo
  -      $SHELL $ac_srcdir/configure.gnu  --help=recursive
  -    elif test -f $ac_srcdir/configure; then
  -      echo
  -      $SHELL $ac_srcdir/configure  --help=recursive
  -    elif test -f $ac_srcdir/configure.ac ||
  -	   test -f $ac_srcdir/configure.in; then
  -      echo
  -      $ac_configure --help
  +    cd "$ac_dir" || { ac_status=$?; continue; }
  +    # Check for guested configure.
  +    if test -f "$ac_srcdir/configure.gnu"; then
  +      echo &&
  +      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
  +    elif test -f "$ac_srcdir/configure"; then
  +      echo &&
  +      $SHELL "$ac_srcdir/configure" --help=recursive
       else
         echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
  -    fi
  -    cd $ac_popdir
  +    fi || ac_status=$?
  +    cd "$ac_pwd" || { ac_status=$?; break; }
     done
   fi
   
  -test -n "$ac_init_help" && exit 0
  +test -n "$ac_init_help" && exit $ac_status
   if $ac_init_version; then
     cat <<\_ACEOF
  +configure
  +generated by GNU Autoconf 2.61 (OpenPKG-CURRENT)
   
  -Copyright (C) 2003 Free Software Foundation, Inc.
  +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
  +2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
   This configure script is free software; the Free Software Foundation
   gives unlimited permission to copy, distribute and modify it.
   _ACEOF
  -  exit 0
  +  exit
   fi
  -exec 5>config.log
  -cat >&5 <<_ACEOF
  +cat >config.log <<_ACEOF
   This file contains any messages produced by compilers while
   running configure, to aid debugging if configure makes a mistake.
   
   It was created by $as_me, which was
  -generated by GNU Autoconf 2.59 (OpenPKG-CURRENT).  Invocation command line was
  +generated by GNU Autoconf 2.61 (OpenPKG-CURRENT).  Invocation command line was
   
     $ $0 $@
   
   _ACEOF
  +exec 5>>config.log
   {
   cat <<_ASUNAME
   ## --------- ##
  @@ -993,7 +1365,7 @@
   /bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
   /usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
   /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
  -hostinfo               = `(hostinfo) 2>/dev/null               || echo unknown`
  +/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
   /bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
   /usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
   /bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
  @@ -1007,6 +1379,7 @@
     test -z "$as_dir" && as_dir=.
     echo "PATH: $as_dir"
   done
  +IFS=$as_save_IFS
   
   } >&5
   
  @@ -1028,7 +1401,6 @@
   ac_configure_args=
   ac_configure_args0=
   ac_configure_args1=
  -ac_sep=
   ac_must_keep_next=false
   for ac_pass in 1 2
   do
  @@ -1039,7 +1411,7 @@
       -q | -quiet | --quiet | --quie | --qui | --qu | --q \
       | -silent | --silent | --silen | --sile | --sil)
         continue ;;
  -    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
  +    *\'*)
         ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
       esac
       case $ac_pass in
  @@ -1061,9 +1433,7 @@
   	  -* ) ac_must_keep_next=true ;;
   	esac
         fi
  -      ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
  -      # Get rid of the leading space.
  -      ac_sep=" "
  +      ac_configure_args="$ac_configure_args '$ac_arg'"
         ;;
       esac
     done
  @@ -1074,8 +1444,8 @@
   # When interrupted or exit'd, cleanup temporary files, and complete
   # config.log.  We remove comments because anyway the quotes in there
   # would cause problems or look ugly.
  -# WARNING: Be sure not to use single quotes in there, as some shells,
  -# such as our DU 5.0 friend, will then `close' the trap.
  +# WARNING: Use '\'' to represent an apostrophe within the trap.
  +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
   trap 'exit_status=$?
     # Save into config.log some information that might help in debugging.
     {
  @@ -1088,20 +1458,34 @@
   _ASBOX
       echo
       # The following way of writing the cache mishandles newlines in values,
  -{
  +(
  +  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
  +    eval ac_val=\$$ac_var
  +    case $ac_val in #(
  +    *${as_nl}*)
  +      case $ac_var in #(
  +      *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
  +echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
  +      esac
  +      case $ac_var in #(
  +      _ | IFS | as_nl) ;; #(
  +      *) $as_unset $ac_var ;;
  +      esac ;;
  +    esac
  +  done
     (set) 2>&1 |
  -    case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
  -    *ac_space=\ *)
  +    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
  +    *${as_nl}ac_space=\ *)
         sed -n \
  -	"s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
  -	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
  -      ;;
  +	"s/'\''/'\''\\\\'\'''\''/g;
  +	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
  +      ;; #(
       *)
  -      sed -n \
  -	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
  +      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
         ;;
  -    esac;
  -}
  +    esac |
  +    sort
  +)
       echo
   
       cat <<\_ASBOX
  @@ -1112,22 +1496,28 @@
       echo
       for ac_var in $ac_subst_vars
       do
  -      eval ac_val=$`echo $ac_var`
  -      echo "$ac_var='"'"'$ac_val'"'"'"
  +      eval ac_val=\$$ac_var
  +      case $ac_val in
  +      *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
  +      esac
  +      echo "$ac_var='\''$ac_val'\''"
       done | sort
       echo
   
       if test -n "$ac_subst_files"; then
         cat <<\_ASBOX
  -## ------------- ##
  -## Output files. ##
  -## ------------- ##
  +## ------------------- ##
  +## File substitutions. ##
  +## ------------------- ##
   _ASBOX
         echo
         for ac_var in $ac_subst_files
         do
  -	eval ac_val=$`echo $ac_var`
  -	echo "$ac_var='"'"'$ac_val'"'"'"
  +	eval ac_val=\$$ac_var
  +	case $ac_val in
  +	*\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
  +	esac
  +	echo "$ac_var='\''$ac_val'\''"
         done | sort
         echo
       fi
  @@ -1139,26 +1529,24 @@
   ## ----------- ##
   _ASBOX
         echo
  -      sed "/^$/d" confdefs.h | sort
  +      cat confdefs.h
         echo
       fi
       test "$ac_signal" != 0 &&
         echo "$as_me: caught signal $ac_signal"
       echo "$as_me: exit $exit_status"
     } >&5
  -  rm -f core *.core &&
  -  rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
  +  rm -f core *.core core.conftest.* &&
  +    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
       exit $exit_status
  -     ' 0
  +' 0
   for ac_signal in 1 2 13 15; do
     trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
   done
   ac_signal=0
   
   # confdefs.h avoids OS command line length limits that DEFS can exceed.
  -rm -rf conftest* confdefs.h
  -# AIX cpp loses on an empty file, so make sure it contains at least a newline.
  -echo >confdefs.h
  +rm -f -r conftest* confdefs.h
   
   # Predefined preprocessor variables.
   
  @@ -1189,14 +1577,17 @@
   
   # Let the site file select an alternate cache file if it wants to.
   # Prefer explicitly selected file to automatically selected ones.
  -if test -z "$CONFIG_SITE"; then
  -  if test "x$prefix" != xNONE; then
  -    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
  -  else
  -    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
  -  fi
  +if test -n "$CONFIG_SITE"; then
  +  set x "$CONFIG_SITE"
  +elif test "x$prefix" != xNONE; then
  +  set x "$prefix/share/config.site" "$prefix/etc/config.site"
  +else
  +  set x "$ac_default_prefix/share/config.site" \
  +	"$ac_default_prefix/etc/config.site"
   fi
  -for ac_site_file in $CONFIG_SITE; do
  +shift
  +for ac_site_file
  +do
     if test -r "$ac_site_file"; then
       { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
   echo "$as_me: loading site script $ac_site_file" >&6;}
  @@ -1212,8 +1603,8 @@
       { echo "$as_me:$LINENO: loading cache $cache_file" >&5
   echo "$as_me: loading cache $cache_file" >&6;}
       case $cache_file in
  -      [\\/]* | ?:[\\/]* ) . $cache_file;;
  -      *)                      . ./$cache_file;;
  +      [\\/]* | ?:[\\/]* ) . "$cache_file";;
  +      *)                      . "./$cache_file";;
       esac
     fi
   else
  @@ -1225,12 +1616,11 @@
   # Check that the precious variables saved in the cache have kept the same
   # value.
   ac_cache_corrupted=false
  -for ac_var in `(set) 2>&1 |
  -	       sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
  +for ac_var in $ac_precious_vars; do
     eval ac_old_set=\$ac_cv_env_${ac_var}_set
     eval ac_new_set=\$ac_env_${ac_var}_set
  -  eval ac_old_val="\$ac_cv_env_${ac_var}_value"
  -  eval ac_new_val="\$ac_env_${ac_var}_value"
  +  eval ac_old_val=\$ac_cv_env_${ac_var}_value
  +  eval ac_new_val=\$ac_env_${ac_var}_value
     case $ac_old_set,$ac_new_set in
       set,)
         { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
  @@ -1255,8 +1645,7 @@
     # Pass precious variables to config.status.
     if test "$ac_new_set" = set; then
       case $ac_new_val in
  -    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
  -      ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
  +    *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
       *) ac_arg=$ac_var=$ac_new_val ;;
       esac
       case " $ac_configure_args " in
  @@ -1273,12 +1662,6 @@
      { (exit 1); exit 1; }; }
   fi
   
  -ac_ext=c
  -ac_cpp='$CPP $CPPFLAGS'
  -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  -ac_compiler_gnu=$ac_cv_c_compiler_gnu
  -
   
   
   
  @@ -1295,6 +1678,11 @@
   
   
   
  +ac_ext=c
  +ac_cpp='$CPP $CPPFLAGS'
  +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  +ac_compiler_gnu=$ac_cv_c_compiler_gnu
   
   
   SHTOOL="./etc/shtool"
  @@ -1303,13 +1691,13 @@
   echo "${T_MD}Configuring for iSelect `./etc/shtool version -lc -dlong iselect_version.c`${T_ME}"
   echo "Copyright (c) 1997-2007 Ralf S. Engelschall <rse@engelschall.com>"
   
  -          ac_config_headers="$ac_config_headers config_ac.h"
  +ac_config_headers="$ac_config_headers config_ac.h"
   
   
  -echo "$as_me:$LINENO: result: " >&5
  -echo "${ECHO_T}" >&6
  -echo "$as_me:$LINENO: result: ${T_MD}CHECK: Build Environment${T_ME}" >&5
  -echo "${ECHO_T}${T_MD}CHECK: Build Environment${T_ME}" >&6
  +{ echo "$as_me:$LINENO: result: " >&5
  +echo "${ECHO_T}" >&6; }
  +{ echo "$as_me:$LINENO: result: ${T_MD}CHECK: Build Environment${T_ME}" >&5
  +echo "${ECHO_T}${T_MD}CHECK: Build Environment${T_ME}" >&6; }
   
   
   ac_ext=c
  @@ -1320,8 +1708,8 @@
   if test -n "$ac_tool_prefix"; then
     # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
   set dummy ${ac_tool_prefix}gcc; ac_word=$2
  -echo "$as_me:$LINENO: checking for $ac_word" >&5
  -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +{ echo "$as_me:$LINENO: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
   if test "${ac_cv_prog_CC+set}" = set; then
     echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  @@ -1334,32 +1722,34 @@
     IFS=$as_save_IFS
     test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
  -  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
  +  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
       ac_cv_prog_CC="${ac_tool_prefix}gcc"
       echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
       break 2
     fi
   done
   done
  +IFS=$as_save_IFS
   
   fi
   fi
   CC=$ac_cv_prog_CC
   if test -n "$CC"; then
  -  echo "$as_me:$LINENO: result: $CC" >&5
  -echo "${ECHO_T}$CC" >&6
  +  { echo "$as_me:$LINENO: result: $CC" >&5
  +echo "${ECHO_T}$CC" >&6; }
   else
  -  echo "$as_me:$LINENO: result: no" >&5
  -echo "${ECHO_T}no" >&6
  +  { echo "$as_me:$LINENO: result: no" >&5
  +echo "${ECHO_T}no" >&6; }
   fi
   
  +
   fi
   if test -z "$ac_cv_prog_CC"; then
     ac_ct_CC=$CC
     # Extract the first word of "gcc", so it can be a program name with args.
   set dummy gcc; ac_word=$2
  -echo "$as_me:$LINENO: checking for $ac_word" >&5
  -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +{ echo "$as_me:$LINENO: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
   if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
     echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  @@ -1372,36 +1762,51 @@
     IFS=$as_save_IFS
     test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
  -  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
  +  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
       ac_cv_prog_ac_ct_CC="gcc"
       echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
       break 2
     fi
   done
   done
  +IFS=$as_save_IFS
   
   fi
   fi
   ac_ct_CC=$ac_cv_prog_ac_ct_CC
   if test -n "$ac_ct_CC"; then
  -  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
  -echo "${ECHO_T}$ac_ct_CC" >&6
  +  { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
  +echo "${ECHO_T}$ac_ct_CC" >&6; }
   else
  -  echo "$as_me:$LINENO: result: no" >&5
  -echo "${ECHO_T}no" >&6
  +  { echo "$as_me:$LINENO: result: no" >&5
  +echo "${ECHO_T}no" >&6; }
   fi
   
  -  CC=$ac_ct_CC
  +  if test "x$ac_ct_CC" = x; then
  +    CC=""
  +  else
  +    case $cross_compiling:$ac_tool_warned in
  +yes:)
  +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
  +whose name does not start with the host triplet.  If you think this
  +configuration is useful to you, please write to autoconf@gnu.org." >&5
  +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
  +whose name does not start with the host triplet.  If you think this
  +configuration is useful to you, please write to autoconf@gnu.org." >&2;}
  +ac_tool_warned=yes ;;
  +esac
  +    CC=$ac_ct_CC
  +  fi
   else
     CC="$ac_cv_prog_CC"
   fi
   
   if test -z "$CC"; then
  -  if test -n "$ac_tool_prefix"; then
  -  # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
  +          if test -n "$ac_tool_prefix"; then
  +    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
   set dummy ${ac_tool_prefix}cc; ac_word=$2
  -echo "$as_me:$LINENO: checking for $ac_word" >&5
  -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +{ echo "$as_me:$LINENO: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
   if test "${ac_cv_prog_CC+set}" = set; then
     echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  @@ -1414,74 +1819,34 @@
     IFS=$as_save_IFS
     test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
  -  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
  +  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
       ac_cv_prog_CC="${ac_tool_prefix}cc"
       echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
       break 2
     fi
   done
   done
  +IFS=$as_save_IFS
   
   fi
   fi
   CC=$ac_cv_prog_CC
   if test -n "$CC"; then
  -  echo "$as_me:$LINENO: result: $CC" >&5
  -echo "${ECHO_T}$CC" >&6
  -else
  -  echo "$as_me:$LINENO: result: no" >&5
  -echo "${ECHO_T}no" >&6
  -fi
  -
  -fi
  -if test -z "$ac_cv_prog_CC"; then
  -  ac_ct_CC=$CC
  -  # Extract the first word of "cc", so it can be a program name with args.
  -set dummy cc; ac_word=$2
  -echo "$as_me:$LINENO: checking for $ac_word" >&5
  -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
  -  echo $ECHO_N "(cached) $ECHO_C" >&6
  -else
  -  if test -n "$ac_ct_CC"; then
  -  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
  -else
  -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  -for as_dir in $PATH
  -do
  -  IFS=$as_save_IFS
  -  test -z "$as_dir" && as_dir=.
  -  for ac_exec_ext in '' $ac_executable_extensions; do
  -  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
  -    ac_cv_prog_ac_ct_CC="cc"
  -    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
  -    break 2
  -  fi
  -done
  -done
  -
  -fi
  -fi
  -ac_ct_CC=$ac_cv_prog_ac_ct_CC
  -if test -n "$ac_ct_CC"; then
  -  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
  -echo "${ECHO_T}$ac_ct_CC" >&6
  +  { echo "$as_me:$LINENO: result: $CC" >&5
  +echo "${ECHO_T}$CC" >&6; }
   else
  -  echo "$as_me:$LINENO: result: no" >&5
  -echo "${ECHO_T}no" >&6
  +  { echo "$as_me:$LINENO: result: no" >&5
  +echo "${ECHO_T}no" >&6; }
   fi
   
  -  CC=$ac_ct_CC
  -else
  -  CC="$ac_cv_prog_CC"
  -fi
   
  +  fi
   fi
   if test -z "$CC"; then
     # Extract the first word of "cc", so it can be a program name with args.
   set dummy cc; ac_word=$2
  -echo "$as_me:$LINENO: checking for $ac_word" >&5
  -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +{ echo "$as_me:$LINENO: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
   if test "${ac_cv_prog_CC+set}" = set; then
     echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  @@ -1495,7 +1860,7 @@
     IFS=$as_save_IFS
     test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
  -  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
  +  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
       if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
          ac_prog_rejected=yes
          continue
  @@ -1506,6 +1871,7 @@
     fi
   done
   done
  +IFS=$as_save_IFS
   
   if test $ac_prog_rejected = yes; then
     # We found a bogon in the path, so make sure we never use it.
  @@ -1523,22 +1889,23 @@
   fi
   CC=$ac_cv_prog_CC
   if test -n "$CC"; then
  -  echo "$as_me:$LINENO: result: $CC" >&5
  -echo "${ECHO_T}$CC" >&6
  +  { echo "$as_me:$LINENO: result: $CC" >&5
  +echo "${ECHO_T}$CC" >&6; }
   else
  -  echo "$as_me:$LINENO: result: no" >&5
  -echo "${ECHO_T}no" >&6
  +  { echo "$as_me:$LINENO: result: no" >&5
  +echo "${ECHO_T}no" >&6; }
   fi
   
  +
   fi
   if test -z "$CC"; then
     if test -n "$ac_tool_prefix"; then
  -  for ac_prog in cl
  +  for ac_prog in cl.exe
     do
       # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
   set dummy $ac_tool_prefix$ac_prog; ac_word=$2
  -echo "$as_me:$LINENO: checking for $ac_word" >&5
  -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +{ echo "$as_me:$LINENO: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
   if test "${ac_cv_prog_CC+set}" = set; then
     echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  @@ -1551,36 +1918,38 @@
     IFS=$as_save_IFS
     test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
  -  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
  +  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
       ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
       echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
       break 2
     fi
   done
   done
  +IFS=$as_save_IFS
   
   fi
   fi
   CC=$ac_cv_prog_CC
   if test -n "$CC"; then
  -  echo "$as_me:$LINENO: result: $CC" >&5
  -echo "${ECHO_T}$CC" >&6
  +  { echo "$as_me:$LINENO: result: $CC" >&5
  +echo "${ECHO_T}$CC" >&6; }
   else
  -  echo "$as_me:$LINENO: result: no" >&5
  -echo "${ECHO_T}no" >&6
  +  { echo "$as_me:$LINENO: result: no" >&5
  +echo "${ECHO_T}no" >&6; }
   fi
   
  +
       test -n "$CC" && break
     done
   fi
   if test -z "$CC"; then
     ac_ct_CC=$CC
  -  for ac_prog in cl
  +  for ac_prog in cl.exe
   do
     # Extract the first word of "$ac_prog", so it can be a program name with args.
   set dummy $ac_prog; ac_word=$2
  -echo "$as_me:$LINENO: checking for $ac_word" >&5
  -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  +{ echo "$as_me:$LINENO: checking for $ac_word" >&5
  +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
   if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
     echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  @@ -1593,29 +1962,45 @@
     IFS=$as_save_IFS
     test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
  -  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
  +  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
       ac_cv_prog_ac_ct_CC="$ac_prog"
       echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
       break 2
     fi
   done
   done
  +IFS=$as_save_IFS
   
   fi
   fi
   ac_ct_CC=$ac_cv_prog_ac_ct_CC
   if test -n "$ac_ct_CC"; then
  -  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
  -echo "${ECHO_T}$ac_ct_CC" >&6
  +  { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
  +echo "${ECHO_T}$ac_ct_CC" >&6; }
   else
  -  echo "$as_me:$LINENO: result: no" >&5
  -echo "${ECHO_T}no" >&6
  +  { echo "$as_me:$LINENO: result: no" >&5
  +echo "${ECHO_T}no" >&6; }
   fi
   
  +
     test -n "$ac_ct_CC" && break
   done
   
  -  CC=$ac_ct_CC
  +  if test "x$ac_ct_CC" = x; then
  +    CC=""
  +  else
  +    case $cross_compiling:$ac_tool_warned in
  +yes:)
  +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
  +whose name does not start with the host triplet.  If you think this
  +configuration is useful to you, please write to autoconf@gnu.org." >&5
  +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
  +whose name does not start with the host triplet.  If you think this
  +configuration is useful to you, please write to autoconf@gnu.org." >&2;}
  +ac_tool_warned=yes ;;
  +esac
  +    CC=$ac_ct_CC
  +  fi
   fi
   
   fi
  @@ -1628,21 +2013,35 @@
      { (exit 1); exit 1; }; }
   
   # Provide some information about the compiler.
  -echo "$as_me:$LINENO:" \
  -     "checking for C compiler version" >&5
  +echo "$as_me:$LINENO: checking for C compiler version" >&5
   ac_compiler=`set X $ac_compile; echo $2`
  -{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
  -  (eval $ac_compiler --version </dev/null >&5) 2>&5
  +{ (ac_try="$ac_compiler --version >&5"
  +case "(($ac_try" in
  +  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
  +  *) ac_try_echo=$ac_try;;
  +esac
  +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
  +  (eval "$ac_compiler --version >&5") 2>&5
     ac_status=$?
     echo "$as_me:$LINENO: \$? = $ac_status" >&5
     (exit $ac_status); }
  -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
  -  (eval $ac_compiler -v </dev/null >&5) 2>&5
  +{ (ac_try="$ac_compiler -v >&5"
  +case "(($ac_try" in
  +  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
  +  *) ac_try_echo=$ac_try;;
  +esac
  +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
  +  (eval "$ac_compiler -v >&5") 2>&5
     ac_status=$?
     echo "$as_me:$LINENO: \$? = $ac_status" >&5
     (exit $ac_status); }
  -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
  -  (eval $ac_compiler -V </dev/null >&5) 2>&5
  +{ (ac_try="$ac_compiler -V >&5"
  +case "(($ac_try" in
  +  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
  +  *) ac_try_echo=$ac_try;;
  +esac
  +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
  +  (eval "$ac_compiler -V >&5") 2>&5
     ac_status=$?
     echo "$as_me:$LINENO: \$? = $ac_status" >&5
     (exit $ac_status); }
  @@ -1667,47 +2066,77 @@
   # Try to create an executable without -o first, disregard a.out.
   # It will help us diagnose broken compilers, and finding out an intuition
   # of exeext.
  -echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
  -echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6
  +{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
  +echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; }
   ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
  -if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
  -  (eval $ac_link_default) 2>&5
  +#
  +# List of possible output files, starting from the most likely.
  +# The algorithm is not robust to junk in `.', hence go to wildcards (a.*)
  +# only as a last resort.  b.out is created by i960 compilers.
  +ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out'
  +#
  +# The IRIX 6 linker writes into existing files which may not be
  +# executable, retaining their permissions.  Remove them first so a
  +# subsequent execution test works.
  +ac_rmfiles=
  +for ac_file in $ac_files
  +do
  +  case $ac_file in
  +    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
  +    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
  +  esac
  +done
  +rm -f $ac_rmfiles
  +
  +if { (ac_try="$ac_link_default"
  +case "(($ac_try" in
  +  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
  +  *) ac_try_echo=$ac_try;;
  +esac
  +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
  +  (eval "$ac_link_default") 2>&5
     ac_status=$?
     echo "$as_me:$LINENO: \$? = $ac_status" >&5
     (exit $ac_status); }; then
  -  # Find the output, starting from the most likely.  This scheme is
  -# not robust to junk in `.', hence go to wildcards (a.*) only as a last
  -# resort.
  -
  -# Be careful to initialize this variable, since it used to be cached.
  -# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
  -ac_cv_exeext=
  -# b.out is created by i960 compilers.
  -for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
  +  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
  +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
  +# in a Makefile.  We should not override ac_cv_exeext if it was cached,
  +# so that the user can short-circuit this test for compilers unknown to
  +# Autoconf.
  +for ac_file in $ac_files ''
   do
     test -f "$ac_file" || continue
     case $ac_file in
  -    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
  -	;;
  -    conftest.$ac_ext )
  -	# This is the source file.
  +    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj )
   	;;
       [ab].out )
   	# We found the default executable, but exeext='' is most
   	# certainly right.
   	break;;
       *.* )
  -	ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
  -	# FIXME: I believe we export ac_cv_exeext for Libtool,
  -	# but it would be cool to find out if it's true.  Does anybody
  -	# maintain Libtool? --akim.
  -	export ac_cv_exeext
  +        if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
  +	then :; else
  +	   ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
  +	fi
  +	# We set ac_cv_exeext here because the later test for it is not
  +	# safe: cross compilers may not add the suffix if given an `-o'
  +	# argument, so we may need to know it at that point already.
  +	# Even if this section looks crufty: it has the advantage of
  +	# actually working.
   	break;;
       * )
   	break;;
     esac
   done
  +test "$ac_cv_exeext" = no && ac_cv_exeext=
  +
   else
  +  ac_file=''
  +fi
  +
  +{ echo "$as_me:$LINENO: result: $ac_file" >&5
  +echo "${ECHO_T}$ac_file" >&6; }
  +if test -z "$ac_file"; then
     echo "$as_me: failed program was:" >&5
   sed 's/^/| /' conftest.$ac_ext >&5
   
  @@ -1719,19 +2148,21 @@
   fi
   
   ac_exeext=$ac_cv_exeext
  -echo "$as_me:$LINENO: result: $ac_file" >&5
  -echo "${ECHO_T}$ac_file" >&6
   
  -# Check the compiler produces executables we can run.  If not, either
  +# Check that the compiler produces executables we can run.  If not, either
   # the compiler is broken, or we cross compile.
  -echo "$as_me:$LINENO: checking whether the C compiler works" >&5
  -echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
  +{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5
  +echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; }
   # FIXME: These cross compiler hacks should be removed for Autoconf 3.0
   # If not cross compiling, check that we can run a simple program.
   if test "$cross_compiling" != yes; then
     if { ac_try='./$ac_file'
  -  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  -  (eval $ac_try) 2>&5
  +  { (case "(($ac_try" in
  +  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
  +  *) ac_try_echo=$ac_try;;
  +esac
  +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
  +  (eval "$ac_try") 2>&5
     ac_status=$?
     echo "$as_me:$LINENO: \$? = $ac_status" >&5
     (exit $ac_status); }; }; then
  @@ -1750,22 +2181,27 @@
       fi
     fi
   fi
  -echo "$as_me:$LINENO: result: yes" >&5
  -echo "${ECHO_T}yes" >&6
  +{ echo "$as_me:$LINENO: result: yes" >&5
  +echo "${ECHO_T}yes" >&6; }
   
   rm -f a.out a.exe conftest$ac_cv_exeext b.out
   ac_clean_files=$ac_clean_files_save
  -# Check the compiler produces executables we can run.  If not, either
  +# Check that the compiler produces executables we can run.  If not, either
   # the compiler is broken, or we cross compile.
  -echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
  -echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
  -echo "$as_me:$LINENO: result: $cross_compiling" >&5
  -echo "${ECHO_T}$cross_compiling" >&6
  -
  -echo "$as_me:$LINENO: checking for suffix of executables" >&5
  -echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
  -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
  -  (eval $ac_link) 2>&5
  +{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
  +echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; }
  +{ echo "$as_me:$LINENO: result: $cross_compiling" >&5
  +echo "${ECHO_T}$cross_compiling" >&6; }
  +
  +{ echo "$as_me:$LINENO: checking for suffix of executables" >&5
  +echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; }
  +if { (ac_try="$ac_link"
  +case "(($ac_try" in
  +  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
  +  *) ac_try_echo=$ac_try;;
  +esac
  +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
  +  (eval "$ac_link") 2>&5
     ac_status=$?
     echo "$as_me:$LINENO: \$? = $ac_status" >&5
     (exit $ac_status); }; then
  @@ -1776,9 +2212,8 @@
   for ac_file in conftest.exe conftest conftest.*; do
     test -f "$ac_file" || continue
     case $ac_file in
  -    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
  +    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
       *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
  -	  export ac_cv_exeext
   	  break;;
       * ) break;;
     esac
  @@ -1792,14 +2227,14 @@
   fi
   
   rm -f conftest$ac_cv_exeext
  -echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
  -echo "${ECHO_T}$ac_cv_exeext" >&6
  +{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
  +echo "${ECHO_T}$ac_cv_exeext" >&6; }
   
   rm -f conftest.$ac_ext
   EXEEXT=$ac_cv_exeext
   ac_exeext=$EXEEXT
  -echo "$as_me:$LINENO: checking for suffix of object files" >&5
  -echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
  +{ echo "$as_me:$LINENO: checking for suffix of object files" >&5
  +echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; }
   if test "${ac_cv_objext+set}" = set; then
     echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  @@ -1819,14 +2254,20 @@
   }
   _ACEOF
   rm -f conftest.o conftest.obj
  -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  -  (eval $ac_compile) 2>&5
  +if { (ac_try="$ac_compile"
  +case "(($ac_try" in
  +  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
  +  *) ac_try_echo=$ac_try;;
  +esac
  +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
  +  (eval "$ac_compile") 2>&5
     ac_status=$?
     echo "$as_me:$LINENO: \$? = $ac_status" >&5
     (exit $ac_status); }; then
  -  for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
  +  for ac_file in conftest.o conftest.obj conftest.*; do
  +  test -f "$ac_file" || continue;
     case $ac_file in
  -    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
  +    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;;
       *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
          break;;
     esac
  @@ -1844,12 +2285,12 @@
   
   rm -f conftest.$ac_cv_objext conftest.$ac_ext
   fi
  -echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
  -echo "${ECHO_T}$ac_cv_objext" >&6
  +{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
  +echo "${ECHO_T}$ac_cv_objext" >&6; }
   OBJEXT=$ac_cv_objext
   ac_objext=$OBJEXT
  -echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
  -echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
  +{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
  +echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; }
   if test "${ac_cv_c_compiler_gnu+set}" = set; then
     echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  @@ -1872,50 +2313,49 @@
   }
   _ACEOF
   rm -f conftest.$ac_objext
  -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  -  (eval $ac_compile) 2>conftest.er1
  +if { (ac_try="$ac_compile"
  +case "(($ac_try" in
  +  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
  +  *) ac_try_echo=$ac_try;;
  +esac
  +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
  +  (eval "$ac_compile") 2>conftest.er1
     ac_status=$?
     grep -v '^ *+' conftest.er1 >conftest.err
     rm -f conftest.er1
     cat conftest.err >&5
     echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); } &&
  -	 { ac_try='test -z "$ac_c_werror_flag"
  -			 || test ! -s conftest.err'
  -  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  -  (eval $ac_try) 2>&5
  -  ac_status=$?
  -  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); }; } &&
  -	 { ac_try='test -s conftest.$ac_objext'
  -  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  -  (eval $ac_try) 2>&5
  -  ac_status=$?
  -  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); }; }; then
  +  (exit $ac_status); } && {
  +	 test -z "$ac_c_werror_flag" ||
  +	 test ! -s conftest.err
  +       } && test -s conftest.$ac_objext; then
     ac_compiler_gnu=yes
   else
     echo "$as_me: failed program was:" >&5
   sed 's/^/| /' conftest.$ac_ext >&5
   
  -ac_compiler_gnu=no
  +	ac_compiler_gnu=no
   fi
  -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  +
  +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
   ac_cv_c_compiler_gnu=$ac_compiler_gnu
   
   fi
  -echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
  -echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
  +{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
  +echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; }
   GCC=`test $ac_compiler_gnu = yes && echo yes`
   ac_test_CFLAGS=${CFLAGS+set}
   ac_save_CFLAGS=$CFLAGS
  -CFLAGS="-g"
  -echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
  -echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
  +{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
  +echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; }
   if test "${ac_cv_prog_cc_g+set}" = set; then
     echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  cat >conftest.$ac_ext <<_ACEOF
  +  ac_save_c_werror_flag=$ac_c_werror_flag
  +   ac_c_werror_flag=yes
  +   ac_cv_prog_cc_g=no
  +   CFLAGS="-g"
  +   cat >conftest.$ac_ext <<_ACEOF
   /* confdefs.h.  */
   _ACEOF
   cat confdefs.h >>conftest.$ac_ext
  @@ -1931,38 +2371,118 @@
   }
   _ACEOF
   rm -f conftest.$ac_objext
  -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  -  (eval $ac_compile) 2>conftest.er1
  +if { (ac_try="$ac_compile"
  +case "(($ac_try" in
  +  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
  +  *) ac_try_echo=$ac_try;;
  +esac
  +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
  +  (eval "$ac_compile") 2>conftest.er1
     ac_status=$?
     grep -v '^ *+' conftest.er1 >conftest.err
     rm -f conftest.er1
     cat conftest.err >&5
     echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); } &&
  -	 { ac_try='test -z "$ac_c_werror_flag"
  -			 || test ! -s conftest.err'
  -  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  -  (eval $ac_try) 2>&5
  +  (exit $ac_status); } && {
  +	 test -z "$ac_c_werror_flag" ||
  +	 test ! -s conftest.err
  +       } && test -s conftest.$ac_objext; then
  +  ac_cv_prog_cc_g=yes
  +else
  +  echo "$as_me: failed program was:" >&5
  +sed 's/^/| /' conftest.$ac_ext >&5
  +
  +	CFLAGS=""
  +      cat >conftest.$ac_ext <<_ACEOF
  +/* confdefs.h.  */
  +_ACEOF
  +cat confdefs.h >>conftest.$ac_ext
  +cat >>conftest.$ac_ext <<_ACEOF
  +/* end confdefs.h.  */
  +
  +int
  +main ()
  +{
  +
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (ac_try="$ac_compile"
  +case "(($ac_try" in
  +  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
  +  *) ac_try_echo=$ac_try;;
  +esac
  +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
  +  (eval "$ac_compile") 2>conftest.er1
     ac_status=$?
  +  grep -v '^ *+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
     echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); }; } &&
  -	 { ac_try='test -s conftest.$ac_objext'
  -  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  -  (eval $ac_try) 2>&5
  +  (exit $ac_status); } && {
  +	 test -z "$ac_c_werror_flag" ||
  +	 test ! -s conftest.err
  +       } && test -s conftest.$ac_objext; then
  +  :
  +else
  +  echo "$as_me: failed program was:" >&5
  +sed 's/^/| /' conftest.$ac_ext >&5
  +
  +	ac_c_werror_flag=$ac_save_c_werror_flag
  +	 CFLAGS="-g"
  +	 cat >conftest.$ac_ext <<_ACEOF
  +/* confdefs.h.  */
  +_ACEOF
  +cat confdefs.h >>conftest.$ac_ext
  +cat >>conftest.$ac_ext <<_ACEOF
  +/* end confdefs.h.  */
  +
  +int
  +main ()
  +{
  +
  +  ;
  +  return 0;
  +}
  +_ACEOF
  +rm -f conftest.$ac_objext
  +if { (ac_try="$ac_compile"
  +case "(($ac_try" in
  +  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
  +  *) ac_try_echo=$ac_try;;
  +esac
  +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
  +  (eval "$ac_compile") 2>conftest.er1
     ac_status=$?
  +  grep -v '^ *+' conftest.er1 >conftest.err
  +  rm -f conftest.er1
  +  cat conftest.err >&5
     echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); }; }; then
  +  (exit $ac_status); } && {
  +	 test -z "$ac_c_werror_flag" ||
  +	 test ! -s conftest.err
  +       } && test -s conftest.$ac_objext; then
     ac_cv_prog_cc_g=yes
   else
     echo "$as_me: failed program was:" >&5
   sed 's/^/| /' conftest.$ac_ext >&5
   
  -ac_cv_prog_cc_g=no
  +
  +fi
  +
  +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
   fi
  -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  +
  +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
  +fi
  +
  +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
  +   ac_c_werror_flag=$ac_save_c_werror_flag
   fi
  -echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
  -echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
  +{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
  +echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; }
   if test "$ac_test_CFLAGS" = set; then
     CFLAGS=$ac_save_CFLAGS
   elif test $ac_cv_prog_cc_g = yes; then
  @@ -1978,12 +2498,12 @@
       CFLAGS=
     fi
   fi
  -echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
  -echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
  -if test "${ac_cv_prog_cc_stdc+set}" = set; then
  +{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
  +echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; }
  +if test "${ac_cv_prog_cc_c89+set}" = set; then
     echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  ac_cv_prog_cc_stdc=no
  +  ac_cv_prog_cc_c89=no
   ac_save_CC=$CC
   cat >conftest.$ac_ext <<_ACEOF
   /* confdefs.h.  */
  @@ -2017,12 +2537,17 @@
   /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
      function prototypes and stuff, but not '\xHH' hex character constants.
      These don't provoke an error unfortunately, instead are silently treated
  -   as 'x'.  The following induces an error, until -std1 is added to get
  +   as 'x'.  The following induces an error, until -std is added to get
      proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
      array size at least.  It's necessary to write '\x00'==0 to get something
  -   that's true only with -std1.  */
  +   that's true only with -std.  */
   int osf4_cc_array ['\x00' == 0 ? 1 : -1];
   
  +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
  +   inside strings and character constants.  */
  +#define FOO(x) 'x'
  +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
  +
   int test (int i, double x);
   struct s1 {int (*f) (int a);};
   struct s2 {int (*f) (double a);};
  @@ -2037,269 +2562,119 @@
     return 0;
   }
   _ACEOF
  -# Don't try gcc -ansi; that turns off useful extensions and
  -# breaks some systems' header files.
  -# AIX			-qlanglvl=ansi
  -# Ultrix and OSF/1	-std1
  -# HP-UX 10.20 and later	-Ae
  -# HP-UX older versions	-Aa -D_HPUX_SOURCE
  -# SVR4			-Xc -D__EXTENSIONS__
  -for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
  +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
  +	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
   do
     CC="$ac_save_CC $ac_arg"
     rm -f conftest.$ac_objext
  -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  -  (eval $ac_compile) 2>conftest.er1
  +if { (ac_try="$ac_compile"
  +case "(($ac_try" in
  +  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
  +  *) ac_try_echo=$ac_try;;
  +esac
  +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
  +  (eval "$ac_compile") 2>conftest.er1
     ac_status=$?
     grep -v '^ *+' conftest.er1 >conftest.err
     rm -f conftest.er1
     cat conftest.err >&5
     echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); } &&
  -	 { ac_try='test -z "$ac_c_werror_flag"
  -			 || test ! -s conftest.err'
  -  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  -  (eval $ac_try) 2>&5
  -  ac_status=$?
  -  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); }; } &&
  -	 { ac_try='test -s conftest.$ac_objext'
  -  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  -  (eval $ac_try) 2>&5
  -  ac_status=$?
  -  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); }; }; then
  -  ac_cv_prog_cc_stdc=$ac_arg
  -break
  +  (exit $ac_status); } && {
  +	 test -z "$ac_c_werror_flag" ||
  +	 test ! -s conftest.err
  +       } && test -s conftest.$ac_objext; then
  +  ac_cv_prog_cc_c89=$ac_arg
   else
     echo "$as_me: failed program was:" >&5
   sed 's/^/| /' conftest.$ac_ext >&5
   
  +
   fi
  -rm -f conftest.err conftest.$ac_objext
  +
  +rm -f core conftest.err conftest.$ac_objext
  +  test "x$ac_cv_prog_cc_c89" != "xno" && break
   done
  -rm -f conftest.$ac_ext conftest.$ac_objext
  +rm -f conftest.$ac_ext
   CC=$ac_save_CC
   
   fi
  -
  -case "x$ac_cv_prog_cc_stdc" in
  -  x|xno)
  -    echo "$as_me:$LINENO: result: none needed" >&5
  -echo "${ECHO_T}none needed" >&6 ;;
  +# AC_CACHE_VAL
  +case "x$ac_cv_prog_cc_c89" in
  +  x)
  +    { echo "$as_me:$LINENO: result: none needed" >&5
  +echo "${ECHO_T}none needed" >&6; } ;;
  +  xno)
  +    { echo "$as_me:$LINENO: result: unsupported" >&5
  +echo "${ECHO_T}unsupported" >&6; } ;;
     *)
  -    echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
  -echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
  -    CC="$CC $ac_cv_prog_cc_stdc" ;;
  +    CC="$CC $ac_cv_prog_cc_c89"
  +    { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
  +echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;;
   esac
   
  -# Some people use a C++ compiler to compile C.  Since we use `exit',
  -# in C++ we need to declare it.  In case someone uses the same compiler
  -# for both compiling C and C++ we need to have the C++ compiler decide
  -# the declaration of exit, since it's the most demanding environment.
  -cat >conftest.$ac_ext <<_ACEOF
  -#ifndef __cplusplus
  -  choke me
  -#endif
  -_ACEOF
  -rm -f conftest.$ac_objext
  -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  -  (eval $ac_compile) 2>conftest.er1
  -  ac_status=$?
  -  grep -v '^ *+' conftest.er1 >conftest.err
  -  rm -f conftest.er1
  -  cat conftest.err >&5
  -  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); } &&
  -	 { ac_try='test -z "$ac_c_werror_flag"
  -			 || test ! -s conftest.err'
  -  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  -  (eval $ac_try) 2>&5
  -  ac_status=$?
  -  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); }; } &&
  -	 { ac_try='test -s conftest.$ac_objext'
  -  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  -  (eval $ac_try) 2>&5
  -  ac_status=$?
  -  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); }; }; then
  -  for ac_declaration in \
  -   '' \
  -   'extern "C" void std::exit (int) throw (); using std::exit;' \
  -   'extern "C" void std::exit (int); using std::exit;' \
  -   'extern "C" void exit (int) throw ();' \
  -   'extern "C" void exit (int);' \
  -   'void exit (int);'
  +
  +ac_ext=c
  +ac_cpp='$CPP $CPPFLAGS'
  +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  +ac_compiler_gnu=$ac_cv_c_compiler_gnu
  +
  +ac_ext=c
  +ac_cpp='$CPP $CPPFLAGS'
  +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  +ac_compiler_gnu=$ac_cv_c_compiler_gnu
  +{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
  +echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; }
  +# On Suns, sometimes $CPP names a directory.
  +if test -n "$CPP" && test -d "$CPP"; then
  +  CPP=
  +fi
  +if test -z "$CPP"; then
  +  if test "${ac_cv_prog_CPP+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +      # Double quotes because CPP needs to be expanded
  +    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
  +    do
  +      ac_preproc_ok=false
  +for ac_c_preproc_warn_flag in '' yes
   do
  +  # Use a header file that comes with gcc, so configuring glibc
  +  # with a fresh cross-compiler works.
  +  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
  +  # <limits.h> exists even on freestanding compilers.
  +  # On the NeXT, cc -E runs the code through the compiler's parser,
  +  # not just through cpp. "Syntax error" is here to catch this case.
     cat >conftest.$ac_ext <<_ACEOF
   /* confdefs.h.  */
   _ACEOF
   cat confdefs.h >>conftest.$ac_ext
   cat >>conftest.$ac_ext <<_ACEOF
   /* end confdefs.h.  */
  -$ac_declaration
  -#include <stdlib.h>
  -int
  -main ()
  -{
  -exit (42);
  -  ;
  -  return 0;
  -}
  +#ifdef __STDC__
  +# include <limits.h>
  +#else
  +# include <assert.h>
  +#endif
  +		     Syntax error
   _ACEOF
  -rm -f conftest.$ac_objext
  -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  -  (eval $ac_compile) 2>conftest.er1
  +if { (ac_try="$ac_cpp conftest.$ac_ext"
  +case "(($ac_try" in
  +  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
  +  *) ac_try_echo=$ac_try;;
  +esac
  +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
  +  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
     ac_status=$?
     grep -v '^ *+' conftest.er1 >conftest.err
     rm -f conftest.er1
     cat conftest.err >&5
     echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); } &&
  -	 { ac_try='test -z "$ac_c_werror_flag"
  -			 || test ! -s conftest.err'
  -  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  -  (eval $ac_try) 2>&5
  -  ac_status=$?
  -  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); }; } &&
  -	 { ac_try='test -s conftest.$ac_objext'
  -  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  -  (eval $ac_try) 2>&5
  -  ac_status=$?
  -  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); }; }; then
  -  :
  -else
  -  echo "$as_me: failed program was:" >&5
  -sed 's/^/| /' conftest.$ac_ext >&5
  -
  -continue
  -fi
  -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  -  cat >conftest.$ac_ext <<_ACEOF
  -/* confdefs.h.  */
  -_ACEOF
  -cat confdefs.h >>conftest.$ac_ext
  -cat >>conftest.$ac_ext <<_ACEOF
  -/* end confdefs.h.  */
  -$ac_declaration
  -int
  -main ()
  -{
  -exit (42);
  -  ;
  -  return 0;
  -}
  -_ACEOF
  -rm -f conftest.$ac_objext
  -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  -  (eval $ac_compile) 2>conftest.er1
  -  ac_status=$?
  -  grep -v '^ *+' conftest.er1 >conftest.err
  -  rm -f conftest.er1
  -  cat conftest.err >&5
  -  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); } &&
  -	 { ac_try='test -z "$ac_c_werror_flag"
  -			 || test ! -s conftest.err'
  -  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  -  (eval $ac_try) 2>&5
  -  ac_status=$?
  -  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); }; } &&
  -	 { ac_try='test -s conftest.$ac_objext'
  -  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  -  (eval $ac_try) 2>&5
  -  ac_status=$?
  -  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); }; }; then
  -  break
  -else
  -  echo "$as_me: failed program was:" >&5
  -sed 's/^/| /' conftest.$ac_ext >&5
  -
  -fi
  -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  -done
  -rm -f conftest*
  -if test -n "$ac_declaration"; then
  -  echo '#ifdef __cplusplus' >>confdefs.h
  -  echo $ac_declaration      >>confdefs.h
  -  echo '#endif'             >>confdefs.h
  -fi
  -
  -else
  -  echo "$as_me: failed program was:" >&5
  -sed 's/^/| /' conftest.$ac_ext >&5
  -
  -fi
  -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  -ac_ext=c
  -ac_cpp='$CPP $CPPFLAGS'
  -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  -ac_compiler_gnu=$ac_cv_c_compiler_gnu
  -
  -ac_ext=c
  -ac_cpp='$CPP $CPPFLAGS'
  -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  -ac_compiler_gnu=$ac_cv_c_compiler_gnu
  -echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
  -echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
  -# On Suns, sometimes $CPP names a directory.
  -if test -n "$CPP" && test -d "$CPP"; then
  -  CPP=
  -fi
  -if test -z "$CPP"; then
  -  if test "${ac_cv_prog_CPP+set}" = set; then
  -  echo $ECHO_N "(cached) $ECHO_C" >&6
  -else
  -      # Double quotes because CPP needs to be expanded
  -    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
  -    do
  -      ac_preproc_ok=false
  -for ac_c_preproc_warn_flag in '' yes
  -do
  -  # Use a header file that comes with gcc, so configuring glibc
  -  # with a fresh cross-compiler works.
  -  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
  -  # <limits.h> exists even on freestanding compilers.
  -  # On the NeXT, cc -E runs the code through the compiler's parser,
  -  # not just through cpp. "Syntax error" is here to catch this case.
  -  cat >conftest.$ac_ext <<_ACEOF
  -/* confdefs.h.  */
  -_ACEOF
  -cat confdefs.h >>conftest.$ac_ext
  -cat >>conftest.$ac_ext <<_ACEOF
  -/* end confdefs.h.  */
  -#ifdef __STDC__
  -# include <limits.h>
  -#else
  -# include <assert.h>
  -#endif
  -		     Syntax error
  -_ACEOF
  -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
  -  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  -  ac_status=$?
  -  grep -v '^ *+' conftest.er1 >conftest.err
  -  rm -f conftest.er1
  -  cat conftest.err >&5
  -  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); } >/dev/null; then
  -  if test -s conftest.err; then
  -    ac_cpp_err=$ac_c_preproc_warn_flag
  -    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
  -  else
  -    ac_cpp_err=
  -  fi
  -else
  -  ac_cpp_err=yes
  -fi
  -if test -z "$ac_cpp_err"; then
  +  (exit $ac_status); } >/dev/null && {
  +	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
  +	 test ! -s conftest.err
  +       }; then
     :
   else
     echo "$as_me: failed program was:" >&5
  @@ -2308,9 +2683,10 @@
     # Broken: fails on valid input.
   continue
   fi
  +
   rm -f conftest.err conftest.$ac_ext
   
  -  # OK, works on sane cases.  Now check whether non-existent headers
  +  # OK, works on sane cases.  Now check whether nonexistent headers
     # can be detected and how.
     cat >conftest.$ac_ext <<_ACEOF
   /* confdefs.h.  */
  @@ -2320,24 +2696,22 @@
   /* end confdefs.h.  */
   #include <ac_nonexistent.h>
   _ACEOF
  -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
  -  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  +if { (ac_try="$ac_cpp conftest.$ac_ext"
  +case "(($ac_try" in
  +  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
  +  *) ac_try_echo=$ac_try;;
  +esac
  +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
  +  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
     ac_status=$?
     grep -v '^ *+' conftest.er1 >conftest.err
     rm -f conftest.er1
     cat conftest.err >&5
     echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); } >/dev/null; then
  -  if test -s conftest.err; then
  -    ac_cpp_err=$ac_c_preproc_warn_flag
  -    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
  -  else
  -    ac_cpp_err=
  -  fi
  -else
  -  ac_cpp_err=yes
  -fi
  -if test -z "$ac_cpp_err"; then
  +  (exit $ac_status); } >/dev/null && {
  +	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
  +	 test ! -s conftest.err
  +       }; then
     # Broken: success on invalid input.
   continue
   else
  @@ -2348,6 +2722,7 @@
   ac_preproc_ok=:
   break
   fi
  +
   rm -f conftest.err conftest.$ac_ext
   
   done
  @@ -2365,8 +2740,8 @@
   else
     ac_cv_prog_CPP=$CPP
   fi
  -echo "$as_me:$LINENO: result: $CPP" >&5
  -echo "${ECHO_T}$CPP" >&6
  +{ echo "$as_me:$LINENO: result: $CPP" >&5
  +echo "${ECHO_T}$CPP" >&6; }
   ac_preproc_ok=false
   for ac_c_preproc_warn_flag in '' yes
   do
  @@ -2389,24 +2764,22 @@
   #endif
   		     Syntax error
   _ACEOF
  -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
  -  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  +if { (ac_try="$ac_cpp conftest.$ac_ext"
  +case "(($ac_try" in
  +  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
  +  *) ac_try_echo=$ac_try;;
  +esac
  +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
  +  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
     ac_status=$?
     grep -v '^ *+' conftest.er1 >conftest.err
     rm -f conftest.er1
     cat conftest.err >&5
     echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); } >/dev/null; then
  -  if test -s conftest.err; then
  -    ac_cpp_err=$ac_c_preproc_warn_flag
  -    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
  -  else
  -    ac_cpp_err=
  -  fi
  -else
  -  ac_cpp_err=yes
  -fi
  -if test -z "$ac_cpp_err"; then
  +  (exit $ac_status); } >/dev/null && {
  +	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
  +	 test ! -s conftest.err
  +       }; then
     :
   else
     echo "$as_me: failed program was:" >&5
  @@ -2415,9 +2788,10 @@
     # Broken: fails on valid input.
   continue
   fi
  +
   rm -f conftest.err conftest.$ac_ext
   
  -  # OK, works on sane cases.  Now check whether non-existent headers
  +  # OK, works on sane cases.  Now check whether nonexistent headers
     # can be detected and how.
     cat >conftest.$ac_ext <<_ACEOF
   /* confdefs.h.  */
  @@ -2427,24 +2801,22 @@
   /* end confdefs.h.  */
   #include <ac_nonexistent.h>
   _ACEOF
  -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
  -  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  +if { (ac_try="$ac_cpp conftest.$ac_ext"
  +case "(($ac_try" in
  +  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
  +  *) ac_try_echo=$ac_try;;
  +esac
  +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
  +  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
     ac_status=$?
     grep -v '^ *+' conftest.er1 >conftest.err
     rm -f conftest.er1
     cat conftest.err >&5
     echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); } >/dev/null; then
  -  if test -s conftest.err; then
  -    ac_cpp_err=$ac_c_preproc_warn_flag
  -    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
  -  else
  -    ac_cpp_err=
  -  fi
  -else
  -  ac_cpp_err=yes
  -fi
  -if test -z "$ac_cpp_err"; then
  +  (exit $ac_status); } >/dev/null && {
  +	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
  +	 test ! -s conftest.err
  +       }; then
     # Broken: success on invalid input.
   continue
   else
  @@ -2455,6 +2827,7 @@
   ac_preproc_ok=:
   break
   fi
  +
   rm -f conftest.err conftest.$ac_ext
   
   done
  @@ -2477,12 +2850,11 @@
   ac_compiler_gnu=$ac_cv_c_compiler_gnu
   
   
  -echo "$as_me:$LINENO: checking for compilation debug mode" >&5
  -echo $ECHO_N "checking for compilation debug mode... $ECHO_C" >&6
  -# Check whether --enable-debug or --disable-debug was given.
  +{ echo "$as_me:$LINENO: checking for compilation debug mode" >&5
  +echo $ECHO_N "checking for compilation debug mode... $ECHO_C" >&6; }
  +# Check whether --enable-debug was given.
   if test "${enable_debug+set}" = set; then
  -  enableval="$enable_debug"
  -  x="enabled"
  +  enableval=$enable_debug; x="enabled"
   CFLAGS="-Wall -g"
   LDFLAGS="-g"
   debug=on
  @@ -2493,96 +2865,245 @@
   LDFLAGS=""
   debug=off
   
  -fi;
  -echo "$as_me:$LINENO: result: $x" >&5
  -echo "${ECHO_T}$x" >&6
  -
  -echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
  -echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
  -set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
  -if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
  +fi
  +
  +{ echo "$as_me:$LINENO: result: $x" >&5
  +echo "${ECHO_T}$x" >&6; }
  +
  +{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
  +echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; }
  +set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
  +if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then
     echo $ECHO_N "(cached) $ECHO_C" >&6
   else
     cat >conftest.make <<\_ACEOF
  +SHELL = /bin/sh
   all:
  -	@echo 'ac_maketemp="$(MAKE)"'
  +	@echo '@@@%%%=$(MAKE)=@@@%%%'
   _ACEOF
   # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
  -eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
  -if test -n "$ac_maketemp"; then
  -  eval ac_cv_prog_make_${ac_make}_set=yes
  -else
  -  eval ac_cv_prog_make_${ac_make}_set=no
  -fi
  +case `${MAKE-make} -f conftest.make 2>/dev/null` in
  +  *@@@%%%=?*=@@@%%%*)
  +    eval ac_cv_prog_make_${ac_make}_set=yes;;
  +  *)
  +    eval ac_cv_prog_make_${ac_make}_set=no;;
  +esac
   rm -f conftest.make
   fi
  -if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
  -  echo "$as_me:$LINENO: result: yes" >&5
  -echo "${ECHO_T}yes" >&6
  +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
  +  { echo "$as_me:$LINENO: result: yes" >&5
  +echo "${ECHO_T}yes" >&6; }
     SET_MAKE=
   else
  -  echo "$as_me:$LINENO: result: no" >&5
  -echo "${ECHO_T}no" >&6
  +  { echo "$as_me:$LINENO: result: no" >&5
  +echo "${ECHO_T}no" >&6; }
     SET_MAKE="MAKE=${MAKE-make}"
   fi
   
   
   
  -echo "$as_me:$LINENO: result: " >&5
  -echo "${ECHO_T}" >&6
  -echo "$as_me:$LINENO: result: ${T_MD}CHECK: Curses Environment${T_ME}" >&5
  -echo "${ECHO_T}${T_MD}CHECK: Curses Environment${T_ME}" >&6
  +{ echo "$as_me:$LINENO: result: " >&5
  +echo "${ECHO_T}" >&6; }
  +{ echo "$as_me:$LINENO: result: ${T_MD}CHECK: Curses Environment${T_ME}" >&5
  +echo "${ECHO_T}${T_MD}CHECK: Curses Environment${T_ME}" >&6; }
   
   
  -echo "$as_me:$LINENO: checking for additional include dir" >&5
  -echo $ECHO_N "checking for additional include dir... $ECHO_C" >&6
  +{ echo "$as_me:$LINENO: checking for additional include dir" >&5
  +echo $ECHO_N "checking for additional include dir... $ECHO_C" >&6; }
   
  -# Check whether --with-incdir or --without-incdir was given.
  +# Check whether --with-incdir was given.
   if test "${with_incdir+set}" = set; then
  -  withval="$with_incdir"
  -  CFLAGS="$CFLAGS -I$with_incdir"
  +  withval=$with_incdir; CFLAGS="$CFLAGS -I$with_incdir"
   CPPFLAGS="$CPPFLAGS -I$with_incdir"
   x="$with_incdir"
   
   else
     x="none particular"
   
  -fi; echo "$as_me:$LINENO: result: $x" >&5
  -echo "${ECHO_T}$x" >&6
  -echo "$as_me:$LINENO: checking for additional library dir" >&5
  -echo $ECHO_N "checking for additional library dir... $ECHO_C" >&6
  +fi
  +{ echo "$as_me:$LINENO: result: $x" >&5
  +echo "${ECHO_T}$x" >&6; }
  +{ echo "$as_me:$LINENO: checking for additional library dir" >&5
  +echo $ECHO_N "checking for additional library dir... $ECHO_C" >&6; }
   
  -# Check whether --with-libdir or --without-libdir was given.
  +# Check whether --with-libdir was given.
   if test "${with_libdir+set}" = set; then
  -  withval="$with_libdir"
  -  LDFLAGS="$LDFLAGS -L$with_libdir"
  +  withval=$with_libdir; LDFLAGS="$LDFLAGS -L$with_libdir"
   x="$with_libdir"
   
   else
     x="none particular"
   
  -fi; echo "$as_me:$LINENO: result: $x" >&5
  -echo "${ECHO_T}$x" >&6
  +fi
  +{ echo "$as_me:$LINENO: result: $x" >&5
  +echo "${ECHO_T}$x" >&6; }
  +
  +
  +
  +{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
  +echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; }
  +if test "${ac_cv_path_GREP+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  # Extract the first word of "grep ggrep" to use in msg output
  +if test -z "$GREP"; then
  +set dummy grep ggrep; ac_prog_name=$2
  +if test "${ac_cv_path_GREP+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  ac_path_GREP_found=false
  +# Loop through the user's path and test for each of PROGNAME-LIST
  +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
  +do
  +  IFS=$as_save_IFS
  +  test -z "$as_dir" && as_dir=.
  +  for ac_prog in grep ggrep; do
  +  for ac_exec_ext in '' $ac_executable_extensions; do
  +    ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
  +    { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
  +    # Check for GNU ac_path_GREP and select it if it is found.
  +  # Check for GNU $ac_path_GREP
  +case `"$ac_path_GREP" --version 2>&1` in
  +*GNU*)
  +  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
  +*)
  +  ac_count=0
  +  echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
  +  while :
  +  do
  +    cat "conftest.in" "conftest.in" >"conftest.tmp"
  +    mv "conftest.tmp" "conftest.in"
  +    cp "conftest.in" "conftest.nl"
  +    echo 'GREP' >> "conftest.nl"
  +    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
  +    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
  +    ac_count=`expr $ac_count + 1`
  +    if test $ac_count -gt ${ac_path_GREP_max-0}; then
  +      # Best one so far, save it but keep looking for a better one
  +      ac_cv_path_GREP="$ac_path_GREP"
  +      ac_path_GREP_max=$ac_count
  +    fi
  +    # 10*(2^10) chars as input seems more than enough
  +    test $ac_count -gt 10 && break
  +  done
  +  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
  +esac
  +
  +
  +    $ac_path_GREP_found && break 3
  +  done
  +done
  +
  +done
  +IFS=$as_save_IFS
  +
  +
  +fi
  +
  +GREP="$ac_cv_path_GREP"
  +if test -z "$GREP"; then
  +  { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
  +echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
  +   { (exit 1); exit 1; }; }
  +fi
  +
  +else
  +  ac_cv_path_GREP=$GREP
  +fi
  +
   
  +fi
  +{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5
  +echo "${ECHO_T}$ac_cv_path_GREP" >&6; }
  + GREP="$ac_cv_path_GREP"
   
   
  -echo "$as_me:$LINENO: checking for egrep" >&5
  -echo $ECHO_N "checking for egrep... $ECHO_C" >&6
  -if test "${ac_cv_prog_egrep+set}" = set; then
  +{ echo "$as_me:$LINENO: checking for egrep" >&5
  +echo $ECHO_N "checking for egrep... $ECHO_C" >&6; }
  +if test "${ac_cv_path_EGREP+set}" = set; then
  +  echo $ECHO_N "(cached) $ECHO_C" >&6
  +else
  +  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
  +   then ac_cv_path_EGREP="$GREP -E"
  +   else
  +     # Extract the first word of "egrep" to use in msg output
  +if test -z "$EGREP"; then
  +set dummy egrep; ac_prog_name=$2
  +if test "${ac_cv_path_EGREP+set}" = set; then
     echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  -  if echo a | (grep -E '(a|b)') >/dev/null 2>&1
  -    then ac_cv_prog_egrep='grep -E'
  -    else ac_cv_prog_egrep='egrep'
  +  ac_path_EGREP_found=false
  +# Loop through the user's path and test for each of PROGNAME-LIST
  +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
  +do
  +  IFS=$as_save_IFS
  +  test -z "$as_dir" && as_dir=.
  +  for ac_prog in egrep; do
  +  for ac_exec_ext in '' $ac_executable_extensions; do
  +    ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
  +    { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
  +    # Check for GNU ac_path_EGREP and select it if it is found.
  +  # Check for GNU $ac_path_EGREP
  +case `"$ac_path_EGREP" --version 2>&1` in
  +*GNU*)
  +  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
  +*)
  +  ac_count=0
  +  echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
  +  while :
  +  do
  +    cat "conftest.in" "conftest.in" >"conftest.tmp"
  +    mv "conftest.tmp" "conftest.in"
  +    cp "conftest.in" "conftest.nl"
  +    echo 'EGREP' >> "conftest.nl"
  +    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
  +    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
  +    ac_count=`expr $ac_count + 1`
  +    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
  +      # Best one so far, save it but keep looking for a better one
  +      ac_cv_path_EGREP="$ac_path_EGREP"
  +      ac_path_EGREP_max=$ac_count
       fi
  +    # 10*(2^10) chars as input seems more than enough
  +    test $ac_count -gt 10 && break
  +  done
  +  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
  +esac
  +
  +
  +    $ac_path_EGREP_found && break 3
  +  done
  +done
  +
  +done
  +IFS=$as_save_IFS
  +
  +
  +fi
  +
  +EGREP="$ac_cv_path_EGREP"
  +if test -z "$EGREP"; then
  +  { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
  +echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
  +   { (exit 1); exit 1; }; }
   fi
  -echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
  -echo "${ECHO_T}$ac_cv_prog_egrep" >&6
  - EGREP=$ac_cv_prog_egrep
  +
  +else
  +  ac_cv_path_EGREP=$EGREP
  +fi
  +
  +
  +   fi
  +fi
  +{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
  +echo "${ECHO_T}$ac_cv_path_EGREP" >&6; }
  + EGREP="$ac_cv_path_EGREP"
   
   
  -echo "$as_me:$LINENO: checking for ANSI C header files" >&5
  -echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
  +{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5
  +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; }
   if test "${ac_cv_header_stdc+set}" = set; then
     echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  @@ -2606,35 +3127,31 @@
   }
   _ACEOF
   rm -f conftest.$ac_objext
  -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  -  (eval $ac_compile) 2>conftest.er1
  +if { (ac_try="$ac_compile"
  +case "(($ac_try" in
  +  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
  +  *) ac_try_echo=$ac_try;;
  +esac
  +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
  +  (eval "$ac_compile") 2>conftest.er1
     ac_status=$?
     grep -v '^ *+' conftest.er1 >conftest.err
     rm -f conftest.er1
     cat conftest.err >&5
     echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); } &&
  -	 { ac_try='test -z "$ac_c_werror_flag"
  -			 || test ! -s conftest.err'
  -  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  -  (eval $ac_try) 2>&5
  -  ac_status=$?
  -  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); }; } &&
  -	 { ac_try='test -s conftest.$ac_objext'
  -  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  -  (eval $ac_try) 2>&5
  -  ac_status=$?
  -  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); }; }; then
  +  (exit $ac_status); } && {
  +	 test -z "$ac_c_werror_flag" ||
  +	 test ! -s conftest.err
  +       } && test -s conftest.$ac_objext; then
     ac_cv_header_stdc=yes
   else
     echo "$as_me: failed program was:" >&5
   sed 's/^/| /' conftest.$ac_ext >&5
   
  -ac_cv_header_stdc=no
  +	ac_cv_header_stdc=no
   fi
  -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  +
  +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
   
   if test $ac_cv_header_stdc = yes; then
     # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
  @@ -2690,6 +3207,7 @@
   cat >>conftest.$ac_ext <<_ACEOF
   /* end confdefs.h.  */
   #include <ctype.h>
  +#include <stdlib.h>
   #if ((' ' & 0x0FF) == 0x020)
   # define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
   # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
  @@ -2709,18 +3227,27 @@
     for (i = 0; i < 256; i++)
       if (XOR (islower (i), ISLOWER (i))
   	|| toupper (i) != TOUPPER (i))
  -      exit(2);
  -  exit (0);
  +      return 2;
  +  return 0;
   }
   _ACEOF
   rm -f conftest$ac_exeext
  -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
  -  (eval $ac_link) 2>&5
  +if { (ac_try="$ac_link"
  +case "(($ac_try" in
  +  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
  +  *) ac_try_echo=$ac_try;;
  +esac
  +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
  +  (eval "$ac_link") 2>&5
     ac_status=$?
     echo "$as_me:$LINENO: \$? = $ac_status" >&5
     (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
  -  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  -  (eval $ac_try) 2>&5
  +  { (case "(($ac_try" in
  +  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
  +  *) ac_try_echo=$ac_try;;
  +esac
  +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
  +  (eval "$ac_try") 2>&5
     ac_status=$?
     echo "$as_me:$LINENO: \$? = $ac_status" >&5
     (exit $ac_status); }; }; then
  @@ -2733,12 +3260,14 @@
   ( exit $ac_status )
   ac_cv_header_stdc=no
   fi
  -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
  +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
   fi
  +
  +
   fi
   fi
  -echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
  -echo "${ECHO_T}$ac_cv_header_stdc" >&6
  +{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
  +echo "${ECHO_T}$ac_cv_header_stdc" >&6; }
   if test $ac_cv_header_stdc = yes; then
   
   cat >>confdefs.h <<\_ACEOF
  @@ -2761,9 +3290,9 @@
   		  inttypes.h stdint.h unistd.h
   do
   as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
  -echo "$as_me:$LINENO: checking for $ac_header" >&5
  -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
  -if eval "test \"\${$as_ac_Header+set}\" = set"; then
  +{ echo "$as_me:$LINENO: checking for $ac_header" >&5
  +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
  +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
     echo $ECHO_N "(cached) $ECHO_C" >&6
   else
     cat >conftest.$ac_ext <<_ACEOF
  @@ -2777,38 +3306,35 @@
   #include <$ac_header>
   _ACEOF
   rm -f conftest.$ac_objext
  -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  -  (eval $ac_compile) 2>conftest.er1
  +if { (ac_try="$ac_compile"
  +case "(($ac_try" in
  +  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
  +  *) ac_try_echo=$ac_try;;
  +esac
  +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
  +  (eval "$ac_compile") 2>conftest.er1
     ac_status=$?
     grep -v '^ *+' conftest.er1 >conftest.err
     rm -f conftest.er1
     cat conftest.err >&5
     echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); } &&
  -	 { ac_try='test -z "$ac_c_werror_flag"
  -			 || test ! -s conftest.err'
  -  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  -  (eval $ac_try) 2>&5
  -  ac_status=$?
  -  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); }; } &&
  -	 { ac_try='test -s conftest.$ac_objext'
  -  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  -  (eval $ac_try) 2>&5
  -  ac_status=$?
  -  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); }; }; then
  +  (exit $ac_status); } && {
  +	 test -z "$ac_c_werror_flag" ||
  +	 test ! -s conftest.err
  +       } && test -s conftest.$ac_objext; then
     eval "$as_ac_Header=yes"
   else
     echo "$as_me: failed program was:" >&5
   sed 's/^/| /' conftest.$ac_ext >&5
   
  -eval "$as_ac_Header=no"
  +	eval "$as_ac_Header=no"
   fi
  -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  +
  +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
   fi
  -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
  -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
  +ac_res=`eval echo '${'$as_ac_Header'}'`
  +	       { echo "$as_me:$LINENO: result: $ac_res" >&5
  +echo "${ECHO_T}$ac_res" >&6; }
   if test `eval echo '${'$as_ac_Header'}'` = yes; then
     cat >>confdefs.h <<_ACEOF
   #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
  @@ -2820,17 +3346,17 @@
   
   
   if test "${ac_cv_header_ncurses_ncurses_h+set}" = set; then
  -  echo "$as_me:$LINENO: checking for ncurses/ncurses.h" >&5
  -echo $ECHO_N "checking for ncurses/ncurses.h... $ECHO_C" >&6
  +  { echo "$as_me:$LINENO: checking for ncurses/ncurses.h" >&5
  +echo $ECHO_N "checking for ncurses/ncurses.h... $ECHO_C" >&6; }
   if test "${ac_cv_header_ncurses_ncurses_h+set}" = set; then
     echo $ECHO_N "(cached) $ECHO_C" >&6
   fi
  -echo "$as_me:$LINENO: result: $ac_cv_header_ncurses_ncurses_h" >&5
  -echo "${ECHO_T}$ac_cv_header_ncurses_ncurses_h" >&6
  +{ echo "$as_me:$LINENO: result: $ac_cv_header_ncurses_ncurses_h" >&5
  +echo "${ECHO_T}$ac_cv_header_ncurses_ncurses_h" >&6; }
   else
     # Is the header compilable?
  -echo "$as_me:$LINENO: checking ncurses/ncurses.h usability" >&5
  -echo $ECHO_N "checking ncurses/ncurses.h usability... $ECHO_C" >&6
  +{ echo "$as_me:$LINENO: checking ncurses/ncurses.h usability" >&5
  +echo $ECHO_N "checking ncurses/ncurses.h usability... $ECHO_C" >&6; }
   cat >conftest.$ac_ext <<_ACEOF
   /* confdefs.h.  */
   _ACEOF
  @@ -2841,41 +3367,37 @@
   #include <ncurses/ncurses.h>
   _ACEOF
   rm -f conftest.$ac_objext
  -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  -  (eval $ac_compile) 2>conftest.er1
  +if { (ac_try="$ac_compile"
  +case "(($ac_try" in
  +  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
  +  *) ac_try_echo=$ac_try;;
  +esac
  +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
  +  (eval "$ac_compile") 2>conftest.er1
     ac_status=$?
     grep -v '^ *+' conftest.er1 >conftest.err
     rm -f conftest.er1
     cat conftest.err >&5
     echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); } &&
  -	 { ac_try='test -z "$ac_c_werror_flag"
  -			 || test ! -s conftest.err'
  -  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  -  (eval $ac_try) 2>&5
  -  ac_status=$?
  -  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); }; } &&
  -	 { ac_try='test -s conftest.$ac_objext'
  -  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  -  (eval $ac_try) 2>&5
  -  ac_status=$?
  -  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); }; }; then
  +  (exit $ac_status); } && {
  +	 test -z "$ac_c_werror_flag" ||
  +	 test ! -s conftest.err
  +       } && test -s conftest.$ac_objext; then
     ac_header_compiler=yes
   else
     echo "$as_me: failed program was:" >&5
   sed 's/^/| /' conftest.$ac_ext >&5
   
  -ac_header_compiler=no
  +	ac_header_compiler=no
   fi
  -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
  -echo "${ECHO_T}$ac_header_compiler" >&6
  +
  +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
  +{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
  +echo "${ECHO_T}$ac_header_compiler" >&6; }
   
   # Is the header present?
  -echo "$as_me:$LINENO: checking ncurses/ncurses.h presence" >&5
  -echo $ECHO_N "checking ncurses/ncurses.h presence... $ECHO_C" >&6
  +{ echo "$as_me:$LINENO: checking ncurses/ncurses.h presence" >&5
  +echo $ECHO_N "checking ncurses/ncurses.h presence... $ECHO_C" >&6; }
   cat >conftest.$ac_ext <<_ACEOF
   /* confdefs.h.  */
   _ACEOF
  @@ -2884,24 +3406,22 @@
   /* end confdefs.h.  */
   #include <ncurses/ncurses.h>
   _ACEOF
  -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
  -  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  +if { (ac_try="$ac_cpp conftest.$ac_ext"
  +case "(($ac_try" in
  +  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
  +  *) ac_try_echo=$ac_try;;
  +esac
  +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
  +  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
     ac_status=$?
     grep -v '^ *+' conftest.er1 >conftest.err
     rm -f conftest.er1
     cat conftest.err >&5
     echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); } >/dev/null; then
  -  if test -s conftest.err; then
  -    ac_cpp_err=$ac_c_preproc_warn_flag
  -    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
  -  else
  -    ac_cpp_err=
  -  fi
  -else
  -  ac_cpp_err=yes
  -fi
  -if test -z "$ac_cpp_err"; then
  +  (exit $ac_status); } >/dev/null && {
  +	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
  +	 test ! -s conftest.err
  +       }; then
     ac_header_preproc=yes
   else
     echo "$as_me: failed program was:" >&5
  @@ -2909,9 +3429,10 @@
   
     ac_header_preproc=no
   fi
  +
   rm -f conftest.err conftest.$ac_ext
  -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
  -echo "${ECHO_T}$ac_header_preproc" >&6
  +{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
  +echo "${ECHO_T}$ac_header_preproc" >&6; }
   
   # So?  What about this header?
   case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
  @@ -2935,25 +3456,18 @@
   echo "$as_me: WARNING: ncurses/ncurses.h: proceeding with the preprocessor's result" >&2;}
       { echo "$as_me:$LINENO: WARNING: ncurses/ncurses.h: in the future, the compiler will take precedence" >&5
   echo "$as_me: WARNING: ncurses/ncurses.h: in the future, the compiler will take precedence" >&2;}
  -    (
  -      cat <<\_ASBOX
  -## ------------------------------------------ ##
  -## Report this to the AC_PACKAGE_NAME lists.  ##
  -## ------------------------------------------ ##
  -_ASBOX
  -    ) |
  -      sed "s/^/$as_me: WARNING:     /" >&2
  +
       ;;
   esac
  -echo "$as_me:$LINENO: checking for ncurses/ncurses.h" >&5
  -echo $ECHO_N "checking for ncurses/ncurses.h... $ECHO_C" >&6
  +{ echo "$as_me:$LINENO: checking for ncurses/ncurses.h" >&5
  +echo $ECHO_N "checking for ncurses/ncurses.h... $ECHO_C" >&6; }
   if test "${ac_cv_header_ncurses_ncurses_h+set}" = set; then
     echo $ECHO_N "(cached) $ECHO_C" >&6
   else
     ac_cv_header_ncurses_ncurses_h=$ac_header_preproc
   fi
  -echo "$as_me:$LINENO: result: $ac_cv_header_ncurses_ncurses_h" >&5
  -echo "${ECHO_T}$ac_cv_header_ncurses_ncurses_h" >&6
  +{ echo "$as_me:$LINENO: result: $ac_cv_header_ncurses_ncurses_h" >&5
  +echo "${ECHO_T}$ac_cv_header_ncurses_ncurses_h" >&6; }
   
   fi
   if test $ac_cv_header_ncurses_ncurses_h = yes; then
  @@ -2963,8 +3477,8 @@
   fi
   
   
  -echo "$as_me:$LINENO: checking for initscr in -lncurses" >&5
  -echo $ECHO_N "checking for initscr in -lncurses... $ECHO_C" >&6
  +{ echo "$as_me:$LINENO: checking for initscr in -lncurses" >&5
  +echo $ECHO_N "checking for initscr in -lncurses... $ECHO_C" >&6; }
   if test "${ac_cv_lib_ncurses_initscr+set}" = set; then
     echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  @@ -2977,56 +3491,53 @@
   cat >>conftest.$ac_ext <<_ACEOF
   /* end confdefs.h.  */
   
  -/* Override any gcc2 internal prototype to avoid an error.  */
  +/* Override any GCC internal prototype to avoid an error.
  +   Use char because int might match the return type of a GCC
  +   builtin and then its argument prototype would still apply.  */
   #ifdef __cplusplus
   extern "C"
   #endif
  -/* We use char because int might match the return type of a gcc2
  -   builtin and then its argument prototype would still apply.  */
   char initscr ();
   int
   main ()
   {
  -initscr ();
  +return initscr ();
     ;
     return 0;
   }
   _ACEOF
   rm -f conftest.$ac_objext conftest$ac_exeext
  -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
  -  (eval $ac_link) 2>conftest.er1
  +if { (ac_try="$ac_link"
  +case "(($ac_try" in
  +  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
  +  *) ac_try_echo=$ac_try;;
  +esac
  +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
  +  (eval "$ac_link") 2>conftest.er1
     ac_status=$?
     grep -v '^ *+' conftest.er1 >conftest.err
     rm -f conftest.er1
     cat conftest.err >&5
     echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); } &&
  -	 { ac_try='test -z "$ac_c_werror_flag"
  -			 || test ! -s conftest.err'
  -  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  -  (eval $ac_try) 2>&5
  -  ac_status=$?
  -  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); }; } &&
  -	 { ac_try='test -s conftest$ac_exeext'
  -  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  -  (eval $ac_try) 2>&5
  -  ac_status=$?
  -  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); }; }; then
  +  (exit $ac_status); } && {
  +	 test -z "$ac_c_werror_flag" ||
  +	 test ! -s conftest.err
  +       } && test -s conftest$ac_exeext &&
  +       $as_test_x conftest$ac_exeext; then
     ac_cv_lib_ncurses_initscr=yes
   else
     echo "$as_me: failed program was:" >&5
   sed 's/^/| /' conftest.$ac_ext >&5
   
  -ac_cv_lib_ncurses_initscr=no
  +	ac_cv_lib_ncurses_initscr=no
   fi
  -rm -f conftest.err conftest.$ac_objext \
  +
  +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
         conftest$ac_exeext conftest.$ac_ext
   LIBS=$ac_check_lib_save_LIBS
   fi
  -echo "$as_me:$LINENO: result: $ac_cv_lib_ncurses_initscr" >&5
  -echo "${ECHO_T}$ac_cv_lib_ncurses_initscr" >&6
  +{ echo "$as_me:$LINENO: result: $ac_cv_lib_ncurses_initscr" >&5
  +echo "${ECHO_T}$ac_cv_lib_ncurses_initscr" >&6; }
   if test $ac_cv_lib_ncurses_initscr = yes; then
     HAVE_NCURSES_LIB=YES
   else
  @@ -3034,17 +3545,17 @@
   fi
   
   if test "${ac_cv_header_slcurses_h+set}" = set; then
  -  echo "$as_me:$LINENO: checking for slcurses.h" >&5
  -echo $ECHO_N "checking for slcurses.h... $ECHO_C" >&6
  +  { echo "$as_me:$LINENO: checking for slcurses.h" >&5
  +echo $ECHO_N "checking for slcurses.h... $ECHO_C" >&6; }
   if test "${ac_cv_header_slcurses_h+set}" = set; then
     echo $ECHO_N "(cached) $ECHO_C" >&6
   fi
  -echo "$as_me:$LINENO: result: $ac_cv_header_slcurses_h" >&5
  -echo "${ECHO_T}$ac_cv_header_slcurses_h" >&6
  +{ echo "$as_me:$LINENO: result: $ac_cv_header_slcurses_h" >&5
  +echo "${ECHO_T}$ac_cv_header_slcurses_h" >&6; }
   else
     # Is the header compilable?
  -echo "$as_me:$LINENO: checking slcurses.h usability" >&5
  -echo $ECHO_N "checking slcurses.h usability... $ECHO_C" >&6
  +{ echo "$as_me:$LINENO: checking slcurses.h usability" >&5
  +echo $ECHO_N "checking slcurses.h usability... $ECHO_C" >&6; }
   cat >conftest.$ac_ext <<_ACEOF
   /* confdefs.h.  */
   _ACEOF
  @@ -3055,41 +3566,37 @@
   #include <slcurses.h>
   _ACEOF
   rm -f conftest.$ac_objext
  -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  -  (eval $ac_compile) 2>conftest.er1
  +if { (ac_try="$ac_compile"
  +case "(($ac_try" in
  +  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
  +  *) ac_try_echo=$ac_try;;
  +esac
  +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
  +  (eval "$ac_compile") 2>conftest.er1
     ac_status=$?
     grep -v '^ *+' conftest.er1 >conftest.err
     rm -f conftest.er1
     cat conftest.err >&5
     echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); } &&
  -	 { ac_try='test -z "$ac_c_werror_flag"
  -			 || test ! -s conftest.err'
  -  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  -  (eval $ac_try) 2>&5
  -  ac_status=$?
  -  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); }; } &&
  -	 { ac_try='test -s conftest.$ac_objext'
  -  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  -  (eval $ac_try) 2>&5
  -  ac_status=$?
  -  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); }; }; then
  +  (exit $ac_status); } && {
  +	 test -z "$ac_c_werror_flag" ||
  +	 test ! -s conftest.err
  +       } && test -s conftest.$ac_objext; then
     ac_header_compiler=yes
   else
     echo "$as_me: failed program was:" >&5
   sed 's/^/| /' conftest.$ac_ext >&5
   
  -ac_header_compiler=no
  +	ac_header_compiler=no
   fi
  -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
  -echo "${ECHO_T}$ac_header_compiler" >&6
  +
  +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
  +{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
  +echo "${ECHO_T}$ac_header_compiler" >&6; }
   
   # Is the header present?
  -echo "$as_me:$LINENO: checking slcurses.h presence" >&5
  -echo $ECHO_N "checking slcurses.h presence... $ECHO_C" >&6
  +{ echo "$as_me:$LINENO: checking slcurses.h presence" >&5
  +echo $ECHO_N "checking slcurses.h presence... $ECHO_C" >&6; }
   cat >conftest.$ac_ext <<_ACEOF
   /* confdefs.h.  */
   _ACEOF
  @@ -3098,24 +3605,22 @@
   /* end confdefs.h.  */
   #include <slcurses.h>
   _ACEOF
  -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
  -  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  +if { (ac_try="$ac_cpp conftest.$ac_ext"
  +case "(($ac_try" in
  +  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
  +  *) ac_try_echo=$ac_try;;
  +esac
  +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
  +  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
     ac_status=$?
     grep -v '^ *+' conftest.er1 >conftest.err
     rm -f conftest.er1
     cat conftest.err >&5
     echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); } >/dev/null; then
  -  if test -s conftest.err; then
  -    ac_cpp_err=$ac_c_preproc_warn_flag
  -    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
  -  else
  -    ac_cpp_err=
  -  fi
  -else
  -  ac_cpp_err=yes
  -fi
  -if test -z "$ac_cpp_err"; then
  +  (exit $ac_status); } >/dev/null && {
  +	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
  +	 test ! -s conftest.err
  +       }; then
     ac_header_preproc=yes
   else
     echo "$as_me: failed program was:" >&5
  @@ -3123,9 +3628,10 @@
   
     ac_header_preproc=no
   fi
  +
   rm -f conftest.err conftest.$ac_ext
  -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
  -echo "${ECHO_T}$ac_header_preproc" >&6
  +{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
  +echo "${ECHO_T}$ac_header_preproc" >&6; }
   
   # So?  What about this header?
   case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
  @@ -3149,25 +3655,18 @@
   echo "$as_me: WARNING: slcurses.h: proceeding with the preprocessor's result" >&2;}
       { echo "$as_me:$LINENO: WARNING: slcurses.h: in the future, the compiler will take precedence" >&5
   echo "$as_me: WARNING: slcurses.h: in the future, the compiler will take precedence" >&2;}
  -    (
  -      cat <<\_ASBOX
  -## ------------------------------------------ ##
  -## Report this to the AC_PACKAGE_NAME lists.  ##
  -## ------------------------------------------ ##
  -_ASBOX
  -    ) |
  -      sed "s/^/$as_me: WARNING:     /" >&2
  +
       ;;
   esac
  -echo "$as_me:$LINENO: checking for slcurses.h" >&5
  -echo $ECHO_N "checking for slcurses.h... $ECHO_C" >&6
  +{ echo "$as_me:$LINENO: checking for slcurses.h" >&5
  +echo $ECHO_N "checking for slcurses.h... $ECHO_C" >&6; }
   if test "${ac_cv_header_slcurses_h+set}" = set; then
     echo $ECHO_N "(cached) $ECHO_C" >&6
   else
     ac_cv_header_slcurses_h=$ac_header_preproc
   fi
  -echo "$as_me:$LINENO: result: $ac_cv_header_slcurses_h" >&5
  -echo "${ECHO_T}$ac_cv_header_slcurses_h" >&6
  +{ echo "$as_me:$LINENO: result: $ac_cv_header_slcurses_h" >&5
  +echo "${ECHO_T}$ac_cv_header_slcurses_h" >&6; }
   
   fi
   if test $ac_cv_header_slcurses_h = yes; then
  @@ -3179,8 +3678,8 @@
   
   OLIBS=$LIBS
   LIBS="$LIBS -ltermcap"
  -echo "$as_me:$LINENO: checking for SLcurses_initscr in -lslang" >&5
  -echo $ECHO_N "checking for SLcurses_initscr in -lslang... $ECHO_C" >&6
  +{ echo "$as_me:$LINENO: checking for SLcurses_initscr in -lslang" >&5
  +echo $ECHO_N "checking for SLcurses_initscr in -lslang... $ECHO_C" >&6; }
   if test "${ac_cv_lib_slang_SLcurses_initscr+set}" = set; then
     echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  @@ -3193,56 +3692,53 @@
   cat >>conftest.$ac_ext <<_ACEOF
   /* end confdefs.h.  */
   
  -/* Override any gcc2 internal prototype to avoid an error.  */
  +/* Override any GCC internal prototype to avoid an error.
  +   Use char because int might match the return type of a GCC
  +   builtin and then its argument prototype would still apply.  */
   #ifdef __cplusplus
   extern "C"
   #endif
  -/* We use char because int might match the return type of a gcc2
  -   builtin and then its argument prototype would still apply.  */
   char SLcurses_initscr ();
   int
   main ()
   {
  -SLcurses_initscr ();
  +return SLcurses_initscr ();
     ;
     return 0;
   }
   _ACEOF
   rm -f conftest.$ac_objext conftest$ac_exeext
  -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
  -  (eval $ac_link) 2>conftest.er1
  +if { (ac_try="$ac_link"
  +case "(($ac_try" in
  +  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
  +  *) ac_try_echo=$ac_try;;
  +esac
  +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
  +  (eval "$ac_link") 2>conftest.er1
     ac_status=$?
     grep -v '^ *+' conftest.er1 >conftest.err
     rm -f conftest.er1
     cat conftest.err >&5
     echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); } &&
  -	 { ac_try='test -z "$ac_c_werror_flag"
  -			 || test ! -s conftest.err'
  -  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  -  (eval $ac_try) 2>&5
  -  ac_status=$?
  -  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); }; } &&
  -	 { ac_try='test -s conftest$ac_exeext'
  -  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  -  (eval $ac_try) 2>&5
  -  ac_status=$?
  -  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); }; }; then
  +  (exit $ac_status); } && {
  +	 test -z "$ac_c_werror_flag" ||
  +	 test ! -s conftest.err
  +       } && test -s conftest$ac_exeext &&
  +       $as_test_x conftest$ac_exeext; then
     ac_cv_lib_slang_SLcurses_initscr=yes
   else
     echo "$as_me: failed program was:" >&5
   sed 's/^/| /' conftest.$ac_ext >&5
   
  -ac_cv_lib_slang_SLcurses_initscr=no
  +	ac_cv_lib_slang_SLcurses_initscr=no
   fi
  -rm -f conftest.err conftest.$ac_objext \
  +
  +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
         conftest$ac_exeext conftest.$ac_ext
   LIBS=$ac_check_lib_save_LIBS
   fi
  -echo "$as_me:$LINENO: result: $ac_cv_lib_slang_SLcurses_initscr" >&5
  -echo "${ECHO_T}$ac_cv_lib_slang_SLcurses_initscr" >&6
  +{ echo "$as_me:$LINENO: result: $ac_cv_lib_slang_SLcurses_initscr" >&5
  +echo "${ECHO_T}$ac_cv_lib_slang_SLcurses_initscr" >&6; }
   if test $ac_cv_lib_slang_SLcurses_initscr = yes; then
     HAVE_SLCURSES_LIB=YES
   else
  @@ -3258,10 +3754,10 @@
   _ACEOF
   
       LIBS="$LIBS -lncurses"
  -    echo "$as_me:$LINENO: checking which Curses to use" >&5
  -echo $ECHO_N "checking which Curses to use... $ECHO_C" >&6
  -    echo "$as_me:$LINENO: result: GNU NCurses" >&5
  -echo "${ECHO_T}GNU NCurses" >&6
  +    { echo "$as_me:$LINENO: checking which Curses to use" >&5
  +echo $ECHO_N "checking which Curses to use... $ECHO_C" >&6; }
  +    { echo "$as_me:$LINENO: result: GNU NCurses" >&5
  +echo "${ECHO_T}GNU NCurses" >&6; }
   else
       if test ".$HAVE_SLCURSES_HEADER.$HAVE_SLCURSES_LIB." = .YES.YES.; then
           USE_SLCURSES=YES
  @@ -3271,10 +3767,10 @@
   _ACEOF
   
           LIBS="$LIBS -lslang -ltermcap"
  -        echo "$as_me:$LINENO: checking which Curses to use" >&5
  -echo $ECHO_N "checking which Curses to use... $ECHO_C" >&6
  -        echo "$as_me:$LINENO: result: S-Lang Curses" >&5
  -echo "${ECHO_T}S-Lang Curses" >&6
  +        { echo "$as_me:$LINENO: checking which Curses to use" >&5
  +echo $ECHO_N "checking which Curses to use... $ECHO_C" >&6; }
  +        { echo "$as_me:$LINENO: result: S-Lang Curses" >&5
  +echo "${ECHO_T}S-Lang Curses" >&6; }
       else
           USE_CURSES=YES
   
  @@ -3283,20 +3779,20 @@
   _ACEOF
   
           LIBS="$LIBS -lcurses"
  -        echo "$as_me:$LINENO: checking which Curses to use" >&5
  -echo $ECHO_N "checking which Curses to use... $ECHO_C" >&6
  -        echo "$as_me:$LINENO: result: Vendor Curses" >&5
  -echo "${ECHO_T}Vendor Curses" >&6
  +        { echo "$as_me:$LINENO: checking which Curses to use" >&5
  +echo $ECHO_N "checking which Curses to use... $ECHO_C" >&6; }
  +        { echo "$as_me:$LINENO: result: Vendor Curses" >&5
  +echo "${ECHO_T}Vendor Curses" >&6; }
       fi
   fi
   
  -echo "$as_me:$LINENO: result: " >&5
  -echo "${ECHO_T}" >&6
  -echo "$as_me:$LINENO: result: ${T_MD}CHECK: System Ingredients${T_ME}" >&5
  -echo "${ECHO_T}${T_MD}CHECK: System Ingredients${T_ME}" >&6
  +{ echo "$as_me:$LINENO: result: " >&5
  +echo "${ECHO_T}" >&6; }
  +{ echo "$as_me:$LINENO: result: ${T_MD}CHECK: System Ingredients${T_ME}" >&5
  +echo "${ECHO_T}${T_MD}CHECK: System Ingredients${T_ME}" >&6; }
   
  -echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5
  -echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6
  +{ echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5
  +echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6; }
   if test "${ac_cv_c_const+set}" = set; then
     echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  @@ -3314,10 +3810,10 @@
   #ifndef __cplusplus
     /* Ultrix mips cc rejects this.  */
     typedef int charset[2];
  -  const charset x;
  +  const charset cs;
     /* SunOS 4.1.1 cc rejects this.  */
  -  char const *const *ccp;
  -  char **p;
  +  char const *const *pcpcc;
  +  char **ppc;
     /* NEC SVR4.0.2 mips cc rejects this.  */
     struct point {int x, y;};
     static struct point const zero = {0,0};
  @@ -3326,16 +3822,17 @@
        an arm of an if-expression whose if-part is not a constant
        expression */
     const char *g = "string";
  -  ccp = &g + (g ? g-g : 0);
  +  pcpcc = &g + (g ? g-g : 0);
     /* HPUX 7.0 cc rejects these. */
  -  ++ccp;
  -  p = (char**) ccp;
  -  ccp = (char const *const *) p;
  +  ++pcpcc;
  +  ppc = (char**) pcpcc;
  +  pcpcc = (char const *const *) ppc;
     { /* SCO 3.2v4 cc rejects this.  */
       char *t;
       char const *s = 0 ? (char *) 0 : (char const *) 0;
   
       *t++ = 0;
  +    if (s) return 0;
     }
     { /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
       int x[] = {25, 17};
  @@ -3354,7 +3851,9 @@
     }
     { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
       const int foo = 10;
  +    if (!foo) return 0;
     }
  +  return !cs[0] && !zero.x;
   #endif
   
     ;
  @@ -3362,38 +3861,34 @@
   }
   _ACEOF
   rm -f conftest.$ac_objext
  -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  -  (eval $ac_compile) 2>conftest.er1
  +if { (ac_try="$ac_compile"
  +case "(($ac_try" in
  +  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
  +  *) ac_try_echo=$ac_try;;
  +esac
  +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
  +  (eval "$ac_compile") 2>conftest.er1
     ac_status=$?
     grep -v '^ *+' conftest.er1 >conftest.err
     rm -f conftest.er1
     cat conftest.err >&5
     echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); } &&
  -	 { ac_try='test -z "$ac_c_werror_flag"
  -			 || test ! -s conftest.err'
  -  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  -  (eval $ac_try) 2>&5
  -  ac_status=$?
  -  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); }; } &&
  -	 { ac_try='test -s conftest.$ac_objext'
  -  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  -  (eval $ac_try) 2>&5
  -  ac_status=$?
  -  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); }; }; then
  +  (exit $ac_status); } && {
  +	 test -z "$ac_c_werror_flag" ||
  +	 test ! -s conftest.err
  +       } && test -s conftest.$ac_objext; then
     ac_cv_c_const=yes
   else
     echo "$as_me: failed program was:" >&5
   sed 's/^/| /' conftest.$ac_ext >&5
   
  -ac_cv_c_const=no
  +	ac_cv_c_const=no
   fi
  -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  +
  +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
   fi
  -echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5
  -echo "${ECHO_T}$ac_cv_c_const" >&6
  +{ echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5
  +echo "${ECHO_T}$ac_cv_c_const" >&6; }
   if test $ac_cv_c_const = no; then
   
   cat >>confdefs.h <<\_ACEOF
  @@ -3402,8 +3897,8 @@
   
   fi
   
  -echo "$as_me:$LINENO: checking for ANSI C header files" >&5
  -echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
  +{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5
  +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; }
   if test "${ac_cv_header_stdc+set}" = set; then
     echo $ECHO_N "(cached) $ECHO_C" >&6
   else
  @@ -3427,35 +3922,31 @@
   }
   _ACEOF
   rm -f conftest.$ac_objext
  -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  -  (eval $ac_compile) 2>conftest.er1
  +if { (ac_try="$ac_compile"
  +case "(($ac_try" in
  +  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
  +  *) ac_try_echo=$ac_try;;
  +esac
  +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
  +  (eval "$ac_compile") 2>conftest.er1
     ac_status=$?
     grep -v '^ *+' conftest.er1 >conftest.err
     rm -f conftest.er1
     cat conftest.err >&5
     echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); } &&
  -	 { ac_try='test -z "$ac_c_werror_flag"
  -			 || test ! -s conftest.err'
  -  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  -  (eval $ac_try) 2>&5
  -  ac_status=$?
  -  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); }; } &&
  -	 { ac_try='test -s conftest.$ac_objext'
  -  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  -  (eval $ac_try) 2>&5
  -  ac_status=$?
  -  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); }; }; then
  +  (exit $ac_status); } && {
  +	 test -z "$ac_c_werror_flag" ||
  +	 test ! -s conftest.err
  +       } && test -s conftest.$ac_objext; then
     ac_cv_header_stdc=yes
   else
     echo "$as_me: failed program was:" >&5
   sed 's/^/| /' conftest.$ac_ext >&5
   
  -ac_cv_header_stdc=no
  +	ac_cv_header_stdc=no
   fi
  -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  +
  +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
   
   if test $ac_cv_header_stdc = yes; then
     # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
  @@ -3511,6 +4002,7 @@
   cat >>conftest.$ac_ext <<_ACEOF
   /* end confdefs.h.  */
   #include <ctype.h>
  +#include <stdlib.h>
   #if ((' ' & 0x0FF) == 0x020)
   # define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
   # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
  @@ -3530,18 +4022,27 @@
     for (i = 0; i < 256; i++)
       if (XOR (islower (i), ISLOWER (i))
   	|| toupper (i) != TOUPPER (i))
  -      exit(2);
  -  exit (0);
  +      return 2;
  +  return 0;
   }
   _ACEOF
   rm -f conftest$ac_exeext
  -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
  -  (eval $ac_link) 2>&5
  +if { (ac_try="$ac_link"
  +case "(($ac_try" in
  +  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
  +  *) ac_try_echo=$ac_try;;
  +esac
  +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
  +  (eval "$ac_link") 2>&5
     ac_status=$?
     echo "$as_me:$LINENO: \$? = $ac_status" >&5
     (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
  -  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  -  (eval $ac_try) 2>&5
  +  { (case "(($ac_try" in
  +  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
  +  *) ac_try_echo=$ac_try;;
  +esac
  +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
  +  (eval "$ac_try") 2>&5
     ac_status=$?
     echo "$as_me:$LINENO: \$? = $ac_status" >&5
     (exit $ac_status); }; }; then
  @@ -3554,12 +4055,14 @@
   ( exit $ac_status )
   ac_cv_header_stdc=no
   fi
  -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
  +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
   fi
  +
  +
   fi
   fi
  -echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
  -echo "${ECHO_T}$ac_cv_header_stdc" >&6
  +{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
  +echo "${ECHO_T}$ac_cv_header_stdc" >&6; }
   if test $ac_cv_header_stdc = yes; then
   
   cat >>confdefs.h <<\_ACEOF
  @@ -3576,18 +4079,19 @@
   for ac_header in stdio.h stddef.h string.h strings.h stdlib.h
   do
   as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
  -if eval "test \"\${$as_ac_Header+set}\" = set"; then
  -  echo "$as_me:$LINENO: checking for $ac_header" >&5
  -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
  -if eval "test \"\${$as_ac_Header+set}\" = set"; then
  +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
  +  { echo "$as_me:$LINENO: checking for $ac_header" >&5
  +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
  +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
     echo $ECHO_N "(cached) $ECHO_C" >&6
   fi
  -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
  -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
  +ac_res=`eval echo '${'$as_ac_Header'}'`
  +	       { echo "$as_me:$LINENO: result: $ac_res" >&5
  +echo "${ECHO_T}$ac_res" >&6; }
   else
     # Is the header compilable?
  -echo "$as_me:$LINENO: checking $ac_header usability" >&5
  -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
  +{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
  +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
   cat >conftest.$ac_ext <<_ACEOF
   /* confdefs.h.  */
   _ACEOF
  @@ -3598,41 +4102,37 @@
   #include <$ac_header>
   _ACEOF
   rm -f conftest.$ac_objext
  -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  -  (eval $ac_compile) 2>conftest.er1
  +if { (ac_try="$ac_compile"
  +case "(($ac_try" in
  +  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
  +  *) ac_try_echo=$ac_try;;
  +esac
  +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
  +  (eval "$ac_compile") 2>conftest.er1
     ac_status=$?
     grep -v '^ *+' conftest.er1 >conftest.err
     rm -f conftest.er1
     cat conftest.err >&5
     echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); } &&
  -	 { ac_try='test -z "$ac_c_werror_flag"
  -			 || test ! -s conftest.err'
  -  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  -  (eval $ac_try) 2>&5
  -  ac_status=$?
  -  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); }; } &&
  -	 { ac_try='test -s conftest.$ac_objext'
  -  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  -  (eval $ac_try) 2>&5
  -  ac_status=$?
  -  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); }; }; then
  +  (exit $ac_status); } && {
  +	 test -z "$ac_c_werror_flag" ||
  +	 test ! -s conftest.err
  +       } && test -s conftest.$ac_objext; then
     ac_header_compiler=yes
   else
     echo "$as_me: failed program was:" >&5
   sed 's/^/| /' conftest.$ac_ext >&5
   
  -ac_header_compiler=no
  +	ac_header_compiler=no
   fi
  -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
  -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
  -echo "${ECHO_T}$ac_header_compiler" >&6
  +
  +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
  +{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
  +echo "${ECHO_T}$ac_header_compiler" >&6; }
   
   # Is the header present?
  -echo "$as_me:$LINENO: checking $ac_header presence" >&5
  -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
  +{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
  +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
   cat >conftest.$ac_ext <<_ACEOF
   /* confdefs.h.  */
   _ACEOF
  @@ -3641,24 +4141,22 @@
   /* end confdefs.h.  */
   #include <$ac_header>
   _ACEOF
  -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
  -  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  +if { (ac_try="$ac_cpp conftest.$ac_ext"
  +case "(($ac_try" in
  +  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
  +  *) ac_try_echo=$ac_try;;
  +esac
  +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
  +  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
     ac_status=$?
     grep -v '^ *+' conftest.er1 >conftest.err
     rm -f conftest.er1
     cat conftest.err >&5
     echo "$as_me:$LINENO: \$? = $ac_status" >&5
  -  (exit $ac_status); } >/dev/null; then
  -  if test -s conftest.err; then
  -    ac_cpp_err=$ac_c_preproc_warn_flag
  -    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
  -  else
  -    ac_cpp_err=
  -  fi
  -else
  -  ac_cpp_err=yes
  -fi
  -if test -z "$ac_cpp_err"; then
  +  (exit $ac_status); } >/dev/null && {
  +	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
  +	 test ! -s conftest.err
  +       }; then
     ac_header_preproc=yes
   else
     echo "$as_me: failed program was:" >&5
  @@ -3666,9 +4164,10 @@
   
     ac_header_preproc=no
   fi
  +
   rm -f conftest.err conftest.$ac_ext
  -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
  -echo "${ECHO_T}$ac_header_preproc" >&6
  +{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
  +echo "${ECHO_T}$ac_header_preproc" >&6; }
   
   # So?  What about this header?
   case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
  @@ -3692,25 +4191,19 @@
   echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
       { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
   echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
  -    (
  -      cat <<\_ASBOX
  -## ------------------------------------------ ##
  -## Report this to the AC_PACKAGE_NAME lists.  ##
  -## ------------------------------------------ ##
  -_ASBOX
  -    ) |
  -      sed "s/^/$as_me: WARNING:     /" >&2
  +
       ;;
   esac
  -echo "$as_me:$LINENO: checking for $ac_header" >&5
  -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
  -if eval "test \"\${$as_ac_Header+set}\" = set"; then
  +{ echo "$as_me:$LINENO: checking for $ac_header" >&5
  +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
  +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
     echo $ECHO_N "(cached) $ECHO_C" >&6
   else
     eval "$as_ac_Header=\$ac_header_preproc"
   fi
  -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
  -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
  +ac_res=`eval echo '${'$as_ac_Header'}'`
  +	       { echo "$as_me:$LINENO: result: $ac_res" >&5
  +echo "${ECHO_T}$ac_res" >&6; }
   
   fi
   if test `eval echo '${'$as_ac_Header'}'` = yes; then
  @@ -3723,12 +4216,13 @@
   done
   
   
  -echo "$as_me:$LINENO: result: " >&5
  -echo "${ECHO_T}" >&6
  -echo "$as_me:$LINENO: result: ${T_MD}RESULT: Sourcefile Substitution${T_ME}" >&5
  -echo "${ECHO_T}${T_MD}RESULT: Sourcefile Substitution${T_ME}" >&6
  +{ echo "$as_me:$LINENO: result: " >&5
  +echo "${ECHO_T}" >&6; }
  +{ echo "$as_me:$LINENO: result: ${T_MD}RESULT: Sourcefile Substitution${T_ME}" >&5
  +echo "${ECHO_T}${T_MD}RESULT: Sourcefile Substitution${T_ME}" >&6; }
  +
  +ac_config_files="$ac_config_files Makefile config_sc.h"
   
  -                    ac_config_files="$ac_config_files Makefile config_sc.h"
   cat >confcache <<\_ACEOF
   # This file is a shell script that caches the results of configure
   # tests run on this system so they can be shared between configure
  @@ -3747,39 +4241,58 @@
   
   # The following way of writing the cache mishandles newlines in values,
   # but we know of no workaround that is simple, portable, and efficient.
  -# So, don't put newlines in cache variables' values.
  +# So, we kill variables containing newlines.
   # Ultrix sh set writes to stderr and can't be redirected directly,
   # and sets the high bit in the cache file unless we assign to the vars.
  -{
  +(
  +  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
  +    eval ac_val=\$$ac_var
  +    case $ac_val in #(
  +    *${as_nl}*)
  +      case $ac_var in #(
  +      *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
  +echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
  +      esac
  +      case $ac_var in #(
  +      _ | IFS | as_nl) ;; #(
  +      *) $as_unset $ac_var ;;
  +      esac ;;
  +    esac
  +  done
  +
     (set) 2>&1 |
  -    case `(ac_space=' '; set | grep ac_space) 2>&1` in
  -    *ac_space=\ *)
  +    case $as_nl`(ac_space=' '; set) 2>&1` in #(
  +    *${as_nl}ac_space=\ *)
         # `set' does not quote correctly, so add quotes (double-quote
         # substitution turns \\\\ into \\, and sed turns \\ into \).
         sed -n \
   	"s/'/'\\\\''/g;
   	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
  -      ;;
  +      ;; #(
       *)
         # `set' quotes correctly as required by POSIX, so do not add quotes.
  -      sed -n \
  -	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
  +      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
         ;;
  -    esac;
  -} |
  +    esac |
  +    sort
  +) |
     sed '
  +     /^ac_cv_env_/b end
        t clear
  -     : clear
  +     :clear
        s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
        t end
  -     /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
  -     : end' >>confcache
  -if diff $cache_file confcache >/dev/null 2>&1; then :; else
  -  if test -w $cache_file; then
  -    test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
  +     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
  +     :end' >>confcache
  +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
  +  if test -w "$cache_file"; then
  +    test "x$cache_file" != "x/dev/null" &&
  +      { echo "$as_me:$LINENO: updating cache $cache_file" >&5
  +echo "$as_me: updating cache $cache_file" >&6;}
       cat confcache >$cache_file
     else
  -    echo "not updating unwritable cache $cache_file"
  +    { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
  +echo "$as_me: not updating unwritable cache $cache_file" >&6;}
     fi
   fi
   rm -f confcache
  @@ -3788,32 +4301,18 @@
   # Let make expand exec_prefix.
   test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
   
  -# VPATH may cause trouble with some makes, so we remove $(srcdir),
  -# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
  -# trailing colons and then remove the whole line if VPATH becomes empty
  -# (actually we leave an empty line to preserve line numbers).
  -if test "x$srcdir" = x.; then
  -  ac_vpsub='/^[	 ]*VPATH[	 ]*=/{
  -s/:*\$(srcdir):*/:/;
  -s/:*\${srcdir}:*/:/;
  -s/:*@srcdir@:*/:/;
  -s/^\([^=]*=[	 ]*\):*/\1/;
  -s/:*$//;
  -s/^[^=]*=[	 ]*$//;
  -}'
  -fi
  -
   DEFS=-DHAVE_CONFIG_H
   
   ac_libobjs=
   ac_ltlibobjs=
   for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
     # 1. Remove the extension, and $U if already installed.
  -  ac_i=`echo "$ac_i" |
  -	 sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
  -  # 2. Add them.
  -  ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
  -  ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
  +  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
  +  ac_i=`echo "$ac_i" | sed "$ac_script"`
  +  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
  +  #    will be set to the directory where LIBOBJS objects are built.
  +  ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
  +  ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo'
   done
   LIBOBJS=$ac_libobjs
   
  @@ -3844,17 +4343,45 @@
   ## M4sh Initialization.  ##
   ## --------------------- ##
   
  -# Be Bourne compatible
  +# Be more Bourne compatible
  +DUALCASE=1; export DUALCASE # for MKS sh
   if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
     emulate sh
     NULLCMD=:
     # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
     # is contrary to our usage.  Disable this feature.
     alias -g '${1+"$@"}'='"$@"'
  -elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
  -  set -o posix
  +  setopt NO_GLOB_SUBST
  +else
  +  case `(set -o) 2>/dev/null` in
  +  *posix*) set -o posix ;;
  +esac
  +
  +fi
  +
  +
  +
  +
  +# PATH needs CR
  +# Avoid depending upon Character Ranges.
  +as_cr_letters='abcdefghijklmnopqrstuvwxyz'
  +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  +as_cr_Letters=$as_cr_letters$as_cr_LETTERS
  +as_cr_digits='0123456789'
  +as_cr_alnum=$as_cr_Letters$as_cr_digits
  +
  +# The user is always right.
  +if test "${PATH_SEPARATOR+set}" != set; then
  +  echo "#! /bin/sh" >conf$$.sh
  +  echo  "exit 0"   >>conf$$.sh
  +  chmod +x conf$$.sh
  +  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
  +    PATH_SEPARATOR=';'
  +  else
  +    PATH_SEPARATOR=:
  +  fi
  +  rm -f conf$$.sh
   fi
  -DUALCASE=1; export DUALCASE # for MKS sh
   
   # Support unset when possible.
   if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
  @@ -3864,8 +4391,43 @@
   fi
   
   
  +# IFS
  +# We need space, tab and new line, in precisely that order.  Quoting is
  +# there to prevent editors from complaining about space-tab.
  +# (If _AS_PATH_WALK were called with IFS unset, it would disable word
  +# splitting by setting IFS to empty value.)
  +as_nl='
  +'
  +IFS=" ""	$as_nl"
  +
  +# Find who we are.  Look in the path if we contain no directory separator.
  +case $0 in
  +  *[\\/]* ) as_myself=$0 ;;
  +  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  +for as_dir in $PATH
  +do
  +  IFS=$as_save_IFS
  +  test -z "$as_dir" && as_dir=.
  +  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
  +done
  +IFS=$as_save_IFS
  +
  +     ;;
  +esac
  +# We did not find ourselves, most probably we were run as `sh COMMAND'
  +# in which case we are not to be found in the path.
  +if test "x$as_myself" = x; then
  +  as_myself=$0
  +fi
  +if test ! -f "$as_myself"; then
  +  echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
  +  { (exit 1); exit 1; }
  +fi
  +
   # Work around bugs in pre-3.0 UWIN ksh.
  -$as_unset ENV MAIL MAILPATH
  +for as_var in ENV MAIL MAILPATH
  +do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
  +done
   PS1='$ '
   PS2='> '
   PS4='+ '
  @@ -3879,18 +4441,19 @@
     if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
       eval $as_var=C; export $as_var
     else
  -    $as_unset $as_var
  +    ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
     fi
   done
   
   # Required to use basename.
  -if expr a : '\(a\)' >/dev/null 2>&1; then
  +if expr a : '\(a\)' >/dev/null 2>&1 &&
  +   test "X`expr 00001 : '.*\(...\)'`" = X001; then
     as_expr=expr
   else
     as_expr=false
   fi
   
  -if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
  +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
     as_basename=basename
   else
     as_basename=false
  @@ -3898,159 +4461,120 @@
   
   
   # Name of the executable.
  -as_me=`$as_basename "$0" ||
  +as_me=`$as_basename -- "$0" ||
   $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
   	 X"$0" : 'X\(//\)$' \| \
  -	 X"$0" : 'X\(/\)$' \| \
  -	 .     : '\(.\)' 2>/dev/null ||
  +	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
   echo X/"$0" |
  -    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
  -  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
  -  	  /^X\/\(\/\).*/{ s//\1/; q; }
  -  	  s/.*/./; q'`
  -
  +    sed '/^.*\/\([^/][^/]*\)\/*$/{
  +	    s//\1/
  +	    q
  +	  }
  +	  /^X\/\(\/\/\)$/{
  +	    s//\1/
  +	    q
  +	  }
  +	  /^X\/\(\/\).*/{
  +	    s//\1/
  +	    q
  +	  }
  +	  s/.*/./; q'`
   
  -# PATH needs CR, and LINENO needs CR and PATH.
  -# Avoid depending upon Character Ranges.
  -as_cr_letters='abcdefghijklmnopqrstuvwxyz'
  -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  -as_cr_Letters=$as_cr_letters$as_cr_LETTERS
  -as_cr_digits='0123456789'
  -as_cr_alnum=$as_cr_Letters$as_cr_digits
  +# CDPATH.
  +$as_unset CDPATH
   
  -# The user is always right.
  -if test "${PATH_SEPARATOR+set}" != set; then
  -  echo "#! /bin/sh" >conf$$.sh
  -  echo  "exit 0"   >>conf$$.sh
  -  chmod +x conf$$.sh
  -  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
  -    PATH_SEPARATOR=';'
  -  else
  -    PATH_SEPARATOR=:
  -  fi
  -  rm -f conf$$.sh
  -fi
   
   
     as_lineno_1=$LINENO
     as_lineno_2=$LINENO
  -  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
     test "x$as_lineno_1" != "x$as_lineno_2" &&
  -  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
  -  # Find who we are.  Look in the path if we contain no path at all
  -  # relative or not.
  -  case $0 in
  -    *[\\/]* ) as_myself=$0 ;;
  -    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  -for as_dir in $PATH
  -do
  -  IFS=$as_save_IFS
  -  test -z "$as_dir" && as_dir=.
  -  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
  -done
  -
  -       ;;
  -  esac
  -  # We did not find ourselves, most probably we were run as `sh COMMAND'
  -  # in which case we are not to be found in the path.
  -  if test "x$as_myself" = x; then
  -    as_myself=$0
  -  fi
  -  if test ! -f "$as_myself"; then
  -    { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
  -echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
  -   { (exit 1); exit 1; }; }
  -  fi
  -  case $CONFIG_SHELL in
  -  '')
  -    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
  -do
  -  IFS=$as_save_IFS
  -  test -z "$as_dir" && as_dir=.
  -  for as_base in sh bash ksh sh5; do
  -	 case $as_dir in
  -	 /*)
  -	   if ("$as_dir/$as_base" -c '
  -  as_lineno_1=$LINENO
  -  as_lineno_2=$LINENO
  -  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
  -  test "x$as_lineno_1" != "x$as_lineno_2" &&
  -  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
  -	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
  -	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
  -	     CONFIG_SHELL=$as_dir/$as_base
  -	     export CONFIG_SHELL
  -	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
  -	   fi;;
  -	 esac
  -       done
  -done
  -;;
  -  esac
  +  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
   
     # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
     # uniformly replaced by the line number.  The first 'sed' inserts a
  -  # line-number line before each line; the second 'sed' does the real
  -  # work.  The second script uses 'N' to pair each line-number line
  -  # with the numbered line, and appends trailing '-' during
  -  # substitution so that $LINENO is not a special case at line end.
  +  # line-number line after each line using $LINENO; the second 'sed'
  +  # does the real work.  The second script uses 'N' to pair each
  +  # line-number line with the line containing $LINENO, and appends
  +  # trailing '-' during substitution so that $LINENO is not a special
  +  # case at line end.
     # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
  -  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
  -  sed '=' <$as_myself |
  +  # scripts with optimization help from Paolo Bonzini.  Blame Lee
  +  # E. McMahon (1931-1989) for sed's syntax.  :-)
  +  sed -n '
  +    p
  +    /[$]LINENO/=
  +  ' <$as_myself |
       sed '
  +      s/[$]LINENO.*/&-/
  +      t lineno
  +      b
  +      :lineno
         N
  -      s,$,-,
  -      : loop
  -      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
  +      :loop
  +      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
         t loop
  -      s,-$,,
  -      s,^['$as_cr_digits']*\n,,
  +      s/-\n.*//
       ' >$as_me.lineno &&
  -  chmod +x $as_me.lineno ||
  -    { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
  -echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
  +  chmod +x "$as_me.lineno" ||
  +    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
      { (exit 1); exit 1; }; }
   
     # Don't try to exec as it changes $[0], causing all sort of problems
     # (the dirname of $[0] is not the place where we might find the
  -  # original and so on.  Autoconf is especially sensible to this).
  -  . ./$as_me.lineno
  +  # original and so on.  Autoconf is especially sensitive to this).
  +  . "./$as_me.lineno"
     # Exit status is that of the last command.
     exit
   }
   
   
  -case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
  -  *c*,-n*) ECHO_N= ECHO_C='
  -' ECHO_T='	' ;;
  -  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
  -  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
  +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
  +  as_dirname=dirname
  +else
  +  as_dirname=false
  +fi
  +
  +ECHO_C= ECHO_N= ECHO_T=
  +case `echo -n x` in
  +-n*)
  +  case `echo 'x\c'` in
  +  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
  +  *)   ECHO_C='\c';;
  +  esac;;
  +*)
  +  ECHO_N='-n';;
   esac
   
  -if expr a : '\(a\)' >/dev/null 2>&1; then
  +if expr a : '\(a\)' >/dev/null 2>&1 &&
  +   test "X`expr 00001 : '.*\(...\)'`" = X001; then
     as_expr=expr
   else
     as_expr=false
   fi
   
   rm -f conf$$ conf$$.exe conf$$.file
  +if test -d conf$$.dir; then
  +  rm -f conf$$.dir/conf$$.file
  +else
  +  rm -f conf$$.dir
  +  mkdir conf$$.dir
  +fi
   echo >conf$$.file
   if ln -s conf$$.file conf$$ 2>/dev/null; then
  -  # We could just check for DJGPP; but this test a) works b) is more generic
  -  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
  -  if test -f conf$$.exe; then
  -    # Don't use ln at all; we don't have any links
  +  as_ln_s='ln -s'
  +  # ... but there are two gotchas:
  +  # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
  +  # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
  +  # In both cases, we have to default to `cp -p'.
  +  ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
       as_ln_s='cp -p'
  -  else
  -    as_ln_s='ln -s'
  -  fi
   elif ln conf$$.file conf$$ 2>/dev/null; then
     as_ln_s=ln
   else
     as_ln_s='cp -p'
   fi
  -rm -f conf$$ conf$$.exe conf$$.file
  +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
  +rmdir conf$$.dir 2>/dev/null
   
   if mkdir -p . 2>/dev/null; then
     as_mkdir_p=:
  @@ -4059,7 +4583,28 @@
     as_mkdir_p=false
   fi
   
  -as_executable_p="test -f"
  +if test -x / >/dev/null 2>&1; then
  +  as_test_x='test -x'
  +else
  +  if ls -dL / >/dev/null 2>&1; then
  +    as_ls_L_option=L
  +  else
  +    as_ls_L_option=
  +  fi
  +  as_test_x='
  +    eval sh -c '\''
  +      if test -d "$1"; then
  +        test -d "$1/.";
  +      else
  +	case $1 in
  +        -*)set "./$1";;
  +	esac;
  +	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
  +	???[sx]*):;;*)false;;esac;fi
  +    '\'' sh
  +  '
  +fi
  +as_executable_p=$as_test_x
   
   # Sed expression to map a string onto a valid CPP name.
   as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
  @@ -4068,31 +4613,14 @@
   as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
   
   
  -# IFS
  -# We need space, tab and new line, in precisely that order.
  -as_nl='
  -'
  -IFS=" 	$as_nl"
  -
  -# CDPATH.
  -$as_unset CDPATH
  -
   exec 6>&1
   
  -# Open the log real soon, to keep \$[0] and so on meaningful, and to
  +# Save the log message, to keep $[0] and so on meaningful, and to
   # report actual input values of CONFIG_FILES etc. instead of their
  -# values after options handling.  Logging --version etc. is OK.
  -exec 5>>config.log
  -{
  -  echo
  -  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
  -## Running $as_me. ##
  -_ASBOX
  -} >&5
  -cat >&5 <<_CSEOF
  -
  +# values after options handling.
  +ac_log="
   This file was extended by $as_me, which was
  -generated by GNU Autoconf 2.59 (OpenPKG-CURRENT).  Invocation command line was
  +generated by GNU Autoconf 2.61 (OpenPKG-CURRENT).  Invocation command line was
   
     CONFIG_FILES    = $CONFIG_FILES
     CONFIG_HEADERS  = $CONFIG_HEADERS
  @@ -4100,30 +4628,19 @@
     CONFIG_COMMANDS = $CONFIG_COMMANDS
     $ $0 $@
   
  -_CSEOF
  -echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
  -echo >&5
  +on `(hostname || uname -n) 2>/dev/null | sed 1q`
  +"
  +
   _ACEOF
   
  +cat >>$CONFIG_STATUS <<_ACEOF
   # Files that config.status was made for.
  -if test -n "$ac_config_files"; then
  -  echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
  -fi
  -
  -if test -n "$ac_config_headers"; then
  -  echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
  -fi
  -
  -if test -n "$ac_config_links"; then
  -  echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
  -fi
  +config_files="$ac_config_files"
  +config_headers="$ac_config_headers"
   
  -if test -n "$ac_config_commands"; then
  -  echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
  -fi
  +_ACEOF
   
   cat >>$CONFIG_STATUS <<\_ACEOF
  -
   ac_cs_usage="\
   \`$as_me' instantiates files from templates according to the
   current configuration.
  @@ -4131,7 +4648,7 @@
   Usage: $0 [OPTIONS] [FILE]...
   
     -h, --help       print this help, then exit
  -  -V, --version    print version number, then exit
  +  -V, --version    print version number and configuration settings, then exit
     -q, --quiet      do not print progress messages
     -d, --debug      don't remove temporary files
         --recheck    update $as_me by reconfiguring in the same conditions
  @@ -4147,18 +4664,20 @@
   $config_headers
   
   Report bugs to <bug-autoconf@gnu.org>."
  -_ACEOF
   
  +_ACEOF
   cat >>$CONFIG_STATUS <<_ACEOF
   ac_cs_version="\\
   config.status
  -configured by $0, generated by GNU Autoconf 2.59 (OpenPKG-CURRENT),
  -  with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
  +configured by $0, generated by GNU Autoconf 2.61 (OpenPKG-CURRENT),
  +  with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
   
  -Copyright (C) 2003 Free Software Foundation, Inc.
  +Copyright (C) 2006 Free Software Foundation, Inc.
   This config.status script is free software; the Free Software Foundation
   gives unlimited permission to copy, distribute and modify it."
  -srcdir=$srcdir
  +
  +ac_pwd='$ac_pwd'
  +srcdir='$srcdir'
   _ACEOF
   
   cat >>$CONFIG_STATUS <<\_ACEOF
  @@ -4169,39 +4688,24 @@
   do
     case $1 in
     --*=*)
  -    ac_option=`expr "x$1" : 'x\([^=]*\)='`
  -    ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
  +    ac_option=`expr "X$1" : 'X\([^=]*\)='`
  +    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
       ac_shift=:
       ;;
  -  -*)
  +  *)
       ac_option=$1
       ac_optarg=$2
       ac_shift=shift
       ;;
  -  *) # This is not an option, so the user has probably given explicit
  -     # arguments.
  -     ac_option=$1
  -     ac_need_defaults=false;;
     esac
   
     case $ac_option in
     # Handling of the options.
  -_ACEOF
  -cat >>$CONFIG_STATUS <<\_ACEOF
     -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
       ac_cs_recheck=: ;;
  -  --version | --vers* | -V )
  -    echo "$ac_cs_version"; exit 0 ;;
  -  --he | --h)
  -    # Conflict between --help and --header
  -    { { echo "$as_me:$LINENO: error: ambiguous option: $1
  -Try \`$0 --help' for more information." >&5
  -echo "$as_me: error: ambiguous option: $1
  -Try \`$0 --help' for more information." >&2;}
  -   { (exit 1); exit 1; }; };;
  -  --help | --hel | -h )
  -    echo "$ac_cs_usage"; exit 0 ;;
  -  --debug | --d* | -d )
  +  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
  +    echo "$ac_cs_version"; exit ;;
  +  --debug | --debu | --deb | --de | --d | -d )
       debug=: ;;
     --file | --fil | --fi | --f )
       $ac_shift
  @@ -4211,18 +4715,24 @@
       $ac_shift
       CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
       ac_need_defaults=false;;
  +  --he | --h)
  +    # Conflict between --help and --header
  +    { echo "$as_me: error: ambiguous option: $1
  +Try \`$0 --help' for more information." >&2
  +   { (exit 1); exit 1; }; };;
  +  --help | --hel | -h )
  +    echo "$ac_cs_usage"; exit ;;
     -q | -quiet | --quiet | --quie | --qui | --qu | --q \
     | -silent | --silent | --silen | --sile | --sil | --si | --s)
       ac_cs_silent=: ;;
   
     # This is an error.
  -  -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
  -Try \`$0 --help' for more information." >&5
  -echo "$as_me: error: unrecognized option: $1
  -Try \`$0 --help' for more information." >&2;}
  +  -*) { echo "$as_me: error: unrecognized option: $1
  +Try \`$0 --help' for more information." >&2
      { (exit 1); exit 1; }; } ;;
   
  -  *) ac_config_targets="$ac_config_targets $1" ;;
  +  *) ac_config_targets="$ac_config_targets $1"
  +     ac_need_defaults=false ;;
   
     esac
     shift
  @@ -4238,30 +4748,44 @@
   _ACEOF
   cat >>$CONFIG_STATUS <<_ACEOF
   if \$ac_cs_recheck; then
  -  echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
  -  exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
  +  echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
  +  CONFIG_SHELL=$SHELL
  +  export CONFIG_SHELL
  +  exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
   fi
   
   _ACEOF
  +cat >>$CONFIG_STATUS <<\_ACEOF
  +exec 5>>config.log
  +{
  +  echo
  +  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
  +## Running $as_me. ##
  +_ASBOX
  +  echo "$ac_log"
  +} >&5
   
  -
  -
  -
  +_ACEOF
  +cat >>$CONFIG_STATUS <<_ACEOF
  +_ACEOF
   
   cat >>$CONFIG_STATUS <<\_ACEOF
  +
  +# Handling of arguments.
   for ac_config_target in $ac_config_targets
   do
  -  case "$ac_config_target" in
  -  # Handling of arguments.
  -  "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
  -  "config_sc.h" ) CONFIG_FILES="$CONFIG_FILES config_sc.h" ;;
  -  "config_ac.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config_ac.h" ;;
  +  case $ac_config_target in
  +    "config_ac.h") CONFIG_HEADERS="$CONFIG_HEADERS config_ac.h" ;;
  +    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
  +    "config_sc.h") CONFIG_FILES="$CONFIG_FILES config_sc.h" ;;
  +
     *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
   echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
      { (exit 1); exit 1; }; };;
     esac
   done
   
  +
   # If the user did not use the arguments to specify the items to instantiate,
   # then the envvar interface is used.  Set only those that are not.
   # We use the long form for the default assignment because of an extremely
  @@ -4272,294 +4796,362 @@
   fi
   
   # Have a temporary directory for convenience.  Make it in the build tree
  -# simply because there is no reason to put it here, and in addition,
  +# simply because there is no reason against having it here, and in addition,
   # creating and moving files from /tmp can sometimes cause problems.
  -# Create a temporary directory, and hook for its removal unless debugging.
  +# Hook for its removal unless debugging.
  +# Note that there is a small window in which the directory will not be cleaned:
  +# after its creation but before its name has been assigned to `$tmp'.
   $debug ||
   {
  -  trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
  +  tmp=
  +  trap 'exit_status=$?
  +  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
  +' 0
     trap '{ (exit 1); exit 1; }' 1 2 13 15
   }
  -
   # Create a (secure) tmp directory for tmp files.
   
   {
  -  tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
  +  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
     test -n "$tmp" && test -d "$tmp"
   }  ||
   {
  -  tmp=./confstat$$-$RANDOM
  -  (umask 077 && mkdir $tmp)
  +  tmp=./conf$$-$RANDOM
  +  (umask 077 && mkdir "$tmp")
   } ||
   {
      echo "$me: cannot create a temporary directory in ." >&2
      { (exit 1); exit 1; }
   }
   
  -_ACEOF
  -
  -cat >>$CONFIG_STATUS <<_ACEOF
  -
   #
  -# CONFIG_FILES section.
  +# Set up the sed scripts for CONFIG_FILES section.
   #
   
   # No need to generate the scripts if there are no CONFIG_FILES.
   # This happens for instance when ./config.status config.h
  -if test -n "\$CONFIG_FILES"; then
  -  # Protect against being on the right side of a sed subst in config.status.
  -  sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
  -   s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
  -s,@SHELL@,$SHELL,;t t
  -s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
  -s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
  -s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
  -s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
  -s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
  -s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
  -s,@exec_prefix@,$exec_prefix,;t t
  -s,@prefix@,$prefix,;t t
  -s,@program_transform_name@,$program_transform_name,;t t
  -s,@bindir@,$bindir,;t t
  -s,@sbindir@,$sbindir,;t t
  -s,@libexecdir@,$libexecdir,;t t
  -s,@datadir@,$datadir,;t t
  -s,@sysconfdir@,$sysconfdir,;t t
  -s,@sharedstatedir@,$sharedstatedir,;t t
  -s,@localstatedir@,$localstatedir,;t t
  -s,@libdir@,$libdir,;t t
  -s,@includedir@,$includedir,;t t
  -s,@oldincludedir@,$oldincludedir,;t t
  -s,@infodir@,$infodir,;t t
  -s,@mandir@,$mandir,;t t
  -s,@build_alias@,$build_alias,;t t
  -s,@host_alias@,$host_alias,;t t
  -s,@target_alias@,$target_alias,;t t
  -s,@DEFS@,$DEFS,;t t
  -s,@ECHO_C@,$ECHO_C,;t t
  -s,@ECHO_N@,$ECHO_N,;t t
  -s,@ECHO_T@,$ECHO_T,;t t
  -s,@LIBS@,$LIBS,;t t
  -s,@CC@,$CC,;t t
  -s,@CFLAGS@,$CFLAGS,;t t
  -s,@LDFLAGS@,$LDFLAGS,;t t
  -s,@CPPFLAGS@,$CPPFLAGS,;t t
  -s,@ac_ct_CC@,$ac_ct_CC,;t t
  -s,@EXEEXT@,$EXEEXT,;t t
  -s,@OBJEXT@,$OBJEXT,;t t
  -s,@CPP@,$CPP,;t t
  -s,@debug@,$debug,;t t
  -s,@SET_MAKE@,$SET_MAKE,;t t
  -s,@SHTOOL@,$SHTOOL,;t t
  -s,@EGREP@,$EGREP,;t t
  -s,@LIBOBJS@,$LIBOBJS,;t t
  -s,@LTLIBOBJS@,$LTLIBOBJS,;t t
  -CEOF
  -
  -_ACEOF
  -
  -  cat >>$CONFIG_STATUS <<\_ACEOF
  -  # Split the substitutions into bite-sized pieces for seds with
  -  # small command number limits, like on Digital OSF/1 and HP-UX.
  -  ac_max_sed_lines=48
  -  ac_sed_frag=1 # Number of current file.
  -  ac_beg=1 # First line for current file.
  -  ac_end=$ac_max_sed_lines # Line after last line for current file.
  -  ac_more_lines=:
  -  ac_sed_cmds=
  -  while $ac_more_lines; do
  -    if test $ac_beg -gt 1; then
  -      sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
  -    else
  -      sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
  -    fi
  -    if test ! -s $tmp/subs.frag; then
  -      ac_more_lines=false
  -    else
  -      # The purpose of the label and of the branching condition is to
  -      # speed up the sed processing (if there are no `@' at all, there
  -      # is no need to browse any of the substitutions).
  -      # These are the two extra sed commands mentioned above.
  -      (echo ':t
  -  /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
  -      if test -z "$ac_sed_cmds"; then
  -	ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
  -      else
  -	ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
  -      fi
  -      ac_sed_frag=`expr $ac_sed_frag + 1`
  -      ac_beg=$ac_end
  -      ac_end=`expr $ac_end + $ac_max_sed_lines`
  -    fi
  -  done
  -  if test -z "$ac_sed_cmds"; then
  -    ac_sed_cmds=cat
  +if test -n "$CONFIG_FILES"; then
  +
  +_ACEOF
  +
  +
  +
  +ac_delim='%!_!# '
  +for ac_last_try in false false false false false :; do
  +  cat >conf$$subs.sed <<_ACEOF
  +SHELL!$SHELL$ac_delim
  +PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim
  +PACKAGE_NAME!$PACKAGE_NAME$ac_delim
  +PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim
  +PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim
  +PACKAGE_STRING!$PACKAGE_STRING$ac_delim
  +PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim
  +exec_prefix!$exec_prefix$ac_delim
  +prefix!$prefix$ac_delim
  +program_transform_name!$program_transform_name$ac_delim
  +bindir!$bindir$ac_delim
  +sbindir!$sbindir$ac_delim
  +libexecdir!$libexecdir$ac_delim
  +datarootdir!$datarootdir$ac_delim
  +datadir!$datadir$ac_delim
  +sysconfdir!$sysconfdir$ac_delim
  +sharedstatedir!$sharedstatedir$ac_delim
  +localstatedir!$localstatedir$ac_delim
  +includedir!$includedir$ac_delim
  +oldincludedir!$oldincludedir$ac_delim
  +docdir!$docdir$ac_delim
  +infodir!$infodir$ac_delim
  +htmldir!$htmldir$ac_delim
  +dvidir!$dvidir$ac_delim
  +pdfdir!$pdfdir$ac_delim
  +psdir!$psdir$ac_delim
  +libdir!$libdir$ac_delim
  +localedir!$localedir$ac_delim
  +mandir!$mandir$ac_delim
  +DEFS!$DEFS$ac_delim
  +ECHO_C!$ECHO_C$ac_delim
  +ECHO_N!$ECHO_N$ac_delim
  +ECHO_T!$ECHO_T$ac_delim
  +LIBS!$LIBS$ac_delim
  +build_alias!$build_alias$ac_delim
  +host_alias!$host_alias$ac_delim
  +target_alias!$target_alias$ac_delim
  +CC!$CC$ac_delim
  +CFLAGS!$CFLAGS$ac_delim
  +LDFLAGS!$LDFLAGS$ac_delim
  +CPPFLAGS!$CPPFLAGS$ac_delim
  +ac_ct_CC!$ac_ct_CC$ac_delim
  +EXEEXT!$EXEEXT$ac_delim
  +OBJEXT!$OBJEXT$ac_delim
  +CPP!$CPP$ac_delim
  +debug!$debug$ac_delim
  +SET_MAKE!$SET_MAKE$ac_delim
  +SHTOOL!$SHTOOL$ac_delim
  +GREP!$GREP$ac_delim
  +EGREP!$EGREP$ac_delim
  +LIBOBJS!$LIBOBJS$ac_delim
  +LTLIBOBJS!$LTLIBOBJS$ac_delim
  +_ACEOF
  +
  +  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 52; then
  +    break
  +  elif $ac_last_try; then
  +    { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
  +echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
  +   { (exit 1); exit 1; }; }
  +  else
  +    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
     fi
  -fi # test -n "$CONFIG_FILES"
  +done
   
  +ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
  +if test -n "$ac_eof"; then
  +  ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
  +  ac_eof=`expr $ac_eof + 1`
  +fi
  +
  +cat >>$CONFIG_STATUS <<_ACEOF
  +cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof
  +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end
   _ACEOF
  +sed '
  +s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
  +s/^/s,@/; s/!/@,|#_!!_#|/
  +:n
  +t n
  +s/'"$ac_delim"'$/,g/; t
  +s/$/\\/; p
  +N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
  +' >>$CONFIG_STATUS <conf$$subs.sed
  +rm -f conf$$subs.sed
  +cat >>$CONFIG_STATUS <<_ACEOF
  +:end
  +s/|#_!!_#|//g
  +CEOF$ac_eof
  +_ACEOF
  +
  +
  +# VPATH may cause trouble with some makes, so we remove $(srcdir),
  +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
  +# trailing colons and then remove the whole line if VPATH becomes empty
  +# (actually we leave an empty line to preserve line numbers).
  +if test "x$srcdir" = x.; then
  +  ac_vpsub='/^[	 ]*VPATH[	 ]*=/{
  +s/:*\$(srcdir):*/:/
  +s/:*\${srcdir}:*/:/
  +s/:*@srcdir@:*/:/
  +s/^\([^=]*=[	 ]*\):*/\1/
  +s/:*$//
  +s/^[^=]*=[	 ]*$//
  +}'
  +fi
  +
   cat >>$CONFIG_STATUS <<\_ACEOF
  -for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
  -  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
  -  case $ac_file in
  -  - | *:- | *:-:* ) # input from stdin
  -	cat >$tmp/stdin
  -	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
  -	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
  -  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
  -	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
  -  * )   ac_file_in=$ac_file.in ;;
  +fi # test -n "$CONFIG_FILES"
  +
  +
  +for ac_tag in  :F $CONFIG_FILES  :H $CONFIG_HEADERS
  +do
  +  case $ac_tag in
  +  :[FHLC]) ac_mode=$ac_tag; continue;;
  +  esac
  +  case $ac_mode$ac_tag in
  +  :[FHL]*:*);;
  +  :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5
  +echo "$as_me: error: Invalid tag $ac_tag." >&2;}
  +   { (exit 1); exit 1; }; };;
  +  :[FH]-) ac_tag=-:-;;
  +  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
  +  esac
  +  ac_save_IFS=$IFS
  +  IFS=:
  +  set x $ac_tag
  +  IFS=$ac_save_IFS
  +  shift
  +  ac_file=$1
  +  shift
  +
  +  case $ac_mode in
  +  :L) ac_source=$1;;
  +  :[FH])
  +    ac_file_inputs=
  +    for ac_f
  +    do
  +      case $ac_f in
  +      -) ac_f="$tmp/stdin";;
  +      *) # Look for the file first in the build tree, then in the source tree
  +	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
  +	 # because $ac_f cannot contain `:'.
  +	 test -f "$ac_f" ||
  +	   case $ac_f in
  +	   [\\/$]*) false;;
  +	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
  +	   esac ||
  +	   { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
  +echo "$as_me: error: cannot find input file: $ac_f" >&2;}
  +   { (exit 1); exit 1; }; };;
  +      esac
  +      ac_file_inputs="$ac_file_inputs $ac_f"
  +    done
  +
  +    # Let's still pretend it is `configure' which instantiates (i.e., don't
  +    # use $as_me), people would be surprised to read:
  +    #    /* config.h.  Generated by config.status.  */
  +    configure_input="Generated from "`IFS=:
  +	  echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure."
  +    if test x"$ac_file" != x-; then
  +      configure_input="$ac_file.  $configure_input"
  +      { echo "$as_me:$LINENO: creating $ac_file" >&5
  +echo "$as_me: creating $ac_file" >&6;}
  +    fi
  +
  +    case $ac_tag in
  +    *:-:* | *:-) cat >"$tmp/stdin";;
  +    esac
  +    ;;
     esac
   
  -  # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
  -  ac_dir=`(dirname "$ac_file") 2>/dev/null ||
  +  ac_dir=`$as_dirname -- "$ac_file" ||
   $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
   	 X"$ac_file" : 'X\(//\)[^/]' \| \
   	 X"$ac_file" : 'X\(//\)$' \| \
  -	 X"$ac_file" : 'X\(/\)' \| \
  -	 .     : '\(.\)' 2>/dev/null ||
  +	 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
   echo X"$ac_file" |
  -    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
  -  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
  -  	  /^X\(\/\/\)$/{ s//\1/; q; }
  -  	  /^X\(\/\).*/{ s//\1/; q; }
  -  	  s/.*/./; q'`
  -  { if $as_mkdir_p; then
  -    mkdir -p "$ac_dir"
  -  else
  -    as_dir="$ac_dir"
  +    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
  +	    s//\1/
  +	    q
  +	  }
  +	  /^X\(\/\/\)[^/].*/{
  +	    s//\1/
  +	    q
  +	  }
  +	  /^X\(\/\/\)$/{
  +	    s//\1/
  +	    q
  +	  }
  +	  /^X\(\/\).*/{
  +	    s//\1/
  +	    q
  +	  }
  +	  s/.*/./; q'`
  +  { as_dir="$ac_dir"
  +  case $as_dir in #(
  +  -*) as_dir=./$as_dir;;
  +  esac
  +  test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
       as_dirs=
  -    while test ! -d "$as_dir"; do
  -      as_dirs="$as_dir $as_dirs"
  -      as_dir=`(dirname "$as_dir") 2>/dev/null ||
  +    while :; do
  +      case $as_dir in #(
  +      *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #(
  +      *) as_qdir=$as_dir;;
  +      esac
  +      as_dirs="'$as_qdir' $as_dirs"
  +      as_dir=`$as_dirname -- "$as_dir" ||
   $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
   	 X"$as_dir" : 'X\(//\)[^/]' \| \
   	 X"$as_dir" : 'X\(//\)$' \| \
  -	 X"$as_dir" : 'X\(/\)' \| \
  -	 .     : '\(.\)' 2>/dev/null ||
  +	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
   echo X"$as_dir" |
  -    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
  -  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
  -  	  /^X\(\/\/\)$/{ s//\1/; q; }
  -  	  /^X\(\/\).*/{ s//\1/; q; }
  -  	  s/.*/./; q'`
  +    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
  +	    s//\1/
  +	    q
  +	  }
  +	  /^X\(\/\/\)[^/].*/{
  +	    s//\1/
  +	    q
  +	  }
  +	  /^X\(\/\/\)$/{
  +	    s//\1/
  +	    q
  +	  }
  +	  /^X\(\/\).*/{
  +	    s//\1/
  +	    q
  +	  }
  +	  s/.*/./; q'`
  +      test -d "$as_dir" && break
       done
  -    test ! -n "$as_dirs" || mkdir $as_dirs
  -  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
  -echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
  +    test -z "$as_dirs" || eval "mkdir $as_dirs"
  +  } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
  +echo "$as_me: error: cannot create directory $as_dir" >&2;}
      { (exit 1); exit 1; }; }; }
  -
     ac_builddir=.
   
  -if test "$ac_dir" != .; then
  +case "$ac_dir" in
  +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
  +*)
     ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
  -  # A "../" for each directory in $ac_dir_suffix.
  -  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
  -else
  -  ac_dir_suffix= ac_top_builddir=
  -fi
  +  # A ".." for each directory in $ac_dir_suffix.
  +  ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
  +  case $ac_top_builddir_sub in
  +  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
  +  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
  +  esac ;;
  +esac
  +ac_abs_top_builddir=$ac_pwd
  +ac_abs_builddir=$ac_pwd$ac_dir_suffix
  +# for backward compatibility:
  +ac_top_builddir=$ac_top_build_prefix
   
   case $srcdir in
  -  .)  # No --srcdir option.  We are building in place.
  +  .)  # We are building in place.
       ac_srcdir=.
  -    if test -z "$ac_top_builddir"; then
  -       ac_top_srcdir=.
  -    else
  -       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
  -    fi ;;
  -  [\\/]* | ?:[\\/]* )  # Absolute path.
  +    ac_top_srcdir=$ac_top_builddir_sub
  +    ac_abs_top_srcdir=$ac_pwd ;;
  +  [\\/]* | ?:[\\/]* )  # Absolute name.
       ac_srcdir=$srcdir$ac_dir_suffix;
  -    ac_top_srcdir=$srcdir ;;
  -  *) # Relative path.
  -    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
  -    ac_top_srcdir=$ac_top_builddir$srcdir ;;
  -esac
  -
  -# Do not use `cd foo && pwd` to compute absolute paths, because
  -# the directories may not exist.
  -case `pwd` in
  -.) ac_abs_builddir="$ac_dir";;
  -*)
  -  case "$ac_dir" in
  -  .) ac_abs_builddir=`pwd`;;
  -  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
  -  *) ac_abs_builddir=`pwd`/"$ac_dir";;
  -  esac;;
  -esac
  -case $ac_abs_builddir in
  -.) ac_abs_top_builddir=${ac_top_builddir}.;;
  -*)
  -  case ${ac_top_builddir}. in
  -  .) ac_abs_top_builddir=$ac_abs_builddir;;
  -  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
  -  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
  -  esac;;
  -esac
  -case $ac_abs_builddir in
  -.) ac_abs_srcdir=$ac_srcdir;;
  -*)
  -  case $ac_srcdir in
  -  .) ac_abs_srcdir=$ac_abs_builddir;;
  -  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
  -  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
  -  esac;;
  -esac
  -case $ac_abs_builddir in
  -.) ac_abs_top_srcdir=$ac_top_srcdir;;
  -*)
  -  case $ac_top_srcdir in
  -  .) ac_abs_top_srcdir=$ac_abs_builddir;;
  -  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
  -  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
  -  esac;;
  +    ac_top_srcdir=$srcdir
  +    ac_abs_top_srcdir=$srcdir ;;
  +  *) # Relative name.
  +    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
  +    ac_top_srcdir=$ac_top_build_prefix$srcdir
  +    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
   esac
  +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
   
   
  +  case $ac_mode in
  +  :F)
  +  #
  +  # CONFIG_FILE
  +  #
   
  -  if test x"$ac_file" != x-; then
  -    { echo "$as_me:$LINENO: creating $ac_file" >&5
  -echo "$as_me: creating $ac_file" >&6;}
  -    rm -f "$ac_file"
  -  fi
  -  # Let's still pretend it is `configure' which instantiates (i.e., don't
  -  # use $as_me), people would be surprised to read:
  -  #    /* config.h.  Generated by config.status.  */
  -  if test x"$ac_file" = x-; then
  -    configure_input=
  -  else
  -    configure_input="$ac_file.  "
  -  fi
  -  configure_input=$configure_input"Generated from `echo $ac_file_in |
  -				     sed 's,.*/,,'` by configure."
  +_ACEOF
   
  -  # First look for the input files in the build tree, otherwise in the
  -  # src tree.
  -  ac_file_inputs=`IFS=:
  -    for f in $ac_file_in; do
  -      case $f in
  -      -) echo $tmp/stdin ;;
  -      [\\/$]*)
  -	 # Absolute (can't be DOS-style, as IFS=:)
  -	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
  -echo "$as_me: error: cannot find input file: $f" >&2;}
  -   { (exit 1); exit 1; }; }
  -	 echo "$f";;
  -      *) # Relative
  -	 if test -f "$f"; then
  -	   # Build tree
  -	   echo "$f"
  -	 elif test -f "$srcdir/$f"; then
  -	   # Source tree
  -	   echo "$srcdir/$f"
  -	 else
  -	   # /dev/null tree
  -	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
  -echo "$as_me: error: cannot find input file: $f" >&2;}
  -   { (exit 1); exit 1; }; }
  -	 fi;;
  -      esac
  -    done` || { (exit 1); exit 1; }
  +cat >>$CONFIG_STATUS <<\_ACEOF
  +# If the template does not know about datarootdir, expand it.
  +# FIXME: This hack should be removed a few years after 2.60.
  +ac_datarootdir_hack=; ac_datarootdir_seen=
  +
  +case `sed -n '/datarootdir/ {
  +  p
  +  q
  +}
  +/@datadir@/p
  +/@docdir@/p
  +/@infodir@/p
  +/@localedir@/p
  +/@mandir@/p
  +' $ac_file_inputs` in
  +*datarootdir*) ac_datarootdir_seen=yes;;
  +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
  +  { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
  +echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
  +_ACEOF
  +cat >>$CONFIG_STATUS <<_ACEOF
  +  ac_datarootdir_hack='
  +  s&@datadir@&$datadir&g
  +  s&@docdir@&$docdir&g
  +  s&@infodir@&$infodir&g
  +  s&@localedir@&$localedir&g
  +  s&@mandir@&$mandir&g
  +    s&\\\${datarootdir}&$datarootdir&g' ;;
  +esac
   _ACEOF
  +
  +# Neutralize VPATH when `$srcdir' = `.'.
  +# Shell code in configure.ac might set extrasub.
  +# FIXME: do we really want to maintain this feature?
   cat >>$CONFIG_STATUS <<_ACEOF
     sed "$ac_vpsub
   $extrasub
  @@ -4567,251 +5159,136 @@
   cat >>$CONFIG_STATUS <<\_ACEOF
   :t
   /@[a-zA-Z_][a-zA-Z_0-9]*@/!b
  -s,@configure_input@,$configure_input,;t t
  -s,@srcdir@,$ac_srcdir,;t t
  -s,@abs_srcdir@,$ac_abs_srcdir,;t t
  -s,@top_srcdir@,$ac_top_srcdir,;t t
  -s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
  -s,@builddir@,$ac_builddir,;t t
  -s,@abs_builddir@,$ac_abs_builddir,;t t
  -s,@top_builddir@,$ac_top_builddir,;t t
  -s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
  -" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
  -  rm -f $tmp/stdin
  -  if test x"$ac_file" != x-; then
  -    mv $tmp/out $ac_file
  -  else
  -    cat $tmp/out
  -    rm -f $tmp/out
  -  fi
  +s&@configure_input@&$configure_input&;t t
  +s&@top_builddir@&$ac_top_builddir_sub&;t t
  +s&@srcdir@&$ac_srcdir&;t t
  +s&@abs_srcdir@&$ac_abs_srcdir&;t t
  +s&@top_srcdir@&$ac_top_srcdir&;t t
  +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
  +s&@builddir@&$ac_builddir&;t t
  +s&@abs_builddir@&$ac_abs_builddir&;t t
  +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
  +$ac_datarootdir_hack
  +" $ac_file_inputs | sed -f "$tmp/subs-1.sed" >$tmp/out
  +
  +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
  +  { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
  +  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
  +  { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
  +which seems to be undefined.  Please make sure it is defined." >&5
  +echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
  +which seems to be undefined.  Please make sure it is defined." >&2;}
   
  -done
  -_ACEOF
  -cat >>$CONFIG_STATUS <<\_ACEOF
  -
  -#
  -# CONFIG_HEADER section.
  -#
  -
  -# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
  -# NAME is the cpp macro being defined and VALUE is the value it is being given.
  -#
  -# ac_d sets the value in "#define NAME VALUE" lines.
  -ac_dA='s,^\([	 ]*\)#\([	 ]*define[	 ][	 ]*\)'
  -ac_dB='[	 ].*$,\1#\2'
  -ac_dC=' '
  -ac_dD=',;t'
  -# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
  -ac_uA='s,^\([	 ]*\)#\([	 ]*\)undef\([	 ][	 ]*\)'
  -ac_uB='$,\1#\2define\3'
  -ac_uC=' '
  -ac_uD=',;t'
  -
  -for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
  -  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
  +  rm -f "$tmp/stdin"
     case $ac_file in
  -  - | *:- | *:-:* ) # input from stdin
  -	cat >$tmp/stdin
  -	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
  -	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
  -  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
  -	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
  -  * )   ac_file_in=$ac_file.in ;;
  +  -) cat "$tmp/out"; rm -f "$tmp/out";;
  +  *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;;
     esac
  + ;;
  +  :H)
  +  #
  +  # CONFIG_HEADER
  +  #
  +_ACEOF
  +
  +# Transform confdefs.h into a sed script `conftest.defines', that
  +# substitutes the proper values into config.h.in to produce config.h.
  +rm -f conftest.defines conftest.tail
  +# First, append a space to every undef/define line, to ease matching.
  +echo 's/$/ /' >conftest.defines
  +# Then, protect against being on the right side of a sed subst, or in
  +# an unquoted here document, in config.status.  If some macros were
  +# called several times there might be several #defines for the same
  +# symbol, which is useless.  But do not sort them, since the last
  +# AC_DEFINE must be honored.
  +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
  +# These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where
  +# NAME is the cpp macro being defined, VALUE is the value it is being given.
  +# PARAMS is the parameter list in the macro definition--in most cases, it's
  +# just an empty string.
  +ac_dA='s,^\\([	 #]*\\)[^	 ]*\\([	 ]*'
  +ac_dB='\\)[	 (].*,\\1define\\2'
  +ac_dC=' '
  +ac_dD=' ,'
   
  -  test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
  -echo "$as_me: creating $ac_file" >&6;}
  -
  -  # First look for the input files in the build tree, otherwise in the
  -  # src tree.
  -  ac_file_inputs=`IFS=:
  -    for f in $ac_file_in; do
  -      case $f in
  -      -) echo $tmp/stdin ;;
  -      [\\/$]*)
  -	 # Absolute (can't be DOS-style, as IFS=:)
  -	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
  -echo "$as_me: error: cannot find input file: $f" >&2;}
  -   { (exit 1); exit 1; }; }
  -	 # Do quote $f, to prevent DOS paths from being IFS'd.
  -	 echo "$f";;
  -      *) # Relative
  -	 if test -f "$f"; then
  -	   # Build tree
  -	   echo "$f"
  -	 elif test -f "$srcdir/$f"; then
  -	   # Source tree
  -	   echo "$srcdir/$f"
  -	 else
  -	   # /dev/null tree
  -	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
  -echo "$as_me: error: cannot find input file: $f" >&2;}
  -   { (exit 1); exit 1; }; }
  -	 fi;;
  -      esac
  -    done` || { (exit 1); exit 1; }
  -  # Remove the trailing spaces.
  -  sed 's/[	 ]*$//' $ac_file_inputs >$tmp/in
  -
  -_ACEOF
  -
  -# Transform confdefs.h into two sed scripts, `conftest.defines' and
  -# `conftest.undefs', that substitutes the proper values into
  -# config.h.in to produce config.h.  The first handles `#define'
  -# templates, and the second `#undef' templates.
  -# And first: Protect against being on the right side of a sed subst in
  -# config.status.  Protect against being in an unquoted here document
  -# in config.status.
  -rm -f conftest.defines conftest.undefs
  -# Using a here document instead of a string reduces the quoting nightmare.
  -# Putting comments in sed scripts is not portable.
  -#
  -# `end' is used to avoid that the second main sed command (meant for
  -# 0-ary CPP macros) applies to n-ary macro definitions.
  -# See the Autoconf documentation for `clear'.
  -cat >confdef2sed.sed <<\_ACEOF
  -s/[\\&,]/\\&/g
  -s,[\\$`],\\&,g
  -t clear
  -: clear
  -s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 (][^	 (]*\)\(([^)]*)\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
  -t end
  -s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 ][^	 ]*\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
  -: end
  -_ACEOF
  -# If some macros were called several times there might be several times
  -# the same #defines, which is useless.  Nevertheless, we may not want to
  -# sort them, since we want the *last* AC-DEFINE to be honored.
  -uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
  -sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
  -rm -f confdef2sed.sed
  +uniq confdefs.h |
  +  sed -n '
  +	t rset
  +	:rset
  +	s/^[	 ]*#[	 ]*define[	 ][	 ]*//
  +	t ok
  +	d
  +	:ok
  +	s/[\\&,]/\\&/g
  +	s/^\('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p
  +	s/^\('"$ac_word_re"'\)[	 ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p
  +  ' >>conftest.defines
   
  -# This sed command replaces #undef with comments.  This is necessary, for
  +# Remove the space that was appended to ease matching.
  +# Then replace #undef with comments.  This is necessary, for
   # example, in the case of _POSIX_SOURCE, which is predefined and required
   # on some systems where configure will not decide to define it.
  -cat >>conftest.undefs <<\_ACEOF
  -s,^[	 ]*#[	 ]*undef[	 ][	 ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
  -_ACEOF
  +# (The regexp can be short, since the line contains either #define or #undef.)
  +echo 's/ $//
  +s,^[	 #]*u.*,/* & */,' >>conftest.defines
  +
  +# Break up conftest.defines:
  +ac_max_sed_lines=50
  +
  +# First sed command is:	 sed -f defines.sed $ac_file_inputs >"$tmp/out1"
  +# Second one is:	 sed -f defines.sed "$tmp/out1" >"$tmp/out2"
  +# Third one will be:	 sed -f defines.sed "$tmp/out2" >"$tmp/out1"
  +# et cetera.
  +ac_in='$ac_file_inputs'
  +ac_out='"$tmp/out1"'
  +ac_nxt='"$tmp/out2"'
   
  -# Break up conftest.defines because some shells have a limit on the size
  -# of here documents, and old seds have small limits too (100 cmds).
  -echo '  # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
  -echo '  if grep "^[	 ]*#[	 ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
  -echo '  # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
  -echo '  :' >>$CONFIG_STATUS
  -rm -f conftest.tail
  -while grep . conftest.defines >/dev/null
  +while :
   do
  -  # Write a limited-size here document to $tmp/defines.sed.
  -  echo '  cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
  -  # Speed up: don't consider the non `#define' lines.
  -  echo '/^[	 ]*#[	 ]*define/!b' >>$CONFIG_STATUS
  -  # Work around the forget-to-reset-the-flag bug.
  -  echo 't clr' >>$CONFIG_STATUS
  -  echo ': clr' >>$CONFIG_STATUS
  -  sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
  +  # Write a here document:
  +    cat >>$CONFIG_STATUS <<_ACEOF
  +    # First, check the format of the line:
  +    cat >"\$tmp/defines.sed" <<\\CEOF
  +/^[	 ]*#[	 ]*undef[	 ][	 ]*$ac_word_re[	 ]*\$/b def
  +/^[	 ]*#[	 ]*define[	 ][	 ]*$ac_word_re[(	 ]/b def
  +b
  +:def
  +_ACEOF
  +  sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS
     echo 'CEOF
  -  sed -f $tmp/defines.sed $tmp/in >$tmp/out
  -  rm -f $tmp/in
  -  mv $tmp/out $tmp/in
  -' >>$CONFIG_STATUS
  -  sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
  +    sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS
  +  ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in
  +  sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail
  +  grep . conftest.tail >/dev/null || break
     rm -f conftest.defines
     mv conftest.tail conftest.defines
   done
  -rm -f conftest.defines
  -echo '  fi # grep' >>$CONFIG_STATUS
  -echo >>$CONFIG_STATUS
  -
  -# Break up conftest.undefs because some shells have a limit on the size
  -# of here documents, and old seds have small limits too (100 cmds).
  -echo '  # Handle all the #undef templates' >>$CONFIG_STATUS
  -rm -f conftest.tail
  -while grep . conftest.undefs >/dev/null
  -do
  -  # Write a limited-size here document to $tmp/undefs.sed.
  -  echo '  cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
  -  # Speed up: don't consider the non `#undef'
  -  echo '/^[	 ]*#[	 ]*undef/!b' >>$CONFIG_STATUS
  -  # Work around the forget-to-reset-the-flag bug.
  -  echo 't clr' >>$CONFIG_STATUS
  -  echo ': clr' >>$CONFIG_STATUS
  -  sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
  -  echo 'CEOF
  -  sed -f $tmp/undefs.sed $tmp/in >$tmp/out
  -  rm -f $tmp/in
  -  mv $tmp/out $tmp/in
  -' >>$CONFIG_STATUS
  -  sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
  -  rm -f conftest.undefs
  -  mv conftest.tail conftest.undefs
  -done
  -rm -f conftest.undefs
  +rm -f conftest.defines conftest.tail
   
  +echo "ac_result=$ac_in" >>$CONFIG_STATUS
   cat >>$CONFIG_STATUS <<\_ACEOF
  -  # Let's still pretend it is `configure' which instantiates (i.e., don't
  -  # use $as_me), people would be surprised to read:
  -  #    /* config.h.  Generated by config.status.  */
  -  if test x"$ac_file" = x-; then
  -    echo "/* Generated by configure.  */" >$tmp/config.h
  -  else
  -    echo "/* $ac_file.  Generated by configure.  */" >$tmp/config.h
  -  fi
  -  cat $tmp/in >>$tmp/config.h
  -  rm -f $tmp/in
     if test x"$ac_file" != x-; then
  -    if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
  +    echo "/* $configure_input  */" >"$tmp/config.h"
  +    cat "$ac_result" >>"$tmp/config.h"
  +    if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then
         { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
   echo "$as_me: $ac_file is unchanged" >&6;}
       else
  -      ac_dir=`(dirname "$ac_file") 2>/dev/null ||
  -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
  -	 X"$ac_file" : 'X\(//\)[^/]' \| \
  -	 X"$ac_file" : 'X\(//\)$' \| \
  -	 X"$ac_file" : 'X\(/\)' \| \
  -	 .     : '\(.\)' 2>/dev/null ||
  -echo X"$ac_file" |
  -    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
  -  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
  -  	  /^X\(\/\/\)$/{ s//\1/; q; }
  -  	  /^X\(\/\).*/{ s//\1/; q; }
  -  	  s/.*/./; q'`
  -      { if $as_mkdir_p; then
  -    mkdir -p "$ac_dir"
  -  else
  -    as_dir="$ac_dir"
  -    as_dirs=
  -    while test ! -d "$as_dir"; do
  -      as_dirs="$as_dir $as_dirs"
  -      as_dir=`(dirname "$as_dir") 2>/dev/null ||
  -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
  -	 X"$as_dir" : 'X\(//\)[^/]' \| \
  -	 X"$as_dir" : 'X\(//\)$' \| \
  -	 X"$as_dir" : 'X\(/\)' \| \
  -	 .     : '\(.\)' 2>/dev/null ||
  -echo X"$as_dir" |
  -    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
  -  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
  -  	  /^X\(\/\/\)$/{ s//\1/; q; }
  -  	  /^X\(\/\).*/{ s//\1/; q; }
  -  	  s/.*/./; q'`
  -    done
  -    test ! -n "$as_dirs" || mkdir $as_dirs
  -  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
  -echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
  -   { (exit 1); exit 1; }; }; }
  -
         rm -f $ac_file
  -      mv $tmp/config.h $ac_file
  +      mv "$tmp/config.h" $ac_file
       fi
     else
  -    cat $tmp/config.h
  -    rm -f $tmp/config.h
  +    echo "/* $configure_input  */"
  +    cat "$ac_result"
     fi
  -done
  -_ACEOF
  +  rm -f "$tmp/out12"
  + ;;
  +
  +
  +  esac
  +
  +done # for ac_tag
   
  -cat >>$CONFIG_STATUS <<\_ACEOF
   
   { (exit 0); exit 0; }
   _ACEOF
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/configure.in
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 configure.in
  --- ossp-pkg/iselect/configure.in	8 Jul 2007 09:28:11 -0000	1.6
  +++ ossp-pkg/iselect/configure.in	8 Jul 2007 09:29:58 -0000	1.7
  @@ -3,7 +3,7 @@
   dnl ##  Copyright (c) Ralf S. Engelschall <rse@engelschall.com>
   dnl ##
   
  -AC_PREREQ(2.59)dnl
  +AC_PREREQ(2.61)dnl
   AC_REVISION(1.0)dnl
   AC_INIT(README)
   SHTOOL="./etc/shtool"
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jul  8 11:30:32 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id EC795752A0D; Sun,  8 Jul 2007 11:30:31 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/iselect/ VERSIONS
Message-Id: <20070708093031.EC795752A0D@mail.ossp.org>
Date: Sun,  8 Jul 2007 11:30:31 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Jul-2007 11:30:31
  Branch: HEAD                             Handle: 2007070810303000

  Modified files:
    ossp-pkg/iselect        VERSIONS

  Log:
    note new version

  Summary:
    Revision    Changes     Path
    1.4         +1  -0      ossp-pkg/iselect/VERSIONS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/VERSIONS
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 VERSIONS
  --- ossp-pkg/iselect/VERSIONS	8 Jul 2007 09:24:29 -0000	1.3
  +++ ossp-pkg/iselect/VERSIONS	8 Jul 2007 09:30:30 -0000	1.4
  @@ -11,4 +11,5 @@
     1.2.0  19990331
     1.3.0  20040406
     1.3.1  20051005
  +  1.4.0  20070708
   
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jul  8 11:31:22 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 8092375289B; Sun,  8 Jul 2007 11:31:20 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/iselect/ iselect.1 iselect_readme.c
Message-Id: <20070708093121.8092375289B@mail.ossp.org>
Date: Sun,  8 Jul 2007 11:31:20 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Jul-2007 11:31:20
  Branch: HEAD                             Handle: 2007070810312000

  Modified files:
    ossp-pkg/iselect        iselect.1 iselect_readme.c

  Log:
    bump version

  Summary:
    Revision    Changes     Path
    1.7         +3  -3      ossp-pkg/iselect/iselect.1
    1.7         +1  -1      ossp-pkg/iselect/iselect_readme.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect.1
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 iselect.1
  --- ossp-pkg/iselect/iselect.1	5 Oct 2005 18:37:19 -0000	1.6
  +++ ossp-pkg/iselect/iselect.1	8 Jul 2007 09:31:20 -0000	1.7
  @@ -1,4 +1,4 @@
  -.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.3
  +.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32
   .\"
   .\" Standard preamble:
   .\" ========================================================================
  @@ -129,7 +129,7 @@
   .\" ========================================================================
   .\"
   .IX Title "ISELECT 1"
  -.TH ISELECT 1 "2005-10-05" "EN" "Ralf S. Engelschall"
  +.TH ISELECT 1 "2007-07-08" "EN" "Ralf S. Engelschall"
   .SH "NAME"
   iSelect \-\- Interactive Selection Tool
   .SH "SYNOPSIS"
  @@ -155,7 +155,7 @@
   [\fB\-V\fR]
   .SH "VERSION"
   .IX Header "VERSION"
  -1.3.1 (05\-Oct\-2005)
  +1.4.0 (08\-Jul\-2007)
   .SH "DESCRIPTION"
   .IX Header "DESCRIPTION"
   .Sh "Intend"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/iselect/iselect_readme.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 iselect_readme.c
  --- ossp-pkg/iselect/iselect_readme.c	8 Jul 2007 09:28:11 -0000	1.6
  +++ ossp-pkg/iselect/iselect_readme.c	8 Jul 2007 09:31:20 -0000	1.7
  @@ -17,7 +17,7 @@
   "  as its control script or in batch mode as a pipeline filter (usually",
   "  between grep and the final executing command).   ",
   "  ",
  -"  Version 1.3.1 (05-Oct-2005)",
  +"  Version 1.4.0 (08-Jul-2007)",
   "",
   "  The latest release can be found on",
   "  http://www.ossp.org/pkg/tool/iselect/",
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jul  8 11:35:29 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 51A1D752A09; Sun,  8 Jul 2007 11:35:29 +0200 (CEST)
From: "OSSP Project Master" <ossp@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/tool/ index.wml ossp-w...
Message-Id: <20070708093529.51A1D752A09@mail.ossp.org>
Date: Sun,  8 Jul 2007 11:35:29 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   OSSP Project Master
  Root:   /v/ossp/cvs                      Email:  ossp@ossp.org
  Module: ossp-web                         Date:   08-Jul-2007 11:35:29
  Branch: HEAD                             Handle: 2007070810352801

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/tool       index.wml
    ossp-web/pkg/tool/iselect
                            index.wml

  Log:
    release OSSP iselect 1.4.0

  Summary:
    Revision    Changes     Path
    1.174       +1  -0      ossp-web/new/news.txt
    1.65        +1  -1      ossp-web/pkg/tool/index.wml
    1.5         +2  -2      ossp-web/pkg/tool/iselect/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.173 -r1.174 news.txt
  --- ossp-web/new/news.txt	8 Jun 2007 14:11:24 -0000	1.173
  +++ ossp-web/new/news.txt	8 Jul 2007 09:35:28 -0000	1.174
  @@ -1,3 +1,4 @@
  +08-Jul-2007: Released T<OSSP iselect> 1.4.0
   08-Jun-2007: Released L<OSSP l2> 0.9.13
   19-May-2007: Released L<OSSP uuid> 1.6.0
   19-May-2007: Released T<GNU shtool> 2.0.7
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/index.wml
  ============================================================================
  $ cvs diff -u -r1.64 -r1.65 index.wml
  --- ossp-web/pkg/tool/index.wml	19 May 2007 19:39:48 -0000	1.64
  +++ ossp-web/pkg/tool/index.wml	8 Jul 2007 09:35:28 -0000	1.65
  @@ -62,7 +62,7 @@
   	        done=20 stable="none" unstable="none">
     <pkg_item name="iselect" longname="OSSP iselect" type="tool"
               desc="Interactive Terminal Selection"
  -	        done=100 stable="1.3.0" unstable="none">
  +	        done=100 stable="1.4.0" unstable="none">
     <pkg_item name="mct" longname="OSSP mct" type="tool"
               desc="Multiple Choice Test Engine"
   	        done=90 stable="none" unstable="none">
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/iselect/index.wml
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 index.wml
  --- ossp-web/pkg/tool/iselect/index.wml	11 Sep 2004 15:31:08 -0000	1.4
  +++ ossp-web/pkg/tool/iselect/index.wml	8 Jul 2007 09:35:29 -0000	1.5
  @@ -20,7 +20,7 @@
   <h2>Status</h2>
   
   <pkg_status
  -    stable="1.3.0"   stable_date="11-Sep-2004"
  +    stable="1.4.0"   stable_date="08-Jul-2005"
       unstable="none"  unstable_date="none"
   	done=100>
   
  @@ -31,7 +31,7 @@
       url=$(FTP_ROOT_URL)/pkg/tool/iselect/
       directory=$(FTP_ROOT_DIR)/pkg/tool/iselect/
       files="iselect-*.tar.gz" 
  -	stable="iselect-1.3.0.tar.gz" unstable="none">
  +	stable="iselect-1.4.0.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jul 25 08:24:13 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B8F4A752FBE; Wed, 25 Jul 2007 08:24:12 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ sh.platform
Message-Id: <20070725062412.B8F4A752FBE@mail.ossp.org>
Date: Wed, 25 Jul 2007 08:24:12 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Jul-2007 08:24:12
  Branch: HEAD                             Handle: 2007072507241100

  Modified files:
    ossp-pkg/shtool         sh.platform

  Log:
    use PPC instead of powerpc under AIX to align to other platforms

  Summary:
    Revision    Changes     Path
    1.25        +3  -3      ossp-pkg/shtool/sh.platform
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.platform
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 sh.platform
  --- ossp-pkg/shtool/sh.platform	5 Jun 2007 16:52:33 -0000	1.24
  +++ ossp-pkg/shtool/sh.platform	25 Jul 2007 06:24:11 -0000	1.25
  @@ -399,15 +399,15 @@
       #   IBM AIX
       *:AIX:* )
           #   determine architecture
  -        cpu_arch=rs6000
  +        cpu_arch=RS6000
           if [ -x /usr/sbin/lsdev -a -x /usr/sbin/lsattr ]; then
               cpu_id=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
               if [ ".`/usr/sbin/lsattr -El ${cpu_id} | grep -i powerpc`" != . ]; then
  -                cpu_arch=powerpc
  +                cpu_arch=PPC
               fi
           elif [ -d /QOpenSys ]; then
               #   IBM i5/OS (aka OS/400) with PASE (Portable Application Solutions Environment)
  -            cpu_arch=powerpc
  +            cpu_arch=PPC
           fi
           if [ -x /usr/bin/oslevel ]; then
               os_level=`/usr/bin/oslevel`
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jul 25 18:40:07 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 25B4A752A0D; Wed, 25 Jul 2007 18:40:07 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog sh.platform
Message-Id: <20070725164007.25B4A752A0D@mail.ossp.org>
Date: Wed, 25 Jul 2007 18:40:07 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Jul-2007 18:40:07
  Branch: HEAD                             Handle: 2007072517400600

  Modified files:
    ossp-pkg/shtool         ChangeLog sh.platform

  Log:
    detect DragonFly BSD explicitly

  Summary:
    Revision    Changes     Path
    1.236       +6  -0      ossp-pkg/shtool/ChangeLog
    1.26        +16 -0      ossp-pkg/shtool/sh.platform
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.235 -r1.236 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	4 Jun 2007 19:42:11 -0000	1.235
  +++ ossp-pkg/shtool/ChangeLog	25 Jul 2007 16:40:06 -0000	1.236
  @@ -11,6 +11,12 @@
   
    Changes between 2.0.7 and 2.0.8 (19-May-2007 to xx-XXX-2007):
   
  +   *) Detect DragonFly BSD
  +      [Ralf S. Engelschall]
  +
  +   *) Improved AIX hardware detection
  +      [Ralf S. Engelschall]
  +
      *) Detect CentOS as a RHEL clone instead of a RHL clone.
         [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.platform
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 sh.platform
  --- ossp-pkg/shtool/sh.platform	25 Jul 2007 06:24:11 -0000	1.25
  +++ ossp-pkg/shtool/sh.platform	25 Jul 2007 16:40:06 -0000	1.26
  @@ -182,6 +182,22 @@
           SC="4.4BSD"
           ;;
   
  +    #   DragonFly BSD
  +    *:DragonFly:* )
  +        #   determine architecture
  +        AT="${UNAME_MACHINE}"
  +        AP="${AT}"
  +        case "${AP}" in
  +            i[3-6]86 ) AP="iX86" ;;
  +        esac
  +        AC="${AP}"
  +        #   determine system
  +        r=`echo "${UNAME_RELEASE}" | sed -e 's/\([-_].*\)$/[\1]/'`
  +        ST="DragonFly ${r}"
  +        SP="${ST}"
  +        SC="4.4BSD"   
  +        ;;
  +
       #   GNU/Linux
       *:Linux:* )
           #   determine architecture
  @@ .

From ossp-cvs-owner@ossp.org  Wed Aug  8 16:13:26 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 9614D752A04; Wed,  8 Aug 2007 16:13:26 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.heartbeat.pl
Message-Id: <20070808141326.9614D752A04@mail.ossp.org>
Date: Wed,  8 Aug 2007 16:13:26 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Aug-2007 16:13:26
  Branch: HEAD                             Handle: 2007080815132600

  Modified files:
    ossp-pkg/ase            ase.cgi.heartbeat.pl

  Log:
    do not display empty nicknames in mails

  Summary:
    Revision    Changes     Path
    1.9         +2  -2      ossp-pkg/ase/ase.cgi.heartbeat.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.heartbeat.pl
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 ase.cgi.heartbeat.pl
  --- ossp-pkg/ase/ase.cgi.heartbeat.pl	14 Apr 2007 18:59:53 -0000	1.8
  +++ ossp-pkg/ase/ase.cgi.heartbeat.pl	8 Aug 2007 14:13:26 -0000	1.9
  @@ -190,7 +190,7 @@
               To      => $cfg->{-cfg}->{"service-admin"},
               From    => $cfg->{-cfg}->{"service-name"} . " <" . $cfg->{-cfg}->{"service-sender"} . ">\n",
               Subject => $cfg->{-cfg}->{"project-name"} . " Account Locking: " .
  -                       $rec->{"me_name"} . (defined $rec->{"me_nickname"} ? " (" . $rec->{"me_nickname"} . ")" : "") .
  +                       $rec->{"me_name"} . (defined $rec->{"me_nickname"} and $rec->{'me_nickname'} ne '' ? " (" . $rec->{"me_nickname"} . ")" : "") .
                          " <" . $rec->{"me_address"} . ">\n",
               Message => $mail,
           ) or die $Mail::Sendmail::error;
  @@ -258,7 +258,7 @@
               To      => $cfg->{-cfg}->{"service-admin"},
               From    => $cfg->{-cfg}->{"service-name"} . " <" . $cfg->{-cfg}->{"service-sender"} . ">\n",
               Subject => $cfg->{-cfg}->{"project-name"} . " Account Deletion: " .
  -                       $rec->{"me_name"} . (defined $rec->{"me_nickname"} ? " (" . $rec->{"me_nickname"} . ")" : "") .
  +                       $rec->{"me_name"} . (defined $rec->{"me_nickname"} and $rec->{'me_nickname'} ne '' ? " (" . $rec->{"me_nickname"} . ")" : "") .
                          " <" . $rec->{"me_address"} . ">\n",
               Message => $mail,
           ) or die $Mail::Sendmail::error;
  @@ .

From ossp-cvs-owner@ossp.org  Tue Aug 28 14:26:39 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id C0FA0752FE1; Tue, 28 Aug 2007 14:26:38 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog devtool.conf
Message-Id: <20070828122638.C0FA0752FE1@mail.ossp.org>
Date: Tue, 28 Aug 2007 14:26:38 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   28-Aug-2007 14:26:38
  Branch: HEAD                             Handle: 2007082813263700

  Modified files:
    ossp-pkg/uuid           ChangeLog devtool.conf

  Log:
    Upgrade build environment to GNU libtool 1.5.24

  Summary:
    Revision    Changes     Path
    1.148       +3  -0      ossp-pkg/uuid/ChangeLog
    1.35        +1  -1      ossp-pkg/uuid/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.147 -r1.148 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	19 May 2007 20:00:46 -0000	1.147
  +++ ossp-pkg/uuid/ChangeLog	28 Aug 2007 12:26:37 -0000	1.148
  @@ -13,6 +13,9 @@
   
     Changes between 1.5.1 and 1.6.0 (31-Jul-2006 to 19-May-2007)
   
  +   o Upgrade build environment to GNU libtool 1.5.24
  +     [Ralf S. Engelschall]
  +
      o Expand unused "datarootdir" in Makefile.in and uuid-config.in to
        make newer GNU autoconf versions happy.
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 devtool.conf
  --- ossp-pkg/uuid/devtool.conf	19 May 2007 19:56:18 -0000	1.34
  +++ ossp-pkg/uuid/devtool.conf	28 Aug 2007 12:26:37 -0000	1.35
  @@ -4,7 +4,7 @@
   
   %autogen
       @autogen shtool   2.0.7  "2.0.*" all
  -    @autogen libtool  1.5.22 "1.5*"
  +    @autogen libtool  1.5.24 "1.5*"
       @autogen autoconf 2.61   "2.6[0-9]*"
   
   %autoclean
  @@ .

From ossp-cvs-owner@ossp.org  Fri Aug 31 15:15:13 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 85B1F753052; Fri, 31 Aug 2007 15:15:13 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ sh.subst
Message-Id: <20070831131513.85B1F753052@mail.ossp.org>
Date: Fri, 31 Aug 2007 15:15:13 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   31-Aug-2007 15:15:13
  Branch: HEAD                             Handle: 2007083114151200

  Modified files:
    ossp-pkg/shtool         sh.subst

  Log:
    fix formatting error

  Summary:
    Revision    Changes     Path
    1.18        +2  -2      ossp-pkg/shtool/sh.subst
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.subst
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 sh.subst
  --- ossp-pkg/shtool/sh.subst	19 May 2007 19:09:39 -0000	1.17
  +++ ossp-pkg/shtool/sh.subst	31 Aug 2007 13:15:12 -0000	1.18
  @@ -260,8 +260,8 @@
   
   =item B<-b>, B<--backup> I<ext>
   
  -Preserve backup of original file using file name extension I<ext>      .
  -Default is to overwrite the original file                              .
  +Preserve backup of original file using file name extension I<ext>.
  +Default is to overwrite the original file.
   
   =item B<-e>, B<--exec> I<cmd>
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Sep  7 22:02:12 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id D2DF4752FC2; Fri,  7 Sep 2007 22:02:11 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.scode.pl ase.ui.font.ttf
Message-Id: <20070907200211.D2DF4752FC2@mail.ossp.org>
Date: Fri,  7 Sep 2007 22:02:11 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Sep-2007 22:02:11
  Branch: HEAD                             Handle: 2007090721021000

  Added files:
    ossp-pkg/ase            ase.ui.font.ttf
  Modified files:
    ossp-pkg/ase            ase.cgi.scode.pl

  Log:
    use free font URW Nimbus Sans Bold for rendering the security code
    with a small random angle

  Summary:
    Revision    Changes     Path
    1.17        +7  -4      ossp-pkg/ase/ase.cgi.scode.pl
    1.1         BLOB        ossp-pkg/ase/ase.ui.font.ttf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.scode.pl
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 ase.cgi.scode.pl
  --- ossp-pkg/ase/ase.cgi.scode.pl	5 Apr 2007 15:53:22 -0000	1.16
  +++ ossp-pkg/ase/ase.cgi.scode.pl	7 Sep 2007 20:02:10 -0000	1.17
  @@ -42,8 +42,8 @@
       undef $uuid;
   
       #   generate new Security Code Number
  -    #   (notice: "0"/"O", "2"/"Z", "5"/"S" and "U"/"V" are too hard to quickly distinguish, so left out)
  -    my $scode_num = $self->makerandom(6, "1346-9A-NP-RTW-Y");
  +    #   (notice: "0"/"O", "2"/"Z", "1"/"7"/"I", "5"/"S" and "U"/"V" are too hard to quickly distinguish, so left out)
  +    my $scode_num = $self->makerandom(6, "34689A-HJ-NP-RTW-Y");
   
       #   determine expiry time
       my $scode_expiry = $self->datetime(time() + 4*60*60);
  @@ -77,7 +77,7 @@
       #   render Security Code Number as a PNG image
       $self->use("GD");
       $self->use("GD::Image");
  -    my $im_length = 8+length($scode_num)*11+8;
  +    my $im_length = 8+length($scode_num)*13+8;
       my $im = new GD::Image($im_length, 25);
       my $c_bg  = $im->colorAllocate(&hex2rgb("ffffff"));
       my $c_bd1 = $im->colorAllocate(&hex2rgb("999999"));
  @@ -96,9 +96,12 @@
       $im->line($im_length-1, 0, $im_length-1, 24, $c_bd2);
       $im->line(0, 24, $im_length-1, 24, $c_bd2);
       srand();
  +    my $x = 0;
       for (my $i = 0; $i < length($scode_num); $i++) {
           my $k = [-2, -1, 0, 1, 2]->[rand()*5];
  -        $im->string(GD::gdGiantFont(), 8+($i*11), 5+$k, substr($scode_num, $i, 1), $c_tx->[$i % 2]);
  +        my $a = [-6.0, -3.0, 0.0, 3.0, 6.0]->[rand()*5];
  +        my @bounds = $im->stringFT($c_tx->[$i % 2], "./ase.ui.font.ttf", 11, sprintf("%.2f", $a*(3.14159/180)), 8+$x, 18+$k, substr($scode_num, $i, 1));
  +        $x += ($bounds[2] - $bounds[0]);
       }
       my $scode_img = $im->png;
   
  @@ .
  (cd ossp-pkg/ase && \
   uudecode <<'@@ .' && \
   xdelta patch ase.ui.font.ttf.xdelta /dev/null ase.ui.font.ttf && \
   rm -f ase.ui.font.ttf.xdelta)
  Index: ossp-pkg/ase/ase.ui.font.ttf
  ============================================================================
  begin 664 ase.ui.font.ttf.xdelta
  M)5A$6C`P-"4````(`!$`$`````````````````````!S:&EE;&$N-S$S.#(N
  M;G5L;'-H:65L82XW,3,X,BYA;&P?BP@````````#`P```````````!^+"```
  M``````-C8&A@9F!@,+@BVW.SGV$3R\L&SAEO?CC5`<48`#W@_+\<````````
  )52581%HP,#0E
  `
  end
  @@ .

From ossp-cvs-owner@ossp.org  Fri Sep  7 23:08:15 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id D15157528CE; Fri,  7 Sep 2007 23:08:14 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ase/ ase.cgi.scode.pl
Message-Id: <20070907210814.D15157528CE@mail.ossp.org>
Date: Fri,  7 Sep 2007 23:08:14 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Sep-2007 23:08:13
  Branch: HEAD                             Handle: 2007090722081000

  Modified files:
    ossp-pkg/ase            ase.cgi.scode.pl

  Log:
    add diagnonal lines, remove border, output as transparent GIF instead
    of PNG

  Summary:
    Revision    Changes     Path
    1.18        +51 -14     ossp-pkg/ase/ase.cgi.scode.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ase/ase.cgi.scode.pl
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 ase.cgi.scode.pl
  --- ossp-pkg/ase/ase.cgi.scode.pl	7 Sep 2007 20:02:10 -0000	1.17
  +++ ossp-pkg/ase/ase.cgi.scode.pl	7 Sep 2007 21:08:10 -0000	1.18
  @@ -74,36 +74,73 @@
       }, $scode_uuid)->hash()) or die $dbi->error();
       my $scode_num = $rec->{'sc_number'};
   
  -    #   render Security Code Number as a PNG image
  +    ##
  +    ##  render Security Code Number as a PNG image
  +    ##
  +
  +    #   create image
       $self->use("GD");
       $self->use("GD::Image");
  +    my $im_height = 25;
       my $im_length = 8+length($scode_num)*13+8;
  -    my $im = new GD::Image($im_length, 25);
  -    my $c_bg  = $im->colorAllocate(&hex2rgb("ffffff"));
  +    my $im = new GD::Image($im_length, $im_height);
  +    srand();
  +
  +    #   allocate colors
  +    my $c_bg  = $im->colorAllocate(&hex2rgb("f0f0f0"));
       my $c_bd1 = $im->colorAllocate(&hex2rgb("999999"));
       my $c_bd2 = $im->colorAllocate(&hex2rgb("cccccc"));
       my $c_ln  = $im->colorAllocate(&hex2rgb("e0e0e0"));
  +    my $c_ov  = [ $im->colorAllocate(&hex2rgb("d0d0d0")), $im->colorAllocate(&hex2rgb("e0e0e0")) ];
       my $c_tx  = [ $im->colorAllocate(&hex2rgb("333333")), $im->colorAllocate(&hex2rgb("666666")) ];
  +
  +    #   fill in transparent background
       $im->fill(0, 0, $c_bg);
  -    for (my $i = 5; $i < $im_length; $i += 5) {
  -        $im->line($i, 0, $i, 24, $c_ln);
  +    $im->transparent($c_bg);
  +
  +    #   create irregular grid
  +    for (my $i = 5; $i < $im_length; $i += 5+int((rand() * 6)-3)) {
  +        $im->line($i, 0, $i, $im_height-1, $c_ln);
       }
  -    for (my $i = 5; $i < 25; $i += 5) {
  +    for (my $i = 5; $i < $im_height; $i += 5+int((rand() * 6)-3)) {
           $im->line(0, $i, $im_length-1, $i, $c_ln);
       }
  -    $im->line(0, 0, $im_length-1, 0, $c_bd1);
  -    $im->line(0, 0, 0, 24, $c_bd1);
  -    $im->line($im_length-1, 0, $im_length-1, 24, $c_bd2);
  -    $im->line(0, 24, $im_length-1, 24, $c_bd2);
  -    srand();
  +
  +    #   override with random diagonal lines
  +    for (my $i = 0; $i < 2; $i++) {
  +        $im->line(rand()*$im_length, 0, rand()*$im_length, $im_height, $c_ov->[$i % 2]);
  +    }
  +    for (my $i = 0; $i < 2; $i++) {
  +        $im->line(rand()*$im_length, 0, 0, 2+(rand()*($im_height-2)), $c_ov->[$i % 2]);
  +    }
  +    for (my $i = 0; $i < 2; $i++) {
  +        $im->line(rand()*$im_length, $im_height, $im_length, rand()*($im_height-2), $c_ov->[$i % 2]);
  +    }
  +    for (my $i = 0; $i < 2; $i++) {
  +        $im->line(0, rand()*$im_height, $im_length, rand()*$im_height, $c_ov->[$i % 2]);
  +    }
  +
  +    #   render the security code characters
       my $x = 0;
       for (my $i = 0; $i < length($scode_num); $i++) {
           my $k = [-2, -1, 0, 1, 2]->[rand()*5];
           my $a = [-6.0, -3.0, 0.0, 3.0, 6.0]->[rand()*5];
  -        my @bounds = $im->stringFT($c_tx->[$i % 2], "./ase.ui.font.ttf", 11, sprintf("%.2f", $a*(3.14159/180)), 8+$x, 18+$k, substr($scode_num, $i, 1));
  +        my @bounds = $im->stringFT(
  +            $c_tx->[$i % 2], "./ase.ui.font.ttf", 11,
  +            sprintf("%.2f", $a*(3.14159/180)), 8+$x, 18+$k,
  +            substr($scode_num, $i, 1)
  +        );
           $x += ($bounds[2] - $bounds[0]);
       }
  -    my $scode_img = $im->png;
  +    
  +    #   render the border
  +    #$im->line(0, 0, $im_length-1, 0, $c_bd1);
  +    #$im->line(0, 0, 0, 24, $c_bd1);
  +    #$im->line($im_length-1, 0, $im_length-1, 24, $c_bd2);
  +    #$im->line(0, 24, $im_length-1, 24, $c_bd2);
  +
  +    #   convert into GIF output image format
  +    my $scode_img = $im->gif;
   
       return $scode_img;
   }
  @@ -135,7 +172,7 @@
       #   send Security Code image
       my $uuid = $cgi->param("uuid");
       my $img = $self->scode_render($uuid);
  -    $self->header_props(-type => 'image/png', -expires => '+4d');
  +    $self->header_props(-type => 'image/gif', -expires => '+4d');
       return $img;
   }
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Sep 27 11:05:25 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id F0506753050; Thu, 27 Sep 2007 11:05:24 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/string-divert/ Divert.pod
Message-Id: <20070927090524.F0506753050@mail.ossp.org>
Date: Thu, 27 Sep 2007 11:05:24 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   27-Sep-2007 11:05:24
  Branch: HEAD                             Handle: 2007092710052400

  Modified files:
    ossp-pkg/string-divert  Divert.pod

  Log:
    remember that one can undivert without an argument, too

  Summary:
    Revision    Changes     Path
    1.10        +4  -1      ossp-pkg/string-divert/Divert.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/Divert.pod
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 Divert.pod
  --- ossp-pkg/string-divert/Divert.pod	16 Nov 2005 12:51:13 -0000	1.9
  +++ ossp-pkg/string-divert/Divert.pod	27 Sep 2007 09:05:24 -0000	1.10
  @@ -323,6 +323,8 @@
   
   =item SAPI: [C<$x =>] C<$x-E<gt>>B<undivert>C<($name);>
   
  +=item SAPI: [C<$x =>] C<$x-E<gt>>B<undivert>C<();>
  +
   =item XAPI: C<$x E<lt>E<lt> $num;>
   
   =item XAPI: C<$x E<lt>E<lt> $name;>
  @@ -331,7 +333,8 @@
   activated diversions. If C<$num> is C<0>, deactivates all activated
   diversions. If C<$name> is given (i.e. the argument is not numeric), it
   deactivates all last activated diversion up to and including the one to
  -the string object named C<$name>.
  +the string object named C<$name>. If no C<$num> or C<$name> is
  +specified, the last activated diversion is deactivated.
   
   =item SAPI: C<$y = $x-E<gt>>B<diversion>C<;>
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 12 21:54:23 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id A6D5D753079; Fri, 12 Oct 2007 21:54:22 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex/ ChangeLog devtool.conf
Message-Id: <20071012195422.A6D5D753079@mail.ossp.org>
Date: Fri, 12 Oct 2007 21:54:22 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Oct-2007 21:54:22
  Branch: HEAD                             Handle: 2007101220542100

  Modified files:
    ossp-pkg/ex             ChangeLog devtool.conf

  Log:
    upgrade build environment again

  Summary:
    Revision    Changes     Path
    1.17        +2  -2      ossp-pkg/ex/ChangeLog
    1.16        +3  -3      ossp-pkg/ex/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 ChangeLog
  --- ossp-pkg/ex/ChangeLog	10 Aug 2006 19:49:33 -0000	1.16
  +++ ossp-pkg/ex/ChangeLog	12 Oct 2007 19:54:21 -0000	1.17
  @@ -15,8 +15,8 @@
   
      *) ...
   
  -   *) Upgrade build environment to GNU shtool 2.0.6,
  -      GNU libtool 1.5.22 and GNU autoconf 2.60.
  +   *) Upgrade build environment to GNU shtool 2.0.7,
  +      GNU libtool 1.5.24 and GNU autoconf 2.61.
         [Ralf S. Engelschall]
   
      *) Adjusted copyright messages to include new year 2006.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 devtool.conf
  --- ossp-pkg/ex/devtool.conf	10 Aug 2006 19:49:33 -0000	1.15
  +++ ossp-pkg/ex/devtool.conf	12 Oct 2007 19:54:21 -0000	1.16
  @@ -3,9 +3,9 @@
   ##
   
   %autogen
  -    @autogen shtool   2.0.6  "2.0.*" all
  -    @autogen libtool  1.5.22 "1.5*"
  -    @autogen autoconf 2.60   "2.6[0-9]*"
  +    @autogen shtool   2.0.7  "2.0.*" all
  +    @autogen libtool  1.5.24 "1.5*"
  +    @autogen autoconf 2.61   "2.6[0-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 12 21:57:56 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id A7DC875305D; Fri, 12 Oct 2007 21:57:56 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex/ ChangeLog THANKS ex.pod
Message-Id: <20071012195756.A7DC875305D@mail.ossp.org>
Date: Fri, 12 Oct 2007 21:57:56 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Oct-2007 21:57:56
  Branch: HEAD                             Handle: 2007101220575600

  Modified files:
    ossp-pkg/ex             ChangeLog THANKS ex.pod

  Log:
    Fix example given under "MULTITHREADING ENVIRONMENTS"
    in the manual page. The problem is that the context
    can be still not associated and hence be NULL.
    
    Submitted by: Frank Hempel <red_socks@gmx.de>

  Summary:
    Revision    Changes     Path
    1.18        +4  -1      ossp-pkg/ex/ChangeLog
    1.4         +1  -0      ossp-pkg/ex/THANKS
    1.33        +9  -2      ossp-pkg/ex/ex.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 ChangeLog
  --- ossp-pkg/ex/ChangeLog	12 Oct 2007 19:54:21 -0000	1.17
  +++ ossp-pkg/ex/ChangeLog	12 Oct 2007 19:57:56 -0000	1.18
  @@ -13,7 +13,10 @@
   
     Changes between 1.0.5 and 1.0.6 (02-Oct-2005 to XX-xxx-2006)
   
  -   *) ...
  +   *) Fix example given under "MULTITHREADING ENVIRONMENTS"
  +      in the manual page. The problem is that the context
  +      can be still not associated and hence be NULL.
  +      [Frank Hempel <red_socks@gmx.de>]
   
      *) Upgrade build environment to GNU shtool 2.0.7,
         GNU libtool 1.5.24 and GNU autoconf 2.61.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/THANKS
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 THANKS
  --- ossp-pkg/ex/THANKS	30 Jan 2003 11:02:38 -0000	1.3
  +++ ossp-pkg/ex/THANKS	12 Oct 2007 19:57:56 -0000	1.4
  @@ -13,6 +13,7 @@
     bugfixes, hints, gave platform feedback, etc. (in alphabetical order):
   
     Michael van Elst    <mlelstv@dev.de.cw.net>
  +  Frank Hempel        <red_socks@gmx.de>
     Thomas Lotterer     <thomas@lotterer.net>
     A Makarov           <makarov@tecon.ru>
     Michael Schloh      <michael@schloh.com>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ex.pod
  ============================================================================
  $ cvs diff -u -r1.32 -r1.33 ex.pod
  --- ossp-pkg/ex/ex.pod	10 Aug 2006 19:49:33 -0000	1.32
  +++ ossp-pkg/ex/ex.pod	12 Oct 2007 19:57:56 -0000	1.33
  @@ -598,13 +598,20 @@
    /* callback: context fetching */
    static ex_ctx_t *pthread_ex_ctx(void)
    {
  -     return (ex_ctx_t *)
  -         pthread_getspecific(pthread_ex_ctx_key);
  +     ex_ctx_t *ctx;
  +
  +     if ((ctx = (ex_ctx_t *)pthread_getspecific(pthread_ex_ctx_key)) == NULL)
  +         return __ex_ctx_default();
  +     return ctx;
    }
   
    /* callback: termination */
    static void pthread_ex_terminate(ex_t *e)
    {
  +     ex_ctx_t *ctx;
  +
  +     if ((ctx = (ex_ctx_t *)pthread_getspecific(pthread_ex_ctx_key)) == NULL)
  +         __ex_terminate_default(e);
        pthread_exit(e->ex_value);
    }
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 12 21:59:58 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B3AC475305D; Fri, 12 Oct 2007 21:59:58 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex/ ChangeLog Makefile.in README VERSION aclocal....
Message-Id: <20071012195958.B3AC475305D@mail.ossp.org>
Date: Fri, 12 Oct 2007 21:59:58 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Oct-2007 21:59:58
  Branch: HEAD                             Handle: 2007101220595700

  Modified files:
    ossp-pkg/ex             ChangeLog Makefile.in README VERSION aclocal.m4
                            configure.ac ex-config.in ex.c ex.h ex.pod
                            ex_test.c ts.c ts.h

  Log:
    prepare for release

  Summary:
    Revision    Changes     Path
    1.19        +2  -2      ossp-pkg/ex/ChangeLog
    1.12        +2  -2      ossp-pkg/ex/Makefile.in
    1.18        +3  -3      ossp-pkg/ex/README
    1.11        +1  -1      ossp-pkg/ex/VERSION
    1.10        +2  -2      ossp-pkg/ex/aclocal.m4
    1.12        +2  -2      ossp-pkg/ex/configure.ac
    1.9         +2  -2      ossp-pkg/ex/ex-config.in
    1.13        +2  -2      ossp-pkg/ex/ex.c
    1.28        +2  -2      ossp-pkg/ex/ex.h
    1.34        +2  -2      ossp-pkg/ex/ex.pod
    1.16        +2  -2      ossp-pkg/ex/ex_test.c
    1.11        +2  -2      ossp-pkg/ex/ts.c
    1.8         +2  -2      ossp-pkg/ex/ts.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 ChangeLog
  --- ossp-pkg/ex/ChangeLog	12 Oct 2007 19:57:56 -0000	1.18
  +++ ossp-pkg/ex/ChangeLog	12 Oct 2007 19:59:57 -0000	1.19
  @@ -11,7 +11,7 @@
   
     This is the list of all changes to the OSSP ex source tree.
   
  -  Changes between 1.0.5 and 1.0.6 (02-Oct-2005 to XX-xxx-2006)
  +  Changes between 1.0.5 and 1.0.6 (02-Oct-2005 to 12-Oct-2007)
   
      *) Fix example given under "MULTITHREADING ENVIRONMENTS"
         in the manual page. The problem is that the context
  @@ -22,7 +22,7 @@
         GNU libtool 1.5.24 and GNU autoconf 2.61.
         [Ralf S. Engelschall]
   
  -   *) Adjusted copyright messages to include new year 2006.
  +   *) Adjusted copyright messages to include new year 2006/2007.
         [Ralf S. Engelschall]
   
     Changes between 1.0.4 and 1.0.5 (05-Apr-2004 to 02-Oct-2005)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 Makefile.in
  --- ossp-pkg/ex/Makefile.in	10 Aug 2006 19:49:33 -0000	1.11
  +++ ossp-pkg/ex/Makefile.in	12 Oct 2007 19:59:57 -0000	1.12
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP ex - Exception Handling
  -##  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2006 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2007 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP ex, an exception handling library
   ##  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/README
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 README
  --- ossp-pkg/ex/README	10 Aug 2006 19:49:33 -0000	1.17
  +++ ossp-pkg/ex/README	12 Oct 2007 19:59:57 -0000	1.18
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     \___/_/\_\
   
     OSSP ex - Exception Handling
  -  Version 1.0.6 (10-Aug-2006)
  +  Version 1.0.6 (12-Oct-2007)
   
     ABSTRACT
   
  @@ -31,8 +31,8 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2002-2006 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2002-2007 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2002-2007 The OSSP Project <http://www.ossp.org/>
   
     This file is part of OSSP ex, an exception handling library which
     can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/VERSION
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 VERSION
  --- ossp-pkg/ex/VERSION	10 Aug 2006 19:49:33 -0000	1.10
  +++ ossp-pkg/ex/VERSION	12 Oct 2007 19:59:57 -0000	1.11
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP ex (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP ex, Version 1.0.6 (10-Aug-2006)
  +  This is OSSP ex, Version 1.0.6 (12-Oct-2007)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 aclocal.m4
  --- ossp-pkg/ex/aclocal.m4	10 Aug 2006 19:49:33 -0000	1.9
  +++ ossp-pkg/ex/aclocal.m4	12 Oct 2007 19:59:57 -0000	1.10
  @@ -1,7 +1,7 @@
   dnl ##
   dnl ##  OSSP ex - Exception Handling
  -dnl ##  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002-2006 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2007 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2007 The OSSP Project <http://www.ossp.org/>
   dnl ##
   dnl ##  This file is part of OSSP ex, an exception handling library
   dnl ##  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/configure.ac
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 configure.ac
  --- ossp-pkg/ex/configure.ac	10 Aug 2006 19:49:33 -0000	1.11
  +++ ossp-pkg/ex/configure.ac	12 Oct 2007 19:59:57 -0000	1.12
  @@ -1,7 +1,7 @@
   dnl ##
   dnl ##  OSSP ex - Exception Handling
  -dnl ##  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2002-2006 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2002-2007 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2002-2007 The OSSP Project <http://www.ossp.org/>
   dnl ##
   dnl ##  This file is part of OSSP ex, an exception handling library
   dnl ##  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ex-config.in
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 ex-config.in
  --- ossp-pkg/ex/ex-config.in	10 Aug 2006 19:49:33 -0000	1.8
  +++ ossp-pkg/ex/ex-config.in	12 Oct 2007 19:59:57 -0000	1.9
  @@ -1,8 +1,8 @@
   #!/bin/sh
   ##
   ##  OSSP ex - Exception Handling
  -##  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2006 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2007 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP ex, an exception handling library
   ##  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ex.c
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 ex.c
  --- ossp-pkg/ex/ex.c	10 Aug 2006 19:49:33 -0000	1.12
  +++ ossp-pkg/ex/ex.c	12 Oct 2007 19:59:57 -0000	1.13
  @@ -1,7 +1,7 @@
   /*
   **  OSSP ex - Exception Handling
  -**  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2006 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2007 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2007 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP ex, an exception handling library
   **  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ex.h
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 ex.h
  --- ossp-pkg/ex/ex.h	10 Aug 2006 19:49:33 -0000	1.27
  +++ ossp-pkg/ex/ex.h	12 Oct 2007 19:59:57 -0000	1.28
  @@ -1,7 +1,7 @@
   /*
   **  OSSP ex - Exception Handling
  -**  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2006 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2007 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2007 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP ex, an exception handling library
   **  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ex.pod
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 ex.pod
  --- ossp-pkg/ex/ex.pod	12 Oct 2007 19:57:56 -0000	1.33
  +++ ossp-pkg/ex/ex.pod	12 Oct 2007 19:59:57 -0000	1.34
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP ex - Exception Handling
  -##  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2002-2006 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2002-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2002-2007 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP ex, an exception library
   ##  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ex_test.c
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 ex_test.c
  --- ossp-pkg/ex/ex_test.c	10 Aug 2006 19:49:33 -0000	1.15
  +++ ossp-pkg/ex/ex_test.c	12 Oct 2007 19:59:57 -0000	1.16
  @@ -1,7 +1,7 @@
   /*
   **  OSSP ex - Exception Handling
  -**  Copyright (c) 2002-2006 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2002-2006 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2002-2007 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2002-2007 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP ex, an exception handling library
   **  which can be found at http://www.ossp.org/pkg/lib/ex/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ts.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 ts.c
  --- ossp-pkg/ex/ts.c	10 Aug 2006 19:49:33 -0000	1.10
  +++ ossp-pkg/ex/ts.c	12 Oct 2007 19:59:57 -0000	1.11
  @@ -1,7 +1,7 @@
   /*
   **  OSSP ts - Test Suite Library
  -**  Copyright (c) 2001-2006 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2006 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2007 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2007 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP ts, a small test suite library which
   **  can be found at http://www.ossp.org/pkg/lib/ts/.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ts.h
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 ts.h
  --- ossp-pkg/ex/ts.h	10 Aug 2006 19:49:33 -0000	1.7
  +++ ossp-pkg/ex/ts.h	12 Oct 2007 19:59:57 -0000	1.8
  @@ -1,7 +1,7 @@
   /*
   **  OSSP ts - Test Suite Library
  -**  Copyright (c) 2001-2006 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2001-2006 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2001-2007 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2001-2007 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP ts, a small test suite library which
   **  can be found at http://www.ossp.org/pkg/lib/ts/.
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 12 22:03:01 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 1037F75305D; Fri, 12 Oct 2007 22:03:01 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/new/ news.txt ossp-web/pkg/lib/ex/ index.wml ossp...
Message-Id: <20071012200301.1037F75305D@mail.ossp.org>
Date: Fri, 12 Oct 2007 22:03:01 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   12-Oct-2007 22:03:00
  Branch: HEAD                             Handle: 2007101221025901

  Modified files:
    ossp-web/new            news.txt
    ossp-web/pkg/lib        index.wml
    ossp-web/pkg/lib/ex     index.wml

  Log:
    release OSSP ex 1.0.6

  Summary:
    Revision    Changes     Path
    1.175       +1  -0      ossp-web/new/news.txt
    1.14        +2  -2      ossp-web/pkg/lib/ex/index.wml
    1.138       +1  -1      ossp-web/pkg/lib/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/new/news.txt
  ============================================================================
  $ cvs diff -u -r1.174 -r1.175 news.txt
  --- ossp-web/new/news.txt	8 Jul 2007 09:35:28 -0000	1.174
  +++ ossp-web/new/news.txt	12 Oct 2007 20:02:59 -0000	1.175
  @@ -1,3 +1,4 @@
  +12-Oct-2007: Released L<OSSP ex> 1.0.6
   08-Jul-2007: Released T<OSSP iselect> 1.4.0
   08-Jun-2007: Released L<OSSP l2> 0.9.13
   19-May-2007: Released L<OSSP uuid> 1.6.0
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/ex/index.wml
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 index.wml
  --- ossp-web/pkg/lib/ex/index.wml	2 Oct 2005 16:34:55 -0000	1.13
  +++ ossp-web/pkg/lib/ex/index.wml	12 Oct 2007 20:03:00 -0000	1.14
  @@ -42,7 +42,7 @@
   <pkg_status
       name="ex" assign="rse"
   	genesis="Jan-2002"
  -    stable="1.0.5"   stable_date="02-Oct-2005"
  +    stable="1.0.6"   stable_date="12-Oct-2007"
       unstable="none"  unstable_date=""
   	done=100>
   
  @@ -53,7 +53,7 @@
       url=$(FTP_ROOT_URL)/pkg/lib/ex/
       directory=$(FTP_ROOT_DIR)/pkg/lib/ex/
       files="ex-*.tar.gz" 
  -	stable="ex-1.0.5.tar.gz" unstable="none">
  +	stable="ex-1.0.6.tar.gz" unstable="none">
   
   <h2>Donation</h2>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/lib/index.wml
  ============================================================================
  $ cvs diff -u -r1.137 -r1.138 index.wml
  --- ossp-web/pkg/lib/index.wml	8 Jun 2007 14:11:25 -0000	1.137
  +++ ossp-web/pkg/lib/index.wml	12 Oct 2007 20:02:59 -0000	1.138
  @@ -21,7 +21,7 @@
   			done=100 stable=1.4.2 unstable=none>
     <pkg_item name="ex" longname="OSSP ex" type="lib"
               desc="Exception Handling"
  -			done=100 stable=1.0.5 unstable=none>
  +			done=100 stable=1.0.6 unstable=none>
     <pkg_item name="sa" longname="OSSP sa" type="lib"
               desc="Socket Abstraction"
   			done=100 stable=1.2.6 unstable=none>
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 12 22:34:48 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 07928752A09; Fri, 12 Oct 2007 22:34:48 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog ossp-pkg/uuid/pgsql/ uuid.c
Message-Id: <20071012203448.07928752A09@mail.ossp.org>
Date: Fri, 12 Oct 2007 22:34:48 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Oct-2007 22:34:47
  Branch: HEAD                             Handle: 2007101221344700

  Modified files:
    ossp-pkg/uuid           ChangeLog
    ossp-pkg/uuid/pgsql     uuid.c

  Log:
    PostgreSQL bindings: use SET_VARSIZE() instead
    of assigning to bytea->v_len under PostgreSQL >= 8.3

  Summary:
    Revision    Changes     Path
    1.149       +4  -0      ossp-pkg/uuid/ChangeLog
    1.9         +4  -0      ossp-pkg/uuid/pgsql/uuid.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.148 -r1.149 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	28 Aug 2007 12:26:37 -0000	1.148
  +++ ossp-pkg/uuid/ChangeLog	12 Oct 2007 20:34:47 -0000	1.149
  @@ -13,6 +13,10 @@
   
     Changes between 1.5.1 and 1.6.0 (31-Jul-2006 to 19-May-2007)
   
  +   o PostgreSQL bindings: use SET_VARSIZE() instead
  +     of assigning to bytea->v_len under PostgreSQL >= 8.3
  +     [Ralf S. Engelschall]
  +
      o Upgrade build environment to GNU libtool 1.5.24
        [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/pgsql/uuid.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 uuid.c
  --- ossp-pkg/uuid/pgsql/uuid.c	1 Jan 2007 18:14:58 -0000	1.8
  +++ ossp-pkg/uuid/pgsql/uuid.c	12 Oct 2007 20:34:47 -0000	1.9
  @@ -200,7 +200,11 @@
       if ((uuid_bytea = (bytea *)palloc(VARHDRSZ + UUID_LEN_BIN)) == NULL)
           ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION),
                   errmsg("failed to allocate UUID bytea")));
  +#if defined(SET_VARSIZE) /* PostgreSQL >= 8.3 */
  +    SET_VARSIZE(uuid_bytea, VARHDRSZ + UUID_LEN_BIN);
  +#else
       uuid_bytea->vl_len = VARHDRSZ + UUID_LEN_BIN;
  +#endif
       memcpy(uuid_bytea->vl_dat, uuid_datum->uuid_bin, UUID_LEN_BIN);
   
       /* return UUID bytea */
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 12 22:57:25 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 37F5E752F54; Fri, 12 Oct 2007 22:57:25 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog aclocal.m4
Message-Id: <20071012205725.37F5E752F54@mail.ossp.org>
Date: Fri, 12 Oct 2007 22:57:25 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Oct-2007 22:57:25
  Branch: HEAD                             Handle: 2007101221572400

  Modified files:
    ossp-pkg/uuid           ChangeLog aclocal.m4

  Log:
    Fix __VA_COPY_USE_{CSP,CPP} fallback macros for va_copy.
    
    Submitted by: Mark A. Lindner <mark.a.lindner@gmail.com>

  Summary:
    Revision    Changes     Path
    1.150       +3  -0      ossp-pkg/uuid/ChangeLog
    1.4         +2  -2      ossp-pkg/uuid/aclocal.m4
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.149 -r1.150 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	12 Oct 2007 20:34:47 -0000	1.149
  +++ ossp-pkg/uuid/ChangeLog	12 Oct 2007 20:57:24 -0000	1.150
  @@ -12,6 +12,9 @@
     For a more brief summary please have a look at the NEWS file.
   
     Changes between 1.5.1 and 1.6.0 (31-Jul-2006 to 19-May-2007)
  +   
  +   o Fix __VA_COPY_USE_{CSP,CPP} fallback macros for va_copy.
  +     [Mark A. Lindner <mark.a.lindner@gmail.com>]
   
      o PostgreSQL bindings: use SET_VARSIZE() instead
        of assigning to bytea->v_len under PostgreSQL >= 8.3
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 aclocal.m4
  --- ossp-pkg/uuid/aclocal.m4	2 Aug 2006 13:11:09 -0000	1.3
  +++ ossp-pkg/uuid/aclocal.m4	12 Oct 2007 20:57:24 -0000	1.4
  @@ -194,9 +194,9 @@
       dnl #   6. check for assignment approach (assuming va_list is a pointer)
       __va_copy_check(ASP, [do { *(d) = *(s); } while (0)])
       dnl #   7. check for memory copying approach (assuming va_list is a struct)
  -    __va_copy_check(CPS, [memcpy((void *)&(d), (void *)&(s)), sizeof((s))])
  +    __va_copy_check(CPS, [memcpy((void *)&(d), (void *)&(s), sizeof((s)))])
       dnl #   8. check for memory copying approach (assuming va_list is a pointer)
  -    __va_copy_check(CPP, [memcpy((void *)(d), (void *)(s)), sizeof(*(s))])
  +    __va_copy_check(CPP, [memcpy((void *)(d), (void *)(s), sizeof(*(s)))])
       if test ".$ac_cv_va_copy" = .; then
           AC_ERROR([no working implementation found])
       fi
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 12 22:59:17 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B5DC5752F54; Fri, 12 Oct 2007 22:59:17 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ ChangeLog THANKS aclocal.m4
Message-Id: <20071012205917.B5DC5752F54@mail.ossp.org>
Date: Fri, 12 Oct 2007 22:59:17 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Oct-2007 22:59:17
  Branch: HEAD                             Handle: 2007101221591700

  Modified files:
    ossp-pkg/js             ChangeLog THANKS aclocal.m4

  Log:
    Fix __VA_COPY_USE_{CSP,CPP} fallback macros for va_copy.
    
    Submitted by: Mark A. Lindner <mark.a.lindner@gmail.com>

  Summary:
    Revision    Changes     Path
    1.38        +3  -0      ossp-pkg/js/ChangeLog
    1.4         +1  -0      ossp-pkg/js/THANKS
    1.6         +2  -2      ossp-pkg/js/aclocal.m4
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 ChangeLog
  --- ossp-pkg/js/ChangeLog	8 Feb 2007 09:38:41 -0000	1.37
  +++ ossp-pkg/js/ChangeLog	12 Oct 2007 20:59:17 -0000	1.38
  @@ -13,6 +13,9 @@
   
     Changes between 1.6.20060820 and 1.6.20070208 (2006-08-20 to 2007-02-08)
   
  +   o Fix __VA_COPY_USE_{CSP,CPP} fallback macros for va_copy.
  +     [Mark A. Lindner <mark.a.lindner@gmail.com>]
  +
      o Upgrade build environment to GNU autoconf 2.61
        [Ralf S. Engelschall <rse@engelschall.com>]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/THANKS
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 THANKS
  --- ossp-pkg/js/THANKS	29 Jul 2006 20:02:55 -0000	1.3
  +++ ossp-pkg/js/THANKS	12 Oct 2007 20:59:17 -0000	1.4
  @@ -12,6 +12,7 @@
     Credit has to be given to the following people who contributed ideas,
     bugfixes, hints, gave platform feedback, etc. (in alphabetical order):
   
  +    o  Mark A. Lindner             <mark.a.lindner@gmail.com>
       o  Thomas Lotterer             <thomas@lotterer.net>
       o  Alfred Reibenschuh          <alfred.reibenschuh@it-austria.com>
       o  Andrew Vajoczki             <vajoczki@yahoo.com>
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 aclocal.m4
  --- ossp-pkg/js/aclocal.m4	3 Aug 2006 12:16:32 -0000	1.5
  +++ ossp-pkg/js/aclocal.m4	12 Oct 2007 20:59:17 -0000	1.6
  @@ -195,9 +195,9 @@
       dnl #   6. check for assignment approach (assuming va_list is a pointer)
       __va_copy_check(ASP, [do { *(d) = *(s); } while (0)])
       dnl #   7. check for memory copying approach (assuming va_list is a struct)
  -    __va_copy_check(CPS, [memcpy((void *)&(d), (void *)&(s)), sizeof((s))])
  +    __va_copy_check(CPS, [memcpy((void *)&(d), (void *)&(s), sizeof((s)))])
       dnl #   8. check for memory copying approach (assuming va_list is a pointer)
  -    __va_copy_check(CPP, [memcpy((void *)(d), (void *)(s)), sizeof(*(s))])
  +    __va_copy_check(CPP, [memcpy((void *)(d), (void *)(s), sizeof(*(s)))])
       if test ".$ac_cv_va_copy" = .; then
           AC_ERROR([no working implementation found])
       fi
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 12 23:00:46 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 171D8753079; Fri, 12 Oct 2007 23:00:46 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/ex/ ChangeLog aclocal.m4
Message-Id: <20071012210046.171D8753079@mail.ossp.org>
Date: Fri, 12 Oct 2007 23:00:46 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Oct-2007 23:00:46
  Branch: HEAD                             Handle: 2007101222004500

  Modified files:
    ossp-pkg/ex             ChangeLog aclocal.m4

  Log:
    Fix __VA_COPY_USE_{CSP,CPP} fallback macros for va_copy.
    
    Submitted by: Mark A. Lindner <mark.a.lindner@gmail.com>

  Summary:
    Revision    Changes     Path
    1.20        +5  -0      ossp-pkg/ex/ChangeLog
    1.11        +2  -2      ossp-pkg/ex/aclocal.m4
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 ChangeLog
  --- ossp-pkg/ex/ChangeLog	12 Oct 2007 19:59:57 -0000	1.19
  +++ ossp-pkg/ex/ChangeLog	12 Oct 2007 21:00:45 -0000	1.20
  @@ -11,6 +11,11 @@
   
     This is the list of all changes to the OSSP ex source tree.
   
  +  Changes between 1.0.6 and 1.0.7 (12-Oct-2007 to xx-xxx-2007)
  +
  +   *) Fix __VA_COPY_USE_{CSP,CPP} fallback macros for va_copy.
  +      [Mark A. Lindner <mark.a.lindner@gmail.com>]
  +
     Changes between 1.0.5 and 1.0.6 (02-Oct-2005 to 12-Oct-2007)
   
      *) Fix example given under "MULTITHREADING ENVIRONMENTS"
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/ex/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 aclocal.m4
  --- ossp-pkg/ex/aclocal.m4	12 Oct 2007 19:59:57 -0000	1.10
  +++ ossp-pkg/ex/aclocal.m4	12 Oct 2007 21:00:45 -0000	1.11
  @@ -194,9 +194,9 @@
       dnl #   6. check for assignment approach (assuming va_list is a pointer)
       __va_copy_check(ASP, [do { *(d) = *(s); } while (0)])
       dnl #   7. check for memory copying approach (assuming va_list is a struct)
  -    __va_copy_check(CPS, [memcpy((void *)&(d), (void *)&(s)), sizeof((s))])
  +    __va_copy_check(CPS, [memcpy((void *)&(d), (void *)&(s), sizeof((s)))])
       dnl #   8. check for memory copying approach (assuming va_list is a pointer)
  -    __va_copy_check(CPP, [memcpy((void *)(d), (void *)(s)), sizeof(*(s))])
  +    __va_copy_check(CPP, [memcpy((void *)(d), (void *)(s), sizeof(*(s)))])
       if test ".$ac_cv_va_copy" = .; then
           AC_ERROR([no working implementation found])
       fi
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 12 23:02:49 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 05F23752F54; Fri, 12 Oct 2007 23:02:49 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/cfg/ ChangeLog THANKS aclocal.m4
Message-Id: <20071012210249.05F23752F54@mail.ossp.org>
Date: Fri, 12 Oct 2007 23:02:49 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Oct-2007 23:02:48
  Branch: HEAD                             Handle: 2007101222024701

  Modified files:
    ossp-pkg/cfg            ChangeLog THANKS aclocal.m4

  Log:
    Fix __VA_COPY_USE_{CSP,CPP} fallback macros for va_copy.
    
    Submitted by: Mark A. Lindner <mark.a.lindner@gmail.com>

  Summary:
    Revision    Changes     Path
    1.44        +3  -0      ossp-pkg/cfg/ChangeLog
    1.6         +2  -0      ossp-pkg/cfg/THANKS
    1.9         +2  -2      ossp-pkg/cfg/aclocal.m4
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.43 -r1.44 ChangeLog
  --- ossp-pkg/cfg/ChangeLog	10 Aug 2006 19:32:56 -0000	1.43
  +++ ossp-pkg/cfg/ChangeLog	12 Oct 2007 21:02:47 -0000	1.44
  @@ -10,6 +10,9 @@
   
     Changes between 0.9.10 and 0.9.11 (03-Oct-2005 to 10-Aug-2006):
   
  +   *) Fix __VA_COPY_USE_{CSP,CPP} fallback macros for va_copy.
  +      [Mark A. Lindner <mark.a.lindner@gmail.com>]
  +
      *) Replace "return 0" with the official "yyterminate()"
         in cfg_syn_scan.l and fix quotation parsing by replacing
         two "yytext[1]" with the intended "yytext[0]".
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/THANKS
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 THANKS
  --- ossp-pkg/cfg/THANKS	10 Aug 2006 19:35:56 -0000	1.5
  +++ ossp-pkg/cfg/THANKS	12 Oct 2007 21:02:48 -0000	1.6
  @@ -18,6 +18,8 @@
     Credit has to be given to the following people who contributed ideas,
     bugfixes, hints, gave platform feedback, etc. (in alphabetical order):
   
  +    o  Mark A. Lindner             <mark.a.lindner@gmail.com>
       o  Thomas Lotterer             <thomas@lotterer.net>
       o  Michael van Elst            <mlelstv@serpens.de>
   
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/cfg/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 aclocal.m4
  --- ossp-pkg/cfg/aclocal.m4	10 Aug 2006 19:35:56 -0000	1.8
  +++ ossp-pkg/cfg/aclocal.m4	12 Oct 2007 21:02:48 -0000	1.9
  @@ -384,9 +384,9 @@
       dnl #   6. check for assignment approach (assuming va_list is a pointer)
       __va_copy_check(ASP, [do { *(d) = *(s); } while (0)])
       dnl #   7. check for memory copying approach (assuming va_list is a struct)
  -    __va_copy_check(CPS, [memcpy((void *)&(d), (void *)&(s)), sizeof((s))])
  +    __va_copy_check(CPS, [memcpy((void *)&(d), (void *)&(s), sizeof((s)))])
       dnl #   8. check for memory copying approach (assuming va_list is a pointer)
  -    __va_copy_check(CPP, [memcpy((void *)(d), (void *)(s)), sizeof(*(s))])
  +    __va_copy_check(CPP, [memcpy((void *)(d), (void *)(s), sizeof(*(s)))])
       if test ".$ac_cv_va_copy" = .; then
           AC_ERROR([no working implementation found])
       fi
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 12 23:04:02 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B308075300E; Fri, 12 Oct 2007 23:04:02 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/l2/ ChangeLog aclocal.m4
Message-Id: <20071012210402.B308075300E@mail.ossp.org>
Date: Fri, 12 Oct 2007 23:04:02 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   12-Oct-2007 23:04:02
  Branch: HEAD                             Handle: 2007101222040101

  Modified files:
    ossp-pkg/l2             ChangeLog aclocal.m4

  Log:
    Fix __VA_COPY_USE_{CSP,CPP} fallback macros for va_copy.
    
    Submitted by: Mark A. Lindner <mark.a.lindner@gmail.com>

  Summary:
    Revision    Changes     Path
    1.36        +5  -0      ossp-pkg/l2/ChangeLog
    1.19        +2  -2      ossp-pkg/l2/aclocal.m4
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 ChangeLog
  --- ossp-pkg/l2/ChangeLog	8 Jun 2007 13:55:11 -0000	1.35
  +++ ossp-pkg/l2/ChangeLog	12 Oct 2007 21:04:01 -0000	1.36
  @@ -9,6 +9,11 @@
     ChangeLog
     =========
   
  +  Changes between 0.9.13 and 0.9.14 (08-Jun-2007 to xx-xxx-2007)
  +
  +    *) Fix __VA_COPY_USE_{CSP,CPP} fallback macros for va_copy.
  +       [Mark A. Lindner <mark.a.lindner@gmail.com>]
  +
     Changes between 0.9.12 and 0.9.13 (02-Mar-2005 to 08-Jun-2007)
   
       *) Upgraded build environment to GNU shtool 2.0.7
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/l2/aclocal.m4
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 aclocal.m4
  --- ossp-pkg/l2/aclocal.m4	3 Oct 2005 08:08:11 -0000	1.18
  +++ ossp-pkg/l2/aclocal.m4	12 Oct 2007 21:04:02 -0000	1.19
  @@ -497,9 +497,9 @@
       dnl #   6. check for assignment approach (assuming va_list is a pointer)
       __va_copy_check(ASP, [do { *(d) = *(s); } while (0)])
       dnl #   7. check for memory copying approach (assuming va_list is a struct)
  -    __va_copy_check(CPS, [memcpy((void *)&(d), (void *)&(s)), sizeof((s))])
  +    __va_copy_check(CPS, [memcpy((void *)&(d), (void *)&(s), sizeof((s)))])
       dnl #   8. check for memory copying approach (assuming va_list is a pointer)
  -    __va_copy_check(CPP, [memcpy((void *)(d), (void *)(s)), sizeof(*(s))])
  +    __va_copy_check(CPP, [memcpy((void *)(d), (void *)(s), sizeof(*(s)))])
       if test ".$ac_cv_va_copy" = .; then
           AC_ERROR([no working implementation found])
       fi
  @@ .

From ossp-cvs-owner@ossp.org  Fri Oct 19 21:42:02 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id C9C1C7528AB; Fri, 19 Oct 2007 21:42:01 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-web/pkg/tool/ase/ index.wml
Message-Id: <20071019194201.C9C1C7528AB@mail.ossp.org>
Date: Fri, 19 Oct 2007 21:42:01 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-web                         Date:   19-Oct-2007 21:42:01
  Branch: HEAD                             Handle: 2007101920420100

  Modified files:
    ossp-web/pkg/tool/ase   index.wml

  Log:
    disable old versions of OSSP ase on the website

  Summary:
    Revision    Changes     Path
    1.6         +7  -7      ossp-web/pkg/tool/ase/index.wml
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-web/pkg/tool/ase/index.wml
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 index.wml
  --- ossp-web/pkg/tool/ase/index.wml	13 Apr 2007 18:06:57 -0000	1.5
  +++ ossp-web/pkg/tool/ase/index.wml	19 Oct 2007 19:42:01 -0000	1.6
  @@ -21,17 +21,17 @@
   
   <pkg_status
       stable="none" stable_date="none"
  -    unstable="0.3.1" unstable_date="13-Apr-2007"
  +    unstable="0.0.0" unstable_date="xx-xxx-xxxx"
   	done=100>
   
   <h2>Source</h2>
   
  -<pkg_files 
  -    cvs=$(CVS_ROOT_URL)/pkg/tool/ase/
  -    url=$(FTP_ROOT_URL)/pkg/tool/ase/
  -    directory=$(FTP_ROOT_DIR)/pkg/tool/ase/
  -    files="ase-*.tar.gz" 
  -	stable="ase-0.3.1.tar.gz" unstable="none">
  +#<pkg_files 
  +#    cvs=$(CVS_ROOT_URL)/pkg/tool/ase/
  +#    url=$(FTP_ROOT_URL)/pkg/tool/ase/
  +#    directory=$(FTP_ROOT_DIR)/pkg/tool/ase/
  +#    files="ase-*.tar.gz" 
  +#	stable="ase-0.0.0.tar.gz" unstable="none">
   	
   <h2>Donation</h2>
   
  @@ .

From ossp-cvs-owner@ossp.org  Wed Dec  5 10:07:44 2007
Received: by mail.ossp.org (Postfix, from userid 24001)
	id E9F8A7528CE; Wed,  5 Dec 2007 10:07:43 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ sh.platform
Message-Id: <20071205090743.E9F8A7528CE@mail.ossp.org>
Date: Wed,  5 Dec 2007 10:07:43 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Dec-2007 10:07:43
  Branch: HEAD                             Handle: 2007120509074300

  Modified files:
    ossp-pkg/shtool         sh.platform

  Log:
    fix spelling

  Summary:
    Revision    Changes     Path
    1.27        +1  -1      ossp-pkg/shtool/sh.platform
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.platform
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 sh.platform
  --- ossp-pkg/shtool/sh.platform	25 Jul 2007 16:40:06 -0000	1.26
  +++ ossp-pkg/shtool/sh.platform	5 Dec 2007 09:07:43 -0000	1.27
  @@ -850,7 +850,7 @@
   
   B<shtool platform> currently knows the following particular Unix platforms
   in detail: FreeBSD, NetBSD, OpenBSD, Linux, Sun Solaris, SCO UnixWare,
  -QNX Neutrino, SGI IRIX, HP HP-UX, HP Tru64, IBM AIX and Apple MacOS X
  +QNX Neutrino, SGI IRIX, HP HP-UX, HP Tru64, IBM AIX and Apple Mac OS X
   Darwin.
   
   All other Unix platforms are recognized through generic uname(1)
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 10 15:16:04 2008
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 7D64D7529FD; Thu, 10 Jan 2008 15:16:03 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog
Message-Id: <20080110141603.7D64D7529FD@mail.ossp.org>
Date: Thu, 10 Jan 2008 15:16:03 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Jan-2008 15:16:03
  Branch: HEAD                             Handle: 2008011014160200

  Modified files:
    ossp-pkg/uuid           ChangeLog

  Log:
    ops, fix ChangeLog

  Summary:
    Revision    Changes     Path
    1.151       +3  -1      ossp-pkg/uuid/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.150 -r1.151 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	12 Oct 2007 20:57:24 -0000	1.150
  +++ ossp-pkg/uuid/ChangeLog	10 Jan 2008 14:16:02 -0000	1.151
  @@ -11,7 +11,7 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 1.5.1 and 1.6.0 (31-Jul-2006 to 19-May-2007)
  +  Changes between 1.6.0 and 1.6.1 (19-May-2007 to xx-Jan-2008)
      
      o Fix __VA_COPY_USE_{CSP,CPP} fallback macros for va_copy.
        [Mark A. Lindner <mark.a.lindner@gmail.com>]
  @@ -23,6 +23,8 @@
      o Upgrade build environment to GNU libtool 1.5.24
        [Ralf S. Engelschall]
   
  +  Changes between 1.5.1 and 1.6.0 (31-Jul-2006 to 19-May-2007)
  +
      o Expand unused "datarootdir" in Makefile.in and uuid-config.in to
        make newer GNU autoconf versions happy.
        [Ralf S. Engelschall]
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jan 10 15:18:50 2008
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 3BCD17529FD; Thu, 10 Jan 2008 15:18:50 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog Makefile.PL Makefile.in README co...
Message-Id: <20080110141850.3BCD17529FD@mail.ossp.org>
Date: Thu, 10 Jan 2008 15:18:50 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   10-Jan-2008 15:18:50
  Branch: HEAD                             Handle: 2008011014184603

  Modified files:
    ossp-pkg/uuid           ChangeLog Makefile.PL Makefile.in README
                            configure.ac uuid++.cc uuid++.hh uuid++.pod
                            uuid-config.in uuid-config.pod uuid.ac uuid.c
                            uuid.h.in uuid.pc.in uuid.pod uuid_ac.h uuid_bm.h
                            uuid_cli.c uuid_cli.pod uuid_dce.c uuid_dce.h
                            uuid_mac.c uuid_mac.h uuid_md5.c uuid_md5.h
                            uuid_prng.c uuid_prng.h uuid_sha1.c uuid_sha1.h
                            uuid_str.c uuid_str.h uuid_vers.h
    ossp-pkg/uuid/perl      uuid.pm uuid_compat.pm

  Log:
    adjust copyright messages for 2008 and bump version in advance

  Summary:
    Revision    Changes     Path
    1.152       +3  -0      ossp-pkg/uuid/ChangeLog
    1.3         +2  -2      ossp-pkg/uuid/Makefile.PL
    1.45        +2  -2      ossp-pkg/uuid/Makefile.in
    1.45        +3  -3      ossp-pkg/uuid/README
    1.14        +2  -2      ossp-pkg/uuid/configure.ac
    1.23        +1  -1      ossp-pkg/uuid/perl/uuid.pm
    1.14        +1  -1      ossp-pkg/uuid/perl/uuid_compat.pm
    1.8         +2  -2      ossp-pkg/uuid/uuid++.cc
    1.6         +2  -2      ossp-pkg/uuid/uuid++.hh
    1.5         +2  -2      ossp-pkg/uuid/uuid++.pod
    1.8         +2  -2      ossp-pkg/uuid/uuid-config.in
    1.6         +2  -2      ossp-pkg/uuid/uuid-config.pod
    1.23        +2  -2      ossp-pkg/uuid/uuid.ac
    1.65        +2  -2      ossp-pkg/uuid/uuid.c
    1.15        +2  -2      ossp-pkg/uuid/uuid.h.in
    1.4         +2  -2      ossp-pkg/uuid/uuid.pc.in
    1.43        +2  -2      ossp-pkg/uuid/uuid.pod
    1.8         +2  -2      ossp-pkg/uuid/uuid_ac.h
    1.8         +2  -2      ossp-pkg/uuid/uuid_bm.h
    1.26        +2  -2      ossp-pkg/uuid/uuid_cli.c
    1.27        +2  -2      ossp-pkg/uuid/uuid_cli.pod
    1.9         +2  -2      ossp-pkg/uuid/uuid_dce.c
    1.5         +2  -2      ossp-pkg/uuid/uuid_dce.h
    1.13        +2  -2      ossp-pkg/uuid/uuid_mac.c
    1.7         +2  -2      ossp-pkg/uuid/uuid_mac.h
    1.17        +2  -2      ossp-pkg/uuid/uuid_md5.c
    1.7         +2  -2      ossp-pkg/uuid/uuid_md5.h
    1.16        +2  -2      ossp-pkg/uuid/uuid_prng.c
    1.6         +2  -2      ossp-pkg/uuid/uuid_prng.h
    1.7         +2  -2      ossp-pkg/uuid/uuid_sha1.c
    1.5         +2  -2      ossp-pkg/uuid/uuid_sha1.h
    1.11        +2  -2      ossp-pkg/uuid/uuid_str.c
    1.5         +2  -2      ossp-pkg/uuid/uuid_str.h
    1.28        +9  -9      ossp-pkg/uuid/uuid_vers.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.151 -r1.152 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	10 Jan 2008 14:16:02 -0000	1.151
  +++ ossp-pkg/uuid/ChangeLog	10 Jan 2008 14:18:46 -0000	1.152
  @@ -12,6 +12,9 @@
     For a more brief summary please have a look at the NEWS file.
   
     Changes between 1.6.0 and 1.6.1 (19-May-2007 to xx-Jan-2008)
  +
  +   o Adjust copyright messages for new year 2008.
  +     [Ralf S. Engelschall]
      
      o Fix __VA_COPY_USE_{CSP,CPP} fallback macros for va_copy.
        [Mark A. Lindner <mark.a.lindner@gmail.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.PL
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 Makefile.PL
  --- ossp-pkg/uuid/Makefile.PL	1 Jan 2007 18:14:54 -0000	1.2
  +++ ossp-pkg/uuid/Makefile.PL	10 Jan 2008 14:18:46 -0000	1.3
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2008 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2008 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.44 -r1.45 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	19 May 2007 19:59:56 -0000	1.44
  +++ ossp-pkg/uuid/Makefile.in	10 Jan 2008 14:18:46 -0000	1.45
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2008 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2008 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.44 -r1.45 README
  --- ossp-pkg/uuid/README	19 May 2007 20:00:46 -0000	1.44
  +++ ossp-pkg/uuid/README	10 Jan 2008 14:18:46 -0000	1.45
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
   
     OSSP uuid - Universally Unique Identifier
  -  Version 1.6.0 (19-May-2007)
  +  Version 1.6.1 (10-Jan-2008)
   
     ABSTRACT
   
  @@ -29,8 +29,8 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2004-2008 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2004-2008 The OSSP Project <http://www.ossp.org/>
   
     This file is part of OSSP uuid, a library for the generation
     of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/configure.ac
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 configure.ac
  --- ossp-pkg/uuid/configure.ac	1 Jan 2007 18:14:54 -0000	1.13
  +++ ossp-pkg/uuid/configure.ac	10 Jan 2008 14:18:46 -0000	1.14
  @@ -1,7 +1,7 @@
   dnl ##
   dnl ##  OSSP uuid - Universally Unique Identifier
  -dnl ##  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2004-2008 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2004-2008 The OSSP Project <http://www.ossp.org/>
   dnl ##
   dnl ##  This file is part of OSSP uuid, a library for the generation
   dnl ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.pm
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 uuid.pm
  --- ossp-pkg/uuid/perl/uuid.pm	19 May 2007 20:00:47 -0000	1.22
  +++ ossp-pkg/uuid/perl/uuid.pm	10 Jan 2008 14:18:49 -0000	1.23
  @@ -118,7 +118,7 @@
   use Exporter;
   
   #   API version
  -our $VERSION = do { my @v = ('1.6.0' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
  +our $VERSION = do { my @v = ('1.6.1' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
   
   #   API inheritance
   our @ISA = qw(Exporter);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid_compat.pm
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 uuid_compat.pm
  --- ossp-pkg/uuid/perl/uuid_compat.pm	19 May 2007 20:00:47 -0000	1.13
  +++ ossp-pkg/uuid/perl/uuid_compat.pm	10 Jan 2008 14:18:49 -0000	1.14
  @@ -42,7 +42,7 @@
   our @ISA     = qw(Exporter);
   our @EXPORT  = qw(NameSpace_DNS NameSpace_OID NameSpace_URL NameSpace_X500);
   
  -our $VERSION = do { my @v = ('1.6.0' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
  +our $VERSION = do { my @v = ('1.6.1' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
   
   sub new {
       my $class = shift;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid++.cc
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 uuid++.cc
  --- ossp-pkg/uuid/uuid++.cc	1 Jan 2007 18:14:54 -0000	1.7
  +++ ossp-pkg/uuid/uuid++.cc	10 Jan 2008 14:18:46 -0000	1.8
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2008 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2008 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid++.hh
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 uuid++.hh
  --- ossp-pkg/uuid/uuid++.hh	1 Jan 2007 18:14:54 -0000	1.5
  +++ ossp-pkg/uuid/uuid++.hh	10 Jan 2008 14:18:46 -0000	1.6
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2008 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2008 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid++.pod
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 uuid++.pod
  --- ossp-pkg/uuid/uuid++.pod	1 Jan 2007 18:14:54 -0000	1.4
  +++ ossp-pkg/uuid/uuid++.pod	10 Jan 2008 14:18:46 -0000	1.5
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2008 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2008 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid-config.in
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 uuid-config.in
  --- ossp-pkg/uuid/uuid-config.in	19 May 2007 19:59:56 -0000	1.7
  +++ ossp-pkg/uuid/uuid-config.in	10 Jan 2008 14:18:46 -0000	1.8
  @@ -1,8 +1,8 @@
   #!/bin/sh
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2008 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2008 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid-config.pod
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 uuid-config.pod
  --- ossp-pkg/uuid/uuid-config.pod	1 Jan 2007 18:14:54 -0000	1.5
  +++ ossp-pkg/uuid/uuid-config.pod	10 Jan 2008 14:18:46 -0000	1.6
  @@ -1,8 +1,8 @@
   #!/bin/sh
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2008 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2008 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.ac
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 uuid.ac
  --- ossp-pkg/uuid/uuid.ac	1 Jan 2007 18:14:54 -0000	1.22
  +++ ossp-pkg/uuid/uuid.ac	10 Jan 2008 14:18:46 -0000	1.23
  @@ -1,7 +1,7 @@
   dnl ##
   dnl ##  OSSP uuid - Universally Unique Identifier
  -dnl ##  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2004-2008 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2004-2008 The OSSP Project <http://www.ossp.org/>
   dnl ##
   dnl ##  This file is part of OSSP uuid, a library for the generation
   dnl ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.64 -r1.65 uuid.c
  --- ossp-pkg/uuid/uuid.c	1 Jan 2007 18:14:54 -0000	1.64
  +++ ossp-pkg/uuid/uuid.c	10 Jan 2008 14:18:46 -0000	1.65
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2008 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2008 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.h.in
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 uuid.h.in
  --- ossp-pkg/uuid/uuid.h.in	1 Jan 2007 18:14:54 -0000	1.14
  +++ ossp-pkg/uuid/uuid.h.in	10 Jan 2008 14:18:47 -0000	1.15
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2008 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2008 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pc.in
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 uuid.pc.in
  --- ossp-pkg/uuid/uuid.pc.in	1 Jan 2007 18:14:54 -0000	1.3
  +++ ossp-pkg/uuid/uuid.pc.in	10 Jan 2008 14:18:47 -0000	1.4
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2008 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2008 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.42 -r1.43 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	1 Jan 2007 18:14:54 -0000	1.42
  +++ ossp-pkg/uuid/uuid.pod	10 Jan 2008 14:18:47 -0000	1.43
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2008 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2008 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_ac.h
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 uuid_ac.h
  --- ossp-pkg/uuid/uuid_ac.h	1 Jan 2007 18:14:54 -0000	1.7
  +++ ossp-pkg/uuid/uuid_ac.h	10 Jan 2008 14:18:47 -0000	1.8
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2008 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2008 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_bm.h
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 uuid_bm.h
  --- ossp-pkg/uuid/uuid_bm.h	1 Jan 2007 18:14:54 -0000	1.7
  +++ ossp-pkg/uuid/uuid_bm.h	10 Jan 2008 14:18:47 -0000	1.8
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2008 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2008 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.c
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 uuid_cli.c
  --- ossp-pkg/uuid/uuid_cli.c	1 Jan 2007 18:14:54 -0000	1.25
  +++ ossp-pkg/uuid/uuid_cli.c	10 Jan 2008 14:18:47 -0000	1.26
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2008 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2008 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.pod
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 uuid_cli.pod
  --- ossp-pkg/uuid/uuid_cli.pod	1 Jan 2007 18:14:54 -0000	1.26
  +++ ossp-pkg/uuid/uuid_cli.pod	10 Jan 2008 14:18:47 -0000	1.27
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP uuid - Universally Unique Identifier
  -##  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2004-2008 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2004-2008 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP uuid, a library for the generation
   ##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_dce.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 uuid_dce.c
  --- ossp-pkg/uuid/uuid_dce.c	1 Jan 2007 18:14:54 -0000	1.8
  +++ ossp-pkg/uuid/uuid_dce.c	10 Jan 2008 14:18:47 -0000	1.9
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2008 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2008 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_dce.h
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 uuid_dce.h
  --- ossp-pkg/uuid/uuid_dce.h	1 Jan 2007 18:14:55 -0000	1.4
  +++ ossp-pkg/uuid/uuid_dce.h	10 Jan 2008 14:18:47 -0000	1.5
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2008 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2008 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_mac.c
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 uuid_mac.c
  --- ossp-pkg/uuid/uuid_mac.c	1 Jan 2007 18:14:55 -0000	1.12
  +++ ossp-pkg/uuid/uuid_mac.c	10 Jan 2008 14:18:47 -0000	1.13
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2008 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2008 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_mac.h
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 uuid_mac.h
  --- ossp-pkg/uuid/uuid_mac.h	1 Jan 2007 18:14:55 -0000	1.6
  +++ ossp-pkg/uuid/uuid_mac.h	10 Jan 2008 14:18:47 -0000	1.7
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2008 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2008 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_md5.c
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 uuid_md5.c
  --- ossp-pkg/uuid/uuid_md5.c	1 Jan 2007 18:14:55 -0000	1.16
  +++ ossp-pkg/uuid/uuid_md5.c	10 Jan 2008 14:18:47 -0000	1.17
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2008 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2008 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_md5.h
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 uuid_md5.h
  --- ossp-pkg/uuid/uuid_md5.h	1 Jan 2007 18:14:55 -0000	1.6
  +++ ossp-pkg/uuid/uuid_md5.h	10 Jan 2008 14:18:47 -0000	1.7
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2008 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2008 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_prng.c
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 uuid_prng.c
  --- ossp-pkg/uuid/uuid_prng.c	1 Jan 2007 18:14:55 -0000	1.15
  +++ ossp-pkg/uuid/uuid_prng.c	10 Jan 2008 14:18:47 -0000	1.16
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2008 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2008 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_prng.h
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 uuid_prng.h
  --- ossp-pkg/uuid/uuid_prng.h	1 Jan 2007 18:14:55 -0000	1.5
  +++ ossp-pkg/uuid/uuid_prng.h	10 Jan 2008 14:18:47 -0000	1.6
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2008 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2008 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_sha1.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 uuid_sha1.c
  --- ossp-pkg/uuid/uuid_sha1.c	1 Jan 2007 18:14:55 -0000	1.6
  +++ ossp-pkg/uuid/uuid_sha1.c	10 Jan 2008 14:18:47 -0000	1.7
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2008 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2008 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_sha1.h
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 uuid_sha1.h
  --- ossp-pkg/uuid/uuid_sha1.h	1 Jan 2007 18:14:55 -0000	1.4
  +++ ossp-pkg/uuid/uuid_sha1.h	10 Jan 2008 14:18:47 -0000	1.5
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2008 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2008 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_str.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 uuid_str.c
  --- ossp-pkg/uuid/uuid_str.c	1 Jan 2007 18:14:55 -0000	1.10
  +++ ossp-pkg/uuid/uuid_str.c	10 Jan 2008 14:18:47 -0000	1.11
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2008 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2008 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_str.h
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 uuid_str.h
  --- ossp-pkg/uuid/uuid_str.h	1 Jan 2007 18:14:55 -0000	1.4
  +++ ossp-pkg/uuid/uuid_str.h	10 Jan 2008 14:18:47 -0000	1.5
  @@ -1,7 +1,7 @@
   /*
   **  OSSP uuid - Universally Unique Identifier
  -**  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
  -**  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
  +**  Copyright (c) 2004-2008 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2008 The OSSP Project <http://www.ossp.org/>
   **
   **  This file is part of OSSP uuid, a library for the generation
   **  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_vers.h
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 uuid_vers.h
  --- ossp-pkg/uuid/uuid_vers.h	19 May 2007 20:00:47 -0000	1.27
  +++ ossp-pkg/uuid/uuid_vers.h	10 Jan 2008 14:18:47 -0000	1.28
  @@ -8,7 +8,7 @@
   #ifndef _UUID_VERS_H_
   #define _UUID_VERS_H_
   
  -#define _UUID_VERSION 0x106200
  +#define _UUID_VERSION 0x106201
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _UUID_VERS_H_AS_HEADER_
   
   _uuid_version_t _uuid_version = {
  -    0x106200,
  -    "1.6.0",
  -    "1.6.0 (19-May-2007)",
  -    "This is OSSP uuid, Version 1.6.0 (19-May-2007)",
  -    "OSSP uuid 1.6.0 (19-May-2007)",
  -    "OSSP uuid/1.6.0",
  -    "@(#)OSSP uuid 1.6.0 (19-May-2007)",
  -    "$Id: OSSP uuid 1.6.0 (19-May-2007) $"
  +    0x106201,
  +    "1.6.1",
  +    "1.6.1 (10-Jan-2008)",
  +    "This is OSSP uuid, Version 1.6.1 (10-Jan-2008)",
  +    "OSSP uuid 1.6.1 (10-Jan-2008)",
  +    "OSSP uuid/1.6.1",
  +    "@(#)OSSP uuid 1.6.1 (10-Jan-2008)",
  +    "$Id: OSSP uuid 1.6.1 (10-Jan-2008) $"
   };
   
   #endif /* _UUID_VERS_H_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jan 30 17:23:08 2008
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 5A0637528EC; Wed, 30 Jan 2008 17:23:08 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog sh.platform
Message-Id: <20080130162308.5A0637528EC@mail.ossp.org>
Date: Wed, 30 Jan 2008 17:23:08 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   30-Jan-2008 17:23:07
  Branch: HEAD                             Handle: 2008013016230700

  Modified files:
    ossp-pkg/shtool         ChangeLog sh.platform

  Log:
    Detect Windows/Cygwin

  Summary:
    Revision    Changes     Path
    1.237       +3  -0      ossp-pkg/shtool/ChangeLog
    1.28        +30 -0      ossp-pkg/shtool/sh.platform
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.236 -r1.237 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	25 Jul 2007 16:40:06 -0000	1.236
  +++ ossp-pkg/shtool/ChangeLog	30 Jan 2008 16:23:07 -0000	1.237
  @@ -11,6 +11,9 @@
   
    Changes between 2.0.7 and 2.0.8 (19-May-2007 to xx-XXX-2007):
   
  +   *) Detect Windows/Cygwin
  +      [Ralf S. Engelschall]
  +
      *) Detect DragonFly BSD
         [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.platform
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 sh.platform
  --- ossp-pkg/shtool/sh.platform	5 Dec 2007 09:07:43 -0000	1.27
  +++ ossp-pkg/shtool/sh.platform	30 Jan 2008 16:23:07 -0000	1.28
  @@ -489,6 +489,36 @@
           SC="4.4BSD/Mach3.0"
           ;;
   
  +    #   Windows/Cygwin
  +    *:CYGWIN*:* )
  +        #   determine architecture
  +        AT="`uname -m`"
  +        AP="${AT}"
  +        case "${AP}" in
  +            i?86 ) AP="iX86" ;;
  +        esac
  +        AC="${AP}"
  +        #   determine system
  +        unset v1; unset v2; unset v3
  +        eval `echo "${UNAME_RELEASE}" |\
  +              sed -e 's/^/#/' \
  +                  -e 's/^#\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*$/v1="\1"; v2="\2"; v3="\3"/' \
  +                  -e 's/^#\([0-9][0-9]*\)\.\([0-9][0-9]*\).*$/v1="\1"; v2="\2"/' \
  +                  -e 's/^#\([0-9][0-9]*\).*$/v1="\1"/' \
  +                  -e 's/^#.*$/v1="0"/'`
  +        ST="Cygwin ${v1}${v2+.$v2}${v3+[.$v3]}"
  +        SP="$ST"
  +        SC="Windows"
  +        v=`echo "${UNAME_SYSTEM}" | sed -e 's/^CYGWIN_NT-//' |\
  +           sed -e 's/^/#/' -e 's/^#\([0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' -e 's/^#.*$//'`
  +        case "$v" in
  +            4.0 ) SC="$SC[ NT]"    ;;
  +            5.0 ) SC="$SC[ 2000]"  ;;
  +            5.1 ) SC="$SC[ XP]"    ;;
  +            6.0 ) SC="$SC[ Vista]" ;;
  +        esac
  +        ;;
  +
       #   TODO ...ADD YOUR NEW PLATFORM CHECK HERE... TODO
       # *:XXX:* )
       #   ...
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb 21 09:58:04 2008
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 8C7BB752913; Thu, 21 Feb 2008 09:58:03 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ devtool.conf
Message-Id: <20080221085803.8C7BB752913@mail.ossp.org>
Date: Thu, 21 Feb 2008 09:58:03 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Feb-2008 09:58:02
  Branch: HEAD                             Handle: 2008022108580100

  Modified files:
    ossp-pkg/uuid           devtool.conf

  Log:
    upgrade to Libtool 1.5.26

  Summary:
    Revision    Changes     Path
    1.36        +1  -1      ossp-pkg/uuid/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 devtool.conf
  --- ossp-pkg/uuid/devtool.conf	28 Aug 2007 12:26:37 -0000	1.35
  +++ ossp-pkg/uuid/devtool.conf	21 Feb 2008 08:58:01 -0000	1.36
  @@ -4,7 +4,7 @@
   
   %autogen
       @autogen shtool   2.0.7  "2.0.*" all
  -    @autogen libtool  1.5.24 "1.5*"
  +    @autogen libtool  1.5.26 "1.5*"
       @autogen autoconf 2.61   "2.6[0-9]*"
   
   %autoclean
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb 21 09:58:47 2008
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 20FEA752905; Thu, 21 Feb 2008 09:58:47 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog Makefile.in THANKS uuid.ac uuid.c...
Message-Id: <20080221085847.20FEA752905@mail.ossp.org>
Date: Thu, 21 Feb 2008 09:58:47 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Feb-2008 09:58:47
  Branch: HEAD                             Handle: 2008022108584401

  Added files:
    ossp-pkg/uuid           uuid_time.c uuid_time.h
  Modified files:
    ossp-pkg/uuid           ChangeLog Makefile.in THANKS uuid.ac uuid.c
                            uuid_prng.c

  Log:
    Port to Win32 API

  Summary:
    Revision    Changes     Path
    1.153       +4  -1      ossp-pkg/uuid/ChangeLog
    1.46        +1  -1      ossp-pkg/uuid/Makefile.in
    1.14        +2  -0      ossp-pkg/uuid/THANKS
    1.24        +2  -2      ossp-pkg/uuid/uuid.ac
    1.66        +3  -17     ossp-pkg/uuid/uuid.c
    1.17        +4  -0      ossp-pkg/uuid/uuid_prng.c
    1.1         +114 -0     ossp-pkg/uuid/uuid_time.c
    1.1         +56 -0      ossp-pkg/uuid/uuid_time.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.152 -r1.153 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	10 Jan 2008 14:18:46 -0000	1.152
  +++ ossp-pkg/uuid/ChangeLog	21 Feb 2008 08:58:44 -0000	1.153
  @@ -13,6 +13,9 @@
   
     Changes between 1.6.0 and 1.6.1 (19-May-2007 to xx-Jan-2008)
   
  +   o Port to Win32 API.
  +     [Hiroshi Saito, Wu Yongwei, Ralf S. Engelschall]
  +
      o Adjust copyright messages for new year 2008.
        [Ralf S. Engelschall]
      
  @@ -23,7 +26,7 @@
        of assigning to bytea->v_len under PostgreSQL >= 8.3
        [Ralf S. Engelschall]
   
  -   o Upgrade build environment to GNU libtool 1.5.24
  +   o Upgrade build environment to GNU libtool 1.5.26
        [Ralf S. Engelschall]
   
     Changes between 1.5.1 and 1.6.0 (31-Jul-2006 to 19-May-2007)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.45 -r1.46 Makefile.in
  --- ossp-pkg/uuid/Makefile.in	10 Jan 2008 14:18:46 -0000	1.45
  +++ ossp-pkg/uuid/Makefile.in	21 Feb 2008 08:58:45 -0000	1.46
  @@ -63,7 +63,7 @@
   PG_CONFIG   = @PG_CONFIG@
   
   LIB_NAME    = libuuid.la
  -LIB_OBJS    = uuid.lo uuid_md5.lo uuid_sha1.lo uuid_prng.lo uuid_mac.lo uuid_ui64.lo uuid_ui128.lo uuid_str.lo
  +LIB_OBJS    = uuid.lo uuid_md5.lo uuid_sha1.lo uuid_prng.lo uuid_mac.lo uuid_time.lo uuid_ui64.lo uuid_ui128.lo uuid_str.lo
   
   DCE_NAME    = libuuid_dce.la
   DCE_OBJS    = uuid_dce.lo $(LIB_OBJS)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/THANKS
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 THANKS
  --- ossp-pkg/uuid/THANKS	1 Jan 2007 18:39:52 -0000	1.13
  +++ ossp-pkg/uuid/THANKS	21 Feb 2008 08:58:45 -0000	1.14
  @@ -21,7 +21,9 @@
       o  Roman Neuhauser             <neuhauser@sigpipe.cz>
       o  Hrvoje Niksic               <hniksic@xemacs.org>
       o  Piotr Roszatycki            <dexter@debian.org>
  +    o  Hiroshi Saito               <z-saito@guitar.ocn.ne.jp>
       o  Michael Schloh              <michael@schloh.com>
       o  Guerry Semones              <guerry@tsunamiresearch.com>
       o  David Wheeler               <david@justatheory.com>
  +    o  Wu Yongwei                  <wuyongwei@gmail.com>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.ac
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 uuid.ac
  --- ossp-pkg/uuid/uuid.ac	10 Jan 2008 14:18:46 -0000	1.23
  +++ ossp-pkg/uuid/uuid.ac	21 Feb 2008 08:58:45 -0000	1.24
  @@ -43,7 +43,7 @@
       AC_CHECK_VA_COPY()
   
       dnl #   check for system headers
  -    AC_CHECK_HEADERS(sys/types.h sys/param.h sys/time.h sys/socket.h sys/sockio.h sys/ioctl.h)
  +    AC_CHECK_HEADERS(sys/types.h sys/param.h sys/time.h sys/socket.h sys/sockio.h sys/ioctl.h sys/select.h)
       AC_CHECK_HEADERS(netdb.h ifaddrs.h net/if.h net/if_dl.h net/if_arp.h netinet/in.h arpa/inet.h,,,
   [[
   #if HAVE_SYS_TYPES_H
  @@ -58,7 +58,7 @@
   ]])
   
       dnl #   check for functions
  -    AC_CHECK_FUNCS(getifaddrs nanosleep)
  +    AC_CHECK_FUNCS(getifaddrs nanosleep Sleep)
   
       dnl #   check size of built-in types
       AC_CHECK_TYPES([long long, long double])
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.65 -r1.66 uuid.c
  --- ossp-pkg/uuid/uuid.c	10 Jan 2008 14:18:46 -0000	1.65
  +++ ossp-pkg/uuid/uuid.c	21 Feb 2008 08:58:45 -0000	1.66
  @@ -49,6 +49,7 @@
   #include "uuid_sha1.h"
   #include "uuid_prng.h"
   #include "uuid_mac.h"
  +#include "uuid_time.h"
   #include "uuid_ui64.h"
   #include "uuid_ui128.h"
   #include "uuid_str.h"
  @@ -873,11 +874,6 @@
   static uuid_rc_t uuid_make_v1(uuid_t *uuid, unsigned int mode, va_list ap)
   {
       struct timeval time_now;
  -#ifdef HAVE_NANOSLEEP
  -    struct timespec ts;
  -#else
  -    struct timeval tv;
  -#endif
       ui64_t t;
       ui64_t offset;
       ui64_t ov;
  @@ -890,7 +886,7 @@
       /* determine current system time and sequence counter */
       for (;;) {
           /* determine current system time */
  -        if (gettimeofday(&time_now, NULL) == -1)
  +        if (time_gettimeofday(&time_now, NULL) == -1)
               return UUID_RC_SYS;
   
           /* check whether system time changed since last retrieve */
  @@ -910,17 +906,7 @@
   
           /* stall the UUID generation until the system clock (which
              has a gettimeofday(2) resolution of 1us) catches up */
  -#ifdef HAVE_NANOSLEEP
  -        /* sleep for 500ns (1/2us) */
  -        ts.tv_sec  = 0;
  -        ts.tv_nsec = 500;
  -        nanosleep(&ts, NULL);
  -#else
  -        /* sleep for 1000ns (1us) */
  -        tv.tv_sec  = 0;
  -        tv.tv_usec = 1;
  -        select(0, NULL, NULL, NULL, &tv);
  -#endif
  +        time_usleep(1);
       }
   
       /* convert from timeval (sec,usec) to OSSP ui64 (100*nsec) format */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_prng.c
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 uuid_prng.c
  --- ossp-pkg/uuid/uuid_prng.c	10 Jan 2008 14:18:47 -0000	1.16
  +++ ossp-pkg/uuid/uuid_prng.c	21 Feb 2008 08:58:45 -0000	1.17
  @@ -50,7 +50,9 @@
   
   prng_rc_t prng_create(prng_t **prng)
   {
  +#if !defined(WIN32)
       int fd = -1;
  +#endif
       struct timeval tv;
       pid_t pid;
       unsigned int i;
  @@ -65,12 +67,14 @@
   
       /* try to open the system PRNG device */
       (*prng)->dev = -1;
  +#if !defined(WIN32)
       if ((fd = open("/dev/urandom", O_RDONLY)) == -1)
           fd = open("/dev/random", O_RDONLY|O_NONBLOCK);
       if (fd != -1) {
           (void)fcntl(fd, F_SETFD, FD_CLOEXEC);
           (*prng)->dev = fd;
       }
  +#endif
   
       /* initialize MD5 engine */
       if (md5_create(&((*prng)->md5)) != MD5_RC_OK) {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_time.c
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid_time.c
  --- /dev/null	2008-02-21 09:55:01 +0100
  +++ uuid_time.c	2008-02-21 09:58:46 +0100
  @@ -0,0 +1,114 @@
  +/*
  +**  OSSP uuid - Universally Unique Identifier
  +**  Copyright (c) 2004-2008 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2008 The OSSP Project <http://www.ossp.org/>
  +**
  +**  This file is part of OSSP uuid, a library for the generation
  +**  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  uuid_time.c: Time Management
  +*/
  +
  +/* own headers (part (1/2) */
  +#include "uuid_ac.h"
  +
  +/* system headers */
  +#include <stdlib.h>
  +#include <unistd.h>
  +#include <time.h>
  +#ifdef HAVE_SYS_TIME_H
  +#include <sys/time.h>
  +#endif
  +#ifdef HAVE_SYS_TYPES_H
  +#include <sys/types.h>
  +#endif
  +#ifdef HAVE_SYS_SELECT_H
  +#include <sys/select.h>
  +#endif
  +
  +/* own headers (part (1/2) */
  +#include "uuid_time.h"
  +
  +/* POSIX gettimeofday(2) abstraction */
  +int time_gettimeofday(struct timeval *tv, struct timezone *tz)
  +{
  +#if defined(WIN32)
  +    /* Windows emulation */
  +    FILETIME ft;
  +    LARGE_INTEGER li;
  +    __int64 t;
  +    static int tzflag;
  +
  +#if !defined(__GNUC__)
  +#define EPOCHFILETIME 116444736000000000i64
  +#else
  +#define EPOCHFILETIME 116444736000000000LL
  +#endif
  +    if (tv != NULL) {
  +        GetSystemTimeAsFileTime(&ft);
  +        li.LowPart  = ft.dwLowDateTime;
  +        li.HighPart = ft.dwHighDateTime;
  +        t  = li.QuadPart;
  +        t -= EPOCHFILETIME;
  +        t /= 10;
  +        tv->tv_sec  = (long)(t / 1000000);
  +        tv->tv_usec = (long)(t % 1000000);
  +    }
  +    if (tz != NULL) {
  +        if (!tzflag) {
  +            _tzset();
  +            tzflag++;
  +        }
  +        tz->tz_minuteswest = _timezone / 60;
  +        tz->tz_dsttime = _daylight;
  +    }
  +    return 0;
  +#else
  +    /* POSIX pass-through */
  +    return gettimeofday(tv, tz);
  +#endif
  +}
  +
  +/* BSD usleep(3) abstraction */
  +int time_usleep(long usec)
  +{
  +#if defined(WIN32) && defined(HAVE_SLEEP)
  +    /* Win32 newer Sleep(3) variant */
  +    Sleep(usec / 1000);
  +#elif defined(WIN32)
  +    /* Win32 older _sleep(3) variant */
  +    _sleep(usec / 1000);
  +#elif defined(HAVE_NANOSLEEP)
  +    /* POSIX newer nanosleep(3) variant */
  +    struct timespec ts;
  +    ts.tv_sec  = 0;
  +    ts.tv_nsec = 1000 * usec;
  +    nanosleep(&ts, NULL);
  +#else
  +    /* POSIX older select(2) variant */
  +    struct timeval tv;
  +    tv.tv_sec  = 0;
  +    tv.tv_usec = usec;
  +    select(0, NULL, NULL, NULL, &tv);
  +#endif
  +    return 0;
  +}
  +
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_time.h
  ============================================================================
  $ cvs diff -u -r0 -r1.1 uuid_time.h
  --- /dev/null	2008-02-21 09:55:01 +0100
  +++ uuid_time.h	2008-02-21 09:58:47 +0100
  @@ -0,0 +1,56 @@
  +/*
  +**  OSSP uuid - Universally Unique Identifier
  +**  Copyright (c) 2004-2008 Ralf S. Engelschall <rse@engelschall.com>
  +**  Copyright (c) 2004-2008 The OSSP Project <http://www.ossp.org/>
  +**
  +**  This file is part of OSSP uuid, a library for the generation
  +**  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
  +**
  +**  Permission to use, copy, modify, and distribute this software for
  +**  any purpose with or without fee is hereby granted, provided that
  +**  the above copyright notice and this permission notice appear in all
  +**  copies.
  +**
  +**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  +**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  +**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +**  SUCH DAMAGE.
  +**
  +**  uuid_time.h: Time Management API
  +*/
  +
  +#ifndef __UUID_TIME_H__
  +#define __UUID_TIME_H__
  +
  +#include "uuid_ac.h"
  +
  +#if defined(WIN32)
  +#define WIN32_LEAN_AND_MEAN
  +#include <windows.h>
  +#endif
  +#include <time.h>
  +#ifdef HAVE_SYS_TIME_H
  +#include <sys/time.h>
  +#endif
  +#ifdef HAVE_SYS_TYPES_H
  +#include <sys/types.h>
  +#endif
  +
  +#if defined(WIN32)
  +struct timeval  { long tv_sec; long tv_usec; };
  +struct timezone { int tz_minuteswest; int tz_dsttime; };
  +#endif
  +
  +extern int time_gettimeofday(struct timeval *, struct timezone *);
  +extern int time_usleep(long usec);
  +
  +#endif /* __UUID_TIME_H__ */
  +
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb 21 16:34:56 2008
Received: by mail.ossp.org (Postfix, from userid 24001)
	id E5D9D75289B; Thu, 21 Feb 2008 16:34:53 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid.ac uuid_prng.c uuid_time.h
Message-Id: <20080221153453.E5D9D75289B@mail.ossp.org>
Date: Thu, 21 Feb 2008 16:34:53 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Feb-2008 16:34:52
  Branch: HEAD                             Handle: 2008022115345100

  Modified files:
    ossp-pkg/uuid           uuid.ac uuid_prng.c uuid_time.h

  Log:
    fix remaining Win32 issues

  Summary:
    Revision    Changes     Path
    1.25        +38 -0      ossp-pkg/uuid/uuid.ac
    1.18        +3  -2      ossp-pkg/uuid/uuid_prng.c
    1.2         +4  -2      ossp-pkg/uuid/uuid_time.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.ac
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 uuid.ac
  --- ossp-pkg/uuid/uuid.ac	21 Feb 2008 08:58:45 -0000	1.24
  +++ ossp-pkg/uuid/uuid.ac	21 Feb 2008 15:34:51 -0000	1.25
  @@ -57,6 +57,44 @@
   #endif
   ]])
   
  +    dnl #   check for existence of particular C structures
  +    AC_MSG_CHECKING(for struct timeval)
  +    AC_TRY_COMPILE([
  +#ifdef HAVE_UNISTD_H
  +#include <unistd.h>
  +#endif
  +#ifdef HAVE_SYS_TYPES_H
  +#include <sys/types.h>
  +#endif
  +#ifdef HAVE_SYS_TIME_H
  +#include <sys/time.h>
  +#endif
  +#include <time.h>
  +    ],[ struct timeval tv; ],
  +    [ msg="yes" ], [ msg="no" ])
  +    if test ".$msg" = .yes; then
  +        AC_DEFINE(HAVE_STRUCT_TIMEVAL, 1, [define if exists "struct timeval"])
  +    fi
  +    AC_MSG_RESULT([$msg])
  +    AC_MSG_CHECKING(for struct timezone)
  +    AC_TRY_COMPILE([
  +#ifdef HAVE_UNISTD_H
  +#include <unistd.h>
  +#endif
  +#ifdef HAVE_SYS_TYPES_H
  +#include <sys/types.h>
  +#endif
  +#ifdef HAVE_SYS_TIME_H
  +#include <sys/time.h>
  +#endif
  +#include <time.h>
  +    ],[ struct timezone tz; ],
  +    [ msg="yes" ], [ msg="no" ])
  +    if test ".$msg" = .yes; then
  +        AC_DEFINE(HAVE_STRUCT_TIMEZONE, 1, [define if exists "struct timezone"])
  +    fi
  +    AC_MSG_RESULT([$msg])
  +
       dnl #   check for functions
       AC_CHECK_FUNCS(getifaddrs nanosleep Sleep)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_prng.c
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 uuid_prng.c
  --- ossp-pkg/uuid/uuid_prng.c	21 Feb 2008 08:58:45 -0000	1.17
  +++ ossp-pkg/uuid/uuid_prng.c	21 Feb 2008 15:34:51 -0000	1.18
  @@ -39,6 +39,7 @@
   #include <fcntl.h>
   
   /* own headers (part 2/2) */
  +#include "uuid_time.h"
   #include "uuid_prng.h"
   #include "uuid_md5.h"
   
  @@ -86,7 +87,7 @@
       (*prng)->cnt = 0;
   
       /* seed the C library PRNG once */
  -    (void)gettimeofday(&tv, NULL);
  +    (void)time_gettimeofday(&tv, NULL);
       pid = getpid();
       srand((unsigned int)(
           ((unsigned int)pid << 16)
  @@ -141,7 +142,7 @@
       /* approach 2: try to gather data via weaker libc PRNG API. */
       while (n > 0) {
           /* gather new entropy */
  -        (void)gettimeofday(&(entropy.tv), NULL);            /* source: libc time */
  +        (void)time_gettimeofday(&(entropy.tv), NULL);       /* source: libc time */
           entropy.rnd = rand();                               /* source: libc PRNG */
           entropy.cnt = prng->cnt++;                          /* source: local counter */
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_time.h
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid_time.h
  --- ossp-pkg/uuid/uuid_time.h	21 Feb 2008 08:58:45 -0000	1.1
  +++ ossp-pkg/uuid/uuid_time.h	21 Feb 2008 15:34:51 -0000	1.2
  @@ -44,8 +44,10 @@
   #include <sys/types.h>
   #endif
   
  -#if defined(WIN32)
  -struct timeval  { long tv_sec; long tv_usec; };
  +#ifndef HAVE_STRUCT_TIMEVAL
  +struct timeval { long tv_sec; long tv_usec; };
  +#endif
  +#ifndef HAVE_STRUCT_TIMEZONE
   struct timezone { int tz_minuteswest; int tz_dsttime; };
   #endif
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb 21 16:36:55 2008
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 908BA75289B; Thu, 21 Feb 2008 16:36:54 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog README uuid_vers.h
Message-Id: <20080221153654.908BA75289B@mail.ossp.org>
Date: Thu, 21 Feb 2008 16:36:54 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Feb-2008 16:36:53
  Branch: HEAD                             Handle: 2008022115365200

  Modified files:
    ossp-pkg/uuid           ChangeLog README uuid_vers.h

  Log:
    prepare release of OSSP uuid 1.6.1

  Summary:
    Revision    Changes     Path
    1.154       +1  -1      ossp-pkg/uuid/ChangeLog
    1.46        +1  -1      ossp-pkg/uuid/README
    1.29        +5  -5      ossp-pkg/uuid/uuid_vers.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.153 -r1.154 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	21 Feb 2008 08:58:44 -0000	1.153
  +++ ossp-pkg/uuid/ChangeLog	21 Feb 2008 15:36:52 -0000	1.154
  @@ -11,7 +11,7 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 1.6.0 and 1.6.1 (19-May-2007 to xx-Jan-2008)
  +  Changes between 1.6.0 and 1.6.1 (19-May-2007 to 21-Feb-2008)
   
      o Port to Win32 API.
        [Hiroshi Saito, Wu Yongwei, Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.45 -r1.46 README
  --- ossp-pkg/uuid/README	10 Jan 2008 14:18:46 -0000	1.45
  +++ ossp-pkg/uuid/README	21 Feb 2008 15:36:52 -0000	1.46
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
   
     OSSP uuid - Universally Unique Identifier
  -  Version 1.6.1 (10-Jan-2008)
  +  Version 1.6.1 (21-Feb-2008)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_vers.h
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 uuid_vers.h
  --- ossp-pkg/uuid/uuid_vers.h	10 Jan 2008 14:18:47 -0000	1.28
  +++ ossp-pkg/uuid/uuid_vers.h	21 Feb 2008 15:36:52 -0000	1.29
  @@ -34,12 +34,12 @@
   _uuid_version_t _uuid_version = {
       0x106201,
       "1.6.1",
  -    "1.6.1 (10-Jan-2008)",
  -    "This is OSSP uuid, Version 1.6.1 (10-Jan-2008)",
  -    "OSSP uuid 1.6.1 (10-Jan-2008)",
  +    "1.6.1 (21-Feb-2008)",
  +    "This is OSSP uuid, Version 1.6.1 (21-Feb-2008)",
  +    "OSSP uuid 1.6.1 (21-Feb-2008)",
       "OSSP uuid/1.6.1",
  -    "@(#)OSSP uuid 1.6.1 (10-Jan-2008)",
  -    "$Id: OSSP uuid 1.6.1 (10-Jan-2008) $"
  +    "@(#)OSSP uuid 1.6.1 (21-Feb-2008)",
  +    "$Id: OSSP uuid 1.6.1 (21-Feb-2008) $"
   };
   
   #endif /* _UUID_VERS_H_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Thu Feb 21 16:39:07 2008
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 5DE4C75289B; Thu, 21 Feb 2008 16:39:07 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ MANIFEST
Message-Id: <20080221153907.5DE4C75289B@mail.ossp.org>
Date: Thu, 21 Feb 2008 16:39:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Feb-2008 16:39:06
  Branch: HEAD                             Handle: 2008022115390600

  Modified files:
    ossp-pkg/uuid           MANIFEST

  Log:
    fix manifest

  Summary:
    Revision    Changes     Path
    1.2         +2  -0      ossp-pkg/uuid/MANIFEST
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/MANIFEST
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 MANIFEST
  --- ossp-pkg/uuid/MANIFEST	31 Jul 2006 12:02:57 -0000	1.1
  +++ ossp-pkg/uuid/MANIFEST	21 Feb 2008 15:39:06 -0000	1.2
  @@ -74,6 +74,8 @@
   uuid_sha1.h
   uuid_str.c
   uuid_str.h
  +uuid_time.c
  +uuid_time.h
   uuid_ui128.c
   uuid_ui128.h
   uuid_ui64.c
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar  6 11:04:50 2008
Received: by mail.ossp.org (Postfix, from userid 24001)
	id CBCD2752905; Thu,  6 Mar 2008 11:04:49 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog devtool.conf devtool.func
Message-Id: <20080306100449.CBCD2752905@mail.ossp.org>
Date: Thu,  6 Mar 2008 11:04:49 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Mar-2008 11:04:49
  Branch: HEAD                             Handle: 2008030610044801

  Modified files:
    ossp-pkg/uuid           ChangeLog devtool.conf devtool.func

  Log:
    Upgrade build environment to GNU libtool 2.2

  Summary:
    Revision    Changes     Path
    1.155       +5  -0      ossp-pkg/uuid/ChangeLog
    1.37        +1  -1      ossp-pkg/uuid/devtool.conf
    1.3         +3  -3      ossp-pkg/uuid/devtool.func
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.154 -r1.155 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	21 Feb 2008 15:36:52 -0000	1.154
  +++ ossp-pkg/uuid/ChangeLog	6 Mar 2008 10:04:48 -0000	1.155
  @@ -11,6 +11,11 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  +  Changes between 1.6.1 and 1.6.2 (21-Feb-2008 to 06-Mar-2008)
  +
  +   o Upgrade build environment to GNU libtool 2.2.
  +     [Ralf S. Engelschall]
  +
     Changes between 1.6.0 and 1.6.1 (19-May-2007 to 21-Feb-2008)
   
      o Port to Win32 API.
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.36 -r1.37 devtool.conf
  --- ossp-pkg/uuid/devtool.conf	21 Feb 2008 08:58:01 -0000	1.36
  +++ ossp-pkg/uuid/devtool.conf	6 Mar 2008 10:04:49 -0000	1.37
  @@ -4,7 +4,7 @@
   
   %autogen
       @autogen shtool   2.0.7  "2.0.*" all
  -    @autogen libtool  1.5.26 "1.5*"
  +    @autogen libtool  2.2    "2.2*"
       @autogen autoconf 2.61   "2.6[0-9]*"
   
   %autoclean
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool.func
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.func
  --- ossp-pkg/uuid/devtool.func	19 Jan 2004 12:15:57 -0000	1.2
  +++ ossp-pkg/uuid/devtool.func	6 Mar 2008 10:04:49 -0000	1.3
  @@ -38,9 +38,9 @@
           libtool )
               libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
               echo "generating (GNU Libtool $libtoolize_version): ltmain.sh, libtool.m4, config.guess, config.sub"
  -            libtoolize --force --copy >/dev/null 2>&1
  -            cp `libtoolize --force --copy --dry-run | grep "add the contents of" |\
  -                sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` libtool.m4
  +            libtoolize --force --copy --install >/dev/null 2>&1
  +            cat `libtoolize --force --copy --install --dry-run | sed -e '1,/add the contents of/d' |\
  +                sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` >libtool.m4
               ;;
           shtool )
               shtoolize_version=`devtool_require shtoolize -v 3 "$1" "$2"`
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar  6 13:14:52 2008
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 75F63752F72; Thu,  6 Mar 2008 13:14:51 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid.ac uuid.c uuid_prng.c uuid_t...
Message-Id: <20080306121451.75F63752F72@mail.ossp.org>
Date: Thu,  6 Mar 2008 13:14:51 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Mar-2008 13:14:50
  Branch: HEAD                             Handle: 2008030612144900

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid.ac uuid.c uuid_prng.c uuid_time.c
                            uuid_time.h

  Log:
    1. Remove unused "struct timezone" from time_gettimeofday() in
       order to simplify portability.
    2. Add support for POSIX clock_gettime(3) in case the Unix/POSIX
       gettimeofday(3) is not available.

  Summary:
    Revision    Changes     Path
    1.156       +8  -0      ossp-pkg/uuid/ChangeLog
    1.26        +1  -19     ossp-pkg/uuid/uuid.ac
    1.67        +1  -1      ossp-pkg/uuid/uuid.c
    1.19        +4  -4      ossp-pkg/uuid/uuid_prng.c
    1.2         +17 -14     ossp-pkg/uuid/uuid_time.c
    1.3         +1  -4      ossp-pkg/uuid/uuid_time.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.155 -r1.156 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	6 Mar 2008 10:04:48 -0000	1.155
  +++ ossp-pkg/uuid/ChangeLog	6 Mar 2008 12:14:49 -0000	1.156
  @@ -13,6 +13,14 @@
   
     Changes between 1.6.1 and 1.6.2 (21-Feb-2008 to 06-Mar-2008)
   
  +   o Remove unused "struct timezone" from time_gettimeofday() in
  +     order to simplify portability.
  +     [Ralf S. Engelschall]
  +
  +   o Add support for POSIX clock_gettime(3) in case the Unix/POSIX
  +     gettimeofday(3) is not available.
  +     [Ralf S. Engelschall]
  +
      o Upgrade build environment to GNU libtool 2.2.
        [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.ac
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 uuid.ac
  --- ossp-pkg/uuid/uuid.ac	21 Feb 2008 15:34:51 -0000	1.25
  +++ ossp-pkg/uuid/uuid.ac	6 Mar 2008 12:14:49 -0000	1.26
  @@ -76,27 +76,9 @@
           AC_DEFINE(HAVE_STRUCT_TIMEVAL, 1, [define if exists "struct timeval"])
       fi
       AC_MSG_RESULT([$msg])
  -    AC_MSG_CHECKING(for struct timezone)
  -    AC_TRY_COMPILE([
  -#ifdef HAVE_UNISTD_H
  -#include <unistd.h>
  -#endif
  -#ifdef HAVE_SYS_TYPES_H
  -#include <sys/types.h>
  -#endif
  -#ifdef HAVE_SYS_TIME_H
  -#include <sys/time.h>
  -#endif
  -#include <time.h>
  -    ],[ struct timezone tz; ],
  -    [ msg="yes" ], [ msg="no" ])
  -    if test ".$msg" = .yes; then
  -        AC_DEFINE(HAVE_STRUCT_TIMEZONE, 1, [define if exists "struct timezone"])
  -    fi
  -    AC_MSG_RESULT([$msg])
   
       dnl #   check for functions
  -    AC_CHECK_FUNCS(getifaddrs nanosleep Sleep)
  +    AC_CHECK_FUNCS(getifaddrs nanosleep Sleep gettimeofday clock_gettime)
   
       dnl #   check size of built-in types
       AC_CHECK_TYPES([long long, long double])
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  $ cvs diff -u -r1.66 -r1.67 uuid.c
  --- ossp-pkg/uuid/uuid.c	21 Feb 2008 08:58:45 -0000	1.66
  +++ ossp-pkg/uuid/uuid.c	6 Mar 2008 12:14:49 -0000	1.67
  @@ -886,7 +886,7 @@
       /* determine current system time and sequence counter */
       for (;;) {
           /* determine current system time */
  -        if (time_gettimeofday(&time_now, NULL) == -1)
  +        if (time_gettimeofday(&time_now) == -1)
               return UUID_RC_SYS;
   
           /* check whether system time changed since last retrieve */
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_prng.c
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 uuid_prng.c
  --- ossp-pkg/uuid/uuid_prng.c	21 Feb 2008 15:34:51 -0000	1.18
  +++ ossp-pkg/uuid/uuid_prng.c	6 Mar 2008 12:14:49 -0000	1.19
  @@ -87,7 +87,7 @@
       (*prng)->cnt = 0;
   
       /* seed the C library PRNG once */
  -    (void)time_gettimeofday(&tv, NULL);
  +    (void)time_gettimeofday(&tv);
       pid = getpid();
       srand((unsigned int)(
           ((unsigned int)pid << 16)
  @@ -142,9 +142,9 @@
       /* approach 2: try to gather data via weaker libc PRNG API. */
       while (n > 0) {
           /* gather new entropy */
  -        (void)time_gettimeofday(&(entropy.tv), NULL);       /* source: libc time */
  -        entropy.rnd = rand();                               /* source: libc PRNG */
  -        entropy.cnt = prng->cnt++;                          /* source: local counter */
  +        (void)time_gettimeofday(&(entropy.tv));  /* source: libc time */
  +        entropy.rnd = rand();                    /* source: libc PRNG */
  +        entropy.cnt = prng->cnt++;               /* source: local counter */
   
           /* pass entropy into MD5 engine */
           if (md5_update(prng->md5, (void *)&entropy, sizeof(entropy)) != MD5_RC_OK)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_time.c
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 uuid_time.c
  --- ossp-pkg/uuid/uuid_time.c	21 Feb 2008 08:58:45 -0000	1.1
  +++ ossp-pkg/uuid/uuid_time.c	6 Mar 2008 12:14:49 -0000	1.2
  @@ -47,16 +47,28 @@
   /* own headers (part (1/2) */
   #include "uuid_time.h"
   
  -/* POSIX gettimeofday(2) abstraction */
  -int time_gettimeofday(struct timeval *tv, struct timezone *tz)
  +/* POSIX gettimeofday(2) abstraction (without timezone) */
  +int time_gettimeofday(struct timeval *tv)
   {
  -#if defined(WIN32)
  +#if defined(HAVE_GETTIMEOFDAY)
  +    /* Unix/POSIX pass-through */
  +    return gettimeofday(tv, NULL);
  +#elif defined(HAVE_CLOCK_GETTIME)
  +    /* POSIX emulation */
  +    struct timespec ts;
  +    if (clock_gettime(CLOCK_MONOTONIC, &ts) == -1)
  +        return -1;
  +    if (tv != NULL) {
  +        tv->tv_sec = (long)ts.tv_sec;
  +        tv->tv_usec = (long)ts.tv_nsec / 1000;
  +    }
  +    return 0;
  +#elif defined(WIN32)
       /* Windows emulation */
       FILETIME ft;
       LARGE_INTEGER li;
       __int64 t;
       static int tzflag;
  -
   #if !defined(__GNUC__)
   #define EPOCHFILETIME 116444736000000000i64
   #else
  @@ -72,18 +84,9 @@
           tv->tv_sec  = (long)(t / 1000000);
           tv->tv_usec = (long)(t % 1000000);
       }
  -    if (tz != NULL) {
  -        if (!tzflag) {
  -            _tzset();
  -            tzflag++;
  -        }
  -        tz->tz_minuteswest = _timezone / 60;
  -        tz->tz_dsttime = _daylight;
  -    }
       return 0;
   #else
  -    /* POSIX pass-through */
  -    return gettimeofday(tv, tz);
  +#error neither Win32 GetSystemTimeAsFileTime() nor Unix gettimeofday() nor POSIX clock_gettime() available!
   #endif
   }
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_time.h
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 uuid_time.h
  --- ossp-pkg/uuid/uuid_time.h	21 Feb 2008 15:34:51 -0000	1.2
  +++ ossp-pkg/uuid/uuid_time.h	6 Mar 2008 12:14:49 -0000	1.3
  @@ -47,11 +47,8 @@
   #ifndef HAVE_STRUCT_TIMEVAL
   struct timeval { long tv_sec; long tv_usec; };
   #endif
  -#ifndef HAVE_STRUCT_TIMEZONE
  -struct timezone { int tz_minuteswest; int tz_dsttime; };
  -#endif
   
  -extern int time_gettimeofday(struct timeval *, struct timezone *);
  +extern int time_gettimeofday(struct timeval *);
   extern int time_usleep(long usec);
   
   #endif /* __UUID_TIME_H__ */
  @@ .

From ossp-cvs-owner@ossp.org  Thu Mar  6 13:19:03 2008
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 69158752905; Thu,  6 Mar 2008 13:19:00 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ devtool.func
Message-Id: <20080306121900.69158752905@mail.ossp.org>
Date: Thu,  6 Mar 2008 13:19:00 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Mar-2008 13:18:59
  Branch: HEAD                             Handle: 2008030612185800

  Modified files:
    ossp-pkg/uuid           devtool.func

  Log:
    do not keep install-sh from Libtool

  Summary:
    Revision    Changes     Path
    1.4         +1  -0      ossp-pkg/uuid/devtool.func
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool.func
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.func
  --- ossp-pkg/uuid/devtool.func	6 Mar 2008 10:04:49 -0000	1.3
  +++ ossp-pkg/uuid/devtool.func	6 Mar 2008 12:18:58 -0000	1.4
  @@ -41,6 +41,7 @@
               libtoolize --force --copy --install >/dev/null 2>&1
               cat `libtoolize --force --copy --install --dry-run | sed -e '1,/add the contents of/d' |\
                   sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` >libtool.m4
  +            rm -f install-sh
               ;;
           shtool )
               shtoolize_version=`devtool_require shtoolize -v 3 "$1" "$2"`
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar  7 10:28:17 2008
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 6323F753042; Fri,  7 Mar 2008 10:28:16 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid_time.h
Message-Id: <20080307092816.6323F753042@mail.ossp.org>
Date: Fri,  7 Mar 2008 10:28:16 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Mar-2008 10:28:15
  Branch: HEAD                             Handle: 2008030709281401

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid_time.h

  Log:
    Resolve namespace conflicts of recently introduced time_xxx()
    functions by using a propoer "uuid_" prefix.

  Summary:
    Revision    Changes     Path
    1.157       +4  -0      ossp-pkg/uuid/ChangeLog
    1.4         +15 -0      ossp-pkg/uuid/uuid_time.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.156 -r1.157 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	6 Mar 2008 12:14:49 -0000	1.156
  +++ ossp-pkg/uuid/ChangeLog	7 Mar 2008 09:28:14 -0000	1.157
  @@ -13,6 +13,10 @@
   
     Changes between 1.6.1 and 1.6.2 (21-Feb-2008 to 06-Mar-2008)
   
  +   o Resolve namespace conflicts of recently introduced time_xxx()
  +     functions by using a propoer "uuid_" prefix.
  +     [Ralf S. Engelschall]
  +
      o Remove unused "struct timezone" from time_gettimeofday() in
        order to simplify portability.
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_time.h
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 uuid_time.h
  --- ossp-pkg/uuid/uuid_time.h	6 Mar 2008 12:14:49 -0000	1.3
  +++ ossp-pkg/uuid/uuid_time.h	7 Mar 2008 09:28:15 -0000	1.4
  @@ -44,6 +44,21 @@
   #include <sys/types.h>
   #endif
   
  +#define TIME_PREFIX uuid_
  +
  +/* embedding support */
  +#ifdef TIME_PREFIX
  +#if defined(__STDC__) || defined(__cplusplus)
  +#define __TIME_CONCAT(x,y) x ## y
  +#define TIME_CONCAT(x,y) __TIME_CONCAT(x,y)
  +#else
  +#define __TIME_CONCAT(x) x
  +#define TIME_CONCAT(x,y) __TIME_CONCAT(x)y
  +#endif
  +#define time_gettimeofday TIME_CONCAT(TIME_PREFIX,time_gettimeofday)
  +#define time_usleep       TIME_CONCAT(TIME_PREFIX,time_usleep)
  +#endif
  +
   #ifndef HAVE_STRUCT_TIMEVAL
   struct timeval { long tv_sec; long tv_usec; };
   #endif
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar  7 10:45:08 2008
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 0106E752913; Fri,  7 Mar 2008 10:45:07 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ uuid_time.h
Message-Id: <20080307094508.0106E752913@mail.ossp.org>
Date: Fri,  7 Mar 2008 10:45:07 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Mar-2008 10:45:07
  Branch: HEAD                             Handle: 2008030709450600

  Modified files:
    ossp-pkg/uuid           uuid_time.h

  Log:
    minimum C++ support

  Summary:
    Revision    Changes     Path
    1.5         +13 -0      ossp-pkg/uuid/uuid_time.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_time.h
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 uuid_time.h
  --- ossp-pkg/uuid/uuid_time.h	7 Mar 2008 09:28:15 -0000	1.4
  +++ ossp-pkg/uuid/uuid_time.h	7 Mar 2008 09:45:06 -0000	1.5
  @@ -59,6 +59,17 @@
   #define time_usleep       TIME_CONCAT(TIME_PREFIX,time_usleep)
   #endif
   
  +/* minimum C++ support */
  +#ifdef __cplusplus
  +#define DECLARATION_BEGIN extern "C" {
  +#define DECLARATION_END   }
  +#else
  +#define DECLARATION_BEGIN
  +#define DECLARATION_END
  +#endif
  +
  +DECLARATION_BEGIN
  +
   #ifndef HAVE_STRUCT_TIMEVAL
   struct timeval { long tv_sec; long tv_usec; };
   #endif
  @@ -66,5 +77,7 @@
   extern int time_gettimeofday(struct timeval *);
   extern int time_usleep(long usec);
   
  +DECLARATION_END
  +
   #endif /* __UUID_TIME_H__ */
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Mar  7 14:52:44 2008
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 81ED07529F2; Fri,  7 Mar 2008 14:52:43 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog README uuid.pod uuid_cli.pod
Message-Id: <20080307135243.81ED07529F2@mail.ossp.org>
Date: Fri,  7 Mar 2008 14:52:43 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   07-Mar-2008 14:52:42
  Branch: HEAD                             Handle: 2008030713524100

  Modified files:
    ossp-pkg/uuid           ChangeLog README uuid.pod uuid_cli.pod

  Log:
    Consistently annotate "RFC-XXXX" with "IETF" to clearly
    indicate from which standards body this comes from.

  Summary:
    Revision    Changes     Path
    1.158       +4  -0      ossp-pkg/uuid/ChangeLog
    1.47        +2  -2      ossp-pkg/uuid/README
    1.44        +15 -14     ossp-pkg/uuid/uuid.pod
    1.28        +3  -3      ossp-pkg/uuid/uuid_cli.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.157 -r1.158 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	7 Mar 2008 09:28:14 -0000	1.157
  +++ ossp-pkg/uuid/ChangeLog	7 Mar 2008 13:52:41 -0000	1.158
  @@ -13,6 +13,10 @@
   
     Changes between 1.6.1 and 1.6.2 (21-Feb-2008 to 06-Mar-2008)
   
  +   o Consistently annotate "RFC-XXXX" with "IETF" to clearly
  +     indicate from which standards body this comes from.
  +     [Ralf S. Engelschall]
  +
      o Resolve namespace conflicts of recently introduced time_xxx()
        functions by using a propoer "uuid_" prefix.
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.46 -r1.47 README
  --- ossp-pkg/uuid/README	21 Feb 2008 15:36:52 -0000	1.46
  +++ ossp-pkg/uuid/README	7 Mar 2008 13:52:41 -0000	1.47
  @@ -10,8 +10,8 @@
     ABSTRACT
   
     OSSP uuid is a ISO-C:1999 application programming interface (API)
  -  and corresponding command line interface (CLI) for the generation
  -  of DCE 1.1, ISO/IEC 11578:1996 and RFC 4122 compliant Universally
  +  and corresponding command line interface (CLI) for the generation of
  +  DCE 1.1, ISO/IEC 11578:1996 and IETF RFC-4122 compliant Universally
     Unique Identifier (UUID). It supports DCE 1.1 variant UUIDs of version
     1 (time and node based), version 3 (name based, MD5), version 4
     (random number based) and version 5 (name based, SHA-1). Additional
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  $ cvs diff -u -r1.43 -r1.44 uuid.pod
  --- ossp-pkg/uuid/uuid.pod	10 Jan 2008 14:18:47 -0000	1.43
  +++ ossp-pkg/uuid/uuid.pod	7 Mar 2008 13:52:41 -0000	1.44
  @@ -39,9 +39,9 @@
   
   =head1 DESCRIPTION
   
  -B<OSSP uuid> is a ISO-C:1999 application programming interface (API)
  -and corresponding command line interface (CLI) for the generation of
  -DCE 1.1, ISO/IEC 11578:1996 and RFC 4122 compliant I<Universally Unique
  +B<OSSP uuid> is a ISO-C:1999 application programming interface (API) and
  +corresponding command line interface (CLI) for the generation of DCE
  +1.1, ISO/IEC 11578:1996 and IETF RFC-4122 compliant I<Universally Unique
   Identifier> (UUID). It supports DCE 1.1 variant UUIDs of version 1 (time
   and node based), version 3 (name based, MD5), version 4 (random number
   based) and version 5 (name based, SHA-1). Additional API bindings are
  @@ -61,9 +61,10 @@
   
   =head2 UUID Binary Representation
   
  -According to the DCE 1.1, ISO/IEC 11578:1996 and RFC 4122 standards, a
  -DCE 1.1 variant UUID is a 128 bit number defined out of 7 fields, each
  -field a multiple of an octet in size and stored in network byte order:
  +According to the DCE 1.1, ISO/IEC 11578:1996 and IETF RFC-4122
  +standards, a DCE 1.1 variant UUID is a 128 bit number defined out of 7
  +fields, each field a multiple of an octet in size and stored in network
  +byte order:
   
                                                       [4]
                                                      version
  @@ -109,12 +110,12 @@
   
   =head2 UUID ASCII String Representation
   
  -According to the DCE 1.1, ISO/IEC 11578:1996 and RFC 4122 standards,
  -a DCE 1.1 variant UUID is represented as an ASCII string consisting
  -of 8 hexadecimal digits followed by a hyphen, then three groups of
  -4 hexadecimal digits each followed by a hyphen, then 12 hexadecimal
  -digits. Formally, the string representation is defined by the following
  -grammar:
  +According to the DCE 1.1, ISO/IEC 11578:1996 and IETF RFC-4122
  +standards, a DCE 1.1 variant UUID is represented as an ASCII string
  +consisting of 8 hexadecimal digits followed by a hyphen, then three
  +groups of 4 hexadecimal digits each followed by a hyphen, then 12
  +hexadecimal digits. Formally, the string representation is defined by
  +the following grammar:
   
    uuid                        = <time_low> "-"
                                  <time_mid> "-"
  @@ -464,7 +465,7 @@
   
   B<A Universally Unique IDentifier (UUID) URN Namespace>,
   P. Leach, M. Mealling, R. Salz,
  -IETF RFC 4122,
  +IETF RFC-4122,
   July 2005, 32 pages,
   http://www.ietf.org/rfc/rfc4122.txt
   
  @@ -500,7 +501,7 @@
   
   B<HTTP Extensions for Distributed Authoring (WebDAV)>,
   section B<6.4.1 Node Field Generation Without the IEEE 802 Address>,
  -IETF Request for Comments: RFC 2518,
  +IETF RFC-2518,
   February 1999, 94 pages,
   http://www.ietf.org/rfc/rfc2518.txt
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.pod
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 uuid_cli.pod
  --- ossp-pkg/uuid/uuid_cli.pod	10 Jan 2008 14:18:47 -0000	1.27
  +++ ossp-pkg/uuid/uuid_cli.pod	7 Mar 2008 13:52:41 -0000	1.28
  @@ -56,9 +56,9 @@
   
   =head1 DESCRIPTION
   
  -B<OSSP uuid> is a ISO-C:1999 application programming interface (API)
  -and corresponding command line interface (CLI) for the generation of
  -DCE 1.1, ISO/IEC 11578:1996 and RFC 4122 compliant I<Universally Unique
  +B<OSSP uuid> is a ISO-C:1999 application programming interface (API) and
  +corresponding command line interface (CLI) for the generation of DCE
  +1.1, ISO/IEC 11578:1996 and IETF RFC-4122 compliant I<Universally Unique
   Identifier> (UUID). It supports DCE 1.1 variant UUIDs of version 1 (time
   and node based), version 3 (name based, MD5), version 4 (random number
   based) and version 5 (name based, SHA-1). Additional API bindings are
  @@ .

From ossp-cvs-owner@ossp.org  Sat Mar  8 19:41:20 2008
Received: by mail.ossp.org (Postfix, from userid 24001)
	id E2B867529F2; Sat,  8 Mar 2008 19:41:19 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ USERS
Message-Id: <20080308184119.E2B867529F2@mail.ossp.org>
Date: Sat,  8 Mar 2008 19:41:19 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   08-Mar-2008 19:41:19
  Branch: HEAD                             Handle: 2008030818411900

  Modified files:
    ossp-pkg/uuid           USERS

  Log:
    PostgreSQL 8.3 now uses OSSP uuid optionally

  Summary:
    Revision    Changes     Path
    1.6         +4  -0      ossp-pkg/uuid/USERS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/USERS
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 USERS
  --- ossp-pkg/uuid/USERS	31 Jul 2006 11:33:00 -0000	1.5
  +++ ossp-pkg/uuid/USERS	8 Mar 2008 18:41:19 -0000	1.6
  @@ -11,6 +11,10 @@
     OSSP uuid is known to be used by at least the following
     Open Source software packages:
   
  +  o PostgreSQL
  +    Relational Database Management System (RDBMS)
  +    http://www.postgresql.org/
  +
     o Aegis
       Software Configuration Management (SCM) System
       http://aegis.sourceforge.net/
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr  2 22:12:06 2008
Received: by mail.ossp.org (Postfix, from userid 24001)
	id B5B5B75304A; Wed,  2 Apr 2008 22:12:05 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog devtool devtool.conf devtool.fu...
Message-Id: <20080402201205.B5B5B75304A@mail.ossp.org>
Date: Wed,  2 Apr 2008 22:12:05 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Apr-2008 22:12:05
  Branch: HEAD                             Handle: 2008040221120400

  Modified files:
    ossp-pkg/shtool         ChangeLog devtool devtool.conf devtool.func
                            sh.mkln sh.platform sh.subst sh.version

  Log:
    remove trailing spaces

  Summary:
    Revision    Changes     Path
    1.238       +1  -1      ossp-pkg/shtool/ChangeLog
    1.2         +1  -1      ossp-pkg/shtool/devtool
    1.9         +1  -1      ossp-pkg/shtool/devtool.conf
    1.9         +1  -1      ossp-pkg/shtool/devtool.func
    1.23        +3  -3      ossp-pkg/shtool/sh.mkln
    1.29        +1  -1      ossp-pkg/shtool/sh.platform
    1.19        +1  -1      ossp-pkg/shtool/sh.subst
    1.44        +1  -1      ossp-pkg/shtool/sh.version
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.237 -r1.238 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	30 Jan 2008 16:23:07 -0000	1.237
  +++ ossp-pkg/shtool/ChangeLog	2 Apr 2008 20:12:04 -0000	1.238
  @@ -89,7 +89,7 @@
         "ls" changes its time format in response to the TIME_STYLE variable.
         [James Rowe <jnrowe@ukfsn.org>]
   
  -   *) Use "env -i sort" for Linux detections in "shtool platform" 
  +   *) Use "env -i sort" for Linux detections in "shtool platform"
         to circumvent LC_COLLATE and LANG environment problems.
         [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/devtool
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 devtool
  --- ossp-pkg/shtool/devtool	1 Feb 2002 14:58:04 -0000	1.1
  +++ ossp-pkg/shtool/devtool	2 Apr 2008 20:12:04 -0000	1.2
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  devtool -- Development Tool
  -##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   if [ $# -eq 0 ]; then
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 devtool.conf
  --- ossp-pkg/shtool/devtool.conf	19 May 2007 19:06:08 -0000	1.8
  +++ ossp-pkg/shtool/devtool.conf	2 Apr 2008 20:12:04 -0000	1.9
  @@ -14,7 +14,7 @@
   %version
       sh sh.version -l txt -n "GNU shtool" -e VERSION
       V=`sh sh.version -l txt -d long VERSION`
  -    sed -e "s/Version .*(.*)/Version $V/g" <README >README.n 
  +    sed -e "s/Version .*(.*)/Version $V/g" <README >README.n
       mv README.n README
       V=`sh sh.version -l txt -d short VERSION`
       sed -e "s/%define ver .*/%define ver $V/g" <shtool.spec >shtool.spec.n
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/devtool.func
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 devtool.func
  --- ossp-pkg/shtool/devtool.func	19 May 2007 19:09:39 -0000	1.8
  +++ ossp-pkg/shtool/devtool.func	2 Apr 2008 20:12:04 -0000	1.9
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2007 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2007 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   devtool_require () {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.mkln
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 sh.mkln
  --- ossp-pkg/shtool/sh.mkln	19 May 2007 19:09:39 -0000	1.22
  +++ ossp-pkg/shtool/sh.mkln	2 Apr 2008 20:12:04 -0000	1.23
  @@ -134,13 +134,13 @@
       allow_relative_srcpre=no
       if [ ".$prefix" != . ] && [ ".$prefix" != ./ ]; then
           allow_relative_srcpre=yes
  -    fi  
  +    fi
       if [ $oneisabs = 0 ]; then
           allow_relative_srcpre=yes
  -    fi  
  +    fi
       if [ ".$opt_s" != .yes ]; then
           allow_relative_srcpre=no
  -    fi  
  +    fi
       if [ ".$allow_relative_srcpre" = .yes ]; then
           pl="$dstdir/"
           OIFS="$IFS"; IFS='/'
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.platform
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 sh.platform
  --- ossp-pkg/shtool/sh.platform	30 Jan 2008 16:23:07 -0000	1.28
  +++ ossp-pkg/shtool/sh.platform	2 Apr 2008 20:12:04 -0000	1.29
  @@ -195,7 +195,7 @@
           r=`echo "${UNAME_RELEASE}" | sed -e 's/\([-_].*\)$/[\1]/'`
           ST="DragonFly ${r}"
           SP="${ST}"
  -        SC="4.4BSD"   
  +        SC="4.4BSD"
           ;;
   
       #   GNU/Linux
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.subst
  ============================================================================
  $ cvs diff -u -r1.18 -r1.19 sh.subst
  --- ossp-pkg/shtool/sh.subst	31 Aug 2007 13:15:12 -0000	1.18
  +++ ossp-pkg/shtool/sh.subst	2 Apr 2008 20:12:04 -0000	1.19
  @@ -146,7 +146,7 @@
               fi
           fi
   
  -        #   optionally check whether any content change actually occurred 
  +        #   optionally check whether any content change actually occurred
           if [ ".$opt_q" = .no ]; then
               if cmp $file$orig $file >/dev/null 2>&1; then
                   if [ ".$opt_w" = .yes ]; then
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.version
  ============================================================================
  $ cvs diff -u -r1.43 -r1.44 sh.version
  --- ossp-pkg/shtool/sh.version	19 May 2007 19:09:39 -0000	1.43
  +++ ossp-pkg/shtool/sh.version	2 Apr 2008 20:12:04 -0000	1.44
  @@ -368,7 +368,7 @@
   =item B<-l>, B<--language> I<lang>
   
   Choose format of version file I<file>. I<lang>="C<txt>", ANSI C
  -(I<lang>="c"), M4 (I<lang>="m4"), Perl (I<lang>="perl") or Python 
  +(I<lang>="c"), M4 (I<lang>="m4"), Perl (I<lang>="perl") or Python
   (I<lang>="python"). Default is C<txt>.
   
   =item B<-n>, B<--name> I<name>
  @@ .

From ossp-cvs-owner@ossp.org  Wed Apr  2 22:13:47 2008
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 30B1E753050; Wed,  2 Apr 2008 22:13:47 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog Makefile.in README configure.ac...
Message-Id: <20080402201347.30B1E753050@mail.ossp.org>
Date: Wed,  2 Apr 2008 22:13:47 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Apr-2008 22:13:47
  Branch: HEAD                             Handle: 2008040221134301

  Modified files:
    ossp-pkg/shtool         ChangeLog Makefile.in README configure.ac
                            devtool.func sh.arx sh.echo sh.fixperm sh.install
                            sh.mdate sh.mkdir sh.mkln sh.mkshadow sh.move
                            sh.path sh.platform sh.prop sh.rotate sh.scpp
                            sh.slo sh.subst sh.table sh.tarball sh.version
                            shtool.m4 shtool.pod shtool.spec shtoolize.in
                            shtoolize.pod test.db test.sh

  Log:
    adjust copyright for year 2008

  Summary:
    Revision    Changes     Path
    1.239       +3  -0      ossp-pkg/shtool/ChangeLog
    1.55        +1  -1      ossp-pkg/shtool/Makefile.in
    1.117       +1  -1      ossp-pkg/shtool/README
    1.9         +2  -2      ossp-pkg/shtool/configure.ac
    1.10        +1  -1      ossp-pkg/shtool/devtool.func
    1.26        +1  -1      ossp-pkg/shtool/sh.arx
    1.44        +1  -1      ossp-pkg/shtool/sh.echo
    1.22        +1  -1      ossp-pkg/shtool/sh.fixperm
    1.36        +1  -1      ossp-pkg/shtool/sh.install
    1.20        +1  -1      ossp-pkg/shtool/sh.mdate
    1.28        +1  -1      ossp-pkg/shtool/sh.mkdir
    1.24        +1  -1      ossp-pkg/shtool/sh.mkln
    1.28        +1  -1      ossp-pkg/shtool/sh.mkshadow
    1.24        +1  -1      ossp-pkg/shtool/sh.move
    1.31        +1  -1      ossp-pkg/shtool/sh.path
    1.30        +1  -1      ossp-pkg/shtool/sh.platform
    1.22        +1  -1      ossp-pkg/shtool/sh.prop
    1.14        +1  -1      ossp-pkg/shtool/sh.rotate
    1.30        +1  -1      ossp-pkg/shtool/sh.scpp
    1.28        +1  -1      ossp-pkg/shtool/sh.slo
    1.20        +1  -1      ossp-pkg/shtool/sh.subst
    1.24        +1  -1      ossp-pkg/shtool/sh.table
    1.27        +1  -1      ossp-pkg/shtool/sh.tarball
    1.45        +1  -1      ossp-pkg/shtool/sh.version
    1.11        +1  -1      ossp-pkg/shtool/shtool.m4
    1.71        +1  -1      ossp-pkg/shtool/shtool.pod
    1.34        +1  -1      ossp-pkg/shtool/shtool.spec
    1.41        +3  -3      ossp-pkg/shtool/shtoolize.in
    1.16        +1  -1      ossp-pkg/shtool/shtoolize.pod
    1.26        +1  -1      ossp-pkg/shtool/test.db
    1.15        +1  -1      ossp-pkg/shtool/test.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.238 -r1.239 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	2 Apr 2008 20:12:04 -0000	1.238
  +++ ossp-pkg/shtool/ChangeLog	2 Apr 2008 20:13:43 -0000	1.239
  @@ -11,6 +11,9 @@
   
    Changes between 2.0.7 and 2.0.8 (19-May-2007 to xx-XXX-2007):
   
  +   *) Adjust copyright for year 2008.
  +      [Ralf S. Engelschall]
  +
      *) Detect Windows/Cygwin
         [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.54 -r1.55 Makefile.in
  --- ossp-pkg/shtool/Makefile.in	19 May 2007 19:09:39 -0000	1.54
  +++ ossp-pkg/shtool/Makefile.in	2 Apr 2008 20:13:43 -0000	1.55
  @@ -1,6 +1,6 @@
   ##
   ##  Makefile for GNU shtool
  -##  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2008 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/README
  ============================================================================
  $ cvs diff -u -r1.116 -r1.117 README
  --- ossp-pkg/shtool/README	19 May 2007 19:34:18 -0000	1.116
  +++ ossp-pkg/shtool/README	2 Apr 2008 20:13:43 -0000	1.117
  @@ -5,7 +5,7 @@
     |___/_| |_|\__\___/ \___/|_|
   
     GNU shtool -- The GNU Portable Shell Tool
  -  Copyright (c) 1994-2007 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 1994-2008 Ralf S. Engelschall <rse@engelschall.com>
   
     http://www.gnu.org/software/shtool/
     ftp://ftp.gnu.org/gnu/shtool/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/configure.ac
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 configure.ac
  --- ossp-pkg/shtool/configure.ac	19 May 2007 19:09:39 -0000	1.8
  +++ ossp-pkg/shtool/configure.ac	2 Apr 2008 20:13:43 -0000	1.9
  @@ -1,6 +1,6 @@
   dnl ##
   dnl ##  configure.ac -- Autoconf source for GNU shtool
  -dnl ##  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 1999-2008 Ralf S. Engelschall <rse@engelschall.com>
   dnl ##
   dnl ##  This file is part of shtool and free software; you can redistribute
   dnl ##  it and/or modify it under the terms of the GNU General Public
  @@ -24,7 +24,7 @@
   
   SHTOOL_VERSION_STR="`sh sh.version -l txt -d long VERSION`"
   sh sh.echo -e "Configuring %BGNU shtool%b (Portable Shell Tool), version %B${SHTOOL_VERSION_STR}%b"
  -echo "Copyright (c) 1994-2007 Ralf S. Engelschall <rse@engelschall.com>"
  +echo "Copyright (c) 1994-2008 Ralf S. Engelschall <rse@engelschall.com>"
   AC_SUBST(SHTOOL_VERSION_STR)
   
   AC_PREFIX_DEFAULT(/usr/local)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/devtool.func
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 devtool.func
  --- ossp-pkg/shtool/devtool.func	2 Apr 2008 20:12:04 -0000	1.9
  +++ ossp-pkg/shtool/devtool.func	2 Apr 2008 20:13:43 -0000	1.10
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2008 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   devtool_require () {
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.arx
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 sh.arx
  --- ossp-pkg/shtool/sh.arx	19 May 2007 19:09:39 -0000	1.25
  +++ ossp-pkg/shtool/sh.arx	2 Apr 2008 20:13:43 -0000	1.26
  @@ -1,6 +1,6 @@
   ##
   ##  arx -- Extended archive command
  -##  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2008 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.echo
  ============================================================================
  $ cvs diff -u -r1.43 -r1.44 sh.echo
  --- ossp-pkg/shtool/sh.echo	19 May 2007 19:09:39 -0000	1.43
  +++ ossp-pkg/shtool/sh.echo	2 Apr 2008 20:13:43 -0000	1.44
  @@ -1,6 +1,6 @@
   ##
   ##  echo -- Print string with optional construct expansion
  -##  Copyright (c) 1998-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2008 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.fixperm
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 sh.fixperm
  --- ossp-pkg/shtool/sh.fixperm	19 May 2007 19:09:39 -0000	1.21
  +++ ossp-pkg/shtool/sh.fixperm	2 Apr 2008 20:13:43 -0000	1.22
  @@ -1,6 +1,6 @@
   ##
   ##  fixperm -- Fix file permissions inside a source tree
  -##  Copyright (c) 1996-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1996-2008 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.install
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 sh.install
  --- ossp-pkg/shtool/sh.install	19 May 2007 19:09:39 -0000	1.35
  +++ ossp-pkg/shtool/sh.install	2 Apr 2008 20:13:43 -0000	1.36
  @@ -1,6 +1,6 @@
   ##
   ##  install -- Install a program, script or datafile
  -##  Copyright (c) 1997-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1997-2008 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.mdate
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 sh.mdate
  --- ossp-pkg/shtool/sh.mdate	19 May 2007 19:09:39 -0000	1.19
  +++ ossp-pkg/shtool/sh.mdate	2 Apr 2008 20:13:43 -0000	1.20
  @@ -1,7 +1,7 @@
   ##
   ##  mdate -- Pretty-print modification time of a file or dir
   ##  Copyright (c) 1995-1997 Free Software Foundation, Inc.
  -##  Copyright (c) 1998-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2008 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.mkdir
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 sh.mkdir
  --- ossp-pkg/shtool/sh.mkdir	19 May 2007 19:09:39 -0000	1.27
  +++ ossp-pkg/shtool/sh.mkdir	2 Apr 2008 20:13:43 -0000	1.28
  @@ -1,6 +1,6 @@
   ##
   ##  mkdir -- Make one or more directories
  -##  Copyright (c) 1996-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1996-2008 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.mkln
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 sh.mkln
  --- ossp-pkg/shtool/sh.mkln	2 Apr 2008 20:12:04 -0000	1.23
  +++ ossp-pkg/shtool/sh.mkln	2 Apr 2008 20:13:43 -0000	1.24
  @@ -1,6 +1,6 @@
   ##
   ##  mkln -- Make link with calculation of relative paths
  -##  Copyright (c) 1998-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2008 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.mkshadow
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 sh.mkshadow
  --- ossp-pkg/shtool/sh.mkshadow	19 May 2007 19:09:39 -0000	1.27
  +++ ossp-pkg/shtool/sh.mkshadow	2 Apr 2008 20:13:43 -0000	1.28
  @@ -1,6 +1,6 @@
   ##
   ##  mkshadow -- Make a shadow tree through symbolic links
  -##  Copyright (c) 1998-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2008 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.move
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 sh.move
  --- ossp-pkg/shtool/sh.move	19 May 2007 19:09:39 -0000	1.23
  +++ ossp-pkg/shtool/sh.move	2 Apr 2008 20:13:43 -0000	1.24
  @@ -1,6 +1,6 @@
   ##
   ##  move -- Move files with simultaneous substitution
  -##  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2008 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.path
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 sh.path
  --- ossp-pkg/shtool/sh.path	19 May 2007 19:09:39 -0000	1.30
  +++ ossp-pkg/shtool/sh.path	2 Apr 2008 20:13:44 -0000	1.31
  @@ -1,6 +1,6 @@
   ##
   ##  path -- Deal with program paths
  -##  Copyright (c) 1998-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2008 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.platform
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 sh.platform
  --- ossp-pkg/shtool/sh.platform	2 Apr 2008 20:12:04 -0000	1.29
  +++ ossp-pkg/shtool/sh.platform	2 Apr 2008 20:13:44 -0000	1.30
  @@ -1,6 +1,6 @@
   ##
   ##  platform -- Platform Identification Utility
  -##  Copyright (c) 2003-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2008 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.prop
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 sh.prop
  --- ossp-pkg/shtool/sh.prop	19 May 2007 19:09:39 -0000	1.21
  +++ ossp-pkg/shtool/sh.prop	2 Apr 2008 20:13:44 -0000	1.22
  @@ -1,6 +1,6 @@
   ##
   ##  prop -- Display progress with a running propeller
  -##  Copyright (c) 1998-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2008 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.rotate
  ============================================================================
  $ cvs diff -u -r1.13 -r1.14 sh.rotate
  --- ossp-pkg/shtool/sh.rotate	19 May 2007 19:09:39 -0000	1.13
  +++ ossp-pkg/shtool/sh.rotate	2 Apr 2008 20:13:44 -0000	1.14
  @@ -1,6 +1,6 @@
   ##
   ##  rotate -- Logfile rotation
  -##  Copyright (c) 2001-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2008 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.scpp
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 sh.scpp
  --- ossp-pkg/shtool/sh.scpp	19 May 2007 19:09:39 -0000	1.29
  +++ ossp-pkg/shtool/sh.scpp	2 Apr 2008 20:13:44 -0000	1.30
  @@ -1,6 +1,6 @@
   ##
   ##  scpp -- Sharing C Pre-Processor
  -##  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2008 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.slo
  ============================================================================
  $ cvs diff -u -r1.27 -r1.28 sh.slo
  --- ossp-pkg/shtool/sh.slo	19 May 2007 19:09:39 -0000	1.27
  +++ ossp-pkg/shtool/sh.slo	2 Apr 2008 20:13:44 -0000	1.28
  @@ -1,6 +1,6 @@
   ##
   ##  slo -- Separate linker options by library class
  -##  Copyright (c) 1998-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2008 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.subst
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 sh.subst
  --- ossp-pkg/shtool/sh.subst	2 Apr 2008 20:12:04 -0000	1.19
  +++ ossp-pkg/shtool/sh.subst	2 Apr 2008 20:13:44 -0000	1.20
  @@ -1,6 +1,6 @@
   ##
   ##  subst -- Apply sed(1) substitution operations
  -##  Copyright (c) 2001-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2001-2008 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.table
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 sh.table
  --- ossp-pkg/shtool/sh.table	19 May 2007 19:09:39 -0000	1.23
  +++ ossp-pkg/shtool/sh.table	2 Apr 2008 20:13:44 -0000	1.24
  @@ -1,6 +1,6 @@
   ##
   ##  table -- Pretty-print a field-separated list as a table
  -##  Copyright (c) 1998-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1998-2008 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.tarball
  ============================================================================
  $ cvs diff -u -r1.26 -r1.27 sh.tarball
  --- ossp-pkg/shtool/sh.tarball	19 May 2007 19:09:39 -0000	1.26
  +++ ossp-pkg/shtool/sh.tarball	2 Apr 2008 20:13:44 -0000	1.27
  @@ -1,6 +1,6 @@
   ##
   ##  tarball -- Roll distribution tarballs
  -##  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2008 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.version
  ============================================================================
  $ cvs diff -u -r1.44 -r1.45 sh.version
  --- ossp-pkg/shtool/sh.version	2 Apr 2008 20:12:04 -0000	1.44
  +++ ossp-pkg/shtool/sh.version	2 Apr 2008 20:13:44 -0000	1.45
  @@ -1,6 +1,6 @@
   ##
   ##  version -- Maintain a version information file
  -##  Copyright (c) 1994-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1994-2008 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtool.m4
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 shtool.m4
  --- ossp-pkg/shtool/shtool.m4	19 May 2007 19:09:39 -0000	1.10
  +++ ossp-pkg/shtool/shtool.m4	2 Apr 2008 20:13:44 -0000	1.11
  @@ -1,6 +1,6 @@
   ##
   ##  shtool.m4 -- GNU shtool Autoconf macros
  -##  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2008 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtool.pod
  ============================================================================
  $ cvs diff -u -r1.70 -r1.71 shtool.pod
  --- ossp-pkg/shtool/shtool.pod	19 May 2007 19:09:39 -0000	1.70
  +++ ossp-pkg/shtool/shtool.pod	2 Apr 2008 20:13:44 -0000	1.71
  @@ -1,6 +1,6 @@
   ##
   ##  shtool.pod -- Manual Page for shtool in POD format
  -##  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2008 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtool.spec
  ============================================================================
  $ cvs diff -u -r1.33 -r1.34 shtool.spec
  --- ossp-pkg/shtool/shtool.spec	19 May 2007 19:34:18 -0000	1.33
  +++ ossp-pkg/shtool/shtool.spec	2 Apr 2008 20:13:44 -0000	1.34
  @@ -1,6 +1,6 @@
   ##
   ##  shtool.spec -- RPM specification for shtool package
  -##  Copyright (c) 2000-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2000-2008 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtoolize.in
  ============================================================================
  $ cvs diff -u -r1.40 -r1.41 shtoolize.in
  --- ossp-pkg/shtool/shtoolize.in	19 May 2007 19:09:39 -0000	1.40
  +++ ossp-pkg/shtool/shtoolize.in	2 Apr 2008 20:13:44 -0000	1.41
  @@ -1,7 +1,7 @@
   #!@PERL@
   ##
   ##  shtoolize -- Build shtool script out of ingredient scripts
  -##  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2008 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ -351,7 +351,7 @@
   #!/bin/sh
   ##
   ##  GNU shtool -- The GNU Portable Shell Tool
  -##  Copyright (c) 1994-2007 Ralf S. Engelschall <rse\@engelschall.com>
  +##  Copyright (c) 1994-2008 Ralf S. Engelschall <rse\@engelschall.com>
   ##
   ##  See http://www.gnu.org/software/shtool/ for more information.
   ##  See ftp://ftp.gnu.org/gnu/shtool/ for latest version.
  @@ -422,7 +422,7 @@
   fi
   if [ ".\$1" = ".-h" ] || [ ".\$1" = ".--help" ]; then
       echo "This is GNU shtool, version ${version}"
  -    echo 'Copyright (c) 1994-2007 Ralf S. Engelschall <rse\@engelschall.com>'
  +    echo 'Copyright (c) 1994-2008 Ralf S. Engelschall <rse\@engelschall.com>'
       echo 'Report bugs to <bug-shtool\@gnu.org>'
       echo ''
       echo 'Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]'
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtoolize.pod
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 shtoolize.pod
  --- ossp-pkg/shtool/shtoolize.pod	19 May 2007 19:09:39 -0000	1.15
  +++ ossp-pkg/shtool/shtoolize.pod	2 Apr 2008 20:13:44 -0000	1.16
  @@ -1,6 +1,6 @@
   ##
   ##  shtoolize.pod -- Manual Page for shtoolize in POD format
  -##  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2008 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/test.db
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 test.db
  --- ossp-pkg/shtool/test.db	19 May 2007 19:09:39 -0000	1.25
  +++ ossp-pkg/shtool/test.db	2 Apr 2008 20:13:44 -0000	1.26
  @@ -1,6 +1,6 @@
   ##
   ##  test.db -- GNU shtool test suite (minimalistic)
  -##  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2008 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   @begin{echo}
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/test.sh
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 test.sh
  --- ossp-pkg/shtool/test.sh	19 May 2007 19:09:39 -0000	1.14
  +++ ossp-pkg/shtool/test.sh	2 Apr 2008 20:13:44 -0000	1.15
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  test.sh -- GNU shtool test suite driver
  -##  Copyright (c) 1999-2007 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 1999-2008 Ralf S. Engelschall <rse@engelschall.com>
   ##
   ##  This file is part of shtool and free software; you can redistribute
   ##  it and/or modify it under the terms of the GNU General Public
  @@ .

From ossp-cvs-owner@ossp.org  Wed Jun  4 19:27:28 2008
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 2FF92753050; Wed,  4 Jun 2008 19:27:28 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog uuid_prng.c
Message-Id: <20080604172728.2FF92753050@mail.ossp.org>
Date: Wed,  4 Jun 2008 19:27:28 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Jun-2008 19:27:27
  Branch: HEAD                             Handle: 2008060418272700

  Modified files:
    ossp-pkg/uuid           ChangeLog uuid_prng.c

  Log:
    Improve PRNG under Win32

  Summary:
    Revision    Changes     Path
    1.159       +3  -0      ossp-pkg/uuid/ChangeLog
    1.20        +14 -0      ossp-pkg/uuid/uuid_prng.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.158 -r1.159 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	7 Mar 2008 13:52:41 -0000	1.158
  +++ ossp-pkg/uuid/ChangeLog	4 Jun 2008 17:27:27 -0000	1.159
  @@ -13,6 +13,9 @@
   
     Changes between 1.6.1 and 1.6.2 (21-Feb-2008 to 06-Mar-2008)
   
  +   o Improve PRNG under Win32.
  +     [Hiroshi Saito]
  +
      o Consistently annotate "RFC-XXXX" with "IETF" to clearly
        indicate from which standards body this comes from.
        [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_prng.c
  ============================================================================
  $ cvs diff -u -r1.19 -r1.20 uuid_prng.c
  --- ossp-pkg/uuid/uuid_prng.c	6 Mar 2008 12:14:49 -0000	1.19
  +++ ossp-pkg/uuid/uuid_prng.c	4 Jun 2008 17:27:27 -0000	1.20
  @@ -37,6 +37,11 @@
   #include <time.h>
   #include <sys/time.h>
   #include <fcntl.h>
  +#if defined(WIN32)
  +#define WINVER 0x0500
  +#include <windows.h>
  +#include <wincrypt.h>
  +#endif
   
   /* own headers (part 2/2) */
   #include "uuid_time.h"
  @@ -114,6 +119,9 @@
       size_t md5_len;
       int retries;
       int i;
  +#if defined(WIN32)
  +    HCRYPTPROV hProv;
  +#endif
   
       /* sanity check argument(s) */
       if (prng == NULL || data_len == 0)
  @@ -138,6 +146,12 @@
               p += (unsigned int)i;
           }
       }
  +#if defined(WIN32)
  +    else {
  +        if (CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0))
  +            CryptGenRandom(hProv, n, p);
  +    }
  +#endif
   
       /* approach 2: try to gather data via weaker libc PRNG API. */
       while (n > 0) {
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jun  6 14:15:12 2008
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 2E013752FE3; Fri,  6 Jun 2008 14:15:12 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog sh.mkln
Message-Id: <20080606121512.2E013752FE3@mail.ossp.org>
Date: Fri,  6 Jun 2008 14:15:12 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Jun-2008 14:15:12
  Branch: HEAD                             Handle: 2008060613151100

  Modified files:
    ossp-pkg/shtool         ChangeLog sh.mkln

  Log:
    Fix argument handling in "shtool mkln" command

  Summary:
    Revision    Changes     Path
    1.240       +3  -0      ossp-pkg/shtool/ChangeLog
    1.25        +1  -1      ossp-pkg/shtool/sh.mkln
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.239 -r1.240 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	2 Apr 2008 20:13:43 -0000	1.239
  +++ ossp-pkg/shtool/ChangeLog	6 Jun 2008 12:15:11 -0000	1.240
  @@ -11,6 +11,9 @@
   
    Changes between 2.0.7 and 2.0.8 (19-May-2007 to xx-XXX-2007):
   
  +   *) Fix argument handling in "shtool mkln" command.
  +      [Christoph Schug]
  +
      *) Adjust copyright for year 2008.
         [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.mkln
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 sh.mkln
  --- ossp-pkg/shtool/sh.mkln	2 Apr 2008 20:13:43 -0000	1.24
  +++ ossp-pkg/shtool/sh.mkln	6 Jun 2008 12:15:11 -0000	1.25
  @@ -30,7 +30,7 @@
   . ./sh.common
   
   #   determine source(s) and destination
  -args=$?
  +args=$#
   srcs=""
   while [ $# -gt 1 ]; do
       srcs="$srcs $1"
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jun  6 14:28:55 2008
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 8EEFE752FE3; Fri,  6 Jun 2008 14:28:55 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str/ ChangeLog str_parse.c
Message-Id: <20080606122855.8EEFE752FE3@mail.ossp.org>
Date: Fri,  6 Jun 2008 14:28:55 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Jun-2008 14:28:55
  Branch: HEAD                             Handle: 2008060613285400

  Modified files:
    ossp-pkg/str            ChangeLog str_parse.c

  Log:
    fix pattern lookup algorihtm

  Summary:
    Revision    Changes     Path
    1.57        +5  -0      ossp-pkg/str/ChangeLog
    1.23        +4  -3      ossp-pkg/str/str_parse.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.56 -r1.57 ChangeLog
  --- ossp-pkg/str/ChangeLog	12 Oct 2005 08:24:30 -0000	1.56
  +++ ossp-pkg/str/ChangeLog	6 Jun 2008 12:28:54 -0000	1.57
  @@ -9,6 +9,11 @@
   
    ChangeLog
   
  + Changes between 0.9.12 and 0.9.13 (12-Oct-2005 to xx-Jun-2008):
  +
  +   *) Fixed pattern lookup algorithm in str_parse().
  +      [Alexander Drozdov <dzal_mail@mtu-net.ru> 
  +   
    Changes between 0.9.11 and 0.9.12 (03-Oct-2005 to 12-Oct-2005):
   
      *) Fixed str_parse(3): the va_list argument was incorrectly used
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str_parse.c
  ============================================================================
  $ cvs diff -u -r1.22 -r1.23 str_parse.c
  --- ossp-pkg/str/str_parse.c	12 Oct 2005 08:24:30 -0000	1.22
  +++ ossp-pkg/str/str_parse.c	6 Jun 2008 12:28:54 -0000	1.23
  @@ -193,14 +193,15 @@
       *p_pcre_extra = NULL;
   
       h = hash_func(key, keylen);
  -    if ((he = pattern_hash[h]) == NULL)
  -        return;
  -    while (he->next != NULL) {
  +    he = pattern_hash[h];
  +    while (he != NULL) {
           if (he->keylen == keylen)
               if (memcmp(he->key, key, keylen))
                   break;
           he = he->next;
       }
  +    if (he == NULL)
  +        return;
       *p_pcre = he->p_pcre;
       *p_pcre_extra = he->p_pcre_extra;
       return;
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jun  6 14:29:23 2008
Received: by mail.ossp.org (Postfix, from userid 24001)
	id E0255752FE3; Fri,  6 Jun 2008 14:29:22 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str/ str_format.c
Message-Id: <20080606122922.E0255752FE3@mail.ossp.org>
Date: Fri,  6 Jun 2008 14:29:22 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Jun-2008 14:29:22
  Branch: HEAD                             Handle: 2008060613292000

  Modified files:
    ossp-pkg/str            str_format.c

  Log:
    use a static value for comparing against the null string

  Summary:
    Revision    Changes     Path
    1.32        +2  -1      ossp-pkg/str/str_format.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str_format.c
  ============================================================================
  $ cvs diff -u -r1.31 -r1.32 str_format.c
  --- ossp-pkg/str/str_format.c	3 Oct 2005 07:34:43 -0000	1.31
  +++ ossp-pkg/str/str_format.c	6 Jun 2008 12:29:20 -0000	1.32
  @@ -110,7 +110,8 @@
   #endif
   
   /* a few handy defines */
  -#define S_NULL          "(NULL)"
  +static char str_null[]  = "(NULL)";
  +#define S_NULL          str_null
   #define S_NULL_LEN      6
   #define FLOAT_DIGITS    6
   #define EXPONENT_LENGTH 10
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jun  6 14:29:55 2008
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 03D7A752FE3; Fri,  6 Jun 2008 14:29:55 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str/ ChangeLog
Message-Id: <20080606122955.03D7A752FE3@mail.ossp.org>
Date: Fri,  6 Jun 2008 14:29:55 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Jun-2008 14:29:54
  Branch: HEAD                             Handle: 2008060613295400

  Modified files:
    ossp-pkg/str            ChangeLog

  Log:
    remember change

  Summary:
    Revision    Changes     Path
    1.58        +4  -0      ossp-pkg/str/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.57 -r1.58 ChangeLog
  --- ossp-pkg/str/ChangeLog	6 Jun 2008 12:28:54 -0000	1.57
  +++ ossp-pkg/str/ChangeLog	6 Jun 2008 12:29:54 -0000	1.58
  @@ -11,6 +11,10 @@
   
    Changes between 0.9.12 and 0.9.13 (12-Oct-2005 to xx-Jun-2008):
   
  +   *) Use a static value for comparing against the null string
  +      in the str_format() function.
  +      [Ralf S. Engelschall]
  +
      *) Fixed pattern lookup algorithm in str_parse().
         [Alexander Drozdov <dzal_mail@mtu-net.ru> 
      
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jun  6 14:30:09 2008
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 87A36752FE3; Fri,  6 Jun 2008 14:30:09 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str/ THANKS
Message-Id: <20080606123009.87A36752FE3@mail.ossp.org>
Date: Fri,  6 Jun 2008 14:30:09 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Jun-2008 14:30:09
  Branch: HEAD                             Handle: 2008060613300900

  Modified files:
    ossp-pkg/str            THANKS

  Log:
    give credit

  Summary:
    Revision    Changes     Path
    1.12        +1  -0      ossp-pkg/str/THANKS
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/THANKS
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 THANKS
  --- ossp-pkg/str/THANKS	12 Oct 2005 08:24:30 -0000	1.11
  +++ ossp-pkg/str/THANKS	6 Jun 2008 12:30:09 -0000	1.12
  @@ -13,6 +13,7 @@
     stuff, bugfixes, hints etc. (in alphabetical order):
   
     o Vasil Dimov              <vd@datamax.bg>
  +  o Alexander Drozdov        <dzal_mail@mtu-net.ru> 
     o Brian T. Egleston        <brian@egleston.com>
     o Dean Gaudet              <dgaudet@arctic.org>
     o Ed Griffiths             <edgrif@sanger.ac.uk>
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jun  6 14:30:44 2008
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 8125B752FE3; Fri,  6 Jun 2008 14:30:44 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/str/ ChangeLog str.pod
Message-Id: <20080606123044.8125B752FE3@mail.ossp.org>
Date: Fri,  6 Jun 2008 14:30:44 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Jun-2008 14:30:44
  Branch: HEAD                             Handle: 2008060613303900

  Modified files:
    ossp-pkg/str            ChangeLog str.pod

  Log:
    fix syntax of example

  Summary:
    Revision    Changes     Path
    1.59        +3  -0      ossp-pkg/str/ChangeLog
    1.39        +1  -1      ossp-pkg/str/str.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.58 -r1.59 ChangeLog
  --- ossp-pkg/str/ChangeLog	6 Jun 2008 12:29:54 -0000	1.58
  +++ ossp-pkg/str/ChangeLog	6 Jun 2008 12:30:39 -0000	1.59
  @@ -11,6 +11,9 @@
   
    Changes between 0.9.12 and 0.9.13 (12-Oct-2005 to xx-Jun-2008):
   
  +   *) Fix syntax in example in str.pod
  +      [Ralf S. Engelschall]
  +
      *) Use a static value for comparing against the null string
         in the str_format() function.
         [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/str/str.pod
  ============================================================================
  $ cvs diff -u -r1.38 -r1.39 str.pod
  --- ossp-pkg/str/str.pod	21 Aug 2005 17:33:49 -0000	1.38
  +++ ossp-pkg/str/str.pod	6 Jun 2008 12:30:39 -0000	1.39
  @@ -686,7 +686,7 @@
   
   =item B<Tokenize a String>
   
  - char *var = " foo \t " bar 'baz'" q'uu'x #comment";
  + char *var = " foo \t \" bar 'baz'\" q'uu'x #comment";
    char *tok, *p;
    p = var;
    while ((tok = str_token(p, ":", "\"'", "#", 0)) != NULL) {
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul  4 23:45:58 2008
Received: by mail.ossp.org (Postfix, from userid 24001)
	id AB51175289F; Fri,  4 Jul 2008 23:45:57 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ ChangeLog devtool.conf devtool.func
Message-Id: <20080704214557.AB51175289F@mail.ossp.org>
Date: Fri,  4 Jul 2008 23:45:57 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Jul-2008 23:45:53
  Branch: HEAD                             Handle: 2008070422455000

  Modified files:
    ossp-pkg/uuid           ChangeLog devtool.conf devtool.func

  Log:
    upgrade to GNU libtool 2.2.4 and GNU autoconf 2.62

  Summary:
    Revision    Changes     Path
    1.160       +8  -2      ossp-pkg/uuid/ChangeLog
    1.38        +2  -2      ossp-pkg/uuid/devtool.conf
    1.5         +2  -2      ossp-pkg/uuid/devtool.func
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.159 -r1.160 ChangeLog
  --- ossp-pkg/uuid/ChangeLog	4 Jun 2008 17:27:27 -0000	1.159
  +++ ossp-pkg/uuid/ChangeLog	4 Jul 2008 21:45:50 -0000	1.160
  @@ -11,7 +11,10 @@
     This is a list of all changes to OSSP uuid.
     For a more brief summary please have a look at the NEWS file.
   
  -  Changes between 1.6.1 and 1.6.2 (21-Feb-2008 to 06-Mar-2008)
  +  Changes between 1.6.1 and 1.6.2 (21-Feb-2008 to 04-Jul-2008)
  +
  +   o Adjust "devtool.func" for latest GNU Libtool compatibility.
  +     [Ralf S. Engelschall]
   
      o Improve PRNG under Win32.
        [Hiroshi Saito]
  @@ -32,7 +35,10 @@
        gettimeofday(3) is not available.
        [Ralf S. Engelschall]
   
  -   o Upgrade build environment to GNU libtool 2.2.
  +   o Upgrade build environment to GNU autoconf 2.62.
  +     [Ralf S. Engelschall]
  +
  +   o Upgrade build environment to GNU libtool 2.2.4.
        [Ralf S. Engelschall]
   
     Changes between 1.6.0 and 1.6.1 (19-May-2007 to 21-Feb-2008)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 devtool.conf
  --- ossp-pkg/uuid/devtool.conf	6 Mar 2008 10:04:49 -0000	1.37
  +++ ossp-pkg/uuid/devtool.conf	4 Jul 2008 21:45:50 -0000	1.38
  @@ -4,8 +4,8 @@
   
   %autogen
       @autogen shtool   2.0.7  "2.0.*" all
  -    @autogen libtool  2.2    "2.2*"
  -    @autogen autoconf 2.61   "2.6[0-9]*"
  +    @autogen libtool  2.2.4  "2.2*"
  +    @autogen autoconf 2.62   "2.6[0-9]*"
   
   %autoclean
       @autoclean shtool
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/devtool.func
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 devtool.func
  --- ossp-pkg/uuid/devtool.func	6 Mar 2008 12:18:58 -0000	1.4
  +++ ossp-pkg/uuid/devtool.func	4 Jul 2008 21:45:50 -0000	1.5
  @@ -38,8 +38,8 @@
           libtool )
               libtoolize_version=`devtool_require libtoolize --version 4 "$1" "$2"`
               echo "generating (GNU Libtool $libtoolize_version): ltmain.sh, libtool.m4, config.guess, config.sub"
  -            libtoolize --force --copy --install >/dev/null 2>&1
  -            cat `libtoolize --force --copy --install --dry-run | sed -e '1,/add the contents of/d' |\
  +            cat `libtoolize --force --copy --install |\
  +                egrep "\\.m4'" | egrep -v "add the contents of" |\
                   sed -e 's;^[^\`]*\`;;' -e "s;'.*;;"` >libtool.m4
               rm -f install-sh
               ;;
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul  4 23:48:01 2008
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 9B4A87528AA; Fri,  4 Jul 2008 23:48:01 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ README ossp-pkg/uuid/perl/ uuid.pm uuid_com...
Message-Id: <20080704214801.9B4A87528AA@mail.ossp.org>
Date: Fri,  4 Jul 2008 23:48:01 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   04-Jul-2008 23:48:01
  Branch: HEAD                             Handle: 2008070422475902

  Modified files:
    ossp-pkg/uuid           README uuid_vers.h
    ossp-pkg/uuid/perl      uuid.pm uuid_compat.pm

  Log:
    bump version before release

  Summary:
    Revision    Changes     Path
    1.48        +1  -1      ossp-pkg/uuid/README
    1.24        +1  -1      ossp-pkg/uuid/perl/uuid.pm
    1.15        +1  -1      ossp-pkg/uuid/perl/uuid_compat.pm
    1.30        +9  -9      ossp-pkg/uuid/uuid_vers.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  $ cvs diff -u -r1.47 -r1.48 README
  --- ossp-pkg/uuid/README	7 Mar 2008 13:52:41 -0000	1.47
  +++ ossp-pkg/uuid/README	4 Jul 2008 21:47:59 -0000	1.48
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|      \__,_|\__,_|_|\__,_|
   
     OSSP uuid - Universally Unique Identifier
  -  Version 1.6.1 (21-Feb-2008)
  +  Version 1.6.2 (04-Jul-2008)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.pm
  ============================================================================
  $ cvs diff -u -r1.23 -r1.24 uuid.pm
  --- ossp-pkg/uuid/perl/uuid.pm	10 Jan 2008 14:18:49 -0000	1.23
  +++ ossp-pkg/uuid/perl/uuid.pm	4 Jul 2008 21:48:00 -0000	1.24
  @@ -118,7 +118,7 @@
   use Exporter;
   
   #   API version
  -our $VERSION = do { my @v = ('1.6.1' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
  +our $VERSION = do { my @v = ('1.6.2' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
   
   #   API inheritance
   our @ISA = qw(Exporter);
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid_compat.pm
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 uuid_compat.pm
  --- ossp-pkg/uuid/perl/uuid_compat.pm	10 Jan 2008 14:18:49 -0000	1.14
  +++ ossp-pkg/uuid/perl/uuid_compat.pm	4 Jul 2008 21:48:01 -0000	1.15
  @@ -42,7 +42,7 @@
   our @ISA     = qw(Exporter);
   our @EXPORT  = qw(NameSpace_DNS NameSpace_OID NameSpace_URL NameSpace_X500);
   
  -our $VERSION = do { my @v = ('1.6.1' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
  +our $VERSION = do { my @v = ('1.6.2' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
   
   sub new {
       my $class = shift;
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/uuid/uuid_vers.h
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 uuid_vers.h
  --- ossp-pkg/uuid/uuid_vers.h	21 Feb 2008 15:36:52 -0000	1.29
  +++ ossp-pkg/uuid/uuid_vers.h	4 Jul 2008 21:47:59 -0000	1.30
  @@ -8,7 +8,7 @@
   #ifndef _UUID_VERS_H_
   #define _UUID_VERS_H_
   
  -#define _UUID_VERSION 0x106201
  +#define _UUID_VERSION 0x106202
   
   typedef struct {
       const int   v_hex;
  @@ -32,14 +32,14 @@
   #undef  _UUID_VERS_H_AS_HEADER_
   
   _uuid_version_t _uuid_version = {
  -    0x106201,
  -    "1.6.1",
  -    "1.6.1 (21-Feb-2008)",
  -    "This is OSSP uuid, Version 1.6.1 (21-Feb-2008)",
  -    "OSSP uuid 1.6.1 (21-Feb-2008)",
  -    "OSSP uuid/1.6.1",
  -    "@(#)OSSP uuid 1.6.1 (21-Feb-2008)",
  -    "$Id: OSSP uuid 1.6.1 (21-Feb-2008) $"
  +    0x106202,
  +    "1.6.2",
  +    "1.6.2 (04-Jul-2008)",
  +    "This is OSSP uuid, Version 1.6.2 (04-Jul-2008)",
  +    "OSSP uuid 1.6.2 (04-Jul-2008)",
  +    "OSSP uuid/1.6.2",
  +    "@(#)OSSP uuid 1.6.2 (04-Jul-2008)",
  +    "$Id: OSSP uuid 1.6.2 (04-Jul-2008) $"
   };
   
   #endif /* _UUID_VERS_H_AS_HEADER_ */
  @@ .

From ossp-cvs-owner@ossp.org  Sat Jul  5 14:58:25 2008
Received: by mail.ossp.org (Postfix, from userid 24001)
	id DF31775285D; Sat,  5 Jul 2008 14:58:24 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/uuid/ .cvsignore .flexelint.lnt AUTHORS BINDINGS ...
Message-Id: <20080705125824.DF31775285D@mail.ossp.org>
Date: Sat,  5 Jul 2008 14:58:24 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   05-Jul-2008 14:58:24
  Branch: HEAD                             Handle: 2008070513581212

  Removed files:
    ossp-pkg/uuid           .cvsignore .flexelint.lnt AUTHORS BINDINGS
                            ChangeLog HISTORY INSTALL MANIFEST Makefile.PL
                            Makefile.in NEWS OVERVIEW PORTING README SEEALSO
                            THANKS TODO USERS aclocal.m4 configure.ac devtool
                            devtool.conf devtool.func uuid++.cc uuid++.hh
                            uuid++.pod uuid-config.in uuid-config.pod uuid.ac
                            uuid.c uuid.h.in uuid.pc.in uuid.pod uuid_ac.h
                            uuid_bm.h uuid_cli.c uuid_cli.pod uuid_dce.c
                            uuid_dce.h uuid_mac.c uuid_mac.h uuid_md5.c
                            uuid_md5.h uuid_prng.c uuid_prng.h uuid_sha1.c
                            uuid_sha1.h uuid_str.c uuid_str.h uuid_time.c
                            uuid_time.h uuid_ui128.c uuid_ui128.h uuid_ui64.c
                            uuid_ui64.h uuid_vers.h
    ossp-pkg/uuid/perl      .cvsignore MANIFEST Makefile.PL uuid.pm uuid.pod
                            uuid.tm uuid.ts uuid.xs uuid_compat.pm
                            uuid_compat.pod uuid_compat.ts
    ossp-pkg/uuid/pgsql     .cvsignore Makefile uuid.c uuid.sql.in uuid.txt
    ossp-pkg/uuid/php       .cvsignore Makefile.local config.m4 package.xml
                            uuid.c uuid.php4 uuid.php5 uuid.ts

  Log:
    remove OSSP uuid from CVS -- it is now versioned controlled in a
    Monotone repository

  Summary:
    Revision    Changes     Path
    1.6         +0  -17     ossp-pkg/uuid/.cvsignore
    1.3         +0  -26     ossp-pkg/uuid/.flexelint.lnt
    1.3         +0  -15     ossp-pkg/uuid/AUTHORS
    1.2         +0  -35     ossp-pkg/uuid/BINDINGS
    1.161       +0  -624    ossp-pkg/uuid/ChangeLog
    1.4         +0  -358    ossp-pkg/uuid/HISTORY
    1.6         +0  -23     ossp-pkg/uuid/INSTALL
    1.3         +0  -83     ossp-pkg/uuid/MANIFEST
    1.4         +0  -67     ossp-pkg/uuid/Makefile.PL
    1.47        +0  -357    ossp-pkg/uuid/Makefile.in
    1.10        +0  -42     ossp-pkg/uuid/NEWS
    1.2         +0  -81     ossp-pkg/uuid/OVERVIEW
    1.3         +0  -33     ossp-pkg/uuid/PORTING
    1.49        +0  -62     ossp-pkg/uuid/README
    1.2         +0  -52     ossp-pkg/uuid/SEEALSO
    1.15        +0  -29     ossp-pkg/uuid/THANKS
    1.29        +0  -23     ossp-pkg/uuid/TODO
    1.7         +0  -49     ossp-pkg/uuid/USERS
    1.5         +0  -352    ossp-pkg/uuid/aclocal.m4
    1.15        +0  -57     ossp-pkg/uuid/configure.ac
    1.3         +0  -47     ossp-pkg/uuid/devtool
    1.39        +0  -110    ossp-pkg/uuid/devtool.conf
    1.6         +0  -74     ossp-pkg/uuid/devtool.func
    1.2         +0  -5      ossp-pkg/uuid/perl/.cvsignore
    1.4         +0  -10     ossp-pkg/uuid/perl/MANIFEST
    1.12        +0  -68     ossp-pkg/uuid/perl/Makefile.PL
    1.25        +0  -334    ossp-pkg/uuid/perl/uuid.pm
    1.13        +0  -207    ossp-pkg/uuid/perl/uuid.pod
    1.6         +0  -39     ossp-pkg/uuid/perl/uuid.tm
    1.7         +0  -171    ossp-pkg/uuid/perl/uuid.ts
    1.10        +0  -236    ossp-pkg/uuid/perl/uuid.xs
    1.16        +0  -176    ossp-pkg/uuid/perl/uuid_compat.pm
    1.5         +0  -55     ossp-pkg/uuid/perl/uuid_compat.pod
    1.4         +0  -55     ossp-pkg/uuid/perl/uuid_compat.ts
    1.2         +0  -5      ossp-pkg/uuid/pgsql/.cvsignore
    1.5         +0  -57     ossp-pkg/uuid/pgsql/Makefile
    1.10        +0  -436    ossp-pkg/uuid/pgsql/uuid.c
    1.10        +0  -244    ossp-pkg/uuid/pgsql/uuid.sql.in
    1.2         +0  -36     ossp-pkg/uuid/pgsql/uuid.txt
    1.4         +0  -24     ossp-pkg/uuid/php/.cvsignore
    1.7         +0  -71     ossp-pkg/uuid/php/Makefile.local
    1.5         +0  -48     ossp-pkg/uuid/php/config.m4
    1.2         +0  -35     ossp-pkg/uuid/php/package.xml
    1.11        +0  -531    ossp-pkg/uuid/php/uuid.c
    1.4         +0  -78     ossp-pkg/uuid/php/uuid.php4
    1.4         +0  -81     ossp-pkg/uuid/php/uuid.php5
    1.4         +0  -161    ossp-pkg/uuid/php/uuid.ts
    1.9         +0  -301    ossp-pkg/uuid/uuid++.cc
    1.7         +0  -98     ossp-pkg/uuid/uuid++.hh
    1.6         +0  -253    ossp-pkg/uuid/uuid++.pod
    1.9         +0  -145    ossp-pkg/uuid/uuid-config.in
    1.7         +0  -155    ossp-pkg/uuid/uuid-config.pod
    1.27        +0  -206    ossp-pkg/uuid/uuid.ac
    1.68        +0  -1217   ossp-pkg/uuid/uuid.c
    1.16        +0  -120    ossp-pkg/uuid/uuid.h.in
    1.5         +0  -42     ossp-pkg/uuid/uuid.pc.in
    1.45        +0  -529    ossp-pkg/uuid/uuid.pod
    1.9         +0  -109    ossp-pkg/uuid/uuid_ac.h
    1.9         +0  -80     ossp-pkg/uuid/uuid_bm.h
    1.27        +0  -283    ossp-pkg/uuid/uuid_cli.c
    1.29        +0  -201    ossp-pkg/uuid/uuid_cli.pod
    1.10        +0  -294    ossp-pkg/uuid/uuid_dce.c
    1.6         +0  -88     ossp-pkg/uuid/uuid_dce.h
    1.14        +0  -183    ossp-pkg/uuid/uuid_mac.c
    1.8         +0  -54     ossp-pkg/uuid/uuid_mac.h
    1.18        +0  -471    ossp-pkg/uuid/uuid_md5.c
    1.8         +0  -76     ossp-pkg/uuid/uuid_md5.h
    1.21        +0  -198    ossp-pkg/uuid/uuid_prng.c
    1.7         +0  -68     ossp-pkg/uuid/uuid_prng.h
    1.8         +0  -450    ossp-pkg/uuid/uuid_sha1.c
    1.6         +0  -77     ossp-pkg/uuid/uuid_sha1.h
    1.12        +0  -762    ossp-pkg/uuid/uuid_str.c
    1.6         +0  -63     ossp-pkg/uuid/uuid_str.h
    1.3         +0  -117    ossp-pkg/uuid/uuid_time.c
    1.6         +0  -83     ossp-pkg/uuid/uuid_time.h
    1.4         +0  -591    ossp-pkg/uuid/uuid_ui128.c
    1.2         +0  -114    ossp-pkg/uuid/uuid_ui128.h
    1.7         +0  -591    ossp-pkg/uuid/uuid_ui64.c
    1.3         +0  -113    ossp-pkg/uuid/uuid_ui64.h
    1.31        +0  -46     ossp-pkg/uuid/uuid_vers.h
  ____________________________________________________________________________

  rm -f ossp-pkg/uuid/.cvsignore <<'@@ .'
  Index: ossp-pkg/uuid/.cvsignore
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/.flexelint.lnt <<'@@ .'
  Index: ossp-pkg/uuid/.flexelint.lnt
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/AUTHORS <<'@@ .'
  Index: ossp-pkg/uuid/AUTHORS
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/BINDINGS <<'@@ .'
  Index: ossp-pkg/uuid/BINDINGS
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/ChangeLog <<'@@ .'
  Index: ossp-pkg/uuid/ChangeLog
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/HISTORY <<'@@ .'
  Index: ossp-pkg/uuid/HISTORY
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/INSTALL <<'@@ .'
  Index: ossp-pkg/uuid/INSTALL
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/MANIFEST <<'@@ .'
  Index: ossp-pkg/uuid/MANIFEST
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/Makefile.PL <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.PL
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/Makefile.in <<'@@ .'
  Index: ossp-pkg/uuid/Makefile.in
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/NEWS <<'@@ .'
  Index: ossp-pkg/uuid/NEWS
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/OVERVIEW <<'@@ .'
  Index: ossp-pkg/uuid/OVERVIEW
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/PORTING <<'@@ .'
  Index: ossp-pkg/uuid/PORTING
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/README <<'@@ .'
  Index: ossp-pkg/uuid/README
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/SEEALSO <<'@@ .'
  Index: ossp-pkg/uuid/SEEALSO
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/THANKS <<'@@ .'
  Index: ossp-pkg/uuid/THANKS
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/TODO <<'@@ .'
  Index: ossp-pkg/uuid/TODO
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/USERS <<'@@ .'
  Index: ossp-pkg/uuid/USERS
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/aclocal.m4 <<'@@ .'
  Index: ossp-pkg/uuid/aclocal.m4
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/configure.ac <<'@@ .'
  Index: ossp-pkg/uuid/configure.ac
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/devtool <<'@@ .'
  Index: ossp-pkg/uuid/devtool
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/devtool.conf <<'@@ .'
  Index: ossp-pkg/uuid/devtool.conf
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/devtool.func <<'@@ .'
  Index: ossp-pkg/uuid/devtool.func
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/perl/.cvsignore <<'@@ .'
  Index: ossp-pkg/uuid/perl/.cvsignore
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/perl/MANIFEST <<'@@ .'
  Index: ossp-pkg/uuid/perl/MANIFEST
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/perl/Makefile.PL <<'@@ .'
  Index: ossp-pkg/uuid/perl/Makefile.PL
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/perl/uuid.pm <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.pm
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/perl/uuid.pod <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.pod
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/perl/uuid.tm <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.tm
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/perl/uuid.ts <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.ts
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/perl/uuid.xs <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid.xs
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/perl/uuid_compat.pm <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid_compat.pm
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/perl/uuid_compat.pod <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid_compat.pod
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/perl/uuid_compat.ts <<'@@ .'
  Index: ossp-pkg/uuid/perl/uuid_compat.ts
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/pgsql/.cvsignore <<'@@ .'
  Index: ossp-pkg/uuid/pgsql/.cvsignore
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/pgsql/Makefile <<'@@ .'
  Index: ossp-pkg/uuid/pgsql/Makefile
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/pgsql/uuid.c <<'@@ .'
  Index: ossp-pkg/uuid/pgsql/uuid.c
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/pgsql/uuid.sql.in <<'@@ .'
  Index: ossp-pkg/uuid/pgsql/uuid.sql.in
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/pgsql/uuid.txt <<'@@ .'
  Index: ossp-pkg/uuid/pgsql/uuid.txt
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/php/.cvsignore <<'@@ .'
  Index: ossp-pkg/uuid/php/.cvsignore
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/php/Makefile.local <<'@@ .'
  Index: ossp-pkg/uuid/php/Makefile.local
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/php/config.m4 <<'@@ .'
  Index: ossp-pkg/uuid/php/config.m4
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/php/package.xml <<'@@ .'
  Index: ossp-pkg/uuid/php/package.xml
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/php/uuid.c <<'@@ .'
  Index: ossp-pkg/uuid/php/uuid.c
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/php/uuid.php4 <<'@@ .'
  Index: ossp-pkg/uuid/php/uuid.php4
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/php/uuid.php5 <<'@@ .'
  Index: ossp-pkg/uuid/php/uuid.php5
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/php/uuid.ts <<'@@ .'
  Index: ossp-pkg/uuid/php/uuid.ts
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/uuid++.cc <<'@@ .'
  Index: ossp-pkg/uuid/uuid++.cc
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/uuid++.hh <<'@@ .'
  Index: ossp-pkg/uuid/uuid++.hh
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/uuid++.pod <<'@@ .'
  Index: ossp-pkg/uuid/uuid++.pod
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/uuid-config.in <<'@@ .'
  Index: ossp-pkg/uuid/uuid-config.in
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/uuid-config.pod <<'@@ .'
  Index: ossp-pkg/uuid/uuid-config.pod
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/uuid.ac <<'@@ .'
  Index: ossp-pkg/uuid/uuid.ac
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/uuid.c <<'@@ .'
  Index: ossp-pkg/uuid/uuid.c
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/uuid.h.in <<'@@ .'
  Index: ossp-pkg/uuid/uuid.h.in
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/uuid.pc.in <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pc.in
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/uuid.pod <<'@@ .'
  Index: ossp-pkg/uuid/uuid.pod
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/uuid_ac.h <<'@@ .'
  Index: ossp-pkg/uuid/uuid_ac.h
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/uuid_bm.h <<'@@ .'
  Index: ossp-pkg/uuid/uuid_bm.h
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/uuid_cli.c <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.c
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/uuid_cli.pod <<'@@ .'
  Index: ossp-pkg/uuid/uuid_cli.pod
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/uuid_dce.c <<'@@ .'
  Index: ossp-pkg/uuid/uuid_dce.c
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/uuid_dce.h <<'@@ .'
  Index: ossp-pkg/uuid/uuid_dce.h
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/uuid_mac.c <<'@@ .'
  Index: ossp-pkg/uuid/uuid_mac.c
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/uuid_mac.h <<'@@ .'
  Index: ossp-pkg/uuid/uuid_mac.h
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/uuid_md5.c <<'@@ .'
  Index: ossp-pkg/uuid/uuid_md5.c
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/uuid_md5.h <<'@@ .'
  Index: ossp-pkg/uuid/uuid_md5.h
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/uuid_prng.c <<'@@ .'
  Index: ossp-pkg/uuid/uuid_prng.c
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/uuid_prng.h <<'@@ .'
  Index: ossp-pkg/uuid/uuid_prng.h
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/uuid_sha1.c <<'@@ .'
  Index: ossp-pkg/uuid/uuid_sha1.c
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/uuid_sha1.h <<'@@ .'
  Index: ossp-pkg/uuid/uuid_sha1.h
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/uuid_str.c <<'@@ .'
  Index: ossp-pkg/uuid/uuid_str.c
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/uuid_str.h <<'@@ .'
  Index: ossp-pkg/uuid/uuid_str.h
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/uuid_time.c <<'@@ .'
  Index: ossp-pkg/uuid/uuid_time.c
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/uuid_time.h <<'@@ .'
  Index: ossp-pkg/uuid/uuid_time.h
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/uuid_ui128.c <<'@@ .'
  Index: ossp-pkg/uuid/uuid_ui128.c
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/uuid_ui128.h <<'@@ .'
  Index: ossp-pkg/uuid/uuid_ui128.h
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/uuid_ui64.c <<'@@ .'
  Index: ossp-pkg/uuid/uuid_ui64.c
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/uuid_ui64.h <<'@@ .'
  Index: ossp-pkg/uuid/uuid_ui64.h
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  rm -f ossp-pkg/uuid/uuid_vers.h <<'@@ .'
  Index: ossp-pkg/uuid/uuid_vers.h
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .

From ossp-cvs-owner@ossp.org  Sun Jul  6 21:13:59 2008
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 620AE752887; Sun,  6 Jul 2008 21:13:59 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/string-divert/ ChangeLog Divert.pod
Message-Id: <20080706191359.620AE752887@mail.ossp.org>
Date: Sun,  6 Jul 2008 21:13:59 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   06-Jul-2008 21:13:59
  Branch: HEAD                             Handle: 2008070620135801

  Modified files:
    ossp-pkg/string-divert  ChangeLog Divert.pod

  Log:
    fix POD

  Summary:
    Revision    Changes     Path
    1.12        +2  -0      ossp-pkg/string-divert/ChangeLog
    1.11        +1  -1      ossp-pkg/string-divert/Divert.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 ChangeLog
  --- ossp-pkg/string-divert/ChangeLog	16 Nov 2005 12:51:13 -0000	1.11
  +++ ossp-pkg/string-divert/ChangeLog	6 Jul 2008 19:13:58 -0000	1.12
  @@ -2,6 +2,8 @@
     ChangeLog
     =========
   
  +  0.97 (06-Jul-2008)
  +      o fix POD
     0.96 (16-Nov-2005)
         o add folding loop detection to "string" method
         o use anonymous names already in "new" method
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/string-divert/Divert.pod
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 Divert.pod
  --- ossp-pkg/string-divert/Divert.pod	27 Sep 2007 09:05:24 -0000	1.10
  +++ ossp-pkg/string-divert/Divert.pod	6 Jul 2008 19:13:59 -0000	1.11
  @@ -427,7 +427,7 @@
   
   =head1 SEE ALSO
   
  -=over 0
  +=over 4
   
   =item B<m4>'s C<divert()> function.
   
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul 18 10:04:09 2008
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 3BF8A7528D0; Fri, 18 Jul 2008 10:04:09 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ devtool.conf
Message-Id: <20080718080409.3BF8A7528D0@mail.ossp.org>
Date: Fri, 18 Jul 2008 10:04:09 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Jul-2008 10:04:08
  Branch: HEAD                             Handle: 2008071809040800

  Modified files:
    ossp-pkg/shtool         devtool.conf

  Log:
    upgrade to GNU autoconf 2.62

  Summary:
    Revision    Changes     Path
    1.10        +1  -1      ossp-pkg/shtool/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 devtool.conf
  --- ossp-pkg/shtool/devtool.conf	2 Apr 2008 20:12:04 -0000	1.9
  +++ ossp-pkg/shtool/devtool.conf	18 Jul 2008 08:04:08 -0000	1.10
  @@ -3,7 +3,7 @@
   ##
   
   %autogen
  -    @autogen autoconf 2.61 "2.6*"
  +    @autogen autoconf 2.62 "2.6*"
   
   %autoclean
       @autoclean autoconf
  @@ .

From ossp-cvs-owner@ossp.org  Fri Jul 18 10:04:33 2008
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 7D65E7528D0; Fri, 18 Jul 2008 10:04:33 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog README VERSION shtool.spec
Message-Id: <20080718080433.7D65E7528D0@mail.ossp.org>
Date: Fri, 18 Jul 2008 10:04:33 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   18-Jul-2008 10:04:33
  Branch: HEAD                             Handle: 2008071809043200

  Modified files:
    ossp-pkg/shtool         ChangeLog README VERSION shtool.spec

  Log:
    prepare for release

  Summary:
    Revision    Changes     Path
    1.241       +4  -1      ossp-pkg/shtool/ChangeLog
    1.118       +1  -1      ossp-pkg/shtool/README
    1.89        +1  -1      ossp-pkg/shtool/VERSION
    1.35        +1  -1      ossp-pkg/shtool/shtool.spec
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.240 -r1.241 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	6 Jun 2008 12:15:11 -0000	1.240
  +++ ossp-pkg/shtool/ChangeLog	18 Jul 2008 08:04:32 -0000	1.241
  @@ -9,7 +9,10 @@
   
    ChangeLog
   
  - Changes between 2.0.7 and 2.0.8 (19-May-2007 to xx-XXX-2007):
  + Changes between 2.0.7 and 2.0.8 (19-May-2007 to 18-Jul-2008):
  +
  +   *) Upgrade build environment to GNU autoconf 2.62
  +      [Ralf S. Engelschall]
   
      *) Fix argument handling in "shtool mkln" command.
         [Christoph Schug]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/README
  ============================================================================
  $ cvs diff -u -r1.117 -r1.118 README
  --- ossp-pkg/shtool/README	2 Apr 2008 20:13:43 -0000	1.117
  +++ ossp-pkg/shtool/README	18 Jul 2008 08:04:32 -0000	1.118
  @@ -10,7 +10,7 @@
     http://www.gnu.org/software/shtool/
     ftp://ftp.gnu.org/gnu/shtool/
   
  -  Version 2.0.7 (19-May-2007)
  +  Version 2.0.8 (18-Jul-2008)
   
     The GNU shtool program is a compilation of small but very stable and
     portable shell scripts into a single shell tool. All ingredients
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/VERSION
  ============================================================================
  $ cvs diff -u -r1.88 -r1.89 VERSION
  --- ossp-pkg/shtool/VERSION	19 May 2007 19:34:18 -0000	1.88
  +++ ossp-pkg/shtool/VERSION	18 Jul 2008 08:04:32 -0000	1.89
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for GNU shtool (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is GNU shtool, Version 2.0.7 (19-May-2007)
  +  This is GNU shtool, Version 2.0.8 (18-Jul-2008)
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/shtool.spec
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 shtool.spec
  --- ossp-pkg/shtool/shtool.spec	2 Apr 2008 20:13:44 -0000	1.34
  +++ ossp-pkg/shtool/shtool.spec	18 Jul 2008 08:04:32 -0000	1.35
  @@ -30,7 +30,7 @@
   %define prefix /usr/local
   %endif
   
  -%define ver 2.0.7
  +%define ver 2.0.8
   %define rel 0
   
   Name:       shtool
  @@ .

From ossp-cvs-owner@ossp.org  Sat Aug  2 11:56:48 2008
Received: by mail.ossp.org (Postfix, from userid 24001)
	id BB351752906; Sat,  2 Aug 2008 11:56:48 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ jslint.js
Message-Id: <20080802095648.BB351752906@mail.ossp.org>
Date: Sat,  2 Aug 2008 11:56:48 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Aug-2008 11:56:48
  Branch: HEAD                             Handle: 2008080210564800

  Modified files:
    ossp-pkg/js             jslint.js

  Log:
    fix passing of options

  Summary:
    Revision    Changes     Path
    1.3         +1  -1      ossp-pkg/js/jslint.js
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/jslint.js
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 jslint.js
  --- ossp-pkg/js/jslint.js	8 Feb 2007 09:30:09 -0000	1.2
  +++ ossp-pkg/js/jslint.js	2 Aug 2008 09:56:48 -0000	1.3
  @@ -2567,7 +2567,7 @@
   var script = file.readAll();
   file.close();
   
  -if (!jslint(script, { passfail: true })) {
  +if (!jslint(script, options)) {
       var e = jslint.errors[0];
       print('jslint: line ' + (e.line + 1) + ' character ' + (e.character + 1) + ': ' + e.reason);
       print((e.evidence || ''). replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1"));
  @@ .

From ossp-cvs-owner@ossp.org  Sat Aug  2 11:57:50 2008
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 79B49752870; Sat,  2 Aug 2008 11:57:50 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/js/ ChangeLog
Message-Id: <20080802095750.79B49752870@mail.ossp.org>
Date: Sat,  2 Aug 2008 11:57:50 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   02-Aug-2008 11:57:50
  Branch: HEAD                             Handle: 2008080210575000

  Modified files:
    ossp-pkg/js             ChangeLog

  Log:
    remember bugfix

  Summary:
    Revision    Changes     Path
    1.39        +5  -0      ossp-pkg/js/ChangeLog
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/js/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.38 -r1.39 ChangeLog
  --- ossp-pkg/js/ChangeLog	12 Oct 2007 20:59:17 -0000	1.38
  +++ ossp-pkg/js/ChangeLog	2 Aug 2008 09:57:50 -0000	1.39
  @@ -11,6 +11,11 @@
   
     This is a list of all changes to OSSP js.
   
  +  Changes between 1.6.20070208 and 1.6.20080802 (2007-02-08 to 2008-08-02)
  +
  +   o Fix passing of command-line options in jslint(1) tool.
  +     [Ralf S. Engelschall <rse@engelschall.com>]
  +
     Changes between 1.6.20060820 and 1.6.20070208 (2006-08-20 to 2007-02-08)
   
      o Fix __VA_COPY_USE_{CSP,CPP} fallback macros for va_copy.
  @@ .

From ossp-cvs-owner@ossp.org  Sun Sep 21 17:01:19 2008
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 8D820752854; Sun, 21 Sep 2008 17:01:18 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog sh.rotate
Message-Id: <20080921150118.8D820752854@mail.ossp.org>
Date: Sun, 21 Sep 2008 17:01:18 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   21-Sep-2008 17:01:15
  Branch: HEAD                             Handle: 2008092116011500

  Modified files:
    ossp-pkg/shtool         ChangeLog sh.rotate

  Log:
    Provide SHTOOL_ROTATE_LOGFILE environment variable
    to "shtool rotate" prolog/epilog commands.
    
    Submitted by: Bill Campbell <bill@celestial.com>

  Summary:
    Revision    Changes     Path
    1.242       +6  -0      ossp-pkg/shtool/ChangeLog
    1.15        +10 -0      ossp-pkg/shtool/sh.rotate
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.241 -r1.242 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	18 Jul 2008 08:04:32 -0000	1.241
  +++ ossp-pkg/shtool/ChangeLog	21 Sep 2008 15:01:15 -0000	1.242
  @@ -9,6 +9,12 @@
   
    ChangeLog
   
  + Changes between 2.0.8 and 2.0.9 (18-Jul-2008 to xx-XXX-2008):
  +
  +   *) Provide SHTOOL_ROTATE_LOGFILE environment variable
  +      to "shtool rotate" prolog/epilog commands.
  +      [Bill Campbell <bill@celestial.com>]
  +
    Changes between 2.0.7 and 2.0.8 (19-May-2007 to 18-Jul-2008):
   
      *) Upgrade build environment to GNU autoconf 2.62
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.rotate
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 sh.rotate
  --- ossp-pkg/shtool/sh.rotate	2 Apr 2008 20:13:44 -0000	1.14
  +++ ossp-pkg/shtool/sh.rotate	21 Sep 2008 15:01:15 -0000	1.15
  @@ -202,6 +202,11 @@
   
       #   execute prolog
       if [ ".$opt_P" != . ]; then
  +        #   pass current log file name to prolog
  +        #   prolog cannot be handed an argument as it may be
  +        #   called as "prolog && something"  
  +        SHTOOL_ROTATE_LOGFILE="$ldir/$file"
  +        export SHTOOL_ROTATE_LOGFILE
           if [ ".$opt_t" = .yes ]; then
               echo "$opt_P"
           fi
  @@ -391,6 +396,11 @@
   
       #   execute epilog
       if [ ".$opt_E" != . ]; then
  +        #   pass archive file name to epilog command
  +        #   epilog cannot be handed an argument as it is often
  +        #   called as "epilog && something"
  +        SHTOOL_ROTATE_LOGFILE="${adir}/${file}.${n}"
  +        export SHTOOL_ROTATE_LOGFILE
           if [ ".$opt_t" = .yes ]; then
               echo "$opt_E"
           fi
  @@ .

From ossp-cvs-owner@ossp.org  Mon Sep 22 15:03:50 2008
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 39A4875280C; Mon, 22 Sep 2008 15:03:50 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ sh.rotate
Message-Id: <20080922130350.39A4875280C@mail.ossp.org>
Date: Mon, 22 Sep 2008 15:03:50 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   22-Sep-2008 15:03:49
  Branch: HEAD                             Handle: 2008092214034800

  Modified files:
    ossp-pkg/shtool         sh.rotate

  Log:
    remove number extension and document environment variables

  Summary:
    Revision    Changes     Path
    1.16        +8  -5      ossp-pkg/shtool/sh.rotate
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.rotate
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 sh.rotate
  --- ossp-pkg/shtool/sh.rotate	21 Sep 2008 15:01:15 -0000	1.15
  +++ ossp-pkg/shtool/sh.rotate	22 Sep 2008 13:03:48 -0000	1.16
  @@ -399,7 +399,7 @@
           #   pass archive file name to epilog command
           #   epilog cannot be handed an argument as it is often
           #   called as "epilog && something"
  -        SHTOOL_ROTATE_LOGFILE="${adir}/${file}.${n}"
  +        SHTOOL_ROTATE_LOGFILE="${adir}/${file}"
           export SHTOOL_ROTATE_LOGFILE
           if [ ".$opt_t" = .yes ]; then
               echo "$opt_E"
  @@ -568,13 +568,16 @@
   
   =item B<-P>, B<--prolog> I<cmd>
   
  -Execute a "prolog" command before the rotation step. Useful in
  -conjunction with B<-s>.
  +Execute a "prolog" command before the rotation step.
  +Useful in conjunction with B<-s>. The environment variable
  +C<SHTOOL_ROTATE_LOGFILE> points to the path of the original logfile.
   
   =item B<-E>, B<--epilog> I<cmd>
   
  -Execute a "epilog" command after the rotation step. Useful in
  -conjunction with B<-s>.
  +Execute a "epilog" command after the rotation step. Useful
  +in conjunction with B<-s>. The environment variable
  +C<SHTOOL_ROTATE_LOGFILE> points to the path of the archived logfile
  +(without any number extension).
   
   =back
   
  @@ .

From ossp-cvs-owner@ossp.org  Tue Dec 23 20:12:06 2008
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 4841075287E; Tue, 23 Dec 2008 20:12:06 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog sh.mkln
Message-Id: <20081223191206.4841075287E@mail.ossp.org>
Date: Tue, 23 Dec 2008 20:12:06 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Dec-2008 20:12:06
  Branch: HEAD                             Handle: 2008122319120500

  Modified files:
    ossp-pkg/shtool         ChangeLog sh.mkln

  Log:
    Fix "mkln -s /foo /foo/bar" (achieving a "bar -> ." symlink)

  Summary:
    Revision    Changes     Path
    1.243       +3  -0      ossp-pkg/shtool/ChangeLog
    1.26        +9  -4      ossp-pkg/shtool/sh.mkln
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.242 -r1.243 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	21 Sep 2008 15:01:15 -0000	1.242
  +++ ossp-pkg/shtool/ChangeLog	23 Dec 2008 19:12:05 -0000	1.243
  @@ -11,6 +11,9 @@
   
    Changes between 2.0.8 and 2.0.9 (18-Jul-2008 to xx-XXX-2008):
   
  +   *) Fix "mkln -s /foo /foo/bar" (achieving a "bar -> ." symlink)
  +      [Ralf S. Engelschall]
  +
      *) Provide SHTOOL_ROTATE_LOGFILE environment variable
         to "shtool rotate" prolog/epilog commands.
         [Bill Campbell <bill@celestial.com>]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.mkln
  ============================================================================
  $ cvs diff -u -r1.25 -r1.26 sh.mkln
  --- ossp-pkg/shtool/sh.mkln	6 Jun 2008 12:15:11 -0000	1.25
  +++ ossp-pkg/shtool/sh.mkln	23 Dec 2008 19:12:05 -0000	1.26
  @@ -114,14 +114,14 @@
           dstdir=""
       else
           while [ ".$srcdir" != . ] && [ ".$dstdir" != . ]; do
  -            presrc=`echo $srcdir | sed -e 's;^\([^/]*\)/.*;\1;'`
  -            predst=`echo $dstdir | sed -e 's;^\([^/]*\)/.*;\1;'`
  +            presrc=`echo $srcdir | sed -e 's;^\([^/][^/]*\)/.*;\1;'`
  +            predst=`echo $dstdir | sed -e 's;^\([^/][^/]*\)/.*;\1;'`
               if [ ".$presrc" != ".$predst" ]; then
                   break
               fi
               prefix="$prefix$presrc/"
  -            srcdir=`echo $srcdir | sed -e 's;^[^/]*/*;;'`
  -            dstdir=`echo $dstdir | sed -e 's;^[^/]*/*;;'`
  +            srcdir=`echo $srcdir | sed -e 's;^[^/][^/]*/*;;'`
  +            dstdir=`echo $dstdir | sed -e 's;^[^/][^/]*/*;;'`
           done
       fi
   
  @@ -165,6 +165,11 @@
           fi
       fi
   
  +    #   special case (usually on "mkln -s /foo /foo/bar", etc)
  +    if [ ".$srcpre$srcdir$srcbase" = . ]; then
  +        srcdir="."
  +    fi
  +
       #   now finalize source and destination directory paths
       srcdir=`echo $srcdir | sed -e 's;\([^/]\)$;\1/;'`
       dstdir=`echo $dstdir | sed -e 's;\([^/]\)$;\1/;'`
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jun 25 20:10:00 2009
Received: by mail.ossp.org (Postfix, from userid 24001)
	id F0408752861; Thu, 25 Jun 2009 20:09:59 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/svs/ ChangeLog Makefile.in devtool.conf
Message-Id: <20090625180959.F0408752861@mail.ossp.org>
Date: Thu, 25 Jun 2009 20:09:59 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Jun-2009 20:09:59
  Branch: HEAD                             Handle: 2009062519095900

  Modified files:
    ossp-pkg/svs            ChangeLog Makefile.in devtool.conf

  Log:
    Upgrade build environment to GNU autoconf 2.63 and GNU shtool 2.0.8

  Summary:
    Revision    Changes     Path
    1.10        +5  -0      ossp-pkg/svs/ChangeLog
    1.4         +1  -0      ossp-pkg/svs/Makefile.in
    1.4         +2  -2      ossp-pkg/svs/devtool.conf
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 ChangeLog
  --- ossp-pkg/svs/ChangeLog	7 Oct 2005 10:59:27 -0000	1.9
  +++ ossp-pkg/svs/ChangeLog	25 Jun 2009 18:09:59 -0000	1.10
  @@ -8,6 +8,11 @@
   
     ChangeLog
   
  +  Changes between 1.0.5 and 1.1.0 (07-Oct-2005 to 25-Jun-2009):
  +
  +    *) Upgrade build environment to GNU autoconf 2.63 and GNU shtool 2.0.8
  +       [Ralf S. Engelschall]
  +
     Changes between 1.0.4 and 1.0.5 (29-Sep-2005 to 07-Oct-2005):
   
       *) Fix diff(3) option fiddling introduced in version 1.0.4
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 Makefile.in
  --- ossp-pkg/svs/Makefile.in	13 Jan 2005 11:14:01 -0000	1.3
  +++ ossp-pkg/svs/Makefile.in	25 Jun 2009 18:09:59 -0000	1.4
  @@ -33,6 +33,7 @@
   DESTDIR     =
   prefix      = @prefix@
   exec_prefix = @exec_prefix@
  +datarootdir = @datarootdir@
   bindir      = @bindir@
   libdir      = @libdir@
   includedir  = @includedir@
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 devtool.conf
  --- ossp-pkg/svs/devtool.conf	3 Oct 2005 10:33:48 -0000	1.3
  +++ ossp-pkg/svs/devtool.conf	25 Jun 2009 18:09:59 -0000	1.4
  @@ -3,8 +3,8 @@
   ##
   
   %autogen
  -    @autogen autoconf 2.59 "2.5*"
  -    @autogen shtool 2.0.3  "2.0.*" all
  +    @autogen autoconf 2.63 "2.6*"
  +    @autogen shtool 2.0.8  "2.0.*" all
   
   %autoclean
       @autoclean autoconf
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jun 25 20:10:42 2009
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 1069D752861; Thu, 25 Jun 2009 20:10:42 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/svs/ ChangeLog svs.sh
Message-Id: <20090625181042.1069D752861@mail.ossp.org>
Date: Thu, 25 Jun 2009 20:10:42 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Jun-2009 20:10:42
  Branch: HEAD                             Handle: 2009062519104100

  Modified files:
    ossp-pkg/svs            ChangeLog svs.sh

  Log:
    Support directories and files with spaces in the name.

  Summary:
    Revision    Changes     Path
    1.11        +3  -0      ossp-pkg/svs/ChangeLog
    1.11        +64 -51     ossp-pkg/svs/svs.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 ChangeLog
  --- ossp-pkg/svs/ChangeLog	25 Jun 2009 18:09:59 -0000	1.10
  +++ ossp-pkg/svs/ChangeLog	25 Jun 2009 18:10:41 -0000	1.11
  @@ -10,6 +10,9 @@
   
     Changes between 1.0.5 and 1.1.0 (07-Oct-2005 to 25-Jun-2009):
   
  +    *) Support directories and files with spaces in the name.
  +       [Ralf S. Engelschall]
  +
       *) Upgrade build environment to GNU autoconf 2.63 and GNU shtool 2.0.8
          [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/svs.sh
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 svs.sh
  --- ossp-pkg/svs/svs.sh	7 Oct 2005 10:59:27 -0000	1.10
  +++ ossp-pkg/svs/svs.sh	25 Jun 2009 18:10:41 -0000	1.11
  @@ -39,18 +39,22 @@
   
   #   helper function for portable creating a file difference
   do_diff () {
  -    diff -U3 $1 $2 2>/dev/null
  +    diff -U3 "$1" "$2" 2>/dev/null
       if [ $? -gt 1 ]; then
  -        diff -u $1 $2 2>/dev/null
  +        diff -u "$1" "$2" 2>/dev/null
           if [ $? -gt 1 ]; then
  -            diff -C3 $1 $2 2>/dev/null
  +            diff -C3 "$1" "$2" 2>/dev/null
               if [ $? -gt 1 ]; then
  -                diff $1 $2
  +                diff "$1" "$2"
               fi
           fi
       fi
   }
   
  +#   a newline character
  +NL='
  +'
  +
   #   dispatch into commands
   cmd="$1"
   shift
  @@ -63,34 +67,34 @@
           #   iterate over all files
           for file in "$@"; do
               #   preserve original file
  -            if [ ! -f $file.orig ]; then
  -                cp -p $file $file.orig
  +            if [ ! -f "$file.orig" ]; then
  +                cp -p "$file" "$file.orig"
                   orig=new
               else
                   orig=old
               fi
   
               #   edit file
  -            chmod u+w $file
  -            if [ ".${EDITOR-vi}" = .vim -a -f $file.rej ]; then
  -                ${EDITOR-vi} -o2 $file $file.rej
  +            chmod u+w "$file"
  +            if [ ".${EDITOR-vi}" = .vim -a -f "$file.rej" ]; then
  +                ${EDITOR-vi} -o2 "$file" "$file.rej"
               else
  -                ${EDITOR-vi} $file
  +                ${EDITOR-vi} "$file"
               fi
   
               #   check for editing results
  -            if cmp $file.orig $file >/dev/null 2>&1; then
  +            if cmp "$file.orig" "$file" >/dev/null 2>&1; then
                   if [ ".$orig" = .new ]; then
                       echo "svs: no changes made (keeping original)"
                   else
                       echo "svs: changes reversed (restoring original)"
                   fi
  -                cp -p $file.orig $file
  -                rm -f $file.orig
  +                cp -p "$file.orig" "$file"
  +                rm -f "$file.orig"
               else
                   echo "svs: changes made (preserving original)"
  -                if [ -f $file.rej ]; then
  -                    rm -f $file.rej
  +                if [ -f "$file.rej" ]; then
  +                    rm -f "$file.rej"
                   fi
               fi
           done
  @@ -107,12 +111,14 @@
           fi
           files=""
           for file in "$@"; do
  -            if [ -d $file ]; then
  -                for f in `find $file -type f -name "*.orig" -print | sort`; do
  -                    files="$files $f"
  +            if [ -d "$file" ]; then
  +                OIFS=$IFS; IFS=$NL
  +                for f in `find "$file" -type f -name "*.orig" -print | sort`; do
  +                    files="$files \"$f\""
                   done
  -            elif [ -f $file ]; then
  -                files="$files $file"
  +                IFS=$OIFS
  +            elif [ -f "$file" ]; then
  +                files="$files \"$file\""
               else
                   echo "svs:ERROR: \"$file\" neither regular file nor directory" 1>&2
                   exit 1
  @@ -120,29 +126,30 @@
           done
   
           #   generate patch
  -        for file in $files; do
  +        eval set -- $files
  +        for file; do
               file=`echo "$file" | sed -e 's;^\./;;' -e 's;/\./;/;g' -e 's;\([^/][^/]*\)/\.\.;;g' -e 's;//*;/;g'`
               orig=`echo "$file" | sed -e 's;\.orig$;;' -e 's;$;.orig;'`
               edit=`echo "$file" | sed -e 's;\.orig$;;'`
  -            if [ ! -f $orig ]; then
  +            if [ ! -f "$orig" ]; then
                   echo "svs:WARNING: original file \"$orig\" not found" 1>&2
                   continue
               fi
  -            if [ ! -f $edit ]; then
  +            if [ ! -f "$edit" ]; then
                   #   special case: removed file
                   echo "Index: $edit"
  -                do_diff $orig /dev/null | sed -e "1s/^--- $orig/--- $edit/"
  -            elif [ ! -r $orig ] && [ ! -s $orig ]; then
  +                do_diff "$orig" /dev/null | sed -e "1s/^--- $orig/--- $edit/"
  +            elif [ ! -r "$orig" ] && [ ! -s "$orig" ]; then
                   #   special case: new file
                   echo "Index: $edit"
  -                do_diff /dev/null $edit
  +                do_diff /dev/null "$edit"
               else
                   #   regular case: edited file
  -                if cmp $orig $edit >/dev/null 2>&1; then
  +                if cmp "$orig" "$edit" >/dev/null 2>&1; then
                       :
                   else
                       echo "Index: $edit"
  -                    do_diff $orig $edit
  +                    do_diff "$orig" "$edit"
                   fi
               fi
           done
  @@ -159,12 +166,14 @@
           fi
           files=""
           for file in "$@"; do
  -            if [ -d $file ]; then
  -                for f in `find $file -type f -name "*.orig" -print | sort`; do
  -                    files="$files $f"
  +            if [ -d "$file" ]; then
  +                OIFS=$IFS; IFS=$NL
  +                for f in `find "$file" -type f -name "*.orig" -print | sort`; do
  +                    files="$files \"$f\""
                   done
  -            elif [ -f $file ]; then
  -                files="$files $file"
  +                IFS=$OIFS
  +            elif [ -f "$file" ]; then
  +                files="$files \"$file\""
               else
                   echo "svs:ERROR: \"$file\" neither regular file nor directory" 1>&2
                   exit 1
  @@ -172,28 +181,29 @@
           done
   
           #   backout changes
  -        for file in $files; do
  +        eval set -- $files
  +        for file; do
               file=`echo "$file" | sed -e 's;^\./;;' -e 's;/\./;/;g' -e 's;\([^/][^/]*\)/\.\.;;g' -e 's;//*;/;g'`
               orig=`echo "$file" | sed -e 's;\.orig$;;' -e 's;$;.orig;'`
               edit=`echo "$file" | sed -e 's;\.orig$;;'`
  -            if [ ! -f $orig ]; then
  +            if [ ! -f "$orig" ]; then
                   echo "svs:WARNING: original file \"$orig\" not found" 1>&2
                   continue
               fi
               echo "svs: backing out changes to \"$edit\""
  -            if [ ! -f $edit ]; then
  +            if [ ! -f "$edit" ]; then
                   #   special case: removed file
  -                cp -p $orig $edit
  -                rm -f $orig
  -            elif [ ! -r $orig ] && [ ! -s $orig ]; then
  +                cp -p "$orig" "$edit"
  +                rm -f "$orig"
  +            elif [ ! -r "$orig" ] && [ ! -s "$orig" ]; then
                   #   special case: new file
  -                chmod u+w $orig
  -                rm -f $orig
  -                rm -f $edit
  +                chmod u+w "$orig"
  +                rm -f "$orig"
  +                rm -f "$edit"
               else
                   #   regular case: edited file
  -                cp -p $orig $edit
  -                rm -f $orig
  +                cp -p "$orig" "$edit"
  +                rm -f "$orig"
               fi
           done
           ;;
  @@ -209,16 +219,18 @@
           fi
           files=""
           for file in "$@"; do
  -            if [ -d $file ]; then
  -                for f in `find $file -type f \( -name "*.orig" -or -name "*.rej" \) -print | sort`; do
  +            if [ -d "$file" ]; then
  +                OIFS=$IFS; IFS=$NL
  +                for f in `find "$file" -type f \( -name "*.orig" -or -name "*.rej" \) -print | sort`; do
                       base=`echo "$f" | sed -e 's;\.orig$;;' -e 's;\.rej$;;'`
  -                    if [ ".$f" = ".$base.orig" ] && [ -f $base.orig ] && [ -f $base.rej ]; then
  +                    if [ ".$f" = ".$base.orig" ] && [ -f "$base.orig" ] && [ -f "$base.rej" ]; then
                           continue
                       fi
  -                    files="$files $f"
  +                    files="$files \"$f\""
                   done
  -            elif [ -f $file ]; then
  -                files="$files $file"
  +                IFS=$OIFS
  +            elif [ -f "$file" ]; then
  +                files="$files \"$file\""
               else
                   echo "svs:ERROR: \"$file\" neither regular file nor directory" 1>&2
                   exit 1
  @@ -226,7 +238,8 @@
           done
   
           #   show status on files
  -        for file in $files; do
  +        eval set -- $files
  +        for file; do
               file=`echo "$file" | sed -e 's;^\./;;' -e 's;/\./;/;g' -e 's;\([^/][^/]*\)/\.\.;;g' -e 's;//*;/;g'`
               base=`echo "$file" | sed -e 's;\.orig$;;' -e 's;\.rej$;;'`
               prefix="?"
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jun 25 20:11:03 2009
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 0F882752861; Thu, 25 Jun 2009 20:11:03 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/svs/ README VERSION
Message-Id: <20090625181103.0F882752861@mail.ossp.org>
Date: Thu, 25 Jun 2009 20:11:03 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Jun-2009 20:11:03
  Branch: HEAD                             Handle: 2009062519110200

  Modified files:
    ossp-pkg/svs            README VERSION

  Log:
    bump version before release

  Summary:
    Revision    Changes     Path
    1.8         +1  -1      ossp-pkg/svs/README
    1.7         +1  -1      ossp-pkg/svs/VERSION
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/README
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 README
  --- ossp-pkg/svs/README	7 Oct 2005 11:02:02 -0000	1.7
  +++ ossp-pkg/svs/README	25 Jun 2009 18:11:02 -0000	1.8
  @@ -5,7 +5,7 @@
     |_|_|_|  \___/|____/____/|_|     |___/ \_/ |___/
   
     OSSP svs - Stupid/Silly/Simple Versioning System
  -  Version 1.0.5 (07-Oct-2005)
  +  Version 1.1.0 (25-Jun-2009)
   
     ABSTRACT
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/VERSION
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 VERSION
  --- ossp-pkg/svs/VERSION	7 Oct 2005 11:02:02 -0000	1.6
  +++ ossp-pkg/svs/VERSION	25 Jun 2009 18:11:02 -0000	1.7
  @@ -2,5 +2,5 @@
     VERSION -- Version Information for OSSP svs (syntax: Text)
     [automatically generated and maintained by GNU shtool]
   
  -  This is OSSP svs, Version 1.0.5 (07-Oct-2005)
  +  This is OSSP svs, Version 1.1.0 (25-Jun-2009)
   
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jun 25 20:12:00 2009
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 49109752861; Thu, 25 Jun 2009 20:12:00 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/svs/ ChangeLog Makefile.in README configure.ac sv...
Message-Id: <20090625181200.49109752861@mail.ossp.org>
Date: Thu, 25 Jun 2009 20:12:00 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Jun-2009 20:12:00
  Branch: HEAD                             Handle: 2009062519115900

  Modified files:
    ossp-pkg/svs            ChangeLog Makefile.in README configure.ac svs.pod
                            svs.sh

  Log:
    adjust copyright messages

  Summary:
    Revision    Changes     Path
    1.12        +3  -0      ossp-pkg/svs/ChangeLog
    1.5         +2  -2      ossp-pkg/svs/Makefile.in
    1.9         +2  -2      ossp-pkg/svs/README
    1.3         +4  -4      ossp-pkg/svs/configure.ac
    1.5         +2  -2      ossp-pkg/svs/svs.pod
    1.12        +2  -2      ossp-pkg/svs/svs.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 ChangeLog
  --- ossp-pkg/svs/ChangeLog	25 Jun 2009 18:10:41 -0000	1.11
  +++ ossp-pkg/svs/ChangeLog	25 Jun 2009 18:11:59 -0000	1.12
  @@ -9,6 +9,9 @@
     ChangeLog
   
     Changes between 1.0.5 and 1.1.0 (07-Oct-2005 to 25-Jun-2009):
  +    
  +    *) Adjust copyright messages for years 2006-2009.
  +       [Ralf S. Engelschall]
   
       *) Support directories and files with spaces in the name.
          [Ralf S. Engelschall]
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/Makefile.in
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 Makefile.in
  --- ossp-pkg/svs/Makefile.in	25 Jun 2009 18:09:59 -0000	1.4
  +++ ossp-pkg/svs/Makefile.in	25 Jun 2009 18:11:59 -0000	1.5
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP svs -- Stupid/Silly/Simple Versioning System
  -##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2009 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2009 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP svs, a stupid/silly/simple versioning
   ##  system which can found at http://www.ossp.org/pkg/tool/svs/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/README
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 README
  --- ossp-pkg/svs/README	25 Jun 2009 18:11:02 -0000	1.8
  +++ ossp-pkg/svs/README	25 Jun 2009 18:11:59 -0000	1.9
  @@ -17,8 +17,8 @@
   
     COPYRIGHT AND LICENSE
   
  -  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  -  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  +  Copyright (c) 2003-2009 Ralf S. Engelschall <rse@engelschall.com>
  +  Copyright (c) 2003-2009 The OSSP Project <http://www.ossp.org/>
   
     This file is part of OSSP svs, a stupid/silly/simple versioning
     system which can found at http://www.ossp.org/pkg/tool/svs/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/configure.ac
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 configure.ac
  --- ossp-pkg/svs/configure.ac	13 Jan 2005 11:14:01 -0000	1.2
  +++ ossp-pkg/svs/configure.ac	25 Jun 2009 18:11:59 -0000	1.3
  @@ -1,7 +1,7 @@
   dnl ##
   dnl ##  OSSP svs -- Stupid/Silly/Simple Versioning System
  -dnl ##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  -dnl ##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  +dnl ##  Copyright (c) 2003-2009 Ralf S. Engelschall <rse@engelschall.com>
  +dnl ##  Copyright (c) 2003-2009 The OSSP Project <http://www.ossp.org/>
   dnl ##
   dnl ##  This file is part of OSSP svs, a stupid/silly/simple versioning
   dnl ##  system which can found at http://www.ossp.org/pkg/tool/svs/
  @@ -34,8 +34,8 @@
   
   SVS_VERSION_STR="`./shtool version -l txt -d long VERSION`"
   ./shtool echo -e "Configuring %BOSSP svs%b (Stupid/Silly/Simple Versioning System), version %B${SVS_VERSION_STR}%b"
  -echo "Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>"
  -echo "Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>"
  +echo "Copyright (c) 2003-2009 Ralf S. Engelschall <rse@engelschall.com>"
  +echo "Copyright (c) 2003-2009 The OSSP Project <http://www.ossp.org/>"
   AC_SUBST(SVS_VERSION_STR)
   
   AC_PREFIX_DEFAULT(/usr/local)
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/svs.pod
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 svs.pod
  --- ossp-pkg/svs/svs.pod	7 Oct 2005 11:00:36 -0000	1.4
  +++ ossp-pkg/svs/svs.pod	25 Jun 2009 18:11:59 -0000	1.5
  @@ -1,7 +1,7 @@
   ##
   ##  OSSP svs -- Stupid/Silly/Simple Versioning System
  -##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2009 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2009 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP svs, a stupid/silly/simple versioning
   ##  system which can found at http://www.ossp.org/pkg/tool/svs/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/svs.sh
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 svs.sh
  --- ossp-pkg/svs/svs.sh	25 Jun 2009 18:10:41 -0000	1.11
  +++ ossp-pkg/svs/svs.sh	25 Jun 2009 18:11:59 -0000	1.12
  @@ -1,8 +1,8 @@
   #!/bin/sh
   ##
   ##  OSSP svs -- Stupid/Silly/Simple Versioning System
  -##  Copyright (c) 2003-2005 Ralf S. Engelschall <rse@engelschall.com>
  -##  Copyright (c) 2003-2005 The OSSP Project <http://www.ossp.org/>
  +##  Copyright (c) 2003-2009 Ralf S. Engelschall <rse@engelschall.com>
  +##  Copyright (c) 2003-2009 The OSSP Project <http://www.ossp.org/>
   ##
   ##  This file is part of OSSP svs, a stupid/silly/simple versioning
   ##  system which can found at http://www.ossp.org/pkg/tool/svs/
  @@ .

From ossp-cvs-owner@ossp.org  Thu Jun 25 20:13:00 2009
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 7FCB975286A; Thu, 25 Jun 2009 20:13:00 +0200 (CEST)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/svs/ AUTHORS ChangeLog README THANKS devtool devt...
Message-Id: <20090625181300.7FCB975286A@mail.ossp.org>
Date: Thu, 25 Jun 2009 20:13:00 +0200 (CEST)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   25-Jun-2009 20:13:00
  Branch: HEAD                             Handle: 2009062519130000

  Modified files:
    ossp-pkg/svs            AUTHORS ChangeLog README THANKS devtool
                            devtool.conf devtool.func

  Log:
    strip trailing whitespaces

  Summary:
    Revision    Changes     Path
    1.2         +2  -2      ossp-pkg/svs/AUTHORS
    1.13        +4  -4      ossp-pkg/svs/ChangeLog
    1.10        +2  -2      ossp-pkg/svs/README
    1.3         +2  -2      ossp-pkg/svs/THANKS
    1.2         +1  -1      ossp-pkg/svs/devtool
    1.5         +1  -1      ossp-pkg/svs/devtool.conf
    1.3         +1  -1      ossp-pkg/svs/devtool.func
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/AUTHORS
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 AUTHORS
  --- ossp-pkg/svs/AUTHORS	14 Dec 2004 19:18:37 -0000	1.1
  +++ ossp-pkg/svs/AUTHORS	25 Jun 2009 18:13:00 -0000	1.2
  @@ -1,5 +1,5 @@
  -   _        ___  ____ ____  ____  
  -  |_|_ _   / _ \/ ___/ ___||  _ \   _____   _____ 
  +   _        ___  ____ ____  ____
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _____   _____
     _|_||_| | | | \___ \___ \| |_) | / __\ \ / / __|
    |_||_|_| | |_| |___) |__) |  __/  \__ \\ V /\__ \
     |_|_|_|  \___/|____/____/|_|     |___/ \_/ |___/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 ChangeLog
  --- ossp-pkg/svs/ChangeLog	25 Jun 2009 18:11:59 -0000	1.12
  +++ ossp-pkg/svs/ChangeLog	25 Jun 2009 18:13:00 -0000	1.13
  @@ -1,5 +1,5 @@
  -   _        ___  ____ ____  ____  
  -  |_|_ _   / _ \/ ___/ ___||  _ \   _____   _____ 
  +   _        ___  ____ ____  ____
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _____   _____
     _|_||_| | | | \___ \___ \| |_) | / __\ \ / / __|
    |_||_|_| | |_| |___) |__) |  __/  \__ \\ V /\__ \
     |_|_|_|  \___/|____/____/|_|     |___/ \_/ |___/
  @@ -9,7 +9,7 @@
     ChangeLog
   
     Changes between 1.0.5 and 1.1.0 (07-Oct-2005 to 25-Jun-2009):
  -    
  +
       *) Adjust copyright messages for years 2006-2009.
          [Ralf S. Engelschall]
   
  @@ -61,7 +61,7 @@
          [Ralf S. Engelschall]
   
       *) When editing a file look for corresponding .rej file
  -       and if found and the editor is Vim, open both files. 
  +       and if found and the editor is Vim, open both files.
          [Ralf S. Engelschall]
   
       *) When searching for *.orig files, sort the resulting filename
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/README
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 README
  --- ossp-pkg/svs/README	25 Jun 2009 18:11:59 -0000	1.9
  +++ ossp-pkg/svs/README	25 Jun 2009 18:13:00 -0000	1.10
  @@ -1,5 +1,5 @@
  -   _        ___  ____ ____  ____  
  -  |_|_ _   / _ \/ ___/ ___||  _ \   _____   _____ 
  +   _        ___  ____ ____  ____
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _____   _____
     _|_||_| | | | \___ \___ \| |_) | / __\ \ / / __|
    |_||_|_| | |_| |___) |__) |  __/  \__ \\ V /\__ \
     |_|_|_|  \___/|____/____/|_|     |___/ \_/ |___/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/THANKS
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 THANKS
  --- ossp-pkg/svs/THANKS	7 Oct 2005 11:39:43 -0000	1.2
  +++ ossp-pkg/svs/THANKS	25 Jun 2009 18:13:00 -0000	1.3
  @@ -1,5 +1,5 @@
  -   _        ___  ____ ____  ____  
  -  |_|_ _   / _ \/ ___/ ___||  _ \   _____   _____ 
  +   _        ___  ____ ____  ____
  +  |_|_ _   / _ \/ ___/ ___||  _ \   _____   _____
     _|_||_| | | | \___ \___ \| |_) | / __\ \ / / __|
    |_||_|_| | |_| |___) |__) |  __/  \__ \\ V /\__ \
     |_|_|_|  \___/|____/____/|_|     |___/ \_/ |___/
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/devtool
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 devtool
  --- ossp-pkg/svs/devtool	14 Dec 2004 19:18:37 -0000	1.1
  +++ ossp-pkg/svs/devtool	25 Jun 2009 18:13:00 -0000	1.2
  @@ -1,7 +1,7 @@
   #!/bin/sh
   ##
   ##  devtool -- Development Tool
  -##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   if [ $# -eq 0 ]; then
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/devtool.conf
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 devtool.conf
  --- ossp-pkg/svs/devtool.conf	25 Jun 2009 18:09:59 -0000	1.4
  +++ ossp-pkg/svs/devtool.conf	25 Jun 2009 18:13:00 -0000	1.5
  @@ -16,7 +16,7 @@
   %version
       ./shtool version -l txt -n "OSSP svs" -e VERSION
       V=`./shtool version -l txt -d long VERSION`
  -    sed -e "s/Version .*(.*)/Version $V/g" <README >README.n 
  +    sed -e "s/Version .*(.*)/Version $V/g" <README >README.n
       mv README.n README
   
   %dist
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/svs/devtool.func
  ============================================================================
  $ cvs diff -u -r1.2 -r1.3 devtool.func
  --- ossp-pkg/svs/devtool.func	13 Jan 2005 11:14:01 -0000	1.2
  +++ ossp-pkg/svs/devtool.func	25 Jun 2009 18:13:00 -0000	1.3
  @@ -1,6 +1,6 @@
   ##
   ##  devtool.func -- Development Tool Functions
  -##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com> 
  +##  Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
   ##
   
   devtool_require () {
  @@ .

From ossp-cvs-owner@ossp.org  Mon Nov 23 22:55:24 2009
Received: by mail.ossp.org (Postfix, from userid 24001)
	id 617A8752835; Mon, 23 Nov 2009 22:55:24 +0100 (CET)
From: "Ralf S. Engelschall" <rse@ossp.org>
To: ossp-cvs@ossp.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Subject: [CVS] OSSP: ossp-pkg/shtool/ ChangeLog sh.platform
Message-Id: <20091123215524.617A8752835@mail.ossp.org>
Date: Mon, 23 Nov 2009 22:55:24 +0100 (CET)
Reply-To: ossp-dev@ossp.org
Sender: ossp-cvs-owner@ossp.org
Precedence: list
List-Server: OSSP Petidomo/4.0
List-Owner: <mailto:ossp@ossp.org>
List-Archive: <ftp://ftp.ossp.org/mail/>
List-Post: <mailto:ossp-cvs@ossp.org>
List-Help: <mailto:petidomo@ossp.org?body=help>
List-Subscribe: <mailto:petidomo@ossp.org?body=subscribe%20ossp-cvs>
List-Unsubscribe: <mailto:petidomo@ossp.org?body=unsubscribe%20ossp-cvs>

  OSSP CVS Master Repository
  http://cvs.ossp.org/
  ____________________________________________________________________________

  Server: cvs.ossp.org                     Name:   Ralf S. Engelschall
  Root:   /v/ossp/cvs                      Email:  rse@ossp.org
  Module: ossp-pkg                         Date:   23-Nov-2009 22:55:24
  Branch: HEAD                             Handle: 2009112321552300

  Modified files:
    ossp-pkg/shtool         ChangeLog sh.platform

  Log:
    reduce platform version M.N.R to M.N also on Linux platforms (like
    Debian 5.0.3)

  Summary:
    Revision    Changes     Path
    1.244       +4  -0      ossp-pkg/shtool/ChangeLog
    1.31        +1  -1      ossp-pkg/shtool/sh.platform
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/ChangeLog
  ============================================================================
  $ cvs diff -u -r1.243 -r1.244 ChangeLog
  --- ossp-pkg/shtool/ChangeLog	23 Dec 2008 19:12:05 -0000	1.243
  +++ ossp-pkg/shtool/ChangeLog	23 Nov 2009 21:55:23 -0000	1.244
  @@ -11,6 +11,10 @@
   
    Changes between 2.0.8 and 2.0.9 (18-Jul-2008 to xx-XXX-2008):
   
  +   *) Reduce "shtool platform" version M.N.R to M.N also on Linux
  +      platforms (like Debian 5.0.3)
  +      [Ralf S. Engelschall]
  +
      *) Fix "mkln -s /foo /foo/bar" (achieving a "bar -> ." symlink)
         [Ralf S. Engelschall]
   
  @@ .
  patch -p0 <<'@@ .'
  Index: ossp-pkg/shtool/sh.platform
  ============================================================================
  $ cvs diff -u -r1.30 -r1.31 sh.platform
  --- ossp-pkg/shtool/sh.platform	2 Apr 2008 20:13:44 -0000	1.30
  +++ ossp-pkg/shtool/sh.platform	23 Nov 2009 21:55:23 -0000	1.31
  @@ -239,7 +239,7 @@
                   n=`echo ${tagfile} | sed -e 's/[_-]release$//' -e 's/[_-]version$//'`
                   v=`(grep VERSION /etc/${tagfile}; cat /etc/${tagfile}) | grep '[0-9]' | sed -e 'q' |\
                      sed -e 's/^/#/' \
  -                       -e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' \
  +                       -e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\)\(\.[0-9][0-9]*\).*$/\1[\2]/' \
                          -e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' \
                          -e 's/^#[^0-9]*\([0-9][0-9]*\).*$/\1/' \
                          -e 's/^#.*$//'`
  @@ .

